diff --git a/10_neural_nets_with_keras.ipynb b/10_neural_nets_with_keras.ipynb index 8e28f454f..45893f735 100644 --- a/10_neural_nets_with_keras.ipynb +++ b/10_neural_nets_with_keras.ipynb @@ -1,6397 +1,7720 @@ { - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**10장 – 케라스를 사용한 인공 신경망 소개**\n", - "\n", - "_이 노트북은 10장에 있는 모든 샘플 코드와 연습문제 해답을 가지고 있습니다._" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - " \n", - "
\n", - " 구글 코랩에서 실행하기\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 설정" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "먼저 몇 개의 모듈을 임포트합니다. 맷플롯립 그래프를 인라인으로 출력하도록 만들고 그림을 저장하는 함수를 준비합니다. 또한 파이썬 버전이 3.5 이상인지 확인합니다(파이썬 2.x에서도 동작하지만 곧 지원이 중단되므로 파이썬 3을 사용하는 것이 좋습니다). 사이킷런 버전이 0.20 이상인지와 텐서플로 버전이 2.0 이상인지 확인합니다." - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "# 파이썬 ≥3.5 필수\n", - "import sys\n", - "assert sys.version_info >= (3, 5)\n", - "\n", - "# 사이킷런 ≥0.20 필수\n", - "import sklearn\n", - "assert sklearn.__version__ >= \"0.20\"\n", - "\n", - "# 텐서플로 ≥2.0 필수\n", - "import tensorflow as tf\n", - "assert tf.__version__ >= \"2.0\"\n", - "\n", - "# 공통 모듈 임포트\n", - "import numpy as np\n", - "import os\n", - "\n", - "# 노트북 실행 결과를 동일하게 유지하기 위해\n", - "np.random.seed(42)\n", - "\n", - "# 깔끔한 그래프 출력을 위해\n", - "%matplotlib inline\n", - "import matplotlib as mpl\n", - "import matplotlib.pyplot as plt\n", - "mpl.rc('axes', labelsize=14)\n", - "mpl.rc('xtick', labelsize=12)\n", - "mpl.rc('ytick', labelsize=12)\n", - "\n", - "# 그림을 저장할 위치\n", - "PROJECT_ROOT_DIR = \".\"\n", - "CHAPTER_ID = \"ann\"\n", - "IMAGES_PATH = os.path.join(PROJECT_ROOT_DIR, \"images\", CHAPTER_ID)\n", - "os.makedirs(IMAGES_PATH, exist_ok=True)\n", - "\n", - "def save_fig(fig_id, tight_layout=True, fig_extension=\"png\", resolution=300):\n", - " path = os.path.join(IMAGES_PATH, fig_id + \".\" + fig_extension)\n", - " print(\"그림 저장:\", fig_id)\n", - " if tight_layout:\n", - " plt.tight_layout()\n", - " plt.savefig(path, format=fig_extension, dpi=resolution)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 퍼셉트론" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**노트**: 사이킷런 향후 버전에서 `max_iter`와 `tol` 매개변수의 기본값이 바뀌기 때문에 경고를 피하기 위해 명시적으로 지정합니다." - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "from sklearn.datasets import load_iris\n", - "from sklearn.linear_model import Perceptron\n", - "\n", - "iris = load_iris()\n", - "X = iris.data[:, (2, 3)] # 꽃잎 길이, 꽃잎 너비\n", - "y = (iris.target == 0).astype(np.int)\n", - "\n", - "per_clf = Perceptron(max_iter=1000, tol=1e-3, random_state=42)\n", - "per_clf.fit(X, y)\n", - "\n", - "y_pred = per_clf.predict([[2, 0.5]])" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([1])" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "y_pred" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "그림 저장: perceptron_iris_plot\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAsgAAAEYCAYAAABBfQDEAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAABUQElEQVR4nO3deZzNZRvH8c81ZsxoGCmMisk6hWQJKZWlspUo7dTTKmnfUJmx73uylqVQSZtUaJESIUIeS1poisKUxzIYxtzPH+c4xjS7cc4s3/frdV7Oue/79/tdZzbX3HP/7succ4iIiIiIiEdQoAMQEREREclLlCCLiIiIiKSgBFlEREREJAUlyCIiIiIiKShBFhERERFJQQmyiIiIiEgKSpBFRERERFLwW4JsZqFmNsXMfjOz/Wa21sxaZzD+KTP7y8z2mdlUMwtN0VfRzL40s4NmttnMrvHPuxARERGRgs6fM8jBwO9AE6Ak0BN428wqph5oZi2BHsDVwPlAZaBPiiFvAmuAs4EXgXfMrMzpDF5ERERECgcLZCU9M/sB6OOcezdV+xvANufcC97XVwOznHPlzCwaWA+Uds7t9/Yv8fZP9O87EBEREZGCJjhQFzazSCAa2JBGd01gborX64BIMzvb2/fr8eQ4RX/NdK7TGegMEBoafklk5IW5EL2IiIiI+FtcXPp9UVFZOWYbzsVbZtcJSIJsZiHALOA159zmNIYUB/ameH38eYk0+o73n5fWtZxzk4HJAOefX9+98MKqU4hcRERERAKlS5f0+154ISvH1M/Sdfy+i4WZBQEzgCPAo+kMOwBEpHh9/Pn+NPqO9+9HREREROQU+TVBNjMDpgCRQAfn3NF0hm4Aaqd4XRvY6Zz729tX2cxKpOpPa6mGiIiIiBQQEamnSDNpz6wvPX69Sc/MJgJ1gGuccwcyGNcKmA40B3YA7wErnXM9vP3LgW/w7ITRGpgGVHPO7c7o+lpiISIiIlJ4deliq51zma6z8Oc+yOcDD+FJkP8yswPeR0czi/I+jwJwzi0AhgJfAnHAb0CvFKe7Hc8ikj3AYODmzJJjEREREZGs8NtNes6534CM7hosnmr8SGBkOufaBjTNrdhERERERI5TqWkRERERkRSUIIuIiIiIpBCwQiEiIiIiIqdbt26wb9/xV5dckpVjNIMsIiIiIgXWieQ465Qgi4iIiIikoARZRERERCQFJcgiIiIiIikoQRYRERERSUEJsoiIiIgUWBER2T9G27yJiIiISIE1dOiJ5126rF6dlWM0gywiIiIikoISZBERERGRFApVgrxnz+8cOBAf6DBEREREJA8rVGuQ9+/fRUxMVVq1eoHmzR8nJCQs0CGJiIiIFEpduqTfN3Fi2u0PPwzO/bvdDCZMyJ24oJDNIAMcOrSX99/vTq9eF7BixSySk5MDHZKIiIiIZEFayXFG7TlVqBLk0NAQ3/N//olj2rRODB7ckB9/XBy4oEREREQkTylUCXKNGhUYM6YzpUuf2BAvLm41o0Y1Y9y4tvz556YARiciIiIieUGhSpDNjIcfbsOmTRPo1q0DYWFFfX3r139Ev361mDWrC/v27QxglCIiIiISSH5NkM3sUTNbZWaJZjY9g3ETzexAikeime1P0b/YzA6n6P8xO3GULBlO//53sWHDODp1aoaZAZCcfIwlSyYRE1OVjz/uR2JiQk7fqoiIiIjkU/6eQd4B9AemZjTIOdfFOVf8+AN4E5iTatijKcZckJNgKlQow9SpT7B8+QiaN7/Y156YeIB582KJjY1m2bJpJCcfy8npRURERCQXeec0s9ye4+u43L7tLysXNesPlHfO3ZOFseHAX8D1zrmvvG2LgZnOuVezc91LLqnqli8fkWafc46FC7+nR4/X2Lgx7qS+886rxU03DaNmzZbZuZyIiIiI5CFduthq51z9zMblhzXIHYDdwNep2geZWbyZLTWzpukdbGadvcs6VsXH70v3ImZGq1aXsGrVKCZOfIRy5Ur5+rZvX8/Ysa146aWW/PHHD6f0ZkREREQkb8sPCfJ/gNfdyVPd3YHKwHnAZGCemVVJ62Dn3GTnXH3nXP2Uu1ekJzi4CPfddy0bN44nJuZ2zjgj1Ne3ceOnDBhQh9dfv489e7afynsSERERkTwqTyfIZhYFNAVeT9nunFvhnNvvnEt0zr0GLAXa5Oa1ixcvRkzM7WzaNIH777+WoKCg49dm2bJpxMZW48MPYzh8eH8mZxIRERGR/CRPr0E2sxeBls65qzIZNx+Y75x7KaNxGa1BzsyGDXG88MJrzJ+/+qT2EiXKcv31vbniigcpUqRQVe4WERGRfKBbN9iXxirTiAgYOtT/8fjbye+/Ps6tyvSWPn9v8xZsZmFAEaCImYWZWUZZ5d3A9FTnONPMWh4/1sw6AlcBC05b4EDNmlHMnRvDggV9qF27kq99//5dvPlmV/r1q8W6dR8SiF84RERERNKTVnKcUXtBk5P36e8lFj2BQ0APoJP3eU8zi/LuZxx1fKCZXQaU59/bu4Xg2SpuNxAPPAa0d85t8UP8NG9emxUrRjBlyhOUL3+2r/2vvzYzYUI7Ro5sxm+/rfJHKCIiIiJyGvg1QXbO9XbOWapHb+dcnHc/47gUY791zoU75/anOsdu51wD51wJ59yZzrlGzrnP/Pk+goKCuOuuZmzYMJ5+/TpRokQxX99PP33FoEENmDKlI/Hx2/wZloiIiIjkgjx9k15eV6xYKN2738zmzRPp2rUNwcFFfH3fffcGvXtfyLvvduPgwf8FLkgRERERyRYlyLmgTJmSjB7dmbVrX6Jdu0a+9qSkRD77bBgxMVX44osxJCUdCWCUIiIiIpIVSpBzUXT0ecyZ04NFiwbQoEE1X3tCwj/MmfMkffrUYPXqd3Qjn4iIiPhNRDplINJrL2hy8j4Dss1boJzKNm/Z5ZxjzpylxMTMYOvWnSf1Va58GR06DKdKlcv9EouIiIiIFKxS0/mSmXHrrVfwww8vM3TovZQqVdzX9+uv3zJsWGMmTbqZXbt+DmCUIiIiIpKaEuTTLDQ0hCefbMemTRN48skbKFr0xLbPa9a8S+/e1Zk9+wkOHIgPYJQiIiIicpwSZD8566wSDB16Hz/88DK33HKFrz05OYkvv3yJmJiqLFw4lKNHDwcwShERERHRGuQA+e67LXTvPp1vvtl4UvtZZ0XRrt1AGjS4g6Ag/f4iIiIip8YfpabzSzlrrUHO4xo0iOaLLwYwZ04PqlU719f+zz9xTJvWicGDG/Ljj18GMEIREREpCPxRarqglbNWghxAZka7do1Yu/YlxozpTOnSJ/YhiYtbzahRzRk3ri1//rkpgFGKiIiIFC5KkPOAkJBgHn64DZs2TaBbtw6EhRX19a1f/xH9+1/ErFld2LdvZwZnEREREZHcoAQ5DylZMpz+/e9iw4ZxdOrUDDMD4NixZJYsmURMTFU+/rgfiYkJAY5UREREpOBSgpwHVahQhqlTn2D58hE0b36xrz0x8QDz5sUSGxvN0qVTSU4+FsAoRURERAomJch5WN26lZk/vw8ffhhDjRpRvva9e3cwY8b9DBhQlw0bFgYwQhEREcnr/FFquqCVs9Y2b/lEUtIxXn99Eb17v8Fff+05qa9GjRbcdNMwype/OJ2jRURERETbvBUwwcFFuO++a9m4cTwxMbcTHh7m69u48VMGDKjD66/fx5492wMYpYiIiEj+pwQ5nylevBgxMbezceN47r//Wl8xEeccy5ZNIza2GnPn9uTw4f0BjlREREQkf1KCnE+dc85ZTJjwCKtXj6Z160t87UePHmL+/AHExFTlq68mcOxYUgCjFBEREcl//LoG2cweBe4BagFvOufuSWfcPcAU4FCK5uudc4u9/RWBacClQBzwqHPu88yun5/XIGdm0aJ1dO8+nXXrtp7UXq7chdx44xAuvritb9s4ERERyV15udRyly7p902c+O+2nLwXf73/hx+GtFJXM5gwISux1ce5VZkmRP6eQd4B9AemZmHst8654ikei1P0vQmsAc4GXgTeMbMyuR5tPtK8eW1WrBjB1KlPUL782b72v/7azIQJ7Rg5shm//bYqgBGKiIgUXAWp1HJO3ou/3n9687oZzffmJAa/JsjOufeccx8Af+f0HGYWDdQDejnnDjnn3gXWAx1yJ8r8KygoiE6dmrFhw3j697+LEiWK+fp++ukrBg1qwJQpHYmP3xa4IEVERETyuLy8BrmumcWb2RYzizGzYG97TeBX51zKu9DWedv/xcw6m9kqM1sVH58Pf43LgWLFQunWrQObN0+ka9c2BAcX8fV9990b9O59Ae++242DB/8XuCBFRERE8qi8miB/DVwElMUzM3wH8Jy3rziwN9X4vUCJtE7knJvsnKvvnKtfunQ+3a06h8qUKcno0Z1Zu/Yl2rVr5GtPSjrCZ58NIyamCl98MYakpCMBjFJEREQkb8mTCbJz7lfn3FbnXLJzbj3QF7jZ230ASJ3pRgDa1ywd0dHnMWdOD778ciANGlTztSck/MOcOU/Sp08NVq9+h8JUNEZEREQkPXkyQU6DA47fcbgBqGxmKWeMa3vbJQONG9fgm2+GMnPms1SqFOlr3737F1555RaGDWvML78sC2CEIiIi+VNBKrWck/fir/ef3oZcGW3UlZMY/L3NWzAQDPQCygMPAknOuaRU41oD3zvndprZhcA7wBznXB9v/3LgG6An0BrPlm/VnHO7M7p+Qd7mLbsSE48yYcInDBo0hz17DpzUV7duB268cTBly1YNUHQiIiIiuS+vlpruiWdv4x5AJ+/znmYWZWYHzCzKO+5q4AczSwA+Ad4DBqY4z+1AfWAPMBi4ObPkWE4WGhrCk0+2Y/PmiTz1VDuKFg329a1Z8y69e1dn9uwnOHAgPoBRioiIiPifX2eQA00zyOnbunUnMTEzefvtJSe1FytWklatXqB588cJCQkLUHQiIiIipy6vziBLHlWpUiQzZz7D0qVDueKKGr72Q4f28v773enV6wJWrJhFcnJyAKMUEREROf00gyz/4pzjww9X8MILr/PTTztO6ouKqkeHDsO54IJmAYpOREQKq7xcztlfclJqObty8nE+9RLQWbvOqdIMsuSYmdGuXSPWrn2Jl17qTMr9o+PivmfUqOaMG9eWP//cFMAoRUSksClI5ZxzKiellrMrJx/n3CwBnRc+n0qQJV0hIcF06dKGTZsm0K1bB8LCivr61q//iH79ajFrVhf27v0rgFGKiIiI5C4lyJKpkiXD6d//LjZsGEenTs0w72aDycnHWLJkErGxVfn4434kJiYEOFIRERGRU6cEWbKsQoUyTJ36BMuXj6B584t97YmJCcybF0tsbDRLl04lOflYAKMUEREROTVKkCXb6tatzPz5ffjwwxhq1Ijyte/du4MZM+5nwIC6bNiwMIARioiIiOScEmTJETOjVatLWLVqFBMnPkK5cqV8fdu3r2fs2FaMGdOCP/5YF8AoRUSkIClI5ZxzKiellrMrJx/n3CwBnRc+n9rmTXLFgQOHGDVqLiNHfkBCwmFfu5nRqNF/uOGGfpQqVT6AEYqIiEhhp23exK+KFy9GTMztbNw4nvvvv5agIM+XlnOOb7+dTmxsNHPn9uTw4f0BjlREREQkY0qQJVedc85ZTJjwCKtXj6Z160t87UePHmL+/AHExFTlq68mcOxYUgCjFBEREUmfEmQ5LWrWjGLu3BgWLOhD7dqVfO379+/izTe70q9fLdat+5DCtMRHRERE8gclyHJaNW9emxUrRjB16hOUL3+2r/2vvzYzYUI7Ro5syrZt3wUwQhEREZGTZekmPTMLA54ArgbKkiqxds5dnNZxeY1u0gusQ4cSGTv2I4YOfZd9+w6e1NegwZ20azeA0qUrBiY4ERHx6dYt7XK/EREwdKj/4zkVXbqk3zdxYtrtDz+cdolkM5gwIbDH5ORzk91jCtLnP7XcvklvPNAD2AZ8ALyb6iGSqWLFQunWrQObNk2ga9c2BAcX8fV9990b9O59Ae++242DB/8XuCBFRCTN5Cij9oImvbnDjOYU/XVMTj432T2msH/+AYKzOK49cItz7vPTGIsUEmXKlGT06M507XodL744g7lzlwOQlHSEzz4bxrJlU2jTJoYmTboSHFw0wNGKiIhIYZPVGeSDwO+nMxApfKKjz2POnB58+eVAGjaM9rUnJPzDnDlP0adPDVavnqMb+URERMSvspogDwWeNsvNOi0iHo0b12DJkiHMmvUslSpF+tp37/6FV165lWHDGvPLL8sCGKGIiIgUJukmyGb24fEHcA1wG7DNzOan7PP2Z4mZPWpmq8ws0cymZzDuP2a22sz2mdkfZjbUzIJT9C82s8NmdsD7+DGrMUjeZGbccssV/PDDywwbdh+lShX39f3667cMG9aYSZNuZteunwMYpYiIiBQGGc0g/53q8T6wCPgrjb6s2gH0B6ZmMu4M4EmgNHApnt0znk015lHnXHHv44JsxCB5WGhoCE88cQObN0/kqafaUbToiWXya9a8S9++FzJ79hMcOBAfwChFRAq2iIjstRc06f29PKO/o/vrmJx8brJ7TGH//EMWt3nL9Yua9QfKO+fuyeL4p4Fmzrm23teLgZnOuVezc11t85b/bN26k5iYmbz99pKT2sPCImjd+kWaN3+ckJCwAEUnIiIi+UmubvNmZovM7Mw02iPMbFEO4suuq4ANqdoGmVm8mS01s6bpHWhmnb3LOlbFxxei/UkKiEqVIpk58xmWLh3KFVfU8LUfPryP99/vTq9eF7BixSySk5MDGKWIiIgUJFm9Sa8pkNZ+W2HAlbkWTRrM7D6gPjA8RXN3oDJwHjAZmGdmVdI63jk32TlX3zlXv3TpQvS3gQKmQYNovvhiAO+88zzVqp3ra//nnzimTevE4MEN+PHHLwMYoYiIiBQUGSbIZlbPzOp5X158/LX30QDoDGw/XcGZWXtgENDaOedbdOqcW+Gc2++cS3TOvQYsBdqcrjgkbzAzbrjhUtaufYmXXupMyl944uK+Z9So5owb15YdOzYGMEoRERHJ7zIrFLIKcN7Hp2n0HwIey+2gAMysFfAKcJ1zbn0mwx2gLegKiZCQYLp0acOddzZl2LD3GDPmQw4fPgLA+vUf8d//fsIVVzzI9df3pmTJcgGOVkREcos/yiz7M7a8fJ3syqtx5VRmSywqAVXwJJ8Nva+PP84DIpxzme1I4WNmwWYWBhQBiphZWMrt21KMaw7MAjo451am6jvTzFoeP9bMOuJZo7wgq3FIwRARcQb9+nViw4Zx3HVXM45v0+1cMkuWTCI2tioff9yPxMSEAEcqIiK5wR9llnOqoF0nu/JqXDmVYYLsnPvNObfNORfknFvlfX388adz7lg2r9cTz6xzD6CT93lPM4vy7mcc5R0XA5QEPkmx1/F8b18Inq3idgPxeGaw2zvntmQzFikgKlQow5QpT7BixQiaN7/Y156YmMC8ebHExkazdOlUkpOz++UqIiIihVG6SyzM7O6snsQ593oWx/UGeqfTXTzFuGYZnGM30CCrsUnhUadOZebP78PChd/To8drbNwYB8DevTuYMeN+Fi0azU03DaNmzZYBjlRERETysozWII9L9boontnb4/tpBQFHgUQgSwmyyOlmZrRqdQnXXFOH119fRJ8+b/Dnn3sA2L59PWPHtqJ69Wvp0GEY5cvXDnC0IiIikhelu8TCOVfi+AO4HfgBz5ZuYZzY3m0tcKcf4hTJluDgItx337Vs3DiB2Ng7CA8/UUxk06bPGDCgLq+9di979vwRwChFREQkL8rqPsjDgcedc0udc0nex1I85aBVmk7yrPDwMHr2vI2NG8fzwAMtCAryfMk75/j22+nExkYzd25PDh/eH+BIRUQkM/4os5xTBe062ZVX48qpLJWaNrNDwKXOuR9StdcGljvnip2m+HKVSk3Lhg1xvPDCa8yfv/qk9hIlynL99b254ooHKFIkJEDRiYiIyOmUq6WmgRXAS2Z23vEG7/NRwPKchSjifzVrRjF3bgwLF/alTp3Kvvb9+3fx5ptd6du3FuvWfUhWfnEUERGRgimrCfL9wNnANjPbZmbbgG1AWeDB0xOayOnTrNnFLF8+nKlTn6BChdK+9p07f2TChHaMHNmUbdu+C2CEIiIiEihZWmIBYJ4qDNcCF3qbNgGfu3w01aYlFpKWQ4cSGTv2I4YOfZd9+w6e1NegwZ20azeA0qUrBiY4ERERyTVZXWKR5QS5IFCCLBnZvXsvAwbMZvLkhSQlnSgqEhxclGbNHqdVqxcIDy8VwAhFJCcKWgncgiIvl42WguuU1yCb2dPestDHn6f7yM3ARQKlTJmSjB7dmbVrX6J9+0a+9qSkI3z22XBiY6vyxRejSUo6EsAoRSS7CloJ3IIiL5eNFsmoUMhjwGvAYe/z9DhgZG4GJRJI0dHn8fbbPVi6dCPdu09n5UpPFfOEhH+YM+cpFi9+mfbtB1Gv3s14Vh6JiIhIQZJRoZBKzrm/UzxP71E5vXOI5GeNG9dgyZIhzJr1LJUqRfrad+/+hVdeuZVhwxrzyy/LAhihiIiInA5Z2sXCzDKaaRYpsMyMW265gh9+eJlhw+6jVKnivr5ff/2WYcMaM2nSzezc+VMAoxQREZHclNVt3v5nZp+a2QtmdrkSZilsQkNDeOKJG9i8eSJPPdWOokVPfAusWfMuffrUYPbsxzlwID6AUYqIiEhuyGqC3B5PsZDWwCJgT8qE+XQFJ5LXlCpVnCFD7mX9+nHceuuVvvbk5CS+/HIsPXtWYeHCoRw9ejiAUYpISgWtBG5BkZfLRotke5s3MysGXA50BDoBRZxzRU5DbLlO27xJbvvuuy107z6db77ZeFL7WWdF0a7dQBo0uIOgoKz+HioiIiKnU26XmsbMyprZbXh2rBgP3A4sBfrmOEqRfK5Bg2i++GIA77zzPNWqnetr/+efOKZN68TgwQ348ccvAxihiIiIZFdWb9LbCGwFHgL+BDoDpZxzzZxzfU5jfCJ5nplxww2XsnbtS7z0UmfKlCnp64uL+55Ro5ozblxbduzYmMFZREREJK/I6gxyCeAYcAg4CBwAVC1BJIWQkGC6dGnDpk0T6N79ZsLCivr61q//iH79ajFrVhf27v0rgFGKiIhIZrK8BtnMqgBNvY8meJLmJcCXzrlRWTzHo8A9QC3gTefcPRmMfQroDpwBvAM87JxL9PZVBKYBlwJxwKPOuc8zu77WIIs//f77bnr3foOZMxeT8vssNDScFi26c801TxMaGh7ACEUkkB5+GNL6L9gMJkzIf9fJq2WgVdJaUsr1NcjOuV+cc1PwJLi3Ae8DrYDh2YhrB9AfmJrRIDNrCfQArgbOByoDKZdyvAmsAc4GXgTeMbMy2YhD5LSrUKEMU6Y8wYoVI7j66tq+9sTEBObNiyU2NpqlS6eQnHwsgFGKSKCkNz+VzXvn88x18moZaJW0lpzI6hrkhmbWzczmA3uAxUB1YATQJqsXc86955z7APg7k6H/AaY45zY45/YA/fAk5phZNFAP6OWcO+ScexdYD3TIahwi/lSnTmU++aQ38+bFUrNmlK99794dzJjxAAMG1GXDhoUBjFBERERSyuoM8jd49kJeC9wCnOWcu8w597xz7nT8z14TWJfi9Tog0szO9vb96pzbn6q/ZlonMrPOZrbKzFbFx+tXPwkMM6Nly3qsWjWKSZMe4ZxzSvn6tm9fz9ixrRgzpgV//LEug7OIiIiIP2Q1QS7lnLv8eELsnEs4rVFBcWBvitfHn5dIo+94f4m0TuScm+ycq++cq1+6tHYSl8AqUqQI9957LRs3TiA29g7Cw8N8fZs2fcaAAXV57bV72bPnjwBGKSIiUrhlKUH2Q0Kc2gEgZTZ7/Pn+NPqO9+9HJJ8IDw+jZ8/b2LRpAg880MJXTMQ5x7ffTic2Npq5c3ty6JD+6iEiIuJvebXE1wagdorXtYGdzrm/vX2VzaxEqv4NfoxPJFeUK1eK8eO7snr1aNq0OXFT7dGjh5g/fwCxsVX56qsJHDt2NIBRisjpYJa99rx+nbxaBlolrSUnsl1q+pQuZhYMBAO9gPLAg0CScy4p1bhWwHSgOZ6dL94DVjrnenj7l+NZF90TaI1ny7dqzrndGV1f27xJXvfllz/Qvft01q799aT2yMgLuOmmoVx8cVsst/9XExERKSRyfZu3XNITT7GRHkAn7/OeZhZlZgfMLArAObcAGAp8iWef49/wJNXH3Q7Ux7OjxmDg5sySY5H8oFmzi1m+fDhTpz5BhQqlfe07d/7IhAntGDmyKdu2fRfACEVERAo+v84gB5pmkCU/OXQokZdf/pghQ95h376DJ/U1aHAH7doNpHTpioEJTkREJB/K6gxyugmymT2d1Ys550ZmI7aAUYIs+dHu3XsZOPBtJk1aQFLSiaIiRYsG06TJk7Rq9QLh4aUyOIOIiIhA7iTIW7N4Leecq5yd4AJFCbLkZ1u2bKdnzxl88MHyk9rDw8+iTZsYmjTpSnBw0QBFJyIikvedcoJcEClBloJg6dKNdO8+nZUrt5zUXrp0ZW68cTD16t2sG/lERETSkFdv0hORU9S4cQ2WLBnCG288R+XKkb72+PhfeeWVWxk69HJ+/nlpACMUERHJ37I8g2xmpfBsqRYFnPR3XOdc39wPLfdpBlkKmsTEo0ycOJ+BA99mz54DJ/XVrXsT7dsPJjKyWoCiExERyVtydYmFmTUCPgYSgTLAduAc7+ttzrmLTy1c/1CCLAXVnj0HGDx4DuPGfcyRIye2FQ8KCqZJk4e57rpYihcvncEZRERECr7cXmIxDJgFnAccxlPAIwpYBQzJaZAikjtKlSrOkCH3sn79OG699Upfe3JyEl9+OZaePauwcOEQjhw5FMAoRURE8oesJsgXAy87z3TzMSDUObcT6A70Pk2xiUg2VaoUycyZz7Bs2TCuvLKmr/3w4X28/34PevW6gBUrZpKcnBzAKEVERPK2rCbIR1I83wmc731+ADg3VyMSkVNWv341Pv+8P++88zzR0ef52vfs+Z1p0+5i8OAG/PjjlwGMUEREJO/KaoL8PdDA+3wx0N/M/gO8BPxwGuISkVNkZtxww6WsWTOGl17qTJkyJX19cXHfM2pUc8aNa8uOHRsDGKWIiEjek9UE+UVgh/d5T2A3MBYoBTx0GuISkVwSEhJMly5t2LRpAt2730xY2IlNaNav/4h+/Woxa9ZD7N37VwCjFBERyTtUKESkkPnjj3h69ZrFzJmLSfn9HxoaTosW3bjmmmcIDQ0PYIQiIiKnR67uYmFmi8zszDTaI8xsUQ7iE5EAKV++NFOmPMGKFSO4+uravvbExATmzetFbGw1li6dQnLysQBGKSIiEjhZXWLRlFTFQbzCgCvTaBeRPK5Oncp88klv5s2LpWbNKF/73r1/MmPGAwwYUJcNGxYGMEIREZHAyDBBNrN6ZlbP+/Li46+9jwZAZzxFQ0QkHzIzWrasx6pVo5g06RHOOaeUr2/79vWMHduKMWNa8Mcf6wIYpYiIiH9luAbZzJKB4wMsjSGHgMecc1NPQ2y5TmuQRTKWkHCYUaPmMmLE+yQkHPa1mxmNGv2HG27oR6lS5QMYoYiISM7l1hrkSkAVPMlxQ+/r44/zgIj8khyLSObCw8Po2fM2Nm2awAMPtCAoyPMjwjnHt99OJzY2mrlze3Lo0L4ARyoiInL6ZJggO+d+c85tc84FOedWeV8ff/zpnNNdPCIFULlypRg/viurV4+mTZsTv2gfPXqI+fMHEBtbla++msCxY0cDGKWIiMjpkdWb9DCz1mb2kZltNLMK3rYHzOzqbJzjLDN738wSzOw3M7sznXHzzexAiscRM1ufon+bmR1K0f9pVmMQkayrWTOKDz7oycKFfalTp7Kvff/+3bz5Zlf69q3F2rVzKUzbRYqISMGX1W3eOgJvAz/hWV4R4u0qAnTLxvXG4SlbHQl0BCaYWc3Ug5xzrZ1zxY8/gGXAnFTD2qYY0yIbMYhINjVrdjHLlw9n2rQnqVChtK99584fmTixPSNHNmXbtu8CGKGIiEjuyeoMcjfgQefcU0BSivblQJ2snMDMwoEOQIxz7oBz7hvgQ+CuTI6riGcrudezGKuInAZBQUF07NiU//53HAMG3E1ExBm+vp9++prBgxsyZcqdxMdvC1yQIiIiuSCrCXI14Ns02g8AEVk8RzSQ5JzbkqJtHfCvGeRU7gaWOOe2pWqfZWa7zexTM6udxnEAmFlnM1tlZqvi43VjkcipKlYslOeeu4lNmybwyCPXERxcxNf33Xdv0rv3Bbz77nMkJOwJYJQiIiI5l9UEeQeeBDe1q4BfsniO4kDqDHUvUCKT4+4Gpqdq6whUBM4HvgQWplXpD8A5N9k5V985V7906azm8iKSmTJlSjJq1IOsWzeW9u0b+dqTko7w2WfDiY2tyhdfjCYp6UgAoxQREcm+rCbIk4GXzKyx93UFM/sPMBSYkMVzpDXbHAHsT+8AM7sCKAe8k7LdObfUOXfIOXfQOTcI+B+q6CcSENWqncvbb/dg8eJBNGx44vfohIR/mDPnKXr3rs7q1XN0I5+IiOQbWUqQnXNDgfeAz4BwPLO2E4GJzrlxWbzWFiDYzKqlaKsNbMjgmP8A7znnDmQWImkXMhERP7n88uosWTKEN954jsqVI33t8fG/8sortzJ06OX8/PPSAEYoIiKSNVne5s059yJQGk/BkEZAGedcTDaOT8CTZPc1s3DvbHQ7YEZa482sGHArqZZXmFmUmTU2s6JmFmZmz3nj0v+8IgFmZtx8c2PWrXuZ4cPvo1Sp4r6+rVuXM3z4FUya1IGdO38KYJQiIiIZyzBBNrMzzGycmW03s13Aq8A259zKLMzqpqUrUAzYBbwJPOyc22BmV5pZ6vO1x7N04stU7SXwLOvYA2wHWgGtnXN/5yAeETkNQkNDePzxG9i8eSJPP92eokWDfX1r1rxHnz41mD37cQ4ciA9glCIiImmzjNYFmtkwPEntLOAwcAew2Dl3i3/Cy12XXFLVLV8+ItBhiBQ6W7fuJDZ2JrNnLzmpPSwsgtatX6BZs8cpWrRYgKITEZHCoksXW+2cq5/ZuMyWWNwE3O+c6+ycexy4DmhvZkUyOU5ExKdSpUhmzHiGZcuGceWVJ3Z2PHx4H++/34NevS5gxYqZJCcnBzBKERERj8wS5AqAb8rHObcST6GQc09nUCJSMNWvX43PP+/PO+88T3T0eb72PXt+Z9q0uxg8uAE//ph6VZWIiIh/ZZYgF8FTGjqlJCA4jbEiIpkyM2644VLWrBnD2LEPUaZMSV9fXNz3jBrVnHHjrmfHjo0BjFJERAqzzNYgJ+PZ2i0xRXNr4Cvg4PEG59wNpyvA3KQ1yCJ5z759Bxk+/H1Gj57L4cMnfh83C+KKKx7g+uv7ULJkuQBGKCIiBUVurUF+DU8Vvb9TPGYCv6dqExHJkYiIM+jbtyMbN47n7rubY+bZ0ty5ZJYsmUxsbFU+/rgviYkJAY5UREQKiwxnkAsazSCL5H3r1m2lR4/pfPHFupPaS5Y8hxtu6Mdll91DUJDuExYRkezLrRlkERG/ql27Ep980pt582KpWTPK175375/MmPEAAwbUZcOGBSpdLSIip40SZBFJ065dX7Fq1YMsXXojq1Y9yK5dX/nt2mZGy5b1WLVqFJMmPcI555Ty9W3fvp6xY1szZkwLfv99rd9iEhGRwkMJsoj8y65dX/HLL+NJTNwNOBITd/PLL+P9miQDFClShHvvvZaNGycQG3sH4eFhvr7Nmz9n4MB6vPbavezZ84df4xIRkYJNCbKI/Etc3EySkxNPaktOTiQubmZA4gkPD6Nnz9vYtGkCDz7YkqAgz48u5xzffjudvn2rMHduTw4d2heQ+EREpGBRgiwi/5KYGJ+tdn8pV64U48Y9zPffj6FNmxP3WBw6dIT58wcQG1uVxYvHc+zY0QBGKSIi+Z0SZBH5l9DQ0tlq97caNSrwwQc9WbiwL3XqVPa179+/m7feeoS+fWuxdu1c3cgnIiI5ogRZRP4lKqoTQUGhJ7UFBYUSFdUpQBGlrVmzi1m+fDjTpj1JVFQZX/vOnT8ycWJ7Ro5syrZt3wUwQhERyY+UIIvIv5Qt24QqVboSGloGMEJDy1ClSlfKlm0S6ND+JSgoiI4dm7J+/csMGHA3ERFn+Pp++ulrBg9uyJQpdxIfvy1wQYqISL6iQiEiUqDEx+9jwIDZTJq0gKSkY7724OCiNGv2OK1avUB4eKkMziAiIgWVCoWISKFUunQEo0Y9yLp1Y2nfvpGvPSnpCJ99NpyYmCp88cVokpKOBDBKERHJy5Qgi0iBVK3aubz9dg8WLx7EpZde4Gs/eHAPc+Y8Re/e1Vm9eo5u5BMRkX9RgiwiBdrll1fn668H88Ybz1G5cqSvPT7+V1555VaGDr2cn39eGsAIRUQkr/FrgmxmZ5nZ+2aWYGa/mdmd6YzrbWZHzexAikflFP11zGy1mR30/lvHb29CRNIUyNLUmTEzbr65MevWvczw4fdRqlRxX9/WrcsZPvwKJk3qwM6dPwUwShERySv8PYM8DjgCRAIdgQlmVjOdsbOdc8VTPH4FMLOiwFxgJlAKeA2Y620XkQDIK6WpMxMaGsLjj9/A5s0Tefrp9hQtGuzrW7PmPfr0qcHs2Y9z4EBgC6KIiEhg+S1BNrNwoAMQ45w74Jz7BvgQuCubp2oKBAOjnXOJzrmXAAOa52a8IpJ1ea00dWZKlSrO4MH3sH79OG677Upfe3JyEl9+OZaePauwcOEQjhw5FMAoRUQkUPw5gxwNJDnntqRoWwekN4Pc1sz+MbMNZvZwivaawA/u5DtrfkjvPGbW2cxWmdmq+Ph9pxK/iKQjr5amzkylSpHMmPEMy5YN48orT/wIOXx4H++/34NevS5gxYqZJCcnBzBKERHxN38myMWB1BnqXqBEGmPfBqoDZYAHgVgzuyPFefZm8Tw45yY75+o75+qXLh2R09hFJAN5vTR1ZurXr8bnn/fn3XdfIDr6PF/7nj2/M23aXQwe3IDNmxcFMEIREfEnfybIB4DUGWoEsD/1QOfcRufcDufcMefcMmAMcHN2zyMi/pFfSlNnxMxo27Yha9aMYezYhyhTpqSvLy7ue0aPvppx465nx46NAYxSRET8ITjzIblmCxBsZtWcc8dvFa8NbMjCsQ7POmO8458xM0uxzOJiPDcAikgAHC9BHRc3k8TEeEJDSxMV1SlPlqbOTEhIMA891Jo77mjC8OHvM2bMXA4d8hQVWb/+Y/773/lcccUDXH99H0qWLBfgaEXyH7NkypaNJzLyfxQpcizzA0Sy6NixIuzceSa7dpXGuVObA/ZrqWkzewtPsvsAUAf4BLjcObch1bh2wNfA/4AGwPvAC86517y7VfwEjAQm4lmC8RxQzTmXYWkslZoWkez64494evd+gxkzvjypqEhoaDgtWnTjmmueITQ0PIARiuQvVarEcc45xllnRVKkSAhmlvlBIplwznHs2FH++Wcnf/7p+OWXqDTH5dVS012BYsAu4E3gYefcBjO70swOpBh3O/AznmUTrwNDnHOvAXiT4PbA3XgS6PuA9pklxyIiOVG+fGleffVxVq4cydVX1/a1JyYmMG9eL2Jjq7F06RSSkzUTJpIVEREJlClzHsHBRZUcS64xM4KDi1KmzHlERCSc+vkKU5lVzSCLyKlwzvHpp2vo0WM6GzbEndR37rkX0aHDMGrUaKn/9EUyULfuJipVqh7oMKQA27p1E2vWpP01lldnkEVE8i0zo2XLeqxaNYrJkx/lnHNK+fp27PgvY8e2ZsyYFvz++9rABSkiIqfMnzfpiUgqu3Z95Zcb29avj2Xfvh98ryMiLqZWrb65Gpu/3ou/rpORIkWKcM8913DLLVcwevRchg9/n4SEwwBs3vw5AwfW49JL76Zdu/6UKlXer7GJiMip0wyySID4qzxz6uQYYN++H1i/PjbXYvPXe8lrJa3Dw8N48cXb2LRpAg8+2JKgIM+PVOccy5e/RmxsNT744EUOHVKRIhE5fdq3b0qPHo8GOowCRQmySID4qzxz6uQ4s/acxOav95JXS1qXK1eKceMe5vvvx9CmzYmlbUePHmbBgoHExlZl8eLxHDt2NIBRisipeOyxeyhb1hgxot9J7UuXLqZsWePvv7NeOTSrCe1jj91Dx47XZzpu2rT36NlzUJavn9rBgwcZMOAFGjasSoUKYVx4YWmuu64x7733ZpbPERe3jbJljbVrV+U4jrxECbJIgOTl8szZjc1f7yUvf8wAatSowAcf9OTTT/tRt25lX/v+/bt5661H6Nu3FmvXzqUw3Rwtkttq1oSyZf/9qFkz82NPVVhYGOPGDSM+fvfpv1gWHDni2cCrVKmzKF48zYLCWfLcc1344IPZ9O8/mqVLNzNnzmfcfHMn9uz5J7dCzXeUIIsESF4uz5zd2Pz1XvLyxyylpk1r8e23w5k27Umiosr42nfu/JGJE9szcmRTtm37LoARiuRfu9PJTdNrz02NGzejQoWKjBzZL8Nx3377Na1aXUqFCmHUqBFJTMxTvmT2scfuYdmyr5g6dRxlyxplyxpxcduydP3jM8ovvTSE2rXLU6eO5x6H1DPSH330Hk2aXExUVDGio8+iXbsm7Nq1M93zLlz4IU888TwtWlxPVFRFatWqy733Psz99z/iG+OcY+zYoTRoUIWoqGI0aVKLOXNO/PWufv1KALRo0YCyZY327ZsCkJyczIgR/ahTpwLly4fSpEkt5s+fe9L1hw/vS71651O+fCg1a5bjkUfu9vUtWrSAtm2vpFq1UkRHn8Wtt7Zky5ZNWfp4nQolyCIB4q/yzBERF2erPSex+eu95KeS1kFBQXTs2JT1619mwIC7iYg4w9f3009fM3hwQ1599Q7i47cGMEoRyY6goCBiYgbz2msT2br1lzTH/Pnndu64ozUXXVSXL75Yw+jRU3jvvTfp3/95AAYMGEP9+pdxxx33sn79n6xf/yfnnVchyzEsW/YVGzf+wFtvLeCdd774V//OnX/x0EO3c9tt/+GbbzYxd+7X3HLLXRmes2zZcixatIB9+/amO2bQoJ688cYUhgwZx5IlG3n88ed57rmH+OyzjwFYuHAlAG+9tYD16/9k2rT3AJg8eQzjxg0jJmYIX321ntatb+Tee29i/fq1AMyb9y7jxw9nyJDxLF/+E7NmfUS9eg19101ISKBz5ydZuHAl77+/mIiIknTq1Nb3C8fpol0sRALEX+WZa9Xqm+1dLLIbm7/eS34saV2sWCjPPXcT9957DQMGzGbSpAUkJXmKiqxa9RZr175H06aP0br1i4SHl8rkbCISaNdc04aGDRszaNCLTJ781r/6p00bT2TkuQwdOp6goCCio6sTEzOYZ599iB49+hERUZKiRYtSrNgZREZmv1x9WFgYY8ZMJTQ0NM3+nTt3cPToUdq2vZkKFc4HoHr1izI854gRk3n44Y5ceGFpqlevRYMGl9OqVTuaNr0W8CSpEyeO5O23P6VRoysBOP/8SqxZs5KpU8dx7bXXcfbZnr+WnXXW2Se9r/Hjh9O167N06HAnAD169GX58q8ZP344EybM5I8/fiMy8hyaNm1BSEgI5ctHUafOiXs52rbtcFKsY8ZMo0qVCL7/fiWNGl2RnQ9dtihBFgmgsmWb+CW5y2xLt7RkNzZ/vRd/XSe3lS4dwahRD9K163X07DmD99//FoCkpCN8/vkIli2bynXXxdKkSVeCg4sGOFoRyUhMzBDatLmMRx557l99W7Zs4pJLGvl2tQFo2PAKjhw5wtatP1OzZvp/vcuKCy+8KN3kGKBmzdpcddU1XHXVRTRt2oKrrrqGtm1vpnTpMvzxRxxXXFHDN/bJJ1/gySdf4LLLruK7735l9erlrFy5lCVLFnHrrS24667OjBgxiS1bNnL48GFuv70VcKIQUlLSUSpUqJhuLPv37+Ovv3bQsGHjk9ovvfQKPv/8EwBuuOEWXnllDPXrV6JZs5Y0b96Kli1v8L3HrVt/YciQGFavXsHff+8mOTmZ5ORktm+P+9f1cpOWWIiI+FG1aucye3Z3Fi8exKWXXuBrP3hwD3PmPEXv3tVZtept3cgnkofVq9eQ66/vQN++3bJ1XG5U2TzjjPAM+4sUKcKcOZ/y9tufUqPGxbzxxhQaNarGf/+7jnLlzmXRorW+x3/+08V3XEhICI0aXcnjj/dgzpxP6dGjHzNmTCYubhvJyckAzJgx76Tjv/56A2+//WmO3sfxj8V551Vg2bIfGT58EiVKRNCr1zNce+0lJCR4ykV36nQ98fG7GT58EgsWrGDRojUEBwdz9OjpXWKhBFlEJAAuv7w6X389mDfeeI7KlSN97fHxv/Lqq7cxdOjl/Pzz0gBGKJI3lSmTvfbT5YUXBrJ8+RIWLVpwUnt0dHVWr17uSyoBVq78hqJFi1KxYhUAQkKKcuzYsdMWm5nRoMFlPPdcLz799DvKlTuXuXNnExwcTOXKVX2PUqXOSvcc0dGemeaEhANccEENQkND+eOP3046vnLlqr5lHEWLev7ylfJ9lSgRQbly57Jy5ck/y1as+MZ3fvAsG7n22uvo128UCxd+x+bNG1i5cin//PM3P/20mSeffIEmTa4hOro6Bw7sJykpKdc+VunREgsRkQAxM26+uTFt2zZk0qT5DBw4h3/+2Q/A1q3LGT78CurWvYn27QcTGVktwNGK5A0bNgQ6Ao/Klaty112deeWVMSe133tvVyZPHk23bl3p3PkJfvvtV/r168F99z3KGWd4btaNiqrImjUriYvbRnh4cUqVOuukJRmnYtWq5Xz99ec0a9aSMmUiWb9+Ddu3/35SQppa+/ZNufHGO6hTpz6lSp3Nli0bGTjwBapVu5Do6OoUKVKErl2fpXfvZ3HO0ajRVSQkHGD16uUEBQVx992dKV26LMWKFePLLxdSoUJFwsLCiIgoySOPPMeQIbFUrlyN2rUvYc6cmSxfvoTPP/8egLfemk5SUhL16l1KeHhx5s6dTUhICJUrV+PMM0tx9tmlmTnzFc49twJ//bWdPn2eIzj49KevSpBFAujnnyeyc+enQDIQRGRkC6pW7ZLhMf4oG50TeaEEdH4VGhrC44/fwF13NWfIkHd4+eWPOHLEM0OyZs17rFv3IU2aPMx118VSvHje2tJOpDB75plYZs9+7aS2c845jzffnE+fPs/RvHkdIiLOpEOHO3nxxYG+MV27Psujj/6HK6+swaFDh1i1aitRURVzJaaIiJKsXLmUV18dy759/+Pccyvw9NMx3HJL+rv9NGvWkjlzZjBo0IskJBygbNlyNGlyLc88E0uRIkUA6NGjH2XKRDJ+/HC6dXuYEiUiqFmzDo8+6llmEhwczIABLzFiRF+GD+9Do0ZX8sEHi3nwwcc5cGA/fft2Y/funVStegFTp77LRRfV9sZ7JmPHDqF372dJSjpKdHQNpk17j/PP92wbN3nybF588XGaNLmISpWq0rv3CO67r0PabyQXWWFa53bJJVXd8uUjAh2GCHA8OV7wr/bIyFbpJslplY2GjJPk4+WZU1agCwoKpUqVrrmWwPrjGoXJtm07iYmZyezZS05qDwuLoHXrF2jW7HGKFi0WoOhETk3dupuoVKl6oMOQAmzr1k2sWZP211iXLrbaOVc/zc4UtAZZJEA8M8dZbwf/lI3OibxaAjq/qlgxkhkznmHZsmFcddWJ8mCHD+/j/fd70KvXBSxfPuOkNY4iIpJ7lCCLBEx6yU3uJj3+KM+c10tA51f161fjs8/68+67LxAdfZ6vfc+e35k+/W4GD27A5s2LAhihiEjBpARZJGDS+/bL3W9Lf5Rnzi8loPMjM6Nt24asWTOGsWMfokyZkr6+uLjvGT36asaNu54dOzYGMEoRkYJFCbJIgERGtshWO/inbHRO5KcS0PlVSEgwDz3Umk2bJtCjxy0UK3aimMj69R/Tr18tZs16iL17/wpglCIiBYNfE2QzO8vM3jezBDP7zczuTGfcc2b2XzPbb2Zbzey5VP3bzOyQmR3wPnK2S7VIAFWt2oXIyFac+DYMyvAGPfBUxEudDGelbHSVKl0JDS0DGKGhZXL95jl/XEM8IiLOoG/fjmzYMJ67727u22zfuWSWLJlMbGxVPv64L4mJCQGOVEQk//LrLhZm9iaebOB+oA7wMXC5c25DqnHdgM+BH4AqwKdAd+fcW97+bcADzrnPs3N97WIhIgXNunVbef756Xz++bqT2kuWPIcbbujHZZfdQ1BQkQBFJ/Jv2sVCTrd8tYuFmYUDHYAY59wB59w3wIfAXanHOueGOue+d84lOed+BOYCjVOPExEp7GrXrsQnn/Tho496UbNmlK99794/mTHjAfr3r8OGDQtUulpEJBv8ucQiGkhyzm1J0bYOqJnOeADM8/fDK4HUtXNmmdluM/vUzGpncHxnM1tlZqvi4/flNHYRkTytRYu6rFo1ismTH+Wcc0r52nfs+C9jx7ZmzJgW/P772sAFKCKSj/gzQS4OpM5Q9wIlMjmuN544p6Vo6whUBM4HvgQWmtmZaR3snJvsnKvvnKtfunRE9qMWEcknihQpwj33XMPGjRPo1esOwsPDfH2bN3/OwIH1mD79Hvbs+SOAUYqI5H3+LDV9AEidoUYA+9M7wMweBe4GrnTO+aoQOOeWphg2yMz+g2eWeV7uhSsFhb9KIOekbPTq1Y9x+PDvvtdhYRW45JKxGR6zdGkH4FiKliI0bvxuJsfcChxJ0VKUxo3fzvCYFSvuIynpH9/r4OCzuPTSqemO99fHWSWtMxceHsaLL97G/fe3oF+/t5gy5TOSk5NxzrF8+WusXj2bq69+mpYtu1OsmCYORHJL+/ZNufDCixg8+OVAhyKnyJ8zyFuAYDOrlqKtNv9eOgGAmd0H9ACuds5lNt3hAMuVKKVAOV4COTFxN+BITNzNL7+MZ9eur3L1OifKRh8v8pHMzp0L+Pnniekekzo5Bjh8+HdWr34s3WP+nRwDHPO2p3dM6uQY4Ii3PW2pk2OApKR/WLHivjTH++vj7K/rFBTlypVi3LiH+f77MbRpc+KelKNHD7NgwUBiY6uyePF4jh07GsAoRfKHxx67h44dr89wzLRp79Gz56AcX+PgwYMMGPACDRtWpUKFMC68sDTXXdeY9957M8vniIvbRtmyxtq1q3Ich/gxQXbOJQDvAX3NLNzMGgPtgBmpx5pZR2AgcK1z7tdUfVFm1tjMippZmHcLuNLA0tTnEfFXCeSclI1OnRxn1u6ROjnOrB3+nRxn1s6/kuPM2v31cVZJ65ypUaMCH3zQk08/7UfdupV97fv37+attx6hb99arF07VzfySb7xv//NYsuWimzYEMSWLRX53/9mBTSeI0c8P09LlTqL4sUzWzmavuee68IHH8ymf//RLF26mTlzPuPmmzuxZ0/aP3vl9PF3oZCuQDFgF/Am8LBzboOZXWlmB1KM6w+cDXyXYq/j41NxJYAJwB5gO9AKaO2c+9tv70LyDf+VQPZP2ei8yl8fZ5W0PjVNm9bi22+HM336U0RFlfG179z5IxMntmfEiCZs3boygBGKZO5//5vFjh2dOXr0N8Bx9Ohv7NjR2a9J8vHZ5JdeGkLt2uWpU6c84Fli0aPHo75xH330Hk2aXExUVDGio8+iXbsm7Nq1M93zLlz4IU888TwtWlxPVFRFatWqy733Psz99z/iG+OcY+zYoTRoUIWoqGI0aVKLOXNOTBLUr18JgBYtGlC2rNG+fVMAkpOTGTGiH3XqVKB8+VCaNKnF/PlzT7r+8OF9qVfvfMqXD6VmzXI88sjdvr5FixbQtu2VVKtWiujos7j11pZs2bIp5x/EPM6fa5Bxzv0DtE+jfQmem/iOv66UwTk2AOmXDRNJITS0tPfP8f9uz11BpJ0MF45ilf76OPvv81lwBQUFceedTbjppst4+eWPGDz4HfbtOwjAzz8vYciQS6lf/3batx9I6dLp/igWCZhdu17EuYMntTl3kF27XuTMMzv6LY5ly76iRImSvPVW2tso7tz5Fw89dDsvvjiI66/vQELCAVavXp7hOcuWLceiRQu44YZbiIgomeaYQYN6Mm/eOwwZMo4qVS5g1apveeaZBznzzFJce+11LFy4kpYtG/LWWwuoWbM2RYt6qm5OnjyGceOGMWzYROrUqc+cOTO5996b+Oyz1dSqVYd5895l/PjhTJr0JtWr1yI+ftdJ8SYkJNC585PUrHkxhw4dYtSo/nTq1JZvvtnou0ZBUjj+95ZCy18lkHNSNjosrEK22j3SK/iQUSGI9H5wpf8DLTj4rGy1++vjrJLWuScsrCjPPnsTmzdP5NFHryc4+MTX0KpVb9G794W8886zJCTsCWCUIv929GhcttpPl7CwMMaMmUr16hdRo0atf/Xv3LmDo0eP0rbtzURFVaR69Yvo1OkBypaNTPecI0ZM5vvvV3DhhaW5+up69OjxKIsXf+brT0hIYOLEkYwa9SrNm7fi/PMr0aHDnXTq9CBTp44D4OyzPX8dOuuss4mMLEepUp6f2+PHD6dr12fp0OFOqlSJpkePvjRqdCXjxw8H4I8/fiMy8hyaNm1B+fJR1KlTn/vvPzEb3rZtB9q27UDlytWoWfNixoyZRlzcVr7/vmD+1UkJshRo/iqBnJOy0ZdcMvZfyXBmu1h4dqtInQxnvIuFZ7eK1MlwxrtYXHrp1H8lwxntYuGvj7NKWue+0qUjGDnyAdatG8uNN17ma09KOsLnn48gJqYKn38+iqNHEzM4i4j/hIREZav9dLnwwosIDQ1Nt79mzdpcddU1XHXVRdx7bwemTZtAfLznL2B//BFHxYrFfY/RowcCcNllV/Hdd7/y3nuLaNfuVn75ZQu33tqCZ555CIAtWzZy+PBhbr+91UnHT58+gW3bfkk3lv379/HXXzto2PDkmmuXXnoFW7ZsBOCGG24hMfEw9etX4skn7+fDD+eQmHji+37r1l/o0uVOGjSoQuXKEdSsGUlycjLbt/v3FxN/8esSC5FAKFu2iV8SqKpVu2S6rVtqmW3plpbMtnRL+5iMt3RLS0ZbuqXFXx9nf12nsKlW7Vxmz+7OsmWb6N59OitW/AjAwYN7eOedp1m8+GXatx/EJZfcgqd+k0hglC07gB07Op+0zMLsDMqWHeDXOM44IzzD/iJFijBnzqesWrWcxYs/5Y03pjBgwPN88MFXXHhhTRYtWusbe3yWFyAkJIRGja6kUaMrefzxHowc2Z/Bg2N44onnSU72LOWbMWMe55138i8EISEhOXofx7+fzzuvAsuW/ciSJV/w9def06vXMwwf3of581cQHh5Op07Xc8455Rk+fBLnnHMewcHBXHFFDY4eTf+G7/xMM8giIuJz+eXV+frrwbz5ZjcqVz7xp+D4+F959dXbGDr0cn7+WZsGSeCceWZHzj13MiEh5wNGSMj5nHvuZL+uP84qM6NBg8t47rlefPrpd5Qrdy5z584mODiYypWr+h4pE+TUoqNrAJCQcIALLqhBaGgof/zx20nHV65clQoVzgfwrQc+duzE7kYlSkRQrty5rFx58vfuihXf+M4PnmUj1157Hf36jWLhwu/YvHkDK1cu5Z9//uannzbz5JMv0KTJNURHV+fAgf0kJSXl2scqr9EMsoiInMTM6NDhctq2bcCkSQsYMOBt/vnHU9Np69blDB9+BXXr3kT79oOJjKyWydlEct+ZZ3bMkwlxSqtWLefrrz+nWbOWlCkTyfr1a9i+/feTEtLU2rdvyo033kGdOvUpVepstmzZyMCBL1Ct2oVER1enSJEidO36LL17P4tzjkaNrvLd/BcUFMTdd3emdOmyFCtWjC+/XEiFChUJCwsjIqIkjzzyHEOGxFK5cjVq176EOXNmsnz5Ej7//HsA3nprOklJSdSrdynh4cWZO3c2ISEhVK5cjTPPLMXZZ5dm5sxXOPfcCvz113b69HmO4OCCm0YW3HcmIiKnpGjREB57rC2dOjVjyJB3ePnljzhyxDNjtGbNe6xb9yFXXdWF666LpUSJMpmcTaRwiYgoycqVS3n11bHs2/c/zj23Ak8/HcMtt6R/U3GzZi2ZM2cGgwa9SELCAcqWLUeTJtfyzDOxFCniuf+kR49+lCkTyfjxw+nW7WFKlIigZs06PPpoNwCCg4MZMOAlRozoy/DhfWjU6Eo++GAxDz74OAcO7Kdv327s3r2TqlUvYOrUd7nootreeM9k7Ngh9O79LElJR4mOrsG0ae9x/vme3WwmT57Niy8+TpMmF1GpUlV69x7BffelX6Qqv7PCtDH8JZdUdcuXjwh0GCIi+dK2bTuJjZ3FW299fVJ7WFgErVo9T/PmT1C0aLEARSf5Rd26m6hUqXqgw5ACbOvWTaxZk/bXWJcutto5Vz/NzhQ0gyyShl27viIubiaJifGEhpYmKqpTnrkxzFPW+lM8+y4HERnZItObA3NyjEhqFStG8vrrT/PEEzfQvfs0vv56AwCHD+/jgw+e56uvxtOu3QAaNuxIUJBucRGR/Es/wURS2bXrK375Zby3IIUjMXE3v/wynl27vgp0aN5EdwEnipIks3PnAn7+eWKuHiOSkUsuqcpnn/Xn3XdfIDr6PF/7nj2/M3363Qwe3IDNmxcFMEIRkVOjBFkklbi4mSQnn7zna3JyInFxM9M5wn88s8BZb8/pMSKZMTPatm3ImjVjGDv2IcqWPVH1Ky7ue0aPvppx465nx46NAYxSRCRnlCCLpJKYGJ+tdv9Kq5x1Ru05PUYka0JCgnnoodZs2jSR55+/hWLFThSlWb/+Y/r1q8WsWQ+xd+9fAYxSRCR7lCCLpBIaWjpb7f6V3rdsRt/KOTlGJHtKlChGnz4d2bBhPP/5z9W+4gPOJbNkyWRiY6vy8cd9SUxMCHCkkhcUpg0CxL9y62tL/0OKpBIV1YmgoJPLhwYFhRIVlf7WPP4SGdkiW+05PUYkp8qXL80rrzzGypUjueaa2r72xMQE5s3rRWxsNZYunUJy8rEMziIF2dGjIRw9eijQYUgBdfToIY4ezVlVwZSUIIukUrZsE6pU6UpoaBnACA0tQ5UqXfPELhZVq3YhMrIVJ751g4iMbJXhjhQ5OUbkVNWuXYlPPunDRx/14qKLzve17937JzNmPED//nX473/nayaxEIqLK8uff27nyJGD+vxLrnHOceTIQf78cztxcWVP+XzaB1lERE6rY8eOMWPGl/Tu/QY7dvxzUt+FF15Dhw7DqFChTmCCk4CIiNhHVNQuQkKOBjoUKUCOHg0hLq4s+/ZFpDsmq/sgK0EWERG/SEg4zOjRcxk+/H0SEg772s2MSy+9m3bt+lOqVPkARigiBV1WE2QtsRAREb8IDw/jxRdvY9OmCTz4YEtfMRHnHMuXv0ZsbDU++OBFDh3aF+BIRaSwU4IsIiJ+Va5cKcaNe5jvvx9DmzYnJnKOHj3MggUDiY2tyuLF4zl2TH9+F5HA8GuCbGZnmdn7ZpZgZr+Z2Z3pjDMzG2Jmf3sfQ+z4nkGe/jpmttrMDnr/reO3NyEiIrmiRo0KfPBBTz77rB/16lXxte/fv5u33nqEvn0vYu3aubqRS0T8zt8zyOOAI0Ak0BGYYGY10xjXGWgP1AYuBtoCDwGYWVFgLjATKAW8Bsz1touISD7TpEktli0bxvTpTxEVVcbXvnPnFiZObM+IEU3YunVlACMUkcLGbwmymYUDHYAY59wB59w3wIfAXWkM/w8wwjn3h3NuOzACuMfb1xQIBkY75xKdcy8BBjQ/zW9BREROk6CgIO68swn//e84Bg68m5Ilz/D1/fzzEoYMuZRXX72D+PitAYxSRAqLYD9eKxpIcs5tSdG2Dkhrc9ma3r6U42qm6PvBnfw3tx+87QtSn8jMOuOZkQZILFq0/X9zFr4UAKWBvFAvWgJHXwP52KpVb7Fq1Vunehp9DRRu+vzLBVkZ5M8EuTiQ+tbkvUCJdMbuTTWuuHcdcuq+jM6Dc24yMBnAzFZlZWsPKZj0+Rd9DYi+Bgo3ff7FzFZlZZw/1yAfAFLv3BwB7M/C2AjggHfWODvnERERERHJFn8myFuAYDOrlqKtNrAhjbEbvH1pjdsAXJxyVws8N/KldR4RERERkWzxW4LsnEsA3gP6mlm4mTUG2gEz0hj+OvC0mZ1nZucCzwDTvX2LgWPA42YWamaPetsXZSGMyafwFiT/0+df9DUg+hoo3PT5lyx9Dfi11LSZnQVMBa4F/gZ6OOfeMLMrgfnOueLecQYMAR7wHvoq0P34jXlmVtfbVgPYBNzvnFvjtzciIiIiIgWWXxNkEREREZG8TqWmRURERERSUIIsIiIiIpJCoUiQzewsM3vfzBLM7DczuzPQMYn/mNmjZrbKzBLNbHqg4xH/8t7MO8X7vb/fzNaaWetAxyX+ZWYzzexPM9tnZlvM7IHMj5KCxsyqmdlhM5sZ6FjEv8xssfdzf8D7+DGj8YUiQQbGAUeASKAjMMHMamZ8iBQgO4D+eG4QlcInGPgdT9XOkkBP4G0zqxjIoMTvBgEVnXMRwA1AfzO7JMAxif+NA74LdBASMI8654p7HxlW1CvwCbKZhQMdgBjn3AHn3DfAh8BdgY1M/MU5955z7gM8O6dIIeOcS3DO9XbObXPOJTvnPgK2AkqOChHn3AbnXOLxl95HlQCGJH5mZrcD/wO+CHAokg8U+AQZiAaSnHNbUrStAzSDLFIImVkknp8LKi5UyJjZeDM7CGwG/gQ+CXBI4idmFgH0BZ4OdCwSUIPMLN7MlppZ04wGFoYEuTiwL1XbXqBEAGIRkQAysxBgFvCac25zoOMR/3LOdcXzs/9KPIWrEjM+QgqQfsAU59wfgQ5EAqY7UBk4D0+xkHlmlu5fkQpDgnwAiEjVFgHsD0AsIhIgZhaEp3LnEeDRTIZLAeWcO+ZdalceeDjQ8cjpZ2Z1gGuAUQEORQLIObfCObffOZfonHsNWAq0SW98sP9CC5gtQLCZVXPO/eRtq43+vCpSaHirc07Bc6NuG+fc0QCHJIEXjNYgFxZNgYpAnOdHAcWBImZWwzlXL4BxSWA5wNLrLPAzyM65BDx/SutrZuFm1hhoh2cmSQoBMws2szCgCJ4fimFmVhh+OZQTJgDVgbbOuUOBDkb8y8zKmtntZlbczIqYWUvgDnSzVmExGc8vQ3W8j4nAx0DLwIUk/mRmZ5pZy+P//5tZR+AqYEF6xxT4BNmrK1AM2AW8CTzsnNMMcuHREzgE9AA6eZ/3DGhE4jdmdj7wEJ7/GP9KsQdmx8BGJn7k8Cyn+APYAwwHnnTOfRjQqMQvnHMHnXN/HX/gWXp52Dm3O9Cxid+E4NnudTcQDzwGtE+1gcNJzDnnp9hERERERPK+wjKDLCIiIiKSJUqQRURERERSUIIsIiIiIpKCEmQRERERkRSUIIuIiIiIpKAEWUREREQkBSXIIiL5nJltM7NnM+i/x8wO+DOmjJjZdDP7KNBxiIikRwmyiEgu8CZ9zvs4ama/mtlwMwvP4vEVvcfWP92x+ktBfE8iUjio3K6ISO75HLgLT9WmK4FXgXA8VdxERCSf0AyyiEjuSfSWs/3dOfcGMAtoD2Ae3czsFzM7ZGbrzaxTimO3ev/9zjvruth7XAMz+9TM4s1sn5l9Y2aXnWqgZtbWzFab2WEz22pmA8ysaIr+bWbW08wmea/7h5k9l+oc0Wb2lfccP5pZG28Z73syek8pjn/CzLab2R4zm2ZmZ5zq+xIRyQ1KkEVETp9DeGaTAfoD9wOPADWAQcAkM7vO29/Q+28r4BzgJu/rEsAMPDPSDYG1wCdmdnZOgzKzlniS95eBmsB9wM3AwFRDnwLWA/WAIcDQ48m5mQUB7wNJQCPgHqAXEJri+PTeE973cxFwDXAbcCPwRE7fk4hIbtISCxGR08DMGgJ3Al941yE/DbRwzi3xDtnqHfMI8DGw29v+t3Pur+Pncc4tSnXex4AOQGtgZg7DexEY5pyb5n39i5l1B2aa2XPOOedt/9Q597L3+Vgzexy4GvgWuBa4wPuetntjewpYmuI6ab4nr31AF+fcMWCTmc3xnntQDt+TiEiuUYIsIpJ7Wnl3iwjGM3M8F3gMz4xxGLDAzFyK8SHAtoxOaGZlgX5AMyASKAIUA6JOIc5LgIbepPi4IO95ywF/ett+SHXcDqCs9/mFwI7jybHXd0ByFmPY6E2OU5770iweKyJyWilBFhHJPV8DnYGjeJLHowBmVsnb3xaIS3XM0UzO+RqexPgpPMl0IvAFUDSDYzITBPQB5qTRtzvF89SxOXJvad7pPLeIyClRgiwiknsOOud+TqN9I57E9vzUSyZSOOL9t0iq9iuAx51zHwOYWSSe9byn4nvgwnRizarNwLlmdq5zboe3rT4nJ7npvScRkTxNCbKIyGnmnNtvZsOB4WZmeGaai+O5uS3ZOTcZ2IXnpr6WZrYNOOyc2wtsATqZ2Qo8W8YN5UTimVN9gY/M7DfgbTw32l0ENHTOdcviOT4DfgRe8xYpKQaM9J7r+DKS9N6TiEiepj9niYj4RwzQG3gW2IAnweyAdys051wS8DjwAJ71uHO9x92HJ5leDbwFTCWTdcuZcc4tBK7Ds655pffRg38v/8joHMl4dp4I9R7/GjAAT3J8OJP3JCKSp9mJm5VFRERyzsxq49mGrr5zbnWAwxERyTElyCIikiNmdiOQAPwEVMSzxMKAuk7/uYhIPqY1yCIiklMl8BQQqQDsARYDTyk5FpH8TjPIIiIiIiIp6CY9EREREZEUlCCLiIiIiKSgBFlEREREJAUlyCIiIiIiKShBFhERERFJ4f9ZTynpt7/LkgAAAABJRU5ErkJggg==\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "a = -per_clf.coef_[0][0] / per_clf.coef_[0][1]\n", - "b = -per_clf.intercept_ / per_clf.coef_[0][1]\n", - "\n", - "axes = [0, 5, 0, 2]\n", - "\n", - "x0, x1 = np.meshgrid(\n", - " np.linspace(axes[0], axes[1], 500).reshape(-1, 1),\n", - " np.linspace(axes[2], axes[3], 200).reshape(-1, 1),\n", - " )\n", - "X_new = np.c_[x0.ravel(), x1.ravel()]\n", - "y_predict = per_clf.predict(X_new)\n", - "zz = y_predict.reshape(x0.shape)\n", - "\n", - "plt.figure(figsize=(10, 4))\n", - "plt.plot(X[y==0, 0], X[y==0, 1], \"bs\", label=\"Not Iris-Setosa\")\n", - "plt.plot(X[y==1, 0], X[y==1, 1], \"yo\", label=\"Iris-Setosa\")\n", - "\n", - "plt.plot([axes[0], axes[1]], [a * axes[0] + b, a * axes[1] + b], \"k-\", linewidth=3)\n", - "from matplotlib.colors import ListedColormap\n", - "custom_cmap = ListedColormap(['#9898ff', '#fafab0'])\n", - "\n", - "plt.contourf(x0, x1, zz, cmap=custom_cmap)\n", - "plt.xlabel(\"Petal length\", fontsize=14)\n", - "plt.ylabel(\"Petal width\", fontsize=14)\n", - "plt.legend(loc=\"lower right\", fontsize=14)\n", - "plt.axis(axes)\n", - "\n", - "save_fig(\"perceptron_iris_plot\")\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 활성화 함수" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "def sigmoid(z):\n", - " return 1 / (1 + np.exp(-z))\n", - "\n", - "def relu(z):\n", - " return np.maximum(0, z)\n", - "\n", - "def derivative(f, z, eps=0.000001):\n", - " return (f(z + eps) - f(z - eps))/(2 * eps)" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "그림 저장: activation_functions_plot\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxAAAAEYCAYAAADMNRC5AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAACBwUlEQVR4nO3dd3gUVdvA4d9J7yEQCJ3Qe4+CghCaiKgoRRERLIDltYvKp76KXVHR14ZiARUbIigWECxBOgJKLwLSSyCU9LZ7vj/OJqRs+rYkz31dc+3u7JmZZyeb3X3mNKW1RgghhBBCCCFKw8vdAQghhBBCCCEqD0kghBBCCCGEEKUmCYQQQgghhBCi1CSBEEIIIYQQQpSaJBBCCCGEEEKIUpMEQgghhBBCCFFqkkAIj6aUilZKaaVUjAuOFaeUessFx6mrlFqilEpRSrl9HGWl1H6l1GR3xyGEEJWFUuompVSyi46llVIjXXEsIUpLEgjhUEqpbkopi1JqZTm2tfcD/hBQD/jbEfHZjlPUB/9w4P8cdZxiTAbqA10wr80llFJTlVJb7Tx1AfCOq+IQQghnU0rNtv3w1kqpLKVUvFLqd6XUf5RSvg44xFdAMwfsJ5ct5h/sPFUP+N6RxxKioiSBEI42AfNjtINSqm1Fd6a1tmitj2utsyseWonHOq21TnL2cYAWwAat9T9a6+MuOF6xtNYntdap7o5DCCEc7BfMj+9o4FLMj/CngOVKqeDy7lQp5au1TtNaxzskyhLYvgMzXHEsIUpLEgjhMEqpQGAMMBOYB9xqp0xPpdRvtuY752z36yulZgN9gf/kuWoUnbcJk1LKSyl1SCl1d4F9trKV6WZ7/IBSarPtGEeUUh8opWrYnosFZgHBeY4z1fZcvhoQpVSEUupjpdQZpVSaUuoXpVT7PM/fpJRKVkoNUEpttR3vd6VU02LO0X5gGDDOduzZtvWFqqgLNi2ylZmklPradqx9SqmxBbapr5T6TCmVoJRKVUr9rZTqp5S6CXgSaJ/ndd9UxHEaK6UWKKWSbMt8pVTDPM9Ptb3e0UqpvbYy3yqlIvOU6aiU+lUplWg7R5uUUv2KOi9CCOEEGbYf30e01n9rracDsUA34GEApZSfUuolpdRh22fmn0qpwTk7UErF2j4vL1dKrVNKZQKD89Zk5/kO6pj34LbP61NKKV+llLdS6kOl1L+275N/lFIPK6W8bGWnAuOBoXk+o2Ntz+V+PyilVimlXi1wnDDbPoeX8jX5KqXeUEodVUpl2L5XX3TkiRdVnyQQwpFGAge01luATzE/knOripVSnYHfgT1AL6AnphrYB7gXWI35cV/PthzKu3OttRX4ArihwHFvAHZorTfaHluB+4D2mITmQuBN23OrbM+l5jnOK0W8ntlAD8wP/gtt2yxWJlHK4Y9p9nQLcBFQA3i3iP2BaS70CzDXdux7iylrzxPAd0BnzLn7SCnVGECZK2rLMFfbrgY6Ak/btvsKeBXYxfnX/VXBndu+zL4DooB+tqU+8K1SSuUpGg1cB1yDubLXFXguz/OfA8cw560LMBVIL+NrFUIIh9JabwUWAyNsq2ZhLl6NAToAHwPf276v8noJeBxoA6wtsM/dwJ/Y/26aq7XOwvzeOgJcC7QFHgMeBW62lX0F872QU2tSD/N9VdAcYHRO4mEzAvP5+mMpX9M9mM/u0UBLzGf5LjvHEqJoWmtZZHHIAsQBk233FbAfGJnn+c+A1SVs/1aBddGABmJsjzvZHjfPU+Yf4NFi9nsZkAF42R7fBCQXd3zMh6oG+uR5Phw4B0zIsx8NtM5T5gbbsVQx8fwAzC6wTuc9V7Z1+3POZ54yL+R57INJasbaHk8EkoDIIo47FdhqZ33ucYBBgAWIzvN8M0xSNjDPftKB8DxlHgP25HmcCIx393tSFllkqZ4L5gLQD0U896Lts7O57bOtcYHnvwXesd2PtX32jihQJt/3COZH+YGcz36gsW3fFxcT44vALyXFnPf7AagFZAID8jz/CzDTdr80r+kN4NfivqdkkaWkRWoghEMopVoAvTFXntFaa0zCkLcZU1fgt4ocR2u9GdiC7UqPUqoH5gPzszyx9FdKLbVV3yYB8wE/oG4ZDtUW8yG8Os+xz9mO3S5PuQytdd4rN0dtx4ooy+sqg8154skGTgJ1bKu6Apu11qcqsP+2wFGt9f48x9mHeV15X/cB2/nIcTRPHADTgQ+UaaL2mFKqTQViEkIIR1KYH+XdbPe325paJtuaJQ3FfK/ktb6EfX6Jqa29xPb4euBfrXVuLYJS6nal1Hql1Enbce7HJBqlprVOwNSg5HwH1sfUFM+xFSnNa5qNqRnerZR6Wyk1tECNhhAlkjeMcJQJgDdwUCmVrZTKBqYAlyqlGjn4WHM4X1V8A7BCa30AQCnVBFONuwMYBXTHNC8C88PeEfIOvVqwc3fOc2X939KYD/287I0UkmVnO1f9H+d93cXGobWeikk4vgUuBjYrpW5BCCHcrx2wD/OZpTFNS7vkWdpy/nsjR0pxO9SmQ/VS8n835b2wdR3wOubH+2Dbcd6hfN9Lc4ARSqkATDOkQ8By23MlviZtmvtGY5rfemGaOC2VJEKUhbxZRIUppXwwnb/+j/wfWJ0xV8xz2nj+BfQvZleZmCSkJJ8DLZRSPTFtN+fkeS4G84F8v9Z6tTZtU+uX4zg7MP8fF+WsUEqFYfoVbC9FjGV1kjxDuiqloij7EK9/AZ3ydmYuoLSvu75SKjpPLM0w57BMr1ubUabe0FoPBT7EJJlCCOE2SqkOmGat8zCfmQqoq7XeU2A5Uo7dzwFGKaW6Y74r8n439QbWaq3f0lpv1FrvoXAtR2m/Axfabq/AJCqf22r9Ke1r0lonaa3naa3vwNRO9MeMEChEqUgCIRxhKBAJvK+13pp3wVTr3mzrgPsy0FUpNVMp1Vkp1VopNSGnEzCmLf6Fyoy8FFnU1RCt9WFMZ+F3Mf0Svs7z9D+Y9/V9SqmmSqnrMZ2m89oPBCilBtmOE2TnGP9gOhO/p5S6xDa6xhxM2/7Py3qCSuE3zAhUMUqprpirVGXtdPw5EA98Z4u5mVLqqjyjH+0HmigzV0ekUsrfzj5+wSR9n9liicFcRdtIKZufKaUCbdXisba/ZQ/Ml6czEi8hhCiKvzITd9a3fec8gOnrtgF4xXaB6TNgtlJqpO0zM0YpNTlnRKMy+hZTc/wh8Kdt/zl2A92UUkOUUi2VUv/FdHTOaz9mCPTWts9ou/NVaK3TgW8wnbq7kSdRKc1rUmakwuuVUm1tzY/HYL7bDpfjNYtqShII4Qi3Ar/b2mYW9DWmqnSQ1vpvYCBmFIs1mJEsRnO+OcwrmCsw2zFX5ItrGzoHU8Pxk9b6TM5KWx+Je4EHbPuZgJm4jTxlVmGSjy9sx3m4iGPcDKzDXO1ZBwQBl2mt04qJq7wexFSpx2GujH2ASQZKTWudgvlCOowZ73wrZszznCtT3wA/YTrPncS00S24D40ZdeokZsSs34HjwNV5rnCVxILpAzIbM7LHAkxfkgfK8nqEEKKCBmJGgzuI+dy7CjMIRB/b5yWYz/lZwDRgJ2aQiz6YDtFlos18Ogsw301zCjz9HmaUpc8xIzZFY0bGy+t9TC3wesxncK9iDpfzHfiX1rrgxZmSXlMS8BDme20jpsXAEC3zAYkyUKX/TSCEEEIIIYSo7qQGQgghhBBCCFFqkkAIIYRwGqXUXbahKzOUbeb1IsqNV0ptUGb28sNKqWm2ARqEEEJ4GEkghBBCONNR4FngoxLKBWEGPIjEzAA/gAL9l4QQQngGubojhBDCabTW8wFsI3o1LKbcjDwPjyilPsNMkCWEEMLDVKoEIjIyUkdHR7s7DFJSUggODnZ3GB5Fzklhnn5OUnekgjcERAfg5eeaykhPPyfu4CnnZMOGDae01rXdHUcefYBtRT2plJoETAIIDAzs3qiRo+erLDur1YqXl1Ts5yXnpDA5J/nJ+SjMk87J7t277X43VKoEIjo6mvXrS5pN3vni4uKIjY11dxgeRc5JYZ58TjKOZ7Ameg1e3l5cvPZivANLM3dRxXnyOXEXTzknSqkyD1vpLLZZy2MoZvJBrfVMYCZATEyMlu8GzyTnpDA5J/nJ+SjMk85JUd8NlSqBEEI4hn9df3qd6EXypmSXJQ9ClIZS6mrgBWCg1vqUm8MRQghhhyQQQlRTPuE+1OhTw91hCJFLKXUZZjKtoVrrLe6ORwghhH2e0cBKCOEyWWeysGZZ3R2GqCaUUj5KqQDAG/BWSgXYG55VKdUf+AwYobVe5+o4hRBClJ4kEEJUM/v+bx+r66/m1HfSOkS4xONAGjAFGGu7/7hSqrFSKlkp1dhW7r9AOPCTbX2yUmqRe0IWQghRHGnCJEQ1Ys2wcnLuSbLPZBPQPMDd4YhqQGs9FZhaxNMhecrJkK1CCFFJSA2EENVIwqIEss9kE9w5mJAOISVvIIQQQghRgCQQQlQjJ+acACBqbJSbIxFCCCFEZSUJhBDVRNbZLBK+TwAFUddLAiGEEEKI8pEEQohq4uS8k+hMTY3+NfBv4O/ucIQQQghRSUkCIUQ1Ic2XhBBCCOEIkkAIUQ2kH0zn3LJzeAV4UXt4bXeHI4QQQohKTBIIIaqBE5+Z2odaw2rhEyajNwshhBCi/CSBEKKK01pz4lNpviSEEEIIx5AEQogqLvnvZFJ3pOJTy4eag2u6OxwhhBBCVHIOTSCUUncppdYrpTKUUrNLKHu/Uuq4UipRKfWRUkqGhRHCCRIWJgBQZ3QdvHzlmoEQQgghKsbRjaGPAs8Cg4HAogoppQYDU4D+tm0WAE/Z1gkhHKjJE02IGBiBbx1fd4cihBBCiCrAoQmE1no+gFIqBmhYTNHxwIda62228s8AnyEJhBAOp5QivFe4u8PwKFYrZGRAerq5zc4uvFgs9tcXfM5iAa3PL1Zr8Y8Lrtu1qz7bt5e8j7y0tn+/Is8JIYQQpeWu4VjaA9/lebwJiFJK1dJaJ7gpJiEcqukHH8DAgW6NIVsH4qPS3BpDXn21BqXKvJ3WcJYanKQ28dQhgZok6jASMUsSoSQSah7b1qcSRDr+pBNAGoGkE5C7ZOJJLSZbuTsAIYQQokzclUCEAOfyPM65HwrkSyCUUpOASQBRUVHExcW5Ir5iJScne0QcnkTOSWHN4uPZdc89HB861C3H12nAdV7QFnjGivJzSxj5JCcnExISkm9ddrbi+PEATsQHEB8fwPET5jb+pD9nz/px9pwf5875kp3t2P4bfn4W/Pys+PpovH2seHtrs3jp8/cLLF5ehR97eYFSGgVoZSFbZ5FNNhadhYUs2+MsAJoEN8JLAUrz97m/Sbemka2zsKpsLDrbbEcWrUNa0i6sDSjNsYyjrDq9EihQZaDM46vqXkmQj2kx+kfCco6mHc19zjD36wfUo29kX5SCNEsaC459m3+fKxx6eoUQQlRh7kogkoGwPI9z7icVLKi1ngnMBIiJidGxsbFOD64kcXFxeEIcnkTOSWHHXnqJxh060HrAALcc/+wfZ9mUvYlQ31C6Denmlhjyys6G2bPX458Yw44d5C5795rnShIaCnXqQO3aEBkJ4eEQFmZ/CQ2F4GAIDISAgMKLnx8o5Q14l3jcTEsmqw6t4mTKSeJT4olPiedk6snc22f6PUOfJn0AeGbZMzwR94Td/dQMrMn2h89fH4l+vRdHzx2wW/aKix9i2qBBAKw8eIjbfphFsF8wwb7BBPgE4O/jj7+3PwE+Abxy6c1EBkUC8OXW1ew5nYm/tz/+Pub5nPsNwxrSu3E0AFmWLP482hdfL198vX3x9fKlQ9RjJf8RhBBCCNyXQGwDOgNzbY87Ayek+ZKoSpTVCl7uG/WoRp8aXHz8YjKPZbrl+IcOwerVsHYtrFsHGzZAWlpMoXJKQePGEB1tbps0MbcNG0LduiZhqF3b/PB3pOPJx9l3Zh+HEw9zOPEwRxKPcDjJ3G8e0ZxPrvkEgPTsdPp93K/I/ew7sy83gagdXJt6IfUIDwinRkCN84t/DWoF1cq33eyrZ6O1ZueWnfTp2Ydgv2CCfIMI9g0m0Pf8GBS9Gvdi651bS/WaRncYXapyvt6+XNzo4lKVFUIIIQpyaAKhlPKx7dMb8FZKBQDZWuuC1xc/AWYrpT7DjML0ODDbkbEI4XZauzWBAPCN8MU3wjWjL6WkwK+/wtKlsGQJ7N5duEz9+mn06hVI27bkLq1amZoCR0vNSmXfmX3sPb3X3J7ZyyO9HqFReCMApvwyhY83fWx327PpZ3Pvh/qF0i+6HxGBEdQJqkPt4NrUDqpNnWBzv0OdDrllb4+5ndtjbi9VfLHRsQCoA4r2ddqX70UKIYQQbuDoGojHgSfzPB4LPKWU+gjYDrTTWh/UWi9WSk0DfscM9/pNge2EqPSU1QreJTeRcYb0Q+n41fPDy8e5CUxiIvz4I8ybB4sWQVqe/tphYdCrF/ToARdeaJYtW9Y6vKlbliULX2+TJB06d4gJ309g+8ntHE48XKjs0JZDcxOIrnW7suPUDhqENqBhWEMahjXMvZ9TBswoVr+N/82hMQshhBCVmaOHcZ0KTC3i6Xw9J7XW04Hpjjy+EJ7EnU2Yto3cRvr+dDot7kRo11CH7ltrWLUK3n8f5s7NnzRceCEMGQKXXmru+zjwE0ZrzYFzB9h4bCMbjm5g4/GNbD6xmc5Rnfnphp8AqBFQgyV7lwDg6+VLdI1omkU0o3lEc5rXbE7ryNa5+7u3573c2/NexwUohBBCVBPu6gMhRNXnpgQidVcqSeuS8A71Jqh1kMP2m5EBn3wCr78O27efX9+7N4waBddcA40aFbl5mWmtUbYhX19Y/gKvrH6F02mnC5UL8Tt/bSLUP5RFNyyiRc0WRNeIxsdLPuKEEEIIR5NvVyGcRGntliZMJz47AUDtEbXxDqr48ZOTYeZMePVVOHrUrIuKgptuggkToEWLCh8CrTW7Enax8uBKVhxawYqDK3j78re5tPmlAPh5+3E67TSRQZF0r9ed7vW6061eNzrX7UzTGk3z7euyFpdVPCAhhBBCFEkSCCGcxQ2dqLXWnJhjEoioG6MqtC+LBT78EP77X4iPN+s6doQpU0yNg28F+2ZbrBY++usjluxbQtz+OE6lnsr3/MqDK3MTiPFdxnNt+2tpGNYwt1ZCCCGEEO4hCYQQTqIsFpcnEImrE0n/Nx2/Bn7U6Fuj3Pv55Rd44AHYssU8vvBCk0gMHVquiaRNbBmJbDizgVhiAfBSXryw4gX+PfsvAPVC6tG7cW96N+5Nr0a96Fy3c+62OfMcCCGEEML9JIEQwlnc0IQpt/ZhTBTKu+y/9M+cgXvugTlzzOMmTeCll+Daa8uXOBw8d5Dvdn7Ht7u+5Y8Df5BtzWbMwDHUC62HUoopvaegtWZgs4E0i2gmtQtVkFLqLuAmoCPwhdb6pmLK3g88AgQB84A7tNYZLghTCCFEGUgCIYSTuHoUJmumlfivTFujqLFlb760eDHceqvp5xAYaGoc7r+/7BO4nUo9xbvr32XBzgVsPLYxd72X8qJ9WHviU+KpF1oPgEndJ5U5TlHpHAWeBQZjhu22Syk1GJgC9LdtswB4yrZOCCGEB5EEQggncXUCcXrxabJPZxPcMZiQTiElb2CTkWEShRkzzOOLLoLZs80Eb6WVlJFEqL8ZLlaheHrZ02RZswjyDWJIiyFc3eZqLm95OZvXbs7XNElUfVrr+QBKqRigYTFFxwMfaq232co/A3yGJBCiCli5Et55B9S+ZC7dGsi3Vx3iio8b4eMD59acY9eEXWXaX71b6tHoATPsXc72YT3CaPNhGwCyE7PZePHG4nZRiL3tfUJ96La6W26ZTZdtIuNw6SsFi9q+06JOBDSyXZ16B9bdta5Msebdfs+Dezj982mav9KcWpfVAuDYh8c49NqhMu3T3vb2znNZlPvvlALrgu2fE1f/nYrcptR7F0KUjYubMOU2XypD7cOxYzBypJnXwc8PnnkGHnywdGGfSTvDF1u/4LMtn/HvmX85dP8hvL28qRVUi5cHvUzzms0Z0HQAgb5OmGZaVEXtge/yPN4ERCmlammtEwoWVkpNAiYBREVFERcX55Igi5OcnOwRcXiS6n5O0tK8efbZtqxaZfpxjeckjUlj7+fHiV5Wi2ef3Up0QipsK9t+9/65l71xe82DDcA2SPVL5XjccbMumTLv0+72weT/+23B1A+WVhHbr/ljDTQwq7KOZpG6LbVMsebdPuf1b1m9BXJqzNdR5tdvb3t757ksKvJ3SsX+OXH536kIkkAI4SSurIHIPpfNqYWnQEGdMXVKtc3atTB8uGmy1LAhLFgAMTHFb2PVVuL2x/HhXx/yzfZvyLCYKxyBPoHsOLWDDnU6AMgEbaI8QoBzeR7n3A8FCiUQWuuZwEyAmJgY7egZzssjLi7O4TOtV3bV+ZycOQOXXw5r1kB4ONx9N1zSpSF/zE/m1xXNOHIwiIceupDFC7JpvSW9TPv2jfTFv64/ANkx2aQPTsc72JvApuaCjbZoUraklGmf9rZXXorgdsG5ZVJ/T8WaaS31PovaPqhlEF7+5vsx7u44Yt4t4cungLzbp3+STnZiNgGNAvAJNz9rM9tnknl3Zpn2aW97e+e5LMr7d1r/53piLrB/Tlz9d2Ks/W0kgRDCWVyYQJz85iQ6Q1Ojfw0CGpbcaWH+fLj+esjMhEsuga+/NnM7FOfQuUP0nd03d9QkhWJQs0GM7zyeYW2G5ZvQTYhySAbC8jzOuZ/khliEqBCLBUaMMMlDkyZmZDszZ44vfrUSmPx+R0aOhEWLYPDVPmzeHEL9+uU7lk+IDyEd8n/+Km9VaF1ZFLV9UKuKTU5qd/soKhRrQOPC33l+tf3wq+1X7n3a297eeS6LMv2dTpXunLj071SA66fJFaKaUFary5ownV5iZmguTfOlTz818zhkZsLtt5svtqKSh72n9+bebxBm6osbhzfmyb5Psu/efSy5cQk3dLpBkgfhCNuAvB1kOgMn7DVfEsLTvfwy/P471KkDy5cXnnAzKAi+/RYGDYKEBBg3zlxzEqKykARCCGdx4URy7T5vR5dlXag9onax5WbMOP9F9cQTplOfX4GLNJmWTD7d9CkXvn8hrd9qzZHEI4AZRem38b+x7559TI2dSnSNaCe9GlGVKKV8lFIBgDfgrZQKUErZq/3+BLhVKdVOKVUDeByY7bpIhXCMjRvNKHYAH38MjRqdf+74x8dhKpz6/hR+fvDJJ1C7Nvz6K7z+ujuiFaJ8JIEQwklc2QdCeSlq9KmBT1jRrRJfew3uvNPcnzYNnnoq/9wOSRlJTF89nWb/a8a4b8fx59E/CQ8IZ2v81twy0TWi8fZy7dwWotJ7HEjDjKY01nb/caVUY6VUslKqMYDWejEwDfgdOAgcAJ50T8hClI/WcN99kJ1t+jxcdln+55P/ToZlkPZPGgB168JHH5nnpk6F+HiXhitEuUkfCCGcxBVNmLTWZJ3KKrGt5yefmJmlwdQ63HFH/n08Gfckb657k7PpZwFoV7sdD/R8gOs7Xk+Qb8XaUorqTWs9FZhaxNP52r5pracD050ckhBOs3ChabJUq5YZ1a4gbdEA+Sb6vOIK09n6p5/g6afhrbdcFa0Q5Sc1EEI4iwuaMKVsTmFV3VVsv2F7kWVyJogDU0WeN3kAUEqx+cRmzqafpVejXnx//fdsuWMLt3a7VZIHIYQopexseOQRc/+JJ8zISwVpq0kgKHBtado083Xx3nuwe7dz4xTCESSBEMJJlMXi9AQiaWMSylvhU8N+ZeL69Waeh+xsePhhuPdeOJF8ggd/fpBVh1bllnu2/7Msv3k5K25ZwRWtrsBLyUeDEEKUxbx5sGsXNG9uBqiwy2JulJfKt7p9e7j5ZvNZ/dJLzo1TCEeQJkxCOIsLaiDq3VyPyKsisWYUHr7jwAEYOhRSUuDGG+HB/57ikaUv89afb5GalcqmE5v4ZdwvALnzNwghhCg7rc3IS2Au1hQcnCK3nJ0mTDmmTDH9IebMgWefhXr1nBWtEBUnlxmFcBJXDePqW8sX//r++dZlZJiah/h46D/QQsubX6TFm82YtmoaqVmpXNX6Kl4e9LLTYxNCiOogLs6MvlS7trlgU5SimjCBGer1mmvMENtvvumUMIVwGEkghHAWJ9dApGxLyb2aVdB995nmS/UaprO9b0ee+OP/SMpM4rIWl/HnxD/5bvR3dK3X1WmxCSFEdfLqq+b2rrsgMLCYgkU0Ycrx0EPmdsYMU3sshKeSBEIIJ3HmMK6WVAsbe25kdaPVZJ3NyvfcnDnw7rumCn325ykkeR2ke73u/DruVxbdsIiY+jFOiUkIIaqjAwfMCEp+foUHqSiouCZMAD17wkUXwdmzMHeugwMVwoEkgRDCSZzZhOnUd6ewJFvwb+yPbw3f3PXfL9/PzRMyAVMFfukltVg7YS3rJq6jf9P+TolFCCGqs48+MhXOI0aYJkzFyW3CVMyvr0mTzO377zsmPiGcQRIIIZzFiU2YTsw5AUDU2CjATAL34I+PctXIFLIz/Lhw6A4mTjRl29dpL6MqCSGEE1gs5yeCy/nMLX4Dc1NUDQTAqFEQFgarV8O2bRWPUQhnkF8VQjiJs5owZcZncvrn0+ANta+tzZzNc2j9VmumvxgC8e0Jq3+cr2bVyjfLtBBCCMf7+Wc4fNgM3dq3b8nlS2rCBBAcDGPGmPsffOCIKIVwPEkghHAWJzVhiv8qHizg08+H/j/058YFN3JsVwNY+QhKaX6aW5fo2nUcflwhhBD5zZ5tbidMKN31otI0YcrZH8Cnn0JWVvFlhXAHSSCEcBLlpCZMOc2XDsQeYNWhVdT2a0T9X5eA9uaBBxS9ejn8kEIIIQpITITvvwelYOzY0m3T6p1WMAdqDqlZbLlu3aBdO0hIgF9+cUCwQjiYJBBCOIkzZqLes2EPSeuS8A7x5tr7rmX6pdO5IWE3R/dF0Lo1PPOMQw8nhBCiCN9+C+npcMkl0LBh6bbxq+MHDcAnpPh5fJWC66839z//vGJxCuEMkkAI4SxaO6wJ0/Hk41w37zqmPTQNgMgRkfgG+9Iv8H7eeC0ALy+YNauE8ceFEEI4TM4P+5z+Co6Wk0AsWACpqc45hhDlJQmEEE7iiE7UVm1l5oaZtHmrDXO3zqXfpn4A1L2xLlrD3XebrhZ3323GDhdCCOF88fGmaZGPD4wcWfrt9j+7H6ZC0l9JJZZt3hx69DATyn3/fblDFcIpJIEQwlkqmED8e+Zf+n3cj9t+uI1zGeeYoCZQ73Q9/Or7USO2Bl98AStWQJ068NRTDoxbCCFEsRYsMEO4Dh4MtWqVfrtzf5yDZZAVX7qe0Tm1EF99VY4ghXAiSSCEcBJVgSZM83fMp+OMjvxx4A+igqP4auRXPHTiIQCixkSRkqZ4yDzkhRcgPNxRUQshhCjJt9+a2+HDy7Zdk/82gScguHNwqcpfc425/flnSEsr27GEcCZJIIRwlgrUQLSo2YJMSyaj2o1i651bGdVuFImrEwEzedxzz8HRoxATAzfd5MCYhRBCFCsxEX791Xy8X3ll2batcUkN6Af+df1LVb5xYzMiU2qqjMYkPIskEEI4SVn6QGitWXFwRe7jTlGd2HT7Jr4a+RWRQZEopei+vjtdV3blaGAw06ebcm+95bTJroUQQtixaJGZm6FXL6hd2/nHu/pqc/vdd84/lhClJT89hHASVcqJ5E6lnuLaeddyyaxLmLttbu76trXbovJMJ628FeEXhzNliiIz09Q89OjhjMiFEEIUJaf5Us4P+7I4/slx+AIyjmSUepuc4yxcaPpdCOEJJIEQwllKMZHc97u+p8M7HZi3fR4hfiFkWjILlbGkWMg8adb/+afpvBcYCM8955SohRBCFCEzE376ydwfNqzs2x955wjMhPSD6aXepkMHaNYMTp6E1avLfkwhnEESCCGcpLgmTIkZidzy3S1c9eVVnEg5QZ8mfdh8+2bGdio8nWn8V/GsqreKfY/v4/HHzbq77oL69Z0ZvRBCiILi4kwfiA4dzDCrZWY1N8pLFV8uD6XO10Lk1H4I4W6SQAjhLEU0Ydp+cjsdZ3Rk1t+z8Pf2Z/ql0/l9/O80jWhqdzfp/6ajlOJgViBLlkBoKDzyiLODF0IIUVBFmi8BaIs2d8o4QF/eBELr8h1bCEcqfi51IUS5qSKaMDUJb4Kftx8x9WP45OpPaFu7bbH7afpMU+rf3YDLhplvnAcfLNu440IIISrOaj3fkbmiCYTyLn0NBMDFF0NkJOzdC9u3Q/v25Tu+EI4iNRBCOEneJkx/HvmTpAwz82iwXzBLb1zKqltWlZg85Phtgx9xa7ypVQvuv99pIQvhcEqpmkqpBUqpFKXUAaXUmCLK+Sul3lVKnVBKnVZKfa+UauDqeIUoyvr1Zvjshg3N0KrlktOEqYwJhLf3+SFjpRmT8AQOTSDK8EUxVSmVpZRKzrM0c2QsQriV1XxLZFqzeOzXx+j5YU8mL5mc+3R0jWh8vX1L3M25leewZmsee8w8njIFwsKcErEQzvI2kAlEATcAM5RS9q6f3gtcBHQC6gNngDddFaQQJcn54T5smOmXUB65TZjK8etL+kEIT+LoJkx5vyi6AD8qpTZprbfZKfuV1rpwj1EhqgKrlU11FePfv5BNJzahUNQIqIHWOt/QrMVJ3pzMX73/whIdzF/7Y6hXT/Gf/zg5biEcSCkVDIwAOmitk4EVSqmFwI3AlALFmwI/a61P2Lb9CpjuyniFKM7335vb8oy+lKO8TZgABg2CoKDzNSEykIZwJ4clEGX8ohCiysq2ZvPKypd4YqIm68QmmkU04+OrP6Z3495l2s+JOScAWJ8eDigefNAM3ypEJdIKyNZa786zbhPQ107ZD4H/KaXqA2cxtRWLitqxUmoSMAkgKiqKuLg4B4VcfsnJyR4RhyepKufk5El/tm69iIAAC1qvIC6unD2Zk83Nn+v/hBNl37xTp46sWVOL11/fyeWXHy9fDB6mqrxHHKkynBNH1kCU5YsC4Eql1GngGPCW1nqGvULyJVE5yDkx0i3pTN48mW2J28Abrqp/Fbc3u53sfdnE7Ysr/Y4swCxz99PjUYSGZtG27Rri4ir3LELyPimsip+TECCxwLpzQKidsv8Ah4AjmP+ALcBdRe1Yaz0TmAkQExOjY2NjHRBuxcTFxeEJcXiSqnJOPvrI3A4Y4M2llxb1s6Zka/zXkE46PS7uQWDzsl8RGjsW1qyB/fvbEBvbptxxeJKq8h5xpMpwThyZQJTli2Iu5oP/BNAD+EYpdVZr/UXBgvIlUTnIOTnv88TPObvvDO9/cJIhO74r1z7O/HaGTac2cTYwgG1pYfz3PsXll1/i4EhdT94nhVXxc5IMFOy1EwYk2Sn7NuAP1AJSgIcxNRAy37pwu59/NreXXVax/VSkDwTAkCHmdulSyM4GHxlLU7iJIztRl/qLQmu9XWt9VGtt0VqvAv4HjHRgLEK4zKFzh9gWf76bz5tD3mTLuNUMOlD+T/YTn5q67YVpUQQGKu6+u8JhCuEOuwEfpVTLPOs6A/b6xXUBZmutT2utMzAdqC9USkU6P0whimaxmB/sAIMHV3Rn5qY8fSDAzEjdsiWcPWtqIoRwF0cmEGX5oihIA+Uc00AI99Ba8/HfH9NhRgeunXct6dnpAIQHhBPhG1bkLNQlsaRaOPnNSQCWEsXEiVC7tsPCFsJltNYpwHzgaaVUsFKqFzAM+NRO8T+BcUqpcKWUL3AncFRrfcp1EQtR2Pr1cOYMNG0KLVpUbF8V6USdI6cWYvHiisUiREU4rPJLa52ilMr5opiAuZo0DLi4YFml1DDgD0xHuQuAe4BHHRWLEM52IvkEk36YxMJdCwFoVasVaVlpBPgEmAJWK7qcCUTC9wlYkizsIJTjPkE88ICjonaexMRE4uPjycrKKrZceHg4O3bscFFUlYMrzomvry916tQhzD1jAN8JfATEAwnAHVrrbUqpS4BFWusQW7nJwBuYvhB+wFbgGjfEK0Q+Oc2XBg8u//CtOVrNbMXWP7fiU7P8P7+GDIE33oBFi+DZZysWjxDl5ejWc6X9ohhtK+cPHAZe0lp/7OBYhHCKudvmcuePd5KQlkCYfxhvDnmTGzvdmH94Vqu13N80OaMvLSWKMWOgSRNHRO08iYmJnDhxggYNGhAYGFjsMLVJSUmEhtrrFlV9OfucaK1JS0vjyJEjAC5PIrTWp4Gr7axfjuk7l/M4ATPykhAeJW8CUVGRV0RCCHgHepd7H337QkAAbNwIx49D3boVj0uIsnJoAlGGL4rrHXlcIVxl0veTeH/j+wAMbDaQj676iEbhjQoXtFjKVQOReTKThMWnsQC/U4dlD1YwYBeIj4+nQYMGBAUFuTsUYYdSiqCgIBo0aMDRo0fdVQshRKV09iysXWs6K/fv7+5ojMBAiI01TZiWLIFx49wdkaiOHDoTtRBVXa9GvQj2Debdoe+yZOwS+8kDlLsJ08m5JyFb8yc16RLrR6dOFQzYBbKysgiUCSo8XmBgYIlNzIQQ+f36q+lEfdFF4Ijc+9D0Q/AFWNIrNiR3Tj+IRUXOlCKEc0kCIUQxTqedZtE/5z+hx3Uexz93/8NtMbcVP6O01VquTtTH8zRfuueeMm/uNqWdXVu4j/yNhCg7RzZfAtj/5H6YCTqznBPR2eQkEEuWmARHCFeTBEKIIvyw+wfav9Oea766hp2ndgLmR1i90Holb2y1osv4gy37XDbn/kknFW8ONYrkyivLE7UQQghH0NrxCUTDBxrCaPDyr9jPrxYtzJCup0/Dn386JjYhykISCCEKOJN2hpu+vYkrv7iS48nHuaDBBfh5+5VtJxZLmWsgfMJ9eLn7RfyHbky821smCBJCCDfatQsOHoTISOjWzTH7bPpUU7it4gmEUtKMSbiXJBBC2Git+Xrb17R9uy0fb/qYAJ8Apl86nbjxcTSLaFa2nZWjD8TOnbB4ieJEYDC33lq2w4nyOXnyJHfeeSfR0dH4+/sTFRXFgAEDWGqbNSo6OppXXnnFzVEKIdwhp/Zh0KByT+vjVDmzYufEKYQryTVOIWyeWvYUTy17CoDejXvzwZUf0Dqydfl2VsZhXDOOZvDeNAX4ceONULNm+Q4rymbEiBGkpqby4Ycf0qJFC+Lj41m2bBkJCQnuDk0I4WY5P8xzfqg7wuklp2EL6L66wv2SYmPB19c0YTp9Wr43hGt5YE4thHuM6TiGOsF1eHfouyy7aVn5kwcww7h6l36c7z1TDzB01mou5xh3313+w4rSO3v2LMuXL+fFF19kwIABNGnShAsuuIDJkyczevRoYmNjOXDgAA899BBKqXxf9qtWraJv3765w6PecccdJCYm5j4fGxvL7bffzr333ktERAQRERE89NBDWK1Wd7xUIUQZpadDXJy5f+mljtmn1prNgzebKRMdICQEevUy16t+/dUx+xSitCSBENXW9pPbeXjpw2htRsNoVasVB+47wG0xt+GlKvivUcZO1Hs2WVBoQrqF0KFDxQ4tSickJISQkBAWLlxIenp6oefnz59Pw4YNeeKJJzh27BjHjh0DYMuWLVx66aVcddVVbNq0ifnz5/P3339zyy235Nv+s88+w2q1snr1at577z1mzpzJ66+/7oqXJoSooOXLIS0NOnd24ERtOdcPlONGRcvp3C3NmISrSRMmUe2kZKbw3PLneGXVK2RZs+gc1ZkbOpkJcAN8AhxzkDI0YdIapma25V+a884Dvo45viiRj48Ps2fPZuLEicycOZOuXbvSq1cvRo0aRY8ePahZsybe3t6EhoZSN88viJdffpnrrruOBx88P8vfjBkz6Nq1K/Hx8dSpUweAevXq8cYbb6CUok2bNuzevZvp06fzwAMPuPy1CiHKxtGjLwFoq23oVgdeuh08GP7v/0y8Wpep5awQFSI1EKLa0FrzzfZvaPt2W15Y8QJZ1iwmdpvI5S0vd/zBytCEacMG+Ptv8Knlx/ARVeTTXym7S2hYWJHPVXgphxEjRnD06FG+//57hgwZwqpVq+jZsyfPP/98kdts2LCBOXPm5NZghISE0KtXLwD27t2bW65nz575rjJedNFFHDlyJF9TJyGEZ3JKAmFxfALRuTPUrg2HD5uBOIRwFUkgRLWw69QuBs8ZzMivR3Io8RDd6nVj9a2rmXnlTCICIxx/wFLWQGQnZbNg6lkUmvHjIcBBFSBup7XdJSkxscjnKryUU0BAAIMGDeKJJ55g1apV3HrrrUydOpXMzEy75a1WKxMmTODvv//OXTZt2sQ///xDly5dyh2HEMIzHDkCW7dCUJDpY+AwORO+OfCXl5fX+T4a0oxJuJI0YRLVwrzt81i6bykRARE8P+B5JnabiLdX6Ts5l1kph3E9NOckg37chQ+1uX5ie+fFI0qtXbt2ZGdnk56ejp+fH5YC07x269aNbdu20aJFi2L3s3btWrQ+P9LKmjVrqF+/PmFhYU6LXQhRcUuWmNt+/cDf33H7dUYNBJhaks8+MwnEffc5dt9CFEVqIESVZNVWdp3alft48sWTmdJrCrvv3s3tMbc7N3kAM5FcKWogtr9xAoDEVjVp08a5IYn8EhIS6N+/P3PmzGHz5s38+++/fP3110ybNo0BAwYQFhZGdHQ0y5cv58iRI5w6dQqARx55hHXr1nH77bfz119/sWfPHn744Qduu+22fPs/evQo9913H7t27WLevHm8/PLL3H///e54qUKIMnBG8yVwTh8IMPNUACxbZkaPEsIVpAZCVDlx++N4cMmD7D+7nz137yEiMAJ/H39eGPiC64IoRQ1E+uEMAneeJRPFhZMjXRSYyBESEkLPnj353//+x549e8jIyKBBgwaMGTOGxx9/HICnn36a2267jebNm5ORkYHWmk6dOvHHH3/w+OOP07dvXywWC82aNeOaa67Jt/8bbrgBi8VCjx49UEpx6623SgIhhIezWMA2j6TDEwhnNGECM0pU586waROsWAEDBzp2/0LYIwmEqDJ2ndrFw788zMJdCwFoENqAPaf3cEGDC1wfTCkSiI0vn8AL2OAXyf03yuhLrubv78/zzz9fbIfpnj17smnTpkLrY2JiWLx4cbH79/Hx4a233uKtt96qcKxCCNfYsMFMyhYdDS1bOnbfzmrCBCbZ2bTJ1J5IAiFcQZowiUrv0LlDTPp+Eu3fac/CXQsJ9g3mmX7PsPvu3e5JHqBUTZjiPzPNl7wvi6o6naeFEKISy9t8ydFDojo7gQDpSC1cR2ogRKV3w/wbWH5wOV7Ki4ndJvJ0v6epG+KomX/KyWotdhjX0+uTqZGQwjl8GPxETRcGJoQQoijO6v8AnJ9Izgld8Hr1MqNGbdkCR49C/fqOP4YQeUkCISqd02mnycjOoF5oPQCe6PsEH2z8gKdin6J1ZGs3R2dTwjCu6547QQCwtVYdhnWXisCqJi4uzt0hCCHK6Nw5WLMGfHygf3/H7z+3BsIJ0/34+0NsLPz0k+nDMX68448hRF7yy0VUGseSjvHQkodo/FpjJi+dnLt+YLOBfDnyS89JHqDYPhDaqslabJovRV4f5cqohBBCFOHXX03r04sugvBwx+/fO9SbxlMawzDH7xukGZNwLamBEB5v/9n9vLzyZT7860MyLBkAnEk7Q5YlC19vD+18bLEUmUAcWHiW0PRMjhHAVY/KnABCCOEJnNp8CfCN8KXZC804GHfQKfvPmVBu6VJTCV6KqYiEKDdJIITH+vfMvzwR9wRfbv2SbGs2AMPbDuf/ev8fMfVj3BxdCYppwvTXSyeIAP5tHsX19ZxQly2EEKJMtHZ+AuFsrVtD48Zw8CBs3AgxHv41KSo3yU+FR/t8y+dorRnbaSzb7tzGN9d+4/nJAxTZhMmSZiFw3UkAWtwhzZeEEMIT7NoFBw5AZCR06+acY2QnZ3N6yWnY5pz9K3U++cmZTVsIZ5EEQniEU6mneHXVq1z5xZVobTqaNY1oygdXfsCee/bw6TWf0q52OzdHWQYWi9364+2LU0m1erHbK5Qr7ghyQ2BCuJ5SqqZSaoFSKkUpdUApNaaYst2UUn8opZKVUieUUve6MlZRPeXUPgwa5LymPxkHMtg8eDO87Jz9g/SDEK4jTZiE22itWXZgGTM3zOSbHd+QackEzEzS/Zr2A+Dmrje7M8TyK6IG4sv1obzIRdw5MpMgyR9E9fE2kAlEAV2AH5VSm7TW+a7FKqUigcXA/cA8wA9o6NpQRXXkiuZLXkFeRAyK4IzfGacdo39/kwCtWgWJiRAm3eyEk0gNhHC5tKw0Xl75Mm3ebkO/j/vxxdYvyLJkcXnLy/lu9Hf0adLH3SFWnJ0+EFYrzJkDVrwYeafMHFcZxMbGctddd7k7DKB0sXTo0IGpU6e6JqBSUkoFAyOA/2qtk7XWK4CFwI12ij8A/Ky1/kxrnaG1TtJa73BlvKL6SU+HnJGXczoiO0Ng00A6L+kMk0suW14REdCjB2Rnw++/O+84QkgNhHCJTEsmft5+APh5+zF9zXSOJx+nfmh9JnSdwC1db6FJjSZujtKB7IzC9MfHKZw56EeTJr5ccomb4hL5nDx5kieffJKffvqJY8eOUaNGDTp06MCUKVMYNGgQ8+fPx9fXM0b68qRYyqgVkK213p1n3Sagr52yPYEtSqlVQAtgLfAfrXWhYWuUUpOASQBRUVEeMfdGcnKyR8ThSSrDOdmwIYK0tM40a5bMrl3r2bXLucdz9jlp3boJq1c3ZdasI4SH/+O04zhKZXiPuFplOCeSQAinSc1KZfGexXy9/WsW/bOIvffspVZQLby9vHlp4EuE+4cztNVQfLyq4NvQThOm+Ed28Q1JbO7TGS+vGu6JS+QzYsQIUlNT+fDDD2nRogXx8fEsW7aMhIQEAGrW9JxZwj0pljIKARILrDsHhNop2xDoBgwCtgDTgC+AXgULaq1nAjMBYmJidGxsrOMiLqe4uDg8IQ5PUhnOyY8/mtsRI0KcGqs1y4ol0cLKtSudepyAAJg9G7ZubUBsbAOnHcdRKsN7xNUqwzmRJkzCoRIzEvliyxeMnDuS2i/XZsTcEXy59UvOZZwjbn9cbrlxnccxrM2wqpk8QKEmTMmnLRw57U0GXgx9wN7vJuFqZ8+eZfny5bz44osMGDCAJk2acMEFFzB58mRGjx4NFG42dOLECa666ioCAwNp0qQJs2bNKtRsSCnFjBkzGDZsGEFBQbRq1Yrff/+dw4cPM3jwYIKDg+nSpQsbN27MF8/8+fPp2LEj/v7+NGrUiOeeey53QAF7scTHxzNs2LDcWD766CMnnakKSwYKtsQOA5LslE0DFmit/9RapwNPARcrpZwwrZcQhquGb01an8TKyJXwkHOPExMDNWrA3r1mEcIZJIEQDpOalUr9V+szZv4YvtnxDalZqVxQ/wJeHPAi++7Zx4h2I9wdousUaMK0cLE3D1g6My3mItp08XZjYCJHSEgIISEhLFy4kPT09FJtM378eA4cOMBvv/3Gd999x5w5czhw4EChcs8++yyjR49m06ZNxMTEMHr0aG699VbuvPNO/vrrL+rXr89NN92UW37Dhg2MGjWK4cOHs2XLFl588UVeeOEF3nrrrSJjuemmm9izZw+//PIL3377LZ988gn79+8v62lwhd2Aj1KqZZ51nbE/mOVmQOd5rO2UEcJhjh6FLVsgKAh693busbTF9nZ28vQ/Pj4wcKC5L8O5Cmepopd/hTMlZiSy/MBylu5byoZjG1h20zIAgnyD6F6/O1ZtZUTbEQxvO5zG4Y3dHK2bFJgG9JNPzO3om6vHv5x6quhvyPeueI9J3ScBMHPDTG774bYiy+onz/9+7D6zOxuPbSyxXGn5+Pgwe/ZsJk6cyMyZM+natSu9evVi1KhR9OjRo1D5Xbt28fPPP7N69Wp69uwJwOzZs4mOji5Udty4cVx//fUAPProo3zxxRcMHjyYYcOGAfDwww/Tr18/Tp06hb+/P9OnT6dv37489dRTALRq1Yp//vmHl156ibvvvrvQ/nfv3s2iRYtYsWIFvXqZ1j0ff/wxzZo1K/N5cDatdYpSaj7wtFJqAmYUpmHAxXaKzwK+UUq9gUkw/gus0Fqfc1W8onpZvNjc9usH/v5OPpjFduuCa0iDB8O8eaZ25Y47nH88Uf1Uj18zokJSs1L548Af/P7v7/y+/3c2HNuAVVtzn8/7o+6XG3/B17tSdvR0LKsVbWvCtH9FKseXZOLnE85118nM055kxIgRDB06lOXLl7N69WoWL17Mq6++ynPPPcejjz6ar+zOnTvx8vIiJs/0ro0aNaJ+/fqF9tupU6fc+1FRZsLAjh07FloXHx9Po0aN2LFjB0OHDs23j969e/PUU0+RmJhIWIGxGHfs2IGXlxcXXnhh7romTZrYjcVD3Al8BMQDCcAdWuttSqlLgEVa6xAArfVvSqlHgR+BIGAFUOScEUJU1E8/mdvLL3f+sbTVdqHDBW0/ckaT+u03yMqCyjn+gvBkkkCIfLTWHDh3gHPp5+hctzMAO07uYMhnQ3LL+Hj50LNhT/pF92NIiyF0qduFFbtXAEjykMNiQXuby0xrpxzhdX2EtS2aUKtWUzcH5hpF1QgkJSURGnq+D8ik7pNyayNKsmHSBofEVlBAQACDBg1i0KBBPPHEE0yYMIGpU6cyeXL5x1rMO1qSsiWS9tZZrVZKolTRSWdxz3kSrfVp4Go765djOlnnXTcDmOGayER1lpUFS5ea+0OGFF/WEVzVhAmgcWNo0wZ27oTVq6FPFRgdXXgWSSCquYTUBP4+/jdrj6xlzeE1rDuyjhMpJ+jduDfLb14OQJe6XejftD8X1L+AftH96NW4FyF+ISXsuZqzdaK2ZlkJXhMPQLsJkW4OSpRGu3btyM7OLtQvok2bNlitVjZs2JDbxOnw4cMcPXq0wsds27YtK1euzLduxYoVNGzYMF/CVTCWdevWcfHFpiXQwYMHHRKLENVFzmRrbdpAU1dc23FhEyYwzZh27jT9ICSBEI4mCUQ1kWXJYlfCLuqH1qdmoBkO8tFfH+WFFS8UKlszsCZRwVG5j729vPl13K8ui7VKsA3juvHdM4RYsjjkFcS1d0nS5UkSEhIYNWoUt9xyC506dSI0NJT169czbdo0BgwYUKjZUOvWrRk8eDC33347M2bMICAggIceeoigoKAK1wQ8+OCDXHDBBUydOpUxY8bw559/8uqrr/L888/bLd+6dWsuu+wybrvtNmbOnElgYCAPPPAAgYGBFYpDiOpk0SJz64rmS+DaJkxgEoj//c/0g3j2WdccU1QfkkBUMRarhTWH17ArYRe7Tu0ytwm72Ht6L1nWLOZcM4cbOt0AQLOIZgT7BtMxqiMX1L+AHg160KNhD5pHNK80TSM8lq0GYtfbJ2gAnL0gCn9/OaeeJCQkhJ49e/K///2PPXv2kJGRQYMGDRgzZgyPP/643W1yOl3HxsZSp04dnn76afbt20dAQMVmFu/WrRtff/01Tz75JM8//zxRUVFMmTKl2Jmnc2Lp378/kZGRPPnkk8THx1coDiGqE1f2fwDXNmECU+vg5wcbNsDJk1C7tmuOK6oHSSAqmcSMRPaf3Z+7HDh7AKu28tplrwGmTfTATweSnl14WMpmEc3ItmbnPh7XeRy3dL0FLyWj+TqcxUJGVhC1d50CIGZKVAkbCFfz9/fn+eefL/IqP1BoJtC6devy/fff5z4+deoUkyZNokWLFrnr8s7dABAZGVloXZs2bXLXJSWZ6RCGDx/O8OHDSx1LVFQUCxcuzLduwoQJRW4vhDjv0CEzfGtwsPOHb83l4iZMwcHQt6/p57F4Mdx4o2uOK6oHSSA8RHp2OseSjnE06SjHko9xLOkYlza/lNaRrQF45893ePy3xzmTfqbQtmH+YUwfPB2lFF7Ki6vbXI2X8qJ1rdZmiWxNy5otCfYLzredn7efS15btWS1snFPf2phZXdgOBOHVewKtfAMv/32G0lJSXTs2JH4+Hgee+wxIiMjueyyy9wdmhCiDHKGbx040AXDt9q4ugkTwBVXmATihx8kgRCOJQmEE5xLP8fJ1JMkZiRyOu00CakJnEo9RUJaAuH+4dzb814AMi2ZtHqzFQlpCSRnJhfazwdXfpCbQHgrb86knyHQJ5DoGtG5S5PwJkTXiEajUbZ60S9GfOG6Fyvss1pJOdyaWoDXpVFIi7CqISsri8cff5x9+/YRFBREz549+eOPPwgODi55YyGEx8hpvuSK0ZdyuLoJE8DQoXDvvSZhkuFchSM5NIFQStUEPgQuBU4B/6e1/txOOQW8COTUt38ATNEF6/ld4GTKSc5lnCM1K7XQUj+0Pr0bm7rNE8kneG3NayRlJPHPwX+Yfmw6iRmJJGYkci7jHF+P+ppu9boBpnPyO+vfsXu8drXb5SYQft5+xKfEk5adhq+XL3VD6lIvtB71QszSqlar3O1GdxjN1W2upk5wHemfUAkc3RFCwwzIRNH/aWl4WlUMHjyYwYMHuzsMIUQFZGbCL7+Y+65MIHKbMLmwBqJ5c2jbFnbsgBUrzIR5QjiCo2sg3gYygSjMbKM/KqU2aa23FSg3CTMmeGdAA0uBf4F3i9v5kaQj3PXTXWRaMsmwZJBpyTT3szMY33k8o9qPAuDnPT8zeenkfM/n3M+0ZHJi8gnCA8IBGPX1KJYdWGb3eNe1vy43gUjKTOKllS+df7JAX8WE1ITc+/VD69Msohlh/mHUCKhBZFAktQJrERkUSZPwJvm22/6f7UQERBDmH1ZsYhAeEE444cWdHuEhspOy2fZpU3yBDQ0bcGknueQjhBCeYsUKSE6G9u3NfAmu4hvlS8TACM40LtwU2ZmuuMIkED/+KAmEcByHJRBKqWBgBNBBa50MrFBKLQRuBKYUKD4eeFVrfdi27avAREpIIAL2BRB7Xazd58L8w1jltwoA32xfnkx7kpNhJ7lz0p25ZWa9PYuQtBDSbkojvKH5MT7ug3Hct+U+lFIoVL5bP28/Vt1j9mnVVn7O+hmlFMtfWE633t0I9w/H9z5frGuttO7dGpqb44xdOZZ+bxb9X7qKVfkeH+Uo7b5oR42+NQA48MIBjrx5hMZTGtPwnoYAJPyYwK6Ju4o7PYXY277m5TVp80EbANIPpbOxx8bidlGIve39G/rDtPNl1rVfR/aZ7CL2UJh/Q3+6r+teaPsLtl6Ab03z43vb6G2c++NcmWK1t72981wWpfk77bhxB74pij0EE/V4szLtXwghhHO5evSlHBGxEUTERhQaEMHZrrgCXn7Z9IN45RWXHlpUYY6sgWgFZGutd+dZtwnoa6dse9tzecu1t7dTpdQkTI0FLVQLIpOLmIwrGTLJBMALLyKJpEZQDT6/8HN8vHzwVb6EvxqOSlbsWL+DnXt2AtAsoxkkFv2icvYJ4IfpdHxh0IWEHDdj+mcfzYYTsGPjDnZ47zAFtwLHit6nPX+v+9vUxeTZfs/mPeyJ22PWrS/7Pu1tf3z3cY7HHTfrjpd9n/a2z7RmkpycfP5D8TDFntOCMq2Z+T9QbduvXL6S3EqXvWWP1d729s5zWZTq73QGTuHHS6oFrzdcSVycxf7Oqojw8PDckYRKYrFYSl22unDlOUlPT3f5jxchPInWkDN42dCh7o3FVS6+GGrUgF274J9/oGVLd0ckqgJHJhAhFP7ZeA4oPI2qKXuuQLkQpZQq2A9Caz0TmAnQvXN3fdGii0odkPJW+EWdH2koY1cGaPCr64fyMs2FshZnYc2wlnqfAKt3riY2Njbf9j41ffAOMGOzZXfLxvJy2X402tveO9Qbn1DzJ7L0sJA9sfRX9QG723sFeOVelbdmW8nqk1WmfdrbXnkrVu1YlXtOMnZmnP+RXQqF/k47HfN3sre9K/5Or6Zk8/jLPgxpvJahQy8p0/4rox07dtidLdmepKSkUpetLlx5TgICAujatatLjiWEJ9q50/yIrlkTevVy7bEt6RasKVYoPMq6U/n4mL4eX3xhmjHdd59rjy+qJkcmEMlAWIF1YYC9S2sFy4YBySV1ola+Cv/65R9vzb9e4W19a5WjfXqeOhZ72/uE+eATVv5Ta29770BvvAPLP3i0ve29fLwqdD7zbb/j/Hp757ksHPZ3KmF7Z/ydvAK8+eBbb7KA4c1XABeXe/9CCCEc67vvzO0VV5gf1q50Ys4Jdk/cDZcDLh75+YorTALxww+SQAjHcORYALsBH6VU3sqxzkDBDtTY1nUuRTkhKpW1a83VrbohSfSqv6PkDYQQQrhMTgIxbJjrj+3l64VPhA+4YVqgyy4DLy9YtgwSy9DEWIiiOCyB0FqnAPOBp5VSwUqpXsAw4FM7xT8BHlBKNVBK1QceBGY7KhYh3OWTT8ztDR024y2zrFRrSinmzZvn7jCEEDbHj5uLPP7+cOmlrj9+3fF16X26N9zt+mPnNNnKzoYlS1x/fFH1OHo04juBQMwgp18Ad2ittymlLlFK5Z0p7T3ge2ALpivqj7Z1QlRaGRnw5Zfm/o0d/0Zmj/NcSqlil5tuusndIQohHOz7700n6oEDISTE3dG43hVXmNucTuRCVIRDr5FqrU9j5ncouH45puN0zmMNPGxbhKgSfvwRzpyBTp2gc+QR9sW7cLYgUSbHjp0ffuuHH35g4sSJ+dYFBga6IywhhBPl/HB2R/MlT3D11fDIIyaRyswEP78SNxGiSPILRwgH+dTWWG/cOMBqNQ1OhUeqW7du7lKjRo1861JSUhg3bhx169YlODiYbt268cMPP+TbPjo6mmeffZbbbruNsLAwGjZsyMsvv1zoOKdPn2bUqFEEBwfTrFkz5syZ44qXJ4QoICXFzD6tFFx5pXtiOPrBUdY0XWO/YbcLtGplJs87exZkNGdRUfILRwgHOHXK1EB4ecGYMYDVipYmTJVScnIyQ4YMYenSpWzatIkRI0YwfPhwdu7cma/ca6+9RseOHdm4cSOPPPIIDz/8MKtXr85X5umnn2bYsGFs2rSJ6667jltuuYWDBw+68uUIITDt/tPToUcPqFvXPTFkn80mfX+6GYfSTYYPN7fffOO+GETVIAmEEA7w1VeQlWU65tWrh0kgvMs/7G5lplTRS1hYaLHPV2RxlM6dO3P77bfTsWNHWrRowWOPPUa3bt0KdYi+9NJLueuuu2jRogV33303LVq04Ndff81X5sYbb2Ts2LG0aNGCZ555Bh8fH/744w/HBSuEKBV3jr6UK2faITdeWxoxwtx++y1YqvYcp8LJJIEQwgFyRl8aN862wmKRTtSVVEpKCg8//DDt2rUjIiKCkJAQ1q9fX6jmoFOnTvke169fn/j4+CLL+Pj4ULt27UJlhBDOlZ1t5j8AuOoq98WhLbaprtx4balTJ2jWDOLjYeVK98UhKj9JIISooF27YN06CA3Nc3WrGjdh0rroJTExqdjnK7I4yuTJk/n666955plnWLZsGX///TcXXnghmZmZ+cr5+uafnFAphdVqLXMZIYRzLVsGCQnQsiW0beu+OLTV9kHlxl9eSp2vhZg/331xiMpPEgghKujjj83tyJEQFGRbabVCNW3CVNmtWLGCcePGMWLECDp16kTDhg3Zu3evu8MSQpTTV1+Z2+uuc3PFsAc0YYLz/SDmz3fsxRdRvUgCIUQFWCznmy/dfHP+J6prDURl16pVKxYsWMDGjRvZsmULY8eOJT093d1hVWpKqZpKqQVKqRSl1AGl1JgSyvsppXYopQ67KkZRNWVlne8wfO217o3FE5owAVx4ITRoAIcOwfr17o1FVF6SQAhRAb/8AkeOmDalvXvneUKGca20pk+fTp06dbjkkksYMmQIPXv25JJLLnF3WJXd20AmEAXcAMxQSrUvpvxDwElXBCaqtt9+g9OnTdOlDh3cG4snNGEC89V0zTXmvozGJMrLoRPJCVHdzJ5tbm+6qUDVeDXuA1HZjBw5Ep2nHr9Jkyb88ssv+cpMnjw53+P9+/cX2k9cgYHVtZ22Afa2q+qUUsHACKCD1joZWKGUWgjcCEyxU74pMBZ4AHjflbGKqsdjmi+BxzRhAtMP4q23TALxwgsecG5EpSMJhBDldPYsLFhg7ueOvpTDYkFLDYQQAK2AbK317jzrNgF9iyj/JvAokFbcTpVSk4BJAFFRUYUSOHdITk72iDg8iTvPSVaW4uuvLwZ8iY5eR1xcqlviyPWvucnIznD7+8RiUdSocRF79vjxwQfradnSfZNTyP9NYZXhnEgCIUQ5ffUVZGRA//7QpEmBJ6UJkxA5QoDEAuvOAaEFCyqlrgG8tdYLlFKxxe1Uaz0TmAkQExOjY2OLLe4ScXFxeEIcnsSd5+THHyE5GTp2hPHjL3RLDHnt+WEPhzmMf6C/R7xPbrgB3n4bdu2KYeJE98Uh/zeFVYZzIr9whCinvM2XCpEmTELkSAbCCqwLA5LyrrA1dZoG3OOiuEQVN3euuXV35+lcHtSECUwCAfD55zKpnCg7SSCEKIedO2HNGggJOT8kXj4WiwzjKoSxG/BRSrXMs64zsK1AuZZANLBcKXUcmA/UU0odV0pFuyJQUXWkp5vZlsFzEgivQC98InzA392RGD17mgFAjh0DD28tIzyQJBBClEPO3A/XXgvBwXYKSA2EEABorVMwycDTSqlgpVQvYBjwaYGiW4FGQBfbMgE4Ybt/yEXhiiri558hMRG6dIFWrdwdjdHs+Wb0Pt3bvPs9gFLnayE++8y9sYjKRxIIIcoo79wPdpsvgfSBECK/O4FAIB74ArhDa71NKXWJUioZQGudrbU+nrMApwGr7bE0sBBlMmeOub3uOvfG4elyEoh58yCt2GELhMhPfuEIUUa//AJHj9qZ+yEvGYVJiFxa69Na66u11sFa68Za689t65drrUOK2CZOa93QtZGKqiAhARYuNNdwxo51dzSerXVriImBpCT44Qd3RyMqE/mFI0QZFTn3Q17ShEkIIdziiy8gMxMGDYKGHpSC7n14L2uaroHf3R1JftKMSZSHJBBClEHO3A9KwfjxxRSUJkxCCOEWs2aZ25tvdm8cBWWdzCJ9fzqkuzuS/EaPNl9XP/1kZu0WojTkF44QZfDll+fnfmjcuJiCVqs0YRJCCBfbvBk2boQaNWCYh3RWztHs5Wb02NsD+rg7kvzq1oWBAyEr6/zQt0KURH7hCFFKWsPMmeZ+iVe2LBapgfBwN910E0oplFL4+PjQuHFj7rjjDs6cOVPqfURHR/PKK6/YfU4pxbx58+we94orrih33EKIouXUPowZAwEB7o2lIL9IPwKbBYK9kfvcbNw4c/vBB+6NQ1Qe8gtHiFLasAH++gtq1oQRI0ooLH0gKoWBAwdy7Ngx9u/fzwcffMD333/PnXfe6e6whBDlkJl5fvQlT2u+5OlGjDDfbRs2wPr17o5GVAaSQAhRSjm1D+PHl+LKljRhqhT8/f2pW7cuDRs25NJLL+W6665jyZIluc/PmjWLdu3aERAQQKtWrXjttdewWq1ujFgIUZQff4RTp6BDB+je3d3RFHbwlYNsHbm18BSKHiAg4Hy/vvfec28sonKQXzhClEJSEnz+ubk/cWIpNpAmTJXOvn37WLx4Mb6+vgC8//77PProozz99NPs2LGDV199lZdeeol33nnHzZEKIezJGSHv5puLGSHPjRJXJ3Lqm1Nwyt2R2Ddpkrn94gszCZ8QxfFxdwBCVAaffw4pKdCnD7RtW4oNqnkTpjgVV6byId1CiNkQU2j7WB2bu2599/Ukb0y2u33ecmWxePFiQkJCsFgspKeboVGmT58OwDPPPMO0adMYOXIkAE2bNmXKlCm888473HXXXeU6nhDCOQ4dMjUQPj6eO/eDtmhzx0OvLbVpA337wrJlZkjXO+5wd0TCk0kCIUQp5DRfyrlCUyKrFby9nRaPcIw+ffowc+ZM0tLSeP/999m7dy/33HMPJ0+e5NChQ9x2223ckedbNDs7G621GyMWQtgzY4ap+B09GurUcXc0RciZT91DEwiA224zCcR778Htt3tmTY7wDJJACFGCDRvMsICl6jydw2Kp1jUQRdUIJCUlERoaWq7t89ZQOEpQUBAtWrQA4I033qBfv34888wzuUnDu+++y8UXX1yufYeGhnLu3LlC68+ePUt4eHj5gxZC5JOWdv4izz33uDeW4mirZ9dAAAwfDpGRsGkTrFsHPXq4OyLhqTz4bSyEZ8jpUFaqztM5ZCK5SunJJ5/kpZdewmKxUL9+ffbu3UuLFi0KLaXRunVrNmzYkG+dxWJh06ZNtG7d2hnhC1EtffEFJCRATAz07OnuaIrm6U2YAPz9z49gJZ2pRXGkBkKIYpw9W8bO0zlkFKZKKTY2lnbt2vHss8/y1FNPcffdd1OjRg0uv/xysrKy2LhxI0eOHOH//u//crc5evQof//9d779NGzYkAceeICbb76Z9u3bM2jQIFJTU3nzzTc5ffo0k0rdFk4IURyt4Y03zP177vHwJjeVoAkTmKa6L79sErNp00yNhBAFefjbWAj3mjXLdJ7u37+UnadzVPMmTJXZgw8+yIcffsigQYP46KOP+PTTT+ncuTOXXHIJM2fOpGnTpvnKv/baa3Tt2jXf8uWXX3L99dcza9YsZs2aRUxMDJdddhnHjx9n+fLl1K1b102vToiqZfly09ymTh249lp3R1O8ylADAdCiBQwdCunp8Pbb7o5GeCqpgRCiCBYLvPWWuV/mdrXShMnjzc4Z87GAMWPGMGbMGACaNGnC9ddfX+Q+9u/fX+wxrr/++mK3F0JUTE7tw+23m+Y3nqwy9IHI8fDDZlSrN9+Ehx6CoCB3RyQ8TSV4GwvhHj/9BPv2QXQ0XHFFGTeu5sO4CiGEsx04AAsWmKFbb7/d3dGUQiVpwgRwySWmA3VCgqmJF6KgSvA2FsI9cq5s3XVXOUZktVhkGFchhHCi//3PVPZeey3Uq+fuaEpWWZowgelL8vDD5v6rr0J2tnvjEZ6nEryNhXC97dvhl19Mte0tt5RjB1IDIYQQTnPq1PlRgh56yL2xlFZuE6ZKcm1p2DBo2RL+/Re++cbd0QhPI30ghLDjzTfN7bhxEBFRjh1IHwghhHCa//0PUlPh8suhSxd3R2NkWjL5etvX7Duzj/1n93My9SQJaQkkpCaQkpXCh8kf4ocfKPhm+zc89ttjBPsFUyuwFvVD69MgtAENwhrQulZr+jTpg6+3r1tfj7c3PPigaR42bZqp6ZHrYiKHJBBCFHDmDHzyibl/993l3Ek1G8ZVa42SbxaPJjNoi6ri3LnzF3kefdT1x0/OTGbN4TWsPLiSLGsWz/Z/FgBv5c1N391EttV+e5/9L+/nxtY3snbPWk6knGBXwi675byUFymPpuCLSSBm/TWLMP8wejbsSYOwBs55UUUYNw6eeMJMpvrrrzBwoEsPLzyYJBBCFPD+++bK1oAB0K5dOXdSjYZx9fX1JS0tjSAZpsOjpaWl4evr3iuaQjjC66+bJKJvX+jVy/nHy7Jksfrwahb9s4hf//2Vjcc2YtGmR3REQATP9HsGpRTeXt7c3v12gv2Cia4RTd2QutQKrEWtoFqE+IVQM7AmgX6BcBBu6HgD/aL7kZyZzKnUUxxJOsLRpKMcOHuApMwkAnzMrKVaa6b8OoX4lHgAWtVqxYCmAxjQdAADmw0kPMC5s9oHBsJ995lEbepU871YTb7aRAkkgRAij/R0eO01c79C7WqrUROmOnXqcOTIERo0aEBgYKDURHgYrTVpaWkcOXKEqKgod4cjRIWcPg3Tp5v7Tz/tmmO+te4tHljyQO5jL+VF93rduaTxJVzY4EIs2oKPMj+n3rz8zVLtMzwgvFQ//rOsWUzqNol1R9ex+tBqdifsZnfCbmasn4Gvly8zr5zJTV1uKtfrKq277jIdqVeuhJ9/hssuc+rhRCUhCYQQeXz8MRw/btrUXnppBXZUjZowhYWFAWZG5qysrGLLpqenExAQ4IqwKg1XnBNfX1+ioqJy/1ZCVFavvAKJiTBoEPTp49h9p2WlsXjPYuZun8sF9S/ggYtM0nBZi8t4b8N7DGkxhMEtBtOrUS9C/UPLvP9/7v2HzKOZMKr02/h5+/FM/2cAyLZm8+eRP/n1319ZsncJKw+tpFNUp9yyc7fN5VjSMcZ0HEPt4Npljq8ooaHwyCNmVKb//hcGD5ZaCOHABEIpVRP4ELgUOAX8n9b68yLKTgUeAzLyrO6ktd7nqHiEKKvsbNNRDGDKlAp+QFos1aYGAkwSUZofp3FxcXTt2tUFEVUeck6EKJ0jR0zzJYBnnnHMPrXWrD2ylg83fshX274iKTMJgK3xW3MTiLa127Lzrp0VPtbpxadJ250GZZ1XyMbHy4eLGl3ERY0u4vE+j3My5SSRQZG5z7+x9g1WHlrJ5KWTGdpyKOM7j2doq6H4eftVOPb//MfU/Kxfb0ZkGjmywrsUlZwjf+G8DWQCUcANwAylVPtiyn+ltQ7Js0jyINxq3jwzcVzz5g74cJRhXIXIpZSqqZRaoJRKUUodUEqNKaLcQ0qprUqpJKXUv0qpSjJAp3CFJ56AtDQYPtxMclZR3+/6no4zOnLRhxfxwV8fkJSZRPd63Xlp4Et8f/33FT9AAS3faEm7ue0gsuSypVE7uHa+JqP39riXK1pdgdaa73Z9x/C5w6n/an3uXXQv/yT8U6FjBQXBk0+a+488ApmZFdqdqAIcUgOhlAoGRgAdtNbJwAql1ELgRmCKI44hhDNpDS++aO4//LAD5oCrRk2YhCiFvBeYugA/KqU2aa23FSingHHAZqA5sEQpdUhr/aUrgxWeZ/NmMyOyj8/5z+ryyLRk5l6Rt2gL205uo3ZQbcZ3Hs8tXW+hbe22Doq4sJqDawKwPW67U/Y/qv0oRrUfxfHk43y2+TNmb5rN1vitvLHuDTpFdaJlrZYV2v+ECWb43J074Z13TOdqUX05qglTKyBba707z7pNQN9itrlSKXUaOAa8pbWeYa+QUmoSMAkgKiqKuLg4x0RcAcnJyR4Rhyep7Odk3bqabNrUiZo1M4iOXktcnLVC+7soLY2UtLRKfU6cobK/T5yhqp+Tslxg0lpPy/Nwl1LqO6AXIAlENaY13H+/ub3jDjO5WVlYtZWf/vmJ6aun0zCsIZ9cY8bpHtpyKAuuW8DlLS93SDMfT1E3pC4PXvwgD1z0AH8d/4tZf83i+o7X5z7//PLn0VozsftE6gTXKfV+fXzg5ZfhyivhqafghhugtuO6WohKRjlibHCl1CXA11rrunnWTQRu0FrH2infDjgLnAB6AN8AD2itvyjuODExMXr9+vUVjrei4uLiiI2NdXcYHqUynxOtzXCAy5fDSy+ZGogKi4pi5YwZ9Bo+3AE7qzoq8/vEWTzlnCilNmitY5yw367ASq11UJ51k4G+Wusri9lOARuB97TW79p5Pu/Fpe5ffun+HCM5OZmQkBB3h+FRHHFOfvutNs88056wsCw++WQt4eH251koKN2SzpITS5h3eB6H0g4BEOYTxpc9vyTQO7BCMZXLfCAdkgcmE1LHPe+TNEsao1aPIsWSgq/yJbZ2LNc2upYWIS1Ktb3W8PDDnVi/viaXX36Mhx6yP5dFWcj/TWGedE769etn97uhVDUQSqk4iq5NWAncDRTsQRkGJNnbQGudt/5ulVLqf8BIoNgEQghnWLrUJA81a5oZNx3CanVAOyghqoQQILHAunNAScPYTMX005tl70mt9UxgJpiLS56QhHlKMuhJKnpOkpNh7Fhz/+WXfRk2rHeJ25xKPcX/1vyPGRtmkJCWAECjsEbc2+NeJnSb4PS5E4qyaswqMo9lEjIoxG3vE6u2Mj96Pm//+TY/7P6BpfFLWRq/lAFNBzD54skMbj64xKG4P/sMOnSAn36qx3//W4+ePSsWk/zfFFYZzkmpGmlrrWO11qqIpTewG/BRSuWtWOwMFGzfWuQhMG1fhXApreGxx8z9Rx4Bh41yWY0mkhOiBMmU4QITgFLqLkxfiKFa64yiyomq77HHzOhLMTFw662l2+ZM2hmeW/4cCWkJxNSP4YsRX7D3nr08ePGDbkseALTV1uLDjd3jvJQXlza/lO9Gf8fee/Zyf8/7CfEL4dd/f2XIZ0PYeGxjifto1QomTzb3J02SDtXVlUPexlrrFEzl3NNKqWClVC9gGPCpvfJKqWFKqQhlXAjcA3zniFiEKItvvzXD0tWtaybLcZhqNJGcECUo0wUmpdQtmL4RA7TWh10Qn/BQq1bBm2+aytyZM+1X6mqt+XnPz/znx/+Q0yS7Za2WvDDgBZbfvJx1E9YxusNofL09YBZ2i+3WQ74aomtEM33wdA7df4iXBr7EqHaj6F6/e+7zn23+jNNpp+1u+/jj0KwZbNlimv6K6seRE8ndCXwExAMJwB05I2zY+kgs0lrnNOgabSvrDxwGXtJaf+zAWIQokcViPgTB3AYFFV++TGQUJiEAc4FJKZVzgWkCZhSmYcDFBcsqpW4Angf6ydDe1VtamqlxMG3uoeBUKenZ6Xy2+TNeW/Ma206aXHRku5H0a9oPgEd6P+LqkEukLe6vgbCnRkANHu6Vv/Pf5hObGbtgLEG+Qdza9Vbu63kfzSKa5T4fFAQffAD9+5s5Oa65xjRrEtWHw97GWuvTWuurtdbBWuvGeSeR01ovz5M8oLW+Xmtdyzb/Qxut9RuOikOI0vriC9i+HZo0gYkTHbxzacIkRF53AoGYC0xfYLvApJS6RCmVnKfcs0At4E+lVLJtKdSBWlR9U6aY4ULbtDHzP+Q4mXKSp5c9TZPXmzDh+wlsO7mN+qH1eWHAC3Su29l9AZdCbhOmStI9bnDzwaRmpfLmujdp+WZLRs4dyepDq3Of79fPNGHKyjL9VDKksWG14sgaCCEqjays85PiTJ0Kfo4ewU+aMAmRS2t9GrjazvrlmE7WOY+bujAs4aF+/hneeMMMGzpnDgQEmPUWq4XuM7tzKNGMqNSlbhcevOhBrm1/beUYhjWnCVMluLbUKaoTi8cuZvOJzUxfPZ3Pt3zONzu+4Zsd3zCg6QCW3rgUpRSvvgq//gqbNpma/JdfdnfkwlXkF46olt55x8w63br1+RE+HEpmohZCiDI7ehTGjTP3n3pKczbiV5IyTH97by9vbu5yM1e0uoLfxv3GxkkbGdtpbOVIHvDcJkzF6RTVidlXz2b/ffv5v97/R0RABC1rtswdqck/MIuZs1Lx9oZXXoFFi9wcsHCZSvQ2FsIx4uPP1z5Mm2aucjmcDOMqhBBlkpUF111nPqPbXnCUr2p0Z+CnA/nor49yy0yNncr3139Pv6b9Shxu1NPkJhCV8Kuhfmh9nh/wPAfvP8gz/Z/JXf/19q8ZuaohvccvBswFuQMH3BWlcCVJIES189hjcO4cXHaZmVHTKaQPhBBClMkd9yazYgV4hR1jR98ubD75F1HBUQT4BOSWqWxJQz5W220l/uUV4hdCZFBk7uNl+5dxJv0Myxpejmr5E6dPw2VXpJKcXMxORJVQid/GQpTd+vXw4Yfg6wuvvw5O+S7S2iyV+YtOCCFc6OqHfuLDGSHglYl15Ei6tmjI7GGzOXDfAW6Luc3d4TlEbg1EFfpqeO/K91h962pGdhgBw8dBxB52bg0iuvdaft2zzN3hCSeSBEJUG1Yr3H23+W1/332m/4NTaG06UEsCIYQQdmVZsjiTdgaAJUvgh9cvA6D7pPf544kX2TBpA+O7jMffx9+dYTqM1tpMmQtV7pdXz4Y9+XrU1+x5ZB03vvQlBCaQsKkHTz0SidYlby8qpyr2NhaiaJ9+CmvWmEnjcuZ/cAqLRUZgEkIIOw6cPcB/f/svTV5vwuQlk1m3DoYPB0u2F5PuPsf6Gf/hkiaXVO6mSnbk60BdtV5armYRzfhk4uP89IMvPn7ZLJ/fnldeMc89/tvjjFswjrWH1+ZO+CcqNxnGVVQLJ07Agw+a+y+9BGFhTjyYDOEqhBC5sq3Z/Lj7R97b8B6L9yxG2y7Fr1yfzHczNCkpihtvhBmvh7s5UudRXor289qjtWY7290djlMN6R/G53Pg2mvNJIDBIRbeTXqXhLQEPt38Kd3rdWdit4mM7jCa8ICq+zev6uRXjqjytIY774SEBBg4EG680ckHlBGYhBACgHWn1xH9ejRXf3U1i/YswtfblzEdx/BRj/WcmvElCQmKK64wfdOq8nUX5aWoPaI2dUbWcXcoLjFqlOlnCPCfO725I3snD138EDUDa7Lh2AZu//F26r1aj3ELxrE/Zb87QxXlVIX/XYUwvvoK5s+H0FD44AMXdE2QJkxCiGrqbPpZtpzYkvu4bkBdjiQdoVWtVrx66asceeAIEyI+4/7R3UlIUAwdCvPmmYEtRNVy773w1lvm/rOPRRKxfhqH7z/Mp9d8Sr/ofqRlp/Hp5k9JtaTmbpNtzXZTtKKspAmTqNKOH4f//Mfcf/VVaNLEBQeVJkxCiGoky5LF4j2L+XTzpyzctZC2tdvy121/AdA4qDEbJm2ga92uKKX47DO4+WYz58OIEfDZZ+BfNfpJF8uaYeXQK4fwCvKCru6OxnX+8x8IDIQJE+DRR+H06UBefHEsYzuNZd+ZfXy781vaprfNLX/ZnMuwaAuj249mRLsR+YaMFZ5FEghRZWkNd9wBp0/DpZeaDzCXkCZMQogqLsuSRdz+OL7Z8Q3zd8znZOpJABSKmoE1Sc5MJsQvBIBu9bqhNbzwgvkRCXD//Wbm4upyrcWSauHfx//FO9wbvnV3NK51yy0mibjxRvM337IFvvjCdLp+4KIHiIuLA+BU6ilWHlpJenY6cfvjuGvRXQxqNojRHUZzdZurCfN3ZudFUVaSQIgqa+ZM+PZb03Tp/fddOKqqNGESQlRxP+z+geFzh+c+ble7HeM6jeOGTjfQMKxhvrIJCeZH5MKF5nN4+nQzlHZ14uXvReP/a4yXvxf72e/ucFzu+uvNCIjXXgs//wwXXGC+nzt0OF8mMiiS4w8e59ud3/Llti9Zuncpi/YsYtGeRfh7+/PDmB8Y2Gyg216DyE8SCFElrV8P99xj7s+YAY0bu/Dg0oRJCFFFJKQmsGTvEn745wfC/cN5Z+g7AAxuMZju9bozpMUQRrQbQeeoznaHXv3773DGjoUjR6BGDZg1C66+2rWvwRN4B3nT7PlmAOyP2+/eYNykXz/z3XzNNfDXX9CjB0ybBm3Pt2AiPCCc8V3GM77LeE6lnmLe9nl8ufVL1hxeQ/d63XPLvbrqVQCuan0VLWu1dPVLEUgCIaqghAQYORIyM83oSzfc4OIApAmTEKKSsmorG45uyL3yu+7IOqzaCkCYfxivX/Y6ft5+BPkGsX7S+iL3k5wMTz8Nr77aBasVLr4YPv/cRf3QhMdq0gRWrIDbbzdzM911F3Tp0pn586Fp0/xlI4MiuT3mdm6PuZ0zaWeICIwAzHv05VUvcyLlBJOXTqZNZBuubHUlg5oNonfj3gT6BrrhlVU/kkCIKsVqNe0sDxyACy80VeUuJ02YhBCVhNaabGs2vt5mGKT/rfkfDyx5IPd5Xy9f+kX3Y0iLIVzd5mr8vP1K2J9pmnLvvXDokGmy9Oij8NRT4FONf3FY0i2cW3bOdKKu5oKC4JNP4KqrzEW+v/+OoGNHePJJuPtuCAgovE1O8gAmgXhjyBss3LWQH//5kZ2ndrLz1E5eXvUy/t7+zLxyJuM6j3PhK6qeqvG/s6iKnnoKFi2CmjVh7lw3je4hTZiEEB5Ka83eM3tZtn8ZcQfiWLZ/GTd1uYmn+z0NwIBmA2gS3oQhLYYwpOUQ+jftn9sZuiQbNsDjj8PixeZxt24wYcJG7rije/EbVgNZ8Vlsvmwz/o384RN3R+MZRo6Evn3h2mvjiYurw8MPwzvvmM72111XdL9FHy8frm1/Lde2v5YsSxYrDq5g8Z7FLN23lL+O/0XLmuebNM34cwZL9y2ld+Pe9GrUi671upaYBIvSkQRCVBnvv2+qzL28zNCAbqsqlyZMQggPM/vv2SzctZC1R9ZyNOlovufWHz3fFKljnY78e++/dvszFGXjRnPxZuFC8zg8HJ57zjRTWb48ySHxV3baYmbfVt6uGs2jcqhdG558cjsPP1yHhx6CbdtMh+tXXoEpU0x/ieK+Tn29fenXtB/9mvbjJV7iZMrJfLUV83fO55d9v7Bg5wIAAnwCuLDBhVzc8GIubX4p/Zr2c/ZLrLIkgRBVwsKF5ssKzBWMyy5zYzDShEkI4QZJGUlsjd/KphOb+PPInzzd72kahDUA4I8Df+T+iIoMiqRPkz7ENomlb3RfOtQ5PxROaROH7Gz4/nvzefvLL2ZdYKAZ9//hh80PQ5GH1XYr15bsGjIEBg2C2bPhv/81tVmjRkHz5vDgg6ZpckgpKsJqB+d/47079F3+OPAHKw+tZOWhlew8tZM/DvzBHwf+YP+5/bkJRHxKPO+tf4/u9bvTrV436obUdcKrrFokgRCV3qpVprrTaoUnnoDbbnNzQNKESQjhAufSz/HamtfYfGIzm05sYt+Zffmev7zl5YxoNwKAW7reQmx0LBc2uJBWtVrhpcr3GbV7txnD/8MPTR8HMInDHXeYxCEqqkIvqcrKrYHwkhqIovj4mPmaxowxicSrr8LevaafxEMPmYTi5pvhkktKPyx785rNaV6zOTd3vRkwo4qtOrSKlYdW0qNBj9xy646s44m4J3If1w+tT+eozrSv3Z72ddozqt0ogv2CHflyKz1JIESltmEDXHEFpKebD56pU90dEdKESQhRYVprjicfZ3fCbnYn7GZXwi52J+wmIjCCj6/+GAA/bz+e+eOZ3FGS/Lz9aFe7HZ2iOtGtbje61euWu7/ejXvTu3HvcsQBO3aY2oavvjLDb+Zo2dL8uBs/HiIiit6HkCZMZREUZN5Xt90G8+fDG2+YkZtmzzZLkyZmKOCrr4bevcvWOb9WUC2ubH0lV7a+Mt/6xuGNub/n/Ww4toG/jv3F0aSjHE06yqI9iwAY2W5kbtknfn+CpIwkk5xEmAQlukZ0tetbIQmEqLRWrIChQyExEYYNM/M9uGyyuOJIDYQQogRaa06knODA2QMcOHeAXo165TY3emnFSzy3/DmSMgv3H6gXUi/3fqBvIC8MeIGGYQ3pFNWJ1rVa546mVBFHj8LKlaZp0uLFcPDg+efCwky79BtugAED5KOutHISCOR8lZq3t6l1GDUK/vnHJA8ff2xGWfzf/8wSEQH9+59fWrcu3++ATlGdmD7YDNto1Vb2nN7D1vitbIvfxvHk4/kGEpj19ywOJx7Ot72X8qJxeGPu7XEv9/W8DzC1HTtO7aBhWEPqh9avcgmGJBCiUvrlF5M0pKaamS0//dSDhgiUPhBCVFtWbSUhNYFjycewWC10rdcVMP0TJnw/gePJxzmWdIyD5w6SYcnI3e6rkV9xbftrAdMxNCkziYiACFpHtqZVrVa0qtkq935eD/d6uELxnjwJmzbB5s2mdmHlSvj33/xlateGwYNhxAjTv8zeMJuiCNOmmWmXa10AFFED8fvv8Oefpg2YsKtlS9Mx/5lnYO1a+O47WLDANKn75huzANSqBTEx0L37+dtGjcqWVHgpL/M/V6sVw9sOz/ec1po3LnuDf07/w57Te9h7Zi97T+/lUOIh9p/dT5YlK7fsHwf+yDdbe1RwFI3CG9EwrCENQxvy3IDnCPMPA2B3wm58vXypE1yn0jSV8pSfXEKU2tdfw9ixZqK4m282oy95VIshqYEQolLTWpNhySAxIzF3OZd+jtNpp0lIS+CaNtfkdtZ8bfVrfL39axLSEjh+7jjJfyTnNim6sMGFrJ2wFjC1BV9v+xqNzj1OzcCaNAlvQuPwxkQGReauv6XrLYzrPI5agbXKNBpSUdLSYN8+s+zda2537zZJw7FjhcuHhsJFF0GfPiZh6NpVPtLK7YIL4Npr0c/NBVThBOL3381VsLlz3RJeZePlZd6bF10EL74Ie/aYU/jbb+b2xAn4+Wez5IiIMDUTrVtDq1ZmadnSJBYREWVLLpRSXNP2mkLrMy2Z7D+7n3D/8Nx1/j7+9GzYk8OJhzmadJQTKSc4kXIid9SzVwe/mlv2pm9vYvXh1QAE+QYR6hVK438aUye4Dle1vopJ3ScBcDrtNIv+WUREYAQ1AmoQEWC7DYwgwMe1mb0kEKLSsFhMJ+nnnzeP77rLVGF63Beb9IEQIh+lVE3gQ+BS4BTwf1rrz+2UU8CLwATbqg+AKVprXbBsXlnWLPad2UdqVmq+JS0rjWFthuHjZb7qPtn0CbsTdpOalUpKZgpJmUm5CUK/6H481e8pALbGb6XTu52KPF672u1yE4iD5w7mfvHniAiIoF5oPZpHNM9d5+Plw9xRc6kZWJN6IfVoFN6oyPkVagTUKO7lkpEBZ8+eX86dg4QEOH7cJAQFbxMSit5XSAh06gSdO5vbnj2hY0f5CHOYfv1g7lz0NVOAlyDpHE0++cxM1R0QYMYsnTvXlBNl1qKFWSZONP11Dh40fSPXrz9/e/o0rFljloKCgqBhw/NL7dpmiYzMv9SqZZrv+RXRCsnP269Q7eDlLS/n8paXA5BtzeZ48nEOJx7mcOJhTqaczNekqW5IXRqHNyY+Jd58fpHKiaMnAGha4/wU3btO7WLsgrF2Y/D39mf9pPW5o6q9sPwF4g7EEeIXYhZfcxvqH0rziOZc3/F6wNSaLtm7hECfQAJ9Awn0CSTIN4hA38DcGhJ7JIEQlcLZs6bN7U8/mS+2V14xM516RJ+HgqQJkxAFvQ1kAlFAF+BHpdQmrfW2AuUmAVcDnQENLAX+Bd4tbuebj2+m+WutAAVa2W69QCsOP3CUcP8aWK3w4ep5/LH/j3zP52wTmtWCY23Mj5DUsxH4JEUT6hdOiF8oIb6hhPiFUsOvJjUCIkg6Vpfd6eZawYCQe+h04Y0E+9Rg3/YD9OxyCdrqQ3a2Gep04UJzm5UF2dkjOZQN+7LMusxMUzuQd0lNtb8uMfF8spCeXraT7+MD0dFmSMxmzcxt8+YmUWjaVD6unK5fP3j2Obgb1L49RO+bbYaysljMl5okDw6hlOlg3aQJDLe1HNLaJNK7d59fdu0yNXGHD5v/q5z1peHnZ5Lu0NDCS1CQmbzW39/khjn3zeKDv39D2wK1/WHhMfN7xtsb7qw1H+864OWlybSmservP2jUsgHnMk9T17c227aZcmfORnJl7XtJzDpDYqZZzmWc5VzmWTIsGaSeDeaUlzkXa/f8w5Jd6wANSue7vST6EoY1vx6lIDkzhSEfD7Nb7qauNxV5LiSBEB5v1SoYN878w+fMMD1ggLujKoY0YRIil1IqGBgBdNBaJwMrlFILgRuBKQWKjwde1Voftm37KjCREhKIlsda8dYzM+0+t+35Tbn3H+NBHuNBZtGUL2kMQG9O8l+2s5JI6tuGgI6iFj8yu5gjHmE/RwDwAxoAK/HnafrZtk/jE9ZxigDGcX6oyHmsIpQsO/uz70QR24/2vhjvCF9q1IAHTm6mZeKZ3IspSmH3Pgdty+9w8dGL8a1lOltvHrqZM7+coeMPHak5qCYA//73Xw5Oy9NzuhTsbd/06abkhH9ywUm2j95epn02fbopjR9pnG/7yKsjaf9VewDS9qexrvW6Mu3T3vYBTQLosfv8eV5VbxVZp0v/dypq+7znef8s85zS2Si0yQIDAsqeDYoyUQrq1TNL376Fn09MNInEoUNw5AicOmWWkyfP3z91ytTiJSWZpP/0abM4KWIgCChqMquWwOtFbt3jlbyPPrIthS0HgnOHvA8FMuyWmw3ALLvPSQIhPFZ6ummy9Mor5ipCly5mSLemTUvc1L2kCZMQebUCsrXWea/xbQLsfJ3T3vZc3nLt7e1UKTUJU2NBK1rhR7GtnPIJJpUITqPQhJGIH5og0oniOApNbTLLtD+AWpyhB2vwIZtIsvBDEUYKV7IQH7LxJYtgauNXhmF4GnCc3+hHIGmEkcgpXsJKKMctkfidSoRTsIlpnOECigrX7urISCDR9vw0NBfApYOB9bZ1E9DcUKbXb297PeVRYvnMVqAPmqfKtEs95VGYkn97PfcbmJsz8V0Umi/Ltk8721v/+RdUz9wyVr5FE25/B3YUuX2B8wwXUION5zdMT4cr8w8nWh3FuvHYYUA721ISDWTgTxKhdpdUgsjAv8QlnQAy8CcLXyx4Y8GbbHxy79tbinteo5y0FP9ZJQmE8EgrVpgxoLdvNxfzp0yBJ580VYEeT5owCZFXCDm/os47h7nsZa/suQLlQpRSqmA/CK31TGAmQEz3GN1nVZ9SB9THGz7wMf+j2lITnd2UPl7wiK9Xzr7RmY1KvT+APl7QaeUfxMbG2rY34Q7zP/9ZYM2wFrV5kbz8hxXaXvmdza1a6JhpLTJ5KIq97ZXvOrBNchadbSXaUsZ92tveuw9xKyYQGxtLpEXTJ7uMgXr3AZ85AOe39+oDvmbCrwCt6ZNZxn0Wtb3/6NwiF5fj72Rv+3znecEPcP2VeGUkn98mIMCMCnLFFWU/XhUSFxdHbGysu8MokQICbIuzJ1r3pHNSVFNxSSCER/n3XzOS3bx55nGrVmbc5549i9/Oo0gTJiHySsZc6MsrDCg8yUHhsmFAckmdqFHg5V++/znlXXhkHKUUyr/8HayK2r68MRa3vZdfBfdpZ3svH68K/Tqwt72981wWlf7vFBoA1gwICEBnZKD8/c3FJhkTV1RSkkAIj3DsmJm2/s03TRvDwECTSDz8sOmYVKlIEyYh8toN+CilWmqt/7Gt6wwU7ECNbV1nYF0J5YSoPH7/3Yy29NNPkJ7O/gULaHrNNTIKk6jUJIEQbrVvn5lnZ/ZsMzQhmDkeXnjBDKlWKUkTJiFyaa1TlFLzgaeVUhMwozANAy62U/wT4AGl1E+YhjkPAm+6KlYhHC7vPA+2JOFASAhNc5qnzJ1b6HkhKgP5lSNcLjvbzCJ55ZVmMpf33jO1DsOHmzGbP/20EicPIE2YhCjsTiAQiAe+AO7QWm9TSl2ilMrTKJz3gO+BLcBW4EfbOiEqpz//LD45sM0TwZ9/ujYuISpIaiCES2htPh/nzYM5c87PfurrCzfeCI88Am3bujdGh5EmTELko7U+jZnfoeD65ZiO0zmPNfCwbRGi8nu4FG/lfv2k9kFUOpJACKdJTYU//jBTys+fb2aIzNGqlZk5ctw4qFPHfTE6hTRhEkIIIUQVJgmEcJhz52DtWli9GpYtg5UrTdOkHA0amGZK114LvXp56CzSjiBNmIQQQghRhUkCIcrMaoUDB2DLlvPLmjUXcPCgaaqUQymIiYFBg+Cqq+DCC6vJ72ppwiSEEEKIKswhCYRS6i7gJqAj8IXW+qYSyt8PPIKZr3sepkOd/Xm0hctlZ0N8PBw/DkePmrkZ9u07f7tvH6SkFNwqGF9f6NYNLroILr4Y+veHWrXc8QrcTGoghBBCCFGFOaoG4ijwLDAYM9JGkZRSg4EpQH/bdguAp2zrhANYrZCeDmlp5jYx0TQvyrucPZv//okTJmE4fhxOncpfk2BPVBR07Hh+yczcwPjx3WVOHJA+EEIIIYSo0hySQGit5wMopWKAkgbgHA98qLXeZtvmGeAzSpFAnDljZn3P+XGr9fkl7+PinitL2aKe2727AZs3l28/2dnm92V2dvH3i3suI+N8cpD3Nud+3n4H5aGUSRCioqBePYiOhmbNoGnT87c1a+bfJi4uSZKHHNKESQghhBBVmDv6QLQHvsvzeBMQpZSqpbVOKG7DfftMB1z3a+nuAEoUoNIJ8MokQGUQ6pVKDe8kwr2TCPdOpoaX7TbnsXciUT6nifJJoK7PKSJ9zuKjLGZHx2zL6uKPF5OcDCEhxReqLs6eNe24hBBCCCGqIHckECHAuTyPc+6HAoUSCKXUJGASQKBfWy7q8C8ojcp9HlSex/aeO7+v4p4r+HzRz2VbsvH18S72+DkjDOV/Dny8rHh7W/H20nh5aby9rPh4a7y8zDrvnFvv84+9vDQ+3ufv+/lY8Pez4Oebjb+vxbZk4+drW+9jKeUIR/62pRbQlCzgkG0pq9S0NIICi229Vq1k1K5NcnIycXFx7g7Fo8g5KUzOiRBCiMqmxARCKRUH9C3i6ZVa695lPGYyEJbncc79JHuFtdYzgZkAMTEx+tf1Tct4OMeLi4sjNmcaegGYc3KBnJN85H1SmJyTwuScCCGEqGxKTCC01rEOPuY2oDMw1/a4M3CipOZLQgghhBBCCPdzyFAxSikfpVQA4A14K6UClFJFJSefALcqpdoppWoAjwOzHRGHEEIIIYQQwrkcNdbk40AaZiSlsbb7jwMopRorpZKVUo0BtNaLgWnA78BB4ADwpIPiEEIIIYQQQjiRo4ZxnQpMLeK5g5iO03nXTQemO+LYQgghhBBCCNeR2a6EEEIIIYQQpSYJhBBCCCGEEKLUJIEQQgghhBBClJokEEIIIYQQQohSkwRCCCGEEEIIUWqSQAghhBBCCCFKTRIIIYQQQgghRKlJAiGEEEIIIYQoNUkghBBCCCGEEKUmCYQQQgghhBCi1CSBEEII4RRKqZpKqQVKqRSl1AGl1Jhiyj6klNqqlEpSSv2rlHrIlbEKIYQoPR93ByCEEKLKehvIBKKALsCPSqlNWuttdsoqYBywGWgOLFFKHdJaf+mqYIUQQpSO1EAIIYRwOKVUMDAC+K/WOllrvQJYCNxor7zWeprWeqPWOltrvQv4DujluoiFEEKUVqWqgdiwYcMppdQBd8cBRAKn3B2Eh5FzUpick8LknBTmKeekiYP31wrI1lrvzrNuE9C3pA2VUgq4BHivmDKTgEm2h8lKqV0ViNVRPOVv6UnknBQm5yQ/OR+FedI5sfvdUKkSCK11bXfHAKCUWq+1jnF3HJ5Ezklhck4Kk3NSWBU+JyFAYoF154DQUmw7FVNDPquoAlrrmcDM8gbnDFX4b1luck4Kk3OSn5yPwirDOZEmTEIIIcpMKRWnlNJFLCuAZCCswGZhQFIJ+70L0xdiqNY6wznRCyGEqIhKVQMhhBDCM2itY4t73tYHwkcp1VJr/Y9tdWfAXgfqnG1uAaYAfbTWhx0VqxBCCMeSGojy8ahqcw8h56QwOSeFyTkprEqeE611CjAfeFopFayU6gUMAz61V14pdQPwPDBIa73PdZE6VJX8W1aQnJPC5JzkJ+ejMI8/J0pr7e4YhBBCVEFKqZrAR8AgIAGYorX+3PbcJcAirXWI7fG/QEMgb7OlOVrr210btRBCiJJIAiGEEEIIIYQoNWnCJIQQQgghhCg1SSCEEEIIIYQQpSYJhAMopVoqpdKVUnPcHYs7KaX8lVIfKqUOKKWSlFJ/K6WGuDsuV1NK1VRKLVBKpdjOxRh3x+RO8r4omnx2VG3y95X//7zku+E8eV8UrzJ8dkgC4RhvA3+6OwgP4AMcwsw0Gw48DsxVSkW7Myg3eBvIBKKAG4AZSqn27g3JreR9UTT57Kja5O8r//95yXfDefK+KJ7Hf3ZIAlFBSqnRwFngVzeH4nZa6xSt9VSt9X6ttVVr/QPwL9Dd3bG5im3s+xHAf7XWyVrrFcBC4Eb3RuY+8r6wTz47qjb5+xry/2/Id0N+8r4oWmX57JAEogKUUmHA08AD7o7FEymlooBWFDNxVBXUCsjWWu/Os24TUF2vMhVSTd8X+chnR9Umf9+iVeP/f/luKEY1fl/kU5k+OySBqJhngA9lxtTClFK+wGfAx1rrne6Ox4VCgMQC684BoW6IxeNU4/dFQfLZUbXJ39eOav7/L98NRajm74uCKs1nhyQQRVBKxSmldBHLCqVUF2Ag8JqbQ3WZks5JnnJemNlmM4G73BaweyQDYQXWhQFJbojFo1Tz90Wu6vjZUZXId0N+8r1QavLdYIe8L86rbJ8dPu4OwFNprWOLe14pdR8QDRxUSoG5uuCtlGqnte7m7PjcoaRzAqDMyfgQ00nscq11lrPj8jC7AR+lVEut9T+2dZ2Ratnq/r7IK5Zq9tlRlch3Q37yvVBq8t1QgLwvComlEn12yEzU5aSUCiL/1YTJmD/8HVrrk24JygMopd4FugADtdbJbg7HLZRSXwIamIA5Fz8BF2utq/MXRbV/X+SQz46qTf6+hcn/vyHfDfnJ+yK/yvbZITUQ5aS1TgVScx4rpZKBdE/8I7uKUqoJcBuQARy3ZdAAt2mtP3NbYK53J/AREA8kYP75q+UXBMj7oiD57Kja5O+bn/z/5yPfDTbyviissn12SA2EEEIIIYQQotSkE7UQQgghhBCi1CSBEEIIIYQQQpSaJBBCCCGEEEKIUpMEQgghhBBCCFFqkkAIIYQQQgghSk0SCCGEEEIIIUSpSQIhhBBCCCGEKDVJIIQQQgghhBCl9v+8n2Sk/6ZKkQAAAABJRU5ErkJggg==\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "z = np.linspace(-5, 5, 200)\n", - "\n", - "plt.figure(figsize=(11,4))\n", - "\n", - "plt.subplot(121)\n", - "plt.plot(z, np.sign(z), \"r-\", linewidth=1, label=\"Step\")\n", - "plt.plot(z, sigmoid(z), \"g--\", linewidth=2, label=\"Sigmoid\")\n", - "plt.plot(z, np.tanh(z), \"b-\", linewidth=2, label=\"Tanh\")\n", - "plt.plot(z, relu(z), \"m-.\", linewidth=2, label=\"ReLU\")\n", - "plt.grid(True)\n", - "plt.legend(loc=\"center right\", fontsize=14)\n", - "plt.title(\"Activation functions\", fontsize=14)\n", - "plt.axis([-5, 5, -1.2, 1.2])\n", - "\n", - "plt.subplot(122)\n", - "plt.plot(z, derivative(np.sign, z), \"r-\", linewidth=1, label=\"Step\")\n", - "plt.plot(0, 0, \"ro\", markersize=5)\n", - "plt.plot(0, 0, \"rx\", markersize=10)\n", - "plt.plot(z, derivative(sigmoid, z), \"g--\", linewidth=2, label=\"Sigmoid\")\n", - "plt.plot(z, derivative(np.tanh, z), \"b-\", linewidth=2, label=\"Tanh\")\n", - "plt.plot(z, derivative(relu, z), \"m-.\", linewidth=2, label=\"ReLU\")\n", - "plt.grid(True)\n", - "#plt.legend(loc=\"center right\", fontsize=14)\n", - "plt.title(\"Derivatives\", fontsize=14)\n", - "plt.axis([-5, 5, -0.2, 1.2])\n", - "\n", - "save_fig(\"activation_functions_plot\")\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [], - "source": [ - "def heaviside(z):\n", - " return (z >= 0).astype(z.dtype)\n", - "\n", - "def mlp_xor(x1, x2, activation=heaviside):\n", - " return activation(-activation(x1 + x2 - 1.5) + activation(x1 + x2 - 0.5) - 0.5)" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAmkAAAEMCAYAAACfoCGmAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAAA7w0lEQVR4nO3de5hcZZnv/e+ddLpzIiGQmEyATiAcorgNh8CgDIq6GVGHbUDmHQdEETSeGEHFXGxHRmQc0Wx0HJGNMltgjOCeSwWUdzwMbmULMo4InkADCiQc8gaQNEk6h+50537/WKuwUqnurlr1rGP9PtdVV1JVq9a6q7r66V89te61zN0RERERkWKZlHcBIiIiIrI3hTQRERGRAlJIExERESkghTQRERGRAlJIExERESkghTQRERGRAlJIy4CZLTYzN7PlGWzrDjP7fAbbWWBm/25m28ws9+O4mNk6M7s4h+2ea2aDWW+3mXZeAzO7zMzun2CZz5vZHUGKk8rRuJa+vMa1iRSprlZqMbNBMzs3o5KC6sm7gCIys2OAe4CfuPuJbT72DuB+d7+g7ubHgT8B/hCwxnOBz7v7zIa7zgB2hdrOOC4GFgJHAVsz2B4QhQvgTHd/ccNdxwHbsqqjoNp5Da4ErkqxFikYjWst0bjWmiLVVaRagtNMWnNvB/4n8GIze2GnK3P3UXff6O4jnZc24bY2uXsWg8uhwL3u/jt335jB9sbl7s+4+/a868hTO6+Buw+6+7Np1ySFonFtYhrXWlCkuopUSyrcXZe6CzANeA74L8CXgCubLHMC8AOi9L45/v9C4AbAGy6L44sDy4mC8ePA3zSs8/B4mWPi6x8AfhVv40ngfwH7xved3GQ7l8X33UH0SbS23jnAvwADwA7g+8CRdfefCwwCrwbuj7f3Q+DgcV6jdQ3bviG+3Yk+DTYue3HddQdWAl+Lt/UI8OaGxywEbgSeBbYDvwBeGdfa+LzPHWM7/cAtRJ+GtwI3AwfW3X9Z/HzfBDwcL3MrMLfN90tLrx9wGnAvsBN4FPgHoLfu/jcTzXJsBZ6OX58D4vtafc80vgbvBB6Kt/kH4HtAT/3zr1t2MtHs2kB8+SxwDXBH3TIGrIpfrx3Arxt/droU84LGNY1r7b1fZgNriMainfHzuWic53848H/jZR8EXhe//rXnUXuvvClebgfwc+AlwIuBu+PX7a7GnxHROPZ7YDj+9x0T/CwOjd8vtVr+or6Wsl1yL6BoF+Ac4Jfx/0+O36RT6u5fFr/BriWaEn9h/Cbqj9/YdwPXAQviy+S6N+jyeB2rib5yqN/ux4Df1F2/CHhV/NhXEA1sa+L7eoEL4zd1bTsz4/vuYM/B7JvAWuDlRAP0t4gG02nx/ecSfY3wfeD4+Jfm58D3xnmN5gG3A/8ab3t2fHurg9kTRKHkUOCK+JevP75/BvA74MfAScASoq86Xkn0h+bK+PnUnve0xu0Q/cH4efyzWB5ffgL8DLB4mcviX9xb4uf8UmA98MW6Wk+O6z15nNdiwtcPeA2wBXhb/HxeSTR4XFm3zHlEA9sh8Xp+CPyo7v5W3jP1r8FyYAQ4G1hE9L59P2OHtFVEf5j/H2Ap0VehW9gzpP1DXPepwMHAWUTvwdfn/Xury/gXNK5pXPtjrScz8bh2FVGIPJ5o/DgZ+Mtmzz+u6wHg/xC9d14K/Gf8+p8bL7M43mYtwC0lGuMeiP99JXBk/Fxuq9vO6fF6LiAKgn8TXz9tnFp+DfwIOBo4MV7n87WU7ZJ7AUW7EA0GtR+4xW+AM+vuvxH4jwke//mG22pv0Npg9pL4+pK6ZX4HfHic9Z4KDAGT4uvnAoPjbR84LN7Oy+vun030x/jtdetx4Ii6Zc6Ot2Xj1PP/En/SrLut1cHsirrrPUSfKt8cX38H0ae/pp/8aAgXzbYDnAKMAovr7j8E2A3817r17CQeiOPb/hb4fd3144kGzuPHeR0mfP3iAePShsetIBpMm77GRIOYE39KbuU90/AanBH/nPdp5XUENgB/W3d9EtEs3B3x9RlEf8RPaljPZ4FvZ/G7qUvyCxrX9vq9HKMejWvRMt8Crhvn/vq6XkP0gfCAuvtfxp4zgrX3yjvrlvmL+LYz6m7b4+dPFGqva9j2DcBdY9Ty5/Fr1F93/5/V11K2i/ZJq2NmhxL9QG8C8OgnfCNwft1iRxN9DZCYu/+KKO2fHW/3T4k+Wd1YV8urzOx2M3vCzGrT2r1En7Ja9UKiX+D/qNv25njbL6pbbsjdH6y7viHe1px2nlcbflVXzwjwDPCC+KajgV+5eyc7I78Q2ODu6+q28wjR86p/3uvj16NmQ10duPtP3X2pu/90gu1N9PodC/xt3GE0GHeD3kQUfBZAtFO3mX3TzNbHP++fxY/tj2uZ8D3T4HaiT9CPmtmNZvZWM9un2YJmNptoB/D698luok/DNS8CpgLfbXge747rkILSuPY8jWu0PK5dA/yVmf3SzK40s1eMs+zSuK4n6267h+hn1OhXdf9/Kv731w23zTCz6fH1FxIFtXp3sefzrfdC4El3f6zutv8co5ZSUEjb09uJpvEfM7MRMxsBLgH+3MwOCrytrxAPZvG/d7n7egAzWwT8G/Bb4C+J/sifFy/bG2j7Xvf/xh1/a/e1+/5wok/p9aY0Wa6xS8sTbCup+ucdqo6JXr9JRF/7HFV3eQnRjMAzZjaDaH+x7URfSx1HNMMAe/68x3zPNPJoJ+tjiL6+fAz478BaM1vY7pNreC6nNTyPI4k+vUpxaVzb8z6NaxOtzP07RF9zXgnMBf7NzK7vqMK9a/NxbpuoXp/g/spQSIuZWQ/wVqI/ZkfVXZYRpf+3xYv+nGifirEMEw2IE7kJONTMTgD+imhwq1lONGi9393/w90fItrptN3t/JboZ/zS2g1mNotoH47ftFBju54hmpGpbWt+/fUW/Rx4iZnNHeP+Vp/3QjNbXFfLIUSvYRrPeyL3AUvd/fdNLiNEn0TnEn0t9CN3X0vdJ986471n9uLuI+7+A3f/70ShcAbRVwyNy20G/j+iHccBMDMj+lqk5jdEXxUtavIcmgZFyZ/GtSC6clxz9z+4+xp3P5do1vWtZtbXZNG1cV31P8taM0mnfku0X1m9P2Ps5/tb4ICGDx/HB6olF6UtPAWvJ/pD+c/ufn/9BfjfwNviP1z/AzjazK41s2VmdoSZvd3M+uP1rAOOjw/0ONfMmr7G7v4EUZfLF4j2p/ha3d2/I/rZXGRmB5vZXxPtcFtvHTDVzE6JtzO94X7c/XdEO9h+0cxOMrP/QjRobiH+6iOwHwDvNbPlZnY00b4DO9tcx01EOzV/M675EDP7b2b2yvj+dcCi+OvBuWMMGt8n+gN0Y1zLcqKvXO6jja90zOx4M1trZsdPvPS4LgfOMrPLzezFZrbUzM40s9Xx/Y8RBaAL4uf7euDvG1cywXumsfa/MLMLzezoeAbjLGAfokGsmX8CVsV1HUG0r9nzf4jimbkrgSvN7DwzO9TMjjKzd5nZyrZeDcmSxrXOdd24Fo9VK8zsMIsO13IG8Ii7DzVZ/HaihoB/id87JwCfIZrJ7HTG638A55jZe+Na/oZohnb1GMt/nyg0fjken14K/CN7z6qWhkLaH50P/NCbHzvqa0Q7Pp7i7r8A/ivR7MdPiL7vfhN/nLK9kuhT0W+IPoH1M7avEH2i/ba7D9RujPftuJCoXf03RF9X7HFEZXe/m2gg/Gq8nVVjbONtwE+JdgT9KTAdONXdd4xTV1IfJGrVvgP4OlF7/dPtrMDdtxF1fT0B3EbUTv4x/vjL/g3g20SdRM8Af91kHQ68Ib7/h/FlI7Aivq9V04Ej4n8Tc/fvEf2xfCXRz+CnRF83PRbf/wzRbMcKop/3R4l+9s00fc808Vy8vtqgdTHRTtV3jrH8p4HriX5m/0k0NjTu73Yp0Y7JFxN1Zd0OvJHokCJSTBrXOteN49oQUTf3L4n2CduHaFeHZs9tN1EXZh/Rz+Jf4sc67YfZxnXfStTR+X6i98yFwHvc/bYJaplE9B7+MvDx+PmUkrX3sxUREREZm5ktIzqEx3J3vzfnckpNIU1EREQSM7PTiY5v9zui2dnPEDVbHN3mLJ80CPZ1p5ldYGY/M7MhM7thnOXeamb3mtkWi9qwV8c7t4qI5EZjmEhi+wCfJ/pK8kaifV9fo4DWuZD7pG0g+u73ugmWm060s+hc4E+JTtsx7hnsRUQyoDFMJAF3/7K7H+7u09x9obuf5e5PTfxImUiwT3/ufjNA3HFy4DjLXVN39Ukzu5Foh2oRkdxoDBORoinCFP3LiTrFmorb+1cCTJ3ad+yBBzU7fFQ+3HuIjgtZHKFqGvVJjI5MxkY7O1Dz5J5JjI4U52DPqmd8RasHYP3j6/7g7vPyrmMcY45hjePXQQUavyC7MWykxS9tJvlkdttoytVMbNSjenvcGLF8vrHzJr+GPTaJkWZ3BNlg4/F6WzNlkrFrd+uvUdovZ88kYySDMcxa/Ca30/Er15BmZucRHfTu7WMt4+7XEp30l8MO7/evf784X3FvWPt+Fi4d63At+QhX0yhrBv6U2687gYXfSH6EhTMuOo6bV98ToJ4wVM/4ilYPwHquKuzBcicaw+rHr8MP7/fb/k+xPtStW3sxi5d+MpNtfX3LMRMus+TxFTx80K3pF9OC2zcu5aztR3HT9F/kVsO6J/b82/7+mYv49GC6vw59j7V38of3HXoAn/v9kxMv2GCf9en8LT//pAP40p1PMvvh9I+60bv2iQmXWc//7OgHlttx0sxsBXAF8NoOz2cmKTlnzt2cct5PeHDVorxLESkcjWHtOXPWfXmX0JZTFqxl1pSODvPVscUHPpP5Nof6hzPZztZFyWbuWrV5SR+blzQ7JnA4w0vH3CsimFxCmpmdCvwzcJq7/3qi5SU/58y5m1tWfJYHVy1ix4sPyLsckULQGJZM2YIaRGEtT4sPfCbzsFaVoAaUPqiFPARHj5lNJTr/2GQzm9qsLd3MXkXUovtGd/9pqO1Lum5Z8Vk2vXebgppUlsawbCioJaOgllyZg1rImbSPADuITnfz5vj/HzGzfjMbrDsH3KVE53T7dnz7oJl9J2AdkpI1y65n03u3seGNB+ddikgaNIZlREEtmb7ebPdpVFBrXVpBLVhIc/fL3N0aLpe5+2PuPtPda+cpfKW798S31S6vDVWHpGvNsus55byfKKhJ5WgMy9aZs+4rXVgrQlDTjFpyWQS10GFNJ1iXttUaChTURKRTCmrtyyOoZRHWti6yTBoK0hYyqCmkSSLq/BSRUMoY1PIOa+r8TK5MnZ8KaZKYOj9FJJSyBTXIf1ZNnZ+dKUNQU0iTjqnzU0RCmDN5e94ltC3voAbaT60TWXz92QmFNAlCnZ8iEoJm1JJRUEuuyEFNIU2CUeeniISgoJaMglpyRQ1qCmkSlDo/RSQEHaIjmayD2u7e3er8TJFCmgSnzk8RCaWMQS3vsKbOz+Sy6Pxsh0KapKLW+Tm0oFcNBSLSkbIFNch/Vk2dn50pSlBTSJNULdn3aXV+ikjHFNSSUVBLrghBTSFNUqfOTxEJQUEtGQW15PIOagppkgl1fopICApqySioJZdnUFNIk8yo81NEQlDnZzI652dyeQU1hTTJlDo/RSSUMga1vMOaOj+Ty6PzsyfTrVXI7pFRenv+id0jo0zqmZx3OaVyzpy7OWfF3ZzORfR/e4Rp9z+Zd0mV94Ozv8Tw9IlPufPdAeAdE6+vd/t0XnXj+Z0XJrkZHRllyuTPMToyyuQSj2FnzrqPr285Ju8y2nLKgrXcvnFpbtuvBbV1T8zLbJtD/cP0Pdab+PEP7/4oo2ydcLn3rAMOmnh9PaP7sGzDZYlq2bykj9kPDyV6bLs0k5bQjoEtTLJH2DGwJe9SSkvn/MxOKwEtz/VJ9gYHBjF7hMGBwbxL6VjZZtSge7/+TKqVgNaOkcmdrS+rGTWFtAR2j4wyPLgNM2d4cBu7R0bzLqm01Pkpkr3RkVG2b92OmbN963ZGKzCGKaglU6agVjRZBDWFtAR2DGwBj684mk3rkDo/RbI1ODC4xxhWhdk0UFBLSkEtubSDmkJam2qzaPU0m9Y5dX6KZKM2i1avKrNpoM7PpKra+ZmFNIOaQlqb9phFq9FsWhDq/BRJ3x6zaDUVmk2rKWNQyzusVbnzM21pdX4qpLWh2SxajWbTwqid8/PBVYvUUCASWLNZtJoqzabVlC2oQf6zalU+52cWQge1oCHNzC4ws5+Z2ZCZ3TDBsu83s41mtsXMrjOz/E+SNYGms2g1mk0LSp2fkrWqj18wxixaTQVn00BBLSkFteRCBrXQM2kbgI8D1423kJm9BrgEeDWwCDgE+FjgWoIabxatRrNpYanzUzJW2fELxp9Fq6nibBooqCWloJZcqKAWNKS5+83ufivw7ASLvhX4krs/4O4DwN8D54asJbRxZ9FqNJsWnDo/JStVHr9gglm0morOpoGCWlIKasmFCGp5nXHgSOCbddd/Ccw3s/3dfY8B0sxWAisB5s2by4a1f5ddlc/bzNQpl2MtnHFiaMswm599FzAr9aqa2bVzPhvWrspl282EqOfVwFGnzmDL8j9jykBnR3mes2AGZ6w6rqN1hJRVPd8dCL/OrF7H716YyWbakXj8Wrf20uyq3MNmenv+vqUxbNvmXQw8+x7yGMOGdi5g3dpLUlv/8vjfgdHpLS3fN7wvSx5fkVo9rVgCbNk1FYD9dk/nrO1HZV/EfjA03DwuzJ/cxwdnBm72elH0z6ThP84jXfBQ2E0AvO3VB8bbmejTS3L3fqmzx+cV0mYCm+uu1/6/Dw2fYt39WuBagMMO7/eFS1dnUmC9bc8MMLx1V0vLmu1i9v5XMGPenJSram7D2lXk8RqNJVQ9C4E1Ay/j5v97PEesXp94PWesOo6bV9/TcT2hZFZPC6d6aleRXseMJRq/Dj+83xcv/WQmBTba/Mxmtm9pfQybs/8VzJ43O+Wq9rZu7SVk8RothpZOJbXk8RU8fNCtaZfTukfexE3Tf5HPtqc3P43UB2cu4tODycfkiXRyKqmJfO73fzwl4T7r0wtqnciru3OQPT+m1f4f9rwPAbSyL1oj7ZuWDnV+SkGUZvyC1vZFa1TVfdPqlfHrz1lTdua6/Sp3fqZ9cvak8gppDwDL6q4vA55q/KqgCFraF62R9k1LlTo/JWelGb+gxX3RGlV437R6ZQxq2k8tPUUMaqEPwdFjZlOBycBkM5tqZs2+Uv0ycL6ZvcjM9gU+AtwQspYQksyi1Wg2LV3q/JTQqjZ+QbJZtJpumE0DBbWk8jjwbRaKFtRCz6R9BNhB1J7+5vj/HzGzfjMbNLN+AHf/LrAa+CHwGLAe+GjgWjqWaBatRrNpqVPnpwRWqfELEs6i1XTJbBooqCWloJa+oI0D7n4ZcNkYd89sWPYzwGdCbj+kTmbRaoYHtzFtziwm9UwOVJU0OmfO3XAe3M4JLPzGo3mXIyVWpfELOptFq9m+dTsz58xkcheMYbWg1kpDQVGcsmAtt29cmmsNfb0juW4/LbWglndDgU4LNYaOZtFqNJuWCZ3zU2RvHc2i1XTRbFpN2WbVuvWcn1nJe1ZNIa2JELNoNdo3LRvq/BT5oxCzaDXdsm9avbIFNcj/6888Oj+zkmdQU0hrIsgsWo1m0zKlzk+RQLNoNV04mwYKakkpqIWlkNbE6FDYdt/Q65PxqfNzb73bWzvCel7rk7CGd4Ydc0KvryzmTA4zG5mlqga1SZNmTrxQGyazT9uPySOo5XXGgUKbdeD8lpYr2tH95Y/WLLueNf0vU0NB7FU3nt/SckU7I4MkM++gvY8M30xWR/gvszNn3VeqZgIoRkPB4gOfaXqGgqQO6v/IhMv0PdbL+w49YI8zCYS2dZFl2kygmTSprFpDgWbURKQTZ866r3Rff1Z1Rm08Q/3D7O7dnfp2ti6yzGbVFNKk0tT5KSKhlDGo5R3W8thHrUpnKFBIk8qr7/z0aVPyLkdESqxsQQ3yn1XTOT+TU0iTrnHLis8y8oLd6vwUkY4oqCWjoNY+hTTpKgdPe1adnyLSMQW1ZBTU2qOQJl1H5/wUkRAU1JJRUGudQpp0JXV+ikgI6vxMJo+glkVYC935qZAmXUudnyISShmDWt5hTZ2fE1NIk66mc36KSChlC2qQ/6yaOj/Hp5Amgs75KSJhKKglU9Wg1imFNJGYzvkpaRrRcNs1FNSSUVDbm0YNkTrq/JQ0le0ckJKcgloyCmp7UkgTaaDOT0mTglr3UOdnMlXt/ExCIU2kCXV+SpoU1LpLGYNa3mGtyp2f7VBIExmDOj8lTQpq3aVsQQ3yn1WrcudnqxTSRCagzk9Ji4Jad1FQS6abg1rQkGZm+5nZLWa2zczWm9lZYyzXZ2ZfMLOnzGyTmd1mZvoLKIWlzs/qy2v8+vqWYxTWuoiCWjLdGtRCz6RdDQwD84GzgWvM7Mgmy10IvBR4CbAQGACuClyLSFDq/Ky8XMcvBbXuoaCWTDcGtWAhzcxmAG8ELnX3QXe/C/gWcE6TxQ8GvufuT7n7TuBfgWaDoUihqPOzmooyfimodQ91fibTbZ2f5u5hVmR2NPBjd59ed9vFwCvc/bSGZZcD/wT8JfAc8L+Ap939oibrXQmsBJg3b+6x//KVvwtSbwi7ds5nytSn8i5jD0Wrqar1PDs6g+e2zqBvY2e/vHMWzGBg47aO6wmlaPUArLzwLfe6+/I0t5HF+DV33txjr/ryFS3VM2fy9kTPo11DOxfQN3VjJttqRbfWMzA6feKFgL7hfRnqfS7dYlq0ZddUAPbbPZ1Nk7J5v9YbGu5pevv8yX08NTqUyjYnDbc/r3XBWX/V0fjV/FkmMxPY0nDbZmCfJsv+DngceBIYBX4NXNBspe5+LXAtwGGH9/vCpatD1duxDWtXUaR6oHg1VbWehfG/p996Ef3fHmHa/U8mWs8Zq47j5tX3dFxPKEWrJ0Opj1+HHL7YHz7o1pYLymKWZd3aS1i89JOpb6dV3VrPYlqbRV3y+AraeQ+l7faNSzlr+1HcNP0X2W88zrXrnpi3x80fnLmITw+uT22zfY/1prbuZkLukzYIzGq4bRawtcmyVwN9wP7ADOBm4DsBaxHJhDo/K6Nw45e++uwuZfvqE7r3688shQxpDwE9ZnZY3W3LgAeaLHsUcIO7b3L3IaKdbo83s7kB6xHJhDo/K6GQ45c6P7tLGYParCk78y6h0kEtWEhz921EnygvN7MZZnYi8AZgTZPF7wHeYmazzWwK8B5gg7v/IVQ9IllS52e5FX38UlDrHmUMappRS0/oQ3C8B5gGPA18FXi3uz9gZieZ2WDdchcDO4n27XgGeB1weuBaRDKlzs/SK/T4paDWPdT5mUwVOz9DNg7g7puAFU1uv5Nox9za9WeJjkMkUinnzLkbzoOblxzPEavT23lVwivD+PX1LceU7o+3JHfmrPtKFc5rQe32jUtzq6GvdyTzbQ71D6fWUKDTQokEpnN+SprK9EdbOlfGUJ73rFqVzvmpkCaSEnV+SloU1LqLgloyVQhqCmkiKVLnp6RFnZ/dRUEtmbIHNYU0kZSp81PSpKDWPbI6E0VICmqdUUgTyYA6PyVNCmrdQ52fyZS181MhTSQjtaD24KpFeZciFaSg1l3KGNTyDmtZB7UQFNJEMqTOT0mTglp3KVtQg/xn1fLo/OyEQppIDmqdnz5tSt6lSMUoqHUXBbVkyhLUFNJEcrJm2fWMvGC39lOT4NT52V0U1JIpQ1BTSBPJ0cHTnlVDgaRGQa17KKglU/SgVqqQNjSqr4aketT5KWlSUOse6vxMpshBrVQhbdKu3Zx+60WsGXhZ3qWIBKXOT0mTglp3KWNQyzusFTWolSqkARyxej23X3eCgppUjjo/JU0Kat2lbEEN8p9VK2LnZ+lCGsDCbzzK7dedwDm/fFvepYgEp3N+SloU1LqLgloyRQpqpQxpEAW1/a6eoaAmlaRzfkpa1PnZXRTUkilKUCttSAOYdv+T7Hf1DE6/9aK8SxEJTuf8lDQpqHUPBbVkihDUSh3SIApqR6xer6AmlaTOT0nTwOj0vEuQjKjzM5m8g1rpQ1pNLaipoUCqRp2fkibNqHWXMga1vMNankGtMiEN1Pkp1aXOT0mTglp3KVtQg/xn1fLq/KxUSAN1fkq1qfNT0qKg1l0U1JLJOqhVLqSBOj+l2tT5KWlR52d3UVBLJsugFjSkmdl+ZnaLmW0zs/VmdtY4yx5jZj8ys0Eze8rMLgxZizo/pcrU+RlekcavvCmodQ8FtWSyCmqhZ9KuBoaB+cDZwDVmdmTjQmY2F/gu8EVgf+BQ4N8D16LOT6k0dX4GV6jxK28Kat1DnZ/JZBHUgoU0M5sBvBG41N0H3f0u4FvAOU0W/wDwPXe/0d2H3H2ru/82VC2N1PkpVaXOzzCyGL9GvXx7lyiodZcyBrW8w1raQS3kqHE4MOLuD9Xd9ktgr0+iwAnAJjO728yeNrPbzKw/YC17UeenVJU6P4PIZPy6fePSAKVmS0Gtu5QtqEH+s2ppdn6au4dZkdlJwNfcfUHdbe8Aznb3kxuWfQh4AXAK8GtgNXCsu5/YZL0rgZUAc+fOPfYTl36mozp3zemDWSMcPO3ZjtYDsGvnfKZMfarj9YRUtJpUz/hC1/Pojv3peXoStmNXosfPWTCDgY3bgtUTwsoL33Kvuy9PcxuZjF/z5h77D1/6x+fvmzVlZ/gn0qa+4X0Z6n2upWXnTN6ebjHA0M4F9E3dmPp2WtXN9bR6oON23kNp27JrKvvtns6mSem/V8cyNNyzx/X3nfnXHY1fPRMv0rJBYFbDbbOArU2W3QHc4u73AJjZx4A/mNlsd99cv6C7XwtcC7C4/2C/efU9HRe648UHsOm921iz7PqO1rNh7SoWLl3dcT0hFa0m1TO+0PUsBM755duw789h4TcebfvxZ6w6jhC/YyWU+vi16LBD/Kbpv9hjRXnPACx5fAUPH3RrW49Jc6Zl3dpLWLz0k6mtv13dXM9iWptFTfIeStUjb6Lx9yxT02HdE/OCrS7k150PAT1mdljdbcuAB5os+yugfgovzHRei9T5KVWmzs9Echm/9PWnFFkZv/oswgx1yK8+g4U0d98G3AxcbmYzzOxE4A3AmiaLXw+cbmZHmdkU4FLgrsZPoWlS56dUmTo/25Pn+KWgJkWmzs9kQgW10O1G7wGmAU8DXwXe7e4PmNlJZjZYW8jdfwB8GPi3eNlDgTGPSZQmdX5KVanzs225jV8KalJ0ZQxqeYe1EEEtaEhz903uvsLdZ7h7v7vfFN9+p7vPbFj2Gnc/wN3nuPtp7v54yFraoc5PqSp1frYu7/FLQU2KrmxBDYoxq9aJ8h24JyU656dUmc75WQ63b1xaurCmoNZdFNSypZBWR+f8lCqrnfNTQa34yhjUFNa6h4JadhTSGqjzU6pszbLrWf6p+9RQUAJlC2qgWbVuoqCWDYW0JtT5KVWmzs/yUFCTIjtz1n2ZHOQ4pLIFNYW0cajzU6pKnZ/loaAmRVe2WbUidH62SiFtAur8lKpS52d5KKhJ0ZUtqEE5ZtUU0lqgzk+pMnV+loM6P6XoFNTCU0hrkTo/pcpqnZ+75vTlXYpMoIxBTWGteyiohaWQ1gZ1fkqVrVl2PbPmDqqhoATKFtRAs2rdREEtHIW0NqnzU6ps/8nb1PlZEgpqUmQ652cYCmkJHbF6PQ8/9wI1FEjlqPOzPBTUpOjKGNSKFNYU0jrQt3FYnZ9SSer8LA8FNSm6sgU1KM6smkJah9T5KVWmzs9yUOenFJ2CWjIKaQGo81OqTOf8LI8yBjWFte6hoNY+hbRA1PkpVaZzfpZH2YIaaFatmyiotUchLSB1fkqV6Zyf5aGgJkWmzs/WKaSlQOf8lKpS52d5lDGoDYxOz7sEyVAZg1rWYU0hLSU656dUlTo/y6OMQU0zat2lbEENsp1VU0hLkTo/pcrU+VkO6vyUolNQG5tCWsrU+SlVps7P8ihjUFNY6x4Kas0ppGVAnZ9SZer8bI3vzruC8gU10KxaN1FQ21vQkGZm+5nZLWa2zczWm9lZEyzfa2a/NbMnQtZRROr8lCqrQudnFuPXuifmdV5ohxTUpMjU+bmn0DNpVwPDwHzgbOAaMztynOU/BDwTuIZCU+enVFUFOj8zGb8U1JJRUOsuZQxqaYS1YCHNzGYAbwQudfdBd78L+BZwzhjLHwy8GbgiVA1loc5Pqaqydn5mPX6te2Je7mFNQU2KrmxBDcLPqoWcSTscGHH3h+pu+yUw1ifRq4APAzsC1lAa6vyUKith52cu41feQW3LrqmlC2sKat2l24OauXuYFZmdBHzN3RfU3fYO4Gx3P7lh2dOBle7+WjM7GfiKux84xnpXAisB5s6de+wnLv1MkHpDmLNgBgMbt3W0Dp82hZEX7Obgac8GqWnXzvlMmfpUkHWFoHrGV/V6Ht2xPz1PT8J27Eq8jpUXvuVed18erKgmMhm/5s099u+uuarp9vt6RwI8i/btt3s6myZtB2DWlJ251FCvb3hfhnqfa3n5OZO3p1cMMLRzAX1TN6a6jXYUrR7IrqZWD3Tc7nsoTVt2TeWd/+2cjsavnoD1DAKzGm6bBWytvyH+WmE18LpWVuru1wLXAizuP9hvXn1P55UGcsaq4whRz44XH8Bjr+vhlhWf7XhdG9auYuHS1R2vJxTVM76q17MQWDPwMm6/7gQWfuPRYOtNQerjV/+SQ/zTg+vHXHbxgdnvnnvW9qO4afovnr+e98mklzy+gocPurWtx6Q507Ju7SUsXvrJ1NbfrqLVA9nVtJjWZlGTvIeKLOTXnQ8BPWZ2WN1ty4AHGpY7jOj1vtPMNgI3A39iZhvNbHHAekpDnZ9SZSXp/Mx9/Mr7q0/QfmpSbGXs/OxUsJDm7tuIBqzLzWyGmZ0IvAFY07Do/cBBwFHx5e3AU/H/Hw9VTxmp81Oqquidn0UZvxTUklFQ6y7dFNRCH4LjPcA04Gngq8C73f0BMzvJzAYB3H3E3TfWLsAmYHd8fTRwPaWjzk+pqhJ0fhZi/FLnZzIKat2lW4Ja0JDm7pvcfYW7z3D3fne/Kb79TnefOcZj7hhrp9tupc5PqbKidn4WbfwqQlArW1hTUOsu3RDUdFqogtI5P6XKdM7P1uQd1KB8s2o652d3qXpQU0grMJ3zU6pM5/xsjYJaMgpq3aPKQU0hreDU+SlVVpLOz9wpqCWjoNY9qtr5qZBWEur8lKoqeudnUSioJaOg1l3SPsBx1hTSSkSdn1JVJej8LAR1fiajoNZdqjSjppBWMur8lCoraudn0RQhqJUtrCmodZeqBDWFtBJS56dUmTo/W5N3UIPyzaqp87O7VCGoKaSVlDo/pcrU+dkaBbVkFNS6R9mDmkJaianzU6qs1lAg41NQS0ZBrXuUufNTIa0C1PkpVXXOnLvzLqEUFNSSUVDrLmUMagppFVHr/Hx2dEbepYhIDtT5mYyCWncpW1BTSKuQhd94lC1/mKmGApEuVoSgVrawpqDWXcoU1BTSKmbKwJA6P0W6XN5BDco3q6bOz+5SlqCmkFZB6vwUKSC3TDenoJaMglr3KENQU0irKHV+ihRP32O9mW5PQS0ZBbXuUfTOT4W0ilPnp0ixKKiVg4JadylqUFNI6wI656dIseQR1PIOa2UMagOj0/MuQTJUxKCmkNYldM5PkWLJOqhB/rNq6vyUoitaUFNI6yI656dIsfQ91quvP0tAnZ/dpUhBTSGty6jzU6R4FNTKQUGtexQlqCmkdSF1fooUj4JaOSiodY8idH4qpHUxdX6KFEvWQW1ouCfT7TWjoCZFl2dQCxrSzGw/M7vFzLaZ2XozO2uM5T5kZveb2VYze9TMPhSyDmmdOj9FIkUZv9T5WQ4Kat0lr6AWeibtamAYmA+cDVxjZkc2Wc6AtwBzgFOBC8zsTYFrkRap81MEKND41a2dn1t2Tc21hnYpqHWXPIJasJBmZjOANwKXuvugu98FfAs4p3FZd1/t7ve5+4i7Pwh8EzgxVC3SPnV+Sjcr4vilzs9yUOdnd8k6qJm7h1mR2dHAj919et1tFwOvcPfTxnmcAfcBX3T3LzS5fyWwEmDu3LnHfuLSzwSpN4Q5C2YwsHFb3mXsodOafNoUhmcbS/Z9Okg9u3bOZ8rUp4KsKwTVM76i1QPwute87153X57mNrIZv+Yde9nnPp+ovt29uxM9biLzJ/fx1OjQXrf39Y6ksr2J7Ld7OpsmbQdg1pSdudRQr294X4Z6n2t5+TmTt6dXDDC0cwF9Uzemuo12Fa2mrOpp9UDHf/3ad3Q0foXca3QmsKXhts3APhM87jKiGb3rm93p7tcC1wIs7j/Yb159T2dVBnTGquMoUj0QrqYHVy3ilhWf7Xg9G9auYuHS1R2vJxTVM76i1ZOh1Mev/kOW+Od+/2TiAof6hxM/diwfnLmITw+ub3rf4gOfCb69iZy1/Shumv6L56+fsmBt5jXUW/L4Ch4+6Na2HpPmTMu6tZeweOknU1t/EkWrKat6Fsf/pj2LGnKftEFgVsNts4CtYz3AzC4g2rfj9e6+98c5yY06P6XLFH780lef5aCvPrtL2l9/hgxpDwE9ZnZY3W3LgAeaLWxm5wGXAK929ycC1iGBqPNTukgpxi91fpaDglp3STOoBQtp7r4NuBm43MxmmNmJwBuANY3LmtnZwCeAU9z9kVA1SHjq/JRuUKbxq1s7P8sW1hTUuktaQS30ITjeA0wDnga+Crzb3R8ws5PMbLBuuY8D+wP3mNlgfNlrp1spBnV+Spcozfilzs9yUOdnd0kjqAUNae6+yd1XuPsMd+9395vi2+9095l1yx3s7lPcfWbd5V0ha5GwdM5Pqboyjl8KauWgoNY9Qgc1nRZKWqZzfooUj4JaOSiodY+Q5/xUSJO2qfNTpFgU1MpBQa27hAhqCmmSiDo/RYpFnZ/loKAm7VBIk8TU+SlSLOr8LAcFNWmVQpp0RJ2fIq0xh33WhzkN33jU+VkOCmrSCoU06Zg6P0Val0VQA+2nVgY6RIdMRCFNglDnp0jrFNTSU7agBppVk7EppElQ6vwUaY2CWnoU1KQqFNIkOHV+irSmykEt77CmoCZVoJAmqah1fj66Y/+8SxEptKoGNch/Vk2dn1J2CmmSmoXfeJSepyep81NkAvusd3V+pkhBTcpKIU1SZTt2qfNTpEVVnVVTUGufOj8FFNIkA+r8FGmdglp6yhbUQLNq3U4hTTKjzk+R1mQV1CYNZ/snQEEtGQW17tWTdwFF9IOzv8Tw9O0TLvfdAeAdE6+vd/t0XnXj+Z0XVgFHrF7P7Q+fAOfBOXPuzrscqbN7ZJTenn9i98gok3om511O19tnvbN1kSV67MO7P8ooWydc7oKHWlvfpEkzOaj/I4lqaVQLaosPfCbI+pK4feNSTlmwNrftJ/H1LcewPO8iCm50ZJQpkz/H6MgokysyhmkmrYlWAlqe6ys7nfOzmHYMbGGSPcKOgS15lyKxpDNqrQS0duzePRh0fZD/rFoZOz8HRqfnXUKhDQ4MYvYIgwPh3695UUiTXOicn8Wye2SU4cFtmDnDg9vYPTKad0kSy6rzMw95BzUo39ef+uqzudGRUbZv3Y6Zs33rdkYrMoYppEludM7P4tgxsAVqOcDRbFoBKailp4xBTWFtT4MDg3uMYVWZTVNIk1yp8zN/tVm0eppNKyYFtfSULaiBZtVqarNo9aoym6aQJoWgzs/87DGLVqPZtMJSUEuPglo57TGLVlOR2TSFNCkMnfMze81m0Wo0m1ZcVQ1qQ8M9uYc1BbVyaTaLVlOF2bSgIc3M9jOzW8xsm5mtN7OzxljOzOxTZvZsfPmUmSXrNZdKUedntprOotV02Wxa2cavqgY1yH9WrYydn90a1JrOotVUYDYt9Eza1cAwMB84G7jGzI5sstxKYAWwDHgJcBrwzsC1SEmp8zMb482i1XTZbFrpxq8sOz+78QwFW3ZNzbuEtnRbUBtvFq2m7LNpwUKamc0A3ghc6u6D7n4X8C3gnCaLvxX4tLs/4e5PAp8Gzg1Vi5SfOj/TN+4sWk2XzKaVffxSUEtPGWfUuiWsjTuLVlPy2TRzD/PLbWZHAz929+l1t10MvMLdT2tYdjPw5+7+n/H15cAP3X2fJutdSfTJlblz5x77iUs/E6Te8awceEvwdV4758vB19nMnAUzGNg4/uxIlkLUM7SglyX7Ph2knl075zNl6lNB1hVCfvVsZuqUyzHbNeGS7lPYueujwKz0y2rida95373unurB1rMavy6/8vMpPgvY3Rt963rBQ38VfN2fP/xf67azO/j6AeZP7uOp0aG9bu/rHUllexPZb/d0Nk2KZmpmTdmZSw31+ob3Zaj3uZaXnzM5/QOpD+1cQN/UjalvZ2+b6e35+5bHsOGRvyOPMezUP7+wo/Er5GmhZgKNH7k3A3sNXPGymxuWm2lm5g2p0d2vBa4FWNx/sN+8+p5wFY+lhVM9tSuTuoEzVh2X2bZaEaqeB1ct4oxX/LTjU0ltWLuKhUtXd1xPKHnVs+2ZAYa3Tjy4AZjtYvb+VzBj3pyUq8pV6uPXokWH+JfufDJcxWNIeiqpiXzu93vWPtQ/HHwbH5y5iE8Prm96Xx6nkTpr+1HcNP0Xz1/P+1RSSx5fwcMH3drWY86cdV86xcTWrb2ExUs/meo2mtn8zGa2b2l9DJuz/xXMnjc75arCC7lP2iB7x9RZ0PT8JI3LzgIGGwc4kRp1fobTyr5ojbpg37RMxq/ZD+89SxRalb/6zPvrz7J99QnV3E+tlX3RGpV137SQIe0hoMfMDqu7bRnwQJNlH4jvm2g5keep8zOMlvZFa1T9fdMyG79mPzyUSVjLQtZBDfLfT02dn/lraV+0RiXdNy1YSHP3bcDNwOVmNsPMTgTeAKxpsviXgQ+Y2QFmthD4IHBDqFqkutT52Zkks2g1VZ5Ny2P8qlJQU0NB8VUlqCWZRasp42xa6ENwvAeYBjwNfBV4t7s/YGYnmVl9hP0icBvwa+B+4N/i20QmpM7P5BLNotVUfzYt8/GrKkEN1PlZBlXo/Ew0i1ZTwtm0oCHN3Te5+wp3n+Hu/e5+U3z7ne4+s245d/dV7r5ffFml/dGkHTrnZ/s6mUWrqfhsWi7jl4JacgpqyZQ1qHUyi1ZTttk0nRZKSk3n/GxdR7NoNdWfTcuFglpyCmrJlDGodTSLVlOy2TSFNCk9dX5OLMQsWk2VZ9PypKCWnDo/kylTUAsxi1ZTptk0hTSpBHV+ji/ILFqNZtNSo87PzhQhqJUtrJUlqAWZRasp0WyaQloTvdunT7xQjuuT5tT5ObbRobAHHg29PtlTp0GtZ7TZMXiTm9z0mL4TU+dnOZQhqA3vDDvmhF5fWkKecaAyXnXj+S0tV7Sj+0ut8/MATn/dRdyy4rN5l1MYsw6c39JyRTsjQzeb/fAQm5f0JXrssg2XtbTc+ScdwGcf25BoG+3oe6w3lTMUjGXdE/NyOUNBvds3Ls39DAXtqAW1tM9QkNS8g1oL33mdASEtmkmTylHnp1SFzlCQnGbUkinDrFo3UUiTylLnp1SBglpyCmrJKKgVh0KaVJo6P6UKFNSSU+dnMgpqxaCQJpWnzk+pgiw6P6sa1CD/WTV1fkoSCmnSFWqdn4/u2D/vUkQ6kkVQyyKsqfOzHBTU8qWQJl1j2v1P0vP0JDUUSOnp68/kFNTaV4VzfpaVQpp0FduxS52fUgkKaskpqCWjoJY9hTTpSur8lCpQUEtOQS0ZBbVsKaRJ11Lnp1RBlYLapOFs/ySp8zMZBbXsKKRJV1Pnp1SBOj87U4SgVrawpqCWDYU06Xo656dkwTz9kKPOz+TyDmpQvlk1BbX0KaSJUDvn5ww1FEiqetc+Qe/aJ1LdRpW+/lRQK76B0ekKaylSSBOJ6ZyfkhUFtdYpqJWDglo6FNJEGqjzU7KgoNY6BbVyUFALTyFNpAl1fkoWFNRal0dQGxruyXSbjRTURCFNZAzq/JQsZBHU1PmZXN6zaur87G5BQpqZ7Wdmt5jZNjNbb2ZnjbPsh8zsfjPbamaPmtmHQtQgkgZ1fnaHvMewtIMaqPOzE3kHNSjfrJqCWhihZtKuBoaB+cDZwDVmduQYyxrwFmAOcCpwgZm9KVAdIsGp87Mr5D6GqfOzPd0Y1Lbsmpp3CW3ROT8713FIM7MZwBuBS9190N3vAr4FnNNseXdf7e73ufuIuz8IfBM4sdM6RNKkzs/qKtoYpqDWum4MamWbUQPNqnXCvMMDLJrZ0cCP3X163W0XA69w99MmeKwB9wFfdPcvjLHMSmBlfPXFwP0dFRzWXOAPeRfRoGg1qZ7xqZ6JHeHu+6S18jTHsIKPX1C8n7fqGV/R6oHi1VS0ejoav0K0rswEtjTcthlopajLiGbzrh9rAXe/FrgWwMx+5u7Lk5UZXtHqgeLVpHrGp3omZmY/S3kTqY1hRR6/oHg1qZ7xFa0eKF5NRaynk8dP+HWnmd1hZj7G5S5gEJjV8LBZwNYJ1nsB0X4dr3f39OffRaQraQwTkbKacCbN3U8e7/54f44eMzvM3X8X37wMeGCcx5wHXAK83N3Tb2sSka6lMUxEyqrjxgF33wbcDFxuZjPM7ETgDcCaZsub2dnAJ4BT3P2RNjd3bUfFhle0eqB4Name8ameiaVaU4ZjWNe9tgmonvEVrR4oXk2VqqfjxgGIjjEEXAecAjwLXOLuN8X3nQR8x91nxtcfBQ4E6r8e+Iq7v6vjQkREEtAYJiJFFCSkiYiIiEhYOi2UiIiISAEppImIiIgUUKFDWt7n02unBot8ysyejS+fig90GVQb9WRyjtR2fkbx8r1m9lszS6Ujrs33zDFm9iMzGzSzp8zswrzqMbM+M/tCXMcmM7vNzA5IoZ4LzOxnZjZkZjdMsOz7zWyjmW0xs+vMrC90Pe3UZGZvNbN743qeMLPVZhbiWI+p0PjVUT2ZneNZY1iYerp1DEt7/Cp0SKMA59Nro4aVwAqi1v2XAKcB7wyw/aT1ZHWO1HZ+RgAfAp5JoY626jGzucB3gS8C+wOHAv+eVz3AhcBLid47C4EB4KoU6tkAfJxoJ/kxmdlriA4x8WpgEXAI8LEU6mm5JmA6cBHREcX/NK7t4pRqCkHjV/J6sjzHs8awAPXQvWNYuuOXuxfyAswgemMcXnfbGuCTLT7+c8BVWdUA3A2srLt+PvCTorwmIV6PTusBDgZ+C7wWeCLP9wzRIRTWhK6hg3quAVbXXX898GCKtX0cuGGc+28CPlF3/dXAxpRfr3FrarL8B4Db0qwpi5/9GI/X+BX49QhRk8YwjWFJ62myfEvjV5Fn0g4HRtz9obrbfgmM9wkHeP58eicxzsEoU6jhyPi+iZbLqp7nBXw9Oq3nKuDDwI7AdSSp5wRgk5ndbWZPx1Pz/TnW8yXgRDNbaGbTiT6xfidwPe1o9n6eb2b751RPMy8n/Hs6FI1fndXzvBTHryQ1aQzTGBZKS+NXkUNaqucETaGGmfF99cvNDLxfR9LX5DLCvB6J6zGz04HJ7n5L4BoS1UN0nKu3Ek3R9wOPAl/NsZ7fAY8DT8aPeSFweeB62tHs/Qyt/f6lzqIj/i8Hrsy7ljFo/OqsnnqXkc741VZNGsMmrEdjWIvaGb9yC2lWjvPptVND47KzgEGP5zUDafs1Cfx6JKrHotPurAbeF3j7ieqJ7QBucfd73H0n0b4KLzOz2TnVczXQR7RvyQyiI+Dn+Sm02fsZJvj9y4KZrQCuAF7r7n/IqQaNX+nWA2RyflSNYeHq0RjWgnbHr9xCmruf7O42xuXPgIeIz6dX97BWz6f3ag9zPr12anggvq+lWjOoJ43XI2k9hwGLgTvNbCPRL++fxF03i3OoB+BXQP0foDSO6txOPUcR7c+wKf5jdBVwfLxzcB6avZ+fcvdnc6oHADM7Ffhn4DR3/3VedWj8Sr2eLMavdmrSGDZxPUehMWxcicavtHaiC7Qj3v8mmr6dAZxINF155BjLng1sBF6YRw3Au4h2KD2AqLPlAeBdeb0mab0eSeoBeoAFdZcziDpiFhB9fZDH6/Mqou6jo4ApwD8Cd+b487oe+AYwO67nw8CTKdTTA0wl+iS3Jv5/T5PlTo3fPy8C9gV+QIs7vadY06uITtn08jTf01n/7ONlNX5l8HokrUljmMawAPUkGr9SffMHePL7AbcC24DHgLPq7juJaDq+dv1RYBfRFGft8oW0amiyfSOaDt8UX1YTn3Yri9ckq9cjaT0NjzmZFDqj2q0HeDfR/hMDwG3AQTn+vPYHbgSeBp4D7gKOT6Gey4g+cddfLiPap2UQ6K9b9gPAU0T7l1wP9KX0M2upJuCHwEjDe/o7adSU5s9+jJ+/xq8cxq92amp4zMloDNMY1kY9JBy/dO5OERERkQIqcneniIiISNdSSBMREREpIIU0ERERkQJSSBMREREpIIU0ERERkQJSSBMREREpIIU0ERERkQJSSBMREREpoP8fwUQS6nD/l7EAAAAASUVORK5CYII=\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "x1s = np.linspace(-0.2, 1.2, 100)\n", - "x2s = np.linspace(-0.2, 1.2, 100)\n", - "x1, x2 = np.meshgrid(x1s, x2s)\n", - "\n", - "z1 = mlp_xor(x1, x2, activation=heaviside)\n", - "z2 = mlp_xor(x1, x2, activation=sigmoid)\n", - "\n", - "plt.figure(figsize=(10,4))\n", - "\n", - "plt.subplot(121)\n", - "plt.contourf(x1, x2, z1)\n", - "plt.plot([0, 1], [0, 1], \"gs\", markersize=20)\n", - "plt.plot([0, 1], [1, 0], \"y^\", markersize=20)\n", - "plt.title(\"Activation function: heaviside\", fontsize=14)\n", - "plt.grid(True)\n", - "\n", - "plt.subplot(122)\n", - "plt.contourf(x1, x2, z2)\n", - "plt.plot([0, 1], [0, 1], \"gs\", markersize=20)\n", - "plt.plot([0, 1], [1, 0], \"y^\", markersize=20)\n", - "plt.title(\"Activation function: sigmoid\", fontsize=14)\n", - "plt.grid(True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 이미지 분류기 만들기" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "먼저 텐서플로와 케라스를 임포트합니다." - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [], - "source": [ - "import tensorflow as tf\n", - "from tensorflow import keras" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'2.4.1'" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "tf.__version__" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'2.4.0'" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "keras.__version__" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "먼저 MNIST 데이터셋을 로드하겠습니다. 케라스는 `keras.datasets`에 널리 사용하는 데이터셋을 로드하기 위한 함수를 제공합니다. 이 데이터셋은 이미 훈련 세트와 테스트 세트로 나누어져 있습니다. 훈련 세트를 더 나누어 검증 세트를 만드는 것이 좋습니다:" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [], - "source": [ - "fashion_mnist = keras.datasets.fashion_mnist\n", - "(X_train_full, y_train_full), (X_test, y_test) = fashion_mnist.load_data()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "훈련 세트는 60,000개의 흑백 이미지입니다. 각 이미지의 크기는 28x28 픽셀입니다:" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(60000, 28, 28)" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "X_train_full.shape" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "각 픽셀의 강도는 바이트(0~255)로 표현됩니다:" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "dtype('uint8')" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "X_train_full.dtype" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "전체 훈련 세트를 검증 세트와 (조금 더 작은) 훈련 세트로 나누어 보죠. 또한 픽셀 강도를 255로 나누어 0~1 범위의 실수로 바꾸겠습니다." - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [], - "source": [ - "X_valid, X_train = X_train_full[:5000] / 255., X_train_full[5000:] / 255.\n", - "y_valid, y_train = y_train_full[:5000], y_train_full[5000:]\n", - "X_test = X_test / 255." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "맷플롯립의 `imshow()` 함수와 `'binary'` 컬러맵을 사용해 이미지를 출력할 수 있습니다:" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAOcAAADnCAYAAADl9EEgAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKN0lEQVR4nO3d20rWWx/F8WllWeYuUwtCSsIMCkqKiCDIrqOjovPooDvoIjrpCjrrHhZC1EHuyHaWFaXltkxts87eo/UfI3xe1zMe1vdzOpg+mxz9wR9zzqbfv38XAHl21PsNAPhnlBMIRTmBUJQTCEU5gVC7TM6fcvF/4yYDTU1N/9I7ifOPH5wnJxCKcgKhKCcQinICoSgnEIpyAqEoJxDKzTmxDcbGxiqzBw8eyLWjo6My//nzp8wPHTok85MnT1ZmV65ckWsvXLgg8//wHHNLeHICoSgnEIpyAqEoJxCKcgKhKCcQinICoZhzbsHExITMr1+/LvNHjx5VZj9+/JBrd+3S/2Q7duj/b13+/fv3La8dHByU+e3bt2V+48YNmf/X8OQEQlFOIBTlBEJRTiAU5QRCUU4gVJM5rrBhj8b89etXZeZGAk5fX5/M5+fnZd7R0VGZueMjm5ubZe5GMTt37pS523KmLCwsyPzIkSMyf/v27ZZfu1Z1PraTozGBRkI5gVCUEwhFOYFQlBMIRTmBUJQTCNWwW8bUHLOU2maZi4uLMndzzpaWFpnv27evMhsaGpJr3XY1N49z713NOd+8eSPXdnZ2yrytrU3mjx8/rsyGh4flWmc7f1+2S947AlBKoZxALMoJhKKcQCjKCYSinEAoygmEit3PuZ1zqYsXL8p8ZmZG5u69uVnj0tJSZaau4CullOXlZZm/ePFC5m4Ge+LEicrMzSndfkx17GYppWxsbFRm7t97bm5O5o7bx+r2wdaI/ZxAI6GcQCjKCYSinEAoygmEopxAKMoJhIrdz1nrOaF37typzJ4/fy7X9vf3y9ydDetmiWre52aFp06dkrmaoZbi91yq9/b69Wu51hkYGJC5Os/35cuXcu3Nmzdlfu/ePZlv8xxzS3hyAqEoJxCKcgKhKCcQinICoSgnECp2y1itLl++XJmtr6/LtW6Ms7a2JvM9e/bIfO/evZXZysqKXLt//36Zt7a2ytxtKVOvf+zYMbn28OHDMnff29evX7f0vkrx3/lff/0l8zpjyxjQSCgnEIpyAqEoJxCKcgKhKCcQinICoWK3jDnuKMMvX75UZmrOWEop7e3tMldX+JWij3h0uZvXuRltrcd2njt3rjJzM1Z3daLb9tXd3V2Z7dqlf1Xn5+dl7q4vdNsE64EnJxCKcgKhKCcQinICoSgnEIpyAqEoJxCqYeec7po+tf/Pzes2Nzdl7mZublapZrTu2E33s3t7e2XuZrBqT+WnT5/k2t27d8u8q6tL5up7cfNdd72gm4My5wTwxygnEIpyAqEoJxCKcgKhKCcQinICoRp2zun2Birfvn2TuZr1leLnpG4WqWaZ7mxXtxd1dXVV5u6zqxmum2O6a/Tce1teXq7M3Hm8bn/v+Pi4zIeHh2VeDzw5gVCUEwhFOYFQlBMIRTmBUJQTCEU5gVANO+d0c6sdO6r/31lYWJBr3717J/PTp0/L3M371CzT7bd059K2tbXJ3O0XVe/NzRLdfNftufz48WNldvDgQbnWfefufs5r167JvB54cgKhKCcQinICoSgnEIpyAqEoJxCqYUcps7OzMlcjB/dn99+/f8vcjQzcljN19KZ7b24U4o6QVCOmUkppbm6WueLemxulqO/NjYjctYxTU1MyT8STEwhFOYFQlBMIRTmBUJQTCEU5gVCUEwjVsHPOyclJmatZZVNTU02v7WaRbmuVmiW6WWCt3JYzNYN1Vx+6z+3WqyNH3WzZHds5NjYm80Q8OYFQlBMIRTmBUJQTCEU5gVCUEwhFOYFQDTvnfPr0qczVLFLN8v6Eu0bP7ZmsZQbrZoVuL2otM143I3V5S0uLzNWxoO5nO3NzczJ/9uyZzAcHB2t6/a3gyQmEopxAKMoJhKKcQCjKCYSinEAoygmEatg554cPH2R+4MCBysztmezs7JS5m7m5vYVqnudmgW5G686tddSc1O3XdK/tZqzq7Fn3ud2ZuY67UpI5J4D/oZxAKMoJhKKcQCjKCYSinEAoygmEatg5p9szqeZibh7nzkh1s0h3rq2a97n9mG6e5+7XdLNG9fPdXtJaPrd7bXfnqZstOx0dHTWt3w48OYFQlBMIRTmBUJQTCEU5gVCUEwjVsKMU92d59af1xcVFubanp0fmbqSwuroq871791Zma2trcq373K2trTJ3R0TW8tpqy1cppSwsLMj8+PHjldnU1JRc60ZrXV1dMndHY46MjMh8O/DkBEJRTiAU5QRCUU4gFOUEQlFOIBTlBELFzjndNXtue9L+/fsrs8+fP8u1Bw8elLnjZm7btbYUf+yn25Kmtpy5ozHdVjuXnz9/vjJ79eqVXOu2fLnZ9PT0tMzrgScnEIpyAqEoJxCKcgKhKCcQinICoSgnECp2zumOQnS5OmbR7Xns7e2V+fv372Wurh8spZSlpSWZK25PZa3r1ffmZrDuyNDZ2VmZqxlse3u7XDszMyNzd22ju1KyHnhyAqEoJxCKcgKhKCcQinICoSgnEIpyAqFi55zubFl19mspeu+hm3kNDAzIfHl5WeZuHqhy994ct2fSUd+bO5fWzTnb2tpkrv5N3Wu7ubebk6r9v/XCkxMIRTmBUJQTCEU5gVCUEwhFOYFQsaMUd1WdGxmo7UduFOKOl1THR5ZSyubmpsxrobZ0leKPDHXfmzqS1I2I3HGmtVyd6I7ldNzozX1v9cCTEwhFOYFQlBMIRTmBUJQTCEU5gVCUEwgVO+d0M7Pdu3fLXB0B6bYHdXd3y3xiYkLmtcxg3RV97nM77mhMNcOtdcZay/x3aGhI5g8fPpR5T0+PzN1nqweenEAoygmEopxAKMoJhKKcQCjKCYSinECo2DnnysqKzN0xjGqed/To0S2vLaWUz58/y9wdran2i7q9pG6G+uXLF5nPz8/LXB0h6eaYtcyeS9HX8F27dk2udXNOtwfX/T7VA09OIBTlBEJRTiAU5QRCUU4gFOUEQlFOIFTsnNNd6dbR0SFzde7tyMiIXHvo0CGZu6vs3DV+6+vrlZmbxzlufWdnp8zVflK3H9Pl7ho/NQe9evWqXOu4c2/d71s98OQEQlFOIBTlBEJRTiAU5QRCUU4gFOUEQsXOOd28zt31qOZ1Z8+elWtHR0dl/uTJE5m7M1bX1tYqM7fn0c1Ya51F1nI/58bGxpZ/din6fs6+vj651p1L62bPzDkB/DHKCYSinEAoygmEopxAKMoJhIodpbg/+bsjJJXp6WmZ379/X+b9/f0yX1hYkLn6s737XO7IUDeKccd2qpGDGnWU4rejufHYpUuXZK64MY4aX5VSyuTk5JZfe7vw5ARCUU4gFOUEQlFOIBTlBEJRTiAU5QRCxc45z5w5I/Ph4WGZj4+PV2Zuu5mbx929e1fm+PfdunVL5m67m9tGWA88OYFQlBMIRTmBUJQTCEU5gVCUEwhFOYFQTeoISQD1w5MTCEU5gVCUEwhFOYFQlBMIRTmBUH8DscHqopQEqFAAAAAASUVORK5CYII=\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "plt.imshow(X_train[0], cmap=\"binary\")\n", - "plt.axis('off')\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "레이블은 0에서 9까지 (uint8로 표현된) 클래스 아이디입니다:" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([4, 0, 7, ..., 3, 0, 5], dtype=uint8)" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "y_train" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "클래스 이름은 다음과 같습니다:" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": {}, - "outputs": [], - "source": [ - "class_names = [\"T-shirt/top\", \"Trouser\", \"Pullover\", \"Dress\", \"Coat\",\n", - " \"Sandal\", \"Shirt\", \"Sneaker\", \"Bag\", \"Ankle boot\"]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "훈련 세트에 있는 첫 번째 이미지는 코트입니다:" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'Coat'" - ] - }, - "execution_count": 19, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "class_names[y_train[0]]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "검증 세트는 5,000개의 이미지를 담고 있고 테스트 세트는 10,000개의 이미지를 가집니다:" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(5000, 28, 28)" - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "X_valid.shape" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(10000, 28, 28)" - ] - }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "X_test.shape" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "이 데이터셋에 있는 샘플 이미지를 몇 개 출력해 보죠:" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "그림 저장: fashion_mnist_plot\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAqkAAAEjCAYAAAAR5ZjkAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAADXdklEQVR4nOydd5hkRbn/PzV5Z2dnZvOysCwLLHHJSFAQkIwgmAiCil4DoldFrmIAFRX1chXjT0QFFBEQEZUgmMhJcg4CyyY2h9mduJPq90edb3X16Z7Z2dkJp5f6Ps88093n9OlTdareeuv7JmOtJSIiIiIiIiIiIiJLKBvtG4iIiIiIiIiIiIhIIyqpERERERERERERmUNUUiMiIiIiIiIiIjKHqKRGRERERERERERkDlFJjYiIiIiIiIiIyByikhoREREREREREZE5RCV1FGCMmWeMOaKPYwcbY14a6XvaXNBf32YdxhhrjNl+Y49t4JpnGmPu2/S7G3nE/shH7I+IiIg3GkZUSTXGvM8Y86gxpsUYs8QYc5sx5qBNvOZdxpiPDNU9buC3WoK/XmNMe/D+9KH4DWvtvdbaHTdwH0UVMWPMacaYa4wx2ySLVsVQ3NNgYYw5yBjzgDFmrTFmtTHmfmPMm0bznkYCyZhcY4ypHu17GS4YYw41xiwa4LmxP/LPjf0xPL9Z0uvLUOON3h/JOtlujGk2xjQla9FZxphIzlE642PEHpYx5nPAD4FvA1OBrYGfASeO1D1sKqy1dfoDFgAnBJ/9brh/fwBK59uBvw73fQwExph64BbgJ8AEYEvgQmD9aN7XQLApyr0xZhvgYMAC7xiqeypVxP7IR+yP4cHmsL4MJWJ/eJxgrR0HzAS+C5wHXF7sRGNM+Uje2GiipMaHtXbY/4AGoAV4bx/Hq3Edtjj5+yFQnRwbj1N2VgBrktdbJccuAnqAjuT6Px2J9iS/PQ84op/jk5J7bQJWA/cCZcF3/wd4GlgL/B6oSY4dCixK/c55ybnrgWuBXqA9afMXkvPKgGXJ7y7ALYItyd+ByfHzgfnAcuAqoCH57jbJ+R9L+n8J8D+b2D/7Ak19HDsTuA/4XvJMXwOOTY2Xy5P7eB34FlCeHNsOuANYBawEfgc0FnsuwM7JtU9L3h8PPJk8kweA3fvp54pBtvurwP3AJcAtqWO/Bv4fcCvQDPwb2C44boHtk9cHAQuBQ4scq076bkHyzH8OjOmnr+8HfpqMtReBw4Pj04GbcGP0FeCjG5qXwNhk/PUGY2x67I/YHxvbH0Pxx2a4vsT+GJJ+mEdqjQb2S8blnGS+XYojdlqBI5Lx/sek/a8Bn05991FgXTKvLkk+rwGuxq1JTcAjwNTRbv/mMj5GqlOOAbrpY+EHvgE8BEwBJuMUiG8mxyYC7wZqgXHAH4A/B9+9C/jIKDzoggmQOv4d3OJQmfwdDJjguw8nE2IC8AJwVnLsUAqV1CeBGSQLTR+T7wDgweT1NrhFqyI4/mHcIrMtUAfcCPw2df61uAVmt2QQ9tm+AfRPfTJpfwMcC4wPjp0JdAEfBcqBTySTQf3zJ+Cy5F6mJH318eTY9sCRyUSaDNwD/DD9XIC9cYv08cnne+GU8/2T3/xgcm51X/08yHa/ApwN7JO0cWpw7NdJn+wHVOAU7OuC4zZp3zE4BWS/9LHk9Q9wisME3Jy4GfhOH/dzJm7unYMbh6fglJEJyfF7cDvoGmDP5Lm/bQDz8lCCcRr7I/bHYPpjKP7YDNeX2B9D0g/zKLKG4daFTyTzbS3wFhyJUws8httIVuHWyrnA0cn3HgTen7yuAw5IXn88mWO1uLVlH6B+tNu/uYyPkeqU04Gl/Rx/FTgueH80MK+Pc/cE1gxnpwywTUUnQOpB/4Vk4Sjy3TOC9xcDP09eH0qhkvrhDf028E3gguT1NhQqqf8Czg7e74hbJCuC83dK3dPlm9hHOyeCYFEyKW7CmRbOBF4JzqtNfn9acnw9gaIInAbc2cdvnAQ8keqbC5PfPDT4/FJNtOCzl4BD+urnQbT3oKRPJyXvXwTOCY7/GvhV8P444MXgvQW+hGO756SuLQXF4Hb9IcN2IPBaH/d0JsEGIPnsYeD9OIW8BxgXHPsO8OvkdZ/zMj1OY3/E/tjY/hiqPzbD9SX2x5D0wzyKK6kPAV9J5ttVwef7AwtS534JuDJ5fQ9ubZmUOufDpCxzWf4rtfExUj6pq4BJ/fj6TccJXmF+8hnGmFpjzGXGmPnGmHW4gdKYJf8RY8zWYVBV8vH/4ViTvxtj5hpjvpj62tLgdRtuZ9YXFg7gNo6jf3/UYn1cgVMKi/2OfwaDhbX2BWvtmdbarXDmlek40wEE7bfWtiUv63C+Q5XAksTZvQnHqk4BMMZMNcZcZ4x5PRkPV+NcHEKcBTxgrb0r+GwmcK6umVx3RqqNA+nn/vBB4O/W2pXJ+2uSz0Js6Ll/FrjeWvtsH78xmWTHH7Tj9uTzvvC6TSRIAj3b6cBqa21z6tiWyes+5+UAEfsjH7E/hgeb9foyCMT+6B9b4txXIF/mzwSmp9aIL5NbI/8L2AF40RjziDHm+OTz3wJ/A64zxiw2xlxsjKkc9lYMHiU1PkZKSX0Qx46d1MfxxbgBImydfAZwLo71299aWw+8NfncJP9D4ToqsNYusPlBVVhrm62151prt8UFSHzOGHP4YH+iv/fGmGnAFsDjfZwPxfu4G+dbI8xIHV/MEMFa+yJu5zpnA6cuxI2VSdbaxuSv3lq7a3L827j27ZaMhzPIjQXhLGBrY8wPUte9KLhmo7W21lp7bXibg2sdGGPGACcDhxhjlhpjluJMqHsYY/bYiEu9FzjJGPOZPo6vxPn77Rq0o0Hjrg9saYwJ+0jPdjEwwRgzLnXs9eR1f/Oy376K/ZGP2B/Dis16fRkEYn/0AeOyy2yJi4mA/PYsxFkcwjVinLX2OABr7cvW2tNwhMn/AjcYY8Zaa7ustRdaa3cB3oyLffjAiDVq41FS42NElFRr7Vqcn8f/M8aclGjjlcaYY40xF+N8Ic83xkw2xkxKzr06+fo4nNBtMsZMAL6WuvwynO9IpmCMOd4Ys30i/NfizGa9Q3T5dJuPBW4P2JAVyW+F51wLnGOMmWWMqcMpe7+31nYH51yQPJtdgQ/hAroGBWPMTsaYc40xWyXvZ+DM9g/19z1r7RLg78D3jTH1xpgyY8x2xphDklPG4Zyy1xpjtgQ+X+QyzTi/m7caY76bfPZL4CxjzP7GYawx5u2pBXhTcBLuGe+CM4HsiXN3uJeNE1iLgcOBzxhjPpE+aK3txbXlB8YYsctbGmOO7ueaU4BPJ3Puvcl9/dVauxBnpvqOMabGGLM7ji3Q3OtvXi4DJhpjGvr4zZOI/RHiJGJ/DAveiOtLf4j9UYhkLTkeuA642lr7TJHTHgaajTHnGWPGGGPKjTFzEsUWY8wZxpjJyRxrSr7Ta4w5zBizW8ImrsO59AzVWj/kKLnxMZS+Axv6w/lCPIrzmVqKi2J9M84p/8e4aO4lyWtFu0/H+Tm0AP/BOSlbEn9LnL/Vf3CRZj8ewbbMo3+f1HOSc1px/pEX9PVd4Ou4iQPFfVLT/qcn4py/m3BZAm4A3pM65xs4ZbUJF1RVhhtsC5PPryYJZqIwun8pSdaATeifLYHrcaxLa/L/MlxA1ZnAfanzLbnAjwacD+kinIL/BHBqcmxXnHN7Cy7Q6dy++gsXOPIUOafvY3CRl03JOPsDib/dhp7nANp7O/D9Ip+fnPRnBY5J/lZwLP2swz6YhTOzfKTIsRrcJmMuTii+QBCFmvr9M8mP3v4PcFRwfCtchOZqnC/SWcGxPudlcvwKchGt02N/xP4YaH8Mxx+b0foS+2NI2j8Pp1A1J2P7QeCT5DLF5M23oP3XJv21BkeqaD25Ghd82wI8B5yUfH4aLr6hFaek/ZhBZoeJ46PwT9HUESUK4/xKlgLbWmvXDfIa2+DSbVTafGY1IiIiIiIiImJUECsvlD4m4FjaQSmoERERERERERFZRGRSIyKTGhEREREREZE5RCU1IiIiIiIiIiIic4jm/oiIiIiIiIiIiMwhKqkRERERERERERGZQ18VBwaCUfcTsNaSn4N6ozDoL/aBjeqPZ591BWNaW1t54YUXALj00ksBuOaaawDYbrvt+r3Gffe5fMTf+ta3APjmN79Jebkr/DBr1iwAxo8fP9BbGtX+yCBif+RjqPsDYp+kEfsjH4Pqj9CFLb0+HHfccdTVuboG3d3O/f7oo4/m4x//eN55vb0uzWVZ2SbxOKPaH/31w5133gnAJz/5SaqrqwHo6Ojw37v55psBmD17dt73ent7/bUGsfZmYnyE+Ne//gXg1+Cdd96Z7bffPu+cpqYmmpqaALjhhhsAOPTQQwE45phjGDt27GB/PhPjo9hz1Hzo7e3lxBNPBGD1alek6/bbb2fFihUA/OMf/9io624ARb+wKT6pQyZQpbD98Y9/5N///jcAPT09AEybNo2dd94ZgMMOOwyA/ffffyh+dlQGyNVXu5y4LS2ueurkyZPZcccdAfjSl74EwF133QXAVlttxZvf/GYAxowZ44+98sorAKxfvx5wQhbghz/8IU8//TQAy5a5QlIzZ87kHe94x0BuLXMCZJQR+yMfUUktRBwj+cjsovv5z7uaH5dddplXQrToVlVV8etf/xrAy9shQubGxx//+EcA3vOe9wCwxx57sGbNGgCvbFVXV/P8888DcNNNNwG5NSbvZjZeGRnV/mhtbQXgi1/8Ii+++CKQW4e32WYbwK25Gh9SxF599VW/oRHmzZvnX2vTc9ttt23k7WdnfKxc6So1n3baaQDcf//9gJsb2rDpOff29noyTJ/9/Oc/B+CUU04puHZPT48/fwPIjpKqCfBf//VfADz66KOA29lWVDhyVzvYsrIyv8PTZzvssAMA5557Lh/5yEcGexsjPkBuueUW7rjjDgDOOOMMABYvXkxjYyOAV1a1i73kkkv8xNLEeeaZZ5g0yZWq/8IXvgDA+973PgAeeeQR31e1tbUAXHfddRxzzDFAcUETIDMTJiOI/ZGPqKQWIo6RfGSmPz7zmc8A8PDDDwO5RXjChAksXOjKtUvujhs3jvb2dsApKQCf/vSnAceUbQKrOuL9Ucy6eOmll/KHP/wBgP/85z+AazPACSec4BVz6QJ/+MMfeOKJJ4Ac2zxjhquY/c53vpP//u//zrt+b2/vQPtmVMeH7rupqcmvoYKU1ZqaGq90anxUVFR4YkiQntLS0uK/K8W/mKLWB0asP4ptKB544AHA6RFPPvkkAPX19QBMmTIFgOXLl/vzxbgDnlmeNm0agJ9T48eP52tf+xrAYHSzov0RfVIjIiIiIiIiIiIyh2FnUovtQqdOnQrkdrcNDQ3ugtZSWVkJ5HZw5eXl3vQvyDyx1VZbeQ2+6A32b44Y8V3dT3/6U15//XUAdtllFwC23nprf7ympgbI7eZ7e3u9z8e6dS5X/3777cfkyZMBxwoAzJ07F4Curi7f34sWLfLHxKp+9rOf7e/2MsOCZASxP/IRmdRCxDGSj0z0x6WXXsrFF18MwJw5c4DcmrF69WrPFrW1tQHOzL3FFlsAsHTp0rxjYpgGiRHvj5DV/OUvfwk4VwcxoVpXZaFbuHChXxe0jtx0001sueWWQI5N1Br8+uuv88lPfhKA73znOxt7/6MyPhS7ceGFFwKOBZRPadqML4YUcmb8jo4Or6uoPzROKioq/HfEtv7qV7/aYDxJglHpjyuvvBLI9Udvb6/Xu6Q/SBdZunQpM2fOBHJj4Nlnn/UMquZSV1cX4HQt6SqKi5E1Awank0UmNSIiIiIiIiIiInPYlOj+DaKYr0pTU5NnUqWti+nbaaedvL+qNO2pU6d6DX7BggVAvi/R448/DsDee++d97uwyZGZQ46nnnrK+502NzcDbpemoKiqqiogtyOrr6/3Oz45Hnd3d7N27VrA+bNCrh8ht6OR03dNTY33Q4rYvBD6n2lMWGvp7OwEcn5Cet/V1eX9ijSHpkyZ4udX2k9rxYoVnvnfc889h68hERFDiLvvvtvLRMnDiRMnAk7Gag4o80lVVZWfA5LFkq2PPfYY++yzz8jd/CYiXPOuv/56wPkNav1QsK3ez5w50zOuWjd32GEHLzPUL1qbtthiC+6+++7hbsaQ4qCDDgJycR133XVXATMq1jSEfE07Ojr8eBLzKp/MSZMm+Zgasatf//rX+e1vfzsMLRkaXHDBBUBO7+rp6fHjRkynYlsmT57s+0iBhjNnzvRWXI0PjSdrrbf0av155JFHeNOb3jTo+82WFhcRERERERERERHBMDGpxZjMAw88EID58+cXpDQQ61dbW+uPvfrqq4BjT8U+Kk2ENPTly5dz5JFH5v3WihUr/Ou0lj/aqKmp8dFyatOSJUu874bYVe1w6urq/GfqlylTphS0R7vj9evXe0ZN5yxevNh/dxPyl2UO/bUlPCYmRX1QVVW1WbQf8tv+oQ99CIDXXnvNfyYmQH2wdOlSvyvWdydPnuxZAfke7bvvvgAcf/zx/O53vwPgiiuuGKZWDA7p578p1pPNaV6MFObPnw/An//8Zz71qU8B2ZGz69at80yQ5KGY1Lq6urz1BpxFTnNA//X9hx9+uKSYVIBVq1YBOYtcTU2Nnx9ikUPmS5HcynBQVlbmmUWtofpfVlbmrSvy892IXNyjAt27fGm/+MUvel/ls846C8hZkcSwQr5/quSmxoV8MufNm+etTBo73/ve94ahFUODzs5On2pM8q6np8f7KKfncE9Pj+8T6WTTpk3zPtsaV0JXV5e3Ruj6f/rTnzyTOhgZOyxKangj5513HpCbMFtvvbWnzEWh68EvXLjQDx4Jl8bGRn88zE0GsO222/qgKzl9f+xjH+MXv/gFkB2hKXOAtdYr2qLOt912W99WtV1YvHix7yOZX5577jmfPkRuE5ocbW1tXvBqEM2YMcMrK8qhusceewxtA0cB4RiTO4NSk33/+98HnLvExz72sZG/uRFCV1eXd3hX7uDnn3/eCwn91zzYbbfdvMDW5qe1tdULY7nTaBFva2vz+SWzhrSwC5XUe+65B8ilaJs9e7Zvt+afUsDtsssuBddqaWnxbkeSOVqU3vrWtw5xS0YO2sxWV1fz97//HYDTTz8dyOXP3FD7rrrqKgCfouizn/0s9957L5BLcD7akKkechs1PeOtttrKzxnNi6qqKh/sIbkp3H///XziE58Y9nseSijYS8+7srLSr6FStmS+X79+fUFqx/nz5/vj6g/NH2utv5bWk0MOOWQ4m7PJ0HMO11cpp6HZHvLTLElPqaio8J9rPOn8lpYWzjzzTCDnTqB1OYt44IEH/FjXWGhra/NyUWNGG5Gamhqvq2ijV1NTk+dCBuTpNWkXkdtvv51vf/vbg77naO6PiIiIiIiIiIjIHIadSX3wwQcBxxjqmHYoMrNJoy8vL/fHZGJ59dVX/W5HlaeULqS9vd3T1HLkfeaZZ4ajSZsEJeefNm2a38WL/Vu7dq1PQxUGQIFLzaVdrpyRJ0+ezJIlSwB8dS4xo6tXr/aMssxx2267re8vVcTYHJjUEKqKIrOE+uyll17iZz/7GZDrv9mzZ3PccccBORcU7RBLDWH6OKU8qampKbBQhGYdMQHaMVdUVPhdscamqpVNnDjRz7msoT8Tve5f7OeYMWM8u6Zqbkrttu2223LdddcB8OMf/xhw1VM0XsQUiCU58MADfT+VGkLTnNyOxKJ/9KMfBdw4kkzVuIBcfyuVkb73j3/8g5NOOml4b3yAEOsnKwHkmC+1qb29vSCl4aJFi/xcEfSMX3755WG73+GCWG49s9AFRv0hZrCsrMz3h6wGXV1dnn1Uv6g/jDF+zj300ENA9pnUYhATKtZZsqKuri4vYApcn0mmSheRztLS0lJS7b/55pvz5jW4eS4dIbRqgxtDGj+y0kJuPIiVlf4FORZW3wtd0AaDyKRGRERERERERERkDsOagqqnp8f7M8g/rr6+3mvk0uj1v7q62jM8YXCVAjnkzK3dzNy5cz0Lpp39ypUrvW9dmCh/NCGn4UceecT7uqlM3VFHHeV3IXJ432uvvQDHLIe7OXA7GyX7V59qR1tbW+sZ2htvvBGAD3/4w95Rer/99huuJo4aVq1a5ftUSYpV0rC6utr7+4oZW7lypWde5bssZvld73qX7/tSg5g+Y0yf/mS1tbX+mPxOu7u7/Y43XRpyU/yIhhtpBjX0P1chC50TBtAp2EPsx1/+8hefvk5yZcaMGX5Oqm/EHJQqiwo5eQG5BOdihCRvH3zwQd9vkqldXV0+OGbXXXcFcv7L06ZNK0hdNloQ67l+/fqC8aG1o6KiwsvUcMykmbJSft5Ky5gOKoScn6WOhX2gz6y1Xmao/Zo/VVVVflxo3SkVhIHUGsdiUvXcq6urvUVO7Crk5oL+63z5YpYKJP9CVFZWcv/99wM5RlRrQEdHh19DZaEYN26c19nU/qeeegpwlmGttWLy6+vrvR4YMq4DxbAqqfPnz/cNk5Do6uryD1omBw2e7u5u/5kiDjs7O72pRiYqLbTjx4/335VyG1aHyIqSevzxx/v/GiR//etfAWeyf9vb3gbklApVaNhtt91826XYr1mzxl9DAkeLz9SpU70LgBaf888/P/PRl2kMJNpaz72urs73nz5T5oTvfve7viKGgs0mTZrkTeM6T1GLX//61/nLX/4ypG0ZThSrFldTU+MVq2L9J+Ea5sXTeRI8OqeUEI4ZLS5aYNeuXevdXxQwdcIJJwDOXK15pMCRqqqqAuVECnwpoliWE7lhqZ1q35QpU/xnGg8dHR1enmgDIJOeXGeyAN1TT0+PHwOSn1pXxo4d602Ukps9PT1+IVbQi84ROVBK0AZCsNb6HJ5qXygbNP6lzFZWVvr5pLGjNSfMuar+LhWEVSzlxqTPpDN0d3f7sRPOl3RlKo2L0NUla9mEiqG1tbWgqmdra6vXEdQu6W0TJ07066XcqLq6uvIUUMjpX0uXLvV9KWW1ra2N5557DoCDDz54o+85mvsjIiIiIiIiIiIyh2FlUhXEAzmWsLW11bOq2t1Ko29vb/e7W2n0bW1tnnkVg6qdSktLi9/xyqTd09PjtfawClVWoB2Lgpg+9alP+R2sdrkvvPAC4PJV6nx9Nn36dE+Z/+tf/wJyLOHLL7/sd4jf+ta38n6vVGCt9f0R5vKD/N2/mOjf//73PPLII4ALeIGcKXPs2LF+XGh3d8ghh3hWSGNH41HMaqkgzOMXsqra1YotVR3ujo4OvxtWH3R3d/t5pevpWCkhHBuyOshhf5tttvFj6qWXXgJygZzNzc1+/iggsbe311tyZAbOagDZQJBm1F9++WXvWqSxIeakrKysILdwe3u7Z1XDNFY6PyvQHF+6dKnPGyw5K6Z47dq1vg2SDTU1NTz77LMAvPOd7wRcqp7wmqUEyc1wfX33u98N4NOz6RlXV1f78SH599JLL3lZoOd+wAEHAM7qpGcepmsqBYTyUuNBn8m83d3d7ftPLHxFRYXXR3S+xksxtjXLTOprr71WIA/a2tr8c1aubLHCK1as8LqbdIn169d78736SPOkrq7Ou9NIfnR3d/sqZZFJjYiIiIiIiIiI2CwwrEzqc88953dd8ml5/fXX2W233YDcjkO7ms7OTq99i93o7u72x6XdawcXMkNy3i8vL/f+Vu9///uHsXUbj9D/T22vqKjwjJ5YGzFbDz30EO973/uAHBM9d+5cvwuW87eYgblz5/o+CtNZlYKvTMiWpu8z3PlpHCkI7B//+IdnRL7+9a8DOYakoaHB+xkKc+fO9WNLDKrOX716deaC7vpD2C8aAy0tLcyePRvI7fp1bMWKFd5Sod1uRUWFv07ailFKCPtCwZQaR6Ef/O233w7ArbfeCrj2azyo3d3d3f56mndZCQ4aDNJs55///Gfvl6ZxoPkXyqgwgEoyWGNJvqlhAZHRRhgUsssuuwC5VGNaV8Lk9WKP6urq/HExyyoSM2/ePM8WSU5kHWK5tAa8+OKLXH/99QDeyigf1bBmvSwPWn8gx7iqWtPJJ5/sWcdS810PmU6lUhMUSLls2bI8XUKQniE5or4NA6dCpjarWLRokb9PBc9++tOf5je/+U3eZ5KJ1dXVfgzoGOTaLRmhsXDSSSd5q4yKGFVWVvrg5sEgMqkRERERERERERGZw7Cq/osWLSrqXygmVDtUaephMv/Qry4daatzOjo6/DWk+dfW1vLiiy8OW5uGCvI/bWho8H0kvw4VMnjyySf5yU9+AuT8hZ599lm/U9ZuUMxAT0+P3wWLEQiPZwX9Re93dXV59kpshpjmqqoqn1rrb3/7G+CitMU2q768/MkaGxs9yyPWeeXKlZ5Z1nXV/1dddZUvEznUTOpg68N3d3cX7NA1X8J5cdlllwEuxYeiU8V2hf5Daruuod+AwjQrYdnVkcaG+itMUdfXeWFmDLXp1FNPBXJs0b333uvHmyJVy8vLfXJr+Z6F6WiyiL76q7e3t2D+X3PNNZ4tUh/114+QmysqfSoGdsWKFd6PbbQhn2LIWQXkexvWng/ZQ8j1AeQyyIiJfeKJJ3whCFkosoyOjg6/dortq6ys9Ouj+kPH1q9f7+d4mGVH67U+K1Z7PV0AoZQgmady7SoLLJkZIpS/8tcXE11qbPK6deu8v72sIz/4wQ98kRMxnpKF4VjQmFm+fLm/htZoWa8PPPBAP/60RodZhwaDYVVSX3jhhaLCMz0B0qanEL29vX5B1WDR9yoqKgqCsKqqqvzCkmXogTc2NvrXotNFl8stAnJmmmOPPdYLYNXMVh9PnDjRD5osmx5CIZoeH11dXX4caBLJbPDss8/yqU99Ku8aTz/9NP/85z+BXFCAnLONMV5J1f99993XKzhS3iRojjzyyMyZ+cPnWEw5veaaawBnwgU48cQT/SZN7ZOSUlZW5seaTJft7e151WTC7y1YsMCnH8kSenp6/LgpNs6VRkxm/4ULF3rTrtKiSF6Ul5f7hVvjoqenxwcJhKbPLKMv5TJUUJVH+NVXX/XV1jSmNOfCCkRCmK/5yCOPBHKb7CeffDIzSqoUzPC1xnIoF7X+qG/C4DnlzVS+5LKyMp+eqhSwYMGCgvVSCgXklLCddtoJcGNe4z7c+Gnca3Oi5z158uSCdEwrVqzw8yrLCGWFZIP6QXIu3MCEwVL6PCTIoHSCTLURC4msMH+u3OK0Lii9WG9vr5ctanNVVZU/ruB4KbV77rmnlwef//zn/fna6A0G2aLYIiIiIiIiIiIiIhhmJvWZZ57JC14QZF4LE4qD28Fpt1OMgU3v+GpqajxDEu4KxEiq+lI6eGa0UIztmDRpUkF1E5kS1q9f782O6qvnnnuuIB2M+qyysrLojnZjTczDjTCoK6wrD26nKid1MeJKn/LTn/7UO+0rJdDixYt57LHHALeLg1yqjMmTJ/uxoACK6upqzyzMmjULyPXftGnTCuq+DxXCZ5BOwh+O9TCARf/TVY+EK6+8kq997WuAY9jBpY9JF7gQi9zd3V1gJof8JN6QexbPPffcqDGp4f2lA//CgAbJFaUku/XWW73ZV+2ZOnWq3/lfe+21QM49aPHixX7OiEXo7Oz0DJL6XoEnSm2UdUhGVFVV+dcaK3vuuafvX1ltwnmYTuReUVHhrQ2qLKPzr7nmGk488cThbs6AIEY8rGojBknPOLTMaRyFwZpiTSVDli9fXlIm3aVLl/rnp3ZutdVW3tqkY2LTQtY8TFml/tDYue666wDHOKr4icbAggULSoJJDaH0jWIHZZ086KCD/Dk6FjLHaZeo3//+98yZMwfIdmCyUlhOmTLFy/vQyiKmXNZZ9UdZWZkfF6G1U59pvmitee211wrSTFVXV3vGWevxxoyXyKRGRERERERERERkDsPKpC5ZssTvakMfDmny2s1pt1ZTU+N3f9LMgYKdvY6FPof6XrjrkR9nVpjUYhg7dqzvG7VPLI+11vtyhOyzdjRpf7n169cPqjbucEOslPyhxFYuW7bMs13y/znwwAM9K/bd734XyO1uv/SlL3lGQIn7ly1b5v3Hdt99dyDXV1VVVd5XRp+FLIFqfeuc3t5ez7jtscceQ9b+ED09Pf2m2OqP9ZZl4PLLLwfgpptu8qlT5s2bB+Snj0qz1CtWrCjw5QxZJI07vX/iiSd4xzvesbFNHBKEu/10fzU3N/OnP/0JKEzWXl9f7xly7dpfeeUVz7Jr568AgYkTJ/ogIvVddXW1Z/vFKCi9UbHnlyVI/oWyQWWDZYVoaGjw/ZBmz0MmVeMnTNqu+SFfvhUrVmQmxZ2ed319vWfF00GBocVN472qqsr7sGotCv04S4lJXbZsWQFTNm7cOC9TxRCnLTZp6Boa/wpG3X777T2TKoS+wKWCG264AciNC839Z5991s8TWTRDyDc1TO9VCtB9hhbtkM1UARxZHrQm9vT0+LVTc6q1tdVbGjU3JEcefvhhPvCBD+T9dm9vr5cR8vmWb/tAMKxKali9JKxUogccmlvATRgJlTCYIy1owu+F9WchXzjLWT7L6Onp8YtAOjCst7fXC1L1Y2gql/IXVn9JBz2MNl577TUf2adJIReGPffc0y8Kd955J+DM1cpuoNxtP/3pT/21NCkkLMINiCaifmfixIl+sdH4mzBhQkE2Bb1vbm4ethrtG7uQ63k//fTT3tSsMa42H3LIIQU1lydMmFAQECZUVlb6+aE5FwZTpe8trBg33EgrRqEpSsqHMjvcfffdBcpYmKtTi4uuOWPGDG/ukkw47LDDAOeSpPPD3MzpCGmNlbvvvtsrfaOBsCJbqGiEeZdDnHDCCX4OKMPFo48+mpcxA3Lzo1iO2OXLl/sxp6h3jbeWlhZf8U1ViUYLmrtTp05l/vz5QG4chRs2KV5aY9ra2vxzTs+dqVOnehlVCmhtbWXhwoVAbiOxbt26gqpB4RqTnnvl5eV58hLchhVcpTb1qcah3CyyjlC+SVnafvvtgdx4rqur82NBMqaurq7f3NFygRGxkcWNbEiEpd0LIbf5TOc8Li8vz6s8B/l6V9pV7PHHH/ffTecjhsFVcIvm/oiIiIiIiIiIiMxhWJnUMJWFdqaTJ08uoNi1s21vb/e7OVHLYZUDHZO2v2bNGr8TEotWVlbmd4syj44m87EhVFZW5jHJIXp6evwuRDvftra2AjP/hiqiDDZH56ZAz7a2ttabjBWkoeff1NTkzQw6NmbMGM+86hrKZbdmzRrfRu3SVq5c6Xe+2i1qrG2xxRYFFclWrlzpq0qlqy+tW7du2JhU7ayXLVvGd77zHSB/1wkwffp03y7dx9ixY9l3330BOOKII4Bcf9x77715QVHgWESZcnUt9ffUqVM9Q6sx0dzc7F+nd9FhBZ/hRrH68uDYU5nmNR4aGxsLdulqf3Nzs2+vnuv69et9hRSxw0prts8++/h2qt+6u7v9b+m+xM7fddddwyZPQmY0bY4t5p5RDAo2/OhHPwo4a4IY6N///veAS1cmRvmZZ54BctaY8ePH+/kjObrNNtt4y4VYM7FHr7zyimepR5tJFVu4dOlS3w8KCAkDM0PLE7gxlK72d//99wNu7KiPSgEh46cxs3jxYt+udMBUXwGKYsgkb/XcFy1a5PtKZn/J7qwitOKCS1Enc7X6K7SYaKyHVjudp/EkNDY2cvPNNwM5JjVrLCrk1pPm5mbfD7JoQq6tYQUtcPInbeGFvlNxPf30015myfrS1NTkZassOBuDyKRGRERERERERERkDsPCpGpHW15eXrADD2tgpyuhhO/DmtJp537tBKqrq30lDNUdbmho8Jq/2JisIKyLrfZ1dXX5nVfa4T3cuehYd3d3QSqiMMl72n9kzJgxo5KCKvT30v2l29fd3e3Td8hX5eWXX/Y7MZ33lre8BXDMnnxnxB6XlZUV1FrW//b29rzUM+BYljTDqF1gfX19XqWu4cDFF1/s58SnP/1pIMeoLlmyxDusi9WcMmWKb59YZ7GBlZWVPpBMbEFnZ6d/3tr1i+no6OjwO2AxaWEBjfTzGcmCEPIL/dWvfgXkrCAVFRWe/dG8b29vL0gjpPctLS1+7KlPWltbfZ+IKVCaqrvuuos3v/nNQH4xAzFI+m1df1MqpwwU/VWIs9b656mAlQcffNAXc1A6tjPOOAOAb33rW/zwhz8E4Ec/+hHgxruqtKlgyKWXXgq4+SdW6TOf+Qzgno2YUwU/yoI1derUPoNvRhrqtwMOOCAv8APyCzWk/Z5D+aj5IVb4jjvu8L7KpYAVK1b48R8GJvdnZVP7ZVnq7OwsWIN0rTVr1vjXkg8jaXEZDMLAP4Crr77aj19ZpUKLbDoYatKkSf48WeY0R7bffnsvu7ISQFgMoS+onpfk3h/+8IeCyqCSnWGcUJgeNExXBuRZOGWFUFL/lStX+vE0mLESmdSIiIiIiIiIiIjMYVioErFcra2tBZr2lClTfFolRQ6GZefSrF8YSSZtXLuYRYsW+V28ds7z58/3u4KwlnPWoOjTrq6ugght7chqamr8ziZkK9J9pP4oKyvLS/oPeH/GkYai9evr631qKEXO6vk3NjYyffp0AF+O9OCDD/Z+hiEbLKgfwjGh5x2mLRN0DfncHHvssXl1iUNUV1f3y2JtCuRXuWTJEs/6v/TSS0DON2jcuHH+eWtMVFRUeCuEdvjazZeXl/u+0ZwLx4z6Uexz6G8bzg0xu+o/sYYjVQ5y1apVfOMb3wByc1xpYLq7u337Q1/29O4+RJguCvKj32XlEWM+adIk/2xklenp6fG+8GIMxE4tWbLEj6WhLokYzuu7774byD1zpRh7/fXXPZOqvpo6dSrvfOc7gVzSdd3vV7/6VX7yk58AsN9++wGOWVcKN7H0it5ubW31Y0oMbF1dnX8eskxovv7973/PTFlU+cYCnHvuuQAFxStCORpmktFYkc+cijaotGOpoKmpyVtQNN/Ly8v9PEkX+Fi/fn3BetLV1VVgzQqjuHVMv5PldTaE2v7KK6/4Z6/5JYtU6H+t/6G80XzR+3nz5nkLlwqFyIqRJYRxCnp+sqbdfPPNXhcLC3hAfllUfW/y5Ml+7ZLuoXPGjx/vrWEaY+E1BpPObViUVN3ImDFjCswt2267bUE1l/REgHyKXtdQo9Ux48aN8wJVx1pbW70SEtbhzRpCB+K0kAj7ITTHgpscmiDpHI7d3d2+b2SeGC0lVRWhLrzwQp+2RkJNVYxqa2vzqliAU8CkcGniSEmprq72fSNlo7q62i/I6WNjxozx40KLa6jUChp/HR0dXpANdQWVO+64A3AmFvWHlHWljFm5cmVBKrXq6mq/2KhdYc5X9VHYpnSOSClTO+20k98U6Hvjx4/35+u/lKDKysqiG4Whgsb21772Nd8HguZ8a2trgTm5tbXVtzcdJNXT01OQT7mnp8f3RdoU19vb69urBWvatGl5gTaQ2zS0tbVx8cUXA/Dtb397kC0vDgX7fO5zn/NjUvNCi+Nuu+3G3nvvnXdsxowZftH48pe/DOTSt40dO9bf+9NPP+1/S3JCfSsFdvLkyf6Za3Pz8ssvexeT/fffP+/769evZ/bs2UPS/qGEFKf+ZGsYHBSaNwEfXBm6p5UCwtzTmhvV1dUFKYOEsMpduInta7NeUVFRkKdb4yTrkFl+6dKl3vwtHeGhhx4CHPGl8xRc1dHR4eWL+lRzddGiRd6FSC4xWVRS5RpUWVnpZbnGwuOPP+6Pa5yErgvpQENjjFdw1Wads2LFCk+iSA+rqqryY6sYkbQhRHN/RERERERERERE5jAsTGpoKtMuTcxhR0eH3+mF1Q+ENONRXV2dV20JckxSRUVFgYkccqxP1hyYw129dhu1tbUFzulCRUVFv32l9hUzfYqRGy3IBHjFFVd41wbVBRYDVVdX54MS9D8MehAjH5oUtCPTTm7hwoW+39TmkEHQLl/92NjYWLCbU/+3t7dz0kknbXrji+Dss88GXOUWBQWJ4VTwSnt7e16SdHBjXW4S6VQvlZWVvm90rerqas8OTJw4EcixgOXl5X4cqc3Nzc0Flal0rblz53oz0XAwqd/61rcA95z17PTMtctfvXp1QbGBysrKAjN8aF3ReWHatjQzqfYUC8xqaGjwrLIYZ423yspK/7yGGmElH/WDGBwxe08++aQv7iB0dXXlJeOH/HR06g8xQ3V1db4/NLYefvhhwPWHmFFdc8stt/TnS27JevPcc88Nm4vMpqBYUJSgdoVjR+cVOz/LATFpNDU1+bGjORVarNLFG6qqqgr6I6zKlw7S1W9ATs6WStUl3fecOXP8PJHc0LGWlhbPpIpt3Xfffbn99tuBnNuN1ommpiY/R7/4xS8OdxMGDbWlqqqqQEY8++yzXHPNNUCOFZe8WbVqlU/Bpms0NDR4dylV8pPFdt999/WWwrPOOgtw80fyczBBltmTLhEREREREREREW94DGsKqqqqKr+DC9kdBSqIuQgTV6fZRGNM3g4PCtPOQK4E3C233OL9CdOBMVmCWLGqqqoCJkI7987OTt8fanMx1kK7wa6urn6DiEYLYlX1P/TZ0S5caSuampr8Lk67upAZFfNzzjnnAPk7fTGGYr8aGxt9AJmY2nXr1vlrhLWIdc5wldLVczvooIM46KCDgNwzkm/qkiVLvC+xLA/r16/3/aZnqzERJn0XMzh+/Hhf/lKM369//WsALrnkEs+u6nuVlZUF5Ym1S16+fHlB+pahhNK+zJ8/3/sp65mEzvoa32F5Pd1XmHoL8oM+NG5Cxll9GKbbSvvdrl+/3l9Xvo3hM5J/pp7jUOHEE0/0/xXI8a9//QvI+X5VVFR4FlNtNsYU+K4LNTU13t8stK6o7+VjquDGV155hQsvvDDvnJUrV3qmSSVWNcdWr17t+0PBVVmAnqnGgmRq+Ly1JoUWKJ0f9tVopPAbLC6//PK8oFyAT37yk35N1jwIY0XUvrS/arHP1q5d69OdiTErhfLj4FJPQX5pcUHWo0WLFnl2UPrDypUrOfTQQ4HcWAnHjhjGBx98EIDjjz9+WO5/UyBZUVtb6610oS6hlHRDCcnTrq4uv2YNRicbFiVVClhoRpFzsTHGB8Jsu+22QM6k1dHR4RcfKRIrV6705l8tpmH9cS0i73//+wGnpKZNgFmEBEhtba0f+BpIYUCZHmpYNSpdYUn/y8vLvcBQ/2Ud2lzo/1BDyuxoIxT2mhMa67NmzfL/lbsuhISKxkCYd3YggR1vf/vbAafASgGVEtbb25tXzQjyXWek+A8HTj75ZMBtXKV4afwqd2xtba2f4xJ6EydO9Pk6pcCrPQ0NDV6hCquoaBOkqHSd//jjj/tAJAUWTZs2zcsYmbe1KIUV1IYTqi6m/yE0HqR8NjU1eSWkGGTml9K5ISj7hORMGPGswDuNu+nTp2cycCqNUH6Gm50NnQ+5hTVNoGQRW265ZUGu556eHt+edLaDcK4L5eXlBS4OoUvUW9/61uG5+WHGk08+Cbh5ECqgkBvrc+bM8QqpzP4vvviiX5+kzOr7TU1NXrf5f//v/wHZVFKlU1hr/bOUXgW5NUXjIk1c9IX0JrC3t9fPkzDrR9q9aKPufaO/ERERERERERERETHMGNY8qQ0NDT6ISvWup02b5k2vadN0aLoNA13SDFLIQkrTP/zww/13w/Q1WUdZWZlvf7rSTzHzS3d3d0F1iDAdjFIulcKu/42ETQku2dRUajLRDldQ2GChsXrCCScUHJPpe6jwiU98YkivN5pI53Ecaih9VSmjLwtDWVlZQU5UY0y/+VRLCT09PQUBXkuWLClw85E8ClnTkG0W0kzarFmzCs4L3dKyCK2vWicrKio8+ykXFVlmli5dWlDNTuZ/yDGputZWW23lx5pY2fnz52cmd3AaZWVlXr8IrWR6lsXyThebC+lAQ30vdMGU5aaqqqro8QHf80Z/IyIiIiIiIiIiImKYMSxMaphMWFr4XnvtBbja16puIj8PObIbYzzLGrKm6RRU8ilqa2vz/llKFD958mS/K84ykxoGl6WrSmnX0dPTU8DAdXV1FfgJybekra3N91tYLEAotlOOiIiI2Nwgn0HJurDgR3odqaioKKhVPxjGJwsoJttnzZqVt8ZCjiUMWdfQcqc1KB3oUlZWVvAbWU/N9ZGPfATIJeDv6OjwrKdSSokNbWlp8angpFs0NjZ6/1QFNCr5fwhZNj772c/ypz/9aTiaMmjomYWFCULdIpwLfX13IAjHkOZcZ2enjyeQH/3GIDKpERERERERERERmcOwMKnahYZpUV5++WUArrzySh9hq4heMZ4dHR0+M4C092233dZr5+HOBpym/pa3vCXvtzs7O/2uMazlnDXMmTMHcBHF6VKY2pmGTLSY166uLu8Pk66tvmrVKu97NNBI3oiIiIjNAVp3Kisrec973gPAjTfeCOT8BcvLy4smqpffolKhhVkVirFLWUXoPyhWeM2aNZ4pU0YRWdrq6uoKIv9DtjTNkra3t/t1Wz6NWfffVZYP+Zbus88+3H333QAFUf7d3d3ccMMNQC66v7u7m89+9rMA/pjSz7W0tHDMMccAcP755wO5lH9ZgjJwhJktlPUDho4ND9lZpROcOXOmH09hRoGBwmzCAOvzi6LVv/vd7/o8lYcddhjgcjUOJy688ELfUXIx6CMlxFDbvAfdkTIvKNWO0jS0tbV55VQCp6enx7s2SFlXAMqkSZO8kB0EMtMfGUHsj3wMh49I7JN8xP7Ix0b1RzF3Jq1F9913H+Dy3T766KNALgXiAQcc4BVWBeyJCOju7t4UJXXE+yN0ZxDOP/98n8s2rDQHTqmQciqFrbu7u6ibBLhAoSuuuCLv+sWCtfpAJubL/PnzC6ryXX755YDbnKSDnv77v//buwwor/cpp5zijyuft5S+jVD4MtEfkBlXwKI/Hs39ERERERERERERmcOmMKkRERERERERERERw4LIpEZERERERERERGQOUUmNiIiIiIiIiIjIHKKSGhERERERERERkTlEJTUiIiIiIiIiIiJziEpqRERERERERERE5hCV1IiIiIiIiIiIiMwhKqkRERERERERERGZw4goqcaYecaYI/o4drAx5qWRuI+IiFKHMeZMY8x9/Ry/zRjzwZG8p4jsII6PiIj+kZ4jxhhrjIl1xDOKfpVUY0xL8NdrjGkP3p8+FDdgrb3XWrvjBu6jqJJrjDnNGHONMWabZKCNepHlkeizzRnJs1afrTHG3GqMmTHa9zXSMMYcZIx5wBiz1hiz2hhzvzHmTRv6nrX2WGvtb/q5br9KTFYQjINmY0xT0hdnGWOi9Yc4PorBGPM+Y8yjiexYkijkB23iNe8yxnxkqO5xOPFGnDOp9WKZMebXxpi60b6vUkEprLf9Dl5rbZ3+gAXACcFnvxvumxuA0vl24K/DfR8bg4H2WUYU6lG/hz5wQtJ/WwDLgJ+M8v2MKIwx9cAtuHZPALYELgTWb+J1s/q8+8IJ1tpxwEzgu8B5wOXFTjTGDLhgdqkjjo9CGGM+B/wQ+DYwFdga+Blw4ije1mjgjThntF7sDewLnD/K99MvMjjPMr3eDtkOyxgzyRhzS7KDW22MuTe1g9vTGPN0svP/vTGmJvneocaYRcF15hljzjPGPA20GmOuxQmcmxNt/wvJeWXAkcDtwD3J15uScw40xpQZY843xsw3xiw3xlxljGlIvivm9WPGmMXJrvt/hqov+uifQ40xi5K2LQWuNMZUG2N+mNzD4uR1dXJ+AaNhArOEMeY4Y8zzya759fD+jTHHG2OeDHbTuwfH0v2btQnjYa3tAG4AdgEwxrzdGPOEMWadMWahMebr4fnGmA8kz3uVMeYC04+bScaxA4C19lprbY+1tt1a+3dr7dM6wRjzvWTn+5ox5tjgc8/8JGPofmPMD4wxq4DfAz8HDkzmSdPINmtwsNautdbeBJwCfNAYMydhTC41xvzVGNMKHGaMmW6M+aMxZkXSL5/WNYwx+xnHsq1LGJdLks9rjDFXJ2OmyRjziDFm6ig1daCI4yNAIte/AXzSWnujtbbVWttlrb3ZWvv5DcjZ8catWyuS/rrFGLNVcuwi4GDgp0l//HT0WrlxeCPOGWvt68BtwByTsqyaATLixpgG43SFFclacr5xukR10tY5wbmTjWMhpyTvS3rdzep6O5RmgHOBRcBk3E72y4ANjp8MHAPMAnYHzuznWqfhWNJGa+1p5DOSFyfn7AfMtdauBN6afNaYnPNgcv0zgcOAbYE6IC1kDgNmA0cB542AQjMNx3zMBD4GfAU4ANgT2APXpoHuAi8HPp7smucAdwAYY/YCrgA+DkwELgNuklBOEPZv96Y1afhgjKnFCdmHko9agQ8Ajbj7/4Qx5qTk3F1wzMnpuB1hA45hKkX8B+gxxvzGGHOsMWZ86vj+wEvAJOBi4HJjjOnjWvsDc3Fz8gzgLODBZJ40DsvdDxOstQ/jZMzByUfvAy4CxgEPADcDT+Ge++HAZ40xRyfn/gj4kbW2HtgOuD75/IO4sTIDN1/OAtqHvTGbhjg+8nEgUAP8qY/j/cnZMuBKnEzeGvfsfwpgrf0KcC/wqaQ/PjVM9z9seCPNGePM1McBazbhMj/BtW1b4BDcevMha+164Ebc2imcDNxtrV2+Oay7WV1vh1JJ7cLd7MxkF3uvtTZUUn9srV1srV2Nmxh79nOtH1trF1pr+xv4GzL1nw5cYq2da61tAb4EnJrawVyY7LqfwQmq04pdaAjRC3zNWrs+advpwDestcuttStwJrv3D/BaXcAuxph6a+0aa+3jyecfAy6z1v47YVl+gzMDHhB8dyD9O5r4c8LirMWx5f8HYK29y1r7jLW2N2GNrsUJEoD3ADdba++z1nYCXyV/k1QysNauAw7C3f8vgRXGmJsCtmK+tfaX1toe4De4edcXk7HYWvsTa213hp/3xmAxbqMH8Bdr7f3W2l5gN2CytfYb1tpOa+1cXN+dmpzbBWxvjJlkrW2x1j4UfD4R2D6ZL48l/Z9ZxPFRgInAyn4W/j7lrLV2lbX2j9baNmttM06BO6SP65QqNvc5o/XiPuBunMvHRsM494dTgS9Za5uttfOA75Nbk68h1zfgFP5rktelvO5mer0dlJJqjNnaBAFCycf/B7wC/N0YM9cY88XU15YGr9twzGZfWDiA2ziO/pXU6cD84P18oIJ8Yb0wdXz6AH53U7AiodSFYvc40Ht4N64P5htj7jbGHJh8PhM4NzE5NCWDb0bqugPp39HESQmLUwN8CrjbGDPNGLO/MebOxBSzFreDn5R8ZzpBu6y1bcCqEb7vIYO19gVr7ZnW2q1wTPl0nM8dBHMpaSf0PZ+y/qw3FlsCq5PXYdtmAtNT4/7L5Ob7f+HM5C8m5snjk89/C/wNuM44U/DFxpjKYW/FJiKOjzysAib1Y0LtU84aY2qNMZclZst1ONexRrP5+GvC5j9nTrLWNlprZ1prz2bwrO4koJLCsSKG8E6gNlmHtsERbWLvS3ndzfR6Oygl1Vq7wOYHCJHsPM611m4LvAP4nDHm8EHeV1ojz3tvjJmGYwce7+N8cLvHmcH7rYFunGOwMCN1fPFgbnYjkL7PYveoe2gFanUgaXPuQtY+Yq09EZgC/JmcKWYhcFEyafVXa629tp/7yCSSHemNQA+OOboGuAmYYa1twPnPyYy5BNhK3zXGjMHt9kse1toXgV/jlJGN/voG3pcMjIte3xLHmEB+WxYCr6XG/Thr7XEA1tqXrXMdmgL8L3CDMWZsYvW50Fq7C/Bm4HiciatkEMcHD+JYq5P6ON6fnD0X2BHY3zqztlzHJFdKsT883qBzpjX5Xxt8Nq3YiSmsxLHE6bHyOrj1CLfOnpb83ZKw77AZrLtZXW+HMnDqeGPM9onv01pcQ3uH6PLLcD4iwrHA7dZ6d4IVyW+F51wLnGOMmWVcSopvA79PmYQuSHbSuwIfwgUOjCSuBc43zgF7Eo4yvzo59hSwqzFmT+OCzL6uLxljqowxpxtjGqy1XcA6cn39S+CsZBdkjDFjjXOAHjdirRoiJPd/IjAeeAHnR7XaWtthjNkPZ24RbgBOMMa82RhTheuvvvzwMg1jzE7GmHNNLoBjBk4oPtT/NweEZcBWSR+VBIwx9QmLcx1wtXXuOWk8DDQbF5wwxhhTblywyJuSa5xhjJmcmDmbku/0GmMOM8bsljBn63CL1FDJrWFBHB/5sNauxcnO/2eMOSmR6ZXG+eteTP9ydhyOeWsyxkwAvpa6fHrtKQm8kedM4tLxOnBG0qYP43xqN/Q9KaEXGWPGGWNmAp8jN1bAKW6n4FxIrgk+L/l1N6vr7VD6pM4G/gm04Ha2P7PW3jlE1/4OTsg0GRfFnuePmlDNFwH3J+ccgHNi/i3OfPMa0AH8d+q6d+NcFP4FfM9a+/chut+B4lvAo8DTwDM4ZvhbANba/+AiVv8JvExuJyy8H5hnnInqLNykwVr7KPBRnPP/Glz7zhzmdgw1bjbOjWQd7rl+0Fr7HHA28A1jTDNuoRF7THL8v3FCeQluHC5nE9PyjBKacQEt/zYuCvch4Fkc67OpuAN4DlhqjFk5BNcbTtycPOuFuOCXS3CbyQIkC8zxOBPcazhW5Fc4h35wQZvPJePqR8CpiW/YNJzAXYcTzHfj5EaWEcdHCtba7+MUivNxpMVCnOnyz/QjZ3EuEmNw4+UhXLaYED8C3mNc5P+Ph7URQ4M4Zxw+CnweZ4LeFRckNhD8N46JnYtbc6/B6RIAWGv/nRyfjsskoM9Led3N9HprrM00A10A4/yOlgLbDtZZ2zh/kteASpvBKLuITUfCnjcBs621r43y7URERERERGyWGM71thQrUUwALhjlaMKIDMIYc0Ji6hsLfA/Hmswb3buKiIiIiIjYvDBS623JKanWpRG5dLTvIyKTOBEXELEY535yqi01U0FERERERET2MSLrbcmZ+yMiIiIiIiIiIjZ/lByTGhERERERERERsfkjKqkRERERERERERGZQ18VOgaCTfYT+OtfXRap4447rt/z1q5dC8A///lPAN797ncX3kzitmD6LFFdgKHO6bXJ/XHffS7L1LPPPgtAdXU15eWu8MkOO+wAQFtbG2vWuNLEBx10EIB/P23aNBobGwf78yPeH9bagufV2dnJ/Pmu4Edvr0u9t3q1K5aybt06urq68s7v7e2losINY11r7NixAMyaNYvKSlcIZdq0wlzO3d0usYO+n0LmxscoYzhy4G1yn/zgBz8AoLnZ5dS+5JJLOOAAV4nwXe96FwCvvvoqVVUu7afmyqRJrnDK2WefzZQpUwb785kZI33Jv9WrV/Ovf/0LgK22crm329ravJzYZ599Cq6zETI0jUz0R09Pj5ebaaxatYrf/e53AOy8884AvPjii7z++usAfPe73x3MT/aFTPRHW1sbc+fOBfDt7OnpAaC8vJzaWpfz/t///jcAb3/727nzTpc9cqeddgKgrMzxWQcccAA1NTWDvf9M9EcxXHuty7n/1FNPUVfnirPp/6pVq7wOctFFFwEwbtyQpD/NbH+MEor2x6b4pG7UF1999VUAvv/97/PYY48B8NprLlOBFozy8nL22GMPIKegvPDCC6xc6dL16V5nz54NOCHzne98B4CGhgb/PU2oDSBzA+RjH/sYgF9Udt55Z99vc+a4YjLjxo3zStUHPuCKfHR2dgJQU1PDm9/85sH+/Ij1R7EF9fbbXXrCBQsWsGDBAgCvrLa0uMq7vb29fvGR8tnV1eWvo8/0/MeNG8fee+8N5MbMtttuyzbbbFP0flL3NKrjo7XVFU259dZb/QJz//33A7DXXnsBbnzMmzcPwCvvb3rTm1i82BXTUZ9OnjwZgL333pupU13Fw7e//e0AA50rkDEl9dFHHwXg4IMPBuB973N5pqurq7n0UhdXee+99/pzJFeOPPJIAH71q18B8IlPfIJvf3tQpb5hlMaIZONAnt3ZZ5/N008/DcCECa58+8SJE+nocNWZtThv6PdKQab21y9SwM444wwvJw499FAAlixZ4ufW5z//+bz/eTdTYkTIN7/5TQCWL1/OqlWuYqU2J0uWLAGcDHnyyScB/P/f/e53/OQnP8k7X0rrJz/5Sf7+d5dO/IILLgByc3AAyMSau2jRIj8npKx/61subW5XVxe77bYbAFdddRXg2qw1t73dVVzV2Nl+++3ZZZddgBw5shHIRH9kCKOjpD744IMAfPjDHwZg3rx5fidWX18P5JisCRMmMHGiq6wlIdrY2OiVMC3WErYNDQ0cdthhgBtI4AbKAIV45gbIxz/+cQDfP2PHjvXCUzva/fbbzwuTPffcE8ArpmVlZey4446D/flh749iQl6LpJTxhQsXegEyZswYICdQGxsbvbLxyCOPADkhAznGdYsttvDf13XFOh933HH+9axZs/q8L0ZpfKit3/ve9wAYP348M2e6Kn1NTU1AjgHu7OzkiSeeABzLDPkLhhRXKabh9SVszznnnKIscxFkSkl9/vnnATj8cFd5WbLk9NNP92Ni+fLlgGNZ1S9XXnll3vcvv/xy3vve9w72NjIjQ1588UUAbrvN5ReXUtbV1eUtVpKjvb29Xvk45phjAHwfHH744X7DPwhkpj9+/vOfA3D99S7/uBTT3t5eHn74YSCnVFhr/UZOCscLL7wAwDvf+U6+/OUvA3g2fiMwKv2h8f+Rj3wEcOulLA163nfccQcAW2+9tZelUmQvvvhibrjhBiC37mhcHXHEEfzpT3/y1wW4+uqwIFO/GJX+eOYZV2xLltj169f78a/18rnnngMcQSRiY/z48YDb1IkwkZwRy7p48WKvb2i9Ouuss/zrDWDE+iPUiUIWPQ0xxm9605sAx8KLRFSfzZgxgx//2NW1UB8NEYr2R/RJjYiIiIiIiIiIyBw2xSe1AGlGqqWlxfvAiPFZsWKFf63d/2mnnQa4HYu+KzP+kUce6Xc7YlenT5/ubr6iwu+UP/QhV/nt+uuv3xgTZiYgX1Tt5uVT9+STT3oWLGyTdnH6rK2tDSjud5klpMfHwoULvSuH2PS99trL71pPPvlkAH9OTU0Nn/70pwE8u1heXu7Z9/XrXUU2sSaVlZV+F/jUU08Bro/FFIlJ1f1soj/ekODWW28Fcu4JY8eO9e3X/Yo17erq4tRTTwVyO/y5c+eydOlSAO9rtvXWWwOwbNkyP7bUxzfddJN3MykliBlIW4IuueQSdt99dyDng9nV1eVN+rJSiEUQw1RKEAsuk/Tzzz/vx7TY89DCsN9++wHw8ssvA84lQkyJZKquNXnyZC9f5WL0mc98xs+xLOOVV14B4LzzzvNzROxnyIKqr+Sf3NLS4uebsOWWWwLOxebEE08Ecn30tre9bbiaMCTQmNbcWLdunV+H1XZZZSZNmuQZVK0/zz77rJfHGh9inZctW+YtOZqDWUZzc7O3JEh+lpeXe6ZTblX77rsv4Hy0ZYXQ+rpq1Srvt64+0joRMqayUv3iF7/gM5/5zPA1aiNQzFJeTD+SZWnXXXcF4OijjwacBVJ9JEvlb3/7W2/hlXVb2AjXoAGjtLS5iIiIiIiIiIiINwSGlUl97bXXeOCBBwC45557AOf79I53vAPIBW+I1ejo6PBMxxlnnAE4ti29e5Fmf/nll3v/Q+0EVq5c6dmzQTi6jwrUR9qpKLq/q6vLs2Fh2/WZdrkKnikvL/cMQJag55DeYS1btszvxLTLra+v94zoJZdcAjgfGHC7VjGparO11l9XrPqnPvUpALbbbjt/LTGvLS0tnmksdp+jPVbEpMrXesqUKX68i/0QK1RZWekZYs2hyZMne+ZUPmP6XmNjox8zaufTTz+9oSwHmUaazZkyZQr/+c9/gFxwVWVlpfedUj+p/WKpSwmyPElWzpkzx88xRR1rjN92221+bm277baAY8XELmluvec97wEcSys2Vpauj370o9x4443D26ghgPwsV61a5S1QYhUlB6ZPn+5ZwZBd3H777YHcXNFcaGxs9NcQe5R1JlUMsea/tdYzftXV1UCOjW9sbPTrq9rZ2dnpz5NPv8ba+vXrPUsvWbJu3Tpvycka5s2b59lj/e/p6fH3Lnmg8dHc3OzZRMmWiooKz8xLFof+nJKfYltXrlzpr6d+HC1IzoXWwmJ6kXz7ZX1S0G0xXHbZZWy33XYAnH/++UAu8Gw4rNiRSY2IiIiIiIiIiMgchpQ6SbNQDQ0NvOUtbwFyfpN77LGH1+SXLVsG5KLG5s2b53e58oGqr6/315XvjI6dcMIJ/OMf/wByEe6rV6/2TGqpQJGFab+vjo4Oz4xoB7d27dqCna/6M4ssKuT849JM3eLFi/0YUM5CY4x//da3vhXIRRp+61vf4utf/zrg/M4ArrnmGs8K/PSnPwVy/lOtra3+mDBt2jTv06vME2JRJk+ePKrs+4oVK3x6LLEhZWVlPkeuWB7d49ixYwuikcMxELJB4BgSMQLC+PHjvS+VWLVSgFgOjS2xfyFrJMa5GOuRlkGlgrlz5/p26XlVV1d7+ar+EHt60UUXeV9NHevs7OTAAw/Mu27I/MhSIzk6f/58HyGt9DxZhNjj6upqn8lAskBWqra2Nu+zrHE/depUzwRqjoXphPQ6LUuyiiuuuALIMZ1dXV0+jZ/S+2n+vPrqq34d0f/Fixf785Qm8qijjvLHtCapT6+55hrOOuus4W3UINHa2lrgf2qMKcjUEDKN6it9Vl1d7eWLPhNj2NPT4+eVPuvo6PAsvawXo40woj99vz/5yU/83DniiCPyvhf6mIYWN2UW+uEPfwjkmNThwLAqqc8//7wPklq0aBHglCwtrDInyVG/qqrKU+YyLy1dupSTTjoJgD/84Q+AcwEAl4ZIZjxR+Zdddhnf//73i95PVqFFVIuClKiuri4vEBT0sHr1ap+GSSZvKa0SzFlC6MIhhDn79LxDhVvKlSaH0qGsXr3aK6nC008/7c37av9Xv/pVwLkHaPFROqJly5b54hEy2/3mN78BXKCWJqKCr0YSmiOQUxoWLlzo70VjXf87Ozvz0oIIEsAStqFAlXuFrjFjxgyvqJWSkipFSmNFSmdPT0/BghK6hEhA63xtBkoFCxcuLHB7Kisr8/2hdqbT9oWYNm2aH19pxauiosJ/N5QnpaCkrlixAnBzN72JkWxdvXq13wRLsZ84caLvN/Wj5lVbW5u/htadrEPriVIpzZkzh5tuugmAm2++Gcilorryyiu9290tt9wCOFkpuXnIIYcAOVeK448/3pMpSoWY5aC6devWFbibVVRU+I2HxniomGoN0DocBlppvoTjS2uX5G59fb0PTM2KkhrKwjRZJL0K4P3vf3/esa6uLt+uUJ/6xCc+AeT0NBVVOeecc/oletRvaTeE/hDN/REREREREREREZnDsERKaCdy3nnneVOqTCvf+c53PPMn06RSTK1cudKzbEqLE5pdZKJSyqbf/OY33lR+/PHHA7lUQ6UE7cTktCxmeeXKlZ7lUoqMn/3sZ75PFByg4LEsoqamxu8+r7nmGiCXZPpXv/qVD/IJy52KOVTCYLX9xhtv9Lt9BVC9//3v9+UvxfZ85StfAdzOWayCdsyPP/44J5xwApALsAoZxNFgUIUXX3zR7/ZlLqqvr/dsmJ63GLSxY8d6k5sc9Nva2vxxjZ0wXUravD1r1iy/61c/lwLSadjCZNV65mEaps0FL7/8sh+jYXqgNCMRBtfJxUPMYVjwJF1S2Frr50rIssoMnmUoEXl5eXkBY6NxMn78eM8iK1H9dttt5+VPOgAoDMzTvMo60tYmyKXnkhlfMq+2ttZbIcWITp8+3Vt1lL5MTOzb3/52v6aXAtrb2wtkhLW2gBGVtc8Y4+eJGMEwoFYyJUw9JVO51rKqqqrMWWhCC4tkg8bCvffe69dkVbEUwsCv0G1KbgHqNwVinnPOOb6vQveATXGji0xqRERERERERERE5jAsTKp257/61a8K6oiHO5t0Cc/Gxkbv9yMmaYcddvC7l5deegnIJTOfP3++Tzj90Y9+FHC7glJKqdPV1eV38fJf0Y52/vz5nm2Wb9AvfvGLAnZVu5S072dWIJ9itVPBbgceeKAvOaiAobFjx/pdqhgBBQXdcsstfPGLXwRyTvtTpkzh9NNPBwqDYIwxBal5Fi5c6JnD//u//wPgl7/8JeBSFv33f//3UDR5UFDqJMixwgcccIC/d7FZ2tH29vb615pnlZWVnmnXrlU752nTpnn2TT7Ou+yyS1G/xaxDPmRixTT2e3p6iu7W00mtN8YnKktYunSpZ5HF1nR3d3s5kU5ZV15e7p+/LDUVFRW+3yQrdX5nZ6efp2IO6+rqfH9nGUonNmbMGG+501wIfU5luVJsREVFhWfP0r7OTU1NfmzpWClCMlf9oT4wxvj1VeNk7dq1Xk6ItZeP7iOPPOKZ1FJI8dje3u7brLHe1tbm03OJKQyLYOg5y6IQ6hGSxRpr1dXVfi7pd1paWnz/jTbSJeLDgLHQ6qw1cGOh1I5h+jfpL2FBiGK/P1AMixYXBiVI2RQlftNNN/kcqHJmlzCsqanxUWNaOJubm/2gkSAR1fyLX/yCL3zhC0DOifumm27yVXVKIcq/qampIHpOQmPlypXeqV0Pfu3atd4dIFxYIGcCzRLa29u9AqX7++xnPwu4fLDalGgBXb58uVdA9T3hG9/4hhcq55xzjv9c7h967jJllZWV+b4N8/ylTZe/+MUvADehR1NJXbNmjW+flILQxCiFVP/DOsyac2PGjPELkIKjdK2qqiovOCSgTj31VC9kSwkKhEub9K21/rNiFXHSymqpuQSsXr3aC3ottM3NzQVKpJSLMGhM54SmSl1Li2pra6t/HQZjZWXR7Q9aHxoaGrw5V2Nb8qW1tdXLAsmZsWPH+n6QLFUfrV271o8ZKWpZRzHlUZ8pUFXHmpqaCuqvF5M56h8p/5CbX8VqwGcFnZ2dfvxrTPT09PjnrDbofU9Pjx8fxUguXUNzqaamxm8WNWZqamoKsqiMForlLf3b3/4G5NziampqfJCd9C65zmy55ZYF5vu1a9f6NVbzS24yxx9/PBdddBGQC0wuRp5tzAYnmvsjIiIiIiIiIiIyh2G1h2+11VbeHB+mt/jTn/4E5DTtX/3qV4Db1SmVgczAEyZM8PkylSpIpuG2tjbPKooR2XbbbX3wVSkwqatWrfLsmXYXet/T08O0adPyzl+4cKE/rh2wdoPa6WQJ1lpvhteOUyaTp59+2u/CxbTPmjXLvxaLvM8++wBw7bXX8uc//xnA5+UbM2aMrzaWrqYEheaFYubgU045BciZxEYLYTUxsaHl5eV+HOuzMHBK7dOO9oknnihIsaPddHV1dUHbFy1aVHK5QiHX3v6Y0DDwoVgNa6DP6mNZxapVq/z8EXOzfv16/1w1B0KmQq81HiorKz1zpPkn5qenp8f3rZhDa61nVrKMcP5LFqbz4o4dO9bLIcnR6upqz5pJlqoPOjo6fD9n2azdH7q6unxwlPpBzFd3d3eBu1hLS4u3eoltlkyRqxRkm0EVwry/YkHLysry3GEg92zDIESNgTC3qPoqdP3QefqstbV11JlUuY5deumlAFx33XVAcXk3ZswYnypU0FiQzIDcfJk9e7afJ9JBNEdef/11X73qoIMOAlwAvSw7Rx99NJAfqLmheRWZ1IiIiIiIiIiIiMxhWJjU973vff61Es+rcsXEiRN9dSg53V544YWAqwAkDV6VDNra2nyd2HTi9w996EN873vfA3Ka+RNPPMFtt90GwN133z0MrRtavPLKKwVsmIocFEuufthhh3l/GO1mtGvLYlLl2tpaH9ShXZf8Xv75z3/6Hb18ncLduVhyMaWHHHKID8B75JFHADdmlI5KachU5ay+vr7AH6a6utr/ppL6f/7znwfgL3/5yxC0eOOh5zdu3Di/WxVb2tnZ6XfF2gWrYk5XV5cfMxoLL730kmee5dwv/836+nq/2w/9xsW06j6yWoc7hGRAMSY17YcV+qaq3WLOQh+7UkBLS4uf52IO29vb/dwKE5aDm09iQzQP29ravMwJmRJw81XMepjiKkwRl1WEfrjqD419/Z82bZofM/LphULGVdfad999efrpp4H8dGfDUaN8uLBmzRovV9MVDJubmwvSMXV1dfn+0DxTe0vFf1332dXV5cd46HeqMaD/et69vb0FFRLDBPi6huZPd3d3Hiuo7xXzhx8pXHrppT7AWDJd6+D48eN9NToFJEMuHVuYigvceimWVJaVurq6Akb58ccfB5yl57DDDgNyOt8HP/hBbw1UPNIFF1yQ9zv9oXRmWkRERERERERExBsGQ8qkirlRrfVPfOIT3hdCddX3228/H/Evfxf5O/X29vpSn9oJK/E/wF577QXkosR/+9vfenZVfkannHKKL/lWClizZo3fpaldYs6KlVTbd999PcOh85WUN6spqHRfSnasXdeKFSs8k6Xd2pIlS/wuXuVQH3vsMQDOP/98P2bkpwy5WtXyq1FWgIqKCj+OxMouXrzYR/qmfTyVKmukobH7yCOPeKuBdqq9vb0+ib9273rf2dlZ4BvU1NTkP1M79T1rrffnfvbZZ/1v67u6j1JgUvtKrF4s8XZNTU0BEyhmqNR8Uq21BWx7Q0ODnzNizEJ/OrU1TNGULh0b+uHpfM2P2trakkhkLzna3d3to5X//e9/A/m+umLNNM7DogXqF/Xx9OnTC/z1QhlSCuju7vZzWyx86K8tFEter7V6ID7gWYIYz5D51Xiuq6vz6036PPnuQn62HY2tkKGF/Pmlvlm/fv2oMKmao2effba/X7GfGv9h5otwXUln+RAqKir82FGbmpqafD/Jqqu5tPPOO/tr7LDDDv58jS1F/ocFd9JpstIYUiVVD1X5wsaMGcPXvvY1AN75zncCcPjhh3uKWArm1VdfDbgUQjJJSXGtqKjwD1/fk+DZcsstuf/++4GcCfmSSy7x1LVSLchZN4tYunSpd3vQg9ZkkrN6iLAucLrGvUw5WYNcPjTYJQCXLVvmlVRNmOrqaj+xPvjBDwK553fhhRfyjne8A8i5lDz88MO+frCqosjcP2nSJG+qU26/zs5OP4nUf3KvUPWykYaUh2nTpnmlSeaRiRMn+v5IB4EZY7xSInNme3u7F8DpGtSTJk3KCwjR+eoH3YfGY5YR1pWHfJO+xlexhSIdMDHaAQ4DRRi4Ifmg53vQQQf5PIWSqTrW0dHhF9SwhrnGgWSH+mPJkiU+8OGBBx7w1woVuaxB7VI7e3t7/aZUcybMoyslVbKnvr7ezxn1g9LUveUtb8mr1gOOXMmykpo2oba1tXnlVM9R/7u7uwuCxsrKynx/SfbIdFsquWJDM346vVioUwhhn6VTQYb5qItVaEu7B4QVz0YScnOsrKz0OejluqPx3N3d7V+H7gmSB5ob+l9TU+PXD/VBV1eXb7P6VJu6MWPGsGLFCiA39xoaGvI2vJBbq0866aQYOBUREREREREREVF6GFImVSZEOeSGqV/ErnZ1dflAGJl/xWYsXry4oHb6K6+84lkwadwyg99zzz3+PKWumjFjRtGAo6xizZo1vvJJumawWJEQEydO9CZv7WbEumU1JYjqAl911VVA7n7nz5/vn73+H3jggf57YkHlzlBXV+d3Z5dffjmQb5qSKfvEE08EXBCRak+LZamoqPCmCrGJuubjjz/uiwuM5BiSyWT69On861//AnKs+vTp0wtq0cus09vbW7ALLS8v97vadIWqzs7OgoIAK1as8NaLLLNlafTHgKYDGYoFTqn96cChrEJMhzHGj2XJ1N12282n+Eub7cIUVHLr6Ozs9HJW54XMstyqHn30UaCwAELWoPkTsmOyBqg/9L+srKyg/8JAF7FhITuWbn8pzRNwY1zjXMFismqVlZX5sRAWQ5BlRmNBTFhWrXVppNdSyLF+s2bN8mNG54VV/HSeWL+QOdR/sa29vb15KTHBjTUx0SNZ/VJyvKuri9mzZwP4dJxCW1sbBx98MJBbV8eNG8eiRYvy7lNjvLm52VsZNG8qKyt9u7TW6PzKykqv14UuFZI90g2VhjQyqRERERERERERESWJIVXvVa5U/wHPTAkf//jH/WuVMn3llVcAt+sXy/bwww8DTpPXrkCfqa75008/7XeEH/7wh4HS8ZkRamtrvf+I/H7Cetrp8mETJkzwzuxpJ38xA1nDvvvuC8Cdd94J5HZYY8aMKWCyOjs7C+qy6/0WW2zhzwvZRO3uf/e73wG5sTBhwgTPUotV7Ozs9H2q6+v7bW1tPm2ZUmWMBNQH9fX1niHUs91ll10K5lDoO5ZOERMmo06n1Vm3bp33pdM57e3tBb7QpYA0QxCypmJF+mMAB3JOliB/4YqKCj825Ge4ww47FGWOBI0Nfa9YOqmwdKqCjkKGI8splyQLismHtK9db2+vZ4/FEq5evdqfn07k/swzz/jPxDKVQhBZiMWLF+f560K+T7oQ+vbqPLFiYhAbGhoK1qSBJGQfaYRjXM9evpVbbLGF1yXEsIeBUXqt73V2dvr5lbZS9fT0eGZS8rO6utr3n9aukSipG1ohFTyc1gl22GEHv/4qdgfwaam0ZmhchOuJ+rSxsbGgcI7WkGnTpvk2SzdbtGiRlx+yUMqq+vOf/zyvTHMxDCsH3dPTk+dsC840pSCq66+/HshVnArr4Cr4pbKy0gvodPS1sghAvnK6MXVhRxuh077od1VqgMK2bLfddn6ApGvQZxGhY77ymZ533nmAiz5X20PzggSH8unKjHHdddf5jY3MEytXruQDH/gAkBM42uhMmzYtL4AEnNCV6SFUDsGNV0XyjqSSGgo3KaTql9raWi/wJCBDtw6Ne21wmpubvUBQf4SmKr2Wc/uMGTO8+0i6hneWkVYUiiln4WfqQ/0PZYMUEvVvFqFA0rKyMj+WpaTW19cXVJvTcw4VDsnRmpoaP0bSC1D4mdximpqa/PWz2FdhgAu4OaF5nA5g6ezs9MrKgw8+CDj5IhmlBVaL+4oVKwrcRkolV6iwdOnSgvyoYWaDsBIT5Af+pGVlb2+vlx3F3NGyhq6uLj/uJSvHjBnjn6HM8qE7iIiC8Lmng1b1fu3atX59UgBuGNQpfWYklNQQap9ICRGB1dXVvPrqqwC8/PLLABx88MHeZUFB6brfyZMn+7VFz3vp0qV+nqj/NH+eeuqpAteQp556yt+X1mZd/+c//znnnHNOv23J7vY4IiIiIiIiIiLiDYshZVLTrF9oIgqDW8QKyNwi0124yw0DqPRau1sxSe9+97sLfjOszV4KTGpFRYVnssSQiE074IADCnKIVVZW+lya2rmJ1dh///0z5+4QBh7oPsWkXnrppf5+tVP/z3/+43f5l1xyCZDbDd55553885//BPLzQX75y18G8Dl2v/rVrwJuB6wdXhi4p92t/qs/Ib8Kx0ghzGmXTjfV09Pj+0jjI6z+onaFKUAE9am+393dXcC4hVWr0mxBltGXFSGUOSETkmZaQ9kgpkWMSBYRps8RGyZXlvB4usZ4WVmZf+bKOb1+/Xrffo2RdLAZ5Myjy5cv99cXyxTmrx5taF6EuWLT7JnmVVdXlz8/DI5S+8X+iA2aMmWKT2eldD6lUH0rhIKgICfz5BoRVkwSwjR9GgOhtUnXyzKTGro6hQFh4NaC9GeSn1qLISdL2trafD+k84iGc0lyfN26dX59Sp8/nBBDCjlLWegCA87idtRRRwH4yoQtLS2eLVV/KPCwra3Nrw967qHlQe2TLlJVVeXZd83BefPmebcRzUf194033hiZ1IiIiIiIiIiIiNLDkDKp6R1Z+F479KqqKq+FKxWVGIyysjK/A5EW/uCDD3o/BjkGi4nddttt/a429CkpBQZVqKmp8Ul4tbsI64mn00otX77c982uu+4K5FI1hdUysoxvf/vbgGNS08zF6tWrPUsm52rtepctW8YXvvAFINfWpUuX5jmMQ85pfNasWQUBAosXLy4IzJJv39ixY/2xkYTuo6Kigt122w3IMVZh6hLNIbFaYRCI2LWKigp/XOeH7Kn6W+zxkiVL/C53NOtNbyxCxqMvbMhPVSiFQBiNX2NMQUWXEOkk5b29vf656hqhb7LGhlijsH+mTZsGODkt+aq5mSUmNV0RJ1xjJFdkjamurvZzXExSU1NTAXOoOTRp0iTPKilmIMtBZMXw5JNPenmp5x4GrIbp+SC/IEi66ENNTY2Xr3PmzAGyabFUm0J/7TDAWGNFz1nPv7m52Y/7kGnXeelCIWvWrPFzQ2x9a2trAdM4ElBBI8hZpzWe1aYFCxb44jeSe11dXf75Stf6xz/+Abh5rvVRbOkWW2zhx4d0EfXVuHHjPOMq+bT77rv78Zb20VXa0v5QWrMtIiIiIiIiIiLiDYHhzzCbIEznIA1brI78Jnp7e72mraixpUuX+lQJ6cjEffbZxzMq2imEKWhKAWHdbe36tZuBwl1qTU2Nj1zdfffdgVxd+izuaKHQV1n/161b59Nvqe3t7e3+Of/5z38G8AnuFy9e7BkclWw8/vjjfdJxpQJRpGJlZaX/bY2r1tbWvHJtkB/9PhJJl/tCsWT7YVm/dFqTnp4eP4d031VVVd7vJ82qtbW1eUZAZWhfffVVP35koSgFhMwiFGdI0ym4QoRzJV1iNYtQe8eNG+f9zUIfWh0XgxRGvKsfxM5XVlbmja/w/HDMSL5cffXVBancsgTNBz3nqVOn+jZLVob+qhrnakvIjKZjAJqbm/11xSiFPp6lgJUrV3r/0fRzrqio8GyfmMaWlhbv665j6oOamhrvm5tliAG21nrZr/RHIZuutULys66uzq8/kgtdXV2ekdS4kA7S1NTk55z6WJZNoCAGYDghv9Lwd+WnqjWhpqbGz32xoVVVVb596hcVfaiqqiool93c3OzHRTo7wpgxY/yapDEWxklonddcGshYGrEUVMJHPvIRzj77bCDXgVowTj75ZJ8qQVWlZs+e7alhpTJQx9xwww0cc8wxQE5JLTU0Njb6SaEJo/rtxWCt9ZNHZhdNvqwqqRqsmuAvvfQS4O5XAz+sPa9B/rWvfQ2Ad7zjHQDcddddvo1f/OIXAXjve9/r87B+5zvfAeD8888HnDlK15LQWrVqld/YaCJKOHd1dY3KONLEDc3OesZNTU2+39ICr6qqyi+qaWEUItwc6FloXtbW1hbUYS4FSOEqZnpNK64bUlI132S+zCI0fsNAjbAefbqt6pfQhUMBDcXGWbqqGeRyZJaVlfnrZrHaUjqdVnV1td+Ehf0GznwZ5gMFp6hr3khp1zltbW3sscceQC6oMp23OOuYMGFCQYW1YpsSKWptbW2+yqOet/qnoqLCb5KyDLWrurrat1mb8dAlULJfMrizs9PPqzC3brjJAfJSJ+q3pHhVV1cXuAWMBMLAV7VBKRulhFZUVPi26pyamhr/nNU+jYXu7m7fvmIkhuZQ6C6RTmtnjMkbP+GxgaSyi+b+iIiIiIiIiIiIzGFYmNRizIU07QkTJnitXjT8+973PgAOPfRQv2sNU4LILKPk7tr9t7W1eXNx+NullMx/22239Q7Jcu7XDqcYysrK/K4kTEuTZWhHKlPCkUceCcDOO+/sd3Uyn9TU1Hinb7VLZv8//OEPfrco1vSMM87wDLsqkSkwa8mSJZ49kumyrKzM79523nlnIOfEvWLFiqLBKMMN7cCfe+45f28KoFqzZo3vGzECeu5jxozxO/rQXKPxnx4X5eXlfh7q+k8++aR3uJdVohSQTp2UNtOGKJaWLrTw9Ge5yBqstQVsecjshan4IJ810v/QDSasWa7rC3KtCVN4ZZFJlUVJZsmlS5d6i4jmdpjGMExfB44llGzSMfVVZ2env4auP5CgvSwgXb0Ocs85tMrotdad1tbWArZZcqmqqspbwrKMsJiF5GXoEqj2aFzomdbV1RUU/AjlR3hdcPJWzHLouqZ1Kl1RcTgR/la6AIXue/369f55hwUJ0kyxxg7k1pFQjvSlW1VUVHgZrN/8z3/+4/telk2xsgMpjBGZ1IiIiIiIiIiIiMxhWCi4Ysn8tUs78MAD+dznPgfAqaeeCuR8RSA/jQi4Ml3atWh3oB3+vvvuW7CzzzqrmMaUKVPySoJCbjfT3Nzsdx5CZ2dnwW4kSyUKi+GKK64A4Ctf+QqQc8Cura0tCBaz1npmJO0fevLJJxckJ77hhhsKAoRC316xTBp/U6dO9Y7t2i3qHjo6Orx/60hC/nNtbW3eX1AWhTBdkNoQpjXRDjhMy5ZOGyNUVFR41lD+hh0dHZ5pSNd5zjLStdaFYon7w9K8ki8hk1oKPnZ6zj09PQVFF1auXFnAhIa+x3qtuVBfX1/ggxr2RzoooqysLNP+yiqPLd/1o446iueeew7IjQ/NibAd4VhIl++WTF2xYoUv0X3mmWfm/V7WIZlQXl5eMCfCVHtpdnX9+vUFfuphoJECWbOMMHBK41l6QxgYlg6ubGhoKAjeLisr8/ELuq4sVzvttJNfjyVvKyoqPEM7koUfQiY1tJr0BT3TMNi2WBrRgaRcC63XOl/9Ul5e7oOU1R/q94EwzcOq0YUN1s2VlZX5aGwtzlo4p02b5muyywR68MEHeyXiN7/5DQCf+tSngPxKCTLrWmtLwswvjB071ptzX3/9dSAXdT537lyvrAidnZ155l7ofyCONr7//e9z0003ATmTuxSM9vb2PIdugEWLFvlNS5j3DeDmm2/2CqjQ1dXlFyRBNYnDc5V79qWXXvLj6Pvf/z5AXu7V448/fpAtHTz0PHfYYQf+9re/AblMBd3d3V4pkfDUWF+1apUXNBoDM2fOLJj4EiChWVNCaerUqX6DUEo1yWV6HWgmj7QJL0QpKKlSOKy1edGy4JTKdIBGaJrToqHo49bWVr8AF6vEpU2iglcbGxsLzIdZgnL+KmAScpHOaWVh7dq1BTliw0pskkPqs1WrVvn5dtZZZw1rO4YaYTBQOheqXOjCbCphIF462FUyqK6uLi/7TNbR2dlZEExYV1fH/PnzgfxcoeDmUrEqlpI3aVLstddeKyo30ybvkUBI6oSZCdL3kx7j3d3dfeZzDXPXh+RjMXJASAeudnV15WWkgZzON5Aqf9HcHxERERERERERkTkMK5MasprSxpcvX+4rTaVTAS1btsxr9Nq5/Pvf/+bQQw8F8KbYv/zlL4ALlFGwzO9//3ugNIKl0ghTV0CO5Xr55ZcLmNTKykqfWyyscJFVvO1tb+Pee+8FCnd3VVVVPkhKzxtyTKFM0m9961sBuO222zyL9M53vhNwpjfl0f3ABz4A5ALQQrOo+mzSpEneLCjG9Uc/+hHgXAdGA2Lyenp6/FhQH6xbt84zWmFKFHA7WrGmauu4ceN8P6fT6VRUVPi5pvl44IEHelZBTG0pQC4jMmH3FSwWHoMcexYyq6UQOBWaydLWhJCt0bMPK0iF1f50rXQ/hCms0kz8lClTvIwJAyqygnSQT1VVVQGDFabkSqfrCj8TK1bMLUQolloxiwiflZ69zNxiWbfeemuf/k/m2QkTJuSxsOH3lyxZUhJrrJ5ndXW1t0yGz0ypLtXONLsIhXMphBjV1tbWgrHQ09Pj1/JiQeTDhdmzZ/vX+n3dezEXsRB9uSeEFes2BdL1tFbL5fPzn//8Br8bmdSIiIiIiIiIiIjMYUiZ1P5SP4k9bW9v56STTgJy7KfYnVmzZnn/zHnz5gFw3333cdxxxwE5R1/508ycOXNEfT6GC+nE00LILgrGmIL0Mf2lrBpt7LXXXv7+tLPXM37llVe8n5z8Qz/zmc8UJJxWfd8tttjC7+rEqNbW1vrxo92grt/R0eF3kmKkL7zwQn7wgx8AOUY+zUyPNMScT5gwwVsNtPsPn612++qXGTNmeBZWLMjYsWP9OEpXqqqqqvJzUwz2+PHj/WfpgJwsI73jD5kA9VMxX+20r11NTU0mqyilIV/99evXFzyn5uZmH1CYZknCRPxiysN+SSf97+npKWCOqqurvU/sSKbUGSiKpRXTnCqWYkuyQ8eqqqp8u9Ipe4r5zA0kkCQLkG/x2rVrve+/+kUyr7e317OJaldnZ2dBhaUw+b2YV6VOFDuWJaidLS0t3joVQsG8ssQU81kXGxmuuaGc1fu0vtPQ0ODHk9a3kcD+++8PFGdvH3/8cQD23ntvPy7EJr/lLW/JtGWgNGZbRERERERERETEGwpDyqSmdxShT6rYwksuucQzXfJzWrBgAeAivuQHIuarsbHR+1OIXVU0Z01NjY+IL2WoPbfffjuQ88WUr2CIRYsW+V2a2q4SdlnFGWecAeRSUGmHus0223DnnXfmnfv2t7/dt0vPWwxsmDZFu3/I9ZfYQe0KGxsbfdL6WbNmAa6PtQu+66678n57tHzNTjjhBP9aDOE3vvENwDFXjz32GJDrN7GrtbW1/n7DMVMsYTc4hkTMiHbTY8aM4dJLLx36Rg0zxOyJNZWMqKio8KxjMcifU3Ooq6vLM0JZhpiv5ubmvLEPrsiJItvFEmoM1NfXF6TwC8vpinVXf7S3t/uxJDQ1NXmrzh133AHAhz70oSFs3dAgTEiu8SGWPGRSte6E1j2NHzFlulY6k0IpYZ999gHcuqrnq+ctVt0Y4+Ws2t7b2+vn0D//+U9/DchPV6Q1PYvQ/d97771FUzTKUqX/Q4lnnnnG9698MY866qgh/52Nwd577+1fK3tOmPozyxixpKIyyT7++ONecOjBacFsaWnxi4gW5mXLlnnlTWYqCcynn37aB8mEKKWKUwDHHnsskFPG1FfFTE077rijd3/Ya6+9gJwwyip0v3/84x8B+OhHPwrkKoiFqK2t9Q7goSP4UCGsqqQNkRawLKTy0j1885vfBNxiqeBAbVrCimtp82tVVZUXyjLZyTxcW1vr05RoY6QArVLDBz/4QSAnaNXmt73tbfz4xz8GcoGWU6ZM8WnH3vOe9wDw85//HHDz6cADDxy5Gx8kLrroIsDJSuV7FCZMmMADDzwAwGWXXQbkgvHWr1/vFXkpt5WVld6crQ2b5tp73/teP26EM844g7vvvhugIJAzSwg3mIcddhiQWyvkylNRUeEVB5ElYS5ZKXFSZFWVLkSprCsKLnzhhRf8eJDSqdyvp5xyik/Xpcp9Rx11lF+jb731ViBXoe64444blTR9GwtVf9ppp52K5n/uK6Ap/Dx8zum0SiHS4+HYY4/1G985c+Zs5J1HpBHN/REREREREREREZmDGckUCREREREREREREREDQWRSIyIiIiIiIiIiMoeopEZERERERERERGQOUUmNiIiIiIiIiIjIHKKSGhERERERERERkTlEJTUiIiIiIiIiIiJziEpqRERERERERERE5hCV1IiIiIiIiIiIiMwhKqkRERERERERERGZQ8kpqcaYecaYI0b7PiIiSgFxvkREvLFhjDnTGHNf8N4aY7YfzXsaafQnB40xBxtjXhrpe4oYGDZJSTXGHGSMecAYs9YYs9oYc78x5k1DdXObE5JJ0m6MaTbGNCX9dpYxpuQ2CsMFY8z7jDGPGmNajDFLjDG3GWMO2sRr3mWM+chQ3eOmIM6XQiTPWn+9yRzR+9NH+/6ygig/NozNXX5A3jhoMcYsM8b82hhTN9r3NVwYCflgrb3XWrvjBu6jqJJrjDnNGHONMWabRPmvGIp7GimkxtMaY8ytxpgZo31fIQYt4Iwx9cAtwE+ACcCWwIXA+qG5teHDKA6kE6y144CZwHeB84DLi51ojCkfyRsbbRhjPgf8EPg2MBXYGvgZcOIo3taQIc6X4rDW1ukPWICbI/rsdyNxDwNFBu4hyo8+sLnLjxROSObL3sC+wPmjfD/9YlPmzUDlw3BhAPf+duCvw30fwwyNpy2AZbg1Kjuw1g7qDzc5mvo4diZwH/A9YA3wGnBscLwBJ1yXAK8D3wLKk2PbAXcAq4CVwO+AxuC784Ajktc7J9c+LXl/PPAk0AQ8AOye+t55wNM4xaBisG0fZH/5+w4+2w/oBeYAvwYuxQ34VuAIYDrwR2BF0s5Pp777KLAON7AuST6vAa5O+q8JeASYOpJtHUTfNAAtwHv7OF6NW4AWJ38/BKqTY+Nxyt+KZKzdAmyVHLsI6AE6kuv/dBTbGOfLRswR4FBgUXIPS4HfbmAcnAncl7qeBbZPXh8HPA80J334P8F5meqHDfVN8FmUH/aNIT/6GgfA/yX3bMOxCdwFfKTY3EjNiwbgqqT983EKb1nSZ03AnOB7k4F2YMpozJticyB1fFLSF03AauBeoCz47v8k97MW+D1Qkxw7FFjUz71fi5tn7ck4+EJyXlkydybhFGibHG8BDkyOn5/06/KknxuS726TnP+xZEwuIZBJoziejgP+k7x+O/AETkYsBL6e+u4HkratAi7Y0PMZ9D1uQuPqk5v7DXAsMD44dibQBXwUKAc+kTwIkxz/E3AZMBaYAjwMfDw5tj1wZDJJJgP3AD9MdypuF7kAOD75fK9kIOyf/OYHk3Org+89CcwAxoz2YAg+X5D0z6+TyfOWZHDXAo8BXwWqgG2BucDRyfceBN6fvK4DDkhefxy4Ofl+ObAPUD/S7d3IvjkG6KYPQQZ8A3goGSuTcQLxm8mxicC7k/aOA/4A/Dn47l0kwnqU2xjny0bMEdzC0Q38b9K2MRsYB2fSv5K6BDg4eT0e2Dur/bChvkl9HuXHG0B+9DFHZgDP4TZwg1VSrwL+krR9G+A/wH8lx64ALgq+90ng9uT1iM+bvuZAcPw7wM+ByuTvYHIydB5Obk7HWbJeAM5Kjh1KoZKad+/Ffhs4AHgweb1NkWfwYeAV3NyrA24Efps6/1qcXN8Nt1EYciVvI8ZTLW59uirol91w8mR3nEJ+UnJsF5wyfhBOvnwPt4ZlR0lNbnRnnHBchBMSN+FMLWcCrwTn1SYPZFpyfH04cIHTgDv7+I2TgCdSnXph8puHBp9fSiJ4gs9eAg4JvvfhkRwAfQ2G1OcPAV9J+vGq4PP9gQWpc78EXJm8vifph0mpcz5Maleb9T/gdGBpP8dfBY4L3h8NzOvj3D2BNcH7u8jIIhPny8DnCE5AdpKwHRsaB2xYSV2AU8DqU+dkrh821Depz6P8eIPIj2ActODYwvk4l4adGYSSilMuO4FdgmMfB+5KXh8BvBocux/4QPJ6xOdNX3MgOP4NnMK9fR/fPSN4fzHw8+T1oRQqqR/e0G8D3wQuSF5vU+QZ/As4O3i/I06RqwjO3yl1T5eP4njqwpEju/Vx7g+BHySvvwpcGxyrTcbSkCupm+R0b619wVp7prV2K5zJaXrSEHAmOp3Xlrysw/lTVQJLkgCAJhxLNAXAGDPVGHOdMeZ1Y8w6nOlpUuqnzwIesNbeFXw2EzhX10yuOyO5J2HhprR3mLAlzjQB+fc3E5ieas+XcUoLwH8BOwAvGmMeMcYcn3z+W+BvwHXGmMXGmIuNMZXD3opNwypgUj/+P9NxAlmYn3yGMabWGHOZMWZ+Ml7uARqz6JMX58tGY4W1tiN43+c4GADejTNlzTfG3G2MOTD5vBT6oT9E+fEGkR8BTrLWNlprZ1prz8aZoQeDSTjZku6bLZPXdwK1xpj9jTHb4BT4PyXHRnXeGGO2DoOqko//D8dc/t0YM9cY88XU15YGr9tw8rUvDOTej6N/f9Ri466C3BxM/87GyLOhxEnW2kacq8+ngLuNMdOS536nMWaFMWYtbh3R2jKd4N6TNWvVcNzckEWGWmtfxO3m52zg1IU4ZmhSMtEarbX11tpdk+Pfxu0wdrPW1gNnACZ1jbOArY0xP0hd96Lgmo3W2lpr7bXhbQ6udcMD4yK7t8T5I0L+/S0EXku1Z5y19jgAa+3L1trTcMrK/wI3GGPGWmu7rLUXWmt3Ad6M8xv6wIg1anB4EDcmTurj+GKcUBS2Tj4DOBe3Q90/GS9vTT7XmMnUMxfifBkQ0r/f3zhoxe3mATDGTMu7kLWPWGtPxM2XPwPXJ4dKoR+KIsoPjzec/EihNflfG3w2rdiJKazEsWfpvnkdwFrbg5snpyV/t1hrm5PzRnXeWGsX2PygKqy1zdbac6212wLvAD5njDl8sD/R3/tEvmwBPN7H+VB83HXjzObCjNTxxYwSrLU91tobcX7YBwHX4Kx9M6y1DThXCs2LJcBW+q4xZgzOdWbIsSnR/TsZY841xmyVvJ+BG8gP9fc9a+0S4O/A940x9caYMmPMdsaYQ5JTxuHo57XGmC2Bzxe5TDPOD+mtxpjvJp/9Ejgr0f6NMWasMebtxphxg23jcCFp9/HAdcDV1tpnipz2MNBsjDnPGDPGGFNujJmTLEwYY84wxky21vbiqHqAXmPMYcaY3RImYB1OCPUOf6sGD2vtWpz54P8ZY05K2I1KY8yxxpiLcX475xtjJhtjJiXnXp18fRyOSWgyxkwAvpa6/DKcT9CoIs6XIUF/4+ApYFdjzJ7GmBrg6/qSMabKGHO6MabBWtuFmxeaEyXXD1F+5OONID/6g7V2BU6xPCN5zh/GBVRu6HtSQi8yxowzxswEPkeub8ApKqfgXCquCT7P3LwxxhxvjNneGGNw/tk9DN3YTY+DY3H+uVJOVyS/FZ5zLXCOMWaWcWnCvg383lrbHZxzQTJedwU+hAvoGhUkz/FEnM/+C7i5sdpa22GM2Q94X3D6DcAJxpg3G2OqcPI2TY4MDQbrJ4DbwV+Pmxytyf/LcAEiZ9K/f1gDzqdlEW4wPQGcmhzbFefw34JzXj6XQn8R+a1NwC1OcoI/BheN2oTT9P8AjEt/bzT+kt9vxykMa3G7/0+Si9L+NfCt1Hem4wb6Ulzk6UNB26/GOa634JznT0o+Pw3nG9SKm1g/ZpQikgfRR6fjIo5bkzbfimNzapJ2LEn+fkwuMnM6zv+qBef0/3EC3yBclOV/kv778Si2Lc6Xgc2RvOj+1PE+x0Fy/Cs4dmghjlGW710VcHsyBtYlbT4o+F6m+qGfvonyo/8+2mzlR7E5kvr8WFwGhybg+8DdDCxwanwyFlYk8+arJBHxwfmv4FxKqlKfj+i82dA1gXOSc1pxsvKCvr6LU6quTl4fSh8yM/jsRJxfexMuS8ANwHtS53wj6ccmXFBVWdKfC5PPryYJmKUwun8pSdaAURhPylrQDDwLnJ4cew/OBaEZlzXhp+qzYFwtIBfd/zpJcOpQ/inyLSIiIiIiIiIioh8Y5/u8FNjWWrtukNfYBrepqLT5zGpJImGKm4DZ1trXhvLasVpJRERERERERMTAMAHH0g5KQd1cYIw5IXFVGItLQfUMjpkdUkQlNSIiIiIiIiJiALDWLrfWXjra95EBnEiuQMZsnAvakJvmo7k/IiIiIiIiIiIic4hMakRERERERERERObQV/LjgaDUKdihTpewyf3R3u5yMt9www0A3HHHHcyaNQuA5cuXA7BixQq22GILAHbccUcATjzxRACmT9+kPMCZ64+VK1cCcOeddwIwd+5cqqqqAJg/3+VI3nLLLTnyyCMB2HVXlzq0sjKXe1yWApeVZKOQuf4YZQxHepHYJ/kY8v64+uqrOeaYYwCYNMnl4W5tbeVPf3I52Q85xGUymzFjRvELbBwy2x9dXV0AXH755V5ONDe7lJ8HHXQQ9fX1fd9ElCFDhRHvj56eHsrKHBdX7Pk1NTUB8PnPu8x9++67L+97n8u0pPExffp0fvzjHwPwyiuvAPCDH7iU0+Xlm1TzIY6PfBTtj8ikRkREREREREREZA6b4pO6WWrtm4BB94d2+fvssw8ARxxxBADd3d088cQTAKxa5SqONTY2cvzxroKhmMbXX38dgCuuuIKxY8cO9jZGpT96e12uZe12FyxYwNFHHw3Aiy++CEBDQwPgGFK1ecKECQC0tbXR0dGRd81TTz0VgGuvzRU/GQQbkpnxkRFkikn9+te/DsC3v/1tALbbzuUub2pq8s+6pcVVSzzllFP45S9/CeTGxu233w7A0qVLqa0NC/VsFDI7Ro466igAXnvtNbq7XYYbWSHKyso8cygm6IEHHhiKn81cfzz0kKuVofbdd999rFixAoCKCmdIPOOMMzjjjDMAxzJDTr5ATnYIpSZD7rvvPv7yl78AcOONNwIwe/ZsAN70pjd5+VpTUwM4q90999wD5OTze97zHgCOPfZY/91BYMT6I3xmel5iRp955hlWr3aVhMeNG5d37PLLL6enpwdwVjqABx98kKeeegqAX/ziFwDsv//+gFuvGhsbAdhrr70ANmYNzsT4yBCK9kdUUocOm9wfn/rUpwD8onnKKad4s5wmztKlS/ngBz8IwK233grkXAF+85vfbMrPZ6I/pk+fzn/9138BeLeG8847D4C6ulypZQme9vZ2r9Rec40riKKFd+HChWy1lavcllaGB4BM9EeGkCkl9c1vfjMAL7zwApDbyBhjaGtrA3KKxpIlS7zyMXnyZADWr18PwCOPPMK22w66oFDmxsjCha6ctpTU6upqv4iGY3/qVFc+XIvzO97xDgA+9rGPbcrPZ6I/5s6dy7/+9S8AbrvtNgDv8rB06VJvslV/nHrqqV5OvPTSSwDst99+gHODKDUl9be//S0Av/71rwFYvXq1b0N1dTWQk4fd3d1+8yK0t7f786TIiwgwxnDAAQcA8LOf/Wxj739U+uPxx13l0ueeew6A8ePH+zarXyQ/Jk2axIMPPgjkZEtvby8f/vCHgdwa9OyzzwKuf0QgSaYceuihfjxtAJmYLxlCNPdHRERERERERESUBjYlcCpiiNHZ2QnADjvsADhTnXbt//73vwHYaaed/C5Yu7+XX355pG912LDbbrvxj3/8A8ixQdrtWmv9DlguEu3t7b7fZLJTEMgDDzzAySefDORYE2vtYAIgSga9vb0FbPGnP/1pAO/8vzlAbRSzIVNlb2+vHyMKRKyrq/OsvMbSf/7zH8C5zGwCk5o5yIypgBBrrbfMqK+6u7s927x27Vpgk4MuM4UbbriBmTNnAnDwwQcDOevKW9/6Vu6++24gx5Zus802noEW0y5GdcqUKZ5VLIV0jY899hj/+7//C+RM2ePHj/fyMu32VFZW5tcTYcyYMQUyZMyYMf57jzzyCJBj3WUCzyquuOIKAPbcc0/AyQWxngqyXbBgAeBc5+Q6pAC7+vp6lixZAuTkhtDZ2en7Rmzzn//8Z28Vjdh0RCY1IiIiIiIiIiIic4hMaoag3b6YoOeff55XX30VyO2Ky8rKePTRRwG8r1mYcqlUsfvuuwPOf1A7UrHHYsna2tqK7vDlt6t+E2N0yimn8OSTTwK5AJvNnUkN2Z7HHnsMyAVL7LTTTpx99tlAzsd5E1OojBoUQKegIDFFnZ2dvm0aN2VlZaxZswagIEhq4cKFnlHbHLDHHnsAeObn2GOP9b546dRLAPfee+8I3+HwYfHixYAb02KSZWXRmGhsbOSOO+4A8L7sXV1dng2TnF22bBngmLVSYtp/9KMf+dea262trV5uysdU8wYo8M/s7e317KpkpY5VVFT4VGbPPPMMAK+++qpnH7OGF1980d+v2r527Vr/Ws87tMRo7kimlJeX+/GhvtK40nd0HjgrhoLzxMxHDB6RSY2IiIiIiIiIiMgcIpOaIcgPSj5QL730kmcEdtllF8D5u4gB0M5NjGopQmmi5Fc7efJkzwyHPnT6L0ZA0doVFRUF/oba/U+ZMsWzJsJGRPeXJEKWWD6Z6s9f/vKXPr2Z/J5LFfKl1DgQEyKGBHLsmbW24Hg6TdXmiqOPPtqnz5HfaU1NjZ8zmxM0FhobG72PodIIad6vXr3aR7/Lb7Wzs9On5NL4EPP+6quveia1FCwwc+fOzct8Ao7902chgwquvVpHxByG0DwJE+JrXulazz33XGaZ1AceeMDf+7p16wA3JtTmdPrC6upqPwb0vd7eXt/WdF/V1NT468ofvLy8nOeffx7IFcsYSVx++eU+Q04xiAXW/7DNQzHG1Vdz584F+l9r3vWud/Hxj38cyFk20siEktpfDstigSDCH//4R9797ncXXKsUhEkxKP+cFDdrrW+7zP7l5eXevC3l9Bvf+MYI3+nQQQuGzC6VlZUFwjJMh6L+kNJRVVXlhaa+p/PLy8v9YiXzsEw/mxuKBXWoj9Q/a9as4aCDDgLgtNNOA/LNg6WEtIlNcz6sMBOmHUunINP56UVqc0NTU5OfD2r72rVr8/KAwiZVVcoMZKIvKyvz5lnJzeOOOw6AefPm+Q2/lIqampqCXJoKLJs4caK/fin00apVq7xLi5TU8vLygs1ZGDgVkgCQC5KCQplaV1fniRPNqSwH7j766KPsvffeQG4sPPDAAz5fcjFXOfWD2tfb2+sJE8mbMPBKOXilqDc0NDBv3jxgdJTUj3zkI17mF0spd+aZZwL4NFn19fVe0RZCdzC1NR18F0L9snbtWv9abkZHHnmkd7cTlC7z5ptv9sHNfWHzppUiIiIiIiIiIiJKEplgUovtTNNmhvAzUdkvvPAC3/3udwF8Woz+drlhqo0smn0/+9nPArldRn19fUF6kJ6eHr8rVhLhbbbZZsTucajx2muvAbmdWG9vr2cAtaMNd27Fnps+K3ZM5lxVnlG1rs0NGvfh+FcqGu2EJ0yY4JkDjbHrr7/eMyFhsQRwz6LYdbOA9LwoxnLpnNAikUYppBXaFNx4440+eEPm8MrKSp5++mlgUEUuMgsxfGPGjPGvxa4K06ZN8wGZBx54oP9c40Z9pMCX2bNne7ZdcinLWLt2rbdKad739PT44g1qSxgwqWevzzo7O/1rHVPAkDHGs81ah7LMpK5evdq7ckyZMgWAX/3qVz6IUOyn2tne3l5Q3KCzs9P3pcaAZGVZWZln3cOATVnuRgNf+MIX/Jx/17veBcDb3vY2wK23mhshWyqmPC3nu7u7fdslK/S98LOQfVb/yb3o1ltv9WPlvvvuA+Cwww4D3PqzIRlc+pIpIiIiIiIiIiJis0MmmNRiKMaMfOADHwBy5Q633nprn47p3HPPBeDiiy/uM61O1tmCnXfeGcj5mq5fv94zX7r3cBejHYv8DEsRSqI9fvx4wO3I0k7cod9hmtkrKyvzYyW9Aw4DrVRCdnNlUsP5Iqd9le7Trr+9vd33pXa5a9as8czL3//+d8D5EEG250s6AETtD32aJSeWLVvm/ezSYyt9nc0Nr732mmeLli5dCjj58vrrrwP4FG3y2ytlyK+uvLzcM17yz9SxqVOnevkqH0X5qEJufIhpPvjgg71feykEG8oPFXIs18qVK/1c0PoRytFi1rp0ijrJ1lWrVvmAGzGUSv2VJej5zZo1qyANWW1trWc6te5IBlprC3SPsD90LfXZ+PHjvbVOfV9TU+PH0Ysvvgi49H/DDRWpKC8v553vfCcA3/zmNwG46qqrgPyiHXq2oT9qWnfq6ekp8PuHQgZVbGt1dXVBTMA222zjGXz1owoRHXPMMfz+97/vt12ZV1Ihp8hIyMoks3z5ci84ZMIZO3asV/be9773AbnFavr06Rx77LEjcPebhtDxPf3AjTF+YJSC+ak/9Pb2FtRUX7t2bUGt8f5MzcVMBWGFKk0wuRVsrgj7SMFQEgSaN1VVVV6Bk9AYN26cX2xU4evyyy8H8PWqswwtnuHiq2euymMLFizwSqqOaYxsrkqqZOaECRMKIpLLy8u9PFGuy81BSZ0/fz7gNmUKeFIWCM2PdevWeaVUinp3d3deRhAgb7wsWrQIyLaSGpqX0xv5MBBVylN6HkBxt6k0ARDm2NX1lVc0S9AG/ZVXXmHfffcF4K9//SvggujURslBrbnhmhpWKUxH94fuAdtvvz2Qq0Y1Y8YM72byyiuvACOjpCof9p577ukj6/XsFZTd1dXlia8wsDatRIYbF10jNPeHCjzklNSGhga/7siF4LXXXvOKsALJbr/9dsBVQ9T5fSG7VElERERERERERMQbFpllUkNzg1hSaftKI9TS0uJ3ONLsd955Z58bT5S/tPiOjg5mzZoFjMzOZrDQzqWsrMz3Q7i7Te9iShVi+CC/skmaCdjY4JYwAEBQIMTmhmKBL0qJIod+7Zi7uroKzm9ubvamLjECF110EeBSm51yyilALggrK0g7+ovpWb16NdOmTQNg//33BxyDonQraXNWmG5nc4KYpLKyMh80oz6rra311iWxiZsDxIY1Nzezzz77AIWmaGutnxdilIwxXlbINUYBJ2vXrvUsUZYRytK0vCwWJBWyhEIob8W4ps3c3d3defmHIZtp3GRFPeqoo3xbNf7Xr1/v3b/EnEt+9Pb2FuRJDV2IwmuAc5dSGkylndp///39Z5KtIwHJ/U9/+tNeZxLDLgZ8xYoVPtBabgrWWt8u6VN6puHYD038xdwPwa016WMzZ870lkzJJY2nF154YYPjJzKpERERERERERERmUPmmNRiQTDaFYjpEbbZZhsfJKLdYk9Pj98diXHV7njNmjWZrsMsPxb5UY0ZM8bvbLQ76e7u9gyAzlP/iDkqFchvDjY+xVHod5pmBcJraVcc/tbmhHS/WWt9ihGN+5D50DzRznrMmDG+j8Qqyk+4ra3N+3NlDdr5ixUTi7ZgwQLfHvmfX3DBBXl1yUOUul93XxCDWFNTU1B3vKqqqiBNUSlDSfn1jN/85jf78SBoTPT29vo5IDkaplpTf8hv9e677/b+8mFwSNYgFi/0nxTGjx/v2aqxY8fmHSvGHPb29hbMEzFfu+++uw9W1u9IXmQRYfGWMGj26quvBnKVxWRh7ejoyFtrIb+ITDod2cqVKz1rr/+jBT2H7bbbzlvDVFlOfp9TpkwpCBptbW3Nq9QXorOzsyAuppgfv/ojZFLVV5WVlT7ORL7iL7zwAuDGrfSYvhCZ1IiIiIiIiIiIiMwhc0xqmhl6+OGHfbSxStuJBdppp528Bi9GtaWlxUesSmsP/UnSaYqyBCVYl6/I2LFjC1jCsrIy30fa2Vx22WVA6TGpfflRiekolsw/fU6xSFQhTCycxTQpQ4E0e/zMM8/4HXW6lF93d7efOzo2duxY/5mYJbGTe+21F+9973tHohkbDTGBmgNiC40x3t8yjFgXm5wug7ihyNJShdj0zs5OL//EBNbV1fnXYcqiUoWYGMUe1NbWFmRvkBzo6uoqkCvGGM8kqT+0dlhrvV+fjmWRSdXzrq6u9u0Smzx9+nTvE6iUS2pLmIKqPzkr+bLVVlvxz3/+E8jNuSxmyAifbVpGtrW1+X5Ilwzu7u7O8+EHN3bURsmPMFZE8jNMY5XGSBRDCeeyMg1oHIdxLHpuYdo+yQMx5hsrF8JsB+l4gdbWVt+X6RiA6upqnwavLwxaSR2uOsbqJDk2v/rqq3zlK18B4B//+AeQq7C0cOFCP1j0WVdXlw+SEd2crlucVfz0pz8FctR5eL/hawkVCaErr7wSgCuuuGJE7nOo0Nzc7MdPOLDTqadCh/60439olkqnVSkvLy8aIFBKsNYW1KnvD7fddpufQxpH2vQYY7zZRddsbW0t6FMJlNGsmrIhaOxLQdEc7+7u9iauYrIp/Vm6hv3mApl/W1tbvUlT46K2ttbLSG1IShnpDUh9fb1XHKS8hRVx0oE/oQzRBk9K7YIFC/x4CgMxswbN8TDYVhvRSZMmFVSFCtfEYmt5On2V/q9ataogqCqL6E8vqays9ONCacWklIVBUuG1QncRyK+QWGzTMhoV+vQcFy1a5NOCyQUhbJPGsf4Xq8gX5iEPXwN5rgHpObR+/fqCtpeXl3slWHJbpNHKlSu9fOoL0dwfERERERERERGROQyaSR3KnYJ2r9ddd51nULVL22677fyuRWypdoXr16/3ici1U9huu+18TfswACk8J2sQ45s204bpmELmULsX7eDEjs2fP5+ZM2eO2H1vKjo6Ooqyg2mmIxxrYcAUuF1amiUNd4VpU9TixYvzqm6UAvpjUNM74CuvvNInsRdbIIYpDAAQc9Db2+s/E6um8aRE1FmEduQaK2qPtbaAHTXG+LmvuSUoyHJzQ5jWJT0Henp6/GebA5MqM78CnOrq6vwaoUDZkGkPKwPp+1pHBMnWiRMn+mCjLLtGiBkPmcAweKxYURjoOwVV+nyd19PTU1AQwBjj+6YUUrqF7LHuV8x7Q0NDXtELnS9I3oTFHtJBZqMF6TuLFi3y9yx5J52orKzMs5ph0KTaVSyZfzErZHrd0TmdnZ0FaQ7Hjh3rx6I+07x88sknN5geMjKpERERERERERERmcMmB06FPnP9+YCFxxQwc8MNNwDw+OOPA06L33HHHYFcOqYnnnjC71qkhSsBdVdXV16KCXA7AO2olcRavhevvfZaQQqJLEC+tvJ9KpZgO9z9p/tUqbluvfVWzj777GG/36HCmjVr8lKHgWtTun3hLi+dKLisrMx/JiZaTvFQyEI+++yzJcWkhvMmXU87hHyPent7PfMT7m7BsSxpv7ry8nIfPJROHaL5k0WIISiWFkWJ+4WGhoa8YMQQ6febCyTfxowZ44MnwprrYss3h/aLQQpTbGn9UPvC0o6hPyG4OdBXmcedd97ZB6Gk2aMsQX59NTU1fi6IDW5tbS0INFX7Qv/CkD0L5THkZElDQ0PBd621fmyVApPa3d1dUCZZFoUpU6b49hWLe0iXCO0rddNoIIzV0ZwXwmBr3XsoO9NyNLRm9ldUp5ilNx2s2NHR4a+ndHG616effnqDVvlN7uGwVvZAcOmll/oodilXYfUTmfvDa8qcowGi85csWeInpzpp5cqVvnNkwhG13NXV5WlvVaXKAu6//34gd78HHXQQAPfcc49vuypkzZ8/3ysPb3rTmwAXXAbw4osvjtxNDwHWrVtXoJCuX78+r7oJ5FdHCc38+p6UqnBS6H/avLt8+fJha89wIz3P/vKXv3DqqacCObN1qICno5G7u7vzcv+BE0ZS7vWZhHSWNnJppJXUUICma6yHWTLSpu/NQUkrBsmN6upq31dS1KuqqvwivTlkN5D8EyZNmpQXJBaivLy8QAELXajkGiMZYoxh/vz5QE4ZljtNliBzdUVFhX/OImuampoKKjMK3d3dRTOlhJHtkBtPqgEP+YpsVl3piqGjo8PP+/TGP+yfYmb8tCl7NAKk+sLOO+8MwIMPPug3oWmErj7FsjKkFdGenp4CIil8rTUjzDks6Prl5eVeBmkciYy8+eab2XrrrfttV3a3hhEREREREREREW9YDAlXnd5xaMf5+uuvs2jRIsCxguBM/XvuuSeQY2xUzzVMkSPNfP369V5r1+5H7OkWW2zBdtttB8BTTz0FuB2lqkfofDFFY8aMyWTaDJmTFixYAMDb3vY2wDGlYkdVj7y3t5c99tgDyJm1Vb1B7gKlgnXr1uXVzwbHJmvnlmYCQyYx3MWn86qKkQ5ND4JYhtFEOm1Hsd17MTPS3/72NwA+9alPAc6SoIpQYZ5H7VbVt6EpJm2yHDNmTEHtZPW32JksQgygxkH4nMUgCfX19QWpiNKBBZsblBczlJ8yaZaVlfm5leW0SgPF4YcfDuTkfFlZWcHc0hgPj4XrVrofNF523XVXL5ezHGSn9lVXV/v0Q3J76erq8m1NB39Za4uuiekAVcmU7bff3s89XXP69Om+79Pud1lEW1ubl41igMMKbGn5HFblEkJGNSuBU2eeeSYA3//+972+IMtxmAs7LQPDdTWdcqxYyrZijGpooUv3VXt7e0FeZsmi1tZW3vrWt/bbrsikRkREREREREREZA6DZlKlQX/961/PqwMOuV1GWN1DnzU2NnrNPb17raio8MekyYcskxha7eT23HNPv2uUr8ycOXO8xq/dnd6vXLkyk2lE5Eeo3YYqR3V3d3vm67nnngPcTlbsz1ve8hYAfvnLXwI539tShNpezO80hPoj9CFKVxEKHd91LfkxbyjdxXChWKqX/tontLa2cuihhwL4mtl6v+OOO/odaciMyY9M/aB5WVNTk1d5R99L13LWTlhsUhaRDg7rDw0NDb4tpVrUYWOxcOFCwI0fBStIVk6cONEHFmW5YMNAIctZiLSvYViBKs2ipZl3yMmJnXfemQ984ANDf9NDDM310Edf/TJv3rw++yNkWUOk2cTQUiGLnfz7KysrM7mu9oXy8nI/BnTfYZB1OlAoDDZKy+eenp7MWGePOuooAP7nf/6nIA2Z3re1tflYA42Fjo4OP2bSgVPheeE4SRd+CX2Si6UoE6Mrhldyp7a2lo997GP9tisyqREREREREREREZnDJifz/+AHP+hTSL300ktAbocV+rppx7Ju3Tq/S5Wmre9tueWWPoG4NPPu7m6foF5+VnPmzAGcj54YEkW/hz6H8q0Tk1RRUZHJaNYTTjgBgD//+c8APpp0p5124q677gJybamvr/fRy/L31Q4ni23rD/Pnz/cshtrQ1NTkd3pp35aenp6iu/4wHRXkGPpwN6hrPfDAA0PZhAFjIFGgq1at4rHHHgPg9ttvB+Daa6/1u0/tOOfOnQu4dB7pnX11dbVvt/pBFoXQJzWcG2l2Vd9vaWnx6eJ0D1mBxnqxFHfpMoXjxo0rYFB1vtq+uSGUn+k69pAr2LC5MsvpNDhCKD9khejq6ipgz0qtX8JS2lp35et3//33F8ifUDb2l1orXfyjurraM7Raf8aMGVM0UjyrqK2t9bJR/aL+a2trK5qovpgfM+Snb8oK7r33Xv/sizHA6TEeZtQpNu6LtS9tDQyzR4RZM3ROuviK9Lzp06dv0I950EqqHKkbGho4+eSTi56zdu1aT/Pq/JaWFj+J0maWrq4uHwwUOummK0CoQ9auXesdnnWssrLSCyaZxdVBYWWMLOGAAw4AYL/99gPgiiuuAOCcc87xZk2Zc9ra2rxD/AUXXADkhNG55547cjc9BGhra/M1fMPcnGprOjVKGAiVrtet4+H57e3tBSZr5WcbLfzpT3/i0ksvBXImD82RUBho4m6zzTY+YOP5558H8DnwmpubC3KhFhOaOicUVKFwlgKveRYKKvVf1pTU9OYmRFpJraurKzBbZjm91lAgzFcphV4Bp3V1dX6+ba4puNIuLGGwiF5rLejp6Sla3Q6KBxtmEeGGXq+V5gcKFZNimzuhWK5qfW/evHmeNLrjjjsAJ6c3Jg3laKO1tdW7Diptk+ZDsQqGYRqmtOm7rKwsc8GHDQ0NXodQMJXWjGK5sru6uvod4/0FRxVL7VfMXU9yRnqg5O+//vWvDbYn+7MvIiIiIiIiIiLiDYdBM6liJ+fPn+/N09KOlQJo/PjxnrkKNXWZ7RVwJeazrKzMfxYmck9r8mEi2XSi/7a2tj4dmXt6erzT94EHHjjIlg895s2bB+Qqb7373e8GXJJqffaud70LcKYb7YpOP/10AG666SYAbrvtNo499tgRu+9Nxd///ncuu+wyAN773vcC8JGPfIS//OUvAD7Jb7FKKEJvb2+B6SGs5S32SKa9dHLvkYLM+F/72te8k77aJ1eVkLURE7ZixQrvPqPPlLJswoQJeTXrwTGq6ZRS4Q5Y80S76TDlStrZvqysLFPJqkNoDqQDPKCQSa2trS04L33O5ga1r6enx7MYGj9VVVVeVm+u/SALS5pB7O7uzitkoWNphrGY2b8vtjVLCAPDBMnDYjDGFBQ3MMYUzBddc8mSJUXTtmWp8tKGUMw1QTIzDAAK+0PtSxeOCc/LElSB8Mtf/jIA559/PuB0Mz2//tJGhWkfjznmGP9dgIcfftib67VeaXxUVFT4MRNWilQaNwW4//GPfxxwWyKTGhERERERERERkTkMevujncTs2bP9rkssqNirlStX+jr0odaulCj6rx3+mDFjCsqThekipO2Hu10xAvps8uTJ/hohc6Bzsli3fZdddgFy5RzFlM2ePZvTTjsNyDGBYdohsaza/ZVC3eQ0Pv7xj+e9nz9/fkFJtzAwSmMg3A3rtcaJxoRS7sDoMajCgw8+CDhmVCyg/D0V2FRZWel36mI6w51pugTwsmXLCvy1y8rK/C64WAJqHQvTxKVZE/V3lseTUoqlfQ+hMLVXRUVFAdtRakGGG4sw/V6aOezt7fXjrNQChAaKtN9dGCSSLg7S09NTNEgz/F7WEfpcK05DWLJkiY/1KJZiSAjLT6fLnOrY8uXLveVH6OzszGSsR1/o6uryOoGee5g+My0/Kisr/XlaW/T9LKWgCgtYSN5Jf5BuceGFF/oCQWGAcnrdCeMYfv7znwM5v9KQrVdfSd6MHTu2oFhAZWWlL+F+1VVX5d1zaNnoC0PC0YfVgsL/EQNDWrmS8jJv3jxPzUtBmThxot8MSMlXkM2GKjdkDcWCEsKcdGHVC+jbrBJWJ4PcxNH7Df3mSOC4444D4LrrrvM5b9NZDKqqqvxrLaRVVVUFEfnp/0CeY38xc6b+p82YZWVl/voSNOrnGTNm8MQTTwD5QRhZgJRULRahMpE2d4b5ctUncrnYXCFyoKGhwedE1X/JDchlYtncIBO3nnPo0pJWPDs7OwsCYrKieAwUoZJVrG57OhCqWKBTeI5kiz7TNZuamnx2HaGnp8cHwO6+++6b2JLhR7iRl6zQeAnXH8nRzs5Of55kZPj9rASN9RcMJ/P/TTfdxDPPPAPkAt9eeOEFr5ym3cGstXlZMMC1PU0Whe5DcvFUZcxjjjmmz8p+A3ETieb+iIiIiIiIiIiIzKF0vJ3fABA7pFyv7e3tPPnkkwC8853vBOAf//iHT78js46ckkshVUqIYve71VZb+UCyMPUU5KeK6a+Ck44Vq8A1WuY73ct9993nA8N+85vfADlXgHnz5g3o/tTeMBBqKBG6ncjRPWuQ+TLNmm611VYF5s7q6uqC3H197ew3F4Spl9TmYmnKxJKUMtIBTS0tLQVuMKE5PJ22LHxf6kxqV1eXT1EoPPbYY97FSG4uYfvUb6G5X32aTk93zz33cPnllwM5829vb6+/fhaRdgcrLy/3/SAGUG0JWfWwMpmYU8kNjZNx48ZlJvhwoAFcu+22W97/rKO0tJqIiIiIiIiIiIg3BCKTmiHsu+++AN6xuauriz333BPI+ZHtuOOOPiBIu+Gjjz56hO90+BDWEi/GkIbpyoR0dRk5gS9dutT774pdy0IgxIknnpj3P4R8u+RTuGTJEl599VWguM+RfMXCqmpiANQf4U4/vdsOAxPTzvCTJk1iyy23HFQbhxuyJojpUeBGZ2dnQdBM+Fk6pc7mjrFjx/qxIbaotra2oGJXKSPNpHZ3d/sxnC5QEVbgElpaWnwfpf3bS6V/Qv9zWeSEBx980BcMUbyI5ktvb29Bf4TWGTGHmj9h0JRkaltbW4H1IstYsWKFtyDoOYcVqCQvdc64ceO8dVPnqb3Lly8vWGMihhaRSY2IiIiIiIiIiMgcIpOaIShyULv6mpoaH0kp5rCsrMyfFxY1KFWkS5nOnj3b+6SqdJ12r32lOUlHyWtHe/jhhxfsbrMSidkXlCIti6nSsgQ9RxUSkcXhySefLPA3ra+v94UTxBKpHOLmijB7g+SF5sfq1au9Neaggw4anRscQhQrZaoMKWqn+kDHQ9TU1ORl04BcOsWwJGaWIdavqampQE4qsnu4sHr1al+yOZ2eKgtIxz40NjZ6f0yVe1aftba2+kh/fW/u3Llsv/32QE7uyBKxxRZbbPYllkcbZhPMn6NvN900DLUdZ5P745ZbbgHg9ttvB5wZSkJWitrYsWO9OUeLztve9jYAzjjjjE35+cz1x7PPPgvAQw89BDiFRKb8MAWIXu+9994AHHXUUYU3s/HVYjLXH6OM4bB7Dl74pOTWKJllMztGpKR96Utf8iZe5VU+4ogjvIuQFt8hCiTLTH/cd9997gKpeR/WmZdMraqqKnCN0f9iwZcbgRHrj0ceeQSAW2+91buNHX/88e5L1hak8SsWeDoQhAqfxtPSpUt9pcMNXCsz46M/KFWb0pctWrSoIBhtiFAS/TGCKNof0dwfERERERERERGROWwKkxoRERERERERERExLIhMakREREREREREROYQldSIiIiIiIiIiIjMISqpERERERERERERmUNUUiMiIiIiIiIiIjKHqKRGRERERERERERkDlFJjYiIiIiIiIiIyByikhoREREREREREZE5lKSSaoyxxpjtB3DeNsm5pVs3dAAo1f7o774H2qYi3zvTGHPfpt9dxOaKUp0vESOHUhwjUZ72DWPMPGPMEX0cO9gY89JI31PEwDCkSqox5iBjzAPGmLXGmNXGmPuNMW8ayt8oJbxR+sMYc5cxZo0xpnq072W4YIw51BizaAiu0xL89Rpj2oP3pw/FvZYq3ijzZTBIFtl2Y0yzMaYp6aezjDElSTQMFm+EMRLlad55wy4vrbX3Wmt33MB9FFVyjTGnGWOuydJmpS+UqgwZspszxtQDtwA/ASYAWwIXAuuH6jdKCW+U/jDGbAMcjKsb/I7RvZvsw1pbpz9gAXBC8NnvdF4WhN1I3sMbZb5sIk6w1o4DZgLfBc4DLi92ojGmfCRvbCTwRhgjUZ7mY6DycrgwABn4duCvw30fQ4jSkyHW2iH5A/YFmvo4th1wB7AKWAn8DmgMjs8D/gd4GlgL/B6oCY5/HlgCLAY+jJvA2yfH3g48AawDFgJfD763TXJuxVC1M/ZHQVu+CtwPXALckjr2a+D/AbcCzcC/ge2C4+F9H5Tc76FFjlUD38MJqWXAz4ExfdzPmcn9/DTpuxeBw4Pj04GbgNXAK8BHg2PVwA+Tfl2cvK4GxgLtQC/QkvxNH4K+mwcckbw+FFiEExpLgd/2dT9BO+9LXS/ss+OA55N+fx34n+C844EngSbgAWD31D2dl4y99UM5VuJ8GZqxEny2XzIm5+Dm2qW4BbMVOCIZ638EVgCvAZ9OfffRpN3LgEuSz2uAq5O+bgIeAaaOdvvfKGOEKE83ag6kjk/CbWKakvu5Fyjb0PMnkb2p3wll4LXJvbYn9/qF5LyypP8mJX1pg/YcmBw/H5gPLAeuAhpS4+ZjSd8sIZDRwzR/CvqPEpAhQ9kB9clN/QY4FhgfHNseODIZoJOBe4Afpjrv4aRDJgAvAGclx45JOmBOMrivIX/CHQrslgyI3ZNzTxoOARL7o2g7XwHOBvYBusLBmAz6VclgrsAtHNcFx23SF8fgBOp+6WPJ6x/gBOEEYBxwM/CdPu7nTKAbOAeoBE7BCaUJyfF7gJ/hJtKeuMn3tuTYN4CHgCnJc3kA+GbQr4uGos9SzzlUUruB/03GxZgN3M+Z9K+kLgEOTl6PB/ZOXu+FE5j7A+XAB5P7qA7u6UlgBn0sXHG+jPwffSzQuMXxE7i5thZ4S9KWWuAxnNJTBWwLzAWOTr73IPD+5HUdcEDy+uO4+VWbjI99gPrRbv8bZYwQ5elGz4Hg+HdwCndl8ncwYAbw/PPuhSIysNhvAwcAD/Y1DnCbnVdwc68OuBH4ber8a3Fjbrek7/ps3xCMraL9R8ZlyFB3ws5JQxclA/smimjQwEnAE6nOOyN4fzHw8+T1FcB3g2M7EEy4Itf+IfCDvgbOSP5t7v2B2613AZOS9y8C5wTHfw38Knh/HPBi8N4CX8LtNOekri2Ba3C7upAxOBB4rY97OhO3MzXBZw8D78cJnR5gXHDsO8Cvk9evAscFx44G5iWvD2X4ldRO8tmd/u7nTPpXUhfghEV96pxLSRaK4LOXgEOCe/pwnC+jLz/6Giupzx8CvpL021XB5/sDC1Lnfgm4Mnl9D85UPil1zodJsetZ+tucxwhRng5qDgTHvwH8pdhz28Dzz7sXisjAYr8NfBO4oK9xAPwLODt4v2PyfCuC83dK3dPlwzh3ivYfGZchQ+owa619wVp7prV2K9yudDrwQ2PMVGPMdcaY140x63BU8KTU15cGr9twmjnJNRYGx+aHXzLG7G+MudMYs8IYsxY4q8i1RwVvgP74IPB3a+3K5P01yWch+mqH8Fngemvts338xmSSHV3i7N0E3J583hdet8lsSTAf12/TgdXW2ubUsS2T19PJ7099b6SwwlrbEbzflPt5N24Rm2+MudsYc2Dy+UzgXPVl0p8zUtddyCjgDTBfhgNb4kybkN/OmcD01HP+MjA1Of5fOGXsRWPMI8aY45PPfwv8DbjOGLPYGHOxMaZy2FsxQGzmYyTK0wHCGLN1GFSVfPx/OOby78aYucaYL6a+tqG+CzEQGXgc/fujFmt/Bbk5mP6dkV5vhEzLkGGL6rLWvojTzOcA38btGnaz1tYDZ+B2dAPBEtwiKmydOn4Nbjc9w1rbgKP7B3rtEcPm1h/GmDHAycAhxpilxpilOJPQHsaYPTbiUu8FTjLGfKaP4ytxvkC7Wmsbk78G6xzp+8KWxpiwzVuT84uaYIwZlzr2evJ6MW5ipr8H7nkNN9K/0d/9tOIWGwCMMdPyLmTtI9baE3Gmtj8D1yeHFgIXBX3ZaK2ttdZe2899jDg2t/kyHEii2rcElCIofG4LcexY+JzHWWuPA7DWvmytPQ03Pv4XuMEYM9Za22WtvdBauwvwZpz/8gdGrFEbgc1pjER5unGw1i6w+UFVWGubrbXnWmu3xQWdfc4Yc/hgf6K/94m83QJ4vI/zoXj7u3HuIkJ63C1mBFEKMmQoo/t3Msaca4zZKnk/AzgNRyWPwzkTrzXGbIlzUh8orgfONMbsYoypBb6WOj4Ot5vrMMbsB7xvU9syFHgD9MdJOFPPLjhfpD1xprh72bgBuRg4HPiMMeYT6YPW2l7gl8APjDFTAIwxWxpjju7nmlOATxtjKo0x703u66/W2oU4M8R3jDE1xpjdcbvBq5PvXQucb4yZbIyZhPPF0bFlwERjTMNGtG1T0d/9PAXsaozZ0xhTA3xdXzLGVBljTjfGNFhru3CO7b3J4V8CZyXskDHGjDXGvD210Iw43gDzZchgjKlPWIvrgKuttc8UOe1hoNkYc54xZowxptwYMydZlDDGnGGMmZzMr6bkO73GmMOMMbsZF9m7Dmee7C1y/RHHZj5GTiLK002CMeZ4Y8z2iUK9FtefQzV2l+F8MoVjgdsDhnlF8lvhOdcC5xhjZhlj6nAbqd9ba7uDcy4wxtQaY3YFPoQL6Bp2lJIMGUomtRnnw/BvY0wrTnA8C5yL81vYGzdwbsU5EA8I1trbcD5Ad+Co/DtSp5wNfMMY04ybBNeTDWzu/fFBnG/KAmvtUv3hokBPNxuRvshauwAnWL9ojPlIkVPOw7X1IeNMef/E+ff0hX8Ds3GswUXAe6y1q5Jjp+H8gRYDfwK+Zq39Z3LsW7hoxaeBZ3C75G8l9/giTujMNc70MRJmmf7u5z84H6x/Ai+T2wkL7wfmJf11FnB68r1HgY/intMaXL+eOcztGAg29/kyFLg5uc+FOB+yS3ALWwGstT04BmNPXFTuSuBXgJSCY4DnjDOV/uj/t3fm0VGV5x//ZmYSEgJJgCCQiERZXHBBxbVqqVYtSq2n1WO1VdRq1aJWjutR63LqadWK1qVq5bTVUqmI/hRRWwWpKIIVd0QkbGIIBiGBMEkmmcnM/P64fp/7zjuXkISZyQ19Pv8MTO7M3OVdv88G4KfJZDICYCiA5+BMLisALIRjvvMDu3Mb0fF01xn97bU0wQnqeTSZTP4nA98LOL62t357rtfBSj2VTCZb4Nybd7495mg4vs4z4PhurgPQCuAq63sXwnkWbwC4L5lMvp6h890RvW4MYeSboiiKoiiK0gHfbhjqAOyTTCa3d/M7quAs/PItZVWx8HWlAUVRFEVRFB8xEE5Uf7cWqErXUCVVURRFURQlR6iS2nl0kaooiqIoiqL4DjX3K4qiKIqiKL6j0xGDHvR2CTbTuRD1fqSi9yOVbt2PZ555BoWFhQCAgoICAEAikZ7NIxAIyCutI3369En5W2trK37wgx905zSA7OQO1TaSSpfuR0ODk3978+bNWLx4MQCgqcnJa37VVXYQcSq33XYbAGDixIkAgEgkAgAYN24cBg4c2JXTMPFFn/ERej9S6dH7wTbe0tKCRYucZCgVFU5SgSOOOKJT31Ff7yQ1WLbMydg0cuRIhELOMmrYsGFdOR3AR+2D17Vq1SoAwAsvvAAAuPjii7HvvqmJH2bPno33338fAHDZZZcBAPbZZx9kAM/7oUqqoiiKoiiK4jt2xSdVd3Wp6P1IRe9HKl26H1999RUA4I477kB5uVOB0VRLCf+d921BmGQyKf+mkpqf71Ska2pqwjXXXAMAGDRoUFfPX5XUdHqkjdx1110AgHg8DgCorKxEMBgEAEyfPh0AcMghTpGiiRMnijJaVFQEAJg6dSp++tOfAgBOOskpyPPRRx/J9++3334AHFW1i+gYkorej1Ryfj+ampqwbt06AJA+MmDAAMRiMQBuf6Gieuyxx+JPf/oTACAcdqq9jhkzBpWVTqVXKocrV64EAAwdOhQbNzpFolpbnYrWlZWVGDy4oyqzgi/ax7XXXovPPnOq6HLe2bJli7xSSe3b1ylwmEwmUVvrFBU76qijAECU1YULF2LMmDEAXIufOV/tBM/7sSvmfkXJOdxU5eWlt+f33nsPANDY2AjAMY/36+dU+xs+3Kk+t8cee3T43V7f2xNwsBg8eLCcO839XJzk5+fLwMgFKQAZgLkQ5f+3bt2KzZs3p/xN8Td81pxgV65cKRPC+PHjAQB77rkn2tudAOGrr74agOMmAgCLFy/GAQccAAB4/PHHATgT6yWXODne2We4MI3H46irc0qc83Xo0JSKu4rSa9i4cSOKi4sBAP37O0X14vG4jH8XXeTksb/77rsBOJu1NWvWAHDcAng8XWu++eYbAJB5JRwOo6ysDACwbds2AEBNTU1nF6k9CueOmTNnorTUyc/PhSX7fH5+Ps47zymwtnDhQgDAunXrRDipqalJ+c4rr7wSr7/u1CPowuK0Q9TcryiKoiiKovgOVVKVXkM8HhdFiSxYsAD/939OBcTt253cyjRrjhgxQgJJuMstKSnB/vvvDwC44AKnJDbVU7+oqIBroi8qKpJ/U0U27wGd9m2zP+AqqDwmFAqJyvy/TkeKPACsWLECAPDSSy8BAG688cbcnJiF3d7ffvttCdD4/PPPAQD77ruvtPM999wTgBsQtXr1agkYOeywwwAAv/rVr8Rcye+PRqMAnD7G/sPgkMGDB8txtrKrKH6E431LS4uopmzjgUBAAoXYX5544gkAwJo1a+SzZPTo0SgpKQHgtn8qqolEQsZZKrbt7e3yHVRZ/cj8+U712nA4LMG59jyyZcsWHHjggQBck348HhfLHdVYfn7r1q0ZP09VUhVFURRFURTfoUqq0msw1ZvZs2cDcFJl0Fdzr732AuA6wdfV1YlfEXeI27dvx8svvwwAeO211wC46UemTp2a7UvoNFS/iouLxZeK7/FaotGo7Hh5b2KxmCivbW1tKd8ZDAZl19/b2ZkSujO8As3IunXrxLeTCiV91zryac4ktmJJn7jFixdj7NixAIC///3vAICqqirxO+Xxxx9/PADn/NnOGUwViUTk+xhUxd+LRqPSzqg8ffXVV9h7772zcp29kRtuuEGsMFSZVGH2F83NzQCcYB+OFRz7+vbtK32eiiqfW1VVVdozjEaj4stvjzvmsfTnLCoqkv7lZyX1v//9LwDnvthpDTkGjBw5ElOmTAHgxkQUFxdLe6eVjkpqbW0tvvzySwDOvcwEqqQqiqIoiqIovsN3SipX6ObOtKu704cffhiAG8134YUXAnB2OpmKOFN6liVLlgBwohAZmUjV64MPPgDgRB4yCpM76wEDBki0PPniiy8AOEnR/RKVaWYoYOS2rZCa6ePstFP8LODu8AsKCsSHqLeTKf9h83vmzJkDAJg2bZqME7x3LILw4YcfZuR3d4Y95jEKv3///pI26t577wUAzJs3D4ceeigAN+qYCulRRx2F559/HgBwxRVXpH032whV04KCAlFRyOrVq0VJ3d2VQi+F/s033wQA3H///QAcP0amJCK727zSVUuFfTwj5J944gncc889WTjDzhEMBqUPc/w0rU3EVFa59uDngsGgHG+vTwKBgPyNY2s8HvdVfMOO4DwZCARkTuG1cM7p27evrKP4XiQSER/dr7/+GoC71orFYjI3Z0pJ9d0ilYOg12DIm8S/eTWEtWvX4rHHHgPgDhxnnHEGAGfgVrPM7gEnzXA4LE7qNOcwv11ZWZksLmjib2xslEXtkCFDAED+T8d3P8B2WlRUJAtPtndz0OXgwmsPBoNigjHfA5wFLBcjisv5558PwE37NXDgQAnC4+u5557bMyf3LU8//TQA4Lvf/W6aqb6+vl4CoZhKiumjSktLcdNNNwGAbMAaGhqkzdvuBKWlpbJwJW1tbXJv6FKzu2LPKXPmzMFDDz0EwO2Tjz76qPzdnk/8lMaus3gtSPlvji9sT3vttZfn9dnvjRw5EgDwyiuv4Mc//jEAN6dmLjDHPq8KfXYOT/MecPwkyWRSjuNcw/tSUVEhAgjvQVFRkbQLP7N69WoAznlzXrDz5odCIbl2c4HO4ykM0dyfSCTw9ttvA8jcmLl7bf8URVEURVGU3QJfKKlUSEOhkFSHeOuttwAAkydPluPsHY4XkydPFlWAwQ5UHBKJhCqovRhTpWAaqbfeekuqY9DcwmCpCRMm4OijjwYASVNVVFQkSitfqQ6xooYf4E4/FAqlOambShf7jqnomKYoACnpQnrDDn9XsdWAjpStu+66S8YcBjmMGDFCzPo0kTOQKheYqdaoYDEt1B577IENGzYAcNU7nj+AtKCneDwuibnN4Cj+m2Ml29TLL78srgNUi8rKyuQ3dicllWqbbfoF3BRkr7zyilTc+cMf/pB2nD2f9DYVFUi3uJjXdMIJJwBwk7aXl5dLm2S99srKSgnco1o6adIkAMAjjzyC9evXp/wtm7Bdm0FSnBc4TwwbNkz+bo+VeXl5aeOHeRznCL7G43Fs2rQJgGvyHjhwoARk+dlyy2caDAZT3MQApBSJ4djD8aBv376ioNpzZiKRkMCpTKFKqqIoiqIoiuI7elRJ9UpO/pvf/AaA69Q7a9Ys8Wk57rjjALh+VyZMI7RhwwZJWv373/8+S2fec5jBX1TbuHNpaWkRnxn+bc2aNeK/edBBBwFwnZ2ZPqU3E4lEJFkzd4Ms2TZgwABUV1cDcBP3z5gxQ3xRGZzkl2ApEyqkgUBAnjdVMjOxOvsQn7fpf8XP0WcqGAz2SqWnq5gBDzvijTfeAOD4HLJf8HNPPvkkrrvuOgC5VVCJed4MmKKaV1lZKYF+VDgmTZqEtWvXAoCoVkxS3tDQIN9n+5oCbpui2jpmzBhRaqmyTpw4EYsXLwbg+MT2Jmx/S9Ma05GCyvrtZ555Jk477bRd+k2/w3ZBpSwYDEp6IiatZ/uIRqNSTILjytq1a6V9zJ07F4Bbgre2thZ/+9vfcnEZAFwfcs4FZkDb8uXLATgWNPrMsv3TSrWjZ2YHUzFAceXKlaIsMyCXllv+FuDPVFRMp1dTUyNxO7wPM2bMAOAUv7GV5UAgIOsMrrU4lzY1NWHVqlUZPU9fLFLZkL755hsZXDkAr127Fvfddx8A4J///CcAt4HcfPPNErlqSu50dCec8E16WzQm71V7e7sMKq+++ioASPRkVVWVyPQ090UiEVmUcjFWW1sLwOlgtgO5nzHdNTiBxuNx/PznPwfgXgNNEdXV1TLhsl1NmTIFY8aMAeBWGfEy7/Q0fMZNTU0ycPL6OJAEg0GZWPi8CwsL5Ti74tT/Cvbi1FyYfPTRRwCAH/3oRwCAsWPHSlvi337xi1/IZpn0lNmOiwROfLW1tTIp/uc//wHgjIfceHFDz7yOpaWlaVWlAPd6+L2ffPIJAEhfAtzo3IMPPlj6lJ/Nl17Yiw7z/4xCTiaTePHFFwFAopZpvuYr4C5oCgsLUxa99vf3lsUp4RxgmnwvueQSAM5G3zwmHo/L/MtA09LSUhFCxo0bB8C9t1u3bpX3cgHHQ875xcXF2LhxIwBX5AoGg+IS5rVRsUUgEz5vLj4rKipkccqKTPvvv7+sX9hm/LRI5XjHtUIymcTJJ58MwK1iRwKBgBxH035ra6uMJd/5zncAuMLXypUrMz7f+H9loiiKoiiKovzP0aMSi63e7bHHHrj77rtT3qutrZWVP3cxrJwSDoelVixVoxNPPBGjRo1K+Q5+zmvX5GdMBYivpsmOcj3NLm1tbWmOzEcffbSoiFRBFixYIH/vDQqqF1Q8tm3bJpV3uKsjBQUFcs10idhvv/3w5JNPAgCWLl0KALjllltycMZdgymCNm7cKP+2FZr+/fuLUszAlsMOO0yumW2FO9tEIuFp8t3dycvLw8cffwwAOOaYYwA4QXWAow7QpH7kkUcCcPNhmlA5bG1tFVWRbiXZgEoolRgGM33xxRfiukJF66abbhLFj/2f5tqDDjooRXnnd/KzNNNRNTWDtm699VYATj+hiZepqHprBaply5bh2WefBeBeQ1VVlYylBx98MADg008/BYCUnLFMs2PS21RTL+w54JlnnpH0RJxrad415xevPKJsT7TW5TpQ0w4WDQQC0mbZR2KxmMyZnV0T2GmYeO2DBg2SgClaOBobG6XP2TmH/QCtJqZlhe2Y8wlpbW0VVZpqcCAQkPUWFenDDz8cAPDUU0/Je7wfdBXpLr1zhaIoiqIoiqLs1vjOWc12Oq+srEyr7sFjTj755JRUCQDw29/+Nu07uVsKh8Oiyo4YMSILZ++NlyM93zN3mmYaDPt4+rtMnz4df/7znwGkKz9egTHBYFCUHwZVePna+IXOJsPmjr6srEx2+fPnzwfg1i3fvHmzqCVU11esWCGpN+iPZ/rQ+MXnjkqxmUia8P6Ew2GceOKJAIB//etfABwFw06pxd18Xl6epxrkRzIZfLJs2TJMnDgRgFs5ikriO++8I751TFNmwnt35513AnD8vxkUctlll+3yue0IjlN8NVNQ2T5+o0aNEqsAg0N4fZFIJM2SEgwGRVHne+xDZrunX+LFF18sbYljCV/5O37F7s+vvvqqKEhMobR161YJIrXHxpqaGkl359UW6QNJS80DDzwgQTnXX399Ji8lK5iBuAyWueCCC2RuoWLG+xKJREQ55GskEpE+RLWN/YYKda6gkss5f9OmTTLe8z223c6STCal/fA+8L5Eo1H5G9XZ9evXY/To0QC842F6GirL7BulpaWiMt92220A3PmnsLBQ7hf9cIuLi8W699prrwFwAypLSkqkfzEIUZVURVEURVEUZbfDV0qqGSlpp9YB0tWtRYsWiUpAlfD555/HNddcA8BRUAA3invevHk455xzALjKSC4wI0Ht9DgdRcIlEgnJXkAFLD8/X2p28x499dRTABxFgLtb7vCHDRsmOxuqHvx/Q0NDSroMv9CZZOxmdD9TUHF3R/+6wYMHiwLFV7P0aUVFBYDcquqdxa4VDaT7mDY0NEhqIkaBv/TSS2J5sNOr+K2mNPuCVzlGuwQskFrC0C5w4JWlYt68eQCAc845R4o6sN/R53PDhg2itJCVK1fi9ttvB+D6LbPE36xZs7qckqg78Hf5LNnevZLpX3LJJZKyj6oHfW4B95rZB8yCD2wjY8eO3eG5JBIJ+V4eT38z2//fb9hzxo033uh5HBO902LFcXHy5MmYNWsWADexfX19vRSboa8zlbNx48Z5pkjsSTqyTpn9hb7O+++/v4yTjIznnFFaWpqW2WDAgAEyXrF90MLJ+TlXcA4wy7ny3DhWtLa2pqWc4rWYY4sJ3+M8TMXWPJbz0KpVq2RO4XzsJ5h+j8poeXm5pO7iWMhxJ5FIyP2jr2leXp7447McM78rGAzKXMS1y/e+971dOl9fLVK9OpI5oJLPPvsMgGNKoBmK1Sy2b98uKYaYr4s3PBQK4fLLL8/OyXeAORnbZoPly5djzZo1ANwGQtNRKBSSTsFGv99++6WklwGcqjmAk9+RnZPfHw6H5ftovmOH/OCDDyT1RKbprrm2s8dz8IzFYjKB0mTHAfXhhx+Whd2FF14IABgyZEiaEzwHVD/Bwa29vT2l0gfgTizt7e3SnhjYAqQuxAF3cRsOh301aHq5tRBOdlxY2Zj3AEjd7DH4km4wxx9/vDxrDqD83FlnnSX3hxvY9957DxdffDEAt8oQB+GlS5fKuWXT1P3ggw8CAH79618DcM3xZkok0tjYKJMmr4Vm/z333FMWXPYxJgyU8QqIuuqqq/Dwww8DcO8f76dfF6n2nLEz9x1Ougyso+vQT37yEwm0ZD7dBQsWSMDuqaeeCsANHIlGo75L+bazMZUbXW6AqqqqZNHCsdVc4NGkT1N+3759xTzMV3MjnUts94Lhw4enbNhIV9MO2uISX2n2B9w5pq2tzdduVfbG4ayzzpJNF+HCtLm5WcZgXhPnI8B1s/z3v/8NwHGBYjq38ePHZ+R81dyvKIqiKIqi+I6cb/k6GxhjYh/P9BaxWExUMO787r33XlGSmD6DBAIBSXqdC+xiBQAkXRJ37scdd5yoWzS5ccdSXl4uZqjf/e53ABz1lEUNqKzR/Nje3i5qCdXZs88+G8888wwA1wzOeuTTp0/PmpLa1WfckfLqFcxkpiWjssXk5qx+UlhYKCaYiy66CICjGlD14I6Qqoj9Gz0J22ksFpPr4+7WTM7OnSytBW1tbaJ+sB3xnra3t4vS4QdMk74dHMbde1NTk1yHaaKzCxxQ6bz00ksl/RKTd7e2tkpQA1VEKqlLliyR45jg/8Ybb0xLyUIls3///jlRSajacZxgIQ6vIIRbbrlFrt+LjhLx837QXWrZsmXy24T9xfwu9is/YY4hO+rHS5cuFRMlx0izdjnVRCrEZ5xxhgSF3HzzzQAc1wCOpZyLaN065phjdqj+9xSJREKUQPYhWpsGDhwo94pm2RUrVkj/oArP5x6NRuU9Wm/effddmbtY+ZFWPqY78hOxWKzb4zzXG17jKMcMP6uogLuW4CvgWgS4FuG4YKbcY7s2iz5QVaebzMyZM1O+NxOokqooiqIoiqL4jl1WUjtSRhOJhPhscPXdncANW2Whf1RbW5vs3LiznTFjhuzq6uvrAbh+I5FIJOvJ65PJpKeCCjgqz0knnQTATYUzc+ZMSfdBX1oTllyjctjc3Cz+t3TaZ4DIsmXLRDGkj4npf/boo48CcMs/jh49WsqZmT6NPUFH7cLc9S5atAiAqwqNHDkSb775JgA3tQafd15enijsbBPRaFQUFCru1dXVACDBNX6A/o7Dhw8XHyK2Z96P4cOHSxvjjrasrExUVapr3NkXFxf7SkklXn2S6v/1118v/th89oDrszpz5kwAbnDk0KFDZUygAlBfXy/jDz/3xRdfAHD8VVlWmEpBdXW1KE+8r1SgiouL0wpmZBpaQwBXkWL/j0ajaUpdNBqVNsL+TqVsw4YN8jeqYwUFBWmlUtn/6+rq0pRUwH1GDJjiM6mrq9vlFDOZwivFHws1UF0vLCwU32PeWy/4DBKJhPjWUWVauHBhWhJ4tqHDDz9cVO9sYvvcdqQiBwKBtFKfDPQaO3asBHrxHvXr1y/Fjx1ASv+h5YnFU9atW4eFCxcCcOcWKo777LOPWCFyWRrU9Dn1KmHL66E1zbw/XuORXZKadGTB6E1wDmT74LwJuKoxx85YLJYWxMtiMiaZSiOY0UWqnfszFAqlSMOdgZ/ld4VCITHV0SzH/99www0SrclF2UMPPZQSaQa4UWm5GDw6qt388ccfi3mIQVJ1dXXygFkv3OvhMs/j008/LVHpNLnxOr/66itZ1JrQ8Z/5HTnoJhIJWbD19CKVxONxmUzttvPZZ59JLksuFD799FPpMJs2bQLgLj5bWlrSgluqqqqkHjUXfXa9Yj8xf/58WUhcffXVANysFb/85S9lQc5J8+uvv8Ydd9wBABIkyHY/e/ZsXy3EzYBCu88wuv7kk0+WNjp79mwAzkTIBSuDI9kHGhoaZODk4mno0KFizmYQ4R//+EcATtAAg4Y4YZnBmnblp6FDh2bdJWTJkiXyXGla5T3wCnoKBoPSpnneZtUxjoe8L+FwWPqWHfn/5ZdfyjWb4yUDUng8z6OhoaFHF6lei5Fly5ZJ8AY39Ny4DBo0CH/5y18AAM899xwAJ6CUgXJ0FaIAsHDhQqm8xcWtFxyTw+Fw1jJodMadwYsNGzZg2rRpACA5thksNWTIEHFpMfPGcizlRo/POBKJYO3atQDcBVp+fr4sZBi8yr60cuVKca/gs8gFHT2DQCAg/dnOImS2J3OxaufPNfPH7izIszdhb74ikUha1az8/HwZX3g8N8JmxiA72Ky7qLlfURRFURRF8R27rKSauw3uXsx0FXSovfLKKwE4gUOsj2yrQECqAgA4O3s6dFMFevrpp9N+2zRjUnnid/H/2Uy/w93ohx9+KOYTqnh8HThwYFqt9VGjRomZmoovVULT9MAcdnPnzpX7xnQ0kyZNAuCYf+3giHA4LOoAgwHMCly5wE734ZX7kgSDwbSd19y5cwE4SimvnYq0WX+Y98E0Pdjm2uHDh0sKM6oEvO9+ZMuWLXJ+rCpF0+/YsWPTzE9btmwR8xrVQ7anuXPnSkqjXFgVdoaXWY3jBJ/b8OHDxcRMdXXYsGFy3UyZxDbuRXNzswQgsW47rQnLly8XVZHf2adPH1Ga2DepZOaCysrKtIAVnr+XKvHJJ5/gzDPPTHmP46fX8V4V5zhu9OnTJ6VPEVbXohJHvI7NJV6K2XPPPYcpU6YA8K54RJeo6dOnAwDuuOMOqSr12GOPAXDHkDlz5qQFiXm5uNHlqF+/fvJdmcb8TebF/fDDDwG4rhylpaViemcFqWHDhskzp6JM5b26ujqtjbS0tEj7oWWOnx8yZIgohnS1aW9vl/5CdzbOtUuWLMm6i11n4TXE4/G0VJAkLy+vw/O1VdP8/HxRjXuLkuplqWWAtu3KZF6TnVsWcMdw3oNsjAf+aD2KoiiKoiiKYtBtJZU777a2Nll9czfH3VRxcbE4WXP1/dFHH4mSavs/AK4CQAXjiCOOwM9+9jMArh+ZF6yXDLireVtlymb6KSpTRUVFeOeddwC494O/e+qpp4oqxooyNTU14mPLpPxMhUNnZiB1p0IFlIFWTNy9dOlSUdm4wykoKJBnQLWZ51VfX5+T2sq26tCRj0oymRQfwbfffjvl8/X19XL/zGAgtj+moKJaPX78eEn6T2WksbFR1DeqdWxzbW1tXfahzjbTpk3DtddeC8BNX8a2cMopp6Qdf95554layFRlvKbx48f7rhoOuemmmwBA+g7VqFWrVsmz5rmHQiHpA3y+tDTwHplUVFTglVdeAeBaH9j/SkpKpK8w6CMcDksfoRWEylMuVKHGxkZpk1RuvCpNMbinqKhI2jT7v5eSymvyKpBiVsDzqm3O72ewke2n5gd4TqNGjeqwH/NZsrY4AOlj9GdnOxo0aFCadcpLveXzoS9nNrn00kvx17/+FYA7hnEujUajMt4zBePIkSPl2dPKwvMcMmSIPG+qae3t7TJ38ns5xkYiEQmKYvvLz88XX28mdTf9lP1S3IDtI5FIdMpP0ksx5Od4P4GetyZ0FS8llTEpbAtmqj67MqAZEM92we9sbGzMuI+6KqmKoiiKoiiK7+j2Foc7CtOHgTsm+lOtX78+zZ/niiuuwOTJk3f4vdzpMb3F2Wef3aGCSugDY/oD2T4U2YxC5c7dTI7Pa+Hr3nvvLarpscceC8CJHuYOz/QjBZxIdPqE8D6ff/75HaoEjKTkTicUCslOj5/jrmfz5s2eaa8yDa+Pu1H+v6GhQVRPKud1dXWiDlA5e/fddwE4UadMr8QUQps3b5ZrpprNe0W/LcBtkxUVFWkJ3enz2NTU5Dsltb6+XiJmmRGC12cmWSfbt28XdZz3iG0hU2XqMs17770nvnVsj+wzDQ0Nkl6OaVGSyaQoeoyqZnaP0aNHi6/h1KlTATgZP+iLR99BKkRmeh72i7322ktSs9k17nNRVnb58uUp0dSAW6zBhGPDiBEj5LzsvmaqWHbkv4kZrWumwLLh2MQI71zXZiemGkT1jud93nnnpanBHaXDmTRpkqirDzzwAADXBxhAWvvw+g4qsNkslctrevHFF8VXlBH5HAsqKiqkv9AyUF1dLfOOrfrFYjF5pmZWHlqs2OdozaCfO+BdWpRjNX1UgfQyzT2FmY2A/Z/XbPqrmiopkGo9sVN5Af4sq90Vtm/fnhaXQWtdQUFBWgGIeDyeNr7wPtbU1KQ8+0zQ7UXq888/D8BxpKcpiLnXOGAmk0m5MDaKQw45xDPFCeB0Kpq6mW6KuT2B9EArLwf2oqIi6ZBsSGat2Vxi5q7MFV1pILkw/a5du1bSBNHExJRP33zzjQy2XGyUlZVJDsbXX38dgFsRqry8XAKmOBmUl5eLiZMuH/z/1q1bxdWC6abC4bAMKpyY2D42btzou0o64XBYFpcMDCM0z9nHc6P0wx/+EICbsi0XG5KuwI3J5ZdfLhOZmcuTr3w+PKa5uVnaBJ8X/7Zt2zYJtLzqqqsAOLlQZ82aBcANHuQg29TUJAtXM2WVnT7l008/Tfl8NvFKM+UVlMFzMze6HGvMPIfETDvFcZm/ZS7GvRaxhJVpOOF7LZ4zTTKZTHseXkEfp59+ury3ZMkSAG4+aq+F5Z133gnAmXxvuOEGAKmLU+KVZ9OrehfgjGnZgm5vsVhMNt08J46LbW1t8my4+Y5Go7LI5OaC59/c3Cz3lvNrMpmUtsJ+wjHzwAMPxGGHHQbAvS9e95a/V1FRIS48PT3+mGmnbLcdcwNnX49XWirT/M++ZPep3kJra6uMsRRA+H9z7cT70KdPnxTTv/k3zr2ZRM39iqIoiqIoiu/otpJKxa68vDwl8THgKiQjRozwlJG5u2VNZAZ4lJWV4ayzzgIA3H///fIZrta9Aq1samtr0wJiGDCUzcApxZv3339f1AYmw2ag14YNG8SsSgUjPz9fTEbc2bOttbS0iKJE097mzZtFvaCrB1W2zz//XI7je4FAQL7DVk2qq6s9q+30JP3795fk/WaAF+Bek0lZWZko1Qxg5P3PpsrTHXg9EyZMkHGCLgpUviORiJw320N5ebkcT6sMzf/r1q3DLbfcAsANhpk9e7aopFTgqdgmEglReKimNDU1iVJFVYrtKBdWEaZI2hlUhurr69OS7NtptYBU1Y/XahfOiMfjHSqpHLNzyc6S1zNg8vvf/z6AVHWLig9TaD3++OO47777AEBS0U2ZMqVT/b6jBPG8z9msRjZhwgQAzrhmF3eg21R5ebmoWqZJm22F7Z9zqumeQPUzGAympWbimNPU1CTzOy1xkUhE2hF/m8+rsLCwQ/eRXMBzMosN2Up4R2kRd1acgZ+l2tzblNRt27bJ8+O12i5x5nvJZDLFndCE7dD8rl1FlVRFURRFURTFd3RbSWUwBxP6mlB9qKmpERWE6ZRqa2tlF8hV93XXXQfA8bnxCm7aUdoXr5X666+/Lrs+OvVzF0nfWSX7MJipsLBQnvcjjzwCwN2RtbS0yC6U6qZZ1pIBQFTLVq1aJf6t9H2JxWLyWaonbC99+vRJ28UzIAdIV5G8/NF6GlMZYbvmjt3LslBcXCx/5z3iNfdUkMuOoIpz+umnix8yU0pxbGhsbJT0NhxXtm3bJtfEtsRnPm3atJT0VUBqkQuzJjvgqCr0Z6XfaSgUEj+6I488EoDr89rW1tajgSBmInKOa3V1dXK/mAqJfchMN+XlR8nj2Id2FDi4Ix/MbMLnvXr1arnnpkUEcJ4jFT2mrkskEmI9u+222wC4SvsLL7wgQXannXYaADflX1ew5yQqqNkMrGMg4NSpU/HGG28AAB588EEAbkAg74FJKBRKU7xMP9vOBP6YwWP0f6XPq+mjaKcm2rRpk6Sc7Clsa25RUZGcJzHbtV0qtaO0c4FAQI63v7O34KWkmvE/vH7T+sLj7JRcZvvLlJKalQRm7KgHHHCA5CWkqSLb9HSHUBwYrW1W6mHD5+Kpvr5eJg8GVdXX18tChQE/ZjYCLszMQZd/t2uwMzAKcDvRgAEDZALj53hcripwdYWSkpKUqFsgNSeijTlhkK64y+QSns/IkSMlcpnPZty4cQCcZ8IIZjPQkotN06zI99kOeHyfPn3SolDZFvv16yftgBkA+vXrJ3kD+dvcMPkp+wMX+c3NzWmLbxIIBNIWmOZ77Bdc8La3t3suRHe0ODUXzZmGLh8vvfSSLFJ5nRwbCgsLZRHCBVtlZaVEoTMwkwF2S5cuxT333AMAGa0MRTFm3rx5OPfcczP2vTuCrjx8Ja2trRI0RqFg/fr10r9s83ZbW5sEPHOTXlJSInM4Ny/sP4FAQMYdfsfq1avl3/wc3WWKiookk01PYS/CvRadZiCUnbXArELl5QpjL+z8jn1969atS8tyQNrb21PyKwNOW+B79v3wCubdVdTcryiKoiiKovgOf5SCUHY7qCasXr1aTFM00XIn3tbWJqond2R5eXmirhLu4ktLS+Xf3B2bFXLsFGWDBg0ShY07v5KSElHruGvk///xj3/gqKOOAuCP2vZAqmmK6lFHFBcXp6UF4SvvhV8w8/bajvpm2in7WZiBTbZq3LdvXzmeO//8/HwxE1MZYhtLJBIpdc8BxzzINspck2yf2arL3llM1ZLXUlBQIEoo7xvvrZlSiu+ZldXMgCke393zyTTM93n77bdn7Te6i93ubr311h46k1QKCwslBRtfs80JJ5yQk9/pLhw/TfXYDJwE3HYci8U8lVRit/dEItGhytob2LZtW1r+V9Ocb19zXl6ejNe2SwRzeZvfsauokqooiqIoiqL4DlVSlawyatQoSYBu+pYCTrohpjPhDiwcDqc5+XPXVlhYKGog1c9hw4alJH4HUmtQU20y603T95QqkqnU+U1tLC0tFWWYu3+7XrKJV81s7mj9dm3EDGikgknVuKmpSXwOzcIgdgoU0z+X18n7U1RUlJY6is++vb09LS3P/Pnz03zxeM+zmWIoE/A6qaiaSjzbUTAYTFN/qJZEo1FRqUk2/U4VJduw/Ztt3p5jiNeYaiqCXhWneptPqs2cOXNkjKXvth0HYb6XTCbTUo1xXNzRfd0VVElVFEVRFEVRfIcqqUpWMev8csfJSGm+ZuM3ia0YRSIRUVXNnSHPLxe12bsKVUXeP6qGXqljotGovM+dPV/9UkO7I2xV3MzQkCu6k5KoJwkGg5Iyi9lUmCbIrGFvljDl+1RNqcDyc4qyu2AXNzBLfdpzQCKREJXU9LfkPEIrjVke1S4r63dstfiaa66RojpM99fZOAiOG7yPixYtyuCZOugiVckqPWEm9PpNmiH69+/vy4VoR3Axb9e1t82ygJPOiSYbDsp0jcjWpkDpWS677DI8++yzANxFphlUxU0NF6YNDQ0pKYIAN6jx0EMPlVyrirI7YC9OTbcnuv3wmEQiIQsuU1yxxQ5zQWrnGvY7tkn+lFNOwSmnnAIAUt1wwYIFABz3OAadMqgyEAjIfePGl2MGq4lmEjX3K4qiKIqiKL4jz8tRWFEURVEURVF6ElVSFUVRFEVRFN+hi1RFURRFURTFd+giVVEURVEURfEdukhVFEVRFEVRfIcuUhVFURRFURTfoYtURVEURVEUxXf8P5RmDjRcZBKXAAAAAElFTkSuQmCC\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "n_rows = 4\n", - "n_cols = 10\n", - "plt.figure(figsize=(n_cols * 1.2, n_rows * 1.2))\n", - "for row in range(n_rows):\n", - " for col in range(n_cols):\n", - " index = n_cols * row + col\n", - " plt.subplot(n_rows, n_cols, index + 1)\n", - " plt.imshow(X_train[index], cmap=\"binary\", interpolation=\"nearest\")\n", - " plt.axis('off')\n", - " plt.title(class_names[y_train[index]], fontsize=12)\n", - "plt.subplots_adjust(wspace=0.2, hspace=0.5)\n", - "save_fig('fashion_mnist_plot', tight_layout=False)\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "metadata": {}, - "outputs": [], - "source": [ - "model = keras.models.Sequential()\n", - "model.add(keras.layers.Flatten(input_shape=[28, 28]))\n", - "model.add(keras.layers.Dense(300, activation=\"relu\"))\n", - "model.add(keras.layers.Dense(100, activation=\"relu\"))\n", - "model.add(keras.layers.Dense(10, activation=\"softmax\"))" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "metadata": {}, - "outputs": [], - "source": [ - "keras.backend.clear_session()\n", - "np.random.seed(42)\n", - "tf.random.set_seed(42)" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "metadata": {}, - "outputs": [], - "source": [ - "model = keras.models.Sequential([\n", - " keras.layers.Flatten(input_shape=[28, 28]),\n", - " keras.layers.Dense(300, activation=\"relu\"),\n", - " keras.layers.Dense(100, activation=\"relu\"),\n", - " keras.layers.Dense(10, activation=\"softmax\")\n", - "])" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[,\n", - " ,\n", - " ,\n", - " ]" - ] - }, - "execution_count": 26, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "model.layers" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Model: \"sequential\"\n", - "_________________________________________________________________\n", - "Layer (type) Output Shape Param # \n", - "=================================================================\n", - "flatten (Flatten) (None, 784) 0 \n", - "_________________________________________________________________\n", - "dense (Dense) (None, 300) 235500 \n", - "_________________________________________________________________\n", - "dense_1 (Dense) (None, 100) 30100 \n", - "_________________________________________________________________\n", - "dense_2 (Dense) (None, 10) 1010 \n", - "=================================================================\n", - "Total params: 266,610\n", - "Trainable params: 266,610\n", - "Non-trainable params: 0\n", - "_________________________________________________________________\n" - ] - } - ], - "source": [ - "model.summary()" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhsAAAIECAYAAACwp+zzAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nOzde1hU9do//vcgM8MwwICDDgiYiqciHQ1NKQkRhEySLYJU2hml2kLmYStm1pOHysiy1CTRdttDgXZpF5n2GOm+HnX87rGCMiMSyhOCA8jxQWXi/v3Rb+ZxXDMygzPMAPfruuYPPp/PWutes8aZ27U+BxERERhjjDHGHGO3m7MjYIwxxlj3xskGY4wxxhyKkw3GGGOMORQnG4wxxhhzKPebCzQaDdatW+eMWBhjjDHWxe3evVtQJrizcf78eezZs6dTAmKMdS0XLlzg74dOcuLECZw4ccLZYTBmtVt9PwjubBiYy0wYYz1bfn4+UlNT+fuhE6SkpADg72LWdRi+H8zhPhuMMcYYcyhONhhjjDHmUJxsMMYYY8yhONlgjDHGmENxssEYY93Ejh07IBKJjC8vLy+z7c6ePYtp06ahoaEB1dXVJtuMHj0aV69eFWxzczuRSIQxY8Y4+pQc7sqVK9i8eTMmTZqE3r17QyaTYciQIZg1axaKi4vNbqPX67F161bce++9UCqV8PPzQ3h4ODZs2IDr16+7dDxLly5FXl6e2f0sXbrU5PqOHz/+ts7lRpxsMMacoqmpCUOGDEFCQoKzQ+l2PvzwQxARmpqaBHVFRUUYM2YM4uLi4OPjA39/fxARtFqtsX7+/PmC7QztNBoNlEoliAgnT550+Lk42uLFi5GRkYHExEScPn0aNTU12LZtG4qKihAeHo59+/YJtnn66aeRlpaG2NhY/PLLLzhz5gxSU1ORkZGBGTNmuHQ8c+bMQVZWFl555RXBft58800QEYgIvXr1uq3zEKCb5OXlkZlixhiz6/dDQ0MDDRo0iKZMmWKX/TmSXC6n+++/v1OPmZycTMnJyTZts337dgJAH374odn6+vp6Cg4OpvT0dEGdVqslqVRKSqWSANCuXbvM7kOj0ZBSqbQpLlf27LPP0ty5cwXlRUVFBICGDBliUl5WVkYAaPTo0YJtJk+eTADoP//5j0vHU1RURCKRiPLy8izG0atXLxo3bpxNsd/i+yGf72wwxpzC29sbZWVl+Oqrr5wdSo+xdu1aVFZWYsWKFWbrPTw8sHPnTri5uSE9PR2lpaWdHGHny83NRU5OjqBcrVZDJpOhrKwMRGQsP3/+PADgzjvvFGwzfPhwAMC5c+dcOh61Wo3k5GQsXLgQer2+w7HagpMNxhjrAYgIubm5GDduHPr162exXXx8PJYvX47GxkakpKSY7b/REzQ3N6OlpQV33303RCKRsXz48OEQi8UoKSkRbFNSUgKRSIQRI0a4fDzTp0/HhQsXsH//frvHag4nG4yxTrdv3z6TjmiGH7Sby//44w+kpqbC19cXSqUSCQkJKCsrM+4nOzvb2DY4OBharRYxMTHw9vaGp6cnoqOjcezYMWP7VatWGdtPmDDBWH7w4EFjub+/v2D/zc3NOHbsmLGNu7vFyZddVnFxMaqqqqBWq9tt++qrryIuLg4//vgjMjIyrD5GTU0NFixYgNDQUEgkEvj5+WHKlCk4fPiwsY2t19hAp9MhMzMTAwYMgEQiQZ8+fZCUlISioiKr47OFYebWl19+2aRcpVIhOzsbxcXFWLZsGXQ6HWpra7F27Vp88803WLFiBYYOHery8YwaNQoA8PXXX9s9VrNseObCGOvh7P39kJiYSACopaXFbHliYiIdP36cmpqa6NChQySTyWjs2LGC/ajVapLL5RQREWFsr9VqaeTIkSSRSOjIkSMm7S31wQgPDzfbH6G9PhvR0dHUu3dv0mg01p56u+zdZ8NQt2bNGrPbarVaUigUxr91Oh2FhIQQANqxY4ex3FKfjUuXLtHAgQNJpVJRQUEB1dfX06+//kpJSUkkEoloy5YtJu1tucYVFRV0xx13kEqlov3791NjYyOdOnWKoqKiyMPDg44fP27T+9SeyspKUqlUlJaWZrFNfn4+BQcHEwACQP7+/rR161a7xuHIeOrr6wkARUZGmq3nPhuMsR4jLS0NERERkMvliI2NxdSpU6HValFdXS1o29zcjE2bNhnbjxkzBjt27MD169fx4osvOjTOtrY2Yy9+V3Xp0iUAgEKhsKq9v78/8vPzIRaLkZ6ebvY2/Y2ysrLw+++/47333kNCQgJ8fHwwdOhQ7Nq1C4GBgcjMzERVVZVgO2uucVZWFs6ePYt169bhoYcegpeXF8LCwvDZZ5+BiGy6+9KempoaPPjgg5g4cSI2b94sqCcizJ07F7NmzcKCBQtQWVkJnU6H1atXY968eXjkkUfs2g/CUfH4+PhAJBIZPxeOxskGY8xljR071uTvkJAQAEBFRYWgrVwuN94aNhgxYgT69euH4uJih36pHjlyBLW1tYiIiHDYMW6X4VGVWCy2epvx48cjOzsbzc3NSElJQUtLi8W2e/fuBQBMnTrVpFwqlSImJgYtLS1mb9lbc4337dsHNzc3wTDpgIAAhIWF4bvvvsOFCxesPi9LmpubER8fj7vuugs7d+40O/xz+/bt2LJlC5577jm89NJLUKlU8Pf3x9y5c41zWGzYsOG2Y+mMeNzd3W95Te2Jkw3GmMu6+X/hEokEwF93Em7m6+trdh99+/YFAFy+fNnO0XUtHh4eAIDW1labtsvMzERqaipOnTqFefPmmW1z7do11NfXw8PDA97e3oJ6lUoFAKisrBTUtXeNDftua2uDQqEQTCz2/fffAwB+++03m87rZnq9HikpKQgKCsInn3xicZ6JgwcPAgBiY2MFdTExMQCAAwcO3FYsnRWPXq+HTCa77VitwckGY6xbqKmpMfsYw5BkGJIOAHBzczM702NdXZ3Zfd/Y+7+rCgwMBADU19fbvG1ubi6GDRuGbdu2Yfv27YJ6qVQKhUKBq1evorGxUVBveHwSEBBg87GlUil8fX3h7u6O1tZW4+Oqm1/R0dE27/tG6enpuHbtGvLz8006AA8ePBgnTpww/t3c3NzuvsxNpuZq8TQ0NICIjJ8LR+NkgzHWLVy9etU4C6bBTz/9hIqKCqjVapMv1cDAQFy8eNGkbWVlpcX5ETw9PU2Sk2HDhuGjjz6yY/SOd/fddwNAhx43eHl54fPPP4dcLsemTZvMtpk+fToACIZSXrt2DYWFhZDJZIiPj7f52ACQlJQEvV5vMrLI4K233kL//v1vq5/Ea6+9hp9//hlffPEFpFLpLduOGzcOAFBYWCio+/bbbwHgtqf57ox4DJ9/w+fC0TjZYIx1CwqFAsuWLYNGo0FzczNOnjyJ2bNnQyKRYP369SZt4+LiUFFRgQ0bNqCpqQllZWV48cUXTe5+3Oiee+5BaWkpzp8/D41Gg/LyckRGRhrrJ02aBKVSafI/TlejVqvRt29fi+trtCcsLMzsZFMGb7zxBgYOHIj58+fjyy+/RGNjI0pLS/HYY4/h0qVLWL9+vfFxiq3eeOMNhIaG4plnnsGBAwdQX1+P2tpa5OTk4PXXX0d2drbJ//5nz54NkUiE33//vd19//Of/8R//dd/4f/9v/8Hb29vwWOam4fhvvDCCxgyZAg+/PBDvP/++7h8+TJqamqwdetWvPnmmwgKCsKiRYtMtnG1eAAYhwzHxcW1G5Nd2DB0hTHWw9nr+2Hv3r3GIXqG16xZs0ij0QjKX375ZSIiQfnUqVON+1Or1RQUFESnT5+m+Ph48vb2JplMRlFRUXT06FHB8evq6igtLY0CAwNJJpPRhAkTSKvVUnh4uHH/S5YsMbYvKSmhyMhIksvlFBISQhs3bjTZX2RkJPn5+dl1CKYjpitftmwZubu708WLF41lOp1O8N6Gh4dbPMbzzz9vcbry6upqmj9/Pg0cOJDEYjEpFAqKj4+nwsJCY5uOXuOamhpasGABDRo0iMRiMfXp04fi4uLo0KFDgjgmTZpEXl5epNfrb/2GEdHUqVMFx735dfOQ5traWlq8eDENHz6cpFIpSSQSCg0NpXnz5lFlZaXLx0NElJKSQkFBQXT9+nWz9fYe+srJBmPMaq76/WBINroTRyQbdXV1FBQUZHZtlO7iypUrJJPJbjknRWdytXiI/m9tlE8//dRiG55ngzHGWIcoFAoUFBRgz5492Lhxo7PDsTsiQmZmJnx8fLBy5Upnh+Ny8QBAeXk5kpKSkJWVhUceeaTTjmvXZOPs2bN4+umn0b9/f0gkEpPnTKtWrbLnoVgX4eXlJXjmmJ2d7eywOqy7nQ/rnp5//nmIRCJ4eXkJ6kaPHo2TJ0/iwIEDaGhocEJ0jlNVVYXy8nIUFhZ2aORLd48HAHJycrB69WqsXr1aULd06VLj99qff/5p3wPbcBvkli5fvkwBAQE0cuRI0mg01NzcTET/93xu5cqVNu+zO2lsbKTBgwebPIPsKX744QfjtMTdQXc7H1u42mOUt99+2+Lz/66uI49RGHOmTnmMkpubi8rKSrz77rsYP348PD097bVrAH/9j/LGhZNsrXc2IkJbW5vZyYhcjau/l47W08+/K1m0aJFgvgW+i8qY67Hb0oU//fQTADhkad3uwNvb2+xKhowxxlh3Z7c7G//7v/8LAGanqmWMMcZYz3Xbyca+ffsgEonwxRdfAABkMhlEIlG7t6H1ej3y8vIwefJkBAQEQCaTYcSIEVi/fr3Jo4bs7GyIRCI0Nzfj2LFjxs4rhglc2qs30Ol0yMzMxIABAyCRSNCnTx8kJSUZJza58VwMrz/++AOpqanw9fWFUqlEQkJCh+5O3Lxfw4JIth7PcK4ikQjBwcHQarWIiYmBt7c3PD09ER0dbTLD3qpVq4ztb7weBw8eNJb7+/tb/V7bW085f2s+63V1dYKOp4bHAXq93qQ8OTnZuO+OfK5//fVXzJw5E0ql0lhmbhVVxhizGxs6eNxSYmIiAaCWlhaTcksdRAsKCggArVmzhmpra0mn09H7779Pbm5utGjRIsH+5XI53X///RaPf6v6iooKuuOOO0ilUtH+/fupsbGRTp06RVFRUeTh4SGYiMdwLomJiXT8+HFqamqiQ4cOkUwmo7Fjx1r7lghYeo9sPZ5arSa5XE4RERHG9lqtlkaOHEkSiYSOHDli1XsTHh5udnKe9t7r6Oho6t27t2BiGUva61DZ1c7f1g6itnzW4+Pjyc3Njc6cOSPYT0REBO3cudP4d0c/11FRUXT48GFqbm6mEydOUK9evUin01l1Lq7WQbQ74w6irKtx2Xk2Jk6ciKysLPj5+cHf3x8ZGRl47LHHsH79ersOycrKysLZs2exbt06PPTQQ/Dy8kJYWBg+++wzEBEyMjLMbpeWloaIiAjI5XLExsZi6tSp0Gq1DvtfoC3Ha25uxqZNm4ztx4wZgx07duD69et48cUXHRKfQVtbm7Eznj11lfPvCGs/6wsWLEBbWxvWrVtnsv2xY8dw7tw5pKSkGMs6+rlesmQJJk6cCE9PT4wbNw56vd7kDg9jjNmb05KNhIQEHD58WFCuVqvR2tqKn3/+2W7H2rdvH9zc3JCQkGBSHhAQgLCwMHz33XdmFycaO3asyd8hISEAgIqKCrvF1tHjyeVyjBo1yqRsxIgR6NevH4qLi3Hp0iWHxAgAR44cQW1tLSIiIuy6365y/ray5bMeFxeHESNG4J///CdqamqM5W+//TYyMjIgFouNZR39XN977723fU43P/Lhl/1fe/bswZ49e5weB7/4Ze0rNTXV4neGYx7GW6G+vh7vvPMO9u7diwsXLgiWdjZ0OL1d165dMy6prFAoLLb77bffEBwcbFJ2c3uJRAIADhu+asvxfH19ze6jb9++qKiowOXLlztt6WB76a7nb+tnff78+Xj22WexadMmvPLKKygtLcW3336Ljz/+2Njmdj7Xcrn8dk8JeXl5t70PdmvvvvsuAOCll15yciSMWUej0eC9994zW+e0ZOPhhx/G//zP/2D9+vV49NFH4e/vD5FIhPfeew8vvfSS4Ba9SCS65f4s1UulUvj6+qKpqQktLS0O6+zY2WpqakBEgvO+fPkyAJisXunm5mayPLbBzT96Bu29166gK52/rZ/1WbNmYdmyZdiwYQP+8Y9/4J133sGTTz4JPz8/Yxtnf65nzpzZqcfriXbv3g2A32vWtVhKNpzyGOXPP//EsWPHEBAQgMzMTPTp08f4Bd/S0mJ2G09PT5MfjGHDhuGjjz6yqj4pKQl6vd5kpILBW2+9hf79+0Ov19vl3DrL1atXodVqTcp++uknVFRUQK1Wm/yvPjAwEBcvXjRpW1lZiXPnzpndd3vvtStw9fN3d3dHSUlJhz7rUqkUL7zwAi5fvox33nkHO3fuNNsPpTt+rhlj3ZNTko1evXph4sSJqKysxNtvv43q6mq0tLTg8OHD2Lx5s9lt7rnnHpSWluL8+fPQaDQoLy9HZGSkVfVvvPEGQkND8cwzz+DAgQOor69HbW0tcnJy8PrrryM7O7vL3fFQKBRYtmwZNBoNmpubcfLkScyePRsSiQTr1683aRsXF4eKigps2LABTU1NKCsrw4svvmjyv/8btfdeT5o0CUqlEidOnHDoOd6KM8/fFh35rAPACy+8AJlMhuXLlyM2NhaDBw8WtOmOn2vGWDdlw9AVs/bu3StYm2DWrFlERBQaGiqoO3/+PBER6XQ6Sk9Pp5CQEBKLxaRSqeipp56ipUuXGtuGh4cbj1NSUkKRkZEkl8spJCSENm7caBJHe/U1NTW0YMECGjRoEInFYurTpw/FxcXRoUOHjG0Mw3RvfBnWWbi53JY1Tiy9Rx09nmE57dOnT1N8fDx5e3uTTCajqKgoOnr0qOD4dXV1lJaWRoGBgSSTyWjChAmk1WopPDzcuP8lS5ZY/V5GRkaSn5+fYGilOXK5XHAub7/99m293848f3PnY+n1yy+/EJHtn3WDOXPmEAD697//bfH97ejn2pZ/4zfioa+dh4e+sq7mVkNfRUSmD4zz8/ORmppq92GNzH5GjRqF6upqsyMNeoKecv4ff/wxNm7ciJMnTzo7FCP+fug8hmHOhr4bjLm6W3w/7HbqPBuMMcs2b96MBQsWODsM1oXs2LHDZCiiuSXmAeDs2bOYNm0aGhoaUF1dbbLN6NGjjbMc3+jmdiKRCGPGjHH0KTnclStXsHnzZkyaNAm9e/eGTCbDkCFDMGvWLBQXF5vdRq/XY+vWrbj33nuhVCrh5+eH8PBwbNiwwWxndFeKZ+nSpRZHk924xLxIJML48eNv61xuxMkGYy4iNzcX06dPR1NTEzZv3owrV67wSATWIR9++CGICE1NTYK6oqIijBkzBnFxcfDx8YG/vz+IyNjhuqioCPPnzxdsZ2in0WigVCpBRC51162jFi9ejIyMDCQmJuL06dOoqanBtm3bUFRUhPDwcOzbt0+wzdNPP420tDTExsbil19+wZkzZ5CamoqMjAzMmDHDpeOZM2cOsrKy8Morrwj28+abbxonbOzVq9dtnYeADc9c2E1gxXP7V1991W7He/vtty32cegJuvv5b9myhQCQu7s7jRw5kr777jtnhyTgit8P7U0v31WP35E+G9u3bycA9OGHH5qtr6+vp+DgYEpPTxfUabVakkqlpFQqCQDt2rXL7D40Go3Zaf67qmeffZbmzp0rKC8qKiIANGTIEJPysrIyAkCjR48WbDN58mQCQP/5z39cOp6ioiISiUSUl5dnMY5evXrRuHHjbIrdZacr7+ro/88Ab/V67bXX7Ha8RYsWCfZvWKyrJ+ju55+WlgYiQmtrK4qLi3HPPfc4OyTWzaxduxaVlZVYsWKF2XoPDw/s3LkTbm5uSE9PR2lpaSdH2Plyc3ORk5MjKFer1ZDJZCgrKzPpg3D+/HkAwJ133inYZvjw4QBgcVi9q8SjVquRnJyMhQsXdtrweE42GGOsByAi5ObmYty4cejXr5/FdvHx8Vi+fDkaGxuRkpJitv9GT9Dc3IyWlhbcfffdJhP9DR8+HGKxGCUlJYJtSkpKIBKJMGLECJePZ/r06bhw4QL2799v91jN4WSDMeZwNTU1WLBgAUJDQyGRSODn54cpU6aYrBmzatUqY8e0CRMmGMsPHjxoLL9xwbjs7GyIRCI0Nzfj2LFjxjaGuUUM9SKRCMHBwdBqtYiJiYG3tzc8PT0RHR1tMiGavY/vaoqLi1FVVQW1Wt1u21dffRVxcXH48ccfLS7oZ44113nfvn0mnRD/+OMPpKamwtfXF0qlEgkJCSgrKxPsW6fTITMzEwMGDIBEIkGfPn2QlJSEoqIiq+OzhWEU0Msvv2xSrlKpkJ2djeLiYixbtgw6nQ61tbVYu3YtvvnmG6xYsQJDhw51+XgMa0t9/fXXdo/VLBueuTDGeriOfD9cunSJBg4cSCqVigoKCqi+vp5+/fVXSkpKIpFIRFu2bDFpb6kPRHh4uNm+Au31mVCr1SSXyykiIoKOHz9OTU1NpNVqaeTIkSSRSOjIkSMOPX50dDT17t2bNBqNxTbm2LvPhqFuzZo1ZrfVarWkUCiMf+t0OgoJCSEAtGPHDmO5pT4btl7nxMREAkCJiYnG63Lo0CGSyWQ0duxYk7YVFRV0xx13kEqlov3791NjYyOdOnWKoqKiyMPDw6o5f2xRWVlJKpWK0tLSLLbJz8+n4OBgY/8xf39/2rp1q13jcGQ89fX1BIAiIyPN1tu7zwYnG4wxq3Xk++Gpp54iAPTpp5+alF+9epX69etHMpmMKisrjeWOSDYA0A8//GBS/uOPPxIAUqvVVu2vo8ePioqyehK8G9k72Vi7di0BEEzSZ3BzskH0V2IhFotJLpcbJ6mzlGzYep0NyUZBQYFJ++TkZAJAOp3OWPbkk08SANq5c6dJ20uXLpFUKjU7KV5HVVdX06hRoyg1NZX0er2gvq2tjebMmUNisZjWrVtHlZWVpNPpKCcnh2QyGaWmplJra2uXiEckEtHgwYPN1nEHUcZYl7J3714AwNSpU03KpVIpYmJi0NLS4vBbuXK53Hjb2GDEiBHo168fiouLcenSJYcd+8iRI6itrUVERITDjmENQ98LsVhs9Tbjx49HdnY2mpubkZKSYnE9H6Dj13ns2LEmf4eEhAAAKioqjGX79u2Dm5sbEhISTNoGBAQgLCwM3333nV0m+WtubkZ8fDzuuusu7Ny50+zwz+3bt2PLli147rnn8NJLL0GlUsHf3x9z5841zmGxYcOG246lM+Jxd3e/5TW1J042GGMOc+3aNdTX18PDwwPe3t6CepVKBeCvhfEcydfX12y5YX0cw2rB3ZmHhwcAoLW11abtMjMzkZqailOnTmHevHlm29zOdVYoFCZ/SyQSAEBbW5vJvtva2qBQKAQTi33//fcAgN9++82m87qZXq9HSkoKgoKC8Mknn1icZ+LgwYMAgNjYWEFdTEwMAODAgQO3FUtnxaPX6yGTyW47VmtwssEYcxipVAqFQoGrV6+isbFRUF9VVQXgr/+hGri5uZmdhbGurs7sMW7smW9JTU2N2SnWDUnGjYvyOeL4rsCwEnJ9fb3N2+bm5mLYsGHYtm0btm/fLqjvyHW2llQqha+vL9zd3dHa2mpxmoHo6Gib932j9PR0XLt2Dfn5+SadfAcPHmyy6GRzc3O7+zI3mZqrxdPQ0AAiMlkh25E42WCMOdT06dMBQDDE7tq1aygsLIRMJkN8fLyxPDAwEBcvXjRpW1lZaXHuAk9PT5PkYNiwYfjoo49M2ly9etU4Q6bBTz/9hIqKCqjVapMvXEcc3xXcfffdANChxw1eXl74/PPPIZfLsWnTJrNtbL3OtkhKSoJerzcZPWTw1ltvoX///rc1X8Rrr72Gn3/+GV988QWkUukt244bNw4AUFhYKKj79ttvAeC2p/nujHgMn3HD58LhbOjgwRjr4ewxGqWhocFklMJHH31k0n7evHkEgD744ANqbGykM2fO0MyZMykoKMhsx8QHH3yQFAoFnTt3jo4fP07u7u50+vRpY71arSaFQkExMTFWjUax9/FdZTRKW1sb9e3b12JnVnMdRG+2Y8cOAmDVaJT2rrOhg2hLS4tJ+ZIlSwQdequqqig0NJQGDRpEX331FdXV1VFNTQ1t3ryZPD09BTNhzpo1iwBQeXn5Lc+HiOjjjz9udyboG6/dlStXaMiQISQWi2n9+vVUVVVF1dXVlJubS56enhQUFEQVFRUuHQ8R0a5duwgA7d2712wcPBqFMeY0Hf1+qK6upvnz59PAgQNJLBaTQqGg+Ph4KiwsFLStq6ujtLQ0CgwMJJlMRhMmTCCtVkvh4eHGL9slS5YY25eUlFBkZCTJ5XIKCQkRjLZQq9UUFBREp0+fpvj4ePL29iaZTEZRUVF09OhRhx8/MjLSJUajEBEtW7aM3N3d6eLFi8YynU4n+DG71eiO559/3uJ05dZcZ41GY3HZgZvLp06datyupqaGFixYQIMGDSKxWEx9+vShuLg4OnTokCCOSZMmkZeXl9nRGzebOnWqTT/uRES1tbW0ePFiGj58OEmlUpJIJBQaGkrz5s0zGXHjqvEQEaWkpFBQUBBdv37dbD0nG4wxp+mK3w+GZKOrcUSyUVdXR0FBQWbXRukurly5QjKZ7JZzUnQmV4uH6P/WRrl5mPKNeOgrY4yxDlEoFCgoKMCePXuwceNGZ4djd0SEzMxM+Pj4YOXKlc4Ox+XiAYDy8nIkJSUhKysLjzzySKcdl5MNxhjrZp5//nmIRCJ4eXkJ6kaPHo2TJ0/iwIEDaGhocEJ0jlNVVYXy8nIUFhZ2aORLd48HAHJycrB69WqsXr1aULd06VLjkOI///zTrsflZIMx1i0Z1i4pLi7GxYsXIRKJsHz5cmeH5VCzZ882GQ5qaQjmgAED8OWXX8LHx6eTI3SsgIAAHD16FGFhYc4OBYDrxQP8NXrH0h2NN9980+Tzc+MQ29vlmisGMcbYbVq0aBEWLVrk7DAYY+A7G4wxxhhzME42GGOMMeZQnGwwxhhjzE3VAMsAACAASURBVKE42WCMMcaYQ1nsIJqfn9+ZcTDGugCNRgOAvx86g2ENE36vWVdh+H4wR0RkuhRifn4+UlNTHR4UY4wxxrofEq6wvFuQbDDGmCWG/4zw1wZjzAa7uc8GY4wxxhyKkw3GGGOMORQnG4wxxhhzKE42GGOMMeZQnGwwxhhjzKE42WCMMcaYQ3GywRhjjDGH4mSDMcYYYw7FyQZjjDHGHIqTDcYYY4w5FCcbjDHGGHMoTjYYY4wx5lCcbDDGGGPMoTjZYIwxxphDcbLBGGOMMYfiZIMxxhhjDsXJBmOMMcYcipMNxhhjjDkUJxuMMcYYcyhONhhjjDHmUJxsMMYYY8yhONlgjDHGmENxssEYY4wxh+JkgzHGGGMOxckGY4wxxhyKkw3GGGOMORQnG4wxxhhzKE42GGOMMeZQnGwwxhhjzKE42WCMMcaYQ3GywRhjjDGH4mSDMcYYYw7FyQZjjDHGHMrd2QEwxlzThQsX8OSTT+LPP/80ll25cgXe3t6YOHGiSdthw4YhJyenkyNkjHUVnGwwxswKDg7G2bNnUVZWJqj797//bfL3Aw880FlhMca6IH6Mwhiz6IknnoBYLG633SOPPNIJ0TDGuipONhhjFs2aNQt6vf6WbcLCwnDXXXd1UkSMsa6Ikw3GmEWhoaEYOXIkRCKR2XqxWIwnn3yyk6NijHU1nGwwxm7piSeeQK9evczW6fV6pKSkdHJEjLGuhpMNxtgtPfroo2hraxOUu7m5Yfz48RgwYEDnB8UY61I42WCM3VJgYCDuv/9+uLmZfl24ubnhiSeecFJUjLGuhJMNxli7Hn/8cUEZESEpKckJ0TDGuhpONhhj7UpOTjbpt9GrVy/Exsaib9++ToyKMdZVcLLBGGuXn58fJk+ebEw4iAizZ892clSMsa6Ckw3GmFVmz55t7CgqFovxt7/9zckRMca6Ck42GGNWmTZtGqRSKQDg4YcfhpeXl5MjYox1FZxsMMasIpfLjXcz+BEKY8wWIiIiZwfRmfLz85GamursMBhjjPVQPexnFwB299hVX/Py8pwdAmMm3n33XQDASy+95ORILPvzzz+Rl5eHxx57zNmh3JbU1FTMnz8fERERzg6F9SAajQbvvfees8Nwih6bbMycOdPZITBmYvfu3QBc/7M5ffp0eHh4ODuM25KamoqIiAiXf69Z99NTkw3us8EYs0lXTzQYY52Pkw3GGGOMORQnG4wxxhhzKE42GGOMMeZQnGwwxpgNzp49i2nTpqGhoQHV1dUQiUTG1+jRo3H16lXBNje3E4lEGDNmjBOit68rV65g8+bNmDRpEnr37g2ZTIYhQ4Zg1qxZKC4uNruNXq/H1q1bce+990KpVMLPzw/h4eHYsGEDrl+/7tLxLF26lEcydhAnG4x1Q01NTRgyZAgSEhKcHUq3UlRUhDFjxiAuLg4+Pj7w9/cHEUGr1Rrr58+fL9jO0E6j0UCpVIKIcPLkyc4O3+4WL16MjIwMJCYm4vTp06ipqcG2bdtQVFSE8PBw7Nu3T7DN008/jbS0NMTGxuKXX37BmTNnkJqaioyMDMyYMcOl45kzZw6ysrLwyiuv3FacPRL1MHl5edQDT5t1AcnJyZScnGyXfTU0NNCgQYNoypQpdtmfI8nlcrr//vs79ZgAKC8vz6Zt6uvrKTg4mNLT0wV1Wq2WpFIpKZVKAkC7du0yuw+NRkNKpbJDMbuiZ599lubOnSsoLyoqIgA0ZMgQk/KysjICQKNHjxZsM3nyZAJA//nPf1w6nqKiIhKJRDZ/foh69O9PPt/ZYKwb8vb2RllZGb766itnh9JtrF27FpWVlVixYoXZeg8PD+zcuRNubm5IT09HaWlpJ0fY+XJzc5GTkyMoV6vVkMlkKCsrM5kt8/z58wCAO++8U7DN8OHDAQDnzp1z6XjUajWSk5OxcOFC6PX6Dsfa03CywRhj7SAi5ObmYty4cejXr5/FdvHx8Vi+fDkaGxuRkpJitv9GT9Dc3IyWlhbcfffdEIlExvLhw4dDLBajpKREsE1JSQlEIhFGjBjh8vFMnz4dFy5cwP79++0ea3fFyQZj3cy+fftMOiIafvBuLv/jjz+QmpoKX19fKJVKJCQkoKyszLif7OxsY9vg4GBotVrExMTA29sbnp6eiI6OxrFjx4ztV61aZWw/YcIEY/nBgweN5f7+/oL9Nzc349ixY8Y27u6uN7FxcXExqqqqoFar22376quvIi4uDj/++CMyMjKsPkZNTQ0WLFiA0NBQSCQS+Pn5YcqUKTh8+LCxja3X0ECn0yEzMxMDBgyARCJBnz59kJSUhKKiIqvjs4VhNtyXX37ZpFylUiE7OxvFxcVYtmwZdDodamtrsXbtWnzzzTdYsWIFhg4d6vLxjBo1CgDw9ddf2z3WbsvJz3E6XQ9+ZsZcnD37bBARJSYmEgBqaWkxW56YmEjHjx+npqYmOnToEMlkMho7dqxgP2q1muRyOUVERBjba7VaGjlyJEkkEjpy5IhJe0t9MMLDw832V2ivz0Z0dDT17t2bNBqNtafeLtjYZ2P79u0EgNasWWO2XqvVkkKhMP6t0+koJCSEANCOHTuM5Zb6bFy6dIkGDhxIKpWKCgoKqL6+nn799VdKSkoikUhEW7ZsMWlvyzWsqKigO+64g1QqFe3fv58aGxvp1KlTFBUVRR4eHnT8+HGr3wdrVFZWkkqlorS0NItt8vPzKTg4mAAQAPL396etW7faNQ5HxlNfX08AKDIy0qZYevDvT36PO+sefLGZi+vsZKOgoEBwfACk0+lMytVqNQGgH374waT8xx9/JACkVqtNyu2dbERFRZGfn59dfxRtTTbWrl1LAGjjxo1m629ONoj+SizEYjHJ5XL65ZdfjGXm3oOnnnqKANCnn35qUn716lXq168fyWQyqqysNJbbcg2ffPJJAkA7d+40aXvp0iWSSqUUHh5uxTtgnerqaho1ahSlpqaSXq8X1Le1tdGcOXNILBbTunXrqLKyknQ6HeXk5JBMJqPU1FRqbW3tEvGIRCIaPHiwTfH04N8f7iDKWE81duxYk79DQkIAABUVFYK2crnceOvYYMSIEejXrx+Ki4tx6dIlh8V55MgR1NbWOnWFVsOjKLFYbPU248ePR3Z2Npqbm5GSkoKWlhaLbffu3QsAmDp1qkm5VCpFTEwMWlpazN6yt+Ya7tu3D25uboJh0AEBAQgLC8N3332HCxcuWH1eljQ3NyM+Ph533XUXdu7ciV69egnabN++HVu2bMFzzz2Hl156CSqVCv7+/pg7d65xDosNGzbcdiydEY+7u/strykzxckGYz2UQqEw+VsikQAA2traBG19fX3N7qNv374AgMuXL9s5OtdiWHyutbXVpu0yMzORmpqKU6dOYd68eWbbXLt2DfX19fDw8IC3t7egXqVSAQAqKysFde1dQ8O+29raoFAoBBOLff/99wCA3377zabzupler0dKSgqCgoLwySefmP1hB/7qvwMAsbGxgrqYmBgAwIEDB24rls6KR6/XQyaT3XasPQUnG4yxdtXU1JgMGTQwJBmGpAMA3NzczM4EWVdXZ3bfN44OcFWBgYEAgPr6epu3zc3NxbBhw7Bt2zZs375dUC+VSqFQKHD16lU0NjYK6quqqgD8dSfCVlKpFL6+vnB3d0drayuIyOwrOjra5n3fKD09HdeuXUN+fr5JB9/BgwfjxIkTxr+bm5vb3VdTU9NtxdIZ8TQ0NICIjJ8L1j5ONhhj7bp69apxlkyDn376CRUVFVCr1SZfuoGBgbh48aJJ28rKSovzJ3h6epokJ8OGDcNHH31kx+hv39133w0AHXrc4OXlhc8//xxyuRybNm0y22b69OkAIBhKee3aNRQWFkImkyE+Pt7mYwNAUlIS9Hq9ycghg7feegv9+/e/rfkiXnvtNfz888/44osvIJVKb9l23LhxAIDCwkJB3bfffgvgr8dPt6Mz4jF8vg2fC2YF5/UXcY4e3EGHubjO7iB6c/mSJUvMdgRVq9WkUCgoJibGqtEo8+bNIwD0wQcfUGNjI505c4ZmzpxJQUFBZjtHPvjgg6RQKOjcuXN0/Phxcnd3p9OnTxvrXWE0SltbG/Xt29diR1ZzHURvtmPHDgJg1WiUhoYGk9EoH330kUl7W65hVVUVhYaG0qBBg+irr76iuro6qqmpoc2bN5Onp6fgfZg1axYBoPLy8lueDxHRxx9/bBzBYel143W7cuUKDRkyhMRiMa1fv56qqqqourqacnNzydPTk4KCgqiiosKl4yEi2rVrFwGgvXv3thvTjXrw7w+PRmHMVdgr2di7d6/gC3bWrFmk0WgE5S+//DIRkaB86tSpxv2p1WoKCgqi06dPU3x8PHl7e5NMJqOoqCg6evSo4Ph1dXWUlpZGgYGBJJPJaMKECaTVaik8PNy4/yVLlhjbl5SUUGRkJMnlcgoJCRGM+IiMjHT6aBQiomXLlpG7uztdvHjRWKbT6QTv3a1Gdzz//PMWpyuvrq6m+fPn08CBA0ksFpNCoaD4+HgqLCw0tunoNaypqaEFCxbQoEGDSCwWU58+fSguLo4OHTokiGPSpEnk5eVldvTGzaZOnWrTjzsRUW1tLS1evJiGDx9OUqmUJBIJhYaG0rx580xG3LhqPEREKSkpFBQURNevX283phv14N8fTjYYcxX2vrNhL4ZkozvpSLJRV1dHQUFBZtdG6S6uXLlCMpnslnNSdCZXi4fo/9ZGuXmYsjV68O8PD321xdmzZ/H000+jf//+kEgkJr26V61a5ezwXIKXl5egx7ulV25urmCWSsZclUKhQEFBAfbs2YONGzc6Oxy7IyJkZmbCx8cHK1eudHY4LhcPAJSXlyMpKQlZWVl45JFHnB1Ol8LJhpV0Oh3Gjx+P77//Hvn5+airqzMuGc3+T1NTE3744QcAQGJiosXe71FRUQCARYsWgYismgaaMWcbPXo0Tp48iQMHDqChocHZ4dhVVVUVysvLUVhY2KGRL909HgDIycnB6tWrsXr1ameH0uVwsmGl3NxcVFZW4t1338X48ePh6elp1/17eXmZrCdhaz3j99DeDHediouLcfHiRYhEIixfvtzZYTndgAED8OWXX8LHx8fZodhVQEAAjh49irCwMGeHAsD14gH+Gr3DdzQ6xvVWPHJRP/30EwA4ZEXCnujIkSPODoG1Y9GiRVi0aJGzw2CMdQN8Z8NK//u//wsAZmf4Y9abN28e5s+f7+wwGGOMdSJONtphWNL5iy++AADIZDLBEtrm6PV65OXlYfLkyQgICIBMJsOIESOwfv16k+mg21tm29pluK1ZQrqjy1M7C7+HjDHWTThrHIyzdHTokaVJdAzj3leuXGlSXlBQYFySura2lnQ6Hb3//vvk5uZGixYtEuy/vZUvb1Vv6xLSti4xbuukSj/88MMtx7m/+OKLgm3MDa/sTu+hNVx16Gt3hA4MfWXsdvHQV+YQEydORFZWFvz8/ODv74+MjAw89thjWL9+vV17smdlZeHs2bNYt24dHnroIXh5eSEsLAyfffYZiAgZGRlmt0tLS0NERATkcjliY2MxdepUaLVaVFdXm7Rra2szjiKxhbnRKH//+99t2kd3eQ8ZY6wn4w6iDpKQkCBY0hkA1Go1duzYgZ9//tluS2Zbu4T0zfNY3Gp5an9/f2O5szpzdqf30FoXLlxAfn6+zdsx2/GwddbZevJnjpMNB6mvr8c777yDvXv34sKFC4IVLw0dTm+XYQlpQLjc9I1+++03wQ+lLUuM28uGDRusbtsT38MTJ04gNTW1Q9sy27z33nt47733nB0GYz0CP0ZxkIcffhgrV67EnDlzUFpaanwU8e677wKA4JFEe8tsW6rvrCWknaEnvofJyckWj88v+70AIC8vz+lx8KtnvfLy8hz+HeKqONlwgD///BPHjh1DQEAAMjMz0adPH+MPXUtLi9lt2ltm+1b1jl5C2hn4PWSMse6Dkw0H6NWrFyZOnIjKykq8/fbbqK6uRktLCw4fPozNmzeb3eaee+5BaWkpzp8/D41Gg/LyckRGRlpV/8YbbyA0NBTPPPMMDhw4gPr6etTW1iInJwevv/46srOzBcM8bTFp0iQolUqcOHGiw/uwVXd7DxljrEejHsbWoUeWlusmIgoNDRXUnT9/noj+Wno6PT2dQkJCSCwWk0qloqeeeoqWLl1qdinq9pbZbq/emiWkO7o8tS1LfMvlcsG+VCqVxfZvv/22xZi603toDR762nnAQ1+ZE/Tkoa8iIrJtPGMXl5+fj9TUVPSw02ZdQEpKCgBg9+7dTo6k+xOJRMjLy8PMmTOdHQrrQXrw789ufozCGGOMMYfiZIMxxhzo7NmzmDZtGhoaGlBdXW0y3f3o0aNx9epVwTY3txOJRBgzZowTorevzZs3C87r5teUKVNMttHr9di6dSvuvfdeKJVK+Pn5ITw8HBs2bDDp8G3JtGnTIBKJsGrVKkHd0qVLe/QIkc7EyQZjjDlIUVERxowZg7i4OPj4+MDf3x9EBK1Wa6w3tzChoZ1Go4FSqQQR4eTJk50dvlPcd999Jn8//fTTSEtLQ2xsLH755RecOXMGqampyMjIwIwZM265r3/9618oKCiwWD9nzhxkZWXhlVdesUvszDJONhhjFnl5ebW76GB3Pv7taGhowMMPP4wZM2Zg3rx5gnqpVAqlUomcnBx8+umnTojQOcwtY0BEKC0thVQqxZw5c4xty8vLsWPHDowePRpr1qxB3759oVQq8Y9//AOTJ0/Gl19+aUzcblZRUYH58+fj8ccftxhLaGgo9u7di9WrV/PMvQ7GyQZjjDnA2rVrUVlZiRUrVpit9/DwwM6dO+Hm5ob09HSUlpZ2coSdb/DgwSbD0W/0wQcf4G9/+xsCAgKMZefPnwcA3HnnnYL2w4cPBwCcO3fO7P7mzJmDlJQUxMXF3TImtVqN5ORkLFy4kOfScSBONhhjzM6ICLm5uRg3bhz69etnsV18fDyWL1+OxsZGpKSkmO2/0Z3ExsZi4cKFgvLGxkZ88skneOGFF0zKhw8fDrFYjJKSEsE2JSUlEIlEGDFihKBu27Zt+Pnnn5GdnW1VXNOnT8eFCxewf/9+K8+E2YqTDca6uJqaGixYsAChoaGQSCTw8/PDlClTcPjwYWObVatWGTvg3fhY4uDBg8byGxeOy87OhkgkQnNzM44dO2ZsY5jYzFAvEokQHBwMrVaLmJgYeHt7w9PTE9HR0Sazsdr7+K6uuLgYVVVVUKvV7bZ99dVXERcXhx9//NHi6sLmWHPd9+3bZ9L58o8//kBqaip8fX2hVCqRkJCAsrIywb51Oh0yMzMxYMAASCQS9OnTB0lJSSgqKrI6Plt8/PHH6N+/Px544AGTcpVKhezsbBQXF2PZsmXQ6XSora3F2rVr8c0332DFihUYOnSoyTYXLlzAwoULsW3bNnh7e1t1/FGjRgEAvv76a/ucEBNyyvQeTtSDJ1VhLq4jk3pdunSJBg4cSCqVigoKCqi+vp5+/fVXSkpKIpFIRFu2bDFpL5fL6f777xfsJzw8nJRKpaDcUnsDtVpNcrmcIiIi6Pjx49TU1ERarZZGjhxJEomEjhw54tDjR0dHU+/evUmj0VhsYw4cPKnX9u3bCQCtWbPGbL1WqyWFQmH8W6fTUUhICAGgHTt2GMs1Go3Z98XW656YmEgAKDEx0XidDh06RDKZjMaOHWvStqKigu644w5SqVS0f/9+amxspFOnTlFUVBR5eHhYNbmfLdra2mjo0KG0adMmi23y8/MpODjYOGGev78/bd261Wzb+Ph4euGFF4x/G67FypUrLe6/vr6eAFBkZGTHT8QKPfj3J5/vbDDWhWVlZeH333/He++9h4SEBPj4+GDo0KHYtWsXAgMDkZmZiaqqKofG0NzcjE2bNiEiIgJyuRxjxozBjh07cP36dbz44osOPbZhcT5ysUmSLl26BODWqwjfyN/fH/n5+RCLxUhPTzf72OBGHb3uaWlpxusUGxuLqVOnQqvVorq62mTfZ8+exbp16/DQQw/By8sLYWFh+Oyzz0BENt19scaBAwdw6dIlsx05iQhz587FrFmzsGDBAlRWVkKn02H16tWYN28eHnnkEZN+Flu2bMFvv/2GtWvX2hSDj48PRCKR8box++Nkg7EubO/evQCAqVOnmpRLpVLExMSgpaXF4beG5XK58Ta0wYgRI9CvXz8UFxc79Av8yJEjqK2tRUREhMOO0RGGvhdisdjqbcaPH4/s7Gw0NzcjJSXF4oKDQMev+9ixY03+DgkJAfDXyA2Dffv2wc3NDQkJCSZtAwICEBYWhu+++w4XLlyw+rza8/777+OJJ56Al5eXoG779u3YsmULnnvuObz00ktQqVTw9/fH3LlzjXNkbNiwAcBfHUUXL16Mbdu2QS6X2xyHu7v7Ld9zdns42WCsi7p27Rrq6+vh4eFh9tm0SqUCAFRWVjo0Dl9fX7Plffv2BQBcvnzZocd3RR4eHgCA1tZWm7bLzMxEamoqTp06ZXa4LHB71/3mOy0SiQTAX3eIbtx3W1sbFAqFYMKt77//HgDw22+/2XRelpSWluK///u/BR1DDQ4ePAjgr46lN4uJiQHw150RACgoKEB9fT0mTpxoErPhjskrr7xiLDtz5oxgf3q9HjKZzC7nxYQ42WCsi5JKpVAoFLh69SoaGxsF9Ybb6DcOJXRzczM762JdXZ3ZY4hEonbjqKmpMfsYw5BkGJIORx3fFQUGBgIA6uvrbd42NzcXw4YNw7Zt27B9+3ZBfUeuu7WkUil8fX3h7u6O1tZWs/NhEBGio6Nt3rc577//Ph544AHcddddZuubm5vb3UdTUxMA4O9//7vZWA3v4cqVK41lgwcPNtlHQ0MDiMh43Zj9cbLBWBc2ffp0ABAM2bt27RoKCwshk8kQHx9vLA8MDMTFixdN2lZWVlqcq8DT09MkORg2bBg++ugjkzZXr14VTKz0008/oaKiAmq12uQL3BHHd0V33303AHTocYOXlxc+//xzyOVybNq0yWwbW6+7LZKSkqDX601GExm89dZb6N+/v13mo2hoaMC//vUv/P3vf7fYZty4cQCAwsJCQd23334L4K/HT7fL8Jk0XDdmf5xsMNaFvfHGGxg4cCDmz5+PL7/8Eo2NjSgtLcVjjz2GS5cuYf369cbb6gAQFxeHiooKbNiwAU1NTSgrK8OLL75ocvfhRvfccw9KS0tx/vx5aDQalJeXCyZlUigUWLZsGTQaDZqbm3Hy5EnMnj0bEokE69evN2lr7+NPmjQJSqUSJ06c6Ohb6BBqtRp9+/ZFcXFxh7YPCwtDTk6OxXpbr7st3njjDYSGhuKZZ57BgQMHUF9fj9raWuTk5OD1119Hdna2yRDk2bNnQyQS4ffff7fpONu2bYOXl5cxcTLnhRdewJAhQ/Dhhx/i/fffx+XLl1FTU4OtW7fizTffRFBQEBYtWtSh87yRYUhvexOAsdvQycNfnK4HDz1iLq4jQ1+JiKqrq2n+/Pk0cOBAEovFpFAoKD4+ngoLCwVt6+rqKC0tjQIDA0kmk9GECRNIq9VSeHi4cVjhkiVLjO1LSkooMjKS5HI5hYSE0MaNG032p1arKSgoiE6fPk3x8fHk7e1NMpmMoqKi6OjRow4/fmRkJPn5+dk8HBMOHvpKRLRs2TJyd3enixcvGst0Op3xPA2v8PBwi/t4/vnnzQ59JbLuums0GsHxXn75ZSIiQfnUqVON29XU1NCCBQto0KBBJBaLqU+fPhQXF0eHDh0SxDFp0iTy8vIivV5v9XvT1tZGgwcPphUrVrTbtra2lhYvXkzDhw8nqVRKEomEQkNDad68eVRZWWlxu/T0dME5AqD4+HhB25SUFAoKCqLr169bfQ4d0YN/f/JFRC42ZszB8vPzkZqa6nJD5RhLSUkBAOzevdvJkVhv1KhRqK6utuvohM4gEomQl5eHmTNnOuwY9fX1CAsLQ0JCAjZv3uyw4zhTXV0d+vXrh1mzZmHLli3ODqdDiouLMXr0aOzatQuPPPKIQ4/Vg39/dvNjFMYYcwCFQoGCggLs2bMHGzdudHY4dkdEyMzMhI+PD1auXOnscDqkvLwcSUlJyMrKcnii0dNxssEYYw4yevRonDx5EgcOHEBDQ4Ozw7GrqqoqlJeXo7CwsEMjX1xBTk4OVq9ejdWrVzs7lG6Pkw3GmM0Ma5cUFxfj4sWLEIlEWL58ubPDckkDBgzAl19+CR8fH2eHYlcBAQE4evQowsLCnB1Kh7311lt8R6OTdI1VjRhjLmXRokV2GQXAGOsZ+M4GY4wxxhyKkw3GGGOMORQnG4wxxhhzKE42GGOMMeZQPbaDqGECJcZchWHKbf5sdo533323S02gxrq+rjb5nT31uBlENRoN1q1b5+wwGOuSKisr8cMPP2DKlCnODoWxLqsHJrm7e1yywRjruB483TJjrON4unLGGGOMORYnG4wxxhhzKE42GGOMMeZQnGwwxhhjzKE42WCMMcaYQ3GywRhjjDGH4mSDMcYYYw7FyQZjjDHGHIqTDcYYY4w5FCcbjDHGGHMoTjYYY4wx5lCcbDDGGGPMoTjZYIwxxphDcbLBGGOMMYfiZIMxxhhjDsXJBmOMMcYcipMNxhhjjDkUJxuMMcYYcyhONhhjjDHmUJxsMMYYY8yhONlgjDHGmENxssEYY4wxh+JkgzHGGGMOxckGY4wxxhyKkw3GGGOMORQnG4wxxhhzKE42GGOMMeZQnGwwxhhjzKE42WCMMcaYQ3GywRhjjDGH4mSDMcYYYw7FyQZjjDHGHMrd2QEwxlxTa2srmpqaTMqam5sBAFeuXDEpF4lE8PX17bTYGGNdCycbjDGzamtrERQUhD///FNQ17t3b5O/o6Oj8e2333ZWaIyxLoYfozDGzFKpRVmKQAAAIABJREFUVHjggQfg5nbrrwmRSIRHH320k6JijHVFnGwwxix6/PHH223Tq1cvJCUldUI0jLGuipMNxphFM2bMgLu75aetvXr1woMPPgilUtmJUTHGuhpONhhjFvn4+GDKlCkWEw4iwuzZszs5KsZYV8PJBmPslmbPnm22kygASCQSJCQkdHJEjLGuhpMNxtgtJSQkwNPTU1AuFosxffp0yOVyJ0TFGOtKONlgjN2Sh4cHkpKSIBaLTcpbW1sxa9YsJ0XFGOtKONlgjLXrscceQ2trq0mZj48PJk+e7KSIGGNdCScbjLF2xcbGmkzkJRaL8eijj0IikTgxKsZYV8HJBmOsXe7u7nj00UeNj1JaW1vx2GOPOTkqxlhXwckGY8wqjz76qPFRikqlwoQJE5wcEWOsq+BkgzFmlfvuuw9BQUEAgCeeeKLdacwZY8yAF2KzA41Gg/Pnzzs7DMYcbuzYsbh48SKUSiXy8/OdHQ5jDnffffchODjY2WF0eSIiImcH0dWlpKRgz549zg6DMcaYneXl5WHmzJnODqOr2813NuwkOTkZu3fvdnYYrJvIz89HamoqXPH/Anv27EFycrKzw7CblJQUAOB/v0xAJBI5O4Rugx+6MsZs0p0SDcZY5+BkgzHGGGMOxckGY4wxxhyKkw3GGGOMORQnG4wxxhhzKE42GGPsNpw9exbTpk1DQ0MDqqurIRKJjK/Ro0fj6tWrgm1ubicSiTBmzBgnRG9fmzdvFpzXza8pU6aYbKPX67F161bce++9UCqV8PPzQ3h4ODZs2IDr16+3e8xp06ZBJBJh1apVgrqlS5ciLy/PbufHOo6TDca6uaamJgwZMgQJCQnODqXbKSoqwpgxYxAXFwcfHx/4+/uDiKDVao318+fPF2xnaKfRaKBUKkFEOHnyZGeH7xT33Xefyd9PP/000tLSEBsbi19++QVnzpxBamoqMjIyMGPGjFvu61//+hcKCgos1s+ZMwdZWVl45ZVX7BI76zhONhjr5ogIbW1taGtrc3Yo7fLy8uoya640NDTg4YcfxowZMzBv3jxBvVQqhVKpRE5ODj799FMnROgciYmJICLBq7S0FFKpFHPmzDG2LS8vx44dOzB69GisWbMGffv2hVKpxD/+8Q9MnjwZX375pTFxu1lFRQXmz5+Pxx9/3GIsoaGh2Lt3L1avXs0z3joZJxuMdXPe3t4oKyvDV1995exQupW1a9eisrISK1asMFvv4eGBnTt3ws3NDenp6SgtLe3kCDvf4MGDERkZabbugw8+wN/+9jcEBAQYywzLPNx5552C9sOHDwcAnDt3zuz+5syZg5SUFMTFxd0yJrVajeTkZCxcuBB6vd6q82D2x8kGY4zZiIiQm5uLcePGoV+/fhbbxcfHY/ny5WhsbERKSorZ/hvdSWxsLBYuXCgob2xsxCeffIIXXnjBpHz48OEQi8UoKSkRbFNSUgKRSIQRI0YI6rZt24aff/4Z2dnZVsU1ffp0XLhwAfv377fyTJi9cbLBWDe2b98+k855hh+7m8v/+OMPpKamwtfXF0qlEgkJCSgrKzPuJzs729g2ODgYWq0WMTEx8Pb2hqenJ6Kjo3Hs2DFj+1WrVhnb3/hY5ODBg8Zyf39/wf6bm5tx7NgxYxt3d9dcUaG4uBhVVVVQq9Xttn311VcRFxeHH3/8ERkZGVYfo6amBgsWLEBoaCgkEgn8/PwwZcoUHD582NjG1utooNPpkJmZiQEDBkAikaBPnz5ISkpCUVGR1fHZ4uOPP0b//v3xwAMPmJSrVCpkZ2ejuLgYy5Ytg06nQ21tLdauXYtvvvkGK1aswNChQ022uXDhAhYuXIht27bB29vbquOPGjUKAPD111/b54SY7YjdtuTkZEpOTnZ2GKwbycvLI3v+80xMTCQA1NLSYrY8MTGRjh8/Tk1NTXTo0CGSyWQ0duxYwX7UajXJ5XKKiIgwttdqtTRy5EiSSCR05MgRk/ZyuZzuv/9+wX7Cw8NJqVQKyi21N4iOjqbevXuTRqOx9tTb1ZF/v9u3bycAtGbNGrP1Wq2WFAqF8W+dTkchISEEgHbs2GEs12g0Zt+HS5cu0cCBA0mlUlFBQQHV19fTr7/+SklJSSQSiWjLli0m7W25jhUVFXTHHXeQSqWi/fv3U2NjI506dYqioqLIw8ODjh8/btN70Z62tjYaOnQobdq0yWKb/Px8Cg4Opv+PvXuPiqrc/wf+HmQYYIBBQeUiHpVCT+RBBL+JydcEgwzywpHwgrU0Oh6zkIwumNp3eTmmi9NXz0qLQE/fUo4gLT1JWXowc2ljBzUwU4IDaspFBeIqV3l+f7Rm/xxnkJlxhkF8v9aaP3z2Z+/9mb1x5jN77+d5AAgAwt3dXezYsUNvbGRkpHjppZekf2vOxbp167rdfn19vQAgQkNDjcodgMjKyjJqHdIrm1c2iAgJCQkICQmBUqnEtGnTEBUVhfz8fFRXV+vENjc3Y/v27VJ8cHAwdu3ahfb2dixfvtyieXZ1dUkPHFpTZWUlAEClUhkU7+7ujuzsbMjlcixZskTvbYPbpaSk4OLFi9iyZQuio6Ph4uICPz8/ZGZmwtPTE4mJibh27ZrOeoacx5SUFFy+fBnvvfcenn76aTg5OcHf3x979uyBEMKoqy+GOHjwICorK/U+yCmEwJ/+9CcsWLAAK1asQFVVFW7cuIENGzbg5Zdfxty5c7Wes0hPT0dJSQk2b95sVA4uLi6QyWTSeaPex2KDiDBhwgStf/v4+AD47Yn/OymVSumytMbYsWPh5eWFwsJCi36gHz16FLW1tQgJCbHYPgyhuR0ll8sNXmfixIlITU1Fc3MzYmNj0dLS0m3svn37AABRUVFa7QqFAuHh4WhpadF7S8CQ87h//37Y2NjodIX28PCAv78/Tp8+jatXrxr8vnryt7/9Dc899xycnJx0ln366adIT0/Hn//8Z7z66qsYOnQo3N3d8ac//UkaI+P9998H8NuDoq+//jp27twJpVJpdB62trZ3PeZkWSw2iEjnF7qdnR0A6O0u6+rqqncbQ4YMAQBcv37dzNn1Pfb29gCAjo4Oo9ZLTExEXFwczp07p7e7LAC0tbWhvr4e9vb2ep9JGDp0KACgqqpKZ1lP51Gz7a6uLqhUKp0Bt86cOQMAKCkpMep9dae4uBiHDh3SeTBU46uvvgLw24OldwoPDwfw25URADhw4ADq6+vxxBNPaOWsuWKyevVqqe0///mPzvY6Ozvh4OBglvdFxmOxQURGqamp0XsbQ1NkaIoOALCxsdE7CmRdXZ3ebctkMjNlaVmenp4AgPr6eqPXzcjIwOjRo7Fz5058+umnOssVCgVUKhVaW1vR2Nios1xz++T2LqSGUigUcHV1ha2tLTo6OvSOhyGEwNSpU43etj5/+9vf8N///d945JFH9C5vbm7ucRtNTU0AgGXLlunNVXMM161bJ7U99NBDWttoaGiAEEI6b9T7WGwQkVFaW1t1Blr68ccfUVFRgYCAAK0PdE9PT5SXl2vFVlVVdTt2gqOjo1ZxMnr0aHz00UdmzN48Hn30UQAw6XaDk5MTPvvsMyiVSmzfvl1vzOzZswFAp6tmW1sb8vLy4ODggMjISKP3DQAxMTHo7OzU6j2ksWnTJgwfPtws41E0NDTgk08+wbJly7qNeeyxxwAAeXl5OsuOHDkC4LfbT/dK8zeoOW/U+1hsEJFRVCoVVq5cCbVajebmZpw6dQrx8fGws7PD1q1btWIjIiJQUVGB999/H01NTSgtLcXy5cu1rn7cbvz48SguLsaVK1egVqtRVlamNUhUWFgY3NzccPLkSYu+x54EBARgyJAhKCwsNGl9f39/pKWldbt848aNGDlyJJKSkpCbm4vGxkYUFxdj/vz5qKysxNatW6XbKcbauHEjfH19sXjxYhw8eBD19fWora1FWloa1q5di9TUVK0ux/Hx8ZDJZLh48aJR+9m5cyecnJykwkmfl156CQ8//DA++OAD/O1vf8P169dRU1ODHTt24N1334W3tzeSk5NNep+303Tp7WkAMLKgXu7+0i+x6yuZm7m6vu7bt0/qTqh5LViwQKjVap32t99+WwghdNqjoqKk7QUEBAhvb29x/vx5ERkZKZydnYWDg4OYMmWKOH78uM7+6+rqREJCgvD09BQODg5i8uTJIj8/XwQFBUnbf/PNN6X4oqIiERoaKpRKpfDx8RHbtm3T2l5oaKgYOHCgWbtnmvr/d+XKlcLW1laUl5dLbTdu3NA5fkFBQd1uY+nSpXq7vgohRHV1tUhKShIjR44UcrlcqFQqERkZKfLy8qQYU89jTU2NWLFihRg1apSQy+Vi8ODBIiIiQhw+fFgnj7CwMOHk5CQ6OzsNPjZdXV3ioYceEmvWrOkxtra2Vrz++utizJgxQqFQCDs7O+Hr6ytefvllUVVV1e16S5Ys0XmPAERkZKRObGxsrPD29hbt7e0Gvwch2PXVjLJlQli5D1k/EBsbCwDYu3evlTOh/iI7OxtxcXFW7+J5p3HjxqG6utqsvRWszdT/v/X19fD390d0dDQ+/PBDS6RmdXV1dfDy8sKCBQuQnp5u7XRMUlhYiMDAQGRmZmLu3LlGrSuTyZCVlYVnn33WQtk9MPbyNkofsmfPHulpas3T7g8KJycnnSfjbWxsMHDgQAQEBOCll17C6dOnrZ0mkUSlUuHAgQPIycnBtm3brJ2O2QkhkJiYCBcXF6xbt87a6ZikrKwMMTExSElJMbrQIPNisdGHzJ07F0IIqcvXg6SpqQk//PADgP8/a2RHRweKioqwdu1aFBUVITg4GIsWLcLNmzetnC3RbwIDA3Hq1CkcPHgQDQ0N1k7HrK5du4aysjLk5eWZ1POlL0hLS8OGDRuwYcMGa6fywGOxQX3WgAEDMHToUMycORNHjhzBG2+8gY8//hjz5s3rc7cX+jvN3CWFhYUoLy+HTCbDqlWrrJ1WnzBixAjk5ubCxcXF2qmYlYeHB44fPw5/f39rp2KyTZs28YpGH8Fig+4b7777Lh577DF8/vnn2LNnj7XTeaAkJyfrjG+wfv16a6dFRPcJFht035DJZNKoi92NT0BERH0Piw0rKioqwqxZs6BSqaBUKhEaGorjx493G2/ItNCmTDnd1taGNWvWYMyYMXB0dMSgQYPwzDPP4PPPP8etW7eMzsGSNNOVnzx5UmuoaB4bIqI+zEp9bvsVU/rpl5SUCFdXV+Ht7S0OHTokGhsbxdmzZ0VERIQYMWKEUCgUWvHGTgttzJTTCQkJQqVSiUOHDombN2+KqqoqkZycLACIb775xuQcjJ0O/IcffpBy7k5LS4vUn76iouK+PTY9MfcU89Q9jpND3QHH2TCXbH6amYEpH1axsbECgMjJydFqLy8vFwqFQqfYeP755wUAsXv3bq32yspKoVAodAYO0nyhHjhwQCdXAOLGjRtS28iRI8WkSZN0cvTz89P6QjU2hylTphg1AJMhxcbNmzd1io378dj0hMVG72GxQd1hsWE22bYgq9DMdnjn/AZeXl7w8/NDcXGxVruh00IPGzZMa/ndppx2d3cHADz11FP44IMP8Kc//QmLFy/GhAkTMGDAAPz888/3lMPRo0cNPRwG00xfLpfLpfzvx2NjKM2AU2Q5mqHPeayJLIfPbFhBW1sbGhsbYW9vDycnJ53ld84bcS/TQhsydfi2bdvwySefoKysDOHh4XBxccFTTz2Fffv2mSUHc9I80xISEgK5XM5jQ0R0H+CVDStQKBRwdnZGY2MjmpqadAqO2tpanXhXV1c0NTWhpaVFa5Ikc5DJZFi4cCEWLlyIjo4OHD16FKmpqYiJicFf//pXrFixwuI5GKKrq0saqVEzk2R/PzYcAt/yON0AdUcmk1k7hX6DVzasZPr06QD+/+0Ujerqap1L9IBlp4V2dXVFUVERgN9uTzz55JNSz43bp7jurampu5OSkoJ///vfmD17ttYlbx4bIqK+jcWGlfzlL3/BoEGDkJSUhMOHD6OpqQnnz59HfHy83lsrxk4Lbaw///nPOHv2LNra2nD9+nVs3rwZQgiEhYWZnMO9Tgfe1dWF69ev45///CfCw8OxefNmLF68GLt379b6xXE/HhsiogeKtR9R7Q9MfZr9559/FrNmzRIuLi5St8vc3FwRHh4u9bh44YUXpHhDpoU2ZcrpgoICsWTJEvH73/9eODo6ikGDBomJEyeK9PR00dXVpZWzMVNTGzMduFKp1MlPJpMJlUolxo4dK5YuXSpOnz7d7fr327HpCXuj9B72RqHugL1RzIVTzJsD7/mSufXVKeb7I/7/pe5winmz4RTzRET34vLly5gxYwYaGhpQXV2t1RMpMDAQra2tOuvcGSeTyRAcHGyF7M1LCIETJ05g2bJl8PPzg0KhwJAhQzB58mTs2rWr2+K5oKAAUVFRcHV1hbOzM6ZNm6b3+Sdj49966y1kZWWZ7f2R6VhsEBGZqKCgAMHBwYiIiICLiwvc3d0hhEB+fr60PCkpSWc9TZxarYabmxuEEDh16lRvp292P//8MyZPnozi4mLk5OSgvr4eJ0+exPDhw7Fw4UK8/vrrOut8//33mDRpEpydnXHhwgVcvHgRo0aNwhNPPIFDhw7dU/yLL76IlJQUrF692mLvmQxkvVs4/Qfv+ZK59cVnNpRKpXj88cf73f5N/f9bX18vhg0bJpYsWaKzLD8/XygUCuHm5iYAiMzMTL3bUKvVws3Nzeh991UXLlwQtra2ora2Vqu9ra1NuLm5CYVCIVpbW6X2W7duCX9/f+Hp6Slu3rwptXd2dorRo0cLHx+fe4oX4rfnrmQymUnPXoDPbJhLNq9sEBGZYPPmzaiqqsKaNWv0Lre3t8fu3bthY2ODJUuW6IwK3B+NGTMGHR0dGDhwoFa7nZ0dfHx80NbWpnVb6dixY/jpp58wZ84cODg4SO0DBgzAvHnzcOXKFeTm5pocDwABAQGYM2cOXnvtNXY/tyIWG0RERhJCICMjA4899hi8vLy6jYuMjMSqVavQ2NiI2NhYvc9vPAjq6upQUlKCwMBArZF7jxw5AgB6n1fRtOXl5ZkcrzF79mxcvXpVa2wc6l0sNoj6kZqaGqxYsQK+vr6ws7PDwIEDMX36dHzzzTdSzPr166WHEidPniy1f/XVV1K7Zm4YAEhNTYVMJkNzczNOnDghxWjGDdEsl8lkGDZsGPLz8xEeHg5nZ2c4Ojpi6tSpWg/vmXv/1lBYWIhr164hICCgx9h33nkHEREROHv2LF555RWD92HIudQMMKd5Xbp0CXFxcXB1dYWbmxuio6NRWlqqs+0bN24gMTERI0aMgJ2dHQYPHoyYmBgUFBQYnJ8hGhoacOLECcyYMQMeHh745JNPtJZrBszTN2eQt7c3AGhdETI2XmPcuHEAgK+//tqUt0FmwGKDqJ+oqqrChAkTkJmZia1bt6K6uhrff/89HB0dER4ejoyMDADAqlWrIISAUqnUWv+pp56CEAJBQUFa7cnJyVL8448/DiEEhBDSJWnN8oCAANTV1WH58uVYv349qqqqcOzYMdTW1iIsLAzffvutRfavca+DyBnj3LlzAPR/6d3JxsYGu3fvho+PDzIyMrB79+4e1zH0XM6aNQtCCMycORMAkJSUhKSkJJSXlyMrKwtHjhzBvHnztLZdWVmJCRMmIDs7G9u3b0dtbS2OHj2K2tpahISEQK1WG3s49Fq/fj1UKhUmT56MAQMGYN++fXj00Ue1Yurq6gBA528BgDS44a+//mpyvIamENGcN+p9LDaI+omUlBRcvHgRW7ZsQXR0NFxcXODn54fMzEx4enoiMTER165ds2gOzc3N2L59O0JCQqBUKhEcHIxdu3ahvb0dy5cvt+i+u7q6pELE0jSzD985mV933N3dkZ2dDblcjiVLlki/0Ltj6rlMSEiQjv20adMQFRWF/Px8VFdXa2378uXLeO+99/D000/DyckJ/v7+2LNnD4QQRl19uZtVq1ahra0NFy5cwJgxYxAYGIh169YZvL7mPBo6P8nd4l1cXCCTyaTzRr2PxQZRP6GZiTYqKkqrXaFQIDw8HC0tLRa/jKxUKqVL1hpjx46Fl5cXCgsLLfphf/uvc0vTPHshl8sNXmfixIlITU1Fc3MzYmNj0dLS0m2sqedywoQJWv/28fEBAFRUVEht+/fvh42NDaKjo7ViPTw84O/vj9OnT+Pq1asGv6+7sbOzw5gxY/DBBx9gxowZWLNmDf71r39Jy11dXQH8VqTeSdOmiTEl/na2trZ3PeZkWSw2iPoBzTT39vb2cHZ21lk+dOhQAL9dnrek7j7ohwwZAgC4fv26RfffW+zt7QEAHR0dRq2XmJiIuLg4nDt3Di+//LLemHs5l3deabGzswPw21Wf27fd1dUFlUqlM7DYmTNnAAAlJSVGvS9DPPPMMwCg1VtkzJgxAKC3uCkvLwcA+Pn5mRx/u87OTq0eLNS7WGwQ9QMKhQIqlQqtra1obGzUWa655O7h4SG12djYoL29XSdWc1/8ToZczq6pqdF7G0NTZGiKDkvtv7d4enoCAOrr641eNyMjA6NHj8bOnTvx6aef6iw35VwaSqFQwNXVFba2tujo6JBuO935mjp1qtHbNmTfAFBbWyu1afZz+vRpnXhNW3h4uMnxGg0NDRBCSOeNeh+LDaJ+Yvbs2QCg072vra0NeXl5cHBwQGRkpNTu6ekp/RrUqKqqwi+//KJ3+46OjlrFwejRo/HRRx9pxbS2tkqjZ2r8+OOPqKioQEBAgNaHvSX231s0DzqacrvByckJn332GZRKJbZv3643xthzaYyYmBh0dnbqHd5706ZNGD58uMnjUSQnJyM+Pl7vsoMHDwLQvtUzZcoUPPLII8jJydHqFnzr1i3s2bMHPj4+WreSjI3X0Pyd3fmAKvUeFhtE/cTGjRsxcuRIJCUlITc3F42NjSguLsb8+fNRWVmJrVu3SpfgASAiIgIVFRV4//330dTUhNLSUixfvlzr6sPtxo8fj+LiYly5cgVqtRplZWUIDQ3VilGpVFi5ciXUajWam5tx6tQpxMfHw87ODlu3btWKNff+e7M3SkBAAIYMGYLCwkKT1vf390daWlq3y409l8bYuHEjfH19sXjxYhw8eBD19fWora1FWloa1q5di9TUVK1uxfHx8ZDJZLh48aJB28/MzMTatWtx6dIltLW14dKlS3jzzTexa9cuBAUFISEhQYq1sbHBjh07UFtbi0WLFqGqqgo1NTVYtmwZSkpKkJ6eLt2yMiVeQ9OlNyIiwqRjRmbQW2OV9mccrpzMzdThyqurq0VSUpIYOXKkkMvlQqVSicjISJGXl6cTW1dXJxISEoSnp6dwcHAQkydPFvn5+SIoKEgAEADEm2++KcUXFRWJ0NBQoVQqhY+Pj9i2bZvW9gICAoS3t7c4f/68iIyMFM7OzsLBwUFMmTJFHD9+3OL7Dw0NFQMHDhTfffedUcfM1P+/K1euFLa2tqK8vFxqu3HjhpS75hUUFNTtNpYuXdrtcOWGnEu1Wq2zv7ffflsIIXTao6KipPVqamrEihUrxKhRo4RcLheDBw8WERER4vDhwzp5hIWFCScnJ9HZ2dnjMamvrxcZGRkiMjJSjBgxQtjZ2QknJycRFBQkNm7cqDXE+O3OnDkjpk+fLlxcXISTk5MICwvT+zdjanxsbKzw9vYW7e3tPb6H24HDlZsLp5g3B05RTeZ2P04xP27cOFRXV5utJ0NvMfX/b319Pfz9/REdHY0PP/zQEqlZXV1dHby8vLBgwQKkp6dbOx2TFBYWIjAwEJmZmZg7d65R63KKebPhFPNERKZQqVQ4cOAAcnJysG3bNmunY3ZCCCQmJsLFxcWo8TH6krKyMsTExCAlJcXoQoPMi8UGEZGJAgMDcerUKRw8eBANDQ3WTsesrl27hrKyMuTl5ZnU86UvSEtLw4YNG7BhwwZrp/LAY7FBRPdEM3dJYWEhysvLIZPJsGrVKmun1WtGjBiB3NxcuLi4WDsVs/Lw8MDx48fh7+9v7VRMtmnTJl7R6COsN5MREfULycnJSE5OtnYaRNSH8coGERERWRSLDSIiIrIoFhtERERkUSw2iIiIyKJYbBAREZFFsTeKmeTk5PSpWSmpf+DfVO/hsSayHA5XbgZqtRpXrlyxdhpEFqdWq7FlyxZkZWVZOxWiXjFp0iQMGzbM2mnc7/ay2CAig92Pc7YQkdVxbhQiIiKyLBYbREREZFEsNoiIiMiiWGwQERGRRbHYICIiIotisUFEREQWxWKDiIiILIrFBhEREVkUiw0iIiKyKBYbREREZFEsNoiIiMiiWGwQERGRRbHYICIiIotisUFEREQWxWKDiIiILIrFBhEREVkUiw0iIiKyKBYbREREZFEsNoiIiMiiWGwQERGRRbHYICIiIotisUFEREQWxWKDiIiILIrFBhEREVkUiw0iIiKyKBYbREREZFEsNoiIiMiiWGwQERGRRbHYICIiIotisUFEREQWxWKDiIiILIrFBhEREVmUrbUTIKK+6caNG9i3b59W26lTpwAAH330kVa7s7Mz5s2b12u5EdH9RSaEENZOgoj6nra2NgwZMgRNTU0YMGAAAEDzcSGTyaS4jo4OPP/88/j444+tkSYR9X17eRuFiPRSKBSYM2cObG1t0dHRgY6ODnR2dqKzs1P6d0dHBwBg/vz5Vs6WiPoyFhtE1K358+ejvb39rjGurq4ICwvrpYyI6H7EYoOIujV16lQMHjy42+VyuRzx8fGwteXjX0TUPRYbRNQtGxsbLFiwAHK5XO/yjo4OPhhKRD1isUFEdzVv3jzp2Yw7eXl5ISQkpJczIqL7DYsNIrqr//qv/8Lvfvc7nXY7Ozs8//zzWj1TiIj0YbFBRD1auHChzq2U9vZ23kIhIoOw2CDKx/0iAAAgAElEQVSiHi1YsEDnVspDDz2EsWPHWikjIrqfsNggoh6NGTMGjzzyiHTLRC6XY9GiRVbOiojuFyw2iMggzz33nDSSaGdnJ2+hEJHBWGwQkUHmzZuHW7duAQDGjx+PkSNHWjkjIrpfsNggIoMMHz4cjz32GADg+eeft3I2RHQ/4bB/3VCr1XjvvfesnQZRn9LW1gaZTIZDhw7h2LFj1k6HqE/Zu3evtVPos3hloxtXrlxBTk6OtdMg6tHJkydx8uTJXtnXsGHDMHToUNjb2/fK/vqanJwcXL161dppUB9z9epVfl/0gFc2esBKlfq62NhYAL33t/qf//wHDz30UK/sq6+RyWR49dVX8eyzz1o7FepDsrOzERcXZ+00+jRe2SAiozyohQYRmY7FBhEREVkUiw0iIiKyKBYbREREZFEsNoiIesHly5cxY8YMNDQ0oLq6GjKZTHoFBgaitbVVZ50742QyGYKDg62QvXkJIXDixAksW7YMfn5+UCgUGDJkCCZPnoxdu3ZBCKF3vYKCAkRFRcHV1RXOzs6YNm0aTpw40e1+DI1/6623kJWVZbb3R7pYbBCRpKmpCQ8//DCio6OtnUq/UlBQgODgYERERMDFxQXu7u4QQiA/P19anpSUpLOeJk6tVsPNzQ1CCJw6daq30ze7n3/+GZMnT0ZxcTFycnJQX1+PkydPYvjw4Vi4cCFef/11nXW+//57TJo0Cc7Ozrhw4QIuXryIUaNG4YknnsChQ4fuKf7FF19ESkoKVq9ebbH3/MATpFdWVpbg4aH7wZw5c8ScOXPMsq2GhgYxatQoMX36dLNsz5KUSqV4/PHHe3WfAERWVpZR69TX14thw4aJJUuW6CzLz88XCoVCuLm5CQAiMzNT7zbUarVwc3MzKee+6MKFC8LW1lbU1tZqtbe1tQk3NzehUChEa2ur1H7r1i3h7+8vPD09xc2bN6X2zs5OMXr0aOHj43NP8UIIUVBQIGQymdHnVwh+Xxggm1c2iEji7OyM0tJSfPnll9ZOpd/YvHkzqqqqsGbNGr3L7e3tsXv3btjY2GDJkiUoLi7u5Qx735gxY9DR0YGBAwdqtdvZ2cHHxwdtbW1at5WOHTuGn376CXPmzIGDg4PUPmDAAMybNw9XrlxBbm6uyfEAEBAQgDlz5uC1115DZ2enud/yA4/FBhGRhQghkJGRgcceewxeXl7dxkVGRmLVqlVobGxEbGys3uc3HgR1dXUoKSlBYGAgVCqV1H7kyBEA0Pu8iqYtLy/P5HiN2bNn4+rVq/jiiy/u4V2QPiw2iAgAsH//fq0HETVfeHe2X7p0CXFxcXB1dYWbmxuio6NRWloqbSc1NVWKHTZsGPLz8xEeHg5nZ2c4Ojpi6tSpWg/prV+/XoqfPHmy1P7VV19J7e7u7jrbb25uxokTJ6QYW9u+NyByYWEhrl27hoCAgB5j33nnHURERODs2bN45ZVXDN5HTU0NVqxYAV9fX9jZ2WHgwIGYPn06vvnmGynG2HOocePGDSQmJmLEiBGws7PD4MGDERMTg4KCAoPzM0RDQwNOnDiBGTNmwMPDA5988onW8qKiIgC/DZd/J29vbwDQuiJkbLzGuHHjAABff/21KW+D7sbaN3L6Kt6Do/uFOZ/ZEEKImTNnCgCipaVFb/vMmTPFd999J5qamsThw4eFg4ODmDBhgs52AgIChFKpFCEhIVJ8fn6++MMf/iDs7OzE0aNHteK7ewYjKChI7/MKPT2zMXXqVDFo0CChVqsNfes9gpHPbHz66acCgPjLX/6id3l+fr5QqVTSv2/cuCF8fHwEALFr1y6pvbtnNiorK8XIkSPF0KFDxYEDB0R9fb34+eefRUxMjJDJZCI9PV0r3phzWFFRIX73u9+JoUOHii+++EI0NjaKc+fOiSlTpgh7e3vx3XffGXwc7mbdunUCgAAgnnjiCXH27FmdmCeffFIAECdPntRZVlJSIgCI8ePHmxyvUV9fLwCI0NBQo94Dvy96xGc2iMg4CQkJCAkJgVKpxLRp0xAVFYX8/HxUV1frxDY3N2P79u1SfHBwMHbt2oX29nYsX77conl2dXVBCNFtN8reUFlZCQBatwTuxt3dHdnZ2ZDL5ViyZIn0C707KSkpuHjxIrZs2YLo6Gi4uLjAz88PmZmZ8PT0RGJiIq5du6azniHnMCUlBZcvX8Z7772Hp59+Gk5OTvD398eePXsghDDq6svdrFq1Cm1tbbhw4QLGjBmDwMBArFu3zuD1NedXJpPdc7yLiwtkMpl03sh8WGwQkVEmTJig9W8fHx8AQEVFhU6sUqmULk1rjB07Fl5eXigsLLToh/rRo0dRW1uLkJAQi+2jJ5pbUXK53OB1Jk6ciNTUVDQ3NyM2NhYtLS3dxu7btw8AEBUVpdWuUCgQHh6OlpYWvbcEDDmH+/fvh42NjU43aA8PD/j7++P06dNmmwHXzs4OY8aMwQcffIAZM2ZgzZo1+Ne//iUtd3V1BfBb8XonTZsmxpT429na2t71mJNpWGwQkVHu/JVuZ2cH4LcrCXfq7gN9yJAhAIDr16+bObu+xd7eHgDQ0dFh1HqJiYmIi4vDuXPn8PLLL+uNaWtrQ319Pezt7eHs7KyzfOjQoQCAqqoqnWU9nUPNtru6uqBSqXQGFjtz5gwAoKSkxKj3ZYhnnnkGALR6i4wZMwYA9BY35eXlAAA/Pz+T42/X2dmp1YOFzIPFBhFZTE1Njd7bGJoiQ1N0AICNjQ3a29t1Yuvq6vRu29DL5tbk6ekJAKivrzd63YyMDIwePRo7d+7Ep59+qrNcoVBApVKhtbUVjY2NOss1t088PDyM3rdCoYCrqytsbW3R0dEh3Y668zV16lSjt23IvgGgtrZWatPs5/Tp0zrxmrbw8HCT4zUaGhoghJDOG5kPiw0ispjW1lZplEyNH3/8ERUVFQgICND6UPf09JR+dWpUVVXhl19+0bttR0dHreJk9OjR+Oijj8yY/b179NFHAej/hd0TJycnfPbZZ1Aqldi+fbvemNmzZwOATlfNtrY25OXlwcHBAZGRkUbvGwBiYmLQ2dmpd3jvTZs2Yfjw4SaPR5GcnIz4+Hi9yw4ePAhA+1bPlClT8MgjjyAnJ0erW/CtW7ewZ88e+Pj4aN1KMjZeQ/P3pzlvZD4sNojIYlQqFVauXAm1Wo3m5macOnUK8fHxsLOzw9atW7ViIyIiUFFRgffffx9NTU0oLS3F8uXLta5+3G78+PEoLi7GlStXoFarUVZWhtDQUGl5WFgY3NzccPLkSYu+x7sJCAjAkCFDUFhYaNL6/v7+SEtL63b5xo0bMXLkSCQlJSE3NxeNjY0oLi7G/PnzUVlZia1bt0q3U4y1ceNG+Pr6YvHixTh48CDq6+tRW1uLtLQ0rF27FqmpqVrdjePj4yGTyXDx4kWDtp+ZmYm1a9fi0qVLaGtrw6VLl/Dmm29i165dCAoKQkJCghRrY2ODHTt2oLa2FosWLUJVVRVqamqwbNkylJSUID09XbplZUq8hqZLb0REhEnHjO7CKp1g7gPsykT3C3N1fd23b5/UBVHzWrBggVCr1Trtb7/9thBC6LRHRUVJ2wsICBDe3t7i/PnzIjIyUjg7OwsHBwcxZcoUcfz4cZ3919XViYSEBOHp6SkcHBzE5MmTRX5+vggKCpK2/+abb0rxRUVFIjQ0VCiVSuHj4yO2bdumtb3Q0FAxcOBAs3XR1LxfY4ezXrlypbC1tRXl5eVS240bN3SOXVBQULfbWLp0abfDlVdXV4ukpCQxcuRIIZfLhUqlEpGRkSIvL0+KMfUc1tTUiBUrVohRo0YJuVwuBg8eLCIiIsThw4d18ggLCxNOTk6is7Ozx2NSX18vMjIyRGRkpBgxYoSws7MTTk5OIigoSGzcuFFriPHbnTlzRkyfPl24uLgIJycnERYWpvdvydT42NhY4e3tLdrb23t8D7fj90WPsmVCWLFfWB+WnZ2NuLg4q3abIzJEbGwsAGDv3r1WzkTbuHHjUF1dbbYeC32BTCZDVlYWnn32WYPXqa+vh7+/P6Kjo/Hhhx9aMDvrqaurg5eXFxYsWID09HRrp2OSwsJCBAYGIjMzE3PnzjVqXX5f9Ggvb6MQEVmQSqXCgQMHkJOTg23btlk7HbMTQiAxMREuLi5GjY/Rl5SVlSEmJgYpKSlGFxpkGBYbFrZnzx6pu5i+e4T93Zdffgk/Pz+zDiXt5OSk0xXPxsYGAwcOREBAAF566SW9T6ETWUtgYCBOnTqFgwcPoqGhwdrpmNW1a9dQVlaGvLw8k3q+9AVpaWnYsGEDNmzYYO1U+i0WGxY2d+5cCCH0drPqz0pLSzFjxgykpKToHcHwXjQ1NeGHH34AAMycORNCCHR0dKCoqAhr165FUVERgoODsWjRIty8edOs+6aeaeYuKSwsRHl5OWQyGVatWmXttKxuxIgRyM3NhYuLi7VTMSsPDw8cP34c/v7+1k7FZJs2beIVDQtjsUEWsXr1akyaNAmnT5/WO+CQuQ0YMABDhw7FzJkzceTIEbzxxhv4+OOPMW/ePN5H7WXJyck64zGsX7/e2mkRkRX1vWkSqV/YsWOHVUfhe/fdd/Htt9/i888/x549ezBv3jyr5UJE9KDjlQ2yCGsP9yuTyaRhnrsbEImIiHoHiw0zKyoqwqxZs6BSqaBUKhEaGorjx493G3/jxg0kJiZixIgRsLOzw+DBgxETEyMNLgP8NiHS7Q9DXrp0CXFxcXB1dYWbmxuio6NRWlqqtd22tjasWbMGY8aMgaOjIwYNGoRnnnkGn3/+OW7dumV0DvejyZMnAwBOnjypNTcFjzkRUS+zzvgefZ8pg7SUlJQIV1dX4e3tLQ4dOiQaGxvF2bNnRUREhBgxYoRQKBRa8RUVFeJ3v/udGDp0qPjiiy9EY2OjOHfunJgyZYqwt7fXGYxo5syZAoCYOXOm+O6770RTU5M4fPiwcHBwEBMmTNCKTUhIECqVShw6dEjcvHlTVFVVieTkZAFAfPPNNybnYApvb28xYMCAu8ZMnTpVDBo0SKjVaoO2+cMPP0jHojstLS3SQEUVFRVCiP55zM01qBf1DCYM6kX9Hwf16lE2j043TPnjiY2NFQBETk6OVnt5eblQKBQ6xcbzzz8vAIjdu3drtVdWVgqFQqEzoqDmi+/AgQNa7XPmzBEAxI0bN6S2kSNHikmTJunk6Ofnp/XFZ2wOpjCk2JgyZYpRoz0aUmzcvHlTp9joj8ecxUbvYbFB+rDY6BGLje6Y8sfj7OwsAIjGxkadZWPHjtUpNlQqlbCxsRH19fU68ePHjxcAxJUrV6Q2zRdfVVWVVuyrr74qAIjCwkKpbenSpQKAePHFF4Vare52CGFjczCFIcWGsQwpNkpLSwUAIZfLpeGH++Mx1xQ+fPHFl3Vf1K1s9kYxk7a2NjQ2NsLe3h5OTk46y4cMGYLi4mKteM200yqVqtvtlpSUYNiwYVptd8bb2dkBALq6uqS2bdu2ISQkBP/3f/8njfERGhqKJUuWSDNF3ksO9wPNszIhISGQy+X9+phPnDgRr776qsHxZJq4uDgkJSUhJCTE2qlQH6JWq7FlyxZrp9GnsdgwE4VCAWdnZzQ2NqKpqUmn4KitrdWJd3V1RVNTE1paWsw6wibwW2+MhQsXYuHChejo6MDRo0eRmpqKmJgY/PWvf8WKFSssnoM1dXV1SUNDL1u2DED/PubDhg0zar4OMk1cXBxCQkJ4rEkHi427Y28UM5o+fToA4KuvvtJqr66uxs8//6wTHxMTg87OTpw4cUJn2aZNmzB8+HB0dnaalIurqyuKiooAAHK5HE8++aTUw+KLL77olRysKSUlBf/+978xe/ZsaaIygMeciMgaWGyY0V/+8hcMGjQISUlJOHz4MJqamnD+/HnEx8frvbWyceNG+Pr6YvHixTh48CDq6+tRW1uLtLQ0rF27Fqmpqff0y/fPf/4zzp49i7a2Nly/fh2bN2+GEAJhYWG9loOhwsLC4ObmhpMnT5q0fldXF65fv45//vOfCA8Px+bNm7F48WLs3r0bMplMiuMxJyKyAms/NdJXmfp08c8//yxmzZolXFxcpO6Rubm5Ijw8XHqI6IUXXpDia2pqxIoVK8SoUaOEXC4XgwcPFhEREeLw4cNSjFqt1nkQ6e233xZCCJ32qKgoIYQQBQUFYsmSJeL3v/+9cHR0FIMGDRITJ04U6enpoqurSytnQ3Iw1oEDB7p9iCo9PV0nPjQ01ODeKEqlUmebMplMqFQqMXbsWLF06VJx+vTpbtfvb8ecvVF6D8DeKKSLvVF6lC0TghNH6JOdnY24uDjOq0F9nuY20d69e62cSf8nk8mQlZXFZzZIC78verSXt1GIiHrB5cuXMWPGDDQ0NKC6ulprhNrAwEC0trbqrHNnnEwmQ3BwsBWyt5wvv/wSfn5+Bt06LCgoQFRUFFxdXeHs7Ixp06bpffbJ2Pi33noLWVlZ9/Q+6O5YbBARWVhBQQGCg4MREREBFxcXuLu7QwiB/Px8aXlSUpLOepo4tVoNNzc3CCFw6tSp3k7fIkpLSzFjxgykpKTg2rVrPcZ///33mDRpEpydnXHhwgVcvHgRo0aNwhNPPIFDhw7dU/yLL76IlJQUrF692mzvj7Sx2CCD3PnrSt/rf/7nf6ydJvURTk5O0tw0D+L+b9fQ0IBnnnkGf/zjH6XJAW+nUCjg5uaGtLQ0/OMf/7BChtaxevVqTJo0CadPn4azs/NdY7u6uvDCCy/A1dUVf//73+Hp6Ql3d3d88MEH8PX1RUJCAtra2kyO9/X1xb59+7BhwwZkZ2db7D0/yFhskEGEED2+WGwQ6dq8eTOqqqqwZs0avcvt7e2xe/du2NjYYMmSJVqD//VnO3bswFtvvWXQ7ZNjx47hp59+wpw5c7RmlB4wYADmzZuHK1euIDc31+R4AAgICMCcOXPw2muvseu5BbDYICKyECEEMjIy8Nhjj8HLy6vbuMjISKxatQqNjY2IjY3V+/xGf3N7EdCTI0eOAIDe51U0bXl5eSbHa8yePRtXr17VGheHzIPFBtEDqqamBitWrICvry/s7OwwcOBATJ8+Hd98840Us379euk22e23Jb766iup3d3dXWpPTU2FTCZDc3MzTpw4IcVofr1qlstkMgwbNgz5+fkIDw+Hs7MzHB0dMXXqVK0H+My9/95WWFiIa9euISAgoMfYd955BxERETh79ixeeeUVg/dhyHnUDC6neV26dAlxcXFwdXWFm5sboqOjUVpaqrPtGzduIDExESNGjICdnR0GDx6MmJgYFBQUGJyfOWgGy9M3hL+3tzcAaF0RMjZeY9y4cQCAr7/++h4zpjux2CB6AFVVVWHChAnIzMzE1q1bUV1dje+//x6Ojo4IDw9HRkYGAGDVqlUQQkCpVGqt/9RTT0EIgaCgIK325ORkKf7xxx+XbrFpLktrlgcEBKCurg7Lly/H+vXrUVVVhWPHjqG2thZhYWH49ttvLbJ/jXsdRM5Q586dA6D/S+9ONjY22L17N3x8fJCRkYHdu3f3uI6h53HWrFkQQmDmzJkAgKSkJCQlJaG8vBxZWVk4cuQI5s2bp7XtyspKTJgwAdnZ2di+fTtqa2tx9OhR1NbWIiQkBGq12tjDYbK6ujoA0Pk7ACANmPjrr7+aHK+hKUQ0543Mh8UG0QMoJSUFFy9exJYtWxAdHQ0XFxf4+fkhMzMTnp6eSExMNKiHwL1obm7G9u3bERISAqVSieDgYOzatQvt7e1Yvny5Rffd1dUlFSKWVFlZCeDuk+7dzt3dHdnZ2ZDL5ViyZIn0C707pp7HhIQE6bhPmzYNUVFRyM/PR3V1tda2L1++jPfeew9PP/00nJyc4O/vjz179kAIYdTVF0vSnMPbRwo2Nd7FxQUymUw6b2Q+LDaIHkD79u0DAERFRWm1KxQKhIeHo6WlxeKXkpVKpXTZWmPs2LHw8vJCYWGhRT/wb/+FbkmaZy/kcrnB60ycOBGpqalobm5GbGwsWlpauo019TxOmDBB698+Pj4AgIqKCqlt//79sLGxQXR0tFash4cH/P39cfr0aVy9etXg93UvXF1dAfxWoN5J06aJMSX+dra2tnc95mQaFhtEDxjNNPf29vZ6uxwOHToUwG+X6C2puw/7IUOGAACuX79u0f33Bnt7ewBAR0eHUeslJiYiLi4O586d09tdFri383jnlRY7OzsAv13xuX3bXV1dUKlUOt3cz5w5AwAoKSkx6n2ZasyYMQCgt7gpLy8HAPj5+Zkcf7vOzk6jHl4lw7DYIHrAKBQKqFQqtLa2orGxUWe55rK7h4eH1GZjY4P29nadWM298TsZckm7pqZG720MTZGhKTostf/e4OnpCQCor683et2MjAyMHj0aO3fuxKeffqqz3JTzaCiFQgFXV1fY2tqio6Oj2+7uU6dONXrbptDs5/Tp0zrLNG3h4eEmx2s0NDRACCGdNzIfFhtED6DZs2cDgE4Xv7a2NuTl5cHBwQGRkZFSu6enp/SLUKOqqgq//PKL3u07OjpqFQejR4/GRx99pBXT2toqjaCp8eOPP6KiogIBAQFaH/iW2H9vePTRRwHo/4XdEycnJ3z22WdQKpXYvn273hhjz6MxYmJi0NnZqXd4702bNmH48OG9Nh7FlClT8MgjjyAnJ0erW/CtW7ewZ88e+Pj4aN1KMjZeQ/M3pjlvZD4sNogeQBs3bsTIkSORlJSE3NxcNDY2ori4GPPnz0dlZSW2bt0qXYYHgIiICFRUVOD9999HU1MTSktLsXz5cq2rD7cbP348iouLceXKFajVapSVlSE0NFQrRqVSYeXKlVCr1WhubsapU6cQHx8POzs7bN26VSvW3Pvvrd4oAQEBGDJkCAoLC01a39/fH2lpad0uN/Y8GmPjxo3w9fXF4sWLcfDgQdTX16O2thZpaWlYu3YtUlNTtboUx8fHQyaT4eLFiybt725sbGywY8cO1NbWYtGiRaiqqkJNTQ2WLVuGkpISpKenS7esTInX0HTpjYiIMPt7eOBZaj7Z+x2nDKb7halTzFdXV4ukpCQxcuRIIZfLhUqlEpGRkSIvL08ntq6uTiQkJAhPT0/h4OAgJk+eLPLz80VQUJAAIACIN998U4ovKioSoaGhQqlUCh8fH7Ft2zat7QUEBAhvb29x/vx5ERkZKZydnYWDg4OYMmWKOH78uMX3HxoaKgYOHCi+++47o44ZTJhifuXKlcLW1laUl5dLbTdu3JDy1ryCgoK63cbSpUuFm5ub3mWGnEe1Wq2zv7ffflt6T7e/oqKipPVqamrEihUrxKhRo4RcLheDBw8WERER4vDhwzp5hIWFCScnJ9HZ2WnQcTlw4IDOvjWv9PR0veucOXNGTJ8+Xbi4uAgnJycRFham9+/F1PjY2Fjh7e0t2tvbDXoPGvy+6BGnmO8Opwym+8X9OMX8uHHjUF1d3Wu9GczFlCnm6+vr4e/vj+joaHz44YcWzM566urq4OXlhQULFiA9Pd3a6ZiksLAQgYGByMzMxNy5c41al98XPeIU80RElqRSqXDgwAHk5ORg27Zt1k7H7IQQSExMhIuLC9atW2ftdExSVlaGmJgYpKSkGF1okGFYbBARWVhgYCBOnTqFgwcPoqGhwdrpmNW1a9dQVlaGvLw8k3q+9AVpaWnYsGEDNmzYYO1U+i0WG0TUazRzlxQWFqK8vBwymQyrVq2ydlq9YsSIEcjNzYWLi4u1UzErDw8PHD9+HP7+/tZOxWSbNm3iFQ0Ls87sRET0QEpOTkZycrK10yCiXsYrG0RERGRRLDaIiIjIolhsEBERkUWx2CAiIiKL4gOiPcjOzrZ2CkR3pRkYi3+rvUOtVls7Bepj+DfRM44g2g3NiHBERESG4Ndpt/ay2CAig3FYZiIyAYcrJyIiIstisUFEREQWxWKDiIiILIrFBhEREVkUiw0iIiKyKBYbREREZFEsNoiIiMiiWGwQERGRRbHYICIiIotisUFEREQWxWKDiIiILIrFBhEREVkUiw0iIiKyKBYbREREZFEsNoiIiMiiWGwQERGRRbHYICIiIotisUFEREQWxWKDiIiILIrFBhEREVkUiw0iIiKyKBYbREREZFEsNoiIiMiiWGwQERGRRbHYICIiIotisUFEREQWxWKDiIiILIrFBhEREVkUiw0iIiKyKBYbREREZFEsNoiIiMiiWGwQERGRRbHYICIiIouytXYCRNQ3Xb16Fc8//zxu3boltf36669wdnbGE088oRU7evRopKWl9XKGRHS/YLFBRHoNGzYMly9fRmlpqc6yb7/9Vuvf//3f/91baRHRfYi3UYioW8899xzkcnmPcXPnzu2FbIjofsVig4i6tWDBAnR2dt41xt/fH4888kgvZURE9yMWG0TULV9fX/zhD3+ATCbTu1wul+P555/v5ayI6H7DYoOI7uq5557DgAED9C7r7OxEbGxsL2dERPcbFhtEdFfz5s1DV1eXTruNjQ0mTpyIESNG9H5SRHRfYbFBRHfl6emJxx9/HDY22h8XNjY2eO6556yUFRHdT1hsEFGPFi5cqNMmhEBMTIwVsiGi+w2LDSLq0Zw5c7Se2xgwYACmTZuGIUOGWDErIrpfsNggoh4NHDgQTz75pFRwCCEQHx9v5ayI6H7BYoOIDBIfHy89KCqXyzFr1iwrZ0RE9wsWG0RkkBkzZkChUAAAnnnmGTg5OVk5IyK6X7DYICKDKJVK6WoGb6EQkTFkQghh7ST6ouzsbMTFxVk7DSIiuk/w67Rbeznraw+ysrKsnQLRXf3v//4vAODVV1+1+L5u3bqFrKwszJ8/3+L76ovi4uKQlJSEkJAQa6dCfYharcaWLVusnUafxmKjB88++6y1UyC6q7179wLovb/V2bNnw97evlf21dfExcUhJCSEn6XWEs0AABtcSURBVAukg8XG3fGZDSIyyoNaaBCR6VhsEBERkUWx2CAiIiKLYrFBREREFsVig4ioF1y+fBkzZsxAQ0MDqqurIZPJpFdgYCBaW1t11rkzTiaTITg42ArZW86XX34JPz8/2Nr23F+hoKAAUVFRcHV1hbOzM6ZNm4YTJ07cc/xbb73FnocWxmKDiCRNTU14+OGHER0dbe1U+pWCggIEBwcjIiICLi4ucHd3hxAC+fn50vKkpCSd9TRxarUabm5uEELg1KlTvZ2+RZSWlmLGjBlISUnBtWvXeoz//vvvMWnSJDg7O+PChQu4ePEiRo0ahSeeeAKHDh26p/gXX3wRKSkpWL16tdneH2ljsUFEEiEEurq6pDlQ+jInJydMnjzZ2mn0qKGhAc888wz++Mc/4uWXX9ZZrlAo4ObmhrS0NPzjH/+wQobWsXr1akyaNAmnT5+Gs7PzXWO7urrwwgsvwNXVFX//+9/h6ekJd3d3fPDBB/D19UVCQgLa2tpMjvf19cW+ffuwYcMGZGdnW+w9P8hYbBCRxNnZGaWlpfjyyy+tnUq/sXnzZlRVVWHNmjV6l9vb22P37t2wsbHBkiVLUFxc3MsZWseOHTvw1ltvGXT75NixY/jpp58wZ84cODg4SO0DBgzAvHnzcOXKFeTm5pocDwABAQGYM2cOXnvtNXR2dprhHdLtWGwQEVmIEAIZGRl47LHH4OXl1W1cZGQkVq1ahcbGRsTGxup9fqO/ub0I6MmRI0cAQO/zKpq2vLw8k+M1Zs+ejatXr+KLL74wODcyDIsNIgIA7N+/X+tBRM0X3p3tly5dQlxcHFxdXeHm5obo6GiUlpZK20lNTZVihw0bhvz8fISHh8PZ2RmOjo6YOnWq1kN669evl+Jvvy3y1VdfSe3u7u46229ubsaJEyekGEN+Ife2wsJCXLt2DQEBAT3GvvPOO4iIiMDZs2fxyiuvGLyPmpoarFixAr6+vrCzs8PAgQMxffp0fPPNN1KMsedQ48aNG0hMTMSIESNgZ2eHwYMHIyYmBgUFBQbnZw5FRUUAgGHDhuks8/b2BgCtK0LGxmuMGzcOAPD111/fY8Z0JxYbRAQAmDVrFoQQmDlz5l3bk5KSkJSUhPLycmRlZeHIkSOYN2+eFJ+cnAwhBAICAlBXV4fly5dj/fr1qKqqwrFjx1BbW4uwsDB8++23AIBVq1ZBCAGlUqm136eeegpCCAQFBWm1a7avVCrx+OOPQwgBIYTOpe+wsDC4ubnh5MmTZjtGxjp37hwA/V96d7KxscHu3bvh4+ODjIwM7N69u8d1qqqqMGHCBGRmZmLr1q2orq7G999/D0dHR4SHhyMjIwOA8ecQACorKzFhwgRkZ2dj+/btqK2txdGjR1FbW4uQkBCo1WpjD4fJ6urqAEDnbwT47dkdAPj1119NjtfQFCKa80bmw2KDiIySkJCAkJAQKJVKTJs2DVFRUcjPz0d1dbVObHNzM7Zv3y7FBwcHY9euXWhvb8fy5cstmmdXV5dUiFhLZWUlAEClUhkU7+7ujuzsbMjlcixZskT6hd6dlJQUXLx4EVu2bEF0dDRcXFzg5+eHzMxMeHp6IjExUW9PD0POYUpKCi5fvoz33nsPTz/9NJycnODv7489e/ZACGHU1RdL0pxfmUx2z/EuLi6QyWTSeSPzYbFBREaZMGGC1r99fHwAABUVFTqxSqVSujStMXbsWHh5eaGwsNCiH+q3/wq3Fs2tKLlcbvA6EydORGpqKpqbmxEbG4uWlpZuY/ft2wcAiIqK0mpXKBQIDw9HS0uL3lsChpzD/fv3w8bGRqcbtIeHB/z9/XH69GlcvXrV4Pd1L1xdXQH8VrzeSdOmiTEl/na2trZ3PeZkGhYbRGSUO3+l29nZAYDe7rLdfaAPGTIEAHD9+nUzZ9e3aCat6+joMGq9xMRExMXF4dy5c3q7ywJAW1sb6uvrYW9vr7fr6NChQwH8dqvlTj2dQ822u7q6oFKpdAYWO3PmDACgpKTEqPdlqjFjxgCA3uKmvLwcAODn52dy/O06OzuNeniVDMNig4gspqamRu9tDE2RoSk6gN+eWWhvb9eJ1dx/v5Ohl82tydPTEwBQX19v9LoZGRkYPXo0du7ciU8//VRnuUKhgEqlQmtrKxobG3WWa26feHh4GL1vhUIBV1dX2NraoqOjQ7oddedr6tSpRm/bFJr9nD59WmeZpi08PNzkeI2GhgYIIaTzRubDYoOILKa1tVUaJVPjxx9/REVFBQICArQ+1D09PaVfnRpVVVX45Zdf9G7b0dFRqzgZPXo0PvroIzNmf+8effRRAPp/YffEyckJn332GZRKJbZv3643Zvbs2QCg01Wzra0NeXl5cHBwQGRkpNH7BoCYmBh0dnbqHd5706ZNGD58eK+NRzFlyhQ88sgjyMnJ0eoWfOvWLezZswc+Pj5at5KMjdfQ/P1pzhuZD4sNIrIYlUqFlStXQq1Wo7m5GadOnUJ8fDzs7OywdetWrdiIiAhUVFTg/fffR1NTE0pLS7F8+XKtqx+3Gz9+PIqLi3HlyhWo1WqUlZUhNDRUWt4XeqMEBARgyJAhKCwsNGl9f39/pKWldbt848aNGDlyJJKSkpCbm4vGxkYUFxdj/vz5qKysxNatW6XbKcbauHEjfH19sXjxYhw8eBD19fWora1FWloa1q5di9TUVK3uxvHx8ZDJZLh48aJJ+7sbGxsb7NixA7W1tVi0aBGqqqpQU1ODZcuWoaSkBOnp6dItK1PiNTRdeiMiIsz+Hh54gvTKysoSPDx0P5gzZ46YM2fOPW9n3759AoDWa8GCBUKtVuu0v/3220IIodMeFRUlbS8gIEB4e3uL8+fPi8jISOHs7CwcHBzElClTxPHjx3X2X1dXJxISEoSnp6dwcHAQkydPFvn5+SIoKEja/ptvvinFFxUVidDQUKFUKoWPj4/Ytm2b1vZCQ0PFwIEDxXfffXfPx0YDgMjKyjJqnZUrVwpbW1tRXl4utd24cUPn2AUFBXW7jaVLlwo3Nze9y6qrq0VSUpIYOXKkkMvlQqVSicjISJGXlyfFmHoOa2pqxIoVK8SoUaOEXC4XgwcPFhEREeLw4cM6eYSFhQknJyfR2dlp0HE5cOCAzr41r/T0dL3rnDlzRkyfPl24uLgIJycnERYWpvdvydT42NhY4e3tLdrb2w16Dxr8vuhRtkwIK/YL68Oys7MRFxdn1W5zRIaIjY0FAOzdu9fKmWgbN24cqqure63HQm+QyWTIysrCs88+a/A69fX18Pf3R3R0ND788EMLZmc9dXV18PLywoIFC5Cenm7tdExSWFiIwMBAZGZmYu7cuUaty++LHu3lbRQL27Nnj/QEt77Ldv3Rr7/+ig8//BBhYWEYNGgQHBwc8PDDD2PBggUmX06+nZOTk87T8TY2Nhg4cCACAgLw0ksv6X0wjMgaVCoVDhw4gJycHGzbts3a6ZidEAKJiYlwcXHBunXrrJ2OScrKyhATE4OUlBSjCw0yDIsNC5s7dy6EEHqffO6vXn/9dbzyyiuYOXMmzp8/j5qaGuzcuRMFBQUICgrC/v3772n7TU1N+OGHHwAAM2fOhBACHR0dKCoqwtq1a1FUVITg4GAsWrQIN2/eNMdbIrongYGBOHXqFA4ePIiGhgZrp2NW165dQ1lZGfLy8kzq+dIXpKWlYcOGDdiwYYO1U+m3WGyQRSxevBjLly+Hh4cHHB0dERoaiszMTNy6dQtvvPGG2fc3YMAADB06FDNnzsSRI0fwxhtv4OOPP8a8efN4abOXaeYuKSwsRHl5OWQyGVatWmXttKxuxIgRyM3NhYuLi7VTMSsPDw8cP34c/v7+1k7FZJs2beIVDQvrezMX0X1PMx/DnQICAuDg4IDS0lIIISw6TsK7776Lb7/9Fp9//jn27NmjM+8DWU5ycjKSk5OtnQYR9SG8skG9prm5GS0tLXj00UctPiCTTCaTRl7sbowCIiLqHSw2zKyoqAizZs2CSqWCUqlEaGgojh8/3m28IVM4mzI9dFtbG9asWYMxY8bA0dERg/5fe3cfFEX9xwH8fSAceNyDgPIkKdJgSYYPOInFEKCQgZIE0YNNk1LkOCFjzCQ+lD2oo+OYzqRGaGU+pGijBqZJpNOYhyEGpqYyaqY8KA8DHAgo8vn94ez+OO9O7s5bDuHzmtk/2P3u7ud2b9jP7e73+3F3x7Rp0/DTTz/h7t27FsdgC0JviUWLFtl0u6YI5cqLior0hovuT8ecMcZ6Bbv1uu3lrOk3XV5eThqNhvz8/Ojw4cOk0+no9OnTFBMTQ8OHDye5XK7XvrKykoYNG0ZeXl504MAB0ul0dObMGYqIiCAXFxeD8QESEhIIACUkJNDx48epubmZCgoKyNXVlSZMmKDXNjU1ldRqNR0+fJhu3bpF1dXVlJmZSQDoyJEjVsdgrerqavLy8qLU1FSjyyMjI8nd3Z20Wq1Z2/vrr7/EY2FKa2ur2G+/srKSiPrmMbfVOBuse7BinA3W9/E4G93K5aNjgjVfnuTkZAJAe/bs0ZtfUVFBcrncINl46623CABt375db35VVRXJ5XKDQX6EC19eXp7e/KSkJAJANTU14ryAgACaNGmSQYxBQUF6Fz5LY7BGbW0tjRkzhlJSUkwO+BMREWHRAEzmJBu3bt0ySDb64jHnZKPncLLBjOFko1u5/IKoDR06dAgADGoR+Pr6IigoCBcvXtSbb24J56FDh+otf1B5aE9PTwDACy+8gI0bN+Ldd9/FrFmzMGHCBDg6OuLChQs2icFcLS0tiI2NxahRo/D999/D0dHRaLujR49atf0HEcqXOzk5icelrx7z69evIzc31+z2zHpardbeIbBehr8T3eNkw0ba29uh0+ng4uICNzc3g+VDhgzRSzaEEs6AYbnnrsrLyw0uOuaU+F6/fj3CwsKwZcsWcYyP8PBwpKWlicWbHiYGc3R0dCA5ORl+fn7YsmWLyURDKsK7MmFhYXBycurTx7yoqAgpKSlmt2fWW7t2LdauXWvvMBh7pPALojYil8uhVCrR1taG5uZmg+X19fUG7aUs4SyTyfDmm2/i119/RUNDA/bt2wciQmJiItasWdMjMaSlpaG9vR25ubl6BZsef/xxyYtjdXZ2iqM1zp07F0DfPuZJSUkmt8WT7SYA2LVrl93j4Kl3Tbt27bLqf0Z/wsmGDU2dOhXA/x+nCGpraw1upQPSlnDWaDQ4f/48gHuPEaZMmSL2sOhajlqqGJYuXYqzZ89i//79kMvlVn2Gh5GVlYU///wTM2bMEGuHAH37mDPGWG/FyYYNLV++HO7u7sjIyEBBQQGam5tx7tw5zJw50+ijFUtLOFvqvffew+nTp9He3o6bN29i1apVICJERUVJGsN3332HTz75BCdOnIBSqTSoY3J/l1Hg4cuBd3Z24ubNm9i/fz+io6OxatUqzJo1C9u3b9cb06OvHnPGGOvViBll7dvFFy5coJdeeolUKpXYPTI/P5+io6PFnhGzZ88W25tTwtma8tClpaWUlpZGTz75JA0cOJDc3d1p4sSJlJOTQ52dnXoxW1JG2hxxcXEmS0cL0/1dXC0pB65QKAy2J5PJSK1W0+jRo2nOnDlUUlJicv2+dsy5N0rPAfdGYUZwb5RucYl5U7hkMHtU9NYS832RNSXmWd/H14tucYl5xhhjjEmLkw3GGLOjq1evYvr06WhqakJtba3e+01jx45FW1ubwTr3t5PJZAgNDbVD9NL5+eefERQUZNb7S6WlpYiLi4NGo4FSqcTkyZONvoC9YMEC7jliJ5xsMLPc/4/N2LR06VJ7h8nYI6W0tBShoaGIiYmBSqWCp6cniAjFxcXi8oyMDIP1hHZarRYeHh4gIpw8ebKnw5fEpUuXMH36dGRlZeHGjRvdtj9x4gQmTZoEpVKJf/75B1euXMGIESPw/PPP4/Dhw3pt33nnHWRlZWHJkiVShc9M4GSDmYXM6GvOyQYTuLm5iYXw+uP+zdHU1IRp06bh5ZdfFisUdyWXy+Hh4YHs7Gz88MMPdojQPpYsWYJJkyahpKQESqXygW07Ozsxe/ZsaDQafPvtt/Dx8YGnpyc2btyIwMBApKamor29XWwfGBiIvXv3YtmyZTzibg/jZIMxxuxg1apVqK6uxkcffWR0uYuLC7Zv3w4HBwekpaUZlDvoqzZv3owFCxaY9fjk999/x9mzZ5GUlARXV1dxvqOjI1577TVcu3YN+fn5euuEhIQgKSkJH3zwAY9n04M42WCMsR5GRNi0aROeeeYZ+Pr6mmwXGxuLxYsXQ6fTITk52ej7G31N16ShO7/99hsAGH1fRZhXWFhosGzGjBm4fv263mB7TFqcbDDWT9XV1WH+/PkIDAyEs7MzBg0ahKlTp+LIkSNim88//1x8J6frY4lDhw6J84VCdACwevVqyGQytLS04I8//hDbCL9SheUymQxDhw5FcXExoqOjoVQqMXDgQERGRuq92Gfr/fcWZWVluHHjBkJCQrpt+/HHHyMmJganT5/G+++/b/Y+zDm/wgi3wvTvv/8iJSUFGo0GHh4eiI+PNzoIX01NDdLT0zF8+HA4Oztj8ODBSExMRGlpqdnx2YIwYq+xOkJ+fn4AYPSO0JgxYwAAv/zyi4TRMT09PrTHI4IHaWGPCmsG9aqqqqKAgADy8vKivLw8amxspAsXLlBiYiLJZDLKycnRa69QKOjZZ5812M748ePJw8PDYL6p9oKQkBBSKBQUFhZGx48fp+bmZiouLqann36anJ2d6ejRo5LuPzIyktzd3Q0Gl+sObDSo19atWwkALV++3Ojy4uJiUqvV4t81NTXk7+9PAGjbtm3ifK1Wa/TzW3p+ExISCAAlJCSI56OgoEAcmLCryspKGjZsGHl5edGBAwdIp9PRmTNnKCIiglxcXMwamM9cfn5+5OjoaHL5lClTCAAVFRUZLCsvLycANG7cOINljY2NBIDCw8NtEidfL7qVy3c2GOuHsrKycOXKFaxduxbx8fFQqVQICgrCjh074OPjg/T0dLN6AjyMlpYWbNiwAWFhYVAoFAgNDcW2bdtw+/ZtzJs3T9J9d3Z2ii8220NVVRWAB1f+7crT0xO5ublwcnJCWlqa+IveFGvPb2pqqng+Jk+ejLi4OBQXF6O2tlZv21evXsWaNWvw4osvws3NDcHBwdi5cyeIyKK7L1ISzm3XcgUClUoFmUwmngcmPU42GOuH9u7dCwCIi4vTmy+XyxEdHY3W1lbJbzErFArxdrZg9OjR8PX1RVlZmaQXgqNHj6K+vh5hYWGS7eNBhHcvnJyczF5n4sSJWL16NVpaWpCcnIzW1laTba09vxMmTND729/fHwBQWVkpztu3bx8cHBwQHx+v19bb2xvBwcEoKSnB9evXzf5cD0Oj0QC4l7jeT5gntLnfgAEDHngMmW1xssFYP9Pe3o7Gxka4uLgY7Vro5eUFAKiurpY0DlMXgSFDhgAAbt68Ken+7cnFxQUAcOfOHYvWS09PR0pKCs6cOWO0uyzwcOf3/jstzs7OAO7dCeq67c7OTqjVaoOxdk6dOgUAKC8vt+hzWeuJJ54AAKPJTUVFBQAgKCjI6LodHR0WvYzKHg4nG4z1M3K5HGq1Gm1tbdDpdAbLhdvr3t7e4jwHBwfcvn3boG1DQ4PRfRi7dX2/uro6o48xhCRDSDqk2r89+fj4AAAaGxstXnfTpk0YOXIkvvnmG2zdutVguTXn11xyuRwajQYDBgzAnTt3TI65ExkZafG2rSHsp6SkxGCZMC86OtpgWVNTE4hIPA9MepxsMNYPzZgxAwAMuv61t7ejsLAQrq6uiI2NFef7+PiIvxQF1dXV+O+//4xuf+DAgXrJwciRI/H111/rtWlraxNHyhT8/fffqKysREhIiN6FQIr929NTTz0FwPgv8u64ubnhxx9/hEKhwIYNG4y2sfT8WiIxMREdHR1GhwNfuXIlHnvssR4bvyIiIgKjRo3Cnj179LoF3717Fzt37oS/v7/BoyTg/3c9hPPApMfJBmP90IoVKxAQEICMjAzk5+dDp9Ph4sWLeP3111FVVYV169aJt9sBICYmBpWVlfjyyy/R3NyMS5cuYd68eXp3H7oaN24cLl68iGvXrkGr1eLy5csIDw/Xa6NWq7Fw4UJotVq0tLTg5MmTmDlzJpydnbFu3Tq9trbef1RUFDw8PFBUVGTtIXwoISEhGDJkCMrKyqxaPzg4GNnZ2SaXW3p+LbFixQoEBgZi1qxZOHjwIBobG1FfX4/s7Gx8+umnWL16tV5X45kzZ0Imk+HKlStW7e9BHBwcsHnzZtTX1+Ptt99GdXU16urqMHfuXJSXlyMnJ0d8ZNWV0EU3JibG5jExE+zTC6b3465M7FFhTddXIqLa2lrKyMiggIAAcnJyIrVaTbGxsVRYWGjQtqGhgVJTU8nHx4dcXV3pueeeo+LiYho/fjwBIAD04Ycfiu3Pnz9P4eHhpFAoyN/fn9avX6+3vZCQEPLz86Nz585RbGwsKZVKcnV1pYiICDp27Jjk+w8PD6dBgwZZ3E0TNur6SkS0cOFCGjBgAFVUVIjzampqxM8jTOPHjze5jTlz5hjt+kpk3vnVarUG+1u0aJH4WbtOcXFx4np1dXU0f/58GjFiBDk5OdHgwYMpJiaGCgoKDOKIiooiNzc36ujoMOu45OXlGexbmO7vsis4deoUTZ06lVQqFbm5uVFUVJTR75EgOTmZ/Pz86Pbt22bF1B2+XnQrV0Zkp75fvVxubi5SUlLs1jWOMXMlJycDAHbv3m3nSMw3ZswY1NbW9livBVuRyWTYtWsXXnnllYfeVmNjI4KDgxEfH4+vvvrKBtH1Pg0NDfD19cUbb7yBnJwce4cD4N6AamPHjsWOHTvw6quv2mSbfL3o1m5+jMIYY3agVquRl5eHPXv2YP369fYOx+aICOnp6VCpVPjss8/sHQ4A4PLly0hMTERWVpbNEg1mHk42GGPMTsaOHYuTJ0/i4MGDaGpqsnc4NnXjxg1cvnwZhYWFVvV8kUJ2djaWLVuGZcuW2TuUfoeTDcZYjxFql5SVlaGiogIymQyLFy+2d1h2NXz4cOTn50OlUtk7FJvy9vbGsWPHEBwcbO9QRCtXruQ7GnbSu6oTMcb6tMzMTGRmZto7DMZYD+M7G4wxxhiTFCcbjDHGGJMUJxuMMcYYkxQnG4wxxhiTFL8g2g1hwCTGeithyG3+rvaML7744pEaQI1J71EbnM4eeARRE7RaLdasWWPvMBhjjD0iOAk1aTcnG4wxxhiTEg9XzhhjjDFpcbLBGGOMMUlxssEYY4wxSXGywRhjjDFJ/Q+G1qw4MphpYAAAAABJRU5ErkJggg==\n", - "text/plain": [ - "" - ] - }, - "execution_count": 28, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "keras.utils.plot_model(model, \"my_fashion_mnist_model.png\", show_shapes=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'dense'" - ] - }, - "execution_count": 29, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "hidden1 = model.layers[1]\n", - "hidden1.name" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "True" - ] - }, - "execution_count": 30, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "model.get_layer(hidden1.name) is hidden1" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "metadata": {}, - "outputs": [], - "source": [ - "weights, biases = hidden1.get_weights()" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[ 0.02448617, -0.00877795, -0.02189048, ..., -0.02766046,\n", - " 0.03859074, -0.06889391],\n", - " [ 0.00476504, -0.03105379, -0.0586676 , ..., 0.00602964,\n", - " -0.02763776, -0.04165364],\n", - " [-0.06189284, -0.06901957, 0.07102345, ..., -0.04238207,\n", - " 0.07121518, -0.07331658],\n", - " ...,\n", - " [-0.03048757, 0.02155137, -0.05400612, ..., -0.00113463,\n", - " 0.00228987, 0.05581069],\n", - " [ 0.07061854, -0.06960931, 0.07038955, ..., -0.00384101,\n", - " 0.00034875, 0.02878492],\n", - " [-0.06022581, 0.01577859, -0.02585464, ..., -0.00527829,\n", - " 0.00272203, -0.06793761]], dtype=float32)" - ] - }, - "execution_count": 32, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "weights" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(784, 300)" - ] - }, - "execution_count": 33, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "weights.shape" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", - " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", - " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", - " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", - " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", - " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", - " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", - " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", - " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", - " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", - " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", - " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", - " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", - " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", - " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", - " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", - " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", - " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], dtype=float32)" - ] - }, - "execution_count": 34, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "biases" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(300,)" - ] - }, - "execution_count": 35, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "biases.shape" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "metadata": {}, - "outputs": [], - "source": [ - "model.compile(loss=\"sparse_categorical_crossentropy\",\n", - " optimizer=\"sgd\",\n", - " metrics=[\"accuracy\"])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "위 코드는 다음과 같습니다:" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "```python\n", - "model.compile(loss=keras.losses.sparse_categorical_crossentropy,\n", - " optimizer=keras.optimizers.SGD(),\n", - " metrics=[keras.metrics.sparse_categorical_accuracy])\n", - "```" - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch 1/30\n", - "1719/1719 [==============================] - 7s 3ms/step - loss: 1.0187 - accuracy: 0.6807 - val_loss: 0.5207 - val_accuracy: 0.8234\n", - "Epoch 2/30\n", - "1719/1719 [==============================] - 5s 3ms/step - loss: 0.5028 - accuracy: 0.8260 - val_loss: 0.4345 - val_accuracy: 0.8538\n", - "Epoch 3/30\n", - "1719/1719 [==============================] - 5s 3ms/step - loss: 0.4485 - accuracy: 0.8423 - val_loss: 0.5337 - val_accuracy: 0.7980\n", - "Epoch 4/30\n", - "1719/1719 [==============================] - 5s 3ms/step - loss: 0.4210 - accuracy: 0.8529 - val_loss: 0.3915 - val_accuracy: 0.8646\n", - "Epoch 5/30\n", - "1719/1719 [==============================] - 5s 3ms/step - loss: 0.4061 - accuracy: 0.8576 - val_loss: 0.3752 - val_accuracy: 0.8676\n", - "Epoch 6/30\n", - "1719/1719 [==============================] - 5s 3ms/step - loss: 0.3756 - accuracy: 0.8670 - val_loss: 0.3712 - val_accuracy: 0.8714\n", - "Epoch 7/30\n", - "1719/1719 [==============================] - 5s 3ms/step - loss: 0.3654 - accuracy: 0.8711 - val_loss: 0.3630 - val_accuracy: 0.8718\n", - "Epoch 8/30\n", - "1719/1719 [==============================] - 5s 3ms/step - loss: 0.3481 - accuracy: 0.8761 - val_loss: 0.3856 - val_accuracy: 0.8614\n", - "Epoch 9/30\n", - "1719/1719 [==============================] - 5s 3ms/step - loss: 0.3486 - accuracy: 0.8757 - val_loss: 0.3593 - val_accuracy: 0.8694\n", - "Epoch 10/30\n", - "1719/1719 [==============================] - 5s 3ms/step - loss: 0.3298 - accuracy: 0.8831 - val_loss: 0.3438 - val_accuracy: 0.8764\n", - "Epoch 11/30\n", - "1719/1719 [==============================] - 5s 3ms/step - loss: 0.3218 - accuracy: 0.8839 - val_loss: 0.3433 - val_accuracy: 0.8784\n", - "Epoch 12/30\n", - "1719/1719 [==============================] - 5s 3ms/step - loss: 0.3123 - accuracy: 0.8875 - val_loss: 0.3306 - val_accuracy: 0.8818\n", - "Epoch 13/30\n", - "1719/1719 [==============================] - 5s 3ms/step - loss: 0.3054 - accuracy: 0.8896 - val_loss: 0.3260 - val_accuracy: 0.8884\n", - "Epoch 14/30\n", - "1719/1719 [==============================] - 5s 3ms/step - loss: 0.2992 - accuracy: 0.8913 - val_loss: 0.3399 - val_accuracy: 0.8778\n", - "Epoch 15/30\n", - "1719/1719 [==============================] - 5s 3ms/step - loss: 0.2935 - accuracy: 0.8942 - val_loss: 0.3213 - val_accuracy: 0.8850\n", - "Epoch 16/30\n", - "1719/1719 [==============================] - 5s 3ms/step - loss: 0.2863 - accuracy: 0.8977 - val_loss: 0.3083 - val_accuracy: 0.8892\n", - "Epoch 17/30\n", - "1719/1719 [==============================] - 5s 3ms/step - loss: 0.2780 - accuracy: 0.9012 - val_loss: 0.3554 - val_accuracy: 0.8724\n", - "Epoch 18/30\n", - "1719/1719 [==============================] - 5s 3ms/step - loss: 0.2778 - accuracy: 0.8993 - val_loss: 0.3142 - val_accuracy: 0.8896\n", - "Epoch 19/30\n", - "1719/1719 [==============================] - 5s 3ms/step - loss: 0.2742 - accuracy: 0.9023 - val_loss: 0.3107 - val_accuracy: 0.8910\n", - "Epoch 20/30\n", - "1719/1719 [==============================] - 5s 3ms/step - loss: 0.2699 - accuracy: 0.9036 - val_loss: 0.3267 - val_accuracy: 0.8824\n", - "Epoch 21/30\n", - "1719/1719 [==============================] - 5s 3ms/step - loss: 0.2671 - accuracy: 0.9049 - val_loss: 0.3062 - val_accuracy: 0.8926\n", - "Epoch 22/30\n", - "1719/1719 [==============================] - 5s 3ms/step - loss: 0.2616 - accuracy: 0.9054 - val_loss: 0.2969 - val_accuracy: 0.8958\n", - "Epoch 23/30\n", - "1719/1719 [==============================] - 5s 3ms/step - loss: 0.2545 - accuracy: 0.9088 - val_loss: 0.2987 - val_accuracy: 0.8928\n", - "Epoch 24/30\n", - "1719/1719 [==============================] - 5s 3ms/step - loss: 0.2451 - accuracy: 0.9119 - val_loss: 0.3071 - val_accuracy: 0.8884\n", - "Epoch 25/30\n", - "1719/1719 [==============================] - 5s 3ms/step - loss: 0.2494 - accuracy: 0.9103 - val_loss: 0.2981 - val_accuracy: 0.8964\n", - "Epoch 26/30\n", - "1719/1719 [==============================] - 5s 3ms/step - loss: 0.2431 - accuracy: 0.9128 - val_loss: 0.3053 - val_accuracy: 0.8892\n", - "Epoch 27/30\n", - "1719/1719 [==============================] - 5s 3ms/step - loss: 0.2374 - accuracy: 0.9159 - val_loss: 0.3016 - val_accuracy: 0.8952\n", - "Epoch 28/30\n", - "1719/1719 [==============================] - 5s 3ms/step - loss: 0.2315 - accuracy: 0.9166 - val_loss: 0.2997 - val_accuracy: 0.8936\n", - "Epoch 29/30\n", - "1719/1719 [==============================] - 5s 3ms/step - loss: 0.2283 - accuracy: 0.9177 - val_loss: 0.3039 - val_accuracy: 0.8918\n", - "Epoch 30/30\n", - "1719/1719 [==============================] - 5s 3ms/step - loss: 0.2251 - accuracy: 0.9207 - val_loss: 0.3032 - val_accuracy: 0.8932\n" - ] - } - ], - "source": [ - "history = model.fit(X_train, y_train, epochs=30,\n", - " validation_data=(X_valid, y_valid))" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'verbose': 1, 'epochs': 30, 'steps': 1719}" - ] - }, - "execution_count": 38, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "history.params" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29]\n" - ] - } - ], - "source": [ - "print(history.epoch)" - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "dict_keys(['loss', 'accuracy', 'val_loss', 'val_accuracy'])" - ] - }, - "execution_count": 40, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "history.history.keys()" - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "그림 저장: keras_learning_curves_plot\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAFgCAYAAABHS1h8AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAABif0lEQVR4nO3dd3xb1f3/8dfRti15O952nL0cJ85kJaFhr0Ap0DIKoUALZZUuvhRafiXtt2X1SylllLJaWqDQsDeJSViBLBKyd+wkduJ4SbY1LN3fH1eWRzxkW4lt+fN8PPTQ1dW5V0cHkbxz7jnnKk3TEEIIIYSIFob+roAQQgghRCRJuBFCCCFEVJFwI4QQQoioIuFGCCGEEFFFwo0QQgghooqEGyGEEEJEFQk3QgghhIgqYYUbpdSNSqmVSimPUuqZbsr+RClVrpSqU0o9pZSyRqSmQgghhBBhCLfnZj+wCHiqq0JKqdOB24H5QD4wAvh/famgEEIIIURPhBVuNE37r6ZprwKHuyl6JfB3TdM2aJpWDdwDXNWnGgohhBBC9IApwuebCLzW6vXXQLpSKkXTtDbBSCl1HXAdQExMzLTc3NwIV6VFIBDAYJDhRZEgbRkZ0o6RI20ZOdKWkSHtGDldteXWrVsrNU1L6+i9SIcbO1Db6nXztoN2vT6apj0BPAEwffp0beXKlRGuSouSkhLmzZt31M4/lEhbRoa0Y+RIW0aOtGVkSDtGTldtqZTa09lxkY6WLiC+1evmbWeEP0cIIYQQokORDjcbgKJWr4uAivaXpIQQQgghjpZwp4KblFI2wAgYlVI2pVRHl7SeA36glJqglEoE7gSeiVRlhRBCCCG6E27PzZ1AI/o078uD23cqpfKUUi6lVB6ApmnvAvcCS4G9wB7gNxGvtRBCCCFEJ8IaUKxp2t3A3Z28bW9X9kHgwT7VSgghhBCil2SumhBCCCGiioQbIYQQQkQVCTdCCCGEiCoSboQQQggRVSTcCCGEECKqSLgRQgghRFSRcCOEEEKIqCLhRgghhBBRRcKNEEIIIaKKhBshhBBCRBUJN0IIIYSIKhJuhBBCCBFVJNwIIYQQIqpIuBFCCCFEVJFwI4QQQoioIuFGCCGEEFFFwo0QQgghooqEGyGEEEJEFVN/V0AIIYQQfRQIgBYAzQ8BPwR84G0Abz14Xfqzr6Flu/X+I7aDr/0+/ZwBf6tzt/qc0HvN2+3qoAXglrWQmHfMm0PCjRBCCBEOTQO/F5o8+vMR217we0iqWgubG6CpEXytHk1uPWC02de8HXyvuYy/6cig0D5ctN7fW8oIFjtY4lo97GBPB6MFlAEMRr1caNvQbtvYdn/rY6yOiDV/T0i4EUIIMXgE/HqPQsAXfG5qeR3w62HD1xgMEQ2twkSD3pPR4XuNwZ6NViHE7wmGlVYhJuALq4pFAOs6edNgBnMsmG1gjgFTjP5sjoXY5JZ9RvORQaHDcGFst630bYOpJai0Di3tt40W/ZgoI+FGCCFE9wL+YBhwtw0M7XsfmoIPvze47Wn1aL/ffeR7fq/eaxEKL762r9H6/l2MVj1EWOKCwSIGzMG/9OPSwGTVH0azXrbNtkUPBG22LcEy+vaa9RuZOvP4VsElplVokb92jwVpZSGEGIw0Tf/L3u/V/+Jv8rYKGQ1tL3W02dd86aPdPp+bokP7YZu1XblgGb+393VtDggmK5hswSDQ6rUl2GvRHBSMZr3nwWjWezqOeG3SX3f4njkYWmKDjxj9/M3b5li9Z+Moqi1VkDX1qH6G6JqEGyGE6C1/E/jq6fiyR2Or91rt87bfF3z4O+qpaNeL0fpyTF/GWaDa/mVvjgGzDaX5wRYPjoy2vQ1tyrV+tDtHc3BpHWCMFjDIxFxxbEm4EUIMXpqGCvj0wNAcBJp7MprDgN/bKhR0VMbbaiZJgx5IvMHA0d3+3vRmmGytAkGrwGC06M9teiM66cVo3YNhtLTtsTDZOggu7QJJJ+Ms1paUMG/evL7/dxGin0m4EUL0H03TL324a1sejTXB7Zq2+zt5zA34YFkE69QcDpovbVhi9fEY9vSO9zdf8giN34jtILwEy5tiBlUvhqZpBOobCDjr8DudBJzOds+u4Hv6s+ZrwmC3Y7DbMTrsGOwODPY4jA5Hq/3N2w4MsTGofmoPTdNoOnQI767deHftwrtrF57du/DtLcVgt2PJzcWcl4slNw9zbg6WvDxMw4YdlfoGvF6aysvx7T+Ar/wATRUHIeBHWSwoixVltWCwWvXXVivKYsVgtXT+urlsFA4UDpeEGyFE19pfevE1tvRghHoxGtv2aIQuv3S2r9Wx3c1AMdnAltDyiE2G5ILQ611lBykYNaall8NobtubEXptajWmo12PRyisHL3xGJqmoXm9aD6f/tz64Q9gzsrE6Di202Z9Bw/i2bQJ98aNuLdsJWnHDnY+9GcCdXX4XS4CTqc+9bgLymzGEB+P0eFAmU34XfUEnE4C9fV6eO3yYNUSeux2DA4HxsREjMlJmJJT9OeUFIxJyZiSkzCmpGBKSkJZLGF/x0BjI97deoDx7NrVEmZ279br2FwVmw1Lfj7W0aMJuFw0rl9P3Xvvgb/l8p+yWjHn5LQJPpa8XMy5eZhzsjF0UC+tqYmmgwfxlZfjO3BADzEHyvUQc6AcX3k5/sOHw/4+PaEsFpTNpgcjqxVls2Kw2oL7LCirTd9nser7bFZ9n9WCwWYDTSMQ+p36Ov7tttoX8LV+rT8Pf/EFzOnpR+X7dUXCjRDRQNP0GSdel/7wuFotzBXc9rjQGmrxVRzEV3GYppo6rEkGrEkKFWg/uLRVgAlz+msL1a53I7ZlOz671QDPYK9H6+BiSwBbYsu2NZ5AQOGvrsZfXU1TVRX+6hr99f4qmqqrqayNIWPGqdgmTDim/1LVfD7qv1iB8/338ezY0Xlw8fkI+Hzg674dTenpWEeOwDJyFNaRI/XtUaMwJSX1ra6ahq+sDPfGYJDZtBH3pk34D1WGypjz88BswZyejmH0KIyOeAwOe8tzfDwGuwNjvKPl2eHAYLV2/JmBAIGGBgLBkOR3udpuO10E6l16r4/LRcDlxO904du3D/f69TRVV0NTU4fnNtjtGFOSMSUlY0xOxpSSjDEpGWNyEspg0MPM7t14du2m6cCBtm2clYl1eAEJ55+PpaAAS8FwrAUFmDIyjuiV0Xw+fAcO4N1biq90L969pXhL9+LbW0r9ihVojY0thZXClJmBJTePBJ+P3Y89jq+8nKaDB48IiIa4OEyZGZgzs7BNmKBvZ2RizszAlJGBOSMDZTajeTwt4cLjaXnt8aJ5g689Hj1IeDxo3lav3W79tduD5nHr+90eAh63/tzQSKC6Ri/XfB63m4DXe+Rv1WAI9iJZUGZzcNushzmzGYNZf89od7R6v6V8f5BwI0R/aQ4kHid46oKhxNnqUaeHlPb7QuVcbcOM5kfzg6/BiK/eiK/ehLe+eVt/3dRoANoGAGUE6zALMVmx2LLjseXnYc1NRtnsXcw4aTWFNhRk4loGlXYTMgL19XhLS/Ht20fT/sPBwLIdf7UeWPzVNfirqvBXVxNoaOj4JEphTEggrq6O3W+/jTkrC8epp+A45RRiiotRxsj3wAQ8Huo//Qzn++/jXLKEQF0dhthYbJMmYbDHhf4wN4T+YG//F4Il9BdD8z6DRR9w6y0txbt9B54dO6h55RW0Vt/bmJyMdeRILCNHYB05CuuokVhGjsSUlnZEoNP8fry7dukhpjnMbN5MoK4ueDIj1lGjsJ9wIrYJE7BNGI913DiMdjslJSUURWjMjTIYMAZ7ZMjI6PHxmqYRqKvTA21VVfC5Gn/VYZqqqoO/j6oOw5DBbsdSUEDsjOlYCwr0EDN8OJb8fAwxMeF/B7MZS14elrw84IQj6uevrNT/u+3di6+0LBR8TAf2o4YXEDdrFqaszLbBJTP8HjplMmGIiwu7vpGiNTWheTx6qDGbUabBFxUGX42FOFaavPq4j8ZqfRxIY3XLw1sfXOTL03aV0iZPq8W/OnrWy53Q6IJl7vB6RZSBgMlBAAf+QCwBLQa/30qTOwWvMxlfbRO+Gg++qkaaaurbLgNiUJjTUjHnZhCXna13n+fmY87OwZgQj2fbdtwbNuD+5htqN26ketVeYC/KZsM2bhy2iROxTRqNbeIErCNGhP2HnKZp+A8f7vBfvN7S0g674VVsLKbERIzJyRiTkrCOKMCYmIQxKQljsv5sCr5nTErCGB+PMhr5+M03KfJ4cX7wAdX/foGqZ5/DmJyMY/58HKeeQuzs2R1eLghXoLER1/LlON97H1dJCYH6egzx8ThOPhnH6acTd8LxnfZe9JYWCNBUXo5nxw4823fg2bEd746d1L39TktIAQwOhx56Ro1Emc14Nm7CvWULmtsN6JdRrGPHEn/mmS1BZsyYiNf3aFDB8GpMSICCgm7LN4chrakJY3LyUe/FU0phSkvDlJZGbHFxm/dKSkooHMQDs5XJNCgDTWuDu/ZCdMfvA3cdeGr1Z3et3vvROqgc8agJBhhX9+dvvX5HaFGvlmdNWQjgQDOZCSgjAYMJLWDkYE0VSYmZBHwG/B5FwKvhb/TjdzcRqPfgb/DgdzUScOnd9vpfVgHAFXwEGQyYMzIwZxcQV5iNObvdI31Yl93CtnHjSDj3HED/C9W7e3co7DRu2EDN4sVozz8P6GMSbOPHBwPPRGImTkTZbMF/tZa2CTK+0tK2PS5KYcrIwJKbi/3keS1jFXJyMaWmYExK0q/x94Jmt5N4zjwSL/w2flc99cuX4fzgQ+reeoua//wHg92Ofe5cHKeeiv2kE8P6l7DfVY/r4xKc73+Aa9kytMZGjElJxJ91Jo7TTiNu1qwejfvoKWUwYM7KwpyVhf2kk1q+a/Mg2J07W0LP9h24lpageTzYxo0j6ZKLsY4fj21CzwLpYNcchoQACTdioGvy6kEj1IMSDB+eulahJRhcQvvqWoJMU2PX5zeYISap5RGfA+mFEJMY2hdQcXhrm/BVu/FVuvBWVON3NqB5vPp16sZGAm63fl270a1vuxsJuDsfMwDQwI6WF0qFBmUa4+MxxCdgzczFEO/AGJ+gj2+Ij8foiA9tm1JTQ9fmI0EZDFhHjMA6YgQJ554LBC9xBANP4zff4N6wUb9k8s9/Hnm8xYI5NxdLbi6xM2e2DLrMy8Ock9On3pNwGe1xxJ95JvFnnqlfQvr8c5wffojroyXUvfUWymol7oQTcJx6Ko6T52FMTAwd66+rw7V0KXXvvU/9J5+geb0Y01JJvOB8HKedRuz06f0eFJRSmIcNwzxsGHGzZ/drXYQYyCTciLAFvF5UYyP+ujoIBNA0TR8oFwigBbTgDdy0jt/zeaChChVowJxoRnlqu+85aazWZ+l0xRSjLzpmjQ8OQo2HhJxW+xJbbbcq1xxmLHH6v4YrKvQxIKVles9D2T58pWvwlpXhr6xs85GGuDiMKSn6DISYGAw2G8aUZAxWG4YYG8oWo886sMXor0P7bRhs+vO6LVuYNmcOBkc8xoR4DHFx/TYltivKaAwObB1JwnnnAS1jOhq/+Qb8fj3QHMVpsr1lsFpxzJuHY948tLubaFi9GucHH+phZ8kSDhiNxM6cQdysWTSsXk3951+Az4cpI4PE715C/OmnEzNlylEZuyOEOLok3AxBmteLv7YWf03Nkc81tZ2+p7ndDAO29vHzDaYAtiRfyyNVw5KegIoLBo7EXMicHAwgiW17VkIzaRL1u82awusN0Hw+vKVlwSmgq/CVleItLcMXHNSqtZ4dYDBgzszEnJuL4+R5mHNyseTmYM7NxZyTgzExsc/X832Abfz4Pp2jv6jggFTrqFH9XZWwKZOJuJkziZs5k/Q7/gf3NxtwfvABzg8+4ND/PYQ5J4fk719B/GmnYSssHFAhTQjRcxJuBhnN52s7pTI4nfLI6ZXBBbZcrlB5v7MOf01tm1kYRzAZMcY7MMbZMMaaMdsUtngjxuF2jErh99VhDjSP/9BAtZoYo0AZTXrosMahbA6w2sEWj7I6ICaeQJMJd1kV7p37qd6+B22rRz80JgbbuJH6oMeJE7GND44X6MEll9Ag1tbrWQTXt/CWlbW5RGRwOLDk5mIdOxbHKfMx5+TqC3Xl5mLOzOy36Yvi6FNKEVM4iZjCSQy77Sc0VVVhTEoa0gueCRFtJNwMAk1VVZT+8Ed4tm7Vp+d1x2xuWRAruECWOScHW4wNY6wRo1XDYG7CZGjEoJwYtVqM/kMYfeUYfNVHzuKNTdHXJ4kfzX6nn/SRhfq+uFT9ufkRl6pPCQ7zLwmtqUm/vLFhgz5ddcPGtgNYgzM9bBOCg1gnTMA2erQ+8HXPnpZVRXftwrtbfx1wOkPnVxZLaFEux2mnYSkowFowHHN+fp/XDRHRw5Sc3N9VEEJEmISbAU5ramLfT27Ds2ULSZdeqo/PsDtaLW9uxxBjxagaMWj1GAI1GDyHwXkAXBX6s3Oz/uyu1U/qCz6gVXAZDgknQHxW8HV2y7a5ZRbL1pISsiK1DobJhHX0aKyjR8P55+vf1+/Hu2cP7g0b9Vk7GzdS9+Zb1Lzwon6QyaSvGNpq5VNTRgaWguEknHuOvpZFcF0Lc2amjJcQQoghSMLNAHfwgQdpWLGCzFu+R+K05GBYWa8/HyjXnxurjzzQYNbv7OvIgNTRUDBHvzdOQk6r4JKlL7o2gCijsdWMnZYpyr7SUj3sbNqkL5M+XF9V1DJ8OIbY2H6utRBCiIFEwk03/C4Xtf/9L/ZvzceSk330P7CxGvavgX2rqX3vI6pe2U3S6HoSKx6At9GXk20OLckjIO84cGQG97V6jkkaVDfo64oyGLDk52PJzyf+rLP6uzpCCCEGOAk3ndD8fmoXL+bgn/4P/+HDVD3zLPn/eh5zL5YR75S3AcrXwb7VsH+1/lylr33irjFx4MNhxOQ7SP/FDZA/Qw8zsalRE1qEEEKIo0HCTQcaVq6k/Pe/x7NxEzHFxST98heU//Ye9i68mvx//gNTSkrPT+r3wcGNrYLMGv21FrzjrCMLsoth6mX4HeMo+/mfMCZ5yf7Hy6hhwyL7BYUQQogoJuGmFd/+/Ry8/37q3n4HU2Ym2Q8+gOPMM/VVQbOz2fuDa9j7g2vIf/aZ7pf59vtg3yrYtUx/lH0FTfr9XrAl6kFm7G2QVaxvO/QeIS0QYN/11+MrP0j+s89ilmAjhBBC9IiEGyDQ0MDhJ//O4b//HZQi9cYbSfnB1W3uHhs7bRo5Dz9M6Q03UPrDH5H39yfb3qMmENAvMTWHmT2fBVfXVZBRCNOvhuxpepBJKuh0unTlXx6h/uNlZPzm18QWTz3K31wIIYSIPkM63GiaRt2bb3Hw/vtpqqgg/uyzGfazn2LOzOywvP2kE8l+4H723foTSn98I7mLfoph/+ew62PY/UnLrKXUMTDle1AwF4afCLHhraPhXLKEyr/+lYQLLiDxu9+N1NcUQgghhpQhG24a16+n4ne/p3HtWmwTJ5L9pwePuG39EWr2Ep9aQeDbIznw8hfsu/Icck6oRiXlwtiz9enWBXMgvuNw1BXPrl3s/8UvsU2cSMbdv5HVUoUQQoheGnLhxnfwIIce/BO1r76KMTWVzN/9joQLzu/8XjJ+H3zwG9jyFlTvBiAxIY3AOWOoeHMX+2vOJOs3f+nTYnF+Vz1lN92EMpvJefjPGKzWXp9LCCGEGOqGTLgJeDxUPfMshx9/HM3nI+Xaa0j54Q8x2u1dH/j+XbDiURhzBsy6Xu+ZGTaeZKUIjPkbhx58EMNv7+l1b4umaRz41a/w7txF3lN/x5yV1ctvKIQQQggYAuFG0zSsa9ayc9Hv8JWVYT9lPum/+AWWvLzuD17/sh5sZl0PZ/7hiLdTr7uWgMvF4SeewBAXx7Cf/6zHAafq73/H+d57DPv5z4mbPbtHxwohhBDiSFEfbsrv/n8kvvgihtGjyXv6KeKOOy68Ays2wOs36SsAn3ZPp8XSfnIrAZeLqqeewuiwk3r99WHXzfXppxx88E84zjyD5KsXhn2cEEIIIToX9eEm/swz2KsUM+/8FcoU5td118KLl4PVARc9A0Zzp0WVUqTf+SsC9fUceujPGOLiSP7+97v9CG/ZPvb/9GdYR44ka9EiGUAshBBCREjUh5u42bNpdLvDDzaBACz+EdTshSvfDC2u1xVlMJD5u0UEGhqo+P3/YoiLI/HCCzv/CLebsptvQvP7yfnLw23XyxFCCCFEn8hNitr75EHY8jac9jvID/MSFqBMJrIeuJ+4E07gwF2/pu6ddzosp2ka5b+5G8/GTWTddy+W/PxI1VwIIYQQSLhpa/tHsGQRFF4Es37Y48MNFgs5D/+ZmKlT2ffzX+D6+OMjylT/61/UvvYaqTfeiGPevAhUWgghhBCthRVulFLJSqnFSql6pdQepdSlnZSzKqUeU0pVKKWqlFJvKKWyI1vlo6R6D7zyAxg2Hs59qNPbI3THEBtL7mOPYhszhrKbb6F+xZeh9xpWraLif/+A/eSTSb0h/IHHQgghhAhfuD03jwBeIB24DHhUKTWxg3K3AMcBk4EsoBp4OAL1PLp8bnjp+xDwwyX/BEvfxsAYHQ5y//4k5twcyq6/nsZ16/BVHKTs1luxZGeTde8fO180UAghhBB90u3fsEqpOOBC4C5N01yapn0CvA5c0UHxAuA9TdMqNE1zAy8CHYWggeXtn8GBtXDB45AyMiKnNCUlkff3pzCmpLD32usou/56AvUN5PzlYYwOR0Q+QwghhBBHUpqmdV1AqanAp5qmxbba9zNgrqZp57YrOx14CLgIqAGeBA5qmnZrB+e9DrgOID09fdoLL7zQpy/SFZfLhb2TlYgz97/P2K2PsCfvInaNuDzin22orCT5vvsx1tZSc+01eKZNi/hnHEtdtaUIn7Rj5EhbRo60ZWRIO0ZOV2158sknr9I0bXpH74UzP9oO1LXbVwt01P2wDSgF9gF+YD1wY0cn1TTtCeAJgOnTp2vzjuLg2pKSEjo8/75VsPxvMPJb5F/2OPmG3t8fqiu+447Ds2MH4+fMOSrnP5Y6bUvRI9KOkSNtGTnSlpEh7Rg5vW3LcAZ+uID4dvviAWcHZR8BrEAKEAf8F+h4TnR/qz8ML34f7Blw4d/hKAUbAHN2NvYoCDZCCCHEYBBOuNkKmJRSo1vtKwI2dFB2CvCMpmlVmqZ50AcTz1RKpfa5ppEU8MMrV0P9IbjkOYhN7u8aCSGEECJCug03mqbVo/fA/FYpFaeUOgFYAPyjg+JfAd9XSiUopczADcB+TdMqI1npPluyCHaWwNkPQNbU/q6NEEIIISIo3PnINwAxwEHg38D1mqZtUEqdpJRytSr3M8CNPvbmEHAWcEEE69t3m97UVyEuvhKKO5rwJYQQQojBLKwbLmmaVgWc38H+5egDjptfH0ZfB2dgqtwOr14PWcVw1n39XRshhBBCHAVDZyU5j0u/07fRDBc/ByZrf9dICCGEEEdB1N8VHABNg9dvgsotcMViSMzt7xoJIYQQ4igZEuEmp+wN2PFfmP8bGDGvv6sjhBBCiKMo+i9L7fmMkTuehnHnwIk/6e/aCCGEEOIoi/5w880rNMZkwPl/7fWdvoUQQggxeET/Zamz7meNeQ4n2BL6uyZCCCGEOAaiv+dGKXwWCTZCCCHEUBH94UYIIYQQQ4qEGyGEEEJEFQk3QgghhIgqEm6EEEIIEVUk3AghhBAiqki4EUIIIURUkXAjhBBCiKgi4UYIIYQQUUXCjRBCCCGiStSHmyeX7+TPq939XQ0hhBBCHCNRH26c7ibWHPTj8jT1d1WEEEIIcQxEfbiZmpeIBqwrrenvqgghhBDiGIj+cJObBMAaCTdCCCHEkBD14SYh1kxmnGL1nur+rooQQgghjoGoDzcAIxONrCmtQdO0/q6KEEIIIY6yIRFuRiUaqKr3sreqob+rIoQQQoijbEiEm5GJRgBW75VLU0IIIUS0GxLhJtuuiLMYWbO3pr+rIoQQQoijbEiEG4NSFOUmSs+NEEIIMQQMiXAD+no3mw44afT6+7sqQgghhDiKhky4Kc5Lwh/QWL+vtr+rIoQQQoijaMiEmym5iYAMKhZCCCGi3ZAJNyl2K/kpsayRcCOEEEJEtSETbkC/NLV6ryzmJ4QQQkSzIRVupuYlcsjpYV9NY39XRQghhBBHyZAKN8V5wZtoyno3QgghRNQaUuFmbIYDm9kgg4qFEEKIKDakwo3ZaGBydqL03AghhBBRbEiFG4Cp+Yls3F+Hp0kW8xNCCCGi0dALN7lJeP0BvtlX199VEUIIIcRRMOTCTXFeIoCsdyOEEEJEqSEXbobF28hOjJFxN0IIIUSUGnLhBvT1bqTnRgghhIhOQzLcFOclsb/WTXmtu7+rIoQQQogIG5LhZqqMuxFCCCGi1pAMNxOzErCYDKwprenvqgghhBAiwoZkuLGYDEzKimf1Hum5EUIIIaLNkAw3AFPzkli/rxZvU6C/qyKEEEKICBqy4aY4LwlPU4DN5bKYnxBCCBFNhmy4aR5ULJemhBBCiOgyZMNNVmIMGfE2GVQshBBCRJkhG25A771ZLdPBhRBCiKgy5MNNaVUjh5ye/q6KEEIIISJkSIeb4rwkANbKpSkhhBAiagzpcDMpOwGTQcmlKSGEECKKDOlwYzMbmZgVL7dhEEIIIaJIWOFGKZWslFqslKpXSu1RSl3aRdlipdQypZRLKVWhlLolctWNvKl5SXxdWkuTXxbzE0IIIaJBuD03jwBeIB24DHhUKTWxfSGlVCrwLvA4kAKMAt6PTFWPjql5iTT6/GypcPZ3VYQQQggRAd2GG6VUHHAhcJemaS5N0z4BXgeu6KD4bcB7mqY9r2maR9M0p6ZpmyJb5chqHlS8Zm9N/1ZECCGEEBGhNE3ruoBSU4FPNU2LbbXvZ8BcTdPObVd2CbAemIHea7MC+LGmaXs7OO91wHUA6enp01544YU+fpXOuVwu7HZ7h+9pmsYtSxsoTDVx7WTrUatDtOiqLUX4pB0jR9oycqQtI0PaMXK6asuTTz55laZp0zt6zxTGue1A+xsw1QKODsrmAMXAqegh517g38AJ7QtqmvYE8ATA9OnTtXnz5oVRld4pKSmhq/PPKl3JjoOuLssIXXdtKcIj7Rg50paRI20ZGdKOkdPbtgxnzI0LiG+3Lx7oaJBKI7BY07SvNE1zA/8POF4pldDjmh1DU/MS2VlZT3W9t7+rIoQQQog+CifcbAVMSqnRrfYVARs6KLsOaH2dq+trXgPE1FxZzE8IIYSIFt2GG03T6oH/Ar9VSsUppU4AFgD/6KD408AFSqkpSikzcBfwiaZptZGsdKQV5SZgUMh6N0IIIUQUCHcq+A1ADHAQfQzN9ZqmbVBKnaSUcjUX0jRtCXAH8Faw7Cig0zVxBopYi4lxGfGslhlTQgghxKAXzoBiNE2rAs7vYP9y9AHHrfc9CjwaicodS8X5iby6Zj/+gIbRoPq7OkIIIYTopSF9+4XWpuYm4fI0sf2gq/vCQgghhBiwJNwETc1LBGTcjRBCCDHYSbgJKkiNIzHWLCsVCyGEEIOchJsgpRRTcxNZLT03QgghxKAm4aaV4rwkth10Udvo6++qCCGEEKKXJNy0MjV4E82vZTE/IYQQYtCScNNKUW4CSskdwoUQQojBTMJNKw6bmTHDHKwplXE3QgghxGAl4aadqXmJrNlbQyAwKG6LJYQQQoh2JNy0U5yXRG2jj12H6/u7KkIIIYToBQk37TQv5rd6j1yaEkIIIQYjCTftjEyz47CZWCMzpoQQQohBScJNOwaDYkpuYkRnTPn8PiobKyN2PiGEEEJ0TsJNB6bmJbGlvA6Xpyki51u0YhELXl1Ag68hIucTQgghROck3HSgOC+RgAbrymr6fK7t1dt5dfur1Hnr+HDvh32vnBBCCCG6JOGmA1NyE4HILOb38JqHiTXFkhmXyevbX+/z+YQQQgjRtagPNz6/j/3e/T06JjHWwoi0ONb08SaaXx/6miWlS1g4aSEXjLqAL8u/5IDrQJ/OKYQQQoiuRX24ueuzu/hLxV+o89b16LjivCTW7K1B03q3mJ+mafzfqv8jxZbC5eMv55yR56Ch8ebON3t1PiGEEEKEJ+rDzfcnfB9XwMXDqx/u0XFT8xI5XO9lb1XvBgF/tv8zVlas5IdFPyTWHEuuI5fiYcW8vuP1XgcmIYQQQnQv6sPNhJQJzHHM4cUtL7KhckPYxxUH7xDem3E3AS3AQ6sfItuezXdGfye0f8GoBeyu2826ynU9PqcQQgghwhP14Qbg7MSzSYlJ4Z4v7sEf8Id1zJh0B7EWI6t7Me7mvd3vsalqEzdOvRGz0Rzaf1r+adiMNhlYLIQQQhxFQyLcxBhi+Pn0n7Ph8Ab+s/U/YR1jNCiKcnq+mJ8v4OPhNQ8zJmkMZxWc1eY9u8XOt/K+xTu738Hj9/TovEIIIYQIz5AINwBnFpzJrMxZ/Hn1n8NeLbg4P5FNB+po9IbX2wOweNtiSp2l3FJ8CwZ1ZPMuGLkAp9dJSWlJ2OcUQgghRPiGTLhRSvGrWb/C7XfzwMoHwjpmam4STQGN9ftqwyrf2NTIo18/SvGwYk7KPqnDMrMyZzEsdhiv75BLU0IIIcTRMGTCDUBBQgELJy3kzZ1v8uWBL7st33yH8HDXu3l+0/NUNlZyS/EtKKU6LGM0GDlnxDl8uu9Tud+UEEIIcRQMqXADcG3htWTbs1m0YhE+v6/Lsil2K/kpsWENKq711PLUN08xN2cuxenFXZZdMHIBfs3PWzvf6lHdhRBCCNG9IRdubCYbd8y6g121u3h247Pdlp+am8jqMBbze+qbp3B5Xdw09aZuzzkicQSTUibJpSkhhBDiKBhy4QZgTs4cTsk7hce/fpwyZ1mXZYvzkzjk9LC/1t1pmYr6Cp7f9Dxnjzibscljw6rDeaPOY2v1VjZXbe5R3YUQQgjRtSEZbgB+OfOXKKX4w5d/6LJXZmquvpjfkk0VnZZ5fN3j+DU/N0y5IezPP3P4mZgMJum9EUIIISJsyIabjLgMbii6gY/LPmZp6dJOy43PdFCUm8hvXt/AM5/uOuL9PXV7+O+2/3LRmIvIdeSG/fmJtkTm5czjrZ1v4Qt0PfZHCCGEEOEbsuEG4LIJlzEqcRR/+PIPNPg6voeUyWjg39fOYv74dO5+YyN3v74Bf6Clp+cva/6CxWjhusnX9fjzzxt5HlXuKj7b91mvv4MQQggh2hrS4cZsMHPX7Ls4UH+Ax9Y91mm5WIuJxy6fxjUnFvDMZ7u59rmVuDxNbDy8kXd3v8sVE64gNSa1x59/Ys6JJFmTeG3Ha335GkIIIYRoZUiHG4Di9GLOH3U+/9jwD7ZXb++0nNGguPOcCSw6fxIfbz3ERY99zn1f/olEayJXTbyqV59tNpg5a8RZlJSWUOsJb6FAIYQQQnRtyIcbgNum3UacJY5FKxZ1O+X78tn5PHXVDEob1rHy4BecnXc5Douj15993sjz8AV8vLvr3V6fQwghhBAtJNwASbYkbi2+lVUVq8KavTRndCqjxy9D+RN59t0s3t9Q3uvPHp88nlGJo2TWlBBCCBEhEm6Cvj362xSlFfHgqge7vUS0ZO8Sttdu5KczbmLMsCR++M9VPLl8Z7e9Ph1RSrFg5ALWVa5jV+2Rs7GEEEII0TMSboIMysBds++ixlPDQ6sf6rRcU6CJP6/5MwUJBVw28du8cN1xnDExg0VvbeLOV7+hyR/o8WefPeJsDMogvTdCCCFEBEi4aWVs8lguHXcpL299mXWH1nVY5o0db7Czdic3T70Zk8FEjMXII5cW86O5I3l+xV6ufnYlTnfP1q1Ji03j+KzjeWPHG/gD/kh8FSGEEGLIknDTzo1TbyQtJo1FXyyiKdDU5j2P38Nfv/4rk1ImMT9vfmi/waC4/cxx/OHbhXy2vZLvPPo5ZdUdr5vTmQUjF1DRUMGX5d3frVwIIYQQnZNw006cOY5fzPwFm6o28eKWF9u89+LmFymvL+fWabeilDri2O/OzOPZq2eyv7aR8x/5jLWlNWF/7sl5J+MwO3hjxxt9/QpCCCHEkCbhpgOn5Z/G8VnH8/CahznUcAgAl9fF39b/jeMyj2NW5qxOjz1hVCqLbzieGIuB7z7xOe+sPxDWZ1qNVk4vOJ0P935Iva8+It9DCCGEGIok3HRAKcWvZv0Kn9/HfV/dB8CzG5+lxlPDLcW3dHv8qGEOFt9wAhMy47n++dU89vGOsGZSLRi5gMamRj7Y80Gfv4MQQggxVEm46URefB7XFF7DO7vf4a2db/Hshmc5Lf80JqZODOv4VLuVf107m3MmZ/KHdzbz05e+5qDT3eUxRWlF5Mfny6wpIYQQog8k3HTh6sKryXPkcfvy2/H6vdw49cYeHW8zG/nzd6dy87dG8drX+5lz71J+99ZGKl2eDssrpTh3xLl8Vf4V+1z7IvEVhBBCiCFHwk0XrEYrv5r1KwDOH3U+BQkFPT6HwaC47bSxfHTbXM4qzOTvn+zipD8u5Q/vbKaq3ntE+XNHngsgA4uFEEKIXpJw043js4/n+bOe539m/U+fzjM8NY4HL57CB7fN5bSJ6Ty+bAcn/XEJ97+3hZqGlpCTZc9iZsZM3tjxRq9WPBZCCCGGOgk3YZicNhmr0RqRc41Ms/PQd6fy/q1zmDduGH9Zup2T/riUP32wldpGffG/c0eey17nXtYeWhuRzxRCCCGGEgk3/WR0uoNHLi3m3VtP4oRRqTz00TZO+uMSHv5oG7PT5xFjiuG17a/1dzWFEEKIQUfCTT8blxHPY1dM482bTmRmQQoPfLCVM/70JbnWWby7+z3cTV3PsBJCCCFEWxJuBohJ2Qk8eeV0Xr/xBIrzkli7cRT1Phd3vv8CjV6535QQQggRLgk3A8zknESeumoGL115OWYtmbd2vcFJ9y7lyeU7qfc0dX8CIYQQYoiTcDNATctP4arJF2K2b2dERhOL3trEtEUfcNO/1/DRpgq8TYH+rqIQQggxIIUVbpRSyUqpxUqpeqXUHqXUpd2UtyilNimlyiJTzaHp3JHnohHgrNnlvHL98VxYnMPybYf4wbMrmfn7D7lj8Xq+3FVFICBTxoUQQohmpjDLPQJ4gXRgCvCWUuprTdM2dFL+58AhwNHnGg5hBQkFTE6bzGs7XuPK865kWn4Svzl3Isu3HeK1tftZvHof/1qxl6wEG+dOyeL8KdmMy3B0eMdyIYQQYqjoNtwopeKAC4FJmqa5gE+UUq8DVwC3d1C+ALgcuA34W2SrO/QsGLmAe764h01Vm5iQMgGLycD88enMH59OvaeJDzZW8NrafTy5fBePf7yTMel2FkzJ5ryiLHKTY/u7+kIIIcQxp7pbBVcpNRX4VNO02Fb7fgbM1TTt3A7Kvwn8HagG/qlpWk4n570OuA4gPT192gsvvNDrL9Edl8uF3W4/auc/mhr8Dfyq7Fec4DiB7yR/p9NydV6Nr8qb+GJ/E9tq9PE4oxINHJdlYkaGiXhLZHpzBnNbDiTSjpEjbRk50paRIe0YOV215cknn7xK07TpHb0XzmUpO1DXbl8tHVxyUkpdABg1TVuslJrX1Uk1TXsCeAJg+vTp2rx5XRbvk5KSEo7m+Y+2j0o+4qvyr/jTSX/CbDR3Wu684HNpVQOvf72f19bu4x8bXfxrs4+TRqdy/pRsTp2QTpw13KuRRxrsbTlQSDtGjrRl5EhbRoa0Y+T0ti3D+VvOBcS32xcPOFvvCF6+uhc4q8e1EF1aMGoB7+95n4fXPsxFoy8iNz63y/K5ybH8+ORR3DBvJJvLnby6dh9vrN3PrS+uxWY2cOqEDM6fksVJo9OwmGTCnBBCiOgSTrjZCpiUUqM1TdsW3FcEtB9MPBoYDiwPDmi1AAlKqXJgtqZpuyNS4yHo+KzjmZUxi6e/eZqnv3maUYmjODn3ZObnzWdCyoROBxArpRifGc/4zHh+efo4vtpdxetf7+et9Qd44+v9JMaaOaswkwVFWcwYnozBIAORhRBCDH7dhhtN0+qVUv8FfquUugZ9ttQC4Ph2Rb8BWncpHA/8BShGnzkleslkMPHk6U9S6ixl6d6lLC1dyt+/+Tt/W/83hsUO4+Tck/lW7reYkTGj08tWBoNi1ogUZo1I6XLG1YKibMZnDrwZVwEtwCf7PuHV7a+SFZfFVZOuIjUmtb+rJYQQYgAKd/DFDcBTwEHgMHC9pmkblFInAe9ommbXNK0JKG8+QClVBQQ0TSvv8Iyix3IduXx/4vf5/sTvU+OuYdm+ZSzZu4TXd7zOi1texG62c2L2iXwr71ucmH0iDkvHM/Hbz7j6cFMFr65pmXE1epid86cOjBlXTq+T17a/xr83/5u9zr0k25L5yPMRL255kYvHXszCSQsl5AghhGgjrHCjaVoVcH4H+5ejDzju6JgSoMOZUqLvEm2JnDfyPM4beR7uJjcrDqxgSekSSkpLeHf3u5gMJmakz+DkvJM5OfdkMuIyOjxPnNXEginZLJiSzWGXh7e/Kef1tfu4770t3PfeForzEjl/ajZnFWaSarces++3q3YX/978b17b/hoNTQ1MSZvCTVNvYn7+fPa79vPEuid4ftPzoZBz9aSrJeQIIYQAwu+5EQOYzWRjbu5c5ubOxR/ws75yPUtKl7B071J+v+L3/H7F75mQMoHZmbNJjUkl0ZpIgjWBRGtiaNthcZBit3LF7HyumJ1PaVUDb6zbz+tr9/Pr1zbw/97YyImjUskx+kgpq2V8pgOTMbKDkQNagE/3fcrzm5/n032fYjaYObPgTC4ddykTUyeGyuXH5/O7E3/HDyf/kMfXPc6/Nv2Ll7a8JCFHCCEEIOEm6hgNRqYMm8KUYVO4bdpt7KzdGRqn88yGZwhoHd+TyqAMJFgSjgg9p5yQyFyfjR3lGutLN7O82s7zj7iIMcUwJTeR6cOTKM5Pojg3iYTYzqepd8XldfHaDv3S0566PaTFpPHjKT/mO2O+02VQyYvPC4WcJ9Y9EQo5F425iKsnXU1abFqv6iOEEGJwk3AT5UYkjGBE4Qh+UPgDAloAp9dJjaeGGk8NtZ5afdvd9nWtp5YD9QfYVLWJWk8tbr9bP1kixCXqmzEqhe2+YazZmIx/dRoBbxrD4wuYkZvHtPxkpg9PZnhKbJcDk/fU7eHfm//Nq9tfpd5Xz+S0yfzxpD9yav6pXa7n015efB6LTlzEdZOv44l1T/Dvzf/mP1v/IyFHCCGGKAk3Q4hBGUiw6r0z+eSHfZy7yR0KRO9+/i6xubHsqt3Fztqd7LKtprGpEdBHm79Va+P1lWkEPk3DpmUyMmkE07PHMW/EOKbmpmAxKT7f/znPb3qe5fuWYzKYOGP4GVw67lIK0wr79P2aQ84PJ/+QJ9ZLyBFCiKFKwo3ols1kI8OUQUZcBuVx5cybPC/0nqZpVDRU6EGndhe7anaxsXI7u+p24WpazVZg6z54vsyI5k3BatbwGQ5hNyVx2Zhr+UHR9yIeOnLjc7nnhHu4rvA6CTlCCDEESbgRfaKUIiNODz7HZ7Vd+sjpdbK7djfrD25lRdlmtlbtoKrRRWP5fA5UT+Kx9SZe/mgtU3ITmZqXxJTcRCbnJOCw9W7sTnutQ87f1v8tFHIuGHUBpw0/jSnDpmA2ROazhBBCDBwSbsRR47A4KEwrpDCtkEtbJjvh8wfYUu5kTWkNa/fWsKa0mg83HQRAKRg9zM7U3CSm5CUyNS+R0cMcGPuwenJufC6/PeG3XDv5Wv627m+8vO1lXtjyAg6zg+Ozj2dOzhxOzD6RZFtyX7+yGGQCWoA1B9cwOXVyj8Z5CSEGNgk34pgzGw1Myk5gUnYCV8zWx/7UNvhYW9YSdt7bWM6LK0sBiLMYKcxJCPXuFOUkkh5v7fEqyrkOPeT8cuYv+WL/F3xc9jHL9y3nvd3voVAUphZyUs5JzMmZw/jk8QNulWYRWT6/jzs/vZO3d71NUVoRD8x9gPS49P6ulhAiAiTciAEhIdbM3DFpzB2jj4fRNI3dhxtYW1odDDw1/G3ZTpoCGgCpdiuTsuOZlJXApOx4JmYlkJMUE1YgiTPHMT9/PvPz5xPQAmyq2sSysmUsL1vOX9f+lUfWPkJaTJoedLLnMDtrNnHmuKP6/cWx5fK6uLXkVlYcWMGCkfqNaS9+82Lun3s/MzJm9Hf1hBB9JOFGDEhKKQpS4yhIjeOCqfpC126fnw37a1lfVss3++v4Zl8ty7dV4g8GnoQYcyjwTMxOYFJWPMNT4rq8IahBGZiYMpGJKRO5vuh6Djce5pN9n7CsbBnv736f/277L2aDmWnp05iTM4c5OXPIjw9/ppkYeA41HOL6D69nR80OFp2wiAWjFrBw0kJuXXor175/LT+Z9hO+P+H70nMnxCAm4UYMGjazkWn5yUzLbxkb4/b52VLu5Jv9tXyzr5Zv9tXx9Ke78fr1xQrtVhMTMuODl8H05xGpcZ2urpwSk8KCUQtYMGoBvoCPtQfXsqxsGcvKlnHvV/dy71f3kh+fz/D44SilMCojBmUIPVq/7uw9ozJSXlOOsUxfcLGze4CJyNtZu5PrP7ieak81D89/mBOzTwRgZOJI/n32v7nr07u4f+X9rDu0jt+e8FvpsRNikJJwIwY1m9lIUW4iRbmJoX3epgDbDjrZsK8uFHr+9eUe3D498FhNBsakOxib4WBchoNxGfGMzXCQ5mh77yyzwcyMjBnMyJjBT6f/lDJnGcvKlvHJvk842HCQgBbAr/kJaIHQI9zXXr+Xdz56B4MyMDZpLMXpxUxLn0bxsGJSYlKOZRP2SkV9BV+Wf0mMKYYTs0/EZrL1d5W6tfbgWm5cciNGZeTpM55mYsrENu/bLXYenPcgz2x4hv9b/X9sr9nOn07+EyMSRvRTjYUQvSXhRkQdi8nAxKwEJmYlcDG5ADT5A+yqrGf9vlo27K9jS7mTki2HeHlVWei4lDgL4zIdjE2PZ1yGHn7GpDuIsRgByHHkcOn4S7l0/KV9ruN7S94jcXwiqytWs6piFa9sfYXnNz0PwPD44UxLnxZ6ZNmz+vx5fVXrqWVl+Uq+OPAFXxz4gt11u0PvxZnjmJ83n7NHnM3MjJmYDAPvj5Ule5fwi2W/ID02ncdOeYzc+NwOyymlWDhpIRNSJvCLZb/ge29+j0UnLuLU/FOPcY2FEH0x8P4UEuIoMBkNjE53MDrdwbeLW/ZXujxsKXeyudzJlvI6Npc72/TyKAXDU+IYm+5gXKYjGHriyUuO7dP0dKvByqzMWczKnAXoM3c2Vm1kVcUqVles5v097/PKtlcAyIjLoHhYcSjsjEgYcdTHgzQ2NbLm4BpWHFjBigMr2FS1iYAWIMYUw7T0aXxnzHeYmTGTWm8tb+18iw/3fMjrO14nxZbCGQVncFbBWRSmFg6IcSsvbXmJ3634HROSJ/CX+X8Jq2dsVuYsXjznRW4ruY3bSm5j4cSF3Fx884AMbkKII8n/qWJIS7VbSR1l5YRRLTfo9Ac09lY1sKW8jk0HnGwpd7Klwsl7G8vR9LHLWEwGhqfEMiLVTkFaHCNS4xiRZmdEahxJcZYe18NsNFOUVkRRWhFXT7qagBZgW/U2PewcXM2X5V/y9q63AUiyJjF12FRGJY0i2ZZMii2FlJgUkm3JJNuSSbAmYFA9u2N7U6CJbyq/0cNM+QrWHlyLL+DDpExMTpvMjyb/iFmZsyhMLTxiPZjZmbO5c/adLC9bztu73uY/W/7D85ueJ9eRy1kFZ3HWiLP65dKOpmk8svYRHl/3OCdln8T9c+8n1hwb9vEZcRk8c8Yz3PvVvTy94Wk2HN7AvXPuHRSXDYUY6iTcCNGO0dAyU+uMSZmh/Q3eJrZVuNhS7mTHIRc7DtWz9aCTDzdVhKaoAyTFmhmRZqcgNY4RaXGMSLUzIi2O/JRYrCZjWHUwKANjk8cyNnksl46/FE3TKHWWsqpiVehRUlbS4V3eDcpAkjWJ5JjkUOBJsbWEn2RbMskxyZgMJtZUrOGLA1+wsmIl9b56AMYlj+PScZcyK3MW09KnhRUIrEYrp+Sfwin5p1DnreOjPR/x9q63+dv6v/H4uscZnzyes0eczenDTycjLiOsNugLX8DHPZ/fw+Lti7lg1AX8+rhf96rXxWK0cOfsOylMLeSeL+7h4jcv5sF5D1KUVnQUat07mqaxpXoLjU2NFKUV9TjYChGNJNwIEaZYi+mIwcugj+cprW5k5yEXuyrr2XGonp2HXCzb2nZMj0FBTlIsBalxWD0eKuL2MiZdH9cTZ+36f0WlFHnxeeTF53HB6AsA8Af81HprqWqsosqtPw67D4e2m/dvqNzAYffhUHhpL8+Rx1kFZzErcxYzM2aSZEvqUzvFW+K5YPQFXDD6Ag41HOK93e/x1s63uH/l/Tyw8gGmZ0znrIKzODX/VBKsCX36rI40+Br42cc/Y/m+5fyo6EfcUHRDny+PLRi1gLHJY7l16a1c9e5V3D7jdi4ee3G/XXbz+r18Wf4lJaUlfFz2MeX15QDk2HO4YPQFLBi5QBYkFEOahBsh+shkNIR6etpzun3sqqxvE3p2VdazraKJ9/esD5XLTY5hbHrLIOZxGfEUpMZhMXX+r3CjwRjqiQmHu8lNtbs6FIIamhqYnDr5qA5YTotN4/IJl3P5hMvZU7eHt3e9zds73+b/ff7/+N2K33Fi9okcl3kc0zOmMypxVJ97HarcVfz4wx+zsWojvz7u11w05qIIfRO9R+vFc17kf5b/D4tWLGJd5TrunH0nMaaYiH1GV6rcVSwvW87HZR/z6b5PaWhqIMYUw3GZx3FD0Q2YDCZe3f4qD695mEfWPsKJ2Sfy7dHfZk7OHLmHmhhyJNwIcRQ5bGYm5yQyOSexzf4lS5cycvJMfTxPcEzPlnInS7ccCi1KaDIoRqbZGZPhYGy6nbEZ8YxNd5CTFNPlwoSdsZlsZNozybRndl/4KMiPz+f6ouv50eQfsbFqI2/vfJsP9nxASWkJAInWRIqHFTM9YzrT06czJmkMRkN4l/EASutK+dGHP6KioYL/m/d/nJx3csS/Q4I1gb/M/wuPf/04j379KFuqtvCnk/9ErqPj2Vd9oWkau2p3UVJWQklpCV8f+pqAFmBY7DDOGXEOc3PnMitzFlZjyxIG5448l9K6UhZvX8xr21/j1rJbSbGlcN7I87hg9AUUJBREvJ5CDEQSboToBwalyE+JIz8ljtMmtoxB8TT52Xmonq3BsLOl3MmavdW88fX+UJlYi5HR6Q5GpsaRmxxLbnIsecmx5CbHkO6w9Sr4HEtKqdCq0D+f8XP2ufaxsnwlKytWsrJ8JUtKlwDgMDsoTi9mevp0pqVPY3zK+E7HzWyo3MANH92AX/Pz5GlPMmXYlKNWf4MycP2U65mYOpHbl9/OJW9ewo+n/Jj02HTiLfE4LA7irfqz3WzvUW9U88KRS0uX8nHpx+x17gVgfPJ4fjj5h8zLndftfc9y43O5ufhmbphyA5/u+5T/bvsv/9j4D57e8DTFw4r59uhvc2r+qT0aXC3EYCPhRogBxGoyMj4znvGZ8W32O90+th10tfT0lDv5YudhFq/dF5rBBWAxGshJiiEnOZa85Bhyk1qFn6RYEmIH3uWJbHs22aOyWTBqAQDl9eWhoLOqYhUfl30MQKwplqnDpoZ6diamTMRsNLOxcSPPvPcMSdYkHjv1sWPWOzEnZw4vnvMiPy35KX/48g8dljEoA3azXQ88lnj9YY1vCUHBZ7PBzJflX7J833KcXicWg4WZmTO5cuKVzMmZ06tB2CaDibm5c5mbO5fKxkpe3/E6i7ct5s5P7+R/v/xfziw4kwtHX8jElIkDYsq+EJEk4UaIQcBhM1Ocl0RxXtvBvp4mP/tr3OytaqC0qoHS6uBzVSPrymqoafC1KR9vM+m9PUl6T09mQgxZiTYyE2LITLCRarf2e89PRlwG54w4h3NGnAPo94JadXBVKOw8tPohAGxGGxNTJ7Lm4BrGJI/hr/P/Slps2jGta64jlxfOeYHy+nKcXid13jr94alr87p52+l1srNmZ2jb7XeHzpVsS2Z+3nzm5czjuKzjItqzkhqTytWTrmbhxIWsObiGV7a9wps73uTlrS8zOmk0F46+kLMLzo7Y5/WXanc1Lp+LrLisHl3SFNFHwo0Qg5jVZOx0MDNAndsXDDt64CmtbmBvVQPbDjpZuuUgnqa2U8lNBkV6vI2sRBsZCTFkJdjITAhuJ9rISLCRGndsA1BabBpnDD+DM4afAegDa1dXrGZlhR52imKL+Ovpf8VusR+zOrVmUIZeD8r2+r3Ueeto9DWSZT/6fyErpShOL6Y4vZjbZ97OO7veYfG2xfzhyz/wwMoHyDRl8tGnHzE6cTRjkscwOnH0gFvXJ6AFOFB/gJ01O9lZu5NdtbvYVbuLnbU7qfHUAPrSBCMSRjAycSSjEkcxKnEUIxNHkmXPivhUeX/AT3lDOaXOUsqcZZQ6S9l0eBOrVq4iwZpAvCWeBGuC/rAkhPbFmeMGZI9Z8yzMGncNTVpTm3viGQ3GDu+f1/xsMphCr/v7u0m4ESKKxdvMoVtRtKdpGtUNPvbXNFJe6+ZAbSMHat0cqHWzv0bv+XlvgxtvuwBkNgYDUEIMOUkxwbFDseSnxDI8JY7EWPNR/YMt2ZYcWlMHoKSkpN+CTV9ZjBZSY1Lh2Ey4asNhcXDx2Iu5eOzFbKnawlu73uLT7Z+yrGwZr25/NVQu2ZbM6KTReuBJGsPopNGMTBx51GeJef1e9tTtYWdt2xCzu3Z3mx6vJGsSBQkFzM+bz4iEETgsDnbW7mRbzTZWVqzkzZ1vhsrGmGIYmTCSUUmj2oSe9Nj0Ln+z7iZ3KLiEHi49zOxz7aMp0BQqazKYiFWxrN2ylsamxk7PaVKm0CXKI8KPNZ5YUyw2ow2ryYrNZNO3jfp283P7fe3HpGmaRkNTA9Xuav3hqabGUxN6Hdr2tLyu9dSioXVS6/Ap9BsLv/ntN8m2Z/f5fD0l4UaIIUopRXKcheQ4C5OyO15vRtM0quq9odBzoLaR/TVuymsb2V/r7nDcT7zNxPBUfbB0fnIw9KTqASjNbu33f9GJIzUvGFnsLGbevHkcbjzMtpptbK3ayraabWyr3sbLW18OhQqFvu7S6MTRevAJhp9MeyZevxeP36M/mjwt2+0fwfe8fi9uvxuv30tjUyNlzjJ21u6kzFXWZpHKbHs2BQkFzMiYwYiEEYxIGEFBQkG36zI5vU521Oxge8320GN52fI2Ac5hdjAycSQjE0cyImEEDU0NbXpiDjUeanNOu9lOriOXMUljmJ83n1xHbuiRHpvO8mXLmTdvHh6/hzpPHbWeWmq9tfqzp5Y6b10oSDS/d6jhENurt1Prre10TarumJQpFHQMykCNpwZfwNdp2SRbEom2RJKsSYxJGqO/tiaGns0Gc5sb/vo1P/6Av83r9jcFbgo0tXntsDh69V36SsKNEKJTSilS7FZS7NZOA5Db56esuoHdlQ3sPlzPnsP687qyGt5efyA0tR30mV6h0JMaS35yXOhyV2Z8DPExJgk/A0BKjH5Lj9mZs0P7/AE/Za4ytlVvY2v1VrZVb2NbzTY+2vtRRP6lb1ImLEYLWfYsxiaP5cyCM/UQkziC/Pj8XvcUOSwOpgybcsQMump3NdtrtrcJPh/u/ZBaTy0Aw2KGkePI4fis49uElxxHDonWxLB+p1ajlbTYtB6PBfMFfDQ2NeJp8uD2u0NBsHm70d94xD63362/bnLj9rvRNI0EawJJVj3AJNuS9eASfG0326P6/zUJN0KIPrGZjYwa5mDUsCP/hebzB9hX3RgKPfqjnm0HnSzZfBCvv+0lrxizMTjGJxh4guN9MuJtof3JsZZ+H/Q8FBkNRvLj88mPzw9dEgT9Jqs7a3aytXorlY2VWIwWbEab/myytX3dar/VaG2z71jflDTJlsSMjBnMyJgR2qdpGlXuKmLNscdsccaOmA1mzBYz9Pw2dSJIwo0Q4qgxGw0MT41jeAcDnv0BjfI6/RLXgVo35cHHgTr9ecXOKirq3G3u2wX6dPf0BCuZ8TFkJNjw1nrYbtxJmsNKeryNYcHn7m5pISIjxhTDxNSJTEyd2N9V6TOl1IAbQC16R/7vF0L0C6NBkZ0YQ3Zi5/9C9gc0Drs8oTE/FXXuYBDSA9Ha0hoO1DTx7u5NRxwbZzGSHm87IvQMi7e22We3yqUwIaKNhBshxIBlNCiGxdsYFm+jqJM7HCxdupTi2SdysM7NQaeHinbPB+vcfF1WQ0WdG7fvyLuox1r0S2FZiTFkJcSQmajPBMtKbNmOsciaKUIMJhJuhBCDmlKKhBgzCTFmRqd3PjND0zScniY9BNV5qHAGn+s8+iywWjebyw9yyOk54tikWLMedoLr/ejbNrITY8hMjGGYw4rZGNn1U4QQvSfhRggxJCiliLeZibeZOxz83MzT5Kei1sP+2sbQ1Pf9NY3sr2mkrLqBL3cdps7ddMRxyXEW0uxWUh36c5rDSmrwufW2DIgW4uiTcCOEEK1YTUbyUmLJS+n89gcuTxMHahrZV9MyGLrS5eGQ00Oly8OqvdUccno6vAxmNKhQEGodfNLjrWQEL8FlJNhIs1uxmKQ3SIjekHAjhBA9ZLeaGJ3u6PYyWL3XzyFnS+g5YtvlYVuFk0MuDz7/kWvFpNotDHPoYSc9Xh8EnR5vC4YgPQwlSU+QEEeQcCOEEEeBUgq71YTdaur03l/Nmm+FUV7rpsLppqLWTXmdm4o6fWB0RZ2bdWU1VLq8RxxrNiqGOfSwMyzYE5Rmt4V6hVp6hyxYTTIwWgwNEm6EEKKftb4VxgTiOy3n8wdCM8EqglPjy+v0GWEVTje7Kxv4anc1VfVHhiCAhBhzSwByWNtcGktzWCl1Bjjk9JAcZ8EovUFiEJNwI4QQg4TZaOh2bSAAb1OAw/Utl8FCj1aXxtaW1nCwzkOjz9/m2Ls+/RCD0gdIp7YaGJ1qtwSfraQGe4KaB0ibZKaYGGAk3AghRJSxmAxkJuhT17tT72nikNPDQaeHj1esJj1/FJVOD4dc3tD4oF2V9VS6Oh4grRQkxwaDj8NCcpyVlDgLqfbgtt1CSpwleI8yCw5ZNFEcAxJuhBBiCIuzmoiz6ndyb9hjYt5xwzss1zxAujIYeCpdbQNQ8/711TUcrvfi7GC6POi3z2i+BJcS7A0KbQfDUEtvkcwYE70j4UYIIUS3Wg+Q7uheYe15mvxU1Xs57PJyuN7LYZeHqnovla5W2/VedlXWU1XvpcHr7/A8CTHm0IDoNIctdDkstIZQ8/pBcRZZSFGESLgRQggRcVaTMexLYwAN3iYOu7zBXiFvmynzzc/rgzPGXJ6Oe4WS4/RLYM09Q0lxFpJjg89xZpJig/uDz7EWo1wii1ISboQQQvS7WIuJ2GQTucmdL57YrNHrp9KljxMKXSILXR7zUt3gZcchF1W7fVQ3ePEHjlxDCPSxSR2Fn8RYC0mx+uvEWHPodWKshXibjBkaDCTcCCGEGFRiLEZyk2PDCkKBgH5Psep6L1UNXv25Xg9Ah+ubX+shaOP+OqoavNQ2+tA6zkMYDYrEGPMRoaf5OTHWzP7yJmw7D4d6iZJizTKj7BiTcCOEECJqGQwtN1YdTvdjhQD8AY26Rj3wVDf4qGn1XNOg729+3lfjZsP+OqobvG1mkz2y9os250yIMQfDjrnNpbEjL5/p2w6bSVae7gMJN0IIIUQrRoMiKRg6esLt81PT4OP9jz9l1IQivWeoIdhTVO+lqsFHdb2X/TVuvtlXR1W9F6//yOn1AAZFKJQlxFpaeos62hcb3BdjISHGLDPMkHAjhBBCRITNbCQjwUhevJHjR6V2W17TNBq8/tBlstDlMpd+aaymwUdNoy+47WX34XpqGnzUuTu/bAYQZzHql8rizCTHWUmODT7HtTwnxerT7/VxRdG3IrWEGyGEEKIfKKVC6wyFM36oWSCg4XQ3UdPoDQWgmgYvda0CUXVDS2/RrkoX1fW+TmeZKQWJwctmrR8JMfrlsfgYM/Gtn21m4mPMOGwmYswDc8aZhBshhBBiEDEYFAmxZhJizeSnhH9c82Wzw/Uequubn/UAVNVq3+7KBlbtqaGu0dfpZbNmJoMKBR099JhwWPXneJuZ6+eNJMVu7eM37jkJN0IIIcQQ0HzZLCPBFvYxbp+fOrePusYmnG4fde4m6hp9ON1Nwf36ZTJncH+du4lDThd1jfr7Pzip4Ch+o84N2HDj8/koKyvD7Xb3+VwJCQls2rQpArUaumw2Gzk5Of1dDSGEEMeQzWzEZjYyzNHfNemZARtuysrKcDgcDB8+vM/X85xOJw7HIPsvM4Bomsbhw4cpKyvr76oIIYQQ3Rqw88XcbjcpKSkDcqDSUKOUIiUlJSK9aEIIIcTRNmDDDSDBZgCR/xZCCCEGi7DCjVIqWSm1WClVr5Tao5S6tJNyP1dKfaOUciqldimlfh7Z6gohhBBCdC3cMTePAF4gHZgCvKWU+lrTtA3tying+8A6YCTwvlKqVNO0FyJU32PKbrfjcrn6uxpCCCGE6IFue26UUnHAhcBdmqa5NE37BHgduKJ9WU3T7tU0bbWmaU2apm0BXgNOiHSlhRBCCCE6E07PzRigSdO0ra32fQ3M7eogpQ/SOAl4vJP3rwOuA0hPT6ekpKTN+wkJCTidTgD++P4ONlf0vgdF07QjxoyMS7fzy9NGdnus0+lE0zTuuusuPvjgA5RS/PznP+fCCy+kvLycq666CqfTSVNTE3/605+YNWsWP/7xj1mzZg1KKS6//HJuvPHGXtd9IHG73bhcriP+W4mek3aMHGnLyJG2jAxpx8jpbVuGE27sQF27fbVAd3Or70bvGXq6ozc1TXsCeAJg+vTp2rx589q8v2nTptD0bbPFjNFoDKOqHfP7/Uccb7aYw5oe7nA4eOWVV9i4cSPr16+nsrKSGTNmcPrpp/P6669z1lln8atf/Qq/309DQwNbt27l4MGDbNy4EYCampqomYZus9mw2+20/28leq6kpETaMUKkLSNH2jIypB0jp7dtGU64cQHx7fbFA87ODlBK3Yg+9uYkTdM8Pa5VO785d2Kfju/rOjeffPIJ3/ve9zAajaSnpzN37ly++uorZsyYwdVXX43P5+P8889nypQpjBgxgp07d3LTTTdx9tlnc9ppp/Wp7kIIIYTomXBmS20FTEqp0a32FQHtBxMDoJS6GrgdmK9pWlSv+jZnzhyWLVtGdnY2V111Fc899xxJSUl8/fXXzJs3j8cee4xrrrmmv6sphBBCDCndhhtN0+qB/wK/VUrFKaVOABYA/2hfVil1GfB74FRN03ZGurL95aSTTuLFF1/E7/dz6NAhli1bxsyZM9mzZw/p6elce+21XHPNNaxevZrKykoCgQAXXnghixYtYvXq1f1dfSGEEGJICXcq+A3AU8BB4DBwvaZpG5RSJwHvaJpmD5ZbBKQAX7UawPtPTdN+FME6H3MXXHABn3/+OUVFRSiluPfee8nIyODZZ5/lvvvuw2w2Y7fbee6559i3bx8LFy4kENDvpPq///u//Vx7IYQQYmgJK9xomlYFnN/B/uXoA46bX/fP7T+PkuY1bpRS3Hfffdx3331t3r/yyiu58sorjzhOemuEEEKI/jOgb78ghBBCCNFTEm6EEEIIEVUk3AghhBAiqki4EUIIIURUkXAjhBBCiKgi4UYIIYQQUUXCjRBCCCGiioSbAaCpqam/qyCEEEJEjXBXKO5f79wO5et7fXiMvwmM7b5qRiGc+Ydujz3//PMpLS3F7XZzyy23cN111/Huu+9yxx134Pf7SU1N5aOPPsLlcnHTTTexcuVKlFL85je/4cILL8Rut4cWA3z55Zd58803eeaZZ7jqqquw2WysWbOGE044ge9+97vccsstuN1uYmJiePrppxk7dix+v59f/vKXvPvuuxgMBq699lomTpzIn//8Z1599VUAPvjgA/7617+yePHiXreREEIIES0GR7jpR0899RTJyck0NjYyY8YMFixYwLXXXsuyZcsoKCigqqoKgHvuuYeEhATWr9dDWHV1dbfnLisr47PPPsNoNFJXV8fy5csxmUx8+OGH3HHHHbzyyis88cQT7N69m7Vr12IymaiqqiIpKYkbbriBQ4cOkZaWxtNPP83VV199VNtBCCGEGCwGR7gJo4elK41OJw6Ho1fH/vnPfw71iJSWlvLEE08wZ84cCgr0O00kJycD8OGHH/LCCy+EjktKSur23BdddBFGoxGA2tparrzySrZt24ZSCp/PFzrvj370I0wmU5vPu+KKK/jnP//JwoUL+fzzz3nuued69f2EEEKIaDM4wk0/KSkp4cMPP+Tzzz8nNjaWefPmMWXKFDZv3hz2OVrdQBS3293mvbi4uND2XXfdxcknn8zixYvZvXs38+bN6/K8Cxcu5Nxzz8Vms3HRRReFwo8QQggx1MmA4i7U1taSlJREbGwsmzdv5osvvsDtdrNs2TJ27doFELosdeqpp/LII4+Ejm2+LJWens6mTZsIBAJdjompra0lOzsbgGeeeSa0/9RTT+Xxxx8PDTpu/rysrCyysrJYtGgRCxcujNyXFkIIIQY5CTddOOOMM2hqamL8+PHcfvvtzJ49m7S0NJ544gm+/e1vU1RUxCWXXALAnXfeSXV1NZMmTaKoqIilS5cC8Ic//IFzzjmH448/nszMzE4/6xe/+AX/8z//w9SpU9vMnrrmmmvIy8tj8uTJFBUV8a9//Sv03mWXXUZubi7jx48/Si0ghBBCDD5yLaMLVquVd955p8P3zjzzzDav7XY7zz777BHlvvOd7/Cd73zniP2te2cAjjvuOLZu3Rp6vWjRIgBMJhMPPvggDz744BHn+OSTT7j22mu7/R5CCCHEUCLhZpCaNm0acXFxPPDAA/1dFSGEEGJAkXAzSK1ataq/qyCEEEIMSDLmRgghhBBRRcKNEEIIIaKKhBshhBBCRBUJN0IIIYSIKhJuhBBCCBFVJNxEiN1u7/S93bt3M2nSpGNYGyGEEGLoGhRTwf/45R/ZXBX+/Zza8/v9oRtUNhuXPI5fzvxlX6smhBBCiAFGem46cfvtt7e5V9Tdd9/NokWLmD9/PsXFxRQWFvLaa6/1+Lxut5uFCxdSWFjI1KlTQ7dp2LBhAzNnzmTKlClMnjyZbdu2UV9fz9lnn01RURGTJk3ixRdfjNj3E0IIIaLVoOi56WsPi9PpxOFw9OiYSy65hFtvvZUf//jHALz00ku899573HzzzcTHx1NZWcns2bM577zz2tz5uzuPPPIISinWr1/P5s2bOe2009i6dSuPPfYYt9xyC5dddhlerxe/38/bb79NVlYWb731FqDfXFMIIYQQXZOem05MnTqVgwcPsn//fr7++muSkpLIyMjgjjvuYPLkyZxyyins27ePioqKHp33k08+4fLLLwdg3Lhx5Ofns3XrVo477jh+//vf88c//pE9e/YQExNDYWEhH3zwAb/85S9Zvnw5CQkJR+OrCiGEEFFFwk0XLrroIl5++WVefPFFLrnkEp5//nkOHTrEqlWrWLt2Lenp6bjd7oh81qWXXsrrr79OTEwMZ511FkuWLGHMmDGsXr2awsJC7rzzTn77299G5LOEEEKIaDYoLkv1l0suuYRrr72WyspKPv74Y1566SWGDRuG2Wxm6dKl7Nmzp8fnPOmkk3j++ef51re+xdatW9m7dy9jx45l586djBgxgptvvpm9e/eybt06xo0bR3JyMpdffjmJiYk8+eSTR+FbCiGEENFFwk0XJk6ciNPpJDs7m8zMTC677DLOPfdcCgsLmT59OuPGjevxOW+44Qauv/56CgsLMZlMPPPMM1itVl566SX+8Y9/YDabQ5e/vvrqK37+859jMBgwm808+uijR+FbCiGEENFFwk031q9fH9pOTU3l888/77Ccy+Xq9BzDhw/nm2++AcBms/H0008fUeb222/n9ttvb7Pv9NNP5/TTT+9NtYUQQoghS8bcCCGEECKqSM9NBK1fv54rrriizT6r1cqKFSv6qUZCCCHE0CPhJoIKCwtZu3Ztf1dDCCGEGNLkspQQQgghooqEGyGEEEJEFQk3QgghhIgqEm6EEEIIEVUk3ESI3W7v7yoIIYQQgkEyW6r897/Hs2lzr49v8vupMhrb7LOOH0fGHXf0tWoDTlNTEybToPjPKoQQQhwV0nPTidtvv51HHnkk9Pruu+9m0aJFzJ8/n+LiYgoLC3nttdfCOpfL5er0uOeee47JkydTVFQUWiOnoqKCCy64gKKiIoqKivjss8/YvXs3kyZNCh13//33c/fddwMwb948br31VqZPn85DDz3EG2+8waxZs5g6dSqnnHJK6M7lLpeLhQsXUlhYyOTJk3nllVd46qmnuPXWW0Pn/dvf/sZPfvKT3jabEEII0e8GxT/x+9rD4nQ6cTgcPTrmkksu4dZbb+XHP/4xAC+99BLvvfceN998M/Hx8VRWVjJ79mzOO+88lFJdnstms7F48eIjjtu4cSOLFi3is88+IzU1laqqKgBuvvlm5s6dy+LFi/H7/bhcLqqrq7v8DK/Xy8qVKwGorq7miy++QCnFk08+yb333ssDDzzAPffcQ0JCQuiWEtXV1ZjNZn73u99x3333YTabefrpp3n88cd71FZCCCHEQDIowk1/mDp1KgcPHmT//v0cOnSIpKQkMjIy+MlPfsKyZcswGAzs27ePiooKMjIyujyXpmnccccdRxy3ZMkSLrroIlJTUwFITk4GYMmSJTz33HMAGI1GEhISug03l1xySWi7rKyMSy65hAMHDuD1eikoKADgww8/5IUXXgiVS0pKAuBb3/oWb775JuPHj8fn81FYWNjD1hJCCCEGDgk3Xbjooot4+eWXKS8v55JLLuH555/n0KFDrFq1CrPZzPDhw3G73d2ep7fHtWYymQgEAqHX7Y+Pi4sLbd90003cdtttnHfeeZSUlIQuX3Xmmmuu4fe//z3jxo1j4cKFPaqXEEIIMdDImJsuXHLJJbzwwgu8/PLLXHTRRdTW1jJs2DDMZjNLly5lz549YZ2ns+O+9a1v8Z///IfDhw8DhC5LzZ8/n0cffRQAv99PbW0t6enpHDx4kMOHD+PxeHjzzTe7/Lzs7GwAnn322dD+U089tc04oubeoFmzZlFaWsq//vUvvve974XbPEIIIcSAJOGmCxMnTsTpdJKdnU1mZiaXXXYZK1eupLCwkOeee45x48aFdZ7Ojps4cSK/+tWvmDt3LkVFRdx2220APPTQQyxdupTCwkKmTZvGxo0bMZvN/PrXv2bmzJmceuqpXX723XffzUUXXcS0adNCl7wA7rzzTqqrq5k0aRJFRUUsXbo09N7FF1/MCSecELpUJYQQQgxWclmqG82DbwFSU1P5/PPPOyzncrk6PUdXx1155ZVceeWVbfalp6d3OBPr5ptv5uabbz5if0lJSZvXCxYsYMGCBUeUs9vtbXpyWvvkk09klpQQQoioID03Q1xNTQ1jxowhJiaG+fPn93d1hBBCiD6TnpsIWr9+fWitmmZWq5UVK1b0U426l5iYyNatW/u7GkIIIUTEDOhwo2lat2vIDCSFhYWsXbu2v6txVGia1t9VEEIIIcIyYC9L2Ww2Dh8+LH+pDgCapnH48GFsNlt/V0UIIYTo1oDtucnJyaGsrIxDhw71+Vxut1v+Yu4jm81GTk5O2NPfhRBCiP4yYMON2WwOrazbVyUlJUydOjUi5xJCCCHEwBbWZSmlVLJSarFSql4ptUcpdWkn5ZRS6o9KqcPBxx/VYBo0I4QQQohBL9yem0cAL5AOTAHeUkp9rWnahnblrgPOB4oADfgA2AU8FonKCiGEEEJ0p9ueG6VUHHAhcJemaS5N0z4BXgeu6KD4lcADmqaVaZq2D3gAuCqC9RVCCCGE6FI4PTdjgCZN01ovhvI1MLeDshOD77UuN7GjkyqlrkPv6QFwKaW2hFGX3koFKo/i+YcSacvIkHaMHGnLyJG2jAxpx8jpqi3zOzsonHBjB+ra7asFHJ2UrW1Xzq6UUlq7Od2apj0BPBHG5/eZUmqlpmnTj8VnRTtpy8iQdowcacvIkbaMDGnHyOltW4YzoNgFxLfbFw84wygbD7jaBxshhBBCiKMlnHCzFTAppUa32lcEtB9MTHBfURjlhBBCCCGOim7DjaZp9cB/gd8qpeKUUicAC4B/dFD8OeA2pVS2UioL+CnwTATr21vH5PLXECFtGRnSjpEjbRk50paRIe0YOb1qSxXOFSOlVDLwFHAqcBi4XdO0fymlTgLe0TTNHiyngD8C1wQPfRL4pVyWEkIIIcSxEla4EUIIIYQYLAbsjTOFEEIIIXpDwo0QQgghokpUh5tw74kluqeUKlFKuZVSruDjaC66GDWUUjcqpVYqpTxKqWfavTdfKbVZKdWglFqqlOp0QSrReVsqpYYrpbRWv02XUuqufqzqgKaUsiql/h78M9GplFqrlDqz1fvyuwxTV20pv8ueUUr9Uyl1QClVp5TaqpS6ptV7Pf5NRnW4oe09sS4DHlVKdbhisgjLjZqm2YOPsf1dmUFiP7AIfUB+iFIqFX0W4l1AMrASePGY125w6bAtW0ls9fu85xjWa7AxAaXoq8wnAHcCLwX/MpbfZc902patysjvMjz/CwzXNC0eOA9YpJSa1tvfZLg3zhx0Wt0Ta5KmaS7gE6VU8z2xbu/XyokhQ9O0/wIopaYDOa3e+jawQdO0/wTfvxuoVEqN0zRt8zGv6CDQRVuKHggu73F3q11vKqV2AdOAFOR3GbZu2nJVv1RqkGp3I24t+BiJ3pY9/k1Gc89NZ/fEkp6b3vtfpVSlUupTpdS8/q7MINfmPmzBPyR3IL/PvtijlCpTSj0d/NeeCINSKh39z8sNyO+yT9q1ZTP5XYZJKfVXpVQDsBk4ALxNL3+T0RxuenJPLNG9XwIjgGz0RZXeUEqN7N8qDWrt78MG8vvsrUpgBvpN9Kaht+Hz/VqjQUIpZUZvq2eD/wqW32UvddCW8rvsIU3TbkBvp5PQL0V56OVvMprDTU/uiSW6oWnaCk3TnJqmeTRNexb4FDirv+s1iMnvM0I0TXNpmrZS07QmTdMqgBuB05RS8hdyF5RSBvSV5r3obQbyu+yVjtpSfpe9o2maX9O0T9AvPV9PL3+T0RxuenJPLNFzGqD6uxKDWJv7sAXHiI1Efp+R0LwyaTT/+dYnwdXk/44+2eJCTdN8wbfkd9lDXbRle/K77BkTLb+9Hv8mo7aRe3hPLNEFpVSiUup0pZRNKWVSSl0GzAHe7e+6DXTB9rIBRsDY3IbAYmCSUurC4Pu/BtbJoM3OddaWSqlZSqmxSimDUioF+DNQomla+65s0eJRYDxwrqZpja32y++y5zpsS/ldhk8pNUwp9V2llF0pZVRKnQ58D/iI3v4mNU2L2gf6tLFXgXpgL3Bpf9dpMD6ANOAr9G7AGuAL4NT+rtdgeKDPpNDaPe4OvncK+sC5RqAEfRpkv9d5oD46a8vgH4K7gv+fH0C/gW9Gf9d3oD7Qx4BogBu9y7/5cVnwffldRqAt5XfZo3ZMAz4O/v1SB6wHrm31fo9/k3JvKSGEEEJElai9LCWEEEKIoUnCjRBCCCGiioQbIYQQQkQVCTdCCCGEiCoSboQQQggRVSTcCCGEECKqSLgRQgghRFSRcCOEEEKIqPL/AZHZmLd6nb+KAAAAAElFTkSuQmCC\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "import pandas as pd\n", - "\n", - "pd.DataFrame(history.history).plot(figsize=(8, 5))\n", - "plt.grid(True)\n", - "plt.gca().set_ylim(0, 1)\n", - "save_fig(\"keras_learning_curves_plot\")\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 42, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "313/313 [==============================] - 1s 2ms/step - loss: 0.3367 - accuracy: 0.8827\n" - ] - }, - { - "data": { - "text/plain": [ - "[0.3366743326187134, 0.8827000260353088]" - ] - }, - "execution_count": 42, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "model.evaluate(X_test, y_test)" - ] - }, - { - "cell_type": "code", - "execution_count": 43, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[0. , 0. , 0. , 0. , 0. , 0.01, 0. , 0.03, 0. , 0.96],\n", - " [0. , 0. , 0.99, 0. , 0.01, 0. , 0. , 0. , 0. , 0. ],\n", - " [0. , 1. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ]],\n", - " dtype=float32)" - ] - }, - "execution_count": 43, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "X_new = X_test[:3]\n", - "y_proba = model.predict(X_new)\n", - "y_proba.round(2)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**경고**: `model.predict_classes(X_new)`는 삭제될 예정입니다. 대신 `np.argmax(model.predict(X_new), axis=-1)`를 사용하세요." - ] - }, - { - "cell_type": "code", - "execution_count": 44, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([9, 2, 1])" - ] - }, - "execution_count": 44, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# y_pred = model.predict_classes(X_new)\n", - "y_pred = np.argmax(model.predict(X_new), axis=-1)\n", - "y_pred" - ] - }, - { - "cell_type": "code", - "execution_count": 45, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array(['Ankle boot', 'Pullover', 'Trouser'], dtype='" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "plt.figure(figsize=(7.2, 2.4))\n", - "for index, image in enumerate(X_new):\n", - " plt.subplot(1, 3, index + 1)\n", - " plt.imshow(image, cmap=\"binary\", interpolation=\"nearest\")\n", - " plt.axis('off')\n", - " plt.title(class_names[y_test[index]], fontsize=12)\n", - "plt.subplots_adjust(wspace=0.2, hspace=0.5)\n", - "save_fig('fashion_mnist_images_plot', tight_layout=False)\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 회귀 MLP" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "캘리포니아 주택 데이터셋을 로드하여 나누고 스케일을 바꾸어 보겠습니다(2장에서 사용한 수정된 버전이 아니라 원본을 사용합니다):" - ] - }, - { - "cell_type": "code", - "execution_count": 48, - "metadata": {}, - "outputs": [], - "source": [ - "from sklearn.datasets import fetch_california_housing\n", - "from sklearn.model_selection import train_test_split\n", - "from sklearn.preprocessing import StandardScaler\n", - "\n", - "housing = fetch_california_housing()\n", - "\n", - "X_train_full, X_test, y_train_full, y_test = train_test_split(housing.data, housing.target, random_state=42)\n", - "X_train, X_valid, y_train, y_valid = train_test_split(X_train_full, y_train_full, random_state=42)\n", - "\n", - "scaler = StandardScaler()\n", - "X_train = scaler.fit_transform(X_train)\n", - "X_valid = scaler.transform(X_valid)\n", - "X_test = scaler.transform(X_test)" - ] - }, - { - "cell_type": "code", - "execution_count": 49, - "metadata": {}, - "outputs": [], - "source": [ - "np.random.seed(42)\n", - "tf.random.set_seed(42)" - ] - }, - { - "cell_type": "code", - "execution_count": 50, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch 1/20\n", - "363/363 [==============================] - 1s 3ms/step - loss: 2.2656 - val_loss: 0.8560\n", - "Epoch 2/20\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.7413 - val_loss: 0.6531\n", - "Epoch 3/20\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.6604 - val_loss: 0.6099\n", - "Epoch 4/20\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.6245 - val_loss: 0.5658\n", - "Epoch 5/20\n", - "363/363 [==============================] - 1s 2ms/step - loss: 0.5770 - val_loss: 0.5355\n", - "Epoch 6/20\n", - "363/363 [==============================] - 1s 2ms/step - loss: 0.5609 - val_loss: 0.5173\n", - "Epoch 7/20\n", - "363/363 [==============================] - 1s 2ms/step - loss: 0.5500 - val_loss: 0.5081\n", - "Epoch 8/20\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.5200 - val_loss: 0.4799\n", - "Epoch 9/20\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.5051 - val_loss: 0.4690\n", - "Epoch 10/20\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.4910 - val_loss: 0.4656\n", - "Epoch 11/20\n", - "363/363 [==============================] - 1s 2ms/step - loss: 0.4794 - val_loss: 0.4482\n", - "Epoch 12/20\n", - "363/363 [==============================] - 1s 2ms/step - loss: 0.4656 - val_loss: 0.4479\n", - "Epoch 13/20\n", - "363/363 [==============================] - 1s 2ms/step - loss: 0.4693 - val_loss: 0.4296\n", - "Epoch 14/20\n", - "363/363 [==============================] - 1s 2ms/step - loss: 0.4537 - val_loss: 0.4233\n", - "Epoch 15/20\n", - "363/363 [==============================] - 1s 2ms/step - loss: 0.4586 - val_loss: 0.4176\n", - "Epoch 16/20\n", - "363/363 [==============================] - 1s 2ms/step - loss: 0.4612 - val_loss: 0.4123\n", - "Epoch 17/20\n", - "363/363 [==============================] - 1s 2ms/step - loss: 0.4449 - val_loss: 0.4071\n", - "Epoch 18/20\n", - "363/363 [==============================] - 1s 2ms/step - loss: 0.4407 - val_loss: 0.4037\n", - "Epoch 19/20\n", - "363/363 [==============================] - 1s 2ms/step - loss: 0.4184 - val_loss: 0.4000\n", - "Epoch 20/20\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.4128 - val_loss: 0.3969\n", - "162/162 [==============================] - 0s 2ms/step - loss: 0.4212\n" - ] - } - ], - "source": [ - "model = keras.models.Sequential([\n", - " keras.layers.Dense(30, activation=\"relu\", input_shape=X_train.shape[1:]),\n", - " keras.layers.Dense(1)\n", - "])\n", - "model.compile(loss=\"mean_squared_error\", optimizer=keras.optimizers.SGD(lr=1e-3))\n", - "history = model.fit(X_train, y_train, epochs=20, validation_data=(X_valid, y_valid))\n", - "mse_test = model.evaluate(X_test, y_test)\n", - "X_new = X_test[:3]\n", - "y_pred = model.predict(X_new)" - ] - }, - { - "cell_type": "code", - "execution_count": 51, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAEACAYAAABI5zaHAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAAApvUlEQVR4nO3deZwcdZ3/8ddneqbn6LmTyUxOchJCTpgghBBIFuVQUDQqCHLsKqygrq7i8VMRRXdXUVfx4lhR1EWCLAFElpvEhCyJCUcCw5GE3IQccyXTcx/f3x/Vk/RMemY6c/ZUv5+PRz2mu+pb3Z+pdN5VU/2tb5lzDhER8ZeUoS5ARET6n8JdRMSHFO4iIj6kcBcR8SGFu4iIDyncRUR8SOEuIuJDcYW7mX3OzDaYWaOZ3dND2381s31mdtjMfmtm6f1SqYiIxC3eI/e9wPeB33bXyMzOB74OnAucAEwGvtuXAkVE5PjFFe7OueXOuYeBih6aXg3c7Zwrc85VAd8DrulThSIictxS+/n1ZgKPRD3fCBSb2QjnXIcdg5ldB1wHkJmZWTp+/PhevWFbWxspKT3vo2qbHQfrHWOzU0gbxG8a4q1vKCV6jaqvb1Rf3yRyfZs3by53zhXFXOici3vCOzVzTzfL3wYuiHqeBjhgYnevW1pa6nprxYoVcbX721sH3Alf+6tbv72i1+/VG/HWN5QSvUbV1zeqr28SuT5gg+siV/t7dxQGcqOetz+u6ef3OW6FoSAAlbVNQ1yJiMjA6+9wLwPmRj2fC+x3nU7JDIWCSLhX1SncRcT/4u0KmWpmGUAACJhZhpnFOl//B+BTZnaymeUD3wLu6a9i+6Iwq/3IvXmIKxERGXjxHrl/C6jH6+b4ycjjb5nZBDMLm9kEAOfcE8CtwApgF7ATuLnfq+6FzGCAjLQUHbmLSFKIq7eMc+47wHe6WJzdqe1/Av/Zp6oGSGFWUOfcRSQpJGb/ngFSEFK4i0hySKpwL1S4i0iSSLpw1zl3EUkGSRXuBTrnLiJJIqnCvTAUpKahhebWtqEuRURkQCVVuOtCJhFJFkkV7u0XMlXpQiYR8bmkCveCUBqg8WVExP+SKtw1eJiIJIvkDHedcxcRn0uqcC84cs5d4S4i/pZU4Z4WSCEnI1WnZUTE95Iq3EFXqYpIcki6cNdVqiKSDJIu3HXkLiLJIOnCvSArSGVY4S4i/pZ04V4YSlNXSBHxvSQM93Qamtuob2od6lJERAZMEoZ7ZAgCHb2LiI8lXbjrQiYRSQZJF+4aX0ZEkkHShbvGdBeRZJB04d4+pruO3EXEz4Z9uKc3HDiu9nmZaaSYwl1E/G14h/sr97Fg7bVQviXuVVJSTEMQiIjvDe9wn7IERwpsuv+4VivQEAQi4nPDO9xzSqgqmOOFe1tb3KsV6shdRHxueIc7sL94CVTvgt1r416nIJSmm2SLiK8N+3A/WHQGpIVg47K41ykMBXWFqoj42rAP97ZABsy4CMoehuaGuNYpyApSVduEc25gixMRGSLDPtwBmHMpNB6CzU/E1bwwFKSlzXG4oWWACxMRGRr+CPfJiyG7JO5eMxpfRkT8zh/hnhKA2R+FLU9BbUWPzQuzI1ep6ry7iPiUP8IdYO5l0NYCZct7bFqoI3cR8bm4wt3MCs3sITOrNbOdZnZ5F+3SzewOM9tvZpVm9qiZje3fkrtQMhtGzYyr14xGhhQRv4v3yP1XQBNQDFwB3G5mM2O0+wKwAJgDjAGqgF/0Q53xmXspvLMByrd220wjQ4qI3/UY7mYWApYCNznnws6554G/AFfGaD4JeNI5t9851wDcD8TaCQyM2R8DrMcvVkPBAMFACpW6kElEfMp66uttZqcAa5xzWVHzbgTOcc5d3KntfOA24GNANfAb4IBz7osxXvc64DqA4uLi0mXL4r8IKVo4HCY7O/vI8zkbv01m/T7WnX4nmHW53hdX1DGnKMA/zUrv1fv2tr5ElOg1qr6+UX19k8j1LVmy5EXn3PyYC51z3U7AImBfp3nXAitjtM0DlgEOaAFeBgp7eo/S0lLXWytWrOg44+U/OXdzrnM7/q/b9c7/6d/cp+5Z3+v3jdcx9SWgRK9R9fWN6uubRK4P2OC6yNV4zrmHgdxO83KBmhhtfwWkAyOAELAceDyO9+g/My6GtCzY1P1fAoUaGVJEfCyecN8MpJrZtKh5c4GyGG3nAfc45yqdc414X6a+x8xG9rnSeKVnw0kXQdlD3Q5HUBgKqiukiPhWj+HunKvFOwK/xcxCZrYQ+BDwxxjN1wNXmVmemaUBNwB7nXPl/Vl0j+ZeCg2HYMuTXTbR4GEi4mfxdoW8AcgEDgD3Adc758rMbJGZhaPa3Qg0AFuAg8D7gQ/3Y73xmbQYsothY9e9Zgqyghyqb6alNf5x4EVEhovUeBo55yqBS2LMXw1kRz2vwOsHP7QCqV63yHV3Ql0lZBUe06QwFMQ5OFTfzIjsge0xIyIy2Pwz/EBncy6FtmZ47cGYi3Uhk4j4mX/DvWQ2jDq5ywua2seX0YVMIuJH/g13M+/ofc96qHj7mMUFoTQAKmsbB7syEZEB599wh26HIxgR8s6z68hdRPzI3+GeNxYmne2Fe6dhFvKzvCN3nXMXET/yd7iDN8571Q7Yva7D7Iy0AKFgQMP+iogv+T/cZ1wMqZkxT80U6CpVEfEp/4d7eg7MuAheWw4tHb881VWqIuJX/g93gDmXQUO1d4/VKAVZOnIXEX9KjnCfvBhCo465BV9hKEiFwl1EfCg5wj2QCrM/Cpuf9IYjiNCRu4j4VXKEOxwdjqDsoSOzRmQHqW1qpaG5dQgLExHpf8kT7qPnQtFJHXrNFESGIKiu04VMIuIvyRPu7cMR7F4HldsAKMnzrlJ98KU9Q1mZiEi/S55wB5jzcbzhCP4MwNnTirhozmh+9ORb/PTpze33gRURGfaSK9zzxsHEs7xeM86RGkjhtstO4ePzx3Hbs1v4t8feUMCLiC8kV7hDZDiC7d5okUAgxfjBR+ZwzZkT+c3z2/nmw6/R1qaAF5HhLfnCfcYHITWjQ5/3lBTj5otP5obFU/jTul18+YGNuv2eiAxryRfuGblw0gegbDm0HO3jbmZ89YKT+Mr503no5Xf47J9eorFFXSRFZHhKvnAHbziC+qpjhiMA+OySqdx88ck8Wbaf6/7wIvVNCngRGX6SM9yn/AOEimDTspiL/3HhJG5dOodVWw5yze/+TrixZZALFBHpm+QM90AqzIoMR1BfFbPJx08bz22XncKGnVVc8Zt1VGv0SBEZRpIz3AHmXgqtTR2GI+jsg3PHcPsVp/LG3sNcdtdaDtbofqsiMjwkb7iPngcjp8PGY2/iEe28mSXcfc18dlbUcemdL/DuofrBqU9EpA+SN9zNvKP33WthzW0des50tmhaEX/41Hs4WNPIx+54gV0VdYNYqIjI8UvecAc47dNw4gXw9Lfh9gWw5Zmum04s5N5rTyfc2MLH7vw/th6oGcRCRUSOT3KHe0YeXH4/XP4AOAf3LoU/XQYVb8dsPmdcPvdft4DWNvj4nWsp23tokAsWEYlPcod7uxPPgxvWwvtugR2r4ddnwLO3QGP4mKbTS3J44DMLyEhN4RN3reWlXbF724iIDCWFe7vUICz8Anz+RZi1FFb/BH45HzZFjuqjTBoZ4s+fWUBhKMgnf7OO257ZwqF6jQkvIolD4d5ZTgl8+A741NOQXQzLPw2/uxDe3dih2biCLP78zws4a+pIfvrMZhb98DmFvIgkDIV7V8a/B65dAR/8BZRvgTvPgUe/CLUVR5qMys3grqvm89fPn8UZk0co5EUkYSjcu5OSAqde5Z2qOf0z8NIf4Benwt//C1qPDkkwa2xelyFf26zhg0Vk8Cnc45GZDxf+AK5f492L9X9vhDvPhu2rOzSLFfI3/q2Onz2zWUfyIjKo4gp3Mys0s4fMrNbMdprZ5d20PdXMVplZ2Mz2m9kX+q/cITZqBlz1CHz8j9BUA7+/CB64Bg51vAdrdMjPKAzws2e2cNYPn1PIi8igiffI/VdAE1AMXAHcbmYzOzcys5HAE8CdwAhgKnDsuLrDmRmc/EH47N9hyTfhrcfhl6d5vWtaOo49M2tsHv9yagaP/ctZnDllhEJeRAZNj+FuZiFgKXCTcy7snHse+AtwZYzmXwKedM7d65xrdM7VOOfe6N+SE0RaJpzzVS/kp/yD1y/+9jNh67PHNJ05Jo87r5yvkBeRQWM93RDazE4B1jjnsqLm3Qic45y7uFPb54BXgdPwjtrXAZ91zu2K8brXAdcBFBcXly5bFnts9Z6Ew2Gys7N7tW5/Kqx4ialb7yKr/l0OjlzA1qmfojGjKGZ9Ow+38pe3m3lxfyuZqXD66FQWjkllan4KZjbotSfKNuyK6usb1dc3iVzfkiVLXnTOzY+50DnX7QQsAvZ1mnctsDJG281ANV64ZwA/x9sxdPsepaWlrrdWrFjR63X7XXODc3/7kXPfK/amv93qVj77VJfNX3un2v3rspfdSd963J3wtb+6s299zv3s6c1uV0XtIBadYNswBtXXN6qvbxK5PmCD6yJXU+PYOYSB3E7zcoFYI2fVAw8559YDmNl3gXIzy3PO+X8gltR0OPtGmHMpPPkNeO77nJY5Gsb/Aqa975jmM8fk8Z+XzuOWS1p44rV9LH9pDz97djM/fWYz75lUyNJTx3Lh7NHkZqQNwS8jIsNZPF+obgZSzWxa1Ly5QFmMtpuA6PM8ydnJO388XPpH+ORywODej8J9l0PVzpjNs9NT+WjpOP507Rk8/7V/4CvnT6e8ppGvPfgqp33/GT5/38useOsALa1tg/t7iMiw1eORu3Ou1syWA7eY2aeBecCHgDNjNP8d8KCZ/Rwv/G8Cnk+Ko/ZYpp7L+tN+zjlpr8KqH8Gv3gNnfckbwyYtI+YqY/Mz+eySqdyweAob9xziwRf38OimvTy6cS9FOelcMm8MHzl1HDNGd/5jSkTkqHi7Qt4AZAIHgPuA651zZWa2yMyODJ3onHsO+AbwWKTtVKDLPvHJwKWkwaIvwefWe2PHr/x3+PXp8NYT3a5nZswbn8/3LpnFum+cyx2fLOWU8fn8bs0OLrxtNRfetprfrN7GgZqGQfpNRGQ4ieecO865SuCSGPNXA9md5t0O3N4fxflK3jj4+O/h7RXw+Ffhvku9sL/gB1A4qdtV01MDXDCrhAtmlVBZ28SjG/ey/KU9fP+xN/j3/32D0yYWcsGsEs6bWcLY/MxB+oVEJJHFFe7Sj6Ysgc+sgXW3w8ofeqdqZi317go1ttS7SKobhaEgV585kavPnMjWAzU88spenizbx3cffZ3vPvo6s8fmcf7MYi6YVcLUUTmD9EuJSKJRuA+F9rHjZ3/Mu7J14zLYeB+UzPFCfvZHIRjq8WWmjsrhy+dN58vnTWfbwTBPlu3nybJ9/Pipzfz4qc1MLgpx/swSzp9ZwtxxeUPSh15EhobCfSjljoEP/ATe+x3YdD+s/y08+i/w1E0w7xMw/1NQdGJcLzW5KJvrF2dz/eIp7DvUwNOv7+OJsn3ctWobt698m9F5GZx3cjHnzyzhPZMKSQ1ozDgRP1O4J4L0HO+Iff6nYNda2HA3rL8b1t0BExd5y076AATi6+9ekpfBlQsmcuWCiVTXNfHsGwd4smwfy9bv5vcv7KQgK41zZ3hBv2jayAH+5URkKCjcE4kZnLDAm87/D3j5D7DhHnjgasgugdKr4dSrIW9s3C+ZnxVkaek4lpaOo66phVWbD/Jk2X6eKtvH/7y4h8y0AFPy4HW2csbkEcwem0eajupFhj2Fe6LKLoJFX4aFX4QtT3tH83+7FVb9GKZf6B3NTzrHu6FInLKCqVwwazQXzBpNc2sba7dV8Mzr+3n21V3c+sRbAISCAeZPLOSMySM4Y3Ihs8fm6RSOyDCkcE90KQGYfoE3VW6HF38HL/83vPlXGDEVSv8Rpp0HI6f12NMmWloghUXTilg0rYgleeXMmr+Av2+vZO22CtZuq+CHT7wJeGF/2qT2sB/BrDG5CnuRYUDhPpwUToL33QKLvwGvP+IdzT/1TW8KjYITzoSJZ8EJC6HopOM6qh+Znc77Z4/m/bNHA1AebmTdNi/sX9hWwQ8e98I+Oz2V0yYWHAn7mQp7kYSkcB+O0jJg7qXeVPE27Hgedq6BHWvg9Ye9NpmFHcO+eNZxh/0H5ozmA3O8sD9Y08i67d5R/QtvV7DirYOAF/Zzx+cxd1w+88bnM29CPqNyYg+tICKDR+E+3I2Y4k2lV4NzUL3TC/mda7zQf/OvXruMPJhwJkxc6IV9yRwIxP/PX5STzkVzxnDRnDEAHKhpYN22StZtr+CV3dXctWobLW3eOHFj8zOZOz7PC/vxBcwam0tWUB81kcGk/3F+YgYFE73plCu8edW7jwb9zjWw+XFvfjAHJpwBJ5zJyION8G4B5E+AjPy4zt2Pysng4rljuHiuF/YNza2U7T3Ey7uqeWV3NRv3VPO/r+4DIJBinFicEwn7POaNL2DqqGwCKbqoSmSgKNz9Ln885F8Gcy/znh/eCzv/72jYb32aWQBlP/CWp+d6Id/V1EX4Z6QFKD2hkNITCo/MKw83snF3NRt3V/Py7moe27SX+/7u3ZQrFAwwZ1w+c8fnM2tsLiePzmXiiBApCnyRfqFwTza5Y7zhDWZ/1HteX8WGZ5Yzf0oRVO86OlXthO2roCnccf3O4V8wEaa/HwpOOOatRmanc+6MYs6dUQxAW5tjR0Utr+yOHN3vrubu57fR3OqdzskKBjipJIeZY/I4eYwX+NNLND6OSG8o3JNdZgHhnClw8uJjlzkH9VUdQz962r4ammrgia97fe5PuRJmXOTdPDyGlBRjclE2k4uy+cip4wBobGll64EwZXsP8/rew7z+7mEefvkd/rjWu7FJikFJyDht38ucPDr3SOiPyE4fqC0i4gsKd+maGWQVetOYeccud84L+U33e33vl38a0vO8vwpO+SSMOaXH8/fpqQFmjslj5pi8qJd17Kmqp2zvIV7fe5hVr25n/fZKHnll75E2JbkZnDwmlxmjczixOIcpRdlMLgrpi1uRCP1PkN4z807HnPNVWHQj7HzeC/lX7vX64I+a6X2xO+dSCMU/ho2ZMb4wi/GFWVwwazSnBt9l8eLFVNU28fq7R4/wX997mL9tPkhr29G7OY7Nz2TKqGymFIWYOiqbKUXZTB2VzYhQUKNiSlJRuEv/SEmBSWd70/t/BK896AX9k9+Ap2/2rrA95UqYcu5xdcGMVhAKsnDqSBZOPbqjaGxpZUd5HW8fDLP1QJi3D3rT+u2V1De3HmmXl5kWCfuOoT+uIEu9dsSXFO7S/zLyYP4/edOBN7yQ37gM3njUGwBt3idg3idh5NQ+v1V6aoDpJTnHfPHa1uZ493CDF/gHwmw96P187s0D/HnDniPtgqkpjC/IZEJhFhMify2Mj3qcna7/IjI86ZMrA2vUDDj/3+Dcm2HLU17Qr/k5PP9TmLAA5l3u3YGqcHKXX8T2RkqKMTY/k7H5mZxzYlGHZdV1Td4R/oFa3j4YZldlHbsq69iwo4qaxpYObUeEgkfCPnoHMGFEFiW5GTrql4SlcJfBkRr0etLMuAhq9nlH8i//N/zl85EGBnnjI1fcTo2apoBr7falj1d+VvCYPvngfZF7qL75SNjvqqxjd+TnK7ureezVdzuc308LeDuQEA08Xr6JsQWZjCvwdihjCzIpyc3QuDsyZBTuMvhySuCsL3q3GtxfBgff9MbIqdjqTZvuh8bDR5qfbalQFgn9kVM7hn+o6LhGw+yOmZGfFSQ/K8iccfnHLG9pbePdQw0dwn9XZR1v7Gzg2TcPUB5u7NA+kGKU5GYwNj8S+lHBPzY/kzH5mWSkBfqldpHOFO4ydMygZJY3RXMOasuPhP2el59jQqjJe771aWhtOto2mOOd4w+GIJgFwWxIy4o8j5rSIss6t0vPgaLpcZ0SSg2kHDknvzBq/sqVK1m8eDENza3sra7nnep69lTV806V9/idqnrWba/k3VfqiTrwB7wLvUry0hmVk0FxbjpFORmMykn3plxv3sjsdN1ARY6bwl0Sj5l3s5LsIjhhAdsOj2fC4sXesrZWOLQ7EvxvQ+U2aKyBplpvaq6D8L7I87rIz3D3p3ZS0mDsqd5YOxMWwPjTvb79xykjLXDkIq1Ymlvb2Heo4Ujgt//cX9PAvkMNbNpziIraRlynHYAZFGYFKcpJpzg3Ev650TsEbwdQlJOufv5yhD4JMrykBI4Ojjb1vfGt45x3tB+9A2gKe+FfXwnvvAg7X4AXfg1rbvPWKZrh3e5wQmTKH9/n0tOijvy70tLaRnm4iQM1DRw43MiBmkb2H27gQE0jB2u8n2/tq+FguLHD+f92oWCAkTnpFGUfDfxweRN7M3dFdgLBIzsDnRLyN4W7+J8ZpKZ7U6wj8pM/5P1srveCftcLXthvegA2/NZbljsuEvZneEMnH+fNUOKVGkihJC+Dkrzux8RvbXNU1no7gfJwEwdrGjlY00h5+OjPtw+GWbu9guq6Zh7a+uoxr5GTkUpRTjojQkEKO0zpFIbSKAx5ywpCQUaEgtoZDDMKd5F2aZnezU0mnuU9b2uF/a/BrrXeSJrbV8GrD3jLMvK9oB93GmPeOQDrtwIW+XLXwFKiHnf+GbUsJQAls70vh4/ji+FAilGU4x2Z9+SZ51Yws/QMymuaOBhuiIT/0R1CZW0TO8rreHFnNVV1TTH/IgBvYLcOO4Es72dBKEh+Vhr5mUEKstLIy0ojP8t7nJkW0JXBQ0ThLtKVlACMnutNp/+zd3qnavvRsN+1FjY/wYkAW/r4XqFRR3csExcd9z1xu5OaYozOy2R0XiaQ123btjZHTUMLFbVe6LdPFZGfVZHHFeEmtuwPU1nb1OFK4M6CgRQv+COBn5/pPS7ICpIX+bl7XwuBLQfJzUgjNzON3IxUcjLSCKbqS+S+ULiLxMvMu9iqcLJ38RVAwyHWrFrBwgULAOftAHDg2qIex/jZ/rilwTsVtON5bypb7r1uaJR316wjYX9iv4V9d1JSjLzI0ffkop7bg3ejlkP1zVTVNVFd1xyZmqiOzDsUmVdV18Suyjo27mmiqq6Zppa2I6/x61f+fszrZqYFyM1MPSb0O85LIycjNWrynmenpxIKpib1/QEU7iJ9kZFHczAfcop7/xols6H0Gi/wK7cdDfodz0PZQ16bUJF3e8T2sC+aPihhH4+MtAAZaQGKc4/v3rkNza1U1TXx7KoXmD57Hofrmznc0Mzh+paOjxu8x+XhJraV10aWtXR5+qidmXeP35z0qNCP2gF4873n2emRZZGfR5+n4Tp3XxomFO4iicLs2HviVm3vGPbtN0DPGhm5H+5ZXs+h0EhvBxAa2a/DOAykjLQAo/MyGZeTwmkTj6/rqXOOuqZWDjc0U9PQEpm8x+FG73G4oYXDkWXhRm9ZZW0TOyvqjrRtjPrroSspBjmrnvJ2FFHB3/48K5hKKBggM5hKKD1AZlqAUHoqmcEAWVGPQ8HIvGBgUK5bULiLJKro00CnXhUJ+x2dwv6RY9cL5kBoRCTsizjxcDO0rvJ2CO07gMgyskb0epTOoWRmhNJTCaWnMrr7rxG61djSSm1jK+GGFmoavR1CuLF9B+H9LHvrbUaUjD2ykwg3tlBV651iqmlooa6xhbrm1mOuT+hOMJBCVroX/lcumMj1i6f0/pfowvD7VxVJVmZQOMmbTr3SC/vD78Dhd6GuHGoPRqbyyHQQqnczomoP7F8BbS2xXzcj3wv5DlNhjHmR+Rn5A9INdCikpwZIT/V6AXVlpdvN4sUzu30d5xwNzW3UNbVQ19QamY59XNvYQn1TK3XNrd5OoamV8YUD85eWwl1kuDKDvHHe1I0XVq5k8TnnQEP10dCP3hHUVUJdhTcdfgf2vertLFoaunjfFMgsPBr2mYWQWQBZBd7PI1Nhx+fBUMJ8T9DfzIzMYIDMYIARQ11MhMJdJBmYHQ3ZkdPiW6ep7mjo11V03AlET9U74d1XvPvtNtd1/XqBYKfw93YAU8rDkLIBMvNjLC/wbsru053CQIor3M2sELgbOA8oB/6fc+5P3bQPAhuBHOdc94cVIpKYglnedDxDLzQ3eCF/ZKrs+Lwu6nn1Ltj7CmNqK2DPw12/pgW8weFiBX9mvjf4WzDkfddwZLC47E6Dx2V7w04nkXiP3H8FNAHFwDzgMTPb6Jwr66L9V4CDQE4Xy0XEj9IyIG005I6Oe5XVK1eyeOEZ3mmj+upOO4cYU+1BKN/stW84FH9tKWmQnh07+NvnpWcf3UlE2o4o3w47Uo/uQNIjbdNCCf3dQ4/hbmYhYCkwyzkXBp43s78AVwJfj9F+EvBJ4EvAf/VvuSLiS2kZkFbijfV/PNpajw4I11QLTVEjhDaFu3gc9bwxDHW7j67XGIaW+g5vMRvgta7qbh9SOjNqaOksb35a5tHHXc7LinxJPrk3W61b1lMHfTM7BVjjnMuKmncjcI5z7uIY7f+KdwqnCvjvrk7LmNl1wHUAxcXFpcuWLevVLxAOh8nOjj3EaiJI9Pog8WtUfX2j+o6PtbWS0tZAaks9gdZ6GsOV5ASNQKv3vH1+oLUh8rORQGsDKW0NkceNMR+nuNi9lXaN/wjbplzdq1qXLFnyonNufsyFzrluJ2ARsK/TvGuBlTHafhh4PPJ4MbCnp9d3zlFaWup6a8WKFb1edzAken3OJX6Nqq9vVF/f9Ft9LU3O1Vc7d2ivc+VbnXt3k3M71zpXsa3XLwlscF3kajzn3MNAbqd5uUBN9IzI6ZtbgffHtcsREUkmgTQI5HlfDg+CeMJ9M5BqZtOcc+1j380FOn+ZOg2YCKyODPEZBPLMbB9whnNuR79ULCIiPeox3J1ztWa2HLjFzD6N11vmQ8CZnZq+BkT3mToT+CVwKl7PGRERGSTx9uO5AcgEDgD3Adc758rMbJGZhQGccy3OuX3tE1AJtEWed3MDSxER6W9x9XN3zlUCl8SYvxqI+TW3c24loAuYRESGQOL2wBcRkV5TuIuI+JDCXUTEhxTuIiI+pHAXEfEhhbuIiA8p3EVEfEjhLiLiQwp3EREfUriLiPiQwl1ExIcU7iIiPqRwFxHxIYW7iIgPKdxFRHxI4S4i4kMKdxERH1K4i4j4kMJdRMSHFO4iIj6kcBcR8SGFu4iIDyncRUR8SOEuIuJDCncRER9SuIuI+JDCXUTEhxTuIiI+pHAXEfEhhbuIiA8p3EVEfEjhLiLiQwp3EREfiivczazQzB4ys1oz22lml3fR7itm9pqZ1ZjZdjP7Sv+WKyIi8UiNs92vgCagGJgHPGZmG51zZZ3aGXAVsAmYAjxlZrudc8v6qV4REYlDj0fuZhYClgI3OefCzrnngb8AV3Zu65y71Tn3knOuxTn3FvAIsLC/ixYRke6Zc677BmanAGucc1lR824EznHOXdzNega8BNzpnLsjxvLrgOsAiouLS5ct693BfTgcJjs7u1frDoZErw8Sv0bV1zeqr28Sub4lS5a86JybH3Ohc67bCVgE7Os071pgZQ/rfRfYCKT39B6lpaWut1asWNHrdQdDotfnXOLXqPr6RvX1TSLXB2xwXeRqPOfcw0Bup3m5QE1XK5jZ5/DOvS9yzjXG8R4iItKP4uktsxlINbNpUfPmAp2/TAXAzP4J+DpwrnNuT99LFBGR49VjuDvnaoHlwC1mFjKzhcCHgD92bmtmVwD/DrzPObetv4sVEZH4xHsR0w1AJnAAuA+43jlXZmaLzCwc1e77wAhgvZmFI9MxX6aKiMjAiqufu3OuErgkxvzVQHbU80n9VpmIiPSahh8QEfEhhbuIiA8p3EVEfEjhLiLiQwp3EREfUriLiPiQwl1ExIcU7iIiPqRwFxHxIYW7iIgPKdxFRHxI4S4i4kMKdxERH1K4i4j4kMJdRMSHFO4iIj6kcBcR8SGFu4iIDyncRUR8SOEuIuJDCncRER9SuIuI+JDCXUTEhxTuIiI+pHAXEfEhhbuIiA8p3EVEfEjhLiLiQwp3EREfUriLiPiQwl1ExIcU7iIiPqRwFxHxIYW7iIgPxRXuZlZoZg+ZWa2Z7TSzy7toZ2b2QzOriEw/NDPr35JFRKQnqXG2+xXQBBQD84DHzGyjc66sU7vrgEuAuYADnga2A3f0R7EiIhKfHo/czSwELAVucs6FnXPPA38BrozR/GrgJ865Pc65d4CfANf0Y70iIhKHeI7cTwRanHObo+ZtBM6J0XZmZFl0u5mxXtTMrsM70gcIm9lbcdQSy0igvJfrDoZErw8Sv0bV1zeqr28Sub4TuloQT7hnA4c7zTsE5HTR9lCndtlmZs45F93QOXcXcFcc798tM9vgnJvf19cZKIleHyR+jaqvb1Rf3yR6fV2J5wvVMJDbaV4uUBNH21wg3DnYRURkYMUT7puBVDObFjVvLtD5y1Qi8+bG0U5ERAZQj+HunKsFlgO3mFnIzBYCHwL+GKP5H4AvmdlYMxsDfBm4px/rjaXPp3YGWKLXB4lfo+rrG9XXN4leX0wWzxkTMysEfgu8D6gAvu6c+5OZLQIed85lR9oZ8EPg05FVfwN8TadlREQGV1zhLiIiw4uGHxAR8SGFu4iIDw2LcE/ksW3MLN3M7o7UVWNmr5jZhV20vcbMWs0sHDUtHsj6Iu+70swaot4z5gVjQ7T9wp2mVjP7RRdtB2X7mdnnzGyDmTWa2T2dlp1rZm+aWZ2ZrTCzLi8iMbOJkTZ1kXXeO5D1mdkZZva0mVWa2UEze8DMRnfzOnF9Lvqxvolm5jr9+93UzesM9va7olNtdZF6S7t4nQHZfv1lWIQ7Hce2uQK43cxiXfkaPbbNHOBi4J8HuLZUYDfeFbt5wLeAP5vZxC7av+Ccy46aVg5wfe0+F/We07toM+jbL3pbACVAPfBAN6sMxvbbC3wfrxPBEWY2Eq/n2E1AIbABuL+b17kPeBkYAXwT+B8zKxqo+oACvJ4dE/GuXKwBftfDa8Xzueiv+trlR73n97p5nUHdfs65ezt9Hm8AtgEvdfNaA7H9+kXCh7sl+Ng2zrla59x3nHM7nHNtzrm/4g2WFnNvn+CGemygpcABYPUgvucxnHPLnXMP4/UMi/YRoMw594BzrgH4DjDXzE7q/BpmdiJwKnCzc67eOfcg8Cre7zgg9TnnHo/Udtg5Vwf8EljY1/frr/qOx1BsvxiuBv4wXHv7JXy40/XYNrGO3OMe22agmFkxXs1dXbx1ipmVm9lmM7vJzOIdmbOv/iPyvmu6OZUx1Nsvnv9MQ7X9oNP2iVwD8jZdfxa3Oeeir+Qe7O15Nj1fRBjP56K/7TSzPWb2u8hfQ7EM6faLnG47G+/ane4MxfaLy3AI934Z22aAauvAzNKAe4HfO+fejNFkFTALGIV3BPIJ4CuDUNrXgMnAWLw/2x81sykx2g3Z9ov8ZzoH+H03zYZq+7XrvH0g/s9id237nZnNAb5N99sn3s9FfykHTsM7ZVSKty3u7aLtkG4/4CpgtXNuezdtBnv7HZfhEO7DYmwbM0vBu2q3CfhcrDbOuW3Oue2R0zevArcAHx3o2pxz65xzNc65Rufc74E1wPtjNB3KsYGuBJ7v7j/TUG2/KH35LHbXtl+Z2VTgceALzrkuT3Edx+eiX0ROq25wzrU45/bj/T85z8xiBfaQbb+Iq+j+QGPQt9/xGg7hnvBj20SObO/G+8J3qXOuOc5VHTAUd6rq6n2HcmygHv8zxTDY26/D9ol8HzSFrj+LkzsF14Bvz8hfQM8A33POxRoipDuDvT3bDxpi5dCQbD8A84ZYGQP8z3GuOlT/n2NK+HAfBmPbANwOzAAuds7Vd9XIzC6MnJMn8iXcTcAjA1mYmeWb2flmlmFmqWZ2Bd65xCdiNB+S7WdmZ+L9adtdL5lB236R7ZQBBIBA+7YDHgJmmdnSyPJvA5tinYKLfEf0CnBzZP0P4/VAenCg6jOzscBzwC+dc93e/ew4Pxf9Vd/pZjbdzFLMbATwc2Clc67z6Zch2X5RTa4GHux0vr/zawzY9us3zrmEn/C6nT0M1AK7gMsj8xfhnTZob2fArUBlZLqVyBALA1jbCXh77Aa8PyXbpyuACZHHEyJtfwzsj/we2/BOK6QNcH1FwHq8P2ergbXA+xJl+0Xe907gjzHmD8n2w+sF4zpN34ksey/wJl6XzZXAxKj17gDuiHo+MdKmHngLeO9A1gfcHHkc/TmM/vf9Bt5YUN1+Lgawvk/g9SSrBd7FO5goSZTtF1mWEdke58ZYb1C2X39NGltGRMSHEv60jIiIHD+Fu4iIDyncRUR8SOEuIuJDCncRER9SuIuI+JDCXUTEhxTuIiI+9P8B8bnJN0YKlI0AAAAASUVORK5CYII=\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "plt.plot(pd.DataFrame(history.history))\n", - "plt.grid(True)\n", - "plt.gca().set_ylim(0, 1)\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 52, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[0.38856646],\n", - " [1.6792021 ],\n", - " [3.1022794 ]], dtype=float32)" - ] - }, - "execution_count": 52, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "y_pred" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 함수형 API" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "모든 신경망 모델이 단순하게 순서대로 나열되지는 않습니다. 어떤 신경망은 매우 복잡한 구조를 가집니다. 여러 개의 입력이 있거나 여러 개의 출력이 있습니다. 예를 들어 와이드 & 딥 신경망([논문](https://ai.google/research/pubs/pub45413) 참조)은 입력의 전체 또는 일부를 출력층에 바로 연결합니다." - ] - }, - { - "cell_type": "code", - "execution_count": 53, - "metadata": {}, - "outputs": [], - "source": [ - "np.random.seed(42)\n", - "tf.random.set_seed(42)" - ] - }, - { - "cell_type": "code", - "execution_count": 54, - "metadata": {}, - "outputs": [], - "source": [ - "input_ = keras.layers.Input(shape=X_train.shape[1:])\n", - "hidden1 = keras.layers.Dense(30, activation=\"relu\")(input_)\n", - "hidden2 = keras.layers.Dense(30, activation=\"relu\")(hidden1)\n", - "concat = keras.layers.concatenate([input_, hidden2])\n", - "output = keras.layers.Dense(1)(concat)\n", - "model = keras.models.Model(inputs=[input_], outputs=[output])" - ] - }, - { - "cell_type": "code", - "execution_count": 55, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Model: \"model\"\n", - "__________________________________________________________________________________________________\n", - "Layer (type) Output Shape Param # Connected to \n", - "==================================================================================================\n", - "input_1 (InputLayer) [(None, 8)] 0 \n", - "__________________________________________________________________________________________________\n", - "dense_5 (Dense) (None, 30) 270 input_1[0][0] \n", - "__________________________________________________________________________________________________\n", - "dense_6 (Dense) (None, 30) 930 dense_5[0][0] \n", - "__________________________________________________________________________________________________\n", - "concatenate (Concatenate) (None, 38) 0 input_1[0][0] \n", - " dense_6[0][0] \n", - "__________________________________________________________________________________________________\n", - "dense_7 (Dense) (None, 1) 39 concatenate[0][0] \n", - "==================================================================================================\n", - "Total params: 1,239\n", - "Trainable params: 1,239\n", - "Non-trainable params: 0\n", - "__________________________________________________________________________________________________\n" - ] - } - ], - "source": [ - "model.summary()" - ] - }, - { - "cell_type": "code", - "execution_count": 56, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch 1/20\n", - "363/363 [==============================] - 1s 3ms/step - loss: 1.9731 - val_loss: 3.3940\n", - "Epoch 2/20\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.7638 - val_loss: 0.9360\n", - "Epoch 3/20\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.6045 - val_loss: 0.5649\n", - "Epoch 4/20\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.5862 - val_loss: 0.5712\n", - "Epoch 5/20\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.5452 - val_loss: 0.5045\n", - "Epoch 6/20\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.5243 - val_loss: 0.4831\n", - "Epoch 7/20\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.5185 - val_loss: 0.4639\n", - "Epoch 8/20\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.4947 - val_loss: 0.4638\n", - "Epoch 9/20\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.4782 - val_loss: 0.4421\n", - "Epoch 10/20\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.4708 - val_loss: 0.4313\n", - "Epoch 11/20\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.4585 - val_loss: 0.4345\n", - "Epoch 12/20\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.4481 - val_loss: 0.4168\n", - "Epoch 13/20\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.4476 - val_loss: 0.4230\n", - "Epoch 14/20\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.4361 - val_loss: 0.4047\n", - "Epoch 15/20\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.4392 - val_loss: 0.4078\n", - "Epoch 16/20\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.4420 - val_loss: 0.3938\n", - "Epoch 17/20\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.4277 - val_loss: 0.3952\n", - "Epoch 18/20\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.4216 - val_loss: 0.3860\n", - "Epoch 19/20\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.4033 - val_loss: 0.3827\n", - "Epoch 20/20\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3939 - val_loss: 0.4054\n", - "162/162 [==============================] - 0s 2ms/step - loss: 0.4032\n" - ] - } - ], - "source": [ - "model.compile(loss=\"mean_squared_error\", optimizer=keras.optimizers.SGD(lr=1e-3))\n", - "history = model.fit(X_train, y_train, epochs=20,\n", - " validation_data=(X_valid, y_valid))\n", - "mse_test = model.evaluate(X_test, y_test)\n", - "y_pred = model.predict(X_new)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "와이드나 딥 경로에 다른 입력 특성을 전달하면 어떻게 될까요? (특성 0에서 4까지) 5개의 특성을 와이드 경로에 보내고 (특성 2에서 7까지) 6개의 특성을 딥 경로에 전달하겠습니다. 3개의 특성(특성 2, 3, 4)은 양쪽에 모두 전달됩니다." - ] - }, - { - "cell_type": "code", - "execution_count": 57, - "metadata": {}, - "outputs": [], - "source": [ - "np.random.seed(42)\n", - "tf.random.set_seed(42)" - ] - }, - { - "cell_type": "code", - "execution_count": 58, - "metadata": {}, - "outputs": [], - "source": [ - "input_A = keras.layers.Input(shape=[5], name=\"wide_input\")\n", - "input_B = keras.layers.Input(shape=[6], name=\"deep_input\")\n", - "hidden1 = keras.layers.Dense(30, activation=\"relu\")(input_B)\n", - "hidden2 = keras.layers.Dense(30, activation=\"relu\")(hidden1)\n", - "concat = keras.layers.concatenate([input_A, hidden2])\n", - "output = keras.layers.Dense(1, name=\"output\")(concat)\n", - "model = keras.models.Model(inputs=[input_A, input_B], outputs=[output])" - ] - }, - { - "cell_type": "code", - "execution_count": 59, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch 1/20\n", - "363/363 [==============================] - 2s 3ms/step - loss: 3.1941 - val_loss: 0.8072\n", - "Epoch 2/20\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.7247 - val_loss: 0.6658\n", - "Epoch 3/20\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.6176 - val_loss: 0.5687\n", - "Epoch 4/20\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.5799 - val_loss: 0.5296\n", - "Epoch 5/20\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.5409 - val_loss: 0.4993\n", - "Epoch 6/20\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.5173 - val_loss: 0.4811\n", - "Epoch 7/20\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.5186 - val_loss: 0.4696\n", - "Epoch 8/20\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.4977 - val_loss: 0.4496\n", - "Epoch 9/20\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.4765 - val_loss: 0.4404\n", - "Epoch 10/20\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.4676 - val_loss: 0.4315\n", - "Epoch 11/20\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.4574 - val_loss: 0.4268\n", - "Epoch 12/20\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.4479 - val_loss: 0.4166\n", - "Epoch 13/20\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.4487 - val_loss: 0.4125\n", - "Epoch 14/20\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.4469 - val_loss: 0.4074\n", - "Epoch 15/20\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.4460 - val_loss: 0.4044\n", - "Epoch 16/20\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.4495 - val_loss: 0.4007\n", - "Epoch 17/20\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.4378 - val_loss: 0.4013\n", - "Epoch 18/20\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.4375 - val_loss: 0.3987\n", - "Epoch 19/20\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.4151 - val_loss: 0.3934\n", - "Epoch 20/20\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.4078 - val_loss: 0.4204\n", - "162/162 [==============================] - 0s 2ms/step - loss: 0.4219\n" - ] - } - ], - "source": [ - "model.compile(loss=\"mse\", optimizer=keras.optimizers.SGD(lr=1e-3))\n", - "\n", - "X_train_A, X_train_B = X_train[:, :5], X_train[:, 2:]\n", - "X_valid_A, X_valid_B = X_valid[:, :5], X_valid[:, 2:]\n", - "X_test_A, X_test_B = X_test[:, :5], X_test[:, 2:]\n", - "X_new_A, X_new_B = X_test_A[:3], X_test_B[:3]\n", - "\n", - "history = model.fit((X_train_A, X_train_B), y_train, epochs=20,\n", - " validation_data=((X_valid_A, X_valid_B), y_valid))\n", - "mse_test = model.evaluate((X_test_A, X_test_B), y_test)\n", - "y_pred = model.predict((X_new_A, X_new_B))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "규제를 위한 보조 출력 추가하기:" - ] - }, - { - "cell_type": "code", - "execution_count": 60, - "metadata": {}, - "outputs": [], - "source": [ - "np.random.seed(42)\n", - "tf.random.set_seed(42)" - ] - }, - { - "cell_type": "code", - "execution_count": 61, - "metadata": {}, - "outputs": [], - "source": [ - "input_A = keras.layers.Input(shape=[5], name=\"wide_input\")\n", - "input_B = keras.layers.Input(shape=[6], name=\"deep_input\")\n", - "hidden1 = keras.layers.Dense(30, activation=\"relu\")(input_B)\n", - "hidden2 = keras.layers.Dense(30, activation=\"relu\")(hidden1)\n", - "concat = keras.layers.concatenate([input_A, hidden2])\n", - "output = keras.layers.Dense(1, name=\"main_output\")(concat)\n", - "aux_output = keras.layers.Dense(1, name=\"aux_output\")(hidden2)\n", - "model = keras.models.Model(inputs=[input_A, input_B],\n", - " outputs=[output, aux_output])" - ] - }, - { - "cell_type": "code", - "execution_count": 62, - "metadata": {}, - "outputs": [], - "source": [ - "model.compile(loss=[\"mse\", \"mse\"], loss_weights=[0.9, 0.1], optimizer=keras.optimizers.SGD(lr=1e-3))" - ] - }, - { - "cell_type": "code", - "execution_count": 63, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch 1/20\n", - "363/363 [==============================] - 2s 5ms/step - loss: 3.4633 - main_output_loss: 3.3289 - aux_output_loss: 4.6732 - val_loss: 1.6233 - val_main_output_loss: 0.8468 - val_aux_output_loss: 8.6117\n", - "Epoch 2/20\n", - "363/363 [==============================] - 1s 4ms/step - loss: 0.9807 - main_output_loss: 0.7503 - aux_output_loss: 3.0537 - val_loss: 1.5163 - val_main_output_loss: 0.6836 - val_aux_output_loss: 9.0109\n", - "Epoch 3/20\n", - "363/363 [==============================] - 1s 4ms/step - loss: 0.7742 - main_output_loss: 0.6290 - aux_output_loss: 2.0810 - val_loss: 1.4639 - val_main_output_loss: 0.6229 - val_aux_output_loss: 9.0326\n", - "Epoch 4/20\n", - "363/363 [==============================] - 1s 4ms/step - loss: 0.6952 - main_output_loss: 0.5897 - aux_output_loss: 1.6449 - val_loss: 1.3388 - val_main_output_loss: 0.5481 - val_aux_output_loss: 8.4552\n", - "Epoch 5/20\n", - "363/363 [==============================] - 1s 4ms/step - loss: 0.6469 - main_output_loss: 0.5508 - aux_output_loss: 1.5118 - val_loss: 1.2177 - val_main_output_loss: 0.5194 - val_aux_output_loss: 7.5030\n", - "Epoch 6/20\n", - "363/363 [==============================] - 1s 4ms/step - loss: 0.6120 - main_output_loss: 0.5251 - aux_output_loss: 1.3943 - val_loss: 1.0935 - val_main_output_loss: 0.5106 - val_aux_output_loss: 6.3396\n", - "Epoch 7/20\n", - "363/363 [==============================] - 1s 4ms/step - loss: 0.6114 - main_output_loss: 0.5256 - aux_output_loss: 1.3833 - val_loss: 0.9918 - val_main_output_loss: 0.5115 - val_aux_output_loss: 5.3151\n", - "Epoch 8/20\n", - "363/363 [==============================] - 1s 4ms/step - loss: 0.5765 - main_output_loss: 0.5024 - aux_output_loss: 1.2439 - val_loss: 0.8733 - val_main_output_loss: 0.4733 - val_aux_output_loss: 4.4740\n", - "Epoch 9/20\n", - "363/363 [==============================] - 1s 4ms/step - loss: 0.5535 - main_output_loss: 0.4811 - aux_output_loss: 1.2057 - val_loss: 0.7832 - val_main_output_loss: 0.4555 - val_aux_output_loss: 3.7323\n", - "Epoch 10/20\n", - "363/363 [==============================] - 1s 4ms/step - loss: 0.5456 - main_output_loss: 0.4708 - aux_output_loss: 1.2189 - val_loss: 0.7170 - val_main_output_loss: 0.4604 - val_aux_output_loss: 3.0262\n", - "Epoch 11/20\n", - "363/363 [==============================] - 1s 4ms/step - loss: 0.5297 - main_output_loss: 0.4587 - aux_output_loss: 1.1684 - val_loss: 0.6510 - val_main_output_loss: 0.4293 - val_aux_output_loss: 2.6468\n", - "Epoch 12/20\n", - "363/363 [==============================] - 1s 4ms/step - loss: 0.5181 - main_output_loss: 0.4501 - aux_output_loss: 1.1305 - val_loss: 0.6051 - val_main_output_loss: 0.4310 - val_aux_output_loss: 2.1722\n", - "Epoch 13/20\n", - "363/363 [==============================] - 1s 4ms/step - loss: 0.5100 - main_output_loss: 0.4487 - aux_output_loss: 1.0620 - val_loss: 0.5644 - val_main_output_loss: 0.4161 - val_aux_output_loss: 1.8992\n", - "Epoch 14/20\n", - "363/363 [==============================] - 1s 4ms/step - loss: 0.5064 - main_output_loss: 0.4459 - aux_output_loss: 1.0503 - val_loss: 0.5354 - val_main_output_loss: 0.4119 - val_aux_output_loss: 1.6466\n", - "Epoch 15/20\n", - "363/363 [==============================] - 1s 4ms/step - loss: 0.5027 - main_output_loss: 0.4452 - aux_output_loss: 1.0207 - val_loss: 0.5124 - val_main_output_loss: 0.4047 - val_aux_output_loss: 1.4812\n", - "Epoch 16/20\n", - "363/363 [==============================] - 1s 4ms/step - loss: 0.5057 - main_output_loss: 0.4480 - aux_output_loss: 1.0249 - val_loss: 0.4934 - val_main_output_loss: 0.4034 - val_aux_output_loss: 1.3035\n", - "Epoch 17/20\n", - "363/363 [==============================] - 1s 4ms/step - loss: 0.4931 - main_output_loss: 0.4360 - aux_output_loss: 1.0075 - val_loss: 0.4801 - val_main_output_loss: 0.3984 - val_aux_output_loss: 1.2150\n", - "Epoch 18/20\n", - "363/363 [==============================] - 1s 4ms/step - loss: 0.4922 - main_output_loss: 0.4352 - aux_output_loss: 1.0053 - val_loss: 0.4694 - val_main_output_loss: 0.3962 - val_aux_output_loss: 1.1279\n", - "Epoch 19/20\n", - "363/363 [==============================] - 1s 4ms/step - loss: 0.4658 - main_output_loss: 0.4139 - aux_output_loss: 0.9323 - val_loss: 0.4580 - val_main_output_loss: 0.3936 - val_aux_output_loss: 1.0372\n", - "Epoch 20/20\n", - "363/363 [==============================] - 1s 4ms/step - loss: 0.4589 - main_output_loss: 0.4072 - aux_output_loss: 0.9243 - val_loss: 0.4655 - val_main_output_loss: 0.4048 - val_aux_output_loss: 1.0118\n" - ] - } - ], - "source": [ - "history = model.fit([X_train_A, X_train_B], [y_train, y_train], epochs=20,\n", - " validation_data=([X_valid_A, X_valid_B], [y_valid, y_valid]))" - ] - }, - { - "cell_type": "code", - "execution_count": 64, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "162/162 [==============================] - 0s 2ms/step - loss: 0.4668 - main_output_loss: 0.4178 - aux_output_loss: 0.9082\n", - "WARNING:tensorflow:5 out of the last 6 calls to .predict_function at 0x7fe3c2269c10> triggered tf.function retracing. Tracing is expensive and the excessive number of tracings could be due to (1) creating @tf.function repeatedly in a loop, (2) passing tensors with different shapes, (3) passing Python objects instead of tensors. For (1), please define your @tf.function outside of the loop. For (2), @tf.function has experimental_relax_shapes=True option that relaxes argument shapes that can avoid unnecessary retracing. For (3), please refer to https://www.tensorflow.org/guide/function#controlling_retracing and https://www.tensorflow.org/api_docs/python/tf/function for more details.\n" - ] - } - ], - "source": [ - "total_loss, main_loss, aux_loss = model.evaluate(\n", - " [X_test_A, X_test_B], [y_test, y_test])\n", - "y_pred_main, y_pred_aux = model.predict([X_new_A, X_new_B])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 서브클래싱 API" - ] - }, - { - "cell_type": "code", - "execution_count": 65, - "metadata": {}, - "outputs": [], - "source": [ - "class WideAndDeepModel(keras.models.Model):\n", - " def __init__(self, units=30, activation=\"relu\", **kwargs):\n", - " super().__init__(**kwargs)\n", - " self.hidden1 = keras.layers.Dense(units, activation=activation)\n", - " self.hidden2 = keras.layers.Dense(units, activation=activation)\n", - " self.main_output = keras.layers.Dense(1)\n", - " self.aux_output = keras.layers.Dense(1)\n", - " \n", - " def call(self, inputs):\n", - " input_A, input_B = inputs\n", - " hidden1 = self.hidden1(input_B)\n", - " hidden2 = self.hidden2(hidden1)\n", - " concat = keras.layers.concatenate([input_A, hidden2])\n", - " main_output = self.main_output(concat)\n", - " aux_output = self.aux_output(hidden2)\n", - " return main_output, aux_output\n", - "\n", - "model = WideAndDeepModel(30, activation=\"relu\")" - ] - }, - { - "cell_type": "code", - "execution_count": 66, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch 1/10\n", - "363/363 [==============================] - 2s 5ms/step - loss: 3.3855 - output_1_loss: 3.3304 - output_2_loss: 3.8821 - val_loss: 2.1435 - val_output_1_loss: 1.1581 - val_output_2_loss: 11.0117\n", - "Epoch 2/10\n", - "363/363 [==============================] - 1s 4ms/step - loss: 1.0790 - output_1_loss: 0.9329 - output_2_loss: 2.3942 - val_loss: 1.7567 - val_output_1_loss: 0.8205 - val_output_2_loss: 10.1825\n", - "Epoch 3/10\n", - "363/363 [==============================] - 1s 4ms/step - loss: 0.8644 - output_1_loss: 0.7583 - output_2_loss: 1.8194 - val_loss: 1.5664 - val_output_1_loss: 0.7913 - val_output_2_loss: 8.5419\n", - "Epoch 4/10\n", - "363/363 [==============================] - 2s 4ms/step - loss: 0.7850 - output_1_loss: 0.6979 - output_2_loss: 1.5689 - val_loss: 1.3088 - val_output_1_loss: 0.6549 - val_output_2_loss: 7.1933\n", - "Epoch 5/10\n", - "363/363 [==============================] - 1s 4ms/step - loss: 0.7294 - output_1_loss: 0.6499 - output_2_loss: 1.4452 - val_loss: 1.1357 - val_output_1_loss: 0.5964 - val_output_2_loss: 5.9898\n", - "Epoch 6/10\n", - "363/363 [==============================] - 1s 4ms/step - loss: 0.6880 - output_1_loss: 0.6092 - output_2_loss: 1.3974 - val_loss: 1.0036 - val_output_1_loss: 0.5937 - val_output_2_loss: 4.6933\n", - "Epoch 7/10\n", - "363/363 [==============================] - 1s 4ms/step - loss: 0.6918 - output_1_loss: 0.6143 - output_2_loss: 1.3899 - val_loss: 0.8904 - val_output_1_loss: 0.5591 - val_output_2_loss: 3.8714\n", - "Epoch 8/10\n", - "363/363 [==============================] - 2s 4ms/step - loss: 0.6504 - output_1_loss: 0.5805 - output_2_loss: 1.2797 - val_loss: 0.8009 - val_output_1_loss: 0.5243 - val_output_2_loss: 3.2903\n", - "Epoch 9/10\n", - "363/363 [==============================] - 1s 4ms/step - loss: 0.6270 - output_1_loss: 0.5574 - output_2_loss: 1.2533 - val_loss: 0.7357 - val_output_1_loss: 0.5144 - val_output_2_loss: 2.7275\n", - "Epoch 10/10\n", - "363/363 [==============================] - 1s 4ms/step - loss: 0.6160 - output_1_loss: 0.5456 - output_2_loss: 1.2495 - val_loss: 0.6849 - val_output_1_loss: 0.5014 - val_output_2_loss: 2.3370\n", - "162/162 [==============================] - 0s 2ms/step - loss: 0.5841 - output_1_loss: 0.5188 - output_2_loss: 1.1722\n", - "WARNING:tensorflow:6 out of the last 7 calls to .predict_function at 0x7fe464d2d5e0> triggered tf.function retracing. Tracing is expensive and the excessive number of tracings could be due to (1) creating @tf.function repeatedly in a loop, (2) passing tensors with different shapes, (3) passing Python objects instead of tensors. For (1), please define your @tf.function outside of the loop. For (2), @tf.function has experimental_relax_shapes=True option that relaxes argument shapes that can avoid unnecessary retracing. For (3), please refer to https://www.tensorflow.org/guide/function#controlling_retracing and https://www.tensorflow.org/api_docs/python/tf/function for more details.\n" - ] - } - ], - "source": [ - "model.compile(loss=\"mse\", loss_weights=[0.9, 0.1], optimizer=keras.optimizers.SGD(lr=1e-3))\n", - "history = model.fit((X_train_A, X_train_B), (y_train, y_train), epochs=10,\n", - " validation_data=((X_valid_A, X_valid_B), (y_valid, y_valid)))\n", - "total_loss, main_loss, aux_loss = model.evaluate((X_test_A, X_test_B), (y_test, y_test))\n", - "y_pred_main, y_pred_aux = model.predict((X_new_A, X_new_B))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 저장과 복원" - ] - }, - { - "cell_type": "code", - "execution_count": 68, - "metadata": {}, - "outputs": [], - "source": [ - "np.random.seed(42)\n", - "tf.random.set_seed(42)" - ] - }, - { - "cell_type": "code", - "execution_count": 69, - "metadata": {}, - "outputs": [], - "source": [ - "model = keras.models.Sequential([\n", - " keras.layers.Dense(30, activation=\"relu\", input_shape=[8]),\n", - " keras.layers.Dense(30, activation=\"relu\"),\n", - " keras.layers.Dense(1)\n", - "]) " - ] - }, - { - "cell_type": "code", - "execution_count": 70, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch 1/10\n", - "363/363 [==============================] - 1s 3ms/step - loss: 3.3697 - val_loss: 0.7126\n", - "Epoch 2/10\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.6964 - val_loss: 0.6880\n", - "Epoch 3/10\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.6167 - val_loss: 0.5803\n", - "Epoch 4/10\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.5846 - val_loss: 0.5166\n", - "Epoch 5/10\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.5321 - val_loss: 0.4895\n", - "Epoch 6/10\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.5083 - val_loss: 0.4951\n", - "Epoch 7/10\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.5044 - val_loss: 0.4861\n", - "Epoch 8/10\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.4813 - val_loss: 0.4554\n", - "Epoch 9/10\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.4627 - val_loss: 0.4413\n", - "Epoch 10/10\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.4549 - val_loss: 0.4379\n", - "162/162 [==============================] - 0s 2ms/step - loss: 0.4382\n" - ] - } - ], - "source": [ - "model.compile(loss=\"mse\", optimizer=keras.optimizers.SGD(lr=1e-3))\n", - "history = model.fit(X_train, y_train, epochs=10, validation_data=(X_valid, y_valid))\n", - "mse_test = model.evaluate(X_test, y_test)" - ] - }, - { - "cell_type": "code", - "execution_count": 71, - "metadata": {}, - "outputs": [], - "source": [ - "model.save(\"my_keras_model.h5\")" - ] - }, - { - "cell_type": "code", - "execution_count": 72, - "metadata": {}, - "outputs": [], - "source": [ - "model = keras.models.load_model(\"my_keras_model.h5\")" - ] - }, - { - "cell_type": "code", - "execution_count": 73, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "WARNING:tensorflow:7 out of the last 8 calls to .predict_function at 0x7fe464d20700> triggered tf.function retracing. Tracing is expensive and the excessive number of tracings could be due to (1) creating @tf.function repeatedly in a loop, (2) passing tensors with different shapes, (3) passing Python objects instead of tensors. For (1), please define your @tf.function outside of the loop. For (2), @tf.function has experimental_relax_shapes=True option that relaxes argument shapes that can avoid unnecessary retracing. For (3), please refer to https://www.tensorflow.org/guide/function#controlling_retracing and https://www.tensorflow.org/api_docs/python/tf/function for more details.\n" - ] - }, - { - "data": { - "text/plain": [ - "array([[0.5400236],\n", - " [1.6505969],\n", - " [3.0098238]], dtype=float32)" - ] - }, - "execution_count": 73, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "model.predict(X_new)" - ] - }, - { - "cell_type": "code", - "execution_count": 74, - "metadata": {}, - "outputs": [], - "source": [ - "model.save_weights(\"my_keras_weights.ckpt\")" - ] - }, - { - "cell_type": "code", - "execution_count": 75, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 75, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "model.load_weights(\"my_keras_weights.ckpt\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 훈련 과정에서 콜백 사용하기" - ] - }, - { - "cell_type": "code", - "execution_count": 76, - "metadata": {}, - "outputs": [], - "source": [ - "keras.backend.clear_session()\n", - "np.random.seed(42)\n", - "tf.random.set_seed(42)" - ] - }, - { - "cell_type": "code", - "execution_count": 77, - "metadata": {}, - "outputs": [], - "source": [ - "model = keras.models.Sequential([\n", - " keras.layers.Dense(30, activation=\"relu\", input_shape=[8]),\n", - " keras.layers.Dense(30, activation=\"relu\"),\n", - " keras.layers.Dense(1)\n", - "]) " - ] - }, - { - "cell_type": "code", - "execution_count": 78, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch 1/10\n", - "363/363 [==============================] - 1s 3ms/step - loss: 3.3697 - val_loss: 0.7126\n", - "Epoch 2/10\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.6964 - val_loss: 0.6880\n", - "Epoch 3/10\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.6167 - val_loss: 0.5803\n", - "Epoch 4/10\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.5846 - val_loss: 0.5166\n", - "Epoch 5/10\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.5321 - val_loss: 0.4895\n", - "Epoch 6/10\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.5083 - val_loss: 0.4951\n", - "Epoch 7/10\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.5044 - val_loss: 0.4861\n", - "Epoch 8/10\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.4813 - val_loss: 0.4554\n", - "Epoch 9/10\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.4627 - val_loss: 0.4413\n", - "Epoch 10/10\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.4549 - val_loss: 0.4379\n", - "162/162 [==============================] - 0s 2ms/step - loss: 0.4382\n" - ] - } - ], - "source": [ - "model.compile(loss=\"mse\", optimizer=keras.optimizers.SGD(lr=1e-3))\n", - "checkpoint_cb = keras.callbacks.ModelCheckpoint(\"my_keras_model.h5\", save_best_only=True)\n", - "history = model.fit(X_train, y_train, epochs=10,\n", - " validation_data=(X_valid, y_valid),\n", - " callbacks=[checkpoint_cb])\n", - "model = keras.models.load_model(\"my_keras_model.h5\") # 최상의 모델로 롤백\n", - "mse_test = model.evaluate(X_test, y_test)" - ] - }, - { - "cell_type": "code", - "execution_count": 79, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch 1/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.4578 - val_loss: 0.4110\n", - "Epoch 2/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.4430 - val_loss: 0.4266\n", - "Epoch 3/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.4376 - val_loss: 0.3996\n", - "Epoch 4/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.4361 - val_loss: 0.3939\n", - "Epoch 5/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.4204 - val_loss: 0.3889\n", - "Epoch 6/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.4112 - val_loss: 0.3866\n", - "Epoch 7/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.4226 - val_loss: 0.3860\n", - "Epoch 8/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.4135 - val_loss: 0.3793\n", - "Epoch 9/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.4039 - val_loss: 0.3746\n", - "Epoch 10/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.4023 - val_loss: 0.3723\n", - "Epoch 11/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3950 - val_loss: 0.3697\n", - "Epoch 12/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3912 - val_loss: 0.3669\n", - "Epoch 13/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3939 - val_loss: 0.3661\n", - "Epoch 14/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3868 - val_loss: 0.3631\n", - "Epoch 15/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3878 - val_loss: 0.3660\n", - "Epoch 16/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3935 - val_loss: 0.3625\n", - "Epoch 17/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3817 - val_loss: 0.3592\n", - "Epoch 18/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3801 - val_loss: 0.3563\n", - "Epoch 19/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3679 - val_loss: 0.3535\n", - "Epoch 20/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3624 - val_loss: 0.3709\n", - "Epoch 21/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3746 - val_loss: 0.3512\n", - "Epoch 22/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3605 - val_loss: 0.3699\n", - "Epoch 23/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3822 - val_loss: 0.3476\n", - "Epoch 24/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3626 - val_loss: 0.3561\n", - "Epoch 25/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3610 - val_loss: 0.3527\n", - "Epoch 26/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3626 - val_loss: 0.3701\n", - "Epoch 27/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3685 - val_loss: 0.3432\n", - "Epoch 28/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3684 - val_loss: 0.3592\n", - "Epoch 29/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3581 - val_loss: 0.3521\n", - "Epoch 30/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3687 - val_loss: 0.3626\n", - "Epoch 31/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3613 - val_loss: 0.3431\n", - "Epoch 32/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3555 - val_loss: 0.3766\n", - "Epoch 33/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3620 - val_loss: 0.3374\n", - "Epoch 34/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3502 - val_loss: 0.3407\n", - "Epoch 35/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3471 - val_loss: 0.3614\n", - "Epoch 36/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3451 - val_loss: 0.3348\n", - "Epoch 37/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3780 - val_loss: 0.3573\n", - "Epoch 38/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3474 - val_loss: 0.3367\n", - "Epoch 39/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3689 - val_loss: 0.3425\n", - "Epoch 40/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3485 - val_loss: 0.3369\n", - "Epoch 41/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3674 - val_loss: 0.3515\n", - "Epoch 42/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3471 - val_loss: 0.3426\n", - "Epoch 43/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3545 - val_loss: 0.3678\n", - "Epoch 44/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3407 - val_loss: 0.3563\n", - "Epoch 45/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3554 - val_loss: 0.3336\n", - "Epoch 46/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3499 - val_loss: 0.3456\n", - "Epoch 47/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3623 - val_loss: 0.3433\n", - "Epoch 48/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3401 - val_loss: 0.3658\n", - "Epoch 49/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3528 - val_loss: 0.3286\n", - "Epoch 50/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3560 - val_loss: 0.3268\n", - "Epoch 51/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3483 - val_loss: 0.3438\n", - "Epoch 52/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3405 - val_loss: 0.3263\n", - "Epoch 53/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3468 - val_loss: 0.3909\n", - "Epoch 54/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3337 - val_loss: 0.3275\n", - "Epoch 55/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3462 - val_loss: 0.3560\n", - "Epoch 56/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3342 - val_loss: 0.3237\n", - "Epoch 57/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3395 - val_loss: 0.3242\n", - "Epoch 58/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3315 - val_loss: 0.3765\n", - "Epoch 59/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3394 - val_loss: 0.3289\n", - "Epoch 60/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3377 - val_loss: 0.3502\n", - "Epoch 61/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3522 - val_loss: 0.3456\n", - "Epoch 62/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3473 - val_loss: 0.3444\n", - "Epoch 63/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3427 - val_loss: 0.3291\n", - "Epoch 64/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3212 - val_loss: 0.3217\n", - "Epoch 65/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3374 - val_loss: 0.3351\n", - "Epoch 66/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3323 - val_loss: 0.3232\n", - "Epoch 67/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3470 - val_loss: 0.3568\n", - "Epoch 68/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3316 - val_loss: 0.3256\n", - "Epoch 69/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3354 - val_loss: 0.3349\n", - "Epoch 70/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3316 - val_loss: 0.3560\n", - "Epoch 71/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3371 - val_loss: 0.3581\n", - "Epoch 72/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3201 - val_loss: 0.3287\n", - "Epoch 73/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3373 - val_loss: 0.3203\n", - "Epoch 74/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3327 - val_loss: 0.3841\n", - "Epoch 75/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3268 - val_loss: 0.3233\n", - "Epoch 76/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3322 - val_loss: 0.3476\n", - "Epoch 77/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3224 - val_loss: 0.3408\n", - "Epoch 78/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3331 - val_loss: 0.3462\n", - "Epoch 79/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3310 - val_loss: 0.3347\n", - "Epoch 80/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3323 - val_loss: 0.3354\n", - "Epoch 81/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3297 - val_loss: 0.3275\n", - "Epoch 82/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3441 - val_loss: 0.3166\n", - "Epoch 83/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3369 - val_loss: 0.3278\n", - "Epoch 84/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3182 - val_loss: 0.3635\n", - "Epoch 85/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3235 - val_loss: 0.3174\n", - "Epoch 86/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3184 - val_loss: 0.3156\n", - "Epoch 87/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3395 - val_loss: 0.3526\n", - "Epoch 88/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3264 - val_loss: 0.3257\n", - "Epoch 89/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3210 - val_loss: 0.3630\n", - "Epoch 90/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3192 - val_loss: 0.3381\n", - "Epoch 91/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3237 - val_loss: 0.3211\n", - "Epoch 92/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3281 - val_loss: 0.3457\n", - "Epoch 93/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3424 - val_loss: 0.3158\n", - "Epoch 94/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3209 - val_loss: 0.3410\n", - "Epoch 95/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3230 - val_loss: 0.3379\n", - "Epoch 96/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3341 - val_loss: 0.3217\n", - "162/162 [==============================] - 0s 1ms/step - loss: 0.3310\n" - ] - } - ], - "source": [ - "model.compile(loss=\"mse\", optimizer=keras.optimizers.SGD(lr=1e-3))\n", - "early_stopping_cb = keras.callbacks.EarlyStopping(patience=10,\n", - " restore_best_weights=True)\n", - "history = model.fit(X_train, y_train, epochs=100,\n", - " validation_data=(X_valid, y_valid),\n", - " callbacks=[checkpoint_cb, early_stopping_cb])\n", - "mse_test = model.evaluate(X_test, y_test)" - ] - }, - { - "cell_type": "code", - "execution_count": 80, - "metadata": {}, - "outputs": [], - "source": [ - "class PrintValTrainRatioCallback(keras.callbacks.Callback):\n", - " def on_epoch_end(self, epoch, logs):\n", - " print(\"\\nval/train: {:.2f}\".format(logs[\"val_loss\"] / logs[\"loss\"]))" - ] - }, - { - "cell_type": "code", - "execution_count": 81, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "363/363 [==============================] - 1s 3ms/step - loss: 0.3302 - val_loss: 0.3556\n", - "\n", - "val/train: 1.08\n" - ] - } - ], - "source": [ - "val_train_ratio_cb = PrintValTrainRatioCallback()\n", - "history = model.fit(X_train, y_train, epochs=1,\n", - " validation_data=(X_valid, y_valid),\n", - " callbacks=[val_train_ratio_cb])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 텐서보드" - ] - }, - { - "cell_type": "code", - "execution_count": 82, - "metadata": {}, - "outputs": [], - "source": [ - "root_logdir = os.path.join(os.curdir, \"my_logs\")" - ] - }, - { - "cell_type": "code", - "execution_count": 83, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'./my_logs/run_2021_02_18-03_57_36'" - ] - }, - "execution_count": 83, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "def get_run_logdir():\n", - " import time\n", - " run_id = time.strftime(\"run_%Y_%m_%d-%H_%M_%S\")\n", - " return os.path.join(root_logdir, run_id)\n", - "\n", - "run_logdir = get_run_logdir()\n", - "run_logdir" - ] - }, - { - "cell_type": "code", - "execution_count": 84, - "metadata": {}, - "outputs": [], - "source": [ - "keras.backend.clear_session()\n", - "np.random.seed(42)\n", - "tf.random.set_seed(42)" - ] - }, - { - "cell_type": "code", - "execution_count": 85, - "metadata": {}, - "outputs": [], - "source": [ - "model = keras.models.Sequential([\n", - " keras.layers.Dense(30, activation=\"relu\", input_shape=[8]),\n", - " keras.layers.Dense(30, activation=\"relu\"),\n", - " keras.layers.Dense(1)\n", - "]) \n", - "model.compile(loss=\"mse\", optimizer=keras.optimizers.SGD(lr=1e-3))" - ] - }, - { - "cell_type": "code", - "execution_count": 86, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch 1/30\n", - "363/363 [==============================] - 2s 5ms/step - loss: 3.3697 - val_loss: 0.7126\n", - "Epoch 2/30\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.6964 - val_loss: 0.6880\n", - "Epoch 3/30\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.6167 - val_loss: 0.5803\n", - "Epoch 4/30\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.5846 - val_loss: 0.5166\n", - "Epoch 5/30\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.5321 - val_loss: 0.4895\n", - "Epoch 6/30\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.5083 - val_loss: 0.4951\n", - "Epoch 7/30\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.5044 - val_loss: 0.4861\n", - "Epoch 8/30\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.4813 - val_loss: 0.4554\n", - "Epoch 9/30\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.4627 - val_loss: 0.4413\n", - "Epoch 10/30\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.4549 - val_loss: 0.4379\n", - "Epoch 11/30\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.4416 - val_loss: 0.4396\n", - "Epoch 12/30\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.4295 - val_loss: 0.4507\n", - "Epoch 13/30\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.4326 - val_loss: 0.3997\n", - "Epoch 14/30\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.4207 - val_loss: 0.3956\n", - "Epoch 15/30\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.4198 - val_loss: 0.3916\n", - "Epoch 16/30\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.4248 - val_loss: 0.3937\n", - "Epoch 17/30\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.4105 - val_loss: 0.3809\n", - "Epoch 18/30\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.4070 - val_loss: 0.3793\n", - "Epoch 19/30\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3902 - val_loss: 0.3850\n", - "Epoch 20/30\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3864 - val_loss: 0.3809\n", - "Epoch 21/30\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3978 - val_loss: 0.3701\n", - "Epoch 22/30\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3816 - val_loss: 0.3781\n", - "Epoch 23/30\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.4042 - val_loss: 0.3650\n", - "Epoch 24/30\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3823 - val_loss: 0.3655\n", - "Epoch 25/30\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3792 - val_loss: 0.3611\n", - "Epoch 26/30\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3800 - val_loss: 0.3626\n", - "Epoch 27/30\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3858 - val_loss: 0.3564\n", - "Epoch 28/30\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3839 - val_loss: 0.3579\n", - "Epoch 29/30\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3736 - val_loss: 0.3561\n", - "Epoch 30/30\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3843 - val_loss: 0.3548\n" - ] - } - ], - "source": [ - "tensorboard_cb = keras.callbacks.TensorBoard(run_logdir)\n", - "history = model.fit(X_train, y_train, epochs=30,\n", - " validation_data=(X_valid, y_valid),\n", - " callbacks=[checkpoint_cb, tensorboard_cb])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "텐서보드 서버를 실행하는 한 가지 방법은 터미널에서 직접 실행하는 것입니다. 터미널을 열고 텐서보드가 설치된 가상 환경을 활성화합니다. 그다음 노트북 디렉토리로 이동하여 다음 명령을 입력하세요:\n", - "\n", - "```bash\n", - "$ tensorboard --logdir=./my_logs --port=6006\n", - "```\n", - "\n", - "그다음 웹 브라우저를 열고 [localhost:6006](http://localhost:6006)에 접속하면 텐서보드를 사용할 수 있습니다. 사용이 끝나면 터미널에서 Ctrl-C를 눌러 텐서보드 서버를 종료하세요.\n", - "\n", - "또는 다음처럼 텐서보드의 주피터 확장을 사용할 수 있습니다(이 명령은 텐서보드가 로컬 컴퓨터에 설치되어 있어야 합니다):" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%load_ext tensorboard\n", - "%tensorboard --logdir=./my_logs --port=6006" - ] - }, - { - "cell_type": "code", - "execution_count": 88, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'./my_logs/run_2021_02_18-03_58_12'" - ] - }, - "execution_count": 88, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "run_logdir2 = get_run_logdir()\n", - "run_logdir2" - ] - }, - { - "cell_type": "code", - "execution_count": 89, - "metadata": {}, - "outputs": [], - "source": [ - "keras.backend.clear_session()\n", - "np.random.seed(42)\n", - "tf.random.set_seed(42)" - ] - }, - { - "cell_type": "code", - "execution_count": 90, - "metadata": {}, - "outputs": [], - "source": [ - "model = keras.models.Sequential([\n", - " keras.layers.Dense(30, activation=\"relu\", input_shape=[8]),\n", - " keras.layers.Dense(30, activation=\"relu\"),\n", - " keras.layers.Dense(1)\n", - "]) \n", - "model.compile(loss=\"mse\", optimizer=keras.optimizers.SGD(lr=0.05))" - ] - }, - { - "cell_type": "code", - "execution_count": 91, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch 1/30\n", - "363/363 [==============================] - 2s 5ms/step - loss: 0.7645 - val_loss: 302.8527\n", - "Epoch 2/30\n", - "363/363 [==============================] - 1s 3ms/step - loss: nan - val_loss: nan\n", - "Epoch 3/30\n", - "363/363 [==============================] - 1s 3ms/step - loss: nan - val_loss: nan\n", - "Epoch 4/30\n", - "363/363 [==============================] - 1s 3ms/step - loss: nan - val_loss: nan\n", - "Epoch 5/30\n", - "363/363 [==============================] - 1s 3ms/step - loss: nan - val_loss: nan\n", - "Epoch 6/30\n", - "363/363 [==============================] - 1s 3ms/step - loss: nan - val_loss: nan\n", - "Epoch 7/30\n", - "363/363 [==============================] - 1s 3ms/step - loss: nan - val_loss: nan\n", - "Epoch 8/30\n", - "363/363 [==============================] - 1s 3ms/step - loss: nan - val_loss: nan\n", - "Epoch 9/30\n", - "363/363 [==============================] - 1s 3ms/step - loss: nan - val_loss: nan\n", - "Epoch 10/30\n", - "363/363 [==============================] - 1s 3ms/step - loss: nan - val_loss: nan\n", - "Epoch 11/30\n", - "363/363 [==============================] - 1s 3ms/step - loss: nan - val_loss: nan\n", - "Epoch 12/30\n", - "363/363 [==============================] - 1s 3ms/step - loss: nan - val_loss: nan\n", - "Epoch 13/30\n", - "363/363 [==============================] - 1s 3ms/step - loss: nan - val_loss: nan\n", - "Epoch 14/30\n", - "363/363 [==============================] - 1s 3ms/step - loss: nan - val_loss: nan\n", - "Epoch 15/30\n", - "363/363 [==============================] - 1s 3ms/step - loss: nan - val_loss: nan\n", - "Epoch 16/30\n", - "363/363 [==============================] - 1s 3ms/step - loss: nan - val_loss: nan\n", - "Epoch 17/30\n", - "363/363 [==============================] - 1s 3ms/step - loss: nan - val_loss: nan\n", - "Epoch 18/30\n", - "363/363 [==============================] - 1s 3ms/step - loss: nan - val_loss: nan\n", - "Epoch 19/30\n", - "363/363 [==============================] - 1s 3ms/step - loss: nan - val_loss: nan\n", - "Epoch 20/30\n", - "363/363 [==============================] - 1s 3ms/step - loss: nan - val_loss: nan\n", - "Epoch 21/30\n", - "363/363 [==============================] - 1s 3ms/step - loss: nan - val_loss: nan\n", - "Epoch 22/30\n", - "363/363 [==============================] - 1s 3ms/step - loss: nan - val_loss: nan\n", - "Epoch 23/30\n", - "363/363 [==============================] - 1s 3ms/step - loss: nan - val_loss: nan\n", - "Epoch 24/30\n", - "363/363 [==============================] - 1s 3ms/step - loss: nan - val_loss: nan\n", - "Epoch 25/30\n", - "363/363 [==============================] - 1s 3ms/step - loss: nan - val_loss: nan\n", - "Epoch 26/30\n", - "363/363 [==============================] - 1s 3ms/step - loss: nan - val_loss: nan\n", - "Epoch 27/30\n", - "363/363 [==============================] - 1s 3ms/step - loss: nan - val_loss: nan\n", - "Epoch 28/30\n", - "363/363 [==============================] - 1s 3ms/step - loss: nan - val_loss: nan\n", - "Epoch 29/30\n", - "363/363 [==============================] - 1s 3ms/step - loss: nan - val_loss: nan\n", - "Epoch 30/30\n", - "363/363 [==============================] - 1s 3ms/step - loss: nan - val_loss: nan\n" - ] - } - ], - "source": [ - "tensorboard_cb = keras.callbacks.TensorBoard(run_logdir2)\n", - "history = model.fit(X_train, y_train, epochs=30,\n", - " validation_data=(X_valid, y_valid),\n", - " callbacks=[checkpoint_cb, tensorboard_cb])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "텐서보드에 실행 결과가 2개 있습니다. 학습 곡선을 비교해 보세요." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "사용할 수 있는 로깅 옵션을 확인해 보죠:" - ] - }, - { - "cell_type": "code", - "execution_count": 92, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Help on function __init__ in module tensorflow.python.keras.callbacks:\n", - "\n", - "__init__(self, log_dir='logs', histogram_freq=0, write_graph=True, write_images=False, update_freq='epoch', profile_batch=2, embeddings_freq=0, embeddings_metadata=None, **kwargs)\n", - " Initialize self. See help(type(self)) for accurate signature.\n", - "\n" - ] - } - ], - "source": [ - "help(keras.callbacks.TensorBoard.__init__)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 하이퍼파라미터 튜닝" - ] - }, - { - "cell_type": "code", - "execution_count": 93, - "metadata": {}, - "outputs": [], - "source": [ - "keras.backend.clear_session()\n", - "np.random.seed(42)\n", - "tf.random.set_seed(42)" - ] - }, - { - "cell_type": "code", - "execution_count": 94, - "metadata": {}, - "outputs": [], - "source": [ - "def build_model(n_hidden=1, n_neurons=30, learning_rate=3e-3, input_shape=[8]):\n", - " model = keras.models.Sequential()\n", - " model.add(keras.layers.InputLayer(input_shape=input_shape))\n", - " for layer in range(n_hidden):\n", - " model.add(keras.layers.Dense(n_neurons, activation=\"relu\"))\n", - " model.add(keras.layers.Dense(1))\n", - " optimizer = keras.optimizers.SGD(lr=learning_rate)\n", - " model.compile(loss=\"mse\", optimizer=optimizer)\n", - " return model" - ] - }, - { - "cell_type": "code", - "execution_count": 95, - "metadata": {}, - "outputs": [], - "source": [ - "keras_reg = keras.wrappers.scikit_learn.KerasRegressor(build_model)" - ] - }, - { - "cell_type": "code", - "execution_count": 96, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch 1/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 1.5673 - val_loss: 20.7721\n", - "Epoch 2/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 1.3216 - val_loss: 5.0266\n", - "Epoch 3/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.5972 - val_loss: 0.5490\n", - "Epoch 4/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.4985 - val_loss: 0.4529\n", - "Epoch 5/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.4608 - val_loss: 0.4188\n", - "Epoch 6/100\n", - "363/363 [==============================] - 1s 2ms/step - loss: 0.4410 - val_loss: 0.4129\n", - "Epoch 7/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.4463 - val_loss: 0.4004\n", - "Epoch 8/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.4283 - val_loss: 0.3944\n", - "Epoch 9/100\n", - "363/363 [==============================] - 1s 2ms/step - loss: 0.4139 - val_loss: 0.3961\n", - "Epoch 10/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.4107 - val_loss: 0.4071\n", - "Epoch 11/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3992 - val_loss: 0.3855\n", - "Epoch 12/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3982 - val_loss: 0.4136\n", - "Epoch 13/100\n", - "363/363 [==============================] - 1s 2ms/step - loss: 0.3983 - val_loss: 0.3997\n", - "Epoch 14/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3910 - val_loss: 0.3818\n", - "Epoch 15/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3948 - val_loss: 0.3829\n", - "Epoch 16/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3981 - val_loss: 0.3739\n", - "Epoch 17/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3821 - val_loss: 0.4022\n", - "Epoch 18/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3851 - val_loss: 0.3873\n", - "Epoch 19/100\n", - "363/363 [==============================] - 1s 2ms/step - loss: 0.3753 - val_loss: 0.3768\n", - "Epoch 20/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3634 - val_loss: 0.4191\n", - "Epoch 21/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3787 - val_loss: 0.3927\n", - "Epoch 22/100\n", - "363/363 [==============================] - 1s 2ms/step - loss: 0.3628 - val_loss: 0.4237\n", - "Epoch 23/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3892 - val_loss: 0.3523\n", - "Epoch 24/100\n", - "363/363 [==============================] - 1s 2ms/step - loss: 0.3676 - val_loss: 0.3842\n", - "Epoch 25/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3677 - val_loss: 0.4162\n", - "Epoch 26/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3690 - val_loss: 0.3980\n", - "Epoch 27/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3731 - val_loss: 0.3474\n", - "Epoch 28/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3725 - val_loss: 0.3920\n", - "Epoch 29/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3660 - val_loss: 0.3566\n", - "Epoch 30/100\n", - "363/363 [==============================] - 1s 2ms/step - loss: 0.3700 - val_loss: 0.4191\n", - "Epoch 31/100\n", - "363/363 [==============================] - 1s 2ms/step - loss: 0.3635 - val_loss: 0.3721\n", - "Epoch 32/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3628 - val_loss: 0.3948\n", - "Epoch 33/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3647 - val_loss: 0.3423\n", - "Epoch 34/100\n", - "363/363 [==============================] - 1s 2ms/step - loss: 0.3547 - val_loss: 0.3453\n", - "Epoch 35/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3496 - val_loss: 0.4068\n", - "Epoch 36/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3476 - val_loss: 0.3417\n", - "Epoch 37/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3786 - val_loss: 0.3787\n", - "Epoch 38/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3540 - val_loss: 0.3379\n", - "Epoch 39/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3769 - val_loss: 0.3419\n", - "Epoch 40/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3522 - val_loss: 0.3705\n", - "Epoch 41/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3705 - val_loss: 0.3659\n", - "Epoch 42/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3545 - val_loss: 0.3803\n", - "Epoch 43/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3597 - val_loss: 0.3765\n", - "Epoch 44/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3443 - val_loss: 0.3813\n", - "Epoch 45/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3591 - val_loss: 0.3326\n", - "Epoch 46/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3528 - val_loss: 0.3385\n", - "Epoch 47/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3663 - val_loss: 0.3655\n", - "Epoch 48/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3479 - val_loss: 0.3579\n", - "Epoch 49/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3601 - val_loss: 0.3360\n", - "Epoch 50/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3616 - val_loss: 0.3317\n", - "Epoch 51/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3532 - val_loss: 0.3562\n", - "Epoch 52/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3427 - val_loss: 0.3521\n", - "Epoch 53/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3503 - val_loss: 0.4579\n", - "Epoch 54/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3402 - val_loss: 0.3809\n", - "Epoch 55/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3496 - val_loss: 0.3540\n", - "Epoch 56/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3401 - val_loss: 0.3725\n", - "Epoch 57/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3440 - val_loss: 0.3337\n", - "Epoch 58/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3347 - val_loss: 0.4011\n", - "Epoch 59/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3445 - val_loss: 0.3263\n", - "Epoch 60/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3414 - val_loss: 0.3271\n", - "Epoch 61/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3623 - val_loss: 0.3349\n", - "Epoch 62/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3497 - val_loss: 0.3541\n", - "Epoch 63/100\n", - "363/363 [==============================] - 1s 2ms/step - loss: 0.3485 - val_loss: 0.3428\n", - "Epoch 64/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3300 - val_loss: 0.3280\n", - "Epoch 65/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3410 - val_loss: 0.3292\n", - "Epoch 66/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3364 - val_loss: 0.3301\n", - "Epoch 67/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3559 - val_loss: 0.3254\n", - "Epoch 68/100\n", - "363/363 [==============================] - 1s 2ms/step - loss: 0.3372 - val_loss: 0.3245\n", - "Epoch 69/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3394 - val_loss: 0.3255\n", - "Epoch 70/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3350 - val_loss: 0.3666\n", - "Epoch 71/100\n", - "363/363 [==============================] - 1s 2ms/step - loss: 0.3428 - val_loss: 0.3370\n", - "Epoch 72/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3261 - val_loss: 0.3267\n", - "Epoch 73/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3409 - val_loss: 0.3245\n", - "Epoch 74/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3394 - val_loss: 0.3663\n", - "Epoch 75/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3286 - val_loss: 0.3290\n", - "Epoch 76/100\n", - "363/363 [==============================] - 1s 2ms/step - loss: 0.3391 - val_loss: 0.3235\n", - "Epoch 77/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3293 - val_loss: 0.3386\n", - "Epoch 78/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3372 - val_loss: 0.3362\n", - "Epoch 79/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3366 - val_loss: 0.3222\n", - "Epoch 80/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3375 - val_loss: 0.3644\n", - "Epoch 81/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3381 - val_loss: 0.3420\n", - "Epoch 82/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3481 - val_loss: 0.3253\n", - "Epoch 83/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3443 - val_loss: 0.3246\n", - "Epoch 84/100\n", - "363/363 [==============================] - 1s 2ms/step - loss: 0.3237 - val_loss: 0.3953\n", - "Epoch 85/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3305 - val_loss: 0.3415\n", - "Epoch 86/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3268 - val_loss: 0.3190\n", - "Epoch 87/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3481 - val_loss: 0.3277\n", - "Epoch 88/100\n", - "363/363 [==============================] - 1s 2ms/step - loss: 0.3299 - val_loss: 0.3295\n", - "Epoch 89/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3285 - val_loss: 0.3247\n", - "Epoch 90/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3239 - val_loss: 0.3281\n", - "Epoch 91/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3290 - val_loss: 0.3201\n", - "Epoch 92/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3342 - val_loss: 0.3393\n", - "Epoch 93/100\n", - "363/363 [==============================] - 1s 2ms/step - loss: 0.3487 - val_loss: 0.3170\n", - "Epoch 94/100\n", - "363/363 [==============================] - 1s 2ms/step - loss: 0.3258 - val_loss: 0.3526\n", - "Epoch 95/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3275 - val_loss: 0.4813\n", - "Epoch 96/100\n", - "363/363 [==============================] - 1s 2ms/step - loss: 0.3416 - val_loss: 0.3465\n", - "Epoch 97/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3247 - val_loss: 0.4632\n", - "Epoch 98/100\n", - "363/363 [==============================] - 1s 2ms/step - loss: 0.3271 - val_loss: 0.6725\n", - "Epoch 99/100\n", - "363/363 [==============================] - 1s 2ms/step - loss: 0.3193 - val_loss: 0.5924\n", - "Epoch 100/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3442 - val_loss: 0.5272\n" - ] - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 96, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "keras_reg.fit(X_train, y_train, epochs=100,\n", - " validation_data=(X_valid, y_valid),\n", - " callbacks=[keras.callbacks.EarlyStopping(patience=10)])" - ] - }, - { - "cell_type": "code", - "execution_count": 97, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "162/162 [==============================] - 0s 1ms/step - loss: 0.3346\n" - ] - } - ], - "source": [ - "mse_test = keras_reg.score(X_test, y_test)" - ] - }, - { - "cell_type": "code", - "execution_count": 98, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "WARNING:tensorflow:8 out of the last 9 calls to .predict_function at 0x7fe464d20430> triggered tf.function retracing. Tracing is expensive and the excessive number of tracings could be due to (1) creating @tf.function repeatedly in a loop, (2) passing tensors with different shapes, (3) passing Python objects instead of tensors. For (1), please define your @tf.function outside of the loop. For (2), @tf.function has experimental_relax_shapes=True option that relaxes argument shapes that can avoid unnecessary retracing. For (3), please refer to https://www.tensorflow.org/guide/function#controlling_retracing and https://www.tensorflow.org/api_docs/python/tf/function for more details.\n" - ] - } - ], - "source": [ - "y_pred = keras_reg.predict(X_new)" - ] - }, - { - "cell_type": "code", - "execution_count": 99, - "metadata": {}, - "outputs": [], - "source": [ - "np.random.seed(42)\n", - "tf.random.set_seed(42)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**경고**: 다음 셀은 훈련이 끝날 때 에러가 납니다. 이는 최근 사이킷런의 변화때문에 생긴 [케라스 이슈 #13586](https://github.com/keras-team/keras/issues/13586) 때문입니다. 이 이슈를 해결하기 위한 [풀 리퀘스트 #13598](https://github.com/keras-team/keras/pull/13598)가 있으므로 곧 해결될 것 같습니다. 그때까지는 `.tolist()`와 `.rvs(1000).tolist()`를 추가해 사용합니다." - ] - }, - { - "cell_type": "code", - "execution_count": 100, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Fitting 3 folds for each of 10 candidates, totalling 30 fits\n", - "Epoch 1/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 1.3827 - val_loss: 0.4703\n", - "Epoch 2/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4880 - val_loss: 0.4247\n", - "Epoch 3/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4541 - val_loss: 0.4052\n", - "Epoch 4/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4518 - val_loss: 0.3975\n", - "Epoch 5/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4337 - val_loss: 0.3991\n", - "Epoch 6/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4263 - val_loss: 0.4031\n", - "Epoch 7/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4385 - val_loss: 0.4043\n", - "Epoch 8/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4301 - val_loss: 0.3929\n", - "Epoch 9/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4108 - val_loss: 0.4040\n", - "Epoch 10/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4200 - val_loss: 0.3886\n", - "Epoch 11/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4099 - val_loss: 0.3999\n", - "Epoch 12/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3897 - val_loss: 0.4085\n", - "Epoch 13/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4265 - val_loss: 0.3922\n", - "Epoch 14/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4108 - val_loss: 0.3918\n", - "Epoch 15/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4070 - val_loss: 0.3886\n", - "Epoch 16/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4032 - val_loss: 0.3933\n", - "Epoch 17/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4212 - val_loss: 0.3907\n", - "Epoch 18/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4241 - val_loss: 0.3955\n", - "Epoch 19/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4040 - val_loss: 0.3935\n", - "Epoch 20/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4146 - val_loss: 0.3891\n", - "121/121 [==============================] - 0s 1ms/step - loss: 0.4251\n", - "[CV] END learning_rate=0.022174573948353458, n_hidden=1, n_neurons=4; total time= 14.5s\n", - "Epoch 1/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 1.3852 - val_loss: 0.4860\n", - "Epoch 2/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4722 - val_loss: 0.4280\n", - "Epoch 3/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4384 - val_loss: 0.5791\n", - "Epoch 4/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4422 - val_loss: 0.4549\n", - "Epoch 5/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4527 - val_loss: 0.5250\n", - "Epoch 6/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4474 - val_loss: 0.5486\n", - "Epoch 7/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4246 - val_loss: 0.5871\n", - "Epoch 8/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4382 - val_loss: 0.4759\n", - "Epoch 9/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4299 - val_loss: 0.7523\n", - "Epoch 10/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4390 - val_loss: 0.7478\n", - "Epoch 11/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4395 - val_loss: 0.8981\n", - "Epoch 12/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4234 - val_loss: 0.8543\n", - "121/121 [==============================] - 0s 1ms/step - loss: 0.4537\n", - "[CV] END learning_rate=0.022174573948353458, n_hidden=1, n_neurons=4; total time= 9.1s\n", - "Epoch 1/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 13.5522 - val_loss: 4.2506\n", - "Epoch 2/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 1.2460 - val_loss: 0.5794\n", - "Epoch 3/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5520 - val_loss: 0.4357\n", - "Epoch 4/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4507 - val_loss: 0.4169\n", - "Epoch 5/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4365 - val_loss: 0.4135\n", - "Epoch 6/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4283 - val_loss: 0.4206\n", - "Epoch 7/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4420 - val_loss: 0.4100\n", - "Epoch 8/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4636 - val_loss: 0.4155\n", - "Epoch 9/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4411 - val_loss: 0.4111\n", - "Epoch 10/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4840 - val_loss: 0.4076\n", - "Epoch 11/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4626 - val_loss: 0.4062\n", - "Epoch 12/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4326 - val_loss: 0.4078\n", - "Epoch 13/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4226 - val_loss: 0.4160\n", - "Epoch 14/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4260 - val_loss: 0.4158\n", - "Epoch 15/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4551 - val_loss: 0.4137\n", - "Epoch 16/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4552 - val_loss: 0.4069\n", - "Epoch 17/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4343 - val_loss: 0.4119\n", - "Epoch 18/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4453 - val_loss: 0.4149\n", - "Epoch 19/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4530 - val_loss: 0.4081\n", - "Epoch 20/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4502 - val_loss: 0.4141\n", - "Epoch 21/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4420 - val_loss: 0.4100\n", - "121/121 [==============================] - 0s 1ms/step - loss: 0.4473\n", - "[CV] END learning_rate=0.022174573948353458, n_hidden=1, n_neurons=4; total time= 15.2s\n", - "Epoch 1/100\n", - "242/242 [==============================] - 1s 4ms/step - loss: 1.7737 - val_loss: 6.2480\n", - "Epoch 2/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5899 - val_loss: 5.2166\n", - "Epoch 3/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5147 - val_loss: 0.4474\n", - "Epoch 4/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4477 - val_loss: 0.3901\n", - "Epoch 5/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3980 - val_loss: 0.3736\n", - "Epoch 6/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3757 - val_loss: 0.3803\n", - "Epoch 7/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3701 - val_loss: 0.3813\n", - "Epoch 8/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3632 - val_loss: 0.3961\n", - "Epoch 9/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3512 - val_loss: 0.3988\n", - "Epoch 10/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3532 - val_loss: 0.3891\n", - "Epoch 11/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3358 - val_loss: 0.3870\n", - "Epoch 12/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3252 - val_loss: 0.3769\n", - "Epoch 13/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3499 - val_loss: 0.3770\n", - "Epoch 14/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3382 - val_loss: 0.3848\n", - "Epoch 15/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3331 - val_loss: 0.3768\n", - "121/121 [==============================] - 0s 2ms/step - loss: 0.3560\n", - "[CV] END learning_rate=0.005432590230265343, n_hidden=2, n_neurons=94; total time= 12.3s\n", - "Epoch 1/100\n", - "242/242 [==============================] - 1s 4ms/step - loss: 1.5396 - val_loss: 3.5738\n", - "Epoch 2/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5129 - val_loss: 0.7767\n", - "Epoch 3/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4283 - val_loss: 0.5515\n", - "Epoch 4/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4097 - val_loss: 0.5335\n", - "Epoch 5/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3926 - val_loss: 0.5336\n", - "Epoch 6/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3760 - val_loss: 0.6750\n", - "Epoch 7/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3580 - val_loss: 0.8462\n", - "Epoch 8/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3622 - val_loss: 0.8724\n", - "Epoch 9/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3518 - val_loss: 0.9645\n", - "Epoch 10/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3560 - val_loss: 0.7225\n", - "Epoch 11/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3517 - val_loss: 0.7257\n", - "Epoch 12/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3367 - val_loss: 0.7217\n", - "Epoch 13/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3334 - val_loss: 0.8443\n", - "Epoch 14/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3244 - val_loss: 0.7065\n", - "121/121 [==============================] - 0s 2ms/step - loss: 0.3650\n", - "[CV] END learning_rate=0.005432590230265343, n_hidden=2, n_neurons=94; total time= 11.2s\n", - "Epoch 1/100\n", - "242/242 [==============================] - 1s 4ms/step - loss: 1.7832 - val_loss: 2.9433\n", - "Epoch 2/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5594 - val_loss: 4.2557\n", - "Epoch 3/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4797 - val_loss: 2.8526\n", - "Epoch 4/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4774 - val_loss: 1.6798\n", - "Epoch 5/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3983 - val_loss: 0.4322\n", - "Epoch 6/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3736 - val_loss: 0.4172\n", - "Epoch 7/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3719 - val_loss: 0.3769\n", - "Epoch 8/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3883 - val_loss: 0.3688\n", - "Epoch 9/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3652 - val_loss: 0.4032\n", - "Epoch 10/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3587 - val_loss: 0.3418\n", - "Epoch 11/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3769 - val_loss: 0.4452\n", - "Epoch 12/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3487 - val_loss: 0.3454\n", - "Epoch 13/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3258 - val_loss: 0.3395\n", - "Epoch 14/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3368 - val_loss: 0.4354\n", - "Epoch 15/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3603 - val_loss: 0.3386\n", - "Epoch 16/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3421 - val_loss: 0.4038\n", - "Epoch 17/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3297 - val_loss: 0.3302\n", - "Epoch 18/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3386 - val_loss: 0.3580\n", - "Epoch 19/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3523 - val_loss: 0.3548\n", - "Epoch 20/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3401 - val_loss: 0.3459\n", - "Epoch 21/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3327 - val_loss: 0.3245\n", - "Epoch 22/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3455 - val_loss: 0.3260\n", - "Epoch 23/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3303 - val_loss: 0.3445\n", - "Epoch 24/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3216 - val_loss: 0.3377\n", - "Epoch 25/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3195 - val_loss: 0.3640\n", - "Epoch 26/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3208 - val_loss: 0.3894\n", - "Epoch 27/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3391 - val_loss: 0.3138\n", - "Epoch 28/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3305 - val_loss: 0.3209\n", - "Epoch 29/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3258 - val_loss: 0.4365\n", - "Epoch 30/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3205 - val_loss: 0.3187\n", - "Epoch 31/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3090 - val_loss: 0.3129\n", - "Epoch 32/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3293 - val_loss: 0.4281\n", - "Epoch 33/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3194 - val_loss: 0.3119\n", - "Epoch 34/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3036 - val_loss: 0.4097\n", - "Epoch 35/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3112 - val_loss: 0.4407\n", - "Epoch 36/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3006 - val_loss: 0.7385\n", - "Epoch 37/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3118 - val_loss: 0.9241\n", - "Epoch 38/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3431 - val_loss: 1.1616\n", - "Epoch 39/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3236 - val_loss: 0.4656\n", - "Epoch 40/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3125 - val_loss: 0.4625\n", - "Epoch 41/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2932 - val_loss: 0.3106\n", - "Epoch 42/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2970 - val_loss: 0.3872\n", - "Epoch 43/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3146 - val_loss: 0.3662\n", - "Epoch 44/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3172 - val_loss: 0.3582\n", - "Epoch 45/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2979 - val_loss: 0.3030\n", - "Epoch 46/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2958 - val_loss: 0.3514\n", - "Epoch 47/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3001 - val_loss: 0.3438\n", - "Epoch 48/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2952 - val_loss: 0.3045\n", - "Epoch 49/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3021 - val_loss: 0.3236\n", - "Epoch 50/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2985 - val_loss: 0.3084\n", - "Epoch 51/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3032 - val_loss: 0.3239\n", - "Epoch 52/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2905 - val_loss: 0.2964\n", - "Epoch 53/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2970 - val_loss: 0.3372\n", - "Epoch 54/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2937 - val_loss: 0.3702\n", - "Epoch 55/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2931 - val_loss: 0.4208\n", - "Epoch 56/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2984 - val_loss: 0.5161\n", - "Epoch 57/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2967 - val_loss: 0.2969\n", - "Epoch 58/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2978 - val_loss: 0.3632\n", - "Epoch 59/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2961 - val_loss: 0.3283\n", - "Epoch 60/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2967 - val_loss: 0.4492\n", - "Epoch 61/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3014 - val_loss: 0.5778\n", - "Epoch 62/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2953 - val_loss: 0.6387\n", - "121/121 [==============================] - 0s 2ms/step - loss: 0.3059\n", - "[CV] END learning_rate=0.005432590230265343, n_hidden=2, n_neurons=94; total time= 47.5s\n", - "Epoch 1/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 5.2328 - val_loss: 13.3699\n", - "Epoch 2/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 2.4156 - val_loss: 10.8972\n", - "Epoch 3/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 1.4953 - val_loss: 7.7330\n", - "Epoch 4/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 1.1092 - val_loss: 5.0744\n", - "Epoch 5/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.8935 - val_loss: 3.2363\n", - "Epoch 6/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.8194 - val_loss: 2.1597\n", - "Epoch 7/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.7802 - val_loss: 1.4840\n", - "Epoch 8/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.7285 - val_loss: 1.1083\n", - "Epoch 9/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.6921 - val_loss: 0.8942\n", - "Epoch 10/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.6951 - val_loss: 0.7687\n", - "Epoch 11/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.6599 - val_loss: 0.6947\n", - "Epoch 12/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.6237 - val_loss: 0.6524\n", - "Epoch 13/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.6619 - val_loss: 0.6234\n", - "Epoch 14/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.6487 - val_loss: 0.6061\n", - "Epoch 15/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.6429 - val_loss: 0.5933\n", - "Epoch 16/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.6103 - val_loss: 0.5819\n", - "Epoch 17/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.6492 - val_loss: 0.5733\n", - "Epoch 18/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.6227 - val_loss: 0.5650\n", - "Epoch 19/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.6024 - val_loss: 0.5578\n", - "Epoch 20/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5992 - val_loss: 0.5508\n", - "Epoch 21/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5874 - val_loss: 0.5446\n", - "Epoch 22/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5653 - val_loss: 0.5384\n", - "Epoch 23/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5863 - val_loss: 0.5326\n", - "Epoch 24/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5639 - val_loss: 0.5266\n", - "Epoch 25/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5689 - val_loss: 0.5214\n", - "Epoch 26/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5438 - val_loss: 0.5166\n", - "Epoch 27/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5653 - val_loss: 0.5116\n", - "Epoch 28/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5540 - val_loss: 0.5076\n", - "Epoch 29/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5635 - val_loss: 0.5035\n", - "Epoch 30/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5438 - val_loss: 0.4989\n", - "Epoch 31/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5203 - val_loss: 0.4946\n", - "Epoch 32/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5238 - val_loss: 0.4915\n", - "Epoch 33/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5159 - val_loss: 0.4883\n", - "Epoch 34/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5200 - val_loss: 0.4856\n", - "Epoch 35/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5080 - val_loss: 0.4828\n", - "Epoch 36/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4939 - val_loss: 0.4789\n", - "Epoch 37/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5136 - val_loss: 0.4780\n", - "Epoch 38/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4794 - val_loss: 0.4742\n", - "Epoch 39/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5037 - val_loss: 0.4729\n", - "Epoch 40/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4797 - val_loss: 0.4714\n", - "Epoch 41/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4870 - val_loss: 0.4686\n", - "Epoch 42/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5008 - val_loss: 0.4666\n", - "Epoch 43/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4892 - val_loss: 0.4646\n", - "Epoch 44/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4786 - val_loss: 0.4636\n", - "Epoch 45/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4812 - val_loss: 0.4616\n", - "Epoch 46/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4710 - val_loss: 0.4582\n", - "Epoch 47/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4787 - val_loss: 0.4581\n", - "Epoch 48/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4574 - val_loss: 0.4573\n", - "Epoch 49/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4752 - val_loss: 0.4560\n", - "Epoch 50/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4641 - val_loss: 0.4544\n", - "Epoch 51/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4536 - val_loss: 0.4525\n", - "Epoch 52/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4800 - val_loss: 0.4527\n", - "Epoch 53/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4622 - val_loss: 0.4522\n", - "Epoch 54/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4648 - val_loss: 0.4509\n", - "Epoch 55/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4387 - val_loss: 0.4509\n", - "Epoch 56/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4897 - val_loss: 0.4513\n", - "Epoch 57/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4494 - val_loss: 0.4496\n", - "Epoch 58/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4645 - val_loss: 0.4510\n", - "Epoch 59/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4580 - val_loss: 0.4502\n", - "Epoch 60/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4393 - val_loss: 0.4478\n", - "Epoch 61/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4271 - val_loss: 0.4485\n", - "Epoch 62/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4362 - val_loss: 0.4488\n", - "Epoch 63/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4499 - val_loss: 0.4477\n", - "Epoch 64/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4377 - val_loss: 0.4497\n", - "Epoch 65/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4153 - val_loss: 0.4512\n", - "Epoch 66/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4718 - val_loss: 0.4484\n", - "Epoch 67/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4375 - val_loss: 0.4483\n", - "Epoch 68/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4390 - val_loss: 0.4494\n", - "Epoch 69/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4460 - val_loss: 0.4492\n", - "Epoch 70/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4546 - val_loss: 0.4476\n", - "Epoch 71/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4346 - val_loss: 0.4481\n", - "Epoch 72/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4486 - val_loss: 0.4503\n", - "Epoch 73/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4463 - val_loss: 0.4486\n", - "Epoch 74/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4312 - val_loss: 0.4491\n", - "Epoch 75/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4328 - val_loss: 0.4496\n", - "Epoch 76/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4235 - val_loss: 0.4483\n", - "Epoch 77/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4181 - val_loss: 0.4474\n", - "Epoch 78/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4187 - val_loss: 0.4490\n", - "Epoch 79/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4158 - val_loss: 0.4495\n", - "Epoch 80/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4270 - val_loss: 0.4468\n", - "Epoch 81/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3977 - val_loss: 0.4492\n", - "Epoch 82/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4071 - val_loss: 0.4525\n", - "Epoch 83/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3911 - val_loss: 0.4504\n", - "Epoch 84/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4320 - val_loss: 0.4525\n", - "Epoch 85/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4206 - val_loss: 0.4495\n", - "Epoch 86/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3961 - val_loss: 0.4548\n", - "Epoch 87/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4143 - val_loss: 0.4512\n", - "Epoch 88/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4150 - val_loss: 0.4481\n", - "Epoch 89/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4045 - val_loss: 0.4472\n", - "Epoch 90/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3976 - val_loss: 0.4506\n", - "121/121 [==============================] - 0s 1ms/step - loss: 0.4209\n", - "[CV] END learning_rate=0.00037078874137762145, n_hidden=1, n_neurons=51; total time= 1.0min\n", - "Epoch 1/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 4.4546 - val_loss: 7.5238\n", - "Epoch 2/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 1.7950 - val_loss: 8.6120\n", - "Epoch 3/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 1.1115 - val_loss: 8.4896\n", - "Epoch 4/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.9287 - val_loss: 7.7423\n", - "Epoch 5/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.8253 - val_loss: 6.8202\n", - "Epoch 6/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.7837 - val_loss: 5.9344\n", - "Epoch 7/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.7711 - val_loss: 5.1492\n", - "Epoch 8/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.7292 - val_loss: 4.4548\n", - "Epoch 9/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.7279 - val_loss: 3.9122\n", - "Epoch 10/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.7055 - val_loss: 3.4233\n", - "Epoch 11/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.6956 - val_loss: 2.9997\n", - "Epoch 12/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.6640 - val_loss: 2.6082\n", - "Epoch 13/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.6539 - val_loss: 2.2766\n", - "Epoch 14/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.6447 - val_loss: 1.9984\n", - "Epoch 15/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.6831 - val_loss: 1.7447\n", - "Epoch 16/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.6364 - val_loss: 1.5300\n", - "Epoch 17/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.6425 - val_loss: 1.3410\n", - "Epoch 18/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.6340 - val_loss: 1.1762\n", - "Epoch 19/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.6140 - val_loss: 1.0345\n", - "Epoch 20/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.6101 - val_loss: 0.9174\n", - "Epoch 21/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5938 - val_loss: 0.8153\n", - "Epoch 22/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5975 - val_loss: 0.7363\n", - "Epoch 23/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5957 - val_loss: 0.6696\n", - "Epoch 24/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5714 - val_loss: 0.6187\n", - "Epoch 25/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5535 - val_loss: 0.5778\n", - "Epoch 26/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5553 - val_loss: 0.5491\n", - "Epoch 27/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5725 - val_loss: 0.5299\n", - "Epoch 28/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5688 - val_loss: 0.5199\n", - "Epoch 29/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5619 - val_loss: 0.5172\n", - "Epoch 30/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5510 - val_loss: 0.5206\n", - "Epoch 31/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5401 - val_loss: 0.5312\n", - "Epoch 32/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5370 - val_loss: 0.5447\n", - "Epoch 33/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5423 - val_loss: 0.5639\n", - "Epoch 34/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5211 - val_loss: 0.5821\n", - "Epoch 35/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5081 - val_loss: 0.6039\n", - "Epoch 36/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5036 - val_loss: 0.6306\n", - "Epoch 37/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5191 - val_loss: 0.6564\n", - "Epoch 38/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4928 - val_loss: 0.6820\n", - "Epoch 39/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5096 - val_loss: 0.7087\n", - "121/121 [==============================] - 0s 1ms/step - loss: 0.5160\n", - "[CV] END learning_rate=0.00037078874137762145, n_hidden=1, n_neurons=51; total time= 27.6s\n", - "Epoch 1/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 4.8993 - val_loss: 7.4460\n", - "Epoch 2/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 2.4173 - val_loss: 5.2071\n", - "Epoch 3/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 1.4701 - val_loss: 2.9554\n", - "Epoch 4/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 1.1716 - val_loss: 1.7752\n", - "Epoch 5/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.9242 - val_loss: 1.1201\n", - "Epoch 6/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.8307 - val_loss: 0.8519\n", - "Epoch 7/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.7780 - val_loss: 0.7512\n", - "Epoch 8/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.7632 - val_loss: 0.7064\n", - "Epoch 9/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.7361 - val_loss: 0.6896\n", - "Epoch 10/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.6859 - val_loss: 0.6760\n", - "Epoch 11/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.7064 - val_loss: 0.6687\n", - "Epoch 12/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.6826 - val_loss: 0.6577\n", - "Epoch 13/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.6416 - val_loss: 0.6454\n", - "Epoch 14/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.6539 - val_loss: 0.6355\n", - "Epoch 15/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.6736 - val_loss: 0.6256\n", - "Epoch 16/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.6529 - val_loss: 0.6213\n", - "Epoch 17/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.6253 - val_loss: 0.6120\n", - "Epoch 18/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.6484 - val_loss: 0.6024\n", - "Epoch 19/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.6228 - val_loss: 0.5998\n", - "Epoch 20/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.6079 - val_loss: 0.5901\n", - "Epoch 21/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5912 - val_loss: 0.5822\n", - "Epoch 22/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.6250 - val_loss: 0.5763\n", - "Epoch 23/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5804 - val_loss: 0.5664\n", - "Epoch 24/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5735 - val_loss: 0.5574\n", - "Epoch 25/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5793 - val_loss: 0.5527\n", - "Epoch 26/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5576 - val_loss: 0.5452\n", - "Epoch 27/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5786 - val_loss: 0.5437\n", - "Epoch 28/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5683 - val_loss: 0.5366\n", - "Epoch 29/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5475 - val_loss: 0.5322\n", - "Epoch 30/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5471 - val_loss: 0.5264\n", - "Epoch 31/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5281 - val_loss: 0.5234\n", - "Epoch 32/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5547 - val_loss: 0.5175\n", - "Epoch 33/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5437 - val_loss: 0.5137\n", - "Epoch 34/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5113 - val_loss: 0.5078\n", - "Epoch 35/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5125 - val_loss: 0.5045\n", - "Epoch 36/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5127 - val_loss: 0.4970\n", - "Epoch 37/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5158 - val_loss: 0.4911\n", - "Epoch 38/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5132 - val_loss: 0.4887\n", - "Epoch 39/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5140 - val_loss: 0.4847\n", - "Epoch 40/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4995 - val_loss: 0.4815\n", - "Epoch 41/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4795 - val_loss: 0.4776\n", - "Epoch 42/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4838 - val_loss: 0.4736\n", - "Epoch 43/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4966 - val_loss: 0.4706\n", - "Epoch 44/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4932 - val_loss: 0.4673\n", - "Epoch 45/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4810 - val_loss: 0.4655\n", - "Epoch 46/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4737 - val_loss: 0.4625\n", - "Epoch 47/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4866 - val_loss: 0.4576\n", - "Epoch 48/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4719 - val_loss: 0.4554\n", - "Epoch 49/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4859 - val_loss: 0.4525\n", - "Epoch 50/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4618 - val_loss: 0.4495\n", - "Epoch 51/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4862 - val_loss: 0.4468\n", - "Epoch 52/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4576 - val_loss: 0.4446\n", - "Epoch 53/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4641 - val_loss: 0.4420\n", - "Epoch 54/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4641 - val_loss: 0.4394\n", - "Epoch 55/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4560 - val_loss: 0.4373\n", - "Epoch 56/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4620 - val_loss: 0.4349\n", - "Epoch 57/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4542 - val_loss: 0.4330\n", - "Epoch 58/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4659 - val_loss: 0.4311\n", - "Epoch 59/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4584 - val_loss: 0.4291\n", - "Epoch 60/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4684 - val_loss: 0.4277\n", - "Epoch 61/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4678 - val_loss: 0.4257\n", - "Epoch 62/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4516 - val_loss: 0.4241\n", - "Epoch 63/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4410 - val_loss: 0.4224\n", - "Epoch 64/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4622 - val_loss: 0.4208\n", - "Epoch 65/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4594 - val_loss: 0.4193\n", - "Epoch 66/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4354 - val_loss: 0.4180\n", - "Epoch 67/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4460 - val_loss: 0.4164\n", - "Epoch 68/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4504 - val_loss: 0.4151\n", - "Epoch 69/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4247 - val_loss: 0.4141\n", - "Epoch 70/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4433 - val_loss: 0.4124\n", - "Epoch 71/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4618 - val_loss: 0.4112\n", - "Epoch 72/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4168 - val_loss: 0.4101\n", - "Epoch 73/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4359 - val_loss: 0.4088\n", - "Epoch 74/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4307 - val_loss: 0.4081\n", - "Epoch 75/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4273 - val_loss: 0.4073\n", - "Epoch 76/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4386 - val_loss: 0.4070\n", - "Epoch 77/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4324 - val_loss: 0.4056\n", - "Epoch 78/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4313 - val_loss: 0.4040\n", - "Epoch 79/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4328 - val_loss: 0.4034\n", - "Epoch 80/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4146 - val_loss: 0.4033\n", - "Epoch 81/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4138 - val_loss: 0.4019\n", - "Epoch 82/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4241 - val_loss: 0.4008\n", - "Epoch 83/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4112 - val_loss: 0.4002\n", - "Epoch 84/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4320 - val_loss: 0.3996\n", - "Epoch 85/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4259 - val_loss: 0.3983\n", - "Epoch 86/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4110 - val_loss: 0.3980\n", - "Epoch 87/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4237 - val_loss: 0.3981\n", - "Epoch 88/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4058 - val_loss: 0.3969\n", - "Epoch 89/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4303 - val_loss: 0.3978\n", - "Epoch 90/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4157 - val_loss: 0.3961\n", - "Epoch 91/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4229 - val_loss: 0.3951\n", - "Epoch 92/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4118 - val_loss: 0.3938\n", - "Epoch 93/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4005 - val_loss: 0.3938\n", - "Epoch 94/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4222 - val_loss: 0.3935\n", - "Epoch 95/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4279 - val_loss: 0.3934\n", - "Epoch 96/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4027 - val_loss: 0.3932\n", - "Epoch 97/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4108 - val_loss: 0.3939\n", - "Epoch 98/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3998 - val_loss: 0.3913\n", - "Epoch 99/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4002 - val_loss: 0.3916\n", - "Epoch 100/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4052 - val_loss: 0.3918\n", - "121/121 [==============================] - 0s 2ms/step - loss: 0.4139\n", - "[CV] END learning_rate=0.00037078874137762145, n_hidden=1, n_neurons=51; total time= 1.2min\n", - "Epoch 1/100\n", - "242/242 [==============================] - 1s 4ms/step - loss: 3.4453 - val_loss: 1.3536\n", - "Epoch 2/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.7645 - val_loss: 0.7463\n", - "Epoch 3/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.6590 - val_loss: 0.5899\n", - "Epoch 4/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.6064 - val_loss: 0.5366\n", - "Epoch 5/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5580 - val_loss: 0.5063\n", - "Epoch 6/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5150 - val_loss: 0.4813\n", - "Epoch 7/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4985 - val_loss: 0.4639\n", - "Epoch 8/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4716 - val_loss: 0.4427\n", - "Epoch 9/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4477 - val_loss: 0.4393\n", - "Epoch 10/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4411 - val_loss: 0.4137\n", - "Epoch 11/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4204 - val_loss: 0.4071\n", - "Epoch 12/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3978 - val_loss: 0.3983\n", - "Epoch 13/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4290 - val_loss: 0.3933\n", - "Epoch 14/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4111 - val_loss: 0.3972\n", - "Epoch 15/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4041 - val_loss: 0.3852\n", - "Epoch 16/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3923 - val_loss: 0.3830\n", - "Epoch 17/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4072 - val_loss: 0.3947\n", - "Epoch 18/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4075 - val_loss: 0.3713\n", - "Epoch 19/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3829 - val_loss: 0.3752\n", - "Epoch 20/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3867 - val_loss: 0.3741\n", - "Epoch 21/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3800 - val_loss: 0.3782\n", - "Epoch 22/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3686 - val_loss: 0.3637\n", - "Epoch 23/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3795 - val_loss: 0.3723\n", - "Epoch 24/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3691 - val_loss: 0.3707\n", - "Epoch 25/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3751 - val_loss: 0.4047\n", - "Epoch 26/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3599 - val_loss: 0.3839\n", - "Epoch 27/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3795 - val_loss: 0.4167\n", - "Epoch 28/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3664 - val_loss: 0.3500\n", - "Epoch 29/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3666 - val_loss: 0.3792\n", - "Epoch 30/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3629 - val_loss: 0.3636\n", - "Epoch 31/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3586 - val_loss: 0.3476\n", - "Epoch 32/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3489 - val_loss: 0.3566\n", - "Epoch 33/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3517 - val_loss: 0.3611\n", - "Epoch 34/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3521 - val_loss: 0.3414\n", - "Epoch 35/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3499 - val_loss: 0.3474\n", - "Epoch 36/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3469 - val_loss: 0.3944\n", - "Epoch 37/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3453 - val_loss: 0.4401\n", - "Epoch 38/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3539 - val_loss: 0.4721\n", - "Epoch 39/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3449 - val_loss: 0.3722\n", - "Epoch 40/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3307 - val_loss: 0.4018\n", - "Epoch 41/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3408 - val_loss: 0.3376\n", - "Epoch 42/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3456 - val_loss: 0.3377\n", - "Epoch 43/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3436 - val_loss: 0.3354\n", - "Epoch 44/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3430 - val_loss: 0.3737\n", - "Epoch 45/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3496 - val_loss: 0.3336\n", - "Epoch 46/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3305 - val_loss: 0.3561\n", - "Epoch 47/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3370 - val_loss: 0.3542\n", - "Epoch 48/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3262 - val_loss: 0.3402\n", - "Epoch 49/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3510 - val_loss: 0.3304\n", - "Epoch 50/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3347 - val_loss: 0.3854\n", - "Epoch 51/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3238 - val_loss: 0.3432\n", - "Epoch 52/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3495 - val_loss: 0.3365\n", - "Epoch 53/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3329 - val_loss: 0.3387\n", - "Epoch 54/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3366 - val_loss: 0.3294\n", - "Epoch 55/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3260 - val_loss: 0.3655\n", - "Epoch 56/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3558 - val_loss: 0.3310\n", - "Epoch 57/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3366 - val_loss: 0.3728\n", - "Epoch 58/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3374 - val_loss: 0.3375\n", - "Epoch 59/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3415 - val_loss: 0.3263\n", - "Epoch 60/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3332 - val_loss: 0.3403\n", - "Epoch 61/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3199 - val_loss: 0.3440\n", - "Epoch 62/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3275 - val_loss: 0.3583\n", - "Epoch 63/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3341 - val_loss: 0.3302\n", - "Epoch 64/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3222 - val_loss: 0.3681\n", - "Epoch 65/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3119 - val_loss: 0.3292\n", - "Epoch 66/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3518 - val_loss: 0.3275\n", - "Epoch 67/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3314 - val_loss: 0.3561\n", - "Epoch 68/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3287 - val_loss: 0.3295\n", - "Epoch 69/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3316 - val_loss: 0.3438\n", - "121/121 [==============================] - 0s 2ms/step - loss: 0.3550\n", - "[CV] END learning_rate=0.0016535051383872363, n_hidden=2, n_neurons=70; total time= 51.9s\n", - "Epoch 1/100\n", - "242/242 [==============================] - 2s 4ms/step - loss: 3.2276 - val_loss: 3.4090\n", - "Epoch 2/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.7673 - val_loss: 1.6754\n", - "Epoch 3/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.6369 - val_loss: 0.9319\n", - "Epoch 4/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.6031 - val_loss: 0.6042\n", - "Epoch 5/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5652 - val_loss: 0.5061\n", - "Epoch 6/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5258 - val_loss: 0.5058\n", - "Epoch 7/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4977 - val_loss: 0.5272\n", - "Epoch 8/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4759 - val_loss: 0.5600\n", - "Epoch 9/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4640 - val_loss: 0.5367\n", - "Epoch 10/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4464 - val_loss: 0.5220\n", - "Epoch 11/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4347 - val_loss: 0.4878\n", - "Epoch 12/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4163 - val_loss: 0.4531\n", - "Epoch 13/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4113 - val_loss: 0.4182\n", - "Epoch 14/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3961 - val_loss: 0.3877\n", - "Epoch 15/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4222 - val_loss: 0.3818\n", - "Epoch 16/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3975 - val_loss: 0.4022\n", - "Epoch 17/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3999 - val_loss: 0.4348\n", - "Epoch 18/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4069 - val_loss: 0.4934\n", - "Epoch 19/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3895 - val_loss: 0.5340\n", - "Epoch 20/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3872 - val_loss: 0.5982\n", - "Epoch 21/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3838 - val_loss: 0.6543\n", - "Epoch 22/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3802 - val_loss: 0.7246\n", - "Epoch 23/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3840 - val_loss: 0.8046\n", - "Epoch 24/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3677 - val_loss: 0.8587\n", - "Epoch 25/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3480 - val_loss: 0.9090\n", - "121/121 [==============================] - 0s 2ms/step - loss: 0.3884\n", - "[CV] END learning_rate=0.0016535051383872363, n_hidden=2, n_neurons=70; total time= 19.9s\n", - "Epoch 1/100\n", - "242/242 [==============================] - 1s 4ms/step - loss: 3.3058 - val_loss: 2.1643\n", - "Epoch 2/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.7651 - val_loss: 0.6141\n", - "Epoch 3/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.6136 - val_loss: 0.5601\n", - "Epoch 4/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5596 - val_loss: 0.5241\n", - "Epoch 5/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5239 - val_loss: 0.5017\n", - "Epoch 6/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4854 - val_loss: 0.4749\n", - "Epoch 7/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4781 - val_loss: 0.4558\n", - "Epoch 8/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4755 - val_loss: 0.4297\n", - "Epoch 9/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4463 - val_loss: 0.4464\n", - "Epoch 10/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4310 - val_loss: 0.4189\n", - "Epoch 11/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4329 - val_loss: 0.4438\n", - "Epoch 12/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4131 - val_loss: 0.4250\n", - "Epoch 13/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3859 - val_loss: 0.4009\n", - "Epoch 14/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3923 - val_loss: 0.4403\n", - "Epoch 15/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4130 - val_loss: 0.4014\n", - "Epoch 16/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3992 - val_loss: 0.4247\n", - "Epoch 17/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3806 - val_loss: 0.3964\n", - "Epoch 18/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3962 - val_loss: 0.3974\n", - "Epoch 19/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3999 - val_loss: 0.4229\n", - "Epoch 20/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3901 - val_loss: 0.4053\n", - "Epoch 21/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3831 - val_loss: 0.3989\n", - "Epoch 22/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3974 - val_loss: 0.3957\n", - "Epoch 23/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3763 - val_loss: 0.3864\n", - "Epoch 24/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3718 - val_loss: 0.4022\n", - "Epoch 25/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3711 - val_loss: 0.3729\n", - "Epoch 26/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3712 - val_loss: 0.3645\n", - "Epoch 27/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3836 - val_loss: 0.4107\n", - "Epoch 28/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3786 - val_loss: 0.3925\n", - "Epoch 29/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3648 - val_loss: 0.4265\n", - "Epoch 30/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3695 - val_loss: 0.3879\n", - "Epoch 31/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3592 - val_loss: 0.3789\n", - "Epoch 32/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3819 - val_loss: 0.4080\n", - "Epoch 33/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3659 - val_loss: 0.3873\n", - "Epoch 34/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3501 - val_loss: 0.4232\n", - "Epoch 35/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3550 - val_loss: 0.3718\n", - "Epoch 36/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3490 - val_loss: 0.3663\n", - "121/121 [==============================] - 0s 2ms/step - loss: 0.3555\n", - "[CV] END learning_rate=0.0016535051383872363, n_hidden=2, n_neurons=70; total time= 27.8s\n", - "Epoch 1/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 1.9995 - val_loss: 297.3651\n", - "Epoch 2/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 1.2481 - val_loss: 539.0367\n", - "Epoch 3/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 2.5441 - val_loss: 3736.4553\n", - "Epoch 4/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 7.4651 - val_loss: 12227.7021\n", - "Epoch 5/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 22.4715 - val_loss: 61529.1328\n", - "Epoch 6/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 2537.2823 - val_loss: 268363.5938\n", - "Epoch 7/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 2132.8547 - val_loss: 1210517.6250\n", - "Epoch 8/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 32696.8507 - val_loss: 5411007.5000\n", - "Epoch 9/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 28036.3480 - val_loss: 24506742.0000\n", - "Epoch 10/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 910068.3069 - val_loss: 119813256.0000\n", - "Epoch 11/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 1721901.5547 - val_loss: 529732224.0000\n", - "121/121 [==============================] - 0s 1ms/step - loss: 1402368.5000\n", - "[CV] END learning_rate=0.01824796188192035, n_hidden=0, n_neurons=40; total time= 7.6s\n", - "Epoch 1/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 2.2323 - val_loss: 15.8284\n", - "Epoch 2/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5228 - val_loss: 22.4892\n", - "Epoch 3/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5292 - val_loss: 24.7894\n", - "Epoch 4/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5081 - val_loss: 22.4864\n", - "Epoch 5/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5095 - val_loss: 21.9009\n", - "Epoch 6/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5093 - val_loss: 21.2895\n", - "Epoch 7/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4936 - val_loss: 19.9064\n", - "Epoch 8/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5221 - val_loss: 22.5013\n", - "Epoch 9/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5027 - val_loss: 20.0987\n", - "Epoch 10/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4831 - val_loss: 10.7128\n", - "Epoch 11/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5128 - val_loss: 19.7319\n", - "Epoch 12/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4957 - val_loss: 24.3237\n", - "Epoch 13/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5081 - val_loss: 25.9485\n", - "Epoch 14/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4740 - val_loss: 10.5277\n", - "Epoch 15/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5379 - val_loss: 17.1916\n", - "Epoch 16/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5078 - val_loss: 21.8347\n", - "Epoch 17/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4993 - val_loss: 11.7743\n", - "Epoch 18/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5211 - val_loss: 14.1555\n", - "Epoch 19/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5103 - val_loss: 20.9814\n", - "Epoch 20/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4812 - val_loss: 12.3621\n", - "Epoch 21/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5134 - val_loss: 25.9146\n", - "Epoch 22/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4890 - val_loss: 16.0461\n", - "Epoch 23/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5148 - val_loss: 19.4877\n", - "Epoch 24/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4909 - val_loss: 12.1054\n", - "121/121 [==============================] - 0s 1ms/step - loss: 0.7813\n", - "[CV] END learning_rate=0.01824796188192035, n_hidden=0, n_neurons=40; total time= 15.8s\n", - "Epoch 1/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 1.9669 - val_loss: 307.7496\n", - "Epoch 2/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 1.0908 - val_loss: 76.3016\n", - "Epoch 3/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.8437 - val_loss: 795.2294\n", - "Epoch 4/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 41.8219 - val_loss: 704.0450\n", - "Epoch 5/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 1.0379 - val_loss: 2668.0293\n", - "Epoch 6/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 6.1716 - val_loss: 1446.2605\n", - "Epoch 7/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 3.3018 - val_loss: 1540.5359\n", - "Epoch 8/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 71.5699 - val_loss: 1396.7100\n", - "Epoch 9/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 6.0212 - val_loss: 1334.0837\n", - "Epoch 10/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 2.0299 - val_loss: 216.7264\n", - "Epoch 11/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 21.3465 - val_loss: 125.2064\n", - "Epoch 12/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.7510 - val_loss: 2.2902\n", - "Epoch 13/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4922 - val_loss: 790.5421\n", - "Epoch 14/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 5.4409 - val_loss: 468.7424\n", - "Epoch 15/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 1.0499 - val_loss: 1073.9150\n", - "Epoch 16/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 45.2524 - val_loss: 865.6378\n", - "Epoch 17/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 2.7759 - val_loss: 1128.1494\n", - "Epoch 18/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 2.7236 - val_loss: 499.5187\n", - "Epoch 19/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 34.6839 - val_loss: 309.7938\n", - "Epoch 20/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 2.3475 - val_loss: 354.6337\n", - "Epoch 21/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 2.4646 - val_loss: 559.4483\n", - "Epoch 22/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 3.0812 - val_loss: 393.8695\n", - "121/121 [==============================] - 0s 1ms/step - loss: 0.6226\n", - "[CV] END learning_rate=0.01824796188192035, n_hidden=0, n_neurons=40; total time= 14.5s\n", - "Epoch 1/100\n", - "242/242 [==============================] - 1s 4ms/step - loss: 1.9862 - val_loss: 1.4543\n", - "Epoch 2/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.6404 - val_loss: 0.9557\n", - "Epoch 3/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5532 - val_loss: 0.4628\n", - "Epoch 4/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4956 - val_loss: 0.4214\n", - "Epoch 5/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4377 - val_loss: 0.3984\n", - "Epoch 6/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4032 - val_loss: 0.4056\n", - "Epoch 7/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4015 - val_loss: 0.3741\n", - "Epoch 8/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3915 - val_loss: 0.3926\n", - "Epoch 9/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3725 - val_loss: 0.3832\n", - "Epoch 10/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3731 - val_loss: 0.3929\n", - "Epoch 11/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3537 - val_loss: 0.3570\n", - "Epoch 12/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3410 - val_loss: 0.3790\n", - "Epoch 13/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3720 - val_loss: 0.3840\n", - "Epoch 14/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3560 - val_loss: 0.3950\n", - "Epoch 15/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3490 - val_loss: 0.3751\n", - "Epoch 16/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3482 - val_loss: 0.3955\n", - "Epoch 17/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3559 - val_loss: 0.3900\n", - "Epoch 18/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3621 - val_loss: 0.3905\n", - "Epoch 19/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3365 - val_loss: 0.3944\n", - "Epoch 20/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3438 - val_loss: 0.3811\n", - "Epoch 21/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3389 - val_loss: 0.3906\n", - "121/121 [==============================] - 0s 2ms/step - loss: 0.3624\n", - "[CV] END learning_rate=0.0045455096956331, n_hidden=3, n_neurons=30; total time= 17.4s\n", - "Epoch 1/100\n", - "242/242 [==============================] - 1s 4ms/step - loss: 1.7235 - val_loss: 0.5822\n", - "Epoch 2/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5852 - val_loss: 0.4873\n", - "Epoch 3/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4784 - val_loss: 0.4420\n", - "Epoch 4/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4436 - val_loss: 0.4139\n", - "Epoch 5/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4223 - val_loss: 0.4132\n", - "Epoch 6/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3955 - val_loss: 0.4464\n", - "Epoch 7/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3768 - val_loss: 0.4717\n", - "Epoch 8/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3800 - val_loss: 0.5331\n", - "Epoch 9/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3620 - val_loss: 0.6951\n", - "Epoch 10/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3645 - val_loss: 0.6944\n", - "Epoch 11/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3646 - val_loss: 0.8506\n", - "Epoch 12/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3432 - val_loss: 0.7660\n", - "Epoch 13/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3419 - val_loss: 0.8731\n", - "Epoch 14/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3305 - val_loss: 0.9306\n", - "Epoch 15/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3605 - val_loss: 0.9345\n", - "121/121 [==============================] - 0s 2ms/step - loss: 0.3685\n", - "[CV] END learning_rate=0.0045455096956331, n_hidden=3, n_neurons=30; total time= 12.7s\n", - "Epoch 1/100\n", - "242/242 [==============================] - 1s 4ms/step - loss: 1.7434 - val_loss: 0.6796\n", - "Epoch 2/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5868 - val_loss: 0.4957\n", - "Epoch 3/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5017 - val_loss: 0.4633\n", - "Epoch 4/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4473 - val_loss: 0.4565\n", - "Epoch 5/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4218 - val_loss: 0.4150\n", - "Epoch 6/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3928 - val_loss: 0.4331\n", - "Epoch 7/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3924 - val_loss: 0.3887\n", - "Epoch 8/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4047 - val_loss: 0.3785\n", - "Epoch 9/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3805 - val_loss: 0.4233\n", - "Epoch 10/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3749 - val_loss: 0.3652\n", - "Epoch 11/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3866 - val_loss: 0.4336\n", - "Epoch 12/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3635 - val_loss: 0.3763\n", - "Epoch 13/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3414 - val_loss: 0.3632\n", - "Epoch 14/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3498 - val_loss: 0.4460\n", - "Epoch 15/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3760 - val_loss: 0.3555\n", - "Epoch 16/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3554 - val_loss: 0.3947\n", - "Epoch 17/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3443 - val_loss: 0.3623\n", - "Epoch 18/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3532 - val_loss: 0.3774\n", - "Epoch 19/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3664 - val_loss: 0.3807\n", - "Epoch 20/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3544 - val_loss: 0.3420\n", - "Epoch 21/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3427 - val_loss: 0.3452\n", - "Epoch 22/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3599 - val_loss: 0.3273\n", - "Epoch 23/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3386 - val_loss: 0.3279\n", - "Epoch 24/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3312 - val_loss: 0.4346\n", - "Epoch 25/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3306 - val_loss: 0.3432\n", - "Epoch 26/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3298 - val_loss: 0.3227\n", - "Epoch 27/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3436 - val_loss: 0.4466\n", - "Epoch 28/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3404 - val_loss: 0.3323\n", - "Epoch 29/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3290 - val_loss: 0.3991\n", - "Epoch 30/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3298 - val_loss: 0.3434\n", - "Epoch 31/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3188 - val_loss: 0.3349\n", - "Epoch 32/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3393 - val_loss: 0.3639\n", - "Epoch 33/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3286 - val_loss: 0.3461\n", - "Epoch 34/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3119 - val_loss: 0.3591\n", - "Epoch 35/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3142 - val_loss: 0.3140\n", - "Epoch 36/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3092 - val_loss: 0.3636\n", - "Epoch 37/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3214 - val_loss: 0.3380\n", - "Epoch 38/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3190 - val_loss: 0.5245\n", - "Epoch 39/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3297 - val_loss: 0.3326\n", - "Epoch 40/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3191 - val_loss: 0.4046\n", - "Epoch 41/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3022 - val_loss: 0.3341\n", - "Epoch 42/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3030 - val_loss: 0.3658\n", - "Epoch 43/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3221 - val_loss: 0.3322\n", - "Epoch 44/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3245 - val_loss: 0.3683\n", - "Epoch 45/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3104 - val_loss: 0.3088\n", - "Epoch 46/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3077 - val_loss: 0.3813\n", - "Epoch 47/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3088 - val_loss: 0.3185\n", - "Epoch 48/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3053 - val_loss: 0.3008\n", - "Epoch 49/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3110 - val_loss: 0.4085\n", - "Epoch 50/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3103 - val_loss: 0.3015\n", - "Epoch 51/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3178 - val_loss: 0.3950\n", - "Epoch 52/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3021 - val_loss: 0.3108\n", - "Epoch 53/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3057 - val_loss: 0.3010\n", - "Epoch 54/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3020 - val_loss: 0.2974\n", - "Epoch 55/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2999 - val_loss: 0.2947\n", - "Epoch 56/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3070 - val_loss: 0.3307\n", - "Epoch 57/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2997 - val_loss: 0.3358\n", - "Epoch 58/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3090 - val_loss: 0.3106\n", - "Epoch 59/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3092 - val_loss: 0.3976\n", - "Epoch 60/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3089 - val_loss: 0.3400\n", - "Epoch 61/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3141 - val_loss: 0.3060\n", - "Epoch 62/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3004 - val_loss: 0.3124\n", - "Epoch 63/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3011 - val_loss: 0.3068\n", - "Epoch 64/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3151 - val_loss: 0.3170\n", - "Epoch 65/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2980 - val_loss: 0.3343\n", - "121/121 [==============================] - 0s 2ms/step - loss: 0.3098\n", - "[CV] END learning_rate=0.0045455096956331, n_hidden=3, n_neurons=30; total time= 52.5s\n", - "Epoch 1/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 3.4800 - val_loss: 29.5063\n", - "Epoch 2/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.8491 - val_loss: 33.7785\n", - "Epoch 3/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.8416 - val_loss: 4.0125\n", - "Epoch 4/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.6237 - val_loss: 0.5556\n", - "Epoch 5/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5755 - val_loss: 0.5119\n", - "Epoch 6/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5306 - val_loss: 0.4888\n", - "Epoch 7/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5198 - val_loss: 0.4729\n", - "Epoch 8/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4973 - val_loss: 0.4559\n", - "Epoch 9/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4747 - val_loss: 0.4601\n", - "Epoch 10/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4664 - val_loss: 0.4303\n", - "Epoch 11/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4450 - val_loss: 0.4205\n", - "Epoch 12/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4195 - val_loss: 0.4242\n", - "Epoch 13/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4480 - val_loss: 0.4107\n", - "Epoch 14/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4328 - val_loss: 0.4231\n", - "Epoch 15/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4293 - val_loss: 0.4221\n", - "Epoch 16/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4155 - val_loss: 0.4084\n", - "Epoch 17/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4334 - val_loss: 0.4209\n", - "Epoch 18/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4284 - val_loss: 0.4017\n", - "Epoch 19/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4067 - val_loss: 0.4322\n", - "Epoch 20/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4111 - val_loss: 0.4001\n", - "Epoch 21/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4041 - val_loss: 0.4263\n", - "Epoch 22/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3951 - val_loss: 0.4032\n", - "Epoch 23/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4104 - val_loss: 0.4039\n", - "Epoch 24/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3942 - val_loss: 0.3764\n", - "Epoch 25/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4024 - val_loss: 0.4241\n", - "Epoch 26/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3863 - val_loss: 0.3779\n", - "Epoch 27/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4067 - val_loss: 0.4126\n", - "Epoch 28/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3956 - val_loss: 0.3967\n", - "Epoch 29/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3976 - val_loss: 0.4045\n", - "Epoch 30/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3876 - val_loss: 0.3748\n", - "Epoch 31/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3863 - val_loss: 0.3717\n", - "Epoch 32/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3825 - val_loss: 0.3676\n", - "Epoch 33/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3779 - val_loss: 0.4054\n", - "Epoch 34/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3758 - val_loss: 0.3924\n", - "Epoch 35/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3782 - val_loss: 0.3611\n", - "Epoch 36/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3750 - val_loss: 0.4182\n", - "Epoch 37/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3769 - val_loss: 0.3539\n", - "Epoch 38/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3741 - val_loss: 0.4403\n", - "Epoch 39/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3729 - val_loss: 0.3551\n", - "Epoch 40/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3570 - val_loss: 0.4125\n", - "Epoch 41/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3686 - val_loss: 0.3665\n", - "Epoch 42/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3748 - val_loss: 0.3591\n", - "Epoch 43/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3709 - val_loss: 0.3570\n", - "Epoch 44/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3702 - val_loss: 0.4125\n", - "Epoch 45/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3743 - val_loss: 0.3547\n", - "Epoch 46/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3585 - val_loss: 0.3779\n", - "Epoch 47/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3692 - val_loss: 0.3886\n", - "121/121 [==============================] - 0s 1ms/step - loss: 0.3877\n", - "[CV] END learning_rate=0.0020587676114196545, n_hidden=1, n_neurons=49; total time= 32.7s\n", - "Epoch 1/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 3.3075 - val_loss: 0.7805\n", - "Epoch 2/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.7479 - val_loss: 1.1550\n", - "Epoch 3/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.6249 - val_loss: 1.8115\n", - "Epoch 4/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5885 - val_loss: 2.6113\n", - "Epoch 5/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5412 - val_loss: 3.2626\n", - "Epoch 6/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5083 - val_loss: 3.5247\n", - "Epoch 7/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4786 - val_loss: 3.5926\n", - "Epoch 8/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4660 - val_loss: 3.5562\n", - "Epoch 9/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4559 - val_loss: 2.9541\n", - "Epoch 10/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4427 - val_loss: 2.5606\n", - "Epoch 11/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4424 - val_loss: 2.1560\n", - "121/121 [==============================] - 0s 1ms/step - loss: 0.4866\n", - "[CV] END learning_rate=0.0020587676114196545, n_hidden=1, n_neurons=49; total time= 8.3s\n", - "Epoch 1/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 2.9276 - val_loss: 2.5834\n", - "Epoch 2/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.7344 - val_loss: 3.5564\n", - "Epoch 3/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.6461 - val_loss: 1.7895\n", - "Epoch 4/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.6260 - val_loss: 1.7436\n", - "Epoch 5/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5519 - val_loss: 0.6344\n", - "Epoch 6/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5085 - val_loss: 0.8713\n", - "Epoch 7/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5055 - val_loss: 0.5604\n", - "Epoch 8/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5012 - val_loss: 0.4695\n", - "Epoch 9/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4772 - val_loss: 0.4942\n", - "Epoch 10/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4582 - val_loss: 0.4375\n", - "Epoch 11/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4637 - val_loss: 0.4536\n", - "Epoch 12/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4395 - val_loss: 0.4276\n", - "Epoch 13/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4150 - val_loss: 0.4084\n", - "Epoch 14/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4219 - val_loss: 0.4897\n", - "Epoch 15/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4455 - val_loss: 0.4018\n", - "Epoch 16/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4279 - val_loss: 0.5505\n", - "Epoch 17/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4079 - val_loss: 0.4602\n", - "Epoch 18/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4250 - val_loss: 0.4347\n", - "Epoch 19/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4231 - val_loss: 0.3835\n", - "Epoch 20/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4083 - val_loss: 0.4115\n", - "Epoch 21/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4025 - val_loss: 0.3817\n", - "Epoch 22/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4214 - val_loss: 0.3737\n", - "Epoch 23/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4011 - val_loss: 0.3720\n", - "Epoch 24/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3929 - val_loss: 0.4318\n", - "Epoch 25/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3957 - val_loss: 0.4158\n", - "Epoch 26/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3918 - val_loss: 0.3821\n", - "Epoch 27/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4040 - val_loss: 0.4069\n", - "Epoch 28/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3972 - val_loss: 0.4024\n", - "Epoch 29/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3859 - val_loss: 0.5904\n", - "Epoch 30/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3872 - val_loss: 0.4027\n", - "Epoch 31/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3742 - val_loss: 0.4216\n", - "Epoch 32/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4065 - val_loss: 0.3603\n", - "Epoch 33/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3831 - val_loss: 0.4134\n", - "Epoch 34/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3744 - val_loss: 0.3633\n", - "Epoch 35/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3720 - val_loss: 0.3542\n", - "Epoch 36/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3710 - val_loss: 0.3568\n", - "Epoch 37/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3822 - val_loss: 0.4216\n", - "Epoch 38/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3764 - val_loss: 0.5522\n", - "Epoch 39/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3867 - val_loss: 0.5648\n", - "Epoch 40/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3818 - val_loss: 0.6416\n", - "Epoch 41/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3684 - val_loss: 0.3847\n", - "Epoch 42/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3616 - val_loss: 0.5255\n", - "Epoch 43/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3771 - val_loss: 0.7023\n", - "Epoch 44/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3837 - val_loss: 0.7508\n", - "Epoch 45/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3698 - val_loss: 0.5608\n", - "121/121 [==============================] - 0s 1ms/step - loss: 0.3745\n", - "[CV] END learning_rate=0.0020587676114196545, n_hidden=1, n_neurons=49; total time= 31.7s\n", - "Epoch 1/100\n", - "242/242 [==============================] - 1s 4ms/step - loss: 1.6933 - val_loss: 6.4183\n", - "Epoch 2/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.6124 - val_loss: 16.7917\n", - "Epoch 3/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5548 - val_loss: 4.7823\n", - "Epoch 4/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4575 - val_loss: 8.6077\n", - "Epoch 5/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4166 - val_loss: 1.8033\n", - "Epoch 6/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4075 - val_loss: 0.3655\n", - "Epoch 7/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3664 - val_loss: 0.3784\n", - "Epoch 8/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3529 - val_loss: 0.4055\n", - "Epoch 9/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3455 - val_loss: 0.3909\n", - "Epoch 10/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3489 - val_loss: 0.3910\n", - "Epoch 11/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3307 - val_loss: 0.3554\n", - "Epoch 12/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3169 - val_loss: 0.3610\n", - "Epoch 13/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3465 - val_loss: 0.3653\n", - "Epoch 14/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3318 - val_loss: 0.3631\n", - "Epoch 15/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3252 - val_loss: 0.3562\n", - "Epoch 16/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3238 - val_loss: 0.3567\n", - "Epoch 17/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3330 - val_loss: 0.3557\n", - "Epoch 18/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3389 - val_loss: 0.3500\n", - "Epoch 19/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3133 - val_loss: 0.3512\n", - "Epoch 20/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3202 - val_loss: 0.3396\n", - "Epoch 21/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3154 - val_loss: 0.3361\n", - "Epoch 22/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3058 - val_loss: 0.3623\n", - "Epoch 23/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3150 - val_loss: 0.3222\n", - "Epoch 24/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3078 - val_loss: 0.3089\n", - "Epoch 25/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3102 - val_loss: 0.3542\n", - "Epoch 26/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2951 - val_loss: 0.3082\n", - "Epoch 27/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3120 - val_loss: 0.3277\n", - "Epoch 28/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3055 - val_loss: 0.3503\n", - "Epoch 29/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2991 - val_loss: 0.3327\n", - "Epoch 30/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2987 - val_loss: 0.2954\n", - "Epoch 31/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2949 - val_loss: 0.3089\n", - "Epoch 32/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2847 - val_loss: 0.2903\n", - "Epoch 33/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2895 - val_loss: 0.3207\n", - "Epoch 34/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2831 - val_loss: 0.3162\n", - "Epoch 35/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2851 - val_loss: 0.2947\n", - "Epoch 36/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2866 - val_loss: 0.3611\n", - "Epoch 37/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2760 - val_loss: 0.3027\n", - "Epoch 38/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2923 - val_loss: 0.3465\n", - "Epoch 39/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2785 - val_loss: 0.2915\n", - "Epoch 40/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2662 - val_loss: 0.3299\n", - "Epoch 41/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2756 - val_loss: 0.2944\n", - "Epoch 42/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2767 - val_loss: 0.2884\n", - "Epoch 43/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2786 - val_loss: 0.2916\n", - "Epoch 44/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2743 - val_loss: 0.3128\n", - "Epoch 45/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2795 - val_loss: 0.3093\n", - "Epoch 46/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2666 - val_loss: 0.3230\n", - "Epoch 47/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2681 - val_loss: 0.2914\n", - "Epoch 48/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2656 - val_loss: 0.2865\n", - "Epoch 49/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2785 - val_loss: 0.2813\n", - "Epoch 50/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2635 - val_loss: 0.3282\n", - "Epoch 51/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2589 - val_loss: 0.3188\n", - "Epoch 52/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2765 - val_loss: 0.3110\n", - "Epoch 53/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2637 - val_loss: 0.2857\n", - "Epoch 54/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2579 - val_loss: 0.2836\n", - "Epoch 55/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2573 - val_loss: 0.2970\n", - "Epoch 56/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2755 - val_loss: 0.2792\n", - "Epoch 57/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2703 - val_loss: 0.3210\n", - "Epoch 58/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2636 - val_loss: 0.2745\n", - "Epoch 59/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2688 - val_loss: 0.2858\n", - "Epoch 60/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2559 - val_loss: 0.2782\n", - "Epoch 61/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2543 - val_loss: 0.3358\n", - "Epoch 62/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2579 - val_loss: 0.2817\n", - "Epoch 63/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2621 - val_loss: 0.3138\n", - "Epoch 64/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2522 - val_loss: 0.2980\n", - "Epoch 65/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2453 - val_loss: 0.2735\n", - "Epoch 66/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2658 - val_loss: 0.2749\n", - "Epoch 67/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2587 - val_loss: 0.3311\n", - "Epoch 68/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2565 - val_loss: 0.2705\n", - "Epoch 69/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2523 - val_loss: 0.3032\n", - "Epoch 70/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2673 - val_loss: 0.2675\n", - "Epoch 71/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2571 - val_loss: 0.3345\n", - "Epoch 72/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2666 - val_loss: 0.2699\n", - "Epoch 73/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2603 - val_loss: 0.3007\n", - "Epoch 74/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2616 - val_loss: 0.2974\n", - "Epoch 75/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2504 - val_loss: 0.2822\n", - "Epoch 76/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2597 - val_loss: 0.2838\n", - "Epoch 77/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2487 - val_loss: 0.2817\n", - "Epoch 78/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2426 - val_loss: 0.2883\n", - "Epoch 79/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2513 - val_loss: 0.2707\n", - "Epoch 80/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2471 - val_loss: 0.3383\n", - "121/121 [==============================] - 0s 2ms/step - loss: 0.3170\n", - "[CV] END learning_rate=0.005803602934201024, n_hidden=3, n_neurons=74; total time= 1.1min\n", - "Epoch 1/100\n", - "242/242 [==============================] - 1s 4ms/step - loss: 1.4417 - val_loss: 0.7369\n", - "Epoch 2/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5298 - val_loss: 0.4431\n", - "Epoch 3/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4286 - val_loss: 0.3919\n", - "Epoch 4/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4017 - val_loss: 0.3834\n", - "Epoch 5/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3837 - val_loss: 0.3951\n", - "Epoch 6/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3655 - val_loss: 0.4650\n", - "Epoch 7/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3497 - val_loss: 0.6408\n", - "Epoch 8/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3530 - val_loss: 0.7273\n", - "Epoch 9/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3417 - val_loss: 0.9104\n", - "Epoch 10/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3458 - val_loss: 0.6969\n", - "Epoch 11/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3395 - val_loss: 0.6999\n", - "Epoch 12/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3255 - val_loss: 0.7835\n", - "Epoch 13/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3186 - val_loss: 0.8539\n", - "Epoch 14/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3123 - val_loss: 0.8282\n", - "121/121 [==============================] - 0s 2ms/step - loss: 0.3525\n", - "[CV] END learning_rate=0.005803602934201024, n_hidden=3, n_neurons=74; total time= 12.1s\n", - "Epoch 1/100\n", - "242/242 [==============================] - 1s 4ms/step - loss: 1.6880 - val_loss: 0.9196\n", - "Epoch 2/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4943 - val_loss: 2.1025\n", - "Epoch 3/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4287 - val_loss: 3.5511\n", - "Epoch 4/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4621 - val_loss: 1.5867\n", - "Epoch 5/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3738 - val_loss: 0.4227\n", - "Epoch 6/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3522 - val_loss: 0.3738\n", - "Epoch 7/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3500 - val_loss: 0.3350\n", - "Epoch 8/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3672 - val_loss: 0.3384\n", - "Epoch 9/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3477 - val_loss: 0.3720\n", - "Epoch 10/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3506 - val_loss: 0.3274\n", - "Epoch 11/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3651 - val_loss: 0.3958\n", - "Epoch 12/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3353 - val_loss: 0.3324\n", - "Epoch 13/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3091 - val_loss: 0.3226\n", - "Epoch 14/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3206 - val_loss: 0.3682\n", - "Epoch 15/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3453 - val_loss: 0.3202\n", - "Epoch 16/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3253 - val_loss: 0.3509\n", - "Epoch 17/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3125 - val_loss: 0.3212\n", - "Epoch 18/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3225 - val_loss: 0.3505\n", - "Epoch 19/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3342 - val_loss: 0.3419\n", - "Epoch 20/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3249 - val_loss: 0.3604\n", - "Epoch 21/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3151 - val_loss: 0.3229\n", - "Epoch 22/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3264 - val_loss: 0.3279\n", - "Epoch 23/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3111 - val_loss: 0.3751\n", - "Epoch 24/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3029 - val_loss: 0.3024\n", - "Epoch 25/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3001 - val_loss: 0.3127\n", - "Epoch 26/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2993 - val_loss: 0.3250\n", - "Epoch 27/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3138 - val_loss: 0.3197\n", - "Epoch 28/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3103 - val_loss: 0.3761\n", - "Epoch 29/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3089 - val_loss: 0.4293\n", - "Epoch 30/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3029 - val_loss: 0.3023\n", - "Epoch 31/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2901 - val_loss: 0.3180\n", - "Epoch 32/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3079 - val_loss: 0.2975\n", - "Epoch 33/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2983 - val_loss: 0.3142\n", - "Epoch 34/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2853 - val_loss: 0.3021\n", - "Epoch 35/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2836 - val_loss: 0.2973\n", - "Epoch 36/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2786 - val_loss: 0.3758\n", - "Epoch 37/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2903 - val_loss: 0.3208\n", - "Epoch 38/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2937 - val_loss: 0.4156\n", - "Epoch 39/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3001 - val_loss: 0.2999\n", - "Epoch 40/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2858 - val_loss: 0.3601\n", - "Epoch 41/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2699 - val_loss: 0.3183\n", - "Epoch 42/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2796 - val_loss: 0.3175\n", - "Epoch 43/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2913 - val_loss: 0.2841\n", - "Epoch 44/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2916 - val_loss: 0.3526\n", - "Epoch 45/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2744 - val_loss: 0.2990\n", - "Epoch 46/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2767 - val_loss: 0.3272\n", - "Epoch 47/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2776 - val_loss: 0.2825\n", - "Epoch 48/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2723 - val_loss: 0.2911\n", - "Epoch 49/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2816 - val_loss: 0.3597\n", - "Epoch 50/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2806 - val_loss: 0.2950\n", - "Epoch 51/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2828 - val_loss: 0.3449\n", - "Epoch 52/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2691 - val_loss: 0.2921\n", - "Epoch 53/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2788 - val_loss: 0.2920\n", - "Epoch 54/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2746 - val_loss: 0.3096\n", - "Epoch 55/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2672 - val_loss: 0.2812\n", - "Epoch 56/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2777 - val_loss: 0.3169\n", - "Epoch 57/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2730 - val_loss: 0.3673\n", - "Epoch 58/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2802 - val_loss: 0.2970\n", - "Epoch 59/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2764 - val_loss: 0.3899\n", - "Epoch 60/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2767 - val_loss: 0.3269\n", - "Epoch 61/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2782 - val_loss: 0.3853\n", - "Epoch 62/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2695 - val_loss: 0.2769\n", - "Epoch 63/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2637 - val_loss: 0.3853\n", - "Epoch 64/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2798 - val_loss: 0.2905\n", - "Epoch 65/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2647 - val_loss: 0.3292\n", - "Epoch 66/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2562 - val_loss: 0.2836\n", - "Epoch 67/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2688 - val_loss: 0.2912\n", - "Epoch 68/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2819 - val_loss: 0.3049\n", - "Epoch 69/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2606 - val_loss: 0.2789\n", - "Epoch 70/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2589 - val_loss: 0.3144\n", - "Epoch 71/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2744 - val_loss: 0.2757\n", - "Epoch 72/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2509 - val_loss: 0.2786\n", - "Epoch 73/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2674 - val_loss: 0.2886\n", - "Epoch 74/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2639 - val_loss: 0.2981\n", - "Epoch 75/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2620 - val_loss: 0.3004\n", - "Epoch 76/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2561 - val_loss: 0.3521\n", - "Epoch 77/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2740 - val_loss: 0.2805\n", - "Epoch 78/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2635 - val_loss: 0.3688\n", - "Epoch 79/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2613 - val_loss: 0.2836\n", - "Epoch 80/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2580 - val_loss: 0.2747\n", - "Epoch 81/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2461 - val_loss: 0.2880\n", - "Epoch 82/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2517 - val_loss: 0.2934\n", - "Epoch 83/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2520 - val_loss: 0.3077\n", - "Epoch 84/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2643 - val_loss: 0.2881\n", - "Epoch 85/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2572 - val_loss: 0.2819\n", - "Epoch 86/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2496 - val_loss: 0.3120\n", - "Epoch 87/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2583 - val_loss: 0.3031\n", - "Epoch 88/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2450 - val_loss: 0.2837\n", - "Epoch 89/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2595 - val_loss: 0.2763\n", - "Epoch 90/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2501 - val_loss: 0.3456\n", - "121/121 [==============================] - 0s 2ms/step - loss: 0.3033\n", - "[CV] END learning_rate=0.005803602934201024, n_hidden=3, n_neurons=74; total time= 1.2min\n", - "Epoch 1/100\n", - "242/242 [==============================] - 2s 6ms/step - loss: 1.5786 - val_loss: 10.9251\n", - "Epoch 2/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5353 - val_loss: 3.3912\n", - "Epoch 3/100\n", - "242/242 [==============================] - 1s 4ms/step - loss: 0.4521 - val_loss: 0.4039\n", - "Epoch 4/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4084 - val_loss: 0.3693\n", - "Epoch 5/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3670 - val_loss: 0.3554\n", - "Epoch 6/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3524 - val_loss: 0.3874\n", - "Epoch 7/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3487 - val_loss: 0.3635\n", - "Epoch 8/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3423 - val_loss: 0.3985\n", - "Epoch 9/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3333 - val_loss: 0.3793\n", - "Epoch 10/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3378 - val_loss: 0.3706\n", - "Epoch 11/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3208 - val_loss: 0.3313\n", - "Epoch 12/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3109 - val_loss: 0.3509\n", - "Epoch 13/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3374 - val_loss: 0.3795\n", - "Epoch 14/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3224 - val_loss: 0.3319\n", - "Epoch 15/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3174 - val_loss: 0.3480\n", - "Epoch 16/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3173 - val_loss: 0.3489\n", - "Epoch 17/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3260 - val_loss: 0.3249\n", - "Epoch 18/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3304 - val_loss: 0.3431\n", - "Epoch 19/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3067 - val_loss: 0.3345\n", - "Epoch 20/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3128 - val_loss: 0.3233\n", - "Epoch 21/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3087 - val_loss: 0.3818\n", - "Epoch 22/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3028 - val_loss: 0.3089\n", - "Epoch 23/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3062 - val_loss: 0.3726\n", - "Epoch 24/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3035 - val_loss: 0.3745\n", - "Epoch 25/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3100 - val_loss: 0.3224\n", - "Epoch 26/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2907 - val_loss: 0.3082\n", - "Epoch 27/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3084 - val_loss: 0.3266\n", - "Epoch 28/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2998 - val_loss: 0.3433\n", - "Epoch 29/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2930 - val_loss: 0.3382\n", - "Epoch 30/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2944 - val_loss: 0.3149\n", - "Epoch 31/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2941 - val_loss: 0.3173\n", - "Epoch 32/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2822 - val_loss: 0.2943\n", - "Epoch 33/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2861 - val_loss: 0.3554\n", - "Epoch 34/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2813 - val_loss: 0.2900\n", - "Epoch 35/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2806 - val_loss: 0.2926\n", - "Epoch 36/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2821 - val_loss: 0.4057\n", - "Epoch 37/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2734 - val_loss: 0.5382\n", - "Epoch 38/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3062 - val_loss: 0.4289\n", - "Epoch 39/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2809 - val_loss: 0.2954\n", - "Epoch 40/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2648 - val_loss: 0.3371\n", - "Epoch 41/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2777 - val_loss: 0.3001\n", - "Epoch 42/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2778 - val_loss: 0.3063\n", - "Epoch 43/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2787 - val_loss: 0.2977\n", - "Epoch 44/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2730 - val_loss: 0.3232\n", - "121/121 [==============================] - 0s 2ms/step - loss: 0.3135\n", - "[CV] END learning_rate=0.0059640580092043885, n_hidden=3, n_neurons=80; total time= 37.1s\n", - "Epoch 1/100\n", - "242/242 [==============================] - 1s 4ms/step - loss: 1.5488 - val_loss: 0.6551\n", - "Epoch 2/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4745 - val_loss: 0.4129\n", - "Epoch 3/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4052 - val_loss: 0.6096\n", - "Epoch 4/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3959 - val_loss: 0.6534\n", - "Epoch 5/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3826 - val_loss: 0.6227\n", - "Epoch 6/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3631 - val_loss: 0.8404\n", - "Epoch 7/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3494 - val_loss: 1.0611\n", - "Epoch 8/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3562 - val_loss: 1.1356\n", - "Epoch 9/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3392 - val_loss: 1.2342\n", - "Epoch 10/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3462 - val_loss: 0.7966\n", - "Epoch 11/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3414 - val_loss: 0.8325\n", - "Epoch 12/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3263 - val_loss: 0.7733\n", - "121/121 [==============================] - 0s 2ms/step - loss: 0.3595\n", - "[CV] END learning_rate=0.0059640580092043885, n_hidden=3, n_neurons=80; total time= 10.5s\n", - "Epoch 1/100\n", - "242/242 [==============================] - 1s 4ms/step - loss: 1.4295 - val_loss: 2.2007\n", - "Epoch 2/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5148 - val_loss: 3.3028\n", - "Epoch 3/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4423 - val_loss: 0.9130\n", - "Epoch 4/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4027 - val_loss: 0.5328\n", - "Epoch 5/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3757 - val_loss: 0.3609\n", - "Epoch 6/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3528 - val_loss: 0.4151\n", - "Epoch 7/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3518 - val_loss: 0.3580\n", - "Epoch 8/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3723 - val_loss: 0.3516\n", - "Epoch 9/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3488 - val_loss: 0.3983\n", - "Epoch 10/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3449 - val_loss: 0.3323\n", - "Epoch 11/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3567 - val_loss: 0.4234\n", - "Epoch 12/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3352 - val_loss: 0.3283\n", - "Epoch 13/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3110 - val_loss: 0.3464\n", - "Epoch 14/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3198 - val_loss: 0.4036\n", - "Epoch 15/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3410 - val_loss: 0.3272\n", - "Epoch 16/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3263 - val_loss: 0.3799\n", - "Epoch 17/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3131 - val_loss: 0.3208\n", - "Epoch 18/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3198 - val_loss: 0.3292\n", - "Epoch 19/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3349 - val_loss: 0.3920\n", - "Epoch 20/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3249 - val_loss: 0.3198\n", - "Epoch 21/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3157 - val_loss: 0.3851\n", - "Epoch 22/100\n", - "242/242 [==============================] - 1s 4ms/step - loss: 0.3267 - val_loss: 0.3165\n", - "Epoch 23/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3089 - val_loss: 0.3547\n", - "Epoch 24/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3027 - val_loss: 0.3383\n", - "Epoch 25/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3001 - val_loss: 0.3046\n", - "Epoch 26/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3008 - val_loss: 0.3033\n", - "Epoch 27/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3129 - val_loss: 0.4726\n", - "Epoch 28/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3148 - val_loss: 0.3564\n", - "Epoch 29/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3084 - val_loss: 0.3612\n", - "Epoch 30/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3026 - val_loss: 0.3348\n", - "Epoch 31/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2914 - val_loss: 0.3270\n", - "Epoch 32/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3091 - val_loss: 0.3581\n", - "Epoch 33/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2987 - val_loss: 0.3579\n", - "Epoch 34/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2860 - val_loss: 0.3471\n", - "Epoch 35/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2861 - val_loss: 0.2955\n", - "Epoch 36/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2805 - val_loss: 0.3529\n", - "Epoch 37/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2907 - val_loss: 0.3019\n", - "Epoch 38/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2889 - val_loss: 0.4124\n", - "Epoch 39/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3001 - val_loss: 0.2924\n", - "Epoch 40/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2854 - val_loss: 0.3575\n", - "Epoch 41/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2698 - val_loss: 0.3458\n", - "Epoch 42/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2768 - val_loss: 0.4163\n", - "Epoch 43/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2909 - val_loss: 0.2994\n", - "Epoch 44/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2941 - val_loss: 0.3417\n", - "Epoch 45/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2775 - val_loss: 0.3091\n", - "Epoch 46/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2749 - val_loss: 0.3967\n", - "Epoch 47/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2777 - val_loss: 0.3104\n", - "Epoch 48/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2726 - val_loss: 0.3149\n", - "Epoch 49/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2771 - val_loss: 0.4344\n", - "121/121 [==============================] - 0s 2ms/step - loss: 0.3036\n", - "[CV] END learning_rate=0.0059640580092043885, n_hidden=3, n_neurons=80; total time= 41.1s\n", - "Epoch 1/100\n", - "242/242 [==============================] - 1s 4ms/step - loss: 2.1527 - val_loss: 0.5753\n", - "Epoch 2/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5713 - val_loss: 8.9879\n", - "Epoch 3/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5292 - val_loss: 11.0986\n", - "Epoch 4/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5126 - val_loss: 1.1306\n", - "Epoch 5/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4298 - val_loss: 0.5258\n", - "Epoch 6/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3984 - val_loss: 0.4499\n", - "Epoch 7/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3937 - val_loss: 0.4056\n", - "Epoch 8/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3816 - val_loss: 0.3998\n", - "Epoch 9/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3687 - val_loss: 0.3957\n", - "Epoch 10/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3701 - val_loss: 0.3903\n", - "Epoch 11/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3540 - val_loss: 0.3688\n", - "Epoch 12/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3396 - val_loss: 0.3651\n", - "Epoch 13/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3673 - val_loss: 0.3709\n", - "Epoch 14/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3528 - val_loss: 0.3817\n", - "Epoch 15/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3518 - val_loss: 0.3623\n", - "Epoch 16/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3489 - val_loss: 0.3671\n", - "Epoch 17/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3555 - val_loss: 0.3671\n", - "Epoch 18/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3620 - val_loss: 0.3606\n", - "Epoch 19/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3404 - val_loss: 0.3552\n", - "Epoch 20/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3444 - val_loss: 0.3535\n", - "Epoch 21/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3381 - val_loss: 0.3520\n", - "Epoch 22/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3313 - val_loss: 0.3475\n", - "Epoch 23/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3414 - val_loss: 0.3510\n", - "Epoch 24/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3382 - val_loss: 0.3303\n", - "Epoch 25/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3398 - val_loss: 0.3687\n", - "Epoch 26/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3262 - val_loss: 0.3247\n", - "Epoch 27/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3448 - val_loss: 0.3387\n", - "Epoch 28/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3375 - val_loss: 0.3364\n", - "Epoch 29/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3318 - val_loss: 0.3381\n", - "Epoch 30/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3302 - val_loss: 0.3207\n", - "Epoch 31/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3299 - val_loss: 0.3219\n", - "Epoch 32/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3205 - val_loss: 0.3150\n", - "Epoch 33/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3228 - val_loss: 0.3451\n", - "Epoch 34/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3197 - val_loss: 0.3161\n", - "Epoch 35/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3166 - val_loss: 0.3141\n", - "Epoch 36/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3178 - val_loss: 0.3860\n", - "Epoch 37/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3101 - val_loss: 0.3703\n", - "Epoch 38/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3264 - val_loss: 0.3507\n", - "Epoch 39/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3117 - val_loss: 0.3165\n", - "Epoch 40/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3008 - val_loss: 0.3450\n", - "Epoch 41/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3140 - val_loss: 0.3187\n", - "Epoch 42/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3160 - val_loss: 0.3180\n", - "Epoch 43/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3168 - val_loss: 0.3146\n", - "Epoch 44/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3092 - val_loss: 0.3508\n", - "Epoch 45/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3166 - val_loss: 0.3053\n", - "Epoch 46/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3002 - val_loss: 0.3306\n", - "Epoch 47/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3050 - val_loss: 0.3347\n", - "Epoch 48/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2949 - val_loss: 0.3169\n", - "Epoch 49/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3179 - val_loss: 0.3020\n", - "Epoch 50/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3039 - val_loss: 0.3487\n", - "Epoch 51/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2901 - val_loss: 0.3301\n", - "Epoch 52/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3165 - val_loss: 0.3419\n", - "Epoch 53/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2997 - val_loss: 0.3096\n", - "Epoch 54/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2970 - val_loss: 0.3108\n", - "Epoch 55/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2968 - val_loss: 0.3390\n", - "Epoch 56/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3191 - val_loss: 0.2996\n", - "Epoch 57/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3056 - val_loss: 0.3667\n", - "Epoch 58/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3021 - val_loss: 0.3209\n", - "Epoch 59/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3065 - val_loss: 0.2985\n", - "Epoch 60/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3000 - val_loss: 0.3234\n", - "Epoch 61/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2894 - val_loss: 0.3296\n", - "Epoch 62/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2929 - val_loss: 0.3483\n", - "Epoch 63/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3018 - val_loss: 0.3123\n", - "Epoch 64/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2895 - val_loss: 0.3890\n", - "Epoch 65/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2815 - val_loss: 0.2960\n", - "Epoch 66/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3098 - val_loss: 0.3287\n", - "Epoch 67/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2980 - val_loss: 0.3136\n", - "Epoch 68/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2931 - val_loss: 0.3220\n", - "Epoch 69/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2926 - val_loss: 0.3211\n", - "Epoch 70/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3128 - val_loss: 0.2947\n", - "Epoch 71/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2946 - val_loss: 0.3640\n", - "Epoch 72/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3089 - val_loss: 0.2997\n", - "Epoch 73/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2985 - val_loss: 0.3048\n", - "Epoch 74/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2992 - val_loss: 0.3782\n", - "Epoch 75/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2867 - val_loss: 0.2945\n", - "Epoch 76/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2932 - val_loss: 0.3943\n", - "Epoch 77/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2829 - val_loss: 0.3327\n", - "Epoch 78/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2832 - val_loss: 0.5901\n", - "Epoch 79/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3008 - val_loss: 0.3370\n", - "Epoch 80/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2846 - val_loss: 0.4870\n", - "Epoch 81/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2772 - val_loss: 0.3033\n", - "Epoch 82/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2749 - val_loss: 0.4514\n", - "Epoch 83/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2686 - val_loss: 0.3127\n", - "Epoch 84/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2911 - val_loss: 0.4717\n", - "Epoch 85/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2885 - val_loss: 0.2894\n", - "Epoch 86/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2715 - val_loss: 0.3572\n", - "Epoch 87/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2717 - val_loss: 0.3123\n", - "Epoch 88/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2865 - val_loss: 0.3326\n", - "Epoch 89/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2812 - val_loss: 0.3392\n", - "Epoch 90/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2712 - val_loss: 0.6470\n", - "Epoch 91/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2968 - val_loss: 0.5428\n", - "Epoch 92/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2954 - val_loss: 0.7819\n", - "Epoch 93/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3134 - val_loss: 0.5395\n", - "Epoch 94/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3144 - val_loss: 0.6116\n", - "Epoch 95/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.2660 - val_loss: 0.4974\n", - "121/121 [==============================] - 0s 2ms/step - loss: 0.3195\n", - "[CV] END learning_rate=0.004591455636549438, n_hidden=2, n_neurons=59; total time= 1.2min\n", - "Epoch 1/100\n", - "242/242 [==============================] - 1s 4ms/step - loss: 2.2993 - val_loss: 0.8898\n", - "Epoch 2/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5586 - val_loss: 0.5270\n", - "Epoch 3/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4526 - val_loss: 0.4844\n", - "Epoch 4/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4289 - val_loss: 0.4250\n", - "Epoch 5/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4117 - val_loss: 0.3735\n", - "Epoch 6/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3892 - val_loss: 0.3859\n", - "Epoch 7/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3723 - val_loss: 0.4576\n", - "Epoch 8/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3751 - val_loss: 0.4926\n", - "Epoch 9/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3636 - val_loss: 0.6246\n", - "Epoch 10/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3692 - val_loss: 0.5262\n", - "Epoch 11/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3671 - val_loss: 0.5952\n", - "Epoch 12/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3472 - val_loss: 0.6355\n", - "Epoch 13/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3456 - val_loss: 0.7437\n", - "Epoch 14/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3353 - val_loss: 0.7102\n", - "Epoch 15/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3649 - val_loss: 0.6823\n", - "121/121 [==============================] - 0s 2ms/step - loss: 0.3613\n", - "[CV] END learning_rate=0.004591455636549438, n_hidden=2, n_neurons=59; total time= 12.0s\n", - "Epoch 1/100\n", - "242/242 [==============================] - 1s 4ms/step - loss: 2.1229 - val_loss: 2.8528\n", - "Epoch 2/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.6059 - val_loss: 2.3412\n", - "Epoch 3/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.5163 - val_loss: 0.9015\n", - "Epoch 4/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4576 - val_loss: 0.8313\n", - "Epoch 5/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4213 - val_loss: 0.5217\n", - "Epoch 6/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3916 - val_loss: 0.4956\n", - "Epoch 7/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3878 - val_loss: 0.3745\n", - "Epoch 8/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.4044 - val_loss: 0.4012\n", - "Epoch 9/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3805 - val_loss: 0.4170\n", - "Epoch 10/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3769 - val_loss: 0.3841\n", - "Epoch 11/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3900 - val_loss: 0.6120\n", - "Epoch 12/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3622 - val_loss: 0.3577\n", - "Epoch 13/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3398 - val_loss: 0.3498\n", - "Epoch 14/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3487 - val_loss: 0.5168\n", - "Epoch 15/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3736 - val_loss: 0.4302\n", - "Epoch 16/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3581 - val_loss: 0.5771\n", - "Epoch 17/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3435 - val_loss: 0.5042\n", - "Epoch 18/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3557 - val_loss: 0.4974\n", - "Epoch 19/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3692 - val_loss: 0.3362\n", - "Epoch 20/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3535 - val_loss: 0.4163\n", - "Epoch 21/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3453 - val_loss: 0.3327\n", - "Epoch 22/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3579 - val_loss: 0.3290\n", - "Epoch 23/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3392 - val_loss: 0.3293\n", - "Epoch 24/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3355 - val_loss: 0.5378\n", - "Epoch 25/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3320 - val_loss: 0.7731\n", - "Epoch 26/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3357 - val_loss: 0.8952\n", - "Epoch 27/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3821 - val_loss: 0.4876\n", - "Epoch 28/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3448 - val_loss: 0.6158\n", - "Epoch 29/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3346 - val_loss: 0.3379\n", - "Epoch 30/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3345 - val_loss: 0.5446\n", - "Epoch 31/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3228 - val_loss: 0.3576\n", - "Epoch 32/100\n", - "242/242 [==============================] - 1s 3ms/step - loss: 0.3450 - val_loss: 0.6983\n", - "121/121 [==============================] - 0s 2ms/step - loss: 0.3341\n", - "[CV] END learning_rate=0.004591455636549438, n_hidden=2, n_neurons=59; total time= 25.3s\n", - "Epoch 1/100\n", - "363/363 [==============================] - 2s 3ms/step - loss: 1.4030 - val_loss: 1.8036\n", - "Epoch 2/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.5715 - val_loss: 2.0827\n", - "Epoch 3/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.4548 - val_loss: 0.3796\n", - "Epoch 4/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.4007 - val_loss: 0.4283\n", - "Epoch 5/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3832 - val_loss: 0.3617\n", - "Epoch 6/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3677 - val_loss: 0.4566\n", - "Epoch 7/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3732 - val_loss: 0.3573\n", - "Epoch 8/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3580 - val_loss: 0.3380\n", - "Epoch 9/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3458 - val_loss: 0.3757\n", - "Epoch 10/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3433 - val_loss: 0.4069\n", - "Epoch 11/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3312 - val_loss: 0.5457\n", - "Epoch 12/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3456 - val_loss: 0.6471\n", - "Epoch 13/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3320 - val_loss: 0.3109\n", - "Epoch 14/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3259 - val_loss: 0.3205\n", - "Epoch 15/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3223 - val_loss: 0.3064\n", - "Epoch 16/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3276 - val_loss: 0.3249\n", - "Epoch 17/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3094 - val_loss: 0.4016\n", - "Epoch 18/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3108 - val_loss: 0.2989\n", - "Epoch 19/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3060 - val_loss: 0.3075\n", - "Epoch 20/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3003 - val_loss: 0.4417\n", - "Epoch 21/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3088 - val_loss: 0.3275\n", - "Epoch 22/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.2949 - val_loss: 0.5035\n", - "Epoch 23/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3125 - val_loss: 0.5620\n", - "Epoch 24/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3031 - val_loss: 0.6288\n", - "Epoch 25/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3003 - val_loss: 0.2932\n", - "Epoch 26/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.2991 - val_loss: 0.7341\n", - "Epoch 27/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3002 - val_loss: 0.5770\n", - "Epoch 28/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3060 - val_loss: 0.4434\n", - "Epoch 29/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.2933 - val_loss: 0.2880\n", - "Epoch 30/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3002 - val_loss: 0.3752\n", - "Epoch 31/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.2915 - val_loss: 0.3097\n", - "Epoch 32/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.2894 - val_loss: 0.3532\n", - "Epoch 33/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.2902 - val_loss: 0.2816\n", - "Epoch 34/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.2826 - val_loss: 0.2888\n", - "Epoch 35/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.2792 - val_loss: 0.3693\n", - "Epoch 36/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.2765 - val_loss: 0.3585\n", - "Epoch 37/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.3013 - val_loss: 0.4163\n", - "Epoch 38/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.2776 - val_loss: 0.2816\n", - "Epoch 39/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.2924 - val_loss: 0.3276\n", - "Epoch 40/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.2806 - val_loss: 0.3082\n", - "Epoch 41/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.2878 - val_loss: 0.3593\n", - "Epoch 42/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.2724 - val_loss: 0.2824\n", - "Epoch 43/100\n", - "363/363 [==============================] - 1s 3ms/step - loss: 0.2836 - val_loss: 0.3462\n" - ] - }, - { - "data": { - "text/plain": [ - "RandomizedSearchCV(cv=3,\n", - " estimator=,\n", - " param_distributions={'learning_rate': [0.001683454924600351,\n", - " 0.02390836445593178,\n", - " 0.008731907739399206,\n", - " 0.004725396149933917,\n", - " 0.0006154014789262348,\n", - " 0.0006153331256530192,\n", - " 0.0003920021771415983,\n", - " 0.01619845322936229,\n", - " 0.004779156784872302,\n", - " 0.0...\n", - " 0.005021425736625637,\n", - " 0.0005703073595961105,\n", - " 0.001151888789941251,\n", - " 0.001621231156394198,\n", - " 0.0024505367684280487,\n", - " 0.011155092541719619,\n", - " 0.0007524347058135697,\n", - " 0.0032032448128444043,\n", - " 0.004591455636549438,\n", - " 0.0003715541189658278, ...],\n", - " 'n_hidden': [0, 1, 2, 3],\n", - " 'n_neurons': [1, 2, 3, 4, 5, 6, 7, 8, 9,\n", - " 10, 11, 12, 13, 14, 15,\n", - " 16, 17, 18, 19, 20, 21,\n", - " 22, 23, 24, 25, 26, 27,\n", - " 28, 29, 30, ...]},\n", - " verbose=2)" - ] - }, - "execution_count": 100, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from scipy.stats import reciprocal\n", - "from sklearn.model_selection import RandomizedSearchCV\n", - "\n", - "param_distribs = {\n", - " \"n_hidden\": [0, 1, 2, 3],\n", - " \"n_neurons\": np.arange(1, 100).tolist(),\n", - " \"learning_rate\": reciprocal(3e-4, 3e-2).rvs(1000).tolist(),\n", - "}\n", - "\n", - "rnd_search_cv = RandomizedSearchCV(keras_reg, param_distribs, n_iter=10, cv=3, verbose=2)\n", - "rnd_search_cv.fit(X_train, y_train, epochs=100,\n", - " validation_data=(X_valid, y_valid),\n", - " callbacks=[keras.callbacks.EarlyStopping(patience=10)])" - ] - }, - { - "cell_type": "code", - "execution_count": 101, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'n_neurons': 74, 'n_hidden': 3, 'learning_rate': 0.005803602934201024}" - ] - }, - "execution_count": 101, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "rnd_search_cv.best_params_" - ] - }, - { - "cell_type": "code", - "execution_count": 102, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "-0.3242675264676412" - ] - }, - "execution_count": 102, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "rnd_search_cv.best_score_" - ] - }, - { - "cell_type": "code", - "execution_count": 103, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 103, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "rnd_search_cv.best_estimator_" - ] - }, - { - "cell_type": "code", - "execution_count": 104, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "162/162 [==============================] - 0s 2ms/step - loss: 0.3104\n" - ] - }, - { - "data": { - "text/plain": [ - "-0.31039538979530334" - ] - }, - "execution_count": 104, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "rnd_search_cv.score(X_test, y_test)" - ] - }, - { - "cell_type": "code", - "execution_count": 105, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 105, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "model = rnd_search_cv.best_estimator_.model\n", - "model" - ] - }, - { - "cell_type": "code", - "execution_count": 106, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "162/162 [==============================] - 0s 2ms/step - loss: 0.3104\n" - ] - }, - { - "data": { - "text/plain": [ - "0.31039538979530334" - ] - }, - "execution_count": 106, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "model.evaluate(X_test, y_test)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": true - }, - "source": [ - "# 연습문제 해답" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 1. to 9." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": true - }, - "source": [ - "부록 A 참조." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 10." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "*문제: 심층 MLP를 MNIST 데이터셋에 훈련해보세요(`keras.datasets.mnist.load_data()` 함수를 사용해 데이터를 적재할 수 있습니다). 98% 이상의 정확도를 얻을 수 있는지 확인해보세요. 이 장에서 소개한 방법을 사용해 최적의 학습률을 찾아보세요(즉 학습률을 지수적으로 증가시키면서 손실을 그래프로 그립니다. 그다음 손실이 다시 증가하는 지점을 찾습니다). 모든 부가 기능을 추가해보세요. 즉, 체크포인트를 저장하고, 조기 종료를 사용하고, 텐서보드를 사용해 학습 곡선을 그려보세요.*" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "데이터셋을 적재해보죠:" - ] - }, - { - "cell_type": "code", - "execution_count": 107, - "metadata": {}, - "outputs": [], - "source": [ - "(X_train_full, y_train_full), (X_test, y_test) = keras.datasets.mnist.load_data()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "패션 MNIST 데이터셋처럼 MNIST 훈련 세트는 28x28 픽셀의 흑백 이미지 60,000개로 이루어져 있습니다:" - ] - }, - { - "cell_type": "code", - "execution_count": 108, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(60000, 28, 28)" - ] - }, - "execution_count": 108, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "X_train_full.shape" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "각 픽셀 강도는 바이트(0~255)로 표현됩니다:" - ] - }, - { - "cell_type": "code", - "execution_count": 109, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "dtype('uint8')" - ] - }, - "execution_count": 109, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "X_train_full.dtype" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "전체 훈련 세트를 검증 세트와 (더 작은) 훈련 세트로 나누어 보겠습니다. 패션 MNIST처럼 픽셀 강도를 255로 나누어 0-1 범위의 실수로 변환합니다:" - ] - }, - { - "cell_type": "code", - "execution_count": 110, - "metadata": {}, - "outputs": [], - "source": [ - "X_valid, X_train = X_train_full[:5000] / 255., X_train_full[5000:] / 255.\n", - "y_valid, y_train = y_train_full[:5000], y_train_full[5000:]\n", - "X_test = X_test / 255." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "맷플롯립의 `imshow()` 함수와 `'binary'` 컬러 맵으로 이미지를 출력해 보죠:" - ] - }, - { - "cell_type": "code", - "execution_count": 111, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAOcAAADnCAYAAADl9EEgAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAAAGHElEQVR4nO3cz4tNfQDH8blPU4Zc42dKydrCpJQaopSxIdlYsLSykDBbO1slJWExSjKRP2GytSEWyvjRGKUkGzYUcp/dU2rO9z7umTv3c++8XkufzpkjvTvl25lGq9UaAvL80+sHABYmTgglTgglTgglTgg13Gb3X7nQfY2F/tCbE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0IN9/oBlqPbt29Xbo1Go3jthg0bivvLly+L+/j4eHHft29fcWfpeHNCKHFCKHFCKHFCKHFCKHFCKHFCqJ6dc967d6+4P3v2rLhPTU0t5uMsqS9fvnR87fBw+Z/sx48fxX1kZKS4r1q1qnIbGxsrXvvgwYPivmnTpuLOn7w5IZQ4IZQ4IZQ4IZQ4IZQ4IZQ4IVSj1WqV9uLYzoULFyq3q1evFq/9/ft3nR9NDxw4cKC4T09PF/fNmzcv5uP0kwU/4vXmhFDihFDihFDihFDihFDihFDihFBdPefcunVr5fbhw4fite2+HVy5cmVHz7QY9u7dW9yPHTu2NA/SgZmZmeJ+586dym1+fr7Wz253Dnr//v3KbcC/BXXOCf1EnBBKnBBKnBBKnBBKnBBKnBCqq+ecr1+/rtxevHhRvHZiYqK4N5vNjp6Jsrm5ucrt8OHDxWtnZ2dr/ezLly9XbpOTk7XuHc45J/QTcUIocUIocUIocUIocUKorh6lMFgePnxY3I8fP17r/hs3bqzcPn/+XOve4RylQD8RJ4QSJ4QSJ4QSJ4QSJ4QSJ4QSJ4QSJ4QSJ4QSJ4QSJ4QSJ4QSJ4QSJ4Qa7vUDkOX69euV25MnT7r6s79//165PX36tHjtrl27Fvtxes6bE0KJE0KJE0KJE0KJE0KJE0KJE0L5vbU98PHjx8rt7t27xWuvXLmy2I/zh9Kz9dKaNWuK+9evX5foSbrC762FfiJOCCVOCCVOCCVOCCVOCCVOCOV7zg7MzMwU93bfHt68ebNye/fuXUfPNOhOnTrV60dYct6cEEqcEEqcEEqcEEqcEEqcEGpZHqW8efOmuJ8+fbq4P3r0aDEf569s27atuK9bt67W/S9dulS5jYyMFK89c+ZMcX/16lVHzzQ0NDS0ZcuWjq/tV96cEEqcEEqcEEqcEEqcEEqcEEqcEGpgzzlLv0Ly2rVrxWvn5uaK++rVq4v76OhocT9//nzl1u48b8+ePcW93TloN7X7e7fTbDYrtyNHjtS6dz/y5oRQ4oRQ4oRQ4oRQ4oRQ4oRQ4oRQA3vO+fjx48qt3Tnm0aNHi/vk5GRx379/f3HvV8+fPy/u79+/r3X/FStWVG7bt2+vde9+5M0JocQJocQJocQJocQJocQJocQJoQb2nPPGjRuV29jYWPHaixcvLvbjDIS3b98W90+fPtW6/8GDB2tdP2i8OSGUOCGUOCGUOCGUOCGUOCHUwB6lrF+/vnJzVNKZ0md4/8fatWuL+9mzZ2vdf9B4c0IocUIocUIocUIocUIocUIocUKogT3npDM7duyo3GZnZ2vd+9ChQ8V9fHy81v0HjTcnhBInhBInhBInhBInhBInhBInhHLOyR/m5+crt1+/fhWvHR0dLe7nzp3r4ImWL29OCCVOCCVOCCVOCCVOCCVOCCVOCOWcc5mZnp4u7t++favcms1m8dpbt24Vd99r/h1vTgglTgglTgglTgglTgglTgglTgjVaLVapb04kufnz5/Ffffu3cW99LtpT5w4Ubx2amqquFOpsdAfenNCKHFCKHFCKHFCKHFCKHFCKJ+MDZhGY8H/lf/PyZMni/vOnTsrt4mJiU4eiQ55c0IocUIocUIocUIocUIocUIocUIon4xB7/lkDPqJOCGUOCGUOCGUOCGUOCGUOCFUu+85yx8HAl3jzQmhxAmhxAmhxAmhxAmhxAmh/gWlotX4VjU5XgAAAABJRU5ErkJggg==\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "plt.imshow(X_train[0], cmap=\"binary\")\n", - "plt.axis('off')\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "레이블은 (uint8로 표현된) 0에서 9까지 클래스 아이디입니다. 편리하게도 클래스 아이디는 이미지가 나타내는 숫자와 같습니다. 따라서 `class_names` 배열을 만들 필요가 없습니다:" - ] - }, - { - "cell_type": "code", - "execution_count": 112, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([7, 3, 4, ..., 5, 6, 8], dtype=uint8)" - ] - }, - "execution_count": 112, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "y_train" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "검증 세트는 5,000개의 이미지를 담고 있고 테스트 세트는 10,000개의 이미지를 담고 있습니다:" - ] - }, - { - "cell_type": "code", - "execution_count": 113, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(5000, 28, 28)" - ] - }, - "execution_count": 113, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "X_valid.shape" - ] - }, - { - "cell_type": "code", - "execution_count": 114, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(10000, 28, 28)" - ] - }, - "execution_count": 114, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "X_test.shape" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "이 데이터셋에 있는 이미지 샘플 몇 개를 출력해 보죠:" - ] - }, - { - "cell_type": "code", - "execution_count": 115, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAqIAAAEjCAYAAADpBWMTAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAABjbUlEQVR4nO3debxN1fvA8c8KmYVMIUOlJIr0/TV8EyXRRFK+GpAmpZTSJDSZmzRLSUSRCpVKs9C3gQqV+VvJVIaSIRTt3x/bs/Y59547n3PWPuc879fL617nnnvuuuvus/faz3rWs4zneSillFJKKZVs+7lugFJKKaWUykw6EFVKKaWUUk7oQFQppZRSSjmhA1GllFJKKeWEDkSVUkoppZQTOhBVSimllFJO6EBUKaWUUko5kfSBqDFme5Z/e40xjye7HWFijJlojFlvjNlqjFlujLnSdZvCwBjTwBizyxgz0XVbXDPGdDHGLDHG7DDG/M8Y08J1m1wxxlxvjJlvjNltjBnnuj2uGWPqGWPeNsb8boz5xRjzhDGmuOt2uaLHR3bGmMrGmGn7zh+rjDEXu26TS8aYI40xHxlj/jDGrDTGdHTdJpdcn0OSPhD1PK+c/ANqADuBV5LdjpAZBtTzPK8C0B4YbIxp7rhNYfAkMM91I1wzxrQBRgA9gPLAKcAPThvl1jpgMDDWdUNC4ilgA3AQ0BRoCfRy2SDH9PjI7kngL6A6cAkwyhhzlNsmubFvgPU6MAOoDFwNTDTGHO60YW45PYe4nprvhP/Lz3HcDqc8z/ve87zd8t99/w512CTnjDFdgC3Ah46bEgb3Avd5nve553n/eJ631vO8ta4b5YrneVM9z5sObHbdlpCoD0zxPG+X53m/ADOBjBxkgB4fWRljyuJfawd6nrfd87y5wBtAV7ctc6YhUBMY6XneXs/zPgI+JXP7AxyfQ1wPRLsDL3i6zyjGmKeMMX8CS4H1wNuOm+SMMaYCcB9ws+u2uGaMKQYcB1TdN4W0Zt+0SWnXbVOh8QjQxRhTxhhTCzgT/0KiFMDhwB7P85ZHPLaQDL5ZicEAjV03wqFHcHgOcTYQNcbUxQ//jnfVhjDxPK8X/rRrC2AqsDv370hrg4DnPM9b47ohIVAdKAFcgH9sNAWaAQMctkmFy2z8QcVWYA0wH5juskEqVMrhHxuR/sC/3mSiZfgzsbcaY0oYY87AH4uUcdssp5yeQ1xGRLsCcz3P+9FhG0Jl3zTBXKA2cK3r9rhgjGkKnA6MdNyUsNi57+Pjnuet9zxvE/AwcJbDNqmQMMbshx+5mAqUBaoAlfBzipUC2A5UyPJYBWCbg7Y453ne38B5wNnAL0BfYAr+ACzjhOEc4nIg2g2NhuakOJmbI9oKqAf8bIz5BbgF6GSM+dplo1zxPO93/BNkZPpKxqeyKKsyUAd4wvO83Z7nbQaeR29UVGA5UNwY0yDisWOA7x21xznP8xZ5ntfS87wDPc9rCxwCfOm6XY44P4c4GYgaY04CaqGr5THGVNtXmqecMaaYMaYtcBGZu0jnGfxBeNN9/54G3gLaumuSc88DvfcdK5WAm/BXfGYkY0xxY0wpoBhQzBhTKlPLFe2LkP8IXLuvXyri594vctowh/T4iOZ53g78aNd9xpiyxph/Ax2ACW5b5o4x5uh9x0UZY8wt+KvFxzlulhNhOIe4ioh2B6Z6npeRUwNZePjT8GuA34EHgT6e573htFWOeJ73p+d5v8g//GmlXZ7nbXTdNocG4ZexWg4sAb4BhjhtkVsD8FMW7gAu3fd5JufMng+0AzYCK4G/8W9WMpUeH9n1Akrj50ZOAq71PC9jI6L4qYHr8fujNdAmonJNJnJ6DjG6YF0ppZRSSrngunyTUkoppZTKUDoQVUoppZRSTuhAVCmllFJKOaEDUaWUUkop5YQORJVSSimllBN51VZL9SX1Js6vp/0RTfsjmvZHdton0bQ/oml/RNP+iKb9ES0t+0MjokoppZRSygkdiCqllFJKKSd0IKqUUkoppZzI2P13lUpV//zzD3379gXgiSeeAOCzzz4D4LjjjnPWLqWUUqqgNCKqlFJKKaWc0IioUiliw4YNAAwcOJBnnnkm6ms//vgjkHkR0auuugqAiRMn8umnnwJw7LHHumySCqH77ruPyZMnAzBjxgwADjnkEJdNSqrFixcD8MgjjwDw7LPP0rNnTwCefvppV81SIbBhwwYWLlwIwOuvvw7A7Nmz+e677wDo0aMHAIceeigAffv2pWTJklGv8dtvv1G5cuVCt0EjokoppZRSygmNiIbAqlWrAP8uFWDIkCEY45fb8jy/bNiRRx4JwODBgzn//PMdtFK5sn79egDuv/9+gKhoaIsWLQA4/vjjk9+wEKhbty4Au3btYsWKFYBGRAHmzp3L6NGjAT9anJUcN3Iu6datW5EiGmG1efNmwD+3rlmzBoCvv/4ayJyI6Pjx4xk4cCCA7QNjDG+//XbM50+cOJEOHToAUL58+eQ0UiXdmDFjABg6dKgdgwjP8+wYZNy4cVFfK126NDfddFPUYxdddBHvvvtuoduiA1FHNm7cCMCwYcN48cUXAdi0aRPgnyTkIBDLli0D/LD4KaecAkCVKlWS1dyE+euvvwBo3bo14F9ARcWKFQFYtGgRBx98cNLbFgZ79uxhyJAhADz55JP28euuuw6Ahx9+GID9998/+Y0LARmIgn/BBfjPf/7jqjnO7NmzB4B77rkH8I+VP/74AyDbuQRgzpw5QPB+W7BgQbYLTjqQY0IGYJng77//BrADg6uvvto+lptRo0YBcMMNN1C/fn0ABg0aBKTXe+p///ufTVGQdJ4lS5bYFIXu3bu7alpSyKBz6NChUf8Hf5AJUK5cOXvekHHJP//8A8Att9zCAQccAMDll18OwLp164rUJp2aV0oppZRSTiQtIvr8888D/t35gQceCPh3IQAnnniinSpKd4MHDwawUyXGGDv9LncgderUoWrVqlHfJ3clP/30k42ISgJ6KpJI6BVXXAFER0LPO+88AO644w4Aatasmetr/frrrwBUr1493s10rl+/flGRUICePXvask0qkKlRYYD+/fsD8MADDwDRU2tZnXLKKXzyySdRj7333nts27YNSK/p2FmzZrluQtLJLEm/fv1yfE7Dhg258cYbox6Ta8zevXtZuXIlANdcc439eqpGRSUa/PLLLwN+xFPOFfK+mT9/fsZEROUcIZHQ/fffnwsvvBDATrk3a9bMPn/KlCkADB8+HICFCxeya9euqNfM6xqdF42IKqWUUkopJwocEX3ppZcA+OabbwAYO3Zsvr5vy5YtwQ8t7v9YiYqVKlWKMmXKAHD00UcDwSg8a2Qw1Ul5BIlWREYtGjVqBPh38VnzPyWnq2XLljZfNJU99NBDQPaFFNdddx0PPvgg4B8Xeenbt6+Ntt91110A9OnTJ44tdePuu+8GsH0BcP311wNBxEPBtGnT7OcXXXSRw5Ykn+SF9u/fP9sxUbZsWW6++WYAOnbsCPgzLQAVKlSwuV2Sn16lShV7Xk4HMsMiOYCZQCJ/UoonFsm1f+aZZzj55JPzfE3JM+7Zsyfz588Hgoha2Mn4QmYfZbHnUUcdxciRIwFo06YN4OcQr169GgiutZIvmW4l8SZNmhT1/5NPPpkXXnghx+d37twZgGrVqgHBeo5IsritsPJ95pGT2qOPPgoEiauFIQeI2LVrlw31ylSKTANMmjQpLaZcJQ1h6dKlQHBRqFq1qh10ysVkwIAB3HnnnVHPk9QFmcaHYPX01Vdfnejmx9V3331nk+CFTAc+8sgj+bogzps3D/BX9P3+++/xb6Qjn3/+OQCPP/64fUzq/cl7b7/9dCJDboTfeustwB9ItW/f3mWTkk4GkZEDgyOOOALwb+SbNGmS4/dmTWM47LDD7IU3Hfz2229RH9Pd3r177XEg9VIjSTrXa6+9BmDT4yKdffbZgF+TeMKECfZ1AbZu3cpRRx0V/4YnyO7du7nyyiuBINgh74dx48Zlq6xRu3Ztew2S31Mq1bz//vtJaXOyyHtCgmD5/bs2aNAA8FPgGjduHPW1oowHQafmlVJKKaWUI/mOiL7yyitAMPKVKfSc7qL//e9/A8HCk9x88MEHNjT8008/AfDxxx8D/nSbJBmn8jS93F1JJE+ioJFT8BLhfOaZZ2yUUyKiU6dOBaJLO6VqPdHhw4ezc+dOAEqUKAHAG2+8AZDv6UGZsv7tt99sdCc/x1rYSXqBRHnPPfdcO7WkkdCAzKrIx/322y+tInr5IYsHPM+jadOmAMycOROIvXDvzz//BPxFGzJ1LecfOb+ksxo1agB+9CvdzJs3jwEDBsT82kknncSbb74J5L4QTaKEY8eOtYvZZMe2VLF7927AT22SSKiMVaSclRwHWckYZ+3atUAwa7Bjxw7Kli2buEYnmaTqSJrgyy+/bMtZxSIpGbfddhsA27dvtyUFJdJe1GuTXtmUUkoppZQT+Y6IfvjhhwB2/1FJ8o1HqY8WLVrYkgmSpyK5lB9//LGNlvbt27fIP8u1hg0b5vg1iU4cccQRNodHkqojox8SGU7VgvZfffWV/bxdu3YAtGrVyj4meUlZc4nBL0YMRJWf6dSpEwD16tWLd1OT7ttvv436/1VXXUWtWrUctSa8JNdN+bMkcn6IjITK7NWCBQsAuPTSSwH/3Cq55nK+TTdy3owkkbETTjgh2c1JGMnllAhVpJNOOgnwr91Z9wZPVxL5HTFihJ1NlFmCnCKhInJBNQQbqqRTNBSw0c/ly5cD/mY5UupLyjfNnj3bHlNyzd2xY4d9DZmx/u9//wtgZzgLSyOiSimllFLKiXxHRA8//PCoj/Em+/7KamopsApBNDAdIqJi9uzZgB+dkMim5JEuW7bM7h2+YcMGIFjhVq1aNd55551kNzdhJKdHfPnllzbXKT+rFWvUqGErDKSyGTNmAPDLL78AQf7vOeec46xNYbZ+/XrXTQgVKa0SSSKhscrPyExErBXW6SDWZh/pkEMuJEol5z7Ja4Qgb0+igwWNhq5YsSIq+gVwwAEH2Gt0GG3evBmAW2+9FfC3qJQC9QcddFCe379+/XpeffXVxDUwRCRSLCUCu3TpYktbycfcNsT4v//7P9q2bQsEK+l79uxZpPFZ+hSOSzFSj/WZZ57JtrOS53l2ACpfk+n43r17Zys9kWpuv/12evToAQQh/tNOOw3wp9wLUgriqquuylZKIhVlXSxywQUXALH3Cc/NP//8o4uaMoRMHUIw+DjmmGMA/wKR9cIqA5LevXtz3333Afmr1Zsu0ikNQdKRIgegQurpFjZt7umnn7bXH1GrVi17jIWR1DuVxc7NmjXjzDPPzPH5kv41btw4wN93/YcffkhoG8NCgmD5rUfdsmVLALub36GHHhr3VA+9YimllFJKKSdCExF96qmngKBUQCRJhJVFLs2bN09ewxIsMuIV63O5C5W7l1SPhgL8/PPP9nPZDUQioxAsJpAyE2vXruWxxx6L+VrpsutF1sLbsQpOx/LZZ58B2GmoNWvW2DIklStXjmMLw+Ovv/7KVlYmt0WA6eq5554DoHHjxnYqVRYPfPrpp9mi6fIeuuqqq5LYyuSbMGGCjZCJcuXKUaxYMUctiq8pU6bYxbyibNmynHjiiUDhI7+SFiRlBCMVdS/xZFu9erU9D2Yt6/bGG2/YnRvlOKlXrx6333474C90grwXN6Wa6dOnA0GJQFl4HovnefZ8ITv65SZyo53C0IioUkoppZRyImkRUVlcMHHixJilNXJbfCB3+5JHmPVuNxVdfPHFAKxatYpNmzYBQcmq7du32+dJLlc6RELF5Zdfnm2LQdGlSxe7H7JEMIYNG5btebJP8llnnZWgVibP77//bsuj5ceOHTvsrIBEBiNLXcl2vJL/lG527NiRbQ/x008/3VFrkk+K0UueeU7RCHlcFumkeyRUyu8899xz2RZB3nTTTWlTBu2nn37KVtqucePGvPfee0V63WeffRaILtMjuYASLQyr+vXrA8ECnHvvvdfukR6LXGNkcfQ111xj95qXiKiUv0oHGzZs4MYbbwSwv6fMmJQsWdJujyxF///44w/KlCmT79cv6FqGrBI2EP3ggw+AYDp99OjRQNF2arj88suL3rCQkCn3yARwGYj279/fhtFlJZqslE/V2qGRateuzR133JHv58eq43bDDTcA+d+JKcz27NkTdfORk0mTJgH+ysZly5bl+Lx0uFHLTaybVlkFnq5++OEHe/6TGrpy8o+8CPzf//0f4Nfllb3oP/roIyCoQiE1oNONDEQjawzLQOrQQw910aSk6dChQ6G/V25YZAFPJEmTat26daFfPxnkPXDPPfcA0KhRI3sNFTLV3rlz55i1ZKUqgOxSJrWKc9qxKhXIoPOYY46x1wVZxCa/1+WXX25TwXr16gX4qV5SdeGyyy4Dct896dprry1SO3VqXimllFJKORHXcNKKFSsAP8wtd+Gx1K1bF4BKlSrZxyRELuVEJEE2MvKTKgnTGzduBIKSS/klCy5ee+01W3pCdoWQfXP79OkTp1amjsg7Mfn8sMMOc9WcuCtTpgxHHHEEQLZI59atW3n55ZcBuPrqq/P1eum+57qcKyCos5pOqSuRZMFFt27dsk03i+OPP94uUJGIRuXKle3UpCzok6m5WDU200Gs3V3kGiM796Wrf//734X+3rfeegsI0sAiSTpcquncuXOuU/OxbNu2DQgWjuZ3wWiYDR48GPBnySQ1RRYhxaqrK4vGf/zxR9544w0gSAGSndlikfNOYWlEVCmllFJKORGXiKgsPpKCpz/88APlypUD/B0ZINjDtGbNmjYJWCKjscj3QZDTkAq7zMyePdvmdUqEU/YDLgjZMUOSh3PLCUx3keVEzjjjDMAvWJwuypYta48V+TsPHDgQ8JPMpUhzfjRt2tTuJZyuIhd2ScQrXUrzCHnfd+vWDfB3IJMC9rJnuuwPfeqpp8Zc/Ce5blKuZejQoYC/e5nkkqYTifhGkh1g0t1dd90VVQIvL5s2bbLlv2SBTyTJqe3atWt8GpgCZCZTygtK+cBU9vrrr9vPJbIpC31z06FDB7v4Tfaczy0iWlQaEVVKKaWUUk7EJSIqRbVli6z27dvbqGBBtwWT/ZFXrVplH5OVj7IXexjJ3VTPnj2pXr06ULhIKPjlM3r27AkUvVBsKpNVflu3brWPpWuOrPy9ZaXil19+ma/vk9WiUppn0KBBMfcdTwe//vorEGyCkM4WLlwIYPNC69ata1e95zc/Wkr8fPHFF4BfnSHyY7qQc+/vv/9uH5PcRpmlS3fr16+3233GKlMlUT6ppDBq1CjWrFmT4+tJhY569erFuaXhNWvWrKj/p0OFGhk/eJ5XoA1OOnfubGe6ZbtXuQ5XqFAhzq2M00BUdnWRKaOilDtYuXIlEFx0IDVqBE6bNg3wp1ZbtWpVqNdYsmQJ4O8jLFO0MtDIxJ1jZDC2atUqO/WYrrsFyeI0GUTKLic5kf2kpR5tKqStFJUs1pIyPRD8/ulKLiQXXHBBgRbobd26lQsuuAAIyjalK5mSjtyVT2ogSnm3PXv2pEWpN/Cny2UB4zfffAPA8uXL7eA71jly8+bNQHB9jUVS5bp06ULjxo3j2uZUkHV3u3QgKRabNm3ioYceAoKUntzOJ8WKFbPXXDnfylS9nFcivfvuu0VKg9GpeaWUUkop5URcbhHlDiwehV9lml9UrFjRFi8PsxYtWgB+BEMKKkvJpSOPPNLuhCMk9WDOnDlMnToVCPaC9TzPRkJlKjpWIn666927t/1cFr/961//ctUcJ3r06GEXnVxxxRWAX8Iq3Us0RZIpRNkcA4JZknRdjHLMMccAQTm7yCnm/v37A9jFSxBEvGQm5eKLL7bTsXIuadSoEZBeC/1yMmPGDCAoZTZw4MCY5YlS0UEHHWSvtTIjsHv3bls+Mb9KlCgBBClvEmWVUnIq9clGB1988YXdaU9KwknUO9Y59NFHH7WpcZKicO655+b4c2655RaNiCqllFJKqdQTmqSZJk2aAME2l+KMM87gxBNPdNGkApG7yvPPP99GNqX0ijEmW8FtiVZs2rTJ5oFFbtUnd7ypEA1OlMgC3hIhyhRSdLhXr15pV5qooCRZXhZjQFCgvKh7HIeVRBceeOABwD8PSI7X2LFjgeiFoLLxhbxnImdVjj/+eCDYSzzdoukyIycl/yK3uJWoX7rsMy+ktJDMtC1evDgqdzovjRo1smWbLrzwwri3Lx3ImpdUJotgH3nkEXsele2kZRGjfIwUef6Q944sGo+lqDOVoRmISq1EWdEpJ5VUWyX99NNP20FmZPK8fC5/3MjBpyTWy2C2X79+nH/++UlrcyrIlMFYrH3UVbQWLVrQvn17181ICjknNGzY0A405BiJrBGYVcOGDbnkkksAuO222wBi1hpNB5KmIekLXbt2teksUr0lkTUQXZo7dy4A69ats3UiZY90GWAMGzYs2/nzwgsvzLWOt4IGDRq4bkKRSfrOvHnz7I2oBMq+++67HL+vZcuWdlpfziO5kZvjwtKpeaWUUkop5YTJo05lUopYTpo0yd6xli1bFoAxY8YAFHi/2CziPW+Xr/7YtGkTEOyOAzB69GjAL80E0TXKZCFSEko0OemPwqpfvz7gR8slmiMLNWS3mCJKqf5IgkTMc2ufRCt0f0hJu6yLQj/44ANbu1hmUiQKmgCh6Y+Q0P6IlrL98eCDDwJw6623An66AxS5fnnK9keCxOwPjYgqpZRSSiknnOaIyg4p999/v414SbHUIkZCnZJo56hRo+xjkZ+r/JHyTYMGDbL5cfvtp/dOKjNJ1FNyvZRS8Sc7B5UvX95xSzKHXtWVUkoppZQTTnNEZYX8yJEj7SrHNm3axPNHaH5GNO2PaNof0TRHNDs9RqJpf0TT/oim/RFN+yNazP4IxWKlBNKDIJr2RzTtj2g6EM1Oj5Fo2h/RtD+iaX9E0/6IpouVlFJKKaVUeOQVEVVKKaWUUiohNCKqlFJKKaWc0IGoUkoppZRyQgeiSimllFLKCR2IKqWUUkopJ3QgqpRSSimlnNCBqFJKKaWUckIHokoppZRSygkdiCqllFJKKSecDESNMZWNMdOMMTuMMauMMRe7aEdYGGMmGmPWG2O2GmOWG2OudN0ml4wx1xtj5htjdhtjxrluj0vGmJLGmOf2vU+2GWMWGGPOdN0uV4wx27P822uMedx1u1zS82k0fc9kZ4w50hjzkTHmD2PMSmNMR9dtcs0Y08UYs2Tf++Z/xpgWrtvkiutzSPFk/rAITwJ/AdWBpsBbxpiFnud976g9rg0DrvA8b7cxpiEwyxjzjed5X7lumCPrgMFAW6C047a4VhxYDbQEfgbOAqYYY5p4nveTy4a54HleOfncGFMO+AV4xV2LQkHPp9H0PRPBGFMceB14GmiD3y9vGmOaeZ633GnjHDHGtAFGAP8BvgQOctsi55yeQ5K+xacxpizwO9BY3gTGmAnAWs/z7khqY0LIGHMEMAu40fO8KY6b45QxZjBQ2/O8y1y3JUyMMYuAez3Pe811W1wyxnQH7gYO9TJ0r2I9n+ZPJr9njDGNgc+B8vI+Mca8B3zhed5Ap41zxBjzX+A5z/Oec90W18JwDnExNX84sCfLndhC4CgHbQkNY8xTxpg/gaXAeuBtx01SIWSMqY7/HsrUaFek7sALmToI3UfPp3nQ90xMBmjsuhEuGGOKAccBVfelKawxxjxhjMnU2Tfn5xAXA9FywNYsj/0BlHfQltDwPK8Xfh+0AKYCu922SIWNMaYE8CIw3vO8pa7b45Ixpi7+FON4121xTM+nudD3DADLgA3ArcaYEsaYM/DfO2XcNsuZ6kAJ4AL8621ToBkwwGGbXHJ+DnExEN0OVMjyWAVgm4O2hIrneXs9z5sL1Aaudd0eFR7GmP2ACfh5PNc7bk4YdAXmep73o+uGOKbn0xzoe8bned7fwHnA2fg51X2BKcAah81yaee+j497nrfe87xNwMP4ucSZyPk5xMVAdDlQ3BjTIOKxY9Bpk0jFgUNdN0KFgzHGAM/h38l32ndhyXTd0Ggo6Pk0Jn3PRPM8b5HneS09zzvQ87y2wCH4i3Qyjud5v+MPwiNTejI5vcf5OSTpA1HP83bgTz3fZ4wpa4z5N9AB/8414xhjqu0rI1HOGFPMGNMWuAj40HXbXDHGFDfGlAKKAcWMMaX2rfzMVKOAI4FzPc/bmdeT050x5iSgFrpaXs+nOdP3TARjzNH7zqNljDG34K8SH+e4WS49D/Ted/2tBNwEzHDcJifCcA5xVdC+F35Zng3AJODaDC414uFPw6/BX7n2INDH87w3nLbKrQH40yd3AJfu+zwj83f25UL2xM9j+iWifuYlblvmVHdgqud5GT/9vI+eTyPoeyamrviLYDcArYE2nudl8jqEQcA8/GjgEuAbYIjTFrnl9ByS9PJNSimllFJKgW7xqZRSSimlHNGBqFJKKaWUckIHokoppZRSygkdiCqllFJKKSd0IKqUUkoppZzIqzZjqi+pN3F+Pe2PaNof0bQ/stM+iab9EU37I5r2RzTtj2hp2R8aEVVKKaWUUk7oQFQppZRSSjmhA1GllFJKKeVEJu/frZRSKs38888//PTTT1GPjRs3jqZNmwJw4oknAnDQQQcluWUqFQwY4O8mvWnTJgB69OjB8ccf77JJaU8jokoppZRSygmNiCbZ/PnzAViyZAkAv/76K8uWLQNg9uzZACxfvpzatWsDcNdddwFw1VVXJbupzvTu3RuAJ598EoCPPvqIVq1aOWyRUqlBIoFvvvkmU6dOBWDWrFkAGJN9werHH38MQMuWLZPSvkSaN28eAPfffz+vvfZatq97nr/guFq1agD2OSeffHKSWqjCauHChfYau2jRIgB2795tP0o0vWTJkk7alywPP/wwAK1atbIzBsmYOdCIqFJKKaWUciLhEVG5C508eTIA9957r40AxnLEEUcA8OGHHwJQvXp1ihdP/cDtjBkzAOjYsSMAe/bsAaKjFNJXxhjWrl0LwPXXXx/1/GuvvTY5DXZI+kQ+vvfee2kfEf3ll18AeOedd4AgYr548WLefvttAPr27QvAWWedxZFHHglA6dKlATjggAMA2Lt3Ly+88AIAO3bsAKBnz56UKFEiGb+GckSOmzvvvBMIojqQ/f0U6bzzzgP8iFCdOnUS3Mr42rlzJwCXXnopAO+++y4Af/75p33O2WefDfhRnW3btgHw8ssvA9ChQwcA1qxZY99HKrP069cP8McnWfOKxbhx4+zzDj/88GQ1LeFkjPXoo4+ycOFCAFavXg1AxYoVbfS3bt26AHz++ecJa0vCRnj//PMPEEyv3nDDDfZr++3nB2LLli0L+IMsOanIIFWmphs3bswHH3wA+IPSVCXTQHv37gWCi0L58uU57rjjop579NFHs337dgAmTpwIwKRJkwC48sorM25Q8d133/H3338DpOXvPn78eHr06AHEHizIYw899BAQTJ8AHHLIIQB28Dlnzhx70hQtW7akSZMm8W+4cuqvv/4C/ONBBqCxjp/c/PHHHwA88cQT3H///fFtYILJQPKTTz4Bgpv0c845h5NOOgkIplKLFStmr0lyDn711VcB/3e/9dZbk9fwJJFz5urVq7n33nuB4DyRmxtuuIG7774bgEqVKgEFP67CbPv27TZt5amnngJg69atOT7/qKOOokKFCklpWzJs3rwZgJtvvhnwr69ZyXkBYMuWLQD2PfXSSy9Rr169uLZJp+aVUkoppZQTRqaDc1Do7aSeeeYZwJ8WjFS8eHF7tyVlEn7++Wd7Nz569GggmIoGPyoK8OmnnwIU5O4kNNtrSYTzrLPOAoLo7siRI230N5bbbrsNgAcffBDw79579epV2GaEpj9yI9FziaZ7nmfv0MqXLx/PH+W0P9atWwdAkyZN+P333/0GxYg8yNSITB3lFp3wPM9+vUqVKoA/pVK/fv38NMn5Fp8TJkwA4Isvvij0D5TZleeff94+JtGwQgjde0bO2SNGjACgf//+UWk9OT1fFj4CDBo0KOpr9erV46233gKwaR85CE1/yLlAopmRv19uZMGopPv0798/2yxCAYSmP+QYl/PEmWeeCcCKFSsK3RhJY7jwwgvz+y2h6Y+c9OrVi1GjRuX5vFq1agH+9Uiuw4UQmv6Q2dWnn34agM8++yzbc+Q9ValSJXbt2gXAhg0bop7Tp08fOzsn0dKKFSvmtxm6xadSSimllAqPhOSI7t2715YMyeqOO+6wkVBRp04dnnjiCSAoI3LjjTcCsH79epvDIEnoqZivUa5cOSD4vSRClVs0NPL7xLRp04oSEVUhIsniclcJweKRe+65xz4mkc2NGzfa51922WUArFq1KtvrVq5cGQiiGfmMhobC3LlzARgzZox9LLdoX+Rzsn5d/n/YYYfFu5lOyIICmTWSj5Ekd6t9+/Z2YeQpp5wS9ZwVK1bYiKhYtWoVP//8M5BnRDR0CrqARHLyJb86XXz77bcANGvWLNvXJLc+8trZsGFDICjcLh+3bNli82iHDx8OQJs2bQoS9Qolef/I4s+cyPika9euQHosUHr99dfp1q0bkPt59PXXXwf8cdj69euBYMGf9N/s2bPtwlkpOTlmzBiOOeaYQrcvIQPRDRs22MU14qijjgL8xTa5kSmAkSNHAtjOSBedOnUq0vfntLJPpZ7I6SFZuCcXEVkBDPCvf/0LCOokvvnmmzEHoEJublKx0oAsxBo8eLCttPHbb78BuZ9AN27caBceCLnpu++++xLR1KTyPC/XAaik/AwbNgwgIxanSfpXrMUWuZGL59KlS+PepmSTAePy5cvp0qVLzOccffTRdrGSLPCKRdJhBg0aZAdr33zzDeCngcixlSpkDHLNNdcAweItSd2JVKpUKfu+kioMsqg6lcl0fLdu3cgpDfPSSy+NuYhN6oc2aNAAgAULFgB+astXX30V9dz27dvnek3KS+r3tFJKKaWUSkkJiYhOnz7dfr7//vsD2MVIsvAiLy+99BLg7wssNRbHjx8PwC233EKxYsXi1dxQkkTiadOmRT2ebtNJmUymTOfNm2cXs+W24CLWFHWpUqUAP+UF/PeZTKG8//77gD+tliokMly2bFm7w1Z+vP/++zYiKtOPUp4ka3pLKoks0RQrEgr+TkFSpziTXHTRRYX6PomMRS6ITTVyvrj66quBoE53pOuuuw7wF7wefPDBOb6W1BuWxW95TV2ngsmTJ9sUttxKM0m/3HrrrXbqOh2MHTsWCGaFIq8ZMgZ78cUXgdipHJFkyl3KnWV9PfDrYEs6VV6z3rFoRFQppZRSSjkR14io7FwRWXBbkuclhym/5Pu6d+9u79Qk6nPeeefZHZjSiSzGmjFjho2MSYF/ifJkXeilUpcsBNiwYQPjxo0D8lc4um7duvYu9pZbbgGCYsPbt2+3pTVkt51UiogWliTZQ7AYJa+FgKlA8q769++f7WtSwF2iYip/ss4ypSJZOxEZCZXZR5kJkOMjt2goYPdYj5zJFLJA6cADDyxSe5PlzTffBOCSSy7JV8k2KeVVrVq1hLYr2SQ6GbnLWM2aNQF45ZVXALJtpJMTWbQ1cOBA+zpS5mn58uWAP7sgUfrC0IioUkoppZRyIq4RUclnWrlyZdxes1GjRtkeGz16dFTUNRVJH3366ad2X/GZM2cC0ftEC7m7bdGiRZJaqJLlrrvuKlC+W+PGje2KxtzIcZUJnnzySRtNPvnkkx23Jn5khXfkilfJ8ZIcwMKUW5LXi3zdPDY3SXlSnkpmH0TTpk2T35gi2LlzJ+eee27UY0cddZSdOczv7KNcgyQqGKlt27ZAUIUh7H0klRP+85//ALlvYHHOOefw3HPPAUFpvFikSklk5Z5jjz0WCPdsy59//mnzoCPJzEl+I6FCouFSDrBBgwY2EhpZqUFW3vfp06fAbU7YXvNCdifIZL/99hvNmzcHgt10su57nBOZXj3jjDMS2ELlUr169eK2d+/ixYvt56lWD7IojDF2IJoO+2JLzVgpURT5O0mJu8L+fQcPHpytj1q1apWt3mi6kTJgsjinXbt2AJx++unO2lQYkyZNsgMBmY4fNGhQgdLfZsyYYadcI/cVF5IGF/YBqJDraKzSTELqYY4dO9Yu8pQFnbKLXyQZoEcORKU/unXrxvXXXw8ENVrDomfPnnz99ddRj3Xo0CHfO49lVaZMGQAuuOAC+5gcf5FkkWxh6NS8UkoppZRyIq4RUSmeGqlHjx7x/BEpadu2bYUu9iqRi3QorptfWacN033KMB5kGuntt9+mevXqQJDOkc5k6jrS5s2bAT8yAP4UpEzdyftpwIABNqIRRhKNiZw2lWLkkbtuFcQVV1wBRG+WIG6++WYb+UhHc+fOzbazzAMPPACEL6KVl8holKRnyI5sebn99tsBePbZZ2NGQgGqV69O48aNi9bIJJNFSrHIYk0pP/Tqq6/axTyffPJJgX6OFHVfsGABrVu3BvwNA8JA0hWlLBMEC9WmTp2akJ8ZeW0uSrpk5oxulFJKKaVUqMQ1Ivrjjz/G8+XSxoEHHmiTeteuXQsE+So1atSwz5PC/U8//bTdylNydYQkkaezWLl+sk2jRDGUT3KizjnnHMC/Q5VjSrZmS0Vbtmyx0QfJ7ZNk+UjvvfdetseeeOKJbI+1bNkSCCJHUrImrGJFMGSRUmEjl3PnzgWC/FMI+iWVF0Fu2LABgDfeeAPwo31ZcwWXL1/O7t27geC88tprrwF+6ZlUyYXM6rDDDsvzOVu3brXlzZ599lnAf3/lZPLkySlTrklImalYZLZISj5u2LCBXbt2JaNZSfXtt98C0dfNvIrVF8by5cu58847s/2sokj4YiXl7+wiO0Xlx5VXXpmttpskU7dp0yajpumFVGRQPqnZ2717dwA2bdoE+CcGuclJRV9++SXgT51/+OGHQOwdpXIjg6vIAWms6hthJlOGkVNfI0eOLNRryeKmFStWZPuaTO0ecMABhXptV3bu3Mndd98NwOOPPw5gB5o5kfOmLPCR/deHDRtmV6HLDV3Xrl3tglIZyKxZswYI+jMMZGDZvn17Oxj773//CwRT0V9++WW+FpLI4q3jjz8+AS1NrFh7pQsZdOc2+DbG2PeApCykWkqY7DxpjKFJkyYAtjpAPD311FP88MMPUY9Vq1bNViwojMwb0SillFJKqVBIWERU9oyuU6dO3F87HXdVilS5cmU7bSQ75she0q+++iqdO3d21jYVDrKjSuSOQuCXF5EoVyqSfa4/+OADO+0oESz5f2Qps8GDBwN+iRV5X8TadzvVFLUU1Y4dO2w9PzmXRL6W7JISWZIlFciisyuvvNJGzyUFRc6VrVq1yrZItkaNGowePRoIor+S5rNgwQLbR/Jx3bp1/P7770AQVZKIj+uI6KGHHmo/l/SVU045xe6+V9gyOrK7kJQ2ygRyrixXrpxNRxg6dCiQewS1WbNmVK1aNeHtK6xevXoBRdsR69dffwWCVJ5BgwYB/s5MWc9LpUqVyldt65xoRFQppZRSSjmRsIioVPbfunVrob5fdsF48MEHs33N9R1pXmTP1eLF/e4tyh2m5O18/vnngJ/PpBHRzCQLMK644gobORRHHXUU4EcIi3Jn6pr8Hn369LF34DK7EsuoUaOAYKFfppN8xttuuy1maSvwNxlJtbJ6H3/8MRBEsJYuXcpll10GBJFNOe9K3jQEO+C89dZbNm9OSAH/1atX28LmV155JQD9+/e3kdMBAwYA0Ldv3/j+UoV0+eWX2xxiWXuQ20LhAw880P6uUsLq/fff56mnnop6XrrPNMYiG8Z4npevxdYSCezevXuoz7PHHHNMkb5/wYIFNm9aNuHJTfv27Yv08zQiqpRSSimlnIhrRDSysKuscpZ8i6x74+bl0ksvBYKSBIDdSzfMKzw3btxoV15efPHFANx4440Feo2///7b5jNlXW0vd/0q9ckqx3feeSfXwsr/+te/APjiiy+AYIV8JCldE6+tQl2R2Y7CzHqkWpSvoCR/sVOnTtm+JucYmUnKKRoKflRMSkGlCvndly5dCkDjxo2pWbMmEETRpSTP1q1b7e8nhc5zK9B+8MEH2+0u5dz9zDPPhLa0VbFixexsgazs//777+3so+Q2nnnmmYD/vpCi7mL48OH2c+mrVH7/yGYNMiOQX1lXf+ekZMmSAFxzzTVAwa/pyRC5yl/y5BctWgT45eq++uorIIjqRl5z5Poxa9asqOfk9XOkvKSM8worrgNR2flDDgoIagDm17Bhw4DgogvQsGFDINgppVixYkVqZyJ9++23NoleksY3btyY65t82rRpQHS9RJkmyFq65tFHH01Mw1XSSO3LyGMitxJFslAt8jlyYpQbllQfgBaUXGxl33BIr0UWJ598MhBdcknKUclUmfztFy9enOvxI1+Tc6vsrpNKstaQ/e677+zCJSGLeIYPH24HDPkluyvJgh2Zjg+r+vXrA0Gg4rfffrPpcFLGKtZCYaklG7mg6cQTTwSia1qnGrmBkGCYDMDioVmzZsycORMIjo8wilzg+NhjjwFBeuDgwYPtjYo8L9bOWvldJBnvmxedmldKKaWUUk7ENSIqEYnGjRvbu1UJfcu+zjfffDOHHHJItu/94IMPAGyRYrm7a9iwod0bOcxT8qJGjRp2lw4prTF06FCGDBkCBHcasSIYsR4rXbo04PcbkG2KJd3s3bs37dMP5O461l1nfsr1GGNo3rw54JeqyUTy3lq1apXbhiTItddeCwTlrDZs2GCn27NOu0ceM5Gfy5T1JZdcAgTnkFQkEcqbbroJ8I97KVckCzolFUoezySVK1fO1/Puv/9+gKidhXr37p2QNiVTrVq1gOD98tZbb3HLLbcAweYfuSlRogTHHnts1GMyA9uuXbtQR0KFRCklPQf8XcPA34yhoBuDCJl9k2tOixYtbCQ0Xrv3aURUKaWUUko5YfLYxqpQe1z9+uuvnH766QDZ8ngaNGhgi62K8ePH87///Q/Ifvfy5JNPZnt+AcRnI9RAvvpj/vz5QFAAdubMmbluUSl3KJLj9NNPP9m71PPPPx8IcsaKyEl/FMTatWuz5Tbtv//+dtGBHFdxkvT+2LZtG6eddhoAX3/9dfCN+bhbjfUcWbAhOVGVKlUqaJsjxbs/IAHHCARJ9dKXJUuWtJFCWdwVJ07fM7KIoGPHjrm/6L5jo3z58oCfKzdx4kSAeC9MctIfMkMm22zWqlXLbnTgWOjPqRDkFcsMysqVK22eqeSNxqkcUWj6Q3LrpbSbXFPLlCljFz6LUqVK2QXScZa0/pDtXocOHWrf87IIb9GiRXa7cImGy6LX4sWL2+uILH7bb7/9bH/JGp2zzjorHu2P2R8JGYhCsM+t7OebdUCak8MPPxzATsfXqVOnKHurh+JNMWfOHHtRkJXSbdu2BfyBpvx+5513HgDLly+3YfA4C0V/5Gbbtm22vp0cA3fffbddwRpnSe+PhQsXZpsCgpwHoueee64dfMtzHnvssWyrPdevXw8UOZk+5QairVu3Bvy95CMrbMSR0/eMLMqaOHFirit15diQXYASuAI69OeQJEuJ/pApeVnlDMEAVHakipOU6I8kCl1/LF++HAjSGMqXLx+1wDzBYvaHTs0rpZRSSiknEhYRFZIsK/uWjh49mjlz5gDR9dkuv/xyINgJQ8oOFFHo7kYc0/6IlvT+WLdunV008sorr9jHy5QpA8Bdd90FBLvDVK5cOdt74Y8//rAlWr7//nsgmI4uV65cUdqfshHR7t27M3bs2ET8KH3PRNP+iBb6/li7dq1NYZFyYO3atbPpTnEuhxj6/kgy7Y9oGhFVSimllFLhkbC95u0P2BfNkfIK9913X6J/pFKhVbNmTbvrhXwsqMgyZqlQViQRZFMAUdS9jpVKV6tXr47aGAGgZcuWod4YRmUWjYgqpZRSSiknEh4RVUqpeJPNM5o0aQIEFSeUUtFOOOEEW5ZHqTBK+GIlxzRROJr2RzTtj2gps1gpifQYiab9EU37I5r2RzTtj2i6WEkppZRSSoVHXhFRpZRSSimlEkIjokoppZRSygkdiCqllFJKKSd0IKqUUkoppZzQgahSSimllHJCB6JKKaWUUsoJHYgqpZRSSikndCCqlFJKKaWc0IGoUkoppZRyQgeiSimllFLKiaQPRI0x1xtj5htjdhtjxiX754eVMaaLMWaJMWaHMeZ/xpgWrtvkgjFme5Z/e40xj7tul0v6nolmjDnSGPORMeYPY8xKY0xH121ySd8zsek5NWCMmWWM2RVxjCxz3SaXtD+iGWPqGWPeNsb8boz5xRjzhDGmeLJ+vouI6DpgMDDWwc8OJWNMG2AE0AMoD5wC/OC0UY54nldO/gE1gJ3AK46b5Zq+Z/bZd3J8HZgBVAauBiYaYw532jCH9D2TnZ5TY7o+4lg5wnVjQkD7I/AUsAE4CGgKtAR6JeuHJ30g6nneVM/zpgObk/2zQ+xe4D7P8z73PO8fz/PWep631nWjQqAT/ptjjuuGuKTvmSgNgZrASM/z9nqe9xHwKdDVbbNCQ98zPj2nKpV/9YEpnuft8jzvF2AmcFSyfrjmiDpmjCkGHAdU3TfNuGZfWLy067aFQHfgBc/zPNcNUaFmgMauGxESGf+e0XNqjoYZYzYZYz41xrRy3ZgQ0P4IPAJ0McaUMcbUAs7EH4wmhQ5E3asOlAAuAFrgh8WbAQMctsk5Y0xd/OmB8a7bokJlGX7E71ZjTAljzBn4x0kZt81yT98zlp5Ts7sdOASoBTwDvGmMOdRtk5zS/og2Gz8CuhVYA8wHpifrh+tA1L2d+z4+7nnees/zNgEPA2c5bFMYdAXmep73o+uGqPDwPO9v4DzgbOAXoC8wBf/kmen0PePTc2oWnud94XneNs/zdnueNx4/nUX7Q/sDY8x++NHPqUBZoApQCT/HOil0IOqY53m/419EI6fSMnZaLUI3NLKjYvA8b5HneS09zzvQ87y2+JGNL123KwT0PYOeU/PJw09pUb5M7o/KQB3giX0D883A8yRxYO6ifFNxY0wpoBhQzBhTKpllAkLqeaC3MaaaMaYScBP+quCMZIw5CX/KJKNX/gp9z0Qzxhy9rw/KGGNuwV/pOc5xs5zS90w2ek7dxxhT0RjTVs4bxphL8KsIJC0HMEy0P6LtmzH4Ebh2X39UxM81X5SsNriIiA7Anzq5A7h03+eZnLsDMAiYBywHlgDfAEOctsit7sBUz/O2uW5ISOh7JlpXYD1+rmhroI3nebvdNsk5fc9E03NqoAR++beNwCagN3Ce53nLnbbKHe2P7M4H2uH3yUrgb/ybt6QwGby4UimllFJKOaQ5okoppZRSygkdiCqllFJKKSd0IKqUUkoppZzQgahSSimllHIirxIwqb6SKd51wbQ/oml/RNP+yE77JJr2RzTtj2jaH9G0P6KlZX9oRFQppZRSSjmhA1GllFJKKeWEDkRDaPHixVSuXJnKlSvTq1cvevXqhed5aM1XpZRSSqUTHYgqpZRSSikn8tpZKdVDcCmVKLxz504ArrvuOp5//vmor/31118AlChRoig/IqX6Iwm0P6LpYqXs9BiJllL98cUXXwAwYcIEZs+eDcCuXbsAOOOMM+zHtm3bAlCyZMmC/oiU6o8k0P6Ipv0RTRcrKaWUUkqp8Eh6RHT79u0MHToUgK5duwJw5JFHxvvHiJS6G5k7dy4ALVq0sI/VqFEDgNWrVwNQvHheFbdylVL9kQQp2R+vvPIK//nPfwCYMmUKABdccEE8Xlojotml5DGSQCnRH/PnzwfgnHPOAWDjxo02x96Y7L/CZZddBsBzzz1X0B+VEv2RRNof0bQ/omlEVCmllFJKhUeRwmuF8dVXX/HQQw8B2Mhoptu+fTsAjz32WLavXXTRRUCRI6EqjQwaNChmVEcp5eeAnn/++YAfCQX4v//7Py6++GIAunTpAmDz8F999VXGjRsHBDmiTz31VDKbrFRGczK6kYU348ePB6B79+4umhEaM2fOBPwpV1G/fn0Arr32WidtSqRnn33W/s7y+51++um5fs+aNWsA+PDDD4HMPGYmTZoEwIoVKxy3JLmeeOIJAHr37g1Aw4YNOfDAA4EgnSWTfPbZZwD8+9//BqB58+a8/vrrANSsWdNZu1zbsWMH4E+zr127FoCKFSsCMGTIEE477bSo5992220A9OjRg/bt2wPwzjvvALBlyxb7vcq3ZMmSqP8nMKUuLrZt2wYEAa9DDjkEgG+//dY+57333gOgVKlSLFy4MMfX6tmzJwCPPvooUKhFbaH11Vdf2c+HDBkCwPTp020qi/ydq1atav9/4403Rn2tqHRqXimllFJKOeF0vnfPnj0uf3wo7NixgwcffDDb45MnTwagQYMGyW5Swrz99tsA3HzzzTYd4aOPPgLgsMMOA6Bjx47UqlULCCJhAFu3bgVg3bp1ALRp0wbIrAjQsmXLgGBGId0NGzYMgAEDBgDBIr6///6b77//HoBrrrkGgHvuuccu7MsUkp7x9ddfc/jhhwNw9tln268fe+yxAJxyyikA9jkSTU43kr4kCzsBjjnmGIBs0dBIVatW5a233gLgl19+AYpcJi+0JKrZrVs35s2bl+fzp06dCvjvxaVLl0Z9rV+/fgDceeedcW5lfLz//vsAjBgxIl/Pzy3d6ZtvvgHg119/BaBOnTpFbJ07kq4i59dHHnnE/u6xFvTJdUf+/nPnzrVRVPnbd+zYsUht0oioUkoppZRyIukRUYlkQJAjesUVVyS7Gc7t3bsX8CMYUnRZGGOoUKGCi2YllOToVKtWzUZEt2zZAgTlVuRjXkaOHAnAAw88EOdWhtd9990H5H7nnk5kVkAi5BMmTACgbt26nHXWWQCMHj0agKOOOsrmkGaiP//8E/AX3gj5XKIccS71FTpjx44F4Msvv7SPSTQ4L5UrV476mG4kCiaLuJYtW2bPtXI+kYL/06dPt59HRsqyRs1kpiKsEdGspP3Nmze3Ub6rr74a8N8TP/74I4DNL+7UqZP93mrVqgFQpkyZpLU33uQYkN8l698z8vOGDRtStmzZmK+zdOlSe+z0798f8GdZ8vteiyXpA9Hy5cvbzyX5NRP98ccfAHzyySf2sf333x/wB1kNGzZ00q5Ekt+pU6dO2QaQctDXr1+fcuXKAfD5558nt4Ehl0fN37Qyc+ZMFi1aBMBLL70E+ANQcfTRRwPB4pJMErm4oCAGDRoE+IucDjrooHg2KRRkUYoxxi40uu666xy2KDy6desGBNOsxhj+7//+z34O0dOy8ljkTa98Lgt3Uo2kaUTeqEQ6/vjjk9mcpJOp+Kx/244dO9oBpWjYsGGOg+6hQ4famxA5nsaMGWNfL7IOen7p1LxSSimllHIi6RFRWbAC2Om1TBS5EEfIHWqvXr2S3Zykuueee+x+z1KySpK/X375ZUqVKgUE00hSrgaCyGm691EskXeyVapUAaB27doum5QwkaXMZB/wSMOHDweChQgff/xxxkzNy7SpRLBatWplF/3JYr6XX37ZPv/mm28GgrI1q1atSquIqES4ZErVGGOjdpk86yauueYa3n33XSD2NGys/8t7ThahyBR2Kpk+fXrMxz/55BP7PnnzzTeB6HQVuQ6n27lV0k7k7yxT6a+99lq25y5ZsoRVq1YBQT9KGpQxJtuxM2HCBCZOnBj1+nL9jvX6WWlEVCmllFJKOeG0fJMUJ8+kxUpyJxYZ8SldujQAV155pZM2JVuZMmXsLlKSwyVR0Lp16/Ldd98BQSmVSFKiRQr+ZwIpohxJSvGccMIJyW5OQklpqkWLFnHmmWcCuS8gOfHEE4HgfZUJsuZ4rV+/3n5NypnddNNN9rG+fftGPT/dZN2hr1q1alELTTLV4MGDAZg2bZr920sULFYh8quuusp+LqW/UtU///zDzz//HPXY4sWLAWjXrh27d++O+posjAR/4SMEsy3pMnMrv5ccC1KOKXKjAnkvTZ8+3W4QkfV8EytvOOvnAI0aNcp32zQiqpRSSimlnEh6RFRG5QArV65M9o93TgoES9QPgjIYmbht5RFHHJHtsR9++AHAltMAqF69OhBsc5kpNm/ezNNPP53t8a5duzpoTeLJtnzz58+321bm5oADDgCCMmCZaPny5TEfz/peadKkCRB9Dk4H//vf/6L+f91119G8eXNHrXFHyvPIDIpEtzzPo2XLlgDMmjXLSduS7ZNPPrG51CK/G4FIiUnJrW7dunVabOkp+b7nnXceEOR+NmrUKGblhKx5oJHvKckfle8bNGiQzQmV9QsFkfSBaGGW9qeTyDqqQuokKt/DDz+c7TEp13PqqacmuzlOTZo0KdtAo2nTppx77rmOWpRYb7zxhv28Xr16OT5PEuNnzpwJ+FPRl112GQCnn346AJdeemliGumYTJtKndCcBl2RC0MB+vTpA0SX0Etl8r6QtAy5cGbiNWbjxo12ClnKe0VOlRZ155tUIzVzY2ndurVN+5GFSRAsApTAkBxfUvM71UkQTKbkc5tWN8bwwgsvAMEUe2S6huxoJ4PPM844o0ht06l5pZRSSinlhNPFSplE7kIik6LBT6zv3Llzjt8nC7lk39w33niDpk2bJqaRIfD+++/HLDicaXf0Ys6cOTbSIx8bNGiQVuV3Iv373/+2n8vfXKIXskALyJauIDttAbaYebpGRG+//XYgiPzGioguWLDARpfluJGNItKFREIlLSO3xVgrV660i2OltNXJJ58MBDuWpbJTTjnFFhePVZZJFq/J++arr75K6V2C8lK6dGn7+8kCLdnJsWLFipQoUSLb98j5RSKiYsyYMdxwww2JbG7CTZw40S5a3LBhA5D7zkodO3a0JbxilUCLlS5WFBoRVUoppZRSTmhENEm+/vprIPuiilatWtnyTWLPnj22ILPsnyw6duwYtYgnXUjR+meffZadO3dm+7psfypREClTkwmyRnruuusuRy1JPMkL7dy5s83zevLJJ3N8vkRQ69evbwu2S3H3dJfbgpzZs2ezfft2IH3LNuXHBx98APjbCstCOOmPOXPmAP7CUcmfSzVSemfZsmUx8/yyfi5R06lTp6btjAH46wzkGhprQWxBxLoepQo5rvv27cumTZuAYK95ye+86qqrGDJkCOCX+gJ/IZNsqRxrzUa8OR2IynT1smXLinywpKpYSb6TJ0/ONgAV//zzT6KblFRz584FgmlYebNkJTVWZTpN6rBWqVLF1hbNFLJSPB3JDcfLL79sp1Dlbx1Z+08GrHI8gL9jFwS7Li1cuBAI9pjOBJs3bwZg1KhR9jHpo0xa6CcDNElt2r59u92VTRb6yfGVDhUXLrnkEns9lcVad955J+AvZJJBtwzOhg4dmtYDUSj6ADSVSQ1QSTPYsGGDvRmRMUfkOUJ2P4ocuEq6k7xvBg0alLD26tS8UkoppZRywmkoSaZK5GM6q1SpEhBEfPbs2QP4EU6ZPpIoqPw/lq1bt9odIgqyc0FYyVR7TpHQrCSCKot1HnroIVvvLZ3Igq0vvvjCPnbOOecAue80lI4uvPDCAj1fIqeyWCeTIqJSOzSy5JfMNki0I3IHnXQ0ZMgQW/dxzZo19nEp+SWLVtKB7JA0YcKEHJ9TpUoVe36NnKKXqHGsXZZUapMpdknFMMbY6Gjt2rWBIDUlstyZTNfPnTuXRx55JOq1NCKqlFJKKaXSTtIjogceeKAtqJwJkVCRtYCuRPauvvrqAr1OkyZN0iISKiTK9+mnnwLR5Xvy4/XXX0/LiKgUH1+9erV9TMpvZF3cpmLLacehdCQzLO+++y7gl2GR82zkvvPppFWrVkCQ9yg5b7FmlCZPnmzPvddffz0QlKqR8j7pTHa7kY+bNm2yOzFpRNQns3Pp4NlnnwWCY/ySSy6xJajyu/ORfG8y1qVoRFQppZRSSjmR9Iho48aN7ZaWssovk/znP/8BgohofkkUTLb1SxdSdFjyVkqWLBm1Ohr8vJWLLroo5vcXZl/bMJMo3vr164HoYsOyX7SKLR32gy4syQOVbT2NMWld5itS//79gaDIdqxyVaVLl7bPk8hXqVKlAGjXrl0ymhlXku8rOX15kain9I0xJq1m1uJBShhl1aVLlyS3JH7k73311VcX+Fop37vffomPVzpZrCRvfBmIrlmzhuOOO85FU5Kua9euALz44osAfP7557k+v0mTJgDcdtttQFADLN3UqVMHgJtvvplhw4ZFfa1Ro0ZccMEFLpqVdFJy6Oeffwb8k0E676QVT3KMSNmaTLF8+XLeeustILh4tG7dmt69e7tsVtJIYCM3F110EX/++ScQ9JGkv5xwwgkJa1uiyF7f8jvlVYpp8ODBQLCrzjXXXJN2N/FFMWfOHGbMmBH1WLdu3YDg2pRKDjzwQCAIZEgaRl6kZNOLL75of+/IMk+JolPzSimllFLKCScR0fPOOw/AlgcYPnw4rVu3BoKp2mLFirloWsJJMXLZ/WXz5s12IdN3330H+HuJy7SaTL2k877AKncSRVe5a9CgARAsCFy7dq3L5iRNrLIqp59+ui0VlykkMhpr0Unk7jgyq9SpU6fkNCwBJJo5ZswYwN9lK6dFR4MHD2bEiBFA8LunewkvCKKAUtpKZmIjUxI+/vhjwD8WJCVMrtEXX3wxkJo7k0WmYBSELHLatGmTHXPE2ms+3jQiqpRSSimlnHASET3ppJMAqF69OuAX7Za7ua+++irqa+lKFh/Vrl3b7pGtYps+fbrN55LcF6VyIlEAiXZs2rQpLfPhZAOMF1980eaC3XHHHUCQU55JZBOIcePG2YUnEglt0qQJL730EgAVKlQAggWSqUjOh7LotVGjRvYaKseCFDM/4ogj7JaPst3rsccem8zmOiG5jQ888ABAVJk/KeElazX++OMP+zVZoxBr++1UcckllwDw3nvvAfDoo4/aveObN28OBBHjd9991+bDyrFjjOGhhx4CoGHDhglvr5OBaIkSJYBghWe7du3sySHdB6AqdyeddJJdzbpr1y7AT1mQE2mmDUS7d++eEXUO40lq08quVK+88grXXnutyybFldRffvTRRwH/oiED7V69ejlrl2uy21q/fv3o16+f49YkltSflsHnxIkT7cAzcjAB/oBU0hCSsfAkLGbNmgXAX3/9BQQD0alTp9rFoKJcuXI2xaWgtb3DSHZLkvPCnDlzOPvsswE4+OCDgWA3w1WrVmWbwu/UqVO+KzLEg07NK6WUUkopJ0xkncIYcv1iCoh3lrH2R7SE9Mfxxx8PBFNt4N+1QdxLaaREfyRRIrLyk94nsruQLE44/fTT7WOFqIkXumNEpmUff/xx+9i8efOApEy5hq4/HHPaH7Jf/NChQ3Osy92hQwe7z3gShOb46NGjBwDjx4/P9jWZlZX61H369ElUmbxQ9IcxxkY9s0bMPc+zi9hkSv/OO+9MVDpTzP7QiKhSSimllHLCSY6oUrmRHVA6dOjguCUqFZ166qkAdO7cGYApU6Ywbdo0ILVL9gjJhRSjRo3KiMUnKjvJEZUSRSogMweyMHjlypWA32cy6yYlmtLdzJkz7SKs2bNnA0FEtGfPnracl6vziEZElVJKKaWUE5ojWjDaH9G0P6Jpf2SnfRJN+yOa9kc07Y9o2h/R0rI/NCKqlFJKKaWc0IGoUkoppZRyIq+peaWUUkoppRJCI6JKKaWUUsoJHYgqpZRSSikndCCqlFJKKaWc0IGoUkoppZRyQgeiSimllFLKCR2IKqWUUkopJ3QgqpRSSimlnNCBqFJKKaWUcsLJQNQYU88Y87Yx5ndjzC/GmCeMMcVdtCUMjDETjTHrjTFbjTHLjTFXum5TGBhjGhhjdhljJrpuSxhof/j0/BHNGLM9y7+9xpjHXbfLJT2nZmeM6WKMWWKM2WGM+Z8xpoXrNrmk59NoLo8PVxHRp4ANwEFAU6Al0MtRW8JgGFDP87wKQHtgsDGmueM2hcGTwDzXjQgR7Q+fnj8ieJ5XTv4BNYCdwCuOm+WanlMjGGPaACOAHkB54BTgB6eNck/Pp/u4Pj5cDUTrA1M8z9vled4vwEzgKEdtcc7zvO89z9st/93371CHTXLOGNMF2AJ86LgpoaD9EUXPHznrhD9In+O6IS7pOTWbe4H7PM/73PO8fzzPW+t53lrXjXJFz6fZOD0+XA1EHwG6GGPKGGNqAWfiX0wyljHmKWPMn8BSYD3wtuMmOWOMqQDcB9zsui1hoP2RzSPo+SMn3YEXPM/zXDfENT2n+owxxYDjgKrGmJXGmDX70llKu26bC3o+jRaG48PVQHQ2fgRjK7AGmA9Md9SWUPA8rxd+SLwFMBXYnft3pLVBwHOe561x3ZCQ0P6IpuePGIwxdfHTFMa7bksY6DnVqg6UAC7A74umQDNggMM2uaTn02jOj4+kD0SNMfvhRy+mAmWBKkAl/PyEjOZ53l7P8+YCtYFrXbfHBWNMU+B0YKTjpoSC9kc0PX/kqisw1/O8H103JCz0nAr4OcMAj3uet97zvE3Aw8BZDtvkhJ5PY3J+fLhYaVoZqAM8sS+HZ7cx5nlgMHCbg/aEUXEyN5+pFVAP+NkYA1AOKGaMaeR53rEO2+VKK7Q/Iun5I2fdgOGuGxFSGXtO9Tzvd2PMGvw8Wfuwq/Y41go9n0YJw/GR9IjovtH2j8C1xpjixpiK+HlNi5LdljAwxlTbVzahnDGmmDGmLXARmZtE/Qz+BaPpvn9PA28Bbd01ySntjwh6/ojNGHMSUAtdLa/n1NieB3rv65tKwE3ADMdtckHPp7E5PT5c5YieD7QDNgIrgb/xf/FM5OFPGa0BfgceBPp4nveG01Y54nnen57n/SL/gO3ALs/zNrpumwvaHzHp+SO77sBUz/O2uW5ICOg5NbtB+KWKlgNLgG+AIU5b5ICeT3Pk9PgwurhSKaWUUkq5oFt8KqWUUkopJ3QgqpRSSimlnNCBqFJKKaWUckIHokoppZRSyom86oim+komE+fX0/6Ipv0RTfsjO+2TaNof0bQ/oml/RNP+iJaW/aERUaWUUkop5YQORJVSSimllBM6EFVKKaWUUk7oQFQppZRSSjmhA1GllFJKAfDTTz9x4YUXcuGFF1KjRg1q1KjBwoULXTdLObZixQpWrFjByJEjqVmzJjVr1qR+/frUr1+fiy66qEivrQNRpZRSSinlRF7lm1SCjR8/ntdeew2AGTNmAOB5HsbErvowcOBArrzySgCqVasGQMmSJZPQ0sKT30U+lixZks8//xyAY445xlm7lFJK+b777jsA2rVrx7p16wD/WgQwefJkPVdnmJUrVwIwevRoACZMmADAr7/+mu25u3btYuPGjQBUrVq1wD9LI6JKKaWUUsoJI3c8OUhI8dRTTz0VgFmzZtnH7r77bgDuueeeeP6o0BaTHT9+PAB33XUXa9asif4huUREI7/26quvAtCxY8f8/lgn/bHffv79TrFixexjZ599NgDTp0+Pc5MKJLTHhyMpV9B+ypQpAAwbNowFCxbk+/suu+wynn/++fw8NRTHSNWqVenWrRsADz30UFwbVECh6A+A3bt3A/DNN98AMHfuXAA+/fRTO+Pyyy+/ZPs+Ofc8+OCDADRs2LCwTYAQ9Udhvf322wB2pi2yz2R88OSTT9KrV6/8vFzK90ecpVR/7N27F4DnnnuOW265BYBt27YBUKVKFQBOPPFEmjdv7jdm3/Exbtw4PvnkEwDq1q2b24+I2R9OBqI5DbIiffzxxwC0atWqSD+qKN8cQ9z6Y968eQCccMIJ9rHDDz8ciD1dvXz5cgAWLFhg+0+e98knn1C+fPn8/Fgn/fHFF18A0SH+du3aATB16lQASpQoketr/PXXXwD06dMHCC4i+++/P8WLFzrDJLTHxx9//AFA/fr1adq0KQAfffRRvr5Xptjq168PQNmyZfP7Y0M9EF28eDHgH0eTJk0CYOvWrUBwfOSXMcYO7PIYkIbiGKlWrRqbNm0CsAPuo48+Om6NKoBQ9AfAHXfcAcCIESMK9f1y3pg3b559jxVCaPqjoMaMGQNAv379ANi8eTMA1atX57777gP88yvApZdeGhVIyEXo+mPXrl0AnHvuuYAf/GnRokVRXza/QtcfscgAtGvXrgBMmjTJ/u1PO+00AEaOHAnEvnEbNWoUl156KUBeYxHdWUkppZRSSoVHKCKirVq1ipqmj/Txxx8XJSoa2ruRLVu2ADBkyBAOO+wwALp06QLAAQcckO35Eh4/7bTT+PrrrwG48MILAT+RPJ+c9sfAgQMBGD58uH1MIps33nhjrt/bo0cPACZOnBj1+OTJk+nUqVNBmhEptMeH3F1OmjTJRso//fRTACpXrpzj961cudI+X2YVWrZsmd8fG+qIaJ06dQCypbIU1T///JPbl0NxjERGRNu2bQvAK6+8AkC5cuXi1LR8CUV/AMycOROAM888E8BGNU844QQb7bziiivs8/v27Qtkn1mYNGmSPfcWQmj6oyBmzJhhI4RyPZYp1Q8//JBDDjmksC8duv4YPHgwEFx/xo4da68nuZEUhQceeMCmDOZz5jFS6Pojq02bNtn+kAXTEKQ9yTgjTjQiqpRSSimlwiMU5ZtatmxpozcSGZUFTaeeeqqNiMqCpiLmjYZCxYoVAf9uKz/kTqxZs2Z89dVXACxbtgzwo6WFuFNLGfPmzbO/c7p79tlnAWxJL4BDDz0UyD0SKjmSktsFfgI5FCgiGiqStyQRjbVr1+br+2rXrg0EEY09e/YkoHXuSCRQIjySu5VpTj/9dAB+/PFHIHh/VKhQoUCvc9BBB8W3YSE2e/ZsIMiXhCA/X8rzFCEaGiqS8/rEE08AUK9ePYA8o6Fy3pDja+XKlXYW4owzzkhEU51q27atnWWVvNBPP/2U4447LmltCMVANJIMMiVl4J577uHee+8FgkFqHukEaeXbb78FsCvSxowZY6dSatWq5axdySADkXnz5rFkyZKor8l0gZws0kXPnj2BYLrsyCOP5Omnn87z+2Qa5cUXX7SPVapUKQEtTJ6dO3cC8NhjjwHR7/uDDz4YwK7kbdCggf2a1NedP38+4Ke/yEUpkqwCTVWjRo0CoEmTJlx++eX5/r7ly5fb519yySUAXHvttfFvYILJ9LsMMHLzxRdf2AWiQgZcRxxxRNzbFjYrVqwAgqo0xhg7AJUbm5NPPtlJ2xLl3XffBYK6l3fddVeuz5cbXamq8P333wN+SlA6DkBvvfVWwF/8KOdMSf+SdMFk0al5pZRSSinlROgiolndc8898a4tGnp//vmnjfRInU1ZrBRpwIABQKESqFOC7O4RayGTTMPFWtiViqQcUVZTp061U82xSNQwcnpWIqGpGOWKJGWnpL5hZBrLG2+8AUSXOpOIqUQ+hgwZkuNrG2Ps+ycVeJ5nF6F1794dgEGDBgH+ghw5P8i0Y4UKFfj777+BoHyaRIhHjBhhpx+lLFyqHytZSaqKzCjdeOON2c6hUraoRo0ayW2cA48//jgQXbv7ww8/BNIvEiokNSm/ZHZg4cKFQJCykNt5JBUtWrQICBYKQ3BuTXYkVGhEVCmllFJKORGKiKjkP+ZFIqPpECGVu3MpKgzBQpUtW7bE3M9VSG7Ysccem8AWuvPSSy8BQY5Pulu+fDnXX389EET1JC9SomA5kWLesrtMpUqVbNQjMm8yFcl7JL8L+iQKlp8IRtWqVbnhhhsK37gkM8bYAvYSyZNFbN27d+emm24C4JFHHgGgVKlStiyV5AfG0qRJk0Q12anrrrsOiD6/Cuk/ibSnu8GDB9trS8mSJQH//JKukVCxYcOGfD93xIgR/Pe//4167KSTTgKCUnqpTjZJyVrusH///nTu3NlFkyyNiCqllFJKKSdCERGdNWtWtiinREljFbpv1apVypVwkn2QZUtL+f0kkhUpcj/5MmXKANCmTRvAzwuVfV7TgRS3b9asGQA///yzzQmV7RsjyQrZvFZAppJ169bZDQ7k7y6rvKVoOQSrOE888UQb2ZDV8vJ9AwcOTJsol+Q+y1aOkRshSFRL9smG4D2WH9u3b7fvwVQpb9W4ceOo/0sUY7/99qN///5AEP2MPIfEcuSRRwJB7mC6ee+997I9VrVqVQA7+5DupATc8OHD2b17N4DdP/yqq65y1i5XZAbkt99+syWd5Hr87bffZtvYIt0qsqxcuTLqo1TdueOOOyhVqpSzdoGDgWhOOyhJiaaspHYoBKWdUm0QCvDyyy8D8NRTTwHBFGxOFwuphSf7YHfs2DHRTUw42fmkSpUqdpcY+di6det8vYYkkEu5iVS2Y8cOAG677bZsX4usB5pVsWLF7L7PMh0tJ810usjKe0NuUuR33rt3r607LOeN+fPn5zvFB2Do0KEpMwAFWLp0aY6LEi+44AI7jSjlu8aOHctPP/0EYAchomLFiowfPx6ARo0aJajFbsniPdlZacuWLWzcuBHAlkPL7T2WDmSxzo4dO2jXrh2Q/r9zbmQHrsgyXlI3s0KFCjYYIGSxZDrYsWMHH3zwQdRjL7zwApD0ndli0ql5pZRSSinlRNL2ms+6Y1JOJNIRp6hnaPZ5lYiFlFKRfj/ppJP4888/gWBhypQpU7jssssAP7IRR6Hoj5NPPtn2Q0HJApzFixcX6vuzcNofkkwfubNLbpFymUrxPM+WtpLIuZSpya3UUz6Eeq95mT6SKHBBSDqLLF45+OCDc92pKkIo3jMF9euvv9pIspRqEsOHD48Zhc+nlOqP7du3A34Kgixik7JWn332GVDkRZ+h6w9Jc5PZgnLlyjFnzhwg+vwgGwLILn9xEpr+kIWcsgOZ/N2LFy9ur8eS9vP333/ToUMHICjjJBHD/fYrUrwuFP2xZcsWm84k59G8dmSTKfzRo0cDwUK3O+64oyhRVN1rXimllFJKhUfSckQjc0Mj8z4hOj80FfM/80OSw2Xf67POOguA22+/3T4mOWD33HOPTaI+4YQTAJg2bRqQHvsiT5482W6ZJjmiv//+O+DfvcvvKFt8/vDDDw5amXilS5cG/CLCcvcppLBwhw4dbHRcInhdunSxEVH5WhEjoaG0evVqIDhGCrq1rxS7P+aYY2zubGQB/HQkZd9OOeUU1q9fH/U1OQcVIRqaciRy069fP7uVpey3Lovb0q0MnhSqF3v27LEbFshWySVKlLCLc6TAebptGX377bcDwWyIbP5RsmTJbFt2ynkU4KGHHgKKHAkNlS1btticYdn0Iha55g4cONAu6Mq6EUS9evXiXvos6YuV7r777rSqB5pf8sfP7SAQDRs2tG+CL7/8EgjC4+nQZ7Vr17ZT67KyU1IymjVrZhcYyEBE9oRON3LjsWzZsnw9X3bZ+uSTT+zFc+jQoQlpmysy7b5kyRIuvPBCgGyD9JzIFON5550HBO8ZWeCWzuRmdvDgwYBfm1bSO6RuYE4LQjOFvGdkICoVA1KpnmxupGJC1kU3u3fvtgNQqUX75Zdf2kVsssd6ug1ERW6r32UQPm3aNA4++GAgmIJOJ9u3b2fXrl0AtG/fPtvX5QZWdm3LrYb3d999F/f2pc+QXymllFJKpZSERURlKl7uwmU6Pt2m3uWuUu5Gs9b6KyxZuHTEEUcAcPbZZ8fldcNGojVZd3tQ2UnSvTHG1gOU6f1UtnfvXhuZkAUGUh81vypWrGij6uk+/Z7V+vXr7bR7ZF1VOYfceuutQHqk9RTF0qVLo/4vUaDt27eHooRNUcmUstQbFqVKlbL7iq9ZswaAc845x05dy85BUt6nTp06SWlvGMiCna1bt3L++ecDcV+8FQpfffWV/fzHH3+M+tqmTZtsaavIuuYyIyWzVK+//nrC2qcRUaWUUkop5UTCI6LyUYpHp1tEVPYElzvNRx99NC6vm3WfcIkQ/etf/4rL66vUIYsqli9fbh+rWbOmq+bE3WWXXWYLsRdWuXLlMi4SKr788suoSCj4m0fIY5keCQV/B52si3iknM+WLVvSIiIqCxazLuobPHhwzMUlEhGV2bwFCxYAmRURlR3sAK677jqHLUksKVcF8N///hfALmBr27atjYTKzoX333+/LegvkWL5v3xfPGlEVCmllFJKOeF0r/nIVZyS35VqJNoge5///fffdhvPwtq2bRvPPfccEETBInM8MpmUeZLoRn63Bk1lslWjrIw++OCD02JrxosuuggoeD7oCSecwOeffx712Nq1a+3Wjddcc018GhhysgpWfu9IM2fOpHr16sluUmhItPPGG28E4Nlnn7XvHyF56elS+kxm56Ragvz9O3XqZNcyyMydVCaBoLC9bHeZCaR0VeQxkU5beuZm/vz5gF9GEfxI+JFHHgnAjBkzAP+cLBV65NiRCi2ybiWekjYQjSw7FGt3pVSdspcSPPLHevrpp+1etgMGDADgxBNPzLY3upQmWr9+vT0gJDw+a9YsezIpU6YMADfffHMif42UITUlZXHGCy+8YKep+/TpA/g3BcOGDQOCC5J44403ktTS+Ni5c2e2HTAee+wxqlat6qhF8SPHfaxdpHIjU4mRPM/L9rdOV1u3bgX8PeYB3n//ffs1eSwTB6EyqJg8eTIPP/wwEL34Qsj154EHHkhe4xyQHbXOOOMMW4M41o525557LoDdjz4TyMK1d955B/DLWtWoUcNlkxKqcuXKNGzYEAh+96uvvhrwB+VSr1yCA1I2EqBbt24A9O7dO2Ht06l5pZRSSinlRNIjoq1atYraZQlSd1oeoE2bNkCQDPzZZ5/x9ddfA9CxY0cAqlSpki0K/MorrwCxo0HGGPu43LWcc845CWh9uElh4Vg7D0lEuU2bNravJCL2wQcf2OLVqb47xogRI2xUp1KlSgB2T+RMFbnAQFSvXt2WG0l3sj+2lNsxxnDooYcCwf7Y6UpmRCZOnGgfkw0hJF1DFt1EKlmypC15JtcimZJOFwcccAAQ9JGINYMAwQLiMWPGJLZhKaBevXr2/JqODjzwQDsb2KRJEyB6x6Tnn38+2/dI+bdBgwYBid0YJLWv0koppZRSKmUl7ZZQFiZFLlBKhyL3ksM5duxYwC8Cm3ULrM2bN/Pqq6/m+zU7d+5s8x4zeVs+yat96aWX7PaWkpC/fft2wM8Lk3y4yAR8Kf6eqlEPifhOmTLFRnzld0oXst2t7IFcGKVKlQLgyCOPTOscLwgioKNGjQKiZ1N69uwJpMcGB7HIgj2ZZYoV9Ywk0a3jjjsO8LfzTMQiizCRBa5Zr6elSpXikksuAaBChQqAv4ApsqSPSn9SEnLChAmAP87ISgrbH3fccXbRZzJKBZqsNceyyPWLuZHp99wWJiVhSr5gqyDylmd/bNiwwa6af+uttwDsVD1A8+bN/Rfa1+81a9bkrLPOAoLdkxK4ijPp/RFvUgNN9qh/7LHHeO+994DYx1oeQtsfcky8++67djXrwoULgWDKJAHi3R+QS5/IDdu5555r/3Zyw7Flyxa7EDDW4EpWQx911FFA7P2T4yQ0x4jc7MoNl0yVDR061C5mTEIqipP+yM++8LIjzuWXX06/fv0APy0qwUJzfIRESvTH4sWLgejzR4J2DkqJ/kiimP2hU/NKKaWUUsqJhEVEhUQ6JEJ69913R5VySjC9G4mm/REtdP2xY8cOAE4++WQAFi1aZKfVkrAQJakR0VjWrVsH+OkYshDQ8Y5JoTlGZG90SUGQun4S/UsSJ/0hqSqy4GjVqlV2ylAW70ld0CTvkhSa4yMkUqI/NCLqjEZElVJKKaVUeCQ8IuqY3o1E0/6IFrr+kLxJiQKWLl2aOXPmANCsWbOivnxenEdEQyh0x4hj2h/RtD+ipUR/yOxCly5dAH8jmgQtZkuJ/kgijYgqpZRSSqnw0IhowWh/RNP+iKb9kZ32STTtj2jaH9G0P6Jpf0RLy/7QiKhSSimllHJCB6JKKaWUUsqJvKbmlVJKKaWUSgiNiCqllFJKKSd0IKqUUkoppZzQgahSSimllHJCB6JKKaWUUsoJHYgqpZRSSikndCCqlFJKKaWc+H+k1iwIe7CztQAAAABJRU5ErkJggg==\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "n_rows = 4\n", - "n_cols = 10\n", - "plt.figure(figsize=(n_cols * 1.2, n_rows * 1.2))\n", - "for row in range(n_rows):\n", - " for col in range(n_cols):\n", - " index = n_cols * row + col\n", - " plt.subplot(n_rows, n_cols, index + 1)\n", - " plt.imshow(X_train[index], cmap=\"binary\", interpolation=\"nearest\")\n", - " plt.axis('off')\n", - " plt.title(y_train[index], fontsize=12)\n", - "plt.subplots_adjust(wspace=0.2, hspace=0.5)\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "간단한 밀집 신경망을 만들고 최적의 학습률을 찾아 보겠습니다. 반복마다 학습률을 증가시키기 위해 콜백을 사용합니다. 이 콜백은 반복마다 학습률과 손실을 기록합니다:" - ] - }, - { - "cell_type": "code", - "execution_count": 116, - "metadata": {}, - "outputs": [], - "source": [ - "K = keras.backend\n", - "\n", - "class ExponentialLearningRate(keras.callbacks.Callback):\n", - " def __init__(self, factor):\n", - " self.factor = factor\n", - " self.rates = []\n", - " self.losses = []\n", - " def on_batch_end(self, batch, logs):\n", - " self.rates.append(K.get_value(self.model.optimizer.lr))\n", - " self.losses.append(logs[\"loss\"])\n", - " K.set_value(self.model.optimizer.lr, self.model.optimizer.lr * self.factor)" - ] - }, - { - "cell_type": "code", - "execution_count": 117, - "metadata": {}, - "outputs": [], - "source": [ - "keras.backend.clear_session()\n", - "np.random.seed(42)\n", - "tf.random.set_seed(42)" - ] - }, - { - "cell_type": "code", - "execution_count": 118, - "metadata": {}, - "outputs": [], - "source": [ - "model = keras.models.Sequential([\n", - " keras.layers.Flatten(input_shape=[28, 28]),\n", - " keras.layers.Dense(300, activation=\"relu\"),\n", - " keras.layers.Dense(100, activation=\"relu\"),\n", - " keras.layers.Dense(10, activation=\"softmax\")\n", - "])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "작은 학습률 1e-3에서 시작하여 반복마다 0.5%씩 증가합니다:" - ] - }, - { - "cell_type": "code", - "execution_count": 119, - "metadata": {}, - "outputs": [], - "source": [ - "model.compile(loss=\"sparse_categorical_crossentropy\",\n", - " optimizer=keras.optimizers.SGD(lr=1e-3),\n", - " metrics=[\"accuracy\"])\n", - "expon_lr = ExponentialLearningRate(factor=1.005)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "모델을 1 에포크만 훈련해 보죠:" - ] - }, - { - "cell_type": "code", - "execution_count": 120, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "1719/1719 [==============================] - 7s 4ms/step - loss: inf - accuracy: 0.4934 - val_loss: 2.3911 - val_accuracy: 0.1126\n" - ] - } - ], - "source": [ - "history = model.fit(X_train, y_train, epochs=1,\n", - " validation_data=(X_valid, y_valid),\n", - " callbacks=[expon_lr])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "학습률에 대한 함수로 손실을 그릴 수 있습니다:" - ] - }, - { - "cell_type": "code", - "execution_count": 121, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Text(0, 0.5, 'Loss')" - ] - }, - "execution_count": 121, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYkAAAERCAYAAACO6FuTAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAAAnxklEQVR4nO3deXxU1f3/8dcnmWwkJEACIWxB1rCjgOwSxBUXtFq1LtVqwbpUq7VWW2nVWq1a7dda21+pImpdUIuiqGhVUnaQJaAgKFtYIggISFiznN8fM2CaZrJAcmcy834+HvNw5s6Zmc8cQ94599x7rjnnEBERqUxMqAsQEZHwpZAQEZGgFBIiIhKUQkJERIJSSIiISFAKCRERCcoX6gLqkq9RmuvbvXOoy4h4+/btIzk5OdRlRDz1szeq6+fDJWWs3raXNk2TaNoo3sPKvLN48eIdzrnmlT0XUSERm9aCWXMXkBQfG+pSIlpeXh65ubmhLiPiqZ+9UV0/F+zcx4hH83j0kj5876Q23hXmITMrCPacZ7ubzCzBzJ4xswIz22tm+WZ2dpC215hZqZkVlbvl1uRz9h8uqcuyRUSimpcjCR+wCRgBbARGA6+aWS/n3IZK2s9zzg2r7YccKC49riJFROQ7noWEc24fcG+5TdPMbD3QD9hQV59zUCEhInUo2lcuCtmchJllAl2AFUGanGhmO4BvgBeAh5xz/7MvyczGAeMA4lt24qm35jGmU2ROLoWLoqIi8vLyQl1GxFM/e6O6ft62rwyAVatWkfftGo+qCh8hCQkziwNeBJ5zzq2qpMlMoCdQAPQAJgMlwEMVGzrnJgATABKyOrs31hRjqS14/JK+9VS9aELVG+pnb1TXzxt27INZeXTrlkPuiZE5cV0Vz8+TMLMY/CODw8DNlbVxzq1zzq13zpU55z4F7gcuru69fTEGwJQlW7jxxcV1V7SISJTyNCTMzIBngEzgIudccQ1f6gCrrlGH5ilH77/76VYOFpdysLiU3fsPH0u5IiJRz+vdTX8DugGnOecOBGsUODR2iXNum5nlAOOB16p78wRfDMsfGs3Hq77muucWkTN+OuAfYYw/tztXD2lfJ19CRKJHlM9be3qeRDZwPdAX2Fru/IcrzKxd4H67QPNRwHIz2we8C0wBHqzh53BqTgsevLDX0W0lZY7fvrWC856czaZv9tfl1xKRKGHV78yISF4eAltA1buMUsq1vQO441g/y8y4fGA7BndMJyXBR0qCjz99+AUTZq5j+CMz6JCRzLDOGfxkREdaNUk61o8REYl4EbUsR0UnZHy3HsuvRnfjkv5teXtZITNWf83z8wp4eeFGxg7vwGUD2tG2WRL+KRMRETkiokOiok4tUrjt9C7cdnoXvty2l7/mrT16y0pL5PKT2/HDIe1JS4oLdakiImEhqkKivM6ZjfnTpX25dVRnZq/ZwfsrtvLYv79gwqx1nNs7i1M6N+eMHi2JjdHoQiSauSg/5TpqQ+KI9hnJtM9I5spB2awo3MNfPl7D1PxCXl64iY7Nk/l+/7ZceGJrMlMTQ12qiIRQtO6NjvqQKK9HqzT+dmU/DpeU8eHn2/j7zHX84b1VPDJ9FSO6NOf7/dsyqlsLEnxailxEooNCohLxvhhG98pidK8s1m0v4vXFmwNncS+haaM4xvRtzTm9s+jbtglxsbq4n4hELoVENTo0T+HOs3L4+RldmfXldl5btJmXFmxk0twNJMfHMrhjBmP6tuL07pkkxmmEISKRRSFRQ7ExRm7XFuR2bcGeA8XMW7uD2Wt28OHKr/nw8200TvAxoqt/l9TgDunE+zTCEIkE0T1trZA4JmlJcZzVM4uzemZx3/mOBet2MjW/kPdXbmXa8q9Ijo9lUId0RnRtzpk9WmrSW0QaLIXEcYqNMYZ0ymBIpwzuK+7B7C93MGP118xZs4OPVn3Nb6auoE+bNM7v25oL+rYiPSUh1CWLiNSYQqIOJcbFclr3TE7rngnAl9v28sHKbbz32Vf8btpK/vDe54zKyeSSAW0Y3rm5Jr1FJOwpJOpR58zGdM5szE0jO7Fq67e8vmgzbyzdwvQVW0lLiuO8Pll8v19berdJ05IgImEqys+lU0h4JadlKvec251fnp1D3urtvL2skNcWbeaf8zfSJTOFMX1bc+GJrbXgoEiYitY/5BQSHouLjeH07pmc3j2TPQeKmba8kClLtvDo+6v54werGdwhne+d1IazerYkJUH/e0QktPRbKITSkuK4YmA2VwzMZuPO/byxdAtTlm7mjteWMf7NzzizRybfO6kNQztlaA0pEQkJhUSYaJfeiFtP68wtozqxZOMu/rVkC9OWFfJmfiGt0hK5anB7LhvQlqbJ8aEuVUSiiEIizJgZ/bKb0S+7Gb85tzsfff41/5xfwMPTV/HER19w4YmtuWbICXRt2TjUpYpEieieuVZIhLHEuFjO6Z3FOb2z+Pyrb3lu7gamLNnCyws3MaRjOj8aegKn5rTQrigRD0TrvzIdqN9AdMtK5Q8X9Wbe3aO486yurN+xj7HPL2LkH/N4etY6ig6VhLpEEYlACokGpllyPDfmdmLmnSN56vKTaNE4gQfe+ZxhD3/MUzPWKCxEpE5pd1MDFRcbc3RX1NKNu/jzR1/y6Pur+cesdYwd3oGrh7TXIbQictw0kogAJ7ZryrM/Opk3bxrKiW2b8Oj7qxn28Mf8NW8NBw6Xhro8kQYt2s+4VkhEkL5tmxwNi75tm/DI9NWc8ugMXpi3gcMlZaEuT6RBi9ITrhUSkahv2yZM+tHJvPaTwZyQnsz4qSs47fH/8O6nX0X9Rd1FpHYUEhFsQPtmTL5+EM/+aABJcbHc+OISLv37fD7dvCfUpYlIA6GQiHBmxsiuLXjnlmH8/sKerN1exPlPzeaO15ax7duDoS5PRMKcQiJK+GJjuGJgNjN+kcu4UzrwVn4hI/+Yx58/+lKT2yJViPYdtAqJKJOaGMfdZ3fj37efwoguzXn8318w6rE8puZv0XyFSBUsSs+5VkhEqez0ZP52ZT9eGTeIpsnx3PpKPmOfX8T2vYdCXZqIhBGFRJQb1CGdt24exvhzuzPzyx2c+X8zmba8UKMKEQEUEgLExhjXDTuBd346jDZNk7j5paWMfX4RhbsPhLo0kZCL9r+XFBJyVOfMxky5YQj3nNONOWt2cvrj/+GFeRsoK4vyfyUi6GS6emdmCWb2jJkVmNleM8s3s7OraH+bmW01s2/NbKKZJXhVazTzxcbw4+Ed+OC2Uzgpuynjp67gsgnz2fTN/lCXJiIh4OVIwgdsAkYAacA9wKtm1r5iQzM7E7gLGAVkAx2A+zyrVGjbrBHPX3syj17cm8+/+pbRT8xiav6WUJclIh7zLCScc/ucc/c65zY458qcc9OA9UC/SppfDTzjnFvhnNsF/A64xqtaxc/M+H7/trx763A6Z6Zw6yv53P5qPgdKtPtJJFqEbE7CzDKBLsCKSp7uASwr93gZkGlm6V7UJv+tbbNGvHr9YG4d1Zk3l27hN3MOaGkPiRouyk+nC8kFB8wsDngReM45t6qSJilA+d9CR+43BnZWeK9xwDiAzMxM8vLy6rxe8TsxDu46OZG/Lj3AhU/N5vJu8Yxs68OidUavnhUVFenn2QPV9fOmvf4VlFesWEGjnas9qip8eB4SZhYDvAAcBm4O0qwISC33+Mj9vRUbOucmABMA+vfv73Jzc+usVvlfuUBW8gxe35zM8yu3U5TQnN9f2Iuk+NhQlxZx8vLy0M9z/auun1dt/RbmzKJnjx7k9sryrrAw4enuJvP/yfkMkAlc5JwrDtJ0BdCn3OM+wDbn3M4g7cVDjeONZ68ZwG2ndeGN/C1c9Le5bN6lo59EIpHXcxJ/A7oB5znnqjpT63ngOjPrbmZN8B8JNan+y5Oaiokxbj2tMxOvHsCmXfs5/y9zmLdWGS4Sabw8TyIbuB7oC2w1s6LA7Qozaxe43w7AOTcdeASYAWwECoDfelWr1NzInBZMvWkoTRvFceUzC3hu7gYt6SERJdp/nD2bk3DOFUCVyyimVGj/OPB4vRYldaJD8xTevGkot03O57dvrWBF4R5+d0FPEnyap5DIEa3HZ2hZDqkTjRPjmHBVf245tROvLtrMZRPm87UuaiTS4CkkpM7ExBi3n9GVv15xEqu+2su5T85mxuqvQ12WiBwHhYTUudG9sphy4xCaNIrjR89+wv1vr6SktCzUZYnIMVBISL3olpXKWzcP4+rB2Uycs55rn1vEngPBjngWCV/RPnGtkJB6kxgXy31jevKH7/Vi3todXPDUHP+JSSINUnTOXCskpN5ddnI7Xho7iH2HSrjgqTlaTVakAVFIiCcGtG/GtFuG0bt1E259JZ8H3/1c8xQiDYBCQjzTonEiL44dyA8HZzNh5jqueHoBW/foMFkJb9G+CqxCQjwVFxvD/WN68vglffh0yx5G/3kWs7/cEeqyRKqlk+lEPPS9k9rw9k+HkZESzw8nLuBveWu1nIdIGFJISMh0bJ7CGzcOZXSvLB6evoobX1xC0aGSUJclIuUoJCSkkhN8PPmDE7nnnG58sHIbY/4ymzVfF4W6LBEJUEhIyJkZPx7egX9eN5Dd+4u54Kk5TP9sa6jLEgF0Mp1CQsLG4I7pTLtlGB1bpPCTfy7m4emrKC2L8n+hEjaidN5aISHhJSstiVevH8TlA9vxt7y1XD1xITuLDoW6LJGopZCQsJPgi+XBC3vxyEW9WbjhG859cjaLC3aFuiyRqKSQkLB1yYC2TLlhCHGxMVz693lMnL1eh8mKeEwhIWGtZ+s03v7pMEbmtOD+aSu56aUl7D2o1WRFvKKQkLCXlhTHhKv68avROby/Yhvn/2UOKwr3hLosiTIWpadcKySkQTAzxp3SkZfHDmL/4RIufGouk+Zo95NIfVNISINy8gnNeO/WUxjeOYN7317J2OcXs2vf4VCXJRKxFBLS4DRLjufpq/sz/tzu/OeLrxn951ksWLcz1GWJRCSFhDRIZsZ1w05gyg1DSfDF8IN/zOeJD7/UyXdS56J9j6ZCQhq0Xm3SmHbLcMb0bc2fPvyCy/8xX9eokHoRndPWCgmJACkJPv50aV8e+77/GhVnPzGTjz7fFuqyRCKCQkIixkX9/NeoyEpL4rrnFnH3lE+19LjIcVJISETp2DyFKTcO4fpTOvDKJxs5808zmbtGV76TY6fLl4pEmMS4WO4e3Y3XfzKYeF8Mlz+9gN9M/Yx9GlXIcYjSc+kUEhK5+mU3491bhnPt0BN4YX4BZz8xi4Xrvwl1WSINikJCIlpSfCy/Oa87r4wdBMClE+Zx/9srOXC4NMSViTQMCgmJCgM7pDP9Z8O5alA2E+es5+wnZjJfJ+CJVEshIVGjUbyP+8f05KWxAylzcNmE+dzx2jJd1EiqpJPpPGRmN5vZIjM7ZGaTqmh3jZmVmllRuVuuZ4VKRBvSMYPpPxvOjbkdmZq/hTP+NJO3lhVqsUCpkiauvVEIPABMrEHbec65lHK3vPotTaJJo3gfd56Vw7SfDqdVkyRueXkpVz2zkHXbi0JdmkhY8TQknHNTnHNvAtoZLGGha8vGvHnTUO4f04Nlm3dz1v/N4rEPVnOwWBPbIhDecxInmtkOM/vCzMabmS/UBUlkio0xfji4PR/9fATn9M7iyY/XcPqf/sPHq7S0h0i4/uKdCfQECoAewGSgBHioYkMzGweMA8jMzCQvL8+7KqNUUVFRxPbzmEzoMiCRF1Ye5NpJizipRSxXdIsnPcn7v6ciuZ/DSXX9vG63f1S5fPmnxGz93KOqwoeFYrLOzB4A2jjnrqlh+8uAXzjn+lXVrn///m7RokV1UKFUJS8vj9zc3FCXUa8Ol5Qxcc56nvjwSwB+OqoT1w49gcS4WM9qiIZ+DgfV9XP+pt1c8NQcnr1mACNzWnhXmIfMbLFzrn9lz4Xz7qbyHNG7Uq+EQLwvhp+M6MiHPx/B8M4ZPDJ9NaMe+w9vLN1Mma5ZIVHE60NgfWaWCMQCsWaWWNlcg5mdbWaZgfs5wHhgqpe1igC0bpLEhB/256UfD6Rpchy3TV7GeX+ZrUUDJWp4PZK4BzgA3AVcGbh/j5m1C5wL0S7QbhSw3Mz2Ae8CU4AHPa5V5KghnTJ466ZhPHFZX3bvL+bypxdw7aRPWFn4bahLE6lXnk5cO+fuBe4N8nRKuXZ3AHd4UJJIjcXEGGP6tubMHi15bu4GnpqxhnOenMV5vVvx8zO6kJ2eHOoSpR5E+0mWxz2SMLO4uihEpKFIjIvl+hEdmXXnqdwwoiMfrNzKqY/9hztfX8amb/aHujypL1E6K1qrkDCzW8zsonKPnwEOmNlqM+ta59WJhLG0RnHceVYOM38xkqsGZfNmfiEj/5jH3VOWs3mXwkIiQ21HErcA2wHM7BTgEuByIB94rE4rE2kgWqQmcu/5PZj5i5FcMbAd/1q8hZF/zONXb3zKlt0HQl2eyHGp7ZxEa2B94P55wGvOuVfN7FNgVp1WJtLAtExL5L4xPbl+REf+mreGyZ9s4rVFm7h0QFtuGtmJrLSkUJcoxyC6ZyRqP5L4FjhyNsnpwEeB+8VAYl0VJdKQtWqSxAMX9CLvFyP5fv+2TP5kEyMeyeM3Uz9j656DoS5PjlGUTknUOiQ+AP5hZk8DnYD3Att78N0IQ0Twn2Px4IW9mHFHLhf1a81LCzZyyqMzuPetFdoNJQ1GbUPiJmAO0By42Dl35ILBJwEv12VhIpGiTdNGPPS93sy4I5cL+7bmn/MLGPHIDG6bnM9nW/aEujyRKtVqTsI59y3w00q2/7bOKhKJUG2bNeLhi3tzy2mdmTh7Pa8s3MgbS7fQL7spVw3K5uxeLUnwebc2lEhN1PYQ2O7lD3U1s9PN7J9mdreZ6adbpAZaN0li/LndmXv3KMaf252dRYf42eR8Bj/0MQ+997nOtQgzUX4uXa2PbpoI/B+w2sza4l9PKQ//bqhU4O66LE4kkqUlxXHdsBP40ZD2zF27kxfmb+DpWeuZMHMdI7u2oE9yCcPLHLEx0TplGh5KAws6+mIaynqodau2IZEDLAncvxhY4JwbbWYjgWdRSIjUWkyMMaxzBsM6Z/DVngO8vHATLy/cyMd7D/Gv9XlcOagdF/drS7Pk+FCXGpVKSssA8MVGZ1jXNhpjgcOB+6PwL74HsBbIrKuiRKJVVloSt5/ehTm/PJUb+yTQMjWRB99dxaCHPuK2yfks2vBN1K8l5LXiwEgiLkpDorYjic+AG8xsGv6QODJyaA1o7WSROhLvi+HkLB93/mAwq7fu5aUFBUxZsoU3lm6ha2ZjrhjUjgtObE1qopZOq29HRxJRuruptt/6l8BY/PMQLzvnPg1sPx9YWId1iUhA15aNuW9MTxb8ehQPX9SLeF8Mv5m6goG//4i7/rWcTzfrMNr6VHJkTkIjieo552aaWXMg1Tm3q9xTfwd0SIZIPWoU7+PSAe24dEA7lm/ezYvzNzI1v5BXPtlE7zZpXDGwHef1aUWj+HC9dH3DVFKqietacc6VmtkBM+uJf1mTtc65DXVemYgE1btNE3pf3IRfndONN5du4cUFBfzyX5/ywDufc0Hf1vRp24QRXZrTvHFCqEtt8ErKonviulYhEbjU6EPAzUA8/uVMDpnZk8CvnXPFdV+iiASTlhTH1UPa88PB2Swq2MWL8wuY/MkmXphfQIzB0E4ZXNyvDWf2aElinE5lOhbFgZFEnEYSNfII8APgJ8DswLbh+IMjBl1NTiQkzIwB7ZsxoH0zHvxeCQU79/PO8q94Y+kWbn0ln8aJPs7q0ZLz+7ZicId0fLHR+QvvWET7IbC1DYnLgWudc++W27bWzLYDT6OQEAm5RvE+umWl0i0rldtP78K8dTuZsmQL7322ldcWbyYjJYFze2dxTu8sTmrXVCfrVePoxHWU9lNtQyIN/zkRFa0Fmhx3NSJSp2JijKGdMhjaKYPfF/dkxqqvmZpfyEsLNzJp7gYyUhI4vXsLzujRkiEd07V2VCW+G0lE5+irtiGxDP/V6W6qsP3WwHMiEqYS42I5u1cWZ/fKYu/BYmas3s77K7byVn4hLy/cREqCj9O6teDc3q0Y3iVDgRGgQ2Br507gXTM7DZgf2DYIaAWcXZeFiUj9aZwYx/l9WnF+n1YcLC5l7todTP9sK++v2Mab+YWkJvo4o0dLzumVxZBO0T3C0MR1LQTOk+iCfySRE9j8Gv7lOX7Gd5PZItJAJMbFcmpOJqfmZPLABWXMWbODt5cX8v5nW3l98WZSEnyMzGnBWT1aktu1OckJ0XUehiaua8k5Vwj8uvw2M+sDXFRXRYlIaMT7YhiZ04KROS04VFLK3DU7mf7ZVv79+TbeXlZIfGwM/bKbMqyzf56jV+u0iJ/41sS1iEglEnyxRwPjwTLHog3f8OHn25izZiePvr+aR99fTWqij8Ed0xkWmBw/ISMZs8j6ZVpSVkZsjEXc96ophYSIVCs2xhjYIZ2BHdIB2Fl0iLlrdzJnzQ5mfbmD91dsA6BVWiJDO/mXPR/SMSMizvguKXVRO4oAhYSIHIP0lATO69OK8/q0wjnHxm/2M3vNDuas2cEHK7fx2uLNAOS0bOwPjU4ZnHxCswY5n1Fc6oiL0sNfoYYhYWZvVdMktQ5qEZEGyMzITk8mOz2ZKwZmU1rmWFn47dHQeGF+Ac/MXo8vxujasjH9s5syuGMGgzo0o0mj8L+Q0pHdTdGqprG+swbPrz/OWkQkAsTGGL3apNGrTRo35HbkYHEpiwt2MWfNDpZt3s2rizbz3LwCzKB7VioD2jejd5s0TmrXlOz0RmG377+kzEXtBYeghiHhnPtRfRciIpEpMS726FnfAIdLyli+eTdz1+5k7todTP5kE5PmbgAgMzWBtk0b0adtE+J9MXTPSqVfdlOy0hJDFh4Hi0uJ1+4mERFvxPti6N++Gf3bN+OWUZ0pKS1jzfYiPtmwi6UFuyj4Zj/Pz9tAmYPSwOGnTRrF0bF5Ct2zUunbtgl92zXhhPRkYjzYDVSwcz9tmjaq988JVwoJEQkpX2wMOS1TyWmZylWDsgEoK3OUOcfnX+1lycZdrNq6l7Xbi5iyZDMvzC8AICkuluz0RnRt2Ziclqm0TEugdZNGdGieTHpyfJ2MPLbvPcTSjbu4Ibfjcb9XQ6WQEJGwExNjxPDd3MYRpWWOtduLyN+4my+27WXdjn0s2rCLqfmF//X61EQfHZqn0KF5Mh2bp9AhI5kOzVPITm9Uq+tqLNu0mzIHp+a0qLPv1tCYc867DzO7GbgG6IX/GtnXVNH2NvzX1G4EvA7c4Jw7VNX7N8vu5k7/1cQ6q1cqt3v3bpo0aRLqMiKe+rnmSkrLKC51HCop5UBxGQeLSzlYXMqB4tKjay8dER8bQ2yM4XD+NalKi0lKTKC41GHmn3hP8MUSF2t8vfcQ+w+XcmLbJhF9hNOrPxmy2DnXv7LnvB5JFAIPAGcCScEamdmZwF3AqYHXvAHcF9gmIvJffLEx+GIhKT72f65ZUFrmjgbGweIyDpWUUhIIhEMlZRwqhr3Fh46eVV1a6igt98dz26ZJER0Q1fF0JHH0Q80eANoEG0mY2UvABufcrwKPRwEvOudaVvW+/fv3d4sWLarrcqWCvLw8cnNzQ11GxFM/e6NiPzvn2LW/mF37DxNjRvswPCy3rplZ2IwkaqoHMLXc42VAppmlO+f+65wNMxsHjAPIzMwkLy/PsyKjVVFRkfrZA+pnb1TXzwXelRKWwjUkUoA95R4fud+YCif2OecmABPAP5LQX171T3/hekP97A31c9XC9QyRIv57qY8j9/eGoBYRkagVriGxAuhT7nEfYFvFXU0iIlK/PA0JM/OZWSIQC8SaWaKZVbbL63ngOjPrbmZNgHuASd5VKiIi4P1I4h7gAP5DWa8M3L/HzNqZWZGZtQNwzk0HHgFmABvxzx391uNaRUSinqcT1865e4F7gzydUqHt48Dj9VySiIhUIVznJEREJAwoJEREJCiFhIiIBKWQEBGRoBQSIiISlEJCRESCUkiIiEhQCgkREQlKISEiIkEpJEREJCiFhIiIBKWQEBGRoBQSIiISlEJCRESCUkiIiEhQCgkREQlKISEiIkEpJEREJCiFhIiIBKWQEBGRoBQSIiISlEJCRESCUkiIiEhQCgkREQlKISEiIkEpJEREJCiFhIiIBKWQEBGRoBQSIiISlEJCRESCUkiIiEhQCgkREQnK05Aws2Zm9oaZ7TOzAjO7PEi7e82s2MyKyt06eFmriIiAz+PPewo4DGQCfYF3zGyZc25FJW0nO+eu9LI4ERH5b56NJMwsGbgIGO+cK3LOzQbeAq7yqgYREakdL3c3dQFKnHNflNu2DOgRpP15ZvaNma0wsxvqvzwREanIy91NKcC3FbbtARpX0vZVYAKwDRgI/MvMdjvnXq7Y0MzGAeMAMjMzycvLq8uapRJFRUXqZw+on72hfq6alyFRBKRW2JYK7K3Y0Dm3stzDuWb2BHAx8D8h4ZybgD9Q6N+/v8vNza2reiWIvLw81M/1T/3sDfVz1bzc3fQF4DOzzuW29QEqm7SuyAFWL1WJiEhQnoWEc24fMAW438ySzWwoMAZ4oWJbMxtjZk3N72TgFmCqV7WKiIif1yfT3QgkAV/j33V0g3NuhZkNN7Oicu0uA9bg3xX1PPCwc+45j2sVEYl6np4n4Zz7Brigku2z8E9sH3n8Aw/LEhGRILQsh4iIBKWQEBGRoBQSIiISlEJCRESCUkiIiEhQCgkREQlKISEiIkEpJEREJCiFhIiIBKWQEBGRoBQSIiISlEJCRESCUkiIiEhQCgkREQlKISEiIkEpJEREJCiFhIiIBKWQEBGRoBQSIiISlEJCRESCUkiIiEhQCgkREQlKISEiIkEpJEREJCiFhIiIBKWQEBGRoBQSIiISlEJCRESCUkiIiEhQCgkREQlKISEiIkEpJEREJCiFhIiIBOVpSJhZMzN7w8z2mVmBmV0epJ2Z2cNmtjNwe9jMzMtaRUQEfB5/3lPAYSAT6Au8Y2bLnHMrKrQbB1wA9AEc8G9gPfD/PKtURES8G0mYWTJwETDeOVfknJsNvAVcVUnzq4HHnHObnXNbgMeAa7yqVURE/LwcSXQBSpxzX5TbtgwYUUnbHoHnyrfrUdmbmtk4/CMPgCIzW10HtdZEGrDHo9fXpG1VbYI9V9n2mmzLAHZUU09dUT97Q/3sjXDt5+ygLZxzntyA4cDWCtvGAnmVtC0Fcso97ox/t5N5VW8Nvs8Er15fk7ZVtQn2XGXba7INWKR+Vj+rnyO7n4/cvJy4LgJSK2xLBfbWoG0qUOQC3ypMvO3h62vStqo2wZ6rbHtNt3lF/ewN9bM3GlI/A4G/zL0QmJPYBfRwzn0Z2PY8UOicu6tC27nAs865fwQeXwuMc84N8qRYqZKZLXLO9Q91HZFO/ewN9XPVPBtJOOf2AVOA+80s2cyGAmOAFypp/jxwu5m1NrNWwM+BSV7VKtWaEOoCooT62Rvq5yp4NpIA/3kSwETgdGAncJdz7iUzGw6855xLCbQz4GHgx4GXPg38Msx2N4mIRDxPQ0JERBoWLcshIiJBKSSkXpjZyWY2z8xmmtnLZhYX6poikZmlmdlCMysys56hrieSBJYDmmVmL0Tzz69CQurLJuBU59wpwAb8BylI3dsPnAO8HupCIomZ9QFaO+eGA6uAi0NcUsgoJKReOOe+cs4dCDw8DJSFsp5I5Zwrds5tD3UdEWgI8EHg/nRgaAhrCSmFhGBmN5vZIjM7ZGaTKjxXo5V7q3jvbOAMQnsCU1ioz36Wyh1HnzcFvg3c3wM086jksOP1KrASngqBB4AzgaQKzwVdudfMWgKvVPJ+lznntppZKv7zYK5xzhXXW/UNR730cz3WGwmOqc+B3Xy36kMa8I0XxYYjhYTgnJsCYGb9gTZHtpdbubenc64ImG1mR1buvSvwCyq3svc0Mx/+X2z3Oee8WnQxrNVHP0vVjrXPgbnA7fhP7D0TmONx6WFDu5ukKsFW7q10Rd4KfgAMBMabWZ6ZXVofBUaI4+lnzOxd/Lv0/mFm19R9eRGpyj53zuUD28xsVmDbvzyvMExoJCFVSeG7/bJH7AEaV/dC59wLVL7kivyvY+5nAOfc6DqvKPJV2+fOuV94WlGY0khCqlKblXvl2Kmfvac+ryGFhFTlC8BnZp3LbesDVLzcrBwf9bP31Oc1pJAQzMxnZolALBBrZolm5qvlyr1SDfWz99TndcCrKzLpFr434F78V/4rf7s38Fwz4E1gH7ARuDzU9TbUm/pZfd4Qb1oFVkREgtLuJhERCUohISIiQSkkREQkKIWEiIgEpZAQEZGgFBIiIhKUQkJERIJSSIjUITO718w+C3UdInVFJ9NJgxO4wliGc+7cUNdSkZmlAAnOuZ2hriUYM3PA951zui62VEsjCZEaMLP4mrRzzhWFIiDMLMbMYr3+XIl8CgmJOGbW3czeMbO9Zva1mb0cuATokecHmNkHZrbDzL41s9lmNrjCezgzu8nMppjZPuDBI7uSzOwyM1sbeP83zSyj3Ov+a3eTmU0ys2lmdquZbTGzXWb2rJk1Ktcm2cyeN7MiM9tmZncHXjOpiu94TaD96MDnHQa6VffdzGxD4O5rge+4odxz55nZYjM7aGbrzez3NQ1HiVwKCYkoZpYFzAQ+A04GTsN/gZmpZnbk570x/tU+hwfa5APvmll6hbf7LfAu0Av/9ZAB2gOXAhfivxrcicDvqylrONAzUMuR195a7vnHgBGB7afiX7J6eA2+biIwHrge6A4U1OC7DQj8dyyQdeSxmZ0JvAj8Bf+V2K4FLgYerEEdEslCvcKgbrrV9gZMAqYFee5+4KMK25riX/3z5CCvMeAr4Mpy2xzwZIV29wIHgbRy234NrKnQ5rMKtW4CYstt+wfwYeB+Cv5RwGXlnk8GdgGTquiDawI19qumr4J9t4srtJsJjK+w7QL8F+exUP8/1y10N40kJNL0A04J7IopMrMi/L+kAToCmFkLM/u7mX1hZnvwX42sBdCuwnstquT9C5xze8o9Lgy8tiornXOlQV7TEYgDFh550vmvdVCTI6RK8I8UjqrFd6uoH/DrCv32Ev7Aaln1SyWS6RrXEmligHeAOyp5blvgv88BmcBtwAbgEPARUHH/+75K3qO4wmNH9bttj+U1NXGoQvhAzb9bRTHAfcBrlTy3/fjKlIZMISGRZglwCf6/+Cv+cj5iGHCLc+4dADPLxL9/PhTW4g+RAcC6QD2N8M9hrD2G96vJdyvGf6W28pYAOc65NcfwmRLBFBLSUKWaWd8K23bjn2AeC0w2s4fx/xXcAX9w/Nw5txf/9Y2vNLMF+HenPIJ/XsBzzrkiM5sIPGxmO/DPH9yD/y/7YzmJqSbfbQMwysz+g380sgv/XM40MysAXsW/K6sn/nmcO4+hDokQmpOQhmo4sLTC7Y/OuUJgKFAGTMd/Yfun8O92ORR47bX4J4wXA68AE/H/4gyVO4BZwFvADGA5/vmQg8fwXjX5bj8HRuKfq1kK4Jx7HzgnsH1h4HYX/st6ShTTGdciYcbMEvAfzvqoc+6xUNcj0U27m0RCzMxOBLrh/+u9MfDLwH8nh7IuEVBIiISL24GufHdY6ynOuc0hrUgE7W4SEZEqaOJaRESCUkiIiEhQCgkREQlKISEiIkEpJEREJCiFhIiIBPX/Aff06w0/LPXxAAAAAElFTkSuQmCC\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "plt.plot(expon_lr.rates, expon_lr.losses)\n", - "plt.gca().set_xscale('log')\n", - "plt.hlines(min(expon_lr.losses), min(expon_lr.rates), max(expon_lr.rates))\n", - "plt.axis([min(expon_lr.rates), max(expon_lr.rates), 0, expon_lr.losses[0]])\n", - "plt.grid()\n", - "plt.xlabel(\"Learning rate\")\n", - "plt.ylabel(\"Loss\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "학습률이 6e-1을 지날 떄 손실이 갑자기 솟구치기 때문에 3e-1을 학습률로 사용하겠습니다:" - ] - }, - { - "cell_type": "code", - "execution_count": 122, - "metadata": {}, - "outputs": [], - "source": [ - "keras.backend.clear_session()\n", - "np.random.seed(42)\n", - "tf.random.set_seed(42)" - ] - }, - { - "cell_type": "code", - "execution_count": 123, - "metadata": {}, - "outputs": [], - "source": [ - "model = keras.models.Sequential([\n", - " keras.layers.Flatten(input_shape=[28, 28]),\n", - " keras.layers.Dense(300, activation=\"relu\"),\n", - " keras.layers.Dense(100, activation=\"relu\"),\n", - " keras.layers.Dense(10, activation=\"softmax\")\n", - "])" - ] - }, - { - "cell_type": "code", - "execution_count": 124, - "metadata": {}, - "outputs": [], - "source": [ - "model.compile(loss=\"sparse_categorical_crossentropy\",\n", - " optimizer=keras.optimizers.SGD(lr=3e-1),\n", - " metrics=[\"accuracy\"])" - ] - }, - { - "cell_type": "code", - "execution_count": 125, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'./my_mnist_logs/run_001'" - ] - }, - "execution_count": 125, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "run_index = 1 # 실행할 때마다 이 값을 늘립니다\n", - "run_logdir = os.path.join(os.curdir, \"my_mnist_logs\", \"run_{:03d}\".format(run_index))\n", - "run_logdir" - ] - }, - { - "cell_type": "code", - "execution_count": 126, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch 1/100\n", - "1719/1719 [==============================] - 7s 4ms/step - loss: 0.4200 - accuracy: 0.8678 - val_loss: 0.1022 - val_accuracy: 0.9696\n", - "Epoch 2/100\n", - "1719/1719 [==============================] - 5s 3ms/step - loss: 0.0937 - accuracy: 0.9701 - val_loss: 0.1104 - val_accuracy: 0.9684\n", - "Epoch 3/100\n", - "1719/1719 [==============================] - 5s 3ms/step - loss: 0.0667 - accuracy: 0.9787 - val_loss: 0.0756 - val_accuracy: 0.9778\n", - "Epoch 4/100\n", - "1719/1719 [==============================] - 5s 3ms/step - loss: 0.0453 - accuracy: 0.9853 - val_loss: 0.0773 - val_accuracy: 0.9802\n", - "Epoch 5/100\n", - "1719/1719 [==============================] - 5s 3ms/step - loss: 0.0349 - accuracy: 0.9890 - val_loss: 0.0867 - val_accuracy: 0.9766\n", - "Epoch 6/100\n", - "1719/1719 [==============================] - 5s 3ms/step - loss: 0.0282 - accuracy: 0.9911 - val_loss: 0.0728 - val_accuracy: 0.9830\n", - "Epoch 7/100\n", - "1719/1719 [==============================] - 5s 3ms/step - loss: 0.0241 - accuracy: 0.9916 - val_loss: 0.0744 - val_accuracy: 0.9818\n", - "Epoch 8/100\n", - "1719/1719 [==============================] - 5s 3ms/step - loss: 0.0173 - accuracy: 0.9945 - val_loss: 0.0843 - val_accuracy: 0.9818\n", - "Epoch 9/100\n", - "1719/1719 [==============================] - 5s 3ms/step - loss: 0.0118 - accuracy: 0.9961 - val_loss: 0.0957 - val_accuracy: 0.9808\n", - "Epoch 10/100\n", - "1719/1719 [==============================] - 5s 3ms/step - loss: 0.0080 - accuracy: 0.9975 - val_loss: 0.0931 - val_accuracy: 0.9820\n", - "Epoch 11/100\n", - "1719/1719 [==============================] - 5s 3ms/step - loss: 0.0099 - accuracy: 0.9968 - val_loss: 0.0917 - val_accuracy: 0.9820\n", - "Epoch 12/100\n", - "1719/1719 [==============================] - 5s 3ms/step - loss: 0.0055 - accuracy: 0.9982 - val_loss: 0.1126 - val_accuracy: 0.9764\n", - "Epoch 13/100\n", - "1719/1719 [==============================] - 5s 3ms/step - loss: 0.0097 - accuracy: 0.9972 - val_loss: 0.0920 - val_accuracy: 0.9802\n", - "Epoch 14/100\n", - "1719/1719 [==============================] - 5s 3ms/step - loss: 0.0137 - accuracy: 0.9956 - val_loss: 0.1085 - val_accuracy: 0.9804\n", - "Epoch 15/100\n", - "1719/1719 [==============================] - 5s 3ms/step - loss: 0.0087 - accuracy: 0.9972 - val_loss: 0.0843 - val_accuracy: 0.9836\n", - "Epoch 16/100\n", - "1719/1719 [==============================] - 5s 3ms/step - loss: 0.0098 - accuracy: 0.9966 - val_loss: 0.1022 - val_accuracy: 0.9832\n", - "Epoch 17/100\n", - "1719/1719 [==============================] - 5s 3ms/step - loss: 0.0059 - accuracy: 0.9982 - val_loss: 0.0951 - val_accuracy: 0.9826\n", - "Epoch 18/100\n", - "1719/1719 [==============================] - 5s 3ms/step - loss: 0.0020 - accuracy: 0.9995 - val_loss: 0.0878 - val_accuracy: 0.9850\n", - "Epoch 19/100\n", - "1719/1719 [==============================] - 5s 3ms/step - loss: 6.4920e-04 - accuracy: 0.9999 - val_loss: 0.0860 - val_accuracy: 0.9860\n", - "Epoch 20/100\n", - "1719/1719 [==============================] - 5s 3ms/step - loss: 3.1709e-04 - accuracy: 0.9999 - val_loss: 0.0880 - val_accuracy: 0.9854\n", - "Epoch 21/100\n", - "1719/1719 [==============================] - 5s 3ms/step - loss: 9.8433e-05 - accuracy: 1.0000 - val_loss: 0.0882 - val_accuracy: 0.9854\n", - "Epoch 22/100\n", - "1719/1719 [==============================] - 5s 3ms/step - loss: 7.0190e-05 - accuracy: 1.0000 - val_loss: 0.0892 - val_accuracy: 0.9856\n", - "Epoch 23/100\n", - "1719/1719 [==============================] - 5s 3ms/step - loss: 5.8846e-05 - accuracy: 1.0000 - val_loss: 0.0904 - val_accuracy: 0.9856\n", - "Epoch 24/100\n", - "1719/1719 [==============================] - 5s 3ms/step - loss: 4.7245e-05 - accuracy: 1.0000 - val_loss: 0.0910 - val_accuracy: 0.9854\n", - "Epoch 25/100\n", - "1719/1719 [==============================] - 5s 3ms/step - loss: 4.3524e-05 - accuracy: 1.0000 - val_loss: 0.0916 - val_accuracy: 0.9856\n", - "Epoch 26/100\n", - "1719/1719 [==============================] - 5s 3ms/step - loss: 3.8366e-05 - accuracy: 1.0000 - val_loss: 0.0925 - val_accuracy: 0.9854\n" - ] - } - ], - "source": [ - "early_stopping_cb = keras.callbacks.EarlyStopping(patience=20)\n", - "checkpoint_cb = keras.callbacks.ModelCheckpoint(\"my_mnist_model.h5\", save_best_only=True)\n", - "tensorboard_cb = keras.callbacks.TensorBoard(run_logdir)\n", - "\n", - "history = model.fit(X_train, y_train, epochs=100,\n", - " validation_data=(X_valid, y_valid),\n", - " callbacks=[checkpoint_cb, early_stopping_cb, tensorboard_cb])" - ] + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "kernelspec": { + "display_name": "TensorFlow 2.4 on Python 3.8 & CUDA 11.1", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.7" + }, + "nav_menu": { + "height": "264px", + "width": "369px" + }, + "toc": { + "navigate_menu": true, + "number_sections": true, + "sideBar": true, + "threshold": 6, + "toc_cell": false, + "toc_section_display": "block", + "toc_window_display": false + }, + "colab": { + "name": "10_neural_nets_with_keras.ipynb", + "provenance": [] + }, + "accelerator": "GPU" }, - { - "cell_type": "code", - "execution_count": 127, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "313/313 [==============================] - 1s 2ms/step - loss: 0.0739 - accuracy: 0.9812\n" - ] - }, - { - "data": { - "text/plain": [ - "[0.0739181786775589, 0.9811999797821045]" - ] - }, - "execution_count": 127, - "metadata": {}, - "output_type": "execute_result" + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "34j0A4tMCxBe" + }, + "source": [ + "**10장 – 케라스를 사용한 인공 신경망 소개**\n", + "\n", + "_이 노트북은 10장에 있는 모든 샘플 코드와 연습문제 해답을 가지고 있습니다._" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "CUoVjTvQCxBf" + }, + "source": [ + "\n", + " \n", + "
\n", + " 구글 코랩에서 실행하기\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "0x5l9aOeCxBg" + }, + "source": [ + "# 설정" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "zg5RYSLtCxBg" + }, + "source": [ + "먼저 몇 개의 모듈을 임포트합니다. 맷플롯립 그래프를 인라인으로 출력하도록 만들고 그림을 저장하는 함수를 준비합니다. 또한 파이썬 버전이 3.5 이상인지 확인합니다(파이썬 2.x에서도 동작하지만 곧 지원이 중단되므로 파이썬 3을 사용하는 것이 좋습니다). 사이킷런 버전이 0.20 이상인지와 텐서플로 버전이 2.0 이상인지 확인합니다." + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "sIqV-rCgCxBh" + }, + "source": [ + "# 파이썬 ≥3.5 필수\n", + "import sys\n", + "assert sys.version_info >= (3, 5)\n", + "\n", + "# 사이킷런 ≥0.20 필수\n", + "import sklearn\n", + "assert sklearn.__version__ >= \"0.20\"\n", + "\n", + "# 텐서플로 ≥2.0 필수\n", + "import tensorflow as tf\n", + "assert tf.__version__ >= \"2.0\"\n", + "\n", + "# 공통 모듈 임포트\n", + "import numpy as np\n", + "import os\n", + "\n", + "# 노트북 실행 결과를 동일하게 유지하기 위해\n", + "np.random.seed(42)\n", + "\n", + "# 깔끔한 그래프 출력을 위해\n", + "%matplotlib inline\n", + "import matplotlib as mpl\n", + "import matplotlib.pyplot as plt\n", + "mpl.rc('axes', labelsize=14)\n", + "mpl.rc('xtick', labelsize=12)\n", + "mpl.rc('ytick', labelsize=12)\n", + "\n", + "# 그림을 저장할 위치\n", + "PROJECT_ROOT_DIR = \".\"\n", + "CHAPTER_ID = \"ann\"\n", + "IMAGES_PATH = os.path.join(PROJECT_ROOT_DIR, \"images\", CHAPTER_ID)\n", + "os.makedirs(IMAGES_PATH, exist_ok=True)\n", + "\n", + "def save_fig(fig_id, tight_layout=True, fig_extension=\"png\", resolution=300):\n", + " path = os.path.join(IMAGES_PATH, fig_id + \".\" + fig_extension)\n", + " print(\"그림 저장:\", fig_id)\n", + " if tight_layout:\n", + " plt.tight_layout()\n", + " plt.savefig(path, format=fig_extension, dpi=resolution)" + ], + "execution_count": 1, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "zp3ftOX0CxBh" + }, + "source": [ + "# 퍼셉트론" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "0TD0BPE8CxBi" + }, + "source": [ + "**노트**: 사이킷런 향후 버전에서 `max_iter`와 `tol` 매개변수의 기본값이 바뀌기 때문에 경고를 피하기 위해 명시적으로 지정합니다." + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "oSkoXncrCxBi" + }, + "source": [ + "import numpy as np\n", + "from sklearn.datasets import load_iris\n", + "from sklearn.linear_model import Perceptron\n", + "\n", + "iris = load_iris()\n", + "X = iris.data[:, (2, 3)] # 꽃잎 길이, 꽃잎 너비\n", + "y = (iris.target == 0).astype(np.int)\n", + "\n", + "per_clf = Perceptron(max_iter=1000, tol=1e-3, random_state=42)\n", + "per_clf.fit(X, y)\n", + "\n", + "y_pred = per_clf.predict([[2, 0.5]])" + ], + "execution_count": 2, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "Q_l6_3U5CxBj", + "outputId": "53e57449-c9fc-4719-b4e7-c7a4ce87389e", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "y_pred" + ], + "execution_count": 3, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([1])" + ] + }, + "metadata": {}, + "execution_count": 3 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "uUnWHYr7CxBk", + "outputId": "87c39b05-e08e-4fe4-b913-6c36860a4cec", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 315 + } + }, + "source": [ + "a = -per_clf.coef_[0][0] / per_clf.coef_[0][1]\n", + "b = -per_clf.intercept_ / per_clf.coef_[0][1]\n", + "\n", + "axes = [0, 5, 0, 2]\n", + "\n", + "x0, x1 = np.meshgrid(\n", + " np.linspace(axes[0], axes[1], 500).reshape(-1, 1),\n", + " np.linspace(axes[2], axes[3], 200).reshape(-1, 1),\n", + " )\n", + "X_new = np.c_[x0.ravel(), x1.ravel()]\n", + "y_predict = per_clf.predict(X_new)\n", + "zz = y_predict.reshape(x0.shape)\n", + "\n", + "plt.figure(figsize=(10, 4))\n", + "plt.plot(X[y==0, 0], X[y==0, 1], \"bs\", label=\"Not Iris-Setosa\")\n", + "plt.plot(X[y==1, 0], X[y==1, 1], \"yo\", label=\"Iris-Setosa\")\n", + "\n", + "plt.plot([axes[0], axes[1]], [a * axes[0] + b, a * axes[1] + b], \"k-\", linewidth=3)\n", + "from matplotlib.colors import ListedColormap\n", + "custom_cmap = ListedColormap(['#9898ff', '#fafab0'])\n", + "\n", + "plt.contourf(x0, x1, zz, cmap=custom_cmap)\n", + "plt.xlabel(\"Petal length\", fontsize=14)\n", + "plt.ylabel(\"Petal width\", fontsize=14)\n", + "plt.legend(loc=\"lower right\", fontsize=14)\n", + "plt.axis(axes)\n", + "\n", + "save_fig(\"perceptron_iris_plot\")\n", + "plt.show()" + ], + "execution_count": 4, + "outputs": [ + { + "output_type": "stream", + "text": [ + "그림 저장: perceptron_iris_plot\n" + ], + "name": "stdout" + }, + { + "output_type": "display_data", + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAsgAAAEYCAYAAABBfQDEAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzdeZzO9frH8dc1hhkN40zZKqZsU3FkCTlRlspWlpPWk/YS2k/H8pMZe9nXGHQshUpCUqEFJUIjNGeQFpqiMCXMYBjz+f0x4zbG7MZ9z4z38/G4H819fT7f7/e6x9I1X5/v5zLnHCIiIiIiksLP1wmIiIiIiBQkKpBFRERERNJQgSwiIiIikoYKZBERERGRNFQgi4iIiIikoQJZRERERCQNFcgiIiIiIml4rUA2swAzm25mP5vZYTPbbGZts5j/gpn9bmaHzGyGmQWkGbvSzFaa2REz225mt3jnU4iIiIhIUefNO8j+wC9AM6AM0A94x8yuTD/RzFoDfYCbgSuAqsDANFPeAjYBlwAvAe+aWbnzmLuIiIiIXCDMl530zOxbYKBzbkG6+JvALudc39T3NwNznXMVzSwMiAbKOucOp46vTh2f4t1PICIiIiJFjb+vLmxmFYAwICaD4VrA4jTvtwAVzOyS1LGfThXHacZrZXKdrkBXgICAoOsqVLg6H7IXEREREW+Ljc18LDQ0J8fswrk4y+46PimQzaw4MBd43Tm3PYMppYCDad6f+rp0BmOnxi/P6FrOuWnANIArrmjg+vaNOofMRURERMRXunXLfKxv35wc0yBH1/H6LhZm5gfMBo4DT2cyLR4ITvP+1NeHMxg7NX4YEREREZFz5NUC2cwMmA5UADo7505kMjUGqJPmfR1gr3Puj9SxqmZWOt14Rks1RERERKSICE5/izSbeHZjmfHqQ3pmNgWoC9zinIvPYl4bYBbQEtgDLAQ2OOf6pI6vA74kZSeMtsBMoIZzbn9W19cSCxEREZELV7duttE5l+06C2/ug3wF8CQpBfLvZhaf+rrfzEJTvw4FcM4tA0YAK4FY4Gegf5rT3UvKIpIDwDDgzuyKYxERERGRnPDaQ3rOuZ+BrJ4aLJVu/hhgTCbn2gU0z6/cREREREROUatpEREREZE0VCCLiIiIiKThs0YhIiIiIiLnW69ecOjQqXfXXZeTY3QHWURERESKrNPFcc6pQBYRERERSUMFsoiIiIhIGiqQRURERETSUIEsIiIiIpKGCmQRERERKbKCg3N/jLZ5ExEREZEia8SI019367ZxY06O0R1kEREREZE0VCCLiIiIiKRxQRXIBw78Qnx8nK/TEBEREZEC7IJag3z48D7Cw6vTpk1fWrZ8luLFA32dkoiIiMgFqVu3zMemTMk43r07OHd23AwiI/MnL7jA7iADHD16kEWLetO//1WsXz+X5ORkX6ckIiIiIjmQUXGcVTyvLqgCOSCguOfrP/+MZebMLgwb1ojvvlvlu6REREREpEC5oArkmjUrM358V8qWPb0hXmzsRsaObcGkSe357bdtPsxORERERAqCC6pANjO6d2/Htm2R9OrVmcDAEp6x6OgPGDy4NnPnduPQob0+zFJEREREfMmrBbKZPW1mUWaWaGazspg3xczi07wSzexwmvFVZnYszfh3ucmjTJkghgx5gJiYSXTp0gIzAyA5+SSrV08lPLw6H344mMTEhLx+VBEREREppLx9B3kPMASYkdUk51w351ypUy/gLWB+umlPp5lzVV6SqVy5HDNmPMe6daNp2fJaTzwxMZ4lSyKIiAhj7dqZJCefzMvpRURERCQfpd7TzHE8z9dx+f3YX04uajYEqOScezgHc4OA34HbnXOfp8ZWAXOcc//NzXWvu666W7dudIZjzjmWL/+GPn1eZ+vW2DPGLr+8NnfcMZJatVrn5nIiIiIiUoB062YbnXMNsptXGNYgdwb2A1+ki79iZnFmtsbMmmd2sJl1TV3WERUXdyjTi5gZbdpcR1TUWKZMeYqKFUM8Y7t3RzNxYhsmTGjNr79+e26fRkREREQKtMJQID8EvOHOvNXdG6gKXA5MA5aYWbWMDnbOTXPONXDONUi7e0Vm/P2L8eijt7J162TCw+/loosCPGNbt37M0KF1eeONRzlwYPe5fCYRERERKaAKdIFsZqFAc+CNtHHn3Hrn3GHnXKJz7nVgDdAuP69dqlRJwsPvZdu2SB577Fb8/PxOXZu1a2cSEVGD998P59ixw9mcSUREREQKkwK9BtnMXgJaO+duymbeUmCpc25CVvOyWoOcnZiYWPr2fZ2lSzeeES9dujy33z6Apk2foFixC6pzt4iIiBQCvXrBoQxWmQYHw4gR3s/H2878/A1wLirbR/q8vc2bv5kFAsWAYmYWaGZZVZUPArPSneNvZtb61LFmdj9wE7DsvCUO1KoVyuLF4SxbNpA6dap44ocP7+Ott3oweHBttmx5H1/8wCEiIiKSmYyK46ziRU1ePqe3l1j0A44CfYAuqV/3M7PQ1P2MQ09NNLN/AJU4e3u34qRsFbcfiAOeATo553Z4IX9atqzD+vWjmT79OSpVusQT//337URGdmTMmBb8/HOUN1IRERERkfPAqwWyc26Ac87SvQY452JT9zOOTTP3K+dckHPucLpz7HfONXTOlXbO/c0519g594k3P4efnx8PPNCCmJjJDB7chdKlS3rGvv/+c155pSHTp99PXNwub6YlIiIiIvmgQD+kV9CVLBlA7953sn37FHr0aIe/fzHP2Ndfv8mAAVezYEEvjhz5y4dZioiIiEhuqEDOB+XKlWHcuK5s3jyBjh0be+JJSYl88slIwsOr8dln40lKOu7DLEVEREQkJ1Qg56OwsMuZP78PK1YMpWHDGp54QsKfzJ//PAMH1mTjxnf1IJ+IiIh4TXAmbSAyixc1efmcPtnmzVfOZZu33HLOMX/+GsLDZ7Nz594zxqpW/QedO4+iWrUbvJKLiIiIiBStVtOFkplx991N+fbbVxkx4hFCQkp5xn766StGjmzC1Kl3sm/fDz7MUkRERETSU4F8ngUEFOf55zuybVskzz/fgRIlTm/7vGnTAgYMuIZ5854jPj7Oh1mKiIiIyCkqkL3k4otLM2LEo3z77avcdVdTTzw5OYmVKycQHl6d5ctHcOLEMR9mKSIiIiJag+wjX3+9g969Z/Hll1vPiF98cSgdO75Mw4b34eenn19ERETk3Hij1XRhaWetNcgFXMOGYXz22VDmz+9DjRqXeeJ//hnLzJldGDasEd99t9KHGYqIiEhR4I1W00WtnbUKZB8yMzp2bMzmzRMYP74rZcue3ockNnYjY8e2ZNKk9vz22zYfZikiIiJyYVGBXAAUL+5P9+7t2LYtkl69OhMYWMIzFh39AUOG/J25c7tx6NDeLM4iIiIiIvlBBXIBUqZMEEOGPEBMzCS6dGmBmQFw8mQyq1dPJTy8Oh9+OJjExAQfZyoiIiJSdKlALoAqVy7HjBnPsW7daFq2vNYTT0yMZ8mSCCIiwlizZgbJySd9mKWIiIhI0aQCuQCrV68qS5cO5P33w6lZM9QTP3hwD7NnP8bQofWIiVnuwwxFRESkoPNGq+mi1s5a27wVEklJJ3njjRUMGPAmv/9+4IyxmjVbcccdI6lU6dpMjhYRERERbfNWxPj7F+PRR29l69bJhIffS1BQoGds69aPGTq0Lm+88SgHDuz2YZYiIiIihZ8K5EKmVKmShIffy9atk3nssVs9zUScc6xdO5OIiBosXtyPY8cO+zhTERERkcJJBXIhdemlFxMZ+RQbN46jbdvrPPETJ46ydOlQwsOr8/nnkZw8meTDLEVEREQKH6+uQTazp4GHgdrAW865hzOZ9zAwHTiaJny7c25V6viVwEzgeiAWeNo592l21y/Ma5Czs2LFFnr3nsWWLTvPiFeseDX//Odwrr22vWfbOBEREclfBbnVcrdumY9NmXJ2LC+fxVufv3t3yKh0NYPIyJzk1gDnorItiLx9B3kPMASYkYO5XznnSqV5rUoz9hawCbgEeAl418zK5Xu2hUjLlnVYv340M2Y8R6VKl3jiv/++ncjIjowZ04Kff47yYYYiIiJFV1FqtZyXz+Ktz5/Zfd2s7vfmJQevFsjOuYXOufeAP/J6DjMLA+oD/Z1zR51zC4BooHM+pVlo+fn50aVLC2JiJjNkyAOULl3SM/b995/zyisNmT79fuLidvkuSREREZECriCvQa5nZnFmtsPMws3MPzVeC/jJOZf2KbQtqfGzmFlXM4sys6i4uEL4Y1welCwZQK9endm+fQo9erTD37+YZ+zrr99kwICrWLCgF0eO/OXDLEVEREQKpoJaIH8B/B0oT8qd4fuAnqljpYCD6eYfBEpndCLn3DTnXAPnXIOyZQvpbtV5VK5cGcaN68rmzRPo2LGxJ56UdJxPPhlJeHg1PvtsPElJx32YpYiIiEjBUiALZOfcT865nc65ZOdcNDAIuDN1OB5IX+kGA9rXLBNhYZczf34fVq58mYYNa3jiCQl/Mn/+8wwcWJONG9/lQmoaIyIiIpKZAlkgZ8ABp544jAGqmlnaO8Z1UuOShSZNavLllyOYM+c/VKlSwRPfv/9HXnvtLkaObMKPP671YYYiIiKFU1FqtZyXz+Ktz5/ZhlxZbdSVlxy8vc2bP+AP9AcqAU8ASc65pHTz2gLfOOf2mtnVwLvAfOfcwNTxdcCXQD+gLSlbvtVwzu3P6vpFeZu33EpMPEFk5Ee88sp8DhyIP2OsXr3O/POfwyhfvrqPshMRERHJfwW11XQ/UvY27gN0Sf26n5mFmlm8mYWmzrsZ+NbMEoCPgIXAy2nOcy/QADgADAPuzK44ljMFBBTn+ec7sn37FF54oSMlSvh7xjZtWsCAAdcwb95zxMfH+TBLEREREe/z6h1kX9Md5Mzt3LmX8PA5vPPO6jPiJUuWoU2bvrRs+SzFiwf6KDsRERGRc1dQ7yBLAVWlSgXmzHmRNWtG0LRpTU/86NGDLFrUm/79r2L9+rkkJyf7MEsRERGR8093kOUszjnef389ffu+wfff7zljLDS0Pp07j+Kqq1r4KDsREblQFeR2zt6Sl1bLuZWX7/O5t4DO2XXOle4gS56ZGR07Nmbz5glMmNCVtPtHx8Z+w9ixLZk0qT2//bbNh1mKiMiFpii1c86rvLRazq28fJ/zswV0Qfj1VIEsmSpe3J9u3dqxbVskvXp1JjCwhGcsOvoDBg+uzdy53Th48HcfZikiIiKSv1QgS7bKlAliyJAHiImZRJcuLbDUzQaTk0+yevVUIiKq8+GHg0lMTPBxpiIiIiLnTgWy5FjlyuWYMeM51q0bTcuW13riiYkJLFkSQUREGGvWzCA5+aQPsxQRERE5NyqQJdfq1avK0qUDef/9cGrWDPXEDx7cw+zZjzF0aD1iYpb7MEMRERGRvFOBLHliZrRpcx1RUWOZMuUpKlYM8Yzt3h3NxIltGD++Fb/+usWHWYqISFFSlNo551VeWi3nVl6+z/nZArog/HpqmzfJF/HxRxk7djFjxrxHQsIxT9zMaNz4ITp0GExISCUfZigiIiIXOm3zJl5VqlRJwsPvZevWyTz22K34+aX81nLO8dVXs4iICGPx4n4cO3bYx5mKiIiIZE0FsuSrSy+9mMjIp9i4cRxt217niZ84cZSlS4cSHl6dzz+P5OTJJB9mKSIiIpI5FchyXtSqFcrixeEsWzaQOnWqeOKHD+/jrbd6MHhwbbZseZ8LaYmPiIiIFA4qkOW8atmyDuvXj2bGjOeoVOkST/z337cTGdmRMWOas2vX1z7MUERERORMOXpIz8wCgeeAm4HypCusnXPXZnRcQaOH9Hzr6NFEJk78gBEjFnDo0JEzxho2/BcdOw6lbNkrfZOciIh49OqVcbvf4GAYMcL7+ZyLbt0yH5syJeN49+4Zt0g2g8hI3x6Tl1+b3B5TlH7908vvh/QmA32AXcB7wIJ0L5FslSwZQK9endm2LZIePdrh71/MM/b1128yYMBVLFjQiyNH/vJhliIiklFxlFW8qMns3mFW9xS9dUxefm1ye8yF/usP4J/DeZ2Au5xzn57PZOTCUK5cGcaN60qPHrfx0kuzWbx4HQBJScf55JORrF07nXbtwmnWrAf+/iV8nK2IiIhcaHJ6B/kI8Mv5TEQuPGFhlzN/fh9WrnyZRo3CPPGEhD+ZP/8FBg6sycaN8/Ugn4iIiHhVTgvkEcC/zfKzT4tIiiZNarJ69XDmzv0PVapU8MT37/+R1167m5Ejm/Djj2t9mKGIiIhcSDItkM3s/VMv4BbgHmCXmS1NO5Y6niNm9rSZRZlZopnNymLeQ2a20cwOmdmvZjbCzPzTjK8ys2NmFp/6+i6nOUjBZGbcdVdTvv32VUaOfJSQkFKesZ9++oqRI5swdeqd7Nv3gw+zFBERkQtBVneQ/0j3WgSsAH7PYCyn9gBDgBnZzLsIeB4oC1xPyu4Z/0k352nnXKnU11W5yEEKsICA4jz3XAe2b5/CCy90pESJ08vkN21awKBBVzNv3nPEx8f5MEsRkaItODh38aIms38vz+rf0b11TF5+bXJ7zIX+6w853OYt3y9qNgSo5Jx7OIfz/w20cM61T32/CpjjnPtvbq6rbd4Kn5079xIePod33ll9RjwwMJi2bV+iZctnKV480EfZiYiISGGSr9u8mdkKM/tbBvFgM1uRlwRz6SYgJl3sFTOLM7M1ZtY8swPNrGvqso6ouLgLaH+SIqJKlQrMmfMia9aMoGnTmp74sWOHWLSoN/37X8X69XNJTk72YZYiIiJSlOT0Ib3mQEb7bQUCN+ZbNhkws0eBBsCoNOHeQFXgcmAasMTMqmV0vHNumnOugXOuQdmyF9C/DRQxDRuG8dlnQ3n33f+jRo3LPPE//4xl5swuDBvWkO++W+nDDEVERKSoyLJANrP6ZlY/9e21p96nvhoCXYHd5ys5M+sEvAK0dc55Fp0659Y75w475xKdc68Da4B25ysPKRjMjA4drmfz5glMmNCVtD/wxMZ+w9ixLZk0qT179mz1YZYiIiJS2GXXKCQKcKmvjzMYPwo8k99JAZhZG+A14DbnXHQ20x2gLeguEMWL+9OtWzv+9a/mjBy5kPHj3+fYseMAREd/wP/+9xFNmz7B7bcPoEyZij7OVkRE8os32ix7M7eCfJ3cKqh55VV2SyyqANVIKT4bpb4/9bocCHbOZbcjhYeZ+ZtZIFAMKGZmgWm3b0szryUwF+jsnNuQbuxvZtb61LFmdj8pa5SX5TQPKRqCgy9i8OAuxMRM4oEHWnBqm27nklm9eioREdX58MPBJCYm+DhTERHJD95os5xXRe06uVVQ88qrLAtk59zPzrldzjk/51xU6vtTr9+ccydzeb1+pNx17gN0Sf26n5mFpu5nHJo6LxwoA3yUZq/jpaljxUnZKm4/EEfKHexOzrkducxFiojKlcsxffpzrF8/mpYtr/XEExMTWLIkgoiIMNasmUFycm5/u4qIiMiFKNMlFmb2YE5P4px7I4fzBgADMhkulWZeiyzOsR9omNPc5MJRt25Vli4dyPLl39Cnz+ts3RoLwMGDe5g9+zFWrBjHHXeMpFat1j7OVERERAqyrNYgT0r3vgQpd29P7aflB5wAEoEcFcgi55uZ0abNddxyS13eeGMFAwe+yW+/HQBg9+5oJk5swzXX3ErnziOpVKmOj7MVERGRgijTJRbOudKnXsC9wLekbOkWyOnt3TYD//JGoiK54e9fjEcfvZWtWyOJiLiPoKDTzUS2bfuEoUPr8frrj3DgwK8+zFJEREQKopzugzwKeNY5t8Y5l5T6WkNKO2i1ppMCKygokH797mHr1sk8/ngr/PxSfss75/jqq1lERISxeHE/jh077ONMRUQkO95os5xXRe06uVVQ88qrHLWaNrOjwPXOuW/TxesA65xzJc9TfvlKraYlJiaWvn1fZ+nSjWfES5cuz+23D6Bp08cpVqy4j7ITERGR8ylfW00D64EJZnb5qUDq12OBdXlLUcT7atUKZfHicJYvH0TdulU98cOH9/HWWz0YNKg2W7a8T05+cBQREZGiKacF8mPAJcAuM9tlZruAXUB54Inzk5rI+dOixbWsWzeKGTOeo3Llsp743r3fERnZkTFjmrNr19c+zFBERER8JUdLLAAspQvDrcDVqaFtwKeuEN1q0xILycjRo4lMnPgBI0Ys4NChI2eMNWz4Lzp2HErZslf6JjkRERHJNzldYpHjArkoUIEsWdm//yBDh85j2rTlJCWdbiri71+CFi2epU2bvgQFhfgwQxHJi6LWAreoKMhto6XoOuc1yGb279S20Ke+zvSVn4mL+Eq5cmUYN64rmzdPoFOnxp54UtJxPvlkFBER1fnss3EkJR33YZYikltFrQVuUVGQ20aLZNUo5BngdeBY6teZccCY/ExKxJfCwi7nnXf6sGbNVnr3nsWGDSldzBMS/mT+/BdYtepVOnV6hfr17yRl5ZGIiIgUJVk1CqninPsjzdeZvapmdg6RwqxJk5qsXj2cuXP/Q5UqFTzx/ft/5LXX7mbkyCb8+ONaH2YoIiIi50OOdrEws6zuNIsUWWbGXXc15dtvX2XkyEcJCSnlGfvpp68YObIJU6feyd693/swSxEREclPOd3m7S8z+9jM+prZDSqY5UITEFCc557rwPbtU3jhhY6UKHH6j8CmTQsYOLAm8+Y9S3x8nA+zFBERkfyQ0wK5EynNQtoCK4ADaQvm85adSAETElKK4cMfITp6EnfffaMnnpycxMqVE+nXrxrLl4/gxIljPsxSRNIqai1wi4qC3DZaJNfbvJlZSeAG4H6gC1DMOVfsPOSW77TNm+S3r7/eQe/es/jyy61nxC++OJSOHV+mYcP78PPL6c+hIiIicj7ld6tpzKy8md1Dyo4Vk4F7gTXAoDxnKVLINWwYxmefDeXdd/+PGjUu88T//DOWmTO7MGxYQ777bqUPMxQREZHcyulDeluBncCTwG9AVyDEOdfCOTfwPOYnUuCZGR06XM/mzROYMKEr5cqV8YzFxn7D2LEtmTSpPXv2bM3iLCIiIlJQ5PQOcmngJHAUOALEA+qWIJJG8eL+dOvWjm3bIund+04CA0t4xqKjP2Dw4NrMnduNgwd/92GWIiIikp0cr0E2s2pA89RXM1KK5tXASufc2Bye42ngYaA28JZz7uEs5r4A9AYuAt4FujvnElPHrgRmAtcDscDTzrlPs7u+1iCLN/3yy34GDHiTOXNWkfbPWUBAEK1a9eaWW/5NQECQDzMUEV/q3h0y+l+wGURGFr7rFNQ20GppLWnl+xpk59yPzrnppBS49wCLgDbAqFzktQcYAszIapKZtQb6ADcDVwBVgbRLOd4CNgGXAC8B75pZuVzkIXLeVa5cjunTn2P9+tHcfHMdTzwxMYElSyKIiAhjzZrpJCef9GGWIuIrmd2fyuWz8wXmOgW1DbRaWkte5HQNciMz62VmS4EDwCrgGmA00C6nF3POLXTOvQf8kc3Uh4DpzrkY59wBYDAphTlmFgbUB/o754465xYA0UDnnOYh4k1161blo48GsGRJBLVqhXriBw/uYfbsxxk6tB4xMct9mKGIiIikldM7yF+SshfyZuAu4GLn3D+cc//nnDsf/2evBWxJ834LUMHMLkkd+8k5dzjdeK2MTmRmXc0sysyi4uL0o5/4hpnRunV9oqLGMnXqU1x6aYhnbPfuaCZObMP48a349dctWZxFREREvCGnBXKIc+6GUwWxcy7hvGYFpYCDad6f+rp0BmOnxktndCLn3DTnXAPnXIOyZbWTuPhWsWLFeOSRW9m6NZKIiPsICgr0jG3b9glDh9bj9dcf4cCBX32YpYiIyIUtRwWyFwri9OKBtNXsqa8PZzB2avwwIoVEUFAg/frdw7ZtkTz+eCtPMxHnHF99NYuIiDAWL+7H0aP6Vw8RERFvK6gtvmKAOmne1wH2Ouf+SB2ramal043HeDE/kXxRsWIIkyf3YOPGcbRrd/qh2hMnjrJ06VAiIqrz+eeRnDx5wodZisj5YJa7eEG/TkFtA62W1pIXuW41fU4XM/MH/IH+QCXgCSDJOZeUbl4bYBbQkpSdLxYCG5xzfVLH15GyLrof0JaULd9qOOf2Z3V9bfMmBd3Kld/Su/csNm/+6Yx4hQpXcccdI7j22vZYfv9fTURE5AKR79u85ZN+pDQb6QN0Sf26n5mFmlm8mYUCOOeWASOAlaTsc/wzKUX1KfcCDUjZUWMYcGd2xbFIYdCixbWsWzeKGTOeo3Llsp743r3fERnZkTFjmrNr19c+zFBERKTo8+odZF/THWQpTI4eTeTVVz9k+PB3OXToyBljDRveR8eOL1O27JW+SU5ERKQQyukd5EwLZDP7d04v5pwbk4vcfEYFshRG+/cf5OWX32Hq1GUkJZ1uKlKihD/Nmj1PmzZ9CQoKyeIMIiIiAvlTIO/M4bWcc65qbpLzFRXIUpjt2LGbfv1m8957686IBwVdTLt24TRr1gN//xI+yk5ERKTgO+cCuShSgSxFwZo1W+ndexYbNuw4I162bFX++c9h1K9/px7kExERyUBBfUhPRM5RkyY1Wb16OG++2ZOqVSt44nFxP/Haa3czYsQN/PDDGh9mKCIiUrjl+A6ymYWQsqVaKHDGv+M65wblf2r5T3eQpahJTDzBlClLefnldzhwIP6MsXr17qBTp2FUqFDDR9mJiIgULPm6xMLMGgMfAolAOWA3cGnq+13OuWvPLV3vUIEsRdWBA/EMGzafSZM+5Pjx09uK+/n506xZd267LYJSpcpmcQYREZGiL7+XWIwE5gKXA8dIaeARCkQBw/OapIjkj5CQUgwf/gjR0ZO4++4bPfHk5CRWrpxIv37VWL58OMePH/VhliIiIoVDTgvka4FXXcrt5pNAgHNuL9AbGHCechORXKpSpQJz5rzI2rUjufHGWp74sWOHWLSoD/37X8X69XNITk72YZYiIiIFW04L5ONpvt4LXJH6dTxwWb5mJCLnrEGDGnz66RDefff/CAu73BM/cOAXZs58gGHDGvLdd6hV+HMAACAASURBVCt9mKGIiEjBldMC+RugYerXq4AhZvYQMAH49jzkJSLnyMzo0OF6Nm0az4QJXSlXroxnLDb2G8aObcmkSe3Zs2erD7MUEREpeHJaIL8E7En9uh+wH5gIhABPnoe8RCSfFC/uT7du7di2LZLeve8kMPD0JjTR0R8weHBt5s59koMHf/dhliIiIgWHGoWIXGB+/TWO/v3nMmfOKtL++Q8ICKJVq17ccsuLBAQE+TBDERGR8yNfd7EwsxVm9rcM4sFmtiIvCYqIb1SqVJbp059j/frR3HxzHU88MTGBJUv6ExFRgzVrppOcfNKHWYqIiPhOTpdYNCddc5BUgcCNGcRFpICrW7cqH300gCVLIqhVK9QTP3jwN2bPfpyhQ+sRE7PchxmKiIj4RpYFspnVN7P6qW+vPfU+9dUQ6EpK0xARKYTMjNat6xMVNZapU5/i0ktDPGO7d0czcWIbxo9vxa+/bvFhliIiIt6V5RpkM0sGTk2wDKYcBZ5xzs04D7nlO61BFslaQsIxxo5dzOjRi0hIOOaJmxmNGz9Ehw6DCQmp5MMMRURE8i6/1iBXAaqRUhw3Sn1/6nU5EFxYimMRyV5QUCD9+t3Dtm2RPP54K/z8Uv6KcM7x1VeziIgIY/Hifhw9esjHmYqIiJw/WRbIzrmfnXO7nHN+zrmo1PenXr855/QUj0gRVLFiCJMn92DjxnG0a3f6B+0TJ46ydOlQIiKq8/nnkZw8ecKHWYqIiJwfOX1IDzNra2YfmNlWM6ucGnvczG7OxTkuNrNFZpZgZj+b2b8ymbfUzOLTvI6bWXSa8V1mdjTN+Mc5zUFEcq5WrVDee68fy5cPom7dqp744cP7eeutHgwaVJvNmxdzIW0XKSIiRV9Ot3m7H3gH+J6U5RXFU4eKAb1ycb1JpLStrgDcD0SaWa30k5xzbZ1zpU69gLXA/HTT2qeZ0yoXOYhILrVocS3r1o1i5sznqVy5rCe+d+93TJnSiTFjmrNr19c+zFBERCT/5PQOci/gCefcC0BSmvg6oG5OTmBmQUBnINw5F++c+xJ4H3ggm+OuJGUruTdymKuInAd+fn7cf39z/ve/SQwd+iDBwRd5xr7//guGDWvE9On/Ii5ul++SFBERyQc5LZBrAF9lEI8HgnN4jjAgyTm3I01sC3DWHeR0HgRWO+d2pYvPNbP9ZvaxmdXJ4DgAzKyrmUWZWVRcnB4sEjlXJUsG0LPnHWzbFslTT92Gv38xz9jXX7/FgAFXsWBBTxISDvgwSxERkbzLaYG8h5QCN72bgB9zeI5SQPoK9SBQOpvjHgRmpYvdD1wJXAGsBJZn1OkPwDk3zTnXwDnXoGzZnNbyIpKdcuXKMHbsE2zZMpFOnRp74klJx/nkk1FERFTns8/GkZR03IdZioiI5F5OC+RpwAQza5L6vrKZPQSMACJzeI6M7jYHA4czO8DMmgIVgXfTxp1za5xzR51zR5xzrwB/oY5+Ij5Ro8ZlvPNOH1ateoVGjU7/HJ2Q8Cfz57/AgAHXsHHjfD3IJyIihUaOCmTn3AhgIfAJEETKXdspwBTn3KQcXmsH4G9mNdLE6gAxWRzzELDQORefXYpk3MhERLzkhhuuYfXq4bz5Zk+qVq3gicfF/cRrr93NiBE38MMPa3yYoYiISM7keJs359xLQFlSGoY0Bso558JzcXwCKUX2IDMLSr0b3RGYndF8MysJ3E265RVmFmpmTcyshJkFmlnP1Lz0f14RHzMz7ryzCVu2vMqoUY8SElLKM7Zz5zpGjWrK1Kmd2bv3ex9mKSIikrUsC2Qzu8jMJpnZbjPbB/wX2OWc25CDu7oZ6QGUBPYBbwHdnXMxZnajmaU/XydSlk6sTBcvTcqyjgPAbqAN0NY590ce8hGR8yAgoDjPPtuB7dun8O9/d6JECX/P2KZNCxk4sCbz5j1LfHycD7MUERHJmGW1LtDMRpJS1M4FjgH3Aaucc3d5J738dd111d26daN9nYbIBWfnzr1ERMxh3rzVZ8QDA4Np27YvLVo8S4kSJX2UnYiIXCi6dbONzrkG2c3LbonFHcBjzrmuzrlngduATmZWLJvjREQ8qlSpwOzZL7J27UhuvPH0zo7Hjh1i0aI+9O9/FevXzyE5OdmHWYqIiKTIrkCuDHhu+TjnNpDSKOSy85mUiBRNDRrU4NNPh/Duu/9HWNjlnviBA78wc+YDDBvWkO++S7+qSkRExLuyK5CLkdIaOq0kwD+DuSIi2TIzOnS4nk2bxjNx4pOUK1fGMxYb+w1jx7Zk0qTb2bNnqw+zFBGRC1l2a5CTSdnaLTFNuC3wOXDkVMA51+F8JZiftAZZpOA5dOgIo0YtYty4xRw7dvrncTM/mjZ9nNtvH0iZMhV9mKGIiBQV+bUG+XVSuuj9keY1B/glXUxEJE+Cgy9i0KD72bp1Mg8+2BKzlC3NnUtm9eppRERU58MPB5GYmODjTEVE5EKR5R3kokZ3kEUKvi1bdtKnzyw++2zLGfEyZS6lQ4fB/OMfD+Pnp+eERUQk9/LrDrKIiFfVqVOFjz4awJIlEdSqFeqJHzz4G7NnP87QofWIiVmm1tUiInLeqEAWkQzt2/c5UVFPsGbNP4mKeoJ9+z732rXNjNat6xMVNZapU5/i0ktDPGO7d0czcWJbxo9vxS+/bPZaTiIicuFQgSwiZ9m373N+/HEyiYn7AUdi4n5+/HGyV4tkgGLFivHII7eydWskERH3ERQU6Bnbvv1TXn65Pq+//ggHDvzq1bxERKRoU4EsImeJjZ1DcnLiGbHk5ERiY+f4JJ+goED69buHbdsieeKJ1vj5pfzV5Zzjq69mMWhQNRYv7sfRo4d8kp+IiBQtKpBF5CyJiXG5intLxYohTJrUnW++GU+7dqefsTh69DhLlw4lIqI6q1ZN5uTJEz7MUkRECjsVyCJyloCAsrmKe1vNmpV5771+LF8+iLp1q3rihw/v5+23n2LQoNps3rxYD/KJiEieqEAWkbOEhnbBzy/gjJifXwChoV18lFHGWrS4lnXrRjFz5vOEhpbzxPfu/Y4pUzoxZkxzdu362ocZiohIYaQCWUTOUr58M6pV60FAQDnACAgoR7VqPShfvpmvUzuLn58f99/fnOjoVxk69EGCgy/yjH3//RcMG9aI6dP/RVzcLt8lKSIihYoahYhIkRIXd4ihQ+cxdeoykpJOeuL+/iVo0eJZ2rTpS1BQSBZnEBGRokqNQkTkglS2bDBjxz7Bli0T6dSpsSeelHScTz4ZRXh4NT77bBxJScd9mKWIiBRkKpBFpEiqUeMy3nmnD6tWvcL111/liR85coD5819gwIBr2Lhxvh7kExGRs6hAFpEi7YYbruGLL4bx5ps9qVq1giceF/cTr712NyNG3MAPP6zxYYYiIlLQeLVANrOLzWyRmSWY2c9m9q9M5g0wsxNmFp/mVTXNeF0z22hmR1L/W9d7n0JEMuLL1tTZMTPuvLMJW7a8yqhRjxISUsoztnPnOkaNasrUqZ3Zu/d7H2YpIiIFhbfvIE8CjgMVgPuBSDOrlcncec65UmlePwGYWQlgMTAHCAFeBxanxkXEBwpKa+rsBAQU59lnO7B9+xT+/e9OlCjh7xnbtGkhAwfWZN68Z4mP921DFBER8S2vFchmFgR0BsKdc/HOuS+B94EHcnmq5oA/MM45l+icmwAY0DI/8xWRnCtoramzExJSimHDHiY6ehL33HOjJ56cnMTKlRPp168ay5cP5/jxoz7MUkREfMWbd5DDgCTn3I40sS1AZneQ25vZn2YWY2bd08RrAd+6M5+s+Taz85hZVzOLMrOouLhD55K/iGSioLamzk6VKhWYPftF1q4dyY03nv4r5NixQyxa1If+/a9i/fo5JCcn+zBLERHxNm8WyKWA9BXqQaB0BnPfAa4BygFPABFmdl+a8xzM4Xlwzk1zzjVwzjUoWzY4r7mLSBYKemvq7DRoUINPPx3CggV9CQu73BM/cOAXZs58gGHDGrJ9+wofZigiIt7kzQI5HkhfoQYDh9NPdM5tdc7tcc6ddM6tBcYDd+b2PCLiHYWlNXVWzIz27RuxadN4Jk58knLlynjGYmO/Ydy4m5k06Xb27NnqwyxFRMQb/LOfkm92AP5mVsM5d+pR8TpATA6OdaSsMyZ1/otmZmmWWVxLygOAIuIDp1pQx8bOITExjoCAsoSGdimQramzU7y4P08+2Zb77mvGqFGLGD9+MUePpjQViY7+kP/9bylNmz7O7bcPpEyZij7OVqTwMUumfPk4KlT4i2LFTmZ/gEgOnTxZjL17/8a+fWVx7tzuAXu11bSZvU1Ksfs4UBf4CLjBOReTbl5H4AvgL6AhsAjo65x7PXW3iu+BMcAUUpZg9ARqOOeybI2lVtMiklu//hrHgAFvMnv2yjOaigQEBNGqVS9uueVFAgKCfJihSOFSrVosl15qXHxxBYoVK46ZZX+QSDacc5w8eYI//9zLb785fvwxNMN5BbXVdA+gJLAPeAvo7pyLMbMbzSw+zbx7gR9IWTbxBjDcOfc6QGoR3Al4kJQC+lGgU3bFsYhIXlSqVJb//vdZNmwYw8031/HEExMTWLKkPxERNVizZjrJyboTJpITwcEJlCt3Of7+JVQcS74xM/z9S1Cu3OUEByec+/kupDaruoMsIufCOcfHH2+iT59ZxMTEnjF22WV/p3PnkdSs2Vr/0xfJQr1626hS5RpfpyFF2M6d29i0KePfYwX1DrKISKFlZrRuXZ+oqLFMm/Y0l14a4hnbs+d/TJzYlvHjW/HLL5t9mKWIiJwrbz6kJyLp7Nv3uVcebIuOjuDQoW8974ODr6V27UH5mpu3Pou3rpOVYsWK8fDDt3DXXU0ZN24xo0YtIiHhGADbt3/Kyy/X5/rrH6RjxyGEhFTyam4iInLudAdZxEe81Z45fXEMcOjQt0RHR+Rbbt76LAWtpXVQUCAvvXQP27ZF8sQTrfHzS/kr1TnHunWvExFRg/fee4mjR9WkSETOn06dmtOnz9O+TqNIUYEs4iPeas+cvjjOLp6X3Lz1WQpqS+uKFUOYNKk733wznnbtTi9tO3HiGMuWvUxERHVWrZrMyZMnfJiliJyLZ555mPLljdGjB58RX7NmFeXLG3/8kfPOoTktaJ955mHuv//2bOfNnLmQfv1eyfH10zty5AhDh/alUaPqVK4cyNVXl+W225qwcOFbOT5HbOwuypc3Nm+OynMeBYkKZBEfKcjtmXObm7c+S0H+ngHUrFmZ997rx8cfD6Zevaqe+OHD+3n77acYNKg2mzcv5kJ6OFokv9WqBeXLn/2qVSv7Y89VYGAgkyaNJC5u//m/WA4cP56ygVdIyMWUKpVhQ+Ec6dmzG++9N48hQ8axZs125s//hDvv7MKBA3/mV6qFjgpkER8pyO2Zc5ubtz5LQf6epdW8eW2++moUM2c+T2hoOU98797vmDKlE2PGNGfXrq99mKFI4bU/k9o0s3h+atKkBZUrX8mYMYOznPfVV1/Qps31VK4cSM2aFQgPf8FTzD7zzMOsXfs5M2ZMonx5o3x5IzZ2V46uf+qO8oQJw6lTpxJ166Y845D+jvQHHyykWbNrCQ0tSVjYxXTs2Ix9+/Zmet7ly9/nuef+j1atbic09Epq167HI49057HHnvLMcc4xceIIGjasRmhoSZo1q838+af/9a5BgyoAtGrVkPLljU6dmgOQnJzM6NGDqVu3MpUqBdCsWW2WLl18xvVHjRpE/fpXUKlSALVqVeSppx70jK1YsYz27W+kRo0QwsIu5u67W7Njx7Ycfb/OhQpkER/xVnvm4OBrcxXPS27e+iyFqaW1n58f99/fnOjoVxk69EGCgy/yjH3//RcMG9aI//73PuLidvowSxHJDT8/P8LDh/H661PYufPHDOf89ttu7ruvLX//ez0++2wT48ZNZ+HCtxgy5P8AGDp0PA0a/IP77nuE6OjfiI7+jcsvr5zjHNau/ZytW7/l7beX8e67n501vnfv7zz55L3cc89DfPnlNhYv/oK77nogy3OWL1+RFSuWcejQwUznvPJKP958czrDh09i9eqtPPvs/9Gz55N88smHACxfvgGAt99eRnT0b8ycuRCAadPGM2nSSMLDh/P559G0bftPHnnkDqKjU3b7WbJkAZMnj2L48MmsW/c9c+d+QP36jTzXTUhIoGvX51m+fAOLFq0iOLgMXbq09/zAcb5oFwsRH/FWe+batQfleheL3Obmrc9SGFtalywZQM+ed/DII7cwdOg8pk5dRlJSSlORqKi32bx5Ic2bP0Pbti8RFBSSzdlExNduuaUdjRo14ZVXXmLatLfPGp85czIVKlzGiBGT8fPzIyzsGsLDh/Gf/zxJnz6DCQ4uQ4kSJShZ8iIqVMh9u/rAwEDGj59BQEBAhuN79+7hxIkTtG9/J5UrXwHANdf8Pctzjh49je7d7+fqq8tyzTW1adjwBtq06Ujz5rcCKUXqlCljeOedj2nc+EYArriiCps2bWDGjEnceuttXHJJyr+WXXzxJWd8rsmTR9Gjx3/o3PlfAPTpM4h1675g8uRRREbO4ddff6ZChUtp3rwVxYsXp1KlUOrWPf0sR/v2nc/Idfz4mVSrFsw332ygceOmufnW5YoKZBEfKl++mVeKu+y2dMtIbnPz1mfx1nXyW9mywYwd+wQ9etxGv36zWbToKwCSko7z6aejWbt2BrfdFkGzZj3w9y/h42xFJCvh4cNp1+4fPPVUz7PGduzYxnXXNfbsagPQqFFTjh8/zs6dP1CrVub/epcTV1/990yLY4Batepw0023cNNNf6d581bcdNMttG9/J2XLluPXX2Np2rSmZ+7zz/fl+ef78o9/3MTXX//Exo3r2LBhDatXr+Duu1vxwANdGT16Kjt2bOXYsWPce28b4HQjpKSkE1SufGWmuRw+fIjff99Do0ZNzohff31TPv30IwA6dLiL114bT4MGVWjRojUtW7ahdesOns+4c+ePDB8ezsaN6/njj/0kJyeTnJzM7t2xZ10vP2mJhYiIF9WocRnz5vVm1apXuP76qzzxI0cOMH/+CwwYcA1RUe/oQT6RAqx+/UbcfntnBg3qlavj8qPL5kUXBWU5XqxYMebP/5h33vmYmjWv5c03p9O4cQ3+978tVKx4GStWbPa8Hnqom+e44sWL07jxjTz7bB/mz/+YPn0GM3v2NGJjd5GcnAzA7NlLzjj+iy9ieOedj/P0OU59Ly6/vDJr137HqFFTKV06mP79X+TWW68jISGlXXSXLrcTF7efUaOmsmzZelas2IS/vz8nTpzfJRYqkEVEfOCGG67hiy+G8eabPalatYInHhf3E//97z2MGHEDP/ywxocZihRM5crlLn6+9O37MuvWrWbFimVnxMPCrmHjxnWeohJgw4YvKVGiBFdeWQ2A4sVLcPLkyfOWm5nRsOE/6NmzPx9//DUVK17G4sXz8Pf3p2rV6p5XSMjFmZ4jLCzlTnNCQjxXXVWTgIAAfv315zOOr1q1umcZR4kSKf/ylfZzlS4dTMWKl7Fhw5l/l61f/6Xn/JCybOTWW29j8OCxLF/+Ndu3x7Bhwxr+/PMPvv9+O88/35dmzW4hLOwa4uMPk5SUlG/fq8xoiYWIiI+YGXfe2YT27RsxdepSXn55Pn/+eRiAnTvXMWpUU+rVu4NOnYZRoUINH2crUjDExPg6gxRVq1bngQe68tpr48+IP/JID6ZNG0evXj3o2vU5fv75JwYP7sOjjz7NRRelPKwbGnolmzZtIDZ2F0FBpQgJufiMJRnnIipqHV988SktWrSmXLkKREdvYvfuX84oSNPr1Kk5//znfdSt24CQkEvYsWMrL7/clxo1riYs7BqKFStGjx7/YcCA/+Cco3Hjm0hIiGfjxnX4+fnx4INdKVu2PCVLlmTlyuVUrnwlgYGBBAeX4amnejJ8eARVq9agTp3rmD9/DuvWrebTT78B4O23Z5GUlET9+tcTFFSKxYvnUbx4capWrcHf/hbCJZeUZc6c17jsssr8/vtuBg7sib//+S9fVSCL+NAPP0xh796PgWTAjwoVWlG9ercsj/FG2+i8KAgtoAurgIDiPPtsBx54oCXDh7/Lq69+wPHjKXdINm1ayJYt79OsWXduuy2CUqUK1pZ2IheyF1+MYN6818+IXXrp5bz11lIGDuxJy5Z1CQ7+G507/4uXXnrZM6dHj//w9NMPceONNTl69ChRUTsJDb0yX3IKDi7Dhg1r+O9/J3Lo0F9cdlll/v3vcO66K/Pdflq0aM38+bN55ZWXSEiIp3z5ijRrdisvvhhBsWLFAOjTZzDlylVg8uRR9OrVndKlg6lVqy5PP52yzMTf35+hQycwevQgRo0aSOPGN/Lee6t44olniY8/zKBBvdi/fy/Vq1/FjBkL+Pvf66Tm+zcmThzOgAH/ISnpBGFhNZk5cyFXXJGybdy0afN46aVnadbs71SpUp0BA0bz6KOdM/4g+cgupHVu111X3a1bN9rXaYgAp4rjZWfFK1Rok2mRnFHbaMi6SD7VnjltBzo/vwCqVeuRbwWsN65xIdm1ay/h4XOYN2/1GfHAwGDatu1LixbPUqJESR9lJ3Ju6tXbRpUq1/g6DSnCdu7cxqZNGf8e69bNNjrnGmQ4mIbWIIv4SMqd45zHwTtto/OioLaALqyuvLICs2e/yNq1I7npptPtwY4dO8SiRX3o3/8q1q2bfcYaRxERyT8qkEV8JrPiJn+LHm+0Zy7oLaALqwYNavDJJ0NYsKAvYWGXe+IHDvzCrFkPMmxYQ7ZvX+HDDEVEiiYVyCI+k9kfv/z9Y+mN9syFpQV0YWRmtG/fiE2bxjNx4pOUK1fGMxYb+w3jxt3MpEm3s2fPVh9mKSJStKhAFvGRChVa5SoO3mkbnReFqQV0YVW8uD9PPtmWbdsi6dPnLkqWPN1MJDr6QwYPrs3cuU9y8ODvPsxSRKRo8GqBbGYXm9kiM0sws5/N7F+ZzOtpZv8zs8NmttPMeqYb32VmR80sPvWVt12qRXyoevVuVKjQhtN/DP2yfEAPUjripS+Gc9I2ulq1HgQElAOMgIBy+f7wnDeuISmCgy9i0KD7iYmZzIMPtvRstu9cMqtXTyMiojoffjiIxMQEH2cqIlJ4eXUXCzN7i5Rq4DGgLvAhcINzLibdvF7Ap8C3QDXgY6C3c+7t1PFdwOPOuU9zc33tYiEiRc2WLTv5v/+bxaefbjkjXqbMpXToMJh//ONh/PyK+Sg7kbNpFws53wrVLhZmFgR0BsKdc/HOuS+B94EH0s91zo1wzn3jnEtyzn0HLAaapJ8nInKhq1OnCh99NJAPPuhPrVqhnvjBg78xe/bjDBlSl5iYZWpdLSKSC95cYhEGJDnndqSJbQFqZTIfAEv598MbgfS9c+aa2X4z+9jM6mRxfFczizKzqLi4Q3nNXUSkQGvVqh5RUWOZNu1pLr00xBPfs+d/TJzYlvHjW/HLL5t9mKGISOHhzQK5FJC+Qj0IlM7muAGk5DkzTex+4ErgCmAlsNzM/pbRwc65ac65Bs65BmXLBuchbRGRwqFYsWI8/PAtbN0aSf/+9xEUFOgZ2779U15+uT6zZj3MgQO/+jBLEZGCz5utpuOB9BVqMHA4swPM7GngQeBG55ynC4Fzbk2aaa+Y2UOk3GVekn/pSlHhrRbIeWkbvXHjMxw79ovnfWBgZa67bmKWx6xZ0xk4mSZSjCZNFmRzzN3A8TSREjRp8k6Wx6xf/yhJSX963vv7X8z118/IdL63vs9qaZ29oKBAXnrpHh57rBWDB7/N9OmfkJycjHOOdeteZ+PGedx8879p3bo3JUvqxoFIfunUqTlXX/13hg171depyDny5h3kHYC/mdVIE6vD2UsnADCzR4E+wM3OuexudzjA8iVLKVJOtUBOTNwPOBIT9/Pjj5PZt+/zfL3O6bbRp5p8JLN37zJ++GFKpsekL44Bjh37hY0bn8n0mLOLY4CTqfHMjklfHAMcT41nLH1xDJCU9Cfr1z+a4XxvfZ+9dZ2iomLFECZN6s4334ynXbvTz6ScOHGMZcteJiKiOqtWTebkyRM+zFKkcHjmmYe5//7bs5wzc+ZC+vV7Jc/XOHLkCEOH9qVRo+pUrhzI1VeX5bbbmrBw4Vs5Pkds7C7Klzc2b47Kcx7ixQLZOZcALAQGmVmQmTUBOgKz0881s/uBl4FbnXM/pRsLNbMmZlbCzAJTt4ArC6xJfx4Rb7VAzkvb6PTFcXbxFOmL4+zicHZxnF2cs4rj7OLe+j6rpXXe1KxZmffe68fHHw+mXr2qnvjhw/t5++2nGDSoNps3L9aDfFJo/PXXXHbsuJKYGD927LiSv/6a69N8jh9P+fs0JORiSpXKbuVo5nr27MZ7781jyJBxrFmznfnzP+HOO7tw4EDGf/fK+ePtRiE9gJLAPuAtoLtzLsbMbjSz+DTzhgCXAF+n2ev41K240kAkcADYDbQB2jrn/vDap5BCw3stkL3TNrqg8tb3WS2tz03z5rX56qtRzJr1AqGh5TzxvXu/Y8qUTowe3YydOzf4MEOR7P3111z27OnKiRM/A44TJ35mz56uXi2ST91NnjBhOHXqVKJu3UpAyhKLPn2e9sz74IOFNGv2/+3deVzVVf7H8dcHQTCVtAzMFHdS0TT35pfSqk1FWk5No07TbqllpaWNZe5LYcuYZo6pjVY2tmirpjku5aip1ZRppKORu1bjgooo5/fH9yteCBAR71V4Px+P+wDO95xzP1/uwodzz/eci4iLK0N8/Dl06JDIjh3b8+x3zpz36NXrcdq1u564uBo0anQxd9xxP3fd1SOrjnOOMWOepkWL2sTFlSExsREzZhwbJGjevCYA7dq1ICbG6NjxMgAyMzMZPXoITZpUo2rVSBITG/Hxx7Oy3X9y8mCaB8cPPAAAFHxJREFUNq1O1aqRJCRUpkeP27KOzZ8/m6SkNtStW5H4+HO45Zb2pKSsKfwv8TQXzDnIOOd+ATrmUr4Y7yK+oz/XzKeP1UDe24aJBIiMrOR/HP/b8qIVRu7JcMnYrDJYv+fgPZ7FV1hYGJ07J3LTTZfw4osfMHLkW+zZsx+AdesWM2pUK5o3v5WOHYdTqVKeb8UiIbNjR3+c25+tzLn97NjRnwoVugQtjiVLFlK+/NlMn577Morbt2+jW7db6d9/BNdf34m0tH2sXLk03z5jYiozf/5sbrjhZqKjz861zogRT/D++28xatRYate+kBUr/k3v3vdQoUJFrr76OubMWU779i2ZPn02CQmNKV3a23VzwoQXGDv2GZ55ZjxNmjRnxoxp3HHHTcydu5JGjZrw/vtvM25cMi+//Ab16zdi164d2eJNS0vj3nsfIiHhIg4cOMBzzw2la9ckPvvsu6z7KE5Kxl9vKbGCtQVyYbaNjoqqdkLlnrw2fMhvI4i83rjyfkMLDz/nhMqD9XvWltZFJyqqNH363MTatePp2fN6wsOPPYdWrJjOwIH1eOutPqSl/RrCKEV+KyMj9YTKT5WoqCheeGES9es3pEGDRr85vn37FjIyMkhK+gNxcTWoX78hXbveTUxMbJ59jh49gVWrllGvXiWuvLIp/fr1ZMGCuVnH09LSGD/+WZ57biJXXHEN1avXpFOnznTteg+TJo0F4NxzvU+HzjnnXGJjK1Oxove+PW5cMt2796FTp87Urh1Pv36Dad26DePGJQOwadOPxMaez2WXtaNq1TiaNGnOXXcdGw1PSupEUlInatWqS0LCRbzwwmRSUzewalXx/NRJCbIUa8HaArkw20Y3azbmN8nw8Vax8FaryJkM57+KhbdaRc5kOP9VLFq1mvSbZDi/VSyC9XvWltZFr1KlaJ599m6+/noMN954SVb54cOHmDdvNE8+WZt5854jIyM9n15EgiciIu6Eyk+VevUaEhkZmefxhITGtG17FW3bNuSOOzoxefJL7NrlfQK2aVMqNWqUy7o9//xwAC65pC1ffPFf3nlnPh063ML69Snccks7evfuBkBKynccPHiQW2+9Jlv7KVNeYuPG9XnGsnfvHrZt20LLltn3XGvV6lJSUr4D4IYbbiY9/SDNm9fkoYfu4r33ZpCefux1v2HDeu67rzMtWtSmVq1oEhJiyczMZPPm4P5jEixBnWIhEgoxMYlBSaDq1LnvuMu65XS8Jd1yc7wl3XJvk/+SbrnJb0m33ATr9xys+ylp6tatwptv9mXJkjX07TuFZcu+B2D//l95661HWLDgRTp2HEGzZjfj7d8kEhoxMcPYsuXebNMszM4iJmZYUOM466yy+R4vVaoUM2Z8wooVS1mw4BNef/0Vhg17nJkzF1KvXgLz5x/buOfoKC9AREQErVu3oXXrNjz4YD+efXYoI0c+Sa9ej5OZ6U3lmzr1fS64IPs/BBEREYU6j6Ov5wsuqMaSJd+zePGnLFo0j6ee6k1y8iA+/ngZZcuWpWvX6zn//KokJ7/M+edfQHh4OJde2oCMjLwv+D6TaQRZRESy/O539Vm0aCRvvPEYtWod+yh4167/MnHiH3n66d+xbp0WDZLQqVChC1WqTCAiojpgRERUp0qVCUGdf1xQZkaLFpfw6KNP8cknX1C5chVmzXqT8PBwatWqk3ULTJBzio9vAEBa2j4uvLABkZGRbNr0Y7b2tWrVoVq16gBZ84GPHDm2ulH58tFUrlyF5cuzv3aXLfssq3/wpo1cffV1DBnyHHPmfMHatatZvvxzfvnlZ374YS0PPfRXEhOvIj6+Pvv27eXw4cNF9rs63WgEWUREsjEzOnX6HUlJLXj55dkMG/ZPfvnF29Npw4alJCdfysUX30THjiOJja17nN5Eil6FCl1Oy4Q40IoVS1m0aB6XX96e886L5ZtvvmTz5p+yJaQ5dex4GTfe+CeaNGlOxYrnkpLyHcOH/5W6desRH1+fUqVK0b17HwYO7INzjtat22Zd/BcWFsZtt91LpUoxlClThn/9aw7VqtUgKiqK6Oiz6dHjUUaNGkCtWnVp3LgZM2ZMY+nSxcybtwqA6dOncPjwYZo2bUXZsuWYNetNIiIiqFWrLhUqVOTccysxbdrfqVKlGtu2bWbQoEcJDy++aWTxPTMRETkppUtH8MADSXTtejmjRr3Fiy9+wKFD3ojRl1++w9dfv0fbtvdx3XUDKF/+vOP0JlKyREefzfLlnzNx4hj27PkfVapU45FHnuTmm/O+qPjyy9szY8ZURozoT1raPmJiKpOYeDW9ew+gVCnv+pN+/YZw3nmxjBuXzGOP3U/58tEkJDShZ8/HAAgPD2fYsL8xevRgkpMH0bp1G2bOXMA99zzIvn17GTz4MXbu3E6dOhcyadLbNGzY2I+3AmPGjGLgwD4cPpxBfHwDJk9+h+rVvdVsJkx4k/79HyQxsSE1a9Zh4MDR3Hln3ptUnemsJC0M36xZHbd06ehQhyEickbauHE7Awa8xvTpi7KVR0VFc801j3PFFb0oXbpMiKKTM8XFF6+hZs36oQ5DirENG9bw5Ze5P8fuu89WOuea53owgEaQRXKxY8dCUlOnkZ6+i8jISsTFdT1tLgzztrX+BG/d5TBiY9sd9+LAwrQRyalGjVj+8Y9H6NXrBvr2ncyiRasBOHhwDzNnPs7ChePo0GEYLVt2ISxMl7iIyJlL72AiOezYsZD168f5G1I40tN3sn79OHbsWBjq0PxEdzbHNiXJZPv22axbN75I24jkp1mzOsydO5S33/4r8fEXZJX/+utPTJlyGyNHtmDt2vkhjFBE5OQoQRbJITV1GpmZ2dd8zcxMJzV1Wh4tgscbBS54eWHbiByPmZGU1JIvv3yBMWO6ERNzbNev1NRVPP/8lYwdez1btnwXwihFRApHCbJIDunpu06oPLhy2846v/LCthEpmIiIcLp1+z1r1ozn8cdvpkyZY5vSfPPNhwwZ0ojXXuvG7t3bQhiliMiJUYIskkNkZKUTKg+uvF6y+b2UC9NG5MSUL1+GQYO6sHr1OP7ylyuzNh9wLpPFiycwYEAdPvxwMOnpaSGOVE4HJWmBAAmuonpu6S+kSA5xcV0JC8u+fWhYWCRxcXkvzRMssbHtTqi8sG1ECqtq1Ur8/e8PsHz5s1x1VeOs8vT0NN5//ykGDKjL55+/QmbmkXx6keIsIyOCjIwDoQ5DiqmMjANkZBRuV8FASpBFcoiJSaR27e5ERp4HGJGR51G7dvfTYhWLOnXuIzb2Go69dMOIjb0m3xUpCtNG5GQ1blyTjz4axAcfPEXDhtWzynfv3srUqXczdGgTvv32Y40klkCpqTFs3bqZQ4f26/GXIuOc49Ch/WzdupnU1JiT7k/rIIuIyCl15MgRpk79FwMHvs6WLb9kO1av3lV06vQM1ao1CVF0EgrR0XuIi9tBRERGqEORYiQjI4LU1Bj27InOs05B10FWgiwiIkGRlnaQ55+fRXLyu6SlHcwqNzNatbqNDh2GUrFi1RBGKCLFXUETZE2xEBGRoChbNor+/f/ImjUvcc897bM2E3HOsXTpqwwYUJeZM/tz4MCeEEcqIiWdEmQREQmqypUrMnbs/axa9QLXXntsICcj4yCzZw9nwIA6LFgwjiNH9PG7iIRGUBNkMzvHzN41szQz+9HMOudRz8xslJn97N9G2dE1g7zjTcxspZnt979q8pqIyBmmQYNqzJz5BHPnDqFp09pZ5Xv37mT69B4MHtyQr76apQu5RCTogj2CPBY4BMQCXYCXzCwhl3r3Ah2BxsBFQBLQDcDMSgOzgGlAReBVYJZfLiIiZ5jExEYsWfIMU6Y8TFzceVnl27enMH58R0aPTmTDhuUhjFBESpqgJchmVhboBDzpnNvnnPsMeA/4cy7V/wKMds5tcs5tBkYDt/vHLgPCgeedc+nOub8BBlxxik9BREROkbCwMDp3TuTbb8cyfPhtnH32WVnH1q1bzKhRrZg48U/s2rUhhFGKSEkRHsT7igcOO+dSAsq+BnJbXDbBPxZYLyHg2H9c9s/c/uOXz87ZkZndizciDZBeunTHbwsXvhQDlYDTYb9oCR09B85gK1ZMZ8WK6SfbjZ4DJZsef7mwIJWCmSCXA3JemrwbKJ9H3d056pXz5yHnPJZfPzjnJgATAMxsRUGW9pDiSY+/6Dkgeg6UbHr8xcxWFKReMOcg7wNyrtwcDewtQN1oYJ8/anwi/YiIiIiInJBgJsgpQLiZ1Q0oawyszqXuav9YbvVWAxcFrmqBdyFfbv2IiIiIiJyQoCXIzrk04B1gsJmVNbP/AzoAU3Op/g/gETO7wMyqAL2BKf6xBcAR4EEzizSznn75/AKEMeEkTkHOfHr8Rc8B0XOgZNPjLwV6DgR1q2kzOweYBFwN/Az0c869bmZtgI+dc+X8egaMAu72m04E+h69MM/MLvbLGgBrgLucc18G7UREREREpNgKaoIsIiIiInK601bTIiIiIiIBlCCLiIiIiAQoEQmymZ1jZu+aWZqZ/WhmnUMdkwSPmfU0sxVmlm5mU0IdjwSXfzHvK/5rf6+ZfWVmvw91XBJcZjbNzLaa2R4zSzGzu4/fSoobM6trZgfNbFqoY5HgMrMF/mO/z799n1/9EpEgA2OBQ0As0AV4ycwS8m8ixcgWYCjeBaJS8oQDP+Ht2nk28ATwTzOrEcKYJPhGADWcc9HADcBQM2sW4pgk+MYCX4Q6CAmZns65cv4t3x31in2CbGZlgU7Ak865fc65z4D3gD+HNjIJFufcO865mXgrp0gJ45xLc84NdM5tdM5lOuc+ADYASo5KEOfcaudc+tEf/VvtEIYkQWZmtwL/Az4NdSxy+iv2CTIQDxx2zqUElH0NaARZpAQys1i89wVtLlTCmNk4M9sPrAW2Ah+FOCQJEjOLBgYDj4Q6FgmpEWa2y8w+N7PL8qtYEhLkcsCeHGW7gfIhiEVEQsjMIoDXgFedc2tDHY8El3OuO957fxu8javS828hxcgQ4BXn3KZQByIh0xeoBVyAt1nI+2aW56dIJSFB3gdE5yiLBvaGIBYRCREzC8PbufMQ0PM41aWYcs4d8afaVQXuD3U8cuqZWRPgKuC5UMcioeOcW+ac2+ucS3fOvQp8DlybV/3w4IUWMilAuJnVdc794Jc1Rh+vipQY/u6cr+BdqHutcy4jxCFJ6IWjOcglxWVADSDVeyugHFDKzBo455qGMC4JLQdYXgeL/Qiycy4N76O0wWZW1sz+D+iAN5IkJYCZhZtZFFAK700xysxKwj+HcsxLQH0gyTl3INTBSHCZWYyZ3Wpm5cyslJm1B/6ELtYqKSbg/TPUxL+NBz4E2ocyKAkeM6tgZu2P/v03sy5AW2B2Xm2KfYLs6w6UAXYAbwD3O+c0glxyPAEcAPoBXf3vnwhpRBI0ZlYd6Ib3h3FbwBqYXUIcmgSPw5tOsQn4FUgGHnLOvRfSqCQonHP7nXPbjt7wpl4edM7tDHVsEjQReMu97gR2AQ8AHXMs4JCNOeeCFJuIiIiIyOmvpIwgi4iIiIgUiBJkEREREZEASpBFRERERAIoQRYRERERCaAEWUREREQkgBJkEREREZEASpBFRM5wZrbRzPrkc/x2M9sXzJjyY2ZTzOyDUMchIpIXJcgiIkXAT/qcf8sws/+aWbKZlS1g+xp+2+anOtZgKY7nJCIlg7bbFREpOvOAP+Pt2tQGmAiUxdvFTUREzhAaQRYRKTrp/na2PznnXgdeAzoCmOcxM1tvZgfM7Bsz6xrQdoP/9Qt/1HWB366FmX1iZrvMbI+ZfWZml5xsoGaWZGYrzeygmW0ws2FmVjrg+EYze8LMXvbvd5OZPZqjj3gzW+j38b2ZXetv4317fucU0L6XmW02s1/NbLKZnXWy5yUiUhSUIIuInDoH8EaTAYYCdwE9gAbACOBlM7vOP97S/3oNcD5wk/9zeWAq3oh0S+Ar4CMzO7ewQZlZe7zk/UUgAbgT+AMwPEfVh4FvgKbAKODpo8m5mYUB7wKHgdbA7cBTQGRA+7zOCf98GgJXAX8EbgR6FfacRESKkqZYiIicAmbWEugMfOrPQ34EaOecW+xX2eDX6QF8COz0y392zm072o9zbn6Ofh8AOgG/B6YVMrz+wDPOucn+z+vNrC8wzcwedc45v/wT59yL/vdjzOxB4Erg38DVwIX+OW32Y3sY+DzgfnI9J98e4D7n3BFgjZnN8PseUchzEhEpMkqQRUSKzjX+ahHheCPHs4AH8EaMo4DZZuYC6kcAG/Pr0MxigCHA5UAsUAooA8SdRJzNgJZ+UnxUmN9vZWCrX/afHO22ADH+9/WALUeTY98XQGYBY/jOT44D+25VwLYiIqeUEmQRkaKzCLgXyMBLHjMAzKymfzwJSM3RJuM4fb6Klxg/jJdMpwOfAqXzaXM8YcAgYEYux3YGfJ8zNkfRTc07lX2LiJwUJcgiIkVnv3NuXS7l3+ElttVzTpkIcMj/WipH+aXAg865DwHMLBZvPu/JWAXUyyPWgloLVDGzKs65LX5Zc7InuXmdk4jIaU0JsojIKeac22tmyUCymRneSHM5vIvbMp1zE4AdeBf1tTezjcBB59xuIAXoambL8JaMe5pjiWdhDQY+MLMfgX/iXWjXEGjpnHusgH3MBb4HXvU3KSkDPOv3dXQaSV7nJCJyWtPHWSIiwfEkMBDoA6zGSzA74S+F5pw7DDwI3I03H3eW3+5OvGR6JTAdmMRx5i0fj3NuDnAd3rzm5f6tH7+d/pFfH5l4K09E+u1fBYbhJccHj3NOIiKnNTt2sbKIiEjhmVljvGXomjvnVoY6HhGRwlKCLCIihWJmNwJpwA9ADbwpFgZc7PTHRUTOYJqDLCIihVUebwORasCvwALgYSXHInKm0wiyiIiIiEgAXaQnIiIiIhJACbKIiIiISAAlyCIiIiIiAZQgi4iIiIgEUIIsIiIiIhLg/wFZTynp93i6MAAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "WAs7pE_ACxBk" + }, + "source": [ + "# 활성화 함수" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "wnaUtqSlCxBl" + }, + "source": [ + "def sigmoid(z):\n", + " return 1 / (1 + np.exp(-z))\n", + "\n", + "def relu(z):\n", + " return np.maximum(0, z)\n", + "\n", + "def derivative(f, z, eps=0.000001):\n", + " return (f(z + eps) - f(z - eps))/(2 * eps)" + ], + "execution_count": 5, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "_HI1jyoSCxBl", + "outputId": "dc71cecc-fa02-49ea-a10d-42fb4442a42b", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 315 + } + }, + "source": [ + "z = np.linspace(-5, 5, 200)\n", + "\n", + "plt.figure(figsize=(11,4))\n", + "\n", + "plt.subplot(121)\n", + "plt.plot(z, np.sign(z), \"r-\", linewidth=1, label=\"Step\")\n", + "plt.plot(z, sigmoid(z), \"g--\", linewidth=2, label=\"Sigmoid\")\n", + "plt.plot(z, np.tanh(z), \"b-\", linewidth=2, label=\"Tanh\")\n", + "plt.plot(z, relu(z), \"m-.\", linewidth=2, label=\"ReLU\")\n", + "plt.grid(True)\n", + "plt.legend(loc=\"center right\", fontsize=14)\n", + "plt.title(\"Activation functions\", fontsize=14)\n", + "plt.axis([-5, 5, -1.2, 1.2])\n", + "\n", + "plt.subplot(122)\n", + "plt.plot(z, derivative(np.sign, z), \"r-\", linewidth=1, label=\"Step\")\n", + "plt.plot(0, 0, \"ro\", markersize=5)\n", + "plt.plot(0, 0, \"rx\", markersize=10)\n", + "plt.plot(z, derivative(sigmoid, z), \"g--\", linewidth=2, label=\"Sigmoid\")\n", + "plt.plot(z, derivative(np.tanh, z), \"b-\", linewidth=2, label=\"Tanh\")\n", + "plt.plot(z, derivative(relu, z), \"m-.\", linewidth=2, label=\"ReLU\")\n", + "plt.grid(True)\n", + "#plt.legend(loc=\"center right\", fontsize=14)\n", + "plt.title(\"Derivatives\", fontsize=14)\n", + "plt.axis([-5, 5, -0.2, 1.2])\n", + "\n", + "save_fig(\"activation_functions_plot\")\n", + "plt.show()" + ], + "execution_count": 6, + "outputs": [ + { + "output_type": "stream", + "text": [ + "그림 저장: activation_functions_plot\n" + ], + "name": "stdout" + }, + { + "output_type": "display_data", + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxAAAAEYCAYAAADMNRC5AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzdd3hUZfbA8e9Jr9RAILRQpEkRjIKCEpqoqKioi1iwIJafFVFZl0XsnXXVVRcbKuraUEEFsQVBQJrSDQLSIYFQkpA+8/7+eCdhUkmZEsj5PM88M3Pve+89cwlz59y3iTEGpZRSSimllKqMAH8HoJRSSimllDp+aAKhlFJKKaWUqjRNIJRSSimllFKVpgmEUkoppZRSqtI0gVBKKaWUUkpVmiYQSimllFJKqUrTBELVaiISLyJGRBJ8cKwkEXnZB8dpJiLzROSIiPh9HGUR2SoiE/wdh1JKHS9E5DoRyfTRsYyIXOaLYylVWZpAKI8Skd4i4hCRX6qxbVk/4HcAzYHfPRIgFX7xXwr83VPHqcAEIA44BfvZfEJEpojI2jJWnQa84qs4lFLK20RkuuuHtxGRfBFJFZGfROT/RCTYA4f4CGjngf0UccX8VRmrmgOzPXkspWpKEwjlaWOxP0a7iUiXmu7MGOMwxuw1xhTUPLRjHuuAMSbD28cBOgArjDF/GmP2+uB4FTLG7DPGZPk7DqWU8rDvsT++44FzsD/CHwYWiEhkdXcqIsHGmGxjTKpHojwG1zUw1xfHUqqyNIFQHiMi4cBoYBrwKXBjGWX6isiPruY7h12v40RkOjAA+D+3u0bx7k2YRCRARHaIyB0l9tnRVaa36/14EVntOsYuEXlDRBq41iUCbwORbseZ4lpXrAZERBqKyDsiclBEskXkexE52W39dSKSKSKDRWSt63g/iUjbCs7RVmAEcK3r2NNdy0tVUZdsWuQqM05EPnEda4uIXF1imzgReV9E0kQkS0R+F5GBInId8BBwstvnvq6c47QWkc9FJMP1mCkiLd3WT3F93lEistlV5gsRiXEr011EfhCRdNc5WiUiA8s7L0op5QW5rh/fu4wxvxtjpgKJQG/gfgARCRGRp0Vkp+s7c5mIDCvcgYgkur4vzxeRpSKSBwxzr8l2uwZ1dz+46/t6v4gEi0igiLwpIn+5rid/isj9IhLgKjsFGAMMd/uOTnStK7o+iMgiEXm+xHHqufZ5aSU/U7CIvCgiu0Uk13VdfcqjZ16d8DSBUJ50GbDNGLMGeA/7I7moqlhEegI/AZuAfkBfbDVwEHAXsBj7476567HDfefGGCfwIXBVieNeBWwwxqx0vXcCdwMnYxOa04GXXOsWudZluR3nuXI+z3SgD/YH/+mubeaKTZQKhWKbPd0AnAE0AF4rZ39gmwt9D3zsOvZdFZQty2TgS6An9ty9JSKtAcTeUZuPvdt2MdAdeMS13UfA80AyRz/3RyV37rqYfQnEAgNdjzjgCxERt6LxwN+AS7B39noBj7ut/wDYgz1vpwBTgJwqflallPIoY8xaYC4w0rXobezNq9FAN+AdYLbreuXuaWAS0Bn4tcQ+NwLLKPva9LExJh/7e2sXcAXQBfgH8CBwvavsc9jrQmGtSXPs9aqkGcCowsTDZST2+/XrSn6mO7Hf3aOAk7Df5cllHEup8hlj9KEPjzyAJGCC67UAW4HL3Na/Dyw+xvYvl1gWDxggwfW+h+t9e7cyfwIPVrDfc4FcIMD1/jogs6LjY79UDXC22/r6wGFgrNt+DNDJrcxVrmNJBfF8BUwvscy4nyvXsq2F59OtzJNu74OwSc3Vrvc3ARlATDnHnQKsLWN50XGAoYADiHdb3w6blA1x208OUN+tzD+ATW7v04Ex/v6b1Ic+9FE3H9gbQF+Vs+4p13dne9d3W+sS678AXnG9TnR9944sUabYdQT7o3xb4Xc/0Nq17zMriPEp4Ptjxex+fQAaA3nAYLf13wPTXK8r85leBH6o6DqlD30c66E1EMojRKQD0B975xljjMEmDO7NmHoBP9bkOMaY1cAaXHd6RKQP9gvzfbdYBonId67q2wxgJhACNKvCobpgv4QXux37sOvYXd3K5Rpj3O/c7HYdq2FVPlcVrHaLpwDYBzR1LeoFrDbG7K/B/rsAu40xW92OswX7udw/9zbX+Si02y0OgKnAG2KbqP1DRDrXICallPIkwf4o7+16vd7V1DLT1SxpOPa64m75Mfb5P2xt7Vmu91cCfxljimoRROQWEVkuIvtcx7kHm2hUmjEmDVuDUngNjMPWFM9wFanMZ5qOrRneKCL/EZHhJWo0lDom/YNRnjIWCAS2i0iBiBQAE4FzRKSVh481g6NVxVcBC40x2wBEpA22GncDcDlwKrZ5Edgf9p7gPvRqyc7dheuq+n/LYL/03ZU1Ukh+Gdv56v+x++euMA5jzBRswvEFcCawWkRuQCml/K8rsAX7nWWwTUtPcXt04eh1o9CRinZobIfq7yh+bXK/sfU34AXsj/dhruO8QvWuSzOAkSIShm2GtANY4Fp3zM9kbHPfeGzz2wBsE6fvNIlQVaF/LKrGRCQI2/nr7xT/wuqJvWNe2MbzN2BQBbvKwyYhx/IB0EFE+mLbbs5wW5eA/UK+xxiz2Ni2qXHVOM4G7P+PMwoXiEg9bL+C9ZWIsar24Takq4jEUvUhXn8Derh3Zi6hsp87TkTi3WJphz2HVfrcxo4y9aIxZjjwJjbJVEopvxGRbthmrZ9ivzMFaGaM2VTisasau58BXC4ip2KvFe7Xpv7Ar8aYl40xK40xmyhdy1HZa+As1/MF2ETlA1etP5X9TMaYDGPMp8aYW7G1E4OwIwQqVSmaQChPGA7EAK8bY9a6P7DVute7OuA+C/QSkWki0lNEOonI2MJOwNi2+KeLHXkppry7IcaYndjOwq9h+yV84rb6T+zf9d0i0lZErsR2mna3FQgTkaGu40SUcYw/sZ2J/ysiZ7lG15iBbdv/QZXP0LH9iB2BKkFEemHvUlW10/EHQCrwpSvmdiJykdvoR1uBNmLn6ogRkdAy9vE9Nul73xVLAvYu2koq2fxMRMJd1eKJrn/LPtiLpzcSL6WUKk+o2Ik741zXnPHYvm4rgOdcN5jeB6aLyGWu78wEEZlQOKJRFX2BrTl+E1jm2n+hjUBvETlPRE4SkX9iOzq724odAr2T6zu6zPkqjDE5wGfYTt29cUtUKvOZxI5UeKWIdHE1Px6NvbbtrMZnVnWUJhDKE24EfnK1zSzpE2xV6VBjzO/AEOwoFkuwI1mM4mhzmOewd2DWY+/IV9Q2dAa2huMbY8zBwoWuPhJ3AeNd+xmLnbgNtzKLsMnHh67j3F/OMa4HlmLv9iwFIoBzjTHZFcRVXfdiq9STsHfG3sAmA5VmjDmCvSDtxI53vhY75nnhnanPgG+wnef2YdvoltyHwY46tQ87YtZPwF7gYrc7XMfiwPYBmY4d2eNzbF+S8VX5PEopVUNDsKPBbcd+712EHQTibNf3Jdjv+beBZ4A/sINcnI3tEF0lxs6n8zn22jSjxOr/YkdZ+gA7YlM8dmQ8d69ja4GXY7+D+1VwuMJr4G/GmJI3Z471mTKA+7DXtZXYFgPnGZ0PSFWBVP43gVJKKaWUUqqu0xoIpZRSSimlVKVpAqGUUsprROR219CVueKaeb2ccmNEZIXY2ct3isgzrgEalFJK1TKaQCillPKm3cBjwFvHKBeBHfAgBjsD/GBK9F9SSilVO+jdHaWUUl5jjJkJ4BrRq2UF5V51e7tLRN7HTpCllFKqljmuEoiYmBgTHx/v7zA4cuQIkZGR/g6jVtFzUlptPydZG7IgEMLiwwgI8U1lZG0/J/5QW87JihUr9htjmvg7DjdnA+vKWyki44BxAOHh4ae2auXp+Sqrzul0EhCgFfvu9JyUpuekOD0fpdWmc7Jx48Yyrw3HVQIRHx/P8uXHmk3e+5KSkkhMTPR3GLWKnpPSavM5yd2by5L4JQQEBnDmr2cSGF6ZuYtqrjafE3+pLedERKo8bKW3uGYtT6CCyQeNMdOAaQAJCQlGrw21k56T0vScFKfno7TadE7KuzYcVwmEUsozQpuF0i+lH5mrMn2WPChVGSJyMfAkMMQYs9/f8SillCpNEwil6qig+kE0OLuBv8NQqoiInIudTGu4MWaNv+NRSilVttrRwEop5TP5B/Nx5jv9HYaqI0QkSETCgEAgUETCyhqeVUQGAe8DI40xS30dp1JKqcrTBEKpOmbL37ewOG4x+7/U1iHKJyYB2cBE4GrX60ki0lpEMkWktavcP4H6wDeu5ZkiMsc/ISullKqINmFSqg5x5jrZ9/E+Cg4WENY+zN/hqDrAGDMFmFLO6ii3cjpkq1JKHSe0BkKpOiRtThoFBwuI7BlJVLeoY2+glFJKKVWCJhBK1SEpM1IAiL061s+RKKWUUup4pQmEUnVE/qF80mangUDslZpAKKWUUqp6NIFQqo7Y9+k+TJ6hwaAGhLYI9Xc4SimllDpOaQKhVB2hzZeUUkop5QmaQChVB+Rsz+Hw/MMEhAXQ5NIm/g5HKaWUUscxTSCUqgNS3re1D41HNCaono7erJRSSqnq0wRCqROcMYaU97T5klJKKaU8QxMIpU5wmb9nkrUhi6DGQTQa1sjf4SillFLqOOfRBEJEbheR5SKSKyLTj1H2HhHZKyLpIvKWiOiwMEp5QdqsNACajmpKQLDeM1BKKaVUzXi6MfRu4DFgGBBeXiERGQZMBAa5tvkceNi1TCnlQW0mt6HhkIYENw32dyhKKaWUOgF4NIEwxswEEJEEoGUFRccAbxpj1rnKPwq8jyYQSnmciFC/X31/h1GrOJ2Qmws5Ofa5oKD0w+Eoe3nJdQ4HGHP04XRW/L7ksuTkONavP/Y+3BlT9uuarFNKKaUqy1/DsZwMfOn2fhUQKyKNjTFpfopJKY9q+8YbMGSIX2MoMOEESbZfY3A3wBgQqfJ2xsAhGrCPJqTSlDQakW7qkY59ZBBNOtH2vWt5FhHkEEoOYWQTTg5hRY88alOLyY7+DkAppZSqEn8lEFHAYbf3ha+jgWIJhIiMA8YBxMbGkpSU5Iv4KpSZmVkr4qhN9JyU1i41leQ772Tv8OF+Ob7JBv4WAF2AR51IiF/CKCYzM5OoqKhiywoKhL17w0hJDSM1NYy9KfY5dV8ohw6FcOhwCIcPB1NQ4Nn+GyEhDkJCnAQHGQKDnAQGGvsIMEdfl3gEBJR+HxAAIgYBjDgoMPkUUIDD5OMg3/U+H4A2ka0IEEAMvx/+nRxnNgUmH6cU4DAFdjvy6RR1El3rdQYx7MndzaIDvwAlqgzEvr+o2YVEBNkWoz+nLWB39u6idZZ9HRfWnAExAxCBbEc2n+/5ovg+F3r09CqllDqB+SuByATqub0vfJ1RsqAxZhowDSAhIcEkJiZ6PbhjSUpKojbEUZvoOSltz9NP07pbNzoNHuyX4x/6+RCrClYRHRxN7/N6+yUGdwUFMH36ckLTE9iwgaLH5s123bFER0PTptCkCcTEQP36UK9e2Y/oaIiMhPBwCAsr/QgJAZFAIPCYx81z5LFoxyL2HdlH6pFUUo+ksi9rX9HzowMf5ew2ZwPw6PxHmZw0ucz9NApvxPr7j94fiX+hH7sPbyuz7AVn3sczQ4cC8Mv2Hdz81dtEhkQSGRxJWFAYoUGhhAaGEhYUxnPnXE9MRAwA/1u7mE0H8ggNDCU0yK4vfN2yXkv6t44HIN+Rz7LdAwgOCCY4MJjggGC6xf7j2P8ISimlFP5LINYBPYGPXe97AinafEmdSMTphAD/jXrU4OwGnLn3TPL25Pnl+Dt2wOLF8OuvsHQprFgB2dkJpcqJQOvWEB9vn9u0sc8tW0KzZjZhaNLE/vD3pL2Ze9lycAs703eyM30nu9J3sTPDvm7fsD3vXvIuADkFOQx8Z2C5+9lycEtRAtEksgnNo5pTP6w+DcIaHH2ENqBxRONi202/eDrGGP5Y8wdn9z2byJBIIoIjiAyOJDz46BgU/Vr3Y+1tayv1mUZ1G1WpcsGBwZzZ6sxKlVVKKaVK8mgCISJBrn0GAoEiEgYUGGNK3l98F5guIu9jR2GaBEz3ZCxK+Z0xfk0gAIIbBhPc0DejLx05Aj/8AN99B/PmwcaNpcvExWXTr184XbpQ9OjY0dYUeFpWfhZbDm5h84HN9vngZh7o9wCt6rcCYOL3E3ln1Ttlbnso51DR6+iQaAbGD6RheEOaRjSlSWQTmkQ0oWmkfd2tabeisrck3MItCbdUKr7E+EQAZJtwctOTq/kplVJKKd/zdA3EJOAht/dXAw+LyFvAeqCrMWa7MWauiDwD/IQd7vWzEtspddwTpxMCj91ExhtyduQQ0jyEgCDvJjDp6fD11/DppzBnDmS79deuVw/69YM+feD00+1jzZpfPd7ULd+RT3CgTZJ2HN7B2NljWb9vPTvTd5YqO/yk4UUJRK9mvdiwfwMtolvQsl5LWtZrWfS6sAzYUax+HPOjR2NWSimljmeeHsZ1CjClnNXFek4aY6YCUz15fKVqE382YVp32TpytubQY24PontFe3TfxsCiRfD66/Dxx8WThtNPh/POg3POsa+DPPgNY4xh2+FtrNyzkhW7V7By70pWp6ymZ2xPvrnqGwAahDVg3uZ5AAQHBBPfIJ52DdvRvmF72jdqT6eYTkX7u6vvXdzV9y7PBaiUUkrVEf7qA6HUic9PCURWchYZSzMIjA4kolOEx/abmwvvvgsvvADr1x9d3r8/XH45XHIJtGpV/vZVZYxBXEO+PrngSZ5b/BwHsg+UKhcVcvTeRHRoNHOumkOHRh2IbxBPUIB+xSmllFKepldXpbxEjPFLE6aU91MAaDKyCYERNT9+ZiZMmwbPPw+7d9tlsbFw3XUwdix06FDjQ2CMITktmV+2/8LCHQtZuH0h/zn/P5zT/hwAQgJDOJB9gJiIGE5tfiqnNj+V3s1707NZT9o2aFtsX+d2OLfmASmllFKqXJpAKOUtfuhEbYwhZYZNIGKvia3RvhwOePNN+Oc/ITXVLuveHSZOtDUOwTXsm+1wOnjrt7eYt2UeSVuT2J+1v9j6X7b/UpRAjDllDFecfAUt67UsqpVQSimllH9oAqGUl4jD4fMEIn1xOjl/5RDSIoQGAxpUez/ffw/jx8OaNfb96afbRGL48GpNJG1jy01nxcEVJJIIQIAE8OTCJ/nr0F8ANI9qTv/W/enfuj/9WvWjZ7OeRdsWznOglFJKKf/TBEIpb/FDE6ai2ofRsUhg1X/pHzwId94JM2bY923awNNPwxVXVC9x2H54O1/+8SVfJH/Bz9t+psBZwOgho2ke3RwRYWL/iRhjGNJuCO0attPahROQiNwOXAd0Bz40xlxXQdl7gAeACOBT4FZjTK4PwlRKKVUFmkAo5SW+HoXJmeck9SPb1ij26qo3X5o7F2680fZzCA+3NQ733FP1Cdz2Z+3nteWv8fkfn7Nyz8qi5QESwMn1Tib1SCrNo5sDMO7UcVWOUx13dgOPAcOww3aXSUSGAROBQa5tPgcedi1TSilVi2gCoZSX+DqBODD3AAUHCojsHklUj6hjb+CSm2sThVdfte/POAOmT7cTvFVWRm4G0aF2uFhBeGT+I+Q784kIjuC8DudxceeLOf+k81n96+piTZPUic8YMxNARBKAlhUUHQO8aYxZ5yr/KPA+mkCoE8Avv8Arr4BsyeScteF8cdEOLninFUFBcHjJYZLHJldpf81vaE6r8XbYu8Lt6/WpR+c3OwNQkF7AyjNXVrSLUsraPig6iN6LexeVWXXuKnJ3Vr5SsLzte8zpQVgr192pV2Dp7UurFKv79pvu3cSBbw/Q/rn2ND63MQB73tzDjn/tqNI+y9q+rPNcFdX+dzoCSyPLPie+/ncqd5tK710pVTU+bsJU1HypCrUPe/bAZZfZeR1CQuDRR+HeeysX9sHsg3y49kPeX/M+fx38ix337CAwIJDGEY15duiztG/UnsFtBxMe7IVpptWJ6GTgS7f3q4BYEWlsjEkrWVhExgHjAGJjY0lKSvJJkBXJzMysFXHUJnX9nGRnB/LYY11YtMj24xrDPlqTzeYP9hI/vzGPPbaW+LQsWFe1/W5etpnNSZvtmxXAOsgKyWJv0l67LJMq77PM7SMp/u+3Bls/WFnlbL/k5yXQwi7K351P1rqsKsXqvn3h51+zeA0U1pgvpcqfv6ztyzrPVVGTf6csyj4nPv93KocmEEp5iS9rIAoOF7B/1n4QaDq6aaW2+fVXuPRS22SpZUv4/HNISKh4G6dxkrQ1iTd/e5PP1n9GrsPe4QgPCmfD/g10a9oNQCdoU9URBRx2e1/4OhoolUAYY6YB0wASEhKMp2c4r46kpCSPz7R+vKvL5+TgQTj/fFiyBOrXhzvugLNOacnPMzP5YWE7dm2P4L77Tmfu5wV0WpNTpX0HxwQT2iwUgIKEAnKG5RAYGUh4W3vDxjgMR9YcqdI+y9peAoTIrpFFZbJ+ysKZ56z0PsvbPuKkCAJC7fUx6Y4kEl47xsWnBPftc97NoSC9gLBWYQTVtz9r807OI++OvCrts6ztyzrPVVHdf6fly5aTcFrZ58TX/05cXfY2mkAo5S0+TCD2fbYPk2toMKgBYS2P3Wlh5ky48krIy4OzzoJPPrFzO1Rkx+EdDJg+oGjUJEEY2m4oY3qOYUTnEcUmdFOqGjKBem7vC19n+CEWpWrE4YCRI23y0KaNHdnOzpkTTEjjNCa83p3LLoM5c2DYxUGsXh1FXFz1jhUUFURUt+LfvxIopZZVRXnbR3Ss2eSkZW4fS41iDWtd+poX0iSEkCYh1d5nWduXdZ6rokr/Tvsrd058+u9Ugu+nyVWqjhCn02dNmA7MszM0V6b50nvv2Xkc8vLgllvsha285GHzgc1Fr1vUs/XFreu35qEBD7Hlri3Mu2YeV/W4SpMH5QnrAPcOMj2BlLKaLylV2z37LPz0EzRtCgsWlJ5wMyICvvgChg6FtDS49lp7z0mp44UmEEp5iw8nkuv6QVdOmX8KTUY2qbDcq68evVBNnmw79YWUuEmT58jjvVXvcfrrp9Pp5U7sSt8F2FGUfhzzI1vu3MKUxCnEN4j30qdRJxIRCRKRMCAQCBSRMBEpq/b7XeBGEekqIg2AScB0H4aqlEesXGlHsQN45x1o1erour3v7IUpsH/2fkJC4N13oUkT+OEHeOEFv4SrVLVoAqGUl/iyD4QECA3ObkBQvfJbJf7rX3Dbbfb1M8/Aww8Xn9shIzeDqYun0u7f7bj2i2tZtnsZ9cPqszZ1bVGZ+AbxBAb4dm4LddybBGRjR1O62vV6koi0FpFMEWkNYIyZCzwD/ARsB7YBD/knZKWqxxi4+24oKLB9Hs49t/j6zN8zYT5k/5kNQLNm8NZbdt2UKZCa6tt4laou7QOhlJf4ogmTMYb8/fnHbOv57rt2ZmmwtQ633lp8Hw8lPcRLS1/iUM4hALo26cr4vuO5svuVRATXrC2lqtuMMVOAKeWsLtb2zRgzFZjq5ZCU8ppZs2yTpcaN7ah2JRmHASg20ecFF9jO1t98A488Ai+/7Ktolao+rYFQylt80ITpyOojLGq2iPVXrS+3TOEEcWCryN2TBwARYXXKag7lHKJfq37MvnI2a25dw429b9TkQSmlKqmgAB54wL6ePNmOvFSScdoEghL3lp55xl4u/vtf2LjRu3Eq5QmaQCjlJeJweD2ByFiZgQQKQQ3KrkxcvtzO81BQAPffD3fdBSmZKdz77b0s2rGoqNxjgx5jwfULWHjDQi7oeAEBol8NSilVFZ9+CsnJ0L69HaCiTA77JAFSbPHJJ8P119vv6qef9m6cSnmCNmFSylt8UAPR/PrmxFwUgzO39PAd27bB8OFw5Ahccw3c+8/9PPDds7y87GWy8rNYlbKK76/9HqBo/gallFJVZ4wdeQnszZqSg1MUlSujCVOhiRNtf4gZM+Cxx6B5c29Fq1TN6W1GpbzEV8O4BjcOJjQutNiy3Fxb85CaCoOGODjp+qfo8FI7nln0DFn5WVzU6SKeHfqs12NTSqm6ICnJjr7UpIm9YVOe8powgR3q9ZJL7BDbL73klTCV8hhNIJTyFi/XQBxZd6ToblZJd99tmy81b5nD+gHdmfzz38nIy+DcDuey7KZlfDnqS3o17+W12JRSqi55/nn7fPvtEB5eQcFymjAVuu8++/zqq7b2WKnaShMIpbzEm8O4OrIcrOy7ksWtFpN/KL/Yuhkz4LXXbBX69A+OkBGwnVObn8oP1/7AnKvmkBCX4JWYlFKqLtq2zY6gFBJSepCKkipqwgTQty+ccQYcOgQff+zpSJXyHE0glPISbzZh2v/lfhyZDkJbhxLcILho+ewFW7l+bB5gq8DPOasxv479laU3LWVQ20FeiUUppeqyt96yFc4jR9omTBUpasJUwa+vcePs8+uveyY+pbxBEwilvMWLTZhSZqQAEHt1LGAngbv36we56LIjFOSGcPrwDdx0ky17ctOTdVQlpZTyAofj6ERwhd+5FW9gn8qrgQC4/HKoVw8WL4Z162oeo1LeoL8qlPISbzVhykvN48C3ByAQmlzRhBmrZ9Dp5U5MfSoKUk+mXtxePnq7cbFZppVSSnnet9/Czp126NYBA45d/lhNmAAiI2H0aPv6jTc8EaVSnqcJhFLe4qUmTKkfpYIDggYGMeirQVzz+TXsSW4BvzyAiOGbj5sR36Spx4+rlFKquOnT7fPYsZW7X1SZJkyF+wN47z3Iz6+4rFL+oAmEUl4iXmrCVNh8aVviNhbtWESTkFbE/TAPTCDjxwv9+nn8kEoppUpIT4fZs0EErr66ctt0fKUjzIBG5zWqsFzv3tC1K6SlwfffeyBYpTxMEwilvMQbM1FvWrGJjKUZBEYFcsXdVzD1nKlclbaR3Vsa0qkTPPqoRw+nlFKqHF98ATk5cNZZ0LJl5bYJaRoCLSAoquJ5fEXgyivt6w8+qGGgSnmBJhBKeYsxHmvCtDdzL3/79G88c98zAMSMjCE4MpiB4ffw4r/CCAiAt98+xvjjSimlPKbwh31hfwVPK0wgPl+plCAAACAASURBVP8csrK8cwylqksTCKW8xBOdqJ3GybQV0+j8cmc+XvsxA1cNBKDZNc0wBu64w3a1uOMOO3a4Ukop70tNtU2LgoLgsssqv93Wx7bCFMj4LeOYZdu3hz597IRys2dXO1SlvEITCKW8pYYJxF8H/2LgOwO5+aubOZx7mLEyluYHmhMSF0KDxAZ8+CEsXAhNm8LDD3swbqWUUhX6/HM7hOuwYdC4ceW3O/zzYZgP+amV6xldWAvx0UfVCFIpL9IEQikvkRo0YZq5YSbdX+3Oz9t+JjYylo8u+4j7Uu4DIHZ0LEeyhfvsW558EurX91TUSimljuWLL+zzpZdWbbs2/2wDkyGyZ2Slyl9yiX3+9lvIzq7asZTyJk0glPKWGtRAdGjUgTxHHpd3vZy1t63l8q6Xk744HbCTxz3+OOzeDQkJcN11HoxZKaVUhdLT4Ycf7Nf7hRdWbdsGZzWAgRDaLLRS5Vu3tiMyZWXpaEyqdtEEQikvqUofCGMMC7cvLHrfI7YHq25ZxUeXfURMRAwiwqnLT6XXL73YHR7J1Km23Msve22ya6WUUmWYM8fOzdCvHzRp4v3jXXyxff7yS+8fS6nK0p8eSnmJVHIiuf1Z+7ni0ys46+2z+Hjdx0XLuzTpgrhNJy2BQv0z6zNxopCXZ2se+vTxRuRKKaXKU9h8qfCHfVXsfXcvfAi5u3IrvU3hcWbNsv0ulKoNNIFQylsqMZHc7OTZdHulG5+u/5SokCjyHHmlyjiOOMjbZ5cvW2Y774WHw+OPeyVqpZRS5cjLg2++sa9HjKj69rte2QXTIGd7TqW36dYN2rWDfftg8eKqH1Mpb9AEQikvqagJU3puOjd8eQMX/e8iUo6kcHabs1l9y2qu7lF6OtPUj1JZ1HwRWyZtYdIku+z22yEuzpvRK6WUKikpyfaB6NbNDrNaZU77JAFScTk3IkdrIQprP5TyN00glPKWcpowrd+3nu6vduft398mNDCUqedM5acxP9G2Ydsyd5PzVw4iwvb8cObNg+hoeOABbwevlFKqpJo0XwIwDmNfVHGAPvcEwpjqHVspT6p4LnWlVLVJOU2Y2tRvQ0hgCAlxCbx78bt0adKlwv20fbQtcXe04NwR9opz771VG3dcKaVUzTmdRzsy1zSBkMDK10AAnHkmxMTA5s2wfj2cfHL1jq+Up2gNhFJe4t6EadmuZWTk2plHI0Mi+e6a71h0w6JjJg+FflwRQtKSQBo3hnvu8VrISnmciDQSkc9F5IiIbBOR0eWUCxWR10QkRUQOiMhsEWnh63iVKs/y5Xb47JYt7dCq1VLYhKmKCURg4NEhY7UZk6oNPJpAVOFCMUVE8kUk0+3RzpOxKOVXTnuVyHPm848f/kHfN/syYd6EotXxDeIJDgw+5m4O/3IYZ4HhH/+w7ydOhHr1vBKxUt7yHyAPiAWuAl4VkbLun94FnAH0AOKAg8BLvgpSqWMp/OE+YoTtl1AdRU2YqvHrS/tBqNrE002Y3C8UpwBfi8gqY8y6Msp+ZIwp3WNUqROB08mqZsKY109nVcoqBKFBWAOMMcWGZq1I5upMfuv/G474SH7bmkDz5sL//Z+X41bKg0QkEhgJdDPGZAILRWQWcA0wsUTxtsC3xpgU17YfAVN9Ga9SFZk92z5XZ/SlQtVtwgQwdChERBytCdGBNJQ/eSyBqOKFQqkTVoGzgOd+eZrJNxnyU1bRrmE73rn4Hfq37l+l/aTMSAFgeU59QLj3Xjt8q1LHkY5AgTFmo9uyVcCAMsq+CfxbROKAQ9jaijnl7VhExgHjAGJjY0lKSvJUzNWWmZlZK+KoTU6Uc7JvXyhr155BWJgDYxaSlFTNnsyZ9mnZ8mWQUvXNe/TozpIljXnhhT84//y91YuhljlR/kY86Xg4J56sgajKhQLgQhE5AOwBXjbGvFpWIb1IHB/0nFg5jhwmrJ7AuvR1EAgXxV3ELe1uoWBLAUlbkiq/Iwfwtn353t5YoqPz6dJlCUlJx/csQvp3UtoJfk6igPQSyw4D0WWU/RPYAezC/g9YA9xe3o6NMdOAaQAJCQkmMTHRA+HWTFJSErUhjtrkRDknb71lnwcPDuScc8r7WXNsS0KXkEMOfc7sQ3j7qt8RuvpqWLIEtm7tTGJi52rHUZucKH8jnnQ8nBNPJhBVuVB8jP3iTwH6AJ+JyCFjzIclC+pF4vig5+SoD9I/4NCWg7z+xj7O2/BltfZx8MeDrNq/ikPhYazLrsc/7xbOP/8sD0fqe/p3UtoJfk4ygZK9duoBGWWU/Q8QCjQGjgD3Y2sgdL515Xfffmufzz23ZvupSR8IgPPOs8/ffQcFBRCkY2kqP/FkJ+pKXyiMMeuNMbuNMQ5jzCLg38BlHoxFKZ/ZcXgH61KPdvN56byXWHPtYoZuq/43e8p7tm57VnYs4eHCHXfUOEyl/GEjECQiJ7kt6wmU1S/uFGC6MeaAMSYX24H6dBGJ8UGcSpXL4bA/2AGGDavpzuxTdfpAgJ2R+qST4NAhWxOhlL94MoGoyoWiJANUc0wDpfzDGMM7v79Dt1e7ccWnV5BTkANA/bD6NAyuV+4s1MfiyHKw77N9AHxHLDfdBE2aeCxspXzGGHMEmAk8IiKRItIPGAG8V0bxZcC1IlJfRIKB24Ddxpj9votYqdKWL4eDB6FtW+jQoWb7qkkn6kKFtRBz59YsFqVqwmOVX8aYIyJSeKEYi72bNAI4s2RZERkB/IztKHcacCfwoKdiUcrbUjJTGPfVOGYlzwKgY+OOZOdnExYUZgs4nZhqJhBps9NwZDjYQDR7gyIYP95TUXtPeno6qamp5OfnV1iufv36bNiwwUdRHR98cU6Cg4Np2rQp9fwzBvBtwFtAKpAG3GqMWSciZwFzjDFRrnITgBexfSFCgLXAJX6IV6liCpsvDRtW/eFbC3Wc1pG1y9YS1Kj6P7/OOw9efBHmzIHHHqtZPEpVl6dbz1X2QjHKVS4U2Ak8bYx5x8OxKOUVH6/7mNu+vo207DTqhdbjpfNe4poe1xQfntXprPaVpnD0pe+IZfRoaNPGE1F7T3p6OikpKbRo0YLw8PAKh6nNyMggOrqsblF1l7fPiTGG7Oxsdu3aBeDzJMIYcwAoNW+vMWYBtu9c4fs07MhLStUq7glETcVcEANREBgeWO19DBgAYWGwciXs3QvNmtU8LqWqyqMJRBUuFFd68rhK+cq42eN4feXrAAxpN4S3LnqLVvVblS7ocFSrBiJvXx5pcw/gAH6iKfPvrWHAPpCamkqLFi2IiIjwdyiqDCJCREQELVq0YPfu3f6qhVDquHToEPz6q+2sPGiQv6OxwsMhMdE2YZo3D6691t8RqbrIozNRK3Wi69eqH5HBkbw2/DXmXT2v7OQBqt2Ead/H+6DAsIxGnJIYQo8eNQzYB/Lz8wnXCSpqvfDw8GM2MVNKFffDD7YT9RlngCdy7x1Td8CH4Mip2ZDchf0g5pQ7U4pS3qUJhFIVOJB9gDl/Hv2Gvrbntfx5x5/cnHBzxTNKO53V6kS916350p13Vnlzv6ns7NrKf/TfSKmq82TzJYCtD22FaWDyqjkRnUthAjFvnk1wlPI1TSCUKsdXG7/i5FdO5pKPLuGP/X8A9kdY8+jmx97Y6cRU8QdbweECDv+ZQxaB7GgVw4UXVidqpZRSnmCM5xOIluNbwigICK3Zz68OHeyQrgcOwLJlnolNqarQBEKpEg5mH+S6L67jwg8vZG/mXk5rcRohgSFV24nDUeUaiKD6QTx76hn8H7256Y5AnSBIKaX8KDkZtm+HmBjo3dsz+2z7cFu4ueYJhIg2Y1L+pQmEUi7GGD5Z9wld/tOFd1a9Q1hQGFPPmUrSmCTaNWxXtZ1Vow/EH3/A3HlCSngkN95YtcOp6tm3bx+33XYb8fHxhIaGEhsby+DBg/nONWtUfHw8zz33nJ+jVEr5Q2Htw9Ch1Z7Wx6sKZ8UujFMpX9J7nEq5PDz/YR6e/zAA/Vv3540L36BTTKfq7ayKw7jm7s7lv88IEMI110CjRtU7rKqakSNHkpWVxZtvvkmHDh1ITU1l/vz5pKWl+Ts0pZSfFf4wL/yh7gkH5h2ANWAGmBr3S0pMhOBg24TpwAG9bijfqoU5tVL+Mbr7aJpGNuW14a8x/7r51U8ewA7jGlj5cb43TdnG8LcXcz57uOOO6h9WVd6hQ4dYsGABTz31FIMHD6ZNmzacdtppTJgwgVGjRpGYmMi2bdu47777EJFiF/tFixYxYMCAouFRb731VtLT04vWJyYmcsstt3DXXXfRsGFDGjZsyH333YfT6fTHR1VKVVFODiQl2dfnnOOZfRpjWD1stZ0y0QOioqBfP3u/6ocfPLNPpSpLEwhVZ63ft577v7sfY+xoGB0bd2Tb3du4OeFmAqSG/zWq2Il60yoHgiGqdxTdutXs0KpyoqKiiIqKYtasWeTk5JRaP3PmTFq2bMnkyZPZs2cPe/bsAWDNmjWcc845XHTRRaxatYqZM2fy+++/c8MNNxTb/v3338fpdLJ48WL++9//Mm3aNF544QWffDalVM0sWADZ2dCzpwcnaiu8fyCeGxWtsHO3NmNSvqZNmFSdcyTvCI8veJznFj1HvjOfnrE9uaqHnQA3LCjMMwepQhMmY2BKXhf+oj2vjA/2zPHVMQUFBTF9+nRuuukmpk2bRq9evejXrx+XX345ffr0oVGjRgQGBhIdHU0zt18Qzz77LH/729+4996js/y9+uqr9OrVi9TUVJo2bQpA8+bNefHFFxEROnfuzMaNG5k6dSrjx4/3+WdVSlWNp0dfAjBO19CtHrx1O2wY/P3vNl5jqtRyVqka0RoIVWcYY/hs/Wd0+U8Xnlz4JPnOfG7qfRPnn3S+5w9WhSZMK1bA779DUOMQLh15gnz7i5T5iK5Xr9x1NX5Uw8iRI9m9ezezZ8/mvPPOY9GiRfTt25cnnnii3G1WrFjBjBkzimowoqKi6NevHwCbN28uKte3b99idxnPOOMMdu3aVaypk1KqdvJKAuHwfALRsyc0aQI7d9qBOJTyFU0gVJ2QvD+ZYTOGcdknl7EjfQe9m/dm8Y2LmXbhNBqGN/T8AStZA1GQUcDnUw4hGMaMgTAPVYD4nTFlPjLS08tdV+NHNYWFhTF06FAmT57MokWLuPHGG5kyZQp5eXlllnc6nYwdO5bff/+96LFq1Sr+/PNPTjnllGrHoZSqHXbtgrVrISLC9jHwmMIJ3zz4yysg4GgfDW3GpHxJmzCpOuHT9Z/y3ZbvaBjWkCcGP8FNvW8iMKDynZyrrJLDuO6YsY+hXycTRBOuvOlk78WjKq1r164UFBSQk5NDSEgIjhLTvPbu3Zt169bRoUOHCvfz66+/YszRkVaWLFlCXFwc9erV81rsSqmamzfPPg8cCKGhntuvN2ogwNaSvP++TSDuvtuz+1aqPFoDoU5ITuMkeX9y0fsJZ05gYr+JbLxjI7ck3OLd5AHsRHKVqIFY/2IKAOkdG9G5s3dDUsWlpaUxaNAgZsyYwerVq/nrr7/45JNPeOaZZxg8eDD16tUjPj6eBQsWsGvXLvbv3w/AAw88wNKlS7nlllv47bff2LRpE1999RU333xzsf3v3r2bu+++m+TkZD799FOeffZZ7rnnHn98VKVUFXij+RJ4pw8E2HkqAObPt6NHKeULWgOhTjhJW5O4d969bD20lU13bKJheENCg0J5csiTvguiEjUQOTtzCf/jEHkIp0+I8VFgqlBUVBR9+/bl3//+N5s2bSI3N5cWLVowevRoJk2aBMAjjzzCzTffTPv27cnNzcUYQ48ePfj555+ZNGkSAwYMwOFw0K5dOy655JJi+7/qqqtwOBz06dMHEeHGG2/UBEKpWs7hANc8kh5PILzRhAnsKFE9e8KqVbBwIQwZ4tn9K1UWTSDUCSN5fzL3f38/s5JnAdAiugWbDmzitBan+T6YSiQQK59NIQBYERLDPdfo6Eu+FhoayhNPPFFhh+m+ffuyatWqUssTEhKYO3duhfsPCgri5Zdf5uWXX65xrEop31ixwk7KFh8PJ53k2X17qwkT2GRn1Spbe6IJhPIFbcKkjns7Du9g3OxxnPzKycxKnkVkcCSPDnyUjXds9E/yAJVqwpT6vm2+FHhu7InTeVoppY5j7s2XPD0kqrcTCNCO1Mp3tAZCHfeumnkVC7YvIEACuKn3TTwy8BGaRXlq5p9qcjorHMb1wPJMGqQd4TBBDJvcyIeBKaWUKo+3+j8ARyeS80IXvH797KhRa9bA7t0QF+f5YyjlThMIddw5kH2A3IJcmkc3B2DygMm8sfINHk58mE4xnfwcncsxhnFd+ngKYcDaxk0ZcapWBJ5okpKS/B2CUqqKDh+GJUsgKAgGDfL8/otqILww3U9oKCQmwjff2D4cY8Z4/hhKudNfLuq4sSdjD/fNu4/W/2rNhO8mFC0f0m4I/7vsf7UneYAK+0AYpyF/rm2+FHNlrC+jUkopVY4ffrCtT884A+rX9/z+A6MDaT2xNYzw/L5BmzEp39IaCFXrbT20lWd/eZY3f3uTXEcuAAezD5LvyCc4sJZ2PnY4yk0gts06RHROHnsI46IHdU4ApZSqDbzafAkIbhhMuyfbsT1pu1f2Xzih3Hff2UrwSkxFpFS1aQKhaq2/Dv7F5KTJ/G/t/yhwFgBwaZdL+Xv/v5MQl+Dn6I6hgiZMvz2dQkPgr/axXNncC3XZSimlqsQY7ycQ3tapE7RuDdu3w8qVkFDLL5Pq+Kb5qarVPljzAcYYru5xNetuW8dnV3xW+5MHKLcJkyPbQfjSfQB0uFWbLymlVG2QnAzbtkFMDPTu7Z1jFGQWcGDeAVjnnf2LHE1+CmfTVspbNIFQtcL+rP08v+h5LvzwQoyxHc3aNmzLGxe+waY7N/HeJe/RtUlXP0dZBQ5HmfXH6+dmkeUMYGNANBfcGuGHwJTyPRFpJCKfi8gREdkmIqMrKNtbRH4WkUwRSRGRu3wZq6qbCmsfhg71XtOf3G25rB62Gp71zv5B+0Eo39EmTMpvjDHM3zafaSum8dmGz8hz5AF2JumBbQcCcH2v6/0ZYvWVUwPxv+XRPMUZ3HZZHhGaP6i64z9AHhALnAJ8LSKrjDHF7sWKSAwwF7gH+BQIAVr6OFZVB/mi+VJARAANhzbkYMhBrx1j0CCbAC1aBOnpUE+72Skv0RoI5XPZ+dk8+8uzdP5PZwa+M5AP135IviOf8086ny9HfcnZbc72d4g1V0YfCKcTZswAJwFcdpvOHHc8SExM5Pbbb/d3GEDlYunWrRtTpkzxTUCVJCKRwEjgn8aYTGPMQmAWcE0ZxccD3xpj3jfG5BpjMowxG3wZr6p7cnKgcOTlwo7I3hDeNpye83rChGOXra6GDaFPHygogJ9+8t5xlNIaCOUTeY48QgJDAAgJDGHqkqnszdxLXHQcY3uN5YZeN9CmQRs/R+lBZYzC9PM7Rzi4PYQ2bYI56yw/xaWK2bdvHw899BDffPMNe/bsoUGDBnTr1o2JEycydOhQZs6cSXBw7RjpqzbFUkUdgQJjzEa3ZauAAWWU7QusEZFFQAfgV+D/jDGlhq0RkXHAOIDY2NhaMfdGZmZmrYijNjkezsmKFQ3Jzu5Ju3aZJCcvJznZu8fz9jnp1KkNixe35e23d1G//p9eO46nHA9/I752PJwTTSCU12TlZzF301w+Wf8Jc/6cw+Y7N9M4ojGBAYE8PeRp6ofWZ3jH4QQFnIB/hmU0YUp9IJnPyGD12T0JCGjgp8CUu5EjR5KVlcWbb75Jhw4dSE1NZf78+aSlpQHQqFHtmSW8NsVSRVFAeollh4HoMsq2BHoDQ4E1wDPAh0C/kgWNMdOAaQAJCQkmMTHRcxFXU1JSErUhjtrkeDgnX39tn0eOjPJqrM58J450B7/8+otXjxMWBtOnw9q1LUhMbOG143jK8fA34mvHwznRJkzKo9Jz0/lwzYdc9vFlNHm2CSM/Hsn/1v6Pw7mHSdqaVFTu2p7XMqLziBMzeYBSTZgyDzjYdSCQXAIYPr6s303K1w4dOsSCBQt46qmnGDx4MG3atOG0005jwoQJjBo1CijdbCglJYWLLrqI8PBw2rRpw9tvv12q2ZCI8OqrrzJixAgiIiLo2LEjP/30Ezt37mTYsGFERkZyyimnsHLlymLxzJw5k+7duxMaGkqrVq14/PHHiwYUKCuW1NRURowYURTLW2+95aUzVWOZQMmW2PWAjDLKZgOfG2OWGWNygIeBM0XEC9N6KWX5avjWjOUZ/BLzC9zn3eMkJECDBrB5s30o5Q2aQCiPycrPIu75OEbPHM1nGz4jKz+L0+JO46nBT7Hlzi2M7DrS3yH6TokmTLPmBjLe0ZNnEs6g8ymBfgxMFYqKiiIqKopZs2aRk5NTqW3GjBnDtm3b+PHHH/nyyy+ZMWMG27ZtK1XuscceY9SoUaxatYqEhARGjRrFjTfeyG233cZvv/1GXFwc1113XVH5FStWcPnll3PppZeyZs0annrqKZ588klefvnlcmO57rrr2LRpE99//z1ffPEF7777Llu3bq3qafCFjUCQiJzktqwnZQ9muRowbu9NGWWU8pjdu2HNGoiIgP79vXss43D9OXt5+p+gIBgyxL7W4VyVt5ygt3+VN6XnprNg2wK+2/IdK/asYP518wGICI7g1LhTcRonI7uM5NIul9K6fms/R+snJaYBffdd+zzq+rrxX04eLv8K+d8L/su4U8cBMG3FNG7+6uZyy5qHjv5+PHXaqazcs/KY5SorKCiI6dOnc9NNNzFt2jR69epFv379uPzyy+nTp0+p8snJyXz77bcsXryYvn37AjB9+nTi4+NLlb322mu58sorAXjwwQf58MMPGTZsGCNGjADg/vvvZ+DAgezfv5/Q0FCmTp3KgAEDePjhhwHo2LEjf/75J08//TR33HFHqf1v3LiROXPmsHDhQvr1s6173nnnHdq1a1fl8+BtxpgjIjITeERExmJHYRoBnFlG8beBz0TkRWyC8U9goTHmsM8CVnXK3Ln2eeBACA318sEcrmcf3EMaNgw+/dTWrtx6q/ePp+qeuvFrRtVIVn4WP2/7mZ/++omftv7Eij0rcBpn0Xr3H3XfX/M9wYHHZUdPz3I6Ma4mTFsXZrF3Xh4hQfX529905unaZOTIkQwfPpwFCxawePFi5s6dy/PPP8/jjz/Ogw8+WKzsH3/8QUBAAAlu07u2atWKuLi4Uvvt0aNH0evYWDthYPfu3UstS01NpVWrVmzYsIHhw4cX20f//v15+OGHSU9Pp16JsRg3bNhAQEAAp59+etGyNm3alBlLLXEb8BaQCqQBtxpj1onIWcAcY0wUgDHmRxF5EPgaiAAWAuXOGaFUTX3zjX0+/3zvH8s4XTc6fND2o3A0qR9/hPx8OD7HX1C1mSYQqhhjDNsOb+NwzmF6NusJwIZ9Gzjv/fOKygQFBNG3ZV8Gxg/kvA7ncUqzU1i4cSGAJg+FHA5MoL3N9OvEXbxgdvFrhzY0btzWz4H5Rnk1AhkZGURHH+0DMu7UcUW1EceyYtwKj8RWUlhYGEOHDmXo0KFMnjyZsWPHMmXKFCZMqP5Yi+6jJYkrkSxrmdPp5FhEyk86K1pXmxhjDgAXl7F8AbaTtfuyV4FXfRSaqsPy8+G77+zr886ruKwn+KoJE0Dr1tC5M/zxByxeDGefAKOjq9pFE4g6Li0rjd/3/s6vu35lyc4lLN21lJQjKfRv3Z8F1y8A4JRmpzCo7SBOizuNgfED6de6H1EhUcfYcx3n6kTtzHcSuSQVgK5jY/wclKqMrl27UlBQUKpfROfOnXE6naxYsaKoidPOnTvZvXt3jY/ZpUsXfvnll2LLFi5cSMuWLYslXCVjWbp0KWeeaVsCbd++3SOxKFVXFE621rkztPXFvR0fNmEC24zpjz9sPwhNIJSnaQJRR+Q78klOSyYuOo5G4XY4yAd/eJAnFz5Zqmyj8EbERsYWvQ8MCOSHa3/wWawnBNcwritfO0iUI58dARFccbsmXbVJWloal19+OTfccAM9evQgOjqa5cuX88wzzzB48OBSzYY6derEsGHDuOWWW3j11VcJCwvjvvvuIyIiosY1Affeey+nnXYaU6ZMYfTo0Sxbtoznn3+eJ554oszynTp14txzz+Xmm29m2rRphIeHM378eMLDw2sUh1J1yZw59tkXzZfAt02YwCYQ//637Qfx2GO+OaaqOzSBOME4nA6W7FxCcloyyfuT7XNaMpsPbCbfmc+MS2ZwVY+rAGjXsB2RwZF0j+3OaXGn0adFH/q07EP7hu2Pm6YRtZarBiL5Pym0AA6dFktoqJ7T2iQqKoq+ffvy73//m02bNpGbm0uLFi0YPXo0kyZNKnObwk7XiYmJNG3alEceeYQtW7YQFlazmcV79+7NJ598wkMPPcQTTzxBbGwsEydOrHDm6cJYBg0aRExMDA899BCpqak1ikOpusSX/R/At02YwNY6hITAihWwbx80aeKb46q6QROI40x6bjpbD20temw7tA2ncfKvc/8F2DbRQ94bQk5B6WEp2zVsR4GzoOj9tT2v5YZeNxAgOpqvxzkc5OZH0CR5PwAJE2OPsYHytdDQUJ544oly7/IDpWYCbdasGbNnzy56v3//fsaNG0eHDh2KlrnP3QAQExNTalnnzp2LlmVk2OkQLr30Ui699NJKxxIbG8usWbOKLRs7dmy52yuljtqxww7fGhnp/eFbi/i4CVNkJAwYYPt5zJ0L11zjm+OqukETiFoipyCHPRl72J2xmz2Ze9iTsYdz2p9Dp5hOALyy7BUm/TiJgzkHS21bL7QeU4dNRUQIkAAu7nwxARJAp8ad7COmEyc1OonIkMhi24UEhvjks9VJTicrNw2iMU42htfnphE1u0Otaocff/yRjIwMktxfyAAAIABJREFUunfvTmpqKv/4xz+IiYnh3HPP9XdoSqkqKBy+dcgQHwzf6uLrJkwAF1xgE4ivvtIEQnmWJhBecDjnMPuy9pGem86B7AOkZaWxP2s/adlp1A+tz1197wIgz5FHx5c6kpadRmZeZqn9vHHhG0UJRKAEcjDnIOFB4cQ3iC96tKnfhvgG8RgM4qoX/XDkh777sKpsTidHdnaiMRBwTizaIuzEkJ+fz6RJk9iyZQsRERH07duXn3/+mcjIyGNvrJSqNQqbL/li9KVCvm7CBDB8ONx1l02YdDhX5UkeTSBEpBHwJnAOsB/4uzHmgzLKCfAUUFjf/gYw0ZSs5/eBfUf2cTj3MFn5WaUecdFx9G9t6zZTMlP415J/kZGbwZ/b/2Tqnqmk56aTnpvO4dzDfHL5J/Ru3huwnZNfWf5Kmcfr2qRrUQIREhhC6pFUsguyCQ4IpllUM5pHN6d5lH10bNyxaLtR3UZxceeLaRrZVPsnHAd2b4iiZS7kIQx6RBueniiGDRvGsGHD/B2GUqoG8vLg++/ta18mEEVNmHxYA9G+PXTpAhs2wMKFdsI8pTzB0zUQ/wHygFjsbKNfi8gqY8y6EuXGYccE7wkY4DvgL+C1ina+K2MXt39zO3mOPHIdueQ58uzrglzG9BzD5Sf/f3v3HR5FtT5w/HuSTSWFhBJKpCcoSEdEmkFARfGiNBUp6g+wd0WuXfDqBcV6FUW9oFgQERRRsd7QBQEFpUqvoSSU9LJ7fn+cZNM2ySbZZHeT9/M88+zuzDmzb2Ynu3PmtJEAfL/7ex7+8eFC2/OeZ1mzOP7wccIDwwEY+flIlh9Y7vD9rm9/vb0AkZyVzPTV0/M3FumrmJiWaH/eJLQJrSJaERYQRt3AutQPrk+9oHrUD65P8/DmhfJtu2sbEYERhAWElVowCA8MJ5zw0g6P8BA5yTlsndcSP2BjdFMu7yi3fIQQwlOsWgUpKdC+vZkvobr4RfkRMTCC082KN0WuSkOGmALEN99IAUK4jssKEEqpOsBw4EKtdQqwSim1BBgLTCmSfDwwU2t9ODfvTGAiZRQgAvcGEnd9nMNtYQFhrPFfA4Bfjh9Ppz/NybCT3DnpTnuaOW/OISQ9hPSb0wmPNhfj494bx/1/3o9SCoUq9Ojv68+ae80+bdrG99nfo5Ri5Qsr6dqnK+EB4fjd74dtnY22fdpCa/M+Y1aPof8bJf+XrmFNoddHOUq7T9tR99K6ABx44QBH3jhCsynNiL43GoDEbxLZOXFnaYenGEf5I6+K5Pz3zgcg41AGmy7eVNouinGUPyA6AGbkp1nffj05p3NK2ENxAdEBdFvfrVj+i/66CL9Ic/G99YatnF1xtlyxOsrv6DiXhzOf0/ax2/FLVeymDlFPtCrX/oUQQlSt6h59KU9EXAQRcRHFBkSoakOGwIsvmn4QL71UrW8tajBX1kDEAjla610F1m0GLnWQtn3utoLp2jvaqVJqEqbGgjaqDfVTSpiMKwWyyALABx/qU5+6wXX5pMcnWHws+Ck/wmeGo1IU2zdsZ8fuHQC0ymwF50r+o/L2CeCP6XTcI7gHIQlmTP+cozlwHLZv2s523+0m4V/AsZL36cgf6/8wdTEF8u/espvd8bvNug3l36ej/Am7EkiITzDrEsq/T0f5s2xZpKSk5H8pHqbUY1pUli2r8Bdqbv7VK1djr3TZU/5YHeV3dJzLw6nP6TScwp/pqg2vRq8mPt5awt5qhvDwcPtIQmWxWq1Op60tqvOYZGRkVPvFixCeRGvIG7zs6qvdG0t16dUL6taFnTvh778hJsbdEYmawJUFiBCKXzaeBYpPo2rSni2SLkQppYr2g9BazwZmA3Tr1E1f8t0lTgekfBX+UfkjDWXuzAQN/o38UT6muVD2smxsmTan9wmwdsda4uLiCuW3RFrwDTRjs+V0zcH6YvkuGh3l9w31xRJqPiLrxVZyJjp/Vx9wmN8n0Md+V96WYyO7X3a59ukov/JVrNm+xn5MMndk5l9kO6HY57TDNZ+To/zV8TnNTM3hiRctDG62jquv7luu/Xuj7du3O5wt2ZHk5GSn09YW1XlMAgMD6dKlS7W8lxCeaMcOcxEdGQm9e1fve1szrNhSbVB8lPUqZbGYvh6ffmqaMd1/f/W+v6iZXFmASAHCiqwLAxzdWiuaNgxIKasTtfJTBDSp+HhrAY2L5/WrV4H26QXqWBzlt4RZsIRV/NA6yu8b5ItvUMUHj3aU38fiU6njWSj/9vz1jo5zebjscyojf1V8Tj6Bvrz3pS/ZwLDWq4BeFd6/EEII1/rqK/M4ZIi5sK5Oxz86zq6Ju+AqoJpHfh4yxBQgli6VAoRwDVeOBbALsCilClaOdQKKdqAmd10nJ9IJ4VXWrTN3txqFJNO7yfayMwghhKg2eQWIoUOr/719/HywRFjADdMCXXkl+PjA8uVwrhxNjIUoicsKEFrrVGARMFUpVUcp1RsYCsxzkPxD4EGlVFOlVBPgIWCuq2IRwl0+/NA83nThFnxllpVaTSnFwoUL3R2GECJXQoK5yRMQAJdfXv3v32h8I/ok9YF7qv+985ps5eTADz9U//uLmsfVoxHfCQRhBjn9FLhDa71VKdVXKVVwprR3gK+BPzFdUb/JXSeE18rMhPnzzfOxHf5AZo/zXEqpUpebb77Z3SEKIVzs669NJ+qBAyEkxN3RVL8hQ8xjXidyISrDpfdItdZJmPkdiq5fiek4nfdaA5NzFyFqhG++gdOnoWNH6FT/CHtPVONsQaJcjh3LH35r6dKlTJw4sdC6oKAgd4QlhKhCeRfO7mi+5AmuvRYefdQUpLKywN+/7DxClESucIRwkXm5jfXGjQNsNtPgVHikRo0a2Ze6desWWpeamsq4ceNo1KgRderUoWvXrixdurRQ/hYtWvDcc89x2223ERYWRnR0NC+++GKx90lKSmLkyJHUqVOHVq1a8dFHH1XL3yeEKCw11cw+rRRcc417Yjj63lF+bfmr44bd1SA21kyed+YMyGjOorLkCkcIFzh1ytRA+PjA6NGAzYaWJkxeKSUlhcGDB/Pjjz+yefNmhg8fzrBhw9ixY0ehdK+88godOnRg06ZNPProo0yePJm1a9cWSjN16lSGDh3K5s2buf7667n11ls5ePBgdf45QghMu/+MDLj4YmjUyD0x5JzJIWN/hhmH0k2GDTOPX3zhvhhEzSAFCCFc4LPPIDvbdMxr3BhTgPCt+LC73kypkpewsNBSt1dmcZVOnTpx++2306FDB9q0acPjjz9O165di3WIvvzyy7n77rtp06YN99xzD23atOHnn38ulGbs2LGMGTOGNm3aMG3aNCwWCytWrHBdsEIIp7hz9CW7vGmH3Hhvafhw8/jll2Ct2XOciiomBQghXCBv9KVx43JXWK3SidpLpaamMnnyZNq1a0dERAQhISFs2LChWM1Bx44dC71u0qQJJ06cKDGNxWKhQYMGxdIIIapWTo6Z/wDgH/9wXxzamjvVlRvvLXXsCK1awYkTsHq1++IQ3k8KEEJU0s6dsH49hIYWuLtVi5swaV3ycu5ccqnbK7O4ysMPP8znn3/OtGnTWL58OX/88Qc9evQgKyurUDo/v8KTEyqlsNls5U4jhKhay5dDYiLExMAFF7gvDm3L/aJy45WXUvm1EIsWuS8O4f2kACFEJX3wgXkcMQKCg3NX2mxQS5swebtVq1Yxbtw4hg8fTseOHYmOjmbPnj3uDksIUUGffWYer7/ezRXDHtCECfL7QSxa5NqbL6J2kQKEEJVgteY3X7rllsIbamsNhLeLjY1l8eLFbNq0iT///JMxY8aQkZHh7rC8mlIqUim1WCmVqpQ6oJQaXUZ6f6XUdqXU4eqKUdRM2dn5HYZHjXJvLJ7QhAmgRw9o2hQOHYING9wbi/BeUoAQohJ++gmOHDFtSvv0KbBBhnH1Wi+//DINGzakb9++DB48mJ49e9K3b193h+Xt3gSygCjgJmCWUqp9KekfAU5WR2CiZvvlF0hKMk2XLrzQvbF4QhMmMD9N111nnstoTKKiXDqRnBC1zdy55vHmm4tUjdfiPhDeZsSIEegC9fjNmzfnp59+KpTm4YcfLvR6//79xfYTX2Rgde2gbYCjfDWdUqoOMBy4UGudAqxSSi0BxgJTHKRvCYwBHgTerc5YRc3jMc2XwGOaMIHpB/Gf/5gCxAsveMCxEV5HChBCVNCZM7B4sXluH30pj9WKlhoIIQBigRyt9a4C6zYDl5aQ/g3gMSC9tJ0qpSYBkwCioqKKFeDcISUlxSPi8CTuPCbZ2YrPP+8F+NGixXri49PcEofdPvOQmZPp9vPEalXUrXsJu3f78957G4iJcd/kFPJ/U5w3HBMpQAhRQZ99BpmZcNll0Lx5kY3ShEmIPCHAuSLrzgKhRRMqpa4DfLXWi5VScaXtVGs9G5gN0L17dx0XV2ryahEfH48nxOFJ3HlMvvkGUlKgQwcYP76HW2IoaPfS3RzmMAFBAR5xntx0E7z5Juzc2Z2JE90Xh/zfFOcNx0SucISooILNl4qRJkxC5EkBwoqsCwOSC67Ibeo0A7i3muISNdyCBebR3Z2n7TyoCROYAgTAJ5/IpHKi/KQAIUQF7NgBv/4KISH5Q+IVYrXKMK5CGLsAi1IqpsC6TsDWIuligBbASqVUArAIaKyUSlBKtaiGOEUNkpFhZlsGzylA+AT5YImwQIC7IzF69jQDgBw7Bh7eWkZ4IClACFEBeXM/jBoFdeo4SCA1EEIAoLVOxRQGpiql6iilegNDgXlFkv4FnAd0zl0mAMdznx+qvohFTfD993DuHHTuDLGx7o7GaPV8K/ok9TFnvwdQKr8W4uOP3RuL8D5SgBCinArO/eCw+RJIHwghCrsTCAJOAJ8Cd2ittyql+iqlUgC01jla64S8BUgCbLmvpYGFKJePPjKP11/v3jg8XV4BYuFCSC912AIhCpMrHCHK6aef4OhRB3M/FCSjMAlhp7VO0lpfq7Wuo7VuprX+JHf9Sq11SAl54rXW0dUbqagJEhNhyRJzD2fMGHdH49natoXu3SE5GZYudXc0wpvIFY4Q5VTi3A8FSRMmIYRwi08/hawsGDQIoj2oCLpn8h5+bfkr/M/dkRQmzZhERUgBQohyyJv7QSkYP76UhNKESQgh3GLOHPN4yy3ujaOo7JPZZOzPgAx3R1LYDTeYn6tvvzWzdgvhDLnCEaIc5s/Pn/uhWbNSEtps0oRJCCGq2ZYtsGkT1K0LQz2ks3KeVi+24uI9F0M/d0dSWKNGMHAgZGfnD30rRFnkCkcIJ2kNs2eb52Xe2bJapQbCw918880opVBKYbFYaNasGXfccQenT592eh8tWrTgpZdecrhNKcXChQsdvu+QIUMqHLcQomR5tQ+jR0NgoHtjKcq/vj9BrYLA0ch9bjZunHl87z33xiG8h1zhCOGkjRvh998hMhKGDy8jsfSB8AoDBw7k2LFj7N+/n/fee4+vv/6aO++8091hCSEqICsrf/QlT2u+5OmGDze/bRs3woYN7o5GeAMpQAjhpLzah/HjnbizJU2YvEJAQACNGjUiOjqayy+/nOuvv54ffvjBvn3OnDm0a9eOwMBAYmNjeeWVV7DZbG6MWAhRkm++gVOn4MILoVs3d0dT3MGXDvLXiL+KT6HoAQID8/v1vfOOe2MR3kGucIRwQnIyfPKJeT5xohMZpAmT19m7dy/Lli3Dz88PgHfffZfHHnuMqVOnsn37dmbOnMn06dN566233BypEMKRvBHybrmllBHy3Ojc2nOc+uIUnHJ3JI5NmmQeP/3UTMInRGks7g5ACG/wySeQmgr9+sEFFziRoZY3YYpX8eVKH9I1hO4buxfLH6fj7Os2dNtAyqYUh/kLpiuPZcuWERISgtVqJSPDDI3y8ssvAzBt2jRmzJjBiBEjAGjZsiVTpkzhrbfe4u67767Q+wkhqsahQ6YGwmLx3LkftFWbJx56b+n88+HSS2H5cjOk6x13uDsi4cmkACGEE/KaL+XdoSmTzQa+vlUWj3CNfv36MXv2bNLT03n33XfZs2cP9957LydPnuTQoUPcdttt3FHgVzQnJwettRsjFkI4MmuWqfi94QZo2NDd0ZQgbz51Dy1AANx2mylAvPMO3H67Z9bkCM8gBQghyrBxoxkW0KnO03ms1lpdA1FSjUBycjKhoaEVyl+whsJVgoODadOmDQCvv/46/fv3Z9q0afZCw9tvv02vXr0qtO/Q0FDOnj1bbP2ZM2cIDw+veNBCiELS0/Nv8tx7r3tjKY22eXYNBMCwYVC/PmzeDOvXw8UXuzsi4ak8+DQWwjPkdShzqvN0HplIzis9/fTTTJ8+HavVSpMmTdizZw9t2rQptjijbdu2bNy4sdA6q9XK5s2badu2bVWEL0St9OmnkJgI3btDz57ujqZknt6ECSAgIH8EK+lMLUojNRBClOLMmXJ2ns4jozB5pbi4ONq1a8dzzz3Hs88+yz333EPdunW56qqryM7OZtOmTRw5coR//vOf9jxHjx7ljz/+KLSf6OhoHnzwQW655Rbat2/PoEGDSEtL44033iApKYlJTreFE0KURmt4/XXz/N57PbzJjRc0YQLTVPfFF03BbMYMUyMhRFEefhoL4V5z5pjO05dd5mTn6Ty1vAmTN3vooYd4//33GTRoEP/973+ZN28enTp1om/fvsyePZuWLVsWSv/KK6/QpUuXQsv8+fO58cYbmTNnDnPmzKF79+5ceeWVJCQksHLlSho1auSmv06ImmXlStPcpmFDGDXK3dGUzhtqIADatIGrr4aMDHjzTXdHIzyV1EAIUQKrFf7zH/O83O1qpQmTx5ubN+ZjEaNHj2b06NEANG/enBtvvLHEfezfv7/U97jxxhtLzS+EqJy82ofbbzfNbzyZN/SByDN5shnV6o034JFHIDjY3REJT+MFp7EQ7vHtt7B3L7RoAUOGlDNzLR/GVQghqtqBA7B4sRm69fbb3R2NE7ykCRNA376mA3VioqmJF6IoLziNhXCPvDtbd99dgRFZrVYZxlUIIarQa6+Zyt5Ro6BxY3dHUzZvacIEpi/J5Mnm+cyZkJPj3niE5/GC01iI6rdtG/z0k6m2vfXWCuxAaiCEEKLKnDqVP0rQI4+4NxZn2Zswecm9paFDISYG9u2DL75wdzTC00gfCCEceOMN8zhuHEREVGAH0gdCCCGqzGuvQVoaXHUVdO7s7miMLGsWn2/9nL2n97L/zH5Opp0kMT2RxLREUrNTeT/lffzxBwVfbPuCx395nDr+dagXVI8moU1oGtqUpmFNaVuvLf2a98PP18+tf4+vLzz0kGkeNmOGqemR+2IijxQghCji9Gn48EPz/J57KriTWjaMq9YaJb8sHk1m0BY1xdmz+Td5Hnus+t8/JSuFXw//yuqDq8m2ZfPcZc8B4Kt8ufmrm8mxOW7vs//F/YxtO5Z1u9dxPPU4OxN3Okzno3xIfSwVP0wBYs7vcwgLCKNndE+ahjWtmj+qBOPGwVNPmclUf/4ZBg6s1rcXHkwKEEIU8e675s7WgAHQrl0Fd1KLhnH18/MjPT2dYBmmw6Olp6fj5+feO5pCuMKrr5pCxKWXQu/eVf9+2dZs1h5ey3d/f8fP+35m07FNWLXpER0RGMG0/tNQSuHr48vt3W6njn8dWtRtQaOQRtQLqke94HqE+IcQGRRJkH8QHISbOtxE/xb9SclK4VTaKY4kH+Fo8lEOnDlAclYygRYza6nWmik/T+FE6gkAYuvFMqDlAAa0HMDAVgMJD6zaWe2DguD++01B7ZlnzO9iLflpE2WQAoQQBWRkwCuvmOeValdbi5owNWzYkCNHjtC0aVOCgoKkJsLDaK1JT0/nyJEjREVFuTscISolKQleftk8nzq1et7zP+v/w4M/PGh/7aN86Na4G32b9aVH0x5YtRWLMpdTb1z1hlP7DA8Md+riP9uWzaSuk1h/dD1rD61lV+IudiXuYtaGWfj5+DH7mtnc3PnmCv1dzrr7btORevVq+P57uPLKKn074SWkACFEAR98AAkJpk3t5ZdXYke1qAlTWFgYYGZkzs7OLjVtRkYGgYGB1RGW16iOY+Ln50dUVJT9sxLCW730Epw7B4MGQb9+rt13enY6y3YvY8G2BVzU5CIevMQUGq5scyXvbHyHwW0Gc0WbK+h9Xm9CA0LLvf+/7/ubrKNZMNL5PP6+/ky7bBoAObYcfjvyGz/v+5kf9vzA6kOr6RjV0Z52wdYFHEs+xugOo2lQp0G54ytJaCg8+qgZlenJJ+GKK6QWQriwAKGUigTeBy4HTgH/1Fp/UkLaZ4DHgcwCqztqrfe6Kh4hyisnx3QUA5gypZJfkFZrramBAFOIcObiND4+ni5dulRDRN5DjokQzjlyxDRfApg2zTX71Fqz7sg63t/0Pp9t/YzkrGQA/jrxl70AcUGDC9hx945Kv1fSsiTSd6VDeecVymXxsXDJeZdwyXmX8ES/JziZepL6wfXt219f9zqrD63m4R8f5uqYqxnfaTxXx16Nv69/pWO/6y5T87NhgxmRacSISu9SeDlXXuG8CWQBUcBNwCylVPtS0n+mtQ4psEjhQbjVwoVm4rjWrV3w5SjDuAphp5SKVEotVkqlKqUOKKVGl5DuEaXUX0qpZKXUPqWUlwzQKarDU09BejoMG2YmOausr3d+TYdZHbjk/Ut47/f3SM5KplvjbkwfOJ2vb/y68m9QRMzrMbRb0A7ql53WGQ3qNCjUZPS+i+9jSOwQtNZ8tfMrhi0YRpOZTbjvu/v4O/HvSr1XcDA8/bR5/uijkJVVqd2JGsAlNRBKqTrAcOBCrXUKsEoptQQYC0xxxXsIUZW0hn//2zyfPNkFc8DVoiZMQjih4A2mzsA3SqnNWuutRdIpYBywBWgN/KCUOqS1nl+t0QqPs2WLmRHZYsn/rq6ILGuW/Y68VVvZenIrDYIbML7TeG7tcisXNLjARREXF3lFJADb4rdVyf5Hth/JyPYjSUhJ4OMtHzN381z+OvEXr69/nY5RHYmpF1Op/U+YYIbP3bED3nrLdK4WtZermjDFAjla610F1m0GLi0lzzVKqSTgGPAfrfUsR4mUUpOASQBRUVHEx8e7JuJKSElJ8Yg4PIm3H5P16yPZvLkjkZGZtGixjvh4W6X2d0l6Oqnp6V59TKqCt58nVaGmH5Py3GDSWs8o8HKnUuoroDcgBYhaTGt44AHzeMcdZnKz8rBpG9/+/S0vr32Z6LBoPrzOjNN9dczVLL5+MVfFXOWSZj6eolFIIx7q9RAPXvIgvyf8zpzf53Bjhxvt259f+TxaayZ2m0jDOg2d3q/FAi++CNdcA88+CzfdBA1c19VCeBnlirHBlVJ9gc+11o0KrJsI3KS1jnOQvh1wBjgOXAx8ATyotf60tPfp3r273rBhQ6Xjraz4+Hji4uLcHYZH8eZjorUZDnDlSpg+3dRAVFpUFKtnzaL3sGEu2FnN4c3nSVXxlGOilNqote5eBfvtAqzWWgcXWPcwcKnW+ppS8ilgE/CO1vptB9sL3lzqNn+++8sYKSkphISEuDsMj+KKY/LLLw2YNq09YWHZfPjhOsLDHc+zUFSGNYMfjv/AwsMLOZR+CIAwSxjze84nyDeoUjFVyCIgA1IGphDS0D3nSbo1nZFrR5JqTcVP+RHXII5R542iTUgbp/JrDZMnd2TDhkiuuuoYjzzieC6L8pD/m+I86Zj079/f4W+DUzUQSql4Sq5NWA3cAxTtQRkGJDvKoLUuWH+3Rin1GjACKLUAIURV+PFHU3iIjDQzbrqEzeaCdlBC1AghwLki684CZQ1j8wymn94cRxu11rOB2WBuLnlCIcxTCoOepLLHJCUFxowxz1980Y+hQ/uUmedU2ile+/U1Zm2cRWJ6IgDnhZ3HfRffx4SuE6p87oSSrBm9hqxjWYQMCnHbeWLTNha1WMSbv73J0l1L+fHEj/x44kcGtBzAw70e5orWV5Q5FPfHH8OFF8K33zbmyScb07Nn5WKS/5vivOGYONVIW2sdp7VWJSx9gF2ARSlVsGKxE1C0fWuJb4Fp+ypEtdIaHn/cPH/0UXDZKJe1aCI5IcqQQjluMAEope7G9IW4WmudWVI6UfM9/rgZfal7d/i//3Muz+n00/xr5b9ITE+ke5PufDr8U/bcu4eHej3ktsIDgLbltvhwY/c4H+XD5a0v56sbvmLPvXt4oOcDhPiH8PO+nxn88WA2HdtU5j5iY+Hhh83zSZOkQ3Vt5ZLTWGudiqmcm6qUqqOU6g0MBeY5Sq+UGqqUilBGD+Be4CtXxCJEeXz5pRmWrlEjM1mOy9SiieSEKEO5bjAppW7F9I0YoLU+XA3xCQ+1Zg288YapzJ0923Glrtaa73d/z13f3EVek+yYejG8MOAFVt6ykvUT1nPDhTfg5+sBs7Bbcx895KehRd0WvHzFyxx64BDTB05nZLuRdGvSzb794y0fk5Se5DDvE09Aq1bw55+m6a+ofVw5kdydwH+BE0AicEfeCBu5fSS+01rnNei6ITdtAHAYmK61/sCFsQhRJqvVfAmCeQwOLj19ucgoTEIA5gaTUirvBtMEzChMQ4FeRdMqpW4Cngf6y9DetVt6uqlxMG3uoehUKRk5GXy85WNe+fUVtp40ZdER7UbQv2V/AB7t82h1h1wmbXV/DYQjdQPrMrl34c5/W45vYcziMQT7BfN/Xf6P+3veT6uIVvbtwcHw3ntw2WVmTo7rrjPNmkTt4bLTWGudpLW+VmtdR2vdrOAkclrrlQUKD2itb9Ra18ud/+F8rfXrropDCGd9+ils2wbNm8PEiS7euTRhEqKgO4EgzA2mT8m9waSU6quUSimQ7jmgHvCbUioldynWgVrUfFOmmOFCzz/fzP+Q52TqSaYun0rzV5sz4esJbD0m+v5VAAAgAElEQVS5lSahTXhhwAt0atTJfQE7wd6EyUu6x13R+grSstN4Y/0bxLwRw4gFI1h7aK19e//+pglTdrbpp5IpjQ1rFVfWQAjhNbKz8yfFeeYZ8Hf1CH7ShEkIO611EnCtg/UrMZ2s8163rM64hGf6/nt4/XUzbOhHH0FgoFlvtVnpNrsbh86ZEZU6N+rMQ5c8xKj2o7xjGNa8JkxecG+pY1RHlo1ZxpbjW3h57ct88ucnfLH9C77Y/gUDWg7gx7E/opRi5kz4+WfYvNnU5L/4orsjF9VFrnBErfTWW2bW6bZt80f4cCmZiVoIIcrt6FEYN848f/ZZzZmIn0nONP3tfX18uaXzLQyJHcIv435h06RNjOk4xjsKD3huE6bSdIzqyNxr57L//v38s88/iQiMICYyxj5SU0BQNrPnpOHrCy+9BN995+aARbXxotNYCNc4cSK/9mHGDHOXy+VkGFchhCiX7Gy4/nrzHX3BRUf5rG43Bs4byH9//689zTNxz/D1jV/Tv2X/Mocb9TT2AoQX/jQ0CW3C8wOe5+ADB5l22TT7+s+3fc6INdH0Gb8MMDfkDhxwV5SiOkkBQtQ6jz8OZ8/ClVeaGTWrhPSBEEKIcrnjvhRWrQKfsGNsv7QzW07+TlSdKAItgfY03lZoKMSW++jFV14h/iHUD65vf718/3JOZ5xmefRVqJhvSUqCK4ekkZJSyk5EjeDFp7EQ5bdhA7z/Pvj5wauvQpX8FmltFm/+oRNCiGp07SPf8v6sEPDJwjZiBF3aRDN36FwO3H+A27rf5u7wXMJeA1GDfhreueYd1v7fWkZcOByGjYOI3ez4K5gWfdbx8+7l7g5PVCEpQIhaw2aDe+4x1/b332/6P1QJrU0HailACCGEQ9nWbE6nnwbghx9g6atXAtBt0ruseOrfbJy0kfGdxxNgCXBnmC6jtTZT5kKNu/LqGd2Tz0d+zu5H1zN2+nwISiRx88U8+2h9tC47v/BONew0FqJk8+bBr7+aSePy5n+oElarjMAkhBAOHDhzgCd/eZLmrzbn4R8eZv16GDYMrDk+TLrnLBtm3UXf5n29u6mSA4U6UNesP82uVUQrPpz4BN8u9cPin8PKRe156SWz7YlfnmDc4nGsO7zOPuGf8G4yjKuoFY4fh4ceMs+nT4ewsCp8MxnCVQgh7HJsOXyz6xve2fgOy3YvQ+feil+9IYWvZmlSUxVjx8KsV8PdHGnVUT6K9gvbo7VmG9vcHU6VGnxZGJ98BKNGmUkA64RYeTv5bRLTE5m3ZR7dGndjYteJ3HDhDYQH1tzPvKaTqxxR42kNd94JiYkwcCCMHVvFbygjMAkhBADrk9bT4tUWXPvZtXy3+zv8fP0Y3WE0/714A6dmzScxUTFkiOmbVpPvuygfRYPhDWg4oqG7Q6kWI0eafoYAd93pyx05O3ik1yNEBkWy8dhGbv/mdhrPbMy4xePYn7rfrbGKiqnB/65CGJ99BosWQWgovPdeNXRNkCZMQoha6kzGGf48/qf9daPARhxJPkJsvVhmXj6TIw8eYULExzxwQzcSExVXXw0LF5qBLUTNct998J//mOfPPV6fiA0zOPzAYeZdN4/+LfqTnpPOvC3zSLOm2fPk2HLcFK0oL2nCJGq0hAS46y7zfOZMaN68Gt5UmjAJIWqRbGs2y3YvY96WeSzZuYQLGlzA77f9DkCz4GZsnLSRLo26oJTi44/hllvMnA/Dh8PHH0NAzegnXSpbpo1DLx3CJ9gHurg7mupz110QFAQTJsBjj0FSUhD//vcYxnQcw97Te/lyx5dckHGBPf2VH12JVVu5of0NDG83vNCQscKzSAFC1Fhawx13QFISXH65+QKrFtKESQhRw2Vbs4nfH88X279g0fZFnEw7CYBCERkUSUpWCiH+IQB0bdwVreGFF8xFJMADD5iZi2vLvRZrmpV9T+zDN9wXvnR3NNXr1ltNIWLsWPOZ//knfPqp6XT94CUPEh8fD8CptFOsPrSajJwM4vfHc/d3dzOo1SBuuPAGrj3/WsICqrLzoigvKUCIGmv2bPjyS9N06d13q3FUVWnCJISo4ZbuWsqwBcPsr9s1aMe4juO4qeNNRIdFF0qbmGguIpcsMd/DL79shtKuTXwCfGj2z2b4BPiwn/3uDqfa3XijGQFx1Cj4/nu46CLz+3zhhflp6gfXJ+GhBL7c8SXzt87nxz0/8t3u7/hu93cE+AawdPRSBrYa6L4/QhQiBQhRI23YAPfea57PmgXNmlXjm0sTJiFEDZGYlsgPe35g6d9LCQ8I562r3wLgijZX0K1xNwa3GczwdsPpFNXJ4dCrf/wRzpgxcOQI1K0Lc+bAtddW91/hfr7BvrR6vhUA++P3uzcYN+nf3/w2X3cd/P47XHwxzJgBF+S3YCI8MJzxncczvvN4TqWdYuG2hcz/az6/Hv6Vbo272dPNXDMTgH+0/Qcx9WKq+08RSAFC1ECJiTBiBGRlmdGXbrqpmgOQJkxCCC9l0zY2Ht1ov/O7/sh6bNoGQFhAGK9e+Sr+vv4E+wWzYdKGEveTkgJTp8LMmZ2x2aBXL/jkk2rqhyY8VvPmsGoV3H67mZvp7ruhc+dOLFoELVsWTls/uD63d7+d27vfzun000QERQDmHH1xzYscTz3Owz8+zPn1z+ea2GsY1GoQfZr1IcgvyA1/We0jBQhRo9hspp3lgQPQo4epKq920oRJCOEltNbk2HLw8zXDIL3262s8+MOD9u1+Pn70b9GfwW0Gc+351+Lv61/G/kzTlPvug0OHTJOlxx6DZ58FSy2+4rBmWDm7/KzpRF3LBQfDhx/CP/5hbvL98UcEHTrA00/DPfdAYGDxPHmFBzAFiNcHv86SnUv45u9v2HFqBztO7eDFNS8S4BvA7GtmM67TuGr8i2qnWvzvLGqiZ5+F776DyEhYsMBNo3tIEyYhhIfSWrPn9B6W719O/IF4lu9fzs2db2Zq/6kADGg1gObhzRncZjCDYwZzWcvL7J2hy7JxIzzxBCxbZl537QoTJmzijju6lZ6xFsg+kc2WK7cQcF4AfOjuaDzDiBFw6aUwatQJ4uMbMnkyvPWW6Wx//fUl91u0+FgY1X4Uo9qPItuazaqDq1i2exk/7v2R3xN+JyYyv0nTrN9m8ePeH+nTrA+9z+tNl8ZdyiwEC+dIAULUGO++a6rMfXzM0IBuqyqXJkxCCA8z94+5LNm5hHVH1nE0+WihbRuO5jdF6tCwA/vu2+ewP0NJNm0yN2+WLDGvw8PhX/8yzVRWrkx2SfzeTlvN7NvKt7pG8/AODRrA009vY/LkhjzyCGzdajpcv/QSTJli+kuU9nPq5+tH/5b96d+yP9OZzsnUk4VqKxbtWMRPe39i8Y7FAARaAunRtAe9ontxeevL6d+yf1X/iTWWFCBEjbBkifmxAnMH48or3RiMNGESQrhBcmYyf534i83HN/Pbkd+Y2n8qTcOaArDiwAr7RVT94Pr0a96PuOZxXNriUi5smD8UjrMFh5wc+Ppr8337009mXVCQGfd/8mRzYSgKsOU+yr0lhwYPhkGDYO5cePJJU5s1ciS0bg0PPWSaJoc4URHWoE7hE+/tq99mxYEVrD60mtWHVrPj1A5WHFjBigMr2H92v70AcSL1BO9seIduTbrRtXFXGoU0qoK/smaRAoTwemvWmOpOmw2eegpuu83NAUkTJiFENTibcZZXfn2FLce3sPn4Zvae3lto+1UxVzG83XAAbu1yK3Et4ujRtAex9WLxURX7jtq1y4zh//77po8DmILDHXeYgkNUVKX+pBrLXgPhIzUQJbFYzHxNo0ebgsTMmbBnj+kn8cgjpkBxyy3Qt6/zw7K3jmxN68jW3NLlFsCMKrbm0BpWH1rNxU0vtqdbf2Q9T8U/ZX/dJLQJnaI60b5Be9o3bM/IdiOp41/HlX+u15MChPBqGzfCkCGQkWG+eJ55xt0RIU2YhBCVprUmISWBXYm72JW4i52JO9mVuIuIoAg+uPYDAPx9/Zm2Ypp9lCR/X3/aNWhHx6iOdG3Ula6Nu9r316dZH/o061OBOGD7dlPb8NlnZvjNPDEx5uJu/HiIiCh5H0KaMJVHcLA5r267DRYtgtdfNyM3zZ1rlubNzVDA114LffqUr3N+veB6XNP2Gq5pe02h9c3Cm/FAzwfYeGwjvx/7naPJRzmafJTvdn8HwIh2I+xpn/rfUyRnJpvCSYQpoLSo26LW9a2QAoTwWqtWwdVXw7lzMHSome+h2iaLK43UQAghyqC15njqcQ6cOcCBswfofV5ve3Oj6aum86+V/yI5q3j/gcYhje3Pg/yCeGHAC0SHRdMxqiNt67W1j6ZUGUePwurVpmnSsmVw8GD+trAw0y79pptgwAD5qnNWXgECOV5O8/U1tQ4jR8Lff5vCwwcfmFEWX3vNLBERcNll+UvbthW7DugY1ZGXrzDDNtq0jd1Ju/nrxF9sPbGVhJSEQgMJzPljDofPHS6U30f50Cy8GfddfB/39zSzJCamJbL91Haiw6JpEtqkxhUwpAAhvNJPP5lCQ1qamdly3jwPGiJQ+kAIUWvZtI3EtESOpRzDarPSpXEXwPRPmPD1BBJSEjiWfIyDZw+Sac205/tsxGeMaj8KMB1Dk7OSiQiMoG39tsTWiyU2Mtb+vKDJvSdXKt6TJ2HzZtiyxdQurF4N+/YVTtOgAVxxBQwfbvqXORpmU5Rgxgwz7XK9i4ASaiD+9z/47TfTBkw4FBNjOuZPmwbr1sFXX8HixaZJ3RdfmAWgXj3o3h26dct/PO+88hUqfJSP+Z+rF8uwC4YV2qa15vUrX+fvpL/ZnbSbPaf3sCdpD4fOHWL/mf1kW7PtaVccWFFotvaoOlGcF34e0WHRRIdG868B/yIsIAyAXYm78PPxo2Gdhl7TVMpTLrmEcNrnn8OYMWaiuFtuMaMveVSLIamBEMKraa3JtGZyLvOcfTmbcZak9CQS0xO57vzr7J01X1n7Cp9v+5zE9EQSziaQsiLF3qSoR9MerJuwDjC1BZ9v/RyNtr9PZFAkzcOb0yy8GfWD69vX39rlVsZ1Gke9oHrlGg2pJOnpsHevWfbsMY+7dplCw7FjxdOHhsIll0C/fqbA0KWLfKVV2EUXwahR6H8tAFTxAsT//mfugi1Y4JbwvI2Pjzk3L7kE/v1v2L3bHMJffjGPx4/D99+bJU9EhKmZaNsWYmPNEhNjChYREeUrXCiluO6C64qtz7Jmsf/MfsIDwu3rAiwB9IzuyeFzhzmafJTjqcc5nnrcPurZzCtm2tPe/OXNrD28FoBgv2BCfUJp9nczGtZpyD/a/oNJ3SYBkJSexHd/f0dEUAR1A+sSEZj7GBRBoKV6S/ZSgBBew2o1naSff968vvtuU4XpcT9s0gdCiEKUUpHA+8DlwCngn1rrTxykU8C/gQm5q94DpmitddG0BWXbstl7ei9p2WmFlvTsdIaePxSLj/mp+3Dzh+xK3EVadhqpWakkZyXbCwj9W/Tn2f7PAvDXib/o+HbHEt+vXYN29gLEwbMH7T/8eSICI2gc2pjWEa3t6yw+FhaMXEBkUCSNQxpzXvh5Jc6vUDewbml/LpmZcOZM/nL2LCQmQkKCKRAUfUxMLHlfISHQsSN06mQee/aEDh3kK8xl+veHBQvQ100BpkPyWZp/+LGZqjsw0IxZumCBSSfKrU0bs0ycaPrrHDxo+kZu2JD/mJQEv/5qlqKCgyE6On9p0MAs9esXXurVM833/EtoheTv61+sdvCqmKu4KuYqAHJsOSSkJHD43GEOnzvMydSThZo0NQppRLPwZpxIPWG+v0jj+NHjALSsmz9F985TOxmzeIzDGAJ8A9gwaYN9VLUXVr5A/IF4QvxDzOJnHkMDQmkd0ZobO9wImFrTH/b8QJAliCC/IIIsQQT7BRPkF2SvIXFEChDCK5w5Y9rcfvut+WF76SUz06lH9HkoSpowCVHUm0AWEAV0Br5RSm3WWm8tkm4ScC3QCdDAj8A+4O3Sdr4lYQutX4kFFGiV++gDWnH4waOEB9TFZoP31y5kxf4Vhbbn5QnNbsOx881FSNqZCCzJLQj1DyfEP5QQv1BC/EOp6x9J3cAIko81YleGuVcwIOReOvYYSx1LXfZuO0DPzn3RNgs5OWao0yVLzGN2NuTkjOBQDuzNNuuyskztQMElLc3xunPn8gsLGRnlO/gWC7RoYYbEbNXKPLZubQoKLVvK11WV698fnvsX3ANq725a7J1rhrKyWs2PmhQeXEIp08G6eXMYlttySGtTkN61K3/ZudPUxB0+bP6v8tY7w9/fFLpDQ4svwcFm8tqAAFM2zHtuFgsBAdG5CzQIgCXHzPWMry/cWW8Rvg3Bx0eTZUtnzR8rOC+mKWezkmjk14CtW02602fqc02D+ziXfZpzWWY5m3mGs1lnyLRmknamDqd8zLFYt/tvfti5HtCgdKHHvi36MrT1jSgFKVmpDP5gqMN0N3e5ucRjIQUI4fHWrIFx48w/fN4M0wMGuDuqUkgTJiHslFJ1gOHAhVrrFGCVUmoJMBaYUiT5eGCm1vpwbt6ZwETKKEDEHIvlP9NmO9y29fnN9ueP8xCP8xBzaMl8mgHQh5M8yTZWU58muUNAR1GPb5hbyjseYT9HAPAHmgKrCWAq/XPzp/Mh6zlFIOPIHypyIWsIJdvB/hw7XkL+G3x74RvhR9268ODJLcScO22/maIUDp9zMHf5H/Q62gu/eqaz9Zart3D6p9N0WNqByEGRAOx7ch8HZxToOe0ER/lbTm1JXvgnF59k2w3byrXPllNb0uzRZoXy17+2Pu0/aw9A+v501rddX659Osof2DyQi3flH+c1jdeQneT851RS/oLHef8cs03pHBTalAIDA8tfGhTlohQ0bmyWSy8tvv3cOVOQOHQIjhyBU6fMcvJk/vNTp0wtXnKyKfQnJZmliiIGgoGSJrOKAV4tMffFLxV89d/cpbiVQB37kPehQKbDdHMBmONwmxQghMfKyDBNll56ydxF6NzZDOnWsmXZed1KmjAJUVAskKO1LniPbzPg4Oec9rnbCqZr72inSqlJmBoLYonFn1JbORVShzQiSEKhCeMc/miCySCKBBSaBmSVa38A9TjNxfyKhRzqk40/ijBSuYYlWMjBj2zq0AD/cgzD05QEfqE/QaQTxjlOMR0boSRY6+N/6hycgs3M4DQXUVK4DlfXrw+cy90+A81FcPkVwIbcdRPQ3FSuv99Rfj3lMeL4ODdBPzTPlmuXespjMKVwfr3gC1iQN/FdFJr55dung/y2v/eB6mlPY+NLNOGOd+BAifmLHGe4iLpsys+YkQHXFB5OtDaKc+N7hwHtcpeyaCCTAJIJdbikEUwmAWUuGQSSSQDZ+GHFFyu+5GCxP3e0lLZdo6poKf27SgoQwiOtWmXGgN62zdzMnzIFnn7aVAV6PGnCJERBIeRdReU7i7nt5Sjt2SLpQpRSqmg/CK31bGA2QPdu3XW/Nf2cDqifL7xnMf+j2hqJzmlJPx941M8nb9/orPOc3h9APx/ouHoFcXFxuflNuEMD8r8LbJm2krKXyCdgaLH8yv+MvWqhQ5atxMJDSRzlV37rIXeSsxY5NlpYy7lPR/l9+xG/agJxcXHUt2r65ZQzUN9+YPkIID+/Tz/wMxN+BWpNv6xy7rOk/AE32JP0qsDn5Ch/oeO8eCnceA0+mSn5eQIDzaggQ4aU//1qkPj4eOLi4twdRpkUEJi7VPVE6550TEpqKi4FCOFR9u0zI9ktXGhex8aacZ979iw9n0eRJkxCFJSCudFXUBhQfJKD4mnDgJSyOlGjwCegYv9zyrf4yDhKKVRAxTtYlZS/ojGWlt/Hv5L7dJDfx+JTqasDR/kdHefy8PrPKTQQbJkQGIjOzEQFBJibTTImrvBSUoAQHuHYMTNt/RtvmDaGQUGmIDF5sumY5FWkCZMQBe0CLEqpGK3137nrOgFFO1CTu64TsL6MdEJ4j//9z4y29O23kJHB/sWLaXnddTIKk/BqUoAQbrV3r5lnZ+5cMzQhmDkeXnjBDKnmlaQJkxB2WutUpdQiYKpSagJmFKahQC8HyT8EHlRKfYtpmPMQ8Ea1BSuEqxWc5yG3kHAgJISWec1TFiwotl0IbyBXOaLa5eSYWSSvucZM5vLOO6bWYdgwM2bzvHleXHgAacIkRHF3AkHACeBT4A6t9ValVF+lVIFG4bwDfA38CfwFfJO7Tgjv9NtvpRcOcueJ4LffqjcuISpJaiBEtdDafD8uXAgffZQ/+6mfH4wdC48+Chdc4N4YXUaaMAlRiNY6CTO/Q9H1KzEdp/Nea2By7iKE95vsxKncv7/UPgivIwUIUWXS0mDFCjOl/KJFZobIPLGxZubIceOgYUP3xVglpAmTEEIIIWowKUAIlzl7Ftatg7VrYflyWL3aNE3K07SpaaY0ahT07u2hs0i7gjRhEkIIIUQNJgUIUW42Gxw4AH/+mb/8+utFHDxomirlUQq6d4dBg+Af/4AePWrJdbU0YRJCCCFEDeaSAoRS6m7gZqAD8KnW+uYy0j8APIqZr3shpkOd43m0RbXLyYETJyAhAY4eNXMz7N2b/7h3L6SmFs1VBz8/6NoVLrkEevWCyy6DevXc8Re4mdRACCGEEKIGc1UNxFHgOeAKzEgbJVJKXQFMAS7LzbcYeDZ3nXABmw0yMiA93TyeO2eaFxVczpwp/Pz4cVNgSEiAU6cK1yQ4EhUFHTrkL1lZGxk/vpvMiQPSB0IIIYQQNZpLChBa60UASqnuQFkDcI4H3tdab83NMw34GCcKEKdPm1nf8y5utc5fCr4ubVt50pa0bdeupmzZUrH95OSY68ucnNKfl7YtMzO/cFDwMe95wX4HFaGUKSBERUHjxtCiBbRqBS1b5j9GRhbOEx+fLIWHPNKESQghhBA1mDv6QLQHvirwejMQpZSqp7VOLC3j3r2mA677xbg7gDIFqgwCfbIIVJmE+qRR1zeZcN9kwn1TqOuT+5j32vccUZYkoiyJNLKcor7lDBZlNTs6lrusLf39uqekQEhI6YlqizNnTDsuIYQQQogayB0FiBDgbIHXec9DgWIFCKXUJGASQJD/BVxy4T5QGmXfDqrAa0fb8vdV2rai20velmPNwc/iW+r7540wVHgbWHxs+Pra8PXR+PhofH1sWHw1Pj5mnW/eo2/+ax8fjcU3/7m/xUqAvxV/vxwC/Ky5Sw7+frnrLVYnRzgKyF3qAS3JBg7lLuWVlp5OcFCprddqlcwGDUhJSSE+Pt7doXgUOSbFyTERQgjhbcosQCil4oFLS9i8Wmvdp5zvmQKEFXid9zzZUWKt9WxgNkD37t31zxtalvPtXC8+Pp64vGnoBWCOyUVyTAqR86Q4OSbFyTERQgjhbcosQGit41z8nluBTsCC3NedgONlNV8SQgghhBBCuJ9LhopRSlmUUoGAL+CrlApUSpVUOPkQ+D+lVDulVF3gCWCuK+IQQgghhBBCVC1XjTX5BJCOGUlpTO7zJwCUUs2UUilKqWYAWutlwAzgf8BB4ADwtIviEEIIIYQQQlQhVw3j+gzwTAnbDmI6Thdc9zLwsiveWwghhBBCCFF9ZLYrIYQQQgghhNOkACGEEEIIIYRwmhQghBBCCCGEEE6TAoQQQgghhBDCaVKAEEIIIYQQQjhNChBCCCGEEEIIp0kBQgghhBBCCOE0KUAIIYQQQgghnCYFCCGEEEIIIYTTpAAhhBBCCCGEcJoUIIQQQlQJpVSkUmqxUipVKXVAKTW6lLSPKKX+UkolK6X2KaUeqc5YhRBCOM/i7gCEEELUWG8CWUAU0Bn4Rim1WWu91UFaBYwDtgCtgR+UUoe01vOrLVohhBBOkRoIIYQQLqeUqgMMB57UWqdorVcBS4CxjtJrrWdorTdprXO01juBr4De1RexEEIIZ3lVDcTGjRtPKaUOuDsOoD5wyt1BeBg5JsXJMSlOjklxnnJMmrt4f7FAjtZ6V4F1m4FLy8qolFJAX+CdUtJMAiblvkxRSu2sRKyu4imfpSeRY1KcHJPC5HgU50nHxOFvg1cVILTWDdwdA4BSaoPWuru74/AkckyKk2NSnByT4mrwMQkBzhVZdxYIdSLvM5ga8jklJdBazwZmVzS4qlCDP8sKk2NSnByTwuR4FOcNx0SaMAkhhCg3pVS8UkqXsKwCUoCwItnCgOQy9ns3pi/E1VrrzKqJXgghRGV4VQ2EEEIIz6C1jitte24fCItSKkZr/Xfu6k6Aow7UeXluBaYA/bTWh10VqxBCCNeSGoiK8ahqcw8hx6Q4OSbFyTEprkYeE611KrAImKqUqqOU6g0MBeY5Sq+Uugl4Hhiktd5bfZG6VI38LCtJjklxckwKk+NRnMcfE6W1dncMQgghaiClVCTwX2AQkAhM0Vp/krutL/Cd1jok9/U+IBoo2GzpI6317dUbtRBCiLJIAUIIIYQQQgjhNGnCJIQQQgghhHCaFCCEEEIIIYQQTpMChAsopWKUUhlKqY/cHYs7KaUClFLvK6UOKKWSlVJ/KKUGuzuu6qaUilRKLVZKpeYei9Hujsmd5LwomXx31Gzy+cr/f0Hy25BPzovSecN3hxQgXONN4Dd3B+EBLMAhzEyz4cATwAKlVAs3xuQObwJZQBRwEzBLKdXevSG5lZwXJZPvjppNPl/5/y9IfhvyyXlROo//7pACRCUppW4AzgA/uzsWd9Nap2qtn9Fa79da27TWS4F9QDd3x1Zdcse+Hw48qbVO0VqvApYAY90bmfvIeeGYfHfUbPL5GvL/b8hvQ2FyXpTMW747pABRCUqpMGAq8KC7Y/FESqkoIJZSJo6qgWKBHK31rgLrNgO19S5TMbX0vChEvjtqNvl8S1aL///lt6EUtfi8KMSbvjukAFE504D3ZcbU4pRSfsDHwAda6xsMoa4AAAHnSURBVB3ujqcahQDniqw7C4S6IRaPU4vPi6Lku6Nmk8/XgVr+/y+/DSWo5edFUV7z3SEFiBIopeKVUrqEZZVSqjMwEHjF3bFWl7KOSYF0PpjZZrOAu90WsHukAGFF1oUByW6IxaPU8vPCrjZ+d9Qk8ttQmPwuOE1+GxyQ8yKft313WNwdgKfSWseVtl0pdT/QAjiolAJzd8FXKdVOa921ygN0g7KOCYAyB+N9TCexq7TW2VUdl4fZBViUUjFa679z13VCqmVr+3lRUBy17LujJpHfhsLkd8Fp8ttQhJwXxcThRd8dMhN1BSmlgil8N+FhzAd/h9b6pFuC8gBKqbeBzsBArXWKu+NxB6XUfEADEzDH4lugl9a6Nv9Q1PrzIo98d9Rs8vkWJ///hvw2FCbnRWHe9t0hNRAVpLVOA9LyXiulUoAMT/yQq4tSqjlwG5AJJOSWoAFu01p/7LbAqt+dwH+BE0Ai5p+/Vv5AgJwXRcl3R80mn29h8v9fiPw25JLzojhv++6QGgghhBBCCCGE06QTtRBCCCGEEMJpUoAQQgghhBBCOE0KEEIIIYQQQginSQFCCCGEEEII4TQpQAghhBBCCCGcJgUIIYQQQgghhNOkACGEEEIIIYRwmhQghBBCCCGEEE77f7yfZKT2zUZsAAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "1557TAhzCxBl" + }, + "source": [ + "def heaviside(z):\n", + " return (z >= 0).astype(z.dtype)\n", + "\n", + "def mlp_xor(x1, x2, activation=heaviside):\n", + " return activation(-activation(x1 + x2 - 1.5) + activation(x1 + x2 - 0.5) - 0.5)" + ], + "execution_count": 7, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "scrolled": true, + "id": "R7hyfhoXCxBm", + "outputId": "91b838eb-c0a0-4f35-9175-76a12285a2c0", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 285 + } + }, + "source": [ + "x1s = np.linspace(-0.2, 1.2, 100)\n", + "x2s = np.linspace(-0.2, 1.2, 100)\n", + "x1, x2 = np.meshgrid(x1s, x2s)\n", + "\n", + "z1 = mlp_xor(x1, x2, activation=heaviside)\n", + "z2 = mlp_xor(x1, x2, activation=sigmoid)\n", + "\n", + "plt.figure(figsize=(10,4))\n", + "\n", + "plt.subplot(121)\n", + "plt.contourf(x1, x2, z1)\n", + "plt.plot([0, 1], [0, 1], \"gs\", markersize=20)\n", + "plt.plot([0, 1], [1, 0], \"y^\", markersize=20)\n", + "plt.title(\"Activation function: heaviside\", fontsize=14)\n", + "plt.grid(True)\n", + "\n", + "plt.subplot(122)\n", + "plt.contourf(x1, x2, z2)\n", + "plt.plot([0, 1], [0, 1], \"gs\", markersize=20)\n", + "plt.plot([0, 1], [1, 0], \"y^\", markersize=20)\n", + "plt.title(\"Activation function: sigmoid\", fontsize=14)\n", + "plt.grid(True)" + ], + "execution_count": 8, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAmkAAAEMCAYAAACfoCGmAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3de5hcZZnv/e+ddNI5kRBITCZAEgiHKG7DITAog6JuRtRhG5B5xwFRBI0nRlAxF9uRERlHNBsdR2SjzBYYI7jnUgHlHQ+DW9mCjCOCJ9CAAgmHvAEkTZLOoTvdud8/1iqsVKq7qlY961i/z3XVlVTVqrXuqq5++ldPrXstc3dEREREpFgm5F2AiIiIiOxNIU1ERESkgBTSRERERApIIU1ERESkgBTSRERERApIIU1ERESkgBTSMmBmi83MzWx5Btu6w8w+n8F25pvZv5vZNjPL/TguZrbOzC7OYbvnmtlg1tttppPXwMwuM7P7WyzzeTO7I0hxUjka19KX17jWSpHqaqcWMxs0s3MzKimovrwLKCIzOwa4B/iJu5/Y4WPvAO539wvqbn4c+BPgDwFrPBf4vLvPaLjrDGBXqO2M42JgAXAUsDWD7QFRuADOdPcXN9x1HLAtqzoKqpPX4ErgqhRrkYLRuNYWjWvtKVJdRaolOM2kNfd24H8CLzazF3a7MncfdfeN7j7SfWktt7XJ3bMYXA4F7nX337n7xgy2Ny53f8bdt+ddR546eQ3cfdDdn027JikUjWutaVxrQ5HqKlItqXB3XeouwFTgOeC/AF8CrmyyzAnAD4jS++b4/wuAGwBvuCyOLw4sJwrGjwN/07DOw+NljomvfwD4VbyNJ4H/Bewb33dyk+1cFt93B9En0dp6ZwP/AgwAO4DvA0fW3X8uMAi8Grg/3t4PgYPHeY3WNWz7hvh2J/o02LjsxXXXHVgJfC3e1iPAmxseswC4EXgW2A78AnhlXGvj8z53jO0sBG4h+jS8FbgZOLDu/svi5/sm4OF4mVuBOR2+X9p6/YDTgHuBncCjwD8Ak+vufzPRLMdW4On49Tkgvq/d90zja/BO4KF4m38Avgf01T//umUnEs2uDcSXzwLXAHfULWPAqvj12gH8uvFnp0sxL2hc07jW2ftlFrCGaCzaGT+fi8Z5/ocD/zde9kHgdfHrX3setffKm+LldgA/B14CvBi4O37d7mr8GRGNY78HhuN/39HiZ3Fo/H6p1fIX9bWU7ZJ7AUW7AOcAv4z/f3L8Jp1Ud/+y+A12LdGU+AvjN9HC+I19N3AdMD++TKx7gy6P17Ga6CuH+u1+DPhN3fWLgFfFj30F0cC2Jr5vMnBh/KaubWdGfN8d7DmYfRNYC7ycaID+FtFgOjW+/1yirxG+Dxwf/9L8HPjeOK/RXOB24F/jbc+Kb293MHuCKJQcClwR//ItjO+fDvwO+DFwErCE6KuOVxL9obkyfj615z21cTtEfzB+Hv8slseXnwA/Ayxe5rL4F/eW+Dm/FFgPfLGu1pPjek8e57Vo+foBrwG2AG+Ln88riQaPK+uWOY9oYDskXs8PgR/V3d/Oe6b+NVgOjABnA4uI3rfvZ+yQtoroD/P/Aywl+ip0C3uGtH+I6z4VOBg4i+g9+Pq8f291Gf+CxjWNa3+s9WRaj2tXEYXI44nGj5OBv2z2/OO6HgD+D9F756XAf8av/7nxMovjbdYC3FKiMe6B+N9XAkfGz+W2uu2cHq/nAqIg+Dfx9dPGqeXXwI+Ao4ET43U+X0vZLrkXULQL0WBQ+4Fb/AY4s+7+G4H/aPH4zzfcVnuD1gazl8TXl9Qt8zvgw+Os91RgCJgQXz8XGBxv+8Bh8XZeXnf/LKI/xm+vW48DR9Qtc3a8LRunnv+X+JNm3W3tDmZX1F3vI/pU+eb4+juIPv01/eRHQ7hoth3gFGAUWFx3/yHAbuC/1q1nJ/FAHN/2t8Dv664fTzRwHj/O69Dy9YsHjEsbHreCaDBt+hoTDWJO/Cm5nfdMw2twRvxz3qed1xHYAPxt3fUJRLNwd8TXpxP9ET+pYT2fBb6d1e+nLskuaFzb6/dyjHo0rkXLfAu4bpz76+t6DdEHwgPq7n8Ze84I1t4r76xb5i/i286ou22Pnz9RqL2uYds3AHeNUcufx6/Rwrr7/6y+lrJdtE9aHTM7lOgHehOARz/hG4Hz6xY7muhrgMTc/VdEaf/seLt/SvTJ6sa6Wl5lZreb2RNmVpvWnkz0KatdLyT6Bf6Pum1vjrf9orrlhtz9wbrrG+Jtze7keXXgV3X1jADPAC+Ibzoa+JW7d7Mz8guBDe6+rm47jxA9r/rnvT5+PWo21NWBu//U3Ze6+09bbK/V63cs8Ldxh9Fg3A16E1HwmQ/RTt1m9k0zWx//vH8WP3ZhXEvL90yD24k+QT9qZjea2VvNbJ9mC5rZLKIdwOvfJ7uJPg3XvAiYAny34Xm8O65DCkrj2vM0rtH2uHYN8Fdm9kszu9LMXjHOskvjup6su+0eop9Ro1/V/f+p+N9fN9w23cymxddfSBTU6t3Fns+33guBJ939sbrb/nOMWkpBIW1Pbyeaxn/MzEbMbAS4BPhzMzso8La+QjyYxf/e5e7rAcxsEfBvwG+BvyT6I39evOzkQNv3uv837vhbu6/T94cTfUqvN6nJco1dWp5gW0nVP+9QdbR6/SYQfe1zVN3lJUQzAs+Y2XSi/cW2E30tdRzRDAPs+fMe8z3TyKOdrI8h+vryMeC/A2vNbEGC51f/XE5reB5HEn16leLSuLbnfRrXWq3M/TtEX3NeCcwB/s3Mru+qwr1r83Fua1Wvt7i/MhTSYmbWB7yV6I9Z/R+hZUTp/23xoj8n2qdiLMNEA2IrNwGHmtkJwF8RDW41y4kGrfe7+3+4+0NEO512up3fEv2MX1q7wcxmEu3D8Zs2auzUM0QzMrVtzau/3qafAy8xszlj3N/u815gZovrajmE6DVM43m3ch+w1N1/3+QyQvRJdA7R10I/cve11H3yrTPee2Yv7j7i7j9w9/9OFAqnE33F0LjcZuD/I9pxHAAzM6KvRWp+Q/RV0aImz6FpUJT8aVwLoifHNXf/g7uvcfdziWZd32pm/U0WXRvXVf+zrDWTdOu3RPuV1fszxn6+vwUOaPjwcXygWnJR2sJT8HqiP5T/7O7311+A/w28Lf7D9T+Ao83sWjNbZmZHmNnbzWxhvJ51wPHxgR7nmFnT19jdnyDqcvkC0f4UX6u7+3dEP5uLzOxgM/troh1u660DppjZKfF2pjXcj7v/jmgH2y+a2Ulm9l+IBs0txF99BPYD4L1mttzMjibad2Bnh+u4iWin5m/GNR9iZv/NzF4Z378OWBR/PThnjEHj+0R/gG6Ma1lO9JXLfXTwlY6ZHW9ma83s+NZLj+ty4Cwzu9zMXmxmS83sTDNbHd//GFEAuiB+vq8H/r5xJS3eM421/4WZXWhmR8czGGcB+xANYs38E7AqrusIon3Nnv9DFM/MXQlcaWbnmdmhZnaUmb3LzFZ29nJIhjSuda/nxrV4rFphZodZdLiWM4BH3H2oyeK3EzUE/Ev83jkB+AzRTGa3M17/AzjHzN4b1/I3RDO0q8dY/vtEofHL8fj0UuAf2XtWtTQU0v7ofOCH3vzYUV8j2vHxFHf/BfBfiWY/fkL0ffeb+OOU7ZVEn4p+Q/QJbGHjyup8hegT7bfdfaB2Y7xvx4VE7eq/Ifq6Yo8jKrv73UQD4Vfj7awaYxtvA35KtCPoT4FpwKnuvmOcupL6IFGr9h3A14na65/uZAXuvo2o6+sJ4DaidvKP8cdf9m8A3ybqJHoG+Osm63DgDfH9P4wvG4EV8X3tmgYcEf+bmLt/j+iP5SuJfgY/Jfq66bH4/meIZjtWEP28P0r0s2+m6Xumiefi9dUGrYuJdqq+c4zlPw1cT/Qz+0+isaFxf7dLiXZMvpioK+t24I1EhxSRYtK41r1eHNeGiLq5f0m0T9g+RLs6NHtuu4m6MPuJfhb/Ej/W6TzMNq77VqKOzvcTvWcuBN7j7re1qGUC0Xv4y8DH4+dTStbZz1ZERERkbGa2jOgQHsvd/d686ykzhTQRERFJzMxOJzq+3e+IZmc/Q9RscXSHs3zSINjXnWZ2gZn9zMyGzOyGcZZ7q5nda2ZbLGrDXh3v3CoikhuNYSKJ7QN8nugryRuJ9n19jQJa90Luk7aB6Lvf61osN41oZ9E5wJ8SnbZj3DPYi4hkQGOYSALu/mV3P9zdp7r7Anc/y92fav1IaSXYpz93vxkg7jg5cJzlrqm7+qSZ3Ui0Q7WISG40holI0RRhiv7lRJ1iTcXt/SsBpkzpP/bAg5odPiof7n1Ex4UsjlA1jfoERkcmYqPdHah5Yt8ERkeKc7Bn1TO+otUDsP7xdX9w97l51zGOMcewxvHroAKNX5DdGDbS5pc2E3wiu2005WpaG/Wo3j43Riyfb+y8ya9hn01gpNkdQTbYeLze9kyaYOza3f5rlPbL2TfBGMlgDLM2v8ntdvzKNaSZ2XlEB717+1jLuPu1RCf95bDDF/rXv1+cr7g3rH0/C5aOdbiWfISraZQ1A3/K7dedwIJvJD/CwhkXHcfNq+8JUE8Yqmd8RasHYD1XFfZgua3GsPrx6/DDF/pt/6dYH+rWrb2YxUs/mcm2vr7lmJbLLHl8BQ8fdGsG1bR2+8alnLX9KG6a9ovcalj3xJ5/298/YxGfHkz316H/sc5O/vC+Qw/gc79/svWCDfZZn87f8vNPOoAv3fkksx5O/6gbk9c+0XKZ9fzPrn5guR0nzcxWAFcAr+3yfGaSknNm380p5/2EB1ctyrsUkcLRGNaZM2fel3cJHTll/lpmTurqMF9dW3zgM5lvc2jhcCbb2boo2cxduzYv6WfzkmbHBA5neOmYe0UEk0tIM7NTgX8GTnP3X7daXvJzzuy7uWXFZ3lw1SJ2vPiAvMsRKQSNYcmULahBFNbytPjAZzIPa1UJakDpg1rIQ3D0mdkUovOPTTSzKc3a0s3sVUQtum9095+G2r6k65YVn2XTe7cpqEllaQzLhoJaMgpqyZU5qIWcSfsIsIPodDdvjv//ETNbaGaDdeeAu5TonG7fjm8fNLPvBKxDUrJm2fVseu82Nrzx4LxLEUmDxrCMKKgl0z85230aFdTal1ZQCxbS3P0yd7eGy2Xu/pi7z3D32nkKX+nuffFttctrQ9Uh6Vqz7HpOOe8nCmpSORrDsnXmzPtKF9aKENQ0o5ZcFkEtdFjTCdalY7WGAgU1EemWglrn8ghqWYS1rYssk4aCtIUMagppkog6P0UklDIGtbzDmjo/kytT56dCmiSmzk8RCaVsQQ3yn1VT52d3yhDUFNKka+r8FJEQZk/cnncJHcs7qIH2U+tGFl9/dkMhTYJQ56eIhKAZtWQU1JIrclBTSJNg1PkpIiEoqCWjoJZcUYOaQpoEpc5PEQlBh+hIJuugtnvybnV+pkghTYJT56eIhFLGoJZ3WFPnZ3JZdH52QiFNUlHr/ByaP1kNBSLSlbIFNch/Vk2dn90pSlBTSJNULdn3aXV+ikjXFNSSUVBLrghBTSFNUqfOTxEJQUEtGQW15PIOagppkgl1fopICApqySioJZdnUFNIk8yo81NEQlDnZzI652dyeQU1hTTJlDo/RSSUMga1vMOaOj+Ty6Pzsy/TrVXI7pFRJvf9E7tHRpnQNzHvckrlnNl3c86Kuzmdi1j47RGm3v9k3iVV3g/O/hLD01qfcue7A8A7Wq9v8vZpvOrG87svTHIzOjLKpImfY3RklIklHsPOnHkfX99yTN5ldOSU+Wu5fePS3LZfC2rrnpib2TaHFg7T/9jkxI9/ePdHGWVry+Xesw44qPX6+kb3YdmGyxLVsnlJP7MeHkr02E5pJi2hHQNbmGCPsGNgS96llJbO+ZmddgJanuuT7A0ODGL2CIMDg3mX0rWyzahB7379mVQ7Aa0TIxO7W19WM2oKaQnsHhlleHAbZs7w4DZ2j4zmXVJpqfNTJHujI6Ns37odM2f71u2MVmAMU1BLpkxBrWiyCGoKaQnsGNgCHl9xNJvWJXV+imRrcGBwjzGsCrNpoKCWlIJacmkHNYW0DtVm0eppNq176vwUyUZtFq1eVWbTQJ2fSVW18zMLaQY1hbQO7TGLVqPZtCDU+SmSvj1m0WoqNJtWU8aglndYq3LnZ9rS6vxUSOtAs1m0Gs2mhVE75+eDqxapoUAksGazaDVVmk2rKVtQg/xn1ap8zs8shA5qQUOamV1gZj8zsyEzu6HFsu83s41mtsXMrjOz/E+S1ULTWbQazaYFpc5PyVrVxy8YYxatpoKzaaCglpSCWnIhg1rombQNwMeB68ZbyMxeA1wCvBpYBBwCfCxwLUGNN4tWo9m0sNT5KRmr7PgF48+i1VRxNg0U1JJSUEsuVFALGtLc/WZ3vxV4tsWibwW+5O4PuPsA8PfAuSFrCW3cWbQazaYFp85PyUqVxy9oMYtWU9HZNFBQS0pBLbkQQS2vMw4cCXyz7vovgXlmtr+77zFAmtlKYCXA3Llz2LD277Kr8nmbmTLpcqyNM04MbRlm87PvAmamXlUzu3bOY8PaVblsu5kQ9bwaOOrU6WxZ/mdMGujuKM+z50/njFXHdbWOkLKq57sD4deZ1ev43Qsz2UwnEo9f69Zeml2Ve9jM5L6/b2sM27Z5FwPPvoc8xrChnfNZt/aS1Na/PP53YHRaW8v3D+/LksdXpFZPO5YAW3ZNAWC/3dM4a/tR2RexHwwNN48L8yb288EZgZu9XhT9M2H4j/NIFzwUdhMAb3v1gfF2Wn16Se7eL3X3+LxC2gxgc9312v/3oeFTrLtfC1wLcNjhC33B0tWZFFhv2zMDDG/d1dayZruYtf8VTJ87O+WqmtuwdhV5vEZjCVXPAmDNwMu4+f8ezxGr1ydezxmrjuPm1fd0XU8omdXTxqmeOlWk1zFjicavww9f6IuXfjKTAhttfmYz27e0P4bN3v8KZs2dlXJVe1u39hKyeI0WQ1unklry+AoePujW1Otp2yNv4qZpv8hn29Oan0bqgzMW8enB5GNyK92cSqqVz/3+j6ck3Gd9ekGtG3l1dw6y58e02v/DnvchgHb2RWukfdPSoc5PKYjSjF/Q3r5ojaq6b1q9Mn79OXPSzly3X+XOz7RPzp5UXiHtAWBZ3fVlwFONXxUUQVv7ojXSvmmpUuen5Kw04xe0uS9aowrvm1avjEFN+6mlp4hBLfQhOPrMbAowEZhoZlPMrNlXql8GzjezF5nZvsBHgBtC1hJCklm0Gs2mpUudnxJa1cYvSDaLVtMLs2mgoJZUHge+zULRglrombSPADuI2tPfHP//I2a20MwGzWwhgLt/F1gN/BB4DFgPfDRwLV1LNItWo9m01KnzUwKr1PgFCWfRanpkNg0U1JJSUEtf0MYBd78MuGyMu2c0LPsZ4DMhtx9SN7NoNcOD25g6eyYT+iYGqkoanTP7bjgPbucEFnzj0bzLkRKr0vgF3c2i1Wzfup0Zs2cwsQfGsFpQa6ehoChOmb+W2zcuzbWG/skjuW4/LbWglndDgU4LNYauZtFqNJuWCZ3zU2RvXc2i1fTQbFpN2WbVevWcn1nJe1ZNIa2JELNoNdo3LRvq/BT5oxCzaDW9sm9avbIFNcj/6888Oj+zkmdQU0hrIsgsWo1m0zKlzk+RQLNoNT04mwYKakkpqIWlkNbE6FDYdt/Q65PxqfNzb5O3t3eE9bzWJ2EN7ww75oReX1nMnhhmNjJLVQ1qEybMaL1QByayT8ePySOo5XXGgUKbeeC8tpYr2tH95Y/WLLueNQtfpoaC2KtuPL+t5Yp2RgZJZu5Bex8ZvpmsjvBfZmfOvK9UzQRQjIaCxQc+0/QMBUkdtPAjLZfpf2wy7zv0gD3OJBDa1kWWaTOBZtKksmoNBZpRE5FunDnzvtJ9/VnVGbXxDC0cZvfk3alvZ+siy2xWTSFNKk2dnyISShmDWt5hLY991Kp0hgKFNKm8+s5Pnzop73JEpMTKFtQg/1k1nfMzOYU06Rm3rPgsIy/Yrc5PEemKgloyCmqdU0iTnnLw1GfV+SkiXVNQS0ZBrTMKadJzdM5PEQlBQS0ZBbX2KaRJT1Lnp4iEoM7PZPIIalmEtdCdnwpp0rPU+SkioZQxqOUd1tT52ZpCmvQ0nfNTREIpW1CD/GfV1Pk5PoU0EXTOTxEJQ0EtmaoGtW4ppInEdM5PSdOIhtueoaCWjILa3jRqiNRR56ekqWzngJTkFNSSUVDbk0KaSAN1fkqaFNR6hzo/k6lq52cSCmkiTajzU9KkoNZbyhjU8g5rVe787IRCmsgY1PkpaVJQ6y1lC2qQ/6xalTs/26WQJtKCOj8lLQpqvUVBLZleDmpBQ5qZ7Wdmt5jZNjNbb2ZnjbFcv5l9wcyeMrNNZnabmekvoBSWOj+rL6/x6+tbjlFY6yEKasn0alALPZN2NTAMzAPOBq4xsyObLHch8FLgJcACYAC4KnAtIkGp87Pych2/FNR6h4JaMr0Y1IKFNDObDrwRuNTdB939LuBbwDlNFj8Y+J67P+XuO4F/BZoNhiKFos7PairK+KWg1jvU+ZlMr3V+mruHWZHZ0cCP3X1a3W0XA69w99Mall0O/BPwl8BzwP8Cnnb3i5qsdyWwEmDu3DnH/stX/i5IvSHs2jmPSVOeyruMPRStpqrW8+zodJ7bOp3+jd398s6eP52Bjdu6rieUotUDsPLCt9zr7svT3EYW49ecuXOOverLV7RVz+yJ2xM+k84M7ZxP/5SNmWyrHb1az8DotNYLAf3D+zI0+bmUq2nPll1TANhv9zQ2Tcjm/VpvaLiv6e3zJvbz1OhQKtucMNz5vNYFZ/1VV+NX82eZzAxgS8Ntm4F9miz7O+Bx4ElgFPg1cEGzlbr7tcC1AIcdvtAXLF0dqt6ubVi7iiLVA8Wrqar1LIj/Pf3Wi1j47RGm3v9kovWcseo4bl59T9f1hFK0ejKU+vh1yOGL/eGDbm27oCxmWdatvYTFSz+Z+nba1av1LKa9WdQlj6+gk/dQ2m7fuJSzth/FTdN+kf3G41y77om5e9z8wRmL+PTg+tQ22//Y5NTW3UzIfdIGgZkNt80EtjZZ9mqgH9gfmA7cDHwnYC0imVDnZ2UUbvzSV5+9pWxffULvfv2ZpZAh7SGgz8wOq7ttGfBAk2WPAm5w903uPkS00+3xZjYnYD0imVDnZyUUcvxS52dvKWNQmzlpZ94lVDqoBQtp7r6N6BPl5WY23cxOBN4ArGmy+D3AW8xslplNAt4DbHD3P4SqRyRL6vwst6KPXwpqvaOMQU0zaukJfQiO9wBTgaeBrwLvdvcHzOwkMxusW+5iYCfRvh3PAK8DTg9ci0im1PlZeoUevxTUeoc6P5OpYudnyMYB3H0TsKLJ7XcS7Zhbu/4s0XGIRCrlnNl3w3lw85LjOWJ1ejuvSnhlGL++vuWY0v3xluTOnHlfqcJ5LajdvnFpbjX0Tx7JfJtDC4dTayjQaaFEAtM5PyVNZfqjLd0rYyjPe1atSuf8VEgTSYk6PyUtCmq9RUEtmSoENYU0kRSp81PSos7P3qKglkzZg5pCmkjK1PkpaVJQ6x1ZnYkiJAW17iikiWRAnZ+SJgW13qHOz2TK2vmpkCaSkVpQe3DVorxLkQpSUOstZQxqeYe1rINaCAppIhlS56ekSUGtt5QtqEH+s2p5dH52QyFNJAe1zk+fOinvUqRiFNR6i4JaMmUJagppIjlZs+x6Rl6wW/upSXDq/OwtCmrJlCGoKaSJ5Ojgqc+qoUBSo6DWOxTUkil6UCtVSBsa1VdDUj3q/JQ0Kaj1DnV+JlPkoFaqkDZh125Ov/Ui1gy8LO9SRIJS56ekSUGtt5QxqOUd1ooa1EoV0gCOWL2e2687QUFNKkedn5ImBbXeUragBvnPqhWx87N0IQ1gwTce5fbrTuCcX74t71JEgtM5PyUtCmq9RUEtmSIFtVKGNIiC2n5XT1dQk0rSOT8lLer87C0KaskUJaiVNqQBTL3/Sfa7ejqn33pR3qWIBKdzfkqaFNR6h4JaMkUIaqUOaRAFtSNWr1dQk0pS56ekaWB0Wt4lSEbU+ZlM3kGt9CGtphbU1FAgVaPOT0mTZtR6SxmDWt5hLc+gVpmQBur8lOpS56ekSUGtt5QtqEH+s2p5dX5WKqSBOj+l2tT5KWlRUOstCmrJZB3UKhfSQJ2fUm3q/JS0qPOztyioJZNlUAsa0sxsPzO7xcy2mdl6MztrnGWPMbMfmdmgmT1lZheGrEWdn1Jl6vwMr0jjV94U1HqHgloyWQW10DNpVwPDwDzgbOAaMzuycSEzmwN8F/gisD9wKPDvgWtR56dUmjo/gyvU+JU3BbXeoc7PZLIIasFCmplNB94IXOrug+5+F/At4Jwmi38A+J673+juQ+6+1d1/G6qWRur8lKpS52cYWYxfo16+vUsU1HpLGYNa3mEt7aAWctQ4HBhx94fqbvslsNcnUeAEYJOZ3W1mT5vZbWa2MGAte1Hnp1SVOj+DyGT8un3j0gClZktBrbeULahB/rNqaXZ+mruHWZHZScDX3H1+3W3vAM5295Mbln0IeAFwCvBrYDVwrLuf2GS9K4GVAHPmzDn2E5d+pqs6d83uh5kjHDz12a7WA7Br5zwmTXmq6/WEVLSaVM/4Qtfz6I796Xt6ArZjV6LHz54/nYGN24LVE8LKC99yr7svT3MbmYxfc+cc+w9f+sfn75s5aWf4J9Kh/uF9GZr8XFvLzp64PeVqYGjnfPqnbEx9O+3q5XraPdBxJ++htG3ZNYX9dk9j04T036tjGRru2+P6+878667Gr77Wi7RtEJjZcNtMYGuTZXcAt7j7PQBm9jHgD2Y2y9031y/o7tcC1wIsXniw37z6nq4L3fHiA9j03m2sWXZ9V+vZsHYVC5au7rqekIpWk+oZX+h6FgDn/PJt2Pdns+Abj3b8+DNWHUeI37ESSn38WnTYIX7TtF/ssaK8ZwCWPL6Chw+6taPHpDnTsm7tJSxe+snU1t+pXq5nMe3NoiZ5D6XqkTfR+HuWqWmw7om5wVYX8uvOh4A+M1SRehYAABvCSURBVDus7rZlwANNlv0VUD+FF2Y6r03q/JQqU+dnIrmMX/r6U4qsjF99FmGGOuRXn8FCmrtvA24GLjez6WZ2IvAGYE2Txa8HTjezo8xsEnApcFfjp9A0qfNTqkydn53Jc/xSUJMiU+dnMqGCWuh2o/cAU4Gnga8C73b3B8zsJDMbrC3k7j8APgz8W7zsocCYxyRKkzo/parU+dmx3MYvBTUpujIGtbzDWoigFjSkufsmd1/h7tPdfaG73xTffqe7z2hY9hp3P8DdZ7v7ae7+eMhaOqHOT6kqdX62L+/xS0FNiq5sQQ2KMavWjfIduCclOuenVJnO+VkOt29cWrqwpqDWWxTUsqWQVkfn/JQqq53zU0Gt+MoY1BTWeoeCWnYU0hqo81OqbM2y61n+qfvUUFACZQtqoFm1XqKglg2FtCbU+SlVps7P8lBQkyI7c+Z9mRzkOKSyBTWFtHGo81OqSp2f5aGgJkVXtlm1InR+tkshrQV1fkpVqfOzPBTUpOjKFtSgHLNqCmltUOenVJk6P8tBnZ9SdApq4SmktUmdn1Jltc7PXbP78y5FWihjUFNY6x0KamEppHVAnZ9SZWuWXc/MOYNqKCiBsgU10KxaL1FQC0chrUPq/JQq23/iNnV+loSCmhSZzvkZhkJaQkesXs/Dz71ADQVSOer8LA8FNSm6Mga1IoU1hbQu9G8cVuenVJI6P8tDQU2KrmxBDYozq6aQ1iV1fkqVqfOzHNT5KUWnoJaMQloA6vyUKtM5P8ujjEFNYa13KKh1TiEtEHV+SpXpnJ/lUbagBppV6yUKap1RSAtInZ9SZTrnZ3koqEmRqfOzfQppKdA5P6Wq1PlZHmUMagOj0/IuQTJUxqCWdVhTSEuJzvkpVaXOz/IoY1DTjFpvKVtQg2xn1RTSUqTOT6kydX6Wgzo/pegU1MamkJYydX5KlanzszzKGNQU1nqHglpzCmkZUOenVJk6P9vju/OuoHxBDTSr1ksU1PYWNKSZ2X5mdouZbTOz9WZ2VovlJ5vZb83siZB1FJE6P6XKqtD5mcX4te6Jud0X2iUFNSkydX7uKfRM2tXAMDAPOBu4xsyOHGf5DwHPBK6h0NT5KVVVgc7PTMYvBbVkFNR6SxmDWhphLVhIM7PpwBuBS9190N3vAr4FnDPG8gcDbwauCFVDWajzU6qqrJ2fWY9f656Ym3tYU1CToitbUIPws2ohZ9IOB0bc/aG6234JjPVJ9Crgw8COgDWUhjo/pcpK2PmZy/iVd1DbsmtK6cKaglpv6fWgZu4eZkVmJwFfc/f5dbe9Azjb3U9uWPZ0YKW7v9bMTga+4u4HjrHelcBKgDlz5hz7iUs/E6TeEGbPn87Axm1drcOnTmLkBbs5eOqzQWratXMek6Y8FWRdIaie8VW9nkd37E/f0xOwHbsSr2PlhW+5192XByuqiUzGr7lzjv27a65quv3+ySMhnkbH9ts9jU0TtgMwc9LOXGqo1z+8L0OTn2t7+dkTt6dYDQztnE//lI2pbqMTRasHsqup3QMdd/oeStOWXVN45387p6vxqy9gPYPAzIbbZgJb62+Iv1ZYDbyunZW6+7XAtQCLFx7sN6++p/tKAzlj1XGEqGfHiw/gsdf1ccuKz3a9rg1rV7Fg6equ1xOK6hlf1etZAKwZeBm3X3cCC77xaLD1piD18WvhkkP804Prx1x28YHZ75571vajuGnaL56/nvfJpJc8voKHD7q1o8ekOdOybu0lLF76ydTW36mi1QPZ1bSY9mZRk7yHiizk150PAX1mdljdbcuABxqWO4zo9b7TzDYCNwN/YmYbzWxxwHpKQ52fUmUl6fzMffzK+6tP0H5qUmxl7PzsVrCQ5u7biAasy81supmdCLwBWNOw6P3AQcBR8eXtwFPx/x8PVU8ZqfNTqqronZ9FGb8U1JJRUOstvRTUQh+C4z3AVOBp4KvAu939ATM7ycwGAdx9xN031i7AJmB3fH00cD2lo85PqaoSdH4WYvxS52cyCmq9pVeCWtCQ5u6b3H2Fu09394XuflN8+53uPmOMx9wx1k63vUqdn1JlRe38LNr4VYSgVrawpqDWW3ohqOm0UAWlc35Klemcn+3JO6hB+WbVdM7P3lL1oKaQVmA656dUmc752R4FtWQU1HpHlYOaQlrBqfNTqqwknZ+5U1BLRkGtd1S181MhrSTU+SlVVfTOz6JQUEtGQa23pH2A46wppJWIOj+lqkrQ+VkI6vxMRkGtt1RpRk0hrWTU+SlVVtTOz6IpQlArW1hTUOstVQlqCmklpM5PqTJ1frYn76AG5ZtVU+dnb6lCUFNIKyl1fkqVqfOzPQpqySio9Y6yBzWFtBJT56dUWa2hQManoJaMglrvKHPnp0JaBajzU6rqnNl3511CKSioJaOg1lvKGNQU0iqi1vn57Oj0vEsRkRyo8zMZBbXeUragppBWIQu+8Shb/jBDDQUiPawIQa1sYU1BrbeUKagppFXMpIEhdX6K9Li8gxqUb1ZNnZ+9pSxBTSGtgtT5KVJAbpluTkEtGQW13lGGoKaQVlHq/BQpnv7HJme6PQW1ZBTUekfROz8V0ipOnZ8ixaKgVg4Kar2lqEFNIa0H6JyfIsWSR1DLO6yVMagNjE7LuwTJUBGDmkJaj9A5P0WKJeugBvnPqqnzU4quaEFNIa2H6JyfIsXS/9hkff1ZAur87C1FCmoKaT1GnZ8ixaOgVg4Kar2jKEFNIa0HqfNTpHgU1MpBQa13FKHzUyGth6nzU6RYsg5qQ8N9mW6vGQU1Kbo8g1rQkGZm+5nZLWa2zczWm9lZYyz3ITO738y2mtmjZvahkHVI+9T5KRIpyvilzs9yUFDrLXkFtdAzaVcDw8A84GzgGjM7sslyBrwFmA2cClxgZm8KXIu0SZ2fIkCBxq9e7fzcsmtKrjV0SkGtt+QR1IKFNDObDrwRuNTdB939LuBbwDmNy7r7ane/z91H3P1B4JvAiaFqkc6p81N6WRHHL3V+loM6P3tL1kHN3D3MisyOBn7s7tPqbrsYeIW7nzbO4wy4D/iiu3+hyf0rgZUAc+bMOfYTl34mSL0hzJ4/nYGN2/IuYw/d1uRTJzE8y1iy79NB6tm1cx6TpjwVZF0hqJ7xFa0egNe95n33uvvyNLeRzfg199jLPvf5RPXtnrw70eNamTexn6dGh/a6vX/ySCrba2W/3dPYNGE7ADMn7cylhnr9w/syNPm5tpefPXF7itXA0M759E/ZmOo2OlW0mrKqp90DHf/1a9/R1fgVcq/RGcCWhts2A/u0eNxlRDN61ze7092vBa4FWLzwYL959T3dVRnQGauOo0j1QLiaHly1iFtWfLbr9WxYu4oFS1d3vZ5QVM/4ilZPhlIfvxYessQ/9/snExc4tHA48WPH8sEZi/j04Pqm9y0+8Jng22vlrO1HcdO0Xzx//ZT5azOvod6Sx1fw8EG3dvSYNGda1q29hMVLP5na+pMoWk1Z1bM4/jftWdSQ+6QNAjMbbpsJbB3rAWZ2AdG+Ha93970/zklu1PkpPabw45e++iwHffXZW9L++jNkSHsI6DOzw+puWwY80GxhMzsPuAR4tbs/EbAOCUSdn9JDSjF+qfOzHBTUekuaQS1YSHP3bcDNwOVmNt3MTgTeAKxpXNbMzgY+AZzi7o+EqkHCU+en9IIyjV+92vlZtrCmoNZb0gpqoQ/B8R5gKvA08FXg3e7+gJmdZGaDdct9HNgfuMfMBuPLXjvdSjGo81N6RGnGL3V+loM6P3tLGkEtaEhz903uvsLdp7v7Qne/Kb79TnefUbfcwe4+yd1n1F3eFbIWCUvn/JSqK+P4paBWDgpqvSN0UNNpoaRtOuenSPEoqJWDglrvCHnOT4U06Zg6P0WKRUGtHBTUekuIoKaQJomo81OkWNT5WQ4KatIJhTRJTJ2fIsWizs9yUFCTdimkSVfU+SnSHnPYZ32Y0/CNR52f5aCgJu1QSJOuqfNTpH1ZBDXQfmploEN0SCsKaRKEOj9F2qeglp6yBTXQrJqMTSFNglLnp0h7FNTSo6AmVaGQJsGp81OkPVUOanmHNQU1qQKFNElFrfPz0R37512KSKFVNahB/rNq6vyUslNIk9Qs+Maj9D09QZ2fIi3ss97V+ZkiBTUpK4U0SZXt2KXOT5E2VXVWTUGtc+r8FFBIkwyo81OkfQpq6SlbUAPNqvU6hTTJjDo/RdqTVVCbMJztnwAFtWQU1HpXX94FFNEPzv4Sw9O2t1zuuwPAO1qvb/L2abzqxvO7L6wCjli9ntsfPgHOg3Nm3513OVJn98gok/v+id0jo0zom5h3OT1vn/XO1kWW6LEP7/4oo2xtudwFD7W3vgkTZnDQwo8kqqVRLagtPvCZIOtL4vaNSzll/trctp/E17ccw/K8iyi40ZFRJk38HKMjo0ysyBimmbQm2gloea6v7HTOz2LaMbCFCfYIOwa25F2KxJLOqLUT0Dqxe/dg0PVB/rNqZez8HBidlncJhTY4MIjZIwwOhH+/5kUhTXKhc34Wy+6RUYYHt2HmDA9uY/fIaN4lSSyrzs885B3UoHxff+qrz+ZGR0bZvnU7Zs72rdsZrcgYppAmudE5P4tjx8AWqOUAR7NpBaSglp4yBjWFtT0NDgzuMYZVZTZNIU1ypc7P/NVm0eppNq2YFNTSU7agBppVq6nNotWrymyaQpoUgjo/87PHLFqNZtMKS0EtPQpq5bTHLFpNRWbTFNKkMHTOz+w1m0Wr0WxacVU1qA0N9+Ue1hTUyqXZLFpNFWbTgoY0M9vPzG4xs21mtt7MzhpjOTOzT5nZs/HlU2aWrNdcKkWdn9lqOotW02OzaWUbv6oa1CD/WbUydn72alBrOotWU4HZtNAzaVcDw8A84GzgGjM7sslyK4EVwDLgJcBpwDsD1yIlpc7PbIw3i1bTY7NppRu/suz87MUzFGzZNSXvEjrSa0FtvFm0mrLPpgULaWY2HXgjcKm7D7r7XcC3gHOaLP5W4NPu/oS7Pwl8Gjg3VC1Sfur8TN+4s2g1PTKbVvbxS0EtPWWcUeuVsDbuLFpNyWfTzD3ML7eZHQ382N2n1d12MfAKdz+tYdnNwJ+7+3/G15cDP3T3fZqsdyXRJ1fmzJlz7Ccu/UyQesezcuAtwdd57ewvB19nM7PnT2dg4/izI1kKUc/Q/Mks2ffpIPXs2jmPSVOeCrKuEPKrZzNTJl2O2a6WS7pPYueujwIz0y+ride95n33unuqB1vPavy6/MrPp/gsYPfk6FvXCx76q+Dr/vzh/1q3nd3B1w8wb2I/T40O7XV7/+SRVLbXyn67p7FpQjRTM3PSzlxqqNc/vC9Dk59re/nZE9M/kPrQzvn0T9mY+nb2tpnJfX/f9hg2PPJ35DGGnfrnF3Y1foU8LdQMoPEj92Zgr4ErXnZzw3IzzMy8ITW6+7XAtQCLFx7sN6++J1zFY2njVE+dyqRu4IxVx2W2rXaEqufBVYs44xU/7fpUUhvWrmLB0tVd1xNKXvVse2aA4a2tBzcAs13M2v8Kps+dnXJVuUp9/Fq06BD/0p1Phqt4DElPJdXK536/Z+1DC4eDb+ODMxbx6cH1Te/L4zRSZ20/ipum/eL563mfSmrJ4yt4+KBbO3rMmTPvS6mayLq1l7B46SdT3UYzm5/ZzPYt7Y9hs/e/gllzZ6VcVXgh90kbZO+YOhOanp+kcdmZwGDjACdSo87PcNrZF61RD+yblsn4NevhvWeJQqvyV595f/1Ztq8+oZr7qbWzL1qjsu6bFjKkPQT0mdlhdbctAx5osuwD8X2tlhN5njo/w2hrX7RG1d83LbPxa9bDQ5mEtSxkHdQg//3U1PmZv7b2RWtU0n3TgoU0d98G3AxcbmbTzexE4A3AmiaLfxn4gJkdYGYLgA8CN4SqRapLnZ/dSTKLVlPl2bQ8xq8qBTU1FBRfVYJaklm0mjLOpoU+BMd7gKnA08BXgXe7+wNmdpKZ1UfYLwK3Ab8G7gf+Lb5NpCV1fiaXaBatpvqzaZmPX1UJaqDOzzKoQudnolm0mhLOpgUNae6+yd1XuPt0d1/o7jfFt9/p7jPqlnN3X+Xu+8WXVdofTTqhc352rptZtJqKz6blMn4pqCWnoJZMWYNaN7NoNWWbTdNpoaTUdM7P9nU1i1ZT/dm0XCioJaeglkwZg1pXs2g1JZtNU0iT0lPnZ2shZtFqqjyblicFteTU+ZlMmYJaiFm0mjLNpimkSSWo83N8QWbRajSblhp1fnanCEGtbGGtLEEtyCxaTYlm0xTSmpi8fVrrhXJcnzSnzs+xjQ6FPfBo6PXJnroNan2jzY7Bm9zEpsf0bU2dn+VQhqA2vDPsmBN6fWkJecaBynjVjee3tVzRju4vtc7PAzj9dRdxy4rP5l1OYcw8cF5byxXtjAy9bNbDQ2xe0p/oscs2XNbWcuefdACffWxDom10ov+xyamcoWAs656Ym8sZCurdvnFp7mco6EQtqKV9hoKk5h7UXvjO6wwIadFMmlSOOj+lKnSGguQ0o5ZMGWbVeolCmlSWOj+lChTUklNQS0ZBrTgU0qTS1PkpVaCglpw6P5NRUCsGhTSpPHV+ShVk0flZ1aAG+c+qqfNTklBIk55Q6/x8dMf+eZci0pUsgloWYU2dn+WgoJYvhTTpGVPvf5K+pyeooUBKT19/Jqeg1rkqnPOzrBTSpKfYjl3q/JRKUFBLTkEtGQW17CmkSU9S56dUgYJacgpqySioZUshTXqWOj+lCqoU1CYMZ/snSZ2fySioZUchTXqaOj+lCtT52Z0iBLWyhTUFtWwopEnP0zk/JQvm6YccdX4ml3dQg/LNqimopU8hTYTaOT+nq6FAUjV57RNMXvtEqtuo0tefCmrFNzA6TWEtRQppIjGd81OyoqDWPgW1clBQS4dCmkgDdX5KFhTU2qegVg4KauEppIk0oc5PyYKCWvvyCGpDw32ZbrORgpoopImMQZ2fkoUsgpo6P5PLe1ZNnZ+9LUhIM7P9zOwWM9tmZuvN7Kxxlv2Qmd1vZlvN7FEz+1CIGkTSoM7P3pD3GJZ2UAN1fnYj76AG5ZtVU1ALI9RM2tXAMDAPOBu4xsyOHGNZA94CzAZOBS4wszcFqkMkOHV+9oTcxzB1fnamF4Pall1T8i6hIzrnZ/e6DmlmNh14I3Cpuw+6+13At4Bzmi3v7qvd/T53H3H3B4FvAid2W4dImtT5WV1FG8MU1NrXi0GtbDNqoFm1bph3eYBFMzsa+LG7T6u77WLgFe5+WovHGnAf8EV3/8IYy6wEVsZXXwzc31XBYc0B/pB3EQ2KVpPqGZ/qae0Id98nrZWnOYYVfPyC4v28Vc/4ilYPFK+motXT1fgVonVlBrCl4bbNQDtFXUY0m3f9WAu4+7XAtQBm9jN3X56szPCKVg8UrybVMz7V05qZ/SzlTaQ2hhV5/ILi1aR6xle0eqB4NRWxnm4e3/LrTjO7w8x8jMtdwCAws+FhM4GtLdZ7AdF+Ha939/Tn30WkJ2kME5GyajmT5u4nj3d/vD9Hn5kd5u6/i29eBjwwzmPOAy4BXu7u6bc1iUjP0hgmImXVdeOAu28DbgYuN7PpZnYi8AZgTbPlzexs4BPAKe7+SIebu7arYsMrWj1QvJpUz/hUT2up1pThGNZzr20Cqmd8RasHildTperpunEAomMMAdcBpwDPApe4+03xfScB33H3GfH1R4EDgfqvB77i7u/quhARkQQ0holIEQUJaSIiIiISlk4LJSIiIlJACmkiIiIiBVTokJb3+fQ6qcEinzKzZ+PLp+IDXQbVQT2ZnCO1k59RvPxkM/utmaXSEdfhe+YYM/uRmQ2a2VNmdmFe9ZhZv5l9Ia5jk5ndZmYHpFDPBWb2MzMbMrMbWiz7fjPbaGZbzOw6M+sPXU8nNZnZW83s3rieJ8xstZmFONZjKjR+dVVPZud41hgWpp5eHcPSHr8KHdIowPn0OqhhJbCCqHX/JcBpwDsDbD9pPVmdI7WTnxHAh4BnUqijo3rMbA7wXeCLwP7AocC/51UPcCHwUqL3zgJgALgqhXo2AB8n2kl+TGb2GqJDTLwaWAQcAnwshXrargmYBlxEdETxP41ruzilmkLQ+JW8nizP8awxLEA99O4Ylu745e6FvADTid4Yh9fdtgb4ZJuP/xxwVVY1AHcDK+uunw/8pCivSYjXo9t6gIOB3wKvBZ7I8z1DdAiFNaFr6KKea4DVdddfDzyYYm0fB24Y5/6bgE/UXX81sDHl12vcmpos/wHgtjRryuJnP8bjNX4Ffj1C1KQxTGNY0nqaLN/W+FXkmbTDgRF3f6jutl8C433CAZ4/n95JjHMwyhRqODK+r9VyWdXzvICvR7f1XAV8GNgRuI4k9ZwAbDKzu83s6XhqfmGO9XwJONHMFpjZNKJPrN8JXE8nmr2f55nZ/jnV08zLCf+eDkXjV3f1PC/F8StJTRrDNIaF0tb4VeSQluo5QVOoYUZ8X/1yMwLv15H0NbmMMK9H4nrM7HRgorvfEriGRPUQHefqrURT9AuBR4Gv5ljP74DHgSfjx7wQuDxwPZ1o9n6G9n7/UmfREf+XA1fmXcsYNH51V0+9y0hn/OqoJo1hLevRGNamTsav3EKaleN8ep3U0LjsTGDQ43nNQDp+TQK/Honqsei0O6uB9wXefqJ6YjuAW9z9HnffSbSvwsvMbFZO9VwN9BPtWzKd6Aj4eX4KbfZ+hha/f1kwsxXAFcBr3f0POdWg8SvdeoBMzo+qMSxcPRrD2tDp+JVbSHP3k93dxrj8GfAQ8fn06h7W7vn0Xu1hzqfXSQ0PxPe1VWsG9aTxeiSt5zBgMXCnmW0k+uX9k7jrZnEO9QD8Cqj/A5TGUZ07qecoov0ZNsV/jK4Cjo93Ds5Ds/fzU+7+bE71AGBmpwL/DJzm7r/Oqw6NX6nXk8X41UlNGsNa16MxrIVE41daO9EF2hHvfxNN304HTiSarjxyjGXPBjYCL8yjBuBdRDuUHkDU2fIA8K68XpO0Xo8k9QB9wPy6yxlEHTHzib4+yOP1eRVR99FRwCTgH4E7c/x5XQ98A5gV1/Nh4MkU6ukDphB9klsT/7+vyXKnxu+fFwH7Aj+gzZ3eU6zpVUSnbHp5mu/prH/28bIavzJ4PZLWpDFMY1iAehKNX6m++QM8+f2AW4FtwGPAWXX3nUQ0HV+7/iiwi2iKs3b5Qlo1NNm+EU2Hb4ovq4lPu5XFa5LV65G0nobHnEwKnVGd1gO8m2j/iQHgNuCgHH9e+wM3Ak8DzwF3AcenUM9lRJ+46y+XEe3TMggsrFv2A8BTRPuXXA/0p/Qza6sm4IfASMN7+jtp1JTmz36Mn7/GrxzGr05qanjMyWgM0xjWQT0kHL907k4RERGRAipyd6eIiIhIz1JIExERESkghTQRERGRAlJIExERESkghTQRERGRAlJIExERESkghTQRERGRAlJIExERESmg/x/BRBLqqjm0hwAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Y0LryIA3CxBm" + }, + "source": [ + "# 이미지 분류기 만들기" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "TKxKNk_PCxBm" + }, + "source": [ + "먼저 텐서플로와 케라스를 임포트합니다." + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "nwajNsLOCxBm" + }, + "source": [ + "import tensorflow as tf\n", + "from tensorflow import keras" + ], + "execution_count": 9, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "NM0vi9zZCxBm", + "outputId": "86dae6ea-5759-4e67-bc7c-ff36e3ba036b", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 35 + } + }, + "source": [ + "tf.__version__" + ], + "execution_count": 10, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "string" + }, + "text/plain": [ + "'2.6.0'" + ] + }, + "metadata": {}, + "execution_count": 10 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "1t1dunvMCxBn", + "outputId": "46959b4f-f1f5-4581-9d13-e3b5672d403c", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 35 + } + }, + "source": [ + "keras.__version__" + ], + "execution_count": 11, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "string" + }, + "text/plain": [ + "'2.6.0'" + ] + }, + "metadata": {}, + "execution_count": 11 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "svXrG_n7CxBn" + }, + "source": [ + "먼저 MNIST 데이터셋을 로드하겠습니다. 케라스는 `keras.datasets`에 널리 사용하는 데이터셋을 로드하기 위한 함수를 제공합니다. 이 데이터셋은 이미 훈련 세트와 테스트 세트로 나누어져 있습니다. 훈련 세트를 더 나누어 검증 세트를 만드는 것이 좋습니다:" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "KBoAXMcTCxBn", + "outputId": "8af2eea7-be3f-45af-d3af-6925107e80c6", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "fashion_mnist = keras.datasets.fashion_mnist\n", + "(X_train_full, y_train_full), (X_test, y_test) = fashion_mnist.load_data()" + ], + "execution_count": 12, + "outputs": [ + { + "output_type": "stream", + "text": [ + "Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/train-labels-idx1-ubyte.gz\n", + "32768/29515 [=================================] - 0s 0us/step\n", + "40960/29515 [=========================================] - 0s 0us/step\n", + "Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/train-images-idx3-ubyte.gz\n", + "26427392/26421880 [==============================] - 0s 0us/step\n", + "26435584/26421880 [==============================] - 0s 0us/step\n", + "Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/t10k-labels-idx1-ubyte.gz\n", + "16384/5148 [===============================================================================================] - 0s 0us/step\n", + "Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/t10k-images-idx3-ubyte.gz\n", + "4423680/4422102 [==============================] - 0s 0us/step\n", + "4431872/4422102 [==============================] - 0s 0us/step\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "tWXb3vcYCxBn" + }, + "source": [ + "훈련 세트는 60,000개의 흑백 이미지입니다. 각 이미지의 크기는 28x28 픽셀입니다:" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "7SRMKgGeCxBn", + "outputId": "15fd698c-2d23-4b08-f645-d3f6bda8b72f", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "X_train_full.shape" + ], + "execution_count": 13, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "(60000, 28, 28)" + ] + }, + "metadata": {}, + "execution_count": 13 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "GJfMNv8cCxBo" + }, + "source": [ + "각 픽셀의 강도는 바이트(0~255)로 표현됩니다:" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "R6-ZSv3YCxBo", + "outputId": "cd3ee9e7-9ffa-4f60-e44e-04e4a6ea64f9", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "X_train_full.dtype" + ], + "execution_count": 14, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "dtype('uint8')" + ] + }, + "metadata": {}, + "execution_count": 14 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "aWWSJE-BCxBo" + }, + "source": [ + "전체 훈련 세트를 검증 세트와 (조금 더 작은) 훈련 세트로 나누어 보죠. 또한 픽셀 강도를 255로 나누어 0~1 범위의 실수로 바꾸겠습니다." + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "2ULtu00YCxBo" + }, + "source": [ + "X_valid, X_train = X_train_full[:5000] / 255., X_train_full[5000:] / 255.\n", + "y_valid, y_train = y_train_full[:5000], y_train_full[5000:]\n", + "X_test = X_test / 255." + ], + "execution_count": 15, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "vj-c9KtrCxBo" + }, + "source": [ + "맷플롯립의 `imshow()` 함수와 `'binary'` 컬러맵을 사용해 이미지를 출력할 수 있습니다:" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "iTnnyjqTCxBo", + "outputId": "f74bc220-b48a-40d5-d2f7-198a4b4e4de5", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 248 + } + }, + "source": [ + "plt.imshow(X_train[0], cmap=\"binary\")\n", + "plt.axis('off')\n", + "plt.show()" + ], + "execution_count": 16, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAOcAAADnCAYAAADl9EEgAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAKN0lEQVR4nO3d20rWWx/F8WllWeYuUwtCSsIMCkqKiCDIrqOjovPooDvoIjrpCjrrHhZC1EHuyHaWFaXltkxts87eo/UfI3xe1zMe1vdzOpg+mxz9wR9zzqbfv38XAHl21PsNAPhnlBMIRTmBUJQTCEU5gVC7TM6fcvF/4yYDTU1N/9I7ifOPH5wnJxCKcgKhKCcQinICoSgnEIpyAqEoJxDKzTmxDcbGxiqzBw8eyLWjo6My//nzp8wPHTok85MnT1ZmV65ckWsvXLgg8//wHHNLeHICoSgnEIpyAqEoJxCKcgKhKCcQinICoZhzbsHExITMr1+/LvNHjx5VZj9+/JBrd+3S/2Q7duj/b13+/fv3La8dHByU+e3bt2V+48YNmf/X8OQEQlFOIBTlBEJRTiAU5QRCUU4gVJM5rrBhj8b89etXZeZGAk5fX5/M5+fnZd7R0VGZueMjm5ubZe5GMTt37pS523KmLCwsyPzIkSMyf/v27ZZfu1Z1PraTozGBRkI5gVCUEwhFOYFQlBMIRTmBUJQTCNWwW8bUHLOU2maZi4uLMndzzpaWFpnv27evMhsaGpJr3XY1N49z713NOd+8eSPXdnZ2yrytrU3mjx8/rsyGh4flWmc7f1+2S947AlBKoZxALMoJhKKcQCjKCYSinEAoygmEit3PuZ1zqYsXL8p8ZmZG5u69uVnj0tJSZaau4CullOXlZZm/ePFC5m4Ge+LEicrMzSndfkx17GYppWxsbFRm7t97bm5O5o7bx+r2wdaI/ZxAI6GcQCjKCYSinEAoygmEopxAKMoJhIrdz1nrOaF37typzJ4/fy7X9vf3y9ydDetmiWre52aFp06dkrmaoZbi91yq9/b69Wu51hkYGJC5Os/35cuXcu3Nmzdlfu/ePZlv8xxzS3hyAqEoJxCKcgKhKCcQinICoSgnECp2y1itLl++XJmtr6/LtW6Ms7a2JvM9e/bIfO/evZXZysqKXLt//36Zt7a2ytxtKVOvf+zYMbn28OHDMnff29evX7f0vkrx3/lff/0l8zpjyxjQSCgnEIpyAqEoJxCKcgKhKCcQinICoWK3jDnuKMMvX75UZmrOWEop7e3tMldX+JWij3h0uZvXuRltrcd2njt3rjJzM1Z3daLb9tXd3V2Z7dqlf1Xn5+dl7q4vdNsE64EnJxCKcgKhKCcQinICoSgnEIpyAqEoJxCqYeec7po+tf/Pzes2Nzdl7mZublapZrTu2E33s3t7e2XuZrBqT+WnT5/k2t27d8u8q6tL5up7cfNdd72gm4My5wTwxygnEIpyAqEoJxCKcgKhKCcQinICoRp2zun2Birfvn2TuZr1leLnpG4WqWaZ7mxXtxd1dXVV5u6zqxmum2O6a/Tce1teXq7M3Hm8bn/v+Pi4zIeHh2VeDzw5gVCUEwhFOYFQlBMIRTmBUJQTCEU5gVANO+d0c6sdO6r/31lYWJBr3717J/PTp0/L3M371CzT7bd059K2tbXJ3O0XVe/NzRLdfNftufz48WNldvDgQbnWfefufs5r167JvB54cgKhKCcQinICoSgnEIpyAqEoJxCqYUcps7OzMlcjB/dn99+/f8vcjQzcljN19KZ7b24U4o6QVCOmUkppbm6WueLemxulqO/NjYjctYxTU1MyT8STEwhFOYFQlBMIRTmBUJQTCEU5gVCUEwjVsHPOyclJmatZZVNTU02v7WaRbmuVmiW6WWCt3JYzNYN1Vx+6z+3WqyNH3WzZHds5NjYm80Q8OYFQlBMIRTmBUJQTCEU5gVCUEwhFOYFQDTvnfPr0qczVLFLN8v6Eu0bP7ZmsZQbrZoVuL2otM143I3V5S0uLzNWxoO5nO3NzczJ/9uyZzAcHB2t6/a3gyQmEopxAKMoJhKKcQCjKCYSinEAoygmEatg554cPH2R+4MCBysztmezs7JS5m7m5vYVqnudmgW5G686tddSc1O3XdK/tZqzq7Fn3ud2ZuY67UpI5J4D/oZxAKMoJhKKcQCjKCYSinEAoygmEatg5p9szqeZibh7nzkh1s0h3rq2a97n9mG6e5+7XdLNG9fPdXtJaPrd7bXfnqZstOx0dHTWt3w48OYFQlBMIRTmBUJQTCEU5gVCUEwjVsKMU92d59af1xcVFubanp0fmbqSwuroq871791Zma2trcq373K2trTJ3R0TW8tpqy1cppSwsLMj8+PHjldnU1JRc60ZrXV1dMndHY46MjMh8O/DkBEJRTiAU5QRCUU4gFOUEQlFOIBTlBELFzjndNXtue9L+/fsrs8+fP8u1Bw8elLnjZm7btbYUf+yn25Kmtpy5ozHdVjuXnz9/vjJ79eqVXOu2fLnZ9PT0tMzrgScnEIpyAqEoJxCKcgKhKCcQinICoSgnECp2zumOQnS5OmbR7Xns7e2V+fv372Wurh8spZSlpSWZK25PZa3r1ffmZrDuyNDZ2VmZqxlse3u7XDszMyNzd22ju1KyHnhyAqEoJxCKcgKhKCcQinICoSgnEIpyAqFi55zubFl19mspeu+hm3kNDAzIfHl5WeZuHqhy994ct2fSUd+bO5fWzTnb2tpkrv5N3Wu7ubebk6r9v/XCkxMIRTmBUJQTCEU5gVCUEwhFOYFQsaMUd1WdGxmo7UduFOKOl1THR5ZSyubmpsxrobZ0leKPDHXfmzqS1I2I3HGmtVyd6I7ldNzozX1v9cCTEwhFOYFQlBMIRTmBUJQTCEU5gVCUEwgVO+d0M7Pdu3fLXB0B6bYHdXd3y3xiYkLmtcxg3RV97nM77mhMNcOtdcZay/x3aGhI5g8fPpR5T0+PzN1nqweenEAoygmEopxAKMoJhKKcQCjKCYSinECo2DnnysqKzN0xjGqed/To0S2vLaWUz58/y9wdran2i7q9pG6G+uXLF5nPz8/LXB0h6eaYtcyeS9HX8F27dk2udXNOtwfX/T7VA09OIBTlBEJRTiAU5QRCUU4gFOUEQlFOIFTsnNNd6dbR0SFzde7tyMiIXHvo0CGZu6vs3DV+6+vrlZmbxzlufWdnp8zVflK3H9Pl7ho/NQe9evWqXOu4c2/d71s98OQEQlFOIBTlBEJRTiAU5QRCUU4gFOUEQsXOOd28zt31qOZ1Z8+elWtHR0dl/uTJE5m7M1bX1tYqM7fn0c1Ya51F1nI/58bGxpZ/din6fs6+vj651p1L62bPzDkB/DHKCYSinEAoygmEopxAKMoJhIodpbg/+bsjJJXp6WmZ379/X+b9/f0yX1hYkLn6s737XO7IUDeKccd2qpGDGnWU4rejufHYpUuXZK64MY4aX5VSyuTk5JZfe7vw5ARCUU4gFOUEQlFOIBTlBEJRTiAU5QRCxc45z5w5I/Ph4WGZj4+PV2Zuu5mbx929e1fm+PfdunVL5m67m9tGWA88OYFQlBMIRTmBUJQTCEU5gVCUEwhFOYFQTeoISQD1w5MTCEU5gVCUEwhFOYFQlBMIRTmBUH8DscHqopQEqFAAAAAASUVORK5CYII=\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "uSIW-PwrCxBp" + }, + "source": [ + "레이블은 0에서 9까지 (uint8로 표현된) 클래스 아이디입니다:" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "wMCKyjdOCxBp", + "outputId": "0bd451f6-3952-4ba4-f768-f596820b0cc0", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "y_train" + ], + "execution_count": 17, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([4, 0, 7, ..., 3, 0, 5], dtype=uint8)" + ] + }, + "metadata": {}, + "execution_count": 17 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "-SfLwhBVCxBp" + }, + "source": [ + "클래스 이름은 다음과 같습니다:" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "6MjU3yY2CxBp" + }, + "source": [ + "class_names = [\"T-shirt/top\", \"Trouser\", \"Pullover\", \"Dress\", \"Coat\",\n", + " \"Sandal\", \"Shirt\", \"Sneaker\", \"Bag\", \"Ankle boot\"]" + ], + "execution_count": 18, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ZtVBLZVZCxBp" + }, + "source": [ + "훈련 세트에 있는 첫 번째 이미지는 코트입니다:" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "uvtaHizpCxBp", + "outputId": "dcf7b91f-0eef-4368-c9e9-8fe5ad8192b3", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 35 + } + }, + "source": [ + "class_names[y_train[0]]" + ], + "execution_count": 19, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "string" + }, + "text/plain": [ + "'Coat'" + ] + }, + "metadata": {}, + "execution_count": 19 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "2Eb8aKGmCxBq" + }, + "source": [ + "검증 세트는 5,000개의 이미지를 담고 있고 테스트 세트는 10,000개의 이미지를 가집니다:" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "WcdJNG1eCxBq", + "outputId": "9b67c90f-9bcd-467d-d8f1-62f9bd12f9cd", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "X_valid.shape" + ], + "execution_count": 20, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "(5000, 28, 28)" + ] + }, + "metadata": {}, + "execution_count": 20 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "awaseoBUCxBq", + "outputId": "33f0ffce-5d6b-4c90-b8c5-22b5e548e6e3", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "X_test.shape" + ], + "execution_count": 21, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "(10000, 28, 28)" + ] + }, + "metadata": {}, + "execution_count": 21 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "U0fMZtvKCxBq" + }, + "source": [ + "이 데이터셋에 있는 샘플 이미지를 몇 개 출력해 보죠:" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "Kkii9X4xCxBq", + "outputId": "9a8d0a67-532e-4698-cb7e-f030c53ebdc2", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 325 + } + }, + "source": [ + "n_rows = 4\n", + "n_cols = 10\n", + "plt.figure(figsize=(n_cols * 1.2, n_rows * 1.2))\n", + "for row in range(n_rows):\n", + " for col in range(n_cols):\n", + " index = n_cols * row + col\n", + " plt.subplot(n_rows, n_cols, index + 1)\n", + " plt.imshow(X_train[index], cmap=\"binary\", interpolation=\"nearest\")\n", + " plt.axis('off')\n", + " plt.title(class_names[y_train[index]], fontsize=12)\n", + "plt.subplots_adjust(wspace=0.2, hspace=0.5)\n", + "save_fig('fashion_mnist_plot', tight_layout=False)\n", + "plt.show()" + ], + "execution_count": 22, + "outputs": [ + { + "output_type": "stream", + "text": [ + "그림 저장: fashion_mnist_plot\n" + ], + "name": "stdout" + }, + { + "output_type": "display_data", + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAqkAAAEjCAYAAAAR5ZjkAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOy9d5zdRb3//5zt6ZuySUghJBQpQaoUBQEBpQTBqxdBwIteQJoU+SroRQUF4ccVROGKIEUUQxU0gCIKglQBKSFAMJBCQuom2STb2/z+mM9rzpzPObtJNnuyZ+O8Ho997O75lPOZ9+c9M+95vcsYay0RERERERERERERxYSSvn6AiIiIiIiIiIiIiDSikRoREREREREREVF0iEZqRERERERERERE0SEaqREREREREREREUWHaKRGREREREREREQUHaKRGhERERERERERUXSIRmofwBgz3xhzWBfHDjTGvLu5n2lLQXeyLXYYY6wxZruNPbaee55qjHl2059u8yPKIxtRHhEREf9u2KxGqjHmS8aYV4wx9caYJcaYPxljDtjEez5ljDmtt55xPd9VH/x0GmOagv9P6o3vsNY+Y639yHqeI68hZow50Rgz3RizTTJplfXGM/UUxpgDjDHPG2PWGGNWGWOeM8Z8rC+faXMg0cnVxpjKvn6WQsEYc7AxZtEGnhvlkX1ulEdhvrNfzy+9jX93eSTzZJMxZp0xpi6Zi840xkRyjv6jH5vtZRljvgFcD/wIGANsDfwcOHZzPcOmwlo7WD/AB8AxwWe/LfT3b4DReTTwx0I/x4bAGDMUeAS4ARgBjAcuB1r68rk2BJti3BtjtgEOBCzw2V56pH6LKI9sRHkUBlvC/NKbiPLwOMZaOwSYBFwNXAzclu9EY0zp5nywvkS/0g9rbcF/gGFAPfCfXRyvxAlscfJzPVCZHBuOM3ZWAKuTvyckx64EOoDm5P43bo72JN89Hzism+OjkmetA1YBzwAlwbX/D5gJrAHuBaqSYwcDi1Lfc3FybgtwN9AJNCVt/lZyXgmwLPneD3CTYH3ys39y/FJgAbAc+DUwLLl2m+T8MxL5LwH+3ybKZ2+grotjpwLPAj9O3uk84MiUvtyWPMeHwBVAaXJsW+BJYCVQC/wWqM73XoCdknufmPw/DXg9eSfPAx/tRs5lPWz394DngOuAR1LHfgX8H/AosA74B7BtcNwC2yV/HwAsBA7Oc6wykd0HyTv/BTCgG1k/B9yY6Nps4NDg+DhgBk5H3wNOX1+/BAYl+tcZ6Ni4KI8oj42VR2/8sAXOL1EevSKH+aTmaGCfRC+nJv3tJhyx0wAcluj775L2zwPOS137CrA26VfXJZ9XAXfh5qQ64GVgTF+3f0vRj80llCOAdrqY+IEfAC8Co4EanAHxw+TYSODzwEBgCHA/8Pvg2qeA0/rgRed0gNTxq3CTQ3nycyBggmtfSjrECOAd4Mzk2MHkGqmvAxNJJpouOt9+wAvJ39vgJq2y4PhXcZPMFGAw8CDwm9T5d+MmmF0TJeyyfRsgn6FJp70TOBIYHhw7FWgDTgdKgbOSziD5PATcnDzL6ERWX0uObQccnnSkGuDvwPXp9wLsiZukpyWf74EzzvdNvvO/knMru5JzD9v9HnA2sFfSxjHBsV8lMtkHKMMZ2PcEx23SviNwBsg+6WPJ3z/BGQ4jcH3iYeCqLp7nVFzfuxCnh1/EGSMjkuN/x62gq4Ddk/f+qQ3olwcT6GmUR5RHT+TRGz9sgfNLlEevyGE+eeYw3LxwVtLf1gCfwJE4A4F/4haSFbi5ci7wmeS6F4BTkr8HA/slf38t6WMDcXPLXsDQvm7/lqIfm0soJwFLuzn+PnBU8P9ngPldnLs7sLqQQtnANuXtAKkX/QeSiSPPtScH/18D/CL5+2ByjdSvru+7gR8C303+3oZcI/UJ4Ozg/4/gJsmy4PwdU8902ybKaKdkIFiUdIoZONfCqcB7wXkDk+8fmxxvITAUgROBv3XxHccBr6Vkc3nynQcHn9+kjhZ89i5wUFdy7kF7D0hkOir5fzZwYXD8V8Ctwf9HAbOD/y3wbRzbPTV1bxkoBrfqDxm2/YF5XTzTqQQLgOSzl4BTcAZ5BzAkOHYV8Kvk7y77ZVpPozyiPDZWHr31wxY4v0R59Ioc5pPfSH0R+J+kv/06+Hxf4IPUud8G7kj+/jtubhmVOuerpDxzxfzT3/Rjc8WkrgRGdRPrNw438AoLks8wxgw0xtxsjFlgjFmLU5TqYoofMcZsHSZVJR//L441edwYM9cYc0nqsqXB3424lVlXWLgBj3EU3cej5pNxGc4ozPc9/h30FNbad6y1p1prJ+DcK+NwrgMI2m+tbUz+HIyLHSoHliTB7nU4VnU0gDFmjDHmHmPMh4k+3IULcQhxJvC8tfap4LNJwEW6Z3Lfiak2boicu8N/AY9ba2uT/6cnn4VY33u/ALjPWjuri++oIVnxB+14LPm8K3xokxEkgd7tOGCVtXZd6tj45O8u++UGIsojG1EehcEWPb/0AFEe3WM8LnwFssf8ScC41BzxHTJz5H8DOwCzjTEvG2OmJZ//BvgzcI8xZrEx5hpjTHnhm9Fj9Cv92FxG6gs4duy4Lo4vximIsHXyGcBFONZvX2vtUOCTyecm+R0Orn0Ca+0HNjupCmvtOmvtRdbaKbgEiW8YYw7t6Vd0978xZiywFfBqF+dDfhm342JrhImp44vpJVhrZ+NWrlPXc+pCnK6MstZWJz9DrbW7JMd/hGvfrok+nExGF4Qzga2NMT9J3ffK4J7V1tqB1tq7w8fsWevAGDMAOB44yBiz1BizFOdC3c0Ys9tG3Oo/geOMMed3cbwWF++3S9COYdK7LjDeGBPKSO92MTDCGDMkdezD5O/u+mW3soryyEaUR0GxRc8vPUCURxcwrrrMeFxOBGS3ZyHO4xDOEUOstUcBWGvnWGtPxBEm/x/wgDFmkLW2zVp7ubV2Z+DjuNyHL2+2Rm08+pV+bBYj1Vq7Bhfn8X/GmOMSa7zcGHOkMeYaXCzkpcaYGmPMqOTcu5LLh+AG3TpjzAjg+6nbL8PFjhQVjDHTjDHbJYP/GpzbrLOXbp9u85HAYwEbsiL5rvCcu4ELjTGTjTGDccbevdba9uCc7ybvZhfgK7iErh7BGLOjMeYiY8yE5P+JOLf9i91dZ61dAjwOXGuMGWqMKTHGbGuMOSg5ZQguKHuNMWY88M08t1mHi7v5pDHm6uSzXwJnGmP2NQ6DjDFHpybgTcFxuHe8M84Fsjsu3OEZNm7AWgwcCpxvjDkrfdBa24lry0+MMWKXxxtjPtPNPUcD5yV97j+T5/qjtXYhzk11lTGmyhjzURxboL7XXb9cBow0xgzr4jujPLIR5VEg/DvOL90hyiMXyVwyDbgHuMta+2ae014C1hljLjbGDDDGlBpjpiaGLcaYk40xNUkfq0uu6TTGHGKM2TVhE9fiQnp6a67vdfQ7/ejN2IH1/eBiIV7BxUwtxWWxfhwXlP8zXDb3kuRvZbuPw8U51AP/wgUp+3hLXLzVv3CZZj/bjG2ZT/cxqRcm5zTg4iO/29W1wGW4jgP5Y1LT8afH4oK/63BVAh4AvpA65wc4Y7UOl1RVglO2hcnnd5EkM5Gb3b+UpGrAJshnPHAfjnVpSH7fjEuoOhV4NnW+JZP4MQwXQ7oIZ+C/BpyQHNsFF9xej0t0uqgreeESR94gE/R9BC7zsi7Rs/tJ4u3W9z43oL2PAdfm+fz4RJ5lOCb5iuBY+l2HMpiMc7OcludYFW6RMRc3KL5DkIWa+v5Tyc7e/hfw6eD4BFyG5ipcLNKZwbEu+2Vy/HYyGa3jojyiPDZUHoX4YQuaX6I8eqX983EG1bpEt18AziFTKSarvwXtvzuR12ocqaL55C5c8m098BZwXPL5ibj8hgackfYzelgdJupH7o+yqSP6KYyLK1kKTLHWru3hPbbBldsot9nMakREREREREREnyDuvND/MQLH0vbIQI2IiIiIiIiIKEZEJjUiMqkRERERERERRYdopEZERERERERERBQdors/IiIiIiIiIiKi6BCN1IiIiIiIiIiIiKJDVzsObAj6PE7AWkt2DeqNQo8v7AIbJY9Zs9yGMQ0NDbzzzjsA3HTTTQBMnz4dgG233bbbezz7rKtHfMUVVwDwwx/+kNJSt/HD5MmTARg+fPiGPlKfyqMIEeWRjd6WB0SZpBHlkY0eySMMYUvPD0cddRSDB7t9DdrbXfj9Zz7zGb72ta9lndfZ6cpclpRsEo/Tp/LoTg5/+9vfADjnnHOorKwEoLm52V/38MMPA7D99ttnXdfZ2env1YO5tyj0I8QTTzwB4OfgnXbaie222y7rnLq6OurqXFnUBx54AICDDz4YgCOOOIJBgwb19OuLQj/yvUf1h87OTo499lgAVq1ym3Q99thjrFixAoC//OUvG3Xf9SDvBZsSk9prA6oMtt/97nf84x//AKCjowOAsWPHstNOOwFwyCGHALDvvvv2xtf2iYLcdZeriVtf73ZPramp4SMf+QgA3/72twF46qmnAJgwYQIf//jHARgwYIA/9t577wHQ0tICuEEW4Prrr2fmzJkALFvmNpKaNGkSn/3sZzfk0YpuAOljRHlkIxqpuYg6ko2inXS/+U2358fNN9/sjRBNuhUVFfzqV78C8ONtL6Ho9ON3v/sdAF/4whcA2G233Vi9ejWAN7YqKyt5++23AZgxYwaQmWOyHmbjjZE+lUdDQwMAl1xyCbNnzwYy8/A222wDuDlX+iFD7P333/cLGmH+/Pn+by16/vSnP23k4xePftTWup2aTzzxRACee+45wPUNLdj0njs7Oz0Zps9+8YtfAPDFL34x594dHR3+/PWgeIxUdYD//u//BuCVV14B3Mq2rMyRu1rBlpSU+BWePtthhx0AuOiiizjttNN6+hibXUEeeeQRnnzySQBOPvlkABYvXkx1dTWAN1a1ir3uuut8x1LHefPNNxk1ym1V/61vfQuAL33pSwC8/PLLXlYDBw4E4J577uGII44A8g80AYqmwxQJojyyEY3UXEQdyUbRyOP8892usS+99BKQmYRHjBjBwoVuu3aNu0OGDKGpqQlwRgrAeeedBzimbBNY1c0uj3zexZtuuon7778fgH/961+AazPAMccc4w1z2QL3338/r732GpBhmydOdDtmf+5zn+PrX/961v07Ozs3VDZ9qh967rq6Oj+HCjJWq6qqvNEp/SgrK/PEkCA7pb6+3l8rwz+fodYFNps88i0onn/+ecDZEa+//joAQ4cOBWD06NEALF++3J8vxh3wzPLYsWMBfJ8aPnw43/++24SqB7ZZXnnEmNSIiIiIiIiIiIiiQ8GZ1Hyr0DFjxgCZ1e2wYW57Z2st5eXlQGYFV1pa6l3/gtwTEyZM8BZ83gfs3h2x2Vd1N954Ix9++CEAO++8MwBbb721P15VVQVkVvOdnZ0+5mPtWlerf5999qGmpgZwrADA3LlzAWhra/PyXrRokT8mVvWCCy7o7vGKhgUpEkR5ZCMyqbmIOpKNopDHTTfdxDXXXAPA1KlTgcycsWrVKs8WNTY2As7NvdVWWwGwdOnSrGNimHqIzS6PkNX85S9/CbhQBzGhmlfloVu4cKGfFzSPzJgxg/HjxwMZNlFz8Icffsg555wDwFVXXbWxz98n+qHcjcsvvxxwLKBiStNufDGkkHHjNzc3e1tF8pCelJWV+WvEtt56663rzSdJ0CfyuOOOO4CMPDo7O73dJftBtsjSpUuZNGkSkNGBWbNmeQZVfamtrQ1wtpZsFeXFyJsBPbPJIpMaERERERERERFRdNiU7P71Il+sSl1dnWdSZa2L6dtxxx19vKos7TFjxngL/oMPPgCyY4leffVVAPbcc8+s74VNzszsdbzxxhs+7nTdunWAW6UpKaqiogLIrMiGDh3qV3wKPG5vb2fNmjWAi2eFjBwhs6JR0HdVVZWPQ4rYshDGn0knrLW0trYCmTgh/d/W1ubjitSHRo8e7ftXOk5rxYoVnvnffffdC9mUiIhew9NPP+3HRI2HI0eOBNwYqz6gyicVFRW+D2gs1tj6z3/+k7322mvzPfwmIpzz7rvvPsDFDWr+ULKt/p80aZJnXDVv7rDDDn7MkFw0N2211VY8/fTThW5Gr+KAAw4AMnkdTz31VA4zKtY0hGJNm5ubvT6JeVVM5qhRo3xOjdjVyy67jN/85jcFaUtv4Lvf/S6Qsbs6Ojq83ojpVG5LTU2Nl5ESDSdNmuS9uNIP6ZO11nt6Nf+8/PLLfOxjH+vx8xaXFRcRERERERERERFBgZjUfEzm/vvvD8CCBQtyShqI9Rs4cKA/9v777wOOPRX7qDIRstCXL1/O4YcfnvVdK1as8H+nrfy+RlVVlc+WU5uWLFniYzfErmqFM3jwYP+Z5DJ69Oic9mh13NLS4hk1nbN48WJ/7SbULys6dNeW8JiYFMmgoqJii2g/ZLf9K1/5CgDz5s3zn4kJkAyWLl3qV8W6tqamxrMCij3ae++9AZg2bRq//e1vAbj99tsL1o6eIP3+N8V7siX1i82FBQsWAPD73/+ec889FyiecXbt2rWeCdJ4KCZ18ODBWfMNOI+c+oB+6/qXXnqpXzGpACtXrgQyHrmqqirfP8Qih8yXMrlV4aCkpMQzi5pD9bukpMR7VxTnuxG1uPsEenbF0l5yySU+VvnMM88EMl4kMayQHZ+qcVN6oZjM+fPney+TdOfHP/5xYRrSC2htbfWlxjTedXR0+BjldB/u6OjwMpFNNnbsWB+zLb0S2travDdC93/ooYc8k9qTMbYgRmr4IBdffDGQ6TBbb721p8xFoevFL1y40CuPBpfq6mp/PKxNBjBlyhSfdKWg7zPOOINbbrkFKJ5BU+4Aa603tEWdT5kyxbdVbRcWL17sZST3y1tvveXLhyhsQp2jsbHRD7xSookTJ3pjRTVUd9ttt15u4eZHqGMKZ1BpsmuvvRZw4RJnnHHG5n+4zYS2tjYf8K7awW+//bYfJPRb/WDXXXf1A7YWPw0NDX4wVjiNJvHGxkZfX7LYkB7sQiP173//O5Ap0bb99tv7dqv/qQTczjvvnHOv+vp6H3akMUeT0ic/+clebsnmgxazlZWVPP744wCcdNJJQKZ+5vra9+tf/xrAlyi64IILeOaZZ4BMgfO+hlz1kFmo6R1PmDDB9xn1i4qKCp/soXFTeO655zjrrLMK/sy9CSV76X2Xl5f7OVTGltz3LS0tOaUdFyxY4I9LHuo/1lp/L80nBx10UGEbtInQew7nVxmnodsessssyU4pKyvzn0ufdH59fT2nnnoqkAkn0LxcjHj++ee9rksXGhsb/bgondFCpKqqytsqWuhVVVVlhZABWXZNOkTkscce40c/+lGPnzm6+yMiIiIiIiIiIooOBWdSX3jhBcAxhjqmFYrcbLLoS0tL/TG5WN5//32/2tHOUyoX0tTU5GlqBfK++eabhWjSJkHF+ceOHetX8WL/1qxZ48tQhQlQ4EpzaZWrYOSamhqWLFkC4HfnEjO6atUqzyjLHTdlyhQvL+2IsSUwqSG0K4rcEpLZu+++y89//nMgI7/tt9+eo446CsiEoGiF2N8Qlo9TyZOqqqocD0Xo1hEToBVzWVmZXxVLN7Vb2ciRI32fKzZ056LX84v9HDBggGfXtJubSrtNmTKFe+65B4Cf/exngNs9RfoipkAsyf777+/l1N8QuuYUdiQW/fTTTwecHmlMlV5ARt4qZaTr/vKXv3DccccV+Mk3DGL95CWADPOlNjU1NeWUNFy0aJHvK4Le8Zw5cwr2vIWCWG69szAERvIQM1hSUuLlIa9BW1ubZx8lF8nDGOP73IsvvggUP5OaD2JCxTprrBg8eHBWwhQ4mWlMlS0im6W+vr5ftf/hhx/O6tfg+rlshNCrDU6HpD/y0kJGH8TKyv6CDAur68IQtJ4gMqkRERERERERERFFh4KWoOro6PDxDIqPGzp0qLfIZdHrd2VlpWd4wuQqJXIomFurmblz53oWTCv72tpaH1sXFsrvSyho+OWXX/axbtqm7tOf/rRfhSjgfY899gAcsxyu5sCtbFTsXzLVinbgwIGeoX3wwQcB+OpXv+oDpffZZ59CNbHPsHLlSi9TFSnWloaVlZU+3lfMWG1trWdeFbssZvk//uM/vOz7G8T0GWO6jCcbOHCgP6a40/b2dr/iTW8NuSlxRIVGmkEN48+1kYXOCRPolOwh9uMPf/iDL1+ncWXixIm+T0o2Yg76K4sKmfECMgXOxQhpvH3hhRe83DSmtrW1+eSYXXbZBcjEL48dOzandFlfQaxnS0tLjn5o7igrK/NjaqgzaaasP79vlWVMJxVCJs5Sx0IZ6DNrrR8z1H71n4qKCq8Xmnf6C8JEaumxmFS998rKSu+RE7sKmb6g3zpfsZj9BRr/QpSXl/Pcc88BGUZUc0Bzc7OfQ+WhGDJkiLfZ1P433ngDcJ5hzbVi8ocOHertwJBx3VAU1EhdsGCBb5gGiba2Nv+i5XKQ8rS3t/vPlHHY2trqXTVyUWmiHT58uL9Wxm24O0SxGKnTpk3zv6Ukf/zjHwHnsv/Upz4FZIwK7dCw6667+rbLsF+9erW/hwYcTT5jxozxIQCafC699NKiz75MY0OyrfXeBw8e7OWnz1Q54eqrr/Y7YijZbNSoUd41rvOUtXjZZZfxhz/8oVfbUkjk2y2uqqrKG1b55KfBNayLp/M08Oic/oRQZzS5aIJds2aND39RwtQxxxwDOHe1+pESRyoqKnKMExnw/RH5qpwoDEvtVPtGjx7tP5M+NDc3+/FECwC59BQ6UwzQM3V0dHgd0PipeWXQoEHeRalxs6Ojw0/ESnrROSIH+hO0gBCstb6Gp9oXjg3Sfxmz5eXlvj9JdzTnhDVXJe/+gnAXS4Ux6TPZDO3t7V53wv6S3plKehGGuhRbNaF8aGhoyNnVs6GhwdsIapfstpEjR/r5UmFUbW1tWQYoZOyvpUuXelnKWG1sbOStt94C4MADD9zoZ47u/oiIiIiIiIiIiKJDQZlUJfFAhiVsaGjwrKpWt7Lom5qa/OpWFn1jY6NnXsWgaqVSX1/vV7xyaXd0dHirPdyFqligFYuSmM4991y/gtUq95133gFcvUqdr8/GjRvnKfMnnngCyLCEc+bM8SvEK664Iuv7+gustV4eYS0/yF79i4m+9957efnllwGX8AIZV+agQYO8Xmh1d9BBB3lWSLojfRSz2l8Q1vELWVWtasWWah/u5uZmvxqWDNrb232/0v10rD8h1A15HRSwv80223idevfdd4FMIue6det8/1FCYmdnp/fkyA1crAlkG4I0oz5nzhwfWiTdEHNSUlKSU1u4qanJs6phGSudXyxQH1+6dKmvG6xxVkzxmjVrfBs0NlRVVTFr1iwAPve5zwGuVE94z/4EjZvh/Pr5z38ewJdn0zuurKz0+qHx79133/Vjgd77fvvtBzivk955WK6pPyAcL6UP+kzu7fb2di8/sfBlZWXeHtH50pd8bGsxM6nz5s3LGQ8aGxv9e1atbLHCK1as8LabbImWlhbvvpeM1E8GDx7sw2k0frS3t/tdyiKTGhERERERERERsUWgoEzqW2+95Vddimn58MMP2XXXXYHMikOrmtbWVm99i91ob2/3x2XdawUXMkMK3i8tLfXxVqecckoBW7fxCOP/1PaysjLP6Im1EbP14osv8qUvfQnIMNFz5871q2AFf4sZmDt3rpdRWM6qP8TKhGxp+jnDlZ/0SElgf/nLXzwjctlllwEZhmTYsGE+zlCYO3eu1y0xqDp/1apVRZd01x1CuUgH6uvr2X777YHMql/HVqxY4T0VWu2WlZX5+6S9GP0JoSyUTCk9CuPgH3vsMQAeffRRwLVf+qB2t7e3+/up3xVLclBPkGY7f//73/u4NOmB+l84RoUJVBqDpUuKTQ03EOlrhEkhO++8M5ApNaZ5JSxeL/Zo8ODB/riYZW0SM3/+fM8WaZwodojl0hwwe/Zs7rvvPgDvZVSMarhnvTwPmn8gw7hqt6bjjz/es479LXY9ZDpVSk1QIuWyZcuybAlBdobGEck2TJwKmdpixaJFi/xzKnn2vPPO484778z6TGNiZWWl1wEdg0y7NUZIF4477jjvldEmRuXl5T65uSeITGpERERERERERETRoaCm/6JFi/LGF4oJ1QpVlnpYzD+Mq0tn2uqc5uZmfw9Z/gMHDmT27NkFa1NvQfGnw4YN8zJSXIc2Mnj99de54YYbgEy80KxZs/xKWatBMQMdHR1+FSxGIDxeLOgue7+trc2zV2IzxDRXVFT40lp//vOfAZelLbZZ+8srnqy6utqzPGKda2trPbOs+0r+v/71r/02kb3NpPZ0f/j29vacFbr6S9gvbr75ZsCV+FB2qtiuMH5Ibdc99B2QW2Yl3HZ1c2N98gpL1HV1XlgZQ2064YQTgAxb9Mwzz3h9U6ZqaWmpL26t2LOwHE0xoit5dXZ25vT/6dOne7ZIMupOjpDpK9r6VAzsihUrfBxbX0MxxZDxCij2Ntx7PmQPISMDyFSQERP72muv+Y0g5KEoZjQ3N/u5U2xfeXm5nx8lDx1raWnxfTyssqP5Wp/l23s9vQFCf4LGPG3Xrm2BNWaGCMdfxeuLie5vbPLatWt9vL28Iz/5yU/8JidiPDUWhrognVm+fLm/h+Zoea/3339/r3+ao8OqQz1BQY3Ud955J+/gme4AaddTiM7OTj+hSll0XVlZWU4SVkVFhZ9Yihl64dXV1f5v0emiyxUWARk3zZFHHukHYO2ZLRmPHDnSK00xux7CQTStH21tbV4P1InkNpg1axbnnntu1j1mzpzJX//6VyCTFKDgbGOMN1L1e++99/YGjow3DTSHH3540bn5w/eYzzidPn064Fy4AMcee6xfpKl9MlJKSkq8rsl12dTUlLWbTHjdBx984MuPFBM6Ojq83uTTc5URk9t/4cKF3rWrsigaL0pLS/3ELb3o6OjwSQKh67OY0ZVxGRqoqiP8/vvv+93WpFPqc+EOREJYr/nwww8HMovs119/vd9oPL8AACAASURBVGiMVBmY4d/S5XBc1Pwj2YTJc6qbqXrJJSUlvjxVf8AHH3yQM1/KoICMEbbjjjsCTuel9+HCT3qvxYned01NTU45phUrVvh+VcwIxwqNDZKDxrlwARMmS+nzkCCD/pNkqoVYSGSF9XMVFqd5QeXFOjs7/diiNldUVPjjSo6XUbv77rv78eCb3/ymP18LvZ6guCi2iIiIiIiIiIiICArMpL755ptZyQuC3GthQXFwKzitdvIxsOkVX1VVlWdIwlWBGEntvpROnukr5GM7Ro0albO7iVwJLS0t3u0oWb311ls55WAks/Ly8rwr2o11MRcaYVJXuK88uJWqgtTFiKt8yo033uiD9lUSaPHixfzzn/8E3CoOMqUyampqvC4ogaKystIzC5MnTwYy8hs7dmzOvu+9hfAdpIvwh7oeJrDod3rXI+GOO+7g+9//PuAYdnDlY9IbXIhFbm9vz3GTQ3YRb8i8i7feeqvPmNTw+dKJf2FCg8YVlSR79NFHvdtX7RkzZoxf+d99991AJjxo8eLFvs+IRWhtbfUMkmSvxBOVNip2aIyoqKjwf0tXdt99dy9feW3Cfpgu5F5WVua9DdpZRudPnz6dY489tuDt2RCIEQ93tRGDpHcceuakR2GyplhTjSHLly/vVy7dpUuX+vendk6YMMF7m3RMbFrImoclqyQP6c4999wDOMZRm59IBz744IN+waSGUPlGsYPyTh5wwAH+HB0LmeN0SNS9997L1KlTgeJOTFYJy9GjR/vxPvSyiCmXd1byKCkp8XoRejv1mfqL5pp58+bllJmqrKz0jLPm443Rl8ikRkREREREREREFB0KyqQuWbLEr2rDGA5Z8lrNabVWVVXlV3+yzIGclb2OhTGHui5c9SiOs1iY1HwYNGiQl43aJ5bHWutjOUL2WSuadLxcS0tLj/bGLTTESikeSmzlsmXLPNul+J/999/fs2JXX301kFndfvvb3/aMgAr3L1u2zMePffSjHwUysqqoqPCxMvosZAm017fO6ezs9Izbbrvt1mvtD9HR0dFtia3uWG95Bm677TYAZsyY4UunzJ8/H8guH5VmqVesWJETyxmySNI7/f/aa6/x2c9+dmOb2CsIV/tpea1bt46HHnoIyC3WPnToUM+Qa9X+3nvveZZdK38lCIwcOdInEUl2lZWVnu0Xo6DyRvneXzFB4184NmjbYHkhhg0b5uWQZs9DJlX6ExZtV/9QLN+KFSuKpsSd3vfQoUM9K55OCgw9btL3iooKH8OquSiM4+xPTOqyZctymLIhQ4b4MVUMcdpjk4buIf1XMup2223nmVQhjAXuL3jggQeAjF6o78+aNcv3E3k0Qyg2NSzv1R+g5ww92iGbqQ1w5HnQnNjR0eHnTvWphoYG72lU39A48tJLL/HlL38567s7Ozv9GKGYb8W2bwgKaqSGu5eEO5XoBYfuFnAdRoNKmMyRHmjC68L9ZyF7cFawfDGjo6PDTwLpxLDOzk4/kEqOoatcxl+4+0s66aGvMW/ePJ/Zp06hEIbdd9/dTwp/+9vfAOeuVnUD1W678cYb/b3UKTRYhAsQdUR9z8iRI/1kI/0bMWJETjUF/b9u3bqC7dG+sRO53vfMmTO9q1k6rjYfdNBBOXsujxgxIichTCgvL/f9Q30uTKZKP1u4Y1yhkTaMQleUjA9Vdnj66adzjLGwVqcmF91z4sSJ3t2lMeGQQw4BXEiSzg9rM6czpKUrTz/9tDf6+gLhjmyhoRHWXQ5xzDHH+D6gChevvPJKVsUMyPSPfDVily9f7nVOWe/St/r6er/jm3Yl6iuo744ZM4YFCxYAGT0KF2wyvDTHNDY2+vec7jtjxozxY1R/QENDAwsXLgQyC4m1a9fm7BoUzjHpvldaWpo1XoJbsILbqU0ylR4qzKLYEY5vMpa22247IKPPgwcP9rqgMWbw4MHd1o5WCIyIjWJcyIZEWDq8EDKLz3TN49LS0qyd5yDb7kqHir366qv+2nQ9YujZDm7R3R8REREREREREVF0KCiTGpay0Mq0pqYmh2LXyrapqcmv5kQth7sc6Jis/dWrV/uVkFi0kpISv1qUe7QvmY/1oby8PItJDtHR0eFXIVr5NjY25rj517cjSk9rdG4K9G4HDhzoXcZK0tD7r6ur824GHRswYIBnXnUP1bJbvXq1b6NWabW1tX7lq9WidG2rrbbK2ZGstrbW7yqV3n1p7dq1BWNStbJetmwZV111FZC96gQYN26cb5eeY9CgQey9994AHHbYYUBGHs8880xWUhQ4FlGuXN1L8h4zZoxnaKUT69at83+nV9HhDj6FRr795cGxp3LNSx+qq6tzVulq/7p163x79V5bWlr8Dilih1XWbK+99vLtlNza29v9d+m5xM4/9dRTBRtPQmY07Y7NF56RD0o2PP300wHnTRADfe+99wKuXJkY5TfffBPIeGOGDx/u+4/G0W222cZ7LsSaiT167733PEvd10yq2MKlS5d6OSghJEzMDD1P4HQovdvfc889BzjdkYz6A0LGTzqzePFi3650wlRXCYpiyDTe6r0vWrTIy0puf43dxYrQiwuuRJ3c1ZJX6DGRrodeO50nfRKqq6t5+OGHgQyTWmwsKmTmk3Xr1nk5yKMJmbaGO2iBG3/SHl7ouhTXzJkz/Zgl70tdXZ0fW+XB2RhEJjUiIiIiIiIiIqLoUBAmVSva0tLSnBV4uAd2eieU8P9wT+l0cL9WApWVlX4nDO07PGzYMG/5i40pFoT7Yqt9bW1tfuWVDngPVy461t7enlOKKCzyno4fGTBgQJ+UoArjvfR86fa1t7f78h2KVZkzZ45fiem8T3ziE4Bj9hQ7I/a4pKQkZ69l/W5qasoqPQOOZUkzjFoFDh06NGunrkLgmmuu8X3ivPPOAzKM6pIlS3zAuljN0aNH+/aJdRYbWF5e7hPJxBa0trb6961Vv5iO5uZmvwIWkxZuoJF+P5tzQwjFhd56661AxgtSVlbm2R/1+6amppwyQvq/vr7e655k0tDQ4GUipkBlqp566ik+/vGPA9mbGYhB0nfr/puyc8qGorsd4qy1/n0qYeWFF17wmzmoHNvJJ58MwBVXXMH1118PwE9/+lPA6bt2adOGITfddBPg+p9YpfPPPx9w70bMqZIf5cEaM2ZMl8k3mxuS23777ZeV+AHZGzWk457D8VH9Q6zwk08+6WOV+wNWrFjh9T9MTO7Oy6b2y7PU2tqaMwfpXqtXr/Z/a3zYnB6XniBM/AO46667vP7KKxV6ZNPJUKNGjfLnyTOnPrLddtv5satYEgjzIYwF1fvSuHf//ffn7AyqsTPMEwrLg4blyoAsD6e8ECrqX1tb6/WpJ7oSmdSIiIiIiIiIiIiiQ0GoErFcDQ0NOZb26NGjfVklZQ6G286lWb8wk0zWuFYxixYt8qt4rZwXLFjgVwXhXs7FBmWftrW15WRoa0VWVVXlVzYhW5GWkeRRUlKSVfQf8PGMmxvK1h86dKgvDaXMWb3/6upqxo0bB+C3Iz3wwAN9nGHIBguSQ6gTet9h2TJB91DMzZFHHpm1L3GIysrKblmsTYHiKpcsWeJZ/3fffRfIxAYNGTLEv2/pRFlZmfdCaIWv1XxpaamXjfpcqDOSo9jnMN427BtidiU/sYabazvIlStX8oMf/ADI9HGVgWlvb/ftD2PZ06v7EGG5KMjOfpeXR4z5qFGj/LuRV6ajo8PHwosxEDu1ZMkSr0u9vSVi2K+ffvppIPPOVWLsww8/9EyqZDVmzBg+97nPAZmi63re733ve9xwww0A7LPPPoBj1lXCTSy9srcbGhq8TomBHTx4sH8f8kyovz7++ONFsy2qYmMBLrroIoCczSvCcTSsJCNdUcycNm3Q1o79BXV1dd6Dov5eWlrq+0l6g4+Wlpac+aStrS3HmxVmceuYvqeY59kQavt7773n3736lzxSYfy1fofjjfqL/p8/f773cGmjEHkxiglhnoLen7xpDz/8sLfFwg08IHtbVF1XU1Pj5y7ZHjpn+PDh3hsmHQvv0ZNybgUxUvUgAwYMyHG3TJkyJWc3l3RHgGyKXvdQoyWYIUOG+AFVxxoaGrwREu7DW2wIA4jTg0Qoh9AdC65zqIOkazi2t7d72cg90VdGqnaEuvzyy33ZGg1q2sVo4MCBWbtYgDPAZHCp48hIqays9LKRsVFZWekn5PSxAQMGeL3Q5BoatYL0r7m52Q9kvb2DypNPPgk4F4vkIWNdJWNqa2tzSqlVVlb6yUbtCmu+SkZhm9I1ImVM7bjjjn5RoOuGDx/uz9dvGUHl5eV5Fwq9Ben297//fS8DQX2+oaEhx53c0NDg25tOkuro6Mipp9zR0eFlkXbFdXZ2+vZqwho7dmxWog1kFg2NjY1cc801APzoRz/qYcvzQ8k+3/jGN7xOql9octx1113Zc889s45NnDjRTxrf+c53gEz5tkGDBvlnnzlzpv8ujROSrQzYmpoa/861uJkzZ44PMdl3332zrm9paWH77bfvlfb3JmQ4dTe2hslBoXsT8MmVYXhaf0BYe1p9o7KyMqdkkBDuchcuYrtarJeVleXU6ZaeFDvkll+6dKl3f8tGePHFFwFHfOk8JVc1Nzf78UUyVV9dtGiRDyFSSEwxGqkKDSovL/djuXTh1Vdf9celJ2HoQjrR0BjjDVy1WeesWLHCkyiywyoqKrxu5SOS1ofo7o+IiIiIiIiIiCg6FIRJDV1lWqWJOWxubvYrvXD3AyHNeFRWVmbttgQZJqmsrCzHRQ4Z1qfYApjDVb1WGwMHDswJThfKysq6lZXal8/1KUauryAX4O233+5DG7QvsBiowYMH+6QE/Q6THsTIhy4Frci0klu4cKGXm9ocMgha5UuO1dXVOas5yb+pqYnjjjuuN5qfg7PPPhtwO7coKUgMp5JXmpqasoqkg9N1hUmkS72Ul5d72ehelZWVnh0YOXIkkGEBS0tLvR6pzevWrcvZmUr3mjt3rncTFYJJveKKKwD3nvXu9M61yl+1alXOZgPl5eU5bvjQu6LzwrJtaWZS7cmXmDVs2DDPKotxlr6Vl5f799XbCHfykRzE4IjZe/311/3mDkJbW1tWMX7ILkcneYgZGjx4sJeHdOull14CnDzEjOqe48eP9+dr3JL35q233ipYiMymIF9SlKB2hbqj8/KdX8wJMWnU1dV53VGfCj1W6c0bKioqcuQR7sqXTtLVd0BmnO0vuy7puadOner7icYNHauvr/dMqtjWvffem8ceewzIhN1onqirq/N99JJLLtkMregZ1JaKioqcMWLWrFlMnz4dyLDiGm9WrlzpS7DpHsOGDfPhUtrJTx7bvffe23sKzzzzTMD1H42fPUmyLL7RJSIiIiIiIiIi4t8eBS1BVVFR4VdwIbujRAUxF2Hh6jSbaIzJWuFBbtkZyGwB98gjj/h4wnRiTDFBrFhFRUUOE6GVe2trq5eH2pyPtdBqsK2trdskor6CWFX9DmN2tApX2Yq6ujq/itOqLmRGxfxceOGFQPZKX4yh2K/q6mqfQCamdu3atf4e4V7EOqdQW+nqvR1wwAEccMABQOYdKTZ1yZIlPpZYnoeWlhYvN71b6URY9F3M4PDhw/32l2L8fvWrXwFw3XXXeXZV15WXl+dsT6xV8vLly3PKt/QmVPZlwYIFPk5Z7yQM1pd+h9vr6bnC0luQnfQhvQkZZ8kwLLeVjrttaWnx91VsY/iOFJ+p99hbOPbYY/1vJXI88cQTQCb2q6yszLOYarMxJid2XaiqqvLxZqF3RbJXjKmSG9977z0uv/zyrHNqa2s906QtVtXHVq1a5eWh5KpigN6pdEFjavi+NSeFHiidH8qqL0r49RS33XZbVlIuwDnnnOPnZPWDMFdE7UvHq+b7bM2aNb7cmRiz/rD9OLjSU5C9tbgg79GiRYs8Oyj7oba2loMPPhjI6EqoO2IYX3jhBQCmTZtWoBb0HBorBg4c6L10oS2hknS9CY2nbW1tfs7qiU1WECNVBljoRlFwsTHGJ8JMmTIFyLi0mpub/eQjQ6K2tta7fzWZhvuPaxI55ZRTAGekpl2AxQgNIAMHDvSKL0UKE8r0UsNdo9I7LOl3aWmpHzAkv2KHFhf63duQMdvXCAd79Qnp+uTJk/1v1a4LoUFFOhDWnd2QxI6jjz4acAasDFAZYZ2dnVm7GUF26IwM/0Lg+OOPB9zCVYaX9Fe1YwcOHOj7uAa9kSNH+nqdMuDVnmHDhnmDKtxFRYsgZaXr/FdffdUnIimxaOzYsX6MkXtbk1K4g1ohod3F9DuE9EHGZ11dnTdC8kFufhmd64OqT2icCTOelXgnvRs3blxRJk6lEY6f4WJnfedDZmJNEyjFiPHjx+fUeu7o6PDtSVc7CPu6UFpamhPiEIZEffKTnyzMwxcYr7/+OuD6QWiAQkbXp06d6g1Suf1nz57t5ycZs7q+rq7O2zb/93//BxSnkSqbwlrr36XsKsjMKdKLNHHRFdKLwM7OTt9Pwqof6fCijXr2jb4iIiIiIiIiIiIiosAoaJ3UYcOG+SQq7Xc9duxY73pNu6ZD122Y6JJmkEIWUpb+oYce6q8Ny9cUO0pKSnz70zv95HO/tLe35+wOEZaDUcml/rDq/3fCpiSXbGopNbloC5UU1lNIV4855picY3J99xbOOuusXr1fXyJdx7G3ofJV/RldeRhKSkpyaqIaY7qtp9qf0NHRkZPgtWTJkpwwH41HIWsass1CmkmbPHlyznlhWFoxQvOr5smysjLPfipERZ6ZpUuX5uxmJ/c/ZJhU3WvChAle18TKLliwoGhqB6dRUlLi7YvQS6Z3ma/udL6+kE401HVhCKY8NxUVFXmPb/Azb/QVEREREREREREREQVGQZjUsJiwrPA99tgDcHtfa3cTxXkokN0Y41nWkDVNl6BSTFFjY6OPz1Kh+JqaGr8qLmYmNUwuS+8qpVVHR0dHDgPX1taWEyek2JLGxkYvt3CzACHfSjkiIiJiS4NiBjXWhRt+pOeRsrKynL3qe8L4FAPyje2TJ0/OmmMhwxKGrGvoudMclE50KSkpyfmOYi/NddpppwGZAvzNzc2e9VRJKbGh9fX1vhScbIvq6mofn6qERhX/DyHPxgUXXMBDDz1UiKb0GHpn4cYEoW0R9oWurt0QhDqkPtfa2urzCRRHvzGITGpERERERERERETRoSBMqlahYVmUOXPmAHDHHXf4DFtl9IrxbG5u9pUBZL1PmTLFW+fhygacpf6JT3wi67tbW1v9qjHcy7nYMHXqVMBlFKe3wtTKNGSixby2tbX5eJj03uorV670sUcbmskbERERsSVA8055eTlf+MIXAHjwwQeBTLxgaWlp3kL1iltUKbSwqkI+dqlYEcYPihVevXq1Z8pUUUSetsGDB+dk/odsaZolbWpq8vO2YhqLPX5XVT4UW7rXXnvx9NNPA+Rk+be3t/PAAw8Amez+9vZ2LrjgAgB/TOXn6uvrOeKIIwC49NJLgUzJv2KCKnCElS1U9QN6jw0P2VmVE5w0aZLXp7CiwIbCbIKCdXmhaPWrr77a16k85JBDAFersZC4/PLLvaAUYtBFSYje9nn3WJByL6jUjso0NDY2euNUA05HR4cPbZCxrgSUUaNG+UG2BygaeRQJojyyUYgYkSiTbER5ZGOj5JEvnElz0bPPPgu4erevvPIKkCmBuN9++3mDVQl7IgLa29s3xUjd7PIIwxmESy+91NeyDXeaA2dUyDiVwdbe3p43TAJcotDtt9+edf98yVpdoCj6y4IFC3J25bvtttsAtzhJJz19/etf9yEDquv9xS9+0R9XPW8ZfRth8BWFPKBoQgHzfnl090dERERERERERBQdNoVJjYiIiIiIiIiIiCgIIpMaERERERERERFRdIhGakRERERERERERNEhGqkRERERERERERFFh2ikRkREREREREREFB2ikRoREREREREREVF0iEZqRERERERERERE0SEaqREREREREREREUWHzWKkGmPmG2MO6+LYgcaYdzfHc0RE9HcYY041xjzbzfE/GWP+a3M+U0TxIOpHRET3SPcRY4w1xsR9xIsU3Rqpxpj64KfTGNMU/H9SbzyAtfYZa+1H1vMceY1cY8yJxpjpxphtEkXr802WN4fMtmQk71oyW22MedQYM7Gvn2tzwxhzgDHmeWPMGmPMKmPMc8aYj63vOmvtkdbaO7u5b7dGTLEg0IN1xpi6RBZnGmOi94eoH/lgjPmSMeaVZOxYkhjkB2ziPZ8yxpzWW89YSPw79pnUfLHMGPMrY8zgvn6u/oL+MN92q7zW2sH6AT4Ajgk++22hH24DjM6jgT8W+jk2BhsqsyIxqPv8GbrAMYn8tgKWATf08fNsVhhjhgKP4No9AhgPXA60bOJ9i/V9d4VjrLVDgEnA1cDFwG35TjTGbPCG2f0dUT9yYYz5BnA98CNgDLA18HPg2L58rj7Av2Of0XyxJ7A3cGkfP0+3KMJ+VtTzba+tsIwxo4wxjyQruFXGmGdSK7jdjTEzk5X/vcaYquS6g40xi4L7zDfGXGyMmQk0GGPuxg04DyfW/reS80qAw4HHgL8nl9cl5+xvjCkxxlxqjFlgjFlujPm1MWZYcq2Y1zOMMYuTVff/6y1ZdCGfg40xi5K2LQXuMMZUGmOuT55hcfJ3ZXJ+DqNhAreEMeYoY8zbyar5w/D5jTHTjDGvB6vpjwbH0vIttg7jYa1tBh4AdgYwxhxtjHnNGLPWGLPQGHNZeL4x5svJ+15pjPmu6SbMpMixA4C19m5rbYe1tsla+7i1dqZOMMb8OFn5zjPGHBl87pmfRIeeM8b8xBizErgX+AWwf9JP6jZzu3oEa+0aa+0M4IvAfxljpiaMyU3GmD8aYxqAQ4wx44wxvzPGrEjkcp7uYYzZxziWbW3CuFyXfF5ljLkr0Zk6Y8zLxpgxfdTUDUXUjwDJuP4D4Bxr7YPW2gZrbZu19mFr7TfXM84OT+atFYm8HjHGTEiOXQkcCNyYyOPGvmvlxuHfsc9Yaz8E/gRMNSnPqtlARtwYM8w4W2FFMpdcapwtUZm0dWpwbo1xLOTo5P9+Pe8W63zbm26Ai4BFQA1uJfsdwAbHjweOACYDHwVO7eZeJ+JY0mpr7YlkM5LXJOfsA8y11tYCn0w+q07OeSG5/6nAIcAUYDCQHmQOAbYHPg1cvBkMmrE45mMScAbwP8B+wO7Abrg2begq8Dbga8mqeSrwJIAxZg/gduBrwEjgZmCGBuUEoXzbN7FNBYMxZiBukH0x+agB+DJQjXv+s4wxxyXn7oxjTk7CrQiH4Rim/oh/AR3GmDuNMUcaY4anju8LvAuMAq4BbjPGmC7utS8wF9cnTwbOBF5I+kl1YR6/MLDWvoQbYw5MPvoScCUwBHgeeBh4A/feDwUuMMZ8Jjn3p8BPrbVDgW2B+5LP/wunKxNx/eVMoKngjdk0RP3Ixv5AFfBQF8e7G2dLgDtwY/LWuHd/I4C19n+AZ4BzE3mcW6gGFAr/Tn3GODf1UcDqTbjNDbi2TQEOws03X7HWtgAP4uZO4XjgaWvt8i1h3i3W+bY3jdQ23MNOSlaxz1hrQyP1Z9baxdbaVbiOsXs39/qZtXahtbY7xV+fq/8k4Dpr7VxrbT3wbeCE1Arm8mTV/SZuoDox3416EZ3A9621LUnbTgJ+YK1dbq1dgXPZnbKB92oDdjbGDLXWrrbWvpp8fgZws7X2HwnLcifODbhfcO2GyLcv8fuExVmDY8v/F8Ba+5S19k1rbWfCGt2NG0gAvgA8bK191lrbCnyP7EVSv4G1di1wAO75fwmsMMbMCNiKBdbaX1prO4A7cf2uKyZjsbX2BmttexG/743BYtxCD+AP1trnrLWdwK5AjbX2B9baVmvtXJzsTkjObQO2M8aMstbWW2tfDD4fCWyX9Jd/JvIvWkT9yMFIoLabib/LcdZau9Ja+ztrbaO1dh3OgDuoi/v0V2zpfUbzxbPA07iQj42GceEPJwDfttaus9bOB64lMydPJyMbcAb/9OTv/jzvFvV82yMj1RiztQkShJKP/xd4D3jcGDPXGHNJ6rKlwd+NOGazKyzcgMc4iu6N1HHAguD/BUAZ2YP1wtTxcRvwvZuCFQmlLuR7xg19hs/jZLDAGPO0MWb/5PNJwEWJy6EuUb6JqftuiHz7EsclLE4VcC7wtDFmrDFmX2PM3xJXzBrcCn5Ucs04gnZZaxuBlZv7wXsL1tp3rLWnWmsn4JjycbiYOwj6UtJO6Lo/Ffu73liMB1Ylf4dtmwSMS+n9d8j09//GuclnJ+7JacnnvwH+DNxjnCv4GmNMeeGbsWmI+pGFlcCoblyoXY6zxpiBxpibE7flWlzoWLXZcuI1YcvvM8dZa6uttZOstWfTc1Z3FFBOrq6IIfwbMDCZh7bBEW1i7/vzvFvU822PjFRr7Qc2O0GIZOVxkbV2CvBZ4BvGmEN7+Fxpizzrf2PMWBw78GoX54NbPU4K/t8aaMcFBgsTU8cX9+RhNwLp58z3jHqGBmCgDiRtztzI2pettccCo4Hfk3HFLASuTDqtfgZaa+/u5jmKEsmK9EGgA8ccTQdmABOttcNw8XNyYy4BJuhaY8wA3Gq/38NaOxv4Fc4Y2ejL1/N/v4Fx2evjcYwJZLdlITAvpfdDrLVHAVhr51gXOjQa+P+AB4wxgxKvz+XW2p2BjwPTcC6ufoOoH7yAY62O6+J4d+PsRcBHgH2tc2srdEzjSn+Uh8e/aZ9pSH4PDD4bm+/EFGpxLHFaVz4ENx/h5tkTk59HEvYdtoB5t1jn295MnJpmjNkuiX1ag2toZy/dfhkuRkQ4EnjMWh9OsCL5rvCcu4ELjTGTjStJ8SPg3pRL6LvJSnoX4Cu4xIHNibuBS40LwB6Fo8zvSo69AexijNndKSmwhQAAIABJREFUuCSzy3SRMabCGHOSMWaYtbYNWEtG1r8EzkxWQcYYM8i4AOghm61VvYTk+Y8FhgPv4OKoVllrm40x++DcLcIDwDHGmI8bYypw8uoqDq+oYYzZ0RhzkckkcEzEDYovdn/lBmEZMCGRUb+AMWZowuLcA9xlXXhOGi8B64xLThhgjCk1LlnkY8k9TjbG1CRuTiUEdRpjDjHG7JowZ2txk1RvjVsFQdSPbFhr1+DGzv8zxhyXjOnlxsXrXkP34+wQHPNWZ4wZAXw/dfv03NMv8O/cZ5KQjg+Bk5M2fRUXU7u+62SEXmmMGWKMmQR8g4yugDPcvogLIZkefN7v591inW97MyZ1e+CvQD1uZftza+3feuneV+EGmTrjstiz4lETqvlK4LnknP1wQcy/wblv5gHNwNdT930aF6LwBPBja+3jvfS8G4orgFeAmcCbOGb4CgBr7b9wGat/BeaQWQkLpwDzjXNRnYnrNFhrXwFOxwX/r8a179QCt6O38bBxYSRrce/1v6y1bwFnAz8wxqzDTTRij0mOfx03KC/B6eFyNrEsTx9hHS6h5R/GZeG+CMzCsT6biieBt4ClxpjaXrhfIfFw8q4X4pJfrsMtJnOQTDDTcC64eThW5FZcQD+4pM23Er36KXBCEhs2FjfgrsUNzE/jxo1iRtSPFKy11+IMiktxpMVCnOvy93QzzuJCJAbg9OVFXLWYED8FvmBc5v/PCtyM3kDsMw6nA9/EuaB3wSWJbQi+jmNi5+Lm3Ok4WwIAa+0/kuPjcJUE9Hl/nneLer411hY1A50D4+KOlgJTehqsbVw8yTyg3BZhll3EpiNhz+uA7a218/r6eSIiIiIiIrZEFHK+7Y87UYwAvtvH2YQRRQhjzDGJq28Q8GMcazK/b58qIiIiIiJiy8Lmmm/7nZFqXRmRm/r6OSKKEsfiEiIW48JPTrD9zVUQERERERFR/Ngs822/c/dHRERERERERERs+eh3TGpERERERERERMSWj2ikRkREREREREREFB262qFjQ7DJcQJ//KOrInXUUUd1e96aNWsA+Otf/wrA5z//+dyHScIWTJdbVOegt2t6bbI8nn3WVZmaNWsWAJWVlZSWuo1PdthhBwAaGxtZvdptTXzAAQcA+P/Hjh1LdXWPt9ve7PKw1ua8r9bWVhYscBt+dHa60nurVrnNUtauXUtbW1vW+Z2dnZSVOTXWvQYNGgTA5MmTKS93G6GMHZtby7m93RV20PUpFJ1+9DEKUQNvk2Xyk5/8BIB161xN7euuu4799nM7Ef7Hf/wHAO+//z4VFa7sp/rKqFFu45Szzz6b0aNH9/Tri0ZHuhr/Vq1axRNPPAHAhAmu9nZjY6MfJ/baa6+c+2zEGJpGUcijo6PDj5tprFy5kt/+9rcA7LTTTgDMnj2bDz/8EICrr766J1/ZFYpCHo2NjcydOxfAt7OjowOA0tJSBg50Ne//8Y9/AHD00Ufzt7+56pE77rgjACUljs/ab7/9qKqq6unzF4U88uHuu13N/TfeeIPBg93mbPq9cuVKb4NceeWVAAwZ0ivlT4tWHn2EvPLYlJjUjbrw/fffB+Daa6/ln//8JwDz5rlKBZowSktL2W233YCMgfLOO+9QW+vK9elZt99+e8ANMldddRUAw4YN89epQ60HRacgZ5xxBoCfVHbaaScvt6lT3WYyQ4YM8UbVl7/sNvlobW0FoKqqio9//OM9/frNJo98E+pjj7nyhB988AEffPABgDdW6+vdzrudnZ1+8pHx2dbW5u+jz/T+hwwZwp577glkdGbKlClss802eZ8n9Ux9qh8NDW7TlEcffdRPMM899xwAe+yxB+D0Y/78+QDeeP/Yxz7G4sVuMx3JtKamBoA999yTMWPcjodHH300wIb2FSgyI/WVV14B4MADDwTgS19ydaYrKyu56SaXV/nMM8/4czSuHH744QDceuutAJx11ln86Ec92uob+khHNDZuyLs7++yzmTlzJgAjRrjt20eOHElzs9udWZPz+r6vP4yp3clFBtjJJ5/sx4mDDz4YgCVLlvi+9c1vfjPrd9bD9DMi5Ic//CEAy5cvZ+VKt2OlFidLliwB3Bjy+uuvA/jfv/3tb7nhhhuyzpfRes455/D4466c+He/+10g0wc3AEUx5y5atMj3CRnrV1zhyua2tbWx6667AvDrX/8acG3WnNvU5HZcle5st9127LzzzkCGHNkIFIU8igh9Y6S+8MILAHz1q18FYP78+X4lNnToUCDDZI0YMYKRI93OWhpEq6urvRGmyVqD7bBhwzjkkEMAp0jgFGUDB/GiU5Cvfe1rAF4+gwYN8oOnVrT77LOPH0x23313AG+YlpSU8JGPfKSnX19weeQb5DVJyhhfuHChH0AGDBgAZAbU6upqb2y8/PLLQGaQgQzjutVWW/nrdV+xzkcddZT/e/LkyV0+F32kH2rrj3/8YwCGDx/OpElul766Orfpixjg1tZWXnvtNcCxzJA9YchwlWEa3l+D7YUXXpiXZc6DojJS3377bQAOPdTtvKyx5KSTTvI6sXz5csCxrJLLHXfckXX9bbfdxn/+53/29DGKZgyZPXs2AH/6k6svLqOsra3Ne6w0jnZ2dnrj44gjjgDwMjj00EP9gr8HKBp5/OIXvwDgvvtc/XEZpp2dnbz00ktAxqiw1vqFnAyOd955B4DPfe5zfOc73wHwbPxGoE/kIf0/7bTTADdfytOg9/3kk08CsPXWW/uxVIbsNddcwwMPPABk5h3p1WGHHcZDDz3k7wtw113hhkzdok/k8eabbrMteWJbWlq8/mu+fOuttwBHEInYGD58OOAWdSJMNM6IZV28eLG3NzRfnXnmmf7v9WCzySO0iUIWPQ0xxh/72McAx8KLRJTMJk6cyM9+5va1kIx6CXnlEWNSIyIiIiIiIiIiig6bEpOagzQjVV9f72NgxPisWLHC/63V/4knngi4FYuulRv/8MMP96sdsavjxo1zD19W5lfKX/mK2/ntvvvu2xgXZlFAsahazSum7vXXX/csWNgmreL0WWNjI5A/7rKYkNaPhQsX+lAOsel77LGHX7Uef/zxAP6cqqoqzjvvPADPLpaWlnr2vaXF7cgm1qS8vNyvAt944w3AyVhMkZhUPc8mxuP1Ch599FEgE54waNAg3349r1jTtrY2TjjhBCCzwp87dy5Lly4F8LFmW2+9NQDLli3zuiUZz5gxw4eZ9CeIGUh7gq677jo++tGPApkYzLa2Nu/Sl5dCLIIYpv4EseBySb/99ttep8Wehx6GffbZB4A5c+YALiRCTInGVN2rpqbGj68KMTr//PN9HytmvPfeewBcfPHFvo+I/QxZUMlK8cn19fW+vwnjx48HXIjNscceC2Rk9KlPfapQTegVSKfVN9auXevnYbVdXplRo0Z5BlXzz6xZs/x4LP0Q67xs2TLvyVEfLGasW7fOexI0fpaWlnqmU2FVe++9N+BitOWF0Py6cuVKH7cuGWmeCBlTealuueUWzj///MI1aiOQz1Oezz6SZ2mXXXYB4DOf+QzgPJCSkTyVv/nNb7yHV95tYSNCgzYY/cuai4iIiIiIiIiI+LdAQZnUefPm8fzzzwPw97//HXCxT5/97GeBTPKGWI3m5mbPdJx88smAY9vSqxdZ9rfddpuPP9RKoLa21rNnPQh07xNIRlqpKLu/ra3Ns2Fh2/WZVrlKniktLfUMQDFB7yG9wlq2bJlfiWmVO3ToUM+IXnfddYCLgQG3ahWTqjZba/19xaqfe+65AGy77bb+XmJe6+vrPdOY7zn7WlfEpCrWevTo0V7fxX6IFSovL/cMsfpQTU2NZ04VM6brqqurvc6onTNnzlxflYOiRprNGT16NP/617+ATHJVeXm5j52SnNR+sdT9CfI8aaycOnWq72PKOpaO/+lPf/J9a8qUKYBjxcQuqW994QtfABxLKzZWnq7TTz+dBx98sLCN6gUoznLlypXeAyVWUePAuHHjPCsYsovbbbcdkOkr6gvV1dX+HmKPip1JFUOs/m+t9YxfZWUlkGHjq6ur/fyqdra2tvrzFNMvXWtpafEsvcaStWvXek9OsWH+/PmePdbvjo4O/+waD6Qf69at82yixpaysjLPzGssDuM5NX6Kba2trfX3kxz7ChrnQm9hPrtIsf3yPinpNh9uvvlmtt12WwAuvfRSIJN4VggvdmRSIyIiIiIiIiIiig69Sp2kWahhw4bxiU98AsjETe62227ekl+2bBmQyRqbP3++X+UqBmro0KH+voqd0bFjjjmGv/zlL0Amw33VqlWeSe0vUGZhOu6rubnZMyNawa1ZsyZn5St5FiOLCpn4uDRTt3jxYq8DqllojPF/f/KTnwQymYZXXHEFl112GeDizgCmT5/uWYEbb7wRyMRPNTQ0+GPC2LFjfUyvKk+IRampqelT9n3FihW+PJbYkJKSEl8jVyyPnnHQoEE52cihDoRsEDiGRIyAMHz4cB9LJVatP0Ash3RL7F/IGolxzsd6pMeg/oK5c+f6dul9VVZW+vFV8hB7euWVV/pYTR1rbW1l//33z7pvyPzIU6NxdMGCBT5DWuV5ihFijysrK30lA40F8lI1Njb6mGXp/ZgxYzwTqD4WlhPS3+mxpFhx++23Axmms62tzZfxU3k/9Z/333/fzyP6vXjxYn+eykR++tOf9sc0J0mm06dP58wzzyxso3qIhoaGnPhTY0xOpYaQaZSs9FllZaUfX/SZGMOOjg7fr/RZc3OzZ+nlvehrhBn96ee94YYbfN857LDDsq4LY0xDj5sqC11//fVAhkktBApqpL799ts+SWrRokWAM7I0scqdpED9iooKT5nLvbR06VKOO+44AO6//37AhQCAK0MkN56o/Jtvvplrr7027/MUKzSJalKQEdXW1uYHBCU9rFq1ypdhkstbRqsG5mJCGMIhhDX79L5Dg1vGlTqHyqGsWrXKG6nCzJkzvXtf7f/e974HuPAATT4qR7Rs2TK/eYTcdnfeeSfgErXUEZV8tTmhPgIZo2HhwoX+WaTr+t3a2ppVFkTQAKzBNhxQFV6he0ycONEbav3JSJUhJV2R0dnR0ZEzoYQhIRqgdb4WA/0FCxcuzAl7Kikp8fJQO9Nl+0KMHTvW61fa8CorK/PXhuNJfzBSV6xYAbi+m17EaGxdtWqVXwTLsB85cqSXm+SoftXY2OjvoXmn2KH5RKWUpk6dyowZMwB4+OGHgUwpqjvuuMOH3T3yyCOAGys1bh500EFAJpRi2rRpnkxRKcRiTqpbu3ZtTrhZWVmZX3hIx0PDVHOA5uEw0Ur9JdQvzV0ad4cOHeoTU4vFSA3HwjRZJLsK4JRTTsk61tbW5tsV2lNnnXUWkLHTtKnKhRde2C3RI7mlwxC6Q3T3R0REREREREREFB0KkimhlcjFF1/sXalyrVx11VWe+ZNrUiWmamtrPcumsjih20UuKpVsuvPOO72rfNq0aUCm1FB/glZiCloWs1xbW+tZLpXI+PnPf+5louQAJY8VI6qqqvzqc/r06UCmyPStt97qk3zC7U7FHKpgsNr+4IMP+tW+EqhOOeUUv/2l2J7/+Z//AdzKWayCVsyvvvoqxxxzDJBJsAoZxL5gUIXZs2f71b7cRUOHDvVsmN63GLRBgwZ5l5sC9BsbG/1x6U5YLiXt3p48ebJf9UvO/QHpMmxhsWq987AM05aCOXPmeB0NywOlGYkwuU4hHmIOww1P0lsKW2t9XwlZVrnBixkqRF5aWprD2EhPhg8f7llkFarfdttt/fiTTgAKE/PUr4odaW8TZMpzyY2vMW/gwIHeCylGdNy4cd6ro/JlYmKPPvpoP6f3BzQ1NeWMEdbaHEZU3j5jjO8nYgTDhFqNKWHpKbnKNZdVVFQUnYcm9LBobJAuPPPMM35O1i6WQpj4FYZNKSxAclMi5oUXXuhlFYYHbEoYXWRSIyIiIiIiIiIiig4FYVK1Or/11ltz9hEPVzbpLTyrq6t93I+YpB122MGvXt59910gU8x8wYIFvuD06aefDrhVQX8qqdPW1uZX8Ypf0Yp2wYIFnm1WbNAtt9ySw65qlZKO/SwWKKZY7VSy2/777++3HFTC0KBBg/wqVYyAkoIeeeQRLrnkEiATtD969GhOOukkIDcJxhiTU5pn4cKFnjn83//9XwB++ctfAq5k0de//vVeaXNPoNJJkGGF99tvP//sYrO0ou3s7PR/q5+Vl5d7pl2rVq2cx44d69k3xTjvvPPOeeMWix2KIRMrJt3v6OjIu1pPF7XemJioYsLSpUs9iyy2pr293Y8T6ZJ1paWl/v3LU1NWVublprFS57e2tvp+KuZw8ODBXt7FDJUTGzBggPfcqS+EMafyXCk3oqyszLNn6Vjnuro6r1s61h+hMVfykAyMMX5+lZ6sWbPGjxNi7RWj+/LLL3smtT+UeGxqavJtlq43Njb68lxiCsNNMPSe5VEI7QiNxdK1yspK35f0PfX19V5+fY30FvFhwljoddYcuLFQacew/Jvsl3BDiHzfv6EoiBUXJiXI2BQlPmPGDF8DVcHsGgyrqqp81pgmznXr1nml0UAiqvmWW27hW9/6FpAJ4p4xY4bfVac/ZPnX1dXlZM9p0KitrfVB7Xrxa9as8eEA4cQCGRdoMaGpqckbUHq+Cy64AHD1YLUo0QS6fPlyb4DqOuEHP/iBH1QuvPBC/7nCP/Te5coqKSnxsg3r/KVdl7fccgvgOnRfGqmrV6/27ZNRELoYZZDqd7gPs/rcgAED/ASk5Cjdq6Kiwg8cGqBOOOEEP8j2JygRLu3St9b6z/LtiJM2VvtbSMCqVav8QK+Jdt26dTlGpIyLMGlM54SuSt1Lk2pDQ4P/O0zGKpZJtztofhg2bJh350q3Nb40NDT4sUDjzKBBg7wcNJZKRmvWrPE6I0Ot2JHPeNRnSlTVsbq6upz91/ONOZKPjH/I9K98e8AXC1pbW73+Syc6Ojr8e1Yb9H9HR4fXj3wkl+6hvlRVVeUXi9KZqqqqnCoqfYV8dUv//Oc/A5mwuKqqKp9kJ7tLoTPjx4/Pcd+vWbPGz7HqXwqTmTZtGldeeSWQSUzOR55tzAInuvsjIiIiIiIiIiKKDgX1h0+YMMG748PyFg899BCQsbRvvfVWwK3qVMpAbuARI0b4epkqFSTXcGNjo2cVxYhMmTLFJ1/1ByZ15cqVnj3T6kL/d3R0MHbs2KzzFy5c6I9rBazVoFY6xQRrrXfDa8Upl8nMmTP9KlxM++TJ/z97Zx4mV1Hv/U/17JPJTBJCSAKBsAQIm2yyaFA2gSAIiOy5EHEBeX28V1FxARW8rldxeX0FLxdUQEEuIosIKrKTKPtqAEPIRvZlktmS6Zk+7x/nfKurq3smk2SW05P6Ps880322rqpT9auq72/b1X4Wi3zIIYcAcNttt3H33XcD2Lh8dXV1NtuYn00JitULpdTB55xzDpBXiQ0V3GxiYkMrKipsP9Yx13FK9dOO9oUXXigKsaPddE1NTVHdFy9eXHaxQiFf396YUNfxoVQOa6DH7GNpxerVq+34EXOzceNG+141BlymQp/VH6qqqixzpPEn5qe7u9u2rZjDKIoss5JmuONfstCPiztixAgrhyRHa2pqLGsmWao22LBhg23nNKu1e0M2m7XOUWoHMV9dXV1F5mKtra1W6yW2WTJFplKQbgZVcOP+igXNZDIF5jCQf7euE6L6gBtbVG3lmn7oOh1ra2sbciZVpmPXXXcdALfffjtQWt7V1dXZUKGC+oJkBuTHy5QpU+w40RpEY+Sdd96x2aumTZsGxA700uyceOKJQKGj5qbGVWBSAwICAgICAgICUocBYVLPP/98+1mB55W5YrvttrPZoWR0e/XVVwNxBiCt4JXJoL293eaJ9QO/f/SjH+UHP/gBkF+Zv/DCCzzwwAMAPPbYYwNRvX7F3Llzi9gwJTkoFVz9mGOOsfYw2s1o15bGoMr19fXWqUO7Ltm9PPTQQ3ZHL1snd3cullxM6fvf/37rgPfMM88AcZ9ROCqFIVOWs8bGxiJ7mJqaGvubCur/hS98AYB77rmnH2q8+dD7GzlypN2tii3t7Oy0u2LtgpUxJ5vN2j6jvvDGG29Y5lnG/bLfbGxstLt9125cTKvKkdY83C4kA0oxqb4dlmubqnqLOXNt7MoBra2tdpyLOezo6LBjyw1YDvF4Ehuicdje3m5ljsuUQDxexay7Ia7cEHFphWuHq/ZQ39f/8ePH2z4jm14oZlz1rEMPPZSXX34ZKAx3NhA5ygcKa9eutXLVz2DY0tJSFI4pm83a9tA4U33LxX5d5cxms7aPu3an6gP6r/edy+WKMiS6AfD1DI2frq6uAlZQ95Wyhx8sXHfdddbBWDJd8+Do0aNtNjo5JEM+HJsbigvi+VIsqTQrDQ0NRYzy888/D8SanmOOOQbIr/kuuugiqw2UP9JVV11V8Du9oXxGWkBAQEBAQEBAwDaDfmVSxdwo1/qnPvUpawuhvOqHHXaY9fiXvYvsnXK5nE31qZ2wAv8DHHTQQUDeS/yWW26x7KrsjM455xyb8q0csHbtWrtLU73EnJVKqXbooYdahkPXKyhvWkNQqVwKdqxd18qVKy2Tpd3a0qVL7S5e6VCfe+45AK688krbZ2SnDPlc1bKrUVSAyspK24/Eyi5ZssR6+vo2ngqVNdhQ333mmWes1kA71VwuZ4P4a/eu752dnUW2Qc3NzfaY6qn7oiiy9tyvvvqq/W3dq3KUA5PaU2D1UoG3a2tri5hAMUPlZpMaRVER297U1GTHjBgz155OdXVDNPmpY107PF2v8VFfX18WgewlR7u6uqy38j/+8Q+g0FZXrJn6uZu0QO2iNp44cWKRvZ4rQ8oBXV1ddmyLhXfttYVSwes1V/fFBjxNEOPpMr/qzw0NDXa+8a+T7S4URttR33IZWigcX2qbjRs3DgmTqjF62WWX2fKK/VT/dyNfuPOKH+VDqKystH1HdWpubrbtJK2uxtLUqVPtM/bcc097vfqWPP/dhDt+mCwf/bpI1UtVvLC6ujq+/vWvA3DGGWcAcNxxx1mKWAvMW2+9FYhDCEklpYVrZWWlffm6T4Jnxx135KmnngLyKuRrr73WUtcKtSBj3TRi2bJl1uxBL1qDScbqLty8wH6Oe6ly0gaZfKizSwAuX77cLlI1YGpqauzAuuiii4D8+7v66qv50Ic+BORNSp5++mmbP1hZUaTuHzt2rFXVKbZfZ2enHURqP5lXKHvZYEOLh/Hjx9tFk9Qj2223nW0P3wnMGGMXJVJndnR0WAHs56AeO3ZsgUOIrlc7qBzqj2mGm1ceClX66l+lJgrfYWKoHRz6CtdxQ/JB73fatGk2TqFkqs5t2LDBTqhuDnP1A8kOtcfSpUut48OsWbPss9yFXNqgeqmeuVzObko1Ztw4ulqkSvY0NjbaMaN2UJi69773vQXZeiAmV9K8SPVVqO3t7XZxqveo/11dXUVOY5lMxraXZI9Ut+USK9ZV4/vhxdw1heC2mR8K0o1HXSpDm28e4GY8G0zIzLGqqsrGoJfpjvpzV1eX/eyaJ0geaGzof21trZ0/1AbZbNbWWW2qTV1dXR0rV64E8mOvqampYMML+bn69NNPD45TAQEBAQEBAQEB5Yd+ZVKlQpRBrhv6RexqNpu1jjBS/4rNWLJkSVHu9Llz51oWTCtuqcEff/xxe51CV02aNKmkw1FasXbtWpv5xM8ZLFbExXbbbWdV3trNiHVLa0gQ5QW++eabgXx5FyxYYN+9/h955JH2PrGgMmdoaGiwu7Mbb7wRKFRNSZV92mmnAbETkXJPi2WprKy0qgqxiXrm888/b5MLDGYfkspk4sSJ/O1vfwPyrPrEiROLctFLrZPL5Yp2oRUVFXZX62eo6uzsLEoIsHLlSqu9SDNb5qM3BtR3ZCjlOKX6+45DaYWYDmOM7cuSqfvvv78N8eer7dwQVDLr6OzstHJW17nMssyqnn32WaA4AULaoPHjsmPSBqg99D+TyRS1n+voIjbMZcf8+pfTOIG4j6ufy1lMWq1MJmP7gpsMQZoZ9QUxYWnV1vnw51LIs3677rqr7TO6zs3ip+vE+rnMof6Lbc3lcgUhMSHua2KiBzP7peR4NptlypQpADYcp9De3s5RRx0F5OfVkSNHsnjx4oJyqo+3tLRYLYPGTVVVla2X5hpdX1VVZdd1rkmFZI/WhgpDGpjUgICAgICAgICAskS/Lu+VrlT/ActMCZdccon9rFSmc+fOBeJdv1i2p59+GohX8toV6Jjymr/88st2R3jxxRcD5WMzI9TX11v7Edn9uPm0/fRhY8aMscbsvpG/mIG04dBDDwXgkUceAfI7rLq6uiImq7Ozsygvu75PmDDBXueyidrd/+Y3vwHyfWHMmDGWpRar2NnZadtUz9f97e3tNmyZQmUMBtQGjY2NliHUu91nn32KxpBrO+aHiHGDUfthddavX29t6XRNR0dHkS10OcBnCFzWVKxIbwxgX65JE2QvXFlZafuG7Az33HPPksyRoL6h+0qFk3JTp8rpyGU40hxySbKglHzwbe1yuZxlj8USrlmzxl7vB3J/5ZVX7DGxTOXgROZiyZIlBfa6UGiTLri2vbpOrJgYxKampqI5qS8B2Qcbbh/Xu5dt5YQJE+xaQgy76xilz7qvs7PTji9fS9Xd3W2ZScnPmpoa236auwYjpa6rhZTzsL8m2HPPPe38K98dwIal0pyhfuHOJ2rTUaNGFSXO0Rwyfvx4W2etzRYvXmzlhzSU0qpef/31BWmaS2FAOeju7u4CY1uIVVNyorrjjjuAfMYpNw+unF+qqqqsgPa9rxVFAAoXp5uTF3ao4Rrti35XpgYorsvuu+9uO4ifgz6NcA3zFc/0iiuuAGLvc9XdVS9IcCiertQYt9+CB3qWAAAgAElEQVR+u93YSD2xatUqLrzwQiAvcLTRGT9+fIEDCcRCV6oHd3EIcX+VJ+9gLlJd4aYFqdqlvr7eCjwJSNesQ/1eG5yWlhYrENQerqpKn2XcPmnSJGs+4ufwTjP8hUKpxZl7TG2o/65s0IJE7ZtGyJE0k8nYvqxFamNjY1G2Ob1nd8EhOVpbW2v7iD8BucdkFtPc3Gyfn8a2ch1cIB4TGse+A0tnZ6ddrMyePRuI5YtklCZYTe4rV64sMhspl1ihwrJly4rio7qRDdxMTFDo+OPLylwuZ2VHKXO0tCGbzdp+L1lZV1dn36HU8q45iIgC9737Tqv6vm7dOjs/yQHXderUemYwFqkuVD+REiICa2pqeOuttwD417/+BcBRRx1lTRbklK7ybr/99nZu0ftetmyZHSdqP42fl156qcg05KWXXrLl0tys519//fV89rOf7bUu6d0eBwQEBAQEBAQEbLPoVybVZ/1cFZHr3CJWQOoWqe7cXa7rQKXP2t2KSTrzzDOLftPNzV4OTGplZaVlssSQiE074ogjimKIVVVV2Via2rmJ1Tj88MNTZ+7gOh6onGJSr7vuOlte7dTffPNNu8u/9tprgfxu8JFHHuGhhx4CCuNBfuUrXwGwMXa/9rWvAfEOWDs813FPu1v9V3tCYRaOwYIb084PN9Xd3W3bSP3Dzf6ierkhQAS1qe7v6uoqYtzcrFU+W5Bm9KRFcGWOy4T4TKsrG8S0iBFJI9zwOWLDZMrinvdzjGcyGfvOFXN648aNtv7qI76zGeTVoytWrLDPF8vkxq8eamhcuLFiffZM4yqbzdrrXeco1V/sj9igcePG2XBWCudTDtm3XMgJCvIyT6YRbsYkwQ3Tpz7gapv0vDQzqa6pk+sQBvFc4B+T/NRcDHlZ0t7ebtvBjyPqjiXJ8fXr19v5yb9+ICGGFPKaMtcEBmKN2wknnABgMxO2trZatlTtIcfD9vZ2Oz/ovbuaB9VPa5Hq6mrLvmsMzp8/35qNaDyqve+6667ApAYEBAQEBAQEBJQf+pVJ9Xdk7nft0Kurq+0qXKGoxGBkMhm7A9EqfPbs2daOQYbBYmJ32203u6t1bUrKgUEVamtrbRBe7S7cfOJ+WKkVK1bYttl3332BfKgmN1tGmvHtb38biJlUn7lYs2aNZclkXK1d7/Lly/niF78I5Ou6bNmyAoNxyBuN77rrrkUOAkuWLClyzJJt34gRI+y5wYTKUVlZyf777w/kGSs3dInGkFgt1wlE7FplZaU9r+td9lTtLfZ46dKldpc7lPmmNxcu49ETNmWnKpSDI4z6rzGmKKOLCz9IeS6Xs+9Vz3Btk9U3xBq57TN+/HggltOSrxqbaWJS/Yw47hwjuSJtTE1NjR3jYpKam5uLmEONobFjx1pWST4DaXYiK4UXX3zRyku9d9dh1Q3PB4UJQfykD7W1tVa+7rfffkA6NZaqk2uv7ToYq6/oPev9t7S02H7vMu26zk8UsnbtWjs2xNa3tbUVMY2DASU0grx2Wv1ZdVq4cKFNfiO5l81m7fvVWuuvf/0rEI9zzY9iSydMmGD7h9YiaquRI0daxlXy6YADDrD9zbfRVdjS3lBeoy0gICAgICAgIGCbwMBHmE3ghnPQClusjuwmcrmcXWnLa2zZsmU2VILvmXjIIYdYRkU7BTcETTnAzbutXb92M1C8S62trbWeqwcccACQz0ufxh0tFNsq6//69ett+C3VvaOjw77nu+++G8AGuF+yZIllcJSy8ZRTTrFBxxUKRJ6KVVVV9rfVr9ra2grStUGh9/tgBF3uCaWC7btp/fywJt3d3XYMqdzV1dXW7sdn1drb2y0joDS0b731lu0/0lCUA1xmEUozpH4ILhfuWPFTrKYRqu/IkSOtvZlrQ6vzYpBcj3e1g9j5qqqqgv7lXu/2GcmXW2+9tSiUW5qg8aD3vMMOO9g6S1a69qrq56qLy4z6PgAtLS32uWKUXBvPcsCqVaus/aj/nisrKy3bJ6axtbXV2rrrnNqgtrbW2uamGWKAoyiysl/hj1w2XXOF5GdDQ4OdfyQXstmsZSTVL7QGaW5utmNObSzNJlDkAzCQkF2p+7uyU9WcUFtba8e+2NDq6mpbP7WLkj5UV1cXpctuaWmx/cKPjlBXV2fnJPUx109C87zGUl/60qCFoBI+/vGPc9lllwH5BtSEcfbZZ9tQCcoqNWXKFEsNK5SBGubOO+/kpJNOAvKL1HLDqFGj7KDQgFH+9lKIosgOHqldNPjSukhVZ9UAf+ONN4C4vOr4bu55dfKvf/3rAHzoQx8C4NFHH7V1/NKXvgTAWWedZeOwfuc73wHgyiuvBGJ1lJ4lobV69Wq7sdFAlHDOZrND0o80cF21s95xc3OzbTdf4FVXV9tJ1RdGLtzNgd6FxmV9fX1RHuZygBZcpVSv/sJ1U4tUjTepL9MI9V/XUcPNR+/XVe3imnDIoaFUP/OzmkE+RmYmk7HPTWO2JT+cVk1Njd2Eue0GsfrSjQcK8UJd40aLdl3T3t7Ou971LiDvVOnHLU47xowZU5RhrdSmRAu19vZ2m+VR71vtU1lZaTdJaYbqVVNTY+uszbhrEijZLxnc2dlpx5UbW9fd5AAFoRP1W1p41dTUFJkFDAZcx1fVQSEbtQitrKy0ddU1tbW19j2rfuoLXV1dtn6lSAyNIddcwg9rZ4wp6D/uub6Esgvq/oCAgICAgICAgNRhQJjUUsyFVtpjxoyxq3rR8Oeffz4ARx99tN21uiFBpJZRcHft/tvb26262P3tcgrmv9tuu1mDZBn3a4dTCplMxu5K3LA0aYZ2pFIlfOADHwBg6tSpdlcn9Ultba01+la9pPb/3//9X7tbFGs6Y8YMy7ArE5kcs5YuXWrZI6kuM5mM3b1NnToVyBtxr1y5sqQzykBDO/DXXnvNlk0OVGvXrrVtI0ZA772urs7u6F11jfq/3y8qKirsONTzX3zxRWtwL61EOcAPneSraV2UCkvnanh601ykDVEUFbHlLrPnhuKDQtZI/10zGDdnuZ4vyLTGDeGVRiZVGiWpJZctW2Y1IhrbbhhDN3wdxCyhZJPOqa06OzvtM/T8vjjtpQF+9jrIv2dXK6PPmnfa2tqK2GbJperqaqsJSzPcZBaSl65JoOqjfqF32tDQUJTww5Uf7nMhlrdill3TNc1TfkbFgYT7W34CCpV748aN9n27CQl8plh9B/LziCtHelpbVVZWWhms33zzzTdt20uzKVa2L4kxApMaEBAQEBAQEBCQOgwIBVcqmL92aUceeSSf+9znADj33HOBvK0IFIYRgThNl3Yt2h1oh3/ooYcW7ezTzir6GDduXEFKUMjvZlpaWuzOQ+js7CzajaQpRWEp3HTTTQB89atfBfIG2PX19UXOYlEUWWbEtw89++yzi4IT33nnnUUOQq5tr1gm9b8ddtjBGrZrt6gybNiwwdq3DiZkP9fe3m7tBaVRcMMFqQ5uWBPtgN2wbH7YGKGystKyhrI33LBhg2Ua/DzPaYafa10oFbjfTc0r+eIyqeVgY6f33N3dXZR0YdWqVUVMqGt7rM8aC42NjUU2qG57+E4RmUwm1fbKSo8t2/UTTjiB1157Dcj3D40Jtx5uX/DTd0umrly50qbonjlzZsHvpR2SCRUVFUVjwg2157OrGzduLLJTdx2N5MiaZriOU+rPWje4jmG+c2VTU1OR83Ymk7H+C3quNFd77723nY8lbysrKy1DO5iJH1wm1dWa9AS9U9fZtlQY0b6EXHO117pe7VJRUWGdlNUeave+MM0DuqJzK6zCZTIZ642tyVkT5/jx421OdqlAjzrqKLuI+PWvfw3Apz/9aaAwU4LUulEUlYWaXxgxYoRV577zzjtA3ut83rx5drEidHZ2Fqh7ofeOONT44Q9/yL333gvkVe5aYHR0dBQYdAMsXrzYblrcuG8A9913n12ACtls1k5IgnISu9cq9uwbb7xh+9EPf/hDgILYq6eccsoW1nTLofe555578uc//xnIRyro6uqyixIJT/X11atXW0GjPrDLLrsUDXwJEFetKaG0ww472A1COeUkl+q1r5E8fBWei3JYpGrBEUVRgbcsxItK30HDVc1p0pD3cVtbm52AS2Xi0iZRzqujRo0qUh+mCYr5K4dJyHs6+4uFdevWFcWIdTOxSQ6pzVavXm3H26WXXjqg9ehvuM5AfixUmdC50VRcRzzf2VUyqKGhoSD6TNrR2dlZ5EzY0NDAggULgMJYoRCPpVJZLCVvfFLs7bffLik3fZX3YMAlddzIBH55/D7e1dXVYzxXN3a9Sz6WIgcE33E1m80WRKSB/JqvL1n+gro/ICAgICAgICAgdRhQJtVlNbUaX7Fihc005YcCWr58uV3Ra+fyj3/8g6OPPhrAqmLvueceIHaUkbPM7373O6A8nKV8uKErIM9y/etf/ypiUquqqmxsMTfDRVpx7LHH8sQTTwDFu7vq6mrrJKX3DXmmUCrp973vfQA88MADlkU644wzgFj1pji6F154IZB3QHPVomqzsWPHWrWgGNef/OQnQGw6MBQQk9fd3W37gtpg/fr1ltFyQ6JAvKMVa6q6jhw50razH06nsrLSjjWNxyOPPNKyCmJqywEyGZEKuydnMfcc5Nkzl1ktB8cpV03maxNctkbv3s0g5Wb707P8dnBDWPlM/Lhx46yMcR0q0gLfyae6urqIwXJDcvnhutxjYsVKmYUIpUIrphHuu9K7l5pbLOvOO+9sw/9JPTtmzJgCFta9f+nSpWUxx+p91tTUWM2k+84U6lL19NlFKB5LLsSotrW1FfWF7u5uO5eXciIfKEyZMsV+1u+r7KVMxFz0ZJ7gZqzbGmitp7laJp9f+MIXNnlvYFIDAgICAgICAgJSh35lUnsL/ST2tKOjg9NPPx3Is59id3bddVdrnzl//nwAnnzySU4++WQgb+gre5pddtllUG0+Bgp+4GnBZRcFY0xR+JjeQlYNNQ466CBbPu3s9Y7nzp1r7eRkH/rv//7vRQGnld93woQJdlcnRrW+vt72H+0G9fwNGzbYnaQY6auvvpof/ehHQJ6R95npwYaY8zFjxlitgXb/7rvVbl/tMmnSJMvCigUZMWKE7Ud+pqrq6mo7NsVgjx492h7zHXLSDH/H7zIBaqdSttq+rV1tbW0qsyj5kK3+xo0bi95TS0uLdSj0WRI3EL+Ycrdd/KD/3d3dRcxRTU2NtYkdzJA6fUWpsGIaU6VCbEl26Fx1dbWtlx+yp5TNXF8cSdIA2RavW7fO2v6rXSTzcrmcZRNVr87OzqIMS27wezGvCp0odixNUD1bW1utdsqFnHmliSllsy420p1zXTmr7/56p6mpyfYnzW+DgcMPPxwozd4+//zzABx88MG2X4hNfu9735tqzUB5jLaAgICAgICAgIBtCv3KpPo7CtcmVWzhtddea5ku2TktXLgQiD2+ZAci5mvUqFHWnkLsqrw5a2trrUd8OUP1efDBB4G8LaZsBV0sXrzY7tJUd6WwSytmzJgB5ENQaYc6efJkHnnkkYJrP/jBD9p66X2LgXXDpmj3D/n2EjuoXeGoUaNs0Ppdd90ViNtYu+BHH3204LeHytbs1FNPtZ/FEF5zzTVAzFw999xzQL7dxK7W19fb8rp9plTAbogZEjEj2k3X1dVx3XXX9X+lBhhi9sSaSkZUVlZa1rEUZM+pMZTNZi0jlGaI+WppaSno+xAnOZFnu1hC9YHGxsaiEH5uOl2x7mqPjo4O25eE5uZmq9V5+OGHAfjoRz/aj7XrH7gBydU/xJK7TKrmHVe7p/4jpkzP8iMplBMOOeQQIJ5X9X71vsWqG2OsnFXdc7mcHUMPPfSQfQYUhivSnJ5GqPxPPPFEyRCN0lTpf3/ilVdese0rW8wTTjih339nc3DwwQfbz4qe44b+TDMGLaioVLLPP/+8FRx6cZowW1tb7SSiiXn58uV28SY1lQTmyy+/bJ1kXJRTximA6dOnA/nFmNqqlKppr732suYPBx10EJAXRmmFyvv73/8egE984hNAPoOYi/r6emsA7hqC9xfcrEraEGkCS0MoL5Xhm9/8JhBPlnIO1KbFzbjmq1+rq6utUJbKTurh+vp6G6ZEGyM5aJUbLrroIiAvaFXnY489lp/+9KdA3tFy3LhxNuzYRz7yEQCuv/56IB5PRx555OAVfAvxrW99C4hlpeI9CmPGjGHWrFkA/OIXvwDyzngbN260C3ktbquqqqw6Wxs2jbWzzjrL9hthxowZPPbYYwBFjpxpgrvBPOaYY4D8XCFTnsrKSrtwEFnixpLVIk4LWWWlc1Eu84qcC+fMmWP7gxadiv16zjnn2HBdytx3wgkn2Dn6/vvvB/IZ6k4++eQhCdO3uVD2p7333rtk/OeeHJrc4+579sMqufD7w/Tp0+3Gd7/99tvMkgf4COr+gICAgICAgICA1MEMZoiEgICAgICAgICAgL4gMKkBAQEBAQEBAQGpQ1ikBgQEBAQEBAQEpA5hkRoQEBAQEBAQEJA6hEVqQEBAQEBAQEBA6hAWqQEBAQEBAQEBAalDWKQGBAQEBAQEBASkDmGRGhAQEBAQEBAQkDqERWpAQEBAQEBAQEDqUHaLVGPMfGPM8UNdjoCAckAYLwEB2zaMMTONMU863yNjzB5DWabBRm9y0BhzlDHmjcEuU0DfsFWLVGPMNGPMLGPMOmPMGmPMU8aYd/dX4YYTkkHSYYxpMcY0J+12qTGm7DYKAwVjzPnGmGeNMa3GmKXGmAeMMdO28pmPGmM+3l9l3BqE8VKM5F3rL5eMEX2/YKjLlxYE+bFpDHf5AQX9oNUYs9wY8ytjTMNQl2ugMBjyIYqiJ6Io2msT5Si5yDXGnGeM+a0xZnKy+K/sjzINFrz+tNYYc78xZtJQl8vFFgs4Y0wj8Efg/wJjgB2Bq4GN/VO0gcMQdqRToygaCewCfBe4Arix1IXGmIrBLNhQwxjzOeDHwLeBHYCdgZ8Dpw1lufoLYbyURhRFDfoDFhKPER37zWCUoa9IQRmC/OgBw11+eDg1GS8HA4cCVw5xeXrF1oybvsqHgUIfyv5B4E8DXY4BhvrTBGA58RyVHkRRtEV/xIOjuYdzM4EngR8Aa4G3genO+SZi4boUeAf4T6AiObc78DCwGlgF/AYY5dw7Hzg++Tw1efZ5yfdTgBeBZmAWcIB33xXAy8QLg8otrfsWtpctt3PsMCAH7Af8CriOuMO3AccDE4HfAyuTen7Gu/dZYD1xx7o2OV4L3Jq0XzPwDLDDYNZ1C9qmCWgFzurhfA3xBLQk+fsxUJOcG028+FuZ9LU/Ajsl574FdAMbkuf/bAjrGMbLZowR4GhgcVKGZcAtm+gHM4EnvedFwB7J55OBfwItSRt+3rkuVe2wqbZxjgX5EW0b8qOnfgD8V1LmyO2bwKPAx0uNDW9cNAE3J/VfQLzgzSRt1gzs59y3PdABjBuKcVNqDHjnxyZt0QysAZ4AMs69n0/Ksw74HVCbnDsaWNxL2W9LxllH0g++mFyXScbOWOIFdJScbwWOTM5fmbTriqSdm5J7JyfXfzLpk0txZNIQ9qeTgTeTzx8EXiCWEYuAb3j3XpjUbTVw1abezxaXcSsq15gU7tfAdGC0c24mkAU+AVQAn0pehEnO/wH4BTACGAc8DVySnNsD+EAySLYHHgd+7Dcq8S5yIXBKcvygpCMcnvzmRcm1Nc59LwKTgLqh7gzO8YVJ+/wqGTzvTTp3PfAc8DWgGtgNmAecmNw3G/i35HMDcETy+RLgvuT+CuAQoHGw67uZbXMS0EUPggy4Bvh70le2JxaI30zObQecmdR3JPC/wN3OvY+SCOshrmMYL5sxRognji7ge0nd6jbRD2bS+yJ1KXBU8nk0cHBa22FTbeMdD/JjG5AfPYyRScBrxBu4LV2k3gzck9R9MvAm8LHk3E3At5z7/g/wYPJ50MdNT2PAOf8d4HqgKvk7irwMnU8sNycSa7LmAJcm546meJFaUPZSvw0cAcxOPk8u8Q4uBuYSj70G4C7gFu/624jl+v7EG4V+X+RtRn+qJ56fbnbaZX9ieXIA8YL89OTcPsSL8WnE8uUHxHNYehapSUGnEgvHxcRC4l5iVctMYK5zXX3yQsYn5ze6HRc4D3ikh984HXjBa9Srk9882jl+HYngcY69Abzfue/iwewAPXUG7/jfga8m7Xizc/xwYKF37ZeBXyafH0/aYax3zcV4u9q0/wEXAMt6Of8WcLLz/URgfg/XHgisdb4/SkommTBe+j5GiAVkJwnbsal+wKYXqQuJF2CN3jWpa4dNtY13PMiPbUR+OP2glZgtXEBs0jCVLVikEi8uO4F9nHOXAI8mn48H3nLOPQVcmHwe9HHT0xhwzl9DvODeo4d7Zzjfvw9cn3w+muJF6sWb+m3gm8BVyefJJd7B34DLnO97ES/kKp3r9/bKdOMQ9qcsMTmyfw/X/hj4UfL5a8Btzrn6pC/1+yJ1q4zuoyiaE0XRzCiKdiJWOU1MKgKxik7XtScfG4jtqaqApYkDQDMxSzQOwBizgzHmdmPMO8aY9cSqp7HeT18KzIqi6FHn2C7A5Xpm8txJSZmERVtT3wHCjsSqCSgs3y7ARK8+XyFetAB8DNgTeN0Y84wx5pTk+C3An4HbjTFLjDHfN8ZUDXw1tgqrgbG92P9MJBbIwoLkGMaYemPML4wxC5L+8jgwKo02eWG8bDZWRlG0wfneYz/oA84kVmUtMMY8Zow5MjleDu3QG4L82Ebkh4PToygaFUXRLlEUXUasht4SjCWWLX7b7Jh8fgSoN8YcboyZTLyA/0NybkjHjTFmZ9epKjn8X8TM5V+MMfOMMV/yblvmfG4nlq89oS9lP5ne7VFL9btK8mPQ/53NkWf9idOjKBpFbOrzaeAxY8z45L0/YoxZaYxZRzyPaG6ZiFP2ZM5aPRCF6zfP0CiKXifeze+3iUsXETNDY5OBNiqKosYoivZNzn+beIexfxRFjcAMwHjPuBTY2RjzI++533KeOSqKovooim5zi7lltRsYmNize0die0QoLN8i4G2vPiOjKDoZIIqif0VRdB7xYuV7wJ3GmBFRFGWjKLo6iqJ9gPcQ2w1dOGiV2jLMJu4Tp/dwfgmxUBR2To4BXE68Qz086S/vS46rz6TqnQthvPQJ/u/31g/aiHfzABhjxhc8KIqeiaLoNOLxcjdwR3KqHNqhJIL8sNjm5IeHtuR/vXNsfKkLPawiZs/8tnkHIIqibuJxcl7y98coilqS64Z03ERRtDAqdKoiiqKWKIouj6JoN+BDwOeMMcdt6U/09j2RLxOA53u4Hkr3uy5itbkwyTu/hCFCFEXdURTdRWyHPQ34LbG2b1IURU3EphQaF0uBnXSvMaaO2HSm37E13v17G2MuN8bslHyfRNyR/97bfVEULQX+AvzQGNNojMkYY3Y3xrw/uWQkMf28zhizI/CFEo9pIbZDep8x5rvJsRuAS5PVvzHGjDDGfNAYM3JL6zhQSOp9CnA7cGsURa+UuOxpoMUYc4Uxps4YU2GM2S+ZmDDGzDDGbB9FUY6YqgfIGWOOMcbsnzAB64mFUG4QqrXFiKJoHbH64P8ZY05P2I0qY8x0Y8z3ie12rjTGbG+MGZtce2ty+0hiJqHZGDMG+Lr3+OXENkFDijBe+gW99YOXgH2NMQcaY2qBb+gmY0y1MeYCY0xTFEVZ4nGhMVF27RDkRyG2BfnRG6IoWkm8sJyRvOeLiR0qN3WfFqHfMsaMNMbsAnyOfNtAvFA5h9ik4rfO8dSNG2PMKcaYPYwxhtg+u5v+67t+P5hObJ+rxenK5Lfca24DPmuM2dXEYcK+DfwuiqIu55qrkv66L/BRYoeuIUHyHk8jttmfQzw21kRRtMEYcxhwvnP5ncCpxpj3GGOqieWtT470D7bUToB4B38H8eBoS/7/gthBZCa924c1Edu0LCbuTC8A5ybn9iU2+G8lNl6+nGJ7EdmtjSGenGQEfxKxN2oz8Ur/f4GR/n1D8Zf8fgfxgmEd8e7//5D30v4V8J/ePROJO/oyYs/Tvzt1v5XYcL2V2HheBs3nEdsGtREPrJ8yRB7JW9BGFxB7HLcldb6fmM2pTeqxNPn7KXnPzInE9letxEb/l+DYBhF7Wb6ZtN9Ph7BuYbz0bYwUePd753vsB8n5rxKzQ4uIGWXZ3lUDDyZ9YH1S52nOfalqh17aJsiP3tto2MqPUmPEOz6dOIJDM/BD4DH65jg1OukLK5Nx8zUSj3jn+rnEJiXV3vFBHTebeibw2eSaNmJZeVVP9xIvqm5NPh9NDzLTOXYasV17M3GUgDuBj3jXXJO0YzOxU1Umac9FyfFbSRxmKfbuX0YSNWAI+pOiFrQArwIXJOc+QmyC0EIcNeFnajOnXy0k793/Dolzan/+yfMtICAgICAgICCgF5jY9nkZsFsUReu38BmTiTcVVVEhs1qWSJjiZmBKFEVv9+ezQ7aSgICAgICAgIC+YQwxS7tFC9ThAmPMqYmpwgjiEFSvEDOz/YqwSA0ICAgICAgI6AOiKFoRRdF1Q12OFOA08gkyphCboPW7aj6o+wMCAgICAgICAlKHwKQGBAQEBAQEBASkDj0FP+4Lyp2C7e9wCVvdHh0dcUzmO++8E4CHH36YXXfdFYAVK1YAsHLlSiZMmADAXnvtBcBpp50GwMSJWxUHOHXtsWrVKgAeeeQRAObNm0d1dTUACxbEMZJ33HFHPvCBDwCw775x6NCqqnzscWkK4qgkm4XUtccQYyDCi4Q2KUS/t8ett97KSSedBMDYsXEc7ra2Nv7whzgm+/vfH0cymzRpUukHbB5S2x7ZbBaAG2+80cqJlpY45Oe0adNobGzsuRBBhvQXBr09uru7yWRiLq7U+2tujqOvfeELceS+Qw89lPPPj5Qt+doAACAASURBVCMtqX9MnDiRn/70pwDMnTsXgB/9KA45XVGxVTkfQv8oRMn2CExqQEBAQEBAQEBA6rA1NqnDctW+Fdji9tAu/5BDDgHg+OOPB6Crq4sXXngBgNWr44xjo0aN4pRT4gyGYhrfeecdAG666SZGjBixpcUYkvbI5eJYy9rtLly4kBNPPBGA119/HYCmpiYgZkhV5zFjxgDQ3t7Ohg0bCp557rnnAnDbbfnkJ1vAhqSmf6QEqWJSv/GNbwDw7W9/G4Ddd49jlzc3N9t33doaZ0s855xzuOGGG4B833jwwQcBWLZsGfX1bqKezUJq+8gJJ5wAwNtvv01XVxzhRlqITCZjmUMxQbNmzeqPn01de/z973GuDNXvySefZOXKlQBUVsaKxBkzZjBjxgwgZpkhL18gLzuEcpMhTz75JPfccw8Ad911FwBTpkwB4N3vfreVr7W1tUCstXv88ceBvHz+yEc+AsD06dPtvVuAQWsP953pfYkZfeWVV1izJs4kPHLkyIJzN954I93d3UCspQOYPXs2L730EgD//d//DcDhhx8OxPPVqFGjADjooIMANmcOTkX/SBFKtkdYpPYftro9Pv3pTwPYSfOcc86xajkNnGXLlnHRRRcBcP/99wN5U4Bf//rXW/PzqWiPiRMn8rGPfQzAmjVcccUVADQ05FMtS/B0dHTYRe1vfxsnRNHEu2jRInbaKc7c5i+G+4BUtEeKkKpF6nve8x4A5syZA+Q3MsYY2tvbgfxCY+nSpXbxsf322wOwceNGAJ555hl2222LEwqlro8sWhSn09Yitaamxk6ibt/fYYc4fbgm5w996EMAfPKTn9yan09Fe8ybN4+//e1vADzwwAMA1uRh2bJlVmWr9jj33HOtnHjjjTcAOOyww4DYDKLcFqm33HILAL/61a8AWLNmja1DTU0NkJeHXV1ddvMidHR02Ou0kBcRYIzhiCOOAODnP//55pZ/SNrj+efjzKWvvfYaAKNHj7Z1VrtIfowdO5bZs2cDedmSy+W4+OKLgfwc9OqrrwJx+4hAkkw5+uijbX/aBFIxXlKEoO4PCAgICAgICAgoD2yN41RAP6OzsxOAPffcE4hVddq1/+Mf/wBg7733trtg7f7+9a9/DXZRBwz7778/f/3rX4E8G6TdbhRFdgcsE4mOjg7bblLZyQlk1qxZnH322UCeNYmiaEscIMoGuVyuiC3+zGc+A2CN/4cDVEcxG1JV5nI520fkiNjQ0GBZefWlN998E4hNZraCSU0dpMaUQ0gURVYzo7bq6uqybPO6deuArXa6TBXuvPNOdtllFwCOOuooIK9ded/73sdjjz0G5NnSyZMnWwZaTLsY1XHjxllWsRzCNT733HN873vfA/Kq7NGjR1t56Zs9ZTIZO58IdXV1RTKkrq7O3vfMM88AedZdKvC04qabbgLgwAMPBGK5INZTTrYLFy4EYtM5mQ7Jwa6xsZGlS5cCebkhdHZ22rYR23z33XdbrWjA1iMwqQEBAQEBAQEBAalDYFJTBO32xQT985//5K233gLyu+JMJsOzzz4LYG3N3JBL5YoDDjgAiO0HtSMVeyyWrL29veQOX3a7ajcxRueccw4vvvgikHewGe5Mqsv2PPfcc0DeWWLvvffmsssuA/I2zlsZQmXIIAc6OQWJKers7LR1U7/JZDKsXbsWoMhJatGiRZZRGw5417veBWCZn+nTp1tbPD/0EsATTzwxyCUcOCxZsgSI+7SYZGlZ1CdGjRrFww8/DGBt2bPZrGXDJGeXL18OxMxaOTHtP/nJT+xnje22tjYrN2VjqnEDFNln5nI5y65KVupcZWWlDWX2yiuvAPDWW29Z9jFteP311215Vfd169bZz3rfriZGY0cypaKiwvYPtZX6le7RdRBrMeScJ2Y+YMsRmNSAgICAgICAgIDUITCpKYLsoGQD9cYbb1hGYJ999gFiexcxANq5iVEtRyhMlOxqt99+e8sMuzZ0+i9GQN7alZWVRfaG2v2PGzfOsibCZnj3lyVcllg2mWrPG264wYY3k91zuUK2lOoHYkLEkECePYuiqOi8H6ZquOLEE0+04XNkd1pbW2vHzHCC+sKoUaOsjaHCCGncr1mzxnq/y261s7PThuRS/xDz/tZbb1kmtRw0MPPmzSuIfAIx+6djLoMKcX01j4g5dKFx4gbE17jSs1577bXUMqmzZs2yZV+/fj0Q9wnV2Q9fWFNTY/uA7svlcrauflvV1tba58oevKKign/+859APlnGYOLGG2+0EXJKQSyw/rt17o8+rraaN28e0Ptc8+EPf5hLLrkEyGs2fKRikdpbDMtSjiDC73//e84888yiZ5WDMCkFxZ/Twi2KIlt3qf0rKiqseluL02uuuWawi9pv0IQhtUtVVVWRsHTDoag9tOiorq62QlP36fqKigo7WUk9LNXPcEMppw61kdpn7dq1TJs2DYDzzjsPKFQPlhN8FZvGvJthxg075ocg0/X+JDXc0NzcbMeD6r5u3bqCOKCwVVmVUgOp6DOZjFXPSm6efPLJAMyfP99u+LWoqK2tLYqlKcey7bbbzj6/HNpo9erV1qRFi9SKioqizZnrOOWSAJB3koJimdrQ0GCJE42pNDvuPvvssxx88MFAvi/MmjXLxksuZSqndlD9crmcJUwkb1zHK8Xg1UK9qamJ+fPnA0OzSP34xz9uZX6pkHIzZ84EsGGyGhsb7UJbcM3BVFff+c6F2mXdunX2s8yMPvCBD1hzO0HhMu+77z7r3NwThjetFBAQEBAQEBAQUJZIBZNaamfqqxncY6Ky58yZw3e/+10AGxajt12uG2ojjWrf//iP/wDyu4zGxsai8CDd3d12V6wgwpMnTx68QvYz3n77bSC/E8vlcpYB1I7W3bmVem86Vuqc1LnKPKNsXcMN6vdu/1coGu2Ex4wZY5kD9bE77rjDMiFusgSI30Wp56YB/rgoxXLpGlcj4aMcwgptDe666y7rvCF1eFVVFS+//DKwRUkuUgsxfHV1dfaz2FVh/Pjx1iHzyCOPtMfVb9RGcnyZMmWKZdsll9KMdevWWa2Uxn13d7dN3qC6uA6Tevc61tnZaT/rnByGjDGWbdY8lGYmdc2aNdaUY9y4cQD8z//8j3UiFPupenZ0dBQlN+js7LRtqT4gWZnJZCzr7jpsSnM3FPjiF79ox/yHP/xhAI499lggnm81Nly2VEy5L+e7urps3SUrdJ97zGWf1X4yL7r//vttX3nyyScBOOaYY4B4/tmUDC5/yRQQEBAQEBAQEDDskAomtRRKMSMXXnghkE93uPPOO9twTJdffjkA3//+93sMq5N2tmDq1KlA3tZ048aNlvlS2d1djHYssjMsRyiI9ujRo4F4R+Ybcbt2hz6zl8lkbF/xd8Cuo5VSyA5XJtUdLzLaV+o+7fo7OjpsW2qXu3btWsu8/OUvfwFiGyJI93jxHUBUf9emWXJi+fLl1s7O71v+c4Yb3n77bcsWLVu2DIjlyzvvvANgQ7TJbq+cIbu6iooKy3jJPlPndthhBytfZaMoG1XI9w8xzUcddZS1ay8HZ0PZoUKe5Vq1apUdC5o/XDlaSlvnh6iTbF29erV1uBFDqdBfaYLe36677loUhqy+vt4ynZp3JAOjKCpae7jtoWepzUaPHm21dWr72tpa249ef/11IA7/N9BQkoqKigrOOOMMAL75zW8CcPPNNwOFSTv0bl17VH/t1N3dXWT3D8UMqtjWmpqaIp+AyZMnWwZf7ahERCeddBK/+93veq1X6hepkF/ISMhKJbNixQorOKTCGTFihF3snX/++UB+spo4cSLTp08fhNJvHVzDd/+FG2NsxygH9VNvyOVyRTnV161bV5RrvDdVcylVgZuhSgNMZgXDFW4byRlKgkDjprq62i7gJDRGjhxpJxtl+LrxxhsBbL7qNEOTpzv56p0r89jChQvtIlXn1EeG6yJVMnPMmDFFHskVFRVWnijW5XBYpC5YsACIN2VyeFIUCI2P9evX20WpFupdXV0FEUGAgv6yePFiIN2LVFe97G/kXUdULZ78cQClzaZ8AsCNsavnK65omqAN+ty5czn00EMB+NOf/gTETnSqo+Sg5lx3TnWzFPre/a55wB577AHks1FNmjTJmpnMnTsXGJxFquJhH3jggdazXu9eTtnZbNYSX65jrb+IdDcueoar7ncX8JBfpDY1Ndl5RyYEb7/9tl0Iy5HswQcfBOJsiLq+J6SXKgkICAgICAgICNhmkVom1VU3iCXVal9hhFpbW+0ORyv7qVOn2th4ovy1it+wYQO77rorMDg7my2Fdi6ZTMa2g7u79Xcx5QoxfFCY2cRnAjbXucV1ABDkCDHcUMrxRSFRZNCvHXM2my26vqWlxaq6xAh861vfAuLQZueccw6Qd8JKC3xDfzE9a9asYfz48QAcfvjhQMygKNyKr85yw+0MJ4hJymQy1mlGbVZfX2+1S2IThwPEhrW0tHDIIYcAxaroKIrsuBCjZIyxskKmMXI4WbdunWWJ0gxXlvryspSTlMsSCq68FePqq7m7uroK4g9DOsO4SYt6wgkn2Lqq/2/cuNGaf4k5l/zI5XJFcVJdEyL3GRCbSykMpsJOHX744faYZOtgQHL/M5/5jF0ziWEXA75y5UrraC0zhSiKbL20ntI7dfu+q+IvZX4I8Vzjn9tll12sJlNySf1pzpw5m+w/gUkNCAgICAgICAhIHVLHpJZygtGuQEyPMHnyZOskot1id3e33R2JcdXueO3atanOwyw7FtlR1dXV2Z2NdiddXV2WAdB1ah8xR+UC2c3B5oc4cu1OfVbAfZZ2xe5vDSf47RZFkQ0xon7vMh8aJ9pZ19XV2TYSqyg74fb2dmvPlTZo5y9WTCzawoULbX1kf37VVVcV5CV3Ue523T1BDGJtbW1R3vHq6uqiMEXlDAXl1zt+z3veY/uDoD6Ry+XsGJAcdUOtqT1kt/rYY49Ze3nXOSRtEIvn2k8Ko0ePtmzViBEjCs6VYg5zuVzROBHzdcABB1hnZf2O5EUa4SZvcZ1mb731ViCfWUwa1g0bNhTMtVCYRMYPR7Zq1SrL2uv/UEHvYffdd7faMGWWk93nuHHjipxG29raCjL1uejs7Czyiyllx6/2cJlUtVVVVZX1M5Gt+Jw5c4C432od0xMCkxoQEBAQEBAQEJA6pI5J9Zmhp59+2nobK7WdWKC9997bruDFqLa2tlqPVa3aXXsSP0xRmqAA67IVGTFiRBFLmMlkbBtpZ/OLX/wCKD8mtSc7KjEdpYL5+9eU8kQV3MDCaQyT0h/w2eNXXnnF7qj9VH5dXV127OjciBEj7DExS2InDzroIM4666zBqMZmQ0ygxoDYQmOMtbd0PdbFJvtpEDflWVquEJve2dlp5Z+YwIaGBvvZDVlUrhATI9+D+vr6ougNkgPZbLZIrhhjLJOk9tDcEUWRtevTuTQyqXrfNTU1tl5ikydOnGhtAhVySXVxQ1D1JmclX3baaSceeughID/m0hghw323voxsb2+37eCnDO7q6iqw4Ye476iOkh+ur4jkpxvGysdgJENxx7IiDagfu34sem9u2D7JAzHmmysX3GgHvr9AW1ubbUvfB6CmpsaGwesJW7xIHag8xmokGTa/9dZbfPWrXwXgr3/9K5DPsLRo0SLbWXQsm81aJxnRzX7e4rTiZz/7GZCnzt3yup8lVCSEfvnLXwJw0003DUo5+wstLS22/7gd2w895Rr0+4b/rlrKD6tSUVFR0kGgnBBFUVGe+t7wwAMP2DGkfqRNjzHGql30zLa2tqI2lUAZyqwpm4L6vhYoGuNdXV1WxVVKNvnH/Bz2wwVS/7a1tVmVpvpFfX29lZHakJQz/A1IY2OjXTho8eZmxPEdf1wZog2eFrULFy60/cl1xEwbNMZdZ1ttRMeOHVuUFcqdE0vN5X74Kv1fvXp1kVNVGtHbuqSqqsr2C4UV06LMdZJyn+Wai0BhhsRSm5ahyNCn97h48WIbFkwmCG6d1I/1v1RGPjcOufsZKDAN8MfQxo0bi+peUVFhF8GS2yKNVq1aZeVTTwjq/oCAgICAgICAgNRhi5nU/twpaPd6++23WwZVu7Tdd9/d7lrElmpXuHHjRhuIXDuF3Xff3ea0dx2Q3GvSBjG+vprWDcfkMofavWgHJ3ZswYIF7LLLLoNX8K3Ehg0bSrKDPtPh9jXXYQriXZrPkrq7Ql8VtWTJkoKsG+WA3hhUfwf8y1/+0gaxF1sghsl1ABBzkMvl7DGxaupPCkSdRmhHrr6i+kRRVMSOGmPs2NfYEuRkOdzghnXxx0B3d7c9NhyYVKn55eDU0NBg5wg5yrpMu5sZSPdrHhEkW7fbbjvrbJRm0wgx4y4T6DqPlUoKAz2HoPKv13Xd3d1FCQGMMbZtyiGkm8seq7xi3puamgqSXuh6QfLGTfbgO5kNFbTeWbx4sS2z5J3WRJlMxrKartOk6lUqmH8pLaQ/7+iazs7OojCHI0aMsH1RxzQuX3zxxU2GhwxMakBAQEBAQEBAQOqw1Y5Trs1cbzZg7jk5zNx5550APP/880C8it9rr72AfDimF154we5atApXAOpsNlsQYgLiHYB21ApiLduLt99+uyiERBogW1vZPpUKsO3u/v02VWiu+++/n8suu2zAy9tfWLt2bUHoMIjr5NfP3eX5gYIzmYw9JiZaRvFQzEK++uqrZcWkuuPGz6ftQrZHuVzOMj/u7hZilsW3q6uoqLDOQ37oEI2fNEIMQamwKArcLzQ1NRU4I7rwvw8XSL7V1dVZ5wk357rY8uFQfzFIbogtzR+qn5va0bUnhHgM9JTmcerUqdYJxWeP0gTZ9dXW1tqxIDa4ra2tyNFU9XPtC132zJXHkJclTU1NRfdGUWT7VjkwqV1dXUVpkqVRGDdunK1fKb8HP0VoT6GbhgKur47GvOA6W6vsruz05airzewtqU4pTa/vrLhhwwb7PIWLU1lffvnlTWrlt7qF3VzZfcF1111nvdi1uHKzn0jd7z5T6hx1EF2/dOlSOzjVSKtWrbKNIxWOqOVsNmtpb2WlSgOeeuopIF/eadOmAfD444/buitD1oIFC+zi4d3vfjcQO5cBvP7664NX6H7A+vXrixakGzduLMhuAoXZUVw1v+7TosodFPrvq3dXrFgxYPUZaPjj7J577uHcc88F8mprdwHueyN3dXUVxP6DWBhpca9jEtJp2sj58BeprgD1c6y7UTJ81fdwWKSVguRGTU2NbSst1Kurq+0kPRyiG0j+CWPHji1wEnNRUVFRtABzTahkGiMZYoxhwYIFQH4xLHOaNEHq6srKSvueRdY0NzcXZWYUurq6SkZKcT3bId+flAMeCheyaTWlK4UNGzbYce9v/N32KaXG91XZQ+Eg1ROmTp0KwOzZs+0m1Idr6lMqKoO/EO3u7i4iktzPmjPcmMOCnl9RUWFlkPqRyMj77ruPnXfeudd6pXdrGBAQEBAQEBAQsM2iX7hqf8ehHec777zD4sWLgZgVhFjVf+CBBwJ5xkb5XN0QOVqZb9y40a7atfsRezphwgR23313AF566SUg3lEqe4SuF1NUV1eXyrAZUictXLgQgGOPPRaImVKxo8pHnsvleNe73gXk1drK3iBzgXLB+vXrC/JnQ8wma+fmM4Euk+ju4v24qmKkXdWDIJZhKOGH7Si1ey+lRvrzn/8MwKc//Wkg1iQoI5Qb51G7VbWtq4rxVZZ1dXVFuZPV3mJn0ggxgOoH7nsWgyQ0NjYWhSLyHQuGGxQX05WfUmlmMhk7ttIcVqmvOO6444C8nM9kMkVjS33cPefOW347qL/su+++Vi6n2clO9aupqbHhh2T2ks1mbV19568oikrOib6DqmTKHnvsYceenjlx4kTb9r75XRrR3t5uZaMYYDcDmy+f3axcgsuopsVxaubMmQD88Ic/tOsFaY7dWNi+DHTnVT/kWKmQbaUYVVdD57dVR0dHUVxmyaK2tjbe97739VqvwKQGBAQEBAQEBASkDlvMpGoF/Y1vfKMgDzjkdxludg8dGzVqlF25+7vXyspKe04reZdlEkOrndyBBx5od42yldlvv/3sil+7O31ftWpVKsOIyI5Quw1ljurq6rLM12uvvQbEO1mxP+9973sBuOGGG4C87W05QnUvZXfqQu3h2hD5WYRcw3c9S3bMmwp3MVAoFeqlt/oJbW1tHH300QA2Z7a+77XXXnZH6jJjsiNTO2hc1tbWFmTe0X1+LmfthMUmpRG+c1hvaGpqsnUp16QOm4tFixYBcf+Rs4Jk5XbbbWcdi9KcsKGvkObMhW9r6Gag8lk0n3mHvJyYOnUqF154Yf8Xup+hse7a6Ktd5s+f32N7uCyrC59NdDUV0tjJvr+qqiqV82pPqKiosH1A5XadrH1HIdfZyJfP3d3dqdHOnnDCCQB8/vOfLwpDpu/t7e3W10B9YcOGDbbP+I5T7nVuP/ETv7g2yaVClInRFcMruVNfX88nP/nJXusVmNSAgICAgICAgIDUYauD+V900UU2hNQbb7wB5HdYrq2bdizr16+3u1SttHXfjjvuaAOIa2Xe1dVlA9TLzmq//fYDYhs9MSTyfndtDmVbJyapsrIyld6sp556KgB33303gPUm3XvvvXn00UeBfF0aGxut97LsfbXDSWPdesOCBQssi6E6NDc3252eb9vS3d1dctfvhqOCPEPv7gb1rFmzZvVnFfqMvniBrl69mueeew6ABx98EIDbbrvN7j6145w3bx4Qh/Pwd/Y1NTW23moHaRRcm1R3bPjsqu5vbW214eJUhrRAfb1UiDs/TeHIkSOLGFRdr7oPN7jy089jD/mEDcOVWfbD4Aiu/JAWIpvNFrFn5dYubiptzbuy9XvqqaeK5I8rG3sLreUn/6ipqbEMreafurq6kp7iaUV9fb2VjWoXtV97e3vJQPWl7JihMHxTWvDEE0/Yd1+KAfb7uBtRp1S/L1U/XxvoRo9wo2boGj/5itZ5EydO3KQd8xYvUmVI3dTUxNlnn13ymnXr1lmaV9e3trbaQeSrWbLZrHUGco10/QwQapB169ZZg2edq6qqsoJJanE1kJsZI0044ogjADjssMMAuOmmmwD47Gc/a9WaUue0t7dbg/irrroKyAujyy+/fPAK3Q9ob2+3OXzd2Jyqqx8axXWE8vN167x7fUdHR5HKWvHZhgp/+MMfuO6664C8ykNjxBUGGriTJ0+2Dhv//Oc/AWwMvJaWlqJYqKWEpq5xBZUrnLWA1zhzBZXaL22LVH9z48JfpDY0NBSpLdMcXqs/4Mar1IJeDqcNDQ12vA3XEFy+CYvrLKLPmgu6u7tLZreD0s6GaYS7oddnhfmB4oVJqc2dUCpWte6bP3++JY0efvhhIJbTmxOGcqjR1tZmTQcVtknjoVQGQzcMk6/6zmQyqXM+bGpqsmsIOVNpzigVKzubzfbax3tzjioV2q+UuZ7kjNaBkr9/+9vfNlmf9I++gICAgICAgICAbQ5bzKSKnVywYIFVT2t1rBBAo0ePtsyVu1KX2l4OV2I+M5mMPeYGcvdX8m4gWT/Qf3t7e4+GzN3d3dbo+8gjj9zCmvc/5s+fD+Qzb5155plAHKRaxz784Q8DsepGu6ILLrgAgHvvvReABx54gOnTpw9aubcWf/nLX/jFL34BwFlnnQXAxz/+ce655x4AG+S3VCYUIZfLFake3FzeYo+k2vODew8WpMb/+te/bo30VT+ZqrisjZiwlStXWvMZHVPIsjFjxhTkrIeYUfVDSrk7YI0T7abdkCu+sX0mk0lVsGoXGgO+gwcUM6n19fVF1/nXDDeoft3d3ZbFUP+prq62snq4toM0LD6D2NXVVZDIQud8hrGU2r8ntjVNcB3DBMnDUjDGFCU3MMYUjRc9c+nSpSXDtqUp89KmUMo0QTLTdQBy20P18xPHuNelCcpA+JWvfAWAK6+8EojXZnp/vYWNcsM+nnTSSfZegKefftqq6zVfqX9UVlbaPuNmilQYNzm4//73v+9zXQKTGhAQEBAQEBAQkDps8fZHO4kpU6bYXZdYULFXq1atsnno3VW7QqLov3b4dXV1RenJ3HARWu27u10xAjq2/fbb22e4zIGuSWPe9n322QfIp3MUUzZlyhTOO+88IM8EumGHxLJq91cOeZN9XHLJJQXfFyxYUJTSzXWMUh9wd8P6rH6iPqGQOzB0DKowe/ZsIGZGxQLK3lOOTVVVVXanLqbT3Zn6KYCXL19eZK+dyWTsLrhUAGqdc8PE+ayJ2jvN/UkhxXzbQygO7VVZWVnEdpSbk+Hmwg2/5zOHuVzO9rNycxDqK3y7O9dJxE8O0t3dXdJJ070v7XBtruWnISxdutT6epQKMSS46af9NKc6t2LFCqv5ETo7O1Pp69ETstmsXRPovbvhM335UVVVZa/T3KL70xSCyk1gIXmn9YPWFldffbVNEOQ6KPvzjuvHcP311wN5u1KXrVdbSd6MGDGiKFlAVVWVTeF+8803F5TZ1Wz0hH7h6N1sQe7/gL7BX1xp8TJ//nxLzWuBst1229nNgBb5crLZVOaGtKGUU4Ibk87NegE9q1Xc7GSQHzj6vqnfHAycfPLJANx+++025q0fxaC6utp+1kRaXV1d5JHv/wcKDPtLqTP131djZjIZ+3wJGrXzpEmTeOGFF4BCJ4w0QItUTRbuYsJXd7rxctUmMrkYrhA50NTUZGOi6r/kBuQjsQw3SMWt9+yatPgLz87OziKHmLQsPPoKd5FVKm+77whVytHJvUayRcf0zObmZhtdR+ju7rYOsAcccMBW12Wg4W7kJSvUX9z5R3K0s7PTXicZ6d6fFqex3pzhpP6/9957eeWVV4C849ucOXPs4tQ3B4uiqCAKBsR198ki13xIJp7KjHnSSSf1mNmvL2YiQd0f+9r97wAAIABJREFUEBAQEBAQEBCQOpSPtfM2ALFDivXa0dHBiy++CMAZZ5wBwF//+lcbfkdqHRkll0OoFBelyrvTTjtZRzI39BQUhorpLYOTzpXKwDVU6juV5cknn7SOYb/+9a+BvCnA/Pnz+1Q+1dd1hOpPuGYnMnRPG6S+9FnTnXbaqUjdWVNTUxS7r6ed/XCBG3pJdS4VpkwsSTnDd2hqbW0tMoNx1eF+2DL3e7kzqdls1oYoFJ577jlrYiQzF7d+ajdX3a829cPTPf7449x4441AXv2by+Xs89MI3xysoqLCtoMYQNXFZdXdzGRiTiU31E9GjhyZGufDvjpw7b///gX/047yWtUEBAQEBAQEBARsEwhMaopw6KGHAljD5mw2y4EHHgjk7cj22msv6xCk3fCJJ5442EUdMLi5xEsxpG64MsHPLiMj8GXLlln7XbFraXCEOO200wr+u5Btl2wKly5dyltvvQWUtjmSrZibVU0MgNrD3en7u23XMdE3hh87diw77rjjllVygCFtgpgeOW50dnYWOc24x/yQOsMdI0aMsH1DbFF9fX1Rxq5yhs+kdnV12T7sJ6hwM3AJra2tto18+/ZyaR/X/lwaOWH27Nk2YYj8RTRecrlcUXu42hkxhxo/rtOUZGp7e3uR9iLNWLlypdUg6D27GagkL3XNyJEjrXZT16m+K1asKJpjAvoXgUkNCAgICAgICAhIHQKTmiLIc1C7+traWutJKeYwk8nY69ykBuUKP5XplClTrE2qUtdp99pTmBPfS1472uOOO65od5sWT8yeoBBpaQyVliboPSqRiDQOL774YpG9aWNjo02cIJZI6RCHK9zoDZIXGh9r1qyx2php06YNTQH7EaVSmSpCiuqpNtB5F7W1tQXRNCAfTtFNiZlmiPVrbm4ukpPy7B4orFmzxqZs9sNTpQG+78OoUaOsPabSPavN2trarKe/7ps3bx577LEHkJc70kRMmDBh2KdYHmqYrVB/Dr3edOvQ33qcrW6PP/7xjwA8+OCDQKyGkpDVQm3EiBFWnaNJ59hjjwVgxowZW/PzqWuPV199FYC///3vQLwgkSrfDQGizwcffDAAJ5xwQnFhNj9bTOraY4gxEHrPLRc+ntwaIrVsavuIFmlf/vKXrYpXcZWPP/54ayKkybefHMlS0x5PPvlk/ABv3Lt55iVTq6uri0xj9L+U8+VmYNDa45lnngHg/vvvt2Zjp5xySnxTFBWF8SvleNoXuAs+9adly5bZTIebeFZq+kdvUKg2hS9bvHhxkTNaP6Es2mMQUbI9gro/ICAgICAgICAgddgaJjUgICAgICAgICBgQBCY1ICAgICAgICAgNQhLFIDAgICAgICAgJSh7BIDQgICAgICAgISB3CIjUgICAgICAgICB1CIvUgICAgICAgICA1CEsUgMCAgICAgICAlKHsEgNCAgICAgICAhIHcpykWqMiYwxe/ThusnJteWbN7QPKNf26K3cfa1TiftmGmOe3PrSBQxXlOt4CRg8lGMfCfK0Zxhj5htjju/h3FHGmDcGu0wBfUO/LlKNMdOMMbOMMeuMMWuMMU8ZY97dn79RTthW2sMY86gxZq0xpmaoyzJQMMYcbYxZ3A/PaXX+csaYDuf7Bf1R1nLFtjJetgTJJNthjGkxxjQn7XSpMaYsiYYtxbbQR4I8LbhuwOVlFEVPRFG01ybKUXKRa4w5zxjz2zRtVnpCucqQfiucMaYR+CPwf4ExwI7A1cDG/vqNcsK20h7GmMnAUcR5gz80pIUpA0RR1KA/YCFwqnPsN7ouDcJuMMuwrYyXrcSpURSNBHYBvgtcAdxY6kJjTMVgFmwwsC30kSBPC9FXeTlQ6IMM/CDwp4EuRz+i/GRIFEX98gccCjT3cG534GFgNbAK+A0wyjk/H/g88DKwDvgdUOuc/wKwFFgCXEw8gPdIzn0QeAFYDywCvuHcNzm5trK/6hnao6guXwOeAq4F/uid+xXw/4D7gRbgH8Duznm33NOS8h5d4lwN8ANiIbUcuB6o66E8M5Py/Cxpu9eB45zzE4F7gTXAXOATzrka4MdJuy5JPtcAI4AOIAe0Jn8T+6Ht5gPHJ5+PBhYTC41lwC09lcep55Pe89w2Oxn4Z9Lu7wCfd647BXgRaAZmAQd4Zboi6Xsb+7OvhPHSP33FOXZY0if3Ix5r1xFPmG3A8Ulf/z2wEngb+Ix377NJvZcD1ybHa4Fbk7ZuBp4Bdhjq+m8rfYQgTzdrDHjnxxJvYpqT8jwBZDb1/klkr/c7rgy8LSlrR1LWLybXZZL2G5u0ZeTU58jk/JXAAmAFcDPQ5PWbTyZtsxRHRgcZ4pSxHxugMSnUr4HpwGjn3B7AB5IOuj3wOPBjr/GeThpkDDAHuDQ5d1LSAPslnfu3FA64o4H9kw5xQHLt6QMhQEJ7lKznXOAy4BAg63bGpNOvTjpzJfHEcbtzPkra4iRigXqYfy75/CNiQTgGGAncB3ynh/LMBLqAzwJVwDnEQmlMcv5x4OfEA+lA4sF3bHLuGuDvwLjkvcwCvum06+L+aDPvPbuL1C7ge0m/qNtEeWbS+yJ1KXBU8nk0cHDy+SBigXk4UAFclJSjxinTi8Akepi4wngZ/D96mKCJJ8dPEY+1dcB7k7rUA88RL3qqgd2AecCJyX2zgX9LPjcARySfLyEeX/VJ/zgEaBzq+m8rfYQgTzd7DDjnv0O84K5K/o4CTB/ef0FZKCEDS/02cAQwu6d+QLzZmUs89hqAu4BbvOtvS/rc/knb9Vi/fuhbJduPlMuQ/m6EqUlFFycd+15KrKCB04EXvMab4Xz/PnB98vkm4LvOuT1xBlyJZ/8Y+FFPHWcw/4Z7exDv1rPA2OT768BnnfO/Av7H+X4y8LrzPQK+TLzT3M97tgSuId7VuYzBkcDbPZRpJvHO1DjHngb+jVjodAMjnXPfAX6VfH4LONk5dyIwP/l8NAO/SO2kkN3prTwz6X2RupBYWDR611xHMlE4x94A3u+U6eIwXoZefvTUV7zjfwe+mrTbzc7xw4GF3rVfBn6ZfH6cWFU+1rvmYjx2PU1/w7mPEOTpFo0B5/w1wD2l3tsm3n9BWSghA0v9NvBN4Kqe+gHwN+Ay5/teyfutdK7f2yvTjQM4dkq2HymXIf1qMBtF0ZwoimZGUbQT8a50IvBjY8wOxpjbjTHvGGPWE1PBY73blzmf24lX5iTPWOScW+DeZIw53BjziDFmpTFmHXBpiWcPCbaB9rgI+EsURauS779NjrnoqR7CfwB3RFH0ag+/sT3Jji4x9m4GHkyO94R3omS0JFhA3G4TgTVRFLV453ZMPk+ksD1132BhZRRFG5zvW1OeM4knsQXGmMeMMUcmx3cBLldbJu05yXvuIoYA28B4GQjsSKzahMJ67gJM9N7zV4AdkvMfI16MvW6MecYYc0py/Bbgz8DtxpglxpjvG2OqBr4afcMw7yNBnvYRxpidXaeq5PB/ETOXfzHGzDPGfMm7bVNt56IvMvBkerdHLVX/SvJj0P+dwZ5vhFTLkAHz6oqi6HXilfl+wLeJdw37R1HUCMwg3tH1BUuJJ1FhZ+/8b4l305OiKGoipvv7+uxBw3BrD2NMHXA28H5jzDJjzDJildC7jDHv2oxHnQWcboz59x7OryK2Bdo3iqJRyV9TFBvS94QdjTFunXcmbxc1xhgz0jv3TvJ5CfHA9O+D+H0NNPzf6K08bcSTDQDGmPEFD4qiZ6IoOo1Y1XY3cEdyahHwLactR0VRVB9F0W29lGPQMdzGy0Ag8WrfEVCIIPe9LSJmx9z3PDKKopMBoij6VxRF5xH3j+8BdxpjRkRRlI2i6OooivYB3kNsv3zhoFVqMzCc+kiQp5uHKIoWRoVOVURR1BJF0eVRFO1G7HT2OWPMcVv6E719T+TtBOD5Hq6H0vXvIjYXEfx+t4RBRDnIkP707t/bGHO5MWan5Psk4DxiKnkksTHxOmPMjsRG6n3FHcBMY8w+xph64Ove+ZHEu7kNxpjDgPO3ti79gW2gPU4nVvXsQ2yLdCCxKu4JNq9DLgGOA/7dGPMp/2QURTngBuBHxphxAMaYHY0xJ/byzHHAZ4wxVcaYs5Jy/SmKokXEaojvGGNqjTEHEO8Gb03uuw240hizvTFmLLEtjs4tB7YzxjRtRt22Fr2V5yVgX2PMgcaYWuAbuskYU22MucAY0xRFUZbYsD2XnL4BuDRhh4wxZoQx5oPeRDPo2AbGS7/BGNOYsBa3A7dGUfRKicueBlqMMVcYY+qMMRXGmP2SSQljzAxjzPbJ+GpO7skZY44xxuxvYs/e9cTqyVyJ5w86hnkfCfJ0K2GMOcUYs0eyoF5H3J791XeXE9tkCtOBBx2GeWXyW+41twGfNcbsaoxpIN5I/S6Koi7nmquMMfXGmH2BjxI7dA04ykmG9CeT2kJsw/APY0wbseB4Fbic2G7hYOKOcz+xAXGfEEXRA8Q2QA8TU/kPe5dcBlxjjGkhHgR3kA4M9/a4iNg2ZWEURcv0R+wFeoHZjPBFURQtJBasXzLGfLzEJVcQ1/XvJlblPURs39MT/gFMIWYNvgV8JIqi1cm584jtgZYAfwC+HkXRQ8m5/yT2VnwZeIV4l/yfSRlfJxY680ys+hgMtUxv5XmT2AbrIeBf5HfCwr8B85P2uhS4ILnvWeATxO9pLXG7zhzgevQFw3289AfuS8q5iNiG7Friia0IURR1EzMYBxJ75a4C/gfQouAk4DUTq0p/ApwbRVEHMB64k3hymQM8Rqy+SwOGcx8J8nTrMSWpSyuxU8/Po+j/t3fm0VGV5x//ZmYSEgJJgCCQiERZXHBBxbVqrVYtSq2n1WO1VdRq1aJWjutR63LqadWK1qVq5bTVUqmI/hRRWwWpKIIVd0QlLBFDMAgJhEkyyUxm5vfH9fvcd965hCTMTG7o8/lnYHJn5i7v+n225H8y8L2A42t7y7fnei2s1FPJZLIVzr15+9tjjoTj6zwTju9mDYA2AFda37sIzrN4HcC9yWTytQyd7/boc2MII98URVEURVGUTvh2w1APYK9kMrmth99RBWfhl28pq4qFrysNKIqiKIqi+IjBcKL6e7RAVbqHKqmKoiiKoig5QpXUrqOLVEVRFEVRFMV3qLlfURRFURRF8R1djhj0oK9LsJnOhaj3IxW9H6n06H48/fTTKCwsBAAUFBQAABKJ9GwegUBAXmkd6devX8rf2tra8IMf/KAnpwFkJ3eotpFUunU/Ghud/NubNm3CkiVLAADNzU5e8yuvtIOIU7n11lsBAJMmTQIARCIRAMCECRMwePDg7pyGiS/6jI/Q+5FKr94PtvHW1lYsXuwkQ6mocJIKHHbYYV36joYGJ6nB8uVOxqbRo0cjFHKWUSNGjOjO6QA+ah+8rlWrVgEAnn/+eQDARRddhL33Tk38MGfOHLz33nsAgEsvvRQAsNdeeyEDeN4PVVIVRVEURVEU37EzPqm6q0tF70cqej9S6db9+OqrrwAAt99+O8rLnQqMplpK+O+8bwvCJJNJ+TeV1Px8pyJdc3Mzrr76agDAkCFDunv+qqSm0ytt5M477wQAxONxAEBlZSWCwSAAYMaMGQCAgw5yihRNmjRJlNGioiIAwLRp0/DTn/4UAHDiiU5Bng8//FC+f5999gHgqKrdRMeQVPR+pJLz+9Hc3IyamhoAkD4yaNAgxGIxAG5/oaJ69NFH409/+hMAIBx2qr2OGzcOlZVOpVcqhytXrgQADB8+HBs2OEWi2tqcitaVlZUYOrSzKrOCL9rHNddcg08/daroct7ZvHmzvFJJ7d/fKXCYTCZRV+cUFTviiCMAQJTVRYsWYdy4cQBci585X+0Az/uxM+Z+Rck53FTl5aW353fffRcA0NTUBMAxjw8Y4FT7GznSqT632267dfrdXt/bG3CwGDp0qJw7zf1cnOTn58vAyAUpABmAuRDl/7ds2YJNmzal/E3xN3zWnGBXrlwpE8LEiRMBALvvvjs6OpwA4auuugqA4yYCAEuWLMF+++0HAHjssccAOBPrxRc7Od7ZZ7gwjcfjqK93SpzzdfjwlIq7itJn2LBhA4qLiwEAAwc6RfXi8biMfxde6OSxv+uuuwA4m7U1a9YAcNwCeDxda7755hsAkHklHA6jrKwMALB1q1N0qba2tquL1F6Fc8esWbNQWurk5+fCkn0+Pz8f557rFFhbtGgRAKCmpkaEk9ra2pTvvOKKK/Daa049gm4sTjtFzf2KoiiKoiiK71AlVekzxONxUZTIwoUL8X//51RA3LbNya1Ms+aoUaMkkIS73JKSEuy7774AgPPPd0piUz31i4oKuCb6oqIi+TdVZPMe0GnfNvsDroLKY0KhkKjM/+t0psgDwOeffw4AePHFFwEAN9xwQ25OzMJu72+99ZYEaHz22WcAgL333lva+e677w7ADYhavXq1BIwccsghAIBf/epXYq7k90ejUQBOH2P/YXDI0KFD5Thb2VUUP8LxvrW1VVRTtvFAICCBQuwvjz/+OABgzZo18lkyduxYlJSUAHDbPxXVRCIh4ywV246ODvkOqqx+ZMECp3ptOByW4Fx7Htm8eTP2339/AK5JPx6Pi+WOaiw/v2XLloyfpyqpiqIoiqIoiu9QJVXpM5jqzZw5cwA4qTLoq7nHHnsAcJ3g6+vrxa+IO8Rt27bhpZdeAgC8+uqrANz0I9OmTcv2JXQZql/FxcXiS8X3eC3RaFR2vLw3sVhMlNf29vaU7wwGg7Lr7+vsSAndEV6BZqSmpkZ8O6lQ0netM5/mTGIrlvSJW7JkCcaPHw8A+Pvf/w4AqKqqEr9THn/ssccCcM6f7ZzBVJFIRL6PQVX8vWg0Ku2MytNXX32FPffcMyvX2Re5/vrrxQpDlUkVZn/R0tICwAn24VjBsa9///7S56mo8rlVVVWlPcNoNCq+/Pa4Yx5Lf86ioiLpX35WUv/73/8CcO6LndaQY8Do0aMxdepUAG5MRHFxsbR3WumopNbV1eHLL78E4NzLTKBKqqIoiqIoiuI7fKekcoVu7ky7uzt96KGHALjRfBdccAEAZ6eTqYgzpXdZunQpACcKkZGJVL3ef/99AE7kIaMwubMeNGiQRMuTL774AoCTFN0vUZlmhgJGbtsKqZk+zk47xc8C7g6/oKBAfIj6OpnyHza/Z+7cuQCA6dOnyzjBe8ciCB988EFGfndH2GMeo/AHDhwoaaPuueceAMD8+fNx8MEHA3CjjqmQHnHEEXjuuecAAJdffnnad7ONUDUtKCgQFYWsXr1alNRdXSn0UujfeOMNAMB9990HwPFjZEoisqvNK921VNjHM0L+8ccfx913352FM+wawWBQ+jDHT9PaRExllWsPfi4YDMrx9vokEAjI3zi2xuNxX8U3bA/Ok4FAQOYUXgvnnP79+8s6iu9FIhHx0f36668BuGutWCwmc3OmlFTfLVI5CHoNhrxJ/JtXQ1i7di0effRRAO7AcfrppwNwBm41y+wacNIMh8PipE5zDvPblZWVyeKCJv6mpiZZ1A4bNgwA5P90fPcDbKdFRUWy8GR7NwddDi689mAwKCYY8z3AWcByMaK4nHfeeQDctF+DBw+WIDy+nnPOOb1zct/y1FNPAQC++93vppnqGxoaJBCKqaSYPqq0tBQ33ngjAMgGrLGxUdq87U5QWloqC1fS3t4u94YuNbsq9pwyd+5cPPjggwDcPvnII4/I3+35xE9p7LqK14KU/+b4wva0xx57eF6f/d7o0aMBAC+//DJ+/OMfA3BzauYCc+zzqtBn5/A07wHHT5JMJuU4zjW8LxUVFSKA8B4UFRVJu/Azq1evBuCcN+cFO29+KBSSazcX6DyewhDN/YlEAm+99RaAzI2Zu9b2T1EURVEURdkl8IWSSoU0FApJdYg333wTADBlyhQ5zt7heDFlyhRRBRjsQMUhkUiogtqHMVUKppF68803pToGzS0Mljr++ONx5JFHAoCkqSoqKhKlla9Uh1hRww9wpx8KhdKc1E2li33HVHRMUxSAlHQhfWGHv7PYakBnytadd94pYw6DHEaNGiVmfZrIGUiVC8xUa1SwmBZqt912w/r16wG46h3PH0Ba0FM8HpfE3GZwFP/NsZJt6qWXXhLXAapFZWVl8hu7kpJKtc02/QJuCrKXX35ZKu784Q9/SDvOnk/6mooKpFtczGs67rjjALhJ28vLy6VNsl57ZWWlBO5RLZ08eTIA4OGHH8a6detS/pZN2K7NICnOC5wnRowYIX+3x8q8vLy08cM8jnMEX+PxODZu3AjANXkPHjxYArL8bLnlMw0GgyluYgBSisRw7OF40L9/f1FQ7TkzkUhI4FSmUCVVURRFURRF8R29qqR6JSf/zW9+A8B16p09e7b4tBxzzDEAXL8rE6YRWr9+vSSt/v3vf5+lM+89zOAvqm3cubS2torPDP+2Zs0a8d884IADALjOzkyf0peJRCKSrJm7QZZsGzRoEKqrqwG4iftnzpwpvqgMTvJLsJQJFdJAICDPmyqZmVidfYjP2/S/4ufoMxUMBvuk0tNdzICH7fH6668DcHwO2S/4uSeeeALXXnstgNwqqMQ8bwZMUc2rrKyUQD8qHJMnT8batWsBQFQrJilvbGyU77N9TQG3TVFtHTdunCi1VFknTZqEJUuWAHB8YvsStr+laY3pTEFl/fYzzjgDp5566k79pt9hu6BSFgwGJT0Rk9azfUSjUSkmwXFl7dq10j7mzZsHwC3BW1dXh7/97W+5uAwArg855wIzoG3FihUAHAsafWbZ/mml2t4zs4OpGKC4cuVKUZYZkEvLLX8L8GcqKqbTq62tlbgd3oeZM2cCcIrf2MpyIBCQdQbXWpxLm5ubsWrVqoyepy8WqWxI33zzjQyuHIDXrl2Le++9FwDwz3/+E4DbQG666SaJXDUldzq6E074Jn0tGpP3qqOjQwaVV155BQAkerKqqkpkepr7IpGILEq5GKurqwPgdDDbgdzPmO4anEDj8Th+/vOfA3CvgaaI6upqmXDZrqZOnYpx48YBcKuMeJl3ehs+4+bmZhk4eX0cSILBoEwsfN6FhYVynF1x6n8Fe3FqLkw+/PBDAMCPfvQjAMD48eOlLfFvv/jFL2SzTHrLbMdFAie+uro6mRT/85//AHDGQ268uKFnXsfS0tK0qlKAez383o8//hgApC8BbnTugQceKH3Kz+ZLL+xFh/l/RiEnk0m88MILACBRyzRf8xVwFzSFhYUpi177+/vK4pRwDjBNvhdffDEAZ6NvHhOPx2X+ZaBpaWmpCCETJkwA4N7bLVu2yHu5gOMh5/zi4mJs2LABgCtyBYNBcQnz2qjYIpAJnzcXnxUVFbI4ZUWmfffdV9YvbDN+WqRyvONaIZlM4qSTTgLgVrEjgUBAjqNpv62tTcaS73znOwBc4WvlypUZn2/8vzJRFEVRFEVR/ufoVYnFVu9222033HXXXSnv1dXVycqfuxhWTgmHw1IrlqrRCSecgDFjxqR8Bz/ntWvyM6YCxFfTZEe5nmaX9vb2NEfmI488UlREqiALFy6Uv/cFBdULKh5bt26Vyjvc1ZGCggK5ZrpE7LPPPnjiiScAAMuWLQMA3HzzzTk44+7BFEEbNmyQf9sKzcCBA0UpZmDLIYccItfMtsKdbSKR8DT57urk5eXho48+AgAcddRRAJygOsBRB2hSP/zwwwG4+TBNqBy2tbWJqki3kmxAJZRKDIOZvvjiC3FdoaJ14403iuLH/k9z7QEHHJCivPM7+Vma6aiamkFbt9xyCwCnn9DEy1RUfbUC1fLly/HMM88AcK+hqqpKxtIDDzwQAPDJJ58AQErOWKbZMelrqqkX9hzw9NNPS3oizrU075rzi1ceUbYnWutyHahpB4sGAgFps+wjsVhM5syurgnsNEy89iFDhkjAFC0cTU1N0ufsnMN+gFYT07LCdsz5hLS1tYkqTTU4EAjIeouK9KGHHgoAePLJJ+U93g+6ivSUvrlCURRFURRFUXZpfOesZjudV1ZWplX34DEnnXRSSqoEAPjtb3+b9p3cLYXDYVFlR40alYWz98bLkZ7vmTtNMw2GfTz9XWbMmIE///nPANKVH6/AmGAwKMoPgyq8fG38QleTYXNHX1ZWJrv8BQsWAHDrlm/atEnUEqrrn3/+uaTeoD+e6UPjF587KsVmImnC+xMOh3HCCScAAP71r38BcBQMO6UWd/N5eXmeapAfyWTwyfLlyzFp0iQAbuUoKolvv/22+NYxTZkJ790dd9wBwPH/ZlDIpZdeutPntj04TvHVTEFl+/iNGTNGrAIMDuH1RSKRNEtKMBgURZ3vsQ+Z7Z5+iRdddJG0JY4lfOXv+BW7P7/yyiuiIDGF0pYtWySI1B4ba2trJd2dV1ukDyQtNffff78E5Vx33XWZvJSsYAbiMljm/PPPl7mFihnvSyQSEeWQr5FIRPoQ1Tb2GyrUuYJKLuf8jRs3ynjP99h2u0oymZT2w/vA+xKNRuVvVGfXrVuHsWPHAvCOh+ltqCyzb5SWlorKfOuttwJw55/CwkK5X/TDLS4uFuveq6++CsANqCwpKZH+xSBEVVIVRVEURVGUXQ5fKalmpKSdWgdIV7cWL14sKgFVwueeew5XX301AEdBAdwo7vnz5+Pss88G4CojucCMBLXT43QWCZdIJCR7ARWw/Px8qdnNe/Tkk08CcBQB7m65wx8xYoTsbKh68P+NjY0p6TL8QleSsZvR/UxBxd0d/euGDh0qChRfzdKnFRUVAHKrqncVu1Y0kO5j2tjYKKmJGAX+4osviuXBTq/it5rS7Ate5RjtErBAaglDu8CBV5aK+fPnAwDOPvtsKerAfkefz/Xr14vSQlauXInbbrsNgOu3zBJ/s2fP7nZKop7A3+WzZHv3SqZ/8cUXS8o+qh70uQWCqvlUAAAXoElEQVTca2YfMAs+sI2MHz9+u+eSSCTke3k8/c1s/3+/Yc8ZN9xwg+dxTPROixXHxSlTpmD27NkA3MT2DQ0NUmyGvs5UziZMmOCZIrE36cw6ZfYX+jrvu+++Mk4yMp5zRmlpaVpmg0GDBsl4xfZBCyfn51zBOcAs58pz41jR1taWlnKK12KOLSZ8j/MwFVvzWM5Dq1atkjmF87GfYPo9KqPl5eWSuotjIcedRCIh94++pnl5eeKPz3LM/K5gMChzEdcu3/ve93bqfH21SPXqSOaASj799FMAjimBZihWs9i2bZukGGK+Lt7wUCiEyy67LDsn3wnmZGybDVasWIE1a9YAcBsITUehUEg6BRv9Pvvsk5JeBnCq5gBOfkd2Tn5/OByW76P5jh3y/fffl9QTmaan5tquHs/BMxaLyQRKkx0H1IceekgWdhdccAEAYNiwYWlO8BxQ/QQHt46OjpRKH4A7sXR0dEh7YmALkLoQB9zFbTgc9tWg6eXWQjjZcWFlY94DIHWzx+BLusEce+yx8qw5gPJzZ555ptwfbmDfffddXHTRRQDcKkMchJctWybnlk1T9wMPPAAA+PWvfw3ANcebKZFIU1OTTJq8Fpr9d999d1lw2ceYMFDGKyDqyiuvxEMPPQTAvX+8n35dpNpzxo7cdzjpMrCOrkM/+clPJNCS+XQXLlwoAbunnHIKADdwJBqN+i7l247GVG50uQGqqqqSRQvHVnOBR5M+Tfn9+/cX8zBfzY10LrHdC0aOHJmyYSPdTTtoi0t8pdkfcOeY9vZ2X7tV2RuHM888UzZdhAvTlpYWGYN5TZyPANfN8t///jcAxwWK6dwmTpyYkfNVc7+iKIqiKIriO3K+5etqYIyJfTzTW8RiMVHBuPO75557REli+gwSCAQk6XUusIsVAJB0Sdy5H3PMMaJu0eTGHUt5ebmYoX73u98BcNRTFjWgskbzY0dHh6glVGfPOussPP300wBcMzjrkc+YMSNrSmp3n3FnyqtXMJOZlozKFpObs/pJYWGhmGAuvPBCAI5qQNWDO0KqIvZv9CZsp7FYTK6Pu1szOTt3srQWtLe3i/rBdsR72tHRIUqHHzBN+nZwGHfvzc3Nch2mic4ucECl85JLLpH0S0ze3dbWJkENVBGppC5dulSOY4L/G264IS0lC5XMgQMH5kQloWrHcYKFOLyCEG6++Wa5fi86S8TP+0F3qeXLl8tvE/YX87vYr/yEOYZsrx8vW7ZMTJQcI83a5VQTqRCffvrpEhRy0003AXBcAziWci6ideuoo47arvrfWyQSCVEC2YdobRo8eLDcK5plP//8c+kfVOH53KPRqLxH680777wjcxcrP9LKx3RHfiIWi/V4nOd6w2sc5ZjhZxUVcNcSfAVciwDXIhwXzJR7bNdm0Qeq6nSTmTVrVsr3ZgJVUhVFURRFURTfsdNKamfKaCKREJ8Nrr57Erhhqyz0j2pvb5edG3e2M2fOlF1dQ0MDANdvJBKJZD15fTKZ9FRQAUflOfHEEwG4qXBmzZol6T7oS2vCkmtUDltaWsT/lk77DBBZvny5KIb0MTH9zx555BEAbvnHsWPHSjkz06exN+isXZi73sWLFwNwVaHRo0fjjTfeAOCm1uDzzsvLE4WdbSIajYqCQsW9uroaACS4xg/Q33HkyJHiQ8T2zPsxcuRIaWPc0ZaVlYmqSnWNO/vi4mJfKanEq09S/b/uuuvEH5vPHnB9VmfNmgXADY4cPny4jAlUABoaGmT84ee++OILAI6/KssKUymorq4W5Yn3lQpUcXFxWsGMTENrCOAqUuz/0Wg0TamLRqPSRtjfqZStX79e/kZ1rKCgIK1UKvt/fX19mpIKuM+IAVN8JvX19TudYiZTeKX4Y6EGquuFhYXie8x76wWfQSKREN86qkyLFi1KSwLPNnTooYeK6p1NbJ/bzlTkQCCQVuqTgV7jx4+XQC/eowEDBqT4sQNI6T+0PLF4Sk1NDRYtWgTAnVuoOO61115ihchlaVDT59SrhC2vh9Y08/54jUd2SWrSmQWjL8E5kO2D8ybgqsYcO2OxWFoQL4vJmGQqjWBGF6l27s9QKJQiDXcFfpbfFQqFxFRHsxz/f/3110u0JhdlDz74YEqkGeBGpeVi8OisdvNHH30k5iEGSdXX18sDZr1wr4fLPI9PPfWURKXT5Mbr/Oqrr2RRa0LHf+Z35KCbSCRkwdbbi1QSj8dlMrXbzqeffiq5LLlQ+OSTT6TDbNy4EYC7+GxtbU0LbqmqqpJ61Fz02fWK/cSCBQtkIXHVVVcBcLNW/PKXv5QFOSfNr7/+GrfffjsASJAg2/2cOXN8tRA3AwrtPsPo+pNOOkna6Jw5cwA4EyEXrAyOZB9obGyUgZOLp+HDh4s5m0GEf/zjHwE4QQMMGuKEZQZr2pWfhg8fnnWXkKVLl8pzpWmV98Ar6CkYDEqb5nmbVcc4HvK+hMNh6Vt25P+XX34p12yOlwxI4fE8j8bGxl5dpHotRpYvXy7BG9zQc+MyZMgQ/OUvfwEAPPvsswCcgFIGytFViALAokWLpPIWF7decEwOh8NZy6DRFXcGL9avX4/p06cDgOTYZrDUsGHDxKXFzBvLsZQbPT7jSCSCtWvXAnAXaPn5+bKQYfAq+9LKlSvFvYLPIhd09gwCgYD0ZzuLkNmezMWqnT/XzB+7oyDPvoS9+YpEImlVs/Lz82V84fHcCJsZg+xgs56i5n5FURRFURTFd+y0kmruNrh7MdNV0KH2iiuuAOAEDrE+sq0CAakKAODs7OnQTRXoqaeeSvtt04xJ5Ynfxf9nM/0Od6MffPCBmE+o4vF18ODBabXWx4wZI2ZqKr5UCU3TA3PYzZs3T+4b09FMnjwZgGP+tYMjwuGwqAMMBjArcOUCO92HV+5LEgwG03Ze8+bNA+Aopbx2KtJm/WHeB9P0YJtrR44cKSnMqBLwvvuRzZs3y/mxqhRNv+PHj08zP23evFnMa1QP2Z7mzZsnKY1yYVXYEV5mNY4TfG4jR44UEzPV1REjRsh1M2US27gXLS0tEoDEuu20JqxYsUJURX5nv379RGli36SSmQsqKyvTAlZ4/l6qxMcff4wzzjgj5T2On17He1Wc47jRr1+/lD5FWF2LShzxOjaXeClmzz77LKZOnQrAu+IRXaJmzJgBALj99tulqtSjjz4KwB1D5s6dmxYk5uXiRpejAQMGyHdlGvM3mRf3gw8+AOC6cpSWlorpnRWkRowYIc+cijKV9+rq6rQ20traKu2Hljl+ftiwYaIY0tWmo6ND+gvd2TjXLl26NOsudl2F1xCPx9NSQZK8vLxOz9dWTfPz80U17itKqpellgHatiuTeU12blnAHcN5D7IxHvij9SiKoiiKoiiKQY+VVO6829vbZfXN3Rx3U8XFxeJkzdX3hx9+KEqq7f8AuAoAFYzDDjsMP/vZzwC4fmResF4y4K7mbZUpm+mnqEwVFRXh7bffBuDeD/7uKaecIqoYK8rU1taKjy2T8jMVDp2ZgdSdChVQBloxcfeyZctEZeMOp6CgQJ4B1WaeV0NDQ05qK9uqQ2c+KslkUnwE33rrrZTPNzQ0yP0zg4HY/piCimr1xIkTJek/lZGmpiZR36jWsc21t7d324c620yfPh3XXHMNADd9GdvCySefnHb8ueeeK2ohU5XxmiZOnOi7ajjkxhtvBADpO1SjVq1aJc+a5x4KhaQP8PnS0sB7ZFJRUYGXX34ZgGt9YP8rKSmRvsKgj3A4LH2EVhAqT7lQhZqamqRNUrnxqjTF4J6ioiJp0+z/Xkoqr8mrQIpZAc+rtjm/n8FGtp+aH+A5jRkzptN+zGfJ2uIApI/Rn53taMiQIWnWKS/1ls+HvpzZ5JJLLsFf//pXAO4Yxrk0Go3KeM8UjKNHj5ZnTysLz3PYsGHyvKmmdXR0yNzJ7+UYG4lEJCiK7S8/P198vZnU3fRT9ktxA7aPRCLRJT9JL8WQn+P9BHrfmtBdvJRUxqSwLZip+uzKgGZAPNsFv7OpqSnjPuqqpCqKoiiKoii+o8dbHO4oTB8G7pjoT7Vu3bo0f57LL78cU6ZM2e73cqfH9BZnnXVWpwoqoQ+M6Q9k+1BkMwqVO3czOT6vha977rmnqKZHH300ACd6mDs8048UcCLR6RPC+3zeeed1qhIwkpI7nVAoJDs9fo67nk2bNnmmvco0vD7uRvn/xsZGUT2pnNfX14s6QOXsnXfeAeBEnTK9ElMIbdq0Sa6ZajbvFf22ALdNVlRUpCV0p89jc3Oz75TUhoYGiZhlRghen5lknWzbtk3Ucd4jtoVMlanLNO+++6741rE9ss80NjZKejmmRUkmk6LoMaqa2T3Gjh0rvobTpk0D4GT8oC8efQepEJnpedgv9thjD0nNZte4z0VZ2RUrVqREUwNusQYTjg2jRo2S87L7mqli2ZH/Jma0rpkCy4ZjEyO8c12bnZhqENU7nve5556bpgZ3lg5n8uTJoq7ef//9AFwfYABp7cPrO6jAZrNULq/phRdeEF9RRuRzLKioqJD+QstAdXW1zDu26heLxeSZmll5aLFin6M1g37ugHdpUY7V9FEF0ss09xZmNgL2f16z6a9qqqRAqvXETuUF+LOsdnfYtm1bWlwGrXUFBQVpBSDi8Xja+ML7WFtbm/LsM0GPF6nPPfccAMeRnqYg5l7jgJlMJuXC2CgOOuggzxQngNOpaOpmuinm9gTSA628HNiLioqkQ7IhmbVmc4mZuzJXdKeB5ML0u3btWkkTRBMTUz598803MthysVFWViY5GF977TUAbkWo8vJyCZjiZFBeXi4mTrp88P9btmwRVwummwqHwzKocGJi+9iwYYPvKumEw2FZXDIwjNA8Zx/PjdIPf/hDAG7KtlxsSLoDNyaXXXaZTGRmLk++8vnwmJaWFmkTfF7829atWyXQ8sorrwTg5EKdPXs2ADd4kINsc3OzLFzNlFV2+pRPPvkk5fPZxCvNlFdQBs/N3OhyrDHzHBIz7RTHZf6WuRj3WsQSVqbhhO+1eM40yWQy7Xl4BX2cdtpp8t7SpUsBuPmovRaWd9xxBwBn8r3++usBpC5OiVeeTa/qXYAzpmULur3FYjHZdPOcOC62t7fLs+HmOxqNyiKTmwuef0tLi9xbzq/JZFLaCvsJx8z9998fhxxyCAD3vnjdW/5eRUWFuPD09vhjpp2y3XbMDZx9PV5pqUzzP/uS3af6Cm1tbTLGUgDh/821E+9Dv379Ukz/5t8492YSNfcriqIoiqIovqPHSioVu/Ly8pTEx4CrkIwaNcpTRubuljWRGeBRVlaGM888EwBw3333yWe4WvcKtLKpq6tLC4hhwFA2A6cUb9577z1RG5gMm4Fe69evF7MqFYz8/HwxGXFnz7bW2toqihJNe5s2bRL1gq4eVNk+++wzOY7vBQIB+Q5bNamurvasttObDBw4UJL3mwFegHtNJmVlZaJUM4CR9z+bKk9P4PUcf/zxMk7QRYHKdyQSkfNmeygvL5fjaZWh+b+mpgY333wzADcYZs6cOaKSUoGnYptIJEThoZrS3NwsShVVKbajXFhFmCJpR1AZamhoSEuyb6fVAlJVP16rXTgjHo93qqRyzM4lO0pez4DJ73//+wBS1S0qPkyh9dhjj+Hee+8FAElFN3Xq1C71+84SxPM+Z7Ma2fHHHw/AGdfs4g50myovLxdVyzRps62w/XNONd0TqH4Gg8G01Ewcc5qbm2V+pyUuEolIO+Jv83kVFhZ26j6SC3hOZrEhWwnvLC3ijooz8LNUm/uakrp161Z5frxW2yXOfC+ZTKa4E5qwHZrftbOokqooiqIoiqL4jh4rqQzmYEJfE6oPtbW1ooIwnVJdXZ3sArnqvvbaawE4PjdewU3bS/vitVJ/7bXXZNdHp37uIuk7q2QfBjMVFhbK83744YcBuDuy1tZW2YVS3TTLWjIAiGrZqlWrxL+Vvi+xWEw+S/WE7aVfv35pu3gG5ADpKpKXP1pvYyojbNfcsXtZFoqLi+XvvEe85t4KctkeVHFOO+008UNmSimODU1NTZLehuPK1q1b5ZrYlvjMp0+fnpK+CkgtcmHWZAccVYX+rPQ7DYVC4kd3+OGHA3B9Xtvb23s1EMRMRM5xrb6+Xu4XUyGxD5npprz8KHkc+9D2Age354OZTfi8V69eLffctIgAznOkosfUdYlEQqxnt956KwBXaX/++eclyO7UU08F4Kb86w72nEQFNZuBdQwEnDZtGl5//XUAwAMPPADADQjkPTAJhUJpipfpZ9uVwB8zeIz+r/R5NX0U7dREGzdulJSTvYVtzS0qKpLzJGa7tkuldpZ2LhAIyPH2d/YVvJRUM/6H129aX3icnZLLbH+ZUlKzksCMHXW//faTvIQ0VWSb3u4QigOjtc1KPWz4XDw1NDTI5MGgqoaGBlmoMODHzEbAhZk56PLvdg12BkYBbicaNGiQTGD8HI/LVQWu7lBSUpISdQuk5kS0MScM0h13mVzC8xk9erRELvPZTJgwAYDzTBjBbAZacrFpmhX5PtsBj+/Xr19aFCrb4oABA6QdMAPAgAEDJG8gf5sbJj9lf+Aiv6WlJW3xTQKBQNoC03yP/YIL3o6ODs+F6PYWp+aiOdPQ5ePFF1+URSqvk2NDYWGhLEK4YKusrJQodAZmMsBu2bJluPvuuwEgo5WhKMbMnz8f55xzTsa+d3vQlYevpK2tTYLGKBSsW7dO+pdt3m5vb5eAZ27SS0pKZA7n5oX9JxAIyLjD71i9erX8m5+ju0xRUZFksukt7EW416LTDISysxaYVai8XGHshZ3fsa+vpqYmLcsB6ejoSMmvDDhtge/Z98MrmHdnUXO/oiiKoiiK4jv8UQpC2eWgmrB69WoxTdFEy514e3u7qJ7ckeXl5Ym6SriLLy0tlX9zd2xWyLFTlA0ZMkQUNu78SkpKRK3jrpH//8c//oEjjjgCgD9q2wOppimqR51RXFyclhaEr7wXfsHM22s76ptpp+xnYQY22apx//795Xju/PPz88VMTGWIbSyRSKTUPQcc8yDbKHNNsn1mqy57VzFVS15LQUGBKKG8b7y3ZkopvmdWVjMDpnh8T88n0zDf52233Za13+gpdru75ZZbeulMUiksLJQUbHzNNscdd1xOfqencPw01WMzcBJw23EsFvNUUond3hOJRKcqa19g69ataflfTXO+fc15eXkyXtsuEczlbX7HzqJKqqIoiqIoiuI7VElVssqYMWMkAbrpWwo46YaYzoQ7sHA4nObkz11bYWGhqIFUP0eMGJGS+B1IrUFNtcmsN03fU6pIplLnN7WxtLRUlGHu/u16ySZeNbO5o/XbtREzoJEKJlXj5uZm8Tk0C4PYKVBM/1xeJ+9PUVFRWuooPvuOjo60tDwLFixI88XjPc9miqFMwOukomoq8WxHwWAwTf2hWhKNRkWlJtn0O1WUbMP2b7Z5e44hXmOqqQh6VZzqaz6pNnPnzpUxlr7bdhyE+V4ymUxLNcZxcXv3dWdQJVVRFEVRFEXxHaqkKlnFrPPLHScjpfmajd8ktmIUiUREVTV3hjy/XNRm7y5UFXn/qBp6pY6JRqPyPnf2fPVLDe3OsFVxM0NDruhJSqLeJBgMSsosZlNhmiCzhr1ZwpTvUzWlAsvPKcqugl3cwCz1ac8BiURCVFLT35LzCK00ZnlUu6ys37HV4quvvlqK6jDdX1fjIDhu8D4uXrw4k6cKQBepSpbpDTOh12/SDDFw4EBfLkQ7g4t5u669bZYFnHRONNlwUKZrRLY2BUrvcumll+KZZ54B4C4yzaAqbmq4MG1sbExJEQS4QY0HH3yw5FpVlF0Be3Fquj3R7YfHJBIJWXCZ4ootdpgLUjvXsN+xTfInn3wyTj75ZACQ6oYLFy4E4LjHMeiUQZWBQEDuGze+HDNYTTSTqLlfURRFURRF8R15Xo7CiqIoiqIoitKbqJKqKIqiKIqi+A5dpCqKoiiKoii+QxepiqIoiqIoiu/QRaqiKIqiKIriO3SRqiiKoiiKovgOXaQqiqIoiqIovuP/AZRmDjTl01IQAAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "kiKEyt7eCxBq" + }, + "source": [ + "model = keras.models.Sequential()\n", + "model.add(keras.layers.Flatten(input_shape=[28, 28]))\n", + "model.add(keras.layers.Dense(300, activation=\"relu\"))\n", + "model.add(keras.layers.Dense(100, activation=\"relu\"))\n", + "model.add(keras.layers.Dense(10, activation=\"softmax\"))" + ], + "execution_count": 23, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "U9et9vnoCxBq" + }, + "source": [ + "keras.backend.clear_session()\n", + "np.random.seed(42)\n", + "tf.random.set_seed(42)" + ], + "execution_count": 24, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "d2OMsTXmCxBq" + }, + "source": [ + "model = keras.models.Sequential([\n", + " keras.layers.Flatten(input_shape=[28, 28]),\n", + " keras.layers.Dense(300, activation=\"relu\"),\n", + " keras.layers.Dense(100, activation=\"relu\"),\n", + " keras.layers.Dense(10, activation=\"softmax\")\n", + "])" + ], + "execution_count": 25, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "gyDDtzJ4CxBr", + "outputId": "d8ee7f56-44fd-4cc1-f7a7-56f7bd45b79b", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "model.layers" + ], + "execution_count": 26, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "[,\n", + " ,\n", + " ,\n", + " ]" + ] + }, + "metadata": {}, + "execution_count": 26 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "MCJrw-1wCxBr", + "outputId": "c2c5aeea-cb84-42fe-b063-c4ae7e14fb10", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "model.summary()" + ], + "execution_count": 27, + "outputs": [ + { + "output_type": "stream", + "text": [ + "Model: \"sequential\"\n", + "_________________________________________________________________\n", + "Layer (type) Output Shape Param # \n", + "=================================================================\n", + "flatten (Flatten) (None, 784) 0 \n", + "_________________________________________________________________\n", + "dense (Dense) (None, 300) 235500 \n", + "_________________________________________________________________\n", + "dense_1 (Dense) (None, 100) 30100 \n", + "_________________________________________________________________\n", + "dense_2 (Dense) (None, 10) 1010 \n", + "=================================================================\n", + "Total params: 266,610\n", + "Trainable params: 266,610\n", + "Non-trainable params: 0\n", + "_________________________________________________________________\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "A2Tvbra4CxBr", + "outputId": "0a5ed398-272b-4cdf-cd09-d18f8ace4ac7", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 533 + } + }, + "source": [ + "keras.utils.plot_model(model, \"my_fashion_mnist_model.png\", show_shapes=True)" + ], + "execution_count": 28, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAcMAAAIECAYAAABlg0VPAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nOzde1RTZ9Y/8G+AQAgkXFQu4g2CWvEyjpXfEloH0dZqGfGCVFrtRduK2op4qwJqLeKFYpGFyjiiZc2rtgpo0VqpM9phHF6tqx3xVXFq8Q4qIsqdIAj794dNakzEBAIHkv1Zi7Xa5zznPPuck2Sbk/OcLSIiAmOMMWa+MiyEjoAxxhgTGidDxhhjZo+TIWOMMbPHyZAxxpjZs3q64dSpU0hMTBQiFsYYY6zNZWRkaLVpfTMsLCxEZmZmuwTEmDn58ccf8eOPPwodRqdSVFTEn0fMaJp7PWl9M1TRlTkZYy0XGhoKgN9bhkhPT8e0adP4mDGjUL2edOHfDBljjJk9ToaMMcbMHidDxhhjZo+TIWOMMbPHyZAxxpjZ42TIWCdz5MgRODg44NtvvxU6lA5pzpw5EIlE6r8ZM2Zo9Tl27BiioqKwf/9+eHl5qfu+/fbbWn3Hjh0LmUwGS0tLDBw4EGfOnGmP3Wix2NhY+Pj4QC6Xw8bGBt7e3vjkk09QXV2t1ferr76Cr68vZDIZevfujZkzZ6K4uFjwcQ8dOoT4+Hg0NjZqrJeVlaVxbrt27dqiWHWip+zbt490NDPGWmnq1Kk0derUVm/n8OHDJJfL6dChQ0aIqmNryedReHg4OTs7U3Z2Nl26dInq6uo0lq9atYomTJhAlZWV6jaFQkFdunQhAHT48GGtbWZnZ9PEiRNbthPtLCAggLZu3Ur379+nyspK2rdvH4nFYho3bpxGv7179xIAio+Pp/LycsrLyyMvLy8aOnQoNTQ0CD5uUlISBQQEUFlZmbqtqamJioqK6MSJE/T6669Tly5dDIqxmddTOidDxtqJsZJhR1JbW0t+fn5ttv2WJkMPDw+dy9avX0/9+vUjpVKp0a5QKGjPnj1kYWFBHh4eVF5errG8MyXDoKAgevTokUbbG2+8QQDo5s2b6rbAwEDq3r07NTU1qdu2bNlCACg3N7dDjBsREUF+fn46k/OCBQuMmgz5MiljrMV27tyJkpISocPQy+XLl7Fy5Up89tlnkEgkWsv9/f0RGRmJW7duYcmSJQJEaByHDx+GpaWlRpvqcmJtba26rbCwEO7u7hCJROq2nj17AgBu3LjRIcZdvXo1zp49i6SkJIPjMRQnQ8Y6kdzcXPTq1QsikQhbtmwBAKSkpMDOzg5SqRQHDx7E+PHjIZfL0aNHD3z99dfqdZOTkyGRSODi4oI5c+bA3d0dEokE/v7+OH36tLpfREQErK2t4ebmpm776KOPYGdnB5FIhNLSUgBAZGQkFi9ejCtXrkAkEsHb2xsA8P3330Mul2Pt2rXtcUj0lpycDCJCcHDwM/vExcWhX79+2LFjB44dO9bs9ogIiYmJGDBgAGxsbODk5IRJkybhl19+UffR99wAQGNjI1atWoVevXrB1tYWQ4YMwb59+1q307+5desWbG1t4enpqW7z8vLS+oeM6nc7Ly+vDjGuk5MTAgICkJSUBGrrOvQGfI1kjLWCsS6TFhYWEgDavHmzui0mJoYA0PHjx6miooJKSkpo5MiRZGdnR/X19ep+4eHhZGdnRxcvXqS6ujrKz88nX19fkslkGpeypk+fTq6urhrjJiQkEAC6d++eui0kJIQUCoVGv8OHD5NMJqPY2NhW76sxL5N6eXmRj4+PznUUCgVdu3aNiIhOnjxJFhYW1KdPH6quriYi3ZdJV61aRdbW1rRr1y4qLy+nc+fO0bBhw6hr165UXFys7qfvuVmyZAnZ2NhQZmYmlZWVUXR0NFlYWNBPP/1k0P4/raamhmQyGUVERGi05+TkkFgspuTkZKqsrKQLFy7QgAED6LXXXmvVeMYeNyoqigBQXl6eRjtfJmWMPZO/vz/kcjm6deuGsLAw1NTU4ObNmxp9rKys1N9mfHx8kJKSgqqqKqSlpRklhqCgIFRWVmLlypVG2Z4x1NTU4Nq1a1AoFM/t6+fnh4ULF+L69etYvny5zj5KpRKJiYmYMmUKZsyYAQcHBwwePBjbtm1DaWkptm/frrVOc+emrq4OKSkpmDx5MkJCQuDo6IgVK1ZALBa3+rysW7cO7u7uiIuL02gPCAjAsmXLEBERAblcjkGDBqGqqgo7duxo1XjGHrdv374AgPPnzxslrmfhZMiYibK2tgYANDQ0NNtv+PDhkEqlGpf3TE1JSQmICFKpVK/+cXFx6N+/P7Zu3Yrc3Fyt5fn5+aiursbw4cM12n19fWFtba1x2VmXp8/NpUuXUFtbi0GDBqn72Nraws3NrVXn5cCBA0hPT8fRo0chk8k0lsXExGD79u04fvw4qqurcfXqVfj7+8PPzw+FhYUtHtPY46rO2d27d1sV0/NwMmSMwcbGBvfu3RM6jDZTV1cH4PF+6kMikSAtLQ0ikQizZs2CUqnUWF5eXg4AsLe311rX0dERVVVVBsVXU1MDAFixYoXGPLobN25o3HxiiL1792LDhg3IyclBnz59NJbduXMH8fHxmD17NkaPHg07Ozt4enoiNTUVt2/fRkJCQovGbItxbW1tAfx+DtsKJ0PGzFxDQwPKy8vRo0cPoUNpM6oP1KcncTfHz88PixYtQkFBAdasWaOxzNHREQB0Jr2WHMtu3boBADZt2gQi0vg7deqUQdsCgM2bN2P37t344Ycf0L17d63lBQUFaGxs1Foml8vh7OyM/Px8g8dsq3Hr6+sB/H4O28oz6xkyxsxDTk4OiAgjRoxQt1lZWT338mpn4uLiApFIhIqKCoPWW7NmDQ4fPoy8vDz06tVL3T5o0CDY29vj559/1uh/+vRp1NfX48UXXzRonJ49e0IikeDs2bMGrfc0IsLy5ctRVlaGrKwsWFnp/ohXJes7d+5otFdVVeHBgwfqqQ4dYVzVOXN1dTUoJkPxN0PGzExTUxPKysrw6NEjnDt3DpGRkejVqxfee+89dR9vb288ePAAWVlZaGhowL1793TOPXN2dsbt27dx/fp1VFVVoaGhAdnZ2R1uaoVUKoWXlxeKiooMWk91ufTp+XMSiQSLFy/GgQMHsHv3blRWVuL8+fOYO3cu3N3dER4ebvA4M2fOxNdff42UlBRUVlaisbERRUVF6sQRFhYGV1fXZh8Hd/HiRXz++edITU2FWCzWuOQqEomwceNGAICnpycCAwORmpqKEydOQKlUorCwUB33+++/r96mUOOqqM7Z4MGDDTmkBuNkyFgnsmXLFvj6+gIAli1bhokTJyIlJQWbNm0CAAwZMgRXr15FamoqFi9eDAAYN24cCgoK1Nuoq6vD4MGDYWtri5EjR6Jfv3745z//qfF72rx58xAYGIg333wT/fv3x5o1a9SXqZ680WHu3LlwcXGBj48PXn/9dTx48KBdjkNLBAUFIT8/X+P3v2+++Qbe3t64cuUKfH19MX/+fK31RowYgUWLFmm1f/rpp1i3bh1iY2PRtWtXBAQEoE+fPsjJyYGdnR0AGHRukpKSsHDhQsTHx6NLly5wd3dHZGQkysrKADy+XFhSUoKDBw8+cx9Jz7l4IpEIGRkZCAsLw/vvvw8nJyf4+Pjg5s2b2L9/P0aOHKnuK9S4Kj/99BM8PDwwZMgQvcZoMQPmYTDGWqEjPI5N9dzOzsKY8wwLCgrIysqKdu3aZazw2lVjYyONHDmSdu7caRbjEhGVlpaSRCKhjRs3ai3jeYaMsVYx5CaSzkqpVOLo0aMoKChQ34Dh7e2N2NhYxMbG6qyk0JE1NjYiKysLVVVVCAsLM/lxVVavXo2hQ4ciIiICwONvoLdv30Zubi4uX75s1LE4GTLGTM6DBw8wbtw49OvXD7NmzVK3R0VFITQ0FGFhYQbfTCOknJwc7N+/H9nZ2XrPlezM4wJAYmIizp49iyNHjkAsFgMADh48CA8PD4wcORLfffedUcczWjJ8+PAhFixYADc3N0ilUrzyyivqO7i2bdtmrGEEYwo15H788UcMGDAAFhYWEIlEcHV11Xo6hNCeri/n5uamsx4dM1x0dDTS0tJQUVEBT09PZGZmCh1Sm9i2bZvG1ITdu3drLF+7di0iIiKwfv16gSI03JgxY7Bnzx6N58Wa8rgHDx7Ew4cPkZOTAycnJ3X7pEmTNM6t6jm5xmC0qRVffPEFvv/+e/zyyy9IT0+Hs7Mzhg4dqn6UTmdHbf2Q2HYwYsQI/Pe//8W4ceNw9OhRXLp0ST1fqqMICQlBSEgIvL29UVpa2uJCo0zbunXrsG7dOqHD6BDGjh2LsWPHCh0Ge4aJEydi4sSJ7Tqm0b4ZZmVlYfjw4XB0dMTs2bMxderUFm1HqVTC39//uW3tLSgoCBUVFZgwYYKgcQAd43gYiyntC2Os8zJaMiwqKlJf120NXfXROlPNtPZgSsfDlPaFMdZ5tToZ/uMf/4C3tzfu3LmDv/3tbxCJRDqf16fy73//Gz4+PnBwcIBEIsHgwYNx9OhRALrroz2rZlpztb8MqSGmD1OvIdfR9sVQzb2mPvjgA/XvjwqFAnl5eQCAmTNnQiqVwsHBAYcOHQLQ/Gvq888/h1QqhUwmQ0lJCRYvXgwPDw9cunSpRTEzxjoYA+ZhNMvV1ZXeffddjbaCggICQH/5y1/UbRkZGbR69Wp68OAB3b9/n0aMGKExV0RXfTRdbc+r/aVvDTF9mVINuddee40AUFlZWYfcF6LH9eUcHByeuy9E+r2mLC0t6datWxrrvfXWW3To0CH1/+v7mlqwYAFt3ryZpkyZQv/973/1ipGoY8wz7Gx43jMzpg41z3Dq1Kn49NNP4eTkBGdnZwQHB+P+/fsGPTHfkNpf+tR3ay1TqiHXEfbFUM97Tc2dOxeNjY0a8VVWVuKnn37C66+/DsCw19SGDRvw8ccfY//+/XjhhRfab0cZY21G8Ad1q35nNGQicEtrf+lb3601TKmGXGfdl6dfU6NHj0a/fv3w5ZdfIjo6GiKRCHv37kVYWJj6mZNtVU/uaZmZmRCJREbbnrngY8baWrsnw++++w4JCQnIz89HZWVlixLTk7W/VqxYobHM3d3dKHG2B1OqISfkvjzvNSUSiTBnzhwsWrQIx48fxyuvvIL/+Z//wZ49e9R92us1NWLECCxcuNBo2zN1p06dQlJSkvq3W8ZaQ/V60qVdk+HNmzcxefJkTJkyBV9++SW6d++OzZs345NPPjFoO0/W/oqMjGyLUNucKdWQa+99OXHiBP7zn/9g4cKFer+m3nvvPURHR2PHjh3o2bMn5HI5evfurV7eXq+pHj164I033miz7ZuipKQkPmbMaDpEMjx//jwaGhowb948eHl5AWjZ5Q9j1f4SkinVkGvvffnPf/6jrgqg72vKyckJ06ZNw969eyGTyfDhhx9qLDeF1xRjrOXa9QYaVXHMY8eOoa6uDgUFBRq35AO666M93WZpafnc2l8djSnVkGvrfXmWhoYG3L17V6NEjj6vKZW5c+fi4cOHOHz4sNbDE/SpJ8cYM2EG3Hqq0/Xr1+mPf/wjASArKysaNmwYZWZm0hdffEGurq4EgOzs7GjKlClERLRs2TJydnYmR0dHCg0NpS1bthAAUigUdPPmTTpz5gz17t2bbG1t6eWXX6bi4mKdbQ8fPqRly5ZRr169yMrKirp160YhISGUn59PW7duJalUSgCob9++dOXKFdq+fTvJ5XICQL1796Zff/1V733cvHkzubm5EQCSSqUUHBxs0Bjh4eEkFovJw8ODrKysSC6X06RJk+jKlSsa49y/f58CAwNJIpGQp6cnzZ8/n5YuXUoAyNvbWz11QdfxOHLkCMlkMoqLi3vmfvz44480cOBAsrCwIADk5uZGa9eu7VD78pe//IUUCgUBaPbvwIED6rGe95p60h//+EeKiorSeXyae03Fx8eTra0tAaCePXu2qAwQT60wHE+tYMbU3NQKEZHmQzfT09Mxbdo0k3gWZ0cxZ84cZGRk4P79+0KH0mqdfV+CgoKwZcsWeHp6tvvYoaGhAICMjIx2H7uz4s8jZkzNvJ4yuIRTOzGlGnKdaV+evOx67tw5SCQSQRIhY6xjM9tk+Msvv6gf09XcnxAFLZnxLFu2DAUFBfj1118xc+ZMrFmzRuiQWBubM2eOxntYVwmwY8eOISoqSqtk2Ntvv63Vd+zYsZDJZLC0tMTAgQNx5syZ9tiNFouNjYWPjw/kcjlsbGzg7e2NTz75RGdB46+++gq+vr6QyWTo3bs3Zs6c2eJKMcYc99ChQ4iPj9f6h3dWVpbGue3atWuLYtXJgGuqrAWioqLI2tqaAFCfPn0oIyND6JBarDPuS0xMDFlYWFDPnj01Hr0mBP7N0HAt+TwKDw8nZ2dnys7OpkuXLlFdXZ3G8lWrVtGECROosrJS3aZQKKhLly4EgA4fPqy1zezsbJo4cWLLdqKdBQQE0NatW+n+/ftUWVlJ+/btI7FYTOPGjdPot3fvXgJA8fHxVF5eTnl5eeTl5UVDhw6lhoYGwcdNSkqigIAAjcdGNjU1UVFREZ04cYJef/11jccu6qO53ww5GTLWTjpCMqytrSU/P79OM0ZLk6GHh4fOZevXr6d+/fqRUqnUaFcoFLRnzx6ysLAgDw8PKi8v11jemZJhUFAQPXr0SKPtjTfeIAAaN5QFBgZS9+7dqampSd2muvksNze3Q4wbERFBfn5+OpPzggULjJoMzfYyKWPmqD1KZnXUslyXL1/GypUr8dlnn0EikWgt9/f3R2RkJG7duoUlS5YIEKFxHD58WP2YQRXV5cTa2lp1W2FhIdzd3TXm5fbs2RMAdE6DEmLc1atX4+zZs8+cKG9MnAwZ68CICImJieoHozs5OWHSpEkaz0ttTcmszlBizFiSk5NBRAgODn5mn7i4OPTr1w87duzAsWPHmt2ePufGkHJyzZUQa61bt27B1tZW4+YxLy8vrX+0qH63Uz3AQuhxnZycEBAQgKSkpLa/o9iAr5GMsVZoyWXSVatWkbW1Ne3atYvKy8vp3LlzNGzYMOratSsVFxer+7WmZFZHKzH2JGNeJvXy8iIfHx+d6ygUCrp27RoREZ08eZIsLCyoT58+VF1dTUS6L5Pqe270LY/2vBJiLVVTU0MymYwiIiI02nNyckgsFlNycjJVVlbShQsXaMCAAfTaa6+1ajxjjxsVFUUAKC8vT6OdL5MyZiaUSiUSExMxZcoUzJgxAw4ODhg8eDC2bduG0tJSbN++3WhjdZYSYy1VU1ODa9euQaFQPLevn58fFi5ciOvXr2P58uU6+7Tk3DRXHs2QEmKGWrduHdzd3REXF6fRHhAQgGXLliEiIgJyuRyDBg1CVVUVduzY0arxjD1u3759ATx+9GJb4mTIWAeVn5+P6upqDB8+XKPd19cX1tbWz3zsnDF0tLJcrVVSUgIiglQq1at/XFwc+vfvj61btyI3N1dreWvPzdPl0dqqhNiBAweQnp6Oo0ePQiaTaSyLiYnB9u3bcfz4cVRXV+Pq1avw9/eHn58fCgsLWzymscdVnbO7d++2Kqbn4WTIWAdVXl4OALC3t9da5ujoiKqqqjYd35RKjNXV1QF4vE/6kEgkSEtLg0gkwqxZs6BUKjWWG/vcPFlC7Ml5dDdu3NC4+cQQe/fuxYYNG5CTk4M+ffpoLLtz5w7i4+Mxe/ZsjB49GnZ2dvD09ERqaipu376NhISEFo3ZFuPa2toC+P0cthVOhox1UI6OjgCg84O1rUtmmVKJMeD3D1RDnp7k5+eHRYsWoaCgQOthDcY+N0+WECMijb9Tp04ZtC0A2Lx5M3bv3o0ffvgB3bt311peUFCAxsZGrWVyuRzOzs7Iz883eMy2Gre+vh7A7+ewrQhe6Z4xptugQYNgb2+Pn3/+WaP99OnTqK+vx4svvqhuM3bJLFMqMQYALi4uEIlEqKioMGi9NWvW4PDhw8jLy1NXSAEMOzf6MFYJMSLC8uXLUVZWhqysLFhZ6f6IVyXrpyuyVFVV4cGDB+qpDh1hXNU5c3V1NSgmQ/E3Q8Y6KIlEgsWLF+PAgQPYvXs3Kisrcf78ecydOxfu7u4IDw9X921tySxTKjGmi1QqhZeXF4qKigxaT3W59On5c4acG33HeV4JsbCwMLi6ujb7OLiLFy/i888/R2pqKsRisdbjJTdu3AgA8PT0RGBgIFJTU3HixAkolUoUFhaq437//ffV2xRqXBXVORs8eLAhh9RgnAwZ68A+/fRTrFu3DrGxsejatSsCAgLQp08fjZqOADBv3jwEBgbizTffRP/+/bFmzRr1ZaUnb0yYO3cuXFxc4OPjg9dffx0PHjwA8Pj3mMGDB8PW1hYjR45Ev3798M9//lPjN7bWjiG0oKAg5Ofna/z+980338Db2xtXrlyBr68v5s+fr7XeiBEjsGjRIq12fc5NSkoKNm3aBAAYMmQIrl69itTUVCxevBgAMG7cOBQUFAB4XIF94cKFiI+PR5cuXeDu7o7IyEiUlZUBeHy5sKSkBAcPHnzmPpKec/FEIhEyMjIQFhaG999/H05OTvDx8cHNmzexf/9+jBw5Ut1XqHFVfvrpJ3h4eGDIkCF6jdFiBszDYIy1Qkd4HJsuqmd5dkTGnGdYUFBAVlZWLapF2RE0NjbSyJEjaefOnWYxLhFRaWkpSSQS2rhxo9YynmfIGDO6zlSWSx9KpRJHjx5FQUGB+gYMb29vxMbGIjY2VmclhY6ssbERWVlZqKqqatdKOkKNq7J69WoMHToUERERAB5/A719+zZyc3Nx+fJlo47FyZAxZnIePHiAcePGoV+/fpg1a5a6PSoqCqGhoQgLCzP4Zhoh5eTkYP/+/cjOztZ7rmRnHhcAEhMTcfbsWRw5cgRisRgAcPDgQXh4eGDkyJH47rvvjDoeJ0PGzFh0dDTS0tJQUVEBT09PZGZmCh1Sq23btk1jasLu3bs1lq9duxYRERFYv369QBEabsyYMdizZ4/Gs2FNedyDBw/i4cOHyMnJgZOTk7p90qRJGudW9UxcY+CpFYyZsXXr1mHdunVCh9Huxo4di7FjxwodBnuGiRMnYuLEie06Jn8zZIwxZvY4GTLGGDN7nAwZY4yZPU6GjDHGzN4zb6BJT09vzzgYM3mqx0rxe0t/qodU8zFjxtDcQ89FRJrP0UlPT8e0adPaPCjGGGNMCKT9+LgMrWTIGGs/qn988tuQMUFl8G+GjDHGzB4nQ8YYY2aPkyFjjDGzx8mQMcaY2eNkyBhjzOxxMmSMMWb2OBkyxhgze5wMGWOMmT1OhowxxsweJ0PGGGNmj5MhY4wxs8fJkDHGmNnjZMgYY8zscTJkjDFm9jgZMsYYM3ucDBljjJk9ToaMMcbMHidDxhhjZo+TIWOMMbPHyZAxxpjZ42TIGGPM7HEyZIwxZvY4GTLGGDN7nAwZY4yZPU6GjDHGzB4nQ8YYY2aPkyFjjDGzx8mQMcaY2eNkyBhjzOxxMmSMMWb2OBkyxhgze5wMGWOMmT1OhowxxsyeldABMGYuioqK8O6776KxsVHdVlZWBplMhlGjRmn07d+/P/7617+2c4SMmS9Ohoy1kx49euDGjRu4cuWK1rJ//etfGv//pz/9qb3CYoyBL5My1q7eeecdiMXi5/YLCwtrh2gYYyqcDBlrR9OnT8ejR4+a7TNw4ED4+Pi0U0SMMYCTIWPtSqFQYMiQIRCJRDqXi8VivPvuu+0cFWOMkyFj7eydd96BpaWlzmWPHj1CaGhoO0fEGONkyFg7e/PNN9HU1KTVbmFhgREjRqBPnz7tHxRjZo6TIWPtzN3dHS+99BIsLDTffhYWFnjnnXcEioox88bJkDEBvP3221ptRIQpU6YIEA1jjJMhYwKYOnWqxu+GlpaWeOWVV+Di4iJgVIyZL06GjAnAyckJr776qjohEhFmzJghcFSMmS9OhowJZMaMGeobacRiMSZNmiRwRIyZL06GjAkkODgYNjY2AIAJEybA3t5e4IgYM1+cDBkTiJ2dnfrbIF8iZUxYIiIioYMwpvT0dEybNk3oMBhjzGSZWNoAgAyTrVqxb98+oUNgAtu0aRMAYOHChQJH8myNjY3Yt28f3nrrLaFDAQCcOnUKSUlJ/P5hOqleH6bIZJPhG2+8IXQITGAZGRkAOv5rYfLkyZBIJEKHoZaUlNThjxkTjqkmQ/7NkDGBdaREyJi54mTIGGPM7HEyZIwxZvY4GTLGGDN7nAwZY4yZPU6GjD3HkSNH4ODggG+//VboUDq8Y8eOISoqCvv374eXlxdEIhFEIpHOKh1jx46FTCaDpaUlBg4ciDNnzggQsf5iY2Ph4+MDuVwOGxsbeHt745NPPkF1dbVW36+++gq+vr6QyWTo3bs3Zs6cieLiYsHHPXToEOLj49HY2NiiWEwZJ0PGnsMEJxi3iU8//RTJycmIjo5GSEgIrl69CoVCgS5dumD37t347rvvNPr//e9/R0ZGBiZMmID8/HwMGzZMoMj188MPP+Djjz/G9evXUVpainXr1iEpKQmhoaEa/fbt24fp06cjNDQURUVFOHjwIE6cOIHx48fj0aNHgo4bHBwMiUSCMWPGoLy8vOUHwxSRidm3bx+Z4G6xFpg6dSpNnTpV6DCMqra2lvz8/Nps+y19/6xfv5769etHSqVSo12hUNCePXvIwsKCPDw8qLy8XGN5dnY2TZw4sVUxt5egoCB69OiRRtsbb7xBAOjmzZvqtsDAQOrevTs1NTWp27Zs2UIAKDc3t0OMGxERQX5+ftTQ0GBQLCb8+ZrO3wwZ60R27tyJkpISocPQcPnyZaxcuRKfffaZzjmT/v7+iIyMxK1bt7BkyRIBIjSOw4cPa9SgBICuXbsCAGpra9VthYWFcHd3h0gkUrf17NkTAHDjxo0OMe7q1atx9uxZk51A3xKcDBlrRm5uLnr16gWRSIQtW7YAAFJSUmBnZwepVIqDBw9i/PjxkMvl6NGjB77++mv1usnJyZBIJHBxccGcOXPg7sMPo/cAACAASURBVO4OiUQCf39/nD59Wt0vIiIC1tbWcHNzU7d99NFHsLOzg0gkQmlpKQAgMjISixcvxpUrVyASieDt7Q0A+P777yGXy7F27dr2OCRakpOTQUQIDg5+Zp+4uDj069cPO3bswLFjx5rdHhEhMTERAwYMgI2NDZycnDBp0iT88ssv6j76ngPg8SPvVq1ahV69esHW1hZDhgwx2uPmbt26BVtbW3h6eqrbvLy8tP7BovrdzsvLq0OM6+TkhICAACQlJfHPACoCfzU1OhP+Gs8MZKzLpIWFhQSANm/erG6LiYkhAHT8+HGqqKigkpISGjlyJNnZ2VF9fb26X3h4ONnZ2dHFixeprq6O8vPzydfXl2QymcYlrunTp5Orq6vGuAkJCQSA7t27p24LCQkhhUKh0e/w4cMkk8koNja21fvakvePl5cX+fj46FymUCjo2rVrRER08uRJsrCwoD59+lB1dTUR6b5MumrVKrK2tqZdu3ZReXk5nTt3joYNG0Zdu3al4uJidT99z8GSJUvIxsaGMjMzqaysjKKjo8nCwoJ++ukng/bzaTU1NSSTySgiIkKjPScnh8RiMSUnJ1NlZSVduHCBBgwYQK+99lqrxjP2uFFRUQSA8vLy9B7bhD9f+TIpY63h7+8PuVyObt26ISwsDDU1Nbh586ZGHysrK/W3HB8fH6SkpKCqqgppaWlGiSEoKAiVlZVYuXKlUbZniJqaGly7dg0KheK5ff38/LBw4UJcv34dy5cv19lHqVQiMTERU6ZMwYwZM+Dg4IDBgwdj27ZtKC0txfbt27XWae4c1NXVISUlBZMnT0ZISAgcHR2xYsUKiMXiVh//devWwd3dHXFxcRrtAQEBWLZsGSIiIiCXyzFo0CBUVVVhx44drRrP2OP27dsXAHD+/HmjxNXZcTJkzEisra0BAA0NDc32Gz58OKRSqcZlv86qpKQERASpVKpX/7i4OPTv3x9bt25Fbm6u1vL8/HxUV1dj+PDhGu2+vr6wtrbWuLysy9Pn4NKlS6itrcWgQYPUfWxtbeHm5taq43/gwAGkp6fj6NGjkMlkGstiYmKwfft2HD9+HNXV1bh69Sr8/f3h5+eHwsLCFo9p7HFV5+zu3butislUcDJkTAA2Nja4d++e0GG0Wl1dHYDH+6MPiUSCtLQ0iEQizJo1C0qlUmO56nZ/e3t7rXUdHR1RVVVlUHw1NTUAgBUrVqjnPIpEIty4cUPj5hND7N27Fxs2bEBOTg769OmjsezOnTuIj4/H7NmzMXr0aNjZ2cHT0xOpqam4ffs2EhISWjRmW4xra2sL4PdzaO44GTLWzhoaGlBeXo4ePXoIHUqrqT5QDZnE7efnh0WLFqGgoABr1qzRWObo6AgAOpNeS45Zt27dADyubUlEGn+nTp0yaFsAsHnzZuzevRs//PADunfvrrW8oKAAjY2NWsvkcjmcnZ2Rn59v8JhtNW59fT2A38+huTPZeoaMdVQ5OTkgIowYMULdZmVl9dzLqx2Ri4sLRCIRKioqDFpvzZo1OHz4MPLy8tCrVy91+6BBg2Bvb4+ff/5Zo//p06dRX1+PF1980aBxevbsCYlEgrNnzxq03tOICMuXL0dZWRmysrJgZaX7o1OVrO/cuaPRXlVVhQcPHqinOnSEcVXnzNXV1aCYTBV/M2SsjTU1NaGsrAyPHj3CuXPnEBkZiV69euG9995T9/H29saDBw+QlZWFhoYG3Lt3T+ecNGdnZ9y+fRvXr19HVVUVGhoakJ2dLdjUCqlUCi8vLxQVFRm0nupy6dPz5yQSCRYvXowDBw5g9+7dqKysxPnz5zF37ly4u7sjPDzc4HFmzpyJr7/+GikpKaisrERjYyOKiorUiSMsLAyurq7NPg7u4sWL+Pzzz5GamgqxWKxxyVUkEmHjxo0AAE9PTwQGBiI1NRUnTpyAUqlEYWGhOu73339fvU2hxlVRnbPBgwcbckhNl3B3srYNE771lxnIGFMrNm/eTG5ubgSApFIpBQcH09atW0kqlRIA6tu3L125coW2b99OcrmcAFDv3r3p119/JaLHUyvEYjF5eHiQlZUVyeVymjRpEl25ckVjnPv371NgYCBJJBLy9PSk+fPn09KlSwkAeXt7q6dhnDlzhnr37k22trb08ssvU3FxMR05coRkMhnFxcW1al+JWvb+iYiIILFYTLW1teq2AwcOkEKhIADUtWtX+vjjj3Wuu3TpUq2pFU1NTZSQkEB9+/YlsVhMTk5ONHnyZLp06ZK6jyHn4OHDh7Rs2TLq1asXWVlZUbdu3SgkJITy8/OJiGjy5MkEgFatWvXMfTx//jwBeOZfQkKCum9paSlFRkaSt7c32djYkL29Pb300kv0zTffaGxTqHFVgoKCyMPDQ+OJNc9jwp+v6Sa3VyZ8spiBOsLj2MLDw8nZ2VnQGAzRkvdPQUEBWVlZ0a5du9ooqrbV2NhII0eOpJ07d5rFuESPE6dEIqGNGzcatJ4Jf77yPEPG2pqpVwjw9vZGbGwsYmNjdVZS6MgaGxuRlZWFqqoqhIWFmfy4KqtXr8bQoUMRERHR7mN3VJwMf/Pw4UMsWLAAbm5ukEqleOWVV9Q3B2zbtk3o8Frl6XI6uv5Ut2pv3LjRZPabtZ+oqCiEhoYiLCzM4JtphJSTk4P9+/cjOztb77mSnXlcAEhMTMTZs2dx5MgRiMXidh27I+Nk+JsvvvgC33//PX755RckJSVhzpw5OHnypNBhGcWT5XQcHBzUt5Y/evQItbW1uHv3rvoNuWTJEpPZb6FFR0cjLS0NFRUV8PT0RGZmptAhtam1a9ciIiIC69evFzoUvY0ZMwZ79uzReC6sKY978OBBPHz4EDk5OXBycmrXsTs6Toa/ycrKwvDhw+Ho6IjZs2dj6tSpLdqOUqmEv7//c9s6AktLS9ja2sLFxQX9+vVr1bY60363l3Xr1uHhw4cgIly7dq3Fr6nOZOzYsdiwYYPQYbBnmDhxIqKiorTu4mWcDNWKioqMcslAV4mdjlh252lZWVmtWr+z7jdjjAGcDPGPf/wD3t7euHPnDv72t79BJBLpfBSUyr///W/4+PjAwcEBEokEgwcPxtGjRwHoLrHzrLI7zZWVMaQ8TXuV7+lo+80YY8Zk9snw1VdfxeXLl+Hq6op3330XRNTsHXF3797FtGnTcP36ddy+fRv29vaYPn06ACApKQkTJkyAQqEAEeHy5cs62wBg+fLl+Pzzz7Fp0ybcuXMHEyZMwFtvvYWff/4Z8+bNw8KFC6FUKiGTybBv3z5cuXIFXl5e+PDDDzWeVKK6U7GpqalF+//DDz+oJ+42p6PtN2OMGZPZJ0NDTZ06FZ9++imcnJzg7OyM4OBg3L9/36CHLhtSVuZ5JYIMLd9TUVGhcRfpmDFjOuV+M8aYMfGzSVtJ9TujIXPJWlpWRt8SQc1xcHBQVwYAHt/i/fRzIPXRWfa7qKgI6enpBq9nrlQPr+ZjxnRpycPNOwtOhgb67rvvkJCQgPz8fFRWVrboA/rJsjIrVqzQWObu7m6UOPU1atQojBo16rn9Out+//jjj5g2bVqbbNuU8TFj5oYvkxrg5s2bmDx5Mtzc3HD69GlUVFQgPj7e4O0Yu6xMW+vM+z116lStsfjv2X+qm5mEjoP/Ouaf6vVhiviboQHOnz+PhoYGzJs3D15eXgAAkUhk8HaMVVamvZjrfjPGzAd/MzSAqu7asWPHUFdXh4KCApw+fVqjj64SO0+3WVpaPresjL7ao3xPR9xvxhgzKjIxhj5V/fr16/THP/6RAJCVlRUNGzaMMjMz6YsvviBXV1cCQHZ2djRlyhQiIlq2bBk5OzuTo6MjhYaG0pYtWwgAKRQKunnzps4SO7ramisrY0h5Gn3K9/zv//4v9evXT132xc3NjcaMGaOzb2fZb310hKoVnY0JVyVgRmDCr490ERGREEm4raSnp2PatGkwsd1iLRAaGgoAyMjIEDiSzoPfP6w5Jvz6yODLpIwxxsweJ0PGGGNmj5MhY6zdHTt2DFFRUVq1Nt9++22tvmPHjoVMJoOlpSUGDhyIM2fOCBCx/kaNGvXMuqFPP/f4q6++gq+vL2QyGXr37o2ZM2eiuLi42e3X1dXhhRde0Jire+jQIcTHx5t8Iem2xMmQMdauPv30UyQnJyM6Olqj1maXLl2we/dufPfddxr9//73vyMjIwMTJkxAfn4+hg0bJlDkrffyyy+r/3vfvn2YPn06QkNDUVRUhIMHD+LEiRMYP348Hj169MxtxMTE4NKlSxptwcHBkEgkGDNmjMYTppj+OBky1obao6ZjZ6obuWHDBuzduxfp6emQyWQay5KTk2FhYYHw8HBUVFQIFGHrSSQSVFZWak1YDw8PxyeffKLu99e//hXdu3fH0qVL4eDggKFDh2LRokU4e/as1tQllZMnT+LChQs6ly1YsAB/+MMf8PrrrzebTJlunAwZa0PtUdOxs9SNvHz5MlauXInPPvsMEolEa7m/vz8iIyNx69YtLFmyRIAIjeP777/XSvSFhYW4cOECRo8erdHm7u6u8QCLnj17AgBu3LihtV2lUomlS5ciKSnpmWOvXr0aZ8+ebbYP042TIWNPICIkJiZiwIABsLGxgZOTEyZNmqTxIPGIiAhYW1vDzc1N3fbRRx/Bzs4OIpEIpaWlAHTXeUxOToZEIoGLiwvmzJkDd3d3SCQS+Pv7a3wbaM0YQPvVuTREcnIyiAjBwcHP7BMXF4d+/fphx44dOHbsWLPb0+dcGVIjs7lam621YcMGLFiwQKPNy8tL6x8xqt8LVU96elJMTAw++ugj9WMNdXFyckJAQACSkpJMcfpD2xJkemMbMuFJocxALZl0v2rVKrK2tqZdu3ZReXk5nTt3joYNG0Zdu3al4uJidb/p06eTq6urxroJCQkEgO7du6duCwkJIYVCodEvPDyc7Ozs6OLFi1RXV0f5+fnk6+tLMpmMbt68aZQxDh8+TDKZjGJjYw3a/7Z8/3h5eZGPj4/OZQqFgq5du0ZERCdPniQLCwvq06cPVVdXExFRdnY2TZw4UWMdfc9VTEwMAaDjx49TRUUFlZSU0MiRI8nOzo7q6+vV/ZYsWUI2NjaUmZlJZWVlFB0dTRYWFvTTTz+1ar+LiorIx8eHGhsbNdpzcnJILBZTcnIyVVZW0oULF2jAgAH02muvaW0jNzeXgoODiYjo3r17BIBiYmJ0jhcVFUUAKC8vr1Vx62LCn6/p/M2Qsd8olUokJiZiypQpmDFjBhwcHDB48GBs27YNpaWl2L59u9HGsrKyUn+j8fHxQUpKCqqqqrTqOraUoXUu21pNTQ2uXbsGhULx3L5+fn5YuHAhrl+/juXLl+vs05Jz1VyNTENqbRpqw4YNmD9/PiwsND9uAwICsGzZMkREREAul2PQoEGoqqrCjh07tPY1MjISKSkpeo3Xt29fAI+fKcz0x8mQsd/k5+ejuroaw4cP12j39fWFtbX1M29qMIbhw4dDKpU2W9exMyspKQERQSqV6tU/Li4O/fv3x9atW5Gbm6u1vLXn6ukamS2ttfk8t2/fxqFDh/Dee+9pLYuJicH27dtx/PhxVFdX4+rVq/D394efnx8KCwvV/aKjozF79mx4eHjoNabqGN+9e7fFcZsjToaM/UZ1S/rTc8EAwNHREVVVVW06vo2NDe7du9emYwilrq4OwON91IdEIkFaWhpEIhFmzZoFpVKpsdzY5+rJWptPzgu8ceMGamtrDdrWk+Lj4/Hhhx9q3TB0584dxMfHY/bs2Rg9ejTs7Ozg6emJ1NRU3L59GwkJCQCA3NxcnD9/Hh988IHeY9ra2gL4/Zgz/XAyZOw3jo6OAKDzg7S8vBw9evRos7EbGhrafAwhqT6gDZkU7ufnh0WLFqGgoABr1qzRWGbsc9UWtTaLi4vx1VdfYd68eVrLCgoK0NjYiO7du2u0y+VyODs7Iz8/H8DjO4WPHz8OCwsLdYJWxbp27VqIRCL8/PPPGtuor68H8PsxZ/rhZMjYbwYNGgR7e3utD5fTp0+jvr4eL774orrNyspKfYnNGHJyckBEGDFiRJuNISQXFxeIRCKD5w+uWbMGL7zwAvLy8jTaDTlX+miLWpvx8fGYMWMGnJ2dtZapkvXTpcuqqqrw4MED9RSLtLQ0reSsunoQExMDItK6VKw6xq6urkbbF3PAyZCx30gkEixevBgHDhzA7t27UVlZifPnz2Pu3Llwd3dHeHi4uq+3tzcePHiArKwsNDQ04N69ezrnhumq8wgATU1NKCsrw6NHj3Du3DlERkaiV69eGr8ttWaM9qhzaQipVAovLy8UFRUZtJ7qcqmlpaVWu77nSt9xnldrMywsDK6urno9Du7u3bv48ssvsXDhQp3LPT09ERgYiNTUVJw4cQJKpRKFhYXquN9//32D4n+S6hgPHjy4xdswSwLdxtpmTPjWX2aglkytaGpqooSEBOrbty+JxWJycnKiyZMn06VLlzT63b9/nwIDA0kikZCnpyfNnz+fli5dSgDI29tbPUVCV03H8PBwEovF5OHhQVZWViSXy2nSpEl05coVo42hT51LXdry/RMREUFisZhqa2vVbQcOHCCFQkEAqGvXrvTxxx/rXHfp0qVaUyv0OVeG1MhsrtYmEdHkyZMJAK1ateq5+7po0SKaMWNGs31KS0spMjKSvL29ycbGhuzt7emll16ib775ptn1nje1IigoiDw8PKipqem5cRrKhD9f001ur0z4ZDEDddTivuHh4eTs7Cx0GDq15funoKCArKysaNeuXW2y/bbW2NhII0eOpJ07dwodyjOVlpaSRCKhjRs3tsn2TfjzlecZMiYEc6wu4O3tjdjYWMTGxqK6ulrocAzS2NiIrKwsVFVVISwsTOhwnmn16tUYOnQoIiIihA6l0+FkyBhrN1FRUQgNDUVYWFinehh3Tk4O9u/fj+zsbL3nSra3xMREnD17FkeOHIFYLBY6nE6HkyFj7Sg6OhppaWmoqKiAp6cnMjMzhQ6p3a1duxYRERFYv3690KHobcyYMdizZ4/Gs2I7koMHD+Lhw4fIycmBk5OT0OF0SlZCB8CYOVm3bh3WrVsndBiCGzt2LMaOHSt0GCZj4sSJmDhxotBhdGr8zZAxxpjZ42TIGGPM7HEyZIwxZvY4GTLGGDN7JnsDTWhoqNAhMIH9+OOPAPi1YAjVo7z4mDFdDH2cXmciIiISOghjOnXqFBITE4UOgzG9FBcXIy8vD+PHjxc6FMb0lpGRIXQIxpZhcsmQsc4kPT0d06ZNA78NGRNUBv9myBhjzOxxMmSMMWb2OBkyxhgze5wMGWOMmT1OhowxxsweJ0PGGGNmj5MhY4wxs8fJkDHGmNnjZMgYY8zscTJkjDFm9jgZMsYYM3ucDBljjJk9ToaMMcbMHidDxhhjZo+TIWOMMbPHyZAxxpjZ42TIGGPM7HEyZIwxZvY4GTLGGDN7nAwZY4yZPU6GjDHGzB4nQ8YYY2aPkyFjjDGzx8mQMcaY2eNkyBhjzOxxMmSMMWb2OBkyxhgze5wMGWOMmT1OhowxxsweJ0PGGGNmj5MhY4wxs8fJkDHGmNmzEjoAxsxFQ0MDqqurNdpqamoAAGVlZRrtIpEIjo6O7RYbY+aOkyFj7eTBgwfw8PBAY2Oj1jJnZ2eN/w8MDMQPP/zQXqExZvb4Milj7cTV1RV/+tOfYGHR/NtOJBLhzTffbKeoGGMAJ0PG2tXbb7/93D6WlpaYMmVKO0TDGFPhZMhYOwoJCYGV1bN/nbC0tMS4cePQpUuXdoyKMcbJkLF2JJfLMX78+GcmRCLCjBkz2jkqxhgnQ8ba2YwZM3TeRAMA1tbW+POf/9zOETHGOBky1s7+/Oc/QyqVarWLxWJMnjwZdnZ2AkTFmHnjZMhYO5NIJJgyZQrEYrFGe0NDA6ZPny5QVIyZN06GjAngrbfeQkNDg0abXC7Hq6++KlBEjJk3ToaMCeCVV17RmGgvFovx5ptvwtraWsCoGDNfnAwZE4CVlRXefPNN9aXShoYGvPXWWwJHxZj54mTImEDefPNN9aVSV1dXvPzyywJHxJj54mTImED8/f3h4eEBAHjnnXee+5g2xljb4Qd1/6aoqAgnT54UOgxmZnx9fXHr1i106dIF6enpQofDzMwbb7whdAgdhoiISOggOoL09HRMmzZN6DAYY6zd8Me/WgZ/M3wKvzhMX2hoKAAgIyND4Egey8zMxNSpU4UOo1mqfyzy+8M08D/+tfGPFIwJrKMnQsbMASdDxhhjZo+TIWOMMbPHyZAxxpjZ42TIGGPM7HEyZIwxZvY4GTLWQkeOHIGDgwO+/fZboUPp8I4dO4aoqCjs378fXl5eEIlEEIlEePvtt7X6jh07FjKZDJaWlhg4cCDOnDkjQMT6GzVqlHp/nv6zt7fX6PvVV1/B19cXMpkMvXv3xsyZM1FcXNzs9uvq6vDCCy9gxYoV6rZDhw4hPj7+mUWimeE4GTLWQjznTj+ffvopkpOTER0djZCQEFy9ehUKhQJdunTB7t278d1332n0//vf/46MjAxMmDAB+fn5GDZsmECRt96Tz5vdt28fpk+fjtDQUBQVFeHgwYM4ceIExo8fj0ePHj1zGzExMbh06ZJGW3BwMCQSCcaMGYPy8vI2i9+ccDJkrIWCgoJQUVGBCRMmCB0KlEol/P39hQ5Dy4YNG7B3716kp6dDJpNpLEtOToaFhQXCw8NRUVEhUIStJ5FIUFlZCSLS+AsPD8cnn3yi7vfXv/4V3bt3x9KlS+Hg4IChQ4di0aJFOHv2LE6fPq1z2ydPnsSFCxd0LluwYAH+8Ic/4PXXX282mTL9cDJkzATs3LkTJSUlQoeh4fLly1i5ciU+++wzSCQSreX+/v6IjIzErVu3sGTJEgEiNI7vv/9eK9EXFhbiwoULGD16tEabu7s7RCKRuq1nz54AgBs3bmhtV6lUYunSpUhKSnrm2KtXr8bZs2eb7cP0w8mQsRbIzc1Fr169IBKJsGXLFgBASkoK7OzsIJVKcfDgQYwfPx5yuRw9evTA119/rV43OTkZEokELi4umDNnDtzd3SGRSODv76/xDSEiIgLW1tZwc3NTt3300Uews7ODSCRCaWkpACAyMhKLFy/GlStXIBKJ4O3tDeDxh7RcLsfatWvb45BoSU5OBhEhODj4mX3i4uLQr18/7NixA8eOHWt2e0SExMREDBgwADY2NnBycsKkSZPwyy+/qPvoew4AoLGxEatWrUKvXr1ga2uLIUOGYN++fa3b6d9s2LABCxYs0Gjz8vLS+geL6vdCLy8vrW3ExMTgo48+Qrdu3Z45jpOTEwICApCUlMSX7VuLGBER7du3j/hwmIepU6fS1KlTW72dwsJCAkCbN29Wt8XExBAAOn78OFVUVFBJSQmNHDmS7OzsqL6+Xt0vPDyc7Ozs6OLFi1RXV0f5+fnk6+tLMpmMbt68qe43ffp0cnV11Rg3ISGBANC9e/fUbSEhIaRQKDT6HT58mGQyGcXGxrZ6X1vy/vDy8iIfHx+dyxQKBV27do2IiE6ePEkWFhbUp08fqq6uJiKi7OxsmjhxosY6q1atImtra9q1axeVl5fTuXPnaNiwYdS1a1cqLi5W99P3HCxZsoRsbGwoMzOTysrKKDo6miwsLOinn34yaD+fVlRURD4+PtTY2KjRnpOTQ2KxmJKTk6myspIuXLhAAwYMoNdee01rG7m5uRQcHExERPfu3SMAFBMTo3O8qKgoAkB5eXl6x8ifd1rS+ZshY23A398fcrkc3bp1Q1hYGGpqanDz5k2NPlZWVupvOT4+PkhJSUFVVRXS0tKMEkNQUBAqKyuxcuVKo2zPEDU1Nbh27RoUCsVz+/r5+WHhwoW4fv06li9frrOPUqlEYmIipkyZghkzZsDBwQGDBw/Gtm3bUFpaiu3bt2ut09w5qKurQ0pKCiZPnoyQkBA4OjpixYoVEIvFrT7+GzZswPz587XqUwYEBGDZsmWIiIiAXC7HoEGDUFVVhR07dmjta2RkJFJSUvQar2/fvgCA8+fPtypuc8fJkLE2Zm1tDQDqqvbPMnz4cEilUo3Lfp1VSUkJiAhSqVSv/nFxcejfvz+2bt2K3NxcreX5+fmorq7G8OHDNdp9fX1hbW39zBtQVJ4+B5cuXUJtbS0GDRqk7mNraws3N7dWHf/bt2/j0KFDeO+997SWxcTEYPv27Th+/Diqq6tx9epV+Pv7w8/PD4WFhep+0dHRmD17trrw8/OojvHdu3dbHDfjZMhYh2JjY4N79+4JHUar1dXVAXi8P/qQSCRIS0uDSCTCrFmzoFQqNZarpg88PW8PABwdHVFVVWVQfDU1NQCAFStWaMwLvHHjBmpraw3a1pPi4+Px4Ycfat0wdOfOHcTHx2P27NkYPXo07Ozs4OnpidTUVNy+fRsJCQkAHv8Wff78eXzwwQd6j2lrawvg92POWoaTIWMdRENDA8rLy9GjRw+hQ2k11Qe0IZPC/fz8sGjRIhQUFGDNmjUayxwdHQFAZ9JryTFT3ZSyadMmrSkRp06dMmhbKsXFxfjqq68wb948rWUFBQVobGxE9+7dNdrlcjmcnZ2Rn58P4PFdwcePH4eFhYU6QatiXbt2LUQiEX7++WeNbdTX1wP4/ZizluFkyFgHkZOTAyLCiBEj1G1WVlbPvbzaEbm4uEAkEhk8f3DNmjV44YUXkJeXp9E+aNAg2NvbayWC06dPo76+Hi+++KJB4/Ts2RMSiQRnz541aL3mxMfHY8aMGXB2dtZapkrWd+7c0WivqqrCgwcP1FMs0tLStJKz6kpBTEwMiEjrUrHqGLu6uhptX8wRJ0PGBNLU1ISysjI8evQI586dQ2RkJHr16qXxe5O3tzcePHiArKwsNDQ04N69ezrnpDk7O+P27du4fv06qqqqr0fSNAAAIABJREFU0NDQgOzsbMGmVkilUnh5eaGoqMig9VSXSy0tLbXaFy9ejAMHDmD37t2orKzE+fPnMXfuXLi7uyM8PNzgcWbOnImvv/4aKSkpqKysRGNjI4qKitQJKywsDK6urno9Du7u3bv48ssvsXDhQp3LPT09ERgYiNTUVJw4cQJKpRKFhYXquN9//32D4n+S6hgPHjy4xdtg4HtrVfhWY/NhjKkVmzdvJjc3NwJAUqmUgoODaevWrSSVSgkA9e3bl65cuULbt28nuVxOAKh3797066+/EtHjqRVisZg8PDzIysqK5HI5TZo0ia5cuaIxzv379ykwMJAkEgl5enrS/PnzaenSpQSAvL291dMwzpw5Q7179yZbW1t6+eWXqbi4mI4cOUIymYzi4uJata9ELXt/REREkFgsptraWnXbgQMHSKFQEADq2rUrffzxxzrXXbp0qdbUiqamJkpISKC+ffuSWCwmJycnmjx5Ml26dEndx5Bz8PDhQ1q2bBn16tWLrKysqFu3bhQSEkL5+flERDR58mQCQKtWrXruvi5atIhmzJjRbJ/S0lKKjIwkb29vsrGxIXt7e3rppZfom2++aXa9502tCAoKIg8PD2pqanpunCr8eaclnY/Gb/jFYT6MNc+wNcLDw8nZ2VnQGAzRkvdHQUEBWVlZ0a5du9ooqrbV2NhII0eOpJ07dwodyjOVlpaSRCKhjRs3GrQef95p4XmGjAnF1CsOeHt7IzY2FrGxsaiurhY6HIM0NjYiKysLVVVVCAsLEzqcZ1q9ejWGDh2KiIgIoUPp9DgZGtEHH3wAmUwGkUhk1B/m28vT5XVUf9bW1nBxccGoUaOQkJCAsrIyoUNlnURUVBRCQ0MRFhbWqR7GnZOTg/379yM7O1vvuZLtLTExEWfPnsWRI0cgFouFDqfT42RoRDt27EBqaqrQYbTYk+V1HBwcQERoampCSUkJ0tPT4enpiWXLlmHgwIFad/Ux/UVHRyMtLQ0VFRXw9PREZmam0CG1qbVr1yIiIgLr168XOhS9jRkzBnv27NF4LmxHcvDgQTx8+BA5OTlwcnISOhyTYCV0AKxjE4lEcHR0xKhRozBq1CgEBQVh2rRpCAoKwq+//goHBwehQ+x01q1bh3Xr1gkdRrsaO3Ysxo4dK3QYJmPixImYOHGi0GGYFP5maGRPlmcxRVOnTsV7772HkpISbNu2TehwGGPMKDgZtgIRISEhAf3794eNjQ0cHBywdOlSrX7NlYoxpOTMv/71L/y///f/IJVKIZfLMXjwYFRWVj53DMC45XxU8+Cys7M71D4yxliLCX0/a0fRkluNY2JiSCQS0RdffEFlZWVUW1tLW7du1Sqn8rxSMfqUnKmuria5XE7x8fGkVCqpuLiYpkyZoi7j87wxDCnno1AoyMHB4ZnLKysrCQD17NmzQ+2jvjrC1IrOhm/FNy18PrXwPEMVQ18ctbW1JJVK6dVXX9Vo//rrrzWSoVKpJKlUSmFhYRrr2tjY0Lx584jo90ShVCrVfVRJ9fLly0REdOHCBQJAhw8f1opFnzEM8bxkSEQkEonI0dGxU+4jJ0PD8YenaeHzqSWdb6BpocuXL6O2thZjxoxptl9LS8U8XXLGy8sLLi4umDFjBhYsWID33nsPffr0adUYLVVTUwMiglwub9X4Qu7jjz/+iNDQUIPXM1eqR37xMTMNhj4mzxzwb4YtpHoxqZ4o/yzGKhVja2uLH374AS+//DLWrl0LLy8vhIWFQalUtlk5mmf59ddfAQAvvPACANPcR8aYeeFvhi2kqlf28OHDZvs9WSomMjKyVWMOHDgQ3377Le7du4fExERs2LABAwcOVD8hwxhj6OP7778HAIwfPx5A59zHESNGICMjo9XbMRfp6emYNm0aHzMToTqf7Hf8zbCFBg0aBAsLC/zrX/9qtp+xSsXcvn0bFy9eBPA4+axfvx7Dhg3DxYsX26QczbMUFxdj06ZN6NGjB2bNmgXA9PaRMWZ+OBm2ULdu3RASEoLMzEzs3LkTlZWVOHfuHLZv367RT59SMfq4ffs25syZg19++QX19fXIy8vDjRs3MGLECL3GMLScDxGhuroaTU1N6ppq+/btw0svvQRLS0tkZWWpfzPsKPvIGGMtJvAdPB1GS+6uqqqqog8++IC6dOlC9vb29PLLL9OqVasIAPXo0YP+7//+j4iaLxWjb8mZ69evk7+/Pzn9//buPSiKc80f+HdghhmGuwoyETEICvEeox5BjcmyoUpZQRQjURM5Viw0F0QNi6gogpcYXKTIkXKNBk9pjgrKqomSct0UeNxwrE2hwsETAyhew82o3OX2/P7ImfkxDOAMzNAM/Xyq+CM9T08/3Z2Zx+55+32cnMjS0pJeeeUV2rJlC7W2tr50G0SkVzuf8+fP06RJk0ipVJKVlRVZWFgQAM3I0RkzZlBCQgI9efJEZ92BsI/64tGkhuPRh4MLn08dGRIiIsEq8QCivofOh2PwU4+I5N+/9Mefj8GFz6eOTL5NyhhjTPS4GDLGTO7y5cuIjY3VaRP2/vvv68QGBATAzs4OlpaWGD9+PPLz8wXIWH979+6Fj48PrK2tYWNjAx8fH8TFxWmmEezo6tWrmDVrFpRKJVQqFWJiYrockf6yuPPnz2Pv3r2Dvidmf+JiyBgzqe3btyM1NRWbN2/WahM2dOhQHD9+HBcuXNCKv3TpEjIzM7FgwQIUFRVh6tSpAmWun7/+9a9YvXo17t+/j4qKCiQmJmLv3r0IDQ3ViisqKkJAQAD8/f1RVVWFrKwsfP3111i7dq3BcUFBQVAoFPD398ezZ8/6ZT8HOy6GjAmgsbERfn5+Zr+Nl/n8889x8uRJZGRkwM7OTuu11NRUWFhYICIiwqwa/3ZmZWWFjz/+GM7OzrC1tcWSJUuwcOFC/Pd//7fWSOfExES4urpix44dsLGxga+vL2JiYnD06FGtWZT0jVu3bh0mT56M+fPno7W1tV/3eTDiYsiYAI4cOYLKykqz30ZPSkpKEBcXhx07dmgmqejIz88PUVFRePToET777DMBMjSOrKwsnf0bMWIEAKCurg4A0NraigsXLmDu3Llabd7mzZsHIsK5c+cMilOLj4/HjRs3kJKSYpJ9ExMuhozpgYiQnJyM1157DXK5HE5OTli4cKHWv9QjIyNhZWWl1R39448/ho2NDSQSCaqrqwEAUVFR2LhxI0pLSyGRSODl5YXU1FQoFAq4uLhgzZo1UKlUUCgU8PPzw7Vr14yyDcC4rbxeJjU1FUSEoKCgbmN27tyJsWPH4vDhw7h8+XKP76fPOTCkXZgpW4IVFxfD0dERo0aNAgDcuXMHdXV1cHd314rz9PQEABQUFBgUp+bk5IS5c+ciJSWFR4b2lUDPdAw4/NyNePTmOcNt27aRlZUVHTt2jJ49e0YFBQU0depUGjZsGJWXl2vili9fTsOHD9daNykpiQBoWlERES1evJg8PT214iIiIsjGxoZu3bpFTU1NVFRURNOnTyc7Ozu6f/++UbZhSCuvjnrz+Rg9ejSNGzeuy9c8PT3p7t27RET0448/koWFBb366qtUV1dHRETZ2dkUHBystY6+50CfdmFExmsJptbc3EwPHz6kL7/8kuRyOR07dkzzWm5uLgGgpKQknfWsra3J39/foLiOYmNjddrGvQx/3+nI4CtDxl6isbERycnJWLRoEVasWAEHBwdMnDgRBw8eRHV1tc6sQ30hlUo1Vz7jxo1DWloaamtrkZ6ebpT3DwwMRE1NDeLi4ozyft2pr6/H3bt3NVc0PfH19cX69etRVlaGTZs2dRnTm3Pg5+cHe3t7ODs7IywsDPX19bh//z4AoKmpCWlpaQgJCcHixYvh6OiIrVu3QiaT9fpYjxw5Em5uboiPj8cXX3yhNfeneiSopaWlznoymQyNjY0GxXU0ZswYAEBhYWGv8ma/42LI2EsUFRWhrq4O06ZN01o+ffp0WFlZad3GNLZp06ZBqVSapBWXKVVWVoKIoFQq9YrfuXMnvL29ceDAAVy9elXn9b6eg87twkzR9uzBgweorKzEX/7yF/z5z3/G66+/rvnNVv2bYlcDXZqbm2FtbW1QXEfqY1xRUdGrvNnvuBgy9hLqoeu2trY6rzk6OqK2ttak25fL5aiqqjLpNoytqakJwO+560OhUCA9PR0SiQSrVq3SuQIy9jkwRUswmUwGZ2dnBAQE4OTJkygqKsLu3bsBQPMbb+dnDxsaGtDU1ASVSmVQXEfqAqk+5qx3uBgy9hKOjo4A0OUX7rNnz+Dm5maybbe0tJh8G6ag/oI25KFwX19fbNiwAcXFxUhMTNR6zdjnoGPbMSLS+svLyzPovbri5eUFS0tLFBUVAQA8PDxgZ2eHe/fuacWVlJQAACZNmmRQXEfNzc0A0OVVI9MfF0PGXmLChAmwtbXFTz/9pLX82rVraG5uxhtvvKFZJpVKNbfijCEnJwdEhJkzZ5psG6bg4uICiURi8PODiYmJ8PHxwfXr17WWG3IO9GGslmBPnjzBsmXLdJYXFxejra0NI0eOBPD7OZs/fz6uXLmC9vZ2TVx2djYkEolmxK2+cR2pj/Hw4cP7tC9ix8WQsZdQKBTYuHEjsrKycPz4cdTU1KCwsBBr166FSqVCRESEJtbLywu//fYbzp49i5aWFlRVVen8Kx8AhgwZgsePH6OsrAy1tbWa4tbe3o6nT5+itbUVBQUFiIqKgru7O8LDw42yDUNbefWWUqnE6NGj8fDhQ4PWU98u7TyAxJBzoO92XtYSLCwsDMOHD+9xOjgbGxtcunQJP/zwA2pqatDS0oLr169j5cqVsLGxwYYNGzSxcXFxqKiowPbt21FfX4+8vDwkJSUhPDwc3t7eBsepqY/xxIkTDToGrBMhx7IOJDzUWDx682hFe3s7JSUl0ZgxY0gmk5GTkxOFhITQ7du3teKePHlCb7/9NikUCvLw8KBPP/2UoqOjCQB5eXlpHpHIz8+nUaNGkbW1Nc2ePZvKy8spIiKCZDIZjRgxgqRSKdnb29PChQuptLTUaNvQp5VXV3rz+YiMjCSZTEYNDQ2aZVlZWeTp6UkAaNiwYfTJJ590uW50dLTOoxX6nAN924URvbwlWEhICAGgbdu29bifQUFB5OHhQba2tiSXy8nT05PCwsKosLBQJzY3N5dmzJhBcrmcVCoVRUdHU1NTU6/jiIgCAwNpxIgR1N7e3mOeHfH3nY4MPhr/xP9ziMdA7WcYERFBQ4YMETqNLvXm81FcXExSqVTreTtz0tbWRnPmzKEjR44InUq3qqurSaFQ0L59+wxaj7/vdPBzhowNJIOpC4GXlxcSEhKQkJCgmZbMXLS1teHs2bOora1FWFiY0Ol0Kz4+HlOmTEFkZKTQqZg9LoaMMZOJjY3FkiVLEBYWZlaTcefk5ODMmTPIzs7W+1nJ/pacnIwbN27g4sWLkMlkQqdj9rgYMjYAbN68Genp6Xj+/Dk8PDxw+vRpoVMyml27diEyMhJ79uwROhW9+fv745tvvtGaA3YgOXfuHF68eIGcnBw4OTkJnc6gIBU6AcYYsHv3bs0D2oNRQEAAAgIChE5j0AgODkZwcLDQaQwqfGXIGGNM9LgYMsYYEz0uhowxxkSPiyFjjDHR42LIGGNM9Hg0aScSiUToFFg/4XNtOD5mbLDiYvhPfn5+OHXqlNBpMJHJy8tDSkoK/7/HmMAkRERCJ8GYWGVkZGDp0qXgjyFjgsrk3wwZY4yJHhdDxhhjosfFkDHGmOhxMWSMMSZ6XAwZY4yJHhdDxhhjosfFkDHGmOhxMWSMMSZ6XAwZY4yJHhdDxhhjosfFkDHGmOhxMWSMMSZ6XAwZY4yJHhdDxhhjosfFkDHGmOhxMWSMMSZ6XAwZY4yJHhdDxhhjosfFkDHGmOhxMWSMMSZ6XAwZY4yJHhdDxhhjosfFkDHGmOhxMWSMMSZ6XAwZY4yJHhdDxhhjosfFkDHGmOhxMWSMMSZ6XAwZY4yJHhdDxhhjosfFkDHGmOhxMWSMMSZ6UqETYEwsqqqq8F//9V9ay3766ScAwKFDh7SW29nZ4b333uu33BgTOwkRkdBJMCYGL168gIuLC+rq6mBpaQkAUH/8JBKJJq6lpQUrV67E0aNHhUiTMTHK5NukjPUTuVyO0NBQSKVStLS0oKWlBa2trWhtbdX8d0tLCwBg2bJlAmfLmLhwMWSsHy1btgzNzc09xjg6OuJf/uVf+ikjxhjAxZCxfvX222/D2dm529dlMhlWrFgBqZR/zmesP3ExZKwfWVhYYPny5ZDJZF2+3tLSwgNnGBMAF0PG+tl7772n+W2ws1deeQW+vr79nBFjjIshY/1sxowZGDVqlM5yKysrrFy5UmtkKWOsf3AxZEwA77//vs6t0ubmZr5FyphAuBgyJoDly5fr3Cr18vLCxIkTBcqIMXHjYsiYAHx8fDBu3DjNLVGZTIY//vGPAmfFmHhxMWRMIB988IFmJprW1la+RcqYgLgYMiaQ9957D21tbQCAqVOnwsPDQ+CMGBMvLoaMCcTd3R1/+MMfAAArV64UOBvGxG3QT3ORl5eH5ORkodNgrEsvXryARCLBpUuXcOXKFaHTYaxLmZmZQqdgcoP+yvDBgwc4ffq00GkwM/S3v/0Nf/vb30y6DTc3NwwfPhwKhcKk2+kvDx8+5M/bICKm8znorwzVxPAvG2ZcS5YsAWD6/3dKSkrg5eVl0m30l4yMDCxdupQ/b4OE+nyKwaC/MmRsoBsshZAxc8bFkDHGmOhxMWSMMSZ6XAwZY4yJHhdDxhhjosfFkDETu3jxIhwcHPDtt98KncqAd/nyZcTGxuLMmTMYPXo0JBIJJBIJ3n//fZ3YgIAA2NnZwdLSEuPHj0d+fr4AGetv79698PHxgbW1NWxsbODj44O4uDjU1NToxF69ehWzZs2CUqmESqVCTEwMXrx4YXDc+fPnsXfvXs1MR6x7XAwZMzEiEjoFs7B9+3akpqZi8+bNWLx4Me7cuQNPT08MHToUx48fx4ULF7TiL126hMzMTCxYsABFRUWYOnWqQJnr569//StWr16N+/fvo6KiAomJidi7dy9CQ0O14oqKihAQEAB/f39UVVUhKysLX3/9NdauXWtwXFBQEBQKBfz9/fHs2bN+2U+zRYPcqVOnSAS7yUwgNDSUQkNDhU7DqBoaGsjX19dk79/bz9uePXto7Nix1NjYqLXc09OTvvnmG7KwsKARI0bQs2fPtF7Pzs6m4ODgPuXcX0JCQnT2b8mSJQSAHj9+rFm2dOlS8vDwoPb2ds2ypKQkkkgk9I9//MPgOCKiyMhI8vX1pZaWFoNyFtH3ZwZfGTImIkeOHEFlZaXQaWgpKSlBXFwcduzY0eVMPH5+foiKisKjR4/w2WefCZChcWRlZens34gRIwAAdXV1AH7vXnLhwgXMnTtX094LAObNmwciwrlz5wyKU4uPj8eNGzeQkpJikn0bDLgYMmZCV69ehbu7OyQSCf70pz8BANLS0mBjYwOlUolz585h3rx5sLe3h5ubG06cOKFZNzU1FQqFAi4uLlizZg1UKhUUCgX8/Pxw7do1TVxkZCSsrKzg6uqqWfbxxx/DxsYGEokE1dXVAICoqChs3LgRpaWlkEgkmof9v//+e9jb22PXrl39cUh0pKamgogQFBTUbczOnTsxduxYHD58GJcvX+7x/YgIycnJeO211yCXy+Hk5ISFCxfi559/1sToew4AoK2tDdu2bYO7uzusra0xadIknDp1qm87/U/FxcVwdHTEqFGjAAB37txBXV0d3N3dteI8PT0BAAUFBQbFqTk5OWHu3LlISUnh2/bd4GLImAnNnj0bP/74o9ayjz76COvXr0djYyPs7Oxw6tQplJaWYvTo0Vi9ejVaWloA/F7kwsPD0dDQgHXr1qGsrAz5+flobW3FO++8gwcPHgD4vZi8++67Wts4cOAAduzYobUsJSUFCxYsgKenJ4gIJSUlAKAZXNHe3m6SY/AyFy5cgLe3N5RKZbcx1tbWOHr0KCwsLLB69WrU19d3GxsfH4/Y2Fhs2bIFlZWVuHLlCh48eIA5c+agoqICgP7nAAA2bdqEL774Avv378evv/6KBQsWYNmyZfjpp596tb8tLS149OgR/vSnP+Hy5cv48ssvYWVlBQAoLy8HANjZ2Wmto1AoYG1trclf37iOXn/9dTx69Ag3b97sVd6DHRdDxgTk5+cHe3t7ODs7IywsDPX19bh//75WjFQq1VzljBs3DmlpaaitrUV6erpRcggMDERNTQ3i4uKM8n6GqK+vx927dzVXND3x9fXF+vXrUVZWhk2bNnUZ09jYiOTkZCxatAgrVqyAg4MDJk6ciIMHD6K6uhqHDh3SWaenc9DU1IS0tDSEhIRg8eLFcHR0xNatWyGTyXp9/EeOHAk3NzfEx8fjiy++0Jr7Uz0SVN30uSOZTIbGxkaD4joaM2YMAKCwsLBXeQ92XAwZGyDUVwcdr0q6Mm3aNCiVSq3bfuaqsrISRNTjVWFHO3fuhLe3Nw4cOICrV6/qvF5UVIS6ujpMmzZNa/n06dNhZWWldXu5K53Pwe3bt9HQ0IAJEyZoYqytreHq6trr4//gwQNUVlbiL3/5C/785z/j9ddf1/yOq/5NsbW1VWe95uZmWFtbGxTXkfoYd3XVyLgYMmaW5HI5qqqqhE6jz5qamgD8vj/6UCgUSE9Ph0QiwapVq3SugNSPD9ja2uqs6+joiNraWoPyU9+O3bp1q+aZR4lEgnv37qGhocGg91KTyWRwdnZGQEAATp48iaKiIuzevRsANL/7dn72sKGhAU1NTVCpVAbFdaQukOpjzrRxMWTMzLS0tODZs2dwc3MTOpU+U39BG/JQuK+vLzZs2IDi4mIkJiZqvebo6AgAXRa93hwzZ2dnAMD+/ftBRFp/eXl5Br1XV7y8vGBpaYmioiIAgIeHB+zs7HDv3j2tOPXvu5MmTTIorqPm5mYA6PKqkXExZMzs5OTkgIgwc+ZMzTKpVPrS26sDkYuLCyQSCZ4/f27QeomJifDx8cH169e1lk+YMAG2trY6g1uuXbuG5uZmvPHGGwZtZ+TIkVAoFLhx44ZB63X25MkTLFu2TGd5cXEx2traMHLkSAC/n8f58+fjypUrWgOasrOzIZFINCNu9Y3rSH2Mhw8f3qd9Gay4GDI2wLW3t+Pp06dobW1FQUEBoqKi4O7ujvDwcE2Ml5cXfvvtN5w9exYtLS2oqqrSuWoAgCFDhuDx48coKytDbW0tWlpakJ2dLdijFUqlEqNHj8bDhw8NWk99u7TzABKFQoGNGzciKysLx48fR01NDQoLC7F27VqoVCpEREQYvJ0//vGPOHHiBNLS0lBTU4O2tjY8fPgQv/76KwAgLCwMw4cP73E6OBsbG1y6dAk//PADampq0NLSguvXr2PlypWwsbHBhg0bNLFxcXGoqKjA9u3bUV9fj7y8PCQlJSE8PBze3t4Gx6mpj/HEiRMNOgaiIczD/v1HRDMoMCMzxgw0X375Jbm6uhIAUiqVFBQURAcOHCClUkkAaMyYMVRaWkqHDh0ie3t7AkCjRo2iX375hYiIIiIiSCaT0YgRI0gqlZK9vT0tXLiQSktLtbbz5MkTevvtt0mhUJCHhwd9+umnFB0dTQDIy8uL7t+/T0RE+fn5NGrUKLK2tqbZs2dTeXk5Xbx4kezs7Gjnzp192lei3n3eIiMjSSaTUUNDg2ZZVlYWeXp6EgAaNmwYffLJJ12uGx0drTMDTXt7OyUlJdGYMWNIJpORk5MThYSE0O3btzUxhpyDFy9eUExMDLm7u5NUKiVnZ2davHgxFRUVEdHvM8sAoG3btvW4n0FBQeTh4UG2trYkl8vJ09OTwsLCqLCwUCc2NzeXZsyYQXK5nFQqFUVHR1NTU1Ov44iIAgMDacSIEVoz1ryMiL4/Mwb9XoroZDIjGwjTsUVERNCQIUMEzcEQvfm8FRcXk1QqpWPHjpkoK9Nqa2ujOXPm0JEjR4ROpVvV1dWkUCho3759Bq0nou9Pno6NsYFusHcc8PLyQkJCAhISEjTTkpmLtrY2nD17FrW1tQgLCxM6nW7Fx8djypQpiIyMFDqVAYuLIWNMcLGxsViyZAnCwsIMHkwjpJycHJw5cwbZ2dl6PyvZ35KTk3Hjxg1cvHgRMplM6HQGLC6Gevjwww9hZ2cHiUTS51FlQmtvb8f+/fvh5+fX6/fo3GtO/WdlZQUXFxe89dZbSEpKwtOnT42Yufhs3rwZ6enpeP78OTw8PHD69GmhUzKpXbt2ITIyEnv27BE6Fb35+/vjm2++0ZoXdiA5d+4cXrx4gZycHDg5OQmdzoDGxVAPhw8fxldffSV0Gn1WXFyMN998Exs2bOj1A8MAtHrNOTg4gIjQ3t6OyspKZGRkwMPDAzExMRg/fnyv529kwO7du/HixQsQEe7evavT924wCggIwOeffy50GoNGcHAwYmNju5y2jWnjYigSN2/exKZNm7B27VpMmTLF6O8vkUjg6OiIt956C+np6cjIyEBFRQUCAwPN6rYXY0ycuBjqqWPPMHM0efJknDlzBsuXL9d76qu+CA0NRXh4OCorK3Hw4EGTb48xxvqCi2EXiAhJSUnw9vaGXC6Hg4MDoqOjdeJ66nNmSL+03NxczJgxA0qlEvb29pg4caJmzkFT9lLrijF726kfCs/OztYsG4zHjDFm/rgYdiEuLg4xMTGIiIhARUUFysvLu2wZ01OfM337pdXX1yMoKAihoaH47bffUFxcjLFjx2rmETR2L7WXMWZvO/Xt2Dt37miWDcZjxhgbBAR+0NHkDH1otKGhgZRKJb3zzjtay0+cOEEA6Pr160RE1NjYSEqlksLCwrTWlcvl9NFHHxER0ZYtWwgANTY2amIOHDhAAKikpISIiP5u/Z32AAAgAElEQVT+978TAPruu+90ctFnG73xhz/8gSZPntzr9dU8PT3JwcGhxxiJREKOjo5EZH7HbCA8dG9uRPSQtiiI6HxmSIUqwgNVSUkJGhoa4O/v32Ncb/ucde6XNnr0aLi4uGDFihVYt24dwsPD8eqrr/ZpGwNFfX09iAj29vYAzPOYnT592ux/LxYCHzNmbrgYdqKezFbduqU7Hfucbd26Veu1rnqJdcfa2ho//PADNm3ahF27diEhIQHvvvsu0tPTjbYNofzyyy8AAB8fHwDmecxmzpyJ9evXG7yeWOXl5SElJYV/ox0k1OdTDLgYdqLuIP3ixYse4zr2OYuKiurTNsePH49vv/0WVVVVSE5Oxueff47x48drpncyxjaE8P333wMA5s2bB8A8j5mbmxvefffdPr+PmKSkpPAxG0TEUgx5AE0nEyZMgIWFBXJzc3uMM1afs8ePH+PWrVsAfi8We/bswdSpU3Hr1i2jbUMI5eXl2L9/P9zc3LBq1SoAfMwYYwMXF8NOnJ2dsXjxYpw+fRpHjhxBTU0NCgoKcOjQIa04ffqc6ePx48dYs2YNfv75ZzQ3N+P69eu4d+8eZs6cabRtGMLQ3nZEhLq6OrS3t4OIUFVVhVOnTmHWrFmwtLTE2bNnNb8ZDtZjxhgbBAQewWNyvRkNVVtbSx9++CENHTqUbG1tafbs2bRt2zYCQG5ubnTz5k0i6rnPmb790srKysjPz4+cnJzI0tKSXnnlFdqyZQu1tra+dBuGyMvLo1mzZpFKpSIABIBcXV3Jz8+PcnNzNXH69LY7f/48TZo0iZRKJVlZWZGFhQUB0IwcnTFjBiUkJNCTJ0901jWnY8ajSQ0notGHoiCi85khISISqA73i4yMDCxduhSDfDeZCSxZsgQAkJmZKXAm5oM/b4OLiM5nJt8mZYwxJnpcDM3Uzz//rNNCqau/gdxwlLHOLl++jNjYWJ02Ye+//75ObEBAAOzs7GBpaYnx48cjPz9fgIwNp08btatXr2LWrFlQKpVQqVSIiYnpcoT7y+LOnz+PvXv3DvoG0cbAxdBM+fj4gIhe+nfy5EmhU2VML9u3b0dqaio2b96s1SZs6NChOH78OC5cuKAVf+nSJWRmZmLBggUoKirC1KlTBcpcf/q0USsqKkJAQAD8/f1RVVWFrKwsfP3111i7dq3BcUFBQVAoFPD398ezZ89Mum/mjoshYwNYY2NjnxoxD5RtvMznn3+OkydPIiMjA3Z2dlqvpaamwsLCAhEREWbdDkzfNmqJiYlwdXXFjh07YGNjA19fX8TExODo0aNasyjpG7du3TpMnjwZ8+fPR2trq0n30ZxxMWRsADty5AgqKyvNfhs9KSkpQVxcHHbs2KGZ9KIjPz8/REVF4dGjR/jss88EyNA49Gmj1traigsXLmDu3LlaU9rNmzcPRIRz584ZFKcWHx+PGzduiOYB+t7gYsiYERERkpOT8dprr0Eul8PJyQkLFy7U+pd6ZGQkrKys4Orqqln28ccfw8bGBhKJBNXV1QCAqKgobNy4EaWlpZBIJPDy8kJqaioUCgVcXFywZs0aqFQqKBQK+Pn54dq1a0bZBmDcVl4vk5qaCiJCUFBQtzE7d+7E2LFjcfjwYVy+fLnH99PnHBjSLqw/W4LduXMHdXV1cHd311ru6ekJACgoKDAoTs3JyQlz585FSkqKGEaG9goXQ8aMKD4+HrGxsdiyZQsqKytx5coVPHjwAHPmzEFFRQWA37/8O09XduDAAezYsUNrWUpKChYsWABPT08QEUpKShAZGYnw8HA0NDRg3bp1KCsrQ35+PlpbW/HOO+/gwYMHfd4GYNxWXi9z4cIFeHt7Q6lUdhtjbW2No0ePwsLCAqtXr9bMQdsVfc6Bvu3CgP5tCVZeXg4AOreKFQoFrK2tNfnrG9fR66+/jkePHuHmzZtGz3sw4GLImJE0NjYiOTkZixYtwooVK+Dg4ICJEyfi4MGDqK6u1pnFqC+kUqnmymfcuHFIS0tDbW0t0tPTjfL+gYGBqKmpQVxcnFHerzv19fW4e/eu5oqmJ76+vli/fj3Kysq67C8K9O4c+Pn5wd7eHs7OzggLC0N9fT3u378PAGhqakJaWhpCQkKwePFiODo6YuvWrZDJZEY71h2pR4JaWlrqvCaTydDY2GhQXEdjxowBABQWFhot38GEiyFjRlJUVIS6ujpMmzZNa/n06dNhZWWldRvT2KZNmwalUmkWrb06qqysBBH1eFXY0c6dO+Ht7Y0DBw7g6tWrOq/39Rx0bhfW323U1L+ZdjXQpbm5GdbW1gbFdaQ+xl1dNTIuhowZjXrouq2trc5rjo6OqK2tNen25XI5qqqqTLoNY2tqagKAbgeUdKZQKJCeng6JRIJVq1bpXAEZ+xx0bAnW8fnde/fudftoRF+of+OtqanRWt7Q0ICmpiZNGzJ94zpSF0j1MWfauBgyZiSOjo4A0OUX7rNnz+Dm5maybbe0tJh8G6ag/oI25KFwX19fbNiwAcXFxUhMTNR6zdjnoGPbsc7P8Obl5Rn0Xvrw8PCAnZ0d7t27p7Vc/VvupEmTDIrrqLm5GQC6vGpkXAwZM5oJEybA1tZWZ2DFtWvX0NzcjDfeeEOzTCqVag3S6KucnBwQEWbOnGmybZiCi4sLJBKJwc8PJiYmwsfHB9evX9dabsg50Ed/twSTSqWYP38+rly5ojV4KTs7GxKJRDPiVt+4jtTHePjw4SbeC/PExZAxI1EoFNi4cSOysrJw/Phx1NTUoLCwEGvXroVKpUJERIQm1svLC7/99hvOnj2LlpYWVFVV6fwrHwCGDBmCx48fo6ysDLW1tZri1t7ejqdPn6K1tRUFBQWIioqCu7s7wsPDjbINQ1t59ZZSqcTo0aPx8OFDg9ZT3y7tPIDEkHOg73Ze1hIsLCwMw4cPN9p0cHFxcaioqMD27dtRX1+PvLw8JCUlITw8HN7e3gbHqamP8cSJE42S56DTP90xhCOiFiTMyHrTwqm9vZ2SkpJozJgxJJPJyMnJiUJCQuj27dtacU+ePKG3336bFAoFeXh40KeffkrR0dEEgLy8vOj+/ftERJSfn0+jRo0ia2trmj17NpWXl1NERATJZDIaMWIESaVSsre3p4ULF1JpaanRtqFPK6+u9ObzFhkZSTKZjBoaGjTLsrKyyNPTkwDQsGHD6JNPPuly3ejoaAoODtZaps850LddGNHLW4KFhIQQANq2bVuP+6lvGzUiotzcXJoxYwbJ5XJSqVQUHR1NTU1NOu+pbxwRUWBgII0YMYLa29t7zLMjEX1/Zgz6vRTRyWRGNlD7GUZERNCQIUOETqNLvfm8FRcXk1QqpWPHjpkoK9Nqa2ujOXPm0JEjR4ROpVvV1dWkUCho3759Bq0nou/PDL5NypgZGkxdCLy8vJCQkICEhATU1dUJnY5B2tracPbsWdTW1g7oDjHx8fGYMmUKIiMjhU5lwOJiyBgTXGxsLJYsWYKwsDCzmow7JycHZ86cQXZ2tt7PSva35ORk3LhxAxcvXoRMJhM6nQGLiyFjZmTz5s1IT0/H8+fP4eHhgdOnTwudktHs2rULkZGR2LNnj9Cp6M3f3x/ffPON1hywA8m5c+fw4sUL5OTkwMnJSeh0BjSp0AkwxvS3e/du7N69W+g0TCYgIAABAQFCpzFoBAcHIzg4WOg0zAJfGTLGGBM9LoaMMcZEj4shY4wx0eNiyBhjTPREM4AmIyND6BSYmVFPX8X/7+hPPXk1H7PBwRSTkQ9UEiIioZMwpYyMDCxdulToNBhjzGwN8jIBAJmDvhgyNpCp/7HGH0PGBJXJvxkyxhgTPS6GjDHGRI+LIWOMMdHjYsgYY0z0uBgyxhgTPS6GjDHGRI+LIWOMMdHjYsgYY0z0uBgyxhgTPS6GjDHGRI+LIWOMMdHjYsgYY0z0uBgyxhgTPS6GjDHGRI+LIWOMMdHjYsgYY0z0uBgyxhgTPS6GjDHGRI+LIWOMMdHjYsgYY0z0uBgyxhgTPS6GjDHGRI+LIWOMMdHjYsgYY0z0uBgyxhgTPS6GjDHGRI+LIWOMMdHjYsgYY0z0uBgyxhgTPS6GjDHGRI+LIWOMMdHjYsgYY0z0uBgyxhgTPanQCTAmFg8fPsTKlSvR1tamWfb06VPY2dnhrbfe0or19vbGf/7nf/ZzhoyJFxdDxvqJm5sb7t27h9LSUp3XcnNztf77zTff7K+0GGPg26SM9asPPvgAMpnspXFhYWH9kA1jTI2LIWP9aPny5Whtbe0xZvz48Rg3blw/ZcQYA7gYMtavPD09MWnSJEgkki5fl8lkWLlyZT9nxRjjYshYP/vggw9gaWnZ5Wutra1YsmRJP2fEGONiyFg/e++999De3q6z3MLCAjNnzsSrr77a/0kxJnJcDBnrZyqVCrNmzYKFhfbHz8LCAh988IFAWTEmblwMGRPA+++/r7OMiLBo0SIBsmGMcTFkTAChoaFavxtaWlriX//1X+Hi4iJgVoyJFxdDxgTg5OSEd955R1MQiQgrVqwQOCvGxIuLIWMCWbFihWYgjUwmw8KFCwXOiDHx4mLImECCgoIgl8sBAAsWLICtra3AGTEmXlwMGROIjY2N5mqQb5EyJiwJEZHQSZhSRkYGli5dKnQajDFmtgZ5mQCATNF0rTh16pTQKTAzs3//fgDA+vXrTbaNtrY2nDp1CsuWLTPZNvpTXl4eUlJS+PM2SKjPpxiIphi+++67QqfAzExmZiYA0/+/ExISAoVCYdJt9KeUlBT+vA0iYimG/JshYwIbTIWQMXPFxZAxxpjocTFkjDEmelwMGWOMiR4XQ8YYY6LHxZAxE7t48SIcHBzw7bffCp3KgHf58mXExsbizJkzGD16NCQSCSQSSZddPgICAmBnZwdLS0uMHz8e+fn5AmRsuPb2duzfvx9+fn7dxly9ehWzZs2CUqmESqVCTEwMXrx4YXDc+fPnsXfvXrS1tZlkXwYTLoaMmZgIHlg2iu3btyM1NRWbN2/G4sWLcefOHXh6emLo0KE4fvw4Lly4oBV/6dIlZGZmYsGCBSgqKsLUqVMFylx/xcXFePPNN7FhwwY0NDR0GVNUVISAgAD4+/ujqqoKWVlZ+Prrr7F27VqD44KCgqBQKODv749nz56ZdN/MHRdDxkwsMDAQz58/x4IFC4ROBY2NjT1ekQjl888/x8mTJ5GRkQE7Ozut11JTU2FhYYGIiAg8f/5coAz77ubNm9i0aRPWrl2LKVOmdBuXmJgIV1dX7NixAzY2NvD19UVMTAyOHj2Kn3/+2eC4devWYfLkyZg/fz5aW1tNuo/mjIshYyJy5MgRVFZWCp2GlpKSEsTFxWHHjh1dPnPp5+eHqKgoPHr0CJ999pkAGRrH5MmTcebMGSxfvlwzQXtnra2tuHDhAubOnQuJRKJZPm/ePBARzp07Z1CcWnx8PG7cuCGaB+h7g4shYyZ09epVuLu7QyKR4E9/+hMAIC0tDTY2NlAqlTh37hzmzZsHe3t7uLm54cSJE5p1U1NToVAo4OLigjVr1kClUkGhUMDPzw/Xrl3TxEVGRsLKygqurq6aZR9//DFsbGwgkUhQXV0NAIiKisLGjRtRWloKiUQCLy8vAMD3338Pe3t77Nq1qz8OiY7U1FQQEYKCgrqN2blzJ8aOHYvDhw/j8uXLPb4fESE5ORmvvfYa5HI5nJycsHDhQq2rJX3PAfD7lHnbtm2Du7s7rK2tMWnSJJNNN3fnzh3U1dXB3d1da7mnpycAoKCgwKA4NScnJ8ydOxcpKSl8274bXAwZM6HZs2fjxx9/1Fr20UcfYf369WhsbISdnR1OnTqF0tJSjB49GqtXr0ZLSwuA34tceHg4GhoasG7dOpSVlSE/Px+tra1455138ODBAwC/F5PO058dOHAAO3bs0FqWkpKCBQsWwNPTE0SEkpISANAMrlD3VuxvFy5cgLe3N5RKZbcx1tbWOHr0KCwsLLB69WrU19d3GxsfH4/Y2Fhs2bIFlZWVuHLlCh48eIA5c+agoqICgP7nAAA2bdqEL774Avv378evv/6KBQsWYNmyZfjpp5+MdxD+qby8HAB0bhUrFApYW1tr8tc3rqPXX38djx49ws2bN42e92DAxZAxAfn5+cHe3h7Ozs4ICwtDfX097t+/rxUjlUo1Vznjxo1DWloaamtrkZ6ebpQcAgMDUVNTg7i4OKO8nyHq6+tx9+5dzRVNT3x9fbF+/XqUlZVh06ZNXcY0NjYiOTkZixYtwooVK+Dg4ICJEyfi4MGDqK6uxqFDh3TW6ekcNDU1IS0tDSEhIVi8eDEcHR2xdetWyGQyox3/jtQjQS0tLXVek8lkaGxsNCiuozFjxgAACgsLjZbvYMLFkLEBwsrKCgC0rkq6Mm3aNCiVSq3bfuaqsrISRNTjVWFHO3fuhLe3Nw4cOICrV6/qvF5UVIS6ujpMmzZNa/n06dNhZWWldXu5K53Pwe3bt9HQ0IAJEyZoYqytreHq6mqS46/+zbSrgS7Nzc2wtrY2KK4j9THu6qqRcTFkzCzJ5XJUVVUJnUafNTU1AUC3A0o6UygUSE9Ph0QiwapVq3SugNSPD9ja2uqs6+joiNraWoPyU9+O3bp1q+aZR4lEgnv37nX7aERfqH/3ramp0Vre0NCApqYmqFQqg+I6UhdI9TFn2rgYMmZmWlpa8OzZM7i5uQmdSp+pv6ANeSjc19cXGzZsQHFxMRITE7Vec3R0BIAui15vjpmzszOA33tbEpHWX15enkHvpQ8PDw/Y2dnh3r17WsvVv+9OmjTJoLiOmpubAaDLq0bGxZAxs5OTkwMiwsyZMzXLpFLpS2+vDkQuLi6QSCQGPz+YmJgIHx8fXL9+XWv5hAkTYGtrqzO45dq1a2hubsYbb7xh0HZGjhwJhUKBGzduGLReb0mlUsyfPx9XrlzRGtCUnZ0NiUSiGXGrb1xH6mM8fPhwE++FeeJiyNgA197ejqdPn6K1tRUFBQWIioqCu7s7wsPDNTFeXl747bffcPbsWbS0tKCqqkrnqgEAhgwZgsePH6OsrAy1tbVoaWlBdna2YI9WKJVKjB49Gg8fPjRoPfXt0s4DSBQKBTZu3IisrCwcP34cNTU1KCwsxNq1a6FSqRAREWHwdv74xz/ixIkTSEtLQ01NDdra2vDw4UP8+uuvAICwsDAMHz7caNPBxcXFoaKiAtu3b0d9fT3y8vKQlJSE8PBweHt7Gxynpj7GEydONEqegw4NcqdOnSIR7CYzgdDQUAoNDe3Te3z55Zfk6upKAEipVFJQUBAdOHCAlEolAaAxY8ZQaWkpHTp0iOzt7QkAjRo1in755RciIoqIiCCZTEYjRowgqVRK9vb2tHDhQiotLdXazpMnT+jtt98mhUJBHh4e9Omnn1J0dDQBIC8vL7p//z4REeXn59OoUaPI2tqaZs+eTeXl5XTx4kWys7OjnTt39mlfiXr3eYuMjCSZTEYNDQ2aZVlZWeTp6UkAaNiwYfTJJ590uW50dDQFBwdrLWtvb6ekpCQaM2YMyWQycnJyopCQELp9+7YmxpBz8OLFC4qJiSF3d3eSSqXk7OxMixcvpqKiIiIiCgkJIQC0bdu2HvczLy+PZs2aRSqVigAQAHJ1dSU/Pz/Kzc3Vis3NzaUZM2aQXC4nlUpF0dHR1NTUpPOe+sYREQUGBtKIESOovb29xzw7EtH3Z8ag30sRnUxmZMYohn0VERFBQ4YMETQHQ/Tm81ZcXExSqZSOHTtmoqxMq62tjebMmUNHjhwROpVuVVdXk0KhoH379hm0noi+PzP4NiljA9xg7zjg5eWFhIQEJCQkoK6uTuh0DNLW1oazZ8+itrYWYWFhQqfTrfj4eEyZMgWRkZFCpzJgcTHUw4cffgg7OztIJJJ++yHd2BISEjBu3DjY29tDLpfDy8sL//7v/96rL5/O7XXUf1ZWVnBxccFbb72FpKQkPH361AR7wgaj2NhYLFmyBGFhYWY1GXdOTg7OnDmD7OxsvZ+V7G/Jycm4ceMGLl68CJlMJnQ6AxYXQz0cPnwYX331ldBp9MkPP/yATz75BGVlZaiursbu3buRkpKCJUuWGPxeHdvrODg4gIjQ3t6OyspKZGRkwMPDAzExMRg/frxJpqwSi82bNyM9PR3Pnz+Hh4cHTp8+LXRKJrVr1y5ERkZiz549QqeiN39/f3zzzTda88IOJOfOncOLFy+Qk5MDJycnodMZ0KRCJ8D6h62tLSIiIjSj7959912cOXMGGRkZePDgAUaOHNmn95dIJHB0dMRbb72Ft956C4GBgVi6dCkCAwPxyy+/wMHBwRi7ISq7d+/G7t27hU6jXwUEBCAgIEDoNAaN4OBgBAcHC52GWeArQz11bJNijr777judYejDhg0DAJPMpBEaGorw8HBUVlbi4MGDRn9/xhgzJi6GXSAiJCUlwdvbG3K5HA4ODoiOjtaJ66m1iyEtYnJzczFjxgwolUrY29tj4sSJmmmWTNk+5tGjR7C2toaHh4dmmTHb+aifg8vOztYsM/djxhgbpIQez2pqvRkavGXLFpJIJPQf//Ef9PTpU2poaKADBw4QALp+/bom7rPPPiO5XE6nT5+mp0+f0ubNm8nCwoL+7//+T/M+AOh//ud/6Pnz51RZWUlz5swhGxsbam5uJiKiuro6sre3p71791JjYyOVl5fTokWLqKqqSq9t9FZ9fT3Z2dlRZGSk1vLvvvuO7OzsKCEh4aXv4enpSQ4ODt2+XlNTQwBo5MiRmmXmdMwGwqMV5kZEQ/FFQUTnk58z7KyhoYGUSiW98847WstPnDihVQwbGxtJqVRSWFiY1rpyuZw++ugjIvr/X+yNjY2aGHVRLSkpISKiv//97wSAvvvuO51c9NlGb23ZsoXGjh1LNTU1vX6PlxVDIiKJREKOjo5EZH7HjIuh4UT05SkKIjqfGTyAppOSkhI0NDTA39+/x7jetnbp3CJm9OjRcHFxwYoVK7Bu3TqEh4fj1Vdf7dM2XiYrKwsZGRm4dOmSTnNQY6qvrwcRwd7eHoB5HrOHDx8iIyPD4PXESj15NR+zwcEUk5EPWEKXY1Mz9F82Fy9eJAA6s0l0vjL83//9X82USp3/Zs6cSURdX+V89dVXBID+8Y9/aJb9/e9/p3/7t38jqVRKEomEli5dSg0NDXptw1AnTpyg6dOn06NHj3q1fkcvuzLMz88nABQQEEBE5nfMQkNDu30v/uM/Mf2JAM9A05m6aaa6k3R3jNnaZfz48fj222/x+PFjxMTE4NSpU9i3b5/R28d8+eWXOH78OH744Qe88sorBq9vqO+//x4AMG/ePADmecxCQ0N13of/uv9TD1QSOg/+M+75FAMuhp1MmDABFhYWyM3N7THOWK1dHj9+jFu3bgH4vVjs2bMHU6dOxa1bt4y2DSJCTEwMCgsLcfbs2S4bnxpbeXk59u/fDzc3N6xatQqAeR0zxpi4cDHsxNnZGYsXL8bp06dx5MgR1NTUoKCgAIcOHdKK06e1iz4eP36MNWvW4Oeff0ZzczOuX7+Oe/fuYebMmUbbxq1bt/DFF1/gq6++gkwm05lGbd++fZpYQ9v5EBHq6urQ3t4OIkJVVRVOnTqFWbNmwdLSEmfPntX8ZmhOx4wxJjI0yPVmNFRtbS19+OGHNHToULK1taXZs2fTtm3bCAC5ubnRzZs3iajn1i76togpKysjPz8/cnJyIktLS3rllVdoy5Yt1Nra+tJt6KuwsLDH3wOSkpI0sfq08zl//jxNmjSJlEolWVlZkYWFBQHQjBydMWMGJSQk0JMnT3TWNZdjRsSjSXtDRKMPRUFE5zNDQkTU/yW4/2RkZGDp0qUY5LvJTEA9b2tmZqbAmZgP/rwNLiI6n5l8m5QxxpjocTE0Uz///LPOb39d/Q3kHmuMMTZQcDE0Uz4+PnoNjT558qTQqTLWJ5cvX0ZsbKxOH833339fJzYgIAB2dnawtLTE+PHjkZ+fL0DGhmtvb8f+/fvh5+fXbczVq1cxa9YsKJVKqFQqxMTEaD0Cdv78eezdu3fQN4M2FS6GjLEBa/v27UhNTcXmzZu1+mgOHToUx48fx4ULF7TiL126hMzMTCxYsABFRUWYOnWqQJnrr7i4GG+++SY2bNjQbQeZoqIiBAQEwN/fH1VVVcjKysLXX3+NtWvXamKCgoKgUCjg7++PZ8+e9Vf6gwYXQ8YGsMbGxh6vFsxlG73x+eef4+TJk8jIyNCZNjA1NRUWFhaIiIjA8+fPBcqw727evIlNmzZh7dq1mDJlSrdxiYmJcHV1xY4dO2BjYwNfX1/ExMTg6NGjWtMMrlu3DpMnT8b8+fPR2traH7swaHAxZGwAO3LkCCorK81+G4YqKSlBXFwcduzYoZkVqiM/Pz9ERUXh0aNH+OyzzwTI0DgmT56MM2fOYPny5ZDL5V3GtLa24sKFC5g7d65WX9V58+aBiHDu3Dmt+Pj4eNy4cQMpKSkmzX2w4WLImBEREZKTk/Haa69BLpfDyckJCxcu1PrXe2RkJKysrODq6qpZ9vHHH8PGxgYSiQTV1dUAgKioKGzcuBGlpaWQSCTw8vJCamoqFAoFXFxcsGbNGqhUKigUCvj5+eHatWtG2QZg3L6WvZGamgoiQlBQULcxO3fuxNixY3H48GFcvny5x/fT57wY0k+zP3tm3rlzB3V1dXB3d9da7unpCQAoKCjQWu7k5IS5c+ciJSVFDI9EGE8/P9jY70T00Cgzst48dL9t2zaysrKiY8eO0bNnz6igoICmTp1Kw4YNo/Lyck3c8uXLafjw4VrrJiUlEQBNX0YiosWLF5Onp6dWXEREBNnY2NCtW7eoqamJioqKaPr06WRnZ0f37983yjYM6WvZkbE+b6NHj6Zx48Z1+ZqnpyfdvXuXiIh+/PFHsrCwoFdffZXq6uqIiEJqI6oAAAXnSURBVCg7O5uCg4O11tH3vOjTT5PINH1G//CHP9DkyZN1lufm5upMjqFmbW1N/v7+OstjY2MJ0O6/2hsi+v7kiboZM5bGxkYkJydj0aJFWLFiBRwcHDBx4kQcPHgQ1dXVOlP69YVUKtVc5YwbNw5paWmora1Fenq6Ud4/MDAQNTU1iIuLM8r7GaK+vh53797VXPn0xNfXF+vXr0dZWRk2bdrUZUxvzoufnx/s7e3h7OyMsLAw1NfX4/79+wCApqYmpKWlISQkBIsXL4ajoyO2bt0KmUxmtOPfkXrEqKWlpc5rMpkMjY2NOsvHjBkDACgsLDR6PoMVF0PGjKSoqAh1dXWYNm2a1vLp06fDyspK6zamsU2bNg1KpbJPfS4HisrKShARlEqlXvE7d+6Et7c3Dhw4gKtXr+q83tfz0rmfpqn6jHZH/ZtpVwNimpubYW1trbNcfewqKiqMns9gxcWQMSNRD2fvqiuIo6MjamtrTbp9uVyOqqoqk26jPzQ1NQFAtwNKOlMoFEhPT4dEIsGqVat0rpSMfV7q6+sBAFu3btWa4OLevXvdPhrRF+rffWtqarSWNzQ0oKmpCSqVSmcddYFUH0v2clwMGTMSR0dHAOjyy/XZs2dwc3Mz2bZbWlpMvo3+ov4iN+ThcV9fX2zYsAHFxcVITEzUes3Y58XYPTNfxsPDA3Z2drh3757W8pKSEgDApEmTdNZpbm4GgC6vGlnXuBgyZiQTJkyAra0tfvrpJ63l165dQ3NzM9544w3NMqlUqrntZgw5OTkgIsycOdNk2+gvLi4ukEgkBj8/mJiYCB8fH1y/fl1ruSHnRR/93TNTKpVi/vz5uHLlCtrb2zXLs7OzIZFIuhxxqz52w4cP75ccBwMuhowZiUKhwMaNG5GVlYXjx4+jpqYGhYWFWLt2LVQqFSIiIjSxXl5e+O2333D27Fm0tLSgqqpK51/+ADBkyBA8fvwYZWVlqK2t1RS39vZ2PH36FK2trSgoKEBUVBTc3d0RHh5ulG0Y2tfSmJRKJUaPHo2HDx8atJ76dmnngSaGnBd9t/OynplhYWEYPny40aaDi4uLQ0VFBbZv3476+nrk5eUhKSkJ4eHh8Pb21olXH7uJEycaZfuiIORY1v4goqHBzMh682hFe3s7JSUl0ZgxY0gmk5GTkxOFhITQ7du3teKePHlCb7/9NikUCvLw8KBPP/2UoqOjCQB5eXlpHpHIz8+nUaNGkbW1Nc2ePZvKy8spIiKCZDIZjRgxgqRSKdnb29PChQuptLTUaNvQp69lV4z1eYuMjCSZTEYNDQ2aZVlZWeTp6UkAaNiwYfTJJ590uW50dLTOoxX6nBd9+2kSvbxnZkhICAGgbdu29bifeXl5NGvWLFKpVJr+oq6uruTn50e5ublasbm5uTRjxgySy+WkUqkoOjqampqaunzfwMBAGjFiBLW3t/e4/ZcR0fdnxqDfSxGdTGZkA7W5b0REBA0ZMkToNLpkrM9bcXExSaVSOnbsmBGy6n9tbW00Z84cOnLkSL9vu7q6mhQKBe3bt6/P7yWi709+zpAxczTYOxN4eXkhISEBCQkJqKurEzodg7S1teHs2bOora0VpIVafHw8pkyZgsjIyH7ftjnjYsgYG5BiY2OxZMkShIWFmdVk3Dk5OThz5gyys7P1flbSWJKTk3Hjxg1cvHgRMpmsX7dt7rgYMmZGNm/ejPT0dDx//hweHh44ffq00CmZ1K5duxAZGYk9e/YInYre/P398c0332jNC9sfzp07hxcvXiAnJwdOTk79uu3BQCp0Aowx/e3evRu7d+8WOo1+FRAQgICAAKHTGPCCg4MRHBwsdBpmi68MGWOMiR4XQ8YYY6LHxZAxxpjocTFkjDEmeqIZQLNkyRKhU2Bm5m9/+xsA/n/HEOppwPiYDQ6GTolnziREREInYUp5eXlITk4WOg3GGDNbmZmZQqdgapmDvhgyxhhjL5HJvxkyxhgTPS6GjDHGRI+LIWOMMdHjYsgYY0z0/h/9PmJ+9gs0oAAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "execution_count": 28 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "suQWUkbfCxBr", + "outputId": "3b11c9f3-be9c-45c9-9e83-71690e0292fe", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 35 + } + }, + "source": [ + "hidden1 = model.layers[1]\n", + "hidden1.name" + ], + "execution_count": 29, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "string" + }, + "text/plain": [ + "'dense'" + ] + }, + "metadata": {}, + "execution_count": 29 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "1dZ9N5IYCxBr", + "outputId": "885144a0-648a-4c52-9737-20a5cee4eba1", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "model.get_layer(hidden1.name) is hidden1" + ], + "execution_count": 30, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "True" + ] + }, + "metadata": {}, + "execution_count": 30 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "VZlJdmSxCxBr" + }, + "source": [ + "weights, biases = hidden1.get_weights()" + ], + "execution_count": 31, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "hC1IaWvqCxBr", + "outputId": "1db402ad-8fdd-408f-dc4b-572305f7fcc0", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "weights" + ], + "execution_count": 32, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([[ 0.02448617, -0.00877795, -0.02189048, ..., -0.02766046,\n", + " 0.03859074, -0.06889391],\n", + " [ 0.00476504, -0.03105379, -0.0586676 , ..., 0.00602964,\n", + " -0.02763776, -0.04165364],\n", + " [-0.06189284, -0.06901957, 0.07102345, ..., -0.04238207,\n", + " 0.07121518, -0.07331658],\n", + " ...,\n", + " [-0.03048757, 0.02155137, -0.05400612, ..., -0.00113463,\n", + " 0.00228987, 0.05581069],\n", + " [ 0.07061854, -0.06960931, 0.07038955, ..., -0.00384101,\n", + " 0.00034875, 0.02878492],\n", + " [-0.06022581, 0.01577859, -0.02585464, ..., -0.00527829,\n", + " 0.00272203, -0.06793761]], dtype=float32)" + ] + }, + "metadata": {}, + "execution_count": 32 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "24U2k4EBCxBr", + "outputId": "8226b274-e8c0-4c66-bf19-d7b6ee06476d", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "weights.shape" + ], + "execution_count": 33, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "(784, 300)" + ] + }, + "metadata": {}, + "execution_count": 33 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "7C6abi7sCxBr", + "outputId": "a005861d-dfa1-4b60-ac20-0462a93c66f5", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "biases" + ], + "execution_count": 34, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", + " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", + " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", + " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", + " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", + " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", + " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", + " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", + " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", + " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", + " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", + " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", + " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", + " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", + " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", + " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", + " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", + " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], dtype=float32)" + ] + }, + "metadata": {}, + "execution_count": 34 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "sHMWe7CsCxBs", + "outputId": "3ee823d0-f246-4d55-98a0-b4b3cb3042a1", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "biases.shape" + ], + "execution_count": 35, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "(300,)" + ] + }, + "metadata": {}, + "execution_count": 35 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "NIQ9fjkKCxBs" + }, + "source": [ + "model.compile(loss=\"sparse_categorical_crossentropy\",\n", + " optimizer=\"sgd\",\n", + " metrics=[\"accuracy\"])" + ], + "execution_count": 36, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "_ySQrpOHCxBs" + }, + "source": [ + "위 코드는 다음과 같습니다:" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "lEm5BvE3CxBs" + }, + "source": [ + "```python\n", + "model.compile(loss=keras.losses.sparse_categorical_crossentropy,\n", + " optimizer=keras.optimizers.SGD(),\n", + " metrics=[keras.metrics.sparse_categorical_accuracy])\n", + "```" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "DsFsCGzDCxBs", + "outputId": "3760c120-7fcd-468c-f2c0-be2f4b02fc09", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "history = model.fit(X_train, y_train, epochs=30,\n", + " validation_data=(X_valid, y_valid))" + ], + "execution_count": 37, + "outputs": [ + { + "output_type": "stream", + "text": [ + "Epoch 1/30\n", + "1719/1719 [==============================] - 5s 2ms/step - loss: 0.7237 - accuracy: 0.7644 - val_loss: 0.5207 - val_accuracy: 0.8234\n", + "Epoch 2/30\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.4843 - accuracy: 0.8318 - val_loss: 0.4345 - val_accuracy: 0.8538\n", + "Epoch 3/30\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.4393 - accuracy: 0.8455 - val_loss: 0.5310 - val_accuracy: 0.7986\n", + "Epoch 4/30\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.4126 - accuracy: 0.8566 - val_loss: 0.3918 - val_accuracy: 0.8644\n", + "Epoch 5/30\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.3940 - accuracy: 0.8621 - val_loss: 0.3753 - val_accuracy: 0.8680\n", + "Epoch 6/30\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.3753 - accuracy: 0.8675 - val_loss: 0.3713 - val_accuracy: 0.8724\n", + "Epoch 7/30\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.3635 - accuracy: 0.8710 - val_loss: 0.3620 - val_accuracy: 0.8730\n", + "Epoch 8/30\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.3520 - accuracy: 0.8749 - val_loss: 0.3853 - val_accuracy: 0.8618\n", + "Epoch 9/30\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.3418 - accuracy: 0.8792 - val_loss: 0.3602 - val_accuracy: 0.8690\n", + "Epoch 10/30\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.3324 - accuracy: 0.8823 - val_loss: 0.3437 - val_accuracy: 0.8764\n", + "Epoch 11/30\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.3243 - accuracy: 0.8832 - val_loss: 0.3428 - val_accuracy: 0.8792\n", + "Epoch 12/30\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.3151 - accuracy: 0.8867 - val_loss: 0.3311 - val_accuracy: 0.8826\n", + "Epoch 13/30\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.3083 - accuracy: 0.8894 - val_loss: 0.3271 - val_accuracy: 0.8884\n", + "Epoch 14/30\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.3024 - accuracy: 0.8913 - val_loss: 0.3392 - val_accuracy: 0.8782\n", + "Epoch 15/30\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.2950 - accuracy: 0.8933 - val_loss: 0.3218 - val_accuracy: 0.8854\n", + "Epoch 16/30\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.2893 - accuracy: 0.8971 - val_loss: 0.3091 - val_accuracy: 0.8886\n", + "Epoch 17/30\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.2841 - accuracy: 0.8975 - val_loss: 0.3532 - val_accuracy: 0.8732\n", + "Epoch 18/30\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.2781 - accuracy: 0.8999 - val_loss: 0.3136 - val_accuracy: 0.8894\n", + "Epoch 19/30\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.2731 - accuracy: 0.9021 - val_loss: 0.3122 - val_accuracy: 0.8898\n", + "Epoch 20/30\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.2676 - accuracy: 0.9034 - val_loss: 0.3260 - val_accuracy: 0.8816\n", + "Epoch 21/30\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.2626 - accuracy: 0.9059 - val_loss: 0.3046 - val_accuracy: 0.8922\n", + "Epoch 22/30\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.2578 - accuracy: 0.9070 - val_loss: 0.2973 - val_accuracy: 0.8970\n", + "Epoch 23/30\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.2536 - accuracy: 0.9087 - val_loss: 0.2979 - val_accuracy: 0.8930\n", + "Epoch 24/30\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.2488 - accuracy: 0.9106 - val_loss: 0.3073 - val_accuracy: 0.8874\n", + "Epoch 25/30\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.2445 - accuracy: 0.9117 - val_loss: 0.2969 - val_accuracy: 0.8960\n", + "Epoch 26/30\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.2406 - accuracy: 0.9136 - val_loss: 0.3074 - val_accuracy: 0.8894\n", + "Epoch 27/30\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.2365 - accuracy: 0.9158 - val_loss: 0.3017 - val_accuracy: 0.8946\n", + "Epoch 28/30\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.2330 - accuracy: 0.9163 - val_loss: 0.3000 - val_accuracy: 0.8928\n", + "Epoch 29/30\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.2287 - accuracy: 0.9180 - val_loss: 0.3042 - val_accuracy: 0.8896\n", + "Epoch 30/30\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.2253 - accuracy: 0.9190 - val_loss: 0.3041 - val_accuracy: 0.8932\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "6waqs1mJCxBs", + "outputId": "b1225aaf-58f9-48a3-89f8-9c4c6f1296f7", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "history.params" + ], + "execution_count": 38, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "{'epochs': 30, 'steps': 1719, 'verbose': 1}" + ] + }, + "metadata": {}, + "execution_count": 38 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "zj2tzGveCxBs", + "outputId": "a60a29f8-34a9-40d8-c898-518e74e6534b", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "print(history.epoch)" + ], + "execution_count": 39, + "outputs": [ + { + "output_type": "stream", + "text": [ + "[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29]\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "BN5fl7jZCxBs", + "outputId": "ff211716-d605-4af5-836f-90f9db6d52cc", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "history.history.keys()" + ], + "execution_count": 40, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "dict_keys(['loss', 'accuracy', 'val_loss', 'val_accuracy'])" + ] + }, + "metadata": {}, + "execution_count": 40 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "YRw4Z4akCxBt", + "outputId": "4b30592d-53ae-40bd-b697-c79312a8dce6", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 386 + } + }, + "source": [ + "import pandas as pd\n", + "\n", + "pd.DataFrame(history.history).plot(figsize=(8, 5))\n", + "plt.grid(True)\n", + "plt.gca().set_ylim(0, 1)\n", + "save_fig(\"keras_learning_curves_plot\")\n", + "plt.show()" + ], + "execution_count": 41, + "outputs": [ + { + "output_type": "stream", + "text": [ + "그림 저장: keras_learning_curves_plot\n" + ], + "name": "stdout" + }, + { + "output_type": "display_data", + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAFgCAYAAABHS1h8AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzdd3Qc1f338ffd3rRa9WbJtiT3KtnYxhS3QCghNiGmBBISWh4SCBAChJYGSX6hhFASQjEthZLEmOJAKLYxHfciN1wlS5bVqyVtm+ePWa0lWc3yCtmr7+ucOTM7c3f27gijj+7ce0dpmoYQQgghRLQwDHQFhBBCCCEiScKNEEIIIaKKhBshhBBCRBUJN0IIIYSIKhJuhBBCCBFVJNwIIYQQIqpIuBFCCCFEVOlVuFFKXaeUWq2UalFKPddD2ZuUUqVKqTql1DNKKWtEaiqEEEII0Qu9bbkpAe4FnumukFLq68DPgXnAUCAb+PWxVFAIIYQQ4mj0KtxomrZY07QlQGUPRS8HFmmaVqBpWjVwD/D9Y6uiEEIIIUTvmSJ8vnHAa21ebwBSlFIJmqa1C0ZKqWuAawDsdvuUzMzMCFflsGAwiMEg3YsiQa5lZMh1jBy5lpEj1zIy5DpGTnfXcseOHRWapiV1dizS4cYF1LZ53bodQ4dWH03TngSeBJg6daq2evXqCFflsBUrVjB79ux+O/9gItcyMuQ6Ro5cy8iRaxkZch0jp7trqZTa19X7Ih0tGwB3m9et2/UR/hwhhBBCiE5FOtwUAJPavJ4EHOx4S0oIIYQQor/0dii4SSllA4yAUSllU0p1dkvrBeBKpdRYpZQHuAt4LmK1FUIIIYToQW9bbu4CmtCHeV8W2r5LKZWllGpQSmUBaJr2NnAfsBwoBPYBv4x4rYUQQgghutCrDsWapv0K+FUXh10dyv4R+OMx1UoIIYQQoo9krJoQQgghooqEGyGEEEJEFQk3QgghhIgqEm6EEEIIEVUk3AghhBAiqki4EUIIIURUkXAjhBBCiKgi4UYIIYQQUUXCjRBCCCGiioQbIYQQQkQVCTdCCCGEiCoSboQQQggRVSTcCCGEECKqSLgRQgghRFSRcCOEEEKIqCLhRgghhBBRRcKNEEIIIaKKhBshhBBCRBXTQFdACCGEEN3QNNCCEAyAFuiwrXW+PxgAfwv4mw+vA972r8PrZvB3cizg1ZegHwI+CPog4A/tC20Hffqx8HFfqLxX375hPXiyvvJLJuFGCCGEOBrB4OFQ4Gs6Yh1fuRoKasB3SF+8h3q53aifx9ekh4PWsIL2FXwpBSYbmKyhtQWMocVgAqMZDGZ9bXYf3jaYQuXMR5YzmsHi+grqfiQJN0IIIU4MAV+nYUJfHwJfMwRaQi0J3sMtCuGWBt/h1ojWFohwy0Sb/f4m/VxdrQMt3VZzIsCmTg4YrWBxgNkJZnto2wE2D7jT9e3WxWgGgxGUAZQxtK3abBs6bBuO3B8OK9YOwSW0bWxzzGjWzx8lJNwIIYToXuutjyNuR3jb3Ibw6b/0/S2hwNGih4HW2xy+5ja3QHp43RpUOoYYLRCBL6MOt0i0ti6EWx5Cr002PXw4EsFsA5P9qNZrN24lf8aph4NKa4gxGCNQf9EbEm6EEOJE1Ro4/KFQ4W0Ab2Obpb7NdkMX24dfT2+sgzXG9v0nWrcj6YhWBFsoHIQWe1xon6OLENHDsXBwsbS5RWI53BrSz+r2BSFlXL9/juiahBshhDhWwUCotaHp8Drcn6KpTV+Kbo75Ww63fgR87Tt0tjvm1Tt/BrxH35KhDGCJAYuzzeICVypYHNRWVGNPzzyy30Rn2531tTBaDrd6mKx64DBZ2782WsAgA3VF/5JwI4Q4MWkaeBuwtFRD3QG98+URi9bF/jbHg/5Qh85uWjjCx7to/fA3H339jRb9l77Z2abFwXy4H4TNrW8bzaH+EW06eIY7e7Y5brJ2CC6uI7dN1m77VWxbsYLU2bP79uPw+dC8XpTDgYqivhvixCThRggxsDQNWuqgqbr9cqgKmmra7Ks6skzQz0yAT/upbmbHkQHBGgOulA7hwRm6TWJv38ei9XXHYyY7GI////1qPh/+qir8FRUEKivxl1fgr6wkUFmBv6ISf0UF/soKAhWVBGpqAFBmM0aPB2NcnL5uux2nvzZ1OGaIiRmwQOSvrsa7axctO3fRsnsX3j17MTgcmDMyMGekY87IwJKRgTk9HYPT2W/10AIB/JWV+MvLCVRUoAWDGGw2lNWKslpD2zYMVgvKZsNgtYLZLEGyC8f/vy4hxMAJBo4cjdJx5Ejb2zGtHT873qIJbzd32NeoB5jubq9YXHofDLsH7PGQPDb0Wl927N3PyFGjD48SaR05El5UJ/s6LBbHka0dg6ADqBYM4t27j+aCApq3bsW9aSP7nnsef0V5u8DSkcHhwJiYiCkhAevwbIwnnYQpIRGDzUqgthZ/dTWBmhoC1TW07Nqlb9fUQKCLn7PRGA47pqQkzCnJmJJTMKWmYE5JwZSSor9OTEAZj/5nomka/vJyvLt36yFm1068O3fRsns3gcrKcDnlcGAdNgxfcTENK1agtbQfFWWMiwuFnoxehx/N59NDS1kZ/vJyfSkrx19eFlqHlspKfYj50TAY9OBjtaJsNpTVgsFq08OPzYYhJgZjTEz7tTsGg6vDOiYGo8uFsli6voaBAIG6OoK1tQTq6gjU1hKorSNQV6vvqw3tq6sjUFtDMPR62L//hTk5+ei+VwRIuBHiRKdphzuTttSH1q3b9fp2aF+gtgp/WSW+ymoC9Y1YPRrWWA2lNXcILqGQ0teOpOFbLm1aLFr7YrhS2h9rE1TCiyNeX9s8aEYz2qFDBBoaCNbVEahvIFhfR6CunmB5PZWlfgLnfRuj2x3Z69oDze+nad066pctx7tvHwSDaFoQgpr+S0oLorVuB4NoWifbmqa/BzCnp2MdPhzL8Gys2cOxZGdH9DtpwSC+wkKaNhfoYWbzZpq3bCHY2AiAslgwu91omZlYhw/HOHUqpsQkTIkJGBMSMCUm6ktCAgaHo0+fH2xoCIUePfyEQ1AoCAWqq/GXl9O4ahX+snLw+9ufxGjElJSEKSUZc3Io9KQkhwJQKuaUZDCZ8e7ZTcuuXYdbZHbtIlhXFz6NISYGa24urjmzsebkYs3NwZqTgyk1FRXqD6RpGoHKSnzFxfiKi/GG1r7iElq+/LLb8OMJBNj90J/0Vpjqav3faFtK6dc0OQlTUhLWsWP075WUhDk5GVNiIhiNaM3NBFu8aC3NBJub0Zpb0LwtBJtb9H0tLfq+lubQvhaCLXq5YFMTvqIimhvqCdbVE2xo6PFnpGy2cAgyxLjA5w8HlmB9fffvdTgwxsZidLsxxsZiGTYUg9sdvp5fNQk3QhwP/C16C0ZzTc/r5lp9u6UuHGa0gJ+gT+E7ZMR/yKivm0LrQwZ8Tfr+oP/I/9EoI1iTbNjSXViHpGDPiseamYTB6erd0FeLo31Y6eGWS7CpCW9REb6iInzFJaH/cdYRqCsh2FCvh5b6egL1h9dd/sUPeIAdzz6LIy8P1+xZuGbNwpKT0y/N9cHGRho+/piG95fR8MEHemuE2Yw1O1tvUTAY9L+mlTpiWxkMKEOoFclgAINCoR/TggG8e/bS8MFK8B0OlMbERD3wZGdjGT4Ma3Y2luxszGlp3bZgaJqGr7CQ5oKCw2GmoCD8C05ZLFhHjyZ2/jexjRuHbdw4rDk5fPDxx0zoY5+bniiDQf/F53ZDVs8z1mrBIIGqKnwHD+I/WIb/YGmb7YO07NlN46efdvtL2xgfjzUnB/e55+ghJicbS04OpqSkHv/7UEqFA5190qQj66dpBCoq2gSfknAQMuzfj3n4cOyTJmFKTg4Hl/B2QjzK9NX++tUCAYKNjUf82wrWh/7NNXRY19ejzGYsuTkYYz3h0GKMdWOIjcXojsXoiQ3/TLtr9RkIEm6E6EjT9FaLljo9SDTXQUttm+26w6NXgv7QEtBbOdq99rcpE3odKpNXWQ4FHA4t/qb2VQhCwGsg6FMEvAYCQQdBXASCdgJBG0G/BX9TIr56D/5aL76aJjRvh79ylcKUEIcpOQlrWhrOtAzMael6U39qKgZXDN5dO2nesoXmLVup37KFmrU79fcaDFiyh2MbMxbb2LHYxozBljumVy0JmqYRqK7GV1iIt7AIb1EhvsIiPdAUFuIvLz/iPQanE4PbjdHlwuB2Y0pKwpKTgzHGhSHG3fna7cbgcvHF628woq6Ohg8+oOz+Byi7/wHMGRm4Zp2Oa9YsHNOnY7DZ+vpfA76yMhqWr6B+2fsc+vQzNK8Xg9uNa9YsYubNxXnqqRhdkZmFVfP78e3fT8vuPXrrw+7dePfspf7ttwnU1obLKasVy7BhWLKHh1t7lMl4OMxs2RJuqVBmM9bRo3F/41zs48frQSY3F2U2R6TO/UUZDOFwwbiuh1UHGxvxHSzDX3YQ/8GDBFta9BCYk4MpLq7/6qdUOLTYJ09ud2z3ihVM7KeQ2FfKaAwHkeP7Jx8ZEm5E9PJ79U6ojRVwqCK0rtL3NdceXtqFmNB20N/z+UEfAmsIDYU1GMFgQsNMIGAk6G9dDPrapwj4FEGforHeS5PJRdCXRsCbRqBFI9jkJ9DkI9DYjNbs7eTDNOCQvpjNmBITMadkYs1JxZWSgik1FXNaKqYUPbyYEhN7/AVmGzUS9znn6GfXNPylpeGw07xlC4dWraLujTfC5c1DhuhhZ+wYbGPHoiwWvIWF+IqK2gWZjn9Nm5KTMWdl4jz1VCxZmZgzs/T1kCEYY2P71I+ilS83h+TZs0n+6U34Dhyg4YOVNKxcSc2rS6j+54somw3n9Ok4Z51OzKxZmDMyuj2fpmn6bYdly6lftozmjRvD3z3ukotxzZmLY0p+v4QDZTLpoWXYMGBOu2P+6mq8u3fj3bNHDz+7d9O8ZQv1/3sn3FdDmc1YR43CffbZ2MaPw94aZI6zv6ojyeB0Ys0ejjV7+EBXRRxHJNyIE0PriJpDVaGlAg5VHg4uhyqhsbL9dktt1+ezxOhDbW2xYHXr/UASR+rbbffbYtGMTrw1Xnzl9XjLavAeqCBQW0+woZFgYyOBRn0dbGgg2NCA5vUCwdDSdZ+VphiTfn87NhZjXAyWYW69VcLtxuCO0Zt93TF6i0ZoMcS4Mca69REUEb7topTCnJaGOS2NmHnzwvv9VVXhsNO8dYv+C/Wdd9q/2WzWO1VmZeLIyz8iwBxLy8nRMKelEXfxRcRdfBHBlhYOfbGKhg8+CC8HuQfriFxcs2bhPP10HHl5KLMZze/n0Jq1NCxbRv2yZfiKigCwTZhA0o034JozF+vIEQM6MsUUF4dpyhQcU6a02x/0evEVFqJ5vVEfZIToLQk3okua3693+qusIlBdRaCqCtuGDdRUVqIFAnrHyEAAAkG0YCDUkTKAFgh2uTbYrNhGjcA2IhOz06C3orS2poTXbYb9tu4LDfvtlNGiT5PuTABHAniGgjNR325dnIl6GUeC3lG1Q5+QYHNzqPWhEO++Qr0FYt9mvVWipKTdKAaDw4EpKUm/leJyhW7xuDC4nBhD+wwOZ3ifwenUb7e0HnM6+XDVKmbPndufP76IMcXH4zr1FFynnhLeF6ivp2XbNrRAAEtmpt4R8xhaX/qDwWrFddqpuE47Fe3OO0J9WvSQU/nc81Q+vQhDTAz2iRNp3ryZQG0tymzGcfIMEq68EtecOXoH1eOcwWLBmps70NUQ4rgi4WYQ6SystG77q6oIVFbhr64iUFVNoLKy3T3+VrHAgaP94FAfSkAfPaLpf/2a7AHsCV5sCT7s8V5s8T6Mdqs+3Ld1tEzy6DavQ+uOocXi6tUD3wINDaF+IGtDt09CQaawEH9pabuyxthYzEOHYp80idhvnoc5KwtL1lAsQ7Mwxscf+1/wJ/gMrcaYGBwnnTTQ1eg1pVT41kXCD75PoKGBxk8+oeGDD2hav0HviDx3Hs5TTsHo6r+5TIQQXw0JNycYTdP0YbGt8wnU1OrzDLSdd6C2ttO5B9oOhWxHKX2Oifh4TJ4YrJnJmEanY7SB0eLHZG7GaKjHpNXQ0liGnRbw1emhRQFKC63bvDbbweFBOfThvNg9YPMQNLlprgjSXNxI074qmnaWUL+hPFwPa24OtgkTsWdMxD5xAtYRI3rdt6F1LovW/h++ovYdWgPV1e3KGxMSsGRl4Zw+HfPQw+HFkpmJ0ePp889IHP+MLhfuM8/EfeaZA10VIUQ/kHBzAgjU1VF84000b9+ut6Z0nPuhLZOp3VwDxsQEfb4MpxWjzYDRDiZrAKOpCZOhESPVGP0VqMaDUL+j83lNzAkQkwauFKobEnAPG90usIQnWGu7bbJ2Wj0D4AgtrfzV1TRv3kzTho00bdpIw7Jl1C5eDOjzLtjGjsU+YQK2iROwT5wIwWCno3C8+/ejNbUZdWQwYE5NxZyVRczXvoY5KxNLZhbmzCFYhg6N2AgXIYQQxxcJN8c5LRCg+JZbaPziCzznnx+axTNW72QaG4vR5cBo9mFUTRipQ/mqUPUHoP6A/ryd+m1QX6rPCtuMvrSyxeqhJSYVkkbo69bXrWtXSrugcizPnumKKS4O12mn4TrtNP07axq+/ftp2riR5o0badq4ieqXXkJ7/vkj3qtsNiyZQzAPycQ58+TDnVgzM7FkZEjnSiGEGIQk3Bznyh95hMYPVpJ65TnEneSE+kI9uFSWwN4D0HjknCEYrXowcadD2mQYlX44rLjTQ6FFfwrw8UgphSUzE0tmJrHnngvoU5g379hB8+YCfWKp0GgcU1LigM2AKYQQ4vgk4aYHgYYGahcvxjV3HpYh3c+Pccw0DWr3Q/EaKFlL3bKVVL56kNjsRjwNT8MK9E60MengToP0vFBYSTu8jknTO91G2cPUlNmMfZw+b4cQQgjRHQk3XdACAWpffZWyh/5EoLKSyueeY9jf/445PT1yH3KoCorXQslaPdAUr4XGMgBa6myUvJuALctD6q9vRw2dBvHDu+zLIoQQQgidhJtOHFq9mtLf/Y6WLVux5+cTd9utlN5zL/t+8AOG/u1vfXvCqbcRDmwMt8pQvAaq94YOKn0CudyvQUY+Afcoin5yLwZPE0P+9m8MKSmR/HpCCCFEVJNw04avpISyBx6g7r9vYUpNJf3BB3Cfc44+c+uQTAqvuoqiK68k64UXen5mia8JCj+DPR/A7g/gwAbQQg//cw+BjHyY8n3ImKL3i7Hpz+zRAgGKr70W34FShj7/PGYJNkIIIcRRkXADBA8dovLpRVQuWgRKkXjddSRceQUGuz1cxpGfR+Zf/kzRNT+k6MqryHr+OYwxMYdPEvDrLTKtYaboCwi06M8cypgKp94EQ6ZCej7EdB1Yyh95lMaVH5L6q1/hyM/rz68thBBCRKVBHW40TaPuzaWUPfAA/oMHcZ97Lsk/uxlzWlqn5Z0zZjDk0Ucouu56iq75IVm/vxnDgc/1QLP3Y/DW6wVTJsC0q2H4LBh6MlhjOj1fR3Vv/4/KJ57As3AhcRdfFKmvKYQQQgwqgzbcNG3axMHf/o6m9euxjRtHxh8fPOKBdEeo3ovLtZeMbw+n+KW1FF2+kMzTKzEkZcOEb0P2LBh2uv6Mo6PUvGMHJXfcgX3yZFLuvquP30oIIYQQgy7c+MrKKP/jQ9QuWYIxMZG03/6W2PMXdD1XSsAH7/4Str0JNfsAcLtS0C4YQ8l/dlBccj5D7n7ymCaLC9TWsv+66zE4HWQ8/DAGmXhOCCGE6LNBE26CLS1UPfc8lU88gebzkXD1VST88Ic9T8H/zt3w+eMw8mw4+cf6raakUcQqRXD8y5T+6lcU33obGQ/cjzId/eXUAgGKb/4ZvgMHQh2Ij/+nEAshhBDHs6gPN5qmYV23nt33/hbf/v24vjaPlFtvxZKV1fObN/1bDzYzfgRn/f6Iw3EXX0SwqYmyP/yBAzYbab/77VHPllv+p4dp/OgjUn/9a+lALIQQQkRA1Ieb0l/9Gs/LL2MYMYKsZ5/BefLJvXvjwQJ4/XrIOhnO+E2XxRJ+8H2CTYeoeORRlN1G6i9+gerl7MB1b79N5VNP4bnwQuIuurB39RJCCCFEt6I+3LjPPotCpZh21529v23UXAsvX6aPclr4HBjN3RZPvPZatNBwcoPdQfItP+sx4DRv30HJ7aEOxHfd2ctvI4QQQoieRH24cc6YQVNzc++DTTAIr/4/qCmEy9/UHzLZA6UUSTffTLCpmapnnsHgcJB03Y+7LB+oqWH/dddhdLnIeEQ6EAshhBCRFPXh5qh99EfY/l846w/6HDW9pJQi5c47CDY1UfHYYxjsdhKuvOKIcuEOxKWlDH3h+b49ykEIIYQQXZJw09bO92HZvTBhIUz/4VG/XRkMpN3zG7TmJsruvx+Dw07cJZe0K1P+0EM0fvwxqff8BkeedCAWQgghIq1XQ3uUUvFKqVeVUo1KqX1Kqe90Uc6qlPqrUuqgUqpKKfWGUiojslXuJ9X74D9XQvIYOO9h6GWn4I6U0Uj6H/6Aa84cSn/9G2peXRI+Vvff/1L59CI8F19E3MKFkaq5EEIIIdro7bjlPwNeIAW4FHhcKTWuk3I3ACcDE4F0oBp4NAL17F++ZnjlexAMwEV/B4vzmE6nzGYy/vQQzpkzOXDnndS9/TbN27ZRcudd2PPzSb3jjghVXAghhBAd9RhulFJO4ALgbk3TGjRN+wh4HfhuJ8WHA//TNO2gpmnNwMtAZyHo+PLfn8GB9XD+E5CQE5FTGqxWhjz2KPa8PIp/dgtF1/wQY0wMQx7+0zHNZiyEEEKI7ilN07ovoFQe8LGmaY42+34GzNI07bwOZacCDwMLgRrgaaBM07QbOznvNcA1ACkpKVNeeumlY/wqXWtoaMDVxUzEaSXvMGrHn9mXtZA92ZdF/LNVUxNxf3oYU3ExVTf/FP/w4RH/jK9Sd9dS9J5cx8iRaxk5ci0jQ65j5HR3LefMmbNG07SpnR3rTYdiF1DXYV8t0Nmjrr8EioBiIABsAq7r7KSapj0JPAkwdepUbfbs2b2oSt+sWLGCTs9fvAY+fApy5jL00icYajD2y+cH58zBX1GJZciJ0f2oO11eS3FU5DpGjlzLyJFrGRlyHSOnr9eyN31uGgB3h31uoL6Tsn8GrEAC4AQWA28dda2+Co2V8PL3wJUKFyyCfgo2AAabLSqCjRBCCHEi6E242QGYlFIj2uybBBR0UnYy8JymaVWaprWgdyaeppRKPPaqRlAwAP+5AhrL4aIXwBE/0DUSQgghRIT0GG40TWtEb4H5jVLKqZQ6BZgP/K2T4quA7ymlYpVSZuBHQImmaRWRrPQxW3Yv7F4B5z4I6TLXjBBCCBFNejsU/EeAHSgDXgSu1TStQCl1mlKqoU25nwHN6H1vyoFzgPMjWN9jt/VNfRbi/Mshv7MBX0IIIYQ4kfVqhmJN06qABZ3s/xC9w3Hr60r0eXCOTxU7Ycm1kJ4P59w/0LURQgghRD/obcvNia+lQX/St9EMF74AJutA10gIIYQQ/WBwPFtK0+D166FiO3z3VfBkDnSNhBBCCNFPBkW4GbL/Ddi1GOb9ErJnD3R1hBBCCNGPov+21L5PyNn1LIz+Bpx600DXRgghhBD9LPrDzeb/0GRPhQV/6fOTvoUQQghx4oj+21LnPMA68+mcYosd6JoIIYQQ4isQ/S03SuGzSLARQgghBovoDzdCCCGEGFQk3AghhBAiqki4EUIIIURUkXAjhBBCiKgi4UYIIYQQUUXCjRBCCCGiioQbIYQQQkQVCTdCCCGEiCoSboQQQggRVaI+3Dz94W4eWds80NUQQgghxFck6sNNfbOfdWUBGlr8A10VIYQQQnwFoj7c5GV50ICNRTUDXRUhhBBCfAWiP9xkxgGwTsKNEEIIMShEfbiJdZhJcyrW7qse6KoIIYQQ4isQ9eEGIMdjZF1RDZqmDXRVhBBCCNHPBkW4yfUYqGr0Ulh1aKCrIoQQQoh+NijCTY7HCMDaQrk1JYQQQkS7QRFuMlwKp8XIukLpVCyEEEJEu0ERbgxKMSnTIy03QgghxCAwKMIN6PPdbD1QT5M3MNBVEUIIIUQ/GjThJj8rjkBQY1Nx7UBXRQghhBD9aNCEm8mZHkA6FQshhBDRbtCEmwSXlaEJDtZJuBFCCCGi2qAJN6DfmlpbKJP5CSGEENFsUIWbvCwP5fUtFNc0DXRVhBBCCNFPBlW4yc8KPURT5rsRQgghotagCjejUmOwmQ3SqVgIIYSIYoMq3JiNBiZmeKTlRgghhIhigyrcAOQN9bClpI4Wv0zmJ4QQQkSjwRduMuPwBoJsLq4b6KoIIYQQoh8MunCTn6VP5ifz3QghhBDRadCFm2S3jQyPXfrdCCGEEFFq0IUb0Oe7kZYbIYQQIjoNynCTnxVHSW0zpbXNA10VIYQQQkTYoAw3edLvRgghhIhagzLcjEuPxWIysK5I+t0IIYQQ0WZQhhuLycD4dDdr90nLjRBCCBFtBmW4AcjLimNTcS1ef3CgqyKEEEKICBq04SY/K44Wf5BtpTKZnxBCCBFNBm24ae1ULLemhBBCiOgyaMNNusdOqtsmnYqFEEKIKDNoww3orTdrZTi4EEIIEVUGfbgpqmqivL5loKsihBBCiAgZ1OEmPysOgPVya0oIIYSIGoM63IzPiMVkUHJrSgghhIgigzrc2MxGxqW75TEMQgghRBTpVbhRSsUrpV5VSjUqpfYppb7TTdl8pdRKpVSDUuqgUuqGyFU38vKy4thQVIs/IJP5CSGEENGgty03fwa8QApwKfC4Umpcx0JKqUTgbeAJIAHIBd6JTFX7R16WhyZfgO0H6we6KkIIIYSIgB7DjVLKCVwA3K1pWoOmaR8BrwPf7aT4T4H/aZr2D03TWjRNq9c0bWtkqxxZrZ2K1xVKp2IhhBAiGihN07ovoFQe8LGmaY42+34GzNI07bwOZZcBm4CT0FttPgd+rGlaYSfnvQa4BiAlJWXKSy+9dIxfpWsNDQ24XK5Oj2maxg3LDzEh0cTVE639Vodo0d21FL0n1zFy5FpGjlzLyHznHdMAACAASURBVJDrGDndXcs5c+as0TRtamfHTL04twvo+ACmWiCmk7JDgHzgDPSQcx/wInBKx4Kapj0JPAkwdepUbfbs2b2oSt+sWLGC7s4/vWg1u8oaui0jdD1dS9E7ch0jR65l5Mi1jAy5jpHT12vZmz43DYC7wz430FknlSbgVU3TVmma1gz8GpiplIo96pp9hfKyPOyuaKS60TvQVRFCCCHEMepNuNkBmJRSI9rsmwQUdFJ2I9D2Plf397yOE3mZMpmfEEIIES16DDeapjUCi4HfKKWcSqlTgPnA3zop/ixwvlJqslLKDNwNfKRpWm0kKx1pkzJjMShkvhshhBAiCvR2KPiPADtQht6H5lpN0wqUUqcppRpaC2matgy4A1gaKpsLdDknzvHCYTExOtXNWhkxJYQQQpzwetOhGE3TqoAFnez/EL3Dcdt9jwOPR6R2X6H8oR6WrCshENQwGtRAV0cIIYQQfTSoH7/QVl5mHA0tfnaWNfRcWAghhBDHLQk3IXlZHkD63QghhBAnOgk3IcMTnXgcZpmpWAghhDjBSbgJUUqRl+lhrbTcCCGEECc0CTdt5GfF8WVZA7VNvoGuihBCCCH6SMJNG3mhh2hukMn8hBBCiBOWhJs2JmXGopQ8IVwIIYQ4kUm4aSPGZmZkcgzriqTfjRBCCHGiknDTQV6Wh3WFNQSDJ8RjsYQQQgjRgYSbDvKz4qht8rGnsnGgqyKEEEKIPpBw00HrZH5r98mtKSGEEOJEJOGmg5wkFzE2E+tkxJQQQghxQpJw04HBoJic6ZERU0IIIcQJSsJNJ/Ky4theWkdDiz8i56tprmFzxeaInEsIIYQQ3ZNw04n8LA9BDTbuj0zrze0f3c733voe1c3Sj0cIIYTobxJuOjE5s/UJ4ccebj478BkfFX+EL+hj6e6lx3w+IYQQQnQv6sONL+CjxFtyVO/xOCxkJzlZd4wP0QxqQf64+o+kOdMYFTeKJTuXHNP5hBBCCNGzqA83d39yN48dfIw6b91RvS8/K451hTVoWt8n83trz1tsrdrK9XnXc8HIC9hevZ2tlVv7fD4hhBBC9Czqw833xn6PhmADj6599Kjel5flobLRS2HVoT59rjfg5ZG1jzA6fjTnZp/LOcPPwWwwS+uNEEII0c+iPtyMTRjL6TGn8/L2lymoKOj1+/JDTwjva7+bF7e9SEljCTdNuQmDMhBrjWVu1lyW7lmKN+Dt0zmFEEII0bOoDzcA53rOJcGewD2f3UMgGOjVe0amxOCwGFnbh343tS21PLnxSWamz2Rm+szw/gW5C6htqWVF0YqjPqcQQgghemdQhBu7wc4tU2+hoLKAf+34V6/eYzQoJg3p22R+izYvot5bz01Tbmq3/+S0k0l2JMutKSGEEKIfDYpwA3D28LOZnjadR9Y+QkVTRa/ekz/Uw9YDdTR5e9faA3Cg4QD/2PIPzss5j9Hxo9sdMxqMfDPnm3xc8jFlh8qOqv5CCCGE6J1BE26UUtw5/U6aA808uPrBXr0nLzMOf1BjU3Ftrz/nsfWPAXDd5Os6PT4/Zz5BLcgbu97o9TmFEEII0XuDJtwADI8dzg/G/4A3d7/JFwe+6LF86xPCezvfzbaqbbyx6w0uHXspaa60TssMix1GXnIeS3YuOaZh5kIIIYTo3KAKNwBXT7iaDFcG935+L76Ar9uyCS4rQxMcve5U/NCah3Bb3Vw14apuyy3IXcDeur1sKN/Q63oLIYQQoncGXbixmWzcMf0O9tTu4fktz/dYPi/Tw9peTOb3SfEnfFLyCddMuAa3xd1t2a8P+zp2k106FgshhBD9YNCFG4DTh5zO17K+xhMbnmB//f5uy+YPjaO8voWS2uYuywS1IA+tfYgMVwYXj764x893mp2cMfQM3t77Nk3+pqOuvxBCCCG6NijDDcBt025DKcUfvvhDt+XyMvXJ/JZtPdhlmaW7l7KtahvX512PxWjp1ecvyF1Ao6+R9/a91/tKCyGEEKJHgzbcpDpT+dGkH7Fi/wqWFS7rstyYtBgmZXr45esFPPfxniOOtwRaeHTdo4yJH8PZw8/u9edPSZlChiuD13a+1qf6CyGEEKJzgzbcAFw69lJyPbn83xf/xyFf58+QMhkNvHj1dOaNSeFXb2zhV68XEAge7n/z4tYXOdB4gJun3oxB9f5yGpSB+bnz+bz0c4obio/5uwghhBBCN6jDjdlg5u4Zd3Og8QBPbHyiy3IOi4m/XjaFq04dznOf7OXqF1bT0OLXH7Ow6UlOzTiV6WnTj/rz5+fMR6F4fefrx/I1hBBCCNHGoA43APkp+SzIXcALBS+ws3pnl+WMBsVd3xjLvQvG88GOchb+9VP+tPpxGrwNRzxmobfSXelMS5vGa7teI6gF+/oVhBBCCNHGoA83AD+d8lOcFif3fn5vj0O+L5sxlGe+fxJFdfv595cvcXra2YyMG9nnz16Qu4DihmJWl67u8zmEEEIIcZiEGyDOFseN+Tey5uAa3tjd82MRZo1M4vTpqwED73+SxzsFpX3+7HlZ83CZXTLnjRBCCBEhEm5CvjXiW0xKmsSDqx+ktqX7Z0ltqdzChwfe4ZJRlzIycQg//Psanv5wd58ep2A32Tlr+Fm8u+9dGrwNfa2+EEIIIUIk3IQYlIG7Z9xNTUsNj6x9pMtymqbxxzV/xGP1cP2Ua3jpmpM5a1wq9y7dyt2vbcYfOPq+MwtyF9AcaOZ/e/93LF9BCCGEEEi4aWdU/Ci+M/o7/GvHv9hUvqnTMp+UfMLnBz7nhxN/SIwlBrvFyJ+/k88PZ2Xz988KueL51dQ3d//Mqo4mJk5keOxwuTUlhBBCRICEmw6uy7uOJHsS93x2D/6gv92xQDDAH9f8kSGuIVw06qLwfoNBcfvZY/j9tybwyc4Kvv34p+yv7nzenM4opViQu4D15evZU3vkRIFCCCGE6D0JNx04zU5unXYrW6u28vL2l9sde3P3m+yo3sEN+TdgNpqPeO8l07J47gfTKKltYsGfP2FDUU2vP/e87PMwKqPMWCyEEEIcIwk3nThz6JnMTJ/JY+seo/xQOQDN/mYeXfco4xPGc+awM7t876kjEll87UxsZgMXPfkpb28+0KvPTHIkcUrGKbyx6w0CwUBEvocQQggxGEm46YRSijun34k34OX+VfcD8I+t/+DgoYP8dOpPe3zMwoiUGJb8+BTGpLn5f39fyxMf7OrVSKoFuQsoayrjk5JPIvI9hBBCiMFIwk0XstxZXDXhKt7a+xZv73mbRZsWMWvILE5KPalX7090WXnx6hmcOzGN37+1jZv/tYGy+uZu3zN7yGw8Vo90LBZCCCGOgYSbblwx4QqyYrK4deWtNPobuTH/xqN6v81s5NGL87h+bi6vrS/h9PuWc++bWyivb+m0vNlo5tzsc1letLzHuXaEEEII0TkJN92wGq3cOf1ONDQW5C4gNy73qM9hMChuPnMU7/90FudOSOeZj/dw+n3L+d1/t1LZcGTIWZC7AF/Qx9LdSyPxFYQQQohBR8JND2ZmzOQf5/yDO6bfcUznGZbo5MELJ/HeT2dx1vhUnv5wN6fdt5z/e2sbVY3ecLnR8aMZHT9abk0JIYQQfSThphcmJk3EarRG5FzZSS4eumgy79w0izPGpvDEyl2c9odl3Pf2NqpDIWdB7gK2Vm1le9X2iHymEEIIMZhIuBkguckuHr44j3duPJ05o5N5/INdnHbfch7433ZOSf0aJoNJWm+EEEKIPpBwM8BGpMTw2HfyefuG0zl9ZCKPLd/JeX9aT4ZlKm/ufhNf4Oge5SCEEEIMdhJujhOjUmP4y6VTeOuG0zglN5GtX46mpqWGW/77EnVH+awqIYQQYjCTcHOcGZPm5q/fncKr3/8+Zjz8b98bnPp/y3j0/S/DfXKEEEII0TUJN8epiUMSuGz8+VjcO5g83MiD7+7gpN++x5XPreL1DSUc8vp7PokQQggxCPUq3Cil4pVSryqlGpVS+5RS3+mhvEUptVUptT8y1RycFuQuIKgFmDtlP2/dcBpXnjqcLQfq+MmL65h673vc+NI6lm8vwxcIDnRVhRBCiOOGqZfl/gx4gRRgMrBUKbVB07SCLsrfApQDMcdexcErOzabiUkTWbJzCZePu5zbzxnDbWeN5ou9Vby2vpilGw+wZH0J8U4L505IY0FeOvlZcSilBrrqQgghxIDpseVGKeUELgDu1jStQdO0j4DXge92UX44cBnw+0hWdLBakLuAXbW72FyxGdBnPJ6RncDvvzWRVXd9jae+N5WTcxJ4ZXURFzz+Kafdt5z7/7eNHQfrB7jmQgghxMBQPT2tWimVB3ysaZqjzb6fAbM0TTuvk/JvAouAauDvmqYN6eK81wDXAKSkpEx56aWX+vwletLQ0IDL5eq38/enpmATd+6/k+nO6VyUcFHX5fwaaw/6+fRAgC2VAYIaZMYYODnNyPQ0Ewn2yHSvOpGv5fFErmPkyLWMHLmWkSHXMXK6u5Zz5sxZo2na1M6O9ea2lAuo67Cvlk5uOSmlzgeMmqa9qpSa3d1JNU17EngSYOrUqdrs2d0WPyYrVqygP8/f3z748ANWFq3koVMfwmaydVnu7NC6vL6F/246wJL1xbyyo4ZXdviYNiye+XnpnDM+jTinpc91OdGv5fFCrmPkyLWMHLmWkSHXMXL6ei178+d8A+DusM8NtLvvEbp9dR/wk6OuhejWgtwF1Pvqueeze1hzcA2BYKDb8kkxVi6fOYxXf3QKK2+Zw81njKSysYU7X93MtN+9x1XPr+aNDSU0ebs/jxBCCHEi6k3LzQ7ApJQaoWnal6F9k4COnYlHAMOAD0MdWi1ArFKqFJihadreiNR4EJqWOo1v5nyTt/a8xeu7XifeFs/szNnMzZzL9LTp3bbmZCU4uH7eCK6bm0tBSR2vrS/m9Q0lvLf1IE6Lka+PT2XB5Axm5iRgMsrMAEIIIU58PYYbTdMalVKLgd8opa5CHy01H5jZoehmILPN65nAY0A++sgp0UcGZeC3p/6W26fdzkclH7GscBnv7H2HxV8uxm6yc2rGqczJnMPpQ04n1hrb6TmUUozPiGV8Riw/P3sMn++uZMn6Yt7aVMritcUkuqycNymNBZMzmDgk9rgccVVQWcDiHYtJc6Vx4agLcVs6NigKIYQQvR8K/iPgGaAMqASu1TStQCl1GvCWpmkuTdP8QGnrG5RSVUBQ07TSTs8ojprL4uKsYWdx1rCz8AV8rCpdxbKiZSwrXMa7+97FqIxMTZ3K3My5zM2aS6oztdPzGA2KmbmJzMxN5Dfzx7N8WxlL1hfzj88KefbjvWQnOpk/OYP5k9MZluj8ir9le4FggBVFK3hhywusLVuLzWijOdDMok2LuHj0xVw25jIS7AkDWkchhBDHl16FG03TqoAFnez/EL3DcWfvWQF0OlJKHDuz0czMjJnMzJjJHdPvoKCigGVFy3i/8H1+/8Xv+f0Xv2dswthw0Mn15HbaGmMzGzl7QhpnT0ij9pCPtzbrHZH/9P4OHnpvB5MzPcyfnM43JqaTFGP9yr5fo6+RJTuX8Pctf2d/w37SnencMvUWvjXiW+xv2M/Tm55m0aZF/G3L37hgxAV8f9z3SXOlfWX1E0IIcfzqbcuNOI4ZlIEJSROYkDSBG/JvYHftbpYXLmdZ0TIeW/8Yj61/jMyYTE5OO5lERyIeq4c4axwemweP9fAS67Bx8bQsLp6WRUlNE29sKGHJ+hJ+/cYW7l26lVNyE8k0+IjfX8OYNDfmfuijc6DhAP/c9k/+s+M/1PvqmZw0mZum3MTcrLmYDPp/rqPjR/PArAfYO3kvz2x+hle2v8Ir21/hGznf4IrxVzA8dnjE6yWEEOLEIeEmCmXHZpM9IZsrJ1xJ+aFylhfpQeetPW9R7+t6cj+7yd4u7HisHk6b4WGmz86eMigo2sJH1S7+8ecGbCYbE4d4yM+KIz/LQ/7QOBJdfW/Z2Vi+kRe2vMB7+94D4IyhZ/Ddsd9lYtLELt8zLHYYvznlN1w76Vqe3/I8/9nxH17b+RpnDD2DqyZcxZiEMX2ujxBCiBOXhJsol+RI4sJRF3LhqAsB8AV81HprqWmuobqlmtqW2sPr5mpqWmrCS3FDMTUtNdR5Q9McecDpAYXCaUih0JvKpq2JPL02hUBLKpkxmUzJSiB/qB54RqXEdDsCyx/0837h+/xty9/YUL6BGHMM3xv7PS4ZfclR3WJKc6Xx82k/5+oJV/OPrf/gxW0v8s6+dzg141SunnA1+Sn5x3QNhRBCnFgk3AwyZqOZRHsiifbEXr/HH/RT562jqqmKpZ8uxZJu4cuaL/my+kuazBsxafqDO2ux8H5dMm99nkJgZSrmQDrjEkczPWso+UM95GXGEee0UO+tZ/GXi/nn1n9S0lhCZkwmP5/2c87PPR+H2dFDbbqWYE/gJ/k/4fvjv8/L217mb1v+xuVvX05+cj5XT7yaU9JPOS5HgQkhhIgsCTeiRyaDiXhbPPG2eCY5JjF78uzwsWZ/M7tqd7Gjakc48Gyv2kF1yxoAtgFb9ztZtCuNYHMKbocRn/0LAjQzxjOZn826lblZszEajBGrr9vi5uqJV3PZ2MtY/OVint38LNe+dy1j4sdw9cSrmZc1D4OSOX2EECJaSbgRx8RmsjEuYRzjEsa121/ZVBkOO1srt7OpbDv7G1fTovlRjZNpLJvJF80ZbFrtY+KQL8jLiiMvy0Nepodkd9eTEh4Nu8nOpWMu5cKRF/Lm7jdZtHkRP13xU7Jisvj6sK8zL2seYxPGSmuOEEJEGQk3ol8k2BNIsCcwI21GeF8gGMAb9GIz2thf3cTawmrWFdawrqiGRR/txhfQH+Ka4bEzORR08rLiGJfuxmbue8uO2Wjm/BHn882cb/Ju4bu8sv0VFm1exFObniLFkcLcLH24/JSUKZgN5mP+7kIIIQaWhBvxlTEajNgNdgAy4x1kxjuYPzkDgGZfgIKSOtYVVrOuqIb1hTUs3XgAALNRMTY9NhR2PEwc4mFovAOD4ehaXIwGY3gSxOrmalbuX8n7he+z+MvFvLjtRdwWN7OGzGJu1lxmps88pv4/4sRQ2ljKs5uf5YKRFzAybuRAV0cIESESbsRxwWY2MmVoHFOGxoX3HaxrDrXs6C08L60q5LlP9gLgspoYm+ZmbLqb8RmxjEt3k5vs6vXcO3G2OObnzmd+7nwO+Q7x6YFPWVa4jA/2f8Abu9/AarRyctrJzM2ay6zMWcTb4vvja4sBtLliMz9Z9hPKm8pZ/OVi7ph+BwtyF8htSiGigIQbcdxKcds4a3wqZ43XHyPhDwTZVlpPQUktm4vrKCip5eVVReHAYzEZGJ0aw7h0PeyMz4hldGpMj7e0HGYH87LmMS9rHv6gn7UH14Yfa7Fi/woMykBech7zsuYxJ3MOQ2Jk4u0T3dt73+auj+4i0Z7I02c+zVObnuIXn/yCVaWruGvGXdJqJ8QJTsKNOGGYjIbwwz8vOknfFwhq7KlooKCkjs3FtRSU1PHfTQd48YtCQH+OVm6Si3HpbsaFWnjGprtx2zrvW2MymJiWNo1padO47aTb2Fa1LfxYi/tW3cd9q+5jVNwosj3ZmJQJo8GIURkxGUwYlRGjwdhuf8fXreX2NewjvTqdnNiciI4UE93TNI2/bvwrf1n/F/KS83ho9kMk2BOYmjKVJzc+yeMbHqegsoAHZj3AiLgRA11dIUQfSbgRJzSjQZGbHENucky4/46maeyvbqKgRG/dKSip46OdFSxeVxx+X4bHzpi0GEalxjA61c2YtBiGJTjbTTqolGJMwhjGJIzhx5N/TFFdEcuKlrGiaAVbKrfgD/oJaAECwQABLdDutV/z4w/6u63731//O06zkwmJE5iYNJFJSZOYlDSpyye7H0+CWpBdNbuwmWxkxmQOdHV6pdnfzC8+/gVv7X2Lb+Z8k1+e/EssRgug98e6dvK15KXk8fOVP+c7S7/DnTPuZEHuEY/UE0KcACTciKijlAp3WG69pQVQXt8SDjvbS+vZVlrH8u3lBIL6KC2LycCIZBejU92MTo1hdCj8JLms+jndmVw+7nIuH3d5r+sS1ILhsNM2BL330Xs4sh1sKN/AhvINPL3paYKhyRCHuYfpQSd5EhMTJ5LryR3w1p1DvkNsrtjMurJ1rCtfx8ayjeFHeYyOH82ZQ8/kjKFnMCx22IDWsyvlh8q5YfkNbK7YzI35N3LF+Cs67VszI20G//7mv7lt5W3c/fHdrCpdxZ3T75TbVEKcYCTciEEjKcbK7FHJzB6VHN7X4g+wq6yRbaV1bCutZ1tpPR9+Wc5/1u4Pl0lwWvSgk+JmdFoMo1NjyE124bD0/M/HoAwYjAbMtL8NlmJOYXbObM7LOQ/Qw0NBZYEedso2sHL/Sl7b9RoATrOT8Ynjwy07ExMn4rF5InFJulR2qIx1ZetYX7aedWXr2Fa1jYAWACDXk8tZw89icvJkqpureXffuzyy7hEeWfcII+NG6kFn2Blkx2b3ax17a1vVNq57/zrqvHU8NOch5mXN67Z8oj2RJ894kr9u/CtPbHiCgooCHpz9IDmenK+oxkKIYyXhRgxqVpORsaF+OG1VNXr1wHOgPtzK888v9tHsC4bLpMfayE5ykZ3kJDvRGd5Oj7Uf9TB1h9nBSakncVKq3plI0zT21+9nffl6NpRvYGP5RhZtWhQOGMPcwxgWOyz8dPc4a5z+tHdbXPihp3G2OGIsMT3OxhzUguys2RkOMuvK1lHcoN/CsxltjE8czxXjr2By8uROb5tdPu5yShtLeW/fe7yz753wk+hzPbmcOfRMzhx25oAFg/cL3+f2D2/HbXHz/FnP9/phqkaDkR9P/jH5yfn8/MOfc8nSS7hz+p3Mz53fzzUWQkSChBshOhHvtDAzJ5GZOYefwRUIahRWHWLbgTp2ljWwu6KR3eUNvLq2mPqWw/1rbGYDwxKc5LQGnyQn2Yn6dkwXHZk7ar0NlunO7LR1Z2P5RkoaSthSuYXq5mp8QV+n5zEoAx6rh1hr7BEByGQwsblyc7tbTIn2RPKS8/jO6O+Ql5zH6PjRmI091znVmcplYy/jsrGXcbDxIO8Vvsc7e9/h8Q2P85cNfyEnNoczhp3BmUPPJNeT2+/DrTVN45nNz/Dw2ocZnzieh+c8TJIj6ajPc3L6yfz7vH9z24e3cdfHd7H64GrumH4HdpO9H2rdd76Aj4AWwGaKzOzeQpzoJNwI0UtGg2J4opPhic52+zVNo7yhhd3ljaFFDz4FJbW8tfkAoS49gH5rLDvRid3fwj7L3lCH5hg8DkuPn9+xdaft5zf5m6huqaamWX+ie+t2u3VLDYX1hWys2EhNcw1+zU+uJ5evD/86ecl55CXlMSRmyDEHjxRnCpeOuZRLx1xK+aFy3it8j3f3vcuTG5/krxv+yvDY4ZwxVA86I+NGRjzoeANefv3pr3l91+ucNews7jnlnmP6pZ/kSOKpM57i8Q2P8+TGJ9lcsZkHZz1ItmfgbrsFtSDbqrbx+YHP+fzA56wtW4umaZw1/CwWjlzIhMQJMl+PGNQk3AhxjJRSJMfYSI6xMSM7od0xrz9IYVUjuzoEn1Wlfla8XhAul+K2MirVzagUF6NCHZpzk129euyEUgqH2YHD7CDDldGrOmuahi/oC48W6i9JjiQuGX0Jl4y+hIqmCpYVLuOdve/w9KaneXLjkwx1D2V66nSmpExhSsoUUpwpx/R5Vc1V3Lj8RtaVreNHk37E/5v0/yLyS95oMHJd3nXkp+Rz+4e3c/HSi7l7xt3hVrX+pmkae+v2hsPMqoOrqG2pBSAnNocFuQvwB/0s3b2UJTuXMDp+NAtHLuTc7HNxmp09nF2I6CPhRoh+ZDEZwkPV21q+fDlj8k9mW6k+cmt7aT3bD9bz/O5KvH69X49BwbBEJ6NT9c7Mra08WX149ERHSql+DzYdJdoTuXDUhVw46kIqmyrDEyUu3bOUV3a8AsAQ15Bw0JmaMvWoWpK+rP6S65ddT0VTBfeffj9nDT8r4t9hZvpM/nXev7ht5W3c8dEdrCpdxe3Tb++X21QHGw/yeakeZj478Bllh8oASHOmMSdzDtPTpjM9dXq72203T72ZpbuX8sr2V7jns3t4cPWDfCP7G1w46kJGxY+KeB2FOF5JuBFiACilSI21kRprazd6yx8IsrfyUCjw1IVmZK7jrc2laKHbW3azkZEpLrKTXGTG2RkS7yAzzkFmvJ20WDvGYww+X4UEewILRy5k4ciFBIIBtldvZ83BNaw5uIYP9n8QHimWbE8mPyU/HHhyPDmddpBeuX8lt668FbvJzrNff5YJSRP6re7JjmSeOvMp/rL+Lzy96Wk2VWzi1pNuxW11YzFYMBvMWIwWLEZ9u/W1ydD9/25rW2r5ovSLcOvM3rq9AHisHqalTmN62nRmpM0gMyazy8DnNDu5cNSFLBy5kE0Vm3hl+yu8tus1XtnxChOTJrJw5EK+Puzrx12fISEiTcKNEMcRk9FAbrKL3GQX505MC+8/5PWz42BDOPBsL63niz1VvLa+qV2fHpNBke6xkxlvDwUeB0Pi7Pq8P3EOEl2W464vhtFgZGzCWMYmjOW7Y7+Lpmnsrt3NmoNrWH1wNWsOruHtvW8DEGuNJT85P9yyMyp+FMvrlrNk2RJGxY3ikbmPkOpM7eETj53JYOIn+T9hSsoUbv/wdq5595oe32NQhnD4MRtDASj0OkiQvbV70dCwm+xMSZnCt0d+m+lp0xkZN7LHEW8dKaWYmDSRiUkTueWkW3hj1xu8suMV7v74bu5bdR/zc+azcOTCAe03JER/knAjxAnAYTExOdPD5Mz289t4/UEO1DZRVNVEUfUhiqoOUVTdRFHVId7bepCKBm+78nazMRx2hsTpLT3pHhupbhvpHjvJW7G1MwAAIABJREFUbitW08BOGKiUIseTQ47n/7d359FR1/f+x5+fJJOZJJM9ECDIWlmEEKm4X5SKiNrrVorUoj/EA57WBa2/Y+VSbTmVa6tee089x6pcryhVj6KWarXVK5UUuaI/gaIowdAqkTX7MpNkskw+vz9mMmTfGJhkeD3O+Z75zue7zGc++ZK8+awTuX7y9VhrOeQ9FKrZ2VG8g80HNgPgjHXS4G9g7pi5PPQvD530yfYuzLmQN659gz3le2j0N9LU0kRjSyNN/iYa/Y2B/ZbgfvB42/et5/qtnyvGXcG5I88lNyu3TyPU+irVmcqNZ9zI4qmL2V68nVe/fJWXv3yZFwpeYFb2LK6ffD1zx8w96c2U4dZiWzjkPURNYw0TUydGZORYi23hgOcA+3z7GFs9luzEbE0AGSEKbkSGsPi4GMZmJjE2s+tOo3WNzRwMBjutgc/ByjoOVNTzyf4KPL7OS0RkuZ2MTHWFthERDoCMMYxOHs3o5NGheWZK6krYWbyTHcU7aChpYPWc1f2u3QiXdFc6F+ZcGJHP7g9jTGi0XXl9OW/88w1e/fJVfrrlp2S4MrjmW9fgqHMwujJQ1oN5WHl1QzWFlYUUVhayr3If+6r28Y/Kf1DXXAdArIllYtpEpmYElk+ZljmNSemTwhpotNgWimqK2FO+hz3leyioKKCgvABvkxeAx//4OADJjmSyk7LJTsxmeOJwspOCr4nZoS3VmTooalQb/A1U+ioDW0NlpyVkDIE8GmOO7QdfMe2Ptx7LG5YXkWdJwY1IFEuMj2NSdjKTspO7PO5taOZodT1Hqn2BrcrH0Zp6Dlf5KCqvY9tX5T0GQKPTExibmcS4zETGZgaGyQ9Pdh53h+feDE8czuXjL+fy8ZeTn58fscBmqMpMyOSW6bdw87Sb+ejwR2wo3MD6L9bjt37WvrkWCJTxacmncVryaYxJHhPaH508+qStf9bob+Sr6q8CAUzlvlAwU1JfEjon1ZnKpPRJXPuta5mUPgl3vJsvK76koKKADw59EOq/ZTCMTx3P1MypnJFxBlMzpzIlYwrJ8V3/22jL3+KnqKaIL8q/CAUyeyv2UttUC0B8TDyTMyZz5fgrOSPzDEr/WUrOpBxK6koorisOvNYWU1hZSFl9GRbb7v7OWGen4CclPtCHyxnrDPXhat13xjrb7XdMi48J1MLVNNZQ2RAIVlqnhGgNXKp8VVQ0VISmj6jwVVDfXB+uH13IuwveZZR7VNjv2xsFNyKnMLczrsvRXG31FAB9WexhU0ExTf5jv6xdjhjGZiQxNjORcVlJjGsNfrKSGJniOuGBj/RdjInhgpwLuCDnAmoaa/jD5j8w7PRhHPAc4IDnAAc9B9l6aCtl9WXtrkt1pnKa+1iwc1ryaYxJGUOmK5MWWrDW4rf+wNpq1k9LS0u7952OB1+bW5r5puabUBCzv2Z/aFZuR4yDiWkTQ/2QTk8/ndPTT2dYwrBOtR7zx80HAkPoS+pKKKgoCAQl5QV8cvQT3v7q7dC5Y1PGhmp4zsg8g8npkymvL2dPxZ5Qrczeir2hP/zOWCeTMyZz1YSrQn3FJqRNwBFzrCkx/3A+cybO6bLMm1qaKK8v52jt0U7BT3FdMbtKdlFSV9LtxJzhkBCXQIYrIzCbuSuNCakTSHOlhdJaZz53xjqxwZEMrQGZxYbSWrVNC50XfJ+Z0H56jJNFwY2I9Ki3AMjfYjlcVU9ReR1fl9dSVFbL/vI6vi6rJb+wNDS0HQLNaGMyEo8FPJmJjEpLIDsl0ASWkTT4OjyfKlLiUxjnHMecCXM6HatrquOg9yAHag6EAp/WCSHfLXo3tOhruOS4czg97XQuGXNJKJAZkzKmXQDRF8aYQJNQUjZzTpsTSi+rL6OgvCDUlPRZ6WehTuttJcQlMDl9Mtd96zrOyAzU9kxIndDryLeeOGIcjEga0WPH99Z5qBr8DTT4G2j0N7Z77UtaCy3tlmJJd6aHZicfzE2O4aLgRkSOS2zMsVXY/+X0rHbHWlosR2p8oYCnqLyW/eW17C+rY+s/Stut1QWB4GdESmCI/IiU1j4/x/r+jEhxMSzZOSSGu0eTREcik9InMSl9UqdjTS1NHPEe4RvPN1T6KokxMcSa2NCrMabd+5iY9sfbvsaYGHLcObjj3Sf0+2QlZDF79Gxmj54dSqvyVVFQUUBhZSEZrgymZkxlfOp4YmNOfgf71nmo4mPjSab3ZjPpTMGNiJwwMTGGnLQEctISuOBb7Y+1tASWrThS7Qs1ex2t8XE02Py160AV73zuo9HfPgCKjTEMT3aGgp6mmgb28I/gLNFOhqc4GZ7sIj3RoVqgk8AR42BMyhjGpIyJdFaOS5orjfNHnc/5o86PdFYkDBTciEhExMQYslNcZKe4oMMQ91bWWirrmjhSXR8Keo62CYL2HvVwuKKZ94q+7HStI9YwzO1kWEow6EkOBD3ZKccCoOHJTjLdqgkSiTYKbkRk0DLGkJEUT0ZSPNNGdT1CJz8/n3Mu+BdKahoo8TRQ4vG12y/1NPBNeR3b91dQWde5k2aMgeHJLkamuRiVmhAYAp+WQE6ai5GpCYxMc5GVdOJHgIlI+Ci4EZEhLzE+jnFZcYzL6nmRyIZmP2XeRkpqfIHgp8ZHcU1DcCRYPXuO1LCpoJiG5vZNYY5YE2wGS2BUMPgZlXos+BmZmkBagkMBkMggoeBGRE4ZzrjYUB+g7rQ2hR2uqg8FPYerAq9HqnxsL6rk6GdHaG5pPxw2LsaQ5XYyLNgENqzt5g40hQ1zBzpEJ8RHdhZokWin4EZEpI22TWHTc7puCmtpsZR5Gzhc7eNIVT1HawLNX6WehlAn6c8OVVPubaBDDAQEhtcPT3aS1Sb4yU5xMSLVGeqHNCLFRZJTv6JFBkL/ckRE+ikmxjA8xcXwFFen9b7a8rdYKmobKW3T/6fU23AsEPI0UHC4hr95GvA2dJ4JOtkZx/CUwMiwtkFPYD+QPsztJC5WMzSLtKXgRkTkBImNMaGmqTNI6fHc2oZmimsCI8GKa3wcrW6guHW/xsfHX1VQXOPr1BxmTGA5jOzgCLBhrU1jKc5j+8lqDpNTi4IbEZFBIMkZx4RhbiYM634Cu5YWS3ltY7ugp7imgeJqH8WeQNrnh6op66E5rGNfoLZ9hIpq/JTU+MhIildtkAxpCm5ERIaImDY1Qd31B4Kem8NKemkO+8WHf8UYyEiMD3WQznK33W//mpEUr3mCZNBRcCMiEmX60xxW19hMmaeREo+P/I92kj32W5R6A4FRmTew7S+qpczb0Gm5DAjME5SRFAh+stzOUGfsjltmUjzpSfGkJyoYkhNPwY2IyCksMT6OMZlxjMlMxLs/jjnnj+vyPGst3oZmyryNlAVrgdq/BtIPVNZR4W3E00UHaQj0EUpNcASCnsRg4OMOBD2tQVJrzVBWMF3zB0l/KbgREZFeGWNIdjlIdjkY38tkiQCNzS1U1jVS7m0MvNY2UlkbeK2obaCytony2gaKyuvY+U0VlXWN+LvoKBQbY8hMim8T8BxrKmvtN5QVPKaJFKWVghsREQm7+LiYY2uH9UFLi8Xja6bU275G6Nh+oGZoX7GHUm8DTf7OgVBczLE5ijLd8WQkOQPNYYnxZLgDTWNtm8rURBa9FNyIiEjExcQYUhMdpCY6+Nbw7keMQaCJrKa+OdRJujUIKvM2UOY5Vjv0eVVgIsUaX/dNZGkJDtKT2gY+TtITHaQnxpMafE1PdJCWGE9aooO0BIdGkg0BCm5ERGRIMabvgRBAk78l1CR2rGnsWBBUEXz/dVktO4oqqaxr6rKJrFWyK460YOCT1hr8JDhC+0cONxNTWBqoHQr2LdIcQyeXghsREYlqjtiY0IzSfWGtxdPQTHVdE5V1jVTWNVFV10hV8H1V8H1relF5LZW1je1qiJ7+7P+1u6fLEUNGYjDYSTrWgTrwGgiM2qanJTpwORQQDZSCGxERkTaMMaS4HKS4HJyWkdjn65r9LdT4mnln81YmTT+TitpAZ+qK2qbga6DmqKKukQMVdVR0CIg6csbFkJrgIDXBQVpi4DWl9X1CPKkJcaQmBvZTOpznOMWbzhTciIiIhEFcbAwZSfGMcscwa1xGn65p8reEaoTaBj9VdU3U1DdRVddEdX1gO1zlo+CIh+r6pi7XImsrKT62U1+iQCfrY/MOte1c7XbGYUz0dK5WcCMiIhIhjtiY0ISL/dHkb6Gm/ljgU1XfFHofaDZroqK2gfLaRkq9DXx51EN5bSMNzZ0nYoTA6La28w5lJMWT1qamKMXlICUhLvh6LM3tihuUI84U3IiIiAwxjtgYMt1OMt19D4qstdQ1+jt0pj4WBFV4j3W0Liqvo7q+iRpfE7b7vtVAYPX6lGAglOIK7rsCAdDt35nYrzyGi4IbERGRU4AxhiRnHEnOuD73JWppsdQ2NgcCnfpmanyBGqIaX2taUzAtcKy6vokDFXV4fM3U1Ddx60UTTvC36tqgDW6ampo4ePAgPp/vuO+VmppKQUFBGHJ16nK5XIwePTrS2RARkZMoJubYzNSkRzo3fTdog5uDBw+SnJzMuHHjjruTk8fjITk5OUw5O/VYaykvL+fgwYORzoqIiEivBu1YMZ/PR2ZmZlT13h6qjDFkZmaGpRZNRETkRBu0wQ2gwGYQ0c9CRESGij4FN8aYDGPMRmNMrTGmyBjzw27Ou9cY87kxxmOM+doYc294sysiIiLSs772uXkCaASygTOBt40xn1prv+hwngH+D/AZMBH4H2PMAWvty+HK8Mnkdrvxer2RzoaIiIj0Q681N8aYJGAB8IC11mut3Qq8CdzU8Vxr7SPW2p3W2mZr7ZfAG8CF4c60iIiISHf6UnMzCWi21ha2SfsUuLini0ygk8Zs4Olujt8K3AqQnZ1Nfn5+u+Opqal4PB4AHv6ff7K3eOA1KNbaTn1GpmS7ue+yib1e6/F4sNbywAMP8N5772GM4d5772XBggUcPXqUm2++GY/HQ3NzM//5n//Jueeey+23387f//53jDHceOON3HHHHQPO+2Di8/nwer2dflbSfyrH8FFZho/KMjxUjuEz0LLsS3DjBmo6pFUDvY2tXk2gZmhdVwettWuBtQCzZs2yc+bMaXe8oKAgNHzbEe8gNnbgq6P6/f5O1zviHX0aHp6cnMzrr7/Onj172L17N2VlZZx99tnMnz+fN998kyuvvJKf/exn+P1+6urqKCwspKSkhD179gBQVVUVNcPQXS4Xbrebjj8r6b/8/HyVY5ioLMNHZRkeKsfwGWhZ9iW48QIpHdJSAE93Fxhj7iDQ92a2tbah37nq4BdXTTuu6493nputW7dyww03EBsbS3Z2NhdffDGffPIJZ599NrfccgtNTU1ce+21nHnmmUyYMIGvvvqKO++8k+9+97tcdtllx5V3ERER6Z++jJYqBOKMMae3ScsDOnYmBsAYcwuwEphrrY3qWd8uuugitmzZQk5ODjfffDPr168nPT2dTz/9lDlz5vDUU0+xbNmySGdTRETklNJrcGOtrQX+APzSGJNkjLkQuAb4fcdzjTGLgYeAedbar8Kd2UiZPXs2r7zyCn6/n9LSUrZs2cI555xDUVER2dnZLF++nGXLlrFz507KyspoaWlhwYIFrFmzhp07d0Y6+yIiIqeUvg4Fvw14FigByoEfW2u/MMbMBv5irXUHz1sDZAKftOnA+4K19kdhzPNJd91117Ft2zby8vIwxvDII48wYsQInn/+eR599FEcDgdut5v169dz6NAhli5dSktLYFn5X/3qVxHOvYiIyKmlT8GNtbYCuLaL9A8IdDhufT8+fFmLvNY5bowxPProozz66KPtji9ZsoQlS5Z0uk61NSIiIpEzqJdfEBEREekvBTciIiISVRTciIiISFRRcCMiIiJRRcGNiIiIRBUFNyIiIhJVFNyIiIhIVFFwMwg0NzdHOgsiIiJRo68zFEfWX1bC0d0DvjzB3wyxHb7qiFy44te9Xnvttddy4MABfD4fd911F7feeivvvPMOq1atwu/3k5WVxV//+le8Xi933nkn27dvxxjDL37xCxYsWIDb7Q5NBvjaa6/x1ltv8dxzz3HzzTfjcrn4+9//zoUXXsgPfvAD7rrrLnw+HwkJCaxbt47Jkyfj9/u57777eOedd4iJiWH58uVMmzaNxx9/nD/+8Y8AvPfee/zud79j48aNAy4jERGRaDE0gpsIevbZZ8nIyKC+vp6zzz6ba665huXLl7NlyxbGjx9PRUUFAA8++CCpqans3h0IwiorK3u998GDB/nwww+JjY2lpqaGDz74gLi4ODZt2sSqVat4/fXXWbt2Lfv372fXrl3ExcVRUVFBeno6t912G6WlpQwbNox169Zxyy23nNByEBERGSqGRnDThxqWntR7PCQnJw/o2scffzxUI3LgwAHWrl3LRRddxPjxgZUmMjIyANi0aRMvv/xy6Lr09PRe771w4UJiY2MBqK6uZsmSJezbtw9jDE1NTaH7/uhHPyIuLq7d591000288MILLF26lG3btrF+/foBfT8REZFoMzSCmwjJz89n06ZNbNu2jcTERObMmcOZZ57J3r17+3yPNguI4vP52h1LSkoK7T/wwAN85zvfYePGjezfv585c+b0eN+lS5dy1VVX4XK5WLhwYSj4EREROdWpQ3EPqqurSU9PJzExkb179/LRRx/h8/nYsmULX3/9NUCoWWrevHk88cQToWtbm6Wys7MpKCigpaWlxz4x1dXV5OTkAPDcc8+F0ufNm8fTTz8d6nTc+nmjRo1i1KhRrFmzhqVLl4bvS4uIiAxxCm56cPnll9Pc3MzUqVNZuXIl5513HsOGDWPt2rV873vfIy8vj0WLFgFw//33U1lZyfTp08nLy2Pz5s0A/PrXv+Zf//VfueCCCxg5cmS3n/XTn/6Uf/u3f2PmzJntRk8tW7aMMWPGMGPGDPLy8njppZdCxxYvXsxpp53G1KlTT1AJiIiIDD1qy+iB0+nkL3/5S5fHrrjiinbv3W43zz//fKfzvv/97/P973+/U3rb2hmA888/n8LCwtD7NWvWABAXF8dvfvMbfvOb33S6x9atW1m+fHmv30NERORUouBmiDrrrLNISkrisccei3RWREREBhUFN0PUjh07Ip0FERGRQUl9bkRERCSqKLgRERGRqKLgRkRERKKKghsRERGJKgpuREREJKoouAkTt9vd7bH9+/czffr0k5gbERGRU9eQGAr+8P97mL0VfV/PqSO/3x9aoLLVlIwp3HfOfcebNRERERlkVHPTjZUrV7ZbK2r16tWsWbOGuXPn8u1vf5vc3FzeeOONft/X5/OxdOlScnNzmTlzZmiZhi+++IJzzjmHM888kxkzZrBv3z5qa2v57ne/S15eHtOnT+eVV14J2/cTERGJVkOi5uZ4a1g8Hg/Jycn9umbRokXcfffd3H777QBs2LCBd999lxUrVpCSkkJZWRnnnXceV199dbuVv3vzxBNPYIxh9+7d7N27l8suu4zCwkKeeuop7rrrLhYvXkxjYyN+v58///nPjBo1irfffhsILK4pIiIiPVPNTTdmzpxJSUkJhw8f5tNPPyU9PZ0RI0awatUqZsyYwaWXXsqhQ4coLi7u1323bt3KjTfeCMCUKVMYO3YshYWFnH/++Tz00EM8/PDDFBUVkZCQQG5uLu+99x733XcfH3zwAampqSfiq4qIiEQVBTc9WLhwIa+99hqvvPIKixYt4sUXX6S0tJQdO3awa9cusrOz8fl8YfmsH/7wh7z55pskJCRw5ZVX8v777zNp0iR27txJbm4u999/P7/85S/D8lkiIiLRbEg0S0XKokWLWL58OWVlZfztb39jw4YNDB8+HIfDwebNmykqKur3PWfPns2LL77IJZdcQmFhId988w2TJ0/mq6++YsKECaxYsYJvvvmGzz77jClTppCRkcGNN95IWloazzzzzAn4liIiItFFwU0Ppk2bhsfjIScnh5EjR7J48WKuuuoqcnNzmTVrFlOmTOn3PW+77TZ+/OMfk5ubS1xcHM899xxOp5MNGzbw+9//HofDEWr++uSTT7j33nuJiYnB4XDw5JNPnoBvKSIiEl0U3PRi9+7dof2srCy2bdvW5Xler7fbe4wbN47PP/8cAJfLxbp16zqds3LlSlauXNkubf78+cyfP38g2RYRETllqc+NiIiIRBXV3ITR7t27uemmm9qlOZ1OPv744wjlSERE5NSj4CaMcnNz2bVrV6SzISIickpTs5SIiIhEFQU3IiIiElUU3IiIiEhUUXAjIiIiUUXBTZi43e5IZ0FEREQYIqOljj70EA0Fewd8fbPfT0VsbLs059QpjFi16nizNug0NzcTFzckfqwiIiInhGpuurFy5UqeeOKJ0PvVq1ezZs0a5s6dy7e//W1yc3N54403+nQvr9fb7XXr169nxowZ5OXlhebIKS4u5rrrriMvL4+8vDw+/PBD9u/fz/Tp00PX/cd//AerV68GYM6cOdx9993MmjWL3/72t/zpT3/i3HPPZebMmVx66aWhlcu9Xi9Lly4lNzeXGTNm8Prrr/Pss89y9913h+77X//1X/zkJz8ZcLmJiIhE2pD4L/7x1rB4PB6Sk5P7dc2iRYu4++67uf322wHYsGED7777LitWrCAlJYWysjLOO+88rr76aowxPd7L5XKxcePGTtft2bOHNWvW8OGHH5KVlUVFRQUAK1as4OKLL2bjxo34/X68Xi+VlZU9fkZjYyPbt28HoLKyko8++ghjDM888wyPPPIIjz32GA8++CCpqamhJSUqKytxOBz8+7//O48++igOh4N169bx9NNP96usREREBpMhEdxEwsyZMykpKeHw4cOUlpaSnp7OiBEj+MlPfsKWLVuIiYnh0KFDFBcXM2LEiB7vZa1l1apVna57//33WbhwIVlZWQBkZGQA8P7777N+/XoAYmNjSU1N7TW4WbRoUWj/4MGDLFq0iCNHjtDY2Mj48eMB2LRpEy+//HLovPT0dAAuueQS3nrrLaZOnUpTUxO5ubn9LC0REZHBQ8FNDxYuXMhrr73G0aNHWbRoES+++CKlpaXs2LEDh8PBuHHj8Pl8vd5noNe1FRcXR0tLS+h9x+uTkpJC+3feeSf33HMPV199Nfn5+aHmq+4sW7aMhx56iClTprB06dJ+5UtERGSwUZ+bHixatIiXX36Z1157jYULF1JdXc3w4cNxOBxs3ryZoqKiPt2nu+suueQSXn31VcrLywFCzVJz587lySefBMDv91NdXU12djYlJSWUl5fT0NDAW2+91ePn5eTkAPD888+H0ufNm9euH1FrbdC5557LgQMHeOmll7jhhhv6WjwiIiKDkoKbHkybNg2Px0NOTg4jR45k8eLFbN++ndzcXNavX8+UKVP6dJ/urps2bRo/+9nPuPjii8nLy+Oee+4B4Le//S2bN28mNzeXs846iz179uBwOPj5z3/OOeecw7x583r87NWrV7Nw4ULOOuusUJMXwP33309lZSXTp08nLy+PzZs3h45df/31XHjhhaGmKhERkaFKzVK9aO18C5CVlcW2bdu6PM/r9XZ7j56uW7JkCUuWLGmXlp2d3eVIrBUrVrBixYpO6fn5+e3eX3PNNVxzzTWdznO73e1qctraunWrRkmJiEhUUM3NKa6qqopJkyaRkJDA3LlzI50dERGR46aamzDavXt3aK6aVk6nk48//jhCOepdWloahYWFkc6GiIhI2Azq4MZa2+scMoNJbm4uu3btinQ2TghrbaSzICIi0ieDtlnK5XJRXl6uP6qDgLWW8vJyXC5XpLMiIiLSq0FbczN69GgOHjxIaWnpcd/L5/PpD/NxcrlcjB49us/D30VERCJl0AY3DocjNLPu8crPz2fmzJlhuZeIiIgMbn1qljLGZBhjNhpjao0xRcaYH3ZznjHGPGyMKQ9uD5uh1GlGREREhry+1tw8ATQC2cCZwNvGmE+ttV90OO9W4FogD7DAe8DXwFPhya6IiIhIz3qtuTHGJAELgAestV5r7VbgTeCmLk5fAjxmrT1orT0EPAbcHMb8ioiIiPSoLzU3k4Bma23byVA+BS7u4txpwWNtz5vW1U2NMbcSqOkB8BpjvuxDXgYqCyg7gfc/lagsw0PlGD4qy/BRWYaHyjF8eirLsd1d1Jfgxg3UdEirBpK7Obe6w3luY4yxHcZ0W2vXAmv78PnHzRiz3Vo762R8VrRTWYaHyjF8VJbho7IMD5Vj+Ay0LPvSodgLpHRISwE8fTg3BfB2DGxERERETpS+BDeFQJwx5vQ2aXlAx87EBNPy+nCeiIiIyAnRa3Bjra0F/gD80hiTZIy5ELgG+H0Xp68H7jHG5BhjRgH/F3gujPkdqJPS/HWKUFmGh8oxfFSW4aOyDA+VY/gMqCxNX1qMjDEZwLPAPKAcWGmtfckYMxv4i7XWHTzPAA8Dy4KXPgPcp2YpEREROVn6FNyIiIiIDBWDduFMERERkYFQcCMiIiJRJaqDm76uiSW9M8bkG2N8xhhvcDuRky5GDWPMHcaY7caYBmPMcx2OzTXG7DXG1BljNhtjup2QSrovS2PMOGOMbfNseo0xD0Qwq4OaMcZpjPnv4O9EjzFmlzHmijbH9Vz2UU9lqeeyf4wxLxhjjhhjaowxhcaYZW2O9fuZjOrghvZrYi0GnjTGdDljsvTJHdZad3CbHOnMDBGHgTUEOuSHGGOyCIxCfADIALYDr5z03A0tXZZlG2ltns8HT2K+hpo44ACBWeZTgfuBDcE/xnou+6fbsmxzjp7LvvkVMM5amwJcDawxxpw10GeyrwtnDjlt1sSabq31AluNMa1rYq2MaObklGGt/QOAMWYWMLrNoe8BX1hrXw0eXw2UGWOmWGv3nvSMDgE9lKX0Q3DNxR+rAAACqUlEQVR6j9Vtkt4yxnwNnAVkoueyz3opyx0RydQQ1WEhbhvcJhIoy34/k9Fcc9PdmliquRm4Xxljyowx/2uMmRPpzAxx7dZhC/6S/Cd6Po9HkTHmoDFmXfB/e9IHxphsAr8vv0DP5XHpUJat9Fz2kTHmd8aYOmAvcAT4MwN8JqM5uOnPmljSu/uACUAOgUmV/mSMmRjZLA1pHddhAz2fA1UGnE1gEb2zCJThixHN0RBhjHEQKKvng/8L1nM5QF2UpZ7LfrLW3kagnGYTaIpqYIDPZDQHN/1ZE0t6Ya392FrrsdY2WGufB/4XuDLS+RrC9HyGibXWa63dbq1tttYWA3cAlxlj9Ae5B8aYGAIzzTcSKDPQczkgXZWlnsuBsdb6rbVbCTQ9/5gBPpPRHNz0Z00s6T8LmEhnYghrtw5bsI/YRPR8hkPrzKTR/PvtuARnk/9vAoMtFlhrm4KH9Fz2Uw9l2ZGey/6J49iz1+9nMmoLuZ9rYkkPjDFpxpj5xhiXMSbOGLMYuAh4J9J5G+yC5eUCYoHY1jIENgLTjTELgsd/DnymTpvd664sjTHnGmMmG2NijDGZwONAvrW2Y1W2HPMkMBW4ylpb3yZdz2X/dVmWei77zhgz3BjzA2OM2xgTa4yZD9wA/JWBPpPW2qjdCAwb+yNQC3wD/DDSeRqKGzAM+IRANWAV8BEwL9L5GgobgZEUtsO2OnjsUgId5+qBfALDICOe58G6dVeWwV+CXwf/nR8hsIDviEjnd7BuBPqAWMBHoMq/dVscPK7nMgxlqeeyX+U4DPhb8O9LDbAbWN7meL+fSa0tJSIiIlElapulRERE5NSk4EZERESiioIbERERiSoKbkRERCSqKLgRERGRqKLgRkRERKKKghsRERGJKgpuREREJKr8f86OdIn/AlPtAAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "8j7QxlMBCxBt", + "outputId": "9cb6c1df-2203-4fcd-d921-ba407d7b1a86", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "model.evaluate(X_test, y_test)" + ], + "execution_count": 42, + "outputs": [ + { + "output_type": "stream", + "text": [ + "313/313 [==============================] - 1s 2ms/step - loss: 0.3386 - accuracy: 0.8823\n" + ], + "name": "stdout" + }, + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "[0.3386382460594177, 0.8823000192642212]" + ] + }, + "metadata": {}, + "execution_count": 42 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "3tA0DKQMCxBt", + "outputId": "aa655107-247a-40c2-8d6c-1c7a314fe1a5", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "X_new = X_test[:3]\n", + "y_proba = model.predict(X_new)\n", + "y_proba.round(2)" + ], + "execution_count": 43, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([[0. , 0. , 0. , 0. , 0. , 0.01, 0. , 0.03, 0. , 0.96],\n", + " [0. , 0. , 0.99, 0. , 0.01, 0. , 0. , 0. , 0. , 0. ],\n", + " [0. , 1. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ]],\n", + " dtype=float32)" + ] + }, + "metadata": {}, + "execution_count": 43 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "_6cDCjM_CxBt" + }, + "source": [ + "**경고**: `model.predict_classes(X_new)`는 삭제될 예정입니다. 대신 `np.argmax(model.predict(X_new), axis=-1)`를 사용하세요." + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "izVTwWvRCxBv", + "outputId": "b03b778a-bf78-4dfb-8963-37f8587296ab", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "# y_pred = model.predict_classes(X_new)\n", + "y_pred = np.argmax(model.predict(X_new), axis=-1)\n", + "y_pred" + ], + "execution_count": 44, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([9, 2, 1])" + ] + }, + "metadata": {}, + "execution_count": 44 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "Ojbm43dFCxBv", + "outputId": "409359d4-61e5-4c67-837d-0fad8728596f", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "np.array(class_names)[y_pred]" + ], + "execution_count": 45, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array(['Ankle boot', 'Pullover', 'Trouser'], dtype='" + ] + }, + "metadata": { + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "xwzwR8qZCxBv" + }, + "source": [ + "# 회귀 MLP" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "3DvYhBWaCxBv" + }, + "source": [ + "캘리포니아 주택 데이터셋을 로드하여 나누고 스케일을 바꾸어 보겠습니다(2장에서 사용한 수정된 버전이 아니라 원본을 사용합니다):" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "muLoq47_CxBv", + "outputId": "e3df3023-0227-4f3c-f35a-daf481981d57", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "from sklearn.datasets import fetch_california_housing\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.preprocessing import StandardScaler\n", + "\n", + "housing = fetch_california_housing()\n", + "\n", + "X_train_full, X_test, y_train_full, y_test = train_test_split(housing.data, housing.target, random_state=42)\n", + "X_train, X_valid, y_train, y_valid = train_test_split(X_train_full, y_train_full, random_state=42)\n", + "\n", + "scaler = StandardScaler()\n", + "X_train = scaler.fit_transform(X_train)\n", + "X_valid = scaler.transform(X_valid)\n", + "X_test = scaler.transform(X_test)" + ], + "execution_count": 48, + "outputs": [ + { + "output_type": "stream", + "text": [ + "Downloading Cal. housing from https://ndownloader.figshare.com/files/5976036 to /root/scikit_learn_data\n" + ], + "name": "stderr" + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "1MLko01NCxBv" + }, + "source": [ + "np.random.seed(42)\n", + "tf.random.set_seed(42)" + ], + "execution_count": 49, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "bwXkzM9VCxBw", + "outputId": "5f9e50de-98ee-4021-abfc-28f7752688fe", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "model = keras.models.Sequential([\n", + " keras.layers.Dense(30, activation=\"relu\", input_shape=X_train.shape[1:]),\n", + " keras.layers.Dense(1)\n", + "])\n", + "model.compile(loss=\"mean_squared_error\", optimizer=keras.optimizers.SGD(lr=1e-3))\n", + "history = model.fit(X_train, y_train, epochs=20, validation_data=(X_valid, y_valid))\n", + "mse_test = model.evaluate(X_test, y_test)\n", + "X_new = X_test[:3]\n", + "y_pred = model.predict(X_new)" + ], + "execution_count": 50, + "outputs": [ + { + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.7/dist-packages/keras/optimizer_v2/optimizer_v2.py:356: UserWarning: The `lr` argument is deprecated, use `learning_rate` instead.\n", + " \"The `lr` argument is deprecated, use `learning_rate` instead.\")\n" + ], + "name": "stderr" + }, + { + "output_type": "stream", + "text": [ + "Epoch 1/20\n", + "363/363 [==============================] - 1s 2ms/step - loss: 1.6419 - val_loss: 0.8560\n", + "Epoch 2/20\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.7047 - val_loss: 0.6531\n", + "Epoch 3/20\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.6345 - val_loss: 0.6099\n", + "Epoch 4/20\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.5977 - val_loss: 0.5658\n", + "Epoch 5/20\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.5706 - val_loss: 0.5355\n", + "Epoch 6/20\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.5472 - val_loss: 0.5173\n", + "Epoch 7/20\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.5288 - val_loss: 0.5081\n", + "Epoch 8/20\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.5130 - val_loss: 0.4799\n", + "Epoch 9/20\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4992 - val_loss: 0.4690\n", + "Epoch 10/20\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4875 - val_loss: 0.4656\n", + "Epoch 11/20\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4777 - val_loss: 0.4482\n", + "Epoch 12/20\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4688 - val_loss: 0.4479\n", + "Epoch 13/20\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4615 - val_loss: 0.4296\n", + "Epoch 14/20\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4547 - val_loss: 0.4233\n", + "Epoch 15/20\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4488 - val_loss: 0.4176\n", + "Epoch 16/20\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4435 - val_loss: 0.4123\n", + "Epoch 17/20\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4389 - val_loss: 0.4071\n", + "Epoch 18/20\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4347 - val_loss: 0.4037\n", + "Epoch 19/20\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4306 - val_loss: 0.4000\n", + "Epoch 20/20\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4273 - val_loss: 0.3969\n", + "162/162 [==============================] - 0s 1ms/step - loss: 0.4212\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "rT3JOW6iCxBw", + "outputId": "2215af53-471a-419c-8d0b-cb62352437c9", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 273 + } + }, + "source": [ + "plt.plot(pd.DataFrame(history.history))\n", + "plt.grid(True)\n", + "plt.gca().set_ylim(0, 1)\n", + "plt.show()" + ], + "execution_count": 51, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAEACAYAAABI5zaHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3deZwcdZ3/8ddneqbn6LmTyUxOchJCTpgghBBIFuVQUDQqCHLsKqygrq7i8VMRRXdXUVfx4lhR1EWCLAFElpvEhCyJCUcCw5GE3IQccyXTcx/f3x/Vk/RMemY6c/ZUv5+PRz2mu+pb3Z+pdN5VU/2tb5lzDhER8ZeUoS5ARET6n8JdRMSHFO4iIj6kcBcR8SGFu4iIDyncRUR8SOEuIuJDcYW7mX3OzDaYWaOZ3dND2381s31mdtjMfmtm6f1SqYiIxC3eI/e9wPeB33bXyMzOB74OnAucAEwGvtuXAkVE5PjFFe7OueXOuYeBih6aXg3c7Zwrc85VAd8DrulbiSIicrxS+/n1ZgKPRD3fCBSb2QjnXIcdg5ldB1wHkJmZWTp+/PhevWFbWxspKT3vo2qbHQfrHWOzU0gbxG8a4q1vKCV6jaqvb1Rf3yRyfZs3by53zhXFXOici3vCOzVzTzfL3wYuiHqeBjhgYnevW1pa6nprxYoVcbX721sH3Alf+6tbv72i1+/VG/HWN5QSvUbV1zeqr28SuT5gg+siV/t7dxQGcqOetz+u6ef3OW6FoSAAlbVNQ1yJiMjA6+9wLwPmRj2fC+x3nU7JDIWCSLhX1SncRcT/4u0KmWpmGUAACJhZhpnFOl//B+BTZnaymeUD3wLu6bdq+6Awq/3IvXmIKxERGXjxHrl/C6jH6+b4ycjjb5nZBDMLm9kEAOfcE8CtwApgF7ATuLnfq+6FzGCAjLQUHbmLSFKIq7eMc+47wHe6WJzdqe1/Av/Zp6oGSGFWUOfcRSQpJGb/ngFSEFK4i0hySKpwL1S4i0iSSLpw1zl3EUkGSRXuBTrnLiJJIqnCvTAUpKahhebWtqEuRURkQCVVuOtCJhFJFkkV7u0XMlXpQiYR8bmkCveCUBqg8WVExP+SKtw1eJiIJIvkDHedcxcRn0uqcC84cs5d4S4i/pZU4Z4WSCEnI1WnZUTE95Iq3EFXqYpIcki6cNdVqiKSDJIu3HXkLiLJIOnCvSArSGVY4S4i/pZ04V4YSlNXSBHxvSQM93Qamtuob2od6lJERAZMEoZ7ZAgCHb2LiI8lXbjrQiYRSQZJF+4aX0ZEkkHShbvGdBeRZJB04d4+pruO3EXEz4Z9uKc3HDiu9nmZaaSYwl1E/G14h/sr97Fg7bVQviXuVVJSTEMQiIjvDe9wn7IERwpsuv+4VivQEAQi4nPDO9xzSqgqmOOFe1tb3KsV6shdRHxueIc7sL94CVTvgt1r416nIJSmm2SLiK8N+3A/WHQGpIVg47K41ykMBXWFqoj42rAP97ZABsy4CMoehuaGuNYpyApSVduEc26AqxMRGRrDPtwBmHMpNB6CzU/E1bwwFKSlzXG4oWWACxMRGRr+CPfJiyG7JO5eMxpfRkT8zh/hnhKA2R+FLU9BbUWPzQuzI1ep6ry7iPiUP8IdYO5l0NYCZct7bFqoI3cR8bm4wt3MCs3sITOrNbOdZnZ5F+3SzewOM9tvZpVm9qiZje3fkrtQMhtGzYyr14xGhhQRv4v3yP1XQBNQDFwB3G5mM2O0+wKwAJgDjAGqgF/0Q53xmXspvLMByrd220wjQ4qI3/UY7mYWApYCNznnws6554G/AFfGaD4JeNI5t9851wDcD8TaCQyM2R8DrMcvVkPBAMFACpW6kElEfMp66uttZqcAa5xzWVHzbgTOcc5d3KntfOA24GNANfAb4IBz7osxXvc64DqA4uLi0mXL4r8IKVo4HCY7O/vI8zkbv01m/T7WnX4nmHW53hdX1DGnKMA/zUrv1fv2tr5ElOg1qr6+UX19k8j1LVmy5EXn3PyYC51z3U7AImBfp3nXAitjtM0DlgEOaAFeBgp7eo/S0lLXWytWrOg44+U/OXdzrnM7/q/b9c7/6d/cp+5Z3+v3jdcx9SWgRK9R9fWN6uubRK4P2OC6yNV4zrmHgdxO83KBmhhtfwWkAyOAELAceDyO9+g/My6GtCzY1P1fAoUaGVJEfCyecN8MpJrZtKh5c4GyGG3nAfc45yqdc414X6a+x8xG9r3UOKVnw0kXQdlD3Q5HUBgKqiukiPhWj+HunKvFOwK/xcxCZrYQ+BDwxxjN1wNXmVmemaUBNwB7nXPl/Vl0j+ZeCg2HYMuTXTbR4GEi4mfxdoW8AcgEDgD3Adc758rMbJGZhaPa3Qg0AFuAg8D7gQ/3Y73xmbQYsothY9e9Zgqyghyqb6alNf5x4EVEhovUeBo55yqBS2LMXw1kRz2vwOsHP7QCqV63yHV3Ql0lZBUe06QwFMQ5OFTfzIjsge0xIyIy2Pwz/EBncy6FtmZ47cGYi3Uhk4j4mX/DvWQ2jDq5ywua2seX0YVMIuJH/g13M+/ofc96qHj7mMUFoTQAKmsbB7syEZEB599wh26HIxgR8s6z68hdRPzI3+GeNxYmne2Fe6dhFvKzvCN3nXMXET/yd7iDN8571Q7Yva7D7Iy0AKFgQMP+iogv+T/cZ1wMqZkxT80U6CpVEfEp/4d7eg7MuAheWw4tHb881VWqIuJX/g93gDmXQUO1d4/VKAVZOnIXEX9KjnCfvBhCo465BV9hKEiFwl1EfCg5wj2QCrM/Cpuf9IYjiNCRu4j4VXKEOxwdjqDsoSOzRmQHqW1qpaG5dQgLExHpf8kT7qPnQtFJHXrNFESGIKiu04VMIuIvyRPu7cMR7F4HldsAKMnzrlJ98KU9Q1mZiEi/S55wB5jzcbzhCP4MwNnTirhozmh+9ORb/PTpze33gRURGfaSK9zzxsHEs7xeM86RGkjhtstO4ePzx3Hbs1v4t8feUMCLiC8kV7hDZDiC7d5okUAgxfjBR+ZwzZkT+c3z2/nmw6/R1qaAF5HhLfnCfcYHITWjQ5/3lBTj5otP5obFU/jTul18+YGNuv2eiAxryRfuGblw0gegbDm0HO3jbmZ89YKT+Mr503no5Xf47J9eorFFXSRFZHhKvnAHbziC+qpjhiMA+OySqdx88ck8Wbaf6/7wIvVNCngRGX6SM9yn/AOEimDTspiL/3HhJG5dOodVWw5yze/+TrixZZALFBHpm+QM90AqzIoMR1BfFbPJx08bz22XncKGnVVc8Zt1VGv0SBEZRpIz3AHmXgqtTR2GI+jsg3PHcPsVp/LG3sNcdtdaDtbofqsiMjwkb7iPngcjp8PGY2/iEe28mSXcfc18dlbUcemdL/DuofpBKlBEpPeSN9zNvKP33WthzW0des50tmhaEX/41Hs4WNPIx+54gV0VdYNYqIjI8UvecAc47dNw4gXw9Lfh9gWw5Zmum04s5N5rTyfc2MLH7vw/th6oGcRCRUSOT3KHe0YeXH4/XP4AOAf3LoU/XQYVb8dsPmdcPvdft4DWNvj4nWsp23tokAsWEYlPcod7uxPPgxvWwvtugR2r4ddnwLO3QGP4mKbTS3J44DMLyEhN4RN3reWlXbF724iIDCWFe7vUICz8Anz+RZi1FFb/BH45HzZFjuqjTBoZ4s+fWUBhKMgnf7OO257ZwqF6jQkvIolD4d5ZTgl8+A741NOQXQzLPw2/uxDe3dih2biCLP78zws4a+pIfvrMZhb98DmFvIgkDIV7V8a/B65dAR/8BZRvgTvPgUe/CLUVR5qMys3grqvm89fPn8UZk0co5EUkYSjcu5OSAqde5Z2qOf0z8NIf4Benwt//C1qPDkkwa2xelyFf26zhg0Vk8Cnc45GZDxf+AK5f492L9X9vhDvPhu2rOzSLFfI3/q2Onz2zWUfyIjKo4gp3Mys0s4fMrNbMdprZ5d20PdXMVplZ2Mz2m9kX+q/cITZqBlz1CHz8j9BUA7+/CB64Bg51vAdrdMjPKAzws2e2cNYPn1PIi8igiffI/VdAE1AMXAHcbmYzOzcys5HAE8CdwAhgKnDsuLrDmRmc/EH47N9hyTfhrcfhl6d5vWtaOo49M2tsHv9yagaP/ctZnDllhEJeRAZNj+FuZiFgKXCTcy7snHse+AtwZYzmXwKedM7d65xrdM7VOOfe6N+SE0RaJpzzVS/kp/yD1y/+9jNh67PHNJ05Jo87r5yvkBeRQWM93RDazE4B1jjnsqLm3Qic45y7uFPb54BXgdPwjtrXAZ91zu2K8brXAdcBFBcXly5bFnts9Z6Ew2Gys7N7tW5/Kqx4ialb7yKr/l0OjlzA1qmfojGjKGZ9Ow+38pe3m3lxfyuZqXD66FQWjkllan4KZjbotSfKNuyK6usb1dc3iVzfkiVLXnTOzY+50DnX7QQsAvZ1mnctsDJG281ANV64ZwA/x9sxdPsepaWlrrdWrFjR63X7XXODc3/7kXPfK/amv93qVj77VJfNX3un2v3rspfdSd963J3wtb+6s299zv3s6c1uV0XtIBadYNswBtXXN6qvbxK5PmCD6yJXU+PYOYSB3E7zcoFYI2fVAw8559YDmNl3gXIzy3PO+X8gltR0OPtGmHMpPPkNeO77nJY5Gsb/Aqa975jmM8fk8Z+XzuOWS1p44rV9LH9pDz97djM/fWYz75lUyNJTx3Lh7NHkZqQNwS8jIsNZPF+obgZSzWxa1Ly5QFmMtpuA6PM8ydnJO388XPpH+ORywODej8J9l0PVzpjNs9NT+WjpOP507Rk8/7V/4CvnT6e8ppGvPfgqp33/GT5/38useOsALa1tg/t7iMiw1eORu3Ou1syWA7eY2aeBecCHgDNjNP8d8KCZ/Rwv/G8Cnk+Ko/ZYpp7L+tN+zjlpr8KqH8Gv3gNnfckbwyYtI+YqY/Mz+eySqdyweAob9xziwRf38OimvTy6cS9FOelcMm8MHzl1HDNGd/5jSkTkqHi7Qt4AZAIHgPuA651zZWa2yMyODJ3onHsO+AbwWKTtVKDLPvHJwKWkwaIvwefWe2PHr/x3+PXp8NYT3a5nZswbn8/3LpnFum+cyx2fLOWU8fn8bs0OLrxtNRfetprfrN7GgZqGQfpNRGQ4ieecO865SuCSGPNXA9md5t0O3N4v1flJ3jj4+O/h7RXw+Ffhvku9sL/gB1A4qdtV01MDXDCrhAtmlVBZ28SjG/ey/KU9fP+xN/j3/32D0yYWcsGsEs6bWcLY/MxB+oVEJJHFFe7Sj6Ysgc+sgXW3w8ofeqdqZi317go1ttS7SKobhaEgV585kavPnMjWAzU88spenizbx3cffZ3vPvo6s8fmcf7MYi6YVcLUUTmD9EuJSKJRuA+F9rHjZ3/Mu7J14zLYeB+UzPFCfvZHIRjq8WWmjsrhy+dN58vnTWfbwTBPlu3nybJ9/Pipzfz4qc1MLgpx/swSzp9ZwtxxeUPSh15EhobCfSjljoEP/ATe+x3YdD+s/y08+i/w1E0w7xMw/1NQdGJcLzW5KJvrF2dz/eIp7DvUwNOv7+OJsn3ctWobt698m9F5GZx3cjHnzyzhPZMKSQ1ozDgRP1O4J4L0HO+Iff6nYNda2HA3rL8b1t0BExd5y076AATi6+9ekpfBlQsmcuWCiVTXNfHsGwd4smwfy9bv5vcv7KQgK41zZ3hBv2jayAH+5URkKCjcE4kZnLDAm87/D3j5D7DhHnjgasgugdKr4dSrIW9s3C+ZnxVkaek4lpaOo66phVWbD/Jk2X6eKtvH/7y4h8y0AFPy4HW2csbkEcwem0eajupFhj2Fe6LKLoJFX4aFX4QtT3tH83+7FVb9GKZf6B3NTzrHu6FInLKCqVwwazQXzBpNc2sba7dV8Mzr+3n21V3c+sRbAISCAeZPLOSMySM4Y3Ihs8fm6RSOyDCkcE90KQGYfoE3VW6HF38HL/83vPlXGDEVSv8Rpp0HI6f12NMmWloghUXTilg0rYgleeXMmr+Av2+vZO22CtZuq+CHT7wJeGF/2qT2sB/BrDG5CnuRYUDhPpwUToL33QKLvwGvP+IdzT/1TW8KjYITzoSJZ8EJC6HopOM6qh+Znc77Z4/m/bNHA1AebmTdNi/sX9hWwQ8e98I+Oz2V0yYWHAn7mQp7kYSkcB+O0jJg7qXeVPE27Hgedq6BHWvg9Ye9NpmFHcO+eNZxh/0H5ozmA3O8sD9Y08i67d5R/QtvV7DirYOAF/Zzx+cxd1w+88bnM29CPqNyYg+tICKDR+E+3I2Y4k2lV4NzUL3TC/mda7zQf/OvXruMPJhwJkxc6IV9yRwIxP/PX5STzkVzxnDRnDEAHKhpYN22StZtr+CV3dXctWobLW3eOHFj8zOZOz7PC/vxBcwam0tWUB81kcGk/3F+YgYFE73plCu8edW7jwb9zjWw+XFvfjAHJpwBJ5zJyION8G4B5E+AjPy4zt2Pysng4rljuHiuF/YNza2U7T3Ey7uqeWV3NRv3VPO/r+4DIJBinFicEwn7POaNL2DqqGwCKbqoSmSgKNz9Ln885F8Gcy/znh/eCzv/72jYb32aWQBlP/CWp+d6Id/V1EX4Z6QFKD2hkNITCo/MKw83snF3NRt3V/Py7moe27SX+/7u3ZQrFAwwZ1w+c8fnM2tsLiePzmXiiBApCnyRfqFwTza5Y7zhDWZ/1HteX8WGZ5Yzf0oRVO86OlXthO2roCnccf3O4V8wEaa/HwpOOOatRmanc+6MYs6dUQxAW5tjR0Utr+yOHN3vrubu57fR3OqdzskKBjipJIeZY/I4eYwX+NNLND6OSG8o3JNdZgHhnClw8uJjlzkH9VUdQz962r4ammrgia97fe5PuRJmXOTdPDyGlBRjclE2k4uy+cip4wBobGll64EwZXsP8/rew7z+7mEefvkd/rjWu7FJikFJyDht38ucPDr3SOiPyE4fqC0i4gsKd+maGWQVetOYeccud84L+U33e33vl38a0vO8vwpO+SSMOaXH8/fpqQFmjslj5pi8qJd17Kmqp2zvIV7fe5hVr25n/fZKHnll75E2JbkZnDwmlxmjczixOIcpRdlMLgrpi1uRCP1PkN4z807HnPNVWHQj7HzeC/lX7vX64I+a6X2xO+dSCMU/ho2ZMb4wi/GFWVwwazSnBt9l8eLFVNU28fq7R4/wX997mL9tPkhr29G7OY7Nz2TKqGymFIWYOiqbKUXZTB2VzYhQUKNiSlJRuEv/SEmBSWd70/t/BK896AX9k9+Ap2/2rrA95UqYcu5xdcGMVhAKsnDqSBZOPbqjaGxpZUd5HW8fDLP1QJi3D3rT+u2V1De3HmmXl5kWCfuOoT+uIEu9dsSXFO7S/zLyYP4/edOBN7yQ37gM3njUGwBt3idg3idh5NQ+v1V6aoDpJTnHfPHa1uZ493CDF/gHwmw96P187s0D/HnDniPtgqkpjC/IZEJhFhMify2Mj3qcna7/IjI86ZMrA2vUDDj/3+Dcm2HLU17Qr/k5PP9TmLAA5l3u3YGqcHKXX8T2RkqKMTY/k7H5mZxzYlGHZdV1Td4R/oFa3j4YZldlHbsq69iwo4qaxpYObUeEgkfCPnoHMGFEFiW5GTrql4SlcJfBkRr0etLMuAhq9nlH8i//N/zl85EGBnnjI1fcTo2apoBr7falj1d+VvCYPvngfZF7qL75SNjvqqxjd+TnK7ureezVdzuc308LeDuQEA08Xr6JsQWZjCvwdihjCzIpyc3QuDsyZBTuMvhySuCsL3q3GtxfBgff9MbIqdjqTZvuh8bDR5qfbalQFgn9kVM7hn+o6LhGw+yOmZGfFSQ/K8iccfnHLG9pbePdQw0dwn9XZR1v7Gzg2TcPUB5u7NA+kGKU5GYwNj8S+lHBPzY/kzH5mWSkBfqldpHOFO4ydMygZJY3RXMOasuPhP2el59jQqjJe771aWhtOto2mOOd4w+GIJgFwWxIy4o8j5rSIss6t0vPgaLpcZ0SSg2kHDknvzBq/sqVK1m8eDENza3sra7nnep69lTV806V9/idqnrWba/k3VfqiTrwB7wLvUry0hmVk0FxbjpFORmMykn3plxv3sjsdN1ARY6bwl0Sj5l3s5LsIjhhAdsOj2fC4sXesrZWOLQ7EvxvQ+U2aKyBplpvaq6D8L7I87rIz3D3p3ZS0mDsqd5YOxMWwPjTvb79xykjLXDkIq1Ymlvb2Heo4Ujgt//cX9PAvkMNbNpziIraRlynHYAZFGYFKcpJpzg3Ev650TsEbwdQlJOufv5yhD4JMrykBI4Ojjb1vfGt45x3tB+9A2gKe+FfXwnvvAg7X4AXfg1rbvPWKZrh3e5wQmTKH9/n0tOijvy70tLaRnm4iQM1DRw43MiBmkb2H27gQE0jB2u8n2/tq+FguLHD+f92oWCAkTnpFGUfDfxweRN7M3dFdgLBIzsDnRLyN4W7+J8ZpKZ7U6wj8pM/5P1srveCftcLXthvegA2/NZbljsuEvZneEMnH+fNUOKVGkihJC+Dkrzux8RvbXNU1no7gfJwEwdrGjlY00h5+OjPtw+GWbu9guq6Zh7a+uoxr5GTkUpRTjojQkEKO0zpFIbSKAx5ywpCQUaEgtoZDDMKd5F2aZnezU0mnuU9b2uF/a/BrrXeSJrbV8GrD3jLMvK9oB93GmPeOQDrtwIW+XLXwFKiHnf+GbUsJQAls70vh4/ji+FAilGU4x2Z9+SZ51Yws/QMymuaOBhuiIT/0R1CZW0TO8rreHFnNVV1TTH/IgBvYLcOO4Es72dBKEh+Vhr5mUEKstLIy0ojP8t7nJkW0JXBQ0ThLtKVlACMnutNp/+zd3qnavvRsN+1FjY/wYkAW/r4XqFRR3csExcd9z1xu5OaYozOy2R0XiaQ123btjZHTUMLFbVe6LdPFZGfVZHHFeEmtuwPU1nb1OFK4M6CgRQv+COBn5/pPS7ICpIX+bl7XwuBLQfJzUgjNzON3IxUcjLSCKbqS+S+ULiLxMvMu9iqcLJ38RVAwyHWrFrBwgULAOftAHDg2qIex/jZ/rilwTsVtON5bypb7r1uaJR316wjYX9iv4V9d1JSjLzI0ffkop7bg3ejlkP1zVTVNVFd1xyZmqiOzDsUmVdV18Suyjo27mmiqq6Zppa2I6/x61f+fszrZqYFyM1MPSb0O85LIycjNWrynmenpxIKpib1/QEU7iJ9kZFHczAfcop7/xols6H0Gi/wK7cdDfodz0PZQ16bUJF3e8T2sC+aPihhH4+MtAAZaQGKc4/v3rkNza1U1TXx7KoXmD57Hofrmznc0Mzh+paOjxu8x+XhJraV10aWtXR5+qidmXeP35z0qNCP2gF4873n2emRZZGfR5+n4Tp3XxomFO4iicLs2HviVm3vGPbtN0DPGhm5H+5ZXs+h0EhvBxAa2a/DOAykjLQAo/MyGZeTwmkTj6/rqXOOuqZWDjc0U9PQEpm8x+FG73G4oYXDkWXhRm9ZZW0TOyvqjrRtjPrroSspBjmrnvJ2FFHB3/48K5hKKBggM5hKKD1AZlqAUHoqmcEAWVGPQ8HIvGBgUK5bULiLJKro00CnXhUJ+x2dwv6RY9cL5kBoRCTsizjxcDO0rvJ2CO07gMgyskb0epTOoWRmhNJTCaWnMrr7rxG61djSSm1jK+GGFmoavR1CuLF9B+H9LHvrbUaUjD2ykwg3tlBV651iqmlooa6xhbrm1mOuT+hOMJBCVroX/lcumMj1i6f0/pfowvD7VxVJVmZQOMmbTr3SC/vD78Dhd6GuHGoPRqbyyHQQqnczomoP7F8BbS2xXzcj3wv5DlNhjHmR+Rn5A9INdCikpwZIT/V6AXVlpdvN4sUzu30d5xwNzW3UNbVQ19QamY59XNvYQn1TK3XNrd5OoamV8YUD85eWwl1kuDKDvHHe1I0XVq5k8TnnQEP10dCP3hHUVUJdhTcdfgf2vertLFoaunjfFMgsPBr2mYWQWQBZBd7PI1Nhx+fBUMJ8T9DfzIzMYIDMYIARQ11MhMJdJBmYHQ3ZkdPiW6ep7mjo11V03AlET9U74d1XvPvtNtd1/XqBYKfw93YAU8rDkLIBMvNjLC/wbsru053CQIor3M2sELgbOA8oB/6fc+5P3bQPAhuBHOdc94cVIpKYglnedDxDLzQ3eCF/ZKrs+Lwu6nn1Ltj7CmNqK2DPw12/pgW8weFiBX9mvjf4WzDkfddwZLC47E6Dx2V7w04nkXiP3H8FNAHFwDzgMTPb6Jwr66L9V4CDQE4Xy0XEj9IyIG005I6Oe5XVK1eyeOEZ3mmj+upOO4cYU+1BKN/stW84FH9tKWmQnh07+NvnpWcf3UlE2o4o3w47Uo/uQNIjbdNCCf3dQ4/hbmYhYCkwyzkXBp43s78AVwJfj9F+EvBJ4EvAf/VvuSLiS2kZkFbijfV/PNpajw4I11QLTVEjhDaFu3gc9bwxDHW7j67XGIaW+g5vMRvgta7qbh9SOjNqaOksb35a5tHHXc7LinxJPrk3W61b1lMHfTM7BVjjnMuKmncjcI5z7uIY7f+KdwqnCvjvrk7LmNl1wHUAxcXFpcuWLevVLxAOh8nOjj3EaiJI9Pog8WtUfX2j+o6PtbWS0tZAaks9gdZ6GsOV5ASNQKv3vH1+oLUh8rORQGsDKW0NkceNMR+nuNi9lXaN/wjbplzdq1qXLFnyonNufsyFzrluJ2ARsK/TvGuBlTHafhh4PPJ4MbCnp9d3zlFaWup6a8WKFb1edzAken3OJX6Nqq9vVF/f9Ft9LU3O1Vc7d2ivc+VbnXt3k3M71zpXsa3XLwlscF3kajzn3MNAbqd5uUBN9IzI6ZtbgffHtcsREUkmgTQI5HlfDg+CeMJ9M5BqZtOcc+1j380FOn+ZOg2YCKyODPEZBPLMbB9whnNuR79ULCIiPeox3J1ztWa2HLjFzD6N11vmQ8CZnZq+BkT3mToT+CVwKl7PGRERGSTx9uO5AcgEDgD3Adc758rMbJGZhQGccy3OuX3tE1AJtEWed3MDSxER6W9x9XN3zlUCl8SYvxqI+TW3c24loAuYRESGQOL2wBcRkV5TuIuI+JDCXSEZ7ioAAAm9SURBVETEhxTuIiI+pHAXEfEhhbuIiA8p3EVEfEjhLiLiQwp3EREfUriLiPiQwl1ExIcU7iIiPqRwFxHxIYW7iIgPKdxFRHxI4S4i4kMKdxERH1K4i4j4kMJdRMSHFO4iIj6kcBcR8SGFu4iIDyncRUR8SOEuIuJDCncRER9SuIuI+JDCXUTEhxTuIiI+pHAXEfEhhbuIiA8p3EVEfEjhLiLiQwp3EREfiivczazQzB4ys1oz22lml3fR7itm9pqZ1ZjZdjP7Sv+WKyIi8UiNs92vgCagGJgHPGZmG51zZZ3aGXAVsAmYAjxlZrudc8v6q2AREelZj0fuZhYClgI3OefCzrnngb8AV3Zu65y71Tn3knOuxTn3FvAIsLC/ixYRke6Zc677BmanAGucc1lR824EznHOXdzNega8BNzpnLsjxvLrgOsAiouLS5ct693BfTgcJjs7u1frDoZErw8Sv0bV1zeqr28Sub4lS5a86JybH3Ohc67bCVgE7Os071pgZQ/rfRfYCKT39B6lpaWut1asWNHrdQdDotfnXOLXqPr6RvX1TSLXB2xwXeRqPOfcw0Bup3m5QE1XK5jZ5/DOvS9yzjXG8R4iItKP4uktsxlINbNpUfPmAp2/TAXAzP4J+DpwrnNuT99LFBGR49VjuDvnaoHlwC1mFjKzhcCHgD92bmtmVwD/DrzPObetv4sVEZH4xHsR0w1AJnAAuA+43jlXZmaLzCwc1e77wAhgvZmFI9MxX6aKiMjAiqufu3OuErgkxvzVQHbU80n9V5qIiPSWhh8QEfEhhbuIiA8p3EVEfEjhLiLiQwp3EREfUriLiPiQwl1ExIcU7iIiPqRwFxHxIYW7iIgPKdxFRHxI4S4i4kMKdxERH1K4i4j4kMJdRMSHFO4iIj6kcBcR8SGFu4iIDyncRUR8SOEuIuJDCncRER9SuIuI+JDCXUTEhxTuIiI+pHAXEfEhhbuIiA8p3EVEfEjhLiLiQwp3EREfUriLiPiQwl1ExIcU7iIiPqRwFxHxIYW7iIgPxRXuZlZoZg+ZWa2Z7TSzy7toZ2b2QzOriEw/NDPr35JFRKQnqXG2+xXQBBQD84DHzGyjc66sU7vrgEuAuYADnga2A3f0T7kiIhKPHo/czSwELAVucs6FnXPPA38BrozR/GrgJ865Pc65d4CfANf0Y70iIhKHeI7cTwRanHObo+ZtBM6J0XZmZFl0u5mxXtTMrsM70gcIm9lbcdQSy0igvJfrDoZErw8Sv0bV1zeqr28Sub4TuloQT7hnA4c7zTsE5HTR9lCndtlmZs45F93QOXcXcFcc798tM9vgnJvf19cZKIleHyR+jaqvb1Rf3yR6fV2J5wvVMJDbaV4uUBNH21wg3DnYRURkYMUT7puBVDObFjVvLtD5y1Qi8+bG0U5ERAZQj+HunKsFlgO3mFnIzBYCHwL+GKP5H4AvmdlYMxsDfBm4px/rjaXPp3YGWKLXB4lfo+rrG9XXN4leX0wWzxkTMysEfgu8D6gAvu6c+5OZLQIed85lR9oZ8EPg05FVfwN8TadlREQGV1zhLiIiw4uGHxAR8SGFu4iIDw2LcE/ksW3MLN3M7o7UVWNmr5jZhV20vcbMWs0sHDUtHsj6Iu+70swaot4z5gVjQ7T9wp2mVjP7RRdtB2X7mdnnzGyDmTWa2T2dlp1rZm+aWZ2ZrTCzLi8iMbOJkTZ1kXXeO5D1mdkZZva0mVWa2UEze8DMRnfzOnF9Lvqxvolm5jr9+93UzesM9va7olNtdZF6S7t4nQHZfv1lWIQ7Hce2uQK43cxiXfkaPbbNHOBi4J8HuLZUYDfeFbt5wLeAP5vZxC7av+Ccy46aVg5wfe0+F/We07toM+jbL3pbACVAPfBAN6sMxvbbC3wfrxPBEWY2Eq/n2E1AIbABuL+b17kPeBkYAXwT+B8zKxqo+oACvJ4dE/GuXKwBftfDa8Xzueiv+trlR73n97p5nUHdfs65ezt9Hm8AtgEvdfNaA7H9+kXCh7sl+Ng2zrla59x3nHM7nHNtzrm/4g2WFnNvn+CGemygpcABYPUgvucxnHPLnXMP4/UMi/YRoMw594BzrgH4DjDXzE7q/BpmdiJwKnCzc67eOfcg8Cre7zgg9TnnHo/Udtg5Vwf8EljY1/frr/qOx1BsvxiuBv4wXHv7JXy40/XYNrGO3OMe22agmFkxXs1dXbx1ipmVm9lmM7vJzOIdmbOv/iPyvmu6OZUx1Nsvnv9MQ7X9oNP2iVwD8jZdfxa3Oeeir+Qe7O15Nj1fRBjP56K/7TSzPWb2u8hfQ7EM6faLnG47G+/ane4MxfaLy3AI934Z22aAauvAzNKAe4HfO+fejNFkFTALGIV3BPIJ4CuDUNrXgMnAWLw/2x81sykx2g3Z9ov8ZzoH+H03zYZq+7XrvH0g/s9id237nZnNAb5N99sn3s9FfykHTsM7ZVSKty3u7aLtkG4/4CpgtXNuezdtBnv7HZfhEO7DYmwbM0vBu2q3CfhcrDbOuW3Oue2R0zevArcAHx3o2pxz65xzNc65Rufc74E1wPtjNB3KsYGuBJ7v7j/TUG2/KH35LHbXtl+Z2VTgceALzrkuT3Edx+eiX0ROq25wzrU45/bj/T85z8xiBfaQbb+Iq+j+QGPQt9/xGg7hnvBj20SObO/G+8J3qXOuOc5VHTAUd6rq6n2HcmygHv8zxTDY26/D9ol8HzSFrj+LkzsF14Bvz8hfQM8A33POxRoipDuDvT3bDxpi5dCQbD8A84ZYGQP8z3GuOlT/n2NK+HAfBmPbANwOzAAuds7Vd9XIzC6MnJMn8iXcTcAjA1mYmeWb2flmlmFmqWZ2Bd65xCdiNB+S7WdmZ+L9adtdL5lB236R7ZQBBIBA+7YDHgJmmdnSyPJvA5tinYKLfEf0CnBzZP0P4/VAenCg6jOzscBzwC+dc93e/ew4Pxf9Vd/pZjbdzFLMbATwc2Clc67z6Zch2X5RTa4GHux0vr/zawzY9us3zrmEn/C6nT0M1AK7gMsj8xfhnTZob2fArUBlZLqVyBALA1jbCXh77Aa8PyXbpyuACZHHEyJtfwzsj/we2/BOK6QNcH1FwHq8P2ergbXA+xJl+0Xe907gjzHmD8n2w+sF4zpN34ksey/wJl6XzZXAxKj17gDuiHo+MdKmHngLeO9A1gfcHHkc/TmM/vf9Bt5YUN1+Lgawvk/g9SSrBd7FO5goSZTtF1mWEdke58ZYb1C2X39NGltGRMSHEv60jIiIHD+Fu4iIDyncRUR8SOEuIuJDCncRER9SuIuI+JDCXUTEhxTuIiI+9P8B8bnJNyD4iawAAAAASUVORK5CYII=\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "f1BNAW8pCxBw", + "outputId": "f5664fdc-29db-4e35-c653-5a742145ad0e", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "y_pred" + ], + "execution_count": 52, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([[0.38856643],\n", + " [1.6792021 ],\n", + " [3.1022797 ]], dtype=float32)" + ] + }, + "metadata": {}, + "execution_count": 52 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "t3nE_p7ICxBw" + }, + "source": [ + "# 함수형 API" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "C665KVG4CxBw" + }, + "source": [ + "모든 신경망 모델이 단순하게 순서대로 나열되지는 않습니다. 어떤 신경망은 매우 복잡한 구조를 가집니다. 여러 개의 입력이 있거나 여러 개의 출력이 있습니다. 예를 들어 와이드 & 딥 신경망([논문](https://ai.google/research/pubs/pub45413) 참조)은 입력의 전체 또는 일부를 출력층에 바로 연결합니다." + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "_uuXKMYhCxBw" + }, + "source": [ + "np.random.seed(42)\n", + "tf.random.set_seed(42)" + ], + "execution_count": 53, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "Y39qvu7pCxBw" + }, + "source": [ + "input_ = keras.layers.Input(shape=X_train.shape[1:])\n", + "hidden1 = keras.layers.Dense(30, activation=\"relu\")(input_)\n", + "hidden2 = keras.layers.Dense(30, activation=\"relu\")(hidden1)\n", + "concat = keras.layers.concatenate([input_, hidden2])\n", + "output = keras.layers.Dense(1)(concat)\n", + "model = keras.models.Model(inputs=[input_], outputs=[output])" + ], + "execution_count": 54, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "66-EfTRUCxBw", + "outputId": "7518d7f7-4b4d-4851-fc16-a8de5d736e5c", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "model.summary()" + ], + "execution_count": 55, + "outputs": [ + { + "output_type": "stream", + "text": [ + "Model: \"model\"\n", + "__________________________________________________________________________________________________\n", + "Layer (type) Output Shape Param # Connected to \n", + "==================================================================================================\n", + "input_1 (InputLayer) [(None, 8)] 0 \n", + "__________________________________________________________________________________________________\n", + "dense_5 (Dense) (None, 30) 270 input_1[0][0] \n", + "__________________________________________________________________________________________________\n", + "dense_6 (Dense) (None, 30) 930 dense_5[0][0] \n", + "__________________________________________________________________________________________________\n", + "concatenate (Concatenate) (None, 38) 0 input_1[0][0] \n", + " dense_6[0][0] \n", + "__________________________________________________________________________________________________\n", + "dense_7 (Dense) (None, 1) 39 concatenate[0][0] \n", + "==================================================================================================\n", + "Total params: 1,239\n", + "Trainable params: 1,239\n", + "Non-trainable params: 0\n", + "__________________________________________________________________________________________________\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "HWoT2ZAmCxBw", + "outputId": "20dbfce7-7430-4825-e746-1e3df9d0622a", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "model.compile(loss=\"mean_squared_error\", optimizer=keras.optimizers.SGD(lr=1e-3))\n", + "history = model.fit(X_train, y_train, epochs=20,\n", + " validation_data=(X_valid, y_valid))\n", + "mse_test = model.evaluate(X_test, y_test)\n", + "y_pred = model.predict(X_new)" + ], + "execution_count": 56, + "outputs": [ + { + "output_type": "stream", + "text": [ + "Epoch 1/20\n" + ], + "name": "stdout" + }, + { + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.7/dist-packages/keras/optimizer_v2/optimizer_v2.py:356: UserWarning: The `lr` argument is deprecated, use `learning_rate` instead.\n", + " \"The `lr` argument is deprecated, use `learning_rate` instead.\")\n" + ], + "name": "stderr" + }, + { + "output_type": "stream", + "text": [ + "363/363 [==============================] - 1s 2ms/step - loss: 1.2611 - val_loss: 3.3940\n", + "Epoch 2/20\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.6580 - val_loss: 0.9360\n", + "Epoch 3/20\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.5878 - val_loss: 0.5649\n", + "Epoch 4/20\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.5582 - val_loss: 0.5712\n", + "Epoch 5/20\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.5347 - val_loss: 0.5045\n", + "Epoch 6/20\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.5158 - val_loss: 0.4831\n", + "Epoch 7/20\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.5002 - val_loss: 0.4639\n", + "Epoch 8/20\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4876 - val_loss: 0.4638\n", + "Epoch 9/20\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4760 - val_loss: 0.4421\n", + "Epoch 10/20\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4659 - val_loss: 0.4313\n", + "Epoch 11/20\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4577 - val_loss: 0.4345\n", + "Epoch 12/20\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4498 - val_loss: 0.4168\n", + "Epoch 13/20\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4428 - val_loss: 0.4230\n", + "Epoch 14/20\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4366 - val_loss: 0.4047\n", + "Epoch 15/20\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4307 - val_loss: 0.4078\n", + "Epoch 16/20\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4257 - val_loss: 0.3938\n", + "Epoch 17/20\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4210 - val_loss: 0.3952\n", + "Epoch 18/20\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4167 - val_loss: 0.3860\n", + "Epoch 19/20\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4121 - val_loss: 0.3827\n", + "Epoch 20/20\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4088 - val_loss: 0.4054\n", + "162/162 [==============================] - 0s 1ms/step - loss: 0.4032\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "8S3cCXorCxBx" + }, + "source": [ + "와이드나 딥 경로에 다른 입력 특성을 전달하면 어떻게 될까요? (특성 0에서 4까지) 5개의 특성을 와이드 경로에 보내고 (특성 2에서 7까지) 6개의 특성을 딥 경로에 전달하겠습니다. 3개의 특성(특성 2, 3, 4)은 양쪽에 모두 전달됩니다." + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "vsixQGFxCxBx" + }, + "source": [ + "np.random.seed(42)\n", + "tf.random.set_seed(42)" + ], + "execution_count": 57, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "JvRe4hQ3CxBx" + }, + "source": [ + "input_A = keras.layers.Input(shape=[5], name=\"wide_input\")\n", + "input_B = keras.layers.Input(shape=[6], name=\"deep_input\")\n", + "hidden1 = keras.layers.Dense(30, activation=\"relu\")(input_B)\n", + "hidden2 = keras.layers.Dense(30, activation=\"relu\")(hidden1)\n", + "concat = keras.layers.concatenate([input_A, hidden2])\n", + "output = keras.layers.Dense(1, name=\"output\")(concat)\n", + "model = keras.models.Model(inputs=[input_A, input_B], outputs=[output])" + ], + "execution_count": 58, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "GSvPYKCsCxBx", + "outputId": "63a77131-2c27-407f-fef2-29f43bdccf13", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "model.compile(loss=\"mse\", optimizer=keras.optimizers.SGD(lr=1e-3))\n", + "\n", + "X_train_A, X_train_B = X_train[:, :5], X_train[:, 2:]\n", + "X_valid_A, X_valid_B = X_valid[:, :5], X_valid[:, 2:]\n", + "X_test_A, X_test_B = X_test[:, :5], X_test[:, 2:]\n", + "X_new_A, X_new_B = X_test_A[:3], X_test_B[:3]\n", + "\n", + "history = model.fit((X_train_A, X_train_B), y_train, epochs=20,\n", + " validation_data=((X_valid_A, X_valid_B), y_valid))\n", + "mse_test = model.evaluate((X_test_A, X_test_B), y_test)\n", + "y_pred = model.predict((X_new_A, X_new_B))" + ], + "execution_count": 59, + "outputs": [ + { + "output_type": "stream", + "text": [ + "Epoch 1/20\n" + ], + "name": "stdout" + }, + { + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.7/dist-packages/keras/optimizer_v2/optimizer_v2.py:356: UserWarning: The `lr` argument is deprecated, use `learning_rate` instead.\n", + " \"The `lr` argument is deprecated, use `learning_rate` instead.\")\n" + ], + "name": "stderr" + }, + { + "output_type": "stream", + "text": [ + "363/363 [==============================] - 1s 2ms/step - loss: 1.8145 - val_loss: 0.8072\n", + "Epoch 2/20\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.6771 - val_loss: 0.6658\n", + "Epoch 3/20\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.5979 - val_loss: 0.5687\n", + "Epoch 4/20\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.5584 - val_loss: 0.5296\n", + "Epoch 5/20\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.5334 - val_loss: 0.4993\n", + "Epoch 6/20\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.5120 - val_loss: 0.4811\n", + "Epoch 7/20\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4970 - val_loss: 0.4696\n", + "Epoch 8/20\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4843 - val_loss: 0.4496\n", + "Epoch 9/20\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4730 - val_loss: 0.4404\n", + "Epoch 10/20\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4644 - val_loss: 0.4315\n", + "Epoch 11/20\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4570 - val_loss: 0.4268\n", + "Epoch 12/20\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4510 - val_loss: 0.4166\n", + "Epoch 13/20\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4462 - val_loss: 0.4125\n", + "Epoch 14/20\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4421 - val_loss: 0.4074\n", + "Epoch 15/20\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4385 - val_loss: 0.4044\n", + "Epoch 16/20\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4356 - val_loss: 0.4007\n", + "Epoch 17/20\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4322 - val_loss: 0.4013\n", + "Epoch 18/20\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4305 - val_loss: 0.3987\n", + "Epoch 19/20\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4274 - val_loss: 0.3934\n", + "Epoch 20/20\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4261 - val_loss: 0.4204\n", + "162/162 [==============================] - 0s 1ms/step - loss: 0.4219\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "hMVTZCHECxBx" + }, + "source": [ + "규제를 위한 보조 출력 추가하기:" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "1XTaLb6mCxBx" + }, + "source": [ + "np.random.seed(42)\n", + "tf.random.set_seed(42)" + ], + "execution_count": 60, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "sCJN4QiTCxBx" + }, + "source": [ + "input_A = keras.layers.Input(shape=[5], name=\"wide_input\")\n", + "input_B = keras.layers.Input(shape=[6], name=\"deep_input\")\n", + "hidden1 = keras.layers.Dense(30, activation=\"relu\")(input_B)\n", + "hidden2 = keras.layers.Dense(30, activation=\"relu\")(hidden1)\n", + "concat = keras.layers.concatenate([input_A, hidden2])\n", + "output = keras.layers.Dense(1, name=\"main_output\")(concat)\n", + "aux_output = keras.layers.Dense(1, name=\"aux_output\")(hidden2)\n", + "model = keras.models.Model(inputs=[input_A, input_B],\n", + " outputs=[output, aux_output])" + ], + "execution_count": 61, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "uFdnUjtBCxBx", + "outputId": "8aa704b5-6a4c-41df-9a6e-d5cd9e9bcd07", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "model.compile(loss=[\"mse\", \"mse\"], loss_weights=[0.9, 0.1], optimizer=keras.optimizers.SGD(lr=1e-3))" + ], + "execution_count": 62, + "outputs": [ + { + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.7/dist-packages/keras/optimizer_v2/optimizer_v2.py:356: UserWarning: The `lr` argument is deprecated, use `learning_rate` instead.\n", + " \"The `lr` argument is deprecated, use `learning_rate` instead.\")\n" + ], + "name": "stderr" + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "UhJiFmwaCxBx", + "outputId": "5c2ef777-505b-421a-fef7-91572216fc9f", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "history = model.fit([X_train_A, X_train_B], [y_train, y_train], epochs=20,\n", + " validation_data=([X_valid_A, X_valid_B], [y_valid, y_valid]))" + ], + "execution_count": 63, + "outputs": [ + { + "output_type": "stream", + "text": [ + "Epoch 1/20\n", + "363/363 [==============================] - 2s 4ms/step - loss: 2.1365 - main_output_loss: 1.9196 - aux_output_loss: 4.0890 - val_loss: 1.6233 - val_main_output_loss: 0.8468 - val_aux_output_loss: 8.6117\n", + "Epoch 2/20\n", + "363/363 [==============================] - 1s 3ms/step - loss: 0.8905 - main_output_loss: 0.6969 - aux_output_loss: 2.6326 - val_loss: 1.5163 - val_main_output_loss: 0.6836 - val_aux_output_loss: 9.0109\n", + "Epoch 3/20\n", + "363/363 [==============================] - 1s 3ms/step - loss: 0.7429 - main_output_loss: 0.6088 - aux_output_loss: 1.9499 - val_loss: 1.4639 - val_main_output_loss: 0.6229 - val_aux_output_loss: 9.0326\n", + "Epoch 4/20\n", + "363/363 [==============================] - 1s 3ms/step - loss: 0.6771 - main_output_loss: 0.5691 - aux_output_loss: 1.6485 - val_loss: 1.3388 - val_main_output_loss: 0.5481 - val_aux_output_loss: 8.4552\n", + "Epoch 5/20\n", + "363/363 [==============================] - 1s 3ms/step - loss: 0.6381 - main_output_loss: 0.5434 - aux_output_loss: 1.4911 - val_loss: 1.2177 - val_main_output_loss: 0.5194 - val_aux_output_loss: 7.5030\n", + "Epoch 6/20\n", + "363/363 [==============================] - 1s 3ms/step - loss: 0.6079 - main_output_loss: 0.5207 - aux_output_loss: 1.3923 - val_loss: 1.0935 - val_main_output_loss: 0.5106 - val_aux_output_loss: 6.3396\n", + "Epoch 7/20\n", + "363/363 [==============================] - 1s 3ms/step - loss: 0.5853 - main_output_loss: 0.5040 - aux_output_loss: 1.3175 - val_loss: 0.9918 - val_main_output_loss: 0.5115 - val_aux_output_loss: 5.3151\n", + "Epoch 8/20\n", + "363/363 [==============================] - 1s 3ms/step - loss: 0.5666 - main_output_loss: 0.4898 - aux_output_loss: 1.2572 - val_loss: 0.8733 - val_main_output_loss: 0.4733 - val_aux_output_loss: 4.4740\n", + "Epoch 9/20\n", + "363/363 [==============================] - 1s 3ms/step - loss: 0.5504 - main_output_loss: 0.4771 - aux_output_loss: 1.2101 - val_loss: 0.7832 - val_main_output_loss: 0.4555 - val_aux_output_loss: 3.7323\n", + "Epoch 10/20\n", + "363/363 [==============================] - 1s 3ms/step - loss: 0.5373 - main_output_loss: 0.4671 - aux_output_loss: 1.1695 - val_loss: 0.7170 - val_main_output_loss: 0.4604 - val_aux_output_loss: 3.0262\n", + "Epoch 11/20\n", + "363/363 [==============================] - 1s 3ms/step - loss: 0.5266 - main_output_loss: 0.4591 - aux_output_loss: 1.1344 - val_loss: 0.6510 - val_main_output_loss: 0.4293 - val_aux_output_loss: 2.6468\n", + "Epoch 12/20\n", + "363/363 [==============================] - 1s 3ms/step - loss: 0.5173 - main_output_loss: 0.4520 - aux_output_loss: 1.1048 - val_loss: 0.6051 - val_main_output_loss: 0.4310 - val_aux_output_loss: 2.1722\n", + "Epoch 13/20\n", + "363/363 [==============================] - 1s 3ms/step - loss: 0.5095 - main_output_loss: 0.4465 - aux_output_loss: 1.0765 - val_loss: 0.5644 - val_main_output_loss: 0.4161 - val_aux_output_loss: 1.8992\n", + "Epoch 14/20\n", + "363/363 [==============================] - 1s 3ms/step - loss: 0.5027 - main_output_loss: 0.4417 - aux_output_loss: 1.0511 - val_loss: 0.5354 - val_main_output_loss: 0.4119 - val_aux_output_loss: 1.6466\n", + "Epoch 15/20\n", + "363/363 [==============================] - 1s 3ms/step - loss: 0.4967 - main_output_loss: 0.4376 - aux_output_loss: 1.0280 - val_loss: 0.5124 - val_main_output_loss: 0.4047 - val_aux_output_loss: 1.4812\n", + "Epoch 16/20\n", + "363/363 [==============================] - 1s 3ms/step - loss: 0.4916 - main_output_loss: 0.4343 - aux_output_loss: 1.0070 - val_loss: 0.4934 - val_main_output_loss: 0.4034 - val_aux_output_loss: 1.3035\n", + "Epoch 17/20\n", + "363/363 [==============================] - 1s 3ms/step - loss: 0.4867 - main_output_loss: 0.4311 - aux_output_loss: 0.9872 - val_loss: 0.4801 - val_main_output_loss: 0.3984 - val_aux_output_loss: 1.2150\n", + "Epoch 18/20\n", + "363/363 [==============================] - 1s 4ms/step - loss: 0.4829 - main_output_loss: 0.4289 - aux_output_loss: 0.9686 - val_loss: 0.4694 - val_main_output_loss: 0.3962 - val_aux_output_loss: 1.1279\n", + "Epoch 19/20\n", + "363/363 [==============================] - 1s 3ms/step - loss: 0.4785 - main_output_loss: 0.4260 - aux_output_loss: 0.9510 - val_loss: 0.4580 - val_main_output_loss: 0.3936 - val_aux_output_loss: 1.0372\n", + "Epoch 20/20\n", + "363/363 [==============================] - 1s 3ms/step - loss: 0.4756 - main_output_loss: 0.4246 - aux_output_loss: 0.9344 - val_loss: 0.4655 - val_main_output_loss: 0.4048 - val_aux_output_loss: 1.0118\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "q9KRydHECxBx", + "outputId": "50390697-8d4e-4b18-eeaa-ff66eca9132a", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "total_loss, main_loss, aux_loss = model.evaluate(\n", + " [X_test_A, X_test_B], [y_test, y_test])\n", + "y_pred_main, y_pred_aux = model.predict([X_new_A, X_new_B])" + ], + "execution_count": 64, + "outputs": [ + { + "output_type": "stream", + "text": [ + "162/162 [==============================] - 0s 2ms/step - loss: 0.4668 - main_output_loss: 0.4178 - aux_output_loss: 0.9082\n", + "WARNING:tensorflow:5 out of the last 6 calls to .predict_function at 0x7fe061a46560> triggered tf.function retracing. Tracing is expensive and the excessive number of tracings could be due to (1) creating @tf.function repeatedly in a loop, (2) passing tensors with different shapes, (3) passing Python objects instead of tensors. For (1), please define your @tf.function outside of the loop. For (2), @tf.function has experimental_relax_shapes=True option that relaxes argument shapes that can avoid unnecessary retracing. For (3), please refer to https://www.tensorflow.org/guide/function#controlling_retracing and https://www.tensorflow.org/api_docs/python/tf/function for more details.\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "pJ_IuJtoCxBy" + }, + "source": [ + "# 서브클래싱 API" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "tV_0jFL3CxBy" + }, + "source": [ + "class WideAndDeepModel(keras.models.Model):\n", + " def __init__(self, units=30, activation=\"relu\", **kwargs):\n", + " super().__init__(**kwargs)\n", + " self.hidden1 = keras.layers.Dense(units, activation=activation)\n", + " self.hidden2 = keras.layers.Dense(units, activation=activation)\n", + " self.main_output = keras.layers.Dense(1)\n", + " self.aux_output = keras.layers.Dense(1)\n", + " \n", + " def call(self, inputs):\n", + " input_A, input_B = inputs\n", + " hidden1 = self.hidden1(input_B)\n", + " hidden2 = self.hidden2(hidden1)\n", + " concat = keras.layers.concatenate([input_A, hidden2])\n", + " main_output = self.main_output(concat)\n", + " aux_output = self.aux_output(hidden2)\n", + " return main_output, aux_output\n", + "\n", + "model = WideAndDeepModel(30, activation=\"relu\")" + ], + "execution_count": 65, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "66fc27vQCxBy", + "outputId": "b3346da7-259e-4dec-a6f3-4091d7e359cf", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "model.compile(loss=\"mse\", loss_weights=[0.9, 0.1], optimizer=keras.optimizers.SGD(lr=1e-3))\n", + "history = model.fit((X_train_A, X_train_B), (y_train, y_train), epochs=10,\n", + " validation_data=((X_valid_A, X_valid_B), (y_valid, y_valid)))\n", + "total_loss, main_loss, aux_loss = model.evaluate((X_test_A, X_test_B), (y_test, y_test))\n", + "y_pred_main, y_pred_aux = model.predict((X_new_A, X_new_B))" + ], + "execution_count": 66, + "outputs": [ + { + "output_type": "stream", + "text": [ + "Epoch 1/10\n" + ], + "name": "stdout" + }, + { + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.7/dist-packages/keras/optimizer_v2/optimizer_v2.py:356: UserWarning: The `lr` argument is deprecated, use `learning_rate` instead.\n", + " \"The `lr` argument is deprecated, use `learning_rate` instead.\")\n" + ], + "name": "stderr" + }, + { + "output_type": "stream", + "text": [ + "363/363 [==============================] - 2s 3ms/step - loss: 2.3298 - output_1_loss: 2.2186 - output_2_loss: 3.3304 - val_loss: 2.1435 - val_output_1_loss: 1.1581 - val_output_2_loss: 11.0117\n", + "Epoch 2/10\n", + "363/363 [==============================] - 1s 3ms/step - loss: 0.9714 - output_1_loss: 0.8543 - output_2_loss: 2.0252 - val_loss: 1.7567 - val_output_1_loss: 0.8205 - val_output_2_loss: 10.1825\n", + "Epoch 3/10\n", + "363/363 [==============================] - 1s 3ms/step - loss: 0.8268 - output_1_loss: 0.7289 - output_2_loss: 1.7082 - val_loss: 1.5664 - val_output_1_loss: 0.7913 - val_output_2_loss: 8.5419\n", + "Epoch 4/10\n", + "363/363 [==============================] - 1s 3ms/step - loss: 0.7636 - output_1_loss: 0.6764 - output_2_loss: 1.5477 - val_loss: 1.3088 - val_output_1_loss: 0.6549 - val_output_2_loss: 7.1933\n", + "Epoch 5/10\n", + "363/363 [==============================] - 1s 3ms/step - loss: 0.7211 - output_1_loss: 0.6402 - output_2_loss: 1.4489 - val_loss: 1.1357 - val_output_1_loss: 0.5964 - val_output_2_loss: 5.9898\n", + "Epoch 6/10\n", + "363/363 [==============================] - 1s 3ms/step - loss: 0.6895 - output_1_loss: 0.6124 - output_2_loss: 1.3833 - val_loss: 1.0036 - val_output_1_loss: 0.5937 - val_output_2_loss: 4.6933\n", + "Epoch 7/10\n", + "363/363 [==============================] - 1s 3ms/step - loss: 0.6632 - output_1_loss: 0.5894 - output_2_loss: 1.3274 - val_loss: 0.8904 - val_output_1_loss: 0.5591 - val_output_2_loss: 3.8714\n", + "Epoch 8/10\n", + "363/363 [==============================] - 1s 3ms/step - loss: 0.6410 - output_1_loss: 0.5701 - output_2_loss: 1.2796 - val_loss: 0.8009 - val_output_1_loss: 0.5243 - val_output_2_loss: 3.2903\n", + "Epoch 9/10\n", + "363/363 [==============================] - 1s 3ms/step - loss: 0.6204 - output_1_loss: 0.5514 - output_2_loss: 1.2416 - val_loss: 0.7357 - val_output_1_loss: 0.5144 - val_output_2_loss: 2.7275\n", + "Epoch 10/10\n", + "363/363 [==============================] - 1s 3ms/step - loss: 0.6024 - output_1_loss: 0.5355 - output_2_loss: 1.2043 - val_loss: 0.6849 - val_output_1_loss: 0.5014 - val_output_2_loss: 2.3370\n", + "162/162 [==============================] - 0s 2ms/step - loss: 0.5841 - output_1_loss: 0.5188 - output_2_loss: 1.1722\n", + "WARNING:tensorflow:6 out of the last 7 calls to .predict_function at 0x7fe0105d0680> triggered tf.function retracing. Tracing is expensive and the excessive number of tracings could be due to (1) creating @tf.function repeatedly in a loop, (2) passing tensors with different shapes, (3) passing Python objects instead of tensors. For (1), please define your @tf.function outside of the loop. For (2), @tf.function has experimental_relax_shapes=True option that relaxes argument shapes that can avoid unnecessary retracing. For (3), please refer to https://www.tensorflow.org/guide/function#controlling_retracing and https://www.tensorflow.org/api_docs/python/tf/function for more details.\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "WI45FYLwCxBy" + }, + "source": [ + "# 저장과 복원" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "lUWwT9oGCxBy" + }, + "source": [ + "np.random.seed(42)\n", + "tf.random.set_seed(42)" + ], + "execution_count": 67, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "gwfzfViACxBy" + }, + "source": [ + "model = keras.models.Sequential([\n", + " keras.layers.Dense(30, activation=\"relu\", input_shape=[8]),\n", + " keras.layers.Dense(30, activation=\"relu\"),\n", + " keras.layers.Dense(1)\n", + "]) " + ], + "execution_count": 68, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "ffcswBFdCxBy", + "outputId": "b207cea9-d5a5-4950-9c2b-59f0655d26ac", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "model.compile(loss=\"mse\", optimizer=keras.optimizers.SGD(lr=1e-3))\n", + "history = model.fit(X_train, y_train, epochs=10, validation_data=(X_valid, y_valid))\n", + "mse_test = model.evaluate(X_test, y_test)" + ], + "execution_count": 69, + "outputs": [ + { + "output_type": "stream", + "text": [ + "Epoch 1/10\n" + ], + "name": "stdout" + }, + { + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.7/dist-packages/keras/optimizer_v2/optimizer_v2.py:356: UserWarning: The `lr` argument is deprecated, use `learning_rate` instead.\n", + " \"The `lr` argument is deprecated, use `learning_rate` instead.\")\n" + ], + "name": "stderr" + }, + { + "output_type": "stream", + "text": [ + "363/363 [==============================] - 1s 2ms/step - loss: 1.8866 - val_loss: 0.7126\n", + "Epoch 2/10\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.6577 - val_loss: 0.6880\n", + "Epoch 3/10\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.5934 - val_loss: 0.5803\n", + "Epoch 4/10\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.5557 - val_loss: 0.5166\n", + "Epoch 5/10\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.5272 - val_loss: 0.4895\n", + "Epoch 6/10\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.5033 - val_loss: 0.4951\n", + "Epoch 7/10\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4854 - val_loss: 0.4861\n", + "Epoch 8/10\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4709 - val_loss: 0.4554\n", + "Epoch 9/10\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4578 - val_loss: 0.4413\n", + "Epoch 10/10\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4474 - val_loss: 0.4379\n", + "162/162 [==============================] - 0s 1ms/step - loss: 0.4382\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "UkpuUDCGCxBy" + }, + "source": [ + "model.save(\"my_keras_model.h5\")" + ], + "execution_count": 70, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "Vv6rr7DcCxBy" + }, + "source": [ + "model = keras.models.load_model(\"my_keras_model.h5\")" + ], + "execution_count": 71, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "PyRxBilWCxBy", + "outputId": "5324db54-c432-48b3-9fd7-6c074ad4be1d", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "model.predict(X_new)" + ], + "execution_count": 72, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([[0.54002357],\n", + " [1.6505971 ],\n", + " [3.009824 ]], dtype=float32)" + ] + }, + "metadata": {}, + "execution_count": 72 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "gduq1JicCxBy" + }, + "source": [ + "model.save_weights(\"my_keras_weights.ckpt\")" + ], + "execution_count": 73, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "9zuXSL0eCxBz", + "outputId": "4654e906-04d0-4c4c-c82f-a67a409675d2", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "model.load_weights(\"my_keras_weights.ckpt\")" + ], + "execution_count": 74, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "" + ] + }, + "metadata": {}, + "execution_count": 74 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "l3pszc5UCxBz" + }, + "source": [ + "# 훈련 과정에서 콜백 사용하기" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "UZld3OZ0CxBz" + }, + "source": [ + "keras.backend.clear_session()\n", + "np.random.seed(42)\n", + "tf.random.set_seed(42)" + ], + "execution_count": 75, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "Az_7S2OoCxBz" + }, + "source": [ + "model = keras.models.Sequential([\n", + " keras.layers.Dense(30, activation=\"relu\", input_shape=[8]),\n", + " keras.layers.Dense(30, activation=\"relu\"),\n", + " keras.layers.Dense(1)\n", + "]) " + ], + "execution_count": 76, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "duuSWVv8CxBz", + "outputId": "e69e8aca-9cd0-4d1a-cf43-46a422711941", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "model.compile(loss=\"mse\", optimizer=keras.optimizers.SGD(lr=1e-3))\n", + "checkpoint_cb = keras.callbacks.ModelCheckpoint(\"my_keras_model.h5\", save_best_only=True)\n", + "history = model.fit(X_train, y_train, epochs=10,\n", + " validation_data=(X_valid, y_valid),\n", + " callbacks=[checkpoint_cb])\n", + "model = keras.models.load_model(\"my_keras_model.h5\") # 최상의 모델로 롤백\n", + "mse_test = model.evaluate(X_test, y_test)" + ], + "execution_count": 77, + "outputs": [ + { + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.7/dist-packages/keras/optimizer_v2/optimizer_v2.py:356: UserWarning: The `lr` argument is deprecated, use `learning_rate` instead.\n", + " \"The `lr` argument is deprecated, use `learning_rate` instead.\")\n" + ], + "name": "stderr" + }, + { + "output_type": "stream", + "text": [ + "Epoch 1/10\n", + "363/363 [==============================] - 1s 2ms/step - loss: 1.8866 - val_loss: 0.7126\n", + "Epoch 2/10\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.6577 - val_loss: 0.6880\n", + "Epoch 3/10\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.5934 - val_loss: 0.5803\n", + "Epoch 4/10\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.5557 - val_loss: 0.5166\n", + "Epoch 5/10\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.5272 - val_loss: 0.4895\n", + "Epoch 6/10\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.5033 - val_loss: 0.4951\n", + "Epoch 7/10\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4854 - val_loss: 0.4861\n", + "Epoch 8/10\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4709 - val_loss: 0.4554\n", + "Epoch 9/10\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4578 - val_loss: 0.4413\n", + "Epoch 10/10\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4474 - val_loss: 0.4379\n", + "162/162 [==============================] - 0s 1ms/step - loss: 0.4382\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "7SN0dYNeCxBz", + "outputId": "b3d53077-40e0-4fc9-ae61-f837bcc4a652", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "model.compile(loss=\"mse\", optimizer=keras.optimizers.SGD(lr=1e-3))\n", + "early_stopping_cb = keras.callbacks.EarlyStopping(patience=10,\n", + " restore_best_weights=True)\n", + "history = model.fit(X_train, y_train, epochs=100,\n", + " validation_data=(X_valid, y_valid),\n", + " callbacks=[checkpoint_cb, early_stopping_cb])\n", + "mse_test = model.evaluate(X_test, y_test)" + ], + "execution_count": 78, + "outputs": [ + { + "output_type": "stream", + "text": [ + "Epoch 1/100\n" + ], + "name": "stdout" + }, + { + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.7/dist-packages/keras/optimizer_v2/optimizer_v2.py:356: UserWarning: The `lr` argument is deprecated, use `learning_rate` instead.\n", + " \"The `lr` argument is deprecated, use `learning_rate` instead.\")\n" + ], + "name": "stderr" + }, + { + "output_type": "stream", + "text": [ + "363/363 [==============================] - 1s 2ms/step - loss: 0.4393 - val_loss: 0.4110\n", + "Epoch 2/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4315 - val_loss: 0.4266\n", + "Epoch 3/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4259 - val_loss: 0.3996\n", + "Epoch 4/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4201 - val_loss: 0.3939\n", + "Epoch 5/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4154 - val_loss: 0.3889\n", + "Epoch 6/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4111 - val_loss: 0.3866\n", + "Epoch 7/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4074 - val_loss: 0.3860\n", + "Epoch 8/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4040 - val_loss: 0.3793\n", + "Epoch 9/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4008 - val_loss: 0.3746\n", + "Epoch 10/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3976 - val_loss: 0.3723\n", + "Epoch 11/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3950 - val_loss: 0.3697\n", + "Epoch 12/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3923 - val_loss: 0.3669\n", + "Epoch 13/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3897 - val_loss: 0.3661\n", + "Epoch 14/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3874 - val_loss: 0.3631\n", + "Epoch 15/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3851 - val_loss: 0.3660\n", + "Epoch 16/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3829 - val_loss: 0.3625\n", + "Epoch 17/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3810 - val_loss: 0.3592\n", + "Epoch 18/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3788 - val_loss: 0.3563\n", + "Epoch 19/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3766 - val_loss: 0.3535\n", + "Epoch 20/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3751 - val_loss: 0.3709\n", + "Epoch 21/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3732 - val_loss: 0.3512\n", + "Epoch 22/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3715 - val_loss: 0.3699\n", + "Epoch 23/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3700 - val_loss: 0.3476\n", + "Epoch 24/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3685 - val_loss: 0.3561\n", + "Epoch 25/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3671 - val_loss: 0.3527\n", + "Epoch 26/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3658 - val_loss: 0.3701\n", + "Epoch 27/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3647 - val_loss: 0.3432\n", + "Epoch 28/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3635 - val_loss: 0.3592\n", + "Epoch 29/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3625 - val_loss: 0.3521\n", + "Epoch 30/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3613 - val_loss: 0.3626\n", + "Epoch 31/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3601 - val_loss: 0.3431\n", + "Epoch 32/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3589 - val_loss: 0.3766\n", + "Epoch 33/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3584 - val_loss: 0.3374\n", + "Epoch 34/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3572 - val_loss: 0.3407\n", + "Epoch 35/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3563 - val_loss: 0.3614\n", + "Epoch 36/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3555 - val_loss: 0.3348\n", + "Epoch 37/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3546 - val_loss: 0.3573\n", + "Epoch 38/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3538 - val_loss: 0.3367\n", + "Epoch 39/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3530 - val_loss: 0.3425\n", + "Epoch 40/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3523 - val_loss: 0.3369\n", + "Epoch 41/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3515 - val_loss: 0.3514\n", + "Epoch 42/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3511 - val_loss: 0.3427\n", + "Epoch 43/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3500 - val_loss: 0.3679\n", + "Epoch 44/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3496 - val_loss: 0.3562\n", + "Epoch 45/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3490 - val_loss: 0.3336\n", + "Epoch 46/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3481 - val_loss: 0.3456\n", + "Epoch 47/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3478 - val_loss: 0.3433\n", + "Epoch 48/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3471 - val_loss: 0.3658\n", + "Epoch 49/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3466 - val_loss: 0.3286\n", + "Epoch 50/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3460 - val_loss: 0.3268\n", + "Epoch 51/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3454 - val_loss: 0.3439\n", + "Epoch 52/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3449 - val_loss: 0.3263\n", + "Epoch 53/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3444 - val_loss: 0.3911\n", + "Epoch 54/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3439 - val_loss: 0.3275\n", + "Epoch 55/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3435 - val_loss: 0.3561\n", + "Epoch 56/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3430 - val_loss: 0.3237\n", + "Epoch 57/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3423 - val_loss: 0.3242\n", + "Epoch 58/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3419 - val_loss: 0.3764\n", + "Epoch 59/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3417 - val_loss: 0.3289\n", + "Epoch 60/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3410 - val_loss: 0.3502\n", + "Epoch 61/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3404 - val_loss: 0.3457\n", + "Epoch 62/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3402 - val_loss: 0.3444\n", + "Epoch 63/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3392 - val_loss: 0.3290\n", + "Epoch 64/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3393 - val_loss: 0.3217\n", + "Epoch 65/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3387 - val_loss: 0.3351\n", + "Epoch 66/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3383 - val_loss: 0.3232\n", + "Epoch 67/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3376 - val_loss: 0.3567\n", + "Epoch 68/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3375 - val_loss: 0.3257\n", + "Epoch 69/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3370 - val_loss: 0.3348\n", + "Epoch 70/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3365 - val_loss: 0.3560\n", + "Epoch 71/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3361 - val_loss: 0.3582\n", + "Epoch 72/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3357 - val_loss: 0.3287\n", + "Epoch 73/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3351 - val_loss: 0.3203\n", + "Epoch 74/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3350 - val_loss: 0.3839\n", + "Epoch 75/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3347 - val_loss: 0.3234\n", + "Epoch 76/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3342 - val_loss: 0.3475\n", + "Epoch 77/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3338 - val_loss: 0.3408\n", + "Epoch 78/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3335 - val_loss: 0.3462\n", + "Epoch 79/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3332 - val_loss: 0.3348\n", + "Epoch 80/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3329 - val_loss: 0.3355\n", + "Epoch 81/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3324 - val_loss: 0.3273\n", + "Epoch 82/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3320 - val_loss: 0.3166\n", + "Epoch 83/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3317 - val_loss: 0.3280\n", + "Epoch 84/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3312 - val_loss: 0.3633\n", + "Epoch 85/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3310 - val_loss: 0.3175\n", + "Epoch 86/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3308 - val_loss: 0.3156\n", + "Epoch 87/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3305 - val_loss: 0.3528\n", + "Epoch 88/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3299 - val_loss: 0.3257\n", + "Epoch 89/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3294 - val_loss: 0.3627\n", + "Epoch 90/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3296 - val_loss: 0.3379\n", + "Epoch 91/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3291 - val_loss: 0.3210\n", + "Epoch 92/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3287 - val_loss: 0.3457\n", + "Epoch 93/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3285 - val_loss: 0.3157\n", + "Epoch 94/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3281 - val_loss: 0.3409\n", + "Epoch 95/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3276 - val_loss: 0.3379\n", + "Epoch 96/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3273 - val_loss: 0.3213\n", + "162/162 [==============================] - 0s 1ms/step - loss: 0.3310\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "WLcvLAw-CxBz" + }, + "source": [ + "class PrintValTrainRatioCallback(keras.callbacks.Callback):\n", + " def on_epoch_end(self, epoch, logs):\n", + " print(\"\\nval/train: {:.2f}\".format(logs[\"val_loss\"] / logs[\"loss\"]))" + ], + "execution_count": 79, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "nSTQ4irTCxBz", + "outputId": "f0a6889c-d54e-4e2b-85f3-36d2dc1e9850", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "val_train_ratio_cb = PrintValTrainRatioCallback()\n", + "history = model.fit(X_train, y_train, epochs=1,\n", + " validation_data=(X_valid, y_valid),\n", + " callbacks=[val_train_ratio_cb])" + ], + "execution_count": 80, + "outputs": [ + { + "output_type": "stream", + "text": [ + "363/363 [==============================] - 1s 2ms/step - loss: 0.3302 - val_loss: 0.3557\n", + "\n", + "val/train: 1.08\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "TZoPzKwJCxB0" + }, + "source": [ + "# 텐서보드" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "SuNBQkj9CxB0" + }, + "source": [ + "root_logdir = os.path.join(os.curdir, \"my_logs\")" + ], + "execution_count": 81, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "XZ8EbEkfCxB0", + "outputId": "022e099e-1b2e-4a9c-a52e-c1138ced8b18", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 35 + } + }, + "source": [ + "def get_run_logdir():\n", + " import time\n", + " run_id = time.strftime(\"run_%Y_%m_%d-%H_%M_%S\")\n", + " return os.path.join(root_logdir, run_id)\n", + "\n", + "run_logdir = get_run_logdir()\n", + "run_logdir" + ], + "execution_count": 82, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "string" + }, + "text/plain": [ + "'./my_logs/run_2021_08_22-22_52_19'" + ] + }, + "metadata": {}, + "execution_count": 82 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "2msZkWotCxB0" + }, + "source": [ + "keras.backend.clear_session()\n", + "np.random.seed(42)\n", + "tf.random.set_seed(42)" + ], + "execution_count": 83, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "ZtyRTSKHCxB0", + "outputId": "4cc3c14e-fd1d-44db-c49b-22a36557a5ff", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "model = keras.models.Sequential([\n", + " keras.layers.Dense(30, activation=\"relu\", input_shape=[8]),\n", + " keras.layers.Dense(30, activation=\"relu\"),\n", + " keras.layers.Dense(1)\n", + "]) \n", + "model.compile(loss=\"mse\", optimizer=keras.optimizers.SGD(lr=1e-3))" + ], + "execution_count": 84, + "outputs": [ + { + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.7/dist-packages/keras/optimizer_v2/optimizer_v2.py:356: UserWarning: The `lr` argument is deprecated, use `learning_rate` instead.\n", + " \"The `lr` argument is deprecated, use `learning_rate` instead.\")\n" + ], + "name": "stderr" + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "4mn4X2YjCxB0", + "outputId": "94ee6296-ac7e-45f1-8397-16a194f80be5", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "tensorboard_cb = keras.callbacks.TensorBoard(run_logdir)\n", + "history = model.fit(X_train, y_train, epochs=30,\n", + " validation_data=(X_valid, y_valid),\n", + " callbacks=[checkpoint_cb, tensorboard_cb])" + ], + "execution_count": 85, + "outputs": [ + { + "output_type": "stream", + "text": [ + "Epoch 1/30\n", + "363/363 [==============================] - 1s 3ms/step - loss: 1.8866 - val_loss: 0.7126\n", + "Epoch 2/30\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.6577 - val_loss: 0.6880\n", + "Epoch 3/30\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.5934 - val_loss: 0.5803\n", + "Epoch 4/30\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.5557 - val_loss: 0.5166\n", + "Epoch 5/30\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.5272 - val_loss: 0.4895\n", + "Epoch 6/30\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.5033 - val_loss: 0.4951\n", + "Epoch 7/30\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4854 - val_loss: 0.4861\n", + "Epoch 8/30\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4709 - val_loss: 0.4554\n", + "Epoch 9/30\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4578 - val_loss: 0.4413\n", + "Epoch 10/30\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4474 - val_loss: 0.4379\n", + "Epoch 11/30\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4393 - val_loss: 0.4396\n", + "Epoch 12/30\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4318 - val_loss: 0.4507\n", + "Epoch 13/30\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4261 - val_loss: 0.3997\n", + "Epoch 14/30\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4202 - val_loss: 0.3956\n", + "Epoch 15/30\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4155 - val_loss: 0.3916\n", + "Epoch 16/30\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4112 - val_loss: 0.3937\n", + "Epoch 17/30\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4077 - val_loss: 0.3809\n", + "Epoch 18/30\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4040 - val_loss: 0.3794\n", + "Epoch 19/30\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4005 - val_loss: 0.3850\n", + "Epoch 20/30\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3980 - val_loss: 0.3809\n", + "Epoch 21/30\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3949 - val_loss: 0.3701\n", + "Epoch 22/30\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3924 - val_loss: 0.3781\n", + "Epoch 23/30\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3898 - val_loss: 0.3650\n", + "Epoch 24/30\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3874 - val_loss: 0.3655\n", + "Epoch 25/30\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3851 - val_loss: 0.3611\n", + "Epoch 26/30\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3829 - val_loss: 0.3626\n", + "Epoch 27/30\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3809 - val_loss: 0.3564\n", + "Epoch 28/30\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3788 - val_loss: 0.3579\n", + "Epoch 29/30\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3769 - val_loss: 0.3560\n", + "Epoch 30/30\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3750 - val_loss: 0.3548\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "86-2CrIDCxB0" + }, + "source": [ + "텐서보드 서버를 실행하는 한 가지 방법은 터미널에서 직접 실행하는 것입니다. 터미널을 열고 텐서보드가 설치된 가상 환경을 활성화합니다. 그다음 노트북 디렉토리로 이동하여 다음 명령을 입력하세요:\n", + "\n", + "```bash\n", + "$ tensorboard --logdir=./my_logs --port=6006\n", + "```\n", + "\n", + "그다음 웹 브라우저를 열고 [localhost:6006](http://localhost:6006)에 접속하면 텐서보드를 사용할 수 있습니다. 사용이 끝나면 터미널에서 Ctrl-C를 눌러 텐서보드 서버를 종료하세요.\n", + "\n", + "또는 다음처럼 텐서보드의 주피터 확장을 사용할 수 있습니다(이 명령은 텐서보드가 로컬 컴퓨터에 설치되어 있어야 합니다):" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "2pSRcgElCxB0", + "outputId": "761a77b9-5641-4f9c-d90e-658d06c25f6b", + "colab": { + "resources": { + "https://localhost:6006/?tensorboardColab=true": { + "data": "PCFkb2N0eXBlIGh0bWw+PG1ldGEgbmFtZT0idGItcmVsYXRpdmUtcm9vdCIgY29udGVudD0iLi8iPjwhZG9jdHlwZSBodG1sPjwhLS0KQGxpY2Vuc2UKQ29weXJpZ2h0IDIwMTkgVGhlIFRlbnNvckZsb3cgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwp5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQpkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZApsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0+PGh0bWw+PGhlYWQ+PG1ldGEgY2hhcnNldD0idXRmLTgiPgo8dGl0bGU+VGVuc29yQm9hcmQ8L3RpdGxlPgo8bGluayByZWw9InNob3J0Y3V0IGljb24iIGhyZWY9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBTVFBQUFERUNBWUFBQURBcG81ckFBQUFCSE5DU1ZRSUNBZ0lmQWhraUFBQUFBbHdTRmx6QUFCYWJnQUFXbTRCeFdzak9BQUFBQmwwUlZoMFUyOW1kSGRoY21VQWQzZDNMbWx1YTNOallYQmxMbTl5WjV2dVBCb0FBQmwwU1VSQlZIaWM3WjE1ZUZUVjNjYy92NXNGQ1ZSeHFWdHB0VlcyVmx4ZjYxcXRpcTBMOUdsOU5YVUJGRXBGUlRJaGhCQURDVGRBTUFFa0NZc0s3cUI5K2tENzJxZkJXaXZxVzdWYTY3NGlyZTlyYXhYMWJaVldaVEhML040LzVnNEdTR0R1ekwxejc1MDVuMzg0ek13NTU4dk0vWEsyM3prSERJR2ppemhQRjNGZTBEb01JRUVMeUdkMFBvT3dhQUF1Y1Y1YWgwVzVWUEI2a0xyeUdXT0lBRkNiL3ZTakVxZ0crdXp3S3dnZHdDMTBVQ2ZWL0RzWWhmbUxNVVFXVVJ1TEVrWUQ4eEVPMnY3R2pvWndQc3hIV014aElFdWxsSzVzNnN4bmpDR3loQzdnSkpSVzRDU2daeFAwbkg0Smk1aVU4N2pmR2czR0VMNmpUUXdFNWdHamtXN2ZkK3FHU0xLV0lzcGtNbS83SU5QZ1lBemhFMnBUUWgrcXNLZ0MrZ0x1VGJCcmVpdXdtSFlhWkRxZmVpcllBQmhEZUk0cVFpTVhBd3NRRHZQQUJEMmxOeUxVczRuYnhTYWV1V3BERW1NSUQ5RWJPUUZvUlRodCs0ditHQ0w1NTdOQXVjUjRLaTNCaGwwd2h2QUFiZUFRTEd4Z0FtRDVhb0x1NmNTZml2QUxsRXFKOFk1TDZZYWRNSWJJQUxVcHBvaHJFV1lqN0wzOWpld2FJcG5lakxLUXZXbVVjV3hMNlI5ZzJBVmppRFRSdVl6Q29nWDRCcEE5RTNSUDkveiszNEdaVXNiS1hxUWJkb014aEV1MGdhTVJtbEhPOXZBQi82T1RPdGtEUXlUU3lpTW81UkxqdFo3K0hZYWVzWUlXRUJYVVpqK2RTeXZ3UE1yWkhoVzdFV0VpbjNFYVV6a1ZvUlQ0bXljbEMrZGc4Ykl1WmFYZXdvR2VsSmtIbUJaaUQ2aE5JVVdNUjJrQUR2Q29WZGlLc0pqNHJ1c0p1cHdTUHFNS3FFS2M5WXZleWttOXprMUFFd2ZTTEtXMFkrZ1ZZNGpkb1BXY2cwVUx3bEhiWDh6Y0VHc1J5bVRhN2xlY3RZbUJGRGtyM095d3hwMk9JWkxwRFFoVDVUb2UyRjNkK1l3eFJBL29IQVpCdDdCc2IxcUZGeW1nWENyZHhTVHBJczRFV2hDTzNhWE05TFdzbzRDWVhNTWJiclRrQThZUTNWQ2IvZ2lWeUU1aDJaa1o0aU9FT1J5ZWZ0U3EybGdNWURUS2ZPQWdqM1Ixb054Q0lYVXkwWVNaSnpHR3dIbmdMT2VCNnlrc083MEhML0hBaVhmN0duUVovV252d2JEcGF3U2NNUFA5VEpnNUdFT2dzMU1JeTNiL3NLMGpUa3hxL09tU2FDdURVQnFRN1R2dHZPald2WWhRTHRma2Q1aDUzaHBDYlJkaDJhay9WQnRRS3FTRzMzZ3F0aGUwbFhPQUZ1QW9EOWRFMWxKQW1mdzBQOFBNODg0UWFsTUN6clJtcW1IWmUzNlFOaUUwOFRuTlltZDNXbE50Q3RtWDhZZ3pMZHk3UmpmcFJKaDVFUTN5ay93S004OGJReWdJZFZ5TXhRTFVaVmgyNys5M290eUpNRk5xK0lmWG10MmdpOWlQUW1ZQjF5RVVibjhqTTNPOGgxTERSRmFKb0o0S0RpbDVZUWl0NVFRa2c3RHNubDk3Rkl0eXFlWlZUOFZtaUM1aEtFb3o0aHhyNDAxWDZsbVVtRnpEMHg1S0RTVTViUWl0NFJDS3NORU13N0ozZk8wdGxCcVp5UnFQNVhxS0xtWVVRZ3ZpQkI5Q3B1WlE0RjQ2cUpKSmZPQ3AyQkNSazRaUW0ySTZQUXpMVHZ5WkNLL2VoeHVsak04OWx1d0xhbFBNL3M3M0FIdDcxRnBzUmxoSVlXNkdtZWVjSVhTRzUySFpjWVQ3RUtiSkRENzBWbTEyME9VY1FnYzI0clNVNE1YMzhoWkNqVXdJZDB2cGxwd3hoTjdBVUFwb0JzN3pjQXJ5R1pTWTFQR01oMUlEUTI5MnRyZ3FwM24ySFZrOFNwd3A4bE5lOFZCcVlFVGVFR3F6SHgzTVFyZ09uTm1Wekgvc2Q0RVoxT2JlN0lvcXdpM09JUWh3R09ERjk5V0pPTE50NDRPZGJjdVV5QnBDYlFycFlEeDRHcGE5QlZqQWwyaVNDclo2S0RkMDZISks2S1FLU1NITVBOVzB4U2JpTkxGM2RNUE1JMmtJclhGV2FMMEx5MWJnRnhRd1RXWjZ0RUVuSXVqaUZNTE0zYVlUWWVZVk1pNDdLL1plRWlsRDZFd0dFZmM4TFBzNUxNcWxqajk0cHpSNjZNMmM2VXhHN0JwbTdqYjl4V3ZyS0tSTXhyTGVPNlgrRWdsRHFPMUVlU3JWQ0gyMnY1R1pJVFlDOVdBTyswcWlOaFlITzRjeGR3OHpoMHpXYlJKUnZ4M1JDRE1QdFNIVXhtSXJvN0djSHdpOGFCWGFnVnNwWWFZNURySm5kQm45c2FqRWNzTE1JUk5ESkVtRW1mY05kNWg1YUEyaE4zUUx5L1p1R25VdFFreHMvdGREcVRtTDNzb2d4T21pWm02SVpQb0ZsSElaeHhOZWF2V0swQmxDcXhpSTFXMlFCMTYwQ2kraGxNc2NmdStwMkR4QlZ6RENpWTlLVEdKa1pvaGtlaTF4SnNzNC91cWwxa3dKalNIVXBvUXR6alFnOVBXb1ZVaHMzMXpQVWxrVDNtWTZDcWhOSVY5eFRoOFJKOHdjTWpFRUpLYTVsOUNYdVZMS1o5NHFUby9BRGFFZ1RPTml4RmtvY3YrbDlwUk9YRXZWVHAwMGhYOGdGeVgwZHZaRG1RVk1BZ295TkVReS9SNUNEYU9EWHdnTjFCQTZsUk93ZWduTFR0OFE2eERLWlk2NXVOQlA5RGFHQVl1UWJyZW5adjdiL1FtTG1JemVmcEpoMWduRUVGcnVoR1h2N3JSczkxL3FCdUpNbFhubXpLRnNvcmN6Q3B4Z1NtOWFkMFdjTVBOeDJROHp6Nm9obk83Uk5KUmFoUDQ5cW5EL3BYNE0xRlBFeldMVDZhMWlReXJvWGV4Rm5BcmdCcUMvUitPL1Q3Q1lReEdMc3hrR2t2VVdRaXM0emprTjc0d2VWYVJ1aUVSWWRoR1ZZdk4vZm1nMXVFT1hjd2lGUG9XWlg1R2RNUFBBeGhCYXlTaUVWdURycmcyaFBJb3dSZWJsUnNoeHJxRjNjd0pkenRqUXV6V2tSMUhLWmJTL1czYURIVlRiRkxPWmF4SG1BRi9hUVZIUFg4eGJXTlJJUTI1dFNzbEZWQkh1OWlITUhPNmtpSmxTNmsrWWVlRFRyZ0JheGFIQUxHQUMwbU5UbTlpMldFeWoyTG0zYlRHWDBlV1VVSnppYWVhcHB6ZWgxSE1veStRc2I4ZU5vVEJFRXEzaVA1eHUxS21Pc3NURzlpNnFaRUh1Ym16UEIvUTJCbExNUE5URE1ITjRFNHNLdVpRSHZkSVpLa09BTXhNMW5URUlGMk5oeXp4ZUNGcVR3VHYwTHI3cmhKa2ZzLzNGek0xeFAzRXE1WXJNWTlSQ1p3aEQ3cU0yRm9jN1llYVNRWmo1anVrT0xHNmhnMW9aelNmcGFqT0dNQVNHcnFZL1c3dWRaZzZadHhiQyt5ZzJGbmVrRTJadURHRUlITDJQUVhTbEVXYSt1elE4ajBXNWxQS2tHeTNHRUliUW9QZHdQc0lpaEtGQXBvYUF4S1gyRStUSDNKbXFCdGUza0dvNUU3U2NIN3JOWnpEc0NibVNCOW5LMGNCRTRKOWVGQWtjNmlhRCsydDVsU05SN3RjWTYvUjZ4OGtHZzBmSVJEcGtEQ3Zvd3hCZ01XUjNIMHM2aGloeVV1ZFF3Q3NhbzFXdjZ4YW9aekI0Z0pUeXNZd21ScHpod0crelZhOTdRMWpiRFFGUUJKUlJ4SHFOTWRZelZRYURnNHhsdll6bWZJUWZnUDk3NFROcElib3pFTGhIeTNqWWRLTU1maUNYMDBZUnc0QnlTSCtkWVUrNE53UTlHaUtCTUlJQ1h0WXBOS3JOWHVuTE1oaDJSVXBwbHl0b1JSZ0cvcHlsNWEwaEVoU2pUT2Rmdks0eFJxWWp5bURZSFhJWkc4R2Z2ZGQrR0NMSk54RGFkQXB0V3NuWDA2akhZTWc2WG8waGRzZEl1bmhkSzdCTk44b1FkaktkWlVxVnZpaXorSVRYdEpJTDA4aHZNR1NGYkxRUTNUbUNPR3UxZ2pZdDUvQU15akVZZk1IUE1jVHVHRWtCYjJpbDZVWVp3a1ZRaG9Ca04rcFRYdFZwWE9CUm1RWkRSZ1JwaUNSSG9qeWdVMm5UYXRPTk1nUkx0c2NRdlNPTXBKUFh0UXBiSjNlN0ZNVmd5Q0x1RFNFK0dTSkJDY29zK3ZDYVR1dDJacWpCa0NYQzBHWGFGZUZJNEVHdG9rMm5PbWY2R0F4WklKeUcrSUxFYkpUcFJobXlSTmdOQVZBQ3pLS0VWM1U2Mzg5eTNZWThJd3FHU0RJSStLMVcwNmJUK1ZwQUdndzVUcFFNa1VBWmliQmVxN0hWcGpoUUxZYWNJM3FHU0pEb1JtM2pWYTNtZTBHTE1lUU9VVFZFa3NFSUQra050T2tNdmhxMEdFUDBpYm9oa293a3pucXRNZDBvUTJia2lpRUErZ0d6YU9jVnJlSGNvTVVZb29rclEyamk0S2RDbjdSNHhSRGdkenJEZEtNTTduSFhRbHdkZWpOMFp5U3dYbWVhYmxSZUUzZDNHSUhiTGxOWXUwdTkwUTlsRmwyOHJETVpFYlFZUTFiWmpGTFBOaGE1eWVUT0VQdEd6aEFKbEtIQTczUW1LN1dHZzRLV1kvQVZCVmJSd1NDNURGdkd1YnVDelowaE9pTnFpQVFDaktHQURUcVRtTnFSNnY0WlVrSDVFeGFueWFXTWxURzhuMDRSN2d6UkZXbERKTmtIb1lVdW50TmFUZ3Rhak1FVDNrVzRra3M1V1VwNU9wT0MzQm5DcjgxQndYQU13aE5hWjdwUmtVWFpBdFJUd0dDNWxKVWltUjllNXM0UThad3lCQ1M3VVlXOHFYWEU5QklLZ2haa1NCRmhGVVVNbHN1d3BaU3QzaFhyQXIyZW9SU3czbFdwMFVxL2hEQkpiSjdDa0plNGF5R0tjcTZGMkpsamdTZlZacVhhSEJpMEdFUDJ5ZWN4Uk0rbzA0MkNEVnBQVEZlYmJsUStZUXpST3dOUVdsalBzenFiVTRJV1k4Z091YjVTN1FYSG9meEI2MW1wOC9oeTBHSU0vbUphaU5SSWRLTTYyYUJ6VERjcWwzRm5DTW43SUxsOVVWcll3SjkwTGljSExjYmdQYWJMbEE3SzhTaFA2UnpUamNvMVRKY3BmUkxkcUM3VGpjb2xUQXVST2ZzaXRQQVhudEhabkJTMEdFTm11RE5FZXJjSDVRZktDVmc4cFhOWnFUWUhCQzNIa0I2bWhmQVdDMkVNUld6UUJtSnFwN1ZuUFZSb013T0MxcEFKdXBxRDNYemU3USsyNXowRXJxS2pjcGI5Z0JhS2VWSWJPU1pvTWVtZ1N6aFVsN0tjWXVZRXJTVWRkQlZEOUdjOFFBZFQzZVJ6TzZoMk4rMXF6SEVLU2xuUUl0eWdOc1c2aEJnV2J5SmNUWG9uc3dTRzNzZStlaCtOV0x3QzdtK21jcmRyVENsSyt5SGZNZDltNERHZ2pTNmVvSWpIMEJ6ZGt4Q25QV2dKcWFMTEdJWFNDdEc3VjF4dExJNWdOTEFBMGcvTWRMdU5NcE14eE5zb0R3TnIyWWVIeFA3aVFkRktLb0Q3TWlnN3ZBZ2RRVXZZRTdxTVk0blRnbkptMEZyU1FlL2pMT0swSUJ5ZGFWbnVER0ZSNUdKUFVoZUovUVZyRWRya0pwN3Y3WU95a0o5cEpaZEREdDVoTGVGdElYUXArd04xeEprRTBWdEgwWlY4RFl1NUtHTzg2cDY3N3pMdG5zMkkweFVxNU5leWdBOWNLTG1lTHI1TDRnUyszRUhEMTBMb2NvcG81enJpMUNQc0U3UWV0K2hLK2lGTUE2YWo3T1hsV05XTEx0UGJDQThqdTNhRjNDQ04vRldyYUVDWmwzZ2huVkpDU01nTW9Zc1p3ZWUwQU44S1dvdGJWQkh1WlF4S0U3aWJUazJWZEF6eFJWY29UcHNzN3IwcjVKb1NGckNaVWhJNzEzSURLeHlHMEtVTXBvdEZLQmRHOFQ4YnZZc1RXVVVyK0xzM3haMGh1cmliSXVaTE14LzdJVVpzT3JXUzZ4Q2VwUHQwWDIvN29LTkJvR01JYldZQVFqVmRUSUhvUlN2clBYd0Z1QkVZVFJaK2ZWZUdrS1c4NlplUTdYVXM1R21keG5MZ1dyL3J5Z29CZFpuVXhtSkE1dE9RUWFHcjZjdFd5b0Fad0pleVZXODRGMTIyVVkzdzNoNC9GNFhXSW9CWkpyMkpzOWlIRjRCN2lLSVo3bUlVVzNnRHBaRXNtZ0ZDYWdoWndpZEFoYnRNL21qSm1DeTJFSG9UWDlWbVZtTHhLRVF2WkVUdjVIaTlpOGNSZmcwY0hvU0cwSjV2S2syczFtbU1SaGpsUHJNUGd0SWxDNGJRQmZURFlockNkR0F2dit2ekdyMkgvZW1pRGdsK1BTUzBoZ0RBNG5xVXM0RCthWmNSdkRsODZ6S3BJaXppWW9TRkVMMnJpblU1UlJSekhWM2hXUThKWlpjcGlUVHhEa0s5ZHdWNlZsTHErRFR0cWdzNWtVVThDYXdtaW1hNGt4RVU4UkpLQzRURERKQmxRNmhOb2JwOUxQdlNBcnpvdVpqc21HTVR5cXRlRnFoTkhLb0xXWTd3UitCVUw4dk9Cbm9IUS9SMkhuRGkycjRadEo2ZDhkMFFPcGsrT29VUldrRXJuL0F1VTdqS1RYNng2VVM1bXNTQ29ELzRZUTdsQXl6T2tocmU4S3pJaFZ4RUFYK0c2SVZsQStqdGpBZGVROXlIWldjTFg3NVVuVUpmbmNJb25jSktDdmtRZUJnb0F3NUNhTllxQnJvcFQrYnpISEN6SDFwM3JjeVRVdDZtZ085SU5TOTdVdG9YSEVPMFk3MkdFZkp4cTJmaXRKd0JLT2NpakVMNUVkQy9sNGRySDdxNEJWek9IaWt6RUg0RTdzeVVFZW1aNHpVSytiNU1aNlBIYWd4WklLTVdRaWV4djhZWXF6SGFVRDRrTWNBYnc1NW5oVVpxQlQ5MlU1Zk01MU1rOUx2UEhxZUEwNDBab290clEraGtCbW9aVjJ1TU5ncDVuOFJxNkVqY3hza0lTN1hTM1NxcU5ISS95cTljMWVNVmUyNHQxbExDZVZMTnY3T2d4dUFUN2k1dUwrY2lMTjVCV0U3Q0JKbnNvRHVBT00ydWN5bVRJT0NIYm1kektQZnlaUzZTQ3U5dXNqRUVnOXNydGZyaDVaeU1jTGxPNVlldXNzeG5JOG9zenpSa2lzVVN1cmhTSm9ZanpOdVFHY0ZQM1FrM2F6WDd1c3JUbHlYQUgvMFJsRElLMU1zTXlzUW1IckFXZzBjRWJ3ZzRoRTZhM0dRUW16Z1dFeUd3LzVXN1VLNlJXdXlBNmpmNFJCZ01BVEJCcC9FOU54bGtIcThBUzN6U3N6dmFFUzZUT2xZRVVMZkJaOEppQ0NIT2NyVmRCdkgxb1JaNDJ4OUpQYklaWVpUTVpFMFc2elJra2JBWUFvVEQyY3hjVjFsc3RqZ2h3OW5nWXl4R1NDMi95MUo5aGdBSWp5RVNUTmJwbk80bWc4empRZUFYUHVsSjhnN0NxVEl6OElHOHdXZkNaZ2lMT0xlcjdYS1RTeWVUZ1gvNUk0bjFGSEM2MUxMQnAvSU5JU0pzaGdBWXdtWnEzV1J3RGtTYjZZT1c1eWppVEpuSjM5TXRRQnM0eWt0QkJuOEpveUVBcXJTYUUxemxLT1lXNENrUE5UekdYcHd0TmZ3ajNRTDBScVlqVkhxb3llQXpZVFZFSVhIdTBLdFREdzBSbXpnRlhJTTNheE8vQWk2UTZYeWFiZ0hhd0d6bjFBaERoQWlySVFDT1lRQlZiakxJSEY1RjBvaVAycEc3Z1V2RVpsczZtVlVSYmFBRmNkZnRNNFNETUJzQ29GYW51enlEZEFzMjhEOXAxU1kwaWMwNHNlbE1KN3V1cG9CNTNBN0UwcXJmRURoaE4wUWY0QTY5SlBXalNhU1pyVTVFYk9vSWlsSXBOdFZ1QlNiUjFSVHdaKzRDeHFkYmhpRjR3bTRJVUU3aTYweDJrMFhtOFJEQ3oxUDhlQmN3UVdaemszdHhDZFNtbUQrekJtRk11bVVZd2tINERRRWdOR2cxUjdyS0U2Y2MyTFNIVDMxT1lyeHdaN3JTMUthRVF0cUFINlZiaGlFOFJNTVFVSUp5bTVzamJHUWVIOEp1dTBEL3dtS0V6T2IrZEVYcEF2bzVabkFWbUdnSUwxRXhCTUIzcWVhbnJuSTBjQnZ3WkEvdkpJNklzWHQ4THlYVVpnRGJXQWVjblc0Wmh2QVJKVU9Bc2tCbjhOVlVQeTZKVFR3VFNIU05raVNPaUxGNUtXMFpOZ2RTd0g4REo2ZGJoaUdjUk1zUXNEZGQzT29tZzh4bEE3RFErZXZyeFBtTzJMeVZyZ0MxT1pnQ0hpR0NwMnNiOWt6VURBRndnVlp6aGFzY2hjeEZ1WnNDVHBlR0ZPNmQ2QVdkeTJGWVBBRW1QaWxYQ2ZVcGFydWhWV3RZNXd5Yzk0aXo2and1a3dyVlpqQngxa0hxWFRaRDlJaGlDd0d3UDhyaWJGV21jeGlHeFdNWU0rUThVVFVFS0tWNkF4ZjVYbzNOOGNSNUhEalU3N29Nd1JOZFF5UllwamI3K1ZXNHp1WkVoSWVCQS95cXd4QXVvbTZJZzltV2ZzakY3dERabklueUNQaG5PRVA0aUxvaFFMaEtxem5QeXlLMW52T0o4eUJadmdIVEVEelJOd1NBc0Z5cnZIbDQxZVlIS1BjRGZiMG96eEF0Y3NNUThEVUt1VEhUUXJTT3k0QmZrZ2c3TitRaHVXSUlnR3QxQm1la20xbHRya2E0bCtpdXpSZzhJSmNNWWFIY3BsUGNkM1cwamtuQXJlVFc5MkZJZzF4N0FBWlQ0dTRBWXExak9zSlNOQVEzV2hzQ0o5Y01BY3BVcmVYRWxENDZpM293SjJQa01HK2cvTkpOQm5lRzZPSnhKUFJubXhZUTV3NjFlNy9pUzBGMEZxMG9kZGtVWnNnYW00QnFDamxPUnJzN2Z0VFZBRktXOFRmZyt6cUZFY1JwQVpjblltU1A0YlJ6QTFDLzh4dHFZOUhKQ3BTZkJLREw0Qzl4NEQ2S21DcWw2UjB3bDFhWFNacFp4MWFPUXlrbjZQdmVla09vMFZxR2QzOUpMNkdBVHU1RWpCbHlEdUZSTEk2VEt4aWJyaGtnZ3pHRXJLQkRGdE5LSjBjQWkwbWNYaEVtaW9semo5cUpWbEJ0aWhuS2FvUXJneFptOEpTM0VFcmxDczZSeTNrbDA4SXlIbFRMTWo2U1ZtSUl3NEdITWkzUFk0NmpnM0tkVEI4NldRUCtSOGNhc3NabW9KNU9oc3NWM2wxZzQ5a2lsTFN3SGpoUFkxeUNNQjg0M0t1eU0wS1l6VDVjQkp3U3RCU0RKeWh3TDUxVXlUZys4THB3ejZkZHBaVTFER0FJUWpud2lkZmxwMEZmakJseWhXZFJUcE94alBYRERPRFRPb1RZdEVzenJSUXhERmdCNXRwYVEwYThoM0lsWXpoSnJ1UnBQeXZ5ZFdGTzVyTlJtcGtJbkFUOHdjKzZERG5KVnFDSnZneVZxMWdwZ3ZwZFlWWUMyYVNaNXhTK1F3VVhBd3VBdzdKUnJ5SFNyRVdaTEZmeDEyeFdtclhRRFFHVlJhemhNNzZKVUUvQy9RYkR6cnlBY29aY3hTZ1psMTB6UUFDeFRMS0NMYklRbXdJR0E2dkEvMmJRRUFrK0FzcnB4N2RsSEU4RUpTS3c0RDZaejd0eUUyT0JVeEJ6M1cwZTB3RXNwcDBqWkJ5dFVocnNBbS9nMGE2eWtHZm94Mm5PQ25KS0I0OFpjb1oxd0xFeW5waE1ERWNJVU9DR2dNU0ZpYktBbFNoSE9PT0x6L2VZeVJCbE5tQnhvWXpuWEJuUEcwR0w2VTRvREpGRUZySlo1bU5Ud0ZHSWQ4dnhodER3TWNway9zNVJNbzdmQkMybUowSzVmMWdhZVFzbzFXck9kc0xNaCs4cGp5SDh5SVRNRDRMd20xQzFFRHNqalR4S0NjY2pUSVQwUTNvTmhsUUp0U0VBeEtaVEdsbUJNQVNsQ1dnUFdwTWhkd205SVpKSUk1dGtQdFhFT1JyQzJmODBSSi9JR0NLSnpHZUROSEloY0M2RWE0YkNFSDBpWjRnazBzZzZQdUpZSjh3OEZIUFlodWdUV1VPQXM0MTFIcTNBRWM0RkttSGJ4bXFJR0pFMlJCSzVrWS9rUm1MRU9SRjRQR2c5aHVpU0U0WklJbzI4S1BNNEUvZ0I4SGJRZWd6Ukk2Y01rVVFhYUdNTDMwS3BCajROV284aE91U2tJUUNrbWEweWp5WUtHWXFhYmF5RzFNaFpReVFSbTQzU3dFU1VreENlQ2xwUHhQZ3Y0dHN2dmM4TGN0NFFTYVNCNTVqTjZRaWx3RHRCNndrNWJ3TG55eVQrVXlibjExZ3Nid3dCempiVzJheWhnR0Vrem4zZEZyU21rUEV4U2puL1pMaE00cmRCaXdtQ3ZESkVFckhaSXJPeHNSZ0VyQ0lMcHptRW5FNWdCVVVNa2NtMGlrMW4wSUtDSWk4TmtVUnMzcFhaaktXTHM0Q1hndFlUQ01vanhEbE9Kak5SSnZMUG9PVUVUVjRiSW9uTTRmY0lKK1RaTnRhL0lKUktHU01reG10Qml3a0x4aEFPWWhNWG01WEFrWkRUMjFnL1E2a0hoc3Rrc3l0eFo0d2hka0pzUGhNYm13S0dRMDQ5TUhGZ0ZjcVJFc09Xc3B3MWZFYUVjZ3RwR0pCYS9nS1VhajNuQU0xRWV4dnJNeWd4S2VlWm9JV0VIZE5DN0FHWnhTTW94ME1rdDdHK0MxeEpqRk9NR1ZMREdDSUZ4S1pUNmxoQm5LRWtia3NLKzdUa0ZxQ2VPSU9sUER1SEJPY0t4aEF1RUp1UHBZNFlCUXhIZVRCb1BUMmd3QnE2K0taTXdaWUtjMzZ1Vzh3WUlnMmtoamVCQzNRT0kwaTBHTU1DbGdUQzgwQk1wcGhyQnpMQnRCQVpJTFdzNDhzY0UvQnRyTzhqVE9UZmZOdVlJWE9NSVRKRUp0SWh0YlJpY1FTUzFXMnM3Y0JpaWhncVUxZ2h0Z2x2OXdKakNJK1FHajZTR21MQXQ4SDM0OXpYWWpGTXBoS1RzbERjNDVjem1ER0V4OGdNWGdETzBMbU13cUxWNCtMZlJEaGJwdktZeCtVYURQNmpOaVhheUJsQjZ6Q2t6djhEUWQ3UXJNYkxSMUFBQUFBQVNVVk9SSzVDWUlJPSI+CjxsaW5rIHJlbD0iYXBwbGUtdG91Y2gtaWNvbiIgaHJlZj0iZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFNUUFBQURFQ0FZQUFBREFwbzVyQUFBQUJITkNTVlFJQ0FnSWZBaGtpQUFBQUFsd1NGbHpBQUJhYmdBQVdtNEJ4V3NqT0FBQUFCbDBSVmgwVTI5bWRIZGhjbVVBZDNkM0xtbHVhM05qWVhCbExtOXlaNXZ1UEJvQUFCbDBTVVJCVkhpYzdaMTVlRlRWM2NjL3Y1c0ZDVlJ4cVZ0cHRWVzJWbHhmNjFxdGlxMEw5R2w5TlhVQkZFcEZSVEloaEJBRENUZEFNQUVrQ1lzSzdxQjkra0Q3MnFmQldpdnFXN1ZhNjc0aXJlOXJheFgxYlpWV1pUSEwvTjQvNWc0R1NHRHV6TDF6NzUwNW4zODR6TXc1NTh2TS9YSzIzemtIRElHaml6aFBGM0ZlMERvTUlFRUx5R2QwUG9Pd2FBQXVjVjVhaDBXNVZQQjZrTHJ5R1dPSUFGQ2IvdlNqRXFnRyt1endLd2dkd0MxMFVDZlYvRHNZaGZtTE1VUVdVUnVMRWtZRDh4RU8ydjdHam9ad1BzeEhXTXhoSUV1bGxLNXM2c3huakNHeWhDN2dKSlJXNENTZ1p4UDBuSDRKaTVpVTg3amZHZzNHRUw2alRRd0U1Z0dqa1c3ZmQrcUdTTEtXSXNwa01tLzdJTlBnWUF6aEUycFRRaCtxc0tnQytnTHVUYkJyZWl1d21IWWFaRHFmZWlyWUFCaERlSTRxUWlNWEF3c1FEdlBBQkQybE55TFVzNG5ieFNhZXVXcERFbU1JRDlFYk9RRm9SVGh0KzR2K0dDTDU1N05BdWNSNEtpM0JobDB3aHZBQWJlQVFMR3hnQW1ENWFvTHU2Y1NmaXZBTGxFcUo4WTVMNllhZE1JYklBTFVwcG9ockVXWWo3TDM5amV3YUlwbmVqTEtRdldtVWNXeEw2UjlnMkFWamlEVFJ1WXpDb2dYNEJwQTlFM1JQOS96KzM0R1pVc2JLWHFRYmRvTXhoRXUwZ2FNUm1sSE85dkFCLzZPVE90a0RReVRTeWlNbzVSTGp0WjcrSFlhZXNZSVdFQlhVWmorZFN5dndQTXJaSGhXN0VXRWluM0VhVXprVm9SVDRteWNsQytkZzhiSXVaYVhld29HZWxKa0htQlppRDZoTklVV01SMmtBRHZDb1ZkaUtzSmo0cnVzSnVwd1NQcU1LcUVLYzlZdmV5a205emsxQUV3ZlNMS1cwWStnVlk0amRvUFdjZzBVTHdsSGJYOHpjRUdzUnltVGE3bGVjdFltQkZEa3IzT3l3eHAyT0laTHBEUWhUNVRvZTJGM2QrWXd4UkEvb0hBWkJ0N0JzYjFxRkZ5bWdYQ3JkeFNUcElzNEVXaENPM2FYTTlMV3NvNENZWE1NYmJyVGtBOFlRM1ZDYi9naVZ5RTVoMlprWjRpT0VPUnllZnRTcTJsZ01ZRFRLZk9BZ2ozUjFvTnhDSVhVeTBZU1pKekdHd0huZ0xPZUI2eWtzTzcwSEwvSEFpWGY3R25RWi9XbnZ3YkRwYXdTY01QUDlUSmc1R0VPZ3MxTUl5M2Ivc0swalRreHEvT21TYUN1RFVCcVE3VHZ0dk9qV3ZZaFFMdGZrZDVoNTNocENiUmRoMmFrL1ZCdFFLcVNHMzNncXRoZTBsWE9BRnVBb0Q5ZEUxbEpBbWZ3MFA4UE04ODRRYWxNQ3pyUm1xbUhaZTM2UU5pRTA4VG5OWW1kM1dsTnRDdG1YOFlnekxkeTdSamZwUkpoNUVRM3lrL3dLTTg4YlF5Z0lkVnlNeFFMVVpWaDI3Kzkzb3R5Sk1GTnErSWZYbXQyZ2k5aVBRbVlCMXlFVWJuOGpNM084aDFMRFJGYUpvSjRLRGlsNVlRaXQ1UVFrZzdEc25sOTdGSXR5cWVaVlQ4Vm1pQzVoS0VvejRoeHI0MDFYNmxtVW1GekQweDVLRFNVNWJRaXQ0UkNLc05FTXc3SjNmTzB0bEJxWnlScVA1WHFLTG1ZVVFndmlCQjlDcHVaUTRGNDZxSkpKZk9DcDJCQ1JrNFpRbTJJNlBRekxUdnlaQ0svZWh4dWxqTTg5bHV3TGFsUE0vczczQUh0NzFGcHNSbGhJWVc2R21lZWNJWFNHNTJIWmNZVDdFS2JKREQ3MFZtMTIwT1VjUWdjMjRyU1U0TVgzOGhaQ2pVd0lkMHZwbHB3eGhON0FVQXBvQnM3emNBcnlHWlNZMVBHTWgxSURRMjkydHJncXAzbjJIVms4U3B3cDhsTmU4VkJxWUVUZUVHcXpIeDNNUXJnT25ObVZ6SC9zZDRFWjFPYmU3SW9xd2kzT0lRaHdHT0RGOTlXSk9MTnQ0NE9kYmN1VXlCcENiUXJwWUR4NEdwYTlCVmpBbDJpU0NyWjZLRGQwNkhKSzZLUUtTU0hNUE5XMHhTYmlOTEYzZE1QTUkya0lyWEZXYUwwTHkxYmdGeFF3VFdaNnRFRW5JdWppRk1MTTNhWVRZZVlWTWk0N0svWmVFaWxENkV3R0VmYzhMUHM1TE1xbGpqOTRwelI2Nk0yYzZVeEc3QnBtN2piOXhXdnJLS1JNeHJMZU82WCtFZ2xEcU8xRWVTclZDSDIydjVHWklUWUM5V0FPKzBxaU5oWUhPNGN4ZHc4emgweldiUkpSdngzUkNETVB0U0hVeG1Jcm83R2NId2k4YUJYYWdWc3BZYVk1RHJKbmRCbjlzYWpFY3NMTUlSTkRKRW1FbWZjTmQ1aDVhQTJoTjNRTHkvWnVHblV0UWt4cy90ZERxVG1MM3NvZ3hPbWlabTZJWlBvRmxISVp4eE5lYXZXSzBCbENxeGlJMVcyUUIxNjBDaStobE1zY2Z1K3AyRHhCVnpEQ2lZOUtUR0prWm9oa2VpMXhKc3M0L3VxbDFrd0pqU0hVcG9RdHpqUWc5UFdvVlVoczMxelBVbGtUM21ZNkNxaE5JVjl4VGg4Uko4d2NNakVFSkthNWw5Q1h1VkxLWjk0cVRvL0FEYUVnVE9OaXhGa29jditsOXBST1hFdlZUcDAwaFg4Z0Z5WDBkdlpEbVFWTUFnb3lORVF5L1I1Q0RhT0RYd2dOMUJBNmxST3dlZ25MVHQ4UTZ4REtaWTY1dU5CUDlEYUdBWXVRYnJlblp2N2IvUW1MbUl6ZWZwSmgxZ25FRUZydWhHWHY3clJzOTEvcUJ1Sk1sWG5tektGc29yY3pDcHhnU205YWQwV2NNUE54MlE4eno2b2huTzdSTkpSYWhQNDlxbkQvcFg0TTFGUEV6V0xUNmExaVF5cm9YZXhGbkFyZ0JxQy9SK08vVDdDWVF4R0xzeGtHa3ZVV1FpczR6amtONzR3ZVZhUnVpRVJZZGhHVll2Ti9mbWcxdUVPWGN3aUZQb1daWDVHZE1QUEF4aEJheVNpRVZ1RHJyZzJoUElvd1JlYmxSc2h4cnFGM2N3SmR6dGpRdXpXa1IxSEtaYlMvVzNhREhWVGJGTE9aYXhIbUFGL2FRVkhQWDh4YldOUklRMjV0U3NsRlZCSHU5aUhNSE82a2lKbFM2aytZZWVEVHJnQmF4YUhBTEdBQzBtTlRtOWkyV0V5ajJMbTNiVEdYMGVXVVVKemlhZWFwcHplaDFITW95K1FzYjhlTm9UQkVFcTNpUDV4dTFLbU9zc1RHOWk2cVpFSHVibXpQQi9RMkJsTE1QTlRETUhONEU0c0t1WlFIdmRJWktrT0FNeE0xblRFSUYyTmh5enhlQ0ZxVHdUdjBMcjdyaEprZnMvM0Z6TTF4UDNFcTVZck1ZOVJDWndoRDdxTTJGb2M3WWVhU1FaajVqdWtPTEc2aGcxb1p6U2ZwYWpPR01BU0dycVkvVzd1ZFpnNlp0eGJDK3lnMkZuZWtFMlp1REdFSUhMMlBRWFNsRVdhK3V6UThqMFc1bFBLa0d5M0dFSWJRb1Bkd1BzSWloS0ZBcG9hQXhLWDJFK1RIM0ptcUJ0ZTNrR281RTdTY0g3ck5aekRzQ2JtU0I5bkswY0JFNEo5ZUZBa2M2aWFEKzJ0NWxTTlI3dGNZNi9SNng4a0dnMGZJUkRwa0RDdm93eEJnTVdSM0gwczZoaWh5VXVkUXdDc2FvMVd2Nnhhb1p6QjRnSlR5c1l3bVJwemh3Ryt6VmE5N1ExamJEUUZRQkpSUnhIcU5NZFl6VlFhRGc0eGx2WXptZklRZmdQOTc0VE5wSWJvekVMaEh5M2pZZEtNTWZpQ1gwMFlSdzRCeVNIK2RZVSs0TndROUdpS0JNSUlDWHRZcE5Lck5YdW5MTWhoMlJVcHBseXRvUlJnRy9weWw1YTBoRWhTalRPZGZ2SzR4UnFZanltRFlIWElaRzhHZnZkZCtHQ0xKTnhEYWRBcHRXc25YMDZqSFlNZzZYbzBoZHNkSXVuaGRLN0JOTjhvUWRqS2RaVXFWdmlpeitJVFh0SklMMDhodk1HU0ZiTFFRM1RtQ09HdTFnall0NS9BTXlqRVlmTUhQTWNUdUdFa0JiMmlsNlVZWndrVlFob0JrTitwVFh0VnBYT0JSbVFaRFJnUnBpQ1JIb2p5Z1UyblRhdE9OTWdSTHRzY1F2U09NcEpQWHRRcGJKM2U3Rk1WZ3lDTHVEU0UrR1NKQkNjb3MrdkNhVHV0MlpxakJrQ1hDMEdYYUZlRkk0RUd0b2sybk9tZjZHQXhaSUp5RytJTEViSlRwUmhteVJOZ05BVkFDektLRVYzVTYzODl5M1lZOEl3cUdTRElJK0sxVzA2YlQrVnBBR2d3NVRwUU1rVUFaaWJCZXE3SFZwamhRTFlhY0kzcUdTSkRvUm0zalZhM21lMEdMTWVRT1VUVkVrc0VJRCtrTnRPa012aHEwR0VQMGlib2hrb3drem5xdE1kMG9RMmJraWlFQStnR3phT2NWcmVIY29NVVlvb2tyUTJqaTRLZENuN1I0eFJEZ2R6ckRkS01NN25IWFFsd2Rlak4wWnlTd1htZWFibFJlRTNkM0dJSGJMbE5ZdTB1OTBROWxGbDI4ckRNWkViUVlRMWJaakZMUE5oYTV5ZVRPRVB0R3poQUpsS0hBNzNRbUs3V0dnNEtXWS9BVkJWYlJ3U0M1REZ2R3VidUN6WjBoT2lOcWlBUUNqS0dBRFRxVG1OcVI2djRaVWtINUV4YW55YVdNbFRHOG4wNFI3Z3pSRldsREpOa0hvWVV1bnROYVRndGFqTUVUM2tXNGtrczVXVXA1T3BPQzNCbkNyODFCd1hBTXdoTmFaN3BSa1VYWkF0UlR3R0M1bEpVaW1SOWU1czRROFp3eUJDUzdVWVc4cVhYRTlCSUtnaFprU0JGaEZVVU1sc3V3cFpTdDNoWHJBcjJlb1JTdzNsV3AwVXEvaERCSmJKN0NrSmU0YXlHS2NxNkYySmxqZ1NmVlpxWGFIQmkwR0VQMnllY3hSTStvMDQyQ0RWcFBURmViYmxRK1lRelJPd05RV2xqUHN6cWJVNElXWThnT3ViNVM3UVhIb2Z4QjYxbXA4L2h5MEdJTS9tSmFpTlJJZEtNNjJhQnpURGNxbDNGbkNNbjdJTGw5VVZyWXdKOTBMaWNITGNiZ1BhYkxsQTdLOFNoUDZSelRqY28xVEpjcGZSTGRxQzdUamNvbFRBdVJPZnNpdFBBWG50SFpuQlMwR0VObXVETkVlcmNINVFmS0NWZzhwWE5acVRZSEJDM0hrQjZtaGZBV0MyRU1SV3pRQm1KcXA3Vm5QVlJvTXdPQzFwQUp1cHFEM1h6ZTdRKzI1ejBFcnFLamNwYjlnQmFLZVZJYk9TWm9NZW1nU3poVWw3S2NZdVlFclNVZGRCVkQ5R2M4UUFkVDNlUnpPNmgyTisxcXpIRUtTbG5RSXR5Z05zVzZoQmdXYnlKY1RYb25zd1NHM3NlK2VoK05XTHdDN20rbWNyZHJUQ2xLK3lIZk1kOW00REdnalM2ZW9JakgwQnpka3hDblBXZ0pxYUxMR0lYU0N0RzdWMXh0TEk1Z05MQUEwZy9NZEx1Tk1wTXh4TnNvRHdOcjJZZUh4UDdpUWRGS0tvRDdNaWc3dkFnZFFVdllFN3FNWTRuVGduSm0wRnJTUWUvakxPSzBJQnlkYVZudURHRlI1R0pQVWhlSi9RVnJFZHJrSnA3djdZT3lrSjlwSlpkRER0NWhMZUZ0SVhRcCt3TjF4SmtFMFZ0SDBaVjhEWXU1S0dPODZwNjc3ekx0bnMySTB4VXE1TmV5Z0E5Y0tMbWVMcjVMNGdTKzNFSEQxMExvY29wbzV6cmkxQ1BzRTdRZXQraEsraUZNQTZhajdPWGxXTldMTHRQYkNBOGp1M2FGM0NDTi9GV3JhRUNabDNnaG5WSkNTTWdNb1lzWndlZTBBTjhLV290YlZCSHVaUXhLRTdpYlRrMlZkQXp4UlZjb1Rwc3M3cjByNUpvU0ZyQ1pVaEk3MTNJREt4eUcwS1VNcG90RktCZEc4VDhidllzVFdVVXIrTHMzeFowaHVyaWJJdVpMTXgvN0lVWnNPcldTNnhDZXBQdDBYMi83b0tOQm9HTUliV1lBUWpWZFRJSG9SU3ZyUFh3RnVCRVlUUlorZlZlR2tLVzg2WmVRN1hVczVHbWR4bkxnV3Ivcnlnb0JkWm5VeG1KQTV0T1FRYUdyNmN0V3lvQVp3SmV5Vlc4NEYxMjJVWTN3M2g0L0Y0WFdJb0JaSnIySnM5aUhGNEI3aUtJWjdtSVVXM2dEcFpFc21nRkNhZ2had2lkQWhidE0vbWpKbUN5MkVIb1RYOVZtVm1MeEtFUXZaRVR2NUhpOWk4Y1JmZzBjSG9TRzBKNXZLazJzMW1tTVJoamxQck1QZ3RJbEM0YlFCZlREWWhyQ2RHQXZ2K3Z6R3IySC9lbWlEZ2wrUFNTMGhnREE0bnFVczREK2FaY1J2RGw4NnpLcElpemlZb1NGRUwycmluVTVSUlJ6SFYzaFdROEpaWmNwaVRUeERrSzlkd1Y2VmxMcStEVHRxZ3M1a1VVOENhd21pbWE0a3hFVThSSktDNFREREpCbFE2aE5vYnA5TFB2U0Fyem91WmpzbUdNVHlxdGVGcWhOSEtvTFdZN3dSK0JVTDh2T0Jub0hRL1IySG5EaTJyNFp0SjZkOGQwUU9waytPb1VSV2tFcm4vQXVVN2pLVFg2eDZVUzVtc1NDb0QvNFlRN2xBeXpPa2hyZThLekloVnhFQVgrRzZJVmxBK2p0akFkZVE5eUhaV2NMWDc1VW5VSmZuY0lvbmNKS0N2a1FlQmdvQXc1Q2FOWXFCcm9wVCtiekhIQ3pIMXAzcmN5VFV0Nm1nTzlJTlM5N1V0b1hIRU8wWTcyR0VmSnhxMmZpdEp3QktPY2lqRUw1RWRDL2w0ZHJIN3E0QlZ6T0hpa3pFSDRFN3N5VUVlbVo0elVLK2I1TVo2UEhhZ3haSUtNV1FpZXh2OFlZcXpIYVVENGtNY0FidzU1bmhVWnFCVDkyVTVmTTUxTWs5THZQSHFlQTA0MFpvb3RyUStoa0Jtb1pWMnVNTmdwNW44UnE2RWpjeHNrSVM3WFMzU3FxTkhJL3lxOWMxZU1WZTI0dDFsTENlVkxOdjdPZ3h1QVQ3aTV1TCtjaUxONUJXRTdDQkpuc29EdUFPTTJ1Y3ltVElPQ0hibWR6S1BmeVpTNlNDdTl1c2pFRWc5c3J0ZnJoNVp5TWNMbE81WWV1c3N4bkk4b3N6elJraXNVU3VyaFNKb1lqek51UUdjRlAzUWszYXpYN3VzclRseVhBSC8wUmxESUsxTXNNeXNRbUhyQVdnMGNFYndnNGhFNmEzR1FRbXpnV0V5R3cvNVc3VUs2Uld1eUE2amY0UkJnTUFUQkJwL0U5Tnhsa0hxOEFTM3pTc3p2YUVTNlRPbFlFVUxmQlo4SmlDQ0hPY3JWZEJ2SDFvUlo0Mng5SlBiSVpZWlRNWkUwVzZ6UmtrYkFZQW9URDJjeGNWMWxzdGpnaHc5bmdZeXhHU0MyL3kxSjloZ0FJanlFU1ROYnBuTzRtZzh6alFlQVhQdWxKOGc3Q3FUSXo4SUc4d1dmQ1pnaUxPTGVyN1hLVFN5ZVRnWC81STRuMUZIQzYxTExCcC9JTklTSnNoZ0FZd21acTNXUndEa1NiNllPVzV5amlUSm5KMzlNdFFCczR5a3RCQm44Sm95RUFxclNhRTF6bEtPWVc0Q2tQTlR6R1hwd3ROZndqM1FMMFJxWWpWSHFveWVBellUVkVJWEh1MEt0VER3MFJtemdGWElNM2F4Ty9BaTZRNlh5YWJnSGF3R3puMUFoRGhBaXJJUUNPWVFCVmJqTElIRjVGMG9pUDJwRzdnVXZFWmxzNm1WVVJiYUFGY2RmdE00U0RNQnNDb0ZhbnV6eURkQXMyOEQ5cDFTWTBpYzA0c2VsTUo3dXVwb0I1M0E3RTBxcmZFRGhoTjBRZjRBNjlKUFdqU2FTWnJVNUViT29JaWxJcE50VnVCU2JSMVJUd1orNEN4cWRiaGlGNHdtNElVRTdpNjB4MmswWG04UkRDejFQOGVCY3dRV1p6azN0eENkU21tRCt6Qm1GTXVtVVl3a0g0RFFFZ05HZzFSN3JLRTZjYzJMU0hUMzFPWXJ4d1o3clMxS2FFUXRxQUg2VmJoaUU4Uk1NUVVJSnltNXNqYkdRZUg4SnV1MEQvd21LRXpPYitkRVhwQXZvNVpuQVZtR2dJTDFFeEJNQjNxZWFucm5JMGNCdndaQS92Skk2SXNYdDhMeVhVWmdEYldBZWNuVzRaaHZBUkpVT0Fza0JuOE5WVVB5NkpUVHdUU0hTTmtpU09pTEY1S1cwWk5nZFN3SDhESjZkYmhpR2NSTXNRc0RkZDNPb21nOHhsQTdEUStldnJ4UG1PMkx5VnJnQzFPWmdDSGlHQ3Ayc2I5a3pVREFGd2dWWnpoYXNjaGN4RnVac0NUcGVHRk82ZDZBV2R5MkZZUEFFbVBpbFhDZlVwYXJ1aFZXdFk1d3ljOTRpejZqd3Vrd3JWWmpCeDFrSHFYVFpEOUloaUN3R3dQOHJpYkZXbWN4aUd4V01ZTStROFVUVUVLS1Y2QXhmNVhvM044Y1I1SERqVTc3b013Uk5kUXlSWXBqYjcrVlc0enVaRWhJZUJBL3lxd3hBdW9tNklnOW1XZnNqRjd0RFpuSW55Q1Bobk9FUDRpTG9oUUxoS3F6blB5eUsxbnZPSjh5Qlp2Z0hURUR6Uk53U0FzRnlydkhsNDFlWUhLUGNEZmIwb3p4QXRjc01ROERVS3VUSFRRclNPeTRCZmtnZzdOK1FodVdJSWdHdDFCbWVrbTFsdHJrYTRsK2l1elJnOElKY01ZYUhjcGxQY2QzVzBqa25BcmVUVzkyRklnMXg3QUFaVDR1NEFZcTFqT3NKU05BUTNXaHNDSjljTUFjcFVyZVhFbEQ0Nmkzb3dKMlBrTUcrZy9OSk5CbmVHNk9KeEpQUm5teFlRNXc2MWU3L2lTMEYwRnEwb2Rka1Vac2dhbTRCcUNqbE9ScnM3ZnRUVkFGS1c4VGZnK3pxRkVjUnBBWmNuWW1TUDRiUnpBMUMvOHh0cVk5SEpDcFNmQktETDRDOXg0RDZLbUNxbDZSMHdsMWFYU1pwWngxYU9ReWtuNlB2ZWVrT28wVnFHZDM5Skw2R0FUdTVFakJseUR1RlJMSTZUS3hpYnJoa2dnekdFcktCREZ0TktKMGNBaTBtY1hoRW1pb2x6ajlxSlZsQnRpaG5LYW9Rcmd4Wm04SlMzRUVybENzNlJ5M2tsMDhJeUhsVExNajZTVm1JSXc0R0hNaTNQWTQ2amczS2RUQjg2V1FQK1I4Y2Fzc1ptb0o1T2hzc1YzbDFnNDlraWxMU3dIamhQWTF5Q01CODQzS3V5TTBLWXpUNWNCSndTdEJTREp5aHdMNTFVeVRnKzhMcHd6NmRkcFpVMURHQUlRam53aWRmbHAwRmZqQmx5aFdkUlRwT3hqUFhERE9EVE9vVFl0RXN6clJReERGZ0I1dHBhUTBhOGgzSWxZemhKcnVScFB5dnlkV0ZPNXJOUm1wa0luQVQ4d2MrNkREbkpWcUNKdmd5VnExZ3BndnBkWVZZQzJhU1o1eFMrUXdVWEF3dUF3N0pScnlIU3JFV1pMRmZ4MTJ4V21yWFFEUUdWUmF6aE03NkpVRS9DL1FiRHpyeUFjb1pjeFNnWmwxMHpRQUN4VExLQ0xiSVFtd0lHQTZ2QS8yYlFFQWsrQXNycHg3ZGxIRThFSlNLdzRENlp6N3R5RTJPQlV4QnozVzBlMHdFc3BwMGpaQnl0VWhyc0FtL2cwYTZ5a0dmb3gybk9DbkpLQjQ4WmNvWjF3TEV5bnBoTURFY0lVT0NHZ01TRmliS0FsU2hIT09PTHovZVl5UkJsTm1CeG9Zem5YQm5QRzBHTDZVNG9ESkZFRnJKWjVtTlR3RkdJZDh2eGh0RHdNY3BrL3M1Uk1vN2ZCQzJtSjBLNWYxZ2FlUXNvMVdyT2RzTE1oKzhwanlIOHlJVE1ENEx3bTFDMUVEc2pqVHhLQ2NjalRJVDBRM29OaGxRSnRTRUF4S1pUR2xtQk1BU2xDV2dQV3BNaGR3bTlJWkpJSTV0a1B0WEVPUnJDMmY4MFJKL0lHQ0tKekdlRE5ISWhjQzZFYTRiQ0VIMGlaNGdrMHNnNlB1SllKOHc4RkhQWWh1Z1RXVU9BczQxMUhxM0FFYzRGS21IYnhtcUlHSkUyUkJLNWtZL2tSbUxFT1JGNFBHZzlodWlTRTRaSUlvMjhLUE00RS9nQjhIYlFlZ3pSSTZjTWtVUWFhR01MMzBLcEJqNE5XbzhoT3VTa0lRQ2ttYTB5anlZS0dZcWFiYXlHMU1oWlF5UVJtNDNTd0VTVWt4Q2VDbHBQeFBndjR0c3Z2YzhMY3Q0UVNhU0I1NWpONlFpbHdEdEI2d2s1YndMbnl5VCtVeWJuMTFnc2J3d0J6amJXMmF5aGdHRWt6bjNkRnJTbWtQRXhTam4vWkxoTTRyZEJpd21DdkRKRUVySFpJck94c1JnRXJDSUxwem1FbkU1Z0JVVU1rY20waWsxbjBJS0NJaThOa1VSczNwWFpqS1dMczRDWGd0WVRDTW9qeERsT0pqTlJKdkxQb09VRVRWNGJJb25NNGZjSUorVFpOdGEvSUpSS0dTTWt4bXRCaXdrTHhoQU9ZaE1YbTVYQWtaRFQyMWcvUTZrSGhzdGtzeXR4WjR3aGRrSnNQaE1ibXdLR1EwNDlNSEZnRmNxUkVzT1dzcHcxZkVhRWNndHBHSkJhL2dLVWFqM25BTTFFZXh2ck15Z3hLZWVab0lXRUhkTkM3QUdaeFNNb3gwTWt0N0crQzF4SmpGT01HVkxER0NJRnhLWlQ2bGhCbktFa2Jrc0srN1RrRnFDZU9JT2xQRHVIQk9jS3hoQXVFSnVQcFk0WUJReEhlVEJvUFQyZ3dCcTYrS1pNd1pZS2MzNnVXOHdZSWcya2hqZUJDM1FPSTBpMEdNTUNsZ1RDODBCTXBwaHJCekxCdEJBWklMV3M0OHNjRS9CdHJPOGpUT1RmZk51WUlYT01JVEpFSnRJaHRiUmljUVNTMVcyczdjQmlpaGdxVTFnaHRnbHY5d0pqQ0krUUdqNlNHbUxBdDhIMzQ5elhZakZNcGhLVHNsRGM0NWN6bURHRXg4Z01YZ0RPMExtTXdxTFY0K0xmUkRoYnB2S1l4K1VhRFA2ak5pWGF5QmxCNnpDa3p2OERRZDdRck1iTFIxQUFBQUFBU1VWT1JLNUNZSUk9Ij4KCjxzdHlsZT4KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90bycpLCBsb2NhbCgnUm9ib3RvLVJlZ3VsYXInKSwgdXJsKC9mb250LXJvYm90by91WUVDTUtvSGNPOXgxd2RtYnlISW0zLV9rZjZCeVlPNkNMWWRCNEhRRS1ZLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDAwLTA0NUYsIFUrMDQ5MC0wNDkxLCBVKzA0QjAtMDRCMSwgVSsyMTE2Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8nKSwgbG9jYWwoJ1JvYm90by1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vc1RkYUE2ajBQc2I5MjBWanYtbXJ6SC1fa2Y2QnlZTzZDTFlkQjRIUUUtWS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQ2MC0wNTJGLCBVKzIwQjQsIFUrMkRFMC0yREZGLCBVK0E2NDAtQTY5RjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvJyksIGxvY2FsKCdSb2JvdG8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL19WWUZ4LXM4MjRrWHFfVWwyQkhxWUgtX2tmNkJ5WU82Q0xZZEI0SFFFLVkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzNzAtMDNGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvJyksIGxvY2FsKCdSb2JvdG8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL3RuajRTQjZETmJkYVFuc004Q0ZxQlgtX2tmNkJ5WU82Q0xZZEI0SFFFLVkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzFGMDAtMUZGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvJyksIGxvY2FsKCdSb2JvdG8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL29NTWdmWk1RdGhPcnlRbzluMjJkY3V2dkRpbjFwSzhhS3RlTHBlWjVjMEEud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkM2LCBVKzAyREEsIFUrMDJEQywgVSsyMDAwLTIwNkYsIFUrMjA3NCwgVSsyMEFDLCBVKzIyMTIsIFUrMjIxNTsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvJyksIGxvY2FsKCdSb2JvdG8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL0tzX2NWeGlDaXdVV1ZzRldGQTNCam4tX2tmNkJ5WU82Q0xZZEI0SFFFLVkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDAtMDI0RiwgVSsxRTAwLTFFRkYsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDRiwgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8nKSwgbG9jYWwoJ1JvYm90by1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vTko0dnhsZ1d3V2JFc3YxOGRBaHFubi1fa2Y2QnlZTzZDTFlkQjRIUUUtWS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMi0wMTAzLCBVKzFFQTAtMUVGOSwgVSsyMEFCOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9pc1otd2JDWE5LQWJuam82X1R3SFRvWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDAwLTA0NUYsIFUrMDQ5MC0wNDkxLCBVKzA0QjAtMDRCMSwgVSsyMTE2Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by83N0ZYRmpSYkd6TjRhQ3JTRmhsaDNvWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9qU04yQ0dWRGJjVnlDbmZKZmpTZGZJWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMzcwLTAzRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkJyksIGxvY2FsKCdSb2JvdG8tQm9sZCcpLCB1cmwoL2ZvbnQtcm9ib3RvL1VYNmk0SnhRRG0zZlZUYzFDUHV3cW9YMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzFGMDAtMUZGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQnKSwgbG9jYWwoJ1JvYm90by1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vZC02SVlwbE9Gb2NDYWNLenh3WFNPSkJ3MXhVMXJLcHRKal8wamFuczkyMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by85N3VhaHhpcVpSb25jQmFDRUkzYVc0WDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAwLTAyNEYsIFUrMUUwMC0xRUZGLCBVKzIwQTAtMjBBQiwgVSsyMEFELTIwQ0YsIFUrMkM2MC0yQzdGLCBVK0E3MjAtQTdGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQnKSwgbG9jYWwoJ1JvYm90by1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vUHdaYy1ZYklMNDE0d0I5ckIxSUFQWVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMi0wMTAzLCBVKzFFQTAtMUVGOSwgVSsyMEFCOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1Cb2xkSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vdDZOZDRjZlBSaFpQNDRRNVFBamNDMTRzWVlkSmc1ZFUycXpKRVZTdXRhMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQgSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tQm9sZEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL3Q2TmQ0Y2ZQUmhaUDQ0UTVRQWpjQ19acmFSMlRnOHcybHptN2tMTkwwLXcud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0NjAtMDUyRiwgVSsyMEI0LCBVKzJERTAtMkRGRiwgVStBNjQwLUE2OUY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUJvbGRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by90Nk5kNGNmUFJoWlA0NFE1UUFqY0N3dF9SbTY5MUxUZWJLZlkyWmtLU21JLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMzcwLTAzRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUJvbGRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by90Nk5kNGNmUFJoWlA0NFE1UUFqY0MxQlcyNlF4cFNqLV9aS21feFQ0aFd3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUJvbGRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by90Nk5kNGNmUFJoWlA0NFE1UUFqY0M0Z3A5UThnYllyaHFHbFJhdl9JWGZrLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMDAwLTAwRkYsIFUrMDEzMSwgVSswMTUyLTAxNTMsIFUrMDJDNiwgVSswMkRBLCBVKzAyREMsIFUrMjAwMC0yMDZGLCBVKzIwNzQsIFUrMjBBQywgVSsyMjEyLCBVKzIyMTU7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUJvbGRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by90Nk5kNGNmUFJoWlA0NFE1UUFqY0M2RThrTTR4V1IxXzFiWVVSUm9qUkdjLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAwLTAyNEYsIFUrMUUwMC0xRUZGLCBVKzIwQTAtMjBBQiwgVSsyMEFELTIwQ0YsIFUrMkM2MC0yQzdGLCBVK0E3MjAtQTdGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQgSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tQm9sZEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL3Q2TmQ0Y2ZQUmhaUDQ0UTVRQWpjQzlEaU5zUjVhLTlPZV9JdnB1OFhXbFkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL09wWFVxVG8wVWdRUWhHal9TRmRMV0JrQXo0clluNDdaeTJydmlnV1FmNncud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0MDAtMDQ1RiwgVSswNDkwLTA0OTEsIFUrMDRCMC0wNEIxLCBVKzIxMTY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9XeHJYSmEwQzNLZHRDN2xNYWZHNGRSa0F6NHJZbjQ3WnkycnZpZ1dRZjZ3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vY0RLaFJhWG5RVE9WYmFveHdkT3I5eGtBejRyWW40N1p5MnJ2aWdXUWY2dy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vMWhaZjAyUE9BTmgzMmsyVmtnRW9VQmtBejRyWW40N1p5MnJ2aWdXUWY2dy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMUYwMC0xRkZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vdlBjeW5TTDBxSHFfNmRYN2xLVkJ5WFloamJTcHZjNDdlZTZ4Ul84MEhudy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vdlN6dWxmS1NLMExMampmZWF4Y1JFaGtBejRyWW40N1p5MnJ2aWdXUWY2dy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9LMjNjeFdWVHJJRkQ2REpzRVZpMDdSa0F6NHJZbjQ3WnkycnZpZ1dRZjZ3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAyLTAxMDMsIFUrMUVBMC0xRUY5LCBVKzIwQUI7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCcpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0JyksIHVybCgvZm9udC1yb2JvdG8vRmw0eTBRZE94eXlUSEVHTVhYOGtjWVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0JyksIGxvY2FsKCdSb2JvdG8tTGlnaHQnKSwgdXJsKC9mb250LXJvYm90by8wZUM2ZmwwNmx1WEVZV3BCU0p2WENJWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQnKSwgbG9jYWwoJ1JvYm90by1MaWdodCcpLCB1cmwoL2ZvbnQtcm9ib3RvL0kzUzF3c2dTZzlZQ3VyVjZQVWtUT1lYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzNzAtMDNGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0JyksIGxvY2FsKCdSb2JvdG8tTGlnaHQnKSwgdXJsKC9mb250LXJvYm90by8tTDE0SmswNm02cFVIQi01bVhRUW5ZWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCcpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0JyksIHVybCgvZm9udC1yb2JvdG8vSGdvMTNrLXRmU3BuMHFpMVNGZFVmWkJ3MXhVMXJLcHRKal8wamFuczkyMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQnKSwgbG9jYWwoJ1JvYm90by1MaWdodCcpLCB1cmwoL2ZvbnQtcm9ib3RvL1BydTMzcWpTaHBaU21HM3o2Vll3bllYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDAtMDI0RiwgVSsxRTAwLTFFRkYsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDRiwgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQnKSwgbG9jYWwoJ1JvYm90by1MaWdodCcpLCB1cmwoL2ZvbnQtcm9ib3RvL05ZRFdCZEQ0Z0lxMjZHNVhZYkhzRklYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0IEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0SXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vN204bDdUbEZPLVMzVmtoSHVSMGF0MTRzWVlkSmc1ZFUycXpKRVZTdXRhMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0IEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0SXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vN204bDdUbEZPLVMzVmtoSHVSMGF0X1pyYVIyVGc4dzJsem03a0xOTDAtdy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQ2MC0wNTJGLCBVKzIwQjQsIFUrMkRFMC0yREZGLCBVK0E2NDAtQTY5RjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0IEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0SXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vN204bDdUbEZPLVMzVmtoSHVSMGF0d3RfUm02OTFMVGViS2ZZMlprS1NtSS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQgSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tTGlnaHRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by83bThsN1RsRk8tUzNWa2hIdVIwYXQxQlcyNlF4cFNqLV9aS21feFQ0aFd3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1MaWdodEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvLzdtOGw3VGxGTy1TM1ZraEh1UjBhdDRncDlROGdiWXJocUdsUmF2X0lYZmsud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkM2LCBVKzAyREEsIFUrMDJEQywgVSsyMDAwLTIwNkYsIFUrMjA3NCwgVSsyMEFDLCBVKzIyMTIsIFUrMjIxNTsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0IEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0SXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vN204bDdUbEZPLVMzVmtoSHVSMGF0NkU4a000eFdSMV8xYllVUlJvalJHYy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1MaWdodEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvLzdtOGw3VGxGTy1TM1ZraEh1UjBhdDlEaU5zUjVhLTlPZV9JdnB1OFhXbFkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1lZGl1bScpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bScpLCB1cmwoL2ZvbnQtcm9ib3RvL29IaTMwa3dRV3ZwQ1dxQWh6SGNDU0lYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0MDAtMDQ1RiwgVSswNDkwLTA0OTEsIFUrMDRCMC0wNEIxLCBVKzIxMTY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0nKSwgbG9jYWwoJ1JvYm90by1NZWRpdW0nKSwgdXJsKC9mb250LXJvYm90by9aTHFLZWVsWWJBVEc2MEVwWkJTRHk0WDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtJyksIHVybCgvZm9udC1yb2JvdG8vbXg5VWNrNnVCNjNWSUtGWW5FTVhyWVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtJyksIHVybCgvZm9udC1yb2JvdG8vckd2SGRKbnIybDc1cWIwWU5EOU55SVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMUYwMC0xRkZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtJyksIHVybCgvZm9udC1yb2JvdG8vUnhaSmRuemVvM1I1elNleGdlOFVVWkJ3MXhVMXJLcHRKal8wamFuczkyMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtJyksIHVybCgvZm9udC1yb2JvdG8vb09lRndaTmxyVGVmekxZbWxWVjFVSVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0nKSwgbG9jYWwoJ1JvYm90by1NZWRpdW0nKSwgdXJsKC9mb250LXJvYm90by9tYm1ocHJNSDY5Wmk2ZUVQQllWRmhZWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAyLTAxMDMsIFUrMUVBMC0xRUY5LCBVKzIwQUI7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vT0xmZkdCVGFGMFhGT1cxZ251SEYwVjRzWVlkSmc1ZFUycXpKRVZTdXRhMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1lZGl1bSBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1NZWRpdW1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9PTGZmR0JUYUYwWEZPVzFnbnVIRjBmWnJhUjJUZzh3Mmx6bTdrTE5MMC13LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL09MZmZHQlRhRjBYRk9XMWdudUhGMFF0X1JtNjkxTFRlYktmWTJaa0tTbUkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzNzAtMDNGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1lZGl1bSBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1NZWRpdW1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9PTGZmR0JUYUYwWEZPVzFnbnVIRjBWQlcyNlF4cFNqLV9aS21feFQ0aFd3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vT0xmZkdCVGFGMFhGT1cxZ251SEYwWWdwOVE4Z2JZcmhxR2xSYXZfSVhmay53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL09MZmZHQlRhRjBYRk9XMWdudUhGMGFFOGtNNHhXUjFfMWJZVVJSb2pSR2Mud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDAtMDI0RiwgVSsxRTAwLTFFRkYsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDRiwgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL09MZmZHQlRhRjBYRk9XMWdudUhGMGREaU5zUjVhLTlPZV9JdnB1OFhXbFkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubycpLCBsb2NhbCgnUm9ib3RvTW9uby1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vaE1xUE5Mc3VfZHl3TWE0Q19ERXBZMTRzWVlkSmc1ZFUycXpKRVZTdXRhMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubycpLCBsb2NhbCgnUm9ib3RvTW9uby1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vaE1xUE5Mc3VfZHl3TWE0Q19ERXBZX1pyYVIyVGc4dzJsem03a0xOTDAtdy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQ2MC0wNTJGLCBVKzIwQjQsIFUrMkRFMC0yREZGLCBVK0E2NDAtQTY5RjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubycpLCBsb2NhbCgnUm9ib3RvTW9uby1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vaE1xUE5Mc3VfZHl3TWE0Q19ERXBZd3RfUm02OTFMVGViS2ZZMlprS1NtSS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNb25vJyksIGxvY2FsKCdSb2JvdG9Nb25vLVJlZ3VsYXInKSwgdXJsKC9mb250LXJvYm90by9oTXFQTkxzdV9keXdNYTRDX0RFcFkxQlcyNlF4cFNqLV9aS21feFQ0aFd3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8nKSwgbG9jYWwoJ1JvYm90b01vbm8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL2hNcVBOTHN1X2R5d01hNENfREVwWTRncDlROGdiWXJocUdsUmF2X0lYZmsud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkM2LCBVKzAyREEsIFUrMDJEQywgVSsyMDAwLTIwNkYsIFUrMjA3NCwgVSsyMEFDLCBVKzIyMTIsIFUrMjIxNTsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubycpLCBsb2NhbCgnUm9ib3RvTW9uby1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vaE1xUE5Mc3VfZHl3TWE0Q19ERXBZNkU4a000eFdSMV8xYllVUlJvalJHYy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8nKSwgbG9jYWwoJ1JvYm90b01vbm8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL2hNcVBOTHN1X2R5d01hNENfREVwWTlEaU5zUjVhLTlPZV9JdnB1OFhXbFkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubyBCb2xkJyksIGxvY2FsKCdSb2JvdG9Nb25vLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9ONGR1VmM5QzU4dXdQaVk4XzU5RnoxeC1NMUkxdzVPTWlxblZGOHhCTGhVLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDAwLTA0NUYsIFUrMDQ5MC0wNDkxLCBVKzA0QjAtMDRCMSwgVSsyMTE2Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNb25vIEJvbGQnKSwgbG9jYWwoJ1JvYm90b01vbm8tQm9sZCcpLCB1cmwoL2ZvbnQtcm9ib3RvL040ZHVWYzlDNTh1d1BpWThfNTlGendYYUFYdXA1bVpsZks2eFJMcmhzY28ud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0NjAtMDUyRiwgVSsyMEI0LCBVKzJERTAtMkRGRiwgVStBNjQwLUE2OUY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvTW9uby1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vTjRkdVZjOUM1OHV3UGlZOF81OUZ6d242V3F4by14d3hpbERYUFU4Y2hWVS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNb25vIEJvbGQnKSwgbG9jYWwoJ1JvYm90b01vbm8tQm9sZCcpLCB1cmwoL2ZvbnQtcm9ib3RvL040ZHVWYzlDNTh1d1BpWThfNTlGejFUN2FKTEs2bktwbjM2SU13VGNNTWMud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzFGMDAtMUZGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubyBCb2xkJyksIGxvY2FsKCdSb2JvdG9Nb25vLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9ONGR1VmM5QzU4dXdQaVk4XzU5RnpfNzlfWnVVeENpZ00yRGVzcFRuRmF3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMDAwLTAwRkYsIFUrMDEzMSwgVSswMTUyLTAxNTMsIFUrMDJDNiwgVSswMkRBLCBVKzAyREMsIFUrMjAwMC0yMDZGLCBVKzIwNzQsIFUrMjBBQywgVSsyMjEyLCBVKzIyMTU7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvTW9uby1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vTjRkdVZjOUM1OHV3UGlZOF81OUZ6NGdkOU9FUFVDTjNBZFlXMGU4dGF0NC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvTW9uby1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vTjRkdVZjOUM1OHV3UGlZOF81OUZ6OGJJUVNZWm5XTGFXQzlRTkNwVEtfVS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMi0wMTAzLCBVKzFFQTAtMUVGOSwgVSsyMEFCOwp9Cjwvc3R5bGU+CgoKCjxzdHlsZT4ubWF0LWJhZGdlLWNvbnRlbnR7Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsIC5tYXQtYmFkZ2UtY29udGVudHtmb250LXNpemU6OXB4fS5tYXQtYmFkZ2UtbGFyZ2UgLm1hdC1iYWRnZS1jb250ZW50e2ZvbnQtc2l6ZToyNHB4fS5tYXQtaDEsLm1hdC1oZWFkbGluZSwubWF0LXR5cG9ncmFwaHkgaDF7Zm9udDo0MDAgMjRweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDIsLm1hdC10aXRsZSwubWF0LXR5cG9ncmFwaHkgaDJ7Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDMsLm1hdC1zdWJoZWFkaW5nLTIsLm1hdC10eXBvZ3JhcGh5IGgze2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg0LC5tYXQtc3ViaGVhZGluZy0xLC5tYXQtdHlwb2dyYXBoeSBoNHtmb250OjQwMCAxNXB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNSwubWF0LXR5cG9ncmFwaHkgaDV7Zm9udDo0MDAgY2FsYygxNHB4ICogMC44MykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtaDYsLm1hdC10eXBvZ3JhcGh5IGg2e2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuNjcpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWJvZHktc3Ryb25nLC5tYXQtYm9keS0ye2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keSwubWF0LWJvZHktMSwubWF0LXR5cG9ncmFwaHl7Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5IHAsLm1hdC1ib2R5LTEgcCwubWF0LXR5cG9ncmFwaHkgcHttYXJnaW46MCAwIDEycHh9Lm1hdC1zbWFsbCwubWF0LWNhcHRpb257Zm9udDo0MDAgMTJweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1kaXNwbGF5LTQsLm1hdC10eXBvZ3JhcGh5IC5tYXQtZGlzcGxheS00e2ZvbnQ6MzAwIDExMnB4LzExMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wNWVtO21hcmdpbjowIDAgNTZweH0ubWF0LWRpc3BsYXktMywubWF0LXR5cG9ncmFwaHkgLm1hdC1kaXNwbGF5LTN7Zm9udDo0MDAgNTZweC81NnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMmVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMiwubWF0LXR5cG9ncmFwaHkgLm1hdC1kaXNwbGF5LTJ7Zm9udDo0MDAgNDVweC80OHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMDVlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTEsLm1hdC10eXBvZ3JhcGh5IC5tYXQtZGlzcGxheS0xe2ZvbnQ6NDAwIDM0cHgvNDBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJ7Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b24sLm1hdC1yYWlzZWQtYnV0dG9uLC5tYXQtaWNvbi1idXR0b24sLm1hdC1zdHJva2VkLWJ1dHRvbiwubWF0LWZsYXQtYnV0dG9uLC5tYXQtZmFiLC5tYXQtbWluaS1mYWJ7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWJ1dHRvbi10b2dnbGV7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZHtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxle2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhcmQtaGVhZGVyIC5tYXQtY2FyZC10aXRsZXtmb250LXNpemU6MjBweH0ubWF0LWNhcmQtc3VidGl0bGUsLm1hdC1jYXJkLWNvbnRlbnR7Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveHtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXQgLm1hdC1jaGVja2JveC1sYWJlbHtsaW5lLWhlaWdodDoyNHB4fS5tYXQtY2hpcHtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jaGlwIC5tYXQtY2hpcC10cmFpbGluZy1pY29uLm1hdC1pY29uLC5tYXQtY2hpcCAubWF0LWNoaXAtcmVtb3ZlLm1hdC1pY29ue2ZvbnQtc2l6ZToxOHB4fS5tYXQtdGFibGV7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGx7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2VsbCwubWF0LWZvb3Rlci1jZWxse2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2FsZW5kYXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FsZW5kYXItYm9keXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWwsLm1hdC1jYWxlbmRhci1wZXJpb2QtYnV0dG9ue2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlciB0aHtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo0MDB9Lm1hdC1kaWFsb2ctdGl0bGV7Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVye2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudHtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGR7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTI1O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJ7cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29ue2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLWJ1dHRvbiwubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbi1idXR0b257aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLWJ1dHRvbiAubWF0LWljb24sLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb24tYnV0dG9uIC5tYXQtaWNvbntoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXh7cGFkZGluZzouNWVtIDA7Ym9yZGVyLXRvcDouODQzNzVlbSBzb2xpZCB0cmFuc3BhcmVudH0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcjpmb2N1cysubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJ7dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVse3RvcDoxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcntmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtd3JhcHBlcntwYWRkaW5nLWJvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcjpmb2N1cysubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sOi13ZWJraXQtYXV0b2ZpbGwrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMnB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjNlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM1MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtbGFiZWx7dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJ7bWFyZ2luLXRvcDouNTQxNjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjY2NjY2NjY2NjdlbSl9QG1lZGlhIHByaW50ey5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMmVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sOi13ZWJraXQtYXV0b2ZpbGwrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIxZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nOi4yNWVtIDAgLjc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0b3A6MS4wOTM3NWVtO21hcmdpbi10b3A6LTAuNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcltsYWJlbF06bm90KDpsYWJlbC1zaG93bikrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nOjFlbSAwIDFlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RvcDoxLjg0Mzc1ZW07bWFyZ2luLXRvcDotMC4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcltsYWJlbF06bm90KDpsYWJlbC1zaG93bikrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXIsLm1hdC1ncmlkLXRpbGUtZm9vdGVye2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlciAubWF0LWxpbmUsLm1hdC1ncmlkLXRpbGUtZm9vdGVyIC5tYXQtbGluZXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyIC5tYXQtbGluZTpudGgtY2hpbGQobisyKSwubWF0LWdyaWQtdGlsZS1mb290ZXIgLm1hdC1saW5lOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50e21hcmdpbi10b3A6LTAuMDYyNWVtfS5tYXQtbWVudS1pdGVte2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1wYWdpbmF0b3IsLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplIC5tYXQtc2VsZWN0LXRyaWdnZXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9ue2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdHtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3QtdHJpZ2dlcntoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50e2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsLC5tYXQtc3RlcHBlci1ob3Jpem9udGFse2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXN0ZXAtbGFiZWx7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3J7Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcntmb250LXNpemU6MTRweH0ubWF0LXN0ZXAtbGFiZWwtc2VsZWN0ZWR7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3Vwe2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1saW5re2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyLC5tYXQtdG9vbGJhciBoMSwubWF0LXRvb2xiYXIgaDIsLm1hdC10b29sYmFyIGgzLC5tYXQtdG9vbGJhciBoNCwubWF0LXRvb2xiYXIgaDUsLm1hdC10b29sYmFyIGg2e2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowfS5tYXQtdG9vbHRpcHtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldHtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVte2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3Qtb3B0aW9ue2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3QtYmFzZSAubWF0LWxpc3QtaXRlbXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZSAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmV7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGluZTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZSAubWF0LWxpc3Qtb3B0aW9ue2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saW5le3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGluZTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZSAubWF0LXN1YmhlYWRlcntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXSAubWF0LWxpc3QtaXRlbXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saW5le3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saW5lOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9ue2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGluZXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saW5lOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXSAubWF0LXN1YmhlYWRlcntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtb3B0aW9ue2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTZweH0ubWF0LW9wdGdyb3VwLWxhYmVse2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFye2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweH0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb257bGluZS1oZWlnaHQ6MTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRyZWV7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlLC5tYXQtbmVzdGVkLXRyZWUtbm9kZXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGV7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtcmlwcGxlOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtcmlwcGxlLm1hdC1yaXBwbGUtdW5ib3VuZGVke292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudHtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItcmFkaXVzOjUwJTtwb2ludGVyLWV2ZW50czpub25lO3RyYW5zaXRpb246b3BhY2l0eSx0cmFuc2Zvcm0gMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpO3RyYW5zZm9ybTpzY2FsZSgwKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtcmlwcGxlLWVsZW1lbnR7ZGlzcGxheTpub25lfS5jZGstdmlzdWFsbHktaGlkZGVue2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1vdmVybGF5LWNvbnRhaW5lciwuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJ7cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVye3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktY29udGFpbmVyOmVtcHR5e2Rpc3BsYXk6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJ7ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZXtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czphdXRvO2JveC1zaXppbmc6Ym9yZGVyLWJveDt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O21heC13aWR0aDoxMDAlO21heC1oZWlnaHQ6MTAwJX0uY2RrLW92ZXJsYXktYmFja2Ryb3B7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKTtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmd7b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmd7b3BhY2l0eTouNn0uY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcHtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjMyKX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AsLmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmd7b3BhY2l0eTowfS5jZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94e3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2t7cG9zaXRpb246Zml4ZWQ7d2lkdGg6MTAwJTtvdmVyZmxvdy15OnNjcm9sbH1Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0ey8qISovfUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5key8qISovfS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWQ6LXdlYmtpdC1hdXRvZmlsbHthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQgMHMgMW1zfS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWQ6bm90KDotd2Via2l0LWF1dG9maWxsKXthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIDBzIDFtc310ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemV7cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ3twYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDphdXRvICFpbXBvcnRhbnQ7b3ZlcmZsb3c6aGlkZGVuICFpbXBvcnRhbnR9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZy1maXJlZm94e3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OjAgIWltcG9ydGFudH0ubWF0LWZvY3VzLWluZGljYXRvcntwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3J7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEpfS5tYXQtb3B0aW9ue2NvbG9yOiMyMTIxMjF9Lm1hdC1vcHRpb246aG92ZXI6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKSwubWF0LW9wdGlvbjpmb2N1czpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDQpfS5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tbXVsdGlwbGUpOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1vcHRpb24ubWF0LWFjdGl2ZXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjA0KTtjb2xvcjojMjEyMTIxfS5tYXQtb3B0aW9uLm1hdC1vcHRpb24tZGlzYWJsZWR7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtcHJpbWFyeSAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtjb2xvcjojZjU3YzAwfS5tYXQtYWNjZW50IC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2NvbG9yOiNmZjk4MDB9Lm1hdC13YXJuIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2NvbG9yOiNmNDQzMzZ9Lm1hdC1vcHRncm91cC1sYWJlbHtjb2xvcjojNjE2MTYxfS5tYXQtb3B0Z3JvdXAtZGlzYWJsZWQgLm1hdC1vcHRncm91cC1sYWJlbHtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1wc2V1ZG8tY2hlY2tib3h7Y29sb3I6IzYxNjE2MX0ubWF0LXBzZXVkby1jaGVja2JveDo6YWZ0ZXJ7Y29sb3I6I2ZmZn0ubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZHtjb2xvcjojYjBiMGIwfS5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLC5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRle2JhY2tncm91bmQ6I2Y1N2MwMH0ubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUsLm1hdC1hY2NlbnQgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCwubWF0LWFjY2VudCAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRle2JhY2tncm91bmQ6I2ZmOTgwMH0ubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCwubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZXtiYWNrZ3JvdW5kOiNmNDQzMzZ9Lm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVkLC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZHtiYWNrZ3JvdW5kOiNiMGIwYjB9Lm1hdC1hcHAtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWVsZXZhdGlvbi16MHtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejF7Ym94LXNoYWRvdzowcHggMnB4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMXB4IDFweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16Mntib3gtc2hhZG93OjBweCAzcHggMXB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAycHggMnB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoze2JveC1zaGFkb3c6MHB4IDNweCAzcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDNweCA0cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCA4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejR7Ym94LXNoYWRvdzowcHggMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNHB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejV7Ym94LXNoYWRvdzowcHggM3B4IDVweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNXB4IDhweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDE0cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejZ7Ym94LXNoYWRvdzowcHggM3B4IDVweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNnB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAxOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXo3e2JveC1zaGFkb3c6MHB4IDRweCA1cHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDdweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAycHggMTZweCAxcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16OHtib3gtc2hhZG93OjBweCA1cHggNXB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA4cHggMTBweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggM3B4IDE0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejl7Ym94LXNoYWRvdzowcHggNXB4IDZweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggOXB4IDEycHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDNweCAxNnB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxMHtib3gtc2hhZG93OjBweCA2cHggNnB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxMHB4IDE0cHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDRweCAxOHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxMXtib3gtc2hhZG93OjBweCA2cHggN3B4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxMXB4IDE1cHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDRweCAyMHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxMntib3gtc2hhZG93OjBweCA3cHggOHB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxMnB4IDE3cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDVweCAyMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxM3tib3gtc2hhZG93OjBweCA3cHggOHB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxM3B4IDE5cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDVweCAyNHB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxNHtib3gtc2hhZG93OjBweCA3cHggOXB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxNHB4IDIxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDVweCAyNnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxNXtib3gtc2hhZG93OjBweCA4cHggOXB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxNXB4IDIycHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDZweCAyOHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxNntib3gtc2hhZG93OjBweCA4cHggMTBweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMTZweCAyNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA2cHggMzBweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MTd7Ym94LXNoYWRvdzowcHggOHB4IDExcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDE3cHggMjZweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggNnB4IDMycHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejE4e2JveC1zaGFkb3c6MHB4IDlweCAxMXB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxOHB4IDI4cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDdweCAzNHB4IDZweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxOXtib3gtc2hhZG93OjBweCA5cHggMTJweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMTlweCAyOXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA3cHggMzZweCA2cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MjB7Ym94LXNoYWRvdzowcHggMTBweCAxM3B4IC02cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAyMHB4IDMxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDhweCAzOHB4IDdweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoyMXtib3gtc2hhZG93OjBweCAxMHB4IDEzcHggLTZweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDIxcHggMzNweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggOHB4IDQwcHggN3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejIye2JveC1zaGFkb3c6MHB4IDEwcHggMTRweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMjJweCAzNXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA4cHggNDJweCA3cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MjN7Ym94LXNoYWRvdzowcHggMTFweCAxNHB4IC03cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAyM3B4IDM2cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDlweCA0NHB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoyNHtib3gtc2hhZG93OjBweCAxMXB4IDE1cHggLTdweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDI0cHggMzhweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggOXB4IDQ2cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC10aGVtZS1sb2FkZWQtbWFya2Vye2Rpc3BsYXk6bm9uZX0ubWF0LWF1dG9jb21wbGV0ZS1wYW5lbHtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWF1dG9jb21wbGV0ZS1wYW5lbDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA0cHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWF1dG9jb21wbGV0ZS1wYW5lbCAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtYWN0aXZlKTpub3QoOmhvdmVyKXtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC1hdXRvY29tcGxldGUtcGFuZWwgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LWFjdGl2ZSk6bm90KDpob3Zlcik6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtjb2xvcjojMjEyMTIxfS5tYXQtYmFkZ2UtY29udGVudHtjb2xvcjojZmZmO2JhY2tncm91bmQ6I2Y1N2MwMH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYmFkZ2UtY29udGVudHtvdXRsaW5lOnNvbGlkIDFweDtib3JkZXItcmFkaXVzOjB9Lm1hdC1iYWRnZS1hY2NlbnQgLm1hdC1iYWRnZS1jb250ZW50e2JhY2tncm91bmQ6I2ZmOTgwMDtjb2xvcjojZmZmfS5tYXQtYmFkZ2Utd2FybiAubWF0LWJhZGdlLWNvbnRlbnR7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOiNmNDQzMzZ9Lm1hdC1iYWRnZXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LWJhZGdlLWhpZGRlbiAubWF0LWJhZGdlLWNvbnRlbnR7ZGlzcGxheTpub25lfS5tYXQtYmFkZ2UtZGlzYWJsZWQgLm1hdC1iYWRnZS1jb250ZW50e2JhY2tncm91bmQ6I2JkYmRiZDtjb2xvcjojNzU3NTc1fS5tYXQtYmFkZ2UtY29udGVudHtwb3NpdGlvbjphYnNvbHV0ZTt0ZXh0LWFsaWduOmNlbnRlcjtkaXNwbGF5OmlubGluZS1ibG9jaztib3JkZXItcmFkaXVzOjUwJTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAyMDBtcyBlYXNlLWluLW91dDt0cmFuc2Zvcm06c2NhbGUoMC42KTtvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7cG9pbnRlci1ldmVudHM6bm9uZX0ubmctYW5pbWF0ZS1kaXNhYmxlZCAubWF0LWJhZGdlLWNvbnRlbnQsLm1hdC1iYWRnZS1jb250ZW50Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxle3RyYW5zaXRpb246bm9uZX0ubWF0LWJhZGdlLWNvbnRlbnQubWF0LWJhZGdlLWFjdGl2ZXt0cmFuc2Zvcm06bm9uZX0ubWF0LWJhZGdlLXNtYWxsIC5tYXQtYmFkZ2UtY29udGVudHt3aWR0aDoxNnB4O2hlaWdodDoxNnB4O2xpbmUtaGVpZ2h0OjE2cHh9Lm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYWJvdmUgLm1hdC1iYWRnZS1jb250ZW50e3RvcDotOHB4fS5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWJlbG93IC5tYXQtYmFkZ2UtY29udGVudHtib3R0b206LThweH0ubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6LTE2cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDphdXRvO3JpZ2h0Oi0xNnB4fS5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDotMTZweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0OmF1dG87bGVmdDotMTZweH0ubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6LThweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0OmF1dG87cmlnaHQ6LThweH0ubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6LThweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0OmF1dG87bGVmdDotOHB4fS5tYXQtYmFkZ2UtbWVkaXVtIC5tYXQtYmFkZ2UtY29udGVudHt3aWR0aDoyMnB4O2hlaWdodDoyMnB4O2xpbmUtaGVpZ2h0OjIycHh9Lm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWFib3ZlIC5tYXQtYmFkZ2UtY29udGVudHt0b3A6LTExcHh9Lm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWJlbG93IC5tYXQtYmFkZ2UtY29udGVudHtib3R0b206LTExcHh9Lm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDotMjJweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDphdXRvO3JpZ2h0Oi0yMnB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6LTIycHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6YXV0bztsZWZ0Oi0yMnB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6LTExcHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6YXV0bztyaWdodDotMTFweH0ubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi0xMXB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0OmF1dG87bGVmdDotMTFweH0ubWF0LWJhZGdlLWxhcmdlIC5tYXQtYmFkZ2UtY29udGVudHt3aWR0aDoyOHB4O2hlaWdodDoyOHB4O2xpbmUtaGVpZ2h0OjI4cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYWJvdmUgLm1hdC1iYWRnZS1jb250ZW50e3RvcDotMTRweH0ubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1iZWxvdyAubWF0LWJhZGdlLWNvbnRlbnR7Ym90dG9tOi0xNHB4fS5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDotMjhweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0OmF1dG87cmlnaHQ6LTI4cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi0yOHB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6YXV0bztsZWZ0Oi0yOHB4fS5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDotMTRweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0OmF1dG87cmlnaHQ6LTE0cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi0xNHB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6YXV0bztsZWZ0Oi0xNHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcntib3gtc2hhZG93OjBweCA4cHggMTBweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMTZweCAyNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA2cHggMzBweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKTtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWJ1dHRvbiwubWF0LWljb24tYnV0dG9uLC5tYXQtc3Ryb2tlZC1idXR0b257Y29sb3I6aW5oZXJpdDtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50fS5tYXQtYnV0dG9uLm1hdC1wcmltYXJ5LC5tYXQtaWNvbi1idXR0b24ubWF0LXByaW1hcnksLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtcHJpbWFyeXtjb2xvcjojZjU3YzAwfS5tYXQtYnV0dG9uLm1hdC1hY2NlbnQsLm1hdC1pY29uLWJ1dHRvbi5tYXQtYWNjZW50LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWFjY2VudHtjb2xvcjojZmY5ODAwfS5tYXQtYnV0dG9uLm1hdC13YXJuLC5tYXQtaWNvbi1idXR0b24ubWF0LXdhcm4sLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtd2Fybntjb2xvcjojZjQ0MzM2fS5tYXQtYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtaWNvbi1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWljb24tYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWljb24tYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1pY29uLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWljb24tYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMH0ubWF0LWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwfS5tYXQtYnV0dG9uLm1hdC13YXJuIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbi5tYXQtd2FybiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXdhcm4gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9Lm1hdC1idXR0b24gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LWljb24tYnV0dG9uIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1zdHJva2VkLWJ1dHRvbiAubWF0LXJpcHBsZS1lbGVtZW50e29wYWNpdHk6LjE7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3J9Lm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kOiMwMDB9Lm1hdC1zdHJva2VkLWJ1dHRvbjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpe2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1mbGF0LWJ1dHRvbiwubWF0LXJhaXNlZC1idXR0b24sLm1hdC1mYWIsLm1hdC1taW5pLWZhYntjb2xvcjojMjEyMTIxO2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubWF0LWZsYXQtYnV0dG9uLm1hdC1wcmltYXJ5LC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeSwubWF0LWZhYi5tYXQtcHJpbWFyeSwubWF0LW1pbmktZmFiLm1hdC1wcmltYXJ5e2NvbG9yOiNmZmZ9Lm1hdC1mbGF0LWJ1dHRvbi5tYXQtYWNjZW50LC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYWNjZW50LC5tYXQtZmFiLm1hdC1hY2NlbnQsLm1hdC1taW5pLWZhYi5tYXQtYWNjZW50e2NvbG9yOiNmZmZ9Lm1hdC1mbGF0LWJ1dHRvbi5tYXQtd2FybiwubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm4sLm1hdC1mYWIubWF0LXdhcm4sLm1hdC1taW5pLWZhYi5tYXQtd2Fybntjb2xvcjojZmZmfS5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZsYXQtYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXJhaXNlZC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmFiLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mYWIubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmFiLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mYWIubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtbWluaS1mYWIubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LW1pbmktZmFiLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LW1pbmktZmFiLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1taW5pLWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWR7Y29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnksLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5LC5tYXQtZmFiLm1hdC1wcmltYXJ5LC5tYXQtbWluaS1mYWIubWF0LXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfS5tYXQtZmxhdC1idXR0b24ubWF0LWFjY2VudCwubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudCwubWF0LWZhYi5tYXQtYWNjZW50LC5tYXQtbWluaS1mYWIubWF0LWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDB9Lm1hdC1mbGF0LWJ1dHRvbi5tYXQtd2FybiwubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm4sLm1hdC1mYWIubWF0LXdhcm4sLm1hdC1taW5pLWZhYi5tYXQtd2FybntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC1mbGF0LWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmxhdC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZsYXQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mYWIubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZhYi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mYWIubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1taW5pLWZhYi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtbWluaS1mYWIubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtbWluaS1mYWIubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LW1pbmktZmFiLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWZsYXQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1mYWIubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LW1pbmktZmFiLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX0ubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtZmFiLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LW1pbmktZmFiLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfS5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LWZhYi5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtbWluaS1mYWIubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfS5tYXQtc3Ryb2tlZC1idXR0b246bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksLm1hdC1mbGF0LWJ1dHRvbjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1yYWlzZWQtYnV0dG9uOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDJweCAycHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1yYWlzZWQtYnV0dG9uOm5vdCgubWF0LWJ1dHRvbi1kaXNhYmxlZCk6YWN0aXZlOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDVweCA1cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDhweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAzcHggMTRweCAycHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LXJhaXNlZC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1mYWI6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksLm1hdC1taW5pLWZhYjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAzcHggNXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA2cHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDE4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1mYWI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKTphY3RpdmU6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksLm1hdC1taW5pLWZhYjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpOmFjdGl2ZTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCA3cHggOHB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxMnB4IDE3cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDVweCAyMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZmFiLm1hdC1idXR0b24tZGlzYWJsZWQ6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksLm1hdC1taW5pLWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZSwubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXB7Ym94LXNoYWRvdzowcHggM3B4IDFweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMnB4IDJweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkLC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJke2JveC1zaGFkb3c6bm9uZX0ubWF0LWJ1dHRvbi10b2dnbGV7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtYnV0dG9uLXRvZ2dsZSAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZHtjb2xvcjojMjEyMTIxO2JhY2tncm91bmQ6I2ZmZn0ubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDB9Lm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlKy5tYXQtYnV0dG9uLXRvZ2dsZXtib3JkZXItbGVmdDpzb2xpZCAxcHggcmdiYSgwLDAsMCwuMTIpfVtkaXI9cnRsXSAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWJ1dHRvbi10b2dnbGUrLm1hdC1idXR0b24tdG9nZ2xle2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLXJpZ2h0OnNvbGlkIDFweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQubWF0LWJ1dHRvbi10b2dnbGUtdmVydGljYWwgLm1hdC1idXR0b24tdG9nZ2xlKy5tYXQtYnV0dG9uLXRvZ2dsZXtib3JkZXItbGVmdDpub25lO2JvcmRlci1yaWdodDpub25lO2JvcmRlci10b3A6c29saWQgMXB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZHtiYWNrZ3JvdW5kLWNvbG9yOiNlMGUwZTA7Y29sb3I6IzYxNjE2MX0ubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZC5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJke2NvbG9yOiMyMTIxMjF9Lm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVke2NvbG9yOnJnYmEoMCwwLDAsLjI2KTtiYWNrZ3JvdW5kLWNvbG9yOiNlZWV9Lm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVkLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmR7YmFja2dyb3VuZDojZmZmfS5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZC5tYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2Vke2JhY2tncm91bmQtY29sb3I6I2JkYmRiZH0ubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkLC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJke2JvcmRlcjpzb2xpZCAxcHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtYnV0dG9uLXRvZ2dsZS1sYWJlbC1jb250ZW50e2xpbmUtaGVpZ2h0OjQ4cHh9Lm1hdC1jYXJke2JhY2tncm91bmQ6I2ZmZjtjb2xvcjojMjEyMTIxfS5tYXQtY2FyZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAycHggMXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxcHggMXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggM3B4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtY2FyZC5tYXQtY2FyZC1mbGF0Om5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWNhcmQtc3VidGl0bGV7Y29sb3I6IzYxNjE2MX0ubWF0LWNoZWNrYm94LWZyYW1le2JvcmRlci1jb2xvcjojNjE2MTYxfS5tYXQtY2hlY2tib3gtY2hlY2ttYXJre2ZpbGw6I2ZmZn0ubWF0LWNoZWNrYm94LWNoZWNrbWFyay1wYXRoe3N0cm9rZTojZmZmICFpbXBvcnRhbnR9Lm1hdC1jaGVja2JveC1taXhlZG1hcmt7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHJpbWFyeSAubWF0LWNoZWNrYm94LWJhY2tncm91bmQsLm1hdC1jaGVja2JveC1jaGVja2VkLm1hdC1wcmltYXJ5IC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Lm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1hY2NlbnQgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLC5tYXQtY2hlY2tib3gtY2hlY2tlZC5tYXQtYWNjZW50IC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDB9Lm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC13YXJuIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCwubWF0LWNoZWNrYm94LWNoZWNrZWQubWF0LXdhcm4gLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn0ubWF0LWNoZWNrYm94LWRpc2FibGVkLm1hdC1jaGVja2JveC1jaGVja2VkIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCwubWF0LWNoZWNrYm94LWRpc2FibGVkLm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiNiMGIwYjB9Lm1hdC1jaGVja2JveC1kaXNhYmxlZDpub3QoLm1hdC1jaGVja2JveC1jaGVja2VkKSAubWF0LWNoZWNrYm94LWZyYW1le2JvcmRlci1jb2xvcjojYjBiMGIwfS5tYXQtY2hlY2tib3gtZGlzYWJsZWQgLm1hdC1jaGVja2JveC1sYWJlbHtjb2xvcjojNjE2MTYxfS5tYXQtY2hlY2tib3ggLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiMwMDB9Lm1hdC1jaGVja2JveC1jaGVja2VkOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtY2hlY2tib3g6YWN0aXZlOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQ6I2Y1N2MwMH0ubWF0LWNoZWNrYm94LWNoZWNrZWQ6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LWNoZWNrYm94OmFjdGl2ZTpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQ6I2ZmOTgwMH0ubWF0LWNoZWNrYm94LWNoZWNrZWQ6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1jaGVja2JveDphY3RpdmU6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZDojZjQ0MzM2fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcHtiYWNrZ3JvdW5kLWNvbG9yOiNlMGUwZTA7Y29sb3I6IzIxMjEyMX0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAgLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjojMjEyMTIxO29wYWNpdHk6LjR9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwOm5vdCgubWF0LWNoaXAtZGlzYWJsZWQpOmFjdGl2ZXtib3gtc2hhZG93OjBweCAzcHggM3B4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAzcHggNHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcDpub3QoLm1hdC1jaGlwLWRpc2FibGVkKSAubWF0LWNoaXAtcmVtb3ZlOmhvdmVye29wYWNpdHk6LjU0fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1kaXNhYmxlZHtvcGFjaXR5Oi40fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcDo6YWZ0ZXJ7YmFja2dyb3VuZDojMDAwfS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDA7Y29sb3I6I2ZmZn0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXByaW1hcnkgLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjojZmZmO29wYWNpdHk6LjR9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXdhcm57YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2O2NvbG9yOiNmZmZ9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC13YXJuIC5tYXQtY2hpcC1yZW1vdmV7Y29sb3I6I2ZmZjtvcGFjaXR5Oi40fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwO2NvbG9yOiNmZmZ9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1hY2NlbnQgLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjojZmZmO29wYWNpdHk6LjR9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfS5tYXQtdGFibGV7YmFja2dyb3VuZDojZmZmfS5tYXQtdGFibGUgdGhlYWQsLm1hdC10YWJsZSB0Ym9keSwubWF0LXRhYmxlIHRmb290LG1hdC1oZWFkZXItcm93LG1hdC1yb3csbWF0LWZvb3Rlci1yb3csW21hdC1oZWFkZXItcm93XSxbbWF0LXJvd10sW21hdC1mb290ZXItcm93XSwubWF0LXRhYmxlLXN0aWNreXtiYWNrZ3JvdW5kOmluaGVyaXR9bWF0LXJvdyxtYXQtaGVhZGVyLXJvdyxtYXQtZm9vdGVyLXJvdyx0aC5tYXQtaGVhZGVyLWNlbGwsdGQubWF0LWNlbGwsdGQubWF0LWZvb3Rlci1jZWxse2JvcmRlci1ib3R0b20tY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtaGVhZGVyLWNlbGx7Y29sb3I6IzYxNjE2MX0ubWF0LWNlbGwsLm1hdC1mb290ZXItY2VsbHtjb2xvcjojMjEyMTIxfS5tYXQtY2FsZW5kYXItYXJyb3d7Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1kYXRlcGlja2VyLXRvZ2dsZSwubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LWNhbGVuZGFyLW5leHQtYnV0dG9uLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtY2FsZW5kYXItcHJldmlvdXMtYnV0dG9ue2NvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcntjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXItZGl2aWRlcjo6YWZ0ZXJ7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVse2NvbG9yOiM2MTYxNjF9Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudCwubWF0LWRhdGUtcmFuZ2UtaW5wdXQtc2VwYXJhdG9ye2NvbG9yOiMyMTIxMjE7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50fS5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2NvbG9yOiM3NTc1NzV9Lm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZGF0ZS1yYW5nZS1pbnB1dC1zZXBhcmF0b3J7Y29sb3I6Izc1NzU3NX0ubWF0LWNhbGVuZGFyLWJvZHktaW4tcHJldmlld3tjb2xvcjpyZ2JhKDAsMCwwLC4yNCl9Lm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS10b2RheTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMTgpfS5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyNDUsMTI0LDAsLjIpfS5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCwubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyNDksMTcxLDAsLjIpfS5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3JlLFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMjQ1LCAxMjQsIDAsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3JlLFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBsZWZ0LCByZ2JhKDI0NSwgMTI0LCAwLCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfS5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2UubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmFmdGVye2JhY2tncm91bmQ6I2E4ZGFiNX0ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQsLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQ6IzQ2YTM1ZX0ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwO2NvbG9yOiNmZmZ9Lm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ1LDEyNCwwLC40KX0ubWF0LWNhbGVuZGFyLWJvZHktdG9kYXkubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggI2ZmZn0ubWF0LWNhbGVuZGFyLWJvZHktY2VsbDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkKTpob3Zlcj4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpLC5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCksLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDUsMTI0LDAsLjMpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50e2JveC1zaGFkb3c6MHB4IDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDRweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpO2JhY2tncm91bmQtY29sb3I6I2ZmZjtjb2xvcjojMjEyMTIxfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDI1NSwxNTIsMCwuMil9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyNDksMTcxLDAsLjIpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmUsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDI1NSwgMTUyLCAwLCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3JlLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgW2Rpcj1ydGxdIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIGxlZnQsIHJnYmEoMjU1LCAxNTIsIDAsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2UubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmFmdGVye2JhY2tncm91bmQ6I2E4ZGFiNX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kOiM0NmEzNWV9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwO2NvbG9yOiNmZmZ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTUyLDAsLjQpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY2VsbDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkKTpob3Zlcj4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKSwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDE1MiwwLC4zKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjQ0LDY3LDU0LC4yKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjQ5LDE3MSwwLC4yKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZSwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDI0NCwgNjcsIDU0LCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1lbmQ6OmJlZm9yZSwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwgcmdiYSgyNDQsIDY3LCA1NCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjphZnRlcntiYWNrZ3JvdW5kOiNhOGRhYjV9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kOiM0NmEzNWV9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNjtjb2xvcjojZmZmfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuNCl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWNlbGw6bm90KC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZCk6aG92ZXI+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKSwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC4zKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC10b3VjaHtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1kYXRlcGlja2VyLXRvZ2dsZS1hY3RpdmV7Y29sb3I6I2Y1N2MwMH0ubWF0LWRhdGVwaWNrZXItdG9nZ2xlLWFjdGl2ZS5tYXQtYWNjZW50e2NvbG9yOiNmZjk4MDB9Lm1hdC1kYXRlcGlja2VyLXRvZ2dsZS1hY3RpdmUubWF0LXdhcm57Y29sb3I6I2Y0NDMzNn0ubWF0LWRhdGUtcmFuZ2UtaW5wdXQtaW5uZXJbZGlzYWJsZWRde2NvbG9yOiM3NTc1NzV9Lm1hdC1kaWFsb2ctY29udGFpbmVye2JveC1zaGFkb3c6MHB4IDExcHggMTVweCAtN3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMjRweCAzOHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA5cHggNDZweCA4cHggcmdiYSgwLCAwLCAwLCAwLjEyKTtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWRpdmlkZXJ7Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1kaXZpZGVyLXZlcnRpY2Fse2JvcmRlci1yaWdodC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1leHBhbnNpb24tcGFuZWx7YmFja2dyb3VuZDojZmZmO2NvbG9yOiMyMTIxMjF9Lm1hdC1leHBhbnNpb24tcGFuZWw6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggM3B4IDFweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMnB4IDJweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWFjdGlvbi1yb3d7Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1leHBhbnNpb24tcGFuZWwgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSksLm1hdC1leHBhbnNpb24tcGFuZWwgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKSwubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoLm1hdC1leHBhbmRlZCkgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyOmhvdmVyOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSl7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNCl9QG1lZGlhKGhvdmVyOiBub25lKXsubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoLm1hdC1leHBhbmRlZCk6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI6aG92ZXJ7YmFja2dyb3VuZDojZmZmfX0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGV7Y29sb3I6IzIxMjEyMX0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24sLm1hdC1leHBhbnNpb24taW5kaWNhdG9yOjphZnRlcntjb2xvcjojNjE2MTYxfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlclthcmlhLWRpc2FibGVkPXRydWVde2NvbG9yOnJnYmEoMCwwLDAsLjI2KX0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbYXJpYS1kaXNhYmxlZD10cnVlXSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGUsLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0gLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9ue2NvbG9yOmluaGVyaXR9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVye2hlaWdodDo0OHB4fS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci5tYXQtZXhwYW5kZWR7aGVpZ2h0OjY0cHh9Lm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOnJnYmEoOTcsOTcsOTcsLjYpfS5tYXQtaGludHtjb2xvcjpyZ2JhKDk3LDk3LDk3LC42KX0ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOiNmNTdjMDB9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbC5tYXQtYWNjZW50e2NvbG9yOiNmZjk4MDB9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbC5tYXQtd2Fybntjb2xvcjojZjQ0MzM2fS5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmVxdWlyZWQtbWFya2Vye2NvbG9yOiNmZjk4MDB9Lm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUubWF0LWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDB9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUubWF0LXdhcm57YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb2N1c2VkOm5vdCgubWF0LWZvcm0tZmllbGQtaW52YWxpZCkgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjojZjU3YzAwfS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb2N1c2VkOm5vdCgubWF0LWZvcm0tZmllbGQtaW52YWxpZCkubWF0LWFjY2VudCAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVye2NvbG9yOiNmZjk4MDB9Lm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvY3VzZWQ6bm90KC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkKS5tYXQtd2FybiAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVye2NvbG9yOiNmNDQzMzZ9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOiNmNDQzMzZ9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLm1hdC1hY2NlbnQsLm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIC5tYXQtZm9ybS1maWVsZC1yZXF1aXJlZC1tYXJrZXJ7Y29sb3I6I2Y0NDMzNn0ubWF0LWZvcm0tZmllbGQubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUubWF0LWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC1lcnJvcntjb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6IzYxNjE2MX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1oaW50e2NvbG9yOiM2MTYxNjF9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC40Mil9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMCwgMCwgMCwgMC40MikgMCUsIHJnYmEoMCwgMCwgMCwgMC40MikgMzMlLCB0cmFuc3BhcmVudCAwJSk7YmFja2dyb3VuZC1zaXplOjRweCAxMDAlO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC40Mil9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgwLCAwLCAwLCAwLjQyKSAwJSwgcmdiYSgwLCAwLCAwLCAwLjQyKSAzMyUsIHRyYW5zcGFyZW50IDAlKTtiYWNrZ3JvdW5kLXNpemU6NHB4IDEwMCU7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXh9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtZmxleHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjA0KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1mbGV4e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMDIpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZTo6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuNDIpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOiM3NTc1NzV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lOjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le2NvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiNmNTdjMDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZC5tYXQtYWNjZW50IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiNmZjk4MDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZC5tYXQtd2FybiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tjb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtaW52YWxpZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiNmNDQzMzZ9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6Izc1NzU3NX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le2NvbG9yOnJnYmEoMCwwLDAsLjA2KX0ubWF0LWljb24ubWF0LXByaW1hcnl7Y29sb3I6I2Y1N2MwMH0ubWF0LWljb24ubWF0LWFjY2VudHtjb2xvcjojZmY5ODAwfS5tYXQtaWNvbi5tYXQtd2Fybntjb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0IC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6IzYxNjE2MX0ubWF0LWlucHV0LWVsZW1lbnQ6ZGlzYWJsZWQsLm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjojNzU3NTc1fS5tYXQtaW5wdXQtZWxlbWVudHtjYXJldC1jb2xvcjojZjU3YzAwfS5tYXQtaW5wdXQtZWxlbWVudDo6cGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSg5Nyw5Nyw5NywuNDIpfS5tYXQtaW5wdXQtZWxlbWVudDo6LW1vei1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDk3LDk3LDk3LC40Mil9Lm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoOTcsOTcsOTcsLjQyKX0ubWF0LWlucHV0LWVsZW1lbnQ6LW1zLWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoOTcsOTcsOTcsLjQyKX0ubWF0LWZvcm0tZmllbGQubWF0LWFjY2VudCAubWF0LWlucHV0LWVsZW1lbnR7Y2FyZXQtY29sb3I6I2ZmOTgwMH0ubWF0LWZvcm0tZmllbGQubWF0LXdhcm4gLm1hdC1pbnB1dC1lbGVtZW50LC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtaW5wdXQtZWxlbWVudHtjYXJldC1jb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjojZjQ0MzM2fS5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1pdGVte2NvbG9yOiMyMTIxMjF9Lm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LW9wdGlvbntjb2xvcjojMjEyMTIxfS5tYXQtbGlzdC1iYXNlIC5tYXQtc3ViaGVhZGVye2NvbG9yOiM2MTYxNjF9Lm1hdC1saXN0LWl0ZW0tZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjojZWVlfS5tYXQtbGlzdC1vcHRpb246aG92ZXIsLm1hdC1saXN0LW9wdGlvbjpmb2N1cywubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtOmhvdmVyLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW06Zm9jdXMsLm1hdC1hY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbTpob3ZlciwubWF0LWFjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtOmZvY3Vze2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDQpfS5tYXQtbGlzdC1zaW5nbGUtc2VsZWN0ZWQtb3B0aW9uLC5tYXQtbGlzdC1zaW5nbGUtc2VsZWN0ZWQtb3B0aW9uOmhvdmVyLC5tYXQtbGlzdC1zaW5nbGUtc2VsZWN0ZWQtb3B0aW9uOmZvY3Vze2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMTIpfS5tYXQtbWVudS1wYW5lbHtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC1tZW51LXBhbmVsOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDRweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtbWVudS1pdGVte2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Y29sb3I6IzIxMjEyMX0ubWF0LW1lbnUtaXRlbVtkaXNhYmxlZF0sLm1hdC1tZW51LWl0ZW1bZGlzYWJsZWRdOjphZnRlciwubWF0LW1lbnUtaXRlbVtkaXNhYmxlZF0gLm1hdC1pY29uLW5vLWNvbG9ye2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LW1lbnUtaXRlbSAubWF0LWljb24tbm8tY29sb3IsLm1hdC1tZW51LWl0ZW0tc3VibWVudS10cmlnZ2VyOjphZnRlcntjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1tZW51LWl0ZW06aG92ZXI6bm90KFtkaXNhYmxlZF0pLC5tYXQtbWVudS1pdGVtLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KFtkaXNhYmxlZF0pLC5tYXQtbWVudS1pdGVtLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdChbZGlzYWJsZWRdKSwubWF0LW1lbnUtaXRlbS1oaWdobGlnaHRlZDpub3QoW2Rpc2FibGVkXSl7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1wYWdpbmF0b3J7YmFja2dyb3VuZDojZmZmfS5tYXQtcGFnaW5hdG9yLC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZSAubWF0LXNlbGVjdC10cmlnZ2Vye2NvbG9yOiM2MTYxNjF9Lm1hdC1wYWdpbmF0b3ItZGVjcmVtZW50LC5tYXQtcGFnaW5hdG9yLWluY3JlbWVudHtib3JkZXItdG9wOjJweCBzb2xpZCByZ2JhKDAsMCwwLC41NCk7Ym9yZGVyLXJpZ2h0OjJweCBzb2xpZCByZ2JhKDAsMCwwLC41NCl9Lm1hdC1wYWdpbmF0b3ItZmlyc3QsLm1hdC1wYWdpbmF0b3ItbGFzdHtib3JkZXItdG9wOjJweCBzb2xpZCByZ2JhKDAsMCwwLC41NCl9Lm1hdC1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1wYWdpbmF0b3ItZGVjcmVtZW50LC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtcGFnaW5hdG9yLWluY3JlbWVudCwubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LXBhZ2luYXRvci1maXJzdCwubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LXBhZ2luYXRvci1sYXN0e2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1wYWdpbmF0b3ItY29udGFpbmVye21pbi1oZWlnaHQ6NTZweH0ubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5ke2ZpbGw6I2ZmYTcyNn0ubWF0LXByb2dyZXNzLWJhci1idWZmZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZhNzI2fS5tYXQtcHJvZ3Jlc3MtYmFyLWZpbGw6OmFmdGVye2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMH0ubWF0LXByb2dyZXNzLWJhci5tYXQtYWNjZW50IC5tYXQtcHJvZ3Jlc3MtYmFyLWJhY2tncm91bmR7ZmlsbDojZmZlMGIyfS5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC1hY2NlbnQgLm1hdC1wcm9ncmVzcy1iYXItYnVmZmVye2JhY2tncm91bmQtY29sb3I6I2ZmZTBiMn0ubWF0LXByb2dyZXNzLWJhci5tYXQtYWNjZW50IC5tYXQtcHJvZ3Jlc3MtYmFyLWZpbGw6OmFmdGVye2JhY2tncm91bmQtY29sb3I6I2ZmOTgwMH0ubWF0LXByb2dyZXNzLWJhci5tYXQtd2FybiAubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5ke2ZpbGw6I2ZmY2RkMn0ubWF0LXByb2dyZXNzLWJhci5tYXQtd2FybiAubWF0LXByb2dyZXNzLWJhci1idWZmZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZjZGQyfS5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC13YXJuIC5tYXQtcHJvZ3Jlc3MtYmFyLWZpbGw6OmFmdGVye2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn0ubWF0LXByb2dyZXNzLXNwaW5uZXIgY2lyY2xlLC5tYXQtc3Bpbm5lciBjaXJjbGV7c3Ryb2tlOiNmNTdjMDB9Lm1hdC1wcm9ncmVzcy1zcGlubmVyLm1hdC1hY2NlbnQgY2lyY2xlLC5tYXQtc3Bpbm5lci5tYXQtYWNjZW50IGNpcmNsZXtzdHJva2U6I2ZmOTgwMH0ubWF0LXByb2dyZXNzLXNwaW5uZXIubWF0LXdhcm4gY2lyY2xlLC5tYXQtc3Bpbm5lci5tYXQtd2FybiBjaXJjbGV7c3Ryb2tlOiNmNDQzMzZ9Lm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOiM2MTYxNjF9Lm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnkubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOiNmNTdjMDB9Lm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1yYWRpby1pbm5lci1jaXJjbGUsLm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudDpub3QoLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSksLm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnkubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSwubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeTphY3RpdmUgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Lm1hdC1yYWRpby1idXR0b24ubWF0LWFjY2VudC5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6I2ZmOTgwMH0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtcmFkaW8taW5uZXItY2lyY2xlLC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudDpub3QoLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSksLm1hdC1yYWRpby1idXR0b24ubWF0LWFjY2VudC5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlLC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnQ6YWN0aXZlIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwfS5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuLm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xle2JvcmRlci1jb2xvcjojZjQ0MzM2fS5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuIC5tYXQtcmFkaW8taW5uZXItY2lyY2xlLC5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuIC5tYXQtcmFkaW8tcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnQ6bm90KC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGUpLC5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuLm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGUsLm1hdC1yYWRpby1idXR0b24ubWF0LXdhcm46YWN0aXZlIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtcmFkaW8tYnV0dG9uLm1hdC1yYWRpby1kaXNhYmxlZC5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZSwubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcmFkaW8tZGlzYWJsZWQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcmFkaW8tZGlzYWJsZWQgLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcmFkaW8tZGlzYWJsZWQgLm1hdC1yYWRpby1pbm5lci1jaXJjbGV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1yYWRpby1idXR0b24ubWF0LXJhZGlvLWRpc2FibGVkIC5tYXQtcmFkaW8tbGFiZWwtY29udGVudHtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1yYWRpby1idXR0b24gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiMwMDB9Lm1hdC1zZWxlY3QtdmFsdWV7Y29sb3I6IzIxMjEyMX0ubWF0LXNlbGVjdC1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDk3LDk3LDk3LC40Mil9Lm1hdC1zZWxlY3QtZGlzYWJsZWQgLm1hdC1zZWxlY3QtdmFsdWV7Y29sb3I6Izc1NzU3NX0ubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojNjE2MTYxfS5tYXQtc2VsZWN0LXBhbmVse2JhY2tncm91bmQ6I2ZmZn0ubWF0LXNlbGVjdC1wYW5lbDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA0cHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LXNlbGVjdC1wYW5lbCAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLW11bHRpcGxlKXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQubWF0LXByaW1hcnkgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6I2Y1N2MwMH0ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQubWF0LWFjY2VudCAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojZmY5ODAwfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZC5tYXQtd2FybiAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZCAubWF0LXNlbGVjdC5tYXQtc2VsZWN0LWludmFsaWQgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6I2Y0NDMzNn0ubWF0LWZvcm0tZmllbGQgLm1hdC1zZWxlY3QubWF0LXNlbGVjdC1kaXNhYmxlZCAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojNzU3NTc1fS5tYXQtZHJhd2VyLWNvbnRhaW5lcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWRyYXdlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWRyYXdlci5tYXQtZHJhd2VyLXB1c2h7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tYXQtZHJhd2VyOm5vdCgubWF0LWRyYXdlci1zaWRlKXtib3gtc2hhZG93OjBweCA4cHggMTBweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMTZweCAyNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA2cHggMzBweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWRyYXdlci1zaWRle2JvcmRlci1yaWdodDpzb2xpZCAxcHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZHJhd2VyLXNpZGUubWF0LWRyYXdlci1lbmR7Ym9yZGVyLWxlZnQ6c29saWQgMXB4IHJnYmEoMCwwLDAsLjEyKTtib3JkZXItcmlnaHQ6bm9uZX1bZGlyPXJ0bF0gLm1hdC1kcmF3ZXItc2lkZXtib3JkZXItbGVmdDpzb2xpZCAxcHggcmdiYSgwLDAsMCwuMTIpO2JvcmRlci1yaWdodDpub25lfVtkaXI9cnRsXSAubWF0LWRyYXdlci1zaWRlLm1hdC1kcmF3ZXItZW5ke2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLXJpZ2h0OnNvbGlkIDFweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1kcmF3ZXItYmFja2Ryb3AubWF0LWRyYXdlci1zaG93bntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjYpfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1ie2JhY2tncm91bmQtY29sb3I6I2ZmOTgwMH0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtY2hlY2tlZCAubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxNTIsMCwuNTQpfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1jaGVja2VkIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1wcmltYXJ5Lm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1ie2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMH0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtcHJpbWFyeS5tYXQtY2hlY2tlZCAubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NSwxMjQsMCwuNTQpfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1wcmltYXJ5Lm1hdC1jaGVja2VkIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC13YXJuLm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1ie2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtd2Fybi5tYXQtY2hlY2tlZCAubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuNTQpfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC13YXJuLm1hdC1jaGVja2VkIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtc2xpZGUtdG9nZ2xlOm5vdCgubWF0LWNoZWNrZWQpIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojMDAwfS5tYXQtc2xpZGUtdG9nZ2xlLXRodW1ie2JveC1zaGFkb3c6MHB4IDJweCAxcHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDFweCAxcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAzcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMik7YmFja2dyb3VuZC1jb2xvcjojZmFmYWZhfS5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtcHJpbWFyeSAubWF0LXNsaWRlci10cmFjay1maWxsLC5tYXQtcHJpbWFyeSAubWF0LXNsaWRlci10aHVtYiwubWF0LXByaW1hcnkgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfS5tYXQtcHJpbWFyeSAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e2NvbG9yOiNmZmZ9Lm1hdC1wcmltYXJ5IC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NSwxMjQsMCwuMil9Lm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdHJhY2stZmlsbCwubWF0LWFjY2VudCAubWF0LXNsaWRlci10aHVtYiwubWF0LWFjY2VudCAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDB9Lm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dHtjb2xvcjojZmZmfS5tYXQtYWNjZW50IC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxNTIsMCwuMil9Lm1hdC13YXJuIC5tYXQtc2xpZGVyLXRyYWNrLWZpbGwsLm1hdC13YXJuIC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtd2FybiAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC13YXJuIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7Y29sb3I6I2ZmZn0ubWF0LXdhcm4gLm1hdC1zbGlkZXItZm9jdXMtcmluZ3tiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC4yKX0ubWF0LXNsaWRlcjpob3ZlciAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5kLC5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmQsLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdHJhY2stZmlsbCwubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjI2KX0ubWF0LXNsaWRlci1kaXNhYmxlZDpob3ZlciAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtc2xpZGVyLW1pbi12YWx1ZSAubWF0LXNsaWRlci1mb2N1cy1yaW5ne2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtc2xpZGVyLW1pbi12YWx1ZS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXItbWluLXZhbHVlLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LXNsaWRlci1taW4tdmFsdWUubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtc2xpZGVyLW1pbi12YWx1ZS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1zbGlkZXItbWluLXZhbHVlOm5vdCgubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nKSAubWF0LXNsaWRlci10aHVtYntib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMjYpO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9Lm1hdC1zbGlkZXItbWluLXZhbHVlOm5vdCgubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nKTpob3ZlciAubWF0LXNsaWRlci10aHVtYiwubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1ie2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1zbGlkZXItbWluLXZhbHVlOm5vdCgubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nKTpob3Zlci5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtc2xpZGVyLW1pbi12YWx1ZTpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZykuY2RrLWZvY3VzZWQubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10aHVtYntib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtc2xpZGVyLWhhcy10aWNrcyAubWF0LXNsaWRlci13cmFwcGVyOjphZnRlcntib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuNyl9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10aWNrc3tiYWNrZ3JvdW5kLWltYWdlOnJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMCwgMCwgMCwgMC43KSwgcmdiYSgwLCAwLCAwLCAwLjcpIDJweCwgdHJhbnNwYXJlbnQgMCwgdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6LW1vei1yZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KDAuMDAwMWRlZywgcmdiYSgwLCAwLCAwLCAwLjcpLCByZ2JhKDAsIDAsIDAsIDAuNykgMnB4LCB0cmFuc3BhcmVudCAwLCB0cmFuc3BhcmVudCl9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdGlja3N7YmFja2dyb3VuZC1pbWFnZTpyZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgcmdiYSgwLCAwLCAwLCAwLjcpLCByZ2JhKDAsIDAsIDAsIDAuNykgMnB4LCB0cmFuc3BhcmVudCAwLCB0cmFuc3BhcmVudCl9Lm1hdC1zdGVwLWhlYWRlci5jZGsta2V5Ym9hcmQtZm9jdXNlZCwubWF0LXN0ZXAtaGVhZGVyLmNkay1wcm9ncmFtLWZvY3VzZWQsLm1hdC1zdGVwLWhlYWRlcjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjA0KX1AbWVkaWEoaG92ZXI6IG5vbmUpey5tYXQtc3RlcC1oZWFkZXI6aG92ZXJ7YmFja2dyb3VuZDpub25lfX0ubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1sYWJlbCwubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1vcHRpb25hbHtjb2xvcjojNjE2MTYxfS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb257YmFja2dyb3VuZC1jb2xvcjojNjE2MTYxO2NvbG9yOiNmZmZ9Lm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbi1zZWxlY3RlZCwubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1pY29uLXN0YXRlLWRvbmUsLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1lZGl0e2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMDtjb2xvcjojZmZmfS5tYXQtc3RlcC1oZWFkZXIubWF0LWFjY2VudCAubWF0LXN0ZXAtaWNvbntjb2xvcjojZmZmfS5tYXQtc3RlcC1oZWFkZXIubWF0LWFjY2VudCAubWF0LXN0ZXAtaWNvbi1zZWxlY3RlZCwubWF0LXN0ZXAtaGVhZGVyLm1hdC1hY2NlbnQgLm1hdC1zdGVwLWljb24tc3RhdGUtZG9uZSwubWF0LXN0ZXAtaGVhZGVyLm1hdC1hY2NlbnQgLm1hdC1zdGVwLWljb24tc3RhdGUtZWRpdHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDA7Y29sb3I6I2ZmZn0ubWF0LXN0ZXAtaGVhZGVyLm1hdC13YXJuIC5tYXQtc3RlcC1pY29ue2NvbG9yOiNmZmZ9Lm1hdC1zdGVwLWhlYWRlci5tYXQtd2FybiAubWF0LXN0ZXAtaWNvbi1zZWxlY3RlZCwubWF0LXN0ZXAtaGVhZGVyLm1hdC13YXJuIC5tYXQtc3RlcC1pY29uLXN0YXRlLWRvbmUsLm1hdC1zdGVwLWhlYWRlci5tYXQtd2FybiAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1lZGl0e2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNjtjb2xvcjojZmZmfS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb24tc3RhdGUtZXJyb3J7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtjb2xvcjojZjQ0MzM2fS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWxhYmVsLm1hdC1zdGVwLWxhYmVsLWFjdGl2ZXtjb2xvcjojMjEyMTIxfS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWxhYmVsLm1hdC1zdGVwLWxhYmVsLWVycm9ye2NvbG9yOiNmNDQzMzZ9Lm1hdC1zdGVwcGVyLWhvcml6b250YWwsLm1hdC1zdGVwcGVyLXZlcnRpY2Fse2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubWF0LXN0ZXBwZXItdmVydGljYWwtbGluZTo6YmVmb3Jle2JvcmRlci1sZWZ0LWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXI6OmJlZm9yZSwubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXI6OmFmdGVyLC5tYXQtc3RlcHBlci1ob3Jpem9udGFsLWxpbmV7Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVye2hlaWdodDo3MnB4fS5tYXQtc3RlcHBlci1sYWJlbC1wb3NpdGlvbi1ib3R0b20gLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyLC5tYXQtdmVydGljYWwtc3RlcHBlci1oZWFkZXJ7cGFkZGluZzoyNHB4IDI0cHh9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsLWxpbmU6OmJlZm9yZXt0b3A6LTE2cHg7Ym90dG9tOi0xNnB4fS5tYXQtc3RlcHBlci1sYWJlbC1wb3NpdGlvbi1ib3R0b20gLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyOjphZnRlciwubWF0LXN0ZXBwZXItbGFiZWwtcG9zaXRpb24tYm90dG9tIC5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlcjo6YmVmb3Jle3RvcDozNnB4fS5tYXQtc3RlcHBlci1sYWJlbC1wb3NpdGlvbi1ib3R0b20gLm1hdC1zdGVwcGVyLWhvcml6b250YWwtbGluZXt0b3A6MzZweH0ubWF0LXNvcnQtaGVhZGVyLWFycm93e2NvbG9yOiM2MTYxNjF9Lm1hdC10YWItbmF2LWJhciwubWF0LXRhYi1oZWFkZXJ7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgcmdiYSgwLDAsMCwuMTIpfS5tYXQtdGFiLWdyb3VwLWludmVydGVkLWhlYWRlciAubWF0LXRhYi1uYXYtYmFyLC5tYXQtdGFiLWdyb3VwLWludmVydGVkLWhlYWRlciAubWF0LXRhYi1oZWFkZXJ7Ym9yZGVyLXRvcDoxcHggc29saWQgcmdiYSgwLDAsMCwuMTIpO2JvcmRlci1ib3R0b206bm9uZX0ubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1saW5re2NvbG9yOiMyMTIxMjF9Lm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7Y29sb3I6Izc1NzU3NX0ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjojMjEyMTIxfS5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOiM3NTc1NzV9Lm1hdC10YWItZ3JvdXBbY2xhc3MqPW1hdC1iYWNrZ3JvdW5kLV0gLm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLW5hdi1iYXJbY2xhc3MqPW1hdC1iYWNrZ3JvdW5kLV17Ym9yZGVyLWJvdHRvbTpub25lO2JvcmRlci10b3A6bm9uZX0ubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxNjcsMzgsLjMpfS5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Lm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5Lm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyMjQsMTc4LC4zKX0ubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2ZmOTgwMH0ubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50Lm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LWluay1iYXIsLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50Lm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDIwNSwyMTAsLjMpfS5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC10YWItZ3JvdXAubWF0LXdhcm4ubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4ubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4ubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxNjcsMzgsLjMpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb257YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluaywubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5re2NvbG9yOiNmZmZ9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC40KX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rcyAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmtzIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3Jle2JvcmRlci1jb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjI0LDE3OCwuMyl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbntiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDB9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluaywubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGlua3tjb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC40KX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGlua3MgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rcyAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3Jle2JvcmRlci1jb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjQpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyMDUsMjEwLC4zKX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9ue2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmssLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGlua3tjb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGlua3MgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rcyAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXtib3JkZXItY29sb3I6I2ZmZn0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjQpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX0ubWF0LXRvb2xiYXJ7YmFja2dyb3VuZDojZjU3YzAwO2NvbG9yOiMyMTIxMjF9Lm1hdC10b29sYmFyLm1hdC1wcmltYXJ5e2JhY2tncm91bmQ6I2Y1N2MwMDtjb2xvcjojZmZmfS5tYXQtdG9vbGJhci5tYXQtYWNjZW50e2JhY2tncm91bmQ6I2ZmOTgwMDtjb2xvcjojZmZmfS5tYXQtdG9vbGJhci5tYXQtd2FybntiYWNrZ3JvdW5kOiNmNDQzMzY7Y29sb3I6I2ZmZn0ubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSwubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZSwubWF0LXRvb2xiYXIgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3J9Lm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LXRvb2xiYXIgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LXRvb2xiYXIgLm1hdC1zZWxlY3QtdmFsdWUsLm1hdC10b29sYmFyIC5tYXQtc2VsZWN0LWFycm93LC5tYXQtdG9vbGJhciAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6aW5oZXJpdH0ubWF0LXRvb2xiYXIgLm1hdC1pbnB1dC1lbGVtZW50e2NhcmV0LWNvbG9yOmN1cnJlbnRDb2xvcn0ubWF0LXRvb2xiYXItbXVsdGlwbGUtcm93c3ttaW4taGVpZ2h0OjY0cHh9Lm1hdC10b29sYmFyLXJvdywubWF0LXRvb2xiYXItc2luZ2xlLXJvd3toZWlnaHQ6NjRweH1AbWVkaWEobWF4LXdpZHRoOiA1OTlweCl7Lm1hdC10b29sYmFyLW11bHRpcGxlLXJvd3N7bWluLWhlaWdodDo1NnB4fS5tYXQtdG9vbGJhci1yb3csLm1hdC10b29sYmFyLXNpbmdsZS1yb3d7aGVpZ2h0OjU2cHh9fS5tYXQtdG9vbHRpcHtiYWNrZ3JvdW5kOnJnYmEoOTcsOTcsOTcsLjkpfS5tYXQtdHJlZXtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC10cmVlLW5vZGUsLm1hdC1uZXN0ZWQtdHJlZS1ub2Rle2NvbG9yOiMyMTIxMjF9Lm1hdC10cmVlLW5vZGV7bWluLWhlaWdodDo0OHB4fS5tYXQtc25hY2stYmFyLWNvbnRhaW5lcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KTtiYWNrZ3JvdW5kOiMzMjMyMzI7Ym94LXNoYWRvdzowcHggM3B4IDVweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNnB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAxOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbntjb2xvcjojZmY5ODAwfWE6bm90KC5tYXQtYnV0dG9uLC5tYXQtaWNvbi1idXR0b24pe2NvbG9yOiMxOTc2ZDJ9YTpub3QoLm1hdC1idXR0b24sLm1hdC1pY29uLWJ1dHRvbik6dmlzaXRlZHtjb2xvcjojN2IxZmEyfWJvZHkuZGFyay1tb2Rle2JhY2tncm91bmQtY29sb3I6IzMwMzAzMH1ib2R5LmRhcmstbW9kZSBhOm5vdCgubWF0LWJ1dHRvbiwubWF0LWljb24tYnV0dG9uKXtjb2xvcjojNDJhNWY1fWJvZHkuZGFyay1tb2RlIGE6bm90KC5tYXQtYnV0dG9uLC5tYXQtaWNvbi1idXR0b24pOnZpc2l0ZWR7Y29sb3I6I2JhNjhjOH1ib2R5LmRhcmstbW9kZSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1vcHRpb257Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LW9wdGlvbjpob3Zlcjpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtb3B0aW9uOmZvY3VzOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4wNCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1tdWx0aXBsZSk6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjA0KX1ib2R5LmRhcmstbW9kZSAubWF0LW9wdGlvbi5tYXQtYWN0aXZle2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMDQpO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1vcHRpb24ubWF0LW9wdGlvbi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LXByaW1hcnkgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWFjY2VudCAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtd2FybiAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtb3B0Z3JvdXAtbGFiZWx7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1vcHRncm91cC1kaXNhYmxlZCAubWF0LW9wdGdyb3VwLWxhYmVse2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtcHNldWRvLWNoZWNrYm94e2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtcHNldWRvLWNoZWNrYm94OjphZnRlcntjb2xvcjojMzAzMDMwfWJvZHkuZGFyay1tb2RlIC5tYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVke2NvbG9yOiM2ODY4Njh9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcmltYXJ5IC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1wcmltYXJ5IC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGV7YmFja2dyb3VuZDojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSxib2R5LmRhcmstbW9kZSAubWF0LWFjY2VudCAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtYWNjZW50IC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGV7YmFja2dyb3VuZDojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtd2FybiAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtd2FybiAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRle2JhY2tncm91bmQ6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVke2JhY2tncm91bmQ6IzY4Njg2OH1ib2R5LmRhcmstbW9kZSAubWF0LWFwcC1iYWNrZ3JvdW5kLGJvZHkuZGFyay1tb2RlLm1hdC1hcHAtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzA7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MHtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejF7Ym94LXNoYWRvdzowcHggMnB4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMXB4IDFweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16Mntib3gtc2hhZG93OjBweCAzcHggMXB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAycHggMnB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoze2JveC1zaGFkb3c6MHB4IDNweCAzcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDNweCA0cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCA4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejR7Ym94LXNoYWRvdzowcHggMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNHB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejV7Ym94LXNoYWRvdzowcHggM3B4IDVweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNXB4IDhweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDE0cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejZ7Ym94LXNoYWRvdzowcHggM3B4IDVweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNnB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAxOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXo3e2JveC1zaGFkb3c6MHB4IDRweCA1cHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDdweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAycHggMTZweCAxcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16OHtib3gtc2hhZG93OjBweCA1cHggNXB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA4cHggMTBweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggM3B4IDE0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejl7Ym94LXNoYWRvdzowcHggNXB4IDZweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggOXB4IDEycHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDNweCAxNnB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoxMHtib3gtc2hhZG93OjBweCA2cHggNnB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxMHB4IDE0cHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDRweCAxOHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoxMXtib3gtc2hhZG93OjBweCA2cHggN3B4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxMXB4IDE1cHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDRweCAyMHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoxMntib3gtc2hhZG93OjBweCA3cHggOHB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxMnB4IDE3cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDVweCAyMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoxM3tib3gtc2hhZG93OjBweCA3cHggOHB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxM3B4IDE5cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDVweCAyNHB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoxNHtib3gtc2hhZG93OjBweCA3cHggOXB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxNHB4IDIxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDVweCAyNnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoxNXtib3gtc2hhZG93OjBweCA4cHggOXB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxNXB4IDIycHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDZweCAyOHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoxNntib3gtc2hhZG93OjBweCA4cHggMTBweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMTZweCAyNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA2cHggMzBweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MTd7Ym94LXNoYWRvdzowcHggOHB4IDExcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDE3cHggMjZweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggNnB4IDMycHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejE4e2JveC1zaGFkb3c6MHB4IDlweCAxMXB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxOHB4IDI4cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDdweCAzNHB4IDZweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoxOXtib3gtc2hhZG93OjBweCA5cHggMTJweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMTlweCAyOXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA3cHggMzZweCA2cHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MjB7Ym94LXNoYWRvdzowcHggMTBweCAxM3B4IC02cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAyMHB4IDMxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDhweCAzOHB4IDdweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoyMXtib3gtc2hhZG93OjBweCAxMHB4IDEzcHggLTZweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDIxcHggMzNweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggOHB4IDQwcHggN3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejIye2JveC1zaGFkb3c6MHB4IDEwcHggMTRweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMjJweCAzNXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA4cHggNDJweCA3cHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MjN7Ym94LXNoYWRvdzowcHggMTFweCAxNHB4IC03cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAyM3B4IDM2cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDlweCA0NHB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoyNHtib3gtc2hhZG93OjBweCAxMXB4IDE1cHggLTdweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDI0cHggMzhweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggOXB4IDQ2cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC10aGVtZS1sb2FkZWQtbWFya2Vye2Rpc3BsYXk6bm9uZX1ib2R5LmRhcmstbW9kZSAubWF0LWF1dG9jb21wbGV0ZS1wYW5lbHtiYWNrZ3JvdW5kOiM0MjQyNDI7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWF1dG9jb21wbGV0ZS1wYW5lbDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA0cHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWF1dG9jb21wbGV0ZS1wYW5lbCAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtYWN0aXZlKTpub3QoOmhvdmVyKXtiYWNrZ3JvdW5kOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1hdXRvY29tcGxldGUtcGFuZWwgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LWFjdGl2ZSk6bm90KDpob3Zlcik6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtYmFkZ2UtY29udGVudHtjb2xvcjojZmZmO2JhY2tncm91bmQ6I2VmNmMwMH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIGJvZHkuZGFyay1tb2RlIC5tYXQtYmFkZ2UtY29udGVudHtvdXRsaW5lOnNvbGlkIDFweDtib3JkZXItcmFkaXVzOjB9Ym9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS1hY2NlbnQgLm1hdC1iYWRnZS1jb250ZW50e2JhY2tncm91bmQ6I2VmNmMwMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtYmFkZ2Utd2FybiAubWF0LWJhZGdlLWNvbnRlbnR7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZXtwb3NpdGlvbjpyZWxhdGl2ZX1ib2R5LmRhcmstbW9kZSAubWF0LWJhZGdlLWhpZGRlbiAubWF0LWJhZGdlLWNvbnRlbnR7ZGlzcGxheTpub25lfWJvZHkuZGFyay1tb2RlIC5tYXQtYmFkZ2UtZGlzYWJsZWQgLm1hdC1iYWRnZS1jb250ZW50e2JhY2tncm91bmQ6IzZlNmU2ZTtjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlIC5tYXQtYmFkZ2UtY29udGVudHtwb3NpdGlvbjphYnNvbHV0ZTt0ZXh0LWFsaWduOmNlbnRlcjtkaXNwbGF5OmlubGluZS1ibG9jaztib3JkZXItcmFkaXVzOjUwJTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAyMDBtcyBlYXNlLWluLW91dDt0cmFuc2Zvcm06c2NhbGUoMC42KTtvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7cG9pbnRlci1ldmVudHM6bm9uZX1ib2R5LmRhcmstbW9kZSAubmctYW5pbWF0ZS1kaXNhYmxlZCAubWF0LWJhZGdlLWNvbnRlbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS1jb250ZW50Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxle3RyYW5zaXRpb246bm9uZX1ib2R5LmRhcmstbW9kZSAubWF0LWJhZGdlLWNvbnRlbnQubWF0LWJhZGdlLWFjdGl2ZXt0cmFuc2Zvcm06bm9uZX1ib2R5LmRhcmstbW9kZSAubWF0LWJhZGdlLXNtYWxsIC5tYXQtYmFkZ2UtY29udGVudHt3aWR0aDoxNnB4O2hlaWdodDoxNnB4O2xpbmUtaGVpZ2h0OjE2cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYWJvdmUgLm1hdC1iYWRnZS1jb250ZW50e3RvcDotOHB4fWJvZHkuZGFyay1tb2RlIC5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWJlbG93IC5tYXQtYmFkZ2UtY29udGVudHtib3R0b206LThweH1ib2R5LmRhcmstbW9kZSAubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6LTE2cHh9W2Rpcj1ydGxdIGJvZHkuZGFyay1tb2RlIC5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDphdXRvO3JpZ2h0Oi0xNnB4fWJvZHkuZGFyay1tb2RlIC5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDotMTZweH1bZGlyPXJ0bF0gYm9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0OmF1dG87bGVmdDotMTZweH1ib2R5LmRhcmstbW9kZSAubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6LThweH1bZGlyPXJ0bF0gYm9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0OmF1dG87cmlnaHQ6LThweH1ib2R5LmRhcmstbW9kZSAubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6LThweH1bZGlyPXJ0bF0gYm9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0OmF1dG87bGVmdDotOHB4fWJvZHkuZGFyay1tb2RlIC5tYXQtYmFkZ2UtbWVkaXVtIC5tYXQtYmFkZ2UtY29udGVudHt3aWR0aDoyMnB4O2hlaWdodDoyMnB4O2xpbmUtaGVpZ2h0OjIycHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWFib3ZlIC5tYXQtYmFkZ2UtY29udGVudHt0b3A6LTExcHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWJlbG93IC5tYXQtYmFkZ2UtY29udGVudHtib3R0b206LTExcHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDotMjJweH1bZGlyPXJ0bF0gYm9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDphdXRvO3JpZ2h0Oi0yMnB4fWJvZHkuZGFyay1tb2RlIC5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6LTIycHh9W2Rpcj1ydGxdIGJvZHkuZGFyay1tb2RlIC5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6YXV0bztsZWZ0Oi0yMnB4fWJvZHkuZGFyay1tb2RlIC5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6LTExcHh9W2Rpcj1ydGxdIGJvZHkuZGFyay1tb2RlIC5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6YXV0bztyaWdodDotMTFweH1ib2R5LmRhcmstbW9kZSAubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi0xMXB4fVtkaXI9cnRsXSBib2R5LmRhcmstbW9kZSAubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0OmF1dG87bGVmdDotMTFweH1ib2R5LmRhcmstbW9kZSAubWF0LWJhZGdlLWxhcmdlIC5tYXQtYmFkZ2UtY29udGVudHt3aWR0aDoyOHB4O2hlaWdodDoyOHB4O2xpbmUtaGVpZ2h0OjI4cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYWJvdmUgLm1hdC1iYWRnZS1jb250ZW50e3RvcDotMTRweH1ib2R5LmRhcmstbW9kZSAubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1iZWxvdyAubWF0LWJhZGdlLWNvbnRlbnR7Ym90dG9tOi0xNHB4fWJvZHkuZGFyay1tb2RlIC5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDotMjhweH1bZGlyPXJ0bF0gYm9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0OmF1dG87cmlnaHQ6LTI4cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi0yOHB4fVtkaXI9cnRsXSBib2R5LmRhcmstbW9kZSAubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6YXV0bztsZWZ0Oi0yOHB4fWJvZHkuZGFyay1tb2RlIC5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDotMTRweH1bZGlyPXJ0bF0gYm9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0OmF1dG87cmlnaHQ6LTE0cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi0xNHB4fVtkaXI9cnRsXSBib2R5LmRhcmstbW9kZSAubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6YXV0bztsZWZ0Oi0xNHB4fWJvZHkuZGFyay1tb2RlIC5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcntib3gtc2hhZG93OjBweCA4cHggMTBweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMTZweCAyNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA2cHggMzBweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKTtiYWNrZ3JvdW5kOiM0MjQyNDI7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbixib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uLGJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b257Y29sb3I6aW5oZXJpdDtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50fWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLm1hdC1wcmltYXJ5LGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b24ubWF0LXByaW1hcnksYm9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtcHJpbWFyeXtjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLm1hdC1hY2NlbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbi5tYXQtYWNjZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWFjY2VudHtjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLm1hdC13YXJuLGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b24ubWF0LXdhcm4sYm9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtd2Fybntjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSxib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSxib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSxib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24ubWF0LXdhcm4gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSxib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uLm1hdC13YXJuIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksYm9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtd2FybiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksYm9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbiAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b24gLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9uIC5tYXQtcmlwcGxlLWVsZW1lbnR7b3BhY2l0eTouMTtiYWNrZ3JvdW5kLWNvbG9yOmN1cnJlbnRDb2xvcn1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQ6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9uOm5vdCgubWF0LWJ1dHRvbi1kaXNhYmxlZCl7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbixib2R5LmRhcmstbW9kZSAubWF0LWZhYixib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFie2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojNDI0MjQyfWJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnksYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5LGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC1wcmltYXJ5LGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LXByaW1hcnl7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LWFjY2VudCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC1hY2NlbnR7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC13YXJuLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtd2Fybixib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtd2Fybixib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC13YXJue2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC1wcmltYXJ5LGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeSxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtcHJpbWFyeSxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC1wcmltYXJ5e2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LWFjY2VudCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm4sYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC13YXJuLGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC13YXJuLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LXdhcm57YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9uOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pLGJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b246bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAzcHggMXB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAycHggMnB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpOmFjdGl2ZTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCA1cHggNXB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA4cHggMTBweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggM3B4IDE0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQ6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZmFiOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWI6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggM3B4IDVweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNnB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAxOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZmFiOm5vdCgubWF0LWJ1dHRvbi1kaXNhYmxlZCk6YWN0aXZlOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKTphY3RpdmU6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggN3B4IDhweCAtNHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMTJweCAxN3B4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA1cHggMjJweCA0cHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LWJ1dHRvbi1kaXNhYmxlZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUsYm9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWdyb3Vwe2JveC1zaGFkb3c6MHB4IDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDJweCAycHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCxib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZHtib3gtc2hhZG93Om5vbmV9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xle2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZSAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZHtjb2xvcjojZmZmO2JhY2tncm91bmQ6IzQyNDI0Mn1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlKy5tYXQtYnV0dG9uLXRvZ2dsZXtib3JkZXItbGVmdDpzb2xpZCAxcHggcmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIFtkaXI9cnRsXSAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWJ1dHRvbi10b2dnbGUrLm1hdC1idXR0b24tdG9nZ2xle2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLXJpZ2h0OnNvbGlkIDFweCByZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQubWF0LWJ1dHRvbi10b2dnbGUtdmVydGljYWwgLm1hdC1idXR0b24tdG9nZ2xlKy5tYXQtYnV0dG9uLXRvZ2dsZXtib3JkZXItbGVmdDpub25lO2JvcmRlci1yaWdodDpub25lO2JvcmRlci10b3A6c29saWQgMXB4IHJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZHtiYWNrZ3JvdW5kLWNvbG9yOiMyMTIxMjE7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWQubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZHtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKTtiYWNrZ3JvdW5kLWNvbG9yOiMwMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVkLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmR7YmFja2dyb3VuZDojNDI0MjQyfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZC5tYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2Vke2JhY2tncm91bmQtY29sb3I6IzQyNDI0Mn1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkLGJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJke2JvcmRlcjpzb2xpZCAxcHggcmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FyZHtiYWNrZ3JvdW5kOiM0MjQyNDI7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWNhcmQ6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggMnB4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMXB4IDFweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWNhcmQubWF0LWNhcmQtZmxhdDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYXJkLXN1YnRpdGxle2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtZnJhbWV7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJre2ZpbGw6IzMwMzAzMH1ib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWNoZWNrbWFyay1wYXRoe3N0cm9rZTojMzAzMDMwICFpbXBvcnRhbnR9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1taXhlZG1hcmt7YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHJpbWFyeSAubWF0LWNoZWNrYm94LWJhY2tncm91bmQsYm9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1jaGVja2VkLm1hdC1wcmltYXJ5IC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1hY2NlbnQgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLGJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtY2hlY2tlZC5tYXQtYWNjZW50IC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC13YXJuIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCxib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWNoZWNrZWQubWF0LXdhcm4gLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWRpc2FibGVkLm1hdC1jaGVja2JveC1jaGVja2VkIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCxib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWRpc2FibGVkLm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiM2ODY4Njh9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1kaXNhYmxlZDpub3QoLm1hdC1jaGVja2JveC1jaGVja2VkKSAubWF0LWNoZWNrYm94LWZyYW1le2JvcmRlci1jb2xvcjojNjg2ODY4fWJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtZGlzYWJsZWQgLm1hdC1jaGVja2JveC1sYWJlbHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtY2hlY2tlZDpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94OmFjdGl2ZTpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1jaGVja2VkOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveDphY3RpdmU6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1jaGVja2VkOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3g6YWN0aXZlOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQ6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXB7YmFja2dyb3VuZC1jb2xvcjojNjE2MTYxO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwIC5tYXQtY2hpcC1yZW1vdmV7Y29sb3I6I2ZmZjtvcGFjaXR5Oi40fWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcDpub3QoLm1hdC1jaGlwLWRpc2FibGVkKTphY3RpdmV7Ym94LXNoYWRvdzowcHggM3B4IDNweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggM3B4IDRweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDhweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXA6bm90KC5tYXQtY2hpcC1kaXNhYmxlZCkgLm1hdC1jaGlwLXJlbW92ZTpob3ZlcntvcGFjaXR5Oi41NH1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtZGlzYWJsZWR7b3BhY2l0eTouNH1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXA6OmFmdGVye2JhY2tncm91bmQ6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1wcmltYXJ5IC5tYXQtY2hpcC1yZW1vdmV7Y29sb3I6I2ZmZjtvcGFjaXR5Oi40fWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC13YXJue2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNjtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtd2FybiAubWF0LWNoaXAtcmVtb3Zle2NvbG9yOiNmZmY7b3BhY2l0eTouNH1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtYWNjZW50e2JhY2tncm91bmQtY29sb3I6I2VmNmMwMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtYWNjZW50IC5tYXQtY2hpcC1yZW1vdmV7Y29sb3I6I2ZmZjtvcGFjaXR5Oi40fWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYmxle2JhY2tncm91bmQ6IzQyNDI0Mn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYmxlIHRoZWFkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFibGUgdGJvZHksYm9keS5kYXJrLW1vZGUgLm1hdC10YWJsZSB0Zm9vdCxib2R5LmRhcmstbW9kZSBtYXQtaGVhZGVyLXJvdyxib2R5LmRhcmstbW9kZSBtYXQtcm93LGJvZHkuZGFyay1tb2RlIG1hdC1mb290ZXItcm93LGJvZHkuZGFyay1tb2RlIFttYXQtaGVhZGVyLXJvd10sYm9keS5kYXJrLW1vZGUgW21hdC1yb3ddLGJvZHkuZGFyay1tb2RlIFttYXQtZm9vdGVyLXJvd10sYm9keS5kYXJrLW1vZGUgLm1hdC10YWJsZS1zdGlja3l7YmFja2dyb3VuZDppbmhlcml0fWJvZHkuZGFyay1tb2RlIG1hdC1yb3csYm9keS5kYXJrLW1vZGUgbWF0LWhlYWRlci1yb3csYm9keS5kYXJrLW1vZGUgbWF0LWZvb3Rlci1yb3csYm9keS5kYXJrLW1vZGUgdGgubWF0LWhlYWRlci1jZWxsLGJvZHkuZGFyay1tb2RlIHRkLm1hdC1jZWxsLGJvZHkuZGFyay1tb2RlIHRkLm1hdC1mb290ZXItY2VsbHtib3JkZXItYm90dG9tLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWhlYWRlci1jZWxse2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2VsbCxib2R5LmRhcmstbW9kZSAubWF0LWZvb3Rlci1jZWxse2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1hcnJvd3tib3JkZXItdG9wLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLXRvZ2dsZSxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LWNhbGVuZGFyLW5leHQtYnV0dG9uLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtY2FsZW5kYXItcHJldmlvdXMtYnV0dG9ue2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXItZGl2aWRlcjo6YWZ0ZXJ7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWxhYmVse2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlLXJhbmdlLWlucHV0LXNlcGFyYXRvcntjb2xvcjojZmZmO2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudH1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWRhdGUtcmFuZ2UtaW5wdXQtc2VwYXJhdG9ye2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWluLXByZXZpZXd7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMjQpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS10b2RheTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS10b2RheTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDIzOSwxMDgsMCwuMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLGJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDI0OSwxNzEsMCwuMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgW2Rpcj1ydGxdIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1lbmQ6OmJlZm9yZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgyMzksIDEwOCwgMCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgW2Rpcj1ydGxdIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIGxlZnQsIHJnYmEoMjM5LCAxMDgsIDAsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCxib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZS5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YWZ0ZXJ7YmFja2dyb3VuZDojYThkYWI1fWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCxib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZDojNDZhMzVlfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDA7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgyMzksMTA4LDAsLjQpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS10b2RheS5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCAjZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1jZWxsOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQpOmhvdmVyPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCksYm9keS5kYXJrLW1vZGUgLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKSxib2R5LmRhcmstbW9kZSAuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIzOSwxMDgsMCwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnR7Ym94LXNoYWRvdzowcHggMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNHB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMik7YmFja2dyb3VuZC1jb2xvcjojNDI0MjQyO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjM5LDEwOCwwLC4yKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDI0OSwxNzEsMCwuMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMjM5LCAxMDgsIDAsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwgcmdiYSgyMzksIDEwOCwgMCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZS5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YWZ0ZXJ7YmFja2dyb3VuZDojYThkYWI1fWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQ6IzQ2YTM1ZX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDA7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIzOSwxMDgsMCwuNCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXkubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggI2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1jZWxsOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQpOmhvdmVyPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCksYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyMzksMTA4LDAsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyNDQsNjcsNTQsLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyNDksMTcxLDAsLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMjQ0LCA2NywgNTQsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBsZWZ0LCByZ2JhKDI0NCwgNjcsIDU0LCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2UubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmFmdGVye2JhY2tncm91bmQ6I2E4ZGFiNX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQ6IzQ2YTM1ZX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2O2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC40KX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXkubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggI2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktY2VsbDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkKTpob3Zlcj4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCksYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDQsNjcsNTQsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50LXRvdWNoe2JveC1zaGFkb3c6MHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItdG9nZ2xlLWFjdGl2ZXtjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci10b2dnbGUtYWN0aXZlLm1hdC1hY2NlbnR7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItdG9nZ2xlLWFjdGl2ZS5tYXQtd2Fybntjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZS1yYW5nZS1pbnB1dC1pbm5lcltkaXNhYmxlZF17Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LWRpYWxvZy1jb250YWluZXJ7Ym94LXNoYWRvdzowcHggMTFweCAxNXB4IC03cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAyNHB4IDM4cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDlweCA0NnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTIpO2JhY2tncm91bmQ6IzQyNDI0Mjtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZGl2aWRlcntib3JkZXItdG9wLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWRpdmlkZXItdmVydGljYWx7Ym9yZGVyLXJpZ2h0LWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbHtiYWNrZ3JvdW5kOiM0MjQyNDI7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAzcHggMXB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAycHggMnB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtYWN0aW9uLXJvd3tib3JkZXItdG9wLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbCAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKSxib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbCAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0pLGJvZHkuZGFyay1tb2RlIC5tYXQtZXhwYW5zaW9uLXBhbmVsOm5vdCgubWF0LWV4cGFuZGVkKSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI6aG92ZXI6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjA0KX1AbWVkaWEoaG92ZXI6IG5vbmUpe2JvZHkuZGFyay1tb2RlIC5tYXQtZXhwYW5zaW9uLXBhbmVsOm5vdCgubWF0LWV4cGFuZGVkKTpub3QoW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0pIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcjpob3ZlcntiYWNrZ3JvdW5kOiM0MjQyNDJ9fWJvZHkuZGFyay1tb2RlIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci10aXRsZXtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbixib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1pbmRpY2F0b3I6OmFmdGVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlclthcmlhLWRpc2FibGVkPXRydWVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlclthcmlhLWRpc2FibGVkPXRydWVdIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci10aXRsZSxib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbYXJpYS1kaXNhYmxlZD10cnVlXSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb257Y29sb3I6aW5oZXJpdH1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1oaW50e2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLm1hdC1hY2NlbnR7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLm1hdC13YXJue2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yZXF1aXJlZC1tYXJrZXJ7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtcmlwcGxle2JhY2tncm91bmQtY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUubWF0LWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUubWF0LXdhcm57YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb2N1c2VkOm5vdCgubWF0LWZvcm0tZmllbGQtaW52YWxpZCkgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb2N1c2VkOm5vdCgubWF0LWZvcm0tZmllbGQtaW52YWxpZCkubWF0LWFjY2VudCAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVye2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvY3VzZWQ6bm90KC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkKS5tYXQtd2FybiAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVye2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLm1hdC1hY2NlbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIC5tYXQtZm9ybS1maWVsZC1yZXF1aXJlZC1tYXJrZXJ7Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLGJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUubWF0LWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1lcnJvcntjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtaGludHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNykgMCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSAzMyUsIHRyYW5zcGFyZW50IDAlKTtiYWNrZ3JvdW5kLXNpemU6NHB4IDEwMCU7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXh9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSAwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpIDMzJSwgdHJhbnNwYXJlbnQgMCUpO2JhY2tncm91bmQtc2l6ZTo0cHggMTAwJTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteH1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1mbGV4e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtZmxleHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjA1KX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmU6OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lOjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2t7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZC5tYXQtYWNjZW50IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZC5tYXQtd2FybiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtaW52YWxpZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjE1KX1ib2R5LmRhcmstbW9kZSAubWF0LWljb24ubWF0LXByaW1hcnl7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWljb24ubWF0LWFjY2VudHtjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi5tYXQtd2Fybntjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0IC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1pbnB1dC1lbGVtZW50OmRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LWlucHV0LWVsZW1lbnR7Y2FyZXQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWlucHV0LWVsZW1lbnQ6OnBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtaW5wdXQtZWxlbWVudDo6LW1vei1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1pbnB1dC1lbGVtZW50Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LWlucHV0LWVsZW1lbnQgb3B0aW9ue2NvbG9yOnJnYmEoMCwwLDAsLjg3KX1ib2R5LmRhcmstbW9kZSAubWF0LWlucHV0LWVsZW1lbnQgb3B0aW9uOmRpc2FibGVke2NvbG9yOnJnYmEoMCwwLDAsLjM4KX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LWFjY2VudCAubWF0LWlucHV0LWVsZW1lbnR7Y2FyZXQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LXdhcm4gLm1hdC1pbnB1dC1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtaW5wdXQtZWxlbWVudHtjYXJldC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1pdGVte2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LW9wdGlvbntjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtbGlzdC1iYXNlIC5tYXQtc3ViaGVhZGVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtbGlzdC1pdGVtLWRpc2FibGVke2JhY2tncm91bmQtY29sb3I6IzAwMH1ib2R5LmRhcmstbW9kZSAubWF0LWxpc3Qtb3B0aW9uOmhvdmVyLGJvZHkuZGFyay1tb2RlIC5tYXQtbGlzdC1vcHRpb246Zm9jdXMsYm9keS5kYXJrLW1vZGUgLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbTpob3Zlcixib2R5LmRhcmstbW9kZSAubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtOmZvY3VzLGJvZHkuZGFyay1tb2RlIC5tYXQtYWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW06aG92ZXIsYm9keS5kYXJrLW1vZGUgLm1hdC1hY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbTpmb2N1c3tiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjA0KX1ib2R5LmRhcmstbW9kZSAubWF0LWxpc3Qtc2luZ2xlLXNlbGVjdGVkLW9wdGlvbixib2R5LmRhcmstbW9kZSAubWF0LWxpc3Qtc2luZ2xlLXNlbGVjdGVkLW9wdGlvbjpob3Zlcixib2R5LmRhcmstbW9kZSAubWF0LWxpc3Qtc2luZ2xlLXNlbGVjdGVkLW9wdGlvbjpmb2N1c3tiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtcGFuZWx7YmFja2dyb3VuZDojNDI0MjQyfWJvZHkuZGFyay1tb2RlIC5tYXQtbWVudS1wYW5lbDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA0cHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtaXRlbXtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZW51LWl0ZW1bZGlzYWJsZWRdLGJvZHkuZGFyay1tb2RlIC5tYXQtbWVudS1pdGVtW2Rpc2FibGVkXTo6YWZ0ZXIsYm9keS5kYXJrLW1vZGUgLm1hdC1tZW51LWl0ZW1bZGlzYWJsZWRdIC5tYXQtaWNvbi1uby1jb2xvcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtaXRlbSAubWF0LWljb24tbm8tY29sb3IsYm9keS5kYXJrLW1vZGUgLm1hdC1tZW51LWl0ZW0tc3VibWVudS10cmlnZ2VyOjphZnRlcntjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtbWVudS1pdGVtOmhvdmVyOm5vdChbZGlzYWJsZWRdKSxib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtaXRlbS5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdChbZGlzYWJsZWRdKSxib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtaXRlbS5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoW2Rpc2FibGVkXSksYm9keS5kYXJrLW1vZGUgLm1hdC1tZW51LWl0ZW0taGlnaGxpZ2h0ZWQ6bm90KFtkaXNhYmxlZF0pe2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMDQpfWJvZHkuZGFyay1tb2RlIC5tYXQtcGFnaW5hdG9ye2JhY2tncm91bmQ6IzQyNDI0Mn1ib2R5LmRhcmstbW9kZSAubWF0LXBhZ2luYXRvcixib2R5LmRhcmstbW9kZSAubWF0LXBhZ2luYXRvci1wYWdlLXNpemUgLm1hdC1zZWxlY3QtdHJpZ2dlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LXBhZ2luYXRvci1kZWNyZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1wYWdpbmF0b3ItaW5jcmVtZW50e2JvcmRlci10b3A6MnB4IHNvbGlkICNmZmY7Ym9yZGVyLXJpZ2h0OjJweCBzb2xpZCAjZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtcGFnaW5hdG9yLWZpcnN0LGJvZHkuZGFyay1tb2RlIC5tYXQtcGFnaW5hdG9yLWxhc3R7Ym9yZGVyLXRvcDoycHggc29saWQgI2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LXBhZ2luYXRvci1kZWNyZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1wYWdpbmF0b3ItaW5jcmVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtcGFnaW5hdG9yLWZpcnN0LGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtcGFnaW5hdG9yLWxhc3R7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtcHJvZ3Jlc3MtYmFyLWJhY2tncm91bmR7ZmlsbDojZmI4YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtcHJvZ3Jlc3MtYmFyLWJ1ZmZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmYjhjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXItZmlsbDo6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC1hY2NlbnQgLm1hdC1wcm9ncmVzcy1iYXItYmFja2dyb3VuZHtmaWxsOiNmYjhjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCAubWF0LXByb2dyZXNzLWJhci1idWZmZXJ7YmFja2dyb3VuZC1jb2xvcjojZmI4YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC1hY2NlbnQgLm1hdC1wcm9ncmVzcy1iYXItZmlsbDo6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC13YXJuIC5tYXQtcHJvZ3Jlc3MtYmFyLWJhY2tncm91bmR7ZmlsbDojZmZjZGQyfWJvZHkuZGFyay1tb2RlIC5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC13YXJuIC5tYXQtcHJvZ3Jlc3MtYmFyLWJ1ZmZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmNkZDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXIubWF0LXdhcm4gLm1hdC1wcm9ncmVzcy1iYXItZmlsbDo6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBjaXJjbGUsYm9keS5kYXJrLW1vZGUgLm1hdC1zcGlubmVyIGNpcmNsZXtzdHJva2U6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXByb2dyZXNzLXNwaW5uZXIubWF0LWFjY2VudCBjaXJjbGUsYm9keS5kYXJrLW1vZGUgLm1hdC1zcGlubmVyLm1hdC1hY2NlbnQgY2lyY2xle3N0cm9rZTojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci5tYXQtd2FybiBjaXJjbGUsYm9keS5kYXJrLW1vZGUgLm1hdC1zcGlubmVyLm1hdC13YXJuIGNpcmNsZXtzdHJva2U6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnkubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1yYWRpby1pbm5lci1jaXJjbGUsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudDpub3QoLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSksYm9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnkubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSxib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeTphY3RpdmUgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LWFjY2VudC5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtcmFkaW8taW5uZXItY2lyY2xlLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudDpub3QoLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSksYm9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LWFjY2VudC5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnQ6YWN0aXZlIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuLm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xle2JvcmRlci1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuIC5tYXQtcmFkaW8taW5uZXItY2lyY2xlLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuIC5tYXQtcmFkaW8tcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnQ6bm90KC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGUpLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuLm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGUsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXdhcm46YWN0aXZlIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1yYWRpby1kaXNhYmxlZC5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZSxib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcmFkaW8tZGlzYWJsZWQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1yYWRpby1kaXNhYmxlZCAubWF0LXJhZGlvLXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1yYWRpby1kaXNhYmxlZCAubWF0LXJhZGlvLWlubmVyLWNpcmNsZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1yYWRpby1kaXNhYmxlZCAubWF0LXJhZGlvLWxhYmVsLWNvbnRlbnR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zZWxlY3QtdmFsdWV7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXNlbGVjdC1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LXNlbGVjdC1kaXNhYmxlZCAubWF0LXNlbGVjdC12YWx1ZXtjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlIC5tYXQtc2VsZWN0LWFycm93e2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2VsZWN0LXBhbmVse2JhY2tncm91bmQ6IzQyNDI0Mn1ib2R5LmRhcmstbW9kZSAubWF0LXNlbGVjdC1wYW5lbDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA0cHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LXNlbGVjdC1wYW5lbCAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLW11bHRpcGxlKXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQubWF0LXByaW1hcnkgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQubWF0LWFjY2VudCAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZC5tYXQtd2FybiAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZCAubWF0LXNlbGVjdC5tYXQtc2VsZWN0LWludmFsaWQgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQgLm1hdC1zZWxlY3QubWF0LXNlbGVjdC1kaXNhYmxlZCAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlIC5tYXQtZHJhd2VyLWNvbnRhaW5lcntiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzA7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWRyYXdlcntiYWNrZ3JvdW5kLWNvbG9yOiM0MjQyNDI7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWRyYXdlci5tYXQtZHJhd2VyLXB1c2h7YmFja2dyb3VuZC1jb2xvcjojNDI0MjQyfWJvZHkuZGFyay1tb2RlIC5tYXQtZHJhd2VyOm5vdCgubWF0LWRyYXdlci1zaWRlKXtib3gtc2hhZG93OjBweCA4cHggMTBweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMTZweCAyNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA2cHggMzBweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWRyYXdlci1zaWRle2JvcmRlci1yaWdodDpzb2xpZCAxcHggcmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZHJhd2VyLXNpZGUubWF0LWRyYXdlci1lbmR7Ym9yZGVyLWxlZnQ6c29saWQgMXB4IHJnYmEoMjU1LDI1NSwyNTUsLjEyKTtib3JkZXItcmlnaHQ6bm9uZX1ib2R5LmRhcmstbW9kZSBbZGlyPXJ0bF0gLm1hdC1kcmF3ZXItc2lkZXtib3JkZXItbGVmdDpzb2xpZCAxcHggcmdiYSgyNTUsMjU1LDI1NSwuMTIpO2JvcmRlci1yaWdodDpub25lfWJvZHkuZGFyay1tb2RlIFtkaXI9cnRsXSAubWF0LWRyYXdlci1zaWRlLm1hdC1kcmF3ZXItZW5ke2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLXJpZ2h0OnNvbGlkIDFweCByZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1kcmF3ZXItYmFja2Ryb3AubWF0LWRyYXdlci1zaG93bntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTg5LDE4OSwxODksLjYpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1ie2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlLXRvZ2dsZS5tYXQtY2hlY2tlZCAubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIzOSwxMDgsMCwuNTQpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1jaGVja2VkIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1wcmltYXJ5Lm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1ie2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlLXRvZ2dsZS5tYXQtcHJpbWFyeS5tYXQtY2hlY2tlZCAubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIzOSwxMDgsMCwuNTQpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1wcmltYXJ5Lm1hdC1jaGVja2VkIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLm1hdC13YXJuLm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1ie2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlLXRvZ2dsZS5tYXQtd2Fybi5tYXQtY2hlY2tlZCAubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuNTQpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLm1hdC13YXJuLm1hdC1jaGVja2VkIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlOm5vdCgubWF0LWNoZWNrZWQpIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1ie2JveC1zaGFkb3c6MHB4IDJweCAxcHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDFweCAxcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAzcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMik7YmFja2dyb3VuZC1jb2xvcjojYmRiZGJkfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXByaW1hcnkgLm1hdC1zbGlkZXItdHJhY2stZmlsbCxib2R5LmRhcmstbW9kZSAubWF0LXByaW1hcnkgLm1hdC1zbGlkZXItdGh1bWIsYm9keS5kYXJrLW1vZGUgLm1hdC1wcmltYXJ5IC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXByaW1hcnkgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dHtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtcHJpbWFyeSAubWF0LXNsaWRlci1mb2N1cy1yaW5ne2JhY2tncm91bmQtY29sb3I6cmdiYSgyMzksMTA4LDAsLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtYWNjZW50IC5tYXQtc2xpZGVyLXRyYWNrLWZpbGwsYm9keS5kYXJrLW1vZGUgLm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdGh1bWIsYm9keS5kYXJrLW1vZGUgLm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtYWNjZW50IC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWFjY2VudCAubWF0LXNsaWRlci1mb2N1cy1yaW5ne2JhY2tncm91bmQtY29sb3I6cmdiYSgyMzksMTA4LDAsLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtd2FybiAubWF0LXNsaWRlci10cmFjay1maWxsLGJvZHkuZGFyay1tb2RlIC5tYXQtd2FybiAubWF0LXNsaWRlci10aHVtYixib2R5LmRhcmstbW9kZSAubWF0LXdhcm4gLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtd2FybiAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC13YXJuIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXI6aG92ZXIgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZCxib2R5LmRhcmstbW9kZSAuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmQsYm9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdHJhY2stZmlsbCxib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLWRpc2FibGVkOmhvdmVyIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci1taW4tdmFsdWUgLm1hdC1zbGlkZXItZm9jdXMtcmluZ3tiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci1taW4tdmFsdWUubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nIC5tYXQtc2xpZGVyLXRodW1iLGJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLW1pbi12YWx1ZS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLW1pbi12YWx1ZS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWIsYm9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXItbWluLXZhbHVlLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZy5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLW1pbi12YWx1ZTpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZykgLm1hdC1zbGlkZXItdGh1bWJ7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjMpO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXItbWluLXZhbHVlOm5vdCgubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nKTpob3ZlciAubWF0LXNsaWRlci10aHVtYixib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1ie2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpOmhvdmVyLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdGh1bWIsYm9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXItbWluLXZhbHVlOm5vdCgubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nKS5jZGstZm9jdXNlZC5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRodW1ie2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci1oYXMtdGlja3MgLm1hdC1zbGlkZXItd3JhcHBlcjo6YWZ0ZXJ7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdGlja3N7YmFja2dyb3VuZC1pbWFnZTpyZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyksIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSAycHgsIHRyYW5zcGFyZW50IDAsIHRyYW5zcGFyZW50KTtiYWNrZ3JvdW5kLWltYWdlOi1tb3otcmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCgwLjAwMDFkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpIDJweCwgdHJhbnNwYXJlbnQgMCwgdHJhbnNwYXJlbnQpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXRpY2tze2JhY2tncm91bmQtaW1hZ2U6cmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpIDJweCwgdHJhbnNwYXJlbnQgMCwgdHJhbnNwYXJlbnQpfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIuY2RrLWtleWJvYXJkLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlci5jZGstcHJvZ3JhbS1mb2N1c2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4wNCl9QG1lZGlhKGhvdmVyOiBub25lKXtib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyOmhvdmVye2JhY2tncm91bmQ6bm9uZX19Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtb3B0aW9uYWx7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbi1zZWxlY3RlZCxib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1pY29uLXN0YXRlLWRvbmUsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1lZGl0e2JhY2tncm91bmQtY29sb3I6I2VmNmMwMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIubWF0LWFjY2VudCAubWF0LXN0ZXAtaWNvbntjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIubWF0LWFjY2VudCAubWF0LXN0ZXAtaWNvbi1zZWxlY3RlZCxib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyLm1hdC1hY2NlbnQgLm1hdC1zdGVwLWljb24tc3RhdGUtZG9uZSxib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyLm1hdC1hY2NlbnQgLm1hdC1zdGVwLWljb24tc3RhdGUtZWRpdHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDA7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyLm1hdC13YXJuIC5tYXQtc3RlcC1pY29ue2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlci5tYXQtd2FybiAubWF0LXN0ZXAtaWNvbi1zZWxlY3RlZCxib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyLm1hdC13YXJuIC5tYXQtc3RlcC1pY29uLXN0YXRlLWRvbmUsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlci5tYXQtd2FybiAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1lZGl0e2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNjtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb24tc3RhdGUtZXJyb3J7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWxhYmVsLm1hdC1zdGVwLWxhYmVsLWFjdGl2ZXtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWxhYmVsLm1hdC1zdGVwLWxhYmVsLWVycm9ye2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwcGVyLWhvcml6b250YWwsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwcGVyLXZlcnRpY2Fse2JhY2tncm91bmQtY29sb3I6IzQyNDI0Mn1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXBwZXItdmVydGljYWwtbGluZTo6YmVmb3Jle2JvcmRlci1sZWZ0LWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXI6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXI6OmFmdGVyLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsLWxpbmV7Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1zb3J0LWhlYWRlci1hcnJvd3tjb2xvcjojYzZjNmM2fWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItaGVhZGVye2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC1pbnZlcnRlZC1oZWFkZXIgLm1hdC10YWItbmF2LWJhcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC1pbnZlcnRlZC1oZWFkZXIgLm1hdC10YWItaGVhZGVye2JvcmRlci10b3A6MXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsLjEyKTtib3JkZXItYm90dG9tOm5vbmV9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbGlua3tjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVke2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwW2NsYXNzKj1tYXQtYmFja2dyb3VuZC1dIC5tYXQtdGFiLWhlYWRlcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyW2NsYXNzKj1tYXQtYmFja2dyb3VuZC1de2JvcmRlci1ib3R0b206bm9uZTtib3JkZXItdG9wOm5vbmV9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTEsMTQwLDAsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtaW5rLWJhcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5Lm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1pbmstYmFyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1MSwxNDAsMCwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LWluay1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWFjY2VudC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtaW5rLWJhcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50Lm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50Lm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyMDUsMjEwLC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LWluay1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtaW5rLWJhcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtd2Fybi5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtaW5rLWJhcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtaW5rLWJhcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTEsMTQwLDAsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb257YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluayxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5re2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC40KX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rcyAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmtzIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3Jle2JvcmRlci1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTEsMTQwLDAsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb257YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmssYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmt7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmtzIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGlua3MgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXtib3JkZXItY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC40KX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjA1LDIxMCwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmt7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVke2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjQpfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmtzIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGlua3MgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmV7Ym9yZGVyLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC40KX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFye2JhY2tncm91bmQ6I2VmNmMwMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhci5tYXQtcHJpbWFyeXtiYWNrZ3JvdW5kOiNlZjZjMDA7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIubWF0LWFjY2VudHtiYWNrZ3JvdW5kOiNlZjZjMDA7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIubWF0LXdhcm57YmFja2dyb3VuZDojZjQ0MzM2O2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmUsYm9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUsYm9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyIC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmlwcGxle2JhY2tncm91bmQtY29sb3I6Y3VycmVudENvbG9yfWJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhciAubWF0LWZvcm0tZmllbGQtbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyIC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyIC5tYXQtc2VsZWN0LXZhbHVlLGJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhciAubWF0LXNlbGVjdC1hcnJvdyxib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtc2VsZWN0LWFycm93e2NvbG9yOmluaGVyaXR9Ym9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyIC5tYXQtaW5wdXQtZWxlbWVudHtjYXJldC1jb2xvcjpjdXJyZW50Q29sb3J9Ym9keS5kYXJrLW1vZGUgLm1hdC10b29sdGlwe2JhY2tncm91bmQ6cmdiYSg5Nyw5Nyw5NywuOSl9Ym9keS5kYXJrLW1vZGUgLm1hdC10cmVle2JhY2tncm91bmQ6IzQyNDI0Mn1ib2R5LmRhcmstbW9kZSAubWF0LXRyZWUtbm9kZSxib2R5LmRhcmstbW9kZSAubWF0LW5lc3RlZC10cmVlLW5vZGV7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXNuYWNrLWJhci1jb250YWluZXJ7Y29sb3I6cmdiYSgwLDAsMCwuODcpO2JhY2tncm91bmQ6I2ZhZmFmYTtib3gtc2hhZG93OjBweCAzcHggNXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA2cHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDE4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9ue2NvbG9yOmluaGVyaXR9Cjwvc3R5bGU+Cgo8c3R5bGU+CiAgaHRtbCwKICBib2R5IHsKICAgIG1hcmdpbjogMDsKICAgIHBhZGRpbmc6IDA7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBmb250LWZhbWlseTogUm9ib3RvLCBzYW5zLXNlcmlmOwogICAgY29sb3I6IHZhcigtLXByaW1hcnktdGV4dC1jb2xvcik7CgogICAgLyogTGVnYWN5IG1lY2hhbmlzbSB0byBhdm9pZCBpc3N1ZXMgd2l0aCBzdWJwaXhlbCBhbnRpLWFsaWFzaW5nIG9uIG1hY09TLgogICAgICoKICAgICAqIEluIHRoZSBwYXN0IFsxXSwgbWFjT1Mgc3VicGl4ZWwgQUEgY2F1c2VkIGV4Y2Vzc2l2ZSBib2xkaW5nIGZvciBsaWdodC1vbi1kYXJrIHRleHQ7IHRoaXMgcnVsZQogICAgICogYXZvaWRzIHRoYXQgYnkgcmVxdWVzdGluZyBub24tc3VicGl4ZWwgQUEgYWx3YXlzLCByYXRoZXIgdGhhbiB0aGUgZGVmYXVsdCBiZWhhdmlvciwgd2hpY2ggaXMKICAgICAqIHRvIHVzZSBzdWJwaXhlbCBBQSB3aGVuIGF2YWlsYWJsZS4gVGhlIG9yaWdpbmFsIGlzc3VlIHdhcyAiZml4ZWQiIGJ5IHJlbW92aW5nIHN1YnBpeGVsIEFBIGluCiAgICAgKiBtYWNPUyAxNCAoTW9qYXZlKSwgYnV0IGZvciBsZWdhY3kgcmVhc29ucyB0aGV5IHByZXNlcnZlZCB0aGUgYm9sZGluZyBlZmZlY3QgYXMgYW4gb3B0aW9uLgogICAgICogQ2hyb21lIHRoZW4gaW4gdHVybiB1cGRhdGVkIGl0cyBmb250IHJlbmRlcmluZyB0byBhcHBseSB0aGF0IGJvbGRpbmcgZWZmZWN0IFsyXSwgd2hpY2ggbWVhbnMKICAgICAqIHRoYXQgZXZlbiB0aG91Z2ggdGhlIGAtd2Via2l0LWZvbnQtc21vb3RoaW5nYCBkb2NzIFszXSBzdWdnZXN0IHRoYXQgc2V0dGluZyBgYW50aWFsaWFzZWRgCiAgICAgKiB3b3VsZCBoYXZlIG5vIGVmZmVjdCBmb3IgcmVjZW50IHZlcnNpb25zIG9mIG1hY09TLCBpdCBzdGlsbCBpcyBuZWVkZWQgdG8gYXZvaWQgdGhlIGJvbGRpbmcuCiAgICAgKgogICAgICogWzFdOiBodHRwOi8vd3d3LmxpZ2h0ZXJyYS5jb20vYXJ0aWNsZXMvbWFjb3N4dGV4dGFhYnVnLwogICAgICogWzJdOiBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD04NTg4NjEKICAgICAqIFszXTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL2ZvbnQtc21vb3RoCiAgICAgKgogICAgICovCgogICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CiAgfQogIG5vc2NyaXB0IHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgbWFyZ2luOiAwIGF1dG87CiAgICBtYXgtd2lkdGg6IDYwMHB4OwogICAgcGFkZGluZzogMTBweDsKICB9Cjwvc3R5bGU+Cgo8L2hlYWQ+PGJvZHk+PG5vc2NyaXB0PgogICAgPGgxPlRlbnNvckJvYXJkIHJlcXVpcmVzIEphdmFTY3JpcHQ8L2gxPgogICAgPHA+UGxlYXNlIGVuYWJsZSBKYXZhU2NyaXB0IGFuZCByZWxvYWQgdGhpcyBwYWdlLjwvcD4KICA8L25vc2NyaXB0Pjx0Yi13ZWJhcHA+PC90Yi13ZWJhcHA+PHNjcmlwdCBzcmM9ImluZGV4LmpzP19maWxlX2hhc2g9OGYzOWIwMjciPjwvc2NyaXB0PjwvYm9keT48L2h0bWw+", + "ok": true, + "headers": [ + [ + "content-type", + "text/html; charset=utf-8" + ] + ], + "status": 200, + "status_text": "" + }, + "https://localhost:6006/font-roboto/oMMgfZMQthOryQo9n22dcuvvDin1pK8aKteLpeZ5c0A.woff2": { + "data": "d09GMgABAAAAACn8AA4AAAAAUjgAACmjAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGmQbmUAcg0oGYACGTBEMCu1810YLg14AATYCJAOHNgQgBYJ0ByAbL0RFB2LYOGCA7DduwB2DjQOQz3hJ9n+ZwI0hWB/YxYSYMBRSFENBsWqrAkWbJBHpUKamYBECLd7YUy2OVYvlKX1dMf05+T/7LtU4wMKUW3v6cz1MLF0FGyHJLEG01r/VMHufgpZJIoGKBHQMKsYkFpgU4tsDmtv9xsaIGoiNiIJRtJKSElLSIdGjQuiRIypl0JtBlKISJSqZZnH/Oq0ZWaYZyYoPCFpukb7+N+xuwk6iBRZMI8WdlLQH1F3R7l157zoCyXjA9AD36nWBrP07PZhwgBLSeMnLEQ4VqJsqlv8siGuabsED3LeKFnxrugO3hMah9NJJ/ipRkvNo0bWSH6xvN8TX2qedvrqte1s1/yDEW6dCUB4tkIxQEeoDTSYMiiaAuBEGJLK/dSEgoaIi0Ua4CGXj/7vX2aa3YewLW7L1Fw6EC+fgxB/7NWWpMKZaUyFMhaxEyArLmA7J/62Zdje5MjlgYyvcOTf7ZycwswkX9oD2CklKoSNIzN4VWFXVET5/gKgKaO9USZgKCaxcreurQxDS1KS6SqUxAJqz+B+OtbQOoul9mcsgjITAKKN32318dn4Bhdn5t38EFHq8pCEUmUMECIAIFw4RKRIiRgxEnDiIBEkQpSqgdDmAQKCAVcCaECAgAiDACvyk0ex3gJounDg3gOACJy4k2DnDicusvN3gBBrAILTCpecT3AAH9C0NYpDo+7rNUJuyf/BUQ/cM42KIV0v11FyNhkyiUDj0XDKjjuX1lEnr9K7FjMnEPpZVifqZhCWKr4SbqzTQwLYaKjSBrueqpWpPjRbN9WixjymuFFH/CwqFBhYDRux4XXDRJZfdwE+IMBGibhEnQYq021SoUqPpHm069BkyZsKMhXQZsmTrQkH1yGNPPNWtR68+/Z4b8cJLr0x66515C1atWbdh05Z9BxC3mkNDHAcJeFI4TeKEYI8bP9Y44ePEm77r41+ewEGxRUrtUWZUuIsOetH6bTJql3HbzKjlpPZkximHvICSPiqPeMwTngZTLZpmhlleMxe8ac9b3jHPAmuss8EmW8F2u3bYZS/Yb9vBNIRJvask5+7FELPwimHcaoZ46yTaJ9WCSTY0DsjmwGD82Y7DoWmOfu1MGuY6fi64i8JTF1OyuErRYMJBFtuDaaussAMsMLJnmS0vuQHreu+JDYwyxjgTDXPAYsWQxpkTT6ltykCFu+glcU3S4tKxymCyyA7etO0t75hnoWEGSu1TRoW76JHEG97yjnkWzo2mioUhQSbYYOmYZg2ss8EmWw1jsBYFTyY55CV9Yp999tlnP46GGajhpolWtE5hDEphgsHaYdbBBptsWWTntaOdq59hH5i0BI2pTbJ9tW44FNXel24XIjwwjRl9q3SNYW6MMqPqdvrNMVySVP2Trj0U3CvhlYipV1w9cpuCyIgMoYoJ6uAoNADzvug45Zj7yoBXfrjWup4FNpUP90w83Gjmo+puO/m8JAbcN3D4dUpCw6N96EFl/RgLIB76ETisxR/w6aPfR7D+NjfOfbeHOYYeHrwM6cPqaG0C4EDa+qeN8E9UN/umlSM27Cex9S8bW/9cmENaN4plychcK2z/rnfLbrbSThvtiLBzSrZHuO7Wmpvu9U1ldbZfCTb4hlrtIxcAHO5g65ppXrrnhMPC1kvnK5fWHKkuAKxYS2ygcV0rlvjEtGOxglUm6USA2od7bZ7ZA0zgcMNXu6Vq96DjVnaFuUnt8GvYm+2/bLjrmx9odH8OHtYJcBgN/b8kxzn07RsPkp7oNsv+PxY7vLXhbI0B2O6kbBr78YIaGQ9mNpD/ZDn01If3Bh8OOu7XP4HYqD7kLYGVOfcyTk47aKYl0X7mMjiMDjPg7M42er6j3/abnabFTbZeexnmm/4ZPQMO37lXsuKw1GmniQNWEawkgpUo+P+g8bqExlXC6NwiDU+RkuNUiKeoeU+7RxcXffIw9p5jytx58d4L0uW4KO/t67osuGHVFr1lzLkJFBG7OIqjOKlO+kwUPh53gWwuEnGJGNdJ7wYZ8JOTEBHC5HCLTMRIT5wnSPAYSbKSIiNpslAk1h3SUiqP+NULp2hOtdHQAdF0S1ofe7ErOh/EMyMdczKLF9olnjsqE3JyqeeOygFPyuNJXV4ExVMo3X9j06MfxnOvIEZNoDdJXkZT5mC98R7x1gKc1fs01mxBk9dJBzawOQ5sKDkp7MUhWOFQrjBRrvMoIaKIEOVmyUxYL3rQ4QjYwQIGsIZUnapA3GVBSAIaNA5ND0QYkJFRiSHMgAOcYxIJoiQSJek+IlUaTgrBBg6wgcNx6IRwArCCIg8o0IFB0e4sQGgD2sfstj0Yi/vtsrpEq52XqxUx7wXavU9R5AbVfbV1p6EDtGWnJA/XVOMRsvo8RlPdHad9NxBpoVtpYHLL0QrVHnveFe6uwPf/7jyBq5c52luBaALJx8pX+LgSQAvlHBSU/jQISHSdPDXyK0T8EDNBpjzkeaygcCLzJqgiKV9QtldXCkW9eOkpVFBLmWjZoyokvMYGYuM3q7LDGjTAj7sPXGsYBaVQYdkTHmY1/zyKJHrVqlSqUatOvQaNHgpOvOwmgbx4I2vWolWbdigIDqeB6phIgQHjoSEEYoO3GfWG+xmO9H2b14EtgH09CwceqakEMmDjtbHwH1ywyEvghjwO6F0GGbeagAYru65f6TdFf8NxEZpQA3bCjcYxgDMmoUrc/1DdhozZ9MEhMsFlbnKRv254PFwOt8PD8DLMhvlhdVifRh0CAEy4lSj1fMkew8Zt+fiWtyg/Gs6H67an546+N+CsD3294PDnwOcHM058+/z/7Vt/15TJ8MUb+x/6/XXxtmRzAC4jjHlHw5q/XvcP1+XZL9e/HyHSqDHjJkyKEm3KtBmzXpsTI/YX7U0Txdm2Y9eeffEOMAIAZPHeNcAFkH5MT6DhJhQar4QOSmnAxmukk4d0404Pg1C8IcIZ7jem0m8c6GKCWZ7xmjkieMMCoyyyRBTLbDDlbRLDFh94430klk98Z5Uf/ITIL/6x7f0n3jtUBxqZCCT4yEItBRI1aiOQrFEfAiSN+hJI8bmP1LFAqs99ri4F0n3ua3UrkKW5HwRyNfeLQJ7PPVUzgXzNPRco1NwrgSLNvRYo1jyHQ6BkqJuBg+pwqVfwfijyRYUwvQnHv6TWp0PyKigaNh96H4GBhmyOegPVB40f59xGEvqhc+sAD9WxCKjVXrZAVDdIs68AhHKCotyajCaMMM33GHhE96JFqxBPQEEEoqpC8iJOGGL05OS/t6P7dswwoetDgYYOgzlyg98MT+zFf0ajcoEikxZ3w24atFBdBAG0lP/g72LZuroeHO2D0lGazKLkzmMauyiDCdhr2a5txrOVjSChgd2ova0t77MhhbcusVxATqdNzYG/FtlUbXRQPRO4OeZ3jE2LIpfa374QSXm/jXcJ1RlLGxZ+dBY1t4Brn0S4YIb5A885pd4Nm4nTxHTsncPU/uJFsrvfCo55+xh0RpRwlNVFmRZ5JT0a8vqz7YKjXITu0NETuTeLgWx0wlG1ZKwnE8zEIEPVAl29KW8grf5KvdJSAaHPwFwMFyKZcNGCzUM5o39uRYwWpCG2syOpPpQYJcOaFn+YiakAyoJBWW1PdQ3gky5Lyrv1Qu08YS8gSdFMp6Xw8V//1cwtjV/OeuogqHw10Ysw1TOlp8shZnahTTWfy4ZZH3Bv01/rq0FPiwuORTUH3Rr39SnJaRmeqQkMhbRqn4TlQFNuBzh2XJgnuDqHspyu0HjUXsMzfPUKBo4oQFl/59ra8oQdbCz13uBAOQ+7IIF6czUJA1lU66Bw5NYfWV31oNN7ypngGeWsuTqsEsrhFQEqG1WQZkIcz5vH8rsZjFklUsoKdqUiEv68IaVRHWA1ltQdWoR4IBbvBaMNWXDw7xohT2WjEINN7BucggQF7qiNneY8xhDhaJpbjN+TprJdqRJ68eUpZ5QTOoqiy71R/rGSuGKW/zv5f6bK+V+XqNf9bxu3tMVwufyHCz+PSnKjrh9+fWXoqLsUjumye4LFDWIi7dtumjw+brjklOBI+ScdTjXMTJQ4+jRhyjVAOkeCkt30cx/S2Z8qaXHhEDOrpWN7sCJd6FjeIVEmfARcWahxPLsI1sVRRvQyvF1z0BOqq/mw7dXZ5YiDWzSTRl1gQmV52yFfjGnz20KQxu571VcjSo6/lSSUtDza2mZJtR3ssJefgx5bpVWyM8HDYK/wkP5JPnL6UqVarauNUmfRkTOho3FTlGoP6PIFDRtZeBq6BcMRkGuIiNY4MYmDV0ujHNQz+aSb3NheHTbPCEeU8Mg3wvEIObtW60VLwLt7tL9LwT6HZUmRTfWEN7twFXImIwjFDI64QVhZ3NhBFt8eBbxHMZ8CaIe7H1C8xvXMdyxLPb6VIsSjjQ5Tu6SCqgAr05exOiWSIOmZeqYl2yAKsJ4IfFNStZo5LrDOMVUi2QHIrmqZ8dR/Sd8CWKfN1Wr8Mskb5eGEuUnILSj6pq4YSmagxspkGt6pTX8GqCojM8mUjwKb6kdQiWqQsEttHrQP39bBMb/jp+WMbYfEKRvFj3/DjHhrj/gV5E+5wKkhbQbvSCZBg9oF+S042qt+KCNAGgjS24pSDB1vg0HdlcYmpwORmpccTd0pV+zgEtazSNPfQ0pIHnElz5rKRywGsg04LtCsfnVCrglVCXW2UwSoJrdok1FMXuGCi+3BkEsTB73xIylxRo9pfLYQYxLuUC1A6WAXzk0miNkeiw1OG6sUC1JVAcxx+9QSh5gpb4ljMlXlQ8qQQ3dgkoicYMp93+rZewvB1cgE6qFuCI/w2OaxiJkb+/Jx6REGfgqeugr5MzGoCXlAhbvvgpRRatUGSqa0aT40UTVEIniStK2KkQNSWnadTS44MC0ZcShqn/tNbjSpzhJPWqmVtdIahqMy4JIurfISwFqdDknlN/ZkJWaJOfPmu0hCIViLEiCXeDo1fx31S8zs39RXB2funyM/h/4qJvzk1FE1AlLSBoRckNzDUC2Vie0A3dVydpP2+nlQlXWLmsM6kpxf2qNAnzxXE9I8zbaSdNBbUmBp9qN4v7SdxKEPSQw7OPKYqmGDHU1G25UrXOzQT8UESQ8gg7ZI7KplJNU1l8Ei8eqUd9TGu/Hq7MDh3qFLtVYpmTYB1RVu8jGGn+HIKixbp7pl08klbTB60qEpikY9sjLo9EaglvU96Bz3EvfEcLRjtkf+1rba2RopIJY4orU7uObY3Y9SlGnOR8UZRdWYYRWrEpkS6FgkfdvN4lxqew4RQe5mP6W+wnEkhvXYbXxIZd2qOGV+DxkBE9TT6D3p7Zq2VzJUAseOmluQLiocOOkAKDVWaXR015dYYhhgYrCcD6ml8QGDF/GOWXf4pN3DFIOvh2olo92vyup7stXa0MvaZcUB90LXMpfiqT0HdGwvKlR7KYetkJMa2zJ/eArTc+pPLwuQVoRD7jxII8nWDhElbFkfTa6MUhEyZ1g5yvyhBBlM5pzxUDZLT/37WD/EMrpTwTbt4IhlG7ZotGO0+OI4aZ8Go5MwWJcz21FJpnoSIFY/ccFOPVCPGOEsSkbF/PQIj5jGOrVbVnfwRTqNq6nNasQEQSYH7oLXLiW31UgXpk8J44vqKc0GKe+BUadt3wUGAkJHB7zFtQeGQxccdSieReslSPWf21E+PxPTi3gAyczhLgUOemFaBT28Nb0szb2eFfH0QV74/FTUWTUSxGVUnmvtGSxEF+eUJztVfeYpr5KlNEbYbqQ/w8UBwJAH0HamgKFli1D0/cDgt1aKRsyIiBkajPOqYfpIH2OmzjUXl2DjQBcnYNPzP23nDgeJTLHZjvA3F6eZS+qL+hBHp2CFSjh9r5hEHI5LWf8yYeu+fiXuj2dEpxTy4BSscCAS7mcaFpIjOC3TN15a8XSiiv1d5nw1J3XvVVdSdCXBLyTQ7X6UP791na9WoVPtyKsOfHdGN4V1cnOIkpCaGROZGQLYjJzIqtrI6Io6olJUVVV4RG1VQhxWw8BWVUnfSk9FQ88uQ89O+1zrjciqGmx1dYKSoDTFEzCaH0DKetZ6qpr6NipKhta6Pz/vyl71JjjIgm2Mo3dThbeljyxJqar/UU1W/8NoQ8MMt3tOGvIR8uHF1YdJ9djPRUuCiuyQgv0MsjKrmh7gbl1DWxUY4ZuThDq3YelD8tGWvyGgLy1vY6imbeEGLDOpHO7hsJgJURqr/sUfdMIUeQNS3akvcKdANyLxpG6ttwWvR5SKf+OeDogqLHnnfDSKVObzyPWhfkSuc08aOBScttLk84hUfq/nmw8c5a+vGV3LuuaOM8ilM73oei1b0HiQOciMcqb1WLAxXFpjymrKekl9Wf4AqqVC9FkHJbMIdHx1e6qd9XNg5NrO3gaSJT+J0MR/vZGQBOTgYj7stSKQKXNVXJDY31kSRgv+kF24ebC3cBUl1sW4FzlLSg6fQRYu7hOXE+KiplBr8IY64U2sYRs6DULU6B833EN1i/QIcale8TkFiZTnqB9vXuxNN79muxhd9Q6O2QgmRCCZ0QQ4jJKJnpTGv+v9oztv+iwCmx2v+PFGND0YOBw/gIUOqldmXGhMUkLkg/zYNCQBblntjGSPaFO1s10v9n8avPBleHDEAF69UZnZrVe/kugkTRzewS6vfEa97f0yw/q4iTWYFOobntaUn1ZEjgpQEKYF4W/NhTyv0Yd/jpcJkcNPVxmmV74yjU6gZf4ppenXaNNMkCyKPbn0FNpK3wWEJHdmZqV0gZyeMm+7ch9v5jGOnDmQHhB2JdRa3fDkj3rk9+T/0vjk3+XHvmFPPPktb7jXunTtve7t2X9N52URmJf7Oyv7Z1pSZER6MpvtCdeYGG/3KOJiemfEJYDQapiYQomOZSg1yG6ZmOa28yKIOPdT7qhorWaMNs35ggvr6G+bbL/MCjzP6ah2FK4FBKZTczOTe4A20vPvgNDZoDTV5MABkCq/LlcqJyNXIgcCLfEZqKciVoFpdFmDesA2F/EViFPTiYjRMXd1dPV1vB/kbEJBSleHOp5MjjQ3lda6OCtr5fRIdt1PHpfS7wyfXh9tfyRcLaIbr62anLqFf8lc4Y96mu5478FlTWmhS/jNdM+EJUwrPupOtsbzm0OtfvTfGH6QXPh6JozbrrScJ8y+FHD8bb/cUsVwggG/0BH0/sMvm6XGSpkVD6YkrWxDSTe7c+a4a9+DZXxyDkByItiaGDTEM0iu4ZkhD7Yc//CjBmoBQ54/eN/fc9+rwOayDzexK2zg39L2rRpGqZi8+EBartu5PKFZIS7+CS6kU6AePnpik+v3e5Sop2jiixQhuoqm7aMozvXeY41V+Vld4yx/kg4Gj7aU1KWcbDU7WvOfnqsuEoFnZqNFInyV/QiTCN5nZPE7+yH+3MbPICCNKvWjWSgsBAw5vWhq2g8k+yJtInsAQ44pGvpsA+o93SqOOAdyC3tVlhAy8kBF0JFz/cg210yPCDdP7xAzQPhtibvbpfSGstK9AlbQCoPe0sXS0v49hEVCL/h99hL428m9tBO/9ybefFp41hNCTIjwS8uEGDhR0dy1v7/a8ZixbckIvvJrm+BY0FLoZabrhRNHyKcHKnr6S5R8k83m9Hp++unpHLzlzRK4Kve1aWvrXsVreu2rvX03aKXVzpKkaavJDXQ1abeQV46TqbL0dQ1N9DUkmZmnCHqM41HHOAfqm/OfSS4K9QUz6i84iIkjPTGOf2D+8nwat/5Dv8AorzwlLqI8PxllC1r42qlofn899IsIf8EvSmxaRteT6WtFppluQF5yPm0H5ff4GW+Z9FRNX92p9/Tqd9zSLDHteYSAniPjaOrOBVJNenBsCSkb+ECP+P3O8mhOA355PmvXK+xFQG9UdVZuclGwu1FWoJPdy0Drcvdm9umtLDQhcfhBb1RfTnlOadBspjeo+OCnAYPvBgx+qug+qFaSF+EVYN6xnP1wEkFWlp++LWp8WFre0Fj0DuL/n6Bpnjw7SK47206egNWRk90XG/Don2Vs6T8vNHH1M59b7+U8Qm7CD/ByunG6sXvzNnHWWfcvykeYXlt9MTG7sG530/7m2uuFlxMrYDsd9PbtGZvUMz1npmGdh1sFsoXnUwTWI9iKfiQBd/t2N2CJ3TkBQNsVAKhoMpkPe40M8E5YoCEH5vQGfmL1womKR09WGi7PPrg0Ww9iYdkZ2RlwuuJtMcK7BBcPd0eHRbeWvGxLqAXqTpuelRfB0ybaRol6j5A1YOD7aIqKLv+cyWvA+jXRIN+IR2kxVXfYwMsK5FBsP9eu9rxyT8EF1wEWKFLu8fHLl9BdNE9SX8V1atZO69a2Rae/AqkIm3Q/WqMmGlOf6gEbtwUaPjhT5PVtLjaj4+Mb2sYmWofkGMekvJGec49yn4M576+9691P3cKFKYCFOpyXW+zQ432hn13YruyxGLJW4SftnAZi9gSosc+zc3/mKQ38O58cPrVzBK2+gC5uGYi3jtUUlPUwiB3He414ZJexpXEx0ybG5sFWfT2p3v0h5UmdzDJd5raIsZWDNWGLtFUPFrz/di73Drkl4PxquSd/fvrZZ8lGXN/CzTetITYrO97M7UHP010ByufOzPHYpntF73Xz6mKzJ4BDpzMwa9AAFfGC8hK8HdzdjWMteNXRFMACBfQo4pRhrmuuLiHGQS7OwNEm3nnrpJRAxg9haRk5nUd4rqtuIqKZvwlQvnr5B2uUXmrtq2WzUtE/4/MG9JI3MrBXiNP4+SaMrN1rFFFvsPC1xfjPUEa8HQkh9rGB9Paj1MH9rQ65PE6KOLC3iWNig/KfOSOIf67GfMXB/xbjSAusAv+Zivx/LyekzbMK/KXg2qreJCZVzg+31MwnxlW/AdlVth8r13oHPYLpKIB5W4vz80h43r/Ki+1Cd+ZPEWt0MjDa6fXRBZNgznu4PjDY4xZG61IHmLcUGnc/6sA2/98uWmrBVHSlfireILkspnAaLnllZAl0yOQBRbwNFWycUi36BPjPnrnroX1MokJHw0srermzqWv9SQZVLczV2s7TQEneUZ5Dql5P298gdeshJWLYxKPCkkJjGu9CcAzVhWM+MtgR0kixrIiMLHdQljK7YnBIZnzxIGkQC4Jhzs6hE41tz2Cgh/Lo+7NpxUJ2ijgZPv5e6b/95JiCeNKxKPEnoFBy6JYEhb1NPIvVS5gVLZzFXiHexaRzmaX/ciZ8f/ghfs6K04Vn9lfGr4zXLjxWnLNwwMzSf2XopPCKLdM8jwJjFru5w92zthddj52/PgJiWQHZJkReneNqucKR4OdKFmhZfzz8ZTp1+vM40vFwuUWQlzAud2JkrcqwymhjFIV/JQvyTJmAfZoJ+N8jMli6+a02nbZ7Oy9OjMvxEsgCzcvQNflhOnX6y8jjtpWHAqDxha6IOhen/EC4Jl3l3GUNHSfzEqSk81WCWsLtppJfvWrmXhZQW18D0xx9jJlqUfd4qETYpvvTGjZhQgafkY7vUHZbzg6fnD83/fwUmXuVspTJ2T2FyWx/XN5I63GlfZcnZbwABbhCdX+BCMQCRztfWViCQw9/PXj2dGGquds5NMjdMTw3BIe+XQgKHz2KIifGisKjY8Nj4hPt80dG3cvSssJj0zIL/foHivwzsiOJWbmuZS8G7IqSSZGx4qigIMJUf8Bqf6DHZNCww4C/h2e/370LcLb1uFDWjNsYJkShUiFYQa5XTjpYulI6hJZG+RykMR2lHn1G/U4FpdSmJxRdBX6lWNsa9NC6x7ObirfiPV5RkIjWrAJipbelUZLDuFT7jW430zx3aruBLP+dWNsq+uHFbfTKK0pIdV5CcgnBWvGmZowMl2aNkoelWBhXndFR1ROaeFVbxTsimlGyJ++R1dl1bBUN410Aq2cyj4Fgrmu8HNb/FBQ/6+U2lBQVPp7scCM/ncwvqS/PTLMx1zUxd44L8vR3jjM3NdWx+x/ZUHweXynDVll8vqGu8Cy+qrSEvaLoHKF2hGqkOhSmMkQ1GhlsNVAdHxpUHW03AMeeZr27emF+4UH27lV+DS7CscGKGiJCJQz29eFx0bnJMZJWx7VMAq8YXKAme2iDobSQOUis+FFx0aW3wWgO0UEYcqC8klL2moKzDfUF3Ozpp1v3V+2kexy5NREhQQ9kAgQgV0ofw5o6ReFmsSCgmx4UKCEGsqIq6pK28SC4wVlCKgHc+R6HjHwnh7Q8R6e0TAfHzMz/R0RV7oiJq6iK3lTVcFFVgYvp+i7ZLkXVReHZ4YXVHBxf5HPkoS7PwOXKcRc7RYG/knfv3BUrJFSl43JD3RycnHQ0mlJIwJpxX1dVSZL/2s4dMVXBS4XWZYHBcfn+DjcVjWWPZVwkOdUGE6MqQ5yLrmlIyN9RlhDyzEcMgX0Ilhl4M+GIsHgAlN3P9x6WyuamilfjCKYxdelayjMUwLyFGJzuJu7f7Azd/00mwJAhbe73yGi98ZCQDKdbc06kWRV7kLBOmvpCN67+ssKdiYb3eYVGr2+FWXvjgbbCpuhRX17+o54q1WJqr/CT3soyjK2lp66OOcFOw8bSU+eehStiCXerwfFiqIVPZw+9NYerF8HVNtjDhIKULL/oHJh51tpY/NDFQ1Y9rUcyfuzXrqbD6OMBXsyWwi8tV29iyJ05reyzGtnKR/C9emz+z7jmwVBZRVNJwzdQWUN5mq+koaJpVdXq8iy6yqyPuGeZl0zafNLtoDNDavVsevD9iqSi/0QqwislY/PVKvGcPNHOrWoRVqaAFlPHzQgeHU/j2wGzsc9NTgyZ92j6Owff3tA+2s01vBgVMGTKY54jycVZ/kHFWbEAz1AMxkd3qW0DLcUhD0YUhVTNH5H0YtWKR5o77rVdMbmcxxJzRcTZw0xbWMXicZp+3D2j+FFdc3snw7e8oLHMgYltldFbMUuqftSQXbjauLCk5+wa6OCY4HqvE0/61PbIq0lbQFtao1HfcXILdrzmsE2NTzMz/O++vx1b6H/bI0u5UOXIwbo3kuCqo+5oKoIW9sqoY40/cSYqOg2EFI/8pM01K/L++5oUE/suzH8pJt19ezQ8vNzf80ZfYuKbdGXr7ohI4w7+W0XvRR7GPw5TtsFGMh1ljFc2TS19Wp1Y1R8WkrPSBXKThptdmxZiMZHcSEhC/WAVfhwwcr7SgX+X40luZpeU04PtXvblyhQF/Vsipjjo8ahkBNuMvMzoEu2zdNNvX1KOr35j19ah76bT5CCXUPWWAnKE0fTiaUsooh6RfbKHelRxKnikgFYzB6HsX2YCM9SJNMSz/ssqC65lv/Nj4Uuu0I9mQUnmpKcdU7ILs0tj7zoyKjbVtwuWfCX+/94Sk+OeeUvayNj1EzzGdv7teY9ia8sHYh77OauEECO/xb50l7aRsh7yiJmnvfG/C9dZ/Dohrnh2tKNkLj62dEZufNYms+xIHPOJEGIm8Nu+p8/NrM2ozWX8xuIBPD5hBkHeJqaBPg2BAV2BAap6N+TkBfjlZa3lFAQEZRVBaGPeJTDa9FKrpVTDqUtFAkFYZ/8Es3NeFmJnz1y5JX8NWDfZHZVMQ1FpxC7v+5bDQJfB6aBkGo4ipXRGgI3lECSecFA2DkWl+lJs7ayfQ+JVByVjIiqHQqlwsZ6cv50bQmqFs+U44MppDNzcTU08Xcx4DVxdzc3c3AzhNC+SmMQXyc4XlQTMXu2zkGVMRpKQZChztf9XC2d/bUXwp8PQfa0Tld52Z9mL/U77/zx1HsPQEtwS1xLSQoc5xfXFKYaLvdSFx62CPIJ59CAkLC4MpFsS5LPlYWTu2FLT9tHnTzzqJLnygwU8/RycnM0XSAv1Ko2WUQhjE8Su9mzSeT5JKQc+HL7Q0N3ZbHdZEjBzlLlngRRjHMHL0cV8kbT46iml1KdRxEuEMJrPJpQ6HKgfYi0ferUX0wUKZdmNSQn59VCcXJ7XmJCUXY8UFGB74qPRra19CVHoNsCNDMfvAs3LzhHOtYW1fhg7f0xp0M7SWQZwjxBIXYwyO7JVVStzSjUsmRgQXJwSE1AVgrF9mM76elklVQVpdTVVlTrguZFrzMYI54dKhxF8Y1L8vItyoxKqKrOFflz46uUOuVPolSssPMdp696WUtcIvnMXKp40pVaZpg1GBBC/j6+vaLz42KnYn7Uv2klOxfL31Tv42mf5hISqKoiDwupi0rdVxYRF7oqF4k2b8OHmOv/1LY/vTvvDtz33k7HzTYwLDSgrDo/Lr0Cl7/5RIvvag6xIq8BC80t3JHU0NCUl7urIy6qow/BDX2R/8eCH/sKLD/7dvqB0/Tw9bdbyF/8BbA7/B8ACfv5RXi4s/FISFuuq3TPy/xld+aEw/7/MKFgNXAXhBB65quZ3mSNchXEMzjWjNmffEVy77YdFatbn0cri6o3s6doSBL/VEMh8d5R8AGqv7OXj7Ca4f4GMTaYvg+n0kAfMWAUnGXGbq5WubLETFC6/WIYgF1AL8uFFVasHdK2u0/W6QTfiIbHA5gvygmuF4A/RnOkT3Way54spBkO81cmv3dOk0ApZXJgOiMn5By5dK/gTcmD6RLyZLGPEyQCumQpztelDxEyeZUacZg8r6CL+WCHfqB23tFDzijCT7c2n2ArJAFtxcrcVQzi4EqKJ6RNUM9nAiJOvVkoJxLqiODYDRAJrtvBsknxFNpJyCU2M1VykPk3yDYNVohi3tQoHgVZp6OZCZDnjOkFDskq4nijcegh9PuvE5JKvQ50g+jd1bdeqZ1sdixjTOjCv6diLvkJ1nJdYR4410sawNoJ+zUjOShINpFgzFZyEmXM6HtqB8mpjAeduDMj/r/PZkuf+D7hl/haureDS0u+otzR8X3bZVuu5csq/2umBcedopEW8gHvF349HyjOhk4pHKvnj+bNyaIF8NLGTbM6MmQDumb/1qAmimZ+PBplWJmXh6LqSU9bIxFQDfVc/Ooi7qETTFD9xKpmamfyj8OaZZEJ1OAXGegvRs0KesdMf8OOk8lvar+fGgFrQByzkYE7awz8Q118VeWAeDX/e4QBmRp+xoE2+m7GMlofvvD/oaG9B4fka2H8Se6HrFqJLTH+wgH5KKNfdqN0JIDb2+w0mUSZMl/ar/dZgRnxZN8SfnmUeAnHhOHQfyB3h9xrb8lTF+40BiaA+G/tMsBstPAFki2qMQUS/5tcNCQScSy8XOQVfxRiEALnJ2ldCUowtWCR/bx1fBoCnf+puD8A7of3bP+v8X7X5l3kBy6EAAiwuW1oFsPzgUpZe2gHEfVPfVyJbQ+Pfi3eaa0BJkhD7gF+HchvzHPsXu7Bjn49F5zN8RXCq42hEmtMpgjdPSik1+KfGC9Rhhjki5BGFOh7P2jY+iolml5qNctvK6etiatjdxQ1O45ZT/UftEOE3bqvtRDIu1wZeAkdbRF7T2U5EBo1LadSY/qpN8LQwvoPx7dm69oGa7qbVQwQGv8Rx1KnFcVKDBsR6FEuP0M8z0krZRXo2dGVIpgrQZACxNubaIRKbn2lHsmgpZjlM0jyXZTtIjE+SYmfuBjMu9EnBAg0J7SSxU5jouEQW2Q64r7UQXTsi1rKzExqu1A+X6jlOatkw28nEF02OfXiKPKIS2pJjVzEZbbh3ISyxJ723GZchu0mFSaVLr173282DSdX1rOok5z8RfYdVfiCXH0hnhKAmyqsd8skpPf7wplGBVT7cT4/7Y57eJEJrEuNezyksAufPrcCIunfeVFXdJ2HqpdFkoZ1KqYlMukBm/Ja/KOWwUGBVA2qzUUANCRoyyqbbUiKXJc7FH9nO5zSHfEcye4+oFvHDWEbe54KHMapyEvmBaIey6DQ17eZMJ5Ccps8yPphAoIU0opigjziaqITS2h0IHAZOJg0ztFwK+wTcwrzSCwDrvIzxyBPmHfMMp0JDJH6JwCfgTFgBHAL+5BPz43dD42VNaMz8iDuhIZIjIvBGKEtHgB+QcNKFyZXG6iChNoVd1bfMfWhI0wE4A1wvQzAyX4bCzEmN3qWmgWUYfPyXYZ1S1F1muqjkufMQgMCRPQfeuAniJ9At5KbEXeAZLuxWVeHGxnWjrMG7WLQ1mFfOaLe47BD4atnWdUN2Z13y3lDgbc+HC6sgr7+IwIsjc7PHX98u5CYJ6wVv6hZ2bQUWvb15EHej0/q5rrPikXjbcGDnOhsJmr8hO7LRvBu4V/sNalTIU6RBh6Jrts38i4GTzfts3QMAAAA=", + "ok": true, + "headers": [ + [ + "content-type", + "font/woff2" + ] + ], + "status": 200, + "status_text": "" + }, + "https://localhost:6006/index.js?_file_hash=8f39b027": { + "data": "dmFyIENMT1NVUkVfTk9fREVQUyA9IHRydWU7CndpbmRvdy5wb2x5bWVyU2tpcExvYWRpbmdGb250Um9ib3RvID0gdHJ1ZTsKLyoqIHZpbTogZXQ6dHM9NDpzdz00OnN0cz00CiAqIEBsaWNlbnNlIFJlcXVpcmVKUyAyLjMuNiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycy4KICogUmVsZWFzZWQgdW5kZXIgTUlUIGxpY2Vuc2UsIGh0dHBzOi8vZ2l0aHViLmNvbS9yZXF1aXJlanMvcmVxdWlyZWpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0UKICovCi8vTm90IHVzaW5nIHN0cmljdDogdW5ldmVuIHN0cmljdCBzdXBwb3J0IGluIGJyb3dzZXJzLCAjMzkyLCBhbmQgY2F1c2VzCi8vcHJvYmxlbXMgd2l0aCByZXF1aXJlanMuZXhlYygpL3RyYW5zcGlsZXIgcGx1Z2lucyB0aGF0IG1heSBub3QgYmUgc3RyaWN0LgovKmpzbGludCByZWdleHA6IHRydWUsIG5vbWVuOiB0cnVlLCBzbG9wcHk6IHRydWUgKi8KLypnbG9iYWwgd2luZG93LCBuYXZpZ2F0b3IsIGRvY3VtZW50LCBpbXBvcnRTY3JpcHRzLCBzZXRUaW1lb3V0LCBvcGVyYSAqLwoKdmFyIHJlcXVpcmVqcywgcmVxdWlyZSwgZGVmaW5lOwooZnVuY3Rpb24gKGdsb2JhbCwgc2V0VGltZW91dCkgewogICAgdmFyIHJlcSwgcywgaGVhZCwgYmFzZUVsZW1lbnQsIGRhdGFNYWluLCBzcmMsCiAgICAgICAgaW50ZXJhY3RpdmVTY3JpcHQsIGN1cnJlbnRseUFkZGluZ1NjcmlwdCwgbWFpblNjcmlwdCwgc3ViUGF0aCwKICAgICAgICB2ZXJzaW9uID0gJzIuMy42JywKICAgICAgICBjb21tZW50UmVnRXhwID0gL1wvXCpbXHNcU10qP1wqXC98KFteOiInPV18XilcL1wvLiokL21nLAogICAgICAgIGNqc1JlcXVpcmVSZWdFeHAgPSAvW14uXVxzKnJlcXVpcmVccypcKFxzKlsiJ10oW14nIlxzXSspWyInXVxzKlwpL2csCiAgICAgICAganNTdWZmaXhSZWdFeHAgPSAvXC5qcyQvLAogICAgICAgIGN1cnJEaXJSZWdFeHAgPSAvXlwuXC8vLAogICAgICAgIG9wID0gT2JqZWN0LnByb3RvdHlwZSwKICAgICAgICBvc3RyaW5nID0gb3AudG9TdHJpbmcsCiAgICAgICAgaGFzT3duID0gb3AuaGFzT3duUHJvcGVydHksCiAgICAgICAgaXNCcm93c2VyID0gISEodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmRvY3VtZW50KSwKICAgICAgICBpc1dlYldvcmtlciA9ICFpc0Jyb3dzZXIgJiYgdHlwZW9mIGltcG9ydFNjcmlwdHMgIT09ICd1bmRlZmluZWQnLAogICAgICAgIC8vUFMzIGluZGljYXRlcyBsb2FkZWQgYW5kIGNvbXBsZXRlLCBidXQgbmVlZCB0byB3YWl0IGZvciBjb21wbGV0ZQogICAgICAgIC8vc3BlY2lmaWNhbGx5LiBTZXF1ZW5jZSBpcyAnbG9hZGluZycsICdsb2FkZWQnLCBleGVjdXRpb24sCiAgICAgICAgLy8gdGhlbiAnY29tcGxldGUnLiBUaGUgVUEgY2hlY2sgaXMgdW5mb3J0dW5hdGUsIGJ1dCBub3Qgc3VyZSBob3cKICAgICAgICAvL3RvIGZlYXR1cmUgdGVzdCB3L28gY2F1c2luZyBwZXJmIGlzc3Vlcy4KICAgICAgICByZWFkeVJlZ0V4cCA9IGlzQnJvd3NlciAmJiBuYXZpZ2F0b3IucGxhdGZvcm0gPT09ICdQTEFZU1RBVElPTiAzJyA/CiAgICAgICAgICAgICAgICAgICAgICAvXmNvbXBsZXRlJC8gOiAvXihjb21wbGV0ZXxsb2FkZWQpJC8sCiAgICAgICAgZGVmQ29udGV4dE5hbWUgPSAnXycsCiAgICAgICAgLy9PaCB0aGUgdHJhZ2VkeSwgZGV0ZWN0aW5nIG9wZXJhLiBTZWUgdGhlIHVzYWdlIG9mIGlzT3BlcmEgZm9yIHJlYXNvbi4KICAgICAgICBpc09wZXJhID0gdHlwZW9mIG9wZXJhICE9PSAndW5kZWZpbmVkJyAmJiBvcGVyYS50b1N0cmluZygpID09PSAnW29iamVjdCBPcGVyYV0nLAogICAgICAgIGNvbnRleHRzID0ge30sCiAgICAgICAgY2ZnID0ge30sCiAgICAgICAgZ2xvYmFsRGVmUXVldWUgPSBbXSwKICAgICAgICB1c2VJbnRlcmFjdGl2ZSA9IGZhbHNlOwoKICAgIC8vQ291bGQgbWF0Y2ggc29tZXRoaW5nIGxpa2UgJykvL2NvbW1lbnQnLCBkbyBub3QgbG9zZSB0aGUgcHJlZml4IHRvIGNvbW1lbnQuCiAgICBmdW5jdGlvbiBjb21tZW50UmVwbGFjZShtYXRjaCwgc2luZ2xlUHJlZml4KSB7CiAgICAgICAgcmV0dXJuIHNpbmdsZVByZWZpeCB8fCAnJzsKICAgIH0KCiAgICBmdW5jdGlvbiBpc0Z1bmN0aW9uKGl0KSB7CiAgICAgICAgcmV0dXJuIG9zdHJpbmcuY2FsbChpdCkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7CiAgICB9CgogICAgZnVuY3Rpb24gaXNBcnJheShpdCkgewogICAgICAgIHJldHVybiBvc3RyaW5nLmNhbGwoaXQpID09PSAnW29iamVjdCBBcnJheV0nOwogICAgfQoKICAgIC8qKgogICAgICogSGVscGVyIGZ1bmN0aW9uIGZvciBpdGVyYXRpbmcgb3ZlciBhbiBhcnJheS4gSWYgdGhlIGZ1bmMgcmV0dXJucwogICAgICogYSB0cnVlIHZhbHVlLCBpdCB3aWxsIGJyZWFrIG91dCBvZiB0aGUgbG9vcC4KICAgICAqLwogICAgZnVuY3Rpb24gZWFjaChhcnksIGZ1bmMpIHsKICAgICAgICBpZiAoYXJ5KSB7CiAgICAgICAgICAgIHZhciBpOwogICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXJ5Lmxlbmd0aDsgaSArPSAxKSB7CiAgICAgICAgICAgICAgICBpZiAoYXJ5W2ldICYmIGZ1bmMoYXJ5W2ldLCBpLCBhcnkpKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBIZWxwZXIgZnVuY3Rpb24gZm9yIGl0ZXJhdGluZyBvdmVyIGFuIGFycmF5IGJhY2t3YXJkcy4gSWYgdGhlIGZ1bmMKICAgICAqIHJldHVybnMgYSB0cnVlIHZhbHVlLCBpdCB3aWxsIGJyZWFrIG91dCBvZiB0aGUgbG9vcC4KICAgICAqLwogICAgZnVuY3Rpb24gZWFjaFJldmVyc2UoYXJ5LCBmdW5jKSB7CiAgICAgICAgaWYgKGFyeSkgewogICAgICAgICAgICB2YXIgaTsKICAgICAgICAgICAgZm9yIChpID0gYXJ5Lmxlbmd0aCAtIDE7IGkgPiAtMTsgaSAtPSAxKSB7CiAgICAgICAgICAgICAgICBpZiAoYXJ5W2ldICYmIGZ1bmMoYXJ5W2ldLCBpLCBhcnkpKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gaGFzUHJvcChvYmosIHByb3ApIHsKICAgICAgICByZXR1cm4gaGFzT3duLmNhbGwob2JqLCBwcm9wKTsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRPd24ob2JqLCBwcm9wKSB7CiAgICAgICAgcmV0dXJuIGhhc1Byb3Aob2JqLCBwcm9wKSAmJiBvYmpbcHJvcF07CiAgICB9CgogICAgLyoqCiAgICAgKiBDeWNsZXMgb3ZlciBwcm9wZXJ0aWVzIGluIGFuIG9iamVjdCBhbmQgY2FsbHMgYSBmdW5jdGlvbiBmb3IgZWFjaAogICAgICogcHJvcGVydHkgdmFsdWUuIElmIHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgdHJ1dGh5IHZhbHVlLCB0aGVuIHRoZQogICAgICogaXRlcmF0aW9uIGlzIHN0b3BwZWQuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGVhY2hQcm9wKG9iaiwgZnVuYykgewogICAgICAgIHZhciBwcm9wOwogICAgICAgIGZvciAocHJvcCBpbiBvYmopIHsKICAgICAgICAgICAgaWYgKGhhc1Byb3Aob2JqLCBwcm9wKSkgewogICAgICAgICAgICAgICAgaWYgKGZ1bmMob2JqW3Byb3BdLCBwcm9wKSkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogU2ltcGxlIGZ1bmN0aW9uIHRvIG1peCBpbiBwcm9wZXJ0aWVzIGZyb20gc291cmNlIGludG8gdGFyZ2V0LAogICAgICogYnV0IG9ubHkgaWYgdGFyZ2V0IGRvZXMgbm90IGFscmVhZHkgaGF2ZSBhIHByb3BlcnR5IG9mIHRoZSBzYW1lIG5hbWUuCiAgICAgKi8KICAgIGZ1bmN0aW9uIG1peGluKHRhcmdldCwgc291cmNlLCBmb3JjZSwgZGVlcFN0cmluZ01peGluKSB7CiAgICAgICAgaWYgKHNvdXJjZSkgewogICAgICAgICAgICBlYWNoUHJvcChzb3VyY2UsIGZ1bmN0aW9uICh2YWx1ZSwgcHJvcCkgewogICAgICAgICAgICAgICAgaWYgKGZvcmNlIHx8ICFoYXNQcm9wKHRhcmdldCwgcHJvcCkpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoZGVlcFN0cmluZ01peGluICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYKICAgICAgICAgICAgICAgICAgICAgICAgIWlzQXJyYXkodmFsdWUpICYmICFpc0Z1bmN0aW9uKHZhbHVlKSAmJgogICAgICAgICAgICAgICAgICAgICAgICAhKHZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSkgewoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0YXJnZXRbcHJvcF0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFtwcm9wXSA9IHt9OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIG1peGluKHRhcmdldFtwcm9wXSwgdmFsdWUsIGZvcmNlLCBkZWVwU3RyaW5nTWl4aW4pOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFtwcm9wXSA9IHZhbHVlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0YXJnZXQ7CiAgICB9CgogICAgLy9TaW1pbGFyIHRvIEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLCBidXQgdGhlICd0aGlzJyBvYmplY3QgaXMgc3BlY2lmaWVkCiAgICAvL2ZpcnN0LCBzaW5jZSBpdCBpcyBlYXNpZXIgdG8gcmVhZC9maWd1cmUgb3V0IHdoYXQgJ3RoaXMnIHdpbGwgYmUuCiAgICBmdW5jdGlvbiBiaW5kKG9iaiwgZm4pIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgewogICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkob2JqLCBhcmd1bWVudHMpOwogICAgICAgIH07CiAgICB9CgogICAgZnVuY3Rpb24gc2NyaXB0cygpIHsKICAgICAgICByZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NjcmlwdCcpOwogICAgfQoKICAgIGZ1bmN0aW9uIGRlZmF1bHRPbkVycm9yKGVycikgewogICAgICAgIHRocm93IGVycjsKICAgIH0KCiAgICAvL0FsbG93IGdldHRpbmcgYSBnbG9iYWwgdGhhdCBpcyBleHByZXNzZWQgaW4KICAgIC8vZG90IG5vdGF0aW9uLCBsaWtlICdhLmIuYycuCiAgICBmdW5jdGlvbiBnZXRHbG9iYWwodmFsdWUpIHsKICAgICAgICBpZiAoIXZhbHVlKSB7CiAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICAgICB9CiAgICAgICAgdmFyIGcgPSBnbG9iYWw7CiAgICAgICAgZWFjaCh2YWx1ZS5zcGxpdCgnLicpLCBmdW5jdGlvbiAocGFydCkgewogICAgICAgICAgICBnID0gZ1twYXJ0XTsKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gZzsKICAgIH0KCiAgICAvKioKICAgICAqIENvbnN0cnVjdHMgYW4gZXJyb3Igd2l0aCBhIHBvaW50ZXIgdG8gYW4gVVJMIHdpdGggbW9yZSBpbmZvcm1hdGlvbi4KICAgICAqIEBwYXJhbSB7U3RyaW5nfSBpZCB0aGUgZXJyb3IgSUQgdGhhdCBtYXBzIHRvIGFuIElEIG9uIGEgd2ViIHBhZ2UuCiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSBodW1hbiByZWFkYWJsZSBlcnJvci4KICAgICAqIEBwYXJhbSB7RXJyb3J9IFtlcnJdIHRoZSBvcmlnaW5hbCBlcnJvciwgaWYgdGhlcmUgaXMgb25lLgogICAgICoKICAgICAqIEByZXR1cm5zIHtFcnJvcn0KICAgICAqLwogICAgZnVuY3Rpb24gbWFrZUVycm9yKGlkLCBtc2csIGVyciwgcmVxdWlyZU1vZHVsZXMpIHsKICAgICAgICB2YXIgZSA9IG5ldyBFcnJvcihtc2cgKyAnXG5odHRwczovL3JlcXVpcmVqcy5vcmcvZG9jcy9lcnJvcnMuaHRtbCMnICsgaWQpOwogICAgICAgIGUucmVxdWlyZVR5cGUgPSBpZDsKICAgICAgICBlLnJlcXVpcmVNb2R1bGVzID0gcmVxdWlyZU1vZHVsZXM7CiAgICAgICAgaWYgKGVycikgewogICAgICAgICAgICBlLm9yaWdpbmFsRXJyb3IgPSBlcnI7CiAgICAgICAgfQogICAgICAgIHJldHVybiBlOwogICAgfQoKICAgIGlmICh0eXBlb2YgZGVmaW5lICE9PSAndW5kZWZpbmVkJykgewogICAgICAgIC8vSWYgYSBkZWZpbmUgaXMgYWxyZWFkeSBpbiBwbGF5IHZpYSBhbm90aGVyIEFNRCBsb2FkZXIsCiAgICAgICAgLy9kbyBub3Qgb3ZlcndyaXRlLgogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAodHlwZW9mIHJlcXVpcmVqcyAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICBpZiAoaXNGdW5jdGlvbihyZXF1aXJlanMpKSB7CiAgICAgICAgICAgIC8vRG8gbm90IG92ZXJ3cml0ZSBhbiBleGlzdGluZyByZXF1aXJlanMgaW5zdGFuY2UuCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgY2ZnID0gcmVxdWlyZWpzOwogICAgICAgIHJlcXVpcmVqcyA9IHVuZGVmaW5lZDsKICAgIH0KCiAgICAvL0FsbG93IGZvciBhIHJlcXVpcmUgY29uZmlnIG9iamVjdAogICAgaWYgKHR5cGVvZiByZXF1aXJlICE9PSAndW5kZWZpbmVkJyAmJiAhaXNGdW5jdGlvbihyZXF1aXJlKSkgewogICAgICAgIC8vYXNzdW1lIGl0IGlzIGEgY29uZmlnIG9iamVjdC4KICAgICAgICBjZmcgPSByZXF1aXJlOwogICAgICAgIHJlcXVpcmUgPSB1bmRlZmluZWQ7CiAgICB9CgogICAgZnVuY3Rpb24gbmV3Q29udGV4dChjb250ZXh0TmFtZSkgewogICAgICAgIHZhciBpbkNoZWNrTG9hZGVkLCBNb2R1bGUsIGNvbnRleHQsIGhhbmRsZXJzLAogICAgICAgICAgICBjaGVja0xvYWRlZFRpbWVvdXRJZCwKICAgICAgICAgICAgY29uZmlnID0gewogICAgICAgICAgICAgICAgLy9EZWZhdWx0cy4gRG8gbm90IHNldCBhIGRlZmF1bHQgZm9yIG1hcAogICAgICAgICAgICAgICAgLy9jb25maWcgdG8gc3BlZWQgdXAgbm9ybWFsaXplKCksIHdoaWNoCiAgICAgICAgICAgICAgICAvL3dpbGwgcnVuIGZhc3RlciBpZiB0aGVyZSBpcyBubyBkZWZhdWx0LgogICAgICAgICAgICAgICAgd2FpdFNlY29uZHM6IDcsCiAgICAgICAgICAgICAgICBiYXNlVXJsOiAnLi8nLAogICAgICAgICAgICAgICAgcGF0aHM6IHt9LAogICAgICAgICAgICAgICAgYnVuZGxlczoge30sCiAgICAgICAgICAgICAgICBwa2dzOiB7fSwKICAgICAgICAgICAgICAgIHNoaW06IHt9LAogICAgICAgICAgICAgICAgY29uZmlnOiB7fQogICAgICAgICAgICB9LAogICAgICAgICAgICByZWdpc3RyeSA9IHt9LAogICAgICAgICAgICAvL3JlZ2lzdHJ5IG9mIGp1c3QgZW5hYmxlZCBtb2R1bGVzLCB0byBzcGVlZAogICAgICAgICAgICAvL2N5Y2xlIGJyZWFraW5nIGNvZGUgd2hlbiBsb3RzIG9mIG1vZHVsZXMKICAgICAgICAgICAgLy9hcmUgcmVnaXN0ZXJlZCwgYnV0IG5vdCBhY3RpdmF0ZWQuCiAgICAgICAgICAgIGVuYWJsZWRSZWdpc3RyeSA9IHt9LAogICAgICAgICAgICB1bmRlZkV2ZW50cyA9IHt9LAogICAgICAgICAgICBkZWZRdWV1ZSA9IFtdLAogICAgICAgICAgICBkZWZpbmVkID0ge30sCiAgICAgICAgICAgIHVybEZldGNoZWQgPSB7fSwKICAgICAgICAgICAgYnVuZGxlc01hcCA9IHt9LAogICAgICAgICAgICByZXF1aXJlQ291bnRlciA9IDEsCiAgICAgICAgICAgIHVubm9ybWFsaXplZENvdW50ZXIgPSAxOwoKICAgICAgICAvKioKICAgICAgICAgKiBUcmltcyB0aGUgLiBhbmQgLi4gZnJvbSBhbiBhcnJheSBvZiBwYXRoIHNlZ21lbnRzLgogICAgICAgICAqIEl0IHdpbGwga2VlcCBhIGxlYWRpbmcgcGF0aCBzZWdtZW50IGlmIGEgLi4gd2lsbCBiZWNvbWUKICAgICAgICAgKiB0aGUgZmlyc3QgcGF0aCBzZWdtZW50LCB0byBoZWxwIHdpdGggbW9kdWxlIG5hbWUgbG9va3VwcywKICAgICAgICAgKiB3aGljaCBhY3QgbGlrZSBwYXRocywgYnV0IGNhbiBiZSByZW1hcHBlZC4gQnV0IHRoZSBlbmQgcmVzdWx0LAogICAgICAgICAqIGFsbCBwYXRocyB0aGF0IHVzZSB0aGlzIGZ1bmN0aW9uIHNob3VsZCBsb29rIG5vcm1hbGl6ZWQuCiAgICAgICAgICogTk9URTogdGhpcyBtZXRob2QgTU9ESUZJRVMgdGhlIGlucHV0IGFycmF5LgogICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IGFyeSB0aGUgYXJyYXkgb2YgcGF0aCBzZWdtZW50cy4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiB0cmltRG90cyhhcnkpIHsKICAgICAgICAgICAgdmFyIGksIHBhcnQ7CiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBhcnkubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIHBhcnQgPSBhcnlbaV07CiAgICAgICAgICAgICAgICBpZiAocGFydCA9PT0gJy4nKSB7CiAgICAgICAgICAgICAgICAgICAgYXJ5LnNwbGljZShpLCAxKTsKICAgICAgICAgICAgICAgICAgICBpIC09IDE7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcnQgPT09ICcuLicpIHsKICAgICAgICAgICAgICAgICAgICAvLyBJZiBhdCB0aGUgc3RhcnQsIG9yIHByZXZpb3VzIHZhbHVlIGlzIHN0aWxsIC4uLAogICAgICAgICAgICAgICAgICAgIC8vIGtlZXAgdGhlbSBzbyB0aGF0IHdoZW4gY29udmVydGVkIHRvIGEgcGF0aCBpdCBtYXkKICAgICAgICAgICAgICAgICAgICAvLyBzdGlsbCB3b3JrIHdoZW4gY29udmVydGVkIHRvIGEgcGF0aCwgZXZlbiB0aG91Z2gKICAgICAgICAgICAgICAgICAgICAvLyBhcyBhbiBJRCBpdCBpcyBsZXNzIHRoYW4gaWRlYWwuIEluIGxhcmdlciBwb2ludAogICAgICAgICAgICAgICAgICAgIC8vIHJlbGVhc2VzLCBtYXkgYmUgYmV0dGVyIHRvIGp1c3Qga2ljayBvdXQgYW4gZXJyb3IuCiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT09IDAgfHwgKGkgPT09IDEgJiYgYXJ5WzJdID09PSAnLi4nKSB8fCBhcnlbaSAtIDFdID09PSAnLi4nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaSA+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgYXJ5LnNwbGljZShpIC0gMSwgMik7CiAgICAgICAgICAgICAgICAgICAgICAgIGkgLT0gMjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEdpdmVuIGEgcmVsYXRpdmUgbW9kdWxlIG5hbWUsIGxpa2UgLi9zb21ldGhpbmcsIG5vcm1hbGl6ZSBpdCB0bwogICAgICAgICAqIGEgcmVhbCBuYW1lIHRoYXQgY2FuIGJlIG1hcHBlZCB0byBhIHBhdGguCiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgdGhlIHJlbGF0aXZlIG5hbWUKICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gYmFzZU5hbWUgYSByZWFsIG5hbWUgdGhhdCB0aGUgbmFtZSBhcmcgaXMgcmVsYXRpdmUKICAgICAgICAgKiB0by4KICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IGFwcGx5TWFwIGFwcGx5IHRoZSBtYXAgY29uZmlnIHRvIHRoZSB2YWx1ZS4gU2hvdWxkCiAgICAgICAgICogb25seSBiZSBkb25lIGlmIHRoaXMgbm9ybWFsaXphdGlvbiBpcyBmb3IgYSBkZXBlbmRlbmN5IElELgogICAgICAgICAqIEByZXR1cm5zIHtTdHJpbmd9IG5vcm1hbGl6ZWQgbmFtZQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZShuYW1lLCBiYXNlTmFtZSwgYXBwbHlNYXApIHsKICAgICAgICAgICAgdmFyIHBrZ01haW4sIG1hcFZhbHVlLCBuYW1lUGFydHMsIGksIGosIG5hbWVTZWdtZW50LCBsYXN0SW5kZXgsCiAgICAgICAgICAgICAgICBmb3VuZE1hcCwgZm91bmRJLCBmb3VuZFN0YXJNYXAsIHN0YXJJLCBub3JtYWxpemVkQmFzZVBhcnRzLAogICAgICAgICAgICAgICAgYmFzZVBhcnRzID0gKGJhc2VOYW1lICYmIGJhc2VOYW1lLnNwbGl0KCcvJykpLAogICAgICAgICAgICAgICAgbWFwID0gY29uZmlnLm1hcCwKICAgICAgICAgICAgICAgIHN0YXJNYXAgPSBtYXAgJiYgbWFwWycqJ107CgogICAgICAgICAgICAvL0FkanVzdCBhbnkgcmVsYXRpdmUgcGF0aHMuCiAgICAgICAgICAgIGlmIChuYW1lKSB7CiAgICAgICAgICAgICAgICBuYW1lID0gbmFtZS5zcGxpdCgnLycpOwogICAgICAgICAgICAgICAgbGFzdEluZGV4ID0gbmFtZS5sZW5ndGggLSAxOwoKICAgICAgICAgICAgICAgIC8vIElmIHdhbnRpbmcgbm9kZSBJRCBjb21wYXRpYmlsaXR5LCBzdHJpcCAuanMgZnJvbSBlbmQKICAgICAgICAgICAgICAgIC8vIG9mIElEcy4gSGF2ZSB0byBkbyB0aGlzIGhlcmUsIGFuZCBub3QgaW4gbmFtZVRvVXJsCiAgICAgICAgICAgICAgICAvLyBiZWNhdXNlIG5vZGUgYWxsb3dzIGVpdGhlciAuanMgb3Igbm9uIC5qcyB0byBtYXAKICAgICAgICAgICAgICAgIC8vIHRvIHNhbWUgZmlsZS4KICAgICAgICAgICAgICAgIGlmIChjb25maWcubm9kZUlkQ29tcGF0ICYmIGpzU3VmZml4UmVnRXhwLnRlc3QobmFtZVtsYXN0SW5kZXhdKSkgewogICAgICAgICAgICAgICAgICAgIG5hbWVbbGFzdEluZGV4XSA9IG5hbWVbbGFzdEluZGV4XS5yZXBsYWNlKGpzU3VmZml4UmVnRXhwLCAnJyk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gU3RhcnRzIHdpdGggYSAnLicgc28gbmVlZCB0aGUgYmFzZU5hbWUKICAgICAgICAgICAgICAgIGlmIChuYW1lWzBdLmNoYXJBdCgwKSA9PT0gJy4nICYmIGJhc2VQYXJ0cykgewogICAgICAgICAgICAgICAgICAgIC8vQ29udmVydCBiYXNlTmFtZSB0byBhcnJheSwgYW5kIGxvcCBvZmYgdGhlIGxhc3QgcGFydCwKICAgICAgICAgICAgICAgICAgICAvL3NvIHRoYXQgLiBtYXRjaGVzIHRoYXQgJ2RpcmVjdG9yeScgYW5kIG5vdCBuYW1lIG9mIHRoZSBiYXNlTmFtZSdzCiAgICAgICAgICAgICAgICAgICAgLy9tb2R1bGUuIEZvciBpbnN0YW5jZSwgYmFzZU5hbWUgb2YgJ29uZS90d28vdGhyZWUnLCBtYXBzIHRvCiAgICAgICAgICAgICAgICAgICAgLy8nb25lL3R3by90aHJlZS5qcycsIGJ1dCB3ZSB3YW50IHRoZSBkaXJlY3RvcnksICdvbmUvdHdvJyBmb3IKICAgICAgICAgICAgICAgICAgICAvL3RoaXMgbm9ybWFsaXphdGlvbi4KICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkQmFzZVBhcnRzID0gYmFzZVBhcnRzLnNsaWNlKDAsIGJhc2VQYXJ0cy5sZW5ndGggLSAxKTsKICAgICAgICAgICAgICAgICAgICBuYW1lID0gbm9ybWFsaXplZEJhc2VQYXJ0cy5jb25jYXQobmFtZSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdHJpbURvdHMobmFtZSk7CiAgICAgICAgICAgICAgICBuYW1lID0gbmFtZS5qb2luKCcvJyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vQXBwbHkgbWFwIGNvbmZpZyBpZiBhdmFpbGFibGUuCiAgICAgICAgICAgIGlmIChhcHBseU1hcCAmJiBtYXAgJiYgKGJhc2VQYXJ0cyB8fCBzdGFyTWFwKSkgewogICAgICAgICAgICAgICAgbmFtZVBhcnRzID0gbmFtZS5zcGxpdCgnLycpOwoKICAgICAgICAgICAgICAgIG91dGVyTG9vcDogZm9yIChpID0gbmFtZVBhcnRzLmxlbmd0aDsgaSA+IDA7IGkgLT0gMSkgewogICAgICAgICAgICAgICAgICAgIG5hbWVTZWdtZW50ID0gbmFtZVBhcnRzLnNsaWNlKDAsIGkpLmpvaW4oJy8nKTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKGJhc2VQYXJ0cykgewogICAgICAgICAgICAgICAgICAgICAgICAvL0ZpbmQgdGhlIGxvbmdlc3QgYmFzZU5hbWUgc2VnbWVudCBtYXRjaCBpbiB0aGUgY29uZmlnLgogICAgICAgICAgICAgICAgICAgICAgICAvL1NvLCBkbyBqb2lucyBvbiB0aGUgYmlnZ2VzdCB0byBzbWFsbGVzdCBsZW5ndGhzIG9mIGJhc2VQYXJ0cy4KICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gYmFzZVBhcnRzLmxlbmd0aDsgaiA+IDA7IGogLT0gMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwVmFsdWUgPSBnZXRPd24obWFwLCBiYXNlUGFydHMuc2xpY2UoMCwgaikuam9pbignLycpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2Jhc2VOYW1lIHNlZ21lbnQgaGFzIGNvbmZpZywgZmluZCBpZiBpdCBoYXMgb25lIGZvcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy90aGlzIG5hbWUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFwVmFsdWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBWYWx1ZSA9IGdldE93bihtYXBWYWx1ZSwgbmFtZVNlZ21lbnQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXBWYWx1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL01hdGNoLCB1cGRhdGUgbmFtZSB0byB0aGUgbmV3IHZhbHVlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZE1hcCA9IG1hcFZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZEkgPSBpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvdXRlckxvb3A7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAvL0NoZWNrIGZvciBhIHN0YXIgbWFwIG1hdGNoLCBidXQganVzdCBob2xkIG9uIHRvIGl0LAogICAgICAgICAgICAgICAgICAgIC8vaWYgdGhlcmUgaXMgYSBzaG9ydGVyIHNlZ21lbnQgbWF0Y2ggbGF0ZXIgaW4gYSBtYXRjaGluZwogICAgICAgICAgICAgICAgICAgIC8vY29uZmlnLCB0aGVuIGZhdm9yIG92ZXIgdGhpcyBzdGFyIG1hcC4KICAgICAgICAgICAgICAgICAgICBpZiAoIWZvdW5kU3Rhck1hcCAmJiBzdGFyTWFwICYmIGdldE93bihzdGFyTWFwLCBuYW1lU2VnbWVudCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRTdGFyTWFwID0gZ2V0T3duKHN0YXJNYXAsIG5hbWVTZWdtZW50KTsKICAgICAgICAgICAgICAgICAgICAgICAgc3RhckkgPSBpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIWZvdW5kTWFwICYmIGZvdW5kU3Rhck1hcCkgewogICAgICAgICAgICAgICAgICAgIGZvdW5kTWFwID0gZm91bmRTdGFyTWFwOwogICAgICAgICAgICAgICAgICAgIGZvdW5kSSA9IHN0YXJJOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChmb3VuZE1hcCkgewogICAgICAgICAgICAgICAgICAgIG5hbWVQYXJ0cy5zcGxpY2UoMCwgZm91bmRJLCBmb3VuZE1hcCk7CiAgICAgICAgICAgICAgICAgICAgbmFtZSA9IG5hbWVQYXJ0cy5qb2luKCcvJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIElmIHRoZSBuYW1lIHBvaW50cyB0byBhIHBhY2thZ2UncyBuYW1lLCB1c2UKICAgICAgICAgICAgLy8gdGhlIHBhY2thZ2UgbWFpbiBpbnN0ZWFkLgogICAgICAgICAgICBwa2dNYWluID0gZ2V0T3duKGNvbmZpZy5wa2dzLCBuYW1lKTsKCiAgICAgICAgICAgIHJldHVybiBwa2dNYWluID8gcGtnTWFpbiA6IG5hbWU7CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiByZW1vdmVTY3JpcHQobmFtZSkgewogICAgICAgICAgICBpZiAoaXNCcm93c2VyKSB7CiAgICAgICAgICAgICAgICBlYWNoKHNjcmlwdHMoKSwgZnVuY3Rpb24gKHNjcmlwdE5vZGUpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoc2NyaXB0Tm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtcmVxdWlyZW1vZHVsZScpID09PSBuYW1lICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHROb2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1yZXF1aXJlY29udGV4dCcpID09PSBjb250ZXh0LmNvbnRleHROYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdE5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzY3JpcHROb2RlKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIGhhc1BhdGhGYWxsYmFjayhpZCkgewogICAgICAgICAgICB2YXIgcGF0aENvbmZpZyA9IGdldE93bihjb25maWcucGF0aHMsIGlkKTsKICAgICAgICAgICAgaWYgKHBhdGhDb25maWcgJiYgaXNBcnJheShwYXRoQ29uZmlnKSAmJiBwYXRoQ29uZmlnLmxlbmd0aCA+IDEpIHsKICAgICAgICAgICAgICAgIC8vUG9wIG9mZiB0aGUgZmlyc3QgYXJyYXkgdmFsdWUsIHNpbmNlIGl0IGZhaWxlZCwgYW5kCiAgICAgICAgICAgICAgICAvL3JldHJ5CiAgICAgICAgICAgICAgICBwYXRoQ29uZmlnLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICBjb250ZXh0LnJlcXVpcmUudW5kZWYoaWQpOwoKICAgICAgICAgICAgICAgIC8vQ3VzdG9tIHJlcXVpcmUgdGhhdCBkb2VzIG5vdCBkbyBtYXAgdHJhbnNsYXRpb24sIHNpbmNlCiAgICAgICAgICAgICAgICAvL0lEIGlzICJhYnNvbHV0ZSIsIGFscmVhZHkgbWFwcGVkL3Jlc29sdmVkLgogICAgICAgICAgICAgICAgY29udGV4dC5tYWtlUmVxdWlyZShudWxsLCB7CiAgICAgICAgICAgICAgICAgICAgc2tpcE1hcDogdHJ1ZQogICAgICAgICAgICAgICAgfSkoW2lkXSk7CgogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vVHVybnMgYSBwbHVnaW4hcmVzb3VyY2UgdG8gW3BsdWdpbiwgcmVzb3VyY2VdCiAgICAgICAgLy93aXRoIHRoZSBwbHVnaW4gYmVpbmcgdW5kZWZpbmVkIGlmIHRoZSBuYW1lCiAgICAgICAgLy9kaWQgbm90IGhhdmUgYSBwbHVnaW4gcHJlZml4LgogICAgICAgIGZ1bmN0aW9uIHNwbGl0UHJlZml4KG5hbWUpIHsKICAgICAgICAgICAgdmFyIHByZWZpeCwKICAgICAgICAgICAgICAgIGluZGV4ID0gbmFtZSA/IG5hbWUuaW5kZXhPZignIScpIDogLTE7CiAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7CiAgICAgICAgICAgICAgICBwcmVmaXggPSBuYW1lLnN1YnN0cmluZygwLCBpbmRleCk7CiAgICAgICAgICAgICAgICBuYW1lID0gbmFtZS5zdWJzdHJpbmcoaW5kZXggKyAxLCBuYW1lLmxlbmd0aCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIFtwcmVmaXgsIG5hbWVdOwogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogQ3JlYXRlcyBhIG1vZHVsZSBtYXBwaW5nIHRoYXQgaW5jbHVkZXMgcGx1Z2luIHByZWZpeCwgbW9kdWxlCiAgICAgICAgICogbmFtZSwgYW5kIHBhdGguIElmIHBhcmVudE1vZHVsZU1hcCBpcyBwcm92aWRlZCBpdCB3aWxsCiAgICAgICAgICogYWxzbyBub3JtYWxpemUgdGhlIG5hbWUgdmlhIHJlcXVpcmUubm9ybWFsaXplKCkKICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIHRoZSBtb2R1bGUgbmFtZQogICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBbcGFyZW50TW9kdWxlTWFwXSBwYXJlbnQgbW9kdWxlIG1hcAogICAgICAgICAqIGZvciB0aGUgbW9kdWxlIG5hbWUsIHVzZWQgdG8gcmVzb2x2ZSByZWxhdGl2ZSBuYW1lcy4KICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IGlzTm9ybWFsaXplZDogaXMgdGhlIElEIGFscmVhZHkgbm9ybWFsaXplZC4KICAgICAgICAgKiBUaGlzIGlzIHRydWUgaWYgdGhpcyBjYWxsIGlzIGRvbmUgZm9yIGEgZGVmaW5lKCkgbW9kdWxlIElELgogICAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gYXBwbHlNYXA6IGFwcGx5IHRoZSBtYXAgY29uZmlnIHRvIHRoZSBJRC4KICAgICAgICAgKiBTaG91bGQgb25seSBiZSB0cnVlIGlmIHRoaXMgbWFwIGlzIGZvciBhIGRlcGVuZGVuY3kuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIG1ha2VNb2R1bGVNYXAobmFtZSwgcGFyZW50TW9kdWxlTWFwLCBpc05vcm1hbGl6ZWQsIGFwcGx5TWFwKSB7CiAgICAgICAgICAgIHZhciB1cmwsIHBsdWdpbk1vZHVsZSwgc3VmZml4LCBuYW1lUGFydHMsCiAgICAgICAgICAgICAgICBwcmVmaXggPSBudWxsLAogICAgICAgICAgICAgICAgcGFyZW50TmFtZSA9IHBhcmVudE1vZHVsZU1hcCA/IHBhcmVudE1vZHVsZU1hcC5uYW1lIDogbnVsbCwKICAgICAgICAgICAgICAgIG9yaWdpbmFsTmFtZSA9IG5hbWUsCiAgICAgICAgICAgICAgICBpc0RlZmluZSA9IHRydWUsCiAgICAgICAgICAgICAgICBub3JtYWxpemVkTmFtZSA9ICcnOwoKICAgICAgICAgICAgLy9JZiBubyBuYW1lLCB0aGVuIGl0IG1lYW5zIGl0IGlzIGEgcmVxdWlyZSBjYWxsLCBnZW5lcmF0ZSBhbgogICAgICAgICAgICAvL2ludGVybmFsIG5hbWUuCiAgICAgICAgICAgIGlmICghbmFtZSkgewogICAgICAgICAgICAgICAgaXNEZWZpbmUgPSBmYWxzZTsKICAgICAgICAgICAgICAgIG5hbWUgPSAnX0ByJyArIChyZXF1aXJlQ291bnRlciArPSAxKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbmFtZVBhcnRzID0gc3BsaXRQcmVmaXgobmFtZSk7CiAgICAgICAgICAgIHByZWZpeCA9IG5hbWVQYXJ0c1swXTsKICAgICAgICAgICAgbmFtZSA9IG5hbWVQYXJ0c1sxXTsKCiAgICAgICAgICAgIGlmIChwcmVmaXgpIHsKICAgICAgICAgICAgICAgIHByZWZpeCA9IG5vcm1hbGl6ZShwcmVmaXgsIHBhcmVudE5hbWUsIGFwcGx5TWFwKTsKICAgICAgICAgICAgICAgIHBsdWdpbk1vZHVsZSA9IGdldE93bihkZWZpbmVkLCBwcmVmaXgpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvL0FjY291bnQgZm9yIHJlbGF0aXZlIHBhdGhzIGlmIHRoZXJlIGlzIGEgYmFzZSBuYW1lLgogICAgICAgICAgICBpZiAobmFtZSkgewogICAgICAgICAgICAgICAgaWYgKHByZWZpeCkgewogICAgICAgICAgICAgICAgICAgIGlmIChpc05vcm1hbGl6ZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZE5hbWUgPSBuYW1lOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGx1Z2luTW9kdWxlICYmIHBsdWdpbk1vZHVsZS5ub3JtYWxpemUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy9QbHVnaW4gaXMgbG9hZGVkLCB1c2UgaXRzIG5vcm1hbGl6ZSBtZXRob2QuCiAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWROYW1lID0gcGx1Z2luTW9kdWxlLm5vcm1hbGl6ZShuYW1lLCBmdW5jdGlvbiAobmFtZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZShuYW1lLCBwYXJlbnROYW1lLCBhcHBseU1hcCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIG5lc3RlZCBwbHVnaW4gcmVmZXJlbmNlcywgdGhlbiBkbyBub3QgdHJ5IHRvCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vcm1hbGl6ZSwgYXMgaXQgd2lsbCBub3Qgbm9ybWFsaXplIGNvcnJlY3RseS4gVGhpcwogICAgICAgICAgICAgICAgICAgICAgICAvLyBwbGFjZXMgYSByZXN0cmljdGlvbiBvbiByZXNvdXJjZUlkcywgYW5kIHRoZSBsb25nZXIKICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGVybSBzb2x1dGlvbiBpcyBub3QgdG8gbm9ybWFsaXplIHVudGlsIHBsdWdpbnMgYXJlCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxvYWRlZCBhbmQgYWxsIG5vcm1hbGl6YXRpb25zIHRvIGFsbG93IGZvciBhc3luYwogICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2FkaW5nIG9mIGEgbG9hZGVyIHBsdWdpbi4gQnV0IGZvciBub3csIGZpeGVzIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAvLyBjb21tb24gdXNlcy4gRGV0YWlscyBpbiAjMTEzMQogICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTmFtZSA9IG5hbWUuaW5kZXhPZignIScpID09PSAtMSA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplKG5hbWUsIHBhcmVudE5hbWUsIGFwcGx5TWFwKSA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIC8vQSByZWd1bGFyIG1vZHVsZS4KICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTmFtZSA9IG5vcm1hbGl6ZShuYW1lLCBwYXJlbnROYW1lLCBhcHBseU1hcCk7CgogICAgICAgICAgICAgICAgICAgIC8vTm9ybWFsaXplZCBuYW1lIG1heSBiZSBhIHBsdWdpbiBJRCBkdWUgdG8gbWFwIGNvbmZpZwogICAgICAgICAgICAgICAgICAgIC8vYXBwbGljYXRpb24gaW4gbm9ybWFsaXplLiBUaGUgbWFwIGNvbmZpZyB2YWx1ZXMgbXVzdAogICAgICAgICAgICAgICAgICAgIC8vYWxyZWFkeSBiZSBub3JtYWxpemVkLCBzbyBkbyBub3QgbmVlZCB0byByZWRvIHRoYXQgcGFydC4KICAgICAgICAgICAgICAgICAgICBuYW1lUGFydHMgPSBzcGxpdFByZWZpeChub3JtYWxpemVkTmFtZSk7CiAgICAgICAgICAgICAgICAgICAgcHJlZml4ID0gbmFtZVBhcnRzWzBdOwogICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWROYW1lID0gbmFtZVBhcnRzWzFdOwogICAgICAgICAgICAgICAgICAgIGlzTm9ybWFsaXplZCA9IHRydWU7CgogICAgICAgICAgICAgICAgICAgIHVybCA9IGNvbnRleHQubmFtZVRvVXJsKG5vcm1hbGl6ZWROYW1lKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy9JZiB0aGUgaWQgaXMgYSBwbHVnaW4gaWQgdGhhdCBjYW5ub3QgYmUgZGV0ZXJtaW5lZCBpZiBpdCBuZWVkcwogICAgICAgICAgICAvL25vcm1hbGl6YXRpb24sIHN0YW1wIGl0IHdpdGggYSB1bmlxdWUgSUQgc28gdHdvIG1hdGNoaW5nIHJlbGF0aXZlCiAgICAgICAgICAgIC8vaWRzIHRoYXQgbWF5IGNvbmZsaWN0IGNhbiBiZSBzZXBhcmF0ZS4KICAgICAgICAgICAgc3VmZml4ID0gcHJlZml4ICYmICFwbHVnaW5Nb2R1bGUgJiYgIWlzTm9ybWFsaXplZCA/CiAgICAgICAgICAgICAgICAgICAgICdfdW5ub3JtYWxpemVkJyArICh1bm5vcm1hbGl6ZWRDb3VudGVyICs9IDEpIDoKICAgICAgICAgICAgICAgICAgICAgJyc7CgogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgcHJlZml4OiBwcmVmaXgsCiAgICAgICAgICAgICAgICBuYW1lOiBub3JtYWxpemVkTmFtZSwKICAgICAgICAgICAgICAgIHBhcmVudE1hcDogcGFyZW50TW9kdWxlTWFwLAogICAgICAgICAgICAgICAgdW5ub3JtYWxpemVkOiAhIXN1ZmZpeCwKICAgICAgICAgICAgICAgIHVybDogdXJsLAogICAgICAgICAgICAgICAgb3JpZ2luYWxOYW1lOiBvcmlnaW5hbE5hbWUsCiAgICAgICAgICAgICAgICBpc0RlZmluZTogaXNEZWZpbmUsCiAgICAgICAgICAgICAgICBpZDogKHByZWZpeCA/CiAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeCArICchJyArIG5vcm1hbGl6ZWROYW1lIDoKICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZE5hbWUpICsgc3VmZml4CiAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBnZXRNb2R1bGUoZGVwTWFwKSB7CiAgICAgICAgICAgIHZhciBpZCA9IGRlcE1hcC5pZCwKICAgICAgICAgICAgICAgIG1vZCA9IGdldE93bihyZWdpc3RyeSwgaWQpOwoKICAgICAgICAgICAgaWYgKCFtb2QpIHsKICAgICAgICAgICAgICAgIG1vZCA9IHJlZ2lzdHJ5W2lkXSA9IG5ldyBjb250ZXh0Lk1vZHVsZShkZXBNYXApOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gbW9kOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gb24oZGVwTWFwLCBuYW1lLCBmbikgewogICAgICAgICAgICB2YXIgaWQgPSBkZXBNYXAuaWQsCiAgICAgICAgICAgICAgICBtb2QgPSBnZXRPd24ocmVnaXN0cnksIGlkKTsKCiAgICAgICAgICAgIGlmIChoYXNQcm9wKGRlZmluZWQsIGlkKSAmJgogICAgICAgICAgICAgICAgICAgICghbW9kIHx8IG1vZC5kZWZpbmVFbWl0Q29tcGxldGUpKSB7CiAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gJ2RlZmluZWQnKSB7CiAgICAgICAgICAgICAgICAgICAgZm4oZGVmaW5lZFtpZF0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgbW9kID0gZ2V0TW9kdWxlKGRlcE1hcCk7CiAgICAgICAgICAgICAgICBpZiAobW9kLmVycm9yICYmIG5hbWUgPT09ICdlcnJvcicpIHsKICAgICAgICAgICAgICAgICAgICBmbihtb2QuZXJyb3IpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBtb2Qub24obmFtZSwgZm4pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBvbkVycm9yKGVyciwgZXJyYmFjaykgewogICAgICAgICAgICB2YXIgaWRzID0gZXJyLnJlcXVpcmVNb2R1bGVzLAogICAgICAgICAgICAgICAgbm90aWZpZWQgPSBmYWxzZTsKCiAgICAgICAgICAgIGlmIChlcnJiYWNrKSB7CiAgICAgICAgICAgICAgICBlcnJiYWNrKGVycik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBlYWNoKGlkcywgZnVuY3Rpb24gKGlkKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIG1vZCA9IGdldE93bihyZWdpc3RyeSwgaWQpOwogICAgICAgICAgICAgICAgICAgIGlmIChtb2QpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy9TZXQgZXJyb3Igb24gbW9kdWxlLCBzbyBpdCBza2lwcyB0aW1lb3V0IGNoZWNrcy4KICAgICAgICAgICAgICAgICAgICAgICAgbW9kLmVycm9yID0gZXJyOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9kLmV2ZW50cy5lcnJvcikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kLmVtaXQoJ2Vycm9yJywgZXJyKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIGlmICghbm90aWZpZWQpIHsKICAgICAgICAgICAgICAgICAgICByZXEub25FcnJvcihlcnIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBJbnRlcm5hbCBtZXRob2QgdG8gdHJhbnNmZXIgZ2xvYmFsUXVldWUgaXRlbXMgdG8gdGhpcyBjb250ZXh0J3MKICAgICAgICAgKiBkZWZRdWV1ZS4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiB0YWtlR2xvYmFsUXVldWUoKSB7CiAgICAgICAgICAgIC8vUHVzaCBhbGwgdGhlIGdsb2JhbERlZlF1ZXVlIGl0ZW1zIGludG8gdGhlIGNvbnRleHQncyBkZWZRdWV1ZQogICAgICAgICAgICBpZiAoZ2xvYmFsRGVmUXVldWUubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICBlYWNoKGdsb2JhbERlZlF1ZXVlLCBmdW5jdGlvbihxdWV1ZUl0ZW0pIHsKICAgICAgICAgICAgICAgICAgICB2YXIgaWQgPSBxdWV1ZUl0ZW1bMF07CiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpZCA9PT0gJ3N0cmluZycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kZWZRdWV1ZU1hcFtpZF0gPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBkZWZRdWV1ZS5wdXNoKHF1ZXVlSXRlbSk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIGdsb2JhbERlZlF1ZXVlID0gW107CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGhhbmRsZXJzID0gewogICAgICAgICAgICAncmVxdWlyZSc6IGZ1bmN0aW9uIChtb2QpIHsKICAgICAgICAgICAgICAgIGlmIChtb2QucmVxdWlyZSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBtb2QucmVxdWlyZTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChtb2QucmVxdWlyZSA9IGNvbnRleHQubWFrZVJlcXVpcmUobW9kLm1hcCkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAnZXhwb3J0cyc6IGZ1bmN0aW9uIChtb2QpIHsKICAgICAgICAgICAgICAgIG1vZC51c2luZ0V4cG9ydHMgPSB0cnVlOwogICAgICAgICAgICAgICAgaWYgKG1vZC5tYXAuaXNEZWZpbmUpIHsKICAgICAgICAgICAgICAgICAgICBpZiAobW9kLmV4cG9ydHMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChkZWZpbmVkW21vZC5tYXAuaWRdID0gbW9kLmV4cG9ydHMpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAobW9kLmV4cG9ydHMgPSBkZWZpbmVkW21vZC5tYXAuaWRdID0ge30pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgJ21vZHVsZSc6IGZ1bmN0aW9uIChtb2QpIHsKICAgICAgICAgICAgICAgIGlmIChtb2QubW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vZC5tb2R1bGU7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAobW9kLm1vZHVsZSA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IG1vZC5tYXAuaWQsCiAgICAgICAgICAgICAgICAgICAgICAgIHVyaTogbW9kLm1hcC51cmwsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZzogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldE93bihjb25maWcuY29uZmlnLCBtb2QubWFwLmlkKSB8fCB7fTsKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0czogbW9kLmV4cG9ydHMgfHwgKG1vZC5leHBvcnRzID0ge30pCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICBmdW5jdGlvbiBjbGVhblJlZ2lzdHJ5KGlkKSB7CiAgICAgICAgICAgIC8vQ2xlYW4gdXAgbWFjaGluZXJ5IHVzZWQgZm9yIHdhaXRpbmcgbW9kdWxlcy4KICAgICAgICAgICAgZGVsZXRlIHJlZ2lzdHJ5W2lkXTsKICAgICAgICAgICAgZGVsZXRlIGVuYWJsZWRSZWdpc3RyeVtpZF07CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBicmVha0N5Y2xlKG1vZCwgdHJhY2VkLCBwcm9jZXNzZWQpIHsKICAgICAgICAgICAgdmFyIGlkID0gbW9kLm1hcC5pZDsKCiAgICAgICAgICAgIGlmIChtb2QuZXJyb3IpIHsKICAgICAgICAgICAgICAgIG1vZC5lbWl0KCdlcnJvcicsIG1vZC5lcnJvcik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0cmFjZWRbaWRdID0gdHJ1ZTsKICAgICAgICAgICAgICAgIGVhY2gobW9kLmRlcE1hcHMsIGZ1bmN0aW9uIChkZXBNYXAsIGkpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgZGVwSWQgPSBkZXBNYXAuaWQsCiAgICAgICAgICAgICAgICAgICAgICAgIGRlcCA9IGdldE93bihyZWdpc3RyeSwgZGVwSWQpOwoKICAgICAgICAgICAgICAgICAgICAvL09ubHkgZm9yY2UgdGhpbmdzIHRoYXQgaGF2ZSBub3QgY29tcGxldGVkCiAgICAgICAgICAgICAgICAgICAgLy9iZWluZyBkZWZpbmVkLCBzbyBzdGlsbCBpbiB0aGUgcmVnaXN0cnksCiAgICAgICAgICAgICAgICAgICAgLy9hbmQgb25seSBpZiBpdCBoYXMgbm90IGJlZW4gbWF0Y2hlZCB1cAogICAgICAgICAgICAgICAgICAgIC8vaW4gdGhlIG1vZHVsZSBhbHJlYWR5LgogICAgICAgICAgICAgICAgICAgIGlmIChkZXAgJiYgIW1vZC5kZXBNYXRjaGVkW2ldICYmICFwcm9jZXNzZWRbZGVwSWRdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnZXRPd24odHJhY2VkLCBkZXBJZCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZC5kZWZpbmVEZXAoaSwgZGVmaW5lZFtkZXBJZF0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kLmNoZWNrKCk7IC8vcGFzcyBmYWxzZT8KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrQ3ljbGUoZGVwLCB0cmFjZWQsIHByb2Nlc3NlZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIHByb2Nlc3NlZFtpZF0gPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBjaGVja0xvYWRlZCgpIHsKICAgICAgICAgICAgdmFyIGVyciwgdXNpbmdQYXRoRmFsbGJhY2ssCiAgICAgICAgICAgICAgICB3YWl0SW50ZXJ2YWwgPSBjb25maWcud2FpdFNlY29uZHMgKiAxMDAwLAogICAgICAgICAgICAgICAgLy9JdCBpcyBwb3NzaWJsZSB0byBkaXNhYmxlIHRoZSB3YWl0IGludGVydmFsIGJ5IHVzaW5nIHdhaXRTZWNvbmRzIG9mIDAuCiAgICAgICAgICAgICAgICBleHBpcmVkID0gd2FpdEludGVydmFsICYmIChjb250ZXh0LnN0YXJ0VGltZSArIHdhaXRJbnRlcnZhbCkgPCBuZXcgRGF0ZSgpLmdldFRpbWUoKSwKICAgICAgICAgICAgICAgIG5vTG9hZHMgPSBbXSwKICAgICAgICAgICAgICAgIHJlcUNhbGxzID0gW10sCiAgICAgICAgICAgICAgICBzdGlsbExvYWRpbmcgPSBmYWxzZSwKICAgICAgICAgICAgICAgIG5lZWRDeWNsZUNoZWNrID0gdHJ1ZTsKCiAgICAgICAgICAgIC8vRG8gbm90IGJvdGhlciBpZiB0aGlzIGNhbGwgd2FzIGEgcmVzdWx0IG9mIGEgY3ljbGUgYnJlYWsuCiAgICAgICAgICAgIGlmIChpbkNoZWNrTG9hZGVkKSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGluQ2hlY2tMb2FkZWQgPSB0cnVlOwoKICAgICAgICAgICAgLy9GaWd1cmUgb3V0IHRoZSBzdGF0ZSBvZiBhbGwgdGhlIG1vZHVsZXMuCiAgICAgICAgICAgIGVhY2hQcm9wKGVuYWJsZWRSZWdpc3RyeSwgZnVuY3Rpb24gKG1vZCkgewogICAgICAgICAgICAgICAgdmFyIG1hcCA9IG1vZC5tYXAsCiAgICAgICAgICAgICAgICAgICAgbW9kSWQgPSBtYXAuaWQ7CgogICAgICAgICAgICAgICAgLy9Ta2lwIHRoaW5ncyB0aGF0IGFyZSBub3QgZW5hYmxlZCBvciBpbiBlcnJvciBzdGF0ZS4KICAgICAgICAgICAgICAgIGlmICghbW9kLmVuYWJsZWQpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCFtYXAuaXNEZWZpbmUpIHsKICAgICAgICAgICAgICAgICAgICByZXFDYWxscy5wdXNoKG1vZCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCFtb2QuZXJyb3IpIHsKICAgICAgICAgICAgICAgICAgICAvL0lmIHRoZSBtb2R1bGUgc2hvdWxkIGJlIGV4ZWN1dGVkLCBhbmQgaXQgaGFzIG5vdAogICAgICAgICAgICAgICAgICAgIC8vYmVlbiBpbml0ZWQgYW5kIHRpbWUgaXMgdXAsIHJlbWVtYmVyIGl0LgogICAgICAgICAgICAgICAgICAgIGlmICghbW9kLmluaXRlZCAmJiBleHBpcmVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNQYXRoRmFsbGJhY2sobW9kSWQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2luZ1BhdGhGYWxsYmFjayA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGlsbExvYWRpbmcgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9Mb2Fkcy5wdXNoKG1vZElkKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZVNjcmlwdChtb2RJZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFtb2QuaW5pdGVkICYmIG1vZC5mZXRjaGVkICYmIG1hcC5pc0RlZmluZSkgewogICAgICAgICAgICAgICAgICAgICAgICBzdGlsbExvYWRpbmcgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1hcC5wcmVmaXgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vTm8gcmVhc29uIHRvIGtlZXAgbG9va2luZyBmb3IgdW5maW5pc2hlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9sb2FkaW5nLiBJZiB0aGUgb25seSBzdGlsbExvYWRpbmcgaXMgYQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9wbHVnaW4gcmVzb3VyY2UgdGhvdWdoLCBrZWVwIGdvaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9iZWNhdXNlIGl0IG1heSBiZSB0aGF0IGEgcGx1Z2luIHJlc291cmNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2lzIHdhaXRpbmcgb24gYSBub24tcGx1Z2luIGN5Y2xlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChuZWVkQ3ljbGVDaGVjayA9IGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICBpZiAoZXhwaXJlZCAmJiBub0xvYWRzLmxlbmd0aCkgewogICAgICAgICAgICAgICAgLy9JZiB3YWl0IHRpbWUgZXhwaXJlZCwgdGhyb3cgZXJyb3Igb2YgdW5sb2FkZWQgbW9kdWxlcy4KICAgICAgICAgICAgICAgIGVyciA9IG1ha2VFcnJvcigndGltZW91dCcsICdMb2FkIHRpbWVvdXQgZm9yIG1vZHVsZXM6ICcgKyBub0xvYWRzLCBudWxsLCBub0xvYWRzKTsKICAgICAgICAgICAgICAgIGVyci5jb250ZXh0TmFtZSA9IGNvbnRleHQuY29udGV4dE5hbWU7CiAgICAgICAgICAgICAgICByZXR1cm4gb25FcnJvcihlcnIpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvL05vdCBleHBpcmVkLCBjaGVjayBmb3IgYSBjeWNsZS4KICAgICAgICAgICAgaWYgKG5lZWRDeWNsZUNoZWNrKSB7CiAgICAgICAgICAgICAgICBlYWNoKHJlcUNhbGxzLCBmdW5jdGlvbiAobW9kKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWtDeWNsZShtb2QsIHt9LCB7fSk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy9JZiBzdGlsbCB3YWl0aW5nIG9uIGxvYWRzLCBhbmQgdGhlIHdhaXRpbmcgbG9hZCBpcyBzb21ldGhpbmcKICAgICAgICAgICAgLy9vdGhlciB0aGFuIGEgcGx1Z2luIHJlc291cmNlLCBvciB0aGVyZSBhcmUgc3RpbGwgb3V0c3RhbmRpbmcKICAgICAgICAgICAgLy9zY3JpcHRzLCB0aGVuIGp1c3QgdHJ5IGJhY2sgbGF0ZXIuCiAgICAgICAgICAgIGlmICgoIWV4cGlyZWQgfHwgdXNpbmdQYXRoRmFsbGJhY2spICYmIHN0aWxsTG9hZGluZykgewogICAgICAgICAgICAgICAgLy9Tb21ldGhpbmcgaXMgc3RpbGwgd2FpdGluZyB0byBsb2FkLiBXYWl0IGZvciBpdCwgYnV0IG9ubHkKICAgICAgICAgICAgICAgIC8vaWYgYSB0aW1lb3V0IGlzIG5vdCBhbHJlYWR5IGluIGVmZmVjdC4KICAgICAgICAgICAgICAgIGlmICgoaXNCcm93c2VyIHx8IGlzV2ViV29ya2VyKSAmJiAhY2hlY2tMb2FkZWRUaW1lb3V0SWQpIHsKICAgICAgICAgICAgICAgICAgICBjaGVja0xvYWRlZFRpbWVvdXRJZCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgICBjaGVja0xvYWRlZFRpbWVvdXRJZCA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrTG9hZGVkKCk7CiAgICAgICAgICAgICAgICAgICAgfSwgNTApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBpbkNoZWNrTG9hZGVkID0gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICBNb2R1bGUgPSBmdW5jdGlvbiAobWFwKSB7CiAgICAgICAgICAgIHRoaXMuZXZlbnRzID0gZ2V0T3duKHVuZGVmRXZlbnRzLCBtYXAuaWQpIHx8IHt9OwogICAgICAgICAgICB0aGlzLm1hcCA9IG1hcDsKICAgICAgICAgICAgdGhpcy5zaGltID0gZ2V0T3duKGNvbmZpZy5zaGltLCBtYXAuaWQpOwogICAgICAgICAgICB0aGlzLmRlcEV4cG9ydHMgPSBbXTsKICAgICAgICAgICAgdGhpcy5kZXBNYXBzID0gW107CiAgICAgICAgICAgIHRoaXMuZGVwTWF0Y2hlZCA9IFtdOwogICAgICAgICAgICB0aGlzLnBsdWdpbk1hcHMgPSB7fTsKICAgICAgICAgICAgdGhpcy5kZXBDb3VudCA9IDA7CgogICAgICAgICAgICAvKiB0aGlzLmV4cG9ydHMgdGhpcy5mYWN0b3J5CiAgICAgICAgICAgICAgIHRoaXMuZGVwTWFwcyA9IFtdLAogICAgICAgICAgICAgICB0aGlzLmVuYWJsZWQsIHRoaXMuZmV0Y2hlZAogICAgICAgICAgICAqLwogICAgICAgIH07CgogICAgICAgIE1vZHVsZS5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgIGluaXQ6IGZ1bmN0aW9uIChkZXBNYXBzLCBmYWN0b3J5LCBlcnJiYWNrLCBvcHRpb25zKSB7CiAgICAgICAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKCiAgICAgICAgICAgICAgICAvL0RvIG5vdCBkbyBtb3JlIGluaXRzIGlmIGFscmVhZHkgZG9uZS4gQ2FuIGhhcHBlbiBpZiB0aGVyZQogICAgICAgICAgICAgICAgLy9hcmUgbXVsdGlwbGUgZGVmaW5lIGNhbGxzIGZvciB0aGUgc2FtZSBtb2R1bGUuIFRoYXQgaXMgbm90CiAgICAgICAgICAgICAgICAvL2Egbm9ybWFsLCBjb21tb24gY2FzZSwgYnV0IGl0IGlzIGFsc28gbm90IHVuZXhwZWN0ZWQuCiAgICAgICAgICAgICAgICBpZiAodGhpcy5pbml0ZWQpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdGhpcy5mYWN0b3J5ID0gZmFjdG9yeTsKCiAgICAgICAgICAgICAgICBpZiAoZXJyYmFjaykgewogICAgICAgICAgICAgICAgICAgIC8vUmVnaXN0ZXIgZm9yIGVycm9ycyBvbiB0aGlzIG1vZHVsZS4KICAgICAgICAgICAgICAgICAgICB0aGlzLm9uKCdlcnJvcicsIGVycmJhY2spOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmV2ZW50cy5lcnJvcikgewogICAgICAgICAgICAgICAgICAgIC8vSWYgbm8gZXJyYmFjayBhbHJlYWR5LCBidXQgdGhlcmUgYXJlIGVycm9yIGxpc3RlbmVycwogICAgICAgICAgICAgICAgICAgIC8vb24gdGhpcyBtb2R1bGUsIHNldCB1cCBhbiBlcnJiYWNrIHRvIHBhc3MgdG8gdGhlIGRlcHMuCiAgICAgICAgICAgICAgICAgICAgZXJyYmFjayA9IGJpbmQodGhpcywgZnVuY3Rpb24gKGVycikgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvL0RvIGEgY29weSBvZiB0aGUgZGVwZW5kZW5jeSBhcnJheSwgc28gdGhhdAogICAgICAgICAgICAgICAgLy9zb3VyY2UgaW5wdXRzIGFyZSBub3QgbW9kaWZpZWQuIEZvciBleGFtcGxlCiAgICAgICAgICAgICAgICAvLyJzaGltIiBkZXBzIGFyZSBwYXNzZWQgaW4gaGVyZSBkaXJlY3RseSwgYW5kCiAgICAgICAgICAgICAgICAvL2RvaW5nIGEgZGlyZWN0IG1vZGlmaWNhdGlvbiBvZiB0aGUgZGVwTWFwcyBhcnJheQogICAgICAgICAgICAgICAgLy93b3VsZCBhZmZlY3QgdGhhdCBjb25maWcuCiAgICAgICAgICAgICAgICB0aGlzLmRlcE1hcHMgPSBkZXBNYXBzICYmIGRlcE1hcHMuc2xpY2UoMCk7CgogICAgICAgICAgICAgICAgdGhpcy5lcnJiYWNrID0gZXJyYmFjazsKCiAgICAgICAgICAgICAgICAvL0luZGljYXRlIHRoaXMgbW9kdWxlIGhhcyBiZSBpbml0aWFsaXplZAogICAgICAgICAgICAgICAgdGhpcy5pbml0ZWQgPSB0cnVlOwoKICAgICAgICAgICAgICAgIHRoaXMuaWdub3JlID0gb3B0aW9ucy5pZ25vcmU7CgogICAgICAgICAgICAgICAgLy9Db3VsZCBoYXZlIG9wdGlvbiB0byBpbml0IHRoaXMgbW9kdWxlIGluIGVuYWJsZWQgbW9kZSwKICAgICAgICAgICAgICAgIC8vb3IgY291bGQgaGF2ZSBiZWVuIHByZXZpb3VzbHkgbWFya2VkIGFzIGVuYWJsZWQuIEhvd2V2ZXIsCiAgICAgICAgICAgICAgICAvL3RoZSBkZXBlbmRlbmNpZXMgYXJlIG5vdCBrbm93biB1bnRpbCBpbml0IGlzIGNhbGxlZC4gU28KICAgICAgICAgICAgICAgIC8vaWYgZW5hYmxlZCBwcmV2aW91c2x5LCBub3cgdHJpZ2dlciBkZXBlbmRlbmNpZXMgYXMgZW5hYmxlZC4KICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmVuYWJsZWQgfHwgdGhpcy5lbmFibGVkKSB7CiAgICAgICAgICAgICAgICAgICAgLy9FbmFibGUgdGhpcyBtb2R1bGUgYW5kIGRlcGVuZGVuY2llcy4KICAgICAgICAgICAgICAgICAgICAvL1dpbGwgY2FsbCB0aGlzLmNoZWNrKCkKICAgICAgICAgICAgICAgICAgICB0aGlzLmVuYWJsZSgpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBkZWZpbmVEZXA6IGZ1bmN0aW9uIChpLCBkZXBFeHBvcnRzKSB7CiAgICAgICAgICAgICAgICAvL0JlY2F1c2Ugb2YgY3ljbGVzLCBkZWZpbmVkIGNhbGxiYWNrIGZvciBhIGdpdmVuCiAgICAgICAgICAgICAgICAvL2V4cG9ydCBjYW4gYmUgY2FsbGVkIG1vcmUgdGhhbiBvbmNlLgogICAgICAgICAgICAgICAgaWYgKCF0aGlzLmRlcE1hdGNoZWRbaV0pIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmRlcE1hdGNoZWRbaV0gPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIHRoaXMuZGVwQ291bnQgLT0gMTsKICAgICAgICAgICAgICAgICAgICB0aGlzLmRlcEV4cG9ydHNbaV0gPSBkZXBFeHBvcnRzOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAoKICAgICAgICAgICAgZmV0Y2g6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIGlmICh0aGlzLmZldGNoZWQpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB0aGlzLmZldGNoZWQgPSB0cnVlOwoKICAgICAgICAgICAgICAgIGNvbnRleHQuc3RhcnRUaW1lID0gKG5ldyBEYXRlKCkpLmdldFRpbWUoKTsKCiAgICAgICAgICAgICAgICB2YXIgbWFwID0gdGhpcy5tYXA7CgogICAgICAgICAgICAgICAgLy9JZiB0aGUgbWFuYWdlciBpcyBmb3IgYSBwbHVnaW4gbWFuYWdlZCByZXNvdXJjZSwKICAgICAgICAgICAgICAgIC8vYXNrIHRoZSBwbHVnaW4gdG8gbG9hZCBpdCBub3cuCiAgICAgICAgICAgICAgICBpZiAodGhpcy5zaGltKSB7CiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5tYWtlUmVxdWlyZSh0aGlzLm1hcCwgewogICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVCdWlsZENhbGxiYWNrOiB0cnVlCiAgICAgICAgICAgICAgICAgICAgfSkodGhpcy5zaGltLmRlcHMgfHwgW10sIGJpbmQodGhpcywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWFwLnByZWZpeCA/IHRoaXMuY2FsbFBsdWdpbigpIDogdGhpcy5sb2FkKCk7CiAgICAgICAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvL1JlZ3VsYXIgZGVwZW5kZW5jeS4KICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWFwLnByZWZpeCA/IHRoaXMuY2FsbFBsdWdpbigpIDogdGhpcy5sb2FkKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBsb2FkOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICB2YXIgdXJsID0gdGhpcy5tYXAudXJsOwoKICAgICAgICAgICAgICAgIC8vUmVndWxhciBkZXBlbmRlbmN5LgogICAgICAgICAgICAgICAgaWYgKCF1cmxGZXRjaGVkW3VybF0pIHsKICAgICAgICAgICAgICAgICAgICB1cmxGZXRjaGVkW3VybF0gPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIGNvbnRleHQubG9hZCh0aGlzLm1hcC5pZCwgdXJsKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDaGVja3MgaWYgdGhlIG1vZHVsZSBpcyByZWFkeSB0byBkZWZpbmUgaXRzZWxmLCBhbmQgaWYgc28sCiAgICAgICAgICAgICAqIGRlZmluZSBpdC4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGNoZWNrOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZW5hYmxlZCB8fCB0aGlzLmVuYWJsaW5nKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBlcnIsIGNqc01vZHVsZSwKICAgICAgICAgICAgICAgICAgICBpZCA9IHRoaXMubWFwLmlkLAogICAgICAgICAgICAgICAgICAgIGRlcEV4cG9ydHMgPSB0aGlzLmRlcEV4cG9ydHMsCiAgICAgICAgICAgICAgICAgICAgZXhwb3J0cyA9IHRoaXMuZXhwb3J0cywKICAgICAgICAgICAgICAgICAgICBmYWN0b3J5ID0gdGhpcy5mYWN0b3J5OwoKICAgICAgICAgICAgICAgIGlmICghdGhpcy5pbml0ZWQpIHsKICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IGZldGNoIGlmIG5vdCBhbHJlYWR5IGluIHRoZSBkZWZRdWV1ZS4KICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc1Byb3AoY29udGV4dC5kZWZRdWV1ZU1hcCwgaWQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmV0Y2goKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZXJyb3IpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgdGhpcy5lcnJvcik7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmRlZmluaW5nKSB7CiAgICAgICAgICAgICAgICAgICAgLy9UaGUgZmFjdG9yeSBjb3VsZCB0cmlnZ2VyIGFub3RoZXIgcmVxdWlyZSBjYWxsCiAgICAgICAgICAgICAgICAgICAgLy90aGF0IHdvdWxkIHJlc3VsdCBpbiBjaGVja2luZyB0aGlzIG1vZHVsZSB0bwogICAgICAgICAgICAgICAgICAgIC8vZGVmaW5lIGl0c2VsZiBhZ2Fpbi4gSWYgYWxyZWFkeSBpbiB0aGUgcHJvY2VzcwogICAgICAgICAgICAgICAgICAgIC8vb2YgZG9pbmcgdGhhdCwgc2tpcCB0aGlzIHdvcmsuCiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZpbmluZyA9IHRydWU7CgogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlcENvdW50IDwgMSAmJiAhdGhpcy5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGZhY3RvcnkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0lmIHRoZXJlIGlzIGFuIGVycm9yIGxpc3RlbmVyLCBmYXZvciBwYXNzaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3RvIHRoYXQgaW5zdGVhZCBvZiB0aHJvd2luZyBhbiBlcnJvci4gSG93ZXZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vb25seSBkbyBpdCBmb3IgZGVmaW5lKCknZCAgbW9kdWxlcy4gcmVxdWlyZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9lcnJiYWNrcyBzaG91bGQgbm90IGJlIGNhbGxlZCBmb3IgZmFpbHVyZXMgaW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdGhlaXIgY2FsbGJhY2tzICgjNjk5KS4gSG93ZXZlciBpZiBhIGdsb2JhbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9vbkVycm9yIGlzIHNldCwgdXNlIHRoYXQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHRoaXMuZXZlbnRzLmVycm9yICYmIHRoaXMubWFwLmlzRGVmaW5lKSB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcS5vbkVycm9yICE9PSBkZWZhdWx0T25FcnJvcikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydHMgPSBjb250ZXh0LmV4ZWNDYihpZCwgZmFjdG9yeSwgZGVwRXhwb3J0cywgZXhwb3J0cyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIgPSBlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0cyA9IGNvbnRleHQuZXhlY0NiKGlkLCBmYWN0b3J5LCBkZXBFeHBvcnRzLCBleHBvcnRzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGYXZvciByZXR1cm4gdmFsdWUgb3ZlciBleHBvcnRzLiBJZiBub2RlL2NqcyBpbiBwbGF5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlbiB3aWxsIG5vdCBoYXZlIGEgcmV0dXJuIHZhbHVlIGFueXdheS4gRmF2b3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1vZHVsZS5leHBvcnRzIGFzc2lnbm1lbnQgb3ZlciBleHBvcnRzIG9iamVjdC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hcC5pc0RlZmluZSAmJiBleHBvcnRzID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjanNNb2R1bGUgPSB0aGlzLm1vZHVsZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2pzTW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydHMgPSBjanNNb2R1bGUuZXhwb3J0czsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudXNpbmdFeHBvcnRzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vZXhwb3J0cyBhbHJlYWR5IHNldCB0aGUgZGVmaW5lZCB2YWx1ZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0cyA9IHRoaXMuZXhwb3J0czsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyci5yZXF1aXJlTWFwID0gdGhpcy5tYXA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyLnJlcXVpcmVNb2R1bGVzID0gdGhpcy5tYXAuaXNEZWZpbmUgPyBbdGhpcy5tYXAuaWRdIDogbnVsbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIucmVxdWlyZVR5cGUgPSB0aGlzLm1hcC5pc0RlZmluZSA/ICdkZWZpbmUnIDogJ3JlcXVpcmUnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvbkVycm9yKCh0aGlzLmVycm9yID0gZXJyKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9KdXN0IGEgbGl0ZXJhbCB2YWx1ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0cyA9IGZhY3Rvcnk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwb3J0cyA9IGV4cG9ydHM7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXAuaXNEZWZpbmUgJiYgIXRoaXMuaWdub3JlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVkW2lkXSA9IGV4cG9ydHM7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcS5vblJlc291cmNlTG9hZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXNMb2FkTWFwcyA9IFtdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVhY2godGhpcy5kZXBNYXBzLCBmdW5jdGlvbiAoZGVwTWFwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc0xvYWRNYXBzLnB1c2goZGVwTWFwLm5vcm1hbGl6ZWRNYXAgfHwgZGVwTWFwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXEub25SZXNvdXJjZUxvYWQoY29udGV4dCwgdGhpcy5tYXAsIHJlc0xvYWRNYXBzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy9DbGVhbiB1cAogICAgICAgICAgICAgICAgICAgICAgICBjbGVhblJlZ2lzdHJ5KGlkKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmaW5lZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAvL0ZpbmlzaGVkIHRoZSBkZWZpbmUgc3RhZ2UuIEFsbG93IGNhbGxpbmcgY2hlY2sgYWdhaW4KICAgICAgICAgICAgICAgICAgICAvL3RvIGFsbG93IGRlZmluZSBub3RpZmljYXRpb25zIGJlbG93IGluIHRoZSBjYXNlIG9mIGEKICAgICAgICAgICAgICAgICAgICAvL2N5Y2xlLgogICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmaW5pbmcgPSBmYWxzZTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGVmaW5lZCAmJiAhdGhpcy5kZWZpbmVFbWl0dGVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmaW5lRW1pdHRlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnZGVmaW5lZCcsIHRoaXMuZXhwb3J0cyk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmaW5lRW1pdENvbXBsZXRlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAoKICAgICAgICAgICAgY2FsbFBsdWdpbjogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgdmFyIG1hcCA9IHRoaXMubWFwLAogICAgICAgICAgICAgICAgICAgIGlkID0gbWFwLmlkLAogICAgICAgICAgICAgICAgICAgIC8vTWFwIGFscmVhZHkgbm9ybWFsaXplZCB0aGUgcHJlZml4LgogICAgICAgICAgICAgICAgICAgIHBsdWdpbk1hcCA9IG1ha2VNb2R1bGVNYXAobWFwLnByZWZpeCk7CgogICAgICAgICAgICAgICAgLy9NYXJrIHRoaXMgYXMgYSBkZXBlbmRlbmN5IGZvciB0aGlzIHBsdWdpbiwgc28gaXQKICAgICAgICAgICAgICAgIC8vY2FuIGJlIHRyYWNlZCBmb3IgY3ljbGVzLgogICAgICAgICAgICAgICAgdGhpcy5kZXBNYXBzLnB1c2gocGx1Z2luTWFwKTsKCiAgICAgICAgICAgICAgICBvbihwbHVnaW5NYXAsICdkZWZpbmVkJywgYmluZCh0aGlzLCBmdW5jdGlvbiAocGx1Z2luKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGxvYWQsIG5vcm1hbGl6ZWRNYXAsIG5vcm1hbGl6ZWRNb2QsCiAgICAgICAgICAgICAgICAgICAgICAgIGJ1bmRsZUlkID0gZ2V0T3duKGJ1bmRsZXNNYXAsIHRoaXMubWFwLmlkKSwKICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHRoaXMubWFwLm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE5hbWUgPSB0aGlzLm1hcC5wYXJlbnRNYXAgPyB0aGlzLm1hcC5wYXJlbnRNYXAubmFtZSA6IG51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsUmVxdWlyZSA9IGNvbnRleHQubWFrZVJlcXVpcmUobWFwLnBhcmVudE1hcCwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlQnVpbGRDYWxsYmFjazogdHJ1ZQogICAgICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgLy9JZiBjdXJyZW50IG1hcCBpcyBub3Qgbm9ybWFsaXplZCwgd2FpdCBmb3IgdGhhdAogICAgICAgICAgICAgICAgICAgIC8vbm9ybWFsaXplZCBuYW1lIHRvIGxvYWQgaW5zdGVhZCBvZiBjb250aW51aW5nLgogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hcC51bm5vcm1hbGl6ZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy9Ob3JtYWxpemUgdGhlIElEIGlmIHRoZSBwbHVnaW4gYWxsb3dzIGl0LgogICAgICAgICAgICAgICAgICAgICAgICBpZiAocGx1Z2luLm5vcm1hbGl6ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHBsdWdpbi5ub3JtYWxpemUobmFtZSwgZnVuY3Rpb24gKG5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplKG5hbWUsIHBhcmVudE5hbWUsIHRydWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkgfHwgJyc7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vcHJlZml4IGFuZCBuYW1lIHNob3VsZCBhbHJlYWR5IGJlIG5vcm1hbGl6ZWQsIG5vIG5lZWQKICAgICAgICAgICAgICAgICAgICAgICAgLy9mb3IgYXBwbHlpbmcgbWFwIGNvbmZpZyBhZ2FpbiBlaXRoZXIuCiAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRNYXAgPSBtYWtlTW9kdWxlTWFwKG1hcC5wcmVmaXggKyAnIScgKyBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcC5wYXJlbnRNYXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUpOwogICAgICAgICAgICAgICAgICAgICAgICBvbihub3JtYWxpemVkTWFwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlZmluZWQnLCBiaW5kKHRoaXMsIGZ1bmN0aW9uICh2YWx1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWFwLm5vcm1hbGl6ZWRNYXAgPSBub3JtYWxpemVkTWFwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdChbXSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdmFsdWU7IH0sIG51bGwsIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlOiB0cnVlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7CgogICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTW9kID0gZ2V0T3duKHJlZ2lzdHJ5LCBub3JtYWxpemVkTWFwLmlkKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWRNb2QpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vTWFyayB0aGlzIGFzIGEgZGVwZW5kZW5jeSBmb3IgdGhpcyBwbHVnaW4sIHNvIGl0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2NhbiBiZSB0cmFjZWQgZm9yIGN5Y2xlcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVwTWFwcy5wdXNoKG5vcm1hbGl6ZWRNYXApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmV2ZW50cy5lcnJvcikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRNb2Qub24oJ2Vycm9yJywgYmluZCh0aGlzLCBmdW5jdGlvbiAoZXJyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCBlcnIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRNb2QuZW5hYmxlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIC8vSWYgYSBwYXRocyBjb25maWcsIHRoZW4ganVzdCBsb2FkIHRoYXQgZmlsZSBpbnN0ZWFkIHRvCiAgICAgICAgICAgICAgICAgICAgLy9yZXNvbHZlIHRoZSBwbHVnaW4sIGFzIGl0IGlzIGJ1aWx0IGludG8gdGhhdCBwYXRocyBsYXllci4KICAgICAgICAgICAgICAgICAgICBpZiAoYnVuZGxlSWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXAudXJsID0gY29udGV4dC5uYW1lVG9VcmwoYnVuZGxlSWQpOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgbG9hZCA9IGJpbmQodGhpcywgZnVuY3Rpb24gKHZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdChbXSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdmFsdWU7IH0sIG51bGwsIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgICAgIGxvYWQuZXJyb3IgPSBiaW5kKHRoaXMsIGZ1bmN0aW9uIChlcnIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gZXJyOwogICAgICAgICAgICAgICAgICAgICAgICBlcnIucmVxdWlyZU1vZHVsZXMgPSBbaWRdOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy9SZW1vdmUgdGVtcCB1bm5vcm1hbGl6ZWQgbW9kdWxlcyBmb3IgdGhpcyBtb2R1bGUsCiAgICAgICAgICAgICAgICAgICAgICAgIC8vc2luY2UgdGhleSB3aWxsIG5ldmVyIGJlIHJlc29sdmVkIG90aGVyd2lzZSBub3cuCiAgICAgICAgICAgICAgICAgICAgICAgIGVhY2hQcm9wKHJlZ2lzdHJ5LCBmdW5jdGlvbiAobW9kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9kLm1hcC5pZC5pbmRleE9mKGlkICsgJ191bm5vcm1hbGl6ZWQnKSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFuUmVnaXN0cnkobW9kLm1hcC5pZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICAgICAgb25FcnJvcihlcnIpOwogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICAvL0FsbG93IHBsdWdpbnMgdG8gbG9hZCBvdGhlciBjb2RlIHdpdGhvdXQgaGF2aW5nIHRvIGtub3cgdGhlCiAgICAgICAgICAgICAgICAgICAgLy9jb250ZXh0IG9yIGhvdyB0byAnY29tcGxldGUnIHRoZSBsb2FkLgogICAgICAgICAgICAgICAgICAgIGxvYWQuZnJvbVRleHQgPSBiaW5kKHRoaXMsIGZ1bmN0aW9uICh0ZXh0LCB0ZXh0QWx0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8qanNsaW50IGV2aWw6IHRydWUgKi8KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1vZHVsZU5hbWUgPSBtYXAubmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZU1hcCA9IG1ha2VNb2R1bGVNYXAobW9kdWxlTmFtZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNJbnRlcmFjdGl2ZSA9IHVzZUludGVyYWN0aXZlOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy9BcyBvZiAyLjEuMCwgc3VwcG9ydCBqdXN0IHBhc3NpbmcgdGhlIHRleHQsIHRvIHJlaW5mb3JjZQogICAgICAgICAgICAgICAgICAgICAgICAvL2Zyb21UZXh0IG9ubHkgYmVpbmcgY2FsbGVkIG9uY2UgcGVyIHJlc291cmNlLiBTdGlsbAogICAgICAgICAgICAgICAgICAgICAgICAvL3N1cHBvcnQgb2xkIHN0eWxlIG9mIHBhc3NpbmcgbW9kdWxlTmFtZSBidXQgZGlzY2FyZAogICAgICAgICAgICAgICAgICAgICAgICAvL3RoYXQgbW9kdWxlTmFtZSBpbiBmYXZvciBvZiB0aGUgaW50ZXJuYWwgcmVmLgogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4dEFsdCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCA9IHRleHRBbHQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vVHVybiBvZmYgaW50ZXJhY3RpdmUgc2NyaXB0IG1hdGNoaW5nIGZvciBJRSBmb3IgYW55IGRlZmluZQogICAgICAgICAgICAgICAgICAgICAgICAvL2NhbGxzIGluIHRoZSB0ZXh0LCB0aGVuIHR1cm4gaXQgYmFjayBvbiBhdCB0aGUgZW5kLgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSW50ZXJhY3RpdmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZUludGVyYWN0aXZlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vUHJpbWUgdGhlIHN5c3RlbSBieSBjcmVhdGluZyBhIG1vZHVsZSBpbnN0YW5jZSBmb3IKICAgICAgICAgICAgICAgICAgICAgICAgLy9pdC4KICAgICAgICAgICAgICAgICAgICAgICAgZ2V0TW9kdWxlKG1vZHVsZU1hcCk7CgogICAgICAgICAgICAgICAgICAgICAgICAvL1RyYW5zZmVyIGFueSBjb25maWcgdG8gdGhpcyBvdGhlciBtb2R1bGUuCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNQcm9wKGNvbmZpZy5jb25maWcsIGlkKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLmNvbmZpZ1ttb2R1bGVOYW1lXSA9IGNvbmZpZy5jb25maWdbaWRdOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxLmV4ZWModGV4dCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvbkVycm9yKG1ha2VFcnJvcignZnJvbXRleHRldmFsJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Zyb21UZXh0IGV2YWwgZm9yICcgKyBpZCArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyBmYWlsZWQ6ICcgKyBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNJbnRlcmFjdGl2ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlSW50ZXJhY3RpdmUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvL01hcmsgdGhpcyBhcyBhIGRlcGVuZGVuY3kgZm9yIHRoZSBwbHVnaW4KICAgICAgICAgICAgICAgICAgICAgICAgLy9yZXNvdXJjZQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlcE1hcHMucHVzaChtb2R1bGVNYXApOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy9TdXBwb3J0IGFub255bW91cyBtb2R1bGVzLgogICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmNvbXBsZXRlTG9hZChtb2R1bGVOYW1lKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vQmluZCB0aGUgdmFsdWUgb2YgdGhhdCBtb2R1bGUgdG8gdGhlIHZhbHVlIGZvciB0aGlzCiAgICAgICAgICAgICAgICAgICAgICAgIC8vcmVzb3VyY2UgSUQuCiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsUmVxdWlyZShbbW9kdWxlTmFtZV0sIGxvYWQpOwogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICAvL1VzZSBwYXJlbnROYW1lIGhlcmUgc2luY2UgdGhlIHBsdWdpbidzIG5hbWUgaXMgbm90IHJlbGlhYmxlLAogICAgICAgICAgICAgICAgICAgIC8vY291bGQgYmUgc29tZSB3ZWlyZCBzdHJpbmcgd2l0aCBubyBwYXRoIHRoYXQgYWN0dWFsbHkgd2FudHMgdG8KICAgICAgICAgICAgICAgICAgICAvL3JlZmVyZW5jZSB0aGUgcGFyZW50TmFtZSdzIHBhdGguCiAgICAgICAgICAgICAgICAgICAgcGx1Z2luLmxvYWQobWFwLm5hbWUsIGxvY2FsUmVxdWlyZSwgbG9hZCwgY29uZmlnKTsKICAgICAgICAgICAgICAgIH0pKTsKCiAgICAgICAgICAgICAgICBjb250ZXh0LmVuYWJsZShwbHVnaW5NYXAsIHRoaXMpOwogICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5NYXBzW3BsdWdpbk1hcC5pZF0gPSBwbHVnaW5NYXA7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBlbmFibGU6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIGVuYWJsZWRSZWdpc3RyeVt0aGlzLm1hcC5pZF0gPSB0aGlzOwogICAgICAgICAgICAgICAgdGhpcy5lbmFibGVkID0gdHJ1ZTsKCiAgICAgICAgICAgICAgICAvL1NldCBmbGFnIG1lbnRpb25pbmcgdGhhdCB0aGUgbW9kdWxlIGlzIGVuYWJsaW5nLAogICAgICAgICAgICAgICAgLy9zbyB0aGF0IGltbWVkaWF0ZSBjYWxscyB0byB0aGUgZGVmaW5lZCBjYWxsYmFja3MKICAgICAgICAgICAgICAgIC8vZm9yIGRlcGVuZGVuY2llcyBkbyBub3QgdHJpZ2dlciBpbmFkdmVydGVudCBsb2FkCiAgICAgICAgICAgICAgICAvL3dpdGggdGhlIGRlcENvdW50IHN0aWxsIGJlaW5nIHplcm8uCiAgICAgICAgICAgICAgICB0aGlzLmVuYWJsaW5nID0gdHJ1ZTsKCiAgICAgICAgICAgICAgICAvL0VuYWJsZSBlYWNoIGRlcGVuZGVuY3kKICAgICAgICAgICAgICAgIGVhY2godGhpcy5kZXBNYXBzLCBiaW5kKHRoaXMsIGZ1bmN0aW9uIChkZXBNYXAsIGkpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgaWQsIG1vZCwgaGFuZGxlcjsKCiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkZXBNYXAgPT09ICdzdHJpbmcnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vRGVwZW5kZW5jeSBuZWVkcyB0byBiZSBjb252ZXJ0ZWQgdG8gYSBkZXBNYXAKICAgICAgICAgICAgICAgICAgICAgICAgLy9hbmQgd2lyZWQgdXAgdG8gdGhpcyBtb2R1bGUuCiAgICAgICAgICAgICAgICAgICAgICAgIGRlcE1hcCA9IG1ha2VNb2R1bGVNYXAoZGVwTWFwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLm1hcC5pc0RlZmluZSA/IHRoaXMubWFwIDogdGhpcy5tYXAucGFyZW50TWFwKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhdGhpcy5za2lwTWFwKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXBNYXBzW2ldID0gZGVwTWFwOwoKICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlciA9IGdldE93bihoYW5kbGVycywgZGVwTWFwLmlkKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYW5kbGVyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlcEV4cG9ydHNbaV0gPSBoYW5kbGVyKHRoaXMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlcENvdW50ICs9IDE7CgogICAgICAgICAgICAgICAgICAgICAgICBvbihkZXBNYXAsICdkZWZpbmVkJywgYmluZCh0aGlzLCBmdW5jdGlvbiAoZGVwRXhwb3J0cykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudW5kZWZlZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmaW5lRGVwKGksIGRlcEV4cG9ydHMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGVjaygpOwogICAgICAgICAgICAgICAgICAgICAgICB9KSk7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5lcnJiYWNrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbihkZXBNYXAsICdlcnJvcicsIGJpbmQodGhpcywgdGhpcy5lcnJiYWNrKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5ldmVudHMuZXJyb3IpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vIGRpcmVjdCBlcnJiYWNrIG9uIHRoaXMgbW9kdWxlLCBidXQgc29tZXRoaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlbHNlIGlzIGxpc3RlbmluZyBmb3IgZXJyb3JzLCBzbyBiZSBzdXJlIHRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwcm9wYWdhdGUgdGhlIGVycm9yIGNvcnJlY3RseS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uKGRlcE1hcCwgJ2Vycm9yJywgYmluZCh0aGlzLCBmdW5jdGlvbihlcnIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWQgPSBkZXBNYXAuaWQ7CiAgICAgICAgICAgICAgICAgICAgbW9kID0gcmVnaXN0cnlbaWRdOwoKICAgICAgICAgICAgICAgICAgICAvL1NraXAgc3BlY2lhbCBtb2R1bGVzIGxpa2UgJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnCiAgICAgICAgICAgICAgICAgICAgLy9BbHNvLCBkb24ndCBjYWxsIGVuYWJsZSBpZiBpdCBpcyBhbHJlYWR5IGVuYWJsZWQsCiAgICAgICAgICAgICAgICAgICAgLy9pbXBvcnRhbnQgaW4gY2lyY3VsYXIgZGVwZW5kZW5jeSBjYXNlcy4KICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc1Byb3AoaGFuZGxlcnMsIGlkKSAmJiBtb2QgJiYgIW1vZC5lbmFibGVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZW5hYmxlKGRlcE1hcCwgdGhpcyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSkpOwoKICAgICAgICAgICAgICAgIC8vRW5hYmxlIGVhY2ggcGx1Z2luIHRoYXQgaXMgdXNlZCBpbgogICAgICAgICAgICAgICAgLy9hIGRlcGVuZGVuY3kKICAgICAgICAgICAgICAgIGVhY2hQcm9wKHRoaXMucGx1Z2luTWFwcywgYmluZCh0aGlzLCBmdW5jdGlvbiAocGx1Z2luTWFwKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIG1vZCA9IGdldE93bihyZWdpc3RyeSwgcGx1Z2luTWFwLmlkKTsKICAgICAgICAgICAgICAgICAgICBpZiAobW9kICYmICFtb2QuZW5hYmxlZCkgewogICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmVuYWJsZShwbHVnaW5NYXAsIHRoaXMpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pKTsKCiAgICAgICAgICAgICAgICB0aGlzLmVuYWJsaW5nID0gZmFsc2U7CgogICAgICAgICAgICAgICAgdGhpcy5jaGVjaygpOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgb246IGZ1bmN0aW9uIChuYW1lLCBjYikgewogICAgICAgICAgICAgICAgdmFyIGNicyA9IHRoaXMuZXZlbnRzW25hbWVdOwogICAgICAgICAgICAgICAgaWYgKCFjYnMpIHsKICAgICAgICAgICAgICAgICAgICBjYnMgPSB0aGlzLmV2ZW50c1tuYW1lXSA9IFtdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY2JzLnB1c2goY2IpOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgZW1pdDogZnVuY3Rpb24gKG5hbWUsIGV2dCkgewogICAgICAgICAgICAgICAgZWFjaCh0aGlzLmV2ZW50c1tuYW1lXSwgZnVuY3Rpb24gKGNiKSB7CiAgICAgICAgICAgICAgICAgICAgY2IoZXZ0KTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdlcnJvcicpIHsKICAgICAgICAgICAgICAgICAgICAvL05vdyB0aGF0IHRoZSBlcnJvciBoYW5kbGVyIHdhcyB0cmlnZ2VyZWQsIHJlbW92ZQogICAgICAgICAgICAgICAgICAgIC8vdGhlIGxpc3RlbmVycywgc2luY2UgdGhpcyBicm9rZW4gTW9kdWxlIGluc3RhbmNlCiAgICAgICAgICAgICAgICAgICAgLy9jYW4gc3RheSBhcm91bmQgZm9yIGEgd2hpbGUgaW4gdGhlIHJlZ2lzdHJ5LgogICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmV2ZW50c1tuYW1lXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH07CgogICAgICAgIGZ1bmN0aW9uIGNhbGxHZXRNb2R1bGUoYXJncykgewogICAgICAgICAgICAvL1NraXAgbW9kdWxlcyBhbHJlYWR5IGRlZmluZWQuCiAgICAgICAgICAgIGlmICghaGFzUHJvcChkZWZpbmVkLCBhcmdzWzBdKSkgewogICAgICAgICAgICAgICAgZ2V0TW9kdWxlKG1ha2VNb2R1bGVNYXAoYXJnc1swXSwgbnVsbCwgdHJ1ZSkpLmluaXQoYXJnc1sxXSwgYXJnc1syXSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKG5vZGUsIGZ1bmMsIG5hbWUsIGllTmFtZSkgewogICAgICAgICAgICAvL0Zhdm9yIGRldGFjaEV2ZW50IGJlY2F1c2Ugb2YgSUU5CiAgICAgICAgICAgIC8vaXNzdWUsIHNlZSBhdHRhY2hFdmVudC9hZGRFdmVudExpc3RlbmVyIGNvbW1lbnQgZWxzZXdoZXJlCiAgICAgICAgICAgIC8vaW4gdGhpcyBmaWxlLgogICAgICAgICAgICBpZiAobm9kZS5kZXRhY2hFdmVudCAmJiAhaXNPcGVyYSkgewogICAgICAgICAgICAgICAgLy9Qcm9iYWJseSBJRS4gSWYgbm90IGl0IHdpbGwgdGhyb3cgYW4gZXJyb3IsIHdoaWNoIHdpbGwgYmUKICAgICAgICAgICAgICAgIC8vdXNlZnVsIHRvIGtub3cuCiAgICAgICAgICAgICAgICBpZiAoaWVOYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgbm9kZS5kZXRhY2hFdmVudChpZU5hbWUsIGZ1bmMpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgbm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKG5hbWUsIGZ1bmMsIGZhbHNlKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogR2l2ZW4gYW4gZXZlbnQgZnJvbSBhIHNjcmlwdCBub2RlLCBnZXQgdGhlIHJlcXVpcmVqcyBpbmZvIGZyb20gaXQsCiAgICAgICAgICogYW5kIHRoZW4gcmVtb3ZlcyB0aGUgZXZlbnQgbGlzdGVuZXJzIG9uIHRoZSBub2RlLgogICAgICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2dAogICAgICAgICAqIEByZXR1cm5zIHtPYmplY3R9CiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0U2NyaXB0RGF0YShldnQpIHsKICAgICAgICAgICAgLy9Vc2luZyBjdXJyZW50VGFyZ2V0IGluc3RlYWQgb2YgdGFyZ2V0IGZvciBGaXJlZm94IDIuMCdzIHNha2UuIE5vdAogICAgICAgICAgICAvL2FsbCBvbGQgYnJvd3NlcnMgd2lsbCBiZSBzdXBwb3J0ZWQsIGJ1dCB0aGlzIG9uZSB3YXMgZWFzeSBlbm91Z2gKICAgICAgICAgICAgLy90byBzdXBwb3J0IGFuZCBzdGlsbCBtYWtlcyBzZW5zZS4KICAgICAgICAgICAgdmFyIG5vZGUgPSBldnQuY3VycmVudFRhcmdldCB8fCBldnQuc3JjRWxlbWVudDsKCiAgICAgICAgICAgIC8vUmVtb3ZlIHRoZSBsaXN0ZW5lcnMgb25jZSBoZXJlLgogICAgICAgICAgICByZW1vdmVMaXN0ZW5lcihub2RlLCBjb250ZXh0Lm9uU2NyaXB0TG9hZCwgJ2xvYWQnLCAnb25yZWFkeXN0YXRlY2hhbmdlJyk7CiAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKG5vZGUsIGNvbnRleHQub25TY3JpcHRFcnJvciwgJ2Vycm9yJyk7CgogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgbm9kZTogbm9kZSwKICAgICAgICAgICAgICAgIGlkOiBub2RlICYmIG5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLXJlcXVpcmVtb2R1bGUnKQogICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gaW50YWtlRGVmaW5lcygpIHsKICAgICAgICAgICAgdmFyIGFyZ3M7CgogICAgICAgICAgICAvL0FueSBkZWZpbmVkIG1vZHVsZXMgaW4gdGhlIGdsb2JhbCBxdWV1ZSwgaW50YWtlIHRoZW0gbm93LgogICAgICAgICAgICB0YWtlR2xvYmFsUXVldWUoKTsKCiAgICAgICAgICAgIC8vTWFrZSBzdXJlIGFueSByZW1haW5pbmcgZGVmUXVldWUgaXRlbXMgZ2V0IHByb3Blcmx5IHByb2Nlc3NlZC4KICAgICAgICAgICAgd2hpbGUgKGRlZlF1ZXVlLmxlbmd0aCkgewogICAgICAgICAgICAgICAgYXJncyA9IGRlZlF1ZXVlLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICBpZiAoYXJnc1swXSA9PT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBvbkVycm9yKG1ha2VFcnJvcignbWlzbWF0Y2gnLCAnTWlzbWF0Y2hlZCBhbm9ueW1vdXMgZGVmaW5lKCkgbW9kdWxlOiAnICsKICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1thcmdzLmxlbmd0aCAtIDFdKSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIC8vYXJncyBhcmUgaWQsIGRlcHMsIGZhY3RvcnkuIFNob3VsZCBiZSBub3JtYWxpemVkIGJ5IHRoZQogICAgICAgICAgICAgICAgICAgIC8vZGVmaW5lKCkgZnVuY3Rpb24uCiAgICAgICAgICAgICAgICAgICAgY2FsbEdldE1vZHVsZShhcmdzKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBjb250ZXh0LmRlZlF1ZXVlTWFwID0ge307CiAgICAgICAgfQoKICAgICAgICBjb250ZXh0ID0gewogICAgICAgICAgICBjb25maWc6IGNvbmZpZywKICAgICAgICAgICAgY29udGV4dE5hbWU6IGNvbnRleHROYW1lLAogICAgICAgICAgICByZWdpc3RyeTogcmVnaXN0cnksCiAgICAgICAgICAgIGRlZmluZWQ6IGRlZmluZWQsCiAgICAgICAgICAgIHVybEZldGNoZWQ6IHVybEZldGNoZWQsCiAgICAgICAgICAgIGRlZlF1ZXVlOiBkZWZRdWV1ZSwKICAgICAgICAgICAgZGVmUXVldWVNYXA6IHt9LAogICAgICAgICAgICBNb2R1bGU6IE1vZHVsZSwKICAgICAgICAgICAgbWFrZU1vZHVsZU1hcDogbWFrZU1vZHVsZU1hcCwKICAgICAgICAgICAgbmV4dFRpY2s6IHJlcS5uZXh0VGljaywKICAgICAgICAgICAgb25FcnJvcjogb25FcnJvciwKCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBTZXQgYSBjb25maWd1cmF0aW9uIGZvciB0aGUgY29udGV4dC4KICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNmZyBjb25maWcgb2JqZWN0IHRvIGludGVncmF0ZS4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGNvbmZpZ3VyZTogZnVuY3Rpb24gKGNmZykgewogICAgICAgICAgICAgICAgLy9NYWtlIHN1cmUgdGhlIGJhc2VVcmwgZW5kcyBpbiBhIHNsYXNoLgogICAgICAgICAgICAgICAgaWYgKGNmZy5iYXNlVXJsKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGNmZy5iYXNlVXJsLmNoYXJBdChjZmcuYmFzZVVybC5sZW5ndGggLSAxKSAhPT0gJy8nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNmZy5iYXNlVXJsICs9ICcvJzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gQ29udmVydCBvbGQgc3R5bGUgdXJsQXJncyBzdHJpbmcgdG8gYSBmdW5jdGlvbi4KICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY2ZnLnVybEFyZ3MgPT09ICdzdHJpbmcnKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHVybEFyZ3MgPSBjZmcudXJsQXJnczsKICAgICAgICAgICAgICAgICAgICBjZmcudXJsQXJncyA9IGZ1bmN0aW9uKGlkLCB1cmwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh1cmwuaW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICcmJykgKyB1cmxBcmdzOwogICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy9TYXZlIG9mZiB0aGUgcGF0aHMgc2luY2UgdGhleSByZXF1aXJlIHNwZWNpYWwgcHJvY2Vzc2luZywKICAgICAgICAgICAgICAgIC8vdGhleSBhcmUgYWRkaXRpdmUuCiAgICAgICAgICAgICAgICB2YXIgc2hpbSA9IGNvbmZpZy5zaGltLAogICAgICAgICAgICAgICAgICAgIG9ianMgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhzOiB0cnVlLAogICAgICAgICAgICAgICAgICAgICAgICBidW5kbGVzOiB0cnVlLAogICAgICAgICAgICAgICAgICAgICAgICBjb25maWc6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgIG1hcDogdHJ1ZQogICAgICAgICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgICAgZWFjaFByb3AoY2ZnLCBmdW5jdGlvbiAodmFsdWUsIHByb3ApIHsKICAgICAgICAgICAgICAgICAgICBpZiAob2Jqc1twcm9wXSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbmZpZ1twcm9wXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnW3Byb3BdID0ge307CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgbWl4aW4oY29uZmlnW3Byb3BdLCB2YWx1ZSwgdHJ1ZSwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnW3Byb3BdID0gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgLy9SZXZlcnNlIG1hcCB0aGUgYnVuZGxlcwogICAgICAgICAgICAgICAgaWYgKGNmZy5idW5kbGVzKSB7CiAgICAgICAgICAgICAgICAgICAgZWFjaFByb3AoY2ZnLmJ1bmRsZXMsIGZ1bmN0aW9uICh2YWx1ZSwgcHJvcCkgewogICAgICAgICAgICAgICAgICAgICAgICBlYWNoKHZhbHVlLCBmdW5jdGlvbiAodikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHYgIT09IHByb3ApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidW5kbGVzTWFwW3ZdID0gcHJvcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy9NZXJnZSBzaGltCiAgICAgICAgICAgICAgICBpZiAoY2ZnLnNoaW0pIHsKICAgICAgICAgICAgICAgICAgICBlYWNoUHJvcChjZmcuc2hpbSwgZnVuY3Rpb24gKHZhbHVlLCBpZCkgewogICAgICAgICAgICAgICAgICAgICAgICAvL05vcm1hbGl6ZSB0aGUgc3RydWN0dXJlCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0FycmF5KHZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwczogdmFsdWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh2YWx1ZS5leHBvcnRzIHx8IHZhbHVlLmluaXQpICYmICF2YWx1ZS5leHBvcnRzRm4pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLmV4cG9ydHNGbiA9IGNvbnRleHQubWFrZVNoaW1FeHBvcnRzKHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBzaGltW2lkXSA9IHZhbHVlOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIGNvbmZpZy5zaGltID0gc2hpbTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvL0FkanVzdCBwYWNrYWdlcyBpZiBuZWNlc3NhcnkuCiAgICAgICAgICAgICAgICBpZiAoY2ZnLnBhY2thZ2VzKSB7CiAgICAgICAgICAgICAgICAgICAgZWFjaChjZmcucGFja2FnZXMsIGZ1bmN0aW9uIChwa2dPYmopIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxvY2F0aW9uLCBuYW1lOwoKICAgICAgICAgICAgICAgICAgICAgICAgcGtnT2JqID0gdHlwZW9mIHBrZ09iaiA9PT0gJ3N0cmluZycgPyB7bmFtZTogcGtnT2JqfSA6IHBrZ09iajsKCiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBwa2dPYmoubmFtZTsKICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24gPSBwa2dPYmoubG9jYXRpb247CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb2NhdGlvbikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLnBhdGhzW25hbWVdID0gcGtnT2JqLmxvY2F0aW9uOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvL1NhdmUgcG9pbnRlciB0byBtYWluIG1vZHVsZSBJRCBmb3IgcGtnIG5hbWUuCiAgICAgICAgICAgICAgICAgICAgICAgIC8vUmVtb3ZlIGxlYWRpbmcgZG90IGluIG1haW4sIHNvIG1haW4gcGF0aHMgYXJlIG5vcm1hbGl6ZWQsCiAgICAgICAgICAgICAgICAgICAgICAgIC8vYW5kIHJlbW92ZSBhbnkgdHJhaWxpbmcgLmpzLCBzaW5jZSBkaWZmZXJlbnQgcGFja2FnZQogICAgICAgICAgICAgICAgICAgICAgICAvL2VudnMgaGF2ZSBkaWZmZXJlbnQgY29udmVudGlvbnM6IHNvbWUgdXNlIGEgbW9kdWxlIG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIC8vc29tZSB1c2UgYSBmaWxlIG5hbWUuCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5wa2dzW25hbWVdID0gcGtnT2JqLm5hbWUgKyAnLycgKyAocGtnT2JqLm1haW4gfHwgJ21haW4nKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoY3VyckRpclJlZ0V4cCwgJycpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShqc1N1ZmZpeFJlZ0V4cCwgJycpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vSWYgdGhlcmUgYXJlIGFueSAid2FpdGluZyB0byBleGVjdXRlIiBtb2R1bGVzIGluIHRoZSByZWdpc3RyeSwKICAgICAgICAgICAgICAgIC8vdXBkYXRlIHRoZSBtYXBzIGZvciB0aGVtLCBzaW5jZSB0aGVpciBpbmZvLCBsaWtlIFVSTHMgdG8gbG9hZCwKICAgICAgICAgICAgICAgIC8vbWF5IGhhdmUgY2hhbmdlZC4KICAgICAgICAgICAgICAgIGVhY2hQcm9wKHJlZ2lzdHJ5LCBmdW5jdGlvbiAobW9kLCBpZCkgewogICAgICAgICAgICAgICAgICAgIC8vSWYgbW9kdWxlIGFscmVhZHkgaGFzIGluaXQgY2FsbGVkLCBzaW5jZSBpdCBpcyB0b28KICAgICAgICAgICAgICAgICAgICAvL2xhdGUgdG8gbW9kaWZ5IHRoZW0sIGFuZCBpZ25vcmUgdW5ub3JtYWxpemVkIG9uZXMKICAgICAgICAgICAgICAgICAgICAvL3NpbmNlIHRoZXkgYXJlIHRyYW5zaWVudC4KICAgICAgICAgICAgICAgICAgICBpZiAoIW1vZC5pbml0ZWQgJiYgIW1vZC5tYXAudW5ub3JtYWxpemVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG1vZC5tYXAgPSBtYWtlTW9kdWxlTWFwKGlkLCBudWxsLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAvL0lmIGEgZGVwcyBhcnJheSBvciBhIGNvbmZpZyBjYWxsYmFjayBpcyBzcGVjaWZpZWQsIHRoZW4gY2FsbAogICAgICAgICAgICAgICAgLy9yZXF1aXJlIHdpdGggdGhvc2UgYXJncy4gVGhpcyBpcyB1c2VmdWwgd2hlbiByZXF1aXJlIGlzIGRlZmluZWQgYXMgYQogICAgICAgICAgICAgICAgLy9jb25maWcgb2JqZWN0IGJlZm9yZSByZXF1aXJlLmpzIGlzIGxvYWRlZC4KICAgICAgICAgICAgICAgIGlmIChjZmcuZGVwcyB8fCBjZmcuY2FsbGJhY2spIHsKICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcXVpcmUoY2ZnLmRlcHMgfHwgW10sIGNmZy5jYWxsYmFjayk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBtYWtlU2hpbUV4cG9ydHM6IGZ1bmN0aW9uICh2YWx1ZSkgewogICAgICAgICAgICAgICAgZnVuY3Rpb24gZm4oKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHJldDsKICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUuaW5pdCkgewogICAgICAgICAgICAgICAgICAgICAgICByZXQgPSB2YWx1ZS5pbml0LmFwcGx5KGdsb2JhbCwgYXJndW1lbnRzKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldCB8fCAodmFsdWUuZXhwb3J0cyAmJiBnZXRHbG9iYWwodmFsdWUuZXhwb3J0cykpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIGZuOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgbWFrZVJlcXVpcmU6IGZ1bmN0aW9uIChyZWxNYXAsIG9wdGlvbnMpIHsKICAgICAgICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OwoKICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGxvY2FsUmVxdWlyZShkZXBzLCBjYWxsYmFjaywgZXJyYmFjaykgewogICAgICAgICAgICAgICAgICAgIHZhciBpZCwgbWFwLCByZXF1aXJlTW9kOwoKICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5lbmFibGVCdWlsZENhbGxiYWNrICYmIGNhbGxiYWNrICYmIGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLl9fcmVxdWlyZUpzQnVpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkZXBzID09PSAnc3RyaW5nJykgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihjYWxsYmFjaykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vSW52YWxpZCBjYWxsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb25FcnJvcihtYWtlRXJyb3IoJ3JlcXVpcmVhcmdzJywgJ0ludmFsaWQgcmVxdWlyZSBjYWxsJyksIGVycmJhY2spOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvL0lmIHJlcXVpcmV8ZXhwb3J0c3xtb2R1bGUgYXJlIHJlcXVlc3RlZCwgZ2V0IHRoZQogICAgICAgICAgICAgICAgICAgICAgICAvL3ZhbHVlIGZvciB0aGVtIGZyb20gdGhlIHNwZWNpYWwgaGFuZGxlcnMuIENhdmVhdDoKICAgICAgICAgICAgICAgICAgICAgICAgLy90aGlzIG9ubHkgd29ya3Mgd2hpbGUgbW9kdWxlIGlzIGJlaW5nIGRlZmluZWQuCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWxNYXAgJiYgaGFzUHJvcChoYW5kbGVycywgZGVwcykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGVyc1tkZXBzXShyZWdpc3RyeVtyZWxNYXAuaWRdKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy9TeW5jaHJvbm91cyBhY2Nlc3MgdG8gb25lIG1vZHVsZS4gSWYgcmVxdWlyZS5nZXQgaXMKICAgICAgICAgICAgICAgICAgICAgICAgLy9hdmFpbGFibGUgKGFzIGluIHRoZSBOb2RlIGFkYXB0ZXIpLCBwcmVmZXIgdGhhdC4KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcS5nZXQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXEuZ2V0KGNvbnRleHQsIGRlcHMsIHJlbE1hcCwgbG9jYWxSZXF1aXJlKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy9Ob3JtYWxpemUgbW9kdWxlIG5hbWUsIGlmIGl0IGNvbnRhaW5zIC4gb3IgLi4KICAgICAgICAgICAgICAgICAgICAgICAgbWFwID0gbWFrZU1vZHVsZU1hcChkZXBzLCByZWxNYXAsIGZhbHNlLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWQgPSBtYXAuaWQ7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc1Byb3AoZGVmaW5lZCwgaWQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb25FcnJvcihtYWtlRXJyb3IoJ25vdGxvYWRlZCcsICdNb2R1bGUgbmFtZSAiJyArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIiBoYXMgbm90IGJlZW4gbG9hZGVkIHlldCBmb3IgY29udGV4dDogJyArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0TmFtZSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVsTWFwID8gJycgOiAnLiBVc2UgcmVxdWlyZShbXSknKSkpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkZWZpbmVkW2lkXTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIC8vR3JhYiBkZWZpbmVzIHdhaXRpbmcgaW4gdGhlIGdsb2JhbCBxdWV1ZS4KICAgICAgICAgICAgICAgICAgICBpbnRha2VEZWZpbmVzKCk7CgogICAgICAgICAgICAgICAgICAgIC8vTWFyayBhbGwgdGhlIGRlcGVuZGVuY2llcyBhcyBuZWVkaW5nIHRvIGJlIGxvYWRlZC4KICAgICAgICAgICAgICAgICAgICBjb250ZXh0Lm5leHRUaWNrKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy9Tb21lIGRlZmluZXMgY291bGQgaGF2ZSBiZWVuIGFkZGVkIHNpbmNlIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAvL3JlcXVpcmUgY2FsbCwgY29sbGVjdCB0aGVtLgogICAgICAgICAgICAgICAgICAgICAgICBpbnRha2VEZWZpbmVzKCk7CgogICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlTW9kID0gZ2V0TW9kdWxlKG1ha2VNb2R1bGVNYXAobnVsbCwgcmVsTWFwKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAvL1N0b3JlIGlmIG1hcCBjb25maWcgc2hvdWxkIGJlIGFwcGxpZWQgdG8gdGhpcyByZXF1aXJlCiAgICAgICAgICAgICAgICAgICAgICAgIC8vY2FsbCBmb3IgZGVwZW5kZW5jaWVzLgogICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlTW9kLnNraXBNYXAgPSBvcHRpb25zLnNraXBNYXA7CgogICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlTW9kLmluaXQoZGVwcywgY2FsbGJhY2ssIGVycmJhY2ssIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgICAgICAgICBjaGVja0xvYWRlZCgpOwogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gbG9jYWxSZXF1aXJlOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIG1peGluKGxvY2FsUmVxdWlyZSwgewogICAgICAgICAgICAgICAgICAgIGlzQnJvd3NlcjogaXNCcm93c2VyLAoKICAgICAgICAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgKiBDb252ZXJ0cyBhIG1vZHVsZSBuYW1lICsgLmV4dGVuc2lvbiBpbnRvIGFuIFVSTCBwYXRoLgogICAgICAgICAgICAgICAgICAgICAqICpSZXF1aXJlcyogdGhlIHVzZSBvZiBhIG1vZHVsZSBuYW1lLiBJdCBkb2VzIG5vdCBzdXBwb3J0IHVzaW5nCiAgICAgICAgICAgICAgICAgICAgICogcGxhaW4gVVJMcyBsaWtlIG5hbWVUb1VybC4KICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICB0b1VybDogZnVuY3Rpb24gKG1vZHVsZU5hbWVQbHVzRXh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9IG1vZHVsZU5hbWVQbHVzRXh0Lmxhc3RJbmRleE9mKCcuJyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWdtZW50ID0gbW9kdWxlTmFtZVBsdXNFeHQuc3BsaXQoJy8nKVswXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVsYXRpdmUgPSBzZWdtZW50ID09PSAnLicgfHwgc2VnbWVudCA9PT0gJy4uJzsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vSGF2ZSBhIGZpbGUgZXh0ZW5zaW9uIGFsaWFzLCBhbmQgaXQgaXMgbm90IHRoZQogICAgICAgICAgICAgICAgICAgICAgICAvL2RvdHMgZnJvbSBhIHJlbGF0aXZlIHBhdGguCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEgJiYgKCFpc1JlbGF0aXZlIHx8IGluZGV4ID4gMSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dCA9IG1vZHVsZU5hbWVQbHVzRXh0LnN1YnN0cmluZyhpbmRleCwgbW9kdWxlTmFtZVBsdXNFeHQubGVuZ3RoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZU5hbWVQbHVzRXh0ID0gbW9kdWxlTmFtZVBsdXNFeHQuc3Vic3RyaW5nKDAsIGluZGV4KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQubmFtZVRvVXJsKG5vcm1hbGl6ZShtb2R1bGVOYW1lUGx1c0V4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsTWFwICYmIHJlbE1hcC5pZCwgdHJ1ZSksIGV4dCwgIHRydWUpOwogICAgICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgICAgIGRlZmluZWQ6IGZ1bmN0aW9uIChpZCkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFzUHJvcChkZWZpbmVkLCBtYWtlTW9kdWxlTWFwKGlkLCByZWxNYXAsIGZhbHNlLCB0cnVlKS5pZCk7CiAgICAgICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkOiBmdW5jdGlvbiAoaWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWQgPSBtYWtlTW9kdWxlTWFwKGlkLCByZWxNYXAsIGZhbHNlLCB0cnVlKS5pZDsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhc1Byb3AoZGVmaW5lZCwgaWQpIHx8IGhhc1Byb3AocmVnaXN0cnksIGlkKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAvL09ubHkgYWxsb3cgdW5kZWYgb24gdG9wIGxldmVsIHJlcXVpcmUgY2FsbHMKICAgICAgICAgICAgICAgIGlmICghcmVsTWFwKSB7CiAgICAgICAgICAgICAgICAgICAgbG9jYWxSZXF1aXJlLnVuZGVmID0gZnVuY3Rpb24gKGlkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vQmluZCBhbnkgd2FpdGluZyBkZWZpbmUoKSBjYWxscyB0byB0aGlzIGNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgIC8vZml4IGZvciAjNDA4CiAgICAgICAgICAgICAgICAgICAgICAgIHRha2VHbG9iYWxRdWV1ZSgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hcCA9IG1ha2VNb2R1bGVNYXAoaWQsIHJlbE1hcCwgdHJ1ZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2QgPSBnZXRPd24ocmVnaXN0cnksIGlkKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIG1vZC51bmRlZmVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlU2NyaXB0KGlkKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBkZWZpbmVkW2lkXTsKICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHVybEZldGNoZWRbbWFwLnVybF07CiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB1bmRlZkV2ZW50c1tpZF07CgogICAgICAgICAgICAgICAgICAgICAgICAvL0NsZWFuIHF1ZXVlZCBkZWZpbmVzIHRvby4gR28gYmFja3dhcmRzCiAgICAgICAgICAgICAgICAgICAgICAgIC8vaW4gYXJyYXkgc28gdGhhdCB0aGUgc3BsaWNlcyBkbyBub3QKICAgICAgICAgICAgICAgICAgICAgICAgLy9tZXNzIHVwIHRoZSBpdGVyYXRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgIGVhY2hSZXZlcnNlKGRlZlF1ZXVlLCBmdW5jdGlvbihhcmdzLCBpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJnc1swXSA9PT0gaWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZRdWV1ZS5zcGxpY2UoaSwgMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgY29udGV4dC5kZWZRdWV1ZU1hcFtpZF07CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0hvbGQgb24gdG8gbGlzdGVuZXJzIGluIGNhc2UgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL21vZHVsZSB3aWxsIGJlIGF0dGVtcHRlZCB0byBiZSByZWxvYWRlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy91c2luZyBhIGRpZmZlcmVudCBjb25maWcuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9kLmV2ZW50cy5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZFdmVudHNbaWRdID0gbW9kLmV2ZW50czsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhblJlZ2lzdHJ5KGlkKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIGxvY2FsUmVxdWlyZTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDYWxsZWQgdG8gZW5hYmxlIGEgbW9kdWxlIGlmIGl0IGlzIHN0aWxsIGluIHRoZSByZWdpc3RyeQogICAgICAgICAgICAgKiBhd2FpdGluZyBlbmFibGVtZW50LiBBIHNlY29uZCBhcmcsIHBhcmVudCwgdGhlIHBhcmVudCBtb2R1bGUsCiAgICAgICAgICAgICAqIGlzIHBhc3NlZCBpbiBmb3IgY29udGV4dCwgd2hlbiB0aGlzIG1ldGhvZCBpcyBvdmVycmlkZGVuIGJ5CiAgICAgICAgICAgICAqIHRoZSBvcHRpbWl6ZXIuIE5vdCBzaG93biBoZXJlIHRvIGtlZXAgY29kZSBjb21wYWN0LgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZW5hYmxlOiBmdW5jdGlvbiAoZGVwTWFwKSB7CiAgICAgICAgICAgICAgICB2YXIgbW9kID0gZ2V0T3duKHJlZ2lzdHJ5LCBkZXBNYXAuaWQpOwogICAgICAgICAgICAgICAgaWYgKG1vZCkgewogICAgICAgICAgICAgICAgICAgIGdldE1vZHVsZShkZXBNYXApLmVuYWJsZSgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAoKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIEludGVybmFsIG1ldGhvZCB1c2VkIGJ5IGVudmlyb25tZW50IGFkYXB0ZXJzIHRvIGNvbXBsZXRlIGEgbG9hZCBldmVudC4KICAgICAgICAgICAgICogQSBsb2FkIGV2ZW50IGNvdWxkIGJlIGEgc2NyaXB0IGxvYWQgb3IganVzdCBhIGxvYWQgcGFzcyBmcm9tIGEgc3luY2hyb25vdXMKICAgICAgICAgICAgICogbG9hZCBjYWxsLgogICAgICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gbW9kdWxlTmFtZSB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlIHRvIHBvdGVudGlhbGx5IGNvbXBsZXRlLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgY29tcGxldGVMb2FkOiBmdW5jdGlvbiAobW9kdWxlTmFtZSkgewogICAgICAgICAgICAgICAgdmFyIGZvdW5kLCBhcmdzLCBtb2QsCiAgICAgICAgICAgICAgICAgICAgc2hpbSA9IGdldE93bihjb25maWcuc2hpbSwgbW9kdWxlTmFtZSkgfHwge30sCiAgICAgICAgICAgICAgICAgICAgc2hFeHBvcnRzID0gc2hpbS5leHBvcnRzOwoKICAgICAgICAgICAgICAgIHRha2VHbG9iYWxRdWV1ZSgpOwoKICAgICAgICAgICAgICAgIHdoaWxlIChkZWZRdWV1ZS5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICBhcmdzID0gZGVmUXVldWUuc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICBpZiAoYXJnc1swXSA9PT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICBhcmdzWzBdID0gbW9kdWxlTmFtZTsKICAgICAgICAgICAgICAgICAgICAgICAgLy9JZiBhbHJlYWR5IGZvdW5kIGFuIGFub255bW91cyBtb2R1bGUgYW5kIGJvdW5kIGl0CiAgICAgICAgICAgICAgICAgICAgICAgIC8vdG8gdGhpcyBuYW1lLCB0aGVuIHRoaXMgaXMgc29tZSBvdGhlciBhbm9uIG1vZHVsZQogICAgICAgICAgICAgICAgICAgICAgICAvL3dhaXRpbmcgZm9yIGl0cyBjb21wbGV0ZUxvYWQgdG8gZmlyZS4KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhcmdzWzBdID09PSBtb2R1bGVOYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vRm91bmQgbWF0Y2hpbmcgZGVmaW5lIGNhbGwgZm9yIHRoaXMgc2NyaXB0IQogICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBjYWxsR2V0TW9kdWxlKGFyZ3MpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY29udGV4dC5kZWZRdWV1ZU1hcCA9IHt9OwoKICAgICAgICAgICAgICAgIC8vRG8gdGhpcyBhZnRlciB0aGUgY3ljbGUgb2YgY2FsbEdldE1vZHVsZSBpbiBjYXNlIHRoZSByZXN1bHQKICAgICAgICAgICAgICAgIC8vb2YgdGhvc2UgY2FsbHMvaW5pdCBjYWxscyBjaGFuZ2VzIHRoZSByZWdpc3RyeS4KICAgICAgICAgICAgICAgIG1vZCA9IGdldE93bihyZWdpc3RyeSwgbW9kdWxlTmFtZSk7CgogICAgICAgICAgICAgICAgaWYgKCFmb3VuZCAmJiAhaGFzUHJvcChkZWZpbmVkLCBtb2R1bGVOYW1lKSAmJiBtb2QgJiYgIW1vZC5pbml0ZWQpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnLmVuZm9yY2VEZWZpbmUgJiYgKCFzaEV4cG9ydHMgfHwgIWdldEdsb2JhbChzaEV4cG9ydHMpKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzUGF0aEZhbGxiYWNrKG1vZHVsZU5hbWUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb25FcnJvcihtYWtlRXJyb3IoJ25vZGVmaW5lJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ05vIGRlZmluZSBjYWxsIGZvciAnICsgbW9kdWxlTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21vZHVsZU5hbWVdKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAvL0Egc2NyaXB0IHRoYXQgZG9lcyBub3QgY2FsbCBkZWZpbmUoKSwgc28ganVzdCBzaW11bGF0ZQogICAgICAgICAgICAgICAgICAgICAgICAvL3RoZSBjYWxsIGZvciBpdC4KICAgICAgICAgICAgICAgICAgICAgICAgY2FsbEdldE1vZHVsZShbbW9kdWxlTmFtZSwgKHNoaW0uZGVwcyB8fCBbXSksIHNoaW0uZXhwb3J0c0ZuXSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGNoZWNrTG9hZGVkKCk7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ29udmVydHMgYSBtb2R1bGUgbmFtZSB0byBhIGZpbGUgcGF0aC4gU3VwcG9ydHMgY2FzZXMgd2hlcmUKICAgICAgICAgICAgICogbW9kdWxlTmFtZSBtYXkgYWN0dWFsbHkgYmUganVzdCBhbiBVUkwuCiAgICAgICAgICAgICAqIE5vdGUgdGhhdCBpdCAqKmRvZXMgbm90KiogY2FsbCBub3JtYWxpemUgb24gdGhlIG1vZHVsZU5hbWUsCiAgICAgICAgICAgICAqIGl0IGlzIGFzc3VtZWQgdG8gaGF2ZSBhbHJlYWR5IGJlZW4gbm9ybWFsaXplZC4gVGhpcyBpcyBhbgogICAgICAgICAgICAgKiBpbnRlcm5hbCBBUEksIG5vdCBhIHB1YmxpYyBvbmUuIFVzZSB0b1VybCBmb3IgdGhlIHB1YmxpYyBBUEkuCiAgICAgICAgICAgICAqLwogICAgICAgICAgICBuYW1lVG9Vcmw6IGZ1bmN0aW9uIChtb2R1bGVOYW1lLCBleHQsIHNraXBFeHQpIHsKICAgICAgICAgICAgICAgIHZhciBwYXRocywgc3ltcywgaSwgcGFyZW50TW9kdWxlLCB1cmwsCiAgICAgICAgICAgICAgICAgICAgcGFyZW50UGF0aCwgYnVuZGxlSWQsCiAgICAgICAgICAgICAgICAgICAgcGtnTWFpbiA9IGdldE93bihjb25maWcucGtncywgbW9kdWxlTmFtZSk7CgogICAgICAgICAgICAgICAgaWYgKHBrZ01haW4pIHsKICAgICAgICAgICAgICAgICAgICBtb2R1bGVOYW1lID0gcGtnTWFpbjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBidW5kbGVJZCA9IGdldE93bihidW5kbGVzTWFwLCBtb2R1bGVOYW1lKTsKCiAgICAgICAgICAgICAgICBpZiAoYnVuZGxlSWQpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5uYW1lVG9VcmwoYnVuZGxlSWQsIGV4dCwgc2tpcEV4dCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy9JZiBhIGNvbG9uIGlzIGluIHRoZSBVUkwsIGl0IGluZGljYXRlcyBhIHByb3RvY29sIGlzIHVzZWQgYW5kIGl0IGlzIGp1c3QKICAgICAgICAgICAgICAgIC8vYW4gVVJMIHRvIGEgZmlsZSwgb3IgaWYgaXQgc3RhcnRzIHdpdGggYSBzbGFzaCwgY29udGFpbnMgYSBxdWVyeSBhcmcgKGkuZS4gPykKICAgICAgICAgICAgICAgIC8vb3IgZW5kcyB3aXRoIC5qcywgdGhlbiBhc3N1bWUgdGhlIHVzZXIgbWVhbnQgdG8gdXNlIGFuIHVybCBhbmQgbm90IGEgbW9kdWxlIGlkLgogICAgICAgICAgICAgICAgLy9UaGUgc2xhc2ggaXMgaW1wb3J0YW50IGZvciBwcm90b2NvbC1sZXNzIFVSTHMgYXMgd2VsbCBhcyBmdWxsIHBhdGhzLgogICAgICAgICAgICAgICAgaWYgKHJlcS5qc0V4dFJlZ0V4cC50ZXN0KG1vZHVsZU5hbWUpKSB7CiAgICAgICAgICAgICAgICAgICAgLy9KdXN0IGEgcGxhaW4gcGF0aCwgbm90IG1vZHVsZSBuYW1lIGxvb2t1cCwgc28ganVzdCByZXR1cm4gaXQuCiAgICAgICAgICAgICAgICAgICAgLy9BZGQgZXh0ZW5zaW9uIGlmIGl0IGlzIGluY2x1ZGVkLiBUaGlzIGlzIGEgYml0IHdvbmt5LCBvbmx5IG5vbi0uanMgdGhpbmdzIHBhc3MKICAgICAgICAgICAgICAgICAgICAvL2FuIGV4dGVuc2lvbiwgdGhpcyBtZXRob2QgcHJvYmFibHkgbmVlZHMgdG8gYmUgcmV3b3JrZWQuCiAgICAgICAgICAgICAgICAgICAgdXJsID0gbW9kdWxlTmFtZSArIChleHQgfHwgJycpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvL0EgbW9kdWxlIHRoYXQgbmVlZHMgdG8gYmUgY29udmVydGVkIHRvIGEgcGF0aC4KICAgICAgICAgICAgICAgICAgICBwYXRocyA9IGNvbmZpZy5wYXRoczsKCiAgICAgICAgICAgICAgICAgICAgc3ltcyA9IG1vZHVsZU5hbWUuc3BsaXQoJy8nKTsKICAgICAgICAgICAgICAgICAgICAvL0ZvciBlYWNoIG1vZHVsZSBuYW1lIHNlZ21lbnQsIHNlZSBpZiB0aGVyZSBpcyBhIHBhdGgKICAgICAgICAgICAgICAgICAgICAvL3JlZ2lzdGVyZWQgZm9yIGl0LiBTdGFydCB3aXRoIG1vc3Qgc3BlY2lmaWMgbmFtZQogICAgICAgICAgICAgICAgICAgIC8vYW5kIHdvcmsgdXAgZnJvbSBpdC4KICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSBzeW1zLmxlbmd0aDsgaSA+IDA7IGkgLT0gMSkgewogICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRNb2R1bGUgPSBzeW1zLnNsaWNlKDAsIGkpLmpvaW4oJy8nKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFBhdGggPSBnZXRPd24ocGF0aHMsIHBhcmVudE1vZHVsZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRQYXRoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0lmIGFuIGFycmF5LCBpdCBtZWFucyB0aGVyZSBhcmUgYSBmZXcgY2hvaWNlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vQ2hvb3NlIHRoZSBvbmUgdGhhdCBpcyBkZXNpcmVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNBcnJheShwYXJlbnRQYXRoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFBhdGggPSBwYXJlbnRQYXRoWzBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltcy5zcGxpY2UoMCwgaSwgcGFyZW50UGF0aCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgLy9Kb2luIHRoZSBwYXRoIHBhcnRzIHRvZ2V0aGVyLCB0aGVuIGZpZ3VyZSBvdXQgaWYgYmFzZVVybCBpcyBuZWVkZWQuCiAgICAgICAgICAgICAgICAgICAgdXJsID0gc3ltcy5qb2luKCcvJyk7CiAgICAgICAgICAgICAgICAgICAgdXJsICs9IChleHQgfHwgKC9eZGF0YVw6fF5ibG9iXDp8XD8vLnRlc3QodXJsKSB8fCBza2lwRXh0ID8gJycgOiAnLmpzJykpOwogICAgICAgICAgICAgICAgICAgIHVybCA9ICh1cmwuY2hhckF0KDApID09PSAnLycgfHwgdXJsLm1hdGNoKC9eW1x3XCtcLlwtXSs6LykgPyAnJyA6IGNvbmZpZy5iYXNlVXJsKSArIHVybDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gY29uZmlnLnVybEFyZ3MgJiYgIS9eYmxvYlw6Ly50ZXN0KHVybCkgPwogICAgICAgICAgICAgICAgICAgICAgIHVybCArIGNvbmZpZy51cmxBcmdzKG1vZHVsZU5hbWUsIHVybCkgOiB1cmw7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICAvL0RlbGVnYXRlcyB0byByZXEubG9hZC4gQnJva2VuIG91dCBhcyBhIHNlcGFyYXRlIGZ1bmN0aW9uIHRvCiAgICAgICAgICAgIC8vYWxsb3cgb3ZlcnJpZGluZyBpbiB0aGUgb3B0aW1pemVyLgogICAgICAgICAgICBsb2FkOiBmdW5jdGlvbiAoaWQsIHVybCkgewogICAgICAgICAgICAgICAgcmVxLmxvYWQoY29udGV4dCwgaWQsIHVybCk7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogRXhlY3V0ZXMgYSBtb2R1bGUgY2FsbGJhY2sgZnVuY3Rpb24uIEJyb2tlbiBvdXQgYXMgYSBzZXBhcmF0ZSBmdW5jdGlvbgogICAgICAgICAgICAgKiBzb2xlbHkgdG8gYWxsb3cgdGhlIGJ1aWxkIHN5c3RlbSB0byBzZXF1ZW5jZSB0aGUgZmlsZXMgaW4gdGhlIGJ1aWx0CiAgICAgICAgICAgICAqIGxheWVyIGluIHRoZSByaWdodCBzZXF1ZW5jZS4KICAgICAgICAgICAgICoKICAgICAgICAgICAgICogQHByaXZhdGUKICAgICAgICAgICAgICovCiAgICAgICAgICAgIGV4ZWNDYjogZnVuY3Rpb24gKG5hbWUsIGNhbGxiYWNrLCBhcmdzLCBleHBvcnRzKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkoZXhwb3J0cywgYXJncyk7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogY2FsbGJhY2sgZm9yIHNjcmlwdCBsb2FkcywgdXNlZCB0byBjaGVjayBzdGF0dXMgb2YgbG9hZGluZy4KICAgICAgICAgICAgICoKICAgICAgICAgICAgICogQHBhcmFtIHtFdmVudH0gZXZ0IHRoZSBldmVudCBmcm9tIHRoZSBicm93c2VyIGZvciB0aGUgc2NyaXB0CiAgICAgICAgICAgICAqIHRoYXQgd2FzIGxvYWRlZC4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIG9uU2NyaXB0TG9hZDogZnVuY3Rpb24gKGV2dCkgewogICAgICAgICAgICAgICAgLy9Vc2luZyBjdXJyZW50VGFyZ2V0IGluc3RlYWQgb2YgdGFyZ2V0IGZvciBGaXJlZm94IDIuMCdzIHNha2UuIE5vdAogICAgICAgICAgICAgICAgLy9hbGwgb2xkIGJyb3dzZXJzIHdpbGwgYmUgc3VwcG9ydGVkLCBidXQgdGhpcyBvbmUgd2FzIGVhc3kgZW5vdWdoCiAgICAgICAgICAgICAgICAvL3RvIHN1cHBvcnQgYW5kIHN0aWxsIG1ha2VzIHNlbnNlLgogICAgICAgICAgICAgICAgaWYgKGV2dC50eXBlID09PSAnbG9hZCcgfHwKICAgICAgICAgICAgICAgICAgICAgICAgKHJlYWR5UmVnRXhwLnRlc3QoKGV2dC5jdXJyZW50VGFyZ2V0IHx8IGV2dC5zcmNFbGVtZW50KS5yZWFkeVN0YXRlKSkpIHsKICAgICAgICAgICAgICAgICAgICAvL1Jlc2V0IGludGVyYWN0aXZlIHNjcmlwdCBzbyBhIHNjcmlwdCBub2RlIGlzIG5vdCBoZWxkIG9udG8gZm9yCiAgICAgICAgICAgICAgICAgICAgLy90byBsb25nLgogICAgICAgICAgICAgICAgICAgIGludGVyYWN0aXZlU2NyaXB0ID0gbnVsbDsKCiAgICAgICAgICAgICAgICAgICAgLy9QdWxsIG91dCB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlIGFuZCB0aGUgY29udGV4dC4KICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IGdldFNjcmlwdERhdGEoZXZ0KTsKICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmNvbXBsZXRlTG9hZChkYXRhLmlkKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDYWxsYmFjayBmb3Igc2NyaXB0IGVycm9ycy4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIG9uU2NyaXB0RXJyb3I6IGZ1bmN0aW9uIChldnQpIHsKICAgICAgICAgICAgICAgIHZhciBkYXRhID0gZ2V0U2NyaXB0RGF0YShldnQpOwogICAgICAgICAgICAgICAgaWYgKCFoYXNQYXRoRmFsbGJhY2soZGF0YS5pZCkpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgcGFyZW50cyA9IFtdOwogICAgICAgICAgICAgICAgICAgIGVhY2hQcm9wKHJlZ2lzdHJ5LCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrZXkuaW5kZXhPZignX0ByJykgIT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVhY2godmFsdWUuZGVwTWFwcywgZnVuY3Rpb24oZGVwTWFwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlcE1hcC5pZCA9PT0gZGF0YS5pZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRzLnB1c2goa2V5KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gb25FcnJvcihtYWtlRXJyb3IoJ3NjcmlwdGVycm9yJywgJ1NjcmlwdCBlcnJvciBmb3IgIicgKyBkYXRhLmlkICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhcmVudHMubGVuZ3RoID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyIsIG5lZWRlZCBieTogJyArIHBhcmVudHMuam9pbignLCAnKSA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICciJyksIGV2dCwgW2RhdGEuaWRdKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICBjb250ZXh0LnJlcXVpcmUgPSBjb250ZXh0Lm1ha2VSZXF1aXJlKCk7CiAgICAgICAgcmV0dXJuIGNvbnRleHQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBNYWluIGVudHJ5IHBvaW50LgogICAgICoKICAgICAqIElmIHRoZSBvbmx5IGFyZ3VtZW50IHRvIHJlcXVpcmUgaXMgYSBzdHJpbmcsIHRoZW4gdGhlIG1vZHVsZSB0aGF0CiAgICAgKiBpcyByZXByZXNlbnRlZCBieSB0aGF0IHN0cmluZyBpcyBmZXRjaGVkIGZvciB0aGUgYXBwcm9wcmlhdGUgY29udGV4dC4KICAgICAqCiAgICAgKiBJZiB0aGUgZmlyc3QgYXJndW1lbnQgaXMgYW4gYXJyYXksIHRoZW4gaXQgd2lsbCBiZSB0cmVhdGVkIGFzIGFuIGFycmF5CiAgICAgKiBvZiBkZXBlbmRlbmN5IHN0cmluZyBuYW1lcyB0byBmZXRjaC4gQW4gb3B0aW9uYWwgZnVuY3Rpb24gY2FsbGJhY2sgY2FuCiAgICAgKiBiZSBzcGVjaWZpZWQgdG8gZXhlY3V0ZSB3aGVuIGFsbCBvZiB0aG9zZSBkZXBlbmRlbmNpZXMgYXJlIGF2YWlsYWJsZS4KICAgICAqCiAgICAgKiBNYWtlIGEgbG9jYWwgcmVxIHZhcmlhYmxlIHRvIGhlbHAgQ2FqYSBjb21wbGlhbmNlIChpdCBhc3N1bWVzIHRoaW5ncwogICAgICogb24gYSByZXF1aXJlIHRoYXQgYXJlIG5vdCBzdGFuZGFyZGl6ZWQpLCBhbmQgdG8gZ2l2ZSBhIHNob3J0CiAgICAgKiBuYW1lIGZvciBtaW5pZmljYXRpb24vbG9jYWwgc2NvcGUgdXNlLgogICAgICovCiAgICByZXEgPSByZXF1aXJlanMgPSBmdW5jdGlvbiAoZGVwcywgY2FsbGJhY2ssIGVycmJhY2ssIG9wdGlvbmFsKSB7CgogICAgICAgIC8vRmluZCB0aGUgcmlnaHQgY29udGV4dCwgdXNlIGRlZmF1bHQKICAgICAgICB2YXIgY29udGV4dCwgY29uZmlnLAogICAgICAgICAgICBjb250ZXh0TmFtZSA9IGRlZkNvbnRleHROYW1lOwoKICAgICAgICAvLyBEZXRlcm1pbmUgaWYgaGF2ZSBjb25maWcgb2JqZWN0IGluIHRoZSBjYWxsLgogICAgICAgIGlmICghaXNBcnJheShkZXBzKSAmJiB0eXBlb2YgZGVwcyAhPT0gJ3N0cmluZycpIHsKICAgICAgICAgICAgLy8gZGVwcyBpcyBhIGNvbmZpZyBvYmplY3QKICAgICAgICAgICAgY29uZmlnID0gZGVwczsKICAgICAgICAgICAgaWYgKGlzQXJyYXkoY2FsbGJhY2spKSB7CiAgICAgICAgICAgICAgICAvLyBBZGp1c3QgYXJncyBpZiB0aGVyZSBhcmUgZGVwZW5kZW5jaWVzCiAgICAgICAgICAgICAgICBkZXBzID0gY2FsbGJhY2s7CiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGVycmJhY2s7CiAgICAgICAgICAgICAgICBlcnJiYWNrID0gb3B0aW9uYWw7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBkZXBzID0gW107CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChjb25maWcgJiYgY29uZmlnLmNvbnRleHQpIHsKICAgICAgICAgICAgY29udGV4dE5hbWUgPSBjb25maWcuY29udGV4dDsKICAgICAgICB9CgogICAgICAgIGNvbnRleHQgPSBnZXRPd24oY29udGV4dHMsIGNvbnRleHROYW1lKTsKICAgICAgICBpZiAoIWNvbnRleHQpIHsKICAgICAgICAgICAgY29udGV4dCA9IGNvbnRleHRzW2NvbnRleHROYW1lXSA9IHJlcS5zLm5ld0NvbnRleHQoY29udGV4dE5hbWUpOwogICAgICAgIH0KCiAgICAgICAgaWYgKGNvbmZpZykgewogICAgICAgICAgICBjb250ZXh0LmNvbmZpZ3VyZShjb25maWcpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGNvbnRleHQucmVxdWlyZShkZXBzLCBjYWxsYmFjaywgZXJyYmFjayk7CiAgICB9OwoKICAgIC8qKgogICAgICogU3VwcG9ydCByZXF1aXJlLmNvbmZpZygpIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGNvb3BlcmF0ZSB3aXRoIG90aGVyCiAgICAgKiBBTUQgbG9hZGVycyBvbiBnbG9iYWxseSBhZ3JlZWQgbmFtZXMuCiAgICAgKi8KICAgIHJlcS5jb25maWcgPSBmdW5jdGlvbiAoY29uZmlnKSB7CiAgICAgICAgcmV0dXJuIHJlcShjb25maWcpOwogICAgfTsKCiAgICAvKioKICAgICAqIEV4ZWN1dGUgc29tZXRoaW5nIGFmdGVyIHRoZSBjdXJyZW50IHRpY2sKICAgICAqIG9mIHRoZSBldmVudCBsb29wLiBPdmVycmlkZSBmb3Igb3RoZXIgZW52cwogICAgICogdGhhdCBoYXZlIGEgYmV0dGVyIHNvbHV0aW9uIHRoYW4gc2V0VGltZW91dC4KICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBmbiBmdW5jdGlvbiB0byBleGVjdXRlIGxhdGVyLgogICAgICovCiAgICByZXEubmV4dFRpY2sgPSB0eXBlb2Ygc2V0VGltZW91dCAhPT0gJ3VuZGVmaW5lZCcgPyBmdW5jdGlvbiAoZm4pIHsKICAgICAgICBzZXRUaW1lb3V0KGZuLCA0KTsKICAgIH0gOiBmdW5jdGlvbiAoZm4pIHsgZm4oKTsgfTsKCiAgICAvKioKICAgICAqIEV4cG9ydCByZXF1aXJlIGFzIGEgZ2xvYmFsLCBidXQgb25seSBpZiBpdCBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0LgogICAgICovCiAgICBpZiAoIXJlcXVpcmUpIHsKICAgICAgICByZXF1aXJlID0gcmVxOwogICAgfQoKICAgIHJlcS52ZXJzaW9uID0gdmVyc2lvbjsKCiAgICAvL1VzZWQgdG8gZmlsdGVyIG91dCBkZXBlbmRlbmNpZXMgdGhhdCBhcmUgYWxyZWFkeSBwYXRocy4KICAgIHJlcS5qc0V4dFJlZ0V4cCA9IC9eXC98OnxcP3xcLmpzJC87CiAgICByZXEuaXNCcm93c2VyID0gaXNCcm93c2VyOwogICAgcyA9IHJlcS5zID0gewogICAgICAgIGNvbnRleHRzOiBjb250ZXh0cywKICAgICAgICBuZXdDb250ZXh0OiBuZXdDb250ZXh0CiAgICB9OwoKICAgIC8vQ3JlYXRlIGRlZmF1bHQgY29udGV4dC4KICAgIHJlcSh7fSk7CgogICAgLy9FeHBvcnRzIHNvbWUgY29udGV4dC1zZW5zaXRpdmUgbWV0aG9kcyBvbiBnbG9iYWwgcmVxdWlyZS4KICAgIGVhY2goWwogICAgICAgICd0b1VybCcsCiAgICAgICAgJ3VuZGVmJywKICAgICAgICAnZGVmaW5lZCcsCiAgICAgICAgJ3NwZWNpZmllZCcKICAgIF0sIGZ1bmN0aW9uIChwcm9wKSB7CiAgICAgICAgLy9SZWZlcmVuY2UgZnJvbSBjb250ZXh0cyBpbnN0ZWFkIG9mIGVhcmx5IGJpbmRpbmcgdG8gZGVmYXVsdCBjb250ZXh0LAogICAgICAgIC8vc28gdGhhdCBkdXJpbmcgYnVpbGRzLCB0aGUgbGF0ZXN0IGluc3RhbmNlIG9mIHRoZSBkZWZhdWx0IGNvbnRleHQKICAgICAgICAvL3dpdGggaXRzIGNvbmZpZyBnZXRzIHVzZWQuCiAgICAgICAgcmVxW3Byb3BdID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgY3R4ID0gY29udGV4dHNbZGVmQ29udGV4dE5hbWVdOwogICAgICAgICAgICByZXR1cm4gY3R4LnJlcXVpcmVbcHJvcF0uYXBwbHkoY3R4LCBhcmd1bWVudHMpOwogICAgICAgIH07CiAgICB9KTsKCiAgICBpZiAoaXNCcm93c2VyKSB7CiAgICAgICAgaGVhZCA9IHMuaGVhZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07CiAgICAgICAgLy9JZiBCQVNFIHRhZyBpcyBpbiBwbGF5LCB1c2luZyBhcHBlbmRDaGlsZCBpcyBhIHByb2JsZW0gZm9yIElFNi4KICAgICAgICAvL1doZW4gdGhhdCBicm93c2VyIGRpZXMsIHRoaXMgY2FuIGJlIHJlbW92ZWQuIERldGFpbHMgaW4gdGhpcyBqUXVlcnkgYnVnOgogICAgICAgIC8vaHR0cDovL2Rldi5qcXVlcnkuY29tL3RpY2tldC8yNzA5CiAgICAgICAgYmFzZUVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYmFzZScpWzBdOwogICAgICAgIGlmIChiYXNlRWxlbWVudCkgewogICAgICAgICAgICBoZWFkID0gcy5oZWFkID0gYmFzZUVsZW1lbnQucGFyZW50Tm9kZTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBBbnkgZXJyb3JzIHRoYXQgcmVxdWlyZSBleHBsaWNpdGx5IGdlbmVyYXRlcyB3aWxsIGJlIHBhc3NlZCB0byB0aGlzCiAgICAgKiBmdW5jdGlvbi4gSW50ZXJjZXB0L292ZXJyaWRlIGl0IGlmIHlvdSB3YW50IGN1c3RvbSBlcnJvciBoYW5kbGluZy4KICAgICAqIEBwYXJhbSB7RXJyb3J9IGVyciB0aGUgZXJyb3Igb2JqZWN0LgogICAgICovCiAgICByZXEub25FcnJvciA9IGRlZmF1bHRPbkVycm9yOwoKICAgIC8qKgogICAgICogQ3JlYXRlcyB0aGUgbm9kZSBmb3IgdGhlIGxvYWQgY29tbWFuZC4gT25seSB1c2VkIGluIGJyb3dzZXIgZW52cy4KICAgICAqLwogICAgcmVxLmNyZWF0ZU5vZGUgPSBmdW5jdGlvbiAoY29uZmlnLCBtb2R1bGVOYW1lLCB1cmwpIHsKICAgICAgICB2YXIgbm9kZSA9IGNvbmZpZy54aHRtbCA/CiAgICAgICAgICAgICAgICBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwnLCAnaHRtbDpzY3JpcHQnKSA6CiAgICAgICAgICAgICAgICBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsKICAgICAgICBub2RlLnR5cGUgPSBjb25maWcuc2NyaXB0VHlwZSB8fCAndGV4dC9qYXZhc2NyaXB0JzsKICAgICAgICBub2RlLmNoYXJzZXQgPSAndXRmLTgnOwogICAgICAgIG5vZGUuYXN5bmMgPSB0cnVlOwogICAgICAgIHJldHVybiBub2RlOwogICAgfTsKCiAgICAvKioKICAgICAqIERvZXMgdGhlIHJlcXVlc3QgdG8gbG9hZCBhIG1vZHVsZSBmb3IgdGhlIGJyb3dzZXIgY2FzZS4KICAgICAqIE1ha2UgdGhpcyBhIHNlcGFyYXRlIGZ1bmN0aW9uIHRvIGFsbG93IG90aGVyIGVudmlyb25tZW50cwogICAgICogdG8gb3ZlcnJpZGUgaXQuCiAgICAgKgogICAgICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHQgdGhlIHJlcXVpcmUgY29udGV4dCB0byBmaW5kIHN0YXRlLgogICAgICogQHBhcmFtIHtTdHJpbmd9IG1vZHVsZU5hbWUgdGhlIG5hbWUgb2YgdGhlIG1vZHVsZS4KICAgICAqIEBwYXJhbSB7T2JqZWN0fSB1cmwgdGhlIFVSTCB0byB0aGUgbW9kdWxlLgogICAgICovCiAgICByZXEubG9hZCA9IGZ1bmN0aW9uIChjb250ZXh0LCBtb2R1bGVOYW1lLCB1cmwpIHsKICAgICAgICB2YXIgY29uZmlnID0gKGNvbnRleHQgJiYgY29udGV4dC5jb25maWcpIHx8IHt9LAogICAgICAgICAgICBub2RlOwogICAgICAgIGlmIChpc0Jyb3dzZXIpIHsKICAgICAgICAgICAgLy9JbiB0aGUgYnJvd3NlciBzbyB1c2UgYSBzY3JpcHQgdGFnCiAgICAgICAgICAgIG5vZGUgPSByZXEuY3JlYXRlTm9kZShjb25maWcsIG1vZHVsZU5hbWUsIHVybCk7CgogICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZSgnZGF0YS1yZXF1aXJlY29udGV4dCcsIGNvbnRleHQuY29udGV4dE5hbWUpOwogICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZSgnZGF0YS1yZXF1aXJlbW9kdWxlJywgbW9kdWxlTmFtZSk7CgogICAgICAgICAgICAvL1NldCB1cCBsb2FkIGxpc3RlbmVyLiBUZXN0IGF0dGFjaEV2ZW50IGZpcnN0IGJlY2F1c2UgSUU5IGhhcwogICAgICAgICAgICAvL2Egc3VidGxlIGlzc3VlIGluIGl0cyBhZGRFdmVudExpc3RlbmVyIGFuZCBzY3JpcHQgb25sb2FkIGZpcmluZ3MKICAgICAgICAgICAgLy90aGF0IGRvIG5vdCBtYXRjaCB0aGUgYmVoYXZpb3Igb2YgYWxsIG90aGVyIGJyb3dzZXJzIHdpdGgKICAgICAgICAgICAgLy9hZGRFdmVudExpc3RlbmVyIHN1cHBvcnQsIHdoaWNoIGZpcmUgdGhlIG9ubG9hZCBldmVudCBmb3IgYQogICAgICAgICAgICAvL3NjcmlwdCByaWdodCBhZnRlciB0aGUgc2NyaXB0IGV4ZWN1dGlvbi4gU2VlOgogICAgICAgICAgICAvL2h0dHBzOi8vY29ubmVjdC5taWNyb3NvZnQuY29tL0lFL2ZlZWRiYWNrL2RldGFpbHMvNjQ4MDU3L3NjcmlwdC1vbmxvYWQtZXZlbnQtaXMtbm90LWZpcmVkLWltbWVkaWF0ZWx5LWFmdGVyLXNjcmlwdC1leGVjdXRpb24KICAgICAgICAgICAgLy9VTkZPUlRVTkFURUxZIE9wZXJhIGltcGxlbWVudHMgYXR0YWNoRXZlbnQgYnV0IGRvZXMgbm90IGZvbGxvdyB0aGUgc2NyaXB0CiAgICAgICAgICAgIC8vc2NyaXB0IGV4ZWN1dGlvbiBtb2RlLgogICAgICAgICAgICBpZiAobm9kZS5hdHRhY2hFdmVudCAmJgogICAgICAgICAgICAgICAgICAgIC8vQ2hlY2sgaWYgbm9kZS5hdHRhY2hFdmVudCBpcyBhcnRpZmljaWFsbHkgYWRkZWQgYnkgY3VzdG9tIHNjcmlwdCBvcgogICAgICAgICAgICAgICAgICAgIC8vbmF0aXZlbHkgc3VwcG9ydGVkIGJ5IGJyb3dzZXIKICAgICAgICAgICAgICAgICAgICAvL3JlYWQgaHR0cHM6Ly9naXRodWIuY29tL3JlcXVpcmVqcy9yZXF1aXJlanMvaXNzdWVzLzE4NwogICAgICAgICAgICAgICAgICAgIC8vaWYgd2UgY2FuIE5PVCBmaW5kIFtuYXRpdmUgY29kZV0gdGhlbiBpdCBtdXN0IE5PVCBuYXRpdmVseSBzdXBwb3J0ZWQuCiAgICAgICAgICAgICAgICAgICAgLy9pbiBJRTgsIG5vZGUuYXR0YWNoRXZlbnQgZG9lcyBub3QgaGF2ZSB0b1N0cmluZygpCiAgICAgICAgICAgICAgICAgICAgLy9Ob3RlIHRoZSB0ZXN0IGZvciAiW25hdGl2ZSBjb2RlIiB3aXRoIG5vIGNsb3NpbmcgYnJhY2UsIHNlZToKICAgICAgICAgICAgICAgICAgICAvL2h0dHBzOi8vZ2l0aHViLmNvbS9yZXF1aXJlanMvcmVxdWlyZWpzL2lzc3Vlcy8yNzMKICAgICAgICAgICAgICAgICAgICAhKG5vZGUuYXR0YWNoRXZlbnQudG9TdHJpbmcgJiYgbm9kZS5hdHRhY2hFdmVudC50b1N0cmluZygpLmluZGV4T2YoJ1tuYXRpdmUgY29kZScpIDwgMCkgJiYKICAgICAgICAgICAgICAgICAgICAhaXNPcGVyYSkgewogICAgICAgICAgICAgICAgLy9Qcm9iYWJseSBJRS4gSUUgKGF0IGxlYXN0IDYtOCkgZG8gbm90IGZpcmUKICAgICAgICAgICAgICAgIC8vc2NyaXB0IG9ubG9hZCByaWdodCBhZnRlciBleGVjdXRpbmcgdGhlIHNjcmlwdCwgc28KICAgICAgICAgICAgICAgIC8vd2UgY2Fubm90IHRpZSB0aGUgYW5vbnltb3VzIGRlZmluZSBjYWxsIHRvIGEgbmFtZS4KICAgICAgICAgICAgICAgIC8vSG93ZXZlciwgSUUgcmVwb3J0cyB0aGUgc2NyaXB0IGFzIGJlaW5nIGluICdpbnRlcmFjdGl2ZScKICAgICAgICAgICAgICAgIC8vcmVhZHlTdGF0ZSBhdCB0aGUgdGltZSBvZiB0aGUgZGVmaW5lIGNhbGwuCiAgICAgICAgICAgICAgICB1c2VJbnRlcmFjdGl2ZSA9IHRydWU7CgogICAgICAgICAgICAgICAgbm9kZS5hdHRhY2hFdmVudCgnb25yZWFkeXN0YXRlY2hhbmdlJywgY29udGV4dC5vblNjcmlwdExvYWQpOwogICAgICAgICAgICAgICAgLy9JdCB3b3VsZCBiZSBncmVhdCB0byBhZGQgYW4gZXJyb3IgaGFuZGxlciBoZXJlIHRvIGNhdGNoCiAgICAgICAgICAgICAgICAvLzQwNHMgaW4gSUU5Ky4gSG93ZXZlciwgb25yZWFkeXN0YXRlY2hhbmdlIHdpbGwgZmlyZSBiZWZvcmUKICAgICAgICAgICAgICAgIC8vdGhlIGVycm9yIGhhbmRsZXIsIHNvIHRoYXQgZG9lcyBub3QgaGVscC4gSWYgYWRkRXZlbnRMaXN0ZW5lcgogICAgICAgICAgICAgICAgLy9pcyB1c2VkLCB0aGVuIElFIHdpbGwgZmlyZSBlcnJvciBiZWZvcmUgbG9hZCwgYnV0IHdlIGNhbm5vdAogICAgICAgICAgICAgICAgLy91c2UgdGhhdCBwYXRod2F5IGdpdmVuIHRoZSBjb25uZWN0Lm1pY3Jvc29mdC5jb20gaXNzdWUKICAgICAgICAgICAgICAgIC8vbWVudGlvbmVkIGFib3ZlIGFib3V0IG5vdCBkb2luZyB0aGUgJ3NjcmlwdCBleGVjdXRlLAogICAgICAgICAgICAgICAgLy90aGVuIGZpcmUgdGhlIHNjcmlwdCBsb2FkIGV2ZW50IGxpc3RlbmVyIGJlZm9yZSBleGVjdXRlCiAgICAgICAgICAgICAgICAvL25leHQgc2NyaXB0JyB0aGF0IG90aGVyIGJyb3dzZXJzIGRvLgogICAgICAgICAgICAgICAgLy9CZXN0IGhvcGU6IElFMTAgZml4ZXMgdGhlIGlzc3VlcywKICAgICAgICAgICAgICAgIC8vYW5kIHRoZW4gZGVzdHJveXMgYWxsIGluc3RhbGxzIG9mIElFIDYtOS4KICAgICAgICAgICAgICAgIC8vbm9kZS5hdHRhY2hFdmVudCgnb25lcnJvcicsIGNvbnRleHQub25TY3JpcHRFcnJvcik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBjb250ZXh0Lm9uU2NyaXB0TG9hZCwgZmFsc2UpOwogICAgICAgICAgICAgICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGNvbnRleHQub25TY3JpcHRFcnJvciwgZmFsc2UpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG5vZGUuc3JjID0gdXJsOwoKICAgICAgICAgICAgLy9DYWxsaW5nIG9uTm9kZUNyZWF0ZWQgYWZ0ZXIgYWxsIHByb3BlcnRpZXMgb24gdGhlIG5vZGUgaGF2ZSBiZWVuCiAgICAgICAgICAgIC8vc2V0LCBidXQgYmVmb3JlIGl0IGlzIHBsYWNlZCBpbiB0aGUgRE9NLgogICAgICAgICAgICBpZiAoY29uZmlnLm9uTm9kZUNyZWF0ZWQpIHsKICAgICAgICAgICAgICAgIGNvbmZpZy5vbk5vZGVDcmVhdGVkKG5vZGUsIGNvbmZpZywgbW9kdWxlTmFtZSwgdXJsKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy9Gb3Igc29tZSBjYWNoZSBjYXNlcyBpbiBJRSA2LTgsIHRoZSBzY3JpcHQgZXhlY3V0ZXMgYmVmb3JlIHRoZSBlbmQKICAgICAgICAgICAgLy9vZiB0aGUgYXBwZW5kQ2hpbGQgZXhlY3V0aW9uLCBzbyB0byB0aWUgYW4gYW5vbnltb3VzIGRlZmluZQogICAgICAgICAgICAvL2NhbGwgdG8gdGhlIG1vZHVsZSBuYW1lICh3aGljaCBpcyBzdG9yZWQgb24gdGhlIG5vZGUpLCBob2xkIG9uCiAgICAgICAgICAgIC8vdG8gYSByZWZlcmVuY2UgdG8gdGhpcyBub2RlLCBidXQgY2xlYXIgYWZ0ZXIgdGhlIERPTSBpbnNlcnRpb24uCiAgICAgICAgICAgIGN1cnJlbnRseUFkZGluZ1NjcmlwdCA9IG5vZGU7CiAgICAgICAgICAgIGlmIChiYXNlRWxlbWVudCkgewogICAgICAgICAgICAgICAgaGVhZC5pbnNlcnRCZWZvcmUobm9kZSwgYmFzZUVsZW1lbnQpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaGVhZC5hcHBlbmRDaGlsZChub2RlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjdXJyZW50bHlBZGRpbmdTY3JpcHQgPSBudWxsOwoKICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgICAgfSBlbHNlIGlmIChpc1dlYldvcmtlcikgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgLy9JbiBhIHdlYiB3b3JrZXIsIHVzZSBpbXBvcnRTY3JpcHRzLiBUaGlzIGlzIG5vdCBhIHZlcnkKICAgICAgICAgICAgICAgIC8vZWZmaWNpZW50IHVzZSBvZiBpbXBvcnRTY3JpcHRzLCBpbXBvcnRTY3JpcHRzIHdpbGwgYmxvY2sgdW50aWwKICAgICAgICAgICAgICAgIC8vaXRzIHNjcmlwdCBpcyBkb3dubG9hZGVkIGFuZCBldmFsdWF0ZWQuIEhvd2V2ZXIsIGlmIHdlYiB3b3JrZXJzCiAgICAgICAgICAgICAgICAvL2FyZSBpbiBwbGF5LCB0aGUgZXhwZWN0YXRpb24gaXMgdGhhdCBhIGJ1aWxkIGhhcyBiZWVuIGRvbmUgc28KICAgICAgICAgICAgICAgIC8vdGhhdCBvbmx5IG9uZSBzY3JpcHQgbmVlZHMgdG8gYmUgbG9hZGVkIGFueXdheS4gVGhpcyBtYXkgbmVlZAogICAgICAgICAgICAgICAgLy90byBiZSByZWV2YWx1YXRlZCBpZiBvdGhlciB1c2UgY2FzZXMgYmVjb21lIGNvbW1vbi4KCiAgICAgICAgICAgICAgICAvLyBQb3N0IGEgdGFzayB0byB0aGUgZXZlbnQgbG9vcCB0byB3b3JrIGFyb3VuZCBhIGJ1ZyBpbiBXZWJLaXQKICAgICAgICAgICAgICAgIC8vIHdoZXJlIHRoZSB3b3JrZXIgZ2V0cyBnYXJiYWdlLWNvbGxlY3RlZCBhZnRlciBjYWxsaW5nCiAgICAgICAgICAgICAgICAvLyBpbXBvcnRTY3JpcHRzKCk6IGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE1MzMxNwogICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHt9LCAwKTsKICAgICAgICAgICAgICAgIGltcG9ydFNjcmlwdHModXJsKTsKCiAgICAgICAgICAgICAgICAvL0FjY291bnQgZm9yIGFub255bW91cyBtb2R1bGVzCiAgICAgICAgICAgICAgICBjb250ZXh0LmNvbXBsZXRlTG9hZChtb2R1bGVOYW1lKTsKICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgY29udGV4dC5vbkVycm9yKG1ha2VFcnJvcignaW1wb3J0c2NyaXB0cycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ltcG9ydFNjcmlwdHMgZmFpbGVkIGZvciAnICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlTmFtZSArICcgYXQgJyArIHVybCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttb2R1bGVOYW1lXSkpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKCiAgICBmdW5jdGlvbiBnZXRJbnRlcmFjdGl2ZVNjcmlwdCgpIHsKICAgICAgICBpZiAoaW50ZXJhY3RpdmVTY3JpcHQgJiYgaW50ZXJhY3RpdmVTY3JpcHQucmVhZHlTdGF0ZSA9PT0gJ2ludGVyYWN0aXZlJykgewogICAgICAgICAgICByZXR1cm4gaW50ZXJhY3RpdmVTY3JpcHQ7CiAgICAgICAgfQoKICAgICAgICBlYWNoUmV2ZXJzZShzY3JpcHRzKCksIGZ1bmN0aW9uIChzY3JpcHQpIHsKICAgICAgICAgICAgaWYgKHNjcmlwdC5yZWFkeVN0YXRlID09PSAnaW50ZXJhY3RpdmUnKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gKGludGVyYWN0aXZlU2NyaXB0ID0gc2NyaXB0KTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIHJldHVybiBpbnRlcmFjdGl2ZVNjcmlwdDsKICAgIH0KCiAgICAvL0xvb2sgZm9yIGEgZGF0YS1tYWluIHNjcmlwdCBhdHRyaWJ1dGUsIHdoaWNoIGNvdWxkIGFsc28gYWRqdXN0IHRoZSBiYXNlVXJsLgogICAgaWYgKGlzQnJvd3NlciAmJiAhY2ZnLnNraXBEYXRhTWFpbikgewogICAgICAgIC8vRmlndXJlIG91dCBiYXNlVXJsLiBHZXQgaXQgZnJvbSB0aGUgc2NyaXB0IHRhZyB3aXRoIHJlcXVpcmUuanMgaW4gaXQuCiAgICAgICAgZWFjaFJldmVyc2Uoc2NyaXB0cygpLCBmdW5jdGlvbiAoc2NyaXB0KSB7CiAgICAgICAgICAgIC8vU2V0IHRoZSAnaGVhZCcgd2hlcmUgd2UgY2FuIGFwcGVuZCBjaGlsZHJlbiBieQogICAgICAgICAgICAvL3VzaW5nIHRoZSBzY3JpcHQncyBwYXJlbnQuCiAgICAgICAgICAgIGlmICghaGVhZCkgewogICAgICAgICAgICAgICAgaGVhZCA9IHNjcmlwdC5wYXJlbnROb2RlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvL0xvb2sgZm9yIGEgZGF0YS1tYWluIGF0dHJpYnV0ZSB0byBzZXQgbWFpbiBzY3JpcHQgZm9yIHRoZSBwYWdlCiAgICAgICAgICAgIC8vdG8gbG9hZC4gSWYgaXQgaXMgdGhlcmUsIHRoZSBwYXRoIHRvIGRhdGEgbWFpbiBiZWNvbWVzIHRoZQogICAgICAgICAgICAvL2Jhc2VVcmwsIGlmIGl0IGlzIG5vdCBhbHJlYWR5IHNldC4KICAgICAgICAgICAgZGF0YU1haW4gPSBzY3JpcHQuZ2V0QXR0cmlidXRlKCdkYXRhLW1haW4nKTsKICAgICAgICAgICAgaWYgKGRhdGFNYWluKSB7CiAgICAgICAgICAgICAgICAvL1ByZXNlcnZlIGRhdGFNYWluIGluIGNhc2UgaXQgaXMgYSBwYXRoIChpLmUuIGNvbnRhaW5zICc/JykKICAgICAgICAgICAgICAgIG1haW5TY3JpcHQgPSBkYXRhTWFpbjsKCiAgICAgICAgICAgICAgICAvL1NldCBmaW5hbCBiYXNlVXJsIGlmIHRoZXJlIGlzIG5vdCBhbHJlYWR5IGFuIGV4cGxpY2l0IG9uZSwKICAgICAgICAgICAgICAgIC8vYnV0IG9ubHkgZG8gc28gaWYgdGhlIGRhdGEtbWFpbiB2YWx1ZSBpcyBub3QgYSBsb2FkZXIgcGx1Z2luCiAgICAgICAgICAgICAgICAvL21vZHVsZSBJRC4KICAgICAgICAgICAgICAgIGlmICghY2ZnLmJhc2VVcmwgJiYgbWFpblNjcmlwdC5pbmRleE9mKCchJykgPT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgLy9QdWxsIG9mZiB0aGUgZGlyZWN0b3J5IG9mIGRhdGEtbWFpbiBmb3IgdXNlIGFzIHRoZQogICAgICAgICAgICAgICAgICAgIC8vYmFzZVVybC4KICAgICAgICAgICAgICAgICAgICBzcmMgPSBtYWluU2NyaXB0LnNwbGl0KCcvJyk7CiAgICAgICAgICAgICAgICAgICAgbWFpblNjcmlwdCA9IHNyYy5wb3AoKTsKICAgICAgICAgICAgICAgICAgICBzdWJQYXRoID0gc3JjLmxlbmd0aCA/IHNyYy5qb2luKCcvJykgICsgJy8nIDogJy4vJzsKCiAgICAgICAgICAgICAgICAgICAgY2ZnLmJhc2VVcmwgPSBzdWJQYXRoOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vU3RyaXAgb2ZmIGFueSB0cmFpbGluZyAuanMgc2luY2UgbWFpblNjcmlwdCBpcyBub3cKICAgICAgICAgICAgICAgIC8vbGlrZSBhIG1vZHVsZSBuYW1lLgogICAgICAgICAgICAgICAgbWFpblNjcmlwdCA9IG1haW5TY3JpcHQucmVwbGFjZShqc1N1ZmZpeFJlZ0V4cCwgJycpOwoKICAgICAgICAgICAgICAgIC8vSWYgbWFpblNjcmlwdCBpcyBzdGlsbCBhIHBhdGgsIGZhbGwgYmFjayB0byBkYXRhTWFpbgogICAgICAgICAgICAgICAgaWYgKHJlcS5qc0V4dFJlZ0V4cC50ZXN0KG1haW5TY3JpcHQpKSB7CiAgICAgICAgICAgICAgICAgICAgbWFpblNjcmlwdCA9IGRhdGFNYWluOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vUHV0IHRoZSBkYXRhLW1haW4gc2NyaXB0IGluIHRoZSBmaWxlcyB0byBsb2FkLgogICAgICAgICAgICAgICAgY2ZnLmRlcHMgPSBjZmcuZGVwcyA/IGNmZy5kZXBzLmNvbmNhdChtYWluU2NyaXB0KSA6IFttYWluU2NyaXB0XTsKCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfQoKICAgIC8qKgogICAgICogVGhlIGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyBkZWZpbml0aW9ucyBvZiBtb2R1bGVzLiBEaWZmZXJzIGZyb20KICAgICAqIHJlcXVpcmUoKSBpbiB0aGF0IGEgc3RyaW5nIGZvciB0aGUgbW9kdWxlIHNob3VsZCBiZSB0aGUgZmlyc3QgYXJndW1lbnQsCiAgICAgKiBhbmQgdGhlIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgYWZ0ZXIgZGVwZW5kZW5jaWVzIGFyZSBsb2FkZWQgc2hvdWxkCiAgICAgKiByZXR1cm4gYSB2YWx1ZSB0byBkZWZpbmUgdGhlIG1vZHVsZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBmaXJzdCBhcmd1bWVudCdzCiAgICAgKiBuYW1lLgogICAgICovCiAgICBkZWZpbmUgPSBmdW5jdGlvbiAobmFtZSwgZGVwcywgY2FsbGJhY2spIHsKICAgICAgICB2YXIgbm9kZSwgY29udGV4dDsKCiAgICAgICAgLy9BbGxvdyBmb3IgYW5vbnltb3VzIG1vZHVsZXMKICAgICAgICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSB7CiAgICAgICAgICAgIC8vQWRqdXN0IGFyZ3MgYXBwcm9wcmlhdGVseQogICAgICAgICAgICBjYWxsYmFjayA9IGRlcHM7CiAgICAgICAgICAgIGRlcHMgPSBuYW1lOwogICAgICAgICAgICBuYW1lID0gbnVsbDsKICAgICAgICB9CgogICAgICAgIC8vVGhpcyBtb2R1bGUgbWF5IG5vdCBoYXZlIGRlcGVuZGVuY2llcwogICAgICAgIGlmICghaXNBcnJheShkZXBzKSkgewogICAgICAgICAgICBjYWxsYmFjayA9IGRlcHM7CiAgICAgICAgICAgIGRlcHMgPSBudWxsOwogICAgICAgIH0KCiAgICAgICAgLy9JZiBubyBuYW1lLCBhbmQgY2FsbGJhY2sgaXMgYSBmdW5jdGlvbiwgdGhlbiBmaWd1cmUgb3V0IGlmIGl0IGEKICAgICAgICAvL0NvbW1vbkpTIHRoaW5nIHdpdGggZGVwZW5kZW5jaWVzLgogICAgICAgIGlmICghZGVwcyAmJiBpc0Z1bmN0aW9uKGNhbGxiYWNrKSkgewogICAgICAgICAgICBkZXBzID0gW107CiAgICAgICAgICAgIC8vUmVtb3ZlIGNvbW1lbnRzIGZyb20gdGhlIGNhbGxiYWNrIHN0cmluZywKICAgICAgICAgICAgLy9sb29rIGZvciByZXF1aXJlIGNhbGxzLCBhbmQgcHVsbCB0aGVtIGludG8gdGhlIGRlcGVuZGVuY2llcywKICAgICAgICAgICAgLy9idXQgb25seSBpZiB0aGVyZSBhcmUgZnVuY3Rpb24gYXJncy4KICAgICAgICAgICAgaWYgKGNhbGxiYWNrLmxlbmd0aCkgewogICAgICAgICAgICAgICAgY2FsbGJhY2sKICAgICAgICAgICAgICAgICAgICAudG9TdHJpbmcoKQogICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKGNvbW1lbnRSZWdFeHAsIGNvbW1lbnRSZXBsYWNlKQogICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKGNqc1JlcXVpcmVSZWdFeHAsIGZ1bmN0aW9uIChtYXRjaCwgZGVwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRlcHMucHVzaChkZXApOwogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIC8vTWF5IGJlIGEgQ29tbW9uSlMgdGhpbmcgZXZlbiB3aXRob3V0IHJlcXVpcmUgY2FsbHMsIGJ1dCBzdGlsbAogICAgICAgICAgICAgICAgLy9jb3VsZCB1c2UgZXhwb3J0cywgYW5kIG1vZHVsZS4gQXZvaWQgZG9pbmcgZXhwb3J0cyBhbmQgbW9kdWxlCiAgICAgICAgICAgICAgICAvL3dvcmsgdGhvdWdoIGlmIGl0IGp1c3QgbmVlZHMgcmVxdWlyZS4KICAgICAgICAgICAgICAgIC8vUkVRVUlSRVMgdGhlIGZ1bmN0aW9uIHRvIGV4cGVjdCB0aGUgQ29tbW9uSlMgdmFyaWFibGVzIGluIHRoZQogICAgICAgICAgICAgICAgLy9vcmRlciBsaXN0ZWQgYmVsb3cuCiAgICAgICAgICAgICAgICBkZXBzID0gKGNhbGxiYWNrLmxlbmd0aCA9PT0gMSA/IFsncmVxdWlyZSddIDogWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJ10pLmNvbmNhdChkZXBzKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy9JZiBpbiBJRSA2LTggYW5kIGhpdCBhbiBhbm9ueW1vdXMgZGVmaW5lKCkgY2FsbCwgZG8gdGhlIGludGVyYWN0aXZlCiAgICAgICAgLy93b3JrLgogICAgICAgIGlmICh1c2VJbnRlcmFjdGl2ZSkgewogICAgICAgICAgICBub2RlID0gY3VycmVudGx5QWRkaW5nU2NyaXB0IHx8IGdldEludGVyYWN0aXZlU2NyaXB0KCk7CiAgICAgICAgICAgIGlmIChub2RlKSB7CiAgICAgICAgICAgICAgICBpZiAoIW5hbWUpIHsKICAgICAgICAgICAgICAgICAgICBuYW1lID0gbm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtcmVxdWlyZW1vZHVsZScpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY29udGV4dCA9IGNvbnRleHRzW25vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLXJlcXVpcmVjb250ZXh0JyldOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvL0Fsd2F5cyBzYXZlIG9mZiBldmFsdWF0aW5nIHRoZSBkZWYgY2FsbCB1bnRpbCB0aGUgc2NyaXB0IG9ubG9hZCBoYW5kbGVyLgogICAgICAgIC8vVGhpcyBhbGxvd3MgbXVsdGlwbGUgbW9kdWxlcyB0byBiZSBpbiBhIGZpbGUgd2l0aG91dCBwcmVtYXR1cmVseQogICAgICAgIC8vdHJhY2luZyBkZXBlbmRlbmNpZXMsIGFuZCBhbGxvd3MgZm9yIGFub255bW91cyBtb2R1bGUgc3VwcG9ydCwKICAgICAgICAvL3doZXJlIHRoZSBtb2R1bGUgbmFtZSBpcyBub3Qga25vd24gdW50aWwgdGhlIHNjcmlwdCBvbmxvYWQgZXZlbnQKICAgICAgICAvL29jY3Vycy4gSWYgbm8gY29udGV4dCwgdXNlIHRoZSBnbG9iYWwgcXVldWUsIGFuZCBnZXQgaXQgcHJvY2Vzc2VkCiAgICAgICAgLy9pbiB0aGUgb25zY3JpcHQgbG9hZCBjYWxsYmFjay4KICAgICAgICBpZiAoY29udGV4dCkgewogICAgICAgICAgICBjb250ZXh0LmRlZlF1ZXVlLnB1c2goW25hbWUsIGRlcHMsIGNhbGxiYWNrXSk7CiAgICAgICAgICAgIGNvbnRleHQuZGVmUXVldWVNYXBbbmFtZV0gPSB0cnVlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGdsb2JhbERlZlF1ZXVlLnB1c2goW25hbWUsIGRlcHMsIGNhbGxiYWNrXSk7CiAgICAgICAgfQogICAgfTsKCiAgICBkZWZpbmUuYW1kID0gewogICAgICAgIGpRdWVyeTogdHJ1ZQogICAgfTsKCiAgICAvKioKICAgICAqIEV4ZWN1dGVzIHRoZSB0ZXh0LiBOb3JtYWxseSBqdXN0IHVzZXMgZXZhbCwgYnV0IGNhbiBiZSBtb2RpZmllZAogICAgICogdG8gdXNlIGEgYmV0dGVyLCBlbnZpcm9ubWVudC1zcGVjaWZpYyBjYWxsLiBPbmx5IHVzZWQgZm9yIHRyYW5zcGlsaW5nCiAgICAgKiBsb2FkZXIgcGx1Z2lucywgbm90IGZvciBwbGFpbiBKUyBtb2R1bGVzLgogICAgICogQHBhcmFtIHtTdHJpbmd9IHRleHQgdGhlIHRleHQgdG8gZXhlY3V0ZS9ldmFsdWF0ZS4KICAgICAqLwogICAgcmVxLmV4ZWMgPSBmdW5jdGlvbiAodGV4dCkgewogICAgICAgIC8qanNsaW50IGV2aWw6IHRydWUgKi8KICAgICAgICByZXR1cm4gZXZhbCh0ZXh0KTsKICAgIH07CgogICAgLy9TZXQgdXAgd2l0aCBjb25maWcgaW5mby4KICAgIHJlcShjZmcpOwp9KHRoaXMsICh0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBzZXRUaW1lb3V0KSkpOwoKLy8gQ29weXJpZ2h0IDIwMTQgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLy8KLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLy8gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAovLwovLyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLy8KLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQovLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAovLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLy8gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgohZnVuY3Rpb24oKXt2YXIgYT17fSxiPXt9LGM9e307IWZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhKXtpZigibnVtYmVyIj09dHlwZW9mIGEpcmV0dXJuIGE7dmFyIGI9e307Zm9yKHZhciBjIGluIGEpYltjXT1hW2NdO3JldHVybiBifWZ1bmN0aW9uIGQoKXt0aGlzLl9kZWxheT0wLHRoaXMuX2VuZERlbGF5PTAsdGhpcy5fZmlsbD0ibm9uZSIsdGhpcy5faXRlcmF0aW9uU3RhcnQ9MCx0aGlzLl9pdGVyYXRpb25zPTEsdGhpcy5fZHVyYXRpb249MCx0aGlzLl9wbGF5YmFja1JhdGU9MSx0aGlzLl9kaXJlY3Rpb249Im5vcm1hbCIsdGhpcy5fZWFzaW5nPSJsaW5lYXIiLHRoaXMuX2Vhc2luZ0Z1bmN0aW9uPXh9ZnVuY3Rpb24gZSgpe3JldHVybiBhLmlzRGVwcmVjYXRlZCgiSW52YWxpZCB0aW1pbmcgaW5wdXRzIiwiMjAxNi0wMy0wMiIsIlR5cGVFcnJvciBleGNlcHRpb25zIHdpbGwgYmUgdGhyb3duIGluc3RlYWQuIiwhMCl9ZnVuY3Rpb24gZihiLGMsZSl7dmFyIGY9bmV3IGQ7cmV0dXJuIGMmJihmLmZpbGw9ImJvdGgiLGYuZHVyYXRpb249ImF1dG8iKSwibnVtYmVyIiE9dHlwZW9mIGJ8fGlzTmFOKGIpP3ZvaWQgMCE9PWImJk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGIpLmZvckVhY2goZnVuY3Rpb24oYyl7aWYoImF1dG8iIT1iW2NdKXtpZigoIm51bWJlciI9PXR5cGVvZiBmW2NdfHwiZHVyYXRpb24iPT1jKSYmKCJudW1iZXIiIT10eXBlb2YgYltjXXx8aXNOYU4oYltjXSkpKXJldHVybjtpZigiZmlsbCI9PWMmJi0xPT12LmluZGV4T2YoYltjXSkpcmV0dXJuO2lmKCJkaXJlY3Rpb24iPT1jJiYtMT09dy5pbmRleE9mKGJbY10pKXJldHVybjtpZigicGxheWJhY2tSYXRlIj09YyYmMSE9PWJbY10mJmEuaXNEZXByZWNhdGVkKCJBbmltYXRpb25FZmZlY3RUaW1pbmcucGxheWJhY2tSYXRlIiwiMjAxNC0xMS0yOCIsIlVzZSBBbmltYXRpb24ucGxheWJhY2tSYXRlIGluc3RlYWQuIikpcmV0dXJuO2ZbY109YltjXX19KTpmLmR1cmF0aW9uPWIsZn1mdW5jdGlvbiBnKGEpe3JldHVybiJudW1iZXIiPT10eXBlb2YgYSYmKGE9aXNOYU4oYSk/e2R1cmF0aW9uOjB9OntkdXJhdGlvbjphfSksYX1mdW5jdGlvbiBoKGIsYyl7cmV0dXJuIGI9YS5udW1lcmljVGltaW5nVG9PYmplY3QoYiksZihiLGMpfWZ1bmN0aW9uIGkoYSxiLGMsZCl7cmV0dXJuIGE8MHx8YT4xfHxjPDB8fGM+MT94OmZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGYoYSxiLGMpe3JldHVybiAzKmEqKDEtYykqKDEtYykqYyszKmIqKDEtYykqYypjK2MqYypjfWlmKGU8PTApe3ZhciBnPTA7cmV0dXJuIGE+MD9nPWIvYTohYiYmYz4wJiYoZz1kL2MpLGcqZX1pZihlPj0xKXt2YXIgaD0wO3JldHVybiBjPDE/aD0oZC0xKS8oYy0xKToxPT1jJiZhPDEmJihoPShiLTEpLyhhLTEpKSwxK2gqKGUtMSl9Zm9yKHZhciBpPTAsaj0xO2k8ajspe3ZhciBrPShpK2opLzIsbD1mKGEsYyxrKTtpZihNYXRoLmFicyhlLWwpPDFlLTUpcmV0dXJuIGYoYixkLGspO2w8ZT9pPWs6aj1rfXJldHVybiBmKGIsZCxrKX19ZnVuY3Rpb24gaihhLGIpe3JldHVybiBmdW5jdGlvbihjKXtpZihjPj0xKXJldHVybiAxO3ZhciBkPTEvYTtyZXR1cm4oYys9YipkKS1jJWR9fWZ1bmN0aW9uIGsoYSl7Q3x8KEM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iikuc3R5bGUpLEMuYW5pbWF0aW9uVGltaW5nRnVuY3Rpb249IiIsQy5hbmltYXRpb25UaW1pbmdGdW5jdGlvbj1hO3ZhciBiPUMuYW5pbWF0aW9uVGltaW5nRnVuY3Rpb247aWYoIiI9PWImJmUoKSl0aHJvdyBuZXcgVHlwZUVycm9yKGErIiBpcyBub3QgYSB2YWxpZCB2YWx1ZSBmb3IgZWFzaW5nIik7cmV0dXJuIGJ9ZnVuY3Rpb24gbChhKXtpZigibGluZWFyIj09YSlyZXR1cm4geDt2YXIgYj1FLmV4ZWMoYSk7aWYoYilyZXR1cm4gaS5hcHBseSh0aGlzLGIuc2xpY2UoMSkubWFwKE51bWJlcikpO3ZhciBjPUYuZXhlYyhhKTtpZihjKXJldHVybiBqKE51bWJlcihjWzFdKSxBKTt2YXIgZD1HLmV4ZWMoYSk7cmV0dXJuIGQ/aihOdW1iZXIoZFsxXSkse3N0YXJ0OnksbWlkZGxlOnosZW5kOkF9W2RbMl1dKTpCW2FdfHx4fWZ1bmN0aW9uIG0oYSl7cmV0dXJuIE1hdGguYWJzKG4oYSkvYS5wbGF5YmFja1JhdGUpfWZ1bmN0aW9uIG4oYSl7cmV0dXJuIDA9PT1hLmR1cmF0aW9ufHwwPT09YS5pdGVyYXRpb25zPzA6YS5kdXJhdGlvbiphLml0ZXJhdGlvbnN9ZnVuY3Rpb24gbyhhLGIsYyl7aWYobnVsbD09YilyZXR1cm4gSDt2YXIgZD1jLmRlbGF5K2ErYy5lbmREZWxheTtyZXR1cm4gYjxNYXRoLm1pbihjLmRlbGF5LGQpP0k6Yj49TWF0aC5taW4oYy5kZWxheSthLGQpP0o6S31mdW5jdGlvbiBwKGEsYixjLGQsZSl7c3dpdGNoKGQpe2Nhc2UgSTpyZXR1cm4iYmFja3dhcmRzIj09Ynx8ImJvdGgiPT1iPzA6bnVsbDtjYXNlIEs6cmV0dXJuIGMtZTtjYXNlIEo6cmV0dXJuImZvcndhcmRzIj09Ynx8ImJvdGgiPT1iP2E6bnVsbDtjYXNlIEg6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIHEoYSxiLGMsZCxlKXt2YXIgZj1lO3JldHVybiAwPT09YT9iIT09SSYmKGYrPWMpOmYrPWQvYSxmfWZ1bmN0aW9uIHIoYSxiLGMsZCxlLGYpe3ZhciBnPWE9PT0xLzA/YiUxOmElMTtyZXR1cm4gMCE9PWd8fGMhPT1KfHwwPT09ZHx8MD09PWUmJjAhPT1mfHwoZz0xKSxnfWZ1bmN0aW9uIHMoYSxiLGMsZCl7cmV0dXJuIGE9PT1KJiZiPT09MS8wPzEvMDoxPT09Yz9NYXRoLmZsb29yKGQpLTE6TWF0aC5mbG9vcihkKX1mdW5jdGlvbiB0KGEsYixjKXt2YXIgZD1hO2lmKCJub3JtYWwiIT09YSYmInJldmVyc2UiIT09YSl7dmFyIGU9YjsiYWx0ZXJuYXRlLXJldmVyc2UiPT09YSYmKGUrPTEpLGQ9Im5vcm1hbCIsZSE9PTEvMCYmZSUyIT0wJiYoZD0icmV2ZXJzZSIpfXJldHVybiJub3JtYWwiPT09ZD9jOjEtY31mdW5jdGlvbiB1KGEsYixjKXt2YXIgZD1vKGEsYixjKSxlPXAoYSxjLmZpbGwsYixkLGMuZGVsYXkpO2lmKG51bGw9PT1lKXJldHVybiBudWxsO3ZhciBmPXEoYy5kdXJhdGlvbixkLGMuaXRlcmF0aW9ucyxlLGMuaXRlcmF0aW9uU3RhcnQpLGc9cihmLGMuaXRlcmF0aW9uU3RhcnQsZCxjLml0ZXJhdGlvbnMsZSxjLmR1cmF0aW9uKSxoPXMoZCxjLml0ZXJhdGlvbnMsZyxmKSxpPXQoYy5kaXJlY3Rpb24saCxnKTtyZXR1cm4gYy5fZWFzaW5nRnVuY3Rpb24oaSl9dmFyIHY9ImJhY2t3YXJkc3xmb3J3YXJkc3xib3RofG5vbmUiLnNwbGl0KCJ8Iiksdz0icmV2ZXJzZXxhbHRlcm5hdGV8YWx0ZXJuYXRlLXJldmVyc2UiLnNwbGl0KCJ8IikseD1mdW5jdGlvbihhKXtyZXR1cm4gYX07ZC5wcm90b3R5cGU9e19zZXRNZW1iZXI6ZnVuY3Rpb24oYixjKXt0aGlzWyJfIitiXT1jLHRoaXMuX2VmZmVjdCYmKHRoaXMuX2VmZmVjdC5fdGltaW5nSW5wdXRbYl09Yyx0aGlzLl9lZmZlY3QuX3RpbWluZz1hLm5vcm1hbGl6ZVRpbWluZ0lucHV0KHRoaXMuX2VmZmVjdC5fdGltaW5nSW5wdXQpLHRoaXMuX2VmZmVjdC5hY3RpdmVEdXJhdGlvbj1hLmNhbGN1bGF0ZUFjdGl2ZUR1cmF0aW9uKHRoaXMuX2VmZmVjdC5fdGltaW5nKSx0aGlzLl9lZmZlY3QuX2FuaW1hdGlvbiYmdGhpcy5fZWZmZWN0Ll9hbmltYXRpb24uX3JlYnVpbGRVbmRlcmx5aW5nQW5pbWF0aW9uKCkpfSxnZXQgcGxheWJhY2tSYXRlKCl7cmV0dXJuIHRoaXMuX3BsYXliYWNrUmF0ZX0sc2V0IGRlbGF5KGEpe3RoaXMuX3NldE1lbWJlcigiZGVsYXkiLGEpfSxnZXQgZGVsYXkoKXtyZXR1cm4gdGhpcy5fZGVsYXl9LHNldCBlbmREZWxheShhKXt0aGlzLl9zZXRNZW1iZXIoImVuZERlbGF5IixhKX0sZ2V0IGVuZERlbGF5KCl7cmV0dXJuIHRoaXMuX2VuZERlbGF5fSxzZXQgZmlsbChhKXt0aGlzLl9zZXRNZW1iZXIoImZpbGwiLGEpfSxnZXQgZmlsbCgpe3JldHVybiB0aGlzLl9maWxsfSxzZXQgaXRlcmF0aW9uU3RhcnQoYSl7aWYoKGlzTmFOKGEpfHxhPDApJiZlKCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiaXRlcmF0aW9uU3RhcnQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIsIHJlY2VpdmVkOiAiK2EpO3RoaXMuX3NldE1lbWJlcigiaXRlcmF0aW9uU3RhcnQiLGEpfSxnZXQgaXRlcmF0aW9uU3RhcnQoKXtyZXR1cm4gdGhpcy5faXRlcmF0aW9uU3RhcnR9LHNldCBkdXJhdGlvbihhKXtpZigiYXV0byIhPWEmJihpc05hTihhKXx8YTwwKSYmZSgpKXRocm93IG5ldyBUeXBlRXJyb3IoImR1cmF0aW9uIG11c3QgYmUgbm9uLW5lZ2F0aXZlIG9yIGF1dG8sIHJlY2VpdmVkOiAiK2EpO3RoaXMuX3NldE1lbWJlcigiZHVyYXRpb24iLGEpfSxnZXQgZHVyYXRpb24oKXtyZXR1cm4gdGhpcy5fZHVyYXRpb259LHNldCBkaXJlY3Rpb24oYSl7dGhpcy5fc2V0TWVtYmVyKCJkaXJlY3Rpb24iLGEpfSxnZXQgZGlyZWN0aW9uKCl7cmV0dXJuIHRoaXMuX2RpcmVjdGlvbn0sc2V0IGVhc2luZyhhKXt0aGlzLl9lYXNpbmdGdW5jdGlvbj1sKGsoYSkpLHRoaXMuX3NldE1lbWJlcigiZWFzaW5nIixhKX0sZ2V0IGVhc2luZygpe3JldHVybiB0aGlzLl9lYXNpbmd9LHNldCBpdGVyYXRpb25zKGEpe2lmKChpc05hTihhKXx8YTwwKSYmZSgpKXRocm93IG5ldyBUeXBlRXJyb3IoIml0ZXJhdGlvbnMgbXVzdCBiZSBub24tbmVnYXRpdmUsIHJlY2VpdmVkOiAiK2EpO3RoaXMuX3NldE1lbWJlcigiaXRlcmF0aW9ucyIsYSl9LGdldCBpdGVyYXRpb25zKCl7cmV0dXJuIHRoaXMuX2l0ZXJhdGlvbnN9fTt2YXIgeT0xLHo9LjUsQT0wLEI9e2Vhc2U6aSguMjUsLjEsLjI1LDEpLCJlYXNlLWluIjppKC40MiwwLDEsMSksImVhc2Utb3V0IjppKDAsMCwuNTgsMSksImVhc2UtaW4tb3V0IjppKC40MiwwLC41OCwxKSwic3RlcC1zdGFydCI6aigxLHkpLCJzdGVwLW1pZGRsZSI6aigxLHopLCJzdGVwLWVuZCI6aigxLEEpfSxDPW51bGwsRD0iXFxzKigtP1xcZCtcXC4/XFxkKnwtP1xcLlxcZCspXFxzKiIsRT1uZXcgUmVnRXhwKCJjdWJpYy1iZXppZXJcXCgiK0QrIiwiK0QrIiwiK0QrIiwiK0QrIlxcKSIpLEY9L3N0ZXBzXChccyooXGQrKVxzKlwpLyxHPS9zdGVwc1woXHMqKFxkKylccyosXHMqKHN0YXJ0fG1pZGRsZXxlbmQpXHMqXCkvLEg9MCxJPTEsSj0yLEs9MzthLmNsb25lVGltaW5nSW5wdXQ9YyxhLm1ha2VUaW1pbmc9ZixhLm51bWVyaWNUaW1pbmdUb09iamVjdD1nLGEubm9ybWFsaXplVGltaW5nSW5wdXQ9aCxhLmNhbGN1bGF0ZUFjdGl2ZUR1cmF0aW9uPW0sYS5jYWxjdWxhdGVJdGVyYXRpb25Qcm9ncmVzcz11LGEuY2FsY3VsYXRlUGhhc2U9byxhLm5vcm1hbGl6ZUVhc2luZz1rLGEucGFyc2VFYXNpbmdGdW5jdGlvbj1sfShhKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSxiKXtyZXR1cm4gYSBpbiBrP2tbYV1bYl18fGI6Yn1mdW5jdGlvbiBkKGEpe3JldHVybiJkaXNwbGF5Ij09PWF8fDA9PT1hLmxhc3RJbmRleE9mKCJhbmltYXRpb24iLDApfHwwPT09YS5sYXN0SW5kZXhPZigidHJhbnNpdGlvbiIsMCl9ZnVuY3Rpb24gZShhLGIsZSl7aWYoIWQoYSkpe3ZhciBmPWhbYV07aWYoZil7aS5zdHlsZVthXT1iO2Zvcih2YXIgZyBpbiBmKXt2YXIgaj1mW2ddLGs9aS5zdHlsZVtqXTtlW2pdPWMoaixrKX19ZWxzZSBlW2FdPWMoYSxiKX19ZnVuY3Rpb24gZihhKXt2YXIgYj1bXTtmb3IodmFyIGMgaW4gYSlpZighKGMgaW5bImVhc2luZyIsIm9mZnNldCIsImNvbXBvc2l0ZSJdKSl7dmFyIGQ9YVtjXTtBcnJheS5pc0FycmF5KGQpfHwoZD1bZF0pO2Zvcih2YXIgZSxmPWQubGVuZ3RoLGc9MDtnPGY7ZysrKWU9e30sZS5vZmZzZXQ9Im9mZnNldCJpbiBhP2Eub2Zmc2V0OjE9PWY/MTpnLyhmLTEpLCJlYXNpbmciaW4gYSYmKGUuZWFzaW5nPWEuZWFzaW5nKSwiY29tcG9zaXRlImluIGEmJihlLmNvbXBvc2l0ZT1hLmNvbXBvc2l0ZSksZVtjXT1kW2ddLGIucHVzaChlKX1yZXR1cm4gYi5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEub2Zmc2V0LWIub2Zmc2V0fSksYn1mdW5jdGlvbiBnKGIpe2Z1bmN0aW9uIGMoKXt2YXIgYT1kLmxlbmd0aDtudWxsPT1kW2EtMV0ub2Zmc2V0JiYoZFthLTFdLm9mZnNldD0xKSxhPjEmJm51bGw9PWRbMF0ub2Zmc2V0JiYoZFswXS5vZmZzZXQ9MCk7Zm9yKHZhciBiPTAsYz1kWzBdLm9mZnNldCxlPTE7ZTxhO2UrKyl7dmFyIGY9ZFtlXS5vZmZzZXQ7aWYobnVsbCE9Zil7Zm9yKHZhciBnPTE7ZzxlLWI7ZysrKWRbYitnXS5vZmZzZXQ9YysoZi1jKSpnLyhlLWIpO2I9ZSxjPWZ9fX1pZihudWxsPT1iKXJldHVybltdO3dpbmRvdy5TeW1ib2wmJlN5bWJvbC5pdGVyYXRvciYmQXJyYXkucHJvdG90eXBlLmZyb20mJmJbU3ltYm9sLml0ZXJhdG9yXSYmKGI9QXJyYXkuZnJvbShiKSksQXJyYXkuaXNBcnJheShiKXx8KGI9ZihiKSk7Zm9yKHZhciBkPWIubWFwKGZ1bmN0aW9uKGIpe3ZhciBjPXt9O2Zvcih2YXIgZCBpbiBiKXt2YXIgZj1iW2RdO2lmKCJvZmZzZXQiPT1kKXtpZihudWxsIT1mKXtpZihmPU51bWJlcihmKSwhaXNGaW5pdGUoZikpdGhyb3cgbmV3IFR5cGVFcnJvcigiS2V5ZnJhbWUgb2Zmc2V0cyBtdXN0IGJlIG51bWJlcnMuIik7aWYoZjwwfHxmPjEpdGhyb3cgbmV3IFR5cGVFcnJvcigiS2V5ZnJhbWUgb2Zmc2V0cyBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMS4iKX19ZWxzZSBpZigiY29tcG9zaXRlIj09ZCl7aWYoImFkZCI9PWZ8fCJhY2N1bXVsYXRlIj09Zil0aHJvd3t0eXBlOkRPTUV4Y2VwdGlvbi5OT1RfU1VQUE9SVEVEX0VSUixuYW1lOiJOb3RTdXBwb3J0ZWRFcnJvciIsbWVzc2FnZToiYWRkIGNvbXBvc2l0aW5nIGlzIG5vdCBzdXBwb3J0ZWQifTtpZigicmVwbGFjZSIhPWYpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBjb21wb3NpdGUgbW9kZSAiK2YrIi4iKX1lbHNlIGY9ImVhc2luZyI9PWQ/YS5ub3JtYWxpemVFYXNpbmcoZik6IiIrZjtlKGQsZixjKX1yZXR1cm4gdm9pZCAwPT1jLm9mZnNldCYmKGMub2Zmc2V0PW51bGwpLHZvaWQgMD09Yy5lYXNpbmcmJihjLmVhc2luZz0ibGluZWFyIiksY30pLGc9ITAsaD0tMS8wLGk9MDtpPGQubGVuZ3RoO2krKyl7dmFyIGo9ZFtpXS5vZmZzZXQ7aWYobnVsbCE9ail7aWYoajxoKXRocm93IG5ldyBUeXBlRXJyb3IoIktleWZyYW1lcyBhcmUgbm90IGxvb3NlbHkgc29ydGVkIGJ5IG9mZnNldC4gU29ydCBvciBzcGVjaWZ5IG9mZnNldHMuIik7aD1qfWVsc2UgZz0hMX1yZXR1cm4gZD1kLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4gYS5vZmZzZXQ+PTAmJmEub2Zmc2V0PD0xfSksZ3x8YygpLGR9dmFyIGg9e2JhY2tncm91bmQ6WyJiYWNrZ3JvdW5kSW1hZ2UiLCJiYWNrZ3JvdW5kUG9zaXRpb24iLCJiYWNrZ3JvdW5kU2l6ZSIsImJhY2tncm91bmRSZXBlYXQiLCJiYWNrZ3JvdW5kQXR0YWNobWVudCIsImJhY2tncm91bmRPcmlnaW4iLCJiYWNrZ3JvdW5kQ2xpcCIsImJhY2tncm91bmRDb2xvciJdLGJvcmRlcjpbImJvcmRlclRvcENvbG9yIiwiYm9yZGVyVG9wU3R5bGUiLCJib3JkZXJUb3BXaWR0aCIsImJvcmRlclJpZ2h0Q29sb3IiLCJib3JkZXJSaWdodFN0eWxlIiwiYm9yZGVyUmlnaHRXaWR0aCIsImJvcmRlckJvdHRvbUNvbG9yIiwiYm9yZGVyQm90dG9tU3R5bGUiLCJib3JkZXJCb3R0b21XaWR0aCIsImJvcmRlckxlZnRDb2xvciIsImJvcmRlckxlZnRTdHlsZSIsImJvcmRlckxlZnRXaWR0aCJdLGJvcmRlckJvdHRvbTpbImJvcmRlckJvdHRvbVdpZHRoIiwiYm9yZGVyQm90dG9tU3R5bGUiLCJib3JkZXJCb3R0b21Db2xvciJdLGJvcmRlckNvbG9yOlsiYm9yZGVyVG9wQ29sb3IiLCJib3JkZXJSaWdodENvbG9yIiwiYm9yZGVyQm90dG9tQ29sb3IiLCJib3JkZXJMZWZ0Q29sb3IiXSxib3JkZXJMZWZ0OlsiYm9yZGVyTGVmdFdpZHRoIiwiYm9yZGVyTGVmdFN0eWxlIiwiYm9yZGVyTGVmdENvbG9yIl0sYm9yZGVyUmFkaXVzOlsiYm9yZGVyVG9wTGVmdFJhZGl1cyIsImJvcmRlclRvcFJpZ2h0UmFkaXVzIiwiYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMiLCJib3JkZXJCb3R0b21MZWZ0UmFkaXVzIl0sYm9yZGVyUmlnaHQ6WyJib3JkZXJSaWdodFdpZHRoIiwiYm9yZGVyUmlnaHRTdHlsZSIsImJvcmRlclJpZ2h0Q29sb3IiXSxib3JkZXJUb3A6WyJib3JkZXJUb3BXaWR0aCIsImJvcmRlclRvcFN0eWxlIiwiYm9yZGVyVG9wQ29sb3IiXSxib3JkZXJXaWR0aDpbImJvcmRlclRvcFdpZHRoIiwiYm9yZGVyUmlnaHRXaWR0aCIsImJvcmRlckJvdHRvbVdpZHRoIiwiYm9yZGVyTGVmdFdpZHRoIl0sZmxleDpbImZsZXhHcm93IiwiZmxleFNocmluayIsImZsZXhCYXNpcyJdLGZvbnQ6WyJmb250RmFtaWx5IiwiZm9udFNpemUiLCJmb250U3R5bGUiLCJmb250VmFyaWFudCIsImZvbnRXZWlnaHQiLCJsaW5lSGVpZ2h0Il0sbWFyZ2luOlsibWFyZ2luVG9wIiwibWFyZ2luUmlnaHQiLCJtYXJnaW5Cb3R0b20iLCJtYXJnaW5MZWZ0Il0sb3V0bGluZTpbIm91dGxpbmVDb2xvciIsIm91dGxpbmVTdHlsZSIsIm91dGxpbmVXaWR0aCJdLHBhZGRpbmc6WyJwYWRkaW5nVG9wIiwicGFkZGluZ1JpZ2h0IiwicGFkZGluZ0JvdHRvbSIsInBhZGRpbmdMZWZ0Il19LGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiZGl2Iiksaj17dGhpbjoiMXB4IixtZWRpdW06IjNweCIsdGhpY2s6IjVweCJ9LGs9e2JvcmRlckJvdHRvbVdpZHRoOmosYm9yZGVyTGVmdFdpZHRoOmosYm9yZGVyUmlnaHRXaWR0aDpqLGJvcmRlclRvcFdpZHRoOmosZm9udFNpemU6eyJ4eC1zbWFsbCI6IjYwJSIsIngtc21hbGwiOiI3NSUiLHNtYWxsOiI4OSUiLG1lZGl1bToiMTAwJSIsbGFyZ2U6IjEyMCUiLCJ4LWxhcmdlIjoiMTUwJSIsInh4LWxhcmdlIjoiMjAwJSJ9LGZvbnRXZWlnaHQ6e25vcm1hbDoiNDAwIixib2xkOiI3MDAifSxvdXRsaW5lV2lkdGg6aix0ZXh0U2hhZG93Ontub25lOiIwcHggMHB4IDBweCB0cmFuc3BhcmVudCJ9LGJveFNoYWRvdzp7bm9uZToiMHB4IDBweCAwcHggMHB4IHRyYW5zcGFyZW50In19O2EuY29udmVydFRvQXJyYXlGb3JtPWYsYS5ub3JtYWxpemVLZXlmcmFtZXM9Z30oYSksZnVuY3Rpb24oYSl7dmFyIGI9e307YS5pc0RlcHJlY2F0ZWQ9ZnVuY3Rpb24oYSxjLGQsZSl7dmFyIGY9ZT8iYXJlIjoiaXMiLGc9bmV3IERhdGUsaD1uZXcgRGF0ZShjKTtyZXR1cm4gaC5zZXRNb250aChoLmdldE1vbnRoKCkrMyksIShnPGgmJihhIGluIGJ8fGNvbnNvbGUud2FybigiV2ViIEFuaW1hdGlvbnM6ICIrYSsiICIrZisiIGRlcHJlY2F0ZWQgYW5kIHdpbGwgc3RvcCB3b3JraW5nIG9uICIraC50b0RhdGVTdHJpbmcoKSsiLiAiK2QpLGJbYV09ITAsMSkpfSxhLmRlcHJlY2F0ZWQ9ZnVuY3Rpb24oYixjLGQsZSl7dmFyIGY9ZT8iYXJlIjoiaXMiO2lmKGEuaXNEZXByZWNhdGVkKGIsYyxkLGUpKXRocm93IG5ldyBFcnJvcihiKyIgIitmKyIgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gIitkKX19KGEpLGZ1bmN0aW9uKCl7aWYoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFuaW1hdGUpe3ZhciBjPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hbmltYXRlKFtdLDApLGQ9ITA7aWYoYyYmKGQ9ITEsInBsYXl8Y3VycmVudFRpbWV8cGF1c2V8cmV2ZXJzZXxwbGF5YmFja1JhdGV8Y2FuY2VsfGZpbmlzaHxzdGFydFRpbWV8cGxheVN0YXRlIi5zcGxpdCgifCIpLmZvckVhY2goZnVuY3Rpb24oYSl7dm9pZCAwPT09Y1thXSYmKGQ9ITApfSkpLCFkKXJldHVybn0hZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYSl7Zm9yKHZhciBiPXt9LGM9MDtjPGEubGVuZ3RoO2MrKylmb3IodmFyIGQgaW4gYVtjXSlpZigib2Zmc2V0IiE9ZCYmImVhc2luZyIhPWQmJiJjb21wb3NpdGUiIT1kKXt2YXIgZT17b2Zmc2V0OmFbY10ub2Zmc2V0LGVhc2luZzphW2NdLmVhc2luZyx2YWx1ZTphW2NdW2RdfTtiW2RdPWJbZF18fFtdLGJbZF0ucHVzaChlKX1mb3IodmFyIGYgaW4gYil7dmFyIGc9YltmXTtpZigwIT1nWzBdLm9mZnNldHx8MSE9Z1tnLmxlbmd0aC0xXS5vZmZzZXQpdGhyb3d7dHlwZTpET01FeGNlcHRpb24uTk9UX1NVUFBPUlRFRF9FUlIsbmFtZToiTm90U3VwcG9ydGVkRXJyb3IiLG1lc3NhZ2U6IlBhcnRpYWwga2V5ZnJhbWVzIGFyZSBub3Qgc3VwcG9ydGVkIn19cmV0dXJuIGJ9ZnVuY3Rpb24gZShjKXt2YXIgZD1bXTtmb3IodmFyIGUgaW4gYylmb3IodmFyIGY9Y1tlXSxnPTA7ZzxmLmxlbmd0aC0xO2crKyl7dmFyIGg9ZyxpPWcrMSxqPWZbaF0ub2Zmc2V0LGs9ZltpXS5vZmZzZXQsbD1qLG09azswPT1nJiYobD0tMS8wLDA9PWsmJihpPWgpKSxnPT1mLmxlbmd0aC0yJiYobT0xLzAsMT09aiYmKGg9aSkpLGQucHVzaCh7YXBwbHlGcm9tOmwsYXBwbHlUbzptLHN0YXJ0T2Zmc2V0OmZbaF0ub2Zmc2V0LGVuZE9mZnNldDpmW2ldLm9mZnNldCxlYXNpbmdGdW5jdGlvbjphLnBhcnNlRWFzaW5nRnVuY3Rpb24oZltoXS5lYXNpbmcpLHByb3BlcnR5OmUsaW50ZXJwb2xhdGlvbjpiLnByb3BlcnR5SW50ZXJwb2xhdGlvbihlLGZbaF0udmFsdWUsZltpXS52YWx1ZSl9KX1yZXR1cm4gZC5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuc3RhcnRPZmZzZXQtYi5zdGFydE9mZnNldH0pLGR9Yi5jb252ZXJ0RWZmZWN0SW5wdXQ9ZnVuY3Rpb24oYyl7dmFyIGY9YS5ub3JtYWxpemVLZXlmcmFtZXMoYyksZz1kKGYpLGg9ZShnKTtyZXR1cm4gZnVuY3Rpb24oYSxjKXtpZihudWxsIT1jKWguZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBjPj1hLmFwcGx5RnJvbSYmYzxhLmFwcGx5VG99KS5mb3JFYWNoKGZ1bmN0aW9uKGQpe3ZhciBlPWMtZC5zdGFydE9mZnNldCxmPWQuZW5kT2Zmc2V0LWQuc3RhcnRPZmZzZXQsZz0wPT1mPzA6ZC5lYXNpbmdGdW5jdGlvbihlL2YpO2IuYXBwbHkoYSxkLnByb3BlcnR5LGQuaW50ZXJwb2xhdGlvbihnKSl9KTtlbHNlIGZvcih2YXIgZCBpbiBnKSJvZmZzZXQiIT1kJiYiZWFzaW5nIiE9ZCYmImNvbXBvc2l0ZSIhPWQmJmIuY2xlYXIoYSxkKX19fShhLGIpLGZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEpe3JldHVybiBhLnJlcGxhY2UoLy0oLikvZyxmdW5jdGlvbihhLGIpe3JldHVybiBiLnRvVXBwZXJDYXNlKCl9KX1mdW5jdGlvbiBlKGEsYixjKXtoW2NdPWhbY118fFtdLGhbY10ucHVzaChbYSxiXSl9ZnVuY3Rpb24gZihhLGIsYyl7Zm9yKHZhciBmPTA7ZjxjLmxlbmd0aDtmKyspe2UoYSxiLGQoY1tmXSkpfX1mdW5jdGlvbiBnKGMsZSxmKXt2YXIgZz1jOy8tLy50ZXN0KGMpJiYhYS5pc0RlcHJlY2F0ZWQoIkh5cGhlbmF0ZWQgcHJvcGVydHkgbmFtZXMiLCIyMDE2LTAzLTIyIiwiVXNlIGNhbWVsQ2FzZSBpbnN0ZWFkLiIsITApJiYoZz1kKGMpKSwiaW5pdGlhbCIhPWUmJiJpbml0aWFsIiE9Znx8KCJpbml0aWFsIj09ZSYmKGU9aVtnXSksImluaXRpYWwiPT1mJiYoZj1pW2ddKSk7Zm9yKHZhciBqPWU9PWY/W106aFtnXSxrPTA7aiYmazxqLmxlbmd0aDtrKyspe3ZhciBsPWpba11bMF0oZSksbT1qW2tdWzBdKGYpO2lmKHZvaWQgMCE9PWwmJnZvaWQgMCE9PW0pe3ZhciBuPWpba11bMV0obCxtKTtpZihuKXt2YXIgbz1iLkludGVycG9sYXRpb24uYXBwbHkobnVsbCxuKTtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIDA9PWE/ZToxPT1hP2Y6byhhKX19fX1yZXR1cm4gYi5JbnRlcnBvbGF0aW9uKCExLCEwLGZ1bmN0aW9uKGEpe3JldHVybiBhP2Y6ZX0pfXZhciBoPXt9O2IuYWRkUHJvcGVydGllc0hhbmRsZXI9Zjt2YXIgaT17YmFja2dyb3VuZENvbG9yOiJ0cmFuc3BhcmVudCIsYmFja2dyb3VuZFBvc2l0aW9uOiIwJSAwJSIsYm9yZGVyQm90dG9tQ29sb3I6ImN1cnJlbnRDb2xvciIsYm9yZGVyQm90dG9tTGVmdFJhZGl1czoiMHB4Iixib3JkZXJCb3R0b21SaWdodFJhZGl1czoiMHB4Iixib3JkZXJCb3R0b21XaWR0aDoiM3B4Iixib3JkZXJMZWZ0Q29sb3I6ImN1cnJlbnRDb2xvciIsYm9yZGVyTGVmdFdpZHRoOiIzcHgiLGJvcmRlclJpZ2h0Q29sb3I6ImN1cnJlbnRDb2xvciIsYm9yZGVyUmlnaHRXaWR0aDoiM3B4Iixib3JkZXJTcGFjaW5nOiIycHgiLGJvcmRlclRvcENvbG9yOiJjdXJyZW50Q29sb3IiLGJvcmRlclRvcExlZnRSYWRpdXM6IjBweCIsYm9yZGVyVG9wUmlnaHRSYWRpdXM6IjBweCIsYm9yZGVyVG9wV2lkdGg6IjNweCIsYm90dG9tOiJhdXRvIixjbGlwOiJyZWN0KDBweCwgMHB4LCAwcHgsIDBweCkiLGNvbG9yOiJibGFjayIsZm9udFNpemU6IjEwMCUiLGZvbnRXZWlnaHQ6IjQwMCIsaGVpZ2h0OiJhdXRvIixsZWZ0OiJhdXRvIixsZXR0ZXJTcGFjaW5nOiJub3JtYWwiLGxpbmVIZWlnaHQ6IjEyMCUiLG1hcmdpbkJvdHRvbToiMHB4IixtYXJnaW5MZWZ0OiIwcHgiLG1hcmdpblJpZ2h0OiIwcHgiLG1hcmdpblRvcDoiMHB4IixtYXhIZWlnaHQ6Im5vbmUiLG1heFdpZHRoOiJub25lIixtaW5IZWlnaHQ6IjBweCIsbWluV2lkdGg6IjBweCIsb3BhY2l0eToiMS4wIixvdXRsaW5lQ29sb3I6ImludmVydCIsb3V0bGluZU9mZnNldDoiMHB4IixvdXRsaW5lV2lkdGg6IjNweCIscGFkZGluZ0JvdHRvbToiMHB4IixwYWRkaW5nTGVmdDoiMHB4IixwYWRkaW5nUmlnaHQ6IjBweCIscGFkZGluZ1RvcDoiMHB4IixyaWdodDoiYXV0byIsc3Ryb2tlRGFzaGFycmF5OiJub25lIixzdHJva2VEYXNob2Zmc2V0OiIwcHgiLHRleHRJbmRlbnQ6IjBweCIsdGV4dFNoYWRvdzoiMHB4IDBweCAwcHggdHJhbnNwYXJlbnQiLHRvcDoiYXV0byIsdHJhbnNmb3JtOiIiLHZlcnRpY2FsQWxpZ246IjBweCIsdmlzaWJpbGl0eToidmlzaWJsZSIsd2lkdGg6ImF1dG8iLHdvcmRTcGFjaW5nOiJub3JtYWwiLHpJbmRleDoiYXV0byJ9O2IucHJvcGVydHlJbnRlcnBvbGF0aW9uPWd9KGEsYiksZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYil7dmFyIGM9YS5jYWxjdWxhdGVBY3RpdmVEdXJhdGlvbihiKSxkPWZ1bmN0aW9uKGQpe3JldHVybiBhLmNhbGN1bGF0ZUl0ZXJhdGlvblByb2dyZXNzKGMsZCxiKX07cmV0dXJuIGQuX3RvdGFsRHVyYXRpb249Yi5kZWxheStjK2IuZW5kRGVsYXksZH1iLktleWZyYW1lRWZmZWN0PWZ1bmN0aW9uKGMsZSxmLGcpe3ZhciBoLGk9ZChhLm5vcm1hbGl6ZVRpbWluZ0lucHV0KGYpKSxqPWIuY29udmVydEVmZmVjdElucHV0KGUpLGs9ZnVuY3Rpb24oKXtqKGMsaCl9O3JldHVybiBrLl91cGRhdGU9ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGwhPT0oaD1pKGEpKX0say5fY2xlYXI9ZnVuY3Rpb24oKXtqKGMsbnVsbCl9LGsuX2hhc1NhbWVUYXJnZXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGM9PT1hfSxrLl90YXJnZXQ9YyxrLl90b3RhbER1cmF0aW9uPWkuX3RvdGFsRHVyYXRpb24say5faWQ9ZyxrfX0oYSxiKSxmdW5jdGlvbihhLGIpe2EuYXBwbHk9ZnVuY3Rpb24oYixjLGQpe2Iuc3R5bGVbYS5wcm9wZXJ0eU5hbWUoYyldPWR9LGEuY2xlYXI9ZnVuY3Rpb24oYixjKXtiLnN0eWxlW2EucHJvcGVydHlOYW1lKGMpXT0iIn19KGIpLGZ1bmN0aW9uKGEpe3dpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKGIsYyl7dmFyIGQ9IiI7cmV0dXJuIGMmJmMuaWQmJihkPWMuaWQpLGEudGltZWxpbmUuX3BsYXkoYS5LZXlmcmFtZUVmZmVjdCh0aGlzLGIsYyxkKSl9fShiKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSxiLGQpe2lmKCJudW1iZXIiPT10eXBlb2YgYSYmIm51bWJlciI9PXR5cGVvZiBiKXJldHVybiBhKigxLWQpK2IqZDtpZigiYm9vbGVhbiI9PXR5cGVvZiBhJiYiYm9vbGVhbiI9PXR5cGVvZiBiKXJldHVybiBkPC41P2E6YjtpZihhLmxlbmd0aD09Yi5sZW5ndGgpe2Zvcih2YXIgZT1bXSxmPTA7ZjxhLmxlbmd0aDtmKyspZS5wdXNoKGMoYVtmXSxiW2ZdLGQpKTtyZXR1cm4gZX10aHJvdyJNaXNtYXRjaGVkIGludGVycG9sYXRpb24gYXJndW1lbnRzICIrYSsiOiIrYn1hLkludGVycG9sYXRpb249ZnVuY3Rpb24oYSxiLGQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZChjKGEsYixlKSl9fX0oYiksZnVuY3Rpb24oYSxiLGMpe2Euc2VxdWVuY2VOdW1iZXI9MDt2YXIgZD1mdW5jdGlvbihhLGIsYyl7dGhpcy50YXJnZXQ9YSx0aGlzLmN1cnJlbnRUaW1lPWIsdGhpcy50aW1lbGluZVRpbWU9Yyx0aGlzLnR5cGU9ImZpbmlzaCIsdGhpcy5idWJibGVzPSExLHRoaXMuY2FuY2VsYWJsZT0hMSx0aGlzLmN1cnJlbnRUYXJnZXQ9YSx0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITEsdGhpcy5ldmVudFBoYXNlPUV2ZW50LkFUX1RBUkdFVCx0aGlzLnRpbWVTdGFtcD1EYXRlLm5vdygpfTtiLkFuaW1hdGlvbj1mdW5jdGlvbihiKXt0aGlzLmlkPSIiLGImJmIuX2lkJiYodGhpcy5pZD1iLl9pZCksdGhpcy5fc2VxdWVuY2VOdW1iZXI9YS5zZXF1ZW5jZU51bWJlcisrLHRoaXMuX2N1cnJlbnRUaW1lPTAsdGhpcy5fc3RhcnRUaW1lPW51bGwsdGhpcy5fcGF1c2VkPSExLHRoaXMuX3BsYXliYWNrUmF0ZT0xLHRoaXMuX2luVGltZWxpbmU9ITAsdGhpcy5fZmluaXNoZWRGbGFnPSEwLHRoaXMub25maW5pc2g9bnVsbCx0aGlzLl9maW5pc2hIYW5kbGVycz1bXSx0aGlzLl9lZmZlY3Q9Yix0aGlzLl9pbkVmZmVjdD10aGlzLl9lZmZlY3QuX3VwZGF0ZSgwKSx0aGlzLl9pZGxlPSEwLHRoaXMuX2N1cnJlbnRUaW1lUGVuZGluZz0hMX0sYi5BbmltYXRpb24ucHJvdG90eXBlPXtfZW5zdXJlQWxpdmU6ZnVuY3Rpb24oKXt0aGlzLnBsYXliYWNrUmF0ZTwwJiYwPT09dGhpcy5jdXJyZW50VGltZT90aGlzLl9pbkVmZmVjdD10aGlzLl9lZmZlY3QuX3VwZGF0ZSgtMSk6dGhpcy5faW5FZmZlY3Q9dGhpcy5fZWZmZWN0Ll91cGRhdGUodGhpcy5jdXJyZW50VGltZSksdGhpcy5faW5UaW1lbGluZXx8IXRoaXMuX2luRWZmZWN0JiZ0aGlzLl9maW5pc2hlZEZsYWd8fCh0aGlzLl9pblRpbWVsaW5lPSEwLGIudGltZWxpbmUuX2FuaW1hdGlvbnMucHVzaCh0aGlzKSl9LF90aWNrQ3VycmVudFRpbWU6ZnVuY3Rpb24oYSxiKXthIT10aGlzLl9jdXJyZW50VGltZSYmKHRoaXMuX2N1cnJlbnRUaW1lPWEsdGhpcy5faXNGaW5pc2hlZCYmIWImJih0aGlzLl9jdXJyZW50VGltZT10aGlzLl9wbGF5YmFja1JhdGU+MD90aGlzLl90b3RhbER1cmF0aW9uOjApLHRoaXMuX2Vuc3VyZUFsaXZlKCkpfSxnZXQgY3VycmVudFRpbWUoKXtyZXR1cm4gdGhpcy5faWRsZXx8dGhpcy5fY3VycmVudFRpbWVQZW5kaW5nP251bGw6dGhpcy5fY3VycmVudFRpbWV9LHNldCBjdXJyZW50VGltZShhKXthPSthLGlzTmFOKGEpfHwoYi5yZXN0YXJ0KCksdGhpcy5fcGF1c2VkfHxudWxsPT10aGlzLl9zdGFydFRpbWV8fCh0aGlzLl9zdGFydFRpbWU9dGhpcy5fdGltZWxpbmUuY3VycmVudFRpbWUtYS90aGlzLl9wbGF5YmFja1JhdGUpLHRoaXMuX2N1cnJlbnRUaW1lUGVuZGluZz0hMSx0aGlzLl9jdXJyZW50VGltZSE9YSYmKHRoaXMuX2lkbGUmJih0aGlzLl9pZGxlPSExLHRoaXMuX3BhdXNlZD0hMCksdGhpcy5fdGlja0N1cnJlbnRUaW1lKGEsITApLGIuYXBwbHlEaXJ0aWVkQW5pbWF0aW9uKHRoaXMpKSl9LGdldCBzdGFydFRpbWUoKXtyZXR1cm4gdGhpcy5fc3RhcnRUaW1lfSxzZXQgc3RhcnRUaW1lKGEpe2E9K2EsaXNOYU4oYSl8fHRoaXMuX3BhdXNlZHx8dGhpcy5faWRsZXx8KHRoaXMuX3N0YXJ0VGltZT1hLHRoaXMuX3RpY2tDdXJyZW50VGltZSgodGhpcy5fdGltZWxpbmUuY3VycmVudFRpbWUtdGhpcy5fc3RhcnRUaW1lKSp0aGlzLnBsYXliYWNrUmF0ZSksYi5hcHBseURpcnRpZWRBbmltYXRpb24odGhpcykpfSxnZXQgcGxheWJhY2tSYXRlKCl7cmV0dXJuIHRoaXMuX3BsYXliYWNrUmF0ZX0sc2V0IHBsYXliYWNrUmF0ZShhKXtpZihhIT10aGlzLl9wbGF5YmFja1JhdGUpe3ZhciBjPXRoaXMuY3VycmVudFRpbWU7dGhpcy5fcGxheWJhY2tSYXRlPWEsdGhpcy5fc3RhcnRUaW1lPW51bGwsInBhdXNlZCIhPXRoaXMucGxheVN0YXRlJiYiaWRsZSIhPXRoaXMucGxheVN0YXRlJiYodGhpcy5fZmluaXNoZWRGbGFnPSExLHRoaXMuX2lkbGU9ITEsdGhpcy5fZW5zdXJlQWxpdmUoKSxiLmFwcGx5RGlydGllZEFuaW1hdGlvbih0aGlzKSksbnVsbCE9YyYmKHRoaXMuY3VycmVudFRpbWU9Yyl9fSxnZXQgX2lzRmluaXNoZWQoKXtyZXR1cm4hdGhpcy5faWRsZSYmKHRoaXMuX3BsYXliYWNrUmF0ZT4wJiZ0aGlzLl9jdXJyZW50VGltZT49dGhpcy5fdG90YWxEdXJhdGlvbnx8dGhpcy5fcGxheWJhY2tSYXRlPDAmJnRoaXMuX2N1cnJlbnRUaW1lPD0wKX0sZ2V0IF90b3RhbER1cmF0aW9uKCl7cmV0dXJuIHRoaXMuX2VmZmVjdC5fdG90YWxEdXJhdGlvbn0sZ2V0IHBsYXlTdGF0ZSgpe3JldHVybiB0aGlzLl9pZGxlPyJpZGxlIjpudWxsPT10aGlzLl9zdGFydFRpbWUmJiF0aGlzLl9wYXVzZWQmJjAhPXRoaXMucGxheWJhY2tSYXRlfHx0aGlzLl9jdXJyZW50VGltZVBlbmRpbmc/InBlbmRpbmciOnRoaXMuX3BhdXNlZD8icGF1c2VkIjp0aGlzLl9pc0ZpbmlzaGVkPyJmaW5pc2hlZCI6InJ1bm5pbmcifSxfcmV3aW5kOmZ1bmN0aW9uKCl7aWYodGhpcy5fcGxheWJhY2tSYXRlPj0wKXRoaXMuX2N1cnJlbnRUaW1lPTA7ZWxzZXtpZighKHRoaXMuX3RvdGFsRHVyYXRpb248MS8wKSl0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCJVbmFibGUgdG8gcmV3aW5kIG5lZ2F0aXZlIHBsYXliYWNrIHJhdGUgYW5pbWF0aW9uIHdpdGggaW5maW5pdGUgZHVyYXRpb24iLCJJbnZhbGlkU3RhdGVFcnJvciIpO3RoaXMuX2N1cnJlbnRUaW1lPXRoaXMuX3RvdGFsRHVyYXRpb259fSxwbGF5OmZ1bmN0aW9uKCl7dGhpcy5fcGF1c2VkPSExLCh0aGlzLl9pc0ZpbmlzaGVkfHx0aGlzLl9pZGxlKSYmKHRoaXMuX3Jld2luZCgpLHRoaXMuX3N0YXJ0VGltZT1udWxsKSx0aGlzLl9maW5pc2hlZEZsYWc9ITEsdGhpcy5faWRsZT0hMSx0aGlzLl9lbnN1cmVBbGl2ZSgpLGIuYXBwbHlEaXJ0aWVkQW5pbWF0aW9uKHRoaXMpfSxwYXVzZTpmdW5jdGlvbigpe3RoaXMuX2lzRmluaXNoZWR8fHRoaXMuX3BhdXNlZHx8dGhpcy5faWRsZT90aGlzLl9pZGxlJiYodGhpcy5fcmV3aW5kKCksdGhpcy5faWRsZT0hMSk6dGhpcy5fY3VycmVudFRpbWVQZW5kaW5nPSEwLHRoaXMuX3N0YXJ0VGltZT1udWxsLHRoaXMuX3BhdXNlZD0hMH0sZmluaXNoOmZ1bmN0aW9uKCl7dGhpcy5faWRsZXx8KHRoaXMuY3VycmVudFRpbWU9dGhpcy5fcGxheWJhY2tSYXRlPjA/dGhpcy5fdG90YWxEdXJhdGlvbjowLHRoaXMuX3N0YXJ0VGltZT10aGlzLl90b3RhbER1cmF0aW9uLXRoaXMuY3VycmVudFRpbWUsdGhpcy5fY3VycmVudFRpbWVQZW5kaW5nPSExLGIuYXBwbHlEaXJ0aWVkQW5pbWF0aW9uKHRoaXMpKX0sY2FuY2VsOmZ1bmN0aW9uKCl7dGhpcy5faW5FZmZlY3QmJih0aGlzLl9pbkVmZmVjdD0hMSx0aGlzLl9pZGxlPSEwLHRoaXMuX3BhdXNlZD0hMSx0aGlzLl9maW5pc2hlZEZsYWc9ITAsdGhpcy5fY3VycmVudFRpbWU9MCx0aGlzLl9zdGFydFRpbWU9bnVsbCx0aGlzLl9lZmZlY3QuX3VwZGF0ZShudWxsKSxiLmFwcGx5RGlydGllZEFuaW1hdGlvbih0aGlzKSl9LHJldmVyc2U6ZnVuY3Rpb24oKXt0aGlzLnBsYXliYWNrUmF0ZSo9LTEsdGhpcy5wbGF5KCl9LGFkZEV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxiKXsiZnVuY3Rpb24iPT10eXBlb2YgYiYmImZpbmlzaCI9PWEmJnRoaXMuX2ZpbmlzaEhhbmRsZXJzLnB1c2goYil9LHJlbW92ZUV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxiKXtpZigiZmluaXNoIj09YSl7dmFyIGM9dGhpcy5fZmluaXNoSGFuZGxlcnMuaW5kZXhPZihiKTtjPj0wJiZ0aGlzLl9maW5pc2hIYW5kbGVycy5zcGxpY2UoYywxKX19LF9maXJlRXZlbnRzOmZ1bmN0aW9uKGEpe2lmKHRoaXMuX2lzRmluaXNoZWQpe2lmKCF0aGlzLl9maW5pc2hlZEZsYWcpe3ZhciBiPW5ldyBkKHRoaXMsdGhpcy5fY3VycmVudFRpbWUsYSksYz10aGlzLl9maW5pc2hIYW5kbGVycy5jb25jYXQodGhpcy5vbmZpbmlzaD9bdGhpcy5vbmZpbmlzaF06W10pO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtjLmZvckVhY2goZnVuY3Rpb24oYSl7YS5jYWxsKGIudGFyZ2V0LGIpfSl9LDApLHRoaXMuX2ZpbmlzaGVkRmxhZz0hMH19ZWxzZSB0aGlzLl9maW5pc2hlZEZsYWc9ITF9LF90aWNrOmZ1bmN0aW9uKGEsYil7dGhpcy5faWRsZXx8dGhpcy5fcGF1c2VkfHwobnVsbD09dGhpcy5fc3RhcnRUaW1lP2ImJih0aGlzLnN0YXJ0VGltZT1hLXRoaXMuX2N1cnJlbnRUaW1lL3RoaXMucGxheWJhY2tSYXRlKTp0aGlzLl9pc0ZpbmlzaGVkfHx0aGlzLl90aWNrQ3VycmVudFRpbWUoKGEtdGhpcy5fc3RhcnRUaW1lKSp0aGlzLnBsYXliYWNrUmF0ZSkpLGImJih0aGlzLl9jdXJyZW50VGltZVBlbmRpbmc9ITEsdGhpcy5fZmlyZUV2ZW50cyhhKSl9LGdldCBfbmVlZHNUaWNrKCl7cmV0dXJuIHRoaXMucGxheVN0YXRlIGlue3BlbmRpbmc6MSxydW5uaW5nOjF9fHwhdGhpcy5fZmluaXNoZWRGbGFnfSxfdGFyZ2V0QW5pbWF0aW9uczpmdW5jdGlvbigpe3ZhciBhPXRoaXMuX2VmZmVjdC5fdGFyZ2V0O3JldHVybiBhLl9hY3RpdmVBbmltYXRpb25zfHwoYS5fYWN0aXZlQW5pbWF0aW9ucz1bXSksYS5fYWN0aXZlQW5pbWF0aW9uc30sX21hcmtUYXJnZXQ6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl90YXJnZXRBbmltYXRpb25zKCk7LTE9PT1hLmluZGV4T2YodGhpcykmJmEucHVzaCh0aGlzKX0sX3VubWFya1RhcmdldDpmdW5jdGlvbigpe3ZhciBhPXRoaXMuX3RhcmdldEFuaW1hdGlvbnMoKSxiPWEuaW5kZXhPZih0aGlzKTstMSE9PWImJmEuc3BsaWNlKGIsMSl9fX0oYSxiKSxmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZChhKXt2YXIgYj1qO2o9W10sYTxxLmN1cnJlbnRUaW1lJiYoYT1xLmN1cnJlbnRUaW1lKSxxLl9hbmltYXRpb25zLnNvcnQoZSkscS5fYW5pbWF0aW9ucz1oKGEsITAscS5fYW5pbWF0aW9ucylbMF0sYi5mb3JFYWNoKGZ1bmN0aW9uKGIpe2JbMV0oYSl9KSxnKCksbD12b2lkIDB9ZnVuY3Rpb24gZShhLGIpe3JldHVybiBhLl9zZXF1ZW5jZU51bWJlci1iLl9zZXF1ZW5jZU51bWJlcn1mdW5jdGlvbiBmKCl7dGhpcy5fYW5pbWF0aW9ucz1bXSx0aGlzLmN1cnJlbnRUaW1lPXdpbmRvdy5wZXJmb3JtYW5jZSYmcGVyZm9ybWFuY2Uubm93P3BlcmZvcm1hbmNlLm5vdygpOjB9ZnVuY3Rpb24gZygpe28uZm9yRWFjaChmdW5jdGlvbihhKXthKCl9KSxvLmxlbmd0aD0wfWZ1bmN0aW9uIGgoYSxjLGQpe3A9ITAsbj0hMSxiLnRpbWVsaW5lLmN1cnJlbnRUaW1lPWEsbT0hMTt2YXIgZT1bXSxmPVtdLGc9W10saD1bXTtyZXR1cm4gZC5mb3JFYWNoKGZ1bmN0aW9uKGIpe2IuX3RpY2soYSxjKSxiLl9pbkVmZmVjdD8oZi5wdXNoKGIuX2VmZmVjdCksYi5fbWFya1RhcmdldCgpKTooZS5wdXNoKGIuX2VmZmVjdCksYi5fdW5tYXJrVGFyZ2V0KCkpLGIuX25lZWRzVGljayYmKG09ITApO3ZhciBkPWIuX2luRWZmZWN0fHxiLl9uZWVkc1RpY2s7Yi5faW5UaW1lbGluZT1kLGQ/Zy5wdXNoKGIpOmgucHVzaChiKX0pLG8ucHVzaC5hcHBseShvLGUpLG8ucHVzaC5hcHBseShvLGYpLG0mJnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe30pLHA9ITEsW2csaF19dmFyIGk9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSxqPVtdLGs9MDt3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lPWZ1bmN0aW9uKGEpe3ZhciBiPWsrKztyZXR1cm4gMD09ai5sZW5ndGgmJmkoZCksai5wdXNoKFtiLGFdKSxifSx3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWU9ZnVuY3Rpb24oYSl7ai5mb3JFYWNoKGZ1bmN0aW9uKGIpe2JbMF09PWEmJihiWzFdPWZ1bmN0aW9uKCl7fSl9KX0sZi5wcm90b3R5cGU9e19wbGF5OmZ1bmN0aW9uKGMpe2MuX3RpbWluZz1hLm5vcm1hbGl6ZVRpbWluZ0lucHV0KGMudGltaW5nKTt2YXIgZD1uZXcgYi5BbmltYXRpb24oYyk7cmV0dXJuIGQuX2lkbGU9ITEsZC5fdGltZWxpbmU9dGhpcyx0aGlzLl9hbmltYXRpb25zLnB1c2goZCksYi5yZXN0YXJ0KCksYi5hcHBseURpcnRpZWRBbmltYXRpb24oZCksZH19O3ZhciBsPXZvaWQgMCxtPSExLG49ITE7Yi5yZXN0YXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIG18fChtPSEwLHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe30pLG49ITApLG59LGIuYXBwbHlEaXJ0aWVkQW5pbWF0aW9uPWZ1bmN0aW9uKGEpe2lmKCFwKXthLl9tYXJrVGFyZ2V0KCk7dmFyIGM9YS5fdGFyZ2V0QW5pbWF0aW9ucygpO2Muc29ydChlKSxoKGIudGltZWxpbmUuY3VycmVudFRpbWUsITEsYy5zbGljZSgpKVsxXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBiPXEuX2FuaW1hdGlvbnMuaW5kZXhPZihhKTstMSE9PWImJnEuX2FuaW1hdGlvbnMuc3BsaWNlKGIsMSl9KSxnKCl9fTt2YXIgbz1bXSxwPSExLHE9bmV3IGY7Yi50aW1lbGluZT1xfShhLGIpLGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoYSxiKXt2YXIgYz1hLmV4ZWMoYik7aWYoYylyZXR1cm4gYz1hLmlnbm9yZUNhc2U/Y1swXS50b0xvd2VyQ2FzZSgpOmNbMF0sW2MsYi5zdWJzdHIoYy5sZW5ndGgpXX1mdW5jdGlvbiBjKGEsYil7Yj1iLnJlcGxhY2UoL15ccyovLCIiKTt2YXIgYz1hKGIpO2lmKGMpcmV0dXJuW2NbMF0sY1sxXS5yZXBsYWNlKC9eXHMqLywiIildfWZ1bmN0aW9uIGQoYSxkLGUpe2E9Yy5iaW5kKG51bGwsYSk7Zm9yKHZhciBmPVtdOzspe3ZhciBnPWEoZSk7aWYoIWcpcmV0dXJuW2YsZV07aWYoZi5wdXNoKGdbMF0pLGU9Z1sxXSwhKGc9YihkLGUpKXx8IiI9PWdbMV0pcmV0dXJuW2YsZV07ZT1nWzFdfX1mdW5jdGlvbiBlKGEsYil7Zm9yKHZhciBjPTAsZD0wO2Q8Yi5sZW5ndGgmJighL1xzfCwvLnRlc3QoYltkXSl8fDAhPWMpO2QrKylpZigiKCI9PWJbZF0pYysrO2Vsc2UgaWYoIikiPT1iW2RdJiYoYy0tLDA9PWMmJmQrKyxjPD0wKSlicmVhazt2YXIgZT1hKGIuc3Vic3RyKDAsZCkpO3JldHVybiB2b2lkIDA9PWU/dm9pZCAwOltlLGIuc3Vic3RyKGQpXX1mdW5jdGlvbiBmKGEsYil7Zm9yKHZhciBjPWEsZD1iO2MmJmQ7KWM+ZD9jJT1kOmQlPWM7cmV0dXJuIGM9YSpiLyhjK2QpfWZ1bmN0aW9uIGcoYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe3ZhciBjPWEoYik7cmV0dXJuIGMmJihjWzBdPXZvaWQgMCksY319ZnVuY3Rpb24gaChhLGIpe3JldHVybiBmdW5jdGlvbihjKXtyZXR1cm4gYShjKXx8W2IsY119fWZ1bmN0aW9uIGkoYixjKXtmb3IodmFyIGQ9W10sZT0wO2U8Yi5sZW5ndGg7ZSsrKXt2YXIgZj1hLmNvbnN1bWVUcmltbWVkKGJbZV0sYyk7aWYoIWZ8fCIiPT1mWzBdKXJldHVybjt2b2lkIDAhPT1mWzBdJiZkLnB1c2goZlswXSksYz1mWzFdfWlmKCIiPT1jKXJldHVybiBkfWZ1bmN0aW9uIGooYSxiLGMsZCxlKXtmb3IodmFyIGc9W10saD1bXSxpPVtdLGo9ZihkLmxlbmd0aCxlLmxlbmd0aCksaz0wO2s8ajtrKyspe3ZhciBsPWIoZFtrJWQubGVuZ3RoXSxlW2slZS5sZW5ndGhdKTtpZighbClyZXR1cm47Zy5wdXNoKGxbMF0pLGgucHVzaChsWzFdKSxpLnB1c2gobFsyXSl9cmV0dXJuW2csaCxmdW5jdGlvbihiKXt2YXIgZD1iLm1hcChmdW5jdGlvbihhLGIpe3JldHVybiBpW2JdKGEpfSkuam9pbihjKTtyZXR1cm4gYT9hKGQpOmR9XX1mdW5jdGlvbiBrKGEsYixjKXtmb3IodmFyIGQ9W10sZT1bXSxmPVtdLGc9MCxoPTA7aDxjLmxlbmd0aDtoKyspaWYoImZ1bmN0aW9uIj09dHlwZW9mIGNbaF0pe3ZhciBpPWNbaF0oYVtnXSxiW2crK10pO2QucHVzaChpWzBdKSxlLnB1c2goaVsxXSksZi5wdXNoKGlbMl0pfWVsc2UhZnVuY3Rpb24oYSl7ZC5wdXNoKCExKSxlLnB1c2goITEpLGYucHVzaChmdW5jdGlvbigpe3JldHVybiBjW2FdfSl9KGgpO3JldHVybltkLGUsZnVuY3Rpb24oYSl7Zm9yKHZhciBiPSIiLGM9MDtjPGEubGVuZ3RoO2MrKyliKz1mW2NdKGFbY10pO3JldHVybiBifV19YS5jb25zdW1lVG9rZW49YixhLmNvbnN1bWVUcmltbWVkPWMsYS5jb25zdW1lUmVwZWF0ZWQ9ZCxhLmNvbnN1bWVQYXJlbnRoZXNpc2VkPWUsYS5pZ25vcmU9ZyxhLm9wdGlvbmFsPWgsYS5jb25zdW1lTGlzdD1pLGEubWVyZ2VOZXN0ZWRSZXBlYXRlZD1qLmJpbmQobnVsbCxudWxsKSxhLm1lcmdlV3JhcHBlZE5lc3RlZFJlcGVhdGVkPWosYS5tZXJnZUxpc3Q9a30oYiksZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihiKXtmdW5jdGlvbiBjKGIpe3ZhciBjPWEuY29uc3VtZVRva2VuKC9eaW5zZXQvaSxiKTtyZXR1cm4gYz8oZC5pbnNldD0hMCxjKTooYz1hLmNvbnN1bWVMZW5ndGhPclBlcmNlbnQoYikpPyhkLmxlbmd0aHMucHVzaChjWzBdKSxjKTooYz1hLmNvbnN1bWVDb2xvcihiKSxjPyhkLmNvbG9yPWNbMF0sYyk6dm9pZCAwKX12YXIgZD17aW5zZXQ6ITEsbGVuZ3RoczpbXSxjb2xvcjpudWxsfSxlPWEuY29uc3VtZVJlcGVhdGVkKGMsL14vLGIpO2lmKGUmJmVbMF0ubGVuZ3RoKXJldHVybltkLGVbMV1dfWZ1bmN0aW9uIGMoYyl7dmFyIGQ9YS5jb25zdW1lUmVwZWF0ZWQoYiwvXiwvLGMpO2lmKGQmJiIiPT1kWzFdKXJldHVybiBkWzBdfWZ1bmN0aW9uIGQoYixjKXtmb3IoO2IubGVuZ3Rocy5sZW5ndGg8TWF0aC5tYXgoYi5sZW5ndGhzLmxlbmd0aCxjLmxlbmd0aHMubGVuZ3RoKTspYi5sZW5ndGhzLnB1c2goe3B4OjB9KTtmb3IoO2MubGVuZ3Rocy5sZW5ndGg8TWF0aC5tYXgoYi5sZW5ndGhzLmxlbmd0aCxjLmxlbmd0aHMubGVuZ3RoKTspYy5sZW5ndGhzLnB1c2goe3B4OjB9KTtpZihiLmluc2V0PT1jLmluc2V0JiYhIWIuY29sb3I9PSEhYy5jb2xvcil7Zm9yKHZhciBkLGU9W10sZj1bW10sMF0sZz1bW10sMF0saD0wO2g8Yi5sZW5ndGhzLmxlbmd0aDtoKyspe3ZhciBpPWEubWVyZ2VEaW1lbnNpb25zKGIubGVuZ3Roc1toXSxjLmxlbmd0aHNbaF0sMj09aCk7ZlswXS5wdXNoKGlbMF0pLGdbMF0ucHVzaChpWzFdKSxlLnB1c2goaVsyXSl9aWYoYi5jb2xvciYmYy5jb2xvcil7dmFyIGo9YS5tZXJnZUNvbG9ycyhiLmNvbG9yLGMuY29sb3IpO2ZbMV09alswXSxnWzFdPWpbMV0sZD1qWzJdfXJldHVybltmLGcsZnVuY3Rpb24oYSl7Zm9yKHZhciBjPWIuaW5zZXQ/Imluc2V0ICI6IiAiLGY9MDtmPGUubGVuZ3RoO2YrKyljKz1lW2ZdKGFbMF1bZl0pKyIgIjtyZXR1cm4gZCYmKGMrPWQoYVsxXSkpLGN9XX19ZnVuY3Rpb24gZShiLGMsZCxlKXtmdW5jdGlvbiBmKGEpe3JldHVybntpbnNldDphLGNvbG9yOlswLDAsMCwwXSxsZW5ndGhzOlt7cHg6MH0se3B4OjB9LHtweDowfSx7cHg6MH1dfX1mb3IodmFyIGc9W10saD1bXSxpPTA7aTxkLmxlbmd0aHx8aTxlLmxlbmd0aDtpKyspe3ZhciBqPWRbaV18fGYoZVtpXS5pbnNldCksaz1lW2ldfHxmKGRbaV0uaW5zZXQpO2cucHVzaChqKSxoLnB1c2goayl9cmV0dXJuIGEubWVyZ2VOZXN0ZWRSZXBlYXRlZChiLGMsZyxoKX12YXIgZj1lLmJpbmQobnVsbCxkLCIsICIpO2EuYWRkUHJvcGVydGllc0hhbmRsZXIoYyxmLFsiYm94LXNoYWRvdyIsInRleHQtc2hhZG93Il0pfShiKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSl7cmV0dXJuIGEudG9GaXhlZCgzKS5yZXBsYWNlKC8wKyQvLCIiKS5yZXBsYWNlKC9cLiQvLCIiKX1mdW5jdGlvbiBkKGEsYixjKXtyZXR1cm4gTWF0aC5taW4oYixNYXRoLm1heChhLGMpKX1mdW5jdGlvbiBlKGEpe2lmKC9eXHMqWy0rXT8oXGQqXC4pP1xkK1xzKiQvLnRlc3QoYSkpcmV0dXJuIE51bWJlcihhKX1mdW5jdGlvbiBmKGEsYil7cmV0dXJuW2EsYixjXX1mdW5jdGlvbiBnKGEsYil7aWYoMCE9YSlyZXR1cm4gaSgwLDEvMCkoYSxiKX1mdW5jdGlvbiBoKGEsYil7cmV0dXJuW2EsYixmdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5yb3VuZChkKDEsMS8wLGEpKX1dfWZ1bmN0aW9uIGkoYSxiKXtyZXR1cm4gZnVuY3Rpb24oZSxmKXtyZXR1cm5bZSxmLGZ1bmN0aW9uKGUpe3JldHVybiBjKGQoYSxiLGUpKX1dfX1mdW5jdGlvbiBqKGEpe3ZhciBiPWEudHJpbSgpLnNwbGl0KC9ccypbXHMsXVxzKi8pO2lmKDAhPT1iLmxlbmd0aCl7Zm9yKHZhciBjPVtdLGQ9MDtkPGIubGVuZ3RoO2QrKyl7dmFyIGY9ZShiW2RdKTtpZih2b2lkIDA9PT1mKXJldHVybjtjLnB1c2goZil9cmV0dXJuIGN9fWZ1bmN0aW9uIGsoYSxiKXtpZihhLmxlbmd0aD09Yi5sZW5ndGgpcmV0dXJuW2EsYixmdW5jdGlvbihhKXtyZXR1cm4gYS5tYXAoYykuam9pbigiICIpfV19ZnVuY3Rpb24gbChhLGIpe3JldHVyblthLGIsTWF0aC5yb3VuZF19YS5jbGFtcD1kLGEuYWRkUHJvcGVydGllc0hhbmRsZXIoaixrLFsic3Ryb2tlLWRhc2hhcnJheSJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGUsaSgwLDEvMCksWyJib3JkZXItaW1hZ2Utd2lkdGgiLCJsaW5lLWhlaWdodCJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGUsaSgwLDEpLFsib3BhY2l0eSIsInNoYXBlLWltYWdlLXRocmVzaG9sZCJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGUsZyxbImZsZXgtZ3JvdyIsImZsZXgtc2hyaW5rIl0pLGEuYWRkUHJvcGVydGllc0hhbmRsZXIoZSxoLFsib3JwaGFucyIsIndpZG93cyJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGUsbCxbInotaW5kZXgiXSksYS5wYXJzZU51bWJlcj1lLGEucGFyc2VOdW1iZXJMaXN0PWosYS5tZXJnZU51bWJlcnM9ZixhLm51bWJlclRvU3RyaW5nPWN9KGIpLGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhLGIpe2lmKCJ2aXNpYmxlIj09YXx8InZpc2libGUiPT1iKXJldHVyblswLDEsZnVuY3Rpb24oYyl7cmV0dXJuIGM8PTA/YTpjPj0xP2I6InZpc2libGUifV19YS5hZGRQcm9wZXJ0aWVzSGFuZGxlcihTdHJpbmcsYyxbInZpc2liaWxpdHkiXSl9KGIpLGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhKXthPWEudHJpbSgpLGYuZmlsbFN0eWxlPSIjMDAwIixmLmZpbGxTdHlsZT1hO3ZhciBiPWYuZmlsbFN0eWxlO2lmKGYuZmlsbFN0eWxlPSIjZmZmIixmLmZpbGxTdHlsZT1hLGI9PWYuZmlsbFN0eWxlKXtmLmZpbGxSZWN0KDAsMCwxLDEpO3ZhciBjPWYuZ2V0SW1hZ2VEYXRhKDAsMCwxLDEpLmRhdGE7Zi5jbGVhclJlY3QoMCwwLDEsMSk7dmFyIGQ9Y1szXS8yNTU7cmV0dXJuW2NbMF0qZCxjWzFdKmQsY1syXSpkLGRdfX1mdW5jdGlvbiBkKGIsYyl7cmV0dXJuW2IsYyxmdW5jdGlvbihiKXtmdW5jdGlvbiBjKGEpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKDI1NSxhKSl9aWYoYlszXSlmb3IodmFyIGQ9MDtkPDM7ZCsrKWJbZF09TWF0aC5yb3VuZChjKGJbZF0vYlszXSkpO3JldHVybiBiWzNdPWEubnVtYmVyVG9TdHJpbmcoYS5jbGFtcCgwLDEsYlszXSkpLCJyZ2JhKCIrYi5qb2luKCIsIikrIikifV19dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiY2FudmFzIik7ZS53aWR0aD1lLmhlaWdodD0xO3ZhciBmPWUuZ2V0Q29udGV4dCgiMmQiKTthLmFkZFByb3BlcnRpZXNIYW5kbGVyKGMsZCxbImJhY2tncm91bmQtY29sb3IiLCJib3JkZXItYm90dG9tLWNvbG9yIiwiYm9yZGVyLWxlZnQtY29sb3IiLCJib3JkZXItcmlnaHQtY29sb3IiLCJib3JkZXItdG9wLWNvbG9yIiwiY29sb3IiLCJmaWxsIiwiZmxvb2QtY29sb3IiLCJsaWdodGluZy1jb2xvciIsIm91dGxpbmUtY29sb3IiLCJzdG9wLWNvbG9yIiwic3Ryb2tlIiwidGV4dC1kZWNvcmF0aW9uLWNvbG9yIl0pLGEuY29uc3VtZUNvbG9yPWEuY29uc3VtZVBhcmVudGhlc2lzZWQuYmluZChudWxsLGMpLGEubWVyZ2VDb2xvcnM9ZH0oYiksZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEpe2Z1bmN0aW9uIGIoKXt2YXIgYj1oLmV4ZWMoYSk7Zz1iP2JbMF06dm9pZCAwfWZ1bmN0aW9uIGMoKXt2YXIgYT1OdW1iZXIoZyk7cmV0dXJuIGIoKSxhfWZ1bmN0aW9uIGQoKXtpZigiKCIhPT1nKXJldHVybiBjKCk7YigpO3ZhciBhPWYoKTtyZXR1cm4iKSIhPT1nP05hTjooYigpLGEpfWZ1bmN0aW9uIGUoKXtmb3IodmFyIGE9ZCgpOyIqIj09PWd8fCIvIj09PWc7KXt2YXIgYz1nO2IoKTt2YXIgZT1kKCk7IioiPT09Yz9hKj1lOmEvPWV9cmV0dXJuIGF9ZnVuY3Rpb24gZigpe2Zvcih2YXIgYT1lKCk7IisiPT09Z3x8Ii0iPT09Zzspe3ZhciBjPWc7YigpO3ZhciBkPWUoKTsiKyI9PT1jP2ErPWQ6YS09ZH1yZXR1cm4gYX12YXIgZyxoPS8oW1wrXC1cd1wuXSt8W1woXClcKlwvXSkvZztyZXR1cm4gYigpLGYoKX1mdW5jdGlvbiBkKGEsYil7aWYoIjAiPT0oYj1iLnRyaW0oKS50b0xvd2VyQ2FzZSgpKSYmInB4Ii5zZWFyY2goYSk+PTApcmV0dXJue3B4OjB9O2lmKC9eW14oXSokfF5jYWxjLy50ZXN0KGIpKXtiPWIucmVwbGFjZSgvY2FsY1woL2csIigiKTt2YXIgZD17fTtiPWIucmVwbGFjZShhLGZ1bmN0aW9uKGEpe3JldHVybiBkW2FdPW51bGwsIlUiK2F9KTtmb3IodmFyIGU9IlUoIithLnNvdXJjZSsiKSIsZj1iLnJlcGxhY2UoL1stK10/KFxkKlwuKT9cZCsoW0VlXVstK10/XGQrKT8vZywiTiIpLnJlcGxhY2UobmV3IFJlZ0V4cCgiTiIrZSwiZyIpLCJEIikucmVwbGFjZSgvXHNbKy1dXHMvZywiTyIpLnJlcGxhY2UoL1xzL2csIiIpLGc9Wy9OXCooRCkvZywvKE58RClbKlwvXU4vZywvKE58RClPXDEvZywvXCgoTnxEKVwpL2ddLGg9MDtoPGcubGVuZ3RoOylnW2hdLnRlc3QoZik/KGY9Zi5yZXBsYWNlKGdbaF0sIiQxIiksaD0wKTpoKys7aWYoIkQiPT1mKXtmb3IodmFyIGkgaW4gZCl7dmFyIGo9YyhiLnJlcGxhY2UobmV3IFJlZ0V4cCgiVSIraSwiZyIpLCIiKS5yZXBsYWNlKG5ldyBSZWdFeHAoZSwiZyIpLCIqMCIpKTtpZighaXNGaW5pdGUoaikpcmV0dXJuO2RbaV09an1yZXR1cm4gZH19fWZ1bmN0aW9uIGUoYSxiKXtyZXR1cm4gZihhLGIsITApfWZ1bmN0aW9uIGYoYixjLGQpe3ZhciBlLGY9W107Zm9yKGUgaW4gYilmLnB1c2goZSk7Zm9yKGUgaW4gYylmLmluZGV4T2YoZSk8MCYmZi5wdXNoKGUpO3JldHVybiBiPWYubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBiW2FdfHwwfSksYz1mLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gY1thXXx8MH0pLFtiLGMsZnVuY3Rpb24oYil7dmFyIGM9Yi5tYXAoZnVuY3Rpb24oYyxlKXtyZXR1cm4gMT09Yi5sZW5ndGgmJmQmJihjPU1hdGgubWF4KGMsMCkpLGEubnVtYmVyVG9TdHJpbmcoYykrZltlXX0pLmpvaW4oIiArICIpO3JldHVybiBiLmxlbmd0aD4xPyJjYWxjKCIrYysiKSI6Y31dfXZhciBnPSJweHxlbXxleHxjaHxyZW18dnd8dmh8dm1pbnx2bWF4fGNtfG1tfGlufHB0fHBjIixoPWQuYmluZChudWxsLG5ldyBSZWdFeHAoZywiZyIpKSxpPWQuYmluZChudWxsLG5ldyBSZWdFeHAoZysifCUiLCJnIikpLGo9ZC5iaW5kKG51bGwsL2RlZ3xyYWR8Z3JhZHx0dXJuL2cpO2EucGFyc2VMZW5ndGg9aCxhLnBhcnNlTGVuZ3RoT3JQZXJjZW50PWksYS5jb25zdW1lTGVuZ3RoT3JQZXJjZW50PWEuY29uc3VtZVBhcmVudGhlc2lzZWQuYmluZChudWxsLGkpLGEucGFyc2VBbmdsZT1qLGEubWVyZ2VEaW1lbnNpb25zPWY7dmFyIGs9YS5jb25zdW1lUGFyZW50aGVzaXNlZC5iaW5kKG51bGwsaCksbD1hLmNvbnN1bWVSZXBlYXRlZC5iaW5kKHZvaWQgMCxrLC9eLyksbT1hLmNvbnN1bWVSZXBlYXRlZC5iaW5kKHZvaWQgMCxsLC9eLC8pO2EuY29uc3VtZVNpemVQYWlyTGlzdD1tO3ZhciBuPWZ1bmN0aW9uKGEpe3ZhciBiPW0oYSk7aWYoYiYmIiI9PWJbMV0pcmV0dXJuIGJbMF19LG89YS5tZXJnZU5lc3RlZFJlcGVhdGVkLmJpbmQodm9pZCAwLGUsIiAiKSxwPWEubWVyZ2VOZXN0ZWRSZXBlYXRlZC5iaW5kKHZvaWQgMCxvLCIsIik7YS5tZXJnZU5vbk5lZ2F0aXZlU2l6ZVBhaXI9byxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKG4scCxbImJhY2tncm91bmQtc2l6ZSJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGksZSxbImJvcmRlci1ib3R0b20td2lkdGgiLCJib3JkZXItaW1hZ2Utd2lkdGgiLCJib3JkZXItbGVmdC13aWR0aCIsImJvcmRlci1yaWdodC13aWR0aCIsImJvcmRlci10b3Atd2lkdGgiLCJmbGV4LWJhc2lzIiwiZm9udC1zaXplIiwiaGVpZ2h0IiwibGluZS1oZWlnaHQiLCJtYXgtaGVpZ2h0IiwibWF4LXdpZHRoIiwib3V0bGluZS13aWR0aCIsIndpZHRoIl0pLGEuYWRkUHJvcGVydGllc0hhbmRsZXIoaSxmLFsiYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1cyIsImJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzIiwiYm9yZGVyLXRvcC1sZWZ0LXJhZGl1cyIsImJvcmRlci10b3AtcmlnaHQtcmFkaXVzIiwiYm90dG9tIiwibGVmdCIsImxldHRlci1zcGFjaW5nIiwibWFyZ2luLWJvdHRvbSIsIm1hcmdpbi1sZWZ0IiwibWFyZ2luLXJpZ2h0IiwibWFyZ2luLXRvcCIsIm1pbi1oZWlnaHQiLCJtaW4td2lkdGgiLCJvdXRsaW5lLW9mZnNldCIsInBhZGRpbmctYm90dG9tIiwicGFkZGluZy1sZWZ0IiwicGFkZGluZy1yaWdodCIsInBhZGRpbmctdG9wIiwicGVyc3BlY3RpdmUiLCJyaWdodCIsInNoYXBlLW1hcmdpbiIsInN0cm9rZS1kYXNob2Zmc2V0IiwidGV4dC1pbmRlbnQiLCJ0b3AiLCJ2ZXJ0aWNhbC1hbGlnbiIsIndvcmQtc3BhY2luZyJdKX0oYiksZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGIpe3JldHVybiBhLmNvbnN1bWVMZW5ndGhPclBlcmNlbnQoYil8fGEuY29uc3VtZVRva2VuKC9eYXV0by8sYil9ZnVuY3Rpb24gZChiKXt2YXIgZD1hLmNvbnN1bWVMaXN0KFthLmlnbm9yZShhLmNvbnN1bWVUb2tlbi5iaW5kKG51bGwsL15yZWN0LykpLGEuaWdub3JlKGEuY29uc3VtZVRva2VuLmJpbmQobnVsbCwvXlwoLykpLGEuY29uc3VtZVJlcGVhdGVkLmJpbmQobnVsbCxjLC9eLC8pLGEuaWdub3JlKGEuY29uc3VtZVRva2VuLmJpbmQobnVsbCwvXlwpLykpXSxiKTtpZihkJiY0PT1kWzBdLmxlbmd0aClyZXR1cm4gZFswXX1mdW5jdGlvbiBlKGIsYyl7cmV0dXJuImF1dG8iPT1ifHwiYXV0byI9PWM/WyEwLCExLGZ1bmN0aW9uKGQpe3ZhciBlPWQ/YjpjO2lmKCJhdXRvIj09ZSlyZXR1cm4iYXV0byI7dmFyIGY9YS5tZXJnZURpbWVuc2lvbnMoZSxlKTtyZXR1cm4gZlsyXShmWzBdKX1dOmEubWVyZ2VEaW1lbnNpb25zKGIsYyl9ZnVuY3Rpb24gZihhKXtyZXR1cm4icmVjdCgiK2ErIikifXZhciBnPWEubWVyZ2VXcmFwcGVkTmVzdGVkUmVwZWF0ZWQuYmluZChudWxsLGYsZSwiLCAiKTthLnBhcnNlQm94PWQsYS5tZXJnZUJveGVzPWcsYS5hZGRQcm9wZXJ0aWVzSGFuZGxlcihkLGcsWyJjbGlwIl0pfShiKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe3ZhciBjPTA7cmV0dXJuIGEubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhPT09az9iW2MrK106YX0pfX1mdW5jdGlvbiBkKGEpe3JldHVybiBhfWZ1bmN0aW9uIGUoYil7aWYoIm5vbmUiPT0oYj1iLnRvTG93ZXJDYXNlKCkudHJpbSgpKSlyZXR1cm5bXTtmb3IodmFyIGMsZD0vXHMqKFx3KylcKChbXildKilcKS9nLGU9W10sZj0wO2M9ZC5leGVjKGIpOyl7aWYoYy5pbmRleCE9ZilyZXR1cm47Zj1jLmluZGV4K2NbMF0ubGVuZ3RoO3ZhciBnPWNbMV0saD1uW2ddO2lmKCFoKXJldHVybjt2YXIgaT1jWzJdLnNwbGl0KCIsIiksaj1oWzBdO2lmKGoubGVuZ3RoPGkubGVuZ3RoKXJldHVybjtmb3IodmFyIGs9W10sbz0wO288ai5sZW5ndGg7bysrKXt2YXIgcCxxPWlbb10scj1qW29dO2lmKHZvaWQgMD09PShwPXE/e0E6ZnVuY3Rpb24oYil7cmV0dXJuIjAiPT1iLnRyaW0oKT9tOmEucGFyc2VBbmdsZShiKX0sTjphLnBhcnNlTnVtYmVyLFQ6YS5wYXJzZUxlbmd0aE9yUGVyY2VudCxMOmEucGFyc2VMZW5ndGh9W3IudG9VcHBlckNhc2UoKV0ocSk6e2E6bSxuOmtbMF0sdDpsfVtyXSkpcmV0dXJuO2sucHVzaChwKX1pZihlLnB1c2goe3Q6ZyxkOmt9KSxkLmxhc3RJbmRleD09Yi5sZW5ndGgpcmV0dXJuIGV9fWZ1bmN0aW9uIGYoYSl7cmV0dXJuIGEudG9GaXhlZCg2KS5yZXBsYWNlKCIuMDAwMDAwIiwiIil9ZnVuY3Rpb24gZyhiLGMpe2lmKGIuZGVjb21wb3NpdGlvblBhaXIhPT1jKXtiLmRlY29tcG9zaXRpb25QYWlyPWM7dmFyIGQ9YS5tYWtlTWF0cml4RGVjb21wb3NpdGlvbihiKX1pZihjLmRlY29tcG9zaXRpb25QYWlyIT09Yil7Yy5kZWNvbXBvc2l0aW9uUGFpcj1iO3ZhciBlPWEubWFrZU1hdHJpeERlY29tcG9zaXRpb24oYyl9cmV0dXJuIG51bGw9PWRbMF18fG51bGw9PWVbMF0/W1shMV0sWyEwXSxmdW5jdGlvbihhKXtyZXR1cm4gYT9jWzBdLmQ6YlswXS5kfV06KGRbMF0ucHVzaCgwKSxlWzBdLnB1c2goMSksW2QsZSxmdW5jdGlvbihiKXt2YXIgYz1hLnF1YXQoZFswXVszXSxlWzBdWzNdLGJbNV0pO3JldHVybiBhLmNvbXBvc2VNYXRyaXgoYlswXSxiWzFdLGJbMl0sYyxiWzRdKS5tYXAoZikuam9pbigiLCIpfV0pfWZ1bmN0aW9uIGgoYSl7cmV0dXJuIGEucmVwbGFjZSgvW3h5XS8sIiIpfWZ1bmN0aW9uIGkoYSl7cmV0dXJuIGEucmVwbGFjZSgvKHh8eXx6fDNkKT8kLywiM2QiKX1mdW5jdGlvbiBqKGIsYyl7dmFyIGQ9YS5tYWtlTWF0cml4RGVjb21wb3NpdGlvbiYmITAsZT0hMTtpZighYi5sZW5ndGh8fCFjLmxlbmd0aCl7Yi5sZW5ndGh8fChlPSEwLGI9YyxjPVtdKTtmb3IodmFyIGY9MDtmPGIubGVuZ3RoO2YrKyl7dmFyIGo9YltmXS50LGs9YltmXS5kLGw9InNjYWxlIj09ai5zdWJzdHIoMCw1KT8xOjA7Yy5wdXNoKHt0OmosZDprLm1hcChmdW5jdGlvbihhKXtpZigibnVtYmVyIj09dHlwZW9mIGEpcmV0dXJuIGw7dmFyIGI9e307Zm9yKHZhciBjIGluIGEpYltjXT1sO3JldHVybiBifSl9KX19dmFyIG09ZnVuY3Rpb24oYSxiKXtyZXR1cm4icGVyc3BlY3RpdmUiPT1hJiYicGVyc3BlY3RpdmUiPT1ifHwoIm1hdHJpeCI9PWF8fCJtYXRyaXgzZCI9PWEpJiYoIm1hdHJpeCI9PWJ8fCJtYXRyaXgzZCI9PWIpfSxvPVtdLHA9W10scT1bXTtpZihiLmxlbmd0aCE9Yy5sZW5ndGgpe2lmKCFkKXJldHVybjt2YXIgcj1nKGIsYyk7bz1bclswXV0scD1bclsxXV0scT1bWyJtYXRyaXgiLFtyWzJdXV1dfWVsc2UgZm9yKHZhciBmPTA7ZjxiLmxlbmd0aDtmKyspe3ZhciBqLHM9YltmXS50LHQ9Y1tmXS50LHU9YltmXS5kLHY9Y1tmXS5kLHc9bltzXSx4PW5bdF07aWYobShzLHQpKXtpZighZClyZXR1cm47dmFyIHI9ZyhbYltmXV0sW2NbZl1dKTtvLnB1c2goclswXSkscC5wdXNoKHJbMV0pLHEucHVzaChbIm1hdHJpeCIsW3JbMl1dXSl9ZWxzZXtpZihzPT10KWo9cztlbHNlIGlmKHdbMl0mJnhbMl0mJmgocyk9PWgodCkpaj1oKHMpLHU9d1syXSh1KSx2PXhbMl0odik7ZWxzZXtpZighd1sxXXx8IXhbMV18fGkocykhPWkodCkpe2lmKCFkKXJldHVybjt2YXIgcj1nKGIsYyk7bz1bclswXV0scD1bclsxXV0scT1bWyJtYXRyaXgiLFtyWzJdXV1dO2JyZWFrfWo9aShzKSx1PXdbMV0odSksdj14WzFdKHYpfWZvcih2YXIgeT1bXSx6PVtdLEE9W10sQj0wO0I8dS5sZW5ndGg7QisrKXt2YXIgQz0ibnVtYmVyIj09dHlwZW9mIHVbQl0/YS5tZXJnZU51bWJlcnM6YS5tZXJnZURpbWVuc2lvbnMscj1DKHVbQl0sdltCXSk7eVtCXT1yWzBdLHpbQl09clsxXSxBLnB1c2goclsyXSl9by5wdXNoKHkpLHAucHVzaCh6KSxxLnB1c2goW2osQV0pfX1pZihlKXt2YXIgRD1vO289cCxwPUR9cmV0dXJuW28scCxmdW5jdGlvbihhKXtyZXR1cm4gYS5tYXAoZnVuY3Rpb24oYSxiKXt2YXIgYz1hLm1hcChmdW5jdGlvbihhLGMpe3JldHVybiBxW2JdWzFdW2NdKGEpfSkuam9pbigiLCIpO3JldHVybiJtYXRyaXgiPT1xW2JdWzBdJiYxNj09Yy5zcGxpdCgiLCIpLmxlbmd0aCYmKHFbYl1bMF09Im1hdHJpeDNkIikscVtiXVswXSsiKCIrYysiKSJ9KS5qb2luKCIgIil9XX12YXIgaz1udWxsLGw9e3B4OjB9LG09e2RlZzowfSxuPXttYXRyaXg6WyJOTk5OTk4iLFtrLGssMCwwLGssaywwLDAsMCwwLDEsMCxrLGssMCwxXSxkXSxtYXRyaXgzZDpbIk5OTk5OTk5OTk5OTk5OTk4iLGRdLHJvdGF0ZTpbIkEiXSxyb3RhdGV4OlsiQSJdLHJvdGF0ZXk6WyJBIl0scm90YXRlejpbIkEiXSxyb3RhdGUzZDpbIk5OTkEiXSxwZXJzcGVjdGl2ZTpbIkwiXSxzY2FsZTpbIk5uIixjKFtrLGssMV0pLGRdLHNjYWxleDpbIk4iLGMoW2ssMSwxXSksYyhbaywxXSldLHNjYWxleTpbIk4iLGMoWzEsaywxXSksYyhbMSxrXSldLHNjYWxlejpbIk4iLGMoWzEsMSxrXSldLHNjYWxlM2Q6WyJOTk4iLGRdLHNrZXc6WyJBYSIsbnVsbCxkXSxza2V3eDpbIkEiLG51bGwsYyhbayxtXSldLHNrZXd5OlsiQSIsbnVsbCxjKFttLGtdKV0sdHJhbnNsYXRlOlsiVHQiLGMoW2ssayxsXSksZF0sdHJhbnNsYXRleDpbIlQiLGMoW2ssbCxsXSksYyhbayxsXSldLHRyYW5zbGF0ZXk6WyJUIixjKFtsLGssbF0pLGMoW2wsa10pXSx0cmFuc2xhdGV6OlsiTCIsYyhbbCxsLGtdKV0sdHJhbnNsYXRlM2Q6WyJUVEwiLGRdfTthLmFkZFByb3BlcnRpZXNIYW5kbGVyKGUsaixbInRyYW5zZm9ybSJdKSxhLnRyYW5zZm9ybVRvU3ZnTWF0cml4PWZ1bmN0aW9uKGIpe3ZhciBjPWEudHJhbnNmb3JtTGlzdFRvTWF0cml4KGUoYikpO3JldHVybiJtYXRyaXgoIitmKGNbMF0pKyIgIitmKGNbMV0pKyIgIitmKGNbNF0pKyIgIitmKGNbNV0pKyIgIitmKGNbMTJdKSsiICIrZihjWzEzXSkrIikifX0oYiksZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEsYil7Yi5jb25jYXQoW2FdKS5mb3JFYWNoKGZ1bmN0aW9uKGIpe2IgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlJiYoZFthXT1iKSxlW2JdPWF9KX12YXIgZD17fSxlPXt9O2MoInRyYW5zZm9ybSIsWyJ3ZWJraXRUcmFuc2Zvcm0iLCJtc1RyYW5zZm9ybSJdKSxjKCJ0cmFuc2Zvcm1PcmlnaW4iLFsid2Via2l0VHJhbnNmb3JtT3JpZ2luIl0pLGMoInBlcnNwZWN0aXZlIixbIndlYmtpdFBlcnNwZWN0aXZlIl0pLGMoInBlcnNwZWN0aXZlT3JpZ2luIixbIndlYmtpdFBlcnNwZWN0aXZlT3JpZ2luIl0pLGEucHJvcGVydHlOYW1lPWZ1bmN0aW9uKGEpe3JldHVybiBkW2FdfHxhfSxhLnVucHJlZml4ZWRQcm9wZXJ0eU5hbWU9ZnVuY3Rpb24oYSl7cmV0dXJuIGVbYV18fGF9fShiKX0oKSxmdW5jdGlvbigpe2lmKHZvaWQgMD09PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLmFuaW1hdGUoW10pLm9uY2FuY2VsKXt2YXIgYTtpZih3aW5kb3cucGVyZm9ybWFuY2UmJnBlcmZvcm1hbmNlLm5vdyl2YXIgYT1mdW5jdGlvbigpe3JldHVybiBwZXJmb3JtYW5jZS5ub3coKX07ZWxzZSB2YXIgYT1mdW5jdGlvbigpe3JldHVybiBEYXRlLm5vdygpfTt2YXIgYj1mdW5jdGlvbihhLGIsYyl7dGhpcy50YXJnZXQ9YSx0aGlzLmN1cnJlbnRUaW1lPWIsdGhpcy50aW1lbGluZVRpbWU9Yyx0aGlzLnR5cGU9ImNhbmNlbCIsdGhpcy5idWJibGVzPSExLHRoaXMuY2FuY2VsYWJsZT0hMSx0aGlzLmN1cnJlbnRUYXJnZXQ9YSx0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITEsdGhpcy5ldmVudFBoYXNlPUV2ZW50LkFUX1RBUkdFVCx0aGlzLnRpbWVTdGFtcD1EYXRlLm5vdygpfSxjPXdpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5hbmltYXRlO3dpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKGQsZSl7dmFyIGY9Yy5jYWxsKHRoaXMsZCxlKTtmLl9jYW5jZWxIYW5kbGVycz1bXSxmLm9uY2FuY2VsPW51bGw7dmFyIGc9Zi5jYW5jZWw7Zi5jYW5jZWw9ZnVuY3Rpb24oKXtnLmNhbGwodGhpcyk7dmFyIGM9bmV3IGIodGhpcyxudWxsLGEoKSksZD10aGlzLl9jYW5jZWxIYW5kbGVycy5jb25jYXQodGhpcy5vbmNhbmNlbD9bdGhpcy5vbmNhbmNlbF06W10pO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtkLmZvckVhY2goZnVuY3Rpb24oYSl7YS5jYWxsKGMudGFyZ2V0LGMpfSl9LDApfTt2YXIgaD1mLmFkZEV2ZW50TGlzdGVuZXI7Zi5hZGRFdmVudExpc3RlbmVyPWZ1bmN0aW9uKGEsYil7ImZ1bmN0aW9uIj09dHlwZW9mIGImJiJjYW5jZWwiPT1hP3RoaXMuX2NhbmNlbEhhbmRsZXJzLnB1c2goYik6aC5jYWxsKHRoaXMsYSxiKX07dmFyIGk9Zi5yZW1vdmVFdmVudExpc3RlbmVyO3JldHVybiBmLnJlbW92ZUV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24oYSxiKXtpZigiY2FuY2VsIj09YSl7dmFyIGM9dGhpcy5fY2FuY2VsSGFuZGxlcnMuaW5kZXhPZihiKTtjPj0wJiZ0aGlzLl9jYW5jZWxIYW5kbGVycy5zcGxpY2UoYywxKX1lbHNlIGkuY2FsbCh0aGlzLGEsYil9LGZ9fX0oKSxmdW5jdGlvbihhKXt2YXIgYj1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsYz1udWxsLGQ9ITE7dHJ5e3ZhciBlPWdldENvbXB1dGVkU3R5bGUoYikuZ2V0UHJvcGVydHlWYWx1ZSgib3BhY2l0eSIpLGY9IjAiPT1lPyIxIjoiMCI7Yz1iLmFuaW1hdGUoe29wYWNpdHk6W2YsZl19LHtkdXJhdGlvbjoxfSksYy5jdXJyZW50VGltZT0wLGQ9Z2V0Q29tcHV0ZWRTdHlsZShiKS5nZXRQcm9wZXJ0eVZhbHVlKCJvcGFjaXR5Iik9PWZ9Y2F0Y2goYSl7fWZpbmFsbHl7YyYmYy5jYW5jZWwoKX1pZighZCl7dmFyIGc9d2luZG93LkVsZW1lbnQucHJvdG90eXBlLmFuaW1hdGU7d2luZG93LkVsZW1lbnQucHJvdG90eXBlLmFuaW1hdGU9ZnVuY3Rpb24oYixjKXtyZXR1cm4gd2luZG93LlN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yJiZBcnJheS5wcm90b3R5cGUuZnJvbSYmYltTeW1ib2wuaXRlcmF0b3JdJiYoYj1BcnJheS5mcm9tKGIpKSxBcnJheS5pc0FycmF5KGIpfHxudWxsPT09Ynx8KGI9YS5jb252ZXJ0VG9BcnJheUZvcm0oYikpLGcuY2FsbCh0aGlzLGIsYyl9fX0oYSksZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYSl7dmFyIGM9Yi50aW1lbGluZTtjLmN1cnJlbnRUaW1lPWEsYy5fZGlzY2FyZEFuaW1hdGlvbnMoKSwwPT1jLl9hbmltYXRpb25zLmxlbmd0aD9mPSExOnJlcXVlc3RBbmltYXRpb25GcmFtZShkKX12YXIgZT13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lO3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU9ZnVuY3Rpb24oYSl7cmV0dXJuIGUoZnVuY3Rpb24oYyl7Yi50aW1lbGluZS5fdXBkYXRlQW5pbWF0aW9uc1Byb21pc2VzKCksYShjKSxiLnRpbWVsaW5lLl91cGRhdGVBbmltYXRpb25zUHJvbWlzZXMoKX0pfSxiLkFuaW1hdGlvblRpbWVsaW5lPWZ1bmN0aW9uKCl7dGhpcy5fYW5pbWF0aW9ucz1bXSx0aGlzLmN1cnJlbnRUaW1lPXZvaWQgMH0sYi5BbmltYXRpb25UaW1lbGluZS5wcm90b3R5cGU9e2dldEFuaW1hdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGlzY2FyZEFuaW1hdGlvbnMoKSx0aGlzLl9hbmltYXRpb25zLnNsaWNlKCl9LF91cGRhdGVBbmltYXRpb25zUHJvbWlzZXM6ZnVuY3Rpb24oKXtiLmFuaW1hdGlvbnNXaXRoUHJvbWlzZXM9Yi5hbmltYXRpb25zV2l0aFByb21pc2VzLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4gYS5fdXBkYXRlUHJvbWlzZXMoKX0pfSxfZGlzY2FyZEFuaW1hdGlvbnM6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVBbmltYXRpb25zUHJvbWlzZXMoKSx0aGlzLl9hbmltYXRpb25zPXRoaXMuX2FuaW1hdGlvbnMuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiJmaW5pc2hlZCIhPWEucGxheVN0YXRlJiYiaWRsZSIhPWEucGxheVN0YXRlfSl9LF9wbGF5OmZ1bmN0aW9uKGEpe3ZhciBjPW5ldyBiLkFuaW1hdGlvbihhLHRoaXMpO3JldHVybiB0aGlzLl9hbmltYXRpb25zLnB1c2goYyksYi5yZXN0YXJ0V2ViQW5pbWF0aW9uc05leHRUaWNrKCksYy5fdXBkYXRlUHJvbWlzZXMoKSxjLl9hbmltYXRpb24ucGxheSgpLGMuX3VwZGF0ZVByb21pc2VzKCksY30scGxheTpmdW5jdGlvbihhKXtyZXR1cm4gYSYmYS5yZW1vdmUoKSx0aGlzLl9wbGF5KGEpfX07dmFyIGY9ITE7Yi5yZXN0YXJ0V2ViQW5pbWF0aW9uc05leHRUaWNrPWZ1bmN0aW9uKCl7Znx8KGY9ITAscmVxdWVzdEFuaW1hdGlvbkZyYW1lKGQpKX07dmFyIGc9bmV3IGIuQW5pbWF0aW9uVGltZWxpbmU7Yi50aW1lbGluZT1nO3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LmRvY3VtZW50LCJ0aW1lbGluZSIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZ319KX1jYXRjaChhKXt9dHJ5e3dpbmRvdy5kb2N1bWVudC50aW1lbGluZT1nfWNhdGNoKGEpe319KDAsYyksZnVuY3Rpb24oYSxiLGMpe2IuYW5pbWF0aW9uc1dpdGhQcm9taXNlcz1bXSxiLkFuaW1hdGlvbj1mdW5jdGlvbihiLGMpe2lmKHRoaXMuaWQ9IiIsYiYmYi5faWQmJih0aGlzLmlkPWIuX2lkKSx0aGlzLmVmZmVjdD1iLGImJihiLl9hbmltYXRpb249dGhpcyksIWMpdGhyb3cgbmV3IEVycm9yKCJBbmltYXRpb24gd2l0aCBudWxsIHRpbWVsaW5lIGlzIG5vdCBzdXBwb3J0ZWQiKTt0aGlzLl90aW1lbGluZT1jLHRoaXMuX3NlcXVlbmNlTnVtYmVyPWEuc2VxdWVuY2VOdW1iZXIrKyx0aGlzLl9ob2xkVGltZT0wLHRoaXMuX3BhdXNlZD0hMSx0aGlzLl9pc0dyb3VwPSExLHRoaXMuX2FuaW1hdGlvbj1udWxsLHRoaXMuX2NoaWxkQW5pbWF0aW9ucz1bXSx0aGlzLl9jYWxsYmFjaz1udWxsLHRoaXMuX29sZFBsYXlTdGF0ZT0iaWRsZSIsdGhpcy5fcmVidWlsZFVuZGVybHlpbmdBbmltYXRpb24oKSx0aGlzLl9hbmltYXRpb24uY2FuY2VsKCksdGhpcy5fdXBkYXRlUHJvbWlzZXMoKX0sYi5BbmltYXRpb24ucHJvdG90eXBlPXtfdXBkYXRlUHJvbWlzZXM6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9vbGRQbGF5U3RhdGUsYj10aGlzLnBsYXlTdGF0ZTtyZXR1cm4gdGhpcy5fcmVhZHlQcm9taXNlJiZiIT09YSYmKCJpZGxlIj09Yj8odGhpcy5fcmVqZWN0UmVhZHlQcm9taXNlKCksdGhpcy5fcmVhZHlQcm9taXNlPXZvaWQgMCk6InBlbmRpbmciPT1hP3RoaXMuX3Jlc29sdmVSZWFkeVByb21pc2UoKToicGVuZGluZyI9PWImJih0aGlzLl9yZWFkeVByb21pc2U9dm9pZCAwKSksdGhpcy5fZmluaXNoZWRQcm9taXNlJiZiIT09YSYmKCJpZGxlIj09Yj8odGhpcy5fcmVqZWN0RmluaXNoZWRQcm9taXNlKCksdGhpcy5fZmluaXNoZWRQcm9taXNlPXZvaWQgMCk6ImZpbmlzaGVkIj09Yj90aGlzLl9yZXNvbHZlRmluaXNoZWRQcm9taXNlKCk6ImZpbmlzaGVkIj09YSYmKHRoaXMuX2ZpbmlzaGVkUHJvbWlzZT12b2lkIDApKSx0aGlzLl9vbGRQbGF5U3RhdGU9dGhpcy5wbGF5U3RhdGUsdGhpcy5fcmVhZHlQcm9taXNlfHx0aGlzLl9maW5pc2hlZFByb21pc2V9LF9yZWJ1aWxkVW5kZXJseWluZ0FuaW1hdGlvbjpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCk7dmFyIGEsYyxkLGUsZj0hIXRoaXMuX2FuaW1hdGlvbjtmJiYoYT10aGlzLnBsYXliYWNrUmF0ZSxjPXRoaXMuX3BhdXNlZCxkPXRoaXMuc3RhcnRUaW1lLGU9dGhpcy5jdXJyZW50VGltZSx0aGlzLl9hbmltYXRpb24uY2FuY2VsKCksdGhpcy5fYW5pbWF0aW9uLl93cmFwcGVyPW51bGwsdGhpcy5fYW5pbWF0aW9uPW51bGwpLCghdGhpcy5lZmZlY3R8fHRoaXMuZWZmZWN0IGluc3RhbmNlb2Ygd2luZG93LktleWZyYW1lRWZmZWN0KSYmKHRoaXMuX2FuaW1hdGlvbj1iLm5ld1VuZGVybHlpbmdBbmltYXRpb25Gb3JLZXlmcmFtZUVmZmVjdCh0aGlzLmVmZmVjdCksYi5iaW5kQW5pbWF0aW9uRm9yS2V5ZnJhbWVFZmZlY3QodGhpcykpLCh0aGlzLmVmZmVjdCBpbnN0YW5jZW9mIHdpbmRvdy5TZXF1ZW5jZUVmZmVjdHx8dGhpcy5lZmZlY3QgaW5zdGFuY2VvZiB3aW5kb3cuR3JvdXBFZmZlY3QpJiYodGhpcy5fYW5pbWF0aW9uPWIubmV3VW5kZXJseWluZ0FuaW1hdGlvbkZvckdyb3VwKHRoaXMuZWZmZWN0KSxiLmJpbmRBbmltYXRpb25Gb3JHcm91cCh0aGlzKSksdGhpcy5lZmZlY3QmJnRoaXMuZWZmZWN0Ll9vbnNhbXBsZSYmYi5iaW5kQW5pbWF0aW9uRm9yQ3VzdG9tRWZmZWN0KHRoaXMpLGYmJigxIT1hJiYodGhpcy5wbGF5YmFja1JhdGU9YSksbnVsbCE9PWQ/dGhpcy5zdGFydFRpbWU9ZDpudWxsIT09ZT90aGlzLmN1cnJlbnRUaW1lPWU6bnVsbCE9PXRoaXMuX2hvbGRUaW1lJiYodGhpcy5jdXJyZW50VGltZT10aGlzLl9ob2xkVGltZSksYyYmdGhpcy5wYXVzZSgpKSx0aGlzLl91cGRhdGVQcm9taXNlcygpfSxfdXBkYXRlQ2hpbGRyZW46ZnVuY3Rpb24oKXtpZih0aGlzLmVmZmVjdCYmImlkbGUiIT10aGlzLnBsYXlTdGF0ZSl7dmFyIGE9dGhpcy5lZmZlY3QuX3RpbWluZy5kZWxheTt0aGlzLl9jaGlsZEFuaW1hdGlvbnMuZm9yRWFjaChmdW5jdGlvbihjKXt0aGlzLl9hcnJhbmdlQ2hpbGRyZW4oYyxhKSx0aGlzLmVmZmVjdCBpbnN0YW5jZW9mIHdpbmRvdy5TZXF1ZW5jZUVmZmVjdCYmKGErPWIuZ3JvdXBDaGlsZER1cmF0aW9uKGMuZWZmZWN0KSl9LmJpbmQodGhpcykpfX0sX3NldEV4dGVybmFsQW5pbWF0aW9uOmZ1bmN0aW9uKGEpe2lmKHRoaXMuZWZmZWN0JiZ0aGlzLl9pc0dyb3VwKWZvcih2YXIgYj0wO2I8dGhpcy5lZmZlY3QuY2hpbGRyZW4ubGVuZ3RoO2IrKyl0aGlzLmVmZmVjdC5jaGlsZHJlbltiXS5fYW5pbWF0aW9uPWEsdGhpcy5fY2hpbGRBbmltYXRpb25zW2JdLl9zZXRFeHRlcm5hbEFuaW1hdGlvbihhKX0sX2NvbnN0cnVjdENoaWxkQW5pbWF0aW9uczpmdW5jdGlvbigpe2lmKHRoaXMuZWZmZWN0JiZ0aGlzLl9pc0dyb3VwKXt2YXIgYT10aGlzLmVmZmVjdC5fdGltaW5nLmRlbGF5O3RoaXMuX3JlbW92ZUNoaWxkQW5pbWF0aW9ucygpLHRoaXMuZWZmZWN0LmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oYyl7dmFyIGQ9Yi50aW1lbGluZS5fcGxheShjKTt0aGlzLl9jaGlsZEFuaW1hdGlvbnMucHVzaChkKSxkLnBsYXliYWNrUmF0ZT10aGlzLnBsYXliYWNrUmF0ZSx0aGlzLl9wYXVzZWQmJmQucGF1c2UoKSxjLl9hbmltYXRpb249dGhpcy5lZmZlY3QuX2FuaW1hdGlvbix0aGlzLl9hcnJhbmdlQ2hpbGRyZW4oZCxhKSx0aGlzLmVmZmVjdCBpbnN0YW5jZW9mIHdpbmRvdy5TZXF1ZW5jZUVmZmVjdCYmKGErPWIuZ3JvdXBDaGlsZER1cmF0aW9uKGMpKX0uYmluZCh0aGlzKSl9fSxfYXJyYW5nZUNoaWxkcmVuOmZ1bmN0aW9uKGEsYil7bnVsbD09PXRoaXMuc3RhcnRUaW1lP2EuY3VycmVudFRpbWU9dGhpcy5jdXJyZW50VGltZS1iL3RoaXMucGxheWJhY2tSYXRlOmEuc3RhcnRUaW1lIT09dGhpcy5zdGFydFRpbWUrYi90aGlzLnBsYXliYWNrUmF0ZSYmKGEuc3RhcnRUaW1lPXRoaXMuc3RhcnRUaW1lK2IvdGhpcy5wbGF5YmFja1JhdGUpfSxnZXQgdGltZWxpbmUoKXtyZXR1cm4gdGhpcy5fdGltZWxpbmV9LGdldCBwbGF5U3RhdGUoKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9uP3RoaXMuX2FuaW1hdGlvbi5wbGF5U3RhdGU6ImlkbGUifSxnZXQgZmluaXNoZWQoKXtyZXR1cm4gd2luZG93LlByb21pc2U/KHRoaXMuX2ZpbmlzaGVkUHJvbWlzZXx8KC0xPT1iLmFuaW1hdGlvbnNXaXRoUHJvbWlzZXMuaW5kZXhPZih0aGlzKSYmYi5hbmltYXRpb25zV2l0aFByb21pc2VzLnB1c2godGhpcyksdGhpcy5fZmluaXNoZWRQcm9taXNlPW5ldyBQcm9taXNlKGZ1bmN0aW9uKGEsYil7dGhpcy5fcmVzb2x2ZUZpbmlzaGVkUHJvbWlzZT1mdW5jdGlvbigpe2EodGhpcyl9LHRoaXMuX3JlamVjdEZpbmlzaGVkUHJvbWlzZT1mdW5jdGlvbigpe2Ioe3R5cGU6RE9NRXhjZXB0aW9uLkFCT1JUX0VSUixuYW1lOiJBYm9ydEVycm9yIn0pfX0uYmluZCh0aGlzKSksImZpbmlzaGVkIj09dGhpcy5wbGF5U3RhdGUmJnRoaXMuX3Jlc29sdmVGaW5pc2hlZFByb21pc2UoKSksdGhpcy5fZmluaXNoZWRQcm9taXNlKTooY29uc29sZS53YXJuKCJBbmltYXRpb24gUHJvbWlzZXMgcmVxdWlyZSBKYXZhU2NyaXB0IFByb21pc2UgY29uc3RydWN0b3IiKSxudWxsKX0sZ2V0IHJlYWR5KCl7cmV0dXJuIHdpbmRvdy5Qcm9taXNlPyh0aGlzLl9yZWFkeVByb21pc2V8fCgtMT09Yi5hbmltYXRpb25zV2l0aFByb21pc2VzLmluZGV4T2YodGhpcykmJmIuYW5pbWF0aW9uc1dpdGhQcm9taXNlcy5wdXNoKHRoaXMpLHRoaXMuX3JlYWR5UHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbihhLGIpe3RoaXMuX3Jlc29sdmVSZWFkeVByb21pc2U9ZnVuY3Rpb24oKXthKHRoaXMpfSx0aGlzLl9yZWplY3RSZWFkeVByb21pc2U9ZnVuY3Rpb24oKXtiKHt0eXBlOkRPTUV4Y2VwdGlvbi5BQk9SVF9FUlIsbmFtZToiQWJvcnRFcnJvciJ9KX19LmJpbmQodGhpcykpLCJwZW5kaW5nIiE9PXRoaXMucGxheVN0YXRlJiZ0aGlzLl9yZXNvbHZlUmVhZHlQcm9taXNlKCkpLHRoaXMuX3JlYWR5UHJvbWlzZSk6KGNvbnNvbGUud2FybigiQW5pbWF0aW9uIFByb21pc2VzIHJlcXVpcmUgSmF2YVNjcmlwdCBQcm9taXNlIGNvbnN0cnVjdG9yIiksbnVsbCl9LGdldCBvbmZpbmlzaCgpe3JldHVybiB0aGlzLl9hbmltYXRpb24ub25maW5pc2h9LHNldCBvbmZpbmlzaChhKXt0aGlzLl9hbmltYXRpb24ub25maW5pc2g9ImZ1bmN0aW9uIj09dHlwZW9mIGE/ZnVuY3Rpb24oYil7Yi50YXJnZXQ9dGhpcyxhLmNhbGwodGhpcyxiKX0uYmluZCh0aGlzKTphfSxnZXQgb25jYW5jZWwoKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9uLm9uY2FuY2VsfSxzZXQgb25jYW5jZWwoYSl7dGhpcy5fYW5pbWF0aW9uLm9uY2FuY2VsPSJmdW5jdGlvbiI9PXR5cGVvZiBhP2Z1bmN0aW9uKGIpe2IudGFyZ2V0PXRoaXMsYS5jYWxsKHRoaXMsYil9LmJpbmQodGhpcyk6YX0sZ2V0IGN1cnJlbnRUaW1lKCl7dGhpcy5fdXBkYXRlUHJvbWlzZXMoKTt2YXIgYT10aGlzLl9hbmltYXRpb24uY3VycmVudFRpbWU7cmV0dXJuIHRoaXMuX3VwZGF0ZVByb21pc2VzKCksYX0sc2V0IGN1cnJlbnRUaW1lKGEpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCksdGhpcy5fYW5pbWF0aW9uLmN1cnJlbnRUaW1lPWlzRmluaXRlKGEpP2E6TWF0aC5zaWduKGEpKk51bWJlci5NQVhfVkFMVUUsdGhpcy5fcmVnaXN0ZXIoKSx0aGlzLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24oYixjKXtiLmN1cnJlbnRUaW1lPWEtY30pLHRoaXMuX3VwZGF0ZVByb21pc2VzKCl9LGdldCBzdGFydFRpbWUoKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9uLnN0YXJ0VGltZX0sc2V0IHN0YXJ0VGltZShhKXt0aGlzLl91cGRhdGVQcm9taXNlcygpLHRoaXMuX2FuaW1hdGlvbi5zdGFydFRpbWU9aXNGaW5pdGUoYSk/YTpNYXRoLnNpZ24oYSkqTnVtYmVyLk1BWF9WQUxVRSx0aGlzLl9yZWdpc3RlcigpLHRoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihiLGMpe2Iuc3RhcnRUaW1lPWErY30pLHRoaXMuX3VwZGF0ZVByb21pc2VzKCl9LGdldCBwbGF5YmFja1JhdGUoKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9uLnBsYXliYWNrUmF0ZX0sc2V0IHBsYXliYWNrUmF0ZShhKXt0aGlzLl91cGRhdGVQcm9taXNlcygpO3ZhciBiPXRoaXMuY3VycmVudFRpbWU7dGhpcy5fYW5pbWF0aW9uLnBsYXliYWNrUmF0ZT1hLHRoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihiKXtiLnBsYXliYWNrUmF0ZT1hfSksbnVsbCE9PWImJih0aGlzLmN1cnJlbnRUaW1lPWIpLHRoaXMuX3VwZGF0ZVByb21pc2VzKCl9LHBsYXk6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVQcm9taXNlcygpLHRoaXMuX3BhdXNlZD0hMSx0aGlzLl9hbmltYXRpb24ucGxheSgpLC0xPT10aGlzLl90aW1lbGluZS5fYW5pbWF0aW9ucy5pbmRleE9mKHRoaXMpJiZ0aGlzLl90aW1lbGluZS5fYW5pbWF0aW9ucy5wdXNoKHRoaXMpLHRoaXMuX3JlZ2lzdGVyKCksYi5hd2FpdFN0YXJ0VGltZSh0aGlzKSx0aGlzLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24oYSl7dmFyIGI9YS5jdXJyZW50VGltZTthLnBsYXkoKSxhLmN1cnJlbnRUaW1lPWJ9KSx0aGlzLl91cGRhdGVQcm9taXNlcygpfSxwYXVzZTpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCksdGhpcy5jdXJyZW50VGltZSYmKHRoaXMuX2hvbGRUaW1lPXRoaXMuY3VycmVudFRpbWUpLHRoaXMuX2FuaW1hdGlvbi5wYXVzZSgpLHRoaXMuX3JlZ2lzdGVyKCksdGhpcy5fZm9yRWFjaENoaWxkKGZ1bmN0aW9uKGEpe2EucGF1c2UoKX0pLHRoaXMuX3BhdXNlZD0hMCx0aGlzLl91cGRhdGVQcm9taXNlcygpfSxmaW5pc2g6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVQcm9taXNlcygpLHRoaXMuX2FuaW1hdGlvbi5maW5pc2goKSx0aGlzLl9yZWdpc3RlcigpLHRoaXMuX3VwZGF0ZVByb21pc2VzKCl9LGNhbmNlbDpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCksdGhpcy5fYW5pbWF0aW9uLmNhbmNlbCgpLHRoaXMuX3JlZ2lzdGVyKCksdGhpcy5fcmVtb3ZlQ2hpbGRBbmltYXRpb25zKCksdGhpcy5fdXBkYXRlUHJvbWlzZXMoKX0scmV2ZXJzZTpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCk7dmFyIGE9dGhpcy5jdXJyZW50VGltZTt0aGlzLl9hbmltYXRpb24ucmV2ZXJzZSgpLHRoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihhKXthLnJldmVyc2UoKX0pLG51bGwhPT1hJiYodGhpcy5jdXJyZW50VGltZT1hKSx0aGlzLl91cGRhdGVQcm9taXNlcygpfSxhZGRFdmVudExpc3RlbmVyOmZ1bmN0aW9uKGEsYil7dmFyIGM9YjsiZnVuY3Rpb24iPT10eXBlb2YgYiYmKGM9ZnVuY3Rpb24oYSl7YS50YXJnZXQ9dGhpcyxiLmNhbGwodGhpcyxhKX0uYmluZCh0aGlzKSxiLl93cmFwcGVyPWMpLHRoaXMuX2FuaW1hdGlvbi5hZGRFdmVudExpc3RlbmVyKGEsYyl9LHJlbW92ZUV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxiKXt0aGlzLl9hbmltYXRpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGImJmIuX3dyYXBwZXJ8fGIpfSxfcmVtb3ZlQ2hpbGRBbmltYXRpb25zOmZ1bmN0aW9uKCl7Zm9yKDt0aGlzLl9jaGlsZEFuaW1hdGlvbnMubGVuZ3RoOyl0aGlzLl9jaGlsZEFuaW1hdGlvbnMucG9wKCkuY2FuY2VsKCl9LF9mb3JFYWNoQ2hpbGQ6ZnVuY3Rpb24oYil7dmFyIGM9MDtpZih0aGlzLmVmZmVjdC5jaGlsZHJlbiYmdGhpcy5fY2hpbGRBbmltYXRpb25zLmxlbmd0aDx0aGlzLmVmZmVjdC5jaGlsZHJlbi5sZW5ndGgmJnRoaXMuX2NvbnN0cnVjdENoaWxkQW5pbWF0aW9ucygpLHRoaXMuX2NoaWxkQW5pbWF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2IuY2FsbCh0aGlzLGEsYyksdGhpcy5lZmZlY3QgaW5zdGFuY2VvZiB3aW5kb3cuU2VxdWVuY2VFZmZlY3QmJihjKz1hLmVmZmVjdC5hY3RpdmVEdXJhdGlvbil9LmJpbmQodGhpcykpLCJwZW5kaW5nIiE9dGhpcy5wbGF5U3RhdGUpe3ZhciBkPXRoaXMuZWZmZWN0Ll90aW1pbmcsZT10aGlzLmN1cnJlbnRUaW1lO251bGwhPT1lJiYoZT1hLmNhbGN1bGF0ZUl0ZXJhdGlvblByb2dyZXNzKGEuY2FsY3VsYXRlQWN0aXZlRHVyYXRpb24oZCksZSxkKSksKG51bGw9PWV8fGlzTmFOKGUpKSYmdGhpcy5fcmVtb3ZlQ2hpbGRBbmltYXRpb25zKCl9fX0sd2luZG93LkFuaW1hdGlvbj1iLkFuaW1hdGlvbn0oYSxjKSxmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZChiKXt0aGlzLl9mcmFtZXM9YS5ub3JtYWxpemVLZXlmcmFtZXMoYil9ZnVuY3Rpb24gZSgpe2Zvcih2YXIgYT0hMTtpLmxlbmd0aDspaS5zaGlmdCgpLl91cGRhdGVDaGlsZHJlbigpLGE9ITA7cmV0dXJuIGF9dmFyIGY9ZnVuY3Rpb24oYSl7aWYoYS5fYW5pbWF0aW9uPXZvaWQgMCxhIGluc3RhbmNlb2Ygd2luZG93LlNlcXVlbmNlRWZmZWN0fHxhIGluc3RhbmNlb2Ygd2luZG93Lkdyb3VwRWZmZWN0KWZvcih2YXIgYj0wO2I8YS5jaGlsZHJlbi5sZW5ndGg7YisrKWYoYS5jaGlsZHJlbltiXSl9O2IucmVtb3ZlTXVsdGk9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9MDtjPGEubGVuZ3RoO2MrKyl7dmFyIGQ9YVtjXTtkLl9wYXJlbnQ/KC0xPT1iLmluZGV4T2YoZC5fcGFyZW50KSYmYi5wdXNoKGQuX3BhcmVudCksZC5fcGFyZW50LmNoaWxkcmVuLnNwbGljZShkLl9wYXJlbnQuY2hpbGRyZW4uaW5kZXhPZihkKSwxKSxkLl9wYXJlbnQ9bnVsbCxmKGQpKTpkLl9hbmltYXRpb24mJmQuX2FuaW1hdGlvbi5lZmZlY3Q9PWQmJihkLl9hbmltYXRpb24uY2FuY2VsKCksZC5fYW5pbWF0aW9uLmVmZmVjdD1uZXcgS2V5ZnJhbWVFZmZlY3QobnVsbCxbXSksZC5fYW5pbWF0aW9uLl9jYWxsYmFjayYmKGQuX2FuaW1hdGlvbi5fY2FsbGJhY2suX2FuaW1hdGlvbj1udWxsKSxkLl9hbmltYXRpb24uX3JlYnVpbGRVbmRlcmx5aW5nQW5pbWF0aW9uKCksZihkKSl9Zm9yKGM9MDtjPGIubGVuZ3RoO2MrKyliW2NdLl9yZWJ1aWxkKCl9LGIuS2V5ZnJhbWVFZmZlY3Q9ZnVuY3Rpb24oYixjLGUsZil7cmV0dXJuIHRoaXMudGFyZ2V0PWIsdGhpcy5fcGFyZW50PW51bGwsZT1hLm51bWVyaWNUaW1pbmdUb09iamVjdChlKSx0aGlzLl90aW1pbmdJbnB1dD1hLmNsb25lVGltaW5nSW5wdXQoZSksdGhpcy5fdGltaW5nPWEubm9ybWFsaXplVGltaW5nSW5wdXQoZSksdGhpcy50aW1pbmc9YS5tYWtlVGltaW5nKGUsITEsdGhpcyksdGhpcy50aW1pbmcuX2VmZmVjdD10aGlzLCJmdW5jdGlvbiI9PXR5cGVvZiBjPyhhLmRlcHJlY2F0ZWQoIkN1c3RvbSBLZXlmcmFtZUVmZmVjdCIsIjIwMTUtMDYtMjIiLCJVc2UgS2V5ZnJhbWVFZmZlY3Qub25zYW1wbGUgaW5zdGVhZC4iKSx0aGlzLl9ub3JtYWxpemVkS2V5ZnJhbWVzPWMpOnRoaXMuX25vcm1hbGl6ZWRLZXlmcmFtZXM9bmV3IGQoYyksdGhpcy5fa2V5ZnJhbWVzPWMsdGhpcy5hY3RpdmVEdXJhdGlvbj1hLmNhbGN1bGF0ZUFjdGl2ZUR1cmF0aW9uKHRoaXMuX3RpbWluZyksdGhpcy5faWQ9Zix0aGlzfSxiLktleWZyYW1lRWZmZWN0LnByb3RvdHlwZT17Z2V0RnJhbWVzOmZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuX25vcm1hbGl6ZWRLZXlmcmFtZXM/dGhpcy5fbm9ybWFsaXplZEtleWZyYW1lczp0aGlzLl9ub3JtYWxpemVkS2V5ZnJhbWVzLl9mcmFtZXN9LHNldCBvbnNhbXBsZShhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5nZXRGcmFtZXMoKSl0aHJvdyBuZXcgRXJyb3IoIlNldHRpbmcgb25zYW1wbGUgb24gY3VzdG9tIGVmZmVjdCBLZXlmcmFtZUVmZmVjdCBpcyBub3Qgc3VwcG9ydGVkLiIpO3RoaXMuX29uc2FtcGxlPWEsdGhpcy5fYW5pbWF0aW9uJiZ0aGlzLl9hbmltYXRpb24uX3JlYnVpbGRVbmRlcmx5aW5nQW5pbWF0aW9uKCl9LGdldCBwYXJlbnQoKXtyZXR1cm4gdGhpcy5fcGFyZW50fSxjbG9uZTpmdW5jdGlvbigpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLmdldEZyYW1lcygpKXRocm93IG5ldyBFcnJvcigiQ2xvbmluZyBjdXN0b20gZWZmZWN0cyBpcyBub3Qgc3VwcG9ydGVkLiIpO3ZhciBiPW5ldyBLZXlmcmFtZUVmZmVjdCh0aGlzLnRhcmdldCxbXSxhLmNsb25lVGltaW5nSW5wdXQodGhpcy5fdGltaW5nSW5wdXQpLHRoaXMuX2lkKTtyZXR1cm4gYi5fbm9ybWFsaXplZEtleWZyYW1lcz10aGlzLl9ub3JtYWxpemVkS2V5ZnJhbWVzLGIuX2tleWZyYW1lcz10aGlzLl9rZXlmcmFtZXMsYn0scmVtb3ZlOmZ1bmN0aW9uKCl7Yi5yZW1vdmVNdWx0aShbdGhpc10pfX07dmFyIGc9RWxlbWVudC5wcm90b3R5cGUuYW5pbWF0ZTtFbGVtZW50LnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKGEsYyl7dmFyIGQ9IiI7cmV0dXJuIGMmJmMuaWQmJihkPWMuaWQpLGIudGltZWxpbmUuX3BsYXkobmV3IGIuS2V5ZnJhbWVFZmZlY3QodGhpcyxhLGMsZCkpfTt2YXIgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJkaXYiKTtiLm5ld1VuZGVybHlpbmdBbmltYXRpb25Gb3JLZXlmcmFtZUVmZmVjdD1mdW5jdGlvbihhKXtpZihhKXt2YXIgYj1hLnRhcmdldHx8aCxjPWEuX2tleWZyYW1lczsiZnVuY3Rpb24iPT10eXBlb2YgYyYmKGM9W10pO3ZhciBkPWEuX3RpbWluZ0lucHV0O2QuaWQ9YS5faWR9ZWxzZSB2YXIgYj1oLGM9W10sZD0wO3JldHVybiBnLmFwcGx5KGIsW2MsZF0pfSxiLmJpbmRBbmltYXRpb25Gb3JLZXlmcmFtZUVmZmVjdD1mdW5jdGlvbihhKXthLmVmZmVjdCYmImZ1bmN0aW9uIj09dHlwZW9mIGEuZWZmZWN0Ll9ub3JtYWxpemVkS2V5ZnJhbWVzJiZiLmJpbmRBbmltYXRpb25Gb3JDdXN0b21FZmZlY3QoYSl9O3ZhciBpPVtdO2IuYXdhaXRTdGFydFRpbWU9ZnVuY3Rpb24oYSl7bnVsbD09PWEuc3RhcnRUaW1lJiZhLl9pc0dyb3VwJiYoMD09aS5sZW5ndGgmJnJlcXVlc3RBbmltYXRpb25GcmFtZShlKSxpLnB1c2goYSkpfTt2YXIgaj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZTtPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCJnZXRDb21wdXRlZFN0eWxlIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6ZnVuY3Rpb24oKXtiLnRpbWVsaW5lLl91cGRhdGVBbmltYXRpb25zUHJvbWlzZXMoKTt2YXIgYT1qLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZSgpJiYoYT1qLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksYi50aW1lbGluZS5fdXBkYXRlQW5pbWF0aW9uc1Byb21pc2VzKCksYX19KSx3aW5kb3cuS2V5ZnJhbWVFZmZlY3Q9Yi5LZXlmcmFtZUVmZmVjdCx3aW5kb3cuRWxlbWVudC5wcm90b3R5cGUuZ2V0QW5pbWF0aW9ucz1mdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC50aW1lbGluZS5nZXRBbmltYXRpb25zKCkuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBudWxsIT09YS5lZmZlY3QmJmEuZWZmZWN0LnRhcmdldD09dGhpc30uYmluZCh0aGlzKSl9fShhLGMpLGZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEpe2EuX3JlZ2lzdGVyZWR8fChhLl9yZWdpc3RlcmVkPSEwLGcucHVzaChhKSxofHwoaD0hMCxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZSkpKX1mdW5jdGlvbiBlKGEpe3ZhciBiPWc7Zz1bXSxiLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5fc2VxdWVuY2VOdW1iZXItYi5fc2VxdWVuY2VOdW1iZXJ9KSxiPWIuZmlsdGVyKGZ1bmN0aW9uKGEpe2EoKTt2YXIgYj1hLl9hbmltYXRpb24/YS5fYW5pbWF0aW9uLnBsYXlTdGF0ZToiaWRsZSI7cmV0dXJuInJ1bm5pbmciIT1iJiYicGVuZGluZyIhPWImJihhLl9yZWdpc3RlcmVkPSExKSxhLl9yZWdpc3RlcmVkfSksZy5wdXNoLmFwcGx5KGcsYiksZy5sZW5ndGg/KGg9ITAscmVxdWVzdEFuaW1hdGlvbkZyYW1lKGUpKTpoPSExfXZhciBmPShkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJkaXYiKSwwKTtiLmJpbmRBbmltYXRpb25Gb3JDdXN0b21FZmZlY3Q9ZnVuY3Rpb24oYil7dmFyIGMsZT1iLmVmZmVjdC50YXJnZXQsZz0iZnVuY3Rpb24iPT10eXBlb2YgYi5lZmZlY3QuZ2V0RnJhbWVzKCk7Yz1nP2IuZWZmZWN0LmdldEZyYW1lcygpOmIuZWZmZWN0Ll9vbnNhbXBsZTt2YXIgaD1iLmVmZmVjdC50aW1pbmcsaT1udWxsO2g9YS5ub3JtYWxpemVUaW1pbmdJbnB1dChoKTt2YXIgaj1mdW5jdGlvbigpe3ZhciBkPWouX2FuaW1hdGlvbj9qLl9hbmltYXRpb24uY3VycmVudFRpbWU6bnVsbDtudWxsIT09ZCYmKGQ9YS5jYWxjdWxhdGVJdGVyYXRpb25Qcm9ncmVzcyhhLmNhbGN1bGF0ZUFjdGl2ZUR1cmF0aW9uKGgpLGQsaCksaXNOYU4oZCkmJihkPW51bGwpKSxkIT09aSYmKGc/YyhkLGUsYi5lZmZlY3QpOmMoZCxiLmVmZmVjdCxiLmVmZmVjdC5fYW5pbWF0aW9uKSksaT1kfTtqLl9hbmltYXRpb249YixqLl9yZWdpc3RlcmVkPSExLGouX3NlcXVlbmNlTnVtYmVyPWYrKyxiLl9jYWxsYmFjaz1qLGQoail9O3ZhciBnPVtdLGg9ITE7Yi5BbmltYXRpb24ucHJvdG90eXBlLl9yZWdpc3Rlcj1mdW5jdGlvbigpe3RoaXMuX2NhbGxiYWNrJiZkKHRoaXMuX2NhbGxiYWNrKX19KGEsYyksZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYSl7cmV0dXJuIGEuX3RpbWluZy5kZWxheSthLmFjdGl2ZUR1cmF0aW9uK2EuX3RpbWluZy5lbmREZWxheX1mdW5jdGlvbiBlKGIsYyxkKXt0aGlzLl9pZD1kLHRoaXMuX3BhcmVudD1udWxsLHRoaXMuY2hpbGRyZW49Ynx8W10sdGhpcy5fcmVwYXJlbnQodGhpcy5jaGlsZHJlbiksYz1hLm51bWVyaWNUaW1pbmdUb09iamVjdChjKSx0aGlzLl90aW1pbmdJbnB1dD1hLmNsb25lVGltaW5nSW5wdXQoYyksdGhpcy5fdGltaW5nPWEubm9ybWFsaXplVGltaW5nSW5wdXQoYywhMCksdGhpcy50aW1pbmc9YS5tYWtlVGltaW5nKGMsITAsdGhpcyksdGhpcy50aW1pbmcuX2VmZmVjdD10aGlzLCJhdXRvIj09PXRoaXMuX3RpbWluZy5kdXJhdGlvbiYmKHRoaXMuX3RpbWluZy5kdXJhdGlvbj10aGlzLmFjdGl2ZUR1cmF0aW9uKX13aW5kb3cuU2VxdWVuY2VFZmZlY3Q9ZnVuY3Rpb24oKXtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sd2luZG93Lkdyb3VwRWZmZWN0PWZ1bmN0aW9uKCl7ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGUucHJvdG90eXBlPXtfaXNBbmNlc3RvcjpmdW5jdGlvbihhKXtmb3IodmFyIGI9dGhpcztudWxsIT09Yjspe2lmKGI9PWEpcmV0dXJuITA7Yj1iLl9wYXJlbnR9cmV0dXJuITF9LF9yZWJ1aWxkOmZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXM7YTspImF1dG8iPT09YS50aW1pbmcuZHVyYXRpb24mJihhLl90aW1pbmcuZHVyYXRpb249YS5hY3RpdmVEdXJhdGlvbiksYT1hLl9wYXJlbnQ7dGhpcy5fYW5pbWF0aW9uJiZ0aGlzLl9hbmltYXRpb24uX3JlYnVpbGRVbmRlcmx5aW5nQW5pbWF0aW9uKCl9LF9yZXBhcmVudDpmdW5jdGlvbihhKXtiLnJlbW92ZU11bHRpKGEpO2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKWFbY10uX3BhcmVudD10aGlzfSxfcHV0Q2hpbGQ6ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9Yj8iQ2Fubm90IGFwcGVuZCBhbiBhbmNlc3RvciBvciBzZWxmIjoiQ2Fubm90IHByZXBlbmQgYW4gYW5jZXN0b3Igb3Igc2VsZiIsZD0wO2Q8YS5sZW5ndGg7ZCsrKWlmKHRoaXMuX2lzQW5jZXN0b3IoYVtkXSkpdGhyb3d7dHlwZTpET01FeGNlcHRpb24uSElFUkFSQ0hZX1JFUVVFU1RfRVJSLG5hbWU6IkhpZXJhcmNoeVJlcXVlc3RFcnJvciIsbWVzc2FnZTpjfTtmb3IodmFyIGQ9MDtkPGEubGVuZ3RoO2QrKyliP3RoaXMuY2hpbGRyZW4ucHVzaChhW2RdKTp0aGlzLmNoaWxkcmVuLnVuc2hpZnQoYVtkXSk7dGhpcy5fcmVwYXJlbnQoYSksdGhpcy5fcmVidWlsZCgpfSxhcHBlbmQ6ZnVuY3Rpb24oKXt0aGlzLl9wdXRDaGlsZChhcmd1bWVudHMsITApfSxwcmVwZW5kOmZ1bmN0aW9uKCl7dGhpcy5fcHV0Q2hpbGQoYXJndW1lbnRzLCExKX0sZ2V0IHBhcmVudCgpe3JldHVybiB0aGlzLl9wYXJlbnR9LGdldCBmaXJzdENoaWxkKCl7cmV0dXJuIHRoaXMuY2hpbGRyZW4ubGVuZ3RoP3RoaXMuY2hpbGRyZW5bMF06bnVsbH0sZ2V0IGxhc3RDaGlsZCgpe3JldHVybiB0aGlzLmNoaWxkcmVuLmxlbmd0aD90aGlzLmNoaWxkcmVuW3RoaXMuY2hpbGRyZW4ubGVuZ3RoLTFdOm51bGx9LGNsb25lOmZ1bmN0aW9uKCl7Zm9yKHZhciBiPWEuY2xvbmVUaW1pbmdJbnB1dCh0aGlzLl90aW1pbmdJbnB1dCksYz1bXSxkPTA7ZDx0aGlzLmNoaWxkcmVuLmxlbmd0aDtkKyspYy5wdXNoKHRoaXMuY2hpbGRyZW5bZF0uY2xvbmUoKSk7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBHcm91cEVmZmVjdD9uZXcgR3JvdXBFZmZlY3QoYyxiKTpuZXcgU2VxdWVuY2VFZmZlY3QoYyxiKX0scmVtb3ZlOmZ1bmN0aW9uKCl7Yi5yZW1vdmVNdWx0aShbdGhpc10pfX0sd2luZG93LlNlcXVlbmNlRWZmZWN0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNlcXVlbmNlRWZmZWN0LnByb3RvdHlwZSwiYWN0aXZlRHVyYXRpb24iLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgYT0wO3JldHVybiB0aGlzLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oYil7YSs9ZChiKX0pLE1hdGgubWF4KGEsMCl9fSksd2luZG93Lkdyb3VwRWZmZWN0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93Lkdyb3VwRWZmZWN0LnByb3RvdHlwZSwiYWN0aXZlRHVyYXRpb24iLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgYT0wO3JldHVybiB0aGlzLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oYil7YT1NYXRoLm1heChhLGQoYikpfSksYX19KSxiLm5ld1VuZGVybHlpbmdBbmltYXRpb25Gb3JHcm91cD1mdW5jdGlvbihjKXt2YXIgZCxlPW51bGwsZj1mdW5jdGlvbihiKXt2YXIgYz1kLl93cmFwcGVyO2lmKGMmJiJwZW5kaW5nIiE9Yy5wbGF5U3RhdGUmJmMuZWZmZWN0KXJldHVybiBudWxsPT1iP3ZvaWQgYy5fcmVtb3ZlQ2hpbGRBbmltYXRpb25zKCk6MD09YiYmYy5wbGF5YmFja1JhdGU8MCYmKGV8fChlPWEubm9ybWFsaXplVGltaW5nSW5wdXQoYy5lZmZlY3QudGltaW5nKSksYj1hLmNhbGN1bGF0ZUl0ZXJhdGlvblByb2dyZXNzKGEuY2FsY3VsYXRlQWN0aXZlRHVyYXRpb24oZSksLTEsZSksaXNOYU4oYil8fG51bGw9PWIpPyhjLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24oYSl7YS5jdXJyZW50VGltZT0tMX0pLHZvaWQgYy5fcmVtb3ZlQ2hpbGRBbmltYXRpb25zKCkpOnZvaWQgMH0sZz1uZXcgS2V5ZnJhbWVFZmZlY3QobnVsbCxbXSxjLl90aW1pbmcsYy5faWQpO3JldHVybiBnLm9uc2FtcGxlPWYsZD1iLnRpbWVsaW5lLl9wbGF5KGcpfSxiLmJpbmRBbmltYXRpb25Gb3JHcm91cD1mdW5jdGlvbihhKXthLl9hbmltYXRpb24uX3dyYXBwZXI9YSxhLl9pc0dyb3VwPSEwLGIuYXdhaXRTdGFydFRpbWUoYSksYS5fY29uc3RydWN0Q2hpbGRBbmltYXRpb25zKCksYS5fc2V0RXh0ZXJuYWxBbmltYXRpb24oYSl9LGIuZ3JvdXBDaGlsZER1cmF0aW9uPWR9KGEsYyl9KCk7CgohKGZ1bmN0aW9uKCl7Ci8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uCgogICAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CiAgICBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuCgogICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEgKICAgIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQogICAgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULAogICAgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NCiAgICBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUgogICAgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUgogICAgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCmZ1bmN0aW9uIHQodCxlLG4saSl7dmFyIHIsbz1hcmd1bWVudHMubGVuZ3RoLGE9bzwzP2U6bnVsbD09PWk/aT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsbik6aTtpZigib2JqZWN0Ij09dHlwZW9mIFJlZmxlY3QmJiJmdW5jdGlvbiI9PXR5cGVvZiBSZWZsZWN0LmRlY29yYXRlKWE9UmVmbGVjdC5kZWNvcmF0ZSh0LGUsbixpKTtlbHNlIGZvcih2YXIgcz10Lmxlbmd0aC0xO3M+PTA7cy0tKShyPXRbc10pJiYoYT0obzwzP3IoYSk6bz4zP3IoZSxuLGEpOnIoZSxuKSl8fGEpO3JldHVybiBvPjMmJmEmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4sYSksYX1mdW5jdGlvbiBlKHQsZSl7aWYoIm9iamVjdCI9PXR5cGVvZiBSZWZsZWN0JiYiZnVuY3Rpb24iPT10eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSlyZXR1cm4gUmVmbGVjdC5tZXRhZGF0YSh0LGUpfWZ1bmN0aW9uIG4odCxlLG4saSl7cmV0dXJuIG5ldyhufHwobj1Qcm9taXNlKSkoKGZ1bmN0aW9uKHIsbyl7ZnVuY3Rpb24gYSh0KXt0cnl7bChpLm5leHQodCkpfWNhdGNoKHQpe28odCl9fWZ1bmN0aW9uIHModCl7dHJ5e2woaS50aHJvdyh0KSl9Y2F0Y2godCl7byh0KX19ZnVuY3Rpb24gbCh0KXt0LmRvbmU/cih0LnZhbHVlKTooZnVuY3Rpb24gZSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIG4/dDpuZXcgbigoZnVuY3Rpb24oZSl7ZSh0KX0pKX0pKHQudmFsdWUpLnRoZW4oYSxzKX1sKChpPWkuYXBwbHkodCxlfHxbXSkpLm5leHQoKSl9KSl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCAoYykgMjAxNiBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICAgKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgICAqIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kCiAgICAgKiBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5CiAgICAgKiBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5CiAgICAgKiBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQCiAgICAgKiByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAgKi9mdW5jdGlvbiBpKHQpe3JldHVybiBlPT57aWYodClpZihlLmhhc093blByb3BlcnR5KCJpcyIpKXtpZih0IT09ZS5pcyl0aHJvdyBuZXcgRXJyb3IoYGN1c3RvbSBlbGVtZW50IHRhZyBuYW1lcyBkbyBub3QgbWF0Y2g6ICgke3R9ICE9PSAke2UuaXN9KWApfWVsc2UgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImlzIix7dmFsdWU6dH0pO3dpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUoZS5pcyxlKX19ZnVuY3Rpb24gcih0LGUsbil7dC5jb25zdHJ1Y3Rvci5oYXNPd25Qcm9wZXJ0eSgicHJvcGVydGllcyIpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5jb25zdHJ1Y3RvciwicHJvcGVydGllcyIse3ZhbHVlOnt9fSksdC5jb25zdHJ1Y3Rvci5wcm9wZXJ0aWVzW2VdPU9iamVjdC5hc3NpZ24oe30sdC5jb25zdHJ1Y3Rvci5wcm9wZXJ0aWVzW2VdLG4pfWZ1bmN0aW9uIG8odCl7cmV0dXJuKGUsbik9PntyKGUsbix0KX19ZnVuY3Rpb24gYSguLi50KXtyZXR1cm4oZSxuKT0+e2UuY29uc3RydWN0b3IuaGFzT3duUHJvcGVydHkoIm9ic2VydmVycyIpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5jb25zdHJ1Y3Rvciwib2JzZXJ2ZXJzIix7dmFsdWU6W119KSxlLmNvbnN0cnVjdG9yLm9ic2VydmVycy5wdXNoKGAke259KCR7dC5qb2luKCIsIil9KWApfX1mdW5jdGlvbiBzKHQsLi4uZSl7cmV0dXJuKG4saSxvKT0+e2NvbnN0IGE9YF9fY29tcHV0ZSR7aX1gO09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLGEse3ZhbHVlOm8uZ2V0fSksby5nZXQ9dm9pZCAwLHIobixpLHtjb21wdXRlZDpgJHthfSgke1t0LC4uLmVdLmpvaW4oIiwiKX0pYH0pfX0KLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi93aW5kb3cuSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eT1mdW5jdGlvbih0LGUpe3JldHVybiB0fTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KbGV0IGwsYyx1PS8odXJsXCgpKFteKV0qKShcKSkvZyxoPS8oXlwvW15cL10pfCheIyl8KF5bXHctXGRdKjopLztmdW5jdGlvbiBkKHQsZSl7aWYodCYmaC50ZXN0KHQpKXJldHVybiB0O2lmKCIvLyI9PT10KXJldHVybiB0O2lmKHZvaWQgMD09PWwpe2w9ITE7dHJ5e2NvbnN0IHQ9bmV3IFVSTCgiYiIsImh0dHA6Ly9hIik7dC5wYXRobmFtZT0iYyUyMGQiLGw9Imh0dHA6Ly9hL2MlMjBkIj09PXQuaHJlZn1jYXRjaCh0KXt9fWlmKGV8fChlPWRvY3VtZW50LmJhc2VVUkl8fHdpbmRvdy5sb2NhdGlvbi5ocmVmKSxsKXRyeXtyZXR1cm4gbmV3IFVSTCh0LGUpLmhyZWZ9Y2F0Y2goZSl7cmV0dXJuIHR9cmV0dXJuIGN8fChjPWRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgidGVtcCIpLGMuYmFzZT1jLmNyZWF0ZUVsZW1lbnQoImJhc2UiKSxjLmhlYWQuYXBwZW5kQ2hpbGQoYy5iYXNlKSxjLmFuY2hvcj1jLmNyZWF0ZUVsZW1lbnQoImEiKSxjLmJvZHkuYXBwZW5kQ2hpbGQoYy5hbmNob3IpKSxjLmJhc2UuaHJlZj1lLGMuYW5jaG9yLmhyZWY9dCxjLmFuY2hvci5ocmVmfHx0fWZ1bmN0aW9uIHAodCxlKXtyZXR1cm4gdC5yZXBsYWNlKHUsKGZ1bmN0aW9uKHQsbixpLHIpe3JldHVybiBuKyInIitkKGkucmVwbGFjZSgvWyInXS9nLCIiKSxlKSsiJyIrcn0pKX1mdW5jdGlvbiBmKHQpe3JldHVybiB0LnN1YnN0cmluZygwLHQubGFzdEluZGV4T2YoIi8iKSsxKX0KLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi9jb25zdCBtPSF3aW5kb3cuU2hhZHlET018fCF3aW5kb3cuU2hhZHlET00uaW5Vc2U7Qm9vbGVhbighd2luZG93LlNoYWR5Q1NTfHx3aW5kb3cuU2hhZHlDU1MubmF0aXZlQ3NzKTtjb25zdCBnPW0mJiJhZG9wdGVkU3R5bGVTaGVldHMiaW4gRG9jdW1lbnQucHJvdG90eXBlJiYicmVwbGFjZVN5bmMiaW4gQ1NTU3R5bGVTaGVldC5wcm90b3R5cGUmJigoKT0+e3RyeXtjb25zdCB0PW5ldyBDU1NTdHlsZVNoZWV0O3QucmVwbGFjZVN5bmMoIiIpO2NvbnN0IGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIGUuYXR0YWNoU2hhZG93KHttb2RlOiJvcGVuIn0pLGUuc2hhZG93Um9vdC5hZG9wdGVkU3R5bGVTaGVldHM9W3RdLGUuc2hhZG93Um9vdC5hZG9wdGVkU3R5bGVTaGVldHNbMF09PT10fWNhdGNoKHQpe3JldHVybiExfX0pKCk7bGV0IF89d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLnJvb3RQYXRofHxmKGRvY3VtZW50LmJhc2VVUkl8fHdpbmRvdy5sb2NhdGlvbi5ocmVmKSx5PXdpbmRvdy5Qb2x5bWVyJiZ3aW5kb3cuUG9seW1lci5zYW5pdGl6ZURPTVZhbHVlfHx2b2lkIDAsdj13aW5kb3cuUG9seW1lciYmd2luZG93LlBvbHltZXIuc2V0UGFzc2l2ZVRvdWNoR2VzdHVyZXN8fCExLGI9d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLnN0cmljdFRlbXBsYXRlUG9saWN5fHwhMSx4PXdpbmRvdy5Qb2x5bWVyJiZ3aW5kb3cuUG9seW1lci5hbGxvd1RlbXBsYXRlRnJvbURvbU1vZHVsZXx8ITEsdz13aW5kb3cuUG9seW1lciYmd2luZG93LlBvbHltZXIubGVnYWN5T3B0aW1pemF0aW9uc3x8ITEsUz13aW5kb3cuUG9seW1lciYmd2luZG93LlBvbHltZXIubGVnYWN5V2FybmluZ3N8fCExLE09d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLnN5bmNJbml0aWFsUmVuZGVyfHwhMSxFPXdpbmRvdy5Qb2x5bWVyJiZ3aW5kb3cuUG9seW1lci5sZWdhY3lVbmRlZmluZWR8fCExLFQ9d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLm9yZGVyZWRDb21wdXRlZHx8ITEsQz13aW5kb3cuUG9seW1lciYmd2luZG93LlBvbHltZXIucmVtb3ZlTmVzdGVkVGVtcGxhdGVzfHwhMSxBPXdpbmRvdy5Qb2x5bWVyJiZ3aW5kb3cuUG9seW1lci5mYXN0RG9tSWZ8fCExLGs9d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLnN1cHByZXNzVGVtcGxhdGVOb3RpZmljYXRpb25zfHwhMSxMPXdpbmRvdy5Qb2x5bWVyJiZ3aW5kb3cuUG9seW1lci5sZWdhY3lOb09ic2VydmVkQXR0cmlidXRlc3x8ITEsUD13aW5kb3cuUG9seW1lciYmd2luZG93LlBvbHltZXIudXNlQWRvcHRlZFN0eWxlU2hlZXRzV2l0aEJ1aWx0Q1NTfHwhMSxOPTA7Y29uc3QgST1mdW5jdGlvbih0KXtsZXQgZT10Ll9fbWl4aW5BcHBsaWNhdGlvbnM7ZXx8KGU9bmV3IFdlYWtNYXAsdC5fX21peGluQXBwbGljYXRpb25zPWUpO2xldCBuPU4rKztyZXR1cm4gZnVuY3Rpb24gaShyKXtsZXQgbz1yLl9fbWl4aW5TZXQ7aWYobyYmb1tuXSlyZXR1cm4gcjtsZXQgYT1lLHM9YS5nZXQocik7aWYoIXMpe3M9dChyKSxhLnNldChyLHMpO2xldCBlPU9iamVjdC5jcmVhdGUocy5fX21peGluU2V0fHxvfHxudWxsKTtlW25dPSEwLHMuX19taXhpblNldD1lfXJldHVybiBzfX07Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovbGV0IE89e30sUj17fTtmdW5jdGlvbiB6KHQsZSl7T1t0XT1SW3QudG9Mb3dlckNhc2UoKV09ZX1mdW5jdGlvbiBEKHQpe3JldHVybiBPW3RdfHxSW3QudG9Mb3dlckNhc2UoKV19Y2xhc3MgQiBleHRlbmRzIEhUTUxFbGVtZW50e3N0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCl7cmV0dXJuWyJpZCJdfXN0YXRpYyBpbXBvcnQodCxlKXtpZih0KXtsZXQgbj1EKHQpO3JldHVybiBuJiZlP24ucXVlcnlTZWxlY3RvcihlKTpufXJldHVybiBudWxsfWF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayh0LGUsbixpKXtlIT09biYmdGhpcy5yZWdpc3RlcigpfWdldCBhc3NldHBhdGgoKXtpZighdGhpcy5fX2Fzc2V0cGF0aCl7Y29uc3QgdD13aW5kb3cuSFRNTEltcG9ydHMmJkhUTUxJbXBvcnRzLmltcG9ydEZvckVsZW1lbnQ/SFRNTEltcG9ydHMuaW1wb3J0Rm9yRWxlbWVudCh0aGlzKXx8ZG9jdW1lbnQ6dGhpcy5vd25lckRvY3VtZW50LGU9ZCh0aGlzLmdldEF0dHJpYnV0ZSgiYXNzZXRwYXRoIil8fCIiLHQuYmFzZVVSSSk7dGhpcy5fX2Fzc2V0cGF0aD1mKGUpfXJldHVybiB0aGlzLl9fYXNzZXRwYXRofXJlZ2lzdGVyKHQpe2lmKHQ9dHx8dGhpcy5pZCl7aWYoYiYmdm9pZCAwIT09RCh0KSl0aHJvdyB6KHQsbnVsbCksbmV3IEVycm9yKGBzdHJpY3RUZW1wbGF0ZVBvbGljeTogZG9tLW1vZHVsZSAke3R9IHJlLXJlZ2lzdGVyZWRgKTt0aGlzLmlkPXQseih0LHRoaXMpLChmdW5jdGlvbiBlKHQpe3QucXVlcnlTZWxlY3Rvcigic3R5bGUiKSYmY29uc29sZS53YXJuKCJkb20tbW9kdWxlICVzIGhhcyBzdHlsZSBvdXRzaWRlIHRlbXBsYXRlIix0LmlkKX0pKHRoaXMpfX19Qi5wcm90b3R5cGUubW9kdWxlcz1PLGN1c3RvbUVsZW1lbnRzLmRlZmluZSgiZG9tLW1vZHVsZSIsQik7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCmNvbnN0IEg9InNoYWR5LXVuc2NvcGVkIjtmdW5jdGlvbiBGKHQpe3JldHVybiBCLmltcG9ydCh0KX1mdW5jdGlvbiBWKHQpe2NvbnN0IGU9cCgodC5ib2R5P3QuYm9keTp0KS50ZXh0Q29udGVudCx0LmJhc2VVUkkpLG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtyZXR1cm4gbi50ZXh0Q29udGVudD1lLG59ZnVuY3Rpb24gVSh0KXtjb25zdCBlPXQudHJpbSgpLnNwbGl0KC9ccysvKSxuPVtdO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKW4ucHVzaCguLi5qKGVbdF0pKTtyZXR1cm4gbn1mdW5jdGlvbiBqKHQpe2NvbnN0IGU9Rih0KTtpZighZSlyZXR1cm4gY29uc29sZS53YXJuKCJDb3VsZCBub3QgZmluZCBzdHlsZSBkYXRhIGluIG1vZHVsZSBuYW1lZCIsdCksW107aWYodm9pZCAwPT09ZS5fc3R5bGVzKXtjb25zdCB0PVtdO3QucHVzaCguLi5XKGUpKTtjb25zdCBuPWUucXVlcnlTZWxlY3RvcigidGVtcGxhdGUiKTtuJiZ0LnB1c2goLi4uRyhuLGUuYXNzZXRwYXRoKSksZS5fc3R5bGVzPXR9cmV0dXJuIGUuX3N0eWxlc31mdW5jdGlvbiBHKHQsZSl7aWYoIXQuX3N0eWxlcyl7Y29uc3Qgbj1bXSxpPXQuY29udGVudC5xdWVyeVNlbGVjdG9yQWxsKCJzdHlsZSIpO2ZvcihsZXQgdD0wO3Q8aS5sZW5ndGg7dCsrKXtsZXQgcj1pW3RdLG89ci5nZXRBdHRyaWJ1dGUoImluY2x1ZGUiKTtvJiZuLnB1c2goLi4uVShvKS5maWx0ZXIoKGZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gbi5pbmRleE9mKHQpPT09ZX0pKSksZSYmKHIudGV4dENvbnRlbnQ9cChyLnRleHRDb250ZW50LGUpKSxuLnB1c2gocil9dC5fc3R5bGVzPW59cmV0dXJuIHQuX3N0eWxlc31mdW5jdGlvbiBXKHQpe2NvbnN0IGU9W10sbj10LnF1ZXJ5U2VsZWN0b3JBbGwoImxpbmtbcmVsPWltcG9ydF1bdHlwZX49Y3NzXSIpO2ZvcihsZXQgdD0wO3Q8bi5sZW5ndGg7dCsrKXtsZXQgaT1uW3RdO2lmKGkuaW1wb3J0KXtjb25zdCB0PWkuaW1wb3J0LG49aS5oYXNBdHRyaWJ1dGUoSCk7aWYobiYmIXQuX3Vuc2NvcGVkU3R5bGUpe2NvbnN0IGU9Vih0KTtlLnNldEF0dHJpYnV0ZShILCIiKSx0Ll91bnNjb3BlZFN0eWxlPWV9ZWxzZSB0Ll9zdHlsZXx8KHQuX3N0eWxlPVYodCkpO2UucHVzaChuP3QuX3Vuc2NvcGVkU3R5bGU6dC5fc3R5bGUpfX1yZXR1cm4gZX1mdW5jdGlvbiBxKHQpe2xldCBlPUYodCk7aWYoZSYmdm9pZCAwPT09ZS5fY3NzVGV4dCl7bGV0IHQ9KGZ1bmN0aW9uIG4odCl7bGV0IGU9IiIsbj1XKHQpO2ZvcihsZXQgdD0wO3Q8bi5sZW5ndGg7dCsrKWUrPW5bdF0udGV4dENvbnRlbnQ7cmV0dXJuIGV9Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovKShlKSxuPWUucXVlcnlTZWxlY3RvcigidGVtcGxhdGUiKTtuJiYodCs9KGZ1bmN0aW9uIGkodCxlKXtsZXQgbj0iIjtjb25zdCBpPUcodCxlKTtmb3IobGV0IHQ9MDt0PGkubGVuZ3RoO3QrKyl7bGV0IGU9aVt0XTtlLnBhcmVudE5vZGUmJmUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlKSxuKz1lLnRleHRDb250ZW50fXJldHVybiBufSkobixlLmFzc2V0cGF0aCkpLGUuX2Nzc1RleHQ9dHx8bnVsbH1yZXR1cm4gZXx8Y29uc29sZS53YXJuKCJDb3VsZCBub3QgZmluZCBzdHlsZSBkYXRhIGluIG1vZHVsZSBuYW1lZCIsdCksZSYmZS5fY3NzVGV4dHx8IiJ9Y29uc3QgWT13aW5kb3cuU2hhZHlET00mJndpbmRvdy5TaGFkeURPTS5ub1BhdGNoJiZ3aW5kb3cuU2hhZHlET00ud3JhcD93aW5kb3cuU2hhZHlET00ud3JhcDp3aW5kb3cuU2hhZHlET00/dD0+U2hhZHlET00ucGF0Y2godCk6dD0+dDsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi9mdW5jdGlvbiBYKHQpe3JldHVybiB0LmluZGV4T2YoIi4iKT49MH1mdW5jdGlvbiAkKHQpe2xldCBlPXQuaW5kZXhPZigiLiIpO3JldHVybi0xPT09ZT90OnQuc2xpY2UoMCxlKX1mdW5jdGlvbiBLKHQsZSl7cmV0dXJuIDA9PT10LmluZGV4T2YoZSsiLiIpfWZ1bmN0aW9uIFoodCxlKXtyZXR1cm4gMD09PWUuaW5kZXhPZih0KyIuIil9ZnVuY3Rpb24gSih0LGUsbil7cmV0dXJuIGUrbi5zbGljZSh0Lmxlbmd0aCl9ZnVuY3Rpb24gUSh0LGUpe3JldHVybiB0PT09ZXx8Syh0LGUpfHxaKHQsZSl9ZnVuY3Rpb24gdHQodCl7aWYoQXJyYXkuaXNBcnJheSh0KSl7bGV0IGU9W107Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspe2xldCBpPXRbbl0udG9TdHJpbmcoKS5zcGxpdCgiLiIpO2ZvcihsZXQgdD0wO3Q8aS5sZW5ndGg7dCsrKWUucHVzaChpW3RdKX1yZXR1cm4gZS5qb2luKCIuIil9cmV0dXJuIHR9ZnVuY3Rpb24gZXQodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/dHQodCkuc3BsaXQoIi4iKTp0LnRvU3RyaW5nKCkuc3BsaXQoIi4iKX1mdW5jdGlvbiBudCh0LGUsbil7bGV0IGk9dCxyPWV0KGUpO2ZvcihsZXQgdD0wO3Q8ci5sZW5ndGg7dCsrKXtpZighaSlyZXR1cm47aT1pW3JbdF1dfXJldHVybiBuJiYobi5wYXRoPXIuam9pbigiLiIpKSxpfWZ1bmN0aW9uIGl0KHQsZSxuKXtsZXQgaT10LHI9ZXQoZSksbz1yW3IubGVuZ3RoLTFdO2lmKHIubGVuZ3RoPjEpe2ZvcihsZXQgdD0wO3Q8ci5sZW5ndGgtMTt0KyspaWYoaT1pW3JbdF1dLCFpKXJldHVybjtpW29dPW59ZWxzZSBpW2VdPW47cmV0dXJuIHIuam9pbigiLiIpfQovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dAogICAgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28KICAgIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqL2NvbnN0IHJ0PXt9LG90PS8tW2Etel0vZyxhdD0vKFtBLVpdKS9nO2Z1bmN0aW9uIHN0KHQpe3JldHVybiBydFt0XXx8KHJ0W3RdPXQuaW5kZXhPZigiLSIpPDA/dDp0LnJlcGxhY2Uob3QsKHQ9PnRbMV0udG9VcHBlckNhc2UoKSkpKX1mdW5jdGlvbiBsdCh0KXtyZXR1cm4gcnRbdF18fChydFt0XT10LnJlcGxhY2UoYXQsIi0kMSIpLnRvTG93ZXJDYXNlKCkpfQovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dAogICAgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28KICAgIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqL2xldCBjdD0wLHV0PTAsaHQ9W10sZHQ9MCxwdD0hMSxmdD1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIik7bmV3IHdpbmRvdy5NdXRhdGlvbk9ic2VydmVyKChmdW5jdGlvbiBtdCgpe3B0PSExO2NvbnN0IHQ9aHQubGVuZ3RoO2ZvcihsZXQgZT0wO2U8dDtlKyspe2xldCB0PWh0W2VdO2lmKHQpdHJ5e3QoKX1jYXRjaCh0KXtzZXRUaW1lb3V0KCgoKT0+e3Rocm93IHR9KSl9fWh0LnNwbGljZSgwLHQpLHV0Kz10fSkpLm9ic2VydmUoZnQse2NoYXJhY3RlckRhdGE6ITB9KTtjb25zdCBndD17YWZ0ZXI6dD0+KHtydW46ZT0+d2luZG93LnNldFRpbWVvdXQoZSx0KSxjYW5jZWwodCl7d2luZG93LmNsZWFyVGltZW91dCh0KX19KSxydW46KHQsZSk9PndpbmRvdy5zZXRUaW1lb3V0KHQsZSksY2FuY2VsKHQpe3dpbmRvdy5jbGVhclRpbWVvdXQodCl9fSxfdD17cnVuOnQ9PndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodCksY2FuY2VsKHQpe3dpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0KX19LHl0PXtydW46dD0+d2luZG93LnJlcXVlc3RJZGxlQ2FsbGJhY2s/d2luZG93LnJlcXVlc3RJZGxlQ2FsbGJhY2sodCk6d2luZG93LnNldFRpbWVvdXQodCwxNiksY2FuY2VsKHQpe3dpbmRvdy5jYW5jZWxJZGxlQ2FsbGJhY2s/d2luZG93LmNhbmNlbElkbGVDYWxsYmFjayh0KTp3aW5kb3cuY2xlYXJUaW1lb3V0KHQpfX0sdnQ9e3J1bjp0PT4ocHR8fChwdD0hMCxmdC50ZXh0Q29udGVudD1kdCsrKSxodC5wdXNoKHQpLGN0KyspLGNhbmNlbCh0KXtjb25zdCBlPXQtdXQ7aWYoZT49MCl7aWYoIWh0W2VdKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBhc3luYyBoYW5kbGU6ICIrdCk7aHRbZV09bnVsbH19fSxidD12dCx4dD1JKCh0PT5jbGFzcyBleHRlbmRzIHR7c3RhdGljIGNyZWF0ZVByb3BlcnRpZXModCl7Y29uc3QgZT10aGlzLnByb3RvdHlwZTtmb3IobGV0IG4gaW4gdCluIGluIGV8fGUuX2NyZWF0ZVByb3BlcnR5QWNjZXNzb3Iobil9c3RhdGljIGF0dHJpYnV0ZU5hbWVGb3JQcm9wZXJ0eSh0KXtyZXR1cm4gdC50b0xvd2VyQ2FzZSgpfXN0YXRpYyB0eXBlRm9yUHJvcGVydHkodCl7fV9jcmVhdGVQcm9wZXJ0eUFjY2Vzc29yKHQsZSl7dGhpcy5fYWRkUHJvcGVydHlUb0F0dHJpYnV0ZU1hcCh0KSx0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9fZGF0YUhhc0FjY2Vzc29yIix0aGlzKSl8fCh0aGlzLl9fZGF0YUhhc0FjY2Vzc29yPU9iamVjdC5hc3NpZ24oe30sdGhpcy5fX2RhdGFIYXNBY2Nlc3NvcikpLHRoaXMuX19kYXRhSGFzQWNjZXNzb3JbdF18fCh0aGlzLl9fZGF0YUhhc0FjY2Vzc29yW3RdPSEwLHRoaXMuX2RlZmluZVByb3BlcnR5QWNjZXNzb3IodCxlKSl9X2FkZFByb3BlcnR5VG9BdHRyaWJ1dGVNYXAodCl7dGhpcy5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfX2RhdGFBdHRyaWJ1dGVzIix0aGlzKSl8fCh0aGlzLl9fZGF0YUF0dHJpYnV0ZXM9T2JqZWN0LmFzc2lnbih7fSx0aGlzLl9fZGF0YUF0dHJpYnV0ZXMpKTtsZXQgZT10aGlzLl9fZGF0YUF0dHJpYnV0ZXNbdF07cmV0dXJuIGV8fChlPXRoaXMuY29uc3RydWN0b3IuYXR0cmlidXRlTmFtZUZvclByb3BlcnR5KHQpLHRoaXMuX19kYXRhQXR0cmlidXRlc1tlXT10KSxlfV9kZWZpbmVQcm9wZXJ0eUFjY2Vzc29yKHQsZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsdCx7Z2V0KCl7cmV0dXJuIHRoaXMuX19kYXRhW3RdfSxzZXQ6ZT9mdW5jdGlvbigpe306ZnVuY3Rpb24oZSl7dGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5KHQsZSwhMCkmJnRoaXMuX2ludmFsaWRhdGVQcm9wZXJ0aWVzKCl9fSl9Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX19kYXRhRW5hYmxlZD0hMSx0aGlzLl9fZGF0YVJlYWR5PSExLHRoaXMuX19kYXRhSW52YWxpZD0hMSx0aGlzLl9fZGF0YT17fSx0aGlzLl9fZGF0YVBlbmRpbmc9bnVsbCx0aGlzLl9fZGF0YU9sZD1udWxsLHRoaXMuX19kYXRhSW5zdGFuY2VQcm9wcz1udWxsLHRoaXMuX19kYXRhQ291bnRlcj0wLHRoaXMuX19zZXJpYWxpemluZz0hMSx0aGlzLl9pbml0aWFsaXplUHJvcGVydGllcygpfXJlYWR5KCl7dGhpcy5fX2RhdGFSZWFkeT0hMCx0aGlzLl9mbHVzaFByb3BlcnRpZXMoKX1faW5pdGlhbGl6ZVByb3BlcnRpZXMoKXtmb3IobGV0IHQgaW4gdGhpcy5fX2RhdGFIYXNBY2Nlc3Nvcil0aGlzLmhhc093blByb3BlcnR5KHQpJiYodGhpcy5fX2RhdGFJbnN0YW5jZVByb3BzPXRoaXMuX19kYXRhSW5zdGFuY2VQcm9wc3x8e30sdGhpcy5fX2RhdGFJbnN0YW5jZVByb3BzW3RdPXRoaXNbdF0sZGVsZXRlIHRoaXNbdF0pfV9pbml0aWFsaXplSW5zdGFuY2VQcm9wZXJ0aWVzKHQpe09iamVjdC5hc3NpZ24odGhpcyx0KX1fc2V0UHJvcGVydHkodCxlKXt0aGlzLl9zZXRQZW5kaW5nUHJvcGVydHkodCxlKSYmdGhpcy5faW52YWxpZGF0ZVByb3BlcnRpZXMoKX1fZ2V0UHJvcGVydHkodCl7cmV0dXJuIHRoaXMuX19kYXRhW3RdfV9zZXRQZW5kaW5nUHJvcGVydHkodCxlLG4pe2xldCBpPXRoaXMuX19kYXRhW3RdLHI9dGhpcy5fc2hvdWxkUHJvcGVydHlDaGFuZ2UodCxlLGkpO3JldHVybiByJiYodGhpcy5fX2RhdGFQZW5kaW5nfHwodGhpcy5fX2RhdGFQZW5kaW5nPXt9LHRoaXMuX19kYXRhT2xkPXt9KSx0aGlzLl9fZGF0YU9sZCYmISh0IGluIHRoaXMuX19kYXRhT2xkKSYmKHRoaXMuX19kYXRhT2xkW3RdPWkpLHRoaXMuX19kYXRhW3RdPWUsdGhpcy5fX2RhdGFQZW5kaW5nW3RdPWUpLHJ9X2lzUHJvcGVydHlQZW5kaW5nKHQpe3JldHVybiEoIXRoaXMuX19kYXRhUGVuZGluZ3x8IXRoaXMuX19kYXRhUGVuZGluZy5oYXNPd25Qcm9wZXJ0eSh0KSl9X2ludmFsaWRhdGVQcm9wZXJ0aWVzKCl7IXRoaXMuX19kYXRhSW52YWxpZCYmdGhpcy5fX2RhdGFSZWFkeSYmKHRoaXMuX19kYXRhSW52YWxpZD0hMCxidC5ydW4oKCgpPT57dGhpcy5fX2RhdGFJbnZhbGlkJiYodGhpcy5fX2RhdGFJbnZhbGlkPSExLHRoaXMuX2ZsdXNoUHJvcGVydGllcygpKX0pKSl9X2VuYWJsZVByb3BlcnRpZXMoKXt0aGlzLl9fZGF0YUVuYWJsZWR8fCh0aGlzLl9fZGF0YUVuYWJsZWQ9ITAsdGhpcy5fX2RhdGFJbnN0YW5jZVByb3BzJiYodGhpcy5faW5pdGlhbGl6ZUluc3RhbmNlUHJvcGVydGllcyh0aGlzLl9fZGF0YUluc3RhbmNlUHJvcHMpLHRoaXMuX19kYXRhSW5zdGFuY2VQcm9wcz1udWxsKSx0aGlzLnJlYWR5KCkpfV9mbHVzaFByb3BlcnRpZXMoKXt0aGlzLl9fZGF0YUNvdW50ZXIrKztjb25zdCB0PXRoaXMuX19kYXRhLGU9dGhpcy5fX2RhdGFQZW5kaW5nLG49dGhpcy5fX2RhdGFPbGQ7dGhpcy5fc2hvdWxkUHJvcGVydGllc0NoYW5nZSh0LGUsbikmJih0aGlzLl9fZGF0YVBlbmRpbmc9bnVsbCx0aGlzLl9fZGF0YU9sZD1udWxsLHRoaXMuX3Byb3BlcnRpZXNDaGFuZ2VkKHQsZSxuKSksdGhpcy5fX2RhdGFDb3VudGVyLS19X3Nob3VsZFByb3BlcnRpZXNDaGFuZ2UodCxlLG4pe3JldHVybiBCb29sZWFuKGUpfV9wcm9wZXJ0aWVzQ2hhbmdlZCh0LGUsbil7fV9zaG91bGRQcm9wZXJ0eUNoYW5nZSh0LGUsbil7cmV0dXJuIG4hPT1lJiYobj09bnx8ZT09ZSl9YXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHQsZSxuLGkpe2UhPT1uJiZ0aGlzLl9hdHRyaWJ1dGVUb1Byb3BlcnR5KHQsbiksc3VwZXIuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrJiZzdXBlci5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sodCxlLG4saSl9X2F0dHJpYnV0ZVRvUHJvcGVydHkodCxlLG4pe2lmKCF0aGlzLl9fc2VyaWFsaXppbmcpe2NvbnN0IGk9dGhpcy5fX2RhdGFBdHRyaWJ1dGVzLHI9aSYmaVt0XXx8dDt0aGlzW3JdPXRoaXMuX2Rlc2VyaWFsaXplVmFsdWUoZSxufHx0aGlzLmNvbnN0cnVjdG9yLnR5cGVGb3JQcm9wZXJ0eShyKSl9fV9wcm9wZXJ0eVRvQXR0cmlidXRlKHQsZSxuKXt0aGlzLl9fc2VyaWFsaXppbmc9ITAsdGhpcy5fdmFsdWVUb05vZGVBdHRyaWJ1dGUodGhpcyxuPWFyZ3VtZW50cy5sZW5ndGg8Mz90aGlzW3RdOm4sZXx8dGhpcy5jb25zdHJ1Y3Rvci5hdHRyaWJ1dGVOYW1lRm9yUHJvcGVydHkodCkpLHRoaXMuX19zZXJpYWxpemluZz0hMX1fdmFsdWVUb05vZGVBdHRyaWJ1dGUodCxlLG4pe2NvbnN0IGk9dGhpcy5fc2VyaWFsaXplVmFsdWUoZSk7ImNsYXNzIiE9PW4mJiJuYW1lIiE9PW4mJiJzbG90IiE9PW58fCh0PVkodCkpLHZvaWQgMD09PWk/dC5yZW1vdmVBdHRyaWJ1dGUobik6dC5zZXRBdHRyaWJ1dGUobixpKX1fc2VyaWFsaXplVmFsdWUodCl7c3dpdGNoKHR5cGVvZiB0KXtjYXNlImJvb2xlYW4iOnJldHVybiB0PyIiOnZvaWQgMDtkZWZhdWx0OnJldHVybiBudWxsIT10P3QudG9TdHJpbmcoKTp2b2lkIDB9fV9kZXNlcmlhbGl6ZVZhbHVlKHQsZSl7c3dpdGNoKGUpe2Nhc2UgQm9vbGVhbjpyZXR1cm4gbnVsbCE9PXQ7Y2FzZSBOdW1iZXI6cmV0dXJuIE51bWJlcih0KTtkZWZhdWx0OnJldHVybiB0fX19KSksd3Q9e307bGV0IFN0PUhUTUxFbGVtZW50LnByb3RvdHlwZTtmb3IoO1N0Oyl7bGV0IHQ9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoU3QpO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKXd0W3RbZV1dPSEwO1N0PU9iamVjdC5nZXRQcm90b3R5cGVPZihTdCl9Y29uc3QgTXQ9SSgodD0+e2NvbnN0IGU9eHQodCk7cmV0dXJuIGNsYXNzIGV4dGVuZHMgZXtzdGF0aWMgY3JlYXRlUHJvcGVydGllc0ZvckF0dHJpYnV0ZXMoKXtsZXQgdD10aGlzLm9ic2VydmVkQXR0cmlidXRlcztmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKyl0aGlzLnByb3RvdHlwZS5fY3JlYXRlUHJvcGVydHlBY2Nlc3NvcihzdCh0W2VdKSl9c3RhdGljIGF0dHJpYnV0ZU5hbWVGb3JQcm9wZXJ0eSh0KXtyZXR1cm4gbHQodCl9X2luaXRpYWxpemVQcm9wZXJ0aWVzKCl7dGhpcy5fX2RhdGFQcm90byYmKHRoaXMuX2luaXRpYWxpemVQcm90b1Byb3BlcnRpZXModGhpcy5fX2RhdGFQcm90byksdGhpcy5fX2RhdGFQcm90bz1udWxsKSxzdXBlci5faW5pdGlhbGl6ZVByb3BlcnRpZXMoKX1faW5pdGlhbGl6ZVByb3RvUHJvcGVydGllcyh0KXtmb3IobGV0IGUgaW4gdCl0aGlzLl9zZXRQcm9wZXJ0eShlLHRbZV0pfV9lbnN1cmVBdHRyaWJ1dGUodCxlKXt0aGlzLmhhc0F0dHJpYnV0ZSh0KXx8dGhpcy5fdmFsdWVUb05vZGVBdHRyaWJ1dGUodGhpcyxlLHQpfV9zZXJpYWxpemVWYWx1ZSh0KXtzd2l0Y2godHlwZW9mIHQpe2Nhc2Uib2JqZWN0IjppZih0IGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gdC50b1N0cmluZygpO2lmKHQpdHJ5e3JldHVybiBKU09OLnN0cmluZ2lmeSh0KX1jYXRjaCh0KXtyZXR1cm4iIn1kZWZhdWx0OnJldHVybiBzdXBlci5fc2VyaWFsaXplVmFsdWUodCl9fV9kZXNlcmlhbGl6ZVZhbHVlKHQsZSl7bGV0IG47c3dpdGNoKGUpe2Nhc2UgT2JqZWN0OnRyeXtuPUpTT04ucGFyc2UodCl9Y2F0Y2goZSl7bj10fWJyZWFrO2Nhc2UgQXJyYXk6dHJ5e249SlNPTi5wYXJzZSh0KX1jYXRjaChlKXtuPW51bGwsY29uc29sZS53YXJuKGBQb2x5bWVyOjpBdHRyaWJ1dGVzOiBjb3VsZG4ndCBkZWNvZGUgQXJyYXkgYXMgSlNPTjogJHt0fWApfWJyZWFrO2Nhc2UgRGF0ZTpuPWlzTmFOKHQpP1N0cmluZyh0KTpOdW1iZXIodCksbj1uZXcgRGF0ZShuKTticmVhaztkZWZhdWx0Om49c3VwZXIuX2Rlc2VyaWFsaXplVmFsdWUodCxlKX1yZXR1cm4gbn1fZGVmaW5lUHJvcGVydHlBY2Nlc3Nvcih0LGUpeyEoZnVuY3Rpb24gbih0LGUpe2lmKCF3dFtlXSl7bGV0IG49dFtlXTt2b2lkIDAhPT1uJiYodC5fX2RhdGE/dC5fc2V0UGVuZGluZ1Byb3BlcnR5KGUsbik6KHQuX19kYXRhUHJvdG8/dC5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfX2RhdGFQcm90byIsdCkpfHwodC5fX2RhdGFQcm90bz1PYmplY3QuY3JlYXRlKHQuX19kYXRhUHJvdG8pKTp0Ll9fZGF0YVByb3RvPXt9LHQuX19kYXRhUHJvdG9bZV09bikpfX0pKHRoaXMsdCksc3VwZXIuX2RlZmluZVByb3BlcnR5QWNjZXNzb3IodCxlKX1faGFzQWNjZXNzb3IodCl7cmV0dXJuIHRoaXMuX19kYXRhSGFzQWNjZXNzb3ImJnRoaXMuX19kYXRhSGFzQWNjZXNzb3JbdF19X2lzUHJvcGVydHlQZW5kaW5nKHQpe3JldHVybiBCb29sZWFuKHRoaXMuX19kYXRhUGVuZGluZyYmdCBpbiB0aGlzLl9fZGF0YVBlbmRpbmcpfX19KSksRXQ9eyJkb20taWYiOiEwLCJkb20tcmVwZWF0IjohMH07Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovbGV0IFR0PSExLEN0PSExO2Z1bmN0aW9uIEF0KHQpe2xldCBlPXQuZ2V0QXR0cmlidXRlKCJpcyIpO2lmKGUmJkV0W2VdKXtsZXQgbj10O2ZvcihuLnJlbW92ZUF0dHJpYnV0ZSgiaXMiKSx0PW4ub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KGUpLG4ucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQodCxuKSx0LmFwcGVuZENoaWxkKG4pO24uYXR0cmlidXRlcy5sZW5ndGg7KXQuc2V0QXR0cmlidXRlKG4uYXR0cmlidXRlc1swXS5uYW1lLG4uYXR0cmlidXRlc1swXS52YWx1ZSksbi5yZW1vdmVBdHRyaWJ1dGUobi5hdHRyaWJ1dGVzWzBdLm5hbWUpfXJldHVybiB0fWZ1bmN0aW9uIGt0KHQsZSl7bGV0IG49ZS5wYXJlbnRJbmZvJiZrdCh0LGUucGFyZW50SW5mbyk7aWYoIW4pcmV0dXJuIHQ7Zm9yKGxldCB0PW4uZmlyc3RDaGlsZCxpPTA7dDt0PXQubmV4dFNpYmxpbmcpaWYoZS5wYXJlbnRJbmRleD09PWkrKylyZXR1cm4gdH1mdW5jdGlvbiBMdCh0LGUsbixpKXtpLmlkJiYoZVtpLmlkXT1uKX1mdW5jdGlvbiBQdCh0LGUsbil7aWYobi5ldmVudHMmJm4uZXZlbnRzLmxlbmd0aClmb3IobGV0IGkscj0wLG89bi5ldmVudHM7cjxvLmxlbmd0aCYmKGk9b1tyXSk7cisrKXQuX2FkZE1ldGhvZEV2ZW50TGlzdGVuZXJUb05vZGUoZSxpLm5hbWUsaS52YWx1ZSx0KX1mdW5jdGlvbiBOdCh0LGUsbixpKXtuLnRlbXBsYXRlSW5mbyYmKGUuX3RlbXBsYXRlSW5mbz1uLnRlbXBsYXRlSW5mbyxlLl9wYXJlbnRUZW1wbGF0ZUluZm89aSl9Y29uc3QgSXQ9SSgodD0+Y2xhc3MgZXh0ZW5kcyB0e3N0YXRpYyBfcGFyc2VUZW1wbGF0ZSh0LGUpe2lmKCF0Ll90ZW1wbGF0ZUluZm8pe2xldCBuPXQuX3RlbXBsYXRlSW5mbz17fTtuLm5vZGVJbmZvTGlzdD1bXSxuLm5lc3RlZFRlbXBsYXRlPUJvb2xlYW4oZSksbi5zdHJpcFdoaXRlU3BhY2U9ZSYmZS5zdHJpcFdoaXRlU3BhY2V8fHQuaGFzQXR0cmlidXRlKCJzdHJpcC13aGl0ZXNwYWNlIiksdGhpcy5fcGFyc2VUZW1wbGF0ZUNvbnRlbnQodCxuLHtwYXJlbnQ6bnVsbH0pfXJldHVybiB0Ll90ZW1wbGF0ZUluZm99c3RhdGljIF9wYXJzZVRlbXBsYXRlQ29udGVudCh0LGUsbil7cmV0dXJuIHRoaXMuX3BhcnNlVGVtcGxhdGVOb2RlKHQuY29udGVudCxlLG4pfXN0YXRpYyBfcGFyc2VUZW1wbGF0ZU5vZGUodCxlLG4pe2xldCBpPSExLHI9dDtyZXR1cm4idGVtcGxhdGUiIT1yLmxvY2FsTmFtZXx8ci5oYXNBdHRyaWJ1dGUoInByZXNlcnZlLWNvbnRlbnQiKT8ic2xvdCI9PT1yLmxvY2FsTmFtZSYmKGUuaGFzSW5zZXJ0aW9uUG9pbnQ9ITApOmk9dGhpcy5fcGFyc2VUZW1wbGF0ZU5lc3RlZFRlbXBsYXRlKHIsZSxuKXx8aSwoZnVuY3Rpb24gbyh0KXsoZnVuY3Rpb24gZSgpe2lmKCFUdCl7VHQ9ITA7Y29uc3QgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpO3QucGxhY2Vob2xkZXI9ImEiLEN0PXQucGxhY2Vob2xkZXI9PT10LnRleHRDb250ZW50fXJldHVybiBDdH0pKCkmJiJ0ZXh0YXJlYSI9PT10LmxvY2FsTmFtZSYmdC5wbGFjZWhvbGRlciYmdC5wbGFjZWhvbGRlcj09PXQudGV4dENvbnRlbnQmJih0LnRleHRDb250ZW50PW51bGwpfSkociksci5maXJzdENoaWxkJiZ0aGlzLl9wYXJzZVRlbXBsYXRlQ2hpbGROb2RlcyhyLGUsbiksci5oYXNBdHRyaWJ1dGVzJiZyLmhhc0F0dHJpYnV0ZXMoKSYmKGk9dGhpcy5fcGFyc2VUZW1wbGF0ZU5vZGVBdHRyaWJ1dGVzKHIsZSxuKXx8aSksaXx8bi5ub3RlZH1zdGF0aWMgX3BhcnNlVGVtcGxhdGVDaGlsZE5vZGVzKHQsZSxuKXtpZigic2NyaXB0IiE9PXQubG9jYWxOYW1lJiYic3R5bGUiIT09dC5sb2NhbE5hbWUpZm9yKGxldCBpLHI9dC5maXJzdENoaWxkLG89MDtyO3I9aSl7aWYoInRlbXBsYXRlIj09ci5sb2NhbE5hbWUmJihyPUF0KHIpKSxpPXIubmV4dFNpYmxpbmcsci5ub2RlVHlwZT09PU5vZGUuVEVYVF9OT0RFKXtsZXQgbj1pO2Zvcig7biYmbi5ub2RlVHlwZT09PU5vZGUuVEVYVF9OT0RFOylyLnRleHRDb250ZW50Kz1uLnRleHRDb250ZW50LGk9bi5uZXh0U2libGluZyx0LnJlbW92ZUNoaWxkKG4pLG49aTtpZihlLnN0cmlwV2hpdGVTcGFjZSYmIXIudGV4dENvbnRlbnQudHJpbSgpKXt0LnJlbW92ZUNoaWxkKHIpO2NvbnRpbnVlfX1sZXQgYT17cGFyZW50SW5kZXg6byxwYXJlbnRJbmZvOm59O3RoaXMuX3BhcnNlVGVtcGxhdGVOb2RlKHIsZSxhKSYmKGEuaW5mb0luZGV4PWUubm9kZUluZm9MaXN0LnB1c2goYSktMSksci5wYXJlbnROb2RlJiZvKyt9fXN0YXRpYyBfcGFyc2VUZW1wbGF0ZU5lc3RlZFRlbXBsYXRlKHQsZSxuKXtsZXQgaT10LHI9dGhpcy5fcGFyc2VUZW1wbGF0ZShpLGUpO3JldHVybihyLmNvbnRlbnQ9aS5jb250ZW50Lm93bmVyRG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKS5hcHBlbmRDaGlsZChpLmNvbnRlbnQpLG4udGVtcGxhdGVJbmZvPXIsITB9c3RhdGljIF9wYXJzZVRlbXBsYXRlTm9kZUF0dHJpYnV0ZXModCxlLG4pe2xldCBpPSExLHI9QXJyYXkuZnJvbSh0LmF0dHJpYnV0ZXMpO2ZvcihsZXQgbyxhPXIubGVuZ3RoLTE7bz1yW2FdO2EtLSlpPXRoaXMuX3BhcnNlVGVtcGxhdGVOb2RlQXR0cmlidXRlKHQsZSxuLG8ubmFtZSxvLnZhbHVlKXx8aTtyZXR1cm4gaX1zdGF0aWMgX3BhcnNlVGVtcGxhdGVOb2RlQXR0cmlidXRlKHQsZSxuLGkscil7cmV0dXJuIm9uLSI9PT1pLnNsaWNlKDAsMyk/KHQucmVtb3ZlQXR0cmlidXRlKGkpLG4uZXZlbnRzPW4uZXZlbnRzfHxbXSxuLmV2ZW50cy5wdXNoKHtuYW1lOmkuc2xpY2UoMyksdmFsdWU6cn0pLCEwKToiaWQiPT09aSYmKG4uaWQ9ciwhMCl9c3RhdGljIF9jb250ZW50Rm9yVGVtcGxhdGUodCl7bGV0IGU9dC5fdGVtcGxhdGVJbmZvO3JldHVybiBlJiZlLmNvbnRlbnR8fHQuY29udGVudH1fc3RhbXBUZW1wbGF0ZSh0LGUpe3QmJiF0LmNvbnRlbnQmJndpbmRvdy5IVE1MVGVtcGxhdGVFbGVtZW50JiZIVE1MVGVtcGxhdGVFbGVtZW50LmRlY29yYXRlJiZIVE1MVGVtcGxhdGVFbGVtZW50LmRlY29yYXRlKHQpO2xldCBuPShlPWV8fHRoaXMuY29uc3RydWN0b3IuX3BhcnNlVGVtcGxhdGUodCkpLm5vZGVJbmZvTGlzdCxpPWRvY3VtZW50LmltcG9ydE5vZGUoZS5jb250ZW50fHx0LmNvbnRlbnQsITApO2kuX19ub0luc2VydGlvblBvaW50PSFlLmhhc0luc2VydGlvblBvaW50O2xldCByPWkubm9kZUxpc3Q9bmV3IEFycmF5KG4ubGVuZ3RoKTtpLiQ9e307Zm9yKGxldCB0LG89MCxhPW4ubGVuZ3RoO288YSYmKHQ9bltvXSk7bysrKXtsZXQgbj1yW29dPWt0KGksdCk7THQoMCxpLiQsbix0KSxOdCgwLG4sdCxlKSxQdCh0aGlzLG4sdCl9cmV0dXJuIGk9aSxpfV9hZGRNZXRob2RFdmVudExpc3RlbmVyVG9Ob2RlKHQsZSxuLGkpe2xldCByPShmdW5jdGlvbiBvKHQsZSxuKXtyZXR1cm4gdD10Ll9tZXRob2RIb3N0fHx0LGZ1bmN0aW9uKGUpe3Rbbl0/dFtuXShlLGUuZGV0YWlsKTpjb25zb2xlLndhcm4oImxpc3RlbmVyIG1ldGhvZCBgIituKyJgIG5vdCBkZWZpbmVkIil9fSkoaT1pfHx0LDAsbik7cmV0dXJuIHRoaXMuX2FkZEV2ZW50TGlzdGVuZXJUb05vZGUodCxlLHIpLHJ9X2FkZEV2ZW50TGlzdGVuZXJUb05vZGUodCxlLG4pe3QuYWRkRXZlbnRMaXN0ZW5lcihlLG4pfV9yZW1vdmVFdmVudExpc3RlbmVyRnJvbU5vZGUodCxlLG4pe3QucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLG4pfX0pKTsKLyoqCiAgICAgKiBAZmlsZW92ZXJ2aWV3CiAgICAgKiBAc3VwcHJlc3Mge2NoZWNrUHJvdG90eXBhbFR5cGVzfQogICAgICogQGxpY2Vuc2UgQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgICAqIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgICogaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQKICAgICAqIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkKICAgICAqIGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkKICAgICAqIEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAKICAgICAqIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICAqL2xldCBPdD0wO2NvbnN0IFJ0PVtdLHp0PXtDT01QVVRFOiJfX2NvbXB1dGVFZmZlY3RzIixSRUZMRUNUOiJfX3JlZmxlY3RFZmZlY3RzIixOT1RJRlk6Il9fbm90aWZ5RWZmZWN0cyIsUFJPUEFHQVRFOiJfX3Byb3BhZ2F0ZUVmZmVjdHMiLE9CU0VSVkU6Il9fb2JzZXJ2ZUVmZmVjdHMiLFJFQURfT05MWToiX19yZWFkT25seSJ9LER0PS9bQS1aXS87ZnVuY3Rpb24gQnQodCxlLG4pe2xldCBpPXRbZV07aWYoaSl7aWYoIXQuaGFzT3duUHJvcGVydHkoZSkmJihpPXRbZV09T2JqZWN0LmNyZWF0ZSh0W2VdKSxuKSlmb3IobGV0IHQgaW4gaSl7bGV0IGU9aVt0XSxuPWlbdF09QXJyYXkoZS5sZW5ndGgpO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKW5bdF09ZVt0XX19ZWxzZSBpPXRbZV09e307cmV0dXJuIGl9ZnVuY3Rpb24gSHQodCxlLG4saSxyLG8pe2lmKGUpe2xldCBhPSExO2NvbnN0IHM9T3QrKztmb3IobGV0IGwgaW4gbil7bGV0IGM9ZVtyPyQobCk6bF07aWYoYylmb3IobGV0IGUsdT0wLGg9Yy5sZW5ndGg7dTxoJiYoZT1jW3VdKTt1KyspZS5pbmZvJiZlLmluZm8ubGFzdFJ1bj09PXN8fHImJiFWdChsLGUudHJpZ2dlcil8fChlLmluZm8mJihlLmluZm8ubGFzdFJ1bj1zKSxlLmZuKHQsbCxuLGksZS5pbmZvLHIsbyksYT0hMCl9cmV0dXJuIGF9cmV0dXJuITF9ZnVuY3Rpb24gRnQodCxlLG4saSxyLG8sYSxzKXtsZXQgbD0hMSxjPWVbYT8kKGkpOmldO2lmKGMpZm9yKGxldCBlLHU9MCxoPWMubGVuZ3RoO3U8aCYmKGU9Y1t1XSk7dSsrKWUuaW5mbyYmZS5pbmZvLmxhc3RSdW49PT1ufHxhJiYhVnQoaSxlLnRyaWdnZXIpfHwoZS5pbmZvJiYoZS5pbmZvLmxhc3RSdW49biksZS5mbih0LGkscixvLGUuaW5mbyxhLHMpLGw9ITApO3JldHVybiBsfWZ1bmN0aW9uIFZ0KHQsZSl7aWYoZSl7bGV0IG49ZS5uYW1lO3JldHVybiBuPT10fHwhKCFlLnN0cnVjdHVyZWR8fCFLKG4sdCkpfHwhKCFlLndpbGRjYXJkfHwhWihuLHQpKX1yZXR1cm4hMH1mdW5jdGlvbiBVdCh0LGUsbixpLHIpe2xldCBvPSJzdHJpbmciPT10eXBlb2Ygci5tZXRob2Q/dFtyLm1ldGhvZF06ci5tZXRob2QsYT1yLnByb3BlcnR5O28/by5jYWxsKHQsdC5fX2RhdGFbYV0saVthXSk6ci5keW5hbWljRm58fGNvbnNvbGUud2Fybigib2JzZXJ2ZXIgbWV0aG9kIGAiK3IubWV0aG9kKyJgIG5vdCBkZWZpbmVkIil9ZnVuY3Rpb24ganQodCxlLG4pe2xldCBpPSQoZSk7cmV0dXJuIGkhPT1lJiYoR3QodCxsdChpKSsiLWNoYW5nZWQiLG5bZV0sZSksITApfWZ1bmN0aW9uIEd0KHQsZSxuLGkpe2xldCByPXt2YWx1ZTpuLHF1ZXVlUHJvcGVydHk6ITB9O2kmJihyLnBhdGg9aSksWSh0KS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChlLHtkZXRhaWw6cn0pKX1mdW5jdGlvbiBXdCh0LGUsbixpLHIsbyl7bGV0IGE9KG8/JChlKTplKSE9ZT9lOm51bGwscz1hP250KHQsYSk6dC5fX2RhdGFbZV07YSYmdm9pZCAwPT09cyYmKHM9bltlXSksR3QodCxyLmV2ZW50TmFtZSxzLGEpfWZ1bmN0aW9uIHF0KHQsZSxuLGkscil7bGV0IG89dC5fX2RhdGFbZV07eSYmKG89eShvLHIuYXR0ck5hbWUsImF0dHJpYnV0ZSIsdCkpLHQuX3Byb3BlcnR5VG9BdHRyaWJ1dGUoZSxyLmF0dHJOYW1lLG8pfWNvbnN0IFl0PSh0LGUsbik9PntsZXQgaT0wLHI9ZS5sZW5ndGgtMSxvPS0xO2Zvcig7aTw9cjspe2NvbnN0IGE9aStyPj4xLHM9bi5nZXQoZVthXS5tZXRob2RJbmZvKS1uLmdldCh0Lm1ldGhvZEluZm8pO2lmKHM8MClpPWErMTtlbHNle2lmKCEocz4wKSl7bz1hO2JyZWFrfXI9YS0xfX1vPDAmJihvPXIrMSksZS5zcGxpY2UobywwLHQpfSxYdD0odCxlLG4saSxyKT0+e2NvbnN0IG89ZVtyPyQodCk6dF07aWYobylmb3IobGV0IGU9MDtlPG8ubGVuZ3RoO2UrKyl7Y29uc3QgYT1vW2VdO2EuaW5mby5sYXN0UnVuPT09T3R8fHImJiFWdCh0LGEudHJpZ2dlcil8fChhLmluZm8ubGFzdFJ1bj1PdCxZdChhLmluZm8sbixpKSl9fTtmdW5jdGlvbiAkdCh0LGUsbixpLHIpe2xldCBvPW5lKHQsZSxuLDAscik7aWYobz09PVJ0KXJldHVybiExO2xldCBhPXIubWV0aG9kSW5mbztyZXR1cm4gdC5fX2RhdGFIYXNBY2Nlc3NvciYmdC5fX2RhdGFIYXNBY2Nlc3NvclthXT90Ll9zZXRQZW5kaW5nUHJvcGVydHkoYSxvLCEwKToodFthXT1vLCExKX1mdW5jdGlvbiBLdCh0LGUsbixpLHIsbyxhKXtuLmJpbmRpbmdzPW4uYmluZGluZ3N8fFtdO2xldCBzPXtraW5kOmksdGFyZ2V0OnIscGFydHM6byxsaXRlcmFsOmEsaXNDb21wb3VuZDoxIT09by5sZW5ndGh9O2lmKG4uYmluZGluZ3MucHVzaChzKSwoZnVuY3Rpb24gbCh0KXtyZXR1cm4gQm9vbGVhbih0LnRhcmdldCkmJiJhdHRyaWJ1dGUiIT10LmtpbmQmJiJ0ZXh0IiE9dC5raW5kJiYhdC5pc0NvbXBvdW5kJiYieyI9PT10LnBhcnRzWzBdLm1vZGV9KShzKSl7bGV0e2V2ZW50OnQsbmVnYXRlOmV9PXMucGFydHNbMF07cy5saXN0ZW5lckV2ZW50PXR8fGx0KHIpKyItY2hhbmdlZCIscy5saXN0ZW5lck5lZ2F0ZT1lfWxldCBjPWUubm9kZUluZm9MaXN0Lmxlbmd0aDtmb3IobGV0IG49MDtuPHMucGFydHMubGVuZ3RoO24rKyl7bGV0IGk9cy5wYXJ0c1tuXTtpLmNvbXBvdW5kSW5kZXg9bixadCh0LGUscyxpLGMpfX1mdW5jdGlvbiBadCh0LGUsbixpLHIpe2lmKCFpLmxpdGVyYWwpaWYoImF0dHJpYnV0ZSI9PT1uLmtpbmQmJiItIj09PW4udGFyZ2V0WzBdKWNvbnNvbGUud2FybigiQ2Fubm90IHNldCBhdHRyaWJ1dGUgIituLnRhcmdldCsnIGJlY2F1c2UgIi0iIGlzIG5vdCBhIHZhbGlkIGF0dHJpYnV0ZSBzdGFydGluZyBjaGFyYWN0ZXInKTtlbHNle2xldCBvPWkuZGVwZW5kZW5jaWVzLGE9e2luZGV4OnIsYmluZGluZzpuLHBhcnQ6aSxldmFsdWF0b3I6dH07Zm9yKGxldCBuPTA7bjxvLmxlbmd0aDtuKyspe2xldCBpPW9bbl07InN0cmluZyI9PXR5cGVvZiBpJiYoaT1zZShpKSxpLndpbGRjYXJkPSEwKSx0Ll9hZGRUZW1wbGF0ZVByb3BlcnR5RWZmZWN0KGUsaS5yb290UHJvcGVydHkse2ZuOkp0LGluZm86YSx0cmlnZ2VyOml9KX19fWZ1bmN0aW9uIEp0KHQsZSxuLGkscixvLGEpe2xldCBzPWFbci5pbmRleF0sbD1yLmJpbmRpbmcsYz1yLnBhcnQ7aWYobyYmYy5zb3VyY2UmJmUubGVuZ3RoPmMuc291cmNlLmxlbmd0aCYmInByb3BlcnR5Ij09bC5raW5kJiYhbC5pc0NvbXBvdW5kJiZzLl9faXNQcm9wZXJ0eUVmZmVjdHNDbGllbnQmJnMuX19kYXRhSGFzQWNjZXNzb3ImJnMuX19kYXRhSGFzQWNjZXNzb3JbbC50YXJnZXRdKXtsZXQgaT1uW2VdO2U9SihjLnNvdXJjZSxsLnRhcmdldCxlKSxzLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgoZSxpLCExLCEwKSYmdC5fZW5xdWV1ZUNsaWVudChzKX1lbHNle2xldCBhPXIuZXZhbHVhdG9yLl9ldmFsdWF0ZUJpbmRpbmcodCxjLGUsbixpLG8pO2EhPT1SdCYmKGZ1bmN0aW9uIHUodCxlLG4saSxyKXtpZihyPShmdW5jdGlvbiBvKHQsZSxuLGkpe2lmKG4uaXNDb21wb3VuZCl7bGV0IHI9dC5fX2RhdGFDb21wb3VuZFN0b3JhZ2Vbbi50YXJnZXRdO3JbaS5jb21wb3VuZEluZGV4XT1lLGU9ci5qb2luKCIiKX1yZXR1cm4iYXR0cmlidXRlIiE9PW4ua2luZCYmKCJ0ZXh0Q29udGVudCIhPT1uLnRhcmdldCYmKCJ2YWx1ZSIhPT1uLnRhcmdldHx8ImlucHV0IiE9PXQubG9jYWxOYW1lJiYidGV4dGFyZWEiIT09dC5sb2NhbE5hbWUpfHwoZT1udWxsPT1lPyIiOmUpKSxlfSkoZSxyLG4saSkseSYmKHI9eShyLG4udGFyZ2V0LG4ua2luZCxlKSksImF0dHJpYnV0ZSI9PW4ua2luZCl0Ll92YWx1ZVRvTm9kZUF0dHJpYnV0ZShlLHIsbi50YXJnZXQpO2Vsc2V7bGV0IGk9bi50YXJnZXQ7ZS5fX2lzUHJvcGVydHlFZmZlY3RzQ2xpZW50JiZlLl9fZGF0YUhhc0FjY2Vzc29yJiZlLl9fZGF0YUhhc0FjY2Vzc29yW2ldP2VbenQuUkVBRF9PTkxZXSYmZVt6dC5SRUFEX09OTFldW2ldfHxlLl9zZXRQZW5kaW5nUHJvcGVydHkoaSxyKSYmdC5fZW5xdWV1ZUNsaWVudChlKTp0Ll9zZXRVbm1hbmFnZWRQcm9wZXJ0eVRvTm9kZShlLGkscil9fSkodCxzLGwsYyxhKX19ZnVuY3Rpb24gUXQodCxlKXtpZihlLmlzQ29tcG91bmQpe2xldCBuPXQuX19kYXRhQ29tcG91bmRTdG9yYWdlfHwodC5fX2RhdGFDb21wb3VuZFN0b3JhZ2U9e30pLGk9ZS5wYXJ0cyxyPW5ldyBBcnJheShpLmxlbmd0aCk7Zm9yKGxldCB0PTA7dDxpLmxlbmd0aDt0Kyspclt0XT1pW3RdLmxpdGVyYWw7bGV0IG89ZS50YXJnZXQ7bltvXT1yLGUubGl0ZXJhbCYmInByb3BlcnR5Ij09ZS5raW5kJiYoImNsYXNzTmFtZSI9PT1vJiYodD1ZKHQpKSx0W29dPWUubGl0ZXJhbCl9fWZ1bmN0aW9uIHRlKHQsZSxuKXtpZihuLmxpc3RlbmVyRXZlbnQpe2xldCBpPW4ucGFydHNbMF07dC5hZGRFdmVudExpc3RlbmVyKG4ubGlzdGVuZXJFdmVudCwoZnVuY3Rpb24odCl7IShmdW5jdGlvbiByKHQsZSxuLGksbyl7bGV0IGEscz10LmRldGFpbCxsPXMmJnMucGF0aDtsPyhpPUoobixpLGwpLGE9cyYmcy52YWx1ZSk6YT10LmN1cnJlbnRUYXJnZXRbbl0sYT1vPyFhOmEsZVt6dC5SRUFEX09OTFldJiZlW3p0LlJFQURfT05MWV1baV18fCFlLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgoaSxhLCEwLEJvb2xlYW4obCkpfHxzJiZzLnF1ZXVlUHJvcGVydHl8fGUuX2ludmFsaWRhdGVQcm9wZXJ0aWVzKCl9KSh0LGUsbi50YXJnZXQsaS5zb3VyY2UsaS5uZWdhdGUpfSkpfX1mdW5jdGlvbiBlZSh0LGUsbixpLHIsbyl7bGV0IGE9e21ldGhvZE5hbWU6ZS5tZXRob2ROYW1lLGFyZ3M6ZS5hcmdzLG1ldGhvZEluZm86cixkeW5hbWljRm46bz1lLnN0YXRpY3x8byYmKCJvYmplY3QiIT10eXBlb2Ygb3x8b1tlLm1ldGhvZE5hbWVdKX07Zm9yKGxldCByLG89MDtvPGUuYXJncy5sZW5ndGgmJihyPWUuYXJnc1tvXSk7bysrKXIubGl0ZXJhbHx8dC5fYWRkUHJvcGVydHlFZmZlY3Qoci5yb290UHJvcGVydHksbix7Zm46aSxpbmZvOmEsdHJpZ2dlcjpyfSk7cmV0dXJuIG8mJnQuX2FkZFByb3BlcnR5RWZmZWN0KGUubWV0aG9kTmFtZSxuLHtmbjppLGluZm86YX0pLGF9ZnVuY3Rpb24gbmUodCxlLG4saSxyKXtsZXQgbz10Ll9tZXRob2RIb3N0fHx0LGE9b1tyLm1ldGhvZE5hbWVdO2lmKGEpe2xldCBpPXQuX21hcnNoYWxBcmdzKHIuYXJncyxlLG4pO3JldHVybiBpPT09UnQ/UnQ6YS5hcHBseShvLGkpfXIuZHluYW1pY0ZufHxjb25zb2xlLndhcm4oIm1ldGhvZCBgIityLm1ldGhvZE5hbWUrImAgbm90IGRlZmluZWQiKX1jb25zdCBpZT1bXSxyZT1uZXcgUmVnRXhwKCIoXFxbXFxbfHt7KVxccyooPzooISlcXHMqKT8oKD86W2EtekEtWl8kXVtcXHcuOiRcXC0qXSopXFxzKig/OlxcKFxccyooPzooPzooPzooKD86W2EtekEtWl8kXVtcXHcuOiRcXC0qXSopfCg/OlstK10/WzAtOV0qXFwuP1swLTldKyg/OltlRV1bLStdP1swLTldKyk/KXwoPzooPzonKD86W14nXFxcXF18XFxcXC4pKicpfCg/OlwiKD86W15cIlxcXFxdfFxcXFwuKSpcIikpKVxccyopKD86LFxccyooPzooKD86W2EtekEtWl8kXVtcXHcuOiRcXC0qXSopfCg/OlstK10/WzAtOV0qXFwuP1swLTldKyg/OltlRV1bLStdP1swLTldKyk/KXwoPzooPzonKD86W14nXFxcXF18XFxcXC4pKicpfCg/OlwiKD86W15cIlxcXFxdfFxcXFwuKSpcIikpKVxccyopKSopPylcXClcXHMqKT8pKD86XV18fX0pIiwiZyIpO2Z1bmN0aW9uIG9lKHQpe2xldCBlPSIiO2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKWUrPXRbbl0ubGl0ZXJhbHx8IiI7cmV0dXJuIGV9ZnVuY3Rpb24gYWUodCl7bGV0IGU9dC5tYXRjaCgvKFteXHNdKz8pXCgoW1xzXFNdKilcKS8pO2lmKGUpe2xldCB0PXttZXRob2ROYW1lOmVbMV0sc3RhdGljOiEwLGFyZ3M6aWV9O3JldHVybiBlWzJdLnRyaW0oKT8oZnVuY3Rpb24gbih0LGUpe3JldHVybiBlLmFyZ3M9dC5tYXAoKGZ1bmN0aW9uKHQpe2xldCBuPXNlKHQpO3JldHVybiBuLmxpdGVyYWx8fChlLnN0YXRpYz0hMSksbn0pLHRoaXMpLGV9KShlWzJdLnJlcGxhY2UoL1xcLC9nLCImY29tbWE7Iikuc3BsaXQoIiwiKSx0KTp0fXJldHVybiBudWxsfWZ1bmN0aW9uIHNlKHQpe2xldCBlPXQudHJpbSgpLnJlcGxhY2UoLyZjb21tYTsvZywiLCIpLnJlcGxhY2UoL1xcKC4pL2csIiQxIiksbj17bmFtZTplLHZhbHVlOiIiLGxpdGVyYWw6ITF9LGk9ZVswXTtzd2l0Y2goIi0iPT09aSYmKGk9ZVsxXSksaT49IjAiJiZpPD0iOSImJihpPSIjIiksaSl7Y2FzZSInIjpjYXNlJyInOm4udmFsdWU9ZS5zbGljZSgxLC0xKSxuLmxpdGVyYWw9ITA7YnJlYWs7Y2FzZSIjIjpuLnZhbHVlPU51bWJlcihlKSxuLmxpdGVyYWw9ITB9cmV0dXJuIG4ubGl0ZXJhbHx8KG4ucm9vdFByb3BlcnR5PSQoZSksbi5zdHJ1Y3R1cmVkPVgoZSksbi5zdHJ1Y3R1cmVkJiYobi53aWxkY2FyZD0iLioiPT1lLnNsaWNlKC0yKSxuLndpbGRjYXJkJiYobi5uYW1lPWUuc2xpY2UoMCwtMikpKSksbn1mdW5jdGlvbiBsZSh0LGUsbil7bGV0IGk9bnQodCxuKTtyZXR1cm4gdm9pZCAwPT09aSYmKGk9ZVtuXSksaX1mdW5jdGlvbiBjZSh0LGUsbixpKXtjb25zdCByPXtpbmRleFNwbGljZXM6aX07RSYmIXQuX292ZXJyaWRlTGVnYWN5VW5kZWZpbmVkJiYoZS5zcGxpY2VzPXIpLHQubm90aWZ5UGF0aChuKyIuc3BsaWNlcyIsciksdC5ub3RpZnlQYXRoKG4rIi5sZW5ndGgiLGUubGVuZ3RoKSxFJiYhdC5fb3ZlcnJpZGVMZWdhY3lVbmRlZmluZWQmJihyLmluZGV4U3BsaWNlcz1bXSl9ZnVuY3Rpb24gdWUodCxlLG4saSxyLG8pe2NlKHQsZSxuLFt7aW5kZXg6aSxhZGRlZENvdW50OnIscmVtb3ZlZDpvLG9iamVjdDplLHR5cGU6InNwbGljZSJ9XSl9Y29uc3QgaGU9SSgodD0+e2NvbnN0IGU9SXQoTXQodCkpO3JldHVybiBjbGFzcyBleHRlbmRzIGV7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX19pc1Byb3BlcnR5RWZmZWN0c0NsaWVudD0hMH1nZXQgUFJPUEVSVFlfRUZGRUNUX1RZUEVTKCl7cmV0dXJuIHp0fV9pbml0aWFsaXplUHJvcGVydGllcygpe3N1cGVyLl9pbml0aWFsaXplUHJvcGVydGllcygpLHRoaXMuX3JlZ2lzdGVySG9zdCgpLHRoaXMuX19kYXRhQ2xpZW50c1JlYWR5PSExLHRoaXMuX19kYXRhUGVuZGluZ0NsaWVudHM9bnVsbCx0aGlzLl9fZGF0YVRvTm90aWZ5PW51bGwsdGhpcy5fX2RhdGFMaW5rZWRQYXRocz1udWxsLHRoaXMuX19kYXRhSGFzUGF0aHM9ITEsdGhpcy5fX2RhdGFDb21wb3VuZFN0b3JhZ2U9dGhpcy5fX2RhdGFDb21wb3VuZFN0b3JhZ2V8fG51bGwsdGhpcy5fX2RhdGFIb3N0PXRoaXMuX19kYXRhSG9zdHx8bnVsbCx0aGlzLl9fZGF0YVRlbXA9e30sdGhpcy5fX2RhdGFDbGllbnRzSW5pdGlhbGl6ZWQ9ITF9X3JlZ2lzdGVySG9zdCgpe2lmKGRlLmxlbmd0aCl7bGV0IHQ9ZGVbZGUubGVuZ3RoLTFdO3QuX2VucXVldWVDbGllbnQodGhpcyksdGhpcy5fX2RhdGFIb3N0PXR9fV9pbml0aWFsaXplUHJvdG9Qcm9wZXJ0aWVzKHQpe3RoaXMuX19kYXRhPU9iamVjdC5jcmVhdGUodCksdGhpcy5fX2RhdGFQZW5kaW5nPU9iamVjdC5jcmVhdGUodCksdGhpcy5fX2RhdGFPbGQ9e319X2luaXRpYWxpemVJbnN0YW5jZVByb3BlcnRpZXModCl7bGV0IGU9dGhpc1t6dC5SRUFEX09OTFldO2ZvcihsZXQgbiBpbiB0KWUmJmVbbl18fCh0aGlzLl9fZGF0YVBlbmRpbmc9dGhpcy5fX2RhdGFQZW5kaW5nfHx7fSx0aGlzLl9fZGF0YU9sZD10aGlzLl9fZGF0YU9sZHx8e30sdGhpcy5fX2RhdGFbbl09dGhpcy5fX2RhdGFQZW5kaW5nW25dPXRbbl0pfV9hZGRQcm9wZXJ0eUVmZmVjdCh0LGUsbil7dGhpcy5fY3JlYXRlUHJvcGVydHlBY2Nlc3Nvcih0LGU9PXp0LlJFQURfT05MWSk7bGV0IGk9QnQodGhpcyxlLCEwKVt0XTtpfHwoaT10aGlzW2VdW3RdPVtdKSxpLnB1c2gobil9X3JlbW92ZVByb3BlcnR5RWZmZWN0KHQsZSxuKXtsZXQgaT1CdCh0aGlzLGUsITApW3RdLHI9aS5pbmRleE9mKG4pO3I+PTAmJmkuc3BsaWNlKHIsMSl9X2hhc1Byb3BlcnR5RWZmZWN0KHQsZSl7bGV0IG49dGhpc1tlXTtyZXR1cm4gQm9vbGVhbihuJiZuW3RdKX1faGFzUmVhZE9ubHlFZmZlY3QodCl7cmV0dXJuIHRoaXMuX2hhc1Byb3BlcnR5RWZmZWN0KHQsenQuUkVBRF9PTkxZKX1faGFzTm90aWZ5RWZmZWN0KHQpe3JldHVybiB0aGlzLl9oYXNQcm9wZXJ0eUVmZmVjdCh0LHp0Lk5PVElGWSl9X2hhc1JlZmxlY3RFZmZlY3QodCl7cmV0dXJuIHRoaXMuX2hhc1Byb3BlcnR5RWZmZWN0KHQsenQuUkVGTEVDVCl9X2hhc0NvbXB1dGVkRWZmZWN0KHQpe3JldHVybiB0aGlzLl9oYXNQcm9wZXJ0eUVmZmVjdCh0LHp0LkNPTVBVVEUpfV9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgodCxlLG4saSl7aWYoaXx8JChBcnJheS5pc0FycmF5KHQpP3RbMF06dCkhPT10KXtpZighaSl7bGV0IG49bnQodGhpcyx0KTtpZighKHQ9aXQodGhpcyx0LGUpKXx8IXN1cGVyLl9zaG91bGRQcm9wZXJ0eUNoYW5nZSh0LGUsbikpcmV0dXJuITF9aWYodGhpcy5fX2RhdGFIYXNQYXRocz0hMCx0aGlzLl9zZXRQZW5kaW5nUHJvcGVydHkodCxlLG4pKXJldHVybihmdW5jdGlvbiByKHQsZSxuKXtsZXQgaT10Ll9fZGF0YUxpbmtlZFBhdGhzO2lmKGkpe2xldCByO2ZvcihsZXQgbyBpbiBpKXtsZXQgYT1pW29dO1oobyxlKT8ocj1KKG8sYSxlKSx0Ll9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgocixuLCEwLCEwKSk6WihhLGUpJiYocj1KKGEsbyxlKSx0Ll9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgocixuLCEwLCEwKSl9fX0pKHRoaXMsdCxlKSwhMH1lbHNle2lmKHRoaXMuX19kYXRhSGFzQWNjZXNzb3ImJnRoaXMuX19kYXRhSGFzQWNjZXNzb3JbdF0pcmV0dXJuIHRoaXMuX3NldFBlbmRpbmdQcm9wZXJ0eSh0LGUsbik7dGhpc1t0XT1lfXJldHVybiExfV9zZXRVbm1hbmFnZWRQcm9wZXJ0eVRvTm9kZSh0LGUsbil7bj09PXRbZV0mJiJvYmplY3QiIT10eXBlb2Ygbnx8KCJjbGFzc05hbWUiPT09ZSYmKHQ9WSh0KSksdFtlXT1uKX1fc2V0UGVuZGluZ1Byb3BlcnR5KHQsZSxuKXtsZXQgaT10aGlzLl9fZGF0YUhhc1BhdGhzJiZYKHQpO3JldHVybiEhdGhpcy5fc2hvdWxkUHJvcGVydHlDaGFuZ2UodCxlLChpP3RoaXMuX19kYXRhVGVtcDp0aGlzLl9fZGF0YSlbdF0pJiYodGhpcy5fX2RhdGFQZW5kaW5nfHwodGhpcy5fX2RhdGFQZW5kaW5nPXt9LHRoaXMuX19kYXRhT2xkPXt9KSx0IGluIHRoaXMuX19kYXRhT2xkfHwodGhpcy5fX2RhdGFPbGRbdF09dGhpcy5fX2RhdGFbdF0pLGk/dGhpcy5fX2RhdGFUZW1wW3RdPWU6dGhpcy5fX2RhdGFbdF09ZSx0aGlzLl9fZGF0YVBlbmRpbmdbdF09ZSwoaXx8dGhpc1t6dC5OT1RJRlldJiZ0aGlzW3p0Lk5PVElGWV1bdF0pJiYodGhpcy5fX2RhdGFUb05vdGlmeT10aGlzLl9fZGF0YVRvTm90aWZ5fHx7fSx0aGlzLl9fZGF0YVRvTm90aWZ5W3RdPW4pLCEwKX1fc2V0UHJvcGVydHkodCxlKXt0aGlzLl9zZXRQZW5kaW5nUHJvcGVydHkodCxlLCEwKSYmdGhpcy5faW52YWxpZGF0ZVByb3BlcnRpZXMoKX1faW52YWxpZGF0ZVByb3BlcnRpZXMoKXt0aGlzLl9fZGF0YVJlYWR5JiZ0aGlzLl9mbHVzaFByb3BlcnRpZXMoKX1fZW5xdWV1ZUNsaWVudCh0KXt0aGlzLl9fZGF0YVBlbmRpbmdDbGllbnRzPXRoaXMuX19kYXRhUGVuZGluZ0NsaWVudHN8fFtdLHQhPT10aGlzJiZ0aGlzLl9fZGF0YVBlbmRpbmdDbGllbnRzLnB1c2godCl9X2ZsdXNoQ2xpZW50cygpe3RoaXMuX19kYXRhQ2xpZW50c1JlYWR5P3RoaXMuX19lbmFibGVPckZsdXNoQ2xpZW50cygpOih0aGlzLl9fZGF0YUNsaWVudHNSZWFkeT0hMCx0aGlzLl9yZWFkeUNsaWVudHMoKSx0aGlzLl9fZGF0YVJlYWR5PSEwKX1fX2VuYWJsZU9yRmx1c2hDbGllbnRzKCl7bGV0IHQ9dGhpcy5fX2RhdGFQZW5kaW5nQ2xpZW50cztpZih0KXt0aGlzLl9fZGF0YVBlbmRpbmdDbGllbnRzPW51bGw7Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspe2xldCBuPXRbZV07bi5fX2RhdGFFbmFibGVkP24uX19kYXRhUGVuZGluZyYmbi5fZmx1c2hQcm9wZXJ0aWVzKCk6bi5fZW5hYmxlUHJvcGVydGllcygpfX19X3JlYWR5Q2xpZW50cygpe3RoaXMuX19lbmFibGVPckZsdXNoQ2xpZW50cygpfXNldFByb3BlcnRpZXModCxlKXtmb3IobGV0IG4gaW4gdCkhZSYmdGhpc1t6dC5SRUFEX09OTFldJiZ0aGlzW3p0LlJFQURfT05MWV1bbl18fHRoaXMuX3NldFBlbmRpbmdQcm9wZXJ0eU9yUGF0aChuLHRbbl0sITApO3RoaXMuX2ludmFsaWRhdGVQcm9wZXJ0aWVzKCl9cmVhZHkoKXt0aGlzLl9mbHVzaFByb3BlcnRpZXMoKSx0aGlzLl9fZGF0YUNsaWVudHNSZWFkeXx8dGhpcy5fZmx1c2hDbGllbnRzKCksdGhpcy5fX2RhdGFQZW5kaW5nJiZ0aGlzLl9mbHVzaFByb3BlcnRpZXMoKX1fcHJvcGVydGllc0NoYW5nZWQodCxlLG4pe2xldCBpLHI9dGhpcy5fX2RhdGFIYXNQYXRoczt0aGlzLl9fZGF0YUhhc1BhdGhzPSExLChmdW5jdGlvbiBvKHQsZSxuLGkpe2xldCByPXRbenQuQ09NUFVURV07aWYocilpZihUKXtPdCsrO2NvbnN0IG89KGZ1bmN0aW9uIG8odCl7bGV0IGU9dC5jb25zdHJ1Y3Rvci5fX29yZGVyZWRDb21wdXRlZERlcHM7aWYoIWUpe2U9bmV3IE1hcDtjb25zdCBuPXRbenQuQ09NUFVURV07bGV0IGkse2NvdW50czpyLHJlYWR5Om8sdG90YWw6YX09KGZ1bmN0aW9uIG4odCl7Y29uc3QgZT10Ll9fY29tcHV0ZUluZm8sbj17fSxpPXRbenQuQ09NUFVURV0scj1bXTtsZXQgbz0wO2ZvcihsZXQgdCBpbiBlKXtjb25zdCBpPWVbdF07bys9blt0XT1pLmFyZ3MuZmlsdGVyKCh0PT4hdC5saXRlcmFsKSkubGVuZ3RoKyhpLmR5bmFtaWNGbj8xOjApfWZvcihsZXQgdCBpbiBpKWVbdF18fHIucHVzaCh0KTtyZXR1cm57Y291bnRzOm4scmVhZHk6cix0b3RhbDpvfX0pKHQpO2Zvcig7aT1vLnNoaWZ0KCk7KXtlLnNldChpLGUuc2l6ZSk7Y29uc3QgdD1uW2ldO3QmJnQuZm9yRWFjaCgodD0+e2NvbnN0IGU9dC5pbmZvLm1ldGhvZEluZm87LS1hLDA9PS0tcltlXSYmby5wdXNoKGUpfSkpfTAhPT1hJiZjb25zb2xlLndhcm4oYENvbXB1dGVkIGdyYXBoIGZvciAke3QubG9jYWxOYW1lfSBpbmNvbXBsZXRlOyBjaXJjdWxhcj9gKSx0LmNvbnN0cnVjdG9yLl9fb3JkZXJlZENvbXB1dGVkRGVwcz1lfXJldHVybiBlfSkodCksYT1bXTtmb3IobGV0IHQgaW4gZSlYdCh0LHIsYSxvLGkpO2xldCBzO2Zvcig7cz1hLnNoaWZ0KCk7KSR0KHQsIiIsZSwwLHMpJiZYdChzLm1ldGhvZEluZm8scixhLG8saSk7T2JqZWN0LmFzc2lnbihuLHQuX19kYXRhT2xkKSxPYmplY3QuYXNzaWduKGUsdC5fX2RhdGFQZW5kaW5nKSx0Ll9fZGF0YVBlbmRpbmc9bnVsbH1lbHNle2xldCBvPWU7Zm9yKDtIdCh0LHIsbyxuLGkpOylPYmplY3QuYXNzaWduKG4sdC5fX2RhdGFPbGQpLE9iamVjdC5hc3NpZ24oZSx0Ll9fZGF0YVBlbmRpbmcpLG89dC5fX2RhdGFQZW5kaW5nLHQuX19kYXRhUGVuZGluZz1udWxsfX0pKHRoaXMsZSxuLHIpLGk9dGhpcy5fX2RhdGFUb05vdGlmeSx0aGlzLl9fZGF0YVRvTm90aWZ5PW51bGwsdGhpcy5fcHJvcGFnYXRlUHJvcGVydHlDaGFuZ2VzKGUsbixyKSx0aGlzLl9mbHVzaENsaWVudHMoKSxIdCh0aGlzLHRoaXNbenQuUkVGTEVDVF0sZSxuLHIpLEh0KHRoaXMsdGhpc1t6dC5PQlNFUlZFXSxlLG4sciksaSYmKGZ1bmN0aW9uIGEodCxlLG4saSxyKXtsZXQgbyxhLHM9dFt6dC5OT1RJRlldLGw9T3QrKztmb3IobGV0IGEgaW4gZSllW2FdJiYocyYmRnQodCxzLGwsYSxuLGkscil8fHImJmp0KHQsYSxuKSkmJihvPSEwKTtvJiYoYT10Ll9fZGF0YUhvc3QpJiZhLl9pbnZhbGlkYXRlUHJvcGVydGllcyYmYS5faW52YWxpZGF0ZVByb3BlcnRpZXMoKX0pKHRoaXMsaSxlLG4sciksMT09dGhpcy5fX2RhdGFDb3VudGVyJiYodGhpcy5fX2RhdGFUZW1wPXt9KX1fcHJvcGFnYXRlUHJvcGVydHlDaGFuZ2VzKHQsZSxuKXt0aGlzW3p0LlBST1BBR0FURV0mJkh0KHRoaXMsdGhpc1t6dC5QUk9QQUdBVEVdLHQsZSxuKSx0aGlzLl9fdGVtcGxhdGVJbmZvJiZ0aGlzLl9ydW5FZmZlY3RzRm9yVGVtcGxhdGUodGhpcy5fX3RlbXBsYXRlSW5mbyx0LGUsbil9X3J1bkVmZmVjdHNGb3JUZW1wbGF0ZSh0LGUsbixpKXtjb25zdCByPShlLGkpPT57SHQodGhpcyx0LnByb3BlcnR5RWZmZWN0cyxlLG4saSx0Lm5vZGVMaXN0KTtmb3IobGV0IHI9dC5maXJzdENoaWxkO3I7cj1yLm5leHRTaWJsaW5nKXRoaXMuX3J1bkVmZmVjdHNGb3JUZW1wbGF0ZShyLGUsbixpKX07dC5ydW5FZmZlY3RzP3QucnVuRWZmZWN0cyhyLGUsaSk6cihlLGkpfWxpbmtQYXRocyh0LGUpe3Q9dHQodCksZT10dChlKSx0aGlzLl9fZGF0YUxpbmtlZFBhdGhzPXRoaXMuX19kYXRhTGlua2VkUGF0aHN8fHt9LHRoaXMuX19kYXRhTGlua2VkUGF0aHNbdF09ZX11bmxpbmtQYXRocyh0KXt0PXR0KHQpLHRoaXMuX19kYXRhTGlua2VkUGF0aHMmJmRlbGV0ZSB0aGlzLl9fZGF0YUxpbmtlZFBhdGhzW3RdfW5vdGlmeVNwbGljZXModCxlKXtsZXQgbj17cGF0aDoiIn07Y2UodGhpcyxudCh0aGlzLHQsbiksbi5wYXRoLGUpfWdldCh0LGUpe3JldHVybiBudChlfHx0aGlzLHQpfXNldCh0LGUsbil7bj9pdChuLHQsZSk6dGhpc1t6dC5SRUFEX09OTFldJiZ0aGlzW3p0LlJFQURfT05MWV1bdF18fHRoaXMuX3NldFBlbmRpbmdQcm9wZXJ0eU9yUGF0aCh0LGUsITApJiZ0aGlzLl9pbnZhbGlkYXRlUHJvcGVydGllcygpfXB1c2godCwuLi5lKXtsZXQgbj17cGF0aDoiIn0saT1udCh0aGlzLHQsbikscj1pLmxlbmd0aCxvPWkucHVzaCguLi5lKTtyZXR1cm4gZS5sZW5ndGgmJnVlKHRoaXMsaSxuLnBhdGgscixlLmxlbmd0aCxbXSksb31wb3AodCl7bGV0IGU9e3BhdGg6IiJ9LG49bnQodGhpcyx0LGUpLGk9Qm9vbGVhbihuLmxlbmd0aCkscj1uLnBvcCgpO3JldHVybiBpJiZ1ZSh0aGlzLG4sZS5wYXRoLG4ubGVuZ3RoLDAsW3JdKSxyfXNwbGljZSh0LGUsbiwuLi5pKXtsZXQgcixvPXtwYXRoOiIifSxhPW50KHRoaXMsdCxvKTtyZXR1cm4gZTwwP2U9YS5sZW5ndGgtTWF0aC5mbG9vcigtZSk6ZSYmKGU9TWF0aC5mbG9vcihlKSkscj0yPT09YXJndW1lbnRzLmxlbmd0aD9hLnNwbGljZShlKTphLnNwbGljZShlLG4sLi4uaSksKGkubGVuZ3RofHxyLmxlbmd0aCkmJnVlKHRoaXMsYSxvLnBhdGgsZSxpLmxlbmd0aCxyKSxyfXNoaWZ0KHQpe2xldCBlPXtwYXRoOiIifSxuPW50KHRoaXMsdCxlKSxpPUJvb2xlYW4obi5sZW5ndGgpLHI9bi5zaGlmdCgpO3JldHVybiBpJiZ1ZSh0aGlzLG4sZS5wYXRoLDAsMCxbcl0pLHJ9dW5zaGlmdCh0LC4uLmUpe2xldCBuPXtwYXRoOiIifSxpPW50KHRoaXMsdCxuKSxyPWkudW5zaGlmdCguLi5lKTtyZXR1cm4gZS5sZW5ndGgmJnVlKHRoaXMsaSxuLnBhdGgsMCxlLmxlbmd0aCxbXSkscn1ub3RpZnlQYXRoKHQsZSl7bGV0IG47aWYoMT09YXJndW1lbnRzLmxlbmd0aCl7bGV0IGk9e3BhdGg6IiJ9O2U9bnQodGhpcyx0LGkpLG49aS5wYXRofWVsc2Ugbj1BcnJheS5pc0FycmF5KHQpP3R0KHQpOnQ7dGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5T3JQYXRoKG4sZSwhMCwhMCkmJnRoaXMuX2ludmFsaWRhdGVQcm9wZXJ0aWVzKCl9X2NyZWF0ZVJlYWRPbmx5UHJvcGVydHkodCxlKXt0aGlzLl9hZGRQcm9wZXJ0eUVmZmVjdCh0LHp0LlJFQURfT05MWSksZSYmKHRoaXNbIl9zZXQiKyhmdW5jdGlvbiBuKHQpe3JldHVybiB0WzBdLnRvVXBwZXJDYXNlKCkrdC5zdWJzdHJpbmcoMSl9KSh0KV09ZnVuY3Rpb24oZSl7dGhpcy5fc2V0UHJvcGVydHkodCxlKX0pfV9jcmVhdGVQcm9wZXJ0eU9ic2VydmVyKHQsZSxuKXtsZXQgaT17cHJvcGVydHk6dCxtZXRob2Q6ZSxkeW5hbWljRm46Qm9vbGVhbihuKX07dGhpcy5fYWRkUHJvcGVydHlFZmZlY3QodCx6dC5PQlNFUlZFLHtmbjpVdCxpbmZvOmksdHJpZ2dlcjp7bmFtZTp0fX0pLG4mJnRoaXMuX2FkZFByb3BlcnR5RWZmZWN0KGUsenQuT0JTRVJWRSx7Zm46VXQsaW5mbzppLHRyaWdnZXI6e25hbWU6ZX19KX1fY3JlYXRlTWV0aG9kT2JzZXJ2ZXIodCxlKXtsZXQgbj1hZSh0KTtpZighbil0aHJvdyBuZXcgRXJyb3IoIk1hbGZvcm1lZCBvYnNlcnZlciBleHByZXNzaW9uICciK3QrIiciKTtlZSh0aGlzLG4senQuT0JTRVJWRSxuZSxudWxsLGUpfV9jcmVhdGVOb3RpZnlpbmdQcm9wZXJ0eSh0KXt0aGlzLl9hZGRQcm9wZXJ0eUVmZmVjdCh0LHp0Lk5PVElGWSx7Zm46V3QsaW5mbzp7ZXZlbnROYW1lOmx0KHQpKyItY2hhbmdlZCIscHJvcGVydHk6dH19KX1fY3JlYXRlUmVmbGVjdGVkUHJvcGVydHkodCl7bGV0IGU9dGhpcy5jb25zdHJ1Y3Rvci5hdHRyaWJ1dGVOYW1lRm9yUHJvcGVydHkodCk7Ii0iPT09ZVswXT9jb25zb2xlLndhcm4oIlByb3BlcnR5ICIrdCsiIGNhbm5vdCBiZSByZWZsZWN0ZWQgdG8gYXR0cmlidXRlICIrZSsnIGJlY2F1c2UgIi0iIGlzIG5vdCBhIHZhbGlkIHN0YXJ0aW5nIGF0dHJpYnV0ZSBuYW1lLiBVc2UgYSBsb3dlcmNhc2UgZmlyc3QgbGV0dGVyIGZvciB0aGUgcHJvcGVydHkgaW5zdGVhZC4nKTp0aGlzLl9hZGRQcm9wZXJ0eUVmZmVjdCh0LHp0LlJFRkxFQ1Qse2ZuOnF0LGluZm86e2F0dHJOYW1lOmV9fSl9X2NyZWF0ZUNvbXB1dGVkUHJvcGVydHkodCxlLG4pe2xldCBpPWFlKGUpO2lmKCFpKXRocm93IG5ldyBFcnJvcigiTWFsZm9ybWVkIGNvbXB1dGVkIGV4cHJlc3Npb24gJyIrZSsiJyIpO2NvbnN0IHI9ZWUodGhpcyxpLHp0LkNPTVBVVEUsJHQsdCxuKTtCdCh0aGlzLCJfX2NvbXB1dGVJbmZvIilbdF09cn1fbWFyc2hhbEFyZ3ModCxlLG4pe2NvbnN0IGk9dGhpcy5fX2RhdGEscj1bXTtmb3IobGV0IG89MCxhPXQubGVuZ3RoO288YTtvKyspe2xldHtuYW1lOmEsc3RydWN0dXJlZDpzLHdpbGRjYXJkOmwsdmFsdWU6YyxsaXRlcmFsOnV9PXRbb107aWYoIXUpaWYobCl7Y29uc3QgdD1aKGEsZSkscj1sZShpLG4sdD9lOmEpO2M9e3BhdGg6dD9lOmEsdmFsdWU6cixiYXNlOnQ/bnQoaSxhKTpyfX1lbHNlIGM9cz9sZShpLG4sYSk6aVthXTtpZihFJiYhdGhpcy5fb3ZlcnJpZGVMZWdhY3lVbmRlZmluZWQmJnZvaWQgMD09PWMmJnQubGVuZ3RoPjEpcmV0dXJuIFJ0O3Jbb109Y31yZXR1cm4gcn1zdGF0aWMgYWRkUHJvcGVydHlFZmZlY3QodCxlLG4pe3RoaXMucHJvdG90eXBlLl9hZGRQcm9wZXJ0eUVmZmVjdCh0LGUsbil9c3RhdGljIGNyZWF0ZVByb3BlcnR5T2JzZXJ2ZXIodCxlLG4pe3RoaXMucHJvdG90eXBlLl9jcmVhdGVQcm9wZXJ0eU9ic2VydmVyKHQsZSxuKX1zdGF0aWMgY3JlYXRlTWV0aG9kT2JzZXJ2ZXIodCxlKXt0aGlzLnByb3RvdHlwZS5fY3JlYXRlTWV0aG9kT2JzZXJ2ZXIodCxlKX1zdGF0aWMgY3JlYXRlTm90aWZ5aW5nUHJvcGVydHkodCl7dGhpcy5wcm90b3R5cGUuX2NyZWF0ZU5vdGlmeWluZ1Byb3BlcnR5KHQpfXN0YXRpYyBjcmVhdGVSZWFkT25seVByb3BlcnR5KHQsZSl7dGhpcy5wcm90b3R5cGUuX2NyZWF0ZVJlYWRPbmx5UHJvcGVydHkodCxlKX1zdGF0aWMgY3JlYXRlUmVmbGVjdGVkUHJvcGVydHkodCl7dGhpcy5wcm90b3R5cGUuX2NyZWF0ZVJlZmxlY3RlZFByb3BlcnR5KHQpfXN0YXRpYyBjcmVhdGVDb21wdXRlZFByb3BlcnR5KHQsZSxuKXt0aGlzLnByb3RvdHlwZS5fY3JlYXRlQ29tcHV0ZWRQcm9wZXJ0eSh0LGUsbil9c3RhdGljIGJpbmRUZW1wbGF0ZSh0KXtyZXR1cm4gdGhpcy5wcm90b3R5cGUuX2JpbmRUZW1wbGF0ZSh0KX1fYmluZFRlbXBsYXRlKHQsZSl7bGV0IG49dGhpcy5jb25zdHJ1Y3Rvci5fcGFyc2VUZW1wbGF0ZSh0KSxpPXRoaXMuX19wcmVCb3VuZFRlbXBsYXRlSW5mbz09bjtpZighaSlmb3IobGV0IHQgaW4gbi5wcm9wZXJ0eUVmZmVjdHMpdGhpcy5fY3JlYXRlUHJvcGVydHlBY2Nlc3Nvcih0KTtpZihlKWlmKG49T2JqZWN0LmNyZWF0ZShuKSxuLndhc1ByZUJvdW5kPWksdGhpcy5fX3RlbXBsYXRlSW5mbyl7Y29uc3QgZT10Ll9wYXJlbnRUZW1wbGF0ZUluZm98fHRoaXMuX190ZW1wbGF0ZUluZm8saT1lLmxhc3RDaGlsZDtuLnBhcmVudD1lLGUubGFzdENoaWxkPW4sbi5wcmV2aW91c1NpYmxpbmc9aSxpP2kubmV4dFNpYmxpbmc9bjplLmZpcnN0Q2hpbGQ9bn1lbHNlIHRoaXMuX190ZW1wbGF0ZUluZm89bjtlbHNlIHRoaXMuX19wcmVCb3VuZFRlbXBsYXRlSW5mbz1uO3JldHVybiBufXN0YXRpYyBfYWRkVGVtcGxhdGVQcm9wZXJ0eUVmZmVjdCh0LGUsbil7KHQuaG9zdFByb3BzPXQuaG9zdFByb3BzfHx7fSlbZV09ITA7bGV0IGk9dC5wcm9wZXJ0eUVmZmVjdHM9dC5wcm9wZXJ0eUVmZmVjdHN8fHt9OyhpW2VdPWlbZV18fFtdKS5wdXNoKG4pfV9zdGFtcFRlbXBsYXRlKHQsZSl7ZT1lfHx0aGlzLl9iaW5kVGVtcGxhdGUodCwhMCksZGUucHVzaCh0aGlzKTtsZXQgbj1zdXBlci5fc3RhbXBUZW1wbGF0ZSh0LGUpO2lmKGRlLnBvcCgpLGUubm9kZUxpc3Q9bi5ub2RlTGlzdCwhZS53YXNQcmVCb3VuZCl7bGV0IHQ9ZS5jaGlsZE5vZGVzPVtdO2ZvcihsZXQgZT1uLmZpcnN0Q2hpbGQ7ZTtlPWUubmV4dFNpYmxpbmcpdC5wdXNoKGUpfXJldHVybiBuLnRlbXBsYXRlSW5mbz1lLChmdW5jdGlvbiBpKHQsZSl7bGV0e25vZGVMaXN0Om4sbm9kZUluZm9MaXN0Oml9PWU7aWYoaS5sZW5ndGgpZm9yKGxldCBlPTA7ZTxpLmxlbmd0aDtlKyspe2xldCByPW5bZV0sbz1pW2VdLmJpbmRpbmdzO2lmKG8pZm9yKGxldCBlPTA7ZTxvLmxlbmd0aDtlKyspe2xldCBuPW9bZV07UXQocixuKSx0ZShyLHQsbil9ci5fX2RhdGFIb3N0PXR9fSkodGhpcyxlKSx0aGlzLl9fZGF0YUNsaWVudHNSZWFkeSYmKHRoaXMuX3J1bkVmZmVjdHNGb3JUZW1wbGF0ZShlLHRoaXMuX19kYXRhLG51bGwsITEpLHRoaXMuX2ZsdXNoQ2xpZW50cygpKSxufV9yZW1vdmVCb3VuZERvbSh0KXtjb25zdCBlPXQudGVtcGxhdGVJbmZvLHtwcmV2aW91c1NpYmxpbmc6bixuZXh0U2libGluZzppLHBhcmVudDpyfT1lO24/bi5uZXh0U2libGluZz1pOnImJihyLmZpcnN0Q2hpbGQ9aSksaT9pLnByZXZpb3VzU2libGluZz1uOnImJihyLmxhc3RDaGlsZD1uKSxlLm5leHRTaWJsaW5nPWUucHJldmlvdXNTaWJsaW5nPW51bGw7bGV0IG89ZS5jaGlsZE5vZGVzO2ZvcihsZXQgdD0wO3Q8by5sZW5ndGg7dCsrKXtsZXQgZT1vW3RdO1koWShlKS5wYXJlbnROb2RlKS5yZW1vdmVDaGlsZChlKX19c3RhdGljIF9wYXJzZVRlbXBsYXRlTm9kZSh0LG4saSl7bGV0IHI9ZS5fcGFyc2VUZW1wbGF0ZU5vZGUuY2FsbCh0aGlzLHQsbixpKTtpZih0Lm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREUpe2xldCBlPXRoaXMuX3BhcnNlQmluZGluZ3ModC50ZXh0Q29udGVudCxuKTtlJiYodC50ZXh0Q29udGVudD1vZShlKXx8IiAiLEt0KHRoaXMsbixpLCJ0ZXh0IiwidGV4dENvbnRlbnQiLGUpLHI9ITApfXJldHVybiByfXN0YXRpYyBfcGFyc2VUZW1wbGF0ZU5vZGVBdHRyaWJ1dGUodCxuLGkscixvKXtsZXQgYT10aGlzLl9wYXJzZUJpbmRpbmdzKG8sbik7aWYoYSl7bGV0IGU9cixvPSJwcm9wZXJ0eSI7RHQudGVzdChyKT9vPSJhdHRyaWJ1dGUiOiIkIj09cltyLmxlbmd0aC0xXSYmKHI9ci5zbGljZSgwLC0xKSxvPSJhdHRyaWJ1dGUiKTtsZXQgcz1vZShhKTtyZXR1cm4gcyYmImF0dHJpYnV0ZSI9PW8mJigiY2xhc3MiPT1yJiZ0Lmhhc0F0dHJpYnV0ZSgiY2xhc3MiKSYmKHMrPSIgIit0LmdldEF0dHJpYnV0ZShyKSksdC5zZXRBdHRyaWJ1dGUocixzKSksImF0dHJpYnV0ZSI9PW8mJiJkaXNhYmxlLXVwZ3JhZGUkIj09ZSYmdC5zZXRBdHRyaWJ1dGUociwiIiksImlucHV0Ij09PXQubG9jYWxOYW1lJiYidmFsdWUiPT09ZSYmdC5zZXRBdHRyaWJ1dGUoZSwiIiksdC5yZW1vdmVBdHRyaWJ1dGUoZSksInByb3BlcnR5Ij09PW8mJihyPXN0KHIpKSxLdCh0aGlzLG4saSxvLHIsYSxzKSwhMH1yZXR1cm4gZS5fcGFyc2VUZW1wbGF0ZU5vZGVBdHRyaWJ1dGUuY2FsbCh0aGlzLHQsbixpLHIsbyl9c3RhdGljIF9wYXJzZVRlbXBsYXRlTmVzdGVkVGVtcGxhdGUodCxuLGkpe2xldCByPWUuX3BhcnNlVGVtcGxhdGVOZXN0ZWRUZW1wbGF0ZS5jYWxsKHRoaXMsdCxuLGkpO2NvbnN0IG89dC5wYXJlbnROb2RlLGE9aS50ZW1wbGF0ZUluZm8scz0iZG9tLWlmIj09PW8ubG9jYWxOYW1lO0MmJihzfHwiZG9tLXJlcGVhdCI9PT1vLmxvY2FsTmFtZSkmJihvLnJlbW92ZUNoaWxkKHQpLChpPWkucGFyZW50SW5mbykudGVtcGxhdGVJbmZvPWEsaS5ub3RlZD0hMCxyPSExKTtsZXQgbD1hLmhvc3RQcm9wcztpZihBJiZzKWwmJihuLmhvc3RQcm9wcz1PYmplY3QuYXNzaWduKG4uaG9zdFByb3BzfHx7fSxsKSxDfHwoaS5wYXJlbnRJbmZvLm5vdGVkPSEwKSk7ZWxzZXtsZXQgdD0ieyI7Zm9yKGxldCBlIGluIGwpS3QodGhpcyxuLGksInByb3BlcnR5IiwiX2hvc3RfIitlLFt7bW9kZTp0LHNvdXJjZTplLGRlcGVuZGVuY2llczpbZV0saG9zdFByb3A6ITB9XSl9cmV0dXJuIHJ9c3RhdGljIF9wYXJzZUJpbmRpbmdzKHQsZSl7bGV0IG4saT1bXSxyPTA7Zm9yKDtudWxsIT09KG49cmUuZXhlYyh0KSk7KXtuLmluZGV4PnImJmkucHVzaCh7bGl0ZXJhbDp0LnNsaWNlKHIsbi5pbmRleCl9KTtsZXQgbz1uWzFdWzBdLGE9Qm9vbGVhbihuWzJdKSxzPW5bM10udHJpbSgpLGw9ITEsYz0iIix1PS0xOyJ7Ij09byYmKHU9cy5pbmRleE9mKCI6OiIpKT4wJiYoYz1zLnN1YnN0cmluZyh1KzIpLHM9cy5zdWJzdHJpbmcoMCx1KSxsPSEwKTtsZXQgaD1hZShzKSxkPVtdO2lmKGgpe2xldHthcmdzOnQsbWV0aG9kTmFtZTpufT1oO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKXtsZXQgbj10W2VdO24ubGl0ZXJhbHx8ZC5wdXNoKG4pfWxldCBpPWUuZHluYW1pY0ZuczsoaSYmaVtuXXx8aC5zdGF0aWMpJiYoZC5wdXNoKG4pLGguZHluYW1pY0ZuPSEwKX1lbHNlIGQucHVzaChzKTtpLnB1c2goe3NvdXJjZTpzLG1vZGU6byxuZWdhdGU6YSxjdXN0b21FdmVudDpsLHNpZ25hdHVyZTpoLGRlcGVuZGVuY2llczpkLGV2ZW50OmN9KSxyPXJlLmxhc3RJbmRleH1pZihyJiZyPHQubGVuZ3RoKXtsZXQgZT10LnN1YnN0cmluZyhyKTtlJiZpLnB1c2goe2xpdGVyYWw6ZX0pfXJldHVybiBpLmxlbmd0aD9pOm51bGx9c3RhdGljIF9ldmFsdWF0ZUJpbmRpbmcodCxlLG4saSxyLG8pe2xldCBhO3JldHVybiBhPWUuc2lnbmF0dXJlP25lKHQsbixpLDAsZS5zaWduYXR1cmUpOm4hPWUuc291cmNlP250KHQsZS5zb3VyY2UpOm8mJlgobik/bnQodCxuKTp0Ll9fZGF0YVtuXSxlLm5lZ2F0ZSYmKGE9IWEpLGF9fX0pKSxkZT1bXSxwZT1JKCh0PT57Y29uc3QgZT14dCh0KTtmdW5jdGlvbiBuKHQpe2NvbnN0IGU9T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpO3JldHVybiBlLnByb3RvdHlwZSBpbnN0YW5jZW9mIHI/ZTpudWxsfWZ1bmN0aW9uIGkodCl7aWYoIXQuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX19vd25Qcm9wZXJ0aWVzIix0KSkpe2xldCBlPW51bGw7aWYodC5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJwcm9wZXJ0aWVzIix0KSkpe2NvbnN0IG49dC5wcm9wZXJ0aWVzO24mJihlPSgKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KZnVuY3Rpb24gZSh0KXtjb25zdCBlPXt9O2ZvcihsZXQgbiBpbiB0KXtjb25zdCBpPXRbbl07ZVtuXT0iZnVuY3Rpb24iPT10eXBlb2YgaT97dHlwZTppfTppfXJldHVybiBlfSkobikpfXQuX19vd25Qcm9wZXJ0aWVzPWV9cmV0dXJuIHQuX19vd25Qcm9wZXJ0aWVzfWNsYXNzIHIgZXh0ZW5kcyBle3N0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCl7aWYoIXRoaXMuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX19vYnNlcnZlZEF0dHJpYnV0ZXMiLHRoaXMpKSl7Y29uc3QgdD10aGlzLl9wcm9wZXJ0aWVzO3RoaXMuX19vYnNlcnZlZEF0dHJpYnV0ZXM9dD9PYmplY3Qua2V5cyh0KS5tYXAoKHQ9PnRoaXMucHJvdG90eXBlLl9hZGRQcm9wZXJ0eVRvQXR0cmlidXRlTWFwKHQpKSk6W119cmV0dXJuIHRoaXMuX19vYnNlcnZlZEF0dHJpYnV0ZXN9c3RhdGljIGZpbmFsaXplKCl7aWYoIXRoaXMuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX19maW5hbGl6ZWQiLHRoaXMpKSl7Y29uc3QgdD1uKHRoaXMpO3QmJnQuZmluYWxpemUoKSx0aGlzLl9fZmluYWxpemVkPSEwLHRoaXMuX2ZpbmFsaXplQ2xhc3MoKX19c3RhdGljIF9maW5hbGl6ZUNsYXNzKCl7Y29uc3QgdD1pKHRoaXMpO3QmJnRoaXMuY3JlYXRlUHJvcGVydGllcyh0KX1zdGF0aWMgZ2V0IF9wcm9wZXJ0aWVzKCl7aWYoIXRoaXMuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX19wcm9wZXJ0aWVzIix0aGlzKSkpe2NvbnN0IHQ9bih0aGlzKTt0aGlzLl9fcHJvcGVydGllcz1PYmplY3QuYXNzaWduKHt9LHQmJnQuX3Byb3BlcnRpZXMsaSh0aGlzKSl9cmV0dXJuIHRoaXMuX19wcm9wZXJ0aWVzfXN0YXRpYyB0eXBlRm9yUHJvcGVydHkodCl7Y29uc3QgZT10aGlzLl9wcm9wZXJ0aWVzW3RdO3JldHVybiBlJiZlLnR5cGV9X2luaXRpYWxpemVQcm9wZXJ0aWVzKCl7dGhpcy5jb25zdHJ1Y3Rvci5maW5hbGl6ZSgpLHN1cGVyLl9pbml0aWFsaXplUHJvcGVydGllcygpfWNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2smJnN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5fZW5hYmxlUHJvcGVydGllcygpfWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2smJnN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCl9fXJldHVybiByfSkpLGZlPXdpbmRvdy5TaGFkeUNTUyYmd2luZG93LlNoYWR5Q1NTLmNzc0J1aWxkLG1lPUkoKHQ9Pntjb25zdCBlPXBlKGhlKHQpKTtmdW5jdGlvbiBuKHQsZSxuLGkpe24uY29tcHV0ZWQmJihuLnJlYWRPbmx5PSEwKSxuLmNvbXB1dGVkJiYodC5faGFzUmVhZE9ubHlFZmZlY3QoZSk/Y29uc29sZS53YXJuKGBDYW5ub3QgcmVkZWZpbmUgY29tcHV0ZWQgcHJvcGVydHkgJyR7ZX0nLmApOnQuX2NyZWF0ZUNvbXB1dGVkUHJvcGVydHkoZSxuLmNvbXB1dGVkLGkpKSxuLnJlYWRPbmx5JiYhdC5faGFzUmVhZE9ubHlFZmZlY3QoZSk/dC5fY3JlYXRlUmVhZE9ubHlQcm9wZXJ0eShlLCFuLmNvbXB1dGVkKTohMT09PW4ucmVhZE9ubHkmJnQuX2hhc1JlYWRPbmx5RWZmZWN0KGUpJiZjb25zb2xlLndhcm4oYENhbm5vdCBtYWtlIHJlYWRPbmx5IHByb3BlcnR5ICcke2V9JyBub24tcmVhZE9ubHkuYCksbi5yZWZsZWN0VG9BdHRyaWJ1dGUmJiF0Ll9oYXNSZWZsZWN0RWZmZWN0KGUpP3QuX2NyZWF0ZVJlZmxlY3RlZFByb3BlcnR5KGUpOiExPT09bi5yZWZsZWN0VG9BdHRyaWJ1dGUmJnQuX2hhc1JlZmxlY3RFZmZlY3QoZSkmJmNvbnNvbGUud2FybihgQ2Fubm90IG1ha2UgcmVmbGVjdGVkIHByb3BlcnR5ICcke2V9JyBub24tcmVmbGVjdGVkLmApLG4ubm90aWZ5JiYhdC5faGFzTm90aWZ5RWZmZWN0KGUpP3QuX2NyZWF0ZU5vdGlmeWluZ1Byb3BlcnR5KGUpOiExPT09bi5ub3RpZnkmJnQuX2hhc05vdGlmeUVmZmVjdChlKSYmY29uc29sZS53YXJuKGBDYW5ub3QgbWFrZSBub3RpZnkgcHJvcGVydHkgJyR7ZX0nIG5vbi1ub3RpZnkuYCksbi5vYnNlcnZlciYmdC5fY3JlYXRlUHJvcGVydHlPYnNlcnZlcihlLG4ub2JzZXJ2ZXIsaVtuLm9ic2VydmVyXSksdC5fYWRkUHJvcGVydHlUb0F0dHJpYnV0ZU1hcChlKX1yZXR1cm4gY2xhc3MgZXh0ZW5kcyBle3N0YXRpYyBnZXQgcG9seW1lckVsZW1lbnRWZXJzaW9uKCl7cmV0dXJuIjMuNC4xIn1zdGF0aWMgX2ZpbmFsaXplQ2xhc3MoKXtlLl9maW5hbGl6ZUNsYXNzLmNhbGwodGhpcyk7Y29uc3QgdD0oZnVuY3Rpb24gbih0KXtyZXR1cm4gdC5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfX293bk9ic2VydmVycyIsdCkpfHwodC5fX293bk9ic2VydmVycz10Lmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIm9ic2VydmVycyIsdCkpP3Qub2JzZXJ2ZXJzOm51bGwpLHQuX19vd25PYnNlcnZlcnN9KSh0aGlzKTt0JiZ0aGlzLmNyZWF0ZU9ic2VydmVycyh0LHRoaXMuX3Byb3BlcnRpZXMpLHRoaXMuX3ByZXBhcmVUZW1wbGF0ZSgpfXN0YXRpYyBfcHJlcGFyZVRlbXBsYXRlKCl7bGV0IHQ9dGhpcy50ZW1wbGF0ZTt0JiYoInN0cmluZyI9PXR5cGVvZiB0Pyhjb25zb2xlLmVycm9yKCJ0ZW1wbGF0ZSBnZXR0ZXIgbXVzdCByZXR1cm4gSFRNTFRlbXBsYXRlRWxlbWVudCIpLHQ9bnVsbCk6d3x8KHQ9dC5jbG9uZU5vZGUoITApKSksdGhpcy5wcm90b3R5cGUuX3RlbXBsYXRlPXR9c3RhdGljIGNyZWF0ZVByb3BlcnRpZXModCl7Zm9yKGxldCBlIGluIHQpbih0aGlzLnByb3RvdHlwZSxlLHRbZV0sdCl9c3RhdGljIGNyZWF0ZU9ic2VydmVycyh0LGUpe2NvbnN0IG49dGhpcy5wcm90b3R5cGU7Zm9yKGxldCBpPTA7aTx0Lmxlbmd0aDtpKyspbi5fY3JlYXRlTWV0aG9kT2JzZXJ2ZXIodFtpXSxlKX1zdGF0aWMgZ2V0IHRlbXBsYXRlKCl7aWYoIXRoaXMuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX3RlbXBsYXRlIix0aGlzKSkpe2NvbnN0IHQ9dGhpcy5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX3RlbXBsYXRlIix0aGlzLnByb3RvdHlwZSkpP3RoaXMucHJvdG90eXBlLl90ZW1wbGF0ZTp2b2lkIDA7dGhpcy5fdGVtcGxhdGU9dm9pZCAwIT09dD90OnRoaXMuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiaXMiLHRoaXMpKSYmKGZ1bmN0aW9uIHQoZSl7bGV0IG49bnVsbDtpZihlJiYoIWJ8fHgpJiYobj1CLmltcG9ydChlLCJ0ZW1wbGF0ZSIpLGImJiFuKSl0aHJvdyBuZXcgRXJyb3IoYHN0cmljdFRlbXBsYXRlUG9saWN5OiBleHBlY3RpbmcgZG9tLW1vZHVsZSBvciBudWxsIHRlbXBsYXRlIGZvciAke2V9YCk7cmV0dXJuIG59KSh0aGlzLmlzKXx8T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMucHJvdG90eXBlKS5jb25zdHJ1Y3Rvci50ZW1wbGF0ZX1yZXR1cm4gdGhpcy5fdGVtcGxhdGV9c3RhdGljIHNldCB0ZW1wbGF0ZSh0KXt0aGlzLl90ZW1wbGF0ZT10fXN0YXRpYyBnZXQgaW1wb3J0UGF0aCgpe2lmKCF0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9pbXBvcnRQYXRoIix0aGlzKSkpe2NvbnN0IHQ9dGhpcy5pbXBvcnRNZXRhO2lmKHQpdGhpcy5faW1wb3J0UGF0aD1mKHQudXJsKTtlbHNle2NvbnN0IHQ9Qi5pbXBvcnQodGhpcy5pcyk7dGhpcy5faW1wb3J0UGF0aD10JiZ0LmFzc2V0cGF0aHx8T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMucHJvdG90eXBlKS5jb25zdHJ1Y3Rvci5pbXBvcnRQYXRofX1yZXR1cm4gdGhpcy5faW1wb3J0UGF0aH1jb25zdHJ1Y3Rvcigpe3N1cGVyKCl9X2luaXRpYWxpemVQcm9wZXJ0aWVzKCl7dGhpcy5jb25zdHJ1Y3Rvci5maW5hbGl6ZSgpLHRoaXMuY29uc3RydWN0b3IuX2ZpbmFsaXplVGVtcGxhdGUodGhpcy5sb2NhbE5hbWUpLHN1cGVyLl9pbml0aWFsaXplUHJvcGVydGllcygpLHRoaXMucm9vdFBhdGg9Xyx0aGlzLmltcG9ydFBhdGg9dGhpcy5jb25zdHJ1Y3Rvci5pbXBvcnRQYXRoO2xldCB0PShmdW5jdGlvbiBlKHQpe2lmKCF0Lmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9fcHJvcGVydHlEZWZhdWx0cyIsdCkpKXt0Ll9fcHJvcGVydHlEZWZhdWx0cz1udWxsO2xldCBlPXQuX3Byb3BlcnRpZXM7Zm9yKGxldCBuIGluIGUpe2xldCBpPWVbbl07InZhbHVlImluIGkmJih0Ll9fcHJvcGVydHlEZWZhdWx0cz10Ll9fcHJvcGVydHlEZWZhdWx0c3x8e30sdC5fX3Byb3BlcnR5RGVmYXVsdHNbbl09aSl9fXJldHVybiB0Ll9fcHJvcGVydHlEZWZhdWx0c30pKHRoaXMuY29uc3RydWN0b3IpO2lmKHQpZm9yKGxldCBlIGluIHQpe2xldCBuPXRbZV07aWYodGhpcy5fY2FuQXBwbHlQcm9wZXJ0eURlZmF1bHQoZSkpe2xldCB0PSJmdW5jdGlvbiI9PXR5cGVvZiBuLnZhbHVlP24udmFsdWUuY2FsbCh0aGlzKTpuLnZhbHVlO3RoaXMuX2hhc0FjY2Vzc29yKGUpP3RoaXMuX3NldFBlbmRpbmdQcm9wZXJ0eShlLHQsITApOnRoaXNbZV09dH19fV9jYW5BcHBseVByb3BlcnR5RGVmYXVsdCh0KXtyZXR1cm4hdGhpcy5oYXNPd25Qcm9wZXJ0eSh0KX1zdGF0aWMgX3Byb2Nlc3NTdHlsZVRleHQodCxlKXtyZXR1cm4gcCh0LGUpfXN0YXRpYyBfZmluYWxpemVUZW1wbGF0ZSh0KXtjb25zdCBlPXRoaXMucHJvdG90eXBlLl90ZW1wbGF0ZTtpZihlJiYhZS5fX3BvbHltZXJGaW5hbGl6ZWQpe2UuX19wb2x5bWVyRmluYWxpemVkPSEwO2NvbnN0IG49dGhpcy5pbXBvcnRQYXRoOyhmdW5jdGlvbiBuKHQsZSxpLHIpe2lmKCFmZSl7Y29uc3Qgbj1lLmNvbnRlbnQucXVlcnlTZWxlY3RvckFsbCgic3R5bGUiKSxvPUcoZSksYT0oZnVuY3Rpb24gbyh0KXtsZXQgZT1GKHQpO3JldHVybiBlP1coZSk6W119KShpKSxzPWUuY29udGVudC5maXJzdEVsZW1lbnRDaGlsZDtmb3IobGV0IG49MDtuPGEubGVuZ3RoO24rKyl7bGV0IGk9YVtuXTtpLnRleHRDb250ZW50PXQuX3Byb2Nlc3NTdHlsZVRleHQoaS50ZXh0Q29udGVudCxyKSxlLmNvbnRlbnQuaW5zZXJ0QmVmb3JlKGkscyl9bGV0IGw9MDtmb3IobGV0IGU9MDtlPG8ubGVuZ3RoO2UrKyl7bGV0IGk9b1tlXSxhPW5bbF07YSE9PWk/KGk9aS5jbG9uZU5vZGUoITApLGEucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoaSxhKSk6bCsrLGkudGV4dENvbnRlbnQ9dC5fcHJvY2Vzc1N0eWxlVGV4dChpLnRleHRDb250ZW50LHIpfX1pZih3aW5kb3cuU2hhZHlDU1MmJndpbmRvdy5TaGFkeUNTUy5wcmVwYXJlVGVtcGxhdGUoZSxpKSxQJiZmZSYmZyl7Y29uc3Qgbj1lLmNvbnRlbnQucXVlcnlTZWxlY3RvckFsbCgic3R5bGUiKTtpZihuKXtsZXQgZT0iIjtBcnJheS5mcm9tKG4pLmZvckVhY2goKHQ9PntlKz10LnRleHRDb250ZW50LHQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KX0pKSx0Ll9zdHlsZVNoZWV0PW5ldyBDU1NTdHlsZVNoZWV0LHQuX3N0eWxlU2hlZXQucmVwbGFjZVN5bmMoZSl9fX0pKHRoaXMsZSx0LG4/ZChuKToiIiksdGhpcy5wcm90b3R5cGUuX2JpbmRUZW1wbGF0ZShlKX19Y29ubmVjdGVkQ2FsbGJhY2soKXt3aW5kb3cuU2hhZHlDU1MmJnRoaXMuX3RlbXBsYXRlJiZ3aW5kb3cuU2hhZHlDU1Muc3R5bGVFbGVtZW50KHRoaXMpLHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCl9cmVhZHkoKXt0aGlzLl90ZW1wbGF0ZSYmKHRoaXMucm9vdD10aGlzLl9zdGFtcFRlbXBsYXRlKHRoaXMuX3RlbXBsYXRlKSx0aGlzLiQ9dGhpcy5yb290LiQpLHN1cGVyLnJlYWR5KCl9X3JlYWR5Q2xpZW50cygpe3RoaXMuX3RlbXBsYXRlJiYodGhpcy5yb290PXRoaXMuX2F0dGFjaERvbSh0aGlzLnJvb3QpKSxzdXBlci5fcmVhZHlDbGllbnRzKCl9X2F0dGFjaERvbSh0KXtjb25zdCBlPVkodGhpcyk7aWYoZS5hdHRhY2hTaGFkb3cpcmV0dXJuIHQ/KGUuc2hhZG93Um9vdHx8KGUuYXR0YWNoU2hhZG93KHttb2RlOiJvcGVuIixzaGFkeVVwZ3JhZGVGcmFnbWVudDp0fSksZS5zaGFkb3dSb290LmFwcGVuZENoaWxkKHQpLHRoaXMuY29uc3RydWN0b3IuX3N0eWxlU2hlZXQmJihlLnNoYWRvd1Jvb3QuYWRvcHRlZFN0eWxlU2hlZXRzPVt0aGlzLmNvbnN0cnVjdG9yLl9zdHlsZVNoZWV0XSkpLE0mJndpbmRvdy5TaGFkeURPTSYmd2luZG93LlNoYWR5RE9NLmZsdXNoSW5pdGlhbChlLnNoYWRvd1Jvb3QpLGUuc2hhZG93Um9vdCk6bnVsbDt0aHJvdyBuZXcgRXJyb3IoIlNoYWRvd0RPTSBub3QgYXZhaWxhYmxlLiBQb2x5bWVyRWxlbWVudCBjYW4gY3JlYXRlIGRvbSBhcyBjaGlsZHJlbiBpbnN0ZWFkIG9mIGluIFNoYWRvd0RPTSBieSBzZXR0aW5nIGB0aGlzLnJvb3QgPSB0aGlzO2AgYmVmb3JlIGByZWFkeWAuIil9dXBkYXRlU3R5bGVzKHQpe3dpbmRvdy5TaGFkeUNTUyYmd2luZG93LlNoYWR5Q1NTLnN0eWxlU3VidHJlZSh0aGlzLHQpfXJlc29sdmVVcmwodCxlKXtyZXR1cm4hZSYmdGhpcy5pbXBvcnRQYXRoJiYoZT1kKHRoaXMuaW1wb3J0UGF0aCkpLGQodCxlKX1zdGF0aWMgX3BhcnNlVGVtcGxhdGVDb250ZW50KHQsbixpKXtyZXR1cm4gbi5keW5hbWljRm5zPW4uZHluYW1pY0Zuc3x8dGhpcy5fcHJvcGVydGllcyxlLl9wYXJzZVRlbXBsYXRlQ29udGVudC5jYWxsKHRoaXMsdCxuLGkpfXN0YXRpYyBfYWRkVGVtcGxhdGVQcm9wZXJ0eUVmZmVjdCh0LG4saSl7cmV0dXJuIVN8fG4gaW4gdGhpcy5fcHJvcGVydGllc3x8aS5pbmZvLnBhcnQuc2lnbmF0dXJlJiZpLmluZm8ucGFydC5zaWduYXR1cmUuc3RhdGljfHxpLmluZm8ucGFydC5ob3N0UHJvcHx8dC5uZXN0ZWRUZW1wbGF0ZXx8Y29uc29sZS53YXJuKGBQcm9wZXJ0eSAnJHtufScgdXNlZCBpbiB0ZW1wbGF0ZSBidXQgbm90IGRlY2xhcmVkIGluICdwcm9wZXJ0aWVzJzsgYXR0cmlidXRlIHdpbGwgbm90IGJlIG9ic2VydmVkLmApLGUuX2FkZFRlbXBsYXRlUHJvcGVydHlFZmZlY3QuY2FsbCh0aGlzLHQsbixpKX19fSkpOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dAogICAgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28KICAgIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpjbGFzcyBnZXtjb25zdHJ1Y3Rvcih0KXt0aGlzLnZhbHVlPXQudG9TdHJpbmcoKX10b1N0cmluZygpe3JldHVybiB0aGlzLnZhbHVlfX1jb25zdCBfZT1mdW5jdGlvbiB0KGUsLi4ubil7Y29uc3QgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO3JldHVybiBpLmlubmVySFRNTD1uLnJlZHVjZSgoKHQsbixpKT0+dCsoZnVuY3Rpb24gcih0KXtpZih0IGluc3RhbmNlb2YgSFRNTFRlbXBsYXRlRWxlbWVudClyZXR1cm4gdC5pbm5lckhUTUw7aWYodCBpbnN0YW5jZW9mIGdlKXJldHVybihmdW5jdGlvbiBlKHQpe2lmKHQgaW5zdGFuY2VvZiBnZSlyZXR1cm4gdC52YWx1ZTt0aHJvdyBuZXcgRXJyb3IoYG5vbi1saXRlcmFsIHZhbHVlIHBhc3NlZCB0byBQb2x5bWVyJ3MgaHRtbExpdGVyYWwgZnVuY3Rpb246ICR7dH1gKX0pKHQpO3Rocm93IG5ldyBFcnJvcihgbm9uLXRlbXBsYXRlIHZhbHVlIHBhc3NlZCB0byBQb2x5bWVyJ3MgaHRtbCBmdW5jdGlvbjogJHt0fWApfSkobikrZVtpKzFdKSxlWzBdKSxpfSx5ZT1tZShIVE1MRWxlbWVudCk7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovdmFyIHZlPSJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzoidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6e307ZnVuY3Rpb24gYmUodCxlLG4pe3JldHVybiB0KG49e3BhdGg6ZSxleHBvcnRzOnt9LHJlcXVpcmU6ZnVuY3Rpb24odCxlKXtyZXR1cm4oZnVuY3Rpb24gbigpe3Rocm93IG5ldyBFcnJvcigiRHluYW1pYyByZXF1aXJlcyBhcmUgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQgYnkgQHJvbGx1cC9wbHVnaW4tY29tbW9uanMiKX0pKCl9fSxuLmV4cG9ydHMpLG4uZXhwb3J0c31mdW5jdGlvbiB4ZSh0KXtpZih0Ll9fZXNNb2R1bGUpcmV0dXJuIHQ7dmFyIGU9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtyZXR1cm4gT2JqZWN0LmtleXModCkuZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIGk9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4saS5nZXQ/aTp7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KX0pKSxlfXZhciB3ZT1iZSgoZnVuY3Rpb24odCxlKXsoZnVuY3Rpb24oKXt2YXIgbixpPSJFeHBlY3RlZCBhIGZ1bmN0aW9uIixyPSJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIixvPSJfX2xvZGFzaF9wbGFjZWhvbGRlcl9fIixhPTMyLHM9MTI4LGw9MS8wLGM9OTAwNzE5OTI1NDc0MDk5MSx1PU5hTixoPTQyOTQ5NjcyOTUsZD1bWyJhcnkiLHNdLFsiYmluZCIsMV0sWyJiaW5kS2V5IiwyXSxbImN1cnJ5Iiw4XSxbImN1cnJ5UmlnaHQiLDE2XSxbImZsaXAiLDUxMl0sWyJwYXJ0aWFsIixhXSxbInBhcnRpYWxSaWdodCIsNjRdLFsicmVhcmciLDI1Nl1dLHA9IltvYmplY3QgQXJndW1lbnRzXSIsZj0iW29iamVjdCBBcnJheV0iLG09IltvYmplY3QgQm9vbGVhbl0iLGc9IltvYmplY3QgRGF0ZV0iLF89IltvYmplY3QgRXJyb3JdIix5PSJbb2JqZWN0IEZ1bmN0aW9uXSIsdj0iW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iLGI9IltvYmplY3QgTWFwXSIseD0iW29iamVjdCBOdW1iZXJdIix3PSJbb2JqZWN0IE9iamVjdF0iLFM9IltvYmplY3QgUHJvbWlzZV0iLE09IltvYmplY3QgUmVnRXhwXSIsRT0iW29iamVjdCBTZXRdIixUPSJbb2JqZWN0IFN0cmluZ10iLEM9IltvYmplY3QgU3ltYm9sXSIsQT0iW29iamVjdCBXZWFrTWFwXSIsaz0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLEw9IltvYmplY3QgRGF0YVZpZXddIixQPSJbb2JqZWN0IEZsb2F0MzJBcnJheV0iLE49IltvYmplY3QgRmxvYXQ2NEFycmF5XSIsST0iW29iamVjdCBJbnQ4QXJyYXldIixPPSJbb2JqZWN0IEludDE2QXJyYXldIixSPSJbb2JqZWN0IEludDMyQXJyYXldIix6PSJbb2JqZWN0IFVpbnQ4QXJyYXldIixEPSJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSIsQj0iW29iamVjdCBVaW50MTZBcnJheV0iLEg9IltvYmplY3QgVWludDMyQXJyYXldIixGPS9cYl9fcCBcKz0gJyc7L2csVj0vXGIoX19wIFwrPSkgJycgXCsvZyxVPS8oX19lXCguKj9cKXxcYl9fdFwpKSBcK1xuJyc7L2csaj0vJig/OmFtcHxsdHxndHxxdW90fCMzOSk7L2csRz0vWyY8PiInXS9nLFc9UmVnRXhwKGouc291cmNlKSxxPVJlZ0V4cChHLnNvdXJjZSksWT0vPCUtKFtcc1xTXSs/KSU+L2csWD0vPCUoW1xzXFNdKz8pJT4vZywkPS88JT0oW1xzXFNdKz8pJT4vZyxLPS9cLnxcWyg/OlteW1xdXSp8KFsiJ10pKD86KD8hXDEpW15cXF18XFwuKSo/XDEpXF0vLFo9L15cdyokLyxKPS9bXi5bXF1dK3xcWyg/OigtP1xkKyg/OlwuXGQrKT8pfChbIiddKSgoPzooPyFcMilbXlxcXXxcXC4pKj8pXDIpXF18KD89KD86XC58XFtcXSkoPzpcLnxcW1xdfCQpKS9nLFE9L1tcXF4kLiorPygpW1xde318XS9nLHR0PVJlZ0V4cChRLnNvdXJjZSksZXQ9L15ccysvLG50PS9ccy8saXQ9L1x7KD86XG5cL1wqIFxbd3JhcHBlZCB3aXRoIC4rXF0gXCpcLyk/XG4/LyxydD0vXHtcblwvXCogXFt3cmFwcGVkIHdpdGggKC4rKVxdIFwqLyxvdD0vLD8gJiAvLGF0PS9bXlx4MDAtXHgyZlx4M2EtXHg0MFx4NWItXHg2MFx4N2ItXHg3Zl0rL2csc3Q9L1soKT0se31cW1xdXC9cc10vLGx0PS9cXChcXCk/L2csY3Q9L1wkXHsoW15cXH1dKig/OlxcLlteXFx9XSopKilcfS9nLHV0PS9cdyokLyxodD0vXlstK10weFswLTlhLWZdKyQvaSxkdD0vXjBiWzAxXSskL2kscHQ9L15cW29iamVjdCAuKz9Db25zdHJ1Y3RvclxdJC8sZnQ9L14wb1swLTddKyQvaSxtdD0vXig/OjB8WzEtOV1cZCopJC8sZ3Q9L1tceGMwLVx4ZDZceGQ4LVx4ZjZceGY4LVx4ZmZcdTAxMDAtXHUwMTdmXS9nLF90PS8oJF4pLyx5dD0vWydcblxyXHUyMDI4XHUyMDI5XFxdL2csdnQ9IlxcdTAzMDAtXFx1MDM2ZlxcdWZlMjAtXFx1ZmUyZlxcdTIwZDAtXFx1MjBmZiIsYnQ9ImEtelxceGRmLVxceGY2XFx4ZjgtXFx4ZmYiLHh0PSJBLVpcXHhjMC1cXHhkNlxceGQ4LVxceGRlIix3dD0iXFx4YWNcXHhiMVxceGQ3XFx4ZjdcXHgwMC1cXHgyZlxceDNhLVxceDQwXFx4NWItXFx4NjBcXHg3Yi1cXHhiZlxcdTIwMDAtXFx1MjA2ZiBcXHRcXHgwYlxcZlxceGEwXFx1ZmVmZlxcblxcclxcdTIwMjhcXHUyMDI5XFx1MTY4MFxcdTE4MGVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzXFx1MjAwNFxcdTIwMDVcXHUyMDA2XFx1MjAwN1xcdTIwMDhcXHUyMDA5XFx1MjAwYVxcdTIwMmZcXHUyMDVmXFx1MzAwMCIsU3Q9IlsiK3d0KyJdIixNdD0iWyIrdnQrIl0iLEV0PSJcXGQrIixUdD0iWyIrYnQrIl0iLEN0PSJbXlxcdWQ4MDAtXFx1ZGZmZiIrd3QrRXQrIlxcdTI3MDAtXFx1MjdiZiIrYnQreHQrIl0iLEF0PSJcXHVkODNjW1xcdWRmZmItXFx1ZGZmZl0iLGt0PSJbXlxcdWQ4MDAtXFx1ZGZmZl0iLEx0PSIoPzpcXHVkODNjW1xcdWRkZTYtXFx1ZGRmZl0pezJ9IixQdD0iW1xcdWQ4MDAtXFx1ZGJmZl1bXFx1ZGMwMC1cXHVkZmZmXSIsTnQ9IlsiK3h0KyJdIixJdD0iKD86IitUdCsifCIrQ3QrIikiLE90PSIoPzoiK050KyJ8IitDdCsiKSIsUnQ9Iig/Olsn4oCZXSg/OmR8bGx8bXxyZXxzfHR8dmUpKT8iLHp0PSIoPzpbJ+KAmV0oPzpEfExMfE18UkV8U3xUfFZFKSk/IixEdD0iKD86IitNdCsifCIrQXQrIik/IixCdD0iW1xcdWZlMGVcXHVmZTBmXT8iLEh0PUJ0K0R0KyIoPzpcXHUyMDBkKD86Iitba3QsTHQsUHRdLmpvaW4oInwiKSsiKSIrQnQrRHQrIikqIixGdD0iKD86IitbIltcXHUyNzAwLVxcdTI3YmZdIixMdCxQdF0uam9pbigifCIpKyIpIitIdCxWdD0iKD86Iitba3QrTXQrIj8iLE10LEx0LFB0LCJbXFx1ZDgwMC1cXHVkZmZmXSJdLmpvaW4oInwiKSsiKSIsVXQ9UmVnRXhwKCJbJ+KAmV0iLCJnIiksanQ9UmVnRXhwKE10LCJnIiksR3Q9UmVnRXhwKEF0KyIoPz0iK0F0KyIpfCIrVnQrSHQsImciKSxXdD1SZWdFeHAoW050KyI/IitUdCsiKyIrUnQrIig/PSIrW1N0LE50LCIkIl0uam9pbigifCIpKyIpIixPdCsiKyIrenQrIig/PSIrW1N0LE50K0l0LCIkIl0uam9pbigifCIpKyIpIixOdCsiPyIrSXQrIisiK1J0LE50KyIrIit6dCwiXFxkKig/OjFTVHwyTkR8M1JEfCg/IVsxMjNdKVxcZFRIKSg/PVxcYnxbYS16X10pIiwiXFxkKig/OjFzdHwybmR8M3JkfCg/IVsxMjNdKVxcZHRoKSg/PVxcYnxbQS1aX10pIixFdCxGdF0uam9pbigifCIpLCJnIikscXQ9UmVnRXhwKCJbXFx1MjAwZFxcdWQ4MDAtXFx1ZGZmZiIrdnQrIlxcdWZlMGVcXHVmZTBmXSIpLFl0PS9bYS16XVtBLVpdfFtBLVpdezJ9W2Etel18WzAtOV1bYS16QS1aXXxbYS16QS1aXVswLTldfFteYS16QS1aMC05IF0vLFh0PVsiQXJyYXkiLCJCdWZmZXIiLCJEYXRhVmlldyIsIkRhdGUiLCJFcnJvciIsIkZsb2F0MzJBcnJheSIsIkZsb2F0NjRBcnJheSIsIkZ1bmN0aW9uIiwiSW50OEFycmF5IiwiSW50MTZBcnJheSIsIkludDMyQXJyYXkiLCJNYXAiLCJNYXRoIiwiT2JqZWN0IiwiUHJvbWlzZSIsIlJlZ0V4cCIsIlNldCIsIlN0cmluZyIsIlN5bWJvbCIsIlR5cGVFcnJvciIsIlVpbnQ4QXJyYXkiLCJVaW50OENsYW1wZWRBcnJheSIsIlVpbnQxNkFycmF5IiwiVWludDMyQXJyYXkiLCJXZWFrTWFwIiwiXyIsImNsZWFyVGltZW91dCIsImlzRmluaXRlIiwicGFyc2VJbnQiLCJzZXRUaW1lb3V0Il0sJHQ9LTEsS3Q9e307S3RbUF09S3RbTl09S3RbSV09S3RbT109S3RbUl09S3Rbel09S3RbRF09S3RbQl09S3RbSF09ITAsS3RbcF09S3RbZl09S3Rba109S3RbbV09S3RbTF09S3RbZ109S3RbX109S3RbeV09S3RbYl09S3RbeF09S3Rbd109S3RbTV09S3RbRV09S3RbVF09S3RbQV09ITE7dmFyIFp0PXt9O1p0W3BdPVp0W2ZdPVp0W2tdPVp0W0xdPVp0W21dPVp0W2ddPVp0W1BdPVp0W05dPVp0W0ldPVp0W09dPVp0W1JdPVp0W2JdPVp0W3hdPVp0W3ddPVp0W01dPVp0W0VdPVp0W1RdPVp0W0NdPVp0W3pdPVp0W0RdPVp0W0JdPVp0W0hdPSEwLFp0W19dPVp0W3ldPVp0W0FdPSExO3ZhciBKdD17IlxcIjoiXFwiLCInIjoiJyIsIlxuIjoibiIsIlxyIjoiciIsIlx1MjAyOCI6InUyMDI4IiwiXHUyMDI5IjoidTIwMjkifSxRdD1wYXJzZUZsb2F0LHRlPXBhcnNlSW50LGVlPSJvYmplY3QiPT10eXBlb2YgdmUmJnZlJiZ2ZS5PYmplY3Q9PT1PYmplY3QmJnZlLG5lPSJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGYsaWU9ZWV8fG5lfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpLHJlPWUmJiFlLm5vZGVUeXBlJiZlLG9lPXJlJiZ0JiYhdC5ub2RlVHlwZSYmdCxhZT1vZSYmb2UuZXhwb3J0cz09PXJlLHNlPWFlJiZlZS5wcm9jZXNzLGxlPShmdW5jdGlvbigpe3RyeXtyZXR1cm4gb2UmJm9lLnJlcXVpcmUmJm9lLnJlcXVpcmUoInV0aWwiKS50eXBlc3x8c2UmJnNlLmJpbmRpbmcmJnNlLmJpbmRpbmcoInV0aWwiKX1jYXRjaCh0KXt9fSkoKSxjZT1sZSYmbGUuaXNBcnJheUJ1ZmZlcix1ZT1sZSYmbGUuaXNEYXRlLGhlPWxlJiZsZS5pc01hcCxkZT1sZSYmbGUuaXNSZWdFeHAscGU9bGUmJmxlLmlzU2V0LGZlPWxlJiZsZS5pc1R5cGVkQXJyYXk7ZnVuY3Rpb24gbWUodCxlLG4pe3N3aXRjaChuLmxlbmd0aCl7Y2FzZSAwOnJldHVybiB0LmNhbGwoZSk7Y2FzZSAxOnJldHVybiB0LmNhbGwoZSxuWzBdKTtjYXNlIDI6cmV0dXJuIHQuY2FsbChlLG5bMF0sblsxXSk7Y2FzZSAzOnJldHVybiB0LmNhbGwoZSxuWzBdLG5bMV0sblsyXSl9cmV0dXJuIHQuYXBwbHkoZSxuKX1mdW5jdGlvbiBnZSh0LGUsbixpKXtmb3IodmFyIHI9LTEsbz1udWxsPT10PzA6dC5sZW5ndGg7KytyPG87KXt2YXIgYT10W3JdO2UoaSxhLG4oYSksdCl9cmV0dXJuIGl9ZnVuY3Rpb24gX2UodCxlKXtmb3IodmFyIG49LTEsaT1udWxsPT10PzA6dC5sZW5ndGg7KytuPGkmJiExIT09ZSh0W25dLG4sdCk7KTtyZXR1cm4gdH1mdW5jdGlvbiB5ZSh0LGUpe2Zvcih2YXIgbj1udWxsPT10PzA6dC5sZW5ndGg7bi0tJiYhMSE9PWUodFtuXSxuLHQpOyk7cmV0dXJuIHR9ZnVuY3Rpb24gYmUodCxlKXtmb3IodmFyIG49LTEsaT1udWxsPT10PzA6dC5sZW5ndGg7KytuPGk7KWlmKCFlKHRbbl0sbix0KSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiB4ZSh0LGUpe2Zvcih2YXIgbj0tMSxpPW51bGw9PXQ/MDp0Lmxlbmd0aCxyPTAsbz1bXTsrK248aTspe3ZhciBhPXRbbl07ZShhLG4sdCkmJihvW3IrK109YSl9cmV0dXJuIG99ZnVuY3Rpb24gd2UodCxlKXtyZXR1cm4hKG51bGw9PXR8fCF0Lmxlbmd0aCkmJk5lKHQsZSwwKT4tMX1mdW5jdGlvbiBTZSh0LGUsbil7Zm9yKHZhciBpPS0xLHI9bnVsbD09dD8wOnQubGVuZ3RoOysraTxyOylpZihuKGUsdFtpXSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gTWUodCxlKXtmb3IodmFyIG49LTEsaT1udWxsPT10PzA6dC5sZW5ndGgscj1BcnJheShpKTsrK248aTspcltuXT1lKHRbbl0sbix0KTtyZXR1cm4gcn1mdW5jdGlvbiBFZSh0LGUpe2Zvcih2YXIgbj0tMSxpPWUubGVuZ3RoLHI9dC5sZW5ndGg7KytuPGk7KXRbcituXT1lW25dO3JldHVybiB0fWZ1bmN0aW9uIFRlKHQsZSxuLGkpe3ZhciByPS0xLG89bnVsbD09dD8wOnQubGVuZ3RoO2ZvcihpJiZvJiYobj10Wysrcl0pOysrcjxvOyluPWUobix0W3JdLHIsdCk7cmV0dXJuIG59ZnVuY3Rpb24gQ2UodCxlLG4saSl7dmFyIHI9bnVsbD09dD8wOnQubGVuZ3RoO2ZvcihpJiZyJiYobj10Wy0tcl0pO3ItLTspbj1lKG4sdFtyXSxyLHQpO3JldHVybiBufWZ1bmN0aW9uIEFlKHQsZSl7Zm9yKHZhciBuPS0xLGk9bnVsbD09dD8wOnQubGVuZ3RoOysrbjxpOylpZihlKHRbbl0sbix0KSlyZXR1cm4hMDtyZXR1cm4hMX12YXIga2U9emUoImxlbmd0aCIpO2Z1bmN0aW9uIExlKHQsZSxuKXt2YXIgaTtyZXR1cm4gbih0LChmdW5jdGlvbih0LG4scil7aWYoZSh0LG4scikpcmV0dXJuIGk9biwhMX0pKSxpfWZ1bmN0aW9uIFBlKHQsZSxuLGkpe2Zvcih2YXIgcj10Lmxlbmd0aCxvPW4rKGk/MTotMSk7aT9vLS06KytvPHI7KWlmKGUodFtvXSxvLHQpKXJldHVybiBvO3JldHVybi0xfWZ1bmN0aW9uIE5lKHQsZSxuKXtyZXR1cm4gZT09ZT8oZnVuY3Rpb24gaSh0LGUsbil7Zm9yKHZhciBpPW4tMSxyPXQubGVuZ3RoOysraTxyOylpZih0W2ldPT09ZSlyZXR1cm4gaTtyZXR1cm4tMX0pKHQsZSxuKTpQZSh0LE9lLG4pfWZ1bmN0aW9uIEllKHQsZSxuLGkpe2Zvcih2YXIgcj1uLTEsbz10Lmxlbmd0aDsrK3I8bzspaWYoaSh0W3JdLGUpKXJldHVybiByO3JldHVybi0xfWZ1bmN0aW9uIE9lKHQpe3JldHVybiB0IT10fWZ1bmN0aW9uIFJlKHQsZSl7dmFyIG49bnVsbD09dD8wOnQubGVuZ3RoO3JldHVybiBuP0hlKHQsZSkvbjp1fWZ1bmN0aW9uIHplKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT9uOmVbdF19fWZ1bmN0aW9uIERlKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09dD9uOnRbZV19fWZ1bmN0aW9uIEJlKHQsZSxuLGkscil7cmV0dXJuIHIodCwoZnVuY3Rpb24odCxyLG8pe249aT8oaT0hMSx0KTplKG4sdCxyLG8pfSkpLG59ZnVuY3Rpb24gSGUodCxlKXtmb3IodmFyIGkscj0tMSxvPXQubGVuZ3RoOysrcjxvOyl7dmFyIGE9ZSh0W3JdKTthIT09biYmKGk9aT09PW4/YTppK2EpfXJldHVybiBpfWZ1bmN0aW9uIEZlKHQsZSl7Zm9yKHZhciBuPS0xLGk9QXJyYXkodCk7KytuPHQ7KWlbbl09ZShuKTtyZXR1cm4gaX1mdW5jdGlvbiBWZSh0KXtyZXR1cm4gdD90LnNsaWNlKDAsYW4odCkrMSkucmVwbGFjZShldCwiIik6dH1mdW5jdGlvbiBVZSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSl9fWZ1bmN0aW9uIGplKHQsZSl7cmV0dXJuIE1lKGUsKGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSkpfWZ1bmN0aW9uIEdlKHQsZSl7cmV0dXJuIHQuaGFzKGUpfWZ1bmN0aW9uIFdlKHQsZSl7Zm9yKHZhciBuPS0xLGk9dC5sZW5ndGg7KytuPGkmJk5lKGUsdFtuXSwwKT4tMTspO3JldHVybiBufWZ1bmN0aW9uIHFlKHQsZSl7Zm9yKHZhciBuPXQubGVuZ3RoO24tLSYmTmUoZSx0W25dLDApPi0xOyk7cmV0dXJuIG59ZnVuY3Rpb24gWWUodCxlKXtmb3IodmFyIG49dC5sZW5ndGgsaT0wO24tLTspdFtuXT09PWUmJisraTtyZXR1cm4gaX12YXIgWGU9RGUoeyLDgCI6IkEiLCLDgSI6IkEiLCLDgiI6IkEiLCLDgyI6IkEiLCLDhCI6IkEiLCLDhSI6IkEiLCLDoCI6ImEiLCLDoSI6ImEiLCLDoiI6ImEiLCLDoyI6ImEiLCLDpCI6ImEiLCLDpSI6ImEiLCLDhyI6IkMiLCLDpyI6ImMiLCLDkCI6IkQiLCLDsCI6ImQiLCLDiCI6IkUiLCLDiSI6IkUiLCLDiiI6IkUiLCLDiyI6IkUiLCLDqCI6ImUiLCLDqSI6ImUiLCLDqiI6ImUiLCLDqyI6ImUiLCLDjCI6IkkiLCLDjSI6IkkiLCLDjiI6IkkiLCLDjyI6IkkiLCLDrCI6ImkiLCLDrSI6ImkiLCLDriI6ImkiLCLDryI6ImkiLCLDkSI6Ik4iLCLDsSI6Im4iLCLDkiI6Ik8iLCLDkyI6Ik8iLCLDlCI6Ik8iLCLDlSI6Ik8iLCLDliI6Ik8iLCLDmCI6Ik8iLCLDsiI6Im8iLCLDsyI6Im8iLCLDtCI6Im8iLCLDtSI6Im8iLCLDtiI6Im8iLCLDuCI6Im8iLCLDmSI6IlUiLCLDmiI6IlUiLCLDmyI6IlUiLCLDnCI6IlUiLCLDuSI6InUiLCLDuiI6InUiLCLDuyI6InUiLCLDvCI6InUiLCLDnSI6IlkiLCLDvSI6InkiLCLDvyI6InkiLCLDhiI6IkFlIiwiw6YiOiJhZSIsIsOeIjoiVGgiLCLDviI6InRoIiwiw58iOiJzcyIsIsSAIjoiQSIsIsSCIjoiQSIsIsSEIjoiQSIsIsSBIjoiYSIsIsSDIjoiYSIsIsSFIjoiYSIsIsSGIjoiQyIsIsSIIjoiQyIsIsSKIjoiQyIsIsSMIjoiQyIsIsSHIjoiYyIsIsSJIjoiYyIsIsSLIjoiYyIsIsSNIjoiYyIsIsSOIjoiRCIsIsSQIjoiRCIsIsSPIjoiZCIsIsSRIjoiZCIsIsSSIjoiRSIsIsSUIjoiRSIsIsSWIjoiRSIsIsSYIjoiRSIsIsSaIjoiRSIsIsSTIjoiZSIsIsSVIjoiZSIsIsSXIjoiZSIsIsSZIjoiZSIsIsSbIjoiZSIsIsScIjoiRyIsIsSeIjoiRyIsIsSgIjoiRyIsIsSiIjoiRyIsIsSdIjoiZyIsIsSfIjoiZyIsIsShIjoiZyIsIsSjIjoiZyIsIsSkIjoiSCIsIsSmIjoiSCIsIsSlIjoiaCIsIsSnIjoiaCIsIsSoIjoiSSIsIsSqIjoiSSIsIsSsIjoiSSIsIsSuIjoiSSIsIsSwIjoiSSIsIsSpIjoiaSIsIsSrIjoiaSIsIsStIjoiaSIsIsSvIjoiaSIsIsSxIjoiaSIsIsS0IjoiSiIsIsS1IjoiaiIsIsS2IjoiSyIsIsS3IjoiayIsIsS4IjoiayIsIsS5IjoiTCIsIsS7IjoiTCIsIsS9IjoiTCIsIsS/IjoiTCIsIsWBIjoiTCIsIsS6IjoibCIsIsS8IjoibCIsIsS+IjoibCIsIsWAIjoibCIsIsWCIjoibCIsIsWDIjoiTiIsIsWFIjoiTiIsIsWHIjoiTiIsIsWKIjoiTiIsIsWEIjoibiIsIsWGIjoibiIsIsWIIjoibiIsIsWLIjoibiIsIsWMIjoiTyIsIsWOIjoiTyIsIsWQIjoiTyIsIsWNIjoibyIsIsWPIjoibyIsIsWRIjoibyIsIsWUIjoiUiIsIsWWIjoiUiIsIsWYIjoiUiIsIsWVIjoiciIsIsWXIjoiciIsIsWZIjoiciIsIsWaIjoiUyIsIsWcIjoiUyIsIsWeIjoiUyIsIsWgIjoiUyIsIsWbIjoicyIsIsWdIjoicyIsIsWfIjoicyIsIsWhIjoicyIsIsWiIjoiVCIsIsWkIjoiVCIsIsWmIjoiVCIsIsWjIjoidCIsIsWlIjoidCIsIsWnIjoidCIsIsWoIjoiVSIsIsWqIjoiVSIsIsWsIjoiVSIsIsWuIjoiVSIsIsWwIjoiVSIsIsWyIjoiVSIsIsWpIjoidSIsIsWrIjoidSIsIsWtIjoidSIsIsWvIjoidSIsIsWxIjoidSIsIsWzIjoidSIsIsW0IjoiVyIsIsW1IjoidyIsIsW2IjoiWSIsIsW3IjoieSIsIsW4IjoiWSIsIsW5IjoiWiIsIsW7IjoiWiIsIsW9IjoiWiIsIsW6IjoieiIsIsW8IjoieiIsIsW+IjoieiIsIsSyIjoiSUoiLCLEsyI6ImlqIiwixZIiOiJPZSIsIsWTIjoib2UiLCLFiSI6IiduIiwixb8iOiJzIn0pLCRlPURlKHsiJiI6IiZhbXA7IiwiPCI6IiZsdDsiLCI+IjoiJmd0OyIsJyInOiImcXVvdDsiLCInIjoiJiMzOTsifSk7ZnVuY3Rpb24gS2UodCl7cmV0dXJuIlxcIitKdFt0XX1mdW5jdGlvbiBaZSh0KXtyZXR1cm4gcXQudGVzdCh0KX1mdW5jdGlvbiBKZSh0KXt2YXIgZT0tMSxuPUFycmF5KHQuc2l6ZSk7cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24odCxpKXtuWysrZV09W2ksdF19KSksbn1mdW5jdGlvbiBRZSh0LGUpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdChlKG4pKX19ZnVuY3Rpb24gdG4odCxlKXtmb3IodmFyIG49LTEsaT10Lmxlbmd0aCxyPTAsYT1bXTsrK248aTspe3ZhciBzPXRbbl07cyE9PWUmJnMhPT1vfHwodFtuXT1vLGFbcisrXT1uKX1yZXR1cm4gYX1mdW5jdGlvbiBlbih0KXt2YXIgZT0tMSxuPUFycmF5KHQuc2l6ZSk7cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7blsrK2VdPXR9KSksbn1mdW5jdGlvbiBubih0KXt2YXIgZT0tMSxuPUFycmF5KHQuc2l6ZSk7cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7blsrK2VdPVt0LHRdfSkpLG59ZnVuY3Rpb24gcm4odCl7cmV0dXJuIFplKHQpPyhmdW5jdGlvbiBlKHQpe2Zvcih2YXIgZT1HdC5sYXN0SW5kZXg9MDtHdC50ZXN0KHQpOykrK2U7cmV0dXJuIGV9KSh0KTprZSh0KX1mdW5jdGlvbiBvbih0KXtyZXR1cm4gWmUodCk/KGZ1bmN0aW9uIGUodCl7cmV0dXJuIHQubWF0Y2goR3QpfHxbXX0pKHQpOihmdW5jdGlvbiBuKHQpe3JldHVybiB0LnNwbGl0KCIiKX0pKHQpfWZ1bmN0aW9uIGFuKHQpe2Zvcih2YXIgZT10Lmxlbmd0aDtlLS0mJm50LnRlc3QodC5jaGFyQXQoZSkpOyk7cmV0dXJuIGV9dmFyIHNuPURlKHsiJmFtcDsiOiImIiwiJmx0OyI6IjwiLCImZ3Q7IjoiPiIsIiZxdW90OyI6JyInLCImIzM5OyI6IicifSksbG49KGZ1bmN0aW9uIHQoZSl7dmFyIG50LHZ0PShlPW51bGw9PWU/aWU6bG4uZGVmYXVsdHMoaWUuT2JqZWN0KCksZSxsbi5waWNrKGllLFh0KSkpLkFycmF5LGJ0PWUuRGF0ZSx4dD1lLkVycm9yLHd0PWUuRnVuY3Rpb24sU3Q9ZS5NYXRoLE10PWUuT2JqZWN0LEV0PWUuUmVnRXhwLFR0PWUuU3RyaW5nLEN0PWUuVHlwZUVycm9yLEF0PXZ0LnByb3RvdHlwZSxrdD1NdC5wcm90b3R5cGUsTHQ9ZVsiX19jb3JlLWpzX3NoYXJlZF9fIl0sUHQ9d3QucHJvdG90eXBlLnRvU3RyaW5nLE50PWt0Lmhhc093blByb3BlcnR5LEl0PTAsT3Q9KG50PS9bXi5dKyQvLmV4ZWMoTHQmJkx0LmtleXMmJkx0LmtleXMuSUVfUFJPVE98fCIiKSk/IlN5bWJvbChzcmMpXzEuIitudDoiIixSdD1rdC50b1N0cmluZyx6dD1QdC5jYWxsKE10KSxEdD1pZS5fLEJ0PUV0KCJeIitQdC5jYWxsKE50KS5yZXBsYWNlKFEsIlxcJCYiKS5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcKCl8IGZvciAuKz8oPz1cXFxdKS9nLCIkMS4qPyIpKyIkIiksSHQ9YWU/ZS5CdWZmZXI6bixGdD1lLlN5bWJvbCxWdD1lLlVpbnQ4QXJyYXksR3Q9SHQ/SHQuYWxsb2NVbnNhZmU6bixxdD1RZShNdC5nZXRQcm90b3R5cGVPZixNdCksSnQ9TXQuY3JlYXRlLGVlPWt0LnByb3BlcnR5SXNFbnVtZXJhYmxlLG5lPUF0LnNwbGljZSxyZT1GdD9GdC5pc0NvbmNhdFNwcmVhZGFibGU6bixvZT1GdD9GdC5pdGVyYXRvcjpuLHNlPUZ0P0Z0LnRvU3RyaW5nVGFnOm4sbGU9KGZ1bmN0aW9uKCl7dHJ5e3ZhciB0PVBvKE10LCJkZWZpbmVQcm9wZXJ0eSIpO3JldHVybiB0KHt9LCIiLHt9KSx0fWNhdGNoKHQpe319KSgpLHZlPWUuY2xlYXJUaW1lb3V0IT09aWUuY2xlYXJUaW1lb3V0JiZlLmNsZWFyVGltZW91dCxrZT1idCYmYnQubm93IT09aWUuRGF0ZS5ub3cmJmJ0Lm5vdyxEZT1lLnNldFRpbWVvdXQhPT1pZS5zZXRUaW1lb3V0JiZlLnNldFRpbWVvdXQsY249U3QuY2VpbCx1bj1TdC5mbG9vcixobj1NdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsZG49SHQ/SHQuaXNCdWZmZXI6bixwbj1lLmlzRmluaXRlLGZuPUF0LmpvaW4sbW49UWUoTXQua2V5cyxNdCksZ249U3QubWF4LF9uPVN0Lm1pbix5bj1idC5ub3csdm49ZS5wYXJzZUludCxibj1TdC5yYW5kb20seG49QXQucmV2ZXJzZSx3bj1QbyhlLCJEYXRhVmlldyIpLFNuPVBvKGUsIk1hcCIpLE1uPVBvKGUsIlByb21pc2UiKSxFbj1QbyhlLCJTZXQiKSxUbj1QbyhlLCJXZWFrTWFwIiksQ249UG8oTXQsImNyZWF0ZSIpLEFuPVRuJiZuZXcgVG4sa249e30sTG49b2Eod24pLFBuPW9hKFNuKSxObj1vYShNbiksSW49b2EoRW4pLE9uPW9hKFRuKSxSbj1GdD9GdC5wcm90b3R5cGU6bix6bj1Sbj9Sbi52YWx1ZU9mOm4sRG49Um4/Um4udG9TdHJpbmc6bjtmdW5jdGlvbiBCbih0KXtpZihNcyh0KSYmIWhzKHQpJiYhKHQgaW5zdGFuY2VvZiBVbikpe2lmKHQgaW5zdGFuY2VvZiBWbilyZXR1cm4gdDtpZihOdC5jYWxsKHQsIl9fd3JhcHBlZF9fIikpcmV0dXJuIGFhKHQpfXJldHVybiBuZXcgVm4odCl9dmFyIEhuPShmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKCFTcyhlKSlyZXR1cm57fTtpZihKdClyZXR1cm4gSnQoZSk7dC5wcm90b3R5cGU9ZTt2YXIgaT1uZXcgdDtyZXR1cm4gdC5wcm90b3R5cGU9bixpfX0pKCk7ZnVuY3Rpb24gRm4oKXt9ZnVuY3Rpb24gVm4odCxlKXt0aGlzLl9fd3JhcHBlZF9fPXQsdGhpcy5fX2FjdGlvbnNfXz1bXSx0aGlzLl9fY2hhaW5fXz0hIWUsdGhpcy5fX2luZGV4X189MCx0aGlzLl9fdmFsdWVzX189bn1mdW5jdGlvbiBVbih0KXt0aGlzLl9fd3JhcHBlZF9fPXQsdGhpcy5fX2FjdGlvbnNfXz1bXSx0aGlzLl9fZGlyX189MSx0aGlzLl9fZmlsdGVyZWRfXz0hMSx0aGlzLl9faXRlcmF0ZWVzX189W10sdGhpcy5fX3Rha2VDb3VudF9fPWgsdGhpcy5fX3ZpZXdzX189W119ZnVuY3Rpb24gam4odCl7dmFyIGU9LTEsbj1udWxsPT10PzA6dC5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2U8bjspe3ZhciBpPXRbZV07dGhpcy5zZXQoaVswXSxpWzFdKX19ZnVuY3Rpb24gR24odCl7dmFyIGU9LTEsbj1udWxsPT10PzA6dC5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2U8bjspe3ZhciBpPXRbZV07dGhpcy5zZXQoaVswXSxpWzFdKX19ZnVuY3Rpb24gV24odCl7dmFyIGU9LTEsbj1udWxsPT10PzA6dC5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2U8bjspe3ZhciBpPXRbZV07dGhpcy5zZXQoaVswXSxpWzFdKX19ZnVuY3Rpb24gcW4odCl7dmFyIGU9LTEsbj1udWxsPT10PzA6dC5sZW5ndGg7Zm9yKHRoaXMuX19kYXRhX189bmV3IFduOysrZTxuOyl0aGlzLmFkZCh0W2VdKX1mdW5jdGlvbiBZbih0KXt2YXIgZT10aGlzLl9fZGF0YV9fPW5ldyBHbih0KTt0aGlzLnNpemU9ZS5zaXplfWZ1bmN0aW9uIFhuKHQsZSl7dmFyIG49aHModCksaT0hbiYmdXModCkscj0hbiYmIWkmJmdzKHQpLG89IW4mJiFpJiYhciYmUnModCksYT1ufHxpfHxyfHxvLHM9YT9GZSh0Lmxlbmd0aCxUdCk6W10sbD1zLmxlbmd0aDtmb3IodmFyIGMgaW4gdCkhZSYmIU50LmNhbGwodCxjKXx8YSYmKCJsZW5ndGgiPT1jfHxyJiYoIm9mZnNldCI9PWN8fCJwYXJlbnQiPT1jKXx8byYmKCJidWZmZXIiPT1jfHwiYnl0ZUxlbmd0aCI9PWN8fCJieXRlT2Zmc2V0Ij09Yyl8fEJvKGMsbCkpfHxzLnB1c2goYyk7cmV0dXJuIHN9ZnVuY3Rpb24gJG4odCl7dmFyIGU9dC5sZW5ndGg7cmV0dXJuIGU/dFtwcigwLGUtMSldOm59ZnVuY3Rpb24gS24odCxlKXtyZXR1cm4gZWEoWHIodCksb2koZSwwLHQubGVuZ3RoKSl9ZnVuY3Rpb24gWm4odCl7cmV0dXJuIGVhKFhyKHQpKX1mdW5jdGlvbiBKbih0LGUsaSl7KGkhPT1uJiYhc3ModFtlXSxpKXx8aT09PW4mJiEoZSBpbiB0KSkmJmlpKHQsZSxpKX1mdW5jdGlvbiBRbih0LGUsaSl7dmFyIHI9dFtlXTtOdC5jYWxsKHQsZSkmJnNzKHIsaSkmJihpIT09bnx8ZSBpbiB0KXx8aWkodCxlLGkpfWZ1bmN0aW9uIHRpKHQsZSl7Zm9yKHZhciBuPXQubGVuZ3RoO24tLTspaWYoc3ModFtuXVswXSxlKSlyZXR1cm4gbjtyZXR1cm4tMX1mdW5jdGlvbiBlaSh0LGUsbixpKXtyZXR1cm4gTmkodCwoZnVuY3Rpb24odCxyLG8pe2UoaSx0LG4odCksbyl9KSksaX1mdW5jdGlvbiBuaSh0LGUpe3JldHVybiB0JiYkcihlLHJsKGUpLHQpfWZ1bmN0aW9uIGlpKHQsZSxuKXsiX19wcm90b19fIj09ZSYmbGU/bGUodCxlLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpuLHdyaXRhYmxlOiEwfSk6dFtlXT1ufWZ1bmN0aW9uIHJpKHQsZSl7Zm9yKHZhciBpPS0xLHI9ZS5sZW5ndGgsbz12dChyKSxhPW51bGw9PXQ7KytpPHI7KW9baV09YT9uOlFzKHQsZVtpXSk7cmV0dXJuIG99ZnVuY3Rpb24gb2kodCxlLGkpe3JldHVybiB0PT10JiYoaSE9PW4mJih0PXQ8PWk/dDppKSxlIT09biYmKHQ9dD49ZT90OmUpKSx0fWZ1bmN0aW9uIGFpKHQsZSxpLHIsbyxhKXt2YXIgcyxsPTEmZSxjPTImZSx1PTQmZTtpZihpJiYocz1vP2kodCxyLG8sYSk6aSh0KSkscyE9PW4pcmV0dXJuIHM7aWYoIVNzKHQpKXJldHVybiB0O3ZhciBoPWhzKHQpO2lmKGgpe2lmKHM9KGZ1bmN0aW9uIGQodCl7dmFyIGU9dC5sZW5ndGgsbj1uZXcgdC5jb25zdHJ1Y3RvcihlKTtyZXR1cm4gZSYmInN0cmluZyI9PXR5cGVvZiB0WzBdJiZOdC5jYWxsKHQsImluZGV4IikmJihuLmluZGV4PXQuaW5kZXgsbi5pbnB1dD10LmlucHV0KSxufSkodCksIWwpcmV0dXJuIFhyKHQscyl9ZWxzZXt2YXIgZj1Pbyh0KSxfPWY9PXl8fGY9PXY7aWYoZ3ModCkpcmV0dXJuIFVyKHQsbCk7aWYoZj09d3x8Zj09cHx8XyYmIW8pe2lmKHM9Y3x8Xz97fTp6byh0KSwhbClyZXR1cm4gYz8oZnVuY3Rpb24gQSh0LGUpe3JldHVybiAkcih0LElvKHQpLGUpfSkodCwoZnVuY3Rpb24gUyh0LGUpe3JldHVybiB0JiYkcihlLG9sKGUpLHQpfSkocyx0KSk6KGZ1bmN0aW9uIEYodCxlKXtyZXR1cm4gJHIodCxObyh0KSxlKX0pKHQsbmkocyx0KSl9ZWxzZXtpZighWnRbZl0pcmV0dXJuIG8/dDp7fTtzPShmdW5jdGlvbiBWKHQsZSxuKXt2YXIgaT10LmNvbnN0cnVjdG9yO3N3aXRjaChlKXtjYXNlIGs6cmV0dXJuIGpyKHQpO2Nhc2UgbTpjYXNlIGc6cmV0dXJuIG5ldyBpKCt0KTtjYXNlIEw6cmV0dXJuKGZ1bmN0aW9uIHIodCxlKXt2YXIgbj1lP2pyKHQuYnVmZmVyKTp0LmJ1ZmZlcjtyZXR1cm4gbmV3IHQuY29uc3RydWN0b3Iobix0LmJ5dGVPZmZzZXQsdC5ieXRlTGVuZ3RoKX0pKHQsbik7Y2FzZSBQOmNhc2UgTjpjYXNlIEk6Y2FzZSBPOmNhc2UgUjpjYXNlIHo6Y2FzZSBEOmNhc2UgQjpjYXNlIEg6cmV0dXJuIEdyKHQsbik7Y2FzZSBiOnJldHVybiBuZXcgaTtjYXNlIHg6Y2FzZSBUOnJldHVybiBuZXcgaSh0KTtjYXNlIE06cmV0dXJuKGZ1bmN0aW9uIG8odCl7dmFyIGU9bmV3IHQuY29uc3RydWN0b3IodC5zb3VyY2UsdXQuZXhlYyh0KSk7cmV0dXJuIGUubGFzdEluZGV4PXQubGFzdEluZGV4LGV9KSh0KTtjYXNlIEU6cmV0dXJuIG5ldyBpO2Nhc2UgQzpyZXR1cm4oZnVuY3Rpb24gYSh0KXtyZXR1cm4gem4/TXQoem4uY2FsbCh0KSk6e319KSh0KX19KSh0LGYsbCl9fWF8fChhPW5ldyBZbik7dmFyIFU9YS5nZXQodCk7aWYoVSlyZXR1cm4gVTthLnNldCh0LHMpLFBzKHQpP3QuZm9yRWFjaCgoZnVuY3Rpb24obil7cy5hZGQoYWkobixlLGksbix0LGEpKX0pKTpFcyh0KSYmdC5mb3JFYWNoKChmdW5jdGlvbihuLHIpe3Muc2V0KHIsYWkobixlLGkscix0LGEpKX0pKTt2YXIgaj1oP246KHU/Yz9NbzpTbzpjP29sOnJsKSh0KTtyZXR1cm4gX2Uoanx8dCwoZnVuY3Rpb24obixyKXtqJiYobj10W3I9bl0pLFFuKHMscixhaShuLGUsaSxyLHQsYSkpfSkpLHN9ZnVuY3Rpb24gc2kodCxlLGkpe3ZhciByPWkubGVuZ3RoO2lmKG51bGw9PXQpcmV0dXJuIXI7Zm9yKHQ9TXQodCk7ci0tOyl7dmFyIG89aVtyXSxhPXRbb107aWYoYT09PW4mJiEobyBpbiB0KXx8ISgwLGVbb10pKGEpKXJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIGxpKHQsZSxyKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgQ3QoaSk7cmV0dXJuIFpvKChmdW5jdGlvbigpe3QuYXBwbHkobixyKX0pLGUpfWZ1bmN0aW9uIGNpKHQsZSxuLGkpe3ZhciByPS0xLG89d2UsYT0hMCxzPXQubGVuZ3RoLGw9W10sYz1lLmxlbmd0aDtpZighcylyZXR1cm4gbDtuJiYoZT1NZShlLFVlKG4pKSksaT8obz1TZSxhPSExKTplLmxlbmd0aD49MjAwJiYobz1HZSxhPSExLGU9bmV3IHFuKGUpKTt0OmZvcig7KytyPHM7KXt2YXIgdT10W3JdLGg9bnVsbD09bj91Om4odSk7aWYodT1pfHwwIT09dT91OjAsYSYmaD09aCl7Zm9yKHZhciBkPWM7ZC0tOylpZihlW2RdPT09aCljb250aW51ZSB0O2wucHVzaCh1KX1lbHNlIG8oZSxoLGkpfHxsLnB1c2godSl9cmV0dXJuIGx9Qm4udGVtcGxhdGVTZXR0aW5ncz17ZXNjYXBlOlksZXZhbHVhdGU6WCxpbnRlcnBvbGF0ZTokLHZhcmlhYmxlOiIiLGltcG9ydHM6e186Qm59fSwoQm4ucHJvdG90eXBlPUZuLnByb3RvdHlwZSkuY29uc3RydWN0b3I9Qm4sKFZuLnByb3RvdHlwZT1IbihGbi5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1WbiwoVW4ucHJvdG90eXBlPUhuKEZuLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPVVuLGpuLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbiB1aSgpe3RoaXMuX19kYXRhX189Q24/Q24obnVsbCk6e30sdGhpcy5zaXplPTB9LGpuLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24gaGkodCl7dmFyIGU9dGhpcy5oYXModCkmJmRlbGV0ZSB0aGlzLl9fZGF0YV9fW3RdO3JldHVybiB0aGlzLnNpemUtPWU/MTowLGV9LGpuLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24gZGkodCl7dmFyIGU9dGhpcy5fX2RhdGFfXztpZihDbil7dmFyIGk9ZVt0XTtyZXR1cm4gaT09PXI/bjppfXJldHVybiBOdC5jYWxsKGUsdCk/ZVt0XTpufSxqbi5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uIHBpKHQpe3ZhciBlPXRoaXMuX19kYXRhX187cmV0dXJuIENuP2VbdF0hPT1uOk50LmNhbGwoZSx0KX0sam4ucHJvdG90eXBlLnNldD1mdW5jdGlvbiBmaSh0LGUpe3ZhciBpPXRoaXMuX19kYXRhX187cmV0dXJuIHRoaXMuc2l6ZSs9dGhpcy5oYXModCk/MDoxLGlbdF09Q24mJmU9PT1uP3I6ZSx0aGlzfSxHbi5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24gbWkoKXt0aGlzLl9fZGF0YV9fPVtdLHRoaXMuc2l6ZT0wfSxHbi5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uIGdpKHQpe3ZhciBlPXRoaXMuX19kYXRhX18sbj10aShlLHQpO3JldHVybiEobjwwfHwobj09ZS5sZW5ndGgtMT9lLnBvcCgpOm5lLmNhbGwoZSxuLDEpLC0tdGhpcy5zaXplLDApKX0sR24ucHJvdG90eXBlLmdldD1mdW5jdGlvbiBfaSh0KXt2YXIgZT10aGlzLl9fZGF0YV9fLGk9dGkoZSx0KTtyZXR1cm4gaTwwP246ZVtpXVsxXX0sR24ucHJvdG90eXBlLmhhcz1mdW5jdGlvbiB5aSh0KXtyZXR1cm4gdGkodGhpcy5fX2RhdGFfXyx0KT4tMX0sR24ucHJvdG90eXBlLnNldD1mdW5jdGlvbiB2aSh0LGUpe3ZhciBuPXRoaXMuX19kYXRhX18saT10aShuLHQpO3JldHVybiBpPDA/KCsrdGhpcy5zaXplLG4ucHVzaChbdCxlXSkpOm5baV1bMV09ZSx0aGlzfSxXbi5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24gYmkoKXt0aGlzLnNpemU9MCx0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyBqbixtYXA6bmV3KFNufHxHbiksc3RyaW5nOm5ldyBqbn19LFduLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24geGkodCl7dmFyIGU9a28odGhpcyx0KS5kZWxldGUodCk7cmV0dXJuIHRoaXMuc2l6ZS09ZT8xOjAsZX0sV24ucHJvdG90eXBlLmdldD1mdW5jdGlvbiB3aSh0KXtyZXR1cm4ga28odGhpcyx0KS5nZXQodCl9LFduLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24gU2kodCl7cmV0dXJuIGtvKHRoaXMsdCkuaGFzKHQpfSxXbi5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uIE1pKHQsZSl7dmFyIG49a28odGhpcyx0KSxpPW4uc2l6ZTtyZXR1cm4gbi5zZXQodCxlKSx0aGlzLnNpemUrPW4uc2l6ZT09aT8wOjEsdGhpc30scW4ucHJvdG90eXBlLmFkZD1xbi5wcm90b3R5cGUucHVzaD1mdW5jdGlvbiBFaSh0KXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5zZXQodCxyKSx0aGlzfSxxbi5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uIFRpKHQpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyh0KX0sWW4ucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uIENpKCl7dGhpcy5fX2RhdGFfXz1uZXcgR24sdGhpcy5zaXplPTB9LFluLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24gQWkodCl7dmFyIGU9dGhpcy5fX2RhdGFfXyxuPWUuZGVsZXRlKHQpO3JldHVybiB0aGlzLnNpemU9ZS5zaXplLG59LFluLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24ga2kodCl7cmV0dXJuIHRoaXMuX19kYXRhX18uZ2V0KHQpfSxZbi5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uIExpKHQpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyh0KX0sWW4ucHJvdG90eXBlLnNldD1mdW5jdGlvbiBQaSh0LGUpe3ZhciBuPXRoaXMuX19kYXRhX187aWYobiBpbnN0YW5jZW9mIEduKXt2YXIgaT1uLl9fZGF0YV9fO2lmKCFTbnx8aS5sZW5ndGg8MTk5KXJldHVybiBpLnB1c2goW3QsZV0pLHRoaXMuc2l6ZT0rK24uc2l6ZSx0aGlzO249dGhpcy5fX2RhdGFfXz1uZXcgV24oaSl9cmV0dXJuIG4uc2V0KHQsZSksdGhpcy5zaXplPW4uc2l6ZSx0aGlzfTt2YXIgTmk9SnIoRmkpLElpPUpyKFZpLCEwKTtmdW5jdGlvbiBPaSh0LGUpe3ZhciBuPSEwO3JldHVybiBOaSh0LChmdW5jdGlvbih0LGkscil7cmV0dXJuIG49ISFlKHQsaSxyKX0pKSxufWZ1bmN0aW9uIFJpKHQsZSxpKXtmb3IodmFyIHI9LTEsbz10Lmxlbmd0aDsrK3I8bzspe3ZhciBhPXRbcl0scz1lKGEpO2lmKG51bGwhPXMmJihsPT09bj9zPT1zJiYhT3Mocyk6aShzLGwpKSl2YXIgbD1zLGM9YX1yZXR1cm4gY31mdW5jdGlvbiB6aSh0LGUpe3ZhciBuPVtdO3JldHVybiBOaSh0LChmdW5jdGlvbih0LGkscil7ZSh0LGkscikmJm4ucHVzaCh0KX0pKSxufWZ1bmN0aW9uIERpKHQsZSxuLGkscil7dmFyIG89LTEsYT10Lmxlbmd0aDtmb3Iobnx8KG49RG8pLHJ8fChyPVtdKTsrK288YTspe3ZhciBzPXRbb107ZT4wJiZuKHMpP2U+MT9EaShzLGUtMSxuLGkscik6RWUocixzKTppfHwocltyLmxlbmd0aF09cyl9cmV0dXJuIHJ9dmFyIEJpPVFyKCksSGk9UXIoITApO2Z1bmN0aW9uIEZpKHQsZSl7cmV0dXJuIHQmJkJpKHQsZSxybCl9ZnVuY3Rpb24gVmkodCxlKXtyZXR1cm4gdCYmSGkodCxlLHJsKX1mdW5jdGlvbiBVaSh0LGUpe3JldHVybiB4ZShlLChmdW5jdGlvbihlKXtyZXR1cm4gYnModFtlXSl9KSl9ZnVuY3Rpb24gamkodCxlKXtmb3IodmFyIGk9MCxyPShlPUJyKGUsdCkpLmxlbmd0aDtudWxsIT10JiZpPHI7KXQ9dFtyYShlW2krK10pXTtyZXR1cm4gaSYmaT09cj90Om59ZnVuY3Rpb24gR2kodCxlLG4pe3ZhciBpPWUodCk7cmV0dXJuIGhzKHQpP2k6RWUoaSxuKHQpKX1mdW5jdGlvbiBXaSh0KXtyZXR1cm4gbnVsbD09dD90PT09bj8iW29iamVjdCBVbmRlZmluZWRdIjoiW29iamVjdCBOdWxsXSI6c2UmJnNlIGluIE10KHQpPyhmdW5jdGlvbiBlKHQpe3ZhciBlPU50LmNhbGwodCxzZSksaT10W3NlXTt0cnl7dFtzZV09bjt2YXIgcj0hMH1jYXRjaCh0KXt9dmFyIG89UnQuY2FsbCh0KTtyZXR1cm4gciYmKGU/dFtzZV09aTpkZWxldGUgdFtzZV0pLG99KSh0KTooZnVuY3Rpb24gaSh0KXtyZXR1cm4gUnQuY2FsbCh0KX0pKHQpfWZ1bmN0aW9uIHFpKHQsZSl7cmV0dXJuIHQ+ZX1mdW5jdGlvbiBZaSh0LGUpe3JldHVybiBudWxsIT10JiZOdC5jYWxsKHQsZSl9ZnVuY3Rpb24gWGkodCxlKXtyZXR1cm4gbnVsbCE9dCYmZSBpbiBNdCh0KX1mdW5jdGlvbiAkaSh0LGUsaSl7Zm9yKHZhciByPWk/U2U6d2Usbz10WzBdLmxlbmd0aCxhPXQubGVuZ3RoLHM9YSxsPXZ0KGEpLGM9MS8wLHU9W107cy0tOyl7dmFyIGg9dFtzXTtzJiZlJiYoaD1NZShoLFVlKGUpKSksYz1fbihoLmxlbmd0aCxjKSxsW3NdPSFpJiYoZXx8bz49MTIwJiZoLmxlbmd0aD49MTIwKT9uZXcgcW4ocyYmaCk6bn1oPXRbMF07dmFyIGQ9LTEscD1sWzBdO3Q6Zm9yKDsrK2Q8byYmdS5sZW5ndGg8Yzspe3ZhciBmPWhbZF0sbT1lP2UoZik6ZjtpZihmPWl8fDAhPT1mP2Y6MCwhKHA/R2UocCxtKTpyKHUsbSxpKSkpe2ZvcihzPWE7LS1zOyl7dmFyIGc9bFtzXTtpZighKGc/R2UoZyxtKTpyKHRbc10sbSxpKSkpY29udGludWUgdH1wJiZwLnB1c2gobSksdS5wdXNoKGYpfX1yZXR1cm4gdX1mdW5jdGlvbiBLaSh0LGUsaSl7dmFyIHI9bnVsbD09KHQ9WW8odCxlPUJyKGUsdCkpKT90OnRbcmEoX2EoZSkpXTtyZXR1cm4gbnVsbD09cj9uOm1lKHIsdCxpKX1mdW5jdGlvbiBaaSh0KXtyZXR1cm4gTXModCkmJldpKHQpPT1wfWZ1bmN0aW9uIEppKHQsZSxpLHIsbyl7cmV0dXJuIHQ9PT1lfHwobnVsbD09dHx8bnVsbD09ZXx8IU1zKHQpJiYhTXMoZSk/dCE9dCYmZSE9ZTooZnVuY3Rpb24gYSh0LGUsaSxyLG8scyl7dmFyIGw9aHModCksYz1ocyhlKSx1PWw/ZjpPbyh0KSxoPWM/ZjpPbyhlKSxkPSh1PXU9PXA/dzp1KT09dyx5PShoPWg9PXA/dzpoKT09dyx2PXU9PWg7aWYodiYmZ3ModCkpe2lmKCFncyhlKSlyZXR1cm4hMTtsPSEwLGQ9ITF9aWYodiYmIWQpcmV0dXJuIHN8fChzPW5ldyBZbiksbHx8UnModCk/eG8odCxlLGkscixvLHMpOihmdW5jdGlvbiBTKHQsZSxuLGkscixvLGEpe3N3aXRjaChuKXtjYXNlIEw6aWYodC5ieXRlTGVuZ3RoIT1lLmJ5dGVMZW5ndGh8fHQuYnl0ZU9mZnNldCE9ZS5ieXRlT2Zmc2V0KXJldHVybiExO3Q9dC5idWZmZXIsZT1lLmJ1ZmZlcjtjYXNlIGs6cmV0dXJuISh0LmJ5dGVMZW5ndGghPWUuYnl0ZUxlbmd0aHx8IW8obmV3IFZ0KHQpLG5ldyBWdChlKSkpO2Nhc2UgbTpjYXNlIGc6Y2FzZSB4OnJldHVybiBzcygrdCwrZSk7Y2FzZSBfOnJldHVybiB0Lm5hbWU9PWUubmFtZSYmdC5tZXNzYWdlPT1lLm1lc3NhZ2U7Y2FzZSBNOmNhc2UgVDpyZXR1cm4gdD09ZSsiIjtjYXNlIGI6dmFyIHM9SmU7Y2FzZSBFOmlmKHN8fChzPWVuKSx0LnNpemUhPWUuc2l6ZSYmISgxJmkpKXJldHVybiExO3ZhciBsPWEuZ2V0KHQpO2lmKGwpcmV0dXJuIGw9PWU7aXw9MixhLnNldCh0LGUpO3ZhciBjPXhvKHModCkscyhlKSxpLHIsbyxhKTtyZXR1cm4gYS5kZWxldGUodCksYztjYXNlIEM6aWYoem4pcmV0dXJuIHpuLmNhbGwodCk9PXpuLmNhbGwoZSl9cmV0dXJuITF9KSh0LGUsdSxpLHIsbyxzKTtpZighKDEmaSkpe3ZhciBBPWQmJk50LmNhbGwodCwiX193cmFwcGVkX18iKSxQPXkmJk50LmNhbGwoZSwiX193cmFwcGVkX18iKTtpZihBfHxQKXt2YXIgTj1BP3QudmFsdWUoKTp0LEk9UD9lLnZhbHVlKCk6ZTtyZXR1cm4gc3x8KHM9bmV3IFluKSxvKE4sSSxpLHIscyl9fXJldHVybiEhdiYmKHN8fChzPW5ldyBZbiksKGZ1bmN0aW9uIE8odCxlLGkscixvLGEpe3ZhciBzPTEmaSxsPVNvKHQpLGM9bC5sZW5ndGg7aWYoYyE9U28oZSkubGVuZ3RoJiYhcylyZXR1cm4hMTtmb3IodmFyIHU9Yzt1LS07KXt2YXIgaD1sW3VdO2lmKCEocz9oIGluIGU6TnQuY2FsbChlLGgpKSlyZXR1cm4hMX12YXIgZD1hLmdldCh0KSxwPWEuZ2V0KGUpO2lmKGQmJnApcmV0dXJuIGQ9PWUmJnA9PXQ7dmFyIGY9ITA7YS5zZXQodCxlKSxhLnNldChlLHQpO2Zvcih2YXIgbT1zOysrdTxjOyl7dmFyIGc9dFtoPWxbdV1dLF89ZVtoXTtpZihyKXZhciB5PXM/cihfLGcsaCxlLHQsYSk6cihnLF8saCx0LGUsYSk7aWYoISh5PT09bj9nPT09X3x8byhnLF8saSxyLGEpOnkpKXtmPSExO2JyZWFrfW18fChtPSJjb25zdHJ1Y3RvciI9PWgpfWlmKGYmJiFtKXt2YXIgdj10LmNvbnN0cnVjdG9yLGI9ZS5jb25zdHJ1Y3Rvcjt2PT1ifHwhKCJjb25zdHJ1Y3RvciJpbiB0KXx8ISgiY29uc3RydWN0b3IiaW4gZSl8fCJmdW5jdGlvbiI9PXR5cGVvZiB2JiZ2IGluc3RhbmNlb2YgdiYmImZ1bmN0aW9uIj09dHlwZW9mIGImJmIgaW5zdGFuY2VvZiBifHwoZj0hMSl9cmV0dXJuIGEuZGVsZXRlKHQpLGEuZGVsZXRlKGUpLGZ9KSh0LGUsaSxyLG8scykpfSkodCxlLGkscixKaSxvKSl9ZnVuY3Rpb24gUWkodCxlLGkscil7dmFyIG89aS5sZW5ndGgsYT1vLHM9IXI7aWYobnVsbD09dClyZXR1cm4hYTtmb3IodD1NdCh0KTtvLS07KXt2YXIgbD1pW29dO2lmKHMmJmxbMl0/bFsxXSE9PXRbbFswXV06IShsWzBdaW4gdCkpcmV0dXJuITF9Zm9yKDsrK288YTspe3ZhciBjPShsPWlbb10pWzBdLHU9dFtjXSxoPWxbMV07aWYocyYmbFsyXSl7aWYodT09PW4mJiEoYyBpbiB0KSlyZXR1cm4hMX1lbHNle3ZhciBkPW5ldyBZbjtpZihyKXZhciBwPXIodSxoLGMsdCxlLGQpO2lmKCEocD09PW4/SmkoaCx1LDMscixkKTpwKSlyZXR1cm4hMX19cmV0dXJuITB9ZnVuY3Rpb24gdHIodCl7cmV0dXJuISghU3ModCl8fChmdW5jdGlvbiBlKHQpe3JldHVybiEhT3QmJk90IGluIHR9KSh0KSkmJihicyh0KT9CdDpwdCkudGVzdChvYSh0KSl9ZnVuY3Rpb24gZXIodCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpudWxsPT10P0xsOiJvYmplY3QiPT10eXBlb2YgdD9ocyh0KT9hcih0WzBdLHRbMV0pOm9yKHQpOkhsKHQpfWZ1bmN0aW9uIG5yKHQpe2lmKCFqbyh0KSlyZXR1cm4gbW4odCk7dmFyIGU9W107Zm9yKHZhciBuIGluIE10KHQpKU50LmNhbGwodCxuKSYmImNvbnN0cnVjdG9yIiE9biYmZS5wdXNoKG4pO3JldHVybiBlfWZ1bmN0aW9uIGlyKHQsZSl7cmV0dXJuIHQ8ZX1mdW5jdGlvbiBycih0LGUpe3ZhciBuPS0xLGk9ZnModCk/dnQodC5sZW5ndGgpOltdO3JldHVybiBOaSh0LChmdW5jdGlvbih0LHIsbyl7aVsrK25dPWUodCxyLG8pfSkpLGl9ZnVuY3Rpb24gb3IodCl7dmFyIGU9TG8odCk7cmV0dXJuIDE9PWUubGVuZ3RoJiZlWzBdWzJdP1dvKGVbMF1bMF0sZVswXVsxXSk6ZnVuY3Rpb24obil7cmV0dXJuIG49PT10fHxRaShuLHQsZSl9fWZ1bmN0aW9uIGFyKHQsZSl7cmV0dXJuIEZvKHQpJiZHbyhlKT9XbyhyYSh0KSxlKTpmdW5jdGlvbihpKXt2YXIgcj1RcyhpLHQpO3JldHVybiByPT09biYmcj09PWU/dGwoaSx0KTpKaShlLHIsMyl9fWZ1bmN0aW9uIHNyKHQsZSxpLHIsbyl7dCE9PWUmJkJpKGUsKGZ1bmN0aW9uKGEscyl7aWYob3x8KG89bmV3IFluKSxTcyhhKSkhKGZ1bmN0aW9uIGwodCxlLGkscixvLGEscyl7dmFyIGw9JG8odCxpKSxjPSRvKGUsaSksdT1zLmdldChjKTtpZih1KUpuKHQsaSx1KTtlbHNle3ZhciBoPWE/YShsLGMsaSsiIix0LGUscyk6bixkPWg9PT1uO2lmKGQpe3ZhciBwPWhzKGMpLGY9IXAmJmdzKGMpLG09IXAmJiFmJiZScyhjKTtoPWMscHx8Znx8bT9ocyhsKT9oPWw6bXMobCk/aD1YcihsKTpmPyhkPSExLGg9VXIoYywhMCkpOm0/KGQ9ITEsaD1HcihjLCEwKSk6aD1bXTpBcyhjKXx8dXMoYyk/KGg9bCx1cyhsKT9oPUdzKGwpOlNzKGwpJiYhYnMobCl8fChoPXpvKGMpKSk6ZD0hMX1kJiYocy5zZXQoYyxoKSxvKGgsYyxyLGEscykscy5kZWxldGUoYykpLEpuKHQsaSxoKX19KSh0LGUscyxpLHNyLHIsbyk7ZWxzZXt2YXIgYz1yP3IoJG8odCxzKSxhLHMrIiIsdCxlLG8pOm47Yz09PW4mJihjPWEpLEpuKHQscyxjKX19KSxvbCl9ZnVuY3Rpb24gbHIodCxlKXt2YXIgaT10Lmxlbmd0aDtpZihpKXJldHVybiBCbyhlKz1lPDA/aTowLGkpP3RbZV06bn1mdW5jdGlvbiBjcih0LGUsbil7ZT1lLmxlbmd0aD9NZShlLChmdW5jdGlvbih0KXtyZXR1cm4gaHModCk/ZnVuY3Rpb24oZSl7cmV0dXJuIGppKGUsMT09PXQubGVuZ3RoP3RbMF06dCl9OnR9KSk6W0xsXTt2YXIgaT0tMTtyZXR1cm4gZT1NZShlLFVlKEFvKCkpKSwoZnVuY3Rpb24gcih0LGUpe3ZhciBuPXQubGVuZ3RoO2Zvcih0LnNvcnQoZSk7bi0tOyl0W25dPXRbbl0udmFsdWU7cmV0dXJuIHR9KShycih0LChmdW5jdGlvbih0LG4scil7cmV0dXJue2NyaXRlcmlhOk1lKGUsKGZ1bmN0aW9uKGUpe3JldHVybiBlKHQpfSkpLGluZGV4OisraSx2YWx1ZTp0fX0pKSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZnVuY3Rpb24gaSh0LGUsbil7Zm9yKHZhciBpPS0xLHI9dC5jcml0ZXJpYSxvPWUuY3JpdGVyaWEsYT1yLmxlbmd0aCxzPW4ubGVuZ3RoOysraTxhOyl7dmFyIGw9V3IocltpXSxvW2ldKTtpZihsKXJldHVybiBpPj1zP2w6bCooImRlc2MiPT1uW2ldPy0xOjEpfXJldHVybiB0LmluZGV4LWUuaW5kZXh9KSh0LGUsbil9KSl9ZnVuY3Rpb24gdXIodCxlLG4pe2Zvcih2YXIgaT0tMSxyPWUubGVuZ3RoLG89e307KytpPHI7KXt2YXIgYT1lW2ldLHM9amkodCxhKTtuKHMsYSkmJnlyKG8sQnIoYSx0KSxzKX1yZXR1cm4gb31mdW5jdGlvbiBocih0LGUsbixpKXt2YXIgcj1pP0llOk5lLG89LTEsYT1lLmxlbmd0aCxzPXQ7Zm9yKHQ9PT1lJiYoZT1YcihlKSksbiYmKHM9TWUodCxVZShuKSkpOysrbzxhOylmb3IodmFyIGw9MCxjPWVbb10sdT1uP24oYyk6YzsobD1yKHMsdSxsLGkpKT4tMTspcyE9PXQmJm5lLmNhbGwocyxsLDEpLG5lLmNhbGwodCxsLDEpO3JldHVybiB0fWZ1bmN0aW9uIGRyKHQsZSl7Zm9yKHZhciBuPXQ/ZS5sZW5ndGg6MCxpPW4tMTtuLS07KXt2YXIgcj1lW25dO2lmKG49PWl8fHIhPT1vKXt2YXIgbz1yO0JvKHIpP25lLmNhbGwodCxyLDEpOkxyKHQscil9fXJldHVybiB0fWZ1bmN0aW9uIHByKHQsZSl7cmV0dXJuIHQrdW4oYm4oKSooZS10KzEpKX1mdW5jdGlvbiBmcih0LGUpe3ZhciBuPSIiO2lmKCF0fHxlPDF8fGU+YylyZXR1cm4gbjtkb3tlJTImJihuKz10KSwoZT11bihlLzIpKSYmKHQrPXQpfXdoaWxlKGUpO3JldHVybiBufWZ1bmN0aW9uIG1yKHQsZSl7cmV0dXJuIEpvKHFvKHQsZSxMbCksdCsiIil9ZnVuY3Rpb24gZ3IodCl7cmV0dXJuICRuKHBsKHQpKX1mdW5jdGlvbiBfcih0LGUpe3ZhciBuPXBsKHQpO3JldHVybiBlYShuLG9pKGUsMCxuLmxlbmd0aCkpfWZ1bmN0aW9uIHlyKHQsZSxpLHIpe2lmKCFTcyh0KSlyZXR1cm4gdDtmb3IodmFyIG89LTEsYT0oZT1CcihlLHQpKS5sZW5ndGgscz1hLTEsbD10O251bGwhPWwmJisrbzxhOyl7dmFyIGM9cmEoZVtvXSksdT1pO2lmKCJfX3Byb3RvX18iPT09Y3x8ImNvbnN0cnVjdG9yIj09PWN8fCJwcm90b3R5cGUiPT09YylyZXR1cm4gdDtpZihvIT1zKXt2YXIgaD1sW2NdOyh1PXI/cihoLGMsbCk6bik9PT1uJiYodT1TcyhoKT9oOkJvKGVbbysxXSk/W106e30pfVFuKGwsYyx1KSxsPWxbY119cmV0dXJuIHR9dmFyIHZyPUFuP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIEFuLnNldCh0LGUpLHR9OkxsLGJyPWxlP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIGxlKHQsInRvU3RyaW5nIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsdmFsdWU6Q2woZSksd3JpdGFibGU6ITB9KX06TGw7ZnVuY3Rpb24geHIodCl7cmV0dXJuIGVhKHBsKHQpKX1mdW5jdGlvbiB3cih0LGUsbil7dmFyIGk9LTEscj10Lmxlbmd0aDtlPDAmJihlPS1lPnI/MDpyK2UpLChuPW4+cj9yOm4pPDAmJihuKz1yKSxyPWU+bj8wOm4tZT4+PjAsZT4+Pj0wO2Zvcih2YXIgbz12dChyKTsrK2k8cjspb1tpXT10W2krZV07cmV0dXJuIG99ZnVuY3Rpb24gU3IodCxlKXt2YXIgbjtyZXR1cm4gTmkodCwoZnVuY3Rpb24odCxpLHIpe3JldHVybiEobj1lKHQsaSxyKSl9KSksISFufWZ1bmN0aW9uIE1yKHQsZSxuKXt2YXIgaT0wLHI9bnVsbD09dD9pOnQubGVuZ3RoO2lmKCJudW1iZXIiPT10eXBlb2YgZSYmZT09ZSYmcjw9MjE0NzQ4MzY0Nyl7Zm9yKDtpPHI7KXt2YXIgbz1pK3I+Pj4xLGE9dFtvXTtudWxsIT09YSYmIU9zKGEpJiYobj9hPD1lOmE8ZSk/aT1vKzE6cj1vfXJldHVybiByfXJldHVybiBFcih0LGUsTGwsbil9ZnVuY3Rpb24gRXIodCxlLGkscil7dmFyIG89MCxhPW51bGw9PXQ/MDp0Lmxlbmd0aDtpZigwPT09YSlyZXR1cm4gMDtmb3IodmFyIHM9KGU9aShlKSkhPWUsbD1udWxsPT09ZSxjPU9zKGUpLHU9ZT09PW47bzxhOyl7dmFyIGg9dW4oKG8rYSkvMiksZD1pKHRbaF0pLHA9ZCE9PW4sZj1udWxsPT09ZCxtPWQ9PWQsZz1PcyhkKTtpZihzKXZhciBfPXJ8fG07ZWxzZSBfPXU/bSYmKHJ8fHApOmw/bSYmcCYmKHJ8fCFmKTpjP20mJnAmJiFmJiYocnx8IWcpOiFmJiYhZyYmKHI/ZDw9ZTpkPGUpO18/bz1oKzE6YT1ofXJldHVybiBfbihhLDQyOTQ5NjcyOTQpfWZ1bmN0aW9uIFRyKHQsZSl7Zm9yKHZhciBuPS0xLGk9dC5sZW5ndGgscj0wLG89W107KytuPGk7KXt2YXIgYT10W25dLHM9ZT9lKGEpOmE7aWYoIW58fCFzcyhzLGwpKXt2YXIgbD1zO29bcisrXT0wPT09YT8wOmF9fXJldHVybiBvfWZ1bmN0aW9uIENyKHQpe3JldHVybiJudW1iZXIiPT10eXBlb2YgdD90Ok9zKHQpP3U6K3R9ZnVuY3Rpb24gQXIodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiB0O2lmKGhzKHQpKXJldHVybiBNZSh0LEFyKSsiIjtpZihPcyh0KSlyZXR1cm4gRG4/RG4uY2FsbCh0KToiIjt2YXIgZT10KyIiO3JldHVybiIwIj09ZSYmMS90PT0tMS8wPyItMCI6ZX1mdW5jdGlvbiBrcih0LGUsbil7dmFyIGk9LTEscj13ZSxvPXQubGVuZ3RoLGE9ITAscz1bXSxsPXM7aWYobilhPSExLHI9U2U7ZWxzZSBpZihvPj0yMDApe3ZhciBjPWU/bnVsbDptbyh0KTtpZihjKXJldHVybiBlbihjKTthPSExLHI9R2UsbD1uZXcgcW59ZWxzZSBsPWU/W106czt0OmZvcig7KytpPG87KXt2YXIgdT10W2ldLGg9ZT9lKHUpOnU7aWYodT1ufHwwIT09dT91OjAsYSYmaD09aCl7Zm9yKHZhciBkPWwubGVuZ3RoO2QtLTspaWYobFtkXT09PWgpY29udGludWUgdDtlJiZsLnB1c2goaCkscy5wdXNoKHUpfWVsc2UgcihsLGgsbil8fChsIT09cyYmbC5wdXNoKGgpLHMucHVzaCh1KSl9cmV0dXJuIHN9ZnVuY3Rpb24gTHIodCxlKXtyZXR1cm4gbnVsbD09KHQ9WW8odCxlPUJyKGUsdCkpKXx8ZGVsZXRlIHRbcmEoX2EoZSkpXX1mdW5jdGlvbiBQcih0LGUsbixpKXtyZXR1cm4geXIodCxlLG4oamkodCxlKSksaSl9ZnVuY3Rpb24gTnIodCxlLG4saSl7Zm9yKHZhciByPXQubGVuZ3RoLG89aT9yOi0xOyhpP28tLTorK288cikmJmUodFtvXSxvLHQpOyk7cmV0dXJuIG4/d3IodCxpPzA6byxpP28rMTpyKTp3cih0LGk/bysxOjAsaT9yOm8pfWZ1bmN0aW9uIElyKHQsZSl7dmFyIG49dDtyZXR1cm4gbiBpbnN0YW5jZW9mIFVuJiYobj1uLnZhbHVlKCkpLFRlKGUsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZnVuYy5hcHBseShlLnRoaXNBcmcsRWUoW3RdLGUuYXJncykpfSksbil9ZnVuY3Rpb24gT3IodCxlLG4pe3ZhciBpPXQubGVuZ3RoO2lmKGk8MilyZXR1cm4gaT9rcih0WzBdKTpbXTtmb3IodmFyIHI9LTEsbz12dChpKTsrK3I8aTspZm9yKHZhciBhPXRbcl0scz0tMTsrK3M8aTspcyE9ciYmKG9bcl09Y2kob1tyXXx8YSx0W3NdLGUsbikpO3JldHVybiBrcihEaShvLDEpLGUsbil9ZnVuY3Rpb24gUnIodCxlLGkpe2Zvcih2YXIgcj0tMSxvPXQubGVuZ3RoLGE9ZS5sZW5ndGgscz17fTsrK3I8bzspaShzLHRbcl0scjxhP2Vbcl06bik7cmV0dXJuIHN9ZnVuY3Rpb24genIodCl7cmV0dXJuIG1zKHQpP3Q6W119ZnVuY3Rpb24gRHIodCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpMbH1mdW5jdGlvbiBCcih0LGUpe3JldHVybiBocyh0KT90OkZvKHQsZSk/W3RdOm5hKFdzKHQpKX12YXIgSHI9bXI7ZnVuY3Rpb24gRnIodCxlLGkpe3ZhciByPXQubGVuZ3RoO3JldHVybiBpPWk9PT1uP3I6aSwhZSYmaT49cj90OndyKHQsZSxpKX12YXIgVnI9dmV8fGZ1bmN0aW9uKHQpe3JldHVybiBpZS5jbGVhclRpbWVvdXQodCl9O2Z1bmN0aW9uIFVyKHQsZSl7aWYoZSlyZXR1cm4gdC5zbGljZSgpO3ZhciBuPXQubGVuZ3RoLGk9R3Q/R3Qobik6bmV3IHQuY29uc3RydWN0b3Iobik7cmV0dXJuIHQuY29weShpKSxpfWZ1bmN0aW9uIGpyKHQpe3ZhciBlPW5ldyB0LmNvbnN0cnVjdG9yKHQuYnl0ZUxlbmd0aCk7cmV0dXJuIG5ldyBWdChlKS5zZXQobmV3IFZ0KHQpKSxlfWZ1bmN0aW9uIEdyKHQsZSl7dmFyIG49ZT9qcih0LmJ1ZmZlcik6dC5idWZmZXI7cmV0dXJuIG5ldyB0LmNvbnN0cnVjdG9yKG4sdC5ieXRlT2Zmc2V0LHQubGVuZ3RoKX1mdW5jdGlvbiBXcih0LGUpe2lmKHQhPT1lKXt2YXIgaT10IT09bixyPW51bGw9PT10LG89dD09dCxhPU9zKHQpLHM9ZSE9PW4sbD1udWxsPT09ZSxjPWU9PWUsdT1PcyhlKTtpZighbCYmIXUmJiFhJiZ0PmV8fGEmJnMmJmMmJiFsJiYhdXx8ciYmcyYmY3x8IWkmJmN8fCFvKXJldHVybiAxO2lmKCFyJiYhYSYmIXUmJnQ8ZXx8dSYmaSYmbyYmIXImJiFhfHxsJiZpJiZvfHwhcyYmb3x8IWMpcmV0dXJuLTF9cmV0dXJuIDB9ZnVuY3Rpb24gcXIodCxlLG4saSl7Zm9yKHZhciByPS0xLG89dC5sZW5ndGgsYT1uLmxlbmd0aCxzPS0xLGw9ZS5sZW5ndGgsYz1nbihvLWEsMCksdT12dChsK2MpLGg9IWk7KytzPGw7KXVbc109ZVtzXTtmb3IoOysrcjxhOykoaHx8cjxvKSYmKHVbbltyXV09dFtyXSk7Zm9yKDtjLS07KXVbcysrXT10W3IrK107cmV0dXJuIHV9ZnVuY3Rpb24gWXIodCxlLG4saSl7Zm9yKHZhciByPS0xLG89dC5sZW5ndGgsYT0tMSxzPW4ubGVuZ3RoLGw9LTEsYz1lLmxlbmd0aCx1PWduKG8tcywwKSxoPXZ0KHUrYyksZD0haTsrK3I8dTspaFtyXT10W3JdO2Zvcih2YXIgcD1yOysrbDxjOyloW3ArbF09ZVtsXTtmb3IoOysrYTxzOykoZHx8cjxvKSYmKGhbcCtuW2FdXT10W3IrK10pO3JldHVybiBofWZ1bmN0aW9uIFhyKHQsZSl7dmFyIG49LTEsaT10Lmxlbmd0aDtmb3IoZXx8KGU9dnQoaSkpOysrbjxpOyllW25dPXRbbl07cmV0dXJuIGV9ZnVuY3Rpb24gJHIodCxlLGkscil7dmFyIG89IWk7aXx8KGk9e30pO2Zvcih2YXIgYT0tMSxzPWUubGVuZ3RoOysrYTxzOyl7dmFyIGw9ZVthXSxjPXI/cihpW2xdLHRbbF0sbCxpLHQpOm47Yz09PW4mJihjPXRbbF0pLG8/aWkoaSxsLGMpOlFuKGksbCxjKX1yZXR1cm4gaX1mdW5jdGlvbiBLcih0LGUpe3JldHVybiBmdW5jdGlvbihuLGkpe3ZhciByPWhzKG4pP2dlOmVpLG89ZT9lKCk6e307cmV0dXJuIHIobix0LEFvKGksMiksbyl9fWZ1bmN0aW9uIFpyKHQpe3JldHVybiBtcigoZnVuY3Rpb24oZSxpKXt2YXIgcj0tMSxvPWkubGVuZ3RoLGE9bz4xP2lbby0xXTpuLHM9bz4yP2lbMl06bjtmb3IoYT10Lmxlbmd0aD4zJiYiZnVuY3Rpb24iPT10eXBlb2YgYT8oby0tLGEpOm4scyYmSG8oaVswXSxpWzFdLHMpJiYoYT1vPDM/bjphLG89MSksZT1NdChlKTsrK3I8bzspe3ZhciBsPWlbcl07bCYmdChlLGwscixhKX1yZXR1cm4gZX0pKX1mdW5jdGlvbiBKcih0LGUpe3JldHVybiBmdW5jdGlvbihuLGkpe2lmKG51bGw9PW4pcmV0dXJuIG47aWYoIWZzKG4pKXJldHVybiB0KG4saSk7Zm9yKHZhciByPW4ubGVuZ3RoLG89ZT9yOi0xLGE9TXQobik7KGU/by0tOisrbzxyKSYmITEhPT1pKGFbb10sbyxhKTspO3JldHVybiBufX1mdW5jdGlvbiBRcih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuLGkpe2Zvcih2YXIgcj0tMSxvPU10KGUpLGE9aShlKSxzPWEubGVuZ3RoO3MtLTspe3ZhciBsPWFbdD9zOisrcl07aWYoITE9PT1uKG9bbF0sbCxvKSlicmVha31yZXR1cm4gZX19ZnVuY3Rpb24gdG8odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBpPVplKGU9V3MoZSkpP29uKGUpOm4scj1pP2lbMF06ZS5jaGFyQXQoMCksbz1pP0ZyKGksMSkuam9pbigiIik6ZS5zbGljZSgxKTtyZXR1cm4gclt0XSgpK299fWZ1bmN0aW9uIGVvKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gVGUoTWwoZ2woZSkucmVwbGFjZShVdCwiIikpLHQsIiIpfX1mdW5jdGlvbiBubyh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHM7c3dpdGNoKGUubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIG5ldyB0O2Nhc2UgMTpyZXR1cm4gbmV3IHQoZVswXSk7Y2FzZSAyOnJldHVybiBuZXcgdChlWzBdLGVbMV0pO2Nhc2UgMzpyZXR1cm4gbmV3IHQoZVswXSxlWzFdLGVbMl0pO2Nhc2UgNDpyZXR1cm4gbmV3IHQoZVswXSxlWzFdLGVbMl0sZVszXSk7Y2FzZSA1OnJldHVybiBuZXcgdChlWzBdLGVbMV0sZVsyXSxlWzNdLGVbNF0pO2Nhc2UgNjpyZXR1cm4gbmV3IHQoZVswXSxlWzFdLGVbMl0sZVszXSxlWzRdLGVbNV0pO2Nhc2UgNzpyZXR1cm4gbmV3IHQoZVswXSxlWzFdLGVbMl0sZVszXSxlWzRdLGVbNV0sZVs2XSl9dmFyIG49SG4odC5wcm90b3R5cGUpLGk9dC5hcHBseShuLGUpO3JldHVybiBTcyhpKT9pOm59fWZ1bmN0aW9uIGlvKHQpe3JldHVybiBmdW5jdGlvbihlLGkscil7dmFyIG89TXQoZSk7aWYoIWZzKGUpKXt2YXIgYT1BbyhpLDMpO2U9cmwoZSksaT1mdW5jdGlvbih0KXtyZXR1cm4gYShvW3RdLHQsbyl9fXZhciBzPXQoZSxpLHIpO3JldHVybiBzPi0xP29bYT9lW3NdOnNdOm59fWZ1bmN0aW9uIHJvKHQpe3JldHVybiB3bygoZnVuY3Rpb24oZSl7dmFyIHI9ZS5sZW5ndGgsbz1yLGE9Vm4ucHJvdG90eXBlLnRocnU7Zm9yKHQmJmUucmV2ZXJzZSgpO28tLTspe3ZhciBzPWVbb107aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHMpdGhyb3cgbmV3IEN0KGkpO2lmKGEmJiFsJiYid3JhcHBlciI9PVRvKHMpKXZhciBsPW5ldyBWbihbXSwhMCl9Zm9yKG89bD9vOnI7KytvPHI7KXt2YXIgYz1UbyhzPWVbb10pLHU9IndyYXBwZXIiPT1jP0VvKHMpOm47bD11JiZWbyh1WzBdKSYmNDI0PT11WzFdJiYhdVs0XS5sZW5ndGgmJjE9PXVbOV0/bFtUbyh1WzBdKV0uYXBwbHkobCx1WzNdKToxPT1zLmxlbmd0aCYmVm8ocyk/bFtjXSgpOmwudGhydShzKX1yZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMsbj10WzBdO2lmKGwmJjE9PXQubGVuZ3RoJiZocyhuKSlyZXR1cm4gbC5wbGFudChuKS52YWx1ZSgpO2Zvcih2YXIgaT0wLG89cj9lW2ldLmFwcGx5KHRoaXMsdCk6bjsrK2k8cjspbz1lW2ldLmNhbGwodGhpcyxvKTtyZXR1cm4gb319KSl9ZnVuY3Rpb24gb28odCxlLGkscixvLGEsbCxjLHUsaCl7dmFyIGQ9ZSZzLHA9MSZlLGY9MiZlLG09MjQmZSxnPTUxMiZlLF89Zj9uOm5vKHQpO3JldHVybiBmdW5jdGlvbiBuKCl7Zm9yKHZhciBzPWFyZ3VtZW50cy5sZW5ndGgseT12dChzKSx2PXM7di0tOyl5W3ZdPWFyZ3VtZW50c1t2XTtpZihtKXZhciBiPUNvKG4pLHg9WWUoeSxiKTtpZihyJiYoeT1xcih5LHIsbyxtKSksYSYmKHk9WXIoeSxhLGwsbSkpLHMtPXgsbSYmczxoKXt2YXIgdz10bih5LGIpO3JldHVybiBwbyh0LGUsb28sbi5wbGFjZWhvbGRlcixpLHksdyxjLHUsaC1zKX12YXIgUz1wP2k6dGhpcyxNPWY/U1t0XTp0O3JldHVybiBzPXkubGVuZ3RoLGM/eT1Ybyh5LGMpOmcmJnM+MSYmeS5yZXZlcnNlKCksZCYmdTxzJiYoeS5sZW5ndGg9dSksdGhpcyYmdGhpcyE9PWllJiZ0aGlzIGluc3RhbmNlb2YgbiYmKE09X3x8bm8oTSkpLE0uYXBwbHkoUyx5KX19ZnVuY3Rpb24gYW8odCxlKXtyZXR1cm4gZnVuY3Rpb24obixpKXtyZXR1cm4oZnVuY3Rpb24gcih0LGUsbixpKXtyZXR1cm4gRmkodCwoZnVuY3Rpb24odCxyLG8pe2UoaSxuKHQpLHIsbyl9KSksaX0pKG4sdCxlKGkpLHt9KX19ZnVuY3Rpb24gc28odCxlKXtyZXR1cm4gZnVuY3Rpb24oaSxyKXt2YXIgbztpZihpPT09biYmcj09PW4pcmV0dXJuIGU7aWYoaSE9PW4mJihvPWkpLHIhPT1uKXtpZihvPT09bilyZXR1cm4gcjsic3RyaW5nIj09dHlwZW9mIGl8fCJzdHJpbmciPT10eXBlb2Ygcj8oaT1BcihpKSxyPUFyKHIpKTooaT1DcihpKSxyPUNyKHIpKSxvPXQoaSxyKX1yZXR1cm4gb319ZnVuY3Rpb24gbG8odCl7cmV0dXJuIHdvKChmdW5jdGlvbihlKXtyZXR1cm4gZT1NZShlLFVlKEFvKCkpKSxtcigoZnVuY3Rpb24obil7dmFyIGk9dGhpcztyZXR1cm4gdChlLChmdW5jdGlvbih0KXtyZXR1cm4gbWUodCxpLG4pfSkpfSkpfSkpfWZ1bmN0aW9uIGNvKHQsZSl7dmFyIGk9KGU9ZT09PW4/IiAiOkFyKGUpKS5sZW5ndGg7aWYoaTwyKXJldHVybiBpP2ZyKGUsdCk6ZTt2YXIgcj1mcihlLGNuKHQvcm4oZSkpKTtyZXR1cm4gWmUoZSk/RnIob24ociksMCx0KS5qb2luKCIiKTpyLnNsaWNlKDAsdCl9ZnVuY3Rpb24gdW8odCl7cmV0dXJuIGZ1bmN0aW9uKGUsaSxyKXtyZXR1cm4gciYmIm51bWJlciIhPXR5cGVvZiByJiZIbyhlLGkscikmJihpPXI9biksZT1GcyhlKSxpPT09bj8oaT1lLGU9MCk6aT1GcyhpKSwoZnVuY3Rpb24gbyh0LGUsbixpKXtmb3IodmFyIHI9LTEsbz1nbihjbigoZS10KS8obnx8MSkpLDApLGE9dnQobyk7by0tOylhW2k/bzorK3JdPXQsdCs9bjtyZXR1cm4gYX0pKGUsaSxyPXI9PT1uP2U8aT8xOi0xOkZzKHIpLHQpfX1mdW5jdGlvbiBobyh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGUmJiJzdHJpbmciPT10eXBlb2Ygbnx8KGU9anMoZSksbj1qcyhuKSksdChlLG4pfX1mdW5jdGlvbiBwbyh0LGUsaSxyLG8scyxsLGMsdSxoKXt2YXIgZD04JmU7ZXw9ZD9hOjY0LDQmKGUmPX4oZD82NDphKSl8fChlJj0tNCk7dmFyIHA9W3QsZSxvLGQ/czpuLGQ/bDpuLGQ/bjpzLGQ/bjpsLGMsdSxoXSxmPWkuYXBwbHkobixwKTtyZXR1cm4gVm8odCkmJktvKGYscCksZi5wbGFjZWhvbGRlcj1yLFFvKGYsdCxlKX1mdW5jdGlvbiBmbyh0KXt2YXIgZT1TdFt0XTtyZXR1cm4gZnVuY3Rpb24odCxuKXtpZih0PWpzKHQpLChuPW51bGw9PW4/MDpfbihWcyhuKSwyOTIpKSYmcG4odCkpe3ZhciBpPShXcyh0KSsiZSIpLnNwbGl0KCJlIik7cmV0dXJuKygoaT0oV3MoZShpWzBdKyJlIisoK2lbMV0rbikpKSsiZSIpLnNwbGl0KCJlIikpWzBdKyJlIisoK2lbMV0tbikpfXJldHVybiBlKHQpfX12YXIgbW89RW4mJjEvZW4obmV3IEVuKFssLTBdKSlbMV09PWw/ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBFbih0KX06Umw7ZnVuY3Rpb24gZ28odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPU9vKGUpO3JldHVybiBuPT1iP0plKGUpOm49PUU/bm4oZSk6KGZ1bmN0aW9uIGkodCxlKXtyZXR1cm4gTWUoZSwoZnVuY3Rpb24oZSl7cmV0dXJuW2UsdFtlXV19KSl9KShlLHQoZSkpfX1mdW5jdGlvbiBfbyh0LGUscixsLGMsdSxoLGQpe3ZhciBwPTImZTtpZighcCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEN0KGkpO3ZhciBmPWw/bC5sZW5ndGg6MDtpZihmfHwoZSY9LTk3LGw9Yz1uKSxoPWg9PT1uP2g6Z24oVnMoaCksMCksZD1kPT09bj9kOlZzKGQpLGYtPWM/Yy5sZW5ndGg6MCw2NCZlKXt2YXIgbT1sLGc9YztsPWM9bn12YXIgXz1wP246RW8odCkseT1bdCxlLHIsbCxjLG0sZyx1LGgsZF07aWYoXyYmKGZ1bmN0aW9uIHYodCxlKXt2YXIgbj10WzFdLGk9ZVsxXSxyPW58aTtpZighKHI8MTMxfHxpPT1zJiY4PT1ufHxpPT1zJiYyNTY9PW4mJnRbN10ubGVuZ3RoPD1lWzhdfHwzODQ9PWkmJmVbN10ubGVuZ3RoPD1lWzhdJiY4PT1uKSlyZXR1cm4gdDsxJmkmJih0WzJdPWVbMl0scnw9MSZuPzA6NCk7dmFyIGE9ZVszXTtpZihhKXt2YXIgbD10WzNdO3RbM109bD9xcihsLGEsZVs0XSk6YSx0WzRdPWw/dG4odFszXSxvKTplWzRdfShhPWVbNV0pJiYodFs1XT0obD10WzVdKT9ZcihsLGEsZVs2XSk6YSx0WzZdPWw/dG4odFs1XSxvKTplWzZdKSwoYT1lWzddKSYmKHRbN109YSksaSZzJiYodFs4XT1udWxsPT10WzhdP2VbOF06X24odFs4XSxlWzhdKSksbnVsbD09dFs5XSYmKHRbOV09ZVs5XSksdFswXT1lWzBdLHRbMV09cn0pKHksXyksdD15WzBdLGU9eVsxXSxyPXlbMl0sbD15WzNdLGM9eVs0XSwhKGQ9eVs5XT15WzldPT09bj9wPzA6dC5sZW5ndGg6Z24oeVs5XS1mLDApKSYmMjQmZSYmKGUmPS0yNSksZSYmMSE9ZSl3PTg9PWV8fDE2PT1lPyhmdW5jdGlvbiBiKHQsZSxpKXt2YXIgcj1ubyh0KTtyZXR1cm4gZnVuY3Rpb24gbygpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLHM9dnQoYSksbD1hLGM9Q28obyk7bC0tOylzW2xdPWFyZ3VtZW50c1tsXTt2YXIgdT1hPDMmJnNbMF0hPT1jJiZzW2EtMV0hPT1jP1tdOnRuKHMsYyk7cmV0dXJuKGEtPXUubGVuZ3RoKTxpP3BvKHQsZSxvbyxvLnBsYWNlaG9sZGVyLG4scyx1LG4sbixpLWEpOm1lKHRoaXMmJnRoaXMhPT1pZSYmdGhpcyBpbnN0YW5jZW9mIG8/cjp0LHRoaXMscyl9fSkodCxlLGQpOmUhPWEmJjMzIT1lfHxjLmxlbmd0aD9vby5hcHBseShuLHkpOihmdW5jdGlvbiB4KHQsZSxuLGkpe3ZhciByPTEmZSxvPW5vKHQpO3JldHVybiBmdW5jdGlvbiBlKCl7Zm9yKHZhciBhPS0xLHM9YXJndW1lbnRzLmxlbmd0aCxsPS0xLGM9aS5sZW5ndGgsdT12dChjK3MpLGg9dGhpcyYmdGhpcyE9PWllJiZ0aGlzIGluc3RhbmNlb2YgZT9vOnQ7KytsPGM7KXVbbF09aVtsXTtmb3IoO3MtLTspdVtsKytdPWFyZ3VtZW50c1srK2FdO3JldHVybiBtZShoLHI/bjp0aGlzLHUpfX0pKHQsZSxyLGwpO2Vsc2UgdmFyIHc9KGZ1bmN0aW9uIFModCxlLG4pe3ZhciBpPTEmZSxyPW5vKHQpO3JldHVybiBmdW5jdGlvbiBlKCl7cmV0dXJuKHRoaXMmJnRoaXMhPT1pZSYmdGhpcyBpbnN0YW5jZW9mIGU/cjp0KS5hcHBseShpP246dGhpcyxhcmd1bWVudHMpfX0pKHQsZSxyKTtyZXR1cm4gUW8oKF8/dnI6S28pKHcseSksdCxlKX1mdW5jdGlvbiB5byh0LGUsaSxyKXtyZXR1cm4gdD09PW58fHNzKHQsa3RbaV0pJiYhTnQuY2FsbChyLGkpP2U6dH1mdW5jdGlvbiB2byh0LGUsaSxyLG8sYSl7cmV0dXJuIFNzKHQpJiZTcyhlKSYmKGEuc2V0KGUsdCksc3IodCxlLG4sdm8sYSksYS5kZWxldGUoZSkpLHR9ZnVuY3Rpb24gYm8odCl7cmV0dXJuIEFzKHQpP246dH1mdW5jdGlvbiB4byh0LGUsaSxyLG8sYSl7dmFyIHM9MSZpLGw9dC5sZW5ndGgsYz1lLmxlbmd0aDtpZihsIT1jJiYhKHMmJmM+bCkpcmV0dXJuITE7dmFyIHU9YS5nZXQodCksaD1hLmdldChlKTtpZih1JiZoKXJldHVybiB1PT1lJiZoPT10O3ZhciBkPS0xLHA9ITAsZj0yJmk/bmV3IHFuOm47Zm9yKGEuc2V0KHQsZSksYS5zZXQoZSx0KTsrK2Q8bDspe3ZhciBtPXRbZF0sZz1lW2RdO2lmKHIpdmFyIF89cz9yKGcsbSxkLGUsdCxhKTpyKG0sZyxkLHQsZSxhKTtpZihfIT09bil7aWYoXyljb250aW51ZTtwPSExO2JyZWFrfWlmKGYpe2lmKCFBZShlLChmdW5jdGlvbih0LGUpe2lmKCFHZShmLGUpJiYobT09PXR8fG8obSx0LGkscixhKSkpcmV0dXJuIGYucHVzaChlKX0pKSl7cD0hMTticmVha319ZWxzZSBpZihtIT09ZyYmIW8obSxnLGkscixhKSl7cD0hMTticmVha319cmV0dXJuIGEuZGVsZXRlKHQpLGEuZGVsZXRlKGUpLHB9ZnVuY3Rpb24gd28odCl7cmV0dXJuIEpvKHFvKHQsbixkYSksdCsiIil9ZnVuY3Rpb24gU28odCl7cmV0dXJuIEdpKHQscmwsTm8pfWZ1bmN0aW9uIE1vKHQpe3JldHVybiBHaSh0LG9sLElvKX12YXIgRW89QW4/ZnVuY3Rpb24odCl7cmV0dXJuIEFuLmdldCh0KX06Umw7ZnVuY3Rpb24gVG8odCl7Zm9yKHZhciBlPXQubmFtZSsiIixuPWtuW2VdLGk9TnQuY2FsbChrbixlKT9uLmxlbmd0aDowO2ktLTspe3ZhciByPW5baV0sbz1yLmZ1bmM7aWYobnVsbD09b3x8bz09dClyZXR1cm4gci5uYW1lfXJldHVybiBlfWZ1bmN0aW9uIENvKHQpe3JldHVybihOdC5jYWxsKEJuLCJwbGFjZWhvbGRlciIpP0JuOnQpLnBsYWNlaG9sZGVyfWZ1bmN0aW9uIEFvKCl7dmFyIHQ9Qm4uaXRlcmF0ZWV8fFBsO3JldHVybiB0PXQ9PT1QbD9lcjp0LGFyZ3VtZW50cy5sZW5ndGg/dChhcmd1bWVudHNbMF0sYXJndW1lbnRzWzFdKTp0fWZ1bmN0aW9uIGtvKHQsZSl7dmFyIG49dC5fX2RhdGFfXztyZXR1cm4oZnVuY3Rpb24gaSh0KXt2YXIgZT10eXBlb2YgdDtyZXR1cm4ic3RyaW5nIj09ZXx8Im51bWJlciI9PWV8fCJzeW1ib2wiPT1lfHwiYm9vbGVhbiI9PWU/Il9fcHJvdG9fXyIhPT10Om51bGw9PT10fSkoZSk/blsic3RyaW5nIj09dHlwZW9mIGU/InN0cmluZyI6Imhhc2giXTpuLm1hcH1mdW5jdGlvbiBMbyh0KXtmb3IodmFyIGU9cmwodCksbj1lLmxlbmd0aDtuLS07KXt2YXIgaT1lW25dLHI9dFtpXTtlW25dPVtpLHIsR28ocildfXJldHVybiBlfWZ1bmN0aW9uIFBvKHQsZSl7dmFyIGk9KGZ1bmN0aW9uIHIodCxlKXtyZXR1cm4gbnVsbD09dD9uOnRbZV19KSh0LGUpO3JldHVybiB0cihpKT9pOm59dmFyIE5vPWhuP2Z1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P1tdOih0PU10KHQpLHhlKGhuKHQpLChmdW5jdGlvbihlKXtyZXR1cm4gZWUuY2FsbCh0LGUpfSkpKX06VWwsSW89aG4/ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdO3Q7KUVlKGUsTm8odCkpLHQ9cXQodCk7cmV0dXJuIGV9OlVsLE9vPVdpO2Z1bmN0aW9uIFJvKHQsZSxuKXtmb3IodmFyIGk9LTEscj0oZT1CcihlLHQpKS5sZW5ndGgsbz0hMTsrK2k8cjspe3ZhciBhPXJhKGVbaV0pO2lmKCEobz1udWxsIT10JiZuKHQsYSkpKWJyZWFrO3Q9dFthXX1yZXR1cm4gb3x8KytpIT1yP286ISEocj1udWxsPT10PzA6dC5sZW5ndGgpJiZ3cyhyKSYmQm8oYSxyKSYmKGhzKHQpfHx1cyh0KSl9ZnVuY3Rpb24gem8odCl7cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIHQuY29uc3RydWN0b3J8fGpvKHQpP3t9OkhuKHF0KHQpKX1mdW5jdGlvbiBEbyh0KXtyZXR1cm4gaHModCl8fHVzKHQpfHwhIShyZSYmdCYmdFtyZV0pfWZ1bmN0aW9uIEJvKHQsZSl7dmFyIG49dHlwZW9mIHQ7cmV0dXJuISEoZT1udWxsPT1lP2M6ZSkmJigibnVtYmVyIj09bnx8InN5bWJvbCIhPW4mJm10LnRlc3QodCkpJiZ0Pi0xJiZ0JTE9PTAmJnQ8ZX1mdW5jdGlvbiBIbyh0LGUsbil7aWYoIVNzKG4pKXJldHVybiExO3ZhciBpPXR5cGVvZiBlO3JldHVybiEhKCJudW1iZXIiPT1pP2ZzKG4pJiZCbyhlLG4ubGVuZ3RoKToic3RyaW5nIj09aSYmZSBpbiBuKSYmc3MobltlXSx0KX1mdW5jdGlvbiBGbyh0LGUpe2lmKGhzKHQpKXJldHVybiExO3ZhciBuPXR5cGVvZiB0O3JldHVybiEoIm51bWJlciIhPW4mJiJzeW1ib2wiIT1uJiYiYm9vbGVhbiIhPW4mJm51bGwhPXQmJiFPcyh0KSl8fFoudGVzdCh0KXx8IUsudGVzdCh0KXx8bnVsbCE9ZSYmdCBpbiBNdChlKX1mdW5jdGlvbiBWbyh0KXt2YXIgZT1Ubyh0KSxuPUJuW2VdO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBufHwhKGUgaW4gVW4ucHJvdG90eXBlKSlyZXR1cm4hMTtpZih0PT09bilyZXR1cm4hMDt2YXIgaT1FbyhuKTtyZXR1cm4hIWkmJnQ9PT1pWzBdfSh3biYmT28obmV3IHduKG5ldyBBcnJheUJ1ZmZlcigxKSkpIT1MfHxTbiYmT28obmV3IFNuKSE9Ynx8TW4mJk9vKE1uLnJlc29sdmUoKSkhPVN8fEVuJiZPbyhuZXcgRW4pIT1FfHxUbiYmT28obmV3IFRuKSE9QSkmJihPbz1mdW5jdGlvbih0KXt2YXIgZT1XaSh0KSxpPWU9PXc/dC5jb25zdHJ1Y3RvcjpuLHI9aT9vYShpKToiIjtpZihyKXN3aXRjaChyKXtjYXNlIExuOnJldHVybiBMO2Nhc2UgUG46cmV0dXJuIGI7Y2FzZSBObjpyZXR1cm4gUztjYXNlIEluOnJldHVybiBFO2Nhc2UgT246cmV0dXJuIEF9cmV0dXJuIGV9KTt2YXIgVW89THQ/YnM6amw7ZnVuY3Rpb24gam8odCl7dmFyIGU9dCYmdC5jb25zdHJ1Y3RvcjtyZXR1cm4gdD09PSgiZnVuY3Rpb24iPT10eXBlb2YgZSYmZS5wcm90b3R5cGV8fGt0KX1mdW5jdGlvbiBHbyh0KXtyZXR1cm4gdD09dCYmIVNzKHQpfWZ1bmN0aW9uIFdvKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiBudWxsIT1pJiZpW3RdPT09ZSYmKGUhPT1ufHx0IGluIE10KGkpKX19ZnVuY3Rpb24gcW8odCxlLGkpe3JldHVybiBlPWduKGU9PT1uP3QubGVuZ3RoLTE6ZSwwKSxmdW5jdGlvbigpe2Zvcih2YXIgbj1hcmd1bWVudHMscj0tMSxvPWduKG4ubGVuZ3RoLWUsMCksYT12dChvKTsrK3I8bzspYVtyXT1uW2Urcl07cj0tMTtmb3IodmFyIHM9dnQoZSsxKTsrK3I8ZTspc1tyXT1uW3JdO3JldHVybiBzW2VdPWkoYSksbWUodCx0aGlzLHMpfX1mdW5jdGlvbiBZbyh0LGUpe3JldHVybiBlLmxlbmd0aDwyP3Q6amkodCx3cihlLDAsLTEpKX1mdW5jdGlvbiBYbyh0LGUpe2Zvcih2YXIgaT10Lmxlbmd0aCxyPV9uKGUubGVuZ3RoLGkpLG89WHIodCk7ci0tOyl7dmFyIGE9ZVtyXTt0W3JdPUJvKGEsaSk/b1thXTpufXJldHVybiB0fWZ1bmN0aW9uICRvKHQsZSl7aWYoKCJjb25zdHJ1Y3RvciIhPT1lfHwiZnVuY3Rpb24iIT10eXBlb2YgdFtlXSkmJiJfX3Byb3RvX18iIT1lKXJldHVybiB0W2VdfXZhciBLbz10YSh2ciksWm89RGV8fGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGllLnNldFRpbWVvdXQodCxlKX0sSm89dGEoYnIpO2Z1bmN0aW9uIFFvKHQsZSxuKXt2YXIgaT1lKyIiO3JldHVybiBKbyh0LChmdW5jdGlvbiBhKHQsZSl7dmFyIG49ZS5sZW5ndGg7aWYoIW4pcmV0dXJuIHQ7dmFyIGk9bi0xO3JldHVybiBlW2ldPShuPjE/IiYgIjoiIikrZVtpXSxlPWUuam9pbihuPjI/IiwgIjoiICIpLHQucmVwbGFjZShpdCwie1xuLyogW3dyYXBwZWQgd2l0aCAiK2UrIl0gKi9cbiIpfSkoaSwoZnVuY3Rpb24gbyh0LGUpe3JldHVybiBfZShkLChmdW5jdGlvbihuKXt2YXIgaT0iXy4iK25bMF07ZSZuWzFdJiYhd2UodCxpKSYmdC5wdXNoKGkpfSkpLHQuc29ydCgpfSkoKGZ1bmN0aW9uIHIodCl7dmFyIGU9dC5tYXRjaChydCk7cmV0dXJuIGU/ZVsxXS5zcGxpdChvdCk6W119KShpKSxuKSkpfWZ1bmN0aW9uIHRhKHQpe3ZhciBlPTAsaT0wO3JldHVybiBmdW5jdGlvbigpe3ZhciByPXluKCksbz0xNi0oci1pKTtpZihpPXIsbz4wKXtpZigrK2U+PTgwMClyZXR1cm4gYXJndW1lbnRzWzBdfWVsc2UgZT0wO3JldHVybiB0LmFwcGx5KG4sYXJndW1lbnRzKX19ZnVuY3Rpb24gZWEodCxlKXt2YXIgaT0tMSxyPXQubGVuZ3RoLG89ci0xO2ZvcihlPWU9PT1uP3I6ZTsrK2k8ZTspe3ZhciBhPXByKGksbykscz10W2FdO3RbYV09dFtpXSx0W2ldPXN9cmV0dXJuIHQubGVuZ3RoPWUsdH12YXIgbmE9KGZ1bmN0aW9uIGlhKHQpe3ZhciBlPWVzKHQsKGZ1bmN0aW9uKHQpe3JldHVybiA1MDA9PT1uLnNpemUmJm4uY2xlYXIoKSx0fSkpLG49ZS5jYWNoZTtyZXR1cm4gZX0pKChmdW5jdGlvbih0KXt2YXIgZT1bXTtyZXR1cm4gNDY9PT10LmNoYXJDb2RlQXQoMCkmJmUucHVzaCgiIiksdC5yZXBsYWNlKEosKGZ1bmN0aW9uKHQsbixpLHIpe2UucHVzaChpP3IucmVwbGFjZShsdCwiJDEiKTpufHx0KX0pKSxlfSkpO2Z1bmN0aW9uIHJhKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdHx8T3ModCkpcmV0dXJuIHQ7dmFyIGU9dCsiIjtyZXR1cm4iMCI9PWUmJjEvdD09LTEvMD8iLTAiOmV9ZnVuY3Rpb24gb2EodCl7aWYobnVsbCE9dCl7dHJ5e3JldHVybiBQdC5jYWxsKHQpfWNhdGNoKHQpe310cnl7cmV0dXJuIHQrIiJ9Y2F0Y2godCl7fX1yZXR1cm4iIn1mdW5jdGlvbiBhYSh0KXtpZih0IGluc3RhbmNlb2YgVW4pcmV0dXJuIHQuY2xvbmUoKTt2YXIgZT1uZXcgVm4odC5fX3dyYXBwZWRfXyx0Ll9fY2hhaW5fXyk7cmV0dXJuIGUuX19hY3Rpb25zX189WHIodC5fX2FjdGlvbnNfXyksZS5fX2luZGV4X189dC5fX2luZGV4X18sZS5fX3ZhbHVlc19fPXQuX192YWx1ZXNfXyxlfXZhciBzYT1tcigoZnVuY3Rpb24odCxlKXtyZXR1cm4gbXModCk/Y2kodCxEaShlLDEsbXMsITApKTpbXX0pKSxsYT1tcigoZnVuY3Rpb24odCxlKXt2YXIgaT1fYShlKTtyZXR1cm4gbXMoaSkmJihpPW4pLG1zKHQpP2NpKHQsRGkoZSwxLG1zLCEwKSxBbyhpLDIpKTpbXX0pKSxjYT1tcigoZnVuY3Rpb24odCxlKXt2YXIgaT1fYShlKTtyZXR1cm4gbXMoaSkmJihpPW4pLG1zKHQpP2NpKHQsRGkoZSwxLG1zLCEwKSxuLGkpOltdfSkpO2Z1bmN0aW9uIHVhKHQsZSxuKXt2YXIgaT1udWxsPT10PzA6dC5sZW5ndGg7aWYoIWkpcmV0dXJuLTE7dmFyIHI9bnVsbD09bj8wOlZzKG4pO3JldHVybiByPDAmJihyPWduKGkrciwwKSksUGUodCxBbyhlLDMpLHIpfWZ1bmN0aW9uIGhhKHQsZSxpKXt2YXIgcj1udWxsPT10PzA6dC5sZW5ndGg7aWYoIXIpcmV0dXJuLTE7dmFyIG89ci0xO3JldHVybiBpIT09biYmKG89VnMoaSksbz1pPDA/Z24ocitvLDApOl9uKG8sci0xKSksUGUodCxBbyhlLDMpLG8sITApfWZ1bmN0aW9uIGRhKHQpe3JldHVybiBudWxsIT10JiZ0Lmxlbmd0aD9EaSh0LDEpOltdfWZ1bmN0aW9uIHBhKHQpe3JldHVybiB0JiZ0Lmxlbmd0aD90WzBdOm59dmFyIGZhPW1yKChmdW5jdGlvbih0KXt2YXIgZT1NZSh0LHpyKTtyZXR1cm4gZS5sZW5ndGgmJmVbMF09PT10WzBdPyRpKGUpOltdfSkpLG1hPW1yKChmdW5jdGlvbih0KXt2YXIgZT1fYSh0KSxpPU1lKHQsenIpO3JldHVybiBlPT09X2EoaSk/ZT1uOmkucG9wKCksaS5sZW5ndGgmJmlbMF09PT10WzBdPyRpKGksQW8oZSwyKSk6W119KSksZ2E9bXIoKGZ1bmN0aW9uKHQpe3ZhciBlPV9hKHQpLGk9TWUodCx6cik7cmV0dXJuKGU9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpuKSYmaS5wb3AoKSxpLmxlbmd0aCYmaVswXT09PXRbMF0/JGkoaSxuLGUpOltdfSkpO2Z1bmN0aW9uIF9hKHQpe3ZhciBlPW51bGw9PXQ/MDp0Lmxlbmd0aDtyZXR1cm4gZT90W2UtMV06bn12YXIgeWE9bXIodmEpO2Z1bmN0aW9uIHZhKHQsZSl7cmV0dXJuIHQmJnQubGVuZ3RoJiZlJiZlLmxlbmd0aD9ocih0LGUpOnR9dmFyIGJhPXdvKChmdW5jdGlvbih0LGUpe3ZhciBuPW51bGw9PXQ/MDp0Lmxlbmd0aCxpPXJpKHQsZSk7cmV0dXJuIGRyKHQsTWUoZSwoZnVuY3Rpb24odCl7cmV0dXJuIEJvKHQsbik/K3Q6dH0pKS5zb3J0KFdyKSksaX0pKTtmdW5jdGlvbiB4YSh0KXtyZXR1cm4gbnVsbD09dD90OnhuLmNhbGwodCl9dmFyIHdhPW1yKChmdW5jdGlvbih0KXtyZXR1cm4ga3IoRGkodCwxLG1zLCEwKSl9KSksU2E9bXIoKGZ1bmN0aW9uKHQpe3ZhciBlPV9hKHQpO3JldHVybiBtcyhlKSYmKGU9biksa3IoRGkodCwxLG1zLCEwKSxBbyhlLDIpKX0pKSxNYT1tcigoZnVuY3Rpb24odCl7dmFyIGU9X2EodCk7cmV0dXJuIGU9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpuLGtyKERpKHQsMSxtcywhMCksbixlKX0pKTtmdW5jdGlvbiBFYSh0KXtpZighdHx8IXQubGVuZ3RoKXJldHVybltdO3ZhciBlPTA7cmV0dXJuIHQ9eGUodCwoZnVuY3Rpb24odCl7aWYobXModCkpcmV0dXJuIGU9Z24odC5sZW5ndGgsZSksITB9KSksRmUoZSwoZnVuY3Rpb24oZSl7cmV0dXJuIE1lKHQsemUoZSkpfSkpfWZ1bmN0aW9uIFRhKHQsZSl7aWYoIXR8fCF0Lmxlbmd0aClyZXR1cm5bXTt2YXIgaT1FYSh0KTtyZXR1cm4gbnVsbD09ZT9pOk1lKGksKGZ1bmN0aW9uKHQpe3JldHVybiBtZShlLG4sdCl9KSl9dmFyIENhPW1yKChmdW5jdGlvbih0LGUpe3JldHVybiBtcyh0KT9jaSh0LGUpOltdfSkpLEFhPW1yKChmdW5jdGlvbih0KXtyZXR1cm4gT3IoeGUodCxtcykpfSkpLGthPW1yKChmdW5jdGlvbih0KXt2YXIgZT1fYSh0KTtyZXR1cm4gbXMoZSkmJihlPW4pLE9yKHhlKHQsbXMpLEFvKGUsMikpfSkpLExhPW1yKChmdW5jdGlvbih0KXt2YXIgZT1fYSh0KTtyZXR1cm4gZT0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOm4sT3IoeGUodCxtcyksbixlKX0pKSxQYT1tcihFYSksTmE9bXIoKGZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoLGk9ZT4xP3RbZS0xXTpuO3JldHVybiBpPSJmdW5jdGlvbiI9PXR5cGVvZiBpPyh0LnBvcCgpLGkpOm4sVGEodCxpKX0pKTtmdW5jdGlvbiBJYSh0KXt2YXIgZT1Cbih0KTtyZXR1cm4gZS5fX2NoYWluX189ITAsZX1mdW5jdGlvbiBPYSh0LGUpe3JldHVybiBlKHQpfXZhciBSYT13bygoZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGgsaT1lP3RbMF06MCxyPXRoaXMuX193cmFwcGVkX18sbz1mdW5jdGlvbihlKXtyZXR1cm4gcmkoZSx0KX07cmV0dXJuIShlPjF8fHRoaXMuX19hY3Rpb25zX18ubGVuZ3RoKSYmciBpbnN0YW5jZW9mIFVuJiZCbyhpKT8oKHI9ci5zbGljZShpLCtpKyhlPzE6MCkpKS5fX2FjdGlvbnNfXy5wdXNoKHtmdW5jOk9hLGFyZ3M6W29dLHRoaXNBcmc6bn0pLG5ldyBWbihyLHRoaXMuX19jaGFpbl9fKS50aHJ1KChmdW5jdGlvbih0KXtyZXR1cm4gZSYmIXQubGVuZ3RoJiZ0LnB1c2gobiksdH0pKSk6dGhpcy50aHJ1KG8pfSkpLHphPUtyKChmdW5jdGlvbih0LGUsbil7TnQuY2FsbCh0LG4pPysrdFtuXTppaSh0LG4sMSl9KSksRGE9aW8odWEpLEJhPWlvKGhhKTtmdW5jdGlvbiBIYSh0LGUpe3JldHVybihocyh0KT9fZTpOaSkodCxBbyhlLDMpKX1mdW5jdGlvbiBGYSh0LGUpe3JldHVybihocyh0KT95ZTpJaSkodCxBbyhlLDMpKX12YXIgVmE9S3IoKGZ1bmN0aW9uKHQsZSxuKXtOdC5jYWxsKHQsbik/dFtuXS5wdXNoKGUpOmlpKHQsbixbZV0pfSkpLFVhPW1yKChmdW5jdGlvbih0LGUsbil7dmFyIGk9LTEscj0iZnVuY3Rpb24iPT10eXBlb2YgZSxvPWZzKHQpP3Z0KHQubGVuZ3RoKTpbXTtyZXR1cm4gTmkodCwoZnVuY3Rpb24odCl7b1srK2ldPXI/bWUoZSx0LG4pOktpKHQsZSxuKX0pKSxvfSkpLGphPUtyKChmdW5jdGlvbih0LGUsbil7aWkodCxuLGUpfSkpO2Z1bmN0aW9uIEdhKHQsZSl7cmV0dXJuKGhzKHQpP01lOnJyKSh0LEFvKGUsMykpfXZhciBXYT1LcigoZnVuY3Rpb24odCxlLG4pe3Rbbj8wOjFdLnB1c2goZSl9KSwoZnVuY3Rpb24oKXtyZXR1cm5bW10sW11dfSkpLHFhPW1yKChmdW5jdGlvbih0LGUpe2lmKG51bGw9PXQpcmV0dXJuW107dmFyIG49ZS5sZW5ndGg7cmV0dXJuIG4+MSYmSG8odCxlWzBdLGVbMV0pP2U9W106bj4yJiZIbyhlWzBdLGVbMV0sZVsyXSkmJihlPVtlWzBdXSksY3IodCxEaShlLDEpLFtdKX0pKSxZYT1rZXx8ZnVuY3Rpb24oKXtyZXR1cm4gaWUuRGF0ZS5ub3coKX07ZnVuY3Rpb24gWGEodCxlLGkpe3JldHVybiBlPWk/bjplLF9vKHQscyxuLG4sbixuLGU9dCYmbnVsbD09ZT90Lmxlbmd0aDplKX1mdW5jdGlvbiAkYSh0LGUpe3ZhciByO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBDdChpKTtyZXR1cm4gdD1Wcyh0KSxmdW5jdGlvbigpe3JldHVybi0tdD4wJiYocj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksdDw9MSYmKGU9bikscn19dmFyIEthPW1yKChmdW5jdGlvbih0LGUsbil7dmFyIGk9MTtpZihuLmxlbmd0aCl7dmFyIHI9dG4obixDbyhLYSkpO2l8PWF9cmV0dXJuIF9vKHQsaSxlLG4scil9KSksWmE9bXIoKGZ1bmN0aW9uKHQsZSxuKXt2YXIgaT0zO2lmKG4ubGVuZ3RoKXt2YXIgcj10bihuLENvKFphKSk7aXw9YX1yZXR1cm4gX28oZSxpLHQsbixyKX0pKTtmdW5jdGlvbiBKYSh0LGUscil7dmFyIG8sYSxzLGwsYyx1LGg9MCxkPSExLHA9ITEsZj0hMDtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgQ3QoaSk7ZnVuY3Rpb24gbShlKXt2YXIgaT1vLHI9YTtyZXR1cm4gbz1hPW4saD1lLGw9dC5hcHBseShyLGkpfWZ1bmN0aW9uIGcodCl7cmV0dXJuIGg9dCxjPVpvKHksZSksZD9tKHQpOmx9ZnVuY3Rpb24gXyh0KXt2YXIgaT10LXU7cmV0dXJuIHU9PT1ufHxpPj1lfHxpPDB8fHAmJnQtaD49c31mdW5jdGlvbiB5KCl7dmFyIHQ9WWEoKTtpZihfKHQpKXJldHVybiB2KHQpO2M9Wm8oeSwoZnVuY3Rpb24gbih0KXt2YXIgbj1lLSh0LXUpO3JldHVybiBwP19uKG4scy0odC1oKSk6bn0pKHQpKX1mdW5jdGlvbiB2KHQpe3JldHVybiBjPW4sZiYmbz9tKHQpOihvPWE9bixsKX1mdW5jdGlvbiBiKCl7dmFyIHQ9WWEoKSxpPV8odCk7aWYobz1hcmd1bWVudHMsYT10aGlzLHU9dCxpKXtpZihjPT09bilyZXR1cm4gZyh1KTtpZihwKXJldHVybiBWcihjKSxjPVpvKHksZSksbSh1KX1yZXR1cm4gYz09PW4mJihjPVpvKHksZSkpLGx9cmV0dXJuIGU9anMoZSl8fDAsU3MocikmJihkPSEhci5sZWFkaW5nLHM9KHA9Im1heFdhaXQiaW4gcik/Z24oanMoci5tYXhXYWl0KXx8MCxlKTpzLGY9InRyYWlsaW5nImluIHI/ISFyLnRyYWlsaW5nOmYpLGIuY2FuY2VsPWZ1bmN0aW9uIHgoKXtjIT09biYmVnIoYyksaD0wLG89dT1hPWM9bn0sYi5mbHVzaD1mdW5jdGlvbiB3KCl7cmV0dXJuIGM9PT1uP2w6dihZYSgpKX0sYn12YXIgUWE9bXIoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGxpKHQsMSxlKX0pKSx0cz1tcigoZnVuY3Rpb24odCxlLG4pe3JldHVybiBsaSh0LGpzKGUpfHwwLG4pfSkpO2Z1bmN0aW9uIGVzKHQsZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHR8fG51bGwhPWUmJiJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBDdChpKTt2YXIgbj1mdW5jdGlvbigpe3ZhciBpPWFyZ3VtZW50cyxyPWU/ZS5hcHBseSh0aGlzLGkpOmlbMF0sbz1uLmNhY2hlO2lmKG8uaGFzKHIpKXJldHVybiBvLmdldChyKTt2YXIgYT10LmFwcGx5KHRoaXMsaSk7cmV0dXJuIG4uY2FjaGU9by5zZXQocixhKXx8byxhfTtyZXR1cm4gbi5jYWNoZT1uZXcoZXMuQ2FjaGV8fFduKSxufWZ1bmN0aW9uIG5zKHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBDdChpKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHM7c3dpdGNoKGUubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIXQuY2FsbCh0aGlzKTtjYXNlIDE6cmV0dXJuIXQuY2FsbCh0aGlzLGVbMF0pO2Nhc2UgMjpyZXR1cm4hdC5jYWxsKHRoaXMsZVswXSxlWzFdKTtjYXNlIDM6cmV0dXJuIXQuY2FsbCh0aGlzLGVbMF0sZVsxXSxlWzJdKX1yZXR1cm4hdC5hcHBseSh0aGlzLGUpfX1lcy5DYWNoZT1Xbjt2YXIgaXM9SHIoKGZ1bmN0aW9uKHQsZSl7dmFyIG49KGU9MT09ZS5sZW5ndGgmJmhzKGVbMF0pP01lKGVbMF0sVWUoQW8oKSkpOk1lKERpKGUsMSksVWUoQW8oKSkpKS5sZW5ndGg7cmV0dXJuIG1yKChmdW5jdGlvbihpKXtmb3IodmFyIHI9LTEsbz1fbihpLmxlbmd0aCxuKTsrK3I8bzspaVtyXT1lW3JdLmNhbGwodGhpcyxpW3JdKTtyZXR1cm4gbWUodCx0aGlzLGkpfSkpfSkpLHJzPW1yKChmdW5jdGlvbih0LGUpe3ZhciBpPXRuKGUsQ28ocnMpKTtyZXR1cm4gX28odCxhLG4sZSxpKX0pKSxvcz1tcigoZnVuY3Rpb24odCxlKXt2YXIgaT10bihlLENvKG9zKSk7cmV0dXJuIF9vKHQsNjQsbixlLGkpfSkpLGFzPXdvKChmdW5jdGlvbih0LGUpe3JldHVybiBfbyh0LDI1NixuLG4sbixlKX0pKTtmdW5jdGlvbiBzcyh0LGUpe3JldHVybiB0PT09ZXx8dCE9dCYmZSE9ZX12YXIgbHM9aG8ocWkpLGNzPWhvKChmdW5jdGlvbih0LGUpe3JldHVybiB0Pj1lfSkpLHVzPVppKChmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KSgpKT9aaTpmdW5jdGlvbih0KXtyZXR1cm4gTXModCkmJk50LmNhbGwodCwiY2FsbGVlIikmJiFlZS5jYWxsKHQsImNhbGxlZSIpfSxocz12dC5pc0FycmF5LGRzPWNlP1VlKGNlKTpmdW5jdGlvbiBwcyh0KXtyZXR1cm4gTXModCkmJldpKHQpPT1rfTtmdW5jdGlvbiBmcyh0KXtyZXR1cm4gbnVsbCE9dCYmd3ModC5sZW5ndGgpJiYhYnModCl9ZnVuY3Rpb24gbXModCl7cmV0dXJuIE1zKHQpJiZmcyh0KX12YXIgZ3M9ZG58fGpsLF9zPXVlP1VlKHVlKTpmdW5jdGlvbiB5cyh0KXtyZXR1cm4gTXModCkmJldpKHQpPT1nfTtmdW5jdGlvbiB2cyh0KXtpZighTXModCkpcmV0dXJuITE7dmFyIGU9V2kodCk7cmV0dXJuIGU9PV98fCJbb2JqZWN0IERPTUV4Y2VwdGlvbl0iPT1lfHwic3RyaW5nIj09dHlwZW9mIHQubWVzc2FnZSYmInN0cmluZyI9PXR5cGVvZiB0Lm5hbWUmJiFBcyh0KX1mdW5jdGlvbiBicyh0KXtpZighU3ModCkpcmV0dXJuITE7dmFyIGU9V2kodCk7cmV0dXJuIGU9PXl8fGU9PXZ8fCJbb2JqZWN0IEFzeW5jRnVuY3Rpb25dIj09ZXx8IltvYmplY3QgUHJveHldIj09ZX1mdW5jdGlvbiB4cyh0KXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQmJnQ9PVZzKHQpfWZ1bmN0aW9uIHdzKHQpe3JldHVybiJudW1iZXIiPT10eXBlb2YgdCYmdD4tMSYmdCUxPT0wJiZ0PD1jfWZ1bmN0aW9uIFNzKHQpe3ZhciBlPXR5cGVvZiB0O3JldHVybiBudWxsIT10JiYoIm9iamVjdCI9PWV8fCJmdW5jdGlvbiI9PWUpfWZ1bmN0aW9uIE1zKHQpe3JldHVybiBudWxsIT10JiYib2JqZWN0Ij09dHlwZW9mIHR9dmFyIEVzPWhlP1VlKGhlKTpmdW5jdGlvbiBUcyh0KXtyZXR1cm4gTXModCkmJk9vKHQpPT1ifTtmdW5jdGlvbiBDcyh0KXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHR8fE1zKHQpJiZXaSh0KT09eH1mdW5jdGlvbiBBcyh0KXtpZighTXModCl8fFdpKHQpIT13KXJldHVybiExO3ZhciBlPXF0KHQpO2lmKG51bGw9PT1lKXJldHVybiEwO3ZhciBuPU50LmNhbGwoZSwiY29uc3RydWN0b3IiKSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgbiYmbiBpbnN0YW5jZW9mIG4mJlB0LmNhbGwobik9PXp0fXZhciBrcz1kZT9VZShkZSk6ZnVuY3Rpb24gTHModCl7cmV0dXJuIE1zKHQpJiZXaSh0KT09TX0sUHM9cGU/VWUocGUpOmZ1bmN0aW9uIE5zKHQpe3JldHVybiBNcyh0KSYmT28odCk9PUV9O2Z1bmN0aW9uIElzKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdHx8IWhzKHQpJiZNcyh0KSYmV2kodCk9PVR9ZnVuY3Rpb24gT3ModCl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0fHxNcyh0KSYmV2kodCk9PUN9dmFyIFJzPWZlP1VlKGZlKTpmdW5jdGlvbiB6cyh0KXtyZXR1cm4gTXModCkmJndzKHQubGVuZ3RoKSYmISFLdFtXaSh0KV19LERzPWhvKGlyKSxCcz1obygoZnVuY3Rpb24odCxlKXtyZXR1cm4gdDw9ZX0pKTtmdW5jdGlvbiBIcyh0KXtpZighdClyZXR1cm5bXTtpZihmcyh0KSlyZXR1cm4gSXModCk/b24odCk6WHIodCk7aWYob2UmJnRbb2VdKXJldHVybihmdW5jdGlvbiBlKHQpe2Zvcih2YXIgZSxuPVtdOyEoZT10Lm5leHQoKSkuZG9uZTspbi5wdXNoKGUudmFsdWUpO3JldHVybiBufSkodFtvZV0oKSk7dmFyIG49T28odCk7cmV0dXJuKG49PWI/SmU6bj09RT9lbjpwbCkodCl9ZnVuY3Rpb24gRnModCl7cmV0dXJuIHQ/KHQ9anModCkpPT09bHx8dD09PS0xLzA/MTc5NzY5MzEzNDg2MjMxNTdlMjkyKih0PDA/LTE6MSk6dD09dD90OjA6MD09PXQ/dDowfWZ1bmN0aW9uIFZzKHQpe3ZhciBlPUZzKHQpLG49ZSUxO3JldHVybiBlPT1lP24/ZS1uOmU6MH1mdW5jdGlvbiBVcyh0KXtyZXR1cm4gdD9vaShWcyh0KSwwLGgpOjB9ZnVuY3Rpb24ganModCl7aWYoIm51bWJlciI9PXR5cGVvZiB0KXJldHVybiB0O2lmKE9zKHQpKXJldHVybiB1O2lmKFNzKHQpKXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2YgdC52YWx1ZU9mP3QudmFsdWVPZigpOnQ7dD1TcyhlKT9lKyIiOmV9aWYoInN0cmluZyIhPXR5cGVvZiB0KXJldHVybiAwPT09dD90Oit0O3Q9VmUodCk7dmFyIG49ZHQudGVzdCh0KTtyZXR1cm4gbnx8ZnQudGVzdCh0KT90ZSh0LnNsaWNlKDIpLG4/Mjo4KTpodC50ZXN0KHQpP3U6K3R9ZnVuY3Rpb24gR3ModCl7cmV0dXJuICRyKHQsb2wodCkpfWZ1bmN0aW9uIFdzKHQpe3JldHVybiBudWxsPT10PyIiOkFyKHQpfXZhciBxcz1acigoZnVuY3Rpb24odCxlKXtpZihqbyhlKXx8ZnMoZSkpJHIoZSxybChlKSx0KTtlbHNlIGZvcih2YXIgbiBpbiBlKU50LmNhbGwoZSxuKSYmUW4odCxuLGVbbl0pfSkpLFlzPVpyKChmdW5jdGlvbih0LGUpeyRyKGUsb2woZSksdCl9KSksWHM9WnIoKGZ1bmN0aW9uKHQsZSxuLGkpeyRyKGUsb2woZSksdCxpKX0pKSwkcz1acigoZnVuY3Rpb24odCxlLG4saSl7JHIoZSxybChlKSx0LGkpfSkpLEtzPXdvKHJpKSxacz1tcigoZnVuY3Rpb24odCxlKXt0PU10KHQpO3ZhciBpPS0xLHI9ZS5sZW5ndGgsbz1yPjI/ZVsyXTpuO2ZvcihvJiZIbyhlWzBdLGVbMV0sbykmJihyPTEpOysraTxyOylmb3IodmFyIGE9ZVtpXSxzPW9sKGEpLGw9LTEsYz1zLmxlbmd0aDsrK2w8Yzspe3ZhciB1PXNbbF0saD10W3VdOyhoPT09bnx8c3MoaCxrdFt1XSkmJiFOdC5jYWxsKHQsdSkpJiYodFt1XT1hW3VdKX1yZXR1cm4gdH0pKSxKcz1tcigoZnVuY3Rpb24odCl7cmV0dXJuIHQucHVzaChuLHZvKSxtZShzbCxuLHQpfSkpO2Z1bmN0aW9uIFFzKHQsZSxpKXt2YXIgcj1udWxsPT10P246amkodCxlKTtyZXR1cm4gcj09PW4/aTpyfWZ1bmN0aW9uIHRsKHQsZSl7cmV0dXJuIG51bGwhPXQmJlJvKHQsZSxYaSl9dmFyIGVsPWFvKChmdW5jdGlvbih0LGUsbil7bnVsbCE9ZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGUudG9TdHJpbmcmJihlPVJ0LmNhbGwoZSkpLHRbZV09bn0pLENsKExsKSksbmw9YW8oKGZ1bmN0aW9uKHQsZSxuKXtudWxsIT1lJiYiZnVuY3Rpb24iIT10eXBlb2YgZS50b1N0cmluZyYmKGU9UnQuY2FsbChlKSksTnQuY2FsbCh0LGUpP3RbZV0ucHVzaChuKTp0W2VdPVtuXX0pLEFvKSxpbD1tcihLaSk7ZnVuY3Rpb24gcmwodCl7cmV0dXJuIGZzKHQpP1huKHQpOm5yKHQpfWZ1bmN0aW9uIG9sKHQpe3JldHVybiBmcyh0KT9Ybih0LCEwKTooZnVuY3Rpb24gZSh0KXtpZighU3ModCkpcmV0dXJuKGZ1bmN0aW9uIGUodCl7dmFyIGU9W107aWYobnVsbCE9dClmb3IodmFyIG4gaW4gTXQodCkpZS5wdXNoKG4pO3JldHVybiBlfSkodCk7dmFyIG49am8odCksaT1bXTtmb3IodmFyIHIgaW4gdCkoImNvbnN0cnVjdG9yIiE9cnx8IW4mJk50LmNhbGwodCxyKSkmJmkucHVzaChyKTtyZXR1cm4gaX0pKHQpfXZhciBhbD1acigoZnVuY3Rpb24odCxlLG4pe3NyKHQsZSxuKX0pKSxzbD1acigoZnVuY3Rpb24odCxlLG4saSl7c3IodCxlLG4saSl9KSksbGw9d28oKGZ1bmN0aW9uKHQsZSl7dmFyIG49e307aWYobnVsbD09dClyZXR1cm4gbjt2YXIgaT0hMTtlPU1lKGUsKGZ1bmN0aW9uKGUpe3JldHVybiBlPUJyKGUsdCksaXx8KGk9ZS5sZW5ndGg+MSksZX0pKSwkcih0LE1vKHQpLG4pLGkmJihuPWFpKG4sNyxibykpO2Zvcih2YXIgcj1lLmxlbmd0aDtyLS07KUxyKG4sZVtyXSk7cmV0dXJuIG59KSksY2w9d28oKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG51bGw9PXQ/e306KGZ1bmN0aW9uIG4odCxlKXtyZXR1cm4gdXIodCxlLChmdW5jdGlvbihlLG4pe3JldHVybiB0bCh0LG4pfSkpfSkodCxlKX0pKTtmdW5jdGlvbiB1bCh0LGUpe2lmKG51bGw9PXQpcmV0dXJue307dmFyIG49TWUoTW8odCksKGZ1bmN0aW9uKHQpe3JldHVyblt0XX0pKTtyZXR1cm4gZT1BbyhlKSx1cih0LG4sKGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUodCxuWzBdKX0pKX12YXIgaGw9Z28ocmwpLGRsPWdvKG9sKTtmdW5jdGlvbiBwbCh0KXtyZXR1cm4gbnVsbD09dD9bXTpqZSh0LHJsKHQpKX12YXIgZmw9ZW8oKGZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gZT1lLnRvTG93ZXJDYXNlKCksdCsobj9tbChlKTplKX0pKTtmdW5jdGlvbiBtbCh0KXtyZXR1cm4gU2woV3ModCkudG9Mb3dlckNhc2UoKSl9ZnVuY3Rpb24gZ2wodCl7cmV0dXJuKHQ9V3ModCkpJiZ0LnJlcGxhY2UoZ3QsWGUpLnJlcGxhY2UoanQsIiIpfXZhciBfbD1lbygoZnVuY3Rpb24odCxlLG4pe3JldHVybiB0KyhuPyItIjoiIikrZS50b0xvd2VyQ2FzZSgpfSkpLHlsPWVvKChmdW5jdGlvbih0LGUsbil7cmV0dXJuIHQrKG4/IiAiOiIiKStlLnRvTG93ZXJDYXNlKCl9KSksdmw9dG8oInRvTG93ZXJDYXNlIiksYmw9ZW8oKGZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdCsobj8iXyI6IiIpK2UudG9Mb3dlckNhc2UoKX0pKSx4bD1lbygoZnVuY3Rpb24odCxlLG4pe3JldHVybiB0KyhuPyIgIjoiIikrU2woZSl9KSksd2w9ZW8oKGZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdCsobj8iICI6IiIpK2UudG9VcHBlckNhc2UoKX0pKSxTbD10bygidG9VcHBlckNhc2UiKTtmdW5jdGlvbiBNbCh0LGUsaSl7cmV0dXJuIHQ9V3ModCksKGU9aT9uOmUpPT09bj8oZnVuY3Rpb24gcih0KXtyZXR1cm4gWXQudGVzdCh0KX0pKHQpPyhmdW5jdGlvbiBvKHQpe3JldHVybiB0Lm1hdGNoKFd0KXx8W119KSh0KTooZnVuY3Rpb24gYSh0KXtyZXR1cm4gdC5tYXRjaChhdCl8fFtdfSkodCk6dC5tYXRjaChlKXx8W119dmFyIEVsPW1yKChmdW5jdGlvbih0LGUpe3RyeXtyZXR1cm4gbWUodCxuLGUpfWNhdGNoKHQpe3JldHVybiB2cyh0KT90Om5ldyB4dCh0KX19KSksVGw9d28oKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIF9lKGUsKGZ1bmN0aW9uKGUpe2U9cmEoZSksaWkodCxlLEthKHRbZV0sdCkpfSkpLHR9KSk7ZnVuY3Rpb24gQ2wodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fXZhciBBbD1ybygpLGtsPXJvKCEwKTtmdW5jdGlvbiBMbCh0KXtyZXR1cm4gdH1mdW5jdGlvbiBQbCh0KXtyZXR1cm4gZXIoImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDphaSh0LDEpKX12YXIgTmw9bXIoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBLaShuLHQsZSl9fSkpLElsPW1yKChmdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gS2kodCxuLGUpfX0pKTtmdW5jdGlvbiBPbCh0LGUsbil7dmFyIGk9cmwoZSkscj1VaShlLGkpO251bGwhPW58fFNzKGUpJiYoci5sZW5ndGh8fCFpLmxlbmd0aCl8fChuPWUsZT10LHQ9dGhpcyxyPVVpKGUscmwoZSkpKTt2YXIgbz0hKFNzKG4pJiYiY2hhaW4iaW4gbiYmIW4uY2hhaW4pLGE9YnModCk7cmV0dXJuIF9lKHIsKGZ1bmN0aW9uKG4pe3ZhciBpPWVbbl07dFtuXT1pLGEmJih0LnByb3RvdHlwZVtuXT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX19jaGFpbl9fO2lmKG98fGUpe3ZhciBuPXQodGhpcy5fX3dyYXBwZWRfXykscj1uLl9fYWN0aW9uc19fPVhyKHRoaXMuX19hY3Rpb25zX18pO3JldHVybiByLnB1c2goe2Z1bmM6aSxhcmdzOmFyZ3VtZW50cyx0aGlzQXJnOnR9KSxuLl9fY2hhaW5fXz1lLG59cmV0dXJuIGkuYXBwbHkodCxFZShbdGhpcy52YWx1ZSgpXSxhcmd1bWVudHMpKX0pfSkpLHR9ZnVuY3Rpb24gUmwoKXt9dmFyIHpsPWxvKE1lKSxEbD1sbyhiZSksQmw9bG8oQWUpO2Z1bmN0aW9uIEhsKHQpe3JldHVybiBGbyh0KT96ZShyYSh0KSk6KGZ1bmN0aW9uIGUodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBqaShlLHQpfX0pKHQpfXZhciBGbD11bygpLFZsPXVvKCEwKTtmdW5jdGlvbiBVbCgpe3JldHVybltdfWZ1bmN0aW9uIGpsKCl7cmV0dXJuITF9dmFyIEdsLFdsPXNvKChmdW5jdGlvbih0LGUpe3JldHVybiB0K2V9KSwwKSxxbD1mbygiY2VpbCIpLFlsPXNvKChmdW5jdGlvbih0LGUpe3JldHVybiB0L2V9KSwxKSxYbD1mbygiZmxvb3IiKSwkbD1zbygoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCplfSksMSksS2w9Zm8oInJvdW5kIiksWmw9c28oKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pLDApO3JldHVybiBCbi5hZnRlcj1mdW5jdGlvbiBKbCh0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBDdChpKTtyZXR1cm4gdD1Wcyh0KSxmdW5jdGlvbigpe2lmKC0tdDwxKXJldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LEJuLmFyeT1YYSxCbi5hc3NpZ249cXMsQm4uYXNzaWduSW49WXMsQm4uYXNzaWduSW5XaXRoPVhzLEJuLmFzc2lnbldpdGg9JHMsQm4uYXQ9S3MsQm4uYmVmb3JlPSRhLEJuLmJpbmQ9S2EsQm4uYmluZEFsbD1UbCxCbi5iaW5kS2V5PVphLEJuLmNhc3RBcnJheT1mdW5jdGlvbiBRbCgpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybltdO3ZhciB0PWFyZ3VtZW50c1swXTtyZXR1cm4gaHModCk/dDpbdF19LEJuLmNoYWluPUlhLEJuLmNodW5rPWZ1bmN0aW9uIHRjKHQsZSxpKXtlPShpP0hvKHQsZSxpKTplPT09bik/MTpnbihWcyhlKSwwKTt2YXIgcj1udWxsPT10PzA6dC5sZW5ndGg7aWYoIXJ8fGU8MSlyZXR1cm5bXTtmb3IodmFyIG89MCxhPTAscz12dChjbihyL2UpKTtvPHI7KXNbYSsrXT13cih0LG8sbys9ZSk7cmV0dXJuIHN9LEJuLmNvbXBhY3Q9ZnVuY3Rpb24gZWModCl7Zm9yKHZhciBlPS0xLG49bnVsbD09dD8wOnQubGVuZ3RoLGk9MCxyPVtdOysrZTxuOyl7dmFyIG89dFtlXTtvJiYocltpKytdPW8pfXJldHVybiByfSxCbi5jb25jYXQ9ZnVuY3Rpb24gbmMoKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoO2lmKCF0KXJldHVybltdO2Zvcih2YXIgZT12dCh0LTEpLG49YXJndW1lbnRzWzBdLGk9dDtpLS07KWVbaS0xXT1hcmd1bWVudHNbaV07cmV0dXJuIEVlKGhzKG4pP1hyKG4pOltuXSxEaShlLDEpKX0sQm4uY29uZD1mdW5jdGlvbiBpYyh0KXt2YXIgZT1udWxsPT10PzA6dC5sZW5ndGgsbj1BbygpO3JldHVybiB0PWU/TWUodCwoZnVuY3Rpb24odCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHRbMV0pdGhyb3cgbmV3IEN0KGkpO3JldHVybltuKHRbMF0pLHRbMV1dfSkpOltdLG1yKChmdW5jdGlvbihuKXtmb3IodmFyIGk9LTE7KytpPGU7KXt2YXIgcj10W2ldO2lmKG1lKHJbMF0sdGhpcyxuKSlyZXR1cm4gbWUoclsxXSx0aGlzLG4pfX0pKX0sQm4uY29uZm9ybXM9ZnVuY3Rpb24gcmModCl7cmV0dXJuKGZ1bmN0aW9uIGUodCl7dmFyIGU9cmwodCk7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBzaShuLHQsZSl9fSkoYWkodCwxKSl9LEJuLmNvbnN0YW50PUNsLEJuLmNvdW50Qnk9emEsQm4uY3JlYXRlPWZ1bmN0aW9uIG9jKHQsZSl7dmFyIG49SG4odCk7cmV0dXJuIG51bGw9PWU/bjpuaShuLGUpfSxCbi5jdXJyeT1mdW5jdGlvbiB0KGUsaSxyKXt2YXIgbz1fbyhlLDgsbixuLG4sbixuLGk9cj9uOmkpO3JldHVybiBvLnBsYWNlaG9sZGVyPXQucGxhY2Vob2xkZXIsb30sQm4uY3VycnlSaWdodD1mdW5jdGlvbiB0KGUsaSxyKXt2YXIgbz1fbyhlLDE2LG4sbixuLG4sbixpPXI/bjppKTtyZXR1cm4gby5wbGFjZWhvbGRlcj10LnBsYWNlaG9sZGVyLG99LEJuLmRlYm91bmNlPUphLEJuLmRlZmF1bHRzPVpzLEJuLmRlZmF1bHRzRGVlcD1KcyxCbi5kZWZlcj1RYSxCbi5kZWxheT10cyxCbi5kaWZmZXJlbmNlPXNhLEJuLmRpZmZlcmVuY2VCeT1sYSxCbi5kaWZmZXJlbmNlV2l0aD1jYSxCbi5kcm9wPWZ1bmN0aW9uIGFjKHQsZSxpKXt2YXIgcj1udWxsPT10PzA6dC5sZW5ndGg7cmV0dXJuIHI/d3IodCwoZT1pfHxlPT09bj8xOlZzKGUpKTwwPzA6ZSxyKTpbXX0sQm4uZHJvcFJpZ2h0PWZ1bmN0aW9uIHNjKHQsZSxpKXt2YXIgcj1udWxsPT10PzA6dC5sZW5ndGg7cmV0dXJuIHI/d3IodCwwLChlPXItKGU9aXx8ZT09PW4/MTpWcyhlKSkpPDA/MDplKTpbXX0sQm4uZHJvcFJpZ2h0V2hpbGU9ZnVuY3Rpb24gbGModCxlKXtyZXR1cm4gdCYmdC5sZW5ndGg/TnIodCxBbyhlLDMpLCEwLCEwKTpbXX0sQm4uZHJvcFdoaWxlPWZ1bmN0aW9uIGNjKHQsZSl7cmV0dXJuIHQmJnQubGVuZ3RoP05yKHQsQW8oZSwzKSwhMCk6W119LEJuLmZpbGw9ZnVuY3Rpb24gdWModCxlLGkscil7dmFyIG89bnVsbD09dD8wOnQubGVuZ3RoO3JldHVybiBvPyhpJiYibnVtYmVyIiE9dHlwZW9mIGkmJkhvKHQsZSxpKSYmKGk9MCxyPW8pLChmdW5jdGlvbiBhKHQsZSxpLHIpe3ZhciBvPXQubGVuZ3RoO2ZvcigoaT1WcyhpKSk8MCYmKGk9LWk+bz8wOm8raSksKHI9cj09PW58fHI+bz9vOlZzKHIpKTwwJiYocis9bykscj1pPnI/MDpVcyhyKTtpPHI7KXRbaSsrXT1lO3JldHVybiB0fSkodCxlLGkscikpOltdfSxCbi5maWx0ZXI9ZnVuY3Rpb24gaGModCxlKXtyZXR1cm4oaHModCk/eGU6emkpKHQsQW8oZSwzKSl9LEJuLmZsYXRNYXA9ZnVuY3Rpb24gZGModCxlKXtyZXR1cm4gRGkoR2EodCxlKSwxKX0sQm4uZmxhdE1hcERlZXA9ZnVuY3Rpb24gcGModCxlKXtyZXR1cm4gRGkoR2EodCxlKSxsKX0sQm4uZmxhdE1hcERlcHRoPWZ1bmN0aW9uIGZjKHQsZSxpKXtyZXR1cm4gaT1pPT09bj8xOlZzKGkpLERpKEdhKHQsZSksaSl9LEJuLmZsYXR0ZW49ZGEsQm4uZmxhdHRlbkRlZXA9ZnVuY3Rpb24gbWModCl7cmV0dXJuIG51bGwhPXQmJnQubGVuZ3RoP0RpKHQsbCk6W119LEJuLmZsYXR0ZW5EZXB0aD1mdW5jdGlvbiBnYyh0LGUpe3JldHVybiBudWxsIT10JiZ0Lmxlbmd0aD9EaSh0LGU9ZT09PW4/MTpWcyhlKSk6W119LEJuLmZsaXA9ZnVuY3Rpb24gX2ModCl7cmV0dXJuIF9vKHQsNTEyKX0sQm4uZmxvdz1BbCxCbi5mbG93UmlnaHQ9a2wsQm4uZnJvbVBhaXJzPWZ1bmN0aW9uIHljKHQpe2Zvcih2YXIgZT0tMSxuPW51bGw9PXQ/MDp0Lmxlbmd0aCxpPXt9OysrZTxuOyl7dmFyIHI9dFtlXTtpW3JbMF1dPXJbMV19cmV0dXJuIGl9LEJuLmZ1bmN0aW9ucz1mdW5jdGlvbiB2Yyh0KXtyZXR1cm4gbnVsbD09dD9bXTpVaSh0LHJsKHQpKX0sQm4uZnVuY3Rpb25zSW49ZnVuY3Rpb24gYmModCl7cmV0dXJuIG51bGw9PXQ/W106VWkodCxvbCh0KSl9LEJuLmdyb3VwQnk9VmEsQm4uaW5pdGlhbD1mdW5jdGlvbiB4Yyh0KXtyZXR1cm4gbnVsbCE9dCYmdC5sZW5ndGg/d3IodCwwLC0xKTpbXX0sQm4uaW50ZXJzZWN0aW9uPWZhLEJuLmludGVyc2VjdGlvbkJ5PW1hLEJuLmludGVyc2VjdGlvbldpdGg9Z2EsQm4uaW52ZXJ0PWVsLEJuLmludmVydEJ5PW5sLEJuLmludm9rZU1hcD1VYSxCbi5pdGVyYXRlZT1QbCxCbi5rZXlCeT1qYSxCbi5rZXlzPXJsLEJuLmtleXNJbj1vbCxCbi5tYXA9R2EsQm4ubWFwS2V5cz1mdW5jdGlvbiB3Yyh0LGUpe3ZhciBuPXt9O3JldHVybiBlPUFvKGUsMyksRmkodCwoZnVuY3Rpb24odCxpLHIpe2lpKG4sZSh0LGksciksdCl9KSksbn0sQm4ubWFwVmFsdWVzPWZ1bmN0aW9uIFNjKHQsZSl7dmFyIG49e307cmV0dXJuIGU9QW8oZSwzKSxGaSh0LChmdW5jdGlvbih0LGkscil7aWkobixpLGUodCxpLHIpKX0pKSxufSxCbi5tYXRjaGVzPWZ1bmN0aW9uIE1jKHQpe3JldHVybiBvcihhaSh0LDEpKX0sQm4ubWF0Y2hlc1Byb3BlcnR5PWZ1bmN0aW9uIEVjKHQsZSl7cmV0dXJuIGFyKHQsYWkoZSwxKSl9LEJuLm1lbW9pemU9ZXMsQm4ubWVyZ2U9YWwsQm4ubWVyZ2VXaXRoPXNsLEJuLm1ldGhvZD1ObCxCbi5tZXRob2RPZj1JbCxCbi5taXhpbj1PbCxCbi5uZWdhdGU9bnMsQm4ubnRoQXJnPWZ1bmN0aW9uIFRjKHQpe3JldHVybiB0PVZzKHQpLG1yKChmdW5jdGlvbihlKXtyZXR1cm4gbHIoZSx0KX0pKX0sQm4ub21pdD1sbCxCbi5vbWl0Qnk9ZnVuY3Rpb24gQ2ModCxlKXtyZXR1cm4gdWwodCxucyhBbyhlKSkpfSxCbi5vbmNlPWZ1bmN0aW9uIEFjKHQpe3JldHVybiAkYSgyLHQpfSxCbi5vcmRlckJ5PWZ1bmN0aW9uIGtjKHQsZSxpLHIpe3JldHVybiBudWxsPT10P1tdOihocyhlKXx8KGU9bnVsbD09ZT9bXTpbZV0pLGhzKGk9cj9uOmkpfHwoaT1udWxsPT1pP1tdOltpXSksY3IodCxlLGkpKX0sQm4ub3Zlcj16bCxCbi5vdmVyQXJncz1pcyxCbi5vdmVyRXZlcnk9RGwsQm4ub3ZlclNvbWU9QmwsQm4ucGFydGlhbD1ycyxCbi5wYXJ0aWFsUmlnaHQ9b3MsQm4ucGFydGl0aW9uPVdhLEJuLnBpY2s9Y2wsQm4ucGlja0J5PXVsLEJuLnByb3BlcnR5PUhsLEJuLnByb3BlcnR5T2Y9ZnVuY3Rpb24gTGModCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT10P246amkodCxlKX19LEJuLnB1bGw9eWEsQm4ucHVsbEFsbD12YSxCbi5wdWxsQWxsQnk9ZnVuY3Rpb24gUGModCxlLG4pe3JldHVybiB0JiZ0Lmxlbmd0aCYmZSYmZS5sZW5ndGg/aHIodCxlLEFvKG4sMikpOnR9LEJuLnB1bGxBbGxXaXRoPWZ1bmN0aW9uIE5jKHQsZSxpKXtyZXR1cm4gdCYmdC5sZW5ndGgmJmUmJmUubGVuZ3RoP2hyKHQsZSxuLGkpOnR9LEJuLnB1bGxBdD1iYSxCbi5yYW5nZT1GbCxCbi5yYW5nZVJpZ2h0PVZsLEJuLnJlYXJnPWFzLEJuLnJlamVjdD1mdW5jdGlvbiBJYyh0LGUpe3JldHVybihocyh0KT94ZTp6aSkodCxucyhBbyhlLDMpKSl9LEJuLnJlbW92ZT1mdW5jdGlvbiBPYyh0LGUpe3ZhciBuPVtdO2lmKCF0fHwhdC5sZW5ndGgpcmV0dXJuIG47dmFyIGk9LTEscj1bXSxvPXQubGVuZ3RoO2ZvcihlPUFvKGUsMyk7KytpPG87KXt2YXIgYT10W2ldO2UoYSxpLHQpJiYobi5wdXNoKGEpLHIucHVzaChpKSl9cmV0dXJuIGRyKHQsciksbn0sQm4ucmVzdD1mdW5jdGlvbiBSYyh0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBDdChpKTtyZXR1cm4gbXIodCxlPWU9PT1uP2U6VnMoZSkpfSxCbi5yZXZlcnNlPXhhLEJuLnNhbXBsZVNpemU9ZnVuY3Rpb24gemModCxlLGkpe3JldHVybiBlPShpP0hvKHQsZSxpKTplPT09bik/MTpWcyhlKSwoaHModCk/S246X3IpKHQsZSl9LEJuLnNldD1mdW5jdGlvbiBEYyh0LGUsbil7cmV0dXJuIG51bGw9PXQ/dDp5cih0LGUsbil9LEJuLnNldFdpdGg9ZnVuY3Rpb24gQmModCxlLGkscil7cmV0dXJuIHI9ImZ1bmN0aW9uIj09dHlwZW9mIHI/cjpuLG51bGw9PXQ/dDp5cih0LGUsaSxyKX0sQm4uc2h1ZmZsZT1mdW5jdGlvbiBIYyh0KXtyZXR1cm4oaHModCk/Wm46eHIpKHQpfSxCbi5zbGljZT1mdW5jdGlvbiBGYyh0LGUsaSl7dmFyIHI9bnVsbD09dD8wOnQubGVuZ3RoO3JldHVybiByPyhpJiYibnVtYmVyIiE9dHlwZW9mIGkmJkhvKHQsZSxpKT8oZT0wLGk9cik6KGU9bnVsbD09ZT8wOlZzKGUpLGk9aT09PW4/cjpWcyhpKSksd3IodCxlLGkpKTpbXX0sQm4uc29ydEJ5PXFhLEJuLnNvcnRlZFVuaXE9ZnVuY3Rpb24gVmModCl7cmV0dXJuIHQmJnQubGVuZ3RoP1RyKHQpOltdfSxCbi5zb3J0ZWRVbmlxQnk9ZnVuY3Rpb24gVWModCxlKXtyZXR1cm4gdCYmdC5sZW5ndGg/VHIodCxBbyhlLDIpKTpbXX0sQm4uc3BsaXQ9ZnVuY3Rpb24gamModCxlLGkpe3JldHVybiBpJiYibnVtYmVyIiE9dHlwZW9mIGkmJkhvKHQsZSxpKSYmKGU9aT1uKSwoaT1pPT09bj9oOmk+Pj4wKT8odD1Xcyh0KSkmJigic3RyaW5nIj09dHlwZW9mIGV8fG51bGwhPWUmJiFrcyhlKSkmJiEoZT1BcihlKSkmJlplKHQpP0ZyKG9uKHQpLDAsaSk6dC5zcGxpdChlLGkpOltdfSxCbi5zcHJlYWQ9ZnVuY3Rpb24gR2ModCxlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgQ3QoaSk7cmV0dXJuIGU9bnVsbD09ZT8wOmduKFZzKGUpLDApLG1yKChmdW5jdGlvbihuKXt2YXIgaT1uW2VdLHI9RnIobiwwLGUpO3JldHVybiBpJiZFZShyLGkpLG1lKHQsdGhpcyxyKX0pKX0sQm4udGFpbD1mdW5jdGlvbiBXYyh0KXt2YXIgZT1udWxsPT10PzA6dC5sZW5ndGg7cmV0dXJuIGU/d3IodCwxLGUpOltdfSxCbi50YWtlPWZ1bmN0aW9uIHFjKHQsZSxpKXtyZXR1cm4gdCYmdC5sZW5ndGg/d3IodCwwLChlPWl8fGU9PT1uPzE6VnMoZSkpPDA/MDplKTpbXX0sQm4udGFrZVJpZ2h0PWZ1bmN0aW9uIFljKHQsZSxpKXt2YXIgcj1udWxsPT10PzA6dC5sZW5ndGg7cmV0dXJuIHI/d3IodCwoZT1yLShlPWl8fGU9PT1uPzE6VnMoZSkpKTwwPzA6ZSxyKTpbXX0sQm4udGFrZVJpZ2h0V2hpbGU9ZnVuY3Rpb24gWGModCxlKXtyZXR1cm4gdCYmdC5sZW5ndGg/TnIodCxBbyhlLDMpLCExLCEwKTpbXX0sQm4udGFrZVdoaWxlPWZ1bmN0aW9uICRjKHQsZSl7cmV0dXJuIHQmJnQubGVuZ3RoP05yKHQsQW8oZSwzKSk6W119LEJuLnRhcD1mdW5jdGlvbiBLYyh0LGUpe3JldHVybiBlKHQpLHR9LEJuLnRocm90dGxlPWZ1bmN0aW9uIFpjKHQsZSxuKXt2YXIgcj0hMCxvPSEwO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBDdChpKTtyZXR1cm4gU3MobikmJihyPSJsZWFkaW5nImluIG4/ISFuLmxlYWRpbmc6cixvPSJ0cmFpbGluZyJpbiBuPyEhbi50cmFpbGluZzpvKSxKYSh0LGUse2xlYWRpbmc6cixtYXhXYWl0OmUsdHJhaWxpbmc6b30pfSxCbi50aHJ1PU9hLEJuLnRvQXJyYXk9SHMsQm4udG9QYWlycz1obCxCbi50b1BhaXJzSW49ZGwsQm4udG9QYXRoPWZ1bmN0aW9uIEpjKHQpe3JldHVybiBocyh0KT9NZSh0LHJhKTpPcyh0KT9bdF06WHIobmEoV3ModCkpKX0sQm4udG9QbGFpbk9iamVjdD1HcyxCbi50cmFuc2Zvcm09ZnVuY3Rpb24gUWModCxlLG4pe3ZhciBpPWhzKHQpLHI9aXx8Z3ModCl8fFJzKHQpO2lmKGU9QW8oZSw0KSxudWxsPT1uKXt2YXIgbz10JiZ0LmNvbnN0cnVjdG9yO249cj9pP25ldyBvOltdOlNzKHQpJiZicyhvKT9IbihxdCh0KSk6e319cmV0dXJuKHI/X2U6RmkpKHQsKGZ1bmN0aW9uKHQsaSxyKXtyZXR1cm4gZShuLHQsaSxyKX0pKSxufSxCbi51bmFyeT1mdW5jdGlvbiB0dSh0KXtyZXR1cm4gWGEodCwxKX0sQm4udW5pb249d2EsQm4udW5pb25CeT1TYSxCbi51bmlvbldpdGg9TWEsQm4udW5pcT1mdW5jdGlvbiBldSh0KXtyZXR1cm4gdCYmdC5sZW5ndGg/a3IodCk6W119LEJuLnVuaXFCeT1mdW5jdGlvbiBudSh0LGUpe3JldHVybiB0JiZ0Lmxlbmd0aD9rcih0LEFvKGUsMikpOltdfSxCbi51bmlxV2l0aD1mdW5jdGlvbiBpdSh0LGUpe3JldHVybiBlPSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6bix0JiZ0Lmxlbmd0aD9rcih0LG4sZSk6W119LEJuLnVuc2V0PWZ1bmN0aW9uIHJ1KHQsZSl7cmV0dXJuIG51bGw9PXR8fExyKHQsZSl9LEJuLnVuemlwPUVhLEJuLnVuemlwV2l0aD1UYSxCbi51cGRhdGU9ZnVuY3Rpb24gb3UodCxlLG4pe3JldHVybiBudWxsPT10P3Q6UHIodCxlLERyKG4pKX0sQm4udXBkYXRlV2l0aD1mdW5jdGlvbiBhdSh0LGUsaSxyKXtyZXR1cm4gcj0iZnVuY3Rpb24iPT10eXBlb2Ygcj9yOm4sbnVsbD09dD90OlByKHQsZSxEcihpKSxyKX0sQm4udmFsdWVzPXBsLEJuLnZhbHVlc0luPWZ1bmN0aW9uIHN1KHQpe3JldHVybiBudWxsPT10P1tdOmplKHQsb2wodCkpfSxCbi53aXRob3V0PUNhLEJuLndvcmRzPU1sLEJuLndyYXA9ZnVuY3Rpb24gbHUodCxlKXtyZXR1cm4gcnMoRHIoZSksdCl9LEJuLnhvcj1BYSxCbi54b3JCeT1rYSxCbi54b3JXaXRoPUxhLEJuLnppcD1QYSxCbi56aXBPYmplY3Q9ZnVuY3Rpb24gY3UodCxlKXtyZXR1cm4gUnIodHx8W10sZXx8W10sUW4pfSxCbi56aXBPYmplY3REZWVwPWZ1bmN0aW9uIHV1KHQsZSl7cmV0dXJuIFJyKHR8fFtdLGV8fFtdLHlyKX0sQm4uemlwV2l0aD1OYSxCbi5lbnRyaWVzPWhsLEJuLmVudHJpZXNJbj1kbCxCbi5leHRlbmQ9WXMsQm4uZXh0ZW5kV2l0aD1YcyxPbChCbixCbiksQm4uYWRkPVdsLEJuLmF0dGVtcHQ9RWwsQm4uY2FtZWxDYXNlPWZsLEJuLmNhcGl0YWxpemU9bWwsQm4uY2VpbD1xbCxCbi5jbGFtcD1mdW5jdGlvbiBodSh0LGUsaSl7cmV0dXJuIGk9PT1uJiYoaT1lLGU9biksaSE9PW4mJihpPShpPWpzKGkpKT09aT9pOjApLGUhPT1uJiYoZT0oZT1qcyhlKSk9PWU/ZTowKSxvaShqcyh0KSxlLGkpfSxCbi5jbG9uZT1mdW5jdGlvbiBkdSh0KXtyZXR1cm4gYWkodCw0KX0sQm4uY2xvbmVEZWVwPWZ1bmN0aW9uIHB1KHQpe3JldHVybiBhaSh0LDUpfSxCbi5jbG9uZURlZXBXaXRoPWZ1bmN0aW9uIGZ1KHQsZSl7cmV0dXJuIGFpKHQsNSxlPSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6bil9LEJuLmNsb25lV2l0aD1mdW5jdGlvbiBtdSh0LGUpe3JldHVybiBhaSh0LDQsZT0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOm4pfSxCbi5jb25mb3Jtc1RvPWZ1bmN0aW9uIGd1KHQsZSl7cmV0dXJuIG51bGw9PWV8fHNpKHQsZSxybChlKSl9LEJuLmRlYnVycj1nbCxCbi5kZWZhdWx0VG89ZnVuY3Rpb24gX3UodCxlKXtyZXR1cm4gbnVsbD09dHx8dCE9dD9lOnR9LEJuLmRpdmlkZT1ZbCxCbi5lbmRzV2l0aD1mdW5jdGlvbiB5dSh0LGUsaSl7dD1Xcyh0KSxlPUFyKGUpO3ZhciByPXQubGVuZ3RoLG89aT1pPT09bj9yOm9pKFZzKGkpLDAscik7cmV0dXJuKGktPWUubGVuZ3RoKT49MCYmdC5zbGljZShpLG8pPT1lfSxCbi5lcT1zcyxCbi5lc2NhcGU9ZnVuY3Rpb24gdnUodCl7cmV0dXJuKHQ9V3ModCkpJiZxLnRlc3QodCk/dC5yZXBsYWNlKEcsJGUpOnR9LEJuLmVzY2FwZVJlZ0V4cD1mdW5jdGlvbiBidSh0KXtyZXR1cm4odD1Xcyh0KSkmJnR0LnRlc3QodCk/dC5yZXBsYWNlKFEsIlxcJCYiKTp0fSxCbi5ldmVyeT1mdW5jdGlvbiB4dSh0LGUsaSl7dmFyIHI9aHModCk/YmU6T2k7cmV0dXJuIGkmJkhvKHQsZSxpKSYmKGU9bikscih0LEFvKGUsMykpfSxCbi5maW5kPURhLEJuLmZpbmRJbmRleD11YSxCbi5maW5kS2V5PWZ1bmN0aW9uIHd1KHQsZSl7cmV0dXJuIExlKHQsQW8oZSwzKSxGaSl9LEJuLmZpbmRMYXN0PUJhLEJuLmZpbmRMYXN0SW5kZXg9aGEsQm4uZmluZExhc3RLZXk9ZnVuY3Rpb24gU3UodCxlKXtyZXR1cm4gTGUodCxBbyhlLDMpLFZpKX0sQm4uZmxvb3I9WGwsQm4uZm9yRWFjaD1IYSxCbi5mb3JFYWNoUmlnaHQ9RmEsQm4uZm9ySW49ZnVuY3Rpb24gTXUodCxlKXtyZXR1cm4gbnVsbD09dD90OkJpKHQsQW8oZSwzKSxvbCl9LEJuLmZvckluUmlnaHQ9ZnVuY3Rpb24gRXUodCxlKXtyZXR1cm4gbnVsbD09dD90OkhpKHQsQW8oZSwzKSxvbCl9LEJuLmZvck93bj1mdW5jdGlvbiBUdSh0LGUpe3JldHVybiB0JiZGaSh0LEFvKGUsMykpfSxCbi5mb3JPd25SaWdodD1mdW5jdGlvbiBDdSh0LGUpe3JldHVybiB0JiZWaSh0LEFvKGUsMykpfSxCbi5nZXQ9UXMsQm4uZ3Q9bHMsQm4uZ3RlPWNzLEJuLmhhcz1mdW5jdGlvbiBBdSh0LGUpe3JldHVybiBudWxsIT10JiZSbyh0LGUsWWkpfSxCbi5oYXNJbj10bCxCbi5oZWFkPXBhLEJuLmlkZW50aXR5PUxsLEJuLmluY2x1ZGVzPWZ1bmN0aW9uIGt1KHQsZSxuLGkpe3Q9ZnModCk/dDpwbCh0KSxuPW4mJiFpP1ZzKG4pOjA7dmFyIHI9dC5sZW5ndGg7cmV0dXJuIG48MCYmKG49Z24ocituLDApKSxJcyh0KT9uPD1yJiZ0LmluZGV4T2YoZSxuKT4tMTohIXImJk5lKHQsZSxuKT4tMX0sQm4uaW5kZXhPZj1mdW5jdGlvbiBMdSh0LGUsbil7dmFyIGk9bnVsbD09dD8wOnQubGVuZ3RoO2lmKCFpKXJldHVybi0xO3ZhciByPW51bGw9PW4/MDpWcyhuKTtyZXR1cm4gcjwwJiYocj1nbihpK3IsMCkpLE5lKHQsZSxyKX0sQm4uaW5SYW5nZT1mdW5jdGlvbiBQdSh0LGUsaSl7cmV0dXJuIGU9RnMoZSksaT09PW4/KGk9ZSxlPTApOmk9RnMoaSksKGZ1bmN0aW9uIHIodCxlLG4pe3JldHVybiB0Pj1fbihlLG4pJiZ0PGduKGUsbil9KSh0PWpzKHQpLGUsaSl9LEJuLmludm9rZT1pbCxCbi5pc0FyZ3VtZW50cz11cyxCbi5pc0FycmF5PWhzLEJuLmlzQXJyYXlCdWZmZXI9ZHMsQm4uaXNBcnJheUxpa2U9ZnMsQm4uaXNBcnJheUxpa2VPYmplY3Q9bXMsQm4uaXNCb29sZWFuPWZ1bmN0aW9uIE51KHQpe3JldHVybiEwPT09dHx8ITE9PT10fHxNcyh0KSYmV2kodCk9PW19LEJuLmlzQnVmZmVyPWdzLEJuLmlzRGF0ZT1fcyxCbi5pc0VsZW1lbnQ9ZnVuY3Rpb24gSXUodCl7cmV0dXJuIE1zKHQpJiYxPT09dC5ub2RlVHlwZSYmIUFzKHQpfSxCbi5pc0VtcHR5PWZ1bmN0aW9uIE91KHQpe2lmKG51bGw9PXQpcmV0dXJuITA7aWYoZnModCkmJihocyh0KXx8InN0cmluZyI9PXR5cGVvZiB0fHwiZnVuY3Rpb24iPT10eXBlb2YgdC5zcGxpY2V8fGdzKHQpfHxScyh0KXx8dXModCkpKXJldHVybiF0Lmxlbmd0aDt2YXIgZT1Pbyh0KTtpZihlPT1ifHxlPT1FKXJldHVybiF0LnNpemU7aWYoam8odCkpcmV0dXJuIW5yKHQpLmxlbmd0aDtmb3IodmFyIG4gaW4gdClpZihOdC5jYWxsKHQsbikpcmV0dXJuITE7cmV0dXJuITB9LEJuLmlzRXF1YWw9ZnVuY3Rpb24gUnUodCxlKXtyZXR1cm4gSmkodCxlKX0sQm4uaXNFcXVhbFdpdGg9ZnVuY3Rpb24genUodCxlLGkpe3ZhciByPShpPSJmdW5jdGlvbiI9PXR5cGVvZiBpP2k6bik/aSh0LGUpOm47cmV0dXJuIHI9PT1uP0ppKHQsZSxuLGkpOiEhcn0sQm4uaXNFcnJvcj12cyxCbi5pc0Zpbml0ZT1mdW5jdGlvbiBEdSh0KXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQmJnBuKHQpfSxCbi5pc0Z1bmN0aW9uPWJzLEJuLmlzSW50ZWdlcj14cyxCbi5pc0xlbmd0aD13cyxCbi5pc01hcD1FcyxCbi5pc01hdGNoPWZ1bmN0aW9uIEJ1KHQsZSl7cmV0dXJuIHQ9PT1lfHxRaSh0LGUsTG8oZSkpfSxCbi5pc01hdGNoV2l0aD1mdW5jdGlvbiBIdSh0LGUsaSl7cmV0dXJuIGk9ImZ1bmN0aW9uIj09dHlwZW9mIGk/aTpuLFFpKHQsZSxMbyhlKSxpKX0sQm4uaXNOYU49ZnVuY3Rpb24gRnUodCl7cmV0dXJuIENzKHQpJiZ0IT0rdH0sQm4uaXNOYXRpdmU9ZnVuY3Rpb24gVnUodCl7aWYoVW8odCkpdGhyb3cgbmV3IHh0KCJVbnN1cHBvcnRlZCBjb3JlLWpzIHVzZS4gVHJ5IGh0dHBzOi8vbnBtcy5pby9zZWFyY2g/cT1wb255ZmlsbC4iKTtyZXR1cm4gdHIodCl9LEJuLmlzTmlsPWZ1bmN0aW9uIFV1KHQpe3JldHVybiBudWxsPT10fSxCbi5pc051bGw9ZnVuY3Rpb24ganUodCl7cmV0dXJuIG51bGw9PT10fSxCbi5pc051bWJlcj1DcyxCbi5pc09iamVjdD1TcyxCbi5pc09iamVjdExpa2U9TXMsQm4uaXNQbGFpbk9iamVjdD1BcyxCbi5pc1JlZ0V4cD1rcyxCbi5pc1NhZmVJbnRlZ2VyPWZ1bmN0aW9uIEd1KHQpe3JldHVybiB4cyh0KSYmdD49LTkwMDcxOTkyNTQ3NDA5OTEmJnQ8PWN9LEJuLmlzU2V0PVBzLEJuLmlzU3RyaW5nPUlzLEJuLmlzU3ltYm9sPU9zLEJuLmlzVHlwZWRBcnJheT1ScyxCbi5pc1VuZGVmaW5lZD1mdW5jdGlvbiBXdSh0KXtyZXR1cm4gdD09PW59LEJuLmlzV2Vha01hcD1mdW5jdGlvbiBxdSh0KXtyZXR1cm4gTXModCkmJk9vKHQpPT1BfSxCbi5pc1dlYWtTZXQ9ZnVuY3Rpb24gWXUodCl7cmV0dXJuIE1zKHQpJiYiW29iamVjdCBXZWFrU2V0XSI9PVdpKHQpfSxCbi5qb2luPWZ1bmN0aW9uIFh1KHQsZSl7cmV0dXJuIG51bGw9PXQ/IiI6Zm4uY2FsbCh0LGUpfSxCbi5rZWJhYkNhc2U9X2wsQm4ubGFzdD1fYSxCbi5sYXN0SW5kZXhPZj1mdW5jdGlvbiAkdSh0LGUsaSl7dmFyIHI9bnVsbD09dD8wOnQubGVuZ3RoO2lmKCFyKXJldHVybi0xO3ZhciBvPXI7cmV0dXJuIGkhPT1uJiYobz0obz1WcyhpKSk8MD9nbihyK28sMCk6X24obyxyLTEpKSxlPT1lPyhmdW5jdGlvbiBhKHQsZSxuKXtmb3IodmFyIGk9bisxO2ktLTspaWYodFtpXT09PWUpcmV0dXJuIGk7cmV0dXJuIGl9KSh0LGUsbyk6UGUodCxPZSxvLCEwKX0sQm4ubG93ZXJDYXNlPXlsLEJuLmxvd2VyRmlyc3Q9dmwsQm4ubHQ9RHMsQm4ubHRlPUJzLEJuLm1heD1mdW5jdGlvbiBLdSh0KXtyZXR1cm4gdCYmdC5sZW5ndGg/UmkodCxMbCxxaSk6bn0sQm4ubWF4Qnk9ZnVuY3Rpb24gWnUodCxlKXtyZXR1cm4gdCYmdC5sZW5ndGg/UmkodCxBbyhlLDIpLHFpKTpufSxCbi5tZWFuPWZ1bmN0aW9uIEp1KHQpe3JldHVybiBSZSh0LExsKX0sQm4ubWVhbkJ5PWZ1bmN0aW9uIFF1KHQsZSl7cmV0dXJuIFJlKHQsQW8oZSwyKSl9LEJuLm1pbj1mdW5jdGlvbiB0aCh0KXtyZXR1cm4gdCYmdC5sZW5ndGg/UmkodCxMbCxpcik6bn0sQm4ubWluQnk9ZnVuY3Rpb24gZWgodCxlKXtyZXR1cm4gdCYmdC5sZW5ndGg/UmkodCxBbyhlLDIpLGlyKTpufSxCbi5zdHViQXJyYXk9VWwsQm4uc3R1YkZhbHNlPWpsLEJuLnN0dWJPYmplY3Q9ZnVuY3Rpb24gbmgoKXtyZXR1cm57fX0sQm4uc3R1YlN0cmluZz1mdW5jdGlvbiBpaCgpe3JldHVybiIifSxCbi5zdHViVHJ1ZT1mdW5jdGlvbiByaCgpe3JldHVybiEwfSxCbi5tdWx0aXBseT0kbCxCbi5udGg9ZnVuY3Rpb24gb2godCxlKXtyZXR1cm4gdCYmdC5sZW5ndGg/bHIodCxWcyhlKSk6bn0sQm4ubm9Db25mbGljdD1mdW5jdGlvbiBhaCgpe3JldHVybiBpZS5fPT09dGhpcyYmKGllLl89RHQpLHRoaXN9LEJuLm5vb3A9UmwsQm4ubm93PVlhLEJuLnBhZD1mdW5jdGlvbiBzaCh0LGUsbil7dD1Xcyh0KTt2YXIgaT0oZT1WcyhlKSk/cm4odCk6MDtpZighZXx8aT49ZSlyZXR1cm4gdDt2YXIgcj0oZS1pKS8yO3JldHVybiBjbyh1bihyKSxuKSt0K2NvKGNuKHIpLG4pfSxCbi5wYWRFbmQ9ZnVuY3Rpb24gbGgodCxlLG4pe3Q9V3ModCk7dmFyIGk9KGU9VnMoZSkpP3JuKHQpOjA7cmV0dXJuIGUmJmk8ZT90K2NvKGUtaSxuKTp0fSxCbi5wYWRTdGFydD1mdW5jdGlvbiBjaCh0LGUsbil7dD1Xcyh0KTt2YXIgaT0oZT1WcyhlKSk/cm4odCk6MDtyZXR1cm4gZSYmaTxlP2NvKGUtaSxuKSt0OnR9LEJuLnBhcnNlSW50PWZ1bmN0aW9uIHVoKHQsZSxuKXtyZXR1cm4gbnx8bnVsbD09ZT9lPTA6ZSYmKGU9K2UpLHZuKFdzKHQpLnJlcGxhY2UoZXQsIiIpLGV8fDApfSxCbi5yYW5kb209ZnVuY3Rpb24gaGgodCxlLGkpe2lmKGkmJiJib29sZWFuIiE9dHlwZW9mIGkmJkhvKHQsZSxpKSYmKGU9aT1uKSxpPT09biYmKCJib29sZWFuIj09dHlwZW9mIGU/KGk9ZSxlPW4pOiJib29sZWFuIj09dHlwZW9mIHQmJihpPXQsdD1uKSksdD09PW4mJmU9PT1uPyh0PTAsZT0xKToodD1Gcyh0KSxlPT09bj8oZT10LHQ9MCk6ZT1GcyhlKSksdD5lKXt2YXIgcj10O3Q9ZSxlPXJ9aWYoaXx8dCUxfHxlJTEpe3ZhciBvPWJuKCk7cmV0dXJuIF9uKHQrbyooZS10K1F0KCIxZS0iKygobysiIikubGVuZ3RoLTEpKSksZSl9cmV0dXJuIHByKHQsZSl9LEJuLnJlZHVjZT1mdW5jdGlvbiBkaCh0LGUsbil7dmFyIGk9aHModCk/VGU6QmUscj1hcmd1bWVudHMubGVuZ3RoPDM7cmV0dXJuIGkodCxBbyhlLDQpLG4scixOaSl9LEJuLnJlZHVjZVJpZ2h0PWZ1bmN0aW9uIHBoKHQsZSxuKXt2YXIgaT1ocyh0KT9DZTpCZSxyPWFyZ3VtZW50cy5sZW5ndGg8MztyZXR1cm4gaSh0LEFvKGUsNCksbixyLElpKX0sQm4ucmVwZWF0PWZ1bmN0aW9uIGZoKHQsZSxpKXtyZXR1cm4gZT0oaT9Ibyh0LGUsaSk6ZT09PW4pPzE6VnMoZSksZnIoV3ModCksZSl9LEJuLnJlcGxhY2U9ZnVuY3Rpb24gbWgoKXt2YXIgdD1hcmd1bWVudHMsZT1Xcyh0WzBdKTtyZXR1cm4gdC5sZW5ndGg8Mz9lOmUucmVwbGFjZSh0WzFdLHRbMl0pfSxCbi5yZXN1bHQ9ZnVuY3Rpb24gZ2godCxlLGkpe3ZhciByPS0xLG89KGU9QnIoZSx0KSkubGVuZ3RoO2ZvcihvfHwobz0xLHQ9bik7KytyPG87KXt2YXIgYT1udWxsPT10P246dFtyYShlW3JdKV07YT09PW4mJihyPW8sYT1pKSx0PWJzKGEpP2EuY2FsbCh0KTphfXJldHVybiB0fSxCbi5yb3VuZD1LbCxCbi5ydW5JbkNvbnRleHQ9dCxCbi5zYW1wbGU9ZnVuY3Rpb24gX2godCl7cmV0dXJuKGhzKHQpPyRuOmdyKSh0KX0sQm4uc2l6ZT1mdW5jdGlvbiB5aCh0KXtpZihudWxsPT10KXJldHVybiAwO2lmKGZzKHQpKXJldHVybiBJcyh0KT9ybih0KTp0Lmxlbmd0aDt2YXIgZT1Pbyh0KTtyZXR1cm4gZT09Ynx8ZT09RT90LnNpemU6bnIodCkubGVuZ3RofSxCbi5zbmFrZUNhc2U9YmwsQm4uc29tZT1mdW5jdGlvbiB2aCh0LGUsaSl7dmFyIHI9aHModCk/QWU6U3I7cmV0dXJuIGkmJkhvKHQsZSxpKSYmKGU9bikscih0LEFvKGUsMykpfSxCbi5zb3J0ZWRJbmRleD1mdW5jdGlvbiBiaCh0LGUpe3JldHVybiBNcih0LGUpfSxCbi5zb3J0ZWRJbmRleEJ5PWZ1bmN0aW9uIHhoKHQsZSxuKXtyZXR1cm4gRXIodCxlLEFvKG4sMikpfSxCbi5zb3J0ZWRJbmRleE9mPWZ1bmN0aW9uIHdoKHQsZSl7dmFyIG49bnVsbD09dD8wOnQubGVuZ3RoO2lmKG4pe3ZhciBpPU1yKHQsZSk7aWYoaTxuJiZzcyh0W2ldLGUpKXJldHVybiBpfXJldHVybi0xfSxCbi5zb3J0ZWRMYXN0SW5kZXg9ZnVuY3Rpb24gU2godCxlKXtyZXR1cm4gTXIodCxlLCEwKX0sQm4uc29ydGVkTGFzdEluZGV4Qnk9ZnVuY3Rpb24gTWgodCxlLG4pe3JldHVybiBFcih0LGUsQW8obiwyKSwhMCl9LEJuLnNvcnRlZExhc3RJbmRleE9mPWZ1bmN0aW9uIEVoKHQsZSl7aWYobnVsbCE9dCYmdC5sZW5ndGgpe3ZhciBuPU1yKHQsZSwhMCktMTtpZihzcyh0W25dLGUpKXJldHVybiBufXJldHVybi0xfSxCbi5zdGFydENhc2U9eGwsQm4uc3RhcnRzV2l0aD1mdW5jdGlvbiBUaCh0LGUsbil7cmV0dXJuIHQ9V3ModCksbj1udWxsPT1uPzA6b2koVnMobiksMCx0Lmxlbmd0aCksZT1BcihlKSx0LnNsaWNlKG4sbitlLmxlbmd0aCk9PWV9LEJuLnN1YnRyYWN0PVpsLEJuLnN1bT1mdW5jdGlvbiBDaCh0KXtyZXR1cm4gdCYmdC5sZW5ndGg/SGUodCxMbCk6MH0sQm4uc3VtQnk9ZnVuY3Rpb24gQWgodCxlKXtyZXR1cm4gdCYmdC5sZW5ndGg/SGUodCxBbyhlLDIpKTowfSxCbi50ZW1wbGF0ZT1mdW5jdGlvbiBraCh0LGUsaSl7dmFyIHI9Qm4udGVtcGxhdGVTZXR0aW5ncztpJiZIbyh0LGUsaSkmJihlPW4pLHQ9V3ModCksZT1Ycyh7fSxlLHIseW8pO3ZhciBvLGEscz1Ycyh7fSxlLmltcG9ydHMsci5pbXBvcnRzLHlvKSxsPXJsKHMpLGM9amUocyxsKSx1PTAsaD1lLmludGVycG9sYXRlfHxfdCxkPSJfX3AgKz0gJyIscD1FdCgoZS5lc2NhcGV8fF90KS5zb3VyY2UrInwiK2guc291cmNlKyJ8IisoaD09PSQ/Y3Q6X3QpLnNvdXJjZSsifCIrKGUuZXZhbHVhdGV8fF90KS5zb3VyY2UrInwkIiwiZyIpLGY9Ii8vIyBzb3VyY2VVUkw9IisoTnQuY2FsbChlLCJzb3VyY2VVUkwiKT8oZS5zb3VyY2VVUkwrIiIpLnJlcGxhY2UoL1xzL2csIiAiKToibG9kYXNoLnRlbXBsYXRlU291cmNlc1siKyArKyR0KyJdIikrIlxuIjt0LnJlcGxhY2UocCwoZnVuY3Rpb24oZSxuLGkscixzLGwpe3JldHVybiBpfHwoaT1yKSxkKz10LnNsaWNlKHUsbCkucmVwbGFjZSh5dCxLZSksbiYmKG89ITAsZCs9IicgK1xuX19lKCIrbisiKSArXG4nIikscyYmKGE9ITAsZCs9Iic7XG4iK3MrIjtcbl9fcCArPSAnIiksaSYmKGQrPSInICtcbigoX190ID0gKCIraSsiKSkgPT0gbnVsbCA/ICcnIDogX190KSArXG4nIiksdT1sK2UubGVuZ3RoLGV9KSksZCs9Iic7XG4iO3ZhciBtPU50LmNhbGwoZSwidmFyaWFibGUiKSYmZS52YXJpYWJsZTtpZihtKXtpZihzdC50ZXN0KG0pKXRocm93IG5ldyB4dCgiSW52YWxpZCBgdmFyaWFibGVgIG9wdGlvbiBwYXNzZWQgaW50byBgXy50ZW1wbGF0ZWAiKX1lbHNlIGQ9IndpdGggKG9iaikge1xuIitkKyJcbn1cbiI7ZD0oYT9kLnJlcGxhY2UoRiwiIik6ZCkucmVwbGFjZShWLCIkMSIpLnJlcGxhY2UoVSwiJDE7IiksZD0iZnVuY3Rpb24oIisobXx8Im9iaiIpKyIpIHtcbiIrKG0/IiI6Im9iaiB8fCAob2JqID0ge30pO1xuIikrInZhciBfX3QsIF9fcCA9ICcnIisobz8iLCBfX2UgPSBfLmVzY2FwZSI6IiIpKyhhPyIsIF9faiA9IEFycmF5LnByb3RvdHlwZS5qb2luO1xuZnVuY3Rpb24gcHJpbnQoKSB7IF9fcCArPSBfX2ouY2FsbChhcmd1bWVudHMsICcnKSB9XG4iOiI7XG4iKStkKyJyZXR1cm4gX19wXG59Ijt2YXIgZz1FbCgoZnVuY3Rpb24oKXtyZXR1cm4gd3QobCxmKyJyZXR1cm4gIitkKS5hcHBseShuLGMpfSkpO2lmKGcuc291cmNlPWQsdnMoZykpdGhyb3cgZztyZXR1cm4gZ30sQm4udGltZXM9ZnVuY3Rpb24gTGgodCxlKXtpZigodD1Wcyh0KSk8MXx8dD5jKXJldHVybltdO3ZhciBuPWgsaT1fbih0LGgpO2U9QW8oZSksdC09aDtmb3IodmFyIHI9RmUoaSxlKTsrK248dDspZShuKTtyZXR1cm4gcn0sQm4udG9GaW5pdGU9RnMsQm4udG9JbnRlZ2VyPVZzLEJuLnRvTGVuZ3RoPVVzLEJuLnRvTG93ZXI9ZnVuY3Rpb24gUGgodCl7cmV0dXJuIFdzKHQpLnRvTG93ZXJDYXNlKCl9LEJuLnRvTnVtYmVyPWpzLEJuLnRvU2FmZUludGVnZXI9ZnVuY3Rpb24gTmgodCl7cmV0dXJuIHQ/b2koVnModCksLTkwMDcxOTkyNTQ3NDA5OTEsYyk6MD09PXQ/dDowfSxCbi50b1N0cmluZz1XcyxCbi50b1VwcGVyPWZ1bmN0aW9uIEloKHQpe3JldHVybiBXcyh0KS50b1VwcGVyQ2FzZSgpfSxCbi50cmltPWZ1bmN0aW9uIE9oKHQsZSxpKXtpZigodD1Xcyh0KSkmJihpfHxlPT09bikpcmV0dXJuIFZlKHQpO2lmKCF0fHwhKGU9QXIoZSkpKXJldHVybiB0O3ZhciByPW9uKHQpLG89b24oZSk7cmV0dXJuIEZyKHIsV2UocixvKSxxZShyLG8pKzEpLmpvaW4oIiIpfSxCbi50cmltRW5kPWZ1bmN0aW9uIFJoKHQsZSxpKXtpZigodD1Xcyh0KSkmJihpfHxlPT09bikpcmV0dXJuIHQuc2xpY2UoMCxhbih0KSsxKTtpZighdHx8IShlPUFyKGUpKSlyZXR1cm4gdDt2YXIgcj1vbih0KTtyZXR1cm4gRnIociwwLHFlKHIsb24oZSkpKzEpLmpvaW4oIiIpfSxCbi50cmltU3RhcnQ9ZnVuY3Rpb24gemgodCxlLGkpe2lmKCh0PVdzKHQpKSYmKGl8fGU9PT1uKSlyZXR1cm4gdC5yZXBsYWNlKGV0LCIiKTtpZighdHx8IShlPUFyKGUpKSlyZXR1cm4gdDt2YXIgcj1vbih0KTtyZXR1cm4gRnIocixXZShyLG9uKGUpKSkuam9pbigiIil9LEJuLnRydW5jYXRlPWZ1bmN0aW9uIERoKHQsZSl7dmFyIGk9MzAscj0iLi4uIjtpZihTcyhlKSl7dmFyIG89InNlcGFyYXRvciJpbiBlP2Uuc2VwYXJhdG9yOm87aT0ibGVuZ3RoImluIGU/VnMoZS5sZW5ndGgpOmkscj0ib21pc3Npb24iaW4gZT9BcihlLm9taXNzaW9uKTpyfXZhciBhPSh0PVdzKHQpKS5sZW5ndGg7aWYoWmUodCkpe3ZhciBzPW9uKHQpO2E9cy5sZW5ndGh9aWYoaT49YSlyZXR1cm4gdDt2YXIgbD1pLXJuKHIpO2lmKGw8MSlyZXR1cm4gcjt2YXIgYz1zP0ZyKHMsMCxsKS5qb2luKCIiKTp0LnNsaWNlKDAsbCk7aWYobz09PW4pcmV0dXJuIGMrcjtpZihzJiYobCs9Yy5sZW5ndGgtbCksa3Mobykpe2lmKHQuc2xpY2UobCkuc2VhcmNoKG8pKXt2YXIgdSxoPWM7Zm9yKG8uZ2xvYmFsfHwobz1FdChvLnNvdXJjZSxXcyh1dC5leGVjKG8pKSsiZyIpKSxvLmxhc3RJbmRleD0wO3U9by5leGVjKGgpOyl2YXIgZD11LmluZGV4O2M9Yy5zbGljZSgwLGQ9PT1uP2w6ZCl9fWVsc2UgaWYodC5pbmRleE9mKEFyKG8pLGwpIT1sKXt2YXIgcD1jLmxhc3RJbmRleE9mKG8pO3A+LTEmJihjPWMuc2xpY2UoMCxwKSl9cmV0dXJuIGMrcn0sQm4udW5lc2NhcGU9ZnVuY3Rpb24gQmgodCl7cmV0dXJuKHQ9V3ModCkpJiZXLnRlc3QodCk/dC5yZXBsYWNlKGosc24pOnR9LEJuLnVuaXF1ZUlkPWZ1bmN0aW9uIEhoKHQpe3ZhciBlPSsrSXQ7cmV0dXJuIFdzKHQpK2V9LEJuLnVwcGVyQ2FzZT13bCxCbi51cHBlckZpcnN0PVNsLEJuLmVhY2g9SGEsQm4uZWFjaFJpZ2h0PUZhLEJuLmZpcnN0PXBhLE9sKEJuLChHbD17fSxGaShCbiwoZnVuY3Rpb24odCxlKXtOdC5jYWxsKEJuLnByb3RvdHlwZSxlKXx8KEdsW2VdPXQpfSkpLEdsKSx7Y2hhaW46ITF9KSxCbi5WRVJTSU9OPSI0LjE3LjIxIixfZShbImJpbmQiLCJiaW5kS2V5IiwiY3VycnkiLCJjdXJyeVJpZ2h0IiwicGFydGlhbCIsInBhcnRpYWxSaWdodCJdLChmdW5jdGlvbih0KXtCblt0XS5wbGFjZWhvbGRlcj1Cbn0pKSxfZShbImRyb3AiLCJ0YWtlIl0sKGZ1bmN0aW9uKHQsZSl7VW4ucHJvdG90eXBlW3RdPWZ1bmN0aW9uKGkpe2k9aT09PW4/MTpnbihWcyhpKSwwKTt2YXIgcj10aGlzLl9fZmlsdGVyZWRfXyYmIWU/bmV3IFVuKHRoaXMpOnRoaXMuY2xvbmUoKTtyZXR1cm4gci5fX2ZpbHRlcmVkX18/ci5fX3Rha2VDb3VudF9fPV9uKGksci5fX3Rha2VDb3VudF9fKTpyLl9fdmlld3NfXy5wdXNoKHtzaXplOl9uKGksaCksdHlwZTp0KyhyLl9fZGlyX188MD8iUmlnaHQiOiIiKX0pLHJ9LFVuLnByb3RvdHlwZVt0KyJSaWdodCJdPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnJldmVyc2UoKVt0XShlKS5yZXZlcnNlKCl9fSkpLF9lKFsiZmlsdGVyIiwibWFwIiwidGFrZVdoaWxlIl0sKGZ1bmN0aW9uKHQsZSl7dmFyIG49ZSsxLGk9MT09bnx8Mz09bjtVbi5wcm90b3R5cGVbdF09ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jbG9uZSgpO3JldHVybiBlLl9faXRlcmF0ZWVzX18ucHVzaCh7aXRlcmF0ZWU6QW8odCwzKSx0eXBlOm59KSxlLl9fZmlsdGVyZWRfXz1lLl9fZmlsdGVyZWRfX3x8aSxlfX0pKSxfZShbImhlYWQiLCJsYXN0Il0sKGZ1bmN0aW9uKHQsZSl7dmFyIG49InRha2UiKyhlPyJSaWdodCI6IiIpO1VuLnByb3RvdHlwZVt0XT1mdW5jdGlvbigpe3JldHVybiB0aGlzW25dKDEpLnZhbHVlKClbMF19fSkpLF9lKFsiaW5pdGlhbCIsInRhaWwiXSwoZnVuY3Rpb24odCxlKXt2YXIgbj0iZHJvcCIrKGU/IiI6IlJpZ2h0Iik7VW4ucHJvdG90eXBlW3RdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19maWx0ZXJlZF9fP25ldyBVbih0aGlzKTp0aGlzW25dKDEpfX0pKSxVbi5wcm90b3R5cGUuY29tcGFjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbHRlcihMbCl9LFVuLnByb3RvdHlwZS5maW5kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmZpbHRlcih0KS5oZWFkKCl9LFVuLnByb3RvdHlwZS5maW5kTGFzdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5yZXZlcnNlKCkuZmluZCh0KX0sVW4ucHJvdG90eXBlLmludm9rZU1hcD1tcigoZnVuY3Rpb24odCxlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD9uZXcgVW4odGhpcyk6dGhpcy5tYXAoKGZ1bmN0aW9uKG4pe3JldHVybiBLaShuLHQsZSl9KSl9KSksVW4ucHJvdG90eXBlLnJlamVjdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5maWx0ZXIobnMoQW8odCkpKX0sVW4ucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKHQsZSl7dD1Wcyh0KTt2YXIgaT10aGlzO3JldHVybiBpLl9fZmlsdGVyZWRfXyYmKHQ+MHx8ZTwwKT9uZXcgVW4oaSk6KHQ8MD9pPWkudGFrZVJpZ2h0KC10KTp0JiYoaT1pLmRyb3AodCkpLGUhPT1uJiYoaT0oZT1WcyhlKSk8MD9pLmRyb3BSaWdodCgtZSk6aS50YWtlKGUtdCkpLGkpfSxVbi5wcm90b3R5cGUudGFrZVJpZ2h0V2hpbGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucmV2ZXJzZSgpLnRha2VXaGlsZSh0KS5yZXZlcnNlKCl9LFVuLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGFrZShoKX0sRmkoVW4ucHJvdG90eXBlLChmdW5jdGlvbih0LGUpe3ZhciBpPS9eKD86ZmlsdGVyfGZpbmR8bWFwfHJlamVjdCl8V2hpbGUkLy50ZXN0KGUpLHI9L14oPzpoZWFkfGxhc3QpJC8udGVzdChlKSxvPUJuW3I/InRha2UiKygibGFzdCI9PWU/IlJpZ2h0IjoiIik6ZV0sYT1yfHwvXmZpbmQvLnRlc3QoZSk7byYmKEJuLnByb3RvdHlwZVtlXT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX193cmFwcGVkX18scz1yP1sxXTphcmd1bWVudHMsbD1lIGluc3RhbmNlb2YgVW4sYz1zWzBdLHU9bHx8aHMoZSksaD1mdW5jdGlvbih0KXt2YXIgZT1vLmFwcGx5KEJuLEVlKFt0XSxzKSk7cmV0dXJuIHImJmQ/ZVswXTplfTt1JiZpJiYiZnVuY3Rpb24iPT10eXBlb2YgYyYmMSE9Yy5sZW5ndGgmJihsPXU9ITEpO3ZhciBkPXRoaXMuX19jaGFpbl9fLHA9ISF0aGlzLl9fYWN0aW9uc19fLmxlbmd0aCxmPWEmJiFkLG09bCYmIXA7aWYoIWEmJnUpe2U9bT9lOm5ldyBVbih0aGlzKTt2YXIgZz10LmFwcGx5KGUscyk7cmV0dXJuIGcuX19hY3Rpb25zX18ucHVzaCh7ZnVuYzpPYSxhcmdzOltoXSx0aGlzQXJnOm59KSxuZXcgVm4oZyxkKX1yZXR1cm4gZiYmbT90LmFwcGx5KHRoaXMscyk6KGc9dGhpcy50aHJ1KGgpLGY/cj9nLnZhbHVlKClbMF06Zy52YWx1ZSgpOmcpfSl9KSksX2UoWyJwb3AiLCJwdXNoIiwic2hpZnQiLCJzb3J0Iiwic3BsaWNlIiwidW5zaGlmdCJdLChmdW5jdGlvbih0KXt2YXIgZT1BdFt0XSxuPS9eKD86cHVzaHxzb3J0fHVuc2hpZnQpJC8udGVzdCh0KT8idGFwIjoidGhydSIsaT0vXig/OnBvcHxzaGlmdCkkLy50ZXN0KHQpO0JuLnByb3RvdHlwZVt0XT1mdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cztpZihpJiYhdGhpcy5fX2NoYWluX18pe3ZhciByPXRoaXMudmFsdWUoKTtyZXR1cm4gZS5hcHBseShocyhyKT9yOltdLHQpfXJldHVybiB0aGlzW25dKChmdW5jdGlvbihuKXtyZXR1cm4gZS5hcHBseShocyhuKT9uOltdLHQpfSkpfX0pKSxGaShVbi5wcm90b3R5cGUsKGZ1bmN0aW9uKHQsZSl7dmFyIG49Qm5bZV07aWYobil7dmFyIGk9bi5uYW1lKyIiO050LmNhbGwoa24saSl8fChrbltpXT1bXSksa25baV0ucHVzaCh7bmFtZTplLGZ1bmM6bn0pfX0pKSxrbltvbyhuLDIpLm5hbWVdPVt7bmFtZToid3JhcHBlciIsZnVuYzpufV0sVW4ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uIEZoKCl7dmFyIHQ9bmV3IFVuKHRoaXMuX193cmFwcGVkX18pO3JldHVybiB0Ll9fYWN0aW9uc19fPVhyKHRoaXMuX19hY3Rpb25zX18pLHQuX19kaXJfXz10aGlzLl9fZGlyX18sdC5fX2ZpbHRlcmVkX189dGhpcy5fX2ZpbHRlcmVkX18sdC5fX2l0ZXJhdGVlc19fPVhyKHRoaXMuX19pdGVyYXRlZXNfXyksdC5fX3Rha2VDb3VudF9fPXRoaXMuX190YWtlQ291bnRfXyx0Ll9fdmlld3NfXz1Ycih0aGlzLl9fdmlld3NfXyksdH0sVW4ucHJvdG90eXBlLnJldmVyc2U9ZnVuY3Rpb24gVmgoKXtpZih0aGlzLl9fZmlsdGVyZWRfXyl7dmFyIHQ9bmV3IFVuKHRoaXMpO3QuX19kaXJfXz0tMSx0Ll9fZmlsdGVyZWRfXz0hMH1lbHNlKHQ9dGhpcy5jbG9uZSgpKS5fX2Rpcl9fKj0tMTtyZXR1cm4gdH0sVW4ucHJvdG90eXBlLnZhbHVlPWZ1bmN0aW9uIFVoKCl7dmFyIHQ9dGhpcy5fX3dyYXBwZWRfXy52YWx1ZSgpLGU9dGhpcy5fX2Rpcl9fLG49aHModCksaT1lPDAscj1uP3QubGVuZ3RoOjAsbz0oZnVuY3Rpb24gYSh0LGUsbil7Zm9yKHZhciBpPS0xLHI9bi5sZW5ndGg7KytpPHI7KXt2YXIgbz1uW2ldLGE9by5zaXplO3N3aXRjaChvLnR5cGUpe2Nhc2UiZHJvcCI6dCs9YTticmVhaztjYXNlImRyb3BSaWdodCI6ZS09YTticmVhaztjYXNlInRha2UiOmU9X24oZSx0K2EpO2JyZWFrO2Nhc2UidGFrZVJpZ2h0Ijp0PWduKHQsZS1hKX19cmV0dXJue3N0YXJ0OnQsZW5kOmV9fSkoMCxyLHRoaXMuX192aWV3c19fKSxzPW8uc3RhcnQsbD1vLmVuZCxjPWwtcyx1PWk/bDpzLTEsaD10aGlzLl9faXRlcmF0ZWVzX18sZD1oLmxlbmd0aCxwPTAsZj1fbihjLHRoaXMuX190YWtlQ291bnRfXyk7aWYoIW58fCFpJiZyPT1jJiZmPT1jKXJldHVybiBJcih0LHRoaXMuX19hY3Rpb25zX18pO3ZhciBtPVtdO3Q6Zm9yKDtjLS0mJnA8Zjspe2Zvcih2YXIgZz0tMSxfPXRbdSs9ZV07KytnPGQ7KXt2YXIgeT1oW2ddLHY9eS50eXBlLGI9KDAseS5pdGVyYXRlZSkoXyk7aWYoMj09dilfPWI7ZWxzZSBpZighYil7aWYoMT09diljb250aW51ZSB0O2JyZWFrIHR9fW1bcCsrXT1ffXJldHVybiBtfSxCbi5wcm90b3R5cGUuYXQ9UmEsQm4ucHJvdG90eXBlLmNoYWluPWZ1bmN0aW9uIGpoKCl7cmV0dXJuIElhKHRoaXMpfSxCbi5wcm90b3R5cGUuY29tbWl0PWZ1bmN0aW9uIEdoKCl7cmV0dXJuIG5ldyBWbih0aGlzLnZhbHVlKCksdGhpcy5fX2NoYWluX18pfSxCbi5wcm90b3R5cGUubmV4dD1mdW5jdGlvbiBXaCgpe3RoaXMuX192YWx1ZXNfXz09PW4mJih0aGlzLl9fdmFsdWVzX189SHModGhpcy52YWx1ZSgpKSk7dmFyIHQ9dGhpcy5fX2luZGV4X18+PXRoaXMuX192YWx1ZXNfXy5sZW5ndGg7cmV0dXJue2RvbmU6dCx2YWx1ZTp0P246dGhpcy5fX3ZhbHVlc19fW3RoaXMuX19pbmRleF9fKytdfX0sQm4ucHJvdG90eXBlLnBsYW50PWZ1bmN0aW9uIHFoKHQpe2Zvcih2YXIgZSxpPXRoaXM7aSBpbnN0YW5jZW9mIEZuOyl7dmFyIHI9YWEoaSk7ci5fX2luZGV4X189MCxyLl9fdmFsdWVzX189bixlP28uX193cmFwcGVkX189cjplPXI7dmFyIG89cjtpPWkuX193cmFwcGVkX199cmV0dXJuIG8uX193cmFwcGVkX189dCxlfSxCbi5wcm90b3R5cGUucmV2ZXJzZT1mdW5jdGlvbiBZaCgpe3ZhciB0PXRoaXMuX193cmFwcGVkX187aWYodCBpbnN0YW5jZW9mIFVuKXt2YXIgZT10O3JldHVybiB0aGlzLl9fYWN0aW9uc19fLmxlbmd0aCYmKGU9bmV3IFVuKHRoaXMpKSwoZT1lLnJldmVyc2UoKSkuX19hY3Rpb25zX18ucHVzaCh7ZnVuYzpPYSxhcmdzOlt4YV0sdGhpc0FyZzpufSksbmV3IFZuKGUsdGhpcy5fX2NoYWluX18pfXJldHVybiB0aGlzLnRocnUoeGEpfSxCbi5wcm90b3R5cGUudG9KU09OPUJuLnByb3RvdHlwZS52YWx1ZU9mPUJuLnByb3RvdHlwZS52YWx1ZT1mdW5jdGlvbiBYaCgpe3JldHVybiBJcih0aGlzLl9fd3JhcHBlZF9fLHRoaXMuX19hY3Rpb25zX18pfSxCbi5wcm90b3R5cGUuZmlyc3Q9Qm4ucHJvdG90eXBlLmhlYWQsb2UmJihCbi5wcm90b3R5cGVbb2VdPWZ1bmN0aW9uICRoKCl7cmV0dXJuIHRoaXN9KSxCbn0pKCk7b2U/KChvZS5leHBvcnRzPWxuKS5fPWxuLHJlLl89bG4pOmllLl89bG59KS5jYWxsKHZlKX0pKTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi9jb25zdCBTZT0hKHdpbmRvdy5TaGFkeURPTSYmd2luZG93LlNoYWR5RE9NLmluVXNlKTtsZXQgTWUsRWU7ZnVuY3Rpb24gVGUodCl7TWU9KCF0fHwhdC5zaGltY3NzcHJvcGVydGllcykmJihTZXx8Qm9vbGVhbighbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQXBwbGVXZWJLaXRcLzYwMXxFZGdlXC8xNS8pJiZ3aW5kb3cuQ1NTJiZDU1Muc3VwcG9ydHMmJkNTUy5zdXBwb3J0cygiYm94LXNoYWRvdyIsIjAgMCAwIHZhcigtLWZvbykiKSkpfXdpbmRvdy5TaGFkeUNTUyYmdm9pZCAwIT09d2luZG93LlNoYWR5Q1NTLmNzc0J1aWxkJiYoRWU9d2luZG93LlNoYWR5Q1NTLmNzc0J1aWxkKTtjb25zdCBDZT1Cb29sZWFuKHdpbmRvdy5TaGFkeUNTUyYmd2luZG93LlNoYWR5Q1NTLmRpc2FibGVSdW50aW1lKTt3aW5kb3cuU2hhZHlDU1MmJnZvaWQgMCE9PXdpbmRvdy5TaGFkeUNTUy5uYXRpdmVDc3M/TWU9d2luZG93LlNoYWR5Q1NTLm5hdGl2ZUNzczp3aW5kb3cuU2hhZHlDU1M/KFRlKHdpbmRvdy5TaGFkeUNTUyksd2luZG93LlNoYWR5Q1NTPXZvaWQgMCk6VGUod2luZG93LldlYkNvbXBvbmVudHMmJndpbmRvdy5XZWJDb21wb25lbnRzLmZsYWdzKTtjb25zdCBBZT1NZTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi9jbGFzcyBrZXtjb25zdHJ1Y3Rvcigpe3RoaXMuc3RhcnQ9MCx0aGlzLmVuZD0wLHRoaXMucHJldmlvdXM9bnVsbCx0aGlzLnBhcmVudD1udWxsLHRoaXMucnVsZXM9bnVsbCx0aGlzLnBhcnNlZENzc1RleHQ9IiIsdGhpcy5jc3NUZXh0PSIiLHRoaXMuYXRSdWxlPSExLHRoaXMudHlwZT0wLHRoaXMua2V5ZnJhbWVzTmFtZT0iIix0aGlzLnNlbGVjdG9yPSIiLHRoaXMucGFyc2VkU2VsZWN0b3I9IiJ9fWZ1bmN0aW9uIExlKHQpe3JldHVybiBQZSgoZnVuY3Rpb24gbih0KXtsZXQgZT1uZXcga2U7ZS5zdGFydD0wLGUuZW5kPXQubGVuZ3RoO2xldCBuPWU7Zm9yKGxldCBpPTAscj10Lmxlbmd0aDtpPHI7aSsrKWlmKHRbaV09PT1PZSl7bi5ydWxlc3x8KG4ucnVsZXM9W10pO2xldCB0PW4sZT10LnJ1bGVzW3QucnVsZXMubGVuZ3RoLTFdfHxudWxsO249bmV3IGtlLG4uc3RhcnQ9aSsxLG4ucGFyZW50PXQsbi5wcmV2aW91cz1lLHQucnVsZXMucHVzaChuKX1lbHNlIHRbaV09PT1SZSYmKG4uZW5kPWkrMSxuPW4ucGFyZW50fHxlKTtyZXR1cm4gZX0pKHQ9KGZ1bmN0aW9uIGUodCl7cmV0dXJuIHQucmVwbGFjZSh6ZS5jb21tZW50cywiIikucmVwbGFjZSh6ZS5wb3J0LCIiKX0pKHQpKSx0KX1mdW5jdGlvbiBQZSh0LGUpe2xldCBuPWUuc3Vic3RyaW5nKHQuc3RhcnQsdC5lbmQtMSk7aWYodC5wYXJzZWRDc3NUZXh0PXQuY3NzVGV4dD1uLnRyaW0oKSx0LnBhcmVudCl7bj1lLnN1YnN0cmluZyh0LnByZXZpb3VzP3QucHJldmlvdXMuZW5kOnQucGFyZW50LnN0YXJ0LHQuc3RhcnQtMSksbj0oZnVuY3Rpb24gaSh0KXtyZXR1cm4gdC5yZXBsYWNlKC9cXChbMC05YS1mXXsxLDZ9KVxzL2dpLChmdW5jdGlvbigpe2xldCB0PWFyZ3VtZW50c1sxXSxlPTYtdC5sZW5ndGg7Zm9yKDtlLS07KXQ9IjAiK3Q7cmV0dXJuIlxcIit0fSkpfSkobiksbj1uLnJlcGxhY2UoemUubXVsdGlwbGVTcGFjZXMsIiAiKSxuPW4uc3Vic3RyaW5nKG4ubGFzdEluZGV4T2YoIjsiKSsxKTtsZXQgaT10LnBhcnNlZFNlbGVjdG9yPXQuc2VsZWN0b3I9bi50cmltKCk7dC5hdFJ1bGU9MD09PWkuaW5kZXhPZihIZSksdC5hdFJ1bGU/MD09PWkuaW5kZXhPZihCZSk/dC50eXBlPUllLk1FRElBX1JVTEU6aS5tYXRjaCh6ZS5rZXlmcmFtZXNSdWxlKSYmKHQudHlwZT1JZS5LRVlGUkFNRVNfUlVMRSx0LmtleWZyYW1lc05hbWU9dC5zZWxlY3Rvci5zcGxpdCh6ZS5tdWx0aXBsZVNwYWNlcykucG9wKCkpOnQudHlwZT0wPT09aS5pbmRleE9mKERlKT9JZS5NSVhJTl9SVUxFOkllLlNUWUxFX1JVTEV9bGV0IHI9dC5ydWxlcztpZihyKWZvcihsZXQgdCxuPTAsaT1yLmxlbmd0aDtuPGkmJih0PXJbbl0pO24rKylQZSh0LGUpO3JldHVybiB0fWZ1bmN0aW9uIE5lKHQsZSxuPSIiKXtsZXQgaT0iIjtpZih0LmNzc1RleHR8fHQucnVsZXMpe2xldCBuPXQucnVsZXM7aWYobiYmIShmdW5jdGlvbiByKHQpe2xldCBlPXRbMF07cmV0dXJuIEJvb2xlYW4oZSkmJkJvb2xlYW4oZS5zZWxlY3RvcikmJjA9PT1lLnNlbGVjdG9yLmluZGV4T2YoRGUpfSkobikpZm9yKGxldCB0LHI9MCxvPW4ubGVuZ3RoO3I8byYmKHQ9bltyXSk7cisrKWk9TmUodCxlLGkpO2Vsc2UgaT1lP3QuY3NzVGV4dDooZnVuY3Rpb24gbyh0KXtyZXR1cm4oZnVuY3Rpb24gbih0KXtyZXR1cm4gdC5yZXBsYWNlKHplLm1peGluQXBwbHksIiIpLnJlcGxhY2UoemUudmFyQXBwbHksIiIpfSkodD0oZnVuY3Rpb24gZSh0KXtyZXR1cm4gdC5yZXBsYWNlKHplLmN1c3RvbVByb3AsIiIpLnJlcGxhY2UoemUubWl4aW5Qcm9wLCIiKX0pKHQpKX0pKHQuY3NzVGV4dCksaT1pLnRyaW0oKSxpJiYoaT0iICAiK2krIlxuIil9cmV0dXJuIGkmJih0LnNlbGVjdG9yJiYobis9dC5zZWxlY3RvcisiICIrT2UrIlxuIiksbis9aSx0LnNlbGVjdG9yJiYobis9UmUrIlxuXG4iKSksbn1jb25zdCBJZT17U1RZTEVfUlVMRToxLEtFWUZSQU1FU19SVUxFOjcsTUVESUFfUlVMRTo0LE1JWElOX1JVTEU6MWUzfSxPZT0ieyIsUmU9In0iLHplPXtjb21tZW50czovXC9cKlteKl0qXCorKFteLypdW14qXSpcKispKlwvL2dpbSxwb3J0Oi9AaW1wb3J0W147XSo7L2dpbSxjdXN0b21Qcm9wOi8oPzpeW147XC1cc31dKyk/LS1bXjt7fV0qPzpbXnt9O10qPyg/Ols7XG5dfCQpL2dpbSxtaXhpblByb3A6Lyg/Ol5bXjtcLVxzfV0rKT8tLVteO3t9XSo/Oltee307XSo/e1tefV0qP30oPzpbO1xuXXwkKT8vZ2ltLG1peGluQXBwbHk6L0BhcHBseVxzKlwoP1teKTtdKlwpP1xzKig/Ols7XG5dfCQpPy9naW0sdmFyQXBwbHk6L1teOzpdKj86W147XSo/dmFyXChbXjtdKlwpKD86Wztcbl18JCk/L2dpbSxrZXlmcmFtZXNSdWxlOi9eQFteXHNdKmtleWZyYW1lcy8sbXVsdGlwbGVTcGFjZXM6L1xzKy9nfSxEZT0iLS0iLEJlPSJAbWVkaWEiLEhlPSJAIixGZT0vKD86XnxbO1xze11ccyopKC0tW1x3LV0qPylccyo6XHMqKD86KCg/OicoPzpcXCd8LikqPyd8Iig/OlxcInwuKSo/InxcKFteKV0qP1wpfFtefTt7XSkrKXxceyhbXn1dKilcfSg/Oig/PVs7XHN9XSl8JCkpL2dpLFZlPS8oPzpefFxXKylAYXBwbHlccypcKD8oW14pO1xuXSopXCk/L2dpLFVlPS9AbWVkaWFccyguKikvLGplPW5ldyBTZXQ7ZnVuY3Rpb24gR2UodCl7Y29uc3QgZT10LnRleHRDb250ZW50O2lmKCFqZS5oYXMoZSkpe2plLmFkZChlKTtjb25zdCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7dC5zZXRBdHRyaWJ1dGUoInNoYWR5LXVuc2NvcGVkIiwiIiksdC50ZXh0Q29udGVudD1lLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQodCl9fWZ1bmN0aW9uIFdlKHQpe3JldHVybiB0Lmhhc0F0dHJpYnV0ZSgic2hhZHktdW5zY29wZWQiKX0KLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi9mdW5jdGlvbiBxZSh0LGUpe3JldHVybiB0Pygic3RyaW5nIj09dHlwZW9mIHQmJih0PUxlKHQpKSxlJiZYZSh0LGUpLE5lKHQsQWUpKToiIn1mdW5jdGlvbiBZZSh0KXtyZXR1cm4hdC5fX2Nzc1J1bGVzJiZ0LnRleHRDb250ZW50JiYodC5fX2Nzc1J1bGVzPUxlKHQudGV4dENvbnRlbnQpKSx0Ll9fY3NzUnVsZXN8fG51bGx9ZnVuY3Rpb24gWGUodCxlLG4saSl7aWYoIXQpcmV0dXJuO2xldCByPSExLG89dC50eXBlO2lmKGkmJm89PT1JZS5NRURJQV9SVUxFKXtsZXQgZT10LnNlbGVjdG9yLm1hdGNoKFVlKTtlJiYod2luZG93Lm1hdGNoTWVkaWEoZVsxXSkubWF0Y2hlc3x8KHI9ITApKX1vPT09SWUuU1RZTEVfUlVMRT9lKHQpOm4mJm89PT1JZS5LRVlGUkFNRVNfUlVMRT9uKHQpOm89PT1JZS5NSVhJTl9SVUxFJiYocj0hMCk7bGV0IGE9dC5ydWxlcztpZihhJiYhcilmb3IobGV0IHQscj0wLG89YS5sZW5ndGg7cjxvJiYodD1hW3JdKTtyKyspWGUodCxlLG4saSl9ZnVuY3Rpb24gJGUodCxlKXtsZXQgbj10LmluZGV4T2YoInZhcigiKTtpZigtMT09PW4pcmV0dXJuIGUodCwiIiwiIiwiIik7bGV0IGk9KGZ1bmN0aW9uIHIodCxlKXtsZXQgbj0wO2ZvcihsZXQgaT1lLHI9dC5sZW5ndGg7aTxyO2krKylpZigiKCI9PT10W2ldKW4rKztlbHNlIGlmKCIpIj09PXRbaV0mJjA9PS0tbilyZXR1cm4gaTtyZXR1cm4tMX0pKHQsbiszKSxvPXQuc3Vic3RyaW5nKG4rNCxpKSxhPXQuc3Vic3RyaW5nKDAsbikscz0kZSh0LnN1YnN0cmluZyhpKzEpLGUpLGw9by5pbmRleE9mKCIsIik7cmV0dXJuLTE9PT1sP2UoYSxvLnRyaW0oKSwiIixzKTplKGEsby5zdWJzdHJpbmcoMCxsKS50cmltKCksby5zdWJzdHJpbmcobCsxKS50cmltKCkscyl9d2luZG93LlNoYWR5RE9NJiZ3aW5kb3c7Y29uc3QgS2U9ImNzcy1idWlsZCI7ZnVuY3Rpb24gWmUodCl7cmV0dXJuIiIhPT0oZnVuY3Rpb24gZSh0KXtpZih2b2lkIDAhPT1FZSlyZXR1cm4gRWU7aWYodm9pZCAwPT09dC5fX2Nzc0J1aWxkKXtjb25zdCBlPXQuZ2V0QXR0cmlidXRlKEtlKTtpZihlKXQuX19jc3NCdWlsZD1lO2Vsc2V7Y29uc3QgZT0oZnVuY3Rpb24gZSh0KXtjb25zdCBlPSJ0ZW1wbGF0ZSI9PT10LmxvY2FsTmFtZT90LmNvbnRlbnQuZmlyc3RDaGlsZDp0LmZpcnN0Q2hpbGQ7aWYoZSBpbnN0YW5jZW9mIENvbW1lbnQpe2NvbnN0IHQ9ZS50ZXh0Q29udGVudC50cmltKCkuc3BsaXQoIjoiKTtpZih0WzBdPT09S2UpcmV0dXJuIHRbMV19cmV0dXJuIiJ9KSh0KTsiIiE9PWUmJihmdW5jdGlvbiBuKHQpe2NvbnN0IGU9InRlbXBsYXRlIj09PXQubG9jYWxOYW1lP3QuY29udGVudC5maXJzdENoaWxkOnQuZmlyc3RDaGlsZDtlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZSl9Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovKSh0KSx0Ll9fY3NzQnVpbGQ9ZX19cmV0dXJuIHQuX19jc3NCdWlsZHx8IiJ9KSh0KX1mdW5jdGlvbiBKZSh0LGUpe2ZvcihsZXQgbiBpbiBlKW51bGw9PT1uP3Quc3R5bGUucmVtb3ZlUHJvcGVydHkobik6dC5zdHlsZS5zZXRQcm9wZXJ0eShuLGVbbl0pfWZ1bmN0aW9uIFFlKHQsZSl7Y29uc3Qgbj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KS5nZXRQcm9wZXJ0eVZhbHVlKGUpO3JldHVybiBuP24udHJpbSgpOiIifQovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dAogICAgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28KICAgIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpjb25zdCB0bj0vO1xzKi9tLGVuPS9eXHMqKGluaXRpYWwpfChpbmhlcml0KVxzKiQvLG5uPS9ccyohaW1wb3J0YW50LztjbGFzcyBybntjb25zdHJ1Y3Rvcigpe3RoaXMuX21hcD17fX1zZXQodCxlKXt0PXQudHJpbSgpLHRoaXMuX21hcFt0XT17cHJvcGVydGllczplLGRlcGVuZGFudHM6e319fWdldCh0KXtyZXR1cm4gdD10LnRyaW0oKSx0aGlzLl9tYXBbdF18fG51bGx9fWxldCBvbj1udWxsO2NsYXNzIGFue2NvbnN0cnVjdG9yKCl7dGhpcy5fY3VycmVudEVsZW1lbnQ9bnVsbCx0aGlzLl9tZWFzdXJlRWxlbWVudD1udWxsLHRoaXMuX21hcD1uZXcgcm59ZGV0ZWN0TWl4aW4odCl7cmV0dXJuKGZ1bmN0aW9uIGUodCl7Y29uc3QgZT1WZS50ZXN0KHQpfHxGZS50ZXN0KHQpO3JldHVybiBWZS5sYXN0SW5kZXg9MCxGZS5sYXN0SW5kZXg9MCxlfSkodCl9Z2F0aGVyU3R5bGVzKHQpe2NvbnN0IGU9KGZ1bmN0aW9uIG4odCl7Y29uc3QgZT1bXSxuPXQucXVlcnlTZWxlY3RvckFsbCgic3R5bGUiKTtmb3IobGV0IHQ9MDt0PG4ubGVuZ3RoO3QrKyl7Y29uc3QgaT1uW3RdO1dlKGkpP1NlfHwoR2UoaSksaS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGkpKTooZS5wdXNoKGkudGV4dENvbnRlbnQpLGkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChpKSl9cmV0dXJuIGUuam9pbigiIikudHJpbSgpfSkodC5jb250ZW50KTtpZihlKXtjb25zdCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7cmV0dXJuIG4udGV4dENvbnRlbnQ9ZSx0LmNvbnRlbnQuaW5zZXJ0QmVmb3JlKG4sdC5jb250ZW50LmZpcnN0Q2hpbGQpLG59cmV0dXJuIG51bGx9dHJhbnNmb3JtVGVtcGxhdGUodCxlKXt2b2lkIDA9PT10Ll9nYXRoZXJlZFN0eWxlJiYodC5fZ2F0aGVyZWRTdHlsZT10aGlzLmdhdGhlclN0eWxlcyh0KSk7Y29uc3Qgbj10Ll9nYXRoZXJlZFN0eWxlO3JldHVybiBuP3RoaXMudHJhbnNmb3JtU3R5bGUobixlKTpudWxsfXRyYW5zZm9ybVN0eWxlKHQsZT0iIil7bGV0IG49WWUodCk7cmV0dXJuIHRoaXMudHJhbnNmb3JtUnVsZXMobixlKSx0LnRleHRDb250ZW50PXFlKG4pLG59dHJhbnNmb3JtQ3VzdG9tU3R5bGUodCl7bGV0IGU9WWUodCk7cmV0dXJuIFhlKGUsKHQ9PnsiOnJvb3QiPT09dC5zZWxlY3RvciYmKHQuc2VsZWN0b3I9Imh0bWwiKSx0aGlzLnRyYW5zZm9ybVJ1bGUodCl9KSksdC50ZXh0Q29udGVudD1xZShlKSxlfXRyYW5zZm9ybVJ1bGVzKHQsZSl7dGhpcy5fY3VycmVudEVsZW1lbnQ9ZSxYZSh0LCh0PT57dGhpcy50cmFuc2Zvcm1SdWxlKHQpfSkpLHRoaXMuX2N1cnJlbnRFbGVtZW50PW51bGx9dHJhbnNmb3JtUnVsZSh0KXt0LmNzc1RleHQ9dGhpcy50cmFuc2Zvcm1Dc3NUZXh0KHQucGFyc2VkQ3NzVGV4dCx0KSwiOnJvb3QiPT09dC5zZWxlY3RvciYmKHQuc2VsZWN0b3I9Ijpob3N0ID4gKiIpfXRyYW5zZm9ybUNzc1RleHQodCxlKXtyZXR1cm4gdD10LnJlcGxhY2UoRmUsKCh0LG4saSxyKT0+dGhpcy5fcHJvZHVjZUNzc1Byb3BlcnRpZXModCxuLGkscixlKSkpLHRoaXMuX2NvbnN1bWVDc3NQcm9wZXJ0aWVzKHQsZSl9X2dldEluaXRpYWxWYWx1ZUZvclByb3BlcnR5KHQpe3JldHVybiB0aGlzLl9tZWFzdXJlRWxlbWVudHx8KHRoaXMuX21lYXN1cmVFbGVtZW50PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm1ldGEiKSx0aGlzLl9tZWFzdXJlRWxlbWVudC5zZXRBdHRyaWJ1dGUoImFwcGx5LXNoaW0tbWVhc3VyZSIsIiIpLHRoaXMuX21lYXN1cmVFbGVtZW50LnN0eWxlLmFsbD0iaW5pdGlhbCIsZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh0aGlzLl9tZWFzdXJlRWxlbWVudCkpLHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuX21lYXN1cmVFbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKHQpfV9mYWxsYmFja3NGcm9tUHJldmlvdXNSdWxlcyh0KXtsZXQgZT10O2Zvcig7ZS5wYXJlbnQ7KWU9ZS5wYXJlbnQ7Y29uc3Qgbj17fTtsZXQgaT0hMTtyZXR1cm4gWGUoZSwoZT0+e2k9aXx8ZT09PXQsaXx8ZS5zZWxlY3Rvcj09PXQuc2VsZWN0b3ImJk9iamVjdC5hc3NpZ24obix0aGlzLl9jc3NUZXh0VG9NYXAoZS5wYXJzZWRDc3NUZXh0KSl9KSksbn1fY29uc3VtZUNzc1Byb3BlcnRpZXModCxlKXtsZXQgbj1udWxsO2Zvcig7bj1WZS5leGVjKHQpOyl7bGV0IGk9blswXSxyPW5bMV0sbz1uLmluZGV4LGE9bytpLmluZGV4T2YoIkBhcHBseSIpLHM9bytpLmxlbmd0aCxsPXQuc2xpY2UoMCxhKSxjPXQuc2xpY2UocyksdT1lP3RoaXMuX2ZhbGxiYWNrc0Zyb21QcmV2aW91c1J1bGVzKGUpOnt9O09iamVjdC5hc3NpZ24odSx0aGlzLl9jc3NUZXh0VG9NYXAobCkpO2xldCBoPXRoaXMuX2F0QXBwbHlUb0Nzc1Byb3BlcnRpZXMocix1KTt0PWAke2x9JHtofSR7Y31gLFZlLmxhc3RJbmRleD1vK2gubGVuZ3RofXJldHVybiB0fV9hdEFwcGx5VG9Dc3NQcm9wZXJ0aWVzKHQsZSl7dD10LnJlcGxhY2UodG4sIiIpO2xldCBuPVtdLGk9dGhpcy5fbWFwLmdldCh0KTtpZihpfHwodGhpcy5fbWFwLnNldCh0LHt9KSxpPXRoaXMuX21hcC5nZXQodCkpLGkpe2xldCByLG8sYTt0aGlzLl9jdXJyZW50RWxlbWVudCYmKGkuZGVwZW5kYW50c1t0aGlzLl9jdXJyZW50RWxlbWVudF09ITApO2NvbnN0IHM9aS5wcm9wZXJ0aWVzO2ZvcihyIGluIHMpYT1lJiZlW3JdLG89W3IsIjogdmFyKCIsdCwiXy1fIixyXSxhJiZvLnB1c2goIiwiLGEucmVwbGFjZShubiwiIikpLG8ucHVzaCgiKSIpLG5uLnRlc3Qoc1tyXSkmJm8ucHVzaCgiICFpbXBvcnRhbnQiKSxuLnB1c2goby5qb2luKCIiKSl9cmV0dXJuIG4uam9pbigiOyAiKX1fcmVwbGFjZUluaXRpYWxPckluaGVyaXQodCxlKXtsZXQgbj1lbi5leGVjKGUpO3JldHVybiBuJiYoZT1uWzFdP3RoaXMuX2dldEluaXRpYWxWYWx1ZUZvclByb3BlcnR5KHQpOiJhcHBseS1zaGltLWluaGVyaXQiKSxlfV9jc3NUZXh0VG9NYXAodCxlPSExKXtsZXQgbixpLHI9dC5zcGxpdCgiOyIpLG89e307Zm9yKGxldCB0LGEscz0wO3M8ci5sZW5ndGg7cysrKXQ9cltzXSx0JiYoYT10LnNwbGl0KCI6IiksYS5sZW5ndGg+MSYmKG49YVswXS50cmltKCksaT1hLnNsaWNlKDEpLmpvaW4oIjoiKSxlJiYoaT10aGlzLl9yZXBsYWNlSW5pdGlhbE9ySW5oZXJpdChuLGkpKSxvW25dPWkpKTtyZXR1cm4gb31faW52YWxpZGF0ZU1peGluRW50cnkodCl7aWYob24pZm9yKGxldCBlIGluIHQuZGVwZW5kYW50cyllIT09dGhpcy5fY3VycmVudEVsZW1lbnQmJm9uKGUpfV9wcm9kdWNlQ3NzUHJvcGVydGllcyh0LGUsbixpLHIpe2lmKG4mJiRlKG4sKCh0LGUpPT57ZSYmdGhpcy5fbWFwLmdldChlKSYmKGk9YEBhcHBseSAke2V9O2ApfSkpLCFpKXJldHVybiB0O2xldCBvPXRoaXMuX2NvbnN1bWVDc3NQcm9wZXJ0aWVzKCIiK2ksciksYT10LnNsaWNlKDAsdC5pbmRleE9mKCItLSIpKSxzPXRoaXMuX2Nzc1RleHRUb01hcChvLCEwKSxsPXMsYz10aGlzLl9tYXAuZ2V0KGUpLHU9YyYmYy5wcm9wZXJ0aWVzO3U/bD1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUodSkscyk6dGhpcy5fbWFwLnNldChlLGwpO2xldCBoLGQscD1bXSxmPSExO2ZvcihoIGluIGwpZD1zW2hdLHZvaWQgMD09PWQmJihkPSJpbml0aWFsIiksdSYmIShoIGluIHUpJiYoZj0hMCkscC5wdXNoKGAke2V9Xy1fJHtofTogJHtkfWApO3JldHVybiBmJiZ0aGlzLl9pbnZhbGlkYXRlTWl4aW5FbnRyeShjKSxjJiYoYy5wcm9wZXJ0aWVzPWwpLG4mJihhPWAke3R9OyR7YX1gKSxgJHthfSR7cC5qb2luKCI7ICIpfTtgfX1hbi5wcm90b3R5cGUuZGV0ZWN0TWl4aW49YW4ucHJvdG90eXBlLmRldGVjdE1peGluLGFuLnByb3RvdHlwZS50cmFuc2Zvcm1TdHlsZT1hbi5wcm90b3R5cGUudHJhbnNmb3JtU3R5bGUsYW4ucHJvdG90eXBlLnRyYW5zZm9ybUN1c3RvbVN0eWxlPWFuLnByb3RvdHlwZS50cmFuc2Zvcm1DdXN0b21TdHlsZSxhbi5wcm90b3R5cGUudHJhbnNmb3JtUnVsZXM9YW4ucHJvdG90eXBlLnRyYW5zZm9ybVJ1bGVzLGFuLnByb3RvdHlwZS50cmFuc2Zvcm1SdWxlPWFuLnByb3RvdHlwZS50cmFuc2Zvcm1SdWxlLGFuLnByb3RvdHlwZS50cmFuc2Zvcm1UZW1wbGF0ZT1hbi5wcm90b3R5cGUudHJhbnNmb3JtVGVtcGxhdGUsYW4ucHJvdG90eXBlLl9zZXBhcmF0b3I9Il8tXyIsT2JqZWN0LmRlZmluZVByb3BlcnR5KGFuLnByb3RvdHlwZSwiaW52YWxpZENhbGxiYWNrIix7Z2V0OigpPT5vbixzZXQodCl7b249dH19KTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KY29uc3Qgc249e30sbG49Il9hcHBseVNoaW1DdXJyZW50VmVyc2lvbiIsY249Il9hcHBseVNoaW1OZXh0VmVyc2lvbiIsdW49Il9hcHBseVNoaW1WYWxpZGF0aW5nVmVyc2lvbiIsaG49UHJvbWlzZS5yZXNvbHZlKCk7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovZnVuY3Rpb24gZG4odCl7bGV0IGU9c25bdF07ZSYmKGZ1bmN0aW9uIG4odCl7dFtsbl09dFtsbl18fDAsdFt1bl09dFt1bl18fDAsdFtjbl09KHRbY25dfHwwKSsxfSkoZSl9ZnVuY3Rpb24gcG4odCl7cmV0dXJuIHRbbG5dPT09dFtjbl19Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCmxldCBmbixtbj1udWxsLGduPXdpbmRvdy5IVE1MSW1wb3J0cyYmd2luZG93LkhUTUxJbXBvcnRzLndoZW5SZWFkeXx8bnVsbDtmdW5jdGlvbiBfbih0KXtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKGZ1bmN0aW9uKCl7Z24/Z24odCk6KG1ufHwobW49bmV3IFByb21pc2UoKHQ9Pntmbj10fSkpLCJjb21wbGV0ZSI9PT1kb2N1bWVudC5yZWFkeVN0YXRlP2ZuKCk6ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicmVhZHlzdGF0ZWNoYW5nZSIsKCgpPT57ImNvbXBsZXRlIj09PWRvY3VtZW50LnJlYWR5U3RhdGUmJmZuKCl9KSkpLG1uLnRoZW4oKGZ1bmN0aW9uKCl7dCYmdCgpfSkpKX0pKX0KLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi9jb25zdCB5bj0iX19zZWVuQnlTaGFkeUNTUyIsdm49Il9fc2hhZHlDU1NDYWNoZWRTdHlsZSI7bGV0IGJuPW51bGwseG49bnVsbDtjbGFzcyB3bntjb25zdHJ1Y3Rvcigpe3RoaXMuY3VzdG9tU3R5bGVzPVtdLHRoaXMuZW5xdWV1ZWQ9ITEsX24oKCgpPT57d2luZG93LlNoYWR5Q1NTLmZsdXNoQ3VzdG9tU3R5bGVzJiZ3aW5kb3cuU2hhZHlDU1MuZmx1c2hDdXN0b21TdHlsZXMoKX0pKX1lbnF1ZXVlRG9jdW1lbnRWYWxpZGF0aW9uKCl7IXRoaXMuZW5xdWV1ZWQmJnhuJiYodGhpcy5lbnF1ZXVlZD0hMCxfbih4bikpfWFkZEN1c3RvbVN0eWxlKHQpe3RbeW5dfHwodFt5bl09ITAsdGhpcy5jdXN0b21TdHlsZXMucHVzaCh0KSx0aGlzLmVucXVldWVEb2N1bWVudFZhbGlkYXRpb24oKSl9Z2V0U3R5bGVGb3JDdXN0b21TdHlsZSh0KXtpZih0W3ZuXSlyZXR1cm4gdFt2bl07bGV0IGU7cmV0dXJuIGU9dC5nZXRTdHlsZT90LmdldFN0eWxlKCk6dCxlfXByb2Nlc3NTdHlsZXMoKXtjb25zdCB0PXRoaXMuY3VzdG9tU3R5bGVzO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKXtjb25zdCBuPXRbZV07aWYoblt2bl0pY29udGludWU7Y29uc3QgaT10aGlzLmdldFN0eWxlRm9yQ3VzdG9tU3R5bGUobik7aWYoaSl7Y29uc3QgdD1pLl9fYXBwbGllZEVsZW1lbnR8fGk7Ym4mJmJuKHQpLG5bdm5dPXR9fXJldHVybiB0fX13bi5wcm90b3R5cGUuYWRkQ3VzdG9tU3R5bGU9d24ucHJvdG90eXBlLmFkZEN1c3RvbVN0eWxlLHduLnByb3RvdHlwZS5nZXRTdHlsZUZvckN1c3RvbVN0eWxlPXduLnByb3RvdHlwZS5nZXRTdHlsZUZvckN1c3RvbVN0eWxlLHduLnByb3RvdHlwZS5wcm9jZXNzU3R5bGVzPXduLnByb3RvdHlwZS5wcm9jZXNzU3R5bGVzLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHduLnByb3RvdHlwZSx7dHJhbnNmb3JtQ2FsbGJhY2s6e2dldDooKT0+Ym4sc2V0KHQpe2JuPXR9fSx2YWxpZGF0ZUNhbGxiYWNrOntnZXQ6KCk9PnhuLHNldCh0KXtsZXQgZT0hMTt4bnx8KGU9ITApLHhuPXQsZSYmdGhpcy5lbnF1ZXVlRG9jdW1lbnRWYWxpZGF0aW9uKCl9fX0pOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dAogICAgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28KICAgIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpjb25zdCBTbj1uZXcgYW47Y2xhc3MgTW57Y29uc3RydWN0b3IoKXt0aGlzLmN1c3RvbVN0eWxlSW50ZXJmYWNlPW51bGwsU24uaW52YWxpZENhbGxiYWNrPWRufWVuc3VyZSgpe3RoaXMuY3VzdG9tU3R5bGVJbnRlcmZhY2V8fHdpbmRvdy5TaGFkeUNTUy5DdXN0b21TdHlsZUludGVyZmFjZSYmKHRoaXMuY3VzdG9tU3R5bGVJbnRlcmZhY2U9d2luZG93LlNoYWR5Q1NTLkN1c3RvbVN0eWxlSW50ZXJmYWNlLHRoaXMuY3VzdG9tU3R5bGVJbnRlcmZhY2UudHJhbnNmb3JtQ2FsbGJhY2s9dD0+e1NuLnRyYW5zZm9ybUN1c3RvbVN0eWxlKHQpfSx0aGlzLmN1c3RvbVN0eWxlSW50ZXJmYWNlLnZhbGlkYXRlQ2FsbGJhY2s9KCk9PntyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCgpPT57dGhpcy5jdXN0b21TdHlsZUludGVyZmFjZS5lbnF1ZXVlZCYmdGhpcy5mbHVzaEN1c3RvbVN0eWxlcygpfSkpfSl9cHJlcGFyZVRlbXBsYXRlKHQsZSl7aWYodGhpcy5lbnN1cmUoKSxaZSh0KSlyZXR1cm47c25bZV09dDtsZXQgbj1Tbi50cmFuc2Zvcm1UZW1wbGF0ZSh0LGUpO3QuX3N0eWxlQXN0PW59Zmx1c2hDdXN0b21TdHlsZXMoKXtpZih0aGlzLmVuc3VyZSgpLCF0aGlzLmN1c3RvbVN0eWxlSW50ZXJmYWNlKXJldHVybjtsZXQgdD10aGlzLmN1c3RvbVN0eWxlSW50ZXJmYWNlLnByb2Nlc3NTdHlsZXMoKTtpZih0aGlzLmN1c3RvbVN0eWxlSW50ZXJmYWNlLmVucXVldWVkKXtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKyl7bGV0IG49dGhpcy5jdXN0b21TdHlsZUludGVyZmFjZS5nZXRTdHlsZUZvckN1c3RvbVN0eWxlKHRbZV0pO24mJlNuLnRyYW5zZm9ybUN1c3RvbVN0eWxlKG4pfXRoaXMuY3VzdG9tU3R5bGVJbnRlcmZhY2UuZW5xdWV1ZWQ9ITF9fXN0eWxlU3VidHJlZSh0LGUpe2lmKHRoaXMuZW5zdXJlKCksZSYmSmUodCxlKSx0LnNoYWRvd1Jvb3Qpe3RoaXMuc3R5bGVFbGVtZW50KHQpO2xldCBlPXQuc2hhZG93Um9vdC5jaGlsZHJlbnx8dC5zaGFkb3dSb290LmNoaWxkTm9kZXM7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0KyspdGhpcy5zdHlsZVN1YnRyZWUoZVt0XSl9ZWxzZXtsZXQgZT10LmNoaWxkcmVufHx0LmNoaWxkTm9kZXM7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0KyspdGhpcy5zdHlsZVN1YnRyZWUoZVt0XSl9fXN0eWxlRWxlbWVudCh0KXt0aGlzLmVuc3VyZSgpO2xldHtpczplfT0oZnVuY3Rpb24gbih0KXtsZXQgZT10LmxvY2FsTmFtZSxuPSIiLGk9IiI7cmV0dXJuIGU/ZS5pbmRleE9mKCItIik+LTE/bj1lOihpPWUsbj10LmdldEF0dHJpYnV0ZSYmdC5nZXRBdHRyaWJ1dGUoImlzIil8fCIiKToobj10LmlzLGk9dC5leHRlbmRzKSx7aXM6bix0eXBlRXh0ZW5zaW9uOml9fSkodCksaT1zbltlXTtpZigoIWl8fCFaZShpKSkmJmkmJiFwbihpKSl7KGZ1bmN0aW9uIHIodCl7cmV0dXJuIXBuKHQpJiZ0W3VuXT09PXRbY25dfSkoaSl8fCh0aGlzLnByZXBhcmVUZW1wbGF0ZShpLGUpLChmdW5jdGlvbiBvKHQpe3RbdW5dPXRbY25dLHQuX3ZhbGlkYXRpbmd8fCh0Ll92YWxpZGF0aW5nPSEwLGhuLnRoZW4oKGZ1bmN0aW9uKCl7dFtsbl09dFtjbl0sdC5fdmFsaWRhdGluZz0hMX0pKSl9KShpKSk7bGV0IG49dC5zaGFkb3dSb290O2lmKG4pe2xldCB0PW4ucXVlcnlTZWxlY3Rvcigic3R5bGUiKTt0JiYodC5fX2Nzc1J1bGVzPWkuX3N0eWxlQXN0LHQudGV4dENvbnRlbnQ9cWUoaS5fc3R5bGVBc3QpKX19fXN0eWxlRG9jdW1lbnQodCl7dGhpcy5lbnN1cmUoKSx0aGlzLnN0eWxlU3VidHJlZShkb2N1bWVudC5ib2R5LHQpfX1pZighd2luZG93LlNoYWR5Q1NTfHwhd2luZG93LlNoYWR5Q1NTLlNjb3BpbmdTaGltKXtjb25zdCB0PW5ldyBNbjtsZXQgZT13aW5kb3cuU2hhZHlDU1MmJndpbmRvdy5TaGFkeUNTUy5DdXN0b21TdHlsZUludGVyZmFjZTt3aW5kb3cuU2hhZHlDU1M9e3ByZXBhcmVUZW1wbGF0ZShlLG4saSl7dC5mbHVzaEN1c3RvbVN0eWxlcygpLHQucHJlcGFyZVRlbXBsYXRlKGUsbil9LHByZXBhcmVUZW1wbGF0ZVN0eWxlcyh0LGUsbil7d2luZG93LlNoYWR5Q1NTLnByZXBhcmVUZW1wbGF0ZSh0LGUsbil9LHByZXBhcmVUZW1wbGF0ZURvbSh0LGUpe30sc3R5bGVTdWJ0cmVlKGUsbil7dC5mbHVzaEN1c3RvbVN0eWxlcygpLHQuc3R5bGVTdWJ0cmVlKGUsbil9LHN0eWxlRWxlbWVudChlKXt0LmZsdXNoQ3VzdG9tU3R5bGVzKCksdC5zdHlsZUVsZW1lbnQoZSl9LHN0eWxlRG9jdW1lbnQoZSl7dC5mbHVzaEN1c3RvbVN0eWxlcygpLHQuc3R5bGVEb2N1bWVudChlKX0sZ2V0Q29tcHV0ZWRTdHlsZVZhbHVlOih0LGUpPT5RZSh0LGUpLGZsdXNoQ3VzdG9tU3R5bGVzKCl7dC5mbHVzaEN1c3RvbVN0eWxlcygpfSxuYXRpdmVDc3M6QWUsbmF0aXZlU2hhZG93OlNlLGNzc0J1aWxkOkVlLGRpc2FibGVSdW50aW1lOkNlfSxlJiYod2luZG93LlNoYWR5Q1NTLkN1c3RvbVN0eWxlSW50ZXJmYWNlPWUpfXdpbmRvdy5TaGFkeUNTUy5BcHBseVNoaW09U247Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCmNsYXNzIEVue2NvbnN0cnVjdG9yKCl7dGhpcy5fYXN5bmNNb2R1bGU9bnVsbCx0aGlzLl9jYWxsYmFjaz1udWxsLHRoaXMuX3RpbWVyPW51bGx9c2V0Q29uZmlnKHQsZSl7dGhpcy5fYXN5bmNNb2R1bGU9dCx0aGlzLl9jYWxsYmFjaz1lLHRoaXMuX3RpbWVyPXRoaXMuX2FzeW5jTW9kdWxlLnJ1bigoKCk9Pnt0aGlzLl90aW1lcj1udWxsLFRuLmRlbGV0ZSh0aGlzKSx0aGlzLl9jYWxsYmFjaygpfSkpfWNhbmNlbCgpe3RoaXMuaXNBY3RpdmUoKSYmKHRoaXMuX2NhbmNlbEFzeW5jKCksVG4uZGVsZXRlKHRoaXMpKX1fY2FuY2VsQXN5bmMoKXt0aGlzLmlzQWN0aXZlKCkmJih0aGlzLl9hc3luY01vZHVsZS5jYW5jZWwodGhpcy5fdGltZXIpLHRoaXMuX3RpbWVyPW51bGwpfWZsdXNoKCl7dGhpcy5pc0FjdGl2ZSgpJiYodGhpcy5jYW5jZWwoKSx0aGlzLl9jYWxsYmFjaygpKX1pc0FjdGl2ZSgpe3JldHVybiBudWxsIT10aGlzLl90aW1lcn1zdGF0aWMgZGVib3VuY2UodCxlLG4pe3JldHVybiB0IGluc3RhbmNlb2YgRW4/dC5fY2FuY2VsQXN5bmMoKTp0PW5ldyBFbix0LnNldENvbmZpZyhlLG4pLHR9fWxldCBUbj1uZXcgU2V0O2NvbnN0IENuPWZ1bmN0aW9uKHQpe1RuLmFkZCh0KX0sQW49ZnVuY3Rpb24oKXtjb25zdCB0PUJvb2xlYW4oVG4uc2l6ZSk7cmV0dXJuIFRuLmZvckVhY2goKHQ9Pnt0cnl7dC5mbHVzaCgpfWNhdGNoKHQpe3NldFRpbWVvdXQoKCgpPT57dGhyb3cgdH0pKX19KSksdH07Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCmxldCBrbj0ic3RyaW5nIj09dHlwZW9mIGRvY3VtZW50LmhlYWQuc3R5bGUudG91Y2hBY3Rpb24sTG49Il9fcG9seW1lckdlc3R1cmVzIixQbj0iX19wb2x5bWVyR2VzdHVyZXNIYW5kbGVkIixObj0iX19wb2x5bWVyR2VzdHVyZXNUb3VjaEFjdGlvbiIsSW49WyJtb3VzZWRvd24iLCJtb3VzZW1vdmUiLCJtb3VzZXVwIiwiY2xpY2siXSxPbj1bMCwxLDQsMl0sUm49KGZ1bmN0aW9uKCl7dHJ5e3JldHVybiAxPT09bmV3IE1vdXNlRXZlbnQoInRlc3QiLHtidXR0b25zOjF9KS5idXR0b25zfWNhdGNoKHQpe3JldHVybiExfX0pKCk7ZnVuY3Rpb24gem4odCl7cmV0dXJuIEluLmluZGV4T2YodCk+LTF9bGV0IERuPSExO2Z1bmN0aW9uIEJuKHQpe2lmKCF6bih0KSYmInRvdWNoZW5kIiE9PXQpcmV0dXJuIGtuJiZEbiYmdj97cGFzc2l2ZTohMH06dm9pZCAwfSEoZnVuY3Rpb24oKXt0cnl7bGV0IHQ9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJwYXNzaXZlIix7Z2V0KCl7RG49ITB9fSk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInRlc3QiLG51bGwsdCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRlc3QiLG51bGwsdCl9Y2F0Y2godCl7fX0pKCk7bGV0IEhuPW5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQKD86W29hXWR8aG9uZSl8QW5kcm9pZC8pO2NvbnN0IEZuPVtdLFZuPXtidXR0b246ITAsaW5wdXQ6ITAsa2V5Z2VuOiEwLG1ldGVyOiEwLG91dHB1dDohMCx0ZXh0YXJlYTohMCxwcm9ncmVzczohMCxzZWxlY3Q6ITB9LFVuPXtidXR0b246ITAsY29tbWFuZDohMCxmaWVsZHNldDohMCxpbnB1dDohMCxrZXlnZW46ITAsb3B0Z3JvdXA6ITAsb3B0aW9uOiEwLHNlbGVjdDohMCx0ZXh0YXJlYTohMH07ZnVuY3Rpb24gam4odCl7bGV0IGU9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodC5sYWJlbHN8fFtdKTtpZighZS5sZW5ndGgpe2U9W107bGV0IG49dC5nZXRSb290Tm9kZSgpO2lmKHQuaWQpe2xldCBpPW4ucXVlcnlTZWxlY3RvckFsbChgbGFiZWxbZm9yID0gJHt0LmlkfV1gKTtmb3IobGV0IHQ9MDt0PGkubGVuZ3RoO3QrKyllLnB1c2goaVt0XSl9fXJldHVybiBlfWxldCBHbj1mdW5jdGlvbih0KXtsZXQgZT10LnNvdXJjZUNhcGFiaWxpdGllcztpZigoIWV8fGUuZmlyZXNUb3VjaEV2ZW50cykmJih0W1BuXT17c2tpcDohMH0sImNsaWNrIj09PXQudHlwZSkpe2xldCBlPSExLG49Wm4odCk7Zm9yKGxldCB0PTA7dDxuLmxlbmd0aDt0Kyspe2lmKG5bdF0ubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSlpZigibGFiZWwiPT09blt0XS5sb2NhbE5hbWUpRm4ucHVzaChuW3RdKTtlbHNlIGlmKFZuW25bdF0ubG9jYWxOYW1lXSl7bGV0IGk9am4oblt0XSk7Zm9yKGxldCB0PTA7dDxpLmxlbmd0aDt0KyspZT1lfHxGbi5pbmRleE9mKGlbdF0pPi0xfWlmKG5bdF09PT1Zbi5tb3VzZS50YXJnZXQpcmV0dXJufWlmKGUpcmV0dXJuO3QucHJldmVudERlZmF1bHQoKSx0LnN0b3BQcm9wYWdhdGlvbigpfX07ZnVuY3Rpb24gV24odCl7bGV0IGU9SG4/WyJjbGljayJdOkluO2ZvcihsZXQgbixpPTA7aTxlLmxlbmd0aDtpKyspbj1lW2ldLHQ/KEZuLmxlbmd0aD0wLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIobixHbiwhMCkpOmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIobixHbiwhMCl9ZnVuY3Rpb24gcW4odCl7bGV0IGU9dC50eXBlO2lmKCF6bihlKSlyZXR1cm4hMTtpZigibW91c2Vtb3ZlIj09PWUpe2xldCBlPXZvaWQgMD09PXQuYnV0dG9ucz8xOnQuYnV0dG9ucztyZXR1cm4gdCBpbnN0YW5jZW9mIHdpbmRvdy5Nb3VzZUV2ZW50JiYhUm4mJihlPU9uW3Qud2hpY2hdfHwwKSxCb29sZWFuKDEmZSl9cmV0dXJuIDA9PT0odm9pZCAwPT09dC5idXR0b24/MDp0LmJ1dHRvbil9bGV0IFluPXttb3VzZTp7dGFyZ2V0Om51bGwsbW91c2VJZ25vcmVKb2I6bnVsbH0sdG91Y2g6e3g6MCx5OjAsaWQ6LTEsc2Nyb2xsRGVjaWRlZDohMX19O2Z1bmN0aW9uIFhuKHQsZSxuKXt0Lm1vdmVmbj1lLHQudXBmbj1uLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsZSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsbil9ZnVuY3Rpb24gJG4odCl7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix0Lm1vdmVmbiksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsdC51cGZuKSx0Lm1vdmVmbj1udWxsLHQudXBmbj1udWxsfWRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIiwoZnVuY3Rpb24gS24odCl7WW4ubW91c2UubW91c2VJZ25vcmVKb2J8fFduKCEwKSxZbi5tb3VzZS50YXJnZXQ9Wm4odClbMF0sWW4ubW91c2UubW91c2VJZ25vcmVKb2I9RW4uZGVib3VuY2UoWW4ubW91c2UubW91c2VJZ25vcmVKb2IsZ3QuYWZ0ZXIoMjUwMCksKGZ1bmN0aW9uKCl7V24oKSxZbi5tb3VzZS50YXJnZXQ9bnVsbCxZbi5tb3VzZS5tb3VzZUlnbm9yZUpvYj1udWxsfSkpfSksISFEbiYme3Bhc3NpdmU6ITB9KTtjb25zdCBabj13aW5kb3cuU2hhZHlET00mJndpbmRvdy5TaGFkeURPTS5ub1BhdGNoP3dpbmRvdy5TaGFkeURPTS5jb21wb3NlZFBhdGg6dD0+dC5jb21wb3NlZFBhdGgmJnQuY29tcG9zZWRQYXRoKCl8fFtdLEpuPXt9LFFuPVtdO2Z1bmN0aW9uIHRpKHQpe2NvbnN0IGU9Wm4odCk7cmV0dXJuIGUubGVuZ3RoPjA/ZVswXTp0LnRhcmdldH1mdW5jdGlvbiBlaSh0KXtsZXQgZSxuPXQudHlwZSxpPXQuY3VycmVudFRhcmdldFtMbl07aWYoIWkpcmV0dXJuO2xldCByPWlbbl07aWYocil7aWYoIXRbUG5dJiYodFtQbl09e30sInRvdWNoIj09PW4uc2xpY2UoMCw1KSkpe2xldCBlPSh0PXQpLmNoYW5nZWRUb3VjaGVzWzBdO2lmKCJ0b3VjaHN0YXJ0Ij09PW4mJjE9PT10LnRvdWNoZXMubGVuZ3RoJiYoWW4udG91Y2guaWQ9ZS5pZGVudGlmaWVyKSxZbi50b3VjaC5pZCE9PWUuaWRlbnRpZmllcilyZXR1cm47a258fCJ0b3VjaHN0YXJ0IiE9PW4mJiJ0b3VjaG1vdmUiIT09bnx8KGZ1bmN0aW9uIG8odCl7bGV0IGU9dC5jaGFuZ2VkVG91Y2hlc1swXSxuPXQudHlwZTtpZigidG91Y2hzdGFydCI9PT1uKVluLnRvdWNoLng9ZS5jbGllbnRYLFluLnRvdWNoLnk9ZS5jbGllbnRZLFluLnRvdWNoLnNjcm9sbERlY2lkZWQ9ITE7ZWxzZSBpZigidG91Y2htb3ZlIj09PW4pe2lmKFluLnRvdWNoLnNjcm9sbERlY2lkZWQpcmV0dXJuO1luLnRvdWNoLnNjcm9sbERlY2lkZWQ9ITA7bGV0IG49KGZ1bmN0aW9uIGkodCl7bGV0IGU9ImF1dG8iLG49Wm4odCk7Zm9yKGxldCB0LGk9MDtpPG4ubGVuZ3RoO2krKylpZih0PW5baV0sdFtObl0pe2U9dFtObl07YnJlYWt9cmV0dXJuIGV9KSh0KSxpPSExLHI9TWF0aC5hYnMoWW4udG91Y2gueC1lLmNsaWVudFgpLG89TWF0aC5hYnMoWW4udG91Y2gueS1lLmNsaWVudFkpO3QuY2FuY2VsYWJsZSYmKCJub25lIj09PW4/aT0hMDoicGFuLXgiPT09bj9pPW8+cjoicGFuLXkiPT09biYmKGk9cj5vKSksaT90LnByZXZlbnREZWZhdWx0KCk6YWkoInRyYWNrIil9fSkodCl9aWYoZT10W1BuXSwhZS5za2lwKXtmb3IobGV0IG4saT0wO2k8UW4ubGVuZ3RoO2krKyluPVFuW2ldLHJbbi5uYW1lXSYmIWVbbi5uYW1lXSYmbi5mbG93JiZuLmZsb3cuc3RhcnQuaW5kZXhPZih0LnR5cGUpPi0xJiZuLnJlc2V0JiZuLnJlc2V0KCk7Zm9yKGxldCBpLG89MDtvPFFuLmxlbmd0aDtvKyspaT1RbltvXSxyW2kubmFtZV0mJiFlW2kubmFtZV0mJihlW2kubmFtZV09ITAsaVtuXSh0KSl9fX1mdW5jdGlvbiBuaSh0LGUsbil7cmV0dXJuISFKbltlXSYmKChmdW5jdGlvbiBpKHQsZSxuKXtsZXQgaT1KbltlXSxyPWkuZGVwcyxvPWkubmFtZSxhPXRbTG5dO2F8fCh0W0xuXT1hPXt9KTtmb3IobGV0IGUsbixpPTA7aTxyLmxlbmd0aDtpKyspZT1yW2ldLEhuJiZ6bihlKSYmImNsaWNrIiE9PWV8fChuPWFbZV0sbnx8KGFbZV09bj17X2NvdW50OjB9KSwwPT09bi5fY291bnQmJnQuYWRkRXZlbnRMaXN0ZW5lcihlLGVpLEJuKGUpKSxuW29dPShuW29dfHwwKSsxLG4uX2NvdW50PShuLl9jb3VudHx8MCkrMSk7dC5hZGRFdmVudExpc3RlbmVyKGUsbiksaS50b3VjaEFjdGlvbiYmcmkodCxpLnRvdWNoQWN0aW9uKX0pKHQsZSxuKSwhMCl9ZnVuY3Rpb24gaWkodCl7UW4ucHVzaCh0KTtmb3IobGV0IGU9MDtlPHQuZW1pdHMubGVuZ3RoO2UrKylKblt0LmVtaXRzW2VdXT10fWZ1bmN0aW9uIHJpKHQsZSl7a24mJnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCYmdnQucnVuKCgoKT0+e3Quc3R5bGUudG91Y2hBY3Rpb249ZX0pKSx0W05uXT1lfWZ1bmN0aW9uIG9pKHQsZSxuKXtsZXQgaT1uZXcgRXZlbnQoZSx7YnViYmxlczohMCxjYW5jZWxhYmxlOiEwLGNvbXBvc2VkOiEwfSk7aWYoaS5kZXRhaWw9bixZKHQpLmRpc3BhdGNoRXZlbnQoaSksaS5kZWZhdWx0UHJldmVudGVkKXtsZXQgdD1uLnByZXZlbnRlcnx8bi5zb3VyY2VFdmVudDt0JiZ0LnByZXZlbnREZWZhdWx0JiZ0LnByZXZlbnREZWZhdWx0KCl9fWZ1bmN0aW9uIGFpKHQpe2xldCBlPShmdW5jdGlvbiBuKHQpe2ZvcihsZXQgZSxuPTA7bjxRbi5sZW5ndGg7bisrKXtlPVFuW25dO2ZvcihsZXQgbixpPTA7aTxlLmVtaXRzLmxlbmd0aDtpKyspaWYobj1lLmVtaXRzW2ldLG49PT10KXJldHVybiBlfXJldHVybiBudWxsfSkodCk7ZS5pbmZvJiYoZS5pbmZvLnByZXZlbnQ9ITApfWZ1bmN0aW9uIHNpKHQsZSxuLGkpe2UmJm9pKGUsdCx7eDpuLmNsaWVudFgseTpuLmNsaWVudFksc291cmNlRXZlbnQ6bixwcmV2ZW50ZXI6aSxwcmV2ZW50OmZ1bmN0aW9uKHQpe3JldHVybiBhaSh0KX19KX1mdW5jdGlvbiBsaSh0LGUsbil7aWYodC5wcmV2ZW50KXJldHVybiExO2lmKHQuc3RhcnRlZClyZXR1cm4hMDtsZXQgaT1NYXRoLmFicyh0LngtZSkscj1NYXRoLmFicyh0Lnktbik7cmV0dXJuIGk+PTV8fHI+PTV9ZnVuY3Rpb24gY2kodCxlLG4pe2lmKCFlKXJldHVybjtsZXQgaSxyPXQubW92ZXNbdC5tb3Zlcy5sZW5ndGgtMl0sbz10Lm1vdmVzW3QubW92ZXMubGVuZ3RoLTFdLGE9MDtyJiYoaT1vLngtci54LGE9by55LXIueSksb2koZSwidHJhY2siLHtzdGF0ZTp0LnN0YXRlLHg6bi5jbGllbnRYLHk6bi5jbGllbnRZLGR4Om8ueC10LngsZHk6by55LXQueSxkZHg6aSxkZHk6YSxzb3VyY2VFdmVudDpuLGhvdmVyOmZ1bmN0aW9uKCl7cmV0dXJuKGZ1bmN0aW9uIHQoZSxuKXtsZXQgaT1kb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KGUsbikscj1pO2Zvcig7ciYmci5zaGFkb3dSb290JiYhd2luZG93LlNoYWR5RE9NOyl7bGV0IHQ9cjtpZihyPXIuc2hhZG93Um9vdC5lbGVtZW50RnJvbVBvaW50KGUsbiksdD09PXIpYnJlYWs7ciYmKGk9cil9cmV0dXJuIGl9KShuLmNsaWVudFgsbi5jbGllbnRZKX19KX1mdW5jdGlvbiB1aSh0LGUsbil7bGV0IGk9TWF0aC5hYnMoZS5jbGllbnRYLXQueCkscj1NYXRoLmFicyhlLmNsaWVudFktdC55KSxvPXRpKG58fGUpOyFvfHxVbltvLmxvY2FsTmFtZV0mJm8uaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpfHwoaXNOYU4oaSl8fGlzTmFOKHIpfHxpPD0yNSYmcjw9MjV8fChmdW5jdGlvbiBhKHQpe2lmKCJjbGljayI9PT10LnR5cGUpe2lmKDA9PT10LmRldGFpbClyZXR1cm4hMDtsZXQgZT10aSh0KTtpZighZS5ub2RlVHlwZXx8ZS5ub2RlVHlwZSE9PU5vZGUuRUxFTUVOVF9OT0RFKXJldHVybiEwO2xldCBuPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaT10LnBhZ2VYLHI9dC5wYWdlWTtyZXR1cm4hKGk+PW4ubGVmdCYmaTw9bi5yaWdodCYmcj49bi50b3AmJnI8PW4uYm90dG9tKX1yZXR1cm4hMX0pKGUpKSYmKHQucHJldmVudHx8b2kobywidGFwIix7eDplLmNsaWVudFgseTplLmNsaWVudFksc291cmNlRXZlbnQ6ZSxwcmV2ZW50ZXI6bn0pKX1paSh7bmFtZToiZG93bnVwIixkZXBzOlsibW91c2Vkb3duIiwidG91Y2hzdGFydCIsInRvdWNoZW5kIl0sZmxvdzp7c3RhcnQ6WyJtb3VzZWRvd24iLCJ0b3VjaHN0YXJ0Il0sZW5kOlsibW91c2V1cCIsInRvdWNoZW5kIl19LGVtaXRzOlsiZG93biIsInVwIl0saW5mbzp7bW92ZWZuOm51bGwsdXBmbjpudWxsfSxyZXNldDpmdW5jdGlvbigpeyRuKHRoaXMuaW5mbyl9LG1vdXNlZG93bjpmdW5jdGlvbih0KXtpZighcW4odCkpcmV0dXJuO2xldCBlPXRpKHQpLG49dGhpcztYbih0aGlzLmluZm8sKGZ1bmN0aW9uIHQoaSl7cW4oaSl8fChzaSgidXAiLGUsaSksJG4obi5pbmZvKSl9KSwoZnVuY3Rpb24gdChpKXtxbihpKSYmc2koInVwIixlLGkpLCRuKG4uaW5mbyl9KSksc2koImRvd24iLGUsdCl9LHRvdWNoc3RhcnQ6ZnVuY3Rpb24odCl7c2koImRvd24iLHRpKHQpLHQuY2hhbmdlZFRvdWNoZXNbMF0sdCl9LHRvdWNoZW5kOmZ1bmN0aW9uKHQpe3NpKCJ1cCIsdGkodCksdC5jaGFuZ2VkVG91Y2hlc1swXSx0KX19KSxpaSh7bmFtZToidHJhY2siLHRvdWNoQWN0aW9uOiJub25lIixkZXBzOlsibW91c2Vkb3duIiwidG91Y2hzdGFydCIsInRvdWNobW92ZSIsInRvdWNoZW5kIl0sZmxvdzp7c3RhcnQ6WyJtb3VzZWRvd24iLCJ0b3VjaHN0YXJ0Il0sZW5kOlsibW91c2V1cCIsInRvdWNoZW5kIl19LGVtaXRzOlsidHJhY2siXSxpbmZvOnt4OjAseTowLHN0YXRlOiJzdGFydCIsc3RhcnRlZDohMSxtb3ZlczpbXSxhZGRNb3ZlOmZ1bmN0aW9uKHQpe3RoaXMubW92ZXMubGVuZ3RoPjImJnRoaXMubW92ZXMuc2hpZnQoKSx0aGlzLm1vdmVzLnB1c2godCl9LG1vdmVmbjpudWxsLHVwZm46bnVsbCxwcmV2ZW50OiExfSxyZXNldDpmdW5jdGlvbigpe3RoaXMuaW5mby5zdGF0ZT0ic3RhcnQiLHRoaXMuaW5mby5zdGFydGVkPSExLHRoaXMuaW5mby5tb3Zlcz1bXSx0aGlzLmluZm8ueD0wLHRoaXMuaW5mby55PTAsdGhpcy5pbmZvLnByZXZlbnQ9ITEsJG4odGhpcy5pbmZvKX0sbW91c2Vkb3duOmZ1bmN0aW9uKHQpe2lmKCFxbih0KSlyZXR1cm47bGV0IGU9dGkodCksbj10aGlzLGk9ZnVuY3Rpb24gdChpKXtsZXQgcj1pLmNsaWVudFgsbz1pLmNsaWVudFk7bGkobi5pbmZvLHIsbykmJihuLmluZm8uc3RhdGU9bi5pbmZvLnN0YXJ0ZWQ/Im1vdXNldXAiPT09aS50eXBlPyJlbmQiOiJ0cmFjayI6InN0YXJ0Iiwic3RhcnQiPT09bi5pbmZvLnN0YXRlJiZhaSgidGFwIiksbi5pbmZvLmFkZE1vdmUoe3g6cix5Om99KSxxbihpKXx8KG4uaW5mby5zdGF0ZT0iZW5kIiwkbihuLmluZm8pKSxlJiZjaShuLmluZm8sZSxpKSxuLmluZm8uc3RhcnRlZD0hMCl9O1huKHRoaXMuaW5mbyxpLChmdW5jdGlvbiB0KGUpe24uaW5mby5zdGFydGVkJiZpKGUpLCRuKG4uaW5mbyl9KSksdGhpcy5pbmZvLng9dC5jbGllbnRYLHRoaXMuaW5mby55PXQuY2xpZW50WX0sdG91Y2hzdGFydDpmdW5jdGlvbih0KXtsZXQgZT10LmNoYW5nZWRUb3VjaGVzWzBdO3RoaXMuaW5mby54PWUuY2xpZW50WCx0aGlzLmluZm8ueT1lLmNsaWVudFl9LHRvdWNobW92ZTpmdW5jdGlvbih0KXtsZXQgZT10aSh0KSxuPXQuY2hhbmdlZFRvdWNoZXNbMF0saT1uLmNsaWVudFgscj1uLmNsaWVudFk7bGkodGhpcy5pbmZvLGkscikmJigic3RhcnQiPT09dGhpcy5pbmZvLnN0YXRlJiZhaSgidGFwIiksdGhpcy5pbmZvLmFkZE1vdmUoe3g6aSx5OnJ9KSxjaSh0aGlzLmluZm8sZSxuKSx0aGlzLmluZm8uc3RhdGU9InRyYWNrIix0aGlzLmluZm8uc3RhcnRlZD0hMCl9LHRvdWNoZW5kOmZ1bmN0aW9uKHQpe2xldCBlPXRpKHQpLG49dC5jaGFuZ2VkVG91Y2hlc1swXTt0aGlzLmluZm8uc3RhcnRlZCYmKHRoaXMuaW5mby5zdGF0ZT0iZW5kIix0aGlzLmluZm8uYWRkTW92ZSh7eDpuLmNsaWVudFgseTpuLmNsaWVudFl9KSxjaSh0aGlzLmluZm8sZSxuKSl9fSksaWkoe25hbWU6InRhcCIsZGVwczpbIm1vdXNlZG93biIsImNsaWNrIiwidG91Y2hzdGFydCIsInRvdWNoZW5kIl0sZmxvdzp7c3RhcnQ6WyJtb3VzZWRvd24iLCJ0b3VjaHN0YXJ0Il0sZW5kOlsiY2xpY2siLCJ0b3VjaGVuZCJdfSxlbWl0czpbInRhcCJdLGluZm86e3g6TmFOLHk6TmFOLHByZXZlbnQ6ITF9LHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5pbmZvLng9TmFOLHRoaXMuaW5mby55PU5hTix0aGlzLmluZm8ucHJldmVudD0hMX0sbW91c2Vkb3duOmZ1bmN0aW9uKHQpe3FuKHQpJiYodGhpcy5pbmZvLng9dC5jbGllbnRYLHRoaXMuaW5mby55PXQuY2xpZW50WSl9LGNsaWNrOmZ1bmN0aW9uKHQpe3FuKHQpJiZ1aSh0aGlzLmluZm8sdCl9LHRvdWNoc3RhcnQ6ZnVuY3Rpb24odCl7Y29uc3QgZT10LmNoYW5nZWRUb3VjaGVzWzBdO3RoaXMuaW5mby54PWUuY2xpZW50WCx0aGlzLmluZm8ueT1lLmNsaWVudFl9LHRvdWNoZW5kOmZ1bmN0aW9uKHQpe3VpKHRoaXMuaW5mbyx0LmNoYW5nZWRUb3VjaGVzWzBdLHQpfX0pO2NvbnN0IGhpPXRpLGRpPUkoKHQ9PmNsYXNzIGV4dGVuZHMgdHtfYWRkRXZlbnRMaXN0ZW5lclRvTm9kZSh0LGUsbil7bmkodCxlLG4pfHxzdXBlci5fYWRkRXZlbnRMaXN0ZW5lclRvTm9kZSh0LGUsbil9X3JlbW92ZUV2ZW50TGlzdGVuZXJGcm9tTm9kZSh0LGUsbil7KGZ1bmN0aW9uIGkodCxlLG4pe3JldHVybiEhSm5bZV0mJigoZnVuY3Rpb24gaSh0LGUsbil7bGV0IGk9Sm5bZV0scj1pLmRlcHMsbz1pLm5hbWUsYT10W0xuXTtpZihhKWZvcihsZXQgZSxuLGk9MDtpPHIubGVuZ3RoO2krKyllPXJbaV0sbj1hW2VdLG4mJm5bb10mJihuW29dPShuW29dfHwxKS0xLG4uX2NvdW50PShuLl9jb3VudHx8MSktMSwwPT09bi5fY291bnQmJnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLGVpLEJuKGUpKSk7dC5yZW1vdmVFdmVudExpc3RlbmVyKGUsbil9KSh0LGUsbiksITApfSkodCxlLG4pfHxzdXBlci5fcmVtb3ZlRXZlbnRMaXN0ZW5lckZyb21Ob2RlKHQsZSxuKX19KSkscGk9Lzpob3N0XCg6ZGlyXCgobHRyfHJ0bClcKVwpL2csZmk9LyhbXHNcdy0jXC5cW1xdXCpdKik6ZGlyXCgobHRyfHJ0bClcKS9nLG1pPS86ZGlyXCgoPzpsdHJ8cnRsKVwpLyxnaT1Cb29sZWFuKHdpbmRvdy5TaGFkeURPTSYmd2luZG93LlNoYWR5RE9NLmluVXNlKSxfaT1bXTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi9sZXQgeWk9bnVsbCx2aT0iIjtmdW5jdGlvbiBiaSgpe3ZpPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5nZXRBdHRyaWJ1dGUoImRpciIpfWZ1bmN0aW9uIHhpKHQpe3QuX19hdXRvRGlyT3B0T3V0fHx0LnNldEF0dHJpYnV0ZSgiZGlyIix2aSl9ZnVuY3Rpb24gd2koKXtiaSgpLHZpPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5nZXRBdHRyaWJ1dGUoImRpciIpO2ZvcihsZXQgdD0wO3Q8X2kubGVuZ3RoO3QrKyl4aShfaVt0XSl9Y29uc3QgU2k9SSgodD0+e2dpfHx5aXx8KGJpKCkseWk9bmV3IE11dGF0aW9uT2JzZXJ2ZXIod2kpLHlpLm9ic2VydmUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHthdHRyaWJ1dGVzOiEwLGF0dHJpYnV0ZUZpbHRlcjpbImRpciJdfSkpO2NvbnN0IGU9TXQodCk7Y2xhc3MgbiBleHRlbmRzIGV7c3RhdGljIF9wcm9jZXNzU3R5bGVUZXh0KHQsbil7cmV0dXJuIHQ9ZS5fcHJvY2Vzc1N0eWxlVGV4dC5jYWxsKHRoaXMsdCxuKSwhZ2kmJm1pLnRlc3QodCkmJih0PXRoaXMuX3JlcGxhY2VEaXJJbkNzc1RleHQodCksdGhpcy5fX2FjdGl2YXRlRGlyPSEwKSx0fXN0YXRpYyBfcmVwbGFjZURpckluQ3NzVGV4dCh0KXtsZXQgZT10O3JldHVybiBlPWUucmVwbGFjZShwaSwnOmhvc3QoW2Rpcj0iJDEiXSknKSxlPWUucmVwbGFjZShmaSwnOmhvc3QoW2Rpcj0iJDIiXSkgJDEnKSxlfWNvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9fYXV0b0Rpck9wdE91dD0hMX1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5fX2F1dG9EaXJPcHRPdXQ9dGhpcy5oYXNBdHRyaWJ1dGUoImRpciIpfWNvbm5lY3RlZENhbGxiYWNrKCl7ZS5wcm90b3R5cGUuY29ubmVjdGVkQ2FsbGJhY2smJnN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5jb25zdHJ1Y3Rvci5fX2FjdGl2YXRlRGlyJiYoKGZ1bmN0aW9uIHQoKXt5aSYmeWkudGFrZVJlY29yZHMoKS5sZW5ndGgmJndpKCl9KSgpLF9pLnB1c2godGhpcykseGkodGhpcykpfWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7aWYoZS5wcm90b3R5cGUuZGlzY29ubmVjdGVkQ2FsbGJhY2smJnN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5jb25zdHJ1Y3Rvci5fX2FjdGl2YXRlRGlyKXtjb25zdCB0PV9pLmluZGV4T2YodGhpcyk7dD4tMSYmX2kuc3BsaWNlKHQsMSl9fX1yZXR1cm4gbi5fX2FjdGl2YXRlRGlyPSExLG59KSk7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovbGV0IE1pPSExLEVpPVtdLFRpPVtdO2Z1bmN0aW9uIENpKCl7TWk9ITAscmVxdWVzdEFuaW1hdGlvbkZyYW1lKChmdW5jdGlvbigpe01pPSExLChmdW5jdGlvbiB0KGUpe2Zvcig7ZS5sZW5ndGg7KUFpKGUuc2hpZnQoKSl9KShFaSksc2V0VGltZW91dCgoZnVuY3Rpb24oKXshKGZ1bmN0aW9uIHQoZSl7Zm9yKGxldCB0PTAsbj1lLmxlbmd0aDt0PG47dCsrKUFpKGUuc2hpZnQoKSl9KShUaSl9KSl9KSl9ZnVuY3Rpb24gQWkodCl7Y29uc3QgZT10WzBdLG49dFsxXSxpPXRbMl07dHJ5e24uYXBwbHkoZSxpKX1jYXRjaCh0KXtzZXRUaW1lb3V0KCgoKT0+e3Rocm93IHR9KSl9fWZ1bmN0aW9uIGtpKHQsZSxuKXtNaXx8Q2koKSxUaS5wdXNoKFt0LGUsbl0pfQovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dAogICAgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28KICAgIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqL2Z1bmN0aW9uIExpKCl7ZG9jdW1lbnQuYm9keS5yZW1vdmVBdHRyaWJ1dGUoInVucmVzb2x2ZWQiKX0KLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KZnVuY3Rpb24gUGkodCxlLG4pe3JldHVybntpbmRleDp0LHJlbW92ZWQ6ZSxhZGRlZENvdW50Om59fWZ1bmN0aW9uIE5pKHQsZSl7cmV0dXJuKGZ1bmN0aW9uIG4odCxlLGkscixvLGEpe2xldCBzLGw9MCxjPTAsdT1NYXRoLm1pbihpLWUsYS1vKTtpZigwPT1lJiYwPT1vJiYobD0oZnVuY3Rpb24gaCh0LGUsbil7Zm9yKGxldCBpPTA7aTxuO2krKylpZighSWkodFtpXSxlW2ldKSlyZXR1cm4gaTtyZXR1cm4gbn0pKHQscix1KSksaT09dC5sZW5ndGgmJmE9PXIubGVuZ3RoJiYoYz0oZnVuY3Rpb24gZCh0LGUsbil7bGV0IGk9dC5sZW5ndGgscj1lLmxlbmd0aCxvPTA7Zm9yKDtvPG4mJklpKHRbLS1pXSxlWy0tcl0pOylvKys7cmV0dXJuIG99KSh0LHIsdS1sKSksbys9bCxhLT1jLChpLT1jKS0oZSs9bCk9PTAmJmEtbz09MClyZXR1cm5bXTtpZihlPT1pKXtmb3Iocz1QaShlLFtdLDApO288YTspcy5yZW1vdmVkLnB1c2gocltvKytdKTtyZXR1cm5bc119aWYobz09YSlyZXR1cm5bUGkoZSxbXSxpLWUpXTtsZXQgcD0oZnVuY3Rpb24gbSh0KXtsZXQgZT10Lmxlbmd0aC0xLG49dFswXS5sZW5ndGgtMSxpPXRbZV1bbl0scj1bXTtmb3IoO2U+MHx8bj4wOyl7aWYoMD09ZSl7ci5wdXNoKDIpLG4tLTtjb250aW51ZX1pZigwPT1uKXtyLnB1c2goMyksZS0tO2NvbnRpbnVlfWxldCBvLGE9dFtlLTFdW24tMV0scz10W2UtMV1bbl0sbD10W2VdW24tMV07bz1zPGw/czxhP3M6YTpsPGE/bDphLG89PWE/KGE9PWk/ci5wdXNoKDApOihyLnB1c2goMSksaT1hKSxlLS0sbi0tKTpvPT1zPyhyLnB1c2goMyksZS0tLGk9cyk6KHIucHVzaCgyKSxuLS0saT1sKX1yZXR1cm4gci5yZXZlcnNlKCkscn0pKChmdW5jdGlvbiBmKHQsZSxuLGkscixvKXtsZXQgYT1vLXIrMSxzPW4tZSsxLGw9bmV3IEFycmF5KGEpO2ZvcihsZXQgdD0wO3Q8YTt0KyspbFt0XT1uZXcgQXJyYXkocyksbFt0XVswXT10O2ZvcihsZXQgdD0wO3Q8czt0KyspbFswXVt0XT10O2ZvcihsZXQgbj0xO248YTtuKyspZm9yKGxldCBvPTE7bzxzO28rKylpZihJaSh0W2Urby0xXSxpW3Irbi0xXSkpbFtuXVtvXT1sW24tMV1bby0xXTtlbHNle2xldCB0PWxbbi0xXVtvXSsxLGU9bFtuXVtvLTFdKzE7bFtuXVtvXT10PGU/dDplfXJldHVybiBsfSkodCxlLGkscixvLGEpKTtzPXZvaWQgMDtsZXQgZz1bXSxfPWUseT1vO2ZvcihsZXQgdD0wO3Q8cC5sZW5ndGg7dCsrKXN3aXRjaChwW3RdKXtjYXNlIDA6cyYmKGcucHVzaChzKSxzPXZvaWQgMCksXysrLHkrKzticmVhaztjYXNlIDE6c3x8KHM9UGkoXyxbXSwwKSkscy5hZGRlZENvdW50KyssXysrLHMucmVtb3ZlZC5wdXNoKHJbeV0pLHkrKzticmVhaztjYXNlIDI6c3x8KHM9UGkoXyxbXSwwKSkscy5hZGRlZENvdW50KyssXysrO2JyZWFrO2Nhc2UgMzpzfHwocz1QaShfLFtdLDApKSxzLnJlbW92ZWQucHVzaChyW3ldKSx5Kyt9cmV0dXJuIHMmJmcucHVzaChzKSxnfSkodCwwLHQubGVuZ3RoLGUsMCxlLmxlbmd0aCl9ZnVuY3Rpb24gSWkodCxlKXtyZXR1cm4gdD09PWV9Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovZnVuY3Rpb24gT2kodCl7cmV0dXJuInNsb3QiPT09dC5sb2NhbE5hbWV9ImludGVyYWN0aXZlIj09PWRvY3VtZW50LnJlYWR5U3RhdGV8fCJjb21wbGV0ZSI9PT1kb2N1bWVudC5yZWFkeVN0YXRlP0xpKCk6d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLExpKTtsZXQgUmk9Y2xhc3N7c3RhdGljIGdldEZsYXR0ZW5lZE5vZGVzKHQpe2NvbnN0IGU9WSh0KTtyZXR1cm4gT2kodCk/KHQ9dCxlLmFzc2lnbmVkTm9kZXMoe2ZsYXR0ZW46ITB9KSk6QXJyYXkuZnJvbShlLmNoaWxkTm9kZXMpLm1hcCgodD0+T2kodCk/WSh0PXQpLmFzc2lnbmVkTm9kZXMoe2ZsYXR0ZW46ITB9KTpbdF0pKS5yZWR1Y2UoKCh0LGUpPT50LmNvbmNhdChlKSksW10pfWNvbnN0cnVjdG9yKHQsZSl7dGhpcy5fc2hhZHlDaGlsZHJlbk9ic2VydmVyPW51bGwsdGhpcy5fbmF0aXZlQ2hpbGRyZW5PYnNlcnZlcj1udWxsLHRoaXMuX2Nvbm5lY3RlZD0hMSx0aGlzLl90YXJnZXQ9dCx0aGlzLmNhbGxiYWNrPWUsdGhpcy5fZWZmZWN0aXZlTm9kZXM9W10sdGhpcy5fb2JzZXJ2ZXI9bnVsbCx0aGlzLl9zY2hlZHVsZWQ9ITEsdGhpcy5fYm91bmRTY2hlZHVsZT0oKT0+e3RoaXMuX3NjaGVkdWxlKCl9LHRoaXMuY29ubmVjdCgpLHRoaXMuX3NjaGVkdWxlKCl9Y29ubmVjdCgpe09pKHRoaXMuX3RhcmdldCk/dGhpcy5fbGlzdGVuU2xvdHMoW3RoaXMuX3RhcmdldF0pOlkodGhpcy5fdGFyZ2V0KS5jaGlsZHJlbiYmKHRoaXMuX2xpc3RlblNsb3RzKFkodGhpcy5fdGFyZ2V0KS5jaGlsZHJlbiksd2luZG93LlNoYWR5RE9NP3RoaXMuX3NoYWR5Q2hpbGRyZW5PYnNlcnZlcj13aW5kb3cuU2hhZHlET00ub2JzZXJ2ZUNoaWxkcmVuKHRoaXMuX3RhcmdldCwodD0+e3RoaXMuX3Byb2Nlc3NNdXRhdGlvbnModCl9KSk6KHRoaXMuX25hdGl2ZUNoaWxkcmVuT2JzZXJ2ZXI9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoKHQ9Pnt0aGlzLl9wcm9jZXNzTXV0YXRpb25zKHQpfSkpLHRoaXMuX25hdGl2ZUNoaWxkcmVuT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLl90YXJnZXQse2NoaWxkTGlzdDohMH0pKSksdGhpcy5fY29ubmVjdGVkPSEwfWRpc2Nvbm5lY3QoKXtPaSh0aGlzLl90YXJnZXQpP3RoaXMuX3VubGlzdGVuU2xvdHMoW3RoaXMuX3RhcmdldF0pOlkodGhpcy5fdGFyZ2V0KS5jaGlsZHJlbiYmKHRoaXMuX3VubGlzdGVuU2xvdHMoWSh0aGlzLl90YXJnZXQpLmNoaWxkcmVuKSx3aW5kb3cuU2hhZHlET00mJnRoaXMuX3NoYWR5Q2hpbGRyZW5PYnNlcnZlcj8od2luZG93LlNoYWR5RE9NLnVub2JzZXJ2ZUNoaWxkcmVuKHRoaXMuX3NoYWR5Q2hpbGRyZW5PYnNlcnZlciksdGhpcy5fc2hhZHlDaGlsZHJlbk9ic2VydmVyPW51bGwpOnRoaXMuX25hdGl2ZUNoaWxkcmVuT2JzZXJ2ZXImJih0aGlzLl9uYXRpdmVDaGlsZHJlbk9ic2VydmVyLmRpc2Nvbm5lY3QoKSx0aGlzLl9uYXRpdmVDaGlsZHJlbk9ic2VydmVyPW51bGwpKSx0aGlzLl9jb25uZWN0ZWQ9ITF9X3NjaGVkdWxlKCl7dGhpcy5fc2NoZWR1bGVkfHwodGhpcy5fc2NoZWR1bGVkPSEwLHZ0LnJ1bigoKCk9PnRoaXMuZmx1c2goKSkpKX1fcHJvY2Vzc011dGF0aW9ucyh0KXt0aGlzLl9wcm9jZXNzU2xvdE11dGF0aW9ucyh0KSx0aGlzLmZsdXNoKCl9X3Byb2Nlc3NTbG90TXV0YXRpb25zKHQpe2lmKHQpZm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspe2xldCBuPXRbZV07bi5hZGRlZE5vZGVzJiZ0aGlzLl9saXN0ZW5TbG90cyhuLmFkZGVkTm9kZXMpLG4ucmVtb3ZlZE5vZGVzJiZ0aGlzLl91bmxpc3RlblNsb3RzKG4ucmVtb3ZlZE5vZGVzKX19Zmx1c2goKXtpZighdGhpcy5fY29ubmVjdGVkKXJldHVybiExO3dpbmRvdy5TaGFkeURPTSYmU2hhZHlET00uZmx1c2goKSx0aGlzLl9uYXRpdmVDaGlsZHJlbk9ic2VydmVyP3RoaXMuX3Byb2Nlc3NTbG90TXV0YXRpb25zKHRoaXMuX25hdGl2ZUNoaWxkcmVuT2JzZXJ2ZXIudGFrZVJlY29yZHMoKSk6dGhpcy5fc2hhZHlDaGlsZHJlbk9ic2VydmVyJiZ0aGlzLl9wcm9jZXNzU2xvdE11dGF0aW9ucyh0aGlzLl9zaGFkeUNoaWxkcmVuT2JzZXJ2ZXIudGFrZVJlY29yZHMoKSksdGhpcy5fc2NoZWR1bGVkPSExO2xldCB0PXt0YXJnZXQ6dGhpcy5fdGFyZ2V0LGFkZGVkTm9kZXM6W10scmVtb3ZlZE5vZGVzOltdfSxlPXRoaXMuY29uc3RydWN0b3IuZ2V0RmxhdHRlbmVkTm9kZXModGhpcy5fdGFyZ2V0KSxuPU5pKGUsdGhpcy5fZWZmZWN0aXZlTm9kZXMpO2ZvcihsZXQgZSxpPTA7aTxuLmxlbmd0aCYmKGU9bltpXSk7aSsrKWZvcihsZXQgbixpPTA7aTxlLnJlbW92ZWQubGVuZ3RoJiYobj1lLnJlbW92ZWRbaV0pO2krKyl0LnJlbW92ZWROb2Rlcy5wdXNoKG4pO2ZvcihsZXQgaSxyPTA7cjxuLmxlbmd0aCYmKGk9bltyXSk7cisrKWZvcihsZXQgbj1pLmluZGV4O248aS5pbmRleCtpLmFkZGVkQ291bnQ7bisrKXQuYWRkZWROb2Rlcy5wdXNoKGVbbl0pO3RoaXMuX2VmZmVjdGl2ZU5vZGVzPWU7bGV0IGk9ITE7cmV0dXJuKHQuYWRkZWROb2Rlcy5sZW5ndGh8fHQucmVtb3ZlZE5vZGVzLmxlbmd0aCkmJihpPSEwLHRoaXMuY2FsbGJhY2suY2FsbCh0aGlzLl90YXJnZXQsdCkpLGl9X2xpc3RlblNsb3RzKHQpe2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKXtsZXQgbj10W2VdO09pKG4pJiZuLmFkZEV2ZW50TGlzdGVuZXIoInNsb3RjaGFuZ2UiLHRoaXMuX2JvdW5kU2NoZWR1bGUpfX1fdW5saXN0ZW5TbG90cyh0KXtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKyl7bGV0IG49dFtlXTtPaShuKSYmbi5yZW1vdmVFdmVudExpc3RlbmVyKCJzbG90Y2hhbmdlIix0aGlzLl9ib3VuZFNjaGVkdWxlKX19fTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi9jb25zdCB6aT1mdW5jdGlvbigpe2xldCB0LGU7ZG97dD13aW5kb3cuU2hhZHlET00mJlNoYWR5RE9NLmZsdXNoKCksd2luZG93LlNoYWR5Q1NTJiZ3aW5kb3cuU2hhZHlDU1MuU2NvcGluZ1NoaW0mJndpbmRvdy5TaGFkeUNTUy5TY29waW5nU2hpbS5mbHVzaCgpLGU9QW4oKX13aGlsZSh0fHxlKX0sRGk9RWxlbWVudC5wcm90b3R5cGUsQmk9RGkubWF0Y2hlc3x8RGkubWF0Y2hlc1NlbGVjdG9yfHxEaS5tb3pNYXRjaGVzU2VsZWN0b3J8fERpLm1zTWF0Y2hlc1NlbGVjdG9yfHxEaS5vTWF0Y2hlc1NlbGVjdG9yfHxEaS53ZWJraXRNYXRjaGVzU2VsZWN0b3IsSGk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gQmkuY2FsbCh0LGUpfTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi9jbGFzcyBGaXtjb25zdHJ1Y3Rvcih0KXt3aW5kb3cuU2hhZHlET00mJndpbmRvdy5TaGFkeURPTS5pblVzZSYmd2luZG93LlNoYWR5RE9NLnBhdGNoKHQpLHRoaXMubm9kZT10fW9ic2VydmVOb2Rlcyh0KXtyZXR1cm4gbmV3IFJpKHRoaXMubm9kZSx0KX11bm9ic2VydmVOb2Rlcyh0KXt0LmRpc2Nvbm5lY3QoKX1ub3RpZnlPYnNlcnZlcigpe31kZWVwQ29udGFpbnModCl7aWYoWSh0aGlzLm5vZGUpLmNvbnRhaW5zKHQpKXJldHVybiEwO2xldCBlPXQsbj10Lm93bmVyRG9jdW1lbnQ7Zm9yKDtlJiZlIT09biYmZSE9PXRoaXMubm9kZTspZT1ZKGUpLnBhcmVudE5vZGV8fFkoZSkuaG9zdDtyZXR1cm4gZT09PXRoaXMubm9kZX1nZXRPd25lclJvb3QoKXtyZXR1cm4gWSh0aGlzLm5vZGUpLmdldFJvb3ROb2RlKCl9Z2V0RGlzdHJpYnV0ZWROb2Rlcygpe3JldHVybiJzbG90Ij09PXRoaXMubm9kZS5sb2NhbE5hbWU/WSh0aGlzLm5vZGUpLmFzc2lnbmVkTm9kZXMoe2ZsYXR0ZW46ITB9KTpbXX1nZXREZXN0aW5hdGlvbkluc2VydGlvblBvaW50cygpe2xldCB0PVtdLGU9WSh0aGlzLm5vZGUpLmFzc2lnbmVkU2xvdDtmb3IoO2U7KXQucHVzaChlKSxlPVkoZSkuYXNzaWduZWRTbG90O3JldHVybiB0fWltcG9ydE5vZGUodCxlKXtsZXQgbj10aGlzLm5vZGUgaW5zdGFuY2VvZiBEb2N1bWVudD90aGlzLm5vZGU6dGhpcy5ub2RlLm93bmVyRG9jdW1lbnQ7cmV0dXJuIFkobikuaW1wb3J0Tm9kZSh0LGUpfWdldEVmZmVjdGl2ZUNoaWxkTm9kZXMoKXtyZXR1cm4gUmkuZ2V0RmxhdHRlbmVkTm9kZXModGhpcy5ub2RlKX1xdWVyeURpc3RyaWJ1dGVkRWxlbWVudHModCl7bGV0IGU9dGhpcy5nZXRFZmZlY3RpdmVDaGlsZE5vZGVzKCksbj1bXTtmb3IobGV0IGkscj0wLG89ZS5sZW5ndGg7cjxvJiYoaT1lW3JdKTtyKyspaS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFJiZIaShpLHQpJiZuLnB1c2goaSk7cmV0dXJuIG59Z2V0IGFjdGl2ZUVsZW1lbnQoKXtsZXQgdD10aGlzLm5vZGU7cmV0dXJuIHZvaWQgMCE9PXQuX2FjdGl2ZUVsZW1lbnQ/dC5fYWN0aXZlRWxlbWVudDp0LmFjdGl2ZUVsZW1lbnR9fWZ1bmN0aW9uIFZpKHQsZSl7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspe2xldCBpPWVbbl07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsaSx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZVtpXX0sY29uZmlndXJhYmxlOiEwfSl9fWNsYXNzIFVpe2NvbnN0cnVjdG9yKHQpe3RoaXMuZXZlbnQ9dH1nZXQgcm9vdFRhcmdldCgpe3JldHVybiB0aGlzLnBhdGhbMF19Z2V0IGxvY2FsVGFyZ2V0KCl7cmV0dXJuIHRoaXMuZXZlbnQudGFyZ2V0fWdldCBwYXRoKCl7cmV0dXJuIHRoaXMuZXZlbnQuY29tcG9zZWRQYXRoKCl9fWxldCBqaT1GaTtpZih3aW5kb3cuU2hhZHlET00mJndpbmRvdy5TaGFkeURPTS5pblVzZSYmd2luZG93LlNoYWR5RE9NLm5vUGF0Y2gmJndpbmRvdy5TaGFkeURPTS5XcmFwcGVyKXtjbGFzcyB0IGV4dGVuZHMgd2luZG93LlNoYWR5RE9NLldyYXBwZXJ7fU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEZpLnByb3RvdHlwZSkuZm9yRWFjaCgoZT0+eyJhY3RpdmVFbGVtZW50IiE9ZSYmKHQucHJvdG90eXBlW2VdPUZpLnByb3RvdHlwZVtlXSl9KSksVmkodC5wcm90b3R5cGUsWyJjbGFzc0xpc3QiXSksamk9dCxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhVaS5wcm90b3R5cGUse2xvY2FsVGFyZ2V0OntnZXQoKXtjb25zdCB0PXRoaXMuZXZlbnQuY3VycmVudFRhcmdldCxlPXQmJnFpKHQpLmdldE93bmVyUm9vdCgpLG49dGhpcy5wYXRoO2ZvcihsZXQgdD0wO3Q8bi5sZW5ndGg7dCsrKXtjb25zdCBpPW5bdF07aWYocWkoaSkuZ2V0T3duZXJSb290KCk9PT1lKXJldHVybiBpfX0sY29uZmlndXJhYmxlOiEwfSxwYXRoOntnZXQoKXtyZXR1cm4gd2luZG93LlNoYWR5RE9NLmNvbXBvc2VkUGF0aCh0aGlzLmV2ZW50KX0sY29uZmlndXJhYmxlOiEwfX0pfWVsc2UhKGZ1bmN0aW9uIEdpKHQsZSl7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspe2xldCBpPWVbbl07dFtpXT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVbaV0uYXBwbHkodGhpcy5ub2RlLGFyZ3VtZW50cyl9fX0pKEZpLnByb3RvdHlwZSxbImNsb25lTm9kZSIsImFwcGVuZENoaWxkIiwiaW5zZXJ0QmVmb3JlIiwicmVtb3ZlQ2hpbGQiLCJyZXBsYWNlQ2hpbGQiLCJzZXRBdHRyaWJ1dGUiLCJyZW1vdmVBdHRyaWJ1dGUiLCJxdWVyeVNlbGVjdG9yIiwicXVlcnlTZWxlY3RvckFsbCJdKSxWaShGaS5wcm90b3R5cGUsWyJwYXJlbnROb2RlIiwiZmlyc3RDaGlsZCIsImxhc3RDaGlsZCIsIm5leHRTaWJsaW5nIiwicHJldmlvdXNTaWJsaW5nIiwiZmlyc3RFbGVtZW50Q2hpbGQiLCJsYXN0RWxlbWVudENoaWxkIiwibmV4dEVsZW1lbnRTaWJsaW5nIiwicHJldmlvdXNFbGVtZW50U2libGluZyIsImNoaWxkTm9kZXMiLCJjaGlsZHJlbiIsImNsYXNzTGlzdCJdKSwoZnVuY3Rpb24gV2kodCxlKXtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKyl7bGV0IGk9ZVtuXTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxpLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlW2ldfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5ub2RlW2ldPXR9LGNvbmZpZ3VyYWJsZTohMH0pfX0pKEZpLnByb3RvdHlwZSxbInRleHRDb250ZW50IiwiaW5uZXJIVE1MIiwiY2xhc3NOYW1lIl0pO2NvbnN0IHFpPWZ1bmN0aW9uKHQpe2lmKCh0PXR8fGRvY3VtZW50KWluc3RhbmNlb2YgamkpcmV0dXJuIHQ7aWYodCBpbnN0YW5jZW9mIFVpKXJldHVybiB0O2xldCBlPXQuX19kb21BcGk7cmV0dXJuIGV8fChlPXQgaW5zdGFuY2VvZiBFdmVudD9uZXcgVWkodCk6bmV3IGppKHQpLHQuX19kb21BcGk9ZSksZX0sWWk9d2luZG93LlNoYWR5RE9NLFhpPXdpbmRvdy5TaGFkeUNTUzsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE5IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi9mdW5jdGlvbiAkaSh0LGUpe3JldHVybiBZKHQpLmdldFJvb3ROb2RlKCk9PT1lfQovKioKICAgICAqIEBmaWxlb3ZlcnZpZXcKICAgICAqIEBzdXBwcmVzcyB7Y2hlY2tQcm90b3R5cGFsVHlwZXN9CiAgICAgKiBAbGljZW5zZSBDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgICogVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICAgKiBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZAogICAgICogYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heQogICAgICogYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieQogICAgICogR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUAogICAgICogcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgICovCmNvbnN0IEtpPSJkaXNhYmxlLXVwZ3JhZGUiLFppPXQ9Pntmb3IoO3Q7KXtjb25zdCBlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwib2JzZXJ2ZWRBdHRyaWJ1dGVzIik7aWYoZSlyZXR1cm4gZS5nZXQ7dD1PYmplY3QuZ2V0UHJvdG90eXBlT2YodC5wcm90b3R5cGUpLmNvbnN0cnVjdG9yfXJldHVybigpPT5bXX07SSgodD0+e2NvbnN0IGU9bWUodCk7bGV0IG49WmkoZSk7cmV0dXJuIGNsYXNzIGV4dGVuZHMgZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCl9c3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKXtyZXR1cm4gbi5jYWxsKHRoaXMpLmNvbmNhdChLaSl9X2luaXRpYWxpemVQcm9wZXJ0aWVzKCl7dGhpcy5oYXNBdHRyaWJ1dGUoS2kpP3RoaXMuX19pc1VwZ3JhZGVEaXNhYmxlZD0hMDpzdXBlci5faW5pdGlhbGl6ZVByb3BlcnRpZXMoKX1fZW5hYmxlUHJvcGVydGllcygpe3RoaXMuX19pc1VwZ3JhZGVEaXNhYmxlZHx8c3VwZXIuX2VuYWJsZVByb3BlcnRpZXMoKX1fY2FuQXBwbHlQcm9wZXJ0eURlZmF1bHQodCl7cmV0dXJuIHN1cGVyLl9jYW5BcHBseVByb3BlcnR5RGVmYXVsdCh0KSYmISh0aGlzLl9faXNVcGdyYWRlRGlzYWJsZWQmJnRoaXMuX2lzUHJvcGVydHlQZW5kaW5nKHQpKX1hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sodCxlLG4saSl7dD09S2k/dGhpcy5fX2lzVXBncmFkZURpc2FibGVkJiZudWxsPT1uJiYoc3VwZXIuX2luaXRpYWxpemVQcm9wZXJ0aWVzKCksdGhpcy5fX2lzVXBncmFkZURpc2FibGVkPSExLFkodGhpcykuaXNDb25uZWN0ZWQmJnN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCkpOnN1cGVyLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayh0LGUsbixpKX1jb25uZWN0ZWRDYWxsYmFjaygpe3RoaXMuX19pc1VwZ3JhZGVEaXNhYmxlZHx8c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3RoaXMuX19pc1VwZ3JhZGVEaXNhYmxlZHx8c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKX19fSkpOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dAogICAgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28KICAgIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpjb25zdCBKaT0iZGlzYWJsZS11cGdyYWRlIjtsZXQgUWk9d2luZG93LlNoYWR5Q1NTO2NvbnN0IHRyPUkoKHQ9Pntjb25zdCBlPWRpKG1lKHQpKSxuPWZlP2U6U2koZSksaT1aaShuKSxyPXt4OiJwYW4teCIseToicGFuLXkiLG5vbmU6Im5vbmUiLGFsbDoiYXV0byJ9O2NsYXNzIG8gZXh0ZW5kcyBue2NvbnN0cnVjdG9yKCl7c3VwZXIoKX1zdGF0aWMgZ2V0IGltcG9ydE1ldGEoKXtyZXR1cm4gdGhpcy5wcm90b3R5cGUuaW1wb3J0TWV0YX1jcmVhdGVkKCl7fV9fYXR0cmlidXRlUmVhY3Rpb24odCxlLG4peyh0aGlzLl9fZGF0YUF0dHJpYnV0ZXMmJnRoaXMuX19kYXRhQXR0cmlidXRlc1t0XXx8dD09PUppKSYmdGhpcy5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sodCxlLG4sbnVsbCl9c2V0QXR0cmlidXRlKHQsZSl7aWYoTCYmIXRoaXMuX2xlZ2FjeUZvcmNlT2JzZXJ2ZWRBdHRyaWJ1dGVzKXtjb25zdCBuPXRoaXMuZ2V0QXR0cmlidXRlKHQpO3N1cGVyLnNldEF0dHJpYnV0ZSh0LGUpLHRoaXMuX19hdHRyaWJ1dGVSZWFjdGlvbih0LG4sU3RyaW5nKGUpKX1lbHNlIHN1cGVyLnNldEF0dHJpYnV0ZSh0LGUpfXJlbW92ZUF0dHJpYnV0ZSh0KXtpZihMJiYhdGhpcy5fbGVnYWN5Rm9yY2VPYnNlcnZlZEF0dHJpYnV0ZXMpe2NvbnN0IGU9dGhpcy5nZXRBdHRyaWJ1dGUodCk7c3VwZXIucmVtb3ZlQXR0cmlidXRlKHQpLHRoaXMuX19hdHRyaWJ1dGVSZWFjdGlvbih0LGUsbnVsbCl9ZWxzZSBzdXBlci5yZW1vdmVBdHRyaWJ1dGUodCl9c3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKXtyZXR1cm4gTCYmIXRoaXMucHJvdG90eXBlLl9sZWdhY3lGb3JjZU9ic2VydmVkQXR0cmlidXRlcz8odGhpcy5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfX29ic2VydmVkQXR0cmlidXRlcyIsdGhpcykpfHwodGhpcy5fX29ic2VydmVkQXR0cmlidXRlcz1bXSksdGhpcy5fX29ic2VydmVkQXR0cmlidXRlcyk6aS5jYWxsKHRoaXMpLmNvbmNhdChKaSl9X2VuYWJsZVByb3BlcnRpZXMoKXt0aGlzLl9faXNVcGdyYWRlRGlzYWJsZWR8fHN1cGVyLl9lbmFibGVQcm9wZXJ0aWVzKCl9X2NhbkFwcGx5UHJvcGVydHlEZWZhdWx0KHQpe3JldHVybiBzdXBlci5fY2FuQXBwbHlQcm9wZXJ0eURlZmF1bHQodCkmJiEodGhpcy5fX2lzVXBncmFkZURpc2FibGVkJiZ0aGlzLl9pc1Byb3BlcnR5UGVuZGluZyh0KSl9Y29ubmVjdGVkQ2FsbGJhY2soKXt0aGlzLl9fbmVlZHNBdHRyaWJ1dGVzQXRDb25uZWN0ZWQmJnRoaXMuX3Rha2VBdHRyaWJ1dGVzKCksdGhpcy5fX2lzVXBncmFkZURpc2FibGVkfHwoc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLmlzQXR0YWNoZWQ9ITAsdGhpcy5hdHRhY2hlZCgpKX1hdHRhY2hlZCgpe31kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3RoaXMuX19pc1VwZ3JhZGVEaXNhYmxlZHx8KHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5pc0F0dGFjaGVkPSExLHRoaXMuZGV0YWNoZWQoKSl9ZGV0YWNoZWQoKXt9YXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHQsZSxuLGkpe2UhPT1uJiYodD09Smk/dGhpcy5fX2lzVXBncmFkZURpc2FibGVkJiZudWxsPT1uJiYodGhpcy5faW5pdGlhbGl6ZVByb3BlcnRpZXMoKSx0aGlzLl9faXNVcGdyYWRlRGlzYWJsZWQ9ITEsWSh0aGlzKS5pc0Nvbm5lY3RlZCYmdGhpcy5jb25uZWN0ZWRDYWxsYmFjaygpKTooc3VwZXIuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHQsZSxuLGkpLHRoaXMuYXR0cmlidXRlQ2hhbmdlZCh0LGUsbikpKX1hdHRyaWJ1dGVDaGFuZ2VkKHQsZSxuKXt9X2luaXRpYWxpemVQcm9wZXJ0aWVzKCl7aWYodyYmdGhpcy5oYXNBdHRyaWJ1dGUoSmkpKXRoaXMuX19pc1VwZ3JhZGVEaXNhYmxlZD0hMDtlbHNle2xldCB0PU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKTt0Lmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9faGFzUmVnaXN0ZXJGaW5pc2hlZCIsdCkpfHwodGhpcy5fcmVnaXN0ZXJlZCgpLHQuX19oYXNSZWdpc3RlckZpbmlzaGVkPSEwKSxzdXBlci5faW5pdGlhbGl6ZVByb3BlcnRpZXMoKSx0aGlzLnJvb3Q9dGhpcyx0aGlzLmNyZWF0ZWQoKSxMJiYhdGhpcy5fbGVnYWN5Rm9yY2VPYnNlcnZlZEF0dHJpYnV0ZXMmJih0aGlzLmhhc0F0dHJpYnV0ZXMoKT90aGlzLl90YWtlQXR0cmlidXRlcygpOnRoaXMucGFyZW50Tm9kZXx8KHRoaXMuX19uZWVkc0F0dHJpYnV0ZXNBdENvbm5lY3RlZD0hMCkpLHRoaXMuX2FwcGx5TGlzdGVuZXJzKCl9fV90YWtlQXR0cmlidXRlcygpe2NvbnN0IHQ9dGhpcy5hdHRyaWJ1dGVzO2ZvcihsZXQgZT0wLG49dC5sZW5ndGg7ZTxuO2UrKyl7Y29uc3Qgbj10W2VdO3RoaXMuX19hdHRyaWJ1dGVSZWFjdGlvbihuLm5hbWUsbnVsbCxuLnZhbHVlKX19X3JlZ2lzdGVyZWQoKXt9cmVhZHkoKXt0aGlzLl9lbnN1cmVBdHRyaWJ1dGVzKCksc3VwZXIucmVhZHkoKX1fZW5zdXJlQXR0cmlidXRlcygpe31fYXBwbHlMaXN0ZW5lcnMoKXt9c2VyaWFsaXplKHQpe3JldHVybiB0aGlzLl9zZXJpYWxpemVWYWx1ZSh0KX1kZXNlcmlhbGl6ZSh0LGUpe3JldHVybiB0aGlzLl9kZXNlcmlhbGl6ZVZhbHVlKHQsZSl9cmVmbGVjdFByb3BlcnR5VG9BdHRyaWJ1dGUodCxlLG4pe3RoaXMuX3Byb3BlcnR5VG9BdHRyaWJ1dGUodCxlLG4pfXNlcmlhbGl6ZVZhbHVlVG9BdHRyaWJ1dGUodCxlLG4pe3RoaXMuX3ZhbHVlVG9Ob2RlQXR0cmlidXRlKG58fHRoaXMsdCxlKX1leHRlbmQodCxlKXtpZighdHx8IWUpcmV0dXJuIHR8fGU7bGV0IG49T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSk7Zm9yKGxldCBpLHI9MDtyPG4ubGVuZ3RoJiYoaT1uW3JdKTtyKyspe2xldCBuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSxpKTtuJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxpLG4pfXJldHVybiB0fW1peGluKHQsZSl7Zm9yKGxldCBuIGluIGUpdFtuXT1lW25dO3JldHVybiB0fWNoYWluT2JqZWN0KHQsZSl7cmV0dXJuIHQmJmUmJnQhPT1lJiYodC5fX3Byb3RvX189ZSksdH1pbnN0YW5jZVRlbXBsYXRlKHQpe2xldCBlPXRoaXMuY29uc3RydWN0b3IuX2NvbnRlbnRGb3JUZW1wbGF0ZSh0KTtyZXR1cm4gZG9jdW1lbnQuaW1wb3J0Tm9kZShlLCEwKX1maXJlKHQsZSxuKXtuPW58fHt9LGU9bnVsbD09ZT97fTplO2xldCBpPW5ldyBFdmVudCh0LHtidWJibGVzOnZvaWQgMD09PW4uYnViYmxlc3x8bi5idWJibGVzLGNhbmNlbGFibGU6Qm9vbGVhbihuLmNhbmNlbGFibGUpLGNvbXBvc2VkOnZvaWQgMD09PW4uY29tcG9zZWR8fG4uY29tcG9zZWR9KTtyZXR1cm4gaS5kZXRhaWw9ZSxZKG4ubm9kZXx8dGhpcykuZGlzcGF0Y2hFdmVudChpKSxpfWxpc3Rlbih0LGUsbil7dD10fHx0aGlzO2xldCBpPXRoaXMuX19ib3VuZExpc3RlbmVyc3x8KHRoaXMuX19ib3VuZExpc3RlbmVycz1uZXcgV2Vha01hcCkscj1pLmdldCh0KTtyfHwocj17fSxpLnNldCh0LHIpKTtsZXQgbz1lK247cltvXXx8KHJbb109dGhpcy5fYWRkTWV0aG9kRXZlbnRMaXN0ZW5lclRvTm9kZSh0LGUsbix0aGlzKSl9dW5saXN0ZW4odCxlLG4pe3Q9dHx8dGhpcztsZXQgaT10aGlzLl9fYm91bmRMaXN0ZW5lcnMmJnRoaXMuX19ib3VuZExpc3RlbmVycy5nZXQodCkscj1lK24sbz1pJiZpW3JdO28mJih0aGlzLl9yZW1vdmVFdmVudExpc3RlbmVyRnJvbU5vZGUodCxlLG8pLGlbcl09bnVsbCl9c2V0U2Nyb2xsRGlyZWN0aW9uKHQsZSl7cmkoZXx8dGhpcyxyW3RdfHwiYXV0byIpfSQkKHQpe3JldHVybiB0aGlzLnJvb3QucXVlcnlTZWxlY3Rvcih0KX1nZXQgZG9tSG9zdCgpe2xldCB0PVkodGhpcykuZ2V0Um9vdE5vZGUoKTtyZXR1cm4gdCBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQ/dC5ob3N0OnR9ZGlzdHJpYnV0ZUNvbnRlbnQoKXtjb25zdCB0PXFpKHRoaXMpO3dpbmRvdy5TaGFkeURPTSYmdC5zaGFkb3dSb290JiZTaGFkeURPTS5mbHVzaCgpfWdldEVmZmVjdGl2ZUNoaWxkTm9kZXMoKXtyZXR1cm4gcWkodGhpcykuZ2V0RWZmZWN0aXZlQ2hpbGROb2RlcygpfXF1ZXJ5RGlzdHJpYnV0ZWRFbGVtZW50cyh0KXtyZXR1cm4gcWkodGhpcykucXVlcnlEaXN0cmlidXRlZEVsZW1lbnRzKHQpfWdldEVmZmVjdGl2ZUNoaWxkcmVuKCl7cmV0dXJuIHRoaXMuZ2V0RWZmZWN0aXZlQ2hpbGROb2RlcygpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERX0pKX1nZXRFZmZlY3RpdmVUZXh0Q29udGVudCgpe2xldCB0PXRoaXMuZ2V0RWZmZWN0aXZlQ2hpbGROb2RlcygpLGU9W107Zm9yKGxldCBuLGk9MDtuPXRbaV07aSsrKW4ubm9kZVR5cGUhPT1Ob2RlLkNPTU1FTlRfTk9ERSYmZS5wdXNoKG4udGV4dENvbnRlbnQpO3JldHVybiBlLmpvaW4oIiIpfXF1ZXJ5RWZmZWN0aXZlQ2hpbGRyZW4odCl7bGV0IGU9dGhpcy5xdWVyeURpc3RyaWJ1dGVkRWxlbWVudHModCk7cmV0dXJuIGUmJmVbMF19cXVlcnlBbGxFZmZlY3RpdmVDaGlsZHJlbih0KXtyZXR1cm4gdGhpcy5xdWVyeURpc3RyaWJ1dGVkRWxlbWVudHModCl9Z2V0Q29udGVudENoaWxkTm9kZXModCl7bGV0IGU9dGhpcy5yb290LnF1ZXJ5U2VsZWN0b3IodHx8InNsb3QiKTtyZXR1cm4gZT9xaShlKS5nZXREaXN0cmlidXRlZE5vZGVzKCk6W119Z2V0Q29udGVudENoaWxkcmVuKHQpe3JldHVybiB0aGlzLmdldENvbnRlbnRDaGlsZE5vZGVzKHQpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERX0pKX1pc0xpZ2h0RGVzY2VuZGFudCh0KXtjb25zdCBlPXRoaXM7cmV0dXJuIGUhPT10JiZZKGUpLmNvbnRhaW5zKHQpJiZZKGUpLmdldFJvb3ROb2RlKCk9PT1ZKHQpLmdldFJvb3ROb2RlKCl9aXNMb2NhbERlc2NlbmRhbnQodCl7cmV0dXJuIHRoaXMucm9vdD09PVkodCkuZ2V0Um9vdE5vZGUoKX1zY29wZVN1YnRyZWUodCxlPSExKXtyZXR1cm4oZnVuY3Rpb24gbih0LGU9ITEpe2lmKCFZaXx8IVhpKXJldHVybiBudWxsO2lmKCFZaS5oYW5kbGVzRHluYW1pY1Njb3BpbmcpcmV0dXJuIG51bGw7Y29uc3Qgbj1YaS5TY29waW5nU2hpbTtpZighbilyZXR1cm4gbnVsbDtjb25zdCBpPW4uc2NvcGVGb3JOb2RlKHQpLHI9WSh0KS5nZXRSb290Tm9kZSgpLG89dD0+e2lmKCEkaSh0LHIpKXJldHVybjtjb25zdCBlPUFycmF5LmZyb20oWWkubmF0aXZlTWV0aG9kcy5xdWVyeVNlbGVjdG9yQWxsLmNhbGwodCwiKiIpKTtlLnB1c2godCk7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0Kyspe2NvbnN0IG89ZVt0XTtpZighJGkobyxyKSljb250aW51ZTtjb25zdCBhPW4uY3VycmVudFNjb3BlRm9yTm9kZShvKTthIT09aSYmKCIiIT09YSYmbi51bnNjb3BlTm9kZShvLGEpLG4uc2NvcGVOb2RlKG8saSkpfX07aWYobyh0KSxlKXtjb25zdCBlPW5ldyBNdXRhdGlvbk9ic2VydmVyKCh0PT57Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspe2NvbnN0IG49dFtlXTtmb3IobGV0IHQ9MDt0PG4uYWRkZWROb2Rlcy5sZW5ndGg7dCsrKXtjb25zdCBlPW4uYWRkZWROb2Rlc1t0XTtlLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJm8oZSl9fX0pKTtyZXR1cm4gZS5vYnNlcnZlKHQse2NoaWxkTGlzdDohMCxzdWJ0cmVlOiEwfSksZX1yZXR1cm4gbnVsbH0pKHQsZSl9Z2V0Q29tcHV0ZWRTdHlsZVZhbHVlKHQpe3JldHVybiBRaS5nZXRDb21wdXRlZFN0eWxlVmFsdWUodGhpcyx0KX1kZWJvdW5jZSh0LGUsbil7cmV0dXJuIHRoaXMuX2RlYm91bmNlcnM9dGhpcy5fZGVib3VuY2Vyc3x8e30sdGhpcy5fZGVib3VuY2Vyc1t0XT1Fbi5kZWJvdW5jZSh0aGlzLl9kZWJvdW5jZXJzW3RdLG4+MD9ndC5hZnRlcihuKTp2dCxlLmJpbmQodGhpcykpfWlzRGVib3VuY2VyQWN0aXZlKHQpe3RoaXMuX2RlYm91bmNlcnM9dGhpcy5fZGVib3VuY2Vyc3x8e307bGV0IGU9dGhpcy5fZGVib3VuY2Vyc1t0XTtyZXR1cm4hKCFlfHwhZS5pc0FjdGl2ZSgpKX1mbHVzaERlYm91bmNlcih0KXt0aGlzLl9kZWJvdW5jZXJzPXRoaXMuX2RlYm91bmNlcnN8fHt9O2xldCBlPXRoaXMuX2RlYm91bmNlcnNbdF07ZSYmZS5mbHVzaCgpfWNhbmNlbERlYm91bmNlcih0KXt0aGlzLl9kZWJvdW5jZXJzPXRoaXMuX2RlYm91bmNlcnN8fHt9O2xldCBlPXRoaXMuX2RlYm91bmNlcnNbdF07ZSYmZS5jYW5jZWwoKX1hc3luYyh0LGUpe3JldHVybiBlPjA/Z3QucnVuKHQuYmluZCh0aGlzKSxlKTp+dnQucnVuKHQuYmluZCh0aGlzKSl9Y2FuY2VsQXN5bmModCl7dDwwP3Z0LmNhbmNlbCh+dCk6Z3QuY2FuY2VsKHQpfWNyZWF0ZSh0LGUpe2xldCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodCk7aWYoZSlpZihuLnNldFByb3BlcnRpZXMpbi5zZXRQcm9wZXJ0aWVzKGUpO2Vsc2UgZm9yKGxldCB0IGluIGUpblt0XT1lW3RdO3JldHVybiBufWVsZW1lbnRNYXRjaGVzKHQsZSl7cmV0dXJuIEhpKGV8fHRoaXMsdCl9dG9nZ2xlQXR0cmlidXRlKHQsZSl7bGV0IG49dGhpcztyZXR1cm4gMz09PWFyZ3VtZW50cy5sZW5ndGgmJihuPWFyZ3VtZW50c1syXSksMT09YXJndW1lbnRzLmxlbmd0aCYmKGU9IW4uaGFzQXR0cmlidXRlKHQpKSxlPyhZKG4pLnNldEF0dHJpYnV0ZSh0LCIiKSwhMCk6KFkobikucmVtb3ZlQXR0cmlidXRlKHQpLCExKX10b2dnbGVDbGFzcyh0LGUsbil7bj1ufHx0aGlzLDE9PWFyZ3VtZW50cy5sZW5ndGgmJihlPSFuLmNsYXNzTGlzdC5jb250YWlucyh0KSksZT9uLmNsYXNzTGlzdC5hZGQodCk6bi5jbGFzc0xpc3QucmVtb3ZlKHQpfXRyYW5zZm9ybSh0LGUpeyhlPWV8fHRoaXMpLnN0eWxlLndlYmtpdFRyYW5zZm9ybT10LGUuc3R5bGUudHJhbnNmb3JtPXR9dHJhbnNsYXRlM2QodCxlLG4saSl7dGhpcy50cmFuc2Zvcm0oInRyYW5zbGF0ZTNkKCIrdCsiLCIrZSsiLCIrbisiKSIsaT1pfHx0aGlzKX1hcnJheURlbGV0ZSh0LGUpe2xldCBuO2lmKEFycmF5LmlzQXJyYXkodCkpe2lmKG49dC5pbmRleE9mKGUpLG4+PTApcmV0dXJuIHQuc3BsaWNlKG4sMSl9ZWxzZSBpZihuPW50KHRoaXMsdCkuaW5kZXhPZihlKSxuPj0wKXJldHVybiB0aGlzLnNwbGljZSh0LG4sMSk7cmV0dXJuIG51bGx9X2xvZ2dlcih0LGUpe3N3aXRjaChBcnJheS5pc0FycmF5KGUpJiYxPT09ZS5sZW5ndGgmJkFycmF5LmlzQXJyYXkoZVswXSkmJihlPWVbMF0pLHQpe2Nhc2UibG9nIjpjYXNlIndhcm4iOmNhc2UiZXJyb3IiOmNvbnNvbGVbdF0oLi4uZSl9fV9sb2coLi4udCl7dGhpcy5fbG9nZ2VyKCJsb2ciLHQpfV93YXJuKC4uLnQpe3RoaXMuX2xvZ2dlcigid2FybiIsdCl9X2Vycm9yKC4uLnQpe3RoaXMuX2xvZ2dlcigiZXJyb3IiLHQpfV9sb2dmKHQsLi4uZSl7cmV0dXJuWyJbJXM6OiVzXSIsdGhpcy5pcyx0LC4uLmVdfX1yZXR1cm4gby5wcm90b3R5cGUuaXM9IiIsb30pKTtmdW5jdGlvbiBlcih0LGUpe2xldCBuPTAsaT0wO2Zvcig7Oyl7aWYobj09PXQubGVuZ3RoKXJldHVybiBpPT09ZS5sZW5ndGg/MDotMTtpZihpPT09ZS5sZW5ndGgpcmV0dXJuIDE7aWYoaXIodFtuXSkmJmlyKGVbaV0pKXtjb25zdCByPW4sbz1pO249bnIodCxuKzEpLGk9bnIoZSxpKzEpO2NvbnN0IGE9cGFyc2VGbG9hdCh0LnNsaWNlKHIsbikpLHM9cGFyc2VGbG9hdChlLnNsaWNlKG8saSkpO2lmKGE8cylyZXR1cm4tMTtpZihhPnMpcmV0dXJuIDF9ZWxzZXtpZihycih0W25dKSl7aWYoIXJyKGVbaV0pKXJldHVybi0xfWVsc2V7aWYocnIoZVtpXSkpcmV0dXJuIDE7aWYodFtuXTxlW2ldKXJldHVybi0xO2lmKHRbbl0+ZVtpXSlyZXR1cm4gMX1uKyssaSsrfX19ZnVuY3Rpb24gbnIodCxlKXtsZXQgbjshKGZ1bmN0aW9uKHQpe3RbdC5OQVRVUkFMPTBdPSJOQVRVUkFMIix0W3QuUkVBTD0xXT0iUkVBTCIsdFt0LkVYUE9ORU5UX1NJR049Ml09IkVYUE9ORU5UX1NJR04iLHRbdC5FWFBPTkVOVD0zXT0iRVhQT05FTlQifSkobnx8KG49e30pKTtsZXQgaT1uLk5BVFVSQUw7Zm9yKDtlPHQubGVuZ3RoO2UrKylpZihpPT09bi5OQVRVUkFMKXtpZigiLiI9PT10W2VdKWk9bi5SRUFMO2Vsc2UgaWYoImUiPT09dFtlXXx8IkUiPT09dFtlXSlpPW4uRVhQT05FTlRfU0lHTjtlbHNlIGlmKCFpcih0W2VdKSlicmVha31lbHNlIGlmKGk9PT1uLlJFQUwpe2lmKCJlIj09PXRbZV18fCJFIj09PXRbZV0paT1uLkVYUE9ORU5UX1NJR047ZWxzZSBpZighaXIodFtlXSkpYnJlYWt9ZWxzZSBpZihpPT09bi5FWFBPTkVOVF9TSUdOKXtpZighaXIodFtlXSkmJiIrIiE9PXRbZV0mJiItIiE9PXRbZV0pYnJlYWs7aT1uLkVYUE9ORU5UfWVsc2UgaWYoaT09PW4uRVhQT05FTlQmJiFpcih0W2VdKSlicmVhaztyZXR1cm4gZX1mdW5jdGlvbiBpcih0KXtyZXR1cm4iMCI8PXQmJnQ8PSI5In1mdW5jdGlvbiBycih0KXtyZXR1cm4iLyI9PT10fHwiXyI9PT10fHxpcih0KX1mdW5jdGlvbiBvcih0KXtyZXR1cm4gd2UudW5pb24uYXBwbHkobnVsbCx3ZS52YWx1ZXModCkpLnNvcnQoZXIpfWNsYXNzIGFyIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMubmFtZT0iUmVxdWVzdENhbmNlbGxhdGlvbkVycm9yIn19Y2xhc3Mgc3IgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLm5hbWU9IkludmFsaWRSZXF1ZXN0T3B0aW9uc0Vycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxzci5wcm90b3R5cGUpfX1jbGFzcyBsciBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIoKSx0aGlzLm1lc3NhZ2U9YFJlcXVlc3ROZXR3b3JrRXJyb3I6ICR7dC5zdGF0dXN9IGF0ICR7ZX1gLHRoaXMubmFtZT0iUmVxdWVzdE5ldHdvcmtFcnJvciIsdGhpcy5yZXE9dCx0aGlzLnVybD1lfX12YXIgY3I7IShmdW5jdGlvbih0KXt0LkdFVD0iR0VUIix0LlBPU1Q9IlBPU1QifSkoY3J8fChjcj17fSkpO2NsYXNzIHVye3ZhbGlkYXRlKCl7aWYodGhpcy5tZXRob2RUeXBlPT09Y3IuR0VUJiZ0aGlzLmJvZHkpdGhyb3cgbmV3IHNyKCJib2R5IG11c3QgYmUgbWlzc2luZyBmb3IgYSBHRVQgcmVxdWVzdC4iKX19Y2xhc3MgaHJ7Y29uc3RydWN0b3IodD0xZTMsZT0zKXt0aGlzLl9xdWV1ZT1bXSx0aGlzLl9uQWN0aXZlUmVxdWVzdHM9MCx0aGlzLl9uU2ltdWx0YW5lb3VzUmVxdWVzdHM9dCx0aGlzLl9tYXhSZXRyaWVzPWV9cmVxdWVzdCh0LGUpe2NvbnN0IG49KGZ1bmN0aW9uIGkodCl7Y29uc3QgZT1uZXcgdXI7cmV0dXJuIHQ/KGUubWV0aG9kVHlwZT1jci5QT1NULGUuYm9keT0oZnVuY3Rpb24gbih0KXtjb25zdCBlPW5ldyBGb3JtRGF0YTtmb3IoY29uc3RbbixpXW9mIE9iamVjdC5lbnRyaWVzKHQpKXtjb25zdCB0PUFycmF5LmlzQXJyYXkoaSk/aTpbaV07Zm9yKGNvbnN0IGkgb2YgdCllLmFwcGVuZChuLGkpfXJldHVybiBlfSkodCksZSk6KGUubWV0aG9kVHlwZT1jci5HRVQsZSl9KShlKTtyZXR1cm4gdGhpcy5yZXF1ZXN0V2l0aE9wdGlvbnModCxuKX1yZXF1ZXN0V2l0aE9wdGlvbnModCxlKXtyZXR1cm4gZS52YWxpZGF0ZSgpLG5ldyBQcm9taXNlKCgodCxlKT0+e3RoaXMuX3F1ZXVlLnB1c2goe3Jlc29sdmU6dCxyZWplY3Q6ZX0pLHRoaXMubGF1bmNoUmVxdWVzdHMoKX0pKS50aGVuKCgoKT0+dGhpcy5wcm9taXNlV2l0aFJldHJpZXModCx0aGlzLl9tYXhSZXRyaWVzLGUpKSkudGhlbigodD0+KHRoaXMuX25BY3RpdmVSZXF1ZXN0cy0tLHRoaXMubGF1bmNoUmVxdWVzdHMoKSx0KSksKHQ9PigiUmVxdWVzdE5ldHdvcmtFcnJvciI9PT10Lm5hbWUmJih0aGlzLl9uQWN0aXZlUmVxdWVzdHMtLSx0aGlzLmxhdW5jaFJlcXVlc3RzKCkpLFByb21pc2UucmVqZWN0KHQpKSkpfWZldGNoKHQsZSl7cmV0dXJuIG5ldyBQcm9taXNlKCgodCxlKT0+e3RoaXMuX3F1ZXVlLnB1c2goe3Jlc29sdmU6dCxyZWplY3Q6ZX0pLHRoaXMubGF1bmNoUmVxdWVzdHMoKX0pKS50aGVuKCgoKT0+e2xldCBuPTE7cmV0dXJuIG5ldyBQcm9taXNlKChpPT57Y29uc3Qgcj0oKT0+e2ZldGNoKHQsZSkudGhlbigodD0+e2lmKCF0Lm9rJiZ0aGlzLl9tYXhSZXRyaWVzPm4pcmV0dXJuIG4rKyx2b2lkIHIoKTtpKHQpLHRoaXMuX25BY3RpdmVSZXF1ZXN0cy0tLHRoaXMubGF1bmNoUmVxdWVzdHMoKX0pKX07cigpfSkpfSkpfWNsZWFyUXVldWUoKXtmb3IoO3RoaXMuX3F1ZXVlLmxlbmd0aD4wOyl0aGlzLl9xdWV1ZS5wb3AoKS5yZWplY3QobmV3IGFyKCJSZXF1ZXN0IGNhbmNlbGxlZCBieSBjbGVhclF1ZXVlIikpfWFjdGl2ZVJlcXVlc3RzKCl7cmV0dXJuIHRoaXMuX25BY3RpdmVSZXF1ZXN0c31vdXRzdGFuZGluZ1JlcXVlc3RzKCl7cmV0dXJuIHRoaXMuX25BY3RpdmVSZXF1ZXN0cyt0aGlzLl9xdWV1ZS5sZW5ndGh9bGF1bmNoUmVxdWVzdHMoKXtmb3IoO3RoaXMuX25BY3RpdmVSZXF1ZXN0czx0aGlzLl9uU2ltdWx0YW5lb3VzUmVxdWVzdHMmJnRoaXMuX3F1ZXVlLmxlbmd0aD4wOyl0aGlzLl9uQWN0aXZlUmVxdWVzdHMrKyx0aGlzLl9xdWV1ZS5wb3AoKS5yZXNvbHZlKHZvaWQgMCl9cHJvbWlzZVdpdGhSZXRyaWVzKHQsZSxuKXtyZXR1cm4gdGhpcy5fcHJvbWlzZUZyb21VcmwodCxuKS50aGVuKCh0PT50KSwoaT0+ZT4wP3RoaXMucHJvbWlzZVdpdGhSZXRyaWVzKHQsZS0xLG4pOlByb21pc2UucmVqZWN0KGkpKSl9X3Byb21pc2VGcm9tVXJsKHQsZSl7cmV0dXJuIG5ldyBQcm9taXNlKCgobixpKT0+e2NvbnN0IHI9KGZ1bmN0aW9uIG8odCxlLG4saSl7Y29uc3Qgcj1uZXcgWE1MSHR0cFJlcXVlc3Q7cmV0dXJuIHIub3Blbih0LGUpLG4mJihyLndpdGhDcmVkZW50aWFscz1uKSxpJiZyLnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsaSkscn0pKGUubWV0aG9kVHlwZSx0LGUud2l0aENyZWRlbnRpYWxzLGUuY29udGVudFR5cGUpO3Iub25sb2FkPWZ1bmN0aW9uKCl7MjAwPT09ci5zdGF0dXM/bihKU09OLnBhcnNlKHIucmVzcG9uc2VUZXh0KSk6aShuZXcgbHIocix0KSl9LHIub25lcnJvcj1mdW5jdGlvbigpe2kobmV3IGxyKHIsdCkpfSxlLmJvZHk/ci5zZW5kKGUuYm9keSk6ci5zZW5kKCl9KSl9fWNvbnN0IGRyPSJleHBlcmltZW50YWxQbHVnaW4iLHByPW5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7bGV0IGZyPW1yKCk7ZnVuY3Rpb24gbXIodD0iZGF0YSIsZT1wcil7cmV0dXJuIi8iPT09dFt0Lmxlbmd0aC0xXSYmKHQ9dC5zbGljZSgwLHQubGVuZ3RoLTEpKSx7ZW52aXJvbm1lbnQ6KCk9Pl9yKHQsIi9lbnZpcm9ubWVudCIpLGV4cGVyaW1lbnRzOigpPT5fcih0LCIvZXhwZXJpbWVudHMiKSxwbHVnaW5Sb3V0ZTooZSxuLGkpPT5fcih0KyIvcGx1Z2luIixgLyR7ZX0ke259YCxpKSxwbHVnaW5zTGlzdGluZzooKT0+X3IodCwiL3BsdWdpbnNfbGlzdGluZyIseXIoe1tkcl06ZS5nZXRBbGwoZHIpfSkpLHJ1bnM6KCk9Pl9yKHQsIi9ydW5zIikscnVuc0ZvckV4cGVyaW1lbnQ6ZT0+X3IodCwiL2V4cGVyaW1lbnRfcnVucyIseXIoe2V4cGVyaW1lbnQ6U3RyaW5nKGUpfSkpfX1mdW5jdGlvbiBncigpe3JldHVybiBmcn1mdW5jdGlvbiBfcih0LGUsbj1uZXcgVVJMU2VhcmNoUGFyYW1zKXtsZXQgaT10K2U7cmV0dXJuIFN0cmluZyhuKSYmKGkrPShlLmluY2x1ZGVzKCI/Iik/IiYiOiI/IikrU3RyaW5nKG4pKSxpfWZ1bmN0aW9uIHlyKHQ9e30pe2NvbnN0IGU9T2JqZWN0LmtleXModCkuc29ydCgpLmZpbHRlcigoZT0+dFtlXSkpLG49bmV3IFVSTFNlYXJjaFBhcmFtcztyZXR1cm4gZS5mb3JFYWNoKChlPT57Y29uc3QgaT10W2VdOyhBcnJheS5pc0FycmF5KGkpP2k6W2ldKS5mb3JFYWNoKCh0PT5uLmFwcGVuZChlLHQpKSl9KSksbn12YXIgdnI7ZnVuY3Rpb24gYnIodCxlKXtjb25zdCBuPSgoKT0+e3RyeXtyZXR1cm4gbmV3IFJlZ0V4cChlKX1jYXRjaCh0KXtyZXR1cm4gbnVsbH19KSgpO3JldHVybntuYW1lOmUsbWV0YWRhdGE6e3R5cGU6dnIuU0VBUkNIX1JFU1VMVFMsdmFsaWRSZWdleDohIW4sdW5pdmVyc2FsUmVnZXg6Ii4qIj09PWV9LGl0ZW1zOm4/dC5maWx0ZXIoKHQ9PnQubWF0Y2gobikpKTpbXX19ZnVuY3Rpb24geHIodCxlLG4pe2NvbnN0IGk9KGZ1bmN0aW9uIHIodCxlPSIiKXtjb25zdCBuPVticih0LGUpXSxpPShmdW5jdGlvbiByKHQsZT0iLyIpe2NvbnN0IG49W10saT17fTtyZXR1cm4gdC5mb3JFYWNoKCh0PT57Y29uc3Qgcj10LmluZGV4T2YoZSksbz1yPj0wP3Quc2xpY2UoMCxyKTp0O2lmKCFpW29dKXtjb25zdCB0PXtuYW1lOm8sbWV0YWRhdGE6e3R5cGU6dnIuUFJFRklYX0dST1VQfSxpdGVtczpbXX07aVtvXT10LG4ucHVzaCh0KX1pW29dLml0ZW1zLnB1c2godCl9KSksbn0pKHQpO3JldHVybltdLmNvbmNhdChuLGkpfSkob3IodCksbiksbz0oZnVuY3Rpb24gYSh0KXtjb25zdCBlPW5ldyBNYXA7cmV0dXJuIE9iamVjdC5rZXlzKHQpLmZvckVhY2goKG49Pnt0W25dLmZvckVhY2goKHQ9Pntjb25zdCBpPWUuZ2V0KHQpfHxbXTtpLnB1c2gobiksZS5zZXQodCxpKX0pKX0pKSxlfSkod2UucGljayh0LGUpKTtyZXR1cm4gaS5tYXAoKCh7bmFtZTp0LG1ldGFkYXRhOmUsaXRlbXM6bn0pPT4oe25hbWU6dCxtZXRhZGF0YTplLGl0ZW1zOm4ubWFwKCh0PT4oe3RhZzp0LHJ1bnM6KG8uZ2V0KHQpfHxbXSkuc2xpY2UoKX0pKSl9KSkpfWZ1bmN0aW9uIHdyKHQsZSl7Y29uc3Qgbj1lcih0LnRhZyxlLnRhZyk7cmV0dXJuIDAhPW4/bjplcih0LnJ1bixlLnJ1bil9ZnVuY3Rpb24gU3IodCxlLG4pe3JldHVybiB4cih0LGUsbikubWFwKChmdW5jdGlvbiBpKHQpe2NvbnN0IGU9d2UuZmxhdHRlbih0Lml0ZW1zLm1hcCgoKHt0YWc6dCxydW5zOmV9KT0+ZS5tYXAoKGU9Pih7dGFnOnQscnVuOmV9KSkpKSkpO3JldHVybiBlLnNvcnQod3IpLHtuYW1lOnQubmFtZSxtZXRhZGF0YTp0Lm1ldGFkYXRhLGl0ZW1zOmV9fSkpfQovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dAogICAgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28KICAgIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLyEoZnVuY3Rpb24odCl7dFt0LlNFQVJDSF9SRVNVTFRTPTBdPSJTRUFSQ0hfUkVTVUxUUyIsdFt0LlBSRUZJWF9HUk9VUD0xXT0iUFJFRklYX0dST1VQIn0pKHZyfHwodnI9e30pKTtjb25zdCBNcj17YXR0YWNoZWQ6ITAsZGV0YWNoZWQ6ITAscmVhZHk6ITAsY3JlYXRlZDohMCxiZWZvcmVSZWdpc3RlcjohMCxyZWdpc3RlcmVkOiEwLGF0dHJpYnV0ZUNoYW5nZWQ6ITAsbGlzdGVuZXJzOiEwLGhvc3RBdHRyaWJ1dGVzOiEwfSxFcj17YXR0YWNoZWQ6ITAsZGV0YWNoZWQ6ITAscmVhZHk6ITAsY3JlYXRlZDohMCxiZWZvcmVSZWdpc3RlcjohMCxyZWdpc3RlcmVkOiEwLGF0dHJpYnV0ZUNoYW5nZWQ6ITAsYmVoYXZpb3JzOiEwLF9ub0FjY2Vzc29yczohMH0sVHI9T2JqZWN0LmFzc2lnbih7bGlzdGVuZXJzOiEwLGhvc3RBdHRyaWJ1dGVzOiEwLHByb3BlcnRpZXM6ITAsb2JzZXJ2ZXJzOiEwfSxFcik7ZnVuY3Rpb24gQ3IodCxlLG4saSl7IShmdW5jdGlvbiByKHQsZSxuKXtjb25zdCBpPXQuX25vQWNjZXNzb3JzLHI9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModCk7Zm9yKGxldCBvPTA7bzxyLmxlbmd0aDtvKyspe2xldCBhPXJbb107aWYoIShhIGluIG4pKWlmKGkpZVthXT10W2FdO2Vsc2V7bGV0IG49T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGEpO24mJihuLmNvbmZpZ3VyYWJsZT0hMCxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxhLG4pKX19fSkoZSx0LGkpO2ZvcihsZXQgdCBpbiBNcillW3RdJiYoblt0XT1uW3RdfHxbXSxuW3RdLnB1c2goZVt0XSkpfWZ1bmN0aW9uIEFyKHQsZSxuKXtlPWV8fFtdO2ZvcihsZXQgaT10Lmxlbmd0aC0xO2k+PTA7aS0tKXtsZXQgcj10W2ldO3I/QXJyYXkuaXNBcnJheShyKT9BcihyLGUpOmUuaW5kZXhPZihyKTwwJiYoIW58fG4uaW5kZXhPZihyKTwwKSYmZS51bnNoaWZ0KHIpOmNvbnNvbGUud2FybigiYmVoYXZpb3IgaXMgbnVsbCwgY2hlY2sgZm9yIG1pc3Npbmcgb3IgNDA0IGltcG9ydCIpfXJldHVybiBlfWZ1bmN0aW9uIGtyKHQsZSl7Zm9yKGNvbnN0IG4gaW4gZSl7Y29uc3QgaT10W25dLHI9ZVtuXTt0W25dPSEoInZhbHVlImluIHIpJiZpJiYidmFsdWUiaW4gaT9PYmplY3QuYXNzaWduKHt2YWx1ZTppLnZhbHVlfSxyKTpyfX1jb25zdCBMcj10cihIVE1MRWxlbWVudCk7ZnVuY3Rpb24gUHIodCxlLG4pe2xldCBpO2NvbnN0IHI9e307Y2xhc3MgbyBleHRlbmRzIGV7c3RhdGljIF9maW5hbGl6ZUNsYXNzKCl7aWYodGhpcy5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJnZW5lcmF0ZWRGcm9tIix0aGlzKSkpe2lmKGkpZm9yKGxldCB0LGU9MDtlPGkubGVuZ3RoO2UrKyl0PWlbZV0sdC5wcm9wZXJ0aWVzJiZ0aGlzLmNyZWF0ZVByb3BlcnRpZXModC5wcm9wZXJ0aWVzKSx0Lm9ic2VydmVycyYmdGhpcy5jcmVhdGVPYnNlcnZlcnModC5vYnNlcnZlcnMsdC5wcm9wZXJ0aWVzKTt0LnByb3BlcnRpZXMmJnRoaXMuY3JlYXRlUHJvcGVydGllcyh0LnByb3BlcnRpZXMpLHQub2JzZXJ2ZXJzJiZ0aGlzLmNyZWF0ZU9ic2VydmVycyh0Lm9ic2VydmVycyx0LnByb3BlcnRpZXMpLHRoaXMuX3ByZXBhcmVUZW1wbGF0ZSgpfWVsc2UgZS5fZmluYWxpemVDbGFzcy5jYWxsKHRoaXMpfXN0YXRpYyBnZXQgcHJvcGVydGllcygpe2NvbnN0IGU9e307aWYoaSlmb3IobGV0IHQ9MDt0PGkubGVuZ3RoO3QrKylrcihlLGlbdF0ucHJvcGVydGllcyk7cmV0dXJuIGtyKGUsdC5wcm9wZXJ0aWVzKSxlfXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7bGV0IGU9W107aWYoaSlmb3IobGV0IHQsbj0wO248aS5sZW5ndGg7bisrKXQ9aVtuXSx0Lm9ic2VydmVycyYmKGU9ZS5jb25jYXQodC5vYnNlcnZlcnMpKTtyZXR1cm4gdC5vYnNlcnZlcnMmJihlPWUuY29uY2F0KHQub2JzZXJ2ZXJzKSksZX1jcmVhdGVkKCl7c3VwZXIuY3JlYXRlZCgpO2NvbnN0IHQ9ci5jcmVhdGVkO2lmKHQpZm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXS5jYWxsKHRoaXMpfV9yZWdpc3RlcmVkKCl7Y29uc3QgdD1vLnByb3RvdHlwZTtpZighdC5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfX2hhc1JlZ2lzdGVyRmluaXNoZWQiLHQpKSl7dC5fX2hhc1JlZ2lzdGVyRmluaXNoZWQ9ITAsc3VwZXIuX3JlZ2lzdGVyZWQoKSx3JiZhKHQpO2NvbnN0IGU9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpO2xldCBuPXIuYmVmb3JlUmVnaXN0ZXI7aWYobilmb3IobGV0IHQ9MDt0PG4ubGVuZ3RoO3QrKyluW3RdLmNhbGwoZSk7aWYobj1yLnJlZ2lzdGVyZWQsbilmb3IobGV0IHQ9MDt0PG4ubGVuZ3RoO3QrKyluW3RdLmNhbGwoZSl9fV9hcHBseUxpc3RlbmVycygpe3N1cGVyLl9hcHBseUxpc3RlbmVycygpO2NvbnN0IHQ9ci5saXN0ZW5lcnM7aWYodClmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKyl7Y29uc3Qgbj10W2VdO2lmKG4pZm9yKGxldCB0IGluIG4pdGhpcy5fYWRkTWV0aG9kRXZlbnRMaXN0ZW5lclRvTm9kZSh0aGlzLHQsblt0XSl9fV9lbnN1cmVBdHRyaWJ1dGVzKCl7Y29uc3QgdD1yLmhvc3RBdHRyaWJ1dGVzO2lmKHQpZm9yKGxldCBlPXQubGVuZ3RoLTE7ZT49MDtlLS0pe2NvbnN0IG49dFtlXTtmb3IobGV0IHQgaW4gbil0aGlzLl9lbnN1cmVBdHRyaWJ1dGUodCxuW3RdKX1zdXBlci5fZW5zdXJlQXR0cmlidXRlcygpfXJlYWR5KCl7c3VwZXIucmVhZHkoKTtsZXQgdD1yLnJlYWR5O2lmKHQpZm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXS5jYWxsKHRoaXMpfWF0dGFjaGVkKCl7c3VwZXIuYXR0YWNoZWQoKTtsZXQgdD1yLmF0dGFjaGVkO2lmKHQpZm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXS5jYWxsKHRoaXMpfWRldGFjaGVkKCl7c3VwZXIuZGV0YWNoZWQoKTtsZXQgdD1yLmRldGFjaGVkO2lmKHQpZm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXS5jYWxsKHRoaXMpfWF0dHJpYnV0ZUNoYW5nZWQodCxlLG4pe3N1cGVyLmF0dHJpYnV0ZUNoYW5nZWQoKTtsZXQgaT1yLmF0dHJpYnV0ZUNoYW5nZWQ7aWYoaSlmb3IobGV0IHI9MDtyPGkubGVuZ3RoO3IrKylpW3JdLmNhbGwodGhpcyx0LGUsbil9fWlmKG4pe0FycmF5LmlzQXJyYXkobil8fChuPVtuXSk7bGV0IHQ9ZS5wcm90b3R5cGUuYmVoYXZpb3JzO2k9QXIobixudWxsLHQpLG8ucHJvdG90eXBlLmJlaGF2aW9ycz10P3QuY29uY2F0KG4pOml9Y29uc3QgYT1lPT57aSYmKGZ1bmN0aW9uIG4odCxlLGkpe2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKUNyKHQsZVtuXSxpLFRyKX0pKGUsaSxyKSxDcihlLHQscixFcil9O3JldHVybiB3fHxhKG8ucHJvdG90eXBlKSxvLmdlbmVyYXRlZEZyb209dCxvfWNvbnN0IE5yPWZ1bmN0aW9uKHQsZSl7dHx8Y29uc29sZS53YXJuKCJQb2x5bWVyLkNsYXNzIHJlcXVpcmVzIGBpbmZvYCBhcmd1bWVudCIpO2xldCBuPWU/ZShMcik6THI7cmV0dXJuIG49UHIodCxuLHQuYmVoYXZpb3JzKSxuLmlzPW4ucHJvdG90eXBlLmlzPXQuaXMsbn0sSXI9ZnVuY3Rpb24odCl7bGV0IGU7cmV0dXJuIGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpJci5DbGFzcyh0KSx0Ll9sZWdhY3lGb3JjZU9ic2VydmVkQXR0cmlidXRlcyYmKGUucHJvdG90eXBlLl9sZWdhY3lGb3JjZU9ic2VydmVkQXR0cmlidXRlcz10Ll9sZWdhY3lGb3JjZU9ic2VydmVkQXR0cmlidXRlcyksY3VzdG9tRWxlbWVudHMuZGVmaW5lKGUuaXMsZSksZX07Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCi8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCmZ1bmN0aW9uIE9yKHQsZSxuLGkscil7bGV0IG87ciYmKG89Im9iamVjdCI9PXR5cGVvZiBuJiZudWxsIT09bixvJiYoaT10Ll9fZGF0YVRlbXBbZV0pKTtsZXQgYT1pIT09biYmKGk9PWl8fG49PW4pO3JldHVybiBvJiZhJiYodC5fX2RhdGFUZW1wW2VdPW4pLGF9SXIuQ2xhc3M9TnI7Y29uc3QgUnI9SSgodD0+Y2xhc3MgZXh0ZW5kcyB0e19zaG91bGRQcm9wZXJ0eUNoYW5nZSh0LGUsbil7cmV0dXJuIE9yKHRoaXMsdCxlLG4sITApfX0pKSx6cj1JKCh0PT5jbGFzcyBleHRlbmRzIHR7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue211dGFibGVEYXRhOkJvb2xlYW59fV9zaG91bGRQcm9wZXJ0eUNoYW5nZSh0LGUsbil7cmV0dXJuIE9yKHRoaXMsdCxlLG4sdGhpcy5tdXRhYmxlRGF0YSl9fSkpO1JyLl9tdXRhYmxlUHJvcGVydHlDaGFuZ2U9T3I7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCmxldCBEcj1udWxsO2Z1bmN0aW9uIEJyKCl7cmV0dXJuIERyfUJyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEhUTUxUZW1wbGF0ZUVsZW1lbnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6QnIsd3JpdGFibGU6ITB9fSk7Y29uc3QgSHI9aGUoQnIpLEZyPVJyKEhyKSxWcj1oZShjbGFzc3t9KTtmdW5jdGlvbiBVcih0LGUpe2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXtsZXQgaT1lW25dO2lmKEJvb2xlYW4odCkhPUJvb2xlYW4oaS5fX2hpZGVUZW1wbGF0ZUNoaWxkcmVuX18pKWlmKGkubm9kZVR5cGU9PT1Ob2RlLlRFWFRfTk9ERSl0PyhpLl9fcG9seW1lclRleHRDb250ZW50X189aS50ZXh0Q29udGVudCxpLnRleHRDb250ZW50PSIiKTppLnRleHRDb250ZW50PWkuX19wb2x5bWVyVGV4dENvbnRlbnRfXztlbHNlIGlmKCJzbG90Ij09PWkubG9jYWxOYW1lKWlmKHQpaS5fX3BvbHltZXJSZXBsYWNlZF9fPWRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoImhpZGRlbi1zbG90IiksWShZKGkpLnBhcmVudE5vZGUpLnJlcGxhY2VDaGlsZChpLl9fcG9seW1lclJlcGxhY2VkX18saSk7ZWxzZXtjb25zdCB0PWkuX19wb2x5bWVyUmVwbGFjZWRfXzt0JiZZKFkodCkucGFyZW50Tm9kZSkucmVwbGFjZUNoaWxkKGksdCl9ZWxzZSBpLnN0eWxlJiYodD8oaS5fX3BvbHltZXJEaXNwbGF5X189aS5zdHlsZS5kaXNwbGF5LGkuc3R5bGUuZGlzcGxheT0ibm9uZSIpOmkuc3R5bGUuZGlzcGxheT1pLl9fcG9seW1lckRpc3BsYXlfXyk7aS5fX2hpZGVUZW1wbGF0ZUNoaWxkcmVuX189dCxpLl9zaG93SGlkZUNoaWxkcmVuJiZpLl9zaG93SGlkZUNoaWxkcmVuKHQpfX1jbGFzcyBqciBleHRlbmRzIFZye2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5fY29uZmlndXJlUHJvcGVydGllcyh0KSx0aGlzLnJvb3Q9dGhpcy5fc3RhbXBUZW1wbGF0ZSh0aGlzLl9fZGF0YUhvc3QpO2xldCBlPVtdO3RoaXMuY2hpbGRyZW49ZTtmb3IobGV0IHQ9dGhpcy5yb290LmZpcnN0Q2hpbGQ7dDt0PXQubmV4dFNpYmxpbmcpZS5wdXNoKHQpLHQuX190ZW1wbGF0aXplSW5zdGFuY2U9dGhpczt0aGlzLl9fdGVtcGxhdGl6ZU93bmVyJiZ0aGlzLl9fdGVtcGxhdGl6ZU93bmVyLl9faGlkZVRlbXBsYXRlQ2hpbGRyZW5fXyYmdGhpcy5fc2hvd0hpZGVDaGlsZHJlbighMCk7bGV0IG49dGhpcy5fX3RlbXBsYXRpemVPcHRpb25zOyh0JiZuLmluc3RhbmNlUHJvcHN8fCFuLmluc3RhbmNlUHJvcHMpJiZ0aGlzLl9lbmFibGVQcm9wZXJ0aWVzKCl9X2NvbmZpZ3VyZVByb3BlcnRpZXModCl7aWYodGhpcy5fX3RlbXBsYXRpemVPcHRpb25zLmZvcndhcmRIb3N0UHJvcClmb3IobGV0IHQgaW4gdGhpcy5fX2hvc3RQcm9wcyl0aGlzLl9zZXRQZW5kaW5nUHJvcGVydHkodCx0aGlzLl9fZGF0YUhvc3RbIl9ob3N0XyIrdF0pO2ZvcihsZXQgZSBpbiB0KXRoaXMuX3NldFBlbmRpbmdQcm9wZXJ0eShlLHRbZV0pfWZvcndhcmRIb3N0UHJvcCh0LGUpe3RoaXMuX3NldFBlbmRpbmdQcm9wZXJ0eU9yUGF0aCh0LGUsITEsITApJiZ0aGlzLl9fZGF0YUhvc3QuX2VucXVldWVDbGllbnQodGhpcyl9X2FkZEV2ZW50TGlzdGVuZXJUb05vZGUodCxlLG4pe2lmKHRoaXMuX21ldGhvZEhvc3QmJnRoaXMuX190ZW1wbGF0aXplT3B0aW9ucy5wYXJlbnRNb2RlbCl0aGlzLl9tZXRob2RIb3N0Ll9hZGRFdmVudExpc3RlbmVyVG9Ob2RlKHQsZSwodD0+e3QubW9kZWw9dGhpcyxuKHQpfSkpO2Vsc2V7bGV0IGk9dGhpcy5fX2RhdGFIb3N0Ll9fZGF0YUhvc3Q7aSYmaS5fYWRkRXZlbnRMaXN0ZW5lclRvTm9kZSh0LGUsbil9fV9zaG93SGlkZUNoaWxkcmVuKHQpe1VyKHQsdGhpcy5jaGlsZHJlbil9X3NldFVubWFuYWdlZFByb3BlcnR5VG9Ob2RlKHQsZSxuKXt0Ll9faGlkZVRlbXBsYXRlQ2hpbGRyZW5fXyYmdC5ub2RlVHlwZT09Tm9kZS5URVhUX05PREUmJiJ0ZXh0Q29udGVudCI9PWU/dC5fX3BvbHltZXJUZXh0Q29udGVudF9fPW46c3VwZXIuX3NldFVubWFuYWdlZFByb3BlcnR5VG9Ob2RlKHQsZSxuKX1nZXQgcGFyZW50TW9kZWwoKXtsZXQgdD10aGlzLl9fcGFyZW50TW9kZWw7aWYoIXQpe2xldCBlO3Q9dGhpcztkb3t0PXQuX19kYXRhSG9zdC5fX2RhdGFIb3N0fXdoaWxlKChlPXQuX190ZW1wbGF0aXplT3B0aW9ucykmJiFlLnBhcmVudE1vZGVsKTt0aGlzLl9fcGFyZW50TW9kZWw9dH1yZXR1cm4gdH1kaXNwYXRjaEV2ZW50KHQpe3JldHVybiEwfX1jb25zdCBHcj1Scihqcik7ZnVuY3Rpb24gV3IodCl7bGV0IGU9dC5fX2RhdGFIb3N0O3JldHVybiBlJiZlLl9tZXRob2RIb3N0fHxlfWZ1bmN0aW9uIHFyKHQsZSl7cmV0dXJuIGZ1bmN0aW9uIHQobixpLHIpe2UuY2FsbChuLl9fdGVtcGxhdGl6ZU93bmVyLGkuc3Vic3RyaW5nKCJfaG9zdF8iLmxlbmd0aCkscltpXSl9fWZ1bmN0aW9uIFlyKHQsZSl7cmV0dXJuIGZ1bmN0aW9uIHQobixpLHIpe2UuY2FsbChuLl9fdGVtcGxhdGl6ZU93bmVyLG4saSxyW2ldKX19ZnVuY3Rpb24gWHIodCxlLG4pe2lmKGImJiFXcih0KSl0aHJvdyBuZXcgRXJyb3IoInN0cmljdFRlbXBsYXRlUG9saWN5OiB0ZW1wbGF0ZSBvd25lciBub3QgdHJ1c3RlZCIpO2lmKG49bnx8e30sdC5fX3RlbXBsYXRpemVPd25lcil0aHJvdyBuZXcgRXJyb3IoIkEgPHRlbXBsYXRlPiBjYW4gb25seSBiZSB0ZW1wbGF0aXplZCBvbmNlIik7dC5fX3RlbXBsYXRpemVPd25lcj1lO2xldCBpPShlP2UuY29uc3RydWN0b3I6anIpLl9wYXJzZVRlbXBsYXRlKHQpLHI9aS50ZW1wbGF0aXplSW5zdGFuY2VDbGFzcztyfHwocj0oZnVuY3Rpb24gbyh0LGUsbil7bGV0IGk9bi5tdXRhYmxlRGF0YT9HcjpqcjtYci5taXhpbiYmKGk9WHIubWl4aW4oaSkpO2xldCByPWNsYXNzIGV4dGVuZHMgaXt9O3JldHVybiByLnByb3RvdHlwZS5fX3RlbXBsYXRpemVPcHRpb25zPW4sci5wcm90b3R5cGUuX2JpbmRUZW1wbGF0ZSh0KSwoZnVuY3Rpb24gbyh0LGUsbixpKXtsZXQgcj1uLmhvc3RQcm9wc3x8e307Zm9yKGxldCBlIGluIGkuaW5zdGFuY2VQcm9wcyl7ZGVsZXRlIHJbZV07bGV0IG49aS5ub3RpZnlJbnN0YW5jZVByb3A7biYmdC5wcm90b3R5cGUuX2FkZFByb3BlcnR5RWZmZWN0KGUsdC5wcm90b3R5cGUuUFJPUEVSVFlfRUZGRUNUX1RZUEVTLk5PVElGWSx7Zm46WXIoMCxuKX0pfWlmKGkuZm9yd2FyZEhvc3RQcm9wJiZlLl9fZGF0YUhvc3QpZm9yKGxldCBlIGluIHIpbi5oYXNIb3N0UHJvcHN8fChuLmhhc0hvc3RQcm9wcz0hMCksdC5wcm90b3R5cGUuX2FkZFByb3BlcnR5RWZmZWN0KGUsdC5wcm90b3R5cGUuUFJPUEVSVFlfRUZGRUNUX1RZUEVTLk5PVElGWSx7Zm46ZnVuY3Rpb24gdChlLG4saSl7ZS5fX2RhdGFIb3N0Ll9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgoIl9ob3N0XyIrbixpW25dLCEwLCEwKX19KX0pKHIsdCxlLG4pLHJ9KSh0LGksbiksaS50ZW1wbGF0aXplSW5zdGFuY2VDbGFzcz1yKTtjb25zdCBhPVdyKHQpOyEoZnVuY3Rpb24gcyh0LGUsbixpKXtsZXQgcj1uLmZvcndhcmRIb3N0UHJvcDtpZihyJiZlLmhhc0hvc3RQcm9wcyl7Y29uc3Qgbz0idGVtcGxhdGUiPT10LmxvY2FsTmFtZTtsZXQgYT1lLnRlbXBsYXRpemVUZW1wbGF0ZUNsYXNzO2lmKCFhKXtpZihvKXtsZXQgdD1uLm11dGFibGVEYXRhP0ZyOkhyO2NsYXNzIGkgZXh0ZW5kcyB0e31hPWUudGVtcGxhdGl6ZVRlbXBsYXRlQ2xhc3M9aX1lbHNle2NvbnN0IG49dC5jb25zdHJ1Y3RvcjtjbGFzcyBpIGV4dGVuZHMgbnt9YT1lLnRlbXBsYXRpemVUZW1wbGF0ZUNsYXNzPWl9bGV0IHM9ZS5ob3N0UHJvcHM7Zm9yKGxldCB0IGluIHMpYS5wcm90b3R5cGUuX2FkZFByb3BlcnR5RWZmZWN0KCJfaG9zdF8iK3QsYS5wcm90b3R5cGUuUFJPUEVSVFlfRUZGRUNUX1RZUEVTLlBST1BBR0FURSx7Zm46cXIoMCxyKX0pLGEucHJvdG90eXBlLl9jcmVhdGVOb3RpZnlpbmdQcm9wZXJ0eSgiX2hvc3RfIit0KTtTJiZpJiYoZnVuY3Rpb24gbyh0LGUsbil7Y29uc3QgaT1uLmNvbnN0cnVjdG9yLl9wcm9wZXJ0aWVzLHtwcm9wZXJ0eUVmZmVjdHM6cn09dCx7aW5zdGFuY2VQcm9wczpvfT1lO2ZvcihsZXQgdCBpbiByKWlmKCEoaVt0XXx8byYmb1t0XSkpe2NvbnN0IGU9clt0XTtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKyl7Y29uc3R7cGFydDppfT1lW25dLmluZm87aWYoIWkuc2lnbmF0dXJlfHwhaS5zaWduYXR1cmUuc3RhdGljKXtjb25zb2xlLndhcm4oYFByb3BlcnR5ICcke3R9JyB1c2VkIGluIHRlbXBsYXRlIGJ1dCBub3QgZGVjbGFyZWQgaW4gJ3Byb3BlcnRpZXMnOyBhdHRyaWJ1dGUgd2lsbCBub3QgYmUgb2JzZXJ2ZWQuYCk7YnJlYWt9fX19KShlLG4saSl9aWYodC5fX2RhdGFQcm90byYmT2JqZWN0LmFzc2lnbih0Ll9fZGF0YSx0Ll9fZGF0YVByb3RvKSxvKSEoZnVuY3Rpb24gYSh0LGUpe0RyPXQsT2JqZWN0LnNldFByb3RvdHlwZU9mKHQsZS5wcm90b3R5cGUpLG5ldyBlLERyPW51bGx9KSh0LGEpLHQuX19kYXRhVGVtcD17fSx0Ll9fZGF0YVBlbmRpbmc9bnVsbCx0Ll9fZGF0YU9sZD1udWxsLHQuX2VuYWJsZVByb3BlcnRpZXMoKTtlbHNle09iamVjdC5zZXRQcm90b3R5cGVPZih0LGEucHJvdG90eXBlKTtjb25zdCBuPWUuaG9zdFByb3BzO2ZvcihsZXQgZSBpbiBuKWlmKGU9Il9ob3N0XyIrZSxlIGluIHQpe2NvbnN0IG49dFtlXTtkZWxldGUgdFtlXSx0Ll9fZGF0YVtlXT1ufX19fSkodCxpLG4sYSk7bGV0IGw9Y2xhc3MgZXh0ZW5kcyBye307cmV0dXJuIGwucHJvdG90eXBlLl9tZXRob2RIb3N0PWEsbC5wcm90b3R5cGUuX19kYXRhSG9zdD10LGwucHJvdG90eXBlLl9fdGVtcGxhdGl6ZU93bmVyPWUsbC5wcm90b3R5cGUuX19ob3N0UHJvcHM9aS5ob3N0UHJvcHMsbD1sLGx9ZnVuY3Rpb24gJHIodCxlKXtsZXQgbjtmb3IoO2U7KWlmKG49ZS5fX2RhdGFIb3N0P2U6ZS5fX3RlbXBsYXRpemVJbnN0YW5jZSl7aWYobi5fX2RhdGFIb3N0PT10KXJldHVybiBuO2U9bi5fX2RhdGFIb3N0fWVsc2UgZT1ZKGUpLnBhcmVudE5vZGU7cmV0dXJuIG51bGx9Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovY29uc3QgS3I9e3RlbXBsYXRpemUodCxlKXt0aGlzLl90ZW1wbGF0aXplclRlbXBsYXRlPXQsdGhpcy5jdG9yPVhyKHQsdGhpcyx7bXV0YWJsZURhdGE6Qm9vbGVhbihlKSxwYXJlbnRNb2RlbDp0aGlzLl9wYXJlbnRNb2RlbCxpbnN0YW5jZVByb3BzOnRoaXMuX2luc3RhbmNlUHJvcHMsZm9yd2FyZEhvc3RQcm9wOnRoaXMuX2ZvcndhcmRIb3N0UHJvcFYyLG5vdGlmeUluc3RhbmNlUHJvcDp0aGlzLl9ub3RpZnlJbnN0YW5jZVByb3BWMn0pfSxzdGFtcCh0KXtyZXR1cm4gbmV3IHRoaXMuY3Rvcih0KX0sbW9kZWxGb3JFbGVtZW50KHQpe3JldHVybiAkcih0aGlzLl90ZW1wbGF0aXplclRlbXBsYXRlLHQpfX07Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovbGV0IFpyPSExO2Z1bmN0aW9uIEpyKCl7aWYodyYmIW0pe2lmKCFacil7WnI9ITA7Y29uc3QgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO3QudGV4dENvbnRlbnQ9ImRvbS1iaW5kLGRvbS1pZixkb20tcmVwZWF0e2Rpc3BsYXk6bm9uZTt9Iixkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHQpfXJldHVybiEwfXJldHVybiExfQovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dAogICAgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28KICAgIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqL2NvbnN0IFFyPWRpKHpyKGhlKEhUTUxFbGVtZW50KSkpO2N1c3RvbUVsZW1lbnRzLmRlZmluZSgiZG9tLWJpbmQiLGNsYXNzIGV4dGVuZHMgUXJ7c3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKXtyZXR1cm5bIm11dGFibGUtZGF0YSJdfWNvbnN0cnVjdG9yKCl7aWYoc3VwZXIoKSxiKXRocm93IG5ldyBFcnJvcigic3RyaWN0VGVtcGxhdGVQb2xpY3k6IGRvbS1iaW5kIG5vdCBhbGxvd2VkIik7dGhpcy5yb290PW51bGwsdGhpcy4kPW51bGwsdGhpcy5fX2NoaWxkcmVuPW51bGx9YXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHQsZSxuLGkpe3RoaXMubXV0YWJsZURhdGE9ITB9Y29ubmVjdGVkQ2FsbGJhY2soKXtKcigpfHwodGhpcy5zdHlsZS5kaXNwbGF5PSJub25lIiksdGhpcy5yZW5kZXIoKX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3RoaXMuX19yZW1vdmVDaGlsZHJlbigpfV9faW5zZXJ0Q2hpbGRyZW4oKXtZKFkodGhpcykucGFyZW50Tm9kZSkuaW5zZXJ0QmVmb3JlKHRoaXMucm9vdCx0aGlzKX1fX3JlbW92ZUNoaWxkcmVuKCl7aWYodGhpcy5fX2NoaWxkcmVuKWZvcihsZXQgdD0wO3Q8dGhpcy5fX2NoaWxkcmVuLmxlbmd0aDt0KyspdGhpcy5yb290LmFwcGVuZENoaWxkKHRoaXMuX19jaGlsZHJlblt0XSl9cmVuZGVyKCl7bGV0IHQ7aWYoIXRoaXMuX19jaGlsZHJlbil7aWYodD10fHx0aGlzLnF1ZXJ5U2VsZWN0b3IoInRlbXBsYXRlIiksIXQpe2xldCBlPW5ldyBNdXRhdGlvbk9ic2VydmVyKCgoKT0+e2lmKHQ9dGhpcy5xdWVyeVNlbGVjdG9yKCJ0ZW1wbGF0ZSIpLCF0KXRocm93IG5ldyBFcnJvcigiZG9tLWJpbmQgcmVxdWlyZXMgYSA8dGVtcGxhdGU+IGNoaWxkIik7ZS5kaXNjb25uZWN0KCksdGhpcy5yZW5kZXIoKX0pKTtyZXR1cm4gdm9pZCBlLm9ic2VydmUodGhpcyx7Y2hpbGRMaXN0OiEwfSl9dGhpcy5yb290PXRoaXMuX3N0YW1wVGVtcGxhdGUodCksdGhpcy4kPXRoaXMucm9vdC4kLHRoaXMuX19jaGlsZHJlbj1bXTtmb3IobGV0IHQ9dGhpcy5yb290LmZpcnN0Q2hpbGQ7dDt0PXQubmV4dFNpYmxpbmcpdGhpcy5fX2NoaWxkcmVuW3RoaXMuX19jaGlsZHJlbi5sZW5ndGhdPXQ7dGhpcy5fZW5hYmxlUHJvcGVydGllcygpfXRoaXMuX19pbnNlcnRDaGlsZHJlbigpLHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImRvbS1jaGFuZ2UiLHtidWJibGVzOiEwLGNvbXBvc2VkOiEwfSkpfX0pOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dAogICAgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28KICAgIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpjb25zdCB0bz16cih5ZSk7Y2xhc3MgZW8gZXh0ZW5kcyB0b3tzdGF0aWMgZ2V0IGlzKCl7cmV0dXJuImRvbS1yZXBlYXQifXN0YXRpYyBnZXQgdGVtcGxhdGUoKXtyZXR1cm4gbnVsbH1zdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57aXRlbXM6e3R5cGU6QXJyYXl9LGFzOnt0eXBlOlN0cmluZyx2YWx1ZToiaXRlbSJ9LGluZGV4QXM6e3R5cGU6U3RyaW5nLHZhbHVlOiJpbmRleCJ9LGl0ZW1zSW5kZXhBczp7dHlwZTpTdHJpbmcsdmFsdWU6Iml0ZW1zSW5kZXgifSxzb3J0Ont0eXBlOkZ1bmN0aW9uLG9ic2VydmVyOiJfX3NvcnRDaGFuZ2VkIn0sZmlsdGVyOnt0eXBlOkZ1bmN0aW9uLG9ic2VydmVyOiJfX2ZpbHRlckNoYW5nZWQifSxvYnNlcnZlOnt0eXBlOlN0cmluZyxvYnNlcnZlcjoiX19vYnNlcnZlQ2hhbmdlZCJ9LGRlbGF5Ok51bWJlcixyZW5kZXJlZEl0ZW1Db3VudDp7dHlwZTpOdW1iZXIsbm90aWZ5OiFrLHJlYWRPbmx5OiEwfSxpbml0aWFsQ291bnQ6e3R5cGU6TnVtYmVyfSx0YXJnZXRGcmFtZXJhdGU6e3R5cGU6TnVtYmVyLHZhbHVlOjIwfSxfdGFyZ2V0RnJhbWVUaW1lOnt0eXBlOk51bWJlcixjb21wdXRlZDoiX19jb21wdXRlRnJhbWVUaW1lKHRhcmdldEZyYW1lcmF0ZSkifSxub3RpZnlEb21DaGFuZ2U6e3R5cGU6Qm9vbGVhbn0scmV1c2VDaHVua2VkSW5zdGFuY2VzOnt0eXBlOkJvb2xlYW59fX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX19pdGVtc0NoYW5nZWQoaXRlbXMuKikiXX1jb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fX2luc3RhbmNlcz1bXSx0aGlzLl9fcmVuZGVyRGVib3VuY2VyPW51bGwsdGhpcy5fX2l0ZW1zSWR4VG9JbnN0SWR4PXt9LHRoaXMuX19jaHVua0NvdW50PW51bGwsdGhpcy5fX3JlbmRlclN0YXJ0VGltZT1udWxsLHRoaXMuX19pdGVtc0FycmF5Q2hhbmdlZD0hMSx0aGlzLl9fc2hvdWxkTWVhc3VyZUNodW5rPSExLHRoaXMuX19zaG91bGRDb250aW51ZUNodW5raW5nPSExLHRoaXMuX19jaHVua2luZ0lkPTAsdGhpcy5fX3NvcnRGbj1udWxsLHRoaXMuX19maWx0ZXJGbj1udWxsLHRoaXMuX19vYnNlcnZlUGF0aHM9bnVsbCx0aGlzLl9fY3Rvcj1udWxsLHRoaXMuX19pc0RldGFjaGVkPSEwLHRoaXMudGVtcGxhdGU9bnVsbH1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5fX2lzRGV0YWNoZWQ9ITA7Zm9yKGxldCB0PTA7dDx0aGlzLl9faW5zdGFuY2VzLmxlbmd0aDt0KyspdGhpcy5fX2RldGFjaEluc3RhbmNlKHQpfWNvbm5lY3RlZENhbGxiYWNrKCl7aWYoc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSxKcigpfHwodGhpcy5zdHlsZS5kaXNwbGF5PSJub25lIiksdGhpcy5fX2lzRGV0YWNoZWQpe3RoaXMuX19pc0RldGFjaGVkPSExO2xldCB0PVkoWSh0aGlzKS5wYXJlbnROb2RlKTtmb3IobGV0IGU9MDtlPHRoaXMuX19pbnN0YW5jZXMubGVuZ3RoO2UrKyl0aGlzLl9fYXR0YWNoSW5zdGFuY2UoZSx0KX19X19lbnN1cmVUZW1wbGF0aXplZCgpe2lmKCF0aGlzLl9fY3Rvcil7Y29uc3QgdD10aGlzO2xldCBlPXRoaXMudGVtcGxhdGU9dC5fdGVtcGxhdGVJbmZvP3Q6dGhpcy5xdWVyeVNlbGVjdG9yKCJ0ZW1wbGF0ZSIpO2lmKCFlKXtsZXQgdD1uZXcgTXV0YXRpb25PYnNlcnZlcigoKCk9PntpZighdGhpcy5xdWVyeVNlbGVjdG9yKCJ0ZW1wbGF0ZSIpKXRocm93IG5ldyBFcnJvcigiZG9tLXJlcGVhdCByZXF1aXJlcyBhIDx0ZW1wbGF0ZT4gY2hpbGQiKTt0LmRpc2Nvbm5lY3QoKSx0aGlzLl9fcmVuZGVyKCl9KSk7cmV0dXJuIHQub2JzZXJ2ZSh0aGlzLHtjaGlsZExpc3Q6ITB9KSwhMX1sZXQgbj17fTtuW3RoaXMuYXNdPSEwLG5bdGhpcy5pbmRleEFzXT0hMCxuW3RoaXMuaXRlbXNJbmRleEFzXT0hMCx0aGlzLl9fY3Rvcj1YcihlLHRoaXMse211dGFibGVEYXRhOnRoaXMubXV0YWJsZURhdGEscGFyZW50TW9kZWw6ITAsaW5zdGFuY2VQcm9wczpuLGZvcndhcmRIb3N0UHJvcDpmdW5jdGlvbih0LGUpe2xldCBuPXRoaXMuX19pbnN0YW5jZXM7Zm9yKGxldCBpLHI9MDtyPG4ubGVuZ3RoJiYoaT1uW3JdKTtyKyspaS5mb3J3YXJkSG9zdFByb3AodCxlKX0sbm90aWZ5SW5zdGFuY2VQcm9wOmZ1bmN0aW9uKHQsZSxuKXtpZihRKHRoaXMuYXMsZSkpe2xldCBpPXRbdGhpcy5pdGVtc0luZGV4QXNdO2U9PXRoaXMuYXMmJih0aGlzLml0ZW1zW2ldPW4pO2xldCByPUoodGhpcy5hcyxgJHtKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJpdGVtcyIsdGhpcyl9LiR7aX1gLGUpO3RoaXMubm90aWZ5UGF0aChyLG4pfX19KX1yZXR1cm4hMH1fX2dldE1ldGhvZEhvc3QoKXtyZXR1cm4gdGhpcy5fX2RhdGFIb3N0Ll9tZXRob2RIb3N0fHx0aGlzLl9fZGF0YUhvc3R9X19mdW5jdGlvbkZyb21Qcm9wZXJ0eVZhbHVlKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdCl7bGV0IGU9dCxuPXRoaXMuX19nZXRNZXRob2RIb3N0KCk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5bZV0uYXBwbHkobixhcmd1bWVudHMpfX1yZXR1cm4gdH1fX3NvcnRDaGFuZ2VkKHQpe3RoaXMuX19zb3J0Rm49dGhpcy5fX2Z1bmN0aW9uRnJvbVByb3BlcnR5VmFsdWUodCksdGhpcy5pdGVtcyYmdGhpcy5fX2RlYm91bmNlUmVuZGVyKHRoaXMuX19yZW5kZXIpfV9fZmlsdGVyQ2hhbmdlZCh0KXt0aGlzLl9fZmlsdGVyRm49dGhpcy5fX2Z1bmN0aW9uRnJvbVByb3BlcnR5VmFsdWUodCksdGhpcy5pdGVtcyYmdGhpcy5fX2RlYm91bmNlUmVuZGVyKHRoaXMuX19yZW5kZXIpfV9fY29tcHV0ZUZyYW1lVGltZSh0KXtyZXR1cm4gTWF0aC5jZWlsKDFlMy90KX1fX29ic2VydmVDaGFuZ2VkKCl7dGhpcy5fX29ic2VydmVQYXRocz10aGlzLm9ic2VydmUmJnRoaXMub2JzZXJ2ZS5yZXBsYWNlKCIuKiIsIi4iKS5zcGxpdCgiICIpfV9faGFuZGxlT2JzZXJ2ZWRQYXRocyh0KXtpZih0aGlzLl9fc29ydEZufHx0aGlzLl9fZmlsdGVyRm4paWYodCl7aWYodGhpcy5fX29ic2VydmVQYXRocyl7bGV0IGU9dGhpcy5fX29ic2VydmVQYXRocztmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKykwPT09dC5pbmRleE9mKGVbbl0pJiZ0aGlzLl9fZGVib3VuY2VSZW5kZXIodGhpcy5fX3JlbmRlcix0aGlzLmRlbGF5KX19ZWxzZSB0aGlzLl9fZGVib3VuY2VSZW5kZXIodGhpcy5fX3JlbmRlcix0aGlzLmRlbGF5KX1fX2l0ZW1zQ2hhbmdlZCh0KXt0aGlzLml0ZW1zJiYhQXJyYXkuaXNBcnJheSh0aGlzLml0ZW1zKSYmY29uc29sZS53YXJuKCJkb20tcmVwZWF0IGV4cGVjdGVkIGFycmF5IGZvciBgaXRlbXNgLCBmb3VuZCIsdGhpcy5pdGVtcyksdGhpcy5fX2hhbmRsZUl0ZW1QYXRoKHQucGF0aCx0LnZhbHVlKXx8KCJpdGVtcyI9PT10LnBhdGgmJih0aGlzLl9faXRlbXNBcnJheUNoYW5nZWQ9ITApLHRoaXMuX19kZWJvdW5jZVJlbmRlcih0aGlzLl9fcmVuZGVyKSl9X19kZWJvdW5jZVJlbmRlcih0LGU9MCl7dGhpcy5fX3JlbmRlckRlYm91bmNlcj1Fbi5kZWJvdW5jZSh0aGlzLl9fcmVuZGVyRGVib3VuY2VyLGU+MD9ndC5hZnRlcihlKTp2dCx0LmJpbmQodGhpcykpLENuKHRoaXMuX19yZW5kZXJEZWJvdW5jZXIpfXJlbmRlcigpe3RoaXMuX19kZWJvdW5jZVJlbmRlcih0aGlzLl9fcmVuZGVyKSx6aSgpfV9fcmVuZGVyKCl7aWYoIXRoaXMuX19lbnN1cmVUZW1wbGF0aXplZCgpKXJldHVybjtsZXQgdD10aGlzLml0ZW1zfHxbXTtjb25zdCBlPXRoaXMuX19zb3J0QW5kRmlsdGVySXRlbXModCksbj10aGlzLl9fY2FsY3VsYXRlTGltaXQoZS5sZW5ndGgpO3RoaXMuX191cGRhdGVJbnN0YW5jZXModCxuLGUpLHRoaXMuaW5pdGlhbENvdW50JiYodGhpcy5fX3Nob3VsZE1lYXN1cmVDaHVua3x8dGhpcy5fX3Nob3VsZENvbnRpbnVlQ2h1bmtpbmcpJiYoY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fX2NodW5raW5nSWQpLHRoaXMuX19jaHVua2luZ0lkPXJlcXVlc3RBbmltYXRpb25GcmFtZSgoKCk9PnRoaXMuX19jb250aW51ZUNodW5raW5nKCkpKSksdGhpcy5fc2V0UmVuZGVyZWRJdGVtQ291bnQodGhpcy5fX2luc3RhbmNlcy5sZW5ndGgpLGsmJiF0aGlzLm5vdGlmeURvbUNoYW5nZXx8dGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiZG9tLWNoYW5nZSIse2J1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSl9X19zb3J0QW5kRmlsdGVySXRlbXModCl7bGV0IGU9bmV3IEFycmF5KHQubGVuZ3RoKTtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKyllW25dPW47cmV0dXJuIHRoaXMuX19maWx0ZXJGbiYmKGU9ZS5maWx0ZXIoKChlLG4saSk9PnRoaXMuX19maWx0ZXJGbih0W2VdLG4saSkpKSksdGhpcy5fX3NvcnRGbiYmZS5zb3J0KCgoZSxuKT0+dGhpcy5fX3NvcnRGbih0W2VdLHRbbl0pKSksZX1fX2NhbGN1bGF0ZUxpbWl0KHQpe2xldCBlPXQ7Y29uc3Qgbj10aGlzLl9faW5zdGFuY2VzLmxlbmd0aDtpZih0aGlzLmluaXRpYWxDb3VudCl7bGV0IGk7IXRoaXMuX19jaHVua0NvdW50fHx0aGlzLl9faXRlbXNBcnJheUNoYW5nZWQmJiF0aGlzLnJldXNlQ2h1bmtlZEluc3RhbmNlcz8oZT1NYXRoLm1pbih0LHRoaXMuaW5pdGlhbENvdW50KSxpPU1hdGgubWF4KGUtbiwwKSx0aGlzLl9fY2h1bmtDb3VudD1pfHwxKTooaT1NYXRoLm1pbihNYXRoLm1heCh0LW4sMCksdGhpcy5fX2NodW5rQ291bnQpLGU9TWF0aC5taW4obitpLHQpKSx0aGlzLl9fc2hvdWxkTWVhc3VyZUNodW5rPWk9PT10aGlzLl9fY2h1bmtDb3VudCx0aGlzLl9fc2hvdWxkQ29udGludWVDaHVua2luZz1lPHQsdGhpcy5fX3JlbmRlclN0YXJ0VGltZT1wZXJmb3JtYW5jZS5ub3coKX1yZXR1cm4gdGhpcy5fX2l0ZW1zQXJyYXlDaGFuZ2VkPSExLGV9X19jb250aW51ZUNodW5raW5nKCl7aWYodGhpcy5fX3Nob3VsZE1lYXN1cmVDaHVuayl7Y29uc3QgdD1wZXJmb3JtYW5jZS5ub3coKS10aGlzLl9fcmVuZGVyU3RhcnRUaW1lO3RoaXMuX19jaHVua0NvdW50PU1hdGgucm91bmQodGhpcy5fX2NodW5rQ291bnQqKHRoaXMuX3RhcmdldEZyYW1lVGltZS90KSl8fDF9dGhpcy5fX3Nob3VsZENvbnRpbnVlQ2h1bmtpbmcmJnRoaXMuX19kZWJvdW5jZVJlbmRlcih0aGlzLl9fcmVuZGVyKX1fX3VwZGF0ZUluc3RhbmNlcyh0LGUsbil7Y29uc3QgaT10aGlzLl9faXRlbXNJZHhUb0luc3RJZHg9e307bGV0IHI7Zm9yKHI9MDtyPGU7cisrKXtsZXQgZT10aGlzLl9faW5zdGFuY2VzW3JdLG89bltyXSxhPXRbb107aVtvXT1yLGU/KGUuX3NldFBlbmRpbmdQcm9wZXJ0eSh0aGlzLmFzLGEpLGUuX3NldFBlbmRpbmdQcm9wZXJ0eSh0aGlzLmluZGV4QXMsciksZS5fc2V0UGVuZGluZ1Byb3BlcnR5KHRoaXMuaXRlbXNJbmRleEFzLG8pLGUuX2ZsdXNoUHJvcGVydGllcygpKTp0aGlzLl9faW5zZXJ0SW5zdGFuY2UoYSxyLG8pfWZvcihsZXQgdD10aGlzLl9faW5zdGFuY2VzLmxlbmd0aC0xO3Q+PXI7dC0tKXRoaXMuX19kZXRhY2hBbmRSZW1vdmVJbnN0YW5jZSh0KX1fX2RldGFjaEluc3RhbmNlKHQpe2xldCBlPXRoaXMuX19pbnN0YW5jZXNbdF07Y29uc3Qgbj1ZKGUucm9vdCk7Zm9yKGxldCB0PTA7dDxlLmNoaWxkcmVuLmxlbmd0aDt0Kyspbi5hcHBlbmRDaGlsZChlLmNoaWxkcmVuW3RdKTtyZXR1cm4gZX1fX2F0dGFjaEluc3RhbmNlKHQsZSl7ZS5pbnNlcnRCZWZvcmUodGhpcy5fX2luc3RhbmNlc1t0XS5yb290LHRoaXMpfV9fZGV0YWNoQW5kUmVtb3ZlSW5zdGFuY2UodCl7dGhpcy5fX2RldGFjaEluc3RhbmNlKHQpLHRoaXMuX19pbnN0YW5jZXMuc3BsaWNlKHQsMSl9X19zdGFtcEluc3RhbmNlKHQsZSxuKXtsZXQgaT17fTtyZXR1cm4gaVt0aGlzLmFzXT10LGlbdGhpcy5pbmRleEFzXT1lLGlbdGhpcy5pdGVtc0luZGV4QXNdPW4sbmV3IHRoaXMuX19jdG9yKGkpfV9faW5zZXJ0SW5zdGFuY2UodCxlLG4pe2NvbnN0IGk9dGhpcy5fX3N0YW1wSW5zdGFuY2UodCxlLG4pO2xldCByPXRoaXMuX19pbnN0YW5jZXNbZSsxXSxvPXI/ci5jaGlsZHJlblswXTp0aGlzO3JldHVybiBZKFkodGhpcykucGFyZW50Tm9kZSkuaW5zZXJ0QmVmb3JlKGkucm9vdCxvKSx0aGlzLl9faW5zdGFuY2VzW2VdPWksaX1fc2hvd0hpZGVDaGlsZHJlbih0KXtmb3IobGV0IGU9MDtlPHRoaXMuX19pbnN0YW5jZXMubGVuZ3RoO2UrKyl0aGlzLl9faW5zdGFuY2VzW2VdLl9zaG93SGlkZUNoaWxkcmVuKHQpfV9faGFuZGxlSXRlbVBhdGgodCxlKXtsZXQgbj10LnNsaWNlKDYpLGk9bi5pbmRleE9mKCIuIikscj1pPDA/bjpuLnN1YnN0cmluZygwLGkpO2lmKHI9PXBhcnNlSW50KHIsMTApKXtsZXQgdD1pPDA/IiI6bi5zdWJzdHJpbmcoaSsxKTt0aGlzLl9faGFuZGxlT2JzZXJ2ZWRQYXRocyh0KTtsZXQgbz10aGlzLl9faW5zdGFuY2VzW3RoaXMuX19pdGVtc0lkeFRvSW5zdElkeFtyXV07cmV0dXJuIG8mJihvLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgodGhpcy5hcysodD8iLiIrdDoiIiksZSwhMSwhMCksby5fZmx1c2hQcm9wZXJ0aWVzKCkpLCEwfX1pdGVtRm9yRWxlbWVudCh0KXtsZXQgZT10aGlzLm1vZGVsRm9yRWxlbWVudCh0KTtyZXR1cm4gZSYmZVt0aGlzLmFzXX1pbmRleEZvckVsZW1lbnQodCl7bGV0IGU9dGhpcy5tb2RlbEZvckVsZW1lbnQodCk7cmV0dXJuIGUmJmVbdGhpcy5pbmRleEFzXX1tb2RlbEZvckVsZW1lbnQodCl7cmV0dXJuICRyKHRoaXMudGVtcGxhdGUsdCl9fWN1c3RvbUVsZW1lbnRzLmRlZmluZShlby5pcyxlbyk7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCmNsYXNzIG5vIGV4dGVuZHMgeWV7c3RhdGljIGdldCBpcygpe3JldHVybiJkb20taWYifXN0YXRpYyBnZXQgdGVtcGxhdGUoKXtyZXR1cm4gbnVsbH1zdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57aWY6e3R5cGU6Qm9vbGVhbixvYnNlcnZlcjoiX19kZWJvdW5jZVJlbmRlciJ9LHJlc3RhbXA6e3R5cGU6Qm9vbGVhbixvYnNlcnZlcjoiX19kZWJvdW5jZVJlbmRlciJ9LG5vdGlmeURvbUNoYW5nZTp7dHlwZTpCb29sZWFufX19Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX19yZW5kZXJEZWJvdW5jZXI9bnVsbCx0aGlzLl9sYXN0SWY9ITEsdGhpcy5fX2hpZGVUZW1wbGF0ZUNoaWxkcmVuX189ITF9X19kZWJvdW5jZVJlbmRlcigpe3RoaXMuX19yZW5kZXJEZWJvdW5jZXI9RW4uZGVib3VuY2UodGhpcy5fX3JlbmRlckRlYm91bmNlcix2dCwoKCk9PnRoaXMuX19yZW5kZXIoKSkpLENuKHRoaXMuX19yZW5kZXJEZWJvdW5jZXIpfWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtjb25zdCB0PVkodGhpcykucGFyZW50Tm9kZTt0JiYodC5ub2RlVHlwZSE9Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFfHxZKHQpLmhvc3QpfHx0aGlzLl9fdGVhcmRvd25JbnN0YW5jZSgpfWNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSxKcigpfHwodGhpcy5zdHlsZS5kaXNwbGF5PSJub25lIiksdGhpcy5pZiYmdGhpcy5fX2RlYm91bmNlUmVuZGVyKCl9X19lbnN1cmVUZW1wbGF0ZSgpe2lmKCF0aGlzLl9fdGVtcGxhdGUpe2NvbnN0IHQ9dGhpcztsZXQgZT10Ll90ZW1wbGF0ZUluZm8/dDpZKHQpLnF1ZXJ5U2VsZWN0b3IoInRlbXBsYXRlIik7aWYoIWUpe2xldCB0PW5ldyBNdXRhdGlvbk9ic2VydmVyKCgoKT0+e2lmKCFZKHRoaXMpLnF1ZXJ5U2VsZWN0b3IoInRlbXBsYXRlIikpdGhyb3cgbmV3IEVycm9yKCJkb20taWYgcmVxdWlyZXMgYSA8dGVtcGxhdGU+IGNoaWxkIik7dC5kaXNjb25uZWN0KCksdGhpcy5fX3JlbmRlcigpfSkpO3JldHVybiB0Lm9ic2VydmUodGhpcyx7Y2hpbGRMaXN0OiEwfSksITF9dGhpcy5fX3RlbXBsYXRlPWV9cmV0dXJuITB9X19lbnN1cmVJbnN0YW5jZSgpe2xldCB0PVkodGhpcykucGFyZW50Tm9kZTtpZih0aGlzLl9faGFzSW5zdGFuY2UoKSl7bGV0IGU9dGhpcy5fX2dldEluc3RhbmNlTm9kZXMoKTtpZihlJiZlLmxlbmd0aCYmWSh0aGlzKS5wcmV2aW91c1NpYmxpbmchPT1lW2UubGVuZ3RoLTFdKWZvcihsZXQgbixpPTA7aTxlLmxlbmd0aCYmKG49ZVtpXSk7aSsrKVkodCkuaW5zZXJ0QmVmb3JlKG4sdGhpcyl9ZWxzZXtpZighdClyZXR1cm4hMTtpZighdGhpcy5fX2Vuc3VyZVRlbXBsYXRlKCkpcmV0dXJuITE7dGhpcy5fX2NyZWF0ZUFuZEluc2VydEluc3RhbmNlKHQpfXJldHVybiEwfXJlbmRlcigpe3ppKCl9X19yZW5kZXIoKXtpZih0aGlzLmlmKXtpZighdGhpcy5fX2Vuc3VyZUluc3RhbmNlKCkpcmV0dXJufWVsc2UgdGhpcy5yZXN0YW1wJiZ0aGlzLl9fdGVhcmRvd25JbnN0YW5jZSgpO3RoaXMuX3Nob3dIaWRlQ2hpbGRyZW4oKSxrJiYhdGhpcy5ub3RpZnlEb21DaGFuZ2V8fHRoaXMuaWY9PXRoaXMuX2xhc3RJZnx8KHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImRvbS1jaGFuZ2UiLHtidWJibGVzOiEwLGNvbXBvc2VkOiEwfSkpLHRoaXMuX2xhc3RJZj10aGlzLmlmKX1fX2hhc0luc3RhbmNlKCl7fV9fZ2V0SW5zdGFuY2VOb2Rlcygpe31fX2NyZWF0ZUFuZEluc2VydEluc3RhbmNlKHQpe31fX3RlYXJkb3duSW5zdGFuY2UoKXt9X3Nob3dIaWRlQ2hpbGRyZW4oKXt9fWNvbnN0IGlvPUE/Y2xhc3MgZXh0ZW5kcyBub3tjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fX2luc3RhbmNlPW51bGwsdGhpcy5fX3N5bmNJbmZvPW51bGx9X19oYXNJbnN0YW5jZSgpe3JldHVybiBCb29sZWFuKHRoaXMuX19pbnN0YW5jZSl9X19nZXRJbnN0YW5jZU5vZGVzKCl7cmV0dXJuIHRoaXMuX19pbnN0YW5jZS50ZW1wbGF0ZUluZm8uY2hpbGROb2Rlc31fX2NyZWF0ZUFuZEluc2VydEluc3RhbmNlKHQpe2NvbnN0IGU9dGhpcy5fX2RhdGFIb3N0fHx0aGlzO2lmKGImJiF0aGlzLl9fZGF0YUhvc3QpdGhyb3cgbmV3IEVycm9yKCJzdHJpY3RUZW1wbGF0ZVBvbGljeTogdGVtcGxhdGUgb3duZXIgbm90IHRydXN0ZWQiKTtjb25zdCBuPWUuX2JpbmRUZW1wbGF0ZSh0aGlzLl9fdGVtcGxhdGUsITApO24ucnVuRWZmZWN0cz0odCxlLG4pPT57bGV0IGk9dGhpcy5fX3N5bmNJbmZvO2lmKHRoaXMuaWYpaSYmKHRoaXMuX19zeW5jSW5mbz1udWxsLHRoaXMuX3Nob3dIaWRlQ2hpbGRyZW4oKSxlPU9iamVjdC5hc3NpZ24oaS5jaGFuZ2VkUHJvcHMsZSkpLHQoZSxuKTtlbHNlIGlmKHRoaXMuX19pbnN0YW5jZSlpZihpfHwoaT10aGlzLl9fc3luY0luZm89e3J1bkVmZmVjdHM6dCxjaGFuZ2VkUHJvcHM6e319KSxuKWZvcihjb25zdCB0IGluIGUpe2NvbnN0IGU9JCh0KTtpLmNoYW5nZWRQcm9wc1tlXT10aGlzLl9fZGF0YUhvc3RbZV19ZWxzZSBPYmplY3QuYXNzaWduKGkuY2hhbmdlZFByb3BzLGUpfSx0aGlzLl9faW5zdGFuY2U9ZS5fc3RhbXBUZW1wbGF0ZSh0aGlzLl9fdGVtcGxhdGUsbiksWSh0KS5pbnNlcnRCZWZvcmUodGhpcy5fX2luc3RhbmNlLHRoaXMpfV9fc3luY0hvc3RQcm9wZXJ0aWVzKCl7Y29uc3QgdD10aGlzLl9fc3luY0luZm87dCYmKHRoaXMuX19zeW5jSW5mbz1udWxsLHQucnVuRWZmZWN0cyh0LmNoYW5nZWRQcm9wcywhMSkpfV9fdGVhcmRvd25JbnN0YW5jZSgpe3RoaXMuX19pbnN0YW5jZSYmKCh0aGlzLl9fZGF0YUhvc3R8fHRoaXMpLl9yZW1vdmVCb3VuZERvbSh0aGlzLl9faW5zdGFuY2UpLHRoaXMuX19pbnN0YW5jZT1udWxsLHRoaXMuX19zeW5jSW5mbz1udWxsKX1fc2hvd0hpZGVDaGlsZHJlbigpe2NvbnN0IHQ9dGhpcy5fX2hpZGVUZW1wbGF0ZUNoaWxkcmVuX198fCF0aGlzLmlmO3RoaXMuX19pbnN0YW5jZSYmQm9vbGVhbih0aGlzLl9faW5zdGFuY2UuX19oaWRkZW4pIT09dCYmKHRoaXMuX19pbnN0YW5jZS5fX2hpZGRlbj10LFVyKHQsdGhpcy5fX2luc3RhbmNlLnRlbXBsYXRlSW5mby5jaGlsZE5vZGVzKSksdHx8dGhpcy5fX3N5bmNIb3N0UHJvcGVydGllcygpfX06Y2xhc3MgZXh0ZW5kcyBub3tjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fX2N0b3I9bnVsbCx0aGlzLl9faW5zdGFuY2U9bnVsbCx0aGlzLl9faW52YWxpZFByb3BzPW51bGx9X19oYXNJbnN0YW5jZSgpe3JldHVybiBCb29sZWFuKHRoaXMuX19pbnN0YW5jZSl9X19nZXRJbnN0YW5jZU5vZGVzKCl7cmV0dXJuIHRoaXMuX19pbnN0YW5jZS5jaGlsZHJlbn1fX2NyZWF0ZUFuZEluc2VydEluc3RhbmNlKHQpe3RoaXMuX19jdG9yfHwodGhpcy5fX2N0b3I9WHIodGhpcy5fX3RlbXBsYXRlLHRoaXMse211dGFibGVEYXRhOiEwLGZvcndhcmRIb3N0UHJvcDpmdW5jdGlvbih0LGUpe3RoaXMuX19pbnN0YW5jZSYmKHRoaXMuaWY/dGhpcy5fX2luc3RhbmNlLmZvcndhcmRIb3N0UHJvcCh0LGUpOih0aGlzLl9faW52YWxpZFByb3BzPXRoaXMuX19pbnZhbGlkUHJvcHN8fE9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fX2ludmFsaWRQcm9wc1skKHQpXT0hMCkpfX0pKSx0aGlzLl9faW5zdGFuY2U9bmV3IHRoaXMuX19jdG9yLFkodCkuaW5zZXJ0QmVmb3JlKHRoaXMuX19pbnN0YW5jZS5yb290LHRoaXMpfV9fdGVhcmRvd25JbnN0YW5jZSgpe2lmKHRoaXMuX19pbnN0YW5jZSl7bGV0IHQ9dGhpcy5fX2luc3RhbmNlLmNoaWxkcmVuO2lmKHQmJnQubGVuZ3RoKXtsZXQgZT1ZKHRbMF0pLnBhcmVudE5vZGU7aWYoZSl7ZT1ZKGUpO2ZvcihsZXQgbixpPTA7aTx0Lmxlbmd0aCYmKG49dFtpXSk7aSsrKWUucmVtb3ZlQ2hpbGQobil9fXRoaXMuX19pbnZhbGlkUHJvcHM9bnVsbCx0aGlzLl9faW5zdGFuY2U9bnVsbH19X19zeW5jSG9zdFByb3BlcnRpZXMoKXtsZXQgdD10aGlzLl9faW52YWxpZFByb3BzO2lmKHQpe3RoaXMuX19pbnZhbGlkUHJvcHM9bnVsbDtmb3IobGV0IGUgaW4gdCl0aGlzLl9faW5zdGFuY2UuX3NldFBlbmRpbmdQcm9wZXJ0eShlLHRoaXMuX19kYXRhSG9zdFtlXSk7dGhpcy5fX2luc3RhbmNlLl9mbHVzaFByb3BlcnRpZXMoKX19X3Nob3dIaWRlQ2hpbGRyZW4oKXtjb25zdCB0PXRoaXMuX19oaWRlVGVtcGxhdGVDaGlsZHJlbl9ffHwhdGhpcy5pZjt0aGlzLl9faW5zdGFuY2UmJkJvb2xlYW4odGhpcy5fX2luc3RhbmNlLl9faGlkZGVuKSE9PXQmJih0aGlzLl9faW5zdGFuY2UuX19oaWRkZW49dCx0aGlzLl9faW5zdGFuY2UuX3Nob3dIaWRlQ2hpbGRyZW4odCkpLHR8fHRoaXMuX19zeW5jSG9zdFByb3BlcnRpZXMoKX19O2N1c3RvbUVsZW1lbnRzLmRlZmluZShpby5pcyxpbyk7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCmxldCBybz1JKCh0PT57bGV0IGU9bWUodCk7cmV0dXJuIGNsYXNzIGV4dGVuZHMgZXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57aXRlbXM6e3R5cGU6QXJyYXl9LG11bHRpOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHNlbGVjdGVkOnt0eXBlOk9iamVjdCxub3RpZnk6ITB9LHNlbGVjdGVkSXRlbTp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSx0b2dnbGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX19fXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfX3VwZGF0ZVNlbGVjdGlvbihtdWx0aSwgaXRlbXMuKikiXX1jb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fX2xhc3RJdGVtcz1udWxsLHRoaXMuX19sYXN0TXVsdGk9bnVsbCx0aGlzLl9fc2VsZWN0ZWRNYXA9bnVsbH1fX3VwZGF0ZVNlbGVjdGlvbih0LGUpe2xldCBuPWUucGF0aDtpZihuPT1KU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJpdGVtcyIsdGhpcykpe2xldCBuPWUuYmFzZXx8W10saT10aGlzLl9fbGFzdEl0ZW1zO2lmKHQhPT10aGlzLl9fbGFzdE11bHRpJiZ0aGlzLmNsZWFyU2VsZWN0aW9uKCksaSl7bGV0IHQ9TmkobixpKTt0aGlzLl9fYXBwbHlTcGxpY2VzKHQpfXRoaXMuX19sYXN0SXRlbXM9bix0aGlzLl9fbGFzdE11bHRpPXR9ZWxzZSBpZihlLnBhdGg9PWAke0pTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIml0ZW1zIix0aGlzKX0uc3BsaWNlc2ApdGhpcy5fX2FwcGx5U3BsaWNlcyhlLnZhbHVlLmluZGV4U3BsaWNlcyk7ZWxzZXtsZXQgdD1uLnNsaWNlKGAke0pTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIml0ZW1zIix0aGlzKX0uYC5sZW5ndGgpLGU9cGFyc2VJbnQodCwxMCk7dC5pbmRleE9mKCIuIik8MCYmdD09ZSYmdGhpcy5fX2Rlc2VsZWN0Q2hhbmdlZElkeChlKX19X19hcHBseVNwbGljZXModCl7bGV0IGU9dGhpcy5fX3NlbGVjdGVkTWFwO2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKXtsZXQgaT10W25dO2UuZm9yRWFjaCgoKHQsbik9Pnt0PGkuaW5kZXh8fGUuc2V0KG4sdD49aS5pbmRleCtpLnJlbW92ZWQubGVuZ3RoP3QraS5hZGRlZENvdW50LWkucmVtb3ZlZC5sZW5ndGg6LTEpfSkpO2ZvcihsZXQgdD0wO3Q8aS5hZGRlZENvdW50O3QrKyl7bGV0IG49aS5pbmRleCt0O2UuaGFzKHRoaXMuaXRlbXNbbl0pJiZlLnNldCh0aGlzLml0ZW1zW25dLG4pfX10aGlzLl9fdXBkYXRlTGlua3MoKTtsZXQgbj0wO2UuZm9yRWFjaCgoKHQsaSk9Pnt0PDA/KHRoaXMubXVsdGk/dGhpcy5zcGxpY2UoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgic2VsZWN0ZWQiLHRoaXMpLG4sMSk6dGhpcy5zZWxlY3RlZD10aGlzLnNlbGVjdGVkSXRlbT1udWxsLGUuZGVsZXRlKGkpKTpuKyt9KSl9X191cGRhdGVMaW5rcygpe2lmKHRoaXMuX19kYXRhTGlua2VkUGF0aHM9e30sdGhpcy5tdWx0aSl7bGV0IHQ9MDt0aGlzLl9fc2VsZWN0ZWRNYXAuZm9yRWFjaCgoZT0+e2U+PTAmJnRoaXMubGlua1BhdGhzKGAke0pTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIml0ZW1zIix0aGlzKX0uJHtlfWAsYCR7SlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgic2VsZWN0ZWQiLHRoaXMpfS4ke3QrK31gKX0pKX1lbHNlIHRoaXMuX19zZWxlY3RlZE1hcC5mb3JFYWNoKCh0PT57dGhpcy5saW5rUGF0aHMoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgic2VsZWN0ZWQiLHRoaXMpLGAke0pTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIml0ZW1zIix0aGlzKX0uJHt0fWApLHRoaXMubGlua1BhdGhzKEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoInNlbGVjdGVkSXRlbSIsdGhpcyksYCR7SlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiaXRlbXMiLHRoaXMpfS4ke3R9YCl9KSl9Y2xlYXJTZWxlY3Rpb24oKXt0aGlzLl9fZGF0YUxpbmtlZFBhdGhzPXt9LHRoaXMuX19zZWxlY3RlZE1hcD1uZXcgTWFwLHRoaXMuc2VsZWN0ZWQ9dGhpcy5tdWx0aT9bXTpudWxsLHRoaXMuc2VsZWN0ZWRJdGVtPW51bGx9aXNTZWxlY3RlZCh0KXtyZXR1cm4gdGhpcy5fX3NlbGVjdGVkTWFwLmhhcyh0KX1pc0luZGV4U2VsZWN0ZWQodCl7cmV0dXJuIHRoaXMuaXNTZWxlY3RlZCh0aGlzLml0ZW1zW3RdKX1fX2Rlc2VsZWN0Q2hhbmdlZElkeCh0KXtsZXQgZT10aGlzLl9fc2VsZWN0ZWRJbmRleEZvckl0ZW1JbmRleCh0KTtpZihlPj0wKXtsZXQgdD0wO3RoaXMuX19zZWxlY3RlZE1hcC5mb3JFYWNoKCgobixpKT0+e2U9PXQrKyYmdGhpcy5kZXNlbGVjdChpKX0pKX19X19zZWxlY3RlZEluZGV4Rm9ySXRlbUluZGV4KHQpe2xldCBlPXRoaXMuX19kYXRhTGlua2VkUGF0aHNbYCR7SlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiaXRlbXMiLHRoaXMpfS4ke3R9YF07aWYoZSlyZXR1cm4gcGFyc2VJbnQoZS5zbGljZShgJHtKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJzZWxlY3RlZCIsdGhpcyl9LmAubGVuZ3RoKSwxMCl9ZGVzZWxlY3QodCl7bGV0IGU9dGhpcy5fX3NlbGVjdGVkTWFwLmdldCh0KTtpZihlPj0wKXtsZXQgbjt0aGlzLl9fc2VsZWN0ZWRNYXAuZGVsZXRlKHQpLHRoaXMubXVsdGkmJihuPXRoaXMuX19zZWxlY3RlZEluZGV4Rm9ySXRlbUluZGV4KGUpKSx0aGlzLl9fdXBkYXRlTGlua3MoKSx0aGlzLm11bHRpP3RoaXMuc3BsaWNlKEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoInNlbGVjdGVkIix0aGlzKSxuLDEpOnRoaXMuc2VsZWN0ZWQ9dGhpcy5zZWxlY3RlZEl0ZW09bnVsbH19ZGVzZWxlY3RJbmRleCh0KXt0aGlzLmRlc2VsZWN0KHRoaXMuaXRlbXNbdF0pfXNlbGVjdCh0KXt0aGlzLnNlbGVjdEluZGV4KHRoaXMuaXRlbXMuaW5kZXhPZih0KSl9c2VsZWN0SW5kZXgodCl7bGV0IGU9dGhpcy5pdGVtc1t0XTt0aGlzLmlzU2VsZWN0ZWQoZSk/dGhpcy50b2dnbGUmJnRoaXMuZGVzZWxlY3RJbmRleCh0KToodGhpcy5tdWx0aXx8dGhpcy5fX3NlbGVjdGVkTWFwLmNsZWFyKCksdGhpcy5fX3NlbGVjdGVkTWFwLnNldChlLHQpLHRoaXMuX191cGRhdGVMaW5rcygpLHRoaXMubXVsdGk/dGhpcy5wdXNoKEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoInNlbGVjdGVkIix0aGlzKSxlKTp0aGlzLnNlbGVjdGVkPXRoaXMuc2VsZWN0ZWRJdGVtPWUpfX19KSkoeWUpO2NsYXNzIG9vIGV4dGVuZHMgcm97c3RhdGljIGdldCBpcygpe3JldHVybiJhcnJheS1zZWxlY3RvciJ9c3RhdGljIGdldCB0ZW1wbGF0ZSgpe3JldHVybiBudWxsfX1jdXN0b21FbGVtZW50cy5kZWZpbmUob28uaXMsb28pOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dAogICAgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28KICAgIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpjb25zdCBhbz1uZXcgd247d2luZG93LlNoYWR5Q1NTfHwod2luZG93LlNoYWR5Q1NTPXtwcmVwYXJlVGVtcGxhdGUodCxlLG4pe30scHJlcGFyZVRlbXBsYXRlRG9tKHQsZSl7fSxwcmVwYXJlVGVtcGxhdGVTdHlsZXModCxlLG4pe30sc3R5bGVTdWJ0cmVlKHQsZSl7YW8ucHJvY2Vzc1N0eWxlcygpLEplKHQsZSl9LHN0eWxlRWxlbWVudCh0KXthby5wcm9jZXNzU3R5bGVzKCl9LHN0eWxlRG9jdW1lbnQodCl7YW8ucHJvY2Vzc1N0eWxlcygpLEplKGRvY3VtZW50LmJvZHksdCl9LGdldENvbXB1dGVkU3R5bGVWYWx1ZToodCxlKT0+UWUodCxlKSxmbHVzaEN1c3RvbVN0eWxlcygpe30sbmF0aXZlQ3NzOkFlLG5hdGl2ZVNoYWRvdzpTZSxjc3NCdWlsZDpFZSxkaXNhYmxlUnVudGltZTpDZX0pLHdpbmRvdy5TaGFkeUNTUy5DdXN0b21TdHlsZUludGVyZmFjZT1hbzsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KY29uc3Qgc289ImluY2x1ZGUiLGxvPXdpbmRvdy5TaGFkeUNTUy5DdXN0b21TdHlsZUludGVyZmFjZTtjbGFzcyBjbyBleHRlbmRzIEhUTUxFbGVtZW50e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9zdHlsZT1udWxsLGxvLmFkZEN1c3RvbVN0eWxlKHRoaXMpfWdldFN0eWxlKCl7aWYodGhpcy5fc3R5bGUpcmV0dXJuIHRoaXMuX3N0eWxlO2NvbnN0IHQ9dGhpcy5xdWVyeVNlbGVjdG9yKCJzdHlsZSIpO2lmKCF0KXJldHVybiBudWxsO3RoaXMuX3N0eWxlPXQ7Y29uc3QgZT10LmdldEF0dHJpYnV0ZShzbyk7cmV0dXJuIGUmJih0LnJlbW92ZUF0dHJpYnV0ZShzbyksdC50ZXh0Q29udGVudD0oZnVuY3Rpb24gbih0KXtsZXQgZT10LnRyaW0oKS5zcGxpdCgvXHMrLyksbj0iIjtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyluKz1xKGVbdF0pO3JldHVybiBufSkoZSkrdC50ZXh0Q29udGVudCksdGhpcy5vd25lckRvY3VtZW50IT09d2luZG93LmRvY3VtZW50JiZ3aW5kb3cuZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh0aGlzKSx0aGlzLl9zdHlsZX19Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCmxldCB1bzt3aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCJjdXN0b20tc3R5bGUiLGNvKSx1bz1Sci5fbXV0YWJsZVByb3BlcnR5Q2hhbmdlO2NvbnN0IGhvPXtwcm9wZXJ0aWVzOnttdXRhYmxlRGF0YTpCb29sZWFufSxfc2hvdWxkUHJvcGVydHlDaGFuZ2UodCxlLG4pe3JldHVybiB1byh0aGlzLHQsZSxuLHRoaXMubXV0YWJsZURhdGEpfX0scG89dHIoSFRNTEVsZW1lbnQpLnByb3RvdHlwZTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCnZhciBmbz1uZXcgU2V0O2NvbnN0IG1vPXtwcm9wZXJ0aWVzOntfcGFyZW50UmVzaXphYmxlOnt0eXBlOk9iamVjdCxvYnNlcnZlcjoiX3BhcmVudFJlc2l6YWJsZUNoYW5nZWQifSxfbm90aWZ5aW5nRGVzY2VuZGFudDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfX0sbGlzdGVuZXJzOnsiaXJvbi1yZXF1ZXN0LXJlc2l6ZS1ub3RpZmljYXRpb25zIjoiX29uSXJvblJlcXVlc3RSZXNpemVOb3RpZmljYXRpb25zIn0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuX2ludGVyZXN0ZWRSZXNpemFibGVzPVtdLHRoaXMuX2JvdW5kTm90aWZ5UmVzaXplPXRoaXMubm90aWZ5UmVzaXplLmJpbmQodGhpcyksdGhpcy5fYm91bmRPbkRlc2NlbmRhbnRJcm9uUmVzaXplPXRoaXMuX29uRGVzY2VuZGFudElyb25SZXNpemUuYmluZCh0aGlzKX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9yZXF1ZXN0UmVzaXplTm90aWZpY2F0aW9ucygpfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX3BhcmVudFJlc2l6YWJsZT90aGlzLl9wYXJlbnRSZXNpemFibGUuc3RvcFJlc2l6ZU5vdGlmaWNhdGlvbnNGb3IodGhpcyk6KGZvLmRlbGV0ZSh0aGlzKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLl9ib3VuZE5vdGlmeVJlc2l6ZSkpLHRoaXMuX3BhcmVudFJlc2l6YWJsZT1udWxsfSxub3RpZnlSZXNpemU6ZnVuY3Rpb24oKXt0aGlzLmlzQXR0YWNoZWQmJih0aGlzLl9pbnRlcmVzdGVkUmVzaXphYmxlcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0aGlzLnJlc2l6ZXJTaG91bGROb3RpZnkodCkmJnRoaXMuX25vdGlmeURlc2NlbmRhbnQodCl9KSx0aGlzKSx0aGlzLl9maXJlUmVzaXplKCkpfSxhc3NpZ25QYXJlbnRSZXNpemFibGU6ZnVuY3Rpb24odCl7dGhpcy5fcGFyZW50UmVzaXphYmxlJiZ0aGlzLl9wYXJlbnRSZXNpemFibGUuc3RvcFJlc2l6ZU5vdGlmaWNhdGlvbnNGb3IodGhpcyksdGhpcy5fcGFyZW50UmVzaXphYmxlPXQsdCYmLTE9PT10Ll9pbnRlcmVzdGVkUmVzaXphYmxlcy5pbmRleE9mKHRoaXMpJiYodC5faW50ZXJlc3RlZFJlc2l6YWJsZXMucHVzaCh0aGlzKSx0Ll9zdWJzY3JpYmVJcm9uUmVzaXplKHRoaXMpKX0sc3RvcFJlc2l6ZU5vdGlmaWNhdGlvbnNGb3I6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5faW50ZXJlc3RlZFJlc2l6YWJsZXMuaW5kZXhPZih0KTtlPi0xJiYodGhpcy5faW50ZXJlc3RlZFJlc2l6YWJsZXMuc3BsaWNlKGUsMSksdGhpcy5fdW5zdWJzY3JpYmVJcm9uUmVzaXplKHQpKX0sX3N1YnNjcmliZUlyb25SZXNpemU6ZnVuY3Rpb24odCl7dC5hZGRFdmVudExpc3RlbmVyKCJpcm9uLXJlc2l6ZSIsdGhpcy5fYm91bmRPbkRlc2NlbmRhbnRJcm9uUmVzaXplKX0sX3Vuc3Vic2NyaWJlSXJvblJlc2l6ZTpmdW5jdGlvbih0KXt0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImlyb24tcmVzaXplIix0aGlzLl9ib3VuZE9uRGVzY2VuZGFudElyb25SZXNpemUpfSxyZXNpemVyU2hvdWxkTm90aWZ5OmZ1bmN0aW9uKHQpe3JldHVybiEwfSxfb25EZXNjZW5kYW50SXJvblJlc2l6ZTpmdW5jdGlvbih0KXt0aGlzLl9ub3RpZnlpbmdEZXNjZW5kYW50P3Quc3RvcFByb3BhZ2F0aW9uKCk6bXx8dGhpcy5fZmlyZVJlc2l6ZSgpfSxfZmlyZVJlc2l6ZTpmdW5jdGlvbigpe3RoaXMuZmlyZSgiaXJvbi1yZXNpemUiLG51bGwse25vZGU6dGhpcyxidWJibGVzOiExfSl9LF9vbklyb25SZXF1ZXN0UmVzaXplTm90aWZpY2F0aW9uczpmdW5jdGlvbih0KXt2YXIgZT1xaSh0KS5yb290VGFyZ2V0O2UhPT10aGlzJiYoZS5hc3NpZ25QYXJlbnRSZXNpemFibGUodGhpcyksdGhpcy5fbm90aWZ5RGVzY2VuZGFudChlKSx0LnN0b3BQcm9wYWdhdGlvbigpKX0sX3BhcmVudFJlc2l6YWJsZUNoYW5nZWQ6ZnVuY3Rpb24odCl7dCYmd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdGhpcy5fYm91bmROb3RpZnlSZXNpemUpfSxfbm90aWZ5RGVzY2VuZGFudDpmdW5jdGlvbih0KXt0aGlzLmlzQXR0YWNoZWQmJih0aGlzLl9ub3RpZnlpbmdEZXNjZW5kYW50PSEwLHQubm90aWZ5UmVzaXplKCksdGhpcy5fbm90aWZ5aW5nRGVzY2VuZGFudD0hMSl9LF9yZXF1ZXN0UmVzaXplTm90aWZpY2F0aW9uczpmdW5jdGlvbigpe2lmKHRoaXMuaXNBdHRhY2hlZClpZigibG9hZGluZyI9PT1kb2N1bWVudC5yZWFkeVN0YXRlKXt2YXIgdD10aGlzLl9yZXF1ZXN0UmVzaXplTm90aWZpY2F0aW9ucy5iaW5kKHRoaXMpO2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInJlYWR5c3RhdGVjaGFuZ2UiLChmdW5jdGlvbiBlKCl7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVhZHlzdGF0ZWNoYW5nZSIsZSksdCgpfSkpfWVsc2UgdGhpcy5fZmluZFBhcmVudCgpLHRoaXMuX3BhcmVudFJlc2l6YWJsZT90aGlzLl9wYXJlbnRSZXNpemFibGUuX2ludGVyZXN0ZWRSZXNpemFibGVzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QhPT10aGlzJiZ0Ll9maW5kUGFyZW50KCl9KSx0aGlzKTooZm8uZm9yRWFjaCgoZnVuY3Rpb24odCl7dCE9PXRoaXMmJnQuX2ZpbmRQYXJlbnQoKX0pLHRoaXMpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMuX2JvdW5kTm90aWZ5UmVzaXplKSx0aGlzLm5vdGlmeVJlc2l6ZSgpKX0sX2ZpbmRQYXJlbnQ6ZnVuY3Rpb24oKXt0aGlzLmFzc2lnblBhcmVudFJlc2l6YWJsZShudWxsKSx0aGlzLmZpcmUoImlyb24tcmVxdWVzdC1yZXNpemUtbm90aWZpY2F0aW9ucyIsbnVsbCx7bm9kZTp0aGlzLGJ1YmJsZXM6ITAsY2FuY2VsYWJsZTohMH0pLHRoaXMuX3BhcmVudFJlc2l6YWJsZT9mby5kZWxldGUodGhpcyk6Zm8uYWRkKHRoaXMpfX07dmFyIGdvPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLElyb25SZXNpemFibGVCZWhhdmlvcjptb30pOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi9Jcih7X3RlbXBsYXRlOl9lYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogdmFyKC0taXJvbi1jb2xsYXBzZS10cmFuc2l0aW9uLWR1cmF0aW9uLCAzMDBtcyk7CiAgICAgICAgLyogU2FmYXJpIDEwIG5lZWRzIHRoaXMgcHJvcGVydHkgcHJlZml4ZWQgdG8gY29ycmVjdGx5IGFwcGx5IHRoZSBjdXN0b20gcHJvcGVydHkgKi8KICAgICAgICAtd2Via2l0LXRyYW5zaXRpb24tZHVyYXRpb246IHZhcigtLWlyb24tY29sbGFwc2UtdHJhbnNpdGlvbi1kdXJhdGlvbiwgMzAwbXMpOwogICAgICAgIG92ZXJmbG93OiB2aXNpYmxlOwogICAgICB9CgogICAgICA6aG9zdCguaXJvbi1jb2xsYXBzZS1jbG9zZWQpIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CgogICAgICA6aG9zdCg6bm90KC5pcm9uLWNvbGxhcHNlLW9wZW5lZCkpIHsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxzbG90Pjwvc2xvdD4KYCxpczoiaXJvbi1jb2xsYXBzZSIsYmVoYXZpb3JzOlttb10scHJvcGVydGllczp7aG9yaXpvbnRhbDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG9ic2VydmVyOiJfaG9yaXpvbnRhbENoYW5nZWQifSxvcGVuZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9vcGVuZWRDaGFuZ2VkIn0sdHJhbnNpdGlvbmluZzp7dHlwZTpCb29sZWFuLG5vdGlmeTohMCxyZWFkT25seTohMH0sbm9BbmltYXRpb246e3R5cGU6Qm9vbGVhbn0sX2Rlc2lyZWRTaXplOnt0eXBlOlN0cmluZyx2YWx1ZToiIn19LGdldCBkaW1lbnNpb24oKXtyZXR1cm4gdGhpcy5ob3Jpem9udGFsPyJ3aWR0aCI6ImhlaWdodCJ9LGdldCBfZGltZW5zaW9uTWF4KCl7cmV0dXJuIHRoaXMuaG9yaXpvbnRhbD8ibWF4V2lkdGgiOiJtYXhIZWlnaHQifSxnZXQgX2RpbWVuc2lvbk1heENzcygpe3JldHVybiB0aGlzLmhvcml6b250YWw/Im1heC13aWR0aCI6Im1heC1oZWlnaHQifSxob3N0QXR0cmlidXRlczp7cm9sZToiZ3JvdXAiLCJhcmlhLWhpZGRlbiI6InRydWUifSxsaXN0ZW5lcnM6e3RyYW5zaXRpb25lbmQ6Il9vblRyYW5zaXRpb25FbmQifSx0b2dnbGU6ZnVuY3Rpb24oKXt0aGlzLm9wZW5lZD0hdGhpcy5vcGVuZWR9LHNob3c6ZnVuY3Rpb24oKXt0aGlzLm9wZW5lZD0hMH0saGlkZTpmdW5jdGlvbigpe3RoaXMub3BlbmVkPSExfSx1cGRhdGVTaXplOmZ1bmN0aW9uKHQsZSl7dD0iYXV0byI9PT10PyIiOnQ7dmFyIG49ZSYmIXRoaXMubm9BbmltYXRpb24mJnRoaXMuaXNBdHRhY2hlZCYmdGhpcy5fZGVzaXJlZFNpemUhPT10O2lmKHRoaXMuX2Rlc2lyZWRTaXplPXQsdGhpcy5fdXBkYXRlVHJhbnNpdGlvbighMSksbil7dmFyIGk9dGhpcy5fY2FsY1NpemUoKTsiIj09PXQmJih0aGlzLnN0eWxlW3RoaXMuX2RpbWVuc2lvbk1heF09IiIsdD10aGlzLl9jYWxjU2l6ZSgpKSx0aGlzLnN0eWxlW3RoaXMuX2RpbWVuc2lvbk1heF09aSx0aGlzLnNjcm9sbFRvcD10aGlzLnNjcm9sbFRvcCx0aGlzLl91cGRhdGVUcmFuc2l0aW9uKCEwKSxuPXQhPT1pfXRoaXMuc3R5bGVbdGhpcy5fZGltZW5zaW9uTWF4XT10LG58fHRoaXMuX3RyYW5zaXRpb25FbmQoKX0sZW5hYmxlVHJhbnNpdGlvbjpmdW5jdGlvbih0KXtwby5fd2FybigiYGVuYWJsZVRyYW5zaXRpb24oKWAgaXMgZGVwcmVjYXRlZCwgdXNlIGBub0FuaW1hdGlvbmAgaW5zdGVhZC4iKSx0aGlzLm5vQW5pbWF0aW9uPSF0fSxfdXBkYXRlVHJhbnNpdGlvbjpmdW5jdGlvbih0KXt0aGlzLnN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbj10JiYhdGhpcy5ub0FuaW1hdGlvbj8iIjoiMHMifSxfaG9yaXpvbnRhbENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnRyYW5zaXRpb25Qcm9wZXJ0eT10aGlzLl9kaW1lbnNpb25NYXhDc3MsdGhpcy5zdHlsZVsibWF4V2lkdGgiPT09dGhpcy5fZGltZW5zaW9uTWF4PyJtYXhIZWlnaHQiOiJtYXhXaWR0aCJdPSIiLHRoaXMudXBkYXRlU2l6ZSh0aGlzLm9wZW5lZD8iYXV0byI6IjBweCIsITEpfSxfb3BlbmVkQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsIXRoaXMub3BlbmVkKSx0aGlzLl9zZXRUcmFuc2l0aW9uaW5nKCEwKSx0aGlzLnRvZ2dsZUNsYXNzKCJpcm9uLWNvbGxhcHNlLWNsb3NlZCIsITEpLHRoaXMudG9nZ2xlQ2xhc3MoImlyb24tY29sbGFwc2Utb3BlbmVkIiwhMSksdGhpcy51cGRhdGVTaXplKHRoaXMub3BlbmVkPyJhdXRvIjoiMHB4IiwhMCksdGhpcy5vcGVuZWQmJnRoaXMuZm9jdXMoKX0sX3RyYW5zaXRpb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLnN0eWxlW3RoaXMuX2RpbWVuc2lvbk1heF09dGhpcy5fZGVzaXJlZFNpemUsdGhpcy50b2dnbGVDbGFzcygiaXJvbi1jb2xsYXBzZS1jbG9zZWQiLCF0aGlzLm9wZW5lZCksdGhpcy50b2dnbGVDbGFzcygiaXJvbi1jb2xsYXBzZS1vcGVuZWQiLHRoaXMub3BlbmVkKSx0aGlzLl91cGRhdGVUcmFuc2l0aW9uKCExKSx0aGlzLm5vdGlmeVJlc2l6ZSgpLHRoaXMuX3NldFRyYW5zaXRpb25pbmcoITEpfSxfb25UcmFuc2l0aW9uRW5kOmZ1bmN0aW9uKHQpe3FpKHQpLnJvb3RUYXJnZXQ9PT10aGlzJiZ0aGlzLl90cmFuc2l0aW9uRW5kKCl9LF9jYWxjU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW3RoaXMuZGltZW5zaW9uXSsicHgifX0pOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KY29uc3QgX289X2VgCi8qIE1vc3QgY29tbW9uIHVzZWQgZmxleCBzdHlsZXMqLwo8ZG9tLW1vZHVsZSBpZD0iaXJvbi1mbGV4Ij4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIC5sYXlvdXQuaG9yaXpvbnRhbCwKICAgICAgLmxheW91dC52ZXJ0aWNhbCB7CiAgICAgICAgZGlzcGxheTogLW1zLWZsZXhib3g7CiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1mbGV4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuaW5saW5lIHsKICAgICAgICBkaXNwbGF5OiAtbXMtaW5saW5lLWZsZXhib3g7CiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1pbmxpbmUtZmxleDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgfQoKICAgICAgLmxheW91dC5ob3Jpem9udGFsIHsKICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICAtd2Via2l0LWZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgfQoKICAgICAgLmxheW91dC52ZXJ0aWNhbCB7CiAgICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgLXdlYmtpdC1mbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIH0KCiAgICAgIC5sYXlvdXQud3JhcCB7CiAgICAgICAgLW1zLWZsZXgtd3JhcDogd3JhcDsKICAgICAgICAtd2Via2l0LWZsZXgtd3JhcDogd3JhcDsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQubm8td3JhcCB7CiAgICAgICAgLW1zLWZsZXgtd3JhcDogbm93cmFwOwogICAgICAgIC13ZWJraXQtZmxleC13cmFwOiBub3dyYXA7CiAgICAgICAgZmxleC13cmFwOiBub3dyYXA7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuY2VudGVyLAogICAgICAubGF5b3V0LmNlbnRlci1jZW50ZXIgewogICAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuY2VudGVyLWp1c3RpZmllZCwKICAgICAgLmxheW91dC5jZW50ZXItY2VudGVyIHsKICAgICAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfQoKICAgICAgLmZsZXggewogICAgICAgIC1tcy1mbGV4OiAxIDEgMC4wMDAwMDAwMDFweDsKICAgICAgICAtd2Via2l0LWZsZXg6IDE7CiAgICAgICAgZmxleDogMTsKICAgICAgICAtd2Via2l0LWZsZXgtYmFzaXM6IDAuMDAwMDAwMDAxcHg7CiAgICAgICAgZmxleC1iYXNpczogMC4wMDAwMDAwMDFweDsKICAgICAgfQoKICAgICAgLmZsZXgtYXV0byB7CiAgICAgICAgLW1zLWZsZXg6IDEgMSBhdXRvOwogICAgICAgIC13ZWJraXQtZmxleDogMSAxIGF1dG87CiAgICAgICAgZmxleDogMSAxIGF1dG87CiAgICAgIH0KCiAgICAgIC5mbGV4LW5vbmUgewogICAgICAgIC1tcy1mbGV4OiBub25lOwogICAgICAgIC13ZWJraXQtZmxleDogbm9uZTsKICAgICAgICBmbGV4OiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KLyogQmFzaWMgZmxleGJveCByZXZlcnNlIHN0eWxlcyAqLwo8ZG9tLW1vZHVsZSBpZD0iaXJvbi1mbGV4LXJldmVyc2UiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgLmxheW91dC5ob3Jpem9udGFsLXJldmVyc2UsCiAgICAgIC5sYXlvdXQudmVydGljYWwtcmV2ZXJzZSB7CiAgICAgICAgZGlzcGxheTogLW1zLWZsZXhib3g7CiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1mbGV4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuaG9yaXpvbnRhbC1yZXZlcnNlIHsKICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOwogICAgICAgIC13ZWJraXQtZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTsKICAgICAgfQoKICAgICAgLmxheW91dC52ZXJ0aWNhbC1yZXZlcnNlIHsKICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlOwogICAgICAgIC13ZWJraXQtZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlOwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTsKICAgICAgfQoKICAgICAgLmxheW91dC53cmFwLXJldmVyc2UgewogICAgICAgIC1tcy1mbGV4LXdyYXA6IHdyYXAtcmV2ZXJzZTsKICAgICAgICAtd2Via2l0LWZsZXgtd3JhcDogd3JhcC1yZXZlcnNlOwogICAgICAgIGZsZXgtd3JhcDogd3JhcC1yZXZlcnNlOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KLyogRmxleGJveCBhbGlnbm1lbnQgKi8KPGRvbS1tb2R1bGUgaWQ9Imlyb24tZmxleC1hbGlnbm1lbnQiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgLyoqCiAgICAgICAqIEFsaWdubWVudCBpbiBjcm9zcyBheGlzLgogICAgICAgKi8KICAgICAgLmxheW91dC5zdGFydCB7CiAgICAgICAgLW1zLWZsZXgtYWxpZ246IHN0YXJ0OwogICAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7CiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuY2VudGVyLAogICAgICAubGF5b3V0LmNlbnRlci1jZW50ZXIgewogICAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuZW5kIHsKICAgICAgICAtbXMtZmxleC1hbGlnbjogZW5kOwogICAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGZsZXgtZW5kOwogICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDsKICAgICAgfQoKICAgICAgLmxheW91dC5iYXNlbGluZSB7CiAgICAgICAgLW1zLWZsZXgtYWxpZ246IGJhc2VsaW5lOwogICAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGJhc2VsaW5lOwogICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIEFsaWdubWVudCBpbiBtYWluIGF4aXMuCiAgICAgICAqLwogICAgICAubGF5b3V0LnN0YXJ0LWp1c3RpZmllZCB7CiAgICAgICAgLW1zLWZsZXgtcGFjazogc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgICB9CgogICAgICAubGF5b3V0LmNlbnRlci1qdXN0aWZpZWQsCiAgICAgIC5sYXlvdXQuY2VudGVyLWNlbnRlciB7CiAgICAgICAgLW1zLWZsZXgtcGFjazogY2VudGVyOwogICAgICAgIC13ZWJraXQtanVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuZW5kLWp1c3RpZmllZCB7CiAgICAgICAgLW1zLWZsZXgtcGFjazogZW5kOwogICAgICAgIC13ZWJraXQtanVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICB9CgogICAgICAubGF5b3V0LmFyb3VuZC1qdXN0aWZpZWQgewogICAgICAgIC1tcy1mbGV4LXBhY2s6IGRpc3RyaWJ1dGU7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsKICAgICAgfQoKICAgICAgLmxheW91dC5qdXN0aWZpZWQgewogICAgICAgIC1tcy1mbGV4LXBhY2s6IGp1c3RpZnk7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICB9CgogICAgICAvKioKICAgICAgICogU2VsZiBhbGlnbm1lbnQuCiAgICAgICAqLwogICAgICAuc2VsZi1zdGFydCB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1zZWxmOiBmbGV4LXN0YXJ0OwogICAgICAgIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7CiAgICAgIH0KCiAgICAgIC5zZWxmLWNlbnRlciB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGNlbnRlcjsKICAgICAgICAtd2Via2l0LWFsaWduLXNlbGY6IGNlbnRlcjsKICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5zZWxmLWVuZCB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGZsZXgtZW5kOwogICAgICAgIC13ZWJraXQtYWxpZ24tc2VsZjogZmxleC1lbmQ7CiAgICAgICAgYWxpZ24tc2VsZjogZmxleC1lbmQ7CiAgICAgIH0KCiAgICAgIC5zZWxmLXN0cmV0Y2ggewogICAgICAgIC1tcy1hbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICAgIC13ZWJraXQtYWxpZ24tc2VsZjogc3RyZXRjaDsKICAgICAgICBhbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICB9CgogICAgICAuc2VsZi1iYXNlbGluZSB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGJhc2VsaW5lOwogICAgICAgIC13ZWJraXQtYWxpZ24tc2VsZjogYmFzZWxpbmU7CiAgICAgICAgYWxpZ24tc2VsZjogYmFzZWxpbmU7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBtdWx0aS1saW5lIGFsaWdubWVudCBpbiBtYWluIGF4aXMuCiAgICAgICAqLwogICAgICAubGF5b3V0LnN0YXJ0LWFsaWduZWQgewogICAgICAgIC1tcy1mbGV4LWxpbmUtcGFjazogc3RhcnQ7ICAvKiBJRTEwICovCiAgICAgICAgLW1zLWFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgICAgIGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuZW5kLWFsaWduZWQgewogICAgICAgIC1tcy1mbGV4LWxpbmUtcGFjazogZW5kOyAgLyogSUUxMCAqLwogICAgICAgIC1tcy1hbGlnbi1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgICAtd2Via2l0LWFsaWduLWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgIGFsaWduLWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICB9CgogICAgICAubGF5b3V0LmNlbnRlci1hbGlnbmVkIHsKICAgICAgICAtbXMtZmxleC1saW5lLXBhY2s6IGNlbnRlcjsgIC8qIElFMTAgKi8KICAgICAgICAtbXMtYWxpZ24tY29udGVudDogY2VudGVyOwogICAgICAgIC13ZWJraXQtYWxpZ24tY29udGVudDogY2VudGVyOwogICAgICAgIGFsaWduLWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfQoKICAgICAgLmxheW91dC5iZXR3ZWVuLWFsaWduZWQgewogICAgICAgIC1tcy1mbGV4LWxpbmUtcGFjazoganVzdGlmeTsgIC8qIElFMTAgKi8KICAgICAgICAtbXMtYWxpZ24tY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICAtd2Via2l0LWFsaWduLWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgYWxpZ24tY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgfQoKICAgICAgLmxheW91dC5hcm91bmQtYWxpZ25lZCB7CiAgICAgICAgLW1zLWZsZXgtbGluZS1wYWNrOiBkaXN0cmlidXRlOyAgLyogSUUxMCAqLwogICAgICAgIC1tcy1hbGlnbi1jb250ZW50OiBzcGFjZS1hcm91bmQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1jb250ZW50OiBzcGFjZS1hcm91bmQ7CiAgICAgICAgYWxpZ24tY29udGVudDogc3BhY2UtYXJvdW5kOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KLyogTm9uLWZsZXhib3ggcG9zaXRpb25pbmcgaGVscGVyIHN0eWxlcyAqLwo8ZG9tLW1vZHVsZSBpZD0iaXJvbi1mbGV4LWZhY3RvcnMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgLmZsZXgsCiAgICAgIC5mbGV4LTEgewogICAgICAgIC1tcy1mbGV4OiAxIDEgMC4wMDAwMDAwMDFweDsKICAgICAgICAtd2Via2l0LWZsZXg6IDE7CiAgICAgICAgZmxleDogMTsKICAgICAgICAtd2Via2l0LWZsZXgtYmFzaXM6IDAuMDAwMDAwMDAxcHg7CiAgICAgICAgZmxleC1iYXNpczogMC4wMDAwMDAwMDFweDsKICAgICAgfQoKICAgICAgLmZsZXgtMiB7CiAgICAgICAgLW1zLWZsZXg6IDI7CiAgICAgICAgLXdlYmtpdC1mbGV4OiAyOwogICAgICAgIGZsZXg6IDI7CiAgICAgIH0KCiAgICAgIC5mbGV4LTMgewogICAgICAgIC1tcy1mbGV4OiAzOwogICAgICAgIC13ZWJraXQtZmxleDogMzsKICAgICAgICBmbGV4OiAzOwogICAgICB9CgogICAgICAuZmxleC00IHsKICAgICAgICAtbXMtZmxleDogNDsKICAgICAgICAtd2Via2l0LWZsZXg6IDQ7CiAgICAgICAgZmxleDogNDsKICAgICAgfQoKICAgICAgLmZsZXgtNSB7CiAgICAgICAgLW1zLWZsZXg6IDU7CiAgICAgICAgLXdlYmtpdC1mbGV4OiA1OwogICAgICAgIGZsZXg6IDU7CiAgICAgIH0KCiAgICAgIC5mbGV4LTYgewogICAgICAgIC1tcy1mbGV4OiA2OwogICAgICAgIC13ZWJraXQtZmxleDogNjsKICAgICAgICBmbGV4OiA2OwogICAgICB9CgogICAgICAuZmxleC03IHsKICAgICAgICAtbXMtZmxleDogNzsKICAgICAgICAtd2Via2l0LWZsZXg6IDc7CiAgICAgICAgZmxleDogNzsKICAgICAgfQoKICAgICAgLmZsZXgtOCB7CiAgICAgICAgLW1zLWZsZXg6IDg7CiAgICAgICAgLXdlYmtpdC1mbGV4OiA4OwogICAgICAgIGZsZXg6IDg7CiAgICAgIH0KCiAgICAgIC5mbGV4LTkgewogICAgICAgIC1tcy1mbGV4OiA5OwogICAgICAgIC13ZWJraXQtZmxleDogOTsKICAgICAgICBmbGV4OiA5OwogICAgICB9CgogICAgICAuZmxleC0xMCB7CiAgICAgICAgLW1zLWZsZXg6IDEwOwogICAgICAgIC13ZWJraXQtZmxleDogMTA7CiAgICAgICAgZmxleDogMTA7CiAgICAgIH0KCiAgICAgIC5mbGV4LTExIHsKICAgICAgICAtbXMtZmxleDogMTE7CiAgICAgICAgLXdlYmtpdC1mbGV4OiAxMTsKICAgICAgICBmbGV4OiAxMTsKICAgICAgfQoKICAgICAgLmZsZXgtMTIgewogICAgICAgIC1tcy1mbGV4OiAxMjsKICAgICAgICAtd2Via2l0LWZsZXg6IDEyOwogICAgICAgIGZsZXg6IDEyOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KPGRvbS1tb2R1bGUgaWQ9Imlyb24tcG9zaXRpb25pbmciPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgLmJsb2NrIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgW2hpZGRlbl0gewogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgLmludmlzaWJsZSB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIC5yZWxhdGl2ZSB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAuZml0IHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICB9CgogICAgICBib2R5LmZ1bGxibGVlZCB7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIGhlaWdodDogMTAwdmg7CiAgICAgIH0KCiAgICAgIC5zY3JvbGwgewogICAgICAgIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgfQoKICAgICAgLyogZml4ZWQgcG9zaXRpb24gKi8KICAgICAgLmZpeGVkLWJvdHRvbSwKICAgICAgLmZpeGVkLWxlZnQsCiAgICAgIC5maXhlZC1yaWdodCwKICAgICAgLmZpeGVkLXRvcCB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICB9CgogICAgICAuZml4ZWQtdG9wIHsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgfQoKICAgICAgLmZpeGVkLXJpZ2h0IHsKICAgICAgICB0b3A6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICB9CgogICAgICAuZml4ZWQtYm90dG9tIHsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgfQoKICAgICAgLmZpeGVkLWxlZnQgewogICAgICAgIHRvcDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+CmA7X28uc2V0QXR0cmlidXRlKCJzdHlsZSIsImRpc3BsYXk6IG5vbmU7IiksZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChfby5jb250ZW50KTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCmNvbnN0IHlvPV9lYAo8Y3VzdG9tLXN0eWxlPgogIDxzdHlsZSBpcz0iY3VzdG9tLXN0eWxlIj4KICAgIFtoaWRkZW5dIHsKICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgfQogIDwvc3R5bGU+CjwvY3VzdG9tLXN0eWxlPgo8Y3VzdG9tLXN0eWxlPgogIDxzdHlsZSBpcz0iY3VzdG9tLXN0eWxlIj4KICAgIGh0bWwgewoKICAgICAgLS1sYXlvdXQ6IHsKICAgICAgICBkaXNwbGF5OiAtbXMtZmxleGJveDsKICAgICAgICBkaXNwbGF5OiAtd2Via2l0LWZsZXg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWlubGluZTogewogICAgICAgIGRpc3BsYXk6IC1tcy1pbmxpbmUtZmxleGJveDsKICAgICAgICBkaXNwbGF5OiAtd2Via2l0LWlubGluZS1mbGV4OwogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtaG9yaXpvbnRhbDogewogICAgICAgIEBhcHBseSAtLWxheW91dDsKCiAgICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgLXdlYmtpdC1mbGV4LWRpcmVjdGlvbjogcm93OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgIH07CgogICAgICAtLWxheW91dC1ob3Jpem9udGFsLXJldmVyc2U6IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQ7CgogICAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7CiAgICAgICAgLXdlYmtpdC1mbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtdmVydGljYWw6IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQ7CgogICAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIC13ZWJraXQtZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtdmVydGljYWwtcmV2ZXJzZTogewogICAgICAgIEBhcHBseSAtLWxheW91dDsKCiAgICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTsKICAgICAgICAtd2Via2l0LWZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7CiAgICAgIH07CgogICAgICAtLWxheW91dC13cmFwOiB7CiAgICAgICAgLW1zLWZsZXgtd3JhcDogd3JhcDsKICAgICAgICAtd2Via2l0LWZsZXgtd3JhcDogd3JhcDsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIH07CgogICAgICAtLWxheW91dC13cmFwLXJldmVyc2U6IHsKICAgICAgICAtbXMtZmxleC13cmFwOiB3cmFwLXJldmVyc2U7CiAgICAgICAgLXdlYmtpdC1mbGV4LXdyYXA6IHdyYXAtcmV2ZXJzZTsKICAgICAgICBmbGV4LXdyYXA6IHdyYXAtcmV2ZXJzZTsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtYXV0bzogewogICAgICAgIC1tcy1mbGV4OiAxIDEgYXV0bzsKICAgICAgICAtd2Via2l0LWZsZXg6IDEgMSBhdXRvOwogICAgICAgIGZsZXg6IDEgMSBhdXRvOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleC1ub25lOiB7CiAgICAgICAgLW1zLWZsZXg6IG5vbmU7CiAgICAgICAgLXdlYmtpdC1mbGV4OiBub25lOwogICAgICAgIGZsZXg6IG5vbmU7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4OiB7CiAgICAgICAgLW1zLWZsZXg6IDEgMSAwLjAwMDAwMDAwMXB4OwogICAgICAgIC13ZWJraXQtZmxleDogMTsKICAgICAgICBmbGV4OiAxOwogICAgICAgIC13ZWJraXQtZmxleC1iYXNpczogMC4wMDAwMDAwMDFweDsKICAgICAgICBmbGV4LWJhc2lzOiAwLjAwMDAwMDAwMXB4OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleC0yOiB7CiAgICAgICAgLW1zLWZsZXg6IDI7CiAgICAgICAgLXdlYmtpdC1mbGV4OiAyOwogICAgICAgIGZsZXg6IDI7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTM6IHsKICAgICAgICAtbXMtZmxleDogMzsKICAgICAgICAtd2Via2l0LWZsZXg6IDM7CiAgICAgICAgZmxleDogMzsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtNDogewogICAgICAgIC1tcy1mbGV4OiA0OwogICAgICAgIC13ZWJraXQtZmxleDogNDsKICAgICAgICBmbGV4OiA0OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleC01OiB7CiAgICAgICAgLW1zLWZsZXg6IDU7CiAgICAgICAgLXdlYmtpdC1mbGV4OiA1OwogICAgICAgIGZsZXg6IDU7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTY6IHsKICAgICAgICAtbXMtZmxleDogNjsKICAgICAgICAtd2Via2l0LWZsZXg6IDY7CiAgICAgICAgZmxleDogNjsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtNzogewogICAgICAgIC1tcy1mbGV4OiA3OwogICAgICAgIC13ZWJraXQtZmxleDogNzsKICAgICAgICBmbGV4OiA3OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleC04OiB7CiAgICAgICAgLW1zLWZsZXg6IDg7CiAgICAgICAgLXdlYmtpdC1mbGV4OiA4OwogICAgICAgIGZsZXg6IDg7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTk6IHsKICAgICAgICAtbXMtZmxleDogOTsKICAgICAgICAtd2Via2l0LWZsZXg6IDk7CiAgICAgICAgZmxleDogOTsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtMTA6IHsKICAgICAgICAtbXMtZmxleDogMTA7CiAgICAgICAgLXdlYmtpdC1mbGV4OiAxMDsKICAgICAgICBmbGV4OiAxMDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtMTE6IHsKICAgICAgICAtbXMtZmxleDogMTE7CiAgICAgICAgLXdlYmtpdC1mbGV4OiAxMTsKICAgICAgICBmbGV4OiAxMTsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtMTI6IHsKICAgICAgICAtbXMtZmxleDogMTI7CiAgICAgICAgLXdlYmtpdC1mbGV4OiAxMjsKICAgICAgICBmbGV4OiAxMjsKICAgICAgfTsKCiAgICAgIC8qIGFsaWdubWVudCBpbiBjcm9zcyBheGlzICovCgogICAgICAtLWxheW91dC1zdGFydDogewogICAgICAgIC1tcy1mbGV4LWFsaWduOiBzdGFydDsKICAgICAgICAtd2Via2l0LWFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0OwogICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtY2VudGVyOiB7CiAgICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjsKICAgICAgICAtd2Via2l0LWFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWVuZDogewogICAgICAgIC1tcy1mbGV4LWFsaWduOiBlbmQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1pdGVtczogZmxleC1lbmQ7CiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtYmFzZWxpbmU6IHsKICAgICAgICAtbXMtZmxleC1hbGlnbjogYmFzZWxpbmU7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1pdGVtczogYmFzZWxpbmU7CiAgICAgICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lOwogICAgICB9OwoKICAgICAgLyogYWxpZ25tZW50IGluIG1haW4gYXhpcyAqLwoKICAgICAgLS1sYXlvdXQtc3RhcnQtanVzdGlmaWVkOiB7CiAgICAgICAgLW1zLWZsZXgtcGFjazogc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtY2VudGVyLWp1c3RpZmllZDogewogICAgICAgIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjsKICAgICAgICAtd2Via2l0LWp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZW5kLWp1c3RpZmllZDogewogICAgICAgIC1tcy1mbGV4LXBhY2s6IGVuZDsKICAgICAgICAtd2Via2l0LWp1c3RpZnktY29udGVudDogZmxleC1lbmQ7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWFyb3VuZC1qdXN0aWZpZWQ6IHsKICAgICAgICAtbXMtZmxleC1wYWNrOiBkaXN0cmlidXRlOwogICAgICAgIC13ZWJraXQtanVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7CiAgICAgIH07CgogICAgICAtLWxheW91dC1qdXN0aWZpZWQ6IHsKICAgICAgICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5OwogICAgICAgIC13ZWJraXQtanVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWNlbnRlci1jZW50ZXI6IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXItanVzdGlmaWVkOwogICAgICB9OwoKICAgICAgLyogc2VsZiBhbGlnbm1lbnQgKi8KCiAgICAgIC0tbGF5b3V0LXNlbGYtc3RhcnQ6IHsKICAgICAgICAtbXMtYWxpZ24tc2VsZjogZmxleC1zdGFydDsKICAgICAgICAtd2Via2l0LWFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7CiAgICAgICAgYWxpZ24tc2VsZjogZmxleC1zdGFydDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LXNlbGYtY2VudGVyOiB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGNlbnRlcjsKICAgICAgICAtd2Via2l0LWFsaWduLXNlbGY6IGNlbnRlcjsKICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7CiAgICAgIH07CgogICAgICAtLWxheW91dC1zZWxmLWVuZDogewogICAgICAgIC1tcy1hbGlnbi1zZWxmOiBmbGV4LWVuZDsKICAgICAgICAtd2Via2l0LWFsaWduLXNlbGY6IGZsZXgtZW5kOwogICAgICAgIGFsaWduLXNlbGY6IGZsZXgtZW5kOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtc2VsZi1zdHJldGNoOiB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IHN0cmV0Y2g7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICAgIGFsaWduLXNlbGY6IHN0cmV0Y2g7CiAgICAgIH07CgogICAgICAtLWxheW91dC1zZWxmLWJhc2VsaW5lOiB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGJhc2VsaW5lOwogICAgICAgIC13ZWJraXQtYWxpZ24tc2VsZjogYmFzZWxpbmU7CiAgICAgICAgYWxpZ24tc2VsZjogYmFzZWxpbmU7CiAgICAgIH07CgogICAgICAvKiBtdWx0aS1saW5lIGFsaWdubWVudCBpbiBtYWluIGF4aXMgKi8KCiAgICAgIC0tbGF5b3V0LXN0YXJ0LWFsaWduZWQ6IHsKICAgICAgICAtbXMtZmxleC1saW5lLXBhY2s6IHN0YXJ0OyAgLyogSUUxMCAqLwogICAgICAgIC1tcy1hbGlnbi1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgICAgIC13ZWJraXQtYWxpZ24tY29udGVudDogZmxleC1zdGFydDsKICAgICAgICBhbGlnbi1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZW5kLWFsaWduZWQ6IHsKICAgICAgICAtbXMtZmxleC1saW5lLXBhY2s6IGVuZDsgIC8qIElFMTAgKi8KICAgICAgICAtbXMtYWxpZ24tY29udGVudDogZmxleC1lbmQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgICBhbGlnbi1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWNlbnRlci1hbGlnbmVkOiB7CiAgICAgICAgLW1zLWZsZXgtbGluZS1wYWNrOiBjZW50ZXI7ICAvKiBJRTEwICovCiAgICAgICAgLW1zLWFsaWduLWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICAtd2Via2l0LWFsaWduLWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBhbGlnbi1jb250ZW50OiBjZW50ZXI7CiAgICAgIH07CgogICAgICAtLWxheW91dC1iZXR3ZWVuLWFsaWduZWQ6IHsKICAgICAgICAtbXMtZmxleC1saW5lLXBhY2s6IGp1c3RpZnk7ICAvKiBJRTEwICovCiAgICAgICAgLW1zLWFsaWduLWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgLXdlYmtpdC1hbGlnbi1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIGFsaWduLWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgIH07CgogICAgICAtLWxheW91dC1hcm91bmQtYWxpZ25lZDogewogICAgICAgIC1tcy1mbGV4LWxpbmUtcGFjazogZGlzdHJpYnV0ZTsgIC8qIElFMTAgKi8KICAgICAgICAtbXMtYWxpZ24tY29udGVudDogc3BhY2UtYXJvdW5kOwogICAgICAgIC13ZWJraXQtYWxpZ24tY29udGVudDogc3BhY2UtYXJvdW5kOwogICAgICAgIGFsaWduLWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsKICAgICAgfTsKCiAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgICAgICAgICAgICBPdGhlciBMYXlvdXQKICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCiAgICAgIC0tbGF5b3V0LWJsb2NrOiB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH07CgogICAgICAtLWxheW91dC1pbnZpc2libGU6IHsKICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW4gIWltcG9ydGFudDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LXJlbGF0aXZlOiB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZml0OiB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LXNjcm9sbDogewogICAgICAgIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZ1bGxibGVlZDogewogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBoZWlnaHQ6IDEwMHZoOwogICAgICB9OwoKICAgICAgLyogZml4ZWQgcG9zaXRpb24gKi8KCiAgICAgIC0tbGF5b3V0LWZpeGVkLXRvcDogewogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZpeGVkLXJpZ2h0OiB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIHRvcDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgIH07CgogICAgICAtLWxheW91dC1maXhlZC1ib3R0b206IHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgIH07CgogICAgICAtLWxheW91dC1maXhlZC1sZWZ0OiB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIHRvcDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgfTsKCiAgICB9CiAgPC9zdHlsZT4KPC9jdXN0b20tc3R5bGU+YDt5by5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZGlzcGxheTogbm9uZTsiKSxkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHlvLmNvbnRlbnQpO3ZhciB2bz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO3ZvLnRleHRDb250ZW50PSJbaGlkZGVuXSB7IGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgfSIsZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh2byk7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpjbGFzcyBib3tjb25zdHJ1Y3Rvcih0KXtib1siICJdKHQpLHRoaXMudHlwZT10JiZ0LnR5cGV8fCJkZWZhdWx0Iix0aGlzLmtleT10JiZ0LmtleSx0JiYidmFsdWUiaW4gdCYmKHRoaXMudmFsdWU9dC52YWx1ZSl9Z2V0IHZhbHVlKCl7dmFyIHQ9dGhpcy50eXBlLGU9dGhpcy5rZXk7aWYodCYmZSlyZXR1cm4gYm8udHlwZXNbdF0mJmJvLnR5cGVzW3RdW2VdfXNldCB2YWx1ZSh0KXt2YXIgZT10aGlzLnR5cGUsbj10aGlzLmtleTtlJiZuJiYoZT1iby50eXBlc1tlXT1iby50eXBlc1tlXXx8e30sbnVsbD09dD9kZWxldGUgZVtuXTplW25dPXQpfWdldCBsaXN0KCl7aWYodGhpcy50eXBlKXt2YXIgdD1iby50eXBlc1t0aGlzLnR5cGVdO3JldHVybiB0P09iamVjdC5rZXlzKHQpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHhvW3RoaXMudHlwZV1bdF19KSx0aGlzKTpbXX19YnlLZXkodCl7cmV0dXJuIHRoaXMua2V5PXQsdGhpcy52YWx1ZX19Ym9bIiAiXT1mdW5jdGlvbigpe30sYm8udHlwZXM9e307dmFyIHhvPWJvLnR5cGVzO0lyKHtpczoiaXJvbi1tZXRhIixwcm9wZXJ0aWVzOnt0eXBlOnt0eXBlOlN0cmluZyx2YWx1ZToiZGVmYXVsdCJ9LGtleTp7dHlwZTpTdHJpbmd9LHZhbHVlOnt0eXBlOlN0cmluZyxub3RpZnk6ITB9LHNlbGY6e3R5cGU6Qm9vbGVhbixvYnNlcnZlcjoiX3NlbGZDaGFuZ2VkIn0sX19tZXRhOnt0eXBlOkJvb2xlYW4sY29tcHV0ZWQ6Il9fY29tcHV0ZU1ldGEodHlwZSwga2V5LCB2YWx1ZSkifX0saG9zdEF0dHJpYnV0ZXM6e2hpZGRlbjohMH0sX19jb21wdXRlTWV0YTpmdW5jdGlvbih0LGUsbil7dmFyIGk9bmV3IGJvKHt0eXBlOnQsa2V5OmV9KTtyZXR1cm4gdm9pZCAwIT09biYmbiE9PWkudmFsdWU/aS52YWx1ZT1uOnRoaXMudmFsdWUhPT1pLnZhbHVlJiYodGhpcy52YWx1ZT1pLnZhbHVlKSxpfSxnZXQgbGlzdCgpe3JldHVybiB0aGlzLl9fbWV0YSYmdGhpcy5fX21ldGEubGlzdH0sX3NlbGZDaGFuZ2VkOmZ1bmN0aW9uKHQpe3QmJih0aGlzLnZhbHVlPXRoaXMpfSxieUtleTpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGJvKHt0eXBlOnRoaXMudHlwZSxrZXk6dH0pLnZhbHVlfX0pLAovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KSXIoe190ZW1wbGF0ZTpfZWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIEBhcHBseSAtLWxheW91dC1pbmxpbmU7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlci1jZW50ZXI7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwoKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwoKICAgICAgICBmaWxsOiB2YXIoLS1pcm9uLWljb24tZmlsbC1jb2xvciwgY3VycmVudGNvbG9yKTsKICAgICAgICBzdHJva2U6IHZhcigtLWlyb24taWNvbi1zdHJva2UtY29sb3IsIG5vbmUpOwoKICAgICAgICB3aWR0aDogdmFyKC0taXJvbi1pY29uLXdpZHRoLCAyNHB4KTsKICAgICAgICBoZWlnaHQ6IHZhcigtLWlyb24taWNvbi1oZWlnaHQsIDI0cHgpOwogICAgICAgIEBhcHBseSAtLWlyb24taWNvbjsKICAgICAgfQoKICAgICAgOmhvc3QoW2hpZGRlbl0pIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgpgLGlzOiJpcm9uLWljb24iLHByb3BlcnRpZXM6e2ljb246e3R5cGU6U3RyaW5nfSx0aGVtZTp7dHlwZTpTdHJpbmd9LHNyYzp7dHlwZTpTdHJpbmd9LF9tZXRhOnt2YWx1ZTpwby5jcmVhdGUoImlyb24tbWV0YSIse3R5cGU6Imljb25zZXQifSl9fSxvYnNlcnZlcnM6WyJfdXBkYXRlSWNvbihfbWV0YSwgaXNBdHRhY2hlZCkiLCJfdXBkYXRlSWNvbih0aGVtZSwgaXNBdHRhY2hlZCkiLCJfc3JjQ2hhbmdlZChzcmMsIGlzQXR0YWNoZWQpIiwiX2ljb25DaGFuZ2VkKGljb24sIGlzQXR0YWNoZWQpIl0sX0RFRkFVTFRfSUNPTlNFVDoiaWNvbnMiLF9pY29uQ2hhbmdlZDpmdW5jdGlvbih0KXt2YXIgZT0odHx8IiIpLnNwbGl0KCI6Iik7dGhpcy5faWNvbk5hbWU9ZS5wb3AoKSx0aGlzLl9pY29uc2V0TmFtZT1lLnBvcCgpfHx0aGlzLl9ERUZBVUxUX0lDT05TRVQsdGhpcy5fdXBkYXRlSWNvbigpfSxfc3JjQ2hhbmdlZDpmdW5jdGlvbih0KXt0aGlzLl91cGRhdGVJY29uKCl9LF91c2VzSWNvbnNldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmljb258fCF0aGlzLnNyY30sX3VwZGF0ZUljb246ZnVuY3Rpb24oKXt0aGlzLl91c2VzSWNvbnNldCgpPyh0aGlzLl9pbWcmJnRoaXMuX2ltZy5wYXJlbnROb2RlJiZxaSh0aGlzLnJvb3QpLnJlbW92ZUNoaWxkKHRoaXMuX2ltZyksIiI9PT10aGlzLl9pY29uTmFtZT90aGlzLl9pY29uc2V0JiZ0aGlzLl9pY29uc2V0LnJlbW92ZUljb24odGhpcyk6dGhpcy5faWNvbnNldE5hbWUmJnRoaXMuX21ldGEmJih0aGlzLl9pY29uc2V0PXRoaXMuX21ldGEuYnlLZXkodGhpcy5faWNvbnNldE5hbWUpLHRoaXMuX2ljb25zZXQ/KHRoaXMuX2ljb25zZXQuYXBwbHlJY29uKHRoaXMsdGhpcy5faWNvbk5hbWUsdGhpcy50aGVtZSksdGhpcy51bmxpc3Rlbih3aW5kb3csImlyb24taWNvbnNldC1hZGRlZCIsIl91cGRhdGVJY29uIikpOnRoaXMubGlzdGVuKHdpbmRvdywiaXJvbi1pY29uc2V0LWFkZGVkIiwiX3VwZGF0ZUljb24iKSkpOih0aGlzLl9pY29uc2V0JiZ0aGlzLl9pY29uc2V0LnJlbW92ZUljb24odGhpcyksdGhpcy5faW1nfHwodGhpcy5faW1nPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImltZyIpLHRoaXMuX2ltZy5zdHlsZS53aWR0aD0iMTAwJSIsdGhpcy5faW1nLnN0eWxlLmhlaWdodD0iMTAwJSIsdGhpcy5faW1nLmRyYWdnYWJsZT0hMSksdGhpcy5faW1nLnNyYz10aGlzLnNyYyxxaSh0aGlzLnJvb3QpLmFwcGVuZENoaWxkKHRoaXMuX2ltZykpfX0pLAovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KSXIoe2lzOiJpcm9uLWljb25zZXQtc3ZnIixwcm9wZXJ0aWVzOntuYW1lOnt0eXBlOlN0cmluZyxvYnNlcnZlcjoiX25hbWVDaGFuZ2VkIn0sc2l6ZTp7dHlwZTpOdW1iZXIsdmFsdWU6MjR9LHJ0bE1pcnJvcmluZzp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSx1c2VHbG9iYWxSdGxBdHRyaWJ1dGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLl9tZXRhPW5ldyBibyh7dHlwZToiaWNvbnNldCIsa2V5Om51bGwsdmFsdWU6bnVsbH0pfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuc3R5bGUuZGlzcGxheT0ibm9uZSJ9LGdldEljb25OYW1lczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pY29ucz10aGlzLl9jcmVhdGVJY29uTWFwKCksT2JqZWN0LmtleXModGhpcy5faWNvbnMpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubmFtZSsiOiIrdH0pLHRoaXMpfSxhcHBseUljb246ZnVuY3Rpb24odCxlKXt0aGlzLnJlbW92ZUljb24odCk7dmFyIG49dGhpcy5fY2xvbmVJY29uKGUsdGhpcy5ydGxNaXJyb3JpbmcmJnRoaXMuX3RhcmdldElzUlRMKHQpKTtpZihuKXt2YXIgaT1xaSh0LnJvb3R8fHQpO3JldHVybiBpLmluc2VydEJlZm9yZShuLGkuY2hpbGROb2Rlc1swXSksdC5fc3ZnSWNvbj1ufXJldHVybiBudWxsfSxyZW1vdmVJY29uOmZ1bmN0aW9uKHQpe3QuX3N2Z0ljb24mJihxaSh0LnJvb3R8fHQpLnJlbW92ZUNoaWxkKHQuX3N2Z0ljb24pLHQuX3N2Z0ljb249bnVsbCl9LF90YXJnZXRJc1JUTDpmdW5jdGlvbih0KXtpZihudWxsPT10aGlzLl9fdGFyZ2V0SXNSVEwpaWYodGhpcy51c2VHbG9iYWxSdGxBdHRyaWJ1dGUpe3ZhciBlPWRvY3VtZW50LmJvZHkmJmRvY3VtZW50LmJvZHkuaGFzQXR0cmlidXRlKCJkaXIiKT9kb2N1bWVudC5ib2R5OmRvY3VtZW50LmRvY3VtZW50RWxlbWVudDt0aGlzLl9fdGFyZ2V0SXNSVEw9InJ0bCI9PT1lLmdldEF0dHJpYnV0ZSgiZGlyIil9ZWxzZSB0JiZ0Lm5vZGVUeXBlIT09Tm9kZS5FTEVNRU5UX05PREUmJih0PXQuaG9zdCksdGhpcy5fX3RhcmdldElzUlRMPXQmJiJydGwiPT09d2luZG93LmdldENvbXB1dGVkU3R5bGUodCkuZGlyZWN0aW9uO3JldHVybiB0aGlzLl9fdGFyZ2V0SXNSVEx9LF9uYW1lQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuX21ldGEudmFsdWU9bnVsbCx0aGlzLl9tZXRhLmtleT10aGlzLm5hbWUsdGhpcy5fbWV0YS52YWx1ZT10aGlzLHRoaXMuYXN5bmMoKGZ1bmN0aW9uKCl7dGhpcy5maXJlKCJpcm9uLWljb25zZXQtYWRkZWQiLHRoaXMse25vZGU6d2luZG93fSl9KSl9LF9jcmVhdGVJY29uTWFwOmZ1bmN0aW9uKCl7dmFyIHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gcWkodGhpcykucXVlcnlTZWxlY3RvckFsbCgiW2lkXSIpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3RbZS5pZF09ZX0pKSx0fSxfY2xvbmVJY29uOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2ljb25zPXRoaXMuX2ljb25zfHx0aGlzLl9jcmVhdGVJY29uTWFwKCksdGhpcy5fcHJlcGFyZVN2Z0Nsb25lKHRoaXMuX2ljb25zW3RdLHRoaXMuc2l6ZSxlKX0sX3ByZXBhcmVTdmdDbG9uZTpmdW5jdGlvbih0LGUsbil7aWYodCl7dmFyIGk9dC5jbG9uZU5vZGUoITApLHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInN2ZyIpLG89aS5nZXRBdHRyaWJ1dGUoInZpZXdCb3giKXx8IjAgMCAiK2UrIiAiK2UsYT0icG9pbnRlci1ldmVudHM6IG5vbmU7IGRpc3BsYXk6IGJsb2NrOyB3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlOyI7cmV0dXJuIG4mJmkuaGFzQXR0cmlidXRlKCJtaXJyb3ItaW4tcnRsIikmJihhKz0iLXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoLTEsMSk7dHJhbnNmb3JtOnNjYWxlKC0xLDEpO3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyOyIpLHIuc2V0QXR0cmlidXRlKCJ2aWV3Qm94IixvKSxyLnNldEF0dHJpYnV0ZSgicHJlc2VydmVBc3BlY3RSYXRpbyIsInhNaWRZTWlkIG1lZXQiKSxyLnNldEF0dHJpYnV0ZSgiZm9jdXNhYmxlIiwiZmFsc2UiKSxyLnN0eWxlLmNzc1RleHQ9YSxyLmFwcGVuZENoaWxkKGkpLnJlbW92ZUF0dHJpYnV0ZSgiaWQiKSxyfXJldHVybiBudWxsfX0pOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTQgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KY29uc3Qgd289X2VgPGlyb24taWNvbnNldC1zdmcgbmFtZT0iaW1hZ2UiIHNpemU9IjI0Ij4KPHN2Zz48ZGVmcz4KPGcgaWQ9ImFkZC1hLXBob3RvIj48cGF0aCBkPSJNMyA0VjFoMnYzaDN2Mkg1djNIM1Y2SDBWNGgzem0zIDZWN2gzVjRoN2wxLjgzIDJIMjFjMS4xIDAgMiAuOSAyIDJ2MTJjMCAxLjEtLjkgMi0yIDJINWMtMS4xIDAtMi0uOS0yLTJWMTBoM3ptNyA5YzIuNzYgMCA1LTIuMjQgNS01cy0yLjI0LTUtNS01LTUgMi4yNC01IDUgMi4yNCA1IDUgNXptLTMuMi01YzAgMS43NyAxLjQzIDMuMiAzLjIgMy4yczMuMi0xLjQzIDMuMi0zLjItMS40My0zLjItMy4yLTMuMi0zLjIgMS40My0zLjIgMy4yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFkZC10by1waG90b3MiPjxwYXRoIGQ9Ik00IDZIMnYxNGMwIDEuMS45IDIgMiAyaDE0di0ySDRWNnptMTYtNEg4Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDEyYzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS0xIDloLTR2NGgtMnYtNEg5VjloNFY1aDJ2NGg0djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYWRqdXN0Ij48cGF0aCBkPSJNMTIgMkM2LjQ5IDIgMiA2LjQ5IDIgMTJzNC40OSAxMCAxMCAxMCAxMC00LjQ5IDEwLTEwUzE3LjUxIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6bTMtOGMwIDEuNjYtMS4zNCAzLTMgM3MtMy0xLjM0LTMtMyAxLjM0LTMgMy0zIDMgMS4zNCAzIDN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXNzaXN0YW50Ij48cGF0aCBkPSJNMTkgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDRsMyAzIDMtM2g0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS01LjEyIDEwLjg4TDEyIDE3bC0xLjg4LTQuMTJMNiAxMWw0LjEyLTEuODhMMTIgNWwxLjg4IDQuMTJMMTggMTFsLTQuMTIgMS44OHoiPjwvcGF0aD48L2c+CjxnIGlkPSJhc3Npc3RhbnQtcGhvdG8iPjxwYXRoIGQ9Ik0xNC40IDZMMTQgNEg1djE3aDJ2LTdoNS42bC40IDJoN1Y2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImF1ZGlvdHJhY2siPjxwYXRoIGQ9Ik0xMiAzdjkuMjhjLS40Ny0uMTctLjk3LS4yOC0xLjUtLjI4QzguMDEgMTIgNiAxNC4wMSA2IDE2LjVTOC4wMSAyMSAxMC41IDIxYzIuMzEgMCA0LjItMS43NSA0LjQ1LTRIMTVWNmg0VjNoLTd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYmx1ci1jaXJjdWxhciI+PHBhdGggZD0iTTEwIDljLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xLS40NS0xLTEtMXptMCA0Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6TTcgOS41Yy0uMjggMC0uNS4yMi0uNS41cy4yMi41LjUuNS41LS4yMi41LS41LS4yMi0uNS0uNS0uNXptMyA3Yy0uMjggMC0uNS4yMi0uNS41cy4yMi41LjUuNS41LS4yMi41LS41LS4yMi0uNS0uNS0uNXptLTMtM2MtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6bTMtNmMuMjggMCAuNS0uMjIuNS0uNXMtLjIyLS41LS41LS41LS41LjIyLS41LjUuMjIuNS41LjV6TTE0IDljLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xLS40NS0xLTEtMXptMC0xLjVjLjI4IDAgLjUtLjIyLjUtLjVzLS4yMi0uNS0uNS0uNS0uNS4yMi0uNS41LjIyLjUuNS41em0zIDZjLS4yOCAwLS41LjIyLS41LjVzLjIyLjUuNS41LjUtLjIyLjUtLjUtLjIyLS41LS41LS41em0wLTRjLS4yOCAwLS41LjIyLS41LjVzLjIyLjUuNS41LjUtLjIyLjUtLjUtLjIyLS41LS41LS41ek0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQyIDAtOC0zLjU4LTgtOHMzLjU4LTggOC04IDggMy41OCA4IDgtMy41OCA4LTggOHptMi0zLjVjLS4yOCAwLS41LjIyLS41LjVzLjIyLjUuNS41LjUtLjIyLjUtLjUtLjIyLS41LS41LS41em0wLTMuNWMtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImJsdXItbGluZWFyIj48cGF0aCBkPSJNNSAxNy41Yy44MyAwIDEuNS0uNjcgMS41LTEuNXMtLjY3LTEuNS0xLjUtMS41LTEuNS42Ny0xLjUgMS41LjY3IDEuNSAxLjUgMS41ek05IDEzYy41NSAwIDEtLjQ1IDEtMXMtLjQ1LTEtMS0xLTEgLjQ1LTEgMSAuNDUgMSAxIDF6bTAtNGMuNTUgMCAxLS40NSAxLTFzLS40NS0xLTEtMS0xIC40NS0xIDEgLjQ1IDEgMSAxek0zIDIxaDE4di0ySDN2MnpNNSA5LjVjLjgzIDAgMS41LS42NyAxLjUtMS41UzUuODMgNi41IDUgNi41IDMuNSA3LjE3IDMuNSA4IDQuMTcgOS41IDUgOS41em0wIDRjLjgzIDAgMS41LS42NyAxLjUtMS41cy0uNjctMS41LTEuNS0xLjUtMS41LjY3LTEuNSAxLjUuNjcgMS41IDEuNSAxLjV6TTkgMTdjLjU1IDAgMS0uNDUgMS0xcy0uNDUtMS0xLTEtMSAuNDUtMSAxIC40NSAxIDEgMXptOC0uNWMuMjggMCAuNS0uMjIuNS0uNXMtLjIyLS41LS41LS41LS41LjIyLS41LjUuMjIuNS41LjV6TTMgM3YyaDE4VjNIM3ptMTQgNS41Yy4yOCAwIC41LS4yMi41LS41cy0uMjItLjUtLjUtLjUtLjUuMjItLjUuNS4yMi41LjUuNXptMCA0Yy4yOCAwIC41LS4yMi41LS41cy0uMjItLjUtLjUtLjUtLjUuMjItLjUuNS4yMi41LjUuNXpNMTMgOWMuNTUgMCAxLS40NSAxLTFzLS40NS0xLTEtMS0xIC40NS0xIDEgLjQ1IDEgMSAxem0wIDRjLjU1IDAgMS0uNDUgMS0xcy0uNDUtMS0xLTEtMSAuNDUtMSAxIC40NSAxIDEgMXptMCA0Yy41NSAwIDEtLjQ1IDEtMXMtLjQ1LTEtMS0xLTEgLjQ1LTEgMSAuNDUgMSAxIDF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYmx1ci1vZmYiPjxwYXRoIGQ9Ik0xNCA3Yy41NSAwIDEtLjQ1IDEtMXMtLjQ1LTEtMS0xLTEgLjQ1LTEgMSAuNDUgMSAxIDF6bS0uMiA0LjQ4bC4yLjAyYy44MyAwIDEuNS0uNjcgMS41LTEuNXMtLjY3LTEuNS0xLjUtMS41LTEuNS42Ny0xLjUgMS41bC4wMi4yYy4wOS42Ny42MSAxLjE5IDEuMjggMS4yOHpNMTQgMy41Yy4yOCAwIC41LS4yMi41LS41cy0uMjItLjUtLjUtLjUtLjUuMjItLjUuNS4yMi41LjUuNXptLTQgMGMuMjggMCAuNS0uMjIuNS0uNXMtLjIyLS41LS41LS41LS41LjIyLS41LjUuMjIuNS41LjV6bTExIDdjLjI4IDAgLjUtLjIyLjUtLjVzLS4yMi0uNS0uNS0uNS0uNS4yMi0uNS41LjIyLjUuNS41ek0xMCA3Yy41NSAwIDEtLjQ1IDEtMXMtLjQ1LTEtMS0xLTEgLjQ1LTEgMSAuNDUgMSAxIDF6bTggOGMuNTUgMCAxLS40NSAxLTFzLS40NS0xLTEtMS0xIC40NS0xIDEgLjQ1IDEgMSAxem0wLTRjLjU1IDAgMS0uNDUgMS0xcy0uNDUtMS0xLTEtMSAuNDUtMSAxIC40NSAxIDEgMXptMC00Yy41NSAwIDEtLjQ1IDEtMXMtLjQ1LTEtMS0xLTEgLjQ1LTEgMSAuNDUgMSAxIDF6bS00IDEzLjVjLS4yOCAwLS41LjIyLS41LjVzLjIyLjUuNS41LjUtLjIyLjUtLjUtLjIyLS41LS41LS41ek0yLjUgNS4yN2wzLjc4IDMuNzhMNiA5Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMWMwLS4xLS4wMy0uMTktLjA2LS4yOGwyLjgxIDIuODFjLS43MS4xMS0xLjI1LjczLTEuMjUgMS40NyAwIC44My42NyAxLjUgMS41IDEuNS43NCAwIDEuMzYtLjU0IDEuNDctMS4yNWwyLjgxIDIuODFjLS4wOS0uMDMtLjE4LS4wNi0uMjgtLjA2LS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xYzAtLjEtLjAzLS4xOS0uMDYtLjI4bDMuNzggMy43OEwyMCAyMC4yMyAzLjc3IDQgMi41IDUuMjd6TTEwIDE3Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6bTExLTMuNWMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6TTYgMTNjLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xLS40NS0xLTEtMXpNMyA5LjVjLS4yOCAwLS41LjIyLS41LjVzLjIyLjUuNS41LjUtLjIyLjUtLjUtLjIyLS41LS41LS41em03IDExYy0uMjggMC0uNS4yMi0uNS41cy4yMi41LjUuNS41LS4yMi41LS41LS4yMi0uNS0uNS0uNXpNNiAxN2MtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xem0tMy0zLjVjLS4yOCAwLS41LjIyLS41LjVzLjIyLjUuNS41LjUtLjIyLjUtLjUtLjIyLS41LS41LS41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImJsdXItb24iPjxwYXRoIGQ9Ik02IDEzYy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6bTAgNGMtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xem0wLThjLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xLS40NS0xLTEtMXptLTMgLjVjLS4yOCAwLS41LjIyLS41LjVzLjIyLjUuNS41LjUtLjIyLjUtLjUtLjIyLS41LS41LS41ek02IDVjLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xLS40NS0xLTEtMXptMTUgNS41Yy4yOCAwIC41LS4yMi41LS41cy0uMjItLjUtLjUtLjUtLjUuMjItLjUuNS4yMi41LjUuNXpNMTQgN2MuNTUgMCAxLS40NSAxLTFzLS40NS0xLTEtMS0xIC40NS0xIDEgLjQ1IDEgMSAxem0wLTMuNWMuMjggMCAuNS0uMjIuNS0uNXMtLjIyLS41LS41LS41LS41LjIyLS41LjUuMjIuNS41LjV6bS0xMSAxMGMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6bTcgN2MtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6bTAtMTdjLjI4IDAgLjUtLjIyLjUtLjVzLS4yMi0uNS0uNS0uNS0uNS4yMi0uNS41LjIyLjUuNS41ek0xMCA3Yy41NSAwIDEtLjQ1IDEtMXMtLjQ1LTEtMS0xLTEgLjQ1LTEgMSAuNDUgMSAxIDF6bTAgNS41Yy0uODMgMC0xLjUuNjctMS41IDEuNXMuNjcgMS41IDEuNSAxLjUgMS41LS42NyAxLjUtMS41LS42Ny0xLjUtMS41LTEuNXptOCAuNWMtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xem0wIDRjLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xLS40NS0xLTEtMXptMC04Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6bTAtNGMtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xem0zIDguNWMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6TTE0IDE3Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6bTAgMy41Yy0uMjggMC0uNS4yMi0uNS41cy4yMi41LjUuNS41LS4yMi41LS41LS4yMi0uNS0uNS0uNXptLTQtMTJjLS44MyAwLTEuNS42Ny0xLjUgMS41cy42NyAxLjUgMS41IDEuNSAxLjUtLjY3IDEuNS0xLjUtLjY3LTEuNS0xLjUtMS41em0wIDguNWMtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xem00LTQuNWMtLjgzIDAtMS41LjY3LTEuNSAxLjVzLjY3IDEuNSAxLjUgMS41IDEuNS0uNjcgMS41LTEuNS0uNjctMS41LTEuNS0xLjV6bTAtNGMtLjgzIDAtMS41LjY3LTEuNSAxLjVzLjY3IDEuNSAxLjUgMS41IDEuNS0uNjcgMS41LTEuNS0uNjctMS41LTEuNS0xLjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYnJpZ2h0bmVzcy0xIj48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCI+PC9jaXJjbGU+PC9nPgo8ZyBpZD0iYnJpZ2h0bmVzcy0yIj48cGF0aCBkPSJNMTAgMmMtMS44MiAwLTMuNTMuNS01IDEuMzVDNy45OSA1LjA4IDEwIDguMyAxMCAxMnMtMi4wMSA2LjkyLTUgOC42NUM2LjQ3IDIxLjUgOC4xOCAyMiAxMCAyMmM1LjUyIDAgMTAtNC40OCAxMC0xMFMxNS41MiAyIDEwIDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYnJpZ2h0bmVzcy0zIj48cGF0aCBkPSJNOSAyYy0xLjA1IDAtMi4wNS4xNi0zIC40NiA0LjA2IDEuMjcgNyA1LjA2IDcgOS41NCAwIDQuNDgtMi45NCA4LjI3LTcgOS41NC45NS4zIDEuOTUuNDYgMyAuNDYgNS41MiAwIDEwLTQuNDggMTAtMTBTMTQuNTIgMiA5IDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYnJpZ2h0bmVzcy00Ij48cGF0aCBkPSJNMjAgOC42OVY0aC00LjY5TDEyIC42OSA4LjY5IDRINHY0LjY5TC42OSAxMiA0IDE1LjMxVjIwaDQuNjlMMTIgMjMuMzEgMTUuMzEgMjBIMjB2LTQuNjlMMjMuMzEgMTIgMjAgOC42OXpNMTIgMThjLS44OSAwLTEuNzQtLjItMi41LS41NUMxMS41NiAxNi41IDEzIDE0LjQyIDEzIDEycy0xLjQ0LTQuNS0zLjUtNS40NUMxMC4yNiA2LjIgMTEuMTEgNiAxMiA2YzMuMzEgMCA2IDIuNjkgNiA2cy0yLjY5IDYtNiA2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImJyaWdodG5lc3MtNSI+PHBhdGggZD0iTTIwIDE1LjMxTDIzLjMxIDEyIDIwIDguNjlWNGgtNC42OUwxMiAuNjkgOC42OSA0SDR2NC42OUwuNjkgMTIgNCAxNS4zMVYyMGg0LjY5TDEyIDIzLjMxIDE1LjMxIDIwSDIwdi00LjY5ek0xMiAxOGMtMy4zMSAwLTYtMi42OS02LTZzMi42OS02IDYtNiA2IDIuNjkgNiA2LTIuNjkgNi02IDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYnJpZ2h0bmVzcy02Ij48cGF0aCBkPSJNMjAgMTUuMzFMMjMuMzEgMTIgMjAgOC42OVY0aC00LjY5TDEyIC42OSA4LjY5IDRINHY0LjY5TC42OSAxMiA0IDE1LjMxVjIwaDQuNjlMMTIgMjMuMzEgMTUuMzEgMjBIMjB2LTQuNjl6TTEyIDE4VjZjMy4zMSAwIDYgMi42OSA2IDZzLTIuNjkgNi02IDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYnJpZ2h0bmVzcy03Ij48cGF0aCBkPSJNMjAgOC42OVY0aC00LjY5TDEyIC42OSA4LjY5IDRINHY0LjY5TC42OSAxMiA0IDE1LjMxVjIwaDQuNjlMMTIgMjMuMzEgMTUuMzEgMjBIMjB2LTQuNjlMMjMuMzEgMTIgMjAgOC42OXpNMTIgMThjLTMuMzEgMC02LTIuNjktNi02czIuNjktNiA2LTYgNiAyLjY5IDYgNi0yLjY5IDYtNiA2em0wLTEwYy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTQtMS43OS00LTQtNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJicm9rZW4taW1hZ2UiPjxwYXRoIGQ9Ik0yMSA1djYuNTlsLTMtMy4wMS00IDQuMDEtNC00LTQgNC0zLTMuMDFWNWMwLTEuMS45LTIgMi0yaDE0YzEuMSAwIDIgLjkgMiAyem0tMyA2LjQybDMgMy4wMVYxOWMwIDEuMS0uOSAyLTIgMkg1Yy0xLjEgMC0yLS45LTItMnYtNi41OGwzIDIuOTkgNC00IDQgNCA0LTMuOTl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYnJ1c2giPjxwYXRoIGQ9Ik03IDE0Yy0xLjY2IDAtMyAxLjM0LTMgMyAwIDEuMzEtMS4xNiAyLTIgMiAuOTIgMS4yMiAyLjQ5IDIgNCAyIDIuMjEgMCA0LTEuNzkgNC00IDAtMS42Ni0xLjM0LTMtMy0zem0xMy43MS05LjM3bC0xLjM0LTEuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwTDkgMTIuMjUgMTEuNzUgMTVsOC45Ni04Ljk2Yy4zOS0uMzkuMzktMS4wMiAwLTEuNDF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYnVyc3QtbW9kZSI+PHBhdGggZD0iTTEgNWgydjE0SDF6bTQgMGgydjE0SDV6bTE3IDBIMTBjLS41NSAwLTEgLjQ1LTEgMXYxMmMwIC41NS40NSAxIDEgMWgxMmMuNTUgMCAxLS40NSAxLTFWNmMwLS41NS0uNDUtMS0xLTF6TTExIDE3bDIuNS0zLjE1TDE1LjI5IDE2bDIuNS0zLjIyTDIxIDE3SDExeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNhbWVyYSI+PHBhdGggZD0iTTkuNCAxMC41bDQuNzctOC4yNkMxMy40NyAyLjA5IDEyLjc1IDIgMTIgMmMtMi40IDAtNC42Ljg1LTYuMzIgMi4yNWwzLjY2IDYuMzUuMDYtLjF6TTIxLjU0IDljLS45Mi0yLjkyLTMuMTUtNS4yNi02LTYuMzRMMTEuODggOWg5LjY2em0uMjYgMWgtNy40OWwuMjkuNSA0Ljc2IDguMjVDMjEgMTYuOTcgMjIgMTQuNjEgMjIgMTJjMC0uNjktLjA3LTEuMzUtLjItMnpNOC41NCAxMmwtMy45LTYuNzVDMy4wMSA3LjAzIDIgOS4zOSAyIDEyYzAgLjY5LjA3IDEuMzUuMiAyaDcuNDlsLTEuMTUtMnptLTYuMDggM2MuOTIgMi45MiAzLjE1IDUuMjYgNiA2LjM0TDEyLjEyIDE1SDIuNDZ6bTExLjI3IDBsLTMuOSA2Ljc2Yy43LjE1IDEuNDIuMjQgMi4xNy4yNCAyLjQgMCA0LjYtLjg1IDYuMzItMi4yNWwtMy42Ni02LjM1LS45MyAxLjZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2FtZXJhLWFsdCI+PGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iMy4yIj48L2NpcmNsZT48cGF0aCBkPSJNOSAyTDcuMTcgNEg0Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJoLTMuMTdMMTUgMkg5em0zIDE1Yy0yLjc2IDAtNS0yLjI0LTUtNXMyLjI0LTUgNS01IDUgMi4yNCA1IDUtMi4yNCA1LTUgNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJjYW1lcmEtZnJvbnQiPjxwYXRoIGQ9Ik0xMCAyMEg1djJoNXYybDMtMy0zLTN2MnptNCAwdjJoNXYtMmgtNXpNMTIgOGMxLjEgMCAyLS45IDItMnMtLjktMi0yLTItMS45OS45LTEuOTkgMlMxMC45IDggMTIgOHptNS04SDdDNS45IDAgNSAuOSA1IDJ2MTRjMCAxLjEuOSAyIDIgMmgxMGMxLjEgMCAyLS45IDItMlYyYzAtMS4xLS45LTItMi0yek03IDJoMTB2MTAuNWMwLTEuNjctMy4zMy0yLjUtNS0yLjVzLTUgLjgzLTUgMi41VjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2FtZXJhLXJlYXIiPjxwYXRoIGQ9Ik0xMCAyMEg1djJoNXYybDMtMy0zLTN2MnptNCAwdjJoNXYtMmgtNXptMy0yMEg3QzUuOSAwIDUgLjkgNSAydjE0YzAgMS4xLjkgMiAyIDJoMTBjMS4xIDAgMi0uOSAyLTJWMmMwLTEuMS0uOS0yLTItMnptLTUgNmMtMS4xMSAwLTItLjktMi0ycy44OS0yIDEuOTktMiAyIC45IDIgMkMxNCA1LjEgMTMuMSA2IDEyIDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2FtZXJhLXJvbGwiPjxwYXRoIGQ9Ik0xNCA1YzAtMS4xLS45LTItMi0yaC0xVjJjMC0uNTUtLjQ1LTEtMS0xSDZjLS41NSAwLTEgLjQ1LTEgMXYxSDRjLTEuMSAwLTIgLjktMiAydjE1YzAgMS4xLjkgMiAyIDJoOGMxLjEgMCAyLS45IDItMmg4VjVoLTh6bS0yIDEzaC0ydi0yaDJ2MnptMC05aC0yVjdoMnYyem00IDloLTJ2LTJoMnYyem0wLTloLTJWN2gydjJ6bTQgOWgtMnYtMmgydjJ6bTAtOWgtMlY3aDJ2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjZW50ZXItZm9jdXMtc3Ryb25nIj48cGF0aCBkPSJNMTIgOGMtMi4yMSAwLTQgMS43OS00IDRzMS43OSA0IDQgNCA0LTEuNzkgNC00LTEuNzktNC00LTR6bS03IDdIM3Y0YzAgMS4xLjkgMiAyIDJoNHYtMkg1di00ek01IDVoNFYzSDVjLTEuMSAwLTIgLjktMiAydjRoMlY1em0xNC0yaC00djJoNHY0aDJWNWMwLTEuMS0uOS0yLTItMnptMCAxNmgtNHYyaDRjMS4xIDAgMi0uOSAyLTJ2LTRoLTJ2NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJjZW50ZXItZm9jdXMtd2VhayI+PHBhdGggZD0iTTUgMTVIM3Y0YzAgMS4xLjkgMiAyIDJoNHYtMkg1di00ek01IDVoNFYzSDVjLTEuMSAwLTIgLjktMiAydjRoMlY1em0xNC0yaC00djJoNHY0aDJWNWMwLTEuMS0uOS0yLTItMnptMCAxNmgtNHYyaDRjMS4xIDAgMi0uOSAyLTJ2LTRoLTJ2NHpNMTIgOGMtMi4yMSAwLTQgMS43OS00IDRzMS43OSA0IDQgNCA0LTEuNzkgNC00LTEuNzktNC00LTR6bTAgNmMtMS4xIDAtMi0uOS0yLTJzLjktMiAyLTIgMiAuOSAyIDItLjkgMi0yIDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY29sbGVjdGlvbnMiPjxwYXRoIGQ9Ik0yMiAxNlY0YzAtMS4xLS45LTItMi0ySDhjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJ6bS0xMS00bDIuMDMgMi43MUwxNiAxMWw0IDVIOGwzLTR6TTIgNnYxNGMwIDEuMS45IDIgMiAyaDE0di0ySDRWNkgyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNvbGxlY3Rpb25zLWJvb2ttYXJrIj48cGF0aCBkPSJNNCA2SDJ2MTRjMCAxLjEuOSAyIDIgMmgxNHYtMkg0VjZ6bTE2LTRIOGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yem0wIDEwbC0yLjUtMS41TDE1IDEyVjRoNXY4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNvbG9yLWxlbnMiPjxwYXRoIGQ9Ik0xMiAzYy00Ljk3IDAtOSA0LjAzLTkgOXM0LjAzIDkgOSA5Yy44MyAwIDEuNS0uNjcgMS41LTEuNSAwLS4zOS0uMTUtLjc0LS4zOS0xLjAxLS4yMy0uMjYtLjM4LS42MS0uMzgtLjk5IDAtLjgzLjY3LTEuNSAxLjUtMS41SDE2YzIuNzYgMCA1LTIuMjQgNS01IDAtNC40Mi00LjAzLTgtOS04em0tNS41IDljLS44MyAwLTEuNS0uNjctMS41LTEuNVM1LjY3IDkgNi41IDkgOCA5LjY3IDggMTAuNSA3LjMzIDEyIDYuNSAxMnptMy00QzguNjcgOCA4IDcuMzMgOCA2LjVTOC42NyA1IDkuNSA1czEuNS42NyAxLjUgMS41UzEwLjMzIDggOS41IDh6bTUgMGMtLjgzIDAtMS41LS42Ny0xLjUtMS41UzEzLjY3IDUgMTQuNSA1czEuNS42NyAxLjUgMS41UzE1LjMzIDggMTQuNSA4em0zIDRjLS44MyAwLTEuNS0uNjctMS41LTEuNVMxNi42NyA5IDE3LjUgOXMxLjUuNjcgMS41IDEuNS0uNjcgMS41LTEuNSAxLjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY29sb3JpemUiPjxwYXRoIGQ9Ik0yMC43MSA1LjYzbC0yLjM0LTIuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0zLjEyIDMuMTItMS45My0xLjkxLTEuNDEgMS40MSAxLjQyIDEuNDJMMyAxNi4yNVYyMWg0Ljc1bDguOTItOC45MiAxLjQyIDEuNDIgMS40MS0xLjQxLTEuOTItMS45MiAzLjEyLTMuMTJjLjQtLjQuNC0xLjAzLjAxLTEuNDJ6TTYuOTIgMTlMNSAxNy4wOGw4LjA2LTguMDYgMS45MiAxLjkyTDYuOTIgMTl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY29tcGFyZSI+PHBhdGggZD0iTTEwIDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmg1djJoMlYxaC0ydjJ6bTAgMTVINWw1LTZ2NnptOS0xNWgtNXYyaDV2MTNsLTUtNnY5aDVjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjb250cm9sLXBvaW50Ij48cGF0aCBkPSJNMTMgN2gtMnY0SDd2Mmg0djRoMnYtNGg0di0yaC00Vjd6bS0xLTVDNi40OSAyIDIgNi40OSAyIDEyczQuNDkgMTAgMTAgMTAgMTAtNC40OSAxMC0xMFMxNy41MSAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNvbnRyb2wtcG9pbnQtZHVwbGljYXRlIj48cGF0aCBkPSJNMTYgOGgtMnYzaC0zdjJoM3YzaDJ2LTNoM3YtMmgtM3pNMiAxMmMwLTIuNzkgMS42NC01LjIgNC4wMS02LjMyVjMuNTJDMi41MiA0Ljc2IDAgOC4wOSAwIDEyczIuNTIgNy4yNCA2LjAxIDguNDh2LTIuMTZDMy42NCAxNy4yIDIgMTQuNzkgMiAxMnptMTMtOWMtNC45NiAwLTkgNC4wNC05IDlzNC4wNCA5IDkgOSA5LTQuMDQgOS05LTQuMDQtOS05LTl6bTAgMTZjLTMuODYgMC03LTMuMTQtNy03czMuMTQtNyA3LTcgNyAzLjE0IDcgNy0zLjE0IDctNyA3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3AiPjxwYXRoIGQ9Ik0xNyAxNWgyVjdjMC0xLjEtLjktMi0yLTJIOXYyaDh2OHpNNyAxN1YxSDV2NEgxdjJoNHYxMGMwIDEuMS45IDIgMiAyaDEwdjRoMnYtNGg0di0ySDd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY3JvcC0xNi05Ij48cGF0aCBkPSJNMTkgNkg1Yy0xLjEgMC0yIC45LTIgMnY4YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWOGMwLTEuMS0uOS0yLTItMnptMCAxMEg1VjhoMTR2OHoiPjwvcGF0aD48L2c+CjxnIGlkPSJjcm9wLTMtMiI+PHBhdGggZD0iTTE5IDRINWMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0wIDE0SDVWNmgxNHYxMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjcm9wLTUtNCI+PHBhdGggZD0iTTE5IDVINWMtMS4xIDAtMiAuOS0yIDJ2MTBjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0wIDEySDVWN2gxNHYxMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJjcm9wLTctNSI+PHBhdGggZD0iTTE5IDdINWMtMS4xIDAtMiAuOS0yIDJ2NmMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjljMC0xLjEtLjktMi0yLTJ6bTAgOEg1VjloMTR2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjcm9wLWRpbiI+PHBhdGggZD0iTTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDVWNWgxNHYxNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJjcm9wLWZyZWUiPjxwYXRoIGQ9Ik0zIDV2NGgyVjVoNFYzSDVjLTEuMSAwLTIgLjktMiAyem0yIDEwSDN2NGMwIDEuMS45IDIgMiAyaDR2LTJINXYtNHptMTQgNGgtNHYyaDRjMS4xIDAgMi0uOSAyLTJ2LTRoLTJ2NHptMC0xNmgtNHYyaDR2NGgyVjVjMC0xLjEtLjktMi0yLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY3JvcC1sYW5kc2NhcGUiPjxwYXRoIGQ9Ik0xOSA1SDVjLTEuMSAwLTIgLjktMiAydjEwYzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWN2MwLTEuMS0uOS0yLTItMnptMCAxMkg1VjdoMTR2MTB6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY3JvcC1vcmlnaW5hbCI+PHBhdGggZD0iTTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDVWNWgxNHYxNHptLTUuMDQtNi43MWwtMi43NSAzLjU0LTEuOTYtMi4zNkw2LjUgMTdoMTFsLTMuNTQtNC43MXoiPjwvcGF0aD48L2c+CjxnIGlkPSJjcm9wLXBvcnRyYWl0Ij48cGF0aCBkPSJNMTcgM0g3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDEwYzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1Y1aDEwdjE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3Atcm90YXRlIj48cGF0aCBkPSJNNy40NyAyMS40OUM0LjIgMTkuOTMgMS44NiAxNi43NiAxLjUgMTNIMGMuNTEgNi4xNiA1LjY2IDExIDExLjk1IDExIC4yMyAwIC40NC0uMDIuNjYtLjAzTDguOCAyMC4xNWwtMS4zMyAxLjM0ek0xMi4wNSAwYy0uMjMgMC0uNDQuMDItLjY2LjA0bDMuODEgMy44MSAxLjMzLTEuMzNDMTkuOCA0LjA3IDIyLjE0IDcuMjQgMjIuNSAxMUgyNGMtLjUxLTYuMTYtNS42Ni0xMS0xMS45NS0xMXpNMTYgMTRoMlY4YzAtMS4xMS0uOS0yLTItMmgtNnYyaDZ2NnptLTggMlY0SDZ2Mkg0djJoMnY4YzAgMS4xLjg5IDIgMiAyaDh2Mmgydi0yaDJ2LTJIOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJjcm9wLXNxdWFyZSI+PHBhdGggZD0iTTE4IDRINmMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0wIDE0SDZWNmgxMnYxMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJkZWhhemUiPjxwYXRoIGQ9Ik0yIDE1LjV2MmgyMHYtMkgyem0wLTV2MmgyMHYtMkgyem0wLTV2MmgyMHYtMkgyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImRldGFpbHMiPjxwYXRoIGQ9Ik0zIDRsOSAxNiA5LTE2SDN6bTMuMzggMmgxMS4yNUwxMiAxNiA2LjM4IDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZWRpdCI+PHBhdGggZD0iTTMgMTcuMjVWMjFoMy43NUwxNy44MSA5Ljk0bC0zLjc1LTMuNzVMMyAxNy4yNXpNMjAuNzEgNy4wNGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC0yLjM0LTIuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0xLjgzIDEuODMgMy43NSAzLjc1IDEuODMtMS44M3oiPjwvcGF0aD48L2c+CjxnIGlkPSJleHBvc3VyZSI+PHBhdGggZD0iTTE1IDE3djJoMnYtMmgydi0yaC0ydi0yaC0ydjJoLTJ2Mmgyem01LTE1SDRjLTEuMSAwLTIgLjktMiAydjE2YzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnpNNSA1aDZ2Mkg1VjV6bTE1IDE1SDRMMjAgNHYxNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJleHBvc3VyZS1uZWctMSI+PHBhdGggZD0iTTQgMTF2Mmg4di0ySDR6bTE1IDdoLTJWNy4zOEwxNCA4LjRWNi43TDE4LjcgNWguM3YxM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJleHBvc3VyZS1uZWctMiI+PHBhdGggZD0iTTE1LjA1IDE2LjI5bDIuODYtMy4wN2MuMzgtLjM5LjcyLS43OSAxLjA0LTEuMTguMzItLjM5LjU5LS43OC44Mi0xLjE3LjIzLS4zOS40MS0uNzguNTQtMS4xN3MuMTktLjc5LjE5LTEuMThjMC0uNTMtLjA5LTEuMDItLjI3LTEuNDYtLjE4LS40NC0uNDQtLjgxLS43OC0xLjExLS4zNC0uMzEtLjc3LS41NC0xLjI2LS43MS0uNTEtLjE2LTEuMDgtLjI0LTEuNzItLjI0LS42OSAwLTEuMzEuMTEtMS44NS4zMi0uNTQuMjEtMSAuNTEtMS4zNi44OC0uMzcuMzctLjY1LjgtLjg0IDEuMy0uMTguNDctLjI3Ljk3LS4yOCAxLjVoMi4xNGMuMDEtLjMxLjA1LS42LjEzLS44Ny4wOS0uMjkuMjMtLjU0LjQtLjc1LjE4LS4yMS40MS0uMzcuNjgtLjQ5LjI3LS4xMi42LS4xOC45Ni0uMTguMzEgMCAuNTguMDUuODEuMTUuMjMuMS40My4yNS41OS40My4xNi4xOC4yOC40LjM3LjY1LjA4LjI1LjEzLjUyLjEzLjgxIDAgLjIyLS4wMy40My0uMDguNjUtLjA2LjIyLS4xNS40NS0uMjkuNy0uMTQuMjUtLjMyLjUzLS41Ni44My0uMjMuMy0uNTIuNjUtLjg4IDEuMDNsLTQuMTcgNC41NVYxOEgyMXYtMS43MWgtNS45NXpNMiAxMXYyaDh2LTJIMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJleHBvc3VyZS1wbHVzLTEiPjxwYXRoIGQ9Ik0xMCA3SDh2NEg0djJoNHY0aDJ2LTRoNHYtMmgtNFY3em0xMCAxMWgtMlY3LjM4TDE1IDguNFY2LjdMMTkuNyA1aC4zdjEzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImV4cG9zdXJlLXBsdXMtMiI+PHBhdGggZD0iTTE2LjA1IDE2LjI5bDIuODYtMy4wN2MuMzgtLjM5LjcyLS43OSAxLjA0LTEuMTguMzItLjM5LjU5LS43OC44Mi0xLjE3LjIzLS4zOS40MS0uNzguNTQtMS4xNy4xMy0uMzkuMTktLjc5LjE5LTEuMTggMC0uNTMtLjA5LTEuMDItLjI3LTEuNDYtLjE4LS40NC0uNDQtLjgxLS43OC0xLjExLS4zNC0uMzEtLjc3LS41NC0xLjI2LS43MS0uNTEtLjE2LTEuMDgtLjI0LTEuNzItLjI0LS42OSAwLTEuMzEuMTEtMS44NS4zMi0uNTQuMjEtMSAuNTEtMS4zNi44OC0uMzcuMzctLjY1LjgtLjg0IDEuMy0uMTguNDctLjI3Ljk3LS4yOCAxLjVoMi4xNGMuMDEtLjMxLjA1LS42LjEzLS44Ny4wOS0uMjkuMjMtLjU0LjQtLjc1LjE4LS4yMS40MS0uMzcuNjgtLjQ5LjI3LS4xMi42LS4xOC45Ni0uMTguMzEgMCAuNTguMDUuODEuMTUuMjMuMS40My4yNS41OS40My4xNi4xOC4yOC40LjM3LjY1LjA4LjI1LjEzLjUyLjEzLjgxIDAgLjIyLS4wMy40My0uMDguNjUtLjA2LjIyLS4xNS40NS0uMjkuNy0uMTQuMjUtLjMyLjUzLS41Ni44My0uMjMuMy0uNTIuNjUtLjg4IDEuMDNsLTQuMTcgNC41NVYxOEgyMnYtMS43MWgtNS45NXpNOCA3SDZ2NEgydjJoNHY0aDJ2LTRoNHYtMkg4Vjd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZXhwb3N1cmUtemVybyI+PHBhdGggZD0iTTE2LjE0IDEyLjVjMCAxLS4xIDEuODUtLjMgMi41NS0uMi43LS40OCAxLjI3LS44MyAxLjctLjM2LjQ0LS43OS43NS0xLjMuOTUtLjUxLjItMS4wNy4zLTEuNy4zLS42MiAwLTEuMTgtLjEtMS42OS0uMy0uNTEtLjItLjk1LS41MS0xLjMxLS45NS0uMzYtLjQ0LS42NS0xLjAxLS44NS0xLjctLjItLjctLjMtMS41NS0uMy0yLjU1di0yLjA0YzAtMSAuMS0xLjg1LjMtMi41NS4yLS43LjQ4LTEuMjYuODQtMS42OS4zNi0uNDMuOC0uNzQgMS4zMS0uOTNDMTAuODEgNS4xIDExLjM4IDUgMTIgNWMuNjMgMCAxLjE5LjEgMS43LjI5LjUxLjE5Ljk1LjUgMS4zMS45My4zNi40My42NC45OS44NCAxLjY5LjIuNy4zIDEuNTQuMyAyLjU1djIuMDR6bS0yLjExLTIuMzZjMC0uNjQtLjA1LTEuMTgtLjEzLTEuNjItLjA5LS40NC0uMjItLjc5LS40LTEuMDYtLjE3LS4yNy0uMzktLjQ2LS42NC0uNTgtLjI1LS4xMy0uNTQtLjE5LS44Ni0uMTktLjMyIDAtLjYxLjA2LS44Ni4xOHMtLjQ3LjMxLS42NC41OGMtLjE3LjI3LS4zMS42Mi0uNCAxLjA2cy0uMTMuOTgtLjEzIDEuNjJ2Mi42N2MwIC42NC4wNSAxLjE4LjE0IDEuNjIuMDkuNDUuMjMuODEuNCAxLjA5cy4zOS40OC42NC42MS41NC4xOS44Ny4xOWMuMzMgMCAuNjItLjA2Ljg3LS4xOXMuNDYtLjMzLjYzLS42MWMuMTctLjI4LjMtLjY0LjM5LTEuMDkuMDktLjQ1LjEzLS45OS4xMy0xLjYydi0yLjY2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlciI+PHBhdGggZD0iTTE1Ljk2IDEwLjI5bC0yLjc1IDMuNTQtMS45Ni0yLjM2TDguNSAxNWgxMWwtMy41NC00Ljcxek0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTgtNEg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1YzaDE0djE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci0xIj48cGF0aCBkPSJNMyA1SDF2MTZjMCAxLjEuOSAyIDIgMmgxNnYtMkgzVjV6bTExIDEwaDJWNWgtNHYyaDJ2OHptNy0xNEg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1YzaDE0djE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci0yIj48cGF0aCBkPSJNMyA1SDF2MTZjMCAxLjEuOSAyIDIgMmgxNnYtMkgzVjV6bTE4LTRIN2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlYzYzAtMS4xLS45LTItMi0yem0wIDE2SDdWM2gxNHYxNHptLTQtNGgtNHYtMmgyYzEuMSAwIDItLjg5IDItMlY3YzAtMS4xMS0uOS0yLTItMmgtNHYyaDR2MmgtMmMtMS4xIDAtMiAuODktMiAydjRoNnYtMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJmaWx0ZXItMyI+PHBhdGggZD0iTTIxIDFIN2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlYzYzAtMS4xLS45LTItMi0yem0wIDE2SDdWM2gxNHYxNHpNMyA1SDF2MTZjMCAxLjEuOSAyIDIgMmgxNnYtMkgzVjV6bTE0IDh2LTEuNWMwLS44My0uNjctMS41LTEuNS0xLjUuODMgMCAxLjUtLjY3IDEuNS0xLjVWN2MwLTEuMTEtLjktMi0yLTJoLTR2Mmg0djJoLTJ2MmgydjJoLTR2Mmg0YzEuMSAwIDItLjg5IDItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJmaWx0ZXItNCI+PHBhdGggZD0iTTMgNUgxdjE2YzAgMS4xLjkgMiAyIDJoMTZ2LTJIM1Y1em0xMiAxMGgyVjVoLTJ2NGgtMlY1aC0ydjZoNHY0em02LTE0SDdjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWM2MwLTEuMS0uOS0yLTItMnptMCAxNkg3VjNoMTR2MTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLTUiPjxwYXRoIGQ9Ik0yMSAxSDdjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWM2MwLTEuMS0uOS0yLTItMnptMCAxNkg3VjNoMTR2MTR6TTMgNUgxdjE2YzAgMS4xLjkgMiAyIDJoMTZ2LTJIM1Y1em0xNCA4di0yYzAtMS4xMS0uOS0yLTItMmgtMlY3aDRWNWgtNnY2aDR2MmgtNHYyaDRjMS4xIDAgMi0uODkgMi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci02Ij48cGF0aCBkPSJNMyA1SDF2MTZjMCAxLjEuOSAyIDIgMmgxNnYtMkgzVjV6bTE4LTRIN2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlYzYzAtMS4xLS45LTItMi0yem0wIDE2SDdWM2gxNHYxNHptLTgtMmgyYzEuMSAwIDItLjg5IDItMnYtMmMwLTEuMTEtLjktMi0yLTJoLTJWN2g0VjVoLTRjLTEuMSAwLTIgLjg5LTIgMnY2YzAgMS4xMS45IDIgMiAyem0wLTRoMnYyaC0ydi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci03Ij48cGF0aCBkPSJNMyA1SDF2MTZjMCAxLjEuOSAyIDIgMmgxNnYtMkgzVjV6bTE4LTRIN2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlYzYzAtMS4xLS45LTItMi0yem0wIDE2SDdWM2gxNHYxNHptLTgtMmw0LThWNWgtNnYyaDRsLTQgOGgyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci04Ij48cGF0aCBkPSJNMyA1SDF2MTZjMCAxLjEuOSAyIDIgMmgxNnYtMkgzVjV6bTE4LTRIN2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlYzYzAtMS4xLS45LTItMi0yem0wIDE2SDdWM2gxNHYxNHptLTgtMmgyYzEuMSAwIDItLjg5IDItMnYtMS41YzAtLjgzLS42Ny0xLjUtMS41LTEuNS44MyAwIDEuNS0uNjcgMS41LTEuNVY3YzAtMS4xMS0uOS0yLTItMmgtMmMtMS4xIDAtMiAuODktMiAydjEuNWMwIC44My42NyAxLjUgMS41IDEuNS0uODMgMC0xLjUuNjctMS41IDEuNVYxM2MwIDEuMTEuOSAyIDIgMnptMC04aDJ2MmgtMlY3em0wIDRoMnYyaC0ydi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci05Ij48cGF0aCBkPSJNMyA1SDF2MTZjMCAxLjEuOSAyIDIgMmgxNnYtMkgzVjV6bTE4LTRIN2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlYzYzAtMS4xLS45LTItMi0yem0wIDE2SDdWM2gxNHYxNHpNMTUgNWgtMmMtMS4xIDAtMiAuODktMiAydjJjMCAxLjExLjkgMiAyIDJoMnYyaC00djJoNGMxLjEgMCAyLS44OSAyLTJWN2MwLTEuMTEtLjktMi0yLTJ6bTAgNGgtMlY3aDJ2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJmaWx0ZXItOS1wbHVzIj48cGF0aCBkPSJNMyA1SDF2MTZjMCAxLjEuOSAyIDIgMmgxNnYtMkgzVjV6bTExIDdWOGMwLTEuMTEtLjktMi0yLTJoLTFjLTEuMSAwLTIgLjg5LTIgMnYxYzAgMS4xMS45IDIgMiAyaDF2MUg5djJoM2MxLjEgMCAyLS44OSAyLTJ6bS0zLTNWOGgxdjFoLTF6bTEwLThIN2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlYzYzAtMS4xLS45LTItMi0yem0wIDhoLTJWN2gtMnYyaC0ydjJoMnYyaDJ2LTJoMnY2SDdWM2gxNHY2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci1iLWFuZC13Ij48cGF0aCBkPSJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTZsLTctOHY4SDVsNy04VjVoN3YxNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJmaWx0ZXItY2VudGVyLWZvY3VzIj48cGF0aCBkPSJNNSAxNUgzdjRjMCAxLjEuOSAyIDIgMmg0di0ySDV2LTR6TTUgNWg0VjNINWMtMS4xIDAtMiAuOS0yIDJ2NGgyVjV6bTE0LTJoLTR2Mmg0djRoMlY1YzAtMS4xLS45LTItMi0yem0wIDE2aC00djJoNGMxLjEgMCAyLS45IDItMnYtNGgtMnY0ek0xMiA5Yy0xLjY2IDAtMyAxLjM0LTMgM3MxLjM0IDMgMyAzIDMtMS4zNCAzLTMtMS4zNC0zLTMtM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJmaWx0ZXItZHJhbWEiPjxwYXRoIGQ9Ik0xOS4zNSAxMC4wNEMxOC42NyA2LjU5IDE1LjY0IDQgMTIgNCA5LjExIDQgNi42MSA1LjY0IDUuMzYgOC4wNCAyLjM1IDguMzYgMCAxMC45IDAgMTRjMCAzLjMxIDIuNjkgNiA2IDZoMTNjMi43NiAwIDUtMi4yNCA1LTUgMC0yLjY0LTIuMDUtNC43OC00LjY1LTQuOTZ6TTE5IDE4SDZjLTIuMjEgMC00LTEuNzktNC00czEuNzktNCA0LTQgNCAxLjc5IDQgNGgyYzAtMi43Ni0xLjg2LTUuMDgtNC40LTUuNzhDOC42MSA2Ljg4IDEwLjIgNiAxMiA2YzMuMDMgMCA1LjUgMi40NyA1LjUgNS41di41SDE5YzEuNjUgMCAzIDEuMzUgMyAzcy0xLjM1IDMtMyAzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci1mcmFtZXMiPjxwYXRoIGQ9Ik0yMCA0aC00bC00LTQtNCA0SDRjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNmMwLTEuMS0uOS0yLTItMnptMCAxNkg0VjZoNC41MmwzLjUyLTMuNUwxNS41MiA2SDIwdjE0ek0xOCA4SDZ2MTBoMTIiPjwvcGF0aD48L2c+CjxnIGlkPSJmaWx0ZXItaGRyIj48cGF0aCBkPSJNMTQgNmwtMy43NSA1IDIuODUgMy44LTEuNiAxLjJDOS44MSAxMy43NSA3IDEwIDcgMTBsLTYgOGgyMkwxNCA2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci1ub25lIj48cGF0aCBkPSJNMyA1SDF2MTZjMCAxLjEuOSAyIDIgMmgxNnYtMkgzVjV6bTE4LTRIN2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlYzYzAtMS4xLS45LTItMi0yem0wIDE2SDdWM2gxNHYxNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJmaWx0ZXItdGlsdC1zaGlmdCI+PHBhdGggZD0iTTExIDQuMDdWMi4wNWMtMi4wMS4yLTMuODQgMS01LjMyIDIuMjFMNy4xIDUuNjljMS4xMS0uODYgMi40NC0xLjQ0IDMuOS0xLjYyem03LjMyLjE5QzE2Ljg0IDMuMDUgMTUuMDEgMi4yNSAxMyAyLjA1djIuMDJjMS40Ni4xOCAyLjc5Ljc2IDMuOSAxLjYybDEuNDItMS40M3pNMTkuOTMgMTFoMi4wMmMtLjItMi4wMS0xLTMuODQtMi4yMS01LjMyTDE4LjMxIDcuMWMuODYgMS4xMSAxLjQ0IDIuNDQgMS42MiAzLjl6TTUuNjkgNy4xTDQuMjYgNS42OEMzLjA1IDcuMTYgMi4yNSA4Ljk5IDIuMDUgMTFoMi4wMmMuMTgtMS40Ni43Ni0yLjc5IDEuNjItMy45ek00LjA3IDEzSDIuMDVjLjIgMi4wMSAxIDMuODQgMi4yMSA1LjMybDEuNDMtMS40M2MtLjg2LTEuMS0xLjQ0LTIuNDMtMS42Mi0zLjg5ek0xNSAxMmMwLTEuNjYtMS4zNC0zLTMtM3MtMyAxLjM0LTMgMyAxLjM0IDMgMyAzIDMtMS4zNCAzLTN6bTMuMzEgNC45bDEuNDMgMS40M2MxLjIxLTEuNDggMi4wMS0zLjMyIDIuMjEtNS4zMmgtMi4wMmMtLjE4IDEuNDUtLjc2IDIuNzgtMS42MiAzLjg5ek0xMyAxOS45M3YyLjAyYzIuMDEtLjIgMy44NC0xIDUuMzItMi4yMWwtMS40My0xLjQzYy0xLjEuODYtMi40MyAxLjQ0LTMuODkgMS42MnptLTcuMzItLjE5QzcuMTYgMjAuOTUgOSAyMS43NSAxMSAyMS45NXYtMi4wMmMtMS40Ni0uMTgtMi43OS0uNzYtMy45LTEuNjJsLTEuNDIgMS40M3oiPjwvcGF0aD48L2c+CjxnIGlkPSJmaWx0ZXItdmludGFnZSI+PHBhdGggZD0iTTE4LjcgMTIuNGMtLjI4LS4xNi0uNTctLjI5LS44Ni0uNC4yOS0uMTEuNTgtLjI0Ljg2LS40IDEuOTItMS4xMSAyLjk5LTMuMTIgMy01LjE5LTEuNzktMS4wMy00LjA3LTEuMTEtNiAwLS4yOC4xNi0uNTQuMzUtLjc4LjU0LjA1LS4zMS4wOC0uNjMuMDgtLjk1IDAtMi4yMi0xLjIxLTQuMTUtMy01LjE5QzEwLjIxIDEuODUgOSAzLjc4IDkgNmMwIC4zMi4wMy42NC4wOC45NS0uMjQtLjItLjUtLjM5LS43OC0uNTUtMS45Mi0xLjExLTQuMi0xLjAzLTYgMCAwIDIuMDcgMS4wNyA0LjA4IDMgNS4xOS4yOC4xNi41Ny4yOS44Ni40LS4yOS4xMS0uNTguMjQtLjg2LjQtMS45MiAxLjExLTIuOTkgMy4xMi0zIDUuMTkgMS43OSAxLjAzIDQuMDcgMS4xMSA2IDAgLjI4LS4xNi41NC0uMzUuNzgtLjU0LS4wNS4zMi0uMDguNjQtLjA4Ljk2IDAgMi4yMiAxLjIxIDQuMTUgMyA1LjE5IDEuNzktMS4wNCAzLTIuOTcgMy01LjE5IDAtLjMyLS4wMy0uNjQtLjA4LS45NS4yNC4yLjUuMzguNzguNTQgMS45MiAxLjExIDQuMiAxLjAzIDYgMC0uMDEtMi4wNy0xLjA4LTQuMDgtMy01LjE5ek0xMiAxNmMtMi4yMSAwLTQtMS43OS00LTRzMS43OS00IDQtNCA0IDEuNzkgNCA0LTEuNzkgNC00IDR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmxhcmUiPjxwYXRoIGQ9Ik03IDExSDF2Mmg2di0yem0yLjE3LTMuMjRMNy4wNSA1LjY0IDUuNjQgNy4wNWwyLjEyIDIuMTIgMS40MS0xLjQxek0xMyAxaC0ydjZoMlYxem01LjM2IDYuMDVsLTEuNDEtMS40MS0yLjEyIDIuMTIgMS40MSAxLjQxIDIuMTItMi4xMnpNMTcgMTF2Mmg2di0yaC02em0tNS0yYy0xLjY2IDAtMyAxLjM0LTMgM3MxLjM0IDMgMyAzIDMtMS4zNCAzLTMtMS4zNC0zLTMtM3ptMi44MyA3LjI0bDIuMTIgMi4xMiAxLjQxLTEuNDEtMi4xMi0yLjEyLTEuNDEgMS40MXptLTkuMTkuNzFsMS40MSAxLjQxIDIuMTItMi4xMi0xLjQxLTEuNDEtMi4xMiAyLjEyek0xMSAyM2gydi02aC0ydjZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmxhc2gtYXV0byI+PHBhdGggZD0iTTMgMnYxMmgzdjlsNy0xMkg5bDQtOUgzem0xNiAwaC0ybC0zLjIgOWgxLjlsLjctMmgzLjJsLjcgMmgxLjlMMTkgMnptLTIuMTUgNS42NUwxOCA0bDEuMTUgMy42NWgtMi4zeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZsYXNoLW9mZiI+PHBhdGggZD0iTTMuMjcgM0wyIDQuMjdsNSA1VjEzaDN2OWwzLjU4LTYuMTRMMTcuNzMgMjAgMTkgMTguNzMgMy4yNyAzek0xNyAxMGgtNGw0LThIN3YyLjE4bDguNDYgOC40NkwxNyAxMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJmbGFzaC1vbiI+PHBhdGggZD0iTTcgMnYxMWgzdjlsNy0xMmgtNGw0LTh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmxpcCI+PHBhdGggZD0iTTE1IDIxaDJ2LTJoLTJ2MnptNC0xMmgyVjdoLTJ2MnpNMyA1djE0YzAgMS4xLjkgMiAyIDJoNHYtMkg1VjVoNFYzSDVjLTEuMSAwLTIgLjktMiAyem0xNi0ydjJoMmMwLTEuMS0uOS0yLTItMnptLTggMjBoMlYxaC0ydjIyem04LTZoMnYtMmgtMnYyek0xNSA1aDJWM2gtMnYyem00IDhoMnYtMmgtMnYyem0wIDhjMS4xIDAgMi0uOSAyLTJoLTJ2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJncmFkaWVudCI+PHBhdGggZD0iTTExIDloMnYyaC0yem0tMiAyaDJ2Mkg5em00IDBoMnYyaC0yem0yLTJoMnYyaC0yek03IDloMnYySDd6bTEyLTZINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yek05IDE4SDd2LTJoMnYyem00IDBoLTJ2LTJoMnYyem00IDBoLTJ2LTJoMnYyem0yLTdoLTJ2MmgydjJoLTJ2LTJoLTJ2MmgtMnYtMmgtMnYySDl2LTJIN3YySDV2LTJoMnYtMkg1VjVoMTR2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJncmFpbiI+PHBhdGggZD0iTTEwIDEyYy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnpNNiA4Yy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnptMCA4Yy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnptMTItOGMxLjEgMCAyLS45IDItMnMtLjktMi0yLTItMiAuOS0yIDIgLjkgMiAyIDJ6bS00IDhjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem00LTRjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem0tNC00Yy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnptLTQtNGMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZ3JpZC1vZmYiPjxwYXRoIGQ9Ik04IDR2MS40NWwyIDJWNGg0djRoLTMuNDVsMiAySDE0djEuNDVsMiAyVjEwaDR2NGgtMy40NWwyIDJIMjB2MS40NWwyIDJWNGMwLTEuMS0uOS0yLTItMkg0LjU1bDIgMkg4em04IDBoNHY0aC00VjR6TTEuMjcgMS4yN0wwIDIuNTVsMiAyVjIwYzAgMS4xLjkgMiAyIDJoMTUuNDZsMiAyIDEuMjctMS4yN0wxLjI3IDEuMjd6TTEwIDEyLjU1TDExLjQ1IDE0SDEwdi0xLjQ1em0tNi02TDUuNDUgOEg0VjYuNTV6TTggMjBINHYtNGg0djR6bTAtNkg0di00aDMuNDVsLjU1LjU1VjE0em02IDZoLTR2LTRoMy40NWwuNTUuNTRWMjB6bTIgMHYtMS40NkwxNy40NiAyMEgxNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJncmlkLW9uIj48cGF0aCBkPSJNMjAgMkg0Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6TTggMjBINHYtNGg0djR6bTAtNkg0di00aDR2NHptMC02SDRWNGg0djR6bTYgMTJoLTR2LTRoNHY0em0wLTZoLTR2LTRoNHY0em0wLTZoLTRWNGg0djR6bTYgMTJoLTR2LTRoNHY0em0wLTZoLTR2LTRoNHY0em0wLTZoLTRWNGg0djR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaGRyLW9mZiI+PHBhdGggZD0iTTE3LjUgMTV2LTJoMS4xbC45IDJIMjFsLS45LTIuMWMuNS0uMi45LS44LjktMS40di0xYzAtLjgtLjctMS41LTEuNS0xLjVIMTZ2NC45bDEuMSAxLjFoLjR6bTAtNC41aDJ2MWgtMnYtMXptLTQuNSAwdi40bDEuNSAxLjV2LTEuOWMwLS44LS43LTEuNS0xLjUtMS41aC0xLjlsMS41IDEuNWguNHptLTMuNS0xbC03LTctMS4xIDFMNi45IDloLS40djJoLTJWOUgzdjZoMS41di0yLjVoMlYxNUg4di00LjlsMS41IDEuNVYxNWgzLjRsNy42IDcuNiAxLjEtMS4xLTEyLjEtMTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaGRyLW9uIj48cGF0aCBkPSJNMjEgMTEuNXYtMWMwLS44LS43LTEuNS0xLjUtMS41SDE2djZoMS41di0yaDEuMWwuOSAySDIxbC0uOS0yLjFjLjUtLjMuOS0uOC45LTEuNHptLTEuNSAwaC0ydi0xaDJ2MXptLTEzLS41aC0yVjlIM3Y2aDEuNXYtMi41aDJWMTVIOFY5SDYuNXYyek0xMyA5SDkuNXY2SDEzYy44IDAgMS41LS43IDEuNS0xLjV2LTNjMC0uOC0uNy0xLjUtMS41LTEuNXptMCA0LjVoLTJ2LTNoMnYzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imhkci1zdHJvbmciPjxwYXRoIGQ9Ik0xNyA2Yy0zLjMxIDAtNiAyLjY5LTYgNnMyLjY5IDYgNiA2IDYtMi42OSA2LTYtMi42OS02LTYtNnpNNSA4Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTQtMS43OS00LTQtNHptMCA2Yy0xLjEgMC0yLS45LTItMnMuOS0yIDItMiAyIC45IDIgMi0uOSAyLTIgMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJoZHItd2VhayI+PHBhdGggZD0iTTUgOGMtMi4yMSAwLTQgMS43OS00IDRzMS43OSA0IDQgNCA0LTEuNzkgNC00LTEuNzktNC00LTR6bTEyLTJjLTMuMzEgMC02IDIuNjktNiA2czIuNjkgNiA2IDYgNi0yLjY5IDYtNi0yLjY5LTYtNi02em0wIDEwYy0yLjIxIDAtNC0xLjc5LTQtNHMxLjc5LTQgNC00IDQgMS43OSA0IDQtMS43OSA0LTQgNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJoZWFsaW5nIj48cGF0aCBkPSJNMTcuNzMgMTIuMDJsMy45OC0zLjk4Yy4zOS0uMzkuMzktMS4wMiAwLTEuNDFsLTQuMzQtNC4zNGMtLjM5LS4zOS0xLjAyLS4zOS0xLjQxIDBsLTMuOTggMy45OEw4IDIuMjlDNy44IDIuMSA3LjU1IDIgNy4yOSAyYy0uMjUgMC0uNTEuMS0uNy4yOUwyLjI1IDYuNjNjLS4zOS4zOS0uMzkgMS4wMiAwIDEuNDFsMy45OCAzLjk4TDIuMjUgMTZjLS4zOS4zOS0uMzkgMS4wMiAwIDEuNDFsNC4zNCA0LjM0Yy4zOS4zOSAxLjAyLjM5IDEuNDEgMGwzLjk4LTMuOTggMy45OCAzLjk4Yy4yLjIuNDUuMjkuNzEuMjkuMjYgMCAuNTEtLjEuNzEtLjI5bDQuMzQtNC4zNGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC0zLjk5LTMuOTh6TTEyIDljLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptLTQuNzEgMS45NkwzLjY2IDcuMzRsMy42My0zLjYzIDMuNjIgMy42Mi0zLjYyIDMuNjN6TTEwIDEzYy0uNTUgMC0xLS40NS0xLTFzLjQ1LTEgMS0xIDEgLjQ1IDEgMS0uNDUgMS0xIDF6bTIgMmMtLjU1IDAtMS0uNDUtMS0xcy40NS0xIDEtMSAxIC40NSAxIDEtLjQ1IDEtMSAxem0yLTRjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptMi42NiA5LjM0bC0zLjYzLTMuNjIgMy42My0zLjYzIDMuNjIgMy42Mi0zLjYyIDMuNjN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaW1hZ2UiPjxwYXRoIGQ9Ik0yMSAxOVY1YzAtMS4xLS45LTItMi0ySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJ6TTguNSAxMy41bDIuNSAzLjAxTDE0LjUgMTJsNC41IDZINWwzLjUtNC41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImltYWdlLWFzcGVjdC1yYXRpbyI+PHBhdGggZD0iTTE2IDEwaC0ydjJoMnYtMnptMCA0aC0ydjJoMnYtMnptLTgtNEg2djJoMnYtMnptNCAwaC0ydjJoMnYtMnptOC02SDRjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNmMwLTEuMS0uOS0yLTItMnptMCAxNEg0VjZoMTZ2MTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaXNvIj48cGF0aCBkPSJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6TTUuNSA3LjVoMnYtMkg5djJoMlY5SDl2Mkg3LjVWOWgtMlY3LjV6TTE5IDE5SDVMMTkgNXYxNHptLTItMnYtMS41aC01VjE3aDV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibGFuZHNjYXBlIj48cGF0aCBkPSJNMTQgNmwtMy43NSA1IDIuODUgMy44LTEuNiAxLjJDOS44MSAxMy43NSA3IDEwIDcgMTBsLTYgOGgyMkwxNCA2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImxlYWstYWRkIj48cGF0aCBkPSJNNiAzSDN2M2MxLjY2IDAgMy0xLjM0IDMtM3ptOCAwaC0yYzAgNC45Ny00LjAzIDktOSA5djJjNi4wOCAwIDExLTQuOTMgMTEtMTF6bS00IDBIOGMwIDIuNzYtMi4yNCA1LTUgNXYyYzMuODcgMCA3LTMuMTMgNy03em0wIDE4aDJjMC00Ljk3IDQuMDMtOSA5LTl2LTJjLTYuMDcgMC0xMSA0LjkzLTExIDExem04IDBoM3YtM2MtMS42NiAwLTMgMS4zNC0zIDN6bS00IDBoMmMwLTIuNzYgMi4yNC01IDUtNXYtMmMtMy44NyAwLTcgMy4xMy03IDd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibGVhay1yZW1vdmUiPjxwYXRoIGQ9Ik0xMCAzSDhjMCAuMzctLjA0LjcyLS4xMiAxLjA2bDEuNTkgMS41OUM5LjgxIDQuODQgMTAgMy45NCAxMCAzek0zIDQuMjdsMi44NCAyLjg0QzUuMDMgNy42NyA0LjA2IDggMyA4djJjMS42MSAwIDMuMDktLjU1IDQuMjctMS40Nkw4LjcgOS45N0M3LjE0IDExLjI0IDUuMTYgMTIgMyAxMnYyYzIuNzEgMCA1LjE5LS45OSA3LjExLTIuNjJsMi41IDIuNUMxMC45OSAxNS44MSAxMCAxOC4yOSAxMCAyMWgyYzAtMi4xNi43Ni00LjE0IDIuMDMtNS42OWwxLjQzIDEuNDNDMTQuNTUgMTcuOTEgMTQgMTkuMzkgMTQgMjFoMmMwLTEuMDYuMzMtMi4wMy44OS0yLjg0TDE5LjczIDIxIDIxIDE5LjczIDQuMjcgMyAzIDQuMjd6TTE0IDNoLTJjMCAxLjUtLjM3IDIuOTEtMS4wMiA0LjE2bDEuNDYgMS40NkMxMy40MiA2Ljk4IDE0IDUuMDYgMTQgM3ptNS45NCAxMy4xMmMuMzQtLjA4LjY5LS4xMiAxLjA2LS4xMnYtMmMtLjk0IDAtMS44NC4xOS0yLjY2LjUybDEuNiAxLjZ6bS00LjU2LTQuNTZsMS40NiAxLjQ2QzE4LjA5IDEyLjM3IDE5LjUgMTIgMjEgMTJ2LTJjLTIuMDYgMC0zLjk4LjU4LTUuNjIgMS41NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJsZW5zIj48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJsaW5rZWQtY2FtZXJhIj48Y2lyY2xlIGN4PSIxMiIgY3k9IjE0IiByPSIzLjIiPjwvY2lyY2xlPjxwYXRoIGQ9Ik0xNiAzLjMzYzIuNTggMCA0LjY3IDIuMDkgNC42NyA0LjY3SDIyYzAtMy4zMS0yLjY5LTYtNi02djEuMzNNMTYgNmMxLjExIDAgMiAuODkgMiAyaDEuMzNjMC0xLjg0LTEuNDktMy4zMy0zLjMzLTMuMzNWNiI+PC9wYXRoPjxwYXRoIGQ9Ik0xNyA5YzAtMS4xMS0uODktMi0yLTJWNEg5TDcuMTcgNkg0Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjloLTV6bS01IDEwYy0yLjc2IDAtNS0yLjI0LTUtNXMyLjI0LTUgNS01IDUgMi4yNCA1IDUtMi4yNCA1LTUgNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJsb29rcyI+PHBhdGggZD0iTTEyIDEwYy0zLjg2IDAtNyAzLjE0LTcgN2gyYzAtMi43NiAyLjI0LTUgNS01czUgMi4yNCA1IDVoMmMwLTMuODYtMy4xNC03LTctN3ptMC00QzUuOTMgNiAxIDEwLjkzIDEgMTdoMmMwLTQuOTYgNC4wNC05IDktOXM5IDQuMDQgOSA5aDJjMC02LjA3LTQuOTMtMTEtMTEtMTF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibG9va3MtMyI+PHBhdGggZD0iTTE5LjAxIDNoLTE0Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bS00IDcuNWMwIC44My0uNjcgMS41LTEuNSAxLjUuODMgMCAxLjUuNjcgMS41IDEuNVYxNWMwIDEuMTEtLjkgMi0yIDJoLTR2LTJoNHYtMmgtMnYtMmgyVjloLTRWN2g0YzEuMSAwIDIgLjg5IDIgMnYxLjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibG9va3MtNCI+PHBhdGggZD0iTTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNCAxNGgtMnYtNEg5VjdoMnY0aDJWN2gydjEweiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imxvb2tzLTUiPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTQgNmgtNHYyaDJjMS4xIDAgMiAuODkgMiAydjJjMCAxLjExLS45IDItMiAySDl2LTJoNHYtMkg5VjdoNnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imxvb2tzLTYiPjxwYXRoIGQ9Ik0xMSAxNWgydi0yaC0ydjJ6bTgtMTJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNCA2aC00djJoMmMxLjEgMCAyIC44OSAyIDJ2MmMwIDEuMTEtLjkgMi0yIDJoLTJjLTEuMSAwLTItLjg5LTItMlY5YzAtMS4xMS45LTIgMi0yaDR2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJsb29rcy1vbmUiPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTUgMTRoLTJWOWgtMlY3aDR2MTB6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibG9va3MtdHdvIj48cGF0aCBkPSJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bS00IDhjMCAxLjExLS45IDItMiAyaC0ydjJoNHYySDl2LTRjMC0xLjExLjktMiAyLTJoMlY5SDlWN2g0YzEuMSAwIDIgLjg5IDIgMnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImxvdXBlIj48cGF0aCBkPSJNMTMgN2gtMnY0SDd2Mmg0djRoMnYtNGg0di0yaC00Vjd6bS0xLTVDNi40OSAyIDIgNi40OSAyIDEyczQuNDkgMTAgMTAgMTBoOGMxLjEgMCAyLS45IDItMnYtOGMwLTUuNTEtNC40OS0xMC0xMC0xMHptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibW9ub2Nocm9tZS1waG90b3MiPjxwYXRoIGQ9Ik0yMCA1aC0zLjJMMTUgM0g5TDcuMiA1SDRjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWN2MwLTEuMS0uOS0yLTItMnptMCAxNGgtOHYtMWMtMi44IDAtNS0yLjItNS01czIuMi01IDUtNVY3aDh2MTJ6bS0zLTZjMC0yLjgtMi4yLTUtNS01djEuOGMxLjggMCAzLjIgMS40IDMuMiAzLjJzLTEuNCAzLjItMy4yIDMuMlYxOGMyLjggMCA1LTIuMiA1LTV6bS04LjIgMGMwIDEuOCAxLjQgMy4yIDMuMiAzLjJWOS44Yy0xLjggMC0zLjIgMS40LTMuMiAzLjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibW92aWUtY3JlYXRpb24iPjxwYXRoIGQ9Ik0xOCA0bDIgNGgtM2wtMi00aC0ybDIgNGgtM2wtMi00SDhsMiA0SDdMNSA0SDRjLTEuMSAwLTEuOTkuOS0xLjk5IDJMMiAxOGMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjRoLTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibW92aWUtZmlsdGVyIj48cGF0aCBkPSJNMTggNGwyIDNoLTNsLTItM2gtMmwyIDNoLTNsLTItM0g4bDIgM0g3TDUgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY0aC00em0tNi43NSAxMS4yNUwxMCAxOGwtMS4yNS0yLjc1TDYgMTRsMi43NS0xLjI1TDEwIDEwbDEuMjUgMi43NUwxNCAxNGwtMi43NSAxLjI1em01LjY5LTMuMzFMMTYgMTRsLS45NC0yLjA2TDEzIDExbDIuMDYtLjk0TDE2IDhsLjk0IDIuMDZMMTkgMTFsLTIuMDYuOTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibXVzaWMtbm90ZSI+PHBhdGggZD0iTTEyIDN2MTAuNTVjLS41OS0uMzQtMS4yNy0uNTUtMi0uNTUtMi4yMSAwLTQgMS43OS00IDRzMS43OSA0IDQgNCA0LTEuNzkgNC00VjdoNFYzaC02eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im5hdHVyZSI+PHBhdGggZD0iTTEzIDE2LjEyYzMuNDctLjQxIDYuMTctMy4zNiA2LjE3LTYuOTUgMC0zLjg3LTMuMTMtNy03LTdzLTcgMy4xMy03IDdjMCAzLjQ3IDIuNTIgNi4zNCA1LjgzIDYuODlWMjBINXYyaDE0di0yaC02di0zLjg4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im5hdHVyZS1wZW9wbGUiPjxwYXRoIGQ9Ik0yMi4xNyA5LjE3YzAtMy44Ny0zLjEzLTctNy03cy03IDMuMTMtNyA3YzAgMy40NyAyLjUyIDYuMzQgNS44MyA2Ljg5VjIwSDZ2LTNoMXYtNGMwLS41NS0uNDUtMS0xLTFIM2MtLjU1IDAtMSAuNDUtMSAxdjRoMXY1aDE2di0yaC0zdi0zLjg4YzMuNDctLjQxIDYuMTctMy4zNiA2LjE3LTYuOTV6TTQuNSAxMWMuODMgMCAxLjUtLjY3IDEuNS0xLjVTNS4zMyA4IDQuNSA4IDMgOC42NyAzIDkuNSAzLjY3IDExIDQuNSAxMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJuYXZpZ2F0ZS1iZWZvcmUiPjxwYXRoIGQ9Ik0xNS40MSA3LjQxTDE0IDZsLTYgNiA2IDYgMS40MS0xLjQxTDEwLjgzIDEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im5hdmlnYXRlLW5leHQiPjxwYXRoIGQ9Ik0xMCA2TDguNTkgNy40MSAxMy4xNyAxMmwtNC41OCA0LjU5TDEwIDE4bDYtNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJwYWxldHRlIj48cGF0aCBkPSJNMTIgM2MtNC45NyAwLTkgNC4wMy05IDlzNC4wMyA5IDkgOWMuODMgMCAxLjUtLjY3IDEuNS0xLjUgMC0uMzktLjE1LS43NC0uMzktMS4wMS0uMjMtLjI2LS4zOC0uNjEtLjM4LS45OSAwLS44My42Ny0xLjUgMS41LTEuNUgxNmMyLjc2IDAgNS0yLjI0IDUtNSAwLTQuNDItNC4wMy04LTktOHptLTUuNSA5Yy0uODMgMC0xLjUtLjY3LTEuNS0xLjVTNS42NyA5IDYuNSA5IDggOS42NyA4IDEwLjUgNy4zMyAxMiA2LjUgMTJ6bTMtNEM4LjY3IDggOCA3LjMzIDggNi41UzguNjcgNSA5LjUgNXMxLjUuNjcgMS41IDEuNVMxMC4zMyA4IDkuNSA4em01IDBjLS44MyAwLTEuNS0uNjctMS41LTEuNVMxMy42NyA1IDE0LjUgNXMxLjUuNjcgMS41IDEuNVMxNS4zMyA4IDE0LjUgOHptMyA0Yy0uODMgMC0xLjUtLjY3LTEuNS0xLjVTMTYuNjcgOSAxNy41IDlzMS41LjY3IDEuNSAxLjUtLjY3IDEuNS0xLjUgMS41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBhbm9yYW1hIj48cGF0aCBkPSJNMjMgMThWNmMwLTEuMS0uOS0yLTItMkgzYy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yek04LjUgMTIuNWwyLjUgMy4wMUwxNC41IDExbDQuNSA2SDVsMy41LTQuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJwYW5vcmFtYS1maXNoLWV5ZSI+PHBhdGggZD0iTTEyIDJDNi40NyAyIDIgNi40NyAyIDEyczQuNDcgMTAgMTAgMTAgMTAtNC40NyAxMC0xMFMxNy41MyAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBhbm9yYW1hLWhvcml6b250YWwiPjxwYXRoIGQ9Ik0yMCA2LjU0djEwLjkxYy0yLjYtLjc3LTUuMjgtMS4xNi04LTEuMTYtMi43MiAwLTUuNC4zOS04IDEuMTZWNi41NGMyLjYuNzcgNS4yOCAxLjE2IDggMS4xNiAyLjcyLjAxIDUuNC0uMzggOC0xLjE2TTIxLjQzIDRjLS4xIDAtLjIuMDItLjMxLjA2QzE4LjE4IDUuMTYgMTUuMDkgNS43IDEyIDUuN2MtMy4wOSAwLTYuMTgtLjU1LTkuMTItMS42NC0uMTEtLjA0LS4yMi0uMDYtLjMxLS4wNi0uMzQgMC0uNTcuMjMtLjU3LjYzdjE0Ljc1YzAgLjM5LjIzLjYyLjU3LjYyLjEgMCAuMi0uMDIuMzEtLjA2IDIuOTQtMS4xIDYuMDMtMS42NCA5LjEyLTEuNjQgMy4wOSAwIDYuMTguNTUgOS4xMiAxLjY0LjExLjA0LjIxLjA2LjMxLjA2LjMzIDAgLjU3LS4yMy41Ny0uNjNWNC42M2MwLS40LS4yNC0uNjMtLjU3LS42M3oiPjwvcGF0aD48L2c+CjxnIGlkPSJwYW5vcmFtYS12ZXJ0aWNhbCI+PHBhdGggZD0iTTE5Ljk0IDIxLjEyYy0xLjEtMi45NC0xLjY0LTYuMDMtMS42NC05LjEyIDAtMy4wOS41NS02LjE4IDEuNjQtOS4xMi4wNC0uMTEuMDYtLjIyLjA2LS4zMSAwLS4zNC0uMjMtLjU3LS42My0uNTdINC42M2MtLjQgMC0uNjMuMjMtLjYzLjU3IDAgLjEuMDIuMi4wNi4zMUM1LjE2IDUuODIgNS43MSA4LjkxIDUuNzEgMTJjMCAzLjA5LS41NSA2LjE4LTEuNjQgOS4xMi0uMDUuMTEtLjA3LjIyLS4wNy4zMSAwIC4zMy4yMy41Ny42My41N2gxNC43NWMuMzkgMCAuNjMtLjI0LjYzLS41Ny0uMDEtLjEtLjAzLS4yLS4wNy0uMzF6TTYuNTQgMjBjLjc3LTIuNiAxLjE2LTUuMjggMS4xNi04IDAtMi43Mi0uMzktNS40LTEuMTYtOGgxMC45MWMtLjc3IDIuNi0xLjE2IDUuMjgtMS4xNiA4IDAgMi43Mi4zOSA1LjQgMS4xNiA4SDYuNTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGFub3JhbWEtd2lkZS1hbmdsZSI+PHBhdGggZD0iTTEyIDZjMi40NSAwIDQuNzEuMiA3LjI5LjY0LjQ3IDEuNzguNzEgMy41OC43MSA1LjM2IDAgMS43OC0uMjQgMy41OC0uNzEgNS4zNi0yLjU4LjQ0LTQuODQuNjQtNy4yOS42NHMtNC43MS0uMi03LjI5LS42NEM0LjI0IDE1LjU4IDQgMTMuNzggNCAxMmMwLTEuNzguMjQtMy41OC43MS01LjM2QzcuMjkgNi4yIDkuNTUgNiAxMiA2bTAtMmMtMi43MyAwLTUuMjIuMjQtNy45NS43MmwtLjkzLjE2LS4yNS45QzIuMjkgNy44NSAyIDkuOTMgMiAxMnMuMjkgNC4xNS44NyA2LjIybC4yNS44OS45My4xNmMyLjczLjQ5IDUuMjIuNzMgNy45NS43M3M1LjIyLS4yNCA3Ljk1LS43MmwuOTMtLjE2LjI1LS44OWMuNTgtMi4wOC44Ny00LjE2Ljg3LTYuMjNzLS4yOS00LjE1LS44Ny02LjIybC0uMjUtLjg5LS45My0uMTZDMTcuMjIgNC4yNCAxNC43MyA0IDEyIDR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGhvdG8iPjxwYXRoIGQ9Ik0yMSAxOVY1YzAtMS4xLS45LTItMi0ySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJ6TTguNSAxMy41bDIuNSAzLjAxTDE0LjUgMTJsNC41IDZINWwzLjUtNC41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBob3RvLWFsYnVtIj48cGF0aCBkPSJNMTggMkg2Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDEyYzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6TTYgNGg1djhsLTIuNS0xLjVMNiAxMlY0em0wIDE1bDMtMy44NiAyLjE0IDIuNTggMy0zLjg2TDE4IDE5SDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGhvdG8tY2FtZXJhIj48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIzLjIiPjwvY2lyY2xlPjxwYXRoIGQ9Ik05IDJMNy4xNyA0SDRjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNmMwLTEuMS0uOS0yLTItMmgtMy4xN0wxNSAySDl6bTMgMTVjLTIuNzYgMC01LTIuMjQtNS01czIuMjQtNSA1LTUgNSAyLjI0IDUgNS0yLjI0IDUtNSA1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBob3RvLWZpbHRlciI+PHBhdGggZD0iTTE5LjAyIDEwdjlINVY1aDlWM0g1LjAyYy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0ydi05aC0yek0xNyAxMGwuOTQtMi4wNkwyMCA3bC0yLjA2LS45NEwxNyA0bC0uOTQgMi4wNkwxNCA3bDIuMDYuOTR6bS0zLjc1Ljc1TDEyIDhsLTEuMjUgMi43NUw4IDEybDIuNzUgMS4yNUwxMiAxNmwxLjI1LTIuNzVMMTYgMTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGhvdG8tbGlicmFyeSI+PHBhdGggZD0iTTIyIDE2VjRjMC0xLjEtLjktMi0yLTJIOGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMnptLTExLTRsMi4wMyAyLjcxTDE2IDExbDQgNUg4bDMtNHpNMiA2djE0YzAgMS4xLjkgMiAyIDJoMTR2LTJINFY2SDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGhvdG8tc2l6ZS1zZWxlY3QtYWN0dWFsIj48cGF0aCBkPSJNMjEgM0gzQzIgMyAxIDQgMSA1djE0YzAgMS4xLjkgMiAyIDJoMThjMSAwIDItMSAyLTJWNWMwLTEtMS0yLTItMnpNNSAxN2wzLjUtNC41IDIuNSAzLjAxTDE0LjUgMTFsNC41IDZINXoiPjwvcGF0aD48L2c+CjxnIGlkPSJwaG90by1zaXplLXNlbGVjdC1sYXJnZSI+PHBhdGggZD0iTTIxIDE1aDJ2MmgtMnYtMnptMC00aDJ2MmgtMnYtMnptMiA4aC0ydjJjMSAwIDItMSAyLTJ6TTEzIDNoMnYyaC0yVjN6bTggNGgydjJoLTJWN3ptMC00djJoMmMwLTEtMS0yLTItMnpNMSA3aDJ2MkgxVjd6bTE2LTRoMnYyaC0yVjN6bTAgMTZoMnYyaC0ydi0yek0zIDNDMiAzIDEgNCAxIDVoMlYzem02IDBoMnYySDlWM3pNNSAzaDJ2Mkg1VjN6bS00IDh2OGMwIDEuMS45IDIgMiAyaDEyVjExSDF6bTIgOGwyLjUtMy4yMSAxLjc5IDIuMTUgMi41LTMuMjJMMTMgMTlIM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJwaG90by1zaXplLXNlbGVjdC1zbWFsbCI+PHBhdGggZD0iTTIzIDE1aC0ydjJoMnYtMnptMC00aC0ydjJoMnYtMnptMCA4aC0ydjJjMSAwIDItMSAyLTJ6TTE1IDNoLTJ2MmgyVjN6bTggNGgtMnYyaDJWN3ptLTItNHYyaDJjMC0xLTEtMi0yLTJ6TTMgMjFoOHYtNkgxdjRjMCAxLjEuOSAyIDIgMnpNMyA3SDF2MmgyVjd6bTEyIDEyaC0ydjJoMnYtMnptNC0xNmgtMnYyaDJWM3ptMCAxNmgtMnYyaDJ2LTJ6TTMgM0MyIDMgMSA0IDEgNWgyVjN6bTAgOEgxdjJoMnYtMnptOC04SDl2MmgyVjN6TTcgM0g1djJoMlYzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBpY3R1cmUtYXMtcGRmIj48cGF0aCBkPSJNMjAgMkg4Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDEyYzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS04LjUgNy41YzAgLjgzLS42NyAxLjUtMS41IDEuNUg5djJINy41VjdIMTBjLjgzIDAgMS41LjY3IDEuNSAxLjV2MXptNSAyYzAgLjgzLS42NyAxLjUtMS41IDEuNWgtMi41VjdIMTVjLjgzIDAgMS41LjY3IDEuNSAxLjV2M3ptNC0zSDE5djFoMS41VjExSDE5djJoLTEuNVY3aDN2MS41ek05IDkuNWgxdi0xSDl2MXpNNCA2SDJ2MTRjMCAxLjEuOSAyIDIgMmgxNHYtMkg0VjZ6bTEwIDUuNWgxdi0zaC0xdjN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icG9ydHJhaXQiPjxwYXRoIGQ9Ik0xMiAxMi4yNWMxLjI0IDAgMi4yNS0xLjAxIDIuMjUtMi4yNVMxMy4yNCA3Ljc1IDEyIDcuNzUgOS43NSA4Ljc2IDkuNzUgMTBzMS4wMSAyLjI1IDIuMjUgMi4yNXptNC41IDRjMC0xLjUtMy0yLjI1LTQuNS0yLjI1cy00LjUuNzUtNC41IDIuMjVWMTdoOXYtLjc1ek0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxNkg1VjVoMTR2MTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmVtb3ZlLXJlZC1leWUiPjxwYXRoIGQ9Ik0xMiA0LjVDNyA0LjUgMi43MyA3LjYxIDEgMTJjMS43MyA0LjM5IDYgNy41IDExIDcuNXM5LjI3LTMuMTEgMTEtNy41Yy0xLjczLTQuMzktNi03LjUtMTEtNy41ek0xMiAxN2MtMi43NiAwLTUtMi4yNC01LTVzMi4yNC01IDUtNSA1IDIuMjQgNSA1LTIuMjQgNS01IDV6bTAtOGMtMS42NiAwLTMgMS4zNC0zIDNzMS4zNCAzIDMgMyAzLTEuMzQgMy0zLTEuMzQtMy0zLTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icm90YXRlLTkwLWRlZ3JlZXMtY2N3Ij48cGF0aCBkPSJNNy4zNCA2LjQxTC44NiAxMi45bDYuNDkgNi40OCA2LjQ5LTYuNDgtNi41LTYuNDl6TTMuNjkgMTIuOWwzLjY2LTMuNjZMMTEgMTIuOWwtMy42NiAzLjY2LTMuNjUtMy42NnptMTUuNjctNi4yNkMxNy42MSA0Ljg4IDE1LjMgNCAxMyA0Vi43Nkw4Ljc2IDUgMTMgOS4yNFY2YzEuNzkgMCAzLjU4LjY4IDQuOTUgMi4wNSAyLjczIDIuNzMgMi43MyA3LjE3IDAgOS45QzE2LjU4IDE5LjMyIDE0Ljc5IDIwIDEzIDIwYy0uOTcgMC0xLjk0LS4yMS0yLjg0LS42MWwtMS40OSAxLjQ5QzEwLjAyIDIxLjYyIDExLjUxIDIyIDEzIDIyYzIuMyAwIDQuNjEtLjg4IDYuMzYtMi42NCAzLjUyLTMuNTEgMy41Mi05LjIxIDAtMTIuNzJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icm90YXRlLWxlZnQiPjxwYXRoIGQ9Ik03LjExIDguNTNMNS43IDcuMTFDNC44IDguMjcgNC4yNCA5LjYxIDQuMDcgMTFoMi4wMmMuMTQtLjg3LjQ5LTEuNzIgMS4wMi0yLjQ3ek02LjA5IDEzSDQuMDdjLjE3IDEuMzkuNzIgMi43MyAxLjYyIDMuODlsMS40MS0xLjQyYy0uNTItLjc1LS44Ny0xLjU5LTEuMDEtMi40N3ptMS4wMSA1LjMyYzEuMTYuOSAyLjUxIDEuNDQgMy45IDEuNjFWMTcuOWMtLjg3LS4xNS0xLjcxLS40OS0yLjQ2LTEuMDNMNy4xIDE4LjMyek0xMyA0LjA3VjFMOC40NSA1LjU1IDEzIDEwVjYuMDljMi44NC40OCA1IDIuOTQgNSA1Ljkxcy0yLjE2IDUuNDMtNSA1LjkxdjIuMDJjMy45NS0uNDkgNy0zLjg1IDctNy45M3MtMy4wNS03LjQ0LTctNy45M3oiPjwvcGF0aD48L2c+CjxnIGlkPSJyb3RhdGUtcmlnaHQiPjxwYXRoIGQ9Ik0xNS41NSA1LjU1TDExIDF2My4wN0M3LjA2IDQuNTYgNCA3LjkyIDQgMTJzMy4wNSA3LjQ0IDcgNy45M3YtMi4wMmMtMi44NC0uNDgtNS0yLjk0LTUtNS45MXMyLjE2LTUuNDMgNS01LjkxVjEwbDQuNTUtNC40NXpNMTkuOTMgMTFjLS4xNy0xLjM5LS43Mi0yLjczLTEuNjItMy44OWwtMS40MiAxLjQyYy41NC43NS44OCAxLjYgMS4wMiAyLjQ3aDIuMDJ6TTEzIDE3Ljl2Mi4wMmMxLjM5LS4xNyAyLjc0LS43MSAzLjktMS42MWwtMS40NC0xLjQ0Yy0uNzUuNTQtMS41OS44OS0yLjQ2IDEuMDN6bTMuODktMi40MmwxLjQyIDEuNDFjLjktMS4xNiAxLjQ1LTIuNSAxLjYyLTMuODloLTIuMDJjLS4xNC44Ny0uNDggMS43Mi0xLjAyIDIuNDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2xpZGVzaG93Ij48cGF0aCBkPSJNMTAgOHY4bDUtNC01LTR6bTktNUg1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTZINVY1aDE0djE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InN0cmFpZ2h0ZW4iPjxwYXRoIGQ9Ik0yMSA2SDNjLTEuMSAwLTIgLjktMiAydjhjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yem0wIDEwSDNWOGgydjRoMlY4aDJ2NGgyVjhoMnY0aDJWOGgydjRoMlY4aDJ2OHoiPjwvcGF0aD48L2c+CjxnIGlkPSJzdHlsZSI+PHBhdGggZD0iTTIuNTMgMTkuNjVsMS4zNC41NnYtOS4wM2wtMi40MyA1Ljg2Yy0uNDEgMS4wMi4wOCAyLjE5IDEuMDkgMi42MXptMTkuNS0zLjdMMTcuMDcgMy45OGMtLjMxLS43NS0xLjA0LTEuMjEtMS44MS0xLjIzLS4yNiAwLS41My4wNC0uNzkuMTVMNy4xIDUuOTVjLS43NS4zMS0xLjIxIDEuMDMtMS4yMyAxLjgtLjAxLjI3LjA0LjU0LjE1LjhsNC45NiAxMS45N2MuMzEuNzYgMS4wNSAxLjIyIDEuODMgMS4yMy4yNiAwIC41Mi0uMDUuNzctLjE1bDcuMzYtMy4wNWMxLjAyLS40MiAxLjUxLTEuNTkgMS4wOS0yLjZ6TTcuODggOC43NWMtLjU1IDAtMS0uNDUtMS0xcy40NS0xIDEtMSAxIC40NSAxIDEtLjQ1IDEtMSAxem0tMiAxMWMwIDEuMS45IDIgMiAyaDEuNDVsLTMuNDUtOC4zNHY2LjM0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InN3aXRjaC1jYW1lcmEiPjxwYXRoIGQ9Ik0yMCA0aC0zLjE3TDE1IDJIOUw3LjE3IDRINGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0tNSAxMS41VjEzSDl2Mi41TDUuNSAxMiA5IDguNVYxMWg2VjguNWwzLjUgMy41LTMuNSAzLjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3dpdGNoLXZpZGVvIj48cGF0aCBkPSJNMTggOS41VjZjMC0uNTUtLjQ1LTEtMS0xSDNjLS41NSAwLTEgLjQ1LTEgMXYxMmMwIC41NS40NSAxIDEgMWgxNGMuNTUgMCAxLS40NSAxLTF2LTMuNWw0IDR2LTEzbC00IDR6bS01IDZWMTNIN3YyLjVMMy41IDEyIDcgOC41VjExaDZWOC41bDMuNSAzLjUtMy41IDMuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0YWctZmFjZXMiPjxwYXRoIGQ9Ik0xMS45OSAyQzYuNDcgMiAyIDYuNDggMiAxMnM0LjQ3IDEwIDkuOTkgMTBDMTcuNTIgMjIgMjIgMTcuNTIgMjIgMTJTMTcuNTIgMiAxMS45OSAyek0xMiAyMGMtNC40MiAwLTgtMy41OC04LThzMy41OC04IDgtOCA4IDMuNTggOCA4LTMuNTggOC04IDh6bTMuNS05Yy44MyAwIDEuNS0uNjcgMS41LTEuNVMxNi4zMyA4IDE1LjUgOCAxNCA4LjY3IDE0IDkuNXMuNjcgMS41IDEuNSAxLjV6bS03IDBjLjgzIDAgMS41LS42NyAxLjUtMS41UzkuMzMgOCA4LjUgOCA3IDguNjcgNyA5LjUgNy42NyAxMSA4LjUgMTF6bTMuNSA2LjVjMi4zMyAwIDQuMzEtMS40NiA1LjExLTMuNUg2Ljg5Yy44IDIuMDQgMi43OCAzLjUgNS4xMSAzLjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idGV4dHVyZSI+PHBhdGggZD0iTTE5LjUxIDMuMDhMMy4wOCAxOS41MWMuMDkuMzQuMjcuNjUuNTEuOS4yNS4yNC41Ni40Mi45LjUxTDIwLjkzIDQuNDljLS4xOS0uNjktLjczLTEuMjMtMS40Mi0xLjQxek0xMS44OCAzTDMgMTEuODh2Mi44M0wxNC43MSAzaC0yLjgzek01IDNjLTEuMSAwLTIgLjktMiAydjJsNC00SDV6bTE0IDE4Yy41NSAwIDEuMDUtLjIyIDEuNDEtLjU5LjM3LS4zNi41OS0uODYuNTktMS40MXYtMmwtNCA0aDJ6bS05LjcxIDBoMi44M0wyMSAxMi4xMlY5LjI5TDkuMjkgMjF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idGltZWxhcHNlIj48cGF0aCBkPSJNMTYuMjQgNy43NkMxNS4wNyA2LjU5IDEzLjU0IDYgMTIgNnY2bC00LjI0IDQuMjRjMi4zNCAyLjM0IDYuMTQgMi4zNCA4LjQ5IDAgMi4zNC0yLjM0IDIuMzQtNi4xNC0uMDEtOC40OHpNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MiAwLTgtMy41OC04LThzMy41OC04IDgtOCA4IDMuNTggOCA4LTMuNTggOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idGltZXIiPjxwYXRoIGQ9Ik0xNSAxSDl2Mmg2VjF6bS00IDEzaDJWOGgtMnY2em04LjAzLTYuNjFsMS40Mi0xLjQyYy0uNDMtLjUxLS45LS45OS0xLjQxLTEuNDFsLTEuNDIgMS40MkMxNi4wNyA0Ljc0IDE0LjEyIDQgMTIgNGMtNC45NyAwLTkgNC4wMy05IDlzNC4wMiA5IDkgOSA5LTQuMDMgOS05YzAtMi4xMi0uNzQtNC4wNy0xLjk3LTUuNjF6TTEyIDIwYy0zLjg3IDAtNy0zLjEzLTctN3MzLjEzLTcgNy03IDcgMy4xMyA3IDctMy4xMyA3LTcgN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJ0aW1lci0xMCI+PHBhdGggZD0iTTAgNy43MlY5LjRsMy0xVjE4aDJWNmgtLjI1TDAgNy43MnptMjMuNzggNi42NWMtLjE0LS4yOC0uMzUtLjUzLS42My0uNzQtLjI4LS4yMS0uNjEtLjM5LTEuMDEtLjUzcy0uODUtLjI3LTEuMzUtLjM4Yy0uMzUtLjA3LS42NC0uMTUtLjg3LS4yMy0uMjMtLjA4LS40MS0uMTYtLjU1LS4yNS0uMTQtLjA5LS4yMy0uMTktLjI4LS4zLS4wNS0uMTEtLjA4LS4yNC0uMDgtLjM5IDAtLjE0LjAzLS4yOC4wOS0uNDEuMDYtLjEzLjE1LS4yNS4yNy0uMzQuMTItLjEuMjctLjE4LjQ1LS4yNHMuNC0uMDkuNjQtLjA5Yy4yNSAwIC40Ny4wNC42Ni4xMS4xOS4wNy4zNS4xNy40OC4yOS4xMy4xMi4yMi4yNi4yOS40Mi4wNi4xNi4xLjMyLjEuNDloMS45NWMwLS4zOS0uMDgtLjc1LS4yNC0xLjA5LS4xNi0uMzQtLjM5LS42My0uNjktLjg4LS4zLS4yNS0uNjYtLjQ0LTEuMDktLjU5QzIxLjQ5IDkuMDcgMjEgOSAyMC40NiA5Yy0uNTEgMC0uOTguMDctMS4zOS4yMS0uNDEuMTQtLjc3LjMzLTEuMDYuNTctLjI5LjI0LS41MS41Mi0uNjcuODQtLjE2LjMyLS4yMy42NS0uMjMgMS4wMXMuMDguNjkuMjMuOTZjLjE1LjI4LjM2LjUyLjY0LjczLjI3LjIxLjYuMzguOTguNTMuMzguMTQuODEuMjYgMS4yNy4zNi4zOS4wOC43MS4xNy45NS4yNnMuNDMuMTkuNTcuMjljLjEzLjEuMjIuMjIuMjcuMzQuMDUuMTIuMDcuMjUuMDcuMzkgMCAuMzItLjEzLjU3LS40Ljc3LS4yNy4yLS42Ni4yOS0xLjE3LjI5LS4yMiAwLS40My0uMDItLjY0LS4wOC0uMjEtLjA1LS40LS4xMy0uNTYtLjI0LS4xNy0uMTEtLjMtLjI2LS40MS0uNDQtLjExLS4xOC0uMTctLjQxLS4xOC0uNjdoLTEuODljMCAuMzYuMDguNzEuMjQgMS4wNS4xNi4zNC4zOS42NS43LjkzLjMxLjI3LjY5LjQ5IDEuMTUuNjYuNDYuMTcuOTguMjUgMS41OC4yNS41MyAwIDEuMDEtLjA2IDEuNDQtLjE5LjQzLS4xMy44LS4zMSAxLjExLS41NC4zMS0uMjMuNTQtLjUxLjcxLS44My4xNy0uMzIuMjUtLjY3LjI1LTEuMDYtLjAyLS40LS4wOS0uNzQtLjI0LTEuMDJ6bS05Ljk2LTcuMzJjLS4zNC0uNC0uNzUtLjctMS4yMy0uODgtLjQ3LS4xOC0xLjAxLS4yNy0xLjU5LS4yNy0uNTggMC0xLjExLjA5LTEuNTkuMjctLjQ4LjE4LS44OS40Ny0xLjIzLjg4LS4zNC40MS0uNi45My0uNzkgMS41OS0uMTguNjUtLjI4IDEuNDUtLjI4IDIuMzl2MS45MmMwIC45NC4wOSAxLjc0LjI4IDIuMzkuMTkuNjYuNDUgMS4xOS44IDEuNi4zNC40MS43NS43MSAxLjIzLjg5LjQ4LjE4IDEuMDEuMjggMS41OS4yOC41OSAwIDEuMTItLjA5IDEuNTktLjI4LjQ4LS4xOC44OC0uNDggMS4yMi0uODkuMzQtLjQxLjYtLjk0Ljc4LTEuNi4xOC0uNjUuMjgtMS40NS4yOC0yLjM5di0xLjkyYzAtLjk0LS4wOS0xLjc0LS4yOC0yLjM5LS4xOC0uNjYtLjQ0LTEuMTktLjc4LTEuNTl6bS0uOTIgNi4xN2MwIC42LS4wNCAxLjExLS4xMiAxLjUzLS4wOC40Mi0uMi43Ni0uMzYgMS4wMi0uMTYuMjYtLjM2LjQ1LS41OS41Ny0uMjMuMTItLjUxLjE4LS44Mi4xOC0uMyAwLS41OC0uMDYtLjgyLS4xOHMtLjQ0LS4zMS0uNi0uNTdjLS4xNi0uMjYtLjI5LS42LS4zOC0xLjAyLS4wOS0uNDItLjEzLS45My0uMTMtMS41M3YtMi41YzAtLjYuMDQtMS4xMS4xMy0xLjUyLjA5LS40MS4yMS0uNzQuMzgtMSAuMTYtLjI1LjM2LS40My42LS41NS4yNC0uMTEuNTEtLjE3LjgxLS4xNy4zMSAwIC41OC4wNi44MS4xNy4yNC4xMS40NC4yOS42LjU1LjE2LjI1LjI5LjU4LjM3Ljk5LjA4LjQxLjEzLjkyLjEzIDEuNTJ2Mi41MXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0aW1lci0zIj48cGF0aCBkPSJNMTEuNjEgMTIuOTdjLS4xNi0uMjQtLjM2LS40Ni0uNjItLjY1LS4yNS0uMTktLjU2LS4zNS0uOTMtLjQ4LjMtLjE0LjU3LS4zLjgtLjUuMjMtLjIuNDItLjQxLjU3LS42NC4xNS0uMjMuMjctLjQ2LjM0LS43MS4wOC0uMjQuMTEtLjQ5LjExLS43MyAwLS41NS0uMDktMS4wNC0uMjgtMS40Ni0uMTgtLjQyLS40NC0uNzctLjc4LTEuMDYtLjMzLS4yOC0uNzMtLjUtMS4yLS42NC0uNDUtLjEzLS45Ny0uMi0xLjUzLS4yLS41NSAwLTEuMDYuMDgtMS41Mi4yNC0uNDcuMTctLjg3LjQtMS4yLjY5LS4zMy4yOS0uNi42My0uNzggMS4wMy0uMi4zOS0uMjkuODMtLjI5IDEuMjloMS45OGMwLS4yNi4wNS0uNDkuMTQtLjY5LjA5LS4yLjIyLS4zOC4zOC0uNTIuMTctLjE0LjM2LS4yNS41OC0uMzMuMjItLjA4LjQ2LS4xMi43My0uMTIuNjEgMCAxLjA2LjE2IDEuMzYuNDcuMy4zMS40NC43NS40NCAxLjMyIDAgLjI3LS4wNC41Mi0uMTIuNzQtLjA4LjIyLS4yMS40MS0uMzguNTctLjE3LjE2LS4zOC4yOC0uNjMuMzctLjI1LjA5LS41NS4xMy0uODkuMTNINi43MnYxLjU3SDcuOWMuMzQgMCAuNjQuMDQuOTEuMTEuMjcuMDguNS4xOS42OS4zNS4xOS4xNi4zNC4zNi40NC42MS4xLjI0LjE2LjU0LjE2Ljg3IDAgLjYyLS4xOCAxLjA5LS41MyAxLjQyLS4zNS4zMy0uODQuNDktMS40NS40OS0uMjkgMC0uNTYtLjA0LS44LS4xMy0uMjQtLjA4LS40NC0uMi0uNjEtLjM2LS4xNy0uMTYtLjMtLjM0LS4zOS0uNTYtLjA5LS4yMi0uMTQtLjQ2LS4xNC0uNzJINC4xOWMwIC41NS4xMSAxLjAzLjMyIDEuNDUuMjEuNDIuNS43Ny44NiAxLjA1cy43Ny40OSAxLjI0LjYzLjk2LjIxIDEuNDguMjFjLjU3IDAgMS4wOS0uMDggMS41OC0uMjMuNDktLjE1LjkxLS4zOCAxLjI2LS42OC4zNi0uMy42NC0uNjYuODQtMS4xLjItLjQzLjMtLjkzLjMtMS40OCAwLS4yOS0uMDQtLjU4LS4xMS0uODYtLjA4LS4yNS0uMTktLjUxLS4zNS0uNzZ6bTkuMjYgMS40Yy0uMTQtLjI4LS4zNS0uNTMtLjYzLS43NC0uMjgtLjIxLS42MS0uMzktMS4wMS0uNTNzLS44NS0uMjctMS4zNS0uMzhjLS4zNS0uMDctLjY0LS4xNS0uODctLjIzLS4yMy0uMDgtLjQxLS4xNi0uNTUtLjI1LS4xNC0uMDktLjIzLS4xOS0uMjgtLjMtLjA1LS4xMS0uMDgtLjI0LS4wOC0uMzlzLjAzLS4yOC4wOS0uNDFjLjA2LS4xMy4xNS0uMjUuMjctLjM0LjEyLS4xLjI3LS4xOC40NS0uMjRzLjQtLjA5LjY0LS4wOWMuMjUgMCAuNDcuMDQuNjYuMTEuMTkuMDcuMzUuMTcuNDguMjkuMTMuMTIuMjIuMjYuMjkuNDIuMDYuMTYuMS4zMi4xLjQ5aDEuOTVjMC0uMzktLjA4LS43NS0uMjQtMS4wOS0uMTYtLjM0LS4zOS0uNjMtLjY5LS44OC0uMy0uMjUtLjY2LS40NC0xLjA5LS41OS0uNDMtLjE1LS45Mi0uMjItMS40Ni0uMjItLjUxIDAtLjk4LjA3LTEuMzkuMjEtLjQxLjE0LS43Ny4zMy0xLjA2LjU3LS4yOS4yNC0uNTEuNTItLjY3Ljg0LS4xNi4zMi0uMjMuNjUtLjIzIDEuMDFzLjA4LjY4LjIzLjk2Yy4xNS4yOC4zNy41Mi42NC43My4yNy4yMS42LjM4Ljk4LjUzLjM4LjE0LjgxLjI2IDEuMjcuMzYuMzkuMDguNzEuMTcuOTUuMjZzLjQzLjE5LjU3LjI5Yy4xMy4xLjIyLjIyLjI3LjM0LjA1LjEyLjA3LjI1LjA3LjM5IDAgLjMyLS4xMy41Ny0uNC43Ny0uMjcuMi0uNjYuMjktMS4xNy4yOS0uMjIgMC0uNDMtLjAyLS42NC0uMDgtLjIxLS4wNS0uNC0uMTMtLjU2LS4yNC0uMTctLjExLS4zLS4yNi0uNDEtLjQ0LS4xMS0uMTgtLjE3LS40MS0uMTgtLjY3aC0xLjg5YzAgLjM2LjA4LjcxLjI0IDEuMDUuMTYuMzQuMzkuNjUuNy45My4zMS4yNy42OS40OSAxLjE1LjY2LjQ2LjE3Ljk4LjI1IDEuNTguMjUuNTMgMCAxLjAxLS4wNiAxLjQ0LS4xOS40My0uMTMuOC0uMzEgMS4xMS0uNTQuMzEtLjIzLjU0LS41MS43MS0uODMuMTctLjMyLjI1LS42Ny4yNS0xLjA2LS4wMi0uNC0uMDktLjc0LS4yNC0xLjAyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRpbWVyLW9mZiI+PHBhdGggZD0iTTE5LjA0IDQuNTVsLTEuNDIgMS40MkMxNi4wNyA0Ljc0IDE0LjEyIDQgMTIgNGMtMS44MyAwLTMuNTMuNTUtNC45NSAxLjQ4bDEuNDYgMS40NkM5LjUzIDYuMzUgMTAuNzMgNiAxMiA2YzMuODcgMCA3IDMuMTMgNyA3IDAgMS4yNy0uMzUgMi40Ny0uOTQgMy40OWwxLjQ1IDEuNDVDMjAuNDUgMTYuNTMgMjEgMTQuODMgMjEgMTNjMC0yLjEyLS43NC00LjA3LTEuOTctNS42MWwxLjQyLTEuNDItMS40MS0xLjQyek0xNSAxSDl2Mmg2VjF6bS00IDguNDRsMiAyVjhoLTJ2MS40NHpNMy4wMiA0TDEuNzUgNS4yNyA0LjUgOC4wM0MzLjU1IDkuNDUgMyAxMS4xNiAzIDEzYzAgNC45NyA0LjAyIDkgOSA5IDEuODQgMCAzLjU1LS41NSA0Ljk4LTEuNWwyLjUgMi41IDEuMjctMS4yNy03LjcxLTcuNzFMMy4wMiA0ek0xMiAyMGMtMy44NyAwLTctMy4xMy03LTcgMC0xLjI4LjM1LTIuNDguOTUtMy41Mmw5LjU2IDkuNTZjLTEuMDMuNjEtMi4yMy45Ni0zLjUxLjk2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRvbmFsaXR5Ij48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptLTEgMTcuOTNjLTMuOTQtLjQ5LTctMy44NS03LTcuOTNzMy4wNS03LjQ0IDctNy45M3YxNS44NnptMi0xNS44NmMxLjAzLjEzIDIgLjQ1IDIuODcuOTNIMTN2LS45M3pNMTMgN2g1LjI0Yy4yNS4zMS40OC42NS42OCAxSDEzVjd6bTAgM2g2Ljc0Yy4wOC4zMy4xNS42Ni4xOSAxSDEzdi0xem0wIDkuOTNWMTloMi44N2MtLjg3LjQ4LTEuODQuOC0yLjg3Ljkzek0xOC4yNCAxN0gxM3YtMWg1LjkyYy0uMi4zNS0uNDMuNjktLjY4IDF6bTEuNS0zSDEzdi0xaDYuOTNjLS4wNC4zNC0uMTEuNjctLjE5IDF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idHJhbnNmb3JtIj48cGF0aCBkPSJNMjIgMTh2LTJIOFY0aDJMNyAxIDQgNGgydjJIMnYyaDR2OGMwIDEuMS45IDIgMiAyaDh2MmgtMmwzIDMgMy0zaC0ydi0yaDR6TTEwIDhoNnY2aDJWOGMwLTEuMS0uOS0yLTItMmgtNnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InR1bmUiPjxwYXRoIGQ9Ik0zIDE3djJoNnYtMkgzek0zIDV2MmgxMFY1SDN6bTEwIDE2di0yaDh2LTJoLTh2LTJoLTJ2Nmgyek03IDl2MkgzdjJoNHYyaDJWOUg3em0xNCA0di0ySDExdjJoMTB6bS02LTRoMlY3aDRWNWgtNFYzaC0ydjZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idmlldy1jb21meSI+PHBhdGggZD0iTTMgOWg0VjVIM3Y0em0wIDVoNHYtNEgzdjR6bTUgMGg0di00SDh2NHptNSAwaDR2LTRoLTR2NHpNOCA5aDRWNUg4djR6bTUtNHY0aDRWNWgtNHptNSA5aDR2LTRoLTR2NHpNMyAxOWg0di00SDN2NHptNSAwaDR2LTRIOHY0em01IDBoNHYtNGgtNHY0em01IDBoNHYtNGgtNHY0em0wLTE0djRoNFY1aC00eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InZpZXctY29tcGFjdCI+PHBhdGggZD0iTTMgMTloNnYtN0gzdjd6bTcgMGgxMnYtN0gxMHY3ek0zIDV2NmgxOVY1SDN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idmlnbmV0dGUiPjxwYXRoIGQ9Ik0yMSAzSDNjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTkgMTVjLTQuNDIgMC04LTIuNjktOC02czMuNTgtNiA4LTYgOCAyLjY5IDggNi0zLjU4IDYtOCA2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9IndiLWF1dG8iPjxwYXRoIGQ9Ik02Ljg1IDEyLjY1aDIuM0w4IDlsLTEuMTUgMy42NXpNMjIgN2wtMS4yIDYuMjlMMTkuMyA3aC0xLjZsLTEuNDkgNi4yOUwxNSA3aC0uNzZDMTIuNzcgNS4xNyAxMC41MyA0IDggNGMtNC40MiAwLTggMy41OC04IDhzMy41OCA4IDggOGMzLjEzIDAgNS44NC0xLjgxIDcuMTUtNC40M2wuMS40M0gxN2wxLjUtNi4xTDIwIDE2aDEuNzVsMi4wNS05SDIyem0tMTEuNyA5bC0uNy0ySDYuNGwtLjcgMkgzLjhMNyA3aDJsMy4yIDloLTEuOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ3Yi1jbG91ZHkiPjxwYXRoIGQ9Ik0xOS4zNiAxMC4wNEMxOC42NyA2LjU5IDE1LjY0IDQgMTIgNCA5LjExIDQgNi42IDUuNjQgNS4zNSA4LjA0IDIuMzQgOC4zNiAwIDEwLjkxIDAgMTRjMCAzLjMxIDIuNjkgNiA2IDZoMTNjMi43NiAwIDUtMi4yNCA1LTUgMC0yLjY0LTIuMDUtNC43OC00LjY0LTQuOTZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0id2ItaW5jYW5kZXNjZW50Ij48cGF0aCBkPSJNMy41NSAxOC41NGwxLjQxIDEuNDEgMS43OS0xLjgtMS40MS0xLjQxLTEuNzkgMS44ek0xMSAyMi40NWgyVjE5LjVoLTJ2Mi45NXpNNCAxMC41SDF2Mmgzdi0yem0xMS00LjE5VjEuNUg5djQuODFDNy4yMSA3LjM1IDYgOS4yOCA2IDExLjVjMCAzLjMxIDIuNjkgNiA2IDZzNi0yLjY5IDYtNmMwLTIuMjItMS4yMS00LjE1LTMtNS4xOXptNSA0LjE5djJoM3YtMmgtM3ptLTIuNzYgNy42NmwxLjc5IDEuOCAxLjQxLTEuNDEtMS44LTEuNzktMS40IDEuNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJ3Yi1pcmlkZXNjZW50Ij48cGF0aCBkPSJNNSAxNC41aDE0di02SDV2NnpNMTEgLjU1VjMuNWgyVi41NWgtMnptOC4wNCAyLjVsLTEuNzkgMS43OSAxLjQxIDEuNDEgMS44LTEuNzktMS40Mi0xLjQxek0xMyAyMi40NVYxOS41aC0ydjIuOTVoMnptNy40NS0zLjkxbC0xLjgtMS43OS0xLjQxIDEuNDEgMS43OSAxLjggMS40Mi0xLjQyek0zLjU1IDQuNDZsMS43OSAxLjc5IDEuNDEtMS40MS0xLjc5LTEuNzktMS40MSAxLjQxem0xLjQxIDE1LjQ5bDEuNzktMS44LTEuNDEtMS40MS0xLjc5IDEuNzkgMS40MSAxLjQyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9IndiLXN1bm55Ij48cGF0aCBkPSJNNi43NiA0Ljg0bC0xLjgtMS43OS0xLjQxIDEuNDEgMS43OSAxLjc5IDEuNDItMS40MXpNNCAxMC41SDF2Mmgzdi0yem05LTkuOTVoLTJWMy41aDJWLjU1em03LjQ1IDMuOTFsLTEuNDEtMS40MS0xLjc5IDEuNzkgMS40MSAxLjQxIDEuNzktMS43OXptLTMuMjEgMTMuN2wxLjc5IDEuOCAxLjQxLTEuNDEtMS44LTEuNzktMS40IDEuNHpNMjAgMTAuNXYyaDN2LTJoLTN6bS04LTVjLTMuMzEgMC02IDIuNjktNiA2czIuNjkgNiA2IDYgNi0yLjY5IDYtNi0yLjY5LTYtNi02em0tMSAxNi45NWgyVjE5LjVoLTJ2Mi45NXptLTcuNDUtMy45MWwxLjQxIDEuNDEgMS43OS0xLjgtMS40MS0xLjQxLTEuNzkgMS44eiI+PC9wYXRoPjwvZz4KPC9kZWZzPjwvc3ZnPgo8L2lyb24taWNvbnNldC1zdmc+YDtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHdvLmNvbnRlbnQpOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTQgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KY29uc3QgU289X2VgPGlyb24taWNvbnNldC1zdmcgbmFtZT0iaWNvbnMiIHNpemU9IjI0Ij4KPHN2Zz48ZGVmcz4KPGcgaWQ9IjNkLXJvdGF0aW9uIj48cGF0aCBkPSJNNy41MiAyMS40OEM0LjI1IDE5Ljk0IDEuOTEgMTYuNzYgMS41NSAxM0guMDVDLjU2IDE5LjE2IDUuNzEgMjQgMTIgMjRsLjY2LS4wMy0zLjgxLTMuODEtMS4zMyAxLjMyem0uODktNi41MmMtLjE5IDAtLjM3LS4wMy0uNTItLjA4LS4xNi0uMDYtLjI5LS4xMy0uNC0uMjQtLjExLS4xLS4yLS4yMi0uMjYtLjM3LS4wNi0uMTQtLjA5LS4zLS4wOS0uNDdoLTEuM2MwIC4zNi4wNy42OC4yMS45NS4xNC4yNy4zMy41LjU2LjY5LjI0LjE4LjUxLjMyLjgyLjQxLjMuMS42Mi4xNS45Ni4xNS4zNyAwIC43Mi0uMDUgMS4wMy0uMTUuMzItLjEuNi0uMjUuODMtLjQ0cy40Mi0uNDMuNTUtLjcyYy4xMy0uMjkuMi0uNjEuMi0uOTcgMC0uMTktLjAyLS4zOC0uMDctLjU2LS4wNS0uMTgtLjEyLS4zNS0uMjMtLjUxLS4xLS4xNi0uMjQtLjMtLjQtLjQzLS4xNy0uMTMtLjM3LS4yMy0uNjEtLjMxLjItLjA5LjM3LS4yLjUyLS4zMy4xNS0uMTMuMjctLjI3LjM3LS40Mi4xLS4xNS4xNy0uMy4yMi0uNDYuMDUtLjE2LjA3LS4zMi4wNy0uNDggMC0uMzYtLjA2LS42OC0uMTgtLjk2LS4xMi0uMjgtLjI5LS41MS0uNTEtLjY5LS4yLS4xOS0uNDctLjMzLS43Ny0uNDNDOS4xIDguMDUgOC43NiA4IDguMzkgOGMtLjM2IDAtLjY5LjA1LTEgLjE2LS4zLjExLS41Ny4yNi0uNzkuNDUtLjIxLjE5LS4zOC40MS0uNTEuNjctLjEyLjI2LS4xOC41NC0uMTguODVoMS4zYzAtLjE3LjAzLS4zMi4wOS0uNDVzLjE0LS4yNS4yNS0uMzRjLjExLS4wOS4yMy0uMTcuMzgtLjIyLjE1LS4wNS4zLS4wOC40OC0uMDguNCAwIC43LjEuODkuMzEuMTkuMi4yOS40OS4yOS44NiAwIC4xOC0uMDMuMzQtLjA4LjQ5LS4wNS4xNS0uMTQuMjctLjI1LjM3LS4xMS4xLS4yNS4xOC0uNDEuMjQtLjE2LjA2LS4zNi4wOS0uNTguMDlINy41djEuMDNoLjc3Yy4yMiAwIC40Mi4wMi42LjA3cy4zMy4xMy40NS4yM2MuMTIuMTEuMjIuMjQuMjkuNC4wNy4xNi4xLjM1LjEuNTcgMCAuNDEtLjEyLjcyLS4zNS45My0uMjMuMjMtLjU1LjMzLS45NS4zM3ptOC41NS01LjkyYy0uMzItLjMzLS43LS41OS0xLjE0LS43Ny0uNDMtLjE4LS45Mi0uMjctMS40Ni0uMjdIMTJ2OGgyLjNjLjU1IDAgMS4wNi0uMDkgMS41MS0uMjcuNDUtLjE4Ljg0LS40MyAxLjE2LS43Ni4zMi0uMzMuNTctLjczLjc0LTEuMTkuMTctLjQ3LjI2LS45OS4yNi0xLjU3di0uNGMwLS41OC0uMDktMS4xLS4yNi0xLjU3LS4xOC0uNDctLjQzLS44Ny0uNzUtMS4yem0tLjM5IDMuMTZjMCAuNDItLjA1Ljc5LS4xNCAxLjEzLS4xLjMzLS4yNC42Mi0uNDMuODUtLjE5LjIzLS40My40MS0uNzEuNTMtLjI5LjEyLS42Mi4xOC0uOTkuMThoLS45MVY5LjEyaC45N2MuNzIgMCAxLjI3LjIzIDEuNjQuNjkuMzguNDYuNTcgMS4xMi41NyAxLjk5di40ek0xMiAwbC0uNjYuMDMgMy44MSAzLjgxIDEuMzMtMS4zM2MzLjI3IDEuNTUgNS42MSA0LjcyIDUuOTYgOC40OGgxLjVDMjMuNDQgNC44NCAxOC4yOSAwIDEyIDB6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYWNjZXNzaWJpbGl0eSI+PHBhdGggZD0iTTEyIDJjMS4xIDAgMiAuOSAyIDJzLS45IDItMiAyLTItLjktMi0yIC45LTIgMi0yem05IDdoLTZ2MTNoLTJ2LTZoLTJ2Nkg5VjlIM1Y3aDE4djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYWNjZXNzaWJsZSI+PGNpcmNsZSBjeD0iMTIiIGN5PSI0IiByPSIyIj48L2NpcmNsZT48cGF0aCBkPSJNMTkgMTN2LTJjLTEuNTQuMDItMy4wOS0uNzUtNC4wNy0xLjgzbC0xLjI5LTEuNDNjLS4xNy0uMTktLjM4LS4zNC0uNjEtLjQ1LS4wMSAwLS4wMS0uMDEtLjAyLS4wMUgxM2MtLjM1LS4yLS43NS0uMy0xLjE5LS4yNkMxMC43NiA3LjExIDEwIDguMDQgMTAgOS4wOVYxNWMwIDEuMS45IDIgMiAyaDV2NWgydi01LjVjMC0xLjEtLjktMi0yLTJoLTN2LTMuNDVjMS4yOSAxLjA3IDMuMjUgMS45NCA1IDEuOTV6bS02LjE3IDVjLS40MSAxLjE2LTEuNTIgMi0yLjgzIDItMS42NiAwLTMtMS4zNC0zLTMgMC0xLjMxLjg0LTIuNDEgMi0yLjgzVjEyLjFjLTIuMjguNDYtNCAyLjQ4LTQgNC45IDAgMi43NiAyLjI0IDUgNSA1IDIuNDIgMCA0LjQ0LTEuNzIgNC45LTRoLTIuMDd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYWNjb3VudC1iYWxhbmNlIj48cGF0aCBkPSJNNCAxMHY3aDN2LTdINHptNiAwdjdoM3YtN2gtM3pNMiAyMmgxOXYtM0gydjN6bTE0LTEydjdoM3YtN2gtM3ptLTQuNS05TDIgNnYyaDE5VjZsLTkuNS01eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFjY291bnQtYmFsYW5jZS13YWxsZXQiPjxwYXRoIGQ9Ik0yMSAxOHYxYzAgMS4xLS45IDItMiAySDVjLTEuMTEgMC0yLS45LTItMlY1YzAtMS4xLjg5LTIgMi0yaDE0YzEuMSAwIDIgLjkgMiAydjFoLTljLTEuMTEgMC0yIC45LTIgMnY4YzAgMS4xLjg5IDIgMiAyaDl6bS05LTJoMTBWOEgxMnY4em00LTIuNWMtLjgzIDAtMS41LS42Ny0xLjUtMS41cy42Ny0xLjUgMS41LTEuNSAxLjUuNjcgMS41IDEuNS0uNjcgMS41LTEuNSAxLjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYWNjb3VudC1ib3giPjxwYXRoIGQ9Ik0zIDV2MTRjMCAxLjEuODkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMkg1Yy0xLjExIDAtMiAuOS0yIDJ6bTEyIDRjMCAxLjY2LTEuMzQgMy0zIDNzLTMtMS4zNC0zLTMgMS4zNC0zIDMtMyAzIDEuMzQgMyAzem0tOSA4YzAtMiA0LTMuMSA2LTMuMXM2IDEuMSA2IDMuMXYxSDZ2LTF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYWNjb3VudC1jaXJjbGUiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDNjMS42NiAwIDMgMS4zNCAzIDNzLTEuMzQgMy0zIDMtMy0xLjM0LTMtMyAxLjM0LTMgMy0zem0wIDE0LjJjLTIuNSAwLTQuNzEtMS4yOC02LTMuMjIuMDMtMS45OSA0LTMuMDggNi0zLjA4IDEuOTkgMCA1Ljk3IDEuMDkgNiAzLjA4LTEuMjkgMS45NC0zLjUgMy4yMi02IDMuMjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYWRkIj48cGF0aCBkPSJNMTkgMTNoLTZ2NmgtMnYtNkg1di0yaDZWNWgydjZoNnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFkZC1hbGVydCI+PHBhdGggZD0iTTEwLjAxIDIxLjAxYzAgMS4xLjg5IDEuOTkgMS45OSAxLjk5czEuOTktLjg5IDEuOTktMS45OWgtMy45OHptOC44Ny00LjE5VjExYzAtMy4yNS0yLjI1LTUuOTctNS4yOS02LjY5di0uNzJDMTMuNTkgMi43MSAxMi44OCAyIDEyIDJzLTEuNTkuNzEtMS41OSAxLjU5di43MkM3LjM3IDUuMDMgNS4xMiA3Ljc1IDUuMTIgMTF2NS44MkwzIDE4Ljk0VjIwaDE4di0xLjA2bC0yLjEyLTIuMTJ6TTE2IDEzLjAxaC0zdjNoLTJ2LTNIOFYxMWgzVjhoMnYzaDN2Mi4wMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhZGQtYm94Ij48cGF0aCBkPSJNMTkgM0g1Yy0xLjExIDAtMiAuOS0yIDJ2MTRjMCAxLjEuODkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTIgMTBoLTR2NGgtMnYtNEg3di0yaDRWN2gydjRoNHYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFkZC1jaXJjbGUiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem01IDExaC00djRoLTJ2LTRIN3YtMmg0VjdoMnY0aDR2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJhZGQtY2lyY2xlLW91dGxpbmUiPjxwYXRoIGQ9Ik0xMyA3aC0ydjRIN3YyaDR2NGgydi00aDR2LTJoLTRWN3ptLTEtNUM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYWRkLXNob3BwaW5nLWNhcnQiPjxwYXRoIGQ9Ik0xMSA5aDJWNmgzVjRoLTNWMWgtMnYzSDh2MmgzdjN6bS00IDljLTEuMSAwLTEuOTkuOS0xLjk5IDJTNS45IDIyIDcgMjJzMi0uOSAyLTItLjktMi0yLTJ6bTEwIDBjLTEuMSAwLTEuOTkuOS0xLjk5IDJzLjg5IDIgMS45OSAyIDItLjkgMi0yLS45LTItMi0yem0tOS44My0zLjI1bC4wMy0uMTIuOS0xLjYzaDcuNDVjLjc1IDAgMS40MS0uNDEgMS43NS0xLjAzbDMuODYtNy4wMUwxOS40MiA0aC0uMDFsLTEuMSAyLTIuNzYgNUg4LjUzbC0uMTMtLjI3TDYuMTYgNmwtLjk1LTItLjk0LTJIMXYyaDJsMy42IDcuNTktMS4zNSAyLjQ1Yy0uMTYuMjgtLjI1LjYxLS4yNS45NiAwIDEuMS45IDIgMiAyaDEydi0ySDcuNDJjLS4xMyAwLS4yNS0uMTEtLjI1LS4yNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhbGFybSI+PHBhdGggZD0iTTIyIDUuNzJsLTQuNi0zLjg2LTEuMjkgMS41MyA0LjYgMy44NkwyMiA1Ljcyek03Ljg4IDMuMzlMNi42IDEuODYgMiA1LjcxbDEuMjkgMS41MyA0LjU5LTMuODV6TTEyLjUgOEgxMXY2bDQuNzUgMi44NS43NS0xLjIzLTQtMi4zN1Y4ek0xMiA0Yy00Ljk3IDAtOSA0LjAzLTkgOXM0LjAyIDkgOSA5YzQuOTcgMCA5LTQuMDMgOS05cy00LjAzLTktOS05em0wIDE2Yy0zLjg3IDAtNy0zLjEzLTctN3MzLjEzLTcgNy03IDcgMy4xMyA3IDctMy4xMyA3LTcgN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJhbGFybS1hZGQiPjxwYXRoIGQ9Ik03Ljg4IDMuMzlMNi42IDEuODYgMiA1LjcxbDEuMjkgMS41MyA0LjU5LTMuODV6TTIyIDUuNzJsLTQuNi0zLjg2LTEuMjkgMS41MyA0LjYgMy44NkwyMiA1Ljcyek0xMiA0Yy00Ljk3IDAtOSA0LjAzLTkgOXM0LjAyIDkgOSA5YzQuOTcgMCA5LTQuMDMgOS05cy00LjAzLTktOS05em0wIDE2Yy0zLjg3IDAtNy0zLjEzLTctN3MzLjEzLTcgNy03IDcgMy4xMyA3IDctMy4xMyA3LTcgN3ptMS0xMWgtMnYzSDh2MmgzdjNoMnYtM2gzdi0yaC0zVjl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYWxhcm0tb2ZmIj48cGF0aCBkPSJNMTIgNmMzLjg3IDAgNyAzLjEzIDcgNyAwIC44NC0uMTYgMS42NS0uNDMgMi40bDEuNTIgMS41MmMuNTgtMS4xOS45MS0yLjUxLjkxLTMuOTIgMC00Ljk3LTQuMDMtOS05LTktMS40MSAwLTIuNzMuMzMtMy45Mi45MUw5LjYgNi40M0MxMC4zNSA2LjE2IDExLjE2IDYgMTIgNnptMTAtLjI4bC00LjYtMy44Ni0xLjI5IDEuNTMgNC42IDMuODZMMjIgNS43MnpNMi45MiAyLjI5TDEuNjUgMy41NyAyLjk4IDQuOWwtMS4xMS45MyAxLjQyIDEuNDIgMS4xMS0uOTQuOC44QzMuODMgOC42OSAzIDEwLjc1IDMgMTNjMCA0Ljk3IDQuMDIgOSA5IDkgMi4yNSAwIDQuMzEtLjgzIDUuODktMi4ybDIuMiAyLjIgMS4yNy0xLjI3TDMuODkgMy4yN2wtLjk3LS45OHptMTMuNTUgMTYuMUMxNS4yNiAxOS4zOSAxMy43IDIwIDEyIDIwYy0zLjg3IDAtNy0zLjEzLTctNyAwLTEuNy42MS0zLjI2IDEuNjEtNC40N2w5Ljg2IDkuODZ6TTguMDIgMy4yOEw2LjYgMS44NmwtLjg2LjcxIDEuNDIgMS40Mi44Ni0uNzF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYWxhcm0tb24iPjxwYXRoIGQ9Ik0yMiA1LjcybC00LjYtMy44Ni0xLjI5IDEuNTMgNC42IDMuODZMMjIgNS43MnpNNy44OCAzLjM5TDYuNiAxLjg2IDIgNS43MWwxLjI5IDEuNTMgNC41OS0zLjg1ek0xMiA0Yy00Ljk3IDAtOSA0LjAzLTkgOXM0LjAyIDkgOSA5YzQuOTcgMCA5LTQuMDMgOS05cy00LjAzLTktOS05em0wIDE2Yy0zLjg3IDAtNy0zLjEzLTctN3MzLjEzLTcgNy03IDcgMy4xMyA3IDctMy4xMyA3LTcgN3ptLTEuNDYtNS40N0w4LjQxIDEyLjRsLTEuMDYgMS4wNiAzLjE4IDMuMTggNi02LTEuMDYtMS4wNi00LjkzIDQuOTV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYWxsLW91dCI+PHBhdGggZD0iTTE2LjIxIDQuMTZsNCA0di00em00IDEybC00IDRoNHptLTEyIDRsLTQtNHY0em0tNC0xMmw0LTRoLTR6bTEyLjk1LS45NWMtMi43My0yLjczLTcuMTctMi43My05LjkgMHMtMi43MyA3LjE3IDAgOS45IDcuMTcgMi43MyA5LjkgMCAyLjczLTcuMTYgMC05Ljl6bS0xLjEgOC44Yy0yLjEzIDIuMTMtNS41NyAyLjEzLTcuNyAwcy0yLjEzLTUuNTcgMC03LjcgNS41Ny0yLjEzIDcuNyAwIDIuMTMgNS41NyAwIDcuN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJhbmRyb2lkIj48cGF0aCBkPSJNNiAxOGMwIC41NS40NSAxIDEgMWgxdjMuNWMwIC44My42NyAxLjUgMS41IDEuNXMxLjUtLjY3IDEuNS0xLjVWMTloMnYzLjVjMCAuODMuNjcgMS41IDEuNSAxLjVzMS41LS42NyAxLjUtMS41VjE5aDFjLjU1IDAgMS0uNDUgMS0xVjhINnYxMHpNMy41IDhDMi42NyA4IDIgOC42NyAyIDkuNXY3YzAgLjgzLjY3IDEuNSAxLjUgMS41UzUgMTcuMzMgNSAxNi41di03QzUgOC42NyA0LjMzIDggMy41IDh6bTE3IDBjLS44MyAwLTEuNS42Ny0xLjUgMS41djdjMCAuODMuNjcgMS41IDEuNSAxLjVzMS41LS42NyAxLjUtMS41di03YzAtLjgzLS42Ny0xLjUtMS41LTEuNXptLTQuOTctNS44NGwxLjMtMS4zYy4yLS4yLjItLjUxIDAtLjcxLS4yLS4yLS41MS0uMi0uNzEgMGwtMS40OCAxLjQ4QzEzLjg1IDEuMjMgMTIuOTUgMSAxMiAxYy0uOTYgMC0xLjg2LjIzLTIuNjYuNjNMNy44NS4xNWMtLjItLjItLjUxLS4yLS43MSAwLS4yLjItLjIuNTEgMCAuNzFsMS4zMSAxLjMxQzYuOTcgMy4yNiA2IDUuMDEgNiA3aDEyYzAtMS45OS0uOTctMy43NS0yLjQ3LTQuODR6TTEwIDVIOVY0aDF2MXptNSAwaC0xVjRoMXYxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFubm91bmNlbWVudCI+PHBhdGggZD0iTTIwIDJINGMtMS4xIDAtMS45OS45LTEuOTkgMkwyIDIybDQtNGgxNGMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yem0tNyA5aC0yVjVoMnY2em0wIDRoLTJ2LTJoMnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFwcHMiPjxwYXRoIGQ9Ik00IDhoNFY0SDR2NHptNiAxMmg0di00aC00djR6bS02IDBoNHYtNEg0djR6bTAtNmg0di00SDR2NHptNiAwaDR2LTRoLTR2NHptNi0xMHY0aDRWNGgtNHptLTYgNGg0VjRoLTR2NHptNiA2aDR2LTRoLTR2NHptMCA2aDR2LTRoLTR2NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJhcmNoaXZlIj48cGF0aCBkPSJNMjAuNTQgNS4yM2wtMS4zOS0xLjY4QzE4Ljg4IDMuMjEgMTguNDcgMyAxOCAzSDZjLS40NyAwLS44OC4yMS0xLjE2LjU1TDMuNDYgNS4yM0MzLjE3IDUuNTcgMyA2LjAyIDMgNi41VjE5YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNi41YzAtLjQ4LS4xNy0uOTMtLjQ2LTEuMjd6TTEyIDE3LjVMNi41IDEySDEwdi0yaDR2MmgzLjVMMTIgMTcuNXpNNS4xMiA1bC44MS0xaDEybC45NCAxSDUuMTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXJyb3ctYmFjayI+PHBhdGggZD0iTTIwIDExSDcuODNsNS41OS01LjU5TDEyIDRsLTggOCA4IDggMS40MS0xLjQxTDcuODMgMTNIMjB2LTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXJyb3ctZG93bndhcmQiPjxwYXRoIGQ9Ik0yMCAxMmwtMS40MS0xLjQxTDEzIDE2LjE3VjRoLTJ2MTIuMTdsLTUuNTgtNS41OUw0IDEybDggOCA4LTh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXJyb3ctZHJvcC1kb3duIj48cGF0aCBkPSJNNyAxMGw1IDUgNS01eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFycm93LWRyb3AtZG93bi1jaXJjbGUiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDEybC00LTRoOGwtNCA0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFycm93LWRyb3AtdXAiPjxwYXRoIGQ9Ik03IDE0bDUtNSA1IDV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXJyb3ctZm9yd2FyZCI+PHBhdGggZD0iTTEyIDRsLTEuNDEgMS40MUwxNi4xNyAxMUg0djJoMTIuMTdsLTUuNTggNS41OUwxMiAyMGw4LTh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXJyb3ctdXB3YXJkIj48cGF0aCBkPSJNNCAxMmwxLjQxIDEuNDFMMTEgNy44M1YyMGgyVjcuODNsNS41OCA1LjU5TDIwIDEybC04LTgtOCA4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFzcGVjdC1yYXRpbyI+PHBhdGggZD0iTTE5IDEyaC0ydjNoLTN2Mmg1di01ek03IDloM1Y3SDV2NWgyVjl6bTE0LTZIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2LjAxSDNWNC45OWgxOHYxNC4wMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJhc3Nlc3NtZW50Ij48cGF0aCBkPSJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6TTkgMTdIN3YtN2gydjd6bTQgMGgtMlY3aDJ2MTB6bTQgMGgtMnYtNGgydjR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXNzaWdubWVudCI+PHBhdGggZD0iTTE5IDNoLTQuMThDMTQuNCAxLjg0IDEzLjMgMSAxMiAxYy0xLjMgMC0yLjQuODQtMi44MiAySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTcgMGMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xem0yIDE0SDd2LTJoN3Yyem0zLTRIN3YtMmgxMHYyem0wLTRIN1Y3aDEwdjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXNzaWdubWVudC1pbmQiPjxwYXRoIGQ9Ik0xOSAzaC00LjE4QzE0LjQgMS44NCAxMy4zIDEgMTIgMWMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptMCA0YzEuNjYgMCAzIDEuMzQgMyAzcy0xLjM0IDMtMyAzLTMtMS4zNC0zLTMgMS4zNC0zIDMtM3ptNiAxMkg2di0xLjRjMC0yIDQtMy4xIDYtMy4xczYgMS4xIDYgMy4xVjE5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFzc2lnbm1lbnQtbGF0ZSI+PHBhdGggZD0iTTE5IDNoLTQuMThDMTQuNCAxLjg0IDEzLjMgMSAxMiAxYy0xLjMgMC0yLjQuODQtMi44MiAySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTYgMTVoLTJ2LTJoMnYyem0wLTRoLTJWOGgydjZ6bS0xLTljLS41NSAwLTEtLjQ1LTEtMXMuNDUtMSAxLTEgMSAuNDUgMSAxLS40NSAxLTEgMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhc3NpZ25tZW50LXJldHVybiI+PHBhdGggZD0iTTE5IDNoLTQuMThDMTQuNCAxLjg0IDEzLjMgMSAxMiAxYy0xLjMgMC0yLjQuODQtMi44MiAySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTcgMGMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xem00IDEyaC00djNsLTUtNSA1LTV2M2g0djR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXNzaWdubWVudC1yZXR1cm5lZCI+PHBhdGggZD0iTTE5IDNoLTQuMThDMTQuNCAxLjg0IDEzLjMgMSAxMiAxYy0xLjMgMC0yLjQuODQtMi44MiAySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTcgMGMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xem0wIDE1bC01LTVoM1Y5aDR2NGgzbC01IDV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXNzaWdubWVudC10dXJuZWQtaW4iPjxwYXRoIGQ9Ik0xOSAzaC00LjE4QzE0LjQgMS44NCAxMy4zIDEgMTIgMWMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptLTIgMTRsLTQtNCAxLjQxLTEuNDFMMTAgMTQuMTdsNi41OS02LjU5TDE4IDlsLTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJhdHRhY2htZW50Ij48cGF0aCBkPSJNMiAxMi41QzIgOS40NiA0LjQ2IDcgNy41IDdIMThjMi4yMSAwIDQgMS43OSA0IDRzLTEuNzkgNC00IDRIOS41QzguMTIgMTUgNyAxMy44OCA3IDEyLjVTOC4xMiAxMCA5LjUgMTBIMTd2Mkg5LjQxYy0uNTUgMC0uNTUgMSAwIDFIMThjMS4xIDAgMi0uOSAyLTJzLS45LTItMi0ySDcuNUM1LjU3IDkgNCAxMC41NyA0IDEyLjVTNS41NyAxNiA3LjUgMTZIMTd2Mkg3LjVDNC40NiAxOCAyIDE1LjU0IDIgMTIuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhdXRvcmVuZXciPjxwYXRoIGQ9Ik0xMiA2djNsNC00LTQtNHYzYy00LjQyIDAtOCAzLjU4LTggOCAwIDEuNTcuNDYgMy4wMyAxLjI0IDQuMjZMNi43IDE0LjhjLS40NS0uODMtLjctMS43OS0uNy0yLjggMC0zLjMxIDIuNjktNiA2LTZ6bTYuNzYgMS43NEwxNy4zIDkuMmMuNDQuODQuNyAxLjc5LjcgMi44IDAgMy4zMS0yLjY5IDYtNiA2di0zbC00IDQgNCA0di0zYzQuNDIgMCA4LTMuNTggOC04IDAtMS41Ny0uNDYtMy4wMy0xLjI0LTQuMjZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYmFja3NwYWNlIj48cGF0aCBkPSJNMjIgM0g3Yy0uNjkgMC0xLjIzLjM1LTEuNTkuODhMMCAxMmw1LjQxIDguMTFjLjM2LjUzLjkuODkgMS41OS44OWgxNWMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tMyAxMi41OUwxNy41OSAxNyAxNCAxMy40MSAxMC40MSAxNyA5IDE1LjU5IDEyLjU5IDEyIDkgOC40MSAxMC40MSA3IDE0IDEwLjU5IDE3LjU5IDcgMTkgOC40MSAxNS40MSAxMiAxOSAxNS41OXoiPjwvcGF0aD48L2c+CjxnIGlkPSJiYWNrdXAiPjxwYXRoIGQ9Ik0xOS4zNSAxMC4wNEMxOC42NyA2LjU5IDE1LjY0IDQgMTIgNCA5LjExIDQgNi42IDUuNjQgNS4zNSA4LjA0IDIuMzQgOC4zNiAwIDEwLjkxIDAgMTRjMCAzLjMxIDIuNjkgNiA2IDZoMTNjMi43NiAwIDUtMi4yNCA1LTUgMC0yLjY0LTIuMDUtNC43OC00LjY1LTQuOTZ6TTE0IDEzdjRoLTR2LTRIN2w1LTUgNSA1aC0zeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImJsb2NrIj48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnpNNCAxMmMwLTQuNDIgMy41OC04IDgtOCAxLjg1IDAgMy41NS42MyA0LjkgMS42OUw1LjY5IDE2LjlDNC42MyAxNS41NSA0IDEzLjg1IDQgMTJ6bTggOGMtMS44NSAwLTMuNTUtLjYzLTQuOS0xLjY5TDE4LjMxIDcuMUMxOS4zNyA4LjQ1IDIwIDEwLjE1IDIwIDEyYzAgNC40Mi0zLjU4IDgtOCA4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImJvb2siPjxwYXRoIGQ9Ik0xOCAySDZjLTEuMSAwLTIgLjktMiAydjE2YzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnpNNiA0aDV2OGwtMi41LTEuNUw2IDEyVjR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYm9va21hcmsiPjxwYXRoIGQ9Ik0xNyAzSDdjLTEuMSAwLTEuOTkuOS0xLjk5IDJMNSAyMWw3LTMgNyAzVjVjMC0xLjEtLjktMi0yLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYm9va21hcmstYm9yZGVyIj48cGF0aCBkPSJNMTcgM0g3Yy0xLjEgMC0xLjk5LjktMS45OSAyTDUgMjFsNy0zIDcgM1Y1YzAtMS4xLS45LTItMi0yem0wIDE1bC01LTIuMThMNyAxOFY1aDEwdjEzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImJ1Zy1yZXBvcnQiPjxwYXRoIGQ9Ik0yMCA4aC0yLjgxYy0uNDUtLjc4LTEuMDctMS40NS0xLjgyLTEuOTZMMTcgNC40MSAxNS41OSAzbC0yLjE3IDIuMTdDMTIuOTYgNS4wNiAxMi40OSA1IDEyIDVjLS40OSAwLS45Ni4wNi0xLjQxLjE3TDguNDEgMyA3IDQuNDFsMS42MiAxLjYzQzcuODggNi41NSA3LjI2IDcuMjIgNi44MSA4SDR2MmgyLjA5Yy0uMDUuMzMtLjA5LjY2LS4wOSAxdjFINHYyaDJ2MWMwIC4zNC4wNC42Ny4wOSAxSDR2MmgyLjgxYzEuMDQgMS43OSAyLjk3IDMgNS4xOSAzczQuMTUtMS4yMSA1LjE5LTNIMjB2LTJoLTIuMDljLjA1LS4zMy4wOS0uNjYuMDktMXYtMWgydi0yaC0ydi0xYzAtLjM0LS4wNC0uNjctLjA5LTFIMjBWOHptLTYgOGgtNHYtMmg0djJ6bTAtNGgtNHYtMmg0djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYnVpbGQiPjxwYXRoIGQ9Ik0yMi43IDE5bC05LjEtOS4xYy45LTIuMy40LTUtMS41LTYuOS0yLTItNS0yLjQtNy40LTEuM0w5IDYgNiA5IDEuNiA0LjdDLjQgNy4xLjkgMTAuMSAyLjkgMTIuMWMxLjkgMS45IDQuNiAyLjQgNi45IDEuNWw5LjEgOS4xYy40LjQgMSAuNCAxLjQgMGwyLjMtMi4zYy41LS40LjUtMS4xLjEtMS40eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNhY2hlZCI+PHBhdGggZD0iTTE5IDhsLTQgNGgzYzAgMy4zMS0yLjY5IDYtNiA2LTEuMDEgMC0xLjk3LS4yNS0yLjgtLjdsLTEuNDYgMS40NkM4Ljk3IDE5LjU0IDEwLjQzIDIwIDEyIDIwYzQuNDIgMCA4LTMuNTggOC04aDNsLTQtNHpNNiAxMmMwLTMuMzEgMi42OS02IDYtNiAxLjAxIDAgMS45Ny4yNSAyLjguN2wxLjQ2LTEuNDZDMTUuMDMgNC40NiAxMy41NyA0IDEyIDRjLTQuNDIgMC04IDMuNTgtOCA4SDFsNCA0IDQtNEg2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNhbWVyYS1lbmhhbmNlIj48cGF0aCBkPSJNOSAzTDcuMTcgNUg0Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjdjMC0xLjEtLjktMi0yLTJoLTMuMTdMMTUgM0g5em0zIDE1Yy0yLjc2IDAtNS0yLjI0LTUtNXMyLjI0LTUgNS01IDUgMi4yNCA1IDUtMi4yNCA1LTUgNXptMC0xbDEuMjUtMi43NUwxNiAxM2wtMi43NS0xLjI1TDEyIDlsLTEuMjUgMi43NUw4IDEzbDIuNzUgMS4yNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJjYW5jZWwiPjxwYXRoIGQ9Ik0xMiAyQzYuNDcgMiAyIDYuNDcgMiAxMnM0LjQ3IDEwIDEwIDEwIDEwLTQuNDcgMTAtMTBTMTcuNTMgMiAxMiAyem01IDEzLjU5TDE1LjU5IDE3IDEyIDEzLjQxIDguNDEgMTcgNyAxNS41OSAxMC41OSAxMiA3IDguNDEgOC40MSA3IDEyIDEwLjU5IDE1LjU5IDcgMTcgOC40MSAxMy40MSAxMiAxNyAxNS41OXoiPjwvcGF0aD48L2c+CjxnIGlkPSJjYXJkLWdpZnRjYXJkIj48cGF0aCBkPSJNMjAgNmgtMi4xOGMuMTEtLjMxLjE4LS42NS4xOC0xIDAtMS42Ni0xLjM0LTMtMy0zLTEuMDUgMC0xLjk2LjU0LTIuNSAxLjM1bC0uNS42Ny0uNS0uNjhDMTAuOTYgMi41NCAxMC4wNSAyIDkgMiA3LjM0IDIgNiAzLjM0IDYgNWMwIC4zNS4wNy42OS4xOCAxSDRjLTEuMTEgMC0xLjk5Ljg5LTEuOTkgMkwyIDE5YzAgMS4xMS44OSAyIDIgMmgxNmMxLjExIDAgMi0uODkgMi0yVjhjMC0xLjExLS44OS0yLTItMnptLTUtMmMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xek05IDRjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptMTEgMTVINHYtMmgxNnYyem0wLTVINFY4aDUuMDhMNyAxMC44MyA4LjYyIDEyIDExIDguNzZsMS0xLjM2IDEgMS4zNkwxNS4zOCAxMiAxNyAxMC44MyAxNC45MiA4SDIwdjZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2FyZC1tZW1iZXJzaGlwIj48cGF0aCBkPSJNMjAgMkg0Yy0xLjExIDAtMiAuODktMiAydjExYzAgMS4xMS44OSAyIDIgMmg0djVsNC0yIDQgMnYtNWg0YzEuMTEgMCAyLS44OSAyLTJWNGMwLTEuMTEtLjg5LTItMi0yem0wIDEzSDR2LTJoMTZ2MnptMC01SDRWNGgxNnY2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNhcmQtdHJhdmVsIj48cGF0aCBkPSJNMjAgNmgtM1Y0YzAtMS4xMS0uODktMi0yLTJIOWMtMS4xMSAwLTIgLjg5LTIgMnYySDRjLTEuMTEgMC0yIC44OS0yIDJ2MTFjMCAxLjExLjg5IDIgMiAyaDE2YzEuMTEgMCAyLS44OSAyLTJWOGMwLTEuMTEtLjg5LTItMi0yek05IDRoNnYySDlWNHptMTEgMTVINHYtMmgxNnYyem0wLTVINFY4aDN2MmgyVjhoNnYyaDJWOGgzdjZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2hhbmdlLWhpc3RvcnkiPjxwYXRoIGQ9Ik0xMiA3Ljc3TDE4LjM5IDE4SDUuNjFMMTIgNy43N00xMiA0TDIgMjBoMjBMMTIgNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJjaGVjayI+PHBhdGggZD0iTTkgMTYuMTdMNC44MyAxMmwtMS40MiAxLjQxTDkgMTkgMjEgN2wtMS40MS0xLjQxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNoZWNrLWJveCI+PHBhdGggZD0iTTE5IDNINWMtMS4xMSAwLTIgLjktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMTEgMCAyLS45IDItMlY1YzAtMS4xLS44OS0yLTItMnptLTkgMTRsLTUtNSAxLjQxLTEuNDFMMTAgMTQuMTdsNy41OS03LjU5TDE5IDhsLTkgOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJjaGVjay1ib3gtb3V0bGluZS1ibGFuayI+PHBhdGggZD0iTTE5IDV2MTRINVY1aDE0bTAtMkg1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2hlY2stY2lyY2xlIj48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptLTIgMTVsLTUtNSAxLjQxLTEuNDFMMTAgMTQuMTdsNy41OS03LjU5TDE5IDhsLTkgOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJjaGV2cm9uLWxlZnQiPjxwYXRoIGQ9Ik0xNS40MSA3LjQxTDE0IDZsLTYgNiA2IDYgMS40MS0xLjQxTDEwLjgzIDEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNoZXZyb24tcmlnaHQiPjxwYXRoIGQ9Ik0xMCA2TDguNTkgNy40MSAxMy4xNyAxMmwtNC41OCA0LjU5TDEwIDE4bDYtNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjaHJvbWUtcmVhZGVyLW1vZGUiPjxwYXRoIGQ9Ik0xMyAxMmg3djEuNWgtN3ptMC0yLjVoN1YxMWgtN3ptMCA1aDdWMTZoLTd6TTIxIDRIM2MtMS4xIDAtMiAuOS0yIDJ2MTNjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0wIDE1aC05VjZoOXYxM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJjbGFzcyI+PHBhdGggZD0iTTE4IDJINmMtMS4xIDAtMiAuOS0yIDJ2MTZjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yek02IDRoNXY4bC0yLjUtMS41TDYgMTJWNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJjbGVhciI+PHBhdGggZD0iTTE5IDYuNDFMMTcuNTkgNSAxMiAxMC41OSA2LjQxIDUgNSA2LjQxIDEwLjU5IDEyIDUgMTcuNTkgNi40MSAxOSAxMiAxMy40MSAxNy41OSAxOSAxOSAxNy41OSAxMy40MSAxMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjbG9zZSI+PHBhdGggZD0iTTE5IDYuNDFMMTcuNTkgNSAxMiAxMC41OSA2LjQxIDUgNSA2LjQxIDEwLjU5IDEyIDUgMTcuNTkgNi40MSAxOSAxMiAxMy40MSAxNy41OSAxOSAxOSAxNy41OSAxMy40MSAxMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjbG91ZCI+PHBhdGggZD0iTTE5LjM1IDEwLjA0QzE4LjY3IDYuNTkgMTUuNjQgNCAxMiA0IDkuMTEgNCA2LjYgNS42NCA1LjM1IDguMDQgMi4zNCA4LjM2IDAgMTAuOTEgMCAxNGMwIDMuMzEgMi42OSA2IDYgNmgxM2MyLjc2IDAgNS0yLjI0IDUtNSAwLTIuNjQtMi4wNS00Ljc4LTQuNjUtNC45NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjbG91ZC1jaXJjbGUiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem00LjUgMTRIOGMtMS42NiAwLTMtMS4zNC0zLTNzMS4zNC0zIDMtM2wuMTQuMDFDOC41OCA4LjI4IDEwLjEzIDcgMTIgN2MyLjIxIDAgNCAxLjc5IDQgNGguNWMxLjM4IDAgMi41IDEuMTIgMi41IDIuNVMxNy44OCAxNiAxNi41IDE2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNsb3VkLWRvbmUiPjxwYXRoIGQ9Ik0xOS4zNSAxMC4wNEMxOC42NyA2LjU5IDE1LjY0IDQgMTIgNCA5LjExIDQgNi42IDUuNjQgNS4zNSA4LjA0IDIuMzQgOC4zNiAwIDEwLjkxIDAgMTRjMCAzLjMxIDIuNjkgNiA2IDZoMTNjMi43NiAwIDUtMi4yNCA1LTUgMC0yLjY0LTIuMDUtNC43OC00LjY1LTQuOTZ6TTEwIDE3bC0zLjUtMy41IDEuNDEtMS40MUwxMCAxNC4xNyAxNS4xOCA5bDEuNDEgMS40MUwxMCAxN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJjbG91ZC1kb3dubG9hZCI+PHBhdGggZD0iTTE5LjM1IDEwLjA0QzE4LjY3IDYuNTkgMTUuNjQgNCAxMiA0IDkuMTEgNCA2LjYgNS42NCA1LjM1IDguMDQgMi4zNCA4LjM2IDAgMTAuOTEgMCAxNGMwIDMuMzEgMi42OSA2IDYgNmgxM2MyLjc2IDAgNS0yLjI0IDUtNSAwLTIuNjQtMi4wNS00Ljc4LTQuNjUtNC45NnpNMTcgMTNsLTUgNS01LTVoM1Y5aDR2NGgzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNsb3VkLW9mZiI+PHBhdGggZD0iTTE5LjM1IDEwLjA0QzE4LjY3IDYuNTkgMTUuNjQgNCAxMiA0Yy0xLjQ4IDAtMi44NS40My00LjAxIDEuMTdsMS40NiAxLjQ2QzEwLjIxIDYuMjMgMTEuMDggNiAxMiA2YzMuMDQgMCA1LjUgMi40NiA1LjUgNS41di41SDE5YzEuNjYgMCAzIDEuMzQgMyAzIDAgMS4xMy0uNjQgMi4xMS0xLjU2IDIuNjJsMS40NSAxLjQ1QzIzLjE2IDE4LjE2IDI0IDE2LjY4IDI0IDE1YzAtMi42NC0yLjA1LTQuNzgtNC42NS00Ljk2ek0zIDUuMjdsMi43NSAyLjc0QzIuNTYgOC4xNSAwIDEwLjc3IDAgMTRjMCAzLjMxIDIuNjkgNiA2IDZoMTEuNzNsMiAyTDIxIDIwLjczIDQuMjcgNCAzIDUuMjd6TTcuNzMgMTBsOCA4SDZjLTIuMjEgMC00LTEuNzktNC00czEuNzktNCA0LTRoMS43M3oiPjwvcGF0aD48L2c+CjxnIGlkPSJjbG91ZC1xdWV1ZSI+PHBhdGggZD0iTTE5LjM1IDEwLjA0QzE4LjY3IDYuNTkgMTUuNjQgNCAxMiA0IDkuMTEgNCA2LjYgNS42NCA1LjM1IDguMDQgMi4zNCA4LjM2IDAgMTAuOTEgMCAxNGMwIDMuMzEgMi42OSA2IDYgNmgxM2MyLjc2IDAgNS0yLjI0IDUtNSAwLTIuNjQtMi4wNS00Ljc4LTQuNjUtNC45NnpNMTkgMThINmMtMi4yMSAwLTQtMS43OS00LTRzMS43OS00IDQtNGguNzFDNy4zNyA3LjY5IDkuNDggNiAxMiA2YzMuMDQgMCA1LjUgMi40NiA1LjUgNS41di41SDE5YzEuNjYgMCAzIDEuMzQgMyAzcy0xLjM0IDMtMyAzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNsb3VkLXVwbG9hZCI+PHBhdGggZD0iTTE5LjM1IDEwLjA0QzE4LjY3IDYuNTkgMTUuNjQgNCAxMiA0IDkuMTEgNCA2LjYgNS42NCA1LjM1IDguMDQgMi4zNCA4LjM2IDAgMTAuOTEgMCAxNGMwIDMuMzEgMi42OSA2IDYgNmgxM2MyLjc2IDAgNS0yLjI0IDUtNSAwLTIuNjQtMi4wNS00Ljc4LTQuNjUtNC45NnpNMTQgMTN2NGgtNHYtNEg3bDUtNSA1IDVoLTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY29kZSI+PHBhdGggZD0iTTkuNCAxNi42TDQuOCAxMmw0LjYtNC42TDggNmwtNiA2IDYgNiAxLjQtMS40em01LjIgMGw0LjYtNC42LTQuNi00LjZMMTYgNmw2IDYtNiA2LTEuNC0xLjR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY29tcGFyZS1hcnJvd3MiPjxwYXRoIGQ9Ik05LjAxIDE0SDJ2Mmg3LjAxdjNMMTMgMTVsLTMuOTktNHYzem01Ljk4LTF2LTNIMjJWOGgtNy4wMVY1TDExIDlsMy45OSA0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNvbnRlbnQtY29weSI+PHBhdGggZD0iTTE2IDFINGMtMS4xIDAtMiAuOS0yIDJ2MTRoMlYzaDEyVjF6bTMgNEg4Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDExYzEuMSAwIDItLjkgMi0yVjdjMC0xLjEtLjktMi0yLTJ6bTAgMTZIOFY3aDExdjE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNvbnRlbnQtY3V0Ij48cGF0aCBkPSJNOS42NCA3LjY0Yy4yMy0uNS4zNi0xLjA1LjM2LTEuNjQgMC0yLjIxLTEuNzktNC00LTRTMiAzLjc5IDIgNnMxLjc5IDQgNCA0Yy41OSAwIDEuMTQtLjEzIDEuNjQtLjM2TDEwIDEybC0yLjM2IDIuMzZDNy4xNCAxNC4xMyA2LjU5IDE0IDYgMTRjLTIuMjEgMC00IDEuNzktNCA0czEuNzkgNCA0IDQgNC0xLjc5IDQtNGMwLS41OS0uMTMtMS4xNC0uMzYtMS42NEwxMiAxNGw3IDdoM3YtMUw5LjY0IDcuNjR6TTYgOGMtMS4xIDAtMi0uODktMi0ycy45LTIgMi0yIDIgLjg5IDIgMi0uOSAyLTIgMnptMCAxMmMtMS4xIDAtMi0uODktMi0ycy45LTIgMi0yIDIgLjg5IDIgMi0uOSAyLTIgMnptNi03LjVjLS4yOCAwLS41LS4yMi0uNS0uNXMuMjItLjUuNS0uNS41LjIyLjUuNS0uMjIuNS0uNS41ek0xOSAzbC02IDYgMiAyIDctN1YzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNvbnRlbnQtcGFzdGUiPjxwYXRoIGQ9Ik0xOSAyaC00LjE4QzE0LjQuODQgMTMuMyAwIDEyIDBjLTEuMyAwLTIuNC44NC0yLjgyIDJINWMtMS4xIDAtMiAuOS0yIDJ2MTZjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yem0tNyAwYy41NSAwIDEgLjQ1IDEgMXMtLjQ1IDEtMSAxLTEtLjQ1LTEtMSAuNDUtMSAxLTF6bTcgMThINVY0aDJ2M2gxMFY0aDJ2MTZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY29weXJpZ2h0Ij48cGF0aCBkPSJNMTAuMDggMTAuODZjLjA1LS4zMy4xNi0uNjIuMy0uODdzLjM0LS40Ni41OS0uNjJjLjI0LS4xNS41NC0uMjIuOTEtLjIzLjIzLjAxLjQ0LjA1LjYzLjEzLjIuMDkuMzguMjEuNTIuMzZzLjI1LjMzLjM0LjUzLjEzLjQyLjE0LjY0aDEuNzljLS4wMi0uNDctLjExLS45LS4yOC0xLjI5cy0uNC0uNzMtLjctMS4wMS0uNjYtLjUtMS4wOC0uNjYtLjg4LS4yMy0xLjM5LS4yM2MtLjY1IDAtMS4yMi4xMS0xLjcuMzRzLS44OC41My0xLjIuOTItLjU2Ljg0LS43MSAxLjM2UzggMTEuMjkgOCAxMS44N3YuMjdjMCAuNTguMDggMS4xMi4yMyAxLjY0cy4zOS45Ny43MSAxLjM1LjcyLjY5IDEuMi45MSAxLjA1LjM0IDEuNy4zNGMuNDcgMCAuOTEtLjA4IDEuMzItLjIzcy43Ny0uMzYgMS4wOC0uNjMuNTYtLjU4Ljc0LS45NC4yOS0uNzQuMy0xLjE1aC0xLjc5Yy0uMDEuMjEtLjA2LjQtLjE1LjU4cy0uMjEuMzMtLjM2LjQ2LS4zMi4yMy0uNTIuM2MtLjE5LjA3LS4zOS4wOS0uNi4xLS4zNi0uMDEtLjY2LS4wOC0uODktLjIzLS4yNS0uMTYtLjQ1LS4zNy0uNTktLjYycy0uMjUtLjU1LS4zLS44OC0uMDgtLjY3LS4wOC0xdi0uMjdjMC0uMzUuMDMtLjY4LjA4LTEuMDF6TTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyZWF0ZSI+PHBhdGggZD0iTTMgMTcuMjVWMjFoMy43NUwxNy44MSA5Ljk0bC0zLjc1LTMuNzVMMyAxNy4yNXpNMjAuNzEgNy4wNGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC0yLjM0LTIuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0xLjgzIDEuODMgMy43NSAzLjc1IDEuODMtMS44M3oiPjwvcGF0aD48L2c+CjxnIGlkPSJjcmVhdGUtbmV3LWZvbGRlciI+PHBhdGggZD0iTTIwIDZoLThsLTItMkg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY4YzAtMS4xMS0uODktMi0yLTJ6bS0xIDhoLTN2M2gtMnYtM2gtM3YtMmgzVjloMnYzaDN2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjcmVkaXQtY2FyZCI+PHBhdGggZD0iTTIwIDRINGMtMS4xMSAwLTEuOTkuODktMS45OSAyTDIgMThjMCAxLjExLjg5IDIgMiAyaDE2YzEuMTEgMCAyLS44OSAyLTJWNmMwLTEuMTEtLjg5LTItMi0yem0wIDE0SDR2LTZoMTZ2NnptMC0xMEg0VjZoMTZ2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJkYXNoYm9hcmQiPjxwYXRoIGQ9Ik0zIDEzaDhWM0gzdjEwem0wIDhoOHYtNkgzdjZ6bTEwIDBoOFYxMWgtOHYxMHptMC0xOHY2aDhWM2gtOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJkYXRlLXJhbmdlIj48cGF0aCBkPSJNOSAxMUg3djJoMnYtMnptNCAwaC0ydjJoMnYtMnptNCAwaC0ydjJoMnYtMnptMi03aC0xVjJoLTJ2Mkg4VjJINnYySDVjLTEuMTEgMC0xLjk5LjktMS45OSAyTDMgMjBjMCAxLjEuODkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNmMwLTEuMS0uOS0yLTItMnptMCAxNkg1VjloMTR2MTF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZGVsZXRlIj48cGF0aCBkPSJNNiAxOWMwIDEuMS45IDIgMiAyaDhjMS4xIDAgMi0uOSAyLTJWN0g2djEyek0xOSA0aC0zLjVsLTEtMWgtNWwtMSAxSDV2MmgxNFY0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImRlbGV0ZS1mb3JldmVyIj48cGF0aCBkPSJNNiAxOWMwIDEuMS45IDIgMiAyaDhjMS4xIDAgMi0uOSAyLTJWN0g2djEyem0yLjQ2LTcuMTJsMS40MS0xLjQxTDEyIDEyLjU5bDIuMTItMi4xMiAxLjQxIDEuNDFMMTMuNDEgMTRsMi4xMiAyLjEyLTEuNDEgMS40MUwxMiAxNS40MWwtMi4xMiAyLjEyLTEuNDEtMS40MUwxMC41OSAxNGwtMi4xMy0yLjEyek0xNS41IDRsLTEtMWgtNWwtMSAxSDV2MmgxNFY0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImRlbGV0ZS1zd2VlcCI+PHBhdGggZD0iTTE1IDE2aDR2MmgtNHptMC04aDd2MmgtN3ptMCA0aDZ2MmgtNnpNMyAxOGMwIDEuMS45IDIgMiAyaDZjMS4xIDAgMi0uOSAyLTJWOEgzdjEwek0xNCA1aC0zbC0xLTFINkw1IDVIMnYyaDEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImRlc2NyaXB0aW9uIj48cGF0aCBkPSJNMTQgMkg2Yy0xLjEgMC0xLjk5LjktMS45OSAyTDQgMjBjMCAxLjEuODkgMiAxLjk5IDJIMThjMS4xIDAgMi0uOSAyLTJWOGwtNi02em0yIDE2SDh2LTJoOHYyem0wLTRIOHYtMmg4djJ6bS0zLTVWMy41TDE4LjUgOUgxM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJkbnMiPjxwYXRoIGQ9Ik0yMCAxM0g0Yy0uNTUgMC0xIC40NS0xIDF2NmMwIC41NS40NSAxIDEgMWgxNmMuNTUgMCAxLS40NSAxLTF2LTZjMC0uNTUtLjQ1LTEtMS0xek03IDE5Yy0xLjEgMC0yLS45LTItMnMuOS0yIDItMiAyIC45IDIgMi0uOSAyLTIgMnpNMjAgM0g0Yy0uNTUgMC0xIC40NS0xIDF2NmMwIC41NS40NSAxIDEgMWgxNmMuNTUgMCAxLS40NSAxLTFWNGMwLS41NS0uNDUtMS0xLTF6TTcgOWMtMS4xIDAtMi0uOS0yLTJzLjktMiAyLTIgMiAuOSAyIDItLjkgMi0yIDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZG9uZSI+PHBhdGggZD0iTTkgMTYuMkw0LjggMTJsLTEuNCAxLjRMOSAxOSAyMSA3bC0xLjQtMS40TDkgMTYuMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJkb25lLWFsbCI+PHBhdGggZD0iTTE4IDdsLTEuNDEtMS40MS02LjM0IDYuMzQgMS40MSAxLjQxTDE4IDd6bTQuMjQtMS40MUwxMS42NiAxNi4xNyA3LjQ4IDEybC0xLjQxIDEuNDFMMTEuNjYgMTlsMTItMTItMS40Mi0xLjQxek0uNDEgMTMuNDFMNiAxOWwxLjQxLTEuNDFMMS44MyAxMiAuNDEgMTMuNDF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZG9udXQtbGFyZ2UiPjxwYXRoIGQ9Ik0xMSA1LjA4VjJjLTUgLjUtOSA0LjgxLTkgMTBzNCA5LjUgOSAxMHYtMy4wOGMtMy0uNDgtNi0zLjQtNi02LjkyczMtNi40NCA2LTYuOTJ6TTE4Ljk3IDExSDIyYy0uNDctNS00LTguNTMtOS05djMuMDhDMTYgNS41MSAxOC41NCA4IDE4Ljk3IDExek0xMyAxOC45MlYyMmM1LS40NyA4LjUzLTQgOS05aC0zLjAzYy0uNDMgMy0yLjk3IDUuNDktNS45NyA1LjkyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImRvbnV0LXNtYWxsIj48cGF0aCBkPSJNMTEgOS4xNlYyYy01IC41LTkgNC43OS05IDEwczQgOS41IDkgMTB2LTcuMTZjLTEtLjQxLTItMS41Mi0yLTIuODRzMS0yLjQzIDItMi44NHpNMTQuODYgMTFIMjJjLS40OC00Ljc1LTQtOC41My05LTl2Ny4xNmMxIC4zIDEuNTIuOTggMS44NiAxLjg0ek0xMyAxNC44NFYyMmM1LS40NyA4LjUyLTQuMjUgOS05aC03LjE0Yy0uMzQuODYtLjg2IDEuNTQtMS44NiAxLjg0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImRyYWZ0cyI+PHBhdGggZD0iTTIxLjk5IDhjMC0uNzItLjM3LTEuMzUtLjk0LTEuN0wxMiAxIDIuOTUgNi4zQzIuMzggNi42NSAyIDcuMjggMiA4djEwYzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJsLS4wMS0xMHpNMTIgMTNMMy43NCA3Ljg0IDEyIDNsOC4yNiA0Ljg0TDEyIDEzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImVqZWN0Ij48cGF0aCBkPSJNNSAxN2gxNHYySDV6bTctMTJMNS4zMyAxNWgxMy4zNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJlcnJvciI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTEgMTVoLTJ2LTJoMnYyem0wLTRoLTJWN2gydjZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZXJyb3Itb3V0bGluZSI+PHBhdGggZD0iTTExIDE1aDJ2MmgtMnptMC04aDJ2NmgtMnptLjk5LTVDNi40NyAyIDIgNi40OCAyIDEyczQuNDcgMTAgOS45OSAxMEMxNy41MiAyMiAyMiAxNy41MiAyMiAxMlMxNy41MiAyIDExLjk5IDJ6TTEyIDIwYy00LjQyIDAtOC0zLjU4LTgtOHMzLjU4LTggOC04IDggMy41OCA4IDgtMy41OCA4LTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJldXJvLXN5bWJvbCI+PHBhdGggZD0iTTE1IDE4LjVjLTIuNTEgMC00LjY4LTEuNDItNS43Ni0zLjVIMTV2LTJIOC41OGMtLjA1LS4zMy0uMDgtLjY2LS4wOC0xcy4wMy0uNjcuMDgtMUgxNVY5SDkuMjRDMTAuMzIgNi45MiAxMi41IDUuNSAxNSA1LjVjMS42MSAwIDMuMDkuNTkgNC4yMyAxLjU3TDIxIDUuM0MxOS40MSAzLjg3IDE3LjMgMyAxNSAzYy0zLjkyIDAtNy4yNCAyLjUxLTguNDggNkgzdjJoMy4wNmMtLjA0LjMzLS4wNi42Ni0uMDYgMSAwIC4zNC4wMi42Ny4wNiAxSDN2MmgzLjUyYzEuMjQgMy40OSA0LjU2IDYgOC40OCA2IDIuMzEgMCA0LjQxLS44NyA2LTIuM2wtMS43OC0xLjc3Yy0xLjEzLjk4LTIuNiAxLjU3LTQuMjIgMS41N3oiPjwvcGF0aD48L2c+CjxnIGlkPSJldmVudCI+PHBhdGggZD0iTTE3IDEyaC01djVoNXYtNXpNMTYgMXYySDhWMUg2djJINWMtMS4xMSAwLTEuOTkuOS0xLjk5IDJMMyAxOWMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yaC0xVjFoLTJ6bTMgMThINVY4aDE0djExeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImV2ZW50LXNlYXQiPjxwYXRoIGQ9Ik00IDE4djNoM3YtM2gxMHYzaDN2LTZINHptMTUtOGgzdjNoLTN6TTIgMTBoM3YzSDJ6bTE1IDNIN1Y1YzAtMS4xLjktMiAyLTJoNmMxLjEgMCAyIC45IDIgMnY4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImV4aXQtdG8tYXBwIj48cGF0aCBkPSJNMTAuMDkgMTUuNTlMMTEuNSAxN2w1LTUtNS01LTEuNDEgMS40MUwxMi42NyAxMUgzdjJoOS42N2wtMi41OCAyLjU5ek0xOSAzSDVjLTEuMTEgMC0yIC45LTIgMnY0aDJWNWgxNHYxNEg1di00SDN2NGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImV4cGFuZC1sZXNzIj48cGF0aCBkPSJNMTIgOGwtNiA2IDEuNDEgMS40MUwxMiAxMC44M2w0LjU5IDQuNThMMTggMTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZXhwYW5kLW1vcmUiPjxwYXRoIGQ9Ik0xNi41OSA4LjU5TDEyIDEzLjE3IDcuNDEgOC41OSA2IDEwbDYgNiA2LTZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZXhwbG9yZSI+PHBhdGggZD0iTTEyIDEwLjljLS42MSAwLTEuMS40OS0xLjEgMS4xcy40OSAxLjEgMS4xIDEuMWMuNjEgMCAxLjEtLjQ5IDEuMS0xLjFzLS40OS0xLjEtMS4xLTEuMXpNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMi4xOSAxMi4xOUw2IDE4bDMuODEtOC4xOUwxOCA2bC0zLjgxIDguMTl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZXh0ZW5zaW9uIj48cGF0aCBkPSJNMjAuNSAxMUgxOVY3YzAtMS4xLS45LTItMi0yaC00VjMuNUMxMyAyLjEyIDExLjg4IDEgMTAuNSAxUzggMi4xMiA4IDMuNVY1SDRjLTEuMSAwLTEuOTkuOS0xLjk5IDJ2My44SDMuNWMxLjQ5IDAgMi43IDEuMjEgMi43IDIuN3MtMS4yMSAyLjctMi43IDIuN0gyVjIwYzAgMS4xLjkgMiAyIDJoMy44di0xLjVjMC0xLjQ5IDEuMjEtMi43IDIuNy0yLjcgMS40OSAwIDIuNyAxLjIxIDIuNyAyLjdWMjJIMTdjMS4xIDAgMi0uOSAyLTJ2LTRoMS41YzEuMzggMCAyLjUtMS4xMiAyLjUtMi41UzIxLjg4IDExIDIwLjUgMTF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmFjZSI+PHBhdGggZD0iTTkgMTEuNzVjLS42OSAwLTEuMjUuNTYtMS4yNSAxLjI1cy41NiAxLjI1IDEuMjUgMS4yNSAxLjI1LS41NiAxLjI1LTEuMjUtLjU2LTEuMjUtMS4yNS0xLjI1em02IDBjLS42OSAwLTEuMjUuNTYtMS4yNSAxLjI1cy41NiAxLjI1IDEuMjUgMS4yNSAxLjI1LS41NiAxLjI1LTEuMjUtLjU2LTEuMjUtMS4yNS0xLjI1ek0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOCAwLS4yOS4wMi0uNTguMDUtLjg2IDIuMzYtMS4wNSA0LjIzLTIuOTggNS4yMS01LjM3QzExLjA3IDguMzMgMTQuMDUgMTAgMTcuNDIgMTBjLjc4IDAgMS41My0uMDkgMi4yNS0uMjYuMjEuNzEuMzMgMS40Ny4zMyAyLjI2IDAgNC40MS0zLjU5IDgtOCA4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZhdm9yaXRlIj48cGF0aCBkPSJNMTIgMjEuMzVsLTEuNDUtMS4zMkM1LjQgMTUuMzYgMiAxMi4yOCAyIDguNSAyIDUuNDIgNC40MiAzIDcuNSAzYzEuNzQgMCAzLjQxLjgxIDQuNSAyLjA5QzEzLjA5IDMuODEgMTQuNzYgMyAxNi41IDMgMTkuNTggMyAyMiA1LjQyIDIyIDguNWMwIDMuNzgtMy40IDYuODYtOC41NSAxMS41NEwxMiAyMS4zNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJmYXZvcml0ZS1ib3JkZXIiPjxwYXRoIGQ9Ik0xNi41IDNjLTEuNzQgMC0zLjQxLjgxLTQuNSAyLjA5QzEwLjkxIDMuODEgOS4yNCAzIDcuNSAzIDQuNDIgMyAyIDUuNDIgMiA4LjVjMCAzLjc4IDMuNCA2Ljg2IDguNTUgMTEuNTRMMTIgMjEuMzVsMS40NS0xLjMyQzE4LjYgMTUuMzYgMjIgMTIuMjggMjIgOC41IDIyIDUuNDIgMTkuNTggMyAxNi41IDN6bS00LjQgMTUuNTVsLS4xLjEtLjEtLjFDNy4xNCAxNC4yNCA0IDExLjM5IDQgOC41IDQgNi41IDUuNSA1IDcuNSA1YzEuNTQgMCAzLjA0Ljk5IDMuNTcgMi4zNmgxLjg3QzEzLjQ2IDUuOTkgMTQuOTYgNSAxNi41IDVjMiAwIDMuNSAxLjUgMy41IDMuNSAwIDIuODktMy4xNCA1Ljc0LTcuOSAxMC4wNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJmZWVkYmFjayI+PHBhdGggZD0iTTIwIDJINGMtMS4xIDAtMS45OS45LTEuOTkgMkwyIDIybDQtNGgxNGMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yem0tNyAxMmgtMnYtMmgydjJ6bTAtNGgtMlY2aDJ2NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJmaWxlLWRvd25sb2FkIj48cGF0aCBkPSJNMTkgOWgtNFYzSDl2Nkg1bDcgNyA3LTd6TTUgMTh2MmgxNHYtMkg1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbGUtdXBsb2FkIj48cGF0aCBkPSJNOSAxNmg2di02aDRsLTctNy03IDdoNHptLTQgMmgxNHYySDV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLWxpc3QiPjxwYXRoIGQ9Ik0xMCAxOGg0di0yaC00djJ6TTMgNnYyaDE4VjZIM3ptMyA3aDEydi0ySDZ2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJmaW5kLWluLXBhZ2UiPjxwYXRoIGQ9Ik0yMCAxOS41OVY4bC02LTZINmMtMS4xIDAtMS45OS45LTEuOTkgMkw0IDIwYzAgMS4xLjg5IDIgMS45OSAySDE4Yy40NSAwIC44NS0uMTUgMS4xOS0uNGwtNC40My00LjQzYy0uOC41Mi0xLjc0LjgzLTIuNzYuODMtMi43NiAwLTUtMi4yNC01LTVzMi4yNC01IDUtNSA1IDIuMjQgNSA1YzAgMS4wMi0uMzEgMS45Ni0uODMgMi43NUwyMCAxOS41OXpNOSAxM2MwIDEuNjYgMS4zNCAzIDMgM3MzLTEuMzQgMy0zLTEuMzQtMy0zLTMtMyAxLjM0LTMgM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJmaW5kLXJlcGxhY2UiPjxwYXRoIGQ9Ik0xMSA2YzEuMzggMCAyLjYzLjU2IDMuNTQgMS40NkwxMiAxMGg2VjRsLTIuMDUgMi4wNUMxNC42OCA0Ljc4IDEyLjkzIDQgMTEgNGMtMy41MyAwLTYuNDMgMi42MS02LjkyIDZINi4xYy40Ni0yLjI4IDIuNDgtNCA0LjktNHptNS42NCA5LjE0Yy42Ni0uOSAxLjEyLTEuOTcgMS4yOC0zLjE0SDE1LjljLS40NiAyLjI4LTIuNDggNC00LjkgNC0xLjM4IDAtMi42My0uNTYtMy41NC0xLjQ2TDEwIDEySDR2NmwyLjA1LTIuMDVDNy4zMiAxNy4yMiA5LjA3IDE4IDExIDE4YzEuNTUgMCAyLjk4LS41MSA0LjE0LTEuMzZMMjAgMjEuNDkgMjEuNDkgMjBsLTQuODUtNC44NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJmaW5nZXJwcmludCI+PHBhdGggZD0iTTE3LjgxIDQuNDdjLS4wOCAwLS4xNi0uMDItLjIzLS4wNkMxNS42NiAzLjQyIDE0IDMgMTIuMDEgM2MtMS45OCAwLTMuODYuNDctNS41NyAxLjQxLS4yNC4xMy0uNTQuMDQtLjY4LS4yLS4xMy0uMjQtLjA0LS41NS4yLS42OEM3LjgyIDIuNTIgOS44NiAyIDEyLjAxIDJjMi4xMyAwIDMuOTkuNDcgNi4wMyAxLjUyLjI1LjEzLjM0LjQzLjIxLjY3LS4wOS4xOC0uMjYuMjgtLjQ0LjI4ek0zLjUgOS43MmMtLjEgMC0uMi0uMDMtLjI5LS4wOS0uMjMtLjE2LS4yOC0uNDctLjEyLS43Ljk5LTEuNCAyLjI1LTIuNSAzLjc1LTMuMjdDOS45OCA0LjA0IDE0IDQuMDMgMTcuMTUgNS42NWMxLjUuNzcgMi43NiAxLjg2IDMuNzUgMy4yNS4xNi4yMi4xMS41NC0uMTIuNy0uMjMuMTYtLjU0LjExLS43LS4xMi0uOS0xLjI2LTIuMDQtMi4yNS0zLjM5LTIuOTQtMi44Ny0xLjQ3LTYuNTQtMS40Ny05LjQuMDEtMS4zNi43LTIuNSAxLjctMy40IDIuOTYtLjA4LjE0LS4yMy4yMS0uMzkuMjF6bTYuMjUgMTIuMDdjLS4xMyAwLS4yNi0uMDUtLjM1LS4xNS0uODctLjg3LTEuMzQtMS40My0yLjAxLTIuNjQtLjY5LTEuMjMtMS4wNS0yLjczLTEuMDUtNC4zNCAwLTIuOTcgMi41NC01LjM5IDUuNjYtNS4zOXM1LjY2IDIuNDIgNS42NiA1LjM5YzAgLjI4LS4yMi41LS41LjVzLS41LS4yMi0uNS0uNWMwLTIuNDItMi4wOS00LjM5LTQuNjYtNC4zOS0yLjU3IDAtNC42NiAxLjk3LTQuNjYgNC4zOSAwIDEuNDQuMzIgMi43Ny45MyAzLjg1LjY0IDEuMTUgMS4wOCAxLjY0IDEuODUgMi40Mi4xOS4yLjE5LjUxIDAgLjcxLS4xMS4xLS4yNC4xNS0uMzcuMTV6bTcuMTctMS44NWMtMS4xOSAwLTIuMjQtLjMtMy4xLS44OS0xLjQ5LTEuMDEtMi4zOC0yLjY1LTIuMzgtNC4zOSAwLS4yOC4yMi0uNS41LS41cy41LjIyLjUuNWMwIDEuNDEuNzIgMi43NCAxLjk0IDMuNTYuNzEuNDggMS41NC43MSAyLjU0LjcxLjI0IDAgLjY0LS4wMyAxLjA0LS4xLjI3LS4wNS41My4xMy41OC40MS4wNS4yNy0uMTMuNTMtLjQxLjU4LS41Ny4xMS0xLjA3LjEyLTEuMjEuMTJ6TTE0LjkxIDIyYy0uMDQgMC0uMDktLjAxLS4xMy0uMDItMS41OS0uNDQtMi42My0xLjAzLTMuNzItMi4xLTEuNC0xLjM5LTIuMTctMy4yNC0yLjE3LTUuMjIgMC0xLjYyIDEuMzgtMi45NCAzLjA4LTIuOTQgMS43IDAgMy4wOCAxLjMyIDMuMDggMi45NCAwIDEuMDcuOTMgMS45NCAyLjA4IDEuOTRzMi4wOC0uODcgMi4wOC0xLjk0YzAtMy43Ny0zLjI1LTYuODMtNy4yNS02LjgzLTIuODQgMC01LjQ0IDEuNTgtNi42MSA0LjAzLS4zOS44MS0uNTkgMS43Ni0uNTkgMi44IDAgLjc4LjA3IDIuMDEuNjcgMy42MS4xLjI2LS4wMy41NS0uMjkuNjQtLjI2LjEtLjU1LS4wNC0uNjQtLjI5LS40OS0xLjMxLS43My0yLjYxLS43My0zLjk2IDAtMS4yLjIzLTIuMjkuNjgtMy4yNCAxLjMzLTIuNzkgNC4yOC00LjYgNy41MS00LjYgNC41NSAwIDguMjUgMy41MSA4LjI1IDcuODMgMCAxLjYyLTEuMzggMi45NC0zLjA4IDIuOTRzLTMuMDgtMS4zMi0zLjA4LTIuOTRjMC0xLjA3LS45My0xLjk0LTIuMDgtMS45NHMtMi4wOC44Ny0yLjA4IDEuOTRjMCAxLjcxLjY2IDMuMzEgMS44NyA0LjUxLjk1Ljk0IDEuODYgMS40NiAzLjI3IDEuODUuMjcuMDcuNDIuMzUuMzUuNjEtLjA1LjIzLS4yNi4zOC0uNDcuMzh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlyc3QtcGFnZSI+PHBhdGggZD0iTTE4LjQxIDE2LjU5TDEzLjgyIDEybDQuNTktNC41OUwxNyA2bC02IDYgNiA2ek02IDZoMnYxMkg2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZsYWciPjxwYXRoIGQ9Ik0xNC40IDZMMTQgNEg1djE3aDJ2LTdoNS42bC40IDJoN1Y2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZsaWdodC1sYW5kIj48cGF0aCBkPSJNMi41IDE5aDE5djJoLTE5em03LjE4LTUuNzNsNC4zNSAxLjE2IDUuMzEgMS40MmMuOC4yMSAxLjYyLS4yNiAxLjg0LTEuMDYuMjEtLjgtLjI2LTEuNjItMS4wNi0xLjg0bC01LjMxLTEuNDItMi43Ni05LjAyTDEwLjEyIDJ2OC4yOEw1LjE1IDguOTVsLS45My0yLjMyLTEuNDUtLjM5djUuMTdsMS42LjQzIDUuMzEgMS40M3oiPjwvcGF0aD48L2c+CjxnIGlkPSJmbGlnaHQtdGFrZW9mZiI+PHBhdGggZD0iTTIuNSAxOWgxOXYyaC0xOXptMTkuNTctOS4zNmMtLjIxLS44LTEuMDQtMS4yOC0xLjg0LTEuMDZMMTQuOTIgMTBsLTYuOS02LjQzLTEuOTMuNTEgNC4xNCA3LjE3LTQuOTcgMS4zMy0xLjk3LTEuNTQtMS40NS4zOSAxLjgyIDMuMTYuNzcgMS4zMyAxLjYtLjQzIDUuMzEtMS40MiA0LjM1LTEuMTZMMjEgMTEuNDljLjgxLS4yMyAxLjI4LTEuMDUgMS4wNy0xLjg1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZsaXAtdG8tYmFjayI+PHBhdGggZD0iTTkgN0g3djJoMlY3em0wIDRIN3YyaDJ2LTJ6bTAtOGMtMS4xMSAwLTIgLjktMiAyaDJWM3ptNCAxMmgtMnYyaDJ2LTJ6bTYtMTJ2MmgyYzAtMS4xLS45LTItMi0yem0tNiAwaC0ydjJoMlYzek05IDE3di0ySDdjMCAxLjEuODkgMiAyIDJ6bTEwLTRoMnYtMmgtMnYyem0wLTRoMlY3aC0ydjJ6bTAgOGMxLjEgMCAyLS45IDItMmgtMnYyek01IDdIM3YxMmMwIDEuMS44OSAyIDIgMmgxMnYtMkg1Vjd6bTEwLTJoMlYzaC0ydjJ6bTAgMTJoMnYtMmgtMnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZsaXAtdG8tZnJvbnQiPjxwYXRoIGQ9Ik0zIDEzaDJ2LTJIM3Yyem0wIDRoMnYtMkgzdjJ6bTIgNHYtMkgzYzAgMS4xLjg5IDIgMiAyek0zIDloMlY3SDN2MnptMTIgMTJoMnYtMmgtMnYyem00LTE4SDljLTEuMTEgMC0yIC45LTIgMnYxMGMwIDEuMS44OSAyIDIgMmgxMGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDEySDlWNWgxMHYxMHptLTggNmgydi0yaC0ydjJ6bS00IDBoMnYtMkg3djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZm9sZGVyIj48cGF0aCBkPSJNMTAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yaC04bC0yLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZm9sZGVyLW9wZW4iPjxwYXRoIGQ9Ik0yMCA2aC04bC0yLTJINGMtMS4xIDAtMS45OS45LTEuOTkgMkwyIDE4YzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWOGMwLTEuMS0uOS0yLTItMnptMCAxMkg0VjhoMTZ2MTB6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZm9sZGVyLXNoYXJlZCI+PHBhdGggZD0iTTIwIDZoLThsLTItMkg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yem0tNSAzYzEuMSAwIDIgLjkgMiAycy0uOSAyLTIgMi0yLS45LTItMiAuOS0yIDItMnptNCA4aC04di0xYzAtMS4zMyAyLjY3LTIgNC0yczQgLjY3IDQgMnYxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZvbnQtZG93bmxvYWQiPjxwYXRoIGQ9Ik05LjkzIDEzLjVoNC4xNEwxMiA3Ljk4ek0yMCAySDRjLTEuMSAwLTIgLjktMiAydjE2YzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnptLTQuMDUgMTYuNWwtMS4xNC0zSDkuMTdsLTEuMTIgM0g1Ljk2bDUuMTEtMTNoMS44Nmw1LjExIDEzaC0yLjA5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZvcndhcmQiPjxwYXRoIGQ9Ik0xMiA4VjRsOCA4LTggOHYtNEg0Vjh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZnVsbHNjcmVlbiI+PHBhdGggZD0iTTcgMTRINXY1aDV2LTJIN3YtM3ptLTItNGgyVjdoM1Y1SDV2NXptMTIgN2gtM3YyaDV2LTVoLTJ2M3pNMTQgNXYyaDN2M2gyVjVoLTV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZnVsbHNjcmVlbi1leGl0Ij48cGF0aCBkPSJNNSAxNmgzdjNoMnYtNUg1djJ6bTMtOEg1djJoNVY1SDh2M3ptNiAxMWgydi0zaDN2LTJoLTV2NXptMi0xMVY1aC0ydjVoNVY4aC0zeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImctdHJhbnNsYXRlIj48cGF0aCBkPSJNMjAgNWgtOS4xMkwxMCAySDRjLTEuMSAwLTIgLjktMiAydjEzYzAgMS4xLjkgMiAyIDJoN2wxIDNoOGMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yek03LjE3IDE0LjU5Yy0yLjI1IDAtNC4wOS0xLjgzLTQuMDktNC4wOXMxLjgzLTQuMDkgNC4wOS00LjA5YzEuMDQgMCAxLjk5LjM3IDIuNzQgMS4wN2wuMDcuMDYtMS4yMyAxLjE4LS4wNi0uMDVjLS4yOS0uMjctLjc4LS41OS0xLjUyLS41OS0xLjMxIDAtMi4zOCAxLjA5LTIuMzggMi40MnMxLjA3IDIuNDIgMi4zOCAyLjQyYzEuMzcgMCAxLjk2LS44NyAyLjEyLTEuNDZINy4wOFY5LjkxaDMuOTVsLjAxLjA3Yy4wNC4yMS4wNS40LjA1LjYxIDAgMi4zNS0xLjYxIDQtMy45MiA0em02LjAzLTEuNzFjLjMzLjYuNzQgMS4xOCAxLjE5IDEuN2wtLjU0LjUzLS42NS0yLjIzem0uNzctLjc2aC0uOTlsLS4zMS0xLjA0aDMuOTlzLS4zNCAxLjMxLTEuNTYgMi43NGMtLjUyLS42Mi0uODktMS4yMy0xLjEzLTEuN3pNMjEgMjBjMCAuNTUtLjQ1IDEtMSAxaC03bDItMi0uODEtMi43Ny45Mi0uOTJMMTcuNzkgMThsLjczLS43My0yLjcxLTIuNjhjLjktMS4wMyAxLjYtMi4yNSAxLjkyLTMuNTFIMTl2LTEuMDRoLTMuNjRWOWgtMS4wNHYxLjA0aC0xLjk2TDExLjE4IDZIMjBjLjU1IDAgMSAuNDUgMSAxdjEzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImdhdmVsIj48cGF0aCBkPSJNMSAyMWgxMnYySDF6TTUuMjQ1IDguMDdsMi44My0yLjgyNyAxNC4xNCAxNC4xNDItMi44MjggMi44Mjh6TTEyLjMxNyAxbDUuNjU3IDUuNjU2LTIuODMgMi44My01LjY1NC01LjY2ek0zLjgyNSA5LjQ4NWw1LjY1NyA1LjY1Ny0yLjgyOCAyLjgyOC01LjY1Ny01LjY1N3oiPjwvcGF0aD48L2c+CjxnIGlkPSJnZXN0dXJlIj48cGF0aCBkPSJNNC41OSA2Ljg5Yy43LS43MSAxLjQtMS4zNSAxLjcxLTEuMjIuNS4yIDAgMS4wMy0uMyAxLjUyLS4yNS40Mi0yLjg2IDMuODktMi44NiA2LjMxIDAgMS4yOC40OCAyLjM0IDEuMzQgMi45OC43NS41NiAxLjc0LjczIDIuNjQuNDYgMS4wNy0uMzEgMS45NS0xLjQgMy4wNi0yLjc3IDEuMjEtMS40OSAyLjgzLTMuNDQgNC4wOC0zLjQ0IDEuNjMgMCAxLjY1IDEuMDEgMS43NiAxLjc5LTMuNzguNjQtNS4zOCAzLjY3LTUuMzggNS4zNyAwIDEuNyAxLjQ0IDMuMDkgMy4yMSAzLjA5IDEuNjMgMCA0LjI5LTEuMzMgNC42OS02LjFIMjF2LTIuNWgtMi40N2MtLjE1LTEuNjUtMS4wOS00LjItNC4wMy00LjItMi4yNSAwLTQuMTggMS45MS00Ljk0IDIuODQtLjU4LjczLTIuMDYgMi40OC0yLjI5IDIuNzItLjI1LjMtLjY4Ljg0LTEuMTEuODQtLjQ1IDAtLjcyLS44My0uMzYtMS45Mi4zNS0xLjA5IDEuNC0yLjg2IDEuODUtMy41Mi43OC0xLjE0IDEuMy0xLjkyIDEuMy0zLjI4QzguOTUgMy42OSA3LjMxIDMgNi40NCAzIDUuMTIgMyAzLjk3IDQgMy43MiA0LjI1Yy0uMzYuMzYtLjY2LjY2LS44OC45M2wxLjc1IDEuNzF6bTkuMjkgMTEuNjZjLS4zMSAwLS43NC0uMjYtLjc0LS43MiAwLS42LjczLTIuMiAyLjg3LTIuNzYtLjMgMi42OS0xLjQzIDMuNDgtMi4xMyAzLjQ4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImdldC1hcHAiPjxwYXRoIGQ9Ik0xOSA5aC00VjNIOXY2SDVsNyA3IDctN3pNNSAxOHYyaDE0di0ySDV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZ2lmIj48cGF0aCBkPSJNMTEuNSA5SDEzdjZoLTEuNXpNOSA5SDZjLS42IDAtMSAuNS0xIDF2NGMwIC41LjQgMSAxIDFoM2MuNiAwIDEtLjUgMS0xdi0ySDguNXYxLjVoLTJ2LTNIMTBWMTBjMC0uNS0uNC0xLTEtMXptMTAgMS41VjloLTQuNXY2SDE2di0yaDJ2LTEuNWgtMnYtMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJncmFkZSI+PHBhdGggZD0iTTEyIDE3LjI3TDE4LjE4IDIxbC0xLjY0LTcuMDNMMjIgOS4yNGwtNy4xOS0uNjFMMTIgMiA5LjE5IDguNjMgMiA5LjI0bDUuNDYgNC43M0w1LjgyIDIxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imdyb3VwLXdvcmsiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyek04IDE3LjVjLTEuMzggMC0yLjUtMS4xMi0yLjUtMi41czEuMTItMi41IDIuNS0yLjUgMi41IDEuMTIgMi41IDIuNS0xLjEyIDIuNS0yLjUgMi41ek05LjUgOGMwLTEuMzggMS4xMi0yLjUgMi41LTIuNXMyLjUgMS4xMiAyLjUgMi41LTEuMTIgMi41LTIuNSAyLjVTOS41IDkuMzggOS41IDh6bTYuNSA5LjVjLTEuMzggMC0yLjUtMS4xMi0yLjUtMi41czEuMTItMi41IDIuNS0yLjUgMi41IDEuMTIgMi41IDIuNS0xLjEyIDIuNS0yLjUgMi41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImhlbHAiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0xIDE3aC0ydi0yaDJ2MnptMi4wNy03Ljc1bC0uOS45MkMxMy40NSAxMi45IDEzIDEzLjUgMTMgMTVoLTJ2LS41YzAtMS4xLjQ1LTIuMSAxLjE3LTIuODNsMS4yNC0xLjI2Yy4zNy0uMzYuNTktLjg2LjU5LTEuNDEgMC0xLjEtLjktMi0yLTJzLTIgLjktMiAySDhjMC0yLjIxIDEuNzktNCA0LTRzNCAxLjc5IDQgNGMwIC44OC0uMzYgMS42OC0uOTMgMi4yNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJoZWxwLW91dGxpbmUiPjxwYXRoIGQ9Ik0xMSAxOGgydi0yaC0ydjJ6bTEtMTZDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4em0wLTE0Yy0yLjIxIDAtNCAxLjc5LTQgNGgyYzAtMS4xLjktMiAyLTJzMiAuOSAyIDJjMCAyLTMgMS43NS0zIDVoMmMwLTIuMjUgMy0yLjUgMy01IDAtMi4yMS0xLjc5LTQtNC00eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImhpZ2hsaWdodC1vZmYiPjxwYXRoIGQ9Ik0xNC41OSA4TDEyIDEwLjU5IDkuNDEgOCA4IDkuNDEgMTAuNTkgMTIgOCAxNC41OSA5LjQxIDE2IDEyIDEzLjQxIDE0LjU5IDE2IDE2IDE0LjU5IDEzLjQxIDEyIDE2IDkuNDEgMTQuNTkgOHpNMTIgMkM2LjQ3IDIgMiA2LjQ3IDIgMTJzNC40NyAxMCAxMCAxMCAxMC00LjQ3IDEwLTEwUzE3LjUzIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaGlzdG9yeSI+PHBhdGggZD0iTTEzIDNjLTQuOTcgMC05IDQuMDMtOSA5SDFsMy44OSAzLjg5LjA3LjE0TDkgMTJINmMwLTMuODcgMy4xMy03IDctN3M3IDMuMTMgNyA3LTMuMTMgNy03IDdjLTEuOTMgMC0zLjY4LS43OS00Ljk0LTIuMDZsLTEuNDIgMS40MkM4LjI3IDE5Ljk5IDEwLjUxIDIxIDEzIDIxYzQuOTcgMCA5LTQuMDMgOS05cy00LjAzLTktOS05em0tMSA1djVsNC4yOCAyLjU0LjcyLTEuMjEtMy41LTIuMDhWOEgxMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJob21lIj48cGF0aCBkPSJNMTAgMjB2LTZoNHY2aDV2LThoM0wxMiAzIDIgMTJoM3Y4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImhvdXJnbGFzcy1lbXB0eSI+PHBhdGggZD0iTTYgMnY2aC4wMUw2IDguMDEgMTAgMTJsLTQgNCAuMDEuMDFINlYyMmgxMnYtNS45OWgtLjAxTDE4IDE2bC00LTQgNC0zLjk5LS4wMS0uMDFIMThWMkg2em0xMCAxNC41VjIwSDh2LTMuNWw0LTQgNCA0em0tNC01bC00LTRWNGg4djMuNWwtNCA0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImhvdXJnbGFzcy1mdWxsIj48cGF0aCBkPSJNNiAydjZoLjAxTDYgOC4wMSAxMCAxMmwtNCA0IC4wMS4wMUg2VjIyaDEydi01Ljk5aC0uMDFMMTggMTZsLTQtNCA0LTMuOTktLjAxLS4wMUgxOFYySDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaHR0cCI+PHBhdGggZD0iTTQuNSAxMWgtMlY5SDF2NmgxLjV2LTIuNWgyVjE1SDZWOUg0LjV2MnptMi41LS41aDEuNVYxNUgxMHYtNC41aDEuNVY5SDd2MS41em01LjUgMEgxNFYxNWgxLjV2LTQuNUgxN1Y5aC00LjV2MS41em05LTEuNUgxOHY2aDEuNXYtMmgyYy44IDAgMS41LS43IDEuNS0xLjV2LTFjMC0uOC0uNy0xLjUtMS41LTEuNXptMCAyLjVoLTJ2LTFoMnYxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imh0dHBzIj48cGF0aCBkPSJNMTggOGgtMVY2YzAtMi43Ni0yLjI0LTUtNS01UzcgMy4yNCA3IDZ2Mkg2Yy0xLjEgMC0yIC45LTIgMnYxMGMwIDEuMS45IDIgMiAyaDEyYzEuMSAwIDItLjkgMi0yVjEwYzAtMS4xLS45LTItMi0yem0tNiA5Yy0xLjEgMC0yLS45LTItMnMuOS0yIDItMiAyIC45IDIgMi0uOSAyLTIgMnptMy4xLTlIOC45VjZjMC0xLjcxIDEuMzktMy4xIDMuMS0zLjEgMS43MSAwIDMuMSAxLjM5IDMuMSAzLjF2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJpbXBvcnRhbnQtZGV2aWNlcyI+PHBhdGggZD0iTTIzIDExLjAxTDE4IDExYy0uNTUgMC0xIC40NS0xIDF2OWMwIC41NS40NSAxIDEgMWg1Yy41NSAwIDEtLjQ1IDEtMXYtOWMwLS41NS0uNDUtLjk5LTEtLjk5ek0yMyAyMGgtNXYtN2g1djd6TTIwIDJIMkMuODkgMiAwIDIuODkgMCA0djEyYzAgMS4xLjg5IDIgMiAyaDd2Mkg3djJoOHYtMmgtMnYtMmgydi0ySDJWNGgxOHY1aDJWNGMwLTEuMTEtLjktMi0yLTJ6bS04LjAzIDdMMTEgNmwtLjk3IDNIN2wyLjQ3IDEuNzYtLjk0IDIuOTEgMi40Ny0xLjggMi40NyAxLjgtLjk0LTIuOTFMMTUgOWgtMy4wM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJpbmJveCI+PHBhdGggZD0iTTE5IDNINC45OWMtMS4xMSAwLTEuOTguODktMS45OCAyTDMgMTljMCAxLjEuODggMiAxLjk5IDJIMTljMS4xIDAgMi0uOSAyLTJWNWMwLTEuMTEtLjktMi0yLTJ6bTAgMTJoLTRjMCAxLjY2LTEuMzUgMy0zIDNzLTMtMS4zNC0zLTNINC45OVY1SDE5djEweiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImluZGV0ZXJtaW5hdGUtY2hlY2stYm94Ij48cGF0aCBkPSJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bS0yIDEwSDd2LTJoMTB2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJpbmZvIj48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMSAxNWgtMnYtNmgydjZ6bTAtOGgtMlY3aDJ2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJpbmZvLW91dGxpbmUiPjxwYXRoIGQ9Ik0xMSAxN2gydi02aC0ydjZ6bTEtMTVDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4ek0xMSA5aDJWN2gtMnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImlucHV0Ij48cGF0aCBkPSJNMjEgMy4wMUgzYy0xLjEgMC0yIC45LTIgMlY5aDJWNC45OWgxOHYxNC4wM0gzVjE1SDF2NC4wMWMwIDEuMS45IDEuOTggMiAxLjk4aDE4YzEuMSAwIDItLjg4IDItMS45OHYtMTRjMC0xLjExLS45LTItMi0yek0xMSAxNmw0LTQtNC00djNIMXYyaDEwdjN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaW52ZXJ0LWNvbG9ycyI+PHBhdGggZD0iTTE3LjY2IDcuOTNMMTIgMi4yNyA2LjM0IDcuOTNjLTMuMTIgMy4xMi0zLjEyIDguMTkgMCAxMS4zMUM3LjkgMjAuOCA5Ljk1IDIxLjU4IDEyIDIxLjU4YzIuMDUgMCA0LjEtLjc4IDUuNjYtMi4zNCAzLjEyLTMuMTIgMy4xMi04LjE5IDAtMTEuMzF6TTEyIDE5LjU5Yy0xLjYgMC0zLjExLS42Mi00LjI0LTEuNzZDNi42MiAxNi42OSA2IDE1LjE5IDYgMTMuNTlzLjYyLTMuMTEgMS43Ni00LjI0TDEyIDUuMXYxNC40OXoiPjwvcGF0aD48L2c+CjxnIGlkPSJsYWJlbCI+PHBhdGggZD0iTTE3LjYzIDUuODRDMTcuMjcgNS4zMyAxNi42NyA1IDE2IDVMNSA1LjAxQzMuOSA1LjAxIDMgNS45IDMgN3YxMGMwIDEuMS45IDEuOTkgMiAxLjk5TDE2IDE5Yy42NyAwIDEuMjctLjMzIDEuNjMtLjg0TDIyIDEybC00LjM3LTYuMTZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibGFiZWwtb3V0bGluZSI+PHBhdGggZD0iTTE3LjYzIDUuODRDMTcuMjcgNS4zMyAxNi42NyA1IDE2IDVMNSA1LjAxQzMuOSA1LjAxIDMgNS45IDMgN3YxMGMwIDEuMS45IDEuOTkgMiAxLjk5TDE2IDE5Yy42NyAwIDEuMjctLjMzIDEuNjMtLjg0TDIyIDEybC00LjM3LTYuMTZ6TTE2IDE3SDVWN2gxMWwzLjU1IDVMMTYgMTd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibGFuZ3VhZ2UiPjxwYXRoIGQ9Ik0xMS45OSAyQzYuNDcgMiAyIDYuNDggMiAxMnM0LjQ3IDEwIDkuOTkgMTBDMTcuNTIgMjIgMjIgMTcuNTIgMjIgMTJTMTcuNTIgMiAxMS45OSAyem02LjkzIDZoLTIuOTVjLS4zMi0xLjI1LS43OC0yLjQ1LTEuMzgtMy41NiAxLjg0LjYzIDMuMzcgMS45MSA0LjMzIDMuNTZ6TTEyIDQuMDRjLjgzIDEuMiAxLjQ4IDIuNTMgMS45MSAzLjk2aC0zLjgyYy40My0xLjQzIDEuMDgtMi43NiAxLjkxLTMuOTZ6TTQuMjYgMTRDNC4xIDEzLjM2IDQgMTIuNjkgNCAxMnMuMS0xLjM2LjI2LTJoMy4zOGMtLjA4LjY2LS4xNCAxLjMyLS4xNCAyIDAgLjY4LjA2IDEuMzQuMTQgMkg0LjI2em0uODIgMmgyLjk1Yy4zMiAxLjI1Ljc4IDIuNDUgMS4zOCAzLjU2LTEuODQtLjYzLTMuMzctMS45LTQuMzMtMy41NnptMi45NS04SDUuMDhjLjk2LTEuNjYgMi40OS0yLjkzIDQuMzMtMy41NkM4LjgxIDUuNTUgOC4zNSA2Ljc1IDguMDMgOHpNMTIgMTkuOTZjLS44My0xLjItMS40OC0yLjUzLTEuOTEtMy45NmgzLjgyYy0uNDMgMS40My0xLjA4IDIuNzYtMS45MSAzLjk2ek0xNC4zNCAxNEg5LjY2Yy0uMDktLjY2LS4xNi0xLjMyLS4xNi0yIDAtLjY4LjA3LTEuMzUuMTYtMmg0LjY4Yy4wOS42NS4xNiAxLjMyLjE2IDIgMCAuNjgtLjA3IDEuMzQtLjE2IDJ6bS4yNSA1LjU2Yy42LTEuMTEgMS4wNi0yLjMxIDEuMzgtMy41NmgyLjk1Yy0uOTYgMS42NS0yLjQ5IDIuOTMtNC4zMyAzLjU2ek0xNi4zNiAxNGMuMDgtLjY2LjE0LTEuMzIuMTQtMiAwLS42OC0uMDYtMS4zNC0uMTQtMmgzLjM4Yy4xNi42NC4yNiAxLjMxLjI2IDJzLS4xIDEuMzYtLjI2IDJoLTMuMzh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibGFzdC1wYWdlIj48cGF0aCBkPSJNNS41OSA3LjQxTDEwLjE4IDEybC00LjU5IDQuNTlMNyAxOGw2LTYtNi02ek0xNiA2aDJ2MTJoLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibGF1bmNoIj48cGF0aCBkPSJNMTkgMTlINVY1aDdWM0g1Yy0xLjExIDAtMiAuOS0yIDJ2MTRjMCAxLjEuODkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJ2LTdoLTJ2N3pNMTQgM3YyaDMuNTlsLTkuODMgOS44MyAxLjQxIDEuNDFMMTkgNi40MVYxMGgyVjNoLTd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibGlnaHRidWxiLW91dGxpbmUiPjxwYXRoIGQ9Ik05IDIxYzAgLjU1LjQ1IDEgMSAxaDRjLjU1IDAgMS0uNDUgMS0xdi0xSDl2MXptMy0xOUM4LjE0IDIgNSA1LjE0IDUgOWMwIDIuMzggMS4xOSA0LjQ3IDMgNS43NFYxN2MwIC41NS40NSAxIDEgMWg2Yy41NSAwIDEtLjQ1IDEtMXYtMi4yNmMxLjgxLTEuMjcgMy0zLjM2IDMtNS43NCAwLTMuODYtMy4xNC03LTctN3ptMi44NSAxMS4xbC0uODUuNlYxNmgtNHYtMi4zbC0uODUtLjZDNy44IDEyLjE2IDcgMTAuNjMgNyA5YzAtMi43NiAyLjI0LTUgNS01czUgMi4yNCA1IDVjMCAxLjYzLS44IDMuMTYtMi4xNSA0LjF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibGluZS1zdHlsZSI+PHBhdGggZD0iTTMgMTZoNXYtMkgzdjJ6bTYuNSAwaDV2LTJoLTV2MnptNi41IDBoNXYtMmgtNXYyek0zIDIwaDJ2LTJIM3Yyem00IDBoMnYtMkg3djJ6bTQgMGgydi0yaC0ydjJ6bTQgMGgydi0yaC0ydjJ6bTQgMGgydi0yaC0ydjJ6TTMgMTJoOHYtMkgzdjJ6bTEwIDBoOHYtMmgtOHYyek0zIDR2NGgxOFY0SDN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibGluZS13ZWlnaHQiPjxwYXRoIGQ9Ik0zIDE3aDE4di0ySDN2MnptMCAzaDE4di0xSDN2MXptMC03aDE4di0zSDN2M3ptMC05djRoMThWNEgzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImxpbmsiPjxwYXRoIGQ9Ik0zLjkgMTJjMC0xLjcxIDEuMzktMy4xIDMuMS0zLjFoNFY3SDdjLTIuNzYgMC01IDIuMjQtNSA1czIuMjQgNSA1IDVoNHYtMS45SDdjLTEuNzEgMC0zLjEtMS4zOS0zLjEtMy4xek04IDEzaDh2LTJIOHYyem05LTZoLTR2MS45aDRjMS43MSAwIDMuMSAxLjM5IDMuMSAzLjFzLTEuMzkgMy4xLTMuMSAzLjFoLTRWMTdoNGMyLjc2IDAgNS0yLjI0IDUtNXMtMi4yNC01LTUtNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJsaXN0Ij48cGF0aCBkPSJNMyAxM2gydi0ySDN2MnptMCA0aDJ2LTJIM3Yyem0wLThoMlY3SDN2MnptNCA0aDE0di0ySDd2MnptMCA0aDE0di0ySDd2MnpNNyA3djJoMTRWN0g3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImxvY2siPjxwYXRoIGQ9Ik0xOCA4aC0xVjZjMC0yLjc2LTIuMjQtNS01LTVTNyAzLjI0IDcgNnYySDZjLTEuMSAwLTIgLjktMiAydjEwYzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWMTBjMC0xLjEtLjktMi0yLTJ6bS02IDljLTEuMSAwLTItLjktMi0ycy45LTIgMi0yIDIgLjkgMiAyLS45IDItMiAyem0zLjEtOUg4LjlWNmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMSAxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImxvY2stb3BlbiI+PHBhdGggZD0iTTEyIDE3YzEuMSAwIDItLjkgMi0ycy0uOS0yLTItMi0yIC45LTIgMiAuOSAyIDIgMnptNi05aC0xVjZjMC0yLjc2LTIuMjQtNS01LTVTNyAzLjI0IDcgNmgxLjljMC0xLjcxIDEuMzktMy4xIDMuMS0zLjEgMS43MSAwIDMuMSAxLjM5IDMuMSAzLjF2Mkg2Yy0xLjEgMC0yIC45LTIgMnYxMGMwIDEuMS45IDIgMiAyaDEyYzEuMSAwIDItLjkgMi0yVjEwYzAtMS4xLS45LTItMi0yem0wIDEySDZWMTBoMTJ2MTB6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibG9jay1vdXRsaW5lIj48cGF0aCBkPSJNMTIgMTdjMS4xIDAgMi0uOSAyLTJzLS45LTItMi0yLTIgLjktMiAyIC45IDIgMiAyem02LTloLTFWNmMwLTIuNzYtMi4yNC01LTUtNVM3IDMuMjQgNyA2djJINmMtMS4xIDAtMiAuOS0yIDJ2MTBjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMlYxMGMwLTEuMS0uOS0yLTItMnpNOC45IDZjMC0xLjcxIDEuMzktMy4xIDMuMS0zLjFzMy4xIDEuMzkgMy4xIDMuMXYySDguOVY2ek0xOCAyMEg2VjEwaDEydjEweiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imxvdy1wcmlvcml0eSI+PHBhdGggZD0iTTE0IDVoOHYyaC04em0wIDUuNWg4djJoLTh6bTAgNS41aDh2MmgtOHpNMiAxMS41QzIgMTUuMDggNC45MiAxOCA4LjUgMThIOXYybDMtMy0zLTN2MmgtLjVDNi4wMiAxNiA0IDEzLjk4IDQgMTEuNVM2LjAyIDcgOC41IDdIMTJWNUg4LjVDNC45MiA1IDIgNy45MiAyIDExLjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibG95YWx0eSI+PHBhdGggZD0iTTIxLjQxIDExLjU4bC05LTlDMTIuMDUgMi4yMiAxMS41NSAyIDExIDJINGMtMS4xIDAtMiAuOS0yIDJ2N2MwIC41NS4yMiAxLjA1LjU5IDEuNDJsOSA5Yy4zNi4zNi44Ni41OCAxLjQxLjU4LjU1IDAgMS4wNS0uMjIgMS40MS0uNTlsNy03Yy4zNy0uMzYuNTktLjg2LjU5LTEuNDEgMC0uNTUtLjIzLTEuMDYtLjU5LTEuNDJ6TTUuNSA3QzQuNjcgNyA0IDYuMzMgNCA1LjVTNC42NyA0IDUuNSA0IDcgNC42NyA3IDUuNSA2LjMzIDcgNS41IDd6bTExLjc3IDguMjdMMTMgMTkuNTRsLTQuMjctNC4yN0M4LjI4IDE0LjgxIDggMTQuMTkgOCAxMy41YzAtMS4zOCAxLjEyLTIuNSAyLjUtMi41LjY5IDAgMS4zMi4yOCAxLjc3Ljc0bC43My43Mi43My0uNzNjLjQ1LS40NSAxLjA4LS43MyAxLjc3LS43MyAxLjM4IDAgMi41IDEuMTIgMi41IDIuNSAwIC42OS0uMjggMS4zMi0uNzMgMS43N3oiPjwvcGF0aD48L2c+CjxnIGlkPSJtYWlsIj48cGF0aCBkPSJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0wIDRsLTggNS04LTVWNmw4IDUgOC01djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibWFya3VucmVhZCI+PHBhdGggZD0iTTIwIDRINGMtMS4xIDAtMS45OS45LTEuOTkgMkwyIDE4YzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNmMwLTEuMS0uOS0yLTItMnptMCA0bC04IDUtOC01VjZsOCA1IDgtNXYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im1hcmt1bnJlYWQtbWFpbGJveCI+PHBhdGggZD0iTTIwIDZIMTB2Nkg4VjRoNlYwSDZ2Nkg0Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjhjMC0xLjEtLjktMi0yLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibWVudSI+PHBhdGggZD0iTTMgMThoMTh2LTJIM3Yyem0wLTVoMTh2LTJIM3Yyem0wLTd2MmgxOFY2SDN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibW9yZS1ob3JpeiI+PHBhdGggZD0iTTYgMTBjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem0xMiAwYy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnptLTYgMGMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibW9yZS12ZXJ0Ij48cGF0aCBkPSJNMTIgOGMxLjEgMCAyLS45IDItMnMtLjktMi0yLTItMiAuOS0yIDIgLjkgMiAyIDJ6bTAgMmMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bTAgNmMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibW90b3JjeWNsZSI+PHBhdGggZD0iTTE5LjQ0IDkuMDNMMTUuNDEgNUgxMXYyaDMuNTlsMiAySDVjLTIuOCAwLTUgMi4yLTUgNXMyLjIgNSA1IDVjMi40NiAwIDQuNDUtMS42OSA0LjktNGgxLjY1bDIuNzctMi43N2MtLjIxLjU0LS4zMiAxLjE0LS4zMiAxLjc3IDAgMi44IDIuMiA1IDUgNXM1LTIuMiA1LTVjMC0yLjY1LTEuOTctNC43Ny00LjU2LTQuOTd6TTcuODIgMTVDNy40IDE2LjE1IDYuMjggMTcgNSAxN2MtMS42MyAwLTMtMS4zNy0zLTNzMS4zNy0zIDMtM2MxLjI4IDAgMi40Ljg1IDIuODIgMkg1djJoMi44MnpNMTkgMTdjLTEuNjYgMC0zLTEuMzQtMy0zczEuMzQtMyAzLTMgMyAxLjM0IDMgMy0xLjM0IDMtMyAzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im1vdmUtdG8taW5ib3giPjxwYXRoIGQ9Ik0xOSAzSDQuOTljLTEuMTEgMC0xLjk4LjktMS45OCAyTDMgMTljMCAxLjEuODggMiAxLjk5IDJIMTljMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxMmgtNGMwIDEuNjYtMS4zNSAzLTMgM3MtMy0xLjM0LTMtM0g0Ljk5VjVIMTl2MTB6bS0zLTVoLTJWN2gtNHYzSDhsNCA0IDQtNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJuZXh0LXdlZWsiPjxwYXRoIGQ9Ik0yMCA3aC00VjVjMC0uNTUtLjIyLTEuMDUtLjU5LTEuNDFDMTUuMDUgMy4yMiAxNC41NSAzIDE0IDNoLTRjLTEuMSAwLTIgLjktMiAydjJINGMtMS4xIDAtMiAuOS0yIDJ2MTFjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY5YzAtMS4xLS45LTItMi0yek0xMCA1aDR2MmgtNFY1em0xIDEzLjVsLTEtMSAzLTMtMy0zIDEtMSA0IDQtNCA0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im5vdGUtYWRkIj48cGF0aCBkPSJNMTQgMkg2Yy0xLjEgMC0xLjk5LjktMS45OSAyTDQgMjBjMCAxLjEuODkgMiAxLjk5IDJIMThjMS4xIDAgMi0uOSAyLTJWOGwtNi02em0yIDE0aC0zdjNoLTJ2LTNIOHYtMmgzdi0zaDJ2M2gzdjJ6bS0zLTdWMy41TDE4LjUgOUgxM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJvZmZsaW5lLXBpbiI+PHBhdGggZD0iTTEyIDJDNi41IDIgMiA2LjUgMiAxMnM0LjUgMTAgMTAgMTAgMTAtNC41IDEwLTEwUzE3LjUgMiAxMiAyem01IDE2SDd2LTJoMTB2MnptLTYuNy00TDcgMTAuN2wxLjQtMS40IDEuOSAxLjkgNS4zLTUuM0wxNyA3LjMgMTAuMyAxNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJvcGFjaXR5Ij48cGF0aCBkPSJNMTcuNjYgOEwxMiAyLjM1IDYuMzQgOEM0Ljc4IDkuNTYgNCAxMS42NCA0IDEzLjY0cy43OCA0LjExIDIuMzQgNS42NyAzLjYxIDIuMzUgNS42NiAyLjM1IDQuMS0uNzkgNS42Ni0yLjM1UzIwIDE1LjY0IDIwIDEzLjY0IDE5LjIyIDkuNTYgMTcuNjYgOHpNNiAxNGMuMDEtMiAuNjItMy4yNyAxLjc2LTQuNEwxMiA1LjI3bDQuMjQgNC4zOEMxNy4zOCAxMC43NyAxNy45OSAxMiAxOCAxNEg2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im9wZW4taW4tYnJvd3NlciI+PHBhdGggZD0iTTE5IDRINWMtMS4xMSAwLTIgLjktMiAydjEyYzAgMS4xLjg5IDIgMiAyaDR2LTJINVY4aDE0djEwaC00djJoNGMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS44OS0yLTItMnptLTcgNmwtNCA0aDN2Nmgydi02aDNsLTQtNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJvcGVuLWluLW5ldyI+PHBhdGggZD0iTTE5IDE5SDVWNWg3VjNINWMtMS4xMSAwLTIgLjktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0ydi03aC0ydjd6TTE0IDN2MmgzLjU5bC05LjgzIDkuODMgMS40MSAxLjQxTDE5IDYuNDFWMTBoMlYzaC03eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im9wZW4td2l0aCI+PHBhdGggZD0iTTEwIDloNFY2aDNsLTUtNS01IDVoM3Yzem0tMSAxSDZWN2wtNSA1IDUgNXYtM2gzdi00em0xNCAybC01LTV2M2gtM3Y0aDN2M2w1LTV6bS05IDNoLTR2M0g3bDUgNSA1LTVoLTN2LTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGFnZXZpZXciPjxwYXRoIGQ9Ik0xMS41IDlDMTAuMTIgOSA5IDEwLjEyIDkgMTEuNXMxLjEyIDIuNSAyLjUgMi41IDIuNS0xLjEyIDIuNS0yLjVTMTIuODggOSAxMS41IDl6TTIwIDRINGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0tMy4yMSAxNC4yMWwtMi45MS0yLjkxYy0uNjkuNDQtMS41MS43LTIuMzkuN0M5LjAxIDE2IDcgMTMuOTkgNyAxMS41UzkuMDEgNyAxMS41IDcgMTYgOS4wMSAxNiAxMS41YzAgLjg4LS4yNiAxLjY5LS43IDIuMzlsMi45MSAyLjktMS40MiAxLjQyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBhbi10b29sIj48cGF0aCBkPSJNMjMgNS41VjIwYzAgMi4yLTEuOCA0LTQgNGgtNy4zYy0xLjA4IDAtMi4xLS40My0yLjg1LTEuMTlMMSAxNC44M3MxLjI2LTEuMjMgMS4zLTEuMjVjLjIyLS4xOS40OS0uMjkuNzktLjI5LjIyIDAgLjQyLjA2LjYuMTYuMDQuMDEgNC4zMSAyLjQ2IDQuMzEgMi40NlY0YzAtLjgzLjY3LTEuNSAxLjUtMS41UzExIDMuMTcgMTEgNHY3aDFWMS41YzAtLjgzLjY3LTEuNSAxLjUtMS41UzE1IC42NyAxNSAxLjVWMTFoMVYyLjVjMC0uODMuNjctMS41IDEuNS0xLjVzMS41LjY3IDEuNSAxLjVWMTFoMVY1LjVjMC0uODMuNjctMS41IDEuNS0xLjVzMS41LjY3IDEuNSAxLjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGF5bWVudCI+PHBhdGggZD0iTTIwIDRINGMtMS4xMSAwLTEuOTkuODktMS45OSAyTDIgMThjMCAxLjExLjg5IDIgMiAyaDE2YzEuMTEgMCAyLS44OSAyLTJWNmMwLTEuMTEtLjg5LTItMi0yem0wIDE0SDR2LTZoMTZ2NnptMC0xMEg0VjZoMTZ2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJwZXJtLWNhbWVyYS1taWMiPjxwYXRoIGQ9Ik0yMCA1aC0zLjE3TDE1IDNIOUw3LjE3IDVINGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmg3di0yLjA5Yy0yLjgzLS40OC01LTIuOTQtNS01LjkxaDJjMCAyLjIxIDEuNzkgNCA0IDRzNC0xLjc5IDQtNGgyYzAgMi45Ny0yLjE3IDUuNDMtNSA1LjkxVjIxaDdjMS4xIDAgMi0uOSAyLTJWN2MwLTEuMS0uOS0yLTItMnptLTYgOGMwIDEuMS0uOSAyLTIgMnMtMi0uOS0yLTJWOWMwLTEuMS45LTIgMi0yczIgLjkgMiAydjR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGVybS1jb250YWN0LWNhbGVuZGFyIj48cGF0aCBkPSJNMTkgM2gtMVYxaC0ydjJIOFYxSDZ2Mkg1Yy0xLjExIDAtMiAuOS0yIDJ2MTRjMCAxLjEuODkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTcgM2MxLjY2IDAgMyAxLjM0IDMgM3MtMS4zNCAzLTMgMy0zLTEuMzQtMy0zIDEuMzQtMyAzLTN6bTYgMTJINnYtMWMwLTIgNC0zLjEgNi0zLjFzNiAxLjEgNiAzLjF2MXoiPjwvcGF0aD48L2c+CjxnIGlkPSJwZXJtLWRhdGEtc2V0dGluZyI+PHBhdGggZD0iTTE4Ljk5IDExLjVjLjM0IDAgLjY3LjAzIDEgLjA3TDIwIDAgMCAyMGgxMS41NmMtLjA0LS4zMy0uMDctLjY2LS4wNy0xIDAtNC4xNCAzLjM2LTcuNSA3LjUtNy41em0zLjcxIDcuOTljLjAyLS4xNi4wNC0uMzIuMDQtLjQ5IDAtLjE3LS4wMS0uMzMtLjA0LS40OWwxLjA2LS44M2MuMDktLjA4LjEyLS4yMS4wNi0uMzJsLTEtMS43M2MtLjA2LS4xMS0uMTktLjE1LS4zMS0uMTFsLTEuMjQuNWMtLjI2LS4yLS41NC0uMzctLjg1LS40OWwtLjE5LTEuMzJjLS4wMS0uMTItLjEyLS4yMS0uMjQtLjIxaC0yYy0uMTIgMC0uMjMuMDktLjI1LjIxbC0uMTkgMS4zMmMtLjMuMTMtLjU5LjI5LS44NS40OWwtMS4yNC0uNWMtLjExLS4wNC0uMjQgMC0uMzEuMTFsLTEgMS43M2MtLjA2LjExLS4wNC4yNC4wNi4zMmwxLjA2LjgzYy0uMDIuMTYtLjAzLjMyLS4wMy40OSAwIC4xNy4wMS4zMy4wMy40OWwtMS4wNi44M2MtLjA5LjA4LS4xMi4yMS0uMDYuMzJsMSAxLjczYy4wNi4xMS4xOS4xNS4zMS4xMWwxLjI0LS41Yy4yNi4yLjU0LjM3Ljg1LjQ5bC4xOSAxLjMyYy4wMi4xMi4xMi4yMS4yNS4yMWgyYy4xMiAwIC4yMy0uMDkuMjUtLjIxbC4xOS0xLjMyYy4zLS4xMy41OS0uMjkuODQtLjQ5bDEuMjUuNWMuMTEuMDQuMjQgMCAuMzEtLjExbDEtMS43M2MuMDYtLjExLjAzLS4yNC0uMDYtLjMybC0xLjA3LS44M3ptLTMuNzEgMS4wMWMtLjgzIDAtMS41LS42Ny0xLjUtMS41cy42Ny0xLjUgMS41LTEuNSAxLjUuNjcgMS41IDEuNS0uNjcgMS41LTEuNSAxLjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGVybS1kZXZpY2UtaW5mb3JtYXRpb24iPjxwYXRoIGQ9Ik0xMyA3aC0ydjJoMlY3em0wIDRoLTJ2Nmgydi02em00LTkuOTlMNyAxYy0xLjEgMC0yIC45LTIgMnYxOGMwIDEuMS45IDIgMiAyaDEwYzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMS45OS0yLTEuOTl6TTE3IDE5SDdWNWgxMHYxNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJwZXJtLWlkZW50aXR5Ij48cGF0aCBkPSJNMTIgNS45YzEuMTYgMCAyLjEuOTQgMi4xIDIuMXMtLjk0IDIuMS0yLjEgMi4xUzkuOSA5LjE2IDkuOSA4cy45NC0yLjEgMi4xLTIuMW0wIDljMi45NyAwIDYuMSAxLjQ2IDYuMSAyLjF2MS4xSDUuOVYxN2MwLS42NCAzLjEzLTIuMSA2LjEtMi4xTTEyIDRDOS43OSA0IDggNS43OSA4IDhzMS43OSA0IDQgNCA0LTEuNzkgNC00LTEuNzktNC00LTR6bTAgOWMtMi42NyAwLTggMS4zNC04IDR2M2gxNnYtM2MwLTIuNjYtNS4zMy00LTgtNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJwZXJtLW1lZGlhIj48cGF0aCBkPSJNMiA2SDB2NWguMDFMMCAyMGMwIDEuMS45IDIgMiAyaDE4di0ySDJWNnptMjAtMmgtOGwtMi0ySDZjLTEuMSAwLTEuOTkuOS0xLjk5IDJMNCAxNmMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6TTcgMTVsNC41LTYgMy41IDQuNTEgMi41LTMuMDFMMjEgMTVIN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJwZXJtLXBob25lLW1zZyI+PHBhdGggZD0iTTIwIDE1LjVjLTEuMjUgMC0yLjQ1LS4yLTMuNTctLjU3LS4zNS0uMTEtLjc0LS4wMy0xLjAyLjI0bC0yLjIgMi4yYy0yLjgzLTEuNDQtNS4xNS0zLjc1LTYuNTktNi41OGwyLjItMi4yMWMuMjgtLjI3LjM2LS42Ni4yNS0xLjAxQzguNyA2LjQ1IDguNSA1LjI1IDguNSA0YzAtLjU1LS40NS0xLTEtMUg0Yy0uNTUgMC0xIC40NS0xIDEgMCA5LjM5IDcuNjEgMTcgMTcgMTcgLjU1IDAgMS0uNDUgMS0xdi0zLjVjMC0uNTUtLjQ1LTEtMS0xek0xMiAzdjEwbDMtM2g2VjNoLTl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGVybS1zY2FuLXdpZmkiPjxwYXRoIGQ9Ik0xMiAzQzYuOTUgMyAzLjE1IDQuODUgMCA3LjIzTDEyIDIyIDI0IDcuMjVDMjAuODUgNC44NyAxNy4wNSAzIDEyIDN6bTEgMTNoLTJ2LTZoMnY2em0tMi04VjZoMnYyaC0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBldHMiPjxjaXJjbGUgY3g9IjQuNSIgY3k9IjkuNSIgcj0iMi41Ij48L2NpcmNsZT48Y2lyY2xlIGN4PSI5IiBjeT0iNS41IiByPSIyLjUiPjwvY2lyY2xlPjxjaXJjbGUgY3g9IjE1IiBjeT0iNS41IiByPSIyLjUiPjwvY2lyY2xlPjxjaXJjbGUgY3g9IjE5LjUiIGN5PSI5LjUiIHI9IjIuNSI+PC9jaXJjbGU+PHBhdGggZD0iTTE3LjM0IDE0Ljg2Yy0uODctMS4wMi0xLjYtMS44OS0yLjQ4LTIuOTEtLjQ2LS41NC0xLjA1LTEuMDgtMS43NS0xLjMyLS4xMS0uMDQtLjIyLS4wNy0uMzMtLjA5LS4yNS0uMDQtLjUyLS4wNC0uNzgtLjA0cy0uNTMgMC0uNzkuMDVjLS4xMS4wMi0uMjIuMDUtLjMzLjA5LS43LjI0LTEuMjguNzgtMS43NSAxLjMyLS44NyAxLjAyLTEuNiAxLjg5LTIuNDggMi45MS0xLjMxIDEuMzEtMi45MiAyLjc2LTIuNjIgNC43OS4yOSAxLjAyIDEuMDIgMi4wMyAyLjMzIDIuMzIuNzMuMTUgMy4wNi0uNDQgNS41NC0uNDRoLjE4YzIuNDggMCA0LjgxLjU4IDUuNTQuNDQgMS4zMS0uMjkgMi4wNC0xLjMxIDIuMzMtMi4zMi4zMS0yLjA0LTEuMy0zLjQ5LTIuNjEtNC44eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBpY3R1cmUtaW4tcGljdHVyZSI+PHBhdGggZD0iTTE5IDdoLTh2Nmg4Vjd6bTItNEgzYy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDEuOTggMiAxLjk4aDE4YzEuMSAwIDItLjg4IDItMS45OFY1YzAtMS4xLS45LTItMi0yem0wIDE2LjAxSDNWNC45OGgxOHYxNC4wM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJwaWN0dXJlLWluLXBpY3R1cmUtYWx0Ij48cGF0aCBkPSJNMTkgMTFoLTh2Nmg4di02em00IDhWNC45OEMyMyAzLjg4IDIyLjEgMyAyMSAzSDNjLTEuMSAwLTIgLjg4LTIgMS45OFYxOWMwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yem0tMiAuMDJIM1Y0Ljk3aDE4djE0LjA1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBsYXktZm9yLXdvcmsiPjxwYXRoIGQ9Ik0xMSA1djUuNTlINy41bDQuNSA0LjUgNC41LTQuNUgxM1Y1aC0yem0tNSA5YzAgMy4zMSAyLjY5IDYgNiA2czYtMi42OSA2LTZoLTJjMCAyLjIxLTEuNzkgNC00IDRzLTQtMS43OS00LTRINnoiPjwvcGF0aD48L2c+CjxnIGlkPSJwb2x5bWVyIj48cGF0aCBkPSJNMTkgNGgtNEw3LjExIDE2LjYzIDQuNSAxMiA5IDRINUwuNSAxMiA1IDIwaDRsNy44OS0xMi42M0wxOS41IDEyIDE1IDIwaDRsNC41LTh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icG93ZXItc2V0dGluZ3MtbmV3Ij48cGF0aCBkPSJNMTMgM2gtMnYxMGgyVjN6bTQuODMgMi4xN2wtMS40MiAxLjQyQzE3Ljk5IDcuODYgMTkgOS44MSAxOSAxMmMwIDMuODctMy4xMyA3LTcgN3MtNy0zLjEzLTctN2MwLTIuMTkgMS4wMS00LjE0IDIuNTgtNS40Mkw2LjE3IDUuMTdDNC4yMyA2LjgyIDMgOS4yNiAzIDEyYzAgNC45NyA0LjAzIDkgOSA5czktNC4wMyA5LTljMC0yLjc0LTEuMjMtNS4xOC0zLjE3LTYuODN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icHJlZ25hbnQtd29tYW4iPjxwYXRoIGQ9Ik05IDRjMC0xLjExLjg5LTIgMi0yczIgLjg5IDIgMi0uODkgMi0yIDItMi0uODktMi0yem03IDljLS4wMS0xLjM0LS44My0yLjUxLTItMyAwLTEuNjYtMS4zNC0zLTMtM3MtMyAxLjM0LTMgM3Y3aDJ2NWgzdi01aDN2LTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icHJpbnQiPjxwYXRoIGQ9Ik0xOSA4SDVjLTEuNjYgMC0zIDEuMzQtMyAzdjZoNHY0aDEydi00aDR2LTZjMC0xLjY2LTEuMzQtMy0zLTN6bS0zIDExSDh2LTVoOHY1em0zLTdjLS41NSAwLTEtLjQ1LTEtMXMuNDUtMSAxLTEgMSAuNDUgMSAxLS40NSAxLTEgMXptLTEtOUg2djRoMTJWM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJxdWVyeS1idWlsZGVyIj48cGF0aCBkPSJNMTEuOTkgMkM2LjQ3IDIgMiA2LjQ4IDIgMTJzNC40NyAxMCA5Ljk5IDEwQzE3LjUyIDIyIDIyIDE3LjUyIDIyIDEyUzE3LjUyIDIgMTEuOTkgMnpNMTIgMjBjLTQuNDIgMC04LTMuNTgtOC04czMuNTgtOCA4LTggOCAzLjU4IDggOC0zLjU4IDgtOCA4em0uNS0xM0gxMXY2bDUuMjUgMy4xNS43NS0xLjIzLTQuNS0yLjY3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InF1ZXN0aW9uLWFuc3dlciI+PHBhdGggZD0iTTIxIDZoLTJ2OUg2djJjMCAuNTUuNDUgMSAxIDFoMTFsNCA0VjdjMC0uNTUtLjQ1LTEtMS0xem0tNCA2VjNjMC0uNTUtLjQ1LTEtMS0xSDNjLS41NSAwLTEgLjQ1LTEgMXYxNGw0LTRoMTBjLjU1IDAgMS0uNDUgMS0xeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJhZGlvLWJ1dHRvbi1jaGVja2VkIj48cGF0aCBkPSJNMTIgN2MtMi43NiAwLTUgMi4yNC01IDVzMi4yNCA1IDUgNSA1LTIuMjQgNS01LTIuMjQtNS01LTV6bTAtNUM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MiAwLTgtMy41OC04LThzMy41OC04IDgtOCA4IDMuNTggOCA4LTMuNTggOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmFkaW8tYnV0dG9uLXVuY2hlY2tlZCI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgMThjLTQuNDIgMC04LTMuNTgtOC04czMuNTgtOCA4LTggOCAzLjU4IDggOC0zLjU4IDgtOCA4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJlY2VpcHQiPjxwYXRoIGQ9Ik0xOCAxN0g2di0yaDEydjJ6bTAtNEg2di0yaDEydjJ6bTAtNEg2VjdoMTJ2MnpNMyAyMmwxLjUtMS41TDYgMjJsMS41LTEuNUw5IDIybDEuNS0xLjVMMTIgMjJsMS41LTEuNUwxNSAyMmwxLjUtMS41TDE4IDIybDEuNS0xLjVMMjEgMjJWMmwtMS41IDEuNUwxOCAybC0xLjUgMS41TDE1IDJsLTEuNSAxLjVMMTIgMmwtMS41IDEuNUw5IDIgNy41IDMuNSA2IDIgNC41IDMuNSAzIDJ2MjB6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmVjb3JkLXZvaWNlLW92ZXIiPjxjaXJjbGUgY3g9IjkiIGN5PSI5IiByPSI0Ij48L2NpcmNsZT48cGF0aCBkPSJNOSAxNWMtMi42NyAwLTggMS4zNC04IDR2MmgxNnYtMmMwLTIuNjYtNS4zMy00LTgtNHptNy43Ni05LjY0bC0xLjY4IDEuNjljLjg0IDEuMTguODQgMi43MSAwIDMuODlsMS42OCAxLjY5YzIuMDItMi4wMiAyLjAyLTUuMDcgMC03LjI3ek0yMC4wNyAybC0xLjYzIDEuNjNjMi43NyAzLjAyIDIuNzcgNy41NiAwIDEwLjc0TDIwLjA3IDE2YzMuOS0zLjg5IDMuOTEtOS45NSAwLTE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJlZGVlbSI+PHBhdGggZD0iTTIwIDZoLTIuMThjLjExLS4zMS4xOC0uNjUuMTgtMSAwLTEuNjYtMS4zNC0zLTMtMy0xLjA1IDAtMS45Ni41NC0yLjUgMS4zNWwtLjUuNjctLjUtLjY4QzEwLjk2IDIuNTQgMTAuMDUgMiA5IDIgNy4zNCAyIDYgMy4zNCA2IDVjMCAuMzUuMDcuNjkuMTggMUg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOWMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY4YzAtMS4xMS0uODktMi0yLTJ6bS01LTJjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXpNOSA0Yy41NSAwIDEgLjQ1IDEgMXMtLjQ1IDEtMSAxLTEtLjQ1LTEtMSAuNDUtMSAxLTF6bTExIDE1SDR2LTJoMTZ2MnptMC01SDRWOGg1LjA4TDcgMTAuODMgOC42MiAxMiAxMSA4Ljc2bDEtMS4zNiAxIDEuMzZMMTUuMzggMTIgMTcgMTAuODMgMTQuOTIgOEgyMHY2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJlZG8iPjxwYXRoIGQ9Ik0xOC40IDEwLjZDMTYuNTUgOC45OSAxNC4xNSA4IDExLjUgOGMtNC42NSAwLTguNTggMy4wMy05Ljk2IDcuMjJMMy45IDE2YzEuMDUtMy4xOSA0LjA1LTUuNSA3LjYtNS41IDEuOTUgMCAzLjczLjcyIDUuMTIgMS44OEwxMyAxNmg5VjdsLTMuNiAzLjZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmVmcmVzaCI+PHBhdGggZD0iTTE3LjY1IDYuMzVDMTYuMiA0LjkgMTQuMjEgNCAxMiA0Yy00LjQyIDAtNy45OSAzLjU4LTcuOTkgOHMzLjU3IDggNy45OSA4YzMuNzMgMCA2Ljg0LTIuNTUgNy43My02aC0yLjA4Yy0uODIgMi4zMy0zLjA0IDQtNS42NSA0LTMuMzEgMC02LTIuNjktNi02czIuNjktNiA2LTZjMS42NiAwIDMuMTQuNjkgNC4yMiAxLjc4TDEzIDExaDdWNGwtMi4zNSAyLjM1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJlbW92ZSI+PHBhdGggZD0iTTE5IDEzSDV2LTJoMTR2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZW1vdmUtY2lyY2xlIj48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptNSAxMUg3di0yaDEwdjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmVtb3ZlLWNpcmNsZS1vdXRsaW5lIj48cGF0aCBkPSJNNyAxMXYyaDEwdi0ySDd6bTUtOUM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmVtb3ZlLXNob3BwaW5nLWNhcnQiPjxwYXRoIGQ9Ik0yMi43MyAyMi43M0wyLjc3IDIuNzcgMiAybC0uNzMtLjczTDAgMi41NGw0LjM5IDQuMzkgMi4yMSA0LjY2LTEuMzUgMi40NWMtLjE2LjI4LS4yNS42MS0uMjUuOTYgMCAxLjEuOSAyIDIgMmg3LjQ2bDEuMzggMS4zOGMtLjUuMzYtLjgzLjk1LS44MyAxLjYyIDAgMS4xLjg5IDIgMS45OSAyIC42NyAwIDEuMjYtLjMzIDEuNjItLjg0TDIxLjQ2IDI0bDEuMjctMS4yN3pNNy40MiAxNWMtLjE0IDAtLjI1LS4xMS0uMjUtLjI1bC4wMy0uMTIuOS0xLjYzaDIuMzZsMiAySDcuNDJ6bTguMTMtMmMuNzUgMCAxLjQxLS40MSAxLjc1LTEuMDNsMy41OC02LjQ5Yy4wOC0uMTQuMTItLjMxLjEyLS40OCAwLS41NS0uNDUtMS0xLTFINi41NGw5LjAxIDl6TTcgMThjLTEuMSAwLTEuOTkuOS0xLjk5IDJTNS45IDIyIDcgMjJzMi0uOSAyLTItLjktMi0yLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmVvcmRlciI+PHBhdGggZD0iTTMgMTVoMTh2LTJIM3Yyem0wIDRoMTh2LTJIM3Yyem0wLThoMThWOUgzdjJ6bTAtNnYyaDE4VjVIM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJyZXBseSI+PHBhdGggZD0iTTEwIDlWNWwtNyA3IDcgN3YtNC4xYzUgMCA4LjUgMS42IDExIDUuMS0xLTUtNC0xMC0xMS0xMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZXBseS1hbGwiPjxwYXRoIGQ9Ik03IDhWNWwtNyA3IDcgN3YtM2wtNC00IDQtNHptNiAxVjVsLTcgNyA3IDd2LTQuMWM1IDAgOC41IDEuNiAxMSA1LjEtMS01LTQtMTAtMTEtMTF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmVwb3J0Ij48cGF0aCBkPSJNMTUuNzMgM0g4LjI3TDMgOC4yN3Y3LjQ2TDguMjcgMjFoNy40NkwyMSAxNS43M1Y4LjI3TDE1LjczIDN6TTEyIDE3LjNjLS43MiAwLTEuMy0uNTgtMS4zLTEuMyAwLS43Mi41OC0xLjMgMS4zLTEuMy43MiAwIDEuMy41OCAxLjMgMS4zIDAgLjcyLS41OCAxLjMtMS4zIDEuM3ptMS00LjNoLTJWN2gydjZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmVwb3J0LXByb2JsZW0iPjxwYXRoIGQ9Ik0xIDIxaDIyTDEyIDIgMSAyMXptMTItM2gtMnYtMmgydjJ6bTAtNGgtMnYtNGgydjR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmVzdG9yZSI+PHBhdGggZD0iTTEzIDNjLTQuOTcgMC05IDQuMDMtOSA5SDFsMy44OSAzLjg5LjA3LjE0TDkgMTJINmMwLTMuODcgMy4xMy03IDctN3M3IDMuMTMgNyA3LTMuMTMgNy03IDdjLTEuOTMgMC0zLjY4LS43OS00Ljk0LTIuMDZsLTEuNDIgMS40MkM4LjI3IDE5Ljk5IDEwLjUxIDIxIDEzIDIxYzQuOTcgMCA5LTQuMDMgOS05cy00LjAzLTktOS05em0tMSA1djVsNC4yOCAyLjU0LjcyLTEuMjEtMy41LTIuMDhWOEgxMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZXN0b3JlLXBhZ2UiPjxwYXRoIGQ9Ik0xNCAySDZjLTEuMSAwLTEuOTkuOS0xLjk5IDJMNCAyMGMwIDEuMS44OSAyIDEuOTkgMkgxOGMxLjEgMCAyLS45IDItMlY4bC02LTZ6bS0yIDE2Yy0yLjA1IDAtMy44MS0xLjI0LTQuNTgtM2gxLjcxYy42My45IDEuNjggMS41IDIuODcgMS41IDEuOTMgMCAzLjUtMS41NyAzLjUtMy41UzEzLjkzIDkuNSAxMiA5LjVjLTEuMzUgMC0yLjUyLjc4LTMuMSAxLjlsMS42IDEuNmgtNFY5bDEuMyAxLjNDOC42OSA4LjkyIDEwLjIzIDggMTIgOGMyLjc2IDAgNSAyLjI0IDUgNXMtMi4yNCA1LTUgNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJyb29tIj48cGF0aCBkPSJNMTIgMkM4LjEzIDIgNSA1LjEzIDUgOWMwIDUuMjUgNyAxMyA3IDEzczctNy43NSA3LTEzYzAtMy44Ny0zLjEzLTctNy03em0wIDkuNWMtMS4zOCAwLTIuNS0xLjEyLTIuNS0yLjVzMS4xMi0yLjUgMi41LTIuNSAyLjUgMS4xMiAyLjUgMi41LTEuMTIgMi41LTIuNSAyLjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icm91bmRlZC1jb3JuZXIiPjxwYXRoIGQ9Ik0xOSAxOWgydjJoLTJ2LTJ6bTAtMmgydi0yaC0ydjJ6TTMgMTNoMnYtMkgzdjJ6bTAgNGgydi0ySDN2MnptMC04aDJWN0gzdjJ6bTAtNGgyVjNIM3Yyem00IDBoMlYzSDd2MnptOCAxNmgydi0yaC0ydjJ6bS00IDBoMnYtMmgtMnYyem00IDBoMnYtMmgtMnYyem0tOCAwaDJ2LTJIN3Yyem0tNCAwaDJ2LTJIM3Yyek0yMSA4YzAtMi43Ni0yLjI0LTUtNS01aC01djJoNWMxLjY1IDAgMyAxLjM1IDMgM3Y1aDJWOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJyb3dpbmciPjxwYXRoIGQ9Ik04LjUgMTQuNUw0IDE5bDEuNSAxLjVMOSAxN2gybC0yLjUtMi41ek0xNSAxYy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnptNiAyMC4wMUwxOCAyNGwtMi45OS0zLjAxVjE5LjVsLTcuMS03LjA5Yy0uMzEuMDUtLjYxLjA3LS45MS4wN3YtMi4xNmMxLjY2LjAzIDMuNjEtLjg3IDQuNjctMi4wNGwxLjQtMS41NWMuMTktLjIxLjQzLS4zOC42OS0uNS4yOS0uMTQuNjItLjIzLjk2LS4yM2guMDNDMTUuOTkgNi4wMSAxNyA3LjAyIDE3IDguMjZ2NS43NWMwIC44NC0uMzUgMS42MS0uOTIgMi4xNmwtMy41OC0zLjU4di0yLjI3Yy0uNjMuNTItMS40MyAxLjAyLTIuMjkgMS4zOUwxNi41IDE4SDE4bDMgMy4wMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJzYXZlIj48cGF0aCBkPSJNMTcgM0g1Yy0xLjExIDAtMiAuOS0yIDJ2MTRjMCAxLjEuODkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWN2wtNC00em0tNSAxNmMtMS42NiAwLTMtMS4zNC0zLTNzMS4zNC0zIDMtMyAzIDEuMzQgMyAzLTEuMzQgMy0zIDN6bTMtMTBINVY1aDEwdjR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2NoZWR1bGUiPjxwYXRoIGQ9Ik0xMS45OSAyQzYuNDcgMiAyIDYuNDggMiAxMnM0LjQ3IDEwIDkuOTkgMTBDMTcuNTIgMjIgMjIgMTcuNTIgMjIgMTJTMTcuNTIgMiAxMS45OSAyek0xMiAyMGMtNC40MiAwLTgtMy41OC04LThzMy41OC04IDgtOCA4IDMuNTggOCA4LTMuNTggOC04IDh6bS41LTEzSDExdjZsNS4yNSAzLjE1Ljc1LTEuMjMtNC41LTIuNjd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2VhcmNoIj48cGF0aCBkPSJNMTUuNSAxNGgtLjc5bC0uMjgtLjI3QzE1LjQxIDEyLjU5IDE2IDExLjExIDE2IDkuNSAxNiA1LjkxIDEzLjA5IDMgOS41IDNTMyA1LjkxIDMgOS41IDUuOTEgMTYgOS41IDE2YzEuNjEgMCAzLjA5LS41OSA0LjIzLTEuNTdsLjI3LjI4di43OWw1IDQuOTlMMjAuNDkgMTlsLTQuOTktNXptLTYgMEM3LjAxIDE0IDUgMTEuOTkgNSA5LjVTNy4wMSA1IDkuNSA1IDE0IDcuMDEgMTQgOS41IDExLjk5IDE0IDkuNSAxNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJzZWxlY3QtYWxsIj48cGF0aCBkPSJNMyA1aDJWM2MtMS4xIDAtMiAuOS0yIDJ6bTAgOGgydi0ySDN2MnptNCA4aDJ2LTJIN3Yyek0zIDloMlY3SDN2MnptMTAtNmgtMnYyaDJWM3ptNiAwdjJoMmMwLTEuMS0uOS0yLTItMnpNNSAyMXYtMkgzYzAgMS4xLjkgMiAyIDJ6bS0yLTRoMnYtMkgzdjJ6TTkgM0g3djJoMlYzem0yIDE4aDJ2LTJoLTJ2MnptOC04aDJ2LTJoLTJ2MnptMCA4YzEuMSAwIDItLjkgMi0yaC0ydjJ6bTAtMTJoMlY3aC0ydjJ6bTAgOGgydi0yaC0ydjJ6bS00IDRoMnYtMmgtMnYyem0wLTE2aDJWM2gtMnYyek03IDE3aDEwVjdIN3YxMHptMi04aDZ2Nkg5Vjl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2VuZCI+PHBhdGggZD0iTTIuMDEgMjFMMjMgMTIgMi4wMSAzIDIgMTBsMTUgMi0xNSAyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzIj48cGF0aCBkPSJNMTkuNDMgMTIuOThjLjA0LS4zMi4wNy0uNjQuMDctLjk4cy0uMDMtLjY2LS4wNy0uOThsMi4xMS0xLjY1Yy4xOS0uMTUuMjQtLjQyLjEyLS42NGwtMi0zLjQ2Yy0uMTItLjIyLS4zOS0uMy0uNjEtLjIybC0yLjQ5IDFjLS41Mi0uNC0xLjA4LS43My0xLjY5LS45OGwtLjM4LTIuNjVDMTQuNDYgMi4xOCAxNC4yNSAyIDE0IDJoLTRjLS4yNSAwLS40Ni4xOC0uNDkuNDJsLS4zOCAyLjY1Yy0uNjEuMjUtMS4xNy41OS0xLjY5Ljk4bC0yLjQ5LTFjLS4yMy0uMDktLjQ5IDAtLjYxLjIybC0yIDMuNDZjLS4xMy4yMi0uMDcuNDkuMTIuNjRsMi4xMSAxLjY1Yy0uMDQuMzItLjA3LjY1LS4wNy45OHMuMDMuNjYuMDcuOThsLTIuMTEgMS42NWMtLjE5LjE1LS4yNC40Mi0uMTIuNjRsMiAzLjQ2Yy4xMi4yMi4zOS4zLjYxLjIybDIuNDktMWMuNTIuNCAxLjA4LjczIDEuNjkuOThsLjM4IDIuNjVjLjAzLjI0LjI0LjQyLjQ5LjQyaDRjLjI1IDAgLjQ2LS4xOC40OS0uNDJsLjM4LTIuNjVjLjYxLS4yNSAxLjE3LS41OSAxLjY5LS45OGwyLjQ5IDFjLjIzLjA5LjQ5IDAgLjYxLS4yMmwyLTMuNDZjLjEyLS4yMi4wNy0uNDktLjEyLS42NGwtMi4xMS0xLjY1ek0xMiAxNS41Yy0xLjkzIDAtMy41LTEuNTctMy41LTMuNXMxLjU3LTMuNSAzLjUtMy41IDMuNSAxLjU3IDMuNSAzLjUtMS41NyAzLjUtMy41IDMuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJzZXR0aW5ncy1hcHBsaWNhdGlvbnMiPjxwYXRoIGQ9Ik0xMiAxMGMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bTctN0g1Yy0xLjExIDAtMiAuOS0yIDJ2MTRjMCAxLjEuODkgMiAyIDJoMTRjMS4xMSAwIDItLjkgMi0yVjVjMC0xLjEtLjg5LTItMi0yem0tMS43NSA5YzAgLjIzLS4wMi40Ni0uMDUuNjhsMS40OCAxLjE2Yy4xMy4xMS4xNy4zLjA4LjQ1bC0xLjQgMi40MmMtLjA5LjE1LS4yNy4yMS0uNDMuMTVsLTEuNzQtLjdjLS4zNi4yOC0uNzYuNTEtMS4xOC42OWwtLjI2IDEuODVjLS4wMy4xNy0uMTguMy0uMzUuM2gtMi44Yy0uMTcgMC0uMzItLjEzLS4zNS0uMjlsLS4yNi0xLjg1Yy0uNDMtLjE4LS44Mi0uNDEtMS4xOC0uNjlsLTEuNzQuN2MtLjE2LjA2LS4zNCAwLS40My0uMTVsLTEuNC0yLjQyYy0uMDktLjE1LS4wNS0uMzQuMDgtLjQ1bDEuNDgtMS4xNmMtLjAzLS4yMy0uMDUtLjQ2LS4wNS0uNjkgMC0uMjMuMDItLjQ2LjA1LS42OGwtMS40OC0xLjE2Yy0uMTMtLjExLS4xNy0uMy0uMDgtLjQ1bDEuNC0yLjQyYy4wOS0uMTUuMjctLjIxLjQzLS4xNWwxLjc0LjdjLjM2LS4yOC43Ni0uNTEgMS4xOC0uNjlsLjI2LTEuODVjLjAzLS4xNy4xOC0uMy4zNS0uM2gyLjhjLjE3IDAgLjMyLjEzLjM1LjI5bC4yNiAxLjg1Yy40My4xOC44Mi40MSAxLjE4LjY5bDEuNzQtLjdjLjE2LS4wNi4zNCAwIC40My4xNWwxLjQgMi40MmMuMDkuMTUuMDUuMzQtLjA4LjQ1bC0xLjQ4IDEuMTZjLjAzLjIzLjA1LjQ2LjA1LjY5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLWJhY2t1cC1yZXN0b3JlIj48cGF0aCBkPSJNMTQgMTJjMC0xLjEtLjktMi0yLTJzLTIgLjktMiAyIC45IDIgMiAyIDItLjkgMi0yem0tMi05Yy00Ljk3IDAtOSA0LjAzLTkgOUgwbDQgNCA0LTRINWMwLTMuODcgMy4xMy03IDctN3M3IDMuMTMgNyA3LTMuMTMgNy03IDdjLTEuNTEgMC0yLjkxLS40OS00LjA2LTEuM2wtMS40MiAxLjQ0QzguMDQgMjAuMyA5Ljk0IDIxIDEyIDIxYzQuOTcgMCA5LTQuMDMgOS05cy00LjAzLTktOS05eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLWJsdWV0b290aCI+PHBhdGggZD0iTTExIDI0aDJ2LTJoLTJ2MnptLTQgMGgydi0ySDd2MnptOCAwaDJ2LTJoLTJ2MnptMi43MS0xOC4yOUwxMiAwaC0xdjcuNTlMNi40MSAzIDUgNC40MSAxMC41OSAxMCA1IDE1LjU5IDYuNDEgMTcgMTEgMTIuNDFWMjBoMWw1LjcxLTUuNzEtNC4zLTQuMjkgNC4zLTQuMjl6TTEzIDMuODNsMS44OCAxLjg4TDEzIDcuNTlWMy44M3ptMS44OCAxMC40NkwxMyAxNi4xN3YtMy43NmwxLjg4IDEuODh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtYnJpZ2h0bmVzcyI+PHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2LjAxSDNWNC45OWgxOHYxNC4wMnpNOCAxNmgyLjVsMS41IDEuNSAxLjUtMS41SDE2di0yLjVsMS41LTEuNS0xLjUtMS41VjhoLTIuNUwxMiA2LjUgMTAuNSA4SDh2Mi41TDYuNSAxMiA4IDEzLjVWMTZ6bTQtN2MxLjY2IDAgMyAxLjM0IDMgM3MtMS4zNCAzLTMgM1Y5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLWNlbGwiPjxwYXRoIGQ9Ik03IDI0aDJ2LTJIN3Yyem00IDBoMnYtMmgtMnYyem00IDBoMnYtMmgtMnYyek0xNiAuMDFMOCAwQzYuOSAwIDYgLjkgNiAydjE2YzAgMS4xLjkgMiAyIDJoOGMxLjEgMCAyLS45IDItMlYyYzAtMS4xLS45LTEuOTktMi0xLjk5ek0xNiAxNkg4VjRoOHYxMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJzZXR0aW5ncy1ldGhlcm5ldCI+PHBhdGggZD0iTTcuNzcgNi43Nkw2LjIzIDUuNDguODIgMTJsNS40MSA2LjUyIDEuNTQtMS4yOEwzLjQyIDEybDQuMzUtNS4yNHpNNyAxM2gydi0ySDd2MnptMTAtMmgtMnYyaDJ2LTJ6bS02IDJoMnYtMmgtMnYyem02Ljc3LTcuNTJsLTEuNTQgMS4yOEwyMC41OCAxMmwtNC4zNSA1LjI0IDEuNTQgMS4yOEwyMy4xOCAxMmwtNS40MS02LjUyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLWlucHV0LWFudGVubmEiPjxwYXRoIGQ9Ik0xMiA1Yy0zLjg3IDAtNyAzLjEzLTcgN2gyYzAtMi43NiAyLjI0LTUgNS01czUgMi4yNCA1IDVoMmMwLTMuODctMy4xMy03LTctN3ptMSA5LjI5Yy44OC0uMzkgMS41LTEuMjYgMS41LTIuMjkgMC0xLjM4LTEuMTItMi41LTIuNS0yLjVTOS41IDEwLjYyIDkuNSAxMmMwIDEuMDIuNjIgMS45IDEuNSAyLjI5djMuM0w3LjU5IDIxIDkgMjIuNDFsMy0zIDMgM0wxNi40MSAyMSAxMyAxNy41OXYtMy4zek0xMiAxQzUuOTMgMSAxIDUuOTMgMSAxMmgyYzAtNC45NyA0LjAzLTkgOS05czkgNC4wMyA5IDloMmMwLTYuMDctNC45My0xMS0xMS0xMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJzZXR0aW5ncy1pbnB1dC1jb21wb25lbnQiPjxwYXRoIGQ9Ik01IDJjMC0uNTUtLjQ1LTEtMS0xcy0xIC40NS0xIDF2NEgxdjZoNlY2SDVWMnptNCAxNGMwIDEuMy44NCAyLjQgMiAyLjgyVjIzaDJ2LTQuMThjMS4xNi0uNDEgMi0xLjUxIDItMi44MnYtMkg5djJ6bS04IDBjMCAxLjMuODQgMi40IDIgMi44MlYyM2gydi00LjE4QzYuMTYgMTguNCA3IDE3LjMgNyAxNnYtMkgxdjJ6TTIxIDZWMmMwLS41NS0uNDUtMS0xLTFzLTEgLjQ1LTEgMXY0aC0ydjZoNlY2aC0yem0tOC00YzAtLjU1LS40NS0xLTEtMXMtMSAuNDUtMSAxdjRIOXY2aDZWNmgtMlYyem00IDE0YzAgMS4zLjg0IDIuNCAyIDIuODJWMjNoMnYtNC4xOGMxLjE2LS40MSAyLTEuNTEgMi0yLjgydi0yaC02djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtaW5wdXQtY29tcG9zaXRlIj48cGF0aCBkPSJNNSAyYzAtLjU1LS40NS0xLTEtMXMtMSAuNDUtMSAxdjRIMXY2aDZWNkg1VjJ6bTQgMTRjMCAxLjMuODQgMi40IDIgMi44MlYyM2gydi00LjE4YzEuMTYtLjQxIDItMS41MSAyLTIuODJ2LTJIOXYyem0tOCAwYzAgMS4zLjg0IDIuNCAyIDIuODJWMjNoMnYtNC4xOEM2LjE2IDE4LjQgNyAxNy4zIDcgMTZ2LTJIMXYyek0yMSA2VjJjMC0uNTUtLjQ1LTEtMS0xcy0xIC40NS0xIDF2NGgtMnY2aDZWNmgtMnptLTgtNGMwLS41NS0uNDUtMS0xLTFzLTEgLjQ1LTEgMXY0SDl2Nmg2VjZoLTJWMnptNCAxNGMwIDEuMy44NCAyLjQgMiAyLjgyVjIzaDJ2LTQuMThjMS4xNi0uNDEgMi0xLjUxIDItMi44MnYtMmgtNnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLWlucHV0LWhkbWkiPjxwYXRoIGQ9Ik0xOCA3VjRjMC0xLjEtLjktMi0yLTJIOGMtMS4xIDAtMiAuOS0yIDJ2M0g1djZsMyA2djNoOHYtM2wzLTZWN2gtMXpNOCA0aDh2M2gtMlY1aC0xdjJoLTJWNWgtMXYySDhWNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJzZXR0aW5ncy1pbnB1dC1zdmlkZW8iPjxwYXRoIGQ9Ik04IDExLjVjMC0uODMtLjY3LTEuNS0xLjUtMS41UzUgMTAuNjcgNSAxMS41IDUuNjcgMTMgNi41IDEzIDggMTIuMzMgOCAxMS41em03LTVjMC0uODMtLjY3LTEuNS0xLjUtMS41aC0zQzkuNjcgNSA5IDUuNjcgOSA2LjVTOS42NyA4IDEwLjUgOGgzYy44MyAwIDEuNS0uNjcgMS41LTEuNXpNOC41IDE1Yy0uODMgMC0xLjUuNjctMS41IDEuNVM3LjY3IDE4IDguNSAxOHMxLjUtLjY3IDEuNS0xLjVTOS4zMyAxNSA4LjUgMTV6TTEyIDFDNS45MyAxIDEgNS45MyAxIDEyczQuOTMgMTEgMTEgMTEgMTEtNC45MyAxMS0xMVMxOC4wNyAxIDEyIDF6bTAgMjBjLTQuOTYgMC05LTQuMDQtOS05czQuMDQtOSA5LTkgOSA0LjA0IDkgOS00LjA0IDktOSA5em01LjUtMTFjLS44MyAwLTEuNS42Ny0xLjUgMS41cy42NyAxLjUgMS41IDEuNSAxLjUtLjY3IDEuNS0xLjUtLjY3LTEuNS0xLjUtMS41em0tMiA1Yy0uODMgMC0xLjUuNjctMS41IDEuNXMuNjcgMS41IDEuNSAxLjUgMS41LS42NyAxLjUtMS41LS42Ny0xLjUtMS41LTEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJzZXR0aW5ncy1vdmVyc2NhbiI+PHBhdGggZD0iTTEyLjAxIDUuNUwxMCA4aDRsLTEuOTktMi41ek0xOCAxMHY0bDIuNS0xLjk5TDE4IDEwek02IDEwbC0yLjUgMi4wMUw2IDE0di00em04IDZoLTRsMi4wMSAyLjVMMTQgMTZ6bTctMTNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2LjAxSDNWNC45OWgxOHYxNC4wMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJzZXR0aW5ncy1waG9uZSI+PHBhdGggZD0iTTEzIDloLTJ2MmgyVjl6bTQgMGgtMnYyaDJWOXptMyA2LjVjLTEuMjUgMC0yLjQ1LS4yLTMuNTctLjU3LS4zNS0uMTEtLjc0LS4wMy0xLjAyLjI0bC0yLjIgMi4yYy0yLjgzLTEuNDQtNS4xNS0zLjc1LTYuNTktNi41OGwyLjItMi4yMWMuMjgtLjI3LjM2LS42Ni4yNS0xLjAxQzguNyA2LjQ1IDguNSA1LjI1IDguNSA0YzAtLjU1LS40NS0xLTEtMUg0Yy0uNTUgMC0xIC40NS0xIDEgMCA5LjM5IDcuNjEgMTcgMTcgMTcgLjU1IDAgMS0uNDUgMS0xdi0zLjVjMC0uNTUtLjQ1LTEtMS0xek0xOSA5djJoMlY5aC0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLXBvd2VyIj48cGF0aCBkPSJNNyAyNGgydi0ySDd2MnptNCAwaDJ2LTJoLTJ2MnptMi0yMmgtMnYxMGgyVjJ6bTMuNTYgMi40NGwtMS40NSAxLjQ1QzE2Ljg0IDYuOTQgMTggOC44MyAxOCAxMWMwIDMuMzEtMi42OSA2LTYgNnMtNi0yLjY5LTYtNmMwLTIuMTcgMS4xNi00LjA2IDIuODgtNS4xMkw3LjQ0IDQuNDRDNS4zNiA1Ljg4IDQgOC4yOCA0IDExYzAgNC40MiAzLjU4IDggOCA4czgtMy41OCA4LThjMC0yLjcyLTEuMzYtNS4xMi0zLjQ0LTYuNTZ6TTE1IDI0aDJ2LTJoLTJ2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJzZXR0aW5ncy1yZW1vdGUiPjxwYXRoIGQ9Ik0xNSA5SDljLS41NSAwLTEgLjQ1LTEgMXYxMmMwIC41NS40NSAxIDEgMWg2Yy41NSAwIDEtLjQ1IDEtMVYxMGMwLS41NS0uNDUtMS0xLTF6bS0zIDZjLTEuMSAwLTItLjktMi0ycy45LTIgMi0yIDIgLjkgMiAyLS45IDItMiAyek03LjA1IDYuMDVsMS40MSAxLjQxQzkuMzcgNi41NiAxMC42MiA2IDEyIDZzMi42My41NiAzLjU0IDEuNDZsMS40MS0xLjQxQzE1LjY4IDQuNzggMTMuOTMgNCAxMiA0cy0zLjY4Ljc4LTQuOTUgMi4wNXpNMTIgMEM4Ljk2IDAgNi4yMSAxLjIzIDQuMjIgMy4yMmwxLjQxIDEuNDFDNy4yNiAzLjAxIDkuNTEgMiAxMiAyczQuNzQgMS4wMSA2LjM2IDIuNjRsMS40MS0xLjQxQzE3Ljc5IDEuMjMgMTUuMDQgMCAxMiAweiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLXZvaWNlIj48cGF0aCBkPSJNNyAyNGgydi0ySDd2MnptNS0xMWMxLjY2IDAgMi45OS0xLjM0IDIuOTktM0wxNSA0YzAtMS42Ni0xLjM0LTMtMy0zUzkgMi4zNCA5IDR2NmMwIDEuNjYgMS4zNCAzIDMgM3ptLTEgMTFoMnYtMmgtMnYyem00IDBoMnYtMmgtMnYyem00LTE0aC0xLjdjMCAzLTIuNTQgNS4xLTUuMyA1LjFTNi43IDEzIDYuNyAxMEg1YzAgMy40MSAyLjcyIDYuMjMgNiA2LjcyVjIwaDJ2LTMuMjhjMy4yOC0uNDkgNi0zLjMxIDYtNi43MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJzaG9wIj48cGF0aCBkPSJNMTYgNlY0YzAtMS4xMS0uODktMi0yLTJoLTRjLTEuMTEgMC0yIC44OS0yIDJ2MkgydjEzYzAgMS4xMS44OSAyIDIgMmgxNmMxLjExIDAgMi0uODkgMi0yVjZoLTZ6bS02LTJoNHYyaC00VjR6TTkgMThWOWw3LjUgNEw5IDE4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNob3AtdHdvIj48cGF0aCBkPSJNMyA5SDF2MTFjMCAxLjExLjg5IDIgMiAyaDE0YzEuMTEgMCAyLS44OSAyLTJIM1Y5em0xNS00VjNjMC0xLjExLS44OS0yLTItMmgtNGMtMS4xMSAwLTIgLjg5LTIgMnYySDV2MTFjMCAxLjExLjg5IDIgMiAyaDE0YzEuMTEgMCAyLS44OSAyLTJWNWgtNXptLTYtMmg0djJoLTRWM3ptMCAxMlY4bDUuNSAzLTUuNSA0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNob3BwaW5nLWJhc2tldCI+PHBhdGggZD0iTTE3LjIxIDlsLTQuMzgtNi41NmMtLjE5LS4yOC0uNTEtLjQyLS44My0uNDItLjMyIDAtLjY0LjE0LS44My40M0w2Ljc5IDlIMmMtLjU1IDAtMSAuNDUtMSAxIDAgLjA5LjAxLjE4LjA0LjI3bDIuNTQgOS4yN2MuMjMuODQgMSAxLjQ2IDEuOTIgMS40NmgxM2MuOTIgMCAxLjY5LS42MiAxLjkzLTEuNDZsMi41NC05LjI3TDIzIDEwYzAtLjU1LS40NS0xLTEtMWgtNC43OXpNOSA5bDMtNC40TDE1IDlIOXptMyA4Yy0xLjEgMC0yLS45LTItMnMuOS0yIDItMiAyIC45IDIgMi0uOSAyLTIgMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJzaG9wcGluZy1jYXJ0Ij48cGF0aCBkPSJNNyAxOGMtMS4xIDAtMS45OS45LTEuOTkgMlM1LjkgMjIgNyAyMnMyLS45IDItMi0uOS0yLTItMnpNMSAydjJoMmwzLjYgNy41OS0xLjM1IDIuNDVjLS4xNi4yOC0uMjUuNjEtLjI1Ljk2IDAgMS4xLjkgMiAyIDJoMTJ2LTJINy40MmMtLjE0IDAtLjI1LS4xMS0uMjUtLjI1bC4wMy0uMTIuOS0xLjYzaDcuNDVjLjc1IDAgMS40MS0uNDEgMS43NS0xLjAzbDMuNTgtNi40OWMuMDgtLjE0LjEyLS4zMS4xMi0uNDggMC0uNTUtLjQ1LTEtMS0xSDUuMjFsLS45NC0ySDF6bTE2IDE2Yy0xLjEgMC0xLjk5LjktMS45OSAycy44OSAyIDEuOTkgMiAyLS45IDItMi0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJzb3J0Ij48cGF0aCBkPSJNMyAxOGg2di0ySDN2MnpNMyA2djJoMThWNkgzem0wIDdoMTJ2LTJIM3YyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNwZWFrZXItbm90ZXMiPjxwYXRoIGQ9Ik0yMCAySDRjLTEuMSAwLTEuOTkuOS0xLjk5IDJMMiAyMmw0LTRoMTRjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnpNOCAxNEg2di0yaDJ2MnptMC0zSDZWOWgydjJ6bTAtM0g2VjZoMnYyem03IDZoLTV2LTJoNXYyem0zLTNoLThWOWg4djJ6bTAtM2gtOFY2aDh2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJzcGVha2VyLW5vdGVzLW9mZiI+PHBhdGggZD0iTTEwLjU0IDExbC0uNTQtLjU0TDcuNTQgOCA2IDYuNDYgMi4zOCAyLjg0IDEuMjcgMS43MyAwIDNsMi4wMSAyLjAxTDIgMjJsNC00aDlsNS43MyA1LjczTDIyIDIyLjQ2IDE3LjU0IDE4bC03LTd6TTggMTRINnYtMmgydjJ6bS0yLTNWOWwyIDJINnptMTQtOUg0LjA4TDEwIDcuOTJWNmg4djJoLTcuOTJsMSAxSDE4djJoLTQuOTJsNi45OSA2Ljk5QzIxLjE0IDE3Ljk1IDIyIDE3LjA4IDIyIDE2VjRjMC0xLjEtLjktMi0yLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3BlbGxjaGVjayI+PHBhdGggZD0iTTEyLjQ1IDE2aDIuMDlMOS40MyAzSDcuNTdMMi40NiAxNmgyLjA5bDEuMTItM2g1LjY0bDEuMTQgM3ptLTYuMDItNUw4LjUgNS40OCAxMC41NyAxMUg2LjQzem0xNS4xNi41OWwtOC4wOSA4LjA5TDkuODMgMTZsLTEuNDEgMS40MSA1LjA5IDUuMDlMMjMgMTNsLTEuNDEtMS40MXoiPjwvcGF0aD48L2c+CjxnIGlkPSJzdGFyIj48cGF0aCBkPSJNMTIgMTcuMjdMMTguMTggMjFsLTEuNjQtNy4wM0wyMiA5LjI0bC03LjE5LS42MUwxMiAyIDkuMTkgOC42MyAyIDkuMjRsNS40NiA0LjczTDUuODIgMjF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3Rhci1ib3JkZXIiPjxwYXRoIGQ9Ik0yMiA5LjI0bC03LjE5LS42MkwxMiAyIDkuMTkgOC42MyAyIDkuMjRsNS40NiA0LjczTDUuODIgMjEgMTIgMTcuMjcgMTguMTggMjFsLTEuNjMtNy4wM0wyMiA5LjI0ek0xMiAxNS40bC0zLjc2IDIuMjcgMS00LjI4LTMuMzItMi44OCA0LjM4LS4zOEwxMiA2LjFsMS43MSA0LjA0IDQuMzguMzgtMy4zMiAyLjg4IDEgNC4yOEwxMiAxNS40eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InN0YXItaGFsZiI+PHBhdGggZD0iTTIyIDkuMjRsLTcuMTktLjYyTDEyIDIgOS4xOSA4LjYzIDIgOS4yNGw1LjQ2IDQuNzNMNS44MiAyMSAxMiAxNy4yNyAxOC4xOCAyMWwtMS42My03LjAzTDIyIDkuMjR6TTEyIDE1LjRWNi4xbDEuNzEgNC4wNCA0LjM4LjM4LTMuMzIgMi44OCAxIDQuMjhMMTIgMTUuNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJzdGFycyI+PHBhdGggZD0iTTExLjk5IDJDNi40NyAyIDIgNi40OCAyIDEyczQuNDcgMTAgOS45OSAxMEMxNy41MiAyMiAyMiAxNy41MiAyMiAxMlMxNy41MiAyIDExLjk5IDJ6bTQuMjQgMTZMMTIgMTUuNDUgNy43NyAxOGwxLjEyLTQuODEtMy43My0zLjIzIDQuOTItLjQyTDEyIDVsMS45MiA0LjUzIDQuOTIuNDItMy43MyAzLjIzTDE2LjIzIDE4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InN0b3JlIj48cGF0aCBkPSJNMjAgNEg0djJoMTZWNHptMSAxMHYtMmwtMS01SDRsLTEgNXYyaDF2NmgxMHYtNmg0djZoMnYtNmgxem0tOSA0SDZ2LTRoNnY0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InN1YmRpcmVjdG9yeS1hcnJvdy1sZWZ0Ij48cGF0aCBkPSJNMTEgOWwxLjQyIDEuNDJMOC44MyAxNEgxOFY0aDJ2MTJIOC44M2wzLjU5IDMuNThMMTEgMjFsLTYtNiA2LTZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3ViZGlyZWN0b3J5LWFycm93LXJpZ2h0Ij48cGF0aCBkPSJNMTkgMTVsLTYgNi0xLjQyLTEuNDJMMTUuMTcgMTZINFY0aDJ2MTBoOS4xN2wtMy41OS0zLjU4TDEzIDlsNiA2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InN1YmplY3QiPjxwYXRoIGQ9Ik0xNCAxN0g0djJoMTB2LTJ6bTYtOEg0djJoMTZWOXpNNCAxNWgxNnYtMkg0djJ6TTQgNXYyaDE2VjVINHoiPjwvcGF0aD48L2c+CjxnIGlkPSJzdXBlcnZpc29yLWFjY291bnQiPjxwYXRoIGQ9Ik0xNi41IDEyYzEuMzggMCAyLjQ5LTEuMTIgMi40OS0yLjVTMTcuODggNyAxNi41IDdDMTUuMTIgNyAxNCA4LjEyIDE0IDkuNXMxLjEyIDIuNSAyLjUgMi41ek05IDExYzEuNjYgMCAyLjk5LTEuMzQgMi45OS0zUzEwLjY2IDUgOSA1QzcuMzQgNSA2IDYuMzQgNiA4czEuMzQgMyAzIDN6bTcuNSAzYy0xLjgzIDAtNS41LjkyLTUuNSAyLjc1VjE5aDExdi0yLjI1YzAtMS44My0zLjY3LTIuNzUtNS41LTIuNzV6TTkgMTNjLTIuMzMgMC03IDEuMTctNyAzLjVWMTloN3YtMi4yNWMwLS44NS4zMy0yLjM0IDIuMzctMy40N0MxMC41IDEzLjEgOS42NiAxMyA5IDEzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InN3YXAtaG9yaXoiPjxwYXRoIGQ9Ik02Ljk5IDExTDMgMTVsMy45OSA0di0zSDE0di0ySDYuOTl2LTN6TTIxIDlsLTMuOTktNHYzSDEwdjJoNy4wMXYzTDIxIDl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3dhcC12ZXJ0Ij48cGF0aCBkPSJNMTYgMTcuMDFWMTBoLTJ2Ny4wMWgtM0wxNSAyMWw0LTMuOTloLTN6TTkgM0w1IDYuOTloM1YxNGgyVjYuOTloM0w5IDN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3dhcC12ZXJ0aWNhbC1jaXJjbGUiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyek02LjUgOUwxMCA1LjUgMTMuNSA5SDExdjRIOVY5SDYuNXptMTEgNkwxNCAxOC41IDEwLjUgMTVIMTN2LTRoMnY0aDIuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJzeXN0ZW0tdXBkYXRlLWFsdCI+PHBhdGggZD0iTTEyIDE2LjVsNC00aC0zdi05aC0ydjlIOGw0IDR6bTktMTNoLTZ2MS45OWg2djE0LjAzSDNWNS40OWg2VjMuNUgzYy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0ydi0xNGMwLTEuMS0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0YWIiPjxwYXRoIGQ9Ik0yMSAzSDNjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxNkgzVjVoMTB2NGg4djEweiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRhYi11bnNlbGVjdGVkIj48cGF0aCBkPSJNMSA5aDJWN0gxdjJ6bTAgNGgydi0ySDF2MnptMC04aDJWM2MtMS4xIDAtMiAuOS0yIDJ6bTggMTZoMnYtMkg5djJ6bS04LTRoMnYtMkgxdjJ6bTIgNHYtMkgxYzAgMS4xLjkgMiAyIDJ6TTIxIDNoLTh2NmgxMFY1YzAtMS4xLS45LTItMi0yem0wIDE0aDJ2LTJoLTJ2MnpNOSA1aDJWM0g5djJ6TTUgMjFoMnYtMkg1djJ6TTUgNWgyVjNINXYyem0xNiAxNmMxLjEgMCAyLS45IDItMmgtMnYyem0wLThoMnYtMmgtMnYyem0tOCA4aDJ2LTJoLTJ2MnptNCAwaDJ2LTJoLTJ2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0ZXh0LWZvcm1hdCI+PHBhdGggZD0iTTUgMTd2MmgxNHYtMkg1em00LjUtNC4yaDVsLjkgMi4yaDIuMUwxMi43NSA0aC0xLjVMNi41IDE1aDIuMWwuOS0yLjJ6TTEyIDUuOThMMTMuODcgMTFoLTMuNzRMMTIgNS45OHoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0aGVhdGVycyI+PHBhdGggZD0iTTE4IDN2MmgtMlYzSDh2Mkg2VjNINHYxOGgydi0yaDJ2Mmg4di0yaDJ2MmgyVjNoLTJ6TTggMTdINnYtMmgydjJ6bTAtNEg2di0yaDJ2MnptMC00SDZWN2gydjJ6bTEwIDhoLTJ2LTJoMnYyem0wLTRoLTJ2LTJoMnYyem0wLTRoLTJWN2gydjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idGh1bWItZG93biI+PHBhdGggZD0iTTE1IDNINmMtLjgzIDAtMS41NC41LTEuODQgMS4yMmwtMy4wMiA3LjA1Yy0uMDkuMjMtLjE0LjQ3LS4xNC43M3YxLjkxbC4wMS4wMUwxIDE0YzAgMS4xLjkgMiAyIDJoNi4zMWwtLjk1IDQuNTctLjAzLjMyYzAgLjQxLjE3Ljc5LjQ0IDEuMDZMOS44MyAyM2w2LjU5LTYuNTljLjM2LS4zNi41OC0uODYuNTgtMS40MVY1YzAtMS4xLS45LTItMi0yem00IDB2MTJoNFYzaC00eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRodW1iLXVwIj48cGF0aCBkPSJNMSAyMWg0VjlIMXYxMnptMjItMTFjMC0xLjEtLjktMi0yLTJoLTYuMzFsLjk1LTQuNTcuMDMtLjMyYzAtLjQxLS4xNy0uNzktLjQ0LTEuMDZMMTQuMTcgMSA3LjU5IDcuNTlDNy4yMiA3Ljk1IDcgOC40NSA3IDl2MTBjMCAxLjEuOSAyIDIgMmg5Yy44MyAwIDEuNTQtLjUgMS44NC0xLjIybDMuMDItNy4wNWMuMDktLjIzLjE0LS40Ny4xNC0uNzN2LTEuOTFsLS4wMS0uMDFMMjMgMTB6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idGh1bWJzLXVwLWRvd24iPjxwYXRoIGQ9Ik0xMiA2YzAtLjU1LS40NS0xLTEtMUg1LjgybC42Ni0zLjE4LjAyLS4yM2MwLS4zMS0uMTMtLjU5LS4zMy0uOEw1LjM4IDAgLjQ0IDQuOTRDLjE3IDUuMjEgMCA1LjU5IDAgNnY2LjVjMCAuODMuNjcgMS41IDEuNSAxLjVoNi43NWMuNjIgMCAxLjE1LS4zOCAxLjM4LS45MWwyLjI2LTUuMjljLjA3LS4xNy4xMS0uMzYuMTEtLjU1VjZ6bTEwLjUgNGgtNi43NWMtLjYyIDAtMS4xNS4zOC0xLjM4LjkxbC0yLjI2IDUuMjljLS4wNy4xNy0uMTEuMzYtLjExLjU1VjE4YzAgLjU1LjQ1IDEgMSAxaDUuMThsLS42NiAzLjE4LS4wMi4yNGMwIC4zMS4xMy41OS4zMy44bC43OS43OCA0Ljk0LTQuOTRjLjI3LS4yNy40NC0uNjUuNDQtMS4wNnYtNi41YzAtLjgzLS42Ny0xLjUtMS41LTEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0aW1lbGluZSI+PHBhdGggZD0iTTIzIDhjMCAxLjEtLjkgMi0yIDItLjE4IDAtLjM1LS4wMi0uNTEtLjA3bC0zLjU2IDMuNTVjLjA1LjE2LjA3LjM0LjA3LjUyIDAgMS4xLS45IDItMiAycy0yLS45LTItMmMwLS4xOC4wMi0uMzYuMDctLjUybC0yLjU1LTIuNTVjLS4xNi4wNS0uMzQuMDctLjUyLjA3cy0uMzYtLjAyLS41Mi0uMDdsLTQuNTUgNC41NmMuMDUuMTYuMDcuMzMuMDcuNTEgMCAxLjEtLjkgMi0yIDJzLTItLjktMi0yIC45LTIgMi0yYy4xOCAwIC4zNS4wMi41MS4wN2w0LjU2LTQuNTVDOC4wMiA5LjM2IDggOS4xOCA4IDljMC0xLjEuOS0yIDItMnMyIC45IDIgMmMwIC4xOC0uMDIuMzYtLjA3LjUybDIuNTUgMi41NWMuMTYtLjA1LjM0LS4wNy41Mi0uMDdzLjM2LjAyLjUyLjA3bDMuNTUtMy41NkMxOS4wMiA4LjM1IDE5IDguMTggMTkgOGMwLTEuMS45LTIgMi0yczIgLjkgMiAyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRvYyI+PHBhdGggZD0iTTMgOWgxNFY3SDN2MnptMCA0aDE0di0ySDN2MnptMCA0aDE0di0ySDN2MnptMTYgMGgydi0yaC0ydjJ6bTAtMTB2MmgyVjdoLTJ6bTAgNmgydi0yaC0ydjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idG9kYXkiPjxwYXRoIGQ9Ik0xOSAzaC0xVjFoLTJ2Mkg4VjFINnYySDVjLTEuMTEgMC0xLjk5LjktMS45OSAyTDMgMTljMCAxLjEuODkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxNkg1VjhoMTR2MTF6TTcgMTBoNXY1SDd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idG9sbCI+PHBhdGggZD0iTTE1IDRjLTQuNDIgMC04IDMuNTgtOCA4czMuNTggOCA4IDggOC0zLjU4IDgtOC0zLjU4LTgtOC04em0wIDE0Yy0zLjMxIDAtNi0yLjY5LTYtNnMyLjY5LTYgNi02IDYgMi42OSA2IDYtMi42OSA2LTYgNnpNMyAxMmMwLTIuNjEgMS42Ny00LjgzIDQtNS42NVY0LjI2QzMuNTUgNS4xNSAxIDguMjcgMSAxMnMyLjU1IDYuODUgNiA3Ljc0di0yLjA5Yy0yLjMzLS44Mi00LTMuMDQtNC01LjY1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRvdWNoLWFwcCI+PHBhdGggZD0iTTkgMTEuMjRWNy41QzkgNi4xMiAxMC4xMiA1IDExLjUgNVMxNCA2LjEyIDE0IDcuNXYzLjc0YzEuMjEtLjgxIDItMi4xOCAyLTMuNzRDMTYgNS4wMSAxMy45OSAzIDExLjUgM1M3IDUuMDEgNyA3LjVjMCAxLjU2Ljc5IDIuOTMgMiAzLjc0em05Ljg0IDQuNjNsLTQuNTQtMi4yNmMtLjE3LS4wNy0uMzUtLjExLS41NC0uMTFIMTN2LTZjMC0uODMtLjY3LTEuNS0xLjUtMS41UzEwIDYuNjcgMTAgNy41djEwLjc0bC0zLjQzLS43MmMtLjA4LS4wMS0uMTUtLjAzLS4yNC0uMDMtLjMxIDAtLjU5LjEzLS43OS4zM2wtLjc5LjggNC45NCA0Ljk0Yy4yNy4yNy42NS40NCAxLjA2LjQ0aDYuNzljLjc1IDAgMS4zMy0uNTUgMS40NC0xLjI4bC43NS01LjI3Yy4wMS0uMDcuMDItLjE0LjAyLS4yIDAtLjYyLS4zOC0xLjE2LS45MS0xLjM4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRyYWNrLWNoYW5nZXMiPjxwYXRoIGQ9Ik0xOS4wNyA0LjkzbC0xLjQxIDEuNDFDMTkuMSA3Ljc5IDIwIDkuNzkgMjAgMTJjMCA0LjQyLTMuNTggOC04IDhzLTgtMy41OC04LThjMC00LjA4IDMuMDUtNy40NCA3LTcuOTN2Mi4wMkM4LjE2IDYuNTcgNiA5LjAzIDYgMTJjMCAzLjMxIDIuNjkgNiA2IDZzNi0yLjY5IDYtNmMwLTEuNjYtLjY3LTMuMTYtMS43Ni00LjI0bC0xLjQxIDEuNDFDMTUuNTUgOS45IDE2IDEwLjkgMTYgMTJjMCAyLjIxLTEuNzkgNC00IDRzLTQtMS43OS00LTRjMC0xLjg2IDEuMjgtMy40MSAzLTMuODZ2Mi4xNGMtLjYuMzUtMSAuOTgtMSAxLjcyIDAgMS4xLjkgMiAyIDJzMi0uOSAyLTJjMC0uNzQtLjQtMS4zOC0xLTEuNzJWMmgtMUM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwYzAtMi43Ni0xLjEyLTUuMjYtMi45My03LjA3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRyYW5zbGF0ZSI+PHBhdGggZD0iTTEyLjg3IDE1LjA3bC0yLjU0LTIuNTEuMDMtLjAzYzEuNzQtMS45NCAyLjk4LTQuMTcgMy43MS02LjUzSDE3VjRoLTdWMkg4djJIMXYxLjk5aDExLjE3QzExLjUgNy45MiAxMC40NCA5Ljc1IDkgMTEuMzUgOC4wNyAxMC4zMiA3LjMgOS4xOSA2LjY5IDhoLTJjLjczIDEuNjMgMS43MyAzLjE3IDIuOTggNC41NmwtNS4wOSA1LjAyTDQgMTlsNS01IDMuMTEgMy4xMS43Ni0yLjA0ek0xOC41IDEwaC0yTDEyIDIyaDJsMS4xMi0zaDQuNzVMMjEgMjJoMmwtNC41LTEyem0tMi42MiA3bDEuNjItNC4zM0wxOS4xMiAxN2gtMy4yNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0cmVuZGluZy1kb3duIj48cGF0aCBkPSJNMTYgMThsMi4yOS0yLjI5LTQuODgtNC44OC00IDRMMiA3LjQxIDMuNDEgNmw2IDYgNC00IDYuMyA2LjI5TDIyIDEydjZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idHJlbmRpbmctZmxhdCI+PHBhdGggZD0iTTIyIDEybC00LTR2M0gzdjJoMTV2M3oiPjwvcGF0aD48L2c+CjxnIGlkPSJ0cmVuZGluZy11cCI+PHBhdGggZD0iTTE2IDZsMi4yOSAyLjI5LTQuODggNC44OC00LTRMMiAxNi41OSAzLjQxIDE4bDYtNiA0IDQgNi4zLTYuMjlMMjIgMTJWNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0dXJuZWQtaW4iPjxwYXRoIGQ9Ik0xNyAzSDdjLTEuMSAwLTEuOTkuOS0xLjk5IDJMNSAyMWw3LTMgNyAzVjVjMC0xLjEtLjktMi0yLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idHVybmVkLWluLW5vdCI+PHBhdGggZD0iTTE3IDNIN2MtMS4xIDAtMS45OS45LTEuOTkgMkw1IDIxbDctMyA3IDNWNWMwLTEuMS0uOS0yLTItMnptMCAxNWwtNS0yLjE4TDcgMThWNWgxMHYxM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJ1bmFyY2hpdmUiPjxwYXRoIGQ9Ik0yMC41NSA1LjIybC0xLjM5LTEuNjhDMTguODggMy4yMSAxOC40NyAzIDE4IDNINmMtLjQ3IDAtLjg4LjIxLTEuMTUuNTVMMy40NiA1LjIyQzMuMTcgNS41NyAzIDYuMDEgMyA2LjVWMTljMCAxLjEuODkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNi41YzAtLjQ5LS4xNy0uOTMtLjQ1LTEuMjh6TTEyIDkuNWw1LjUgNS41SDE0djJoLTR2LTJINi41TDEyIDkuNXpNNS4xMiA1bC44Mi0xaDEybC45MyAxSDUuMTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idW5kbyI+PHBhdGggZD0iTTEyLjUgOGMtMi42NSAwLTUuMDUuOTktNi45IDIuNkwyIDd2OWg5bC0zLjYyLTMuNjJjMS4zOS0xLjE2IDMuMTYtMS44OCA1LjEyLTEuODggMy41NCAwIDYuNTUgMi4zMSA3LjYgNS41bDIuMzctLjc4QzIxLjA4IDExLjAzIDE3LjE1IDggMTIuNSA4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InVuZm9sZC1sZXNzIj48cGF0aCBkPSJNNy40MSAxOC41OUw4LjgzIDIwIDEyIDE2LjgzIDE1LjE3IDIwbDEuNDEtMS40MUwxMiAxNGwtNC41OSA0LjU5em05LjE4LTEzLjE4TDE1LjE3IDQgMTIgNy4xNyA4LjgzIDQgNy40MSA1LjQxIDEyIDEwbDQuNTktNC41OXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ1bmZvbGQtbW9yZSI+PHBhdGggZD0iTTEyIDUuODNMMTUuMTcgOWwxLjQxLTEuNDFMMTIgMyA3LjQxIDcuNTkgOC44MyA5IDEyIDUuODN6bTAgMTIuMzRMOC44MyAxNWwtMS40MSAxLjQxTDEyIDIxbDQuNTktNC41OUwxNS4xNyAxNSAxMiAxOC4xN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJ1cGRhdGUiPjxwYXRoIGQ9Ik0yMSAxMC4xMmgtNi43OGwyLjc0LTIuODJjLTIuNzMtMi43LTcuMTUtMi44LTkuODgtLjEtMi43MyAyLjcxLTIuNzMgNy4wOCAwIDkuNzkgMi43MyAyLjcxIDcuMTUgMi43MSA5Ljg4IDBDMTguMzIgMTUuNjUgMTkgMTQuMDggMTkgMTIuMWgyYzAgMS45OC0uODggNC41NS0yLjY0IDYuMjktMy41MSAzLjQ4LTkuMjEgMy40OC0xMi43MiAwLTMuNS0zLjQ3LTMuNTMtOS4xMS0uMDItMTIuNTggMy41MS0zLjQ3IDkuMTQtMy40NyAxMi42NSAwTDIxIDN2Ny4xMnpNMTIuNSA4djQuMjVsMy41IDIuMDgtLjcyIDEuMjFMMTEgMTNWOGgxLjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idmVyaWZpZWQtdXNlciI+PHBhdGggZD0iTTEyIDFMMyA1djZjMCA1LjU1IDMuODQgMTAuNzQgOSAxMiA1LjE2LTEuMjYgOS02LjQ1IDktMTJWNWwtOS00em0tMiAxNmwtNC00IDEuNDEtMS40MUwxMCAxNC4xN2w2LjU5LTYuNTlMMTggOWwtOCA4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InZpZXctYWdlbmRhIj48cGF0aCBkPSJNMjAgMTNIM2MtLjU1IDAtMSAuNDUtMSAxdjZjMCAuNTUuNDUgMSAxIDFoMTdjLjU1IDAgMS0uNDUgMS0xdi02YzAtLjU1LS40NS0xLTEtMXptMC0xMEgzYy0uNTUgMC0xIC40NS0xIDF2NmMwIC41NS40NSAxIDEgMWgxN2MuNTUgMCAxLS40NSAxLTFWNGMwLS41NS0uNDUtMS0xLTF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idmlldy1hcnJheSI+PHBhdGggZD0iTTQgMThoM1Y1SDR2MTN6TTE4IDV2MTNoM1Y1aC0zek04IDE4aDlWNUg4djEzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InZpZXctY2Fyb3VzZWwiPjxwYXRoIGQ9Ik03IDE5aDEwVjRIN3YxNXptLTUtMmg0VjZIMnYxMXpNMTggNnYxMWg0VjZoLTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idmlldy1jb2x1bW4iPjxwYXRoIGQ9Ik0xMCAxOGg1VjVoLTV2MTN6bS02IDBoNVY1SDR2MTN6TTE2IDV2MTNoNVY1aC01eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InZpZXctZGF5Ij48cGF0aCBkPSJNMiAyMWgxOXYtM0gydjN6TTIwIDhIM2MtLjU1IDAtMSAuNDUtMSAxdjZjMCAuNTUuNDUgMSAxIDFoMTdjLjU1IDAgMS0uNDUgMS0xVjljMC0uNTUtLjQ1LTEtMS0xek0yIDN2M2gxOVYzSDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idmlldy1oZWFkbGluZSI+PHBhdGggZD0iTTQgMTVoMTZ2LTJINHYyem0wIDRoMTZ2LTJINHYyem0wLThoMTZWOUg0djJ6bTAtNnYyaDE2VjVINHoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWV3LWxpc3QiPjxwYXRoIGQ9Ik00IDE0aDR2LTRINHY0em0wIDVoNHYtNEg0djR6TTQgOWg0VjVINHY0em01IDVoMTJ2LTRIOXY0em0wIDVoMTJ2LTRIOXY0ek05IDV2NGgxMlY1SDl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idmlldy1tb2R1bGUiPjxwYXRoIGQ9Ik00IDExaDVWNUg0djZ6bTAgN2g1di02SDR2NnptNiAwaDV2LTZoLTV2NnptNiAwaDV2LTZoLTV2NnptLTYtN2g1VjVoLTV2NnptNi02djZoNVY1aC01eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InZpZXctcXVpbHQiPjxwYXRoIGQ9Ik0xMCAxOGg1di02aC01djZ6bS02IDBoNVY1SDR2MTN6bTEyIDBoNXYtNmgtNXY2ek0xMCA1djZoMTFWNUgxMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWV3LXN0cmVhbSI+PHBhdGggZD0iTTQgMThoMTd2LTZINHY2ek00IDV2NmgxN1Y1SDR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idmlldy13ZWVrIj48cGF0aCBkPSJNNiA1SDNjLS41NSAwLTEgLjQ1LTEgMXYxMmMwIC41NS40NSAxIDEgMWgzYy41NSAwIDEtLjQ1IDEtMVY2YzAtLjU1LS40NS0xLTEtMXptMTQgMGgtM2MtLjU1IDAtMSAuNDUtMSAxdjEyYzAgLjU1LjQ1IDEgMSAxaDNjLjU1IDAgMS0uNDUgMS0xVjZjMC0uNTUtLjQ1LTEtMS0xem0tNyAwaC0zYy0uNTUgMC0xIC40NS0xIDF2MTJjMCAuNTUuNDUgMSAxIDFoM2MuNTUgMCAxLS40NSAxLTFWNmMwLS41NS0uNDUtMS0xLTF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idmlzaWJpbGl0eSI+PHBhdGggZD0iTTEyIDQuNUM3IDQuNSAyLjczIDcuNjEgMSAxMmMxLjczIDQuMzkgNiA3LjUgMTEgNy41czkuMjctMy4xMSAxMS03LjVjLTEuNzMtNC4zOS02LTcuNS0xMS03LjV6TTEyIDE3Yy0yLjc2IDAtNS0yLjI0LTUtNXMyLjI0LTUgNS01IDUgMi4yNCA1IDUtMi4yNCA1LTUgNXptMC04Yy0xLjY2IDAtMyAxLjM0LTMgM3MxLjM0IDMgMyAzIDMtMS4zNCAzLTMtMS4zNC0zLTMtM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aXNpYmlsaXR5LW9mZiI+PHBhdGggZD0iTTEyIDdjMi43NiAwIDUgMi4yNCA1IDUgMCAuNjUtLjEzIDEuMjYtLjM2IDEuODNsMi45MiAyLjkyYzEuNTEtMS4yNiAyLjctMi44OSAzLjQzLTQuNzUtMS43My00LjM5LTYtNy41LTExLTcuNS0xLjQgMC0yLjc0LjI1LTMuOTguN2wyLjE2IDIuMTZDMTAuNzQgNy4xMyAxMS4zNSA3IDEyIDd6TTIgNC4yN2wyLjI4IDIuMjguNDYuNDZDMy4wOCA4LjMgMS43OCAxMC4wMiAxIDEyYzEuNzMgNC4zOSA2IDcuNSAxMSA3LjUgMS41NSAwIDMuMDMtLjMgNC4zOC0uODRsLjQyLjQyTDE5LjczIDIyIDIxIDIwLjczIDMuMjcgMyAyIDQuMjd6TTcuNTMgOS44bDEuNTUgMS41NWMtLjA1LjIxLS4wOC40My0uMDguNjUgMCAxLjY2IDEuMzQgMyAzIDMgLjIyIDAgLjQ0LS4wMy42NS0uMDhsMS41NSAxLjU1Yy0uNjcuMzMtMS40MS41My0yLjIuNTMtMi43NiAwLTUtMi4yNC01LTUgMC0uNzkuMi0xLjUzLjUzLTIuMnptNC4zMS0uNzhsMy4xNSAzLjE1LjAyLS4xNmMwLTEuNjYtMS4zNC0zLTMtM2wtLjE3LjAxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Indhcm5pbmciPjxwYXRoIGQ9Ik0xIDIxaDIyTDEyIDIgMSAyMXptMTItM2gtMnYtMmgydjJ6bTAtNGgtMnYtNGgydjR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0id2F0Y2gtbGF0ZXIiPjxwYXRoIGQ9Ik0xMiAyQzYuNSAyIDIgNi41IDIgMTJzNC41IDEwIDEwIDEwIDEwLTQuNSAxMC0xMFMxNy41IDIgMTIgMnptNC4yIDE0LjJMMTEgMTNWN2gxLjV2NS4ybDQuNSAyLjctLjggMS4zeiI+PC9wYXRoPjwvZz4KPGcgaWQ9IndlZWtlbmQiPjxwYXRoIGQ9Ik0yMSAxMGMtMS4xIDAtMiAuOS0yIDJ2M0g1di0zYzAtMS4xLS45LTItMi0ycy0yIC45LTIgMnY1YzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJ2LTVjMC0xLjEtLjktMi0yLTJ6bS0zLTVINmMtMS4xIDAtMiAuOS0yIDJ2Mi4xNWMxLjE2LjQxIDIgMS41MSAyIDIuODJWMTRoMTJ2LTIuMDNjMC0xLjMuODQtMi40IDItMi44MlY3YzAtMS4xLS45LTItMi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9IndvcmsiPjxwYXRoIGQ9Ik0yMCA2aC00VjRjMC0xLjExLS44OS0yLTItMmgtNGMtMS4xMSAwLTIgLjg5LTIgMnYySDRjLTEuMTEgMC0xLjk5Ljg5LTEuOTkgMkwyIDE5YzAgMS4xMS44OSAyIDIgMmgxNmMxLjExIDAgMi0uODkgMi0yVjhjMC0xLjExLS44OS0yLTItMnptLTYgMGgtNFY0aDR2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ5b3V0dWJlLXNlYXJjaGVkLWZvciI+PHBhdGggZD0iTTE3LjAxIDE0aC0uOGwtLjI3LS4yN2MuOTgtMS4xNCAxLjU3LTIuNjEgMS41Ny00LjIzIDAtMy41OS0yLjkxLTYuNS02LjUtNi41cy02LjUgMy02LjUgNi41SDJsMy44NCA0IDQuMTYtNEg2LjUxQzYuNTEgNyA4LjUzIDUgMTEuMDEgNXM0LjUgMi4wMSA0LjUgNC41YzAgMi40OC0yLjAyIDQuNS00LjUgNC41LS42NSAwLTEuMjYtLjE0LTEuODItLjM4TDcuNzEgMTUuMWMuOTcuNTcgMi4wOS45IDMuMy45IDEuNjEgMCAzLjA4LS41OSA0LjIyLTEuNTdsLjI3LjI3di43OWw1LjAxIDQuOTlMMjIgMTlsLTQuOTktNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ6b29tLWluIj48cGF0aCBkPSJNMTUuNSAxNGgtLjc5bC0uMjgtLjI3QzE1LjQxIDEyLjU5IDE2IDExLjExIDE2IDkuNSAxNiA1LjkxIDEzLjA5IDMgOS41IDNTMyA1LjkxIDMgOS41IDUuOTEgMTYgOS41IDE2YzEuNjEgMCAzLjA5LS41OSA0LjIzLTEuNTdsLjI3LjI4di43OWw1IDQuOTlMMjAuNDkgMTlsLTQuOTktNXptLTYgMEM3LjAxIDE0IDUgMTEuOTkgNSA5LjVTNy4wMSA1IDkuNSA1IDE0IDcuMDEgMTQgOS41IDExLjk5IDE0IDkuNSAxNHptMi41LTRoLTJ2Mkg5di0ySDdWOWgyVjdoMXYyaDJ2MXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ6b29tLW91dCI+PHBhdGggZD0iTTE1LjUgMTRoLS43OWwtLjI4LS4yN0MxNS40MSAxMi41OSAxNiAxMS4xMSAxNiA5LjUgMTYgNS45MSAxMy4wOSAzIDkuNSAzUzMgNS45MSAzIDkuNSA1LjkxIDE2IDkuNSAxNmMxLjYxIDAgMy4wOS0uNTkgNC4yMy0xLjU3bC4yNy4yOHYuNzlsNSA0Ljk5TDIwLjQ5IDE5bC00Ljk5LTV6bS02IDBDNy4wMSAxNCA1IDExLjk5IDUgOS41UzcuMDEgNSA5LjUgNSAxNCA3LjAxIDE0IDkuNSAxMS45OSAxNCA5LjUgMTR6TTcgOWg1djFIN3oiPjwvcGF0aD48L2c+CjwvZGVmcz48L3N2Zz4KPC9pcm9uLWljb25zZXQtc3ZnPmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChTby5jb250ZW50KTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCnZhciBNbz17IlUrMDAwOCI6ImJhY2tzcGFjZSIsIlUrMDAwOSI6InRhYiIsIlUrMDAxQiI6ImVzYyIsIlUrMDAyMCI6InNwYWNlIiwiVSswMDdGIjoiZGVsIn0sRW89ezg6ImJhY2tzcGFjZSIsOToidGFiIiwxMzoiZW50ZXIiLDI3OiJlc2MiLDMzOiJwYWdldXAiLDM0OiJwYWdlZG93biIsMzU6ImVuZCIsMzY6ImhvbWUiLDMyOiJzcGFjZSIsMzc6ImxlZnQiLDM4OiJ1cCIsMzk6InJpZ2h0Iiw0MDoiZG93biIsNDY6ImRlbCIsMTA2OiIqIn0sVG89e3NoaWZ0OiJzaGlmdEtleSIsY3RybDoiY3RybEtleSIsYWx0OiJhbHRLZXkiLG1ldGE6Im1ldGFLZXkifSxDbz0vW2EtejAtOSpdLyxBbz0vVVwrLyxrbz0vXmFycm93LyxMbz0vXnNwYWNlKGJhcik/LyxQbz0vXmVzY2FwZSQvO2Z1bmN0aW9uIE5vKHQsZSl7dmFyIG49IiI7aWYodCl7dmFyIGk9dC50b0xvd2VyQ2FzZSgpOyIgIj09PWl8fExvLnRlc3QoaSk/bj0ic3BhY2UiOlBvLnRlc3QoaSk/bj0iZXNjIjoxPT1pLmxlbmd0aD9lJiYhQ28udGVzdChpKXx8KG49aSk6bj1rby50ZXN0KGkpP2kucmVwbGFjZSgiYXJyb3ciLCIiKToibXVsdGlwbHkiPT1pPyIqIjppfXJldHVybiBufWZ1bmN0aW9uIElvKHQsZSl7cmV0dXJuKGZ1bmN0aW9uIG4odCxlKXtyZXR1cm4gdC5rZXk/Tm8odC5rZXksZSk6dC5kZXRhaWwmJnQuZGV0YWlsLmtleT9Obyh0LmRldGFpbC5rZXksZSk6KGZ1bmN0aW9uIG4odCl7dmFyIGU9IiI7cmV0dXJuIHQmJih0IGluIE1vP2U9TW9bdF06QW8udGVzdCh0KT8odD1wYXJzZUludCh0LnJlcGxhY2UoIlUrIiwiMHgiKSwxNiksZT1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpLnRvTG93ZXJDYXNlKCkpOmU9dC50b0xvd2VyQ2FzZSgpKSxlfSkodC5rZXlJZGVudGlmaWVyKXx8KGZ1bmN0aW9uIGkodCl7dmFyIGU9IiI7cmV0dXJuIE51bWJlcih0KSYmKGU9dD49NjUmJnQ8PTkwP1N0cmluZy5mcm9tQ2hhckNvZGUoMzIrdCk6dD49MTEyJiZ0PD0xMjM/ImYiKyh0LTExMisxKTp0Pj00OCYmdDw9NTc/U3RyaW5nKHQtNDgpOnQ+PTk2JiZ0PD0xMDU/U3RyaW5nKHQtOTYpOkVvW3RdKSxlfSkodC5rZXlDb2RlKXx8IiJ9KShlLHQuaGFzTW9kaWZpZXJzKT09PXQua2V5JiYoIXQuaGFzTW9kaWZpZXJzfHwhIWUuc2hpZnRLZXk9PSEhdC5zaGlmdEtleSYmISFlLmN0cmxLZXk9PSEhdC5jdHJsS2V5JiYhIWUuYWx0S2V5PT0hIXQuYWx0S2V5JiYhIWUubWV0YUtleT09ISF0Lm1ldGFLZXkpfWZ1bmN0aW9uIE9vKHQpe3JldHVybiB0LnRyaW0oKS5zcGxpdCgiICIpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuKGZ1bmN0aW9uIGUodCl7cmV0dXJuIDE9PT10Lmxlbmd0aD97Y29tYm86dCxrZXk6dCxldmVudDoia2V5ZG93biJ9OnQuc3BsaXQoIisiKS5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5zcGxpdCgiOiIpLGk9blswXSxyPW5bMV07cmV0dXJuIGkgaW4gVG8/KHRbVG9baV1dPSEwLHQuaGFzTW9kaWZpZXJzPSEwKToodC5rZXk9aSx0LmV2ZW50PXJ8fCJrZXlkb3duIiksdH0pLHtjb21ibzp0LnNwbGl0KCI6Iikuc2hpZnQoKX0pfSkodCl9KSl9Y29uc3QgUm89e3Byb3BlcnRpZXM6e2tleUV2ZW50VGFyZ2V0Ont0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzfX0sc3RvcEtleWJvYXJkRXZlbnRQcm9wYWdhdGlvbjp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfYm91bmRLZXlIYW5kbGVyczp7dHlwZTpBcnJheSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX0sX2ltcGVyYXRpdmVLZXlCaW5kaW5nczp7dHlwZTpPYmplY3QsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm57fX19fSxvYnNlcnZlcnM6WyJfcmVzZXRLZXlFdmVudExpc3RlbmVycyhrZXlFdmVudFRhcmdldCwgX2JvdW5kS2V5SGFuZGxlcnMpIl0sa2V5QmluZGluZ3M6e30scmVnaXN0ZXJlZDpmdW5jdGlvbigpe3RoaXMuX3ByZXBLZXlCaW5kaW5ncygpfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX2xpc3RlbktleUV2ZW50TGlzdGVuZXJzKCl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fdW5saXN0ZW5LZXlFdmVudExpc3RlbmVycygpfSxhZGRPd25LZXlCaW5kaW5nOmZ1bmN0aW9uKHQsZSl7dGhpcy5faW1wZXJhdGl2ZUtleUJpbmRpbmdzW3RdPWUsdGhpcy5fcHJlcEtleUJpbmRpbmdzKCksdGhpcy5fcmVzZXRLZXlFdmVudExpc3RlbmVycygpfSxyZW1vdmVPd25LZXlCaW5kaW5nczpmdW5jdGlvbigpe3RoaXMuX2ltcGVyYXRpdmVLZXlCaW5kaW5ncz17fSx0aGlzLl9wcmVwS2V5QmluZGluZ3MoKSx0aGlzLl9yZXNldEtleUV2ZW50TGlzdGVuZXJzKCl9LGtleWJvYXJkRXZlbnRNYXRjaGVzS2V5czpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj1PbyhlKSxpPTA7aTxuLmxlbmd0aDsrK2kpaWYoSW8obltpXSx0KSlyZXR1cm4hMDtyZXR1cm4hMX0sX2NvbGxlY3RLZXlCaW5kaW5nczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuYmVoYXZpb3JzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5QmluZGluZ3N9KSk7cmV0dXJuLTE9PT10LmluZGV4T2YodGhpcy5rZXlCaW5kaW5ncykmJnQucHVzaCh0aGlzLmtleUJpbmRpbmdzKSx0fSxfcHJlcEtleUJpbmRpbmdzOmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuX2tleUJpbmRpbmdzPXt9LHRoaXMuX2NvbGxlY3RLZXlCaW5kaW5ncygpLmZvckVhY2goKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0KXRoaXMuX2FkZEtleUJpbmRpbmcoZSx0W2VdKX0pLHRoaXMpLHRoaXMuX2ltcGVyYXRpdmVLZXlCaW5kaW5ncyl0aGlzLl9hZGRLZXlCaW5kaW5nKHQsdGhpcy5faW1wZXJhdGl2ZUtleUJpbmRpbmdzW3RdKTtmb3IodmFyIGUgaW4gdGhpcy5fa2V5QmluZGluZ3MpdGhpcy5fa2V5QmluZGluZ3NbZV0uc29ydCgoZnVuY3Rpb24odCxlKXt2YXIgbj10WzBdLmhhc01vZGlmaWVycztyZXR1cm4gbj09PWVbMF0uaGFzTW9kaWZpZXJzPzA6bj8tMToxfSkpfSxfYWRkS2V5QmluZGluZzpmdW5jdGlvbih0LGUpe09vKHQpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3RoaXMuX2tleUJpbmRpbmdzW3QuZXZlbnRdPXRoaXMuX2tleUJpbmRpbmdzW3QuZXZlbnRdfHxbXSx0aGlzLl9rZXlCaW5kaW5nc1t0LmV2ZW50XS5wdXNoKFt0LGVdKX0pLHRoaXMpfSxfcmVzZXRLZXlFdmVudExpc3RlbmVyczpmdW5jdGlvbigpe3RoaXMuX3VubGlzdGVuS2V5RXZlbnRMaXN0ZW5lcnMoKSx0aGlzLmlzQXR0YWNoZWQmJnRoaXMuX2xpc3RlbktleUV2ZW50TGlzdGVuZXJzKCl9LF9saXN0ZW5LZXlFdmVudExpc3RlbmVyczpmdW5jdGlvbigpe3RoaXMua2V5RXZlbnRUYXJnZXQmJk9iamVjdC5rZXlzKHRoaXMuX2tleUJpbmRpbmdzKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9vbktleUJpbmRpbmdFdmVudC5iaW5kKHRoaXMsdGhpcy5fa2V5QmluZGluZ3NbdF0pO3RoaXMuX2JvdW5kS2V5SGFuZGxlcnMucHVzaChbdGhpcy5rZXlFdmVudFRhcmdldCx0LGVdKSx0aGlzLmtleUV2ZW50VGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIodCxlKX0pLHRoaXMpfSxfdW5saXN0ZW5LZXlFdmVudExpc3RlbmVyczpmdW5jdGlvbigpe2Zvcih2YXIgdDt0aGlzLl9ib3VuZEtleUhhbmRsZXJzLmxlbmd0aDspKHQ9dGhpcy5fYm91bmRLZXlIYW5kbGVycy5wb3AoKSlbMF0ucmVtb3ZlRXZlbnRMaXN0ZW5lcih0WzFdLHRbMl0pfSxfb25LZXlCaW5kaW5nRXZlbnQ6ZnVuY3Rpb24odCxlKXtpZih0aGlzLnN0b3BLZXlib2FyZEV2ZW50UHJvcGFnYXRpb24mJmUuc3RvcFByb3BhZ2F0aW9uKCksIWUuZGVmYXVsdFByZXZlbnRlZClmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9dFtuXVswXSxyPXRbbl1bMV07aWYoSW8oaSxlKSYmKHRoaXMuX3RyaWdnZXJLZXlIYW5kbGVyKGkscixlKSxlLmRlZmF1bHRQcmV2ZW50ZWQpKXJldHVybn19LF90cmlnZ2VyS2V5SGFuZGxlcjpmdW5jdGlvbih0LGUsbil7dmFyIGk9T2JqZWN0LmNyZWF0ZSh0KTtpLmtleWJvYXJkRXZlbnQ9bjt2YXIgcj1uZXcgQ3VzdG9tRXZlbnQodC5ldmVudCx7ZGV0YWlsOmksY2FuY2VsYWJsZTohMH0pO3RoaXNbZV0uY2FsbCh0aGlzLHIpLHIuZGVmYXVsdFByZXZlbnRlZCYmbi5wcmV2ZW50RGVmYXVsdCgpfX0sem89e3Byb3BlcnRpZXM6e3Njcm9sbFRhcmdldDp7dHlwZTpIVE1MRWxlbWVudCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWZhdWx0U2Nyb2xsVGFyZ2V0fX19LG9ic2VydmVyczpbIl9zY3JvbGxUYXJnZXRDaGFuZ2VkKHNjcm9sbFRhcmdldCwgaXNBdHRhY2hlZCkiXSxfc2hvdWxkSGF2ZUxpc3RlbmVyOiEwLF9zY3JvbGxUYXJnZXRDaGFuZ2VkOmZ1bmN0aW9uKHQsZSl7aWYodGhpcy5fb2xkU2Nyb2xsVGFyZ2V0JiYodGhpcy5fdG9nZ2xlU2Nyb2xsTGlzdGVuZXIoITEsdGhpcy5fb2xkU2Nyb2xsVGFyZ2V0KSx0aGlzLl9vbGRTY3JvbGxUYXJnZXQ9bnVsbCksZSlpZigiZG9jdW1lbnQiPT09dCl0aGlzLnNjcm9sbFRhcmdldD10aGlzLl9kb2M7ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIHQpe3ZhciBuPXRoaXMuZG9tSG9zdDt0aGlzLnNjcm9sbFRhcmdldD1uJiZuLiQ/bi4kW3RdOnFpKHRoaXMub3duZXJEb2N1bWVudCkucXVlcnlTZWxlY3RvcigiIyIrdCl9ZWxzZSB0aGlzLl9pc1ZhbGlkU2Nyb2xsVGFyZ2V0KCkmJih0aGlzLl9vbGRTY3JvbGxUYXJnZXQ9dCx0aGlzLl90b2dnbGVTY3JvbGxMaXN0ZW5lcih0aGlzLl9zaG91bGRIYXZlTGlzdGVuZXIsdCkpfSxfc2Nyb2xsSGFuZGxlcjpmdW5jdGlvbiB0KCl7fSxnZXQgX2RlZmF1bHRTY3JvbGxUYXJnZXQoKXtyZXR1cm4gdGhpcy5fZG9jfSxnZXQgX2RvYygpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fSxnZXQgX3Njcm9sbFRvcCgpe3JldHVybiB0aGlzLl9pc1ZhbGlkU2Nyb2xsVGFyZ2V0KCk/dGhpcy5zY3JvbGxUYXJnZXQ9PT10aGlzLl9kb2M/d2luZG93LnBhZ2VZT2Zmc2V0OnRoaXMuc2Nyb2xsVGFyZ2V0LnNjcm9sbFRvcDowfSxnZXQgX3Njcm9sbExlZnQoKXtyZXR1cm4gdGhpcy5faXNWYWxpZFNjcm9sbFRhcmdldCgpP3RoaXMuc2Nyb2xsVGFyZ2V0PT09dGhpcy5fZG9jP3dpbmRvdy5wYWdlWE9mZnNldDp0aGlzLnNjcm9sbFRhcmdldC5zY3JvbGxMZWZ0OjB9LHNldCBfc2Nyb2xsVG9wKHQpe3RoaXMuc2Nyb2xsVGFyZ2V0PT09dGhpcy5fZG9jP3dpbmRvdy5zY3JvbGxUbyh3aW5kb3cucGFnZVhPZmZzZXQsdCk6dGhpcy5faXNWYWxpZFNjcm9sbFRhcmdldCgpJiYodGhpcy5zY3JvbGxUYXJnZXQuc2Nyb2xsVG9wPXQpfSxzZXQgX3Njcm9sbExlZnQodCl7dGhpcy5zY3JvbGxUYXJnZXQ9PT10aGlzLl9kb2M/d2luZG93LnNjcm9sbFRvKHQsd2luZG93LnBhZ2VZT2Zmc2V0KTp0aGlzLl9pc1ZhbGlkU2Nyb2xsVGFyZ2V0KCkmJih0aGlzLnNjcm9sbFRhcmdldC5zY3JvbGxMZWZ0PXQpfSxzY3JvbGw6ZnVuY3Rpb24odCxlKXt2YXIgbjsib2JqZWN0Ij09dHlwZW9mIHQ/KG49dC5sZWZ0LGU9dC50b3ApOm49dCxuPW58fDAsZT1lfHwwLHRoaXMuc2Nyb2xsVGFyZ2V0PT09dGhpcy5fZG9jP3dpbmRvdy5zY3JvbGxUbyhuLGUpOnRoaXMuX2lzVmFsaWRTY3JvbGxUYXJnZXQoKSYmKHRoaXMuc2Nyb2xsVGFyZ2V0LnNjcm9sbExlZnQ9bix0aGlzLnNjcm9sbFRhcmdldC5zY3JvbGxUb3A9ZSl9LGdldCBfc2Nyb2xsVGFyZ2V0V2lkdGgoKXtyZXR1cm4gdGhpcy5faXNWYWxpZFNjcm9sbFRhcmdldCgpP3RoaXMuc2Nyb2xsVGFyZ2V0PT09dGhpcy5fZG9jP3dpbmRvdy5pbm5lcldpZHRoOnRoaXMuc2Nyb2xsVGFyZ2V0Lm9mZnNldFdpZHRoOjB9LGdldCBfc2Nyb2xsVGFyZ2V0SGVpZ2h0KCl7cmV0dXJuIHRoaXMuX2lzVmFsaWRTY3JvbGxUYXJnZXQoKT90aGlzLnNjcm9sbFRhcmdldD09PXRoaXMuX2RvYz93aW5kb3cuaW5uZXJIZWlnaHQ6dGhpcy5zY3JvbGxUYXJnZXQub2Zmc2V0SGVpZ2h0OjB9LF9pc1ZhbGlkU2Nyb2xsVGFyZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2Nyb2xsVGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnR9LF90b2dnbGVTY3JvbGxMaXN0ZW5lcjpmdW5jdGlvbih0LGUpe3ZhciBuPWU9PT10aGlzLl9kb2M/d2luZG93OmU7dD90aGlzLl9ib3VuZFNjcm9sbEhhbmRsZXJ8fCh0aGlzLl9ib3VuZFNjcm9sbEhhbmRsZXI9dGhpcy5fc2Nyb2xsSGFuZGxlci5iaW5kKHRoaXMpLG4uYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIix0aGlzLl9ib3VuZFNjcm9sbEhhbmRsZXIpKTp0aGlzLl9ib3VuZFNjcm9sbEhhbmRsZXImJihuLnJlbW92ZUV2ZW50TGlzdGVuZXIoInNjcm9sbCIsdGhpcy5fYm91bmRTY3JvbGxIYW5kbGVyKSx0aGlzLl9ib3VuZFNjcm9sbEhhbmRsZXI9bnVsbCl9LHRvZ2dsZVNjcm9sbExpc3RlbmVyOmZ1bmN0aW9uKHQpe3RoaXMuX3Nob3VsZEhhdmVMaXN0ZW5lcj10LHRoaXMuX3RvZ2dsZVNjcm9sbExpc3RlbmVyKHQsdGhpcy5zY3JvbGxUYXJnZXQpfX07Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNiBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTYgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KdmFyIERvPW5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQKD86aG9uZXxhZDsoPzogVTspPyBDUFUpIE9TIChcZCspLyksQm89RG8mJkRvWzFdPj04LEhvPSItMTAwMDBweCIsRm89LTEwMDtJcih7X3RlbXBsYXRlOl9lYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKC13ZWJraXQtbWF4LWRldmljZS1waXhlbC1yYXRpbzogMSkgewogICAgICAgIDpob3N0IHsKICAgICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgICAgfQogICAgICB9CgogICAgICAjaXRlbXMgewogICAgICAgIEBhcHBseSAtLWlyb24tbGlzdC1pdGVtcy1jb250YWluZXI7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICA6aG9zdCg6bm90KFtncmlkXSkpICNpdGVtcyA+IDo6c2xvdHRlZCgqKSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgICNpdGVtcyA+IDo6c2xvdHRlZCgqKSB7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxhcnJheS1zZWxlY3RvciBpZD0ic2VsZWN0b3IiIGl0ZW1zPSJ7e2l0ZW1zfX0iIHNlbGVjdGVkPSJ7e3NlbGVjdGVkSXRlbXN9fSIgc2VsZWN0ZWQtaXRlbT0ie3tzZWxlY3RlZEl0ZW19fSI+PC9hcnJheS1zZWxlY3Rvcj4KCiAgICA8ZGl2IGlkPSJpdGVtcyI+CiAgICAgIDxzbG90Pjwvc2xvdD4KICAgIDwvZGl2PgpgLGlzOiJpcm9uLWxpc3QiLHByb3BlcnRpZXM6e2l0ZW1zOnt0eXBlOkFycmF5fSxhczp7dHlwZTpTdHJpbmcsdmFsdWU6Iml0ZW0ifSxpbmRleEFzOnt0eXBlOlN0cmluZyx2YWx1ZToiaW5kZXgifSxzZWxlY3RlZEFzOnt0eXBlOlN0cmluZyx2YWx1ZToic2VsZWN0ZWQifSxncmlkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVmbGVjdFRvQXR0cmlidXRlOiEwLG9ic2VydmVyOiJfZ3JpZENoYW5nZWQifSxzZWxlY3Rpb25FbmFibGVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHNlbGVjdGVkSXRlbTp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSxzZWxlY3RlZEl0ZW1zOnt0eXBlOk9iamVjdCxub3RpZnk6ITB9LG11bHRpU2VsZWN0aW9uOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHNjcm9sbE9mZnNldDp7dHlwZTpOdW1iZXIsdmFsdWU6MH19LG9ic2VydmVyczpbIl9pdGVtc0NoYW5nZWQoaXRlbXMuKikiLCJfc2VsZWN0aW9uRW5hYmxlZENoYW5nZWQoc2VsZWN0aW9uRW5hYmxlZCkiLCJfbXVsdGlTZWxlY3Rpb25DaGFuZ2VkKG11bHRpU2VsZWN0aW9uKSIsIl9zZXRPdmVyZmxvdyhzY3JvbGxUYXJnZXQsIHNjcm9sbE9mZnNldCkiXSxiZWhhdmlvcnM6W0tyLG1vLHpvLGhvXSxfcmF0aW86LjUsX3Njcm9sbGVyUGFkZGluZ1RvcDowLF9zY3JvbGxQb3NpdGlvbjowLF9waHlzaWNhbFNpemU6MCxfcGh5c2ljYWxBdmVyYWdlOjAsX3BoeXNpY2FsQXZlcmFnZUNvdW50OjAsX3BoeXNpY2FsVG9wOjAsX3ZpcnR1YWxDb3VudDowLF9lc3RTY3JvbGxIZWlnaHQ6MCxfc2Nyb2xsSGVpZ2h0OjAsX3ZpZXdwb3J0SGVpZ2h0OjAsX3ZpZXdwb3J0V2lkdGg6MCxfcGh5c2ljYWxJdGVtczpudWxsLF9waHlzaWNhbFNpemVzOm51bGwsX2ZpcnN0VmlzaWJsZUluZGV4VmFsOm51bGwsX2xhc3RWaXNpYmxlSW5kZXhWYWw6bnVsbCxfbWF4UGFnZXM6MixfZm9jdXNlZEl0ZW06bnVsbCxfZm9jdXNlZFZpcnR1YWxJbmRleDotMSxfZm9jdXNlZFBoeXNpY2FsSW5kZXg6LTEsX29mZnNjcmVlbkZvY3VzZWRJdGVtOm51bGwsX2ZvY3VzQmFja2ZpbGxJdGVtOm51bGwsX2l0ZW1zUGVyUm93OjEsX2l0ZW1XaWR0aDowLF9yb3dIZWlnaHQ6MCxfdGVtcGxhdGVDb3N0OjAsX3BhcmVudE1vZGVsOiEwLGdldCBfcGh5c2ljYWxCb3R0b20oKXtyZXR1cm4gdGhpcy5fcGh5c2ljYWxUb3ArdGhpcy5fcGh5c2ljYWxTaXplfSxnZXQgX3Njcm9sbEJvdHRvbSgpe3JldHVybiB0aGlzLl9zY3JvbGxQb3NpdGlvbit0aGlzLl92aWV3cG9ydEhlaWdodH0sZ2V0IF92aXJ0dWFsRW5kKCl7cmV0dXJuIHRoaXMuX3ZpcnR1YWxTdGFydCt0aGlzLl9waHlzaWNhbENvdW50LTF9LGdldCBfaGlkZGVuQ29udGVudFNpemUoKXtyZXR1cm4odGhpcy5ncmlkP3RoaXMuX3BoeXNpY2FsUm93cyp0aGlzLl9yb3dIZWlnaHQ6dGhpcy5fcGh5c2ljYWxTaXplKS10aGlzLl92aWV3cG9ydEhlaWdodH0sZ2V0IF9pdGVtc1BhcmVudCgpe3JldHVybiBxaShxaSh0aGlzLl91c2VyVGVtcGxhdGUpLnBhcmVudE5vZGUpfSxnZXQgX21heFNjcm9sbFRvcCgpe3JldHVybiB0aGlzLl9lc3RTY3JvbGxIZWlnaHQtdGhpcy5fdmlld3BvcnRIZWlnaHQrdGhpcy5fc2Nyb2xsT2Zmc2V0fSxnZXQgX21heFZpcnR1YWxTdGFydCgpe3ZhciB0PXRoaXMuX2NvbnZlcnRJbmRleFRvQ29tcGxldGVSb3codGhpcy5fdmlydHVhbENvdW50KTtyZXR1cm4gTWF0aC5tYXgoMCx0LXRoaXMuX3BoeXNpY2FsQ291bnQpfSxzZXQgX3ZpcnR1YWxTdGFydCh0KXt0PXRoaXMuX2NsYW1wKHQsMCx0aGlzLl9tYXhWaXJ0dWFsU3RhcnQpLHRoaXMuZ3JpZCYmKHQtPXQldGhpcy5faXRlbXNQZXJSb3cpLHRoaXMuX3ZpcnR1YWxTdGFydFZhbD10fSxnZXQgX3ZpcnR1YWxTdGFydCgpe3JldHVybiB0aGlzLl92aXJ0dWFsU3RhcnRWYWx8fDB9LHNldCBfcGh5c2ljYWxTdGFydCh0KXsodCU9dGhpcy5fcGh5c2ljYWxDb3VudCk8MCYmKHQ9dGhpcy5fcGh5c2ljYWxDb3VudCt0KSx0aGlzLmdyaWQmJih0LT10JXRoaXMuX2l0ZW1zUGVyUm93KSx0aGlzLl9waHlzaWNhbFN0YXJ0VmFsPXR9LGdldCBfcGh5c2ljYWxTdGFydCgpe3JldHVybiB0aGlzLl9waHlzaWNhbFN0YXJ0VmFsfHwwfSxnZXQgX3BoeXNpY2FsRW5kKCl7cmV0dXJuKHRoaXMuX3BoeXNpY2FsU3RhcnQrdGhpcy5fcGh5c2ljYWxDb3VudC0xKSV0aGlzLl9waHlzaWNhbENvdW50fSxzZXQgX3BoeXNpY2FsQ291bnQodCl7dGhpcy5fcGh5c2ljYWxDb3VudFZhbD10fSxnZXQgX3BoeXNpY2FsQ291bnQoKXtyZXR1cm4gdGhpcy5fcGh5c2ljYWxDb3VudFZhbHx8MH0sZ2V0IF9vcHRQaHlzaWNhbFNpemUoKXtyZXR1cm4gMD09PXRoaXMuX3ZpZXdwb3J0SGVpZ2h0PzEvMDp0aGlzLl92aWV3cG9ydEhlaWdodCp0aGlzLl9tYXhQYWdlc30sZ2V0IF9pc1Zpc2libGUoKXtyZXR1cm4gQm9vbGVhbih0aGlzLm9mZnNldFdpZHRofHx0aGlzLm9mZnNldEhlaWdodCl9LGdldCBmaXJzdFZpc2libGVJbmRleCgpe3ZhciB0PXRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsO2lmKG51bGw9PXQpe3ZhciBlPXRoaXMuX3BoeXNpY2FsVG9wK3RoaXMuX3Njcm9sbE9mZnNldDt0PXRoaXMuX2l0ZXJhdGVJdGVtcygoZnVuY3Rpb24odCxuKXtyZXR1cm4oZSs9dGhpcy5fZ2V0UGh5c2ljYWxTaXplSW5jcmVtZW50KHQpKT50aGlzLl9zY3JvbGxQb3NpdGlvbj90aGlzLmdyaWQ/bi1uJXRoaXMuX2l0ZW1zUGVyUm93Om46dGhpcy5ncmlkJiZ0aGlzLl92aXJ0dWFsQ291bnQtMT09PW4/bi1uJXRoaXMuX2l0ZW1zUGVyUm93OnZvaWQgMH0pKXx8MCx0aGlzLl9maXJzdFZpc2libGVJbmRleFZhbD10fXJldHVybiB0fSxnZXQgbGFzdFZpc2libGVJbmRleCgpe3ZhciB0PXRoaXMuX2xhc3RWaXNpYmxlSW5kZXhWYWw7aWYobnVsbD09dCl7aWYodGhpcy5ncmlkKXQ9TWF0aC5taW4odGhpcy5fdmlydHVhbENvdW50LHRoaXMuZmlyc3RWaXNpYmxlSW5kZXgrdGhpcy5fZXN0Um93c0luVmlldyp0aGlzLl9pdGVtc1BlclJvdy0xKTtlbHNle3ZhciBlPXRoaXMuX3BoeXNpY2FsVG9wK3RoaXMuX3Njcm9sbE9mZnNldDt0aGlzLl9pdGVyYXRlSXRlbXMoKGZ1bmN0aW9uKG4saSl7ZTx0aGlzLl9zY3JvbGxCb3R0b20mJih0PWkpLGUrPXRoaXMuX2dldFBoeXNpY2FsU2l6ZUluY3JlbWVudChuKX0pKX10aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPXR9cmV0dXJuIHR9LGdldCBfZGVmYXVsdFNjcm9sbFRhcmdldCgpe3JldHVybiB0aGlzfSxnZXQgX3ZpcnR1YWxSb3dDb3VudCgpe3JldHVybiBNYXRoLmNlaWwodGhpcy5fdmlydHVhbENvdW50L3RoaXMuX2l0ZW1zUGVyUm93KX0sZ2V0IF9lc3RSb3dzSW5WaWV3KCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLl92aWV3cG9ydEhlaWdodC90aGlzLl9yb3dIZWlnaHQpfSxnZXQgX3BoeXNpY2FsUm93cygpe3JldHVybiBNYXRoLmNlaWwodGhpcy5fcGh5c2ljYWxDb3VudC90aGlzLl9pdGVtc1BlclJvdyl9LGdldCBfc2Nyb2xsT2Zmc2V0KCl7cmV0dXJuIHRoaXMuX3Njcm9sbGVyUGFkZGluZ1RvcCt0aGlzLnNjcm9sbE9mZnNldH0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLl9kaWRGb2N1cy5iaW5kKHRoaXMpLCEwKX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9kZWJvdW5jZSgiX3JlbmRlciIsdGhpcy5fcmVuZGVyLF90KSx0aGlzLmxpc3Rlbih0aGlzLCJpcm9uLXJlc2l6ZSIsIl9yZXNpemVIYW5kbGVyIiksdGhpcy5saXN0ZW4odGhpcywia2V5ZG93biIsIl9rZXlkb3duSGFuZGxlciIpfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMudW5saXN0ZW4odGhpcywiaXJvbi1yZXNpemUiLCJfcmVzaXplSGFuZGxlciIpLHRoaXMudW5saXN0ZW4odGhpcywia2V5ZG93biIsIl9rZXlkb3duSGFuZGxlciIpfSxfc2V0T3ZlcmZsb3c6ZnVuY3Rpb24odCl7dGhpcy5zdHlsZS53ZWJraXRPdmVyZmxvd1Njcm9sbGluZz10PT09dGhpcz8idG91Y2giOiIiLHRoaXMuc3R5bGUub3ZlcmZsb3dZPXQ9PT10aGlzPyJhdXRvIjoiIix0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGwsdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9kZWJvdW5jZSgiX3JlbmRlciIsdGhpcy5fcmVuZGVyLF90KX0sdXBkYXRlVmlld3BvcnRCb3VuZGFyaWVzOmZ1bmN0aW9uKCl7dmFyIHQ9d2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcyk7dGhpcy5fc2Nyb2xsZXJQYWRkaW5nVG9wPXRoaXMuc2Nyb2xsVGFyZ2V0PT09dGhpcz8wOnBhcnNlSW50KHRbInBhZGRpbmctdG9wIl0sMTApLHRoaXMuX2lzUlRMPUJvb2xlYW4oInJ0bCI9PT10LmRpcmVjdGlvbiksdGhpcy5fdmlld3BvcnRXaWR0aD10aGlzLiQuaXRlbXMub2Zmc2V0V2lkdGgsdGhpcy5fdmlld3BvcnRIZWlnaHQ9dGhpcy5fc2Nyb2xsVGFyZ2V0SGVpZ2h0LHRoaXMuZ3JpZCYmdGhpcy5fdXBkYXRlR3JpZE1ldHJpY3MoKX0sX3Njcm9sbEhhbmRsZXI6ZnVuY3Rpb24oKXt2YXIgdD1NYXRoLm1heCgwLE1hdGgubWluKHRoaXMuX21heFNjcm9sbFRvcCx0aGlzLl9zY3JvbGxUb3ApKSxlPXQtdGhpcy5fc2Nyb2xsUG9zaXRpb24sbj1lPj0wO2lmKHRoaXMuX3Njcm9sbFBvc2l0aW9uPXQsdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGwsTWF0aC5hYnMoZSk+dGhpcy5fcGh5c2ljYWxTaXplJiZ0aGlzLl9waHlzaWNhbFNpemU+MCl7ZS09dGhpcy5fc2Nyb2xsT2Zmc2V0O3ZhciBpPU1hdGgucm91bmQoZS90aGlzLl9waHlzaWNhbEF2ZXJhZ2UpKnRoaXMuX2l0ZW1zUGVyUm93O3RoaXMuX3ZpcnR1YWxTdGFydD10aGlzLl92aXJ0dWFsU3RhcnQraSx0aGlzLl9waHlzaWNhbFN0YXJ0PXRoaXMuX3BoeXNpY2FsU3RhcnQraSx0aGlzLl9waHlzaWNhbFRvcD1NYXRoLm1pbihNYXRoLmZsb29yKHRoaXMuX3ZpcnR1YWxTdGFydC90aGlzLl9pdGVtc1BlclJvdykqdGhpcy5fcGh5c2ljYWxBdmVyYWdlLHRoaXMuX3Njcm9sbFBvc2l0aW9uKSx0aGlzLl91cGRhdGUoKX1lbHNlIGlmKHRoaXMuX3BoeXNpY2FsQ291bnQ+MCl7dmFyIHI9dGhpcy5fZ2V0UmV1c2FibGVzKG4pO24/KHRoaXMuX3BoeXNpY2FsVG9wPXIucGh5c2ljYWxUb3AsdGhpcy5fdmlydHVhbFN0YXJ0PXRoaXMuX3ZpcnR1YWxTdGFydCtyLmluZGV4ZXMubGVuZ3RoLHRoaXMuX3BoeXNpY2FsU3RhcnQ9dGhpcy5fcGh5c2ljYWxTdGFydCtyLmluZGV4ZXMubGVuZ3RoKToodGhpcy5fdmlydHVhbFN0YXJ0PXRoaXMuX3ZpcnR1YWxTdGFydC1yLmluZGV4ZXMubGVuZ3RoLHRoaXMuX3BoeXNpY2FsU3RhcnQ9dGhpcy5fcGh5c2ljYWxTdGFydC1yLmluZGV4ZXMubGVuZ3RoKSx0aGlzLl91cGRhdGUoci5pbmRleGVzLG4/bnVsbDpyLmluZGV4ZXMpLHRoaXMuX2RlYm91bmNlKCJfaW5jcmVhc2VQb29sSWZOZWVkZWQiLHRoaXMuX2luY3JlYXNlUG9vbElmTmVlZGVkLmJpbmQodGhpcywwKSx2dCl9fSxfZ2V0UmV1c2FibGVzOmZ1bmN0aW9uKHQpe3ZhciBlLG4saSxyPVtdLG89dGhpcy5faGlkZGVuQ29udGVudFNpemUqdGhpcy5fcmF0aW8sYT10aGlzLl92aXJ0dWFsU3RhcnQscz10aGlzLl92aXJ0dWFsRW5kLGw9dGhpcy5fcGh5c2ljYWxDb3VudCxjPXRoaXMuX3BoeXNpY2FsVG9wK3RoaXMuX3Njcm9sbE9mZnNldCx1PXRoaXMuX3Njcm9sbFBvc2l0aW9uLGg9dGhpcy5fc2Nyb2xsQm90dG9tO2Zvcih0PyhlPXRoaXMuX3BoeXNpY2FsU3RhcnQsbj11LWMpOihlPXRoaXMuX3BoeXNpY2FsRW5kLG49dGhpcy5fcGh5c2ljYWxCb3R0b20rdGhpcy5fc2Nyb2xsT2Zmc2V0LWgpO24tPWk9dGhpcy5fZ2V0UGh5c2ljYWxTaXplSW5jcmVtZW50KGUpLCEoci5sZW5ndGg+PWx8fG48PW8pOylpZih0KXtpZihzK3IubGVuZ3RoKzE+PXRoaXMuX3ZpcnR1YWxDb3VudClicmVhaztpZihjK2k+PXUtdGhpcy5fc2Nyb2xsT2Zmc2V0KWJyZWFrO3IucHVzaChlKSxjKz1pLGU9KGUrMSklbH1lbHNle2lmKGEtci5sZW5ndGg8PTApYnJlYWs7aWYoYyt0aGlzLl9waHlzaWNhbFNpemUtaTw9aClicmVhaztyLnB1c2goZSksYy09aSxlPTA9PT1lP2wtMTplLTF9cmV0dXJue2luZGV4ZXM6cixwaHlzaWNhbFRvcDpjLXRoaXMuX3Njcm9sbE9mZnNldH19LF91cGRhdGU6ZnVuY3Rpb24odCxlKXtpZighKHQmJjA9PT10Lmxlbmd0aHx8MD09PXRoaXMuX3BoeXNpY2FsQ291bnQpKXtpZih0aGlzLl9tYW5hZ2VGb2N1cygpLHRoaXMuX2Fzc2lnbk1vZGVscyh0KSx0aGlzLl91cGRhdGVNZXRyaWNzKHQpLGUpZm9yKDtlLmxlbmd0aDspe3ZhciBuPWUucG9wKCk7dGhpcy5fcGh5c2ljYWxUb3AtPXRoaXMuX2dldFBoeXNpY2FsU2l6ZUluY3JlbWVudChuKX10aGlzLl9wb3NpdGlvbkl0ZW1zKCksdGhpcy5fdXBkYXRlU2Nyb2xsZXJTaXplKCl9fSxfY3JlYXRlUG9vbDpmdW5jdGlvbih0KXt2YXIgZSxuO3RoaXMuX2Vuc3VyZVRlbXBsYXRpemVkKCk7dmFyIGk9bmV3IEFycmF5KHQpO2ZvcihlPTA7ZTx0O2UrKyluPXRoaXMuc3RhbXAobnVsbCksaVtlXT1uLnJvb3QucXVlcnlTZWxlY3RvcigiKiIpLHRoaXMuX2l0ZW1zUGFyZW50LmFwcGVuZENoaWxkKG4ucm9vdCk7cmV0dXJuIGl9LF9pc0NsaWVudEZ1bGw6ZnVuY3Rpb24oKXtyZXR1cm4gMCE9dGhpcy5fc2Nyb2xsQm90dG9tJiZ0aGlzLl9waHlzaWNhbEJvdHRvbS0xPj10aGlzLl9zY3JvbGxCb3R0b20mJnRoaXMuX3BoeXNpY2FsVG9wPD10aGlzLl9zY3JvbGxQb3NpdGlvbn0sX2luY3JlYXNlUG9vbElmTmVlZGVkOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2NsYW1wKHRoaXMuX3BoeXNpY2FsQ291bnQrdCwzLHRoaXMuX3ZpcnR1YWxDb3VudC10aGlzLl92aXJ0dWFsU3RhcnQpO2lmKGU9dGhpcy5fY29udmVydEluZGV4VG9Db21wbGV0ZVJvdyhlKSx0aGlzLmdyaWQpe3ZhciBuPWUldGhpcy5faXRlbXNQZXJSb3c7biYmZS1uPD10aGlzLl9waHlzaWNhbENvdW50JiYoZSs9dGhpcy5faXRlbXNQZXJSb3cpLGUtPW59dmFyIGk9ZS10aGlzLl9waHlzaWNhbENvdW50LHI9TWF0aC5yb3VuZCguNSp0aGlzLl9waHlzaWNhbENvdW50KTtpZighKGk8MCkpe2lmKGk+MCl7dmFyIG89d2luZG93LnBlcmZvcm1hbmNlLm5vdygpO1tdLnB1c2guYXBwbHkodGhpcy5fcGh5c2ljYWxJdGVtcyx0aGlzLl9jcmVhdGVQb29sKGkpKTtmb3IodmFyIGE9MDthPGk7YSsrKXRoaXMuX3BoeXNpY2FsU2l6ZXMucHVzaCgwKTt0aGlzLl9waHlzaWNhbENvdW50PXRoaXMuX3BoeXNpY2FsQ291bnQraSx0aGlzLl9waHlzaWNhbFN0YXJ0PnRoaXMuX3BoeXNpY2FsRW5kJiZ0aGlzLl9pc0luZGV4UmVuZGVyZWQodGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCkmJnRoaXMuX2dldFBoeXNpY2FsSW5kZXgodGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCk8dGhpcy5fcGh5c2ljYWxFbmQmJih0aGlzLl9waHlzaWNhbFN0YXJ0PXRoaXMuX3BoeXNpY2FsU3RhcnQraSksdGhpcy5fdXBkYXRlKCksdGhpcy5fdGVtcGxhdGVDb3N0PSh3aW5kb3cucGVyZm9ybWFuY2Uubm93KCktbykvaSxyPU1hdGgucm91bmQoLjUqdGhpcy5fcGh5c2ljYWxDb3VudCl9dGhpcy5fdmlydHVhbEVuZD49dGhpcy5fdmlydHVhbENvdW50LTF8fDA9PT1yfHwodGhpcy5faXNDbGllbnRGdWxsKCk/dGhpcy5fcGh5c2ljYWxTaXplPHRoaXMuX29wdFBoeXNpY2FsU2l6ZSYmdGhpcy5fZGVib3VuY2UoIl9pbmNyZWFzZVBvb2xJZk5lZWRlZCIsdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQuYmluZCh0aGlzLHRoaXMuX2NsYW1wKE1hdGgucm91bmQoNTAvdGhpcy5fdGVtcGxhdGVDb3N0KSwxLHIpKSx5dCk6dGhpcy5fZGVib3VuY2UoIl9pbmNyZWFzZVBvb2xJZk5lZWRlZCIsdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQuYmluZCh0aGlzLHIpLHZ0KSl9fSxfcmVuZGVyOmZ1bmN0aW9uKCl7aWYodGhpcy5pc0F0dGFjaGVkJiZ0aGlzLl9pc1Zpc2libGUpaWYoMCE9PXRoaXMuX3BoeXNpY2FsQ291bnQpe3ZhciB0PXRoaXMuX2dldFJldXNhYmxlcyghMCk7dGhpcy5fcGh5c2ljYWxUb3A9dC5waHlzaWNhbFRvcCx0aGlzLl92aXJ0dWFsU3RhcnQ9dGhpcy5fdmlydHVhbFN0YXJ0K3QuaW5kZXhlcy5sZW5ndGgsdGhpcy5fcGh5c2ljYWxTdGFydD10aGlzLl9waHlzaWNhbFN0YXJ0K3QuaW5kZXhlcy5sZW5ndGgsdGhpcy5fdXBkYXRlKHQuaW5kZXhlcyksdGhpcy5fdXBkYXRlKCksdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQoMCl9ZWxzZSB0aGlzLl92aXJ0dWFsQ291bnQ+MCYmKHRoaXMudXBkYXRlVmlld3BvcnRCb3VuZGFyaWVzKCksdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQoMykpfSxfZW5zdXJlVGVtcGxhdGl6ZWQ6ZnVuY3Rpb24oKXtpZighdGhpcy5jdG9yKXt0aGlzLl91c2VyVGVtcGxhdGU9dGhpcy5xdWVyeUVmZmVjdGl2ZUNoaWxkcmVuKCJ0ZW1wbGF0ZSIpLHRoaXMuX3VzZXJUZW1wbGF0ZXx8Y29uc29sZS53YXJuKCJpcm9uLWxpc3QgcmVxdWlyZXMgYSB0ZW1wbGF0ZSB0byBiZSBwcm92aWRlZCBpbiBsaWdodC1kb20iKTt2YXIgdD17X19rZXlfXzohMH07dFt0aGlzLmFzXT0hMCx0W3RoaXMuaW5kZXhBc109ITAsdFt0aGlzLnNlbGVjdGVkQXNdPSEwLHQudGFiSW5kZXg9ITAsdGhpcy5faW5zdGFuY2VQcm9wcz10LHRoaXMudGVtcGxhdGl6ZSh0aGlzLl91c2VyVGVtcGxhdGUsdGhpcy5tdXRhYmxlRGF0YSl9fSxfZ3JpZENoYW5nZWQ6ZnVuY3Rpb24odCxlKXt2b2lkIDAhPT1lJiYodGhpcy5ub3RpZnlSZXNpemUoKSx6aSgpLHQmJnRoaXMuX3VwZGF0ZUdyaWRNZXRyaWNzKCkpfSxfaXRlbXNDaGFuZ2VkOmZ1bmN0aW9uKHQpe2lmKCJpdGVtcyI9PT10LnBhdGgpdGhpcy5fdmlydHVhbFN0YXJ0PTAsdGhpcy5fcGh5c2ljYWxUb3A9MCx0aGlzLl92aXJ0dWFsQ291bnQ9dGhpcy5pdGVtcz90aGlzLml0ZW1zLmxlbmd0aDowLHRoaXMuX3BoeXNpY2FsSW5kZXhGb3JLZXk9e30sdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGwsdGhpcy5fcGh5c2ljYWxDb3VudD10aGlzLl9waHlzaWNhbENvdW50fHwwLHRoaXMuX3BoeXNpY2FsSXRlbXM9dGhpcy5fcGh5c2ljYWxJdGVtc3x8W10sdGhpcy5fcGh5c2ljYWxTaXplcz10aGlzLl9waHlzaWNhbFNpemVzfHxbXSx0aGlzLl9waHlzaWNhbFN0YXJ0PTAsdGhpcy5fc2Nyb2xsVG9wPnRoaXMuX3Njcm9sbE9mZnNldCYmdGhpcy5fcmVzZXRTY3JvbGxQb3NpdGlvbigwKSx0aGlzLl9yZW1vdmVGb2N1c2VkSXRlbSgpLHRoaXMuX2RlYm91bmNlKCJfcmVuZGVyIix0aGlzLl9yZW5kZXIsX3QpO2Vsc2UgaWYoIml0ZW1zLnNwbGljZXMiPT09dC5wYXRoKXtpZih0aGlzLl9hZGp1c3RWaXJ0dWFsSW5kZXgodC52YWx1ZS5pbmRleFNwbGljZXMpLHRoaXMuX3ZpcnR1YWxDb3VudD10aGlzLml0ZW1zP3RoaXMuaXRlbXMubGVuZ3RoOjAsdC52YWx1ZS5pbmRleFNwbGljZXMuc29tZSgoZnVuY3Rpb24odCl7cmV0dXJuIHQuYWRkZWRDb3VudD4wfHx0LnJlbW92ZWQubGVuZ3RoPjB9KSkpe3ZhciBlPXRoaXMuX2dldEFjdGl2ZUVsZW1lbnQoKTt0aGlzLmNvbnRhaW5zKGUpJiZlLmJsdXIoKX12YXIgbj10LnZhbHVlLmluZGV4U3BsaWNlcy5zb21lKChmdW5jdGlvbih0KXtyZXR1cm4gdC5pbmRleCt0LmFkZGVkQ291bnQ+PXRoaXMuX3ZpcnR1YWxTdGFydCYmdC5pbmRleDw9dGhpcy5fdmlydHVhbEVuZH0pLHRoaXMpO3RoaXMuX2lzQ2xpZW50RnVsbCgpJiYhbnx8dGhpcy5fZGVib3VuY2UoIl9yZW5kZXIiLHRoaXMuX3JlbmRlcixfdCl9ZWxzZSJpdGVtcy5sZW5ndGgiIT09dC5wYXRoJiZ0aGlzLl9mb3J3YXJkSXRlbVBhdGgodC5wYXRoLHQudmFsdWUpfSxfZm9yd2FyZEl0ZW1QYXRoOmZ1bmN0aW9uKHQsZSl7dmFyIG4saSxyLG89KHQ9dC5zbGljZSg2KSkuaW5kZXhPZigiLiIpOy0xPT09byYmKG89dC5sZW5ndGgpO3ZhciBhPXRoaXMubW9kZWxGb3JFbGVtZW50KHRoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtKSxzPXBhcnNlSW50KHQuc3Vic3RyaW5nKDAsbyksMTApOyhuPXRoaXMuX2lzSW5kZXhSZW5kZXJlZChzKSk/KGk9dGhpcy5fZ2V0UGh5c2ljYWxJbmRleChzKSxyPXRoaXMubW9kZWxGb3JFbGVtZW50KHRoaXMuX3BoeXNpY2FsSXRlbXNbaV0pKTphJiYocj1hKSxyJiZyW3RoaXMuaW5kZXhBc109PT1zJiYodD10LnN1YnN0cmluZyhvKzEpLHIuX3NldFBlbmRpbmdQcm9wZXJ0eU9yUGF0aCh0PXRoaXMuYXMrKHQ/Ii4iK3Q6IiIpLGUsITEsITApLHIuX2ZsdXNoUHJvcGVydGllcyYmci5fZmx1c2hQcm9wZXJ0aWVzKCksbiYmKHRoaXMuX3VwZGF0ZU1ldHJpY3MoW2ldKSx0aGlzLl9wb3NpdGlvbkl0ZW1zKCksdGhpcy5fdXBkYXRlU2Nyb2xsZXJTaXplKCkpKX0sX2FkanVzdFZpcnR1YWxJbmRleDpmdW5jdGlvbih0KXt0LmZvckVhY2goKGZ1bmN0aW9uKHQpe2lmKHQucmVtb3ZlZC5mb3JFYWNoKHRoaXMuX3JlbW92ZUl0ZW0sdGhpcyksdC5pbmRleDx0aGlzLl92aXJ0dWFsU3RhcnQpe3ZhciBlPU1hdGgubWF4KHQuYWRkZWRDb3VudC10LnJlbW92ZWQubGVuZ3RoLHQuaW5kZXgtdGhpcy5fdmlydHVhbFN0YXJ0KTt0aGlzLl92aXJ0dWFsU3RhcnQ9dGhpcy5fdmlydHVhbFN0YXJ0K2UsdGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleD49MCYmKHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg9dGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCtlKX19KSx0aGlzKX0sX3JlbW92ZUl0ZW06ZnVuY3Rpb24odCl7dGhpcy4kLnNlbGVjdG9yLmRlc2VsZWN0KHQpLHRoaXMuX2ZvY3VzZWRJdGVtJiZ0aGlzLm1vZGVsRm9yRWxlbWVudCh0aGlzLl9mb2N1c2VkSXRlbSlbdGhpcy5hc109PT10JiZ0aGlzLl9yZW1vdmVGb2N1c2VkSXRlbSgpfSxfaXRlcmF0ZUl0ZW1zOmZ1bmN0aW9uKHQsZSl7dmFyIG4saSxyLG87aWYoMj09PWFyZ3VtZW50cy5sZW5ndGgmJmUpe2ZvcihvPTA7bzxlLmxlbmd0aDtvKyspaWYoaT10aGlzLl9jb21wdXRlVmlkeChuPWVbb10pLG51bGwhPShyPXQuY2FsbCh0aGlzLG4saSkpKXJldHVybiByfWVsc2V7Zm9yKG49dGhpcy5fcGh5c2ljYWxTdGFydCxpPXRoaXMuX3ZpcnR1YWxTdGFydDtuPHRoaXMuX3BoeXNpY2FsQ291bnQ7bisrLGkrKylpZihudWxsIT0ocj10LmNhbGwodGhpcyxuLGkpKSlyZXR1cm4gcjtmb3Iobj0wO248dGhpcy5fcGh5c2ljYWxTdGFydDtuKyssaSsrKWlmKG51bGwhPShyPXQuY2FsbCh0aGlzLG4saSkpKXJldHVybiByfX0sX2NvbXB1dGVWaWR4OmZ1bmN0aW9uKHQpe3JldHVybiB0Pj10aGlzLl9waHlzaWNhbFN0YXJ0P3RoaXMuX3ZpcnR1YWxTdGFydCsodC10aGlzLl9waHlzaWNhbFN0YXJ0KTp0aGlzLl92aXJ0dWFsU3RhcnQrKHRoaXMuX3BoeXNpY2FsQ291bnQtdGhpcy5fcGh5c2ljYWxTdGFydCkrdH0sX2Fzc2lnbk1vZGVsczpmdW5jdGlvbih0KXt0aGlzLl9pdGVyYXRlSXRlbXMoKGZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fcGh5c2ljYWxJdGVtc1t0XSxpPXRoaXMuaXRlbXMmJnRoaXMuaXRlbXNbZV07aWYobnVsbCE9aSl7dmFyIHI9dGhpcy5tb2RlbEZvckVsZW1lbnQobik7ci5fX2tleV9fPW51bGwsdGhpcy5fZm9yd2FyZFByb3BlcnR5KHIsdGhpcy5hcyxpKSx0aGlzLl9mb3J3YXJkUHJvcGVydHkocix0aGlzLnNlbGVjdGVkQXMsdGhpcy4kLnNlbGVjdG9yLmlzU2VsZWN0ZWQoaSkpLHRoaXMuX2ZvcndhcmRQcm9wZXJ0eShyLHRoaXMuaW5kZXhBcyxlKSx0aGlzLl9mb3J3YXJkUHJvcGVydHkociwidGFiSW5kZXgiLHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg9PT1lPzA6LTEpLHRoaXMuX3BoeXNpY2FsSW5kZXhGb3JLZXlbci5fX2tleV9fXT10LHIuX2ZsdXNoUHJvcGVydGllcyYmci5fZmx1c2hQcm9wZXJ0aWVzKCEwKSxuLnJlbW92ZUF0dHJpYnV0ZSgiaGlkZGVuIil9ZWxzZSBuLnNldEF0dHJpYnV0ZSgiaGlkZGVuIiwiIil9KSx0KX0sX3VwZGF0ZU1ldHJpY3M6ZnVuY3Rpb24odCl7emkoKTt2YXIgZT0wLG49MCxpPXRoaXMuX3BoeXNpY2FsQXZlcmFnZUNvdW50LHI9dGhpcy5fcGh5c2ljYWxBdmVyYWdlO3RoaXMuX2l0ZXJhdGVJdGVtcygoZnVuY3Rpb24odCxpKXtuKz10aGlzLl9waHlzaWNhbFNpemVzW3RdLHRoaXMuX3BoeXNpY2FsU2l6ZXNbdF09dGhpcy5fcGh5c2ljYWxJdGVtc1t0XS5vZmZzZXRIZWlnaHQsZSs9dGhpcy5fcGh5c2ljYWxTaXplc1t0XSx0aGlzLl9waHlzaWNhbEF2ZXJhZ2VDb3VudCs9dGhpcy5fcGh5c2ljYWxTaXplc1t0XT8xOjB9KSx0KSx0aGlzLmdyaWQ/KHRoaXMuX3VwZGF0ZUdyaWRNZXRyaWNzKCksdGhpcy5fcGh5c2ljYWxTaXplPU1hdGguY2VpbCh0aGlzLl9waHlzaWNhbENvdW50L3RoaXMuX2l0ZW1zUGVyUm93KSp0aGlzLl9yb3dIZWlnaHQpOihuPTE9PT10aGlzLl9pdGVtc1BlclJvdz9uOk1hdGguY2VpbCh0aGlzLl9waHlzaWNhbENvdW50L3RoaXMuX2l0ZW1zUGVyUm93KSp0aGlzLl9yb3dIZWlnaHQsdGhpcy5fcGh5c2ljYWxTaXplPXRoaXMuX3BoeXNpY2FsU2l6ZStlLW4sdGhpcy5faXRlbXNQZXJSb3c9MSksdGhpcy5fcGh5c2ljYWxBdmVyYWdlQ291bnQhPT1pJiYodGhpcy5fcGh5c2ljYWxBdmVyYWdlPU1hdGgucm91bmQoKHIqaStlKS90aGlzLl9waHlzaWNhbEF2ZXJhZ2VDb3VudCkpfSxfdXBkYXRlR3JpZE1ldHJpY3M6ZnVuY3Rpb24oKXt0aGlzLl9pdGVtV2lkdGg9dGhpcy5fcGh5c2ljYWxDb3VudD4wP3RoaXMuX3BoeXNpY2FsSXRlbXNbMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg6MjAwLHRoaXMuX3Jvd0hlaWdodD10aGlzLl9waHlzaWNhbENvdW50PjA/dGhpcy5fcGh5c2ljYWxJdGVtc1swXS5vZmZzZXRIZWlnaHQ6MjAwLHRoaXMuX2l0ZW1zUGVyUm93PXRoaXMuX2l0ZW1XaWR0aD9NYXRoLmZsb29yKHRoaXMuX3ZpZXdwb3J0V2lkdGgvdGhpcy5faXRlbVdpZHRoKTp0aGlzLl9pdGVtc1BlclJvd30sX3Bvc2l0aW9uSXRlbXM6ZnVuY3Rpb24oKXt0aGlzLl9hZGp1c3RTY3JvbGxQb3NpdGlvbigpO3ZhciB0PXRoaXMuX3BoeXNpY2FsVG9wO2lmKHRoaXMuZ3JpZCl7dmFyIGU9KHRoaXMuX3ZpZXdwb3J0V2lkdGgtdGhpcy5faXRlbXNQZXJSb3cqdGhpcy5faXRlbVdpZHRoKS8yO3RoaXMuX2l0ZXJhdGVJdGVtcygoZnVuY3Rpb24obixpKXt2YXIgcj1NYXRoLmZsb29yKGkldGhpcy5faXRlbXNQZXJSb3cqdGhpcy5faXRlbVdpZHRoK2UpO3RoaXMuX2lzUlRMJiYocio9LTEpLHRoaXMudHJhbnNsYXRlM2QocisicHgiLHQrInB4IiwwLHRoaXMuX3BoeXNpY2FsSXRlbXNbbl0pLHRoaXMuX3Nob3VsZFJlbmRlck5leHRSb3coaSkmJih0Kz10aGlzLl9yb3dIZWlnaHQpfSkpfWVsc2V7Y29uc3QgZT1bXTt0aGlzLl9pdGVyYXRlSXRlbXMoKGZ1bmN0aW9uKG4saSl7Y29uc3Qgcj10aGlzLl9waHlzaWNhbEl0ZW1zW25dO3RoaXMudHJhbnNsYXRlM2QoMCx0KyJweCIsMCxyKSx0Kz10aGlzLl9waHlzaWNhbFNpemVzW25dO2NvbnN0IG89ci5pZDtvJiZlLnB1c2gobyl9KSksZS5sZW5ndGgmJnRoaXMuc2V0QXR0cmlidXRlKCJhcmlhLW93bnMiLGUuam9pbigiICIpKX19LF9nZXRQaHlzaWNhbFNpemVJbmNyZW1lbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZ3JpZD90aGlzLl9jb21wdXRlVmlkeCh0KSV0aGlzLl9pdGVtc1BlclJvdyE9dGhpcy5faXRlbXNQZXJSb3ctMT8wOnRoaXMuX3Jvd0hlaWdodDp0aGlzLl9waHlzaWNhbFNpemVzW3RdfSxfc2hvdWxkUmVuZGVyTmV4dFJvdzpmdW5jdGlvbih0KXtyZXR1cm4gdCV0aGlzLl9pdGVtc1BlclJvdz09dGhpcy5faXRlbXNQZXJSb3ctMX0sX2FkanVzdFNjcm9sbFBvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9MD09PXRoaXMuX3ZpcnR1YWxTdGFydD90aGlzLl9waHlzaWNhbFRvcDpNYXRoLm1pbih0aGlzLl9zY3JvbGxQb3NpdGlvbit0aGlzLl9waHlzaWNhbFRvcCwwKTtpZigwIT09dCl7dGhpcy5fcGh5c2ljYWxUb3A9dGhpcy5fcGh5c2ljYWxUb3AtdDt2YXIgZT10aGlzLl9zY3JvbGxQb3NpdGlvbjshQm8mJmU+MCYmdGhpcy5fcmVzZXRTY3JvbGxQb3NpdGlvbihlLXQpfX0sX3Jlc2V0U2Nyb2xsUG9zaXRpb246ZnVuY3Rpb24odCl7dGhpcy5zY3JvbGxUYXJnZXQmJnQ+PTAmJih0aGlzLl9zY3JvbGxUb3A9dCx0aGlzLl9zY3JvbGxQb3NpdGlvbj10aGlzLl9zY3JvbGxUb3ApfSxfdXBkYXRlU2Nyb2xsZXJTaXplOmZ1bmN0aW9uKHQpe3RoaXMuX2VzdFNjcm9sbEhlaWdodD10aGlzLmdyaWQ/dGhpcy5fdmlydHVhbFJvd0NvdW50KnRoaXMuX3Jvd0hlaWdodDp0aGlzLl9waHlzaWNhbEJvdHRvbStNYXRoLm1heCh0aGlzLl92aXJ0dWFsQ291bnQtdGhpcy5fcGh5c2ljYWxDb3VudC10aGlzLl92aXJ0dWFsU3RhcnQsMCkqdGhpcy5fcGh5c2ljYWxBdmVyYWdlLCgodD0odD0odD10fHwwPT09dGhpcy5fc2Nyb2xsSGVpZ2h0KXx8dGhpcy5fc2Nyb2xsUG9zaXRpb24+PXRoaXMuX2VzdFNjcm9sbEhlaWdodC10aGlzLl9waHlzaWNhbFNpemUpfHx0aGlzLmdyaWQmJnRoaXMuJC5pdGVtcy5zdHlsZS5oZWlnaHQ8dGhpcy5fZXN0U2Nyb2xsSGVpZ2h0KXx8TWF0aC5hYnModGhpcy5fZXN0U2Nyb2xsSGVpZ2h0LXRoaXMuX3Njcm9sbEhlaWdodCk+PXRoaXMuX3ZpZXdwb3J0SGVpZ2h0KSYmKHRoaXMuJC5pdGVtcy5zdHlsZS5oZWlnaHQ9dGhpcy5fZXN0U2Nyb2xsSGVpZ2h0KyJweCIsdGhpcy5fc2Nyb2xsSGVpZ2h0PXRoaXMuX2VzdFNjcm9sbEhlaWdodCl9LHNjcm9sbFRvSXRlbTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zY3JvbGxUb0luZGV4KHRoaXMuaXRlbXMuaW5kZXhPZih0KSl9LHNjcm9sbFRvSW5kZXg6ZnVuY3Rpb24odCl7aWYoISgibnVtYmVyIiE9dHlwZW9mIHR8fHQ8MHx8dD50aGlzLml0ZW1zLmxlbmd0aC0xKSYmKHppKCksMCE9PXRoaXMuX3BoeXNpY2FsQ291bnQpKXt0PXRoaXMuX2NsYW1wKHQsMCx0aGlzLl92aXJ0dWFsQ291bnQtMSksKCF0aGlzLl9pc0luZGV4UmVuZGVyZWQodCl8fHQ+PXRoaXMuX21heFZpcnR1YWxTdGFydCkmJih0aGlzLl92aXJ0dWFsU3RhcnQ9dGhpcy5ncmlkP3QtMip0aGlzLl9pdGVtc1BlclJvdzp0LTEpLHRoaXMuX21hbmFnZUZvY3VzKCksdGhpcy5fYXNzaWduTW9kZWxzKCksdGhpcy5fdXBkYXRlTWV0cmljcygpLHRoaXMuX3BoeXNpY2FsVG9wPU1hdGguZmxvb3IodGhpcy5fdmlydHVhbFN0YXJ0L3RoaXMuX2l0ZW1zUGVyUm93KSp0aGlzLl9waHlzaWNhbEF2ZXJhZ2U7Zm9yKHZhciBlPXRoaXMuX3BoeXNpY2FsU3RhcnQsbj10aGlzLl92aXJ0dWFsU3RhcnQsaT0wLHI9dGhpcy5faGlkZGVuQ29udGVudFNpemU7bjx0JiZpPD1yOylpKz10aGlzLl9nZXRQaHlzaWNhbFNpemVJbmNyZW1lbnQoZSksZT0oZSsxKSV0aGlzLl9waHlzaWNhbENvdW50LG4rKzt0aGlzLl91cGRhdGVTY3JvbGxlclNpemUoITApLHRoaXMuX3Bvc2l0aW9uSXRlbXMoKSx0aGlzLl9yZXNldFNjcm9sbFBvc2l0aW9uKHRoaXMuX3BoeXNpY2FsVG9wK3RoaXMuX3Njcm9sbE9mZnNldCtpKSx0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZCgwKSx0aGlzLl9maXJzdFZpc2libGVJbmRleFZhbD1udWxsLHRoaXMuX2xhc3RWaXNpYmxlSW5kZXhWYWw9bnVsbH19LF9yZXNldEF2ZXJhZ2U6ZnVuY3Rpb24oKXt0aGlzLl9waHlzaWNhbEF2ZXJhZ2U9MCx0aGlzLl9waHlzaWNhbEF2ZXJhZ2VDb3VudD0wfSxfcmVzaXplSGFuZGxlcjpmdW5jdGlvbigpe3RoaXMuX2RlYm91bmNlKCJfcmVuZGVyIiwoZnVuY3Rpb24oKXt0aGlzLl9maXJzdFZpc2libGVJbmRleFZhbD1udWxsLHRoaXMuX2xhc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9pc1Zpc2libGU/KHRoaXMudXBkYXRlVmlld3BvcnRCb3VuZGFyaWVzKCksdGhpcy50b2dnbGVTY3JvbGxMaXN0ZW5lcighMCksdGhpcy5fcmVzZXRBdmVyYWdlKCksdGhpcy5fcmVuZGVyKCkpOnRoaXMudG9nZ2xlU2Nyb2xsTGlzdGVuZXIoITEpfSksX3QpfSxzZWxlY3RJdGVtOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnNlbGVjdEluZGV4KHRoaXMuaXRlbXMuaW5kZXhPZih0KSl9LHNlbGVjdEluZGV4OmZ1bmN0aW9uKHQpe2lmKCEodDwwfHx0Pj10aGlzLl92aXJ0dWFsQ291bnQpKXtpZighdGhpcy5tdWx0aVNlbGVjdGlvbiYmdGhpcy5zZWxlY3RlZEl0ZW0mJnRoaXMuY2xlYXJTZWxlY3Rpb24oKSx0aGlzLl9pc0luZGV4UmVuZGVyZWQodCkpe3ZhciBlPXRoaXMubW9kZWxGb3JFbGVtZW50KHRoaXMuX3BoeXNpY2FsSXRlbXNbdGhpcy5fZ2V0UGh5c2ljYWxJbmRleCh0KV0pO2UmJihlW3RoaXMuc2VsZWN0ZWRBc109ITApLHRoaXMudXBkYXRlU2l6ZUZvckluZGV4KHQpfXRoaXMuJC5zZWxlY3Rvci5zZWxlY3RJbmRleCh0KX19LGRlc2VsZWN0SXRlbTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kZXNlbGVjdEluZGV4KHRoaXMuaXRlbXMuaW5kZXhPZih0KSl9LGRlc2VsZWN0SW5kZXg6ZnVuY3Rpb24odCl7dDwwfHx0Pj10aGlzLl92aXJ0dWFsQ291bnR8fCh0aGlzLl9pc0luZGV4UmVuZGVyZWQodCkmJih0aGlzLm1vZGVsRm9yRWxlbWVudCh0aGlzLl9waHlzaWNhbEl0ZW1zW3RoaXMuX2dldFBoeXNpY2FsSW5kZXgodCldKVt0aGlzLnNlbGVjdGVkQXNdPSExLHRoaXMudXBkYXRlU2l6ZUZvckluZGV4KHQpKSx0aGlzLiQuc2VsZWN0b3IuZGVzZWxlY3RJbmRleCh0KSl9LHRvZ2dsZVNlbGVjdGlvbkZvckl0ZW06ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudG9nZ2xlU2VsZWN0aW9uRm9ySW5kZXgodGhpcy5pdGVtcy5pbmRleE9mKHQpKX0sdG9nZ2xlU2VsZWN0aW9uRm9ySW5kZXg6ZnVuY3Rpb24odCl7KHRoaXMuJC5zZWxlY3Rvci5pc0luZGV4U2VsZWN0ZWQ/dGhpcy4kLnNlbGVjdG9yLmlzSW5kZXhTZWxlY3RlZCh0KTp0aGlzLiQuc2VsZWN0b3IuaXNTZWxlY3RlZCh0aGlzLml0ZW1zW3RdKSk/dGhpcy5kZXNlbGVjdEluZGV4KHQpOnRoaXMuc2VsZWN0SW5kZXgodCl9LGNsZWFyU2VsZWN0aW9uOmZ1bmN0aW9uKCl7dGhpcy5faXRlcmF0ZUl0ZW1zKChmdW5jdGlvbih0LGUpe3RoaXMubW9kZWxGb3JFbGVtZW50KHRoaXMuX3BoeXNpY2FsSXRlbXNbdF0pW3RoaXMuc2VsZWN0ZWRBc109ITF9KSksdGhpcy4kLnNlbGVjdG9yLmNsZWFyU2VsZWN0aW9uKCl9LF9zZWxlY3Rpb25FbmFibGVkQ2hhbmdlZDpmdW5jdGlvbih0KXsodD90aGlzLmxpc3Rlbjp0aGlzLnVubGlzdGVuKS5jYWxsKHRoaXMsdGhpcywidGFwIiwiX3NlbGVjdGlvbkhhbmRsZXIiKX0sX3NlbGVjdGlvbkhhbmRsZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5tb2RlbEZvckVsZW1lbnQodC50YXJnZXQpO2lmKGUpe3ZhciBuLGkscj1xaSh0KS5wYXRoWzBdLG89dGhpcy5fZ2V0QWN0aXZlRWxlbWVudCgpLGE9dGhpcy5fcGh5c2ljYWxJdGVtc1t0aGlzLl9nZXRQaHlzaWNhbEluZGV4KGVbdGhpcy5pbmRleEFzXSldOyJpbnB1dCIhPT1yLmxvY2FsTmFtZSYmImJ1dHRvbiIhPT1yLmxvY2FsTmFtZSYmInNlbGVjdCIhPT1yLmxvY2FsTmFtZSYmKG49ZS50YWJJbmRleCxlLnRhYkluZGV4PUZvLGk9bz9vLnRhYkluZGV4Oi0xLGUudGFiSW5kZXg9bixvJiZhIT09byYmYS5jb250YWlucyhvKSYmaSE9PUZvfHx0aGlzLnRvZ2dsZVNlbGVjdGlvbkZvckl0ZW0oZVt0aGlzLmFzXSkpfX0sX211bHRpU2VsZWN0aW9uQ2hhbmdlZDpmdW5jdGlvbih0KXt0aGlzLmNsZWFyU2VsZWN0aW9uKCksdGhpcy4kLnNlbGVjdG9yLm11bHRpPXR9LHVwZGF0ZVNpemVGb3JJdGVtOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnVwZGF0ZVNpemVGb3JJbmRleCh0aGlzLml0ZW1zLmluZGV4T2YodCkpfSx1cGRhdGVTaXplRm9ySW5kZXg6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2lzSW5kZXhSZW5kZXJlZCh0KT8odGhpcy5fdXBkYXRlTWV0cmljcyhbdGhpcy5fZ2V0UGh5c2ljYWxJbmRleCh0KV0pLHRoaXMuX3Bvc2l0aW9uSXRlbXMoKSxudWxsKTpudWxsfSxfbWFuYWdlRm9jdXM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4O3Q+PTAmJnQ8dGhpcy5fdmlydHVhbENvdW50P3RoaXMuX2lzSW5kZXhSZW5kZXJlZCh0KT90aGlzLl9yZXN0b3JlRm9jdXNlZEl0ZW0oKTp0aGlzLl9jcmVhdGVGb2N1c0JhY2tmaWxsSXRlbSgpOnRoaXMuX3ZpcnR1YWxDb3VudD4wJiZ0aGlzLl9waHlzaWNhbENvdW50PjAmJih0aGlzLl9mb2N1c2VkUGh5c2ljYWxJbmRleD10aGlzLl9waHlzaWNhbFN0YXJ0LHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg9dGhpcy5fdmlydHVhbFN0YXJ0LHRoaXMuX2ZvY3VzZWRJdGVtPXRoaXMuX3BoeXNpY2FsSXRlbXNbdGhpcy5fcGh5c2ljYWxTdGFydF0pfSxfY29udmVydEluZGV4VG9Db21wbGV0ZVJvdzpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5faXRlbXNQZXJSb3c9dGhpcy5faXRlbXNQZXJSb3d8fDEsdGhpcy5ncmlkP01hdGguY2VpbCh0L3RoaXMuX2l0ZW1zUGVyUm93KSp0aGlzLl9pdGVtc1BlclJvdzp0fSxfaXNJbmRleFJlbmRlcmVkOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj10aGlzLl92aXJ0dWFsU3RhcnQmJnQ8PXRoaXMuX3ZpcnR1YWxFbmR9LF9pc0luZGV4VmlzaWJsZTpmdW5jdGlvbih0KXtyZXR1cm4gdD49dGhpcy5maXJzdFZpc2libGVJbmRleCYmdDw9dGhpcy5sYXN0VmlzaWJsZUluZGV4fSxfZ2V0UGh5c2ljYWxJbmRleDpmdW5jdGlvbih0KXtyZXR1cm4odGhpcy5fcGh5c2ljYWxTdGFydCsodC10aGlzLl92aXJ0dWFsU3RhcnQpKSV0aGlzLl9waHlzaWNhbENvdW50fSxmb2N1c0l0ZW06ZnVuY3Rpb24odCl7dGhpcy5fZm9jdXNQaHlzaWNhbEl0ZW0odCl9LF9mb2N1c1BoeXNpY2FsSXRlbTpmdW5jdGlvbih0KXtpZighKHQ8MHx8dD49dGhpcy5fdmlydHVhbENvdW50KSl7dGhpcy5fcmVzdG9yZUZvY3VzZWRJdGVtKCksdGhpcy5faXNJbmRleFJlbmRlcmVkKHQpfHx0aGlzLnNjcm9sbFRvSW5kZXgodCk7dmFyIGUsbj10aGlzLl9waHlzaWNhbEl0ZW1zW3RoaXMuX2dldFBoeXNpY2FsSW5kZXgodCldLGk9dGhpcy5tb2RlbEZvckVsZW1lbnQobik7aS50YWJJbmRleD1GbyxuLnRhYkluZGV4PT09Rm8mJihlPW4pLGV8fChlPXFpKG4pLnF1ZXJ5U2VsZWN0b3IoJ1t0YWJpbmRleD0iLTEwMCJdJykpLGkudGFiSW5kZXg9MCx0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4PXQsZSYmZS5mb2N1cygpfX0sX3JlbW92ZUZvY3VzZWRJdGVtOmZ1bmN0aW9uKCl7dGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0mJnRoaXMuX2l0ZW1zUGFyZW50LnJlbW92ZUNoaWxkKHRoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtKSx0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbT1udWxsLHRoaXMuX2ZvY3VzQmFja2ZpbGxJdGVtPW51bGwsdGhpcy5fZm9jdXNlZEl0ZW09bnVsbCx0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4PS0xLHRoaXMuX2ZvY3VzZWRQaHlzaWNhbEluZGV4PS0xfSxfY3JlYXRlRm9jdXNCYWNrZmlsbEl0ZW06ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9mb2N1c2VkUGh5c2ljYWxJbmRleDtpZighKHRoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtfHx0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4PDApKXtpZighdGhpcy5fZm9jdXNCYWNrZmlsbEl0ZW0pe3ZhciBlPXRoaXMuc3RhbXAobnVsbCk7dGhpcy5fZm9jdXNCYWNrZmlsbEl0ZW09ZS5yb290LnF1ZXJ5U2VsZWN0b3IoIioiKSx0aGlzLl9pdGVtc1BhcmVudC5hcHBlbmRDaGlsZChlLnJvb3QpfXRoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtPXRoaXMuX3BoeXNpY2FsSXRlbXNbdF0sdGhpcy5tb2RlbEZvckVsZW1lbnQodGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0pLnRhYkluZGV4PTAsdGhpcy5fcGh5c2ljYWxJdGVtc1t0XT10aGlzLl9mb2N1c0JhY2tmaWxsSXRlbSx0aGlzLl9mb2N1c2VkUGh5c2ljYWxJbmRleD10LHRoaXMudHJhbnNsYXRlM2QoMCxIbywwLHRoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtKX19LF9yZXN0b3JlRm9jdXNlZEl0ZW06ZnVuY3Rpb24oKXtpZih0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbSYmISh0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4PDApKXt0aGlzLl9hc3NpZ25Nb2RlbHMoKTt2YXIgdD10aGlzLl9mb2N1c2VkUGh5c2ljYWxJbmRleD10aGlzLl9nZXRQaHlzaWNhbEluZGV4KHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXgpLGU9dGhpcy5fcGh5c2ljYWxJdGVtc1t0XTtpZihlKXt2YXIgbj10aGlzLm1vZGVsRm9yRWxlbWVudChlKSxpPXRoaXMubW9kZWxGb3JFbGVtZW50KHRoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtKTtuW3RoaXMuYXNdPT09aVt0aGlzLmFzXT8odGhpcy5fZm9jdXNCYWNrZmlsbEl0ZW09ZSxuLnRhYkluZGV4PS0xLHRoaXMuX3BoeXNpY2FsSXRlbXNbdF09dGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0sdGhpcy50cmFuc2xhdGUzZCgwLEhvLDAsdGhpcy5fZm9jdXNCYWNrZmlsbEl0ZW0pKToodGhpcy5fcmVtb3ZlRm9jdXNlZEl0ZW0oKSx0aGlzLl9mb2N1c0JhY2tmaWxsSXRlbT1udWxsKSx0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbT1udWxsfX19LF9kaWRGb2N1czpmdW5jdGlvbih0KXt2YXIgZT10aGlzLm1vZGVsRm9yRWxlbWVudCh0LnRhcmdldCksbj10aGlzLm1vZGVsRm9yRWxlbWVudCh0aGlzLl9mb2N1c2VkSXRlbSksaT1udWxsIT09dGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0scj10aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4O2UmJihuPT09ZT90aGlzLl9pc0luZGV4VmlzaWJsZShyKXx8dGhpcy5zY3JvbGxUb0luZGV4KHIpOih0aGlzLl9yZXN0b3JlRm9jdXNlZEl0ZW0oKSxuJiYobi50YWJJbmRleD0tMSksZS50YWJJbmRleD0wLHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg9cj1lW3RoaXMuaW5kZXhBc10sdGhpcy5fZm9jdXNlZFBoeXNpY2FsSW5kZXg9dGhpcy5fZ2V0UGh5c2ljYWxJbmRleChyKSx0aGlzLl9mb2N1c2VkSXRlbT10aGlzLl9waHlzaWNhbEl0ZW1zW3RoaXMuX2ZvY3VzZWRQaHlzaWNhbEluZGV4XSxpJiYhdGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0mJnRoaXMuX3VwZGF0ZSgpKSl9LF9rZXlkb3duSGFuZGxlcjpmdW5jdGlvbih0KXtzd2l0Y2godC5rZXlDb2RlKXtjYXNlIDQwOnRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg8dGhpcy5fdmlydHVhbENvdW50LTEmJnQucHJldmVudERlZmF1bHQoKSx0aGlzLl9mb2N1c1BoeXNpY2FsSXRlbSh0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4Kyh0aGlzLmdyaWQ/dGhpcy5faXRlbXNQZXJSb3c6MSkpO2JyZWFrO2Nhc2UgMzk6dGhpcy5ncmlkJiZ0aGlzLl9mb2N1c1BoeXNpY2FsSXRlbSh0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4Kyh0aGlzLl9pc1JUTD8tMToxKSk7YnJlYWs7Y2FzZSAzODp0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4PjAmJnQucHJldmVudERlZmF1bHQoKSx0aGlzLl9mb2N1c1BoeXNpY2FsSXRlbSh0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4LSh0aGlzLmdyaWQ/dGhpcy5faXRlbXNQZXJSb3c6MSkpO2JyZWFrO2Nhc2UgMzc6dGhpcy5ncmlkJiZ0aGlzLl9mb2N1c1BoeXNpY2FsSXRlbSh0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4Kyh0aGlzLl9pc1JUTD8xOi0xKSk7YnJlYWs7Y2FzZSAxMzp0aGlzLl9mb2N1c1BoeXNpY2FsSXRlbSh0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4KSx0aGlzLnNlbGVjdGlvbkVuYWJsZWQmJnRoaXMuX3NlbGVjdGlvbkhhbmRsZXIodCl9fSxfY2xhbXA6ZnVuY3Rpb24odCxlLG4pe3JldHVybiBNYXRoLm1pbihuLE1hdGgubWF4KGUsdCkpfSxfZGVib3VuY2U6ZnVuY3Rpb24odCxlLG4pe3RoaXMuX2RlYm91bmNlcnM9dGhpcy5fZGVib3VuY2Vyc3x8e30sdGhpcy5fZGVib3VuY2Vyc1t0XT1Fbi5kZWJvdW5jZSh0aGlzLl9kZWJvdW5jZXJzW3RdLG4sZS5iaW5kKHRoaXMpKSxDbih0aGlzLl9kZWJvdW5jZXJzW3RdKX0sX2ZvcndhcmRQcm9wZXJ0eTpmdW5jdGlvbih0LGUsbil7dC5fc2V0UGVuZGluZ1Byb3BlcnR5KGUsbil9LF9mb3J3YXJkSG9zdFByb3BWMjpmdW5jdGlvbih0LGUpeyh0aGlzLl9waHlzaWNhbEl0ZW1zfHxbXSkuY29uY2F0KFt0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbSx0aGlzLl9mb2N1c0JhY2tmaWxsSXRlbV0pLmZvckVhY2goKGZ1bmN0aW9uKG4pe24mJnRoaXMubW9kZWxGb3JFbGVtZW50KG4pLmZvcndhcmRIb3N0UHJvcCh0LGUpfSksdGhpcyl9LF9ub3RpZnlJbnN0YW5jZVByb3BWMjpmdW5jdGlvbih0LGUsbil7aWYoUSh0aGlzLmFzLGUpKXt2YXIgaT10W3RoaXMuaW5kZXhBc107ZT09dGhpcy5hcyYmKHRoaXMuaXRlbXNbaV09biksdGhpcy5ub3RpZnlQYXRoKEoodGhpcy5hcywiaXRlbXMuIitpLGUpLG4pfX0sX2dldFN0YW1wZWRDaGlsZHJlbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9waHlzaWNhbEl0ZW1zfSxfZm9yd2FyZEluc3RhbmNlUGF0aDpmdW5jdGlvbih0LGUsbil7MD09PWUuaW5kZXhPZih0aGlzLmFzKyIuIikmJnRoaXMubm90aWZ5UGF0aCgiaXRlbXMuIit0Ll9fa2V5X18rIi4iK2Uuc2xpY2UodGhpcy5hcy5sZW5ndGgrMSksbil9LF9mb3J3YXJkUGFyZW50UGF0aDpmdW5jdGlvbih0LGUpeyh0aGlzLl9waHlzaWNhbEl0ZW1zfHxbXSkuY29uY2F0KFt0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbSx0aGlzLl9mb2N1c0JhY2tmaWxsSXRlbV0pLmZvckVhY2goKGZ1bmN0aW9uKG4pe24mJnRoaXMubW9kZWxGb3JFbGVtZW50KG4pLm5vdGlmeVBhdGgodCxlKX0pLHRoaXMpfSxfZm9yd2FyZFBhcmVudFByb3A6ZnVuY3Rpb24odCxlKXsodGhpcy5fcGh5c2ljYWxJdGVtc3x8W10pLmNvbmNhdChbdGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0sdGhpcy5fZm9jdXNCYWNrZmlsbEl0ZW1dKS5mb3JFYWNoKChmdW5jdGlvbihuKXtuJiYodGhpcy5tb2RlbEZvckVsZW1lbnQobilbdF09ZSl9KSx0aGlzKX0sX2dldEFjdGl2ZUVsZW1lbnQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9pdGVtc1BhcmVudC5ub2RlLmRvbUhvc3Q7cmV0dXJuIHFpKHQ/dC5yb290OmRvY3VtZW50KS5hY3RpdmVFbGVtZW50fX0pOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KY2xhc3MgVm97Y29uc3RydWN0b3IodCl7dGhpcy5zZWxlY3Rpb249W10sdGhpcy5zZWxlY3RDYWxsYmFjaz10fWdldCgpe3JldHVybiB0aGlzLm11bHRpP3RoaXMuc2VsZWN0aW9uLnNsaWNlKCk6dGhpcy5zZWxlY3Rpb25bMF19Y2xlYXIodCl7dGhpcy5zZWxlY3Rpb24uc2xpY2UoKS5mb3JFYWNoKChmdW5jdGlvbihlKXsoIXR8fHQuaW5kZXhPZihlKTwwKSYmdGhpcy5zZXRJdGVtU2VsZWN0ZWQoZSwhMSl9KSx0aGlzKX1pc1NlbGVjdGVkKHQpe3JldHVybiB0aGlzLnNlbGVjdGlvbi5pbmRleE9mKHQpPj0wfXNldEl0ZW1TZWxlY3RlZCh0LGUpe2lmKG51bGwhPXQmJmUhPT10aGlzLmlzU2VsZWN0ZWQodCkpe2lmKGUpdGhpcy5zZWxlY3Rpb24ucHVzaCh0KTtlbHNle3ZhciBuPXRoaXMuc2VsZWN0aW9uLmluZGV4T2YodCk7bj49MCYmdGhpcy5zZWxlY3Rpb24uc3BsaWNlKG4sMSl9dGhpcy5zZWxlY3RDYWxsYmFjayYmdGhpcy5zZWxlY3RDYWxsYmFjayh0LGUpfX1zZWxlY3QodCl7dGhpcy5tdWx0aT90aGlzLnRvZ2dsZSh0KTp0aGlzLmdldCgpIT09dCYmKHRoaXMuc2V0SXRlbVNlbGVjdGVkKHRoaXMuZ2V0KCksITEpLHRoaXMuc2V0SXRlbVNlbGVjdGVkKHQsITApKX10b2dnbGUodCl7dGhpcy5zZXRJdGVtU2VsZWN0ZWQodCwhdGhpcy5pc1NlbGVjdGVkKHQpKX19Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqL2NvbnN0IFVvPXtwcm9wZXJ0aWVzOnthdHRyRm9yU2VsZWN0ZWQ6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9LHNlbGVjdGVkOnt0eXBlOlN0cmluZyxub3RpZnk6ITB9LHNlbGVjdGVkSXRlbTp7dHlwZTpPYmplY3QscmVhZE9ubHk6ITAsbm90aWZ5OiEwfSxhY3RpdmF0ZUV2ZW50Ont0eXBlOlN0cmluZyx2YWx1ZToidGFwIixvYnNlcnZlcjoiX2FjdGl2YXRlRXZlbnRDaGFuZ2VkIn0sc2VsZWN0YWJsZTpTdHJpbmcsc2VsZWN0ZWRDbGFzczp7dHlwZTpTdHJpbmcsdmFsdWU6Imlyb24tc2VsZWN0ZWQifSxzZWxlY3RlZEF0dHJpYnV0ZTp7dHlwZTpTdHJpbmcsdmFsdWU6bnVsbH0sZmFsbGJhY2tTZWxlY3Rpb246e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9LGl0ZW1zOnt0eXBlOkFycmF5LHJlYWRPbmx5OiEwLG5vdGlmeTohMCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX0sX2V4Y2x1ZGVkTG9jYWxOYW1lczp7dHlwZTpPYmplY3QsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm57dGVtcGxhdGU6MSwiZG9tLWJpbmQiOjEsImRvbS1pZiI6MSwiZG9tLXJlcGVhdCI6MX19fX0sb2JzZXJ2ZXJzOlsiX3VwZGF0ZUF0dHJGb3JTZWxlY3RlZChhdHRyRm9yU2VsZWN0ZWQpIiwiX3VwZGF0ZVNlbGVjdGVkKHNlbGVjdGVkKSIsIl9jaGVja0ZhbGxiYWNrKGZhbGxiYWNrU2VsZWN0aW9uKSJdLGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLl9iaW5kRmlsdGVySXRlbT10aGlzLl9maWx0ZXJJdGVtLmJpbmQodGhpcyksdGhpcy5fc2VsZWN0aW9uPW5ldyBWbyh0aGlzLl9hcHBseVNlbGVjdGlvbi5iaW5kKHRoaXMpKX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9vYnNlcnZlcj10aGlzLl9vYnNlcnZlSXRlbXModGhpcyksdGhpcy5fYWRkTGlzdGVuZXIodGhpcy5hY3RpdmF0ZUV2ZW50KX0sZGV0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9vYnNlcnZlciYmcWkodGhpcykudW5vYnNlcnZlTm9kZXModGhpcy5fb2JzZXJ2ZXIpLHRoaXMuX3JlbW92ZUxpc3RlbmVyKHRoaXMuYWN0aXZhdGVFdmVudCl9LGluZGV4T2Y6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaXRlbXM/dGhpcy5pdGVtcy5pbmRleE9mKHQpOi0xfSxzZWxlY3Q6ZnVuY3Rpb24odCl7dGhpcy5zZWxlY3RlZD10fSxzZWxlY3RQcmV2aW91czpmdW5jdGlvbigpe3ZhciB0PXRoaXMuaXRlbXMubGVuZ3RoLGU9dC0xO3ZvaWQgMCE9PXRoaXMuc2VsZWN0ZWQmJihlPShOdW1iZXIodGhpcy5fdmFsdWVUb0luZGV4KHRoaXMuc2VsZWN0ZWQpKS0xK3QpJXQpLHRoaXMuc2VsZWN0ZWQ9dGhpcy5faW5kZXhUb1ZhbHVlKGUpfSxzZWxlY3ROZXh0OmZ1bmN0aW9uKCl7dmFyIHQ9MDt2b2lkIDAhPT10aGlzLnNlbGVjdGVkJiYodD0oTnVtYmVyKHRoaXMuX3ZhbHVlVG9JbmRleCh0aGlzLnNlbGVjdGVkKSkrMSkldGhpcy5pdGVtcy5sZW5ndGgpLHRoaXMuc2VsZWN0ZWQ9dGhpcy5faW5kZXhUb1ZhbHVlKHQpfSxzZWxlY3RJbmRleDpmdW5jdGlvbih0KXt0aGlzLnNlbGVjdCh0aGlzLl9pbmRleFRvVmFsdWUodCkpfSxmb3JjZVN5bmNocm9ub3VzSXRlbVVwZGF0ZTpmdW5jdGlvbigpe3RoaXMuX29ic2VydmVyJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5fb2JzZXJ2ZXIuZmx1c2g/dGhpcy5fb2JzZXJ2ZXIuZmx1c2goKTp0aGlzLl91cGRhdGVJdGVtcygpfSxnZXQgX3Nob3VsZFVwZGF0ZVNlbGVjdGlvbigpe3JldHVybiBudWxsIT10aGlzLnNlbGVjdGVkfSxfY2hlY2tGYWxsYmFjazpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVNlbGVjdGVkKCl9LF9hZGRMaXN0ZW5lcjpmdW5jdGlvbih0KXt0aGlzLmxpc3Rlbih0aGlzLHQsIl9hY3RpdmF0ZUhhbmRsZXIiKX0sX3JlbW92ZUxpc3RlbmVyOmZ1bmN0aW9uKHQpe3RoaXMudW5saXN0ZW4odGhpcyx0LCJfYWN0aXZhdGVIYW5kbGVyIil9LF9hY3RpdmF0ZUV2ZW50Q2hhbmdlZDpmdW5jdGlvbih0LGUpe3RoaXMuX3JlbW92ZUxpc3RlbmVyKGUpLHRoaXMuX2FkZExpc3RlbmVyKHQpfSxfdXBkYXRlSXRlbXM6ZnVuY3Rpb24oKXt2YXIgdD1xaSh0aGlzKS5xdWVyeURpc3RyaWJ1dGVkRWxlbWVudHModGhpcy5zZWxlY3RhYmxlfHwiKiIpO3Q9QXJyYXkucHJvdG90eXBlLmZpbHRlci5jYWxsKHQsdGhpcy5fYmluZEZpbHRlckl0ZW0pLHRoaXMuX3NldEl0ZW1zKHQpfSxfdXBkYXRlQXR0ckZvclNlbGVjdGVkOmZ1bmN0aW9uKCl7dGhpcy5zZWxlY3RlZEl0ZW0mJih0aGlzLnNlbGVjdGVkPXRoaXMuX3ZhbHVlRm9ySXRlbSh0aGlzLnNlbGVjdGVkSXRlbSkpfSxfdXBkYXRlU2VsZWN0ZWQ6ZnVuY3Rpb24oKXt0aGlzLl9zZWxlY3RTZWxlY3RlZCh0aGlzLnNlbGVjdGVkKX0sX3NlbGVjdFNlbGVjdGVkOmZ1bmN0aW9uKHQpe2lmKHRoaXMuaXRlbXMpe3ZhciBlPXRoaXMuX3ZhbHVlVG9JdGVtKHRoaXMuc2VsZWN0ZWQpO2U/dGhpcy5fc2VsZWN0aW9uLnNlbGVjdChlKTp0aGlzLl9zZWxlY3Rpb24uY2xlYXIoKSx0aGlzLmZhbGxiYWNrU2VsZWN0aW9uJiZ0aGlzLml0ZW1zLmxlbmd0aCYmdm9pZCAwPT09dGhpcy5fc2VsZWN0aW9uLmdldCgpJiYodGhpcy5zZWxlY3RlZD10aGlzLmZhbGxiYWNrU2VsZWN0aW9uKX19LF9maWx0ZXJJdGVtOmZ1bmN0aW9uKHQpe3JldHVybiF0aGlzLl9leGNsdWRlZExvY2FsTmFtZXNbdC5sb2NhbE5hbWVdfSxfdmFsdWVUb0l0ZW06ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/bnVsbDp0aGlzLml0ZW1zW3RoaXMuX3ZhbHVlVG9JbmRleCh0KV19LF92YWx1ZVRvSW5kZXg6ZnVuY3Rpb24odCl7aWYoIXRoaXMuYXR0ckZvclNlbGVjdGVkKXJldHVybiBOdW1iZXIodCk7Zm9yKHZhciBlLG49MDtlPXRoaXMuaXRlbXNbbl07bisrKWlmKHRoaXMuX3ZhbHVlRm9ySXRlbShlKT09dClyZXR1cm4gbn0sX2luZGV4VG9WYWx1ZTpmdW5jdGlvbih0KXtpZighdGhpcy5hdHRyRm9yU2VsZWN0ZWQpcmV0dXJuIHQ7dmFyIGU9dGhpcy5pdGVtc1t0XTtyZXR1cm4gZT90aGlzLl92YWx1ZUZvckl0ZW0oZSk6dm9pZCAwfSxfdmFsdWVGb3JJdGVtOmZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiBudWxsO2lmKCF0aGlzLmF0dHJGb3JTZWxlY3RlZCl7dmFyIGU9dGhpcy5pbmRleE9mKHQpO3JldHVybi0xPT09ZT9udWxsOmV9dmFyIG49dFtzdCh0aGlzLmF0dHJGb3JTZWxlY3RlZCldO3JldHVybiBudWxsIT1uP246dC5nZXRBdHRyaWJ1dGUodGhpcy5hdHRyRm9yU2VsZWN0ZWQpfSxfYXBwbHlTZWxlY3Rpb246ZnVuY3Rpb24odCxlKXt0aGlzLnNlbGVjdGVkQ2xhc3MmJnRoaXMudG9nZ2xlQ2xhc3ModGhpcy5zZWxlY3RlZENsYXNzLGUsdCksdGhpcy5zZWxlY3RlZEF0dHJpYnV0ZSYmdGhpcy50b2dnbGVBdHRyaWJ1dGUodGhpcy5zZWxlY3RlZEF0dHJpYnV0ZSxlLHQpLHRoaXMuX3NlbGVjdGlvbkNoYW5nZSgpLHRoaXMuZmlyZSgiaXJvbi0iKyhlPyJzZWxlY3QiOiJkZXNlbGVjdCIpLHtpdGVtOnR9KX0sX3NlbGVjdGlvbkNoYW5nZTpmdW5jdGlvbigpe3RoaXMuX3NldFNlbGVjdGVkSXRlbSh0aGlzLl9zZWxlY3Rpb24uZ2V0KCkpfSxfb2JzZXJ2ZUl0ZW1zOmZ1bmN0aW9uKHQpe3JldHVybiBxaSh0KS5vYnNlcnZlTm9kZXMoKGZ1bmN0aW9uKHQpe3RoaXMuX3VwZGF0ZUl0ZW1zKCksdGhpcy5fdXBkYXRlU2VsZWN0ZWQoKSx0aGlzLmZpcmUoImlyb24taXRlbXMtY2hhbmdlZCIsdCx7YnViYmxlczohMSxjYW5jZWxhYmxlOiExfSl9KSl9LF9hY3RpdmF0ZUhhbmRsZXI6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQudGFyZ2V0LG49dGhpcy5pdGVtcztlJiZlIT10aGlzOyl7dmFyIGk9bi5pbmRleE9mKGUpO2lmKGk+PTApe3ZhciByPXRoaXMuX2luZGV4VG9WYWx1ZShpKTtyZXR1cm4gdm9pZCB0aGlzLl9pdGVtQWN0aXZhdGUocixlKX1lPWUucGFyZW50Tm9kZX19LF9pdGVtQWN0aXZhdGU6ZnVuY3Rpb24odCxlKXt0aGlzLmZpcmUoImlyb24tYWN0aXZhdGUiLHtzZWxlY3RlZDp0LGl0ZW06ZX0se2NhbmNlbGFibGU6ITB9KS5kZWZhdWx0UHJldmVudGVkfHx0aGlzLnNlbGVjdCh0KX19OwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi9Jcih7X3RlbXBsYXRlOl9lYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIDpob3N0ID4gOjpzbG90dGVkKDpub3Qoc2xvdCk6bm90KC5pcm9uLXNlbGVjdGVkKSkgewogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8c2xvdD48L3Nsb3Q+CmAsaXM6Imlyb24tcGFnZXMiLGJlaGF2aW9yczpbbW8sVW9dLHByb3BlcnRpZXM6e2FjdGl2YXRlRXZlbnQ6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9fSxvYnNlcnZlcnM6WyJfc2VsZWN0ZWRQYWdlQ2hhbmdlZChzZWxlY3RlZCkiXSxfc2VsZWN0ZWRQYWdlQ2hhbmdlZDpmdW5jdGlvbih0LGUpe3RoaXMuYXN5bmModGhpcy5ub3RpZnlSZXNpemUpfX0pOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KY29uc3Qgam89X2VgCjxjdXN0b20tc3R5bGU+CiAgPHN0eWxlIGlzPSJjdXN0b20tc3R5bGUiPgogICAgaHRtbCB7CgogICAgICAtLXNoYWRvdy10cmFuc2l0aW9uOiB7CiAgICAgICAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjI4cyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpOwogICAgICB9OwoKICAgICAgLS1zaGFkb3ctbm9uZTogewogICAgICAgIGJveC1zaGFkb3c6IG5vbmU7CiAgICAgIH07CgogICAgICAvKiBmcm9tIGh0dHA6Ly9jb2RlcGVuLmlvL3NoeW5kbWFuL3Blbi9jNTM5NGRkZjJlOGIyYTVjOTE4NTkwNGI1NzQyMWNkYiAqLwoKICAgICAgLS1zaGFkb3ctZWxldmF0aW9uLTJkcDogewogICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDJweCAwIHJnYmEoMCwgMCwgMCwgMC4xNCksCiAgICAgICAgICAgICAgICAgICAgMCAxcHggNXB4IDAgcmdiYSgwLCAwLCAwLCAwLjEyKSwKICAgICAgICAgICAgICAgICAgICAwIDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMik7CiAgICAgIH07CgogICAgICAtLXNoYWRvdy1lbGV2YXRpb24tM2RwOiB7CiAgICAgICAgYm94LXNoYWRvdzogMCAzcHggNHB4IDAgcmdiYSgwLCAwLCAwLCAwLjE0KSwKICAgICAgICAgICAgICAgICAgICAwIDFweCA4cHggMCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgM3B4IDNweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC40KTsKICAgICAgfTsKCiAgICAgIC0tc2hhZG93LWVsZXZhdGlvbi00ZHA6IHsKICAgICAgICBib3gtc2hhZG93OiAwIDRweCA1cHggMCByZ2JhKDAsIDAsIDAsIDAuMTQpLAogICAgICAgICAgICAgICAgICAgIDAgMXB4IDEwcHggMCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC40KTsKICAgICAgfTsKCiAgICAgIC0tc2hhZG93LWVsZXZhdGlvbi02ZHA6IHsKICAgICAgICBib3gtc2hhZG93OiAwIDZweCAxMHB4IDAgcmdiYSgwLCAwLCAwLCAwLjE0KSwKICAgICAgICAgICAgICAgICAgICAwIDFweCAxOHB4IDAgcmdiYSgwLCAwLCAwLCAwLjEyKSwKICAgICAgICAgICAgICAgICAgICAwIDNweCA1cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuNCk7CiAgICAgIH07CgogICAgICAtLXNoYWRvdy1lbGV2YXRpb24tOGRwOiB7CiAgICAgICAgYm94LXNoYWRvdzogMCA4cHggMTBweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwKICAgICAgICAgICAgICAgICAgICAwIDNweCAxNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgNXB4IDVweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC40KTsKICAgICAgfTsKCiAgICAgIC0tc2hhZG93LWVsZXZhdGlvbi0xMmRwOiB7CiAgICAgICAgYm94LXNoYWRvdzogMCAxMnB4IDE2cHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksCiAgICAgICAgICAgICAgICAgICAgMCA0cHggMjJweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEyKSwKICAgICAgICAgICAgICAgICAgICAwIDZweCA3cHggLTRweCByZ2JhKDAsIDAsIDAsIDAuNCk7CiAgICAgIH07CgogICAgICAtLXNoYWRvdy1lbGV2YXRpb24tMTZkcDogewogICAgICAgIGJveC1zaGFkb3c6IDAgMTZweCAyNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLAogICAgICAgICAgICAgICAgICAgIDAgIDZweCAzMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgIDhweCAxMHB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjQpOwogICAgICB9OwoKICAgICAgLS1zaGFkb3ctZWxldmF0aW9uLTI0ZHA6IHsKICAgICAgICBib3gtc2hhZG93OiAwIDI0cHggMzhweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwKICAgICAgICAgICAgICAgICAgICAwIDlweCA0NnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgMTFweCAxNXB4IC03cHggcmdiYSgwLCAwLCAwLCAwLjQpOwogICAgICB9OwogICAgfQogIDwvc3R5bGU+CjwvY3VzdG9tLXN0eWxlPmA7am8uc2V0QXR0cmlidXRlKCJzdHlsZSIsImRpc3BsYXk6IG5vbmU7IiksZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChqby5jb250ZW50KTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCmNvbnN0IEdvPV9lYAo8ZG9tLW1vZHVsZSBpZD0icGFwZXItbWF0ZXJpYWwtc3R5bGVzIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIGh0bWwgewogICAgICAgIC0tcGFwZXItbWF0ZXJpYWw6IHsKICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIH07CiAgICAgICAgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMTogewogICAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi0yZHA7CiAgICAgICAgfTsKICAgICAgICAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0yOiB7CiAgICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTRkcDsKICAgICAgICB9OwogICAgICAgIC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTM6IHsKICAgICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tNmRwOwogICAgICAgIH07CiAgICAgICAgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tNDogewogICAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi04ZHA7CiAgICAgICAgfTsKICAgICAgICAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi01OiB7CiAgICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTE2ZHA7CiAgICAgICAgfTsKICAgICAgfQogICAgICAucGFwZXItbWF0ZXJpYWwgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsOwogICAgICB9CiAgICAgIC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjEiXSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTE7CiAgICAgIH0KICAgICAgLnBhcGVyLW1hdGVyaWFsW2VsZXZhdGlvbj0iMiJdIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMjsKICAgICAgfQogICAgICAucGFwZXItbWF0ZXJpYWxbZWxldmF0aW9uPSIzIl0gewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0zOwogICAgICB9CiAgICAgIC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjQiXSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTQ7CiAgICAgIH0KICAgICAgLnBhcGVyLW1hdGVyaWFsW2VsZXZhdGlvbj0iNSJdIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tNTsKICAgICAgfQoKICAgICAgLyogRHVwbGljYXRlIHRoZSBzdHlsZXMgYmVjYXVzZSBvZiBodHRwczovL2dpdGh1Yi5jb20vd2ViY29tcG9uZW50cy9zaGFkeWNzcy9pc3N1ZXMvMTkzICovCiAgICAgIDpob3N0IHsKICAgICAgICAtLXBhcGVyLW1hdGVyaWFsOiB7CiAgICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB9OwogICAgICAgIC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTE6IHsKICAgICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tMmRwOwogICAgICAgIH07CiAgICAgICAgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMjogewogICAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi00ZHA7CiAgICAgICAgfTsKICAgICAgICAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0zOiB7CiAgICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTZkcDsKICAgICAgICB9OwogICAgICAgIC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTQ6IHsKICAgICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tOGRwOwogICAgICAgIH07CiAgICAgICAgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tNTogewogICAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi0xNmRwOwogICAgICAgIH07CiAgICAgIH0KICAgICAgOmhvc3QoLnBhcGVyLW1hdGVyaWFsKSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWw7CiAgICAgIH0KICAgICAgOmhvc3QoLnBhcGVyLW1hdGVyaWFsW2VsZXZhdGlvbj0iMSJdKSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTE7CiAgICAgIH0KICAgICAgOmhvc3QoLnBhcGVyLW1hdGVyaWFsW2VsZXZhdGlvbj0iMiJdKSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTI7CiAgICAgIH0KICAgICAgOmhvc3QoLnBhcGVyLW1hdGVyaWFsW2VsZXZhdGlvbj0iMyJdKSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTM7CiAgICAgIH0KICAgICAgOmhvc3QoLnBhcGVyLW1hdGVyaWFsW2VsZXZhdGlvbj0iNCJdKSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTQ7CiAgICAgIH0KICAgICAgOmhvc3QoLnBhcGVyLW1hdGVyaWFsW2VsZXZhdGlvbj0iNSJdKSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPmA7R28uc2V0QXR0cmlidXRlKCJzdHlsZSIsImRpc3BsYXk6IG5vbmU7IiksZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChHby5jb250ZW50KTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCmNvbnN0IFdvPXtwcm9wZXJ0aWVzOntmb2N1c2VkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwLHJlYWRPbmx5OiEwLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9kaXNhYmxlZENoYW5nZWQiLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sX29sZFRhYkluZGV4Ont0eXBlOlN0cmluZ30sX2JvdW5kRm9jdXNCbHVySGFuZGxlcjp7dHlwZTpGdW5jdGlvbix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9mb2N1c0JsdXJIYW5kbGVyLmJpbmQodGhpcyl9fX0sb2JzZXJ2ZXJzOlsiX2NoYW5nZWRDb250cm9sU3RhdGUoZm9jdXNlZCwgZGlzYWJsZWQpIl0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLl9ib3VuZEZvY3VzQmx1ckhhbmRsZXIsITApLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsdGhpcy5fYm91bmRGb2N1c0JsdXJIYW5kbGVyLCEwKX0sX2ZvY3VzQmx1ckhhbmRsZXI6ZnVuY3Rpb24odCl7dGhpcy5fc2V0Rm9jdXNlZCgiZm9jdXMiPT09dC50eXBlKX0sX2Rpc2FibGVkQ2hhbmdlZDpmdW5jdGlvbih0LGUpe3RoaXMuc2V0QXR0cmlidXRlKCJhcmlhLWRpc2FibGVkIix0PyJ0cnVlIjoiZmFsc2UiKSx0aGlzLnN0eWxlLnBvaW50ZXJFdmVudHM9dD8ibm9uZSI6IiIsdD8odGhpcy5fb2xkVGFiSW5kZXg9dGhpcy5nZXRBdHRyaWJ1dGUoInRhYmluZGV4IiksdGhpcy5fc2V0Rm9jdXNlZCghMSksdGhpcy50YWJJbmRleD0tMSx0aGlzLmJsdXIoKSk6dm9pZCAwIT09dGhpcy5fb2xkVGFiSW5kZXgmJihudWxsPT09dGhpcy5fb2xkVGFiSW5kZXg/dGhpcy5yZW1vdmVBdHRyaWJ1dGUoInRhYmluZGV4Iik6dGhpcy5zZXRBdHRyaWJ1dGUoInRhYmluZGV4Iix0aGlzLl9vbGRUYWJJbmRleCkpfSxfY2hhbmdlZENvbnRyb2xTdGF0ZTpmdW5jdGlvbigpe3RoaXMuX2NvbnRyb2xTdGF0ZUNoYW5nZWQmJnRoaXMuX2NvbnRyb2xTdGF0ZUNoYW5nZWQoKX19LHFvPXtwcm9wZXJ0aWVzOntwcmVzc2VkOnt0eXBlOkJvb2xlYW4scmVhZE9ubHk6ITAsdmFsdWU6ITEscmVmbGVjdFRvQXR0cmlidXRlOiEwLG9ic2VydmVyOiJfcHJlc3NlZENoYW5nZWQifSx0b2dnbGVzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxhY3RpdmU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITAscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxwb2ludGVyRG93bjp7dHlwZTpCb29sZWFuLHJlYWRPbmx5OiEwLHZhbHVlOiExfSxyZWNlaXZlZEZvY3VzRnJvbUtleWJvYXJkOnt0eXBlOkJvb2xlYW4scmVhZE9ubHk6ITB9LGFyaWFBY3RpdmVBdHRyaWJ1dGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJhcmlhLXByZXNzZWQiLG9ic2VydmVyOiJfYXJpYUFjdGl2ZUF0dHJpYnV0ZUNoYW5nZWQifX0sbGlzdGVuZXJzOntkb3duOiJfZG93bkhhbmRsZXIiLHVwOiJfdXBIYW5kbGVyIix0YXA6Il90YXBIYW5kbGVyIn0sb2JzZXJ2ZXJzOlsiX2ZvY3VzQ2hhbmdlZChmb2N1c2VkKSIsIl9hY3RpdmVDaGFuZ2VkKGFjdGl2ZSwgYXJpYUFjdGl2ZUF0dHJpYnV0ZSkiXSxrZXlCaW5kaW5nczp7ImVudGVyOmtleWRvd24iOiJfYXN5bmNDbGljayIsInNwYWNlOmtleWRvd24iOiJfc3BhY2VLZXlEb3duSGFuZGxlciIsInNwYWNlOmtleXVwIjoiX3NwYWNlS2V5VXBIYW5kbGVyIn0sX21vdXNlRXZlbnRSZTovXm1vdXNlLyxfdGFwSGFuZGxlcjpmdW5jdGlvbigpe3RoaXMudG9nZ2xlcz90aGlzLl91c2VyQWN0aXZhdGUoIXRoaXMuYWN0aXZlKTp0aGlzLmFjdGl2ZT0hMX0sX2ZvY3VzQ2hhbmdlZDpmdW5jdGlvbih0KXt0aGlzLl9kZXRlY3RLZXlib2FyZEZvY3VzKHQpLHR8fHRoaXMuX3NldFByZXNzZWQoITEpfSxfZGV0ZWN0S2V5Ym9hcmRGb2N1czpmdW5jdGlvbih0KXt0aGlzLl9zZXRSZWNlaXZlZEZvY3VzRnJvbUtleWJvYXJkKCF0aGlzLnBvaW50ZXJEb3duJiZ0KX0sX3VzZXJBY3RpdmF0ZTpmdW5jdGlvbih0KXt0aGlzLmFjdGl2ZSE9PXQmJih0aGlzLmFjdGl2ZT10LHRoaXMuZmlyZSgiY2hhbmdlIikpfSxfZG93bkhhbmRsZXI6ZnVuY3Rpb24odCl7dGhpcy5fc2V0UG9pbnRlckRvd24oITApLHRoaXMuX3NldFByZXNzZWQoITApLHRoaXMuX3NldFJlY2VpdmVkRm9jdXNGcm9tS2V5Ym9hcmQoITEpfSxfdXBIYW5kbGVyOmZ1bmN0aW9uKCl7dGhpcy5fc2V0UG9pbnRlckRvd24oITEpLHRoaXMuX3NldFByZXNzZWQoITEpfSxfc3BhY2VLZXlEb3duSGFuZGxlcjpmdW5jdGlvbih0KXt2YXIgZT10LmRldGFpbC5rZXlib2FyZEV2ZW50LG49cWkoZSkubG9jYWxUYXJnZXQ7dGhpcy5pc0xpZ2h0RGVzY2VuZGFudChuKXx8KGUucHJldmVudERlZmF1bHQoKSxlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpLHRoaXMuX3NldFByZXNzZWQoITApKX0sX3NwYWNlS2V5VXBIYW5kbGVyOmZ1bmN0aW9uKHQpe3ZhciBlPXFpKHQuZGV0YWlsLmtleWJvYXJkRXZlbnQpLmxvY2FsVGFyZ2V0O3RoaXMuaXNMaWdodERlc2NlbmRhbnQoZSl8fCh0aGlzLnByZXNzZWQmJnRoaXMuX2FzeW5jQ2xpY2soKSx0aGlzLl9zZXRQcmVzc2VkKCExKSl9LF9hc3luY0NsaWNrOmZ1bmN0aW9uKCl7dGhpcy5hc3luYygoZnVuY3Rpb24oKXt0aGlzLmNsaWNrKCl9KSwxKX0sX3ByZXNzZWRDaGFuZ2VkOmZ1bmN0aW9uKHQpe3RoaXMuX2NoYW5nZWRCdXR0b25TdGF0ZSgpfSxfYXJpYUFjdGl2ZUF0dHJpYnV0ZUNoYW5nZWQ6ZnVuY3Rpb24odCxlKXtlJiZlIT10JiZ0aGlzLmhhc0F0dHJpYnV0ZShlKSYmdGhpcy5yZW1vdmVBdHRyaWJ1dGUoZSl9LF9hY3RpdmVDaGFuZ2VkOmZ1bmN0aW9uKHQsZSl7dGhpcy50b2dnbGVzP3RoaXMuc2V0QXR0cmlidXRlKHRoaXMuYXJpYUFjdGl2ZUF0dHJpYnV0ZSx0PyJ0cnVlIjoiZmFsc2UiKTp0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0aGlzLmFyaWFBY3RpdmVBdHRyaWJ1dGUpLHRoaXMuX2NoYW5nZWRCdXR0b25TdGF0ZSgpfSxfY29udHJvbFN0YXRlQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuZGlzYWJsZWQ/dGhpcy5fc2V0UHJlc3NlZCghMSk6dGhpcy5fY2hhbmdlZEJ1dHRvblN0YXRlKCl9LF9jaGFuZ2VkQnV0dG9uU3RhdGU6ZnVuY3Rpb24oKXt0aGlzLl9idXR0b25TdGF0ZUNoYW5nZWQmJnRoaXMuX2J1dHRvblN0YXRlQ2hhbmdlZCgpfX0sWW89W1JvLHFvXTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCi8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNCBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwp2YXIgWG89e2Rpc3RhbmNlOmZ1bmN0aW9uKHQsZSxuLGkpe3ZhciByPXQtbixvPWUtaTtyZXR1cm4gTWF0aC5zcXJ0KHIqcitvKm8pfSxub3c6d2luZG93LnBlcmZvcm1hbmNlJiZ3aW5kb3cucGVyZm9ybWFuY2Uubm93P3dpbmRvdy5wZXJmb3JtYW5jZS5ub3cuYmluZCh3aW5kb3cucGVyZm9ybWFuY2UpOkRhdGUubm93fTtmdW5jdGlvbiAkbyh0KXt0aGlzLmVsZW1lbnQ9dCx0aGlzLndpZHRoPXRoaXMuYm91bmRpbmdSZWN0LndpZHRoLHRoaXMuaGVpZ2h0PXRoaXMuYm91bmRpbmdSZWN0LmhlaWdodCx0aGlzLnNpemU9TWF0aC5tYXgodGhpcy53aWR0aCx0aGlzLmhlaWdodCl9ZnVuY3Rpb24gS28odCl7dGhpcy5lbGVtZW50PXQsdGhpcy5jb2xvcj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KS5jb2xvcix0aGlzLndhdmU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy53YXZlQ29udGFpbmVyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMud2F2ZS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9dGhpcy5jb2xvcix0aGlzLndhdmUuY2xhc3NMaXN0LmFkZCgid2F2ZSIpLHRoaXMud2F2ZUNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCJ3YXZlLWNvbnRhaW5lciIpLHFpKHRoaXMud2F2ZUNvbnRhaW5lcikuYXBwZW5kQ2hpbGQodGhpcy53YXZlKSx0aGlzLnJlc2V0SW50ZXJhY3Rpb25TdGF0ZSgpfSRvLnByb3RvdHlwZT17Z2V0IGJvdW5kaW5nUmVjdCgpe3JldHVybiB0aGlzLmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9LGZ1cnRoZXN0Q29ybmVyRGlzdGFuY2VGcm9tOmZ1bmN0aW9uKHQsZSl7dmFyIG49WG8uZGlzdGFuY2UodCxlLDAsMCksaT1Yby5kaXN0YW5jZSh0LGUsdGhpcy53aWR0aCwwKSxyPVhvLmRpc3RhbmNlKHQsZSwwLHRoaXMuaGVpZ2h0KSxvPVhvLmRpc3RhbmNlKHQsZSx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KTtyZXR1cm4gTWF0aC5tYXgobixpLHIsbyl9fSxLby5NQVhfUkFESVVTPTMwMCxLby5wcm90b3R5cGU9e2dldCByZWNlbnRlcnMoKXtyZXR1cm4gdGhpcy5lbGVtZW50LnJlY2VudGVyc30sZ2V0IGNlbnRlcigpe3JldHVybiB0aGlzLmVsZW1lbnQuY2VudGVyfSxnZXQgbW91c2VEb3duRWxhcHNlZCgpe3ZhciB0O3JldHVybiB0aGlzLm1vdXNlRG93blN0YXJ0Pyh0PVhvLm5vdygpLXRoaXMubW91c2VEb3duU3RhcnQsdGhpcy5tb3VzZVVwU3RhcnQmJih0LT10aGlzLm1vdXNlVXBFbGFwc2VkKSx0KTowfSxnZXQgbW91c2VVcEVsYXBzZWQoKXtyZXR1cm4gdGhpcy5tb3VzZVVwU3RhcnQ/WG8ubm93KCktdGhpcy5tb3VzZVVwU3RhcnQ6MH0sZ2V0IG1vdXNlRG93bkVsYXBzZWRTZWNvbmRzKCl7cmV0dXJuIHRoaXMubW91c2VEb3duRWxhcHNlZC8xZTN9LGdldCBtb3VzZVVwRWxhcHNlZFNlY29uZHMoKXtyZXR1cm4gdGhpcy5tb3VzZVVwRWxhcHNlZC8xZTN9LGdldCBtb3VzZUludGVyYWN0aW9uU2Vjb25kcygpe3JldHVybiB0aGlzLm1vdXNlRG93bkVsYXBzZWRTZWNvbmRzK3RoaXMubW91c2VVcEVsYXBzZWRTZWNvbmRzfSxnZXQgaW5pdGlhbE9wYWNpdHkoKXtyZXR1cm4gdGhpcy5lbGVtZW50LmluaXRpYWxPcGFjaXR5fSxnZXQgb3BhY2l0eURlY2F5VmVsb2NpdHkoKXtyZXR1cm4gdGhpcy5lbGVtZW50Lm9wYWNpdHlEZWNheVZlbG9jaXR5fSxnZXQgcmFkaXVzKCl7dmFyIHQ9MS4xKk1hdGgubWluKE1hdGguc3FydCh0aGlzLmNvbnRhaW5lck1ldHJpY3Mud2lkdGgqdGhpcy5jb250YWluZXJNZXRyaWNzLndpZHRoK3RoaXMuY29udGFpbmVyTWV0cmljcy5oZWlnaHQqdGhpcy5jb250YWluZXJNZXRyaWNzLmhlaWdodCksS28uTUFYX1JBRElVUykrNSxlPXQqKDEtTWF0aC5wb3coODAsLXRoaXMubW91c2VJbnRlcmFjdGlvblNlY29uZHMvKDEuMS10L0tvLk1BWF9SQURJVVMqLjIpKSk7cmV0dXJuIE1hdGguYWJzKGUpfSxnZXQgb3BhY2l0eSgpe3JldHVybiB0aGlzLm1vdXNlVXBTdGFydD9NYXRoLm1heCgwLHRoaXMuaW5pdGlhbE9wYWNpdHktdGhpcy5tb3VzZVVwRWxhcHNlZFNlY29uZHMqdGhpcy5vcGFjaXR5RGVjYXlWZWxvY2l0eSk6dGhpcy5pbml0aWFsT3BhY2l0eX0sZ2V0IG91dGVyT3BhY2l0eSgpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKC4zKnRoaXMubW91c2VVcEVsYXBzZWRTZWNvbmRzLHRoaXMub3BhY2l0eSkpfSxnZXQgaXNPcGFjaXR5RnVsbHlEZWNheWVkKCl7cmV0dXJuIHRoaXMub3BhY2l0eTwuMDEmJnRoaXMucmFkaXVzPj1NYXRoLm1pbih0aGlzLm1heFJhZGl1cyxLby5NQVhfUkFESVVTKX0sZ2V0IGlzUmVzdGluZ0F0TWF4UmFkaXVzKCl7cmV0dXJuIHRoaXMub3BhY2l0eT49dGhpcy5pbml0aWFsT3BhY2l0eSYmdGhpcy5yYWRpdXM+PU1hdGgubWluKHRoaXMubWF4UmFkaXVzLEtvLk1BWF9SQURJVVMpfSxnZXQgaXNBbmltYXRpb25Db21wbGV0ZSgpe3JldHVybiB0aGlzLm1vdXNlVXBTdGFydD90aGlzLmlzT3BhY2l0eUZ1bGx5RGVjYXllZDp0aGlzLmlzUmVzdGluZ0F0TWF4UmFkaXVzfSxnZXQgdHJhbnNsYXRpb25GcmFjdGlvbigpe3JldHVybiBNYXRoLm1pbigxLHRoaXMucmFkaXVzL3RoaXMuY29udGFpbmVyTWV0cmljcy5zaXplKjIvTWF0aC5zcXJ0KDIpKX0sZ2V0IHhOb3coKXtyZXR1cm4gdGhpcy54RW5kP3RoaXMueFN0YXJ0K3RoaXMudHJhbnNsYXRpb25GcmFjdGlvbioodGhpcy54RW5kLXRoaXMueFN0YXJ0KTp0aGlzLnhTdGFydH0sZ2V0IHlOb3coKXtyZXR1cm4gdGhpcy55RW5kP3RoaXMueVN0YXJ0K3RoaXMudHJhbnNsYXRpb25GcmFjdGlvbioodGhpcy55RW5kLXRoaXMueVN0YXJ0KTp0aGlzLnlTdGFydH0sZ2V0IGlzTW91c2VEb3duKCl7cmV0dXJuIHRoaXMubW91c2VEb3duU3RhcnQmJiF0aGlzLm1vdXNlVXBTdGFydH0scmVzZXRJbnRlcmFjdGlvblN0YXRlOmZ1bmN0aW9uKCl7dGhpcy5tYXhSYWRpdXM9MCx0aGlzLm1vdXNlRG93blN0YXJ0PTAsdGhpcy5tb3VzZVVwU3RhcnQ9MCx0aGlzLnhTdGFydD0wLHRoaXMueVN0YXJ0PTAsdGhpcy54RW5kPTAsdGhpcy55RW5kPTAsdGhpcy5zbGlkZURpc3RhbmNlPTAsdGhpcy5jb250YWluZXJNZXRyaWNzPW5ldyAkbyh0aGlzLmVsZW1lbnQpfSxkcmF3OmZ1bmN0aW9uKCl7dmFyIHQsZSxuO3RoaXMud2F2ZS5zdHlsZS5vcGFjaXR5PXRoaXMub3BhY2l0eSx0PXRoaXMucmFkaXVzLyh0aGlzLmNvbnRhaW5lck1ldHJpY3Muc2l6ZS8yKSx0aGlzLndhdmVDb250YWluZXIuc3R5bGUud2Via2l0VHJhbnNmb3JtPSJ0cmFuc2xhdGUoIisoZT10aGlzLnhOb3ctdGhpcy5jb250YWluZXJNZXRyaWNzLndpZHRoLzIpKyJweCwgIisobj10aGlzLnlOb3ctdGhpcy5jb250YWluZXJNZXRyaWNzLmhlaWdodC8yKSsicHgpIix0aGlzLndhdmVDb250YWluZXIuc3R5bGUudHJhbnNmb3JtPSJ0cmFuc2xhdGUzZCgiK2UrInB4LCAiK24rInB4LCAwKSIsdGhpcy53YXZlLnN0eWxlLndlYmtpdFRyYW5zZm9ybT0ic2NhbGUoIit0KyIsIit0KyIpIix0aGlzLndhdmUuc3R5bGUudHJhbnNmb3JtPSJzY2FsZTNkKCIrdCsiLCIrdCsiLDEpIn0sZG93bkFjdGlvbjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmNvbnRhaW5lck1ldHJpY3Mud2lkdGgvMixuPXRoaXMuY29udGFpbmVyTWV0cmljcy5oZWlnaHQvMjt0aGlzLnJlc2V0SW50ZXJhY3Rpb25TdGF0ZSgpLHRoaXMubW91c2VEb3duU3RhcnQ9WG8ubm93KCksdGhpcy5jZW50ZXI/KHRoaXMueFN0YXJ0PWUsdGhpcy55U3RhcnQ9bix0aGlzLnNsaWRlRGlzdGFuY2U9WG8uZGlzdGFuY2UodGhpcy54U3RhcnQsdGhpcy55U3RhcnQsdGhpcy54RW5kLHRoaXMueUVuZCkpOih0aGlzLnhTdGFydD10P3QuZGV0YWlsLngtdGhpcy5jb250YWluZXJNZXRyaWNzLmJvdW5kaW5nUmVjdC5sZWZ0OnRoaXMuY29udGFpbmVyTWV0cmljcy53aWR0aC8yLHRoaXMueVN0YXJ0PXQ/dC5kZXRhaWwueS10aGlzLmNvbnRhaW5lck1ldHJpY3MuYm91bmRpbmdSZWN0LnRvcDp0aGlzLmNvbnRhaW5lck1ldHJpY3MuaGVpZ2h0LzIpLHRoaXMucmVjZW50ZXJzJiYodGhpcy54RW5kPWUsdGhpcy55RW5kPW4sdGhpcy5zbGlkZURpc3RhbmNlPVhvLmRpc3RhbmNlKHRoaXMueFN0YXJ0LHRoaXMueVN0YXJ0LHRoaXMueEVuZCx0aGlzLnlFbmQpKSx0aGlzLm1heFJhZGl1cz10aGlzLmNvbnRhaW5lck1ldHJpY3MuZnVydGhlc3RDb3JuZXJEaXN0YW5jZUZyb20odGhpcy54U3RhcnQsdGhpcy55U3RhcnQpLHRoaXMud2F2ZUNvbnRhaW5lci5zdHlsZS50b3A9KHRoaXMuY29udGFpbmVyTWV0cmljcy5oZWlnaHQtdGhpcy5jb250YWluZXJNZXRyaWNzLnNpemUpLzIrInB4Iix0aGlzLndhdmVDb250YWluZXIuc3R5bGUubGVmdD0odGhpcy5jb250YWluZXJNZXRyaWNzLndpZHRoLXRoaXMuY29udGFpbmVyTWV0cmljcy5zaXplKS8yKyJweCIsdGhpcy53YXZlQ29udGFpbmVyLnN0eWxlLndpZHRoPXRoaXMuY29udGFpbmVyTWV0cmljcy5zaXplKyJweCIsdGhpcy53YXZlQ29udGFpbmVyLnN0eWxlLmhlaWdodD10aGlzLmNvbnRhaW5lck1ldHJpY3Muc2l6ZSsicHgifSx1cEFjdGlvbjpmdW5jdGlvbih0KXt0aGlzLmlzTW91c2VEb3duJiYodGhpcy5tb3VzZVVwU3RhcnQ9WG8ubm93KCkpfSxyZW1vdmU6ZnVuY3Rpb24oKXtxaShxaSh0aGlzLndhdmVDb250YWluZXIpLnBhcmVudE5vZGUpLnJlbW92ZUNoaWxkKHRoaXMud2F2ZUNvbnRhaW5lcil9fSxJcih7X3RlbXBsYXRlOl9lYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGJvcmRlci1yYWRpdXM6IGluaGVyaXQ7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CgogICAgICAgIC8qIFNlZSBQb2x5bWVyRWxlbWVudHMvcGFwZXItYmVoYXZpb3JzL2lzc3Vlcy8zNC4gT24gbm9uLUNocm9tZSBicm93c2VycywKICAgICAgICAgKiBjcmVhdGluZyBhIG5vZGUgKHdpdGggYSBwb3NpdGlvbjphYnNvbHV0ZSkgaW4gdGhlIG1pZGRsZSBvZiBhbiBldmVudAogICAgICAgICAqIGhhbmRsZXIgImludGVycnVwdHMiIHRoYXQgZXZlbnQgaGFuZGxlciAod2hpY2ggaGFwcGVucyB3aGVuIHRoZQogICAgICAgICAqIHJpcHBsZSBpcyBjcmVhdGVkIG9uIGRlbWFuZCkgKi8KICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2FuaW1hdGluZ10pIHsKICAgICAgICAvKiBUaGlzIHJlc29sdmVzIGEgcmVuZGVyaW5nIGlzc3VlIGluIENocm9tZSAoYXMgb2YgNDApIHdoZXJlIHRoZQogICAgICAgICAgIHJpcHBsZSBpcyBub3QgcHJvcGVybHkgY2xpcHBlZCBieSBpdHMgcGFyZW50ICh3aGljaCBtYXkgaGF2ZQogICAgICAgICAgIHJvdW5kZWQgY29ybmVycykuIFNlZTogaHR0cDovL2pzYmluLmNvbS90ZW1leGEvNAoKICAgICAgICAgICBOb3RlOiBXZSBvbmx5IGFwcGx5IHRoaXMgc3R5bGUgY29uZGl0aW9uYWxseS4gT3RoZXJ3aXNlLCB0aGUgYnJvd3NlcgogICAgICAgICAgIHdpbGwgY3JlYXRlIGEgbmV3IGNvbXBvc2l0aW5nIGxheWVyIGZvciBldmVyeSByaXBwbGUgZWxlbWVudCBvbiB0aGUKICAgICAgICAgICBwYWdlLCBhbmQgdGhhdCB3b3VsZCBiZSBiYWQuICovCiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAwKTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDAsIDApOwogICAgICB9CgogICAgICAjYmFja2dyb3VuZCwKICAgICAgI3dhdmVzLAogICAgICAud2F2ZS1jb250YWluZXIsCiAgICAgIC53YXZlIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAjYmFja2dyb3VuZCwKICAgICAgLndhdmUgewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgIH0KCiAgICAgICN3YXZlcywKICAgICAgLndhdmUgewogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC53YXZlLWNvbnRhaW5lciwKICAgICAgLndhdmUgewogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgfQoKICAgICAgOmhvc3QoLmNpcmNsZSkgI2JhY2tncm91bmQsCiAgICAgIDpob3N0KC5jaXJjbGUpICN3YXZlcyB7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICB9CgogICAgICA6aG9zdCguY2lyY2xlKSAud2F2ZS1jb250YWluZXIgewogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBpZD0iYmFja2dyb3VuZCI+PC9kaXY+CiAgICA8ZGl2IGlkPSJ3YXZlcyI+PC9kaXY+CmAsaXM6InBhcGVyLXJpcHBsZSIsYmVoYXZpb3JzOltSb10scHJvcGVydGllczp7aW5pdGlhbE9wYWNpdHk6e3R5cGU6TnVtYmVyLHZhbHVlOi4yNX0sb3BhY2l0eURlY2F5VmVsb2NpdHk6e3R5cGU6TnVtYmVyLHZhbHVlOi44fSxyZWNlbnRlcnM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sY2VudGVyOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHJpcHBsZXM6e3R5cGU6QXJyYXksdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19LGFuaW1hdGluZzp7dHlwZTpCb29sZWFuLHJlYWRPbmx5OiEwLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCx2YWx1ZTohMX0saG9sZERvd246e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX2hvbGREb3duQ2hhbmdlZCJ9LG5vaW5rOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9hbmltYXRpbmc6e3R5cGU6Qm9vbGVhbn0sX2JvdW5kQW5pbWF0ZTp7dHlwZTpGdW5jdGlvbix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFuaW1hdGUuYmluZCh0aGlzKX19fSxnZXQgdGFyZ2V0KCl7cmV0dXJuIHRoaXMua2V5RXZlbnRUYXJnZXR9LGtleUJpbmRpbmdzOnsiZW50ZXI6a2V5ZG93biI6Il9vbkVudGVyS2V5ZG93biIsInNwYWNlOmtleWRvd24iOiJfb25TcGFjZUtleWRvd24iLCJzcGFjZTprZXl1cCI6Il9vblNwYWNlS2V5dXAifSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMua2V5RXZlbnRUYXJnZXQ9MTE9PXFpKHRoaXMpLnBhcmVudE5vZGUubm9kZVR5cGU/cWkodGhpcykuZ2V0T3duZXJSb290KCkuaG9zdDpxaSh0aGlzKS5wYXJlbnROb2RlO3ZhciB0PXRoaXMua2V5RXZlbnRUYXJnZXQ7dGhpcy5saXN0ZW4odCwidXAiLCJ1aVVwQWN0aW9uIiksdGhpcy5saXN0ZW4odCwiZG93biIsInVpRG93bkFjdGlvbiIpfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMudW5saXN0ZW4odGhpcy5rZXlFdmVudFRhcmdldCwidXAiLCJ1aVVwQWN0aW9uIiksdGhpcy51bmxpc3Rlbih0aGlzLmtleUV2ZW50VGFyZ2V0LCJkb3duIiwidWlEb3duQWN0aW9uIiksdGhpcy5rZXlFdmVudFRhcmdldD1udWxsfSxnZXQgc2hvdWxkS2VlcEFuaW1hdGluZygpe2Zvcih2YXIgdD0wO3Q8dGhpcy5yaXBwbGVzLmxlbmd0aDsrK3QpaWYoIXRoaXMucmlwcGxlc1t0XS5pc0FuaW1hdGlvbkNvbXBsZXRlKXJldHVybiEwO3JldHVybiExfSxzaW11bGF0ZWRSaXBwbGU6ZnVuY3Rpb24oKXt0aGlzLmRvd25BY3Rpb24obnVsbCksdGhpcy5hc3luYygoZnVuY3Rpb24oKXt0aGlzLnVwQWN0aW9uKCl9KSwxKX0sdWlEb3duQWN0aW9uOmZ1bmN0aW9uKHQpe3RoaXMubm9pbmt8fHRoaXMuZG93bkFjdGlvbih0KX0sZG93bkFjdGlvbjpmdW5jdGlvbih0KXt0aGlzLmhvbGREb3duJiZ0aGlzLnJpcHBsZXMubGVuZ3RoPjB8fCh0aGlzLmFkZFJpcHBsZSgpLmRvd25BY3Rpb24odCksdGhpcy5fYW5pbWF0aW5nfHwodGhpcy5fYW5pbWF0aW5nPSEwLHRoaXMuYW5pbWF0ZSgpKSl9LHVpVXBBY3Rpb246ZnVuY3Rpb24odCl7dGhpcy5ub2lua3x8dGhpcy51cEFjdGlvbih0KX0sdXBBY3Rpb246ZnVuY3Rpb24odCl7dGhpcy5ob2xkRG93bnx8KHRoaXMucmlwcGxlcy5mb3JFYWNoKChmdW5jdGlvbihlKXtlLnVwQWN0aW9uKHQpfSkpLHRoaXMuX2FuaW1hdGluZz0hMCx0aGlzLmFuaW1hdGUoKSl9LG9uQW5pbWF0aW9uQ29tcGxldGU6ZnVuY3Rpb24oKXt0aGlzLl9hbmltYXRpbmc9ITEsdGhpcy4kLmJhY2tncm91bmQuc3R5bGUuYmFja2dyb3VuZENvbG9yPSIiLHRoaXMuZmlyZSgidHJhbnNpdGlvbmVuZCIpfSxhZGRSaXBwbGU6ZnVuY3Rpb24oKXt2YXIgdD1uZXcgS28odGhpcyk7cmV0dXJuIHFpKHRoaXMuJC53YXZlcykuYXBwZW5kQ2hpbGQodC53YXZlQ29udGFpbmVyKSx0aGlzLiQuYmFja2dyb3VuZC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9dC5jb2xvcix0aGlzLnJpcHBsZXMucHVzaCh0KSx0aGlzLl9zZXRBbmltYXRpbmcoITApLHR9LHJlbW92ZVJpcHBsZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLnJpcHBsZXMuaW5kZXhPZih0KTtlPDB8fCh0aGlzLnJpcHBsZXMuc3BsaWNlKGUsMSksdC5yZW1vdmUoKSx0aGlzLnJpcHBsZXMubGVuZ3RofHx0aGlzLl9zZXRBbmltYXRpbmcoITEpKX0sYW5pbWF0ZTpmdW5jdGlvbigpe2lmKHRoaXMuX2FuaW1hdGluZyl7dmFyIHQsZTtmb3IodD0wO3Q8dGhpcy5yaXBwbGVzLmxlbmd0aDsrK3QpKGU9dGhpcy5yaXBwbGVzW3RdKS5kcmF3KCksdGhpcy4kLmJhY2tncm91bmQuc3R5bGUub3BhY2l0eT1lLm91dGVyT3BhY2l0eSxlLmlzT3BhY2l0eUZ1bGx5RGVjYXllZCYmIWUuaXNSZXN0aW5nQXRNYXhSYWRpdXMmJnRoaXMucmVtb3ZlUmlwcGxlKGUpO3RoaXMuc2hvdWxkS2VlcEFuaW1hdGluZ3x8MCE9PXRoaXMucmlwcGxlcy5sZW5ndGg/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLl9ib3VuZEFuaW1hdGUpOnRoaXMub25BbmltYXRpb25Db21wbGV0ZSgpfX0sYW5pbWF0ZVJpcHBsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFuaW1hdGUoKX0sX29uRW50ZXJLZXlkb3duOmZ1bmN0aW9uKCl7dGhpcy51aURvd25BY3Rpb24oKSx0aGlzLmFzeW5jKHRoaXMudWlVcEFjdGlvbiwxKX0sX29uU3BhY2VLZXlkb3duOmZ1bmN0aW9uKCl7dGhpcy51aURvd25BY3Rpb24oKX0sX29uU3BhY2VLZXl1cDpmdW5jdGlvbigpe3RoaXMudWlVcEFjdGlvbigpfSxfaG9sZERvd25DaGFuZ2VkOmZ1bmN0aW9uKHQsZSl7dm9pZCAwIT09ZSYmKHQ/dGhpcy5kb3duQWN0aW9uKCk6dGhpcy51cEFjdGlvbigpKX19KTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCmNvbnN0IFpvPXtwcm9wZXJ0aWVzOntub2luazp7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfbm9pbmtDaGFuZ2VkIn0sX3JpcHBsZUNvbnRhaW5lcjp7dHlwZTpPYmplY3R9fSxfYnV0dG9uU3RhdGVDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5mb2N1c2VkJiZ0aGlzLmVuc3VyZVJpcHBsZSgpfSxfZG93bkhhbmRsZXI6ZnVuY3Rpb24odCl7cW8uX2Rvd25IYW5kbGVyLmNhbGwodGhpcyx0KSx0aGlzLnByZXNzZWQmJnRoaXMuZW5zdXJlUmlwcGxlKHQpfSxlbnN1cmVSaXBwbGU6ZnVuY3Rpb24odCl7aWYoIXRoaXMuaGFzUmlwcGxlKCkpe3RoaXMuX3JpcHBsZT10aGlzLl9jcmVhdGVSaXBwbGUoKSx0aGlzLl9yaXBwbGUubm9pbms9dGhpcy5ub2luazt2YXIgZT10aGlzLl9yaXBwbGVDb250YWluZXJ8fHRoaXMucm9vdDtpZihlJiZxaShlKS5hcHBlbmRDaGlsZCh0aGlzLl9yaXBwbGUpLHQpe3ZhciBuPXFpKHRoaXMuX3JpcHBsZUNvbnRhaW5lcnx8dGhpcyksaT1xaSh0KS5yb290VGFyZ2V0O24uZGVlcENvbnRhaW5zKGkpJiZ0aGlzLl9yaXBwbGUudWlEb3duQWN0aW9uKHQpfX19LGdldFJpcHBsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVuc3VyZVJpcHBsZSgpLHRoaXMuX3JpcHBsZX0saGFzUmlwcGxlOmZ1bmN0aW9uKCl7cmV0dXJuIEJvb2xlYW4odGhpcy5fcmlwcGxlKX0sX2NyZWF0ZVJpcHBsZTpmdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwYXBlci1yaXBwbGUiKX0sX25vaW5rQ2hhbmdlZDpmdW5jdGlvbih0KXt0aGlzLmhhc1JpcHBsZSgpJiYodGhpcy5fcmlwcGxlLm5vaW5rPXQpfX0sSm89e3Byb3BlcnRpZXM6e2VsZXZhdGlvbjp7dHlwZTpOdW1iZXIscmVmbGVjdFRvQXR0cmlidXRlOiEwLHJlYWRPbmx5OiEwfX0sb2JzZXJ2ZXJzOlsiX2NhbGN1bGF0ZUVsZXZhdGlvbihmb2N1c2VkLCBkaXNhYmxlZCwgYWN0aXZlLCBwcmVzc2VkLCByZWNlaXZlZEZvY3VzRnJvbUtleWJvYXJkKSIsIl9jb21wdXRlS2V5Ym9hcmRDbGFzcyhyZWNlaXZlZEZvY3VzRnJvbUtleWJvYXJkKSJdLGhvc3RBdHRyaWJ1dGVzOntyb2xlOiJidXR0b24iLHRhYmluZGV4OiIwIixhbmltYXRlZDohMH0sX2NhbGN1bGF0ZUVsZXZhdGlvbjpmdW5jdGlvbigpe3ZhciB0PTE7dGhpcy5kaXNhYmxlZD90PTA6dGhpcy5hY3RpdmV8fHRoaXMucHJlc3NlZD90PTQ6dGhpcy5yZWNlaXZlZEZvY3VzRnJvbUtleWJvYXJkJiYodD0zKSx0aGlzLl9zZXRFbGV2YXRpb24odCl9LF9jb21wdXRlS2V5Ym9hcmRDbGFzczpmdW5jdGlvbih0KXt0aGlzLnRvZ2dsZUNsYXNzKCJrZXlib2FyZC1mb2N1cyIsdCl9LF9zcGFjZUtleURvd25IYW5kbGVyOmZ1bmN0aW9uKHQpe3FvLl9zcGFjZUtleURvd25IYW5kbGVyLmNhbGwodGhpcyx0KSx0aGlzLmhhc1JpcHBsZSgpJiZ0aGlzLmdldFJpcHBsZSgpLnJpcHBsZXMubGVuZ3RoPDEmJnRoaXMuX3JpcHBsZS51aURvd25BY3Rpb24oKX0sX3NwYWNlS2V5VXBIYW5kbGVyOmZ1bmN0aW9uKHQpe3FvLl9zcGFjZUtleVVwSGFuZGxlci5jYWxsKHRoaXMsdCksdGhpcy5oYXNSaXBwbGUoKSYmdGhpcy5fcmlwcGxlLnVpVXBBY3Rpb24oKX19LFFvPVtZbyxXbyxabyxKb10sdGE9X2VgCiAgPHN0eWxlIGluY2x1ZGU9InBhcGVyLW1hdGVyaWFsLXN0eWxlcyI+CiAgICAvKiBOZWVkIHRvIHNwZWNpZnkgdGhlIHNhbWUgc3BlY2lmaWNpdHkgYXMgdGhlIHN0eWxlcyBpbXBvcnRlZCBmcm9tIHBhcGVyLW1hdGVyaWFsLiAqLwogICAgOmhvc3QgewogICAgICBAYXBwbHkgLS1sYXlvdXQtaW5saW5lOwogICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyLWNlbnRlcjsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICBtaW4td2lkdGg6IDUuMTRlbTsKICAgICAgbWFyZ2luOiAwIDAuMjllbTsKICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKTsKICAgICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDsKICAgICAgZm9udDogaW5oZXJpdDsKICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgb3V0bGluZS13aWR0aDogMDsKICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIHotaW5kZXg6IDA7CiAgICAgIHBhZGRpbmc6IDAuN2VtIDAuNTdlbTsKCiAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CiAgICAgIEBhcHBseSAtLXBhcGVyLWJ1dHRvbjsKICAgIH0KCiAgICA6aG9zdChbZWxldmF0aW9uPSIxIl0pIHsKICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTE7CiAgICB9CgogICAgOmhvc3QoW2VsZXZhdGlvbj0iMiJdKSB7CiAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0yOwogICAgfQoKICAgIDpob3N0KFtlbGV2YXRpb249IjMiXSkgewogICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMzsKICAgIH0KCiAgICA6aG9zdChbZWxldmF0aW9uPSI0Il0pIHsKICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTQ7CiAgICB9CgogICAgOmhvc3QoW2VsZXZhdGlvbj0iNSJdKSB7CiAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi01OwogICAgfQoKICAgIDpob3N0KFtoaWRkZW5dKSB7CiAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgIH0KCiAgICA6aG9zdChbcmFpc2VkXS5rZXlib2FyZC1mb2N1cykgewogICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgQGFwcGx5IC0tcGFwZXItYnV0dG9uLXJhaXNlZC1rZXlib2FyZC1mb2N1czsKICAgIH0KCiAgICA6aG9zdCg6bm90KFtyYWlzZWRdKS5rZXlib2FyZC1mb2N1cykgewogICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgQGFwcGx5IC0tcGFwZXItYnV0dG9uLWZsYXQta2V5Ym9hcmQtZm9jdXM7CiAgICB9CgogICAgOmhvc3QoW2Rpc2FibGVkXSkgewogICAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgICBjb2xvcjogI2E4YThhODsKICAgICAgY3Vyc29yOiBhdXRvOwogICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKCiAgICAgIEBhcHBseSAtLXBhcGVyLWJ1dHRvbi1kaXNhYmxlZDsKICAgIH0KCiAgICA6aG9zdChbZGlzYWJsZWRdW3JhaXNlZF0pIHsKICAgICAgYmFja2dyb3VuZDogI2VhZWFlYTsKICAgIH0KCgogICAgOmhvc3QoW2FuaW1hdGVkXSkgewogICAgICBAYXBwbHkgLS1zaGFkb3ctdHJhbnNpdGlvbjsKICAgIH0KCiAgICBwYXBlci1yaXBwbGUgewogICAgICBjb2xvcjogdmFyKC0tcGFwZXItYnV0dG9uLWluay1jb2xvcik7CiAgICB9CiAgPC9zdHlsZT4KCiAgPHNsb3Q+PC9zbG90PmA7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqL3RhLnNldEF0dHJpYnV0ZSgic3RyaXAtd2hpdGVzcGFjZSIsIiIpLElyKHtfdGVtcGxhdGU6dGEsaXM6InBhcGVyLWJ1dHRvbiIsYmVoYXZpb3JzOltRb10scHJvcGVydGllczp7cmFpc2VkOnt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwLHZhbHVlOiExLG9ic2VydmVyOiJfY2FsY3VsYXRlRWxldmF0aW9uIn19LF9jYWxjdWxhdGVFbGV2YXRpb246ZnVuY3Rpb24oKXt0aGlzLnJhaXNlZD9Kby5fY2FsY3VsYXRlRWxldmF0aW9uLmFwcGx5KHRoaXMpOnRoaXMuX3NldEVsZXZhdGlvbigwKX19KTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCmNvbnN0IGVhPV9lYAo8Y3VzdG9tLXN0eWxlPgogIDxzdHlsZSBpcz0iY3VzdG9tLXN0eWxlIj4KICAgIGh0bWwgewoKICAgICAgLyogTWF0ZXJpYWwgRGVzaWduIGNvbG9yIHBhbGV0dGUgZm9yIEdvb2dsZSBwcm9kdWN0cyAqLwoKICAgICAgLS1nb29nbGUtcmVkLTEwMDogI2Y0YzdjMzsKICAgICAgLS1nb29nbGUtcmVkLTMwMDogI2U2N2M3MzsKICAgICAgLS1nb29nbGUtcmVkLTUwMDogI2RiNDQzNzsKICAgICAgLS1nb29nbGUtcmVkLTcwMDogI2M1MzkyOTsKCiAgICAgIC0tZ29vZ2xlLWJsdWUtMTAwOiAjYzZkYWZjOwogICAgICAtLWdvb2dsZS1ibHVlLTMwMDogIzdiYWFmNzsKICAgICAgLS1nb29nbGUtYmx1ZS01MDA6ICM0Mjg1ZjQ7CiAgICAgIC0tZ29vZ2xlLWJsdWUtNzAwOiAjMzM2N2Q2OwoKICAgICAgLS1nb29nbGUtZ3JlZW4tMTAwOiAjYjdlMWNkOwogICAgICAtLWdvb2dsZS1ncmVlbi0zMDA6ICM1N2JiOGE7CiAgICAgIC0tZ29vZ2xlLWdyZWVuLTUwMDogIzBmOWQ1ODsKICAgICAgLS1nb29nbGUtZ3JlZW4tNzAwOiAjMGI4MDQzOwoKICAgICAgLS1nb29nbGUteWVsbG93LTEwMDogI2ZjZThiMjsKICAgICAgLS1nb29nbGUteWVsbG93LTMwMDogI2Y3Y2I0ZDsKICAgICAgLS1nb29nbGUteWVsbG93LTUwMDogI2Y0YjQwMDsKICAgICAgLS1nb29nbGUteWVsbG93LTcwMDogI2YwOTMwMDsKCiAgICAgIC0tZ29vZ2xlLWdyZXktMTAwOiAjZjVmNWY1OwogICAgICAtLWdvb2dsZS1ncmV5LTMwMDogI2UwZTBlMDsKICAgICAgLS1nb29nbGUtZ3JleS01MDA6ICM5ZTllOWU7CiAgICAgIC0tZ29vZ2xlLWdyZXktNzAwOiAjNjE2MTYxOwoKICAgICAgLyogTWF0ZXJpYWwgRGVzaWduIGNvbG9yIHBhbGV0dGUgZnJvbSBvbmxpbmUgc3BlYyBkb2N1bWVudCAqLwoKICAgICAgLS1wYXBlci1yZWQtNTA6ICNmZmViZWU7CiAgICAgIC0tcGFwZXItcmVkLTEwMDogI2ZmY2RkMjsKICAgICAgLS1wYXBlci1yZWQtMjAwOiAjZWY5YTlhOwogICAgICAtLXBhcGVyLXJlZC0zMDA6ICNlNTczNzM7CiAgICAgIC0tcGFwZXItcmVkLTQwMDogI2VmNTM1MDsKICAgICAgLS1wYXBlci1yZWQtNTAwOiAjZjQ0MzM2OwogICAgICAtLXBhcGVyLXJlZC02MDA6ICNlNTM5MzU7CiAgICAgIC0tcGFwZXItcmVkLTcwMDogI2QzMmYyZjsKICAgICAgLS1wYXBlci1yZWQtODAwOiAjYzYyODI4OwogICAgICAtLXBhcGVyLXJlZC05MDA6ICNiNzFjMWM7CiAgICAgIC0tcGFwZXItcmVkLWExMDA6ICNmZjhhODA7CiAgICAgIC0tcGFwZXItcmVkLWEyMDA6ICNmZjUyNTI7CiAgICAgIC0tcGFwZXItcmVkLWE0MDA6ICNmZjE3NDQ7CiAgICAgIC0tcGFwZXItcmVkLWE3MDA6ICNkNTAwMDA7CgogICAgICAtLXBhcGVyLXBpbmstNTA6ICNmY2U0ZWM7CiAgICAgIC0tcGFwZXItcGluay0xMDA6ICNmOGJiZDA7CiAgICAgIC0tcGFwZXItcGluay0yMDA6ICNmNDhmYjE7CiAgICAgIC0tcGFwZXItcGluay0zMDA6ICNmMDYyOTI7CiAgICAgIC0tcGFwZXItcGluay00MDA6ICNlYzQwN2E7CiAgICAgIC0tcGFwZXItcGluay01MDA6ICNlOTFlNjM7CiAgICAgIC0tcGFwZXItcGluay02MDA6ICNkODFiNjA7CiAgICAgIC0tcGFwZXItcGluay03MDA6ICNjMjE4NWI7CiAgICAgIC0tcGFwZXItcGluay04MDA6ICNhZDE0NTc7CiAgICAgIC0tcGFwZXItcGluay05MDA6ICM4ODBlNGY7CiAgICAgIC0tcGFwZXItcGluay1hMTAwOiAjZmY4MGFiOwogICAgICAtLXBhcGVyLXBpbmstYTIwMDogI2ZmNDA4MTsKICAgICAgLS1wYXBlci1waW5rLWE0MDA6ICNmNTAwNTc7CiAgICAgIC0tcGFwZXItcGluay1hNzAwOiAjYzUxMTYyOwoKICAgICAgLS1wYXBlci1wdXJwbGUtNTA6ICNmM2U1ZjU7CiAgICAgIC0tcGFwZXItcHVycGxlLTEwMDogI2UxYmVlNzsKICAgICAgLS1wYXBlci1wdXJwbGUtMjAwOiAjY2U5M2Q4OwogICAgICAtLXBhcGVyLXB1cnBsZS0zMDA6ICNiYTY4Yzg7CiAgICAgIC0tcGFwZXItcHVycGxlLTQwMDogI2FiNDdiYzsKICAgICAgLS1wYXBlci1wdXJwbGUtNTAwOiAjOWMyN2IwOwogICAgICAtLXBhcGVyLXB1cnBsZS02MDA6ICM4ZTI0YWE7CiAgICAgIC0tcGFwZXItcHVycGxlLTcwMDogIzdiMWZhMjsKICAgICAgLS1wYXBlci1wdXJwbGUtODAwOiAjNmExYjlhOwogICAgICAtLXBhcGVyLXB1cnBsZS05MDA6ICM0YTE0OGM7CiAgICAgIC0tcGFwZXItcHVycGxlLWExMDA6ICNlYTgwZmM7CiAgICAgIC0tcGFwZXItcHVycGxlLWEyMDA6ICNlMDQwZmI7CiAgICAgIC0tcGFwZXItcHVycGxlLWE0MDA6ICNkNTAwZjk7CiAgICAgIC0tcGFwZXItcHVycGxlLWE3MDA6ICNhYTAwZmY7CgogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLTUwOiAjZWRlN2Y2OwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLTEwMDogI2QxYzRlOTsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS0yMDA6ICNiMzlkZGI7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtMzAwOiAjOTU3NWNkOwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLTQwMDogIzdlNTdjMjsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS01MDA6ICM2NzNhYjc7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtNjAwOiAjNWUzNWIxOwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLTcwMDogIzUxMmRhODsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS04MDA6ICM0NTI3YTA7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtOTAwOiAjMzExYjkyOwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLWExMDA6ICNiMzg4ZmY7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtYTIwMDogIzdjNGRmZjsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS1hNDAwOiAjNjUxZmZmOwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLWE3MDA6ICM2MjAwZWE7CgogICAgICAtLXBhcGVyLWluZGlnby01MDogI2U4ZWFmNjsKICAgICAgLS1wYXBlci1pbmRpZ28tMTAwOiAjYzVjYWU5OwogICAgICAtLXBhcGVyLWluZGlnby0yMDA6ICM5ZmE4ZGE7CiAgICAgIC0tcGFwZXItaW5kaWdvLTMwMDogIzc5ODZjYjsKICAgICAgLS1wYXBlci1pbmRpZ28tNDAwOiAjNWM2YmMwOwogICAgICAtLXBhcGVyLWluZGlnby01MDA6ICMzZjUxYjU7CiAgICAgIC0tcGFwZXItaW5kaWdvLTYwMDogIzM5NDlhYjsKICAgICAgLS1wYXBlci1pbmRpZ28tNzAwOiAjMzAzZjlmOwogICAgICAtLXBhcGVyLWluZGlnby04MDA6ICMyODM1OTM7CiAgICAgIC0tcGFwZXItaW5kaWdvLTkwMDogIzFhMjM3ZTsKICAgICAgLS1wYXBlci1pbmRpZ28tYTEwMDogIzhjOWVmZjsKICAgICAgLS1wYXBlci1pbmRpZ28tYTIwMDogIzUzNmRmZTsKICAgICAgLS1wYXBlci1pbmRpZ28tYTQwMDogIzNkNWFmZTsKICAgICAgLS1wYXBlci1pbmRpZ28tYTcwMDogIzMwNGZmZTsKCiAgICAgIC0tcGFwZXItYmx1ZS01MDogI2UzZjJmZDsKICAgICAgLS1wYXBlci1ibHVlLTEwMDogI2JiZGVmYjsKICAgICAgLS1wYXBlci1ibHVlLTIwMDogIzkwY2FmOTsKICAgICAgLS1wYXBlci1ibHVlLTMwMDogIzY0YjVmNjsKICAgICAgLS1wYXBlci1ibHVlLTQwMDogIzQyYTVmNTsKICAgICAgLS1wYXBlci1ibHVlLTUwMDogIzIxOTZmMzsKICAgICAgLS1wYXBlci1ibHVlLTYwMDogIzFlODhlNTsKICAgICAgLS1wYXBlci1ibHVlLTcwMDogIzE5NzZkMjsKICAgICAgLS1wYXBlci1ibHVlLTgwMDogIzE1NjVjMDsKICAgICAgLS1wYXBlci1ibHVlLTkwMDogIzBkNDdhMTsKICAgICAgLS1wYXBlci1ibHVlLWExMDA6ICM4MmIxZmY7CiAgICAgIC0tcGFwZXItYmx1ZS1hMjAwOiAjNDQ4YWZmOwogICAgICAtLXBhcGVyLWJsdWUtYTQwMDogIzI5NzlmZjsKICAgICAgLS1wYXBlci1ibHVlLWE3MDA6ICMyOTYyZmY7CgogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtNTA6ICNlMWY1ZmU7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS0xMDA6ICNiM2U1ZmM7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS0yMDA6ICM4MWQ0ZmE7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS0zMDA6ICM0ZmMzZjc7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS00MDA6ICMyOWI2ZjY7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS01MDA6ICMwM2E5ZjQ7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS02MDA6ICMwMzliZTU7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS03MDA6ICMwMjg4ZDE7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS04MDA6ICMwMjc3YmQ7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS05MDA6ICMwMTU3OWI7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS1hMTAwOiAjODBkOGZmOwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtYTIwMDogIzQwYzRmZjsKICAgICAgLS1wYXBlci1saWdodC1ibHVlLWE0MDA6ICMwMGIwZmY7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS1hNzAwOiAjMDA5MWVhOwoKICAgICAgLS1wYXBlci1jeWFuLTUwOiAjZTBmN2ZhOwogICAgICAtLXBhcGVyLWN5YW4tMTAwOiAjYjJlYmYyOwogICAgICAtLXBhcGVyLWN5YW4tMjAwOiAjODBkZWVhOwogICAgICAtLXBhcGVyLWN5YW4tMzAwOiAjNGRkMGUxOwogICAgICAtLXBhcGVyLWN5YW4tNDAwOiAjMjZjNmRhOwogICAgICAtLXBhcGVyLWN5YW4tNTAwOiAjMDBiY2Q0OwogICAgICAtLXBhcGVyLWN5YW4tNjAwOiAjMDBhY2MxOwogICAgICAtLXBhcGVyLWN5YW4tNzAwOiAjMDA5N2E3OwogICAgICAtLXBhcGVyLWN5YW4tODAwOiAjMDA4MzhmOwogICAgICAtLXBhcGVyLWN5YW4tOTAwOiAjMDA2MDY0OwogICAgICAtLXBhcGVyLWN5YW4tYTEwMDogIzg0ZmZmZjsKICAgICAgLS1wYXBlci1jeWFuLWEyMDA6ICMxOGZmZmY7CiAgICAgIC0tcGFwZXItY3lhbi1hNDAwOiAjMDBlNWZmOwogICAgICAtLXBhcGVyLWN5YW4tYTcwMDogIzAwYjhkNDsKCiAgICAgIC0tcGFwZXItdGVhbC01MDogI2UwZjJmMTsKICAgICAgLS1wYXBlci10ZWFsLTEwMDogI2IyZGZkYjsKICAgICAgLS1wYXBlci10ZWFsLTIwMDogIzgwY2JjNDsKICAgICAgLS1wYXBlci10ZWFsLTMwMDogIzRkYjZhYzsKICAgICAgLS1wYXBlci10ZWFsLTQwMDogIzI2YTY5YTsKICAgICAgLS1wYXBlci10ZWFsLTUwMDogIzAwOTY4ODsKICAgICAgLS1wYXBlci10ZWFsLTYwMDogIzAwODk3YjsKICAgICAgLS1wYXBlci10ZWFsLTcwMDogIzAwNzk2YjsKICAgICAgLS1wYXBlci10ZWFsLTgwMDogIzAwNjk1YzsKICAgICAgLS1wYXBlci10ZWFsLTkwMDogIzAwNGQ0MDsKICAgICAgLS1wYXBlci10ZWFsLWExMDA6ICNhN2ZmZWI7CiAgICAgIC0tcGFwZXItdGVhbC1hMjAwOiAjNjRmZmRhOwogICAgICAtLXBhcGVyLXRlYWwtYTQwMDogIzFkZTliNjsKICAgICAgLS1wYXBlci10ZWFsLWE3MDA6ICMwMGJmYTU7CgogICAgICAtLXBhcGVyLWdyZWVuLTUwOiAjZThmNWU5OwogICAgICAtLXBhcGVyLWdyZWVuLTEwMDogI2M4ZTZjOTsKICAgICAgLS1wYXBlci1ncmVlbi0yMDA6ICNhNWQ2YTc7CiAgICAgIC0tcGFwZXItZ3JlZW4tMzAwOiAjODFjNzg0OwogICAgICAtLXBhcGVyLWdyZWVuLTQwMDogIzY2YmI2YTsKICAgICAgLS1wYXBlci1ncmVlbi01MDA6ICM0Y2FmNTA7CiAgICAgIC0tcGFwZXItZ3JlZW4tNjAwOiAjNDNhMDQ3OwogICAgICAtLXBhcGVyLWdyZWVuLTcwMDogIzM4OGUzYzsKICAgICAgLS1wYXBlci1ncmVlbi04MDA6ICMyZTdkMzI7CiAgICAgIC0tcGFwZXItZ3JlZW4tOTAwOiAjMWI1ZTIwOwogICAgICAtLXBhcGVyLWdyZWVuLWExMDA6ICNiOWY2Y2E7CiAgICAgIC0tcGFwZXItZ3JlZW4tYTIwMDogIzY5ZjBhZTsKICAgICAgLS1wYXBlci1ncmVlbi1hNDAwOiAjMDBlNjc2OwogICAgICAtLXBhcGVyLWdyZWVuLWE3MDA6ICMwMGM4NTM7CgogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLTUwOiAjZjFmOGU5OwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLTEwMDogI2RjZWRjODsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi0yMDA6ICNjNWUxYTU7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tMzAwOiAjYWVkNTgxOwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLTQwMDogIzljY2M2NTsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi01MDA6ICM4YmMzNGE7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tNjAwOiAjN2NiMzQyOwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLTcwMDogIzY4OWYzODsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi04MDA6ICM1NThiMmY7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tOTAwOiAjMzM2OTFlOwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLWExMDA6ICNjY2ZmOTA7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tYTIwMDogI2IyZmY1OTsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi1hNDAwOiAjNzZmZjAzOwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLWE3MDA6ICM2NGRkMTc7CgogICAgICAtLXBhcGVyLWxpbWUtNTA6ICNmOWZiZTc7CiAgICAgIC0tcGFwZXItbGltZS0xMDA6ICNmMGY0YzM7CiAgICAgIC0tcGFwZXItbGltZS0yMDA6ICNlNmVlOWM7CiAgICAgIC0tcGFwZXItbGltZS0zMDA6ICNkY2U3NzU7CiAgICAgIC0tcGFwZXItbGltZS00MDA6ICNkNGUxNTc7CiAgICAgIC0tcGFwZXItbGltZS01MDA6ICNjZGRjMzk7CiAgICAgIC0tcGFwZXItbGltZS02MDA6ICNjMGNhMzM7CiAgICAgIC0tcGFwZXItbGltZS03MDA6ICNhZmI0MmI7CiAgICAgIC0tcGFwZXItbGltZS04MDA6ICM5ZTlkMjQ7CiAgICAgIC0tcGFwZXItbGltZS05MDA6ICM4Mjc3MTc7CiAgICAgIC0tcGFwZXItbGltZS1hMTAwOiAjZjRmZjgxOwogICAgICAtLXBhcGVyLWxpbWUtYTIwMDogI2VlZmY0MTsKICAgICAgLS1wYXBlci1saW1lLWE0MDA6ICNjNmZmMDA7CiAgICAgIC0tcGFwZXItbGltZS1hNzAwOiAjYWVlYTAwOwoKICAgICAgLS1wYXBlci15ZWxsb3ctNTA6ICNmZmZkZTc7CiAgICAgIC0tcGFwZXIteWVsbG93LTEwMDogI2ZmZjljNDsKICAgICAgLS1wYXBlci15ZWxsb3ctMjAwOiAjZmZmNTlkOwogICAgICAtLXBhcGVyLXllbGxvdy0zMDA6ICNmZmYxNzY7CiAgICAgIC0tcGFwZXIteWVsbG93LTQwMDogI2ZmZWU1ODsKICAgICAgLS1wYXBlci15ZWxsb3ctNTAwOiAjZmZlYjNiOwogICAgICAtLXBhcGVyLXllbGxvdy02MDA6ICNmZGQ4MzU7CiAgICAgIC0tcGFwZXIteWVsbG93LTcwMDogI2ZiYzAyZDsKICAgICAgLS1wYXBlci15ZWxsb3ctODAwOiAjZjlhODI1OwogICAgICAtLXBhcGVyLXllbGxvdy05MDA6ICNmNTdmMTc7CiAgICAgIC0tcGFwZXIteWVsbG93LWExMDA6ICNmZmZmOGQ7CiAgICAgIC0tcGFwZXIteWVsbG93LWEyMDA6ICNmZmZmMDA7CiAgICAgIC0tcGFwZXIteWVsbG93LWE0MDA6ICNmZmVhMDA7CiAgICAgIC0tcGFwZXIteWVsbG93LWE3MDA6ICNmZmQ2MDA7CgogICAgICAtLXBhcGVyLWFtYmVyLTUwOiAjZmZmOGUxOwogICAgICAtLXBhcGVyLWFtYmVyLTEwMDogI2ZmZWNiMzsKICAgICAgLS1wYXBlci1hbWJlci0yMDA6ICNmZmUwODI7CiAgICAgIC0tcGFwZXItYW1iZXItMzAwOiAjZmZkNTRmOwogICAgICAtLXBhcGVyLWFtYmVyLTQwMDogI2ZmY2EyODsKICAgICAgLS1wYXBlci1hbWJlci01MDA6ICNmZmMxMDc7CiAgICAgIC0tcGFwZXItYW1iZXItNjAwOiAjZmZiMzAwOwogICAgICAtLXBhcGVyLWFtYmVyLTcwMDogI2ZmYTAwMDsKICAgICAgLS1wYXBlci1hbWJlci04MDA6ICNmZjhmMDA7CiAgICAgIC0tcGFwZXItYW1iZXItOTAwOiAjZmY2ZjAwOwogICAgICAtLXBhcGVyLWFtYmVyLWExMDA6ICNmZmU1N2Y7CiAgICAgIC0tcGFwZXItYW1iZXItYTIwMDogI2ZmZDc0MDsKICAgICAgLS1wYXBlci1hbWJlci1hNDAwOiAjZmZjNDAwOwogICAgICAtLXBhcGVyLWFtYmVyLWE3MDA6ICNmZmFiMDA7CgogICAgICAtLXBhcGVyLW9yYW5nZS01MDogI2ZmZjNlMDsKICAgICAgLS1wYXBlci1vcmFuZ2UtMTAwOiAjZmZlMGIyOwogICAgICAtLXBhcGVyLW9yYW5nZS0yMDA6ICNmZmNjODA7CiAgICAgIC0tcGFwZXItb3JhbmdlLTMwMDogI2ZmYjc0ZDsKICAgICAgLS1wYXBlci1vcmFuZ2UtNDAwOiAjZmZhNzI2OwogICAgICAtLXBhcGVyLW9yYW5nZS01MDA6ICNmZjk4MDA7CiAgICAgIC0tcGFwZXItb3JhbmdlLTYwMDogI2ZiOGMwMDsKICAgICAgLS1wYXBlci1vcmFuZ2UtNzAwOiAjZjU3YzAwOwogICAgICAtLXBhcGVyLW9yYW5nZS04MDA6ICNlZjZjMDA7CiAgICAgIC0tcGFwZXItb3JhbmdlLTkwMDogI2U2NTEwMDsKICAgICAgLS1wYXBlci1vcmFuZ2UtYTEwMDogI2ZmZDE4MDsKICAgICAgLS1wYXBlci1vcmFuZ2UtYTIwMDogI2ZmYWI0MDsKICAgICAgLS1wYXBlci1vcmFuZ2UtYTQwMDogI2ZmOTEwMDsKICAgICAgLS1wYXBlci1vcmFuZ2UtYTcwMDogI2ZmNjUwMDsKCiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtNTA6ICNmYmU5ZTc7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtMTAwOiAjZmZjY2JjOwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLTIwMDogI2ZmYWI5MTsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS0zMDA6ICNmZjhhNjU7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtNDAwOiAjZmY3MDQzOwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLTUwMDogI2ZmNTcyMjsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS02MDA6ICNmNDUxMWU7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtNzAwOiAjZTY0YTE5OwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLTgwMDogI2Q4NDMxNTsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS05MDA6ICNiZjM2MGM7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtYTEwMDogI2ZmOWU4MDsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS1hMjAwOiAjZmY2ZTQwOwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLWE0MDA6ICNmZjNkMDA7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtYTcwMDogI2RkMmMwMDsKCiAgICAgIC0tcGFwZXItYnJvd24tNTA6ICNlZmViZTk7CiAgICAgIC0tcGFwZXItYnJvd24tMTAwOiAjZDdjY2M4OwogICAgICAtLXBhcGVyLWJyb3duLTIwMDogI2JjYWFhNDsKICAgICAgLS1wYXBlci1icm93bi0zMDA6ICNhMTg4N2Y7CiAgICAgIC0tcGFwZXItYnJvd24tNDAwOiAjOGQ2ZTYzOwogICAgICAtLXBhcGVyLWJyb3duLTUwMDogIzc5NTU0ODsKICAgICAgLS1wYXBlci1icm93bi02MDA6ICM2ZDRjNDE7CiAgICAgIC0tcGFwZXItYnJvd24tNzAwOiAjNWQ0MDM3OwogICAgICAtLXBhcGVyLWJyb3duLTgwMDogIzRlMzQyZTsKICAgICAgLS1wYXBlci1icm93bi05MDA6ICMzZTI3MjM7CgogICAgICAtLXBhcGVyLWdyZXktNTA6ICNmYWZhZmE7CiAgICAgIC0tcGFwZXItZ3JleS0xMDA6ICNmNWY1ZjU7CiAgICAgIC0tcGFwZXItZ3JleS0yMDA6ICNlZWVlZWU7CiAgICAgIC0tcGFwZXItZ3JleS0zMDA6ICNlMGUwZTA7CiAgICAgIC0tcGFwZXItZ3JleS00MDA6ICNiZGJkYmQ7CiAgICAgIC0tcGFwZXItZ3JleS01MDA6ICM5ZTllOWU7CiAgICAgIC0tcGFwZXItZ3JleS02MDA6ICM3NTc1NzU7CiAgICAgIC0tcGFwZXItZ3JleS03MDA6ICM2MTYxNjE7CiAgICAgIC0tcGFwZXItZ3JleS04MDA6ICM0MjQyNDI7CiAgICAgIC0tcGFwZXItZ3JleS05MDA6ICMyMTIxMjE7CgogICAgICAtLXBhcGVyLWJsdWUtZ3JleS01MDogI2VjZWZmMTsKICAgICAgLS1wYXBlci1ibHVlLWdyZXktMTAwOiAjY2ZkOGRjOwogICAgICAtLXBhcGVyLWJsdWUtZ3JleS0yMDA6ICNiMGJlYzU7CiAgICAgIC0tcGFwZXItYmx1ZS1ncmV5LTMwMDogIzkwYTRhZTsKICAgICAgLS1wYXBlci1ibHVlLWdyZXktNDAwOiAjNzg5MDljOwogICAgICAtLXBhcGVyLWJsdWUtZ3JleS01MDA6ICM2MDdkOGI7CiAgICAgIC0tcGFwZXItYmx1ZS1ncmV5LTYwMDogIzU0NmU3YTsKICAgICAgLS1wYXBlci1ibHVlLWdyZXktNzAwOiAjNDU1YTY0OwogICAgICAtLXBhcGVyLWJsdWUtZ3JleS04MDA6ICMzNzQ3NGY7CiAgICAgIC0tcGFwZXItYmx1ZS1ncmV5LTkwMDogIzI2MzIzODsKCiAgICAgIC8qIG9wYWNpdHkgZm9yIGRhcmsgdGV4dCBvbiBhIGxpZ2h0IGJhY2tncm91bmQgKi8KICAgICAgLS1kYXJrLWRpdmlkZXItb3BhY2l0eTogMC4xMjsKICAgICAgLS1kYXJrLWRpc2FibGVkLW9wYWNpdHk6IDAuMzg7IC8qIG9yIGhpbnQgdGV4dCBvciBpY29uICovCiAgICAgIC0tZGFyay1zZWNvbmRhcnktb3BhY2l0eTogMC41NDsKICAgICAgLS1kYXJrLXByaW1hcnktb3BhY2l0eTogMC44NzsKCiAgICAgIC8qIG9wYWNpdHkgZm9yIGxpZ2h0IHRleHQgb24gYSBkYXJrIGJhY2tncm91bmQgKi8KICAgICAgLS1saWdodC1kaXZpZGVyLW9wYWNpdHk6IDAuMTI7CiAgICAgIC0tbGlnaHQtZGlzYWJsZWQtb3BhY2l0eTogMC4zOyAvKiBvciBoaW50IHRleHQgb3IgaWNvbiAqLwogICAgICAtLWxpZ2h0LXNlY29uZGFyeS1vcGFjaXR5OiAwLjc7CiAgICAgIC0tbGlnaHQtcHJpbWFyeS1vcGFjaXR5OiAxLjA7CgogICAgfQoKICA8L3N0eWxlPgo8L2N1c3RvbS1zdHlsZT4KYDtlYS5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZGlzcGxheTogbm9uZTsiKSxkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGVhLmNvbnRlbnQpOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KY29uc3QgbmE9X2VgCjxjdXN0b20tc3R5bGU+CiAgPHN0eWxlIGlzPSJjdXN0b20tc3R5bGUiPgogICAgaHRtbCB7CiAgICAgIC8qCiAgICAgICAqIFlvdSBjYW4gdXNlIHRoZXNlIGdlbmVyaWMgdmFyaWFibGVzIGluIHlvdXIgZWxlbWVudHMgZm9yIGVhc3kgdGhlbWluZy4KICAgICAgICogRm9yIGV4YW1wbGUsIGlmIGFsbCB5b3VyIGVsZW1lbnRzIHVzZSBcYC0tcHJpbWFyeS10ZXh0LWNvbG9yXGAgYXMgaXRzIG1haW4KICAgICAgICogY29sb3IsIHRoZW4gc3dpdGNoaW5nIGZyb20gYSBsaWdodCB0byBhIGRhcmsgdGhlbWUgaXMganVzdCBhIG1hdHRlciBvZgogICAgICAgKiBjaGFuZ2luZyB0aGUgdmFsdWUgb2YgXGAtLXByaW1hcnktdGV4dC1jb2xvclxgIGluIHlvdXIgYXBwbGljYXRpb24uCiAgICAgICAqLwogICAgICAtLXByaW1hcnktdGV4dC1jb2xvcjogdmFyKC0tbGlnaHQtdGhlbWUtdGV4dC1jb2xvcik7CiAgICAgIC0tcHJpbWFyeS1iYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1saWdodC10aGVtZS1iYWNrZ3JvdW5kLWNvbG9yKTsKICAgICAgLS1zZWNvbmRhcnktdGV4dC1jb2xvcjogdmFyKC0tbGlnaHQtdGhlbWUtc2Vjb25kYXJ5LWNvbG9yKTsKICAgICAgLS1kaXNhYmxlZC10ZXh0LWNvbG9yOiB2YXIoLS1saWdodC10aGVtZS1kaXNhYmxlZC1jb2xvcik7CiAgICAgIC0tZGl2aWRlci1jb2xvcjogdmFyKC0tbGlnaHQtdGhlbWUtZGl2aWRlci1jb2xvcik7CiAgICAgIC0tZXJyb3ItY29sb3I6IHZhcigtLXBhcGVyLWRlZXAtb3JhbmdlLWE3MDApOwoKICAgICAgLyoKICAgICAgICogUHJpbWFyeSBhbmQgYWNjZW50IGNvbG9ycy4gQWxzbyBzZWUgY29sb3IuanMgZm9yIG1vcmUgY29sb3JzLgogICAgICAgKi8KICAgICAgLS1wcmltYXJ5LWNvbG9yOiB2YXIoLS1wYXBlci1pbmRpZ28tNTAwKTsKICAgICAgLS1saWdodC1wcmltYXJ5LWNvbG9yOiB2YXIoLS1wYXBlci1pbmRpZ28tMTAwKTsKICAgICAgLS1kYXJrLXByaW1hcnktY29sb3I6IHZhcigtLXBhcGVyLWluZGlnby03MDApOwoKICAgICAgLS1hY2NlbnQtY29sb3I6IHZhcigtLXBhcGVyLXBpbmstYTIwMCk7CiAgICAgIC0tbGlnaHQtYWNjZW50LWNvbG9yOiB2YXIoLS1wYXBlci1waW5rLWExMDApOwogICAgICAtLWRhcmstYWNjZW50LWNvbG9yOiB2YXIoLS1wYXBlci1waW5rLWE0MDApOwoKCiAgICAgIC8qCiAgICAgICAqIE1hdGVyaWFsIERlc2lnbiBMaWdodCBiYWNrZ3JvdW5kIHRoZW1lCiAgICAgICAqLwogICAgICAtLWxpZ2h0LXRoZW1lLWJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7CiAgICAgIC0tbGlnaHQtdGhlbWUtYmFzZS1jb2xvcjogIzAwMDAwMDsKICAgICAgLS1saWdodC10aGVtZS10ZXh0LWNvbG9yOiB2YXIoLS1wYXBlci1ncmV5LTkwMCk7CiAgICAgIC0tbGlnaHQtdGhlbWUtc2Vjb25kYXJ5LWNvbG9yOiAjNzM3MzczOyAgLyogZm9yIHNlY29uZGFyeSB0ZXh0IGFuZCBpY29ucyAqLwogICAgICAtLWxpZ2h0LXRoZW1lLWRpc2FibGVkLWNvbG9yOiAjOWI5YjliOyAgLyogZGlzYWJsZWQvaGludCB0ZXh0ICovCiAgICAgIC0tbGlnaHQtdGhlbWUtZGl2aWRlci1jb2xvcjogI2RiZGJkYjsKCiAgICAgIC8qCiAgICAgICAqIE1hdGVyaWFsIERlc2lnbiBEYXJrIGJhY2tncm91bmQgdGhlbWUKICAgICAgICovCiAgICAgIC0tZGFyay10aGVtZS1iYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1ncmV5LTkwMCk7CiAgICAgIC0tZGFyay10aGVtZS1iYXNlLWNvbG9yOiAjZmZmZmZmOwogICAgICAtLWRhcmstdGhlbWUtdGV4dC1jb2xvcjogI2ZmZmZmZjsKICAgICAgLS1kYXJrLXRoZW1lLXNlY29uZGFyeS1jb2xvcjogI2JjYmNiYzsgIC8qIGZvciBzZWNvbmRhcnkgdGV4dCBhbmQgaWNvbnMgKi8KICAgICAgLS1kYXJrLXRoZW1lLWRpc2FibGVkLWNvbG9yOiAjNjQ2NDY0OyAgLyogZGlzYWJsZWQvaGludCB0ZXh0ICovCiAgICAgIC0tZGFyay10aGVtZS1kaXZpZGVyLWNvbG9yOiAjM2MzYzNjOwoKICAgICAgLyoKICAgICAgICogRGVwcmVjYXRlZCB2YWx1ZXMgYmVjYXVzZSBvZiB0aGVpciBjb25mdXNpbmcgbmFtZXMuCiAgICAgICAqLwogICAgICAtLXRleHQtcHJpbWFyeS1jb2xvcjogdmFyKC0tZGFyay10aGVtZS10ZXh0LWNvbG9yKTsKICAgICAgLS1kZWZhdWx0LXByaW1hcnktY29sb3I6IHZhcigtLXByaW1hcnktY29sb3IpOwogICAgfQogIDwvc3R5bGU+CjwvY3VzdG9tLXN0eWxlPmA7bmEuc2V0QXR0cmlidXRlKCJzdHlsZSIsImRpc3BsYXk6IG5vbmU7IiksZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChuYS5jb250ZW50KTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCmNvbnN0IGlhPXtwcm9wZXJ0aWVzOntuYW1lOnt0eXBlOlN0cmluZ30sdmFsdWU6e25vdGlmeTohMCx0eXBlOlN0cmluZ30scmVxdWlyZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX19LGF0dGFjaGVkOmZ1bmN0aW9uKCl7fSxkZXRhY2hlZDpmdW5jdGlvbigpe319OwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi9sZXQgcmE9bnVsbDtjb25zdCBvYT17cHJvcGVydGllczp7dmFsaWRhdG9yOnt0eXBlOlN0cmluZ30saW52YWxpZDp7bm90aWZ5OiEwLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCx0eXBlOkJvb2xlYW4sdmFsdWU6ITEsb2JzZXJ2ZXI6Il9pbnZhbGlkQ2hhbmdlZCJ9fSxyZWdpc3RlcmVkOmZ1bmN0aW9uKCl7cmE9bmV3IGJvKHt0eXBlOiJ2YWxpZGF0b3IifSl9LF9pbnZhbGlkQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuaW52YWxpZD90aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1pbnZhbGlkIiwidHJ1ZSIpOnRoaXMucmVtb3ZlQXR0cmlidXRlKCJhcmlhLWludmFsaWQiKX0sZ2V0IF92YWxpZGF0b3IoKXtyZXR1cm4gcmEmJnJhLmJ5S2V5KHRoaXMudmFsaWRhdG9yKX0saGFzVmFsaWRhdG9yOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXRoaXMuX3ZhbGlkYXRvcn0sdmFsaWRhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW52YWxpZD12b2lkIDA9PT10JiZ2b2lkIDAhPT10aGlzLnZhbHVlPyF0aGlzLl9nZXRWYWxpZGl0eSh0aGlzLnZhbHVlKTohdGhpcy5fZ2V0VmFsaWRpdHkodCksIXRoaXMuaW52YWxpZH0sX2dldFZhbGlkaXR5OmZ1bmN0aW9uKHQpe3JldHVybiF0aGlzLmhhc1ZhbGlkYXRvcigpfHx0aGlzLl92YWxpZGF0b3IudmFsaWRhdGUodCl9fSxhYT17cHJvcGVydGllczp7Y2hlY2tlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9jaGVja2VkQ2hhbmdlZCJ9LHRvZ2dsZXM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMCxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LHZhbHVlOnt0eXBlOlN0cmluZyx2YWx1ZToib24iLG9ic2VydmVyOiJfdmFsdWVDaGFuZ2VkIn19LG9ic2VydmVyczpbIl9yZXF1aXJlZENoYW5nZWQocmVxdWlyZWQpIl0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuX2hhc0lyb25DaGVja2VkRWxlbWVudEJlaGF2aW9yPSEwfSxfZ2V0VmFsaWRpdHk6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGlzYWJsZWR8fCF0aGlzLnJlcXVpcmVkfHx0aGlzLmNoZWNrZWR9LF9yZXF1aXJlZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLnJlcXVpcmVkP3RoaXMuc2V0QXR0cmlidXRlKCJhcmlhLXJlcXVpcmVkIiwidHJ1ZSIpOnRoaXMucmVtb3ZlQXR0cmlidXRlKCJhcmlhLXJlcXVpcmVkIil9LF9jaGVja2VkQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuYWN0aXZlPXRoaXMuY2hlY2tlZCx0aGlzLmZpcmUoImlyb24tY2hhbmdlIil9LF92YWx1ZUNoYW5nZWQ6ZnVuY3Rpb24oKXtudWxsPT10aGlzLnZhbHVlJiYodGhpcy52YWx1ZT0ib24iKX19LHNhPXtvYnNlcnZlcnM6WyJfZm9jdXNlZENoYW5nZWQocmVjZWl2ZWRGb2N1c0Zyb21LZXlib2FyZCkiXSxfZm9jdXNlZENoYW5nZWQ6ZnVuY3Rpb24odCl7dCYmdGhpcy5lbnN1cmVSaXBwbGUoKSx0aGlzLmhhc1JpcHBsZSgpJiYodGhpcy5fcmlwcGxlLmhvbGREb3duPXQpfSxfY3JlYXRlUmlwcGxlOmZ1bmN0aW9uKCl7dmFyIHQ9Wm8uX2NyZWF0ZVJpcHBsZSgpO3JldHVybiB0LmlkPSJpbmsiLHQuc2V0QXR0cmlidXRlKCJjZW50ZXIiLCIiKSx0LmNsYXNzTGlzdC5hZGQoImNpcmNsZSIpLHR9fSxsYT1bWW8sV28sWm8sc2FdLGNhPVtsYSxbaWEsb2EsYWFdLHtfY2hlY2tlZENoYW5nZWQ6ZnVuY3Rpb24oKXthYS5fY2hlY2tlZENoYW5nZWQuY2FsbCh0aGlzKSx0aGlzLmhhc1JpcHBsZSgpJiYodGhpcy5jaGVja2VkP3RoaXMuX3JpcHBsZS5zZXRBdHRyaWJ1dGUoImNoZWNrZWQiLCIiKTp0aGlzLl9yaXBwbGUucmVtb3ZlQXR0cmlidXRlKCJjaGVja2VkIikpfSxfYnV0dG9uU3RhdGVDaGFuZ2VkOmZ1bmN0aW9uKCl7Wm8uX2J1dHRvblN0YXRlQ2hhbmdlZC5jYWxsKHRoaXMpLHRoaXMuZGlzYWJsZWR8fHRoaXMuaXNBdHRhY2hlZCYmKHRoaXMuY2hlY2tlZD10aGlzLmFjdGl2ZSl9fV0sdWE9X2VgPHN0eWxlPgogIDpob3N0IHsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtc2l6ZTogdmFyKC0tcGFwZXItY2hlY2tib3gtc2l6ZSwgMThweCk7CiAgICAvKiAtMXB4IGlzIGEgc2VudGluZWwgZm9yIHRoZSBkZWZhdWx0IGFuZCBpcyByZXBsYWNlZCBpbiBcYGF0dGFjaGVkXGAuICovCiAgICAtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtaW5rLXNpemU6IHZhcigtLXBhcGVyLWNoZWNrYm94LWluay1zaXplLCAtMXB4KTsKICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CiAgICBsaW5lLWhlaWdodDogMDsKICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgfQoKICA6aG9zdChbaGlkZGVuXSkgewogICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogIH0KCiAgOmhvc3QoOmZvY3VzKSB7CiAgICBvdXRsaW5lOiBub25lOwogIH0KCiAgLmhpZGRlbiB7CiAgICBkaXNwbGF5OiBub25lOwogIH0KCiAgI2NoZWNrYm94Q29udGFpbmVyIHsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHdpZHRoOiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LXNpemUpOwogICAgaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LXNpemUpOwogICAgbWluLXdpZHRoOiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LXNpemUpOwogICAgbWFyZ2luOiB2YXIoLS1wYXBlci1jaGVja2JveC1tYXJnaW4sIGluaXRpYWwpOwogICAgdmVydGljYWwtYWxpZ246IHZhcigtLXBhcGVyLWNoZWNrYm94LXZlcnRpY2FsLWFsaWduLCBtaWRkbGUpOwogICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWJhY2tncm91bmQtY29sb3IsIHRyYW5zcGFyZW50KTsKICB9CgogICNpbmsgewogICAgcG9zaXRpb246IGFic29sdXRlOwoKICAgIC8qIENlbnRlciB0aGUgcmlwcGxlIGluIHRoZSBjaGVja2JveCBieSBuZWdhdGl2ZSBvZmZzZXR0aW5nIGl0IGJ5CiAgICAgKiAoaW5rV2lkdGggLSByaXBwbGVXaWR0aCkgLyAyICovCiAgICB0b3A6IGNhbGMoMHB4IC0gKHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtaW5rLXNpemUpIC0gdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1zaXplKSkgLyAyKTsKICAgIGxlZnQ6IGNhbGMoMHB4IC0gKHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtaW5rLXNpemUpIC0gdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1zaXplKSkgLyAyKTsKICAgIHdpZHRoOiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LWluay1zaXplKTsKICAgIGhlaWdodDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1pbmstc2l6ZSk7CiAgICBjb2xvcjogdmFyKC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWluay1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CiAgICBvcGFjaXR5OiAwLjY7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICB9CgogICNpbms6ZGlyKHJ0bCkgewogICAgcmlnaHQ6IGNhbGMoMHB4IC0gKHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtaW5rLXNpemUpIC0gdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1zaXplKSkgLyAyKTsKICAgIGxlZnQ6IGF1dG87CiAgfQoKICAjaW5rW2NoZWNrZWRdIHsKICAgIGNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWluay1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwogIH0KCiAgI2NoZWNrYm94IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBib3JkZXI6IHNvbGlkIDJweDsKICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgLXdlYmtpdC10cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDE0MG1zLCBib3JkZXItY29sb3IgMTQwbXM7CiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDE0MG1zLCBib3JkZXItY29sb3IgMTQwbXM7CgogICAgLXdlYmtpdC10cmFuc2l0aW9uLWR1cmF0aW9uOiB2YXIoLS1wYXBlci1jaGVja2JveC1hbmltYXRpb24tZHVyYXRpb24sIDE0MG1zKTsKICAgIHRyYW5zaXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLWNoZWNrYm94LWFuaW1hdGlvbi1kdXJhdGlvbiwgMTQwbXMpOwogIH0KCiAgLyogY2hlY2tib3ggY2hlY2tlZCBhbmltYXRpb25zICovCiAgI2NoZWNrYm94LmNoZWNrZWQgI2NoZWNrbWFyayB7CiAgICAtd2Via2l0LWFuaW1hdGlvbjogY2hlY2ttYXJrLWV4cGFuZCAxNDBtcyBlYXNlLW91dCBmb3J3YXJkczsKICAgIGFuaW1hdGlvbjogY2hlY2ttYXJrLWV4cGFuZCAxNDBtcyBlYXNlLW91dCBmb3J3YXJkczsKCiAgICAtd2Via2l0LWFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItY2hlY2tib3gtYW5pbWF0aW9uLWR1cmF0aW9uLCAxNDBtcyk7CiAgICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLWNoZWNrYm94LWFuaW1hdGlvbi1kdXJhdGlvbiwgMTQwbXMpOwogIH0KCiAgQC13ZWJraXQta2V5ZnJhbWVzIGNoZWNrbWFyay1leHBhbmQgewogICAgMCUgewogICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMCwgMCkgcm90YXRlKDQ1ZGVnKTsKICAgIH0KICAgIDEwMCUgewogICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMSwgMSkgcm90YXRlKDQ1ZGVnKTsKICAgIH0KICB9CgogIEBrZXlmcmFtZXMgY2hlY2ttYXJrLWV4cGFuZCB7CiAgICAwJSB7CiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMCwgMCkgcm90YXRlKDQ1ZGVnKTsKICAgIH0KICAgIDEwMCUgewogICAgICB0cmFuc2Zvcm06IHNjYWxlKDEsIDEpIHJvdGF0ZSg0NWRlZyk7CiAgICB9CiAgfQoKICAjY2hlY2tib3guY2hlY2tlZCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWNvbG9yLCB2YXIoLS1wcmltYXJ5LWNvbG9yKSk7CiAgICBib3JkZXItY29sb3I6IHZhcigtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKICB9CgogICNjaGVja21hcmsgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgd2lkdGg6IDM2JTsKICAgIGhlaWdodDogNzAlOwogICAgYm9yZGVyLXN0eWxlOiBzb2xpZDsKICAgIGJvcmRlci10b3A6IG5vbmU7CiAgICBib3JkZXItbGVmdDogbm9uZTsKICAgIGJvcmRlci1yaWdodC13aWR0aDogY2FsYygyLzE1ICogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1zaXplKSk7CiAgICBib3JkZXItYm90dG9tLXdpZHRoOiBjYWxjKDIvMTUgKiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LXNpemUpKTsKICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcGFwZXItY2hlY2tib3gtY2hlY2ttYXJrLWNvbG9yLCB3aGl0ZSk7CiAgICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IDk3JSA4NiU7CiAgICB0cmFuc2Zvcm0tb3JpZ2luOiA5NyUgODYlOwogICAgYm94LXNpemluZzogY29udGVudC1ib3g7IC8qIHByb3RlY3QgYWdhaW5zdCBwYWdlLWxldmVsIGJveC1zaXppbmcgKi8KICB9CgogICNjaGVja21hcms6ZGlyKHJ0bCkgewogICAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiA1MCUgMTQlOwogICAgdHJhbnNmb3JtLW9yaWdpbjogNTAlIDE0JTsKICB9CgogIC8qIGxhYmVsICovCiAgI2NoZWNrYm94TGFiZWwgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAgIHBhZGRpbmctbGVmdDogdmFyKC0tcGFwZXItY2hlY2tib3gtbGFiZWwtc3BhY2luZywgOHB4KTsKICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7CiAgICBsaW5lLWhlaWdodDogbm9ybWFsOwogICAgY29sb3I6IHZhcigtLXBhcGVyLWNoZWNrYm94LWxhYmVsLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgIEBhcHBseSAtLXBhcGVyLWNoZWNrYm94LWxhYmVsOwogIH0KCiAgOmhvc3QoW2NoZWNrZWRdKSAjY2hlY2tib3hMYWJlbCB7CiAgICBjb2xvcjogdmFyKC0tcGFwZXItY2hlY2tib3gtbGFiZWwtY2hlY2tlZC1jb2xvciwgdmFyKC0tcGFwZXItY2hlY2tib3gtbGFiZWwtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpKTsKICAgIEBhcHBseSAtLXBhcGVyLWNoZWNrYm94LWxhYmVsLWNoZWNrZWQ7CiAgfQoKICAjY2hlY2tib3hMYWJlbDpkaXIocnRsKSB7CiAgICBwYWRkaW5nLXJpZ2h0OiB2YXIoLS1wYXBlci1jaGVja2JveC1sYWJlbC1zcGFjaW5nLCA4cHgpOwogICAgcGFkZGluZy1sZWZ0OiAwOwogIH0KCiAgI2NoZWNrYm94TGFiZWxbaGlkZGVuXSB7CiAgICBkaXNwbGF5OiBub25lOwogIH0KCiAgLyogZGlzYWJsZWQgc3RhdGUgKi8KCiAgOmhvc3QoW2Rpc2FibGVkXSkgI2NoZWNrYm94IHsKICAgIG9wYWNpdHk6IDAuNTsKICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICB9CgogIDpob3N0KFtkaXNhYmxlZF1bY2hlY2tlZF0pICNjaGVja2JveCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgb3BhY2l0eTogMC41OwogIH0KCiAgOmhvc3QoW2Rpc2FibGVkXSkgI2NoZWNrYm94TGFiZWwgIHsKICAgIG9wYWNpdHk6IDAuNjU7CiAgfQoKICAvKiBpbnZhbGlkIHN0YXRlICovCiAgI2NoZWNrYm94LmludmFsaWQ6bm90KC5jaGVja2VkKSB7CiAgICBib3JkZXItY29sb3I6IHZhcigtLXBhcGVyLWNoZWNrYm94LWVycm9yLWNvbG9yLCB2YXIoLS1lcnJvci1jb2xvcikpOwogIH0KPC9zdHlsZT4KCjxkaXYgaWQ9ImNoZWNrYm94Q29udGFpbmVyIj4KICA8ZGl2IGlkPSJjaGVja2JveCIgY2xhc3MkPSJbW19jb21wdXRlQ2hlY2tib3hDbGFzcyhjaGVja2VkLCBpbnZhbGlkKV1dIj4KICAgIDxkaXYgaWQ9ImNoZWNrbWFyayIgY2xhc3MkPSJbW19jb21wdXRlQ2hlY2ttYXJrQ2xhc3MoY2hlY2tlZCldXSI+PC9kaXY+CiAgPC9kaXY+CjwvZGl2PgoKPGRpdiBpZD0iY2hlY2tib3hMYWJlbCI+PHNsb3Q+PC9zbG90PjwvZGl2PmA7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KbGV0IGhhO3VhLnNldEF0dHJpYnV0ZSgic3RyaXAtd2hpdGVzcGFjZSIsIiIpLElyKHtfdGVtcGxhdGU6dWEsaXM6InBhcGVyLWNoZWNrYm94IixiZWhhdmlvcnM6W2NhXSxob3N0QXR0cmlidXRlczp7cm9sZToiY2hlY2tib3giLCJhcmlhLWNoZWNrZWQiOiExLHRhYmluZGV4OjB9LHByb3BlcnRpZXM6e2FyaWFBY3RpdmVBdHRyaWJ1dGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJhcmlhLWNoZWNrZWQifX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXtraSh0aGlzLChmdW5jdGlvbigpe2lmKCItMXB4Ij09PXRoaXMuZ2V0Q29tcHV0ZWRTdHlsZVZhbHVlKCItLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtaW5rLXNpemUiKS50cmltKCkpe3ZhciB0PXRoaXMuZ2V0Q29tcHV0ZWRTdHlsZVZhbHVlKCItLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtc2l6ZSIpLnRyaW0oKSxlPSJweCIsbj10Lm1hdGNoKC9bQS1aYS16XSskLyk7bnVsbCE9PW4mJihlPW5bMF0pO3ZhciBpPXBhcnNlRmxvYXQodCkscj04LzMqaTsicHgiPT09ZSYmKHI9TWF0aC5mbG9vcihyKSklMiE9aSUyJiZyKyssdGhpcy51cGRhdGVTdHlsZXMoeyItLXBhcGVyLWNoZWNrYm94LWluay1zaXplIjpyK2V9KX19KSl9LF9jb21wdXRlQ2hlY2tib3hDbGFzczpmdW5jdGlvbih0LGUpe3ZhciBuPSIiO3JldHVybiB0JiYobis9ImNoZWNrZWQgIiksZSYmKG4rPSJpbnZhbGlkIiksbn0sX2NvbXB1dGVDaGVja21hcmtDbGFzczpmdW5jdGlvbih0KXtyZXR1cm4gdD8iIjoiaGlkZGVuIn0sX2NyZWF0ZVJpcHBsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yaXBwbGVDb250YWluZXI9dGhpcy4kLmNoZWNrYm94Q29udGFpbmVyLHNhLl9jcmVhdGVSaXBwbGUuY2FsbCh0aGlzKX19KTtjb25zdCBkYT17cHJvcGVydGllczp7c2l6aW5nVGFyZ2V0Ont0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzfX0sZml0SW50bzp7dHlwZTpPYmplY3QsdmFsdWU6d2luZG93fSxub092ZXJsYXA6e3R5cGU6Qm9vbGVhbn0scG9zaXRpb25UYXJnZXQ6e3R5cGU6RWxlbWVudH0saG9yaXpvbnRhbEFsaWduOnt0eXBlOlN0cmluZ30sdmVydGljYWxBbGlnbjp7dHlwZTpTdHJpbmd9LGR5bmFtaWNBbGlnbjp7dHlwZTpCb29sZWFufSxob3Jpem9udGFsT2Zmc2V0Ont0eXBlOk51bWJlcix2YWx1ZTowLG5vdGlmeTohMH0sdmVydGljYWxPZmZzZXQ6e3R5cGU6TnVtYmVyLHZhbHVlOjAsbm90aWZ5OiEwfSxhdXRvRml0T25BdHRhY2g6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sZXhwYW5kU2l6aW5nVGFyZ2V0Rm9yU2Nyb2xsYmFyczp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfZml0SW5mbzp7dHlwZTpPYmplY3R9fSxnZXQgX2ZpdFdpZHRoKCl7cmV0dXJuIHRoaXMuZml0SW50bz09PXdpbmRvdz90aGlzLmZpdEludG8uaW5uZXJXaWR0aDp0aGlzLmZpdEludG8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGh9LGdldCBfZml0SGVpZ2h0KCl7cmV0dXJuIHRoaXMuZml0SW50bz09PXdpbmRvdz90aGlzLmZpdEludG8uaW5uZXJIZWlnaHQ6dGhpcy5maXRJbnRvLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodH0sZ2V0IF9maXRMZWZ0KCl7cmV0dXJuIHRoaXMuZml0SW50bz09PXdpbmRvdz8wOnRoaXMuZml0SW50by5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0fSxnZXQgX2ZpdFRvcCgpe3JldHVybiB0aGlzLmZpdEludG89PT13aW5kb3c/MDp0aGlzLmZpdEludG8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wfSxnZXQgX2RlZmF1bHRQb3NpdGlvblRhcmdldCgpe3ZhciB0PXFpKHRoaXMpLnBhcmVudE5vZGU7cmV0dXJuIHQmJnQubm9kZVR5cGU9PT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUmJih0PXQuaG9zdCksdH0sZ2V0IF9sb2NhbGVIb3Jpem9udGFsQWxpZ24oKXtpZih0aGlzLl9pc1JUTCl7aWYoInJpZ2h0Ij09PXRoaXMuaG9yaXpvbnRhbEFsaWduKXJldHVybiJsZWZ0IjtpZigibGVmdCI9PT10aGlzLmhvcml6b250YWxBbGlnbilyZXR1cm4icmlnaHQifXJldHVybiB0aGlzLmhvcml6b250YWxBbGlnbn0sZ2V0IF9fc2hvdWxkUG9zaXRpb24oKXtyZXR1cm4odGhpcy5ob3Jpem9udGFsQWxpZ258fHRoaXMudmVydGljYWxBbGlnbikmJnRoaXMucG9zaXRpb25UYXJnZXR9LGdldCBfaXNSVEwoKXtyZXR1cm4gdm9pZCAwPT09dGhpcy5fbWVtb2l6ZWRJc1JUTCYmKHRoaXMuX21lbW9pemVkSXNSVEw9InJ0bCI9PXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMpLmRpcmVjdGlvbiksdGhpcy5fbWVtb2l6ZWRJc1JUTH0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLnBvc2l0aW9uVGFyZ2V0PXRoaXMucG9zaXRpb25UYXJnZXR8fHRoaXMuX2RlZmF1bHRQb3NpdGlvblRhcmdldCx0aGlzLmF1dG9GaXRPbkF0dGFjaCYmKCJub25lIj09PXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMpLmRpc3BsYXk/c2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuZml0KCl9LmJpbmQodGhpcykpOih3aW5kb3cuU2hhZHlET00mJlNoYWR5RE9NLmZsdXNoKCksdGhpcy5maXQoKSkpfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX19kZWZlcnJlZEZpdCYmKGNsZWFyVGltZW91dCh0aGlzLl9fZGVmZXJyZWRGaXQpLHRoaXMuX19kZWZlcnJlZEZpdD1udWxsKX0sZml0OmZ1bmN0aW9uKCl7dGhpcy5wb3NpdGlvbigpLHRoaXMuY29uc3RyYWluKCksdGhpcy5jZW50ZXIoKX0sX2Rpc2NvdmVySW5mbzpmdW5jdGlvbigpe2lmKCF0aGlzLl9maXRJbmZvKXt2YXIgdD13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzKSxlPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuc2l6aW5nVGFyZ2V0KTt0aGlzLl9maXRJbmZvPXtpbmxpbmVTdHlsZTp7dG9wOnRoaXMuc3R5bGUudG9wfHwiIixsZWZ0OnRoaXMuc3R5bGUubGVmdHx8IiIscG9zaXRpb246dGhpcy5zdHlsZS5wb3NpdGlvbnx8IiJ9LHNpemVySW5saW5lU3R5bGU6e21heFdpZHRoOnRoaXMuc2l6aW5nVGFyZ2V0LnN0eWxlLm1heFdpZHRofHwiIixtYXhIZWlnaHQ6dGhpcy5zaXppbmdUYXJnZXQuc3R5bGUubWF4SGVpZ2h0fHwiIixib3hTaXppbmc6dGhpcy5zaXppbmdUYXJnZXQuc3R5bGUuYm94U2l6aW5nfHwiIn0scG9zaXRpb25lZEJ5Ont2ZXJ0aWNhbGx5OiJhdXRvIiE9PXQudG9wPyJ0b3AiOiJhdXRvIiE9PXQuYm90dG9tPyJib3R0b20iOm51bGwsaG9yaXpvbnRhbGx5OiJhdXRvIiE9PXQubGVmdD8ibGVmdCI6ImF1dG8iIT09dC5yaWdodD8icmlnaHQiOm51bGx9LHNpemVkQnk6e2hlaWdodDoibm9uZSIhPT1lLm1heEhlaWdodCx3aWR0aDoibm9uZSIhPT1lLm1heFdpZHRoLG1pbldpZHRoOnBhcnNlSW50KGUubWluV2lkdGgsMTApfHwwLG1pbkhlaWdodDpwYXJzZUludChlLm1pbkhlaWdodCwxMCl8fDB9LG1hcmdpbjp7dG9wOnBhcnNlSW50KHQubWFyZ2luVG9wLDEwKXx8MCxyaWdodDpwYXJzZUludCh0Lm1hcmdpblJpZ2h0LDEwKXx8MCxib3R0b206cGFyc2VJbnQodC5tYXJnaW5Cb3R0b20sMTApfHwwLGxlZnQ6cGFyc2VJbnQodC5tYXJnaW5MZWZ0LDEwKXx8MH19fX0scmVzZXRGaXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9maXRJbmZvfHx7fTtmb3IodmFyIGUgaW4gdC5zaXplcklubGluZVN0eWxlKXRoaXMuc2l6aW5nVGFyZ2V0LnN0eWxlW2VdPXQuc2l6ZXJJbmxpbmVTdHlsZVtlXTtmb3IodmFyIGUgaW4gdC5pbmxpbmVTdHlsZSl0aGlzLnN0eWxlW2VdPXQuaW5saW5lU3R5bGVbZV07dGhpcy5fZml0SW5mbz1udWxsfSxyZWZpdDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuc2l6aW5nVGFyZ2V0LnNjcm9sbExlZnQsZT10aGlzLnNpemluZ1RhcmdldC5zY3JvbGxUb3A7dGhpcy5yZXNldEZpdCgpLHRoaXMuZml0KCksdGhpcy5zaXppbmdUYXJnZXQuc2Nyb2xsTGVmdD10LHRoaXMuc2l6aW5nVGFyZ2V0LnNjcm9sbFRvcD1lfSxwb3NpdGlvbjpmdW5jdGlvbigpe2lmKCF0aGlzLl9fc2hvdWxkUG9zaXRpb24pcmV0dXJuO3RoaXMuX2Rpc2NvdmVySW5mbygpLHdpbmRvdy5TaGFkeURPTSYmd2luZG93LlNoYWR5RE9NLmZsdXNoKCksdGhpcy5zdHlsZS5wb3NpdGlvbj0iZml4ZWQiLHRoaXMuc2l6aW5nVGFyZ2V0LnN0eWxlLmJveFNpemluZz0iYm9yZGVyLWJveCIsdGhpcy5zdHlsZS5sZWZ0PSIwcHgiLHRoaXMuc3R5bGUudG9wPSIwcHgiO3ZhciB0PXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZT10aGlzLl9fZ2V0Tm9ybWFsaXplZFJlY3QodGhpcy5wb3NpdGlvblRhcmdldCksbj10aGlzLl9fZ2V0Tm9ybWFsaXplZFJlY3QodGhpcy5maXRJbnRvKTtsZXQgaSxyLG8sYTt0aGlzLmV4cGFuZFNpemluZ1RhcmdldEZvclNjcm9sbGJhcnMmJihpPXRoaXMuc2l6aW5nVGFyZ2V0Lm9mZnNldFdpZHRoLHI9dGhpcy5zaXppbmdUYXJnZXQub2Zmc2V0SGVpZ2h0LG89dGhpcy5zaXppbmdUYXJnZXQuY2xpZW50V2lkdGgsYT10aGlzLnNpemluZ1RhcmdldC5jbGllbnRIZWlnaHQpO3ZhciBzPXRoaXMuX2ZpdEluZm8ubWFyZ2luLGw9dGhpcy5fX2dldFBvc2l0aW9uKHRoaXMuX2xvY2FsZUhvcml6b250YWxBbGlnbix0aGlzLnZlcnRpY2FsQWxpZ24se3dpZHRoOnQud2lkdGgrcy5sZWZ0K3MucmlnaHQsaGVpZ2h0OnQuaGVpZ2h0K3MudG9wK3MuYm90dG9tfSx0LGUsbiksYz1sLmxlZnQrcy5sZWZ0LHU9bC50b3Arcy50b3AsaD1NYXRoLm1pbihuLnJpZ2h0LXMucmlnaHQsYyt0LndpZHRoKSxkPU1hdGgubWluKG4uYm90dG9tLXMuYm90dG9tLHUrdC5oZWlnaHQpO2M9TWF0aC5tYXgobi5sZWZ0K3MubGVmdCxNYXRoLm1pbihjLGgtdGhpcy5fZml0SW5mby5zaXplZEJ5Lm1pbldpZHRoKSksdT1NYXRoLm1heChuLnRvcCtzLnRvcCxNYXRoLm1pbih1LGQtdGhpcy5fZml0SW5mby5zaXplZEJ5Lm1pbkhlaWdodCkpO2NvbnN0IHA9TWF0aC5tYXgoaC1jLHRoaXMuX2ZpdEluZm8uc2l6ZWRCeS5taW5XaWR0aCksZj1NYXRoLm1heChkLXUsdGhpcy5fZml0SW5mby5zaXplZEJ5Lm1pbkhlaWdodCk7dGhpcy5zaXppbmdUYXJnZXQuc3R5bGUubWF4V2lkdGg9cCsicHgiLHRoaXMuc2l6aW5nVGFyZ2V0LnN0eWxlLm1heEhlaWdodD1mKyJweCI7Y29uc3QgbT1jLXQubGVmdCxnPXUtdC50b3A7aWYodGhpcy5zdHlsZS5sZWZ0PWAke219cHhgLHRoaXMuc3R5bGUudG9wPWAke2d9cHhgLHRoaXMuZXhwYW5kU2l6aW5nVGFyZ2V0Rm9yU2Nyb2xsYmFycyl7Y29uc3QgdD10aGlzLnNpemluZ1RhcmdldC5vZmZzZXRIZWlnaHQsZT10LXRoaXMuc2l6aW5nVGFyZ2V0LmNsaWVudEhlaWdodC0oci1hKTtpZihlPjApe2NvbnN0IGk9TWF0aC5taW4obi5oZWlnaHQtcy50b3Atcy5ib3R0b20sZitlKTt0aGlzLnNpemluZ1RhcmdldC5zdHlsZS5tYXhIZWlnaHQ9YCR7aX1weGA7Y29uc3Qgcj10aGlzLnNpemluZ1RhcmdldC5vZmZzZXRIZWlnaHQsbz1yLXQ7bGV0IGE7InRvcCI9PT1sLnZlcnRpY2FsQWxpZ24/YT1nOiJtaWRkbGUiPT09bC52ZXJ0aWNhbEFsaWduP2E9Zy1vLzI6ImJvdHRvbSI9PT1sLnZlcnRpY2FsQWxpZ24mJihhPWctbyksYT1NYXRoLm1heChuLnRvcCtzLnRvcCxNYXRoLm1pbihhLG4uYm90dG9tLXMuYm90dG9tLXIpKSx0aGlzLnN0eWxlLnRvcD1gJHthfXB4YH1jb25zdCBjPXRoaXMuc2l6aW5nVGFyZ2V0Lm9mZnNldFdpZHRoLHU9Yy10aGlzLnNpemluZ1RhcmdldC5jbGllbnRXaWR0aC0oaS1vKTtpZih1PjApe2NvbnN0IHQ9KCgpPT57aWYodm9pZCAwIT09aGEpcmV0dXJuIGhhO2NvbnN0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7T2JqZWN0LmFzc2lnbih0LnN0eWxlLHtvdmVyZmxvdzoiYXV0byIscG9zaXRpb246ImZpeGVkIixsZWZ0OiIwcHgiLHRvcDoiMHB4IixtYXhXaWR0aDoiMTAwcHgiLG1heEhlaWdodDoiMTAwcHgifSk7Y29uc3QgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gZS5zdHlsZS53aWR0aD0iMjAwcHgiLGUuc3R5bGUuaGVpZ2h0PSIyMDBweCIsdC5hcHBlbmRDaGlsZChlKSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHQpLGhhPU1hdGguYWJzKHQub2Zmc2V0V2lkdGgtMTAwKT4xP3Qub2Zmc2V0V2lkdGgtdC5jbGllbnRXaWR0aDowLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodCksaGF9KSgpLGU9TWF0aC5taW4obi53aWR0aC1zLmxlZnQtcy5yaWdodCxwK3UtdCk7dGhpcy5zaXppbmdUYXJnZXQuc3R5bGUubWF4V2lkdGg9YCR7ZX1weGA7Y29uc3QgaT10aGlzLnNpemluZ1RhcmdldC5vZmZzZXRXaWR0aCt0LHI9aS1jO2xldCBvOyJsZWZ0Ij09PWwuaG9yaXpvbnRhbEFsaWduP289bToiY2VudGVyIj09PWwuaG9yaXpvbnRhbEFsaWduP289bS1yLzI6InJpZ2h0Ij09PWwuaG9yaXpvbnRhbEFsaWduJiYobz1tLXIpLG89TWF0aC5tYXgobi5sZWZ0K3MubGVmdCxNYXRoLm1pbihvLG4ucmlnaHQtcy5yaWdodC1pKSksdGhpcy5zdHlsZS5sZWZ0PWAke299cHhgfX19LGNvbnN0cmFpbjpmdW5jdGlvbigpe2lmKCF0aGlzLl9fc2hvdWxkUG9zaXRpb24pe3RoaXMuX2Rpc2NvdmVySW5mbygpO3ZhciB0PXRoaXMuX2ZpdEluZm87dC5wb3NpdGlvbmVkQnkudmVydGljYWxseXx8KHRoaXMuc3R5bGUucG9zaXRpb249ImZpeGVkIix0aGlzLnN0eWxlLnRvcD0iMHB4IiksdC5wb3NpdGlvbmVkQnkuaG9yaXpvbnRhbGx5fHwodGhpcy5zdHlsZS5wb3NpdGlvbj0iZml4ZWQiLHRoaXMuc3R5bGUubGVmdD0iMHB4IiksdGhpcy5zaXppbmdUYXJnZXQuc3R5bGUuYm94U2l6aW5nPSJib3JkZXItYm94Ijt2YXIgZT10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3Quc2l6ZWRCeS5oZWlnaHR8fHRoaXMuX19zaXplRGltZW5zaW9uKGUsdC5wb3NpdGlvbmVkQnkudmVydGljYWxseSwidG9wIiwiYm90dG9tIiwiSGVpZ2h0IiksdC5zaXplZEJ5LndpZHRofHx0aGlzLl9fc2l6ZURpbWVuc2lvbihlLHQucG9zaXRpb25lZEJ5Lmhvcml6b250YWxseSwibGVmdCIsInJpZ2h0IiwiV2lkdGgiKX19LF9zaXplRGltZW5zaW9uOmZ1bmN0aW9uKHQsZSxuLGkscil7dGhpcy5fX3NpemVEaW1lbnNpb24odCxlLG4saSxyKX0sX19zaXplRGltZW5zaW9uOmZ1bmN0aW9uKHQsZSxuLGkscil7dmFyIG89dGhpcy5fZml0SW5mbyxhPXRoaXMuX19nZXROb3JtYWxpemVkUmVjdCh0aGlzLmZpdEludG8pLHM9IldpZHRoIj09PXI/YS53aWR0aDphLmhlaWdodCxsPWU9PT1pLGM9Im9mZnNldCIrcjt0aGlzLnNpemluZ1RhcmdldC5zdHlsZVsibWF4IityXT1zLW8ubWFyZ2luW2w/bjppXS0obD9zLXRbaV06dFtuXSktKHRoaXNbY10tdGhpcy5zaXppbmdUYXJnZXRbY10pKyJweCJ9LGNlbnRlcjpmdW5jdGlvbigpe2lmKCF0aGlzLl9fc2hvdWxkUG9zaXRpb24pe3RoaXMuX2Rpc2NvdmVySW5mbygpO3ZhciB0PXRoaXMuX2ZpdEluZm8ucG9zaXRpb25lZEJ5O2lmKCF0LnZlcnRpY2FsbHl8fCF0Lmhvcml6b250YWxseSl7dGhpcy5zdHlsZS5wb3NpdGlvbj0iZml4ZWQiLHQudmVydGljYWxseXx8KHRoaXMuc3R5bGUudG9wPSIwcHgiKSx0Lmhvcml6b250YWxseXx8KHRoaXMuc3R5bGUubGVmdD0iMHB4Iik7dmFyIGU9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXRoaXMuX19nZXROb3JtYWxpemVkUmVjdCh0aGlzLmZpdEludG8pO3QudmVydGljYWxseXx8KHRoaXMuc3R5bGUudG9wPW4udG9wLWUudG9wKyhuLmhlaWdodC1lLmhlaWdodCkvMisicHgiKSx0Lmhvcml6b250YWxseXx8KHRoaXMuc3R5bGUubGVmdD1uLmxlZnQtZS5sZWZ0KyhuLndpZHRoLWUud2lkdGgpLzIrInB4Iil9fX0sX19nZXROb3JtYWxpemVkUmVjdDpmdW5jdGlvbih0KXtyZXR1cm4gdD09PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudHx8dD09PXdpbmRvdz97dG9wOjAsbGVmdDowLHdpZHRoOndpbmRvdy5pbm5lcldpZHRoLGhlaWdodDp3aW5kb3cuaW5uZXJIZWlnaHQscmlnaHQ6d2luZG93LmlubmVyV2lkdGgsYm90dG9tOndpbmRvdy5pbm5lckhlaWdodH06dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKX0sX19nZXRPZmZzY3JlZW5BcmVhOmZ1bmN0aW9uKHQsZSxuKXt2YXIgaT1NYXRoLm1pbigwLHQudG9wKStNYXRoLm1pbigwLG4uYm90dG9tLSh0LnRvcCtlLmhlaWdodCkpLHI9TWF0aC5taW4oMCx0LmxlZnQpK01hdGgubWluKDAsbi5yaWdodC0odC5sZWZ0K2Uud2lkdGgpKTtyZXR1cm4gTWF0aC5hYnMoaSkqZS53aWR0aCtNYXRoLmFicyhyKSplLmhlaWdodH0sX19nZXRQb3NpdGlvbjpmdW5jdGlvbih0LGUsbixpLHIsbyl7dmFyIGEscz1be3ZlcnRpY2FsQWxpZ246InRvcCIsaG9yaXpvbnRhbEFsaWduOiJsZWZ0Iix0b3A6ci50b3ArdGhpcy52ZXJ0aWNhbE9mZnNldCxsZWZ0OnIubGVmdCt0aGlzLmhvcml6b250YWxPZmZzZXR9LHt2ZXJ0aWNhbEFsaWduOiJ0b3AiLGhvcml6b250YWxBbGlnbjoicmlnaHQiLHRvcDpyLnRvcCt0aGlzLnZlcnRpY2FsT2Zmc2V0LGxlZnQ6ci5yaWdodC1uLndpZHRoLXRoaXMuaG9yaXpvbnRhbE9mZnNldH0se3ZlcnRpY2FsQWxpZ246ImJvdHRvbSIsaG9yaXpvbnRhbEFsaWduOiJsZWZ0Iix0b3A6ci5ib3R0b20tbi5oZWlnaHQtdGhpcy52ZXJ0aWNhbE9mZnNldCxsZWZ0OnIubGVmdCt0aGlzLmhvcml6b250YWxPZmZzZXR9LHt2ZXJ0aWNhbEFsaWduOiJib3R0b20iLGhvcml6b250YWxBbGlnbjoicmlnaHQiLHRvcDpyLmJvdHRvbS1uLmhlaWdodC10aGlzLnZlcnRpY2FsT2Zmc2V0LGxlZnQ6ci5yaWdodC1uLndpZHRoLXRoaXMuaG9yaXpvbnRhbE9mZnNldH1dO2lmKHRoaXMubm9PdmVybGFwKXtmb3IodmFyIGw9MCxjPXMubGVuZ3RoO2w8YztsKyspe3ZhciB1PXt9O2Zvcih2YXIgaCBpbiBzW2xdKXVbaF09c1tsXVtoXTtzLnB1c2godSl9c1swXS50b3A9c1sxXS50b3ArPXIuaGVpZ2h0LHNbMl0udG9wPXNbM10udG9wLT1yLmhlaWdodCxzWzRdLmxlZnQ9c1s2XS5sZWZ0Kz1yLndpZHRoLHNbNV0ubGVmdD1zWzddLmxlZnQtPXIud2lkdGh9Zm9yKGU9ImF1dG8iPT09ZT9udWxsOmUsKHQ9ImF1dG8iPT09dD9udWxsOnQpJiYiY2VudGVyIiE9PXR8fChzLnB1c2goe3ZlcnRpY2FsQWxpZ246InRvcCIsaG9yaXpvbnRhbEFsaWduOiJjZW50ZXIiLHRvcDpyLnRvcCt0aGlzLnZlcnRpY2FsT2Zmc2V0Kyh0aGlzLm5vT3ZlcmxhcD9yLmhlaWdodDowKSxsZWZ0OnIubGVmdC1pLndpZHRoLzIrci53aWR0aC8yK3RoaXMuaG9yaXpvbnRhbE9mZnNldH0pLHMucHVzaCh7dmVydGljYWxBbGlnbjoiYm90dG9tIixob3Jpem9udGFsQWxpZ246ImNlbnRlciIsdG9wOnIuYm90dG9tLW4uaGVpZ2h0LXRoaXMudmVydGljYWxPZmZzZXQtKHRoaXMubm9PdmVybGFwP3IuaGVpZ2h0OjApLGxlZnQ6ci5sZWZ0LWkud2lkdGgvMityLndpZHRoLzIrdGhpcy5ob3Jpem9udGFsT2Zmc2V0fSkpLGUmJiJtaWRkbGUiIT09ZXx8KHMucHVzaCh7dmVydGljYWxBbGlnbjoibWlkZGxlIixob3Jpem9udGFsQWxpZ246ImxlZnQiLHRvcDpyLnRvcC1pLmhlaWdodC8yK3IuaGVpZ2h0LzIrdGhpcy52ZXJ0aWNhbE9mZnNldCxsZWZ0OnIubGVmdCt0aGlzLmhvcml6b250YWxPZmZzZXQrKHRoaXMubm9PdmVybGFwP3Iud2lkdGg6MCl9KSxzLnB1c2goe3ZlcnRpY2FsQWxpZ246Im1pZGRsZSIsaG9yaXpvbnRhbEFsaWduOiJyaWdodCIsdG9wOnIudG9wLWkuaGVpZ2h0LzIrci5oZWlnaHQvMit0aGlzLnZlcnRpY2FsT2Zmc2V0LGxlZnQ6ci5yaWdodC1uLndpZHRoLXRoaXMuaG9yaXpvbnRhbE9mZnNldC0odGhpcy5ub092ZXJsYXA/ci53aWR0aDowKX0pKSwibWlkZGxlIj09PWUmJiJjZW50ZXIiPT09dCYmcy5wdXNoKHt2ZXJ0aWNhbEFsaWduOiJtaWRkbGUiLGhvcml6b250YWxBbGlnbjoiY2VudGVyIix0b3A6ci50b3AtaS5oZWlnaHQvMityLmhlaWdodC8yK3RoaXMudmVydGljYWxPZmZzZXQsbGVmdDpyLmxlZnQtaS53aWR0aC8yK3Iud2lkdGgvMit0aGlzLmhvcml6b250YWxPZmZzZXR9KSxsPTA7bDxzLmxlbmd0aDtsKyspe3ZhciBkPXNbbF0scD1kLnZlcnRpY2FsQWxpZ249PT1lLGY9ZC5ob3Jpem9udGFsQWxpZ249PT10O2lmKCF0aGlzLmR5bmFtaWNBbGlnbiYmIXRoaXMubm9PdmVybGFwJiZwJiZmKXthPWQ7YnJlYWt9dmFyIG09KCFlfHxwKSYmKCF0fHxmKTtpZih0aGlzLmR5bmFtaWNBbGlnbnx8bSl7aWYoZC5vZmZzY3JlZW5BcmVhPXRoaXMuX19nZXRPZmZzY3JlZW5BcmVhKGQsbixvKSwwPT09ZC5vZmZzY3JlZW5BcmVhJiZtKXthPWQ7YnJlYWt9dmFyIGc9ZC5vZmZzY3JlZW5BcmVhLShhPWF8fGQpLm9mZnNjcmVlbkFyZWE7KGc8MHx8MD09PWcmJihwfHxmKSkmJihhPWQpfX1yZXR1cm4gYX19OwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTYgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KdmFyIHBhPUVsZW1lbnQucHJvdG90eXBlLGZhPXBhLm1hdGNoZXN8fHBhLm1hdGNoZXNTZWxlY3Rvcnx8cGEubW96TWF0Y2hlc1NlbGVjdG9yfHxwYS5tc01hdGNoZXNTZWxlY3Rvcnx8cGEub01hdGNoZXNTZWxlY3Rvcnx8cGEud2Via2l0TWF0Y2hlc1NlbGVjdG9yO2NvbnN0IG1hPW5ldyBjbGFzc3tnZXRUYWJiYWJsZU5vZGVzKHQpe3ZhciBlPVtdO3JldHVybiB0aGlzLl9jb2xsZWN0VGFiYmFibGVOb2Rlcyh0LGUpP3RoaXMuX3NvcnRCeVRhYkluZGV4KGUpOmV9aXNGb2N1c2FibGUodCl7cmV0dXJuIGZhLmNhbGwodCwiaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIGJ1dHRvbiwgb2JqZWN0Iik/ZmEuY2FsbCh0LCI6bm90KFtkaXNhYmxlZF0pIik6ZmEuY2FsbCh0LCJhW2hyZWZdLCBhcmVhW2hyZWZdLCBpZnJhbWUsIFt0YWJpbmRleF0sIFtjb250ZW50RWRpdGFibGVdIil9aXNUYWJiYWJsZSh0KXtyZXR1cm4gdGhpcy5pc0ZvY3VzYWJsZSh0KSYmZmEuY2FsbCh0LCc6bm90KFt0YWJpbmRleD0iLTEiXSknKSYmdGhpcy5faXNWaXNpYmxlKHQpfV9ub3JtYWxpemVkVGFiSW5kZXgodCl7aWYodGhpcy5pc0ZvY3VzYWJsZSh0KSl7dmFyIGU9dC5nZXRBdHRyaWJ1dGUoInRhYmluZGV4Iil8fDA7cmV0dXJuIE51bWJlcihlKX1yZXR1cm4tMX1fY29sbGVjdFRhYmJhYmxlTm9kZXModCxlKXtpZih0Lm5vZGVUeXBlIT09Tm9kZS5FTEVNRU5UX05PREUpcmV0dXJuITE7dmFyIG49dDtpZighdGhpcy5faXNWaXNpYmxlKG4pKXJldHVybiExO3ZhciBpLHI9dGhpcy5fbm9ybWFsaXplZFRhYkluZGV4KG4pLG89cj4wO3I+PTAmJmUucHVzaChuKSxpPSJjb250ZW50Ij09PW4ubG9jYWxOYW1lfHwic2xvdCI9PT1uLmxvY2FsTmFtZT9xaShuKS5nZXREaXN0cmlidXRlZE5vZGVzKCk6cWkobi5yb290fHxuKS5jaGlsZHJlbjtmb3IodmFyIGE9MDthPGkubGVuZ3RoO2ErKylvPXRoaXMuX2NvbGxlY3RUYWJiYWJsZU5vZGVzKGlbYV0sZSl8fG87cmV0dXJuIG99X2lzVmlzaWJsZSh0KXt2YXIgZT10LnN0eWxlO3JldHVybiJoaWRkZW4iIT09ZS52aXNpYmlsaXR5JiYibm9uZSIhPT1lLmRpc3BsYXkmJiJoaWRkZW4iIT09KGU9d2luZG93LmdldENvbXB1dGVkU3R5bGUodCkpLnZpc2liaWxpdHkmJiJub25lIiE9PWUuZGlzcGxheX1fc29ydEJ5VGFiSW5kZXgodCl7dmFyIGU9dC5sZW5ndGg7aWYoZTwyKXJldHVybiB0O3ZhciBuPU1hdGguY2VpbChlLzIpLGk9dGhpcy5fc29ydEJ5VGFiSW5kZXgodC5zbGljZSgwLG4pKSxyPXRoaXMuX3NvcnRCeVRhYkluZGV4KHQuc2xpY2UobikpO3JldHVybiB0aGlzLl9tZXJnZVNvcnRCeVRhYkluZGV4KGkscil9X21lcmdlU29ydEJ5VGFiSW5kZXgodCxlKXtmb3IodmFyIG49W107dC5sZW5ndGg+MCYmZS5sZW5ndGg+MDspdGhpcy5faGFzTG93ZXJUYWJPcmRlcih0WzBdLGVbMF0pP24ucHVzaChlLnNoaWZ0KCkpOm4ucHVzaCh0LnNoaWZ0KCkpO3JldHVybiBuLmNvbmNhdCh0LGUpfV9oYXNMb3dlclRhYk9yZGVyKHQsZSl7dmFyIG49TWF0aC5tYXgodC50YWJJbmRleCwwKSxpPU1hdGgubWF4KGUudGFiSW5kZXgsMCk7cmV0dXJuIDA9PT1ufHwwPT09aT9pPm46bj5pfX07Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqL0lyKHtfdGVtcGxhdGU6X2VgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWlyb24tb3ZlcmxheS1iYWNrZHJvcC1iYWNrZ3JvdW5kLWNvbG9yLCAjMDAwKTsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4yczsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBAYXBwbHkgLS1pcm9uLW92ZXJsYXktYmFja2Ryb3A7CiAgICAgIH0KCiAgICAgIDpob3N0KC5vcGVuZWQpIHsKICAgICAgICBvcGFjaXR5OiB2YXIoLS1pcm9uLW92ZXJsYXktYmFja2Ryb3Atb3BhY2l0eSwgMC42KTsKICAgICAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKICAgICAgICBAYXBwbHkgLS1pcm9uLW92ZXJsYXktYmFja2Ryb3Atb3BlbmVkOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxzbG90Pjwvc2xvdD4KYCxpczoiaXJvbi1vdmVybGF5LWJhY2tkcm9wIixwcm9wZXJ0aWVzOntvcGVuZWQ6e3JlZmxlY3RUb0F0dHJpYnV0ZTohMCx0eXBlOkJvb2xlYW4sdmFsdWU6ITEsb2JzZXJ2ZXI6Il9vcGVuZWRDaGFuZ2VkIn19LGxpc3RlbmVyczp7dHJhbnNpdGlvbmVuZDoiX29uVHJhbnNpdGlvbmVuZCJ9LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLl9fb3BlbmVkUmFmPW51bGx9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQmJnRoaXMuX29wZW5lZENoYW5nZWQodGhpcy5vcGVuZWQpfSxwcmVwYXJlOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQmJiF0aGlzLnBhcmVudE5vZGUmJnFpKGRvY3VtZW50LmJvZHkpLmFwcGVuZENoaWxkKHRoaXMpfSxvcGVuOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQ9ITB9LGNsb3NlOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQ9ITF9LGNvbXBsZXRlOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWR8fHRoaXMucGFyZW50Tm9kZSE9PWRvY3VtZW50LmJvZHl8fHFpKHRoaXMucGFyZW50Tm9kZSkucmVtb3ZlQ2hpbGQodGhpcyl9LF9vblRyYW5zaXRpb25lbmQ6ZnVuY3Rpb24odCl7dCYmdC50YXJnZXQ9PT10aGlzJiZ0aGlzLmNvbXBsZXRlKCl9LF9vcGVuZWRDaGFuZ2VkOmZ1bmN0aW9uKHQpe2lmKHQpdGhpcy5wcmVwYXJlKCk7ZWxzZXt2YXIgZT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzKTsiMHMiIT09ZS50cmFuc2l0aW9uRHVyYXRpb24mJjAhPWUub3BhY2l0eXx8dGhpcy5jb21wbGV0ZSgpfXRoaXMuaXNBdHRhY2hlZCYmKHRoaXMuX19vcGVuZWRSYWYmJih3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fX29wZW5lZFJhZiksdGhpcy5fX29wZW5lZFJhZj1udWxsKSx0aGlzLnNjcm9sbFRvcD10aGlzLnNjcm9sbFRvcCx0aGlzLl9fb3BlbmVkUmFmPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKXt0aGlzLl9fb3BlbmVkUmFmPW51bGwsdGhpcy50b2dnbGVDbGFzcygib3BlbmVkIix0aGlzLm9wZW5lZCl9LmJpbmQodGhpcykpKX19KTtjb25zdCBnYT1uZXcKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCmNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5fb3ZlcmxheXM9W10sdGhpcy5fbWluaW11bVo9MTAxLHRoaXMuX2JhY2tkcm9wRWxlbWVudD1udWxsLG5pKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwidGFwIiwoZnVuY3Rpb24oKXt9KSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidGFwIix0aGlzLl9vbkNhcHR1cmVDbGljay5iaW5kKHRoaXMpLCEwKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5fb25DYXB0dXJlRm9jdXMuYmluZCh0aGlzKSwhMCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy5fb25DYXB0dXJlS2V5RG93bi5iaW5kKHRoaXMpLCEwKX1nZXQgYmFja2Ryb3BFbGVtZW50KCl7cmV0dXJuIHRoaXMuX2JhY2tkcm9wRWxlbWVudHx8KHRoaXMuX2JhY2tkcm9wRWxlbWVudD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpcm9uLW92ZXJsYXktYmFja2Ryb3AiKSksdGhpcy5fYmFja2Ryb3BFbGVtZW50fWdldCBkZWVwQWN0aXZlRWxlbWVudCgpe3ZhciB0PWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7Zm9yKHQmJnQgaW5zdGFuY2VvZiBFbGVtZW50IT0wfHwodD1kb2N1bWVudC5ib2R5KTt0LnJvb3QmJnFpKHQucm9vdCkuYWN0aXZlRWxlbWVudDspdD1xaSh0LnJvb3QpLmFjdGl2ZUVsZW1lbnQ7cmV0dXJuIHR9X2JyaW5nT3ZlcmxheUF0SW5kZXhUb0Zyb250KHQpe3ZhciBlPXRoaXMuX292ZXJsYXlzW3RdO2lmKGUpe3ZhciBuPXRoaXMuX292ZXJsYXlzLmxlbmd0aC0xLGk9dGhpcy5fb3ZlcmxheXNbbl07aWYoaSYmdGhpcy5fc2hvdWxkQmVCZWhpbmRPdmVybGF5KGUsaSkmJm4tLSwhKHQ+PW4pKXt2YXIgcj1NYXRoLm1heCh0aGlzLmN1cnJlbnRPdmVybGF5WigpLHRoaXMuX21pbmltdW1aKTtmb3IodGhpcy5fZ2V0WihlKTw9ciYmdGhpcy5fYXBwbHlPdmVybGF5WihlLHIpO3Q8bjspdGhpcy5fb3ZlcmxheXNbdF09dGhpcy5fb3ZlcmxheXNbdCsxXSx0Kys7dGhpcy5fb3ZlcmxheXNbbl09ZX19fWFkZE9yUmVtb3ZlT3ZlcmxheSh0KXt0Lm9wZW5lZD90aGlzLmFkZE92ZXJsYXkodCk6dGhpcy5yZW1vdmVPdmVybGF5KHQpfWFkZE92ZXJsYXkodCl7dmFyIGU9dGhpcy5fb3ZlcmxheXMuaW5kZXhPZih0KTtpZihlPj0wKXJldHVybiB0aGlzLl9icmluZ092ZXJsYXlBdEluZGV4VG9Gcm9udChlKSx2b2lkIHRoaXMudHJhY2tCYWNrZHJvcCgpO3ZhciBuPXRoaXMuX292ZXJsYXlzLmxlbmd0aCxpPXRoaXMuX292ZXJsYXlzW24tMV0scj1NYXRoLm1heCh0aGlzLl9nZXRaKGkpLHRoaXMuX21pbmltdW1aKSxvPXRoaXMuX2dldFoodCk7aSYmdGhpcy5fc2hvdWxkQmVCZWhpbmRPdmVybGF5KHQsaSkmJih0aGlzLl9hcHBseU92ZXJsYXlaKGksciksbi0tLHI9TWF0aC5tYXgodGhpcy5fZ2V0Wih0aGlzLl9vdmVybGF5c1tuLTFdKSx0aGlzLl9taW5pbXVtWikpLG88PXImJnRoaXMuX2FwcGx5T3ZlcmxheVoodCxyKSx0aGlzLl9vdmVybGF5cy5zcGxpY2UobiwwLHQpLHRoaXMudHJhY2tCYWNrZHJvcCgpfXJlbW92ZU92ZXJsYXkodCl7dmFyIGU9dGhpcy5fb3ZlcmxheXMuaW5kZXhPZih0KTstMSE9PWUmJih0aGlzLl9vdmVybGF5cy5zcGxpY2UoZSwxKSx0aGlzLnRyYWNrQmFja2Ryb3AoKSl9Y3VycmVudE92ZXJsYXkoKXtyZXR1cm4gdGhpcy5fb3ZlcmxheXNbdGhpcy5fb3ZlcmxheXMubGVuZ3RoLTFdfWN1cnJlbnRPdmVybGF5Wigpe3JldHVybiB0aGlzLl9nZXRaKHRoaXMuY3VycmVudE92ZXJsYXkoKSl9ZW5zdXJlTWluaW11bVoodCl7dGhpcy5fbWluaW11bVo9TWF0aC5tYXgodGhpcy5fbWluaW11bVosdCl9Zm9jdXNPdmVybGF5KCl7dmFyIHQ9dGhpcy5jdXJyZW50T3ZlcmxheSgpO3QmJnQuX2FwcGx5Rm9jdXMoKX10cmFja0JhY2tkcm9wKCl7dmFyIHQ9dGhpcy5fb3ZlcmxheVdpdGhCYWNrZHJvcCgpOyh0fHx0aGlzLl9iYWNrZHJvcEVsZW1lbnQpJiYodGhpcy5iYWNrZHJvcEVsZW1lbnQuc3R5bGUuekluZGV4PXRoaXMuX2dldFoodCktMSx0aGlzLmJhY2tkcm9wRWxlbWVudC5vcGVuZWQ9ISF0LHRoaXMuYmFja2Ryb3BFbGVtZW50LnByZXBhcmUoKSl9Z2V0QmFja2Ryb3BzKCl7Zm9yKHZhciB0PVtdLGU9MDtlPHRoaXMuX292ZXJsYXlzLmxlbmd0aDtlKyspdGhpcy5fb3ZlcmxheXNbZV0ud2l0aEJhY2tkcm9wJiZ0LnB1c2godGhpcy5fb3ZlcmxheXNbZV0pO3JldHVybiB0fWJhY2tkcm9wWigpe3JldHVybiB0aGlzLl9nZXRaKHRoaXMuX292ZXJsYXlXaXRoQmFja2Ryb3AoKSktMX1fb3ZlcmxheVdpdGhCYWNrZHJvcCgpe2Zvcih2YXIgdD10aGlzLl9vdmVybGF5cy5sZW5ndGgtMTt0Pj0wO3QtLSlpZih0aGlzLl9vdmVybGF5c1t0XS53aXRoQmFja2Ryb3ApcmV0dXJuIHRoaXMuX292ZXJsYXlzW3RdfV9nZXRaKHQpe3ZhciBlPXRoaXMuX21pbmltdW1aO2lmKHQpe3ZhciBuPU51bWJlcih0LnN0eWxlLnpJbmRleHx8d2luZG93LmdldENvbXB1dGVkU3R5bGUodCkuekluZGV4KTtuPT1uJiYoZT1uKX1yZXR1cm4gZX1fc2V0Wih0LGUpe3Quc3R5bGUuekluZGV4PWV9X2FwcGx5T3ZlcmxheVoodCxlKXt0aGlzLl9zZXRaKHQsZSsyKX1fb3ZlcmxheUluUGF0aCh0KXt0PXR8fFtdO2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKWlmKHRbZV0uX21hbmFnZXI9PT10aGlzKXJldHVybiB0W2VdfV9vbkNhcHR1cmVDbGljayh0KXt2YXIgZT10aGlzLl9vdmVybGF5cy5sZW5ndGgtMTtpZigtMSE9PWUpZm9yKHZhciBuLGk9cWkodCkucGF0aDsobj10aGlzLl9vdmVybGF5c1tlXSkmJnRoaXMuX292ZXJsYXlJblBhdGgoaSkhPT1uJiYobi5fb25DYXB0dXJlQ2xpY2sodCksbi5hbGxvd0NsaWNrVGhyb3VnaCk7KWUtLX1fb25DYXB0dXJlRm9jdXModCl7dmFyIGU9dGhpcy5jdXJyZW50T3ZlcmxheSgpO2UmJmUuX29uQ2FwdHVyZUZvY3VzKHQpfV9vbkNhcHR1cmVLZXlEb3duKHQpe3ZhciBlPXRoaXMuY3VycmVudE92ZXJsYXkoKTtlJiYoUm8ua2V5Ym9hcmRFdmVudE1hdGNoZXNLZXlzKHQsImVzYyIpP2UuX29uQ2FwdHVyZUVzYyh0KTpSby5rZXlib2FyZEV2ZW50TWF0Y2hlc0tleXModCwidGFiIikmJmUuX29uQ2FwdHVyZVRhYih0KSl9X3Nob3VsZEJlQmVoaW5kT3ZlcmxheSh0LGUpe3JldHVybiF0LmFsd2F5c09uVG9wJiZlLmFsd2F5c09uVG9wfX07Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqL3ZhciBfYSx5YSx2YT17cGFnZVg6MCxwYWdlWTowfSxiYT1udWxsLHhhPVtdLHdhPVsid2hlZWwiLCJtb3VzZXdoZWVsIiwiRE9NTW91c2VTY3JvbGwiLCJ0b3VjaHN0YXJ0IiwidG91Y2htb3ZlIl07ZnVuY3Rpb24gU2EodCl7TWEuaW5kZXhPZih0KT49MHx8KDA9PT1NYS5sZW5ndGgmJihmdW5jdGlvbiBlKCl7X2E9X2F8fEVhLmJpbmQodm9pZCAwKTtmb3IodmFyIHQ9MCxlPXdhLmxlbmd0aDt0PGU7dCsrKWRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIod2FbdF0sX2Ese2NhcHR1cmU6ITAscGFzc2l2ZTohMX0pfSkoKSxNYS5wdXNoKHQpLHlhPU1hW01hLmxlbmd0aC0xXSl9Y29uc3QgTWE9W107ZnVuY3Rpb24gRWEodCl7aWYodC5jYW5jZWxhYmxlJiYoZnVuY3Rpb24gZSh0KXt2YXIgZT1xaSh0KS5yb290VGFyZ2V0O2lmKCJ0b3VjaG1vdmUiIT09dC50eXBlJiZiYSE9PWUmJihiYT1lLHhhPShmdW5jdGlvbiBuKHQpe2Zvcih2YXIgZT1bXSxuPXQuaW5kZXhPZih5YSksaT0wO2k8PW47aSsrKWlmKHRbaV0ubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSl7dmFyIHI9dFtpXSxvPXIuc3R5bGU7InNjcm9sbCIhPT1vLm92ZXJmbG93JiYiYXV0byIhPT1vLm92ZXJmbG93JiYobz13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShyKSksInNjcm9sbCIhPT1vLm92ZXJmbG93JiYiYXV0byIhPT1vLm92ZXJmbG93fHxlLnB1c2gocil9cmV0dXJuIGV9KShxaSh0KS5wYXRoKSksIXhhLmxlbmd0aClyZXR1cm4hMDtpZigidG91Y2hzdGFydCI9PT10LnR5cGUpcmV0dXJuITE7dmFyIGk9KGZ1bmN0aW9uIHIodCl7dmFyIGU9e2RlbHRhWDp0LmRlbHRhWCxkZWx0YVk6dC5kZWx0YVl9O2lmKCJkZWx0YVgiaW4gdCk7ZWxzZSBpZigid2hlZWxEZWx0YVgiaW4gdCYmIndoZWVsRGVsdGFZImluIHQpZS5kZWx0YVg9LXQud2hlZWxEZWx0YVgsZS5kZWx0YVk9LXQud2hlZWxEZWx0YVk7ZWxzZSBpZigid2hlZWxEZWx0YSJpbiB0KWUuZGVsdGFYPTAsZS5kZWx0YVk9LXQud2hlZWxEZWx0YTtlbHNlIGlmKCJheGlzImluIHQpZS5kZWx0YVg9MT09PXQuYXhpcz90LmRldGFpbDowLGUuZGVsdGFZPTI9PT10LmF4aXM/dC5kZXRhaWw6MDtlbHNlIGlmKHQudGFyZ2V0VG91Y2hlcyl7dmFyIG49dC50YXJnZXRUb3VjaGVzWzBdO2UuZGVsdGFYPXZhLnBhZ2VYLW4ucGFnZVgsZS5kZWx0YVk9dmEucGFnZVktbi5wYWdlWX1yZXR1cm4gZX0KLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovKSh0KTtyZXR1cm4hKGZ1bmN0aW9uIG8odCxlLG4pe2lmKGV8fG4pZm9yKHZhciBpPU1hdGguYWJzKG4pPj1NYXRoLmFicyhlKSxyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBvPXRbcl07aWYoaT9uPDA/by5zY3JvbGxUb3A+MDpvLnNjcm9sbFRvcDxvLnNjcm9sbEhlaWdodC1vLmNsaWVudEhlaWdodDplPDA/by5zY3JvbGxMZWZ0PjA6by5zY3JvbGxMZWZ0PG8uc2Nyb2xsV2lkdGgtby5jbGllbnRXaWR0aClyZXR1cm4gb319KSh4YSxpLmRlbHRhWCxpLmRlbHRhWSl9KSh0KSYmdC5wcmV2ZW50RGVmYXVsdCgpLHQudGFyZ2V0VG91Y2hlcyl7dmFyIG49dC50YXJnZXRUb3VjaGVzWzBdO3ZhLnBhZ2VYPW4ucGFnZVgsdmEucGFnZVk9bi5wYWdlWX19Y29uc3QgVGE9e3Byb3BlcnRpZXM6e29wZW5lZDp7b2JzZXJ2ZXI6Il9vcGVuZWRDaGFuZ2VkIix0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwfSxjYW5jZWxlZDp7b2JzZXJ2ZXI6Il9jYW5jZWxlZENoYW5nZWQiLHJlYWRPbmx5OiEwLHR5cGU6Qm9vbGVhbix2YWx1ZTohMX0sd2l0aEJhY2tkcm9wOntvYnNlcnZlcjoiX3dpdGhCYWNrZHJvcENoYW5nZWQiLHR5cGU6Qm9vbGVhbn0sbm9BdXRvRm9jdXM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sbm9DYW5jZWxPbkVzY0tleTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxub0NhbmNlbE9uT3V0c2lkZUNsaWNrOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGNsb3NpbmdSZWFzb246e3R5cGU6T2JqZWN0fSxyZXN0b3JlRm9jdXNPbkNsb3NlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGFsbG93Q2xpY2tUaHJvdWdoOnt0eXBlOkJvb2xlYW59LGFsd2F5c09uVG9wOnt0eXBlOkJvb2xlYW59LHNjcm9sbEFjdGlvbjp7dHlwZTpTdHJpbmd9LF9tYW5hZ2VyOnt0eXBlOk9iamVjdCx2YWx1ZTpnYX0sX2ZvY3VzZWRDaGlsZDp7dHlwZTpPYmplY3R9fSxsaXN0ZW5lcnM6eyJpcm9uLXJlc2l6ZSI6Il9vbklyb25SZXNpemUifSxvYnNlcnZlcnM6WyJfX3VwZGF0ZVNjcm9sbE9ic2VydmVycyhpc0F0dGFjaGVkLCBvcGVuZWQsIHNjcm9sbEFjdGlvbikiXSxnZXQgYmFja2Ryb3BFbGVtZW50KCl7cmV0dXJuIHRoaXMuX21hbmFnZXIuYmFja2Ryb3BFbGVtZW50fSxnZXQgX2ZvY3VzTm9kZSgpe3JldHVybiB0aGlzLl9mb2N1c2VkQ2hpbGR8fHFpKHRoaXMpLnF1ZXJ5U2VsZWN0b3IoIlthdXRvZm9jdXNdIil8fHRoaXN9LGdldCBfZm9jdXNhYmxlTm9kZXMoKXtyZXR1cm4gbWEuZ2V0VGFiYmFibGVOb2Rlcyh0aGlzKX0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLl9faXNBbmltYXRpbmc9ITEsdGhpcy5fX3Nob3VsZFJlbW92ZVRhYkluZGV4PSExLHRoaXMuX19maXJzdEZvY3VzYWJsZU5vZGU9dGhpcy5fX2xhc3RGb2N1c2FibGVOb2RlPW51bGwsdGhpcy5fX3JhZnM9e30sdGhpcy5fX3Jlc3RvcmVGb2N1c05vZGU9bnVsbCx0aGlzLl9fc2Nyb2xsVG9wPXRoaXMuX19zY3JvbGxMZWZ0PW51bGwsdGhpcy5fX29uQ2FwdHVyZVNjcm9sbD10aGlzLl9fb25DYXB0dXJlU2Nyb2xsLmJpbmQodGhpcyksdGhpcy5fX3Jvb3ROb2Rlcz1udWxsLHRoaXMuX2Vuc3VyZVNldHVwKCl9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQmJnRoaXMuX29wZW5lZENoYW5nZWQodGhpcy5vcGVuZWQpLHRoaXMuX29ic2VydmVyPXFpKHRoaXMpLm9ic2VydmVOb2Rlcyh0aGlzLl9vbk5vZGVzQ2hhbmdlKX0sZGV0YWNoZWQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5fb2JzZXJ2ZXImJnFpKHRoaXMpLnVub2JzZXJ2ZU5vZGVzKHRoaXMuX29ic2VydmVyKSx0aGlzLl9vYnNlcnZlcj1udWxsLHRoaXMuX19yYWZzKW51bGwhPT10aGlzLl9fcmFmc1t0XSYmY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fX3JhZnNbdF0pO3RoaXMuX19yYWZzPXt9LHRoaXMuX21hbmFnZXIucmVtb3ZlT3ZlcmxheSh0aGlzKSx0aGlzLl9faXNBbmltYXRpbmcmJih0aGlzLm9wZW5lZD90aGlzLl9maW5pc2hSZW5kZXJPcGVuZWQoKToodGhpcy5fYXBwbHlGb2N1cygpLHRoaXMuX2ZpbmlzaFJlbmRlckNsb3NlZCgpKSl9LHRvZ2dsZTpmdW5jdGlvbigpe3RoaXMuX3NldENhbmNlbGVkKCExKSx0aGlzLm9wZW5lZD0hdGhpcy5vcGVuZWR9LG9wZW46ZnVuY3Rpb24oKXt0aGlzLl9zZXRDYW5jZWxlZCghMSksdGhpcy5vcGVuZWQ9ITB9LGNsb3NlOmZ1bmN0aW9uKCl7dGhpcy5fc2V0Q2FuY2VsZWQoITEpLHRoaXMub3BlbmVkPSExfSxjYW5jZWw6ZnVuY3Rpb24odCl7dGhpcy5maXJlKCJpcm9uLW92ZXJsYXktY2FuY2VsZWQiLHQse2NhbmNlbGFibGU6ITB9KS5kZWZhdWx0UHJldmVudGVkfHwodGhpcy5fc2V0Q2FuY2VsZWQoITApLHRoaXMub3BlbmVkPSExKX0saW52YWxpZGF0ZVRhYmJhYmxlczpmdW5jdGlvbigpe3RoaXMuX19maXJzdEZvY3VzYWJsZU5vZGU9dGhpcy5fX2xhc3RGb2N1c2FibGVOb2RlPW51bGx9LF9lbnN1cmVTZXR1cDpmdW5jdGlvbigpe3RoaXMuX292ZXJsYXlTZXR1cHx8KHRoaXMuX292ZXJsYXlTZXR1cD0hMCx0aGlzLnN0eWxlLm91dGxpbmU9Im5vbmUiLHRoaXMuc3R5bGUuZGlzcGxheT0ibm9uZSIpfSxfb3BlbmVkQ2hhbmdlZDpmdW5jdGlvbih0KXt0P3RoaXMucmVtb3ZlQXR0cmlidXRlKCJhcmlhLWhpZGRlbiIpOnRoaXMuc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsInRydWUiKSx0aGlzLmlzQXR0YWNoZWQmJih0aGlzLl9faXNBbmltYXRpbmc9ITAsdGhpcy5fX2RlcmFmKCJfX29wZW5lZENoYW5nZWQiLHRoaXMuX19vcGVuZWRDaGFuZ2VkKSl9LF9jYW5jZWxlZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLmNsb3NpbmdSZWFzb249dGhpcy5jbG9zaW5nUmVhc29ufHx7fSx0aGlzLmNsb3NpbmdSZWFzb24uY2FuY2VsZWQ9dGhpcy5jYW5jZWxlZH0sX3dpdGhCYWNrZHJvcENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLndpdGhCYWNrZHJvcCYmIXRoaXMuaGFzQXR0cmlidXRlKCJ0YWJpbmRleCIpPyh0aGlzLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCItMSIpLHRoaXMuX19zaG91bGRSZW1vdmVUYWJJbmRleD0hMCk6dGhpcy5fX3Nob3VsZFJlbW92ZVRhYkluZGV4JiYodGhpcy5yZW1vdmVBdHRyaWJ1dGUoInRhYmluZGV4IiksdGhpcy5fX3Nob3VsZFJlbW92ZVRhYkluZGV4PSExKSx0aGlzLm9wZW5lZCYmdGhpcy5pc0F0dGFjaGVkJiZ0aGlzLl9tYW5hZ2VyLnRyYWNrQmFja2Ryb3AoKX0sX3ByZXBhcmVSZW5kZXJPcGVuZWQ6ZnVuY3Rpb24oKXt0aGlzLl9fcmVzdG9yZUZvY3VzTm9kZT10aGlzLl9tYW5hZ2VyLmRlZXBBY3RpdmVFbGVtZW50LHRoaXMuX3ByZXBhcmVQb3NpdGlvbmluZygpLHRoaXMucmVmaXQoKSx0aGlzLl9maW5pc2hQb3NpdGlvbmluZygpLHRoaXMubm9BdXRvRm9jdXMmJmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT10aGlzLl9mb2N1c05vZGUmJih0aGlzLl9mb2N1c05vZGUuYmx1cigpLHRoaXMuX19yZXN0b3JlRm9jdXNOb2RlLmZvY3VzKCkpfSxfcmVuZGVyT3BlbmVkOmZ1bmN0aW9uKCl7dGhpcy5fZmluaXNoUmVuZGVyT3BlbmVkKCl9LF9yZW5kZXJDbG9zZWQ6ZnVuY3Rpb24oKXt0aGlzLl9maW5pc2hSZW5kZXJDbG9zZWQoKX0sX2ZpbmlzaFJlbmRlck9wZW5lZDpmdW5jdGlvbigpe3RoaXMubm90aWZ5UmVzaXplKCksdGhpcy5fX2lzQW5pbWF0aW5nPSExLHRoaXMuZmlyZSgiaXJvbi1vdmVybGF5LW9wZW5lZCIpfSxfZmluaXNoUmVuZGVyQ2xvc2VkOmZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLnN0eWxlLnpJbmRleD0iIix0aGlzLm5vdGlmeVJlc2l6ZSgpLHRoaXMuX19pc0FuaW1hdGluZz0hMSx0aGlzLmZpcmUoImlyb24tb3ZlcmxheS1jbG9zZWQiLHRoaXMuY2xvc2luZ1JlYXNvbil9LF9wcmVwYXJlUG9zaXRpb25pbmc6ZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnRyYW5zaXRpb249dGhpcy5zdHlsZS53ZWJraXRUcmFuc2l0aW9uPSJub25lIix0aGlzLnN0eWxlLnRyYW5zZm9ybT10aGlzLnN0eWxlLndlYmtpdFRyYW5zZm9ybT0ibm9uZSIsdGhpcy5zdHlsZS5kaXNwbGF5PSIifSxfZmluaXNoUG9zaXRpb25pbmc6ZnVuY3Rpb24oKXt0aGlzLnN0eWxlLmRpc3BsYXk9Im5vbmUiLHRoaXMuc2Nyb2xsVG9wPXRoaXMuc2Nyb2xsVG9wLHRoaXMuc3R5bGUudHJhbnNpdGlvbj10aGlzLnN0eWxlLndlYmtpdFRyYW5zaXRpb249IiIsdGhpcy5zdHlsZS50cmFuc2Zvcm09dGhpcy5zdHlsZS53ZWJraXRUcmFuc2Zvcm09IiIsdGhpcy5zdHlsZS5kaXNwbGF5PSIiLHRoaXMuc2Nyb2xsVG9wPXRoaXMuc2Nyb2xsVG9wfSxfYXBwbHlGb2N1czpmdW5jdGlvbigpe2lmKHRoaXMub3BlbmVkKXRoaXMubm9BdXRvRm9jdXN8fHRoaXMuX2ZvY3VzTm9kZS5mb2N1cygpO2Vsc2V7aWYodGhpcy5yZXN0b3JlRm9jdXNPbkNsb3NlJiZ0aGlzLl9fcmVzdG9yZUZvY3VzTm9kZSl7dmFyIHQ9dGhpcy5fbWFuYWdlci5kZWVwQWN0aXZlRWxlbWVudDsodD09PWRvY3VtZW50LmJvZHl8fENhKHRoaXMsdCkpJiZ0aGlzLl9fcmVzdG9yZUZvY3VzTm9kZS5mb2N1cygpfXRoaXMuX19yZXN0b3JlRm9jdXNOb2RlPW51bGwsdGhpcy5fZm9jdXNOb2RlLmJsdXIoKSx0aGlzLl9mb2N1c2VkQ2hpbGQ9bnVsbH19LF9vbkNhcHR1cmVDbGljazpmdW5jdGlvbih0KXt0aGlzLm5vQ2FuY2VsT25PdXRzaWRlQ2xpY2t8fHRoaXMuY2FuY2VsKHQpfSxfb25DYXB0dXJlRm9jdXM6ZnVuY3Rpb24odCl7aWYodGhpcy53aXRoQmFja2Ryb3Ape3ZhciBlPXFpKHQpLnBhdGg7LTE9PT1lLmluZGV4T2YodGhpcyk/KHQuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5fYXBwbHlGb2N1cygpKTp0aGlzLl9mb2N1c2VkQ2hpbGQ9ZVswXX19LF9vbkNhcHR1cmVFc2M6ZnVuY3Rpb24odCl7dGhpcy5ub0NhbmNlbE9uRXNjS2V5fHx0aGlzLmNhbmNlbCh0KX0sX29uQ2FwdHVyZVRhYjpmdW5jdGlvbih0KXtpZih0aGlzLndpdGhCYWNrZHJvcCl7dGhpcy5fX2Vuc3VyZUZpcnN0TGFzdEZvY3VzYWJsZXMoKTt2YXIgZT10LnNoaWZ0S2V5LG49ZT90aGlzLl9fZmlyc3RGb2N1c2FibGVOb2RlOnRoaXMuX19sYXN0Rm9jdXNhYmxlTm9kZSxpPWU/dGhpcy5fX2xhc3RGb2N1c2FibGVOb2RlOnRoaXMuX19maXJzdEZvY3VzYWJsZU5vZGUscj0hMTtpZihuPT09aSlyPSEwO2Vsc2V7dmFyIG89dGhpcy5fbWFuYWdlci5kZWVwQWN0aXZlRWxlbWVudDtyPW89PT1ufHxvPT09dGhpc31yJiYodC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2ZvY3VzZWRDaGlsZD1pLHRoaXMuX2FwcGx5Rm9jdXMoKSl9fSxfb25Jcm9uUmVzaXplOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQmJiF0aGlzLl9faXNBbmltYXRpbmcmJnRoaXMuX19kZXJhZigicmVmaXQiLHRoaXMucmVmaXQpfSxfb25Ob2Rlc0NoYW5nZTpmdW5jdGlvbigpe3RoaXMub3BlbmVkJiYhdGhpcy5fX2lzQW5pbWF0aW5nJiYodGhpcy5pbnZhbGlkYXRlVGFiYmFibGVzKCksdGhpcy5ub3RpZnlSZXNpemUoKSl9LF9fZW5zdXJlRmlyc3RMYXN0Rm9jdXNhYmxlczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2ZvY3VzYWJsZU5vZGVzO3RoaXMuX19maXJzdEZvY3VzYWJsZU5vZGU9dFswXSx0aGlzLl9fbGFzdEZvY3VzYWJsZU5vZGU9dFt0Lmxlbmd0aC0xXX0sX19vcGVuZWRDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQ/KHRoaXMuX3ByZXBhcmVSZW5kZXJPcGVuZWQoKSx0aGlzLl9tYW5hZ2VyLmFkZE92ZXJsYXkodGhpcyksdGhpcy5fYXBwbHlGb2N1cygpLHRoaXMuX3JlbmRlck9wZW5lZCgpKToodGhpcy5fbWFuYWdlci5yZW1vdmVPdmVybGF5KHRoaXMpLHRoaXMuX2FwcGx5Rm9jdXMoKSx0aGlzLl9yZW5kZXJDbG9zZWQoKSl9LF9fZGVyYWY6ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9fcmFmcztudWxsIT09blt0XSYmY2FuY2VsQW5pbWF0aW9uRnJhbWUoblt0XSksblt0XT1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gaSgpe25bdF09bnVsbCxlLmNhbGwodGhpcyl9LmJpbmQodGhpcykpfSxfX3VwZGF0ZVNjcm9sbE9ic2VydmVyczpmdW5jdGlvbih0LGUsbil7dCYmZSYmdGhpcy5fX2lzVmFsaWRTY3JvbGxBY3Rpb24obik/KCJsb2NrIj09PW4mJih0aGlzLl9fc2F2ZVNjcm9sbFBvc2l0aW9uKCksU2EodGhpcykpLHRoaXMuX19hZGRTY3JvbGxMaXN0ZW5lcnMoKSk6KChmdW5jdGlvbiBpKHQpe3ZhciBlPU1hLmluZGV4T2YodCk7LTEhPT1lJiYoTWEuc3BsaWNlKGUsMSkseWE9TWFbTWEubGVuZ3RoLTFdLDA9PT1NYS5sZW5ndGgmJihmdW5jdGlvbiBuKCl7Zm9yKHZhciB0PTAsZT13YS5sZW5ndGg7dDxlO3QrKylkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHdhW3RdLF9hLHtjYXB0dXJlOiEwLHBhc3NpdmU6ITF9KX0pKCkpfSkodGhpcyksdGhpcy5fX3JlbW92ZVNjcm9sbExpc3RlbmVycygpKX0sX19hZGRTY3JvbGxMaXN0ZW5lcnM6ZnVuY3Rpb24oKXtpZighdGhpcy5fX3Jvb3ROb2Rlcyl7aWYodGhpcy5fX3Jvb3ROb2Rlcz1bXSxtKWZvcih2YXIgdD10aGlzO3Q7KXQubm9kZVR5cGU9PT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUmJnQuaG9zdCYmdGhpcy5fX3Jvb3ROb2Rlcy5wdXNoKHQpLHQ9dC5ob3N0fHx0LmFzc2lnbmVkU2xvdHx8dC5wYXJlbnROb2RlO3RoaXMuX19yb290Tm9kZXMucHVzaChkb2N1bWVudCl9dGhpcy5fX3Jvb3ROb2Rlcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsdGhpcy5fX29uQ2FwdHVyZVNjcm9sbCx7Y2FwdHVyZTohMCxwYXNzaXZlOiEwfSl9KSx0aGlzKX0sX19yZW1vdmVTY3JvbGxMaXN0ZW5lcnM6ZnVuY3Rpb24oKXt0aGlzLl9fcm9vdE5vZGVzJiZ0aGlzLl9fcm9vdE5vZGVzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Nyb2xsIix0aGlzLl9fb25DYXB0dXJlU2Nyb2xsLHtjYXB0dXJlOiEwLHBhc3NpdmU6ITB9KX0pLHRoaXMpLHRoaXMuaXNBdHRhY2hlZHx8KHRoaXMuX19yb290Tm9kZXM9bnVsbCl9LF9faXNWYWxpZFNjcm9sbEFjdGlvbjpmdW5jdGlvbih0KXtyZXR1cm4ibG9jayI9PT10fHwicmVmaXQiPT09dHx8ImNhbmNlbCI9PT10fSxfX29uQ2FwdHVyZVNjcm9sbDpmdW5jdGlvbih0KXtpZighKHRoaXMuX19pc0FuaW1hdGluZ3x8cWkodCkucGF0aC5pbmRleE9mKHRoaXMpPj0wKSlzd2l0Y2godGhpcy5zY3JvbGxBY3Rpb24pe2Nhc2UibG9jayI6dGhpcy5fX3Jlc3RvcmVTY3JvbGxQb3NpdGlvbigpO2JyZWFrO2Nhc2UicmVmaXQiOnRoaXMuX19kZXJhZigicmVmaXQiLHRoaXMucmVmaXQpO2JyZWFrO2Nhc2UiY2FuY2VsIjp0aGlzLmNhbmNlbCh0KX19LF9fc2F2ZVNjcm9sbFBvc2l0aW9uOmZ1bmN0aW9uKCl7ZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudD8odGhpcy5fX3Njcm9sbFRvcD1kb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcCx0aGlzLl9fc2Nyb2xsTGVmdD1kb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQpOih0aGlzLl9fc2Nyb2xsVG9wPU1hdGgubWF4KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AsZG9jdW1lbnQuYm9keS5zY3JvbGxUb3ApLHRoaXMuX19zY3JvbGxMZWZ0PU1hdGgubWF4KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0LGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdCkpfSxfX3Jlc3RvcmVTY3JvbGxQb3NpdGlvbjpmdW5jdGlvbigpe2RvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQ/KGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wPXRoaXMuX19zY3JvbGxUb3AsZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0PXRoaXMuX19zY3JvbGxMZWZ0KTooZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcD1kb2N1bWVudC5ib2R5LnNjcm9sbFRvcD10aGlzLl9fc2Nyb2xsVG9wLGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0PWRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdD10aGlzLl9fc2Nyb2xsTGVmdCl9fSxDYT0odCxlKT0+e2ZvcihsZXQgaT1lO2k7aT0obj1pKS5hc3NpZ25lZFNsb3R8fG4ucGFyZW50Tm9kZXx8bi5ob3N0KWlmKGk9PT10KXJldHVybiEwO3ZhciBuO3JldHVybiExfSxBYT1bZGEsbW8sVGFdLGthPXtob3N0QXR0cmlidXRlczp7cm9sZToiZGlhbG9nIix0YWJpbmRleDoiLTEifSxwcm9wZXJ0aWVzOnttb2RhbDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfX3JlYWRpZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX19LG9ic2VydmVyczpbIl9tb2RhbENoYW5nZWQobW9kYWwsIF9fcmVhZGllZCkiXSxsaXN0ZW5lcnM6e3RhcDoiX29uRGlhbG9nQ2xpY2sifSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuX19wcmV2Tm9DYW5jZWxPbk91dHNpZGVDbGljaz10aGlzLm5vQ2FuY2VsT25PdXRzaWRlQ2xpY2ssdGhpcy5fX3ByZXZOb0NhbmNlbE9uRXNjS2V5PXRoaXMubm9DYW5jZWxPbkVzY0tleSx0aGlzLl9fcHJldldpdGhCYWNrZHJvcD10aGlzLndpdGhCYWNrZHJvcCx0aGlzLl9fcmVhZGllZD0hMH0sX21vZGFsQ2hhbmdlZDpmdW5jdGlvbih0LGUpe2UmJih0Pyh0aGlzLl9fcHJldk5vQ2FuY2VsT25PdXRzaWRlQ2xpY2s9dGhpcy5ub0NhbmNlbE9uT3V0c2lkZUNsaWNrLHRoaXMuX19wcmV2Tm9DYW5jZWxPbkVzY0tleT10aGlzLm5vQ2FuY2VsT25Fc2NLZXksdGhpcy5fX3ByZXZXaXRoQmFja2Ryb3A9dGhpcy53aXRoQmFja2Ryb3AsdGhpcy5ub0NhbmNlbE9uT3V0c2lkZUNsaWNrPSEwLHRoaXMubm9DYW5jZWxPbkVzY0tleT0hMCx0aGlzLndpdGhCYWNrZHJvcD0hMCk6KHRoaXMubm9DYW5jZWxPbk91dHNpZGVDbGljaz10aGlzLm5vQ2FuY2VsT25PdXRzaWRlQ2xpY2smJnRoaXMuX19wcmV2Tm9DYW5jZWxPbk91dHNpZGVDbGljayx0aGlzLm5vQ2FuY2VsT25Fc2NLZXk9dGhpcy5ub0NhbmNlbE9uRXNjS2V5JiZ0aGlzLl9fcHJldk5vQ2FuY2VsT25Fc2NLZXksdGhpcy53aXRoQmFja2Ryb3A9dGhpcy53aXRoQmFja2Ryb3AmJnRoaXMuX19wcmV2V2l0aEJhY2tkcm9wKSl9LF91cGRhdGVDbG9zaW5nUmVhc29uQ29uZmlybWVkOmZ1bmN0aW9uKHQpe3RoaXMuY2xvc2luZ1JlYXNvbj10aGlzLmNsb3NpbmdSZWFzb258fHt9LHRoaXMuY2xvc2luZ1JlYXNvbi5jb25maXJtZWQ9dH0sX29uRGlhbG9nQ2xpY2s6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXFpKHQpLnBhdGgsbj0wLGk9ZS5pbmRleE9mKHRoaXMpO248aTtuKyspe3ZhciByPWVbbl07aWYoci5oYXNBdHRyaWJ1dGUmJihyLmhhc0F0dHJpYnV0ZSgiZGlhbG9nLWRpc21pc3MiKXx8ci5oYXNBdHRyaWJ1dGUoImRpYWxvZy1jb25maXJtIikpKXt0aGlzLl91cGRhdGVDbG9zaW5nUmVhc29uQ29uZmlybWVkKHIuaGFzQXR0cmlidXRlKCJkaWFsb2ctY29uZmlybSIpKSx0aGlzLmNsb3NlKCksdC5zdG9wUHJvcGFnYXRpb24oKTticmVha319fX0sTGE9W0FhLGthXTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCmlmKAovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KSXIoe190ZW1wbGF0ZTpfZWAKICAgIDxzdHlsZT4KCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIDpob3N0KC5pcy1zY3JvbGxlZDpub3QoOmZpcnN0LWNoaWxkKSk6OmJlZm9yZSB7CiAgICAgICAgY29udGVudDogJyc7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGhlaWdodDogMXB4OwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWRpdmlkZXItY29sb3IpOwogICAgICB9CgogICAgICA6aG9zdCguY2FuLXNjcm9sbDpub3QoLnNjcm9sbGVkLXRvLWJvdHRvbSk6bm90KDpsYXN0LWNoaWxkKSk6OmFmdGVyIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgaGVpZ2h0OiAxcHg7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tZGl2aWRlci1jb2xvcik7CiAgICAgIH0KCiAgICAgIC5zY3JvbGxhYmxlIHsKICAgICAgICBwYWRkaW5nOiAwIDI0cHg7CgogICAgICAgIEBhcHBseSAtLWxheW91dC1zY3JvbGw7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZGlhbG9nLXNjcm9sbGFibGU7CiAgICAgIH0KCiAgICAgIC5maXQgewogICAgICAgIEBhcHBseSAtLWxheW91dC1maXQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBpZD0ic2Nyb2xsYWJsZSIgY2xhc3M9InNjcm9sbGFibGUiIG9uLXNjcm9sbD0idXBkYXRlU2Nyb2xsU3RhdGUiPgogICAgICA8c2xvdD48L3Nsb3Q+CiAgICA8L2Rpdj4KYCxpczoicGFwZXItZGlhbG9nLXNjcm9sbGFibGUiLHByb3BlcnRpZXM6e2RpYWxvZ0VsZW1lbnQ6e3R5cGU6T2JqZWN0fX0sZ2V0IHNjcm9sbFRhcmdldCgpe3JldHVybiB0aGlzLiQuc2Nyb2xsYWJsZX0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLl9lbnN1cmVUYXJnZXQoKSx0aGlzLmNsYXNzTGlzdC5hZGQoIm5vLXBhZGRpbmciKX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9lbnN1cmVUYXJnZXQoKSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy51cGRhdGVTY3JvbGxTdGF0ZS5iaW5kKHRoaXMpKX0sdXBkYXRlU2Nyb2xsU3RhdGU6ZnVuY3Rpb24oKXt0aGlzLnRvZ2dsZUNsYXNzKCJpcy1zY3JvbGxlZCIsdGhpcy5zY3JvbGxUYXJnZXQuc2Nyb2xsVG9wPjApLHRoaXMudG9nZ2xlQ2xhc3MoImNhbi1zY3JvbGwiLHRoaXMuc2Nyb2xsVGFyZ2V0Lm9mZnNldEhlaWdodDx0aGlzLnNjcm9sbFRhcmdldC5zY3JvbGxIZWlnaHQpLHRoaXMudG9nZ2xlQ2xhc3MoInNjcm9sbGVkLXRvLWJvdHRvbSIsdGhpcy5zY3JvbGxUYXJnZXQuc2Nyb2xsVG9wK3RoaXMuc2Nyb2xsVGFyZ2V0Lm9mZnNldEhlaWdodD49dGhpcy5zY3JvbGxUYXJnZXQuc2Nyb2xsSGVpZ2h0KX0sX2Vuc3VyZVRhcmdldDpmdW5jdGlvbigpe3RoaXMuZGlhbG9nRWxlbWVudD10aGlzLmRpYWxvZ0VsZW1lbnR8fHRoaXMucGFyZW50RWxlbWVudCx0aGlzLmRpYWxvZ0VsZW1lbnQmJnRoaXMuZGlhbG9nRWxlbWVudC5iZWhhdmlvcnMmJnRoaXMuZGlhbG9nRWxlbWVudC5iZWhhdmlvcnMuaW5kZXhPZihrYSk+PTA/KHRoaXMuZGlhbG9nRWxlbWVudC5zaXppbmdUYXJnZXQ9dGhpcy5zY3JvbGxUYXJnZXQsdGhpcy5zY3JvbGxUYXJnZXQuY2xhc3NMaXN0LnJlbW92ZSgiZml0IikpOnRoaXMuZGlhbG9nRWxlbWVudCYmdGhpcy5zY3JvbGxUYXJnZXQuY2xhc3NMaXN0LmFkZCgiZml0Iil9fSksIXdpbmRvdy5wb2x5bWVyU2tpcExvYWRpbmdGb250Um9ib3RvKXtjb25zdCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxpbmsiKTt0LnJlbD0ic3R5bGVzaGVldCIsdC50eXBlPSJ0ZXh0L2NzcyIsdC5jcm9zc09yaWdpbj0iYW5vbnltb3VzIix0LmhyZWY9Imh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1Sb2JvdG8rTW9ubzo0MDAsNzAwfFJvYm90bzo0MDAsMzAwLDMwMGl0YWxpYyw0MDBpdGFsaWMsNTAwLDUwMGl0YWxpYyw3MDAsNzAwaXRhbGljIixkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHQpfQovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi9jb25zdCBQYT1fZWA8Y3VzdG9tLXN0eWxlPgogIDxzdHlsZSBpcz0iY3VzdG9tLXN0eWxlIj4KICAgIGh0bWwgewoKICAgICAgLyogU2hhcmVkIFN0eWxlcyAqLwogICAgICAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U6IHsKICAgICAgICBmb250LWZhbWlseTogJ1JvYm90bycsICdOb3RvJywgc2Fucy1zZXJpZjsKICAgICAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1jb21tb24tY29kZTogewogICAgICAgIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nLCAnQ29uc29sYXMnLCAnTWVubG8nLCBtb25vc3BhY2U7CiAgICAgICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtY29tbW9uLWV4cGVuc2l2ZS1rZXJuaW5nOiB7CiAgICAgICAgdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1jb21tb24tbm93cmFwOiB7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICB9OwoKICAgICAgLyogTWF0ZXJpYWwgRm9udCBTdHlsZXMgKi8KCiAgICAgIC0tcGFwZXItZm9udC1kaXNwbGF5NDogewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tbm93cmFwOwoKICAgICAgICBmb250LXNpemU6IDExMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiAzMDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDQ0ZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDEyMHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LWRpc3BsYXkzOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1ub3dyYXA7CgogICAgICAgIGZvbnQtc2l6ZTogNTZweDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAyNmVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiA2MHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LWRpc3BsYXkyOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKCiAgICAgICAgZm9udC1zaXplOiA0NXB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDE4ZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDQ4cHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtZGlzcGxheTE6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwoKICAgICAgICBmb250LXNpemU6IDM0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLS4wMWVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiA0MHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LWhlYWRsaW5lOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKCiAgICAgICAgZm9udC1zaXplOiAyNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDEyZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDMycHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtdGl0bGU6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLW5vd3JhcDsKCiAgICAgICAgZm9udC1zaXplOiAyMHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDI4cHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtc3ViaGVhZDogewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CgogICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyNHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LWJvZHkyOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKCiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDI0cHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtYm9keTE6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwoKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBsaW5lLWhlaWdodDogMjBweDsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1jYXB0aW9uOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1ub3dyYXA7CgogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjAxMWVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LW1lbnU6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLW5vd3JhcDsKCiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDI0cHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtYnV0dG9uOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1ub3dyYXA7CgogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjAxOGVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyNHB4OwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtY29kZTI6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1jb2RlOwoKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgICAgICBsaW5lLWhlaWdodDogMjBweDsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1jb2RlMTogewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWNvZGU7CgogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgICB9OwoKICAgIH0KCiAgPC9zdHlsZT4KPC9jdXN0b20tc3R5bGU+YDtQYS5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZGlzcGxheTogbm9uZTsiKSxkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKFBhLmNvbnRlbnQpOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KY29uc3QgTmE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtOYS5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZGlzcGxheTogbm9uZTsiKSxOYS5pbm5lckhUTUw9Jzxkb20tbW9kdWxlIGlkPSJwYXBlci1kaWFsb2ctc2hhcmVkLXN0eWxlcyI+XG4gIDx0ZW1wbGF0ZT5cbiAgICA8c3R5bGU+XG4gICAgICA6aG9zdCB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBtYXJnaW46IDI0cHggNDBweDtcblxuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1wYXBlci1kaWFsb2ctYmFja2dyb3VuZC1jb2xvciwgdmFyKC0tcHJpbWFyeS1iYWNrZ3JvdW5kLWNvbG9yKSk7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1kaWFsb2ctY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpO1xuXG4gICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtYm9keTE7XG4gICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tMTZkcDtcbiAgICAgICAgQGFwcGx5IC0tcGFwZXItZGlhbG9nO1xuICAgICAgfVxuXG4gICAgICA6aG9zdCA+IDo6c2xvdHRlZCgqKSB7XG4gICAgICAgIG1hcmdpbi10b3A6IDIwcHg7XG4gICAgICAgIHBhZGRpbmc6IDAgMjRweDtcbiAgICAgIH1cblxuICAgICAgOmhvc3QgPiA6OnNsb3R0ZWQoLm5vLXBhZGRpbmcpIHtcbiAgICAgICAgcGFkZGluZzogMDtcbiAgICAgIH1cblxuICAgICAgXG4gICAgICA6aG9zdCA+IDo6c2xvdHRlZCgqOmZpcnN0LWNoaWxkKSB7XG4gICAgICAgIG1hcmdpbi10b3A6IDI0cHg7XG4gICAgICB9XG5cbiAgICAgIDpob3N0ID4gOjpzbG90dGVkKCo6bGFzdC1jaGlsZCkge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4O1xuICAgICAgfVxuXG4gICAgICAvKiBJbiAxLngsIHRoaXMgc2VsZWN0b3Igd2FzIGA6aG9zdCA+IDo6Y29udGVudCBoMmAuIEluIDIueCA8c2xvdD4gYWxsb3dzXG4gICAgICB0byBzZWxlY3QgZGlyZWN0IGNoaWxkcmVuIG9ubHksIHdoaWNoIGluY3JlYXNlcyB0aGUgd2VpZ2h0IG9mIHRoaXNcbiAgICAgIHNlbGVjdG9yLCBzbyB3ZSBoYXZlIHRvIHJlLWRlZmluZSBmaXJzdC1jaGlsZC9sYXN0LWNoaWxkIG1hcmdpbnMgYmVsb3cuICovXG4gICAgICA6aG9zdCA+IDo6c2xvdHRlZChoMikge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIG1hcmdpbjogMDtcblxuICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LXRpdGxlO1xuICAgICAgICBAYXBwbHkgLS1wYXBlci1kaWFsb2ctdGl0bGU7XG4gICAgICB9XG5cbiAgICAgIC8qIEFwcGx5IG1peGluIGFnYWluLCBpbiBjYXNlIGl0IHNldHMgbWFyZ2luLXRvcC4gKi9cbiAgICAgIDpob3N0ID4gOjpzbG90dGVkKGgyOmZpcnN0LWNoaWxkKSB7XG4gICAgICAgIG1hcmdpbi10b3A6IDI0cHg7XG4gICAgICAgIEBhcHBseSAtLXBhcGVyLWRpYWxvZy10aXRsZTtcbiAgICAgIH1cblxuICAgICAgLyogQXBwbHkgbWl4aW4gYWdhaW4sIGluIGNhc2UgaXQgc2V0cyBtYXJnaW4tYm90dG9tLiAqL1xuICAgICAgOmhvc3QgPiA6OnNsb3R0ZWQoaDI6bGFzdC1jaGlsZCkge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4O1xuICAgICAgICBAYXBwbHkgLS1wYXBlci1kaWFsb2ctdGl0bGU7XG4gICAgICB9XG5cbiAgICAgIDpob3N0ID4gOjpzbG90dGVkKC5wYXBlci1kaWFsb2ctYnV0dG9ucyksXG4gICAgICA6aG9zdCA+IDo6c2xvdHRlZCguYnV0dG9ucykge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIHBhZGRpbmc6IDhweCA4cHggOHB4IDI0cHg7XG4gICAgICAgIG1hcmdpbjogMDtcblxuICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItZGlhbG9nLWJ1dHRvbi1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpO1xuXG4gICAgICAgIEBhcHBseSAtLWxheW91dC1ob3Jpem9udGFsO1xuICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZW5kLWp1c3RpZmllZDtcbiAgICAgIH1cbiAgICA8L3N0eWxlPlxuICA8L3RlbXBsYXRlPlxuPC9kb20tbW9kdWxlPicsZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChOYS5jb250ZW50KTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCmNvbnN0IElhPVt7cHJvcGVydGllczp7YW5pbWF0aW9uQ29uZmlnOnt0eXBlOk9iamVjdH0sZW50cnlBbmltYXRpb246e29ic2VydmVyOiJfZW50cnlBbmltYXRpb25DaGFuZ2VkIix0eXBlOlN0cmluZ30sZXhpdEFuaW1hdGlvbjp7b2JzZXJ2ZXI6Il9leGl0QW5pbWF0aW9uQ2hhbmdlZCIsdHlwZTpTdHJpbmd9fSxfZW50cnlBbmltYXRpb25DaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5hbmltYXRpb25Db25maWc9dGhpcy5hbmltYXRpb25Db25maWd8fHt9LHRoaXMuYW5pbWF0aW9uQ29uZmlnLmVudHJ5PVt7bmFtZTp0aGlzLmVudHJ5QW5pbWF0aW9uLG5vZGU6dGhpc31dfSxfZXhpdEFuaW1hdGlvbkNoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLmFuaW1hdGlvbkNvbmZpZz10aGlzLmFuaW1hdGlvbkNvbmZpZ3x8e30sdGhpcy5hbmltYXRpb25Db25maWcuZXhpdD1be25hbWU6dGhpcy5leGl0QW5pbWF0aW9uLG5vZGU6dGhpc31dfSxfY29weVByb3BlcnRpZXM6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG4gaW4gZSl0W25dPWVbbl19LF9jbG9uZUNvbmZpZzpmdW5jdGlvbih0KXt2YXIgZT17aXNDbG9uZTohMH07cmV0dXJuIHRoaXMuX2NvcHlQcm9wZXJ0aWVzKGUsdCksZX0sX2dldEFuaW1hdGlvbkNvbmZpZ1JlY3Vyc2l2ZTpmdW5jdGlvbih0LGUsbil7dmFyIGk7aWYodGhpcy5hbmltYXRpb25Db25maWcpaWYodGhpcy5hbmltYXRpb25Db25maWcudmFsdWUmJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLmFuaW1hdGlvbkNvbmZpZy52YWx1ZSl0aGlzLl93YXJuKHRoaXMuX2xvZ2YoInBsYXlBbmltYXRpb24iLCJQbGVhc2UgcHV0ICdhbmltYXRpb25Db25maWcnIGluc2lkZSBvZiB5b3VyIGNvbXBvbmVudHMgJ3Byb3BlcnRpZXMnIG9iamVjdCBpbnN0ZWFkIG9mIG91dHNpZGUgb2YgaXQuIikpO2Vsc2UgaWYoaT10P3RoaXMuYW5pbWF0aW9uQ29uZmlnW3RdOnRoaXMuYW5pbWF0aW9uQ29uZmlnLEFycmF5LmlzQXJyYXkoaSl8fChpPVtpXSksaSlmb3IodmFyIHIsbz0wO3I9aVtvXTtvKyspaWYoci5hbmltYXRhYmxlKXIuYW5pbWF0YWJsZS5fZ2V0QW5pbWF0aW9uQ29uZmlnUmVjdXJzaXZlKHIudHlwZXx8dCxlLG4pO2Vsc2UgaWYoci5pZCl7dmFyIGE9ZVtyLmlkXTthPyhhLmlzQ2xvbmV8fChlW3IuaWRdPXRoaXMuX2Nsb25lQ29uZmlnKGEpLGE9ZVtyLmlkXSksdGhpcy5fY29weVByb3BlcnRpZXMoYSxyKSk6ZVtyLmlkXT1yfWVsc2Ugbi5wdXNoKHIpfSxnZXRBbmltYXRpb25Db25maWc6ZnVuY3Rpb24odCl7dmFyIGU9e30sbj1bXTtmb3IodmFyIGkgaW4gdGhpcy5fZ2V0QW5pbWF0aW9uQ29uZmlnUmVjdXJzaXZlKHQsZSxuKSxlKW4ucHVzaChlW2ldKTtyZXR1cm4gbn19LHtfY29uZmlndXJlQW5pbWF0aW9uczpmdW5jdGlvbih0KXt2YXIgZT1bXSxuPVtdO2lmKHQubGVuZ3RoPjApZm9yKGxldCBlLGk9MDtlPXRbaV07aSsrKXtsZXQgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGUubmFtZSk7aWYodC5pc05lb25BbmltYXRpb24pe2xldCBpPW51bGw7dC5jb25maWd1cmV8fCh0LmNvbmZpZ3VyZT1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbH0pLGk9dC5jb25maWd1cmUoZSksbi5wdXNoKHtyZXN1bHQ6aSxjb25maWc6ZSxuZW9uQW5pbWF0aW9uOnR9KX1lbHNlIGNvbnNvbGUud2Fybih0aGlzLmlzKyI6IixlLm5hbWUsIm5vdCBmb3VuZCEiKX1mb3IodmFyIGk9MDtpPG4ubGVuZ3RoO2krKyl7bGV0IHQ9bltpXS5yZXN1bHQscj1uW2ldLmNvbmZpZyxvPW5baV0ubmVvbkFuaW1hdGlvbjt0cnl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQuY2FuY2VsJiYodD1kb2N1bWVudC50aW1lbGluZS5wbGF5KHQpKX1jYXRjaChlKXt0PW51bGwsY29uc29sZS53YXJuKCJDb3VsZG50IHBsYXkiLCIoIixyLm5hbWUsIikuIixlKX10JiZlLnB1c2goe25lb25BbmltYXRpb246byxjb25maWc6cixhbmltYXRpb246dH0pfXJldHVybiBlfSxfc2hvdWxkQ29tcGxldGU6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPSEwLG49MDtuPHQubGVuZ3RoO24rKylpZigiZmluaXNoZWQiIT10W25dLmFuaW1hdGlvbi5wbGF5U3RhdGUpe2U9ITE7YnJlYWt9cmV0dXJuIGV9LF9jb21wbGV0ZTpmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl0W2VdLm5lb25BbmltYXRpb24uY29tcGxldGUodFtlXS5jb25maWcpO2ZvcihlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXS5hbmltYXRpb24uY2FuY2VsKCl9LHBsYXlBbmltYXRpb246ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLmdldEFuaW1hdGlvbkNvbmZpZyh0KTtpZihuKXt0aGlzLl9hY3RpdmU9dGhpcy5fYWN0aXZlfHx7fSx0aGlzLl9hY3RpdmVbdF0mJih0aGlzLl9jb21wbGV0ZSh0aGlzLl9hY3RpdmVbdF0pLGRlbGV0ZSB0aGlzLl9hY3RpdmVbdF0pO3ZhciBpPXRoaXMuX2NvbmZpZ3VyZUFuaW1hdGlvbnMobik7aWYoMCE9aS5sZW5ndGgpe3RoaXMuX2FjdGl2ZVt0XT1pO2Zvcih2YXIgcj0wO3I8aS5sZW5ndGg7cisrKWlbcl0uYW5pbWF0aW9uLm9uZmluaXNoPWZ1bmN0aW9uKCl7dGhpcy5fc2hvdWxkQ29tcGxldGUoaSkmJih0aGlzLl9jb21wbGV0ZShpKSxkZWxldGUgdGhpcy5fYWN0aXZlW3RdLHRoaXMuZmlyZSgibmVvbi1hbmltYXRpb24tZmluaXNoIixlLHtidWJibGVzOiExfSkpfS5iaW5kKHRoaXMpfWVsc2UgdGhpcy5maXJlKCJuZW9uLWFuaW1hdGlvbi1maW5pc2giLGUse2J1YmJsZXM6ITF9KX19LGNhbmNlbEFuaW1hdGlvbjpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLl9hY3RpdmUpe3ZhciBlPXRoaXMuX2FjdGl2ZVt0XTtmb3IodmFyIG4gaW4gZSllW25dLmFuaW1hdGlvbi5jYW5jZWwoKX10aGlzLl9hY3RpdmU9e319fV07Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KSXIoe190ZW1wbGF0ZTpfZWAKICAgIDxzdHlsZSBpbmNsdWRlPSJwYXBlci1kaWFsb2ctc2hhcmVkLXN0eWxlcyI+PC9zdHlsZT4KICAgIDxzbG90Pjwvc2xvdD4KYCxpczoicGFwZXItZGlhbG9nIixiZWhhdmlvcnM6W0xhLElhXSxsaXN0ZW5lcnM6eyJuZW9uLWFuaW1hdGlvbi1maW5pc2giOiJfb25OZW9uQW5pbWF0aW9uRmluaXNoIn0sX3JlbmRlck9wZW5lZDpmdW5jdGlvbigpe3RoaXMuY2FuY2VsQW5pbWF0aW9uKCksdGhpcy5wbGF5QW5pbWF0aW9uKCJlbnRyeSIpfSxfcmVuZGVyQ2xvc2VkOmZ1bmN0aW9uKCl7dGhpcy5jYW5jZWxBbmltYXRpb24oKSx0aGlzLnBsYXlBbmltYXRpb24oImV4aXQiKX0sX29uTmVvbkFuaW1hdGlvbkZpbmlzaDpmdW5jdGlvbigpe3RoaXMub3BlbmVkP3RoaXMuX2ZpbmlzaFJlbmRlck9wZW5lZCgpOnRoaXMuX2ZpbmlzaFJlbmRlckNsb3NlZCgpfX0pOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KY29uc3QgT2E9SXIoe190ZW1wbGF0ZTpfZWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgY2xpcDogcmVjdCgwcHgsMHB4LDBweCwwcHgpOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPGRpdiBhcmlhLWxpdmUkPSJbW21vZGVdXSI+W1tfdGV4dF1dPC9kaXY+CmAsaXM6Imlyb24tYTExeS1hbm5vdW5jZXIiLHByb3BlcnRpZXM6e21vZGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJwb2xpdGUifSx0aW1lb3V0Ont0eXBlOk51bWJlcix2YWx1ZToxNTB9LF90ZXh0Ont0eXBlOlN0cmluZyx2YWx1ZToiIn19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXtPYS5pbnN0YW5jZXx8KE9hLmluc3RhbmNlPXRoaXMpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImlyb24tYW5ub3VuY2UiLHRoaXMuX29uSXJvbkFubm91bmNlLmJpbmQodGhpcykpfSxhbm5vdW5jZTpmdW5jdGlvbih0KXt0aGlzLl90ZXh0PSIiLHRoaXMuYXN5bmMoKGZ1bmN0aW9uKCl7dGhpcy5fdGV4dD10fSksdGhpcy50aW1lb3V0KX0sX29uSXJvbkFubm91bmNlOmZ1bmN0aW9uKHQpe3QuZGV0YWlsJiZ0LmRldGFpbC50ZXh0JiZ0aGlzLmFubm91bmNlKHQuZGV0YWlsLnRleHQpfX0pO09hLmluc3RhbmNlPW51bGwsT2EucmVxdWVzdEF2YWlsYWJpbGl0eT1mdW5jdGlvbigpe09hLmluc3RhbmNlfHwoT2EuaW5zdGFuY2U9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaXJvbi1hMTF5LWFubm91bmNlciIpKSxkb2N1bWVudC5ib2R5P2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoT2EuaW5zdGFuY2UpOmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLChmdW5jdGlvbigpe2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoT2EuaW5zdGFuY2UpfSkpfSwKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCklyKHtfdGVtcGxhdGU6X2VgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8c2xvdCBpZD0iY29udGVudCI+PC9zbG90PgpgLGlzOiJpcm9uLWlucHV0IixiZWhhdmlvcnM6W29hXSxwcm9wZXJ0aWVzOntiaW5kVmFsdWU6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSx2YWx1ZTp7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6Il9jb21wdXRlVmFsdWUoYmluZFZhbHVlKSJ9LGFsbG93ZWRQYXR0ZXJuOnt0eXBlOlN0cmluZ30sYXV0b1ZhbGlkYXRlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9pbnB1dEVsZW1lbnQ6T2JqZWN0fSxvYnNlcnZlcnM6WyJfYmluZFZhbHVlQ2hhbmdlZChiaW5kVmFsdWUsIF9pbnB1dEVsZW1lbnQpIl0sbGlzdGVuZXJzOntpbnB1dDoiX29uSW5wdXQiLGtleXByZXNzOiJfb25LZXlwcmVzcyJ9LGNyZWF0ZWQ6ZnVuY3Rpb24oKXtPYS5yZXF1ZXN0QXZhaWxhYmlsaXR5KCksdGhpcy5fcHJldmlvdXNWYWxpZElucHV0PSIiLHRoaXMuX3BhdHRlcm5BbHJlYWR5Q2hlY2tlZD0hMX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9vYnNlcnZlcj1xaSh0aGlzKS5vYnNlcnZlTm9kZXMoZnVuY3Rpb24odCl7dGhpcy5faW5pdFNsb3R0ZWRJbnB1dCgpfS5iaW5kKHRoaXMpKX0sZGV0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9vYnNlcnZlciYmKHFpKHRoaXMpLnVub2JzZXJ2ZU5vZGVzKHRoaXMuX29ic2VydmVyKSx0aGlzLl9vYnNlcnZlcj1udWxsKX0sZ2V0IGlucHV0RWxlbWVudCgpe3JldHVybiB0aGlzLl9pbnB1dEVsZW1lbnR9LF9pbml0U2xvdHRlZElucHV0OmZ1bmN0aW9uKCl7dGhpcy5faW5wdXRFbGVtZW50PXRoaXMuZ2V0RWZmZWN0aXZlQ2hpbGRyZW4oKVswXSx0aGlzLmlucHV0RWxlbWVudCYmdGhpcy5pbnB1dEVsZW1lbnQudmFsdWUmJih0aGlzLmJpbmRWYWx1ZT10aGlzLmlucHV0RWxlbWVudC52YWx1ZSksdGhpcy5maXJlKCJpcm9uLWlucHV0LXJlYWR5Iil9LGdldCBfcGF0dGVyblJlZ0V4cCgpe3ZhciB0O2lmKHRoaXMuYWxsb3dlZFBhdHRlcm4pdD1uZXcgUmVnRXhwKHRoaXMuYWxsb3dlZFBhdHRlcm4pO2Vsc2Ugc3dpdGNoKHRoaXMuaW5wdXRFbGVtZW50LnR5cGUpe2Nhc2UibnVtYmVyIjp0PS9bMC05LixlLV0vfXJldHVybiB0fSxfYmluZFZhbHVlQ2hhbmdlZDpmdW5jdGlvbih0LGUpe2UmJih2b2lkIDA9PT10P2UudmFsdWU9bnVsbDp0IT09ZS52YWx1ZSYmKHRoaXMuaW5wdXRFbGVtZW50LnZhbHVlPXQpLHRoaXMuYXV0b1ZhbGlkYXRlJiZ0aGlzLnZhbGlkYXRlKCksdGhpcy5maXJlKCJiaW5kLXZhbHVlLWNoYW5nZWQiLHt2YWx1ZTp0fSkpfSxfb25JbnB1dDpmdW5jdGlvbigpe3RoaXMuYWxsb3dlZFBhdHRlcm4mJiF0aGlzLl9wYXR0ZXJuQWxyZWFkeUNoZWNrZWQmJih0aGlzLl9jaGVja1BhdHRlcm5WYWxpZGl0eSgpfHwodGhpcy5fYW5ub3VuY2VJbnZhbGlkQ2hhcmFjdGVyKCJJbnZhbGlkIHN0cmluZyBvZiBjaGFyYWN0ZXJzIG5vdCBlbnRlcmVkLiIpLHRoaXMuaW5wdXRFbGVtZW50LnZhbHVlPXRoaXMuX3ByZXZpb3VzVmFsaWRJbnB1dCkpLHRoaXMuYmluZFZhbHVlPXRoaXMuX3ByZXZpb3VzVmFsaWRJbnB1dD10aGlzLmlucHV0RWxlbWVudC52YWx1ZSx0aGlzLl9wYXR0ZXJuQWxyZWFkeUNoZWNrZWQ9ITF9LF9pc1ByaW50YWJsZTpmdW5jdGlvbih0KXtyZXR1cm4hKDg9PXQua2V5Q29kZXx8OT09dC5rZXlDb2RlfHwxMz09dC5rZXlDb2RlfHwyNz09dC5rZXlDb2RlfHwwPT10LmNoYXJDb2RlJiYoMTk9PXQua2V5Q29kZXx8MjA9PXQua2V5Q29kZXx8NDU9PXQua2V5Q29kZXx8NDY9PXQua2V5Q29kZXx8MTQ0PT10LmtleUNvZGV8fDE0NT09dC5rZXlDb2RlfHx0LmtleUNvZGU+MzImJnQua2V5Q29kZTw0MXx8dC5rZXlDb2RlPjExMSYmdC5rZXlDb2RlPDEyNCkpfSxfb25LZXlwcmVzczpmdW5jdGlvbih0KXtpZih0aGlzLmFsbG93ZWRQYXR0ZXJufHwibnVtYmVyIj09PXRoaXMuaW5wdXRFbGVtZW50LnR5cGUpe3ZhciBlPXRoaXMuX3BhdHRlcm5SZWdFeHA7aWYoZSYmISh0Lm1ldGFLZXl8fHQuY3RybEtleXx8dC5hbHRLZXkpKXt0aGlzLl9wYXR0ZXJuQWxyZWFkeUNoZWNrZWQ9ITA7dmFyIG49U3RyaW5nLmZyb21DaGFyQ29kZSh0LmNoYXJDb2RlKTt0aGlzLl9pc1ByaW50YWJsZSh0KSYmIWUudGVzdChuKSYmKHQucHJldmVudERlZmF1bHQoKSx0aGlzLl9hbm5vdW5jZUludmFsaWRDaGFyYWN0ZXIoIkludmFsaWQgY2hhcmFjdGVyICIrbisiIG5vdCBlbnRlcmVkLiIpKX19fSxfY2hlY2tQYXR0ZXJuVmFsaWRpdHk6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9wYXR0ZXJuUmVnRXhwO2lmKCF0KXJldHVybiEwO2Zvcih2YXIgZT0wO2U8dGhpcy5pbnB1dEVsZW1lbnQudmFsdWUubGVuZ3RoO2UrKylpZighdC50ZXN0KHRoaXMuaW5wdXRFbGVtZW50LnZhbHVlW2VdKSlyZXR1cm4hMTtyZXR1cm4hMH0sdmFsaWRhdGU6ZnVuY3Rpb24oKXtpZighdGhpcy5pbnB1dEVsZW1lbnQpcmV0dXJuIHRoaXMuaW52YWxpZD0hMSwhMDt2YXIgdD10aGlzLmlucHV0RWxlbWVudC5jaGVja1ZhbGlkaXR5KCk7cmV0dXJuIHQmJih0aGlzLnJlcXVpcmVkJiYiIj09PXRoaXMuYmluZFZhbHVlP3Q9ITE6dGhpcy5oYXNWYWxpZGF0b3IoKSYmKHQ9b2EudmFsaWRhdGUuY2FsbCh0aGlzLHRoaXMuYmluZFZhbHVlKSkpLHRoaXMuaW52YWxpZD0hdCx0aGlzLmZpcmUoImlyb24taW5wdXQtdmFsaWRhdGUiKSx0fSxfYW5ub3VuY2VJbnZhbGlkQ2hhcmFjdGVyOmZ1bmN0aW9uKHQpe3RoaXMuZmlyZSgiaXJvbi1hbm5vdW5jZSIse3RleHQ6dH0pfSxfY29tcHV0ZVZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0fX0pOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KY29uc3QgUmE9e2F0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5maXJlKCJhZGRvbi1hdHRhY2hlZCIpfSx1cGRhdGU6ZnVuY3Rpb24odCl7fX07Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqL0lyKHtfdGVtcGxhdGU6X2VgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNhcHRpb247CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY2hhci1jb3VudGVyOwogICAgICB9CgogICAgICA6aG9zdChbaGlkZGVuXSkgewogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgOmhvc3QoOmRpcihydGwpKSB7CiAgICAgICAgZmxvYXQ6IGxlZnQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHNwYW4+W1tfY2hhckNvdW50ZXJTdHJdXTwvc3Bhbj4KYCxpczoicGFwZXItaW5wdXQtY2hhci1jb3VudGVyIixiZWhhdmlvcnM6W1JhXSxwcm9wZXJ0aWVzOntfY2hhckNvdW50ZXJTdHI6e3R5cGU6U3RyaW5nLHZhbHVlOiIwIn19LHVwZGF0ZTpmdW5jdGlvbih0KXtpZih0LmlucHV0RWxlbWVudCl7dC52YWx1ZT10LnZhbHVlfHwiIjt2YXIgZT10LnZhbHVlLnRvU3RyaW5nKCkubGVuZ3RoLnRvU3RyaW5nKCk7dC5pbnB1dEVsZW1lbnQuaGFzQXR0cmlidXRlKCJtYXhsZW5ndGgiKSYmKGUrPSIvIit0LmlucHV0RWxlbWVudC5nZXRBdHRyaWJ1dGUoIm1heGxlbmd0aCIpKSx0aGlzLl9jaGFyQ291bnRlclN0cj1lfX19KTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCmNvbnN0IHphPV9lYAo8Y3VzdG9tLXN0eWxlPgogIDxzdHlsZSBpcz0iY3VzdG9tLXN0eWxlIj4KICAgIGh0bWwgewogICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1zaGFyZWQtaW5wdXQtc3R5bGU6IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7IC8qIHRvIG1ha2UgYSBzdGFja2luZyBjb250ZXh0ICovCiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBib3gtc2hhZG93OiBub25lOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIG1heC13aWR0aDogMTAwJTsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dC1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CiAgICAgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOwogICAgICAgIHRleHQtYWxpZ246IGluaGVyaXQ7CiAgICAgICAgdmVydGljYWwtYWxpZ246IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dC1hbGlnbiwgYm90dG9tKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1zdWJoZWFkOwogICAgICB9OwogICAgfQogIDwvc3R5bGU+CjwvY3VzdG9tLXN0eWxlPgpgO3phLnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoemEuY29udGVudCksSXIoe190ZW1wbGF0ZTpfZWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmc6IDhweCAwOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lcjsKICAgICAgfQoKICAgICAgOmhvc3QoW2lubGluZV0pIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBvcGFjaXR5OiAwLjMzOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItZGlzYWJsZWQ7CiAgICAgIH0KCiAgICAgIDpob3N0KFtoaWRkZW5dKSB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICBbaGlkZGVuXSB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAuZmxvYXRlZC1sYWJlbC1wbGFjZWhvbGRlciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jYXB0aW9uOwogICAgICB9CgogICAgICAudW5kZXJsaW5lIHsKICAgICAgICBoZWlnaHQ6IDJweDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5mb2N1c2VkLWxpbmUgewogICAgICAgIEBhcHBseSAtLWxheW91dC1maXQ7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1mb2N1cy1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwoKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IGNlbnRlciBjZW50ZXI7CiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyIGNlbnRlcjsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUzZCgwLDEsMSk7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZTNkKDAsMSwxKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLXVuZGVybGluZS1mb2N1czsKICAgICAgfQoKICAgICAgLnVuZGVybGluZS5pcy1oaWdobGlnaHRlZCAuZm9jdXNlZC1saW5lIHsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogbm9uZTsKICAgICAgICB0cmFuc2Zvcm06IG5vbmU7CiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAwLjI1czsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4yNXM7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRyYW5zaXRpb24tZWFzaW5nOwogICAgICB9CgogICAgICAudW5kZXJsaW5lLmlzLWludmFsaWQgLmZvY3VzZWQtbGluZSB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItaW52YWxpZC1jb2xvciwgdmFyKC0tZXJyb3ItY29sb3IpKTsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogbm9uZTsKICAgICAgICB0cmFuc2Zvcm06IG5vbmU7CiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAwLjI1czsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4yNXM7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRyYW5zaXRpb24tZWFzaW5nOwogICAgICB9CgogICAgICAudW5mb2N1c2VkLWxpbmUgewogICAgICAgIEBhcHBseSAtLWxheW91dC1maXQ7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvciwgdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpKTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItdW5kZXJsaW5lOwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAudW5mb2N1c2VkLWxpbmUgewogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBkYXNoZWQ7CiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItY29sb3IsIHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKSk7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLXVuZGVybGluZS1kaXNhYmxlZDsKICAgICAgfQoKICAgICAgLmlucHV0LXdyYXBwZXIgewogICAgICAgIEBhcHBseSAtLWxheW91dC1ob3Jpem9udGFsOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXgtYXV0bzsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtcmVsYXRpdmU7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQobGFiZWwpLAogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQoLnBhcGVyLWlucHV0LWxhYmVsKSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGZvbnQ6IGluaGVyaXQ7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvciwgdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpKTsKICAgICAgICAtd2Via2l0LXRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIDAuMjVzLCB3aWR0aCAwLjI1czsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4yNXMsIHdpZHRoIDAuMjVzOwogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogbGVmdCB0b3A7CiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogbGVmdCB0b3A7CiAgICAgICAgLyogRml4IGZvciBzYWZhcmkgbm90IGZvY3VzaW5nIDAtaGVpZ2h0IGRhdGUvdGltZSBpbnB1dHMgd2l0aCAtd2Via2l0LWFwcGVyYW5jZTogbm9uZTsgKi8KICAgICAgICBtaW4taGVpZ2h0OiAxcHg7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLW5vd3JhcDsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LXN1YmhlYWQ7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRyYW5zaXRpb24tZWFzaW5nOwogICAgICB9CgoKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKGxhYmVsKTpiZWZvcmUsCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZCgucGFwZXItaW5wdXQtbGFiZWwpOmJlZm9yZSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsLWJlZm9yZTsKICAgICAgfQoKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKGxhYmVsKTphZnRlciwKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKC5wYXBlci1pbnB1dC1sYWJlbCk6YWZ0ZXIgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1sYWJlbC1hZnRlcjsKICAgICAgfQoKICAgICAgLmlucHV0LWNvbnRlbnQubGFiZWwtaXMtZmxvYXRpbmcgOjpzbG90dGVkKGxhYmVsKSwKICAgICAgLmlucHV0LWNvbnRlbnQubGFiZWwtaXMtZmxvYXRpbmcgOjpzbG90dGVkKC5wYXBlci1pbnB1dC1sYWJlbCkgewogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC03NSUpIHNjYWxlKDAuNzUpOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNzUlKSBzY2FsZSgwLjc1KTsKCiAgICAgICAgLyogU2luY2Ugd2Ugc2NhbGUgdG8gNzUvMTAwIG9mIHRoZSBzaXplLCB3ZSBhY3R1YWxseSBoYXZlIDEwMC83NSBvZiB0aGUKICAgICAgICBvcmlnaW5hbCBzcGFjZSBub3cgYXZhaWxhYmxlICovCiAgICAgICAgd2lkdGg6IDEzMyU7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1sYWJlbC1mbG9hdGluZzsKICAgICAgfQoKICAgICAgOmhvc3QoOmRpcihydGwpKSAuaW5wdXQtY29udGVudC5sYWJlbC1pcy1mbG9hdGluZyA6OnNsb3R0ZWQobGFiZWwpLAogICAgICA6aG9zdCg6ZGlyKHJ0bCkpIC5pbnB1dC1jb250ZW50LmxhYmVsLWlzLWZsb2F0aW5nIDo6c2xvdHRlZCgucGFwZXItaW5wdXQtbGFiZWwpIHsKICAgICAgICByaWdodDogMDsKICAgICAgICBsZWZ0OiBhdXRvOwogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogcmlnaHQgdG9wOwogICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IHJpZ2h0IHRvcDsKICAgICAgfQoKICAgICAgLmlucHV0LWNvbnRlbnQubGFiZWwtaXMtaGlnaGxpZ2h0ZWQgOjpzbG90dGVkKGxhYmVsKSwKICAgICAgLmlucHV0LWNvbnRlbnQubGFiZWwtaXMtaGlnaGxpZ2h0ZWQgOjpzbG90dGVkKC5wYXBlci1pbnB1dC1sYWJlbCkgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItZm9jdXMtY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsLWZvY3VzOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudC5pcy1pbnZhbGlkIDo6c2xvdHRlZChsYWJlbCksCiAgICAgIC5pbnB1dC1jb250ZW50LmlzLWludmFsaWQgOjpzbG90dGVkKC5wYXBlci1pbnB1dC1sYWJlbCkgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItaW52YWxpZC1jb2xvciwgdmFyKC0tZXJyb3ItY29sb3IpKTsKICAgICAgfQoKICAgICAgLmlucHV0LWNvbnRlbnQubGFiZWwtaXMtaGlkZGVuIDo6c2xvdHRlZChsYWJlbCksCiAgICAgIC5pbnB1dC1jb250ZW50LmxhYmVsLWlzLWhpZGRlbiA6OnNsb3R0ZWQoLnBhcGVyLWlucHV0LWxhYmVsKSB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQoaW5wdXQpLAogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQoaXJvbi1pbnB1dCksCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZCh0ZXh0YXJlYSksCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZChpcm9uLWF1dG9ncm93LXRleHRhcmVhKSwKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKC5wYXBlci1pbnB1dC1pbnB1dCkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1zaGFyZWQtaW5wdXQtc3R5bGU7CiAgICAgICAgLyogVGhlIGFwcGx5IHNoaW0gZG9lc24ndCBhcHBseSB0aGUgbmVzdGVkIGNvbG9yIGN1c3RvbSBwcm9wZXJ0eSwKICAgICAgICAgIHNvIHdlIGhhdmUgdG8gcmUtYXBwbHkgaXQgaGVyZS4gKi8KICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQ7CiAgICAgIH0KCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZChpbnB1dCk6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24sCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZChpbnB1dCk6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24gewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dC13ZWJraXQtc3Bpbm5lcjsKICAgICAgfQoKICAgICAgLmlucHV0LWNvbnRlbnQuZm9jdXNlZCA6OnNsb3R0ZWQoaW5wdXQpLAogICAgICAuaW5wdXQtY29udGVudC5mb2N1c2VkIDo6c2xvdHRlZChpcm9uLWlucHV0KSwKICAgICAgLmlucHV0LWNvbnRlbnQuZm9jdXNlZCA6OnNsb3R0ZWQodGV4dGFyZWEpLAogICAgICAuaW5wdXQtY29udGVudC5mb2N1c2VkIDo6c2xvdHRlZChpcm9uLWF1dG9ncm93LXRleHRhcmVhKSwKICAgICAgLmlucHV0LWNvbnRlbnQuZm9jdXNlZCA6OnNsb3R0ZWQoLnBhcGVyLWlucHV0LWlucHV0KSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LWZvY3VzOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudC5pcy1pbnZhbGlkIDo6c2xvdHRlZChpbnB1dCksCiAgICAgIC5pbnB1dC1jb250ZW50LmlzLWludmFsaWQgOjpzbG90dGVkKGlyb24taW5wdXQpLAogICAgICAuaW5wdXQtY29udGVudC5pcy1pbnZhbGlkIDo6c2xvdHRlZCh0ZXh0YXJlYSksCiAgICAgIC5pbnB1dC1jb250ZW50LmlzLWludmFsaWQgOjpzbG90dGVkKGlyb24tYXV0b2dyb3ctdGV4dGFyZWEpLAogICAgICAuaW5wdXQtY29udGVudC5pcy1pbnZhbGlkIDo6c2xvdHRlZCgucGFwZXItaW5wdXQtaW5wdXQpIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQtaW52YWxpZDsKICAgICAgfQoKICAgICAgLnByZWZpeCA6OnNsb3R0ZWQoKikgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LXN1YmhlYWQ7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXgtbm9uZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1wcmVmaXg7CiAgICAgIH0KCiAgICAgIC5zdWZmaXggOjpzbG90dGVkKCopIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1zdWJoZWFkOwogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4LW5vbmU7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LXN1ZmZpeDsKICAgICAgfQoKICAgICAgLyogRmlyZWZveCBzZXRzIGEgbWluLXdpZHRoIG9uIHRoZSBpbnB1dCwgd2hpY2ggY2FuIGNhdXNlIGxheW91dCBpc3N1ZXMgKi8KICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKGlucHV0KSB7CiAgICAgICAgbWluLXdpZHRoOiAwOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQodGV4dGFyZWEpIHsKICAgICAgICByZXNpemU6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5hZGQtb24tY29udGVudCB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAuYWRkLW9uLWNvbnRlbnQuaXMtaW52YWxpZCA6OnNsb3R0ZWQoKikgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItaW52YWxpZC1jb2xvciwgdmFyKC0tZXJyb3ItY29sb3IpKTsKICAgICAgfQoKICAgICAgLmFkZC1vbi1jb250ZW50LmlzLWhpZ2hsaWdodGVkIDo6c2xvdHRlZCgqKSB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1mb2N1cy1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgY2xhc3M9ImZsb2F0ZWQtbGFiZWwtcGxhY2Vob2xkZXIiIGFyaWEtaGlkZGVuPSJ0cnVlIiBoaWRkZW49Iltbbm9MYWJlbEZsb2F0XV0iPiZuYnNwOzwvZGl2PgoKICAgIDxkaXYgY2xhc3M9ImlucHV0LXdyYXBwZXIiPgogICAgICA8c3BhbiBjbGFzcz0icHJlZml4Ij48c2xvdCBuYW1lPSJwcmVmaXgiPjwvc2xvdD48L3NwYW4+CgogICAgICA8ZGl2IGNsYXNzJD0iW1tfY29tcHV0ZUlucHV0Q29udGVudENsYXNzKG5vTGFiZWxGbG9hdCxhbHdheXNGbG9hdExhYmVsLGZvY3VzZWQsaW52YWxpZCxfaW5wdXRIYXNDb250ZW50KV1dIiBpZD0ibGFiZWxBbmRJbnB1dENvbnRhaW5lciI+CiAgICAgICAgPHNsb3QgbmFtZT0ibGFiZWwiPjwvc2xvdD4KICAgICAgICA8c2xvdCBuYW1lPSJpbnB1dCI+PC9zbG90PgogICAgICA8L2Rpdj4KCiAgICAgIDxzcGFuIGNsYXNzPSJzdWZmaXgiPjxzbG90IG5hbWU9InN1ZmZpeCI+PC9zbG90Pjwvc3Bhbj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3MkPSJbW19jb21wdXRlVW5kZXJsaW5lQ2xhc3MoZm9jdXNlZCxpbnZhbGlkKV1dIj4KICAgICAgPGRpdiBjbGFzcz0idW5mb2N1c2VkLWxpbmUiPjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJmb2N1c2VkLWxpbmUiPjwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcyQ9IltbX2NvbXB1dGVBZGRPbkNvbnRlbnRDbGFzcyhmb2N1c2VkLGludmFsaWQpXV0iPgogICAgICA8c2xvdCBuYW1lPSJhZGQtb24iPjwvc2xvdD4KICAgIDwvZGl2PgpgLGlzOiJwYXBlci1pbnB1dC1jb250YWluZXIiLHByb3BlcnRpZXM6e25vTGFiZWxGbG9hdDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxhbHdheXNGbG9hdExhYmVsOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGF0dHJGb3JWYWx1ZTp7dHlwZTpTdHJpbmcsdmFsdWU6ImJpbmQtdmFsdWUifSxhdXRvVmFsaWRhdGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0saW52YWxpZDp7b2JzZXJ2ZXI6Il9pbnZhbGlkQ2hhbmdlZCIsdHlwZTpCb29sZWFuLHZhbHVlOiExfSxmb2N1c2VkOntyZWFkT25seTohMCx0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwfSxfYWRkb25zOnt0eXBlOkFycmF5fSxfaW5wdXRIYXNDb250ZW50Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9pbnB1dFNlbGVjdG9yOnt0eXBlOlN0cmluZyx2YWx1ZToiaW5wdXQsaXJvbi1pbnB1dCx0ZXh0YXJlYSwucGFwZXItaW5wdXQtaW5wdXQifSxfYm91bmRPbkZvY3VzOnt0eXBlOkZ1bmN0aW9uLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29uRm9jdXMuYmluZCh0aGlzKX19LF9ib3VuZE9uQmx1cjp7dHlwZTpGdW5jdGlvbix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vbkJsdXIuYmluZCh0aGlzKX19LF9ib3VuZE9uSW5wdXQ6e3R5cGU6RnVuY3Rpb24sdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb25JbnB1dC5iaW5kKHRoaXMpfX0sX2JvdW5kVmFsdWVDaGFuZ2VkOnt0eXBlOkZ1bmN0aW9uLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29uVmFsdWVDaGFuZ2VkLmJpbmQodGhpcyl9fX0sbGlzdGVuZXJzOnsiYWRkb24tYXR0YWNoZWQiOiJfb25BZGRvbkF0dGFjaGVkIiwiaXJvbi1pbnB1dC12YWxpZGF0ZSI6Il9vbklyb25JbnB1dFZhbGlkYXRlIn0sZ2V0IF92YWx1ZUNoYW5nZWRFdmVudCgpe3JldHVybiB0aGlzLmF0dHJGb3JWYWx1ZSsiLWNoYW5nZWQifSxnZXQgX3Byb3BlcnR5Rm9yVmFsdWUoKXtyZXR1cm4gc3QodGhpcy5hdHRyRm9yVmFsdWUpfSxnZXQgX2lucHV0RWxlbWVudCgpe3JldHVybiBxaSh0aGlzKS5xdWVyeVNlbGVjdG9yKHRoaXMuX2lucHV0U2VsZWN0b3IpfSxnZXQgX2lucHV0RWxlbWVudFZhbHVlKCl7cmV0dXJuIHRoaXMuX2lucHV0RWxlbWVudFt0aGlzLl9wcm9wZXJ0eUZvclZhbHVlXXx8dGhpcy5faW5wdXRFbGVtZW50LnZhbHVlfSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuX19pc0ZpcnN0VmFsdWVVcGRhdGU9ITAsdGhpcy5fYWRkb25zfHwodGhpcy5fYWRkb25zPVtdKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLl9ib3VuZE9uRm9jdXMsITApLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsdGhpcy5fYm91bmRPbkJsdXIsITApfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuYXR0ckZvclZhbHVlP3RoaXMuX2lucHV0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHRoaXMuX3ZhbHVlQ2hhbmdlZEV2ZW50LHRoaXMuX2JvdW5kVmFsdWVDaGFuZ2VkKTp0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0Iix0aGlzLl9vbklucHV0KSx0aGlzLl9pbnB1dEVsZW1lbnRWYWx1ZSYmIiIhPXRoaXMuX2lucHV0RWxlbWVudFZhbHVlP3RoaXMuX2hhbmRsZVZhbHVlQW5kQXV0b1ZhbGlkYXRlKHRoaXMuX2lucHV0RWxlbWVudCk6dGhpcy5faGFuZGxlVmFsdWUodGhpcy5faW5wdXRFbGVtZW50KX0sX29uQWRkb25BdHRhY2hlZDpmdW5jdGlvbih0KXt0aGlzLl9hZGRvbnN8fCh0aGlzLl9hZGRvbnM9W10pO3ZhciBlPXQudGFyZ2V0Oy0xPT09dGhpcy5fYWRkb25zLmluZGV4T2YoZSkmJih0aGlzLl9hZGRvbnMucHVzaChlKSx0aGlzLmlzQXR0YWNoZWQmJnRoaXMuX2hhbmRsZVZhbHVlKHRoaXMuX2lucHV0RWxlbWVudCkpfSxfb25Gb2N1czpmdW5jdGlvbigpe3RoaXMuX3NldEZvY3VzZWQoITApfSxfb25CbHVyOmZ1bmN0aW9uKCl7dGhpcy5fc2V0Rm9jdXNlZCghMSksdGhpcy5faGFuZGxlVmFsdWVBbmRBdXRvVmFsaWRhdGUodGhpcy5faW5wdXRFbGVtZW50KX0sX29uSW5wdXQ6ZnVuY3Rpb24odCl7dGhpcy5faGFuZGxlVmFsdWVBbmRBdXRvVmFsaWRhdGUodC50YXJnZXQpfSxfb25WYWx1ZUNoYW5nZWQ6ZnVuY3Rpb24odCl7dmFyIGU9dC50YXJnZXQ7dGhpcy5fX2lzRmlyc3RWYWx1ZVVwZGF0ZSYmKHRoaXMuX19pc0ZpcnN0VmFsdWVVcGRhdGU9ITEsdm9pZCAwPT09ZS52YWx1ZXx8IiI9PT1lLnZhbHVlKXx8dGhpcy5faGFuZGxlVmFsdWVBbmRBdXRvVmFsaWRhdGUodC50YXJnZXQpfSxfaGFuZGxlVmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5faW5wdXRFbGVtZW50VmFsdWU7dGhpcy5faW5wdXRIYXNDb250ZW50PSEoIWUmJjAhPT1lJiYoIm51bWJlciIhPT10LnR5cGV8fHQuY2hlY2tWYWxpZGl0eSgpKSksdGhpcy51cGRhdGVBZGRvbnMoe2lucHV0RWxlbWVudDp0LHZhbHVlOmUsaW52YWxpZDp0aGlzLmludmFsaWR9KX0sX2hhbmRsZVZhbHVlQW5kQXV0b1ZhbGlkYXRlOmZ1bmN0aW9uKHQpe3ZhciBlO3RoaXMuYXV0b1ZhbGlkYXRlJiZ0JiYoZT10LnZhbGlkYXRlP3QudmFsaWRhdGUodGhpcy5faW5wdXRFbGVtZW50VmFsdWUpOnQuY2hlY2tWYWxpZGl0eSgpLHRoaXMuaW52YWxpZD0hZSksdGhpcy5faGFuZGxlVmFsdWUodCl9LF9vbklyb25JbnB1dFZhbGlkYXRlOmZ1bmN0aW9uKHQpe3RoaXMuaW52YWxpZD10aGlzLl9pbnB1dEVsZW1lbnQuaW52YWxpZH0sX2ludmFsaWRDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5fYWRkb25zJiZ0aGlzLnVwZGF0ZUFkZG9ucyh7aW52YWxpZDp0aGlzLmludmFsaWR9KX0sdXBkYXRlQWRkb25zOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPTA7ZT10aGlzLl9hZGRvbnNbbl07bisrKWUudXBkYXRlKHQpfSxfY29tcHV0ZUlucHV0Q29udGVudENsYXNzOmZ1bmN0aW9uKHQsZSxuLGkscil7dmFyIG89ImlucHV0LWNvbnRlbnQiO2lmKHQpciYmKG8rPSIgbGFiZWwtaXMtaGlkZGVuIiksaSYmKG8rPSIgaXMtaW52YWxpZCIpO2Vsc2V7dmFyIGE9dGhpcy5xdWVyeVNlbGVjdG9yKCJsYWJlbCIpO2V8fHI/KG8rPSIgbGFiZWwtaXMtZmxvYXRpbmciLHRoaXMuJC5sYWJlbEFuZElucHV0Q29udGFpbmVyLnN0eWxlLnBvc2l0aW9uPSJzdGF0aWMiLGk/bys9IiBpcy1pbnZhbGlkIjpuJiYobys9IiBsYWJlbC1pcy1oaWdobGlnaHRlZCIpKTooYSYmKHRoaXMuJC5sYWJlbEFuZElucHV0Q29udGFpbmVyLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIpLGkmJihvKz0iIGlzLWludmFsaWQiKSl9cmV0dXJuIG4mJihvKz0iIGZvY3VzZWQiKSxvfSxfY29tcHV0ZVVuZGVybGluZUNsYXNzOmZ1bmN0aW9uKHQsZSl7dmFyIG49InVuZGVybGluZSI7cmV0dXJuIGU/bis9IiBpcy1pbnZhbGlkIjp0JiYobis9IiBpcy1oaWdobGlnaHRlZCIpLG59LF9jb21wdXRlQWRkT25Db250ZW50Q2xhc3M6ZnVuY3Rpb24odCxlKXt2YXIgbj0iYWRkLW9uLWNvbnRlbnQiO3JldHVybiBlP24rPSIgaXMtaW52YWxpZCI6dCYmKG4rPSIgaXMtaGlnaGxpZ2h0ZWQiKSxufX0pLAovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KSXIoe190ZW1wbGF0ZTpfZWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CgogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItaW52YWxpZC1jb2xvciwgdmFyKC0tZXJyb3ItY29sb3IpKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jYXB0aW9uOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWVycm9yOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OjA7CiAgICAgICAgcmlnaHQ6MDsKICAgICAgfQoKICAgICAgOmhvc3QoW2ludmFsaWRdKSB7CiAgICAgICAgdmlzaWJpbGl0eTogdmlzaWJsZTsKICAgICAgfQoKICAgICAgI2ExMXlXcmFwcGVyIHsKICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIDpob3N0KFtpbnZhbGlkXSkgI2ExMXlXcmFwcGVyIHsKICAgICAgICB2aXNpYmlsaXR5OiB2aXNpYmxlOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDwhLS0KICAgIElmIHRoZSBwYXBlci1pbnB1dC1lcnJvciBlbGVtZW50IGlzIGRpcmVjdGx5IHJlZmVyZW5jZWQgYnkgYW4KICAgIFxgYXJpYS1kZXNjcmliZWRieVxgIGF0dHJpYnV0ZSwgc3VjaCBhcyB3aGVuIHVzZWQgYXMgYSBwYXBlci1pbnB1dCBhZGQtb24sCiAgICB0aGVuIGFwcGx5aW5nIFxgdmlzaWJpbGl0eTogaGlkZGVuO1xgIHRvIHRoZSBwYXBlci1pbnB1dC1lcnJvciBlbGVtZW50IGl0c2VsZgogICAgZG9lcyBub3QgaGlkZSB0aGUgZXJyb3IuCgogICAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZToKICAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9hY2NuYW1lLTEuMS8jbWFwcGluZ19hZGRpdGlvbmFsX25kX2Rlc2NyaXB0aW9uCiAgICAtLT4KICAgIDxkaXYgaWQ9ImExMXlXcmFwcGVyIj4KICAgICAgPHNsb3Q+PC9zbG90PgogICAgPC9kaXY+CmAsaXM6InBhcGVyLWlucHV0LWVycm9yIixiZWhhdmlvcnM6W1JhXSxwcm9wZXJ0aWVzOntpbnZhbGlkOntyZWFkT25seTohMCxyZWZsZWN0VG9BdHRyaWJ1dGU6ITAsdHlwZTpCb29sZWFufX0sdXBkYXRlOmZ1bmN0aW9uKHQpe3RoaXMuX3NldEludmFsaWQodC5pbnZhbGlkKX19KTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCmNvbnN0IERhPXtOZXh0TGFiZWxJRDoxLE5leHRBZGRvbklEOjEsTmV4dElucHV0SUQ6MX0sQmE9e3Byb3BlcnRpZXM6e2xhYmVsOnt0eXBlOlN0cmluZ30sdmFsdWU6e25vdGlmeTohMCx0eXBlOlN0cmluZ30sZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0saW52YWxpZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMH0sYWxsb3dlZFBhdHRlcm46e3R5cGU6U3RyaW5nfSx0eXBlOnt0eXBlOlN0cmluZ30sbGlzdDp7dHlwZTpTdHJpbmd9LHBhdHRlcm46e3R5cGU6U3RyaW5nfSxyZXF1aXJlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxlcnJvck1lc3NhZ2U6e3R5cGU6U3RyaW5nfSxjaGFyQ291bnRlcjp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxub0xhYmVsRmxvYXQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sYWx3YXlzRmxvYXRMYWJlbDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxhdXRvVmFsaWRhdGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sdmFsaWRhdG9yOnt0eXBlOlN0cmluZ30sYXV0b2NvbXBsZXRlOnt0eXBlOlN0cmluZyx2YWx1ZToib2ZmIn0sYXV0b2ZvY3VzOnt0eXBlOkJvb2xlYW4sb2JzZXJ2ZXI6Il9hdXRvZm9jdXNDaGFuZ2VkIn0saW5wdXRtb2RlOnt0eXBlOlN0cmluZ30sbWlubGVuZ3RoOnt0eXBlOk51bWJlcn0sbWF4bGVuZ3RoOnt0eXBlOk51bWJlcn0sbWluOnt0eXBlOlN0cmluZ30sbWF4Ont0eXBlOlN0cmluZ30sc3RlcDp7dHlwZTpTdHJpbmd9LG5hbWU6e3R5cGU6U3RyaW5nfSxwbGFjZWhvbGRlcjp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9LHJlYWRvbmx5Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHNpemU6e3R5cGU6TnVtYmVyfSxhdXRvY2FwaXRhbGl6ZTp7dHlwZTpTdHJpbmcsdmFsdWU6Im5vbmUifSxhdXRvY29ycmVjdDp7dHlwZTpTdHJpbmcsdmFsdWU6Im9mZiJ9LGF1dG9zYXZlOnt0eXBlOlN0cmluZ30scmVzdWx0czp7dHlwZTpOdW1iZXJ9LGFjY2VwdDp7dHlwZTpTdHJpbmd9LG11bHRpcGxlOnt0eXBlOkJvb2xlYW59LF9hcmlhRGVzY3JpYmVkQnk6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxfYXJpYUxhYmVsbGVkQnk6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxfaW5wdXRJZDp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9fSxsaXN0ZW5lcnM6eyJhZGRvbi1hdHRhY2hlZCI6Il9vbkFkZG9uQXR0YWNoZWQifSxrZXlCaW5kaW5nczp7InNoaWZ0K3RhYjprZXlkb3duIjoiX29uU2hpZnRUYWJEb3duIn0saG9zdEF0dHJpYnV0ZXM6e3RhYmluZGV4OjB9LGdldCBpbnB1dEVsZW1lbnQoKXtyZXR1cm4gdGhpcy4kfHwodGhpcy4kPXt9KSx0aGlzLiQuaW5wdXR8fCh0aGlzLl9nZW5lcmF0ZUlucHV0SWQoKSx0aGlzLiQuaW5wdXQ9dGhpcy4kJCgiIyIrdGhpcy5faW5wdXRJZCkpLHRoaXMuJC5pbnB1dH0sZ2V0IF9mb2N1c2FibGVFbGVtZW50KCl7cmV0dXJuIHRoaXMuaW5wdXRFbGVtZW50fSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy5fdHlwZXNUaGF0SGF2ZVRleHQ9WyJkYXRlIiwiZGF0ZXRpbWUiLCJkYXRldGltZS1sb2NhbCIsIm1vbnRoIiwidGltZSIsIndlZWsiLCJmaWxlIl19LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlQXJpYUxhYmVsbGVkQnkoKSwheWUmJnRoaXMuaW5wdXRFbGVtZW50JiYtMSE9PXRoaXMuX3R5cGVzVGhhdEhhdmVUZXh0LmluZGV4T2YodGhpcy5pbnB1dEVsZW1lbnQudHlwZSkmJih0aGlzLmFsd2F5c0Zsb2F0TGFiZWw9ITApfSxfYXBwZW5kU3RyaW5nV2l0aFNwYWNlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ/dCsiICIrZTplfSxfb25BZGRvbkF0dGFjaGVkOmZ1bmN0aW9uKHQpe3ZhciBlPXFpKHQpLnJvb3RUYXJnZXQ7aWYoZS5pZCl0aGlzLl9hcmlhRGVzY3JpYmVkQnk9dGhpcy5fYXBwZW5kU3RyaW5nV2l0aFNwYWNlKHRoaXMuX2FyaWFEZXNjcmliZWRCeSxlLmlkKTtlbHNle3ZhciBuPSJwYXBlci1pbnB1dC1hZGQtb24tIitEYS5OZXh0QWRkb25JRCsrO2UuaWQ9bix0aGlzLl9hcmlhRGVzY3JpYmVkQnk9dGhpcy5fYXBwZW5kU3RyaW5nV2l0aFNwYWNlKHRoaXMuX2FyaWFEZXNjcmliZWRCeSxuKX19LHZhbGlkYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5wdXRFbGVtZW50LnZhbGlkYXRlKCl9LF9mb2N1c0JsdXJIYW5kbGVyOmZ1bmN0aW9uKHQpe1dvLl9mb2N1c0JsdXJIYW5kbGVyLmNhbGwodGhpcyx0KSx0aGlzLmZvY3VzZWQmJiF0aGlzLl9zaGlmdFRhYlByZXNzZWQmJnRoaXMuX2ZvY3VzYWJsZUVsZW1lbnQmJnRoaXMuX2ZvY3VzYWJsZUVsZW1lbnQuZm9jdXMoKX0sX29uU2hpZnRUYWJEb3duOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2V0QXR0cmlidXRlKCJ0YWJpbmRleCIpO3RoaXMuX3NoaWZ0VGFiUHJlc3NlZD0hMCx0aGlzLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCItMSIpLHRoaXMuYXN5bmMoKGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IixlKSx0aGlzLl9zaGlmdFRhYlByZXNzZWQ9ITF9KSwxKX0sX2hhbmRsZUF1dG9WYWxpZGF0ZTpmdW5jdGlvbigpe3RoaXMuYXV0b1ZhbGlkYXRlJiZ0aGlzLnZhbGlkYXRlKCl9LHVwZGF0ZVZhbHVlQW5kUHJlc2VydmVDYXJldDpmdW5jdGlvbih0KXt0cnl7dmFyIGU9dGhpcy5pbnB1dEVsZW1lbnQuc2VsZWN0aW9uU3RhcnQ7dGhpcy52YWx1ZT10LHRoaXMuaW5wdXRFbGVtZW50LnNlbGVjdGlvblN0YXJ0PWUsdGhpcy5pbnB1dEVsZW1lbnQuc2VsZWN0aW9uRW5kPWV9Y2F0Y2goZSl7dGhpcy52YWx1ZT10fX0sX2NvbXB1dGVBbHdheXNGbG9hdExhYmVsOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV8fHR9LF91cGRhdGVBcmlhTGFiZWxsZWRCeTpmdW5jdGlvbigpe3ZhciB0LGU9cWkodGhpcy5yb290KS5xdWVyeVNlbGVjdG9yKCJsYWJlbCIpO2U/KGUuaWQ/dD1lLmlkOih0PSJwYXBlci1pbnB1dC1sYWJlbC0iK0RhLk5leHRMYWJlbElEKyssZS5pZD10KSx0aGlzLl9hcmlhTGFiZWxsZWRCeT10KTp0aGlzLl9hcmlhTGFiZWxsZWRCeT0iIn0sX2dlbmVyYXRlSW5wdXRJZDpmdW5jdGlvbigpe3RoaXMuX2lucHV0SWQmJiIiIT09dGhpcy5faW5wdXRJZHx8KHRoaXMuX2lucHV0SWQ9ImlucHV0LSIrRGEuTmV4dElucHV0SUQrKyl9LF9vbkNoYW5nZTpmdW5jdGlvbih0KXt0aGlzLnNoYWRvd1Jvb3QmJnRoaXMuZmlyZSh0LnR5cGUse3NvdXJjZUV2ZW50OnR9LHtub2RlOnRoaXMsYnViYmxlczp0LmJ1YmJsZXMsY2FuY2VsYWJsZTp0LmNhbmNlbGFibGV9KX0sX2F1dG9mb2N1c0NoYW5nZWQ6ZnVuY3Rpb24oKXtpZih0aGlzLmF1dG9mb2N1cyYmdGhpcy5fZm9jdXNhYmxlRWxlbWVudCl7dmFyIHQ9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDt0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQmJnQhPT1kb2N1bWVudC5ib2R5JiZ0IT09ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fHx0aGlzLl9mb2N1c2FibGVFbGVtZW50LmZvY3VzKCl9fX0sSGE9W1dvLFJvLEJhXTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCklyKHtpczoicGFwZXItaW5wdXQiLF90ZW1wbGF0ZTpfZWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICA6aG9zdChbZm9jdXNlZF0pIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICB9CgogICAgICA6aG9zdChbaGlkZGVuXSkgewogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgaW5wdXQgewogICAgICAgIC8qIEZpcmVmb3ggc2V0cyBhIG1pbi13aWR0aCBvbiB0aGUgaW5wdXQsIHdoaWNoIGNhbiBjYXVzZSBsYXlvdXQgaXNzdWVzICovCiAgICAgICAgbWluLXdpZHRoOiAwOwogICAgICB9CgogICAgICAvKiBJbiAxLngsIHRoZSA8aW5wdXQ+IGlzIGRpc3RyaWJ1dGVkIHRvIHBhcGVyLWlucHV0LWNvbnRhaW5lciwgd2hpY2ggc3R5bGVzIGl0LgogICAgICBJbiAyLnggdGhlIDxpcm9uLWlucHV0PiBpcyBkaXN0cmlidXRlZCB0byBwYXBlci1pbnB1dC1jb250YWluZXIsIHdoaWNoIHN0eWxlcwogICAgICBpdCwgYnV0IGluIG9yZGVyIGZvciB0aGlzIHRvIHdvcmsgY29ycmVjdGx5LCB3ZSBuZWVkIHRvIHJlc2V0IHNvbWUKICAgICAgb2YgdGhlIG5hdGl2ZSBpbnB1dCdzIHByb3BlcnRpZXMgdG8gaW5oZXJpdCAoZnJvbSB0aGUgaXJvbi1pbnB1dCkgKi8KICAgICAgaXJvbi1pbnB1dCA+IGlucHV0IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItc2hhcmVkLWlucHV0LXN0eWxlOwogICAgICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgICAgIGZvbnQtd2VpZ2h0OiBpbmhlcml0OwogICAgICAgIGZvbnQtc2l6ZTogaW5oZXJpdDsKICAgICAgICBsZXR0ZXItc3BhY2luZzogaW5oZXJpdDsKICAgICAgICB3b3JkLXNwYWNpbmc6IGluaGVyaXQ7CiAgICAgICAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7CiAgICAgICAgdGV4dC1zaGFkb3c6IGluaGVyaXQ7CiAgICAgICAgY29sb3I6IGluaGVyaXQ7CiAgICAgICAgY3Vyc29yOiBpbmhlcml0OwogICAgICB9CgogICAgICBpbnB1dDpkaXNhYmxlZCB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LWRpc2FibGVkOwogICAgICB9CgogICAgICBpbnB1dDo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiwKICAgICAgaW5wdXQ6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24gewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dC13ZWJraXQtc3Bpbm5lcjsKICAgICAgfQoKICAgICAgaW5wdXQ6Oi13ZWJraXQtY2xlYXItYnV0dG9uIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQtd2Via2l0LWNsZWFyOwogICAgICB9CgogICAgICBpbnB1dDo6LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9yIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQtd2Via2l0LWNhbGVuZGFyLXBpY2tlci1pbmRpY2F0b3I7CiAgICAgIH0KCiAgICAgIGlucHV0Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWNvbG9yLCB2YXIoLS1zZWNvbmRhcnktdGV4dC1jb2xvcikpOwogICAgICB9CgogICAgICBpbnB1dDotbW96LXBsYWNlaG9sZGVyIHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWNvbG9yLCB2YXIoLS1zZWNvbmRhcnktdGV4dC1jb2xvcikpOwogICAgICB9CgogICAgICBpbnB1dDo6LW1vei1wbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvciwgdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpKTsKICAgICAgfQoKICAgICAgaW5wdXQ6Oi1tcy1jbGVhciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLW1zLWNsZWFyOwogICAgICB9CgogICAgICBpbnB1dDo6LW1zLXJldmVhbCB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLW1zLXJldmVhbDsKICAgICAgfQoKICAgICAgaW5wdXQ6LW1zLWlucHV0LXBsYWNlaG9sZGVyIHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWNvbG9yLCB2YXIoLS1zZWNvbmRhcnktdGV4dC1jb2xvcikpOwogICAgICB9CgogICAgICBsYWJlbCB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHBhcGVyLWlucHV0LWNvbnRhaW5lciBpZD0iY29udGFpbmVyIiBuby1sYWJlbC1mbG9hdD0iW1tub0xhYmVsRmxvYXRdXSIgYWx3YXlzLWZsb2F0LWxhYmVsPSJbW19jb21wdXRlQWx3YXlzRmxvYXRMYWJlbChhbHdheXNGbG9hdExhYmVsLHBsYWNlaG9sZGVyKV1dIiBhdXRvLXZhbGlkYXRlJD0iW1thdXRvVmFsaWRhdGVdXSIgZGlzYWJsZWQkPSJbW2Rpc2FibGVkXV0iIGludmFsaWQ9IltbaW52YWxpZF1dIj4KCiAgICAgIDxzbG90IG5hbWU9InByZWZpeCIgc2xvdD0icHJlZml4Ij48L3Nsb3Q+CgogICAgICA8bGFiZWwgaGlkZGVuJD0iW1shbGFiZWxdXSIgYXJpYS1oaWRkZW49InRydWUiIGZvciQ9IltbX2lucHV0SWRdXSIgc2xvdD0ibGFiZWwiPltbbGFiZWxdXTwvbGFiZWw+CgogICAgICA8IS0tIE5lZWQgdG8gYmluZCBtYXhsZW5ndGggc28gdGhhdCB0aGUgcGFwZXItaW5wdXQtY2hhci1jb3VudGVyIHdvcmtzIGNvcnJlY3RseSAtLT4KICAgICAgPGlyb24taW5wdXQgYmluZC12YWx1ZT0ie3t2YWx1ZX19IiBzbG90PSJpbnB1dCIgY2xhc3M9ImlucHV0LWVsZW1lbnQiIGlkJD0iW1tfaW5wdXRJZF1dIiBtYXhsZW5ndGgkPSJbW21heGxlbmd0aF1dIiBhbGxvd2VkLXBhdHRlcm49IltbYWxsb3dlZFBhdHRlcm5dXSIgaW52YWxpZD0ie3tpbnZhbGlkfX0iIHZhbGlkYXRvcj0iW1t2YWxpZGF0b3JdXSI+CiAgICAgICAgPGlucHV0IGFyaWEtbGFiZWxsZWRieSQ9IltbX2FyaWFMYWJlbGxlZEJ5XV0iIGFyaWEtZGVzY3JpYmVkYnkkPSJbW19hcmlhRGVzY3JpYmVkQnldXSIgZGlzYWJsZWQkPSJbW2Rpc2FibGVkXV0iIHRpdGxlJD0iW1t0aXRsZV1dIiB0eXBlJD0iW1t0eXBlXV0iIHBhdHRlcm4kPSJbW3BhdHRlcm5dXSIgcmVxdWlyZWQkPSJbW3JlcXVpcmVkXV0iIGF1dG9jb21wbGV0ZSQ9IltbYXV0b2NvbXBsZXRlXV0iIGF1dG9mb2N1cyQ9IltbYXV0b2ZvY3VzXV0iIGlucHV0bW9kZSQ9IltbaW5wdXRtb2RlXV0iIG1pbmxlbmd0aCQ9IltbbWlubGVuZ3RoXV0iIG1heGxlbmd0aCQ9IltbbWF4bGVuZ3RoXV0iIG1pbiQ9IltbbWluXV0iIG1heCQ9IltbbWF4XV0iIHN0ZXAkPSJbW3N0ZXBdXSIgbmFtZSQ9IltbbmFtZV1dIiBwbGFjZWhvbGRlciQ9IltbcGxhY2Vob2xkZXJdXSIgcmVhZG9ubHkkPSJbW3JlYWRvbmx5XV0iIGxpc3QkPSJbW2xpc3RdXSIgc2l6ZSQ9Iltbc2l6ZV1dIiBhdXRvY2FwaXRhbGl6ZSQ9IltbYXV0b2NhcGl0YWxpemVdXSIgYXV0b2NvcnJlY3QkPSJbW2F1dG9jb3JyZWN0XV0iIG9uLWNoYW5nZT0iX29uQ2hhbmdlIiB0YWJpbmRleCQ9IltbdGFiSW5kZXhdXSIgYXV0b3NhdmUkPSJbW2F1dG9zYXZlXV0iIHJlc3VsdHMkPSJbW3Jlc3VsdHNdXSIgYWNjZXB0JD0iW1thY2NlcHRdXSIgbXVsdGlwbGUkPSJbW211bHRpcGxlXV0iIHJvbGUkPSJbW2lucHV0Um9sZV1dIiBhcmlhLWhhc3BvcHVwJD0iW1tpbnB1dEFyaWFIYXNwb3B1cF1dIj4KICAgICAgPC9pcm9uLWlucHV0PgoKICAgICAgPHNsb3QgbmFtZT0ic3VmZml4IiBzbG90PSJzdWZmaXgiPjwvc2xvdD4KCiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tlcnJvck1lc3NhZ2VdXSI+CiAgICAgICAgPHBhcGVyLWlucHV0LWVycm9yIGFyaWEtbGl2ZT0iYXNzZXJ0aXZlIiBzbG90PSJhZGQtb24iPltbZXJyb3JNZXNzYWdlXV08L3BhcGVyLWlucHV0LWVycm9yPgogICAgICA8L3RlbXBsYXRlPgoKICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2NoYXJDb3VudGVyXV0iPgogICAgICAgIDxwYXBlci1pbnB1dC1jaGFyLWNvdW50ZXIgc2xvdD0iYWRkLW9uIj48L3BhcGVyLWlucHV0LWNoYXItY291bnRlcj4KICAgICAgPC90ZW1wbGF0ZT4KCiAgICA8L3BhcGVyLWlucHV0LWNvbnRhaW5lcj4KICBgLGJlaGF2aW9yczpbSGEsaWFdLHByb3BlcnRpZXM6e3ZhbHVlOnt0eXBlOlN0cmluZ30saW5wdXRSb2xlOnt0eXBlOlN0cmluZyx2YWx1ZTp2b2lkIDB9LGlucHV0QXJpYUhhc3BvcHVwOnt0eXBlOlN0cmluZyx2YWx1ZTp2b2lkIDB9fSxnZXQgX2ZvY3VzYWJsZUVsZW1lbnQoKXtyZXR1cm4gdGhpcy5pbnB1dEVsZW1lbnQuX2lucHV0RWxlbWVudH0sbGlzdGVuZXJzOnsiaXJvbi1pbnB1dC1yZWFkeSI6Il9vbklyb25JbnB1dFJlYWR5In0sX29uSXJvbklucHV0UmVhZHk6ZnVuY3Rpb24oKXt0aGlzLiQubmF0aXZlSW5wdXR8fCh0aGlzLiQubmF0aXZlSW5wdXQ9dGhpcy4kJCgiaW5wdXQiKSksdGhpcy5pbnB1dEVsZW1lbnQmJi0xIT09dGhpcy5fdHlwZXNUaGF0SGF2ZVRleHQuaW5kZXhPZih0aGlzLiQubmF0aXZlSW5wdXQudHlwZSkmJih0aGlzLmFsd2F5c0Zsb2F0TGFiZWw9ITApLHRoaXMuaW5wdXRFbGVtZW50LmJpbmRWYWx1ZSYmdGhpcy4kLmNvbnRhaW5lci5faGFuZGxlVmFsdWVBbmRBdXRvVmFsaWRhdGUodGhpcy5pbnB1dEVsZW1lbnQpfX0pLAovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KSXIoe190ZW1wbGF0ZTpfZWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgfQoKICAgICAgI2NvbnRlbnRXcmFwcGVyIDo6c2xvdHRlZCgqKSB7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgIH0KCiAgICAgICNjb250ZW50V3JhcHBlci5hbmltYXRpbmcgOjpzbG90dGVkKCopIHsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgaWQ9ImNvbnRlbnRXcmFwcGVyIj4KICAgICAgPHNsb3QgaWQ9ImNvbnRlbnQiIG5hbWU9ImRyb3Bkb3duLWNvbnRlbnQiPjwvc2xvdD4KICAgIDwvZGl2PgpgLGlzOiJpcm9uLWRyb3Bkb3duIixiZWhhdmlvcnM6W1dvLFJvLEFhLElhXSxwcm9wZXJ0aWVzOntob3Jpem9udGFsQWxpZ246e3R5cGU6U3RyaW5nLHZhbHVlOiJsZWZ0IixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LHZlcnRpY2FsQWxpZ246e3R5cGU6U3RyaW5nLHZhbHVlOiJ0b3AiLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sb3BlbkFuaW1hdGlvbkNvbmZpZzp7dHlwZTpPYmplY3R9LGNsb3NlQW5pbWF0aW9uQ29uZmlnOnt0eXBlOk9iamVjdH0sZm9jdXNUYXJnZXQ6e3R5cGU6T2JqZWN0fSxub0FuaW1hdGlvbnM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sYWxsb3dPdXRzaWRlU2Nyb2xsOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsb2JzZXJ2ZXI6Il9hbGxvd091dHNpZGVTY3JvbGxDaGFuZ2VkIn19LGxpc3RlbmVyczp7Im5lb24tYW5pbWF0aW9uLWZpbmlzaCI6Il9vbk5lb25BbmltYXRpb25GaW5pc2gifSxvYnNlcnZlcnM6WyJfdXBkYXRlT3ZlcmxheVBvc2l0aW9uKHBvc2l0aW9uVGFyZ2V0LCB2ZXJ0aWNhbEFsaWduLCBob3Jpem9udGFsQWxpZ24sIHZlcnRpY2FsT2Zmc2V0LCBob3Jpem9udGFsT2Zmc2V0KSJdLGdldCBjb250YWluZWRFbGVtZW50KCl7Zm9yKHZhciB0PXFpKHRoaXMuJC5jb250ZW50KS5nZXREaXN0cmlidXRlZE5vZGVzKCksZT0wLG49dC5sZW5ndGg7ZTxuO2UrKylpZih0W2VdLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUpcmV0dXJuIHRbZV19LHJlYWR5OmZ1bmN0aW9uKCl7dGhpcy5zY3JvbGxBY3Rpb258fCh0aGlzLnNjcm9sbEFjdGlvbj10aGlzLmFsbG93T3V0c2lkZVNjcm9sbD8icmVmaXQiOiJsb2NrIiksdGhpcy5fcmVhZGllZD0hMH0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLnNpemluZ1RhcmdldCYmdGhpcy5zaXppbmdUYXJnZXQhPT10aGlzfHwodGhpcy5zaXppbmdUYXJnZXQ9dGhpcy5jb250YWluZWRFbGVtZW50fHx0aGlzKX0sZGV0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLmNhbmNlbEFuaW1hdGlvbigpfSxfb3BlbmVkQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMub3BlbmVkJiZ0aGlzLmRpc2FibGVkP3RoaXMuY2FuY2VsKCk6KHRoaXMuY2FuY2VsQW5pbWF0aW9uKCksdGhpcy5fdXBkYXRlQW5pbWF0aW9uQ29uZmlnKCksVGEuX29wZW5lZENoYW5nZWQuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0sX3JlbmRlck9wZW5lZDpmdW5jdGlvbigpeyF0aGlzLm5vQW5pbWF0aW9ucyYmdGhpcy5hbmltYXRpb25Db25maWcub3Blbj8odGhpcy4kLmNvbnRlbnRXcmFwcGVyLmNsYXNzTGlzdC5hZGQoImFuaW1hdGluZyIpLHRoaXMucGxheUFuaW1hdGlvbigib3BlbiIpKTpUYS5fcmVuZGVyT3BlbmVkLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sX3JlbmRlckNsb3NlZDpmdW5jdGlvbigpeyF0aGlzLm5vQW5pbWF0aW9ucyYmdGhpcy5hbmltYXRpb25Db25maWcuY2xvc2U/KHRoaXMuJC5jb250ZW50V3JhcHBlci5jbGFzc0xpc3QuYWRkKCJhbmltYXRpbmciKSx0aGlzLnBsYXlBbmltYXRpb24oImNsb3NlIikpOlRhLl9yZW5kZXJDbG9zZWQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxfb25OZW9uQW5pbWF0aW9uRmluaXNoOmZ1bmN0aW9uKCl7dGhpcy4kLmNvbnRlbnRXcmFwcGVyLmNsYXNzTGlzdC5yZW1vdmUoImFuaW1hdGluZyIpLHRoaXMub3BlbmVkP3RoaXMuX2ZpbmlzaFJlbmRlck9wZW5lZCgpOnRoaXMuX2ZpbmlzaFJlbmRlckNsb3NlZCgpfSxfdXBkYXRlQW5pbWF0aW9uQ29uZmlnOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuY29udGFpbmVkRWxlbWVudCxlPVtdLmNvbmNhdCh0aGlzLm9wZW5BbmltYXRpb25Db25maWd8fFtdKS5jb25jYXQodGhpcy5jbG9zZUFuaW1hdGlvbkNvbmZpZ3x8W10pLG49MDtuPGUubGVuZ3RoO24rKyllW25dLm5vZGU9dDt0aGlzLmFuaW1hdGlvbkNvbmZpZz17b3Blbjp0aGlzLm9wZW5BbmltYXRpb25Db25maWcsY2xvc2U6dGhpcy5jbG9zZUFuaW1hdGlvbkNvbmZpZ319LF91cGRhdGVPdmVybGF5UG9zaXRpb246ZnVuY3Rpb24oKXt0aGlzLmlzQXR0YWNoZWQmJnRoaXMubm90aWZ5UmVzaXplKCl9LF9hbGxvd091dHNpZGVTY3JvbGxDaGFuZ2VkOmZ1bmN0aW9uKHQpe3RoaXMuX3JlYWRpZWQmJih0P3RoaXMuc2Nyb2xsQWN0aW9uJiYibG9jayIhPT10aGlzLnNjcm9sbEFjdGlvbnx8KHRoaXMuc2Nyb2xsQWN0aW9uPSJyZWZpdCIpOnRoaXMuc2Nyb2xsQWN0aW9uPSJsb2NrIil9LF9hcHBseUZvY3VzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5mb2N1c1RhcmdldHx8dGhpcy5jb250YWluZWRFbGVtZW50O3QmJnRoaXMub3BlbmVkJiYhdGhpcy5ub0F1dG9Gb2N1cz90LmZvY3VzKCk6VGEuX2FwcGx5Rm9jdXMuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0pOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KY29uc3QgRmE9e3Byb3BlcnRpZXM6e2FuaW1hdGlvblRpbWluZzp7dHlwZTpPYmplY3QsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm57ZHVyYXRpb246NTAwLGVhc2luZzoiY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSIsZmlsbDoiYm90aCJ9fX19LGlzTmVvbkFuaW1hdGlvbjohMCxjcmVhdGVkOmZ1bmN0aW9uKCl7ZG9jdW1lbnQuYm9keS5hbmltYXRlfHxjb25zb2xlLndhcm4oIk5vIHdlYiBhbmltYXRpb25zIGRldGVjdGVkLiBUaGlzIGVsZW1lbnQgd2lsbCBub3QgZnVuY3Rpb24gd2l0aG91dCBhIHdlYiBhbmltYXRpb25zIHBvbHlmaWxsLiIpfSx0aW1pbmdGcm9tQ29uZmlnOmZ1bmN0aW9uKHQpe2lmKHQudGltaW5nKWZvcih2YXIgZSBpbiB0LnRpbWluZyl0aGlzLmFuaW1hdGlvblRpbWluZ1tlXT10LnRpbWluZ1tlXTtyZXR1cm4gdGhpcy5hbmltYXRpb25UaW1pbmd9LHNldFByZWZpeGVkUHJvcGVydHk6ZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgaSxyPXt0cmFuc2Zvcm06WyJ3ZWJraXRUcmFuc2Zvcm0iXSx0cmFuc2Zvcm1PcmlnaW46WyJtb3pUcmFuc2Zvcm1PcmlnaW4iLCJ3ZWJraXRUcmFuc2Zvcm1PcmlnaW4iXX1bZV0sbz0wO2k9cltvXTtvKyspdC5zdHlsZVtpXT1uO3Quc3R5bGVbZV09bn0sY29tcGxldGU6ZnVuY3Rpb24odCl7fX07Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqL0lyKHtpczoiZmFkZS1pbi1hbmltYXRpb24iLGJlaGF2aW9yczpbRmFdLGNvbmZpZ3VyZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZWZmZWN0PW5ldyBLZXlmcmFtZUVmZmVjdCh0Lm5vZGUsW3tvcGFjaXR5OiIwIn0se29wYWNpdHk6IjEifV0sdGhpcy50aW1pbmdGcm9tQ29uZmlnKHQpKSx0aGlzLl9lZmZlY3R9fSksCi8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpJcih7aXM6ImZhZGUtb3V0LWFuaW1hdGlvbiIsYmVoYXZpb3JzOltGYV0sY29uZmlndXJlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9lZmZlY3Q9bmV3IEtleWZyYW1lRWZmZWN0KHQubm9kZSxbe29wYWNpdHk6IjEifSx7b3BhY2l0eToiMCJ9XSx0aGlzLnRpbWluZ0Zyb21Db25maWcodCkpLHRoaXMuX2VmZmVjdH19KSwKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCklyKHtpczoicGFwZXItbWVudS1ncm93LWhlaWdodC1hbmltYXRpb24iLF90ZW1wbGF0ZTpudWxsLGJlaGF2aW9yczpbRmFdLGNvbmZpZ3VyZTpmdW5jdGlvbih0KXt2YXIgZT10Lm5vZGUsbj1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtyZXR1cm4gdGhpcy5fZWZmZWN0PW5ldyBLZXlmcmFtZUVmZmVjdChlLFt7aGVpZ2h0Om4vMisicHgifSx7aGVpZ2h0Om4rInB4In1dLHRoaXMudGltaW5nRnJvbUNvbmZpZyh0KSksdGhpcy5fZWZmZWN0fX0pLElyKHtpczoicGFwZXItbWVudS1ncm93LXdpZHRoLWFuaW1hdGlvbiIsX3RlbXBsYXRlOm51bGwsYmVoYXZpb3JzOltGYV0sY29uZmlndXJlOmZ1bmN0aW9uKHQpe3ZhciBlPXQubm9kZSxuPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7cmV0dXJuIHRoaXMuX2VmZmVjdD1uZXcgS2V5ZnJhbWVFZmZlY3QoZSxbe3dpZHRoOm4vMisicHgifSx7d2lkdGg6bisicHgifV0sdGhpcy50aW1pbmdGcm9tQ29uZmlnKHQpKSx0aGlzLl9lZmZlY3R9fSksSXIoe2lzOiJwYXBlci1tZW51LXNocmluay13aWR0aC1hbmltYXRpb24iLF90ZW1wbGF0ZTpudWxsLGJlaGF2aW9yczpbRmFdLGNvbmZpZ3VyZTpmdW5jdGlvbih0KXt2YXIgZT10Lm5vZGUsbj1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO3JldHVybiB0aGlzLl9lZmZlY3Q9bmV3IEtleWZyYW1lRWZmZWN0KGUsW3t3aWR0aDpuKyJweCJ9LHt3aWR0aDpuLW4vMjArInB4In1dLHRoaXMudGltaW5nRnJvbUNvbmZpZyh0KSksdGhpcy5fZWZmZWN0fX0pLElyKHtpczoicGFwZXItbWVudS1zaHJpbmstaGVpZ2h0LWFuaW1hdGlvbiIsX3RlbXBsYXRlOm51bGwsYmVoYXZpb3JzOltGYV0sY29uZmlndXJlOmZ1bmN0aW9uKHQpe3ZhciBlPXQubm9kZSxuPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O3JldHVybiB0aGlzLnNldFByZWZpeGVkUHJvcGVydHkoZSwidHJhbnNmb3JtT3JpZ2luIiwiMCAwIiksdGhpcy5fZWZmZWN0PW5ldyBLZXlmcmFtZUVmZmVjdChlLFt7aGVpZ2h0Om4rInB4Iix0cmFuc2Zvcm06InRyYW5zbGF0ZVkoMCkifSx7aGVpZ2h0Om4vMisicHgiLHRyYW5zZm9ybToidHJhbnNsYXRlWSgtMjBweCkifV0sdGhpcy50aW1pbmdGcm9tQ29uZmlnKHQpKSx0aGlzLl9lZmZlY3R9fSk7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwp2YXIgVmE9e0FOSU1BVElPTl9DVUJJQ19CRVpJRVI6ImN1YmljLWJlemllciguMywuOTUsLjUsMSkiLE1BWF9BTklNQVRJT05fVElNRV9NUzo0MDB9O2NvbnN0IFVhPUlyKHtfdGVtcGxhdGU6X2VgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgICBvdXRsaW5lOiBub25lOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1tZW51LWJ1dHRvbjsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgewogICAgICAgIGN1cnNvcjogYXV0bzsKICAgICAgICBjb2xvcjogdmFyKC0tZGlzYWJsZWQtdGV4dC1jb2xvcik7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLW1lbnUtYnV0dG9uLWRpc2FibGVkOwogICAgICB9CgogICAgICBpcm9uLWRyb3Bkb3duIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1tZW51LWJ1dHRvbi1kcm9wZG93bjsKICAgICAgfQoKICAgICAgLmRyb3Bkb3duLWNvbnRlbnQgewogICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tMmRwOwoKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLW1lbnUtYnV0dG9uLWRyb3Bkb3duLWJhY2tncm91bmQsIHZhcigtLXByaW1hcnktYmFja2dyb3VuZC1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1tZW51LWJ1dHRvbi1jb250ZW50OwogICAgICB9CgogICAgICA6aG9zdChbdmVydGljYWwtYWxpZ249InRvcCJdKSAuZHJvcGRvd24tY29udGVudCB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDsKICAgICAgICBtYXJnaW4tdG9wOiAtMTBweDsKICAgICAgICB0b3A6IDEwcHg7CiAgICAgIH0KCiAgICAgIDpob3N0KFt2ZXJ0aWNhbC1hbGlnbj0iYm90dG9tIl0pIC5kcm9wZG93bi1jb250ZW50IHsKICAgICAgICBib3R0b206IDEwcHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogLTEwcHg7CiAgICAgICAgbWFyZ2luLXRvcDogMjBweDsKICAgICAgfQoKICAgICAgI3RyaWdnZXIgewogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGlkPSJ0cmlnZ2VyIiBvbi10YXA9InRvZ2dsZSI+CiAgICAgIDxzbG90IG5hbWU9ImRyb3Bkb3duLXRyaWdnZXIiPjwvc2xvdD4KICAgIDwvZGl2PgoKICAgIDxpcm9uLWRyb3Bkb3duIGlkPSJkcm9wZG93biIgb3BlbmVkPSJ7e29wZW5lZH19IiBob3Jpem9udGFsLWFsaWduPSJbW2hvcml6b250YWxBbGlnbl1dIiB2ZXJ0aWNhbC1hbGlnbj0iW1t2ZXJ0aWNhbEFsaWduXV0iIGR5bmFtaWMtYWxpZ249IltbZHluYW1pY0FsaWduXV0iIGhvcml6b250YWwtb2Zmc2V0PSJbW2hvcml6b250YWxPZmZzZXRdXSIgdmVydGljYWwtb2Zmc2V0PSJbW3ZlcnRpY2FsT2Zmc2V0XV0iIG5vLW92ZXJsYXA9Iltbbm9PdmVybGFwXV0iIG9wZW4tYW5pbWF0aW9uLWNvbmZpZz0iW1tvcGVuQW5pbWF0aW9uQ29uZmlnXV0iIGNsb3NlLWFuaW1hdGlvbi1jb25maWc9IltbY2xvc2VBbmltYXRpb25Db25maWddXSIgbm8tYW5pbWF0aW9ucz0iW1tub0FuaW1hdGlvbnNdXSIgZm9jdXMtdGFyZ2V0PSJbW19kcm9wZG93bkNvbnRlbnRdXSIgYWxsb3ctb3V0c2lkZS1zY3JvbGw9IltbYWxsb3dPdXRzaWRlU2Nyb2xsXV0iIHJlc3RvcmUtZm9jdXMtb24tY2xvc2U9IltbcmVzdG9yZUZvY3VzT25DbG9zZV1dIiBvbi1pcm9uLW92ZXJsYXktY2FuY2VsZWQ9Il9fb25Jcm9uT3ZlcmxheUNhbmNlbGVkIiBleHBhbmQtc2l6aW5nLXRhcmdldC1mb3Itc2Nyb2xsYmFycz0iW1tleHBhbmRTaXppbmdUYXJnZXRGb3JTY3JvbGxiYXJzXV0iPgogICAgICA8ZGl2IHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiIGNsYXNzPSJkcm9wZG93bi1jb250ZW50Ij4KICAgICAgICA8c2xvdCBpZD0iY29udGVudCIgbmFtZT0iZHJvcGRvd24tY29udGVudCI+PC9zbG90PgogICAgICA8L2Rpdj4KICAgIDwvaXJvbi1kcm9wZG93bj4KYCxpczoicGFwZXItbWVudS1idXR0b24iLGJlaGF2aW9yczpbUm8sV29dLHByb3BlcnRpZXM6e29wZW5lZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMCxvYnNlcnZlcjoiX29wZW5lZENoYW5nZWQifSxob3Jpem9udGFsQWxpZ246e3R5cGU6U3RyaW5nLHZhbHVlOiJsZWZ0IixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LHZlcnRpY2FsQWxpZ246e3R5cGU6U3RyaW5nLHZhbHVlOiJ0b3AiLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sZHluYW1pY0FsaWduOnt0eXBlOkJvb2xlYW59LGhvcml6b250YWxPZmZzZXQ6e3R5cGU6TnVtYmVyLHZhbHVlOjAsbm90aWZ5OiEwfSx2ZXJ0aWNhbE9mZnNldDp7dHlwZTpOdW1iZXIsdmFsdWU6MCxub3RpZnk6ITB9LG5vT3ZlcmxhcDp7dHlwZTpCb29sZWFufSxub0FuaW1hdGlvbnM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0saWdub3JlU2VsZWN0Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGNsb3NlT25BY3RpdmF0ZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxvcGVuQW5pbWF0aW9uQ29uZmlnOnt0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVyblt7bmFtZToiZmFkZS1pbi1hbmltYXRpb24iLHRpbWluZzp7ZGVsYXk6MTAwLGR1cmF0aW9uOjIwMH19LHtuYW1lOiJwYXBlci1tZW51LWdyb3ctd2lkdGgtYW5pbWF0aW9uIix0aW1pbmc6e2RlbGF5OjEwMCxkdXJhdGlvbjoxNTAsZWFzaW5nOlZhLkFOSU1BVElPTl9DVUJJQ19CRVpJRVJ9fSx7bmFtZToicGFwZXItbWVudS1ncm93LWhlaWdodC1hbmltYXRpb24iLHRpbWluZzp7ZGVsYXk6MTAwLGR1cmF0aW9uOjI3NSxlYXNpbmc6VmEuQU5JTUFUSU9OX0NVQklDX0JFWklFUn19XX19LGNsb3NlQW5pbWF0aW9uQ29uZmlnOnt0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVyblt7bmFtZToiZmFkZS1vdXQtYW5pbWF0aW9uIix0aW1pbmc6e2R1cmF0aW9uOjE1MH19LHtuYW1lOiJwYXBlci1tZW51LXNocmluay13aWR0aC1hbmltYXRpb24iLHRpbWluZzp7ZGVsYXk6MTAwLGR1cmF0aW9uOjUwLGVhc2luZzpWYS5BTklNQVRJT05fQ1VCSUNfQkVaSUVSfX0se25hbWU6InBhcGVyLW1lbnUtc2hyaW5rLWhlaWdodC1hbmltYXRpb24iLHRpbWluZzp7ZHVyYXRpb246MjAwLGVhc2luZzoiZWFzZS1pbiJ9fV19fSxhbGxvd091dHNpZGVTY3JvbGw6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0scmVzdG9yZUZvY3VzT25DbG9zZTp7dHlwZTpCb29sZWFuLHZhbHVlOiEwfSxleHBhbmRTaXppbmdUYXJnZXRGb3JTY3JvbGxiYXJzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9kcm9wZG93bkNvbnRlbnQ6e3R5cGU6T2JqZWN0fX0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6Imdyb3VwIiwiYXJpYS1oYXNwb3B1cCI6InRydWUifSxsaXN0ZW5lcnM6eyJpcm9uLWFjdGl2YXRlIjoiX29uSXJvbkFjdGl2YXRlIiwiaXJvbi1zZWxlY3QiOiJfb25Jcm9uU2VsZWN0In0sZ2V0IGNvbnRlbnRFbGVtZW50KCl7Zm9yKHZhciB0PXFpKHRoaXMuJC5jb250ZW50KS5nZXREaXN0cmlidXRlZE5vZGVzKCksZT0wLG49dC5sZW5ndGg7ZTxuO2UrKylpZih0W2VdLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUpcmV0dXJuIHRbZV19LHRvZ2dsZTpmdW5jdGlvbigpe3RoaXMub3BlbmVkP3RoaXMuY2xvc2UoKTp0aGlzLm9wZW4oKX0sb3BlbjpmdW5jdGlvbigpe3RoaXMuZGlzYWJsZWR8fHRoaXMuJC5kcm9wZG93bi5vcGVuKCl9LGNsb3NlOmZ1bmN0aW9uKCl7dGhpcy4kLmRyb3Bkb3duLmNsb3NlKCl9LF9vbklyb25TZWxlY3Q6ZnVuY3Rpb24odCl7dGhpcy5pZ25vcmVTZWxlY3R8fHRoaXMuY2xvc2UoKX0sX29uSXJvbkFjdGl2YXRlOmZ1bmN0aW9uKHQpe3RoaXMuY2xvc2VPbkFjdGl2YXRlJiZ0aGlzLmNsb3NlKCl9LF9vcGVuZWRDaGFuZ2VkOmZ1bmN0aW9uKHQsZSl7dD8odGhpcy5fZHJvcGRvd25Db250ZW50PXRoaXMuY29udGVudEVsZW1lbnQsdGhpcy5maXJlKCJwYXBlci1kcm9wZG93bi1vcGVuIikpOm51bGwhPWUmJnRoaXMuZmlyZSgicGFwZXItZHJvcGRvd24tY2xvc2UiKX0sX2Rpc2FibGVkQ2hhbmdlZDpmdW5jdGlvbih0KXtXby5fZGlzYWJsZWRDaGFuZ2VkLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0JiZ0aGlzLm9wZW5lZCYmdGhpcy5jbG9zZSgpfSxfX29uSXJvbk92ZXJsYXlDYW5jZWxlZDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLiQudHJpZ2dlcjtxaSh0LmRldGFpbCkucGF0aC5pbmRleE9mKGUpPi0xJiZ0LnByZXZlbnREZWZhdWx0KCl9fSk7T2JqZWN0LmtleXMoVmEpLmZvckVhY2goKGZ1bmN0aW9uKHQpe1VhW3RdPVZhW3RdfSkpOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTYgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KY29uc3QgamE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtqYS5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZGlzcGxheTogbm9uZTsiKSxqYS5pbm5lckhUTUw9Jzxpcm9uLWljb25zZXQtc3ZnIG5hbWU9InBhcGVyLWRyb3Bkb3duLW1lbnUiIHNpemU9IjI0Ij5cbjxzdmc+PGRlZnM+XG48ZyBpZD0iYXJyb3ctZHJvcC1kb3duIj48cGF0aCBkPSJNNyAxMGw1IDUgNS01eiI+PC9wYXRoPjwvZz5cbjwvZGVmcz48L3N2Zz5cbjwvaXJvbi1pY29uc2V0LXN2Zz4nLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoamEuY29udGVudCk7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNiBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpjb25zdCBHYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO0dhLnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpLEdhLmlubmVySFRNTD0nPGRvbS1tb2R1bGUgaWQ9InBhcGVyLWRyb3Bkb3duLW1lbnUtc2hhcmVkLXN0eWxlcyI+XG4gIDx0ZW1wbGF0ZT5cbiAgICA8c3R5bGU+XG4gICAgICA6aG9zdCB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuXG4gICAgICAgIC8qIE5PVEUoY2RhdGEpOiBCb3RoIHZhbHVlcyBhcmUgbmVlZGVkLCBzaW5jZSBzb21lIHBob25lcyByZXF1aXJlIHRoZVxuICAgICAgICAgKiB2YWx1ZSB0byBiZSBgdHJhbnNwYXJlbnRgLlxuICAgICAgICAgKi9cbiAgICAgICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiByZ2JhKDAsMCwwLDApO1xuICAgICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50O1xuXG4gICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0OiB7XG4gICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgfTtcblxuICAgICAgICBAYXBwbHkgLS1wYXBlci1kcm9wZG93bi1tZW51O1xuICAgICAgfVxuXG4gICAgICAvKiBwYXBlci1kcm9wZG93bi1tZW51IGFuZCBwYXBlci1kcm9wZG93bi1tZW51LWxpZ2h0IGJvdGggZGVsZWdhdGUgZm9jdXNcbiAgICAgICAqIHRvIG90aGVyIGludGVybmFsIGVsZW1lbnRzIHdoaWNoIG1hbmFnZSBmb2N1cyBzdHlsaW5nLiAqL1xuICAgICAgOmhvc3QoOmZvY3VzKSB7XG4gICAgICAgIG91dGxpbmU6IG5vbmU7XG4gICAgICB9XG5cbiAgICAgIDpob3N0KDpkaXIocnRsKSkge1xuICAgICAgICB0ZXh0LWFsaWduOiByaWdodDtcblxuICAgICAgICBAYXBwbHkoLS1wYXBlci1kcm9wZG93bi1tZW51KTtcbiAgICAgIH1cblxuICAgICAgOmhvc3QoW2Rpc2FibGVkXSkge1xuICAgICAgICBAYXBwbHkgLS1wYXBlci1kcm9wZG93bi1tZW51LWRpc2FibGVkO1xuICAgICAgfVxuXG4gICAgICA6aG9zdChbbm9pbmtdKSBwYXBlci1yaXBwbGUge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfVxuXG4gICAgICA6aG9zdChbbm8tbGFiZWwtZmxvYXRdKSBwYXBlci1yaXBwbGUge1xuICAgICAgICB0b3A6IDhweDtcbiAgICAgIH1cblxuICAgICAgcGFwZXItcmlwcGxlIHtcbiAgICAgICAgdG9wOiAxMnB4O1xuICAgICAgICBsZWZ0OiAwcHg7XG4gICAgICAgIGJvdHRvbTogOHB4O1xuICAgICAgICByaWdodDogMHB4O1xuXG4gICAgICAgIEBhcHBseSAtLXBhcGVyLWRyb3Bkb3duLW1lbnUtcmlwcGxlO1xuICAgICAgfVxuXG4gICAgICBwYXBlci1tZW51LWJ1dHRvbiB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBwYWRkaW5nOiAwO1xuXG4gICAgICAgIEBhcHBseSAtLXBhcGVyLWRyb3Bkb3duLW1lbnUtYnV0dG9uO1xuICAgICAgfVxuXG4gICAgICBwYXBlci1pbnB1dCB7XG4gICAgICAgIEBhcHBseSAtLXBhcGVyLWRyb3Bkb3duLW1lbnUtaW5wdXQ7XG4gICAgICB9XG5cbiAgICAgIGlyb24taWNvbiB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1kaXNhYmxlZC10ZXh0LWNvbG9yKTtcblxuICAgICAgICBAYXBwbHkgLS1wYXBlci1kcm9wZG93bi1tZW51LWljb247XG4gICAgICB9XG4gICAgPC9zdHlsZT5cbiAgPC90ZW1wbGF0ZT5cbjwvZG9tLW1vZHVsZT4nLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoR2EuY29udGVudCk7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpjb25zdCBXYT10cihIVE1MRWxlbWVudCk7SXIoe190ZW1wbGF0ZTpfZWAKICAgIDxzdHlsZSBpbmNsdWRlPSJwYXBlci1kcm9wZG93bi1tZW51LXNoYXJlZC1zdHlsZXMiPjwvc3R5bGU+CgogICAgPHBhcGVyLW1lbnUtYnV0dG9uIGlkPSJtZW51QnV0dG9uIiB2ZXJ0aWNhbC1hbGlnbj0iW1t2ZXJ0aWNhbEFsaWduXV0iIGhvcml6b250YWwtYWxpZ249IltbaG9yaXpvbnRhbEFsaWduXV0iIGR5bmFtaWMtYWxpZ249IltbZHluYW1pY0FsaWduXV0iIHZlcnRpY2FsLW9mZnNldD0iW1tfY29tcHV0ZU1lbnVWZXJ0aWNhbE9mZnNldChub0xhYmVsRmxvYXQsIHZlcnRpY2FsT2Zmc2V0KV1dIiBkaXNhYmxlZD0iW1tkaXNhYmxlZF1dIiBuby1hbmltYXRpb25zPSJbW25vQW5pbWF0aW9uc11dIiBvbi1pcm9uLXNlbGVjdD0iX29uSXJvblNlbGVjdCIgb24taXJvbi1kZXNlbGVjdD0iX29uSXJvbkRlc2VsZWN0IiBvcGVuZWQ9Int7b3BlbmVkfX0iIGNsb3NlLW9uLWFjdGl2YXRlIGFsbG93LW91dHNpZGUtc2Nyb2xsPSJbW2FsbG93T3V0c2lkZVNjcm9sbF1dIiByZXN0b3JlLWZvY3VzLW9uLWNsb3NlPSJbW3Jlc3RvcmVGb2N1c09uQ2xvc2VdXSIgZXhwYW5kLXNpemluZy10YXJnZXQtZm9yLXNjcm9sbGJhcnM9IltbZXhwYW5kU2l6aW5nVGFyZ2V0Rm9yU2Nyb2xsYmFyc11dIj4KICAgICAgPCEtLSBzdXBwb3J0IGh5YnJpZCBtb2RlOiB1c2VyIG1pZ2h0IGJlIHVzaW5nIHBhcGVyLW1lbnUtYnV0dG9uIDEueCB3aGljaCBkaXN0cmlidXRlcyB2aWEgPGNvbnRlbnQ+IC0tPgogICAgICA8ZGl2IGNsYXNzPSJkcm9wZG93bi10cmlnZ2VyIiBzbG90PSJkcm9wZG93bi10cmlnZ2VyIj4KICAgICAgICA8cGFwZXItcmlwcGxlPjwvcGFwZXItcmlwcGxlPgogICAgICAgIDwhLS0gcGFwZXItaW5wdXQgaGFzIHR5cGU9InRleHQiIGZvciBhMTF5LCBkbyBub3QgcmVtb3ZlIC0tPgogICAgICAgIDxwYXBlci1pbnB1dCBpZD0iaW5wdXQiIHR5cGU9InRleHQiIGludmFsaWQ9IltbaW52YWxpZF1dIiByZWFkb25seSBkaXNhYmxlZD0iW1tkaXNhYmxlZF1dIiB2YWx1ZT0iW1t2YWx1ZV1dIiBwbGFjZWhvbGRlcj0iW1twbGFjZWhvbGRlcl1dIiBlcnJvci1tZXNzYWdlPSJbW2Vycm9yTWVzc2FnZV1dIiBhbHdheXMtZmxvYXQtbGFiZWw9IltbYWx3YXlzRmxvYXRMYWJlbF1dIiBuby1sYWJlbC1mbG9hdD0iW1tub0xhYmVsRmxvYXRdXSIgbGFiZWw9IltbbGFiZWxdXSIgaW5wdXQtcm9sZT0iYnV0dG9uIiBpbnB1dC1hcmlhLWhhc3BvcHVwPSJsaXN0Ym94IiBhdXRvY29tcGxldGU9Im9mZiI+CiAgICAgICAgICA8IS0tIHN1cHBvcnQgaHlicmlkIG1vZGU6IHVzZXIgbWlnaHQgYmUgdXNpbmcgcGFwZXItaW5wdXQgMS54IHdoaWNoIGRpc3RyaWJ1dGVzIHZpYSA8Y29udGVudD4gLS0+CiAgICAgICAgICA8aXJvbi1pY29uIGljb249InBhcGVyLWRyb3Bkb3duLW1lbnU6YXJyb3ctZHJvcC1kb3duIiBzdWZmaXggc2xvdD0ic3VmZml4Ij48L2lyb24taWNvbj4KICAgICAgICA8L3BhcGVyLWlucHV0PgogICAgICA8L2Rpdj4KICAgICAgPHNsb3QgaWQ9ImNvbnRlbnQiIG5hbWU9ImRyb3Bkb3duLWNvbnRlbnQiIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiPjwvc2xvdD4KICAgIDwvcGFwZXItbWVudS1idXR0b24+CmAsaXM6InBhcGVyLWRyb3Bkb3duLW1lbnUiLGJlaGF2aW9yczpbWW8sV28saWEsb2FdLHByb3BlcnRpZXM6e3NlbGVjdGVkSXRlbUxhYmVsOnt0eXBlOlN0cmluZyxub3RpZnk6ITAscmVhZE9ubHk6ITB9LHNlbGVjdGVkSXRlbTp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwLHJlYWRPbmx5OiEwfSx2YWx1ZTp7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxsYWJlbDp7dHlwZTpTdHJpbmd9LHBsYWNlaG9sZGVyOnt0eXBlOlN0cmluZ30sZXJyb3JNZXNzYWdlOnt0eXBlOlN0cmluZ30sb3BlbmVkOnt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwLHZhbHVlOiExLG9ic2VydmVyOiJfb3BlbmVkQ2hhbmdlZCJ9LGFsbG93T3V0c2lkZVNjcm9sbDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxub0xhYmVsRmxvYXQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LGFsd2F5c0Zsb2F0TGFiZWw6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sbm9BbmltYXRpb25zOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGhvcml6b250YWxBbGlnbjp7dHlwZTpTdHJpbmcsdmFsdWU6InJpZ2h0In0sdmVydGljYWxBbGlnbjp7dHlwZTpTdHJpbmcsdmFsdWU6InRvcCJ9LHZlcnRpY2FsT2Zmc2V0Ok51bWJlcixkeW5hbWljQWxpZ246e3R5cGU6Qm9vbGVhbn0scmVzdG9yZUZvY3VzT25DbG9zZTp7dHlwZTpCb29sZWFuLHZhbHVlOiEwfSxleHBhbmRTaXppbmdUYXJnZXRGb3JTY3JvbGxiYXJzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9fSxsaXN0ZW5lcnM6e3RhcDoiX29uVGFwIn0sa2V5QmluZGluZ3M6eyJ1cCBkb3duIjoib3BlbiIsZXNjOiJjbG9zZSJ9LG9ic2VydmVyczpbIl9zZWxlY3RlZEl0ZW1DaGFuZ2VkKHNlbGVjdGVkSXRlbSkiXSxfYXR0YWNoRG9tKHQpe2NvbnN0IGU9WSh0aGlzKTtyZXR1cm4gZS5hdHRhY2hTaGFkb3coe21vZGU6Im9wZW4iLGRlbGVnYXRlc0ZvY3VzOiEwLHNoYWR5VXBncmFkZUZyYWdtZW50OnR9KSxlLnNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQodCksV2EucHJvdG90eXBlLl9hdHRhY2hEb20uY2FsbCh0aGlzLHQpfSxmb2N1cygpe3RoaXMuJC5pbnB1dC5fZm9jdXNhYmxlRWxlbWVudC5mb2N1cygpfSxhdHRhY2hlZDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuY29udGVudEVsZW1lbnQ7dCYmdC5zZWxlY3RlZEl0ZW0mJnRoaXMuX3NldFNlbGVjdGVkSXRlbSh0LnNlbGVjdGVkSXRlbSl9LGdldCBjb250ZW50RWxlbWVudCgpe2Zvcih2YXIgdD1xaSh0aGlzLiQuY29udGVudCkuZ2V0RGlzdHJpYnV0ZWROb2RlcygpLGU9MCxuPXQubGVuZ3RoO2U8bjtlKyspaWYodFtlXS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFKXJldHVybiB0W2VdfSxvcGVuOmZ1bmN0aW9uKCl7dGhpcy4kLm1lbnVCdXR0b24ub3BlbigpfSxjbG9zZTpmdW5jdGlvbigpe3RoaXMuJC5tZW51QnV0dG9uLmNsb3NlKCl9LF9vbklyb25TZWxlY3Q6ZnVuY3Rpb24odCl7dGhpcy5fc2V0U2VsZWN0ZWRJdGVtKHQuZGV0YWlsLml0ZW0pfSxfb25Jcm9uRGVzZWxlY3Q6ZnVuY3Rpb24odCl7dGhpcy5fc2V0U2VsZWN0ZWRJdGVtKG51bGwpfSxfb25UYXA6ZnVuY3Rpb24odCl7aGkodCk9PT10aGlzJiZ0aGlzLm9wZW4oKX0sX3NlbGVjdGVkSXRlbUNoYW5nZWQ6ZnVuY3Rpb24odCl7dmFyIGU7ZT10P3QubGFiZWx8fHQuZ2V0QXR0cmlidXRlKCJsYWJlbCIpfHx0LnRleHRDb250ZW50LnRyaW0oKToiIix0aGlzLnZhbHVlPWUsdGhpcy5fc2V0U2VsZWN0ZWRJdGVtTGFiZWwoZSl9LF9jb21wdXRlTWVudVZlcnRpY2FsT2Zmc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV8fCh0Py00OjgpfSxfZ2V0VmFsaWRpdHk6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGlzYWJsZWR8fCF0aGlzLnJlcXVpcmVkfHx0aGlzLnJlcXVpcmVkJiYhIXRoaXMudmFsdWV9LF9vcGVuZWRDaGFuZ2VkOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jb250ZW50RWxlbWVudDt0JiZ0LnNldEF0dHJpYnV0ZSgiYXJpYS1leHBhbmRlZCIsdGhpcy5vcGVuZWQ/InRydWUiOiJmYWxzZSIpfX0pOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KdmFyIHFhPXtvdXRlclNjcm9sbDp7c2Nyb2xsOiEwfSxzaGFkb3dNb2RlOntzdGFuZGFyZDoyLHdhdGVyZmFsbDoxLCJ3YXRlcmZhbGwtdGFsbCI6MX0sdGFsbE1vZGU6eyJ3YXRlcmZhbGwtdGFsbCI6ITB9fTtJcih7X3RlbXBsYXRlOl9lYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LXZlcnRpY2FsOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaGVhZGVyLXBhbmVsOwogICAgICB9CgogICAgICAjbWFpbkNvbnRhaW5lciB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXg7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgICAgIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDsKICAgICAgfQoKICAgICAgI21haW5QYW5lbCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LXZlcnRpY2FsOwogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtaW4taGVpZ2h0OiAwOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWhlYWRlci1wYW5lbC1ib2R5OwogICAgICB9CgogICAgICAjbWFpbkNvbnRhaW5lciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaGVhZGVyLXBhbmVsLWNvbnRhaW5lcjsKICAgICAgfQoKICAgICAgLyoKICAgICAgICogbW9kZTogc2Nyb2xsCiAgICAgICAqLwogICAgICA6aG9zdChbbW9kZT1zY3JvbGxdKSAjbWFpbkNvbnRhaW5lciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaGVhZGVyLXBhbmVsLXNjcm9sbC1jb250YWluZXI7CiAgICAgICAgb3ZlcmZsb3c6IHZpc2libGU7CiAgICAgIH0KCiAgICAgIDpob3N0KFttb2RlPXNjcm9sbF0pIHsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7CiAgICAgIH0KCiAgICAgIC8qCiAgICAgICAqIG1vZGU6IGNvdmVyCiAgICAgICAqLwogICAgICA6aG9zdChbbW9kZT1jb3Zlcl0pICNtYWluQ29udGFpbmVyIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1oZWFkZXItcGFuZWwtY292ZXItY29udGFpbmVyOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgIH0KCiAgICAgIDpob3N0KFttb2RlPWNvdmVyXSkgI21haW5QYW5lbCB7CiAgICAgICAgcG9zaXRpb246IHN0YXRpYzsKICAgICAgfQoKICAgICAgLyoKICAgICAgICogbW9kZTogc3RhbmRhcmQKICAgICAgICovCiAgICAgIDpob3N0KFttb2RlPXN0YW5kYXJkXSkgI21haW5Db250YWluZXIgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWhlYWRlci1wYW5lbC1zdGFuZGFyZC1jb250YWluZXI7CiAgICAgIH0KCiAgICAgIC8qCiAgICAgICAqIG1vZGU6IHNlYW1lZAogICAgICAgKi8KICAgICAgOmhvc3QoW21vZGU9c2VhbWVkXSkgI21haW5Db250YWluZXIgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWhlYWRlci1wYW5lbC1zZWFtZWQtY29udGFpbmVyOwogICAgICB9CgoKICAgICAgLyoKICAgICAgICogbW9kZTogd2F0ZXJmYWxsCiAgICAgICAqLwogICAgICA6aG9zdChbbW9kZT13YXRlcmZhbGxdKSAjbWFpbkNvbnRhaW5lciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaGVhZGVyLXBhbmVsLXdhdGVyZmFsbC1jb250YWluZXI7CiAgICAgIH0KCiAgICAgIC8qCiAgICAgICAqIG1vZGU6IHdhdGVyZmFsbC10YWxsCiAgICAgICAqLwogICAgICA6aG9zdChbbW9kZT13YXRlcmZhbGwtdGFsbF0pICNtYWluQ29udGFpbmVyIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1oZWFkZXItcGFuZWwtd2F0ZXJmYWxsLXRhbGwtY29udGFpbmVyOwogICAgICB9CgogICAgICAjZHJvcFNoYWRvdyB7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjVzOwogICAgICAgIGhlaWdodDogNnB4OwogICAgICAgIGJveC1zaGFkb3c6IGluc2V0IDBweCA1cHggNnB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjQpOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWhlYWRlci1wYW5lbC1zaGFkb3c7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgICNkcm9wU2hhZG93Lmhhcy1zaGFkb3cgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgIH0KCiAgICAgICNtYWluQ29udGFpbmVyID4gOjpzbG90dGVkKC5maXQpIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZml0OwogICAgICB9CgogICAgPC9zdHlsZT4KCiAgICA8c2xvdCBpZD0iaGVhZGVyU2xvdCIgbmFtZT0iaGVhZGVyIj48L3Nsb3Q+CgogICAgPGRpdiBpZD0ibWFpblBhbmVsIj4KICAgICAgPGRpdiBpZD0ibWFpbkNvbnRhaW5lciIgY2xhc3NcJD0iW1tfY29tcHV0ZU1haW5Db250YWluZXJDbGFzcyhtb2RlKV1dIj4KICAgICAgICA8c2xvdD48L3Nsb3Q+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGlkPSJkcm9wU2hhZG93Ij48L2Rpdj4KICAgIDwvZGl2PgpgLGlzOiJwYXBlci1oZWFkZXItcGFuZWwiLHByb3BlcnRpZXM6e21vZGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJzdGFuZGFyZCIsb2JzZXJ2ZXI6Il9tb2RlQ2hhbmdlZCIscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxzaGFkb3c6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sdGFsbENsYXNzOnt0eXBlOlN0cmluZyx2YWx1ZToidGFsbCJ9LGF0VG9wOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITAsbm90aWZ5OiEwLHJlYWRPbmx5OiEwLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH19LG9ic2VydmVyczpbIl9jb21wdXRlRHJvcFNoYWRvd0hpZGRlbihhdFRvcCwgbW9kZSwgc2hhZG93KSJdLGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fYWRkTGlzdGVuZXIoKSx0aGlzLl9rZWVwU2Nyb2xsaW5nU3RhdGUoKX0sZGV0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9yZW1vdmVMaXN0ZW5lcigpfSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuc2Nyb2xsSGFuZGxlcj10aGlzLl9zY3JvbGwuYmluZCh0aGlzKSxjb25zb2xlLndhcm4odGhpcy5pcywiaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBhcHAtbGF5b3V0IGluc3RlYWQhIil9LGdldCBoZWFkZXIoKXtyZXR1cm4gcWkodGhpcy4kLmhlYWRlclNsb3QpLmdldERpc3RyaWJ1dGVkTm9kZXMoKVswXX0sZ2V0IHNjcm9sbGVyKCl7cmV0dXJuIHRoaXMuX2dldFNjcm9sbGVyRm9yTW9kZSh0aGlzLm1vZGUpfSxnZXQgdmlzaWJsZVNoYWRvdygpe3JldHVybiB0aGlzLiQuZHJvcFNoYWRvdy5jbGFzc0xpc3QuY29udGFpbnMoImhhcy1zaGFkb3ciKX0sX2NvbXB1dGVEcm9wU2hhZG93SGlkZGVuOmZ1bmN0aW9uKHQsZSxuKXt2YXIgaT1xYS5zaGFkb3dNb2RlW2VdO3RoaXMudG9nZ2xlQ2xhc3MoImhhcy1zaGFkb3ciLCEhdGhpcy5zaGFkb3d8fDI9PT1pfHwxPT09aSYmIXQsdGhpcy4kLmRyb3BTaGFkb3cpfSxfY29tcHV0ZU1haW5Db250YWluZXJDbGFzczpmdW5jdGlvbih0KXt2YXIgZT17fTtyZXR1cm4gZS5mbGV4PSJjb3ZlciIhPT10LE9iamVjdC5rZXlzKGUpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIGVbdF19KSkuam9pbigiICIpfSxfYWRkTGlzdGVuZXI6ZnVuY3Rpb24oKXt0aGlzLnNjcm9sbGVyLmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsdGhpcy5zY3JvbGxIYW5kbGVyKX0sX3JlbW92ZUxpc3RlbmVyOmZ1bmN0aW9uKCl7dGhpcy5zY3JvbGxlci5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuc2Nyb2xsSGFuZGxlcil9LF9tb2RlQ2hhbmdlZDpmdW5jdGlvbih0LGUpe3ZhciBuPXFhLGk9dGhpcy5oZWFkZXI7aSYmKG4udGFsbE1vZGVbZV0mJiFuLnRhbGxNb2RlW3RdPyhpLmNsYXNzTGlzdC5yZW1vdmUodGhpcy50YWxsQ2xhc3MpLHRoaXMuYXN5bmMoKGZ1bmN0aW9uKCl7aS5jbGFzc0xpc3QucmVtb3ZlKCJhbmltYXRlIil9KSwyMDApKTp0aGlzLnRvZ2dsZUNsYXNzKCJhbmltYXRlIixuLnRhbGxNb2RlW3RdLGkpKSx0aGlzLl9rZWVwU2Nyb2xsaW5nU3RhdGUoKX0sX2tlZXBTY3JvbGxpbmdTdGF0ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuc2Nyb2xsZXIsZT10aGlzLmhlYWRlcjt0aGlzLl9zZXRBdFRvcCgwPT09dC5zY3JvbGxUb3ApLGUmJnRoaXMudGFsbENsYXNzJiZxYS50YWxsTW9kZVt0aGlzLm1vZGVdJiZ0aGlzLnRvZ2dsZUNsYXNzKHRoaXMudGFsbENsYXNzLHRoaXMuYXRUb3B8fGUuY2xhc3NMaXN0LmNvbnRhaW5zKHRoaXMudGFsbENsYXNzKSYmdC5zY3JvbGxIZWlnaHQ8dGhpcy5vZmZzZXRIZWlnaHQsZSl9LF9zY3JvbGw6ZnVuY3Rpb24oKXt0aGlzLl9rZWVwU2Nyb2xsaW5nU3RhdGUoKSx0aGlzLmZpcmUoImNvbnRlbnQtc2Nyb2xsIix7dGFyZ2V0OnRoaXMuc2Nyb2xsZXJ9LHtidWJibGVzOiExfSl9LF9nZXRTY3JvbGxlckZvck1vZGU6ZnVuY3Rpb24odCl7cmV0dXJuIHFhLm91dGVyU2Nyb2xsW3RdP3RoaXM6dGhpcy4kLm1haW5Db250YWluZXJ9fSksCi8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpJcih7aXM6InBhcGVyLWljb24tYnV0dG9uIixfdGVtcGxhdGU6X2VgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHotaW5kZXg6IDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE7CgogICAgICAgIHdpZHRoOiA0MHB4OwogICAgICAgIGhlaWdodDogNDBweDsKCiAgICAgICAgLyoKICAgICAgICAgIE5PVEU6IEJvdGggdmFsdWVzIGFyZSBuZWVkZWQsIHNpbmNlIHNvbWUgcGhvbmVzIHJlcXVpcmUgdGhlIHZhbHVlIHRvCiAgICAgICAgICBiZSBcYHRyYW5zcGFyZW50XGAuCiAgICAgICAgKi8KICAgICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCk7CiAgICAgICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDsKCiAgICAgICAgLyogQmVjYXVzZSBvZiBwb2x5bWVyLzI1NTgsIHRoaXMgc3R5bGUgaGFzIGxvd2VyIHNwZWNpZmljaXR5IHRoYW4gKiAqLwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3ggIWltcG9ydGFudDsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaWNvbi1idXR0b247CiAgICAgIH0KCiAgICAgIDpob3N0ICNpbmsgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pY29uLWJ1dHRvbi1pbmstY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgICAgIG9wYWNpdHk6IDAuNjsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pY29uLWJ1dHRvbi1kaXNhYmxlZC10ZXh0LCB2YXIoLS1kaXNhYmxlZC10ZXh0LWNvbG9yKSk7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgY3Vyc29yOiBhdXRvOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1pY29uLWJ1dHRvbi1kaXNhYmxlZDsKICAgICAgfQoKICAgICAgOmhvc3QoW2hpZGRlbl0pIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIDpob3N0KDpob3ZlcikgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWljb24tYnV0dG9uLWhvdmVyOwogICAgICB9CgogICAgICBpcm9uLWljb24gewogICAgICAgIC0taXJvbi1pY29uLXdpZHRoOiAxMDAlOwogICAgICAgIC0taXJvbi1pY29uLWhlaWdodDogMTAwJTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8aXJvbi1pY29uIGlkPSJpY29uIiBzcmM9Iltbc3JjXV0iIGljb249IltbaWNvbl1dIgogICAgICAgICAgICAgICBhbHQkPSJbW2FsdF1dIj48L2lyb24taWNvbj4KICBgLGhvc3RBdHRyaWJ1dGVzOntyb2xlOiJidXR0b24iLHRhYmluZGV4OiIwIn0sYmVoYXZpb3JzOltsYV0scmVnaXN0ZXJlZDpmdW5jdGlvbigpe3RoaXMuX3RlbXBsYXRlLnNldEF0dHJpYnV0ZSgic3RyaXAtd2hpdGVzcGFjZSIsIiIpfSxwcm9wZXJ0aWVzOntzcmM6e3R5cGU6U3RyaW5nfSxpY29uOnt0eXBlOlN0cmluZ30sYWx0Ont0eXBlOlN0cmluZyxvYnNlcnZlcjoiX2FsdENoYW5nZWQifX0sX2FsdENoYW5nZWQ6ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLmdldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIpO24mJmUhPW58fHRoaXMuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIix0KX19KSwKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCklyKHtfdGVtcGxhdGU6X2VgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiA0MDBweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZDsKICAgICAgICBwYWRkaW5nOiAycHg7CiAgICAgICAgLW1vei1hcHBlYXJhbmNlOiB0ZXh0YXJlYTsKICAgICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IHRleHRhcmVhOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5taXJyb3ItdGV4dCB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgICBAYXBwbHkgLS1pcm9uLWF1dG9ncm93LXRleHRhcmVhOwogICAgICB9CgogICAgICAuZml0IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZml0OwogICAgICB9CgogICAgICB0ZXh0YXJlYSB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIHJlc2l6ZTogbm9uZTsKICAgICAgICBiYWNrZ3JvdW5kOiBpbmhlcml0OwogICAgICAgIGNvbG9yOiBpbmhlcml0OwogICAgICAgIC8qIHNlZSBjb21tZW50cyBpbiB0ZW1wbGF0ZSAqLwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBmb250LXNpemU6IGluaGVyaXQ7CiAgICAgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CiAgICAgICAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7CiAgICAgICAgdGV4dC1hbGlnbjogaW5oZXJpdDsKICAgICAgICBAYXBwbHkgLS1pcm9uLWF1dG9ncm93LXRleHRhcmVhOwogICAgICB9CgogICAgICB0ZXh0YXJlYTo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7CiAgICAgICAgQGFwcGx5IC0taXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYS1wbGFjZWhvbGRlcjsKICAgICAgfQoKICAgICAgdGV4dGFyZWE6LW1vei1wbGFjZWhvbGRlciB7CiAgICAgICAgQGFwcGx5IC0taXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYS1wbGFjZWhvbGRlcjsKICAgICAgfQoKICAgICAgdGV4dGFyZWE6Oi1tb3otcGxhY2Vob2xkZXIgewogICAgICAgIEBhcHBseSAtLWlyb24tYXV0b2dyb3ctdGV4dGFyZWEtcGxhY2Vob2xkZXI7CiAgICAgIH0KCiAgICAgIHRleHRhcmVhOi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7CiAgICAgICAgQGFwcGx5IC0taXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYS1wbGFjZWhvbGRlcjsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8IS0tIHRoZSBtaXJyb3Igc2l6ZXMgdGhlIGlucHV0L3RleHRhcmVhIHNvIGl0IGdyb3dzIHdpdGggdHlwaW5nIC0tPgogICAgPCEtLSB1c2UgJiMxNjA7IGluc3RlYWQgJm5ic3A7IG9mIHRvIGFsbG93IHRoaXMgZWxlbWVudCB0byBiZSB1c2VkIGluIFhIVE1MIC0tPgogICAgPGRpdiBpZD0ibWlycm9yIiBjbGFzcz0ibWlycm9yLXRleHQiIGFyaWEtaGlkZGVuPSJ0cnVlIj4mbmJzcDs8L2Rpdj4KCiAgICA8IS0tIHNpemUgdGhlIGlucHV0L3RleHRhcmVhIHdpdGggYSBkaXYsIGJlY2F1c2UgdGhlIHRleHRhcmVhIGhhcyBpbnRyaW5zaWMgc2l6ZSBpbiBmZiAtLT4KICAgIDxkaXYgY2xhc3M9InRleHRhcmVhLWNvbnRhaW5lciBmaXQiPgogICAgICA8dGV4dGFyZWEgaWQ9InRleHRhcmVhIiBuYW1lJD0iW1tuYW1lXV0iIGFyaWEtbGFiZWwkPSJbW2xhYmVsXV0iIGF1dG9jb21wbGV0ZSQ9IltbYXV0b2NvbXBsZXRlXV0iIGF1dG9mb2N1cyQ9IltbYXV0b2ZvY3VzXV0iIGF1dG9jYXBpdGFsaXplJD0iW1thdXRvY2FwaXRhbGl6ZV1dIiBpbnB1dG1vZGUkPSJbW2lucHV0bW9kZV1dIiBwbGFjZWhvbGRlciQ9IltbcGxhY2Vob2xkZXJdXSIgcmVhZG9ubHkkPSJbW3JlYWRvbmx5XV0iIHJlcXVpcmVkJD0iW1tyZXF1aXJlZF1dIiBkaXNhYmxlZCQ9IltbZGlzYWJsZWRdXSIgcm93cyQ9Iltbcm93c11dIiBtaW5sZW5ndGgkPSJbW21pbmxlbmd0aF1dIiBtYXhsZW5ndGgkPSJbW21heGxlbmd0aF1dIj48L3RleHRhcmVhPgogICAgPC9kaXY+CmAsaXM6Imlyb24tYXV0b2dyb3ctdGV4dGFyZWEiLGJlaGF2aW9yczpbb2EsV29dLHByb3BlcnRpZXM6e3ZhbHVlOntvYnNlcnZlcjoiX3ZhbHVlQ2hhbmdlZCIsdHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxiaW5kVmFsdWU6e29ic2VydmVyOiJfYmluZFZhbHVlQ2hhbmdlZCIsdHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxyb3dzOnt0eXBlOk51bWJlcix2YWx1ZToxLG9ic2VydmVyOiJfdXBkYXRlQ2FjaGVkIn0sbWF4Um93czp7dHlwZTpOdW1iZXIsdmFsdWU6MCxvYnNlcnZlcjoiX3VwZGF0ZUNhY2hlZCJ9LGF1dG9jb21wbGV0ZTp7dHlwZTpTdHJpbmcsdmFsdWU6Im9mZiJ9LGF1dG9mb2N1czp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxhdXRvY2FwaXRhbGl6ZTp7dHlwZTpTdHJpbmcsdmFsdWU6Im5vbmUifSxpbnB1dG1vZGU6e3R5cGU6U3RyaW5nfSxwbGFjZWhvbGRlcjp7dHlwZTpTdHJpbmd9LHJlYWRvbmx5Ont0eXBlOlN0cmluZ30scmVxdWlyZWQ6e3R5cGU6Qm9vbGVhbn0sbWlubGVuZ3RoOnt0eXBlOk51bWJlcn0sbWF4bGVuZ3RoOnt0eXBlOk51bWJlcn0sbGFiZWw6e3R5cGU6U3RyaW5nfX0sbGlzdGVuZXJzOntpbnB1dDoiX29uSW5wdXQifSxnZXQgdGV4dGFyZWEoKXtyZXR1cm4gdGhpcy4kLnRleHRhcmVhfSxnZXQgc2VsZWN0aW9uU3RhcnQoKXtyZXR1cm4gdGhpcy4kLnRleHRhcmVhLnNlbGVjdGlvblN0YXJ0fSxnZXQgc2VsZWN0aW9uRW5kKCl7cmV0dXJuIHRoaXMuJC50ZXh0YXJlYS5zZWxlY3Rpb25FbmR9LHNldCBzZWxlY3Rpb25TdGFydCh0KXt0aGlzLiQudGV4dGFyZWEuc2VsZWN0aW9uU3RhcnQ9dH0sc2V0IHNlbGVjdGlvbkVuZCh0KXt0aGlzLiQudGV4dGFyZWEuc2VsZWN0aW9uRW5kPXR9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7bmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVAoPzpbb2FdZHxob25lKS8pJiYhbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvT1MgMVszNDU2Nzg5XS8pJiYodGhpcy4kLnRleHRhcmVhLnN0eWxlLm1hcmdpbkxlZnQ9Ii0zcHgiKX0sdmFsaWRhdGU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLiQudGV4dGFyZWEudmFsaWRpdHkudmFsaWQ7cmV0dXJuIHQmJih0aGlzLnJlcXVpcmVkJiYiIj09PXRoaXMudmFsdWU/dD0hMTp0aGlzLmhhc1ZhbGlkYXRvcigpJiYodD1vYS52YWxpZGF0ZS5jYWxsKHRoaXMsdGhpcy52YWx1ZSkpKSx0aGlzLmludmFsaWQ9IXQsdGhpcy5maXJlKCJpcm9uLWlucHV0LXZhbGlkYXRlIiksdH0sX2JpbmRWYWx1ZUNoYW5nZWQ6ZnVuY3Rpb24odCl7dGhpcy52YWx1ZT10fSxfdmFsdWVDaGFuZ2VkOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMudGV4dGFyZWE7ZSYmKGUudmFsdWUhPT10JiYoZS52YWx1ZT10fHwwPT09dD90OiIiKSx0aGlzLmJpbmRWYWx1ZT10LHRoaXMuJC5taXJyb3IuaW5uZXJIVE1MPXRoaXMuX3ZhbHVlRm9yTWlycm9yKCksdGhpcy5maXJlKCJiaW5kLXZhbHVlLWNoYW5nZWQiLHt2YWx1ZTp0aGlzLmJpbmRWYWx1ZX0pKX0sX29uSW5wdXQ6ZnVuY3Rpb24odCl7dmFyIGU9cWkodCkucGF0aDt0aGlzLnZhbHVlPWU/ZVswXS52YWx1ZTp0LnRhcmdldC52YWx1ZX0sX2NvbnN0cmFpbjpmdW5jdGlvbih0KXt2YXIgZTtmb3IodD10fHxbIiJdLGU9dGhpcy5tYXhSb3dzPjAmJnQubGVuZ3RoPnRoaXMubWF4Um93cz90LnNsaWNlKDAsdGhpcy5tYXhSb3dzKTp0LnNsaWNlKDApO3RoaXMucm93cz4wJiZlLmxlbmd0aDx0aGlzLnJvd3M7KWUucHVzaCgiIik7cmV0dXJuIGUuam9pbigiPGJyLz4iKSsiJiMxNjA7In0sX3ZhbHVlRm9yTWlycm9yOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy50ZXh0YXJlYTtpZih0KXJldHVybiB0aGlzLnRva2Vucz10JiZ0LnZhbHVlP3QudmFsdWUucmVwbGFjZSgvJi9nbSwiJmFtcDsiKS5yZXBsYWNlKC8iL2dtLCImcXVvdDsiKS5yZXBsYWNlKC8nL2dtLCImIzM5OyIpLnJlcGxhY2UoLzwvZ20sIiZsdDsiKS5yZXBsYWNlKC8+L2dtLCImZ3Q7Iikuc3BsaXQoIlxuIik6WyIiXSx0aGlzLl9jb25zdHJhaW4odGhpcy50b2tlbnMpfSxfdXBkYXRlQ2FjaGVkOmZ1bmN0aW9uKCl7dGhpcy4kLm1pcnJvci5pbm5lckhUTUw9dGhpcy5fY29uc3RyYWluKHRoaXMudG9rZW5zKX19KSwKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCklyKHtfdGVtcGxhdGU6X2VgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgOmhvc3QoW2hpZGRlbl0pIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIGxhYmVsIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8cGFwZXItaW5wdXQtY29udGFpbmVyIG5vLWxhYmVsLWZsb2F0JD0iW1tub0xhYmVsRmxvYXRdXSIgYWx3YXlzLWZsb2F0LWxhYmVsPSJbW19jb21wdXRlQWx3YXlzRmxvYXRMYWJlbChhbHdheXNGbG9hdExhYmVsLHBsYWNlaG9sZGVyKV1dIiBhdXRvLXZhbGlkYXRlJD0iW1thdXRvVmFsaWRhdGVdXSIgZGlzYWJsZWQkPSJbW2Rpc2FibGVkXV0iIGludmFsaWQ9IltbaW52YWxpZF1dIj4KCiAgICAgIDxsYWJlbCBoaWRkZW4kPSJbWyFsYWJlbF1dIiBhcmlhLWhpZGRlbj0idHJ1ZSIgZm9yJD0iW1tfaW5wdXRJZF1dIiBzbG90PSJsYWJlbCI+W1tsYWJlbF1dPC9sYWJlbD4KCiAgICAgIDxpcm9uLWF1dG9ncm93LXRleHRhcmVhIGNsYXNzPSJwYXBlci1pbnB1dC1pbnB1dCIgc2xvdD0iaW5wdXQiIGlkJD0iW1tfaW5wdXRJZF1dIiBhcmlhLWxhYmVsbGVkYnkkPSJbW19hcmlhTGFiZWxsZWRCeV1dIiBhcmlhLWRlc2NyaWJlZGJ5JD0iW1tfYXJpYURlc2NyaWJlZEJ5XV0iIGJpbmQtdmFsdWU9Int7dmFsdWV9fSIgaW52YWxpZD0ie3tpbnZhbGlkfX0iIHZhbGlkYXRvciQ9IltbdmFsaWRhdG9yXV0iIGRpc2FibGVkJD0iW1tkaXNhYmxlZF1dIiBhdXRvY29tcGxldGUkPSJbW2F1dG9jb21wbGV0ZV1dIiBhdXRvZm9jdXMkPSJbW2F1dG9mb2N1c11dIiBpbnB1dG1vZGUkPSJbW2lucHV0bW9kZV1dIiBuYW1lJD0iW1tuYW1lXV0iIHBsYWNlaG9sZGVyJD0iW1twbGFjZWhvbGRlcl1dIiByZWFkb25seSQ9IltbcmVhZG9ubHldXSIgcmVxdWlyZWQkPSJbW3JlcXVpcmVkXV0iIG1pbmxlbmd0aCQ9IltbbWlubGVuZ3RoXV0iIG1heGxlbmd0aCQ9IltbbWF4bGVuZ3RoXV0iIGF1dG9jYXBpdGFsaXplJD0iW1thdXRvY2FwaXRhbGl6ZV1dIiByb3dzJD0iW1tyb3dzXV0iIG1heC1yb3dzJD0iW1ttYXhSb3dzXV0iIG9uLWNoYW5nZT0iX29uQ2hhbmdlIj48L2lyb24tYXV0b2dyb3ctdGV4dGFyZWE+CgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbZXJyb3JNZXNzYWdlXV0iPgogICAgICAgIDxwYXBlci1pbnB1dC1lcnJvciBhcmlhLWxpdmU9ImFzc2VydGl2ZSIgc2xvdD0iYWRkLW9uIj5bW2Vycm9yTWVzc2FnZV1dPC9wYXBlci1pbnB1dC1lcnJvcj4KICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tjaGFyQ291bnRlcl1dIj4KICAgICAgICA8cGFwZXItaW5wdXQtY2hhci1jb3VudGVyIHNsb3Q9ImFkZC1vbiI+PC9wYXBlci1pbnB1dC1jaGFyLWNvdW50ZXI+CiAgICAgIDwvdGVtcGxhdGU+CgogICAgPC9wYXBlci1pbnB1dC1jb250YWluZXI+CmAsaXM6InBhcGVyLXRleHRhcmVhIixiZWhhdmlvcnM6W0hhLGlhXSxwcm9wZXJ0aWVzOntfYXJpYUxhYmVsbGVkQnk6e29ic2VydmVyOiJfYXJpYUxhYmVsbGVkQnlDaGFuZ2VkIix0eXBlOlN0cmluZ30sX2FyaWFEZXNjcmliZWRCeTp7b2JzZXJ2ZXI6Il9hcmlhRGVzY3JpYmVkQnlDaGFuZ2VkIix0eXBlOlN0cmluZ30sdmFsdWU6e3R5cGU6U3RyaW5nfSxyb3dzOnt0eXBlOk51bWJlcix2YWx1ZToxfSxtYXhSb3dzOnt0eXBlOk51bWJlcix2YWx1ZTowfX0sZ2V0IHNlbGVjdGlvblN0YXJ0KCl7cmV0dXJuIHRoaXMuJC5pbnB1dC50ZXh0YXJlYS5zZWxlY3Rpb25TdGFydH0sc2V0IHNlbGVjdGlvblN0YXJ0KHQpe3RoaXMuJC5pbnB1dC50ZXh0YXJlYS5zZWxlY3Rpb25TdGFydD10fSxnZXQgc2VsZWN0aW9uRW5kKCl7cmV0dXJuIHRoaXMuJC5pbnB1dC50ZXh0YXJlYS5zZWxlY3Rpb25FbmR9LHNldCBzZWxlY3Rpb25FbmQodCl7dGhpcy4kLmlucHV0LnRleHRhcmVhLnNlbGVjdGlvbkVuZD10fSxfYXJpYUxhYmVsbGVkQnlDaGFuZ2VkOmZ1bmN0aW9uKHQpe3RoaXMuX2ZvY3VzYWJsZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsbGVkYnkiLHQpfSxfYXJpYURlc2NyaWJlZEJ5Q2hhbmdlZDpmdW5jdGlvbih0KXt0aGlzLl9mb2N1c2FibGVFbGVtZW50LnNldEF0dHJpYnV0ZSgiYXJpYS1kZXNjcmliZWRieSIsdCl9LGdldCBfZm9jdXNhYmxlRWxlbWVudCgpe3JldHVybiB0aGlzLmlucHV0RWxlbWVudC50ZXh0YXJlYX19KTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCmNvbnN0IFlhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7WWEuc2V0QXR0cmlidXRlKCJzdHlsZSIsImRpc3BsYXk6IG5vbmU7IiksWWEuaW5uZXJIVE1MPSI8ZG9tLW1vZHVsZSBpZD1cInBhcGVyLWl0ZW0tc2hhcmVkLXN0eWxlc1wiPlxuICA8dGVtcGxhdGU+XG4gICAgPHN0eWxlPlxuICAgICAgOmhvc3QsIC5wYXBlci1pdGVtIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgbWluLWhlaWdodDogdmFyKC0tcGFwZXItaXRlbS1taW4taGVpZ2h0LCA0OHB4KTtcbiAgICAgICAgcGFkZGluZzogMHB4IDE2cHg7XG4gICAgICB9XG5cbiAgICAgIC5wYXBlci1pdGVtIHtcbiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1zdWJoZWFkO1xuICAgICAgICBib3JkZXI6bm9uZTtcbiAgICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgfVxuXG4gICAgICA6aG9zdChbaGlkZGVuXSksIC5wYXBlci1pdGVtW2hpZGRlbl0ge1xuICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gICAgICB9XG5cbiAgICAgIDpob3N0KC5pcm9uLXNlbGVjdGVkKSwgLnBhcGVyLWl0ZW0uaXJvbi1zZWxlY3RlZCB7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1wYXBlci1pdGVtLXNlbGVjdGVkLXdlaWdodCwgYm9sZCk7XG5cbiAgICAgICAgQGFwcGx5IC0tcGFwZXItaXRlbS1zZWxlY3RlZDtcbiAgICAgIH1cblxuICAgICAgOmhvc3QoW2Rpc2FibGVkXSksIC5wYXBlci1pdGVtW2Rpc2FibGVkXSB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pdGVtLWRpc2FibGVkLWNvbG9yLCB2YXIoLS1kaXNhYmxlZC10ZXh0LWNvbG9yKSk7XG5cbiAgICAgICAgQGFwcGx5IC0tcGFwZXItaXRlbS1kaXNhYmxlZDtcbiAgICAgIH1cblxuICAgICAgOmhvc3QoOmZvY3VzKSwgLnBhcGVyLWl0ZW06Zm9jdXMge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIG91dGxpbmU6IDA7XG5cbiAgICAgICAgQGFwcGx5IC0tcGFwZXItaXRlbS1mb2N1c2VkO1xuICAgICAgfVxuXG4gICAgICA6aG9zdCg6Zm9jdXMpOmJlZm9yZSwgLnBhcGVyLWl0ZW06Zm9jdXM6YmVmb3JlIHtcbiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZpdDtcblxuICAgICAgICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICBvcGFjaXR5OiB2YXIoLS1kYXJrLWRpdmlkZXItb3BhY2l0eSk7XG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuXG4gICAgICAgIEBhcHBseSAtLXBhcGVyLWl0ZW0tZm9jdXNlZC1iZWZvcmU7XG4gICAgICB9XG4gICAgPC9zdHlsZT5cbiAgPC90ZW1wbGF0ZT5cbjwvZG9tLW1vZHVsZT4iLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoWWEuY29udGVudCk7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpjb25zdCBYYT1bWW8sV28se2hvc3RBdHRyaWJ1dGVzOntyb2xlOiJvcHRpb24iLHRhYmluZGV4OiIwIn19XTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCklyKHtfdGVtcGxhdGU6X2VgCiAgICA8c3R5bGUgaW5jbHVkZT0icGFwZXItaXRlbS1zaGFyZWQtc3R5bGVzIj4KICAgICAgOmhvc3QgewogICAgICAgIEBhcHBseSAtLWxheW91dC1ob3Jpem9udGFsOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1zdWJoZWFkOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1pdGVtOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPHNsb3Q+PC9zbG90PgpgLGlzOiJwYXBlci1pdGVtIixiZWhhdmlvcnM6W1hhXX0pLAovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KSXIoe190ZW1wbGF0ZTpfZWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIG92ZXJmbG93OiBoaWRkZW47IC8qIG5lZWRlZCBmb3IgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXMgdG8gd29yayBvbiBmZiAqLwogICAgICAgIEBhcHBseSAtLWxheW91dC12ZXJ0aWNhbDsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyLWp1c3RpZmllZDsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZmxleDsKICAgICAgfQoKICAgICAgOmhvc3QoW3R3by1saW5lXSkgewogICAgICAgIG1pbi1oZWlnaHQ6IHZhcigtLXBhcGVyLWl0ZW0tYm9keS10d28tbGluZS1taW4taGVpZ2h0LCA3MnB4KTsKICAgICAgfQoKICAgICAgOmhvc3QoW3RocmVlLWxpbmVdKSB7CiAgICAgICAgbWluLWhlaWdodDogdmFyKC0tcGFwZXItaXRlbS1ib2R5LXRocmVlLWxpbmUtbWluLWhlaWdodCwgODhweCk7CiAgICAgIH0KCiAgICAgIDpob3N0ID4gOjpzbG90dGVkKCopIHsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KCiAgICAgIDpob3N0ID4gOjpzbG90dGVkKFtzZWNvbmRhcnldKSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1ib2R5MTsKCiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWl0ZW0tYm9keS1zZWNvbmRhcnktY29sb3IsIHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWl0ZW0tYm9keS1zZWNvbmRhcnk7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHNsb3Q+PC9zbG90PgpgLGlzOiJwYXBlci1pdGVtLWJvZHkifSksCi8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpJcih7X3RlbXBsYXRlOl9lYAogICAgPHN0eWxlIGluY2x1ZGU9InBhcGVyLWl0ZW0tc2hhcmVkLXN0eWxlcyI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIEBhcHBseSAtLWxheW91dC1ob3Jpem9udGFsOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1zdWJoZWFkOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1pdGVtOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWljb24taXRlbTsKICAgICAgfQoKICAgICAgLmNvbnRlbnQtaWNvbiB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWhvcml6b250YWw7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlcjsKCiAgICAgICAgd2lkdGg6IHZhcigtLXBhcGVyLWl0ZW0taWNvbi13aWR0aCwgNTZweCk7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaXRlbS1pY29uOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgaWQ9ImNvbnRlbnRJY29uIiBjbGFzcz0iY29udGVudC1pY29uIj4KICAgICAgPHNsb3QgbmFtZT0iaXRlbS1pY29uIj48L3Nsb3Q+CiAgICA8L2Rpdj4KICAgIDxzbG90Pjwvc2xvdD4KYCxpczoicGFwZXItaWNvbi1pdGVtIixiZWhhdmlvcnM6W1hhXX0pOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KY29uc3QgJGE9e3Byb3BlcnRpZXM6e211bHRpOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsb2JzZXJ2ZXI6Im11bHRpQ2hhbmdlZCJ9LHNlbGVjdGVkVmFsdWVzOnt0eXBlOkFycmF5LG5vdGlmeTohMCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX0sc2VsZWN0ZWRJdGVtczp7dHlwZTpBcnJheSxyZWFkT25seTohMCxub3RpZnk6ITAsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19fSxvYnNlcnZlcnM6WyJfdXBkYXRlU2VsZWN0ZWQoc2VsZWN0ZWRWYWx1ZXMuc3BsaWNlcykiXSxzZWxlY3Q6ZnVuY3Rpb24odCl7dGhpcy5tdWx0aT90aGlzLl90b2dnbGVTZWxlY3RlZCh0KTp0aGlzLnNlbGVjdGVkPXR9LG11bHRpQ2hhbmdlZDpmdW5jdGlvbih0KXt0aGlzLl9zZWxlY3Rpb24ubXVsdGk9dCx0aGlzLl91cGRhdGVTZWxlY3RlZCgpfSxnZXQgX3Nob3VsZFVwZGF0ZVNlbGVjdGlvbigpe3JldHVybiBudWxsIT10aGlzLnNlbGVjdGVkfHxudWxsIT10aGlzLnNlbGVjdGVkVmFsdWVzJiZ0aGlzLnNlbGVjdGVkVmFsdWVzLmxlbmd0aH0sX3VwZGF0ZUF0dHJGb3JTZWxlY3RlZDpmdW5jdGlvbigpe3RoaXMubXVsdGk/dGhpcy5zZWxlY3RlZEl0ZW1zJiZ0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoPjAmJih0aGlzLnNlbGVjdGVkVmFsdWVzPXRoaXMuc2VsZWN0ZWRJdGVtcy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9pbmRleFRvVmFsdWUodGhpcy5pbmRleE9mKHQpKX0pLHRoaXMpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPXR9KSx0aGlzKSk6VW8uX3VwZGF0ZUF0dHJGb3JTZWxlY3RlZC5hcHBseSh0aGlzKX0sX3VwZGF0ZVNlbGVjdGVkOmZ1bmN0aW9uKCl7dGhpcy5tdWx0aT90aGlzLl9zZWxlY3RNdWx0aSh0aGlzLnNlbGVjdGVkVmFsdWVzKTp0aGlzLl9zZWxlY3RTZWxlY3RlZCh0aGlzLnNlbGVjdGVkKX0sX3NlbGVjdE11bHRpOmZ1bmN0aW9uKHQpe3ZhciBlPSh0aGlzLl92YWx1ZXNUb0l0ZW1zKHQ9dHx8W10pfHxbXSkuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9dH0pKTt0aGlzLl9zZWxlY3Rpb24uY2xlYXIoZSk7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspdGhpcy5fc2VsZWN0aW9uLnNldEl0ZW1TZWxlY3RlZChlW25dLCEwKTt0aGlzLmZhbGxiYWNrU2VsZWN0aW9uJiYhdGhpcy5fc2VsZWN0aW9uLmdldCgpLmxlbmd0aCYmdGhpcy5fdmFsdWVUb0l0ZW0odGhpcy5mYWxsYmFja1NlbGVjdGlvbikmJnRoaXMuc2VsZWN0KHRoaXMuZmFsbGJhY2tTZWxlY3Rpb24pfSxfc2VsZWN0aW9uQ2hhbmdlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fc2VsZWN0aW9uLmdldCgpO3RoaXMubXVsdGk/KHRoaXMuX3NldFNlbGVjdGVkSXRlbXModCksdGhpcy5fc2V0U2VsZWN0ZWRJdGVtKHQubGVuZ3RoP3RbMF06bnVsbCkpOm51bGwhPXQ/KHRoaXMuX3NldFNlbGVjdGVkSXRlbXMoW3RdKSx0aGlzLl9zZXRTZWxlY3RlZEl0ZW0odCkpOih0aGlzLl9zZXRTZWxlY3RlZEl0ZW1zKFtdKSx0aGlzLl9zZXRTZWxlY3RlZEl0ZW0obnVsbCkpfSxfdG9nZ2xlU2VsZWN0ZWQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zZWxlY3RlZFZhbHVlcy5pbmRleE9mKHQpO2U8MD90aGlzLnB1c2goInNlbGVjdGVkVmFsdWVzIix0KTp0aGlzLnNwbGljZSgic2VsZWN0ZWRWYWx1ZXMiLGUsMSl9LF92YWx1ZXNUb0l0ZW1zOmZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P251bGw6dC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWx1ZVRvSXRlbSh0KX0pLHRoaXMpfX0sS2E9e3Byb3BlcnRpZXM6e2ZvY3VzZWRJdGVtOntvYnNlcnZlcjoiX2ZvY3VzZWRJdGVtQ2hhbmdlZCIscmVhZE9ubHk6ITAsdHlwZTpPYmplY3R9LGF0dHJGb3JJdGVtVGl0bGU6e3R5cGU6U3RyaW5nfSxkaXNhYmxlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG9ic2VydmVyOiJfZGlzYWJsZWRDaGFuZ2VkIn19LF9NT0RJRklFUl9LRVlTOlsiQWx0IiwiQWx0R3JhcGgiLCJDYXBzTG9jayIsIkNvbnRyb2wiLCJGbiIsIkZuTG9jayIsIkh5cGVyIiwiTWV0YSIsIk51bUxvY2siLCJPUyIsIlNjcm9sbExvY2siLCJTaGlmdCIsIlN1cGVyIiwiU3ltYm9sIiwiU3ltYm9sTG9jayJdLF9TRUFSQ0hfUkVTRVRfVElNRU9VVF9NUzoxZTMsX3ByZXZpb3VzVGFiSW5kZXg6MCxob3N0QXR0cmlidXRlczp7cm9sZToibWVudSJ9LG9ic2VydmVyczpbIl91cGRhdGVNdWx0aXNlbGVjdGFibGUobXVsdGkpIl0sbGlzdGVuZXJzOntmb2N1czoiX29uRm9jdXMiLGtleWRvd246Il9vbktleWRvd24iLCJpcm9uLWl0ZW1zLWNoYW5nZWQiOiJfb25Jcm9uSXRlbXNDaGFuZ2VkIn0sa2V5QmluZGluZ3M6e3VwOiJfb25VcEtleSIsZG93bjoiX29uRG93bktleSIsZXNjOiJfb25Fc2NLZXkiLCJzaGlmdCt0YWI6a2V5ZG93biI6Il9vblNoaWZ0VGFiRG93biJ9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fcmVzZXRUYWJpbmRpY2VzKCl9LHNlbGVjdDpmdW5jdGlvbih0KXt0aGlzLl9kZWZhdWx0Rm9jdXNBc3luYyYmKHRoaXMuY2FuY2VsQXN5bmModGhpcy5fZGVmYXVsdEZvY3VzQXN5bmMpLHRoaXMuX2RlZmF1bHRGb2N1c0FzeW5jPW51bGwpO3ZhciBlPXRoaXMuX3ZhbHVlVG9JdGVtKHQpO2UmJmUuaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpfHwodGhpcy5fc2V0Rm9jdXNlZEl0ZW0oZSksJGEuc2VsZWN0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LF9yZXNldFRhYmluZGljZXM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm11bHRpP3RoaXMuc2VsZWN0ZWRJdGVtcyYmdGhpcy5zZWxlY3RlZEl0ZW1zWzBdOnRoaXMuc2VsZWN0ZWRJdGVtO3RoaXMuaXRlbXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IixlPT09dD8iMCI6Ii0xIiksZS5zZXRBdHRyaWJ1dGUoImFyaWEtc2VsZWN0ZWQiLHRoaXMuX3NlbGVjdGlvbi5pc1NlbGVjdGVkKGUpKX0pLHRoaXMpfSxfdXBkYXRlTXVsdGlzZWxlY3RhYmxlOmZ1bmN0aW9uKHQpe3Q/dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtbXVsdGlzZWxlY3RhYmxlIiwidHJ1ZSIpOnRoaXMucmVtb3ZlQXR0cmlidXRlKCJhcmlhLW11bHRpc2VsZWN0YWJsZSIpfSxfZm9jdXNXaXRoS2V5Ym9hcmRFdmVudDpmdW5jdGlvbih0KXtpZigtMT09PXRoaXMuX01PRElGSUVSX0tFWVMuaW5kZXhPZih0LmtleSkpe3RoaXMuY2FuY2VsRGVib3VuY2VyKCJfY2xlYXJTZWFyY2hUZXh0Iik7Zm9yKHZhciBlLG49dGhpcy5fc2VhcmNoVGV4dHx8IiIsaT0obis9KHQua2V5JiYxPT10LmtleS5sZW5ndGg/dC5rZXk6U3RyaW5nLmZyb21DaGFyQ29kZSh0LmtleUNvZGUpKS50b0xvY2FsZUxvd2VyQ2FzZSgpKS5sZW5ndGgscj0wO2U9dGhpcy5pdGVtc1tyXTtyKyspaWYoIWUuaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpKXt2YXIgbz10aGlzLmF0dHJGb3JJdGVtVGl0bGV8fCJ0ZXh0Q29udGVudCIsYT0oZVtvXXx8ZS5nZXRBdHRyaWJ1dGUobyl8fCIiKS50cmltKCk7aWYoIShhLmxlbmd0aDxpKSYmYS5zbGljZSgwLGkpLnRvTG9jYWxlTG93ZXJDYXNlKCk9PW4pe3RoaXMuX3NldEZvY3VzZWRJdGVtKGUpO2JyZWFrfX10aGlzLl9zZWFyY2hUZXh0PW4sdGhpcy5kZWJvdW5jZSgiX2NsZWFyU2VhcmNoVGV4dCIsdGhpcy5fY2xlYXJTZWFyY2hUZXh0LHRoaXMuX1NFQVJDSF9SRVNFVF9USU1FT1VUX01TKX19LF9jbGVhclNlYXJjaFRleHQ6ZnVuY3Rpb24oKXt0aGlzLl9zZWFyY2hUZXh0PSIifSxfZm9jdXNQcmV2aW91czpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLml0ZW1zLmxlbmd0aCxlPU51bWJlcih0aGlzLmluZGV4T2YodGhpcy5mb2N1c2VkSXRlbSkpLG49MTtuPHQrMTtuKyspe3ZhciBpPXRoaXMuaXRlbXNbKGUtbit0KSV0XTtpZighaS5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIikpe3ZhciByPXFpKGkpLmdldE93bmVyUm9vdCgpfHxkb2N1bWVudDtpZih0aGlzLl9zZXRGb2N1c2VkSXRlbShpKSxxaShyKS5hY3RpdmVFbGVtZW50PT1pKXJldHVybn19fSxfZm9jdXNOZXh0OmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuaXRlbXMubGVuZ3RoLGU9TnVtYmVyKHRoaXMuaW5kZXhPZih0aGlzLmZvY3VzZWRJdGVtKSksbj0xO248dCsxO24rKyl7dmFyIGk9dGhpcy5pdGVtc1soZStuKSV0XTtpZighaS5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIikpe3ZhciByPXFpKGkpLmdldE93bmVyUm9vdCgpfHxkb2N1bWVudDtpZih0aGlzLl9zZXRGb2N1c2VkSXRlbShpKSxxaShyKS5hY3RpdmVFbGVtZW50PT1pKXJldHVybn19fSxfYXBwbHlTZWxlY3Rpb246ZnVuY3Rpb24odCxlKXt0LnNldEF0dHJpYnV0ZSgiYXJpYS1zZWxlY3RlZCIsZT8idHJ1ZSI6ImZhbHNlIiksVW8uX2FwcGx5U2VsZWN0aW9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sX2ZvY3VzZWRJdGVtQ2hhbmdlZDpmdW5jdGlvbih0LGUpe2UmJmUuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIi0xIiksIXR8fHQuaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpfHx0aGlzLmRpc2FibGVkfHwodC5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiMCIpLHQuZm9jdXMoKSl9LF9vbklyb25JdGVtc0NoYW5nZWQ6ZnVuY3Rpb24odCl7dC5kZXRhaWwuYWRkZWROb2Rlcy5sZW5ndGgmJnRoaXMuX3Jlc2V0VGFiaW5kaWNlcygpfSxfb25TaGlmdFRhYkRvd246ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nZXRBdHRyaWJ1dGUoInRhYmluZGV4Iik7S2EuX3NoaWZ0VGFiUHJlc3NlZD0hMCx0aGlzLl9zZXRGb2N1c2VkSXRlbShudWxsKSx0aGlzLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCItMSIpLHRoaXMuYXN5bmMoKGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IixlKSxLYS5fc2hpZnRUYWJQcmVzc2VkPSExfSksMSl9LF9vbkZvY3VzOmZ1bmN0aW9uKHQpe2lmKCFLYS5fc2hpZnRUYWJQcmVzc2VkKXt2YXIgZT1xaSh0KS5yb290VGFyZ2V0OyhlPT09dGhpc3x8dm9pZCAwPT09ZS50YWJJbmRleHx8dGhpcy5pc0xpZ2h0RGVzY2VuZGFudChlKSkmJih0aGlzLl9kZWZhdWx0Rm9jdXNBc3luYz10aGlzLmFzeW5jKChmdW5jdGlvbigpe3ZhciB0PXRoaXMubXVsdGk/dGhpcy5zZWxlY3RlZEl0ZW1zJiZ0aGlzLnNlbGVjdGVkSXRlbXNbMF06dGhpcy5zZWxlY3RlZEl0ZW07dGhpcy5fc2V0Rm9jdXNlZEl0ZW0obnVsbCksdD90aGlzLl9zZXRGb2N1c2VkSXRlbSh0KTp0aGlzLml0ZW1zWzBdJiZ0aGlzLl9mb2N1c05leHQoKX0pKSl9fSxfb25VcEtleTpmdW5jdGlvbih0KXt0aGlzLl9mb2N1c1ByZXZpb3VzKCksdC5kZXRhaWwua2V5Ym9hcmRFdmVudC5wcmV2ZW50RGVmYXVsdCgpfSxfb25Eb3duS2V5OmZ1bmN0aW9uKHQpe3RoaXMuX2ZvY3VzTmV4dCgpLHQuZGV0YWlsLmtleWJvYXJkRXZlbnQucHJldmVudERlZmF1bHQoKX0sX29uRXNjS2V5OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZm9jdXNlZEl0ZW07ZSYmZS5ibHVyKCl9LF9vbktleWRvd246ZnVuY3Rpb24odCl7dGhpcy5rZXlib2FyZEV2ZW50TWF0Y2hlc0tleXModCwidXAgZG93biBlc2MiKXx8dGhpcy5fZm9jdXNXaXRoS2V5Ym9hcmRFdmVudCh0KSx0LnN0b3BQcm9wYWdhdGlvbigpfSxfYWN0aXZhdGVIYW5kbGVyOmZ1bmN0aW9uKHQpe1VvLl9hY3RpdmF0ZUhhbmRsZXIuY2FsbCh0aGlzLHQpLHQuc3RvcFByb3BhZ2F0aW9uKCl9LF9kaXNhYmxlZENoYW5nZWQ6ZnVuY3Rpb24odCl7dD8odGhpcy5fcHJldmlvdXNUYWJJbmRleD10aGlzLmhhc0F0dHJpYnV0ZSgidGFiaW5kZXgiKT90aGlzLnRhYkluZGV4OjAsdGhpcy5yZW1vdmVBdHRyaWJ1dGUoInRhYmluZGV4IikpOnRoaXMuaGFzQXR0cmlidXRlKCJ0YWJpbmRleCIpfHx0aGlzLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLHRoaXMuX3ByZXZpb3VzVGFiSW5kZXgpfSxfc2hpZnRUYWJQcmVzc2VkOiExfSxaYT1bW1VvLCRhXSxSbyxLYV07Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpJcih7X3RlbXBsYXRlOl9lYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcGFkZGluZzogOHB4IDA7CgogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLWxpc3Rib3gtYmFja2dyb3VuZC1jb2xvciwgdmFyKC0tcHJpbWFyeS1iYWNrZ3JvdW5kLWNvbG9yKSk7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWxpc3Rib3gtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1saXN0Ym94OwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxzbG90Pjwvc2xvdD4KYCxpczoicGFwZXItbGlzdGJveCIsYmVoYXZpb3JzOltaYV0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6Imxpc3Rib3gifX0pOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KY29uc3QgSmE9X2VgCjxkb20tbW9kdWxlIGlkPSJwYXBlci1tYXRlcmlhbC1zaGFyZWQtc3R5bGVzIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtlbGV2YXRpb249IjEiXSkgewogICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tMmRwOwogICAgICB9CgogICAgICA6aG9zdChbZWxldmF0aW9uPSIyIl0pIHsKICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTRkcDsKICAgICAgfQoKICAgICAgOmhvc3QoW2VsZXZhdGlvbj0iMyJdKSB7CiAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi02ZHA7CiAgICAgIH0KCiAgICAgIDpob3N0KFtlbGV2YXRpb249IjQiXSkgewogICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tOGRwOwogICAgICB9CgogICAgICA6aG9zdChbZWxldmF0aW9uPSI1Il0pIHsKICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTE2ZHA7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgpgO0phLnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoSmEuY29udGVudCksCi8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpJcih7X3RlbXBsYXRlOl9lYAogICAgPHN0eWxlIGluY2x1ZGU9InBhcGVyLW1hdGVyaWFsLXNoYXJlZC1zdHlsZXMiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0KFthbmltYXRlZF0pIHsKICAgICAgICBAYXBwbHkgLS1zaGFkb3ctdHJhbnNpdGlvbjsKICAgICAgfQogICAgICA6aG9zdCB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWw7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHNsb3Q+PC9zbG90PgpgLGlzOiJwYXBlci1tYXRlcmlhbCIscHJvcGVydGllczp7ZWxldmF0aW9uOnt0eXBlOk51bWJlcixyZWZsZWN0VG9BdHRyaWJ1dGU6ITAsdmFsdWU6MX0sYW5pbWF0ZWQ6e3R5cGU6Qm9vbGVhbixyZWZsZWN0VG9BdHRyaWJ1dGU6ITAsdmFsdWU6ITF9fX0pOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KY29uc3QgUWE9e3Byb3BlcnRpZXM6e3ZhbHVlOnt0eXBlOk51bWJlcix2YWx1ZTowLG5vdGlmeTohMCxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LG1pbjp7dHlwZTpOdW1iZXIsdmFsdWU6MCxub3RpZnk6ITB9LG1heDp7dHlwZTpOdW1iZXIsdmFsdWU6MTAwLG5vdGlmeTohMH0sc3RlcDp7dHlwZTpOdW1iZXIsdmFsdWU6MSxub3RpZnk6ITB9LHJhdGlvOnt0eXBlOk51bWJlcix2YWx1ZTowLHJlYWRPbmx5OiEwLG5vdGlmeTohMH19LG9ic2VydmVyczpbIl91cGRhdGUodmFsdWUsIG1pbiwgbWF4LCBzdGVwKSJdLF9jYWxjUmF0aW86ZnVuY3Rpb24odCl7cmV0dXJuKHRoaXMuX2NsYW1wVmFsdWUodCktdGhpcy5taW4pLyh0aGlzLm1heC10aGlzLm1pbil9LF9jbGFtcFZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1pbih0aGlzLm1heCxNYXRoLm1heCh0aGlzLm1pbix0aGlzLl9jYWxjU3RlcCh0KSkpfSxfY2FsY1N0ZXA6ZnVuY3Rpb24odCl7aWYodD1wYXJzZUZsb2F0KHQpLCF0aGlzLnN0ZXApcmV0dXJuIHQ7dmFyIGU9TWF0aC5yb3VuZCgodC10aGlzLm1pbikvdGhpcy5zdGVwKTtyZXR1cm4gdGhpcy5zdGVwPDE/ZS8oMS90aGlzLnN0ZXApK3RoaXMubWluOmUqdGhpcy5zdGVwK3RoaXMubWlufSxfdmFsaWRhdGVWYWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2NsYW1wVmFsdWUodGhpcy52YWx1ZSk7cmV0dXJuIHRoaXMudmFsdWU9dGhpcy5vbGRWYWx1ZT1pc05hTih0KT90aGlzLm9sZFZhbHVlOnQsdGhpcy52YWx1ZSE9PXR9LF91cGRhdGU6ZnVuY3Rpb24oKXt0aGlzLl92YWxpZGF0ZVZhbHVlKCksdGhpcy5fc2V0UmF0aW8oMTAwKnRoaXMuX2NhbGNSYXRpbyh0aGlzLnZhbHVlKSl9fTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovSXIoe190ZW1wbGF0ZTpfZWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHdpZHRoOiAyMDBweDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgOmhvc3QoW2hpZGRlbl0pLCBbaGlkZGVuXSB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAjcHJvZ3Jlc3NDb250YWluZXIgewogICAgICAgIEBhcHBseSAtLXBhcGVyLXByb2dyZXNzLWNvbnRhaW5lcjsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgICNwcm9ncmVzc0NvbnRhaW5lciwKICAgICAgLyogdGhlIHN0cmlwZSBmb3IgdGhlIGluZGV0ZXJtaW5hdGUgYW5pbWF0aW9uKi8KICAgICAgLmluZGV0ZXJtaW5hdGU6OmFmdGVyIHsKICAgICAgICBoZWlnaHQ6IHZhcigtLXBhcGVyLXByb2dyZXNzLWhlaWdodCwgNHB4KTsKICAgICAgfQoKICAgICAgI3ByaW1hcnlQcm9ncmVzcywKICAgICAgI3NlY29uZGFyeVByb2dyZXNzLAogICAgICAuaW5kZXRlcm1pbmF0ZTo6YWZ0ZXIgewogICAgICAgIEBhcHBseSAtLWxheW91dC1maXQ7CiAgICAgIH0KCiAgICAgICNwcm9ncmVzc0NvbnRhaW5lciwKICAgICAgLmluZGV0ZXJtaW5hdGU6OmFmdGVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1wYXBlci1wcm9ncmVzcy1jb250YWluZXItY29sb3IsIHZhcigtLWdvb2dsZS1ncmV5LTMwMCkpOwogICAgICB9CgogICAgICA6aG9zdCgudHJhbnNpdGluZykgI3ByaW1hcnlQcm9ncmVzcywKICAgICAgOmhvc3QoLnRyYW5zaXRpbmcpICNzZWNvbmRhcnlQcm9ncmVzcyB7CiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uLXByb3BlcnR5OiAtd2Via2l0LXRyYW5zZm9ybTsKICAgICAgICB0cmFuc2l0aW9uLXByb3BlcnR5OiB0cmFuc2Zvcm07CgogICAgICAgIC8qIER1cmF0aW9uICovCiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uLWR1cmF0aW9uOiB2YXIoLS1wYXBlci1wcm9ncmVzcy10cmFuc2l0aW9uLWR1cmF0aW9uLCAwLjA4cyk7CiAgICAgICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItcHJvZ3Jlc3MtdHJhbnNpdGlvbi1kdXJhdGlvbiwgMC4wOHMpOwoKICAgICAgICAvKiBUaW1pbmcgZnVuY3Rpb24gKi8KICAgICAgICAtd2Via2l0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1wYXBlci1wcm9ncmVzcy10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbiwgZWFzZSk7CiAgICAgICAgdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLXBhcGVyLXByb2dyZXNzLXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uLCBlYXNlKTsKCiAgICAgICAgLyogRGVsYXkgKi8KICAgICAgICAtd2Via2l0LXRyYW5zaXRpb24tZGVsYXk6IHZhcigtLXBhcGVyLXByb2dyZXNzLXRyYW5zaXRpb24tZGVsYXksIDBzKTsKICAgICAgICB0cmFuc2l0aW9uLWRlbGF5OiB2YXIoLS1wYXBlci1wcm9ncmVzcy10cmFuc2l0aW9uLWRlbGF5LCAwcyk7CiAgICAgIH0KCiAgICAgICNwcmltYXJ5UHJvZ3Jlc3MsCiAgICAgICNzZWNvbmRhcnlQcm9ncmVzcyB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZpdDsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IGxlZnQgY2VudGVyOwogICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IGxlZnQgY2VudGVyOwogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoMCk7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoMCk7CiAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsKICAgICAgfQoKICAgICAgI3ByaW1hcnlQcm9ncmVzcyB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tcGFwZXItcHJvZ3Jlc3MtYWN0aXZlLWNvbG9yLCB2YXIoLS1nb29nbGUtZ3JlZW4tNTAwKSk7CiAgICAgIH0KCiAgICAgICNzZWNvbmRhcnlQcm9ncmVzcyB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tcGFwZXItcHJvZ3Jlc3Mtc2Vjb25kYXJ5LWNvbG9yLCB2YXIoLS1nb29nbGUtZ3JlZW4tMTAwKSk7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pICNwcmltYXJ5UHJvZ3Jlc3MgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLXByb2dyZXNzLWRpc2FibGVkLWFjdGl2ZS1jb2xvciwgdmFyKC0tZ29vZ2xlLWdyZXktNTAwKSk7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pICNzZWNvbmRhcnlQcm9ncmVzcyB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tcGFwZXItcHJvZ3Jlc3MtZGlzYWJsZWQtc2Vjb25kYXJ5LWNvbG9yLCB2YXIoLS1nb29nbGUtZ3JleS0zMDApKTsKICAgICAgfQoKICAgICAgOmhvc3QoOm5vdChbZGlzYWJsZWRdKSkgI3ByaW1hcnlQcm9ncmVzcy5pbmRldGVybWluYXRlIHsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IHJpZ2h0IGNlbnRlcjsKICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiByaWdodCBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb246IGluZGV0ZXJtaW5hdGUtYmFyIHZhcigtLXBhcGVyLXByb2dyZXNzLWluZGV0ZXJtaW5hdGUtY3ljbGUtZHVyYXRpb24sIDJzKSBsaW5lYXIgaW5maW5pdGU7CiAgICAgICAgYW5pbWF0aW9uOiBpbmRldGVybWluYXRlLWJhciB2YXIoLS1wYXBlci1wcm9ncmVzcy1pbmRldGVybWluYXRlLWN5Y2xlLWR1cmF0aW9uLCAycykgbGluZWFyIGluZmluaXRlOwogICAgICB9CgogICAgICA6aG9zdCg6bm90KFtkaXNhYmxlZF0pKSAjcHJpbWFyeVByb2dyZXNzLmluZGV0ZXJtaW5hdGU6OmFmdGVyIHsKICAgICAgICBjb250ZW50OiAiIjsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IGNlbnRlciBjZW50ZXI7CiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyIGNlbnRlcjsKCiAgICAgICAgLXdlYmtpdC1hbmltYXRpb246IGluZGV0ZXJtaW5hdGUtc3BsaXR0ZXIgdmFyKC0tcGFwZXItcHJvZ3Jlc3MtaW5kZXRlcm1pbmF0ZS1jeWNsZS1kdXJhdGlvbiwgMnMpIGxpbmVhciBpbmZpbml0ZTsKICAgICAgICBhbmltYXRpb246IGluZGV0ZXJtaW5hdGUtc3BsaXR0ZXIgdmFyKC0tcGFwZXItcHJvZ3Jlc3MtaW5kZXRlcm1pbmF0ZS1jeWNsZS1kdXJhdGlvbiwgMnMpIGxpbmVhciBpbmZpbml0ZTsKICAgICAgfQoKICAgICAgQC13ZWJraXQta2V5ZnJhbWVzIGluZGV0ZXJtaW5hdGUtYmFyIHsKICAgICAgICAwJSB7CiAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGVYKDEpIHRyYW5zbGF0ZVgoLTEwMCUpOwogICAgICAgIH0KICAgICAgICA1MCUgewogICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlWCgxKSB0cmFuc2xhdGVYKDAlKTsKICAgICAgICB9CiAgICAgICAgNzUlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoMSkgdHJhbnNsYXRlWCgwJSk7CiAgICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllciguMjgsLjYyLC4zNywuOTEpOwogICAgICAgIH0KICAgICAgICAxMDAlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoMCkgdHJhbnNsYXRlWCgwJSk7CiAgICAgICAgfQogICAgICB9CgogICAgICBALXdlYmtpdC1rZXlmcmFtZXMgaW5kZXRlcm1pbmF0ZS1zcGxpdHRlciB7CiAgICAgICAgMCUgewogICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlWCguNzUpIHRyYW5zbGF0ZVgoLTEyNSUpOwogICAgICAgIH0KICAgICAgICAzMCUgewogICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlWCguNzUpIHRyYW5zbGF0ZVgoLTEyNSUpOwogICAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoLjQyLDAsLjYsLjgpOwogICAgICAgIH0KICAgICAgICA5MCUgewogICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlWCguNzUpIHRyYW5zbGF0ZVgoMTI1JSk7CiAgICAgICAgfQogICAgICAgIDEwMCUgewogICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlWCguNzUpIHRyYW5zbGF0ZVgoMTI1JSk7CiAgICAgICAgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGluZGV0ZXJtaW5hdGUtYmFyIHsKICAgICAgICAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCgxKSB0cmFuc2xhdGVYKC0xMDAlKTsKICAgICAgICB9CiAgICAgICAgNTAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKDEpIHRyYW5zbGF0ZVgoMCUpOwogICAgICAgIH0KICAgICAgICA3NSUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoMSkgdHJhbnNsYXRlWCgwJSk7CiAgICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoLjI4LC42MiwuMzcsLjkxKTsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCgwKSB0cmFuc2xhdGVYKDAlKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgaW5kZXRlcm1pbmF0ZS1zcGxpdHRlciB7CiAgICAgICAgMCUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoLjc1KSB0cmFuc2xhdGVYKC0xMjUlKTsKICAgICAgICB9CiAgICAgICAgMzAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC43NSkgdHJhbnNsYXRlWCgtMTI1JSk7CiAgICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoLjQyLDAsLjYsLjgpOwogICAgICAgIH0KICAgICAgICA5MCUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoLjc1KSB0cmFuc2xhdGVYKDEyNSUpOwogICAgICAgIH0KICAgICAgICAxMDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC43NSkgdHJhbnNsYXRlWCgxMjUlKTsKICAgICAgICB9CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBpZD0icHJvZ3Jlc3NDb250YWluZXIiPgogICAgICA8ZGl2IGlkPSJzZWNvbmRhcnlQcm9ncmVzcyIgaGlkZGVuXCQ9IltbX2hpZGVTZWNvbmRhcnlQcm9ncmVzcyhzZWNvbmRhcnlSYXRpbyldXSI+PC9kaXY+CiAgICAgIDxkaXYgaWQ9InByaW1hcnlQcm9ncmVzcyI+PC9kaXY+CiAgICA8L2Rpdj4KYCxpczoicGFwZXItcHJvZ3Jlc3MiLGJlaGF2aW9yczpbUWFdLHByb3BlcnRpZXM6e3NlY29uZGFyeVByb2dyZXNzOnt0eXBlOk51bWJlcix2YWx1ZTowfSxzZWNvbmRhcnlSYXRpbzp7dHlwZTpOdW1iZXIsdmFsdWU6MCxyZWFkT25seTohMH0saW5kZXRlcm1pbmF0ZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG9ic2VydmVyOiJfdG9nZ2xlSW5kZXRlcm1pbmF0ZSJ9LGRpc2FibGVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVmbGVjdFRvQXR0cmlidXRlOiEwLG9ic2VydmVyOiJfZGlzYWJsZWRDaGFuZ2VkIn19LG9ic2VydmVyczpbIl9wcm9ncmVzc0NoYW5nZWQoc2Vjb25kYXJ5UHJvZ3Jlc3MsIHZhbHVlLCBtaW4sIG1heCwgaW5kZXRlcm1pbmF0ZSkiXSxob3N0QXR0cmlidXRlczp7cm9sZToicHJvZ3Jlc3NiYXIifSxfdG9nZ2xlSW5kZXRlcm1pbmF0ZTpmdW5jdGlvbih0KXt0aGlzLnRvZ2dsZUNsYXNzKCJpbmRldGVybWluYXRlIix0LHRoaXMuJC5wcmltYXJ5UHJvZ3Jlc3MpfSxfdHJhbnNmb3JtUHJvZ3Jlc3M6ZnVuY3Rpb24odCxlKXt0LnN0eWxlLnRyYW5zZm9ybT10LnN0eWxlLndlYmtpdFRyYW5zZm9ybT0ic2NhbGVYKCIrZS8xMDArIikifSxfbWFpblJhdGlvQ2hhbmdlZDpmdW5jdGlvbih0KXt0aGlzLl90cmFuc2Zvcm1Qcm9ncmVzcyh0aGlzLiQucHJpbWFyeVByb2dyZXNzLHQpfSxfcHJvZ3Jlc3NDaGFuZ2VkOmZ1bmN0aW9uKHQsZSxuLGkscil7dD10aGlzLl9jbGFtcFZhbHVlKHQpLGU9dGhpcy5fY2xhbXBWYWx1ZShlKTt2YXIgbz0xMDAqdGhpcy5fY2FsY1JhdGlvKHQpLGE9MTAwKnRoaXMuX2NhbGNSYXRpbyhlKTt0aGlzLl9zZXRTZWNvbmRhcnlSYXRpbyhvKSx0aGlzLl90cmFuc2Zvcm1Qcm9ncmVzcyh0aGlzLiQuc2Vjb25kYXJ5UHJvZ3Jlc3MsbyksdGhpcy5fdHJhbnNmb3JtUHJvZ3Jlc3ModGhpcy4kLnByaW1hcnlQcm9ncmVzcyxhKSx0aGlzLnNlY29uZGFyeVByb2dyZXNzPXQscj90aGlzLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS12YWx1ZW5vdyIpOnRoaXMuc2V0QXR0cmlidXRlKCJhcmlhLXZhbHVlbm93IixlKSx0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS12YWx1ZW1pbiIsbiksdGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtdmFsdWVtYXgiLGkpfSxfZGlzYWJsZWRDaGFuZ2VkOmZ1bmN0aW9uKHQpe3RoaXMuc2V0QXR0cmlidXRlKCJhcmlhLWRpc2FibGVkIix0PyJ0cnVlIjoiZmFsc2UiKX0sX2hpZGVTZWNvbmRhcnlQcm9ncmVzczpmdW5jdGlvbih0KXtyZXR1cm4gMD09PXR9fSk7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCmNvbnN0IHRzPV9lYAo8c3R5bGU+CiAgOmhvc3QgewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgbGluZS1oZWlnaHQ6IDA7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgIC0tY2FsY3VsYXRlZC1wYXBlci1yYWRpby1idXR0b24tc2l6ZTogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLXNpemUsIDE2cHgpOwogICAgLyogLTFweCBpcyBhIHNlbnRpbmVsIGZvciB0aGUgZGVmYXVsdCBhbmQgaXMgcmVwbGFjZSBpbiBcYGF0dGFjaGVkXGAuICovCiAgICAtLWNhbGN1bGF0ZWQtcGFwZXItcmFkaW8tYnV0dG9uLWluay1zaXplOiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24taW5rLXNpemUsIC0xcHgpOwogIH0KCiAgOmhvc3QoOmZvY3VzKSB7CiAgICBvdXRsaW5lOiBub25lOwogIH0KCiAgI3JhZGlvQ29udGFpbmVyIHsKICAgIEBhcHBseSAtLWxheW91dC1pbmxpbmU7CiAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyLWNlbnRlcjsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHdpZHRoOiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXJhZGlvLWJ1dHRvbi1zaXplKTsKICAgIGhlaWdodDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1yYWRpby1idXR0b24tc2l6ZSk7CiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwoKICAgIEBhcHBseSAtLXBhcGVyLXJhZGlvLWJ1dHRvbi1yYWRpby1jb250YWluZXI7CiAgfQoKICAjaW5rIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogNTAlOwogICAgbGVmdDogNTAlOwogICAgcmlnaHQ6IGF1dG87CiAgICB3aWR0aDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1yYWRpby1idXR0b24taW5rLXNpemUpOwogICAgaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXJhZGlvLWJ1dHRvbi1pbmstc2l6ZSk7CiAgICBjb2xvcjogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLXVuY2hlY2tlZC1pbmstY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgb3BhY2l0eTogMC42OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7CiAgfQoKICAjaW5rW2NoZWNrZWRdIHsKICAgIGNvbG9yOiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tY2hlY2tlZC1pbmstY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKICB9CgogICNvZmZSYWRpbywgI29uUmFkaW8gewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgIHRvcDogMDsKICAgIGxlZnQ6IDA7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICB9CgogICNvZmZSYWRpbyB7CiAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tdW5jaGVja2VkLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXJhZGlvLWJ1dHRvbi11bmNoZWNrZWQtYmFja2dyb3VuZC1jb2xvciwgdHJhbnNwYXJlbnQpOwogICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMjhzOwogIH0KCiAgI29uUmFkaW8gewogICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLWNoZWNrZWQtY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgwKTsKICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7CiAgICB0cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSBlYXNlIDAuMjhzOwogICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIGVhc2UgMC4yOHM7CiAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogIH0KCiAgOmhvc3QoW2NoZWNrZWRdKSAjb2ZmUmFkaW8gewogICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tY2hlY2tlZC1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwogIH0KCiAgOmhvc3QoW2NoZWNrZWRdKSAjb25SYWRpbyB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMC41KTsKICAgIHRyYW5zZm9ybTogc2NhbGUoMC41KTsKICB9CgogICNyYWRpb0xhYmVsIHsKICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgbWFyZ2luLWxlZnQ6IHZhcigtLXBhcGVyLXJhZGlvLWJ1dHRvbi1sYWJlbC1zcGFjaW5nLCAxMHB4KTsKICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7CiAgICBjb2xvcjogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLWxhYmVsLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKCiAgICBAYXBwbHkgLS1wYXBlci1yYWRpby1idXR0b24tbGFiZWw7CiAgfQoKICA6aG9zdChbY2hlY2tlZF0pICNyYWRpb0xhYmVsIHsKICAgIEBhcHBseSAtLXBhcGVyLXJhZGlvLWJ1dHRvbi1sYWJlbC1jaGVja2VkOwogIH0KCiAgI3JhZGlvTGFiZWw6ZGlyKHJ0bCkgewogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICBtYXJnaW4tcmlnaHQ6IHZhcigtLXBhcGVyLXJhZGlvLWJ1dHRvbi1sYWJlbC1zcGFjaW5nLCAxMHB4KTsKICB9CgogICNyYWRpb0xhYmVsW2hpZGRlbl0gewogICAgZGlzcGxheTogbm9uZTsKICB9CgogIC8qIGRpc2FibGVkIHN0YXRlICovCgogIDpob3N0KFtkaXNhYmxlZF0pICNvZmZSYWRpbyB7CiAgICBib3JkZXItY29sb3I6IHZhcigtLXBhcGVyLXJhZGlvLWJ1dHRvbi11bmNoZWNrZWQtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgb3BhY2l0eTogMC41OwogIH0KCiAgOmhvc3QoW2Rpc2FibGVkXVtjaGVja2VkXSkgI29uUmFkaW8gewogICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLXVuY2hlY2tlZC1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CiAgICBvcGFjaXR5OiAwLjU7CiAgfQoKICA6aG9zdChbZGlzYWJsZWRdKSAjcmFkaW9MYWJlbCB7CiAgICAvKiBzbGlnaHRseSBkYXJrZXIgdGhhbiB0aGUgYnV0dG9uLCBzbyB0aGF0IGl0J3MgcmVhZGFibGUgKi8KICAgIG9wYWNpdHk6IDAuNjU7CiAgfQo8L3N0eWxlPgoKPGRpdiBpZD0icmFkaW9Db250YWluZXIiPgogIDxkaXYgaWQ9Im9mZlJhZGlvIj48L2Rpdj4KICA8ZGl2IGlkPSJvblJhZGlvIj48L2Rpdj4KPC9kaXY+Cgo8ZGl2IGlkPSJyYWRpb0xhYmVsIj48c2xvdD48L3Nsb3Q+PC9kaXY+YDt0cy5zZXRBdHRyaWJ1dGUoInN0cmlwLXdoaXRlc3BhY2UiLCIiKSxJcih7X3RlbXBsYXRlOnRzLGlzOiJwYXBlci1yYWRpby1idXR0b24iLGJlaGF2aW9yczpbY2FdLGhvc3RBdHRyaWJ1dGVzOntyb2xlOiJyYWRpbyIsImFyaWEtY2hlY2tlZCI6ITEsdGFiaW5kZXg6MH0scHJvcGVydGllczp7YXJpYUFjdGl2ZUF0dHJpYnV0ZTp7dHlwZTpTdHJpbmcsdmFsdWU6ImFyaWEtY2hlY2tlZCJ9fSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuX3JpcHBsZUNvbnRhaW5lcj10aGlzLiQucmFkaW9Db250YWluZXJ9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7a2kodGhpcywoZnVuY3Rpb24oKXtpZigiLTFweCI9PT10aGlzLmdldENvbXB1dGVkU3R5bGVWYWx1ZSgiLS1jYWxjdWxhdGVkLXBhcGVyLXJhZGlvLWJ1dHRvbi1pbmstc2l6ZSIpLnRyaW0oKSl7dmFyIHQ9cGFyc2VGbG9hdCh0aGlzLmdldENvbXB1dGVkU3R5bGVWYWx1ZSgiLS1jYWxjdWxhdGVkLXBhcGVyLXJhZGlvLWJ1dHRvbi1zaXplIikudHJpbSgpKSxlPU1hdGguZmxvb3IoMyp0KTtlJTIhPXQlMiYmZSsrLHRoaXMudXBkYXRlU3R5bGVzKHsiLS1wYXBlci1yYWRpby1idXR0b24taW5rLXNpemUiOmUrInB4In0pfX0pKX19KTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCmNvbnN0IGVzPXtob3N0QXR0cmlidXRlczp7cm9sZToibWVudWJhciJ9LGtleUJpbmRpbmdzOntsZWZ0OiJfb25MZWZ0S2V5IixyaWdodDoiX29uUmlnaHRLZXkifSxfb25VcEtleTpmdW5jdGlvbih0KXt0aGlzLmZvY3VzZWRJdGVtLmNsaWNrKCksdC5kZXRhaWwua2V5Ym9hcmRFdmVudC5wcmV2ZW50RGVmYXVsdCgpfSxfb25Eb3duS2V5OmZ1bmN0aW9uKHQpe3RoaXMuZm9jdXNlZEl0ZW0uY2xpY2soKSx0LmRldGFpbC5rZXlib2FyZEV2ZW50LnByZXZlbnREZWZhdWx0KCl9LGdldCBfaXNSVEwoKXtyZXR1cm4icnRsIj09PXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMpLmRpcmVjdGlvbn0sX29uTGVmdEtleTpmdW5jdGlvbih0KXt0aGlzLl9pc1JUTD90aGlzLl9mb2N1c05leHQoKTp0aGlzLl9mb2N1c1ByZXZpb3VzKCksdC5kZXRhaWwua2V5Ym9hcmRFdmVudC5wcmV2ZW50RGVmYXVsdCgpfSxfb25SaWdodEtleTpmdW5jdGlvbih0KXt0aGlzLl9pc1JUTD90aGlzLl9mb2N1c1ByZXZpb3VzKCk6dGhpcy5fZm9jdXNOZXh0KCksdC5kZXRhaWwua2V5Ym9hcmRFdmVudC5wcmV2ZW50RGVmYXVsdCgpfSxfb25LZXlkb3duOmZ1bmN0aW9uKHQpe3RoaXMua2V5Ym9hcmRFdmVudE1hdGNoZXNLZXlzKHQsInVwIGRvd24gbGVmdCByaWdodCBlc2MiKXx8dGhpcy5fZm9jdXNXaXRoS2V5Ym9hcmRFdmVudCh0KX19LG5zPVtaYSxlc107Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpJcih7X3RlbXBsYXRlOl9lYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CgogICAgICA6aG9zdCA6OnNsb3R0ZWQoKikgewogICAgICAgIHBhZGRpbmc6IHZhcigtLXBhcGVyLXJhZGlvLWdyb3VwLWl0ZW0tcGFkZGluZywgMTJweCk7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHNsb3Q+PC9zbG90PgpgLGlzOiJwYXBlci1yYWRpby1ncm91cCIsYmVoYXZpb3JzOltuc10saG9zdEF0dHJpYnV0ZXM6e3JvbGU6InJhZGlvZ3JvdXAifSxwcm9wZXJ0aWVzOnthdHRyRm9yU2VsZWN0ZWQ6e3R5cGU6U3RyaW5nLHZhbHVlOiJuYW1lIn0sc2VsZWN0ZWRBdHRyaWJ1dGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJjaGVja2VkIn0sc2VsZWN0YWJsZTp7dHlwZTpTdHJpbmcsdmFsdWU6InBhcGVyLXJhZGlvLWJ1dHRvbiJ9LGFsbG93RW1wdHlTZWxlY3Rpb246e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX19LHNlbGVjdDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl92YWx1ZVRvSXRlbSh0KTtpZighZXx8IWUuaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpKXtpZih0aGlzLnNlbGVjdGVkKXt2YXIgbj10aGlzLl92YWx1ZVRvSXRlbSh0aGlzLnNlbGVjdGVkKTtpZih0aGlzLnNlbGVjdGVkPT10KXtpZighdGhpcy5hbGxvd0VtcHR5U2VsZWN0aW9uKXJldHVybiB2b2lkKG4mJihuLmNoZWNrZWQ9ITApKTt0PSIifW4mJihuLmNoZWNrZWQ9ITEpfVVvLnNlbGVjdC5hcHBseSh0aGlzLFt0XSksdGhpcy5maXJlKCJwYXBlci1yYWRpby1ncm91cC1jaGFuZ2VkIil9fSxfYWN0aXZhdGVGb2N1c2VkSXRlbTpmdW5jdGlvbigpe3RoaXMuX2l0ZW1BY3RpdmF0ZSh0aGlzLl92YWx1ZUZvckl0ZW0odGhpcy5mb2N1c2VkSXRlbSksdGhpcy5mb2N1c2VkSXRlbSl9LF9vblVwS2V5OmZ1bmN0aW9uKHQpe3RoaXMuX2ZvY3VzUHJldmlvdXMoKSx0LnByZXZlbnREZWZhdWx0KCksdGhpcy5fYWN0aXZhdGVGb2N1c2VkSXRlbSgpfSxfb25Eb3duS2V5OmZ1bmN0aW9uKHQpe3RoaXMuX2ZvY3VzTmV4dCgpLHQucHJldmVudERlZmF1bHQoKSx0aGlzLl9hY3RpdmF0ZUZvY3VzZWRJdGVtKCl9LF9vbkxlZnRLZXk6ZnVuY3Rpb24odCl7ZXMuX29uTGVmdEtleS5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5fYWN0aXZhdGVGb2N1c2VkSXRlbSgpfSxfb25SaWdodEtleTpmdW5jdGlvbih0KXtlcy5fb25SaWdodEtleS5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5fYWN0aXZhdGVGb2N1c2VkSXRlbSgpfX0pOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KY29uc3QgaXM9X2VgCiAgPHN0eWxlPgogICAgOmhvc3QgewogICAgICBAYXBwbHkgLS1sYXlvdXQ7CiAgICAgIEBhcHBseSAtLWxheW91dC1qdXN0aWZpZWQ7CiAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CiAgICAgIHdpZHRoOiAyMDBweDsKICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCk7CiAgICAgIC0tcGFwZXItcHJvZ3Jlc3MtYWN0aXZlLWNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXItYWN0aXZlLWNvbG9yLCB2YXIoLS1nb29nbGUtYmx1ZS03MDApKTsKICAgICAgLS1wYXBlci1wcm9ncmVzcy1zZWNvbmRhcnktY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1zZWNvbmRhcnktY29sb3IsIHZhcigtLWdvb2dsZS1ibHVlLTMwMCkpOwogICAgICAtLXBhcGVyLXByb2dyZXNzLWRpc2FibGVkLWFjdGl2ZS1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLWRpc2FibGVkLWFjdGl2ZS1jb2xvciwgdmFyKC0tcGFwZXItZ3JleS00MDApKTsKICAgICAgLS1wYXBlci1wcm9ncmVzcy1kaXNhYmxlZC1zZWNvbmRhcnktY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1kaXNhYmxlZC1zZWNvbmRhcnktY29sb3IsIHZhcigtLXBhcGVyLWdyZXktNDAwKSk7CiAgICAgIC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0OiB2YXIoLS1wYXBlci1zbGlkZXItaGVpZ2h0LCAycHgpOwogICAgfQoKICAgIC8qIGZvY3VzIHNob3dzIHRoZSByaXBwbGUgKi8KICAgIDpob3N0KDpmb2N1cykgewogICAgICBvdXRsaW5lOiBub25lOwogICAgfQoKICAgIC8qKgogICAgICAqIE5PVEUoa2VhbnVsZWUpOiBUaG91Z2ggOmhvc3QtY29udGV4dCBpcyBub3QgdW5pdmVyc2FsbHkgc3VwcG9ydGVkLCBzb21lIHBhZ2VzCiAgICAgICogc3RpbGwgcmVseSBvbiBwYXBlci1zbGlkZXIgYmVpbmcgZmxpcHBlZCB3aGVuIGRpcj0icnRsIiBpcyBzZXQgb24gYm9keS4gRm9yIGZ1bGwKICAgICAgKiBjb21wYXRpYmlsaXR5LCBkaXI9InJ0bCIgbXVzdCBiZSBleHBsaWNpdGx5IHNldCBvbiBwYXBlci1zbGlkZXIuCiAgICAgICovCiAgICA6ZGlyKHJ0bCkgI3NsaWRlckNvbnRhaW5lciB7CiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLTEpOwogICAgICB0cmFuc2Zvcm06IHNjYWxlWCgtMSk7CiAgICB9CgogICAgLyoqCiAgICAgICogTk9URShrZWFudWxlZSk6IFRoaXMgaXMgc2VwYXJhdGUgZnJvbSB0aGUgcnVsZSBhYm92ZSBiZWNhdXNlIDpob3N0LWNvbnRleHQgbWF5CiAgICAgICogbm90IGJlIHJlY29nbml6ZWQuCiAgICAgICovCiAgICA6aG9zdChbZGlyPSJydGwiXSkgI3NsaWRlckNvbnRhaW5lciB7CiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLTEpOwogICAgICB0cmFuc2Zvcm06IHNjYWxlWCgtMSk7CiAgICB9CgogICAgLyoqCiAgICAgICogTk9URShrZWFudWxlZSk6IE5lZWRlZCB0byBvdmVycmlkZSB0aGUgOmhvc3QtY29udGV4dCBydWxlICh3aGVyZSBzdXBwb3J0ZWQpCiAgICAgICogdG8gc3VwcG9ydCBMVFIgc2xpZGVycyBpbiBSVEwgcGFnZXMuCiAgICAgICovCiAgICA6aG9zdChbZGlyPSJsdHIiXSkgI3NsaWRlckNvbnRhaW5lciB7CiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoMSk7CiAgICAgIHRyYW5zZm9ybTogc2NhbGVYKDEpOwogICAgfQoKICAgICNzbGlkZXJDb250YWluZXIgewogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBoZWlnaHQ6IGNhbGMoMzBweCArIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItc2xpZGVyLWhlaWdodCkpOwogICAgICBtYXJnaW4tbGVmdDogY2FsYygxNXB4ICsgdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KS8yKTsKICAgICAgbWFyZ2luLXJpZ2h0OiBjYWxjKDE1cHggKyB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXNsaWRlci1oZWlnaHQpLzIpOwogICAgfQoKICAgICNzbGlkZXJDb250YWluZXI6Zm9jdXMgewogICAgICBvdXRsaW5lOiAwOwogICAgfQoKICAgICNzbGlkZXJDb250YWluZXIuZWRpdGFibGUgewogICAgICBtYXJnaW4tdG9wOiAxMnB4OwogICAgICBtYXJnaW4tYm90dG9tOiAxMnB4OwogICAgfQoKICAgIC5iYXItY29udGFpbmVyIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB0b3A6IDA7CiAgICAgIGJvdHRvbTogMDsKICAgICAgbGVmdDogMDsKICAgICAgcmlnaHQ6IDA7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB9CgogICAgLnJpbmcgPiAuYmFyLWNvbnRhaW5lciB7CiAgICAgIGxlZnQ6IGNhbGMoNXB4ICsgdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KS8yKTsKICAgICAgdHJhbnNpdGlvbjogbGVmdCAwLjE4cyBlYXNlOwogICAgfQoKICAgIC5yaW5nLmV4cGFuZC5kcmFnZ2luZyA+IC5iYXItY29udGFpbmVyIHsKICAgICAgdHJhbnNpdGlvbjogbm9uZTsKICAgIH0KCiAgICAucmluZy5leHBhbmQ6bm90KC5waW4pID4gLmJhci1jb250YWluZXIgewogICAgICBsZWZ0OiBjYWxjKDhweCArIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItc2xpZGVyLWhlaWdodCkvMik7CiAgICB9CgogICAgI3NsaWRlckJhciB7CiAgICAgIHBhZGRpbmc6IDE1cHggMDsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1iYXItY29sb3IsIHRyYW5zcGFyZW50KTsKICAgICAgLS1wYXBlci1wcm9ncmVzcy1jb250YWluZXItY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1jb250YWluZXItY29sb3IsIHZhcigtLXBhcGVyLWdyZXktNDAwKSk7CiAgICAgIC0tcGFwZXItcHJvZ3Jlc3MtaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXNsaWRlci1oZWlnaHQpOwogICAgfQoKICAgIC5zbGlkZXItbWFya2VycyB7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgLyogc2xpZGVyLWtub2IgaXMgMzBweCArIHRoZSBzbGlkZXItaGVpZ2h0IHNvIHRoYXQgdGhlIG1hcmtlcnMgc2hvdWxkIHN0YXJ0IGF0IGEgb2Zmc2V0IG9mIDE1cHgqLwogICAgICB0b3A6IDE1cHg7CiAgICAgIGhlaWdodDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KTsKICAgICAgbGVmdDogMDsKICAgICAgcmlnaHQ6IC0xcHg7CiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICBAYXBwbHkgLS1sYXlvdXQtaG9yaXpvbnRhbDsKICAgIH0KCiAgICAuc2xpZGVyLW1hcmtlciB7CiAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4OwogICAgfQogICAgLnNsaWRlci1tYXJrZXJzOjphZnRlciwKICAgIC5zbGlkZXItbWFya2VyOjphZnRlciB7CiAgICAgIGNvbnRlbnQ6ICIiOwogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgbWFyZ2luLWxlZnQ6IC0xcHg7CiAgICAgIHdpZHRoOiAycHg7CiAgICAgIGhlaWdodDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KTsKICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXItbWFya2Vycy1jb2xvciwgIzAwMCk7CiAgICB9CgogICAgLnNsaWRlci1rbm9iIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICBsZWZ0OiAwOwogICAgICB0b3A6IDA7CiAgICAgIG1hcmdpbi1sZWZ0OiBjYWxjKC0xNXB4IC0gdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KS8yKTsKICAgICAgd2lkdGg6IGNhbGMoMzBweCArIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItc2xpZGVyLWhlaWdodCkpOwogICAgICBoZWlnaHQ6IGNhbGMoMzBweCArIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItc2xpZGVyLWhlaWdodCkpOwogICAgfQoKICAgIC50cmFuc2l0aW5nID4gLnNsaWRlci1rbm9iIHsKICAgICAgdHJhbnNpdGlvbjogbGVmdCAwLjA4cyBlYXNlOwogICAgfQoKICAgIC5zbGlkZXIta25vYjpmb2N1cyB7CiAgICAgIG91dGxpbmU6IG5vbmU7CiAgICB9CgogICAgLnNsaWRlci1rbm9iLmRyYWdnaW5nIHsKICAgICAgdHJhbnNpdGlvbjogbm9uZTsKICAgIH0KCiAgICAuc25hcHMgPiAuc2xpZGVyLWtub2IuZHJhZ2dpbmcgewogICAgICB0cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAwLjA4cyBlYXNlOwogICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4wOHMgZWFzZTsKICAgIH0KCiAgICAuc2xpZGVyLWtub2ItaW5uZXIgewogICAgICBtYXJnaW46IDEwcHg7CiAgICAgIHdpZHRoOiBjYWxjKDEwMCUgLSAyMHB4KTsKICAgICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAyMHB4KTsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLWtub2ItY29sb3IsIHZhcigtLWdvb2dsZS1ibHVlLTcwMCkpOwogICAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1wYXBlci1zbGlkZXIta25vYi1jb2xvciwgdmFyKC0tZ29vZ2xlLWJsdWUtNzAwKSk7CiAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKCiAgICAgIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKCiAgICAgIHRyYW5zaXRpb24tcHJvcGVydHk6IC13ZWJraXQtdHJhbnNmb3JtLCBiYWNrZ3JvdW5kLWNvbG9yLCBib3JkZXI7CiAgICAgIHRyYW5zaXRpb24tcHJvcGVydHk6IHRyYW5zZm9ybSwgYmFja2dyb3VuZC1jb2xvciwgYm9yZGVyOwogICAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjE4czsKICAgICAgdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IGVhc2U7CiAgICB9CgogICAgLmV4cGFuZDpub3QoLnBpbikgPiAuc2xpZGVyLWtub2IgPiAuc2xpZGVyLWtub2ItaW5uZXIgewogICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMS41KTsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjUpOwogICAgfQoKICAgIC5yaW5nID4gLnNsaWRlci1rbm9iID4gLnNsaWRlci1rbm9iLWlubmVyIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtY29sb3IsIHRyYW5zcGFyZW50KTsKICAgICAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtYm9yZGVyLWNvbG9yLCB2YXIoLS1wYXBlci1ncmV5LTQwMCkpOwogICAgfQoKICAgIC5zbGlkZXIta25vYi1pbm5lcjo6YmVmb3JlIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLXBpbi1jb2xvciwgdmFyKC0tZ29vZ2xlLWJsdWUtNzAwKSk7CiAgICB9CgogICAgLnBpbiA+IC5zbGlkZXIta25vYiA+IC5zbGlkZXIta25vYi1pbm5lcjo6YmVmb3JlIHsKICAgICAgY29udGVudDogIiI7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgdG9wOiAwOwogICAgICBsZWZ0OiA1MCU7CiAgICAgIG1hcmdpbi1sZWZ0OiAtMTNweDsKICAgICAgd2lkdGg6IDI2cHg7CiAgICAgIGhlaWdodDogMjZweDsKICAgICAgYm9yZGVyLXJhZGl1czogNTAlIDUwJSA1MCUgMDsKCiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTQ1ZGVnKSBzY2FsZSgwKSB0cmFuc2xhdGUoMCk7CiAgICAgIHRyYW5zZm9ybTogcm90YXRlKC00NWRlZykgc2NhbGUoMCkgdHJhbnNsYXRlKDApOwogICAgfQoKICAgIC5zbGlkZXIta25vYi1pbm5lcjo6YmVmb3JlLAogICAgLnNsaWRlci1rbm9iLWlubmVyOjphZnRlciB7CiAgICAgIHRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIC4xOHMgZWFzZSwgYmFja2dyb3VuZC1jb2xvciAuMThzIGVhc2U7CiAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAuMThzIGVhc2UsIGJhY2tncm91bmQtY29sb3IgLjE4cyBlYXNlOwogICAgfQoKICAgIC5waW4ucmluZyA+IC5zbGlkZXIta25vYiA+IC5zbGlkZXIta25vYi1pbm5lcjo6YmVmb3JlIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLXBpbi1zdGFydC1jb2xvciwgdmFyKC0tcGFwZXItZ3JleS00MDApKTsKICAgIH0KCiAgICAucGluLmV4cGFuZCA+IC5zbGlkZXIta25vYiA+IC5zbGlkZXIta25vYi1pbm5lcjo6YmVmb3JlIHsKICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgtNDVkZWcpIHNjYWxlKDEpIHRyYW5zbGF0ZSgxN3B4LCAtMTdweCk7CiAgICAgIHRyYW5zZm9ybTogcm90YXRlKC00NWRlZykgc2NhbGUoMSkgdHJhbnNsYXRlKDE3cHgsIC0xN3B4KTsKICAgIH0KCiAgICAucGluID4gLnNsaWRlci1rbm9iID4gLnNsaWRlci1rbm9iLWlubmVyOjphZnRlciB7CiAgICAgIGNvbnRlbnQ6IGF0dHIodmFsdWUpOwogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIHRvcDogMDsKICAgICAgbGVmdDogNTAlOwogICAgICBtYXJnaW4tbGVmdDogLTE2cHg7CiAgICAgIHdpZHRoOiAzMnB4OwogICAgICBoZWlnaHQ6IDI2cHg7CiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1mb250LWNvbG9yLCAjZmZmKTsKICAgICAgZm9udC1zaXplOiAxMHB4OwoKICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDApIHRyYW5zbGF0ZSgwKTsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwKSB0cmFuc2xhdGUoMCk7CiAgICB9CgogICAgLnBpbi5leHBhbmQgPiAuc2xpZGVyLWtub2IgPiAuc2xpZGVyLWtub2ItaW5uZXI6OmFmdGVyIHsKICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEpIHRyYW5zbGF0ZSgwLCAtMTdweCk7CiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSkgdHJhbnNsYXRlKDAsIC0xN3B4KTsKICAgIH0KCiAgICAvKiBwYXBlci1pbnB1dCAqLwogICAgLnNsaWRlci1pbnB1dCB7CiAgICAgIHdpZHRoOiA1MHB4OwogICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDogewogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBAYXBwbHkgLS1wYXBlci1zbGlkZXItaW5wdXQtY29udGFpbmVyLWlucHV0OwogICAgICB9OwogICAgICBAYXBwbHkgLS1wYXBlci1zbGlkZXItaW5wdXQ7CiAgICB9CgogICAgLyogZGlzYWJsZWQgc3RhdGUgKi8KICAgICNzbGlkZXJDb250YWluZXIuZGlzYWJsZWQgewogICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIH0KCiAgICAuZGlzYWJsZWQgPiAuc2xpZGVyLWtub2IgPiAuc2xpZGVyLWtub2ItaW5uZXIgewogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXItZGlzYWJsZWQta25vYi1jb2xvciwgdmFyKC0tcGFwZXItZ3JleS00MDApKTsKICAgICAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tcGFwZXItc2xpZGVyLWRpc2FibGVkLWtub2ItY29sb3IsIHZhcigtLXBhcGVyLWdyZXktNDAwKSk7CiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZTNkKDAuNzUsIDAuNzUsIDEpOwogICAgICB0cmFuc2Zvcm06IHNjYWxlM2QoMC43NSwgMC43NSwgMSk7CiAgICB9CgogICAgLmRpc2FibGVkLnJpbmcgPiAuc2xpZGVyLWtub2IgPiAuc2xpZGVyLWtub2ItaW5uZXIgewogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1jb2xvciwgdHJhbnNwYXJlbnQpOwogICAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1ib3JkZXItY29sb3IsIHZhcigtLXBhcGVyLWdyZXktNDAwKSk7CiAgICB9CgogICAgcGFwZXItcmlwcGxlIHsKICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1rbm9iLWNvbG9yLCB2YXIoLS1nb29nbGUtYmx1ZS03MDApKTsKICAgIH0KICA8L3N0eWxlPgoKICA8ZGl2IGlkPSJzbGlkZXJDb250YWluZXIiIGNsYXNzXCQ9IltbX2dldENsYXNzTmFtZXMoZGlzYWJsZWQsIHBpbiwgc25hcHMsIGltbWVkaWF0ZVZhbHVlLCBtaW4sIGV4cGFuZCwgZHJhZ2dpbmcsIHRyYW5zaXRpbmcsIGVkaXRhYmxlKV1dIj4KICAgIDxkaXYgY2xhc3M9ImJhci1jb250YWluZXIiPgogICAgICA8cGFwZXItcHJvZ3Jlc3MgZGlzYWJsZWRcJD0iW1tkaXNhYmxlZF1dIiBpZD0ic2xpZGVyQmFyIiBhcmlhLWhpZGRlbj0idHJ1ZSIgbWluPSJbW21pbl1dIiBtYXg9IltbbWF4XV0iIHN0ZXA9Iltbc3RlcF1dIiB2YWx1ZT0iW1tpbW1lZGlhdGVWYWx1ZV1dIiBzZWNvbmRhcnktcHJvZ3Jlc3M9Iltbc2Vjb25kYXJ5UHJvZ3Jlc3NdXSIgb24tZG93bj0iX2JhcmRvd24iIG9uLXVwPSJfcmVzZXRLbm9iIiBvbi10cmFjaz0iX2JhcnRyYWNrIiBvbi10YXA9Il9iYXJjbGljayI+CiAgICAgIDwvcGFwZXItcHJvZ3Jlc3M+CiAgICA8L2Rpdj4KCiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Iltbc25hcHNdXSI+CiAgICAgIDxkaXYgY2xhc3M9InNsaWRlci1tYXJrZXJzIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW21hcmtlcnNdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzbGlkZXItbWFya2VyIj48L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CgogICAgPGRpdiBpZD0ic2xpZGVyS25vYiIgY2xhc3M9InNsaWRlci1rbm9iIiBvbi1kb3duPSJfa25vYmRvd24iIG9uLXVwPSJfcmVzZXRLbm9iIiBvbi10cmFjaz0iX29uVHJhY2siIG9uLXRyYW5zaXRpb25lbmQ9Il9rbm9iVHJhbnNpdGlvbkVuZCI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2xpZGVyLWtub2ItaW5uZXIiIHZhbHVlXCQ9IltbaW1tZWRpYXRlVmFsdWVdXSI+PC9kaXY+CiAgICA8L2Rpdj4KICA8L2Rpdj4KCiAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2VkaXRhYmxlXV0iPgogICAgPHBhcGVyLWlucHV0IGlkPSJpbnB1dCIgdHlwZT0ibnVtYmVyIiBzdGVwPSJbW3N0ZXBdXSIgbWluPSJbW21pbl1dIiBtYXg9IltbbWF4XV0iIGNsYXNzPSJzbGlkZXItaW5wdXQiIGRpc2FibGVkXCQ9IltbZGlzYWJsZWRdXSIgdmFsdWU9IltbaW1tZWRpYXRlVmFsdWVdXSIgb24tY2hhbmdlPSJfY2hhbmdlVmFsdWUiIG9uLWtleWRvd249Il9pbnB1dEtleURvd24iIG5vLWxhYmVsLWZsb2F0PgogICAgPC9wYXBlci1pbnB1dD4KICA8L3RlbXBsYXRlPgpgO2lzLnNldEF0dHJpYnV0ZSgic3RyaXAtd2hpdGVzcGFjZSIsIiIpLElyKHtfdGVtcGxhdGU6aXMsaXM6InBhcGVyLXNsaWRlciIsYmVoYXZpb3JzOltSbyxpYSxsYSxRYV0scHJvcGVydGllczp7dmFsdWU6e3R5cGU6TnVtYmVyLHZhbHVlOjB9LHNuYXBzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwfSxwaW46e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITB9LHNlY29uZGFyeVByb2dyZXNzOnt0eXBlOk51bWJlcix2YWx1ZTowLG5vdGlmeTohMCxvYnNlcnZlcjoiX3NlY29uZGFyeVByb2dyZXNzQ2hhbmdlZCJ9LGVkaXRhYmxlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGltbWVkaWF0ZVZhbHVlOnt0eXBlOk51bWJlcix2YWx1ZTowLHJlYWRPbmx5OiEwLG5vdGlmeTohMH0sbWF4TWFya2Vyczp7dHlwZTpOdW1iZXIsdmFsdWU6MCxub3RpZnk6ITB9LGV4cGFuZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlYWRPbmx5OiEwfSxpZ25vcmVCYXJUb3VjaDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxkcmFnZ2luZzp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlYWRPbmx5OiEwLG5vdGlmeTohMH0sdHJhbnNpdGluZzp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlYWRPbmx5OiEwfSxtYXJrZXJzOnt0eXBlOkFycmF5LHJlYWRPbmx5OiEwLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuW119fX0sb2JzZXJ2ZXJzOlsiX3VwZGF0ZUtub2IodmFsdWUsIG1pbiwgbWF4LCBzbmFwcywgc3RlcCkiLCJfdmFsdWVDaGFuZ2VkKHZhbHVlKSIsIl9pbW1lZGlhdGVWYWx1ZUNoYW5nZWQoaW1tZWRpYXRlVmFsdWUpIiwiX3VwZGF0ZU1hcmtlcnMobWF4TWFya2VycywgbWluLCBtYXgsIHNuYXBzKSJdLGhvc3RBdHRyaWJ1dGVzOntyb2xlOiJzbGlkZXIiLHRhYmluZGV4OjB9LGtleUJpbmRpbmdzOntsZWZ0OiJfbGVmdEtleSIscmlnaHQ6Il9yaWdodEtleSIsImRvd24gcGFnZWRvd24gaG9tZSI6Il9kZWNyZW1lbnRLZXkiLCJ1cCBwYWdldXAgZW5kIjoiX2luY3JlbWVudEtleSJ9LHJlYWR5OmZ1bmN0aW9uKCl7dGhpcy5pZ25vcmVCYXJUb3VjaCYmcmkodGhpcy4kLnNsaWRlckJhciwiYXV0byIpfSxpbmNyZW1lbnQ6ZnVuY3Rpb24oKXt0aGlzLnZhbHVlPXRoaXMuX2NsYW1wVmFsdWUodGhpcy52YWx1ZSt0aGlzLnN0ZXApfSxkZWNyZW1lbnQ6ZnVuY3Rpb24oKXt0aGlzLnZhbHVlPXRoaXMuX2NsYW1wVmFsdWUodGhpcy52YWx1ZS10aGlzLnN0ZXApfSxfdXBkYXRlS25vYjpmdW5jdGlvbih0LGUsbixpLHIpe3RoaXMuc2V0QXR0cmlidXRlKCJhcmlhLXZhbHVlbWluIixlKSx0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS12YWx1ZW1heCIsbiksdGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtdmFsdWVub3ciLHQpLHRoaXMuX3Bvc2l0aW9uS25vYigxMDAqdGhpcy5fY2FsY1JhdGlvKHQpKX0sX3ZhbHVlQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuZmlyZSgidmFsdWUtY2hhbmdlIix7Y29tcG9zZWQ6ITB9KX0sX2ltbWVkaWF0ZVZhbHVlQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuZHJhZ2dpbmc/dGhpcy5maXJlKCJpbW1lZGlhdGUtdmFsdWUtY2hhbmdlIix7Y29tcG9zZWQ6ITB9KTp0aGlzLnZhbHVlPXRoaXMuaW1tZWRpYXRlVmFsdWV9LF9zZWNvbmRhcnlQcm9ncmVzc0NoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLnNlY29uZGFyeVByb2dyZXNzPXRoaXMuX2NsYW1wVmFsdWUodGhpcy5zZWNvbmRhcnlQcm9ncmVzcyl9LF9leHBhbmRLbm9iOmZ1bmN0aW9uKCl7dGhpcy5fc2V0RXhwYW5kKCEwKX0sX3Jlc2V0S25vYjpmdW5jdGlvbigpe3RoaXMuY2FuY2VsRGVib3VuY2VyKCJleHBhbmRLbm9iIiksdGhpcy5fc2V0RXhwYW5kKCExKX0sX3Bvc2l0aW9uS25vYjpmdW5jdGlvbih0KXt0aGlzLl9zZXRJbW1lZGlhdGVWYWx1ZSh0aGlzLl9jYWxjU3RlcCh0aGlzLl9jYWxjS25vYlBvc2l0aW9uKHQpKSksdGhpcy5fc2V0UmF0aW8oMTAwKnRoaXMuX2NhbGNSYXRpbyh0aGlzLmltbWVkaWF0ZVZhbHVlKSksdGhpcy4kLnNsaWRlcktub2Iuc3R5bGUubGVmdD10aGlzLnJhdGlvKyIlIix0aGlzLmRyYWdnaW5nJiYodGhpcy5fa25vYnN0YXJ0eD10aGlzLnJhdGlvKnRoaXMuX3cvMTAwLHRoaXMudHJhbnNsYXRlM2QoMCwwLDAsdGhpcy4kLnNsaWRlcktub2IpKX0sX2NhbGNLbm9iUG9zaXRpb246ZnVuY3Rpb24odCl7cmV0dXJuKHRoaXMubWF4LXRoaXMubWluKSp0LzEwMCt0aGlzLm1pbn0sX29uVHJhY2s6ZnVuY3Rpb24odCl7c3dpdGNoKHQuc3RvcFByb3BhZ2F0aW9uKCksdC5kZXRhaWwuc3RhdGUpe2Nhc2Uic3RhcnQiOnRoaXMuX3RyYWNrU3RhcnQodCk7YnJlYWs7Y2FzZSJ0cmFjayI6dGhpcy5fdHJhY2tYKHQpO2JyZWFrO2Nhc2UiZW5kIjp0aGlzLl90cmFja0VuZCgpfX0sX3RyYWNrU3RhcnQ6ZnVuY3Rpb24odCl7dGhpcy5fc2V0VHJhbnNpdGluZyghMSksdGhpcy5fdz10aGlzLiQuc2xpZGVyQmFyLm9mZnNldFdpZHRoLHRoaXMuX3g9dGhpcy5yYXRpbyp0aGlzLl93LzEwMCx0aGlzLl9zdGFydHg9dGhpcy5feCx0aGlzLl9rbm9ic3RhcnR4PXRoaXMuX3N0YXJ0eCx0aGlzLl9taW54PS10aGlzLl9zdGFydHgsdGhpcy5fbWF4eD10aGlzLl93LXRoaXMuX3N0YXJ0eCx0aGlzLiQuc2xpZGVyS25vYi5jbGFzc0xpc3QuYWRkKCJkcmFnZ2luZyIpLHRoaXMuX3NldERyYWdnaW5nKCEwKX0sX3RyYWNrWDpmdW5jdGlvbih0KXt0aGlzLmRyYWdnaW5nfHx0aGlzLl90cmFja1N0YXJ0KHQpO3ZhciBlPU1hdGgubWluKHRoaXMuX21heHgsTWF0aC5tYXgodGhpcy5fbWlueCx0LmRldGFpbC5keCoodGhpcy5faXNSVEw/LTE6MSkpKTt0aGlzLl94PXRoaXMuX3N0YXJ0eCtlO3ZhciBuPXRoaXMuX2NhbGNTdGVwKHRoaXMuX2NhbGNLbm9iUG9zaXRpb24odGhpcy5feC90aGlzLl93KjEwMCkpO3RoaXMuX3NldEltbWVkaWF0ZVZhbHVlKG4pO3ZhciBpPXRoaXMuX2NhbGNSYXRpbyh0aGlzLmltbWVkaWF0ZVZhbHVlKSp0aGlzLl93LXRoaXMuX2tub2JzdGFydHg7dGhpcy50cmFuc2xhdGUzZChpKyJweCIsMCwwLHRoaXMuJC5zbGlkZXJLbm9iKX0sX3RyYWNrRW5kOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy4kLnNsaWRlcktub2Iuc3R5bGU7dGhpcy4kLnNsaWRlcktub2IuY2xhc3NMaXN0LnJlbW92ZSgiZHJhZ2dpbmciKSx0aGlzLl9zZXREcmFnZ2luZyghMSksdGhpcy5fcmVzZXRLbm9iKCksdGhpcy52YWx1ZT10aGlzLmltbWVkaWF0ZVZhbHVlLHQudHJhbnNmb3JtPXQud2Via2l0VHJhbnNmb3JtPSIiLHRoaXMuZmlyZSgiY2hhbmdlIix7Y29tcG9zZWQ6ITB9KX0sX2tub2Jkb3duOmZ1bmN0aW9uKHQpe3RoaXMuX2V4cGFuZEtub2IoKSx0LnByZXZlbnREZWZhdWx0KCksdGhpcy5mb2N1cygpfSxfYmFydHJhY2s6ZnVuY3Rpb24odCl7dGhpcy5fYWxsb3dCYXJFdmVudCh0KSYmdGhpcy5fb25UcmFjayh0KX0sX2JhcmNsaWNrOmZ1bmN0aW9uKHQpe3RoaXMuX3c9dGhpcy4kLnNsaWRlckJhci5vZmZzZXRXaWR0aDt2YXIgZT10aGlzLiQuc2xpZGVyQmFyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49KHQuZGV0YWlsLngtZS5sZWZ0KS90aGlzLl93KjEwMDt0aGlzLl9pc1JUTCYmKG49MTAwLW4pO3ZhciBpPXRoaXMucmF0aW87dGhpcy5fc2V0VHJhbnNpdGluZyghMCksdGhpcy5fcG9zaXRpb25Lbm9iKG4pLGk9PT10aGlzLnJhdGlvJiZ0aGlzLl9zZXRUcmFuc2l0aW5nKCExKSx0aGlzLmFzeW5jKChmdW5jdGlvbigpe3RoaXMuZmlyZSgiY2hhbmdlIix7Y29tcG9zZWQ6ITB9KX0pKSx0LnByZXZlbnREZWZhdWx0KCksdGhpcy5mb2N1cygpfSxfYmFyZG93bjpmdW5jdGlvbih0KXt0aGlzLl9hbGxvd0JhckV2ZW50KHQpJiYodGhpcy5kZWJvdW5jZSgiZXhwYW5kS25vYiIsdGhpcy5fZXhwYW5kS25vYiw2MCksdGhpcy5fYmFyY2xpY2sodCkpfSxfa25vYlRyYW5zaXRpb25FbmQ6ZnVuY3Rpb24odCl7dC50YXJnZXQ9PT10aGlzLiQuc2xpZGVyS25vYiYmdGhpcy5fc2V0VHJhbnNpdGluZyghMSl9LF91cGRhdGVNYXJrZXJzOmZ1bmN0aW9uKHQsZSxuLGkpe2l8fHRoaXMuX3NldE1hcmtlcnMoW10pO3ZhciByPU1hdGgucm91bmQoKG4tZSkvdGhpcy5zdGVwKTtyPnQmJihyPXQpLChyPDB8fCFpc0Zpbml0ZShyKSkmJihyPTApLHRoaXMuX3NldE1hcmtlcnMobmV3IEFycmF5KHIpKX0sX21lcmdlQ2xhc3NlczpmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmtleXModCkuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pKS5qb2luKCIgIil9LF9nZXRDbGFzc05hbWVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21lcmdlQ2xhc3Nlcyh7ZGlzYWJsZWQ6dGhpcy5kaXNhYmxlZCxwaW46dGhpcy5waW4sc25hcHM6dGhpcy5zbmFwcyxyaW5nOnRoaXMuaW1tZWRpYXRlVmFsdWU8PXRoaXMubWluLGV4cGFuZDp0aGlzLmV4cGFuZCxkcmFnZ2luZzp0aGlzLmRyYWdnaW5nLHRyYW5zaXRpbmc6dGhpcy50cmFuc2l0aW5nLGVkaXRhYmxlOnRoaXMuZWRpdGFibGV9KX0sX2FsbG93QmFyRXZlbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIXRoaXMuaWdub3JlQmFyVG91Y2h8fHQuZGV0YWlsLnNvdXJjZUV2ZW50IGluc3RhbmNlb2YgTW91c2VFdmVudH0sZ2V0IF9pc1JUTCgpe3JldHVybiB2b2lkIDA9PT10aGlzLl9faXNSVEwmJih0aGlzLl9faXNSVEw9InJ0bCI9PT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzKS5kaXJlY3Rpb24pLHRoaXMuX19pc1JUTH0sX2xlZnRLZXk6ZnVuY3Rpb24odCl7dGhpcy5faXNSVEw/dGhpcy5faW5jcmVtZW50S2V5KHQpOnRoaXMuX2RlY3JlbWVudEtleSh0KX0sX3JpZ2h0S2V5OmZ1bmN0aW9uKHQpe3RoaXMuX2lzUlRMP3RoaXMuX2RlY3JlbWVudEtleSh0KTp0aGlzLl9pbmNyZW1lbnRLZXkodCl9LF9pbmNyZW1lbnRLZXk6ZnVuY3Rpb24odCl7dGhpcy5kaXNhYmxlZHx8KCJlbmQiPT09dC5kZXRhaWwua2V5P3RoaXMudmFsdWU9dGhpcy5tYXg6dGhpcy5pbmNyZW1lbnQoKSx0aGlzLmZpcmUoImNoYW5nZSIpLHQucHJldmVudERlZmF1bHQoKSl9LF9kZWNyZW1lbnRLZXk6ZnVuY3Rpb24odCl7dGhpcy5kaXNhYmxlZHx8KCJob21lIj09PXQuZGV0YWlsLmtleT90aGlzLnZhbHVlPXRoaXMubWluOnRoaXMuZGVjcmVtZW50KCksdGhpcy5maXJlKCJjaGFuZ2UiKSx0LnByZXZlbnREZWZhdWx0KCkpfSxfY2hhbmdlVmFsdWU6ZnVuY3Rpb24odCl7dGhpcy52YWx1ZT10LnRhcmdldC52YWx1ZSx0aGlzLmZpcmUoImNoYW5nZSIse2NvbXBvc2VkOiEwfSl9LF9pbnB1dEtleURvd246ZnVuY3Rpb24odCl7dC5zdG9wUHJvcGFnYXRpb24oKX0sX2NyZWF0ZVJpcHBsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yaXBwbGVDb250YWluZXI9dGhpcy4kLnNsaWRlcktub2Isc2EuX2NyZWF0ZVJpcHBsZS5jYWxsKHRoaXMpfSxfZm9jdXNlZENoYW5nZWQ6ZnVuY3Rpb24odCl7dCYmdGhpcy5lbnN1cmVSaXBwbGUoKSx0aGlzLmhhc1JpcHBsZSgpJiYodGhpcy5fcmlwcGxlLnN0eWxlLmRpc3BsYXk9dD8iIjoibm9uZSIsdGhpcy5fcmlwcGxlLmhvbGREb3duPXQpfX0pOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KY29uc3QgcnM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtycy5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZGlzcGxheTogbm9uZTsiKSxycy5pbm5lckhUTUw9Ijxkb20tbW9kdWxlIGlkPVwicGFwZXItc3Bpbm5lci1zdHlsZXNcIj5cbiAgPHRlbXBsYXRlPlxuICAgIDxzdHlsZT5cbiAgICAgIC8qXG4gICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4gICAgICAvKiBTVFlMRVMgRk9SIFRIRSBTUElOTkVSICovXG4gICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgICAgIC8qXG4gICAgICAgKiBDb25zdGFudHM6XG4gICAgICAgKiAgICAgIEFSQ1NJWkUgICAgID0gMjcwIGRlZ3JlZXMgKGFtb3VudCBvZiBjaXJjbGUgdGhlIGFyYyB0YWtlcyB1cClcbiAgICAgICAqICAgICAgQVJDVElNRSAgICAgPSAxMzMzbXMgKHRpbWUgaXQgdGFrZXMgdG8gZXhwYW5kIGFuZCBjb250cmFjdCBhcmMpXG4gICAgICAgKiAgICAgIEFSQ1NUQVJUUk9UID0gMjE2IGRlZ3JlZXMgKGhvdyBtdWNoIHRoZSBzdGFydCBsb2NhdGlvbiBvZiB0aGUgYXJjXG4gICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkIHJvdGF0ZSBlYWNoIHRpbWUsIDIxNiBnaXZlcyB1cyBhXG4gICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNSBwb2ludGVkIHN0YXIgc2hhcGUgKGl0J3MgMzYwLzUgKiAzKS5cbiAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgYSA3IHBvaW50ZWQgc3Rhciwgd2UgbWlnaHQgZG9cbiAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNjAvNyAqIDMgPSAxNTQuMjg2KVxuICAgICAgICogICAgICBTSFJJTktfVElNRSA9IDQwMG1zXG4gICAgICAgKi9cblxuICAgICAgOmhvc3Qge1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgd2lkdGg6IDI4cHg7XG4gICAgICAgIGhlaWdodDogMjhweDtcblxuICAgICAgICAvKiAzNjAgKiBBUkNUSU1FIC8gKEFSQ1NUQVJUUk9UICsgKDM2MC1BUkNTSVpFKSkgKi9cbiAgICAgICAgLS1wYXBlci1zcGlubmVyLWNvbnRhaW5lci1yb3RhdGlvbi1kdXJhdGlvbjogMTU2OG1zO1xuXG4gICAgICAgIC8qIEFSQ1RJTUUgKi9cbiAgICAgICAgLS1wYXBlci1zcGlubmVyLWV4cGFuZC1jb250cmFjdC1kdXJhdGlvbjogMTMzM21zO1xuXG4gICAgICAgIC8qIDQgKiBBUkNUSU1FICovXG4gICAgICAgIC0tcGFwZXItc3Bpbm5lci1mdWxsLWN5Y2xlLWR1cmF0aW9uOiA1MzMybXM7XG5cbiAgICAgICAgLyogU0hSSU5LX1RJTUUgKi9cbiAgICAgICAgLS1wYXBlci1zcGlubmVyLWNvb2xkb3duLWR1cmF0aW9uOiA0MDBtcztcbiAgICAgIH1cblxuICAgICAgI3NwaW5uZXJDb250YWluZXIge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuXG4gICAgICAgIC8qIFRoZSBzcGlubmVyIGRvZXMgbm90IGhhdmUgYW55IGNvbnRlbnRzIHRoYXQgd291bGQgaGF2ZSB0byBiZVxuICAgICAgICAgKiBmbGlwcGVkIGlmIHRoZSBkaXJlY3Rpb24gY2hhbmdlcy4gQWx3YXlzIHVzZSBsdHIgc28gdGhhdCB0aGVcbiAgICAgICAgICogc3R5bGUgd29ya3Mgb3V0IGNvcnJlY3RseSBpbiBib3RoIGNhc2VzLiAqL1xuICAgICAgICBkaXJlY3Rpb246IGx0cjtcbiAgICAgIH1cblxuICAgICAgI3NwaW5uZXJDb250YWluZXIuYWN0aXZlIHtcbiAgICAgICAgLXdlYmtpdC1hbmltYXRpb246IGNvbnRhaW5lci1yb3RhdGUgdmFyKC0tcGFwZXItc3Bpbm5lci1jb250YWluZXItcm90YXRpb24tZHVyYXRpb24pIGxpbmVhciBpbmZpbml0ZTtcbiAgICAgICAgYW5pbWF0aW9uOiBjb250YWluZXItcm90YXRlIHZhcigtLXBhcGVyLXNwaW5uZXItY29udGFpbmVyLXJvdGF0aW9uLWR1cmF0aW9uKSBsaW5lYXIgaW5maW5pdGU7XG4gICAgICB9XG5cbiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBjb250YWluZXItcm90YXRlIHtcbiAgICAgICAgdG8geyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDM2MGRlZykgfVxuICAgICAgfVxuXG4gICAgICBAa2V5ZnJhbWVzIGNvbnRhaW5lci1yb3RhdGUge1xuICAgICAgICB0byB7IHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZykgfVxuICAgICAgfVxuXG4gICAgICAuc3Bpbm5lci1sYXllciB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXNwaW5uZXItY29sb3IsIHZhcigtLWdvb2dsZS1ibHVlLTUwMCkpO1xuICAgICAgfVxuXG4gICAgICAubGF5ZXItMSB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1zcGlubmVyLWxheWVyLTEtY29sb3IsIHZhcigtLWdvb2dsZS1ibHVlLTUwMCkpO1xuICAgICAgfVxuXG4gICAgICAubGF5ZXItMiB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1zcGlubmVyLWxheWVyLTItY29sb3IsIHZhcigtLWdvb2dsZS1yZWQtNTAwKSk7XG4gICAgICB9XG5cbiAgICAgIC5sYXllci0zIHtcbiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXNwaW5uZXItbGF5ZXItMy1jb2xvciwgdmFyKC0tZ29vZ2xlLXllbGxvdy01MDApKTtcbiAgICAgIH1cblxuICAgICAgLmxheWVyLTQge1xuICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItc3Bpbm5lci1sYXllci00LWNvbG9yLCB2YXIoLS1nb29nbGUtZ3JlZW4tNTAwKSk7XG4gICAgICB9XG5cbiAgICAgIC8qKlxuICAgICAgICogSU1QT1JUQU5UIE5PVEUgQUJPVVQgQ1NTIEFOSU1BVElPTiBQUk9QRVJUSUVTIChrZWFudWxlZSk6XG4gICAgICAgKlxuICAgICAgICogaU9TIFNhZmFyaSAodGVzdGVkIG9uIGlPUyA4LjEpIGRvZXMgbm90IGhhbmRsZSBhbmltYXRpb24tZGVsYXkgdmVyeSB3ZWxsIC0gaXQgZG9lc24ndFxuICAgICAgICogZ3VhcmFudGVlIHRoYXQgdGhlIGFuaW1hdGlvbiB3aWxsIHN0YXJ0IF9leGFjdGx5XyBhZnRlciB0aGF0IHZhbHVlLiBTbyB3ZSBhdm9pZCB1c2luZ1xuICAgICAgICogYW5pbWF0aW9uLWRlbGF5IGFuZCBpbnN0ZWFkIHNldCBjdXN0b20ga2V5ZnJhbWVzIGZvciBlYWNoIGNvbG9yIChhcyBsYXllci0ydW5kYW50IGFzIGl0XG4gICAgICAgKiBzZWVtcykuXG4gICAgICAgKi9cbiAgICAgIC5hY3RpdmUgLnNwaW5uZXItbGF5ZXIge1xuICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGU7XG4gICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1wYXBlci1zcGlubmVyLWZ1bGwtY3ljbGUtZHVyYXRpb24pO1xuICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKTtcbiAgICAgICAgLXdlYmtpdC1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiBpbmZpbml0ZTtcbiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGZpbGwtdW5maWxsLXJvdGF0ZTtcbiAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1wYXBlci1zcGlubmVyLWZ1bGwtY3ljbGUtZHVyYXRpb24pO1xuICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSk7XG4gICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IGluZmluaXRlO1xuICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgfVxuXG4gICAgICAuYWN0aXZlIC5zcGlubmVyLWxheWVyLmxheWVyLTEge1xuICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGUsIGxheWVyLTEtZmFkZS1pbi1vdXQ7XG4gICAgICAgIGFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGUsIGxheWVyLTEtZmFkZS1pbi1vdXQ7XG4gICAgICB9XG5cbiAgICAgIC5hY3RpdmUgLnNwaW5uZXItbGF5ZXIubGF5ZXItMiB7XG4gICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLW5hbWU6IGZpbGwtdW5maWxsLXJvdGF0ZSwgbGF5ZXItMi1mYWRlLWluLW91dDtcbiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGZpbGwtdW5maWxsLXJvdGF0ZSwgbGF5ZXItMi1mYWRlLWluLW91dDtcbiAgICAgIH1cblxuICAgICAgLmFjdGl2ZSAuc3Bpbm5lci1sYXllci5sYXllci0zIHtcbiAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tbmFtZTogZmlsbC11bmZpbGwtcm90YXRlLCBsYXllci0zLWZhZGUtaW4tb3V0O1xuICAgICAgICBhbmltYXRpb24tbmFtZTogZmlsbC11bmZpbGwtcm90YXRlLCBsYXllci0zLWZhZGUtaW4tb3V0O1xuICAgICAgfVxuXG4gICAgICAuYWN0aXZlIC5zcGlubmVyLWxheWVyLmxheWVyLTQge1xuICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGUsIGxheWVyLTQtZmFkZS1pbi1vdXQ7XG4gICAgICAgIGFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGUsIGxheWVyLTQtZmFkZS1pbi1vdXQ7XG4gICAgICB9XG5cbiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBmaWxsLXVuZmlsbC1yb3RhdGUge1xuICAgICAgICAxMi41JSB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMTM1ZGVnKSB9IC8qIDAuNSAqIEFSQ1NJWkUgKi9cbiAgICAgICAgMjUlICAgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDI3MGRlZykgfSAvKiAxICAgKiBBUkNTSVpFICovXG4gICAgICAgIDM3LjUlIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSg0MDVkZWcpIH0gLyogMS41ICogQVJDU0laRSAqL1xuICAgICAgICA1MCUgICB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoNTQwZGVnKSB9IC8qIDIgICAqIEFSQ1NJWkUgKi9cbiAgICAgICAgNjIuNSUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDY3NWRlZykgfSAvKiAyLjUgKiBBUkNTSVpFICovXG4gICAgICAgIDc1JSAgIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSg4MTBkZWcpIH0gLyogMyAgICogQVJDU0laRSAqL1xuICAgICAgICA4Ny41JSB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoOTQ1ZGVnKSB9IC8qIDMuNSAqIEFSQ1NJWkUgKi9cbiAgICAgICAgdG8gICAgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDEwODBkZWcpIH0gLyogNCAgICogQVJDU0laRSAqL1xuICAgICAgfVxuXG4gICAgICBAa2V5ZnJhbWVzIGZpbGwtdW5maWxsLXJvdGF0ZSB7XG4gICAgICAgIDEyLjUlIHsgdHJhbnNmb3JtOiByb3RhdGUoMTM1ZGVnKSB9IC8qIDAuNSAqIEFSQ1NJWkUgKi9cbiAgICAgICAgMjUlICAgeyB0cmFuc2Zvcm06IHJvdGF0ZSgyNzBkZWcpIH0gLyogMSAgICogQVJDU0laRSAqL1xuICAgICAgICAzNy41JSB7IHRyYW5zZm9ybTogcm90YXRlKDQwNWRlZykgfSAvKiAxLjUgKiBBUkNTSVpFICovXG4gICAgICAgIDUwJSAgIHsgdHJhbnNmb3JtOiByb3RhdGUoNTQwZGVnKSB9IC8qIDIgICAqIEFSQ1NJWkUgKi9cbiAgICAgICAgNjIuNSUgeyB0cmFuc2Zvcm06IHJvdGF0ZSg2NzVkZWcpIH0gLyogMi41ICogQVJDU0laRSAqL1xuICAgICAgICA3NSUgICB7IHRyYW5zZm9ybTogcm90YXRlKDgxMGRlZykgfSAvKiAzICAgKiBBUkNTSVpFICovXG4gICAgICAgIDg3LjUlIHsgdHJhbnNmb3JtOiByb3RhdGUoOTQ1ZGVnKSB9IC8qIDMuNSAqIEFSQ1NJWkUgKi9cbiAgICAgICAgdG8gICAgeyB0cmFuc2Zvcm06IHJvdGF0ZSgxMDgwZGVnKSB9IC8qIDQgICAqIEFSQ1NJWkUgKi9cbiAgICAgIH1cblxuICAgICAgQC13ZWJraXQta2V5ZnJhbWVzIGxheWVyLTEtZmFkZS1pbi1vdXQge1xuICAgICAgICAwJSB7IG9wYWNpdHk6IDEgfVxuICAgICAgICAyNSUgeyBvcGFjaXR5OiAxIH1cbiAgICAgICAgMjYlIHsgb3BhY2l0eTogMCB9XG4gICAgICAgIDg5JSB7IG9wYWNpdHk6IDAgfVxuICAgICAgICA5MCUgeyBvcGFjaXR5OiAxIH1cbiAgICAgICAgdG8geyBvcGFjaXR5OiAxIH1cbiAgICAgIH1cblxuICAgICAgQGtleWZyYW1lcyBsYXllci0xLWZhZGUtaW4tb3V0IHtcbiAgICAgICAgMCUgeyBvcGFjaXR5OiAxIH1cbiAgICAgICAgMjUlIHsgb3BhY2l0eTogMSB9XG4gICAgICAgIDI2JSB7IG9wYWNpdHk6IDAgfVxuICAgICAgICA4OSUgeyBvcGFjaXR5OiAwIH1cbiAgICAgICAgOTAlIHsgb3BhY2l0eTogMSB9XG4gICAgICAgIHRvIHsgb3BhY2l0eTogMSB9XG4gICAgICB9XG5cbiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBsYXllci0yLWZhZGUtaW4tb3V0IHtcbiAgICAgICAgMCUgeyBvcGFjaXR5OiAwIH1cbiAgICAgICAgMTUlIHsgb3BhY2l0eTogMCB9XG4gICAgICAgIDI1JSB7IG9wYWNpdHk6IDEgfVxuICAgICAgICA1MCUgeyBvcGFjaXR5OiAxIH1cbiAgICAgICAgNTElIHsgb3BhY2l0eTogMCB9XG4gICAgICAgIHRvIHsgb3BhY2l0eTogMCB9XG4gICAgICB9XG5cbiAgICAgIEBrZXlmcmFtZXMgbGF5ZXItMi1mYWRlLWluLW91dCB7XG4gICAgICAgIDAlIHsgb3BhY2l0eTogMCB9XG4gICAgICAgIDE1JSB7IG9wYWNpdHk6IDAgfVxuICAgICAgICAyNSUgeyBvcGFjaXR5OiAxIH1cbiAgICAgICAgNTAlIHsgb3BhY2l0eTogMSB9XG4gICAgICAgIDUxJSB7IG9wYWNpdHk6IDAgfVxuICAgICAgICB0byB7IG9wYWNpdHk6IDAgfVxuICAgICAgfVxuXG4gICAgICBALXdlYmtpdC1rZXlmcmFtZXMgbGF5ZXItMy1mYWRlLWluLW91dCB7XG4gICAgICAgIDAlIHsgb3BhY2l0eTogMCB9XG4gICAgICAgIDQwJSB7IG9wYWNpdHk6IDAgfVxuICAgICAgICA1MCUgeyBvcGFjaXR5OiAxIH1cbiAgICAgICAgNzUlIHsgb3BhY2l0eTogMSB9XG4gICAgICAgIDc2JSB7IG9wYWNpdHk6IDAgfVxuICAgICAgICB0byB7IG9wYWNpdHk6IDAgfVxuICAgICAgfVxuXG4gICAgICBAa2V5ZnJhbWVzIGxheWVyLTMtZmFkZS1pbi1vdXQge1xuICAgICAgICAwJSB7IG9wYWNpdHk6IDAgfVxuICAgICAgICA0MCUgeyBvcGFjaXR5OiAwIH1cbiAgICAgICAgNTAlIHsgb3BhY2l0eTogMSB9XG4gICAgICAgIDc1JSB7IG9wYWNpdHk6IDEgfVxuICAgICAgICA3NiUgeyBvcGFjaXR5OiAwIH1cbiAgICAgICAgdG8geyBvcGFjaXR5OiAwIH1cbiAgICAgIH1cblxuICAgICAgQC13ZWJraXQta2V5ZnJhbWVzIGxheWVyLTQtZmFkZS1pbi1vdXQge1xuICAgICAgICAwJSB7IG9wYWNpdHk6IDAgfVxuICAgICAgICA2NSUgeyBvcGFjaXR5OiAwIH1cbiAgICAgICAgNzUlIHsgb3BhY2l0eTogMSB9XG4gICAgICAgIDkwJSB7IG9wYWNpdHk6IDEgfVxuICAgICAgICB0byB7IG9wYWNpdHk6IDAgfVxuICAgICAgfVxuXG4gICAgICBAa2V5ZnJhbWVzIGxheWVyLTQtZmFkZS1pbi1vdXQge1xuICAgICAgICAwJSB7IG9wYWNpdHk6IDAgfVxuICAgICAgICA2NSUgeyBvcGFjaXR5OiAwIH1cbiAgICAgICAgNzUlIHsgb3BhY2l0eTogMSB9XG4gICAgICAgIDkwJSB7IG9wYWNpdHk6IDEgfVxuICAgICAgICB0byB7IG9wYWNpdHk6IDAgfVxuICAgICAgfVxuXG4gICAgICAuY2lyY2xlLWNsaXBwZXIge1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgd2lkdGg6IDUwJTtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgfVxuXG4gICAgICAvKipcbiAgICAgICAqIFBhdGNoIHRoZSBnYXAgdGhhdCBhcHBlYXIgYmV0d2VlbiB0aGUgdHdvIGFkamFjZW50IGRpdi5jaXJjbGUtY2xpcHBlciB3aGlsZSB0aGVcbiAgICAgICAqIHNwaW5uZXIgaXMgcm90YXRpbmcgKGFwcGVhcnMgb24gQ2hyb21lIDUwLCBTYWZhcmkgOS4xLjEsIGFuZCBFZGdlKS5cbiAgICAgICAqL1xuICAgICAgLnNwaW5uZXItbGF5ZXI6OmFmdGVyIHtcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIGxlZnQ6IDQ1JTtcbiAgICAgICAgd2lkdGg6IDEwJTtcbiAgICAgICAgYm9yZGVyLXRvcC1zdHlsZTogc29saWQ7XG4gICAgICB9XG5cbiAgICAgIC5zcGlubmVyLWxheWVyOjphZnRlcixcbiAgICAgIC5jaXJjbGUtY2xpcHBlciAuY2lyY2xlIHtcbiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIGJvcmRlci13aWR0aDogdmFyKC0tcGFwZXItc3Bpbm5lci1zdHJva2Utd2lkdGgsIDNweCk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgIH1cblxuICAgICAgLmNpcmNsZS1jbGlwcGVyIC5jaXJjbGUge1xuICAgICAgICBib3R0b206IDA7XG4gICAgICAgIHdpZHRoOiAyMDAlO1xuICAgICAgICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICAgICAgICBib3JkZXItYm90dG9tLWNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xuICAgICAgfVxuXG4gICAgICAuY2lyY2xlLWNsaXBwZXIubGVmdCAuY2lyY2xlIHtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgYm9yZGVyLXJpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xuICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDEyOWRlZyk7XG4gICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDEyOWRlZyk7XG4gICAgICB9XG5cbiAgICAgIC5jaXJjbGUtY2xpcHBlci5yaWdodCAuY2lyY2xlIHtcbiAgICAgICAgbGVmdDogLTEwMCU7XG4gICAgICAgIGJvcmRlci1sZWZ0LWNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xuICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC0xMjlkZWcpO1xuICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtMTI5ZGVnKTtcbiAgICAgIH1cblxuICAgICAgLmFjdGl2ZSAuZ2FwLXBhdGNoOjphZnRlcixcbiAgICAgIC5hY3RpdmUgLmNpcmNsZS1jbGlwcGVyIC5jaXJjbGUge1xuICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItc3Bpbm5lci1leHBhbmQtY29udHJhY3QtZHVyYXRpb24pO1xuICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKTtcbiAgICAgICAgLXdlYmtpdC1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiBpbmZpbml0ZTtcbiAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1wYXBlci1zcGlubmVyLWV4cGFuZC1jb250cmFjdC1kdXJhdGlvbik7XG4gICAgICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKTtcbiAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogaW5maW5pdGU7XG4gICAgICB9XG5cbiAgICAgIC5hY3RpdmUgLmNpcmNsZS1jbGlwcGVyLmxlZnQgLmNpcmNsZSB7XG4gICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLW5hbWU6IGxlZnQtc3BpbjtcbiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGxlZnQtc3BpbjtcbiAgICAgIH1cblxuICAgICAgLmFjdGl2ZSAuY2lyY2xlLWNsaXBwZXIucmlnaHQgLmNpcmNsZSB7XG4gICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLW5hbWU6IHJpZ2h0LXNwaW47XG4gICAgICAgIGFuaW1hdGlvbi1uYW1lOiByaWdodC1zcGluO1xuICAgICAgfVxuXG4gICAgICBALXdlYmtpdC1rZXlmcmFtZXMgbGVmdC1zcGluIHtcbiAgICAgICAgMCUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDEzMGRlZykgfVxuICAgICAgICA1MCUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC01ZGVnKSB9XG4gICAgICAgIHRvIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgxMzBkZWcpIH1cbiAgICAgIH1cblxuICAgICAgQGtleWZyYW1lcyBsZWZ0LXNwaW4ge1xuICAgICAgICAwJSB7IHRyYW5zZm9ybTogcm90YXRlKDEzMGRlZykgfVxuICAgICAgICA1MCUgeyB0cmFuc2Zvcm06IHJvdGF0ZSgtNWRlZykgfVxuICAgICAgICB0byB7IHRyYW5zZm9ybTogcm90YXRlKDEzMGRlZykgfVxuICAgICAgfVxuXG4gICAgICBALXdlYmtpdC1rZXlmcmFtZXMgcmlnaHQtc3BpbiB7XG4gICAgICAgIDAlIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgtMTMwZGVnKSB9XG4gICAgICAgIDUwJSB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoNWRlZykgfVxuICAgICAgICB0byB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTEzMGRlZykgfVxuICAgICAgfVxuXG4gICAgICBAa2V5ZnJhbWVzIHJpZ2h0LXNwaW4ge1xuICAgICAgICAwJSB7IHRyYW5zZm9ybTogcm90YXRlKC0xMzBkZWcpIH1cbiAgICAgICAgNTAlIHsgdHJhbnNmb3JtOiByb3RhdGUoNWRlZykgfVxuICAgICAgICB0byB7IHRyYW5zZm9ybTogcm90YXRlKC0xMzBkZWcpIH1cbiAgICAgIH1cblxuICAgICAgI3NwaW5uZXJDb250YWluZXIuY29vbGRvd24ge1xuICAgICAgICAtd2Via2l0LWFuaW1hdGlvbjogY29udGFpbmVyLXJvdGF0ZSB2YXIoLS1wYXBlci1zcGlubmVyLWNvbnRhaW5lci1yb3RhdGlvbi1kdXJhdGlvbikgbGluZWFyIGluZmluaXRlLCBmYWRlLW91dCB2YXIoLS1wYXBlci1zcGlubmVyLWNvb2xkb3duLWR1cmF0aW9uKSBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSk7XG4gICAgICAgIGFuaW1hdGlvbjogY29udGFpbmVyLXJvdGF0ZSB2YXIoLS1wYXBlci1zcGlubmVyLWNvbnRhaW5lci1yb3RhdGlvbi1kdXJhdGlvbikgbGluZWFyIGluZmluaXRlLCBmYWRlLW91dCB2YXIoLS1wYXBlci1zcGlubmVyLWNvb2xkb3duLWR1cmF0aW9uKSBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSk7XG4gICAgICB9XG5cbiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBmYWRlLW91dCB7XG4gICAgICAgIDAlIHsgb3BhY2l0eTogMSB9XG4gICAgICAgIHRvIHsgb3BhY2l0eTogMCB9XG4gICAgICB9XG5cbiAgICAgIEBrZXlmcmFtZXMgZmFkZS1vdXQge1xuICAgICAgICAwJSB7IG9wYWNpdHk6IDEgfVxuICAgICAgICB0byB7IG9wYWNpdHk6IDAgfVxuICAgICAgfVxuICAgIDwvc3R5bGU+XG4gIDwvdGVtcGxhdGU+XG48L2RvbS1tb2R1bGU+Iixkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHJzLmNvbnRlbnQpOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KY29uc3Qgb3M9e3Byb3BlcnRpZXM6e2FjdGl2ZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCxvYnNlcnZlcjoiX19hY3RpdmVDaGFuZ2VkIn0sYWx0Ont0eXBlOlN0cmluZyx2YWx1ZToibG9hZGluZyIsb2JzZXJ2ZXI6Il9fYWx0Q2hhbmdlZCJ9LF9fY29vbGluZ0Rvd246e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX19LF9fY29tcHV0ZUNvbnRhaW5lckNsYXNzZXM6ZnVuY3Rpb24odCxlKXtyZXR1cm5bdHx8ZT8iYWN0aXZlIjoiIixlPyJjb29sZG93biI6IiJdLmpvaW4oIiAiKX0sX19hY3RpdmVDaGFuZ2VkOmZ1bmN0aW9uKHQsZSl7dGhpcy5fX3NldEFyaWFIaWRkZW4oIXQpLHRoaXMuX19jb29saW5nRG93bj0hdCYmZX0sX19hbHRDaGFuZ2VkOmZ1bmN0aW9uKHQpeyJsb2FkaW5nIj09PXQ/dGhpcy5hbHQ9dGhpcy5nZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiKXx8dDoodGhpcy5fX3NldEFyaWFIaWRkZW4oIiI9PT10KSx0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsdCkpfSxfX3NldEFyaWFIaWRkZW46ZnVuY3Rpb24odCl7dmFyIGU9ImFyaWEtaGlkZGVuIjt0P3RoaXMuc2V0QXR0cmlidXRlKGUsInRydWUiKTp0aGlzLnJlbW92ZUF0dHJpYnV0ZShlKX0sX19yZXNldDpmdW5jdGlvbigpe3RoaXMuYWN0aXZlPSExLHRoaXMuX19jb29saW5nRG93bj0hMX19LGFzPV9lYAogIDxzdHlsZSBpbmNsdWRlPSJwYXBlci1zcGlubmVyLXN0eWxlcyI+PC9zdHlsZT4KCiAgPGRpdiBpZD0ic3Bpbm5lckNvbnRhaW5lciIgY2xhc3MtbmFtZT0iW1tfX2NvbXB1dGVDb250YWluZXJDbGFzc2VzKGFjdGl2ZSwgX19jb29saW5nRG93bildXSIgb24tYW5pbWF0aW9uZW5kPSJfX3Jlc2V0IiBvbi13ZWJraXQtYW5pbWF0aW9uLWVuZD0iX19yZXNldCI+CiAgICA8ZGl2IGNsYXNzPSJzcGlubmVyLWxheWVyIj4KICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlLWNsaXBwZXIgbGVmdCI+CiAgICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZS1jbGlwcGVyIHJpZ2h0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUiPjwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2PgpgOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi9hcy5zZXRBdHRyaWJ1dGUoInN0cmlwLXdoaXRlc3BhY2UiLCIiKSxJcih7X3RlbXBsYXRlOmFzLGlzOiJwYXBlci1zcGlubmVyLWxpdGUiLGJlaGF2aW9yczpbb3NdfSk7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpjb25zdCBzcz1fZWAKICA8c3R5bGUgaW5jbHVkZT0icGFwZXItc3Bpbm5lci1zdHlsZXMiPjwvc3R5bGU+CgogIDxkaXYgaWQ9InNwaW5uZXJDb250YWluZXIiIGNsYXNzLW5hbWU9IltbX19jb21wdXRlQ29udGFpbmVyQ2xhc3NlcyhhY3RpdmUsIF9fY29vbGluZ0Rvd24pXV0iIG9uLWFuaW1hdGlvbmVuZD0iX19yZXNldCIgb24td2Via2l0LWFuaW1hdGlvbi1lbmQ9Il9fcmVzZXQiPgogICAgPGRpdiBjbGFzcz0ic3Bpbm5lci1sYXllciBsYXllci0xIj4KICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlLWNsaXBwZXIgbGVmdCI+CiAgICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZS1jbGlwcGVyIHJpZ2h0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUiPjwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9InNwaW5uZXItbGF5ZXIgbGF5ZXItMiI+CiAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZS1jbGlwcGVyIGxlZnQiPgogICAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZSI+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUtY2xpcHBlciByaWdodCI+CiAgICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJzcGlubmVyLWxheWVyIGxheWVyLTMiPgogICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUtY2xpcHBlciBsZWZ0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUiPjwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlLWNsaXBwZXIgcmlnaHQiPgogICAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZSI+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0ic3Bpbm5lci1sYXllciBsYXllci00Ij4KICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlLWNsaXBwZXIgbGVmdCI+CiAgICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZS1jbGlwcGVyIHJpZ2h0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUiPjwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2PgpgO3NzLnNldEF0dHJpYnV0ZSgic3RyaXAtd2hpdGVzcGFjZSIsIiIpLElyKHtfdGVtcGxhdGU6c3MsaXM6InBhcGVyLXNwaW5uZXIiLGJlaGF2aW9yczpbb3NdfSk7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCmNvbnN0IGxzPV9lYDxpcm9uLWljb25zZXQtc3ZnIG5hbWU9InBhcGVyLXRhYnMiIHNpemU9IjI0Ij4KPHN2Zz48ZGVmcz4KPGcgaWQ9ImNoZXZyb24tbGVmdCI+PHBhdGggZD0iTTE1LjQxIDcuNDFMMTQgNmwtNiA2IDYgNiAxLjQxLTEuNDFMMTAuODMgMTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2hldnJvbi1yaWdodCI+PHBhdGggZD0iTTEwIDZMOC41OSA3LjQxIDEzLjE3IDEybC00LjU4IDQuNTlMMTAgMThsNi02eiI+PC9wYXRoPjwvZz4KPC9kZWZzPjwvc3ZnPgo8L2lyb24taWNvbnNldC1zdmc+YDtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGxzLmNvbnRlbnQpLAovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dAogICAgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28KICAgIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpJcih7X3RlbXBsYXRlOl9lYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWlubGluZTsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXItanVzdGlmaWVkOwogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4LWF1dG87CgogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBwYWRkaW5nOiAwIDEycHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci10YWI7CiAgICAgIH0KCiAgICAgIDpob3N0KDpmb2N1cykgewogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtsaW5rXSkgewogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIC50YWItY29udGVudCB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWigwKTsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDApOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xcyBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDEsIDEpOwogICAgICAgIEBhcHBseSAtLWxheW91dC1ob3Jpem9udGFsOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXItY2VudGVyOwogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4LWF1dG87CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdGFiLWNvbnRlbnQ7CiAgICAgIH0KCiAgICAgIDpob3N0KDpub3QoLmlyb24tc2VsZWN0ZWQpKSA+IC50YWItY29udGVudCB7CiAgICAgICAgb3BhY2l0eTogMC44OwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10YWItY29udGVudC11bnNlbGVjdGVkOwogICAgICB9CgogICAgICA6aG9zdCg6Zm9jdXMpIC50YWItY29udGVudCB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICBmb250LXdlaWdodDogNzAwOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10YWItY29udGVudC1mb2N1c2VkOwogICAgICB9CgogICAgICBwYXBlci1yaXBwbGUgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10YWItaW5rLCB2YXIoLS1wYXBlci15ZWxsb3ctYTEwMCkpOwogICAgICB9CgogICAgICAudGFiLWNvbnRlbnQgPiA6OnNsb3R0ZWQoYSkgewogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4LWF1dG87CgogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGNsYXNzPSJ0YWItY29udGVudCI+CiAgICAgIDxzbG90Pjwvc2xvdD4KICAgIDwvZGl2PgpgLGlzOiJwYXBlci10YWIiLGJlaGF2aW9yczpbV28sWW8sWm9dLHByb3BlcnRpZXM6e2xpbms6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9fSxob3N0QXR0cmlidXRlczp7cm9sZToidGFiIn0sbGlzdGVuZXJzOntkb3duOiJfdXBkYXRlTm9pbmsiLHRhcDoiX29uVGFwIn0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVOb2luaygpfSxnZXQgX3BhcmVudE5vaW5rKCl7dmFyIHQ9cWkodGhpcykucGFyZW50Tm9kZTtyZXR1cm4hIXQmJiEhdC5ub2lua30sX3VwZGF0ZU5vaW5rOmZ1bmN0aW9uKCl7dGhpcy5ub2luaz0hIXRoaXMubm9pbmt8fCEhdGhpcy5fcGFyZW50Tm9pbmt9LF9vblRhcDpmdW5jdGlvbih0KXtpZih0aGlzLmxpbmspe3ZhciBlPXRoaXMucXVlcnlFZmZlY3RpdmVDaGlsZHJlbigiYSIpO2lmKCFlKXJldHVybjtpZih0LnRhcmdldD09PWUpcmV0dXJuO2UuY2xpY2soKX19fSksCi8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCklyKHtfdGVtcGxhdGU6X2VgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQ7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlcjsKCiAgICAgICAgaGVpZ2h0OiA0OHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKCiAgICAgICAgLyogTk9URTogQm90aCB2YWx1ZXMgYXJlIG5lZWRlZCwgc2luY2Ugc29tZSBwaG9uZXMgcmVxdWlyZSB0aGUgdmFsdWUgdG8gYmUgXGB0cmFuc3BhcmVudFxgLiAqLwogICAgICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKTsKICAgICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50OwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10YWJzOwogICAgICB9CgogICAgICA6aG9zdCg6ZGlyKHJ0bCkpIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtaG9yaXpvbnRhbC1yZXZlcnNlOwogICAgICB9CgogICAgICAjdGFic0NvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXgtYXV0bzsKICAgICAgICBAYXBwbHkgLS1wYXBlci10YWJzLWNvbnRhaW5lcjsKICAgICAgfQoKICAgICAgI3RhYnNDb250ZW50IHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgLW1vei1mbGV4LWJhc2lzOiBhdXRvOwogICAgICAgIC1tcy1mbGV4LWJhc2lzOiBhdXRvOwogICAgICAgIGZsZXgtYmFzaXM6IGF1dG87CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdGFicy1jb250ZW50OwogICAgICB9CgogICAgICAjdGFic0NvbnRlbnQuc2Nyb2xsYWJsZSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KCiAgICAgICN0YWJzQ29udGVudDpub3QoLnNjcm9sbGFibGUpLAogICAgICAjdGFic0NvbnRlbnQuc2Nyb2xsYWJsZS5maXQtY29udGFpbmVyIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtaG9yaXpvbnRhbDsKICAgICAgfQoKICAgICAgI3RhYnNDb250ZW50LnNjcm9sbGFibGUuZml0LWNvbnRhaW5lciB7CiAgICAgICAgbWluLXdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAjdGFic0NvbnRlbnQuc2Nyb2xsYWJsZS5maXQtY29udGFpbmVyID4gOjpzbG90dGVkKCopIHsKICAgICAgICAvKiBJRSAtIHByZXZlbnQgdGFicyBmcm9tIGNvbXByZXNzaW5nIHdoZW4gdGhleSBzaG91bGQgc2Nyb2xsLiAqLwogICAgICAgIC1tcy1mbGV4OiAxIDAgYXV0bzsKICAgICAgICAtd2Via2l0LWZsZXg6IDEgMCBhdXRvOwogICAgICAgIGZsZXg6IDEgMCBhdXRvOwogICAgICB9CgogICAgICAuaGlkZGVuIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CgogICAgICAubm90LXZpc2libGUgewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICB9CgogICAgICBwYXBlci1pY29uLWJ1dHRvbiB7CiAgICAgICAgd2lkdGg6IDQ4cHg7CiAgICAgICAgaGVpZ2h0OiA0OHB4OwogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgbWFyZ2luOiAwIDRweDsKICAgICAgfQoKICAgICAgI3NlbGVjdGlvbkJhciB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGhlaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgdmFyKC0tcGFwZXItdGFicy1zZWxlY3Rpb24tYmFyLWNvbG9yLCB2YXIoLS1wYXBlci15ZWxsb3ctYTEwMCkpOwogICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDApOwogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7CiAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IGxlZnQgY2VudGVyOwogICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IGxlZnQgY2VudGVyOwogICAgICAgICAgdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm07CiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10YWJzLXNlbGVjdGlvbi1iYXI7CiAgICAgIH0KCiAgICAgICNzZWxlY3Rpb25CYXIuYWxpZ24tYm90dG9tIHsKICAgICAgICB0b3A6IDA7CiAgICAgICAgYm90dG9tOiBhdXRvOwogICAgICB9CgogICAgICAjc2VsZWN0aW9uQmFyLmV4cGFuZCB7CiAgICAgICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMC4xNXM7CiAgICAgICAgdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQsIDAuMCwgMSwgMSk7CiAgICAgIH0KCiAgICAgICNzZWxlY3Rpb25CYXIuY29udHJhY3QgewogICAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMThzOwogICAgICAgIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4wLCAwLjAsIDAuMiwgMSk7CiAgICAgIH0KCiAgICAgICN0YWJzQ29udGVudCA+IDo6c2xvdHRlZCg6bm90KCNzZWxlY3Rpb25CYXIpKSB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxwYXBlci1pY29uLWJ1dHRvbiBpY29uPSJwYXBlci10YWJzOmNoZXZyb24tbGVmdCIgY2xhc3MkPSJbW19jb21wdXRlU2Nyb2xsQnV0dG9uQ2xhc3MoX2xlZnRIaWRkZW4sIHNjcm9sbGFibGUsIGhpZGVTY3JvbGxCdXR0b25zKV1dIiBvbi11cD0iX29uU2Nyb2xsQnV0dG9uVXAiIG9uLWRvd249Il9vbkxlZnRTY3JvbGxCdXR0b25Eb3duIiB0YWJpbmRleD0iLTEiPjwvcGFwZXItaWNvbi1idXR0b24+CgogICAgPGRpdiBpZD0idGFic0NvbnRhaW5lciIgb24tdHJhY2s9Il9zY3JvbGwiIG9uLWRvd249Il9kb3duIj4KICAgICAgPGRpdiBpZD0idGFic0NvbnRlbnQiIGNsYXNzJD0iW1tfY29tcHV0ZVRhYnNDb250ZW50Q2xhc3Moc2Nyb2xsYWJsZSwgZml0Q29udGFpbmVyKV1dIj4KICAgICAgICA8ZGl2IGlkPSJzZWxlY3Rpb25CYXIiIGNsYXNzJD0iW1tfY29tcHV0ZVNlbGVjdGlvbkJhckNsYXNzKG5vQmFyLCBhbGlnbkJvdHRvbSldXSIgb24tdHJhbnNpdGlvbmVuZD0iX29uQmFyVHJhbnNpdGlvbkVuZCI+PC9kaXY+CiAgICAgICAgPHNsb3Q+PC9zbG90PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxwYXBlci1pY29uLWJ1dHRvbiBpY29uPSJwYXBlci10YWJzOmNoZXZyb24tcmlnaHQiIGNsYXNzJD0iW1tfY29tcHV0ZVNjcm9sbEJ1dHRvbkNsYXNzKF9yaWdodEhpZGRlbiwgc2Nyb2xsYWJsZSwgaGlkZVNjcm9sbEJ1dHRvbnMpXV0iIG9uLXVwPSJfb25TY3JvbGxCdXR0b25VcCIgb24tZG93bj0iX29uUmlnaHRTY3JvbGxCdXR0b25Eb3duIiB0YWJpbmRleD0iLTEiPjwvcGFwZXItaWNvbi1idXR0b24+CmAsaXM6InBhcGVyLXRhYnMiLGJlaGF2aW9yczpbbW8sbnNdLHByb3BlcnRpZXM6e25vaW5rOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsb2JzZXJ2ZXI6Il9ub2lua0NoYW5nZWQifSxub0Jhcjp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxub1NsaWRlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHNjcm9sbGFibGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sZml0Q29udGFpbmVyOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGRpc2FibGVEcmFnOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGhpZGVTY3JvbGxCdXR0b25zOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGFsaWduQm90dG9tOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHNlbGVjdGFibGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJwYXBlci10YWIifSxhdXRvc2VsZWN0Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGF1dG9zZWxlY3REZWxheTp7dHlwZTpOdW1iZXIsdmFsdWU6MH0sX3N0ZXA6e3R5cGU6TnVtYmVyLHZhbHVlOjEwfSxfaG9sZERlbGF5Ont0eXBlOk51bWJlcix2YWx1ZToxfSxfbGVmdEhpZGRlbjp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfcmlnaHRIaWRkZW46e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX3ByZXZpb3VzVGFiOnt0eXBlOk9iamVjdH19LGhvc3RBdHRyaWJ1dGVzOntyb2xlOiJ0YWJsaXN0In0sbGlzdGVuZXJzOnsiaXJvbi1yZXNpemUiOiJfb25UYWJTaXppbmdDaGFuZ2VkIiwiaXJvbi1pdGVtcy1jaGFuZ2VkIjoiX29uVGFiU2l6aW5nQ2hhbmdlZCIsImlyb24tc2VsZWN0IjoiX29uSXJvblNlbGVjdCIsImlyb24tZGVzZWxlY3QiOiJfb25Jcm9uRGVzZWxlY3QifSxrZXlCaW5kaW5nczp7ImxlZnQ6a2V5dXAgcmlnaHQ6a2V5dXAiOiJfb25BcnJvd0tleXVwIn0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuX2hvbGRKb2I9bnVsbCx0aGlzLl9wZW5kaW5nQWN0aXZhdGlvbkl0ZW09dm9pZCAwLHRoaXMuX3BlbmRpbmdBY3RpdmF0aW9uVGltZW91dD12b2lkIDAsdGhpcy5fYmluZERlbGF5ZWRBY3RpdmF0aW9uSGFuZGxlcj10aGlzLl9kZWxheWVkQWN0aXZhdGlvbkhhbmRsZXIuYmluZCh0aGlzKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLHRoaXMuX29uQmx1ckNhcHR1cmUuYmluZCh0aGlzKSwhMCl9LHJlYWR5OmZ1bmN0aW9uKCl7dGhpcy5zZXRTY3JvbGxEaXJlY3Rpb24oInkiLHRoaXMuJC50YWJzQ29udGFpbmVyKX0sZGV0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9jYW5jZWxQZW5kaW5nQWN0aXZhdGlvbigpfSxfbm9pbmtDaGFuZ2VkOmZ1bmN0aW9uKHQpe3FpKHRoaXMpLnF1ZXJ5U2VsZWN0b3JBbGwoInBhcGVyLXRhYiIpLmZvckVhY2godD90aGlzLl9zZXROb2lua0F0dHJpYnV0ZTp0aGlzLl9yZW1vdmVOb2lua0F0dHJpYnV0ZSl9LF9zZXROb2lua0F0dHJpYnV0ZTpmdW5jdGlvbih0KXt0LnNldEF0dHJpYnV0ZSgibm9pbmsiLCIiKX0sX3JlbW92ZU5vaW5rQXR0cmlidXRlOmZ1bmN0aW9uKHQpe3QucmVtb3ZlQXR0cmlidXRlKCJub2luayIpfSxfY29tcHV0ZVNjcm9sbEJ1dHRvbkNsYXNzOmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4hZXx8bj8iaGlkZGVuIjp0PyJub3QtdmlzaWJsZSI6IiJ9LF9jb21wdXRlVGFic0NvbnRlbnRDbGFzczpmdW5jdGlvbih0LGUpe3JldHVybiB0PyJzY3JvbGxhYmxlIisoZT8iIGZpdC1jb250YWluZXIiOiIiKToiIGZpdC1jb250YWluZXIifSxfY29tcHV0ZVNlbGVjdGlvbkJhckNsYXNzOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ/ImhpZGRlbiI6ZT8iYWxpZ24tYm90dG9tIjoiIn0sX29uVGFiU2l6aW5nQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuZGVib3VuY2UoIl9vblRhYlNpemluZ0NoYW5nZWQiLChmdW5jdGlvbigpe3RoaXMuX3Njcm9sbCgpLHRoaXMuX3RhYkNoYW5nZWQodGhpcy5zZWxlY3RlZEl0ZW0pfSksMTApfSxfb25Jcm9uU2VsZWN0OmZ1bmN0aW9uKHQpe3RoaXMuX3RhYkNoYW5nZWQodC5kZXRhaWwuaXRlbSx0aGlzLl9wcmV2aW91c1RhYiksdGhpcy5fcHJldmlvdXNUYWI9dC5kZXRhaWwuaXRlbSx0aGlzLmNhbmNlbERlYm91bmNlcigidGFiLWNoYW5nZWQiKX0sX29uSXJvbkRlc2VsZWN0OmZ1bmN0aW9uKHQpe3RoaXMuZGVib3VuY2UoInRhYi1jaGFuZ2VkIiwoZnVuY3Rpb24oKXt0aGlzLl90YWJDaGFuZ2VkKG51bGwsdGhpcy5fcHJldmlvdXNUYWIpLHRoaXMuX3ByZXZpb3VzVGFiPW51bGx9KSwxKX0sX2FjdGl2YXRlSGFuZGxlcjpmdW5jdGlvbigpe3RoaXMuX2NhbmNlbFBlbmRpbmdBY3RpdmF0aW9uKCksS2EuX2FjdGl2YXRlSGFuZGxlci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LF9zY2hlZHVsZUFjdGl2YXRpb246ZnVuY3Rpb24odCxlKXt0aGlzLl9wZW5kaW5nQWN0aXZhdGlvbkl0ZW09dCx0aGlzLl9wZW5kaW5nQWN0aXZhdGlvblRpbWVvdXQ9dGhpcy5hc3luYyh0aGlzLl9iaW5kRGVsYXllZEFjdGl2YXRpb25IYW5kbGVyLGUpfSxfZGVsYXllZEFjdGl2YXRpb25IYW5kbGVyOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcGVuZGluZ0FjdGl2YXRpb25JdGVtO3RoaXMuX3BlbmRpbmdBY3RpdmF0aW9uSXRlbT12b2lkIDAsdGhpcy5fcGVuZGluZ0FjdGl2YXRpb25UaW1lb3V0PXZvaWQgMCx0LmZpcmUodGhpcy5hY3RpdmF0ZUV2ZW50LG51bGwse2J1YmJsZXM6ITAsY2FuY2VsYWJsZTohMH0pfSxfY2FuY2VsUGVuZGluZ0FjdGl2YXRpb246ZnVuY3Rpb24oKXt2b2lkIDAhPT10aGlzLl9wZW5kaW5nQWN0aXZhdGlvblRpbWVvdXQmJih0aGlzLmNhbmNlbEFzeW5jKHRoaXMuX3BlbmRpbmdBY3RpdmF0aW9uVGltZW91dCksdGhpcy5fcGVuZGluZ0FjdGl2YXRpb25JdGVtPXZvaWQgMCx0aGlzLl9wZW5kaW5nQWN0aXZhdGlvblRpbWVvdXQ9dm9pZCAwKX0sX29uQXJyb3dLZXl1cDpmdW5jdGlvbih0KXt0aGlzLmF1dG9zZWxlY3QmJnRoaXMuX3NjaGVkdWxlQWN0aXZhdGlvbih0aGlzLmZvY3VzZWRJdGVtLHRoaXMuYXV0b3NlbGVjdERlbGF5KX0sX29uQmx1ckNhcHR1cmU6ZnVuY3Rpb24odCl7dC50YXJnZXQ9PT10aGlzLl9wZW5kaW5nQWN0aXZhdGlvbkl0ZW0mJnRoaXMuX2NhbmNlbFBlbmRpbmdBY3RpdmF0aW9uKCl9LGdldCBfdGFiQ29udGFpbmVyU2Nyb2xsU2l6ZSgpe3JldHVybiBNYXRoLm1heCgwLHRoaXMuJC50YWJzQ29udGFpbmVyLnNjcm9sbFdpZHRoLXRoaXMuJC50YWJzQ29udGFpbmVyLm9mZnNldFdpZHRoKX0sX3Njcm9sbDpmdW5jdGlvbih0LGUpe3RoaXMuc2Nyb2xsYWJsZSYmdGhpcy5fYWZmZWN0U2Nyb2xsKGUmJi1lLmRkeHx8MCl9LF9kb3duOmZ1bmN0aW9uKHQpe3RoaXMuYXN5bmMoKGZ1bmN0aW9uKCl7dGhpcy5fZGVmYXVsdEZvY3VzQXN5bmMmJih0aGlzLmNhbmNlbEFzeW5jKHRoaXMuX2RlZmF1bHRGb2N1c0FzeW5jKSx0aGlzLl9kZWZhdWx0Rm9jdXNBc3luYz1udWxsKX0pLDEpfSxfYWZmZWN0U2Nyb2xsOmZ1bmN0aW9uKHQpe3RoaXMuJC50YWJzQ29udGFpbmVyLnNjcm9sbExlZnQrPXQ7dmFyIGU9dGhpcy4kLnRhYnNDb250YWluZXIuc2Nyb2xsTGVmdDt0aGlzLl9sZWZ0SGlkZGVuPTA9PT1lLHRoaXMuX3JpZ2h0SGlkZGVuPWU9PT10aGlzLl90YWJDb250YWluZXJTY3JvbGxTaXplfSxfb25MZWZ0U2Nyb2xsQnV0dG9uRG93bjpmdW5jdGlvbigpe3RoaXMuX3Njcm9sbFRvTGVmdCgpLHRoaXMuX2hvbGRKb2I9c2V0SW50ZXJ2YWwodGhpcy5fc2Nyb2xsVG9MZWZ0LmJpbmQodGhpcyksdGhpcy5faG9sZERlbGF5KX0sX29uUmlnaHRTY3JvbGxCdXR0b25Eb3duOmZ1bmN0aW9uKCl7dGhpcy5fc2Nyb2xsVG9SaWdodCgpLHRoaXMuX2hvbGRKb2I9c2V0SW50ZXJ2YWwodGhpcy5fc2Nyb2xsVG9SaWdodC5iaW5kKHRoaXMpLHRoaXMuX2hvbGREZWxheSl9LF9vblNjcm9sbEJ1dHRvblVwOmZ1bmN0aW9uKCl7Y2xlYXJJbnRlcnZhbCh0aGlzLl9ob2xkSm9iKSx0aGlzLl9ob2xkSm9iPW51bGx9LF9zY3JvbGxUb0xlZnQ6ZnVuY3Rpb24oKXt0aGlzLl9hZmZlY3RTY3JvbGwoLXRoaXMuX3N0ZXApfSxfc2Nyb2xsVG9SaWdodDpmdW5jdGlvbigpe3RoaXMuX2FmZmVjdFNjcm9sbCh0aGlzLl9zdGVwKX0sX3RhYkNoYW5nZWQ6ZnVuY3Rpb24odCxlKXtpZighdClyZXR1cm4gdGhpcy4kLnNlbGVjdGlvbkJhci5jbGFzc0xpc3QucmVtb3ZlKCJleHBhbmQiKSx0aGlzLiQuc2VsZWN0aW9uQmFyLmNsYXNzTGlzdC5yZW1vdmUoImNvbnRyYWN0Iiksdm9pZCB0aGlzLl9wb3NpdGlvbkJhcigwLDApO3ZhciBuPXRoaXMuJC50YWJzQ29udGVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxpPW4ud2lkdGgscj10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG89ci5sZWZ0LW4ubGVmdDtpZih0aGlzLl9wb3M9e3dpZHRoOnRoaXMuX2NhbGNQZXJjZW50KHIud2lkdGgsaSksbGVmdDp0aGlzLl9jYWxjUGVyY2VudChvLGkpfSx0aGlzLm5vU2xpZGV8fG51bGw9PWUpcmV0dXJuIHRoaXMuJC5zZWxlY3Rpb25CYXIuY2xhc3NMaXN0LnJlbW92ZSgiZXhwYW5kIiksdGhpcy4kLnNlbGVjdGlvbkJhci5jbGFzc0xpc3QucmVtb3ZlKCJjb250cmFjdCIpLHZvaWQgdGhpcy5fcG9zaXRpb25CYXIodGhpcy5fcG9zLndpZHRoLHRoaXMuX3Bvcy5sZWZ0KTt2YXIgYT1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHM9dGhpcy5pdGVtcy5pbmRleE9mKGUpLGw9dGhpcy5pdGVtcy5pbmRleE9mKHQpO3RoaXMuJC5zZWxlY3Rpb25CYXIuY2xhc3NMaXN0LmFkZCgiZXhwYW5kIik7dmFyIGM9czxsO3RoaXMuX2lzUlRMJiYoYz0hYyksYz90aGlzLl9wb3NpdGlvbkJhcih0aGlzLl9jYWxjUGVyY2VudChyLmxlZnQrci53aWR0aC1hLmxlZnQsaSktNSx0aGlzLl9sZWZ0KTp0aGlzLl9wb3NpdGlvbkJhcih0aGlzLl9jYWxjUGVyY2VudChhLmxlZnQrYS53aWR0aC1yLmxlZnQsaSktNSx0aGlzLl9jYWxjUGVyY2VudChvLGkpKzUpLHRoaXMuc2Nyb2xsYWJsZSYmdGhpcy5fc2Nyb2xsVG9TZWxlY3RlZElmTmVlZGVkKHIud2lkdGgsbyl9LF9zY3JvbGxUb1NlbGVjdGVkSWZOZWVkZWQ6ZnVuY3Rpb24odCxlKXt2YXIgbj1lLXRoaXMuJC50YWJzQ29udGFpbmVyLnNjcm9sbExlZnQ7KG48MHx8KG4rPXQtdGhpcy4kLnRhYnNDb250YWluZXIub2Zmc2V0V2lkdGgpPjApJiYodGhpcy4kLnRhYnNDb250YWluZXIuc2Nyb2xsTGVmdCs9bil9LF9jYWxjUGVyY2VudDpmdW5jdGlvbih0LGUpe3JldHVybiAxMDAqdC9lfSxfcG9zaXRpb25CYXI6ZnVuY3Rpb24odCxlKXtlPWV8fDAsdGhpcy5fd2lkdGg9dD10fHwwLHRoaXMuX2xlZnQ9ZSx0aGlzLnRyYW5zZm9ybSgidHJhbnNsYXRlWCgiK2UrIiUpIHNjYWxlWCgiK3QvMTAwKyIpIix0aGlzLiQuc2VsZWN0aW9uQmFyKX0sX29uQmFyVHJhbnNpdGlvbkVuZDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLiQuc2VsZWN0aW9uQmFyLmNsYXNzTGlzdDtlLmNvbnRhaW5zKCJleHBhbmQiKT8oZS5yZW1vdmUoImV4cGFuZCIpLGUuYWRkKCJjb250cmFjdCIpLHRoaXMuX3Bvc2l0aW9uQmFyKHRoaXMuX3Bvcy53aWR0aCx0aGlzLl9wb3MubGVmdCkpOmUuY29udGFpbnMoImNvbnRyYWN0IikmJmUucmVtb3ZlKCJjb250cmFjdCIpfX0pOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KdmFyIGNzPW51bGw7SXIoe190ZW1wbGF0ZTpfZWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci10b2FzdC1iYWNrZ3JvdW5kLWNvbG9yLCAjMzIzMjMyKTsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItdG9hc3QtY29sb3IsICNmMWYxZjEpOwogICAgICAgIG1pbi1oZWlnaHQ6IDQ4cHg7CiAgICAgICAgbWluLXdpZHRoOiAyODhweDsKICAgICAgICBwYWRkaW5nOiAxNnB4IDI0cHg7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBib3gtc2hhZG93OiAwIDJweCA1cHggMCByZ2JhKDAsIDAsIDAsIDAuMjYpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgICAgICBtYXJnaW46IDEycHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgICAtd2Via2l0LXRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIDAuM3MsIG9wYWNpdHkgMC4zczsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4zcywgb3BhY2l0eSAwLjNzOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTAwcHgpOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDBweCk7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgfQoKICAgICAgOmhvc3QoLmNhcHN1bGUpIHsKICAgICAgICBib3JkZXItcmFkaXVzOiAyNHB4OwogICAgICB9CgogICAgICA6aG9zdCguZml0LWJvdHRvbSkgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIG1pbi13aWR0aDogMDsKICAgICAgICBib3JkZXItcmFkaXVzOiAwOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgfQoKICAgICAgOmhvc3QoLnBhcGVyLXRvYXN0LW9wZW4pIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDBweCk7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDBweCk7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHNwYW4gaWQ9ImxhYmVsIj57e3RleHR9fTwvc3Bhbj4KICAgIDxzbG90Pjwvc2xvdD4KYCxpczoicGFwZXItdG9hc3QiLGJlaGF2aW9yczpbQWFdLHByb3BlcnRpZXM6e2ZpdEludG86e3R5cGU6T2JqZWN0LHZhbHVlOndpbmRvdyxvYnNlcnZlcjoiX29uRml0SW50b0NoYW5nZWQifSxob3Jpem9udGFsQWxpZ246e3R5cGU6U3RyaW5nLHZhbHVlOiJsZWZ0In0sdmVydGljYWxBbGlnbjp7dHlwZTpTdHJpbmcsdmFsdWU6ImJvdHRvbSJ9LGR1cmF0aW9uOnt0eXBlOk51bWJlcix2YWx1ZTozZTN9LHRleHQ6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxub0NhbmNlbE9uT3V0c2lkZUNsaWNrOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITB9LG5vQXV0b0ZvY3VzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITB9fSxsaXN0ZW5lcnM6e3RyYW5zaXRpb25lbmQ6Il9fb25UcmFuc2l0aW9uRW5kIn0sZ2V0IHZpc2libGUoKXtyZXR1cm4gcG8uX3dhcm4oImB2aXNpYmxlYCBpcyBkZXByZWNhdGVkLCB1c2UgYG9wZW5lZGAgaW5zdGVhZCIpLHRoaXMub3BlbmVkfSxnZXQgX2NhbkF1dG9DbG9zZSgpe3JldHVybiB0aGlzLmR1cmF0aW9uPjAmJnRoaXMuZHVyYXRpb24hPT0xLzB9LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLl9hdXRvQ2xvc2U9bnVsbCxPYS5yZXF1ZXN0QXZhaWxhYmlsaXR5KCl9LHNob3c6ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluInN0cmluZyI9PXR5cGVvZiB0JiYodD17dGV4dDp0fSksdCkwPT09ZS5pbmRleE9mKCJfIik/cG8uX3dhcm4oJ1RoZSBwcm9wZXJ0eSAiJytlKyciIGlzIHByaXZhdGUgYW5kIHdhcyBub3Qgc2V0LicpOmUgaW4gdGhpcz90aGlzW2VdPXRbZV06cG8uX3dhcm4oJ1RoZSBwcm9wZXJ0eSAiJytlKyciIGlzIG5vdCB2YWxpZC4nKTt0aGlzLm9wZW4oKX0saGlkZTpmdW5jdGlvbigpe3RoaXMuY2xvc2UoKX0sX19vblRyYW5zaXRpb25FbmQ6ZnVuY3Rpb24odCl7dCYmdC50YXJnZXQ9PT10aGlzJiYib3BhY2l0eSI9PT10LnByb3BlcnR5TmFtZSYmKHRoaXMub3BlbmVkP3RoaXMuX2ZpbmlzaFJlbmRlck9wZW5lZCgpOnRoaXMuX2ZpbmlzaFJlbmRlckNsb3NlZCgpKX0sX29wZW5lZENoYW5nZWQ6ZnVuY3Rpb24oKXtudWxsIT09dGhpcy5fYXV0b0Nsb3NlJiYodGhpcy5jYW5jZWxBc3luYyh0aGlzLl9hdXRvQ2xvc2UpLHRoaXMuX2F1dG9DbG9zZT1udWxsKSx0aGlzLm9wZW5lZD8oY3MmJmNzIT09dGhpcyYmY3MuY2xvc2UoKSxjcz10aGlzLHRoaXMuZmlyZSgiaXJvbi1hbm5vdW5jZSIse3RleHQ6dGhpcy50ZXh0fSksdGhpcy5fY2FuQXV0b0Nsb3NlJiYodGhpcy5fYXV0b0Nsb3NlPXRoaXMuYXN5bmModGhpcy5jbG9zZSx0aGlzLmR1cmF0aW9uKSkpOmNzPT09dGhpcyYmKGNzPW51bGwpLFRhLl9vcGVuZWRDaGFuZ2VkLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sX3JlbmRlck9wZW5lZDpmdW5jdGlvbigpe3RoaXMuY2xhc3NMaXN0LmFkZCgicGFwZXItdG9hc3Qtb3BlbiIpfSxfcmVuZGVyQ2xvc2VkOmZ1bmN0aW9uKCl7dGhpcy5jbGFzc0xpc3QucmVtb3ZlKCJwYXBlci10b2FzdC1vcGVuIil9LF9vbkZpdEludG9DaGFuZ2VkOmZ1bmN0aW9uKHQpe3RoaXMucG9zaXRpb25UYXJnZXQ9dH19KTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KY29uc3QgdXM9X2VgCgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIEBhcHBseSAtLWxheW91dC1ob3Jpem9udGFsOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICA6aG9zdCg6Zm9jdXMpIHsKICAgICAgICBvdXRsaW5lOm5vbmU7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtYmFyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBvcGFjaXR5OiAwLjQ7CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciBsaW5lYXIgLjA4czsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLXVuY2hlY2tlZC1iYXItY29sb3IsICMwMDAwMDApOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10b2dnbGUtYnV0dG9uLXVuY2hlY2tlZC1iYXI7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtYnV0dG9uIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAtM3B4OwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBib3gtc2hhZG93OiAwIDFweCA1cHggMCByZ2JhKDAsIDAsIDAsIDAuNik7CiAgICAgICAgdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gbGluZWFyIC4wOHMsIGJhY2tncm91bmQtY29sb3IgbGluZWFyIC4wOHM7CiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIGxpbmVhciAuMDhzLCBiYWNrZ3JvdW5kLWNvbG9yIGxpbmVhciAuMDhzOwogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi11bmNoZWNrZWQtYnV0dG9uLWNvbG9yLCB2YXIoLS1wYXBlci1ncmV5LTUwKSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvZ2dsZS1idXR0b24tdW5jaGVja2VkLWJ1dHRvbjsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1idXR0b24uZHJhZ2dpbmcgewogICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbjogbm9uZTsKICAgICAgICB0cmFuc2l0aW9uOiBub25lOwogICAgICB9CgogICAgICA6aG9zdChbY2hlY2tlZF06bm90KFtkaXNhYmxlZF0pKSAudG9nZ2xlLWJhciB7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXRvZ2dsZS1idXR0b24tY2hlY2tlZC1iYXItY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi1jaGVja2VkLWJhcjsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgLnRvZ2dsZS1iYXIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDA7CiAgICAgICAgb3BhY2l0eTogMC4xMjsKICAgICAgfQoKICAgICAgOmhvc3QoW2NoZWNrZWRdKSAudG9nZ2xlLWJ1dHRvbiB7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgxNnB4LCAwKTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgxNnB4LCAwKTsKICAgICAgfQoKICAgICAgOmhvc3QoW2NoZWNrZWRdOm5vdChbZGlzYWJsZWRdKSkgLnRvZ2dsZS1idXR0b24gewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXRvZ2dsZS1idXR0b24tY2hlY2tlZC1idXR0b24tY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi1jaGVja2VkLWJ1dHRvbjsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgLnRvZ2dsZS1idXR0b24gewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNiZGJkYmQ7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1pbmsgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IC0xNHB4OwogICAgICAgIGxlZnQ6IC0xNHB4OwogICAgICAgIHJpZ2h0OiBhdXRvOwogICAgICAgIGJvdHRvbTogYXV0bzsKICAgICAgICB3aWR0aDogNDhweDsKICAgICAgICBoZWlnaHQ6IDQ4cHg7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLXVuY2hlY2tlZC1pbmstY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10b2dnbGUtYnV0dG9uLXVuY2hlY2tlZC1pbms7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjaGVja2VkXSkgLnRvZ2dsZS1pbmsgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLWNoZWNrZWQtaW5rLWNvbG9yLCB2YXIoLS1wcmltYXJ5LWNvbG9yKSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvZ2dsZS1idXR0b24tY2hlY2tlZC1pbms7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiAzNnB4OwogICAgICAgIGhlaWdodDogMTRweDsKICAgICAgICAvKiBUaGUgdG9nZ2xlIGJ1dHRvbiBoYXMgYW4gYWJzb2x1dGUgcG9zaXRpb24gb2YgLTNweDsgVGhlIGV4dHJhIDFweAogICAgICAgIC8qIGFjY291bnRzIGZvciB0aGUgdG9nZ2xlIGJ1dHRvbiBzaGFkb3cgYm94LiAqLwogICAgICAgIG1hcmdpbjogNHB4IDFweDsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1sYWJlbCB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgICAgIHBhZGRpbmctbGVmdDogdmFyKC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi1sYWJlbC1zcGFjaW5nLCA4cHgpOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLWxhYmVsLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgICAgfQoKICAgICAgLyogaW52YWxpZCBzdGF0ZSAqLwogICAgICA6aG9zdChbaW52YWxpZF0pIC50b2dnbGUtYmFyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLWludmFsaWQtYmFyLWNvbG9yLCB2YXIoLS1lcnJvci1jb2xvcikpOwogICAgICB9CgogICAgICA6aG9zdChbaW52YWxpZF0pIC50b2dnbGUtYnV0dG9uIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLWludmFsaWQtYnV0dG9uLWNvbG9yLCB2YXIoLS1lcnJvci1jb2xvcikpOwogICAgICB9CgogICAgICA6aG9zdChbaW52YWxpZF0pIC50b2dnbGUtaW5rIHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi1pbnZhbGlkLWluay1jb2xvciwgdmFyKC0tZXJyb3ItY29sb3IpKTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGNsYXNzPSJ0b2dnbGUtY29udGFpbmVyIj4KICAgICAgPGRpdiBpZD0idG9nZ2xlQmFyIiBjbGFzcz0idG9nZ2xlLWJhciI+PC9kaXY+CiAgICAgIDxkaXYgaWQ9InRvZ2dsZUJ1dHRvbiIgY2xhc3M9InRvZ2dsZS1idXR0b24iPjwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0idG9nZ2xlLWxhYmVsIj48c2xvdD48L3Nsb3Q+PC9kaXY+CgogIGA7dXMuc2V0QXR0cmlidXRlKCJzdHJpcC13aGl0ZXNwYWNlIiwiIiksSXIoe190ZW1wbGF0ZTp1cyxpczoicGFwZXItdG9nZ2xlLWJ1dHRvbiIsYmVoYXZpb3JzOltjYV0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6ImJ1dHRvbiIsImFyaWEtcHJlc3NlZCI6ImZhbHNlIix0YWJpbmRleDowfSxwcm9wZXJ0aWVzOnt9LGxpc3RlbmVyczp7dHJhY2s6Il9vbnRyYWNrIn0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXtraSh0aGlzLChmdW5jdGlvbigpe3JpKHRoaXMsInBhbi15Iil9KSl9LF9vbnRyYWNrOmZ1bmN0aW9uKHQpe3ZhciBlPXQuZGV0YWlsOyJzdGFydCI9PT1lLnN0YXRlP3RoaXMuX3RyYWNrU3RhcnQoZSk6InRyYWNrIj09PWUuc3RhdGU/dGhpcy5fdHJhY2tNb3ZlKGUpOiJlbmQiPT09ZS5zdGF0ZSYmdGhpcy5fdHJhY2tFbmQoZSl9LF90cmFja1N0YXJ0OmZ1bmN0aW9uKHQpe3RoaXMuX3dpZHRoPXRoaXMuJC50b2dnbGVCYXIub2Zmc2V0V2lkdGgvMix0aGlzLl90cmFja0NoZWNrZWQ9dGhpcy5jaGVja2VkLHRoaXMuJC50b2dnbGVCdXR0b24uY2xhc3NMaXN0LmFkZCgiZHJhZ2dpbmciKX0sX3RyYWNrTW92ZTpmdW5jdGlvbih0KXt2YXIgZT10LmR4O3RoaXMuX3g9TWF0aC5taW4odGhpcy5fd2lkdGgsTWF0aC5tYXgoMCx0aGlzLl90cmFja0NoZWNrZWQ/dGhpcy5fd2lkdGgrZTplKSksdGhpcy50cmFuc2xhdGUzZCh0aGlzLl94KyJweCIsMCwwLHRoaXMuJC50b2dnbGVCdXR0b24pLHRoaXMuX3VzZXJBY3RpdmF0ZSh0aGlzLl94PnRoaXMuX3dpZHRoLzIpfSxfdHJhY2tFbmQ6ZnVuY3Rpb24odCl7dGhpcy4kLnRvZ2dsZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJkcmFnZ2luZyIpLHRoaXMudHJhbnNmb3JtKCIiLHRoaXMuJC50b2dnbGVCdXR0b24pfSxfY3JlYXRlUmlwcGxlOmZ1bmN0aW9uKCl7dGhpcy5fcmlwcGxlQ29udGFpbmVyPXRoaXMuJC50b2dnbGVCdXR0b247dmFyIHQ9Wm8uX2NyZWF0ZVJpcHBsZSgpO3JldHVybiB0LmlkPSJpbmsiLHQuc2V0QXR0cmlidXRlKCJyZWNlbnRlcnMiLCIiKSx0LmNsYXNzTGlzdC5hZGQoImNpcmNsZSIsInRvZ2dsZS1pbmsiKSx0fX0pLAovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KSXIoe190ZW1wbGF0ZTpfZWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLWhlaWdodDogdmFyKC0tcGFwZXItdG9vbGJhci1oZWlnaHQsIDY0cHgpOwogICAgICAgIC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLXNtLWhlaWdodDogdmFyKC0tcGFwZXItdG9vbGJhci1zbS1oZWlnaHQsIDU2cHgpOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBoZWlnaHQ6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItdG9vbGJhci1oZWlnaHQpOwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLXRvb2xiYXItYmFja2dyb3VuZCwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10b29sYmFyLWNvbG9yLCB2YXIoLS1kYXJrLXRoZW1lLXRleHQtY29sb3IpKTsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sYmFyOwogICAgICB9CgogICAgICA6aG9zdCguYW5pbWF0ZSkgewogICAgICAgIHRyYW5zaXRpb246IHZhcigtLXBhcGVyLXRvb2xiYXItdHJhbnNpdGlvbiwgaGVpZ2h0IDAuMThzIGVhc2UtaW4pOwogICAgICB9CgogICAgICA6aG9zdCgubWVkaXVtLXRhbGwpIHsKICAgICAgICBoZWlnaHQ6IGNhbGModmFyKC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLWhlaWdodCkgKiAyKTsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sYmFyLW1lZGl1bTsKICAgICAgfQoKICAgICAgOmhvc3QoLnRhbGwpIHsKICAgICAgICBoZWlnaHQ6IGNhbGModmFyKC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLWhlaWdodCkgKiAzKTsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sYmFyLXRhbGw7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLXRvb2xzIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXRvb2xiYXItaGVpZ2h0KTsKICAgICAgICBwYWRkaW5nOiAwIDE2cHg7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWhvcml6b250YWw7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlcjsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sYmFyLWNvbnRlbnQ7CiAgICAgIH0KCiAgICAgIC8qCiAgICAgICAqIFRPRE86IFdoZXJlIHNob3VsZCBtZWRpYSBxdWVyeSBicmVha3BvaW50cyBsaXZlIHNvIHRoZXkgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIGVsZW1lbnRzPwogICAgICAgKi8KCiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA2MDBweCkgewogICAgICAgIDpob3N0IHsKICAgICAgICAgIGhlaWdodDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLXNtLWhlaWdodCk7CiAgICAgICAgfQoKICAgICAgICA6aG9zdCgubWVkaXVtLXRhbGwpIHsKICAgICAgICAgIGhlaWdodDogY2FsYyh2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXRvb2xiYXItc20taGVpZ2h0KSAqIDIpOwogICAgICAgIH0KCiAgICAgICAgOmhvc3QoLnRhbGwpIHsKICAgICAgICAgIGhlaWdodDogY2FsYyh2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXRvb2xiYXItc20taGVpZ2h0KSAqIDMpOwogICAgICAgIH0KCiAgICAgICAgLnRvb2xiYXItdG9vbHMgewogICAgICAgICAgaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXRvb2xiYXItc20taGVpZ2h0KTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgICN0b3BCYXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgLyogbWlkZGxlIGJhciAqLwogICAgICAjbWlkZGxlQmFyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgIH0KCiAgICAgIDpob3N0KC50YWxsKSAjbWlkZGxlQmFyLAogICAgICA6aG9zdCgubWVkaXVtLXRhbGwpICNtaWRkbGVCYXIgewogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMCUpOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDAlKTsKICAgICAgfQoKICAgICAgLyogYm90dG9tIGJhciAqLwogICAgICAjYm90dG9tQmFyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgIH0KCiAgICAgIC8qCiAgICAgICAqIG1ha2UgZWxlbWVudHMgKGUuZy4gYnV0dG9ucykgcmVzcG9uZCB0byBtb3VzZS90b3VjaCBldmVudHMKICAgICAgICoKICAgICAgICogXGAudG9vbGJhci10b29sc1xgIGRpc2FibGVzIHRvdWNoIGV2ZW50cyBzbyBtdWx0aXBsZSB0b29sYmFycyBjYW4gc3RhY2sgYW5kIG5vdAogICAgICAgKiBhYnNvcmIgZXZlbnRzLiBBbGwgY2hpbGRyZW4gbXVzdCBoYXZlIHBvaW50ZXIgZXZlbnRzIHJlLWVuYWJsZWQgdG8gd29yayBhcwogICAgICAgKiBleHBlY3RlZC4KICAgICAgICovCiAgICAgIC50b29sYmFyLXRvb2xzID4gOjpzbG90dGVkKCo6bm90KFtkaXNhYmxlZF0pKSB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgICAgIH0KCiAgICAgIC50b29sYmFyLXRvb2xzID4gOjpzbG90dGVkKC50aXRsZSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIGZvbnQtc2l6ZTogMjBweDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4OwogICAgICB9CgogICAgICAudG9vbGJhci10b29scyA+IDo6c2xvdHRlZCgudGl0bGUpIHsKICAgICAgICBtYXJnaW4tbGVmdDogNTZweDsKICAgICAgfQoKICAgICAgLnRvb2xiYXItdG9vbHMgPiA6OnNsb3R0ZWQocGFwZXItaWNvbi1idXR0b24gKyAudGl0bGUpIHsKICAgICAgICBtYXJnaW4tbGVmdDogMDsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFRoZSAtLXBhcGVyLXRvb2xiYXItdGl0bGUgbWl4aW4gaXMgYXBwbGllZCBoZXJlIGluc3RlYWQgb2YgYWJvdmUgdG8KICAgICAgICogZml4IHRoZSBpc3N1ZSB3aXRoIG1hcmdpbi1sZWZ0IGJlaW5nIGlnbm9yZWQgZHVlIHRvIGNzcyBvcmRlcmluZy4KICAgICAgICovCiAgICAgIC50b29sYmFyLXRvb2xzID4gOjpzbG90dGVkKC50aXRsZSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvb2xiYXItdGl0bGU7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLXRvb2xzID4gOjpzbG90dGVkKHBhcGVyLWljb24tYnV0dG9uW2ljb249bWVudV0pIHsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDI0cHg7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLXRvb2xzID4gOjpzbG90dGVkKC5maXQpIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiBhdXRvOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHdpZHRoOiBhdXRvOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgfQoKICAgICAgLyogVE9ETyhub21zKTogVW50aWwgd2UgaGF2ZSBhIGJldHRlciBzb2x1dGlvbiBmb3IgY2xhc3NlcyB0aGF0IGRvbid0IHVzZQogICAgICAgKiAvZGVlcC8gY3JlYXRlIG91ciBvd24uCiAgICAgICAqLwogICAgICAuc3RhcnQtanVzdGlmaWVkIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtc3RhcnQtanVzdGlmaWVkOwogICAgICB9CgogICAgICAuY2VudGVyLWp1c3RpZmllZCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlci1qdXN0aWZpZWQ7CiAgICAgIH0KCiAgICAgIC5lbmQtanVzdGlmaWVkIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZW5kLWp1c3RpZmllZDsKICAgICAgfQoKICAgICAgLmFyb3VuZC1qdXN0aWZpZWQgewogICAgICAgIEBhcHBseSAtLWxheW91dC1hcm91bmQtanVzdGlmaWVkOwogICAgICB9CgogICAgICAuanVzdGlmaWVkIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtanVzdGlmaWVkOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgaWQ9InRvcEJhciIgY2xhc3NcJD0idG9vbGJhci10b29scyBbW19jb21wdXRlQmFyRXh0cmFDbGFzc2VzKGp1c3RpZnkpXV0iPgogICAgICA8c2xvdCBuYW1lPSJ0b3AiPjwvc2xvdD4KICAgIDwvZGl2PgoKICAgIDxkaXYgaWQ9Im1pZGRsZUJhciIgY2xhc3NcJD0idG9vbGJhci10b29scyBbW19jb21wdXRlQmFyRXh0cmFDbGFzc2VzKG1pZGRsZUp1c3RpZnkpXV0iPgogICAgICA8c2xvdCBuYW1lPSJtaWRkbGUiPjwvc2xvdD4KICAgIDwvZGl2PgoKICAgIDxkaXYgaWQ9ImJvdHRvbUJhciIgY2xhc3NcJD0idG9vbGJhci10b29scyBbW19jb21wdXRlQmFyRXh0cmFDbGFzc2VzKGJvdHRvbUp1c3RpZnkpXV0iPgogICAgICA8c2xvdCBuYW1lPSJib3R0b20iPjwvc2xvdD4KICAgIDwvZGl2PgpgLGlzOiJwYXBlci10b29sYmFyIixob3N0QXR0cmlidXRlczp7cm9sZToidG9vbGJhciJ9LHByb3BlcnRpZXM6e2JvdHRvbUp1c3RpZnk6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxqdXN0aWZ5Ont0eXBlOlN0cmluZyx2YWx1ZToiIn0sbWlkZGxlSnVzdGlmeTp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9fSxyZWFkeTpmdW5jdGlvbigpe2NvbnNvbGUud2Fybih0aGlzLmlzLCJpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIGFwcC1sYXlvdXQgaW5zdGVhZCEiKX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9vYnNlcnZlcj10aGlzLl9vYnNlcnZlKHRoaXMpLHRoaXMuX3VwZGF0ZUFyaWFMYWJlbGxlZEJ5KCl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fb2JzZXJ2ZXImJnRoaXMuX29ic2VydmVyLmRpc2Nvbm5lY3QoKX0sX29ic2VydmU6ZnVuY3Rpb24odCl7dmFyIGU9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVBcmlhTGFiZWxsZWRCeSgpfS5iaW5kKHRoaXMpKTtyZXR1cm4gZS5vYnNlcnZlKHQse2NoaWxkTGlzdDohMCxzdWJ0cmVlOiEwfSksZX0sX3VwZGF0ZUFyaWFMYWJlbGxlZEJ5OmZ1bmN0aW9uKCl7emkoKTtmb3IodmFyIHQsZT1bXSxuPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHFpKHRoaXMucm9vdCkucXVlcnlTZWxlY3RvckFsbCgic2xvdCIpKS5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwocWkodGhpcy5yb290KS5xdWVyeVNlbGVjdG9yQWxsKCJjb250ZW50IikpKSxpPTA7dD1uW2ldO2krKylmb3IodmFyIHIsbz1xaSh0KS5nZXREaXN0cmlidXRlZE5vZGVzKCksYT0wO3I9b1thXTthKyspaWYoci5jbGFzc0xpc3QmJnIuY2xhc3NMaXN0LmNvbnRhaW5zKCJ0aXRsZSIpKWlmKHIuaWQpZS5wdXNoKHIuaWQpO2Vsc2V7dmFyIHM9InBhcGVyLXRvb2xiYXItbGFiZWwtIitNYXRoLmZsb29yKDFlNCpNYXRoLnJhbmRvbSgpKTtyLmlkPXMsZS5wdXNoKHMpfWUubGVuZ3RoPjAmJnRoaXMuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsbGVkYnkiLGUuam9pbigiICIpKX0sX2NvbXB1dGVCYXJFeHRyYUNsYXNzZXM6ZnVuY3Rpb24odCl7cmV0dXJuIHQ/dCsoImp1c3RpZmllZCI9PT10PyIiOiItanVzdGlmaWVkIik6IiJ9fSksCi8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpJcih7X3RlbXBsYXRlOl9lYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgei1pbmRleDogMTAwMjsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgfQoKICAgICAgI3Rvb2x0aXAgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItdG9vbHRpcC1iYWNrZ3JvdW5kLCAjNjE2MTYxKTsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItdG9vbHRpcC10ZXh0LWNvbG9yLCB3aGl0ZSk7CiAgICAgICAgcGFkZGluZzogOHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sdGlwOwogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGtleUZyYW1lU2NhbGVVcCB7CiAgICAgICAgMCUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjApOwogICAgICAgIH0KICAgICAgICAxMDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMga2V5RnJhbWVTY2FsZURvd24gewogICAgICAgIDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wKTsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuMCk7CiAgICAgICAgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGtleUZyYW1lRmFkZUluT3BhY2l0eSB7CiAgICAgICAgMCUgewogICAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICBvcGFjaXR5OiB2YXIoLS1wYXBlci10b29sdGlwLW9wYWNpdHksIDAuOSk7CiAgICAgICAgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGtleUZyYW1lRmFkZU91dE9wYWNpdHkgewogICAgICAgIDAlIHsKICAgICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBrZXlGcmFtZVNsaWRlRG93bkluIHsKICAgICAgICAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTIwMDBweCk7CiAgICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIH0KICAgICAgICAxMCUgewogICAgICAgICAgb3BhY2l0eTogMC4yOwogICAgICAgIH0KICAgICAgICAxMDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsKICAgICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMga2V5RnJhbWVTbGlkZURvd25PdXQgewogICAgICAgIDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsKICAgICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICB9CiAgICAgICAgMTAlIHsKICAgICAgICAgIG9wYWNpdHk6IDAuMjsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTIwMDBweCk7CiAgICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLmZhZGUtaW4tYW5pbWF0aW9uIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tcGFwZXItdG9vbHRpcC1kZWxheS1pbiwgNTAwbXMpOwogICAgICAgIGFuaW1hdGlvbi1uYW1lOiBrZXlGcmFtZUZhZGVJbk9wYWNpdHk7CiAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogMTsKICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBlYXNlLWluOwogICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItdG9vbHRpcC1kdXJhdGlvbi1pbiwgNTAwbXMpOwogICAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGZvcndhcmRzOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvb2x0aXAtYW5pbWF0aW9uOwogICAgICB9CgogICAgICAuZmFkZS1vdXQtYW5pbWF0aW9uIHsKICAgICAgICBvcGFjaXR5OiB2YXIoLS1wYXBlci10b29sdGlwLW9wYWNpdHksIDAuOSk7CiAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1wYXBlci10b29sdGlwLWRlbGF5LW91dCwgMG1zKTsKICAgICAgICBhbmltYXRpb24tbmFtZToga2V5RnJhbWVGYWRlT3V0T3BhY2l0eTsKICAgICAgICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiAxOwogICAgICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGVhc2UtaW47CiAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1wYXBlci10b29sdGlwLWR1cmF0aW9uLW91dCwgNTAwbXMpOwogICAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGZvcndhcmRzOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvb2x0aXAtYW5pbWF0aW9uOwogICAgICB9CgogICAgICAuc2NhbGUtdXAtYW5pbWF0aW9uIHsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDApOwogICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICBhbmltYXRpb24tZGVsYXk6IHZhcigtLXBhcGVyLXRvb2x0aXAtZGVsYXktaW4sIDUwMG1zKTsKICAgICAgICBhbmltYXRpb24tbmFtZToga2V5RnJhbWVTY2FsZVVwOwogICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IDE7CiAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZS1pbjsKICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXRvb2x0aXAtZHVyYXRpb24taW4sIDUwMG1zKTsKICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBmb3J3YXJkczsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sdGlwLWFuaW1hdGlvbjsKICAgICAgfQoKICAgICAgLnNjYWxlLWRvd24tYW5pbWF0aW9uIHsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOwogICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICBhbmltYXRpb24tZGVsYXk6IHZhcigtLXBhcGVyLXRvb2x0aXAtZGVsYXktb3V0LCA1MDBtcyk7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGtleUZyYW1lU2NhbGVEb3duOwogICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IDE7CiAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZS1pbjsKICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXRvb2x0aXAtZHVyYXRpb24tb3V0LCA1MDBtcyk7CiAgICAgICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogZm9yd2FyZHM7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9vbHRpcC1hbmltYXRpb247CiAgICAgIH0KCiAgICAgIC5zbGlkZS1kb3duLWFuaW1hdGlvbiB7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0yMDAwcHgpOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1wYXBlci10b29sdGlwLWRlbGF5LW91dCwgNTAwbXMpOwogICAgICAgIGFuaW1hdGlvbi1uYW1lOiBrZXlGcmFtZVNsaWRlRG93bkluOwogICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IDE7CiAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMCwgMC4wLCAwLjIsIDEpOwogICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItdG9vbHRpcC1kdXJhdGlvbi1vdXQsIDUwMG1zKTsKICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBmb3J3YXJkczsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sdGlwLWFuaW1hdGlvbjsKICAgICAgfQoKICAgICAgLnNsaWRlLWRvd24tYW5pbWF0aW9uLW91dCB7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICBhbmltYXRpb24tZGVsYXk6IHZhcigtLXBhcGVyLXRvb2x0aXAtZGVsYXktb3V0LCA1MDBtcyk7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGtleUZyYW1lU2xpZGVEb3duT3V0OwogICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IDE7CiAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAxLCAxKTsKICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXRvb2x0aXAtZHVyYXRpb24tb3V0LCA1MDBtcyk7CiAgICAgICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogZm9yd2FyZHM7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9vbHRpcC1hbmltYXRpb247CiAgICAgIH0KCiAgICAgIC5jYW5jZWwtYW5pbWF0aW9uIHsKICAgICAgICBhbmltYXRpb24tZGVsYXk6IC0zMHMgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgLyogVGhhbmtzIElFIDEwLiAqLwoKICAgICAgLmhpZGRlbiB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgaWQ9InRvb2x0aXAiIGNsYXNzPSJoaWRkZW4iPgogICAgICA8c2xvdD48L3Nsb3Q+CiAgICA8L2Rpdj4KYCxpczoicGFwZXItdG9vbHRpcCIsaG9zdEF0dHJpYnV0ZXM6e3JvbGU6InRvb2x0aXAiLHRhYmluZGV4Oi0xfSxwcm9wZXJ0aWVzOntmb3I6e3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfZmluZFRhcmdldCJ9LG1hbnVhbE1vZGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX21hbnVhbE1vZGVDaGFuZ2VkIn0scG9zaXRpb246e3R5cGU6U3RyaW5nLHZhbHVlOiJib3R0b20ifSxmaXRUb1Zpc2libGVCb3VuZHM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sb2Zmc2V0Ont0eXBlOk51bWJlcix2YWx1ZToxNH0sbWFyZ2luVG9wOnt0eXBlOk51bWJlcix2YWx1ZToxNH0sYW5pbWF0aW9uRGVsYXk6e3R5cGU6TnVtYmVyLHZhbHVlOjUwMCxvYnNlcnZlcjoiX2RlbGF5Q2hhbmdlIn0sYW5pbWF0aW9uRW50cnk6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxhbmltYXRpb25FeGl0Ont0eXBlOlN0cmluZyx2YWx1ZToiIn0sYW5pbWF0aW9uQ29uZmlnOnt0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybntlbnRyeTpbe25hbWU6ImZhZGUtaW4tYW5pbWF0aW9uIixub2RlOnRoaXMsdGltaW5nOntkZWxheTowfX1dLGV4aXQ6W3tuYW1lOiJmYWRlLW91dC1hbmltYXRpb24iLG5vZGU6dGhpc31dfX19LF9zaG93aW5nOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9fSxsaXN0ZW5lcnM6e3dlYmtpdEFuaW1hdGlvbkVuZDoiX29uQW5pbWF0aW9uRW5kIn0sZ2V0IHRhcmdldCgpe3ZhciB0PXFpKHRoaXMpLnBhcmVudE5vZGUsZT1xaSh0aGlzKS5nZXRPd25lclJvb3QoKTtyZXR1cm4gdGhpcy5mb3I/cWkoZSkucXVlcnlTZWxlY3RvcigiIyIrdGhpcy5mb3IpOnQubm9kZVR5cGU9PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERT9lLmhvc3Q6dH0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9maW5kVGFyZ2V0KCl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5tYW51YWxNb2RlfHx0aGlzLl9yZW1vdmVMaXN0ZW5lcnMoKX0scGxheUFuaW1hdGlvbjpmdW5jdGlvbih0KXsiZW50cnkiPT09dD90aGlzLnNob3coKToiZXhpdCI9PT10JiZ0aGlzLmhpZGUoKX0sY2FuY2VsQW5pbWF0aW9uOmZ1bmN0aW9uKCl7dGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LmFkZCgiY2FuY2VsLWFuaW1hdGlvbiIpfSxzaG93OmZ1bmN0aW9uKCl7aWYoIXRoaXMuX3Nob3dpbmcpe2lmKCIiPT09cWkodGhpcykudGV4dENvbnRlbnQudHJpbSgpKXtmb3IodmFyIHQ9ITAsZT1xaSh0aGlzKS5nZXRFZmZlY3RpdmVDaGlsZE5vZGVzKCksbj0wO248ZS5sZW5ndGg7bisrKWlmKCIiIT09ZVtuXS50ZXh0Q29udGVudC50cmltKCkpe3Q9ITE7YnJlYWt9aWYodClyZXR1cm59dGhpcy5fc2hvd2luZz0hMCx0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QucmVtb3ZlKCJoaWRkZW4iKSx0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QucmVtb3ZlKCJjYW5jZWwtYW5pbWF0aW9uIiksdGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLl9nZXRBbmltYXRpb25UeXBlKCJleGl0IikpLHRoaXMudXBkYXRlUG9zaXRpb24oKSx0aGlzLl9hbmltYXRpb25QbGF5aW5nPSEwLHRoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5hZGQodGhpcy5fZ2V0QW5pbWF0aW9uVHlwZSgiZW50cnkiKSl9fSxoaWRlOmZ1bmN0aW9uKCl7aWYodGhpcy5fc2hvd2luZyl7aWYodGhpcy5fYW5pbWF0aW9uUGxheWluZylyZXR1cm4gdGhpcy5fc2hvd2luZz0hMSx2b2lkIHRoaXMuX2NhbmNlbEFuaW1hdGlvbigpO3RoaXMuX29uQW5pbWF0aW9uRmluaXNoKCksdGhpcy5fc2hvd2luZz0hMSx0aGlzLl9hbmltYXRpb25QbGF5aW5nPSEwfX0sdXBkYXRlUG9zaXRpb246ZnVuY3Rpb24oKXtpZih0aGlzLl90YXJnZXQmJnRoaXMub2Zmc2V0UGFyZW50KXt2YXIgdD10aGlzLm9mZnNldDsxNCE9dGhpcy5tYXJnaW5Ub3AmJjE0PT10aGlzLm9mZnNldCYmKHQ9dGhpcy5tYXJnaW5Ub3ApO3ZhciBlLG4saT10aGlzLm9mZnNldFBhcmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxyPXRoaXMuX3RhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxvPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYT0oci53aWR0aC1vLndpZHRoKS8yLHM9KHIuaGVpZ2h0LW8uaGVpZ2h0KS8yLGw9ci5sZWZ0LWkubGVmdCxjPXIudG9wLWkudG9wO3N3aXRjaCh0aGlzLnBvc2l0aW9uKXtjYXNlInRvcCI6ZT1sK2Esbj1jLW8uaGVpZ2h0LXQ7YnJlYWs7Y2FzZSJib3R0b20iOmU9bCthLG49YytyLmhlaWdodCt0O2JyZWFrO2Nhc2UibGVmdCI6ZT1sLW8ud2lkdGgtdCxuPWMrczticmVhaztjYXNlInJpZ2h0IjplPWwrci53aWR0aCt0LG49YytzfXRoaXMuZml0VG9WaXNpYmxlQm91bmRzPyhpLmxlZnQrZStvLndpZHRoPndpbmRvdy5pbm5lcldpZHRoPyh0aGlzLnN0eWxlLnJpZ2h0PSIwcHgiLHRoaXMuc3R5bGUubGVmdD0iYXV0byIpOih0aGlzLnN0eWxlLmxlZnQ9TWF0aC5tYXgoMCxlKSsicHgiLHRoaXMuc3R5bGUucmlnaHQ9ImF1dG8iKSxpLnRvcCtuK28uaGVpZ2h0PndpbmRvdy5pbm5lckhlaWdodD8odGhpcy5zdHlsZS5ib3R0b209aS5oZWlnaHQtYyt0KyJweCIsdGhpcy5zdHlsZS50b3A9ImF1dG8iKToodGhpcy5zdHlsZS50b3A9TWF0aC5tYXgoLWkudG9wLG4pKyJweCIsdGhpcy5zdHlsZS5ib3R0b209ImF1dG8iKSk6KHRoaXMuc3R5bGUubGVmdD1lKyJweCIsdGhpcy5zdHlsZS50b3A9bisicHgiKX19LF9hZGRMaXN0ZW5lcnM6ZnVuY3Rpb24oKXt0aGlzLl90YXJnZXQmJih0aGlzLmxpc3Rlbih0aGlzLl90YXJnZXQsIm1vdXNlZW50ZXIiLCJzaG93IiksdGhpcy5saXN0ZW4odGhpcy5fdGFyZ2V0LCJmb2N1cyIsInNob3ciKSx0aGlzLmxpc3Rlbih0aGlzLl90YXJnZXQsIm1vdXNlbGVhdmUiLCJoaWRlIiksdGhpcy5saXN0ZW4odGhpcy5fdGFyZ2V0LCJibHVyIiwiaGlkZSIpLHRoaXMubGlzdGVuKHRoaXMuX3RhcmdldCwidGFwIiwiaGlkZSIpKSx0aGlzLmxpc3Rlbih0aGlzLiQudG9vbHRpcCwiYW5pbWF0aW9uZW5kIiwiX29uQW5pbWF0aW9uRW5kIiksdGhpcy5saXN0ZW4odGhpcywibW91c2VlbnRlciIsImhpZGUiKX0sX2ZpbmRUYXJnZXQ6ZnVuY3Rpb24oKXt0aGlzLm1hbnVhbE1vZGV8fHRoaXMuX3JlbW92ZUxpc3RlbmVycygpLHRoaXMuX3RhcmdldD10aGlzLnRhcmdldCx0aGlzLm1hbnVhbE1vZGV8fHRoaXMuX2FkZExpc3RlbmVycygpfSxfZGVsYXlDaGFuZ2U6ZnVuY3Rpb24odCl7NTAwIT09dCYmdGhpcy51cGRhdGVTdHlsZXMoeyItLXBhcGVyLXRvb2x0aXAtZGVsYXktaW4iOnQrIm1zIn0pfSxfbWFudWFsTW9kZUNoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLm1hbnVhbE1vZGU/dGhpcy5fcmVtb3ZlTGlzdGVuZXJzKCk6dGhpcy5fYWRkTGlzdGVuZXJzKCl9LF9jYW5jZWxBbmltYXRpb246ZnVuY3Rpb24oKXt0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuX2dldEFuaW1hdGlvblR5cGUoImVudHJ5IikpLHRoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5yZW1vdmUodGhpcy5fZ2V0QW5pbWF0aW9uVHlwZSgiZXhpdCIpKSx0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QucmVtb3ZlKCJjYW5jZWwtYW5pbWF0aW9uIiksdGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LmFkZCgiaGlkZGVuIil9LF9vbkFuaW1hdGlvbkZpbmlzaDpmdW5jdGlvbigpe3RoaXMuX3Nob3dpbmcmJih0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuX2dldEFuaW1hdGlvblR5cGUoImVudHJ5IikpLHRoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5yZW1vdmUoImNhbmNlbC1hbmltYXRpb24iKSx0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QuYWRkKHRoaXMuX2dldEFuaW1hdGlvblR5cGUoImV4aXQiKSkpfSxfb25BbmltYXRpb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLl9hbmltYXRpb25QbGF5aW5nPSExLHRoaXMuX3Nob3dpbmd8fCh0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuX2dldEFuaW1hdGlvblR5cGUoImV4aXQiKSksdGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LmFkZCgiaGlkZGVuIikpfSxfZ2V0QW5pbWF0aW9uVHlwZTpmdW5jdGlvbih0KXtpZigiZW50cnkiPT09dCYmIiIhPT10aGlzLmFuaW1hdGlvbkVudHJ5KXJldHVybiB0aGlzLmFuaW1hdGlvbkVudHJ5O2lmKCJleGl0Ij09PXQmJiIiIT09dGhpcy5hbmltYXRpb25FeGl0KXJldHVybiB0aGlzLmFuaW1hdGlvbkV4aXQ7aWYodGhpcy5hbmltYXRpb25Db25maWdbdF0mJiJzdHJpbmciPT10eXBlb2YgdGhpcy5hbmltYXRpb25Db25maWdbdF1bMF0ubmFtZSl7aWYodGhpcy5hbmltYXRpb25Db25maWdbdF1bMF0udGltaW5nJiZ0aGlzLmFuaW1hdGlvbkNvbmZpZ1t0XVswXS50aW1pbmcuZGVsYXkmJjAhPT10aGlzLmFuaW1hdGlvbkNvbmZpZ1t0XVswXS50aW1pbmcuZGVsYXkpe3ZhciBlPXRoaXMuYW5pbWF0aW9uQ29uZmlnW3RdWzBdLnRpbWluZy5kZWxheTsiZW50cnkiPT09dD90aGlzLnVwZGF0ZVN0eWxlcyh7Ii0tcGFwZXItdG9vbHRpcC1kZWxheS1pbiI6ZSsibXMifSk6ImV4aXQiPT09dCYmdGhpcy51cGRhdGVTdHlsZXMoeyItLXBhcGVyLXRvb2x0aXAtZGVsYXktb3V0IjplKyJtcyJ9KX1yZXR1cm4gdGhpcy5hbmltYXRpb25Db25maWdbdF1bMF0ubmFtZX19LF9yZW1vdmVMaXN0ZW5lcnM6ZnVuY3Rpb24oKXt0aGlzLl90YXJnZXQmJih0aGlzLnVubGlzdGVuKHRoaXMuX3RhcmdldCwibW91c2VlbnRlciIsInNob3ciKSx0aGlzLnVubGlzdGVuKHRoaXMuX3RhcmdldCwiZm9jdXMiLCJzaG93IiksdGhpcy51bmxpc3Rlbih0aGlzLl90YXJnZXQsIm1vdXNlbGVhdmUiLCJoaWRlIiksdGhpcy51bmxpc3Rlbih0aGlzLl90YXJnZXQsImJsdXIiLCJoaWRlIiksdGhpcy51bmxpc3Rlbih0aGlzLl90YXJnZXQsInRhcCIsImhpZGUiKSksdGhpcy51bmxpc3Rlbih0aGlzLiQudG9vbHRpcCwiYW5pbWF0aW9uZW5kIiwiX29uQW5pbWF0aW9uRW5kIiksdGhpcy51bmxpc3Rlbih0aGlzLCJtb3VzZWVudGVyIiwiaGlkZSIpfX0pO2NsYXNzIGhze2NvbnN0cnVjdG9yKHQpe3RoaXMubGlzdGVuZXI9dH19Y29uc3QgZHM9bmV3IFNldCxwcz1uZXcgU2V0O2Z1bmN0aW9uIGZzKHQpe2NvbnN0IGU9bmV3IGhzKHQpO3JldHVybiBkcy5hZGQoZSksZX1mdW5jdGlvbiBtcyh0KXtjb25zdCBlPW5ldyBocyh0KTtyZXR1cm4gcHMuYWRkKGUpLGV9ZnVuY3Rpb24gZ3MoKXtwcy5mb3JFYWNoKCh0PT50Lmxpc3RlbmVyKCkpKX1mdW5jdGlvbiBfcyh0KXtkcy5kZWxldGUodCl9ZnVuY3Rpb24geXModCl7cHMuZGVsZXRlKHQpfXdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIiwoKCk9Pntkcy5mb3JFYWNoKCh0PT50Lmxpc3RlbmVyKCkpKX0pKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigic3RvcmFnZSIsKCgpPT57cHMuZm9yRWFjaCgodD0+dC5saXN0ZW5lcigpKSl9KSk7bGV0IHZzPSExO2Z1bmN0aW9uIGJzKCl7cmV0dXJuIHZzfWxldCB4cz0iIjtmdW5jdGlvbiB3cyh0KXt4cz10fWZ1bmN0aW9uIFNzKCl7cmV0dXJuIHhzfXZhciBNcz1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxzZXRVc2VIYXNoOmZ1bmN0aW9uIEVzKHQpe3ZzPXR9LHVzZUhhc2g6YnMsc2V0RmFrZUhhc2g6d3MsZ2V0RmFrZUhhc2g6U3N9KTtsZXQgVHM9e307ZnVuY3Rpb24gQ3MoKXtyZXR1cm4gYnMoKT93aW5kb3cubG9jYXRpb24uaGFzaC5zbGljZSgxKTpTcygpfWZ1bmN0aW9uIEFzKHQpe2NvbnN0IGU9e307cmV0dXJuIHQuc3BsaXQoIiYiKS5mb3JFYWNoKCh0PT57Y29uc3Qgbj10LnNwbGl0KCI9Iik7MT09PW4ubGVuZ3RoP2UuX190YWJfXz1uWzBdOjI9PT1uLmxlbmd0aCYmKGVbZGVjb2RlVVJJQ29tcG9uZW50KG5bMF0pXT1kZWNvZGVVUklDb21wb25lbnQoblsxXSkpfSkpLGV9ZnVuY3Rpb24ga3ModCxlPSExKXtpZihicygpKWlmKGUpe2NvbnN0IGU9bmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7ZS5oYXNoPXQsd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKG51bGwsIiIsZS50b1N0cmluZygpKX1lbHNlIHdpbmRvdy5sb2NhdGlvbi5oYXNoPXQ7ZWxzZSB3cyh0KX1mdW5jdGlvbiBMcyh0KXtsZXQgZT0iIjt2b2lkIDAhPT10Ll9fdGFiX18mJihlKz10Ll9fdGFiX18pO2NvbnN0IG49T2JqZWN0LmtleXModCkubWFwKChlPT5bZSx0W2VdXSkpLmZpbHRlcigodD0+Il9fdGFiX18iIT09dFswXSkpLm1hcCgodD0+ZW5jb2RlVVJJQ29tcG9uZW50KHRbMF0pKyI9IitlbmNvZGVVUklDb21wb25lbnQodFsxXSkpKS5qb2luKCImIik7cmV0dXJuIG4ubGVuZ3RoPjA/ZSsiJiIrbjplfWZzKCgoKT0+e1RzPUFzKENzKCkpfSkpO2NvbnN0e2dldDpQcyxzZXQ6TnMsZ2V0SW5pdGlhbGl6ZXI6SXMsZ2V0T2JzZXJ2ZXI6T3MsZGlzcG9zZUJpbmRpbmc6UnN9PVpzKCh0PT50KSwodD0+dCkpLHtnZXQ6enMsc2V0OkRzLGdldEluaXRpYWxpemVyOkJzLGdldE9ic2VydmVyOkhzLGRpc3Bvc2VCaW5kaW5nOkZzfT1acygodD0+InRydWUiPT09dHx8ImZhbHNlIiE9PXQmJnZvaWQgMCksKHQ9PnQudG9TdHJpbmcoKSkpLHtnZXQ6VnMsc2V0OlVzLGdldEluaXRpYWxpemVyOmpzLGdldE9ic2VydmVyOkdzLGRpc3Bvc2VCaW5kaW5nOldzfT1acygodD0+K3QpLCh0PT50LnRvU3RyaW5nKCkpKSx7Z2V0OnFzLHNldDpZcyxnZXRJbml0aWFsaXplcjpYcyxnZXRPYnNlcnZlcjokcyxkaXNwb3NlQmluZGluZzpLc309WnMoKHQ9PkpTT04ucGFyc2UoYXRvYih0KSkpLCh0PT5idG9hKEpTT04uc3RyaW5naWZ5KHQpKSkpO2Z1bmN0aW9uIFpzKHQsZSl7Y29uc3Qgbj1bXSxpPVtdO2Z1bmN0aW9uIHIoZSxuPXt9KXtjb25zdHtkZWZhdWx0VmFsdWU6aSx1c2VMb2NhbFN0b3JhZ2U6cj0hMX09bixvPXI/d2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKGUpOkFzKENzKCkpW2VdO3JldHVybiBudWxsPT1vP3dlLmNsb25lRGVlcChpKTp0KG8pfWZ1bmN0aW9uIG8odCxuLGk9e30pe2NvbnN0e2RlZmF1bHRWYWx1ZTpvLHVzZUxvY2FsU3RvcmFnZTphPSExLHVzZUxvY2F0aW9uUmVwbGFjZTpzPSExfT1pLGw9ZShuKTtpZihhKXdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0LGwpLGdzKCk7ZWxzZSBpZighd2UuaXNFcXVhbChuLHIodCx7dXNlTG9jYWxTdG9yYWdlOmF9KSkpaWYod2UuaXNFcXVhbChuLG8pKSEoZnVuY3Rpb24gYyh0KXtjb25zdCBlPUFzKENzKCkpO2RlbGV0ZSBlW3RdLGtzKExzKGUpKX0pKHQpO2Vsc2V7Y29uc3QgZT1BcyhDcygpKTtlW3RdPWwsa3MoTHMoZSkscyl9fXJldHVybntnZXQ6cixzZXQ6byxnZXRJbml0aWFsaXplcjpmdW5jdGlvbiBhKHQsZSl7Y29uc3Qgbz1PYmplY3QuYXNzaWduKHtkZWZhdWx0VmFsdWU6ZS5kZWZhdWx0VmFsdWUscG9seW1lclByb3BlcnR5OnQsdXNlTG9jYWxTdG9yYWdlOiExfSxlKTtyZXR1cm4gZnVuY3Rpb24oKXtjb25zdCBlPUpzKHRoaXMsdCksYT0oKT0+e2NvbnN0IHQ9cihlLG8pO3dlLmlzRXF1YWwodCx0aGlzW28ucG9seW1lclByb3BlcnR5XSl8fCh0aGlzW28ucG9seW1lclByb3BlcnR5XT10KX0scz0oby51c2VMb2NhbFN0b3JhZ2U/bXM6ZnMpKCgoKT0+YSgpKSk7cmV0dXJuIG8udXNlTG9jYWxTdG9yYWdlP2kucHVzaChzKTpuLnB1c2gocyksYSgpLHRoaXNbby5wb2x5bWVyUHJvcGVydHldfX0sZ2V0T2JzZXJ2ZXI6ZnVuY3Rpb24gcyh0LGUpe2NvbnN0IG49T2JqZWN0LmFzc2lnbih7ZGVmYXVsdFZhbHVlOmUuZGVmYXVsdFZhbHVlLHBvbHltZXJQcm9wZXJ0eTp0LHVzZUxvY2FsU3RvcmFnZTohMX0sZSk7cmV0dXJuIGZ1bmN0aW9uKCl7byhKcyh0aGlzLHQpLHRoaXNbbi5wb2x5bWVyUHJvcGVydHldLG4pfX0sZGlzcG9zZUJpbmRpbmc6ZnVuY3Rpb24gbCgpe24uZm9yRWFjaCgodD0+X3ModCkpKSxpLmZvckVhY2goKHQ9PnlzKHQpKSl9fX1mdW5jdGlvbiBKcyh0LGUpe2NvbnN0IG49dC5kaXNhbWJpZ3VhdG9yO3JldHVybihudWxsPT1uP1tlXTpbbixlXSkuam9pbigiLiIpfWxldCBRcz1jbGFzcyBleHRlbmRzIHlle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl90YWdGaWx0ZXI9SXMoInRhZ0ZpbHRlciIse2RlZmF1bHRWYWx1ZToiIix1c2VMb2NhbFN0b3JhZ2U6ITEscG9seW1lclByb3BlcnR5OiJfdGFnRmlsdGVyIn0pLmNhbGwodGhpcyksdGhpcy5fdGFnRmlsdGVyT2JzZXJ2ZXI9T3MoInRhZ0ZpbHRlciIse2RlZmF1bHRWYWx1ZToiIix1c2VMb2NhbFN0b3JhZ2U6ITEscG9seW1lclByb3BlcnR5OiJfdGFnRmlsdGVyIn0pfV9jb21wdXRlVGFnRmlsdGVyKCl7cmV0dXJuIHRoaXMuX3RhZ0ZpbHRlcn19O2Z1bmN0aW9uIHRsKHQpe2NvbnN0e21vZHVsZU5hbWU6ZSxzdHlsZUNvbnRlbnQ6bn09dCxpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRvbS1tb2R1bGUiKSxyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIiksbz1bXTt0LnN0eWxlRGVwZW5kZW5jaWVzJiZ0LnN0eWxlRGVwZW5kZW5jaWVzLmZvckVhY2goKHQ9Pntjb25zdCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7ZS5zZXRBdHRyaWJ1dGUoImluY2x1ZGUiLHQpLG8ucHVzaChlKX0pKTtjb25zdCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7T2JqZWN0LmFzc2lnbihhLHt0ZXh0Q29udGVudDpufSksby5mb3JFYWNoKCh0PT57ci5jb250ZW50LmFwcGVuZENoaWxkKHQpfSkpLHIuY29udGVudC5hcHBlbmRDaGlsZChhKSxpLmFwcGVuZENoaWxkKHIpLGkucmVnaXN0ZXIoZSl9UXMudGVtcGxhdGU9X2VgCiAgICA8cGFwZXItaW5wdXQKICAgICAgbm8tbGFiZWwtZmxvYXQ9IiIKICAgICAgbGFiZWw9IkZpbHRlciB0YWdzIChyZWd1bGFyIGV4cHJlc3Npb25zIHN1cHBvcnRlZCkiCiAgICAgIHZhbHVlPSJ7e190YWdGaWx0ZXJ9fSIKICAgICAgY2xhc3M9InNlYXJjaC1pbnB1dCIKICAgID4KICAgICAgPGlyb24taWNvbiBwcmVmaXg9IiIgaWNvbj0ic2VhcmNoIiBzbG90PSJwcmVmaXgiPjwvaXJvbi1pY29uPgogICAgPC9wYXBlci1pbnB1dD4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIG1hcmdpbjogMTBweCA1cHggMTBweCAxMHB4OwogICAgICB9CiAgICA8L3N0eWxlPgogIGAsdChbbyh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwLGNvbXB1dGVkOiJfY29tcHV0ZVRhZ0ZpbHRlcihfdGFnRmlsdGVyKSJ9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sUXMucHJvdG90eXBlLCJ0YWdGaWx0ZXIiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmcsb2JzZXJ2ZXI6Il90YWdGaWx0ZXJPYnNlcnZlciJ9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sUXMucHJvdG90eXBlLCJfdGFnRmlsdGVyIix2b2lkIDApLFFzPXQoW2koInRmLXRhZy1maWx0ZXJlciIpXSxRcyksdGwoe21vZHVsZU5hbWU6ImRhc2hib2FyZC1zdHlsZSIsc3R5bGVEZXBlbmRlbmNpZXM6WyJpcm9uLWZsZXgiXSxzdHlsZUNvbnRlbnQ6IlxuICAgICAgOmhvc3Qge1xuICAgICAgICAtLXNpZGViYXItdmVydGljYWwtcGFkZGluZzogMTVweDtcbiAgICAgICAgLS1zaWRlYmFyLWxlZnQtcGFkZGluZzogMzBweDtcbiAgICAgIH1cblxuICAgICAgW3Nsb3Q9J3NpZGViYXInXSB7XG4gICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMHB4O1xuICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47XG4gICAgICAgIHBhZGRpbmc6IDVweCAwO1xuICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICAgIH1cblxuICAgICAgLnNldHRpbmdzIHtcbiAgICAgICAgbWluLWhlaWdodDogNTBweDtcbiAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuO1xuICAgICAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtO1xuICAgICAgfVxuXG4gICAgICAucnVucy1zZWxlY3RvciB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZ3JvdzogMTtcbiAgICAgICAgbWluLWhlaWdodDogMjAwcHg7XG4gICAgICB9XG5cbiAgICAgIHRmLXJ1bnMtc2VsZWN0b3Ige1xuICAgICAgICBmbGV4LWdyb3c6IDE7XG4gICAgICAgIGZsZXgtc2hyaW5rOiAxO1xuICAgICAgICBsZWZ0OiB2YXIoLS1zaWRlYmFyLWxlZnQtcGFkZGluZyk7XG4gICAgICAgIG1heC1oZWlnaHQ6IGNhbGMoMTAwJSAtIHZhcigtLXNpZGViYXItdmVydGljYWwtcGFkZGluZykgKiAyKTtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICByaWdodDogMDtcbiAgICAgIH1cblxuICAgICAgLnNlYXJjaC1pbnB1dCB7XG4gICAgICAgIG1hcmdpbjogMTBweCA1cHggMCAxMHB4O1xuICAgICAgfVxuXG4gICAgICAuc2lkZWJhci1zZWN0aW9uIHtcbiAgICAgICAgYm9yZGVyLXRvcDogc29saWQgMXB4IHZhcigtLXRiLXVpLWJvcmRlcik7XG4gICAgICAgIG1hcmdpbi1yaWdodDogMTBweDtcbiAgICAgICAgcGFkZGluZzogdmFyKC0tc2lkZWJhci12ZXJ0aWNhbC1wYWRkaW5nKSAwXG4gICAgICAgICAgdmFyKC0tc2lkZWJhci12ZXJ0aWNhbC1wYWRkaW5nKSB2YXIoLS1zaWRlYmFyLWxlZnQtcGFkZGluZyk7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIH1cblxuICAgICAgLnNpZGViYXItc2VjdGlvbjpmaXJzdC1vZi10eXBlIHtcbiAgICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgfVxuXG4gICAgICAuc2lkZWJhci1zZWN0aW9uIHBhcGVyLWJ1dHRvbiB7XG4gICAgICAgIG1hcmdpbjogNXB4O1xuICAgICAgfVxuXG4gICAgICAuc2lkZWJhci1zZWN0aW9uIHBhcGVyLWJ1dHRvbjpmaXJzdC1vZi10eXBlIHtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDtcbiAgICAgIH1cblxuICAgICAgLnNpZGViYXItc2VjdGlvbiBwYXBlci1idXR0b246bGFzdC1vZi10eXBlIHtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAwICFpbXBvcnRhbnQ7XG4gICAgICB9XG5cbiAgICAgIC5zaWRlYmFyLXNlY3Rpb24gPiA6Zmlyc3QtY2hpbGQge1xuICAgICAgICBtYXJnaW4tdG9wOiAwO1xuICAgICAgICBwYWRkaW5nLXRvcDogMDtcbiAgICAgIH1cblxuICAgICAgLnNpZGViYXItc2VjdGlvbiA+IDpsYXN0LWNoaWxkIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgICAgcGFkZGluZy1ib3R0b206IDA7XG4gICAgICB9XG5cbiAgICAgIC5zaWRlYmFyLXNlY3Rpb24gaDMge1xuICAgICAgICBjb2xvcjogdmFyKC0tdGItc2Vjb25kYXJ5LXRleHQtY29sb3IpO1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgICAgICBtYXJnaW46IDEwcHggMCA1cHg7XG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgfVxuXG4gICAgICBwYXBlci1jaGVja2JveCB7XG4gICAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvcjogdmFyKC0tdGItdWktZGFyay1hY2NlbnQpO1xuICAgICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tdGItdWktZGFyay1hY2NlbnQpO1xuICAgICAgICBmb250LXNpemU6IDE1cHg7XG4gICAgICAgIG1hcmdpbi10b3A6IDVweDtcbiAgICAgIH1cbiAgIn0pO2NvbnN0IGVsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7ZnVuY3Rpb24gbmwodCl7cmV0dXJuIGNsYXNzIGV4dGVuZHMgdHtjb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5fbWF5YmVTZXREYXJrTW9kZSgpLHRoaXMub2JzZXJ2ZXI9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoKHQ9Pnt0LnNvbWUoKHQ9PiJjbGFzcyI9PT10LmF0dHJpYnV0ZU5hbWUpKSYmdGhpcy5fbWF5YmVTZXREYXJrTW9kZSgpfSkpLHRoaXMub2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudC5ib2R5LHthdHRyaWJ1dGVzOiEwfSl9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXt2YXIgdDtzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLG51bGw9PT0odD10aGlzLm9ic2VydmVyKXx8dm9pZCAwPT09dHx8dC5kaXNjb25uZWN0KCl9X21heWJlU2V0RGFya01vZGUoKXt0aGlzLmNsYXNzTGlzdC50b2dnbGUoImRhcmstbW9kZSIsZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoImRhcmstbW9kZSIpKX19fWVsLnNldEF0dHJpYnV0ZSgiaXMiLCJjdXN0b20tc3R5bGUiKSxlbC50ZXh0Q29udGVudD0iXG4gIDpyb290IHtcbiAgICAtLXRiLW9yYW5nZS13ZWFrOiAjZmZhNzI2O1xuICAgIC0tdGItb3JhbmdlLXN0cm9uZzogI2Y1N2MwMDtcbiAgICAtLXRiLW9yYW5nZS1kYXJrOiAjZGM3MzIwO1xuICAgIC0tdGItZ3JleS1kYXJrZXI6ICNlMmUyZTI7XG4gICAgLS10Yi1ncmV5LWxpZ2h0ZXI6ICNmM2YzZjM7XG4gICAgLS10Yi11aS1kYXJrLWFjY2VudDogIzc1NzU3NTtcbiAgICAtLXRiLXVpLWxpZ2h0LWFjY2VudDogI2UwZTBlMDtcbiAgICAtLXRiLXVpLWJvcmRlcjogdmFyKC0tcGFwZXItZ3JleS0zMDApO1xuICAgIC0tdGItZ3JhcGgtZmFkZWQ6ICNlMGQ0YjM7XG4gICAgLS10Yi1zZWNvbmRhcnktdGV4dC1jb2xvcjogdmFyKC0tcGFwZXItZ3JleS04MDApO1xuICAgIC0tdGItcmFpc2VkLWJ1dHRvbi1zaGFkb3ctY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4yKTtcbiAgICAtLXByaW1hcnktYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgICAtLXNlY29uZGFyeS1iYWNrZ3JvdW5kLWNvbG9yOiAjZTllOWU5O1xuICAgIC0tdGItbGF5b3V0LWJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7XG4gIH1cblxuICA6cm9vdCAuZGFyay1tb2RlIHtcbiAgICAtLXRiLXVpLWJvcmRlcjogdmFyKC0tcGFwZXItZ3JleS03MDApO1xuICAgIC0tdGItdWktZGFyay1hY2NlbnQ6IHZhcigtLXBhcGVyLWdyZXktNDAwKTtcbiAgICAtLXRiLXVpLWxpZ2h0LWFjY2VudDogdmFyKC0tcGFwZXItZ3JleS02MDApO1xuICAgIC0tdGItc2Vjb25kYXJ5LXRleHQtY29sb3I6IHZhcigtLXBhcGVyLWdyZXktNDAwKTtcbiAgICAtLXRiLXJhaXNlZC1idXR0b24tc2hhZG93LWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7XG4gICAgLS1wcmltYXJ5LXRleHQtY29sb3I6ICNmZmY7XG4gICAgLS1zZWNvbmRhcnktdGV4dC1jb2xvcjogdmFyKC0tcGFwZXItZ3JleS00MDApO1xuICAgIC0tcHJpbWFyeS1iYWNrZ3JvdW5kLWNvbG9yOiAjMzAzMDMwOyAgLyogbWF0ZXJpYWwgZ3JleSBBNDAwLiAqL1xuICAgIC0tc2Vjb25kYXJ5LWJhY2tncm91bmQtY29sb3I6ICMzYTNhM2E7XG4gICAgLS10Yi1sYXlvdXQtYmFja2dyb3VuZC1jb2xvcjogIzNhM2EzYTtcbiAgICAvKiBPdmVycmlkZXMgcGFwZXItbWF0ZXJpYWwgKi9cbiAgICAtLXNoYWRvdy1lbGV2YXRpb24tMmRwXy1fYm94LXNoYWRvdzogMCAycHggMnB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE0KSxcbiAgICAgIDAgMXB4IDVweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMiksXG4gICAgICAwIDNweCAxcHggLTJweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7XG4gIH1cbiIsZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChlbCksdGwoe21vZHVsZU5hbWU6InNjcm9sbGJhci1zdHlsZSIsc3R5bGVDb250ZW50OiJcbiAgICAuc2Nyb2xsYmFyOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7XG4gICAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgfVxuXG4gICAgLnNjcm9sbGJhcjo6LXdlYmtpdC1zY3JvbGxiYXIge1xuICAgICAgd2lkdGg6IDEwcHg7XG4gICAgfVxuXG4gICAgLnNjcm9sbGJhcjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIge1xuICAgICAgYm9yZGVyLXJhZGl1czogMTBweDtcbiAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAwIDJweCByZ2JhKDAsIDAsIDAsIDAuMyk7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1ncmV5LTUwMCk7XG4gICAgICBjb2xvcjogdmFyKC0tcGFwZXItZ3JleS05MDApO1xuICAgIH1cbiAgICAuc2Nyb2xsYmFyIHtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgfVxuICAifSk7bGV0IGlsPWNsYXNzIGV4dGVuZHMobmwoeWUpKXt9O2lsLnRlbXBsYXRlPV9lYAogICAgPGRpdiBpZD0ic2lkZWJhciI+CiAgICAgIDxzbG90IG5hbWU9InNpZGViYXIiPjwvc2xvdD4KICAgIDwvZGl2PgoKICAgIDxkaXYgaWQ9ImNlbnRlciI+CiAgICAgIDxzbG90IG5hbWU9ImNlbnRlciIgY2xhc3M9InNjb2xsYmFyIj48L3Nsb3Q+CiAgICA8L2Rpdj4KICAgIDxzdHlsZSBpbmNsdWRlPSJzY3JvbGxiYXItc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KCiAgICAgIDpob3N0KC5kYXJrLW1vZGUpIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1zZWNvbmRhcnktYmFja2dyb3VuZC1jb2xvcik7CiAgICAgIH0KCiAgICAgICNzaWRlYmFyIHsKICAgICAgICBmbGV4OiAwIDAgdmFyKC0tdGYtZGFzaGJvYXJkLWxheW91dC1zaWRlYmFyLWJhc2lzLCAyNSUpOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBtYXgtd2lkdGg6IHZhcigtLXRmLWRhc2hib2FyZC1sYXlvdXQtc2lkZWJhci1tYXgtd2lkdGgsIDM1MHB4KTsKICAgICAgICBtaW4td2lkdGg6IHZhcigtLXRmLWRhc2hib2FyZC1sYXlvdXQtc2lkZWJhci1taW4td2lkdGgsIDI3MHB4KTsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICB9CgogICAgICAjY2VudGVyIHsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIDo6c2xvdHRlZChbc2xvdD0nY2VudGVyJ10pIHsKICAgICAgICBjb250YWluOiBzdHJpY3Q7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgIH0KCiAgICAgIC50Zi1ncmFwaC1kYXNoYm9hcmQgI2NlbnRlciB7CiAgICAgICAgYmFja2dyb3VuZDogI2ZmZjsKICAgICAgfQogICAgPC9zdHlsZT4KICBgLGlsPXQoW2koInRmLWRhc2hib2FyZC1sYXlvdXQiKV0saWwpO2NvbnN0IHJsPSJURi5UZW5zb3JCb2FyZC5QYWdpbmF0ZWRWaWV3LmxpbWl0IjtsZXQgb2w9bnVsbDtjb25zdCBhbD1uZXcgU2V0O2Z1bmN0aW9uIHNsKHQpe2FsLmFkZCh0KX1mdW5jdGlvbiBsbCh0KXthbC5kZWxldGUodCl9ZnVuY3Rpb24gY2woKXtyZXR1cm4gbnVsbD09b2wmJihvbD1WcyhybCx7dXNlTG9jYWxTdG9yYWdlOiEwfSksKG51bGw9PW9sfHwhaXNGaW5pdGUob2wpfHxvbDw9MCkmJihvbD0xMikpLG9sfWNsYXNzIHVsIGV4dGVuZHMgeWV7dXBkYXRlQXJyYXlQcm9wKHQsZSxuKXtsZXQgaT10aGlzLmdldCh0KTtjb25zdCByPWU7aWYoIUFycmF5LmlzQXJyYXkocikpdGhyb3cgUmFuZ2VFcnJvcihgRXhwZWN0ZWQgbmV3IHZhbHVlIHRvICcke3R9JyB0byBiZSBhbiBhcnJheS5gKTtBcnJheS5pc0FycmF5KGkpfHwoaT1bXSx0aGlzLnNldCh0LGkpKTtjb25zdCBvPW5ldyBTZXQoci5tYXAoKCh0LGUpPT5uKHQsZSkpKSk7bGV0IGE9MCxzPTA7Zm9yKDthPGkubGVuZ3RoJiZzPHIubGVuZ3RoOylvLmhhcyhuKGlbYV0sYSkpPyhuKGlbYV0sYSk9PW4ocltzXSxzKT90aGlzLnNldChgJHt0fS4ke2F9YCxyW3NdKTp0aGlzLnNwbGljZSh0LGEsMCxyW3NdKSxzKyssYSsrKTp0aGlzLnNwbGljZSh0LGEsMSk7YTxpLmxlbmd0aCYmdGhpcy5zcGxpY2UodCxhKSxzPHIubGVuZ3RoJiZ0aGlzLnB1c2godCwuLi5yLnNsaWNlKHMpKX19Y2xhc3MgaGwgZXh0ZW5kcyB1bHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5hcz0iaXRlbSIsdGhpcy5fY29udGVudEFjdGl2ZT0hMCx0aGlzLl9kb21Cb290c3RyYXBwZWQ9ITEsdGhpcy5fY3Rvcj1udWxsLHRoaXMuX3JlbmRlcmVkSXRlbXM9W10sdGhpcy5fcmVuZGVyZWRUZW1wbGF0ZUluc3Q9bmV3IE1hcCx0aGlzLl9scnVDYWNoZWRJdGVtcz1uZXcgTWFwLHRoaXMuX2NhY2hlU2l6ZT0xMCx0aGlzLl9nZXRJdGVtS2V5PXQ9PkpTT04uc3RyaW5naWZ5KHQpLHRoaXMuX2lzQ29ubmVjdGVkPSExfWNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLl9pc0Nvbm5lY3RlZD0hMH1zZXRDYWNoZVNpemUodCl7dGhpcy5fY2FjaGVTaXplPXR9c2V0R2V0SXRlbUtleSh0KXt0aGlzLl9nZXRJdGVtS2V5PXR9dXBkYXRlRG9tKHQpe3RoaXMudXBkYXRlQXJyYXlQcm9wKCJfcmVuZGVyZWRJdGVtcyIsdCx0aGlzLl9nZXRJdGVtS2V5KX1fZW5zdXJlVGVtcGxhdGl6ZWQoKXtpZighdGhpcy5pc0Nvbm5lY3RlZClyZXR1cm4hMTtpZighdGhpcy5fY3Rvcil7Y29uc3QgdD10aGlzLnF1ZXJ5U2VsZWN0b3IoInRlbXBsYXRlIik7dGhpcy5fY3Rvcj1Ycih0LHRoaXMse3BhcmVudE1vZGVsOiEwLGluc3RhbmNlUHJvcHM6e1t0aGlzLmFzXTohMCxhY3RpdmU6dGhpcy5fY29udGVudEFjdGl2ZX0sZm9yd2FyZEhvc3RQcm9wOmZ1bmN0aW9uKHQsZSl7dGhpcy5fcmVuZGVyZWRUZW1wbGF0ZUluc3QuZm9yRWFjaCgobj0+e24uZm9yd2FyZEhvc3RQcm9wKHQsZSl9KSl9fSl9cmV0dXJuITB9X2Jvb3RzdHJhcERvbSgpe3RoaXMuX2Vuc3VyZVRlbXBsYXRpemVkKCkmJiF0aGlzLl9kb21Cb290c3RyYXBwZWQmJihuZXcgTXV0YXRpb25PYnNlcnZlcigodD0+e2Zvcihjb25zdCBlIG9mIHQpaWYoImNoaWxkTGlzdCI9PT1lLnR5cGUpZm9yKGNvbnN0IHQgb2YgQXJyYXkuZnJvbShlLmFkZGVkTm9kZXMpKXQgaW5zdGFuY2VvZiBFbGVtZW50JiZ0LnNldEF0dHJpYnV0ZSgic2xvdCIsIml0ZW1zIil9KSkub2JzZXJ2ZSh0aGlzLHtjaGlsZExpc3Q6ITB9KSxBcnJheS5mcm9tKHRoaXMuY2hpbGRyZW4pLmZvckVhY2goKHQ9Pnt0aGlzLnJlbW92ZUNoaWxkKHQpfSkpLHRoaXMuX2xydUNhY2hlZEl0ZW1zLmNsZWFyKCksdGhpcy5fcmVuZGVyZWRJdGVtcy5mb3JFYWNoKCgodCxlKT0+dGhpcy5faW5zZXJ0SXRlbSh0LGUpKSksdGhpcy5fZG9tQm9vdHN0cmFwcGVkPSEwKX1fdXBkYXRlQWN0aXZlKCl7dGhpcy5fZG9tQm9vdHN0cmFwcGVkJiZBcnJheS5mcm9tKHRoaXMuX3JlbmRlcmVkVGVtcGxhdGVJbnN0LnZhbHVlcygpKS5mb3JFYWNoKCh0PT57dC5ub3RpZnlQYXRoKCJhY3RpdmUiLHRoaXMuX2NvbnRlbnRBY3RpdmUpfSkpfV91cGRhdGVEb20odCl7aWYodGhpcy5fZG9tQm9vdHN0cmFwcGVkJiYiX3JlbmRlcmVkSXRlbXMiIT10LnBhdGgmJiJfcmVuZGVyZWRJdGVtcy5sZW5ndGgiIT10LnBhdGgpaWYoIl9yZW5kZXJlZEl0ZW1zLnNwbGljZXMiPT09dC5wYXRoKXQudmFsdWUuaW5kZXhTcGxpY2VzLmZvckVhY2goKHQ9Pntjb25zdHtpbmRleDplLGFkZGVkQ291bnQ6bixvYmplY3Q6aSxyZW1vdmVkOnJ9PXQ7ci5mb3JFYWNoKCh0PT57dGhpcy5fcmVtb3ZlSXRlbSh0LHRoaXMuY2hpbGRyZW5bZV0pfSkpLGkuc2xpY2UoZSxlK24pLmZvckVhY2goKCh0LG4pPT50aGlzLl9pbnNlcnRJdGVtKHQsZStuKSkpLHRoaXMuX3RyaW1DYWNoZSgpfSkpO2Vsc2V7Y29uc3QgZT10aGlzLl9nZXRJdGVtS2V5KHQudmFsdWUpO3RoaXMuX3JlbmRlcmVkVGVtcGxhdGVJbnN0LmhhcyhlKT90aGlzLl9yZW5kZXJlZFRlbXBsYXRlSW5zdC5nZXQoZSkubm90aWZ5UGF0aCh0aGlzLmFzLHQudmFsdWUpOmNvbnNvbGUud2FybihgRXhwZWN0ZWQgJyR7ZX0nIHRvIGV4aXN0IGluIHRoZSBET00gYnV0IGNvdWxkIG5vdCBmaW5kIG9uZS5gKX19X2luc2VydEl0ZW0odCxlKXtpZighdGhpcy5fZW5zdXJlVGVtcGxhdGl6ZWQoKSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIHRlbXBsYXRpemVkIGJlZm9yZSBpbnNlcnRpbmcgYW4gaXRlbSIpO2xldCBuO2NvbnN0IGk9dGhpcy5fZ2V0SXRlbUtleSh0KTtpZih0aGlzLl9scnVDYWNoZWRJdGVtcy5oYXMoaSkpbj10aGlzLl9scnVDYWNoZWRJdGVtcy5nZXQoaSksdGhpcy5fbHJ1Q2FjaGVkSXRlbXMuZGVsZXRlKGkpLHRoaXMuX3JlbmRlcmVkVGVtcGxhdGVJbnN0LmdldChpKS5ub3RpZnlQYXRoKCJhY3RpdmUiLHRoaXMuX2NvbnRlbnRBY3RpdmUpO2Vsc2V7Y29uc3QgZT1uZXcgdGhpcy5fY3Rvcih7W3RoaXMuYXNdOnQsYWN0aXZlOnRoaXMuX2NvbnRlbnRBY3RpdmV9KTtuPWUucm9vdCx0aGlzLl9yZW5kZXJlZFRlbXBsYXRlSW5zdC5zZXQoaSxlKX10aGlzLmNoaWxkcmVuW2VdP3RoaXMuaW5zZXJ0QmVmb3JlKG4sdGhpcy5jaGlsZHJlbltlXSk6KChuLm5vZGVUeXBlPT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREU/QXJyYXkuZnJvbShuLmNoaWxkcmVuKTpbbl0pLmZvckVhY2goKHQ9PnQuc2V0QXR0cmlidXRlKCJzbG90IiwiaXRlbXMiKSkpLHRoaXMuYXBwZW5kQ2hpbGQobikpfV9yZW1vdmVJdGVtKHQsZSl7ZS5wYXJlbnROb2RlJiZlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZSk7Y29uc3Qgbj10aGlzLl9nZXRJdGVtS2V5KHQpO3RoaXMuX2xydUNhY2hlZEl0ZW1zLnNldChuLGUpLHRoaXMuX3JlbmRlcmVkVGVtcGxhdGVJbnN0LmdldChuKS5ub3RpZnlQYXRoKCJhY3RpdmUiLCExKX1fdHJpbUNhY2hlKCl7Zm9yKDt0aGlzLl9scnVDYWNoZWRJdGVtcy5zaXplPnRoaXMuX2NhY2hlU2l6ZTspe2NvbnN0W3RdPXRoaXMuX2xydUNhY2hlZEl0ZW1zLmtleXMoKTt0aGlzLl9scnVDYWNoZWRJdGVtcy5kZWxldGUodCksdGhpcy5fcmVuZGVyZWRUZW1wbGF0ZUluc3QuZGVsZXRlKHQpfX19dChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0saGwucHJvdG90eXBlLCJhcyIsdm9pZCAwKSx0KFtvKHt0eXBlOkFycmF5fSksZSgiZGVzaWduOnR5cGUiLEFycmF5KV0saGwucHJvdG90eXBlLCJpdGVtcyIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGhsLnByb3RvdHlwZSwiX2NvbnRlbnRBY3RpdmUiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLGhsLnByb3RvdHlwZSwiX2RvbUJvb3RzdHJhcHBlZCIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxobC5wcm90b3R5cGUsIl9jdG9yIix2b2lkIDApLHQoW28oe3R5cGU6QXJyYXl9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSxobC5wcm90b3R5cGUsIl9yZW5kZXJlZEl0ZW1zIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLGhsLnByb3RvdHlwZSwiX3JlbmRlcmVkVGVtcGxhdGVJbnN0Iix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLGhsLnByb3RvdHlwZSwiX2xydUNhY2hlZEl0ZW1zIix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyfSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLGhsLnByb3RvdHlwZSwiX2NhY2hlU2l6ZSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxobC5wcm90b3R5cGUsIl9nZXRJdGVtS2V5Iix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxobC5wcm90b3R5cGUsIl9pc0Nvbm5lY3RlZCIsdm9pZCAwKSx0KFthKCJfaXNDb25uZWN0ZWQiKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLGhsLnByb3RvdHlwZSwiX2Jvb3RzdHJhcERvbSIsbnVsbCksdChbYSgiX2NvbnRlbnRBY3RpdmUiKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLGhsLnByb3RvdHlwZSwiX3VwZGF0ZUFjdGl2ZSIsbnVsbCksdChbYSgiX3JlbmRlcmVkSXRlbXMuKiIsIl9kb21Cb290c3RyYXBwZWQiKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbT2JqZWN0XSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLGhsLnByb3RvdHlwZSwiX3VwZGF0ZURvbSIsbnVsbCksdChbYSgiX2NhY2hlU2l6ZSIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0saGwucHJvdG90eXBlLCJfdHJpbUNhY2hlIixudWxsKTtsZXQgZGw9Y2xhc3MgZXh0ZW5kcyBobHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5kaXNhYmxlUGFnaW5hdGlvbj0hMSx0aGlzLmdldENhdGVnb3J5SXRlbUtleT10PT5KU09OLnN0cmluZ2lmeSh0KSx0aGlzLl9saW1pdD0xMix0aGlzLl9hY3RpdmVJbmRleD0wLHRoaXMuX3BhZ2VJbnB1dFJhd1ZhbHVlPSIiLHRoaXMuX3BhZ2VJbnB1dEZvY3VzZWQ9ITF9X2NvbXB1dGVDb3VudCgpe3JldHVybiB0aGlzLmNhdGVnb3J5Lml0ZW1zLmxlbmd0aH1nZXQgX2hhc011bHRpcGxlKCl7cmV0dXJuIHRoaXMuX2NvdW50PjF9X3RvZ2dsZVBhbmUoKXt0aGlzLm9wZW5lZD0hdGhpcy5vcGVuZWR9X2NoYW5nZUNvbnRlbnRBY3RpdmUodCl7dGhpcy5fY29udGVudEFjdGl2ZT10fV9vblBhbmVSZW5kZXJlZENoYW5nZWQodCxlKXt0JiZ0IT09ZSYmdGhpcy4kLmlmUmVuZGVyZWQucmVuZGVyKCl9X2NvbXB1dGVQYW5lUmVuZGVyZWQodCl7cmV0dXJuISh0Lm1ldGFkYXRhLnR5cGU9PT12ci5TRUFSQ0hfUkVTVUxUUyYmIiI9PT10Lm5hbWUpfWdldCBfaXRlbXNSZW5kZXJlZCgpe3JldHVybiB0aGlzLl9wYW5lUmVuZGVyZWQmJnRoaXMub3BlbmVkfV9jb21wdXRlSXNTZWFyY2hSZXN1bHRzKHQpe3JldHVybiB0PT09dnIuU0VBUkNIX1JFU1VMVFN9X2NvbXB1dGVJc0ludmFsaWRTZWFyY2hSZXN1bHRzKHQpe3JldHVybiB0LnR5cGU9PT12ci5TRUFSQ0hfUkVTVUxUUyYmIXQudmFsaWRSZWdleH1fY29tcHV0ZUlzVW5pdmVyc2FsU2VhcmNoUXVlcnkodCl7cmV0dXJuIHQudHlwZT09PXZyLlNFQVJDSF9SRVNVTFRTJiZ0LnVuaXZlcnNhbFJlZ2V4fV9pc0NvbXBvc2l0ZVNlYXJjaCgpe2NvbnN0e3R5cGU6dCxjb21wb3NpdGVTZWFyY2g6ZX09dGhpcy5jYXRlZ29yeS5tZXRhZGF0YTtyZXR1cm4gZSYmdD09PXZyLlNFQVJDSF9SRVNVTFRTfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLm9wZW5lZD1udWxsPT10aGlzLmluaXRpYWxPcGVuZWR8fHRoaXMuaW5pdGlhbE9wZW5lZCx0aGlzLl9saW1pdExpc3RlbmVyPSgpPT57dGhpcy5zZXQoIl9saW1pdCIsY2woKSl9LHNsKHRoaXMuX2xpbWl0TGlzdGVuZXIpLHRoaXMuX2xpbWl0TGlzdGVuZXIoKX1kZXRhY2hlZCgpe2xsKHRoaXMuX2xpbWl0TGlzdGVuZXIpfV91cGRhdGVSZW5kZXJlZEl0ZW1zKCl7dmFyIHQ9dGhpcy5fbGltaXQsZT10aGlzLmRpc2FibGVQYWdpbmF0aW9uO2lmKCF0aGlzLl9pdGVtc1JlbmRlcmVkKXJldHVybjtjb25zdCBuPU1hdGguZmxvb3IodGhpcy5fYWN0aXZlSW5kZXgvdCksaT10aGlzLmNhdGVnb3J5Lml0ZW1zfHxbXSxyPWU/aTppLnNsaWNlKG4qdCwobisxKSp0KTt0aGlzLnVwZGF0ZURvbShyKX1fbGltaXRDaGFuZ2VkKHQpe3RoaXMuc2V0Q2FjaGVTaXplKDIqdCl9X2dldENhdGVnb3J5SXRlbUtleUNoYW5nZWQoKXt0aGlzLnNldEdldEl0ZW1LZXkodGhpcy5nZXRDYXRlZ29yeUl0ZW1LZXkpfWdldCBfY3VycmVudFBhZ2UoKXtyZXR1cm4gTWF0aC5mbG9vcih0aGlzLl9hY3RpdmVJbmRleC90aGlzLl9saW1pdCkrMX1fY29tcHV0ZVBhZ2VDb3VudCh0LGUpe3JldHVybiB0aGlzLmNhdGVnb3J5P01hdGguY2VpbCh0aGlzLmNhdGVnb3J5Lml0ZW1zLmxlbmd0aC9lKTowfWdldCBfbXVsdGlwbGVQYWdlc0V4aXN0KCl7cmV0dXJuIXRoaXMuZGlzYWJsZVBhZ2luYXRpb24mJnRoaXMuX3BhZ2VDb3VudD4xfWdldCBfaGFzUHJldmlvdXNQYWdlKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnRQYWdlPjF9Z2V0IF9oYXNOZXh0UGFnZSgpe3JldHVybiB0aGlzLl9jdXJyZW50UGFnZTx0aGlzLl9wYWdlQ291bnR9X2NvbXB1dGVJbnB1dFdpZHRoKHQpe3JldHVybmBjYWxjKCR7dC50b1N0cmluZygpLmxlbmd0aH1lbSArIDIwcHgpYH1fc2V0QWN0aXZlSW5kZXgodCl7Y29uc3QgZT0odGhpcy5jYXRlZ29yeS5pdGVtc3x8W10pLmxlbmd0aC0xO3Q+ZSYmKHQ9ZSksdDwwJiYodD0wKSx0aGlzLnNldCgiX2FjdGl2ZUluZGV4Iix0KX1fY2xhbXBBY3RpdmVJbmRleCgpe3RoaXMuX3NldEFjdGl2ZUluZGV4KHRoaXMuX2FjdGl2ZUluZGV4KX1fcGVyZm9ybVByZXZpb3VzUGFnZSgpe3RoaXMuX3NldEFjdGl2ZUluZGV4KHRoaXMuX2FjdGl2ZUluZGV4LXRoaXMuX2xpbWl0KX1fcGVyZm9ybU5leHRQYWdlKCl7dGhpcy5fc2V0QWN0aXZlSW5kZXgodGhpcy5fYWN0aXZlSW5kZXgrdGhpcy5fbGltaXQpfV9jb21wdXRlUGFnZUlucHV0VmFsdWUodCxlLG4pe3JldHVybiB0P2U6bi50b1N0cmluZygpfV9oYW5kbGVQYWdlSW5wdXRFdmVudCh0KXt0aGlzLnNldCgiX3BhZ2VJbnB1dFJhd1ZhbHVlIix0LnRhcmdldC52YWx1ZSk7Y29uc3QgZT1OdW1iZXIodC50YXJnZXQudmFsdWV8fE5hTik7aWYoaXNOYU4oZSkpcmV0dXJuO2NvbnN0IG49TWF0aC5tYXgoMSxNYXRoLm1pbihlLHRoaXMuX3BhZ2VDb3VudCkpLTE7dGhpcy5fc2V0QWN0aXZlSW5kZXgodGhpcy5fbGltaXQqbil9X2hhbmRsZVBhZ2VDaGFuZ2VFdmVudCgpe3RoaXMuc2V0KCJfcGFnZUlucHV0UmF3VmFsdWUiLHRoaXMuX2N1cnJlbnRQYWdlLnRvU3RyaW5nKCkpfV9oYW5kbGVQYWdlRm9jdXNFdmVudCgpe3RoaXMuc2V0KCJfcGFnZUlucHV0UmF3VmFsdWUiLHRoaXMuX3BhZ2VJbnB1dFZhbHVlKSx0aGlzLnNldCgiX3BhZ2VJbnB1dEZvY3VzZWQiLCEwKX1faGFuZGxlUGFnZUJsdXJFdmVudCgpe3RoaXMuc2V0KCJfcGFnZUlucHV0Rm9jdXNlZCIsITEpfV91cGRhdGVQYWdlSW5wdXRWYWx1ZSh0KXtjb25zdCBlPXRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIjcGFnZS1pbnB1dCBpbnB1dCIpO2UmJihlLnZhbHVlPXQpfV91cGRhdGVJbnB1dFdpZHRoKCl7dGhpcy51cGRhdGVTdHlsZXMoeyItLXRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3LXBhZ2UtaW5wdXQtd2lkdGgiOnRoaXMuX2lucHV0V2lkdGh9KX19O2RsLnRlbXBsYXRlPV9lYAogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19wYW5lUmVuZGVyZWRdXSIgaWQ9ImlmUmVuZGVyZWQiPgogICAgICA8YnV0dG9uIGNsYXNzPSJoZWFkaW5nIiBvbi10YXA9Il90b2dnbGVQYW5lIiBvcGVuLWJ1dHRvbiQ9Iltbb3BlbmVkXV0iPgogICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNTZWFyY2hSZXN1bHRzXV0iPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzQ29tcG9zaXRlU2VhcmNoKGNhdGVnb3J5KV1dIj4KICAgICAgICAgICAgICA8c3Bhbj5UYWdzIG1hdGNoaW5nIG11bHRpcGxlIGV4cGVyaW1lbnRzPC9zcGFuPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNJbnZhbGlkU2VhcmNoUmVzdWx0c11dIj4KICAgICAgICAgICAgICAgIDxzcGFuCiAgICAgICAgICAgICAgICAgID4mbmJzcDs8c3Ryb25nPihtYWxmb3JtZWQgcmVndWxhciBleHByZXNzaW9uKTwvc3Ryb25nPjwvc3BhbgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2lzQ29tcG9zaXRlU2VhcmNoKGNhdGVnb3J5KV1dIj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGlnaHQiPlRhZ3MgbWF0Y2hpbmcgLzwvc3Bhbj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY2F0ZWdvcnktbmFtZSIgdGl0bGUkPSJbW2NhdGVnb3J5Lm5hbWVdXSIKICAgICAgICAgICAgICAgID5bW2NhdGVnb3J5Lm5hbWVdXTwvc3BhbgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGlnaHQiPi88L3NwYW4+CiAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1VuaXZlcnNhbFNlYXJjaFF1ZXJ5XV0iPgogICAgICAgICAgICAgICAgPHNwYW4+IChhbGwgdGFncyk8L3NwYW4+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzSW52YWxpZFNlYXJjaFJlc3VsdHNdXSI+CiAgICAgICAgICAgICAgICA8c3Bhbj4gPHN0cm9uZz4obWFsZm9ybWVkIHJlZ3VsYXIgZXhwcmVzc2lvbik8L3N0cm9uZz48L3NwYW4+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9pc1NlYXJjaFJlc3VsdHNdXSI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjYXRlZ29yeS1uYW1lIiB0aXRsZSQ9IltbY2F0ZWdvcnkubmFtZV1dIgogICAgICAgICAgICAgID5bW2NhdGVnb3J5Lm5hbWVdXTwvc3BhbgogICAgICAgICAgICA+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvc3Bhbj4KICAgICAgICA8c3BhbiBjbGFzcz0iY291bnQiPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNNdWx0aXBsZV1dIj4KICAgICAgICAgICAgPHNwYW4+W1tfY291bnRdXTwvc3Bhbj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8aXJvbi1pY29uIGljb249ImV4cGFuZC1tb3JlIiBjbGFzcz0iZXhwYW5kLWFycm93Ij48L2lyb24taWNvbj4KICAgICAgICA8L3NwYW4+CiAgICAgIDwvYnV0dG9uPgogICAgICA8IS0tIFRPRE8oc3RlcGhhbndsZWUpOiBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLiBGb3Igc29tZSByZWFzb24sCiAgICAgICAgdHJhbnNpdGlvbmVuZCB0aGF0IHRoZSBpcm9uLWNvbGxhcHNlIHJlbGllcyBvbiBzb21ldGltZXMgZG9lcyBub3QKICAgICAgICB0cmlnZ2VyIHdoZW4gcmVuZGVyaW5nIGEgY2hhcnQgd2l0aCBhIHNwaW5uZXIuIEEgdG95IGV4YW1wbGUgY2Fubm90CiAgICAgICAgcmVwcm9kdWNlIHRoaXMgYnVnLiAtLT4KICAgICAgPGlyb24tY29sbGFwc2Ugb3BlbmVkPSJbW29wZW5lZF1dIiBuby1hbmltYXRpb249IiI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29udGVudCI+CiAgICAgICAgICA8c3BhbiBpZD0idG9wLW9mLWNvbnRhaW5lciI+PC9zcGFuPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19tdWx0aXBsZVBhZ2VzRXhpc3RdXSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJpZy1wYWdlLWJ1dHRvbnMiIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAxMHB4OyI+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgICAgICAgb24tdGFwPSJfcGVyZm9ybVByZXZpb3VzUGFnZSIKICAgICAgICAgICAgICAgIGRpc2FibGVkJD0iW1shX2hhc1ByZXZpb3VzUGFnZV1dIgogICAgICAgICAgICAgICAgPlByZXZpb3VzIHBhZ2U8L3BhcGVyLWJ1dHRvbgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgICBvbi10YXA9Il9wZXJmb3JtTmV4dFBhZ2UiCiAgICAgICAgICAgICAgICBkaXNhYmxlZCQ9IltbIV9oYXNOZXh0UGFnZV1dIgogICAgICAgICAgICAgICAgPk5leHQgcGFnZTwvcGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CgogICAgICAgICAgPGRpdiBpZD0iaXRlbXMiPgogICAgICAgICAgICA8c2xvdCBuYW1lPSJpdGVtcyI+PC9zbG90PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX211bHRpcGxlUGFnZXNFeGlzdF1dIj4KICAgICAgICAgICAgPGRpdiBpZD0iY29udHJvbHMtY29udGFpbmVyIj4KICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHBhZGRpbmc6IDAgNXB4Ij4KICAgICAgICAgICAgICAgIFBhZ2UKICAgICAgICAgICAgICAgIDxwYXBlci1pbnB1dAogICAgICAgICAgICAgICAgICBpZD0icGFnZS1pbnB1dCIKICAgICAgICAgICAgICAgICAgdHlwZT0ibnVtYmVyIgogICAgICAgICAgICAgICAgICBuby1sYWJlbC1mbG9hdD0iIgogICAgICAgICAgICAgICAgICBtaW49IjEiCiAgICAgICAgICAgICAgICAgIG1heD0iW1tfcGFnZUNvdW50XV0iCiAgICAgICAgICAgICAgICAgIHZhbHVlPSJbW19wYWdlSW5wdXRWYWx1ZV1dIgogICAgICAgICAgICAgICAgICBvbi1pbnB1dD0iX2hhbmRsZVBhZ2VJbnB1dEV2ZW50IgogICAgICAgICAgICAgICAgICBvbi1jaGFuZ2U9Il9oYW5kbGVQYWdlQ2hhbmdlRXZlbnQiCiAgICAgICAgICAgICAgICAgIG9uLWZvY3VzPSJfaGFuZGxlUGFnZUZvY3VzRXZlbnQiCiAgICAgICAgICAgICAgICAgIG9uLWJsdXI9Il9oYW5kbGVQYWdlQmx1ckV2ZW50IgogICAgICAgICAgICAgICAgPjwvcGFwZXItaW5wdXQ+CiAgICAgICAgICAgICAgICBvZiBbW19wYWdlQ291bnRdXQogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJpZy1wYWdlLWJ1dHRvbnMiIHN0eWxlPSJtYXJnaW4tdG9wOiAxMHB4OyI+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgICAgICAgb24tdGFwPSJfcGVyZm9ybVByZXZpb3VzUGFnZSIKICAgICAgICAgICAgICAgIGRpc2FibGVkJD0iW1shX2hhc1ByZXZpb3VzUGFnZV1dIgogICAgICAgICAgICAgICAgPlByZXZpb3VzIHBhZ2U8L3BhcGVyLWJ1dHRvbgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgICBvbi10YXA9Il9wZXJmb3JtTmV4dFBhZ2UiCiAgICAgICAgICAgICAgICBkaXNhYmxlZCQ9IltbIV9oYXNOZXh0UGFnZV1dIgogICAgICAgICAgICAgICAgPk5leHQgcGFnZTwvcGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvaXJvbi1jb2xsYXBzZT4KICAgIDwvdGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBtYXJnaW46IDAgNXB4IDFweCAxMHB4OwogICAgICB9CgogICAgICA6aG9zdCg6Zmlyc3Qtb2YtdHlwZSkgewogICAgICAgIG1hcmdpbi10b3A6IDEwcHg7CiAgICAgIH0KCiAgICAgIDpob3N0KDpsYXN0LW9mLXR5cGUpIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4OwogICAgICB9CgogICAgICAuaGVhZGluZyB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcHJpbWFyeS1iYWNrZ3JvdW5kLWNvbG9yKTsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgY29sb3I6IGluaGVyaXQ7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGZvbnQtc2l6ZTogMTVweDsKICAgICAgICBsaW5lLWhlaWdodDogMTsKICAgICAgICBib3gtc2hhZG93OiAwIDFweCA1cHggdmFyKC0tdGItcmFpc2VkLWJ1dHRvbi1zaGFkb3ctY29sb3IpOwogICAgICAgIHBhZGRpbmc6IDEwcHggMTVweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICB9CgogICAgICAuaGVhZGluZzo6LW1vei1mb2N1cy1pbm5lciB7CiAgICAgICAgcGFkZGluZzogMTBweCAxNXB4OwogICAgICB9CgogICAgICBbb3Blbi1idXR0b25dIHsKICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwICFpbXBvcnRhbnQ7CiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDAgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgW29wZW4tYnV0dG9uXSAuZXhwYW5kLWFycm93IHsKICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZVooMTgwZGVnKTsKICAgICAgfQoKICAgICAgLm5hbWUgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5saWdodCB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWdyZXktNTAwKTsKICAgICAgfQoKICAgICAgLmNhdGVnb3J5LW5hbWUgewogICAgICAgIHdoaXRlLXNwYWNlOiBwcmU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICBwYWRkaW5nOiAycHggMDsKICAgICAgfQoKICAgICAgLmNvdW50IHsKICAgICAgICBtYXJnaW46IDAgNXB4OwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItZ3JleS01MDApOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBmbGV4OiBub25lOwogICAgICB9CgogICAgICAuaGVhZGluZzo6LW1vei1mb2N1cy1pbm5lciB7CiAgICAgICAgcGFkZGluZzogMTBweCAxNXB4OwogICAgICB9CgogICAgICAuY29udGVudCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXByaW1hcnktYmFja2dyb3VuZC1jb2xvcik7CiAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMnB4OwogICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAycHg7CiAgICAgICAgYm9yZGVyLXRvcDogbm9uZTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZGVkZWRlOwogICAgICAgIHBhZGRpbmc6IDE1cHg7CiAgICAgIH0KCiAgICAgIC5saWdodCB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWdyZXktNTAwKTsKICAgICAgfQoKICAgICAgI2NvbnRyb2xzLWNvbnRhaW5lciB7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgI2NvbnRyb2xzLWNvbnRhaW5lciBwYXBlci1idXR0b24gewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgfQoKICAgICAgLmJpZy1wYWdlLWJ1dHRvbnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KCiAgICAgIC5iaWctcGFnZS1idXR0b25zIHBhcGVyLWJ1dHRvbiB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tdGItdWktbGlnaHQtYWNjZW50KTsKICAgICAgICBjb2xvcjogdmFyKC0tdGItdWktZGFyay1hY2NlbnQpOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBmbGV4LWJhc2lzOiAwOwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgIH0KCiAgICAgIC5iaWctcGFnZS1idXR0b25zIHBhcGVyLWJ1dHRvbltkaXNhYmxlZF0gewogICAgICAgIGJhY2tncm91bmQ6IG5vbmU7CiAgICAgIH0KCiAgICAgIHNsb3QgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIH0KCiAgICAgIDo6c2xvdHRlZChbc2xvdD0naXRlbXMnXSkgewogICAgICAgIC8qIFRvb2x0aXAgZm9yIGRlc2NyaXB0aW9ucyBhbmQgb3RoZXJzIGJyZWFrIHdpdGggbW9yZSBzdHJpY3Qgb25lcy4gKi8KICAgICAgICBjb250YWluOiBzdHlsZTsKICAgICAgfQoKICAgICAgI3BhZ2UtaW5wdXQgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB3aWR0aDogdmFyKC0tdGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXctcGFnZS1pbnB1dC13aWR0aCwgMTAwJSk7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYCx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxkbC5wcm90b3R5cGUsImNhdGVnb3J5Iix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sZGwucHJvdG90eXBlLCJpbml0aWFsT3BlbmVkIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbixub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGRsLnByb3RvdHlwZSwib3BlbmVkIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sZGwucHJvdG90eXBlLCJkaXNhYmxlUGFnaW5hdGlvbiIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcixjb21wdXRlZDoiX2NvbXB1dGVDb3VudChjYXRlZ29yeS5pdGVtcy4qKSJ9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sZGwucHJvdG90eXBlLCJfY291bnQiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFuLGNvbXB1dGVkOiJfY29tcHV0ZVBhbmVSZW5kZXJlZChjYXRlZ29yeSkiLG9ic2VydmVyOiJfb25QYW5lUmVuZGVyZWRDaGFuZ2VkIn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sZGwucHJvdG90eXBlLCJfcGFuZVJlbmRlcmVkIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbixjb21wdXRlZDoiX2NvbXB1dGVJc1NlYXJjaFJlc3VsdHMoY2F0ZWdvcnkubWV0YWRhdGEudHlwZSkifSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxkbC5wcm90b3R5cGUsIl9pc1NlYXJjaFJlc3VsdHMiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFuLGNvbXB1dGVkOiJfY29tcHV0ZUlzSW52YWxpZFNlYXJjaFJlc3VsdHMoY2F0ZWdvcnkubWV0YWRhdGEpIn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sZGwucHJvdG90eXBlLCJfaXNJbnZhbGlkU2VhcmNoUmVzdWx0cyIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW4sY29tcHV0ZWQ6Il9jb21wdXRlSXNVbml2ZXJzYWxTZWFyY2hRdWVyeShjYXRlZ29yeS5tZXRhZGF0YSkifSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxkbC5wcm90b3R5cGUsIl9pc1VuaXZlcnNhbFNlYXJjaFF1ZXJ5Iix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0LG9ic2VydmVyOiJfZ2V0Q2F0ZWdvcnlJdGVtS2V5Q2hhbmdlZCJ9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZGwucHJvdG90eXBlLCJnZXRDYXRlZ29yeUl0ZW1LZXkiLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXIsb2JzZXJ2ZXI6Il9saW1pdENoYW5nZWQifSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLGRsLnByb3RvdHlwZSwiX2xpbWl0Iix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLGRsLnByb3RvdHlwZSwiX2FjdGl2ZUluZGV4Iix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyLGNvbXB1dGVkOiJfY29tcHV0ZVBhZ2VDb3VudChjYXRlZ29yeS5pdGVtcy4qLCBfbGltaXQpIn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxkbC5wcm90b3R5cGUsIl9wYWdlQ291bnQiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6Il9jb21wdXRlSW5wdXRXaWR0aChfcGFnZUNvdW50KSIsb2JzZXJ2ZXI6Il91cGRhdGVJbnB1dFdpZHRoIn0pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxkbC5wcm90b3R5cGUsIl9pbnB1dFdpZHRoIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfY29tcHV0ZVBhZ2VJbnB1dFZhbHVlKF9wYWdlSW5wdXRGb2N1c2VkLCBfcGFnZUlucHV0UmF3VmFsdWUsIF9jdXJyZW50UGFnZSkiLG9ic2VydmVyOiJfdXBkYXRlUGFnZUlucHV0VmFsdWUifSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLGRsLnByb3RvdHlwZSwiX3BhZ2VJbnB1dFZhbHVlIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLGRsLnByb3RvdHlwZSwiX3BhZ2VJbnB1dFJhd1ZhbHVlIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sZGwucHJvdG90eXBlLCJfcGFnZUlucHV0Rm9jdXNlZCIsdm9pZCAwKSx0KFtzKCJfY291bnQiKSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sZGwucHJvdG90eXBlLCJfaGFzTXVsdGlwbGUiLG51bGwpLHQoW2EoIm9wZW5lZCIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtCb29sZWFuXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLGRsLnByb3RvdHlwZSwiX2NoYW5nZUNvbnRlbnRBY3RpdmUiLG51bGwpLHQoW3MoIm9wZW5lZCIsIl9wYW5lUmVuZGVyZWQiKSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sZGwucHJvdG90eXBlLCJfaXRlbXNSZW5kZXJlZCIsbnVsbCksdChbYSgiX2l0ZW1zUmVuZGVyZWQiLCJjYXRlZ29yeS5pdGVtcy4qIiwiX2xpbWl0IiwiX2FjdGl2ZUluZGV4IiwiX3BhZ2VDb3VudCIsImRpc2FibGVQYWdpbmF0aW9uIiksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pLGUoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxkbC5wcm90b3R5cGUsIl91cGRhdGVSZW5kZXJlZEl0ZW1zIixudWxsKSx0KFtzKCJfbGltaXQiLCJfYWN0aXZlSW5kZXgiKSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbC5wcm90b3R5cGUsIl9jdXJyZW50UGFnZSIsbnVsbCksdChbcygiX3BhZ2VDb3VudCIsImRpc2FibGVQYWdpbmF0aW9uIiksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGRsLnByb3RvdHlwZSwiX211bHRpcGxlUGFnZXNFeGlzdCIsbnVsbCksdChbcygiX2N1cnJlbnRQYWdlIiksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGRsLnByb3RvdHlwZSwiX2hhc1ByZXZpb3VzUGFnZSIsbnVsbCksdChbcygiX2N1cnJlbnRQYWdlIiwiX3BhZ2VDb3VudCIpLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbC5wcm90b3R5cGUsIl9oYXNOZXh0UGFnZSIsbnVsbCksdChbYSgiY2F0ZWdvcnkuaXRlbXMuKiIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sZGwucHJvdG90eXBlLCJfY2xhbXBBY3RpdmVJbmRleCIsbnVsbCksZGw9dChbaSgidGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXciKV0sZGwpO2NsYXNzIHBse2NvbnN0cnVjdG9yKHQpe3RoaXMubGlzdGVuZXI9dH19Y2xhc3MgZmx7Y29uc3RydWN0b3IoKXt0aGlzLnJlcXVlc3RNYW5hZ2VyPW5ldyBocigxKSx0aGlzLl9saXN0ZW5lcnM9bmV3IFNldCx0aGlzLmluaXRpYWxpemVkPSExfXJlZnJlc2goKXtyZXR1cm4gdGhpcy5sb2FkKCkudGhlbigoKCk9Pnt0aGlzLmluaXRpYWxpemVkPSEwfSkpfWFkZExpc3RlbmVyKHQpe2NvbnN0IGU9bmV3IHBsKHQpO3JldHVybiB0aGlzLl9saXN0ZW5lcnMuYWRkKGUpLGV9cmVtb3ZlTGlzdGVuZXJCeUtleSh0KXt0aGlzLl9saXN0ZW5lcnMuZGVsZXRlKHQpfWVtaXRDaGFuZ2UoKXt0aGlzLl9saXN0ZW5lcnMuZm9yRWFjaCgodD0+e3RyeXt0Lmxpc3RlbmVyKCl9Y2F0Y2godCl7fX0pKX19Y2xhc3MgbWwgZXh0ZW5kcyBmbHtsb2FkKCl7Y29uc3QgdD1ncigpLmVudmlyb25tZW50KCk7cmV0dXJuIHRoaXMucmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKCh0PT57Y29uc3QgZT17ZGF0YUxvY2F0aW9uOnQuZGF0YV9sb2NhdGlvbix3aW5kb3dUaXRsZTp0LndpbmRvd190aXRsZX07dm9pZCAwIT09dC5leHBlcmltZW50X25hbWUmJihlLmV4cGVyaW1lbnROYW1lPXQuZXhwZXJpbWVudF9uYW1lKSx2b2lkIDAhPT10LmV4cGVyaW1lbnRfZGVzY3JpcHRpb24mJihlLmV4cGVyaW1lbnREZXNjcmlwdGlvbj10LmV4cGVyaW1lbnRfZGVzY3JpcHRpb24pLHZvaWQgMCE9PXQuY3JlYXRpb25fdGltZSYmKGUuY3JlYXRpb25UaW1lPXQuY3JlYXRpb25fdGltZSksd2UuaXNFcXVhbCh0aGlzLmVudmlyb25tZW50LGUpfHwodGhpcy5lbnZpcm9ubWVudD1lLHRoaXMuZW1pdENoYW5nZSgpKX0pKX1nZXREYXRhTG9jYXRpb24oKXtyZXR1cm4gdGhpcy5lbnZpcm9ubWVudD90aGlzLmVudmlyb25tZW50LmRhdGFMb2NhdGlvbjoiIn1nZXRXaW5kb3dUaXRsZSgpe3JldHVybiB0aGlzLmVudmlyb25tZW50P3RoaXMuZW52aXJvbm1lbnQud2luZG93VGl0bGU6IiJ9Z2V0RXhwZXJpbWVudE5hbWUoKXtyZXR1cm4gdGhpcy5lbnZpcm9ubWVudD90aGlzLmVudmlyb25tZW50LmV4cGVyaW1lbnROYW1lOiIifWdldEV4cGVyaW1lbnREZXNjcmlwdGlvbigpe3JldHVybiB0aGlzLmVudmlyb25tZW50P3RoaXMuZW52aXJvbm1lbnQuZXhwZXJpbWVudERlc2NyaXB0aW9uOiIifWdldENyZWF0aW9uVGltZSgpe3JldHVybiB0aGlzLmVudmlyb25tZW50P3RoaXMuZW52aXJvbm1lbnQuY3JlYXRpb25UaW1lOm51bGx9fWNvbnN0IGdsPW5ldyBtbDtjbGFzcyBfbCBleHRlbmRzIGZse2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9ydW5zPVtdfWxvYWQoKXtjb25zdCB0PWdyKCkucnVucygpO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbigodD0+e3dlLmlzRXF1YWwodGhpcy5fcnVucyx0KXx8KHRoaXMuX3J1bnM9dCx0aGlzLmVtaXRDaGFuZ2UoKSl9KSl9Z2V0UnVucygpe3JldHVybiB0aGlzLl9ydW5zLnNsaWNlKCl9fWNvbnN0IHlsPW5ldyBfbDtmdW5jdGlvbiB2bCh0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6dD49ZT8wOk5hTn1mdW5jdGlvbiBibCh0KXtyZXR1cm4gMT09PXQubGVuZ3RoJiYodD0oZnVuY3Rpb24gZSh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXtyZXR1cm4gdmwodChlKSxuKX19KSh0KSkse2xlZnQ6ZnVuY3Rpb24oZSxuLGkscil7Zm9yKG51bGw9PWkmJihpPTApLG51bGw9PXImJihyPWUubGVuZ3RoKTtpPHI7KXt2YXIgbz1pK3I+Pj4xO3QoZVtvXSxuKTwwP2k9bysxOnI9b31yZXR1cm4gaX0scmlnaHQ6ZnVuY3Rpb24oZSxuLGkscil7Zm9yKG51bGw9PWkmJihpPTApLG51bGw9PXImJihyPWUubGVuZ3RoKTtpPHI7KXt2YXIgbz1pK3I+Pj4xO3QoZVtvXSxuKT4wP3I9bzppPW8rMX1yZXR1cm4gaX19fXZhciB4bD1ibCh2bCksd2w9eGwucmlnaHQsU2w9eGwubGVmdDtmdW5jdGlvbiBNbCh0LGUpe3JldHVyblt0LGVdfWZ1bmN0aW9uIEVsKHQsZSxuKXt2YXIgaSxyLG8sYSxzPXQubGVuZ3RoLGw9ZS5sZW5ndGgsYz1uZXcgQXJyYXkocypsKTtmb3IobnVsbD09biYmKG49TWwpLGk9bz0wO2k8czsrK2kpZm9yKGE9dFtpXSxyPTA7cjxsOysrciwrK28pY1tvXT1uKGEsZVtyXSk7cmV0dXJuIGN9ZnVuY3Rpb24gVGwodCl7cmV0dXJuIG51bGw9PT10P05hTjordH1mdW5jdGlvbiBDbCh0LGUpe3ZhciBuLGkscj10Lmxlbmd0aCxvPTAsYT0tMSxzPTAsbD0wO2lmKG51bGw9PWUpZm9yKDsrK2E8cjspaXNOYU4obj1UbCh0W2FdKSl8fChsKz0oaT1uLXMpKihuLShzKz1pLysrbykpKTtlbHNlIGZvcig7KythPHI7KWlzTmFOKG49VGwoZSh0W2FdLGEsdCkpKXx8KGwrPShpPW4tcykqKG4tKHMrPWkvKytvKSkpO2lmKG8+MSlyZXR1cm4gbC8oby0xKX1mdW5jdGlvbiBBbCh0LGUpe3ZhciBuPUNsKHQsZSk7cmV0dXJuIG4/TWF0aC5zcXJ0KG4pOm59ZnVuY3Rpb24ga2wodCxlKXt2YXIgbixpLHIsbz10Lmxlbmd0aCxhPS0xO2lmKG51bGw9PWUpe2Zvcig7KythPG87KWlmKG51bGwhPShuPXRbYV0pJiZuPj1uKWZvcihpPXI9bjsrK2E8bzspbnVsbCE9KG49dFthXSkmJihpPm4mJihpPW4pLHI8biYmKHI9bikpfWVsc2UgZm9yKDsrK2E8bzspaWYobnVsbCE9KG49ZSh0W2FdLGEsdCkpJiZuPj1uKWZvcihpPXI9bjsrK2E8bzspbnVsbCE9KG49ZSh0W2FdLGEsdCkpJiYoaT5uJiYoaT1uKSxyPG4mJihyPW4pKTtyZXR1cm5baSxyXX12YXIgTGw9QXJyYXkucHJvdG90eXBlLFBsPUxsLnNsaWNlLE5sPUxsLm1hcDtmdW5jdGlvbiBJbCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gT2wodCl7cmV0dXJuIHR9ZnVuY3Rpb24gUmwodCxlLG4pe3Q9K3QsZT0rZSxuPShyPWFyZ3VtZW50cy5sZW5ndGgpPDI/KGU9dCx0PTAsMSk6cjwzPzE6K247Zm9yKHZhciBpPS0xLHI9MHxNYXRoLm1heCgwLE1hdGguY2VpbCgoZS10KS9uKSksbz1uZXcgQXJyYXkocik7KytpPHI7KW9baV09dCtpKm47cmV0dXJuIG99dmFyIHpsPU1hdGguc3FydCg1MCksRGw9TWF0aC5zcXJ0KDEwKSxCbD1NYXRoLnNxcnQoMik7ZnVuY3Rpb24gSGwodCxlLG4pe3ZhciBpLHIsbyxhLHM9LTE7aWYobj0rbiwodD0rdCk9PShlPStlKSYmbj4wKXJldHVyblt0XTtpZigoaT1lPHQpJiYocj10LHQ9ZSxlPXIpLDA9PT0oYT1GbCh0LGUsbikpfHwhaXNGaW5pdGUoYSkpcmV0dXJuW107aWYoYT4wKWZvcih0PU1hdGguY2VpbCh0L2EpLGU9TWF0aC5mbG9vcihlL2EpLG89bmV3IEFycmF5KHI9TWF0aC5jZWlsKGUtdCsxKSk7KytzPHI7KW9bc109KHQrcykqYTtlbHNlIGZvcih0PU1hdGguZmxvb3IodCphKSxlPU1hdGguY2VpbChlKmEpLG89bmV3IEFycmF5KHI9TWF0aC5jZWlsKHQtZSsxKSk7KytzPHI7KW9bc109KHQtcykvYTtyZXR1cm4gaSYmby5yZXZlcnNlKCksb31mdW5jdGlvbiBGbCh0LGUsbil7dmFyIGk9KGUtdCkvTWF0aC5tYXgoMCxuKSxyPU1hdGguZmxvb3IoTWF0aC5sb2coaSkvTWF0aC5MTjEwKSxvPWkvTWF0aC5wb3coMTAscik7cmV0dXJuIHI+PTA/KG8+PXpsPzEwOm8+PURsPzU6bz49Qmw/MjoxKSpNYXRoLnBvdygxMCxyKTotTWF0aC5wb3coMTAsLXIpLyhvPj16bD8xMDpvPj1EbD81Om8+PUJsPzI6MSl9ZnVuY3Rpb24gVmwodCxlLG4pe3ZhciBpPU1hdGguYWJzKGUtdCkvTWF0aC5tYXgoMCxuKSxyPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2coaSkvTWF0aC5MTjEwKSksbz1pL3I7cmV0dXJuIG8+PXpsP3IqPTEwOm8+PURsP3IqPTU6bz49QmwmJihyKj0yKSxlPHQ/LXI6cn1mdW5jdGlvbiBVbCh0KXtyZXR1cm4gTWF0aC5jZWlsKE1hdGgubG9nKHQubGVuZ3RoKS9NYXRoLkxOMikrMX1mdW5jdGlvbiBqbCh0LGUsbil7aWYobnVsbD09biYmKG49VGwpLGk9dC5sZW5ndGgpe2lmKChlPStlKTw9MHx8aTwyKXJldHVybituKHRbMF0sMCx0KTtpZihlPj0xKXJldHVybituKHRbaS0xXSxpLTEsdCk7dmFyIGkscj0oaS0xKSplLG89TWF0aC5mbG9vcihyKSxhPStuKHRbb10sbyx0KTtyZXR1cm4gYSsoK24odFtvKzFdLG8rMSx0KS1hKSooci1vKX19ZnVuY3Rpb24gR2wodCxlKXt2YXIgbixpLHI9dC5sZW5ndGgsbz0tMTtpZihudWxsPT1lKXtmb3IoOysrbzxyOylpZihudWxsIT0obj10W29dKSYmbj49bilmb3IoaT1uOysrbzxyOyludWxsIT0obj10W29dKSYmbj5pJiYoaT1uKX1lbHNlIGZvcig7KytvPHI7KWlmKG51bGwhPShuPWUodFtvXSxvLHQpKSYmbj49bilmb3IoaT1uOysrbzxyOyludWxsIT0obj1lKHRbb10sbyx0KSkmJm4+aSYmKGk9bik7cmV0dXJuIGl9ZnVuY3Rpb24gV2wodCl7Zm9yKHZhciBlLG4saSxyPXQubGVuZ3RoLG89LTEsYT0wOysrbzxyOylhKz10W29dLmxlbmd0aDtmb3Iobj1uZXcgQXJyYXkoYSk7LS1yPj0wOylmb3IoZT0oaT10W3JdKS5sZW5ndGg7LS1lPj0wOyluWy0tYV09aVtlXTtyZXR1cm4gbn1mdW5jdGlvbiBxbCh0LGUpe3ZhciBuLGkscj10Lmxlbmd0aCxvPS0xO2lmKG51bGw9PWUpe2Zvcig7KytvPHI7KWlmKG51bGwhPShuPXRbb10pJiZuPj1uKWZvcihpPW47KytvPHI7KW51bGwhPShuPXRbb10pJiZpPm4mJihpPW4pfWVsc2UgZm9yKDsrK288cjspaWYobnVsbCE9KG49ZSh0W29dLG8sdCkpJiZuPj1uKWZvcihpPW47KytvPHI7KW51bGwhPShuPWUodFtvXSxvLHQpKSYmaT5uJiYoaT1uKTtyZXR1cm4gaX1mdW5jdGlvbiBZbCh0KXtpZighKHI9dC5sZW5ndGgpKXJldHVybltdO2Zvcih2YXIgZT0tMSxuPXFsKHQsWGwpLGk9bmV3IEFycmF5KG4pOysrZTxuOylmb3IodmFyIHIsbz0tMSxhPWlbZV09bmV3IEFycmF5KHIpOysrbzxyOylhW29dPXRbb11bZV07cmV0dXJuIGl9ZnVuY3Rpb24gWGwodCl7cmV0dXJuIHQubGVuZ3RofXZhciAkbD1BcnJheS5wcm90b3R5cGUuc2xpY2U7ZnVuY3Rpb24gS2wodCl7cmV0dXJuIHR9dmFyIFpsPTFlLTY7ZnVuY3Rpb24gSmwodCl7cmV0dXJuInRyYW5zbGF0ZSgiKyh0Ky41KSsiLDApIn1mdW5jdGlvbiBRbCh0KXtyZXR1cm4idHJhbnNsYXRlKDAsIisodCsuNSkrIikifWZ1bmN0aW9uIHRjKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4rdChlKX19ZnVuY3Rpb24gZWModCl7dmFyIGU9TWF0aC5tYXgoMCx0LmJhbmR3aWR0aCgpLTEpLzI7cmV0dXJuIHQucm91bmQoKSYmKGU9TWF0aC5yb3VuZChlKSksZnVuY3Rpb24obil7cmV0dXJuK3QobikrZX19ZnVuY3Rpb24gbmMoKXtyZXR1cm4hdGhpcy5fX2F4aXN9ZnVuY3Rpb24gaWModCxlKXt2YXIgbj1bXSxpPW51bGwscj1udWxsLG89NixhPTYscz0zLGw9MT09PXR8fDQ9PT10Py0xOjEsYz00PT09dHx8Mj09PXQ/IngiOiJ5Iix1PTE9PT10fHwzPT09dD9KbDpRbDtmdW5jdGlvbiBoKGgpe3ZhciBkPW51bGw9PWk/ZS50aWNrcz9lLnRpY2tzLmFwcGx5KGUsbik6ZS5kb21haW4oKTppLHA9bnVsbD09cj9lLnRpY2tGb3JtYXQ/ZS50aWNrRm9ybWF0LmFwcGx5KGUsbik6S2w6cixmPU1hdGgubWF4KG8sMCkrcyxtPWUucmFuZ2UoKSxnPSttWzBdKy41LF89K21bbS5sZW5ndGgtMV0rLjUseT0oZS5iYW5kd2lkdGg/ZWM6dGMpKGUuY29weSgpKSx2PWguc2VsZWN0aW9uP2guc2VsZWN0aW9uKCk6aCxiPXYuc2VsZWN0QWxsKCIuZG9tYWluIikuZGF0YShbbnVsbF0pLHg9di5zZWxlY3RBbGwoIi50aWNrIikuZGF0YShkLGUpLm9yZGVyKCksdz14LmV4aXQoKSxTPXguZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInRpY2siKSxNPXguc2VsZWN0KCJsaW5lIiksRT14LnNlbGVjdCgidGV4dCIpO2I9Yi5tZXJnZShiLmVudGVyKCkuaW5zZXJ0KCJwYXRoIiwiLnRpY2siKS5hdHRyKCJjbGFzcyIsImRvbWFpbiIpLmF0dHIoInN0cm9rZSIsImN1cnJlbnRDb2xvciIpKSx4PXgubWVyZ2UoUyksTT1NLm1lcmdlKFMuYXBwZW5kKCJsaW5lIikuYXR0cigic3Ryb2tlIiwiY3VycmVudENvbG9yIikuYXR0cihjKyIyIixsKm8pKSxFPUUubWVyZ2UoUy5hcHBlbmQoInRleHQiKS5hdHRyKCJmaWxsIiwiY3VycmVudENvbG9yIikuYXR0cihjLGwqZikuYXR0cigiZHkiLDE9PT10PyIwZW0iOjM9PT10PyIwLjcxZW0iOiIwLjMyZW0iKSksaCE9PXYmJihiPWIudHJhbnNpdGlvbihoKSx4PXgudHJhbnNpdGlvbihoKSxNPU0udHJhbnNpdGlvbihoKSxFPUUudHJhbnNpdGlvbihoKSx3PXcudHJhbnNpdGlvbihoKS5hdHRyKCJvcGFjaXR5IixabCkuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuIGlzRmluaXRlKHQ9eSh0KSk/dSh0KTp0aGlzLmdldEF0dHJpYnV0ZSgidHJhbnNmb3JtIil9KSksUy5hdHRyKCJvcGFjaXR5IixabCkuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5wYXJlbnROb2RlLl9fYXhpcztyZXR1cm4gdShlJiZpc0Zpbml0ZShlPWUodCkpP2U6eSh0KSl9KSkpLHcucmVtb3ZlKCksYi5hdHRyKCJkIiw0PT09dHx8Mj09dD9hPyJNIitsKmErIiwiK2crIkgwLjVWIitfKyJIIitsKmE6Ik0wLjUsIitnKyJWIitfOmE/Ik0iK2crIiwiK2wqYSsiVjAuNUgiK18rIlYiK2wqYToiTSIrZysiLDAuNUgiK18pLHguYXR0cigib3BhY2l0eSIsMSkuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuIHUoeSh0KSl9KSksTS5hdHRyKGMrIjIiLGwqbyksRS5hdHRyKGMsbCpmKS50ZXh0KHApLHYuZmlsdGVyKG5jKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImZvbnQtc2l6ZSIsMTApLmF0dHIoImZvbnQtZmFtaWx5Iiwic2Fucy1zZXJpZiIpLmF0dHIoInRleHQtYW5jaG9yIiwyPT09dD8ic3RhcnQiOjQ9PT10PyJlbmQiOiJtaWRkbGUiKSx2LmVhY2goKGZ1bmN0aW9uKCl7dGhpcy5fX2F4aXM9eX0pKX1yZXR1cm4gaC5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LGgpOmV9LGgudGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gbj0kbC5jYWxsKGFyZ3VtZW50cyksaH0saC50aWNrQXJndW1lbnRzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW51bGw9PXQ/W106JGwuY2FsbCh0KSxoKTpuLnNsaWNlKCl9LGgudGlja1ZhbHVlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1udWxsPT10P251bGw6JGwuY2FsbCh0KSxoKTppJiZpLnNsaWNlKCl9LGgudGlja0Zvcm1hdD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LGgpOnJ9LGgudGlja1NpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89YT0rdCxoKTpvfSxoLnRpY2tTaXplSW5uZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89K3QsaCk6b30saC50aWNrU2l6ZU91dGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSt0LGgpOmF9LGgudGlja1BhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9K3QsaCk6c30saH1mdW5jdGlvbiByYyh0KXtyZXR1cm4gaWMoMyx0KX1mdW5jdGlvbiBvYyh0KXtyZXR1cm4gaWMoNCx0KX12YXIgYWM9e3ZhbHVlOmZ1bmN0aW9uKCl7fX07ZnVuY3Rpb24gc2MoKXtmb3IodmFyIHQsZT0wLG49YXJndW1lbnRzLmxlbmd0aCxpPXt9O2U8bjsrK2Upe2lmKCEodD1hcmd1bWVudHNbZV0rIiIpfHx0IGluIGl8fC9bXHMuXS8udGVzdCh0KSl0aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgdHlwZTogIit0KTtpW3RdPVtdfXJldHVybiBuZXcgbGMoaSl9ZnVuY3Rpb24gbGModCl7dGhpcy5fPXR9ZnVuY3Rpb24gY2ModCxlKXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLykubWFwKChmdW5jdGlvbih0KXt2YXIgbj0iIixpPXQuaW5kZXhPZigiLiIpO2lmKGk+PTAmJihuPXQuc2xpY2UoaSsxKSx0PXQuc2xpY2UoMCxpKSksdCYmIWUuaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7cmV0dXJue3R5cGU6dCxuYW1lOm59fSkpfWZ1bmN0aW9uIHVjKHQsZSl7Zm9yKHZhciBuLGk9MCxyPXQubGVuZ3RoO2k8cjsrK2kpaWYoKG49dFtpXSkubmFtZT09PWUpcmV0dXJuIG4udmFsdWV9ZnVuY3Rpb24gaGModCxlLG4pe2Zvcih2YXIgaT0wLHI9dC5sZW5ndGg7aTxyOysraSlpZih0W2ldLm5hbWU9PT1lKXt0W2ldPWFjLHQ9dC5zbGljZSgwLGkpLmNvbmNhdCh0LnNsaWNlKGkrMSkpO2JyZWFrfXJldHVybiBudWxsIT1uJiZ0LnB1c2goe25hbWU6ZSx2YWx1ZTpufSksdH1sYy5wcm90b3R5cGU9c2MucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpsYyxvbjpmdW5jdGlvbih0LGUpe3ZhciBuLGk9dGhpcy5fLHI9Y2ModCsiIixpKSxvPS0xLGE9ci5sZW5ndGg7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtpZihudWxsIT1lJiYiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrZSk7Zm9yKDsrK288YTspaWYobj0odD1yW29dKS50eXBlKWlbbl09aGMoaVtuXSx0Lm5hbWUsZSk7ZWxzZSBpZihudWxsPT1lKWZvcihuIGluIGkpaVtuXT1oYyhpW25dLHQubmFtZSxudWxsKTtyZXR1cm4gdGhpc31mb3IoOysrbzxhOylpZigobj0odD1yW29dKS50eXBlKSYmKG49dWMoaVtuXSx0Lm5hbWUpKSlyZXR1cm4gbn0sY29weTpmdW5jdGlvbigpe3ZhciB0PXt9LGU9dGhpcy5fO2Zvcih2YXIgbiBpbiBlKXRbbl09ZVtuXS5zbGljZSgpO3JldHVybiBuZXcgbGModCl9LGNhbGw6ZnVuY3Rpb24odCxlKXtpZigobj1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciBuLGkscj1uZXcgQXJyYXkobiksbz0wO288bjsrK28pcltvXT1hcmd1bWVudHNbbysyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO2ZvcihvPTAsbj0oaT10aGlzLl9bdF0pLmxlbmd0aDtvPG47KytvKWlbb10udmFsdWUuYXBwbHkoZSxyKX0sYXBwbHk6ZnVuY3Rpb24odCxlLG4pe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7Zm9yKHZhciBpPXRoaXMuX1t0XSxyPTAsbz1pLmxlbmd0aDtyPG87KytyKWlbcl0udmFsdWUuYXBwbHkoZSxuKX19O3ZhciBkYz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIscGM9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOmRjLHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIn07ZnVuY3Rpb24gZmModCl7dmFyIGU9dCs9IiIsbj1lLmluZGV4T2YoIjoiKTtyZXR1cm4gbj49MCYmInhtbG5zIiE9PShlPXQuc2xpY2UoMCxuKSkmJih0PXQuc2xpY2UobisxKSkscGMuaGFzT3duUHJvcGVydHkoZSk/e3NwYWNlOnBjW2VdLGxvY2FsOnR9OnR9ZnVuY3Rpb24gbWModCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vd25lckRvY3VtZW50LG49dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIG49PT1kYyYmZS5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09ZGM/ZS5jcmVhdGVFbGVtZW50KHQpOmUuY3JlYXRlRWxlbWVudE5TKG4sdCl9fWZ1bmN0aW9uIGdjKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHQuc3BhY2UsdC5sb2NhbCl9fWZ1bmN0aW9uIF9jKHQpe3ZhciBlPWZjKHQpO3JldHVybihlLmxvY2FsP2djOm1jKShlKX1mdW5jdGlvbiB5Yygpe31mdW5jdGlvbiB2Yyh0KXtyZXR1cm4gbnVsbD09dD95YzpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3IodCl9fWZ1bmN0aW9uIGJjKCl7cmV0dXJuW119ZnVuY3Rpb24geGModCl7cmV0dXJuIG51bGw9PXQ/YmM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKHQpfX1mdW5jdGlvbiB3Yyh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXRjaGVzKHQpfX1mdW5jdGlvbiBTYyh0KXtyZXR1cm4gbmV3IEFycmF5KHQubGVuZ3RoKX1mdW5jdGlvbiBNYyh0LGUpe3RoaXMub3duZXJEb2N1bWVudD10Lm93bmVyRG9jdW1lbnQsdGhpcy5uYW1lc3BhY2VVUkk9dC5uYW1lc3BhY2VVUkksdGhpcy5fbmV4dD1udWxsLHRoaXMuX3BhcmVudD10LHRoaXMuX19kYXRhX189ZX1mdW5jdGlvbiBFYyh0LGUsbixpLHIsbyl7Zm9yKHZhciBhLHM9MCxsPWUubGVuZ3RoLGM9by5sZW5ndGg7czxjOysrcykoYT1lW3NdKT8oYS5fX2RhdGFfXz1vW3NdLGlbc109YSk6bltzXT1uZXcgTWModCxvW3NdKTtmb3IoO3M8bDsrK3MpKGE9ZVtzXSkmJihyW3NdPWEpfWZ1bmN0aW9uIFRjKHQsZSxuLGkscixvLGEpe3ZhciBzLGwsYyx1PXt9LGg9ZS5sZW5ndGgsZD1vLmxlbmd0aCxwPW5ldyBBcnJheShoKTtmb3Iocz0wO3M8aDsrK3MpKGw9ZVtzXSkmJihwW3NdPWM9IiQiK2EuY2FsbChsLGwuX19kYXRhX18scyxlKSxjIGluIHU/cltzXT1sOnVbY109bCk7Zm9yKHM9MDtzPGQ7KytzKShsPXVbYz0iJCIrYS5jYWxsKHQsb1tzXSxzLG8pXSk/KGlbc109bCxsLl9fZGF0YV9fPW9bc10sdVtjXT1udWxsKTpuW3NdPW5ldyBNYyh0LG9bc10pO2ZvcihzPTA7czxoOysrcykobD1lW3NdKSYmdVtwW3NdXT09PWwmJihyW3NdPWwpfWZ1bmN0aW9uIENjKHQsZSl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTp0Pj1lPzA6TmFOfWZ1bmN0aW9uIEFjKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX1mdW5jdGlvbiBrYyh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCl9fWZ1bmN0aW9uIExjKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUodCxlKX19ZnVuY3Rpb24gUGModCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxlKX19ZnVuY3Rpb24gTmModCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1uP3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpOnRoaXMuc2V0QXR0cmlidXRlKHQsbil9fWZ1bmN0aW9uIEljKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09bj90aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCk6dGhpcy5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwsbil9fWZ1bmN0aW9uIE9jKHQpe3JldHVybiB0Lm93bmVyRG9jdW1lbnQmJnQub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8dC5kb2N1bWVudCYmdHx8dC5kZWZhdWx0Vmlld31mdW5jdGlvbiBSYyh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpfX1mdW5jdGlvbiB6Yyh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LGUsbil9fWZ1bmN0aW9uIERjKHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaT1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1pP3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCk6dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LGksbil9fWZ1bmN0aW9uIEJjKHQsZSl7cmV0dXJuIHQuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShlKXx8T2ModCkuZ2V0Q29tcHV0ZWRTdHlsZSh0LG51bGwpLmdldFByb3BlcnR5VmFsdWUoZSl9ZnVuY3Rpb24gSGModCl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbdF19fWZ1bmN0aW9uIEZjKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpc1t0XT1lfX1mdW5jdGlvbiBWYyh0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PW4/ZGVsZXRlIHRoaXNbdF06dGhpc1t0XT1ufX1mdW5jdGlvbiBVYyh0KXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLyl9ZnVuY3Rpb24gamModCl7cmV0dXJuIHQuY2xhc3NMaXN0fHxuZXcgR2ModCl9ZnVuY3Rpb24gR2ModCl7dGhpcy5fbm9kZT10LHRoaXMuX25hbWVzPVVjKHQuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9ZnVuY3Rpb24gV2ModCxlKXtmb3IodmFyIG49amModCksaT0tMSxyPWUubGVuZ3RoOysraTxyOyluLmFkZChlW2ldKX1mdW5jdGlvbiBxYyh0LGUpe2Zvcih2YXIgbj1qYyh0KSxpPS0xLHI9ZS5sZW5ndGg7KytpPHI7KW4ucmVtb3ZlKGVbaV0pfWZ1bmN0aW9uIFljKHQpe3JldHVybiBmdW5jdGlvbigpe1djKHRoaXMsdCl9fWZ1bmN0aW9uIFhjKHQpe3JldHVybiBmdW5jdGlvbigpe3FjKHRoaXMsdCl9fWZ1bmN0aW9uICRjKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7KGUuYXBwbHkodGhpcyxhcmd1bWVudHMpP1djOnFjKSh0aGlzLHQpfX1mdW5jdGlvbiBLYygpe3RoaXMudGV4dENvbnRlbnQ9IiJ9ZnVuY3Rpb24gWmModCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD10fX1mdW5jdGlvbiBKYyh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRDb250ZW50PW51bGw9PWU/IiI6ZX19ZnVuY3Rpb24gUWMoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiB0dSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD10fX1mdW5jdGlvbiBldSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmlubmVySFRNTD1udWxsPT1lPyIiOmV9fWZ1bmN0aW9uIG51KCl7dGhpcy5uZXh0U2libGluZyYmdGhpcy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMpfWZ1bmN0aW9uIGl1KCl7dGhpcy5wcmV2aW91c1NpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcyx0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gcnUoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBvdSgpe3ZhciB0PXRoaXMucGFyZW50Tm9kZTt0JiZ0LnJlbW92ZUNoaWxkKHRoaXMpfWZ1bmN0aW9uIGF1KCl7dmFyIHQ9dGhpcy5jbG9uZU5vZGUoITEpLGU9dGhpcy5wYXJlbnROb2RlO3JldHVybiBlP2UuaW5zZXJ0QmVmb3JlKHQsdGhpcy5uZXh0U2libGluZyk6dH1mdW5jdGlvbiBzdSgpe3ZhciB0PXRoaXMuY2xvbmVOb2RlKCEwKSxlPXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gZT9lLmluc2VydEJlZm9yZSh0LHRoaXMubmV4dFNpYmxpbmcpOnR9TWMucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpNYyxhcHBlbmRDaGlsZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZSh0LHRoaXMuX25leHQpfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZSh0LGUpfSxxdWVyeVNlbGVjdG9yOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3Rvcih0KX0scXVlcnlTZWxlY3RvckFsbDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwodCl9fSxHYy5wcm90b3R5cGU9e2FkZDpmdW5jdGlvbih0KXt0aGlzLl9uYW1lcy5pbmRleE9mKHQpPDAmJih0aGlzLl9uYW1lcy5wdXNoKHQpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LHJlbW92ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9uYW1lcy5pbmRleE9mKHQpO2U+PTAmJih0aGlzLl9uYW1lcy5zcGxpY2UoZSwxKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxjb250YWluczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZih0KT49MH19O3ZhciBsdT17fSxjdT1udWxsO2Z1bmN0aW9uIHV1KHQsZSxuKXtyZXR1cm4gdD1odSh0LGUsbiksZnVuY3Rpb24oZSl7dmFyIG49ZS5yZWxhdGVkVGFyZ2V0O24mJihuPT09dGhpc3x8OCZuLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHRoaXMpKXx8dC5jYWxsKHRoaXMsZSl9fWZ1bmN0aW9uIGh1KHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24oaSl7dmFyIHI9Y3U7Y3U9aTt0cnl7dC5jYWxsKHRoaXMsdGhpcy5fX2RhdGFfXyxlLG4pfWZpbmFsbHl7Y3U9cn19fWZ1bmN0aW9uIGR1KHQpe3JldHVybiB0LnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBlPSIiLG49dC5pbmRleE9mKCIuIik7cmV0dXJuIG4+PTAmJihlPXQuc2xpY2UobisxKSx0PXQuc2xpY2UoMCxuKSkse3R5cGU6dCxuYW1lOmV9fSkpfWZ1bmN0aW9uIHB1KHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMuX19vbjtpZihlKXtmb3IodmFyIG4saT0wLHI9LTEsbz1lLmxlbmd0aDtpPG87KytpKW49ZVtpXSx0LnR5cGUmJm4udHlwZSE9PXQudHlwZXx8bi5uYW1lIT09dC5uYW1lP2VbKytyXT1uOnRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihuLnR5cGUsbi5saXN0ZW5lcixuLmNhcHR1cmUpOysrcj9lLmxlbmd0aD1yOmRlbGV0ZSB0aGlzLl9fb259fX1mdW5jdGlvbiBmdSh0LGUsbil7dmFyIGk9bHUuaGFzT3duUHJvcGVydHkodC50eXBlKT91dTpodTtyZXR1cm4gZnVuY3Rpb24ocixvLGEpe3ZhciBzLGw9dGhpcy5fX29uLGM9aShlLG8sYSk7aWYobClmb3IodmFyIHU9MCxoPWwubGVuZ3RoO3U8aDsrK3UpaWYoKHM9bFt1XSkudHlwZT09PXQudHlwZSYmcy5uYW1lPT09dC5uYW1lKXJldHVybiB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIocy50eXBlLHMubGlzdGVuZXIscy5jYXB0dXJlKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIocy50eXBlLHMubGlzdGVuZXI9YyxzLmNhcHR1cmU9biksdm9pZChzLnZhbHVlPWUpO3RoaXMuYWRkRXZlbnRMaXN0ZW5lcih0LnR5cGUsYyxuKSxzPXt0eXBlOnQudHlwZSxuYW1lOnQubmFtZSx2YWx1ZTplLGxpc3RlbmVyOmMsY2FwdHVyZTpufSxsP2wucHVzaChzKTp0aGlzLl9fb249W3NdfX1mdW5jdGlvbiBtdSh0LGUsbixpKXt2YXIgcj1jdTt0LnNvdXJjZUV2ZW50PWN1LGN1PXQ7dHJ5e3JldHVybiBlLmFwcGx5KG4saSl9ZmluYWxseXtjdT1yfX1mdW5jdGlvbiBndSh0LGUsbil7dmFyIGk9T2ModCkscj1pLkN1c3RvbUV2ZW50OyJmdW5jdGlvbiI9PXR5cGVvZiByP3I9bmV3IHIoZSxuKToocj1pLmRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpLG4/KHIuaW5pdEV2ZW50KGUsbi5idWJibGVzLG4uY2FuY2VsYWJsZSksci5kZXRhaWw9bi5kZXRhaWwpOnIuaW5pdEV2ZW50KGUsITEsITEpKSx0LmRpc3BhdGNoRXZlbnQocil9ZnVuY3Rpb24gX3UodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZ3UodGhpcyx0LGUpfX1mdW5jdGlvbiB5dSh0LGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBndSh0aGlzLHQsZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX0idW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50JiYoIm9ubW91c2VlbnRlciJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnR8fChsdT17bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9KSk7dmFyIHZ1PVtudWxsXTtmdW5jdGlvbiBidSh0LGUpe3RoaXMuX2dyb3Vwcz10LHRoaXMuX3BhcmVudHM9ZX1mdW5jdGlvbiB4dSgpe3JldHVybiBuZXcgYnUoW1tkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXSx2dSl9ZnVuY3Rpb24gd3UodCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P25ldyBidShbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodCldXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IGJ1KFtbdF1dLHZ1KX1idS5wcm90b3R5cGU9eHUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpidSxzZWxlY3Q6ZnVuY3Rpb24gU3UodCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PXZjKHQpKTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49ZS5sZW5ndGgsaT1uZXcgQXJyYXkobikscj0wO3I8bjsrK3IpZm9yKHZhciBvLGEscz1lW3JdLGw9cy5sZW5ndGgsYz1pW3JdPW5ldyBBcnJheShsKSx1PTA7dTxsOysrdSkobz1zW3VdKSYmKGE9dC5jYWxsKG8sby5fX2RhdGFfXyx1LHMpKSYmKCJfX2RhdGFfXyJpbiBvJiYoYS5fX2RhdGFfXz1vLl9fZGF0YV9fKSxjW3VdPWEpO3JldHVybiBuZXcgYnUoaSx0aGlzLl9wYXJlbnRzKX0sc2VsZWN0QWxsOmZ1bmN0aW9uIE11KHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD14Yyh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLGk9W10scj1bXSxvPTA7bzxuOysrbylmb3IodmFyIGEscz1lW29dLGw9cy5sZW5ndGgsYz0wO2M8bDsrK2MpKGE9c1tjXSkmJihpLnB1c2godC5jYWxsKGEsYS5fX2RhdGFfXyxjLHMpKSxyLnB1c2goYSkpO3JldHVybiBuZXcgYnUoaSxyKX0sZmlsdGVyOmZ1bmN0aW9uIEV1KHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD13Yyh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLGk9bmV3IEFycmF5KG4pLHI9MDtyPG47KytyKWZvcih2YXIgbyxhPWVbcl0scz1hLmxlbmd0aCxsPWlbcl09W10sYz0wO2M8czsrK2MpKG89YVtjXSkmJnQuY2FsbChvLG8uX19kYXRhX18sYyxhKSYmbC5wdXNoKG8pO3JldHVybiBuZXcgYnUoaSx0aGlzLl9wYXJlbnRzKX0sZGF0YTpmdW5jdGlvbiBUdSh0LGUpe2lmKCF0KXJldHVybiBmPW5ldyBBcnJheSh0aGlzLnNpemUoKSksdT0tMSx0aGlzLmVhY2goKGZ1bmN0aW9uKHQpe2ZbKyt1XT10fSkpLGY7dmFyIG49ZT9UYzpFYyxpPXRoaXMuX3BhcmVudHMscj10aGlzLl9ncm91cHM7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PShmdW5jdGlvbiBvKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0pKHQpKTtmb3IodmFyIGE9ci5sZW5ndGgscz1uZXcgQXJyYXkoYSksbD1uZXcgQXJyYXkoYSksYz1uZXcgQXJyYXkoYSksdT0wO3U8YTsrK3Upe3ZhciBoPWlbdV0sZD1yW3VdLHA9ZC5sZW5ndGgsZj10LmNhbGwoaCxoJiZoLl9fZGF0YV9fLHUsaSksbT1mLmxlbmd0aCxnPWxbdV09bmV3IEFycmF5KG0pLF89c1t1XT1uZXcgQXJyYXkobSk7bihoLGQsZyxfLGNbdV09bmV3IEFycmF5KHApLGYsZSk7Zm9yKHZhciB5LHYsYj0wLHg9MDtiPG07KytiKWlmKHk9Z1tiXSl7Zm9yKGI+PXgmJih4PWIrMSk7ISh2PV9beF0pJiYrK3g8bTspO3kuX25leHQ9dnx8bnVsbH19cmV0dXJuKHM9bmV3IGJ1KHMsaSkpLl9lbnRlcj1sLHMuX2V4aXQ9YyxzfSxlbnRlcjpmdW5jdGlvbiBDdSgpe3JldHVybiBuZXcgYnUodGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAoU2MpLHRoaXMuX3BhcmVudHMpfSxleGl0OmZ1bmN0aW9uIEF1KCl7cmV0dXJuIG5ldyBidSh0aGlzLl9leGl0fHx0aGlzLl9ncm91cHMubWFwKFNjKSx0aGlzLl9wYXJlbnRzKX0sam9pbjpmdW5jdGlvbiBrdSh0LGUsbil7dmFyIGk9dGhpcy5lbnRlcigpLHI9dGhpcyxvPXRoaXMuZXhpdCgpO3JldHVybiBpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3QoaSk6aS5hcHBlbmQodCsiIiksbnVsbCE9ZSYmKHI9ZShyKSksbnVsbD09bj9vLnJlbW92ZSgpOm4obyksaSYmcj9pLm1lcmdlKHIpLm9yZGVyKCk6cn0sbWVyZ2U6ZnVuY3Rpb24gTHUodCl7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPXQuX2dyb3VwcyxpPWUubGVuZ3RoLHI9TWF0aC5taW4oaSxuLmxlbmd0aCksbz1uZXcgQXJyYXkoaSksYT0wO2E8cjsrK2EpZm9yKHZhciBzLGw9ZVthXSxjPW5bYV0sdT1sLmxlbmd0aCxoPW9bYV09bmV3IEFycmF5KHUpLGQ9MDtkPHU7KytkKShzPWxbZF18fGNbZF0pJiYoaFtkXT1zKTtmb3IoO2E8aTsrK2Epb1thXT1lW2FdO3JldHVybiBuZXcgYnUobyx0aGlzLl9wYXJlbnRzKX0sb3JkZXI6ZnVuY3Rpb24gUHUoKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9LTEsbj10Lmxlbmd0aDsrK2U8bjspZm9yKHZhciBpLHI9dFtlXSxvPXIubGVuZ3RoLTEsYT1yW29dOy0tbz49MDspKGk9cltvXSkmJihhJiY0XmkuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYSkmJmEucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoaSxhKSxhPWkpO3JldHVybiB0aGlzfSxzb3J0OmZ1bmN0aW9uIE51KHQpe2Z1bmN0aW9uIGUoZSxuKXtyZXR1cm4gZSYmbj90KGUuX19kYXRhX18sbi5fX2RhdGFfXyk6IWUtIW59dHx8KHQ9Q2MpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxyPW5ldyBBcnJheShpKSxvPTA7bzxpOysrbyl7Zm9yKHZhciBhLHM9bltvXSxsPXMubGVuZ3RoLGM9cltvXT1uZXcgQXJyYXkobCksdT0wO3U8bDsrK3UpKGE9c1t1XSkmJihjW3VdPWEpO2Muc29ydChlKX1yZXR1cm4gbmV3IGJ1KHIsdGhpcy5fcGFyZW50cykub3JkZXIoKX0sY2FsbDpmdW5jdGlvbiBJdSgpe3ZhciB0PWFyZ3VtZW50c1swXTtyZXR1cm4gYXJndW1lbnRzWzBdPXRoaXMsdC5hcHBseShudWxsLGFyZ3VtZW50cyksdGhpc30sbm9kZXM6ZnVuY3Rpb24gT3UoKXt2YXIgdD1uZXcgQXJyYXkodGhpcy5zaXplKCkpLGU9LTE7cmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oKXt0WysrZV09dGhpc30pKSx0fSxub2RlOmZ1bmN0aW9uIFJ1KCl7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPTAsbj10Lmxlbmd0aDtlPG47KytlKWZvcih2YXIgaT10W2VdLHI9MCxvPWkubGVuZ3RoO3I8bzsrK3Ipe3ZhciBhPWlbcl07aWYoYSlyZXR1cm4gYX1yZXR1cm4gbnVsbH0sc2l6ZTpmdW5jdGlvbiB6dSgpe3ZhciB0PTA7cmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oKXsrK3R9KSksdH0sZW1wdHk6ZnVuY3Rpb24gRHUoKXtyZXR1cm4hdGhpcy5ub2RlKCl9LGVhY2g6ZnVuY3Rpb24gQnUodCl7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPTAsaT1lLmxlbmd0aDtuPGk7KytuKWZvcih2YXIgcixvPWVbbl0sYT0wLHM9by5sZW5ndGg7YTxzOysrYSkocj1vW2FdKSYmdC5jYWxsKHIsci5fX2RhdGFfXyxhLG8pO3JldHVybiB0aGlzfSxhdHRyOmZ1bmN0aW9uIEh1KHQsZSl7dmFyIG49ZmModCk7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgaT10aGlzLm5vZGUoKTtyZXR1cm4gbi5sb2NhbD9pLmdldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCk6aS5nZXRBdHRyaWJ1dGUobil9cmV0dXJuIHRoaXMuZWFjaCgobnVsbD09ZT9uLmxvY2FsP2tjOkFjOiJmdW5jdGlvbiI9PXR5cGVvZiBlP24ubG9jYWw/SWM6TmM6bi5sb2NhbD9QYzpMYykobixlKSl9LHN0eWxlOmZ1bmN0aW9uIEZ1KHQsZSxuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgobnVsbD09ZT9SYzoiZnVuY3Rpb24iPT10eXBlb2YgZT9EYzp6YykodCxlLG51bGw9PW4/IiI6bikpOkJjKHRoaXMubm9kZSgpLHQpfSxwcm9wZXJ0eTpmdW5jdGlvbiBWdSh0LGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChudWxsPT1lP0hjOiJmdW5jdGlvbiI9PXR5cGVvZiBlP1ZjOkZjKSh0LGUpKTp0aGlzLm5vZGUoKVt0XX0sY2xhc3NlZDpmdW5jdGlvbiBVdSh0LGUpe3ZhciBuPVVjKHQrIiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBpPWpjKHRoaXMubm9kZSgpKSxyPS0xLG89bi5sZW5ndGg7KytyPG87KWlmKCFpLmNvbnRhaW5zKG5bcl0pKXJldHVybiExO3JldHVybiEwfXJldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBlPyRjOmU/WWM6WGMpKG4sZSkpfSx0ZXh0OmZ1bmN0aW9uIGp1KHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChudWxsPT10P0tjOigiZnVuY3Rpb24iPT10eXBlb2YgdD9KYzpaYykodCkpOnRoaXMubm9kZSgpLnRleHRDb250ZW50fSxodG1sOmZ1bmN0aW9uIEd1KHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChudWxsPT10P1FjOigiZnVuY3Rpb24iPT10eXBlb2YgdD9ldTp0dSkodCkpOnRoaXMubm9kZSgpLmlubmVySFRNTH0scmFpc2U6ZnVuY3Rpb24gV3UoKXtyZXR1cm4gdGhpcy5lYWNoKG51KX0sbG93ZXI6ZnVuY3Rpb24gcXUoKXtyZXR1cm4gdGhpcy5lYWNoKGl1KX0sYXBwZW5kOmZ1bmN0aW9uIFl1KHQpe3ZhciBlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6X2ModCk7cmV0dXJuIHRoaXMuc2VsZWN0KChmdW5jdGlvbigpe3JldHVybiB0aGlzLmFwcGVuZENoaWxkKGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0pKX0saW5zZXJ0OmZ1bmN0aW9uIFh1KHQsZSl7dmFyIG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpfYyh0KSxpPW51bGw9PWU/cnU6ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTp2YyhlKTtyZXR1cm4gdGhpcy5zZWxlY3QoKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKG4uYXBwbHkodGhpcyxhcmd1bWVudHMpLGkuYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxsKX0pKX0scmVtb3ZlOmZ1bmN0aW9uICR1KCl7cmV0dXJuIHRoaXMuZWFjaChvdSl9LGNsb25lOmZ1bmN0aW9uIEt1KHQpe3JldHVybiB0aGlzLnNlbGVjdCh0P3N1OmF1KX0sZGF0dW06ZnVuY3Rpb24gWnUodCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iLHQpOnRoaXMubm9kZSgpLl9fZGF0YV9ffSxvbjpmdW5jdGlvbiBKdSh0LGUsbil7dmFyIGkscixvPWR1KHQrIiIpLGE9by5sZW5ndGg7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtmb3Iocz1lP2Z1OnB1LG51bGw9PW4mJihuPSExKSxpPTA7aTxhOysraSl0aGlzLmVhY2gocyhvW2ldLGUsbikpO3JldHVybiB0aGlzfXZhciBzPXRoaXMubm9kZSgpLl9fb247aWYocylmb3IodmFyIGwsYz0wLHU9cy5sZW5ndGg7Yzx1OysrYylmb3IoaT0wLGw9c1tjXTtpPGE7KytpKWlmKChyPW9baV0pLnR5cGU9PT1sLnR5cGUmJnIubmFtZT09PWwubmFtZSlyZXR1cm4gbC52YWx1ZX0sZGlzcGF0Y2g6ZnVuY3Rpb24gUXUodCxlKXtyZXR1cm4gdGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgZT95dTpfdSkodCxlKSl9fTt2YXIgdGg9MDtmdW5jdGlvbiBlaCgpe3JldHVybiBuZXcgbmh9ZnVuY3Rpb24gbmgoKXt0aGlzLl89IkAiKygrK3RoKS50b1N0cmluZygzNil9ZnVuY3Rpb24gaWgoKXtmb3IodmFyIHQsZT1jdTt0PWUuc291cmNlRXZlbnQ7KWU9dDtyZXR1cm4gZX1mdW5jdGlvbiByaCh0LGUpe3ZhciBuPXQub3duZXJTVkdFbGVtZW50fHx0O2lmKG4uY3JlYXRlU1ZHUG9pbnQpe3ZhciBpPW4uY3JlYXRlU1ZHUG9pbnQoKTtyZXR1cm4gaS54PWUuY2xpZW50WCxpLnk9ZS5jbGllbnRZLFsoaT1pLm1hdHJpeFRyYW5zZm9ybSh0LmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSkpLngsaS55XX12YXIgcj10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybltlLmNsaWVudFgtci5sZWZ0LXQuY2xpZW50TGVmdCxlLmNsaWVudFktci50b3AtdC5jbGllbnRUb3BdfWZ1bmN0aW9uIG9oKHQpe3ZhciBlPWloKCk7cmV0dXJuIGUuY2hhbmdlZFRvdWNoZXMmJihlPWUuY2hhbmdlZFRvdWNoZXNbMF0pLHJoKHQsZSl9ZnVuY3Rpb24gYWgodCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P25ldyBidShbZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCh0KV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyBidShbbnVsbD09dD9bXTp0XSx2dSl9ZnVuY3Rpb24gc2godCxlLG4pe2FyZ3VtZW50cy5sZW5ndGg8MyYmKG49ZSxlPWloKCkuY2hhbmdlZFRvdWNoZXMpO2Zvcih2YXIgaSxyPTAsbz1lP2UubGVuZ3RoOjA7cjxvOysrcilpZigoaT1lW3JdKS5pZGVudGlmaWVyPT09bilyZXR1cm4gcmgodCxpKTtyZXR1cm4gbnVsbH1mdW5jdGlvbiBsaCgpe2N1LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIGNoKCl7Y3UucHJldmVudERlZmF1bHQoKSxjdS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiB1aCh0KXt2YXIgZT10LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxuPXd1KHQpLm9uKCJkcmFnc3RhcnQuZHJhZyIsY2gsITApOyJvbnNlbGVjdHN0YXJ0ImluIGU/bi5vbigic2VsZWN0c3RhcnQuZHJhZyIsY2gsITApOihlLl9fbm9zZWxlY3Q9ZS5zdHlsZS5Nb3pVc2VyU2VsZWN0LGUuc3R5bGUuTW96VXNlclNlbGVjdD0ibm9uZSIpfWZ1bmN0aW9uIGhoKHQsZSl7dmFyIG49dC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsaT13dSh0KS5vbigiZHJhZ3N0YXJ0LmRyYWciLG51bGwpO2UmJihpLm9uKCJjbGljay5kcmFnIixjaCwhMCksc2V0VGltZW91dCgoZnVuY3Rpb24oKXtpLm9uKCJjbGljay5kcmFnIixudWxsKX0pLDApKSwib25zZWxlY3RzdGFydCJpbiBuP2kub24oInNlbGVjdHN0YXJ0LmRyYWciLG51bGwpOihuLnN0eWxlLk1velVzZXJTZWxlY3Q9bi5fX25vc2VsZWN0LGRlbGV0ZSBuLl9fbm9zZWxlY3QpfWZ1bmN0aW9uIGRoKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBwaCh0LGUsbixpLHIsbyxhLHMsbCxjKXt0aGlzLnRhcmdldD10LHRoaXMudHlwZT1lLHRoaXMuc3ViamVjdD1uLHRoaXMuaWRlbnRpZmllcj1pLHRoaXMuYWN0aXZlPXIsdGhpcy54PW8sdGhpcy55PWEsdGhpcy5keD1zLHRoaXMuZHk9bCx0aGlzLl89Y31mdW5jdGlvbiBmaCgpe3JldHVybiFjdS5jdHJsS2V5JiYhY3UuYnV0dG9ufWZ1bmN0aW9uIG1oKCl7cmV0dXJuIHRoaXMucGFyZW50Tm9kZX1mdW5jdGlvbiBnaCh0KXtyZXR1cm4gbnVsbD09dD97eDpjdS54LHk6Y3UueX06dH1mdW5jdGlvbiBfaCgpe3JldHVybiBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHN8fCJvbnRvdWNoc3RhcnQiaW4gdGhpc31mdW5jdGlvbiB5aCgpe3ZhciB0LGUsbixpLHI9Zmgsbz1taCxhPWdoLHM9X2gsbD17fSxjPXNjKCJzdGFydCIsImRyYWciLCJlbmQiKSx1PTAsaD0wO2Z1bmN0aW9uIGQodCl7dC5vbigibW91c2Vkb3duLmRyYWciLHApLmZpbHRlcihzKS5vbigidG91Y2hzdGFydC5kcmFnIixnKS5vbigidG91Y2htb3ZlLmRyYWciLF8pLm9uKCJ0b3VjaGVuZC5kcmFnIHRvdWNoY2FuY2VsLmRyYWciLHkpLnN0eWxlKCJ0b3VjaC1hY3Rpb24iLCJub25lIikuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKX1mdW5jdGlvbiBwKCl7aWYoIWkmJnIuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgYT12KCJtb3VzZSIsby5hcHBseSh0aGlzLGFyZ3VtZW50cyksb2gsdGhpcyxhcmd1bWVudHMpO2EmJih3dShjdS52aWV3KS5vbigibW91c2Vtb3ZlLmRyYWciLGYsITApLm9uKCJtb3VzZXVwLmRyYWciLG0sITApLHVoKGN1LnZpZXcpLGxoKCksbj0hMSx0PWN1LmNsaWVudFgsZT1jdS5jbGllbnRZLGEoInN0YXJ0IikpfX1mdW5jdGlvbiBmKCl7aWYoY2goKSwhbil7dmFyIGk9Y3UuY2xpZW50WC10LHI9Y3UuY2xpZW50WS1lO249aSppK3Iqcj5ofWwubW91c2UoImRyYWciKX1mdW5jdGlvbiBtKCl7d3UoY3Uudmlldykub24oIm1vdXNlbW92ZS5kcmFnIG1vdXNldXAuZHJhZyIsbnVsbCksaGgoY3UudmlldyxuKSxjaCgpLGwubW91c2UoImVuZCIpfWZ1bmN0aW9uIGcoKXtpZihyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIHQsZSxuPWN1LmNoYW5nZWRUb3VjaGVzLGk9by5hcHBseSh0aGlzLGFyZ3VtZW50cyksYT1uLmxlbmd0aDtmb3IodD0wO3Q8YTsrK3QpKGU9dihuW3RdLmlkZW50aWZpZXIsaSxzaCx0aGlzLGFyZ3VtZW50cykpJiYobGgoKSxlKCJzdGFydCIpKX19ZnVuY3Rpb24gXygpe3ZhciB0LGUsbj1jdS5jaGFuZ2VkVG91Y2hlcyxpPW4ubGVuZ3RoO2Zvcih0PTA7dDxpOysrdCkoZT1sW25bdF0uaWRlbnRpZmllcl0pJiYoY2goKSxlKCJkcmFnIikpfWZ1bmN0aW9uIHkoKXt2YXIgdCxlLG49Y3UuY2hhbmdlZFRvdWNoZXMscj1uLmxlbmd0aDtmb3IoaSYmY2xlYXJUaW1lb3V0KGkpLGk9c2V0VGltZW91dCgoZnVuY3Rpb24oKXtpPW51bGx9KSw1MDApLHQ9MDt0PHI7Kyt0KShlPWxbblt0XS5pZGVudGlmaWVyXSkmJihsaCgpLGUoImVuZCIpKX1mdW5jdGlvbiB2KHQsZSxuLGkscil7dmFyIG8scyxoLHA9bihlLHQpLGY9Yy5jb3B5KCk7aWYobXUobmV3IHBoKGQsImJlZm9yZXN0YXJ0IixvLHQsdSxwWzBdLHBbMV0sMCwwLGYpLChmdW5jdGlvbigpe3JldHVybiBudWxsIT0oY3Uuc3ViamVjdD1vPWEuYXBwbHkoaSxyKSkmJihzPW8ueC1wWzBdfHwwLGg9by55LXBbMV18fDAsITApfSkpKXJldHVybiBmdW5jdGlvbiBhKGMpe3ZhciBtLGc9cDtzd2l0Y2goYyl7Y2FzZSJzdGFydCI6bFt0XT1hLG09dSsrO2JyZWFrO2Nhc2UiZW5kIjpkZWxldGUgbFt0XSwtLXU7Y2FzZSJkcmFnIjpwPW4oZSx0KSxtPXV9bXUobmV3IHBoKGQsYyxvLHQsbSxwWzBdK3MscFsxXStoLHBbMF0tZ1swXSxwWzFdLWdbMV0sZiksZi5hcHBseSxmLFtjLGkscl0pfX1yZXR1cm4gZC5maWx0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpkaCghIXQpLGQpOnJ9LGQuY29udGFpbmVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZGgodCksZCk6b30sZC5zdWJqZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZGgodCksZCk6YX0sZC50b3VjaGFibGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpkaCghIXQpLGQpOnN9LGQub249ZnVuY3Rpb24oKXt2YXIgdD1jLm9uLmFwcGx5KGMsYXJndW1lbnRzKTtyZXR1cm4gdD09PWM/ZDp0fSxkLmNsaWNrRGlzdGFuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9KHQ9K3QpKnQsZCk6TWF0aC5zcXJ0KGgpfSxkfWZ1bmN0aW9uIHZoKHQsZSxuKXt0LnByb3RvdHlwZT1lLnByb3RvdHlwZT1uLG4uY29uc3RydWN0b3I9dH1mdW5jdGlvbiBiaCh0LGUpe3ZhciBuPU9iamVjdC5jcmVhdGUodC5wcm90b3R5cGUpO2Zvcih2YXIgaSBpbiBlKW5baV09ZVtpXTtyZXR1cm4gbn1mdW5jdGlvbiB4aCgpe31uaC5wcm90b3R5cGU9ZWgucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpuaCxnZXQ6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuXzshKGUgaW4gdCk7KWlmKCEodD10LnBhcmVudE5vZGUpKXJldHVybjtyZXR1cm4gdFtlXX0sc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbdGhpcy5fXT1lfSxyZW1vdmU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuXyBpbiB0JiZkZWxldGUgdFt0aGlzLl9dfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fSxwaC5wcm90b3R5cGUub249ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl8ub24uYXBwbHkodGhpcy5fLGFyZ3VtZW50cyk7cmV0dXJuIHQ9PT10aGlzLl8/dGhpczp0fTt2YXIgd2g9LjcsU2g9MS93aCxNaD0iXFxzKihbKy1dP1xcZCspXFxzKiIsRWg9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pXFxzKiIsVGg9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pJVxccyoiLENoPS9eIyhbMC05YS1mXXszLDh9KSQvLEFoPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tNaCxNaCxNaF0rIlxcKSQiKSxraD1uZXcgUmVnRXhwKCJecmdiXFwoIitbVGgsVGgsVGhdKyJcXCkkIiksTGg9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tNaCxNaCxNaCxFaF0rIlxcKSQiKSxQaD1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW1RoLFRoLFRoLEVoXSsiXFwpJCIpLE5oPW5ldyBSZWdFeHAoIl5oc2xcXCgiK1tFaCxUaCxUaF0rIlxcKSQiKSxJaD1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrW0VoLFRoLFRoLEVoXSsiXFwpJCIpLE9oPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O2Z1bmN0aW9uIFJoKCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4KCl9ZnVuY3Rpb24gemgoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRSZ2IoKX1mdW5jdGlvbiBEaCh0KXt2YXIgZSxuO3JldHVybiB0PSh0KyIiKS50cmltKCkudG9Mb3dlckNhc2UoKSwoZT1DaC5leGVjKHQpKT8obj1lWzFdLmxlbmd0aCxlPXBhcnNlSW50KGVbMV0sMTYpLDY9PT1uP0JoKGUpOjM9PT1uP25ldyBVaChlPj44JjE1fGU+PjQmMjQwLGU+PjQmMTV8MjQwJmUsKDE1JmUpPDw0fDE1JmUsMSk6OD09PW4/SGgoZT4+MjQmMjU1LGU+PjE2JjI1NSxlPj44JjI1NSwoMjU1JmUpLzI1NSk6ND09PW4/SGgoZT4+MTImMTV8ZT4+OCYyNDAsZT4+OCYxNXxlPj40JjI0MCxlPj40JjE1fDI0MCZlLCgoMTUmZSk8PDR8MTUmZSkvMjU1KTpudWxsKTooZT1BaC5leGVjKHQpKT9uZXcgVWgoZVsxXSxlWzJdLGVbM10sMSk6KGU9a2guZXhlYyh0KSk/bmV3IFVoKDI1NSplWzFdLzEwMCwyNTUqZVsyXS8xMDAsMjU1KmVbM10vMTAwLDEpOihlPUxoLmV4ZWModCkpP0hoKGVbMV0sZVsyXSxlWzNdLGVbNF0pOihlPVBoLmV4ZWModCkpP0hoKDI1NSplWzFdLzEwMCwyNTUqZVsyXS8xMDAsMjU1KmVbM10vMTAwLGVbNF0pOihlPU5oLmV4ZWModCkpP3FoKGVbMV0sZVsyXS8xMDAsZVszXS8xMDAsMSk6KGU9SWguZXhlYyh0KSk/cWgoZVsxXSxlWzJdLzEwMCxlWzNdLzEwMCxlWzRdKTpPaC5oYXNPd25Qcm9wZXJ0eSh0KT9CaChPaFt0XSk6InRyYW5zcGFyZW50Ij09PXQ/bmV3IFVoKE5hTixOYU4sTmFOLDApOm51bGx9ZnVuY3Rpb24gQmgodCl7cmV0dXJuIG5ldyBVaCh0Pj4xNiYyNTUsdD4+OCYyNTUsMjU1JnQsMSl9ZnVuY3Rpb24gSGgodCxlLG4saSl7cmV0dXJuIGk8PTAmJih0PWU9bj1OYU4pLG5ldyBVaCh0LGUsbixpKX1mdW5jdGlvbiBGaCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIHhofHwodD1EaCh0KSksdD9uZXcgVWgoKHQ9dC5yZ2IoKSkucix0LmcsdC5iLHQub3BhY2l0eSk6bmV3IFVofWZ1bmN0aW9uIFZoKHQsZSxuLGkpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9GaCh0KTpuZXcgVWgodCxlLG4sbnVsbD09aT8xOmkpfWZ1bmN0aW9uIFVoKHQsZSxuLGkpe3RoaXMucj0rdCx0aGlzLmc9K2UsdGhpcy5iPStuLHRoaXMub3BhY2l0eT0raX1mdW5jdGlvbiBqaCgpe3JldHVybiIjIitXaCh0aGlzLnIpK1doKHRoaXMuZykrV2godGhpcy5iKX1mdW5jdGlvbiBHaCgpe3ZhciB0PXRoaXMub3BhY2l0eTtyZXR1cm4oMT09PSh0PWlzTmFOKHQpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLHQpKSk/InJnYigiOiJyZ2JhKCIpK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5yKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmcpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuYil8fDApKSsoMT09PXQ/IikiOiIsICIrdCsiKSIpfWZ1bmN0aW9uIFdoKHQpe3JldHVybigodD1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHQpfHwwKSkpPDE2PyIwIjoiIikrdC50b1N0cmluZygxNil9ZnVuY3Rpb24gcWgodCxlLG4saSl7cmV0dXJuIGk8PTA/dD1lPW49TmFOOm48PTB8fG4+PTE/dD1lPU5hTjplPD0wJiYodD1OYU4pLG5ldyAkaCh0LGUsbixpKX1mdW5jdGlvbiBZaCh0KXtpZih0IGluc3RhbmNlb2YgJGgpcmV0dXJuIG5ldyAkaCh0LmgsdC5zLHQubCx0Lm9wYWNpdHkpO2lmKHQgaW5zdGFuY2VvZiB4aHx8KHQ9RGgodCkpLCF0KXJldHVybiBuZXcgJGg7aWYodCBpbnN0YW5jZW9mICRoKXJldHVybiB0O3ZhciBlPSh0PXQucmdiKCkpLnIvMjU1LG49dC5nLzI1NSxpPXQuYi8yNTUscj1NYXRoLm1pbihlLG4saSksbz1NYXRoLm1heChlLG4saSksYT1OYU4scz1vLXIsbD0obytyKS8yO3JldHVybiBzPyhhPWU9PT1vPyhuLWkpL3MrNioobjxpKTpuPT09bz8oaS1lKS9zKzI6KGUtbikvcys0LHMvPWw8LjU/bytyOjItby1yLGEqPTYwKTpzPWw+MCYmbDwxPzA6YSxuZXcgJGgoYSxzLGwsdC5vcGFjaXR5KX1mdW5jdGlvbiBYaCh0LGUsbixpKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/WWgodCk6bmV3ICRoKHQsZSxuLG51bGw9PWk/MTppKX1mdW5jdGlvbiAkaCh0LGUsbixpKXt0aGlzLmg9K3QsdGhpcy5zPStlLHRoaXMubD0rbix0aGlzLm9wYWNpdHk9K2l9ZnVuY3Rpb24gS2godCxlLG4pe3JldHVybiAyNTUqKHQ8NjA/ZSsobi1lKSp0LzYwOnQ8MTgwP246dDwyNDA/ZSsobi1lKSooMjQwLXQpLzYwOmUpfXZoKHhoLERoLHtjb3B5OmZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsdCl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OlJoLGZvcm1hdEhleDpSaCxmb3JtYXRIc2w6ZnVuY3Rpb24gWmgoKXtyZXR1cm4gWWgodGhpcykuZm9ybWF0SHNsKCl9LGZvcm1hdFJnYjp6aCx0b1N0cmluZzp6aH0pLHZoKFVoLFZoLGJoKHhoLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P1NoOk1hdGgucG93KFNoLHQpLG5ldyBVaCh0aGlzLnIqdCx0aGlzLmcqdCx0aGlzLmIqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD93aDpNYXRoLnBvdyh3aCx0KSxuZXcgVWgodGhpcy5yKnQsdGhpcy5nKnQsdGhpcy5iKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuLS41PD10aGlzLnImJnRoaXMucjwyNTUuNSYmLS41PD10aGlzLmcmJnRoaXMuZzwyNTUuNSYmLS41PD10aGlzLmImJnRoaXMuYjwyNTUuNSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGhleDpqaCxmb3JtYXRIZXg6amgsZm9ybWF0UmdiOkdoLHRvU3RyaW5nOkdofSkpLHZoKCRoLFhoLGJoKHhoLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P1NoOk1hdGgucG93KFNoLHQpLG5ldyAkaCh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P3doOk1hdGgucG93KHdoLHQpLG5ldyAkaCh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PXRoaXMuaCUzNjArMzYwKih0aGlzLmg8MCksZT1pc05hTih0KXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxuPXRoaXMubCxpPW4rKG48LjU/bjoxLW4pKmUscj0yKm4taTtyZXR1cm4gbmV3IFVoKEtoKHQ+PTI0MD90LTI0MDp0KzEyMCxyLGkpLEtoKHQscixpKSxLaCh0PDEyMD90KzI0MDp0LTEyMCxyLGkpLHRoaXMub3BhY2l0eSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxmb3JtYXRIc2w6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wYWNpdHk7cmV0dXJuKDE9PT0odD1pc05hTih0KT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSkpPyJoc2woIjoiaHNsYSgiKSsodGhpcy5ofHwwKSsiLCAiKzEwMCoodGhpcy5zfHwwKSsiJSwgIisxMDAqKHRoaXMubHx8MCkrIiUiKygxPT09dD8iKSI6IiwgIit0KyIpIil9fSkpO3ZhciBKaD1NYXRoLlBJLzE4MCxRaD0xODAvTWF0aC5QSSx0ZD0uOTY0MjIsZWQ9LjgyNTIxLG5kPTQvMjksaWQ9Ni8yOSxyZD0zKmlkKmlkO2Z1bmN0aW9uIG9kKHQpe2lmKHQgaW5zdGFuY2VvZiBzZClyZXR1cm4gbmV3IHNkKHQubCx0LmEsdC5iLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIGZkKXJldHVybiBtZCh0KTt0IGluc3RhbmNlb2YgVWh8fCh0PUZoKHQpKTt2YXIgZSxuLGk9aGQodC5yKSxyPWhkKHQuZyksbz1oZCh0LmIpLGE9bGQoKC4yMjI1MDQ1KmkrLjcxNjg3ODYqcisuMDYwNjE2OSpvKS8xKTtyZXR1cm4gaT09PXImJnI9PT1vP2U9bj1hOihlPWxkKCguNDM2MDc0NyppKy4zODUwNjQ5KnIrLjE0MzA4MDQqbykvdGQpLG49bGQoKC4wMTM5MzIyKmkrLjA5NzEwNDUqcisuNzE0MTczMypvKS9lZCkpLG5ldyBzZCgxMTYqYS0xNiw1MDAqKGUtYSksMjAwKihhLW4pLHQub3BhY2l0eSl9ZnVuY3Rpb24gYWQodCxlLG4saSl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP29kKHQpOm5ldyBzZCh0LGUsbixudWxsPT1pPzE6aSl9ZnVuY3Rpb24gc2QodCxlLG4saSl7dGhpcy5sPSt0LHRoaXMuYT0rZSx0aGlzLmI9K24sdGhpcy5vcGFjaXR5PStpfWZ1bmN0aW9uIGxkKHQpe3JldHVybiB0Pi4wMDg4NTY0NTE2NzkwMzU2MzE/TWF0aC5wb3codCwxLzMpOnQvcmQrbmR9ZnVuY3Rpb24gY2QodCl7cmV0dXJuIHQ+aWQ/dCp0KnQ6cmQqKHQtbmQpfWZ1bmN0aW9uIHVkKHQpe3JldHVybiAyNTUqKHQ8PS4wMDMxMzA4PzEyLjkyKnQ6MS4wNTUqTWF0aC5wb3codCwxLzIuNCktLjA1NSl9ZnVuY3Rpb24gaGQodCl7cmV0dXJuKHQvPTI1NSk8PS4wNDA0NT90LzEyLjkyOk1hdGgucG93KCh0Ky4wNTUpLzEuMDU1LDIuNCl9ZnVuY3Rpb24gZGQodCl7aWYodCBpbnN0YW5jZW9mIGZkKXJldHVybiBuZXcgZmQodC5oLHQuYyx0LmwsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2Ygc2R8fCh0PW9kKHQpKSwwPT09dC5hJiYwPT09dC5iKXJldHVybiBuZXcgZmQoTmFOLDA8dC5sJiZ0Lmw8MTAwPzA6TmFOLHQubCx0Lm9wYWNpdHkpO3ZhciBlPU1hdGguYXRhbjIodC5iLHQuYSkqUWg7cmV0dXJuIG5ldyBmZChlPDA/ZSszNjA6ZSxNYXRoLnNxcnQodC5hKnQuYSt0LmIqdC5iKSx0LmwsdC5vcGFjaXR5KX1mdW5jdGlvbiBwZCh0LGUsbixpKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/ZGQodCk6bmV3IGZkKHQsZSxuLG51bGw9PWk/MTppKX1mdW5jdGlvbiBmZCh0LGUsbixpKXt0aGlzLmg9K3QsdGhpcy5jPStlLHRoaXMubD0rbix0aGlzLm9wYWNpdHk9K2l9ZnVuY3Rpb24gbWQodCl7aWYoaXNOYU4odC5oKSlyZXR1cm4gbmV3IHNkKHQubCwwLDAsdC5vcGFjaXR5KTt2YXIgZT10LmgqSmg7cmV0dXJuIG5ldyBzZCh0LmwsTWF0aC5jb3MoZSkqdC5jLE1hdGguc2luKGUpKnQuYyx0Lm9wYWNpdHkpfXZoKHNkLGFkLGJoKHhoLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IHNkKHRoaXMubCsxOCoobnVsbD09dD8xOnQpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgc2QodGhpcy5sLTE4KihudWxsPT10PzE6dCksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD0odGhpcy5sKzE2KS8xMTYsZT1pc05hTih0aGlzLmEpP3Q6dCt0aGlzLmEvNTAwLG49aXNOYU4odGhpcy5iKT90OnQtdGhpcy5iLzIwMDtyZXR1cm4gbmV3IFVoKHVkKDMuMTMzODU2MSooZT10ZCpjZChlKSktMS42MTY4NjY3Kih0PTEqY2QodCkpLS40OTA2MTQ2KihuPWVkKmNkKG4pKSksdWQoLS45Nzg3Njg0KmUrMS45MTYxNDE1KnQrLjAzMzQ1NCpuKSx1ZCguMDcxOTQ1MyplLS4yMjg5OTE0KnQrMS40MDUyNDI3Km4pLHRoaXMub3BhY2l0eSl9fSkpLHZoKGZkLHBkLGJoKHhoLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGZkKHRoaXMuaCx0aGlzLmMsdGhpcy5sKzE4KihudWxsPT10PzE6dCksdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZmQodGhpcy5oLHRoaXMuYyx0aGlzLmwtMTgqKG51bGw9PXQ/MTp0KSx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gbWQodGhpcykucmdiKCl9fSkpO3ZhciBnZD0tLjI5MjI3LF9kPS0uOTA2NDkseWQ9MS45NzI5NDtmdW5jdGlvbiB2ZCh0KXtpZih0IGluc3RhbmNlb2YgeGQpcmV0dXJuIG5ldyB4ZCh0LmgsdC5zLHQubCx0Lm9wYWNpdHkpO3QgaW5zdGFuY2VvZiBVaHx8KHQ9RmgodCkpO3ZhciBlPXQuZy8yNTUsbj10LmIvMjU1LGk9KC0uNjU1NzYzNjY2Nzk5OTk5OSpuK3Quci8yNTUqLTEuNzg4NDUwMzgwNi0zLjUxNzI5ODI0MzgqZSkvLTUuOTYxNTEyMjkxMixyPW4taSxvPSh5ZCooZS1pKS1nZCpyKS9fZCxhPU1hdGguc3FydChvKm8rcipyKS8oeWQqaSooMS1pKSkscz1hP01hdGguYXRhbjIobyxyKSpRaC0xMjA6TmFOO3JldHVybiBuZXcgeGQoczwwP3MrMzYwOnMsYSxpLHQub3BhY2l0eSl9ZnVuY3Rpb24gYmQodCxlLG4saSl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3ZkKHQpOm5ldyB4ZCh0LGUsbixudWxsPT1pPzE6aSl9ZnVuY3Rpb24geGQodCxlLG4saSl7dGhpcy5oPSt0LHRoaXMucz0rZSx0aGlzLmw9K24sdGhpcy5vcGFjaXR5PStpfWZ1bmN0aW9uIHdkKHQsZSxuLGkscil7dmFyIG89dCp0LGE9byp0O3JldHVybigoMS0zKnQrMypvLWEpKmUrKDQtNipvKzMqYSkqbisoMSszKnQrMypvLTMqYSkqaSthKnIpLzZ9ZnVuY3Rpb24gU2QodCl7dmFyIGU9dC5sZW5ndGgtMTtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGk9bjw9MD9uPTA6bj49MT8obj0xLGUtMSk6TWF0aC5mbG9vcihuKmUpLHI9dFtpXSxvPXRbaSsxXTtyZXR1cm4gd2QoKG4taS9lKSplLGk+MD90W2ktMV06MipyLW8scixvLGk8ZS0xP3RbaSsyXToyKm8tcil9fWZ1bmN0aW9uIE1kKHQpe3ZhciBlPXQubGVuZ3RoO3JldHVybiBmdW5jdGlvbihuKXt2YXIgaT1NYXRoLmZsb29yKCgobiU9MSk8MD8rK246bikqZSk7cmV0dXJuIHdkKChuLWkvZSkqZSx0WyhpK2UtMSklZV0sdFtpJWVdLHRbKGkrMSklZV0sdFsoaSsyKSVlXSl9fWZ1bmN0aW9uIEVkKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBUZCh0LGUpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdCtuKmV9fWZ1bmN0aW9uIENkKHQsZSl7dmFyIG49ZS10O3JldHVybiBuP1RkKHQsbj4xODB8fG48LTE4MD9uLTM2MCpNYXRoLnJvdW5kKG4vMzYwKTpuKTpFZChpc05hTih0KT9lOnQpfWZ1bmN0aW9uIEFkKHQsZSl7dmFyIG49ZS10O3JldHVybiBuP1RkKHQsbik6RWQoaXNOYU4odCk/ZTp0KX12aCh4ZCxiZCxiaCh4aCx7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD9TaDpNYXRoLnBvdyhTaCx0KSxuZXcgeGQodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD93aDpNYXRoLnBvdyh3aCx0KSxuZXcgeGQodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD1pc05hTih0aGlzLmgpPzA6KHRoaXMuaCsxMjApKkpoLGU9K3RoaXMubCxuPWlzTmFOKHRoaXMucyk/MDp0aGlzLnMqZSooMS1lKSxpPU1hdGguY29zKHQpLHI9TWF0aC5zaW4odCk7cmV0dXJuIG5ldyBVaCgyNTUqKGUrbiooLS4xNDg2MSppKzEuNzgyNzcqcikpLDI1NSooZStuKihnZCppK19kKnIpKSwyNTUqKGUrbiooeWQqaSkpLHRoaXMub3BhY2l0eSl9fSkpO3ZhciBrZD0oZnVuY3Rpb24gdChlKXt2YXIgbj0oZnVuY3Rpb24gaSh0KXtyZXR1cm4gMT09KHQ9K3QpP0FkOmZ1bmN0aW9uKGUsbil7cmV0dXJuIG4tZT8oZnVuY3Rpb24gaSh0LGUsbil7cmV0dXJuIHQ9TWF0aC5wb3codCxuKSxlPU1hdGgucG93KGUsbiktdCxuPTEvbixmdW5jdGlvbihpKXtyZXR1cm4gTWF0aC5wb3codCtpKmUsbil9fSkoZSxuLHQpOkVkKGlzTmFOKGUpP246ZSl9fSkoZSk7ZnVuY3Rpb24gcih0LGUpe3ZhciBpPW4oKHQ9VmgodCkpLnIsKGU9VmgoZSkpLnIpLHI9bih0LmcsZS5nKSxvPW4odC5iLGUuYiksYT1BZCh0Lm9wYWNpdHksZS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQucj1pKGUpLHQuZz1yKGUpLHQuYj1vKGUpLHQub3BhY2l0eT1hKGUpLHQrIiJ9fXJldHVybiByLmdhbW1hPXQscn0pKDEpO2Z1bmN0aW9uIExkKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgbixpLHI9ZS5sZW5ndGgsbz1uZXcgQXJyYXkociksYT1uZXcgQXJyYXkocikscz1uZXcgQXJyYXkocik7Zm9yKG49MDtuPHI7KytuKWk9VmgoZVtuXSksb1tuXT1pLnJ8fDAsYVtuXT1pLmd8fDAsc1tuXT1pLmJ8fDA7cmV0dXJuIG89dChvKSxhPXQoYSkscz10KHMpLGkub3BhY2l0eT0xLGZ1bmN0aW9uKHQpe3JldHVybiBpLnI9byh0KSxpLmc9YSh0KSxpLmI9cyh0KSxpKyIifX19dmFyIFBkPUxkKFNkKSxOZD1MZChNZCk7ZnVuY3Rpb24gSWQodCxlKXtlfHwoZT1bXSk7dmFyIG4saT10P01hdGgubWluKGUubGVuZ3RoLHQubGVuZ3RoKTowLHI9ZS5zbGljZSgpO3JldHVybiBmdW5jdGlvbihvKXtmb3Iobj0wO248aTsrK24pcltuXT10W25dKigxLW8pK2Vbbl0qbztyZXR1cm4gcn19ZnVuY3Rpb24gT2QodCl7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyh0KSYmISh0IGluc3RhbmNlb2YgRGF0YVZpZXcpfWZ1bmN0aW9uIFJkKHQsZSl7dmFyIG4saT1lP2UubGVuZ3RoOjAscj10P01hdGgubWluKGksdC5sZW5ndGgpOjAsbz1uZXcgQXJyYXkociksYT1uZXcgQXJyYXkoaSk7Zm9yKG49MDtuPHI7KytuKW9bbl09VWQodFtuXSxlW25dKTtmb3IoO248aTsrK24pYVtuXT1lW25dO3JldHVybiBmdW5jdGlvbih0KXtmb3Iobj0wO248cjsrK24pYVtuXT1vW25dKHQpO3JldHVybiBhfX1mdW5jdGlvbiB6ZCh0LGUpe3ZhciBuPW5ldyBEYXRlO3JldHVybiB0PSt0LGU9K2UsZnVuY3Rpb24oaSl7cmV0dXJuIG4uc2V0VGltZSh0KigxLWkpK2UqaSksbn19ZnVuY3Rpb24gRGQodCxlKXtyZXR1cm4gdD0rdCxlPStlLGZ1bmN0aW9uKG4pe3JldHVybiB0KigxLW4pK2Uqbn19ZnVuY3Rpb24gQmQodCxlKXt2YXIgbixpPXt9LHI9e307Zm9yKG4gaW4gbnVsbCE9PXQmJiJvYmplY3QiPT10eXBlb2YgdHx8KHQ9e30pLG51bGwhPT1lJiYib2JqZWN0Ij09dHlwZW9mIGV8fChlPXt9KSxlKW4gaW4gdD9pW25dPVVkKHRbbl0sZVtuXSk6cltuXT1lW25dO3JldHVybiBmdW5jdGlvbih0KXtmb3IobiBpbiBpKXJbbl09aVtuXSh0KTtyZXR1cm4gcn19dmFyIEhkPS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxGZD1uZXcgUmVnRXhwKEhkLnNvdXJjZSwiZyIpO2Z1bmN0aW9uIFZkKHQsZSl7dmFyIG4saSxyLG89SGQubGFzdEluZGV4PUZkLmxhc3RJbmRleD0wLGE9LTEscz1bXSxsPVtdO2Zvcih0Kz0iIixlKz0iIjsobj1IZC5leGVjKHQpKSYmKGk9RmQuZXhlYyhlKSk7KShyPWkuaW5kZXgpPm8mJihyPWUuc2xpY2UobyxyKSxzW2FdP3NbYV0rPXI6c1srK2FdPXIpLChuPW5bMF0pPT09KGk9aVswXSk/c1thXT9zW2FdKz1pOnNbKythXT1pOihzWysrYV09bnVsbCxsLnB1c2goe2k6YSx4OkRkKG4saSl9KSksbz1GZC5sYXN0SW5kZXg7cmV0dXJuIG88ZS5sZW5ndGgmJihyPWUuc2xpY2Uobyksc1thXT9zW2FdKz1yOnNbKythXT1yKSxzLmxlbmd0aDwyP2xbMF0/KGZ1bmN0aW9uIGModCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0KGUpKyIifX0pKGxbMF0ueCk6KGZ1bmN0aW9uIHUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSkoZSk6KGU9bC5sZW5ndGgsZnVuY3Rpb24odCl7Zm9yKHZhciBuLGk9MDtpPGU7KytpKXNbKG49bFtpXSkuaV09bi54KHQpO3JldHVybiBzLmpvaW4oIiIpfSl9ZnVuY3Rpb24gVWQodCxlKXt2YXIgbixpPXR5cGVvZiBlO3JldHVybiBudWxsPT1lfHwiYm9vbGVhbiI9PT1pP0VkKGUpOigibnVtYmVyIj09PWk/RGQ6InN0cmluZyI9PT1pPyhuPURoKGUpKT8oZT1uLGtkKTpWZDplIGluc3RhbmNlb2YgRGg/a2Q6ZSBpbnN0YW5jZW9mIERhdGU/emQ6T2QoZSk/SWQ6QXJyYXkuaXNBcnJheShlKT9SZDoiZnVuY3Rpb24iIT10eXBlb2YgZS52YWx1ZU9mJiYiZnVuY3Rpb24iIT10eXBlb2YgZS50b1N0cmluZ3x8aXNOYU4oZSk/QmQ6RGQpKHQsZSl9ZnVuY3Rpb24gamQodCxlKXtyZXR1cm4gdD0rdCxlPStlLGZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnJvdW5kKHQqKDEtbikrZSpuKX19dmFyIEdkLFdkLHFkLFlkLFhkPTE4MC9NYXRoLlBJLCRkPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9O2Z1bmN0aW9uIEtkKHQsZSxuLGkscixvKXt2YXIgYSxzLGw7cmV0dXJuKGE9TWF0aC5zcXJ0KHQqdCtlKmUpKSYmKHQvPWEsZS89YSksKGw9dCpuK2UqaSkmJihuLT10KmwsaS09ZSpsKSwocz1NYXRoLnNxcnQobipuK2kqaSkpJiYobi89cyxpLz1zLGwvPXMpLHQqaTxlKm4mJih0PS10LGU9LWUsbD0tbCxhPS1hKSx7dHJhbnNsYXRlWDpyLHRyYW5zbGF0ZVk6byxyb3RhdGU6TWF0aC5hdGFuMihlLHQpKlhkLHNrZXdYOk1hdGguYXRhbihsKSpYZCxzY2FsZVg6YSxzY2FsZVk6c319ZnVuY3Rpb24gWmQodCxlLG4saSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gdC5sZW5ndGg/dC5wb3AoKSsiICI6IiJ9cmV0dXJuIGZ1bmN0aW9uKG8sYSl7dmFyIHM9W10sbD1bXTtyZXR1cm4gbz10KG8pLGE9dChhKSwoZnVuY3Rpb24gYyh0LGkscixvLGEscyl7aWYodCE9PXJ8fGkhPT1vKXt2YXIgbD1hLnB1c2goInRyYW5zbGF0ZSgiLG51bGwsZSxudWxsLG4pO3MucHVzaCh7aTpsLTQseDpEZCh0LHIpfSx7aTpsLTIseDpEZChpLG8pfSl9ZWxzZShyfHxvKSYmYS5wdXNoKCJ0cmFuc2xhdGUoIityK2UrbytuKX0pKG8udHJhbnNsYXRlWCxvLnRyYW5zbGF0ZVksYS50cmFuc2xhdGVYLGEudHJhbnNsYXRlWSxzLGwpLChmdW5jdGlvbiB1KHQsZSxuLG8pe3QhPT1lPyh0LWU+MTgwP2UrPTM2MDplLXQ+MTgwJiYodCs9MzYwKSxvLnB1c2goe2k6bi5wdXNoKHIobikrInJvdGF0ZSgiLG51bGwsaSktMix4OkRkKHQsZSl9KSk6ZSYmbi5wdXNoKHIobikrInJvdGF0ZSgiK2UraSl9KShvLnJvdGF0ZSxhLnJvdGF0ZSxzLGwpLChmdW5jdGlvbiBoKHQsZSxuLG8pe3QhPT1lP28ucHVzaCh7aTpuLnB1c2gocihuKSsic2tld1goIixudWxsLGkpLTIseDpEZCh0LGUpfSk6ZSYmbi5wdXNoKHIobikrInNrZXdYKCIrZStpKX0pKG8uc2tld1gsYS5za2V3WCxzLGwpLChmdW5jdGlvbiBkKHQsZSxuLGksbyxhKXtpZih0IT09bnx8ZSE9PWkpe3ZhciBzPW8ucHVzaChyKG8pKyJzY2FsZSgiLG51bGwsIiwiLG51bGwsIikiKTthLnB1c2goe2k6cy00LHg6RGQodCxuKX0se2k6cy0yLHg6RGQoZSxpKX0pfWVsc2UgMT09PW4mJjE9PT1pfHxvLnB1c2gocihvKSsic2NhbGUoIituKyIsIitpKyIpIil9KShvLnNjYWxlWCxvLnNjYWxlWSxhLnNjYWxlWCxhLnNjYWxlWSxzLGwpLG89YT1udWxsLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPS0xLGk9bC5sZW5ndGg7KytuPGk7KXNbKGU9bFtuXSkuaV09ZS54KHQpO3JldHVybiBzLmpvaW4oIiIpfX19dmFyIEpkPVpkKChmdW5jdGlvbiBRZCh0KXtyZXR1cm4ibm9uZSI9PT10PyRkOihHZHx8KEdkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLFdkPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxxZD1kb2N1bWVudC5kZWZhdWx0VmlldyksR2Quc3R5bGUudHJhbnNmb3JtPXQsdD1xZC5nZXRDb21wdXRlZFN0eWxlKFdkLmFwcGVuZENoaWxkKEdkKSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKSxXZC5yZW1vdmVDaGlsZChHZCksS2QoKyh0PXQuc2xpY2UoNywtMSkuc3BsaXQoIiwiKSlbMF0sK3RbMV0sK3RbMl0sK3RbM10sK3RbNF0sK3RbNV0pKX0pLCJweCwgIiwicHgpIiwiZGVnKSIpLHRwPVpkKChmdW5jdGlvbiBlcCh0KXtyZXR1cm4gbnVsbD09dD8kZDooWWR8fChZZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSxZZC5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsdCksKHQ9WWQudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/S2QoKHQ9dC5tYXRyaXgpLmEsdC5iLHQuYyx0LmQsdC5lLHQuZik6JGQpfSksIiwgIiwiKSIsIikiKSxucD1NYXRoLlNRUlQyO2Z1bmN0aW9uIGlwKHQpe3JldHVybigodD1NYXRoLmV4cCh0KSkrMS90KS8yfWZ1bmN0aW9uIHJwKHQsZSl7dmFyIG4saSxyPXRbMF0sbz10WzFdLGE9dFsyXSxzPWVbMl0sbD1lWzBdLXIsYz1lWzFdLW8sdT1sKmwrYypjO2lmKHU8MWUtMTIpaT1NYXRoLmxvZyhzL2EpL25wLG49ZnVuY3Rpb24odCl7cmV0dXJuW3IrdCpsLG8rdCpjLGEqTWF0aC5leHAobnAqdCppKV19O2Vsc2V7dmFyIGg9TWF0aC5zcXJ0KHUpLGQ9KHMqcy1hKmErNCp1KS8oMiphKjIqaCkscD0ocypzLWEqYS00KnUpLygyKnMqMipoKSxmPU1hdGgubG9nKE1hdGguc3FydChkKmQrMSktZCksbT1NYXRoLmxvZyhNYXRoLnNxcnQocCpwKzEpLXApO2k9KG0tZikvbnAsbj1mdW5jdGlvbih0KXt2YXIgZT10Kmksbj1pcChmKSxzPWEvKDIqaCkqKG4qKGZ1bmN0aW9uIHUodCl7cmV0dXJuKCh0PU1hdGguZXhwKDIqdCkpLTEpLyh0KzEpfSkobnAqZStmKS0oZnVuY3Rpb24gZCh0KXtyZXR1cm4oKHQ9TWF0aC5leHAodCkpLTEvdCkvMn0pKGYpKTtyZXR1cm5bcitzKmwsbytzKmMsYSpuL2lwKG5wKmUrZildfX1yZXR1cm4gbi5kdXJhdGlvbj0xZTMqaSxufWZ1bmN0aW9uIG9wKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3ZhciBpPXQoKGU9WGgoZSkpLmgsKG49WGgobikpLmgpLHI9QWQoZS5zLG4ucyksbz1BZChlLmwsbi5sKSxhPUFkKGUub3BhY2l0eSxuLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZS5oPWkodCksZS5zPXIodCksZS5sPW8odCksZS5vcGFjaXR5PWEodCksZSsiIn19fXZhciBhcD1vcChDZCksc3A9b3AoQWQpO2Z1bmN0aW9uIGxwKHQsZSl7dmFyIG49QWQoKHQ9YWQodCkpLmwsKGU9YWQoZSkpLmwpLGk9QWQodC5hLGUuYSkscj1BZCh0LmIsZS5iKSxvPUFkKHQub3BhY2l0eSxlLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC5sPW4oZSksdC5hPWkoZSksdC5iPXIoZSksdC5vcGFjaXR5PW8oZSksdCsiIn19ZnVuY3Rpb24gY3AodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7dmFyIGk9dCgoZT1wZChlKSkuaCwobj1wZChuKSkuaCkscj1BZChlLmMsbi5jKSxvPUFkKGUubCxuLmwpLGE9QWQoZS5vcGFjaXR5LG4ub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLmg9aSh0KSxlLmM9cih0KSxlLmw9byh0KSxlLm9wYWNpdHk9YSh0KSxlKyIifX19dmFyIHVwPWNwKENkKSxocD1jcChBZCk7ZnVuY3Rpb24gZHAodCl7cmV0dXJuKGZ1bmN0aW9uIGUobil7ZnVuY3Rpb24gaShlLGkpe3ZhciByPXQoKGU9YmQoZSkpLmgsKGk9YmQoaSkpLmgpLG89QWQoZS5zLGkucyksYT1BZChlLmwsaS5sKSxzPUFkKGUub3BhY2l0eSxpLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZS5oPXIodCksZS5zPW8odCksZS5sPWEoTWF0aC5wb3codCxuKSksZS5vcGFjaXR5PXModCksZSsiIn19cmV0dXJuIG49K24saS5nYW1tYT1lLGl9KSgxKX12YXIgcHAsZnAsbXA9ZHAoQ2QpLGdwPWRwKEFkKSxfcD0wLHlwPTAsdnA9MCxicD0wLHhwPTAsd3A9MCxTcD0ib2JqZWN0Ij09dHlwZW9mIHBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxNcD0ib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbih0KXtzZXRUaW1lb3V0KHQsMTcpfTtmdW5jdGlvbiBFcCgpe3JldHVybiB4cHx8KE1wKFRwKSx4cD1TcC5ub3coKSt3cCl9ZnVuY3Rpb24gVHAoKXt4cD0wfWZ1bmN0aW9uIENwKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiBBcCh0LGUsbil7dmFyIGk9bmV3IENwO3JldHVybiBpLnJlc3RhcnQodCxlLG4pLGl9ZnVuY3Rpb24ga3AoKXtFcCgpLCsrX3A7Zm9yKHZhciB0LGU9cHA7ZTspKHQ9eHAtZS5fdGltZSk+PTAmJmUuX2NhbGwuY2FsbChudWxsLHQpLGU9ZS5fbmV4dDstLV9wfWZ1bmN0aW9uIExwKCl7eHA9KGJwPVNwLm5vdygpKSt3cCxfcD15cD0wO3RyeXtrcCgpfWZpbmFsbHl7X3A9MCwoZnVuY3Rpb24gdCgpe2Zvcih2YXIgdCxlLG49cHAsaT0xLzA7bjspbi5fY2FsbD8oaT5uLl90aW1lJiYoaT1uLl90aW1lKSx0PW4sbj1uLl9uZXh0KTooZT1uLl9uZXh0LG4uX25leHQ9bnVsbCxuPXQ/dC5fbmV4dD1lOnBwPWUpO2ZwPXQsTnAoaSl9KSgpLHhwPTB9fWZ1bmN0aW9uIFBwKCl7dmFyIHQ9U3Aubm93KCksZT10LWJwO2U+MWUzJiYod3AtPWUsYnA9dCl9ZnVuY3Rpb24gTnAodCl7X3B8fCh5cCYmKHlwPWNsZWFyVGltZW91dCh5cCkpLHQteHA+MjQ/KHQ8MS8wJiYoeXA9c2V0VGltZW91dChMcCx0LVNwLm5vdygpLXdwKSksdnAmJih2cD1jbGVhckludGVydmFsKHZwKSkpOih2cHx8KGJwPVNwLm5vdygpLHZwPXNldEludGVydmFsKFBwLDFlMykpLF9wPTEsTXAoTHApKSl9ZnVuY3Rpb24gSXAodCxlLG4pe3ZhciBpPW5ldyBDcDtyZXR1cm4gaS5yZXN0YXJ0KChmdW5jdGlvbihuKXtpLnN0b3AoKSx0KG4rZSl9KSxlPW51bGw9PWU/MDorZSxuKSxpfUNwLnByb3RvdHlwZT1BcC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkNwLHJlc3RhcnQ6ZnVuY3Rpb24odCxlLG4pe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIik7bj0obnVsbD09bj9FcCgpOituKSsobnVsbD09ZT8wOitlKSx0aGlzLl9uZXh0fHxmcD09PXRoaXN8fChmcD9mcC5fbmV4dD10aGlzOnBwPXRoaXMsZnA9dGhpcyksdGhpcy5fY2FsbD10LHRoaXMuX3RpbWU9bixOcCgpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCxOcCgpKX19O3ZhciBPcD1zYygic3RhcnQiLCJlbmQiLCJjYW5jZWwiLCJpbnRlcnJ1cHQiKSxScD1bXTtmdW5jdGlvbiB6cCh0LGUsbixpLHIsbyl7dmFyIGE9dC5fX3RyYW5zaXRpb247aWYoYSl7aWYobiBpbiBhKXJldHVybn1lbHNlIHQuX190cmFuc2l0aW9uPXt9OyEoZnVuY3Rpb24gcyh0LGUsbil7dmFyIGkscj10Ll9fdHJhbnNpdGlvbjtmdW5jdGlvbiBvKGwpe3ZhciBjLHUsaCxkO2lmKDEhPT1uLnN0YXRlKXJldHVybiBzKCk7Zm9yKGMgaW4gcilpZigoZD1yW2NdKS5uYW1lPT09bi5uYW1lKXtpZigzPT09ZC5zdGF0ZSlyZXR1cm4gSXAobyk7ND09PWQuc3RhdGU/KGQuc3RhdGU9NixkLnRpbWVyLnN0b3AoKSxkLm9uLmNhbGwoImludGVycnVwdCIsdCx0Ll9fZGF0YV9fLGQuaW5kZXgsZC5ncm91cCksZGVsZXRlIHJbY10pOitjPGUmJihkLnN0YXRlPTYsZC50aW1lci5zdG9wKCksZC5vbi5jYWxsKCJjYW5jZWwiLHQsdC5fX2RhdGFfXyxkLmluZGV4LGQuZ3JvdXApLGRlbGV0ZSByW2NdKX1pZihJcCgoZnVuY3Rpb24oKXszPT09bi5zdGF0ZSYmKG4uc3RhdGU9NCxuLnRpbWVyLnJlc3RhcnQoYSxuLmRlbGF5LG4udGltZSksYShsKSl9KSksbi5zdGF0ZT0yLG4ub24uY2FsbCgic3RhcnQiLHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApLDI9PT1uLnN0YXRlKXtmb3Iobi5zdGF0ZT0zLGk9bmV3IEFycmF5KGg9bi50d2Vlbi5sZW5ndGgpLGM9MCx1PS0xO2M8aDsrK2MpKGQ9bi50d2VlbltjXS52YWx1ZS5jYWxsKHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApKSYmKGlbKyt1XT1kKTtpLmxlbmd0aD11KzF9fWZ1bmN0aW9uIGEoZSl7Zm9yKHZhciByPWU8bi5kdXJhdGlvbj9uLmVhc2UuY2FsbChudWxsLGUvbi5kdXJhdGlvbik6KG4udGltZXIucmVzdGFydChzKSxuLnN0YXRlPTUsMSksbz0tMSxhPWkubGVuZ3RoOysrbzxhOylpW29dLmNhbGwodCxyKTs1PT09bi5zdGF0ZSYmKG4ub24uY2FsbCgiZW5kIix0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxzKCkpfWZ1bmN0aW9uIHMoKXtmb3IodmFyIGkgaW4gbi5zdGF0ZT02LG4udGltZXIuc3RvcCgpLGRlbGV0ZSByW2VdLHIpcmV0dXJuO2RlbGV0ZSB0Ll9fdHJhbnNpdGlvbn1yW2VdPW4sbi50aW1lcj1BcCgoZnVuY3Rpb24gbCh0KXtuLnN0YXRlPTEsbi50aW1lci5yZXN0YXJ0KG8sbi5kZWxheSxuLnRpbWUpLG4uZGVsYXk8PXQmJm8odC1uLmRlbGF5KX0pLDAsbi50aW1lKX0pKHQsbix7bmFtZTplLGluZGV4OmksZ3JvdXA6cixvbjpPcCx0d2VlbjpScCx0aW1lOm8udGltZSxkZWxheTpvLmRlbGF5LGR1cmF0aW9uOm8uZHVyYXRpb24sZWFzZTpvLmVhc2UsdGltZXI6bnVsbCxzdGF0ZTowfSl9ZnVuY3Rpb24gRHAodCxlKXt2YXIgbj1IcCh0LGUpO2lmKG4uc3RhdGU+MCl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZCIpO3JldHVybiBufWZ1bmN0aW9uIEJwKHQsZSl7dmFyIG49SHAodCxlKTtpZihuLnN0YXRlPjMpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBydW5uaW5nIik7cmV0dXJuIG59ZnVuY3Rpb24gSHAodCxlKXt2YXIgbj10Ll9fdHJhbnNpdGlvbjtpZighbnx8IShuPW5bZV0pKXRocm93IG5ldyBFcnJvcigidHJhbnNpdGlvbiBub3QgZm91bmQiKTtyZXR1cm4gbn1mdW5jdGlvbiBGcCh0LGUpe3ZhciBuLGkscixvPXQuX190cmFuc2l0aW9uLGE9ITA7aWYobyl7Zm9yKHIgaW4gZT1udWxsPT1lP251bGw6ZSsiIixvKShuPW9bcl0pLm5hbWU9PT1lPyhpPW4uc3RhdGU+MiYmbi5zdGF0ZTw1LG4uc3RhdGU9NixuLnRpbWVyLnN0b3AoKSxuLm9uLmNhbGwoaT8iaW50ZXJydXB0IjoiY2FuY2VsIix0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxkZWxldGUgb1tyXSk6YT0hMTthJiZkZWxldGUgdC5fX3RyYW5zaXRpb259fWZ1bmN0aW9uIFZwKHQsZSl7dmFyIG4saTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj1CcCh0aGlzLHQpLG89ci50d2VlbjtpZihvIT09bilmb3IodmFyIGE9MCxzPShpPW49bykubGVuZ3RoO2E8czsrK2EpaWYoaVthXS5uYW1lPT09ZSl7KGk9aS5zbGljZSgpKS5zcGxpY2UoYSwxKTticmVha31yLnR3ZWVuPWl9fWZ1bmN0aW9uIFVwKHQsZSxuKXt2YXIgaSxyO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1CcCh0aGlzLHQpLGE9by50d2VlbjtpZihhIT09aSl7cj0oaT1hKS5zbGljZSgpO2Zvcih2YXIgcz17bmFtZTplLHZhbHVlOm59LGw9MCxjPXIubGVuZ3RoO2w8YzsrK2wpaWYocltsXS5uYW1lPT09ZSl7cltsXT1zO2JyZWFrfWw9PT1jJiZyLnB1c2gocyl9by50d2Vlbj1yfX1mdW5jdGlvbiBqcCh0LGUsbil7dmFyIGk9dC5faWQ7cmV0dXJuIHQuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1CcCh0aGlzLGkpOyh0LnZhbHVlfHwodC52YWx1ZT17fSkpW2VdPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpfSkpLGZ1bmN0aW9uKHQpe3JldHVybiBIcCh0LGkpLnZhbHVlW2VdfX1mdW5jdGlvbiBHcCh0LGUpe3ZhciBuO3JldHVybigibnVtYmVyIj09dHlwZW9mIGU/RGQ6ZSBpbnN0YW5jZW9mIERoP2tkOihuPURoKGUpKT8oZT1uLGtkKTpWZCkodCxlKX1mdW5jdGlvbiBXcCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX19ZnVuY3Rpb24gcXAodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpfX1mdW5jdGlvbiBZcCh0LGUsbil7dmFyIGkscixvPW4rIiI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5nZXRBdHRyaWJ1dGUodCk7cmV0dXJuIGE9PT1vP251bGw6YT09PWk/cjpyPWUoaT1hLG4pfX1mdW5jdGlvbiBYcCh0LGUsbil7dmFyIGkscixvPW4rIiI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5nZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpO3JldHVybiBhPT09bz9udWxsOmE9PT1pP3I6cj1lKGk9YSxuKX19ZnVuY3Rpb24gJHAodCxlLG4pe3ZhciBpLHIsbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzLGw9bih0aGlzKTtpZihudWxsIT1sKXJldHVybihhPXRoaXMuZ2V0QXR0cmlidXRlKHQpKT09PShzPWwrIiIpP251bGw6YT09PWkmJnM9PT1yP286KHI9cyxvPWUoaT1hLGwpKTt0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX19ZnVuY3Rpb24gS3AodCxlLG4pe3ZhciBpLHIsbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzLGw9bih0aGlzKTtpZihudWxsIT1sKXJldHVybihhPXRoaXMuZ2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKSk9PT0ocz1sKyIiKT9udWxsOmE9PT1pJiZzPT09cj9vOihyPXMsbz1lKGk9YSxsKSk7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpfX1mdW5jdGlvbiBacCh0LGUpe3JldHVybiBmdW5jdGlvbihuKXt0aGlzLnNldEF0dHJpYnV0ZSh0LGUuY2FsbCh0aGlzLG4pKX19ZnVuY3Rpb24gSnAodCxlKXtyZXR1cm4gZnVuY3Rpb24obil7dGhpcy5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwsZS5jYWxsKHRoaXMsbikpfX1mdW5jdGlvbiBRcCh0LGUpe3ZhciBuLGk7ZnVuY3Rpb24gcigpe3ZhciByPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiByIT09aSYmKG49KGk9cikmJkpwKHQscikpLG59cmV0dXJuIHIuX3ZhbHVlPWUscn1mdW5jdGlvbiB0Zih0LGUpe3ZhciBuLGk7ZnVuY3Rpb24gcigpe3ZhciByPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiByIT09aSYmKG49KGk9cikmJlpwKHQscikpLG59cmV0dXJuIHIuX3ZhbHVlPWUscn1mdW5jdGlvbiBlZih0LGUpe3JldHVybiBmdW5jdGlvbigpe0RwKHRoaXMsdCkuZGVsYXk9K2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBuZih0LGUpe3JldHVybiBlPStlLGZ1bmN0aW9uKCl7RHAodGhpcyx0KS5kZWxheT1lfX1mdW5jdGlvbiByZih0LGUpe3JldHVybiBmdW5jdGlvbigpe0JwKHRoaXMsdCkuZHVyYXRpb249K2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBvZih0LGUpe3JldHVybiBlPStlLGZ1bmN0aW9uKCl7QnAodGhpcyx0KS5kdXJhdGlvbj1lfX1mdW5jdGlvbiBhZih0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXtCcCh0aGlzLHQpLmVhc2U9ZX19ZnVuY3Rpb24gc2YodCxlLG4pe3ZhciBpLHIsbz0oZnVuY3Rpb24gYSh0KXtyZXR1cm4odCsiIikudHJpbSgpLnNwbGl0KC9efFxzKy8pLmV2ZXJ5KChmdW5jdGlvbih0KXt2YXIgZT10LmluZGV4T2YoIi4iKTtyZXR1cm4gZT49MCYmKHQ9dC5zbGljZSgwLGUpKSwhdHx8InN0YXJ0Ij09PXR9KSl9KShlKT9EcDpCcDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1vKHRoaXMsdCkscz1hLm9uO3MhPT1pJiYocj0oaT1zKS5jb3B5KCkpLm9uKGUsbiksYS5vbj1yfX12YXIgbGY9eHUucHJvdG90eXBlLmNvbnN0cnVjdG9yO2Z1bmN0aW9uIGNmKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCl9fWZ1bmN0aW9uIHVmKHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24oaSl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LGUuY2FsbCh0aGlzLGkpLG4pfX1mdW5jdGlvbiBoZih0LGUsbil7dmFyIGkscjtmdW5jdGlvbiBvKCl7dmFyIG89ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIG8hPT1yJiYoaT0ocj1vKSYmdWYodCxvLG4pKSxpfXJldHVybiBvLl92YWx1ZT1lLG99ZnVuY3Rpb24gZGYodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3RoaXMudGV4dENvbnRlbnQ9dC5jYWxsKHRoaXMsZSl9fWZ1bmN0aW9uIHBmKHQpe3ZhciBlLG47ZnVuY3Rpb24gaSgpe3ZhciBpPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBpIT09biYmKGU9KG49aSkmJmRmKGkpKSxlfXJldHVybiBpLl92YWx1ZT10LGl9dmFyIGZmPTA7ZnVuY3Rpb24gbWYodCxlLG4saSl7dGhpcy5fZ3JvdXBzPXQsdGhpcy5fcGFyZW50cz1lLHRoaXMuX25hbWU9bix0aGlzLl9pZD1pfWZ1bmN0aW9uIGdmKHQpe3JldHVybiB4dSgpLnRyYW5zaXRpb24odCl9ZnVuY3Rpb24gX2YoKXtyZXR1cm4rK2ZmfXZhciB5Zj14dS5wcm90b3R5cGU7ZnVuY3Rpb24gdmYodCl7cmV0dXJuK3R9ZnVuY3Rpb24gYmYodCl7cmV0dXJuIHQqdH1mdW5jdGlvbiB4Zih0KXtyZXR1cm4gdCooMi10KX1mdW5jdGlvbiB3Zih0KXtyZXR1cm4oKHQqPTIpPD0xP3QqdDotLXQqKDItdCkrMSkvMn1mdW5jdGlvbiBTZih0KXtyZXR1cm4gdCp0KnR9ZnVuY3Rpb24gTWYodCl7cmV0dXJuLS10KnQqdCsxfWZ1bmN0aW9uIEVmKHQpe3JldHVybigodCo9Mik8PTE/dCp0KnQ6KHQtPTIpKnQqdCsyKS8yfW1mLnByb3RvdHlwZT1nZi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOm1mLHNlbGVjdDpmdW5jdGlvbiBUZih0KXt2YXIgZT10aGlzLl9uYW1lLG49dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PXZjKHQpKTtmb3IodmFyIGk9dGhpcy5fZ3JvdXBzLHI9aS5sZW5ndGgsbz1uZXcgQXJyYXkociksYT0wO2E8cjsrK2EpZm9yKHZhciBzLGwsYz1pW2FdLHU9Yy5sZW5ndGgsaD1vW2FdPW5ldyBBcnJheSh1KSxkPTA7ZDx1OysrZCkocz1jW2RdKSYmKGw9dC5jYWxsKHMscy5fX2RhdGFfXyxkLGMpKSYmKCJfX2RhdGFfXyJpbiBzJiYobC5fX2RhdGFfXz1zLl9fZGF0YV9fKSxoW2RdPWwsenAoaFtkXSxlLG4sZCxoLEhwKHMsbikpKTtyZXR1cm4gbmV3IG1mKG8sdGhpcy5fcGFyZW50cyxlLG4pfSxzZWxlY3RBbGw6ZnVuY3Rpb24gQ2YodCl7dmFyIGU9dGhpcy5fbmFtZSxuPXRoaXMuX2lkOyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD14Yyh0KSk7Zm9yKHZhciBpPXRoaXMuX2dyb3VwcyxyPWkubGVuZ3RoLG89W10sYT1bXSxzPTA7czxyOysrcylmb3IodmFyIGwsYz1pW3NdLHU9Yy5sZW5ndGgsaD0wO2g8dTsrK2gpaWYobD1jW2hdKXtmb3IodmFyIGQscD10LmNhbGwobCxsLl9fZGF0YV9fLGgsYyksZj1IcChsLG4pLG09MCxnPXAubGVuZ3RoO208ZzsrK20pKGQ9cFttXSkmJnpwKGQsZSxuLG0scCxmKTtvLnB1c2gocCksYS5wdXNoKGwpfXJldHVybiBuZXcgbWYobyxhLGUsbil9LGZpbHRlcjpmdW5jdGlvbiBBZih0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9d2ModCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxpPW5ldyBBcnJheShuKSxyPTA7cjxuOysrcilmb3IodmFyIG8sYT1lW3JdLHM9YS5sZW5ndGgsbD1pW3JdPVtdLGM9MDtjPHM7KytjKShvPWFbY10pJiZ0LmNhbGwobyxvLl9fZGF0YV9fLGMsYSkmJmwucHVzaChvKTtyZXR1cm4gbmV3IG1mKGksdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX0sbWVyZ2U6ZnVuY3Rpb24ga2YodCl7aWYodC5faWQhPT10aGlzLl9pZCl0aHJvdyBuZXcgRXJyb3I7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPXQuX2dyb3VwcyxpPWUubGVuZ3RoLHI9TWF0aC5taW4oaSxuLmxlbmd0aCksbz1uZXcgQXJyYXkoaSksYT0wO2E8cjsrK2EpZm9yKHZhciBzLGw9ZVthXSxjPW5bYV0sdT1sLmxlbmd0aCxoPW9bYV09bmV3IEFycmF5KHUpLGQ9MDtkPHU7KytkKShzPWxbZF18fGNbZF0pJiYoaFtkXT1zKTtmb3IoO2E8aTsrK2Epb1thXT1lW2FdO3JldHVybiBuZXcgbWYobyx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfSxzZWxlY3Rpb246ZnVuY3Rpb24gTGYoKXtyZXR1cm4gbmV3IGxmKHRoaXMuX2dyb3Vwcyx0aGlzLl9wYXJlbnRzKX0sdHJhbnNpdGlvbjpmdW5jdGlvbiBQZigpe2Zvcih2YXIgdD10aGlzLl9uYW1lLGU9dGhpcy5faWQsbj1fZigpLGk9dGhpcy5fZ3JvdXBzLHI9aS5sZW5ndGgsbz0wO288cjsrK28pZm9yKHZhciBhLHM9aVtvXSxsPXMubGVuZ3RoLGM9MDtjPGw7KytjKWlmKGE9c1tjXSl7dmFyIHU9SHAoYSxlKTt6cChhLHQsbixjLHMse3RpbWU6dS50aW1lK3UuZGVsYXkrdS5kdXJhdGlvbixkZWxheTowLGR1cmF0aW9uOnUuZHVyYXRpb24sZWFzZTp1LmVhc2V9KX1yZXR1cm4gbmV3IG1mKGksdGhpcy5fcGFyZW50cyx0LG4pfSxjYWxsOnlmLmNhbGwsbm9kZXM6eWYubm9kZXMsbm9kZTp5Zi5ub2RlLHNpemU6eWYuc2l6ZSxlbXB0eTp5Zi5lbXB0eSxlYWNoOnlmLmVhY2gsb246ZnVuY3Rpb24gTmYodCxlKXt2YXIgbj10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP0hwKHRoaXMubm9kZSgpLG4pLm9uLm9uKHQpOnRoaXMuZWFjaChzZihuLHQsZSkpfSxhdHRyOmZ1bmN0aW9uIElmKHQsZSl7dmFyIG49ZmModCksaT0idHJhbnNmb3JtIj09PW4/dHA6R3A7cmV0dXJuIHRoaXMuYXR0clR3ZWVuKHQsImZ1bmN0aW9uIj09dHlwZW9mIGU/KG4ubG9jYWw/S3A6JHApKG4saSxqcCh0aGlzLCJhdHRyLiIrdCxlKSk6bnVsbD09ZT8obi5sb2NhbD9xcDpXcCkobik6KG4ubG9jYWw/WHA6WXApKG4saSxlKSl9LGF0dHJUd2VlbjpmdW5jdGlvbiBPZih0LGUpe3ZhciBuPSJhdHRyLiIrdDtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKG49dGhpcy50d2VlbihuKSkmJm4uX3ZhbHVlO2lmKG51bGw9PWUpcmV0dXJuIHRoaXMudHdlZW4obixudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3I7dmFyIGk9ZmModCk7cmV0dXJuIHRoaXMudHdlZW4obiwoaS5sb2NhbD9RcDp0ZikoaSxlKSl9LHN0eWxlOmZ1bmN0aW9uIFJmKHQsZSxuKXt2YXIgaT0idHJhbnNmb3JtIj09KHQrPSIiKT9KZDpHcDtyZXR1cm4gbnVsbD09ZT90aGlzLnN0eWxlVHdlZW4odCwoZnVuY3Rpb24gcih0LGUpe3ZhciBuLGkscjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1CYyh0aGlzLHQpLGE9KHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCksQmModGhpcyx0KSk7cmV0dXJuIG89PT1hP251bGw6bz09PW4mJmE9PT1pP3I6cj1lKG49byxpPWEpfX0pKHQsaSkpLm9uKCJlbmQuc3R5bGUuIit0LGNmKHQpKToiZnVuY3Rpb24iPT10eXBlb2YgZT90aGlzLnN0eWxlVHdlZW4odCwoZnVuY3Rpb24gYSh0LGUsbil7dmFyIGkscixvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPUJjKHRoaXMsdCkscz1uKHRoaXMpLGw9cysiIjtyZXR1cm4gbnVsbD09cyYmKHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCksbD1zPUJjKHRoaXMsdCkpLGE9PT1sP251bGw6YT09PWkmJmw9PT1yP286KHI9bCxvPWUoaT1hLHMpKX19KSh0LGksanAodGhpcywic3R5bGUuIit0LGUpKSkuZWFjaCgoZnVuY3Rpb24gbyh0LGUpe3ZhciBuLGkscixvLGE9InN0eWxlLiIrZSxzPSJlbmQuIithO3JldHVybiBmdW5jdGlvbigpe3ZhciBsPUJwKHRoaXMsdCksYz1sLm9uLHU9bnVsbD09bC52YWx1ZVthXT9vfHwobz1jZihlKSk6dm9pZCAwO2M9PT1uJiZyPT09dXx8KGk9KG49YykuY29weSgpKS5vbihzLHI9dSksbC5vbj1pfX0pKHRoaXMuX2lkLHQpKTp0aGlzLnN0eWxlVHdlZW4odCwoZnVuY3Rpb24gcyh0LGUsbil7dmFyIGkscixvPW4rIiI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9QmModGhpcyx0KTtyZXR1cm4gYT09PW8/bnVsbDphPT09aT9yOnI9ZShpPWEsbil9fSkodCxpLGUpLG4pLm9uKCJlbmQuc3R5bGUuIit0LG51bGwpfSxzdHlsZVR3ZWVuOmZ1bmN0aW9uIHpmKHQsZSxuKXt2YXIgaT0ic3R5bGUuIisodCs9IiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4oaT10aGlzLnR3ZWVuKGkpKSYmaS5fdmFsdWU7aWYobnVsbD09ZSlyZXR1cm4gdGhpcy50d2VlbihpLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihpLGhmKHQsZSxudWxsPT1uPyIiOm4pKX0sdGV4dDpmdW5jdGlvbiBEZih0KXtyZXR1cm4gdGhpcy50d2VlbigidGV4dCIsImZ1bmN0aW9uIj09dHlwZW9mIHQ/KGZ1bmN0aW9uIGUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKTt0aGlzLnRleHRDb250ZW50PW51bGw9PWU/IiI6ZX19KShqcCh0aGlzLCJ0ZXh0Iix0KSk6KGZ1bmN0aW9uIG4odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD10fX0pKG51bGw9PXQ/IiI6dCsiIikpfSx0ZXh0VHdlZW46ZnVuY3Rpb24gQmYodCl7dmFyIGU9InRleHQiO2lmKGFyZ3VtZW50cy5sZW5ndGg8MSlyZXR1cm4oZT10aGlzLnR3ZWVuKGUpKSYmZS5fdmFsdWU7aWYobnVsbD09dClyZXR1cm4gdGhpcy50d2VlbihlLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihlLHBmKHQpKX0scmVtb3ZlOmZ1bmN0aW9uIEhmKCl7cmV0dXJuIHRoaXMub24oImVuZC5yZW1vdmUiLChmdW5jdGlvbiB0KGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMucGFyZW50Tm9kZTtmb3IodmFyIG4gaW4gdGhpcy5fX3RyYW5zaXRpb24paWYoK24hPT1lKXJldHVybjt0JiZ0LnJlbW92ZUNoaWxkKHRoaXMpfX0pKHRoaXMuX2lkKSl9LHR3ZWVuOmZ1bmN0aW9uIEZmKHQsZSl7dmFyIG49dGhpcy5faWQ7aWYodCs9IiIsYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIGkscj1IcCh0aGlzLm5vZGUoKSxuKS50d2VlbixvPTAsYT1yLmxlbmd0aDtvPGE7KytvKWlmKChpPXJbb10pLm5hbWU9PT10KXJldHVybiBpLnZhbHVlO3JldHVybiBudWxsfXJldHVybiB0aGlzLmVhY2goKG51bGw9PWU/VnA6VXApKG4sdCxlKSl9LGRlbGF5OmZ1bmN0aW9uIFZmKHQpe3ZhciBlPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIHQ/ZWY6bmYpKGUsdCkpOkhwKHRoaXMubm9kZSgpLGUpLmRlbGF5fSxkdXJhdGlvbjpmdW5jdGlvbiBVZih0KXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiB0P3JmOm9mKShlLHQpKTpIcCh0aGlzLm5vZGUoKSxlKS5kdXJhdGlvbn0sZWFzZTpmdW5jdGlvbiBqZih0KXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goYWYoZSx0KSk6SHAodGhpcy5ub2RlKCksZSkuZWFzZX0sZW5kOmZ1bmN0aW9uIEdmKCl7dmFyIHQsZSxuPXRoaXMsaT1uLl9pZCxyPW4uc2l6ZSgpO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obyxhKXt2YXIgcz17dmFsdWU6YX0sbD17dmFsdWU6ZnVuY3Rpb24oKXswPT0tLXImJm8oKX19O24uZWFjaCgoZnVuY3Rpb24oKXt2YXIgbj1CcCh0aGlzLGkpLHI9bi5vbjtyIT09dCYmKChlPSh0PXIpLmNvcHkoKSkuXy5jYW5jZWwucHVzaChzKSxlLl8uaW50ZXJydXB0LnB1c2gocyksZS5fLmVuZC5wdXNoKGwpKSxuLm9uPWV9KSl9KSl9fTt2YXIgV2Y9KGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gTWF0aC5wb3codCxlKX1yZXR1cm4gZT0rZSxuLmV4cG9uZW50PXQsbn0pKDMpLHFmPShmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIDEtTWF0aC5wb3coMS10LGUpfXJldHVybiBlPStlLG4uZXhwb25lbnQ9dCxufSkoMyksWWY9KGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4oKHQqPTIpPD0xP01hdGgucG93KHQsZSk6Mi1NYXRoLnBvdygyLXQsZSkpLzJ9cmV0dXJuIGU9K2Usbi5leHBvbmVudD10LG59KSgzKSxYZj1NYXRoLlBJLCRmPVhmLzI7ZnVuY3Rpb24gS2YodCl7cmV0dXJuIDE9PSt0PzE6MS1NYXRoLmNvcyh0KiRmKX1mdW5jdGlvbiBaZih0KXtyZXR1cm4gTWF0aC5zaW4odCokZil9ZnVuY3Rpb24gSmYodCl7cmV0dXJuKDEtTWF0aC5jb3MoWGYqdCkpLzJ9ZnVuY3Rpb24gUWYodCl7cmV0dXJuIDEuMDAwOTc3NTE3MTA2NTQ5NCooTWF0aC5wb3coMiwtMTAqdCktLjAwMDk3NjU2MjUpfWZ1bmN0aW9uIHRtKHQpe3JldHVybiBRZigxLSt0KX1mdW5jdGlvbiBlbSh0KXtyZXR1cm4gMS1RZih0KX1mdW5jdGlvbiBubSh0KXtyZXR1cm4oKHQqPTIpPD0xP1FmKDEtdCk6Mi1RZih0LTEpKS8yfWZ1bmN0aW9uIGltKHQpe3JldHVybiAxLU1hdGguc3FydCgxLXQqdCl9ZnVuY3Rpb24gcm0odCl7cmV0dXJuIE1hdGguc3FydCgxLSAtLXQqdCl9ZnVuY3Rpb24gb20odCl7cmV0dXJuKCh0Kj0yKTw9MT8xLU1hdGguc3FydCgxLXQqdCk6TWF0aC5zcXJ0KDEtKHQtPTIpKnQpKzEpLzJ9dmFyIGFtPTcuNTYyNTtmdW5jdGlvbiBzbSh0KXtyZXR1cm4gMS1sbSgxLXQpfWZ1bmN0aW9uIGxtKHQpe3JldHVybih0PSt0KTwuMzYzNjM2MzYzNjM2MzYzNjU/YW0qdCp0OnQ8LjcyNzI3MjcyNzI3MjcyNzM/YW0qKHQtPS41NDU0NTQ1NDU0NTQ1NDU0KSp0Ky43NTp0PC45MDkwOTA5MDkwOTA5MDkxP2FtKih0LT0uODE4MTgxODE4MTgxODE4MikqdCsuOTM3NTphbSoodC09Ljk1NDU0NTQ1NDU0NTQ1NDYpKnQrLjk4NDM3NX1mdW5jdGlvbiBjbSh0KXtyZXR1cm4oKHQqPTIpPD0xPzEtbG0oMS10KTpsbSh0LTEpKzEpLzJ9dmFyIHVtPTEuNzAxNTgsaG09KGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4odD0rdCkqdCooZSoodC0xKSt0KX1yZXR1cm4gZT0rZSxuLm92ZXJzaG9vdD10LG59KSh1bSksZG09KGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4tLXQqdCooKHQrMSkqZSt0KSsxfXJldHVybiBlPStlLG4ub3ZlcnNob290PXQsbn0pKHVtKSxwbT0oZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybigodCo9Mik8MT90KnQqKChlKzEpKnQtZSk6KHQtPTIpKnQqKChlKzEpKnQrZSkrMikvMn1yZXR1cm4gZT0rZSxuLm92ZXJzaG9vdD10LG59KSh1bSksZm09MipNYXRoLlBJLG1tPShmdW5jdGlvbiB0KGUsbil7dmFyIGk9TWF0aC5hc2luKDEvKGU9TWF0aC5tYXgoMSxlKSkpKihuLz1mbSk7ZnVuY3Rpb24gcih0KXtyZXR1cm4gZSpRZigtIC0tdCkqTWF0aC5zaW4oKGktdCkvbil9cmV0dXJuIHIuYW1wbGl0dWRlPWZ1bmN0aW9uKGUpe3JldHVybiB0KGUsbipmbSl9LHIucGVyaW9kPWZ1bmN0aW9uKG4pe3JldHVybiB0KGUsbil9LHJ9KSgxLC4zKSxnbT0oZnVuY3Rpb24gdChlLG4pe3ZhciBpPU1hdGguYXNpbigxLyhlPU1hdGgubWF4KDEsZSkpKSoobi89Zm0pO2Z1bmN0aW9uIHIodCl7cmV0dXJuIDEtZSpRZih0PSt0KSpNYXRoLnNpbigodCtpKS9uKX1yZXR1cm4gci5hbXBsaXR1ZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSxuKmZtKX0sci5wZXJpb2Q9ZnVuY3Rpb24obil7cmV0dXJuIHQoZSxuKX0scn0pKDEsLjMpLF9tPShmdW5jdGlvbiB0KGUsbil7dmFyIGk9TWF0aC5hc2luKDEvKGU9TWF0aC5tYXgoMSxlKSkpKihuLz1mbSk7ZnVuY3Rpb24gcih0KXtyZXR1cm4oKHQ9Mip0LTEpPDA/ZSpRZigtdCkqTWF0aC5zaW4oKGktdCkvbik6Mi1lKlFmKHQpKk1hdGguc2luKChpK3QpL24pKS8yfXJldHVybiByLmFtcGxpdHVkZT1mdW5jdGlvbihlKXtyZXR1cm4gdChlLG4qZm0pfSxyLnBlcmlvZD1mdW5jdGlvbihuKXtyZXR1cm4gdChlLG4pfSxyfSkoMSwuMykseW09T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsZWFzZUxpbmVhcjp2ZixlYXNlUXVhZDp3ZixlYXNlUXVhZEluOmJmLGVhc2VRdWFkT3V0OnhmLGVhc2VRdWFkSW5PdXQ6d2YsZWFzZUN1YmljOkVmLGVhc2VDdWJpY0luOlNmLGVhc2VDdWJpY091dDpNZixlYXNlQ3ViaWNJbk91dDpFZixlYXNlUG9seTpZZixlYXNlUG9seUluOldmLGVhc2VQb2x5T3V0OnFmLGVhc2VQb2x5SW5PdXQ6WWYsZWFzZVNpbjpKZixlYXNlU2luSW46S2YsZWFzZVNpbk91dDpaZixlYXNlU2luSW5PdXQ6SmYsZWFzZUV4cDpubSxlYXNlRXhwSW46dG0sZWFzZUV4cE91dDplbSxlYXNlRXhwSW5PdXQ6bm0sZWFzZUNpcmNsZTpvbSxlYXNlQ2lyY2xlSW46aW0sZWFzZUNpcmNsZU91dDpybSxlYXNlQ2lyY2xlSW5PdXQ6b20sZWFzZUJvdW5jZTpsbSxlYXNlQm91bmNlSW46c20sZWFzZUJvdW5jZU91dDpsbSxlYXNlQm91bmNlSW5PdXQ6Y20sZWFzZUJhY2s6cG0sZWFzZUJhY2tJbjpobSxlYXNlQmFja091dDpkbSxlYXNlQmFja0luT3V0OnBtLGVhc2VFbGFzdGljOmdtLGVhc2VFbGFzdGljSW46bW0sZWFzZUVsYXN0aWNPdXQ6Z20sZWFzZUVsYXN0aWNJbk91dDpfbX0pLHZtPXt0aW1lOm51bGwsZGVsYXk6MCxkdXJhdGlvbjoyNTAsZWFzZTpFZn07ZnVuY3Rpb24gYm0odCxlKXtmb3IodmFyIG47IShuPXQuX190cmFuc2l0aW9uKXx8IShuPW5bZV0pOylpZighKHQ9dC5wYXJlbnROb2RlKSlyZXR1cm4gdm0udGltZT1FcCgpLHZtO3JldHVybiBufXh1LnByb3RvdHlwZS5pbnRlcnJ1cHQ9ZnVuY3Rpb24geG0odCl7cmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oKXtGcCh0aGlzLHQpfSkpfSx4dS5wcm90b3R5cGUudHJhbnNpdGlvbj1mdW5jdGlvbiB3bSh0KXt2YXIgZSxuO3QgaW5zdGFuY2VvZiBtZj8oZT10Ll9pZCx0PXQuX25hbWUpOihlPV9mKCksKG49dm0pLnRpbWU9RXAoKSx0PW51bGw9PXQ/bnVsbDp0KyIiKTtmb3IodmFyIGk9dGhpcy5fZ3JvdXBzLHI9aS5sZW5ndGgsbz0wO288cjsrK28pZm9yKHZhciBhLHM9aVtvXSxsPXMubGVuZ3RoLGM9MDtjPGw7KytjKShhPXNbY10pJiZ6cChhLHQsZSxjLHMsbnx8Ym0oYSxlKSk7cmV0dXJuIG5ldyBtZihpLHRoaXMuX3BhcmVudHMsdCxlKX07dmFyIFNtPVtudWxsXTtmdW5jdGlvbiBNbSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gRW0odCxlLG4pe3RoaXMudGFyZ2V0PXQsdGhpcy50eXBlPWUsdGhpcy5zZWxlY3Rpb249bn1mdW5jdGlvbiBUbSgpe2N1LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIENtKCl7Y3UucHJldmVudERlZmF1bHQoKSxjdS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX12YXIgQW09e25hbWU6ImRyYWcifSxrbT17bmFtZToic3BhY2UifSxMbT17bmFtZToiaGFuZGxlIn0sUG09e25hbWU6ImNlbnRlciJ9O2Z1bmN0aW9uIE5tKHQpe3JldHVyblsrdFswXSwrdFsxXV19ZnVuY3Rpb24gSW0odCl7cmV0dXJuW05tKHRbMF0pLE5tKHRbMV0pXX1mdW5jdGlvbiBPbSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHNoKGUsY3UudG91Y2hlcyx0KX19dmFyIFJtPXtuYW1lOiJ4IixoYW5kbGVzOlsidyIsImUiXS5tYXAoam0pLGlucHV0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG51bGw9PXQ/bnVsbDpbWyt0WzBdLGVbMF1bMV1dLFsrdFsxXSxlWzFdWzFdXV19LG91dHB1dDpmdW5jdGlvbih0KXtyZXR1cm4gdCYmW3RbMF1bMF0sdFsxXVswXV19fSx6bT17bmFtZToieSIsaGFuZGxlczpbIm4iLCJzIl0ubWFwKGptKSxpbnB1dDpmdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT10P251bGw6W1tlWzBdWzBdLCt0WzBdXSxbZVsxXVswXSwrdFsxXV1dfSxvdXRwdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQmJlt0WzBdWzFdLHRbMV1bMV1dfX0sRG09e25hbWU6Inh5IixoYW5kbGVzOlsibiIsInciLCJlIiwicyIsIm53IiwibmUiLCJzdyIsInNlIl0ubWFwKGptKSxpbnB1dDpmdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD9udWxsOkltKHQpfSxvdXRwdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHR9fSxCbT17b3ZlcmxheToiY3Jvc3NoYWlyIixzZWxlY3Rpb246Im1vdmUiLG46Im5zLXJlc2l6ZSIsZToiZXctcmVzaXplIixzOiJucy1yZXNpemUiLHc6ImV3LXJlc2l6ZSIsbnc6Im53c2UtcmVzaXplIixuZToibmVzdy1yZXNpemUiLHNlOiJud3NlLXJlc2l6ZSIsc3c6Im5lc3ctcmVzaXplIn0sSG09e2U6InciLHc6ImUiLG53OiJuZSIsbmU6Im53IixzZToic3ciLHN3OiJzZSJ9LEZtPXtuOiJzIixzOiJuIixudzoic3ciLG5lOiJzZSIsc2U6Im5lIixzdzoibncifSxWbT17b3ZlcmxheToxLHNlbGVjdGlvbjoxLG46bnVsbCxlOjEsczpudWxsLHc6LTEsbnc6LTEsbmU6MSxzZToxLHN3Oi0xfSxVbT17b3ZlcmxheToxLHNlbGVjdGlvbjoxLG46LTEsZTpudWxsLHM6MSx3Om51bGwsbnc6LTEsbmU6LTEsc2U6MSxzdzoxfTtmdW5jdGlvbiBqbSh0KXtyZXR1cm57dHlwZTp0fX1mdW5jdGlvbiBHbSgpe3JldHVybiFjdS5jdHJsS2V5JiYhY3UuYnV0dG9ufWZ1bmN0aW9uIFdtKCl7dmFyIHQ9dGhpcy5vd25lclNWR0VsZW1lbnR8fHRoaXM7cmV0dXJuIHQuaGFzQXR0cmlidXRlKCJ2aWV3Qm94Iik/W1sodD10LnZpZXdCb3guYmFzZVZhbCkueCx0LnldLFt0LngrdC53aWR0aCx0LnkrdC5oZWlnaHRdXTpbWzAsMF0sW3Qud2lkdGguYmFzZVZhbC52YWx1ZSx0LmhlaWdodC5iYXNlVmFsLnZhbHVlXV19ZnVuY3Rpb24gcW0oKXtyZXR1cm4gbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzfHwib250b3VjaHN0YXJ0ImluIHRoaXN9ZnVuY3Rpb24gWW0odCl7Zm9yKDshdC5fX2JydXNoOylpZighKHQ9dC5wYXJlbnROb2RlKSlyZXR1cm47cmV0dXJuIHQuX19icnVzaH1mdW5jdGlvbiBYbSh0KXtyZXR1cm4gdFswXVswXT09PXRbMV1bMF18fHRbMF1bMV09PT10WzFdWzFdfWZ1bmN0aW9uICRtKHQpe3ZhciBlPXQuX19icnVzaDtyZXR1cm4gZT9lLmRpbS5vdXRwdXQoZS5zZWxlY3Rpb24pOm51bGx9ZnVuY3Rpb24gS20oKXtyZXR1cm4gSm0oem0pfWZ1bmN0aW9uIFptKCl7cmV0dXJuIEptKERtKX1mdW5jdGlvbiBKbSh0KXt2YXIgZSxuPVdtLGk9R20scj1xbSxvPSEwLGE9c2MoInN0YXJ0IiwiYnJ1c2giLCJlbmQiKSxzPTY7ZnVuY3Rpb24gbChlKXt2YXIgbj1lLnByb3BlcnR5KCJfX2JydXNoIixtKS5zZWxlY3RBbGwoIi5vdmVybGF5IikuZGF0YShbam0oIm92ZXJsYXkiKV0pO24uZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsIm92ZXJsYXkiKS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLmF0dHIoImN1cnNvciIsQm0ub3ZlcmxheSkubWVyZ2UobikuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1ZbSh0aGlzKS5leHRlbnQ7d3UodGhpcykuYXR0cigieCIsdFswXVswXSkuYXR0cigieSIsdFswXVsxXSkuYXR0cigid2lkdGgiLHRbMV1bMF0tdFswXVswXSkuYXR0cigiaGVpZ2h0Iix0WzFdWzFdLXRbMF1bMV0pfSkpLGUuc2VsZWN0QWxsKCIuc2VsZWN0aW9uIikuZGF0YShbam0oInNlbGVjdGlvbiIpXSkuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsInNlbGVjdGlvbiIpLmF0dHIoImN1cnNvciIsQm0uc2VsZWN0aW9uKS5hdHRyKCJmaWxsIiwiIzc3NyIpLmF0dHIoImZpbGwtb3BhY2l0eSIsLjMpLmF0dHIoInN0cm9rZSIsIiNmZmYiKS5hdHRyKCJzaGFwZS1yZW5kZXJpbmciLCJjcmlzcEVkZ2VzIik7dmFyIGk9ZS5zZWxlY3RBbGwoIi5oYW5kbGUiKS5kYXRhKHQuaGFuZGxlcywoZnVuY3Rpb24odCl7cmV0dXJuIHQudHlwZX0pKTtpLmV4aXQoKS5yZW1vdmUoKSxpLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLChmdW5jdGlvbih0KXtyZXR1cm4iaGFuZGxlIGhhbmRsZS0tIit0LnR5cGV9KSkuYXR0cigiY3Vyc29yIiwoZnVuY3Rpb24odCl7cmV0dXJuIEJtW3QudHlwZV19KSksZS5lYWNoKGMpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKS5vbigibW91c2Vkb3duLmJydXNoIixkKS5maWx0ZXIocikub24oInRvdWNoc3RhcnQuYnJ1c2giLGQpLm9uKCJ0b3VjaG1vdmUuYnJ1c2giLHApLm9uKCJ0b3VjaGVuZC5icnVzaCB0b3VjaGNhbmNlbC5icnVzaCIsZikuc3R5bGUoInRvdWNoLWFjdGlvbiIsIm5vbmUiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpfWZ1bmN0aW9uIGMoKXt2YXIgdD13dSh0aGlzKSxlPVltKHRoaXMpLnNlbGVjdGlvbjtlPyh0LnNlbGVjdEFsbCgiLnNlbGVjdGlvbiIpLnN0eWxlKCJkaXNwbGF5IixudWxsKS5hdHRyKCJ4IixlWzBdWzBdKS5hdHRyKCJ5IixlWzBdWzFdKS5hdHRyKCJ3aWR0aCIsZVsxXVswXS1lWzBdWzBdKS5hdHRyKCJoZWlnaHQiLGVbMV1bMV0tZVswXVsxXSksdC5zZWxlY3RBbGwoIi5oYW5kbGUiKS5zdHlsZSgiZGlzcGxheSIsbnVsbCkuYXR0cigieCIsKGZ1bmN0aW9uKHQpe3JldHVybiJlIj09PXQudHlwZVt0LnR5cGUubGVuZ3RoLTFdP2VbMV1bMF0tcy8yOmVbMF1bMF0tcy8yfSkpLmF0dHIoInkiLChmdW5jdGlvbih0KXtyZXR1cm4icyI9PT10LnR5cGVbMF0/ZVsxXVsxXS1zLzI6ZVswXVsxXS1zLzJ9KSkuYXR0cigid2lkdGgiLChmdW5jdGlvbih0KXtyZXR1cm4ibiI9PT10LnR5cGV8fCJzIj09PXQudHlwZT9lWzFdWzBdLWVbMF1bMF0rczpzfSkpLmF0dHIoImhlaWdodCIsKGZ1bmN0aW9uKHQpe3JldHVybiJlIj09PXQudHlwZXx8InciPT09dC50eXBlP2VbMV1bMV0tZVswXVsxXStzOnN9KSkpOnQuc2VsZWN0QWxsKCIuc2VsZWN0aW9uLC5oYW5kbGUiKS5zdHlsZSgiZGlzcGxheSIsIm5vbmUiKS5hdHRyKCJ4IixudWxsKS5hdHRyKCJ5IixudWxsKS5hdHRyKCJ3aWR0aCIsbnVsbCkuYXR0cigiaGVpZ2h0IixudWxsKX1mdW5jdGlvbiB1KHQsZSxuKXt2YXIgaT10Ll9fYnJ1c2guZW1pdHRlcjtyZXR1cm4haXx8biYmaS5jbGVhbj9uZXcgaCh0LGUsbik6aX1mdW5jdGlvbiBoKHQsZSxuKXt0aGlzLnRoYXQ9dCx0aGlzLmFyZ3M9ZSx0aGlzLnN0YXRlPXQuX19icnVzaCx0aGlzLmFjdGl2ZT0wLHRoaXMuY2xlYW49bn1mdW5jdGlvbiBkKCl7aWYoKCFlfHxjdS50b3VjaGVzKSYmaS5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBuLHIsYSxzLGwsaCxkLHAsZixtLGcsXz10aGlzLHk9Y3UudGFyZ2V0Ll9fZGF0YV9fLnR5cGUsdj0ic2VsZWN0aW9uIj09PShvJiZjdS5tZXRhS2V5P3k9Im92ZXJsYXkiOnkpP0FtOm8mJmN1LmFsdEtleT9QbTpMbSxiPXQ9PT16bT9udWxsOlZtW3ldLHg9dD09PVJtP251bGw6VW1beV0sdz1ZbShfKSxTPXcuZXh0ZW50LE09dy5zZWxlY3Rpb24sRT1TWzBdWzBdLFQ9U1swXVsxXSxDPVNbMV1bMF0sQT1TWzFdWzFdLGs9MCxMPTAsUD1iJiZ4JiZvJiZjdS5zaGlmdEtleSxOPWN1LnRvdWNoZXM/T20oY3UuY2hhbmdlZFRvdWNoZXNbMF0uaWRlbnRpZmllcik6b2gsST1OKF8pLE89SSxSPXUoXyxhcmd1bWVudHMsITApLmJlZm9yZXN0YXJ0KCk7Im92ZXJsYXkiPT09eT8oTSYmKGY9ITApLHcuc2VsZWN0aW9uPU09W1tuPXQ9PT16bT9FOklbMF0sYT10PT09Um0/VDpJWzFdXSxbbD10PT09em0/QzpuLGQ9dD09PVJtP0E6YV1dKToobj1NWzBdWzBdLGE9TVswXVsxXSxsPU1bMV1bMF0sZD1NWzFdWzFdKSxyPW4scz1hLGg9bCxwPWQ7dmFyIHo9d3UoXykuYXR0cigicG9pbnRlci1ldmVudHMiLCJub25lIiksRD16LnNlbGVjdEFsbCgiLm92ZXJsYXkiKS5hdHRyKCJjdXJzb3IiLEJtW3ldKTtpZihjdS50b3VjaGVzKVIubW92ZWQ9SCxSLmVuZGVkPVY7ZWxzZXt2YXIgQj13dShjdS52aWV3KS5vbigibW91c2Vtb3ZlLmJydXNoIixILCEwKS5vbigibW91c2V1cC5icnVzaCIsViwhMCk7byYmQi5vbigia2V5ZG93bi5icnVzaCIsVSwhMCkub24oImtleXVwLmJydXNoIixqLCEwKSx1aChjdS52aWV3KX1UbSgpLEZwKF8pLGMuY2FsbChfKSxSLnN0YXJ0KCl9ZnVuY3Rpb24gSCgpe3ZhciB0PU4oXyk7IVB8fG18fGd8fChNYXRoLmFicyh0WzBdLU9bMF0pPk1hdGguYWJzKHRbMV0tT1sxXSk/Zz0hMDptPSEwKSxPPXQsZj0hMCxDbSgpLEYoKX1mdW5jdGlvbiBGKCl7dmFyIHQ7c3dpdGNoKGs9T1swXS1JWzBdLEw9T1sxXS1JWzFdLHYpe2Nhc2Uga206Y2FzZSBBbTpiJiYoaz1NYXRoLm1heChFLW4sTWF0aC5taW4oQy1sLGspKSxyPW4rayxoPWwraykseCYmKEw9TWF0aC5tYXgoVC1hLE1hdGgubWluKEEtZCxMKSkscz1hK0wscD1kK0wpO2JyZWFrO2Nhc2UgTG06YjwwPyhrPU1hdGgubWF4KEUtbixNYXRoLm1pbihDLW4saykpLHI9bitrLGg9bCk6Yj4wJiYoaz1NYXRoLm1heChFLWwsTWF0aC5taW4oQy1sLGspKSxyPW4saD1sK2spLHg8MD8oTD1NYXRoLm1heChULWEsTWF0aC5taW4oQS1hLEwpKSxzPWErTCxwPWQpOng+MCYmKEw9TWF0aC5tYXgoVC1kLE1hdGgubWluKEEtZCxMKSkscz1hLHA9ZCtMKTticmVhaztjYXNlIFBtOmImJihyPU1hdGgubWF4KEUsTWF0aC5taW4oQyxuLWsqYikpLGg9TWF0aC5tYXgoRSxNYXRoLm1pbihDLGwraypiKSkpLHgmJihzPU1hdGgubWF4KFQsTWF0aC5taW4oQSxhLUwqeCkpLHA9TWF0aC5tYXgoVCxNYXRoLm1pbihBLGQrTCp4KSkpfWg8ciYmKGIqPS0xLHQ9bixuPWwsbD10LHQ9cixyPWgsaD10LHkgaW4gSG0mJkQuYXR0cigiY3Vyc29yIixCbVt5PUhtW3ldXSkpLHA8cyYmKHgqPS0xLHQ9YSxhPWQsZD10LHQ9cyxzPXAscD10LHkgaW4gRm0mJkQuYXR0cigiY3Vyc29yIixCbVt5PUZtW3ldXSkpLHcuc2VsZWN0aW9uJiYoTT13LnNlbGVjdGlvbiksbSYmKHI9TVswXVswXSxoPU1bMV1bMF0pLGcmJihzPU1bMF1bMV0scD1NWzFdWzFdKSxNWzBdWzBdPT09ciYmTVswXVsxXT09PXMmJk1bMV1bMF09PT1oJiZNWzFdWzFdPT09cHx8KHcuc2VsZWN0aW9uPVtbcixzXSxbaCxwXV0sYy5jYWxsKF8pLFIuYnJ1c2goKSl9ZnVuY3Rpb24gVigpe2lmKFRtKCksY3UudG91Y2hlcyl7aWYoY3UudG91Y2hlcy5sZW5ndGgpcmV0dXJuO2UmJmNsZWFyVGltZW91dChlKSxlPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ZT1udWxsfSksNTAwKX1lbHNlIGhoKGN1LnZpZXcsZiksQi5vbigia2V5ZG93bi5icnVzaCBrZXl1cC5icnVzaCBtb3VzZW1vdmUuYnJ1c2ggbW91c2V1cC5icnVzaCIsbnVsbCk7ei5hdHRyKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLEQuYXR0cigiY3Vyc29yIixCbS5vdmVybGF5KSx3LnNlbGVjdGlvbiYmKE09dy5zZWxlY3Rpb24pLFhtKE0pJiYody5zZWxlY3Rpb249bnVsbCxjLmNhbGwoXykpLFIuZW5kKCl9ZnVuY3Rpb24gVSgpe3N3aXRjaChjdS5rZXlDb2RlKXtjYXNlIDE2OlA9YiYmeDticmVhaztjYXNlIDE4OnY9PT1MbSYmKGImJihsPWgtaypiLG49citrKmIpLHgmJihkPXAtTCp4LGE9cytMKngpLHY9UG0sRigpKTticmVhaztjYXNlIDMyOnYhPT1MbSYmdiE9PVBtfHwoYjwwP2w9aC1rOmI+MCYmKG49ci1rKSx4PDA/ZD1wLUw6eD4wJiYoYT1zLUwpLHY9a20sRC5hdHRyKCJjdXJzb3IiLEJtLnNlbGVjdGlvbiksRigpKTticmVhaztkZWZhdWx0OnJldHVybn1DbSgpfWZ1bmN0aW9uIGooKXtzd2l0Y2goY3Uua2V5Q29kZSl7Y2FzZSAxNjpQJiYobT1nPVA9ITEsRigpKTticmVhaztjYXNlIDE4OnY9PT1QbSYmKGI8MD9sPWg6Yj4wJiYobj1yKSx4PDA/ZD1wOng+MCYmKGE9cyksdj1MbSxGKCkpO2JyZWFrO2Nhc2UgMzI6dj09PWttJiYoY3UuYWx0S2V5PyhiJiYobD1oLWsqYixuPXIraypiKSx4JiYoZD1wLUwqeCxhPXMrTCp4KSx2PVBtKTooYjwwP2w9aDpiPjAmJihuPXIpLHg8MD9kPXA6eD4wJiYoYT1zKSx2PUxtKSxELmF0dHIoImN1cnNvciIsQm1beV0pLEYoKSk7YnJlYWs7ZGVmYXVsdDpyZXR1cm59Q20oKX19ZnVuY3Rpb24gcCgpe3UodGhpcyxhcmd1bWVudHMpLm1vdmVkKCl9ZnVuY3Rpb24gZigpe3UodGhpcyxhcmd1bWVudHMpLmVuZGVkKCl9ZnVuY3Rpb24gbSgpe3ZhciBlPXRoaXMuX19icnVzaHx8e3NlbGVjdGlvbjpudWxsfTtyZXR1cm4gZS5leHRlbnQ9SW0obi5hcHBseSh0aGlzLGFyZ3VtZW50cykpLGUuZGltPXQsZX1yZXR1cm4gbC5tb3ZlPWZ1bmN0aW9uKGUsbil7ZS5zZWxlY3Rpb24/ZS5vbigic3RhcnQuYnJ1c2giLChmdW5jdGlvbigpe3UodGhpcyxhcmd1bWVudHMpLmJlZm9yZXN0YXJ0KCkuc3RhcnQoKX0pKS5vbigiaW50ZXJydXB0LmJydXNoIGVuZC5icnVzaCIsKGZ1bmN0aW9uKCl7dSh0aGlzLGFyZ3VtZW50cykuZW5kKCl9KSkudHdlZW4oImJydXNoIiwoZnVuY3Rpb24oKXt2YXIgZT10aGlzLGk9ZS5fX2JydXNoLHI9dShlLGFyZ3VtZW50cyksbz1pLnNlbGVjdGlvbixhPXQuaW5wdXQoImZ1bmN0aW9uIj09dHlwZW9mIG4/bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6bixpLmV4dGVudCkscz1VZChvLGEpO2Z1bmN0aW9uIGwodCl7aS5zZWxlY3Rpb249MT09PXQmJm51bGw9PT1hP251bGw6cyh0KSxjLmNhbGwoZSksci5icnVzaCgpfXJldHVybiBudWxsIT09byYmbnVsbCE9PWE/bDpsKDEpfSkpOmUuZWFjaCgoZnVuY3Rpb24oKXt2YXIgZT10aGlzLGk9YXJndW1lbnRzLHI9ZS5fX2JydXNoLG89dC5pbnB1dCgiZnVuY3Rpb24iPT10eXBlb2Ygbj9uLmFwcGx5KGUsaSk6bixyLmV4dGVudCksYT11KGUsaSkuYmVmb3Jlc3RhcnQoKTtGcChlKSxyLnNlbGVjdGlvbj1udWxsPT09bz9udWxsOm8sYy5jYWxsKGUpLGEuc3RhcnQoKS5icnVzaCgpLmVuZCgpfSkpfSxsLmNsZWFyPWZ1bmN0aW9uKHQpe2wubW92ZSh0LG51bGwpfSxoLnByb3RvdHlwZT17YmVmb3Jlc3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gMT09Kyt0aGlzLmFjdGl2ZSYmKHRoaXMuc3RhdGUuZW1pdHRlcj10aGlzLHRoaXMuc3RhcnRpbmc9ITApLHRoaXN9LHN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhcnRpbmc/KHRoaXMuc3RhcnRpbmc9ITEsdGhpcy5lbWl0KCJzdGFydCIpKTp0aGlzLmVtaXQoImJydXNoIiksdGhpc30sYnJ1c2g6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbWl0KCJicnVzaCIpLHRoaXN9LGVuZDpmdW5jdGlvbigpe3JldHVybiAwPT0tLXRoaXMuYWN0aXZlJiYoZGVsZXRlIHRoaXMuc3RhdGUuZW1pdHRlcix0aGlzLmVtaXQoImVuZCIpKSx0aGlzfSxlbWl0OmZ1bmN0aW9uKGUpe211KG5ldyBFbShsLGUsdC5vdXRwdXQodGhpcy5zdGF0ZS5zZWxlY3Rpb24pKSxhLmFwcGx5LGEsW2UsdGhpcy50aGF0LHRoaXMuYXJnc10pfX0sbC5leHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpNbShJbSh0KSksbCk6bn0sbC5maWx0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpNbSghIXQpLGwpOml9LGwudG91Y2hhYmxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6TW0oISF0KSxsKTpyfSxsLmhhbmRsZVNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9K3QsbCk6c30sbC5rZXlNb2RpZmllcnM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ISF0LGwpOm99LGwub249ZnVuY3Rpb24oKXt2YXIgdD1hLm9uLmFwcGx5KGEsYXJndW1lbnRzKTtyZXR1cm4gdD09PWE/bDp0fSxsfXZhciBRbT1NYXRoLmNvcyx0Zz1NYXRoLnNpbixlZz1NYXRoLlBJLG5nPWVnLzIsaWc9MiplZyxyZz1NYXRoLm1heDtmdW5jdGlvbiBvZyh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXtyZXR1cm4gdChlLnNvdXJjZS52YWx1ZStlLnRhcmdldC52YWx1ZSxuLnNvdXJjZS52YWx1ZStuLnRhcmdldC52YWx1ZSl9fXZhciBhZz1BcnJheS5wcm90b3R5cGUuc2xpY2U7ZnVuY3Rpb24gc2codCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fXZhciBsZz1NYXRoLlBJLGNnPTIqbGcsdWc9MWUtNixoZz1jZy11ZztmdW5jdGlvbiBkZygpe3RoaXMuX3gwPXRoaXMuX3kwPXRoaXMuX3gxPXRoaXMuX3kxPW51bGwsdGhpcy5fPSIifWZ1bmN0aW9uIHBnKCl7cmV0dXJuIG5ldyBkZ31mdW5jdGlvbiBmZyh0KXtyZXR1cm4gdC5zb3VyY2V9ZnVuY3Rpb24gbWcodCl7cmV0dXJuIHQudGFyZ2V0fWZ1bmN0aW9uIGdnKHQpe3JldHVybiB0LnJhZGl1c31mdW5jdGlvbiBfZyh0KXtyZXR1cm4gdC5zdGFydEFuZ2xlfWZ1bmN0aW9uIHlnKHQpe3JldHVybiB0LmVuZEFuZ2xlfWRnLnByb3RvdHlwZT1wZy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmRnLG1vdmVUbzpmdW5jdGlvbih0LGUpe3RoaXMuXys9Ik0iKyh0aGlzLl94MD10aGlzLl94MT0rdCkrIiwiKyh0aGlzLl95MD10aGlzLl95MT0rZSl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe251bGwhPT10aGlzLl94MSYmKHRoaXMuX3gxPXRoaXMuX3gwLHRoaXMuX3kxPXRoaXMuX3kwLHRoaXMuXys9IloiKX0sbGluZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fKz0iTCIrKHRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kxPStlKX0scXVhZHJhdGljQ3VydmVUbzpmdW5jdGlvbih0LGUsbixpKXt0aGlzLl8rPSJRIisgK3QrIiwiKyArZSsiLCIrKHRoaXMuX3gxPStuKSsiLCIrKHRoaXMuX3kxPStpKX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbih0LGUsbixpLHIsbyl7dGhpcy5fKz0iQyIrICt0KyIsIisgK2UrIiwiKyArbisiLCIrICtpKyIsIisodGhpcy5feDE9K3IpKyIsIisodGhpcy5feTE9K28pfSxhcmNUbzpmdW5jdGlvbih0LGUsbixpLHIpe3ZhciBvPXRoaXMuX3gxLGE9dGhpcy5feTEscz0obj0rbiktKHQ9K3QpLGw9KGk9K2kpLShlPStlKSxjPW8tdCx1PWEtZSxoPWMqYyt1KnU7aWYoKHI9K3IpPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrcik7aWYobnVsbD09PXRoaXMuX3gxKXRoaXMuXys9Ik0iKyh0aGlzLl94MT10KSsiLCIrKHRoaXMuX3kxPWUpO2Vsc2UgaWYoaD51ZylpZihNYXRoLmFicyh1KnMtbCpjKT51ZyYmcil7dmFyIGQ9bi1vLHA9aS1hLGY9cypzK2wqbCxtPWQqZCtwKnAsZz1NYXRoLnNxcnQoZiksXz1NYXRoLnNxcnQoaCkseT1yKk1hdGgudGFuKChsZy1NYXRoLmFjb3MoKGYraC1tKS8oMipnKl8pKSkvMiksdj15L18sYj15L2c7TWF0aC5hYnModi0xKT51ZyYmKHRoaXMuXys9IkwiKyh0K3YqYykrIiwiKyhlK3YqdSkpLHRoaXMuXys9IkEiK3IrIiwiK3IrIiwwLDAsIisgKyh1KmQ+YypwKSsiLCIrKHRoaXMuX3gxPXQrYipzKSsiLCIrKHRoaXMuX3kxPWUrYipsKX1lbHNlIHRoaXMuXys9IkwiKyh0aGlzLl94MT10KSsiLCIrKHRoaXMuX3kxPWUpfSxhcmM6ZnVuY3Rpb24odCxlLG4saSxyLG8pe3Q9K3QsZT0rZSxvPSEhbzt2YXIgYT0obj0rbikqTWF0aC5jb3MoaSkscz1uKk1hdGguc2luKGkpLGw9dCthLGM9ZStzLHU9MV5vLGg9bz9pLXI6ci1pO2lmKG48MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIituKTtudWxsPT09dGhpcy5feDE/dGhpcy5fKz0iTSIrbCsiLCIrYzooTWF0aC5hYnModGhpcy5feDEtbCk+dWd8fE1hdGguYWJzKHRoaXMuX3kxLWMpPnVnKSYmKHRoaXMuXys9IkwiK2wrIiwiK2MpLG4mJihoPDAmJihoPWglY2crY2cpLGg+aGc/dGhpcy5fKz0iQSIrbisiLCIrbisiLDAsMSwiK3UrIiwiKyh0LWEpKyIsIisoZS1zKSsiQSIrbisiLCIrbisiLDAsMSwiK3UrIiwiKyh0aGlzLl94MT1sKSsiLCIrKHRoaXMuX3kxPWMpOmg+dWcmJih0aGlzLl8rPSJBIituKyIsIituKyIsMCwiKyArKGg+PWxnKSsiLCIrdSsiLCIrKHRoaXMuX3gxPXQrbipNYXRoLmNvcyhyKSkrIiwiKyh0aGlzLl95MT1lK24qTWF0aC5zaW4ocikpKSl9LHJlY3Q6ZnVuY3Rpb24odCxlLG4saSl7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPStlKSsiaCIrICtuKyJ2IisgK2krImgiKy1uKyJaIn0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ffX07dmFyIHZnPSIkIjtmdW5jdGlvbiBiZygpe31mdW5jdGlvbiB4Zyh0LGUpe3ZhciBuPW5ldyBiZztpZih0IGluc3RhbmNlb2YgYmcpdC5lYWNoKChmdW5jdGlvbih0LGUpe24uc2V0KGUsdCl9KSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KHQpKXt2YXIgaSxyPS0xLG89dC5sZW5ndGg7aWYobnVsbD09ZSlmb3IoOysrcjxvOyluLnNldChyLHRbcl0pO2Vsc2UgZm9yKDsrK3I8bzspbi5zZXQoZShpPXRbcl0scix0KSxpKX1lbHNlIGlmKHQpZm9yKHZhciBhIGluIHQpbi5zZXQoYSx0W2FdKTtyZXR1cm4gbn1mdW5jdGlvbiB3Zygpe3JldHVybnt9fWZ1bmN0aW9uIFNnKHQsZSxuKXt0W2VdPW59ZnVuY3Rpb24gTWcoKXtyZXR1cm4geGcoKX1mdW5jdGlvbiBFZyh0LGUsbil7dC5zZXQoZSxuKX1mdW5jdGlvbiBUZygpe31iZy5wcm90b3R5cGU9eGcucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpiZyxoYXM6ZnVuY3Rpb24odCl7cmV0dXJuIHZnK3QgaW4gdGhpc30sZ2V0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzW3ZnK3RdfSxzZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpc1t2Zyt0XT1lLHRoaXN9LHJlbW92ZTpmdW5jdGlvbih0KXt2YXIgZT12Zyt0O3JldHVybiBlIGluIHRoaXMmJmRlbGV0ZSB0aGlzW2VdfSxjbGVhcjpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT12ZyYmZGVsZXRlIHRoaXNbdF19LGtleXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcyllWzBdPT09dmcmJnQucHVzaChlLnNsaWNlKDEpKTtyZXR1cm4gdH0sdmFsdWVzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMpZVswXT09PXZnJiZ0LnB1c2godGhpc1tlXSk7cmV0dXJuIHR9LGVudHJpZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcyllWzBdPT09dmcmJnQucHVzaCh7a2V5OmUuc2xpY2UoMSksdmFsdWU6dGhpc1tlXX0pO3JldHVybiB0fSxzaXplOmZ1bmN0aW9uKCl7dmFyIHQ9MDtmb3IodmFyIGUgaW4gdGhpcyllWzBdPT09dmcmJisrdDtyZXR1cm4gdH0sZW1wdHk6ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcylpZih0WzBdPT09dmcpcmV0dXJuITE7cmV0dXJuITB9LGVhY2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMpZVswXT09PXZnJiZ0KHRoaXNbZV0sZS5zbGljZSgxKSx0aGlzKX19O3ZhciBDZz14Zy5wcm90b3R5cGU7ZnVuY3Rpb24gQWcodCxlKXt2YXIgbj1uZXcgVGc7aWYodCBpbnN0YW5jZW9mIFRnKXQuZWFjaCgoZnVuY3Rpb24odCl7bi5hZGQodCl9KSk7ZWxzZSBpZih0KXt2YXIgaT0tMSxyPXQubGVuZ3RoO2lmKG51bGw9PWUpZm9yKDsrK2k8cjspbi5hZGQodFtpXSk7ZWxzZSBmb3IoOysraTxyOyluLmFkZChlKHRbaV0saSx0KSl9cmV0dXJuIG59ZnVuY3Rpb24ga2codCl7dmFyIGU9W107Zm9yKHZhciBuIGluIHQpZS5wdXNoKG4pO3JldHVybiBlfVRnLnByb3RvdHlwZT1BZy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlRnLGhhczpDZy5oYXMsYWRkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzW3ZnKyh0Kz0iIildPXQsdGhpc30scmVtb3ZlOkNnLnJlbW92ZSxjbGVhcjpDZy5jbGVhcix2YWx1ZXM6Q2cua2V5cyxzaXplOkNnLnNpemUsZW1wdHk6Q2cuZW1wdHksZWFjaDpDZy5lYWNofTt2YXIgTGc9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIFBnKHQsZSl7cmV0dXJuIHQtZX1mdW5jdGlvbiBOZyh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gSWcodCxlKXtmb3IodmFyIG4saT0tMSxyPWUubGVuZ3RoOysraTxyOylpZihuPU9nKHQsZVtpXSkpcmV0dXJuIG47cmV0dXJuIDB9ZnVuY3Rpb24gT2codCxlKXtmb3IodmFyIG49ZVswXSxpPWVbMV0scj0tMSxvPTAsYT10Lmxlbmd0aCxzPWEtMTtvPGE7cz1vKyspe3ZhciBsPXRbb10sYz1sWzBdLHU9bFsxXSxoPXRbc10sZD1oWzBdLHA9aFsxXTtpZihSZyhsLGgsZSkpcmV0dXJuIDA7dT5pIT1wPmkmJm48KGQtYykqKGktdSkvKHAtdSkrYyYmKHI9LXIpfXJldHVybiByfWZ1bmN0aW9uIFJnKHQsZSxuKXt2YXIgaTtyZXR1cm4oZnVuY3Rpb24gcih0LGUsbil7cmV0dXJuKGVbMF0tdFswXSkqKG5bMV0tdFsxXSk9PShuWzBdLXRbMF0pKihlWzFdLXRbMV0pfSkodCxlLG4pJiYoZnVuY3Rpb24gbyh0LGUsbil7cmV0dXJuIHQ8PWUmJmU8PW58fG48PWUmJmU8PXR9KSh0W2k9Kyh0WzBdPT09ZVswXSldLG5baV0sZVtpXSl9ZnVuY3Rpb24gemcoKXt9dmFyIERnPVtbXSxbW1sxLDEuNV0sWy41LDFdXV0sW1tbMS41LDFdLFsxLDEuNV1dXSxbW1sxLjUsMV0sWy41LDFdXV0sW1tbMSwuNV0sWzEuNSwxXV1dLFtbWzEsMS41XSxbLjUsMV1dLFtbMSwuNV0sWzEuNSwxXV1dLFtbWzEsLjVdLFsxLDEuNV1dXSxbW1sxLC41XSxbLjUsMV1dXSxbW1suNSwxXSxbMSwuNV1dXSxbW1sxLDEuNV0sWzEsLjVdXV0sW1tbLjUsMV0sWzEsLjVdXSxbWzEuNSwxXSxbMSwxLjVdXV0sW1tbMS41LDFdLFsxLC41XV1dLFtbWy41LDFdLFsxLjUsMV1dXSxbW1sxLDEuNV0sWzEuNSwxXV1dLFtbWy41LDFdLFsxLDEuNV1dXSxbXV07ZnVuY3Rpb24gQmcoKXt2YXIgdD0xLGU9MSxuPVVsLGk9cztmdW5jdGlvbiByKHQpe3ZhciBlPW4odCk7aWYoQXJyYXkuaXNBcnJheShlKSllPWUuc2xpY2UoKS5zb3J0KFBnKTtlbHNle3ZhciBpPWtsKHQpLHI9aVswXSxhPWlbMV07ZT1WbChyLGEsZSksZT1SbChNYXRoLmZsb29yKHIvZSkqZSxNYXRoLmZsb29yKGEvZSkqZSxlKX1yZXR1cm4gZS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBvKHQsZSl9KSl9ZnVuY3Rpb24gbyhuLHIpe3ZhciBvPVtdLHM9W107cmV0dXJuKGZ1bmN0aW9uIGwobixpLHIpe3ZhciBvLHMsbCxjLHUsaD1uZXcgQXJyYXksZD1uZXcgQXJyYXk7Zm9yKG89cz0tMSxEZ1sobD1uWzBdPj1pKTw8MV0uZm9yRWFjaChwKTsrK288dC0xOylEZ1tsfChsPW5bbysxXT49aSk8PDFdLmZvckVhY2gocCk7Zm9yKERnW2w8PDBdLmZvckVhY2gocCk7KytzPGUtMTspe2ZvcihvPS0xLERnWyhsPW5bcyp0K3RdPj1pKTw8MXwoYz1uW3MqdF0+PWkpPDwyXS5mb3JFYWNoKHApOysrbzx0LTE7KXU9YyxEZ1tsfChsPW5bcyp0K3QrbysxXT49aSk8PDF8KGM9bltzKnQrbysxXT49aSk8PDJ8dTw8M10uZm9yRWFjaChwKTtEZ1tsfGM8PDNdLmZvckVhY2gocCl9Zm9yKG89LTEsRGdbKGM9bltzKnRdPj1pKTw8Ml0uZm9yRWFjaChwKTsrK288dC0xOyl1PWMsRGdbKGM9bltzKnQrbysxXT49aSk8PDJ8dTw8M10uZm9yRWFjaChwKTtmdW5jdGlvbiBwKHQpe3ZhciBlLG4saT1bdFswXVswXStvLHRbMF1bMV0rc10sbD1bdFsxXVswXStvLHRbMV1bMV0rc10sYz1hKGkpLHU9YShsKTsoZT1kW2NdKT8obj1oW3VdKT8oZGVsZXRlIGRbZS5lbmRdLGRlbGV0ZSBoW24uc3RhcnRdLGU9PT1uPyhlLnJpbmcucHVzaChsKSxyKGUucmluZykpOmhbZS5zdGFydF09ZFtuLmVuZF09e3N0YXJ0OmUuc3RhcnQsZW5kOm4uZW5kLHJpbmc6ZS5yaW5nLmNvbmNhdChuLnJpbmcpfSk6KGRlbGV0ZSBkW2UuZW5kXSxlLnJpbmcucHVzaChsKSxkW2UuZW5kPXVdPWUpOihlPWhbdV0pPyhuPWRbY10pPyhkZWxldGUgaFtlLnN0YXJ0XSxkZWxldGUgZFtuLmVuZF0sZT09PW4/KGUucmluZy5wdXNoKGwpLHIoZS5yaW5nKSk6aFtuLnN0YXJ0XT1kW2UuZW5kXT17c3RhcnQ6bi5zdGFydCxlbmQ6ZS5lbmQscmluZzpuLnJpbmcuY29uY2F0KGUucmluZyl9KTooZGVsZXRlIGhbZS5zdGFydF0sZS5yaW5nLnVuc2hpZnQoaSksaFtlLnN0YXJ0PWNdPWUpOmhbY109ZFt1XT17c3RhcnQ6YyxlbmQ6dSxyaW5nOltpLGxdfX1EZ1tjPDwzXS5mb3JFYWNoKHApfSkobixyLChmdW5jdGlvbih0KXtpKHQsbixyKSwoZnVuY3Rpb24gZSh0KXtmb3IodmFyIGU9MCxuPXQubGVuZ3RoLGk9dFtuLTFdWzFdKnRbMF1bMF0tdFtuLTFdWzBdKnRbMF1bMV07KytlPG47KWkrPXRbZS0xXVsxXSp0W2VdWzBdLXRbZS0xXVswXSp0W2VdWzFdO3JldHVybiBpfSkodCk+MD9vLnB1c2goW3RdKTpzLnB1c2godCl9KSkscy5mb3JFYWNoKChmdW5jdGlvbih0KXtmb3IodmFyIGUsbj0wLGk9by5sZW5ndGg7bjxpOysrbilpZigtMSE9PUlnKChlPW9bbl0pWzBdLHQpKXJldHVybiB2b2lkIGUucHVzaCh0KX0pKSx7dHlwZToiTXVsdGlQb2x5Z29uIix2YWx1ZTpyLGNvb3JkaW5hdGVzOm99fWZ1bmN0aW9uIGEoZSl7cmV0dXJuIDIqZVswXStlWzFdKih0KzEpKjR9ZnVuY3Rpb24gcyhuLGkscil7bi5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgbyxhPW5bMF0scz1uWzFdLGw9MHxhLGM9MHxzLHU9aVtjKnQrbF07YT4wJiZhPHQmJmw9PT1hJiYoblswXT1hKyhyLShvPWlbYyp0K2wtMV0pKS8odS1vKS0uNSkscz4wJiZzPGUmJmM9PT1zJiYoblsxXT1zKyhyLShvPWlbKGMtMSkqdCtsXSkpLyh1LW8pLS41KX0pKX1yZXR1cm4gci5jb250b3VyPW8sci5zaXplPWZ1bmN0aW9uKG4pe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVyblt0LGVdO3ZhciBpPU1hdGguY2VpbChuWzBdKSxvPU1hdGguY2VpbChuWzFdKTtpZighKGk+MCYmbz4wKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgc2l6ZSIpO3JldHVybiB0PWksZT1vLHJ9LHIudGhyZXNob2xkcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkFycmF5LmlzQXJyYXkodCk/TmcoTGcuY2FsbCh0KSk6TmcodCkscik6bn0sci5zbW9vdGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dD9zOnpnLHIpOmk9PT1zfSxyfWZ1bmN0aW9uIEhnKHQsZSxuKXtmb3IodmFyIGk9dC53aWR0aCxyPXQuaGVpZ2h0LG89MSsobjw8MSksYT0wO2E8cjsrK2EpZm9yKHZhciBzPTAsbD0wO3M8aStuOysrcylzPGkmJihsKz10LmRhdGFbcythKmldKSxzPj1uJiYocz49byYmKGwtPXQuZGF0YVtzLW8rYSppXSksZS5kYXRhW3MtbithKmldPWwvTWF0aC5taW4ocysxLGktMStvLXMsbykpfWZ1bmN0aW9uIEZnKHQsZSxuKXtmb3IodmFyIGk9dC53aWR0aCxyPXQuaGVpZ2h0LG89MSsobjw8MSksYT0wO2E8aTsrK2EpZm9yKHZhciBzPTAsbD0wO3M8cituOysrcylzPHImJihsKz10LmRhdGFbYStzKmldKSxzPj1uJiYocz49byYmKGwtPXQuZGF0YVthKyhzLW8pKmldKSxlLmRhdGFbYSsocy1uKSppXT1sL01hdGgubWluKHMrMSxyLTErby1zLG8pKX1mdW5jdGlvbiBWZyh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiBVZyh0KXtyZXR1cm4gdFsxXX1mdW5jdGlvbiBqZygpe3JldHVybiAxfXZhciBHZz17fSxXZz17fTtmdW5jdGlvbiBxZyh0KXtyZXR1cm4gbmV3IEZ1bmN0aW9uKCJkIiwicmV0dXJuIHsiK3QubWFwKChmdW5jdGlvbih0LGUpe3JldHVybiBKU09OLnN0cmluZ2lmeSh0KSsiOiBkWyIrZSsnXSB8fCAiIid9KSkuam9pbigiLCIpKyJ9Iil9ZnVuY3Rpb24gWWcodCl7dmFyIGU9T2JqZWN0LmNyZWF0ZShudWxsKSxuPVtdO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQpe2Zvcih2YXIgaSBpbiB0KWkgaW4gZXx8bi5wdXNoKGVbaV09aSl9KSksbn1mdW5jdGlvbiBYZyh0LGUpe3ZhciBuPXQrIiIsaT1uLmxlbmd0aDtyZXR1cm4gaTxlP25ldyBBcnJheShlLWkrMSkuam9pbigwKStuOm59ZnVuY3Rpb24gJGcodCl7dmFyIGU9bmV3IFJlZ0V4cCgnWyInK3QrIlxuXHJdIiksbj10LmNoYXJDb2RlQXQoMCk7ZnVuY3Rpb24gaSh0LGUpe3ZhciBpLHI9W10sbz10Lmxlbmd0aCxhPTAscz0wLGw9bzw9MCxjPSExO2Z1bmN0aW9uIHUoKXtpZihsKXJldHVybiBXZztpZihjKXJldHVybiBjPSExLEdnO3ZhciBlLGkscj1hO2lmKDM0PT09dC5jaGFyQ29kZUF0KHIpKXtmb3IoO2ErKzxvJiYzNCE9PXQuY2hhckNvZGVBdChhKXx8MzQ9PT10LmNoYXJDb2RlQXQoKythKTspO3JldHVybihlPWEpPj1vP2w9ITA6MTA9PT0oaT10LmNoYXJDb2RlQXQoYSsrKSk/Yz0hMDoxMz09PWkmJihjPSEwLDEwPT09dC5jaGFyQ29kZUF0KGEpJiYrK2EpLHQuc2xpY2UocisxLGUtMSkucmVwbGFjZSgvIiIvZywnIicpfWZvcig7YTxvOyl7aWYoMTA9PT0oaT10LmNoYXJDb2RlQXQoZT1hKyspKSljPSEwO2Vsc2UgaWYoMTM9PT1pKWM9ITAsMTA9PT10LmNoYXJDb2RlQXQoYSkmJisrYTtlbHNlIGlmKGkhPT1uKWNvbnRpbnVlO3JldHVybiB0LnNsaWNlKHIsZSl9cmV0dXJuIGw9ITAsdC5zbGljZShyLG8pfWZvcigxMD09PXQuY2hhckNvZGVBdChvLTEpJiYtLW8sMTM9PT10LmNoYXJDb2RlQXQoby0xKSYmLS1vOyhpPXUoKSkhPT1XZzspe2Zvcih2YXIgaD1bXTtpIT09R2cmJmkhPT1XZzspaC5wdXNoKGkpLGk9dSgpO2UmJm51bGw9PShoPWUoaCxzKyspKXx8ci5wdXNoKGgpfXJldHVybiByfWZ1bmN0aW9uIHIoZSxuKXtyZXR1cm4gZS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBuLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGEoZVt0XSl9KSkuam9pbih0KX0pKX1mdW5jdGlvbiBvKGUpe3JldHVybiBlLm1hcChhKS5qb2luKHQpfWZ1bmN0aW9uIGEodCl7cmV0dXJuIG51bGw9PXQ/IiI6dCBpbnN0YW5jZW9mIERhdGU/KGZ1bmN0aW9uIG4odCl7dmFyIGU9dC5nZXRVVENIb3VycygpLG49dC5nZXRVVENNaW51dGVzKCksaT10LmdldFVUQ1NlY29uZHMoKSxyPXQuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7cmV0dXJuIGlzTmFOKHQpPyJJbnZhbGlkIERhdGUiOihmdW5jdGlvbiBvKHQpe3JldHVybiB0PDA/Ii0iK1hnKC10LDYpOnQ+OTk5OT8iKyIrWGcodCw2KTpYZyh0LDQpfSkodC5nZXRVVENGdWxsWWVhcigpKSsiLSIrWGcodC5nZXRVVENNb250aCgpKzEsMikrIi0iK1hnKHQuZ2V0VVRDRGF0ZSgpLDIpKyhyPyJUIitYZyhlLDIpKyI6IitYZyhuLDIpKyI6IitYZyhpLDIpKyIuIitYZyhyLDMpKyJaIjppPyJUIitYZyhlLDIpKyI6IitYZyhuLDIpKyI6IitYZyhpLDIpKyJaIjpufHxlPyJUIitYZyhlLDIpKyI6IitYZyhuLDIpKyJaIjoiIil9KSh0KTplLnRlc3QodCs9IiIpPyciJyt0LnJlcGxhY2UoLyIvZywnIiInKSsnIic6dH1yZXR1cm57cGFyc2U6ZnVuY3Rpb24gcyh0LGUpe3ZhciBuLHIsbz1pKHQsKGZ1bmN0aW9uKHQsaSl7aWYobilyZXR1cm4gbih0LGktMSk7cj10LG49ZT8oZnVuY3Rpb24gbyh0LGUpe3ZhciBuPXFnKHQpO3JldHVybiBmdW5jdGlvbihpLHIpe3JldHVybiBlKG4oaSkscix0KX19KSh0LGUpOnFnKHQpfSkpO3JldHVybiBvLmNvbHVtbnM9cnx8W10sb30scGFyc2VSb3dzOmksZm9ybWF0OmZ1bmN0aW9uIGwoZSxuKXtyZXR1cm4gbnVsbD09biYmKG49WWcoZSkpLFtuLm1hcChhKS5qb2luKHQpXS5jb25jYXQocihlLG4pKS5qb2luKCJcbiIpfSxmb3JtYXRCb2R5OmZ1bmN0aW9uIGModCxlKXtyZXR1cm4gbnVsbD09ZSYmKGU9WWcodCkpLHIodCxlKS5qb2luKCJcbiIpfSxmb3JtYXRSb3dzOmZ1bmN0aW9uIHUodCl7cmV0dXJuIHQubWFwKG8pLmpvaW4oIlxuIil9LGZvcm1hdFJvdzpvLGZvcm1hdFZhbHVlOmF9fXZhciBLZz0kZygiLCIpLFpnPUtnLnBhcnNlLEpnPUtnLnBhcnNlUm93cyxRZz1LZy5mb3JtYXQsdF89S2cuZm9ybWF0Qm9keSxlXz1LZy5mb3JtYXRSb3dzLG5fPUtnLmZvcm1hdFJvdyxpXz1LZy5mb3JtYXRWYWx1ZSxyXz0kZygiXHQiKSxvXz1yXy5wYXJzZSxhXz1yXy5wYXJzZVJvd3Msc189cl8uZm9ybWF0LGxfPXJfLmZvcm1hdEJvZHksY189cl8uZm9ybWF0Um93cyx1Xz1yXy5mb3JtYXRSb3csaF89cl8uZm9ybWF0VmFsdWUsZF89bmV3IERhdGUoIjIwMTktMDEtMDFUMDA6MDAiKS5nZXRIb3VycygpfHxuZXcgRGF0ZSgiMjAxOS0wNy0wMVQwMDowMCIpLmdldEhvdXJzKCk7ZnVuY3Rpb24gcF8odCl7aWYoIXQub2spdGhyb3cgbmV3IEVycm9yKHQuc3RhdHVzKyIgIit0LnN0YXR1c1RleHQpO3JldHVybiB0LmJsb2IoKX1mdW5jdGlvbiBmXyh0KXtpZighdC5vayl0aHJvdyBuZXcgRXJyb3IodC5zdGF0dXMrIiAiK3Quc3RhdHVzVGV4dCk7cmV0dXJuIHQuYXJyYXlCdWZmZXIoKX1mdW5jdGlvbiBtXyh0KXtpZighdC5vayl0aHJvdyBuZXcgRXJyb3IodC5zdGF0dXMrIiAiK3Quc3RhdHVzVGV4dCk7cmV0dXJuIHQudGV4dCgpfWZ1bmN0aW9uIGdfKHQsZSl7cmV0dXJuIGZldGNoKHQsZSkudGhlbihtXyl9ZnVuY3Rpb24gX18odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbixpKXtyZXR1cm4gMj09PWFyZ3VtZW50cy5sZW5ndGgmJiJmdW5jdGlvbiI9PXR5cGVvZiBuJiYoaT1uLG49dm9pZCAwKSxnXyhlLG4pLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiB0KGUsaSl9KSl9fXZhciB5Xz1fXyhaZyksdl89X18ob18pO2Z1bmN0aW9uIGJfKHQpe2lmKCF0Lm9rKXRocm93IG5ldyBFcnJvcih0LnN0YXR1cysiICIrdC5zdGF0dXNUZXh0KTtpZigyMDQhPT10LnN0YXR1cyYmMjA1IT09dC5zdGF0dXMpcmV0dXJuIHQuanNvbigpfWZ1bmN0aW9uIHhfKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3JldHVybiBnXyhlLG4pLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybihuZXcgRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoZSx0KX0pKX19dmFyIHdfPXhfKCJhcHBsaWNhdGlvbi94bWwiKSxTXz14XygidGV4dC9odG1sIiksTV89eF8oImltYWdlL3N2Zyt4bWwiKTtmdW5jdGlvbiBFXyh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gVF8oKXtyZXR1cm4gMWUtNiooTWF0aC5yYW5kb20oKS0uNSl9ZnVuY3Rpb24gQ18odCxlLG4saSl7aWYoaXNOYU4oZSl8fGlzTmFOKG4pKXJldHVybiB0O3ZhciByLG8sYSxzLGwsYyx1LGgsZCxwPXQuX3Jvb3QsZj17ZGF0YTppfSxtPXQuX3gwLGc9dC5feTAsXz10Ll94MSx5PXQuX3kxO2lmKCFwKXJldHVybiB0Ll9yb290PWYsdDtmb3IoO3AubGVuZ3RoOylpZigoYz1lPj0obz0obStfKS8yKSk/bT1vOl89bywodT1uPj0oYT0oZyt5KS8yKSk/Zz1hOnk9YSxyPXAsIShwPXBbaD11PDwxfGNdKSlyZXR1cm4gcltoXT1mLHQ7aWYocz0rdC5feC5jYWxsKG51bGwscC5kYXRhKSxsPSt0Ll95LmNhbGwobnVsbCxwLmRhdGEpLGU9PT1zJiZuPT09bClyZXR1cm4gZi5uZXh0PXAscj9yW2hdPWY6dC5fcm9vdD1mLHQ7ZG97cj1yP3JbaF09bmV3IEFycmF5KDQpOnQuX3Jvb3Q9bmV3IEFycmF5KDQpLChjPWU+PShvPShtK18pLzIpKT9tPW86Xz1vLCh1PW4+PShhPShnK3kpLzIpKT9nPWE6eT1hfXdoaWxlKChoPXU8PDF8Yyk9PShkPShsPj1hKTw8MXxzPj1vKSk7cmV0dXJuIHJbZF09cCxyW2hdPWYsdH1mdW5jdGlvbiBBXyh0LGUsbixpLHIpe3RoaXMubm9kZT10LHRoaXMueDA9ZSx0aGlzLnkwPW4sdGhpcy54MT1pLHRoaXMueTE9cn1mdW5jdGlvbiBrXyh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiBMXyh0KXtyZXR1cm4gdFsxXX1mdW5jdGlvbiBQXyh0LGUsbil7dmFyIGk9bmV3IE5fKG51bGw9PWU/a186ZSxudWxsPT1uP0xfOm4sTmFOLE5hTixOYU4sTmFOKTtyZXR1cm4gbnVsbD09dD9pOmkuYWRkQWxsKHQpfWZ1bmN0aW9uIE5fKHQsZSxuLGkscixvKXt0aGlzLl94PXQsdGhpcy5feT1lLHRoaXMuX3gwPW4sdGhpcy5feTA9aSx0aGlzLl94MT1yLHRoaXMuX3kxPW8sdGhpcy5fcm9vdD12b2lkIDB9ZnVuY3Rpb24gSV8odCl7Zm9yKHZhciBlPXtkYXRhOnQuZGF0YX0sbj1lO3Q9dC5uZXh0OyluPW4ubmV4dD17ZGF0YTp0LmRhdGF9O3JldHVybiBlfXZhciBPXz1QXy5wcm90b3R5cGU9Tl8ucHJvdG90eXBlO2Z1bmN0aW9uIFJfKHQpe3JldHVybiB0LngrdC52eH1mdW5jdGlvbiB6Xyh0KXtyZXR1cm4gdC55K3Qudnl9ZnVuY3Rpb24gRF8odCl7cmV0dXJuIHQuaW5kZXh9ZnVuY3Rpb24gQl8odCxlKXt2YXIgbj10LmdldChlKTtpZighbil0aHJvdyBuZXcgRXJyb3IoIm1pc3Npbmc6ICIrZSk7cmV0dXJuIG59ZnVuY3Rpb24gSF8odCl7cmV0dXJuIHQueH1mdW5jdGlvbiBGXyh0KXtyZXR1cm4gdC55fU9fLmNvcHk9ZnVuY3Rpb24oKXt2YXIgdCxlLG49bmV3IE5fKHRoaXMuX3gsdGhpcy5feSx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSksaT10aGlzLl9yb290O2lmKCFpKXJldHVybiBuO2lmKCFpLmxlbmd0aClyZXR1cm4gbi5fcm9vdD1JXyhpKSxuO2Zvcih0PVt7c291cmNlOmksdGFyZ2V0Om4uX3Jvb3Q9bmV3IEFycmF5KDQpfV07aT10LnBvcCgpOylmb3IodmFyIHI9MDtyPDQ7KytyKShlPWkuc291cmNlW3JdKSYmKGUubGVuZ3RoP3QucHVzaCh7c291cmNlOmUsdGFyZ2V0OmkudGFyZ2V0W3JdPW5ldyBBcnJheSg0KX0pOmkudGFyZ2V0W3JdPUlfKGUpKTtyZXR1cm4gbn0sT18uYWRkPWZ1bmN0aW9uIFZfKHQpe3ZhciBlPSt0aGlzLl94LmNhbGwobnVsbCx0KSxuPSt0aGlzLl95LmNhbGwobnVsbCx0KTtyZXR1cm4gQ18odGhpcy5jb3ZlcihlLG4pLGUsbix0KX0sT18uYWRkQWxsPWZ1bmN0aW9uIFVfKHQpe3ZhciBlLG4saSxyLG89dC5sZW5ndGgsYT1uZXcgQXJyYXkobykscz1uZXcgQXJyYXkobyksbD0xLzAsYz0xLzAsdT0tMS8wLGg9LTEvMDtmb3Iobj0wO248bzsrK24paXNOYU4oaT0rdGhpcy5feC5jYWxsKG51bGwsZT10W25dKSl8fGlzTmFOKHI9K3RoaXMuX3kuY2FsbChudWxsLGUpKXx8KGFbbl09aSxzW25dPXIsaTxsJiYobD1pKSxpPnUmJih1PWkpLHI8YyYmKGM9cikscj5oJiYoaD1yKSk7aWYobD51fHxjPmgpcmV0dXJuIHRoaXM7Zm9yKHRoaXMuY292ZXIobCxjKS5jb3Zlcih1LGgpLG49MDtuPG87KytuKUNfKHRoaXMsYVtuXSxzW25dLHRbbl0pO3JldHVybiB0aGlzfSxPXy5jb3Zlcj1mdW5jdGlvbiBqXyh0LGUpe2lmKGlzTmFOKHQ9K3QpfHxpc05hTihlPStlKSlyZXR1cm4gdGhpczt2YXIgbj10aGlzLl94MCxpPXRoaXMuX3kwLHI9dGhpcy5feDEsbz10aGlzLl95MTtpZihpc05hTihuKSlyPShuPU1hdGguZmxvb3IodCkpKzEsbz0oaT1NYXRoLmZsb29yKGUpKSsxO2Vsc2V7Zm9yKHZhciBhLHMsbD1yLW4sYz10aGlzLl9yb290O24+dHx8dD49cnx8aT5lfHxlPj1vOylzd2l0Y2gocz0oZTxpKTw8MXx0PG4sKGE9bmV3IEFycmF5KDQpKVtzXT1jLGM9YSxsKj0yLHMpe2Nhc2UgMDpyPW4rbCxvPWkrbDticmVhaztjYXNlIDE6bj1yLWwsbz1pK2w7YnJlYWs7Y2FzZSAyOnI9bitsLGk9by1sO2JyZWFrO2Nhc2UgMzpuPXItbCxpPW8tbH10aGlzLl9yb290JiZ0aGlzLl9yb290Lmxlbmd0aCYmKHRoaXMuX3Jvb3Q9Yyl9cmV0dXJuIHRoaXMuX3gwPW4sdGhpcy5feTA9aSx0aGlzLl94MT1yLHRoaXMuX3kxPW8sdGhpc30sT18uZGF0YT1mdW5jdGlvbiBHXygpe3ZhciB0PVtdO3JldHVybiB0aGlzLnZpc2l0KChmdW5jdGlvbihlKXtpZighZS5sZW5ndGgpZG97dC5wdXNoKGUuZGF0YSl9d2hpbGUoZT1lLm5leHQpfSkpLHR9LE9fLmV4dGVudD1mdW5jdGlvbiBXXyh0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmNvdmVyKCt0WzBdWzBdLCt0WzBdWzFdKS5jb3ZlcigrdFsxXVswXSwrdFsxXVsxXSk6aXNOYU4odGhpcy5feDApP3ZvaWQgMDpbW3RoaXMuX3gwLHRoaXMuX3kwXSxbdGhpcy5feDEsdGhpcy5feTFdXX0sT18uZmluZD1mdW5jdGlvbiBxXyh0LGUsbil7dmFyIGkscixvLGEscyxsLGMsdT10aGlzLl94MCxoPXRoaXMuX3kwLGQ9dGhpcy5feDEscD10aGlzLl95MSxmPVtdLG09dGhpcy5fcm9vdDtmb3IobSYmZi5wdXNoKG5ldyBBXyhtLHUsaCxkLHApKSxudWxsPT1uP249MS8wOih1PXQtbixoPWUtbixkPXQrbixwPWUrbixuKj1uKTtsPWYucG9wKCk7KWlmKCEoIShtPWwubm9kZSl8fChyPWwueDApPmR8fChvPWwueTApPnB8fChhPWwueDEpPHV8fChzPWwueTEpPGgpKWlmKG0ubGVuZ3RoKXt2YXIgZz0ocithKS8yLF89KG8rcykvMjtmLnB1c2gobmV3IEFfKG1bM10sZyxfLGEscyksbmV3IEFfKG1bMl0scixfLGcscyksbmV3IEFfKG1bMV0sZyxvLGEsXyksbmV3IEFfKG1bMF0scixvLGcsXykpLChjPShlPj1fKTw8MXx0Pj1nKSYmKGw9ZltmLmxlbmd0aC0xXSxmW2YubGVuZ3RoLTFdPWZbZi5sZW5ndGgtMS1jXSxmW2YubGVuZ3RoLTEtY109bCl9ZWxzZXt2YXIgeT10LSt0aGlzLl94LmNhbGwobnVsbCxtLmRhdGEpLHY9ZS0rdGhpcy5feS5jYWxsKG51bGwsbS5kYXRhKSxiPXkqeSt2KnY7aWYoYjxuKXt2YXIgeD1NYXRoLnNxcnQobj1iKTt1PXQteCxoPWUteCxkPXQreCxwPWUreCxpPW0uZGF0YX19cmV0dXJuIGl9LE9fLnJlbW92ZT1mdW5jdGlvbiBZXyh0KXtpZihpc05hTihvPSt0aGlzLl94LmNhbGwobnVsbCx0KSl8fGlzTmFOKGE9K3RoaXMuX3kuY2FsbChudWxsLHQpKSlyZXR1cm4gdGhpczt2YXIgZSxuLGkscixvLGEscyxsLGMsdSxoLGQscD10aGlzLl9yb290LGY9dGhpcy5feDAsbT10aGlzLl95MCxnPXRoaXMuX3gxLF89dGhpcy5feTE7aWYoIXApcmV0dXJuIHRoaXM7aWYocC5sZW5ndGgpZm9yKDs7KXtpZigoYz1vPj0ocz0oZitnKS8yKSk/Zj1zOmc9cywodT1hPj0obD0obStfKS8yKSk/bT1sOl89bCxlPXAsIShwPXBbaD11PDwxfGNdKSlyZXR1cm4gdGhpcztpZighcC5sZW5ndGgpYnJlYWs7KGVbaCsxJjNdfHxlW2grMiYzXXx8ZVtoKzMmM10pJiYobj1lLGQ9aCl9Zm9yKDtwLmRhdGEhPT10OylpZihpPXAsIShwPXAubmV4dCkpcmV0dXJuIHRoaXM7cmV0dXJuKHI9cC5uZXh0KSYmZGVsZXRlIHAubmV4dCxpPyhyP2kubmV4dD1yOmRlbGV0ZSBpLm5leHQsdGhpcyk6ZT8ocj9lW2hdPXI6ZGVsZXRlIGVbaF0sKHA9ZVswXXx8ZVsxXXx8ZVsyXXx8ZVszXSkmJnA9PT0oZVszXXx8ZVsyXXx8ZVsxXXx8ZVswXSkmJiFwLmxlbmd0aCYmKG4/bltkXT1wOnRoaXMuX3Jvb3Q9cCksdGhpcyk6KHRoaXMuX3Jvb3Q9cix0aGlzKX0sT18ucmVtb3ZlQWxsPWZ1bmN0aW9uIFhfKHQpe2Zvcih2YXIgZT0wLG49dC5sZW5ndGg7ZTxuOysrZSl0aGlzLnJlbW92ZSh0W2VdKTtyZXR1cm4gdGhpc30sT18ucm9vdD1mdW5jdGlvbiAkXygpe3JldHVybiB0aGlzLl9yb290fSxPXy5zaXplPWZ1bmN0aW9uIEtfKCl7dmFyIHQ9MDtyZXR1cm4gdGhpcy52aXNpdCgoZnVuY3Rpb24oZSl7aWYoIWUubGVuZ3RoKWRveysrdH13aGlsZShlPWUubmV4dCl9KSksdH0sT18udmlzaXQ9ZnVuY3Rpb24gWl8odCl7dmFyIGUsbixpLHIsbyxhLHM9W10sbD10aGlzLl9yb290O2ZvcihsJiZzLnB1c2gobmV3IEFfKGwsdGhpcy5feDAsdGhpcy5feTAsdGhpcy5feDEsdGhpcy5feTEpKTtlPXMucG9wKCk7KWlmKCF0KGw9ZS5ub2RlLGk9ZS54MCxyPWUueTAsbz1lLngxLGE9ZS55MSkmJmwubGVuZ3RoKXt2YXIgYz0oaStvKS8yLHU9KHIrYSkvMjsobj1sWzNdKSYmcy5wdXNoKG5ldyBBXyhuLGMsdSxvLGEpKSwobj1sWzJdKSYmcy5wdXNoKG5ldyBBXyhuLGksdSxjLGEpKSwobj1sWzFdKSYmcy5wdXNoKG5ldyBBXyhuLGMscixvLHUpKSwobj1sWzBdKSYmcy5wdXNoKG5ldyBBXyhuLGkscixjLHUpKX1yZXR1cm4gdGhpc30sT18udmlzaXRBZnRlcj1mdW5jdGlvbiBKXyh0KXt2YXIgZSxuPVtdLGk9W107Zm9yKHRoaXMuX3Jvb3QmJm4ucHVzaChuZXcgQV8odGhpcy5fcm9vdCx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO2U9bi5wb3AoKTspe3ZhciByPWUubm9kZTtpZihyLmxlbmd0aCl7dmFyIG8sYT1lLngwLHM9ZS55MCxsPWUueDEsYz1lLnkxLHU9KGErbCkvMixoPShzK2MpLzI7KG89clswXSkmJm4ucHVzaChuZXcgQV8obyxhLHMsdSxoKSksKG89clsxXSkmJm4ucHVzaChuZXcgQV8obyx1LHMsbCxoKSksKG89clsyXSkmJm4ucHVzaChuZXcgQV8obyxhLGgsdSxjKSksKG89clszXSkmJm4ucHVzaChuZXcgQV8obyx1LGgsbCxjKSl9aS5wdXNoKGUpfWZvcig7ZT1pLnBvcCgpOyl0KGUubm9kZSxlLngwLGUueTAsZS54MSxlLnkxKTtyZXR1cm4gdGhpc30sT18ueD1mdW5jdGlvbiBRXyh0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feD10LHRoaXMpOnRoaXMuX3h9LE9fLnk9ZnVuY3Rpb24gdHkodCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX3k9dCx0aGlzKTp0aGlzLl95fTt2YXIgZXk9TWF0aC5QSSooMy1NYXRoLnNxcnQoNSkpO2Z1bmN0aW9uIG55KHQsZSl7aWYoKG49KHQ9ZT90LnRvRXhwb25lbnRpYWwoZS0xKTp0LnRvRXhwb25lbnRpYWwoKSkuaW5kZXhPZigiZSIpKTwwKXJldHVybiBudWxsO3ZhciBuLGk9dC5zbGljZSgwLG4pO3JldHVybltpLmxlbmd0aD4xP2lbMF0raS5zbGljZSgyKTppLCt0LnNsaWNlKG4rMSldfWZ1bmN0aW9uIGl5KHQpe3JldHVybih0PW55KE1hdGguYWJzKHQpKSk/dFsxXTpOYU59dmFyIHJ5LG95PS9eKD86KC4pPyhbPD49Xl0pKT8oWytcLSggXSk/KFskI10pPygwKT8oXGQrKT8oLCk/KFwuXGQrKT8ofik/KFthLXolXSk/JC9pO2Z1bmN0aW9uIGF5KHQpe2lmKCEoZT1veS5leGVjKHQpKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9ybWF0OiAiK3QpO3ZhciBlO3JldHVybiBuZXcgc3koe2ZpbGw6ZVsxXSxhbGlnbjplWzJdLHNpZ246ZVszXSxzeW1ib2w6ZVs0XSx6ZXJvOmVbNV0sd2lkdGg6ZVs2XSxjb21tYTplWzddLHByZWNpc2lvbjplWzhdJiZlWzhdLnNsaWNlKDEpLHRyaW06ZVs5XSx0eXBlOmVbMTBdfSl9ZnVuY3Rpb24gc3kodCl7dGhpcy5maWxsPXZvaWQgMD09PXQuZmlsbD8iICI6dC5maWxsKyIiLHRoaXMuYWxpZ249dm9pZCAwPT09dC5hbGlnbj8iPiI6dC5hbGlnbisiIix0aGlzLnNpZ249dm9pZCAwPT09dC5zaWduPyItIjp0LnNpZ24rIiIsdGhpcy5zeW1ib2w9dm9pZCAwPT09dC5zeW1ib2w/IiI6dC5zeW1ib2wrIiIsdGhpcy56ZXJvPSEhdC56ZXJvLHRoaXMud2lkdGg9dm9pZCAwPT09dC53aWR0aD92b2lkIDA6K3Qud2lkdGgsdGhpcy5jb21tYT0hIXQuY29tbWEsdGhpcy5wcmVjaXNpb249dm9pZCAwPT09dC5wcmVjaXNpb24/dm9pZCAwOit0LnByZWNpc2lvbix0aGlzLnRyaW09ISF0LnRyaW0sdGhpcy50eXBlPXZvaWQgMD09PXQudHlwZT8iIjp0LnR5cGUrIiJ9ZnVuY3Rpb24gbHkodCxlKXt2YXIgbj1ueSh0LGUpO2lmKCFuKXJldHVybiB0KyIiO3ZhciBpPW5bMF0scj1uWzFdO3JldHVybiByPDA/IjAuIituZXcgQXJyYXkoLXIpLmpvaW4oIjAiKStpOmkubGVuZ3RoPnIrMT9pLnNsaWNlKDAscisxKSsiLiIraS5zbGljZShyKzEpOmkrbmV3IEFycmF5KHItaS5sZW5ndGgrMikuam9pbigiMCIpfWF5LnByb3RvdHlwZT1zeS5wcm90b3R5cGUsc3kucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsbCt0aGlzLmFsaWduK3RoaXMuc2lnbit0aGlzLnN5bWJvbCsodGhpcy56ZXJvPyIwIjoiIikrKHZvaWQgMD09PXRoaXMud2lkdGg/IiI6TWF0aC5tYXgoMSwwfHRoaXMud2lkdGgpKSsodGhpcy5jb21tYT8iLCI6IiIpKyh2b2lkIDA9PT10aGlzLnByZWNpc2lvbj8iIjoiLiIrTWF0aC5tYXgoMCwwfHRoaXMucHJlY2lzaW9uKSkrKHRoaXMudHJpbT8ifiI6IiIpK3RoaXMudHlwZX07dmFyIGN5PXsiJSI6ZnVuY3Rpb24odCxlKXtyZXR1cm4oMTAwKnQpLnRvRml4ZWQoZSl9LGI6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoMil9LGM6ZnVuY3Rpb24odCl7cmV0dXJuIHQrIiJ9LGQ6ZnVuY3Rpb24gdXkodCl7cmV0dXJuIE1hdGguYWJzKHQ9TWF0aC5yb3VuZCh0KSk+PTFlMjE/dC50b0xvY2FsZVN0cmluZygiZW4iKS5yZXBsYWNlKC8sL2csIiIpOnQudG9TdHJpbmcoMTApfSxlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudG9FeHBvbmVudGlhbChlKX0sZjpmdW5jdGlvbih0LGUpe3JldHVybiB0LnRvRml4ZWQoZSl9LGc6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50b1ByZWNpc2lvbihlKX0sbzpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZyg4KX0scDpmdW5jdGlvbih0LGUpe3JldHVybiBseSgxMDAqdCxlKX0scjpseSxzOmZ1bmN0aW9uIGh5KHQsZSl7dmFyIG49bnkodCxlKTtpZighbilyZXR1cm4gdCsiIjt2YXIgaT1uWzBdLHI9blsxXSxvPXItKHJ5PTMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKHIvMykpKSkrMSxhPWkubGVuZ3RoO3JldHVybiBvPT09YT9pOm8+YT9pK25ldyBBcnJheShvLWErMSkuam9pbigiMCIpOm8+MD9pLnNsaWNlKDAsbykrIi4iK2kuc2xpY2Uobyk6IjAuIituZXcgQXJyYXkoMS1vKS5qb2luKCIwIikrbnkodCxNYXRoLm1heCgwLGUrby0xKSlbMF19LFg6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9LHg6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoMTYpfX07ZnVuY3Rpb24gZHkodCl7cmV0dXJuIHR9dmFyIHB5LGZ5LG15LGd5PUFycmF5LnByb3RvdHlwZS5tYXAsX3k9WyJ5IiwieiIsImEiLCJmIiwicCIsIm4iLCLCtSIsIm0iLCIiLCJrIiwiTSIsIkciLCJUIiwiUCIsIkUiLCJaIiwiWSJdO2Z1bmN0aW9uIHl5KHQpe3ZhciBlPXZvaWQgMD09PXQuZ3JvdXBpbmd8fHZvaWQgMD09PXQudGhvdXNhbmRzP2R5OihmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4saSl7Zm9yKHZhciByPW4ubGVuZ3RoLG89W10sYT0wLHM9dFswXSxsPTA7cj4wJiZzPjAmJihsK3MrMT5pJiYocz1NYXRoLm1heCgxLGktbCkpLG8ucHVzaChuLnN1YnN0cmluZyhyLT1zLHIrcykpLCEoKGwrPXMrMSk+aSkpOylzPXRbYT0oYSsxKSV0Lmxlbmd0aF07cmV0dXJuIG8ucmV2ZXJzZSgpLmpvaW4oZSl9fSkoZ3kuY2FsbCh0Lmdyb3VwaW5nLE51bWJlciksdC50aG91c2FuZHMrIiIpLGk9dm9pZCAwPT09dC5jdXJyZW5jeT8iIjp0LmN1cnJlbmN5WzBdKyIiLHI9dm9pZCAwPT09dC5jdXJyZW5jeT8iIjp0LmN1cnJlbmN5WzFdKyIiLG89dm9pZCAwPT09dC5kZWNpbWFsPyIuIjp0LmRlY2ltYWwrIiIsYT12b2lkIDA9PT10Lm51bWVyYWxzP2R5OihmdW5jdGlvbiBzKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9bMC05XS9nLChmdW5jdGlvbihlKXtyZXR1cm4gdFsrZV19KSl9fSkoZ3kuY2FsbCh0Lm51bWVyYWxzLFN0cmluZykpLGw9dm9pZCAwPT09dC5wZXJjZW50PyIlIjp0LnBlcmNlbnQrIiIsYz12b2lkIDA9PT10Lm1pbnVzPyItIjp0Lm1pbnVzKyIiLHU9dm9pZCAwPT09dC5uYW4/Ik5hTiI6dC5uYW4rIiI7ZnVuY3Rpb24gaCh0KXt2YXIgbj0odD1heSh0KSkuZmlsbCxzPXQuYWxpZ24saD10LnNpZ24sZD10LnN5bWJvbCxwPXQuemVybyxmPXQud2lkdGgsbT10LmNvbW1hLGc9dC5wcmVjaXNpb24sXz10LnRyaW0seT10LnR5cGU7Im4iPT09eT8obT0hMCx5PSJnIik6Y3lbeV18fCh2b2lkIDA9PT1nJiYoZz0xMiksXz0hMCx5PSJnIiksKHB8fCIwIj09PW4mJiI9Ij09PXMpJiYocD0hMCxuPSIwIixzPSI9Iik7dmFyIHY9IiQiPT09ZD9pOiIjIj09PWQmJi9bYm94WF0vLnRlc3QoeSk/IjAiK3kudG9Mb3dlckNhc2UoKToiIixiPSIkIj09PWQ/cjovWyVwXS8udGVzdCh5KT9sOiIiLHg9Y3lbeV0sdz0vW2RlZmdwcnMlXS8udGVzdCh5KTtmdW5jdGlvbiBTKHQpe3ZhciBpLHIsbCxkPXYsUz1iO2lmKCJjIj09PXkpUz14KHQpK1MsdD0iIjtlbHNle3ZhciBNPSh0PSt0KTwwfHwxL3Q8MDtpZih0PWlzTmFOKHQpP3U6eChNYXRoLmFicyh0KSxnKSxfJiYodD0oZnVuY3Rpb24gRSh0KXt0OmZvcih2YXIgZSxuPXQubGVuZ3RoLGk9MSxyPS0xO2k8bjsrK2kpc3dpdGNoKHRbaV0pe2Nhc2UiLiI6cj1lPWk7YnJlYWs7Y2FzZSIwIjowPT09ciYmKHI9aSksZT1pO2JyZWFrO2RlZmF1bHQ6aWYoISt0W2ldKWJyZWFrIHQ7cj4wJiYocj0wKX1yZXR1cm4gcj4wP3Quc2xpY2UoMCxyKSt0LnNsaWNlKGUrMSk6dH0pKHQpKSxNJiYwPT0rdCYmIisiIT09aCYmKE09ITEpLGQ9KE0/IigiPT09aD9oOmM6Ii0iPT09aHx8IigiPT09aD8iIjpoKStkLFM9KCJzIj09PXk/X3lbOCtyeS8zXToiIikrUysoTSYmIigiPT09aD8iKSI6IiIpLHcpZm9yKGk9LTEscj10Lmxlbmd0aDsrK2k8cjspaWYoNDg+KGw9dC5jaGFyQ29kZUF0KGkpKXx8bD41Nyl7Uz0oNDY9PT1sP28rdC5zbGljZShpKzEpOnQuc2xpY2UoaSkpK1MsdD10LnNsaWNlKDAsaSk7YnJlYWt9fW0mJiFwJiYodD1lKHQsMS8wKSk7dmFyIFQ9ZC5sZW5ndGgrdC5sZW5ndGgrUy5sZW5ndGgsQz1UPGY/bmV3IEFycmF5KGYtVCsxKS5qb2luKG4pOiIiO3N3aXRjaChtJiZwJiYodD1lKEMrdCxDLmxlbmd0aD9mLVMubGVuZ3RoOjEvMCksQz0iIikscyl7Y2FzZSI8Ijp0PWQrdCtTK0M7YnJlYWs7Y2FzZSI9Ijp0PWQrQyt0K1M7YnJlYWs7Y2FzZSJeIjp0PUMuc2xpY2UoMCxUPUMubGVuZ3RoPj4xKStkK3QrUytDLnNsaWNlKFQpO2JyZWFrO2RlZmF1bHQ6dD1DK2QrdCtTfXJldHVybiBhKHQpfXJldHVybiBnPXZvaWQgMD09PWc/NjovW2dwcnNdLy50ZXN0KHkpP01hdGgubWF4KDEsTWF0aC5taW4oMjEsZykpOk1hdGgubWF4KDAsTWF0aC5taW4oMjAsZykpLFMudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdCsiIn0sU31yZXR1cm57Zm9ybWF0OmgsZm9ybWF0UHJlZml4OmZ1bmN0aW9uIGQodCxlKXt2YXIgbj1oKCgodD1heSh0KSkudHlwZT0iZiIsdCkpLGk9MypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoaXkoZSkvMykpKSxyPU1hdGgucG93KDEwLC1pKSxvPV95WzgraS8zXTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG4ocip0KStvfX19fWZ1bmN0aW9uIHZ5KHQpe3JldHVybiBweT15eSh0KSxmeT1weS5mb3JtYXQsbXk9cHkuZm9ybWF0UHJlZml4LHB5fWZ1bmN0aW9uIGJ5KHQpe3JldHVybiBNYXRoLm1heCgwLC1peShNYXRoLmFicyh0KSkpfWZ1bmN0aW9uIHh5KHQsZSl7cmV0dXJuIE1hdGgubWF4KDAsMypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoaXkoZSkvMykpKS1peShNYXRoLmFicyh0KSkpfWZ1bmN0aW9uIHd5KHQsZSl7cmV0dXJuIHQ9TWF0aC5hYnModCksZT1NYXRoLmFicyhlKS10LE1hdGgubWF4KDAsaXkoZSktaXkodCkpKzF9ZnVuY3Rpb24gU3koKXtyZXR1cm4gbmV3IE15fWZ1bmN0aW9uIE15KCl7dGhpcy5yZXNldCgpfXZ5KHtkZWNpbWFsOiIuIix0aG91c2FuZHM6IiwiLGdyb3VwaW5nOlszXSxjdXJyZW5jeTpbIiQiLCIiXSxtaW51czoiLSJ9KSxNeS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOk15LHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5zPXRoaXMudD0wfSxhZGQ6ZnVuY3Rpb24odCl7VHkoRXksdCx0aGlzLnQpLFR5KHRoaXMsRXkucyx0aGlzLnMpLHRoaXMucz90aGlzLnQrPUV5LnQ6dGhpcy5zPUV5LnR9LHZhbHVlT2Y6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zfX07dmFyIEV5PW5ldyBNeTtmdW5jdGlvbiBUeSh0LGUsbil7dmFyIGk9dC5zPWUrbixyPWktZTt0LnQ9ZS0oaS1yKSsobi1yKX12YXIgQ3k9MWUtNixBeT0xZS0xMixreT1NYXRoLlBJLEx5PWt5LzIsUHk9a3kvNCxOeT0yKmt5LEl5PTE4MC9reSxPeT1reS8xODAsUnk9TWF0aC5hYnMsenk9TWF0aC5hdGFuLER5PU1hdGguYXRhbjIsQnk9TWF0aC5jb3MsSHk9TWF0aC5jZWlsLEZ5PU1hdGguZXhwLFZ5PU1hdGgubG9nLFV5PU1hdGgucG93LGp5PU1hdGguc2luLEd5PU1hdGguc2lnbnx8ZnVuY3Rpb24odCl7cmV0dXJuIHQ+MD8xOnQ8MD8tMTowfSxXeT1NYXRoLnNxcnQscXk9TWF0aC50YW47ZnVuY3Rpb24gWXkodCl7cmV0dXJuIHQ+MT8wOnQ8LTE/a3k6TWF0aC5hY29zKHQpfWZ1bmN0aW9uIFh5KHQpe3JldHVybiB0PjE/THk6dDwtMT8tTHk6TWF0aC5hc2luKHQpfWZ1bmN0aW9uICR5KHQpe3JldHVybih0PWp5KHQvMikpKnR9ZnVuY3Rpb24gS3koKXt9ZnVuY3Rpb24gWnkodCxlKXt0JiZReS5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpJiZReVt0LnR5cGVdKHQsZSl9dmFyIEp5PXtGZWF0dXJlOmZ1bmN0aW9uKHQsZSl7WnkodC5nZW9tZXRyeSxlKX0sRmVhdHVyZUNvbGxlY3Rpb246ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5mZWF0dXJlcyxpPS0xLHI9bi5sZW5ndGg7KytpPHI7KVp5KG5baV0uZ2VvbWV0cnksZSl9fSxReT17U3BoZXJlOmZ1bmN0aW9uKHQsZSl7ZS5zcGhlcmUoKX0sUG9pbnQ6ZnVuY3Rpb24odCxlKXtlLnBvaW50KCh0PXQuY29vcmRpbmF0ZXMpWzBdLHRbMV0sdFsyXSl9LE11bHRpUG9pbnQ6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5jb29yZGluYXRlcyxpPS0xLHI9bi5sZW5ndGg7KytpPHI7KWUucG9pbnQoKHQ9bltpXSlbMF0sdFsxXSx0WzJdKX0sTGluZVN0cmluZzpmdW5jdGlvbih0LGUpe3R2KHQuY29vcmRpbmF0ZXMsZSwwKX0sTXVsdGlMaW5lU3RyaW5nOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXQuY29vcmRpbmF0ZXMsaT0tMSxyPW4ubGVuZ3RoOysraTxyOyl0dihuW2ldLGUsMCl9LFBvbHlnb246ZnVuY3Rpb24odCxlKXtldih0LmNvb3JkaW5hdGVzLGUpfSxNdWx0aVBvbHlnb246ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5jb29yZGluYXRlcyxpPS0xLHI9bi5sZW5ndGg7KytpPHI7KWV2KG5baV0sZSl9LEdlb21ldHJ5Q29sbGVjdGlvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10Lmdlb21ldHJpZXMsaT0tMSxyPW4ubGVuZ3RoOysraTxyOylaeShuW2ldLGUpfX07ZnVuY3Rpb24gdHYodCxlLG4pe3ZhciBpLHI9LTEsbz10Lmxlbmd0aC1uO2ZvcihlLmxpbmVTdGFydCgpOysrcjxvOyllLnBvaW50KChpPXRbcl0pWzBdLGlbMV0saVsyXSk7ZS5saW5lRW5kKCl9ZnVuY3Rpb24gZXYodCxlKXt2YXIgbj0tMSxpPXQubGVuZ3RoO2ZvcihlLnBvbHlnb25TdGFydCgpOysrbjxpOyl0dih0W25dLGUsMSk7ZS5wb2x5Z29uRW5kKCl9ZnVuY3Rpb24gbnYodCxlKXt0JiZKeS5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpP0p5W3QudHlwZV0odCxlKTpaeSh0LGUpfXZhciBpdixydixvdixhdixzdixsdj1TeSgpLGN2PVN5KCksdXY9e3BvaW50Okt5LGxpbmVTdGFydDpLeSxsaW5lRW5kOkt5LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2x2LnJlc2V0KCksdXYubGluZVN0YXJ0PWh2LHV2LmxpbmVFbmQ9ZHZ9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt2YXIgdD0rbHY7Y3YuYWRkKHQ8MD9OeSt0OnQpLHRoaXMubGluZVN0YXJ0PXRoaXMubGluZUVuZD10aGlzLnBvaW50PUt5fSxzcGhlcmU6ZnVuY3Rpb24oKXtjdi5hZGQoTnkpfX07ZnVuY3Rpb24gaHYoKXt1di5wb2ludD1wdn1mdW5jdGlvbiBkdigpe2Z2KGl2LHJ2KX1mdW5jdGlvbiBwdih0LGUpe3V2LnBvaW50PWZ2LGl2PXQscnY9ZSxvdj10Kj1PeSxhdj1CeShlPShlKj1PeSkvMitQeSksc3Y9ankoZSl9ZnVuY3Rpb24gZnYodCxlKXt2YXIgbj0odCo9T3kpLW92LGk9bj49MD8xOi0xLHI9aSpuLG89QnkoZT0oZSo9T3kpLzIrUHkpLGE9ankoZSkscz1zdiphLGw9YXYqbytzKkJ5KHIpLGM9cyppKmp5KHIpO2x2LmFkZChEeShjLGwpKSxvdj10LGF2PW8sc3Y9YX1mdW5jdGlvbiBtdih0KXtyZXR1cm5bRHkodFsxXSx0WzBdKSxYeSh0WzJdKV19ZnVuY3Rpb24gZ3YodCl7dmFyIGU9dFswXSxuPXRbMV0saT1CeShuKTtyZXR1cm5baSpCeShlKSxpKmp5KGUpLGp5KG4pXX1mdW5jdGlvbiBfdih0LGUpe3JldHVybiB0WzBdKmVbMF0rdFsxXSplWzFdK3RbMl0qZVsyXX1mdW5jdGlvbiB5dih0LGUpe3JldHVyblt0WzFdKmVbMl0tdFsyXSplWzFdLHRbMl0qZVswXS10WzBdKmVbMl0sdFswXSplWzFdLXRbMV0qZVswXV19ZnVuY3Rpb24gdnYodCxlKXt0WzBdKz1lWzBdLHRbMV0rPWVbMV0sdFsyXSs9ZVsyXX1mdW5jdGlvbiBidih0LGUpe3JldHVyblt0WzBdKmUsdFsxXSplLHRbMl0qZV19ZnVuY3Rpb24geHYodCl7dmFyIGU9V3kodFswXSp0WzBdK3RbMV0qdFsxXSt0WzJdKnRbMl0pO3RbMF0vPWUsdFsxXS89ZSx0WzJdLz1lfXZhciB3dixTdixNdixFdixUdixDdixBdixrdixMdixQdixOdixJdixPdixSdix6dixEdixCdixIdixGdixWdixVdixqdixHdixXdixxdixZdixYdj1TeSgpLCR2PXtwb2ludDpLdixsaW5lU3RhcnQ6SnYsbGluZUVuZDpRdixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXskdi5wb2ludD10Yiwkdi5saW5lU3RhcnQ9ZWIsJHYubGluZUVuZD1uYixYdi5yZXNldCgpLHV2LnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dXYucG9seWdvbkVuZCgpLCR2LnBvaW50PUt2LCR2LmxpbmVTdGFydD1Kdiwkdi5saW5lRW5kPVF2LGx2PDA/KHd2PS0oTXY9MTgwKSxTdj0tKEV2PTkwKSk6WHY+Q3k/RXY9OTA6WHY8LTFlLTYmJihTdj0tOTApLFB2WzBdPXd2LFB2WzFdPU12fSxzcGhlcmU6ZnVuY3Rpb24oKXt3dj0tKE12PTE4MCksU3Y9LShFdj05MCl9fTtmdW5jdGlvbiBLdih0LGUpe0x2LnB1c2goUHY9W3d2PXQsTXY9dF0pLGU8U3YmJihTdj1lKSxlPkV2JiYoRXY9ZSl9ZnVuY3Rpb24gWnYodCxlKXt2YXIgbj1ndihbdCpPeSxlKk95XSk7aWYoa3Ype3ZhciBpPXl2KGt2LG4pLHI9eXYoW2lbMV0sLWlbMF0sMF0saSk7eHYocikscj1tdihyKTt2YXIgbyxhPXQtVHYscz1hPjA/MTotMSxsPXJbMF0qSXkqcyxjPVJ5KGEpPjE4MDtjXihzKlR2PGwmJmw8cyp0KT8obz1yWzFdKkl5KT5FdiYmKEV2PW8pOmNeKHMqVHY8KGw9KGwrMzYwKSUzNjAtMTgwKSYmbDxzKnQpPyhvPS1yWzFdKkl5KTxTdiYmKFN2PW8pOihlPFN2JiYoU3Y9ZSksZT5FdiYmKEV2PWUpKSxjP3Q8VHY/aWIod3YsdCk+aWIod3YsTXYpJiYoTXY9dCk6aWIodCxNdik+aWIod3YsTXYpJiYod3Y9dCk6TXY+PXd2Pyh0PHd2JiYod3Y9dCksdD5NdiYmKE12PXQpKTp0PlR2P2liKHd2LHQpPmliKHd2LE12KSYmKE12PXQpOmliKHQsTXYpPmliKHd2LE12KSYmKHd2PXQpfWVsc2UgTHYucHVzaChQdj1bd3Y9dCxNdj10XSk7ZTxTdiYmKFN2PWUpLGU+RXYmJihFdj1lKSxrdj1uLFR2PXR9ZnVuY3Rpb24gSnYoKXskdi5wb2ludD1adn1mdW5jdGlvbiBRdigpe1B2WzBdPXd2LFB2WzFdPU12LCR2LnBvaW50PUt2LGt2PW51bGx9ZnVuY3Rpb24gdGIodCxlKXtpZihrdil7dmFyIG49dC1UdjtYdi5hZGQoUnkobik+MTgwP24rKG4+MD8zNjA6LTM2MCk6bil9ZWxzZSBDdj10LEF2PWU7dXYucG9pbnQodCxlKSxadih0LGUpfWZ1bmN0aW9uIGViKCl7dXYubGluZVN0YXJ0KCl9ZnVuY3Rpb24gbmIoKXt0YihDdixBdiksdXYubGluZUVuZCgpLFJ5KFh2KT5DeSYmKHd2PS0oTXY9MTgwKSksUHZbMF09d3YsUHZbMV09TXYsa3Y9bnVsbH1mdW5jdGlvbiBpYih0LGUpe3JldHVybihlLT10KTwwP2UrMzYwOmV9ZnVuY3Rpb24gcmIodCxlKXtyZXR1cm4gdFswXS1lWzBdfWZ1bmN0aW9uIG9iKHQsZSl7cmV0dXJuIHRbMF08PXRbMV0/dFswXTw9ZSYmZTw9dFsxXTplPHRbMF18fHRbMV08ZX12YXIgYWI9e3NwaGVyZTpLeSxwb2ludDpzYixsaW5lU3RhcnQ6Y2IsbGluZUVuZDpkYixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXthYi5saW5lU3RhcnQ9cGIsYWIubGluZUVuZD1mYn0scG9seWdvbkVuZDpmdW5jdGlvbigpe2FiLmxpbmVTdGFydD1jYixhYi5saW5lRW5kPWRifX07ZnVuY3Rpb24gc2IodCxlKXt0Kj1PeTt2YXIgbj1CeShlKj1PeSk7bGIobipCeSh0KSxuKmp5KHQpLGp5KGUpKX1mdW5jdGlvbiBsYih0LGUsbil7KytOdixPdis9KHQtT3YpL052LFJ2Kz0oZS1SdikvTnYsenYrPShuLXp2KS9Odn1mdW5jdGlvbiBjYigpe2FiLnBvaW50PXVifWZ1bmN0aW9uIHViKHQsZSl7dCo9T3k7dmFyIG49QnkoZSo9T3kpO1d2PW4qQnkodCkscXY9bipqeSh0KSxZdj1qeShlKSxhYi5wb2ludD1oYixsYihXdixxdixZdil9ZnVuY3Rpb24gaGIodCxlKXt0Kj1PeTt2YXIgbj1CeShlKj1PeSksaT1uKkJ5KHQpLHI9bipqeSh0KSxvPWp5KGUpLGE9RHkoV3koKGE9cXYqby1ZdipyKSphKyhhPVl2KmktV3YqbykqYSsoYT1XdipyLXF2KmkpKmEpLFd2KmkrcXYqcitZdipvKTtJdis9YSxEdis9YSooV3YrKFd2PWkpKSxCdis9YSoocXYrKHF2PXIpKSxIdis9YSooWXYrKFl2PW8pKSxsYihXdixxdixZdil9ZnVuY3Rpb24gZGIoKXthYi5wb2ludD1zYn1mdW5jdGlvbiBwYigpe2FiLnBvaW50PW1ifWZ1bmN0aW9uIGZiKCl7Z2IoanYsR3YpLGFiLnBvaW50PXNifWZ1bmN0aW9uIG1iKHQsZSl7anY9dCxHdj1lLHQqPU95LGUqPU95LGFiLnBvaW50PWdiO3ZhciBuPUJ5KGUpO1d2PW4qQnkodCkscXY9bipqeSh0KSxZdj1qeShlKSxsYihXdixxdixZdil9ZnVuY3Rpb24gZ2IodCxlKXt0Kj1PeTt2YXIgbj1CeShlKj1PeSksaT1uKkJ5KHQpLHI9bipqeSh0KSxvPWp5KGUpLGE9cXYqby1ZdipyLHM9WXYqaS1XdipvLGw9V3Yqci1xdippLGM9V3koYSphK3MqcytsKmwpLHU9WHkoYyksaD1jJiYtdS9jO0Z2Kz1oKmEsVnYrPWgqcyxVdis9aCpsLEl2Kz11LER2Kz11KihXdisoV3Y9aSkpLEJ2Kz11KihxdisocXY9cikpLEh2Kz11KihZdisoWXY9bykpLGxiKFd2LHF2LFl2KX1mdW5jdGlvbiBfYih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24geWIodCxlKXtmdW5jdGlvbiBuKG4saSl7cmV0dXJuIG49dChuLGkpLGUoblswXSxuWzFdKX1yZXR1cm4gdC5pbnZlcnQmJmUuaW52ZXJ0JiYobi5pbnZlcnQ9ZnVuY3Rpb24obixpKXtyZXR1cm4obj1lLmludmVydChuLGkpKSYmdC5pbnZlcnQoblswXSxuWzFdKX0pLG59ZnVuY3Rpb24gdmIodCxlKXtyZXR1cm5bUnkodCk+a3k/dCtNYXRoLnJvdW5kKC10L055KSpOeTp0LGVdfWZ1bmN0aW9uIGJiKHQsZSxuKXtyZXR1cm4odCU9TnkpP2V8fG4/eWIod2IodCksU2IoZSxuKSk6d2IodCk6ZXx8bj9TYihlLG4pOnZifWZ1bmN0aW9uIHhiKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3JldHVyblsoZSs9dCk+a3k/ZS1OeTplPC1reT9lK055OmUsbl19fWZ1bmN0aW9uIHdiKHQpe3ZhciBlPXhiKHQpO3JldHVybiBlLmludmVydD14YigtdCksZX1mdW5jdGlvbiBTYih0LGUpe3ZhciBuPUJ5KHQpLGk9ankodCkscj1CeShlKSxvPWp5KGUpO2Z1bmN0aW9uIGEodCxlKXt2YXIgYT1CeShlKSxzPUJ5KHQpKmEsbD1qeSh0KSphLGM9ankoZSksdT1jKm4rcyppO3JldHVybltEeShsKnItdSpvLHMqbi1jKmkpLFh5KHUqcitsKm8pXX1yZXR1cm4gYS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgYT1CeShlKSxzPUJ5KHQpKmEsbD1qeSh0KSphLGM9ankoZSksdT1jKnItbCpvO3JldHVybltEeShsKnIrYypvLHMqbit1KmkpLFh5KHUqbi1zKmkpXX0sYX1mdW5jdGlvbiBNYih0KXtmdW5jdGlvbiBlKGUpe3JldHVybihlPXQoZVswXSpPeSxlWzFdKk95KSlbMF0qPUl5LGVbMV0qPUl5LGV9cmV0dXJuIHQ9YmIodFswXSpPeSx0WzFdKk95LHQubGVuZ3RoPjI/dFsyXSpPeTowKSxlLmludmVydD1mdW5jdGlvbihlKXtyZXR1cm4oZT10LmludmVydChlWzBdKk95LGVbMV0qT3kpKVswXSo9SXksZVsxXSo9SXksZX0sZX1mdW5jdGlvbiBFYih0LGUsbixpLHIsbyl7aWYobil7dmFyIGE9QnkoZSkscz1qeShlKSxsPWkqbjtudWxsPT1yPyhyPWUraSpOeSxvPWUtbC8yKToocj1UYihhLHIpLG89VGIoYSxvKSwoaT4wP3I8bzpyPm8pJiYocis9aSpOeSkpO2Zvcih2YXIgYyx1PXI7aT4wP3U+bzp1PG87dS09bCljPW12KFthLC1zKkJ5KHUpLC1zKmp5KHUpXSksdC5wb2ludChjWzBdLGNbMV0pfX1mdW5jdGlvbiBUYih0LGUpeyhlPWd2KGUpKVswXS09dCx4dihlKTt2YXIgbj1ZeSgtZVsxXSk7cmV0dXJuKCgtZVsyXTwwPy1uOm4pK055LUN5KSVOeX1mdW5jdGlvbiBDYigpe3ZhciB0LGU9W107cmV0dXJue3BvaW50OmZ1bmN0aW9uKGUsbixpKXt0LnB1c2goW2UsbixpXSl9LGxpbmVTdGFydDpmdW5jdGlvbigpe2UucHVzaCh0PVtdKX0sbGluZUVuZDpLeSxyZWpvaW46ZnVuY3Rpb24oKXtlLmxlbmd0aD4xJiZlLnB1c2goZS5wb3AoKS5jb25jYXQoZS5zaGlmdCgpKSl9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciBuPWU7cmV0dXJuIGU9W10sdD1udWxsLG59fX1mdW5jdGlvbiBBYih0LGUpe3JldHVybiBSeSh0WzBdLWVbMF0pPEN5JiZSeSh0WzFdLWVbMV0pPEN5fWZ1bmN0aW9uIGtiKHQsZSxuLGkpe3RoaXMueD10LHRoaXMuej1lLHRoaXMubz1uLHRoaXMuZT1pLHRoaXMudj0hMSx0aGlzLm49dGhpcy5wPW51bGx9ZnVuY3Rpb24gTGIodCxlLG4saSxyKXt2YXIgbyxhLHM9W10sbD1bXTtpZih0LmZvckVhY2goKGZ1bmN0aW9uKHQpe2lmKCEoKGU9dC5sZW5ndGgtMSk8PTApKXt2YXIgZSxuLGk9dFswXSxhPXRbZV07aWYoQWIoaSxhKSl7aWYoIWlbMl0mJiFhWzJdKXtmb3Ioci5saW5lU3RhcnQoKSxvPTA7bzxlOysrbylyLnBvaW50KChpPXRbb10pWzBdLGlbMV0pO3JldHVybiB2b2lkIHIubGluZUVuZCgpfWFbMF0rPTJlLTZ9cy5wdXNoKG49bmV3IGtiKGksdCxudWxsLCEwKSksbC5wdXNoKG4ubz1uZXcga2IoaSxudWxsLG4sITEpKSxzLnB1c2gobj1uZXcga2IoYSx0LG51bGwsITEpKSxsLnB1c2gobi5vPW5ldyBrYihhLG51bGwsbiwhMCkpfX0pKSxzLmxlbmd0aCl7Zm9yKGwuc29ydChlKSxQYihzKSxQYihsKSxvPTAsYT1sLmxlbmd0aDtvPGE7KytvKWxbb10uZT1uPSFuO2Zvcih2YXIgYyx1LGg9c1swXTs7KXtmb3IodmFyIGQ9aCxwPSEwO2QudjspaWYoKGQ9ZC5uKT09PWgpcmV0dXJuO2M9ZC56LHIubGluZVN0YXJ0KCk7ZG97aWYoZC52PWQuby52PSEwLGQuZSl7aWYocClmb3Iobz0wLGE9Yy5sZW5ndGg7bzxhOysrbylyLnBvaW50KCh1PWNbb10pWzBdLHVbMV0pO2Vsc2UgaShkLngsZC5uLngsMSxyKTtkPWQubn1lbHNle2lmKHApZm9yKG89KGM9ZC5wLnopLmxlbmd0aC0xO28+PTA7LS1vKXIucG9pbnQoKHU9Y1tvXSlbMF0sdVsxXSk7ZWxzZSBpKGQueCxkLnAueCwtMSxyKTtkPWQucH1jPShkPWQubykueixwPSFwfXdoaWxlKCFkLnYpO3IubGluZUVuZCgpfX19ZnVuY3Rpb24gUGIodCl7aWYoZT10Lmxlbmd0aCl7Zm9yKHZhciBlLG4saT0wLHI9dFswXTsrK2k8ZTspci5uPW49dFtpXSxuLnA9cixyPW47ci5uPW49dFswXSxuLnA9cn19dmIuaW52ZXJ0PXZiO3ZhciBOYj1TeSgpO2Z1bmN0aW9uIEliKHQpe3JldHVybiBSeSh0WzBdKTw9a3k/dFswXTpHeSh0WzBdKSooKFJ5KHRbMF0pK2t5KSVOeS1reSl9ZnVuY3Rpb24gT2IodCxlKXt2YXIgbj1JYihlKSxpPWVbMV0scj1qeShpKSxvPVtqeShuKSwtQnkobiksMF0sYT0wLHM9MDtOYi5yZXNldCgpLDE9PT1yP2k9THkrQ3k6LTE9PT1yJiYoaT0tTHktQ3kpO2Zvcih2YXIgbD0wLGM9dC5sZW5ndGg7bDxjOysrbClpZihoPSh1PXRbbF0pLmxlbmd0aClmb3IodmFyIHUsaCxkPXVbaC0xXSxwPUliKGQpLGY9ZFsxXS8yK1B5LG09ankoZiksZz1CeShmKSxfPTA7XzxoOysrXyxwPXYsbT14LGc9dyxkPXkpe3ZhciB5PXVbX10sdj1JYih5KSxiPXlbMV0vMitQeSx4PWp5KGIpLHc9QnkoYiksUz12LXAsTT1TPj0wPzE6LTEsRT1NKlMsVD1FPmt5LEM9bSp4O2lmKE5iLmFkZChEeShDKk0qankoRSksZyp3K0MqQnkoRSkpKSxhKz1UP1MrTSpOeTpTLFRecD49bl52Pj1uKXt2YXIgQT15dihndihkKSxndih5KSk7eHYoQSk7dmFyIGs9eXYobyxBKTt4dihrKTt2YXIgTD0oVF5TPj0wPy0xOjEpKlh5KGtbMl0pOyhpPkx8fGk9PT1MJiYoQVswXXx8QVsxXSkpJiYocys9VF5TPj0wPzE6LTEpfX1yZXR1cm4oYTwtMWUtNnx8YTxDeSYmTmI8LTFlLTYpXjEmc31mdW5jdGlvbiBSYih0LGUsbixpKXtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG8sYSxzLGw9ZShyKSxjPUNiKCksdT1lKGMpLGg9ITEsZD17cG9pbnQ6cCxsaW5lU3RhcnQ6bSxsaW5lRW5kOmcscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7ZC5wb2ludD1fLGQubGluZVN0YXJ0PXksZC5saW5lRW5kPXYsYT1bXSxvPVtdfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7ZC5wb2ludD1wLGQubGluZVN0YXJ0PW0sZC5saW5lRW5kPWcsYT1XbChhKTt2YXIgdD1PYihvLGkpO2EubGVuZ3RoPyhofHwoci5wb2x5Z29uU3RhcnQoKSxoPSEwKSxMYihhLERiLHQsbixyKSk6dCYmKGh8fChyLnBvbHlnb25TdGFydCgpLGg9ITApLHIubGluZVN0YXJ0KCksbihudWxsLG51bGwsMSxyKSxyLmxpbmVFbmQoKSksaCYmKHIucG9seWdvbkVuZCgpLGg9ITEpLGE9bz1udWxsfSxzcGhlcmU6ZnVuY3Rpb24oKXtyLnBvbHlnb25TdGFydCgpLHIubGluZVN0YXJ0KCksbihudWxsLG51bGwsMSxyKSxyLmxpbmVFbmQoKSxyLnBvbHlnb25FbmQoKX19O2Z1bmN0aW9uIHAoZSxuKXt0KGUsbikmJnIucG9pbnQoZSxuKX1mdW5jdGlvbiBmKHQsZSl7bC5wb2ludCh0LGUpfWZ1bmN0aW9uIG0oKXtkLnBvaW50PWYsbC5saW5lU3RhcnQoKX1mdW5jdGlvbiBnKCl7ZC5wb2ludD1wLGwubGluZUVuZCgpfWZ1bmN0aW9uIF8odCxlKXtzLnB1c2goW3QsZV0pLHUucG9pbnQodCxlKX1mdW5jdGlvbiB5KCl7dS5saW5lU3RhcnQoKSxzPVtdfWZ1bmN0aW9uIHYoKXtfKHNbMF1bMF0sc1swXVsxXSksdS5saW5lRW5kKCk7dmFyIHQsZSxuLGksbD11LmNsZWFuKCksZD1jLnJlc3VsdCgpLHA9ZC5sZW5ndGg7aWYocy5wb3AoKSxvLnB1c2gocykscz1udWxsLHApaWYoMSZsKXtpZigoZT0obj1kWzBdKS5sZW5ndGgtMSk+MCl7Zm9yKGh8fChyLnBvbHlnb25TdGFydCgpLGg9ITApLHIubGluZVN0YXJ0KCksdD0wO3Q8ZTsrK3Qpci5wb2ludCgoaT1uW3RdKVswXSxpWzFdKTtyLmxpbmVFbmQoKX19ZWxzZSBwPjEmJjImbCYmZC5wdXNoKGQucG9wKCkuY29uY2F0KGQuc2hpZnQoKSkpLGEucHVzaChkLmZpbHRlcih6YikpfXJldHVybiBkfX1mdW5jdGlvbiB6Yih0KXtyZXR1cm4gdC5sZW5ndGg+MX1mdW5jdGlvbiBEYih0LGUpe3JldHVybigodD10LngpWzBdPDA/dFsxXS1MeS1DeTpMeS10WzFdKS0oKGU9ZS54KVswXTwwP2VbMV0tTHktQ3k6THktZVsxXSl9dmFyIEJiPVJiKChmdW5jdGlvbigpe3JldHVybiEwfSksKGZ1bmN0aW9uIEhiKHQpe3ZhciBlLG49TmFOLGk9TmFOLHI9TmFOO3JldHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0LmxpbmVTdGFydCgpLGU9MX0scG9pbnQ6ZnVuY3Rpb24obyxhKXt2YXIgcz1vPjA/a3k6LWt5LGw9Unkoby1uKTtSeShsLWt5KTxDeT8odC5wb2ludChuLGk9KGkrYSkvMj4wP0x5Oi1MeSksdC5wb2ludChyLGkpLHQubGluZUVuZCgpLHQubGluZVN0YXJ0KCksdC5wb2ludChzLGkpLHQucG9pbnQobyxpKSxlPTApOnIhPT1zJiZsPj1reSYmKFJ5KG4tcik8Q3kmJihuLT1yKkN5KSxSeShvLXMpPEN5JiYoby09cypDeSksaT0oZnVuY3Rpb24gYyh0LGUsbixpKXt2YXIgcixvLGE9ankodC1uKTtyZXR1cm4gUnkoYSk+Q3k/enkoKGp5KGUpKihvPUJ5KGkpKSpqeShuKS1qeShpKSoocj1CeShlKSkqankodCkpLyhyKm8qYSkpOihlK2kpLzJ9KShuLGksbyxhKSx0LnBvaW50KHIsaSksdC5saW5lRW5kKCksdC5saW5lU3RhcnQoKSx0LnBvaW50KHMsaSksZT0wKSx0LnBvaW50KG49byxpPWEpLHI9c30sbGluZUVuZDpmdW5jdGlvbigpe3QubGluZUVuZCgpLG49aT1OYU59LGNsZWFuOmZ1bmN0aW9uKCl7cmV0dXJuIDItZX19fSksKGZ1bmN0aW9uIEZiKHQsZSxuLGkpe3ZhciByO2lmKG51bGw9PXQpaS5wb2ludCgta3kscj1uKkx5KSxpLnBvaW50KDAsciksaS5wb2ludChreSxyKSxpLnBvaW50KGt5LDApLGkucG9pbnQoa3ksLXIpLGkucG9pbnQoMCwtciksaS5wb2ludCgta3ksLXIpLGkucG9pbnQoLWt5LDApLGkucG9pbnQoLWt5LHIpO2Vsc2UgaWYoUnkodFswXS1lWzBdKT5DeSl7dmFyIG89dFswXTxlWzBdP2t5Oi1reTtpLnBvaW50KC1vLHI9bipvLzIpLGkucG9pbnQoMCxyKSxpLnBvaW50KG8scil9ZWxzZSBpLnBvaW50KGVbMF0sZVsxXSl9KSxbLWt5LC1MeV0pO2Z1bmN0aW9uIFZiKHQpe3ZhciBlPUJ5KHQpLG49NipPeSxpPWU+MCxyPVJ5KGUpPkN5O2Z1bmN0aW9uIG8odCxuKXtyZXR1cm4gQnkodCkqQnkobik+ZX1mdW5jdGlvbiBhKHQsbixpKXt2YXIgcj1bMSwwLDBdLG89eXYoZ3YodCksZ3YobikpLGE9X3YobyxvKSxzPW9bMF0sbD1hLXMqcztpZighbClyZXR1cm4haSYmdDt2YXIgYz1lKmEvbCx1PS1lKnMvbCxoPXl2KHIsbyksZD1idihyLGMpO3Z2KGQsYnYobyx1KSk7dmFyIHA9aCxmPV92KGQscCksbT1fdihwLHApLGc9ZipmLW0qKF92KGQsZCktMSk7aWYoIShnPDApKXt2YXIgXz1XeShnKSx5PWJ2KHAsKC1mLV8pL20pO2lmKHZ2KHksZCkseT1tdih5KSwhaSlyZXR1cm4geTt2YXIgdixiPXRbMF0seD1uWzBdLHc9dFsxXSxTPW5bMV07eDxiJiYodj1iLGI9eCx4PXYpO3ZhciBNPXgtYixFPVJ5KE0ta3kpPEN5O2lmKCFFJiZTPHcmJih2PXcsdz1TLFM9diksRXx8TTxDeT9FP3crUz4wXnlbMV08KFJ5KHlbMF0tYik8Q3k/dzpTKTp3PD15WzFdJiZ5WzFdPD1TOk0+a3leKGI8PXlbMF0mJnlbMF08PXgpKXt2YXIgVD1idihwLCgtZitfKS9tKTtyZXR1cm4gdnYoVCxkKSxbeSxtdihUKV19fX1mdW5jdGlvbiBzKGUsbil7dmFyIHI9aT90Omt5LXQsbz0wO3JldHVybiBlPC1yP298PTE6ZT5yJiYob3w9Miksbjwtcj9vfD00Om4+ciYmKG98PTgpLG99cmV0dXJuIFJiKG8sKGZ1bmN0aW9uIGwodCl7dmFyIGUsbixsLGMsdTtyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9uKCl7Yz1sPSExLHU9MX0scG9pbnQ6ZnVuY3Rpb24oaCxkKXt2YXIgcCxmPVtoLGRdLG09byhoLGQpLGc9aT9tPzA6cyhoLGQpOm0/cyhoKyhoPDA/a3k6LWt5KSxkKTowO2lmKCFlJiYoYz1sPW0pJiZ0LmxpbmVTdGFydCgpLG0hPT1sJiYoIShwPWEoZSxmKSl8fEFiKGUscCl8fEFiKGYscCkpJiYoZlsyXT0xKSxtIT09bCl1PTAsbT8odC5saW5lU3RhcnQoKSxwPWEoZixlKSx0LnBvaW50KHBbMF0scFsxXSkpOihwPWEoZSxmKSx0LnBvaW50KHBbMF0scFsxXSwyKSx0LmxpbmVFbmQoKSksZT1wO2Vsc2UgaWYociYmZSYmaV5tKXt2YXIgXztnJm58fCEoXz1hKGYsZSwhMCkpfHwodT0wLGk/KHQubGluZVN0YXJ0KCksdC5wb2ludChfWzBdWzBdLF9bMF1bMV0pLHQucG9pbnQoX1sxXVswXSxfWzFdWzFdKSx0LmxpbmVFbmQoKSk6KHQucG9pbnQoX1sxXVswXSxfWzFdWzFdKSx0LmxpbmVFbmQoKSx0LmxpbmVTdGFydCgpLHQucG9pbnQoX1swXVswXSxfWzBdWzFdLDMpKSl9IW18fGUmJkFiKGUsZil8fHQucG9pbnQoZlswXSxmWzFdKSxlPWYsbD1tLG49Z30sbGluZUVuZDpmdW5jdGlvbigpe2wmJnQubGluZUVuZCgpLGU9bnVsbH0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gdXwoYyYmbCk8PDF9fX0pLChmdW5jdGlvbiBjKGUsaSxyLG8pe0ViKG8sdCxuLHIsZSxpKX0pLGk/WzAsLXRdOlsta3ksdC1reV0pfXZhciBVYj0xZTksamI9LVViO2Z1bmN0aW9uIEdiKHQsZSxuLGkpe2Z1bmN0aW9uIHIocixvKXtyZXR1cm4gdDw9ciYmcjw9biYmZTw9byYmbzw9aX1mdW5jdGlvbiBvKHIsbyxzLGMpe3ZhciB1PTAsaD0wO2lmKG51bGw9PXJ8fCh1PWEocixzKSkhPT0oaD1hKG8scykpfHxsKHIsbyk8MF5zPjApZG97Yy5wb2ludCgwPT09dXx8Mz09PXU/dDpuLHU+MT9pOmUpfXdoaWxlKCh1PSh1K3MrNCklNCkhPT1oKTtlbHNlIGMucG9pbnQob1swXSxvWzFdKX1mdW5jdGlvbiBhKGkscil7cmV0dXJuIFJ5KGlbMF0tdCk8Q3k/cj4wPzA6MzpSeShpWzBdLW4pPEN5P3I+MD8yOjE6UnkoaVsxXS1lKTxDeT9yPjA/MTowOnI+MD8zOjJ9ZnVuY3Rpb24gcyh0LGUpe3JldHVybiBsKHQueCxlLngpfWZ1bmN0aW9uIGwodCxlKXt2YXIgbj1hKHQsMSksaT1hKGUsMSk7cmV0dXJuIG4hPT1pP24taTowPT09bj9lWzFdLXRbMV06MT09PW4/dFswXS1lWzBdOjI9PT1uP3RbMV0tZVsxXTplWzBdLXRbMF19cmV0dXJuIGZ1bmN0aW9uKGEpe3ZhciBsLGMsdSxoLGQscCxmLG0sZyxfLHksdj1hLGI9Q2IoKSx4PXtwb2ludDpULGxpbmVTdGFydDpmdW5jdGlvbiB3KCl7eC5wb2ludD1DLGMmJmMucHVzaCh1PVtdKSxfPSEwLGc9ITEsZj1tPU5hTn0sbGluZUVuZDpmdW5jdGlvbiBTKCl7bCYmKEMoaCxkKSxwJiZnJiZiLnJlam9pbigpLGwucHVzaChiLnJlc3VsdCgpKSkseC5wb2ludD1ULGcmJnYubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24gTSgpe3Y9YixsPVtdLGM9W10seT0hMH0scG9seWdvbkVuZDpmdW5jdGlvbiBFKCl7dmFyIGU9KGZ1bmN0aW9uIG4oKXtmb3IodmFyIGU9MCxuPTAscj1jLmxlbmd0aDtuPHI7KytuKWZvcih2YXIgbyxhLHM9Y1tuXSxsPTEsdT1zLmxlbmd0aCxoPXNbMF0sZD1oWzBdLHA9aFsxXTtsPHU7KytsKW89ZCxhPXAsZD0oaD1zW2xdKVswXSxwPWhbMV0sYTw9aT9wPmkmJihkLW8pKihpLWEpPihwLWEpKih0LW8pJiYrK2U6cDw9aSYmKGQtbykqKGktYSk8KHAtYSkqKHQtbykmJi0tZTtyZXR1cm4gZX0pKCkscj15JiZlLGg9KGw9V2wobCkpLmxlbmd0aDsocnx8aCkmJihhLnBvbHlnb25TdGFydCgpLHImJihhLmxpbmVTdGFydCgpLG8obnVsbCxudWxsLDEsYSksYS5saW5lRW5kKCkpLGgmJkxiKGwscyxlLG8sYSksYS5wb2x5Z29uRW5kKCkpLHY9YSxsPWM9dT1udWxsfX07ZnVuY3Rpb24gVCh0LGUpe3IodCxlKSYmdi5wb2ludCh0LGUpfWZ1bmN0aW9uIEMobyxhKXt2YXIgcz1yKG8sYSk7aWYoYyYmdS5wdXNoKFtvLGFdKSxfKWg9byxkPWEscD1zLF89ITEscyYmKHYubGluZVN0YXJ0KCksdi5wb2ludChvLGEpKTtlbHNlIGlmKHMmJmcpdi5wb2ludChvLGEpO2Vsc2V7dmFyIGw9W2Y9TWF0aC5tYXgoamIsTWF0aC5taW4oVWIsZikpLG09TWF0aC5tYXgoamIsTWF0aC5taW4oVWIsbSkpXSxiPVtvPU1hdGgubWF4KGpiLE1hdGgubWluKFViLG8pKSxhPU1hdGgubWF4KGpiLE1hdGgubWluKFViLGEpKV07IShmdW5jdGlvbiB4KHQsZSxuLGkscixvKXt2YXIgYSxzPXRbMF0sbD10WzFdLGM9MCx1PTEsaD1lWzBdLXMsZD1lWzFdLWw7aWYoYT1uLXMsaHx8IShhPjApKXtpZihhLz1oLGg8MCl7aWYoYTxjKXJldHVybjthPHUmJih1PWEpfWVsc2UgaWYoaD4wKXtpZihhPnUpcmV0dXJuO2E+YyYmKGM9YSl9aWYoYT1yLXMsaHx8IShhPDApKXtpZihhLz1oLGg8MCl7aWYoYT51KXJldHVybjthPmMmJihjPWEpfWVsc2UgaWYoaD4wKXtpZihhPGMpcmV0dXJuO2E8dSYmKHU9YSl9aWYoYT1pLWwsZHx8IShhPjApKXtpZihhLz1kLGQ8MCl7aWYoYTxjKXJldHVybjthPHUmJih1PWEpfWVsc2UgaWYoZD4wKXtpZihhPnUpcmV0dXJuO2E+YyYmKGM9YSl9aWYoYT1vLWwsZHx8IShhPDApKXtpZihhLz1kLGQ8MCl7aWYoYT51KXJldHVybjthPmMmJihjPWEpfWVsc2UgaWYoZD4wKXtpZihhPGMpcmV0dXJuO2E8dSYmKHU9YSl9cmV0dXJuIGM+MCYmKHRbMF09cytjKmgsdFsxXT1sK2MqZCksdTwxJiYoZVswXT1zK3UqaCxlWzFdPWwrdSpkKSwhMH19fX19KShsLGIsdCxlLG4saSk/cyYmKHYubGluZVN0YXJ0KCksdi5wb2ludChvLGEpLHk9ITEpOihnfHwodi5saW5lU3RhcnQoKSx2LnBvaW50KGxbMF0sbFsxXSkpLHYucG9pbnQoYlswXSxiWzFdKSxzfHx2LmxpbmVFbmQoKSx5PSExKX1mPW8sbT1hLGc9c31yZXR1cm4geH19dmFyIFdiLHFiLFliLFhiPVN5KCksJGI9e3NwaGVyZTpLeSxwb2ludDpLeSxsaW5lU3RhcnQ6ZnVuY3Rpb24gS2IoKXskYi5wb2ludD1KYiwkYi5saW5lRW5kPVpifSxsaW5lRW5kOkt5LHBvbHlnb25TdGFydDpLeSxwb2x5Z29uRW5kOkt5fTtmdW5jdGlvbiBaYigpeyRiLnBvaW50PSRiLmxpbmVFbmQ9S3l9ZnVuY3Rpb24gSmIodCxlKXtXYj10Kj1PeSxxYj1qeShlKj1PeSksWWI9QnkoZSksJGIucG9pbnQ9UWJ9ZnVuY3Rpb24gUWIodCxlKXt0Kj1PeTt2YXIgbj1qeShlKj1PeSksaT1CeShlKSxyPVJ5KHQtV2IpLG89QnkociksYT1pKmp5KHIpLHM9WWIqbi1xYippKm8sbD1xYipuK1liKmkqbztYYi5hZGQoRHkoV3koYSphK3MqcyksbCkpLFdiPXQscWI9bixZYj1pfWZ1bmN0aW9uIHR4KHQpe3JldHVybiBYYi5yZXNldCgpLG52KHQsJGIpLCtYYn12YXIgZXg9W251bGwsbnVsbF0sbng9e3R5cGU6IkxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOmV4fTtmdW5jdGlvbiBpeCh0LGUpe3JldHVybiBleFswXT10LGV4WzFdPWUsdHgobngpfXZhciByeD17RmVhdHVyZTpmdW5jdGlvbih0LGUpe3JldHVybiBheCh0Lmdlb21ldHJ5LGUpfSxGZWF0dXJlQ29sbGVjdGlvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmZlYXR1cmVzLGk9LTEscj1uLmxlbmd0aDsrK2k8cjspaWYoYXgobltpXS5nZW9tZXRyeSxlKSlyZXR1cm4hMDtyZXR1cm4hMX19LG94PXtTcGhlcmU6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sUG9pbnQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gc3godC5jb29yZGluYXRlcyxlKX0sTXVsdGlQb2ludDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmNvb3JkaW5hdGVzLGk9LTEscj1uLmxlbmd0aDsrK2k8cjspaWYoc3gobltpXSxlKSlyZXR1cm4hMDtyZXR1cm4hMX0sTGluZVN0cmluZzpmdW5jdGlvbih0LGUpe3JldHVybiBseCh0LmNvb3JkaW5hdGVzLGUpfSxNdWx0aUxpbmVTdHJpbmc6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5jb29yZGluYXRlcyxpPS0xLHI9bi5sZW5ndGg7KytpPHI7KWlmKGx4KG5baV0sZSkpcmV0dXJuITA7cmV0dXJuITF9LFBvbHlnb246ZnVuY3Rpb24odCxlKXtyZXR1cm4gY3godC5jb29yZGluYXRlcyxlKX0sTXVsdGlQb2x5Z29uOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXQuY29vcmRpbmF0ZXMsaT0tMSxyPW4ubGVuZ3RoOysraTxyOylpZihjeChuW2ldLGUpKXJldHVybiEwO3JldHVybiExfSxHZW9tZXRyeUNvbGxlY3Rpb246ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5nZW9tZXRyaWVzLGk9LTEscj1uLmxlbmd0aDsrK2k8cjspaWYoYXgobltpXSxlKSlyZXR1cm4hMDtyZXR1cm4hMX19O2Z1bmN0aW9uIGF4KHQsZSl7cmV0dXJuISghdHx8IW94Lmhhc093blByb3BlcnR5KHQudHlwZSkpJiZveFt0LnR5cGVdKHQsZSl9ZnVuY3Rpb24gc3godCxlKXtyZXR1cm4gMD09PWl4KHQsZSl9ZnVuY3Rpb24gbHgodCxlKXtmb3IodmFyIG4saSxyLG89MCxhPXQubGVuZ3RoO288YTtvKyspe2lmKDA9PT0oaT1peCh0W29dLGUpKSlyZXR1cm4hMDtpZihvPjAmJihyPWl4KHRbb10sdFtvLTFdKSk+MCYmbjw9ciYmaTw9ciYmKG4raS1yKSooMS1NYXRoLnBvdygobi1pKS9yLDIpKTxBeSpyKXJldHVybiEwO249aX1yZXR1cm4hMX1mdW5jdGlvbiBjeCh0LGUpe3JldHVybiEhT2IodC5tYXAodXgpLGh4KGUpKX1mdW5jdGlvbiB1eCh0KXtyZXR1cm4odD10Lm1hcChoeCkpLnBvcCgpLHR9ZnVuY3Rpb24gaHgodCl7cmV0dXJuW3RbMF0qT3ksdFsxXSpPeV19ZnVuY3Rpb24gZHgodCxlLG4pe3ZhciBpPVJsKHQsZS1DeSxuKS5jb25jYXQoZSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuW3QsZV19KSl9fWZ1bmN0aW9uIHB4KHQsZSxuKXt2YXIgaT1SbCh0LGUtQ3ksbikuY29uY2F0KGUpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gaS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybltlLHRdfSkpfX1mdW5jdGlvbiBmeCgpe3ZhciB0LGUsbixpLHIsbyxhLHMsbCxjLHUsaCxkPTEwLHA9ZCxmPTkwLG09MzYwLGc9Mi41O2Z1bmN0aW9uIF8oKXtyZXR1cm57dHlwZToiTXVsdGlMaW5lU3RyaW5nIixjb29yZGluYXRlczp5KCl9fWZ1bmN0aW9uIHkoKXtyZXR1cm4gUmwoSHkoaS9mKSpmLG4sZikubWFwKHUpLmNvbmNhdChSbChIeShzL20pKm0sYSxtKS5tYXAoaCkpLmNvbmNhdChSbChIeShlL2QpKmQsdCxkKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBSeSh0JWYpPkN5fSkpLm1hcChsKSkuY29uY2F0KFJsKEh5KG8vcCkqcCxyLHApLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIFJ5KHQlbSk+Q3l9KSkubWFwKGMpKX1yZXR1cm4gXy5saW5lcz1mdW5jdGlvbigpe3JldHVybiB5KCkubWFwKChmdW5jdGlvbih0KXtyZXR1cm57dHlwZToiTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6dH19KSl9LF8ub3V0bGluZT1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpbdShpKS5jb25jYXQoaChhKS5zbGljZSgxKSx1KG4pLnJldmVyc2UoKS5zbGljZSgxKSxoKHMpLnJldmVyc2UoKS5zbGljZSgxKSldfX0sXy5leHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/Xy5leHRlbnRNYWpvcih0KS5leHRlbnRNaW5vcih0KTpfLmV4dGVudE1pbm9yKCl9LF8uZXh0ZW50TWFqb3I9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9K3RbMF1bMV0sYT0rdFsxXVsxXSwoaT0rdFswXVswXSk+KG49K3RbMV1bMF0pJiYodD1pLGk9bixuPXQpLHM+YSYmKHQ9cyxzPWEsYT10KSxfLnByZWNpc2lvbihnKSk6W1tpLHNdLFtuLGFdXX0sXy5leHRlbnRNaW5vcj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0rblswXVsxXSxyPStuWzFdWzFdLChlPStuWzBdWzBdKT4odD0rblsxXVswXSkmJihuPWUsZT10LHQ9biksbz5yJiYobj1vLG89cixyPW4pLF8ucHJlY2lzaW9uKGcpKTpbW2Usb10sW3Qscl1dfSxfLnN0ZXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/Xy5zdGVwTWFqb3IodCkuc3RlcE1pbm9yKHQpOl8uc3RlcE1pbm9yKCl9LF8uc3RlcE1ham9yPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPSt0WzBdLG09K3RbMV0sXyk6W2YsbV19LF8uc3RlcE1pbm9yPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPSt0WzBdLHA9K3RbMV0sXyk6W2QscF19LF8ucHJlY2lzaW9uPWZ1bmN0aW9uKGQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPStkLGw9ZHgobyxyLDkwKSxjPXB4KGUsdCxnKSx1PWR4KHMsYSw5MCksaD1weChpLG4sZyksXyk6Z30sXy5leHRlbnRNYWpvcihbWy0xODAsLTg5Ljk5OTk5OV0sWzE4MCw4OS45OTk5OTldXSkuZXh0ZW50TWlub3IoW1stMTgwLC04MC4wMDAwMDFdLFsxODAsODAuMDAwMDAxXV0pfWZ1bmN0aW9uIG14KHQpe3JldHVybiB0fXZhciBneCxfeCx5eCx2eCxieD1TeSgpLHh4PVN5KCksd3g9e3BvaW50Okt5LGxpbmVTdGFydDpLeSxsaW5lRW5kOkt5LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3d4LmxpbmVTdGFydD1TeCx3eC5saW5lRW5kPVR4fSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7d3gubGluZVN0YXJ0PXd4LmxpbmVFbmQ9d3gucG9pbnQ9S3ksYnguYWRkKFJ5KHh4KSkseHgucmVzZXQoKX0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHQ9YngvMjtyZXR1cm4gYngucmVzZXQoKSx0fX07ZnVuY3Rpb24gU3goKXt3eC5wb2ludD1NeH1mdW5jdGlvbiBNeCh0LGUpe3d4LnBvaW50PUV4LGd4PXl4PXQsX3g9dng9ZX1mdW5jdGlvbiBFeCh0LGUpe3h4LmFkZCh2eCp0LXl4KmUpLHl4PXQsdng9ZX1mdW5jdGlvbiBUeCgpe0V4KGd4LF94KX12YXIgQ3gsQXgsa3gsTHgsUHg9MS8wLE54PVB4LEl4PS1QeCxPeD1JeCxSeD17cG9pbnQ6ZnVuY3Rpb24gengodCxlKXt0PFB4JiYoUHg9dCksdD5JeCYmKEl4PXQpLGU8TngmJihOeD1lKSxlPk94JiYoT3g9ZSl9LGxpbmVTdGFydDpLeSxsaW5lRW5kOkt5LHBvbHlnb25TdGFydDpLeSxwb2x5Z29uRW5kOkt5LHJlc3VsdDpmdW5jdGlvbigpe3ZhciB0PVtbUHgsTnhdLFtJeCxPeF1dO3JldHVybiBJeD1PeD0tKE54PVB4PTEvMCksdH19LER4PTAsQng9MCxIeD0wLEZ4PTAsVng9MCxVeD0wLGp4PTAsR3g9MCxXeD0wLHF4PXtwb2ludDpZeCxsaW5lU3RhcnQ6WHgsbGluZUVuZDpaeCxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtxeC5saW5lU3RhcnQ9SngscXgubGluZUVuZD1ReH0scG9seWdvbkVuZDpmdW5jdGlvbigpe3F4LnBvaW50PVl4LHF4LmxpbmVTdGFydD1YeCxxeC5saW5lRW5kPVp4fSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgdD1XeD9bangvV3gsR3gvV3hdOlV4P1tGeC9VeCxWeC9VeF06SHg/W0R4L0h4LEJ4L0h4XTpbTmFOLE5hTl07cmV0dXJuIER4PUJ4PUh4PUZ4PVZ4PVV4PWp4PUd4PVd4PTAsdH19O2Z1bmN0aW9uIFl4KHQsZSl7RHgrPXQsQngrPWUsKytIeH1mdW5jdGlvbiBYeCgpe3F4LnBvaW50PSR4fWZ1bmN0aW9uICR4KHQsZSl7cXgucG9pbnQ9S3gsWXgoa3g9dCxMeD1lKX1mdW5jdGlvbiBLeCh0LGUpe3ZhciBuPXQta3gsaT1lLUx4LHI9V3kobipuK2kqaSk7RngrPXIqKGt4K3QpLzIsVngrPXIqKEx4K2UpLzIsVXgrPXIsWXgoa3g9dCxMeD1lKX1mdW5jdGlvbiBaeCgpe3F4LnBvaW50PVl4fWZ1bmN0aW9uIEp4KCl7cXgucG9pbnQ9dHd9ZnVuY3Rpb24gUXgoKXtldyhDeCxBeCl9ZnVuY3Rpb24gdHcodCxlKXtxeC5wb2ludD1ldyxZeChDeD1reD10LEF4PUx4PWUpfWZ1bmN0aW9uIGV3KHQsZSl7dmFyIG49dC1reCxpPWUtTHgscj1XeShuKm4raSppKTtGeCs9ciooa3grdCkvMixWeCs9ciooTHgrZSkvMixVeCs9cixqeCs9KHI9THgqdC1reCplKSooa3grdCksR3grPXIqKEx4K2UpLFd4Kz0zKnIsWXgoa3g9dCxMeD1lKX1mdW5jdGlvbiBudyh0KXt0aGlzLl9jb250ZXh0PXR9bncucHJvdG90eXBlPXtfcmFkaXVzOjQuNSxwb2ludFJhZGl1czpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmFkaXVzPXQsdGhpc30scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXswPT09dGhpcy5fbGluZSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9wb2ludD1OYU59LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKSx0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpO2JyZWFrO2RlZmF1bHQ6dGhpcy5fY29udGV4dC5tb3ZlVG8odCt0aGlzLl9yYWRpdXMsZSksdGhpcy5fY29udGV4dC5hcmModCxlLHRoaXMuX3JhZGl1cywwLE55KX19LHJlc3VsdDpLeX07dmFyIGl3LHJ3LG93LGF3LHN3LGx3PVN5KCksY3c9e3BvaW50Okt5LGxpbmVTdGFydDpmdW5jdGlvbigpe2N3LnBvaW50PXV3fSxsaW5lRW5kOmZ1bmN0aW9uKCl7aXcmJmh3KHJ3LG93KSxjdy5wb2ludD1LeX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7aXc9ITB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtpdz1udWxsfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgdD0rbHc7cmV0dXJuIGx3LnJlc2V0KCksdH19O2Z1bmN0aW9uIHV3KHQsZSl7Y3cucG9pbnQ9aHcscnc9YXc9dCxvdz1zdz1lfWZ1bmN0aW9uIGh3KHQsZSl7bHcuYWRkKFd5KChhdy09dCkqYXcrKHN3LT1lKSpzdykpLGF3PXQsc3c9ZX1mdW5jdGlvbiBkdygpe3RoaXMuX3N0cmluZz1bXX1mdW5jdGlvbiBwdyh0KXtyZXR1cm4ibTAsIit0KyJhIit0KyIsIit0KyIgMCAxLDEgMCwiKy0yKnQrImEiK3QrIiwiK3QrIiAwIDEsMSAwLCIrMip0KyJ6In1mdW5jdGlvbiBmdyh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49bmV3IG13O2Zvcih2YXIgaSBpbiB0KW5baV09dFtpXTtyZXR1cm4gbi5zdHJlYW09ZSxufX1mdW5jdGlvbiBtdygpe31mdW5jdGlvbiBndyh0LGUsbil7dmFyIGk9dC5jbGlwRXh0ZW50JiZ0LmNsaXBFeHRlbnQoKTtyZXR1cm4gdC5zY2FsZSgxNTApLnRyYW5zbGF0ZShbMCwwXSksbnVsbCE9aSYmdC5jbGlwRXh0ZW50KG51bGwpLG52KG4sdC5zdHJlYW0oUngpKSxlKFJ4LnJlc3VsdCgpKSxudWxsIT1pJiZ0LmNsaXBFeHRlbnQoaSksdH1mdW5jdGlvbiBfdyh0LGUsbil7cmV0dXJuIGd3KHQsKGZ1bmN0aW9uKG4pe3ZhciBpPWVbMV1bMF0tZVswXVswXSxyPWVbMV1bMV0tZVswXVsxXSxvPU1hdGgubWluKGkvKG5bMV1bMF0tblswXVswXSksci8oblsxXVsxXS1uWzBdWzFdKSksYT0rZVswXVswXSsoaS1vKihuWzFdWzBdK25bMF1bMF0pKS8yLHM9K2VbMF1bMV0rKHItbyooblsxXVsxXStuWzBdWzFdKSkvMjt0LnNjYWxlKDE1MCpvKS50cmFuc2xhdGUoW2Esc10pfSksbil9ZnVuY3Rpb24geXcodCxlLG4pe3JldHVybiBfdyh0LFtbMCwwXSxlXSxuKX1mdW5jdGlvbiB2dyh0LGUsbil7cmV0dXJuIGd3KHQsKGZ1bmN0aW9uKG4pe3ZhciBpPStlLHI9aS8oblsxXVswXS1uWzBdWzBdKSxvPShpLXIqKG5bMV1bMF0rblswXVswXSkpLzIsYT0tcipuWzBdWzFdO3Quc2NhbGUoMTUwKnIpLnRyYW5zbGF0ZShbbyxhXSl9KSxuKX1mdW5jdGlvbiBidyh0LGUsbil7cmV0dXJuIGd3KHQsKGZ1bmN0aW9uKG4pe3ZhciBpPStlLHI9aS8oblsxXVsxXS1uWzBdWzFdKSxvPS1yKm5bMF1bMF0sYT0oaS1yKihuWzFdWzFdK25bMF1bMV0pKS8yO3Quc2NhbGUoMTUwKnIpLnRyYW5zbGF0ZShbbyxhXSl9KSxuKX1kdy5wcm90b3R5cGU9e19yYWRpdXM6NC41LF9jaXJjbGU6cHcoNC41KSxwb2ludFJhZGl1czpmdW5jdGlvbih0KXtyZXR1cm4odD0rdCkhPT10aGlzLl9yYWRpdXMmJih0aGlzLl9yYWRpdXM9dCx0aGlzLl9jaXJjbGU9bnVsbCksdGhpc30scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXswPT09dGhpcy5fbGluZSYmdGhpcy5fc3RyaW5nLnB1c2goIloiKSx0aGlzLl9wb2ludD1OYU59LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fc3RyaW5nLnB1c2goIk0iLHQsIiwiLGUpLHRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3N0cmluZy5wdXNoKCJMIix0LCIsIixlKTticmVhaztkZWZhdWx0Om51bGw9PXRoaXMuX2NpcmNsZSYmKHRoaXMuX2NpcmNsZT1wdyh0aGlzLl9yYWRpdXMpKSx0aGlzLl9zdHJpbmcucHVzaCgiTSIsdCwiLCIsZSx0aGlzLl9jaXJjbGUpfX0scmVzdWx0OmZ1bmN0aW9uKCl7aWYodGhpcy5fc3RyaW5nLmxlbmd0aCl7dmFyIHQ9dGhpcy5fc3RyaW5nLmpvaW4oIiIpO3JldHVybiB0aGlzLl9zdHJpbmc9W10sdH1yZXR1cm4gbnVsbH19LG13LnByb3RvdHlwZT17Y29uc3RydWN0b3I6bXcscG9pbnQ6ZnVuY3Rpb24odCxlKXt0aGlzLnN0cmVhbS5wb2ludCh0LGUpfSxzcGhlcmU6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5zcGhlcmUoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ucG9seWdvbkVuZCgpfX07dmFyIHh3PUJ5KDMwKk95KTtmdW5jdGlvbiB3dyh0LGUpe3JldHVybitlPyhmdW5jdGlvbiBuKHQsZSl7ZnVuY3Rpb24gbihpLHIsbyxhLHMsbCxjLHUsaCxkLHAsZixtLGcpe3ZhciBfPWMtaSx5PXUtcix2PV8qXyt5Knk7aWYodj40KmUmJm0tLSl7dmFyIGI9YStkLHg9cytwLHc9bCtmLFM9V3koYipiK3gqeCt3KncpLE09WHkody89UyksRT1SeShSeSh3KS0xKTxDeXx8Unkoby1oKTxDeT8obytoKS8yOkR5KHgsYiksVD10KEUsTSksQz1UWzBdLEE9VFsxXSxrPUMtaSxMPUEtcixQPXkqay1fKkw7KFAqUC92PmV8fFJ5KChfKmsreSpMKS92LS41KT4uM3x8YSpkK3MqcCtsKmY8eHcpJiYobihpLHIsbyxhLHMsbCxDLEEsRSxiLz1TLHgvPVMsdyxtLGcpLGcucG9pbnQoQyxBKSxuKEMsQSxFLGIseCx3LGMsdSxoLGQscCxmLG0sZykpfX1yZXR1cm4gZnVuY3Rpb24oZSl7dmFyIGkscixvLGEscyxsLGMsdSxoLGQscCxmLG09e3BvaW50OmcsbGluZVN0YXJ0Ol8sbGluZUVuZDp2LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2UucG9seWdvblN0YXJ0KCksbS5saW5lU3RhcnQ9Yn0scG9seWdvbkVuZDpmdW5jdGlvbigpe2UucG9seWdvbkVuZCgpLG0ubGluZVN0YXJ0PV99fTtmdW5jdGlvbiBnKG4saSl7bj10KG4saSksZS5wb2ludChuWzBdLG5bMV0pfWZ1bmN0aW9uIF8oKXt1PU5hTixtLnBvaW50PXksZS5saW5lU3RhcnQoKX1mdW5jdGlvbiB5KGkscil7dmFyIG89Z3YoW2kscl0pLGE9dChpLHIpO24odSxoLGMsZCxwLGYsdT1hWzBdLGg9YVsxXSxjPWksZD1vWzBdLHA9b1sxXSxmPW9bMl0sMTYsZSksZS5wb2ludCh1LGgpfWZ1bmN0aW9uIHYoKXttLnBvaW50PWcsZS5saW5lRW5kKCl9ZnVuY3Rpb24gYigpe18oKSxtLnBvaW50PXgsbS5saW5lRW5kPXd9ZnVuY3Rpb24geCh0LGUpe3koaT10LGUpLHI9dSxvPWgsYT1kLHM9cCxsPWYsbS5wb2ludD15fWZ1bmN0aW9uIHcoKXtuKHUsaCxjLGQscCxmLHIsbyxpLGEscyxsLDE2LGUpLG0ubGluZUVuZD12LHYoKX1yZXR1cm4gbX19KSh0LGUpOihmdW5jdGlvbiBpKHQpe3JldHVybiBmdyh7cG9pbnQ6ZnVuY3Rpb24oZSxuKXtlPXQoZSxuKSx0aGlzLnN0cmVhbS5wb2ludChlWzBdLGVbMV0pfX0pfSkodCl9dmFyIFN3PWZ3KHtwb2ludDpmdW5jdGlvbih0LGUpe3RoaXMuc3RyZWFtLnBvaW50KHQqT3ksZSpPeSl9fSk7ZnVuY3Rpb24gTXcodCxlLG4saSxyKXtmdW5jdGlvbiBvKG8sYSl7cmV0dXJuW2UrdCoobyo9aSksbi10KihhKj1yKV19cmV0dXJuIG8uaW52ZXJ0PWZ1bmN0aW9uKG8sYSl7cmV0dXJuWyhvLWUpL3QqaSwobi1hKS90KnJdfSxvfWZ1bmN0aW9uIEV3KHQsZSxuLGkscixvKXt2YXIgYT1CeShvKSxzPWp5KG8pLGw9YSp0LGM9cyp0LHU9YS90LGg9cy90LGQ9KHMqbi1hKmUpL3QscD0ocyplK2EqbikvdDtmdW5jdGlvbiBmKHQsbyl7cmV0dXJuW2wqKHQqPWkpLWMqKG8qPXIpK2Usbi1jKnQtbCpvXX1yZXR1cm4gZi5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm5baSoodSp0LWgqZStkKSxyKihwLWgqdC11KmUpXX0sZn1mdW5jdGlvbiBUdyh0KXtyZXR1cm4gQ3coKGZ1bmN0aW9uKCl7cmV0dXJuIHR9KSkoKX1mdW5jdGlvbiBDdyh0KXt2YXIgZSxuLGkscixvLGEscyxsLGMsdSxoPTE1MCxkPTQ4MCxwPTI1MCxmPTAsbT0wLGc9MCxfPTAseT0wLHY9MCxiPTEseD0xLHc9bnVsbCxTPUJiLE09bnVsbCxFPW14LFQ9LjU7ZnVuY3Rpb24gQyh0KXtyZXR1cm4gbCh0WzBdKk95LHRbMV0qT3kpfWZ1bmN0aW9uIEEodCl7cmV0dXJuKHQ9bC5pbnZlcnQodFswXSx0WzFdKSkmJlt0WzBdKkl5LHRbMV0qSXldfWZ1bmN0aW9uIGsoKXt2YXIgdD1FdyhoLDAsMCxiLHgsdikuYXBwbHkobnVsbCxlKGYsbSkpLGk9KHY/RXc6TXcpKGgsZC10WzBdLHAtdFsxXSxiLHgsdik7cmV0dXJuIG49YmIoZyxfLHkpLHM9eWIoZSxpKSxsPXliKG4scyksYT13dyhzLFQpLEwoKX1mdW5jdGlvbiBMKCl7cmV0dXJuIGM9dT1udWxsLEN9cmV0dXJuIEMuc3RyZWFtPWZ1bmN0aW9uKHQpe3JldHVybiBjJiZ1PT09dD9jOmM9U3coKGZ1bmN0aW9uIGUodCl7cmV0dXJuIGZ3KHtwb2ludDpmdW5jdGlvbihlLG4pe3ZhciBpPXQoZSxuKTtyZXR1cm4gdGhpcy5zdHJlYW0ucG9pbnQoaVswXSxpWzFdKX19KX0pKG4pKFMoYShFKHU9dCkpKSkpfSxDLnByZWNsaXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFM9dCx3PXZvaWQgMCxMKCkpOlN9LEMucG9zdGNsaXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEU9dCxNPWk9cj1vPW51bGwsTCgpKTpFfSxDLmNsaXBBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oUz0rdD9WYih3PXQqT3kpOih3PW51bGwsQmIpLEwoKSk6dypJeX0sQy5jbGlwRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhFPW51bGw9PXQ/KE09aT1yPW89bnVsbCxteCk6R2IoTT0rdFswXVswXSxpPSt0WzBdWzFdLHI9K3RbMV1bMF0sbz0rdFsxXVsxXSksTCgpKTpudWxsPT1NP251bGw6W1tNLGldLFtyLG9dXX0sQy5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0rdCxrKCkpOmh9LEMudHJhbnNsYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPSt0WzBdLHA9K3RbMV0saygpKTpbZCxwXX0sQy5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9dFswXSUzNjAqT3ksbT10WzFdJTM2MCpPeSxrKCkpOltmKkl5LG0qSXldfSxDLnJvdGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz10WzBdJTM2MCpPeSxfPXRbMV0lMzYwKk95LHk9dC5sZW5ndGg+Mj90WzJdJTM2MCpPeTowLGsoKSk6W2cqSXksXypJeSx5Kkl5XX0sQy5hbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odj10JTM2MCpPeSxrKCkpOnYqSXl9LEMucmVmbGVjdFg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGI9dD8tMToxLGsoKSk6YjwwfSxDLnJlZmxlY3RZPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh4PXQ/LTE6MSxrKCkpOng8MH0sQy5wcmVjaXNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9d3cocyxUPXQqdCksTCgpKTpXeShUKX0sQy5maXRFeHRlbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gX3coQyx0LGUpfSxDLmZpdFNpemU9ZnVuY3Rpb24odCxlKXtyZXR1cm4geXcoQyx0LGUpfSxDLmZpdFdpZHRoPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZ3KEMsdCxlKX0sQy5maXRIZWlnaHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYncoQyx0LGUpfSxmdW5jdGlvbigpe3JldHVybiBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLEMuaW52ZXJ0PWUuaW52ZXJ0JiZBLGsoKX19ZnVuY3Rpb24gQXcodCl7dmFyIGU9MCxuPWt5LzMsaT1Ddyh0KSxyPWkoZSxuKTtyZXR1cm4gci5wYXJhbGxlbHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/aShlPXRbMF0qT3ksbj10WzFdKk95KTpbZSpJeSxuKkl5XX0scn1mdW5jdGlvbiBrdyh0LGUpe3ZhciBuPWp5KHQpLGk9KG4rankoZSkpLzI7aWYoUnkoaSk8Q3kpcmV0dXJuKGZ1bmN0aW9uIHIodCl7dmFyIGU9QnkodCk7ZnVuY3Rpb24gbih0LG4pe3JldHVyblt0KmUsankobikvZV19cmV0dXJuIG4uaW52ZXJ0PWZ1bmN0aW9uKHQsbil7cmV0dXJuW3QvZSxYeShuKmUpXX0sbn0pKHQpO3ZhciBvPTErbiooMippLW4pLGE9V3kobykvaTtmdW5jdGlvbiBzKHQsZSl7dmFyIG49V3koby0yKmkqankoZSkpL2k7cmV0dXJuW24qankodCo9aSksYS1uKkJ5KHQpXX1yZXR1cm4gcy5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1hLWUscj1EeSh0LFJ5KG4pKSpHeShuKTtyZXR1cm4gbippPDAmJihyLT1reSpHeSh0KSpHeShuKSksW3IvaSxYeSgoby0odCp0K24qbikqaSppKS8oMippKSldfSxzfWZ1bmN0aW9uIEx3KCl7cmV0dXJuIEF3KGt3KS5zY2FsZSgxNTUuNDI0KS5jZW50ZXIoWzAsMzMuNjQ0Ml0pfWZ1bmN0aW9uIFB3KCl7cmV0dXJuIEx3KCkucGFyYWxsZWxzKFsyOS41LDQ1LjVdKS5zY2FsZSgxMDcwKS50cmFuc2xhdGUoWzQ4MCwyNTBdKS5yb3RhdGUoWzk2LDBdKS5jZW50ZXIoWy0uNiwzOC43XSl9ZnVuY3Rpb24gTncodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7dmFyIGk9QnkoZSkscj1CeShuKSxvPXQoaSpyKTtyZXR1cm5bbypyKmp5KGUpLG8qankobildfX1mdW5jdGlvbiBJdyh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXt2YXIgaT1XeShlKmUrbipuKSxyPXQoaSksbz1qeShyKSxhPUJ5KHIpO3JldHVybltEeShlKm8saSphKSxYeShpJiZuKm8vaSldfX12YXIgT3c9TncoKGZ1bmN0aW9uKHQpe3JldHVybiBXeSgyLygxK3QpKX0pKTtPdy5pbnZlcnQ9SXcoKGZ1bmN0aW9uKHQpe3JldHVybiAyKlh5KHQvMil9KSk7dmFyIFJ3PU53KChmdW5jdGlvbih0KXtyZXR1cm4odD1ZeSh0KSkmJnQvankodCl9KSk7ZnVuY3Rpb24gencodCxlKXtyZXR1cm5bdCxWeShxeSgoTHkrZSkvMikpXX1mdW5jdGlvbiBEdyh0KXt2YXIgZSxuLGkscj1Udyh0KSxvPXIuY2VudGVyLGE9ci5zY2FsZSxzPXIudHJhbnNsYXRlLGw9ci5jbGlwRXh0ZW50LGM9bnVsbDtmdW5jdGlvbiB1KCl7dmFyIG89a3kqYSgpLHM9cihNYihyLnJvdGF0ZSgpKS5pbnZlcnQoWzAsMF0pKTtyZXR1cm4gbChudWxsPT1jP1tbc1swXS1vLHNbMV0tb10sW3NbMF0rbyxzWzFdK29dXTp0PT09enc/W1tNYXRoLm1heChzWzBdLW8sYyksZV0sW01hdGgubWluKHNbMF0rbyxuKSxpXV06W1tjLE1hdGgubWF4KHNbMV0tbyxlKV0sW24sTWF0aC5taW4oc1sxXStvLGkpXV0pfXJldHVybiByLnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhKHQpLHUoKSk6YSgpfSxyLnRyYW5zbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocyh0KSx1KCkpOnMoKX0sci5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG8odCksdSgpKTpvKCl9LHIuY2xpcEV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09dD9jPWU9bj1pPW51bGw6KGM9K3RbMF1bMF0sZT0rdFswXVsxXSxuPSt0WzFdWzBdLGk9K3RbMV1bMV0pLHUoKSk6bnVsbD09Yz9udWxsOltbYyxlXSxbbixpXV19LHUoKX1mdW5jdGlvbiBCdyh0KXtyZXR1cm4gcXkoKEx5K3QpLzIpfWZ1bmN0aW9uIEh3KHQsZSl7dmFyIG49QnkodCksaT10PT09ZT9qeSh0KTpWeShuL0J5KGUpKS9WeShCdyhlKS9Cdyh0KSkscj1uKlV5KEJ3KHQpLGkpL2k7aWYoIWkpcmV0dXJuIHp3O2Z1bmN0aW9uIG8odCxlKXtyPjA/ZTwtTHkrQ3kmJihlPS1MeStDeSk6ZT5MeS1DeSYmKGU9THktQ3kpO3ZhciBuPXIvVXkoQncoZSksaSk7cmV0dXJuW24qankoaSp0KSxyLW4qQnkoaSp0KV19cmV0dXJuIG8uaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIG49ci1lLG89R3koaSkqV3kodCp0K24qbiksYT1EeSh0LFJ5KG4pKSpHeShuKTtyZXR1cm4gbippPDAmJihhLT1reSpHeSh0KSpHeShuKSksW2EvaSwyKnp5KFV5KHIvbywxL2kpKS1MeV19LG99ZnVuY3Rpb24gRncodCxlKXtyZXR1cm5bdCxlXX1mdW5jdGlvbiBWdyh0LGUpe3ZhciBuPUJ5KHQpLGk9dD09PWU/ankodCk6KG4tQnkoZSkpLyhlLXQpLHI9bi9pK3Q7aWYoUnkoaSk8Q3kpcmV0dXJuIEZ3O2Z1bmN0aW9uIG8odCxlKXt2YXIgbj1yLWUsbz1pKnQ7cmV0dXJuW24qankobyksci1uKkJ5KG8pXX1yZXR1cm4gby5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1yLWUsbz1EeSh0LFJ5KG4pKSpHeShuKTtyZXR1cm4gbippPDAmJihvLT1reSpHeSh0KSpHeShuKSksW28vaSxyLUd5KGkpKld5KHQqdCtuKm4pXX0sb31Sdy5pbnZlcnQ9SXcoKGZ1bmN0aW9uKHQpe3JldHVybiB0fSkpLHp3LmludmVydD1mdW5jdGlvbih0LGUpe3JldHVyblt0LDIqenkoRnkoZSkpLUx5XX0sRncuaW52ZXJ0PUZ3O3ZhciBVdz0xLjM0MDI2NCxqdz0tLjA4MTEwNixHdz04OTNlLTYsV3c9LjAwMzc5Nixxdz1XeSgzKS8yO2Z1bmN0aW9uIFl3KHQsZSl7dmFyIG49WHkocXcqankoZSkpLGk9bipuLHI9aSppKmk7cmV0dXJuW3QqQnkobikvKHF3KihVdyszKmp3KmkrciooNypHdys5Kld3KmkpKSksbiooVXcrancqaStyKihHdytXdyppKSldfWZ1bmN0aW9uIFh3KHQsZSl7dmFyIG49QnkoZSksaT1CeSh0KSpuO3JldHVybltuKmp5KHQpL2ksankoZSkvaV19ZnVuY3Rpb24gJHcodCxlKXt2YXIgbj1lKmUsaT1uKm47cmV0dXJuW3QqKC44NzA3LS4xMzE5NzkqbitpKihpKiguMDAzOTcxKm4tLjAwMTUyOSppKS0uMDEzNzkxKSksZSooMS4wMDcyMjYrbiooLjAxNTA4NStpKiguMDI4ODc0Km4tLjA0NDQ3NS0uMDA1OTE2KmkpKSldfWZ1bmN0aW9uIEt3KHQsZSl7cmV0dXJuW0J5KGUpKmp5KHQpLGp5KGUpXX1mdW5jdGlvbiBadyh0LGUpe3ZhciBuPUJ5KGUpLGk9MStCeSh0KSpuO3JldHVybltuKmp5KHQpL2ksankoZSkvaV19ZnVuY3Rpb24gSncodCxlKXtyZXR1cm5bVnkocXkoKEx5K2UpLzIpKSwtdF19ZnVuY3Rpb24gUXcodCxlKXtyZXR1cm4gdC5wYXJlbnQ9PT1lLnBhcmVudD8xOjJ9ZnVuY3Rpb24gdFModCxlKXtyZXR1cm4gdCtlLnh9ZnVuY3Rpb24gZVModCxlKXtyZXR1cm4gTWF0aC5tYXgodCxlLnkpfWZ1bmN0aW9uIG5TKHQpe3ZhciBlPTAsbj10LmNoaWxkcmVuLGk9biYmbi5sZW5ndGg7aWYoaSlmb3IoOy0taT49MDspZSs9bltpXS52YWx1ZTtlbHNlIGU9MTt0LnZhbHVlPWV9ZnVuY3Rpb24gaVModCxlKXt2YXIgbixpLHIsbyxhLHM9bmV3IHNTKHQpLGw9K3QudmFsdWUmJihzLnZhbHVlPXQudmFsdWUpLGM9W3NdO2ZvcihudWxsPT1lJiYoZT1yUyk7bj1jLnBvcCgpOylpZihsJiYobi52YWx1ZT0rbi5kYXRhLnZhbHVlKSwocj1lKG4uZGF0YSkpJiYoYT1yLmxlbmd0aCkpZm9yKG4uY2hpbGRyZW49bmV3IEFycmF5KGEpLG89YS0xO28+PTA7LS1vKWMucHVzaChpPW4uY2hpbGRyZW5bb109bmV3IHNTKHJbb10pKSxpLnBhcmVudD1uLGkuZGVwdGg9bi5kZXB0aCsxO3JldHVybiBzLmVhY2hCZWZvcmUoYVMpfWZ1bmN0aW9uIHJTKHQpe3JldHVybiB0LmNoaWxkcmVufWZ1bmN0aW9uIG9TKHQpe3QuZGF0YT10LmRhdGEuZGF0YX1mdW5jdGlvbiBhUyh0KXt2YXIgZT0wO2Rve3QuaGVpZ2h0PWV9d2hpbGUoKHQ9dC5wYXJlbnQpJiZ0LmhlaWdodDwrK2UpfWZ1bmN0aW9uIHNTKHQpe3RoaXMuZGF0YT10LHRoaXMuZGVwdGg9dGhpcy5oZWlnaHQ9MCx0aGlzLnBhcmVudD1udWxsfVl3LmludmVydD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbixpPWUscj1pKmksbz1yKnIqcixhPTA7YTwxMiYmKG89KHI9KGktPW49KGkqKFV3K2p3KnIrbyooR3crV3cqcikpLWUpLyhVdyszKmp3KnIrbyooNypHdys5Kld3KnIpKSkqaSkqcipyLCEoUnkobik8QXkpKTsrK2EpO3JldHVybltxdyp0KihVdyszKmp3KnIrbyooNypHdys5Kld3KnIpKS9CeShpKSxYeShqeShpKS9xdyldfSxYdy5pbnZlcnQ9SXcoenkpLCR3LmludmVydD1mdW5jdGlvbih0LGUpe3ZhciBuLGk9ZSxyPTI1O2Rve3ZhciBvPWkqaSxhPW8qbztpLT1uPShpKigxLjAwNzIyNitvKiguMDE1MDg1K2EqKC4wMjg4NzQqby0uMDQ0NDc1LS4wMDU5MTYqYSkpKS1lKS8oMS4wMDcyMjYrbyooLjA0NTI1NSthKiguMjU5ODY2Km8tLjMxMTMyNS0uMDA1OTE2KjExKmEpKSl9d2hpbGUoUnkobik+Q3kmJi0tcj4wKTtyZXR1cm5bdC8oLjg3MDcrKG89aSppKSoobyoobypvKm8qKC4wMDM5NzEtLjAwMTUyOSpvKS0uMDEzNzkxKS0uMTMxOTc5KSksaV19LEt3LmludmVydD1JdyhYeSksWncuaW52ZXJ0PUl3KChmdW5jdGlvbih0KXtyZXR1cm4gMip6eSh0KX0pKSxKdy5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm5bLWUsMip6eShGeSh0KSktTHldfSxzUy5wcm90b3R5cGU9aVMucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpzUyxjb3VudDpmdW5jdGlvbiBsUygpe3JldHVybiB0aGlzLmVhY2hBZnRlcihuUyl9LGVhY2g6ZnVuY3Rpb24gY1ModCl7dmFyIGUsbixpLHIsbz10aGlzLGE9W29dO2Rve2ZvcihlPWEucmV2ZXJzZSgpLGE9W107bz1lLnBvcCgpOylpZih0KG8pLG49by5jaGlsZHJlbilmb3IoaT0wLHI9bi5sZW5ndGg7aTxyOysraSlhLnB1c2gobltpXSl9d2hpbGUoYS5sZW5ndGgpO3JldHVybiB0aGlzfSxlYWNoQWZ0ZXI6ZnVuY3Rpb24gdVModCl7Zm9yKHZhciBlLG4saSxyPXRoaXMsbz1bcl0sYT1bXTtyPW8ucG9wKCk7KWlmKGEucHVzaChyKSxlPXIuY2hpbGRyZW4pZm9yKG49MCxpPWUubGVuZ3RoO248aTsrK24pby5wdXNoKGVbbl0pO2Zvcig7cj1hLnBvcCgpOyl0KHIpO3JldHVybiB0aGlzfSxlYWNoQmVmb3JlOmZ1bmN0aW9uIGhTKHQpe2Zvcih2YXIgZSxuLGk9dGhpcyxyPVtpXTtpPXIucG9wKCk7KWlmKHQoaSksZT1pLmNoaWxkcmVuKWZvcihuPWUubGVuZ3RoLTE7bj49MDstLW4pci5wdXNoKGVbbl0pO3JldHVybiB0aGlzfSxzdW06ZnVuY3Rpb24gZFModCl7cmV0dXJuIHRoaXMuZWFjaEFmdGVyKChmdW5jdGlvbihlKXtmb3IodmFyIG49K3QoZS5kYXRhKXx8MCxpPWUuY2hpbGRyZW4scj1pJiZpLmxlbmd0aDstLXI+PTA7KW4rPWlbcl0udmFsdWU7ZS52YWx1ZT1ufSkpfSxzb3J0OmZ1bmN0aW9uIHBTKHQpe3JldHVybiB0aGlzLmVhY2hCZWZvcmUoKGZ1bmN0aW9uKGUpe2UuY2hpbGRyZW4mJmUuY2hpbGRyZW4uc29ydCh0KX0pKX0scGF0aDpmdW5jdGlvbiBmUyh0KXtmb3IodmFyIGU9dGhpcyxuPShmdW5jdGlvbiBpKHQsZSl7aWYodD09PWUpcmV0dXJuIHQ7dmFyIG49dC5hbmNlc3RvcnMoKSxpPWUuYW5jZXN0b3JzKCkscj1udWxsO2Zvcih0PW4ucG9wKCksZT1pLnBvcCgpO3Q9PT1lOylyPXQsdD1uLnBvcCgpLGU9aS5wb3AoKTtyZXR1cm4gcn0pKGUsdCkscj1bZV07ZSE9PW47KXIucHVzaChlPWUucGFyZW50KTtmb3IodmFyIG89ci5sZW5ndGg7dCE9PW47KXIuc3BsaWNlKG8sMCx0KSx0PXQucGFyZW50O3JldHVybiByfSxhbmNlc3RvcnM6ZnVuY3Rpb24gbVMoKXtmb3IodmFyIHQ9dGhpcyxlPVt0XTt0PXQucGFyZW50OyllLnB1c2godCk7cmV0dXJuIGV9LGRlc2NlbmRhbnRzOmZ1bmN0aW9uIGdTKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oZSl7dC5wdXNoKGUpfSkpLHR9LGxlYXZlczpmdW5jdGlvbiBfUygpe3ZhciB0PVtdO3JldHVybiB0aGlzLmVhY2hCZWZvcmUoKGZ1bmN0aW9uKGUpe2UuY2hpbGRyZW58fHQucHVzaChlKX0pKSx0fSxsaW5rczpmdW5jdGlvbiB5Uygpe3ZhciB0PXRoaXMsZT1bXTtyZXR1cm4gdC5lYWNoKChmdW5jdGlvbihuKXtuIT09dCYmZS5wdXNoKHtzb3VyY2U6bi5wYXJlbnQsdGFyZ2V0Om59KX0pKSxlfSxjb3B5OmZ1bmN0aW9uIHZTKCl7cmV0dXJuIGlTKHRoaXMpLmVhY2hCZWZvcmUob1MpfX07dmFyIGJTPUFycmF5LnByb3RvdHlwZS5zbGljZTtmdW5jdGlvbiB4Uyh0KXtmb3IodmFyIGUsbixpPTAscj0odD0oZnVuY3Rpb24gbyh0KXtmb3IodmFyIGUsbixpPXQubGVuZ3RoO2k7KW49TWF0aC5yYW5kb20oKSppLS18MCxlPXRbaV0sdFtpXT10W25dLHRbbl09ZTtyZXR1cm4gdH0pKGJTLmNhbGwodCkpKS5sZW5ndGgsYT1bXTtpPHI7KWU9dFtpXSxuJiZNUyhuLGUpPysraToobj1UUyhhPXdTKGEsZSkpLGk9MCk7cmV0dXJuIG59ZnVuY3Rpb24gd1ModCxlKXt2YXIgbixpO2lmKEVTKGUsdCkpcmV0dXJuW2VdO2ZvcihuPTA7bjx0Lmxlbmd0aDsrK24paWYoU1MoZSx0W25dKSYmRVMoQ1ModFtuXSxlKSx0KSlyZXR1cm5bdFtuXSxlXTtmb3Iobj0wO248dC5sZW5ndGgtMTsrK24pZm9yKGk9bisxO2k8dC5sZW5ndGg7KytpKWlmKFNTKENTKHRbbl0sdFtpXSksZSkmJlNTKENTKHRbbl0sZSksdFtpXSkmJlNTKENTKHRbaV0sZSksdFtuXSkmJkVTKEFTKHRbbl0sdFtpXSxlKSx0KSlyZXR1cm5bdFtuXSx0W2ldLGVdO3Rocm93IG5ldyBFcnJvcn1mdW5jdGlvbiBTUyh0LGUpe3ZhciBuPXQuci1lLnIsaT1lLngtdC54LHI9ZS55LXQueTtyZXR1cm4gbjwwfHxuKm48aSppK3Iqcn1mdW5jdGlvbiBNUyh0LGUpe3ZhciBuPXQuci1lLnIrMWUtNixpPWUueC10Lngscj1lLnktdC55O3JldHVybiBuPjAmJm4qbj5pKmkrcipyfWZ1bmN0aW9uIEVTKHQsZSl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDsrK24paWYoIU1TKHQsZVtuXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gVFModCl7c3dpdGNoKHQubGVuZ3RoKXtjYXNlIDE6cmV0dXJuKGZ1bmN0aW9uIGUodCl7cmV0dXJue3g6dC54LHk6dC55LHI6dC5yfX0pKHRbMF0pO2Nhc2UgMjpyZXR1cm4gQ1ModFswXSx0WzFdKTtjYXNlIDM6cmV0dXJuIEFTKHRbMF0sdFsxXSx0WzJdKX19ZnVuY3Rpb24gQ1ModCxlKXt2YXIgbj10LngsaT10Lnkscj10LnIsbz1lLngsYT1lLnkscz1lLnIsbD1vLW4sYz1hLWksdT1zLXIsaD1NYXRoLnNxcnQobCpsK2MqYyk7cmV0dXJue3g6KG4rbytsL2gqdSkvMix5OihpK2ErYy9oKnUpLzIscjooaCtyK3MpLzJ9fWZ1bmN0aW9uIEFTKHQsZSxuKXt2YXIgaT10Lngscj10Lnksbz10LnIsYT1lLngscz1lLnksbD1lLnIsYz1uLngsdT1uLnksaD1uLnIsZD1pLWEscD1pLWMsZj1yLXMsbT1yLXUsZz1sLW8sXz1oLW8seT1pKmkrcipyLW8qbyx2PXktYSphLXMqcytsKmwsYj15LWMqYy11KnUraCpoLHg9cCpmLWQqbSx3PShmKmItbSp2KS8oMip4KS1pLFM9KG0qZy1mKl8pL3gsTT0ocCp2LWQqYikvKDIqeCktcixFPShkKl8tcCpnKS94LFQ9UypTK0UqRS0xLEM9Mioobyt3KlMrTSpFKSxBPXcqdytNKk0tbypvLGs9LShUPyhDK01hdGguc3FydChDKkMtNCpUKkEpKS8oMipUKTpBL0MpO3JldHVybnt4OmkrdytTKmsseTpyK00rRSprLHI6a319ZnVuY3Rpb24ga1ModCxlLG4pe3ZhciBpLHIsbyxhLHM9dC54LWUueCxsPXQueS1lLnksYz1zKnMrbCpsO2M/KHI9ZS5yK24ucixhPXQucituLnIsKHIqPXIpPihhKj1hKT8oaT0oYythLXIpLygyKmMpLG89TWF0aC5zcXJ0KE1hdGgubWF4KDAsYS9jLWkqaSkpLG4ueD10LngtaSpzLW8qbCxuLnk9dC55LWkqbCtvKnMpOihpPShjK3ItYSkvKDIqYyksbz1NYXRoLnNxcnQoTWF0aC5tYXgoMCxyL2MtaSppKSksbi54PWUueCtpKnMtbypsLG4ueT1lLnkraSpsK28qcykpOihuLng9ZS54K24ucixuLnk9ZS55KX1mdW5jdGlvbiBMUyh0LGUpe3ZhciBuPXQucitlLnItMWUtNixpPWUueC10Lngscj1lLnktdC55O3JldHVybiBuPjAmJm4qbj5pKmkrcipyfWZ1bmN0aW9uIFBTKHQpe3ZhciBlPXQuXyxuPXQubmV4dC5fLGk9ZS5yK24ucixyPShlLngqbi5yK24ueCplLnIpL2ksbz0oZS55Km4ucituLnkqZS5yKS9pO3JldHVybiByKnIrbypvfWZ1bmN0aW9uIE5TKHQpe3RoaXMuXz10LHRoaXMubmV4dD1udWxsLHRoaXMucHJldmlvdXM9bnVsbH1mdW5jdGlvbiBJUyh0KXtpZighKHI9dC5sZW5ndGgpKXJldHVybiAwO3ZhciBlLG4saSxyLG8sYSxzLGwsYyx1LGg7aWYoKGU9dFswXSkueD0wLGUueT0wLCEocj4xKSlyZXR1cm4gZS5yO2lmKGUueD0tKG49dFsxXSkucixuLng9ZS5yLG4ueT0wLCEocj4yKSlyZXR1cm4gZS5yK24ucjtrUyhuLGUsaT10WzJdKSxlPW5ldyBOUyhlKSxuPW5ldyBOUyhuKSxpPW5ldyBOUyhpKSxlLm5leHQ9aS5wcmV2aW91cz1uLG4ubmV4dD1lLnByZXZpb3VzPWksaS5uZXh0PW4ucHJldmlvdXM9ZTt0OmZvcihzPTM7czxyOysrcyl7a1MoZS5fLG4uXyxpPXRbc10pLGk9bmV3IE5TKGkpLGw9bi5uZXh0LGM9ZS5wcmV2aW91cyx1PW4uXy5yLGg9ZS5fLnI7ZG97aWYodTw9aCl7aWYoTFMobC5fLGkuXykpe2UubmV4dD1uPWwsbi5wcmV2aW91cz1lLC0tcztjb250aW51ZSB0fXUrPWwuXy5yLGw9bC5uZXh0fWVsc2V7aWYoTFMoYy5fLGkuXykpeyhlPWMpLm5leHQ9bixuLnByZXZpb3VzPWUsLS1zO2NvbnRpbnVlIHR9aCs9Yy5fLnIsYz1jLnByZXZpb3VzfX13aGlsZShsIT09Yy5uZXh0KTtmb3IoaS5wcmV2aW91cz1lLGkubmV4dD1uLGUubmV4dD1uLnByZXZpb3VzPW49aSxvPVBTKGUpOyhpPWkubmV4dCkhPT1uOykoYT1QUyhpKSk8byYmKGU9aSxvPWEpO249ZS5uZXh0fWZvcihlPVtuLl9dLGk9bjsoaT1pLm5leHQpIT09bjspZS5wdXNoKGkuXyk7Zm9yKGk9eFMoZSkscz0wO3M8cjsrK3MpKGU9dFtzXSkueC09aS54LGUueS09aS55O3JldHVybiBpLnJ9ZnVuY3Rpb24gT1ModCl7cmV0dXJuIG51bGw9PXQ/bnVsbDpSUyh0KX1mdW5jdGlvbiBSUyh0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHR9ZnVuY3Rpb24gelMoKXtyZXR1cm4gMH1mdW5jdGlvbiBEUyh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gQlModCl7cmV0dXJuIE1hdGguc3FydCh0LnZhbHVlKX1mdW5jdGlvbiBIUyh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7ZS5jaGlsZHJlbnx8KGUucj1NYXRoLm1heCgwLCt0KGUpfHwwKSl9fWZ1bmN0aW9uIEZTKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe2lmKGk9bi5jaGlsZHJlbil7dmFyIGkscixvLGE9aS5sZW5ndGgscz10KG4pKmV8fDA7aWYocylmb3Iocj0wO3I8YTsrK3IpaVtyXS5yKz1zO2lmKG89SVMoaSkscylmb3Iocj0wO3I8YTsrK3IpaVtyXS5yLT1zO24ucj1vK3N9fX1mdW5jdGlvbiBWUyh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49ZS5wYXJlbnQ7ZS5yKj10LG4mJihlLng9bi54K3QqZS54LGUueT1uLnkrdCplLnkpfX1mdW5jdGlvbiBVUyh0KXt0LngwPU1hdGgucm91bmQodC54MCksdC55MD1NYXRoLnJvdW5kKHQueTApLHQueDE9TWF0aC5yb3VuZCh0LngxKSx0LnkxPU1hdGgucm91bmQodC55MSl9ZnVuY3Rpb24galModCxlLG4saSxyKXtmb3IodmFyIG8sYT10LmNoaWxkcmVuLHM9LTEsbD1hLmxlbmd0aCxjPXQudmFsdWUmJihpLWUpL3QudmFsdWU7KytzPGw7KShvPWFbc10pLnkwPW4sby55MT1yLG8ueDA9ZSxvLngxPWUrPW8udmFsdWUqY312YXIgR1M9e2RlcHRoOi0xfSxXUz17fTtmdW5jdGlvbiBxUyh0KXtyZXR1cm4gdC5pZH1mdW5jdGlvbiBZUyh0KXtyZXR1cm4gdC5wYXJlbnRJZH1mdW5jdGlvbiBYUyh0LGUpe3JldHVybiB0LnBhcmVudD09PWUucGFyZW50PzE6Mn1mdW5jdGlvbiAkUyh0KXt2YXIgZT10LmNoaWxkcmVuO3JldHVybiBlP2VbMF06dC50fWZ1bmN0aW9uIEtTKHQpe3ZhciBlPXQuY2hpbGRyZW47cmV0dXJuIGU/ZVtlLmxlbmd0aC0xXTp0LnR9ZnVuY3Rpb24gWlModCxlLG4pe3ZhciBpPW4vKGUuaS10LmkpO2UuYy09aSxlLnMrPW4sdC5jKz1pLGUueis9bixlLm0rPW59ZnVuY3Rpb24gSlModCxlLG4pe3JldHVybiB0LmEucGFyZW50PT09ZS5wYXJlbnQ/dC5hOm59ZnVuY3Rpb24gUVModCxlKXt0aGlzLl89dCx0aGlzLnBhcmVudD1udWxsLHRoaXMuY2hpbGRyZW49bnVsbCx0aGlzLkE9bnVsbCx0aGlzLmE9dGhpcyx0aGlzLno9MCx0aGlzLm09MCx0aGlzLmM9MCx0aGlzLnM9MCx0aGlzLnQ9bnVsbCx0aGlzLmk9ZX1mdW5jdGlvbiB0TSh0LGUsbixpLHIpe2Zvcih2YXIgbyxhPXQuY2hpbGRyZW4scz0tMSxsPWEubGVuZ3RoLGM9dC52YWx1ZSYmKHItbikvdC52YWx1ZTsrK3M8bDspKG89YVtzXSkueDA9ZSxvLngxPWksby55MD1uLG8ueTE9bis9by52YWx1ZSpjfVFTLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHNTLnByb3RvdHlwZSk7dmFyIGVNPSgxK01hdGguc3FydCg1KSkvMjtmdW5jdGlvbiBuTSh0LGUsbixpLHIsbyl7Zm9yKHZhciBhLHMsbCxjLHUsaCxkLHAsZixtLGcsXz1bXSx5PWUuY2hpbGRyZW4sdj0wLGI9MCx4PXkubGVuZ3RoLHc9ZS52YWx1ZTt2PHg7KXtsPXItbixjPW8taTtkb3t1PXlbYisrXS52YWx1ZX13aGlsZSghdSYmYjx4KTtmb3IoaD1kPXUsZz11KnUqKG09TWF0aC5tYXgoYy9sLGwvYykvKHcqdCkpLGY9TWF0aC5tYXgoZC9nLGcvaCk7Yjx4OysrYil7aWYodSs9cz15W2JdLnZhbHVlLHM8aCYmKGg9cykscz5kJiYoZD1zKSxnPXUqdSptLChwPU1hdGgubWF4KGQvZyxnL2gpKT5mKXt1LT1zO2JyZWFrfWY9cH1fLnB1c2goYT17dmFsdWU6dSxkaWNlOmw8YyxjaGlsZHJlbjp5LnNsaWNlKHYsYil9KSxhLmRpY2U/alMoYSxuLGkscix3P2krPWMqdS93Om8pOnRNKGEsbixpLHc/bis9bCp1L3c6cixvKSx3LT11LHY9Yn1yZXR1cm4gX312YXIgaU09KGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0LG4saSxyLG8pe25NKGUsdCxuLGkscixvKX1yZXR1cm4gbi5yYXRpbz1mdW5jdGlvbihlKXtyZXR1cm4gdCgoZT0rZSk+MT9lOjEpfSxufSkoZU0pLHJNPShmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCxuLGkscixvKXtpZigoYT10Ll9zcXVhcmlmeSkmJmEucmF0aW89PT1lKWZvcih2YXIgYSxzLGwsYyx1LGg9LTEsZD1hLmxlbmd0aCxwPXQudmFsdWU7KytoPGQ7KXtmb3IobD0ocz1hW2hdKS5jaGlsZHJlbixjPXMudmFsdWU9MCx1PWwubGVuZ3RoO2M8dTsrK2Mpcy52YWx1ZSs9bFtjXS52YWx1ZTtzLmRpY2U/alMocyxuLGkscixpKz0oby1pKSpzLnZhbHVlL3ApOnRNKHMsbixpLG4rPShyLW4pKnMudmFsdWUvcCxvKSxwLT1zLnZhbHVlfWVsc2UgdC5fc3F1YXJpZnk9YT1uTShlLHQsbixpLHIsbyksYS5yYXRpbz1lfXJldHVybiBuLnJhdGlvPWZ1bmN0aW9uKGUpe3JldHVybiB0KChlPStlKT4xP2U6MSl9LG59KShlTSk7ZnVuY3Rpb24gb00odCxlLG4pe3JldHVybihlWzBdLXRbMF0pKihuWzFdLXRbMV0pLShlWzFdLXRbMV0pKihuWzBdLXRbMF0pfWZ1bmN0aW9uIGFNKHQsZSl7cmV0dXJuIHRbMF0tZVswXXx8dFsxXS1lWzFdfWZ1bmN0aW9uIHNNKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxuPVswLDFdLGk9MixyPTI7cjxlOysrcil7Zm9yKDtpPjEmJm9NKHRbbltpLTJdXSx0W25baS0xXV0sdFtyXSk8PTA7KS0taTtuW2krK109cn1yZXR1cm4gbi5zbGljZSgwLGkpfWZ1bmN0aW9uIGxNKCl7cmV0dXJuIE1hdGgucmFuZG9tKCl9dmFyIGNNPShmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCxuKXtyZXR1cm4gdD1udWxsPT10PzA6K3Qsbj1udWxsPT1uPzE6K24sMT09PWFyZ3VtZW50cy5sZW5ndGg/KG49dCx0PTApOm4tPXQsZnVuY3Rpb24oKXtyZXR1cm4gZSgpKm4rdH19cmV0dXJuIG4uc291cmNlPXQsbn0pKGxNKSx1TT0oZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQsbil7dmFyIGkscjtyZXR1cm4gdD1udWxsPT10PzA6K3Qsbj1udWxsPT1uPzE6K24sZnVuY3Rpb24oKXt2YXIgbztpZihudWxsIT1pKW89aSxpPW51bGw7ZWxzZSBkb3tpPTIqZSgpLTEsbz0yKmUoKS0xLHI9aSppK28qb313aGlsZSghcnx8cj4xKTtyZXR1cm4gdCtuKm8qTWF0aC5zcXJ0KC0yKk1hdGgubG9nKHIpL3IpfX1yZXR1cm4gbi5zb3VyY2U9dCxufSkobE0pLGhNPShmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4oKXt2YXIgdD11TS5zb3VyY2UoZSkuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBNYXRoLmV4cCh0KCkpfX1yZXR1cm4gbi5zb3VyY2U9dCxufSkobE0pLGRNPShmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBuPTAsaT0wO2k8dDsrK2kpbis9ZSgpO3JldHVybiBufX1yZXR1cm4gbi5zb3VyY2U9dCxufSkobE0pLHBNPShmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7dmFyIG49ZE0uc291cmNlKGUpKHQpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBuKCkvdH19cmV0dXJuIG4uc291cmNlPXQsbn0pKGxNKSxmTT0oZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybi1NYXRoLmxvZygxLWUoKSkvdH19cmV0dXJuIG4uc291cmNlPXQsbn0pKGxNKTtmdW5jdGlvbiBtTSh0LGUpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOnRoaXMucmFuZ2UodCk7YnJlYWs7ZGVmYXVsdDp0aGlzLnJhbmdlKGUpLmRvbWFpbih0KX1yZXR1cm4gdGhpc31mdW5jdGlvbiBnTSh0LGUpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOnRoaXMuaW50ZXJwb2xhdG9yKHQpO2JyZWFrO2RlZmF1bHQ6dGhpcy5pbnRlcnBvbGF0b3IoZSkuZG9tYWluKHQpfXJldHVybiB0aGlzfXZhciBfTT1BcnJheS5wcm90b3R5cGUseU09X00ubWFwLHZNPV9NLnNsaWNlLGJNPXtuYW1lOiJpbXBsaWNpdCJ9O2Z1bmN0aW9uIHhNKCl7dmFyIHQ9eGcoKSxlPVtdLG49W10saT1iTTtmdW5jdGlvbiByKHIpe3ZhciBvPXIrIiIsYT10LmdldChvKTtpZighYSl7aWYoaSE9PWJNKXJldHVybiBpO3Quc2V0KG8sYT1lLnB1c2gocikpfXJldHVybiBuWyhhLTEpJW4ubGVuZ3RoXX1yZXR1cm4gci5kb21haW49ZnVuY3Rpb24obil7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGUuc2xpY2UoKTtlPVtdLHQ9eGcoKTtmb3IodmFyIGksbyxhPS0xLHM9bi5sZW5ndGg7KythPHM7KXQuaGFzKG89KGk9blthXSkrIiIpfHx0LnNldChvLGUucHVzaChpKSk7cmV0dXJuIHJ9LHIucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dk0uY2FsbCh0KSxyKTpuLnNsaWNlKCl9LHIudW5rbm93bj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LHIpOml9LHIuY29weT1mdW5jdGlvbigpe3JldHVybiB4TShlLG4pLnVua25vd24oaSl9LG1NLmFwcGx5KHIsYXJndW1lbnRzKSxyfWZ1bmN0aW9uIHdNKCl7dmFyIHQsZSxuPXhNKCkudW5rbm93bih2b2lkIDApLGk9bi5kb21haW4scj1uLnJhbmdlLG89WzAsMV0sYT0hMSxzPTAsbD0wLGM9LjU7ZnVuY3Rpb24gdSgpe3ZhciBuPWkoKS5sZW5ndGgsdT1vWzFdPG9bMF0saD1vW3UtMF0sZD1vWzEtdV07dD0oZC1oKS9NYXRoLm1heCgxLG4tcysyKmwpLGEmJih0PU1hdGguZmxvb3IodCkpLGgrPShkLWgtdCoobi1zKSkqYyxlPXQqKDEtcyksYSYmKGg9TWF0aC5yb3VuZChoKSxlPU1hdGgucm91bmQoZSkpO3ZhciBwPVJsKG4pLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGgrdCplfSkpO3JldHVybiByKHU/cC5yZXZlcnNlKCk6cCl9cmV0dXJuIGRlbGV0ZSBuLnVua25vd24sbi5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGkodCksdSgpKTppKCl9LG4ucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89Wyt0WzBdLCt0WzFdXSx1KCkpOm8uc2xpY2UoKX0sbi5yYW5nZVJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBvPVsrdFswXSwrdFsxXV0sYT0hMCx1KCl9LG4uYmFuZHdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIGV9LG4uc3RlcD1mdW5jdGlvbigpe3JldHVybiB0fSxuLnJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSEhdCx1KCkpOmF9LG4ucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1NYXRoLm1pbigxLGw9K3QpLHUoKSk6c30sbi5wYWRkaW5nSW5uZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9TWF0aC5taW4oMSx0KSx1KCkpOnN9LG4ucGFkZGluZ091dGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPSt0LHUoKSk6bH0sbi5hbGlnbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1NYXRoLm1heCgwLE1hdGgubWluKDEsdCkpLHUoKSk6Y30sbi5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHdNKGkoKSxvKS5yb3VuZChhKS5wYWRkaW5nSW5uZXIocykucGFkZGluZ091dGVyKGwpLmFsaWduKGMpfSxtTS5hcHBseSh1KCksYXJndW1lbnRzKX1mdW5jdGlvbiBTTSh0KXt2YXIgZT10LmNvcHk7cmV0dXJuIHQucGFkZGluZz10LnBhZGRpbmdPdXRlcixkZWxldGUgdC5wYWRkaW5nSW5uZXIsZGVsZXRlIHQucGFkZGluZ091dGVyLHQuY29weT1mdW5jdGlvbigpe3JldHVybiBTTShlKCkpfSx0fWZ1bmN0aW9uIE1NKCl7cmV0dXJuIFNNKHdNLmFwcGx5KG51bGwsYXJndW1lbnRzKS5wYWRkaW5nSW5uZXIoMSkpfWZ1bmN0aW9uIEVNKHQpe3JldHVybit0fXZhciBUTT1bMCwxXTtmdW5jdGlvbiBDTSh0KXtyZXR1cm4gdH1mdW5jdGlvbiBBTSh0LGUpe3JldHVybihlLT10PSt0KT9mdW5jdGlvbihuKXtyZXR1cm4obi10KS9lfTooZnVuY3Rpb24gbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19KShpc05hTihlKT9OYU46LjUpfWZ1bmN0aW9uIGtNKHQpe3ZhciBlLG49dFswXSxpPXRbdC5sZW5ndGgtMV07cmV0dXJuIG4+aSYmKGU9bixuPWksaT1lKSxmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgobixNYXRoLm1pbihpLHQpKX19ZnVuY3Rpb24gTE0odCxlLG4pe3ZhciBpPXRbMF0scj10WzFdLG89ZVswXSxhPWVbMV07cmV0dXJuIHI8aT8oaT1BTShyLGkpLG89bihhLG8pKTooaT1BTShpLHIpLG89bihvLGEpKSxmdW5jdGlvbih0KXtyZXR1cm4gbyhpKHQpKX19ZnVuY3Rpb24gUE0odCxlLG4pe3ZhciBpPU1hdGgubWluKHQubGVuZ3RoLGUubGVuZ3RoKS0xLHI9bmV3IEFycmF5KGkpLG89bmV3IEFycmF5KGkpLGE9LTE7Zm9yKHRbaV08dFswXSYmKHQ9dC5zbGljZSgpLnJldmVyc2UoKSxlPWUuc2xpY2UoKS5yZXZlcnNlKCkpOysrYTxpOylyW2FdPUFNKHRbYV0sdFthKzFdKSxvW2FdPW4oZVthXSxlW2ErMV0pO3JldHVybiBmdW5jdGlvbihlKXt2YXIgbj13bCh0LGUsMSxpKS0xO3JldHVybiBvW25dKHJbbl0oZSkpfX1mdW5jdGlvbiBOTSh0LGUpe3JldHVybiBlLmRvbWFpbih0LmRvbWFpbigpKS5yYW5nZSh0LnJhbmdlKCkpLmludGVycG9sYXRlKHQuaW50ZXJwb2xhdGUoKSkuY2xhbXAodC5jbGFtcCgpKS51bmtub3duKHQudW5rbm93bigpKX1mdW5jdGlvbiBJTSgpe3ZhciB0LGUsbixpLHIsbyxhPVRNLHM9VE0sbD1VZCxjPUNNO2Z1bmN0aW9uIHUoKXtyZXR1cm4gaT1NYXRoLm1pbihhLmxlbmd0aCxzLmxlbmd0aCk+Mj9QTTpMTSxyPW89bnVsbCxofWZ1bmN0aW9uIGgoZSl7cmV0dXJuIGlzTmFOKGU9K2UpP246KHJ8fChyPWkoYS5tYXAodCkscyxsKSkpKHQoYyhlKSkpfXJldHVybiBoLmludmVydD1mdW5jdGlvbihuKXtyZXR1cm4gYyhlKChvfHwobz1pKHMsYS5tYXAodCksRGQpKSkobikpKX0saC5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9eU0uY2FsbCh0LEVNKSxjPT09Q018fChjPWtNKGEpKSx1KCkpOmEuc2xpY2UoKX0saC5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz12TS5jYWxsKHQpLHUoKSk6cy5zbGljZSgpfSxoLnJhbmdlUm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHM9dk0uY2FsbCh0KSxsPWpkLHUoKX0saC5jbGFtcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz10P2tNKGEpOkNNLGgpOmMhPT1DTX0saC5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD10LHUoKSk6bH0saC51bmtub3duPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsaCk6bn0sZnVuY3Rpb24obixpKXtyZXR1cm4gdD1uLGU9aSx1KCl9fWZ1bmN0aW9uIE9NKHQsZSl7cmV0dXJuIElNKCkodCxlKX1mdW5jdGlvbiBSTSh0LGUsbixpKXt2YXIgcixvPVZsKHQsZSxuKTtzd2l0Y2goKGk9YXkobnVsbD09aT8iLGYiOmkpKS50eXBlKXtjYXNlInMiOnZhciBhPU1hdGgubWF4KE1hdGguYWJzKHQpLE1hdGguYWJzKGUpKTtyZXR1cm4gbnVsbCE9aS5wcmVjaXNpb258fGlzTmFOKHI9eHkobyxhKSl8fChpLnByZWNpc2lvbj1yKSxteShpLGEpO2Nhc2UiIjpjYXNlImUiOmNhc2UiZyI6Y2FzZSJwIjpjYXNlInIiOm51bGwhPWkucHJlY2lzaW9ufHxpc05hTihyPXd5KG8sTWF0aC5tYXgoTWF0aC5hYnModCksTWF0aC5hYnMoZSkpKSl8fChpLnByZWNpc2lvbj1yLSgiZSI9PT1pLnR5cGUpKTticmVhaztjYXNlImYiOmNhc2UiJSI6bnVsbCE9aS5wcmVjaXNpb258fGlzTmFOKHI9YnkobykpfHwoaS5wcmVjaXNpb249ci0yKigiJSI9PT1pLnR5cGUpKX1yZXR1cm4gZnkoaSl9ZnVuY3Rpb24gek0odCl7dmFyIGU9dC5kb21haW47cmV0dXJuIHQudGlja3M9ZnVuY3Rpb24odCl7dmFyIG49ZSgpO3JldHVybiBIbChuWzBdLG5bbi5sZW5ndGgtMV0sbnVsbD09dD8xMDp0KX0sdC50aWNrRm9ybWF0PWZ1bmN0aW9uKHQsbil7dmFyIGk9ZSgpO3JldHVybiBSTShpWzBdLGlbaS5sZW5ndGgtMV0sbnVsbD09dD8xMDp0LG4pfSx0Lm5pY2U9ZnVuY3Rpb24obil7bnVsbD09biYmKG49MTApO3ZhciBpLHI9ZSgpLG89MCxhPXIubGVuZ3RoLTEscz1yW29dLGw9clthXTtyZXR1cm4gbDxzJiYoaT1zLHM9bCxsPWksaT1vLG89YSxhPWkpLChpPUZsKHMsbCxuKSk+MD9pPUZsKHM9TWF0aC5mbG9vcihzL2kpKmksbD1NYXRoLmNlaWwobC9pKSppLG4pOmk8MCYmKGk9Rmwocz1NYXRoLmNlaWwocyppKS9pLGw9TWF0aC5mbG9vcihsKmkpL2ksbikpLGk+MD8ocltvXT1NYXRoLmZsb29yKHMvaSkqaSxyW2FdPU1hdGguY2VpbChsL2kpKmksZShyKSk6aTwwJiYocltvXT1NYXRoLmNlaWwocyppKS9pLHJbYV09TWF0aC5mbG9vcihsKmkpL2ksZShyKSksdH0sdH1mdW5jdGlvbiBETSgpe3ZhciB0PU9NKENNLENNKTtyZXR1cm4gdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIE5NKHQsRE0oKSl9LG1NLmFwcGx5KHQsYXJndW1lbnRzKSx6TSh0KX1mdW5jdGlvbiBCTSh0LGUpe3ZhciBuLGk9MCxyPSh0PXQuc2xpY2UoKSkubGVuZ3RoLTEsbz10W2ldLGE9dFtyXTtyZXR1cm4gYTxvJiYobj1pLGk9cixyPW4sbj1vLG89YSxhPW4pLHRbaV09ZS5mbG9vcihvKSx0W3JdPWUuY2VpbChhKSx0fWZ1bmN0aW9uIEhNKHQpe3JldHVybiBNYXRoLmxvZyh0KX1mdW5jdGlvbiBGTSh0KXtyZXR1cm4gTWF0aC5leHAodCl9ZnVuY3Rpb24gVk0odCl7cmV0dXJuLU1hdGgubG9nKC10KX1mdW5jdGlvbiBVTSh0KXtyZXR1cm4tTWF0aC5leHAoLXQpfWZ1bmN0aW9uIGpNKHQpe3JldHVybiBpc0Zpbml0ZSh0KT8rKCIxZSIrdCk6dDwwPzA6dH1mdW5jdGlvbiBHTSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuLXQoLWUpfX1mdW5jdGlvbiBXTSh0KXt2YXIgZSxuLGk9dChITSxGTSkscj1pLmRvbWFpbixvPTEwO2Z1bmN0aW9uIGEoKXtyZXR1cm4gZT0oZnVuY3Rpb24gYSh0KXtyZXR1cm4gdD09PU1hdGguRT9NYXRoLmxvZzoxMD09PXQmJk1hdGgubG9nMTB8fDI9PT10JiZNYXRoLmxvZzJ8fCh0PU1hdGgubG9nKHQpLGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLmxvZyhlKS90fSl9KShvKSxuPShmdW5jdGlvbiBzKHQpe3JldHVybiAxMD09PXQ/ak06dD09PU1hdGguRT9NYXRoLmV4cDpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5wb3codCxlKX19KShvKSxyKClbMF08MD8oZT1HTShlKSxuPUdNKG4pLHQoVk0sVU0pKTp0KEhNLEZNKSxpfXJldHVybiBpLmJhc2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89K3QsYSgpKTpvfSxpLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocih0KSxhKCkpOnIoKX0saS50aWNrcz1mdW5jdGlvbih0KXt2YXIgaSxhPXIoKSxzPWFbMF0sbD1hW2EubGVuZ3RoLTFdOyhpPWw8cykmJihkPXMscz1sLGw9ZCk7dmFyIGMsdSxoLGQ9ZShzKSxwPWUobCksZj1udWxsPT10PzEwOit0LG09W107aWYoIShvJTEpJiZwLWQ8Zil7aWYoZD1NYXRoLnJvdW5kKGQpLTEscD1NYXRoLnJvdW5kKHApKzEscz4wKXtmb3IoO2Q8cDsrK2QpZm9yKHU9MSxjPW4oZCk7dTxvOysrdSlpZighKChoPWMqdSk8cykpe2lmKGg+bClicmVhazttLnB1c2goaCl9fWVsc2UgZm9yKDtkPHA7KytkKWZvcih1PW8tMSxjPW4oZCk7dT49MTstLXUpaWYoISgoaD1jKnUpPHMpKXtpZihoPmwpYnJlYWs7bS5wdXNoKGgpfX1lbHNlIG09SGwoZCxwLE1hdGgubWluKHAtZCxmKSkubWFwKG4pO3JldHVybiBpP20ucmV2ZXJzZSgpOm19LGkudGlja0Zvcm1hdD1mdW5jdGlvbih0LHIpe2lmKG51bGw9PXImJihyPTEwPT09bz8iLjBlIjoiLCIpLCJmdW5jdGlvbiIhPXR5cGVvZiByJiYocj1meShyKSksdD09PTEvMClyZXR1cm4gcjtudWxsPT10JiYodD0xMCk7dmFyIGE9TWF0aC5tYXgoMSxvKnQvaS50aWNrcygpLmxlbmd0aCk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBpPXQvbihNYXRoLnJvdW5kKGUodCkpKTtyZXR1cm4gaSpvPG8tLjUmJihpKj1vKSxpPD1hP3IodCk6IiJ9fSxpLm5pY2U9ZnVuY3Rpb24oKXtyZXR1cm4gcihCTShyKCkse2Zsb29yOmZ1bmN0aW9uKHQpe3JldHVybiBuKE1hdGguZmxvb3IoZSh0KSkpfSxjZWlsOmZ1bmN0aW9uKHQpe3JldHVybiBuKE1hdGguY2VpbChlKHQpKSl9fSkpfSxpfWZ1bmN0aW9uIHFNKCl7dmFyIHQ9V00oSU0oKSkuZG9tYWluKFsxLDEwXSk7cmV0dXJuIHQuY29weT1mdW5jdGlvbigpe3JldHVybiBOTSh0LHFNKCkpLmJhc2UodC5iYXNlKCkpfSxtTS5hcHBseSh0LGFyZ3VtZW50cyksdH1mdW5jdGlvbiBZTSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguc2lnbihlKSpNYXRoLmxvZzFwKE1hdGguYWJzKGUvdCkpfX1mdW5jdGlvbiBYTSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguc2lnbihlKSpNYXRoLmV4cG0xKE1hdGguYWJzKGUpKSp0fX1mdW5jdGlvbiAkTSh0KXt2YXIgZT0xLG49dChZTShlKSxYTShlKSk7cmV0dXJuIG4uY29uc3RhbnQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dChZTShlPStuKSxYTShlKSk6ZX0sek0obil9ZnVuY3Rpb24gS00odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlPDA/LU1hdGgucG93KC1lLHQpOk1hdGgucG93KGUsdCl9fWZ1bmN0aW9uIFpNKHQpe3JldHVybiB0PDA/LU1hdGguc3FydCgtdCk6TWF0aC5zcXJ0KHQpfWZ1bmN0aW9uIEpNKHQpe3JldHVybiB0PDA/LXQqdDp0KnR9ZnVuY3Rpb24gUU0odCl7dmFyIGU9dChDTSxDTSksbj0xO2Z1bmN0aW9uIGkoKXtyZXR1cm4gMT09PW4/dChDTSxDTSk6LjU9PT1uP3QoWk0sSk0pOnQoS00obiksS00oMS9uKSl9cmV0dXJuIGUuZXhwb25lbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K3QsaSgpKTpufSx6TShlKX1mdW5jdGlvbiB0RSgpe3ZhciB0PVFNKElNKCkpO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gTk0odCx0RSgpKS5leHBvbmVudCh0LmV4cG9uZW50KCkpfSxtTS5hcHBseSh0LGFyZ3VtZW50cyksdH1mdW5jdGlvbiBlRSgpe3ZhciB0LGU9W10sbj1bXSxpPVtdO2Z1bmN0aW9uIHIoKXt2YXIgdD0wLHI9TWF0aC5tYXgoMSxuLmxlbmd0aCk7Zm9yKGk9bmV3IEFycmF5KHItMSk7Kyt0PHI7KWlbdC0xXT1qbChlLHQvcik7cmV0dXJuIG99ZnVuY3Rpb24gbyhlKXtyZXR1cm4gaXNOYU4oZT0rZSk/dDpuW3dsKGksZSldfXJldHVybiBvLmludmVydEV4dGVudD1mdW5jdGlvbih0KXt2YXIgcj1uLmluZGV4T2YodCk7cmV0dXJuIHI8MD9bTmFOLE5hTl06W3I+MD9pW3ItMV06ZVswXSxyPGkubGVuZ3RoP2lbcl06ZVtlLmxlbmd0aC0xXV19LG8uZG9tYWluPWZ1bmN0aW9uKHQpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBlLnNsaWNlKCk7ZT1bXTtmb3IodmFyIG4saT0wLG89dC5sZW5ndGg7aTxvOysraSludWxsPT0obj10W2ldKXx8aXNOYU4obj0rbil8fGUucHVzaChuKTtyZXR1cm4gZS5zb3J0KHZsKSxyKCl9LG8ucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dk0uY2FsbCh0KSxyKCkpOm4uc2xpY2UoKX0sby51bmtub3duPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUsbyk6dH0sby5xdWFudGlsZXM9ZnVuY3Rpb24oKXtyZXR1cm4gaS5zbGljZSgpfSxvLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gZUUoKS5kb21haW4oZSkucmFuZ2UobikudW5rbm93bih0KX0sbU0uYXBwbHkobyxhcmd1bWVudHMpfWZ1bmN0aW9uIG5FKCl7dmFyIHQsZT0wLG49MSxpPTEscj1bLjVdLG89WzAsMV07ZnVuY3Rpb24gYShlKXtyZXR1cm4gZTw9ZT9vW3dsKHIsZSwwLGkpXTp0fWZ1bmN0aW9uIHMoKXt2YXIgdD0tMTtmb3Iocj1uZXcgQXJyYXkoaSk7Kyt0PGk7KXJbdF09KCh0KzEpKm4tKHQtaSkqZSkvKGkrMSk7cmV0dXJuIGF9cmV0dXJuIGEuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0WzBdLG49K3RbMV0scygpKTpbZSxuXX0sYS5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0obz12TS5jYWxsKHQpKS5sZW5ndGgtMSxzKCkpOm8uc2xpY2UoKX0sYS5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24odCl7dmFyIGE9by5pbmRleE9mKHQpO3JldHVybiBhPDA/W05hTixOYU5dOmE8MT9bZSxyWzBdXTphPj1pP1tyW2ktMV0sbl06W3JbYS0xXSxyW2FdXX0sYS51bmtub3duPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUsYSk6YX0sYS50aHJlc2hvbGRzPWZ1bmN0aW9uKCl7cmV0dXJuIHIuc2xpY2UoKX0sYS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIG5FKCkuZG9tYWluKFtlLG5dKS5yYW5nZShvKS51bmtub3duKHQpfSxtTS5hcHBseSh6TShhKSxhcmd1bWVudHMpfXZhciBpRT1uZXcgRGF0ZSxyRT1uZXcgRGF0ZTtmdW5jdGlvbiBvRSh0LGUsbixpKXtmdW5jdGlvbiByKGUpe3JldHVybiB0KGU9MD09PWFyZ3VtZW50cy5sZW5ndGg/bmV3IERhdGU6bmV3IERhdGUoK2UpKSxlfXJldHVybiByLmZsb29yPWZ1bmN0aW9uKGUpe3JldHVybiB0KGU9bmV3IERhdGUoK2UpKSxlfSxyLmNlaWw9ZnVuY3Rpb24obil7cmV0dXJuIHQobj1uZXcgRGF0ZShuLTEpKSxlKG4sMSksdChuKSxufSxyLnJvdW5kPWZ1bmN0aW9uKHQpe3ZhciBlPXIodCksbj1yLmNlaWwodCk7cmV0dXJuIHQtZTxuLXQ/ZTpufSxyLm9mZnNldD1mdW5jdGlvbih0LG4pe3JldHVybiBlKHQ9bmV3IERhdGUoK3QpLG51bGw9PW4/MTpNYXRoLmZsb29yKG4pKSx0fSxyLnJhbmdlPWZ1bmN0aW9uKG4saSxvKXt2YXIgYSxzPVtdO2lmKG49ci5jZWlsKG4pLG89bnVsbD09bz8xOk1hdGguZmxvb3IobyksIShuPGkmJm8+MCkpcmV0dXJuIHM7ZG97cy5wdXNoKGE9bmV3IERhdGUoK24pKSxlKG4sbyksdChuKX13aGlsZShhPG4mJm48aSk7cmV0dXJuIHN9LHIuZmlsdGVyPWZ1bmN0aW9uKG4pe3JldHVybiBvRSgoZnVuY3Rpb24oZSl7aWYoZT49ZSlmb3IoO3QoZSksIW4oZSk7KWUuc2V0VGltZShlLTEpfSksKGZ1bmN0aW9uKHQsaSl7aWYodD49dClpZihpPDApZm9yKDsrK2k8PTA7KWZvcig7ZSh0LC0xKSwhbih0KTspO2Vsc2UgZm9yKDstLWk+PTA7KWZvcig7ZSh0LDEpLCFuKHQpOyk7fSkpfSxuJiYoci5jb3VudD1mdW5jdGlvbihlLGkpe3JldHVybiBpRS5zZXRUaW1lKCtlKSxyRS5zZXRUaW1lKCtpKSx0KGlFKSx0KHJFKSxNYXRoLmZsb29yKG4oaUUsckUpKX0sci5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLmZsb29yKHQpLGlzRmluaXRlKHQpJiZ0PjA/dD4xP3IuZmlsdGVyKGk/ZnVuY3Rpb24oZSl7cmV0dXJuIGkoZSkldD09MH06ZnVuY3Rpb24oZSl7cmV0dXJuIHIuY291bnQoMCxlKSV0PT0wfSk6cjpudWxsfSkscn12YXIgYUU9b0UoKGZ1bmN0aW9uKCl7fSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0K2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUtdH0pKTthRS5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLmZsb29yKHQpLGlzRmluaXRlKHQpJiZ0PjA/dD4xP29FKChmdW5jdGlvbihlKXtlLnNldFRpbWUoTWF0aC5mbG9vcihlL3QpKnQpfSksKGZ1bmN0aW9uKGUsbil7ZS5zZXRUaW1lKCtlK24qdCl9KSwoZnVuY3Rpb24oZSxuKXtyZXR1cm4obi1lKS90fSkpOmFFOm51bGx9O3ZhciBzRT1hRS5yYW5nZSxsRT0xZTMsY0U9NmU0LHVFPTM2ZTUsaEU9ODY0ZTUsZEU9NjA0OGU1LHBFPW9FKChmdW5jdGlvbih0KXt0LnNldFRpbWUodC10LmdldE1pbGxpc2Vjb25kcygpKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCtlKmxFKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQpL2xFfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ1NlY29uZHMoKX0pKSxmRT1wRS5yYW5nZSxtRT1vRSgoZnVuY3Rpb24odCl7dC5zZXRUaW1lKHQtdC5nZXRNaWxsaXNlY29uZHMoKS10LmdldFNlY29uZHMoKSpsRSl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrZSpjRSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS9jRX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNaW51dGVzKCl9KSksZ0U9bUUucmFuZ2UsX0U9b0UoKGZ1bmN0aW9uKHQpe3Quc2V0VGltZSh0LXQuZ2V0TWlsbGlzZWNvbmRzKCktdC5nZXRTZWNvbmRzKCkqbEUtdC5nZXRNaW51dGVzKCkqY0UpfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0K2UqdUUpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvdUV9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0SG91cnMoKX0pKSx5RT1fRS5yYW5nZSx2RT1vRSgoZnVuY3Rpb24odCl7dC5zZXRIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0RGF0ZSh0LmdldERhdGUoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQtKGUuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKmNFKS9oRX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXREYXRlKCktMX0pKSxiRT12RS5yYW5nZTtmdW5jdGlvbiB4RSh0KXtyZXR1cm4gb0UoKGZ1bmN0aW9uKGUpe2Uuc2V0RGF0ZShlLmdldERhdGUoKS0oZS5nZXREYXkoKSs3LXQpJTcpLGUuc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldERhdGUodC5nZXREYXRlKCkrNyplKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQtKGUuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKmNFKS9kRX0pKX12YXIgd0U9eEUoMCksU0U9eEUoMSksTUU9eEUoMiksRUU9eEUoMyksVEU9eEUoNCksQ0U9eEUoNSksQUU9eEUoNiksa0U9d0UucmFuZ2UsTEU9U0UucmFuZ2UsUEU9TUUucmFuZ2UsTkU9RUUucmFuZ2UsSUU9VEUucmFuZ2UsT0U9Q0UucmFuZ2UsUkU9QUUucmFuZ2UsekU9b0UoKGZ1bmN0aW9uKHQpe3Quc2V0RGF0ZSgxKSx0LnNldEhvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRNb250aCh0LmdldE1vbnRoKCkrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXRNb250aCgpLXQuZ2V0TW9udGgoKSsxMiooZS5nZXRGdWxsWWVhcigpLXQuZ2V0RnVsbFllYXIoKSl9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0TW9udGgoKX0pKSxERT16RS5yYW5nZSxCRT1vRSgoZnVuY3Rpb24odCl7dC5zZXRNb250aCgwLDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldEZ1bGxZZWFyKHQuZ2V0RnVsbFllYXIoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldEZ1bGxZZWFyKCktdC5nZXRGdWxsWWVhcigpfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEZ1bGxZZWFyKCl9KSk7QkUuZXZlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIGlzRmluaXRlKHQ9TWF0aC5mbG9vcih0KSkmJnQ+MD9vRSgoZnVuY3Rpb24oZSl7ZS5zZXRGdWxsWWVhcihNYXRoLmZsb29yKGUuZ2V0RnVsbFllYXIoKS90KSp0KSxlLnNldE1vbnRoKDAsMSksZS5zZXRIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbihlLG4pe2Uuc2V0RnVsbFllYXIoZS5nZXRGdWxsWWVhcigpK24qdCl9KSk6bnVsbH07dmFyIEhFPUJFLnJhbmdlLEZFPW9FKChmdW5jdGlvbih0KXt0LnNldFVUQ1NlY29uZHMoMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCtlKmNFKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQpL2NFfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ01pbnV0ZXMoKX0pKSxWRT1GRS5yYW5nZSxVRT1vRSgoZnVuY3Rpb24odCl7dC5zZXRVVENNaW51dGVzKDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCtlKnVFKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQpL3VFfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0hvdXJzKCl9KSksakU9VUUucmFuZ2UsR0U9b0UoKGZ1bmN0aW9uKHQpe3Quc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFVUQ0RhdGUodC5nZXRVVENEYXRlKCkrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS9oRX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENEYXRlKCktMX0pKSxXRT1HRS5yYW5nZTtmdW5jdGlvbiBxRSh0KXtyZXR1cm4gb0UoKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDRGF0ZShlLmdldFVUQ0RhdGUoKS0oZS5nZXRVVENEYXkoKSs3LXQpJTcpLGUuc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFVUQ0RhdGUodC5nZXRVVENEYXRlKCkrNyplKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQpL2RFfSkpfXZhciBZRT1xRSgwKSxYRT1xRSgxKSwkRT1xRSgyKSxLRT1xRSgzKSxaRT1xRSg0KSxKRT1xRSg1KSxRRT1xRSg2KSx0VD1ZRS5yYW5nZSxlVD1YRS5yYW5nZSxuVD0kRS5yYW5nZSxpVD1LRS5yYW5nZSxyVD1aRS5yYW5nZSxvVD1KRS5yYW5nZSxhVD1RRS5yYW5nZSxzVD1vRSgoZnVuY3Rpb24odCl7dC5zZXRVVENEYXRlKDEpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFVUQ01vbnRoKHQuZ2V0VVRDTW9udGgoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldFVUQ01vbnRoKCktdC5nZXRVVENNb250aCgpKzEyKihlLmdldFVUQ0Z1bGxZZWFyKCktdC5nZXRVVENGdWxsWWVhcigpKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENNb250aCgpfSkpLGxUPXNULnJhbmdlLGNUPW9FKChmdW5jdGlvbih0KXt0LnNldFVUQ01vbnRoKDAsMSksdC5zZXRVVENIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VVRDRnVsbFllYXIodC5nZXRVVENGdWxsWWVhcigpK2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZ2V0VVRDRnVsbFllYXIoKS10LmdldFVUQ0Z1bGxZZWFyKCl9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDRnVsbFllYXIoKX0pKTtjVC5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gaXNGaW5pdGUodD1NYXRoLmZsb29yKHQpKSYmdD4wP29FKChmdW5jdGlvbihlKXtlLnNldFVUQ0Z1bGxZZWFyKE1hdGguZmxvb3IoZS5nZXRVVENGdWxsWWVhcigpL3QpKnQpLGUuc2V0VVRDTW9udGgoMCwxKSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKGUsbil7ZS5zZXRVVENGdWxsWWVhcihlLmdldFVUQ0Z1bGxZZWFyKCkrbip0KX0pKTpudWxsfTt2YXIgdVQ9Y1QucmFuZ2U7ZnVuY3Rpb24gaFQodCl7aWYoMDw9dC55JiZ0Lnk8MTAwKXt2YXIgZT1uZXcgRGF0ZSgtMSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCk7cmV0dXJuIGUuc2V0RnVsbFllYXIodC55KSxlfXJldHVybiBuZXcgRGF0ZSh0LnksdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpfWZ1bmN0aW9uIGRUKHQpe2lmKDA8PXQueSYmdC55PDEwMCl7dmFyIGU9bmV3IERhdGUoRGF0ZS5VVEMoLTEsdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpKTtyZXR1cm4gZS5zZXRVVENGdWxsWWVhcih0LnkpLGV9cmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKHQueSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCkpfWZ1bmN0aW9uIHBUKHQsZSxuKXtyZXR1cm57eTp0LG06ZSxkOm4sSDowLE06MCxTOjAsTDowfX1mdW5jdGlvbiBmVCh0KXt2YXIgZT10LmRhdGVUaW1lLG49dC5kYXRlLGk9dC50aW1lLHI9dC5wZXJpb2RzLG89dC5kYXlzLGE9dC5zaG9ydERheXMscz10Lm1vbnRocyxsPXQuc2hvcnRNb250aHMsYz1UVChyKSx1PUNUKHIpLGg9VFQobyksZD1DVChvKSxwPVRUKGEpLGY9Q1QoYSksbT1UVChzKSxnPUNUKHMpLF89VFQobCkseT1DVChsKSx2PXthOmZ1bmN0aW9uIGIodCl7cmV0dXJuIGFbdC5nZXREYXkoKV19LEE6ZnVuY3Rpb24geCh0KXtyZXR1cm4gb1t0LmdldERheSgpXX0sYjpmdW5jdGlvbiB3KHQpe3JldHVybiBsW3QuZ2V0TW9udGgoKV19LEI6ZnVuY3Rpb24gUyh0KXtyZXR1cm4gc1t0LmdldE1vbnRoKCldfSxjOm51bGwsZDpYVCxlOlhULGY6UVQsZzp1QyxHOmRDLEg6JFQsSTpLVCxqOlpULEw6SlQsbTp0QyxNOmVDLHA6ZnVuY3Rpb24gTSh0KXtyZXR1cm4gclsrKHQuZ2V0SG91cnMoKT49MTIpXX0scTpmdW5jdGlvbiBFKHQpe3JldHVybiAxK35+KHQuZ2V0TW9udGgoKS8zKX0sUTpSQyxzOnpDLFM6bkMsdTppQyxVOnJDLFY6YUMsdzpzQyxXOmxDLHg6bnVsbCxYOm51bGwseTpjQyxZOmhDLFo6cEMsIiUiOk9DfSxUPXthOmZ1bmN0aW9uIEModCl7cmV0dXJuIGFbdC5nZXRVVENEYXkoKV19LEE6ZnVuY3Rpb24gQSh0KXtyZXR1cm4gb1t0LmdldFVUQ0RheSgpXX0sYjpmdW5jdGlvbiBrKHQpe3JldHVybiBsW3QuZ2V0VVRDTW9udGgoKV19LEI6ZnVuY3Rpb24gTCh0KXtyZXR1cm4gc1t0LmdldFVUQ01vbnRoKCldfSxjOm51bGwsZDpmQyxlOmZDLGY6dkMsZzpMQyxHOk5DLEg6bUMsSTpnQyxqOl9DLEw6eUMsbTpiQyxNOnhDLHA6ZnVuY3Rpb24gUCh0KXtyZXR1cm4gclsrKHQuZ2V0VVRDSG91cnMoKT49MTIpXX0scTpmdW5jdGlvbiBOKHQpe3JldHVybiAxK35+KHQuZ2V0VVRDTW9udGgoKS8zKX0sUTpSQyxzOnpDLFM6d0MsdTpTQyxVOk1DLFY6VEMsdzpDQyxXOkFDLHg6bnVsbCxYOm51bGwseTprQyxZOlBDLFo6SUMsIiUiOk9DfSxJPXthOmZ1bmN0aW9uIE8odCxlLG4pe3ZhciBpPXAuZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gaT8odC53PWZbaVswXS50b0xvd2VyQ2FzZSgpXSxuK2lbMF0ubGVuZ3RoKTotMX0sQTpmdW5jdGlvbiBSKHQsZSxuKXt2YXIgaT1oLmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIGk/KHQudz1kW2lbMF0udG9Mb3dlckNhc2UoKV0sbitpWzBdLmxlbmd0aCk6LTF9LGI6ZnVuY3Rpb24geih0LGUsbil7dmFyIGk9Xy5leGVjKGUuc2xpY2UobikpO3JldHVybiBpPyh0Lm09eVtpWzBdLnRvTG93ZXJDYXNlKCldLG4raVswXS5sZW5ndGgpOi0xfSxCOmZ1bmN0aW9uIEQodCxlLG4pe3ZhciBpPW0uZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gaT8odC5tPWdbaVswXS50b0xvd2VyQ2FzZSgpXSxuK2lbMF0ubGVuZ3RoKTotMX0sYzpmdW5jdGlvbiBCKHQsbixpKXtyZXR1cm4gRyh0LGUsbixpKX0sZDpCVCxlOkJULGY6R1QsZzpPVCxHOklULEg6RlQsSTpGVCxqOkhULEw6alQsbTpEVCxNOlZULHA6ZnVuY3Rpb24gSCh0LGUsbil7dmFyIGk9Yy5leGVjKGUuc2xpY2UobikpO3JldHVybiBpPyh0LnA9dVtpWzBdLnRvTG93ZXJDYXNlKCldLG4raVswXS5sZW5ndGgpOi0xfSxxOnpULFE6cVQsczpZVCxTOlVULHU6a1QsVTpMVCxWOlBULHc6QVQsVzpOVCx4OmZ1bmN0aW9uIEYodCxlLGkpe3JldHVybiBHKHQsbixlLGkpfSxYOmZ1bmN0aW9uIFYodCxlLG4pe3JldHVybiBHKHQsaSxlLG4pfSx5Ok9ULFk6SVQsWjpSVCwiJSI6V1R9O2Z1bmN0aW9uIFUodCxlKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGkscixvLGE9W10scz0tMSxsPTAsYz10Lmxlbmd0aDtmb3IobiBpbnN0YW5jZW9mIERhdGV8fChuPW5ldyBEYXRlKCtuKSk7KytzPGM7KTM3PT09dC5jaGFyQ29kZUF0KHMpJiYoYS5wdXNoKHQuc2xpY2UobCxzKSksbnVsbCE9KHI9YlRbaT10LmNoYXJBdCgrK3MpXSk/aT10LmNoYXJBdCgrK3MpOnI9ImUiPT09aT8iICI6IjAiLChvPWVbaV0pJiYoaT1vKG4scikpLGEucHVzaChpKSxsPXMrMSk7cmV0dXJuIGEucHVzaCh0LnNsaWNlKGwscykpLGEuam9pbigiIil9fWZ1bmN0aW9uIGoodCxlKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGkscixvPXBUKDE5MDAsdm9pZCAwLDEpO2lmKEcobyx0LG4rPSIiLDApIT1uLmxlbmd0aClyZXR1cm4gbnVsbDtpZigiUSJpbiBvKXJldHVybiBuZXcgRGF0ZShvLlEpO2lmKCJzImluIG8pcmV0dXJuIG5ldyBEYXRlKDFlMypvLnMrKCJMImluIG8/by5MOjApKTtpZihlJiYhKCJaImluIG8pJiYoby5aPTApLCJwImluIG8mJihvLkg9by5IJTEyKzEyKm8ucCksdm9pZCAwPT09by5tJiYoby5tPSJxImluIG8/by5xOjApLCJWImluIG8pe2lmKG8uVjwxfHxvLlY+NTMpcmV0dXJuIG51bGw7InciaW4gb3x8KG8udz0xKSwiWiJpbiBvPyhyPShpPWRUKHBUKG8ueSwwLDEpKSkuZ2V0VVRDRGF5KCksaT1yPjR8fDA9PT1yP1hFLmNlaWwoaSk6WEUoaSksaT1HRS5vZmZzZXQoaSw3KihvLlYtMSkpLG8ueT1pLmdldFVUQ0Z1bGxZZWFyKCksby5tPWkuZ2V0VVRDTW9udGgoKSxvLmQ9aS5nZXRVVENEYXRlKCkrKG8udys2KSU3KToocj0oaT1oVChwVChvLnksMCwxKSkpLmdldERheSgpLGk9cj40fHwwPT09cj9TRS5jZWlsKGkpOlNFKGkpLGk9dkUub2Zmc2V0KGksNyooby5WLTEpKSxvLnk9aS5nZXRGdWxsWWVhcigpLG8ubT1pLmdldE1vbnRoKCksby5kPWkuZ2V0RGF0ZSgpKyhvLncrNiklNyl9ZWxzZSgiVyJpbiBvfHwiVSJpbiBvKSYmKCJ3ImluIG98fChvLnc9InUiaW4gbz9vLnUlNzoiVyJpbiBvPzE6MCkscj0iWiJpbiBvP2RUKHBUKG8ueSwwLDEpKS5nZXRVVENEYXkoKTpoVChwVChvLnksMCwxKSkuZ2V0RGF5KCksby5tPTAsby5kPSJXImluIG8/KG8udys2KSU3Kzcqby5XLShyKzUpJTc6by53Kzcqby5VLShyKzYpJTcpO3JldHVybiJaImluIG8/KG8uSCs9by5aLzEwMHwwLG8uTSs9by5aJTEwMCxkVChvKSk6aFQobyl9fWZ1bmN0aW9uIEcodCxlLG4saSl7Zm9yKHZhciByLG8sYT0wLHM9ZS5sZW5ndGgsbD1uLmxlbmd0aDthPHM7KXtpZihpPj1sKXJldHVybi0xO2lmKDM3PT09KHI9ZS5jaGFyQ29kZUF0KGErKykpKXtpZihyPWUuY2hhckF0KGErKyksIShvPUlbciBpbiBiVD9lLmNoYXJBdChhKyspOnJdKXx8KGk9byh0LG4saSkpPDApcmV0dXJuLTF9ZWxzZSBpZihyIT1uLmNoYXJDb2RlQXQoaSsrKSlyZXR1cm4tMX1yZXR1cm4gaX1yZXR1cm4gdi54PVUobix2KSx2Llg9VShpLHYpLHYuYz1VKGUsdiksVC54PVUobixUKSxULlg9VShpLFQpLFQuYz1VKGUsVCkse2Zvcm1hdDpmdW5jdGlvbih0KXt2YXIgZT1VKHQrPSIiLHYpO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGV9LHBhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPWoodCs9IiIsITEpO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGV9LHV0Y0Zvcm1hdDpmdW5jdGlvbih0KXt2YXIgZT1VKHQrPSIiLFQpO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGV9LHV0Y1BhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPWoodCs9IiIsITApO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGV9fX12YXIgbVQsZ1QsX1QseVQsdlQsYlQ9eyItIjoiIixfOiIgIiwwOiIwIn0seFQ9L15ccypcZCsvLHdUPS9eJS8sU1Q9L1tcXF4kKis/fFtcXSgpLnt9XS9nO2Z1bmN0aW9uIE1UKHQsZSxuKXt2YXIgaT10PDA/Ii0iOiIiLHI9KGk/LXQ6dCkrIiIsbz1yLmxlbmd0aDtyZXR1cm4gaSsobzxuP25ldyBBcnJheShuLW8rMSkuam9pbihlKStyOnIpfWZ1bmN0aW9uIEVUKHQpe3JldHVybiB0LnJlcGxhY2UoU1QsIlxcJCYiKX1mdW5jdGlvbiBUVCh0KXtyZXR1cm4gbmV3IFJlZ0V4cCgiXig/OiIrdC5tYXAoRVQpLmpvaW4oInwiKSsiKSIsImkiKX1mdW5jdGlvbiBDVCh0KXtmb3IodmFyIGU9e30sbj0tMSxpPXQubGVuZ3RoOysrbjxpOyllW3Rbbl0udG9Mb3dlckNhc2UoKV09bjtyZXR1cm4gZX1mdW5jdGlvbiBBVCh0LGUsbil7dmFyIGk9eFQuZXhlYyhlLnNsaWNlKG4sbisxKSk7cmV0dXJuIGk/KHQudz0raVswXSxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBrVCh0LGUsbil7dmFyIGk9eFQuZXhlYyhlLnNsaWNlKG4sbisxKSk7cmV0dXJuIGk/KHQudT0raVswXSxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBMVCh0LGUsbil7dmFyIGk9eFQuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIGk/KHQuVT0raVswXSxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBQVCh0LGUsbil7dmFyIGk9eFQuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIGk/KHQuVj0raVswXSxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBOVCh0LGUsbil7dmFyIGk9eFQuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIGk/KHQuVz0raVswXSxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBJVCh0LGUsbil7dmFyIGk9eFQuZXhlYyhlLnNsaWNlKG4sbis0KSk7cmV0dXJuIGk/KHQueT0raVswXSxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBPVCh0LGUsbil7dmFyIGk9eFQuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIGk/KHQueT0raVswXSsoK2lbMF0+Njg/MTkwMDoyZTMpLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFJUKHQsZSxuKXt2YXIgaT0vXihaKXwoWystXVxkXGQpKD86Oj8oXGRcZCkpPy8uZXhlYyhlLnNsaWNlKG4sbis2KSk7cmV0dXJuIGk/KHQuWj1pWzFdPzA6LShpWzJdKyhpWzNdfHwiMDAiKSksbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gelQodCxlLG4pe3ZhciBpPXhULmV4ZWMoZS5zbGljZShuLG4rMSkpO3JldHVybiBpPyh0LnE9MyppWzBdLTMsbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gRFQodCxlLG4pe3ZhciBpPXhULmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiBpPyh0Lm09aVswXS0xLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEJUKHQsZSxuKXt2YXIgaT14VC5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gaT8odC5kPStpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEhUKHQsZSxuKXt2YXIgaT14VC5leGVjKGUuc2xpY2UobixuKzMpKTtyZXR1cm4gaT8odC5tPTAsdC5kPStpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEZUKHQsZSxuKXt2YXIgaT14VC5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gaT8odC5IPStpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFZUKHQsZSxuKXt2YXIgaT14VC5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gaT8odC5NPStpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFVUKHQsZSxuKXt2YXIgaT14VC5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gaT8odC5TPStpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGpUKHQsZSxuKXt2YXIgaT14VC5leGVjKGUuc2xpY2UobixuKzMpKTtyZXR1cm4gaT8odC5MPStpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEdUKHQsZSxuKXt2YXIgaT14VC5leGVjKGUuc2xpY2UobixuKzYpKTtyZXR1cm4gaT8odC5MPU1hdGguZmxvb3IoaVswXS8xZTMpLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFdUKHQsZSxuKXt2YXIgaT13VC5leGVjKGUuc2xpY2UobixuKzEpKTtyZXR1cm4gaT9uK2lbMF0ubGVuZ3RoOi0xfWZ1bmN0aW9uIHFUKHQsZSxuKXt2YXIgaT14VC5leGVjKGUuc2xpY2UobikpO3JldHVybiBpPyh0LlE9K2lbMF0sbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gWVQodCxlLG4pe3ZhciBpPXhULmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIGk/KHQucz0raVswXSxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBYVCh0LGUpe3JldHVybiBNVCh0LmdldERhdGUoKSxlLDIpfWZ1bmN0aW9uICRUKHQsZSl7cmV0dXJuIE1UKHQuZ2V0SG91cnMoKSxlLDIpfWZ1bmN0aW9uIEtUKHQsZSl7cmV0dXJuIE1UKHQuZ2V0SG91cnMoKSUxMnx8MTIsZSwyKX1mdW5jdGlvbiBaVCh0LGUpe3JldHVybiBNVCgxK3ZFLmNvdW50KEJFKHQpLHQpLGUsMyl9ZnVuY3Rpb24gSlQodCxlKXtyZXR1cm4gTVQodC5nZXRNaWxsaXNlY29uZHMoKSxlLDMpfWZ1bmN0aW9uIFFUKHQsZSl7cmV0dXJuIEpUKHQsZSkrIjAwMCJ9ZnVuY3Rpb24gdEModCxlKXtyZXR1cm4gTVQodC5nZXRNb250aCgpKzEsZSwyKX1mdW5jdGlvbiBlQyh0LGUpe3JldHVybiBNVCh0LmdldE1pbnV0ZXMoKSxlLDIpfWZ1bmN0aW9uIG5DKHQsZSl7cmV0dXJuIE1UKHQuZ2V0U2Vjb25kcygpLGUsMil9ZnVuY3Rpb24gaUModCl7dmFyIGU9dC5nZXREYXkoKTtyZXR1cm4gMD09PWU/NzplfWZ1bmN0aW9uIHJDKHQsZSl7cmV0dXJuIE1UKHdFLmNvdW50KEJFKHQpLTEsdCksZSwyKX1mdW5jdGlvbiBvQyh0KXt2YXIgZT10LmdldERheSgpO3JldHVybiBlPj00fHwwPT09ZT9URSh0KTpURS5jZWlsKHQpfWZ1bmN0aW9uIGFDKHQsZSl7cmV0dXJuIHQ9b0ModCksTVQoVEUuY291bnQoQkUodCksdCkrKDQ9PT1CRSh0KS5nZXREYXkoKSksZSwyKX1mdW5jdGlvbiBzQyh0KXtyZXR1cm4gdC5nZXREYXkoKX1mdW5jdGlvbiBsQyh0LGUpe3JldHVybiBNVChTRS5jb3VudChCRSh0KS0xLHQpLGUsMil9ZnVuY3Rpb24gY0ModCxlKXtyZXR1cm4gTVQodC5nZXRGdWxsWWVhcigpJTEwMCxlLDIpfWZ1bmN0aW9uIHVDKHQsZSl7cmV0dXJuIE1UKCh0PW9DKHQpKS5nZXRGdWxsWWVhcigpJTEwMCxlLDIpfWZ1bmN0aW9uIGhDKHQsZSl7cmV0dXJuIE1UKHQuZ2V0RnVsbFllYXIoKSUxZTQsZSw0KX1mdW5jdGlvbiBkQyh0LGUpe3ZhciBuPXQuZ2V0RGF5KCk7cmV0dXJuIE1UKCh0PW4+PTR8fDA9PT1uP1RFKHQpOlRFLmNlaWwodCkpLmdldEZ1bGxZZWFyKCklMWU0LGUsNCl9ZnVuY3Rpb24gcEModCl7dmFyIGU9dC5nZXRUaW1lem9uZU9mZnNldCgpO3JldHVybihlPjA/Ii0iOihlKj0tMSwiKyIpKStNVChlLzYwfDAsIjAiLDIpK01UKGUlNjAsIjAiLDIpfWZ1bmN0aW9uIGZDKHQsZSl7cmV0dXJuIE1UKHQuZ2V0VVRDRGF0ZSgpLGUsMil9ZnVuY3Rpb24gbUModCxlKXtyZXR1cm4gTVQodC5nZXRVVENIb3VycygpLGUsMil9ZnVuY3Rpb24gZ0ModCxlKXtyZXR1cm4gTVQodC5nZXRVVENIb3VycygpJTEyfHwxMixlLDIpfWZ1bmN0aW9uIF9DKHQsZSl7cmV0dXJuIE1UKDErR0UuY291bnQoY1QodCksdCksZSwzKX1mdW5jdGlvbiB5Qyh0LGUpe3JldHVybiBNVCh0LmdldFVUQ01pbGxpc2Vjb25kcygpLGUsMyl9ZnVuY3Rpb24gdkModCxlKXtyZXR1cm4geUModCxlKSsiMDAwIn1mdW5jdGlvbiBiQyh0LGUpe3JldHVybiBNVCh0LmdldFVUQ01vbnRoKCkrMSxlLDIpfWZ1bmN0aW9uIHhDKHQsZSl7cmV0dXJuIE1UKHQuZ2V0VVRDTWludXRlcygpLGUsMil9ZnVuY3Rpb24gd0ModCxlKXtyZXR1cm4gTVQodC5nZXRVVENTZWNvbmRzKCksZSwyKX1mdW5jdGlvbiBTQyh0KXt2YXIgZT10LmdldFVUQ0RheSgpO3JldHVybiAwPT09ZT83OmV9ZnVuY3Rpb24gTUModCxlKXtyZXR1cm4gTVQoWUUuY291bnQoY1QodCktMSx0KSxlLDIpfWZ1bmN0aW9uIEVDKHQpe3ZhciBlPXQuZ2V0VVRDRGF5KCk7cmV0dXJuIGU+PTR8fDA9PT1lP1pFKHQpOlpFLmNlaWwodCl9ZnVuY3Rpb24gVEModCxlKXtyZXR1cm4gdD1FQyh0KSxNVChaRS5jb3VudChjVCh0KSx0KSsoND09PWNUKHQpLmdldFVUQ0RheSgpKSxlLDIpfWZ1bmN0aW9uIENDKHQpe3JldHVybiB0LmdldFVUQ0RheSgpfWZ1bmN0aW9uIEFDKHQsZSl7cmV0dXJuIE1UKFhFLmNvdW50KGNUKHQpLTEsdCksZSwyKX1mdW5jdGlvbiBrQyh0LGUpe3JldHVybiBNVCh0LmdldFVUQ0Z1bGxZZWFyKCklMTAwLGUsMil9ZnVuY3Rpb24gTEModCxlKXtyZXR1cm4gTVQoKHQ9RUModCkpLmdldFVUQ0Z1bGxZZWFyKCklMTAwLGUsMil9ZnVuY3Rpb24gUEModCxlKXtyZXR1cm4gTVQodC5nZXRVVENGdWxsWWVhcigpJTFlNCxlLDQpfWZ1bmN0aW9uIE5DKHQsZSl7dmFyIG49dC5nZXRVVENEYXkoKTtyZXR1cm4gTVQoKHQ9bj49NHx8MD09PW4/WkUodCk6WkUuY2VpbCh0KSkuZ2V0VVRDRnVsbFllYXIoKSUxZTQsZSw0KX1mdW5jdGlvbiBJQygpe3JldHVybiIrMDAwMCJ9ZnVuY3Rpb24gT0MoKXtyZXR1cm4iJSJ9ZnVuY3Rpb24gUkModCl7cmV0dXJuK3R9ZnVuY3Rpb24gekModCl7cmV0dXJuIE1hdGguZmxvb3IoK3QvMWUzKX1mdW5jdGlvbiBEQyh0KXtyZXR1cm4gbVQ9ZlQodCksZ1Q9bVQuZm9ybWF0LF9UPW1ULnBhcnNlLHlUPW1ULnV0Y0Zvcm1hdCx2VD1tVC51dGNQYXJzZSxtVH1EQyh7ZGF0ZVRpbWU6IiV4LCAlWCIsZGF0ZToiJS1tLyUtZC8lWSIsdGltZToiJS1JOiVNOiVTICVwIixwZXJpb2RzOlsiQU0iLCJQTSJdLGRheXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLHNob3J0RGF5czpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLG1vbnRoczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sc2hvcnRNb250aHM6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXX0pO3ZhciBCQz0iJVktJW0tJWRUJUg6JU06JVMuJUxaIixIQz1EYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZz9mdW5jdGlvbiBGQyh0KXtyZXR1cm4gdC50b0lTT1N0cmluZygpfTp5VChCQyksVkM9K25ldyBEYXRlKCIyMDAwLTAxLTAxVDAwOjAwOjAwLjAwMFoiKT9mdW5jdGlvbiBVQyh0KXt2YXIgZT1uZXcgRGF0ZSh0KTtyZXR1cm4gaXNOYU4oZSk/bnVsbDplfTp2VChCQyksakM9MzE1MzZlNjtmdW5jdGlvbiBHQyh0KXtyZXR1cm4gbmV3IERhdGUodCl9ZnVuY3Rpb24gV0ModCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBEYXRlPyt0OituZXcgRGF0ZSgrdCl9ZnVuY3Rpb24gcUModCxlLG4saSxyLG8sYSxzLGwpe3ZhciBjPU9NKENNLENNKSx1PWMuaW52ZXJ0LGg9Yy5kb21haW4sZD1sKCIuJUwiKSxwPWwoIjolUyIpLGY9bCgiJUk6JU0iKSxtPWwoIiVJICVwIiksZz1sKCIlYSAlZCIpLF89bCgiJWIgJWQiKSx5PWwoIiVCIiksdj1sKCIlWSIpLGI9W1thLDEsMWUzXSxbYSw1LDVlM10sW2EsMTUsMTVlM10sW2EsMzAsM2U0XSxbbywxLDZlNF0sW28sNSwzZTVdLFtvLDE1LDllNV0sW28sMzAsMThlNV0sW3IsMSwzNmU1XSxbciwzLDEwOGU1XSxbciw2LDIxNmU1XSxbciwxMiw0MzJlNV0sW2ksMSw4NjRlNV0sW2ksMiwxNzI4ZTVdLFtuLDEsNjA0OGU1XSxbZSwxLDI1OTJlNl0sW2UsMyw3Nzc2ZTZdLFt0LDEsakNdXTtmdW5jdGlvbiB4KHMpe3JldHVybihhKHMpPHM/ZDpvKHMpPHM/cDpyKHMpPHM/ZjppKHMpPHM/bTplKHMpPHM/bihzKTxzP2c6Xzp0KHMpPHM/eTp2KShzKX1mdW5jdGlvbiB3KGUsbixpLHIpe2lmKG51bGw9PWUmJihlPTEwKSwibnVtYmVyIj09dHlwZW9mIGUpe3ZhciBvPU1hdGguYWJzKGktbikvZSxhPWJsKChmdW5jdGlvbih0KXtyZXR1cm4gdFsyXX0pKS5yaWdodChiLG8pO2E9PT1iLmxlbmd0aD8ocj1WbChuL2pDLGkvakMsZSksZT10KTphPyhyPShhPWJbby9iW2EtMV1bMl08YlthXVsyXS9vP2EtMTphXSlbMV0sZT1hWzBdKToocj1NYXRoLm1heChWbChuLGksZSksMSksZT1zKX1yZXR1cm4gbnVsbD09cj9lOmUuZXZlcnkocil9cmV0dXJuIGMuaW52ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgRGF0ZSh1KHQpKX0sYy5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/aCh5TS5jYWxsKHQsV0MpKTpoKCkubWFwKEdDKX0sYy50aWNrcz1mdW5jdGlvbih0LGUpe3ZhciBuLGk9aCgpLHI9aVswXSxvPWlbaS5sZW5ndGgtMV0sYT1vPHI7cmV0dXJuIGEmJihuPXIscj1vLG89biksbj0obj13KHQscixvLGUpKT9uLnJhbmdlKHIsbysxKTpbXSxhP24ucmV2ZXJzZSgpOm59LGMudGlja0Zvcm1hdD1mdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT1lP3g6bChlKX0sYy5uaWNlPWZ1bmN0aW9uKHQsZSl7dmFyIG49aCgpO3JldHVybih0PXcodCxuWzBdLG5bbi5sZW5ndGgtMV0sZSkpP2goQk0obix0KSk6Y30sYy5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIE5NKGMscUModCxlLG4saSxyLG8sYSxzLGwpKX0sY31mdW5jdGlvbiBZQygpe3JldHVybiBtTS5hcHBseShxQyhCRSx6RSx3RSx2RSxfRSxtRSxwRSxhRSxnVCkuZG9tYWluKFtuZXcgRGF0ZSgyZTMsMCwxKSxuZXcgRGF0ZSgyZTMsMCwyKV0pLGFyZ3VtZW50cyl9ZnVuY3Rpb24gWEMoKXt2YXIgdCxlLG4saSxyLG89MCxhPTEscz1DTSxsPSExO2Z1bmN0aW9uIGMoZSl7cmV0dXJuIGlzTmFOKGU9K2UpP3I6cygwPT09bj8uNTooZT0oaShlKS10KSpuLGw/TWF0aC5tYXgoMCxNYXRoLm1pbigxLGUpKTplKSl9cmV0dXJuIGMuZG9tYWluPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWkobz0rclswXSksZT1pKGE9K3JbMV0pLG49dD09PWU/MDoxLyhlLXQpLGMpOltvLGFdfSxjLmNsYW1wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPSEhdCxjKTpsfSxjLmludGVycG9sYXRvcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz10LGMpOnN9LGMudW5rbm93bj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LGMpOnJ9LGZ1bmN0aW9uKHIpe3JldHVybiBpPXIsdD1yKG8pLGU9cihhKSxuPXQ9PT1lPzA6MS8oZS10KSxjfX1mdW5jdGlvbiAkQyh0LGUpe3JldHVybiBlLmRvbWFpbih0LmRvbWFpbigpKS5pbnRlcnBvbGF0b3IodC5pbnRlcnBvbGF0b3IoKSkuY2xhbXAodC5jbGFtcCgpKS51bmtub3duKHQudW5rbm93bigpKX1mdW5jdGlvbiBLQygpe3ZhciB0PVFNKFhDKCkpO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gJEModCxLQygpKS5leHBvbmVudCh0LmV4cG9uZW50KCkpfSxnTS5hcHBseSh0LGFyZ3VtZW50cyl9ZnVuY3Rpb24gWkMoKXt2YXIgdCxlLG4saSxyLG8sYSxzPTAsbD0uNSxjPTEsdT1DTSxoPSExO2Z1bmN0aW9uIGQodCl7cmV0dXJuIGlzTmFOKHQ9K3QpP2E6KHQ9LjUrKCh0PStvKHQpKS1lKSoodDxlP2k6ciksdShoP01hdGgubWF4KDAsTWF0aC5taW4oMSx0KSk6dCkpfXJldHVybiBkLmRvbWFpbj1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1vKHM9K2FbMF0pLGU9byhsPSthWzFdKSxuPW8oYz0rYVsyXSksaT10PT09ZT8wOi41LyhlLXQpLHI9ZT09PW4/MDouNS8obi1lKSxkKTpbcyxsLGNdfSxkLmNsYW1wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPSEhdCxkKTpofSxkLmludGVycG9sYXRvcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT10LGQpOnV9LGQudW5rbm93bj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10LGQpOmF9LGZ1bmN0aW9uKGEpe3JldHVybiBvPWEsdD1hKHMpLGU9YShsKSxuPWEoYyksaT10PT09ZT8wOi41LyhlLXQpLHI9ZT09PW4/MDouNS8obi1lKSxkfX1mdW5jdGlvbiBKQygpe3ZhciB0PVFNKFpDKCkpO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gJEModCxKQygpKS5leHBvbmVudCh0LmV4cG9uZW50KCkpfSxnTS5hcHBseSh0LGFyZ3VtZW50cyl9ZnVuY3Rpb24gUUModCl7Zm9yKHZhciBlPXQubGVuZ3RoLzZ8MCxuPW5ldyBBcnJheShlKSxpPTA7aTxlOyluW2ldPSIjIit0LnNsaWNlKDYqaSw2KisraSk7cmV0dXJuIG59dmFyIHRBPVFDKCIxZjc3YjRmZjdmMGUyY2EwMmNkNjI3Mjg5NDY3YmQ4YzU2NGJlMzc3YzI3ZjdmN2ZiY2JkMjIxN2JlY2YiKSxlQT1RQygiN2ZjOTdmYmVhZWQ0ZmRjMDg2ZmZmZjk5Mzg2Y2IwZjAwMjdmYmY1YjE3NjY2NjY2IiksbkE9UUMoIjFiOWU3N2Q5NWYwMjc1NzBiM2U3Mjk4YTY2YTYxZWU2YWIwMmE2NzYxZDY2NjY2NiIpLGlBPVFDKCJhNmNlZTMxZjc4YjRiMmRmOGEzM2EwMmNmYjlhOTllMzFhMWNmZGJmNmZmZjdmMDBjYWIyZDY2YTNkOWFmZmZmOTliMTU5MjgiKSxyQT1RQygiZmJiNGFlYjNjZGUzY2NlYmM1ZGVjYmU0ZmVkOWE2ZmZmZmNjZTVkOGJkZmRkYWVjZjJmMmYyIiksb0E9UUMoImIzZTJjZGZkY2RhY2NiZDVlOGY0Y2FlNGU2ZjVjOWZmZjJhZWYxZTJjY2NjY2NjYyIpLGFBPVFDKCJlNDFhMWMzNzdlYjg0ZGFmNGE5ODRlYTNmZjdmMDBmZmZmMzNhNjU2MjhmNzgxYmY5OTk5OTkiKSxzQT1RQygiNjZjMmE1ZmM4ZDYyOGRhMGNiZTc4YWMzYTZkODU0ZmZkOTJmZTVjNDk0YjNiM2IzIiksbEE9UUMoIjhkZDNjN2ZmZmZiM2JlYmFkYWZiODA3MjgwYjFkM2ZkYjQ2MmIzZGU2OWZjY2RlNWQ5ZDlkOWJjODBiZGNjZWJjNWZmZWQ2ZiIpLGNBPVFDKCI0ZTc5YTdmMjhlMmNlMTU3NTk3NmI3YjI1OWExNGZlZGM5NDlhZjdhYTFmZjlkYTc5Yzc1NWZiYWIwYWIiKTtmdW5jdGlvbiB1QSh0KXtyZXR1cm4gUGQodFt0Lmxlbmd0aC0xXSl9dmFyIGhBPW5ldyBBcnJheSgzKS5jb25jYXQoImQ4YjM2NWY1ZjVmNTVhYjRhYyIsImE2NjExYWRmYzI3ZDgwY2RjMTAxODU3MSIsImE2NjExYWRmYzI3ZGY1ZjVmNTgwY2RjMTAxODU3MSIsIjhjNTEwYWQ4YjM2NWY2ZThjM2M3ZWFlNTVhYjRhYzAxNjY1ZSIsIjhjNTEwYWQ4YjM2NWY2ZThjM2Y1ZjVmNWM3ZWFlNTVhYjRhYzAxNjY1ZSIsIjhjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2M3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZSIsIjhjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2Y1ZjVmNWM3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZSIsIjU0MzAwNThjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2M3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZTAwM2MzMCIsIjU0MzAwNThjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2Y1ZjVmNWM3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZTAwM2MzMCIpLm1hcChRQyksZEE9dUEoaEEpLHBBPW5ldyBBcnJheSgzKS5jb25jYXQoImFmOGRjM2Y3ZjdmNzdmYmY3YiIsIjdiMzI5NGMyYTVjZmE2ZGJhMDAwODgzNyIsIjdiMzI5NGMyYTVjZmY3ZjdmN2E2ZGJhMDAwODgzNyIsIjc2MmE4M2FmOGRjM2U3ZDRlOGQ5ZjBkMzdmYmY3YjFiNzgzNyIsIjc2MmE4M2FmOGRjM2U3ZDRlOGY3ZjdmN2Q5ZjBkMzdmYmY3YjFiNzgzNyIsIjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGQ5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNyIsIjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGY3ZjdmN2Q5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNyIsIjQwMDA0Yjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGQ5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNzAwNDQxYiIsIjQwMDA0Yjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGY3ZjdmN2Q5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNzAwNDQxYiIpLm1hcChRQyksZkE9dUEocEEpLG1BPW5ldyBBcnJheSgzKS5jb25jYXQoImU5YTNjOWY3ZjdmN2ExZDc2YSIsImQwMWM4YmYxYjZkYWI4ZTE4NjRkYWMyNiIsImQwMWM4YmYxYjZkYWY3ZjdmN2I4ZTE4NjRkYWMyNiIsImM1MWI3ZGU5YTNjOWZkZTBlZmU2ZjVkMGExZDc2YTRkOTIyMSIsImM1MWI3ZGU5YTNjOWZkZTBlZmY3ZjdmN2U2ZjVkMGExZDc2YTRkOTIyMSIsImM1MWI3ZGRlNzdhZWYxYjZkYWZkZTBlZmU2ZjVkMGI4ZTE4NjdmYmM0MTRkOTIyMSIsImM1MWI3ZGRlNzdhZWYxYjZkYWZkZTBlZmY3ZjdmN2U2ZjVkMGI4ZTE4NjdmYmM0MTRkOTIyMSIsIjhlMDE1MmM1MWI3ZGRlNzdhZWYxYjZkYWZkZTBlZmU2ZjVkMGI4ZTE4NjdmYmM0MTRkOTIyMTI3NjQxOSIsIjhlMDE1MmM1MWI3ZGRlNzdhZWYxYjZkYWZkZTBlZmY3ZjdmN2U2ZjVkMGI4ZTE4NjdmYmM0MTRkOTIyMTI3NjQxOSIpLm1hcChRQyksZ0E9dUEobUEpLF9BPW5ldyBBcnJheSgzKS5jb25jYXQoIjk5OGVjM2Y3ZjdmN2YxYTM0MCIsIjVlM2M5OWIyYWJkMmZkYjg2M2U2NjEwMSIsIjVlM2M5OWIyYWJkMmY3ZjdmN2ZkYjg2M2U2NjEwMSIsIjU0Mjc4ODk5OGVjM2Q4ZGFlYmZlZTBiNmYxYTM0MGIzNTgwNiIsIjU0Mjc4ODk5OGVjM2Q4ZGFlYmY3ZjdmN2ZlZTBiNmYxYTM0MGIzNTgwNiIsIjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNiIsIjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmY3ZjdmN2ZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNiIsIjJkMDA0YjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNjdmM2IwOCIsIjJkMDA0YjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmY3ZjdmN2ZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNjdmM2IwOCIpLm1hcChRQykseUE9dUEoX0EpLHZBPW5ldyBBcnJheSgzKS5jb25jYXQoImVmOGE2MmY3ZjdmNzY3YTljZiIsImNhMDAyMGY0YTU4MjkyYzVkZTA1NzFiMCIsImNhMDAyMGY0YTU4MmY3ZjdmNzkyYzVkZTA1NzFiMCIsImIyMTgyYmVmOGE2MmZkZGJjN2QxZTVmMDY3YTljZjIxNjZhYyIsImIyMTgyYmVmOGE2MmZkZGJjN2Y3ZjdmN2QxZTVmMDY3YTljZjIxNjZhYyIsImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYyIsImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2Y3ZjdmN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYyIsIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYzA1MzA2MSIsIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2Y3ZjdmN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYzA1MzA2MSIpLm1hcChRQyksYkE9dUEodkEpLHhBPW5ldyBBcnJheSgzKS5jb25jYXQoImVmOGE2MmZmZmZmZjk5OTk5OSIsImNhMDAyMGY0YTU4MmJhYmFiYTQwNDA0MCIsImNhMDAyMGY0YTU4MmZmZmZmZmJhYmFiYTQwNDA0MCIsImIyMTgyYmVmOGE2MmZkZGJjN2UwZTBlMDk5OTk5OTRkNGQ0ZCIsImIyMTgyYmVmOGE2MmZkZGJjN2ZmZmZmZmUwZTBlMDk5OTk5OTRkNGQ0ZCIsImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2UwZTBlMGJhYmFiYTg3ODc4NzRkNGQ0ZCIsImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2ZmZmZmZmUwZTBlMGJhYmFiYTg3ODc4NzRkNGQ0ZCIsIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2UwZTBlMGJhYmFiYTg3ODc4NzRkNGQ0ZDFhMWExYSIsIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2ZmZmZmZmUwZTBlMGJhYmFiYTg3ODc4NzRkNGQ0ZDFhMWExYSIpLm1hcChRQyksd0E9dUEoeEEpLFNBPW5ldyBBcnJheSgzKS5jb25jYXQoImZjOGQ1OWZmZmZiZjkxYmZkYiIsImQ3MTkxY2ZkYWU2MWFiZDllOTJjN2JiNiIsImQ3MTkxY2ZkYWU2MWZmZmZiZmFiZDllOTJjN2JiNiIsImQ3MzAyN2ZjOGQ1OWZlZTA5MGUwZjNmODkxYmZkYjQ1NzViNCIsImQ3MzAyN2ZjOGQ1OWZlZTA5MGZmZmZiZmUwZjNmODkxYmZkYjQ1NzViNCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGZmZmZiZmUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNCIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNDMxMzY5NSIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGZmZmZiZmUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNDMxMzY5NSIpLm1hcChRQyksTUE9dUEoU0EpLEVBPW5ldyBBcnJheSgzKS5jb25jYXQoImZjOGQ1OWZmZmZiZjkxY2Y2MCIsImQ3MTkxY2ZkYWU2MWE2ZDk2YTFhOTY0MSIsImQ3MTkxY2ZkYWU2MWZmZmZiZmE2ZDk2YTFhOTY0MSIsImQ3MzAyN2ZjOGQ1OWZlZTA4YmQ5ZWY4YjkxY2Y2MDFhOTg1MCIsImQ3MzAyN2ZjOGQ1OWZlZTA4YmZmZmZiZmQ5ZWY4YjkxY2Y2MDFhOTg1MCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MCIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MDAwNjgzNyIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MDAwNjgzNyIpLm1hcChRQyksVEE9dUEoRUEpLENBPW5ldyBBcnJheSgzKS5jb25jYXQoImZjOGQ1OWZmZmZiZjk5ZDU5NCIsImQ3MTkxY2ZkYWU2MWFiZGRhNDJiODNiYSIsImQ3MTkxY2ZkYWU2MWZmZmZiZmFiZGRhNDJiODNiYSIsImQ1M2U0ZmZjOGQ1OWZlZTA4YmU2ZjU5ODk5ZDU5NDMyODhiZCIsImQ1M2U0ZmZjOGQ1OWZlZTA4YmZmZmZiZmU2ZjU5ODk5ZDU5NDMyODhiZCIsImQ1M2U0ZmY0NmQ0M2ZkYWU2MWZlZTA4YmU2ZjU5OGFiZGRhNDY2YzJhNTMyODhiZCIsImQ1M2U0ZmY0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmU2ZjU5OGFiZGRhNDY2YzJhNTMyODhiZCIsIjllMDE0MmQ1M2U0ZmY0NmQ0M2ZkYWU2MWZlZTA4YmU2ZjU5OGFiZGRhNDY2YzJhNTMyODhiZDVlNGZhMiIsIjllMDE0MmQ1M2U0ZmY0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmU2ZjU5OGFiZGRhNDY2YzJhNTMyODhiZDVlNGZhMiIpLm1hcChRQyksQUE9dUEoQ0EpLGtBPW5ldyBBcnJheSgzKS5jb25jYXQoImU1ZjVmOTk5ZDhjOTJjYTI1ZiIsImVkZjhmYmIyZTJlMjY2YzJhNDIzOGI0NSIsImVkZjhmYmIyZTJlMjY2YzJhNDJjYTI1ZjAwNmQyYyIsImVkZjhmYmNjZWNlNjk5ZDhjOTY2YzJhNDJjYTI1ZjAwNmQyYyIsImVkZjhmYmNjZWNlNjk5ZDhjOTY2YzJhNDQxYWU3NjIzOGI0NTAwNTgyNCIsImY3ZmNmZGU1ZjVmOWNjZWNlNjk5ZDhjOTY2YzJhNDQxYWU3NjIzOGI0NTAwNTgyNCIsImY3ZmNmZGU1ZjVmOWNjZWNlNjk5ZDhjOTY2YzJhNDQxYWU3NjIzOGI0NTAwNmQyYzAwNDQxYiIpLm1hcChRQyksTEE9dUEoa0EpLFBBPW5ldyBBcnJheSgzKS5jb25jYXQoImUwZWNmNDllYmNkYTg4NTZhNyIsImVkZjhmYmIzY2RlMzhjOTZjNjg4NDE5ZCIsImVkZjhmYmIzY2RlMzhjOTZjNjg4NTZhNzgxMGY3YyIsImVkZjhmYmJmZDNlNjllYmNkYThjOTZjNjg4NTZhNzgxMGY3YyIsImVkZjhmYmJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDZlMDE2YiIsImY3ZmNmZGUwZWNmNGJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDZlMDE2YiIsImY3ZmNmZGUwZWNmNGJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDgxMGY3YzRkMDA0YiIpLm1hcChRQyksTkE9dUEoUEEpLElBPW5ldyBBcnJheSgzKS5jb25jYXQoImUwZjNkYmE4ZGRiNTQzYTJjYSIsImYwZjllOGJhZTRiYzdiY2NjNDJiOGNiZSIsImYwZjllOGJhZTRiYzdiY2NjNDQzYTJjYTA4NjhhYyIsImYwZjllOGNjZWJjNWE4ZGRiNTdiY2NjNDQzYTJjYTA4NjhhYyIsImYwZjllOGNjZWJjNWE4ZGRiNTdiY2NjNDRlYjNkMzJiOGNiZTA4NTg5ZSIsImY3ZmNmMGUwZjNkYmNjZWJjNWE4ZGRiNTdiY2NjNDRlYjNkMzJiOGNiZTA4NTg5ZSIsImY3ZmNmMGUwZjNkYmNjZWJjNWE4ZGRiNTdiY2NjNDRlYjNkMzJiOGNiZTA4NjhhYzA4NDA4MSIpLm1hcChRQyksT0E9dUEoSUEpLFJBPW5ldyBBcnJheSgzKS5jb25jYXQoImZlZThjOGZkYmI4NGUzNGEzMyIsImZlZjBkOWZkY2M4YWZjOGQ1OWQ3MzAxZiIsImZlZjBkOWZkY2M4YWZjOGQ1OWUzNGEzM2IzMDAwMCIsImZlZjBkOWZkZDQ5ZWZkYmI4NGZjOGQ1OWUzNGEzM2IzMDAwMCIsImZlZjBkOWZkZDQ5ZWZkYmI4NGZjOGQ1OWVmNjU0OGQ3MzAxZjk5MDAwMCIsImZmZjdlY2ZlZThjOGZkZDQ5ZWZkYmI4NGZjOGQ1OWVmNjU0OGQ3MzAxZjk5MDAwMCIsImZmZjdlY2ZlZThjOGZkZDQ5ZWZkYmI4NGZjOGQ1OWVmNjU0OGQ3MzAxZmIzMDAwMDdmMDAwMCIpLm1hcChRQyksekE9dUEoUkEpLERBPW5ldyBBcnJheSgzKS5jb25jYXQoImVjZTJmMGE2YmRkYjFjOTA5OSIsImY2ZWZmN2JkYzllMTY3YTljZjAyODE4YSIsImY2ZWZmN2JkYzllMTY3YTljZjFjOTA5OTAxNmM1OSIsImY2ZWZmN2QwZDFlNmE2YmRkYjY3YTljZjFjOTA5OTAxNmM1OSIsImY2ZWZmN2QwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNjQ1MCIsImZmZjdmYmVjZTJmMGQwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNjQ1MCIsImZmZjdmYmVjZTJmMGQwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNmM1OTAxNDYzNiIpLm1hcChRQyksQkE9dUEoREEpLEhBPW5ldyBBcnJheSgzKS5jb25jYXQoImVjZTdmMmE2YmRkYjJiOGNiZSIsImYxZWVmNmJkYzllMTc0YTljZjA1NzBiMCIsImYxZWVmNmJkYzllMTc0YTljZjJiOGNiZTA0NWE4ZCIsImYxZWVmNmQwZDFlNmE2YmRkYjc0YTljZjJiOGNiZTA0NWE4ZCIsImYxZWVmNmQwZDFlNmE2YmRkYjc0YTljZjM2OTBjMDA1NzBiMDAzNGU3YiIsImZmZjdmYmVjZTdmMmQwZDFlNmE2YmRkYjc0YTljZjM2OTBjMDA1NzBiMDAzNGU3YiIsImZmZjdmYmVjZTdmMmQwZDFlNmE2YmRkYjc0YTljZjM2OTBjMDA1NzBiMDA0NWE4ZDAyMzg1OCIpLm1hcChRQyksRkE9dUEoSEEpLFZBPW5ldyBBcnJheSgzKS5jb25jYXQoImU3ZTFlZmM5OTRjN2RkMWM3NyIsImYxZWVmNmQ3YjVkOGRmNjViMGNlMTI1NiIsImYxZWVmNmQ3YjVkOGRmNjViMGRkMWM3Nzk4MDA0MyIsImYxZWVmNmQ0YjlkYWM5OTRjN2RmNjViMGRkMWM3Nzk4MDA0MyIsImYxZWVmNmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1NjkxMDAzZiIsImY3ZjRmOWU3ZTFlZmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1NjkxMDAzZiIsImY3ZjRmOWU3ZTFlZmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1Njk4MDA0MzY3MDAxZiIpLm1hcChRQyksVUE9dUEoVkEpLGpBPW5ldyBBcnJheSgzKS5jb25jYXQoImZkZTBkZGZhOWZiNWM1MWI4YSIsImZlZWJlMmZiYjRiOWY3NjhhMWFlMDE3ZSIsImZlZWJlMmZiYjRiOWY3NjhhMWM1MWI4YTdhMDE3NyIsImZlZWJlMmZjYzVjMGZhOWZiNWY3NjhhMWM1MWI4YTdhMDE3NyIsImZlZWJlMmZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3NyIsImZmZjdmM2ZkZTBkZGZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3NyIsImZmZjdmM2ZkZTBkZGZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3NzQ5MDA2YSIpLm1hcChRQyksR0E9dUEoakEpLFdBPW5ldyBBcnJheSgzKS5jb25jYXQoImVkZjhiMTdmY2RiYjJjN2ZiOCIsImZmZmZjY2ExZGFiNDQxYjZjNDIyNWVhOCIsImZmZmZjY2ExZGFiNDQxYjZjNDJjN2ZiODI1MzQ5NCIsImZmZmZjY2M3ZTliNDdmY2RiYjQxYjZjNDJjN2ZiODI1MzQ5NCIsImZmZmZjY2M3ZTliNDdmY2RiYjQxYjZjNDFkOTFjMDIyNWVhODBjMmM4NCIsImZmZmZkOWVkZjhiMWM3ZTliNDdmY2RiYjQxYjZjNDFkOTFjMDIyNWVhODBjMmM4NCIsImZmZmZkOWVkZjhiMWM3ZTliNDdmY2RiYjQxYjZjNDFkOTFjMDIyNWVhODI1MzQ5NDA4MWQ1OCIpLm1hcChRQykscUE9dUEoV0EpLFlBPW5ldyBBcnJheSgzKS5jb25jYXQoImY3ZmNiOWFkZGQ4ZTMxYTM1NCIsImZmZmZjY2MyZTY5OTc4YzY3OTIzODQ0MyIsImZmZmZjY2MyZTY5OTc4YzY3OTMxYTM1NDAwNjgzNyIsImZmZmZjY2Q5ZjBhM2FkZGQ4ZTc4YzY3OTMxYTM1NDAwNjgzNyIsImZmZmZjY2Q5ZjBhM2FkZGQ4ZTc4YzY3OTQxYWI1ZDIzODQ0MzAwNWEzMiIsImZmZmZlNWY3ZmNiOWQ5ZjBhM2FkZGQ4ZTc4YzY3OTQxYWI1ZDIzODQ0MzAwNWEzMiIsImZmZmZlNWY3ZmNiOWQ5ZjBhM2FkZGQ4ZTc4YzY3OTQxYWI1ZDIzODQ0MzAwNjgzNzAwNDUyOSIpLm1hcChRQyksWEE9dUEoWUEpLCRBPW5ldyBBcnJheSgzKS5jb25jYXQoImZmZjdiY2ZlYzQ0ZmQ5NWYwZSIsImZmZmZkNGZlZDk4ZWZlOTkyOWNjNGMwMiIsImZmZmZkNGZlZDk4ZWZlOTkyOWQ5NWYwZTk5MzQwNCIsImZmZmZkNGZlZTM5MWZlYzQ0ZmZlOTkyOWQ5NWYwZTk5MzQwNCIsImZmZmZkNGZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjhjMmQwNCIsImZmZmZlNWZmZjdiY2ZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjhjMmQwNCIsImZmZmZlNWZmZjdiY2ZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjk5MzQwNDY2MjUwNiIpLm1hcChRQyksS0E9dUEoJEEpLFpBPW5ldyBBcnJheSgzKS5jb25jYXQoImZmZWRhMGZlYjI0Y2YwM2IyMCIsImZmZmZiMmZlY2M1Y2ZkOGQzY2UzMWExYyIsImZmZmZiMmZlY2M1Y2ZkOGQzY2YwM2IyMGJkMDAyNiIsImZmZmZiMmZlZDk3NmZlYjI0Y2ZkOGQzY2YwM2IyMGJkMDAyNiIsImZmZmZiMmZlZDk3NmZlYjI0Y2ZkOGQzY2ZjNGUyYWUzMWExY2IxMDAyNiIsImZmZmZjY2ZmZWRhMGZlZDk3NmZlYjI0Y2ZkOGQzY2ZjNGUyYWUzMWExY2IxMDAyNiIsImZmZmZjY2ZmZWRhMGZlZDk3NmZlYjI0Y2ZkOGQzY2ZjNGUyYWUzMWExY2JkMDAyNjgwMDAyNiIpLm1hcChRQyksSkE9dUEoWkEpLFFBPW5ldyBBcnJheSgzKS5jb25jYXQoImRlZWJmNzllY2FlMTMxODJiZCIsImVmZjNmZmJkZDdlNzZiYWVkNjIxNzFiNSIsImVmZjNmZmJkZDdlNzZiYWVkNjMxODJiZDA4NTE5YyIsImVmZjNmZmM2ZGJlZjllY2FlMTZiYWVkNjMxODJiZDA4NTE5YyIsImVmZjNmZmM2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NDU5NCIsImY3ZmJmZmRlZWJmN2M2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NDU5NCIsImY3ZmJmZmRlZWJmN2M2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NTE5YzA4MzA2YiIpLm1hcChRQyksdGs9dUEoUUEpLGVrPW5ldyBBcnJheSgzKS5jb25jYXQoImU1ZjVlMGExZDk5YjMxYTM1NCIsImVkZjhlOWJhZTRiMzc0YzQ3NjIzOGI0NSIsImVkZjhlOWJhZTRiMzc0YzQ3NjMxYTM1NDAwNmQyYyIsImVkZjhlOWM3ZTljMGExZDk5Yjc0YzQ3NjMxYTM1NDAwNmQyYyIsImVkZjhlOWM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNWEzMiIsImY3ZmNmNWU1ZjVlMGM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNWEzMiIsImY3ZmNmNWU1ZjVlMGM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNmQyYzAwNDQxYiIpLm1hcChRQyksbms9dUEoZWspLGlrPW5ldyBBcnJheSgzKS5jb25jYXQoImYwZjBmMGJkYmRiZDYzNjM2MyIsImY3ZjdmN2NjY2NjYzk2OTY5NjUyNTI1MiIsImY3ZjdmN2NjY2NjYzk2OTY5NjYzNjM2MzI1MjUyNSIsImY3ZjdmN2Q5ZDlkOWJkYmRiZDk2OTY5NjYzNjM2MzI1MjUyNSIsImY3ZjdmN2Q5ZDlkOWJkYmRiZDk2OTY5NjczNzM3MzUyNTI1MjI1MjUyNSIsImZmZmZmZmYwZjBmMGQ5ZDlkOWJkYmRiZDk2OTY5NjczNzM3MzUyNTI1MjI1MjUyNSIsImZmZmZmZmYwZjBmMGQ5ZDlkOWJkYmRiZDk2OTY5NjczNzM3MzUyNTI1MjI1MjUyNTAwMDAwMCIpLm1hcChRQykscms9dUEoaWspLG9rPW5ldyBBcnJheSgzKS5jb25jYXQoImVmZWRmNWJjYmRkYzc1NmJiMSIsImYyZjBmN2NiYzllMjllOWFjODZhNTFhMyIsImYyZjBmN2NiYzllMjllOWFjODc1NmJiMTU0Mjc4ZiIsImYyZjBmN2RhZGFlYmJjYmRkYzllOWFjODc1NmJiMTU0Mjc4ZiIsImYyZjBmN2RhZGFlYmJjYmRkYzllOWFjODgwN2RiYTZhNTFhMzRhMTQ4NiIsImZjZmJmZGVmZWRmNWRhZGFlYmJjYmRkYzllOWFjODgwN2RiYTZhNTFhMzRhMTQ4NiIsImZjZmJmZGVmZWRmNWRhZGFlYmJjYmRkYzllOWFjODgwN2RiYTZhNTFhMzU0Mjc4ZjNmMDA3ZCIpLm1hcChRQyksYWs9dUEob2spLHNrPW5ldyBBcnJheSgzKS5jb25jYXQoImZlZTBkMmZjOTI3MmRlMmQyNiIsImZlZTVkOWZjYWU5MWZiNmE0YWNiMTgxZCIsImZlZTVkOWZjYWU5MWZiNmE0YWRlMmQyNmE1MGYxNSIsImZlZTVkOWZjYmJhMWZjOTI3MmZiNmE0YWRlMmQyNmE1MGYxNSIsImZlZTVkOWZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZDk5MDAwZCIsImZmZjVmMGZlZTBkMmZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZDk5MDAwZCIsImZmZjVmMGZlZTBkMmZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZGE1MGYxNTY3MDAwZCIpLm1hcChRQyksbGs9dUEoc2spLGNrPW5ldyBBcnJheSgzKS5jb25jYXQoImZlZTZjZWZkYWU2YmU2NTUwZCIsImZlZWRkZWZkYmU4NWZkOGQzY2Q5NDcwMSIsImZlZWRkZWZkYmU4NWZkOGQzY2U2NTUwZGE2MzYwMyIsImZlZWRkZWZkZDBhMmZkYWU2YmZkOGQzY2U2NTUwZGE2MzYwMyIsImZlZWRkZWZkZDBhMmZkYWU2YmZkOGQzY2YxNjkxM2Q5NDgwMThjMmQwNCIsImZmZjVlYmZlZTZjZWZkZDBhMmZkYWU2YmZkOGQzY2YxNjkxM2Q5NDgwMThjMmQwNCIsImZmZjVlYmZlZTZjZWZkZDBhMmZkYWU2YmZkOGQzY2YxNjkxM2Q5NDgwMWE2MzYwMzdmMjcwNCIpLm1hcChRQyksdWs9dUEoY2spLGhrPWdwKGJkKDMwMCwuNSwwKSxiZCgtMjQwLC41LDEpKSxkaz1ncChiZCgtMTAwLC43NSwuMzUpLGJkKDgwLDEuNSwuOCkpLHBrPWdwKGJkKDI2MCwuNzUsLjM1KSxiZCg4MCwxLjUsLjgpKSxmaz1iZCgpLG1rPVZoKCksZ2s9TWF0aC5QSS8zLF9rPTIqTWF0aC5QSS8zO2Z1bmN0aW9uIHlrKHQpe3ZhciBlPXQubGVuZ3RoO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdFtNYXRoLm1heCgwLE1hdGgubWluKGUtMSxNYXRoLmZsb29yKG4qZSkpKV19fXZhciB2az15ayhRQygiNDQwMTU0NDQwMjU2NDUwNDU3NDUwNTU5NDYwNzVhNDYwODVjNDYwYTVkNDYwYjVlNDcwZDYwNDcwZTYxNDcxMDYzNDcxMTY0NDcxMzY1NDgxNDY3NDgxNjY4NDgxNzY5NDgxODZhNDgxYTZjNDgxYjZkNDgxYzZlNDgxZDZmNDgxZjcwNDgyMDcxNDgyMTczNDgyMzc0NDgyNDc1NDgyNTc2NDgyNjc3NDgyODc4NDgyOTc5NDcyYTdhNDcyYzdhNDcyZDdiNDcyZTdjNDcyZjdkNDYzMDdlNDYzMjdlNDYzMzdmNDYzNDgwNDUzNTgxNDUzNzgxNDUzODgyNDQzOTgzNDQzYTgzNDQzYjg0NDMzZDg0NDMzZTg1NDIzZjg1NDI0MDg2NDI0MTg2NDE0Mjg3NDE0NDg3NDA0NTg4NDA0Njg4M2Y0Nzg4M2Y0ODg5M2U0OTg5M2U0YTg5M2U0YzhhM2Q0ZDhhM2Q0ZThhM2M0ZjhhM2M1MDhiM2I1MThiM2I1MjhiM2E1MzhiM2E1NDhjMzk1NThjMzk1NjhjMzg1ODhjMzg1OThjMzc1YThjMzc1YjhkMzY1YzhkMzY1ZDhkMzU1ZThkMzU1ZjhkMzQ2MDhkMzQ2MThkMzM2MjhkMzM2MzhkMzI2NDhlMzI2NThlMzE2NjhlMzE2NzhlMzE2ODhlMzA2OThlMzA2YThlMmY2YjhlMmY2YzhlMmU2ZDhlMmU2ZThlMmU2ZjhlMmQ3MDhlMmQ3MThlMmM3MThlMmM3MjhlMmM3MzhlMmI3NDhlMmI3NThlMmE3NjhlMmE3NzhlMmE3ODhlMjk3OThlMjk3YThlMjk3YjhlMjg3YzhlMjg3ZDhlMjc3ZThlMjc3ZjhlMjc4MDhlMjY4MThlMjY4MjhlMjY4MjhlMjU4MzhlMjU4NDhlMjU4NThlMjQ4NjhlMjQ4NzhlMjM4ODhlMjM4OThlMjM4YThkMjI4YjhkMjI4YzhkMjI4ZDhkMjE4ZThkMjE4ZjhkMjE5MDhkMjE5MThjMjA5MjhjMjA5MjhjMjA5MzhjMWY5NDhjMWY5NThiMWY5NjhiMWY5NzhiMWY5ODhiMWY5OThhMWY5YThhMWU5YjhhMWU5Yzg5MWU5ZDg5MWY5ZTg5MWY5Zjg4MWZhMDg4MWZhMTg4MWZhMTg3MWZhMjg3MjBhMzg2MjBhNDg2MjFhNTg1MjFhNjg1MjJhNzg1MjJhODg0MjNhOTgzMjRhYTgzMjVhYjgyMjVhYzgyMjZhZDgxMjdhZDgxMjhhZTgwMjlhZjdmMmFiMDdmMmNiMTdlMmRiMjdkMmViMzdjMmZiNDdjMzFiNTdiMzJiNjdhMzRiNjc5MzViNzc5MzdiODc4MzhiOTc3M2FiYTc2M2JiYjc1M2RiYzc0M2ZiYzczNDBiZDcyNDJiZTcxNDRiZjcwNDZjMDZmNDhjMTZlNGFjMTZkNGNjMjZjNGVjMzZiNTBjNDZhNTJjNTY5NTRjNTY4NTZjNjY3NThjNzY1NWFjODY0NWNjODYzNWVjOTYyNjBjYTYwNjNjYjVmNjVjYjVlNjdjYzVjNjljZDViNmNjZDVhNmVjZTU4NzBjZjU3NzNkMDU2NzVkMDU0NzdkMTUzN2FkMTUxN2NkMjUwN2ZkMzRlODFkMzRkODRkNDRiODZkNTQ5ODlkNTQ4OGJkNjQ2OGVkNjQ1OTBkNzQzOTNkNzQxOTVkODQwOThkODNlOWJkOTNjOWRkOTNiYTBkYTM5YTJkYTM3YTVkYjM2YThkYjM0YWFkYzMyYWRkYzMwYjBkZDJmYjJkZDJkYjVkZTJiYjhkZTI5YmFkZTI4YmRkZjI2YzBkZjI1YzJkZjIzYzVlMDIxYzhlMDIwY2FlMTFmY2RlMTFkZDBlMTFjZDJlMjFiZDVlMjFhZDhlMjE5ZGFlMzE5ZGRlMzE4ZGZlMzE4ZTJlNDE4ZTVlNDE5ZTdlNDE5ZWFlNTFhZWNlNTFiZWZlNTFjZjFlNTFkZjRlNjFlZjZlNjIwZjhlNjIxZmJlNzIzZmRlNzI1IikpLGJrPXlrKFFDKCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMDkwMjAyMGIwMjAyMGQwMzAzMGYwMzAzMTIwNDA0MTQwNTA0MTYwNjA1MTgwNjA1MWEwNzA2MWMwODA3MWUwOTA3MjAwYTA4MjIwYjA5MjQwYzA5MjYwZDBhMjkwZTBiMmIxMDBiMmQxMTBjMmYxMjBkMzExMzBkMzQxNDBlMzYxNTBlMzgxNjBmM2IxODBmM2QxOTEwM2YxYTEwNDIxYzEwNDQxZDExNDcxZTExNDkyMDExNGIyMTExNGUyMjExNTAyNDEyNTMyNTEyNTUyNzEyNTgyOTExNWEyYTExNWMyYzExNWYyZDExNjEyZjExNjMzMTExNjUzMzEwNjczNDEwNjkzNjEwNmIzODEwNmMzOTBmNmUzYjBmNzAzZDBmNzEzZjBmNzI0MDBmNzQ0MjBmNzU0NDBmNzY0NTEwNzc0NzEwNzg0OTEwNzg0YTEwNzk0YzExN2E0ZTExN2I0ZjEyN2I1MTEyN2M1MjEzN2M1NDEzN2Q1NjE0N2Q1NzE1N2U1OTE1N2U1YTE2N2U1YzE2N2Y1ZDE3N2Y1ZjE4N2Y2MDE4ODA2MjE5ODA2NDFhODA2NTFhODA2NzFiODA2ODFjODE2YTFjODE2YjFkODE2ZDFkODE2ZTFlODE3MDFmODE3MjFmODE3MzIwODE3NTIxODE3NjIxODE3ODIyODE3OTIyODI3YjIzODI3YzIzODI3ZTI0ODI4MDI1ODI4MTI1ODE4MzI2ODE4NDI2ODE4NjI3ODE4ODI3ODE4OTI4ODE4YjI5ODE4YzI5ODE4ZTJhODE5MDJhODE5MTJiODE5MzJiODA5NDJjODA5NjJjODA5ODJkODA5OTJkODA5YjJlN2Y5YzJlN2Y5ZTJmN2ZhMDJmN2ZhMTMwN2VhMzMwN2VhNTMxN2VhNjMxN2RhODMyN2RhYTMzN2RhYjMzN2NhZDM0N2NhZTM0N2JiMDM1N2JiMjM1N2JiMzM2N2FiNTM2N2FiNzM3NzliODM3NzliYTM4NzhiYzM5NzhiZDM5NzdiZjNhNzdjMDNhNzZjMjNiNzVjNDNjNzVjNTNjNzRjNzNkNzNjODNlNzNjYTNlNzJjYzNmNzFjZDQwNzFjZjQwNzBkMDQxNmZkMjQyNmZkMzQzNmVkNTQ0NmRkNjQ1NmNkODQ1NmNkOTQ2NmJkYjQ3NmFkYzQ4NjlkZTQ5NjhkZjRhNjhlMDRjNjdlMjRkNjZlMzRlNjVlNDRmNjRlNTUwNjRlNzUyNjNlODUzNjJlOTU0NjJlYTU2NjFlYjU3NjBlYzU4NjBlZDVhNWZlZTViNWVlZjVkNWVmMDVmNWVmMTYwNWRmMjYyNWRmMjY0NWNmMzY1NWNmNDY3NWNmNDY5NWNmNTZiNWNmNjZjNWNmNjZlNWNmNzcwNWNmNzcyNWNmODc0NWNmODc2NWNmOTc4NWRmOTc5NWRmOTdiNWRmYTdkNWVmYTdmNWVmYTgxNWZmYjgzNWZmYjg1NjBmYjg3NjFmYzg5NjFmYzhhNjJmYzhjNjNmYzhlNjRmYzkwNjVmZDkyNjZmZDk0NjdmZDk2NjhmZDk4NjlmZDlhNmFmZDliNmJmZTlkNmNmZTlmNmRmZWExNmVmZWEzNmZmZWE1NzFmZWE3NzJmZWE5NzNmZWFhNzRmZWFjNzZmZWFlNzdmZWIwNzhmZWIyN2FmZWI0N2JmZWI2N2NmZWI3N2VmZWI5N2ZmZWJiODFmZWJkODJmZWJmODRmZWMxODVmZWMyODdmZWM0ODhmZWM2OGFmZWM4OGNmZWNhOGRmZWNjOGZmZWNkOTBmZWNmOTJmZWQxOTRmZWQzOTVmZWQ1OTdmZWQ3OTlmZWQ4OWFmZGRhOWNmZGRjOWVmZGRlYTBmZGUwYTFmZGUyYTNmZGUzYTVmZGU1YTdmZGU3YTlmZGU5YWFmZGViYWNmY2VjYWVmY2VlYjBmY2YwYjJmY2YyYjRmY2Y0YjZmY2Y2YjhmY2Y3YjlmY2Y5YmJmY2ZiYmRmY2ZkYmYiKSkseGs9eWsoUUMoIjAwMDAwNDAxMDAwNTAxMDEwNjAxMDEwODAyMDEwYTAyMDIwYzAyMDIwZTAzMDIxMDA0MDMxMjA0MDMxNDA1MDQxNzA2MDQxOTA3MDUxYjA4MDUxZDA5MDYxZjBhMDcyMjBiMDcyNDBjMDgyNjBkMDgyOTBlMDkyYjEwMDkyZDExMGEzMDEyMGEzMjE0MGIzNDE1MGIzNzE2MGIzOTE4MGMzYzE5MGMzZTFiMGM0MTFjMGM0MzFlMGM0NTFmMGM0ODIxMGM0YTIzMGM0YzI0MGM0ZjI2MGM1MTI4MGI1MzI5MGI1NTJiMGI1NzJkMGI1OTJmMGE1YjMxMGE1YzMyMGE1ZTM0MGE1ZjM2MDk2MTM4MDk2MjM5MDk2MzNiMDk2NDNkMDk2NTNlMDk2NjQwMGE2NzQyMGE2ODQ0MGE2ODQ1MGE2OTQ3MGI2YTQ5MGI2YTRhMGM2YjRjMGM2YjRkMGQ2YzRmMGQ2YzUxMGU2YzUyMGU2ZDU0MGY2ZDU1MGY2ZDU3MTA2ZTU5MTA2ZTVhMTE2ZTVjMTI2ZTVkMTI2ZTVmMTM2ZTYxMTM2ZTYyMTQ2ZTY0MTU2ZTY1MTU2ZTY3MTY2ZTY5MTY2ZTZhMTc2ZTZjMTg2ZTZkMTg2ZTZmMTk2ZTcxMTk2ZTcyMWE2ZTc0MWE2ZTc1MWI2ZTc3MWM2ZDc4MWM2ZDdhMWQ2ZDdjMWQ2ZDdkMWU2ZDdmMWU2YzgwMWY2YzgyMjA2Yzg0MjA2Yjg1MjE2Yjg3MjE2Yjg4MjI2YThhMjI2YThjMjM2OThkMjM2OThmMjQ2OTkwMjU2ODkyMjU2ODkzMjY2Nzk1MjY2Nzk3Mjc2Njk4Mjc2NjlhMjg2NTliMjk2NDlkMjk2NDlmMmE2M2EwMmE2M2EyMmI2MmEzMmM2MWE1MmM2MGE2MmQ2MGE4MmU1ZmE5MmU1ZWFiMmY1ZWFkMzA1ZGFlMzA1Y2IwMzE1YmIxMzI1YWIzMzI1YWI0MzM1OWI2MzQ1OGI3MzU1N2I5MzU1NmJhMzY1NWJjMzc1NGJkMzg1M2JmMzk1MmMwM2E1MWMxM2E1MGMzM2I0ZmM0M2M0ZWM2M2Q0ZGM3M2U0Y2M4M2Y0YmNhNDA0YWNiNDE0OWNjNDI0OGNlNDM0N2NmNDQ0NmQwNDU0NWQyNDY0NGQzNDc0M2Q0NDg0MmQ1NGE0MWQ3NGIzZmQ4NGMzZWQ5NGQzZGRhNGUzY2RiNTAzYmRkNTEzYWRlNTIzOGRmNTMzN2UwNTUzNmUxNTYzNWUyNTczNGUzNTkzM2U0NWEzMWU1NWMzMGU2NWQyZmU3NWUyZWU4NjAyZGU5NjEyYmVhNjMyYWViNjQyOWViNjYyOGVjNjcyNmVkNjkyNWVlNmEyNGVmNmMyM2VmNmUyMWYwNmYyMGYxNzExZmYxNzMxZGYyNzQxY2YzNzYxYmYzNzgxOWY0NzkxOGY1N2IxN2Y1N2QxNWY2N2UxNGY2ODAxM2Y3ODIxMmY3ODQxMGY4ODUwZmY4ODcwZWY4ODkwY2Y5OGIwYmY5OGMwYWY5OGUwOWZhOTAwOGZhOTIwN2ZhOTQwN2ZiOTYwNmZiOTcwNmZiOTkwNmZiOWIwNmZiOWQwN2ZjOWYwN2ZjYTEwOGZjYTMwOWZjYTUwYWZjYTYwY2ZjYTgwZGZjYWEwZmZjYWMxMWZjYWUxMmZjYjAxNGZjYjIxNmZjYjQxOGZiYjYxYWZiYjgxZGZiYmExZmZiYmMyMWZiYmUyM2ZhYzAyNmZhYzIyOGZhYzQyYWZhYzYyZGY5YzcyZmY5YzkzMmY5Y2IzNWY4Y2QzN2Y4Y2YzYWY3ZDEzZGY3ZDM0MGY2ZDU0M2Y2ZDc0NmY1ZDk0OWY1ZGI0Y2Y0ZGQ0ZmY0ZGY1M2Y0ZTE1NmYzZTM1YWYzZTU1ZGYyZTY2MWYyZTg2NWYyZWE2OWYxZWM2ZGYxZWQ3MWYxZWY3NWYxZjE3OWYyZjI3ZGYyZjQ4MmYzZjU4NmYzZjY4YWY0Zjg4ZWY1Zjk5MmY2ZmE5NmY4ZmI5YWY5ZmM5ZGZhZmRhMWZjZmZhNCIpKSx3az15ayhRQygiMGQwODg3MTAwNzg4MTMwNzg5MTYwNzhhMTkwNjhjMWIwNjhkMWQwNjhlMjAwNjhmMjIwNjkwMjQwNjkxMjYwNTkxMjgwNTkyMmEwNTkzMmMwNTk0MmUwNTk1MmYwNTk2MzEwNTk3MzMwNTk3MzUwNDk4MzcwNDk5MzgwNDlhM2EwNDlhM2MwNDliM2UwNDljM2YwNDljNDEwNDlkNDMwMzllNDQwMzllNDYwMzlmNDgwMzlmNDkwM2EwNGIwM2ExNGMwMmExNGUwMmEyNTAwMmEyNTEwMmEzNTMwMmEzNTUwMmE0NTYwMWE0NTgwMWE0NTkwMWE1NWIwMWE1NWMwMWE2NWUwMWE2NjAwMWE2NjEwMGE3NjMwMGE3NjQwMGE3NjYwMGE3NjcwMGE4NjkwMGE4NmEwMGE4NmMwMGE4NmUwMGE4NmYwMGE4NzEwMGE4NzIwMWE4NzQwMWE4NzUwMWE4NzcwMWE4NzgwMWE4N2EwMmE4N2IwMmE4N2QwM2E4N2UwM2E4ODAwNGE4ODEwNGE3ODMwNWE3ODQwNWE3ODYwNmE2ODcwN2E2ODgwOGE2OGEwOWE1OGIwYWE1OGQwYmE1OGUwY2E0OGYwZGE0OTEwZWEzOTIwZmEzOTQxMGEyOTUxMWExOTYxM2ExOTgxNGEwOTkxNTlmOWExNjlmOWMxNzllOWQxODlkOWUxOTlkYTAxYTljYTExYjliYTIxZDlhYTMxZTlhYTUxZjk5YTYyMDk4YTcyMTk3YTgyMjk2YWEyMzk1YWIyNDk0YWMyNjk0YWQyNzkzYWUyODkyYjAyOTkxYjEyYTkwYjIyYjhmYjMyYzhlYjQyZThkYjUyZjhjYjYzMDhiYjczMThhYjgzMjg5YmEzMzg4YmIzNDg4YmMzNTg3YmQzNzg2YmUzODg1YmYzOTg0YzAzYTgzYzEzYjgyYzIzYzgxYzMzZDgwYzQzZTdmYzU0MDdlYzY0MTdkYzc0MjdjYzg0MzdiYzk0NDdhY2E0NTdhY2I0Njc5Y2M0Nzc4Y2M0OTc3Y2Q0YTc2Y2U0Yjc1Y2Y0Yzc0ZDA0ZDczZDE0ZTcyZDI0ZjcxZDM1MTcxZDQ1MjcwZDU1MzZmZDU1NDZlZDY1NTZkZDc1NjZjZDg1NzZiZDk1ODZhZGE1YTZhZGE1YjY5ZGI1YzY4ZGM1ZDY3ZGQ1ZTY2ZGU1ZjY1ZGU2MTY0ZGY2MjYzZTA2MzYzZTE2NDYyZTI2NTYxZTI2NjYwZTM2ODVmZTQ2OTVlZTU2YTVkZTU2YjVkZTY2YzVjZTc2ZTViZTc2ZjVhZTg3MDU5ZTk3MTU4ZTk3MjU3ZWE3NDU3ZWI3NTU2ZWI3NjU1ZWM3NzU0ZWQ3OTUzZWQ3YTUyZWU3YjUxZWY3YzUxZWY3ZTUwZjA3ZjRmZjA4MDRlZjE4MTRkZjE4MzRjZjI4NDRiZjM4NTRiZjM4NzRhZjQ4ODQ5ZjQ4OTQ4ZjU4YjQ3ZjU4YzQ2ZjY4ZDQ1ZjY4ZjQ0Zjc5MDQ0Zjc5MTQzZjc5MzQyZjg5NDQxZjg5NTQwZjk5NzNmZjk5ODNlZjk5YTNlZmE5YjNkZmE5YzNjZmE5ZTNiZmI5ZjNhZmJhMTM5ZmJhMjM4ZmNhMzM4ZmNhNTM3ZmNhNjM2ZmNhODM1ZmNhOTM0ZmRhYjMzZmRhYzMzZmRhZTMyZmRhZjMxZmRiMTMwZmRiMjJmZmRiNDJmZmRiNTJlZmViNzJkZmViODJjZmViYTJjZmViYjJiZmViZDJhZmViZTJhZmVjMDI5ZmRjMjI5ZmRjMzI4ZmRjNTI3ZmRjNjI3ZmRjODI3ZmRjYTI2ZmRjYjI2ZmNjZDI1ZmNjZTI1ZmNkMDI1ZmNkMjI1ZmJkMzI0ZmJkNTI0ZmJkNzI0ZmFkODI0ZmFkYTI0ZjlkYzI0ZjlkZDI1ZjhkZjI1ZjhlMTI1ZjdlMjI1ZjdlNDI1ZjZlNjI2ZjZlODI2ZjVlOTI2ZjVlYjI3ZjRlZDI3ZjNlZTI3ZjNmMDI3ZjJmMjI3ZjFmNDI2ZjFmNTI1ZjBmNzI0ZjBmOTIxIikpO2Z1bmN0aW9uIFNrKHQpe3JldHVybiBmdW5jdGlvbiBlKCl7cmV0dXJuIHR9fXZhciBNaz1NYXRoLmFicyxFaz1NYXRoLmF0YW4yLFRrPU1hdGguY29zLENrPU1hdGgubWF4LEFrPU1hdGgubWluLGtrPU1hdGguc2luLExrPU1hdGguc3FydCxQaz0xZS0xMixOaz1NYXRoLlBJLElrPU5rLzIsT2s9MipOaztmdW5jdGlvbiBSayh0KXtyZXR1cm4gdD4xPzA6dDwtMT9OazpNYXRoLmFjb3ModCl9ZnVuY3Rpb24gemsodCl7cmV0dXJuIHQ+PTE/SWs6dDw9LTE/LUlrOk1hdGguYXNpbih0KX1mdW5jdGlvbiBEayh0KXtyZXR1cm4gdC5pbm5lclJhZGl1c31mdW5jdGlvbiBCayh0KXtyZXR1cm4gdC5vdXRlclJhZGl1c31mdW5jdGlvbiBIayh0KXtyZXR1cm4gdC5zdGFydEFuZ2xlfWZ1bmN0aW9uIEZrKHQpe3JldHVybiB0LmVuZEFuZ2xlfWZ1bmN0aW9uIFZrKHQpe3JldHVybiB0JiZ0LnBhZEFuZ2xlfWZ1bmN0aW9uIFVrKHQsZSxuLGkscixvLGEscyl7dmFyIGw9bi10LGM9aS1lLHU9YS1yLGg9cy1vLGQ9aCpsLXUqYztpZighKGQqZDxQaykpcmV0dXJuW3QrKGQ9KHUqKGUtbyktaCoodC1yKSkvZCkqbCxlK2QqY119ZnVuY3Rpb24gamsodCxlLG4saSxyLG8sYSl7dmFyIHM9dC1uLGw9ZS1pLGM9KGE/bzotbykvTGsocypzK2wqbCksdT1jKmwsaD0tYypzLGQ9dCt1LHA9ZStoLGY9bit1LG09aStoLGc9KGQrZikvMixfPShwK20pLzIseT1mLWQsdj1tLXAsYj15Knkrdip2LHg9ci1vLHc9ZCptLWYqcCxTPSh2PDA/LTE6MSkqTGsoQ2soMCx4KngqYi13KncpKSxNPSh3KnYteSpTKS9iLEU9KC13KnktdipTKS9iLFQ9KHcqdit5KlMpL2IsQz0oLXcqeSt2KlMpL2IsQT1NLWcsaz1FLV8sTD1ULWcsUD1DLV87cmV0dXJuIEEqQStrKms+TCpMK1AqUCYmKE09VCxFPUMpLHtjeDpNLGN5OkUseDAxOi11LHkwMTotaCx4MTE6TSooci94LTEpLHkxMTpFKihyL3gtMSl9fWZ1bmN0aW9uIEdrKHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBXayh0KXtyZXR1cm4gbmV3IEdrKHQpfWZ1bmN0aW9uIHFrKHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIFlrKHQpe3JldHVybiB0WzFdfWZ1bmN0aW9uIFhrKCl7dmFyIHQ9cWssZT1ZayxuPVNrKCEwKSxpPW51bGwscj1XayxvPW51bGw7ZnVuY3Rpb24gYShhKXt2YXIgcyxsLGMsdT1hLmxlbmd0aCxoPSExO2ZvcihudWxsPT1pJiYobz1yKGM9cGcoKSkpLHM9MDtzPD11OysrcykhKHM8dSYmbihsPWFbc10scyxhKSk9PT1oJiYoKGg9IWgpP28ubGluZVN0YXJ0KCk6by5saW5lRW5kKCkpLGgmJm8ucG9pbnQoK3QobCxzLGEpLCtlKGwscyxhKSk7aWYoYylyZXR1cm4gbz1udWxsLGMrIiJ8fG51bGx9cmV0dXJuIGEueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOlNrKCtlKSxhKTp0fSxhLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpTaygrdCksYSk6ZX0sYS5kZWZpbmVkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6U2soISF0KSxhKTpufSxhLmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsbnVsbCE9aSYmKG89cihpKSksYSk6cn0sYS5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT10P2k9bz1udWxsOm89cihpPXQpLGEpOml9LGF9ZnVuY3Rpb24gJGsoKXt2YXIgdD1xayxlPW51bGwsbj1TaygwKSxpPVlrLHI9U2soITApLG89bnVsbCxhPVdrLHM9bnVsbDtmdW5jdGlvbiBsKGwpe3ZhciBjLHUsaCxkLHAsZj1sLmxlbmd0aCxtPSExLGc9bmV3IEFycmF5KGYpLF89bmV3IEFycmF5KGYpO2ZvcihudWxsPT1vJiYocz1hKHA9cGcoKSkpLGM9MDtjPD1mOysrYyl7aWYoIShjPGYmJnIoZD1sW2NdLGMsbCkpPT09bSlpZihtPSFtKXU9YyxzLmFyZWFTdGFydCgpLHMubGluZVN0YXJ0KCk7ZWxzZXtmb3Iocy5saW5lRW5kKCkscy5saW5lU3RhcnQoKSxoPWMtMTtoPj11Oy0taClzLnBvaW50KGdbaF0sX1toXSk7cy5saW5lRW5kKCkscy5hcmVhRW5kKCl9bSYmKGdbY109K3QoZCxjLGwpLF9bY109K24oZCxjLGwpLHMucG9pbnQoZT8rZShkLGMsbCk6Z1tjXSxpPytpKGQsYyxsKTpfW2NdKSl9aWYocClyZXR1cm4gcz1udWxsLHArIiJ8fG51bGx9ZnVuY3Rpb24gYygpe3JldHVybiBYaygpLmRlZmluZWQocikuY3VydmUoYSkuY29udGV4dChvKX1yZXR1cm4gbC54PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBuP246U2soK24pLGU9bnVsbCxsKTp0fSxsLngwPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6U2soK2UpLGwpOnR9LGwueDE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bnVsbD09dD9udWxsOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6U2soK3QpLGwpOmV9LGwueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlNrKCt0KSxpPW51bGwsbCk6bn0sbC55MD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlNrKCt0KSxsKTpufSxsLnkxPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PXQ/bnVsbDoiZnVuY3Rpb24iPT10eXBlb2YgdD90OlNrKCt0KSxsKTppfSxsLmxpbmVYMD1sLmxpbmVZMD1mdW5jdGlvbigpe3JldHVybiBjKCkueCh0KS55KG4pfSxsLmxpbmVZMT1mdW5jdGlvbigpe3JldHVybiBjKCkueCh0KS55KGkpfSxsLmxpbmVYMT1mdW5jdGlvbigpe3JldHVybiBjKCkueChlKS55KG4pfSxsLmRlZmluZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpTayghIXQpLGwpOnJ9LGwuY3VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dCxudWxsIT1vJiYocz1hKG8pKSxsKTphfSxsLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/bz1zPW51bGw6cz1hKG89dCksbCk6b30sbH1mdW5jdGlvbiBLayh0LGUpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn1mdW5jdGlvbiBaayh0KXtyZXR1cm4gdH1Hay5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2RlZmF1bHQ6dGhpcy5fY29udGV4dC5saW5lVG8odCxlKX19fTt2YXIgSms9dEwoV2spO2Z1bmN0aW9uIFFrKHQpe3RoaXMuX2N1cnZlPXR9ZnVuY3Rpb24gdEwodCl7ZnVuY3Rpb24gZShlKXtyZXR1cm4gbmV3IFFrKHQoZSkpfXJldHVybiBlLl9jdXJ2ZT10LGV9ZnVuY3Rpb24gZUwodCl7dmFyIGU9dC5jdXJ2ZTtyZXR1cm4gdC5hbmdsZT10LngsZGVsZXRlIHQueCx0LnJhZGl1cz10LnksZGVsZXRlIHQueSx0LmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2UodEwodCkpOmUoKS5fY3VydmV9LHR9ZnVuY3Rpb24gbkwoKXtyZXR1cm4gZUwoWGsoKS5jdXJ2ZShKaykpfWZ1bmN0aW9uIGlMKCl7dmFyIHQ9JGsoKS5jdXJ2ZShKayksZT10LmN1cnZlLG49dC5saW5lWDAsaT10LmxpbmVYMSxyPXQubGluZVkwLG89dC5saW5lWTE7cmV0dXJuIHQuYW5nbGU9dC54LGRlbGV0ZSB0LngsdC5zdGFydEFuZ2xlPXQueDAsZGVsZXRlIHQueDAsdC5lbmRBbmdsZT10LngxLGRlbGV0ZSB0LngxLHQucmFkaXVzPXQueSxkZWxldGUgdC55LHQuaW5uZXJSYWRpdXM9dC55MCxkZWxldGUgdC55MCx0Lm91dGVyUmFkaXVzPXQueTEsZGVsZXRlIHQueTEsdC5saW5lU3RhcnRBbmdsZT1mdW5jdGlvbigpe3JldHVybiBlTChuKCkpfSxkZWxldGUgdC5saW5lWDAsdC5saW5lRW5kQW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gZUwoaSgpKX0sZGVsZXRlIHQubGluZVgxLHQubGluZUlubmVyUmFkaXVzPWZ1bmN0aW9uKCl7cmV0dXJuIGVMKHIoKSl9LGRlbGV0ZSB0LmxpbmVZMCx0LmxpbmVPdXRlclJhZGl1cz1mdW5jdGlvbigpe3JldHVybiBlTChvKCkpfSxkZWxldGUgdC5saW5lWTEsdC5jdXJ2ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9lKHRMKHQpKTplKCkuX2N1cnZlfSx0fWZ1bmN0aW9uIHJMKHQsZSl7cmV0dXJuWyhlPStlKSpNYXRoLmNvcyh0LT1NYXRoLlBJLzIpLGUqTWF0aC5zaW4odCldfVFrLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUuYXJlYVN0YXJ0KCl9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5hcmVhRW5kKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUubGluZUVuZCgpfSxwb2ludDpmdW5jdGlvbih0LGUpe3RoaXMuX2N1cnZlLnBvaW50KGUqTWF0aC5zaW4odCksZSotTWF0aC5jb3ModCkpfX07dmFyIG9MPUFycmF5LnByb3RvdHlwZS5zbGljZTtmdW5jdGlvbiBhTCh0KXtyZXR1cm4gdC5zb3VyY2V9ZnVuY3Rpb24gc0wodCl7cmV0dXJuIHQudGFyZ2V0fWZ1bmN0aW9uIGxMKHQpe3ZhciBlPWFMLG49c0wsaT1xayxyPVlrLG89bnVsbDtmdW5jdGlvbiBhKCl7dmFyIGEscz1vTC5jYWxsKGFyZ3VtZW50cyksbD1lLmFwcGx5KHRoaXMscyksYz1uLmFwcGx5KHRoaXMscyk7aWYob3x8KG89YT1wZygpKSx0KG8sK2kuYXBwbHkodGhpcywoc1swXT1sLHMpKSwrci5hcHBseSh0aGlzLHMpLCtpLmFwcGx5KHRoaXMsKHNbMF09YyxzKSksK3IuYXBwbHkodGhpcyxzKSksYSlyZXR1cm4gbz1udWxsLGErIiJ8fG51bGx9cmV0dXJuIGEuc291cmNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsYSk6ZX0sYS50YXJnZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxhKTpufSxhLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpTaygrdCksYSk6aX0sYS55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6U2soK3QpLGEpOnJ9LGEuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1udWxsPT10P251bGw6dCxhKTpvfSxhfWZ1bmN0aW9uIGNMKHQsZSxuLGkscil7dC5tb3ZlVG8oZSxuKSx0LmJlemllckN1cnZlVG8oZT0oZStpKS8yLG4sZSxyLGkscil9ZnVuY3Rpb24gdUwodCxlLG4saSxyKXt0Lm1vdmVUbyhlLG4pLHQuYmV6aWVyQ3VydmVUbyhlLG49KG4rcikvMixpLG4saSxyKX1mdW5jdGlvbiBoTCh0LGUsbixpLHIpe3ZhciBvPXJMKGUsbiksYT1yTChlLG49KG4rcikvMikscz1yTChpLG4pLGw9ckwoaSxyKTt0Lm1vdmVUbyhvWzBdLG9bMV0pLHQuYmV6aWVyQ3VydmVUbyhhWzBdLGFbMV0sc1swXSxzWzFdLGxbMF0sbFsxXSl9dmFyIGRMPXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIG49TWF0aC5zcXJ0KGUvTmspO3QubW92ZVRvKG4sMCksdC5hcmMoMCwwLG4sMCxPayl9fSxwTD17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciBuPU1hdGguc3FydChlLzUpLzI7dC5tb3ZlVG8oLTMqbiwtbiksdC5saW5lVG8oLW4sLW4pLHQubGluZVRvKC1uLC0zKm4pLHQubGluZVRvKG4sLTMqbiksdC5saW5lVG8obiwtbiksdC5saW5lVG8oMypuLC1uKSx0LmxpbmVUbygzKm4sbiksdC5saW5lVG8obixuKSx0LmxpbmVUbyhuLDMqbiksdC5saW5lVG8oLW4sMypuKSx0LmxpbmVUbygtbixuKSx0LmxpbmVUbygtMypuLG4pLHQuY2xvc2VQYXRoKCl9fSxmTD1NYXRoLnNxcnQoMS8zKSxtTD0yKmZMLGdMPXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIG49TWF0aC5zcXJ0KGUvbUwpLGk9bipmTDt0Lm1vdmVUbygwLC1uKSx0LmxpbmVUbyhpLDApLHQubGluZVRvKDAsbiksdC5saW5lVG8oLWksMCksdC5jbG9zZVBhdGgoKX19LF9MPU1hdGguc2luKE5rLzEwKS9NYXRoLnNpbig3Kk5rLzEwKSx5TD1NYXRoLnNpbihPay8xMCkqX0wsdkw9LU1hdGguY29zKE9rLzEwKSpfTCxiTD17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciBuPU1hdGguc3FydCguODkwODEzMDkxNTI5Mjg1MiplKSxpPXlMKm4scj12TCpuO3QubW92ZVRvKDAsLW4pLHQubGluZVRvKGkscik7Zm9yKHZhciBvPTE7bzw1Oysrbyl7dmFyIGE9T2sqby81LHM9TWF0aC5jb3MoYSksbD1NYXRoLnNpbihhKTt0LmxpbmVUbyhsKm4sLXMqbiksdC5saW5lVG8ocyppLWwqcixsKmkrcypyKX10LmNsb3NlUGF0aCgpfX0seEw9e2RyYXc6ZnVuY3Rpb24odCxlKXt2YXIgbj1NYXRoLnNxcnQoZSksaT0tbi8yO3QucmVjdChpLGksbixuKX19LHdMPU1hdGguc3FydCgzKSxTTD17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciBuPS1NYXRoLnNxcnQoZS8oMyp3TCkpO3QubW92ZVRvKDAsMipuKSx0LmxpbmVUbygtd0wqbiwtbiksdC5saW5lVG8od0wqbiwtbiksdC5jbG9zZVBhdGgoKX19LE1MPS0uNSxFTD1NYXRoLnNxcnQoMykvMixUTD0xL01hdGguc3FydCgxMiksQ0w9MyooVEwvMisxKSxBTD17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciBuPU1hdGguc3FydChlL0NMKSxpPW4vMixyPW4qVEwsbz1pLGE9bipUTCtuLHM9LW8sbD1hO3QubW92ZVRvKGksciksdC5saW5lVG8obyxhKSx0LmxpbmVUbyhzLGwpLHQubGluZVRvKE1MKmktRUwqcixFTCppK01MKnIpLHQubGluZVRvKE1MKm8tRUwqYSxFTCpvK01MKmEpLHQubGluZVRvKE1MKnMtRUwqbCxFTCpzK01MKmwpLHQubGluZVRvKE1MKmkrRUwqcixNTCpyLUVMKmkpLHQubGluZVRvKE1MKm8rRUwqYSxNTCphLUVMKm8pLHQubGluZVRvKE1MKnMrRUwqbCxNTCpsLUVMKnMpLHQuY2xvc2VQYXRoKCl9fSxrTD1bZEwscEwsZ0wseEwsYkwsU0wsQUxdO2Z1bmN0aW9uIExMKCl7fWZ1bmN0aW9uIFBMKHQsZSxuKXt0Ll9jb250ZXh0LmJlemllckN1cnZlVG8oKDIqdC5feDArdC5feDEpLzMsKDIqdC5feTArdC5feTEpLzMsKHQuX3gwKzIqdC5feDEpLzMsKHQuX3kwKzIqdC5feTEpLzMsKHQuX3gwKzQqdC5feDErZSkvNiwodC5feTArNCp0Ll95MStuKS82KX1mdW5jdGlvbiBOTCh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gSUwodCl7cmV0dXJuIG5ldyBOTCh0KX1mdW5jdGlvbiBPTCh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gUkwodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIHpMKHQsZSl7dGhpcy5fYmFzaXM9bmV3IE5MKHQpLHRoaXMuX2JldGE9ZX1OTC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAzOlBMKHRoaXMsdGhpcy5feDEsdGhpcy5feTEpO2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSl9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2NvbnRleHQubGluZVRvKCg1KnRoaXMuX3gwK3RoaXMuX3gxKS82LCg1KnRoaXMuX3kwK3RoaXMuX3kxKS82KTtkZWZhdWx0OlBMKHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWV9fSxPTC5wcm90b3R5cGU9e2FyZWFTdGFydDpMTCxhcmVhRW5kOkxMLGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAyOnRoaXMuX2NvbnRleHQubW92ZVRvKCh0aGlzLl94MisyKnRoaXMuX3gzKS8zLCh0aGlzLl95MisyKnRoaXMuX3kzKS8zKSx0aGlzLl9jb250ZXh0LmxpbmVUbygodGhpcy5feDMrMip0aGlzLl94MikvMywodGhpcy5feTMrMip0aGlzLl95MikvMyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Mix0aGlzLl95MiksdGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCl9fSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gyPXQsdGhpcy5feTI9ZTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl94Mz10LHRoaXMuX3kzPWU7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDQ9dCx0aGlzLl95ND1lLHRoaXMuX2NvbnRleHQubW92ZVRvKCh0aGlzLl94MCs0KnRoaXMuX3gxK3QpLzYsKHRoaXMuX3kwKzQqdGhpcy5feTErZSkvNik7YnJlYWs7ZGVmYXVsdDpQTCh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1lfX0sUkwucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjM9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7dmFyIG49KHRoaXMuX3gwKzQqdGhpcy5feDErdCkvNixpPSh0aGlzLl95MCs0KnRoaXMuX3kxK2UpLzY7dGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhuLGkpOnRoaXMuX2NvbnRleHQubW92ZVRvKG4saSk7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpQTCh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1lfX0sekwucHJvdG90eXBlPXtsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PVtdLHRoaXMuX3k9W10sdGhpcy5fYmFzaXMubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl94LGU9dGhpcy5feSxuPXQubGVuZ3RoLTE7aWYobj4wKWZvcih2YXIgaSxyPXRbMF0sbz1lWzBdLGE9dFtuXS1yLHM9ZVtuXS1vLGw9LTE7KytsPD1uOyl0aGlzLl9iYXNpcy5wb2ludCh0aGlzLl9iZXRhKnRbbF0rKDEtdGhpcy5fYmV0YSkqKHIrKGk9bC9uKSphKSx0aGlzLl9iZXRhKmVbbF0rKDEtdGhpcy5fYmV0YSkqKG8raSpzKSk7dGhpcy5feD10aGlzLl95PW51bGwsdGhpcy5fYmFzaXMubGluZUVuZCgpfSxwb2ludDpmdW5jdGlvbih0LGUpe3RoaXMuX3gucHVzaCgrdCksdGhpcy5feS5wdXNoKCtlKX19O3ZhciBETD0oZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiAxPT09ZT9uZXcgTkwodCk6bmV3IHpMKHQsZSl9cmV0dXJuIG4uYmV0YT1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LG59KSguODUpO2Z1bmN0aW9uIEJMKHQsZSxuKXt0Ll9jb250ZXh0LmJlemllckN1cnZlVG8odC5feDErdC5fayoodC5feDItdC5feDApLHQuX3kxK3QuX2sqKHQuX3kyLXQuX3kwKSx0Ll94Mit0Ll9rKih0Ll94MS1lKSx0Ll95Mit0Ll9rKih0Ll95MS1uKSx0Ll94Mix0Ll95Mil9ZnVuY3Rpb24gSEwodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1lKS82fUhMLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzpCTCh0aGlzLHRoaXMuX3gxLHRoaXMuX3kxKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5feDE9dCx0aGlzLl95MT1lO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO2RlZmF1bHQ6QkwodGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19O3ZhciBGTD0oZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBuZXcgSEwodCxlKX1yZXR1cm4gbi50ZW5zaW9uPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0pKDApO2Z1bmN0aW9uIFZMKHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2s9KDEtZSkvNn1WTC5wcm90b3R5cGU9e2FyZWFTdGFydDpMTCxhcmVhRW5kOkxMLGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KX19LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDM9dCx0aGlzLl95Mz1lO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3g0PXQsdGhpcy5feTQ9ZSk7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDU9dCx0aGlzLl95NT1lO2JyZWFrO2RlZmF1bHQ6QkwodGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19O3ZhciBVTD0oZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBuZXcgVkwodCxlKX1yZXR1cm4gbi50ZW5zaW9uPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0pKDApO2Z1bmN0aW9uIGpMKHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2s9KDEtZSkvNn1qTC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMz09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpCTCh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07dmFyIEdMPShmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIG5ldyBqTCh0LGUpfXJldHVybiBuLnRlbnNpb249ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSkoMCk7ZnVuY3Rpb24gV0wodCxlLG4pe3ZhciBpPXQuX3gxLHI9dC5feTEsbz10Ll94MixhPXQuX3kyO2lmKHQuX2wwMV9hPlBrKXt2YXIgcz0yKnQuX2wwMV8yYSszKnQuX2wwMV9hKnQuX2wxMl9hK3QuX2wxMl8yYSxsPTMqdC5fbDAxX2EqKHQuX2wwMV9hK3QuX2wxMl9hKTtpPShpKnMtdC5feDAqdC5fbDEyXzJhK3QuX3gyKnQuX2wwMV8yYSkvbCxyPShyKnMtdC5feTAqdC5fbDEyXzJhK3QuX3kyKnQuX2wwMV8yYSkvbH1pZih0Ll9sMjNfYT5Qayl7dmFyIGM9Mip0Ll9sMjNfMmErMyp0Ll9sMjNfYSp0Ll9sMTJfYSt0Ll9sMTJfMmEsdT0zKnQuX2wyM19hKih0Ll9sMjNfYSt0Ll9sMTJfYSk7bz0obypjK3QuX3gxKnQuX2wyM18yYS1lKnQuX2wxMl8yYSkvdSxhPShhKmMrdC5feTEqdC5fbDIzXzJhLW4qdC5fbDEyXzJhKS91fXQuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhpLHIsbyxhLHQuX3gyLHQuX3kyKX1mdW5jdGlvbiBxTCh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9hbHBoYT1lfXFMLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gyLHRoaXMuX3kyKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7aWYodD0rdCxlPStlLHRoaXMuX3BvaW50KXt2YXIgbj10aGlzLl94Mi10LGk9dGhpcy5feTItZTt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KG4qbitpKmksdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO2RlZmF1bHQ6V0wodGhpcyx0LGUpfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIgWUw9KGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gZT9uZXcgcUwodCxlKTpuZXcgSEwodCwwKX1yZXR1cm4gbi5hbHBoYT1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LG59KSguNSk7ZnVuY3Rpb24gWEwodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fYWxwaGE9ZX1YTC5wcm90b3R5cGU9e2FyZWFTdGFydDpMTCxhcmVhRW5kOkxMLGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KX19LHBvaW50OmZ1bmN0aW9uKHQsZSl7aWYodD0rdCxlPStlLHRoaXMuX3BvaW50KXt2YXIgbj10aGlzLl94Mi10LGk9dGhpcy5feTItZTt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KG4qbitpKmksdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gzPXQsdGhpcy5feTM9ZTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94ND10LHRoaXMuX3k0PWUpO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g1PXQsdGhpcy5feTU9ZTticmVhaztkZWZhdWx0OldMKHRoaXMsdCxlKX10aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07dmFyICRMPShmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIGU/bmV3IFhMKHQsZSk6bmV3IFZMKHQsMCl9cmV0dXJuIG4uYWxwaGE9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSkoLjUpO2Z1bmN0aW9uIEtMKHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2FscGhhPWV9S0wucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjM9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7aWYodD0rdCxlPStlLHRoaXMuX3BvaW50KXt2YXIgbj10aGlzLl94Mi10LGk9dGhpcy5feTItZTt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KG4qbitpKmksdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0OldMKHRoaXMsdCxlKX10aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07dmFyIFpMPShmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIGU/bmV3IEtMKHQsZSk6bmV3IGpMKHQsMCl9cmV0dXJuIG4uYWxwaGE9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSkoLjUpO2Z1bmN0aW9uIEpMKHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBRTCh0KXtyZXR1cm4gdDwwPy0xOjF9ZnVuY3Rpb24gdFAodCxlLG4pe3ZhciBpPXQuX3gxLXQuX3gwLHI9ZS10Ll94MSxvPSh0Ll95MS10Ll95MCkvKGl8fHI8MCYmLTApLGE9KG4tdC5feTEpLyhyfHxpPDAmJi0wKSxzPShvKnIrYSppKS8oaStyKTtyZXR1cm4oUUwobykrUUwoYSkpKk1hdGgubWluKE1hdGguYWJzKG8pLE1hdGguYWJzKGEpLC41Kk1hdGguYWJzKHMpKXx8MH1mdW5jdGlvbiBlUCh0LGUpe3ZhciBuPXQuX3gxLXQuX3gwO3JldHVybiBuPygzKih0Ll95MS10Ll95MCkvbi1lKS8yOmV9ZnVuY3Rpb24gblAodCxlLG4pe3ZhciBpPXQuX3gwLHI9dC5feDEsbz10Ll95MSxhPShyLWkpLzM7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKGkrYSx0Ll95MCthKmUsci1hLG8tYSpuLHIsbyl9ZnVuY3Rpb24gaVAodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIHJQKHQpe3RoaXMuX2NvbnRleHQ9bmV3IG9QKHQpfWZ1bmN0aW9uIG9QKHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBhUCh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gc1AodCl7dmFyIGUsbixpPXQubGVuZ3RoLTEscj1uZXcgQXJyYXkoaSksbz1uZXcgQXJyYXkoaSksYT1uZXcgQXJyYXkoaSk7Zm9yKHJbMF09MCxvWzBdPTIsYVswXT10WzBdKzIqdFsxXSxlPTE7ZTxpLTE7KytlKXJbZV09MSxvW2VdPTQsYVtlXT00KnRbZV0rMip0W2UrMV07Zm9yKHJbaS0xXT0yLG9baS0xXT03LGFbaS0xXT04KnRbaS0xXSt0W2ldLGU9MTtlPGk7KytlKW9bZV0tPW49cltlXS9vW2UtMV0sYVtlXS09biphW2UtMV07Zm9yKHJbaS0xXT1hW2ktMV0vb1tpLTFdLGU9aS0yO2U+PTA7LS1lKXJbZV09KGFbZV0tcltlKzFdKS9vW2VdO2ZvcihvW2ktMV09KHRbaV0rcltpLTFdKS8yLGU9MDtlPGktMTsrK2Upb1tlXT0yKnRbZSsxXS1yW2UrMV07cmV0dXJuW3Isb119ZnVuY3Rpb24gbFAodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fdD1lfWZ1bmN0aW9uIGNQKHQsZSl7aWYoKHI9dC5sZW5ndGgpPjEpZm9yKHZhciBuLGkscixvPTEsYT10W2VbMF1dLHM9YS5sZW5ndGg7bzxyOysrbylmb3IoaT1hLGE9dFtlW29dXSxuPTA7bjxzOysrbilhW25dWzFdKz1hW25dWzBdPWlzTmFOKGlbbl1bMV0pP2lbbl1bMF06aVtuXVsxXX1mdW5jdGlvbiB1UCh0KXtmb3IodmFyIGU9dC5sZW5ndGgsbj1uZXcgQXJyYXkoZSk7LS1lPj0wOyluW2VdPWU7cmV0dXJuIG59ZnVuY3Rpb24gaFAodCxlKXtyZXR1cm4gdFtlXX1mdW5jdGlvbiBkUCh0KXt2YXIgZT10Lm1hcChwUCk7cmV0dXJuIHVQKHQpLnNvcnQoKGZ1bmN0aW9uKHQsbil7cmV0dXJuIGVbdF0tZVtuXX0pKX1mdW5jdGlvbiBwUCh0KXtmb3IodmFyIGUsbj0tMSxpPTAscj10Lmxlbmd0aCxvPS0xLzA7KytuPHI7KShlPSt0W25dWzFdKT5vJiYobz1lLGk9bik7cmV0dXJuIGl9ZnVuY3Rpb24gZlAodCl7dmFyIGU9dC5tYXAobVApO3JldHVybiB1UCh0KS5zb3J0KChmdW5jdGlvbih0LG4pe3JldHVybiBlW3RdLWVbbl19KSl9ZnVuY3Rpb24gbVAodCl7Zm9yKHZhciBlLG49MCxpPS0xLHI9dC5sZW5ndGg7KytpPHI7KShlPSt0W2ldWzFdKSYmKG4rPWUpO3JldHVybiBufWZ1bmN0aW9uIGdQKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBfUCh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiB5UCh0KXtyZXR1cm4gdFsxXX1mdW5jdGlvbiB2UCgpe3RoaXMuXz1udWxsfWZ1bmN0aW9uIGJQKHQpe3QuVT10LkM9dC5MPXQuUj10LlA9dC5OPW51bGx9ZnVuY3Rpb24geFAodCxlKXt2YXIgbj1lLGk9ZS5SLHI9bi5VO3I/ci5MPT09bj9yLkw9aTpyLlI9aTp0Ll89aSxpLlU9cixuLlU9aSxuLlI9aS5MLG4uUiYmKG4uUi5VPW4pLGkuTD1ufWZ1bmN0aW9uIHdQKHQsZSl7dmFyIG49ZSxpPWUuTCxyPW4uVTtyP3IuTD09PW4/ci5MPWk6ci5SPWk6dC5fPWksaS5VPXIsbi5VPWksbi5MPWkuUixuLkwmJihuLkwuVT1uKSxpLlI9bn1mdW5jdGlvbiBTUCh0KXtmb3IoO3QuTDspdD10Lkw7cmV0dXJuIHR9ZnVuY3Rpb24gTVAodCxlLG4saSl7dmFyIHI9W251bGwsbnVsbF0sbz1YUC5wdXNoKHIpLTE7cmV0dXJuIHIubGVmdD10LHIucmlnaHQ9ZSxuJiZUUChyLHQsZSxuKSxpJiZUUChyLGUsdCxpKSxxUFt0LmluZGV4XS5oYWxmZWRnZXMucHVzaChvKSxxUFtlLmluZGV4XS5oYWxmZWRnZXMucHVzaChvKSxyfWZ1bmN0aW9uIEVQKHQsZSxuKXt2YXIgaT1bZSxuXTtyZXR1cm4gaS5sZWZ0PXQsaX1mdW5jdGlvbiBUUCh0LGUsbixpKXt0WzBdfHx0WzFdP3QubGVmdD09PW4/dFsxXT1pOnRbMF09aToodFswXT1pLHQubGVmdD1lLHQucmlnaHQ9bil9ZnVuY3Rpb24gQ1AodCxlLG4saSxyKXt2YXIgbyxhPXRbMF0scz10WzFdLGw9YVswXSxjPWFbMV0sdT0wLGg9MSxkPXNbMF0tbCxwPXNbMV0tYztpZihvPWUtbCxkfHwhKG8+MCkpe2lmKG8vPWQsZDwwKXtpZihvPHUpcmV0dXJuO288aCYmKGg9byl9ZWxzZSBpZihkPjApe2lmKG8+aClyZXR1cm47bz51JiYodT1vKX1pZihvPWktbCxkfHwhKG88MCkpe2lmKG8vPWQsZDwwKXtpZihvPmgpcmV0dXJuO28+dSYmKHU9byl9ZWxzZSBpZihkPjApe2lmKG88dSlyZXR1cm47bzxoJiYoaD1vKX1pZihvPW4tYyxwfHwhKG8+MCkpe2lmKG8vPXAscDwwKXtpZihvPHUpcmV0dXJuO288aCYmKGg9byl9ZWxzZSBpZihwPjApe2lmKG8+aClyZXR1cm47bz51JiYodT1vKX1pZihvPXItYyxwfHwhKG88MCkpe2lmKG8vPXAscDwwKXtpZihvPmgpcmV0dXJuO28+dSYmKHU9byl9ZWxzZSBpZihwPjApe2lmKG88dSlyZXR1cm47bzxoJiYoaD1vKX1yZXR1cm4hKHU+MHx8aDwxKXx8KHU+MCYmKHRbMF09W2wrdSpkLGMrdSpwXSksaDwxJiYodFsxXT1bbCtoKmQsYytoKnBdKSwhMCl9fX19fWZ1bmN0aW9uIEFQKHQsZSxuLGkscil7dmFyIG89dFsxXTtpZihvKXJldHVybiEwO3ZhciBhLHMsbD10WzBdLGM9dC5sZWZ0LHU9dC5yaWdodCxoPWNbMF0sZD1jWzFdLHA9dVswXSxmPXVbMV0sbT0oaCtwKS8yO2lmKGY9PT1kKXtpZihtPGV8fG0+PWkpcmV0dXJuO2lmKGg+cCl7aWYobCl7aWYobFsxXT49cilyZXR1cm59ZWxzZSBsPVttLG5dO289W20scl19ZWxzZXtpZihsKXtpZihsWzFdPG4pcmV0dXJufWVsc2UgbD1bbSxyXTtvPVttLG5dfX1lbHNlIGlmKHM9KGQrZikvMi0oYT0oaC1wKS8oZi1kKSkqbSxhPC0xfHxhPjEpaWYoaD5wKXtpZihsKXtpZihsWzFdPj1yKXJldHVybn1lbHNlIGw9WyhuLXMpL2Esbl07bz1bKHItcykvYSxyXX1lbHNle2lmKGwpe2lmKGxbMV08bilyZXR1cm59ZWxzZSBsPVsoci1zKS9hLHJdO289WyhuLXMpL2Esbl19ZWxzZSBpZihkPGYpe2lmKGwpe2lmKGxbMF0+PWkpcmV0dXJufWVsc2UgbD1bZSxhKmUrc107bz1baSxhKmkrc119ZWxzZXtpZihsKXtpZihsWzBdPGUpcmV0dXJufWVsc2UgbD1baSxhKmkrc107bz1bZSxhKmUrc119cmV0dXJuIHRbMF09bCx0WzFdPW8sITB9ZnVuY3Rpb24ga1AodCxlKXt2YXIgbj10LnNpdGUsaT1lLmxlZnQscj1lLnJpZ2h0O3JldHVybiBuPT09ciYmKHI9aSxpPW4pLHI/TWF0aC5hdGFuMihyWzFdLWlbMV0sclswXS1pWzBdKToobj09PWk/KGk9ZVsxXSxyPWVbMF0pOihpPWVbMF0scj1lWzFdKSxNYXRoLmF0YW4yKGlbMF0tclswXSxyWzFdLWlbMV0pKX1mdW5jdGlvbiBMUCh0LGUpe3JldHVybiBlWysoZS5sZWZ0IT09dC5zaXRlKV19ZnVuY3Rpb24gUFAodCxlKXtyZXR1cm4gZVsrKGUubGVmdD09PXQuc2l0ZSldfUpMLnByb3RvdHlwZT17YXJlYVN0YXJ0OkxMLGFyZWFFbmQ6TEwsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX3BvaW50JiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpfSxwb2ludDpmdW5jdGlvbih0LGUpe3Q9K3QsZT0rZSx0aGlzLl9wb2ludD90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOih0aGlzLl9wb2ludD0xLHRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSkpfX0saVAucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5fdDA9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSk7YnJlYWs7Y2FzZSAzOm5QKHRoaXMsdGhpcy5fdDAsZVAodGhpcyx0aGlzLl90MCkpfSh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXt2YXIgbj1OYU47aWYoZT0rZSwodD0rdCkhPT10aGlzLl94MXx8ZSE9PXRoaXMuX3kxKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLG5QKHRoaXMsZVAodGhpcyxuPXRQKHRoaXMsdCxlKSksbik7YnJlYWs7ZGVmYXVsdDpuUCh0aGlzLHRoaXMuX3QwLG49dFAodGhpcyx0LGUpKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWUsdGhpcy5fdDA9bn19fSwoclAucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoaVAucHJvdG90eXBlKSkucG9pbnQ9ZnVuY3Rpb24odCxlKXtpUC5wcm90b3R5cGUucG9pbnQuY2FsbCh0aGlzLGUsdCl9LG9QLnByb3RvdHlwZT17bW92ZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7dGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKX0sbGluZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbih0LGUsbixpLHIsbyl7dGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKGUsdCxpLG4sbyxyKX19LGFQLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9W10sdGhpcy5feT1bXX0sbGluZUVuZDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3gsZT10aGlzLl95LG49dC5sZW5ndGg7aWYobilpZih0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRbMF0sZVswXSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odFswXSxlWzBdKSwyPT09bil0aGlzLl9jb250ZXh0LmxpbmVUbyh0WzFdLGVbMV0pO2Vsc2UgZm9yKHZhciBpPXNQKHQpLHI9c1AoZSksbz0wLGE9MTthPG47KytvLCsrYSl0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8oaVswXVtvXSxyWzBdW29dLGlbMV1bb10sclsxXVtvXSx0W2FdLGVbYV0pOyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PW4pJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lLHRoaXMuX3g9dGhpcy5feT1udWxsfSxwb2ludDpmdW5jdGlvbih0LGUpe3RoaXMuX3gucHVzaCgrdCksdGhpcy5feS5wdXNoKCtlKX19LGxQLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9dGhpcy5feT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpezA8dGhpcy5fdCYmdGhpcy5fdDwxJiYyPT09dGhpcy5fcG9pbnQmJnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsdGhpcy5feSksKHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU+PTAmJih0aGlzLl90PTEtdGhpcy5fdCx0aGlzLl9saW5lPTEtdGhpcy5fbGluZSl9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDppZih0aGlzLl90PD0wKXRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsZSksdGhpcy5fY29udGV4dC5saW5lVG8odCxlKTtlbHNle3ZhciBuPXRoaXMuX3gqKDEtdGhpcy5fdCkrdCp0aGlzLl90O3RoaXMuX2NvbnRleHQubGluZVRvKG4sdGhpcy5feSksdGhpcy5fY29udGV4dC5saW5lVG8obixlKX19dGhpcy5feD10LHRoaXMuX3k9ZX19LHZQLnByb3RvdHlwZT17Y29uc3RydWN0b3I6dlAsaW5zZXJ0OmZ1bmN0aW9uKHQsZSl7dmFyIG4saSxyO2lmKHQpe2lmKGUuUD10LGUuTj10Lk4sdC5OJiYodC5OLlA9ZSksdC5OPWUsdC5SKXtmb3IodD10LlI7dC5MOyl0PXQuTDt0Lkw9ZX1lbHNlIHQuUj1lO249dH1lbHNlIHRoaXMuXz8odD1TUCh0aGlzLl8pLGUuUD1udWxsLGUuTj10LHQuUD10Lkw9ZSxuPXQpOihlLlA9ZS5OPW51bGwsdGhpcy5fPWUsbj1udWxsKTtmb3IoZS5MPWUuUj1udWxsLGUuVT1uLGUuQz0hMCx0PWU7biYmbi5DOyluPT09KGk9bi5VKS5MPyhyPWkuUikmJnIuQz8obi5DPXIuQz0hMSxpLkM9ITAsdD1pKToodD09PW4uUiYmKHhQKHRoaXMsbiksbj0odD1uKS5VKSxuLkM9ITEsaS5DPSEwLHdQKHRoaXMsaSkpOihyPWkuTCkmJnIuQz8obi5DPXIuQz0hMSxpLkM9ITAsdD1pKToodD09PW4uTCYmKHdQKHRoaXMsbiksbj0odD1uKS5VKSxuLkM9ITEsaS5DPSEwLHhQKHRoaXMsaSkpLG49dC5VO3RoaXMuXy5DPSExfSxyZW1vdmU6ZnVuY3Rpb24odCl7dC5OJiYodC5OLlA9dC5QKSx0LlAmJih0LlAuTj10Lk4pLHQuTj10LlA9bnVsbDt2YXIgZSxuLGkscj10LlUsbz10LkwsYT10LlI7aWYobj1vP2E/U1AoYSk6bzphLHI/ci5MPT09dD9yLkw9bjpyLlI9bjp0aGlzLl89bixvJiZhPyhpPW4uQyxuLkM9dC5DLG4uTD1vLG8uVT1uLG4hPT1hPyhyPW4uVSxuLlU9dC5VLHIuTD10PW4uUixuLlI9YSxhLlU9bik6KG4uVT1yLHI9bix0PW4uUikpOihpPXQuQyx0PW4pLHQmJih0LlU9ciksIWkpaWYodCYmdC5DKXQuQz0hMTtlbHNle2Rve2lmKHQ9PT10aGlzLl8pYnJlYWs7aWYodD09PXIuTCl7aWYoKGU9ci5SKS5DJiYoZS5DPSExLHIuQz0hMCx4UCh0aGlzLHIpLGU9ci5SKSxlLkwmJmUuTC5DfHxlLlImJmUuUi5DKXtlLlImJmUuUi5DfHwoZS5MLkM9ITEsZS5DPSEwLHdQKHRoaXMsZSksZT1yLlIpLGUuQz1yLkMsci5DPWUuUi5DPSExLHhQKHRoaXMsciksdD10aGlzLl87YnJlYWt9fWVsc2UgaWYoKGU9ci5MKS5DJiYoZS5DPSExLHIuQz0hMCx3UCh0aGlzLHIpLGU9ci5MKSxlLkwmJmUuTC5DfHxlLlImJmUuUi5DKXtlLkwmJmUuTC5DfHwoZS5SLkM9ITEsZS5DPSEwLHhQKHRoaXMsZSksZT1yLkwpLGUuQz1yLkMsci5DPWUuTC5DPSExLHdQKHRoaXMsciksdD10aGlzLl87YnJlYWt9ZS5DPSEwLHQ9cixyPXIuVX13aGlsZSghdC5DKTt0JiYodC5DPSExKX19fTt2YXIgTlAsSVA9W107ZnVuY3Rpb24gT1AoKXtiUCh0aGlzKSx0aGlzLng9dGhpcy55PXRoaXMuYXJjPXRoaXMuc2l0ZT10aGlzLmN5PW51bGx9ZnVuY3Rpb24gUlAodCl7dmFyIGU9dC5QLG49dC5OO2lmKGUmJm4pe3ZhciBpPWUuc2l0ZSxyPXQuc2l0ZSxvPW4uc2l0ZTtpZihpIT09byl7dmFyIGE9clswXSxzPXJbMV0sbD1pWzBdLWEsYz1pWzFdLXMsdT1vWzBdLWEsaD1vWzFdLXMsZD0yKihsKmgtYyp1KTtpZighKGQ+PS1LUCkpe3ZhciBwPWwqbCtjKmMsZj11KnUraCpoLG09KGgqcC1jKmYpL2QsZz0obCpmLXUqcCkvZCxfPUlQLnBvcCgpfHxuZXcgT1A7Xy5hcmM9dCxfLnNpdGU9cixfLng9bSthLF8ueT0oXy5jeT1nK3MpK01hdGguc3FydChtKm0rZypnKSx0LmNpcmNsZT1fO2Zvcih2YXIgeT1udWxsLHY9WVAuXzt2OylpZihfLnk8di55fHxfLnk9PT12LnkmJl8ueDw9di54KXtpZighdi5MKXt5PXYuUDticmVha312PXYuTH1lbHNle2lmKCF2LlIpe3k9djticmVha312PXYuUn1ZUC5pbnNlcnQoeSxfKSx5fHwoTlA9Xyl9fX19ZnVuY3Rpb24gelAodCl7dmFyIGU9dC5jaXJjbGU7ZSYmKGUuUHx8KE5QPWUuTiksWVAucmVtb3ZlKGUpLElQLnB1c2goZSksYlAoZSksdC5jaXJjbGU9bnVsbCl9dmFyIERQPVtdO2Z1bmN0aW9uIEJQKCl7YlAodGhpcyksdGhpcy5lZGdlPXRoaXMuc2l0ZT10aGlzLmNpcmNsZT1udWxsfWZ1bmN0aW9uIEhQKHQpe3ZhciBlPURQLnBvcCgpfHxuZXcgQlA7cmV0dXJuIGUuc2l0ZT10LGV9ZnVuY3Rpb24gRlAodCl7elAodCksV1AucmVtb3ZlKHQpLERQLnB1c2godCksYlAodCl9ZnVuY3Rpb24gVlAodCl7dmFyIGU9dC5jaXJjbGUsbj1lLngsaT1lLmN5LHI9W24saV0sbz10LlAsYT10Lk4scz1bdF07RlAodCk7Zm9yKHZhciBsPW87bC5jaXJjbGUmJk1hdGguYWJzKG4tbC5jaXJjbGUueCk8JFAmJk1hdGguYWJzKGktbC5jaXJjbGUuY3kpPCRQOylvPWwuUCxzLnVuc2hpZnQobCksRlAobCksbD1vO3MudW5zaGlmdChsKSx6UChsKTtmb3IodmFyIGM9YTtjLmNpcmNsZSYmTWF0aC5hYnMobi1jLmNpcmNsZS54KTwkUCYmTWF0aC5hYnMoaS1jLmNpcmNsZS5jeSk8JFA7KWE9Yy5OLHMucHVzaChjKSxGUChjKSxjPWE7cy5wdXNoKGMpLHpQKGMpO3ZhciB1LGg9cy5sZW5ndGg7Zm9yKHU9MTt1PGg7Kyt1KVRQKChjPXNbdV0pLmVkZ2UsKGw9c1t1LTFdKS5zaXRlLGMuc2l0ZSxyKTsoYz1zW2gtMV0pLmVkZ2U9TVAoKGw9c1swXSkuc2l0ZSxjLnNpdGUsbnVsbCxyKSxSUChsKSxSUChjKX1mdW5jdGlvbiBVUCh0KXtmb3IodmFyIGUsbixpLHIsbz10WzBdLGE9dFsxXSxzPVdQLl87czspaWYoKGk9alAocyxhKS1vKT4kUClzPXMuTDtlbHNle2lmKCEoKHI9by1HUChzLGEpKT4kUCkpe2k+LSRQPyhlPXMuUCxuPXMpOnI+LSRQPyhlPXMsbj1zLk4pOmU9bj1zO2JyZWFrfWlmKCFzLlIpe2U9czticmVha31zPXMuUn0hKGZ1bmN0aW9uIGwodCl7cVBbdC5pbmRleF09e3NpdGU6dCxoYWxmZWRnZXM6W119fSkodCk7dmFyIGM9SFAodCk7aWYoV1AuaW5zZXJ0KGUsYyksZXx8bil7aWYoZT09PW4pcmV0dXJuIHpQKGUpLG49SFAoZS5zaXRlKSxXUC5pbnNlcnQoYyxuKSxjLmVkZ2U9bi5lZGdlPU1QKGUuc2l0ZSxjLnNpdGUpLFJQKGUpLHZvaWQgUlAobik7aWYobil7elAoZSkselAobik7dmFyIHU9ZS5zaXRlLGg9dVswXSxkPXVbMV0scD10WzBdLWgsZj10WzFdLWQsbT1uLnNpdGUsZz1tWzBdLWgsXz1tWzFdLWQseT0yKihwKl8tZipnKSx2PXAqcCtmKmYsYj1nKmcrXypfLHg9WyhfKnYtZipiKS95K2gsKHAqYi1nKnYpL3krZF07VFAobi5lZGdlLHUsbSx4KSxjLmVkZ2U9TVAodSx0LG51bGwseCksbi5lZGdlPU1QKHQsbSxudWxsLHgpLFJQKGUpLFJQKG4pfWVsc2UgYy5lZGdlPU1QKGUuc2l0ZSxjLnNpdGUpfX1mdW5jdGlvbiBqUCh0LGUpe3ZhciBuPXQuc2l0ZSxpPW5bMF0scj1uWzFdLG89ci1lO2lmKCFvKXJldHVybiBpO3ZhciBhPXQuUDtpZighYSlyZXR1cm4tMS8wO3ZhciBzPShuPWEuc2l0ZSlbMF0sbD1uWzFdLGM9bC1lO2lmKCFjKXJldHVybiBzO3ZhciB1PXMtaSxoPTEvby0xL2MsZD11L2M7cmV0dXJuIGg/KC1kK01hdGguc3FydChkKmQtMipoKih1KnUvKC0yKmMpLWwrYy8yK3Itby8yKSkpL2graTooaStzKS8yfWZ1bmN0aW9uIEdQKHQsZSl7dmFyIG49dC5OO2lmKG4pcmV0dXJuIGpQKG4sZSk7dmFyIGk9dC5zaXRlO3JldHVybiBpWzFdPT09ZT9pWzBdOjEvMH12YXIgV1AscVAsWVAsWFAsJFA9MWUtNixLUD0xZS0xMjtmdW5jdGlvbiBaUCh0LGUsbil7cmV0dXJuKHRbMF0tblswXSkqKGVbMV0tdFsxXSktKHRbMF0tZVswXSkqKG5bMV0tdFsxXSl9ZnVuY3Rpb24gSlAodCxlKXtyZXR1cm4gZVsxXS10WzFdfHxlWzBdLXRbMF19ZnVuY3Rpb24gUVAodCxlKXt2YXIgbixpLHIsbz10LnNvcnQoSlApLnBvcCgpO2ZvcihYUD1bXSxxUD1uZXcgQXJyYXkodC5sZW5ndGgpLFdQPW5ldyB2UCxZUD1uZXcgdlA7OylpZihyPU5QLG8mJighcnx8b1sxXTxyLnl8fG9bMV09PT1yLnkmJm9bMF08ci54KSlvWzBdPT09biYmb1sxXT09PWl8fChVUChvKSxuPW9bMF0saT1vWzFdKSxvPXQucG9wKCk7ZWxzZXtpZighcilicmVhaztWUChyLmFyYyl9aWYoKGZ1bmN0aW9uIGEoKXtmb3IodmFyIHQsZSxuLGkscj0wLG89cVAubGVuZ3RoO3I8bzsrK3IpaWYoKHQ9cVBbcl0pJiYoaT0oZT10LmhhbGZlZGdlcykubGVuZ3RoKSl7dmFyIGE9bmV3IEFycmF5KGkpLHM9bmV3IEFycmF5KGkpO2ZvcihuPTA7bjxpOysrbilhW25dPW4sc1tuXT1rUCh0LFhQW2Vbbl1dKTtmb3IoYS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiBzW2VdLXNbdF19KSksbj0wO248aTsrK24pc1tuXT1lW2Fbbl1dO2ZvcihuPTA7bjxpOysrbillW25dPXNbbl19fSkoKSxlKXt2YXIgcz0rZVswXVswXSxsPStlWzBdWzFdLGM9K2VbMV1bMF0sdT0rZVsxXVsxXTshKGZ1bmN0aW9uIGgodCxlLG4saSl7Zm9yKHZhciByLG89WFAubGVuZ3RoO28tLTspQVAocj1YUFtvXSx0LGUsbixpKSYmQ1Aocix0LGUsbixpKSYmKE1hdGguYWJzKHJbMF1bMF0tclsxXVswXSk+JFB8fE1hdGguYWJzKHJbMF1bMV0tclsxXVsxXSk+JFApfHxkZWxldGUgWFBbb119KShzLGwsYyx1KSwoZnVuY3Rpb24gZCh0LGUsbixpKXt2YXIgcixvLGEscyxsLGMsdSxoLGQscCxmLG0sZz1xUC5sZW5ndGgsXz0hMDtmb3Iocj0wO3I8ZzsrK3IpaWYobz1xUFtyXSl7Zm9yKGE9by5zaXRlLHM9KGw9by5oYWxmZWRnZXMpLmxlbmd0aDtzLS07KVhQW2xbc11dfHxsLnNwbGljZShzLDEpO2ZvcihzPTAsYz1sLmxlbmd0aDtzPGM7KWY9KHA9UFAobyxYUFtsW3NdXSkpWzBdLG09cFsxXSxoPSh1PUxQKG8sWFBbbFsrK3MlY11dKSlbMF0sZD11WzFdLChNYXRoLmFicyhmLWgpPiRQfHxNYXRoLmFicyhtLWQpPiRQKSYmKGwuc3BsaWNlKHMsMCxYUC5wdXNoKEVQKGEscCxNYXRoLmFicyhmLXQpPCRQJiZpLW0+JFA/W3QsTWF0aC5hYnMoaC10KTwkUD9kOmldOk1hdGguYWJzKG0taSk8JFAmJm4tZj4kUD9bTWF0aC5hYnMoZC1pKTwkUD9oOm4saV06TWF0aC5hYnMoZi1uKTwkUCYmbS1lPiRQP1tuLE1hdGguYWJzKGgtbik8JFA/ZDplXTpNYXRoLmFicyhtLWUpPCRQJiZmLXQ+JFA/W01hdGguYWJzKGQtZSk8JFA/aDp0LGVdOm51bGwpKS0xKSwrK2MpO2MmJihfPSExKX1pZihfKXt2YXIgeSx2LGIseD0xLzA7Zm9yKHI9MCxfPW51bGw7cjxnOysrcikobz1xUFtyXSkmJihiPSh5PShhPW8uc2l0ZSlbMF0tdCkqeSsodj1hWzFdLWUpKnYpPHgmJih4PWIsXz1vKTtpZihfKXt2YXIgdz1bdCxlXSxTPVt0LGldLE09W24saV0sRT1bbixlXTtfLmhhbGZlZGdlcy5wdXNoKFhQLnB1c2goRVAoYT1fLnNpdGUsdyxTKSktMSxYUC5wdXNoKEVQKGEsUyxNKSktMSxYUC5wdXNoKEVQKGEsTSxFKSktMSxYUC5wdXNoKEVQKGEsRSx3KSktMSl9fWZvcihyPTA7cjxnOysrcikobz1xUFtyXSkmJihvLmhhbGZlZGdlcy5sZW5ndGh8fGRlbGV0ZSBxUFtyXSl9KShzLGwsYyx1KX10aGlzLmVkZ2VzPVhQLHRoaXMuY2VsbHM9cVAsV1A9WVA9WFA9cVA9bnVsbH1mdW5jdGlvbiB0Tih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gZU4odCxlLG4pe3RoaXMudGFyZ2V0PXQsdGhpcy50eXBlPWUsdGhpcy50cmFuc2Zvcm09bn1mdW5jdGlvbiBuTih0LGUsbil7dGhpcy5rPXQsdGhpcy54PWUsdGhpcy55PW59UVAucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpRUCxwb2x5Z29uczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuZWRnZXM7cmV0dXJuIHRoaXMuY2VsbHMubWFwKChmdW5jdGlvbihlKXt2YXIgbj1lLmhhbGZlZGdlcy5tYXAoKGZ1bmN0aW9uKG4pe3JldHVybiBMUChlLHRbbl0pfSkpO3JldHVybiBuLmRhdGE9ZS5zaXRlLmRhdGEsbn0pKX0sdHJpYW5nbGVzOmZ1bmN0aW9uKCl7dmFyIHQ9W10sZT10aGlzLmVkZ2VzO3JldHVybiB0aGlzLmNlbGxzLmZvckVhY2goKGZ1bmN0aW9uKG4saSl7aWYobz0ocj1uLmhhbGZlZGdlcykubGVuZ3RoKWZvcih2YXIgcixvLGEscz1uLnNpdGUsbD0tMSxjPWVbcltvLTFdXSx1PWMubGVmdD09PXM/Yy5yaWdodDpjLmxlZnQ7KytsPG87KWE9dSx1PShjPWVbcltsXV0pLmxlZnQ9PT1zP2MucmlnaHQ6Yy5sZWZ0LGEmJnUmJmk8YS5pbmRleCYmaTx1LmluZGV4JiZaUChzLGEsdSk8MCYmdC5wdXNoKFtzLmRhdGEsYS5kYXRhLHUuZGF0YV0pfSkpLHR9LGxpbmtzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZXMuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC5yaWdodH0pKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybntzb3VyY2U6dC5sZWZ0LmRhdGEsdGFyZ2V0OnQucmlnaHQuZGF0YX19KSl9LGZpbmQ6ZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgaSxyLG89dGhpcyxhPW8uX2ZvdW5kfHwwLHM9by5jZWxscy5sZW5ndGg7IShyPW8uY2VsbHNbYV0pOylpZigrK2E+PXMpcmV0dXJuIG51bGw7dmFyIGw9dC1yLnNpdGVbMF0sYz1lLXIuc2l0ZVsxXSx1PWwqbCtjKmM7ZG97cj1vLmNlbGxzW2k9YV0sYT1udWxsLHIuaGFsZmVkZ2VzLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciBpPW8uZWRnZXNbbl0scz1pLmxlZnQ7aWYocyE9PXIuc2l0ZSYmc3x8KHM9aS5yaWdodCkpe3ZhciBsPXQtc1swXSxjPWUtc1sxXSxoPWwqbCtjKmM7aDx1JiYodT1oLGE9cy5pbmRleCl9fSkpfXdoaWxlKG51bGwhPT1hKTtyZXR1cm4gby5fZm91bmQ9aSxudWxsPT1ufHx1PD1uKm4/ci5zaXRlOm51bGx9fSxuTi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOm5OLHNjYWxlOmZ1bmN0aW9uKHQpe3JldHVybiAxPT09dD90aGlzOm5ldyBuTih0aGlzLmsqdCx0aGlzLngsdGhpcy55KX0sdHJhbnNsYXRlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIDA9PT10JjA9PT1lP3RoaXM6bmV3IG5OKHRoaXMuayx0aGlzLngrdGhpcy5rKnQsdGhpcy55K3RoaXMuayplKX0sYXBwbHk6ZnVuY3Rpb24odCl7cmV0dXJuW3RbMF0qdGhpcy5rK3RoaXMueCx0WzFdKnRoaXMuayt0aGlzLnldfSxhcHBseVg6ZnVuY3Rpb24odCl7cmV0dXJuIHQqdGhpcy5rK3RoaXMueH0sYXBwbHlZOmZ1bmN0aW9uKHQpe3JldHVybiB0KnRoaXMuayt0aGlzLnl9LGludmVydDpmdW5jdGlvbih0KXtyZXR1cm5bKHRbMF0tdGhpcy54KS90aGlzLmssKHRbMV0tdGhpcy55KS90aGlzLmtdfSxpbnZlcnRYOmZ1bmN0aW9uKHQpe3JldHVybih0LXRoaXMueCkvdGhpcy5rfSxpbnZlcnRZOmZ1bmN0aW9uKHQpe3JldHVybih0LXRoaXMueSkvdGhpcy5rfSxyZXNjYWxlWDpmdW5jdGlvbih0KXtyZXR1cm4gdC5jb3B5KCkuZG9tYWluKHQucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLHRoaXMpLm1hcCh0LmludmVydCx0KSl9LHJlc2NhbGVZOmZ1bmN0aW9uKHQpe3JldHVybiB0LmNvcHkoKS5kb21haW4odC5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksdGhpcykubWFwKHQuaW52ZXJ0LHQpKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIikifX07dmFyIGlOPW5ldyBuTigxLDAsMCk7ZnVuY3Rpb24gck4odCl7Zm9yKDshdC5fX3pvb207KWlmKCEodD10LnBhcmVudE5vZGUpKXJldHVybiBpTjtyZXR1cm4gdC5fX3pvb219ZnVuY3Rpb24gb04oKXtjdS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBhTigpe2N1LnByZXZlbnREZWZhdWx0KCksY3Uuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gc04oKXtyZXR1cm4hY3UuY3RybEtleSYmIWN1LmJ1dHRvbn1mdW5jdGlvbiBsTigpe3ZhciB0PXRoaXM7cmV0dXJuIHQgaW5zdGFuY2VvZiBTVkdFbGVtZW50Pyh0PXQub3duZXJTVkdFbGVtZW50fHx0KS5oYXNBdHRyaWJ1dGUoInZpZXdCb3giKT9bWyh0PXQudmlld0JveC5iYXNlVmFsKS54LHQueV0sW3QueCt0LndpZHRoLHQueSt0LmhlaWdodF1dOltbMCwwXSxbdC53aWR0aC5iYXNlVmFsLnZhbHVlLHQuaGVpZ2h0LmJhc2VWYWwudmFsdWVdXTpbWzAsMF0sW3QuY2xpZW50V2lkdGgsdC5jbGllbnRIZWlnaHRdXX1mdW5jdGlvbiBjTigpe3JldHVybiB0aGlzLl9fem9vbXx8aU59ZnVuY3Rpb24gdU4oKXtyZXR1cm4tY3UuZGVsdGFZKigxPT09Y3UuZGVsdGFNb2RlPy4wNTpjdS5kZWx0YU1vZGU/MTouMDAyKX1mdW5jdGlvbiBoTigpe3JldHVybiBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHN8fCJvbnRvdWNoc3RhcnQiaW4gdGhpc31mdW5jdGlvbiBkTih0LGUsbil7dmFyIGk9dC5pbnZlcnRYKGVbMF1bMF0pLW5bMF1bMF0scj10LmludmVydFgoZVsxXVswXSktblsxXVswXSxvPXQuaW52ZXJ0WShlWzBdWzFdKS1uWzBdWzFdLGE9dC5pbnZlcnRZKGVbMV1bMV0pLW5bMV1bMV07cmV0dXJuIHQudHJhbnNsYXRlKHI+aT8oaStyKS8yOk1hdGgubWluKDAsaSl8fE1hdGgubWF4KDAsciksYT5vPyhvK2EpLzI6TWF0aC5taW4oMCxvKXx8TWF0aC5tYXgoMCxhKSl9ZnVuY3Rpb24gcE4oKXt2YXIgdCxlLG49c04saT1sTixyPWROLG89dU4sYT1oTixzPVswLDEvMF0sbD1bWy0xLzAsLTEvMF0sWzEvMCwxLzBdXSxjPTI1MCx1PXJwLGg9c2MoInN0YXJ0Iiwiem9vbSIsImVuZCIpLGQ9NTAwLHA9MDtmdW5jdGlvbiBmKHQpe3QucHJvcGVydHkoIl9fem9vbSIsY04pLm9uKCJ3aGVlbC56b29tIix4KS5vbigibW91c2Vkb3duLnpvb20iLHcpLm9uKCJkYmxjbGljay56b29tIixTKS5maWx0ZXIoYSkub24oInRvdWNoc3RhcnQuem9vbSIsTSkub24oInRvdWNobW92ZS56b29tIixFKS5vbigidG91Y2hlbmQuem9vbSB0b3VjaGNhbmNlbC56b29tIixUKS5zdHlsZSgidG91Y2gtYWN0aW9uIiwibm9uZSIpLnN0eWxlKCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3IiLCJyZ2JhKDAsMCwwLDApIil9ZnVuY3Rpb24gbSh0LGUpe3JldHVybihlPU1hdGgubWF4KHNbMF0sTWF0aC5taW4oc1sxXSxlKSkpPT09dC5rP3Q6bmV3IG5OKGUsdC54LHQueSl9ZnVuY3Rpb24gZyh0LGUsbil7dmFyIGk9ZVswXS1uWzBdKnQuayxyPWVbMV0tblsxXSp0Lms7cmV0dXJuIGk9PT10LngmJnI9PT10Lnk/dDpuZXcgbk4odC5rLGkscil9ZnVuY3Rpb24gXyh0KXtyZXR1cm5bKCt0WzBdWzBdKyArdFsxXVswXSkvMiwoK3RbMF1bMV0rICt0WzFdWzFdKS8yXX1mdW5jdGlvbiB5KHQsZSxuKXt0Lm9uKCJzdGFydC56b29tIiwoZnVuY3Rpb24oKXt2KHRoaXMsYXJndW1lbnRzKS5zdGFydCgpfSkpLm9uKCJpbnRlcnJ1cHQuem9vbSBlbmQuem9vbSIsKGZ1bmN0aW9uKCl7dih0aGlzLGFyZ3VtZW50cykuZW5kKCl9KSkudHdlZW4oInpvb20iLChmdW5jdGlvbigpe3ZhciB0PXRoaXMscj1hcmd1bWVudHMsbz12KHQsciksYT1pLmFwcGx5KHQscikscz1udWxsPT1uP18oYSk6ImZ1bmN0aW9uIj09dHlwZW9mIG4/bi5hcHBseSh0LHIpOm4sbD1NYXRoLm1heChhWzFdWzBdLWFbMF1bMF0sYVsxXVsxXS1hWzBdWzFdKSxjPXQuX196b29tLGg9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZS5hcHBseSh0LHIpOmUsZD11KGMuaW52ZXJ0KHMpLmNvbmNhdChsL2MuayksaC5pbnZlcnQocykuY29uY2F0KGwvaC5rKSk7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKDE9PT10KXQ9aDtlbHNle3ZhciBlPWQodCksbj1sL2VbMl07dD1uZXcgbk4obixzWzBdLWVbMF0qbixzWzFdLWVbMV0qbil9by56b29tKG51bGwsdCl9fSkpfWZ1bmN0aW9uIHYodCxlLG4pe3JldHVybiFuJiZ0Ll9fem9vbWluZ3x8bmV3IGIodCxlKX1mdW5jdGlvbiBiKHQsZSl7dGhpcy50aGF0PXQsdGhpcy5hcmdzPWUsdGhpcy5hY3RpdmU9MCx0aGlzLmV4dGVudD1pLmFwcGx5KHQsZSksdGhpcy50YXBzPTB9ZnVuY3Rpb24geCgpe2lmKG4uYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgdD12KHRoaXMsYXJndW1lbnRzKSxlPXRoaXMuX196b29tLGk9TWF0aC5tYXgoc1swXSxNYXRoLm1pbihzWzFdLGUuaypNYXRoLnBvdygyLG8uYXBwbHkodGhpcyxhcmd1bWVudHMpKSkpLGE9b2godGhpcyk7aWYodC53aGVlbCl0Lm1vdXNlWzBdWzBdPT09YVswXSYmdC5tb3VzZVswXVsxXT09PWFbMV18fCh0Lm1vdXNlWzFdPWUuaW52ZXJ0KHQubW91c2VbMF09YSkpLGNsZWFyVGltZW91dCh0LndoZWVsKTtlbHNle2lmKGUuaz09PWkpcmV0dXJuO3QubW91c2U9W2EsZS5pbnZlcnQoYSldLEZwKHRoaXMpLHQuc3RhcnQoKX1hTigpLHQud2hlZWw9c2V0VGltZW91dChjLDE1MCksdC56b29tKCJtb3VzZSIscihnKG0oZSxpKSx0Lm1vdXNlWzBdLHQubW91c2VbMV0pLHQuZXh0ZW50LGwpKX1mdW5jdGlvbiBjKCl7dC53aGVlbD1udWxsLHQuZW5kKCl9fWZ1bmN0aW9uIHcoKXtpZighZSYmbi5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciB0PXYodGhpcyxhcmd1bWVudHMsITApLGk9d3UoY3Uudmlldykub24oIm1vdXNlbW92ZS56b29tIixjLCEwKS5vbigibW91c2V1cC56b29tIix1LCEwKSxvPW9oKHRoaXMpLGE9Y3UuY2xpZW50WCxzPWN1LmNsaWVudFk7dWgoY3Uudmlldyksb04oKSx0Lm1vdXNlPVtvLHRoaXMuX196b29tLmludmVydChvKV0sRnAodGhpcyksdC5zdGFydCgpfWZ1bmN0aW9uIGMoKXtpZihhTigpLCF0Lm1vdmVkKXt2YXIgZT1jdS5jbGllbnRYLWEsbj1jdS5jbGllbnRZLXM7dC5tb3ZlZD1lKmUrbipuPnB9dC56b29tKCJtb3VzZSIscihnKHQudGhhdC5fX3pvb20sdC5tb3VzZVswXT1vaCh0LnRoYXQpLHQubW91c2VbMV0pLHQuZXh0ZW50LGwpKX1mdW5jdGlvbiB1KCl7aS5vbigibW91c2Vtb3ZlLnpvb20gbW91c2V1cC56b29tIixudWxsKSxoaChjdS52aWV3LHQubW92ZWQpLGFOKCksdC5lbmQoKX19ZnVuY3Rpb24gUygpe2lmKG4uYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgdD10aGlzLl9fem9vbSxlPW9oKHRoaXMpLG89dC5pbnZlcnQoZSksYT10LmsqKGN1LnNoaWZ0S2V5Py41OjIpLHM9cihnKG0odCxhKSxlLG8pLGkuYXBwbHkodGhpcyxhcmd1bWVudHMpLGwpO2FOKCksYz4wP3d1KHRoaXMpLnRyYW5zaXRpb24oKS5kdXJhdGlvbihjKS5jYWxsKHkscyxlKTp3dSh0aGlzKS5jYWxsKGYudHJhbnNmb3JtLHMpfX1mdW5jdGlvbiBNKCl7aWYobi5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBlLGkscixvLGE9Y3UudG91Y2hlcyxzPWEubGVuZ3RoLGw9dih0aGlzLGFyZ3VtZW50cyxjdS5jaGFuZ2VkVG91Y2hlcy5sZW5ndGg9PT1zKTtmb3Iob04oKSxpPTA7aTxzOysraSlvPVtvPXNoKHRoaXMsYSwocj1hW2ldKS5pZGVudGlmaWVyKSx0aGlzLl9fem9vbS5pbnZlcnQobyksci5pZGVudGlmaWVyXSxsLnRvdWNoMD9sLnRvdWNoMXx8bC50b3VjaDBbMl09PT1vWzJdfHwobC50b3VjaDE9byxsLnRhcHM9MCk6KGwudG91Y2gwPW8sZT0hMCxsLnRhcHM9MSshIXQpO3QmJih0PWNsZWFyVGltZW91dCh0KSksZSYmKGwudGFwczwyJiYodD1zZXRUaW1lb3V0KChmdW5jdGlvbigpe3Q9bnVsbH0pLGQpKSxGcCh0aGlzKSxsLnN0YXJ0KCkpfX1mdW5jdGlvbiBFKCl7aWYodGhpcy5fX3pvb21pbmcpe3ZhciBlLG4saSxvLGE9dih0aGlzLGFyZ3VtZW50cykscz1jdS5jaGFuZ2VkVG91Y2hlcyxjPXMubGVuZ3RoO2ZvcihhTigpLHQmJih0PWNsZWFyVGltZW91dCh0KSksYS50YXBzPTAsZT0wO2U8YzsrK2UpaT1zaCh0aGlzLHMsKG49c1tlXSkuaWRlbnRpZmllciksYS50b3VjaDAmJmEudG91Y2gwWzJdPT09bi5pZGVudGlmaWVyP2EudG91Y2gwWzBdPWk6YS50b3VjaDEmJmEudG91Y2gxWzJdPT09bi5pZGVudGlmaWVyJiYoYS50b3VjaDFbMF09aSk7aWYobj1hLnRoYXQuX196b29tLGEudG91Y2gxKXt2YXIgdT1hLnRvdWNoMFswXSxoPWEudG91Y2gwWzFdLGQ9YS50b3VjaDFbMF0scD1hLnRvdWNoMVsxXSxmPShmPWRbMF0tdVswXSkqZisoZj1kWzFdLXVbMV0pKmYsXz0oXz1wWzBdLWhbMF0pKl8rKF89cFsxXS1oWzFdKSpfO249bShuLE1hdGguc3FydChmL18pKSxpPVsodVswXStkWzBdKS8yLCh1WzFdK2RbMV0pLzJdLG89WyhoWzBdK3BbMF0pLzIsKGhbMV0rcFsxXSkvMl19ZWxzZXtpZighYS50b3VjaDApcmV0dXJuO2k9YS50b3VjaDBbMF0sbz1hLnRvdWNoMFsxXX1hLnpvb20oInRvdWNoIixyKGcobixpLG8pLGEuZXh0ZW50LGwpKX19ZnVuY3Rpb24gVCgpe2lmKHRoaXMuX196b29taW5nKXt2YXIgdCxuLGk9dih0aGlzLGFyZ3VtZW50cykscj1jdS5jaGFuZ2VkVG91Y2hlcyxvPXIubGVuZ3RoO2ZvcihvTigpLGUmJmNsZWFyVGltZW91dChlKSxlPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ZT1udWxsfSksZCksdD0wO3Q8bzsrK3Qpbj1yW3RdLGkudG91Y2gwJiZpLnRvdWNoMFsyXT09PW4uaWRlbnRpZmllcj9kZWxldGUgaS50b3VjaDA6aS50b3VjaDEmJmkudG91Y2gxWzJdPT09bi5pZGVudGlmaWVyJiZkZWxldGUgaS50b3VjaDE7aWYoaS50b3VjaDEmJiFpLnRvdWNoMCYmKGkudG91Y2gwPWkudG91Y2gxLGRlbGV0ZSBpLnRvdWNoMSksaS50b3VjaDApaS50b3VjaDBbMV09dGhpcy5fX3pvb20uaW52ZXJ0KGkudG91Y2gwWzBdKTtlbHNlIGlmKGkuZW5kKCksMj09PWkudGFwcyl7dmFyIGE9d3UodGhpcykub24oImRibGNsaWNrLnpvb20iKTthJiZhLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19fXJldHVybiBmLnRyYW5zZm9ybT1mdW5jdGlvbih0LGUsbil7dmFyIGk9dC5zZWxlY3Rpb24/dC5zZWxlY3Rpb24oKTp0O2kucHJvcGVydHkoIl9fem9vbSIsY04pLHQhPT1pP3kodCxlLG4pOmkuaW50ZXJydXB0KCkuZWFjaCgoZnVuY3Rpb24oKXt2KHRoaXMsYXJndW1lbnRzKS5zdGFydCgpLnpvb20obnVsbCwiZnVuY3Rpb24iPT10eXBlb2YgZT9lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTplKS5lbmQoKX0pKX0sZi5zY2FsZUJ5PWZ1bmN0aW9uKHQsZSxuKXtmLnNjYWxlVG8odCwoZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9fem9vbS5rLG49ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6ZTtyZXR1cm4gdCpufSksbil9LGYuc2NhbGVUbz1mdW5jdGlvbih0LGUsbil7Zi50cmFuc2Zvcm0odCwoZnVuY3Rpb24oKXt2YXIgdD1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxvPXRoaXMuX196b29tLGE9bnVsbD09bj9fKHQpOiJmdW5jdGlvbiI9PXR5cGVvZiBuP24uYXBwbHkodGhpcyxhcmd1bWVudHMpOm4scz1vLmludmVydChhKSxjPSJmdW5jdGlvbiI9PXR5cGVvZiBlP2UuYXBwbHkodGhpcyxhcmd1bWVudHMpOmU7cmV0dXJuIHIoZyhtKG8sYyksYSxzKSx0LGwpfSksbil9LGYudHJhbnNsYXRlQnk9ZnVuY3Rpb24odCxlLG4pe2YudHJhbnNmb3JtKHQsKGZ1bmN0aW9uKCl7cmV0dXJuIHIodGhpcy5fX3pvb20udHJhbnNsYXRlKCJmdW5jdGlvbiI9PXR5cGVvZiBlP2UuYXBwbHkodGhpcyxhcmd1bWVudHMpOmUsImZ1bmN0aW9uIj09dHlwZW9mIG4/bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6biksaS5hcHBseSh0aGlzLGFyZ3VtZW50cyksbCl9KSl9LGYudHJhbnNsYXRlVG89ZnVuY3Rpb24odCxlLG4sbyl7Zi50cmFuc2Zvcm0odCwoZnVuY3Rpb24oKXt2YXIgdD1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxhPXRoaXMuX196b29tLHM9bnVsbD09bz9fKHQpOiJmdW5jdGlvbiI9PXR5cGVvZiBvP28uYXBwbHkodGhpcyxhcmd1bWVudHMpOm87cmV0dXJuIHIoaU4udHJhbnNsYXRlKHNbMF0sc1sxXSkuc2NhbGUoYS5rKS50cmFuc2xhdGUoImZ1bmN0aW9uIj09dHlwZW9mIGU/LWUuYXBwbHkodGhpcyxhcmd1bWVudHMpOi1lLCJmdW5jdGlvbiI9PXR5cGVvZiBuPy1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTotbiksdCxsKX0pLG8pfSxiLnByb3RvdHlwZT17c3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gMT09Kyt0aGlzLmFjdGl2ZSYmKHRoaXMudGhhdC5fX3pvb21pbmc9dGhpcyx0aGlzLmVtaXQoInN0YXJ0IikpLHRoaXN9LHpvb206ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5tb3VzZSYmIm1vdXNlIiE9PXQmJih0aGlzLm1vdXNlWzFdPWUuaW52ZXJ0KHRoaXMubW91c2VbMF0pKSx0aGlzLnRvdWNoMCYmInRvdWNoIiE9PXQmJih0aGlzLnRvdWNoMFsxXT1lLmludmVydCh0aGlzLnRvdWNoMFswXSkpLHRoaXMudG91Y2gxJiYidG91Y2giIT09dCYmKHRoaXMudG91Y2gxWzFdPWUuaW52ZXJ0KHRoaXMudG91Y2gxWzBdKSksdGhpcy50aGF0Ll9fem9vbT1lLHRoaXMuZW1pdCgiem9vbSIpLHRoaXN9LGVuZDpmdW5jdGlvbigpe3JldHVybiAwPT0tLXRoaXMuYWN0aXZlJiYoZGVsZXRlIHRoaXMudGhhdC5fX3pvb21pbmcsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1pdDpmdW5jdGlvbih0KXttdShuZXcgZU4oZix0LHRoaXMudGhhdC5fX3pvb20pLGguYXBwbHksaCxbdCx0aGlzLnRoYXQsdGhpcy5hcmdzXSl9fSxmLndoZWVsRGVsdGE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp0TigrdCksZik6b30sZi5maWx0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp0TighIXQpLGYpOm59LGYudG91Y2hhYmxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6dE4oISF0KSxmKTphfSxmLmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnROKFtbK3RbMF1bMF0sK3RbMF1bMV1dLFsrdFsxXVswXSwrdFsxXVsxXV1dKSxmKTppfSxmLnNjYWxlRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzWzBdPSt0WzBdLHNbMV09K3RbMV0sZik6W3NbMF0sc1sxXV19LGYudHJhbnNsYXRlRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsWzBdWzBdPSt0WzBdWzBdLGxbMV1bMF09K3RbMV1bMF0sbFswXVsxXT0rdFswXVsxXSxsWzFdWzFdPSt0WzFdWzFdLGYpOltbbFswXVswXSxsWzBdWzFdXSxbbFsxXVswXSxsWzFdWzFdXV19LGYuY29uc3RyYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsZik6cn0sZi5kdXJhdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0rdCxmKTpjfSxmLmludGVycG9sYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXQsZik6dX0sZi5vbj1mdW5jdGlvbigpe3ZhciB0PWgub24uYXBwbHkoaCxhcmd1bWVudHMpO3JldHVybiB0PT09aD9mOnR9LGYuY2xpY2tEaXN0YW5jZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD0odD0rdCkqdCxmKTpNYXRoLnNxcnQocCl9LGZ9ck4ucHJvdG90eXBlPW5OLnByb3RvdHlwZTt2YXIgZk49T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsdmVyc2lvbjoiNS43LjAiLGJpc2VjdDp3bCxiaXNlY3RSaWdodDp3bCxiaXNlY3RMZWZ0OlNsLGFzY2VuZGluZzp2bCxiaXNlY3RvcjpibCxjcm9zczpFbCxkZXNjZW5kaW5nOmZ1bmN0aW9uIG1OKHQsZSl7cmV0dXJuIGU8dD8tMTplPnQ/MTplPj10PzA6TmFOfSxkZXZpYXRpb246QWwsZXh0ZW50OmtsLGhpc3RvZ3JhbTpmdW5jdGlvbiBnTigpe3ZhciB0PU9sLGU9a2wsbj1VbDtmdW5jdGlvbiBpKGkpe3ZhciByLG8sYT1pLmxlbmd0aCxzPW5ldyBBcnJheShhKTtmb3Iocj0wO3I8YTsrK3Ipc1tyXT10KGlbcl0scixpKTt2YXIgbD1lKHMpLGM9bFswXSx1PWxbMV0saD1uKHMsYyx1KTtBcnJheS5pc0FycmF5KGgpfHwoaD1WbChjLHUsaCksaD1SbChNYXRoLmNlaWwoYy9oKSpoLHUsaCkpO2Zvcih2YXIgZD1oLmxlbmd0aDtoWzBdPD1jOyloLnNoaWZ0KCksLS1kO2Zvcig7aFtkLTFdPnU7KWgucG9wKCksLS1kO3ZhciBwLGY9bmV3IEFycmF5KGQrMSk7Zm9yKHI9MDtyPD1kOysrcikocD1mW3JdPVtdKS54MD1yPjA/aFtyLTFdOmMscC54MT1yPGQ/aFtyXTp1O2ZvcihyPTA7cjxhOysrciljPD0obz1zW3JdKSYmbzw9dSYmZlt3bChoLG8sMCxkKV0ucHVzaChpW3JdKTtyZXR1cm4gZn1yZXR1cm4gaS52YWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOklsKGUpLGkpOnR9LGkuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6SWwoW3RbMF0sdFsxXV0pLGkpOmV9LGkudGhyZXNob2xkcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkFycmF5LmlzQXJyYXkodCk/SWwoUGwuY2FsbCh0KSk6SWwodCksaSk6bn0saX0sdGhyZXNob2xkRnJlZWRtYW5EaWFjb25pczpmdW5jdGlvbiBfTih0LGUsbil7cmV0dXJuIHQ9TmwuY2FsbCh0LFRsKS5zb3J0KHZsKSxNYXRoLmNlaWwoKG4tZSkvKDIqKGpsKHQsLjc1KS1qbCh0LC4yNSkpKk1hdGgucG93KHQubGVuZ3RoLC0xLzMpKSl9LHRocmVzaG9sZFNjb3R0OmZ1bmN0aW9uIHlOKHQsZSxuKXtyZXR1cm4gTWF0aC5jZWlsKChuLWUpLygzLjUqQWwodCkqTWF0aC5wb3codC5sZW5ndGgsLTEvMykpKX0sdGhyZXNob2xkU3R1cmdlczpVbCxtYXg6R2wsbWVhbjpmdW5jdGlvbiB2Tih0LGUpe3ZhciBuLGk9dC5sZW5ndGgscj1pLG89LTEsYT0wO2lmKG51bGw9PWUpZm9yKDsrK288aTspaXNOYU4obj1UbCh0W29dKSk/LS1yOmErPW47ZWxzZSBmb3IoOysrbzxpOylpc05hTihuPVRsKGUodFtvXSxvLHQpKSk/LS1yOmErPW47aWYocilyZXR1cm4gYS9yfSxtZWRpYW46ZnVuY3Rpb24gYk4odCxlKXt2YXIgbixpPXQubGVuZ3RoLHI9LTEsbz1bXTtpZihudWxsPT1lKWZvcig7KytyPGk7KWlzTmFOKG49VGwodFtyXSkpfHxvLnB1c2gobik7ZWxzZSBmb3IoOysrcjxpOylpc05hTihuPVRsKGUodFtyXSxyLHQpKSl8fG8ucHVzaChuKTtyZXR1cm4gamwoby5zb3J0KHZsKSwuNSl9LG1lcmdlOldsLG1pbjpxbCxwYWlyczpmdW5jdGlvbiB4Tih0LGUpe251bGw9PWUmJihlPU1sKTtmb3IodmFyIG49MCxpPXQubGVuZ3RoLTEscj10WzBdLG89bmV3IEFycmF5KGk8MD8wOmkpO248aTspb1tuXT1lKHIscj10Wysrbl0pO3JldHVybiBvfSxwZXJtdXRlOmZ1bmN0aW9uIHdOKHQsZSl7Zm9yKHZhciBuPWUubGVuZ3RoLGk9bmV3IEFycmF5KG4pO24tLTspaVtuXT10W2Vbbl1dO3JldHVybiBpfSxxdWFudGlsZTpqbCxyYW5nZTpSbCxzY2FuOmZ1bmN0aW9uIFNOKHQsZSl7aWYobj10Lmxlbmd0aCl7dmFyIG4saSxyPTAsbz0wLGE9dFtvXTtmb3IobnVsbD09ZSYmKGU9dmwpOysrcjxuOykoZShpPXRbcl0sYSk8MHx8MCE9PWUoYSxhKSkmJihhPWksbz1yKTtyZXR1cm4gMD09PWUoYSxhKT9vOnZvaWQgMH19LHNodWZmbGU6ZnVuY3Rpb24gTU4odCxlLG4pe2Zvcih2YXIgaSxyLG89KG51bGw9PW4/dC5sZW5ndGg6biktKGU9bnVsbD09ZT8wOitlKTtvOylyPU1hdGgucmFuZG9tKCkqby0tfDAsaT10W28rZV0sdFtvK2VdPXRbcitlXSx0W3IrZV09aTtyZXR1cm4gdH0sc3VtOmZ1bmN0aW9uIEVOKHQsZSl7dmFyIG4saT10Lmxlbmd0aCxyPS0xLG89MDtpZihudWxsPT1lKWZvcig7KytyPGk7KShuPSt0W3JdKSYmKG8rPW4pO2Vsc2UgZm9yKDsrK3I8aTspKG49K2UodFtyXSxyLHQpKSYmKG8rPW4pO3JldHVybiBvfSx0aWNrczpIbCx0aWNrSW5jcmVtZW50OkZsLHRpY2tTdGVwOlZsLHRyYW5zcG9zZTpZbCx2YXJpYW5jZTpDbCx6aXA6ZnVuY3Rpb24gVE4oKXtyZXR1cm4gWWwoYXJndW1lbnRzKX0sYXhpc1RvcDpmdW5jdGlvbiBDTih0KXtyZXR1cm4gaWMoMSx0KX0sYXhpc1JpZ2h0OmZ1bmN0aW9uIEFOKHQpe3JldHVybiBpYygyLHQpfSxheGlzQm90dG9tOnJjLGF4aXNMZWZ0Om9jLGJydXNoOlptLGJydXNoWDpmdW5jdGlvbiBrTigpe3JldHVybiBKbShSbSl9LGJydXNoWTpLbSxicnVzaFNlbGVjdGlvbjokbSxjaG9yZDpmdW5jdGlvbiBMTigpe3ZhciB0PTAsZT1udWxsLG49bnVsbCxpPW51bGw7ZnVuY3Rpb24gcihyKXt2YXIgbyxhLHMsbCxjLHUsaD1yLmxlbmd0aCxkPVtdLHA9UmwoaCksZj1bXSxtPVtdLGc9bS5ncm91cHM9bmV3IEFycmF5KGgpLF89bmV3IEFycmF5KGgqaCk7Zm9yKG89MCxjPS0xOysrYzxoOyl7Zm9yKGE9MCx1PS0xOysrdTxoOylhKz1yW2NdW3VdO2QucHVzaChhKSxmLnB1c2goUmwoaCkpLG8rPWF9Zm9yKGUmJnAuc29ydCgoZnVuY3Rpb24odCxuKXtyZXR1cm4gZShkW3RdLGRbbl0pfSkpLG4mJmYuZm9yRWFjaCgoZnVuY3Rpb24odCxlKXt0LnNvcnQoKGZ1bmN0aW9uKHQsaSl7cmV0dXJuIG4ocltlXVt0XSxyW2VdW2ldKX0pKX0pKSxsPShvPXJnKDAsaWctdCpoKS9vKT90OmlnL2gsYT0wLGM9LTE7KytjPGg7KXtmb3Iocz1hLHU9LTE7Kyt1PGg7KXt2YXIgeT1wW2NdLHY9Zlt5XVt1XSxiPXJbeV1bdl0seD1hLHc9YSs9YipvO19bdipoK3ldPXtpbmRleDp5LHN1YmluZGV4OnYsc3RhcnRBbmdsZTp4LGVuZEFuZ2xlOncsdmFsdWU6Yn19Z1t5XT17aW5kZXg6eSxzdGFydEFuZ2xlOnMsZW5kQW5nbGU6YSx2YWx1ZTpkW3ldfSxhKz1sfWZvcihjPS0xOysrYzxoOylmb3IodT1jLTE7Kyt1PGg7KXt2YXIgUz1fW3UqaCtjXSxNPV9bYypoK3VdOyhTLnZhbHVlfHxNLnZhbHVlKSYmbS5wdXNoKFMudmFsdWU8TS52YWx1ZT97c291cmNlOk0sdGFyZ2V0OlN9Ontzb3VyY2U6Uyx0YXJnZXQ6TX0pfXJldHVybiBpP20uc29ydChpKTptfXJldHVybiByLnBhZEFuZ2xlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXJnKDAsZSkscik6dH0sci5zb3J0R3JvdXBzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQscik6ZX0sci5zb3J0U3ViZ3JvdXBzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQscik6bn0sci5zb3J0Q2hvcmRzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT10P2k9bnVsbDooaT1vZyh0KSkuXz10LHIpOmkmJmkuX30scn0scmliYm9uOmZ1bmN0aW9uIFBOKCl7dmFyIHQ9ZmcsZT1tZyxuPWdnLGk9X2cscj15ZyxvPW51bGw7ZnVuY3Rpb24gYSgpe3ZhciBhLHM9YWcuY2FsbChhcmd1bWVudHMpLGw9dC5hcHBseSh0aGlzLHMpLGM9ZS5hcHBseSh0aGlzLHMpLHU9K24uYXBwbHkodGhpcywoc1swXT1sLHMpKSxoPWkuYXBwbHkodGhpcyxzKS1uZyxkPXIuYXBwbHkodGhpcyxzKS1uZyxwPXUqUW0oaCksZj11KnRnKGgpLG09K24uYXBwbHkodGhpcywoc1swXT1jLHMpKSxnPWkuYXBwbHkodGhpcyxzKS1uZyxfPXIuYXBwbHkodGhpcyxzKS1uZztpZihvfHwobz1hPXBnKCkpLG8ubW92ZVRvKHAsZiksby5hcmMoMCwwLHUsaCxkKSxoPT09ZyYmZD09PV98fChvLnF1YWRyYXRpY0N1cnZlVG8oMCwwLG0qUW0oZyksbSp0ZyhnKSksby5hcmMoMCwwLG0sZyxfKSksby5xdWFkcmF0aWNDdXJ2ZVRvKDAsMCxwLGYpLG8uY2xvc2VQYXRoKCksYSlyZXR1cm4gbz1udWxsLGErIiJ8fG51bGx9cmV0dXJuIGEucmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6c2coK3QpLGEpOm59LGEuc3RhcnRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnNnKCt0KSxhKTppfSxhLmVuZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6c2coK3QpLGEpOnJ9LGEuc291cmNlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUsYSk6dH0sYS50YXJnZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxhKTplfSxhLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89bnVsbD09dD9udWxsOnQsYSk6b30sYX0sbmVzdDpmdW5jdGlvbiBOTigpe3ZhciB0LGUsbixpPVtdLHI9W107ZnVuY3Rpb24gbyhuLHIsYSxzKXtpZihyPj1pLmxlbmd0aClyZXR1cm4gbnVsbCE9dCYmbi5zb3J0KHQpLG51bGwhPWU/ZShuKTpuO2Zvcih2YXIgbCxjLHUsaD0tMSxkPW4ubGVuZ3RoLHA9aVtyKytdLGY9eGcoKSxtPWEoKTsrK2g8ZDspKHU9Zi5nZXQobD1wKGM9bltoXSkrIiIpKT91LnB1c2goYyk6Zi5zZXQobCxbY10pO3JldHVybiBmLmVhY2goKGZ1bmN0aW9uKHQsZSl7cyhtLGUsbyh0LHIsYSxzKSl9KSksbX1mdW5jdGlvbiBhKHQsbil7aWYoKytuPmkubGVuZ3RoKXJldHVybiB0O3ZhciBvLHM9cltuLTFdO3JldHVybiBudWxsIT1lJiZuPj1pLmxlbmd0aD9vPXQuZW50cmllcygpOihvPVtdLHQuZWFjaCgoZnVuY3Rpb24odCxlKXtvLnB1c2goe2tleTplLHZhbHVlczphKHQsbil9KX0pKSksbnVsbCE9cz9vLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHModC5rZXksZS5rZXkpfSkpOm99cmV0dXJuIG49e29iamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gbyh0LDAsd2csU2cpfSxtYXA6ZnVuY3Rpb24odCl7cmV0dXJuIG8odCwwLE1nLEVnKX0sZW50cmllczpmdW5jdGlvbih0KXtyZXR1cm4gYShvKHQsMCxNZyxFZyksMCl9LGtleTpmdW5jdGlvbih0KXtyZXR1cm4gaS5wdXNoKHQpLG59LHNvcnRLZXlzOmZ1bmN0aW9uKHQpe3JldHVybiByW2kubGVuZ3RoLTFdPXQsbn0sc29ydFZhbHVlczpmdW5jdGlvbihlKXtyZXR1cm4gdD1lLG59LHJvbGx1cDpmdW5jdGlvbih0KXtyZXR1cm4gZT10LG59fX0sc2V0OkFnLG1hcDp4ZyxrZXlzOmtnLHZhbHVlczpmdW5jdGlvbiBJTih0KXt2YXIgZT1bXTtmb3IodmFyIG4gaW4gdCllLnB1c2godFtuXSk7cmV0dXJuIGV9LGVudHJpZXM6ZnVuY3Rpb24gT04odCl7dmFyIGU9W107Zm9yKHZhciBuIGluIHQpZS5wdXNoKHtrZXk6bix2YWx1ZTp0W25dfSk7cmV0dXJuIGV9LGNvbG9yOkRoLHJnYjpWaCxoc2w6WGgsbGFiOmFkLGhjbDpwZCxsY2g6ZnVuY3Rpb24gUk4odCxlLG4saSl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP2RkKHQpOm5ldyBmZChuLGUsdCxudWxsPT1pPzE6aSl9LGdyYXk6ZnVuY3Rpb24gek4odCxlKXtyZXR1cm4gbmV3IHNkKHQsMCwwLG51bGw9PWU/MTplKX0sY3ViZWhlbGl4OmJkLGNvbnRvdXJzOkJnLGNvbnRvdXJEZW5zaXR5OmZ1bmN0aW9uIEROKCl7dmFyIHQ9VmcsZT1VZyxuPWpnLGk9OTYwLHI9NTAwLG89MjAsYT0yLHM9MypvLGw9aSsyKnM+PmEsYz1yKzIqcz4+YSx1PU5nKDIwKTtmdW5jdGlvbiBoKGkpe3ZhciByPW5ldyBGbG9hdDMyQXJyYXkobCpjKSxoPW5ldyBGbG9hdDMyQXJyYXkobCpjKTtpLmZvckVhY2goKGZ1bmN0aW9uKGksbyx1KXt2YXIgaD0rdChpLG8sdSkrcz4+YSxkPStlKGksbyx1KStzPj5hLHA9K24oaSxvLHUpO2g+PTAmJmg8bCYmZD49MCYmZDxjJiYocltoK2QqbF0rPXApfSkpLEhnKHt3aWR0aDpsLGhlaWdodDpjLGRhdGE6cn0se3dpZHRoOmwsaGVpZ2h0OmMsZGF0YTpofSxvPj5hKSxGZyh7d2lkdGg6bCxoZWlnaHQ6YyxkYXRhOmh9LHt3aWR0aDpsLGhlaWdodDpjLGRhdGE6cn0sbz4+YSksSGcoe3dpZHRoOmwsaGVpZ2h0OmMsZGF0YTpyfSx7d2lkdGg6bCxoZWlnaHQ6YyxkYXRhOmh9LG8+PmEpLEZnKHt3aWR0aDpsLGhlaWdodDpjLGRhdGE6aH0se3dpZHRoOmwsaGVpZ2h0OmMsZGF0YTpyfSxvPj5hKSxIZyh7d2lkdGg6bCxoZWlnaHQ6YyxkYXRhOnJ9LHt3aWR0aDpsLGhlaWdodDpjLGRhdGE6aH0sbz4+YSksRmcoe3dpZHRoOmwsaGVpZ2h0OmMsZGF0YTpofSx7d2lkdGg6bCxoZWlnaHQ6YyxkYXRhOnJ9LG8+PmEpO3ZhciBwPXUocik7aWYoIUFycmF5LmlzQXJyYXkocCkpe3ZhciBmPUdsKHIpO3A9VmwoMCxmLHApLChwPVJsKDAsTWF0aC5mbG9vcihmL3ApKnAscCkpLnNoaWZ0KCl9cmV0dXJuIEJnKCkudGhyZXNob2xkcyhwKS5zaXplKFtsLGNdKShyKS5tYXAoZCl9ZnVuY3Rpb24gZCh0KXtyZXR1cm4gdC52YWx1ZSo9TWF0aC5wb3coMiwtMiphKSx0LmNvb3JkaW5hdGVzLmZvckVhY2gocCksdH1mdW5jdGlvbiBwKHQpe3QuZm9yRWFjaChmKX1mdW5jdGlvbiBmKHQpe3QuZm9yRWFjaChtKX1mdW5jdGlvbiBtKHQpe3RbMF09dFswXSpNYXRoLnBvdygyLGEpLXMsdFsxXT10WzFdKk1hdGgucG93KDIsYSktc31mdW5jdGlvbiBnKCl7cmV0dXJuIGw9aSsyKihzPTMqbyk+PmEsYz1yKzIqcz4+YSxofXJldHVybiBoLng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpOZygrZSksaCk6dH0saC55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6TmcoK3QpLGgpOmV9LGgud2VpZ2h0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6TmcoK3QpLGgpOm59LGguc2l6ZT1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm5baSxyXTt2YXIgZT1NYXRoLmNlaWwodFswXSksbj1NYXRoLmNlaWwodFsxXSk7aWYoIShlPj0wfHxlPj0wKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgc2l6ZSIpO3JldHVybiBpPWUscj1uLGcoKX0saC5jZWxsU2l6ZT1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gMTw8YTtpZighKCh0PSt0KT49MSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNlbGwgc2l6ZSIpO3JldHVybiBhPU1hdGguZmxvb3IoTWF0aC5sb2codCkvTWF0aC5MTjIpLGcoKX0saC50aHJlc2hvbGRzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6QXJyYXkuaXNBcnJheSh0KT9OZyhMZy5jYWxsKHQpKTpOZyh0KSxoKTp1fSxoLmJhbmR3aWR0aD1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gTWF0aC5zcXJ0KG8qKG8rMSkpO2lmKCEoKHQ9K3QpPj0wKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgYmFuZHdpZHRoIik7cmV0dXJuIG89TWF0aC5yb3VuZCgoTWF0aC5zcXJ0KDQqdCp0KzEpLTEpLzIpLGcoKX0saH0sZGlzcGF0Y2g6c2MsZHJhZzp5aCxkcmFnRGlzYWJsZTp1aCxkcmFnRW5hYmxlOmhoLGRzdkZvcm1hdDokZyxjc3ZQYXJzZTpaZyxjc3ZQYXJzZVJvd3M6SmcsY3N2Rm9ybWF0OlFnLGNzdkZvcm1hdEJvZHk6dF8sY3N2Rm9ybWF0Um93czplXyxjc3ZGb3JtYXRSb3c6bl8sY3N2Rm9ybWF0VmFsdWU6aV8sdHN2UGFyc2U6b18sdHN2UGFyc2VSb3dzOmFfLHRzdkZvcm1hdDpzXyx0c3ZGb3JtYXRCb2R5OmxfLHRzdkZvcm1hdFJvd3M6Y18sdHN2Rm9ybWF0Um93OnVfLHRzdkZvcm1hdFZhbHVlOmhfLGF1dG9UeXBlOmZ1bmN0aW9uIEJOKHQpe2Zvcih2YXIgZSBpbiB0KXt2YXIgbixpLHI9dFtlXS50cmltKCk7aWYocilpZigidHJ1ZSI9PT1yKXI9ITA7ZWxzZSBpZigiZmFsc2UiPT09cilyPSExO2Vsc2UgaWYoIk5hTiI9PT1yKXI9TmFOO2Vsc2UgaWYoaXNOYU4obj0rcikpe2lmKCEoaT1yLm1hdGNoKC9eKFstK11cZHsyfSk/XGR7NH0oLVxkezJ9KC1cZHsyfSk/KT8oVFxkezJ9OlxkezJ9KDpcZHsyfShcLlxkezN9KT8pPyhafFstK11cZHsyfTpcZHsyfSk/KT8kLykpKWNvbnRpbnVlO2RfJiZpWzRdJiYhaVs3XSYmKHI9ci5yZXBsYWNlKC8tL2csIi8iKS5yZXBsYWNlKC9ULywiICIpKSxyPW5ldyBEYXRlKHIpfWVsc2Ugcj1uO2Vsc2Ugcj1udWxsO3RbZV09cn1yZXR1cm4gdH0sZWFzZUxpbmVhcjp2ZixlYXNlUXVhZDp3ZixlYXNlUXVhZEluOmJmLGVhc2VRdWFkT3V0OnhmLGVhc2VRdWFkSW5PdXQ6d2YsZWFzZUN1YmljOkVmLGVhc2VDdWJpY0luOlNmLGVhc2VDdWJpY091dDpNZixlYXNlQ3ViaWNJbk91dDpFZixlYXNlUG9seTpZZixlYXNlUG9seUluOldmLGVhc2VQb2x5T3V0OnFmLGVhc2VQb2x5SW5PdXQ6WWYsZWFzZVNpbjpKZixlYXNlU2luSW46S2YsZWFzZVNpbk91dDpaZixlYXNlU2luSW5PdXQ6SmYsZWFzZUV4cDpubSxlYXNlRXhwSW46dG0sZWFzZUV4cE91dDplbSxlYXNlRXhwSW5PdXQ6bm0sZWFzZUNpcmNsZTpvbSxlYXNlQ2lyY2xlSW46aW0sZWFzZUNpcmNsZU91dDpybSxlYXNlQ2lyY2xlSW5PdXQ6b20sZWFzZUJvdW5jZTpsbSxlYXNlQm91bmNlSW46c20sZWFzZUJvdW5jZU91dDpsbSxlYXNlQm91bmNlSW5PdXQ6Y20sZWFzZUJhY2s6cG0sZWFzZUJhY2tJbjpobSxlYXNlQmFja091dDpkbSxlYXNlQmFja0luT3V0OnBtLGVhc2VFbGFzdGljOmdtLGVhc2VFbGFzdGljSW46bW0sZWFzZUVsYXN0aWNPdXQ6Z20sZWFzZUVsYXN0aWNJbk91dDpfbSxibG9iOmZ1bmN0aW9uIEhOKHQsZSl7cmV0dXJuIGZldGNoKHQsZSkudGhlbihwXyl9LGJ1ZmZlcjpmdW5jdGlvbiBGTih0LGUpe3JldHVybiBmZXRjaCh0LGUpLnRoZW4oZl8pfSxkc3Y6ZnVuY3Rpb24gVk4odCxlLG4saSl7Mz09PWFyZ3VtZW50cy5sZW5ndGgmJiJmdW5jdGlvbiI9PXR5cGVvZiBuJiYoaT1uLG49dm9pZCAwKTt2YXIgcj0kZyh0KTtyZXR1cm4gZ18oZSxuKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gci5wYXJzZSh0LGkpfSkpfSxjc3Y6eV8sdHN2OnZfLGltYWdlOmZ1bmN0aW9uIFVOKHQsZSl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLGkpe3ZhciByPW5ldyBJbWFnZTtmb3IodmFyIG8gaW4gZSlyW29dPWVbb107ci5vbmVycm9yPWksci5vbmxvYWQ9ZnVuY3Rpb24oKXtuKHIpfSxyLnNyYz10fSkpfSxqc29uOmZ1bmN0aW9uIGpOKHQsZSl7cmV0dXJuIGZldGNoKHQsZSkudGhlbihiXyl9LHRleHQ6Z18seG1sOndfLGh0bWw6U18sc3ZnOk1fLGZvcmNlQ2VudGVyOmZ1bmN0aW9uIEdOKHQsZSl7dmFyIG47ZnVuY3Rpb24gaSgpe3ZhciBpLHIsbz1uLmxlbmd0aCxhPTAscz0wO2ZvcihpPTA7aTxvOysraSlhKz0ocj1uW2ldKS54LHMrPXIueTtmb3IoYT1hL28tdCxzPXMvby1lLGk9MDtpPG87KytpKShyPW5baV0pLngtPWEsci55LT1zfXJldHVybiBudWxsPT10JiYodD0wKSxudWxsPT1lJiYoZT0wKSxpLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7bj10fSxpLng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2UsaSk6dH0saS55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0LGkpOmV9LGl9LGZvcmNlQ29sbGlkZTpmdW5jdGlvbiBXTih0KXt2YXIgZSxuLGk9MSxyPTE7ZnVuY3Rpb24gbygpe2Zvcih2YXIgdCxvLHMsbCxjLHUsaCxkPWUubGVuZ3RoLHA9MDtwPHI7KytwKWZvcihvPVBfKGUsUl8sel8pLnZpc2l0QWZ0ZXIoYSksdD0wO3Q8ZDsrK3QpaD0odT1uWyhzPWVbdF0pLmluZGV4XSkqdSxsPXMueCtzLnZ4LGM9cy55K3Mudnksby52aXNpdChmKTtmdW5jdGlvbiBmKHQsZSxuLHIsbyl7dmFyIGE9dC5kYXRhLGQ9dC5yLHA9dStkO2lmKCFhKXJldHVybiBlPmwrcHx8cjxsLXB8fG4+YytwfHxvPGMtcDtpZihhLmluZGV4PnMuaW5kZXgpe3ZhciBmPWwtYS54LWEudngsbT1jLWEueS1hLnZ5LGc9ZipmK20qbTtnPHAqcCYmKDA9PT1mJiYoZys9KGY9VF8oKSkqZiksMD09PW0mJihnKz0obT1UXygpKSptKSxnPShwLShnPU1hdGguc3FydChnKSkpL2cqaSxzLnZ4Kz0oZio9ZykqKHA9KGQqPWQpLyhoK2QpKSxzLnZ5Kz0obSo9ZykqcCxhLnZ4LT1mKihwPTEtcCksYS52eS09bSpwKX19fWZ1bmN0aW9uIGEodCl7aWYodC5kYXRhKXJldHVybiB0LnI9blt0LmRhdGEuaW5kZXhdO2Zvcih2YXIgZT10LnI9MDtlPDQ7KytlKXRbZV0mJnRbZV0ucj50LnImJih0LnI9dFtlXS5yKX1mdW5jdGlvbiBzKCl7aWYoZSl7dmFyIGkscixvPWUubGVuZ3RoO2ZvcihuPW5ldyBBcnJheShvKSxpPTA7aTxvOysraSluWyhyPWVbaV0pLmluZGV4XT0rdChyLGksZSl9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1FXyhudWxsPT10PzE6K3QpKSxvLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7ZT10LHMoKX0sby5pdGVyYXRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSt0LG8pOnJ9LG8uc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K3Qsbyk6aX0sby5yYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpFXygrZSkscygpLG8pOnR9LG99LGZvcmNlTGluazpmdW5jdGlvbiBxTih0KXt2YXIgZSxuLGkscixvLGE9RF8scz1mdW5jdGlvbiBsKHQpe3JldHVybiAxL01hdGgubWluKHJbdC5zb3VyY2UuaW5kZXhdLHJbdC50YXJnZXQuaW5kZXhdKX0sYz1FXygzMCksdT0xO2Z1bmN0aW9uIGgoaSl7Zm9yKHZhciByPTAsYT10Lmxlbmd0aDtyPHU7KytyKWZvcih2YXIgcyxsLGMsaCxkLHAsZixtPTA7bTxhOysrbSloPShjPShzPXRbbV0pLnRhcmdldCkueCtjLnZ4LShsPXMuc291cmNlKS54LWwudnh8fFRfKCksZD1jLnkrYy52eS1sLnktbC52eXx8VF8oKSxkKj1wPSgocD1NYXRoLnNxcnQoaCpoK2QqZCkpLW5bbV0pL3AqaSplW21dLGMudngtPShoKj1wKSooZj1vW21dKSxjLnZ5LT1kKmYsbC52eCs9aCooZj0xLWYpLGwudnkrPWQqZn1mdW5jdGlvbiBkKCl7aWYoaSl7dmFyIHMsbCxjPWkubGVuZ3RoLHU9dC5sZW5ndGgsaD14ZyhpLGEpO2ZvcihzPTAscj1uZXcgQXJyYXkoYyk7czx1OysrcykobD10W3NdKS5pbmRleD1zLCJvYmplY3QiIT10eXBlb2YgbC5zb3VyY2UmJihsLnNvdXJjZT1CXyhoLGwuc291cmNlKSksIm9iamVjdCIhPXR5cGVvZiBsLnRhcmdldCYmKGwudGFyZ2V0PUJfKGgsbC50YXJnZXQpKSxyW2wuc291cmNlLmluZGV4XT0ocltsLnNvdXJjZS5pbmRleF18fDApKzEscltsLnRhcmdldC5pbmRleF09KHJbbC50YXJnZXQuaW5kZXhdfHwwKSsxO2ZvcihzPTAsbz1uZXcgQXJyYXkodSk7czx1OysrcylvW3NdPXJbKGw9dFtzXSkuc291cmNlLmluZGV4XS8ocltsLnNvdXJjZS5pbmRleF0rcltsLnRhcmdldC5pbmRleF0pO2U9bmV3IEFycmF5KHUpLHAoKSxuPW5ldyBBcnJheSh1KSxmKCl9fWZ1bmN0aW9uIHAoKXtpZihpKWZvcih2YXIgbj0wLHI9dC5sZW5ndGg7bjxyOysrbillW25dPStzKHRbbl0sbix0KX1mdW5jdGlvbiBmKCl7aWYoaSlmb3IodmFyIGU9MCxyPXQubGVuZ3RoO2U8cjsrK2UpbltlXT0rYyh0W2VdLGUsdCl9cmV0dXJuIG51bGw9PXQmJih0PVtdKSxoLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7aT10LGQoKX0saC5saW5rcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLGQoKSxoKTp0fSxoLmlkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXQsaCk6YX0saC5pdGVyYXRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSt0LGgpOnV9LGguc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpFXygrdCkscCgpLGgpOnN9LGguZGlzdGFuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpFXygrdCksZigpLGgpOmN9LGh9LGZvcmNlTWFueUJvZHk6ZnVuY3Rpb24gWU4oKXt2YXIgdCxlLG4saSxyPUVfKC0zMCksbz0xLGE9MS8wLHM9LjgxO2Z1bmN0aW9uIGwoaSl7dmFyIHIsbz10Lmxlbmd0aCxhPVBfKHQsSF8sRl8pLnZpc2l0QWZ0ZXIodSk7Zm9yKG49aSxyPTA7cjxvOysrcillPXRbcl0sYS52aXNpdChoKX1mdW5jdGlvbiBjKCl7aWYodCl7dmFyIGUsbixvPXQubGVuZ3RoO2ZvcihpPW5ldyBBcnJheShvKSxlPTA7ZTxvOysrZSlpWyhuPXRbZV0pLmluZGV4XT0rcihuLGUsdCl9fWZ1bmN0aW9uIHUodCl7dmFyIGUsbixyLG8sYSxzPTAsbD0wO2lmKHQubGVuZ3RoKXtmb3Iocj1vPWE9MDthPDQ7KythKShlPXRbYV0pJiYobj1NYXRoLmFicyhlLnZhbHVlKSkmJihzKz1lLnZhbHVlLGwrPW4scis9biplLngsbys9biplLnkpO3QueD1yL2wsdC55PW8vbH1lbHNleyhlPXQpLng9ZS5kYXRhLngsZS55PWUuZGF0YS55O2Rve3MrPWlbZS5kYXRhLmluZGV4XX13aGlsZShlPWUubmV4dCl9dC52YWx1ZT1zfWZ1bmN0aW9uIGgodCxyLGwsYyl7aWYoIXQudmFsdWUpcmV0dXJuITA7dmFyIHU9dC54LWUueCxoPXQueS1lLnksZD1jLXIscD11KnUraCpoO2lmKGQqZC9zPHApcmV0dXJuIHA8YSYmKDA9PT11JiYocCs9KHU9VF8oKSkqdSksMD09PWgmJihwKz0oaD1UXygpKSpoKSxwPG8mJihwPU1hdGguc3FydChvKnApKSxlLnZ4Kz11KnQudmFsdWUqbi9wLGUudnkrPWgqdC52YWx1ZSpuL3ApLCEwO2lmKCEodC5sZW5ndGh8fHA+PWEpKXsodC5kYXRhIT09ZXx8dC5uZXh0KSYmKDA9PT11JiYocCs9KHU9VF8oKSkqdSksMD09PWgmJihwKz0oaD1UXygpKSpoKSxwPG8mJihwPU1hdGguc3FydChvKnApKSk7ZG97dC5kYXRhIT09ZSYmKGUudngrPXUqKGQ9aVt0LmRhdGEuaW5kZXhdKm4vcCksZS52eSs9aCpkKX13aGlsZSh0PXQubmV4dCl9fXJldHVybiBsLmluaXRpYWxpemU9ZnVuY3Rpb24oZSl7dD1lLGMoKX0sbC5zdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkVfKCt0KSxjKCksbCk6cn0sbC5kaXN0YW5jZU1pbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10KnQsbCk6TWF0aC5zcXJ0KG8pfSxsLmRpc3RhbmNlTWF4PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXQqdCxsKTpNYXRoLnNxcnQoYSl9LGwudGhldGE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9dCp0LGwpOk1hdGguc3FydChzKX0sbH0sZm9yY2VSYWRpYWw6ZnVuY3Rpb24gWE4odCxlLG4pe3ZhciBpLHIsbyxhPUVfKC4xKTtmdW5jdGlvbiBzKHQpe2Zvcih2YXIgYT0wLHM9aS5sZW5ndGg7YTxzOysrYSl7dmFyIGw9aVthXSxjPWwueC1lfHwxZS02LHU9bC55LW58fDFlLTYsaD1NYXRoLnNxcnQoYypjK3UqdSksZD0ob1thXS1oKSpyW2FdKnQvaDtsLnZ4Kz1jKmQsbC52eSs9dSpkfX1mdW5jdGlvbiBsKCl7aWYoaSl7dmFyIGUsbj1pLmxlbmd0aDtmb3Iocj1uZXcgQXJyYXkobiksbz1uZXcgQXJyYXkobiksZT0wO2U8bjsrK2Upb1tlXT0rdChpW2VdLGUsaSkscltlXT1pc05hTihvW2VdKT8wOithKGlbZV0sZSxpKX19cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PUVfKCt0KSksbnVsbD09ZSYmKGU9MCksbnVsbD09biYmKG49MCkscy5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe2k9dCxsKCl9LHMuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpFXygrdCksbCgpLHMpOmF9LHMucmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6RV8oK2UpLGwoKSxzKTp0fSxzLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K3Qscyk6ZX0scy55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSt0LHMpOm59LHN9LGZvcmNlU2ltdWxhdGlvbjpmdW5jdGlvbiAkTih0KXt2YXIgZSxuPTEsaT0uMDAxLHI9MS1NYXRoLnBvdyhpLDEvMzAwKSxvPTAsYT0uNixzPXhnKCksbD1BcCh1KSxjPXNjKCJ0aWNrIiwiZW5kIik7ZnVuY3Rpb24gdSgpe2goKSxjLmNhbGwoInRpY2siLGUpLG48aSYmKGwuc3RvcCgpLGMuY2FsbCgiZW5kIixlKSl9ZnVuY3Rpb24gaChpKXt2YXIgbCxjLHU9dC5sZW5ndGg7dm9pZCAwPT09aSYmKGk9MSk7Zm9yKHZhciBoPTA7aDxpOysraClmb3Iobis9KG8tbikqcixzLmVhY2goKGZ1bmN0aW9uKHQpe3Qobil9KSksbD0wO2w8dTsrK2wpbnVsbD09KGM9dFtsXSkuZng/Yy54Kz1jLnZ4Kj1hOihjLng9Yy5meCxjLnZ4PTApLG51bGw9PWMuZnk/Yy55Kz1jLnZ5Kj1hOihjLnk9Yy5meSxjLnZ5PTApO3JldHVybiBlfWZ1bmN0aW9uIGQoKXtmb3IodmFyIGUsbj0wLGk9dC5sZW5ndGg7bjxpOysrbil7aWYoKGU9dFtuXSkuaW5kZXg9bixudWxsIT1lLmZ4JiYoZS54PWUuZngpLG51bGwhPWUuZnkmJihlLnk9ZS5meSksaXNOYU4oZS54KXx8aXNOYU4oZS55KSl7dmFyIHI9MTAqTWF0aC5zcXJ0KG4pLG89bipleTtlLng9cipNYXRoLmNvcyhvKSxlLnk9cipNYXRoLnNpbihvKX0oaXNOYU4oZS52eCl8fGlzTmFOKGUudnkpKSYmKGUudng9ZS52eT0wKX19ZnVuY3Rpb24gcChlKXtyZXR1cm4gZS5pbml0aWFsaXplJiZlLmluaXRpYWxpemUodCksZX1yZXR1cm4gbnVsbD09dCYmKHQ9W10pLGQoKSxlPXt0aWNrOmgscmVzdGFydDpmdW5jdGlvbigpe3JldHVybiBsLnJlc3RhcnQodSksZX0sc3RvcDpmdW5jdGlvbigpe3JldHVybiBsLnN0b3AoKSxlfSxub2RlczpmdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1uLGQoKSxzLmVhY2gocCksZSk6dH0sYWxwaGE6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K3QsZSk6bn0sYWxwaGFNaW46ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K3QsZSk6aX0sYWxwaGFEZWNheTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rdCxlKTorcn0sYWxwaGFUYXJnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89K3QsZSk6b30sdmVsb2NpdHlEZWNheTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0xLXQsZSk6MS1hfSxmb3JjZTpmdW5jdGlvbih0LG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/KG51bGw9PW4/cy5yZW1vdmUodCk6cy5zZXQodCxwKG4pKSxlKTpzLmdldCh0KX0sZmluZDpmdW5jdGlvbihlLG4saSl7dmFyIHIsbyxhLHMsbCxjPTAsdT10Lmxlbmd0aDtmb3IobnVsbD09aT9pPTEvMDppKj1pLGM9MDtjPHU7KytjKShhPShyPWUtKHM9dFtjXSkueCkqcisobz1uLXMueSkqbyk8aSYmKGw9cyxpPWEpO3JldHVybiBsfSxvbjpmdW5jdGlvbih0LG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/KGMub24odCxuKSxlKTpjLm9uKHQpfX19LGZvcmNlWDpmdW5jdGlvbiBLTih0KXt2YXIgZSxuLGkscj1FXyguMSk7ZnVuY3Rpb24gbyh0KXtmb3IodmFyIHIsbz0wLGE9ZS5sZW5ndGg7bzxhOysrbykocj1lW29dKS52eCs9KGlbb10tci54KSpuW29dKnR9ZnVuY3Rpb24gYSgpe2lmKGUpe3ZhciBvLGE9ZS5sZW5ndGg7Zm9yKG49bmV3IEFycmF5KGEpLGk9bmV3IEFycmF5KGEpLG89MDtvPGE7KytvKW5bb109aXNOYU4oaVtvXT0rdChlW29dLG8sZSkpPzA6K3IoZVtvXSxvLGUpfX1yZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9RV8obnVsbD09dD8wOit0KSksby5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe2U9dCxhKCl9LG8uc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpFXygrdCksYSgpLG8pOnJ9LG8ueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOkVfKCtlKSxhKCksbyk6dH0sb30sZm9yY2VZOmZ1bmN0aW9uIFpOKHQpe3ZhciBlLG4saSxyPUVfKC4xKTtmdW5jdGlvbiBvKHQpe2Zvcih2YXIgcixvPTAsYT1lLmxlbmd0aDtvPGE7KytvKShyPWVbb10pLnZ5Kz0oaVtvXS1yLnkpKm5bb10qdH1mdW5jdGlvbiBhKCl7aWYoZSl7dmFyIG8sYT1lLmxlbmd0aDtmb3Iobj1uZXcgQXJyYXkoYSksaT1uZXcgQXJyYXkoYSksbz0wO288YTsrK28pbltvXT1pc05hTihpW29dPSt0KGVbb10sbyxlKSk/MDorcihlW29dLG8sZSl9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1FXyhudWxsPT10PzA6K3QpKSxvLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7ZT10LGEoKX0sby5zdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkVfKCt0KSxhKCksbyk6cn0sby55PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6RV8oK2UpLGEoKSxvKTp0fSxvfSxmb3JtYXREZWZhdWx0TG9jYWxlOnZ5LGdldCBmb3JtYXQoKXtyZXR1cm4gZnl9LGdldCBmb3JtYXRQcmVmaXgoKXtyZXR1cm4gbXl9LGZvcm1hdExvY2FsZTp5eSxmb3JtYXRTcGVjaWZpZXI6YXksRm9ybWF0U3BlY2lmaWVyOnN5LHByZWNpc2lvbkZpeGVkOmJ5LHByZWNpc2lvblByZWZpeDp4eSxwcmVjaXNpb25Sb3VuZDp3eSxnZW9BcmVhOmZ1bmN0aW9uIEpOKHQpe3JldHVybiBjdi5yZXNldCgpLG52KHQsdXYpLDIqY3Z9LGdlb0JvdW5kczpmdW5jdGlvbiBRTih0KXt2YXIgZSxuLGkscixvLGEscztpZihFdj1Ndj0tKHd2PVN2PTEvMCksTHY9W10sbnYodCwkdiksbj1Mdi5sZW5ndGgpe2ZvcihMdi5zb3J0KHJiKSxlPTEsbz1baT1MdlswXV07ZTxuOysrZSlvYihpLChyPUx2W2VdKVswXSl8fG9iKGksclsxXSk/KGliKGlbMF0sclsxXSk+aWIoaVswXSxpWzFdKSYmKGlbMV09clsxXSksaWIoclswXSxpWzFdKT5pYihpWzBdLGlbMV0pJiYoaVswXT1yWzBdKSk6by5wdXNoKGk9cik7Zm9yKGE9LTEvMCxlPTAsaT1vW249by5sZW5ndGgtMV07ZTw9bjtpPXIsKytlKShzPWliKGlbMV0sKHI9b1tlXSlbMF0pKT5hJiYoYT1zLHd2PXJbMF0sTXY9aVsxXSl9cmV0dXJuIEx2PVB2PW51bGwsd3Y9PT0xLzB8fFN2PT09MS8wP1tbTmFOLE5hTl0sW05hTixOYU5dXTpbW3d2LFN2XSxbTXYsRXZdXX0sZ2VvQ2VudHJvaWQ6ZnVuY3Rpb24gdEkodCl7TnY9SXY9T3Y9UnY9enY9RHY9QnY9SHY9RnY9VnY9VXY9MCxudih0LGFiKTt2YXIgZT1GdixuPVZ2LGk9VXYscj1lKmUrbipuK2kqaTtyZXR1cm4gcjxBeSYmKGU9RHYsbj1CdixpPUh2LEl2PEN5JiYoZT1PdixuPVJ2LGk9enYpLChyPWUqZStuKm4raSppKTxBeSk/W05hTixOYU5dOltEeShuLGUpKkl5LFh5KGkvV3kocikpKkl5XX0sZ2VvQ2lyY2xlOmZ1bmN0aW9uIGVJKCl7dmFyIHQsZSxuPV9iKFswLDBdKSxpPV9iKDkwKSxyPV9iKDYpLG89e3BvaW50OmZ1bmN0aW9uIGEobixpKXt0LnB1c2gobj1lKG4saSkpLG5bMF0qPUl5LG5bMV0qPUl5fX07ZnVuY3Rpb24gcygpe3ZhciBhPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpLHM9aS5hcHBseSh0aGlzLGFyZ3VtZW50cykqT3ksbD1yLmFwcGx5KHRoaXMsYXJndW1lbnRzKSpPeTtyZXR1cm4gdD1bXSxlPWJiKC1hWzBdKk95LC1hWzFdKk95LDApLmludmVydCxFYihvLHMsbCwxKSxhPXt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpbdF19LHQ9ZT1udWxsLGF9cmV0dXJuIHMuY2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6X2IoWyt0WzBdLCt0WzFdXSkscyk6bn0scy5yYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpfYigrdCkscyk6aX0scy5wcmVjaXNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpfYigrdCkscyk6cn0sc30sZ2VvQ2xpcEFudGltZXJpZGlhbjpCYixnZW9DbGlwQ2lyY2xlOlZiLGdlb0NsaXBFeHRlbnQ6ZnVuY3Rpb24gbkkoKXt2YXIgdCxlLG4saT0wLHI9MCxvPTk2MCxhPTUwMDtyZXR1cm4gbj17c3RyZWFtOmZ1bmN0aW9uKG4pe3JldHVybiB0JiZlPT09bj90OnQ9R2IoaSxyLG8sYSkoZT1uKX0sZXh0ZW50OmZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPStzWzBdWzBdLHI9K3NbMF1bMV0sbz0rc1sxXVswXSxhPStzWzFdWzFdLHQ9ZT1udWxsLG4pOltbaSxyXSxbbyxhXV19fX0sZ2VvQ2xpcFJlY3RhbmdsZTpHYixnZW9Db250YWluczpmdW5jdGlvbiBpSSh0LGUpe3JldHVybih0JiZyeC5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpP3J4W3QudHlwZV06YXgpKHQsZSl9LGdlb0Rpc3RhbmNlOml4LGdlb0dyYXRpY3VsZTpmeCxnZW9HcmF0aWN1bGUxMDpmdW5jdGlvbiBySSgpe3JldHVybiBmeCgpKCl9LGdlb0ludGVycG9sYXRlOmZ1bmN0aW9uIG9JKHQsZSl7dmFyIG49dFswXSpPeSxpPXRbMV0qT3kscj1lWzBdKk95LG89ZVsxXSpPeSxhPUJ5KGkpLHM9ankoaSksbD1CeShvKSxjPWp5KG8pLHU9YSpCeShuKSxoPWEqankobiksZD1sKkJ5KHIpLHA9bCpqeShyKSxmPTIqWHkoV3koJHkoby1pKSthKmwqJHkoci1uKSkpLG09ankoZiksZz1mP2Z1bmN0aW9uKHQpe3ZhciBlPWp5KHQqPWYpL20sbj1qeShmLXQpL20saT1uKnUrZSpkLHI9bipoK2UqcCxvPW4qcytlKmM7cmV0dXJuW0R5KHIsaSkqSXksRHkobyxXeShpKmkrcipyKSkqSXldfTpmdW5jdGlvbigpe3JldHVybltuKkl5LGkqSXldfTtyZXR1cm4gZy5kaXN0YW5jZT1mLGd9LGdlb0xlbmd0aDp0eCxnZW9QYXRoOmZ1bmN0aW9uIGFJKHQsZSl7dmFyIG4saSxyPTQuNTtmdW5jdGlvbiBvKHQpe3JldHVybiB0JiYoImZ1bmN0aW9uIj09dHlwZW9mIHImJmkucG9pbnRSYWRpdXMoK3IuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxudih0LG4oaSkpKSxpLnJlc3VsdCgpfXJldHVybiBvLmFyZWE9ZnVuY3Rpb24odCl7cmV0dXJuIG52KHQsbih3eCkpLHd4LnJlc3VsdCgpfSxvLm1lYXN1cmU9ZnVuY3Rpb24odCl7cmV0dXJuIG52KHQsbihjdykpLGN3LnJlc3VsdCgpfSxvLmJvdW5kcz1mdW5jdGlvbih0KXtyZXR1cm4gbnYodCxuKFJ4KSksUngucmVzdWx0KCl9LG8uY2VudHJvaWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG52KHQsbihxeCkpLHF4LnJlc3VsdCgpfSxvLnByb2plY3Rpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49bnVsbD09ZT8odD1udWxsLG14KToodD1lKS5zdHJlYW0sbyk6dH0sby5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PXQ/KGU9bnVsbCxuZXcgZHcpOm5ldyBudyhlPXQpLCJmdW5jdGlvbiIhPXR5cGVvZiByJiZpLnBvaW50UmFkaXVzKHIpLG8pOmV9LG8ucG9pbnRSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDooaS5wb2ludFJhZGl1cygrdCksK3QpLG8pOnJ9LG8ucHJvamVjdGlvbih0KS5jb250ZXh0KGUpfSxnZW9BbGJlcnM6UHcsZ2VvQWxiZXJzVXNhOmZ1bmN0aW9uIHNJKCl7dmFyIHQsZSxuLGkscixvLGE9UHcoKSxzPUx3KCkucm90YXRlKFsxNTQsMF0pLmNlbnRlcihbLTIsNTguNV0pLnBhcmFsbGVscyhbNTUsNjVdKSxsPUx3KCkucm90YXRlKFsxNTcsMF0pLmNlbnRlcihbLTMsMTkuOV0pLnBhcmFsbGVscyhbOCwxOF0pLGM9e3BvaW50OmZ1bmN0aW9uKHQsZSl7bz1bdCxlXX19O2Z1bmN0aW9uIHUodCl7dmFyIGU9dFswXSxhPXRbMV07cmV0dXJuIG89bnVsbCxuLnBvaW50KGUsYSksb3x8KGkucG9pbnQoZSxhKSxvKXx8KHIucG9pbnQoZSxhKSxvKX1mdW5jdGlvbiBoKCl7cmV0dXJuIHQ9ZT1udWxsLHV9cmV0dXJuIHUuaW52ZXJ0PWZ1bmN0aW9uKHQpe3ZhciBlPWEuc2NhbGUoKSxuPWEudHJhbnNsYXRlKCksaT0odFswXS1uWzBdKS9lLHI9KHRbMV0tblsxXSkvZTtyZXR1cm4ocj49LjEyJiZyPC4yMzQmJmk+PS0uNDI1JiZpPC0uMjE0P3M6cj49LjE2NiYmcjwuMjM0JiZpPj0tLjIxNCYmaTwtLjExNT9sOmEpLmludmVydCh0KX0sdS5zdHJlYW09ZnVuY3Rpb24obil7cmV0dXJuIHQmJmU9PT1uP3Q6dD0oZnVuY3Rpb24gaSh0KXt2YXIgZT10Lmxlbmd0aDtyZXR1cm57cG9pbnQ6ZnVuY3Rpb24obixpKXtmb3IodmFyIHI9LTE7KytyPGU7KXRbcl0ucG9pbnQobixpKX0sc3BoZXJlOmZ1bmN0aW9uKCl7Zm9yKHZhciBuPS0xOysrbjxlOyl0W25dLnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtmb3IodmFyIG49LTE7KytuPGU7KXRbbl0ubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtmb3IodmFyIG49LTE7KytuPGU7KXRbbl0ubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtmb3IodmFyIG49LTE7KytuPGU7KXRbbl0ucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtmb3IodmFyIG49LTE7KytuPGU7KXRbbl0ucG9seWdvbkVuZCgpfX19KShbYS5zdHJlYW0oZT1uKSxzLnN0cmVhbShuKSxsLnN0cmVhbShuKV0pfSx1LnByZWNpc2lvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYS5wcmVjaXNpb24odCkscy5wcmVjaXNpb24odCksbC5wcmVjaXNpb24odCksaCgpKTphLnByZWNpc2lvbigpfSx1LnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhLnNjYWxlKHQpLHMuc2NhbGUoLjM1KnQpLGwuc2NhbGUodCksdS50cmFuc2xhdGUoYS50cmFuc2xhdGUoKSkpOmEuc2NhbGUoKX0sdS50cmFuc2xhdGU9ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGEudHJhbnNsYXRlKCk7dmFyIGU9YS5zY2FsZSgpLG89K3RbMF0sdT0rdFsxXTtyZXR1cm4gbj1hLnRyYW5zbGF0ZSh0KS5jbGlwRXh0ZW50KFtbby0uNDU1KmUsdS0uMjM4KmVdLFtvKy40NTUqZSx1Ky4yMzgqZV1dKS5zdHJlYW0oYyksaT1zLnRyYW5zbGF0ZShbby0uMzA3KmUsdSsuMjAxKmVdKS5jbGlwRXh0ZW50KFtbby0uNDI1KmUrQ3ksdSsuMTIqZStDeV0sW28tLjIxNCplLUN5LHUrLjIzNCplLUN5XV0pLnN0cmVhbShjKSxyPWwudHJhbnNsYXRlKFtvLS4yMDUqZSx1Ky4yMTIqZV0pLmNsaXBFeHRlbnQoW1tvLS4yMTQqZStDeSx1Ky4xNjYqZStDeV0sW28tLjExNSplLUN5LHUrLjIzNCplLUN5XV0pLnN0cmVhbShjKSxoKCl9LHUuZml0RXh0ZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIF93KHUsdCxlKX0sdS5maXRTaXplPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHl3KHUsdCxlKX0sdS5maXRXaWR0aD1mdW5jdGlvbih0LGUpe3JldHVybiB2dyh1LHQsZSl9LHUuZml0SGVpZ2h0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGJ3KHUsdCxlKX0sdS5zY2FsZSgxMDcwKX0sZ2VvQXppbXV0aGFsRXF1YWxBcmVhOmZ1bmN0aW9uIGxJKCl7cmV0dXJuIFR3KE93KS5zY2FsZSgxMjQuNzUpLmNsaXBBbmdsZSgxNzkuOTk5KX0sZ2VvQXppbXV0aGFsRXF1YWxBcmVhUmF3Ok93LGdlb0F6aW11dGhhbEVxdWlkaXN0YW50OmZ1bmN0aW9uIGNJKCl7cmV0dXJuIFR3KFJ3KS5zY2FsZSg3OS40MTg4KS5jbGlwQW5nbGUoMTc5Ljk5OSl9LGdlb0F6aW11dGhhbEVxdWlkaXN0YW50UmF3OlJ3LGdlb0NvbmljQ29uZm9ybWFsOmZ1bmN0aW9uIHVJKCl7cmV0dXJuIEF3KEh3KS5zY2FsZSgxMDkuNSkucGFyYWxsZWxzKFszMCwzMF0pfSxnZW9Db25pY0NvbmZvcm1hbFJhdzpIdyxnZW9Db25pY0VxdWFsQXJlYTpMdyxnZW9Db25pY0VxdWFsQXJlYVJhdzprdyxnZW9Db25pY0VxdWlkaXN0YW50OmZ1bmN0aW9uIGhJKCl7cmV0dXJuIEF3KFZ3KS5zY2FsZSgxMzEuMTU0KS5jZW50ZXIoWzAsMTMuOTM4OV0pfSxnZW9Db25pY0VxdWlkaXN0YW50UmF3OlZ3LGdlb0VxdWFsRWFydGg6ZnVuY3Rpb24gZEkoKXtyZXR1cm4gVHcoWXcpLnNjYWxlKDE3Ny4xNTgpfSxnZW9FcXVhbEVhcnRoUmF3Oll3LGdlb0VxdWlyZWN0YW5ndWxhcjpmdW5jdGlvbiBwSSgpe3JldHVybiBUdyhGdykuc2NhbGUoMTUyLjYzKX0sZ2VvRXF1aXJlY3Rhbmd1bGFyUmF3OkZ3LGdlb0dub21vbmljOmZ1bmN0aW9uIGZJKCl7cmV0dXJuIFR3KFh3KS5zY2FsZSgxNDQuMDQ5KS5jbGlwQW5nbGUoNjApfSxnZW9Hbm9tb25pY1JhdzpYdyxnZW9JZGVudGl0eTpmdW5jdGlvbiBtSSgpe3ZhciB0LGUsbixpLHIsbyxhLHM9MSxsPTAsYz0wLHU9MSxoPTEsZD0wLHA9bnVsbCxmPTEsbT0xLGc9Zncoe3BvaW50OmZ1bmN0aW9uKHQsZSl7dmFyIG49dihbdCxlXSk7dGhpcy5zdHJlYW0ucG9pbnQoblswXSxuWzFdKX19KSxfPW14O2Z1bmN0aW9uIHkoKXtyZXR1cm4gZj1zKnUsbT1zKmgsbz1hPW51bGwsdn1mdW5jdGlvbiB2KG4pe3ZhciBpPW5bMF0qZixyPW5bMV0qbTtpZihkKXt2YXIgbz1yKnQtaSplO2k9aSp0K3IqZSxyPW99cmV0dXJuW2krbCxyK2NdfXJldHVybiB2LmludmVydD1mdW5jdGlvbihuKXt2YXIgaT1uWzBdLWwscj1uWzFdLWM7aWYoZCl7dmFyIG89cip0K2kqZTtpPWkqdC1yKmUscj1vfXJldHVybltpL2Ysci9tXX0sdi5zdHJlYW09ZnVuY3Rpb24odCl7cmV0dXJuIG8mJmE9PT10P286bz1nKF8oYT10KSl9LHYucG9zdGNsaXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KF89dCxwPW49aT1yPW51bGwseSgpKTpffSx2LmNsaXBFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KF89bnVsbD09dD8ocD1uPWk9cj1udWxsLG14KTpHYihwPSt0WzBdWzBdLG49K3RbMF1bMV0saT0rdFsxXVswXSxyPSt0WzFdWzFdKSx5KCkpOm51bGw9PXA/bnVsbDpbW3Asbl0sW2kscl1dfSx2LnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSt0LHkoKSk6c30sdi50cmFuc2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9K3RbMF0sYz0rdFsxXSx5KCkpOltsLGNdfSx2LmFuZ2xlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPWp5KGQ9biUzNjAqT3kpLHQ9QnkoZCkseSgpKTpkKkl5fSx2LnJlZmxlY3RYPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXQ/LTE6MSx5KCkpOnU8MH0sdi5yZWZsZWN0WT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD10Py0xOjEseSgpKTpoPDB9LHYuZml0RXh0ZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIF93KHYsdCxlKX0sdi5maXRTaXplPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHl3KHYsdCxlKX0sdi5maXRXaWR0aD1mdW5jdGlvbih0LGUpe3JldHVybiB2dyh2LHQsZSl9LHYuZml0SGVpZ2h0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGJ3KHYsdCxlKX0sdn0sZ2VvUHJvamVjdGlvbjpUdyxnZW9Qcm9qZWN0aW9uTXV0YXRvcjpDdyxnZW9NZXJjYXRvcjpmdW5jdGlvbiBnSSgpe3JldHVybiBEdyh6dykuc2NhbGUoOTYxL055KX0sZ2VvTWVyY2F0b3JSYXc6encsZ2VvTmF0dXJhbEVhcnRoMTpmdW5jdGlvbiBfSSgpe3JldHVybiBUdygkdykuc2NhbGUoMTc1LjI5NSl9LGdlb05hdHVyYWxFYXJ0aDFSYXc6JHcsZ2VvT3J0aG9ncmFwaGljOmZ1bmN0aW9uIHlJKCl7cmV0dXJuIFR3KEt3KS5zY2FsZSgyNDkuNSkuY2xpcEFuZ2xlKDkwLjAwMDAwMSl9LGdlb09ydGhvZ3JhcGhpY1JhdzpLdyxnZW9TdGVyZW9ncmFwaGljOmZ1bmN0aW9uIHZJKCl7cmV0dXJuIFR3KFp3KS5zY2FsZSgyNTApLmNsaXBBbmdsZSgxNDIpfSxnZW9TdGVyZW9ncmFwaGljUmF3Olp3LGdlb1RyYW5zdmVyc2VNZXJjYXRvcjpmdW5jdGlvbiBiSSgpe3ZhciB0PUR3KEp3KSxlPXQuY2VudGVyLG49dC5yb3RhdGU7cmV0dXJuIHQuY2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2UoWy10WzFdLHRbMF1dKTpbKHQ9ZSgpKVsxXSwtdFswXV19LHQucm90YXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP24oW3RbMF0sdFsxXSx0Lmxlbmd0aD4yP3RbMl0rOTA6OTBdKTpbKHQ9bigpKVswXSx0WzFdLHRbMl0tOTBdfSxuKFswLDAsOTBdKS5zY2FsZSgxNTkuMTU1KX0sZ2VvVHJhbnN2ZXJzZU1lcmNhdG9yUmF3Okp3LGdlb1JvdGF0aW9uOk1iLGdlb1N0cmVhbTpudixnZW9UcmFuc2Zvcm06ZnVuY3Rpb24geEkodCl7cmV0dXJue3N0cmVhbTpmdyh0KX19LGNsdXN0ZXI6ZnVuY3Rpb24gd0koKXt2YXIgdD1RdyxlPTEsbj0xLGk9ITE7ZnVuY3Rpb24gcihyKXt2YXIgbyxhPTA7ci5lYWNoQWZ0ZXIoKGZ1bmN0aW9uKGUpe3ZhciBuPWUuY2hpbGRyZW47bj8oZS54PShmdW5jdGlvbiBpKHQpe3JldHVybiB0LnJlZHVjZSh0UywwKS90Lmxlbmd0aH0pKG4pLGUueT0oZnVuY3Rpb24gcih0KXtyZXR1cm4gMSt0LnJlZHVjZShlUywwKX0pKG4pKTooZS54PW8/YSs9dChlLG8pOjAsZS55PTAsbz1lKX0pKTt2YXIgcz0oZnVuY3Rpb24gbCh0KXtmb3IodmFyIGU7ZT10LmNoaWxkcmVuOyl0PWVbMF07cmV0dXJuIHR9KShyKSxjPShmdW5jdGlvbiB1KHQpe2Zvcih2YXIgZTtlPXQuY2hpbGRyZW47KXQ9ZVtlLmxlbmd0aC0xXTtyZXR1cm4gdH0pKHIpLGg9cy54LXQocyxjKS8yLGQ9Yy54K3QoYyxzKS8yO3JldHVybiByLmVhY2hBZnRlcihpP2Z1bmN0aW9uKHQpe3QueD0odC54LXIueCkqZSx0Lnk9KHIueS10LnkpKm59OmZ1bmN0aW9uKHQpe3QueD0odC54LWgpLyhkLWgpKmUsdC55PSgxLShyLnk/dC55L3IueToxKSkqbn0pfXJldHVybiByLnNlcGFyYXRpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxyKTp0fSxyLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ITEsZT0rdFswXSxuPSt0WzFdLHIpOmk/bnVsbDpbZSxuXX0sci5ub2RlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0hMCxlPSt0WzBdLG49K3RbMV0scik6aT9bZSxuXTpudWxsfSxyfSxoaWVyYXJjaHk6aVMscGFjazpmdW5jdGlvbiBTSSgpe3ZhciB0PW51bGwsZT0xLG49MSxpPXpTO2Z1bmN0aW9uIHIocil7cmV0dXJuIHIueD1lLzIsci55PW4vMix0P3IuZWFjaEJlZm9yZShIUyh0KSkuZWFjaEFmdGVyKEZTKGksLjUpKS5lYWNoQmVmb3JlKFZTKDEpKTpyLmVhY2hCZWZvcmUoSFMoQlMpKS5lYWNoQWZ0ZXIoRlMoelMsMSkpLmVhY2hBZnRlcihGUyhpLHIuci9NYXRoLm1pbihlLG4pKSkuZWFjaEJlZm9yZShWUyhNYXRoLm1pbihlLG4pLygyKnIucikpKSxyfXJldHVybiByLnJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1PUyhlKSxyKTp0fSxyLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K3RbMF0sbj0rdFsxXSxyKTpbZSxuXX0sci5wYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6RFMoK3QpLHIpOml9LHJ9LHBhY2tTaWJsaW5nczpmdW5jdGlvbiBNSSh0KXtyZXR1cm4gSVModCksdH0scGFja0VuY2xvc2U6eFMscGFydGl0aW9uOmZ1bmN0aW9uIEVJKCl7dmFyIHQ9MSxlPTEsbj0wLGk9ITE7ZnVuY3Rpb24gcihyKXt2YXIgbz1yLmhlaWdodCsxO3JldHVybiByLngwPXIueTA9bixyLngxPXQsci55MT1lL28sci5lYWNoQmVmb3JlKChmdW5jdGlvbiBhKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKGkpe2kuY2hpbGRyZW4mJmpTKGksaS54MCx0KihpLmRlcHRoKzEpL2UsaS54MSx0KihpLmRlcHRoKzIpL2UpO3ZhciByPWkueDAsbz1pLnkwLGE9aS54MS1uLHM9aS55MS1uO2E8ciYmKHI9YT0ocithKS8yKSxzPG8mJihvPXM9KG8rcykvMiksaS54MD1yLGkueTA9byxpLngxPWEsaS55MT1zfX0pKGUsbykpLGkmJnIuZWFjaEJlZm9yZShVUykscn1yZXR1cm4gci5yb3VuZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0hIXQscik6aX0sci5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStuWzBdLGU9K25bMV0scik6W3QsZV19LHIucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rdCxyKTpufSxyfSxzdHJhdGlmeTpmdW5jdGlvbiBUSSgpe3ZhciB0PXFTLGU9WVM7ZnVuY3Rpb24gbihuKXt2YXIgaSxyLG8sYSxzLGwsYyx1PW4ubGVuZ3RoLGg9bmV3IEFycmF5KHUpLGQ9e307Zm9yKHI9MDtyPHU7KytyKXM9aFtyXT1uZXcgc1MoaT1uW3JdKSxudWxsIT0obD10KGkscixuKSkmJihsKz0iIikmJihkW2M9IiQiKyhzLmlkPWwpXT1jIGluIGQ/V1M6cyk7Zm9yKHI9MDtyPHU7KytyKWlmKHM9aFtyXSxudWxsIT0obD1lKG5bcl0scixuKSkmJihsKz0iIikpe2lmKCEoYT1kWyIkIitsXSkpdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nOiAiK2wpO2lmKGE9PT1XUyl0aHJvdyBuZXcgRXJyb3IoImFtYmlndW91czogIitsKTthLmNoaWxkcmVuP2EuY2hpbGRyZW4ucHVzaChzKTphLmNoaWxkcmVuPVtzXSxzLnBhcmVudD1hfWVsc2V7aWYobyl0aHJvdyBuZXcgRXJyb3IoIm11bHRpcGxlIHJvb3RzIik7bz1zfWlmKCFvKXRocm93IG5ldyBFcnJvcigibm8gcm9vdCIpO2lmKG8ucGFyZW50PUdTLG8uZWFjaEJlZm9yZSgoZnVuY3Rpb24odCl7dC5kZXB0aD10LnBhcmVudC5kZXB0aCsxLC0tdX0pKS5lYWNoQmVmb3JlKGFTKSxvLnBhcmVudD1udWxsLHU+MCl0aHJvdyBuZXcgRXJyb3IoImN5Y2xlIik7cmV0dXJuIG99cmV0dXJuIG4uaWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9UlMoZSksbik6dH0sbi5wYXJlbnRJZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1SUyh0KSxuKTplfSxufSx0cmVlOmZ1bmN0aW9uIENJKCl7dmFyIHQ9WFMsZT0xLG49MSxpPW51bGw7ZnVuY3Rpb24gcihyKXt2YXIgbD0oZnVuY3Rpb24gYyh0KXtmb3IodmFyIGUsbixpLHIsbyxhPW5ldyBRUyh0LDApLHM9W2FdO2U9cy5wb3AoKTspaWYoaT1lLl8uY2hpbGRyZW4pZm9yKGUuY2hpbGRyZW49bmV3IEFycmF5KG89aS5sZW5ndGgpLHI9by0xO3I+PTA7LS1yKXMucHVzaChuPWUuY2hpbGRyZW5bcl09bmV3IFFTKGlbcl0scikpLG4ucGFyZW50PWU7cmV0dXJuKGEucGFyZW50PW5ldyBRUyhudWxsLDApKS5jaGlsZHJlbj1bYV0sYX0pKHIpO2lmKGwuZWFjaEFmdGVyKG8pLGwucGFyZW50Lm09LWwueixsLmVhY2hCZWZvcmUoYSksaSlyLmVhY2hCZWZvcmUocyk7ZWxzZXt2YXIgdT1yLGg9cixkPXI7ci5lYWNoQmVmb3JlKChmdW5jdGlvbih0KXt0Lng8dS54JiYodT10KSx0Lng+aC54JiYoaD10KSx0LmRlcHRoPmQuZGVwdGgmJihkPXQpfSkpO3ZhciBwPXU9PT1oPzE6dCh1LGgpLzIsZj1wLXUueCxtPWUvKGgueCtwK2YpLGc9bi8oZC5kZXB0aHx8MSk7ci5lYWNoQmVmb3JlKChmdW5jdGlvbih0KXt0Lng9KHQueCtmKSptLHQueT10LmRlcHRoKmd9KSl9cmV0dXJuIHJ9ZnVuY3Rpb24gbyhlKXt2YXIgbj1lLmNoaWxkcmVuLGk9ZS5wYXJlbnQuY2hpbGRyZW4scj1lLmk/aVtlLmktMV06bnVsbDtpZihuKXshKGZ1bmN0aW9uIG8odCl7Zm9yKHZhciBlLG49MCxpPTAscj10LmNoaWxkcmVuLG89ci5sZW5ndGg7LS1vPj0wOykoZT1yW29dKS56Kz1uLGUubSs9bixuKz1lLnMrKGkrPWUuYyl9KShlKTt2YXIgYT0oblswXS56K25bbi5sZW5ndGgtMV0ueikvMjtyPyhlLno9ci56K3QoZS5fLHIuXyksZS5tPWUuei1hKTplLno9YX1lbHNlIHImJihlLno9ci56K3QoZS5fLHIuXykpO2UucGFyZW50LkE9KGZ1bmN0aW9uIHMoZSxuLGkpe2lmKG4pe2Zvcih2YXIgcixvPWUsYT1lLHM9bixsPW8ucGFyZW50LmNoaWxkcmVuWzBdLGM9by5tLHU9YS5tLGg9cy5tLGQ9bC5tO3M9S1Mocyksbz0kUyhvKSxzJiZvOylsPSRTKGwpLChhPUtTKGEpKS5hPWUsKHI9cy56K2gtby56LWMrdChzLl8sby5fKSk+MCYmKFpTKEpTKHMsZSxpKSxlLHIpLGMrPXIsdSs9ciksaCs9cy5tLGMrPW8ubSxkKz1sLm0sdSs9YS5tO3MmJiFLUyhhKSYmKGEudD1zLGEubSs9aC11KSxvJiYhJFMobCkmJihsLnQ9byxsLm0rPWMtZCxpPWUpfXJldHVybiBpfSkoZSxyLGUucGFyZW50LkF8fGlbMF0pfWZ1bmN0aW9uIGEodCl7dC5fLng9dC56K3QucGFyZW50Lm0sdC5tKz10LnBhcmVudC5tfWZ1bmN0aW9uIHModCl7dC54Kj1lLHQueT10LmRlcHRoKm59cmV0dXJuIHIuc2VwYXJhdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLHIpOnR9LHIuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0hMSxlPSt0WzBdLG49K3RbMV0scik6aT9udWxsOltlLG5dfSxyLm5vZGVTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSEwLGU9K3RbMF0sbj0rdFsxXSxyKTppP1tlLG5dOm51bGx9LHJ9LHRyZWVtYXA6ZnVuY3Rpb24gQUkoKXt2YXIgdD1pTSxlPSExLG49MSxpPTEscj1bMF0sbz16UyxhPXpTLHM9elMsbD16UyxjPXpTO2Z1bmN0aW9uIHUodCl7cmV0dXJuIHQueDA9dC55MD0wLHQueDE9bix0LnkxPWksdC5lYWNoQmVmb3JlKGgpLHI9WzBdLGUmJnQuZWFjaEJlZm9yZShVUyksdH1mdW5jdGlvbiBoKGUpe3ZhciBuPXJbZS5kZXB0aF0saT1lLngwK24sdT1lLnkwK24saD1lLngxLW4sZD1lLnkxLW47aDxpJiYoaT1oPShpK2gpLzIpLGQ8dSYmKHU9ZD0odStkKS8yKSxlLngwPWksZS55MD11LGUueDE9aCxlLnkxPWQsZS5jaGlsZHJlbiYmKG49cltlLmRlcHRoKzFdPW8oZSkvMixpKz1jKGUpLW4sdSs9YShlKS1uLChoLT1zKGUpLW4pPGkmJihpPWg9KGkraCkvMiksKGQtPWwoZSktbik8dSYmKHU9ZD0odStkKS8yKSx0KGUsaSx1LGgsZCkpfXJldHVybiB1LnJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSEhdCx1KTplfSx1LnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K3RbMF0saT0rdFsxXSx1KTpbbixpXX0sdS50aWxlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PVJTKGUpLHUpOnR9LHUucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD91LnBhZGRpbmdJbm5lcih0KS5wYWRkaW5nT3V0ZXIodCk6dS5wYWRkaW5nSW5uZXIoKX0sdS5wYWRkaW5nSW5uZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpEUygrdCksdSk6b30sdS5wYWRkaW5nT3V0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dS5wYWRkaW5nVG9wKHQpLnBhZGRpbmdSaWdodCh0KS5wYWRkaW5nQm90dG9tKHQpLnBhZGRpbmdMZWZ0KHQpOnUucGFkZGluZ1RvcCgpfSx1LnBhZGRpbmdUb3A9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpEUygrdCksdSk6YX0sdS5wYWRkaW5nUmlnaHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpEUygrdCksdSk6c30sdS5wYWRkaW5nQm90dG9tPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6RFMoK3QpLHUpOmx9LHUucGFkZGluZ0xlZnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpEUygrdCksdSk6Y30sdX0sdHJlZW1hcEJpbmFyeTpmdW5jdGlvbiBrSSh0LGUsbixpLHIpe3ZhciBvLGEscz10LmNoaWxkcmVuLGw9cy5sZW5ndGgsYz1uZXcgQXJyYXkobCsxKTtmb3IoY1swXT1hPW89MDtvPGw7KytvKWNbbysxXT1hKz1zW29dLnZhbHVlOyEoZnVuY3Rpb24gdChlLG4saSxyLG8sYSxsKXtpZihlPj1uLTEpe3ZhciB1PXNbZV07cmV0dXJuIHUueDA9cix1LnkwPW8sdS54MT1hLHZvaWQodS55MT1sKX1mb3IodmFyIGg9Y1tlXSxkPWkvMitoLHA9ZSsxLGY9bi0xO3A8Zjspe3ZhciBtPXArZj4+PjE7Y1ttXTxkP3A9bSsxOmY9bX1kLWNbcC0xXTxjW3BdLWQmJmUrMTxwJiYtLXA7dmFyIGc9Y1twXS1oLF89aS1nO2lmKGEtcj5sLW8pe3ZhciB5PShyKl8rYSpnKS9pO3QoZSxwLGcscixvLHksbCksdChwLG4sXyx5LG8sYSxsKX1lbHNle3ZhciB2PShvKl8rbCpnKS9pO3QoZSxwLGcscixvLGEsdiksdChwLG4sXyxyLHYsYSxsKX19KSgwLGwsdC52YWx1ZSxlLG4saSxyKX0sdHJlZW1hcERpY2U6alMsdHJlZW1hcFNsaWNlOnRNLHRyZWVtYXBTbGljZURpY2U6ZnVuY3Rpb24gTEkodCxlLG4saSxyKXsoMSZ0LmRlcHRoP3RNOmpTKSh0LGUsbixpLHIpfSx0cmVlbWFwU3F1YXJpZnk6aU0sdHJlZW1hcFJlc3F1YXJpZnk6ck0saW50ZXJwb2xhdGU6VWQsaW50ZXJwb2xhdGVBcnJheTpmdW5jdGlvbiBQSSh0LGUpe3JldHVybihPZChlKT9JZDpSZCkodCxlKX0saW50ZXJwb2xhdGVCYXNpczpTZCxpbnRlcnBvbGF0ZUJhc2lzQ2xvc2VkOk1kLGludGVycG9sYXRlRGF0ZTp6ZCxpbnRlcnBvbGF0ZURpc2NyZXRlOmZ1bmN0aW9uIE5JKHQpe3ZhciBlPXQubGVuZ3RoO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdFtNYXRoLm1heCgwLE1hdGgubWluKGUtMSxNYXRoLmZsb29yKG4qZSkpKV19fSxpbnRlcnBvbGF0ZUh1ZTpmdW5jdGlvbiBJSSh0LGUpe3ZhciBuPUNkKCt0LCtlKTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9bih0KTtyZXR1cm4gZS0zNjAqTWF0aC5mbG9vcihlLzM2MCl9fSxpbnRlcnBvbGF0ZU51bWJlcjpEZCxpbnRlcnBvbGF0ZU51bWJlckFycmF5OklkLGludGVycG9sYXRlT2JqZWN0OkJkLGludGVycG9sYXRlUm91bmQ6amQsaW50ZXJwb2xhdGVTdHJpbmc6VmQsaW50ZXJwb2xhdGVUcmFuc2Zvcm1Dc3M6SmQsaW50ZXJwb2xhdGVUcmFuc2Zvcm1Tdmc6dHAsaW50ZXJwb2xhdGVab29tOnJwLGludGVycG9sYXRlUmdiOmtkLGludGVycG9sYXRlUmdiQmFzaXM6UGQsaW50ZXJwb2xhdGVSZ2JCYXNpc0Nsb3NlZDpOZCxpbnRlcnBvbGF0ZUhzbDphcCxpbnRlcnBvbGF0ZUhzbExvbmc6c3AsaW50ZXJwb2xhdGVMYWI6bHAsaW50ZXJwb2xhdGVIY2w6dXAsaW50ZXJwb2xhdGVIY2xMb25nOmhwLGludGVycG9sYXRlQ3ViZWhlbGl4Om1wLGludGVycG9sYXRlQ3ViZWhlbGl4TG9uZzpncCxwaWVjZXdpc2U6ZnVuY3Rpb24gT0kodCxlKXtmb3IodmFyIG49MCxpPWUubGVuZ3RoLTEscj1lWzBdLG89bmV3IEFycmF5KGk8MD8wOmkpO248aTspb1tuXT10KHIscj1lWysrbl0pO3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgwLE1hdGgubWluKGktMSxNYXRoLmZsb29yKHQqPWkpKSk7cmV0dXJuIG9bZV0odC1lKX19LHF1YW50aXplOmZ1bmN0aW9uIFJJKHQsZSl7Zm9yKHZhciBuPW5ldyBBcnJheShlKSxpPTA7aTxlOysraSluW2ldPXQoaS8oZS0xKSk7cmV0dXJuIG59LHBhdGg6cGcscG9seWdvbkFyZWE6ZnVuY3Rpb24gekkodCl7Zm9yKHZhciBlLG49LTEsaT10Lmxlbmd0aCxyPXRbaS0xXSxvPTA7KytuPGk7KW8rPShlPXIpWzFdKihyPXRbbl0pWzBdLWVbMF0qclsxXTtyZXR1cm4gby8yfSxwb2x5Z29uQ2VudHJvaWQ6ZnVuY3Rpb24gREkodCl7Zm9yKHZhciBlLG4saT0tMSxyPXQubGVuZ3RoLG89MCxhPTAscz10W3ItMV0sbD0wOysraTxyOylsKz1uPShlPXMpWzBdKihzPXRbaV0pWzFdLXNbMF0qZVsxXSxvKz0oZVswXStzWzBdKSpuLGErPShlWzFdK3NbMV0pKm47cmV0dXJuW28vKGwqPTMpLGEvbF19LHBvbHlnb25IdWxsOmZ1bmN0aW9uIEJJKHQpe2lmKChuPXQubGVuZ3RoKTwzKXJldHVybiBudWxsO3ZhciBlLG4saT1uZXcgQXJyYXkobikscj1uZXcgQXJyYXkobik7Zm9yKGU9MDtlPG47KytlKWlbZV09Wyt0W2VdWzBdLCt0W2VdWzFdLGVdO2ZvcihpLnNvcnQoYU0pLGU9MDtlPG47KytlKXJbZV09W2lbZV1bMF0sLWlbZV1bMV1dO3ZhciBvPXNNKGkpLGE9c00ocikscz1hWzBdPT09b1swXSxsPWFbYS5sZW5ndGgtMV09PT1vW28ubGVuZ3RoLTFdLGM9W107Zm9yKGU9by5sZW5ndGgtMTtlPj0wOy0tZSljLnB1c2godFtpW29bZV1dWzJdXSk7Zm9yKGU9K3M7ZTxhLmxlbmd0aC1sOysrZSljLnB1c2godFtpW2FbZV1dWzJdXSk7cmV0dXJuIGN9LHBvbHlnb25Db250YWluczpmdW5jdGlvbiBISSh0LGUpe2Zvcih2YXIgbixpLHI9dC5sZW5ndGgsbz10W3ItMV0sYT1lWzBdLHM9ZVsxXSxsPW9bMF0sYz1vWzFdLHU9ITEsaD0wO2g8cjsrK2gpbj0obz10W2hdKVswXSwoaT1vWzFdKT5zIT1jPnMmJmE8KGwtbikqKHMtaSkvKGMtaSkrbiYmKHU9IXUpLGw9bixjPWk7cmV0dXJuIHV9LHBvbHlnb25MZW5ndGg6ZnVuY3Rpb24gRkkodCl7Zm9yKHZhciBlLG4saT0tMSxyPXQubGVuZ3RoLG89dFtyLTFdLGE9b1swXSxzPW9bMV0sbD0wOysraTxyOyllPWEsbj1zLGUtPWE9KG89dFtpXSlbMF0sbi09cz1vWzFdLGwrPU1hdGguc3FydChlKmUrbipuKTtyZXR1cm4gbH0scXVhZHRyZWU6UF8scmFuZG9tVW5pZm9ybTpjTSxyYW5kb21Ob3JtYWw6dU0scmFuZG9tTG9nTm9ybWFsOmhNLHJhbmRvbUJhdGVzOnBNLHJhbmRvbUlyd2luSGFsbDpkTSxyYW5kb21FeHBvbmVudGlhbDpmTSxzY2FsZUJhbmQ6d00sc2NhbGVQb2ludDpNTSxzY2FsZUlkZW50aXR5OmZ1bmN0aW9uIHQoZSl7dmFyIG47ZnVuY3Rpb24gaSh0KXtyZXR1cm4gaXNOYU4odD0rdCk/bjp0fXJldHVybiBpLmludmVydD1pLGkuZG9tYWluPWkucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9eU0uY2FsbCh0LEVNKSxpKTplLnNsaWNlKCl9LGkudW5rbm93bj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LGkpOm59LGkuY29weT1mdW5jdGlvbigpe3JldHVybiB0KGUpLnVua25vd24obil9LGU9YXJndW1lbnRzLmxlbmd0aD95TS5jYWxsKGUsRU0pOlswLDFdLHpNKGkpfSxzY2FsZUxpbmVhcjpETSxzY2FsZUxvZzpxTSxzY2FsZVN5bWxvZzpmdW5jdGlvbiB0KCl7dmFyIGU9JE0oSU0oKSk7cmV0dXJuIGUuY29weT1mdW5jdGlvbigpe3JldHVybiBOTShlLHQoKSkuY29uc3RhbnQoZS5jb25zdGFudCgpKX0sbU0uYXBwbHkoZSxhcmd1bWVudHMpfSxzY2FsZU9yZGluYWw6eE0sc2NhbGVJbXBsaWNpdDpiTSxzY2FsZVBvdzp0RSxzY2FsZVNxcnQ6ZnVuY3Rpb24gVkkoKXtyZXR1cm4gdEUuYXBwbHkobnVsbCxhcmd1bWVudHMpLmV4cG9uZW50KC41KX0sc2NhbGVRdWFudGlsZTplRSxzY2FsZVF1YW50aXplOm5FLHNjYWxlVGhyZXNob2xkOmZ1bmN0aW9uIHQoKXt2YXIgZSxuPVsuNV0saT1bMCwxXSxyPTE7ZnVuY3Rpb24gbyh0KXtyZXR1cm4gdDw9dD9pW3dsKG4sdCwwLHIpXTplfXJldHVybiBvLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj12TS5jYWxsKHQpLHI9TWF0aC5taW4obi5sZW5ndGgsaS5sZW5ndGgtMSksbyk6bi5zbGljZSgpfSxvLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXZNLmNhbGwodCkscj1NYXRoLm1pbihuLmxlbmd0aCxpLmxlbmd0aC0xKSxvKTppLnNsaWNlKCl9LG8uaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHQpe3ZhciBlPWkuaW5kZXhPZih0KTtyZXR1cm5bbltlLTFdLG5bZV1dfSxvLnVua25vd249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxvKTplfSxvLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gdCgpLmRvbWFpbihuKS5yYW5nZShpKS51bmtub3duKGUpfSxtTS5hcHBseShvLGFyZ3VtZW50cyl9LHNjYWxlVGltZTpZQyxzY2FsZVV0YzpmdW5jdGlvbiBVSSgpe3JldHVybiBtTS5hcHBseShxQyhjVCxzVCxZRSxHRSxVRSxGRSxwRSxhRSx5VCkuZG9tYWluKFtEYXRlLlVUQygyZTMsMCwxKSxEYXRlLlVUQygyZTMsMCwyKV0pLGFyZ3VtZW50cyl9LHNjYWxlU2VxdWVudGlhbDpmdW5jdGlvbiB0KCl7dmFyIGU9ek0oWEMoKShDTSkpO3JldHVybiBlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gJEMoZSx0KCkpfSxnTS5hcHBseShlLGFyZ3VtZW50cyl9LHNjYWxlU2VxdWVudGlhbExvZzpmdW5jdGlvbiB0KCl7dmFyIGU9V00oWEMoKSkuZG9tYWluKFsxLDEwXSk7cmV0dXJuIGUuY29weT1mdW5jdGlvbigpe3JldHVybiAkQyhlLHQoKSkuYmFzZShlLmJhc2UoKSl9LGdNLmFwcGx5KGUsYXJndW1lbnRzKX0sc2NhbGVTZXF1ZW50aWFsUG93OktDLHNjYWxlU2VxdWVudGlhbFNxcnQ6ZnVuY3Rpb24gakkoKXtyZXR1cm4gS0MuYXBwbHkobnVsbCxhcmd1bWVudHMpLmV4cG9uZW50KC41KX0sc2NhbGVTZXF1ZW50aWFsU3ltbG9nOmZ1bmN0aW9uIHQoKXt2YXIgZT0kTShYQygpKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuICRDKGUsdCgpKS5jb25zdGFudChlLmNvbnN0YW50KCkpfSxnTS5hcHBseShlLGFyZ3VtZW50cyl9LHNjYWxlU2VxdWVudGlhbFF1YW50aWxlOmZ1bmN0aW9uIHQoKXt2YXIgZT1bXSxuPUNNO2Z1bmN0aW9uIGkodCl7aWYoIWlzTmFOKHQ9K3QpKXJldHVybiBuKCh3bChlLHQpLTEpLyhlLmxlbmd0aC0xKSl9cmV0dXJuIGkuZG9tYWluPWZ1bmN0aW9uKHQpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBlLnNsaWNlKCk7ZT1bXTtmb3IodmFyIG4scj0wLG89dC5sZW5ndGg7cjxvOysrciludWxsPT0obj10W3JdKXx8aXNOYU4obj0rbil8fGUucHVzaChuKTtyZXR1cm4gZS5zb3J0KHZsKSxpfSxpLmludGVycG9sYXRvcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LGkpOm59LGkuY29weT1mdW5jdGlvbigpe3JldHVybiB0KG4pLmRvbWFpbihlKX0sZ00uYXBwbHkoaSxhcmd1bWVudHMpfSxzY2FsZURpdmVyZ2luZzpmdW5jdGlvbiB0KCl7dmFyIGU9ek0oWkMoKShDTSkpO3JldHVybiBlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gJEMoZSx0KCkpfSxnTS5hcHBseShlLGFyZ3VtZW50cyl9LHNjYWxlRGl2ZXJnaW5nTG9nOmZ1bmN0aW9uIHQoKXt2YXIgZT1XTShaQygpKS5kb21haW4oWy4xLDEsMTBdKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuICRDKGUsdCgpKS5iYXNlKGUuYmFzZSgpKX0sZ00uYXBwbHkoZSxhcmd1bWVudHMpfSxzY2FsZURpdmVyZ2luZ1BvdzpKQyxzY2FsZURpdmVyZ2luZ1NxcnQ6ZnVuY3Rpb24gR0koKXtyZXR1cm4gSkMuYXBwbHkobnVsbCxhcmd1bWVudHMpLmV4cG9uZW50KC41KX0sc2NhbGVEaXZlcmdpbmdTeW1sb2c6ZnVuY3Rpb24gdCgpe3ZhciBlPSRNKFpDKCkpO3JldHVybiBlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gJEMoZSx0KCkpLmNvbnN0YW50KGUuY29uc3RhbnQoKSl9LGdNLmFwcGx5KGUsYXJndW1lbnRzKX0sdGlja0Zvcm1hdDpSTSxzY2hlbWVDYXRlZ29yeTEwOnRBLHNjaGVtZUFjY2VudDplQSxzY2hlbWVEYXJrMjpuQSxzY2hlbWVQYWlyZWQ6aUEsc2NoZW1lUGFzdGVsMTpyQSxzY2hlbWVQYXN0ZWwyOm9BLHNjaGVtZVNldDE6YUEsc2NoZW1lU2V0MjpzQSxzY2hlbWVTZXQzOmxBLHNjaGVtZVRhYmxlYXUxMDpjQSxpbnRlcnBvbGF0ZUJyQkc6ZEEsc2NoZW1lQnJCRzpoQSxpbnRlcnBvbGF0ZVBSR246ZkEsc2NoZW1lUFJHbjpwQSxpbnRlcnBvbGF0ZVBpWUc6Z0Esc2NoZW1lUGlZRzptQSxpbnRlcnBvbGF0ZVB1T3I6eUEsc2NoZW1lUHVPcjpfQSxpbnRlcnBvbGF0ZVJkQnU6YkEsc2NoZW1lUmRCdTp2QSxpbnRlcnBvbGF0ZVJkR3k6d0Esc2NoZW1lUmRHeTp4QSxpbnRlcnBvbGF0ZVJkWWxCdTpNQSxzY2hlbWVSZFlsQnU6U0EsaW50ZXJwb2xhdGVSZFlsR246VEEsc2NoZW1lUmRZbEduOkVBLGludGVycG9sYXRlU3BlY3RyYWw6QUEsc2NoZW1lU3BlY3RyYWw6Q0EsaW50ZXJwb2xhdGVCdUduOkxBLHNjaGVtZUJ1R246a0EsaW50ZXJwb2xhdGVCdVB1Ok5BLHNjaGVtZUJ1UHU6UEEsaW50ZXJwb2xhdGVHbkJ1Ok9BLHNjaGVtZUduQnU6SUEsaW50ZXJwb2xhdGVPclJkOnpBLHNjaGVtZU9yUmQ6UkEsaW50ZXJwb2xhdGVQdUJ1R246QkEsc2NoZW1lUHVCdUduOkRBLGludGVycG9sYXRlUHVCdTpGQSxzY2hlbWVQdUJ1OkhBLGludGVycG9sYXRlUHVSZDpVQSxzY2hlbWVQdVJkOlZBLGludGVycG9sYXRlUmRQdTpHQSxzY2hlbWVSZFB1OmpBLGludGVycG9sYXRlWWxHbkJ1OnFBLHNjaGVtZVlsR25CdTpXQSxpbnRlcnBvbGF0ZVlsR246WEEsc2NoZW1lWWxHbjpZQSxpbnRlcnBvbGF0ZVlsT3JCcjpLQSxzY2hlbWVZbE9yQnI6JEEsaW50ZXJwb2xhdGVZbE9yUmQ6SkEsc2NoZW1lWWxPclJkOlpBLGludGVycG9sYXRlQmx1ZXM6dGssc2NoZW1lQmx1ZXM6UUEsaW50ZXJwb2xhdGVHcmVlbnM6bmssc2NoZW1lR3JlZW5zOmVrLGludGVycG9sYXRlR3JleXM6cmssc2NoZW1lR3JleXM6aWssaW50ZXJwb2xhdGVQdXJwbGVzOmFrLHNjaGVtZVB1cnBsZXM6b2ssaW50ZXJwb2xhdGVSZWRzOmxrLHNjaGVtZVJlZHM6c2ssaW50ZXJwb2xhdGVPcmFuZ2VzOnVrLHNjaGVtZU9yYW5nZXM6Y2ssaW50ZXJwb2xhdGVDaXZpZGlzOmZ1bmN0aW9uIFdJKHQpe3JldHVybiB0PU1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSksInJnYigiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoLTQuNTQtdCooMzUuMzQtdCooMjM4MS43My10Kig2NDAyLjctdCooNzAyNC43Mi0yNzEwLjU3KnQpKSkpKSkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCgzMi40OSt0KigxNzAuNzMrdCooNTIuODItdCooMTMxLjQ2LXQqKDE3Ni41OC02Ny4zNyp0KSkpKSkpKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoODEuMjQrdCooNDQyLjM2LXQqKDI0ODIuNDMtdCooNjE2Ny4yNC10Kig2NjE0Ljk0LTI0NzUuNjcqdCkpKSkpKSkrIikifSxpbnRlcnBvbGF0ZUN1YmVoZWxpeERlZmF1bHQ6aGssaW50ZXJwb2xhdGVSYWluYm93OmZ1bmN0aW9uIHFJKHQpeyh0PDB8fHQ+MSkmJih0LT1NYXRoLmZsb29yKHQpKTt2YXIgZT1NYXRoLmFicyh0LS41KTtyZXR1cm4gZmsuaD0zNjAqdC0xMDAsZmsucz0xLjUtMS41KmUsZmsubD0uOC0uOSplLGZrKyIifSxpbnRlcnBvbGF0ZVdhcm06ZGssaW50ZXJwb2xhdGVDb29sOnBrLGludGVycG9sYXRlU2luZWJvdzpmdW5jdGlvbiBZSSh0KXt2YXIgZTtyZXR1cm4gdD0oLjUtdCkqTWF0aC5QSSxtay5yPTI1NSooZT1NYXRoLnNpbih0KSkqZSxtay5nPTI1NSooZT1NYXRoLnNpbih0K2drKSkqZSxtay5iPTI1NSooZT1NYXRoLnNpbih0K19rKSkqZSxtaysiIn0saW50ZXJwb2xhdGVUdXJibzpmdW5jdGlvbiBYSSh0KXtyZXR1cm4gdD1NYXRoLm1heCgwLE1hdGgubWluKDEsdCkpLCJyZ2IoIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKDM0LjYxK3QqKDExNzIuMzMtdCooMTA3OTMuNTYtdCooMzMzMDAuMTItdCooMzgzOTQuNDktMTQ4MjUuMDUqdCkpKSkpKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKDIzLjMxK3QqKDU1Ny4zMyt0KigxMjI1LjMzLXQqKDM1NzQuOTYtdCooMTA3My43Nys3MDcuNTYqdCkpKSkpKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKDI3LjIrdCooMzIxMS4xLXQqKDE1MzI3Ljk3LXQqKDI3ODE0LXQqKDIyNTY5LjE4LTY4MzguNjYqdCkpKSkpKSkrIikifSxpbnRlcnBvbGF0ZVZpcmlkaXM6dmssaW50ZXJwb2xhdGVNYWdtYTpiayxpbnRlcnBvbGF0ZUluZmVybm86eGssaW50ZXJwb2xhdGVQbGFzbWE6d2ssY3JlYXRlOmZ1bmN0aW9uICRJKHQpe3JldHVybiB3dShfYyh0KS5jYWxsKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkpfSxjcmVhdG9yOl9jLGxvY2FsOmVoLG1hdGNoZXI6d2MsbW91c2U6b2gsbmFtZXNwYWNlOmZjLG5hbWVzcGFjZXM6cGMsY2xpZW50UG9pbnQ6cmgsc2VsZWN0Ond1LHNlbGVjdEFsbDphaCxzZWxlY3Rpb246eHUsc2VsZWN0b3I6dmMsc2VsZWN0b3JBbGw6eGMsc3R5bGU6QmMsdG91Y2g6c2gsdG91Y2hlczpmdW5jdGlvbiBLSSh0LGUpe251bGw9PWUmJihlPWloKCkudG91Y2hlcyk7Zm9yKHZhciBuPTAsaT1lP2UubGVuZ3RoOjAscj1uZXcgQXJyYXkoaSk7bjxpOysrbilyW25dPXJoKHQsZVtuXSk7cmV0dXJuIHJ9LHdpbmRvdzpPYyxnZXQgZXZlbnQoKXtyZXR1cm4gY3V9LGN1c3RvbUV2ZW50Om11LGFyYzpmdW5jdGlvbiBaSSgpe3ZhciB0PURrLGU9Qmssbj1TaygwKSxpPW51bGwscj1IayxvPUZrLGE9Vmsscz1udWxsO2Z1bmN0aW9uIGwoKXt2YXIgbCxjLHU9K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpLGg9K2UuYXBwbHkodGhpcyxhcmd1bWVudHMpLGQ9ci5hcHBseSh0aGlzLGFyZ3VtZW50cyktSWsscD1vLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1JayxmPU1rKHAtZCksbT1wPmQ7aWYoc3x8KHM9bD1wZygpKSxoPHUmJihjPWgsaD11LHU9YyksaD5QaylpZihmPk9rLVBrKXMubW92ZVRvKGgqVGsoZCksaCprayhkKSkscy5hcmMoMCwwLGgsZCxwLCFtKSx1PlBrJiYocy5tb3ZlVG8odSpUayhwKSx1KmtrKHApKSxzLmFyYygwLDAsdSxwLGQsbSkpO2Vsc2V7dmFyIGcsXyx5PWQsdj1wLGI9ZCx4PXAsdz1mLFM9ZixNPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpLzIsRT1NPlBrJiYoaT8raS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6TGsodSp1K2gqaCkpLFQ9QWsoTWsoaC11KS8yLCtuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksQz1ULEE9VDtpZihFPlBrKXt2YXIgaz16ayhFL3Uqa2soTSkpLEw9emsoRS9oKmtrKE0pKTsody09MiprKT5Qaz8oYis9ayo9bT8xOi0xLHgtPWspOih3PTAsYj14PShkK3ApLzIpLChTLT0yKkwpPlBrPyh5Kz1MKj1tPzE6LTEsdi09TCk6KFM9MCx5PXY9KGQrcCkvMil9dmFyIFA9aCpUayh5KSxOPWgqa2soeSksST11KlRrKHgpLE89dSprayh4KTtpZihUPlBrKXt2YXIgUix6PWgqVGsodiksRD1oKmtrKHYpLEI9dSpUayhiKSxIPXUqa2soYik7aWYoZjxOayYmKFI9VWsoUCxOLEIsSCx6LEQsSSxPKSkpe3ZhciBGPVAtUlswXSxWPU4tUlsxXSxVPXotUlswXSxqPUQtUlsxXSxHPTEva2soUmsoKEYqVStWKmopLyhMayhGKkYrVipWKSpMayhVKlUraipqKSkpLzIpLFc9TGsoUlswXSpSWzBdK1JbMV0qUlsxXSk7Qz1BayhULCh1LVcpLyhHLTEpKSxBPUFrKFQsKGgtVykvKEcrMSkpfX1TPlBrP0E+UGs/KGc9amsoQixILFAsTixoLEEsbSksXz1qayh6LEQsSSxPLGgsQSxtKSxzLm1vdmVUbyhnLmN4K2cueDAxLGcuY3krZy55MDEpLEE8VD9zLmFyYyhnLmN4LGcuY3ksQSxFayhnLnkwMSxnLngwMSksRWsoXy55MDEsXy54MDEpLCFtKToocy5hcmMoZy5jeCxnLmN5LEEsRWsoZy55MDEsZy54MDEpLEVrKGcueTExLGcueDExKSwhbSkscy5hcmMoMCwwLGgsRWsoZy5jeStnLnkxMSxnLmN4K2cueDExKSxFayhfLmN5K18ueTExLF8uY3grXy54MTEpLCFtKSxzLmFyYyhfLmN4LF8uY3ksQSxFayhfLnkxMSxfLngxMSksRWsoXy55MDEsXy54MDEpLCFtKSkpOihzLm1vdmVUbyhQLE4pLHMuYXJjKDAsMCxoLHksdiwhbSkpOnMubW92ZVRvKFAsTiksdT5QayYmdz5Qaz9DPlBrPyhnPWprKEksTyx6LEQsdSwtQyxtKSxfPWprKFAsTixCLEgsdSwtQyxtKSxzLmxpbmVUbyhnLmN4K2cueDAxLGcuY3krZy55MDEpLEM8VD9zLmFyYyhnLmN4LGcuY3ksQyxFayhnLnkwMSxnLngwMSksRWsoXy55MDEsXy54MDEpLCFtKToocy5hcmMoZy5jeCxnLmN5LEMsRWsoZy55MDEsZy54MDEpLEVrKGcueTExLGcueDExKSwhbSkscy5hcmMoMCwwLHUsRWsoZy5jeStnLnkxMSxnLmN4K2cueDExKSxFayhfLmN5K18ueTExLF8uY3grXy54MTEpLG0pLHMuYXJjKF8uY3gsXy5jeSxDLEVrKF8ueTExLF8ueDExKSxFayhfLnkwMSxfLngwMSksIW0pKSk6cy5hcmMoMCwwLHUseCxiLG0pOnMubGluZVRvKEksTyl9ZWxzZSBzLm1vdmVUbygwLDApO2lmKHMuY2xvc2VQYXRoKCksbClyZXR1cm4gcz1udWxsLGwrIiJ8fG51bGx9cmV0dXJuIGwuY2VudHJvaWQ9ZnVuY3Rpb24oKXt2YXIgbj0oK3QuYXBwbHkodGhpcyxhcmd1bWVudHMpKyArZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzIsaT0oK3IuYXBwbHkodGhpcyxhcmd1bWVudHMpKyArby5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzItTmsvMjtyZXR1cm5bVGsoaSkqbixrayhpKSpuXX0sbC5pbm5lclJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOlNrKCtlKSxsKTp0fSxsLm91dGVyUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6U2soK3QpLGwpOmV9LGwuY29ybmVyUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6U2soK3QpLGwpOm59LGwucGFkUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PXQ/bnVsbDoiZnVuY3Rpb24iPT10eXBlb2YgdD90OlNrKCt0KSxsKTppfSxsLnN0YXJ0QW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpTaygrdCksbCk6cn0sbC5lbmRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlNrKCt0KSxsKTpvfSxsLnBhZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6U2soK3QpLGwpOmF9LGwuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1udWxsPT10P251bGw6dCxsKTpzfSxsfSxhcmVhOiRrLGxpbmU6WGsscGllOmZ1bmN0aW9uIEpJKCl7dmFyIHQ9WmssZT1LayxuPW51bGwsaT1TaygwKSxyPVNrKE9rKSxvPVNrKDApO2Z1bmN0aW9uIGEoYSl7dmFyIHMsbCxjLHUsaCxkPWEubGVuZ3RoLHA9MCxmPW5ldyBBcnJheShkKSxtPW5ldyBBcnJheShkKSxnPStpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxfPU1hdGgubWluKE9rLE1hdGgubWF4KC1PayxyLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1nKSkseT1NYXRoLm1pbihNYXRoLmFicyhfKS9kLG8uYXBwbHkodGhpcyxhcmd1bWVudHMpKSx2PXkqKF88MD8tMToxKTtmb3Iocz0wO3M8ZDsrK3MpKGg9bVtmW3NdPXNdPSt0KGFbc10scyxhKSk+MCYmKHArPWgpO2ZvcihudWxsIT1lP2Yuc29ydCgoZnVuY3Rpb24odCxuKXtyZXR1cm4gZShtW3RdLG1bbl0pfSkpOm51bGwhPW4mJmYuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gbihhW3RdLGFbZV0pfSkpLHM9MCxjPXA/KF8tZCp2KS9wOjA7czxkOysrcyxnPXUpbVtsPWZbc11dPXtkYXRhOmFbbF0saW5kZXg6cyx2YWx1ZTpoPW1bbF0sc3RhcnRBbmdsZTpnLGVuZEFuZ2xlOnU9ZysoaD4wP2gqYzowKSt2LHBhZEFuZ2xlOnl9O3JldHVybiBtfXJldHVybiBhLnZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6U2soK2UpLGEpOnR9LGEuc29ydFZhbHVlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG49bnVsbCxhKTplfSxhLnNvcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxlPW51bGwsYSk6bn0sYS5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6U2soK3QpLGEpOml9LGEuZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpTaygrdCksYSk6cn0sYS5wYWRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlNrKCt0KSxhKTpvfSxhfSxhcmVhUmFkaWFsOmlMLHJhZGlhbEFyZWE6aUwsbGluZVJhZGlhbDpuTCxyYWRpYWxMaW5lOm5MLHBvaW50UmFkaWFsOnJMLGxpbmtIb3Jpem9udGFsOmZ1bmN0aW9uIFFJKCl7cmV0dXJuIGxMKGNMKX0sbGlua1ZlcnRpY2FsOmZ1bmN0aW9uIHRPKCl7cmV0dXJuIGxMKHVMKX0sbGlua1JhZGlhbDpmdW5jdGlvbiBlTygpe3ZhciB0PWxMKGhMKTtyZXR1cm4gdC5hbmdsZT10LngsZGVsZXRlIHQueCx0LnJhZGl1cz10LnksZGVsZXRlIHQueSx0fSxzeW1ib2w6ZnVuY3Rpb24gbk8oKXt2YXIgdD1TayhkTCksZT1Tayg2NCksbj1udWxsO2Z1bmN0aW9uIGkoKXt2YXIgaTtpZihufHwobj1pPXBnKCkpLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpLmRyYXcobiwrZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLGkpcmV0dXJuIG49bnVsbCxpKyIifHxudWxsfXJldHVybiBpLnR5cGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpTayhlKSxpKTp0fSxpLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpTaygrdCksaSk6ZX0saS5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW51bGw9PXQ/bnVsbDp0LGkpOm59LGl9LHN5bWJvbHM6a0wsc3ltYm9sQ2lyY2xlOmRMLHN5bWJvbENyb3NzOnBMLHN5bWJvbERpYW1vbmQ6Z0wsc3ltYm9sU3F1YXJlOnhMLHN5bWJvbFN0YXI6Ykwsc3ltYm9sVHJpYW5nbGU6U0wsc3ltYm9sV3llOkFMLGN1cnZlQmFzaXNDbG9zZWQ6ZnVuY3Rpb24gaU8odCl7cmV0dXJuIG5ldyBPTCh0KX0sY3VydmVCYXNpc09wZW46ZnVuY3Rpb24gck8odCl7cmV0dXJuIG5ldyBSTCh0KX0sY3VydmVCYXNpczpJTCxjdXJ2ZUJ1bmRsZTpETCxjdXJ2ZUNhcmRpbmFsQ2xvc2VkOlVMLGN1cnZlQ2FyZGluYWxPcGVuOkdMLGN1cnZlQ2FyZGluYWw6RkwsY3VydmVDYXRtdWxsUm9tQ2xvc2VkOiRMLGN1cnZlQ2F0bXVsbFJvbU9wZW46WkwsY3VydmVDYXRtdWxsUm9tOllMLGN1cnZlTGluZWFyQ2xvc2VkOmZ1bmN0aW9uIG9PKHQpe3JldHVybiBuZXcgSkwodCl9LGN1cnZlTGluZWFyOldrLGN1cnZlTW9ub3RvbmVYOmZ1bmN0aW9uIGFPKHQpe3JldHVybiBuZXcgaVAodCl9LGN1cnZlTW9ub3RvbmVZOmZ1bmN0aW9uIHNPKHQpe3JldHVybiBuZXcgclAodCl9LGN1cnZlTmF0dXJhbDpmdW5jdGlvbiBsTyh0KXtyZXR1cm4gbmV3IGFQKHQpfSxjdXJ2ZVN0ZXA6ZnVuY3Rpb24gY08odCl7cmV0dXJuIG5ldyBsUCh0LC41KX0sY3VydmVTdGVwQWZ0ZXI6ZnVuY3Rpb24gdU8odCl7cmV0dXJuIG5ldyBsUCh0LDEpfSxjdXJ2ZVN0ZXBCZWZvcmU6ZnVuY3Rpb24gaE8odCl7cmV0dXJuIG5ldyBsUCh0LDApfSxzdGFjazpmdW5jdGlvbiBkTygpe3ZhciB0PVNrKFtdKSxlPXVQLG49Y1AsaT1oUDtmdW5jdGlvbiByKHIpe3ZhciBvLGEscz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxsPXIubGVuZ3RoLGM9cy5sZW5ndGgsdT1uZXcgQXJyYXkoYyk7Zm9yKG89MDtvPGM7KytvKXtmb3IodmFyIGgsZD1zW29dLHA9dVtvXT1uZXcgQXJyYXkobCksZj0wO2Y8bDsrK2YpcFtmXT1oPVswLCtpKHJbZl0sZCxmLHIpXSxoLmRhdGE9cltmXTtwLmtleT1kfWZvcihvPTAsYT1lKHUpO288YzsrK28pdVthW29dXS5pbmRleD1vO3JldHVybiBuKHUsYSksdX1yZXR1cm4gci5rZXlzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6U2sob0wuY2FsbChlKSkscik6dH0sci52YWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlNrKCt0KSxyKTppfSxyLm9yZGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPW51bGw9PXQ/dVA6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpTayhvTC5jYWxsKHQpKSxyKTplfSxyLm9mZnNldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1udWxsPT10P2NQOnQscik6bn0scn0sc3RhY2tPZmZzZXRFeHBhbmQ6ZnVuY3Rpb24gcE8odCxlKXtpZigoaT10Lmxlbmd0aCk+MCl7Zm9yKHZhciBuLGkscixvPTAsYT10WzBdLmxlbmd0aDtvPGE7KytvKXtmb3Iocj1uPTA7bjxpOysrbilyKz10W25dW29dWzFdfHwwO2lmKHIpZm9yKG49MDtuPGk7KytuKXRbbl1bb11bMV0vPXJ9Y1AodCxlKX19LHN0YWNrT2Zmc2V0RGl2ZXJnaW5nOmZ1bmN0aW9uIGZPKHQsZSl7aWYoKHM9dC5sZW5ndGgpPjApZm9yKHZhciBuLGkscixvLGEscyxsPTAsYz10W2VbMF1dLmxlbmd0aDtsPGM7KytsKWZvcihvPWE9MCxuPTA7bjxzOysrbikocj0oaT10W2Vbbl1dW2xdKVsxXS1pWzBdKT4wPyhpWzBdPW8saVsxXT1vKz1yKTpyPDA/KGlbMV09YSxpWzBdPWErPXIpOihpWzBdPTAsaVsxXT1yKX0sc3RhY2tPZmZzZXROb25lOmNQLHN0YWNrT2Zmc2V0U2lsaG91ZXR0ZTpmdW5jdGlvbiBtTyh0LGUpe2lmKChuPXQubGVuZ3RoKT4wKXtmb3IodmFyIG4saT0wLHI9dFtlWzBdXSxvPXIubGVuZ3RoO2k8bzsrK2kpe2Zvcih2YXIgYT0wLHM9MDthPG47KythKXMrPXRbYV1baV1bMV18fDA7cltpXVsxXSs9cltpXVswXT0tcy8yfWNQKHQsZSl9fSxzdGFja09mZnNldFdpZ2dsZTpmdW5jdGlvbiBnTyh0LGUpe2lmKChyPXQubGVuZ3RoKT4wJiYoaT0obj10W2VbMF1dKS5sZW5ndGgpPjApe2Zvcih2YXIgbixpLHIsbz0wLGE9MTthPGk7KythKXtmb3IodmFyIHM9MCxsPTAsYz0wO3M8cjsrK3Mpe2Zvcih2YXIgdT10W2Vbc11dLGg9dVthXVsxXXx8MCxkPShoLSh1W2EtMV1bMV18fDApKS8yLHA9MDtwPHM7KytwKXt2YXIgZj10W2VbcF1dO2QrPShmW2FdWzFdfHwwKS0oZlthLTFdWzFdfHwwKX1sKz1oLGMrPWQqaH1uW2EtMV1bMV0rPW5bYS0xXVswXT1vLGwmJihvLT1jL2wpfW5bYS0xXVsxXSs9blthLTFdWzBdPW8sY1AodCxlKX19LHN0YWNrT3JkZXJBcHBlYXJhbmNlOmRQLHN0YWNrT3JkZXJBc2NlbmRpbmc6ZlAsc3RhY2tPcmRlckRlc2NlbmRpbmc6ZnVuY3Rpb24gX08odCl7cmV0dXJuIGZQKHQpLnJldmVyc2UoKX0sc3RhY2tPcmRlckluc2lkZU91dDpmdW5jdGlvbiB5Tyh0KXt2YXIgZSxuLGk9dC5sZW5ndGgscj10Lm1hcChtUCksbz1kUCh0KSxhPTAscz0wLGw9W10sYz1bXTtmb3IoZT0wO2U8aTsrK2Upbj1vW2VdLGE8cz8oYSs9cltuXSxsLnB1c2gobikpOihzKz1yW25dLGMucHVzaChuKSk7cmV0dXJuIGMucmV2ZXJzZSgpLmNvbmNhdChsKX0sc3RhY2tPcmRlck5vbmU6dVAsc3RhY2tPcmRlclJldmVyc2U6ZnVuY3Rpb24gdk8odCl7cmV0dXJuIHVQKHQpLnJldmVyc2UoKX0sdGltZUludGVydmFsOm9FLHRpbWVNaWxsaXNlY29uZDphRSx0aW1lTWlsbGlzZWNvbmRzOnNFLHV0Y01pbGxpc2Vjb25kOmFFLHV0Y01pbGxpc2Vjb25kczpzRSx0aW1lU2Vjb25kOnBFLHRpbWVTZWNvbmRzOmZFLHV0Y1NlY29uZDpwRSx1dGNTZWNvbmRzOmZFLHRpbWVNaW51dGU6bUUsdGltZU1pbnV0ZXM6Z0UsdGltZUhvdXI6X0UsdGltZUhvdXJzOnlFLHRpbWVEYXk6dkUsdGltZURheXM6YkUsdGltZVdlZWs6d0UsdGltZVdlZWtzOmtFLHRpbWVTdW5kYXk6d0UsdGltZVN1bmRheXM6a0UsdGltZU1vbmRheTpTRSx0aW1lTW9uZGF5czpMRSx0aW1lVHVlc2RheTpNRSx0aW1lVHVlc2RheXM6UEUsdGltZVdlZG5lc2RheTpFRSx0aW1lV2VkbmVzZGF5czpORSx0aW1lVGh1cnNkYXk6VEUsdGltZVRodXJzZGF5czpJRSx0aW1lRnJpZGF5OkNFLHRpbWVGcmlkYXlzOk9FLHRpbWVTYXR1cmRheTpBRSx0aW1lU2F0dXJkYXlzOlJFLHRpbWVNb250aDp6RSx0aW1lTW9udGhzOkRFLHRpbWVZZWFyOkJFLHRpbWVZZWFyczpIRSx1dGNNaW51dGU6RkUsdXRjTWludXRlczpWRSx1dGNIb3VyOlVFLHV0Y0hvdXJzOmpFLHV0Y0RheTpHRSx1dGNEYXlzOldFLHV0Y1dlZWs6WUUsdXRjV2Vla3M6dFQsdXRjU3VuZGF5OllFLHV0Y1N1bmRheXM6dFQsdXRjTW9uZGF5OlhFLHV0Y01vbmRheXM6ZVQsdXRjVHVlc2RheTokRSx1dGNUdWVzZGF5czpuVCx1dGNXZWRuZXNkYXk6S0UsdXRjV2VkbmVzZGF5czppVCx1dGNUaHVyc2RheTpaRSx1dGNUaHVyc2RheXM6clQsdXRjRnJpZGF5OkpFLHV0Y0ZyaWRheXM6b1QsdXRjU2F0dXJkYXk6UUUsdXRjU2F0dXJkYXlzOmFULHV0Y01vbnRoOnNULHV0Y01vbnRoczpsVCx1dGNZZWFyOmNULHV0Y1llYXJzOnVULHRpbWVGb3JtYXREZWZhdWx0TG9jYWxlOkRDLGdldCB0aW1lRm9ybWF0KCl7cmV0dXJuIGdUfSxnZXQgdGltZVBhcnNlKCl7cmV0dXJuIF9UfSxnZXQgdXRjRm9ybWF0KCl7cmV0dXJuIHlUfSxnZXQgdXRjUGFyc2UoKXtyZXR1cm4gdlR9LHRpbWVGb3JtYXRMb2NhbGU6ZlQsaXNvRm9ybWF0OkhDLGlzb1BhcnNlOlZDLG5vdzpFcCx0aW1lcjpBcCx0aW1lckZsdXNoOmtwLHRpbWVvdXQ6SXAsaW50ZXJ2YWw6ZnVuY3Rpb24gYk8odCxlLG4pe3ZhciBpPW5ldyBDcCxyPWU7cmV0dXJuIG51bGw9PWU/KGkucmVzdGFydCh0LGUsbiksaSk6KGU9K2Usbj1udWxsPT1uP0VwKCk6K24saS5yZXN0YXJ0KChmdW5jdGlvbiBvKGEpe2ErPXIsaS5yZXN0YXJ0KG8scis9ZSxuKSx0KGEpfSksZSxuKSxpKX0sdHJhbnNpdGlvbjpnZixhY3RpdmU6ZnVuY3Rpb24geE8odCxlKXt2YXIgbixpLHI9dC5fX3RyYW5zaXRpb247aWYocilmb3IoaSBpbiBlPW51bGw9PWU/bnVsbDplKyIiLHIpaWYoKG49cltpXSkuc3RhdGU+MSYmbi5uYW1lPT09ZSlyZXR1cm4gbmV3IG1mKFtbdF1dLFNtLGUsK2kpO3JldHVybiBudWxsfSxpbnRlcnJ1cHQ6RnAsdm9yb25vaTpmdW5jdGlvbiB3Tygpe3ZhciB0PV9QLGU9eVAsbj1udWxsO2Z1bmN0aW9uIGkoaSl7cmV0dXJuIG5ldyBRUChpLm1hcCgoZnVuY3Rpb24obixyKXt2YXIgbz1bTWF0aC5yb3VuZCh0KG4scixpKS8kUCkqJFAsTWF0aC5yb3VuZChlKG4scixpKS8kUCkqJFBdO3JldHVybiBvLmluZGV4PXIsby5kYXRhPW4sb30pKSxuKX1yZXR1cm4gaS5wb2x5Z29ucz1mdW5jdGlvbih0KXtyZXR1cm4gaSh0KS5wb2x5Z29ucygpfSxpLmxpbmtzPWZ1bmN0aW9uKHQpe3JldHVybiBpKHQpLmxpbmtzKCl9LGkudHJpYW5nbGVzPWZ1bmN0aW9uKHQpe3JldHVybiBpKHQpLnRyaWFuZ2xlcygpfSxpLng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpnUCgrZSksaSk6dH0saS55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6Z1AoK3QpLGkpOmV9LGkuZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW51bGw9PXQ/bnVsbDpbWyt0WzBdWzBdLCt0WzBdWzFdXSxbK3RbMV1bMF0sK3RbMV1bMV1dXSxpKTpuJiZbW25bMF1bMF0sblswXVsxXV0sW25bMV1bMF0sblsxXVsxXV1dfSxpLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49bnVsbD09dD9udWxsOltbMCwwXSxbK3RbMF0sK3RbMV1dXSxpKTpuJiZbblsxXVswXS1uWzBdWzBdLG5bMV1bMV0tblswXVsxXV19LGl9LHpvb206cE4sem9vbVRyYW5zZm9ybTpyTix6b29tSWRlbnRpdHk6aU59KTtjb25zdCBTTz1bIiNmZjcwNDMiLCIjMDA3N2JiIiwiI2NjMzMxMSIsIiMzM2JiZWUiLCIjZWUzMzc3IiwiIzAwOTk4OCIsIiNiYmJiYmIiXTtjbGFzcyBNTyBleHRlbmRzIGZse2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9leHBlcmltZW50cz1bXX1sb2FkKCl7Y29uc3QgdD1ncigpLmV4cGVyaW1lbnRzKCk7cmV0dXJuIHRoaXMucmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKCh0PT57d2UuaXNFcXVhbCh0aGlzLl9leHBlcmltZW50cyx0KXx8KHRoaXMuX2V4cGVyaW1lbnRzPXQsdGhpcy5lbWl0Q2hhbmdlKCkpfSkpfWdldEV4cGVyaW1lbnRzKCl7cmV0dXJuIHRoaXMuX2V4cGVyaW1lbnRzLnNsaWNlKCl9fWNvbnN0IEVPPW5ldyBNTztjbGFzcyBUT3tjb25zdHJ1Y3Rvcih0PVNPKXt0aGlzLnBhbGV0dGU9dCx0aGlzLmlkZW50aWZpZXJzPXhnKCl9c2V0RG9tYWluKHQpe3JldHVybiB0aGlzLmlkZW50aWZpZXJzPXhnKCksdC5mb3JFYWNoKCgodCxlKT0+e3RoaXMuaWRlbnRpZmllcnMuc2V0KHQsdGhpcy5wYWxldHRlW2UldGhpcy5wYWxldHRlLmxlbmd0aF0pfSkpLHRoaXN9Z2V0Q29sb3IodCl7aWYoIXRoaXMuaWRlbnRpZmllcnMuaGFzKHQpKXRocm93IG5ldyBFcnJvcihgU3RyaW5nICR7dH0gd2FzIG5vdCBpbiB0aGUgZG9tYWluLmApO3JldHVybiB0aGlzLmlkZW50aWZpZXJzLmdldCh0KX19ZnVuY3Rpb24gQ08odCxlKXtjb25zdCBuPW5ldyBUTztmdW5jdGlvbiBpKCl7bi5zZXREb21haW4oZSgpKX1yZXR1cm4gdC5hZGRMaXN0ZW5lcihpKSxpKCksdD0+bi5nZXRDb2xvcih0KX1jb25zdCBBTz1DTyh5bCwoKCk9PnlsLmdldFJ1bnMoKSkpO0NPKEVPLCgoKT0+RU8uZ2V0RXhwZXJpbWVudHMoKS5tYXAoKCh7bmFtZTp0fSk9PnQpKSkpLHRsKHttb2R1bGVOYW1lOiJydW4tY29sb3Itc3R5bGUiLHN0eWxlQ29udGVudDoiXG4gICAgW2NvbG9yLWNsYXNzPSdsaWdodC1ibHVlJ10gcGFwZXItY2hlY2tib3gge1xuICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci1saWdodC1ibHVlLTUwMCk7XG4gICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1saWdodC1ibHVlLTUwMCk7XG4gICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItbGlnaHQtYmx1ZS05MDApO1xuICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1saWdodC1ibHVlLTkwMCk7XG4gICAgfVxuICAgIFtjb2xvci1jbGFzcz0ncmVkJ10gcGFwZXItY2hlY2tib3gge1xuICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci1yZWQtNTAwKTtcbiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLXJlZC01MDApO1xuICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLXJlZC05MDApO1xuICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1yZWQtOTAwKTtcbiAgICB9XG4gICAgW2NvbG9yLWNsYXNzPSdncmVlbiddIHBhcGVyLWNoZWNrYm94IHtcbiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItZ3JlZW4tNTAwKTtcbiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLWdyZWVuLTUwMCk7XG4gICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItZ3JlZW4tOTAwKTtcbiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItZ3JlZW4tOTAwKTtcbiAgICB9XG4gICAgW2NvbG9yLWNsYXNzPSdwdXJwbGUnXSBwYXBlci1jaGVja2JveCB7XG4gICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLXB1cnBsZS01MDApO1xuICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItcHVycGxlLTUwMCk7XG4gICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItcHVycGxlLTkwMCk7XG4gICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLXB1cnBsZS05MDApO1xuICAgIH1cbiAgICBbY29sb3ItY2xhc3M9J3RlYWwnXSBwYXBlci1jaGVja2JveCB7XG4gICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLXRlYWwtNTAwKTtcbiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLXRlYWwtNTAwKTtcbiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci10ZWFsLTkwMCk7XG4gICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLXRlYWwtOTAwKTtcbiAgICB9XG4gICAgW2NvbG9yLWNsYXNzPSdwaW5rJ10gcGFwZXItY2hlY2tib3gge1xuICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci1waW5rLTUwMCk7XG4gICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1waW5rLTUwMCk7XG4gICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItcGluay05MDApO1xuICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1waW5rLTkwMCk7XG4gICAgfVxuICAgIFtjb2xvci1jbGFzcz0nb3JhbmdlJ10gcGFwZXItY2hlY2tib3gge1xuICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci1vcmFuZ2UtNTAwKTtcbiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLW9yYW5nZS01MDApO1xuICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLW9yYW5nZS05MDApO1xuICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1vcmFuZ2UtOTAwKTtcbiAgICB9XG4gICAgW2NvbG9yLWNsYXNzPSdicm93biddIHBhcGVyLWNoZWNrYm94IHtcbiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItYnJvd24tNTAwKTtcbiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLWJyb3duLTUwMCk7XG4gICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItYnJvd24tOTAwKTtcbiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItYnJvd24tOTAwKTtcbiAgICB9XG4gICAgW2NvbG9yLWNsYXNzPSdpbmRpZ28nXSBwYXBlci1jaGVja2JveCB7XG4gICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLWluZGlnby01MDApO1xuICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItaW5kaWdvLTUwMCk7XG4gICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItaW5kaWdvLTkwMCk7XG4gICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLWluZGlnby05MDApO1xuICAgIH1cbiAgIn0pO2xldCBrTz1jbGFzcyBleHRlbmRzKHRyKHllKSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMubmFtZXM9W10sdGhpcy5jb2xvcmluZz17Z2V0Q29sb3I6KCk9PiIifSx0aGlzLnJlZ2V4PSIiLHRoaXMuc2VsZWN0aW9uU3RhdGU9e30sdGhpcy5tYXhOYW1lc1RvRW5hYmxlQnlEZWZhdWx0PTQwLHRoaXMuX2RlYm91bmNlZFJlZ2V4Q2hhbmdlPXRoaXMuX2RlYm91bmNlZFJlZ2V4Q2hhbmdlSW1wbCgpfV9kZWJvdW5jZWRSZWdleENoYW5nZUltcGwoKXt2YXIgdD13ZS5kZWJvdW5jZSgodD0+e3RoaXMucmVnZXg9dH0pLDE1MCx7bGVhZGluZzohMX0pO3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMuJCQoIiNuYW1lcy1yZWdleCIpLnZhbHVlOyIiPT1lP3RoaXMuYXN5bmMoKCgpPT57dGhpcy5yZWdleD1lfSksMzApOnQoZSl9fWdldCBfcmVnZXgoKXt2YXIgdD10aGlzLnJlZ2V4O3RyeXtyZXR1cm4gbmV3IFJlZ0V4cCh0KX1jYXRjaCh0KXtyZXR1cm4gbnVsbH19X3NldElzb2xhdG9ySWNvbigpe3ZhciB0PXRoaXMuc2VsZWN0aW9uU3RhdGUsZT13ZS5maWx0ZXIod2UudmFsdWVzKHQpKS5sZW5ndGg7QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5yb290LnF1ZXJ5U2VsZWN0b3JBbGwoIi5pc29sYXRvciIpKS5mb3JFYWNoKChmdW5jdGlvbihuKXtuLmljb249MT09PWUmJnRbbi5uYW1lXT8icmFkaW8tYnV0dG9uLWNoZWNrZWQiOiJyYWRpby1idXR0b24tdW5jaGVja2VkIn0pKX1jb21wdXRlTmFtZXNNYXRjaGluZ1JlZ2V4KHQsZSl7Y29uc3Qgbj10aGlzLl9yZWdleDtyZXR1cm4gbj90aGlzLm5hbWVzLmZpbHRlcigodD0+bi50ZXN0KHQpKSk6dGhpcy5uYW1lc31jb21wdXRlT3V0U2VsZWN0ZWQodCxlKXt2YXIgbj10aGlzLnNlbGVjdGlvblN0YXRlLGk9dGhpcy5uYW1lc01hdGNoaW5nUmVnZXgubGVuZ3RoPD10aGlzLm1heE5hbWVzVG9FbmFibGVCeURlZmF1bHQ7cmV0dXJuIHRoaXMubmFtZXNNYXRjaGluZ1JlZ2V4LmZpbHRlcigodD0+bnVsbD09blt0XT9pOm5bdF0pKX1zeW5jaHJvbml6ZUNvbG9ycyh0KXt0aGlzLl9zZXRJc29sYXRvckljb24oKSx0aGlzLnJvb3QucXVlcnlTZWxlY3RvckFsbCgicGFwZXItY2hlY2tib3giKS5mb3JFYWNoKCh0PT57Y29uc3QgZT10aGlzLmNvbG9yaW5nLmdldENvbG9yKHQubmFtZSk7dC51cGRhdGVTdHlsZXMoeyItLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3IiOmUsIi0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3IiOmUsIi0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWNvbG9yIjplLCItLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3IiOmV9KX0pKSx0aGlzLnJvb3QucXVlcnlTZWxlY3RvckFsbCgiLmlzb2xhdG9yIikuZm9yRWFjaCgodD0+e2NvbnN0IGU9dGhpcy5jb2xvcmluZy5nZXRDb2xvcih0Lm5hbWUpO3Quc3R5bGUuY29sb3I9ZX0pKSx3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgoKT0+e3RoaXMudXBkYXRlU3R5bGVzKCl9KSl9X2lzb2xhdGVOYW1lKHQpe3ZhciBlPXQudGFyZ2V0Lm5hbWUsbj17fTt0aGlzLm5hbWVzLmZvckVhY2goKGZ1bmN0aW9uKHQpe25bdF09dD09ZX0pKSx0aGlzLnNlbGVjdGlvblN0YXRlPW59X2NoZWNrYm94Q2hhbmdlKHQpe3ZhciBlPXQudGFyZ2V0O2NvbnN0IG49d2UuY2xvbmUodGhpcy5zZWxlY3Rpb25TdGF0ZSk7bltlLm5hbWVdPWUuY2hlY2tlZCx0aGlzLnNlbGVjdGlvblN0YXRlPW59X2lzQ2hlY2tlZCh0LGUpe3JldHVybi0xIT10aGlzLm91dFNlbGVjdGVkLmluZGV4T2YodCl9dG9nZ2xlQWxsKCl7Y29uc3QgdD10aGlzLm5hbWVzTWF0Y2hpbmdSZWdleC5zb21lKCh0PT50aGlzLm91dFNlbGVjdGVkLmluY2x1ZGVzKHQpKSksZT17fTt0aGlzLm5hbWVzLmZvckVhY2goKG49PntlW25dPSF0fSkpLHRoaXMuc2VsZWN0aW9uU3RhdGU9ZX19O2tPLnRlbXBsYXRlPV9lYAogICAgPHN0eWxlIGluY2x1ZGU9InNjcm9sbGJhci1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZSBpbmNsdWRlPSJydW4tY29sb3Itc3R5bGUiPjwvc3R5bGU+CgogICAgPHBhcGVyLWlucHV0CiAgICAgIGlkPSJuYW1lcy1yZWdleCIKICAgICAgbm8tbGFiZWwtZmxvYXQ9IiIKICAgICAgbGFiZWw9IldyaXRlIGEgcmVnZXggdG8gZmlsdGVyIHJ1bnMiCiAgICAgIHZhbHVlPSJbW3JlZ2V4XV0iCiAgICAgIG9uLWJpbmQtdmFsdWUtY2hhbmdlZD0iX2RlYm91bmNlZFJlZ2V4Q2hhbmdlIgogICAgPjwvcGFwZXItaW5wdXQ+CiAgICA8ZGl2IGlkPSJvdXRlci1jb250YWluZXIiIGNsYXNzPSJzY3JvbGxiYXIiPgogICAgICA8dGVtcGxhdGUKICAgICAgICBpcz0iZG9tLXJlcGVhdCIKICAgICAgICBpdGVtcz0iW1tuYW1lc01hdGNoaW5nUmVnZXhdXSIKICAgICAgICBvbi1kb20tY2hhbmdlPSJzeW5jaHJvbml6ZUNvbG9ycyIKICAgICAgPgogICAgICAgIDxkaXYgY2xhc3M9Im5hbWUtcm93Ij4KICAgICAgICAgIDxkaXYKICAgICAgICAgICAgY2xhc3M9Imljb24tY29udGFpbmVyIGNoZWNrYm94LWNvbnRhaW5lciB2ZXJ0aWNhbC1hbGlnbi1jb250YWluZXIiCiAgICAgICAgICA+CiAgICAgICAgICAgIDxwYXBlci1jaGVja2JveAogICAgICAgICAgICAgIGNsYXNzPSJjaGVja2JveCB2ZXJ0aWNhbC1hbGlnbi1jZW50ZXIiCiAgICAgICAgICAgICAgaWQkPSJjaGVja2JveC1bW2l0ZW1dXSIKICAgICAgICAgICAgICBuYW1lPSJbW2l0ZW1dXSIKICAgICAgICAgICAgICBjaGVja2VkJD0iW1tfaXNDaGVja2VkKGl0ZW0sIHNlbGVjdGlvblN0YXRlLiopXV0iCiAgICAgICAgICAgICAgb24tY2hhbmdlPSJfY2hlY2tib3hDaGFuZ2UiCiAgICAgICAgICAgID48L3BhcGVyLWNoZWNrYm94PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2CiAgICAgICAgICAgIGNsYXNzPSJpY29uLWNvbnRhaW5lciBpc29sYXRvci1jb250YWluZXIgdmVydGljYWwtYWxpZ24tY29udGFpbmVyIgogICAgICAgICAgPgogICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICAgICAgICBpY29uPSJyYWRpby1idXR0b24tdW5jaGVja2VkIgogICAgICAgICAgICAgIGNsYXNzPSJpc29sYXRvciB2ZXJ0aWNhbC1hbGlnbi1jZW50ZXIiCiAgICAgICAgICAgICAgb24tdGFwPSJfaXNvbGF0ZU5hbWUiCiAgICAgICAgICAgICAgbmFtZT0iW1tpdGVtXV0iCiAgICAgICAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJpdGVtLWxhYmVsLWNvbnRhaW5lciI+CiAgICAgICAgICAgIDxzcGFuPltbaXRlbV1dPC9zcGFuPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L2Rpdj4KICAgIDxzdHlsZT4KICAgICAgcGFwZXItaW5wdXQgewogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWZvY3VzLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDogewogICAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIH0KICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1sYWJlbDogewogICAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIH0KICAgICAgfQogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CiAgICAgICNvdXRlci1jb250YWluZXIgewogICAgICAgIGNvbnRhaW46IGNvbnRlbnQ7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkOwogICAgICB9CiAgICAgIC5uYW1lLXJvdyB7CiAgICAgICAgY29udGFpbjogY29udGVudDsKICAgICAgICBwYWRkaW5nLXRvcDogNXB4OwogICAgICAgIHBhZGRpbmctYm90dG9tOiA1cHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7IC8qIG1ha2VzIHdyYXBwaW5nIG9mIGh5cGVycGFyYW0gc3RyaW5ncyBiZXR0ZXIgKi8KICAgICAgfQogICAgICAuaWNvbi1jb250YWluZXIgewogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDJweDsKICAgICAgfQogICAgICAuY2hlY2tib3ggewogICAgICAgIHBhZGRpbmctbGVmdDogMnB4OwogICAgICAgIHdpZHRoOiAxOHB4OwogICAgICAgIGhlaWdodDogMThweDsKICAgICAgfQogICAgICAuaXNvbGF0b3IgewogICAgICAgIHdpZHRoOiAxOHB4OwogICAgICAgIGhlaWdodDogMThweDsKICAgICAgICBwYWRkaW5nOiAwcHg7CiAgICAgIH0KICAgICAgLmlzb2xhdG9yLWNvbnRhaW5lciB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiA2cHg7CiAgICAgICAgcGFkZGluZy1yaWdodDogM3B4OwogICAgICB9CiAgICAgIC5jaGVja2JveC1jb250YWluZXIgewogICAgICAgIHBhZGRpbmctbGVmdDogMnB4OwogICAgICB9CiAgICAgIC5pdGVtLWxhYmVsLWNvbnRhaW5lciB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiA1cHg7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIHdpZHRoOiAwcHg7IC8qIGhhY2sgdG8gZ2V0IHRoZSBmbGV4LWdyb3cgdG8gd29yayBwcm9wZXJseSAqLwogICAgICB9CiAgICAgIC50b29sdGlwLXZhbHVlLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAycHg7CiAgICAgIH0KICAgICAgLnZlcnRpY2FsLWFsaWduLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfQogICAgICAudmVydGljYWwtYWxpZ24tY29udGFpbmVyIC52ZXJ0aWNhbC1hbGlnbi1jZW50ZXIgewogICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjsKICAgICAgfQogICAgICAudmVydGljYWwtYWxpZ24tY29udGFpbmVyIC52ZXJ0aWNhbC1hbGlnbi10b3AgewogICAgICAgIGFsaWduLXNlbGY6IHN0YXJ0OwogICAgICB9CiAgICA8L3N0eWxlPgogIGAsdChbbyh7dHlwZTpBcnJheX0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLGtPLnByb3RvdHlwZSwibmFtZXMiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sa08ucHJvdG90eXBlLCJjb2xvcmluZyIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sa08ucHJvdG90eXBlLCJyZWdleCIsdm9pZCAwKSx0KFtvKHt0eXBlOkFycmF5LGNvbXB1dGVkOiJjb21wdXRlTmFtZXNNYXRjaGluZ1JlZ2V4KG5hbWVzLiosIF9yZWdleCkifSksZSgiZGVzaWduOnR5cGUiLEFycmF5KV0sa08ucHJvdG90eXBlLCJuYW1lc01hdGNoaW5nUmVnZXgiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLGtPLnByb3RvdHlwZSwic2VsZWN0aW9uU3RhdGUiLHZvaWQgMCksdChbbyh7dHlwZTpBcnJheSxub3RpZnk6ITAsY29tcHV0ZWQ6ImNvbXB1dGVPdXRTZWxlY3RlZChuYW1lc01hdGNoaW5nUmVnZXguKiwgc2VsZWN0aW9uU3RhdGUuKikifSksZSgiZGVzaWduOnR5cGUiLEFycmF5KV0sa08ucHJvdG90eXBlLCJvdXRTZWxlY3RlZCIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxrTy5wcm90b3R5cGUsIm1heE5hbWVzVG9FbmFibGVCeURlZmF1bHQiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sa08ucHJvdG90eXBlLCJfZGVib3VuY2VkUmVnZXhDaGFuZ2UiLHZvaWQgMCksdChbcygicmVnZXgiKSxlKCJkZXNpZ246dHlwZSIsUmVnRXhwKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxrTy5wcm90b3R5cGUsIl9yZWdleCIsbnVsbCksdChbYSgic2VsZWN0aW9uU3RhdGUiLCJuYW1lcyIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sa08ucHJvdG90eXBlLCJfc2V0SXNvbGF0b3JJY29uIixudWxsKSxrTz10KFtpKCJ0Zi1tdWx0aS1jaGVja2JveCIpXSxrTyk7bGV0IExPPWNsYXNzIGV4dGVuZHMgeWV7Z2V0IF9wYXJ0cygpe3ZhciB0PXRoaXMudmFsdWUsZT10aGlzLmRlbGltaXRlclBhdHRlcm47Y29uc3Qgbj1bXTtmb3IoOzspe2NvbnN0IGk9bmV3IFJlZ0V4cChlLCJnIik7aWYoaS50ZXN0KHQpLDA9PT1pLmxhc3RJbmRleCl7bi5wdXNoKHQpO2JyZWFrfW4ucHVzaCh0LnNsaWNlKDAsaS5sYXN0SW5kZXgpKSx0PXQuc2xpY2UoaS5sYXN0SW5kZXgpfXJldHVybiBufX07TE8udGVtcGxhdGU9X2VgCiAgICA8IS0tCiAgICAgIFRoaXMgdWdseSBmb3JtYXR0aW5nIGlzIHJlcXVpcmVkIHRvIHByZXZlbnQgc3BhY2VzIGZyb20gc2xpcHBpbmcKICAgICAgaW50byB0aGUgSFRNTC4KICAgIC0tPgogICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfcGFydHNdXSIgYXM9InBhcnQiCiAgICAgID5bW3BhcnRdXTx3YnIKICAgIC8+PC90ZW1wbGF0ZT4KICBgLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLExPLnByb3RvdHlwZSwidmFsdWUiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sTE8ucHJvdG90eXBlLCJkZWxpbWl0ZXJQYXR0ZXJuIix2b2lkIDApLHQoW3MoInZhbHVlIiwiZGVsaW1pdGVyUGF0dGVybiIpLGUoImRlc2lnbjp0eXBlIixBcnJheSksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sTE8ucHJvdG90eXBlLCJfcGFydHMiLG51bGwpLExPPXQoW2koInRmLXdici1zdHJpbmciKV0sTE8pO2xldCBQTz1jbGFzcyBleHRlbmRzKHRyKHllKSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMucnVuU2VsZWN0aW9uU3RhdGU9WHMoInJ1blNlbGVjdGlvblN0YXRlIix7ZGVmYXVsdFZhbHVlOnt9fSkuY2FsbCh0aGlzKSx0aGlzLnJlZ2V4SW5wdXQ9SXMoInJlZ2V4SW5wdXQiLHtkZWZhdWx0VmFsdWU6IiJ9KS5jYWxsKHRoaXMpLHRoaXMuX2RhdGFMb2NhdGlvbkNsaXBMZW5ndGg9MjUwLHRoaXMuX2RhdGFMb2NhdGlvbkRlbGltaXRlclBhdHRlcm49IlsvPV8sLV0iLHRoaXMuY29sb3Jpbmc9e2dldENvbG9yOkFPfSx0aGlzLl9zdG9yZVJ1blNlbGVjdGlvblN0YXRlPSRzKCJydW5TZWxlY3Rpb25TdGF0ZSIse2RlZmF1bHRWYWx1ZTp7fX0pLHRoaXMuX3JlZ2V4T2JzZXJ2ZXI9T3MoInJlZ2V4SW5wdXQiLHtkZWZhdWx0VmFsdWU6IiJ9KX1hdHRhY2hlZCgpe3RoaXMuX3J1blN0b3JlTGlzdGVuZXI9eWwuYWRkTGlzdGVuZXIoKCgpPT57dGhpcy5zZXQoInJ1bnMiLHlsLmdldFJ1bnMoKSl9KSksdGhpcy5zZXQoInJ1bnMiLHlsLmdldFJ1bnMoKSksdGhpcy5fZW52U3RvcmVMaXN0ZW5lcj1nbC5hZGRMaXN0ZW5lcigoKCk9Pnt0aGlzLnNldCgiZGF0YUxvY2F0aW9uIixnbC5nZXREYXRhTG9jYXRpb24oKSl9KSksdGhpcy5zZXQoImRhdGFMb2NhdGlvbiIsZ2wuZ2V0RGF0YUxvY2F0aW9uKCkpfWRldGFjaGVkKCl7eWwucmVtb3ZlTGlzdGVuZXJCeUtleSh0aGlzLl9ydW5TdG9yZUxpc3RlbmVyKSxnbC5yZW1vdmVMaXN0ZW5lckJ5S2V5KHRoaXMuX2VudlN0b3JlTGlzdGVuZXIpfV90b2dnbGVBbGwoKXt0aGlzLiQubXVsdGlDaGVja2JveC50b2dnbGVBbGwoKX1nZXQgX2NsaXBwZWREYXRhTG9jYXRpb24oKXt2YXIgdD10aGlzLmRhdGFMb2NhdGlvbixlPXRoaXMuX2RhdGFMb2NhdGlvbkNsaXBMZW5ndGg7aWYodm9pZCAwIT09dClyZXR1cm4gdC5sZW5ndGg+ZT90LnN1YnN0cmluZygwLGUpOnR9X29wZW5EYXRhTG9jYXRpb25EaWFsb2codCl7dC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuJCQoIiNkYXRhLWxvY2F0aW9uLWRpYWxvZyIpLm9wZW4oKX1fc2hvdWxkU2hvd0V4cGFuZERhdGFMb2NhdGlvbkJ1dHRvbih0LGUpe3JldHVybiB0JiZ0Lmxlbmd0aD5lfX07UE8udGVtcGxhdGU9X2VgCiAgICA8cGFwZXItZGlhbG9nIHdpdGgtYmFja2Ryb3A9IiIgaWQ9ImRhdGEtbG9jYXRpb24tZGlhbG9nIj4KICAgICAgPGgyPkRhdGEgTG9jYXRpb248L2gyPgogICAgICA8dGYtd2JyLXN0cmluZwogICAgICAgIHZhbHVlPSJbW2RhdGFMb2NhdGlvbl1dIgogICAgICAgIGRlbGltaXRlci1wYXR0ZXJuPSJbW19kYXRhTG9jYXRpb25EZWxpbWl0ZXJQYXR0ZXJuXV0iCiAgICAgID4KICAgICAgPC90Zi13YnItc3RyaW5nCiAgICA+PC9wYXBlci1kaWFsb2c+CiAgICA8ZGl2IGlkPSJ0b3AtdGV4dCI+CiAgICAgIDxoMyBpZD0idG9vbHRpcC1oZWxwIiBjbGFzcz0idG9vbHRpcC1jb250YWluZXIiPlJ1bnM8L2gzPgogICAgPC9kaXY+CiAgICA8dGYtbXVsdGktY2hlY2tib3gKICAgICAgaWQ9Im11bHRpQ2hlY2tib3giCiAgICAgIG5hbWVzPSJbW3J1bnNdXSIKICAgICAgc2VsZWN0aW9uLXN0YXRlPSJ7e3J1blNlbGVjdGlvblN0YXRlfX0iCiAgICAgIG91dC1zZWxlY3RlZD0ie3tzZWxlY3RlZFJ1bnN9fSIKICAgICAgcmVnZXg9Int7cmVnZXhJbnB1dH19IgogICAgICBjb2xvcmluZz0iW1tjb2xvcmluZ11dIgogICAgPjwvdGYtbXVsdGktY2hlY2tib3g+CiAgICA8cGFwZXItYnV0dG9uIGNsYXNzPSJ4LWJ1dHRvbiIgaWQ9InRvZ2dsZS1hbGwiIG9uLXRhcD0iX3RvZ2dsZUFsbCI+CiAgICAgIFRvZ2dsZSBBbGwgUnVucwogICAgPC9wYXBlci1idXR0b24+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbZGF0YUxvY2F0aW9uXV0iPgogICAgICA8ZGl2IGlkPSJkYXRhLWxvY2F0aW9uIj4KICAgICAgICA8dGYtd2JyLXN0cmluZwogICAgICAgICAgdmFsdWU9IltbX2NsaXBwZWREYXRhTG9jYXRpb25dXSIKICAgICAgICAgIGRlbGltaXRlci1wYXR0ZXJuPSJbW19kYXRhTG9jYXRpb25EZWxpbWl0ZXJQYXR0ZXJuXV0iCiAgICAgICAgPjwvdGYtd2JyLXN0cmluZwogICAgICAgID48IS0tCiAgICAgICAgICBXZSB1c2UgSFRNTCBjb21tZW50cyB0byByZW1vdmUgc3BhY2VzIGJlZm9yZSB0aGUgZWxsaXBzaXMuCiAgICAgICAgLS0+PHRlbXBsYXRlCiAgICAgICAgICBpcz0iZG9tLWlmIgogICAgICAgICAgaWY9IltbX3Nob3VsZFNob3dFeHBhbmREYXRhTG9jYXRpb25CdXR0b24oZGF0YUxvY2F0aW9uLCBfZGF0YUxvY2F0aW9uQ2xpcExlbmd0aCldXSIKICAgICAgICAgID48IS0tCiAgICAgICAgICAtLT48YSBocmVmPSIiIG9uLWNsaWNrPSJfb3BlbkRhdGFMb2NhdGlvbkRpYWxvZyI+4oCmPC9hPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC90ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIHBhZGRpbmctYm90dG9tOiAxMHB4OwogICAgICB9CiAgICAgICN0b3AtdGV4dCB7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLXNlY29uZGFyeS10ZXh0LWNvbG9yKTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgcGFkZGluZy1yaWdodDogMTZweDsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICB9CiAgICAgIHRmLW11bHRpLWNoZWNrYm94IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CiAgICAgIC54LWJ1dHRvbiB7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXRiLXVpLWxpZ2h0LWFjY2VudCk7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLXVpLWRhcmstYWNjZW50KTsKICAgICAgfQogICAgICAjdG9vbHRpcC1oZWxwIHsKICAgICAgICBjb2xvcjogdmFyKC0tdGItc2Vjb25kYXJ5LXRleHQtY29sb3IpOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBmb250LXdlaWdodDogbm9ybWFsOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICAgIH0KICAgICAgcGFwZXItYnV0dG9uIHsKICAgICAgICBtYXJnaW4tbGVmdDogMDsKICAgICAgfQogICAgICAjZGF0YS1sb2NhdGlvbiB7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLXVpLWRhcmstYWNjZW50KTsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgbWFyZ2luOiA1cHggMCAwIDA7CiAgICAgICAgbWF4LXdpZHRoOiAyODhweDsKICAgICAgfQogICAgPC9zdHlsZT4KICBgLHQoW28oe3R5cGU6T2JqZWN0LG9ic2VydmVyOiJfc3RvcmVSdW5TZWxlY3Rpb25TdGF0ZSJ9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUE8ucHJvdG90eXBlLCJydW5TZWxlY3Rpb25TdGF0ZSIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZyxvYnNlcnZlcjoiX3JlZ2V4T2JzZXJ2ZXIifSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLFBPLnByb3RvdHlwZSwicmVnZXhJbnB1dCIsdm9pZCAwKSx0KFtvKHt0eXBlOkFycmF5LG5vdGlmeTohMH0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLFBPLnByb3RvdHlwZSwic2VsZWN0ZWRSdW5zIix2b2lkIDApLHQoW28oe3R5cGU6QXJyYXl9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSxQTy5wcm90b3R5cGUsInJ1bnMiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLFBPLnByb3RvdHlwZSwiZGF0YUxvY2F0aW9uIix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLFBPLnByb3RvdHlwZSwiX2RhdGFMb2NhdGlvbkNsaXBMZW5ndGgiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sUE8ucHJvdG90eXBlLCJfZGF0YUxvY2F0aW9uRGVsaW1pdGVyUGF0dGVybiIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxQTy5wcm90b3R5cGUsImNvbG9yaW5nIix2b2lkIDApLHQoW3MoImRhdGFMb2NhdGlvbiIsIl9kYXRhTG9jYXRpb25DbGlwTGVuZ3RoIiksZSgiZGVzaWduOnR5cGUiLFN0cmluZyksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sUE8ucHJvdG90eXBlLCJfY2xpcHBlZERhdGFMb2NhdGlvbiIsbnVsbCksUE89dChbaSgidGYtcnVucy1zZWxlY3RvciIpXSxQTyk7Y2xhc3MgTk97Y29uc3RydWN0b3IoKXt0aGlzLmNhbmNlbGxhdGlvbkNvdW50PTB9Y2FuY2VsbGFibGUodCl7Y29uc3QgZT10aGlzLmNhbmNlbGxhdGlvbkNvdW50O3JldHVybiBuPT50KHt2YWx1ZTpuLGNhbmNlbGxlZDp0aGlzLmNhbmNlbGxhdGlvbkNvdW50IT09ZX0pfWNhbmNlbEFsbCgpe3RoaXMuY2FuY2VsbGF0aW9uQ291bnQrK319bGV0IElPPWNsYXNzIGV4dGVuZHModHIoeWUpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5odG1sPSIifWdldCBzYW5pdGl6ZWRIdG1sKCl7cmV0dXJuIHRoaXMuaHRtbH1hdHRhY2hlZCgpe3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCgpPT57dGhpcy5zY29wZVN1YnRyZWUodGhpcy4kLm1hcmtkb3duLCEwKX0pKX19O2Z1bmN0aW9uIE9PKHQpe3JldHVybiB0P3QudG9TdHJpbmcoKS5yZXBsYWNlKC9HTVQtXGQrIFwoKFteKV0rKVwpLywiJDEiKToiIn1JTy50ZW1wbGF0ZT1fZWAKICAgIDxkaXYgaWQ9Im1hcmtkb3duIiBpbm5lci1oLXQtbS1sPSJbW3Nhbml0aXplZEh0bWxdXSI+PC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIC8qCiAgICAgICAqIFJlZHVjZSB0b3Btb3N0IGFuZCBib3R0b21tb3N0IG1hcmdpbnMgZnJvbSAxNnB4IHRvIDAuM2VtIChyZW5kZXJzCiAgICAgICAqIGF0IGFib3V0IDQuOHB4KSB0byBrZWVwIHRoZSBsYXlvdXQgY29tcGFjdC4gVGhpcyBpbXByb3ZlcyB0aGUKICAgICAgICogYXBwZWFyYW5jZSB3aGVuIHRoZXJlIGlzIG9ubHkgb25lIGxpbmUgb2YgdGV4dDsgc3RhbmRhcmQgTWFya2Rvd24KICAgICAgICogcmVuZGVyZXJzIHdpbGwgc3RpbGwgaW5jbHVkZSBhIFxgPHA+XGAgZWxlbWVudC4KICAgICAgICoKICAgICAgICogQnkgdGFyZ2V0aW5nIG9ubHkgdGhlIHRvcC1sZXZlbCwgZXh0cmVtYWwgZWxlbWVudHMsIHdlIHByZXNlcnZlIGFueQogICAgICAgKiBhY3R1YWwgcGFyYWdyYXBoIGJyZWFrcyBhbmQgb25seSBjaGFuZ2UgdGhlIHBhZGRpbmcgYWdhaW5zdCB0aGUKICAgICAgICogY29tcG9uZW50IGVkZ2VzLgogICAgICAgKi8KICAgICAgI21hcmtkb3duID4gcDpmaXJzdC1jaGlsZCB7CiAgICAgICAgbWFyZ2luLXRvcDogMC4zZW07CiAgICAgIH0KICAgICAgI21hcmtkb3duID4gcDpsYXN0LWNoaWxkIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAwLjNlbTsKICAgICAgfQoKICAgICAgLyogUGxlYXNhbnQgc3R5bGVzIGZvciBNYXJrZG93biB0YWJsZXMuICovCiAgICAgICNtYXJrZG93biB0YWJsZSB7CiAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKICAgICAgfQogICAgICAjbWFya2Rvd24gdGFibGUgdGggewogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgIH0KICAgICAgI21hcmtkb3duIHRhYmxlIHRoLAogICAgICAjbWFya2Rvd24gdGFibGUgdGQgewogICAgICAgIHBhZGRpbmc6IDZweCAxM3B4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXRiLXVpLWJvcmRlciwgI2RmZTJlNSk7CiAgICAgIH0KICAgICAgI21hcmtkb3duIHRhYmxlIHRyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0OwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS10Yi11aS1ib3JkZXIsICNjNmNiZDEpOwogICAgICB9CiAgICA8L3N0eWxlPgogIGAsdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sSU8ucHJvdG90eXBlLCJodG1sIix2b2lkIDApLHQoW3MoImh0bWwiKSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxJTy5wcm90b3R5cGUsInNhbml0aXplZEh0bWwiLG51bGwpLElPPXQoW2koInRmLW1hcmtkb3duLXZpZXciKV0sSU8pLHRsKHttb2R1bGVOYW1lOiJ0Zi1jYXJkLWhlYWRpbmctc3R5bGUiLHN0eWxlQ29udGVudDoiXG4gICAgZmlnY2FwdGlvbiB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG5cbiAgICAvKiogSG9yaXpvbnRhbCBsaW5lIG9mIGxhYmVscy4gKi9cbiAgICAuaGVhZGluZy1yb3cge1xuICAgICAgbWFyZ2luLXRvcDogLTRweDtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgIH1cblxuICAgIC8qKiBQaWVjZSBvZiB0ZXh0IGluIHRoZSBmaWd1cmUgY2FwdGlvbi4gKi9cbiAgICAuaGVhZGluZy1sYWJlbCB7XG4gICAgICBmbGV4LWdyb3c6IDE7XG4gICAgICBtYXJnaW4tdG9wOiA0cHg7XG4gICAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XG4gICAgfVxuXG4gICAgLyoqIE1ha2VzIGxhYmVsIHNob3cgb24gdGhlIHJpZ2h0LiAqL1xuICAgIC5oZWFkaW5nLXJpZ2h0IHtcbiAgICAgIGZsZXgtZ3JvdzogMDtcbiAgICB9XG4gICJ9KTtsZXQgUk89Y2xhc3MgZXh0ZW5kcyB5ZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5kaXNwbGF5TmFtZT1udWxsLHRoaXMudGFnPW51bGwsdGhpcy5ydW49bnVsbCx0aGlzLmRlc2NyaXB0aW9uPW51bGwsdGhpcy5jb2xvcj1udWxsfV91cGRhdGVIZWFkaW5nU3R5bGUoKXt0aGlzLnVwZGF0ZVN0eWxlcyh7Ii0tdGYtY2FyZC1oZWFkaW5nLWJhY2tncm91bmQtY29sb3IiOnRoaXMuX3J1bkJhY2tncm91bmQsIi0tdGYtY2FyZC1oZWFkaW5nLWNvbG9yIjp0aGlzLl9ydW5Db2xvcn0pfV9jb21wdXRlUnVuQmFja2dyb3VuZCh0KXtyZXR1cm4gdHx8Im5vbmUifV9jb21wdXRlUnVuQ29sb3IodCl7cmV0dXJuKGZ1bmN0aW9uIGUodCl7Y29uc3QgZT0oZnVuY3Rpb24gbih0KXtpZighdClyZXR1cm4gbnVsbDtsZXQgZT10Lm1hdGNoKC9eIyhbMC05YS1mXXsxLDJ9KShbMC05YS1mXXsxLDJ9KShbMC05YS1mXXsxLDJ9KSQvKTtpZighZSlyZXR1cm4gbnVsbDtpZig0PT10Lmxlbmd0aClmb3IodmFyIG49MTtuPD0zO24rKyllW25dPWVbbl0rZVtuXTtyZXR1cm5bcGFyc2VJbnQoZVsxXSwxNikscGFyc2VJbnQoZVsyXSwxNikscGFyc2VJbnQoZVszXSwxNildfSkodCk7cmV0dXJuIGU/TWF0aC5yb3VuZCgoMjk5KmVbMF0rNTg3KmVbMV0rMTE0KmVbMl0pLzFlMyk+MTI1PyJpbmhlcml0IjoiI2VlZSI6ImluaGVyaXQifSkodCl9Z2V0IF9uYW1lTGFiZWwoKXtyZXR1cm4gdGhpcy5kaXNwbGF5TmFtZXx8dGhpcy50YWd8fCIifWdldCBfdGFnTGFiZWwoKXt2YXIgdD10aGlzLnRhZztyZXR1cm4gdCYmdCE9PXRoaXMuZGlzcGxheU5hbWU/dDoiIn1fdG9nZ2xlRGVzY3JpcHRpb25EaWFsb2codCl7Y29uc3QgZT10aGlzLiQuZGVzY3JpcHRpb25EaWFsb2c7ZS5wb3NpdGlvblRhcmdldD10LnRhcmdldCxlLnRvZ2dsZSgpfX07Uk8udGVtcGxhdGU9X2VgCiAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgogICAgICA8ZmlnY2FwdGlvbiBjbGFzcz0iY29udGVudCI+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1yb3ciPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19uYW1lTGFiZWxdXSI+CiAgICAgICAgICAgIDxkaXYgaXRlbXByb3A9Im5hbWUiIGNsYXNzPSJoZWFkaW5nLWxhYmVsIG5hbWUiPltbX25hbWVMYWJlbF1dPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3J1bl1dIj4KICAgICAgICAgICAgPCEtLSBFeHRyYSB3cmFwcGluZyBzcGFuIG5lZWRlZCB0byBhdm9pZCBmbGV4Ym94IGJsb2NraWZpY2F0aW9uLiAtLT4KICAgICAgICAgICAgPCEtLSAoc2VlIGZsZXhib3ggc3BlYywgc2VjdGlvbiA0ICJGbGV4IEl0ZW1zIikgLS0+CiAgICAgICAgICAgIDxzcGFuPgogICAgICAgICAgICAgIDxzcGFuCiAgICAgICAgICAgICAgICBpdGVtcHJvcD0icnVuIgogICAgICAgICAgICAgICAgaWQ9ImhlYWRpbmctcnVuIgogICAgICAgICAgICAgICAgY2xhc3M9ImhlYWRpbmctbGFiZWwgaGVhZGluZy1yaWdodCBydW4iCiAgICAgICAgICAgICAgICA+W1tydW5dXTwvc3BhbgogICAgICAgICAgICAgID4KICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3RhZ0xhYmVsXV0iPgogICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1yb3ciPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIj4KICAgICAgICAgICAgICB0YWc6IDxzcGFuIGl0ZW1wcm9wPSJ0YWciPltbX3RhZ0xhYmVsXV08L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8c2xvdD48L3Nsb3Q+CiAgICAgIDwvZmlnY2FwdGlvbj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2Rlc2NyaXB0aW9uXV0iPgogICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgICAgaWNvbj0iaW5mbyIKICAgICAgICAgIG9uLXRhcD0iX3RvZ2dsZURlc2NyaXB0aW9uRGlhbG9nIgogICAgICAgICAgdGl0bGU9IlNob3cgc3VtbWFyeSBkZXNjcmlwdGlvbiIKICAgICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHBhcGVyLWRpYWxvZwogICAgICAgIGlkPSJkZXNjcmlwdGlvbkRpYWxvZyIKICAgICAgICBuby1vdmVybGFwPSIiCiAgICAgICAgaG9yaXpvbnRhbC1hbGlnbj0iYXV0byIKICAgICAgICB2ZXJ0aWNhbC1hbGlnbj0iYXV0byIKICAgICAgPgogICAgICAgIDxwYXBlci1kaWFsb2ctc2Nyb2xsYWJsZT4KICAgICAgICAgIDx0Zi1tYXJrZG93bi12aWV3IGh0bWw9IltbZGVzY3JpcHRpb25dXSI+PC90Zi1tYXJrZG93bi12aWV3PgogICAgICAgIDwvcGFwZXItZGlhbG9nLXNjcm9sbGFibGU+CiAgICAgIDwvcGFwZXItZGlhbG9nPgogICAgPC9kaXY+CiAgICA8c3R5bGUgaW5jbHVkZT0idGYtY2FyZC1oZWFkaW5nLXN0eWxlIj4KICAgICAgLmNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgfQogICAgICAuY29udGVudCB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgfQogICAgICAubmFtZSB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICB9CiAgICAgIC5ydW4gewogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICB3aWR0aDogYXV0bzsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgICAgcGFkZGluZzogMXB4IDRweCAycHg7CiAgICAgIH0KICAgICAgcGFwZXItaWNvbi1idXR0b24gewogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgfQogICAgICBwYXBlci1kaWFsb2ctc2Nyb2xsYWJsZSB7CiAgICAgICAgbWF4LXdpZHRoOiA2NDBweDsKICAgICAgfQogICAgICAjaGVhZGluZy1ydW4gewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXRmLWNhcmQtaGVhZGluZy1iYWNrZ3JvdW5kLWNvbG9yKTsKICAgICAgICBjb2xvcjogdmFyKC0tdGYtY2FyZC1oZWFkaW5nLWNvbG9yKTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLFJPLnByb3RvdHlwZSwiZGlzcGxheU5hbWUiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sUk8ucHJvdG90eXBlLCJ0YWciLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sUk8ucHJvdG90eXBlLCJydW4iLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sUk8ucHJvdG90eXBlLCJkZXNjcmlwdGlvbiIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxSTy5wcm90b3R5cGUsImNvbG9yIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfY29tcHV0ZVJ1bkJhY2tncm91bmQoY29sb3IpIixyZWFkT25seTohMCxvYnNlcnZlcjoiX3VwZGF0ZUhlYWRpbmdTdHlsZSJ9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sUk8ucHJvdG90eXBlLCJfcnVuQmFja2dyb3VuZCIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZyxjb21wdXRlZDoiX2NvbXB1dGVSdW5Db2xvcihjb2xvcikiLHJlYWRPbmx5OiEwLG9ic2VydmVyOiJfdXBkYXRlSGVhZGluZ1N0eWxlIn0pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxSTy5wcm90b3R5cGUsIl9ydW5Db2xvciIsdm9pZCAwKSx0KFtzKCJkaXNwbGF5TmFtZSIsInRhZyIpLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFJPLnByb3RvdHlwZSwiX25hbWVMYWJlbCIsbnVsbCksdChbcygiZGlzcGxheU5hbWUiLCJ0YWciKSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxSTy5wcm90b3R5cGUsIl90YWdMYWJlbCIsbnVsbCksUk89dChbaSgidGYtY2FyZC1oZWFkaW5nIildLFJPKTtsZXQgek89Y2xhc3MgZXh0ZW5kcyh0cih5ZSkpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9tZXRhZGF0YUNhbmNlbGxlcj1uZXcgTk8sdGhpcy5fc3RlcHM9W10sdGhpcy5fYXR0YWNoZWQ9ITF9Z2V0IF9ydW5Db2xvcigpe3JldHVybiBBTyh0aGlzLnJ1bil9Z2V0IF9oYXNBdExlYXN0T25lU3RlcCgpe3ZhciB0PXRoaXMuX3N0ZXBzO3JldHVybiEhdCYmdC5sZW5ndGg+MH1nZXQgX2hhc011bHRpcGxlU3RlcHMoKXt2YXIgdD10aGlzLl9zdGVwcztyZXR1cm4hIXQmJnQubGVuZ3RoPjF9Z2V0IF9tYXhTdGVwSW5kZXgoKXtyZXR1cm4gdGhpcy5fc3RlcHMubGVuZ3RoLTF9Z2V0IF9jdXJyZW50RGF0dW0oKXtyZXR1cm4gdGhpcy5fc3RlcHNbdGhpcy5fc3RlcEluZGV4XX1nZXQgX3NhbXBsZVRleHQoKXtyZXR1cm5gJHt0aGlzLnNhbXBsZSsxfWB9Z2V0IF9oYXNNdWx0aXBsZVNhbXBsZXMoKXtyZXR1cm4gdGhpcy50b3RhbFNhbXBsZXM+MX1hdHRhY2hlZCgpe3RoaXMuX2F0dGFjaGVkPSEwLHRoaXMucmVsb2FkKCl9X3JlbG9hZE9uUnVuVGFnQ2hhbmdlKCl7dGhpcy5yZWxvYWQoKX1yZWxvYWQoKXtpZighdGhpcy5fYXR0YWNoZWQpcmV0dXJuO3RoaXMuX21ldGFkYXRhQ2FuY2VsbGVyLmNhbmNlbEFsbCgpO2NvbnN0IHQ9Z3IoKS5wbHVnaW5Sb3V0ZSgiYXVkaW8iLCIvYXVkaW8iLG5ldyBVUkxTZWFyY2hQYXJhbXMoe3RhZzp0aGlzLnRhZyxydW46dGhpcy5ydW4sc2FtcGxlOlN0cmluZyh0aGlzLnNhbXBsZSl9KSksZT10aGlzLl9tZXRhZGF0YUNhbmNlbGxlci5jYW5jZWxsYWJsZSgodD0+e2lmKHQuY2FuY2VsbGVkKXJldHVybjtjb25zdCBlPXQudmFsdWUubWFwKHRoaXMuX2NyZWF0ZVN0ZXBEYXR1bS5iaW5kKHRoaXMpKTt0aGlzLnNldCgiX3N0ZXBzIixlKSx0aGlzLnNldCgiX3N0ZXBJbmRleCIsZS5sZW5ndGgtMSl9KSk7dGhpcy5yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KHQpLnRoZW4oZSl9X2NyZWF0ZVN0ZXBEYXR1bSh0KXtjb25zdCBlPW5ldyBVUkxTZWFyY2hQYXJhbXModC5xdWVyeSk7ZS5hcHBlbmQoInRzIixTdHJpbmcodC53YWxsX3RpbWUpKTtjb25zdCBuPWdyKCkucGx1Z2luUm91dGUoImF1ZGlvIiwiL2luZGl2aWR1YWxBdWRpbyIsZSk7cmV0dXJue3dhbGxfdGltZTpPTyhuZXcgRGF0ZSgxZTMqdC53YWxsX3RpbWUpKSxzdGVwOnQuc3RlcCxsYWJlbDp0LmxhYmVsLGNvbnRlbnRUeXBlOnQuY29udGVudFR5cGUsdXJsOm59fX07ek8udGVtcGxhdGU9X2VgCiAgICA8dGYtY2FyZC1oZWFkaW5nCiAgICAgIHRhZz0iW1t0YWddXSIKICAgICAgcnVuPSJbW3J1bl1dIgogICAgICBkaXNwbGF5LW5hbWU9IltbdGFnTWV0YWRhdGEuZGlzcGxheU5hbWVdXSIKICAgICAgZGVzY3JpcHRpb249IltbdGFnTWV0YWRhdGEuZGVzY3JpcHRpb25dXSIKICAgICAgY29sb3I9IltbX3J1bkNvbG9yXV0iCiAgICA+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaGFzTXVsdGlwbGVTYW1wbGVzXV0iPgogICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmctcm93Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmctbGFiZWwiPgogICAgICAgICAgICBzYW1wbGU6IFtbX3NhbXBsZVRleHRdXSBvZiBbW3RvdGFsU2FtcGxlc11dCiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNBdExlYXN0T25lU3RlcF1dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLXJvdyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIj4KICAgICAgICAgICAgc3RlcCA8c3Ryb25nPltbX2N1cnJlbnREYXR1bS5zdGVwXV08L3N0cm9uZz4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19jdXJyZW50RGF0dW0ud2FsbF90aW1lXV0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIGhlYWRpbmctcmlnaHQiPgogICAgICAgICAgICAgIFtbX2N1cnJlbnREYXR1bS53YWxsX3RpbWVdXQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaGFzTXVsdGlwbGVTdGVwc11dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLXJvdyI+CiAgICAgICAgICA8cGFwZXItc2xpZGVyCiAgICAgICAgICAgIGlkPSJzdGVwcyIKICAgICAgICAgICAgaW1tZWRpYXRlLXZhbHVlPSJ7e19zdGVwSW5kZXh9fSIKICAgICAgICAgICAgbWF4PSJbW19tYXhTdGVwSW5kZXhdXSIKICAgICAgICAgICAgbWF4LW1hcmtlcnM9IltbX21heFN0ZXBJbmRleF1dIgogICAgICAgICAgICBzbmFwcz0iIgogICAgICAgICAgICBzdGVwPSIxIgogICAgICAgICAgICB2YWx1ZT0ie3tfc3RlcEluZGV4fX0iCiAgICAgICAgICA+PC9wYXBlci1zbGlkZXI+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L3RmLWNhcmQtaGVhZGluZz4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaGFzQXRMZWFzdE9uZVN0ZXBdXSI+CiAgICAgIDxhdWRpbwogICAgICAgIGNvbnRyb2xzPSIiCiAgICAgICAgc3JjJD0iW1tfY3VycmVudERhdHVtLnVybF1dIgogICAgICAgIHR5cGUkPSJbW19jdXJyZW50RGF0dW0uY29udGVudFR5cGVdXSIKICAgICAgPjwvYXVkaW8+CiAgICAgIDx0Zi1tYXJrZG93bi12aWV3IGh0bWw9IltbX2N1cnJlbnREYXR1bS5sYWJlbF1dIj48L3RmLW1hcmtkb3duLXZpZXc+CiAgICA8L3RlbXBsYXRlPgogICAgPGRpdiBpZD0ibWFpbi1hdWRpby1jb250YWluZXIiPjwvZGl2PgoKICAgIDxzdHlsZSBpbmNsdWRlPSJ0Zi1jYXJkLWhlYWRpbmctc3R5bGUiPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgd2lkdGg6IDM1MHB4OwogICAgICAgIGhlaWdodDogYXV0bzsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgLS1zdGVwLXNsaWRlci1rbm9iLWNvbG9yOiAjNDI0MjQyOwogICAgICAgIG1hcmdpbi1yaWdodDogMTVweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNXB4OwogICAgICB9CgogICAgICAjc3RlcHMgewogICAgICAgIGhlaWdodDogMTVweDsKICAgICAgICBtYXJnaW46IDAgMCAwIC0xNXB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgcGFkZGluZzogMCA1cHg7IC8qIHNvIHRoZSBzbGlkZXIga25vYiBkb2Vzbid0IGJ1dHQgb3V0ICovCiAgICAgICAgbWFyZ2luLXRvcDogNXB4OwogICAgICAgIC0tcGFwZXItc2xpZGVyLWFjdGl2ZS1jb2xvcjogdmFyKC0tc3RlcC1zbGlkZXIta25vYi1jb2xvcik7CiAgICAgICAgLS1wYXBlci1zbGlkZXIta25vYi1jb2xvcjogdmFyKC0tc3RlcC1zbGlkZXIta25vYi1jb2xvcik7CiAgICAgICAgLS1wYXBlci1zbGlkZXItcGluLWNvbG9yOiB2YXIoLS1zdGVwLXNsaWRlci1rbm9iLWNvbG9yKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLXN0YXJ0LWNvbG9yOiB2YXIoLS1zdGVwLXNsaWRlci1rbm9iLWNvbG9yKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLXN0YXJ0LWJvcmRlci1jb2xvcjogdmFyKC0tc3RlcC1zbGlkZXIta25vYi1jb2xvcik7CiAgICAgICAgLS1wYXBlci1zbGlkZXItcGluLXN0YXJ0LWNvbG9yOiB2YXIoLS1zdGVwLXNsaWRlci1rbm9iLWNvbG9yKTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLHpPLnByb3RvdHlwZSwicnVuIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLHpPLnByb3RvdHlwZSwidGFnIix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLHpPLnByb3RvdHlwZSwic2FtcGxlIix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLHpPLnByb3RvdHlwZSwidG90YWxTYW1wbGVzIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLHpPLnByb3RvdHlwZSwidGFnTWV0YWRhdGEiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsaHIpXSx6Ty5wcm90b3R5cGUsInJlcXVlc3RNYW5hZ2VyIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE5PKV0sek8ucHJvdG90eXBlLCJfbWV0YWRhdGFDYW5jZWxsZXIiLHZvaWQgMCksdChbbyh7dHlwZTpBcnJheX0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLHpPLnByb3RvdHlwZSwiX3N0ZXBzIix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLHpPLnByb3RvdHlwZSwiX3N0ZXBJbmRleCIsdm9pZCAwKSx0KFtzKCJydW4iKSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSx6Ty5wcm90b3R5cGUsIl9ydW5Db2xvciIsbnVsbCksdChbcygiX3N0ZXBzIiksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLHpPLnByb3RvdHlwZSwiX2hhc0F0TGVhc3RPbmVTdGVwIixudWxsKSx0KFtzKCJfc3RlcHMiKSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sek8ucHJvdG90eXBlLCJfaGFzTXVsdGlwbGVTdGVwcyIsbnVsbCksdChbcygiX3N0ZXBzIiksZSgiZGVzaWduOnR5cGUiLE51bWJlciksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sek8ucHJvdG90eXBlLCJfbWF4U3RlcEluZGV4IixudWxsKSx0KFtzKCJfc3RlcHMiLCJfc3RlcEluZGV4IiksZSgiZGVzaWduOnR5cGUiLE9iamVjdCksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sek8ucHJvdG90eXBlLCJfY3VycmVudERhdHVtIixudWxsKSx0KFtzKCJzYW1wbGUiKSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSx6Ty5wcm90b3R5cGUsIl9zYW1wbGVUZXh0IixudWxsKSx0KFtzKCJ0b3RhbFNhbXBsZXMiKSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sek8ucHJvdG90eXBlLCJfaGFzTXVsdGlwbGVTYW1wbGVzIixudWxsKSx0KFthKCJydW4iLCJ0YWciKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLHpPLnByb3RvdHlwZSwiX3JlbG9hZE9uUnVuVGFnQ2hhbmdlIixudWxsKSx6Tz10KFtpKCJ0Zi1hdWRpby1sb2FkZXIiKV0sek8pO2xldCBETz1jbGFzcyBleHRlbmRzKHRyKHllKSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMucmVsb2FkT25SZWFkeT0hMCx0aGlzLl90YWdGaWx0ZXI9IiIsdGhpcy5fcmVxdWVzdE1hbmFnZXI9bmV3IGhyfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLnJlbG9hZE9uUmVhZHkmJnRoaXMucmVsb2FkKCl9cmVsb2FkKCl7dGhpcy5fZmV0Y2hUYWdzKCkudGhlbigoKCk9Pnt0aGlzLl9yZWxvYWRBdWRpbygpfSkpfV9mZXRjaFRhZ3MoKXtjb25zdCB0PWdyKCkucGx1Z2luUm91dGUoImF1ZGlvIiwiL3RhZ3MiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKCh0PT57aWYod2UuaXNFcXVhbCh0LHRoaXMuX3J1blRvVGFnSW5mbykpcmV0dXJuO2NvbnN0IGU9b3Iod2UubWFwVmFsdWVzKHQsKHQ9Pk9iamVjdC5rZXlzKHQpKSkpO3RoaXMuc2V0KCJfZGF0YU5vdEZvdW5kIiwwPT09ZS5sZW5ndGgpLHRoaXMuc2V0KCJfcnVuVG9UYWdJbmZvIix0KX0pKX1fcmVsb2FkQXVkaW8oKXt0aGlzLnJvb3QucXVlcnlTZWxlY3RvckFsbCgidGYtYXVkaW8tbG9hZGVyIikuZm9yRWFjaCgodD0+e3QucmVsb2FkKCl9KSl9X3Nob3VsZE9wZW4odCl7cmV0dXJuIHQ8PTJ9Z2V0IF9jYXRlZ29yaWVzKCl7dmFyIHQ9dGhpcy5fcnVuVG9UYWdJbmZvLGU9dGhpcy5fc2VsZWN0ZWRSdW5zLG49dGhpcy5fdGFnRmlsdGVyO2Z1bmN0aW9uIGkoZSl7Y29uc3Qgbj10W2UucnVuXVtlLnRhZ10uc2FtcGxlcztyZXR1cm4gd2UucmFuZ2UobikubWFwKCh0PT5PYmplY3QuYXNzaWduKHt9LGUse3NhbXBsZTp0LHRvdGFsU2FtcGxlczpufSkpKX1yZXR1cm4gU3Iod2UubWFwVmFsdWVzKHQsKHQ9Pk9iamVjdC5rZXlzKHQpKSksZSxuKS5tYXAoKHQ9Pk9iamVjdC5hc3NpZ24oe30sdCx7aXRlbXM6W10uY29uY2F0LmFwcGx5KFtdLHQuaXRlbXMubWFwKGkpKX0pKSl9X3RhZ01ldGFkYXRhKHQsZSxuKXtyZXR1cm4gdFtlXVtuXX19O0RPLnRlbXBsYXRlPV9lYAogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgY2xhc3M9InNpZGViYXIiIHNsb3Q9InNpZGViYXIiPgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiBydW5zLXNlbGVjdG9yIj4KICAgICAgICAgIDx0Zi1ydW5zLXNlbGVjdG9yCiAgICAgICAgICAgIGlkPSJydW5zLXNlbGVjdG9yIgogICAgICAgICAgICBzZWxlY3RlZC1ydW5zPSJ7e19zZWxlY3RlZFJ1bnN9fSIKICAgICAgICAgID48L3RmLXJ1bnMtc2VsZWN0b3I+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjZW50ZXIiIHNsb3Q9ImNlbnRlciI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLXdhcm5pbmciPgogICAgICAgICAgICA8aDM+Tm8gYXVkaW8gZGF0YSB3YXMgZm91bmQuPC9oMz4KICAgICAgICAgICAgPHA+UHJvYmFibGUgY2F1c2VzOjwvcD4KICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgIDxsaT5Zb3UgaGF2ZW7igJl0IHdyaXR0ZW4gYW55IGF1ZGlvIGRhdGEgdG8geW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICAgIDxsaT5UZW5zb3JCb2FyZCBjYW7igJl0IGZpbmQgeW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICA8L3VsPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW914oCZcmUgbmV3IHRvIHVzaW5nIFRlbnNvckJvYXJkLCBhbmQgd2FudCB0byBmaW5kIG91dCBob3cgdG8KICAgICAgICAgICAgICBhZGQgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIgogICAgICAgICAgICAgICAgPlJFQURNRTwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgcGVyaGFwcyB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCIKICAgICAgICAgICAgICAgID5UZW5zb3JCb2FyZCB0dXRvcmlhbDwvYQogICAgICAgICAgICAgID4uCiAgICAgICAgICAgIDwvcD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciCiAgICAgICAgICAgICAgICA+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgY29uc2lkZXIgZmlsaW5nIGFuIGlzc3VlIG9uIEdpdEh1Yi4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8dGYtdGFnLWZpbHRlcmVyIHRhZy1maWx0ZXI9Int7X3RhZ0ZpbHRlcn19Ij48L3RmLXRhZy1maWx0ZXJlcj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3CiAgICAgICAgICAgICAgY2F0ZWdvcnk9IltbY2F0ZWdvcnldXSIKICAgICAgICAgICAgICBpbml0aWFsLW9wZW5lZD0iW1tfc2hvdWxkT3BlbihpbmRleCldXSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0Zi1hdWRpby1sb2FkZXIKICAgICAgICAgICAgICAgICAgYWN0aXZlPSJbW2FjdGl2ZV1dIgogICAgICAgICAgICAgICAgICBydW49IltbaXRlbS5ydW5dXSIKICAgICAgICAgICAgICAgICAgdGFnPSJbW2l0ZW0udGFnXV0iCiAgICAgICAgICAgICAgICAgIHNhbXBsZT0iW1tpdGVtLnNhbXBsZV1dIgogICAgICAgICAgICAgICAgICB0b3RhbC1zYW1wbGVzPSJbW2l0ZW0udG90YWxTYW1wbGVzXV0iCiAgICAgICAgICAgICAgICAgIHRhZy1tZXRhZGF0YT0iW1tfdGFnTWV0YWRhdGEoX3J1blRvVGFnSW5mbywgaXRlbS5ydW4sIGl0ZW0udGFnKV1dIgogICAgICAgICAgICAgICAgICByZXF1ZXN0LW1hbmFnZXI9IltbX3JlcXVlc3RNYW5hZ2VyXV0iCiAgICAgICAgICAgICAgICA+PC90Zi1hdWRpby1sb2FkZXI+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldz4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICA8L3RmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICA8c3R5bGUgaW5jbHVkZT0iZGFzaGJvYXJkLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAubm8tZGF0YS13YXJuaW5nIHsKICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OwogICAgICAgIG1hcmdpbjogODBweCBhdXRvIDAgYXV0bzsKICAgICAgfQogICAgPC9zdHlsZT4KICBgLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sRE8ucHJvdG90eXBlLCJyZWxvYWRPblJlYWR5Iix2b2lkIDApLHQoW28oe3R5cGU6QXJyYXl9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSxETy5wcm90b3R5cGUsIl9zZWxlY3RlZFJ1bnMiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRE8ucHJvdG90eXBlLCJfcnVuVG9UYWdJbmZvIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sRE8ucHJvdG90eXBlLCJfZGF0YU5vdEZvdW5kIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLERPLnByb3RvdHlwZSwiX3RhZ0ZpbHRlciIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixocildLERPLnByb3RvdHlwZSwiX3JlcXVlc3RNYW5hZ2VyIix2b2lkIDApLHQoW3MoIl9ydW5Ub1RhZ0luZm8iLCJfc2VsZWN0ZWRSdW5zIiwiX3RhZ0ZpbHRlciIpLGUoImRlc2lnbjp0eXBlIixBcnJheSksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sRE8ucHJvdG90eXBlLCJfY2F0ZWdvcmllcyIsbnVsbCksRE89dChbaSgidGYtYXVkaW8tZGFzaGJvYXJkIildLERPKTtsZXQgQk89Y2xhc3MgZXh0ZW5kcyh0cih5ZSkpe2F0dGFjaGVkKCl7dGhpcy5hc3luYygoZnVuY3Rpb24oKXt0aGlzLmdldEVmZmVjdGl2ZUNoaWxkcmVuKCkuZm9yRWFjaChmdW5jdGlvbih0KXt0aGlzLmxpc3Rlbih0LCJ0YXAiLCJfc2VsZWN0VGFyZ2V0Iil9LmJpbmQodGhpcykpfSkpfV9zZWxlY3RUYXJnZXQodCl7dGhpcy5zZWxlY3RlZElkPXQuY3VycmVudFRhcmdldC5pZH1fc2VsZWN0ZWRJZENoYW5nZWQoKXt2YXIgdD10aGlzLnF1ZXJ5RWZmZWN0aXZlQ2hpbGRyZW4oIiMiK3RoaXMuc2VsZWN0ZWRJZCk7dCYmKHRoaXMuZ2V0RWZmZWN0aXZlQ2hpbGRyZW4oKS5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmNsYXNzTGlzdC5yZW1vdmUoInNlbGVjdGVkIil9KSksdC5jbGFzc0xpc3QuYWRkKCJzZWxlY3RlZCIpKX19O2Z1bmN0aW9uIEhPKHQsZSl7bGV0IG47Y29uc3QgaT17fTtyZXR1cm4gT2JqZWN0LmtleXModCkuZm9yRWFjaCgoZT0+e2NvbnN0IHI9dFtlXTt2b2lkIDA9PT1uJiYobj1yLmRpc3BsYXlOYW1lKSxuIT09ci5kaXNwbGF5TmFtZSYmKG49bnVsbCksdm9pZCAwPT09aVtyLmRlc2NyaXB0aW9uXSYmKGlbci5kZXNjcmlwdGlvbl09W10pLGlbci5kZXNjcmlwdGlvbl0ucHVzaChlKX0pKSx7ZGlzcGxheU5hbWU6bnVsbCE9bj9uOmUsZGVzY3JpcHRpb246KCgpPT57Y29uc3QgdD1PYmplY3Qua2V5cyhpKTtyZXR1cm4gMD09PXQubGVuZ3RoPyIiOjE9PT10Lmxlbmd0aD90WzBdOmA8cD48c3Ryb25nPk11bHRpcGxlIGRlc2NyaXB0aW9uczo8L3N0cm9uZz48L3A+PHVsPiR7dC5tYXAoKHQ9Pntjb25zdCBlPWlbdF0ubWFwKCh0PT5gPGNvZGU+JHt0LnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpLnJlcGxhY2UoLyYvZywiJmFtcDsiKX08L2NvZGU+YCkpLG49ZS5sZW5ndGg+Mj9lLnNsaWNlKDAsZS5sZW5ndGgtMSkuam9pbigiLCAiKSsiLCBhbmQgIitlW2UubGVuZ3RoLTFdOmUuam9pbigiIGFuZCAiKTtyZXR1cm5gPGxpPjxwPkZvciAkeyhmdW5jdGlvbiByKHQsZSxuKXtyZXR1cm4gMT09PXQ/ZTpufSkoZS5sZW5ndGgsInJ1biIsInJ1bnMiKX0gJHtufTo8L3A+JHt0fTwvbGk+YH0pKS5qb2luKCIiKX08L3VsPmB9KSgpfX1CTy50ZW1wbGF0ZT1fZWAKICAgIDxkaXYgaWQ9IndyYXAiPgogICAgICA8aDM+W1tuYW1lXV08L2gzPgogICAgICA8ZGl2IGNsYXNzPSJjb250ZW50LXdyYXBwZXIiPjxzbG90Pjwvc2xvdD48L2Rpdj4KICAgIDwvZGl2PgogICAgPHN0eWxlPgogICAgICAuY29udGVudC13cmFwcGVyIDo6c2xvdHRlZCgqKSB7CiAgICAgICAgYmFja2dyb3VuZDogbm9uZTsKICAgICAgICBjb2xvcjogdmFyKC0tdGItdWktZGFyay1hY2NlbnQpOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBtYXJnaW4tdG9wOiAxMHB4OwogICAgICB9CgogICAgICAuY29udGVudC13cmFwcGVyIDo6c2xvdHRlZCgqKSB7CiAgICAgICAgYmFja2dyb3VuZDogbm9uZTsKICAgICAgICBjb2xvcjogdmFyKC0tdGItdWktZGFyay1hY2NlbnQpOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBtYXJnaW4tdG9wOiAxMHB4OwogICAgICB9CgogICAgICAuY29udGVudC13cmFwcGVyIDo6c2xvdHRlZCguc2VsZWN0ZWQpIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS10Yi11aS1kYXJrLWFjY2VudCk7CiAgICAgICAgY29sb3I6IHdoaXRlICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIGgzIHsKICAgICAgICBjb2xvcjogdmFyKC0tdGItc2Vjb25kYXJ5LXRleHQtY29sb3IpOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogbm9ybWFsOwogICAgICAgIG1hcmdpbjogMCAwIDVweDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLEJPLnByb3RvdHlwZSwibmFtZSIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZyxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9zZWxlY3RlZElkQ2hhbmdlZCJ9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sQk8ucHJvdG90eXBlLCJzZWxlY3RlZElkIix2b2lkIDApLEJPPXQoW2koInRmLW9wdGlvbi1zZWxlY3RvciIpXSxCTyk7bGV0IEZPPWNsYXNzIGV4dGVuZHMgeWV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMud2VpZ2h0PS42LHRoaXMuX3VwZGF0ZVdlaWdodD13ZS5kZWJvdW5jZSgoZnVuY3Rpb24odCl7dGhpcy53ZWlnaHQ9dH0pLDI1MCl9X2ltbWVkaWF0ZVdlaWdodE51bWJlckZvclBhcGVyU2xpZGVyQ2hhbmdlZCgpe3RoaXMuX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dD10aGlzLl9pbW1lZGlhdGVXZWlnaHROdW1iZXJGb3JQYXBlclNsaWRlci50b1N0cmluZygpLHRoaXMuX3VwZGF0ZVdlaWdodC5jYWxsKHRoaXMsdGhpcy5faW1tZWRpYXRlV2VpZ2h0TnVtYmVyRm9yUGFwZXJTbGlkZXIpfV9pbnB1dFdlaWdodFN0cmluZ0ZvclBhcGVySW5wdXRDaGFuZ2VkKCl7K3RoaXMuX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dDwwP3RoaXMuX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dD0iMCI6K3RoaXMuX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dD4xJiYodGhpcy5faW5wdXRXZWlnaHRTdHJpbmdGb3JQYXBlcklucHV0PSIxIik7dmFyIHQ9K3RoaXMuX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dDtpc05hTih0KXx8dGhpcy5fdXBkYXRlV2VpZ2h0LmNhbGwodGhpcyx0KX19O2Z1bmN0aW9uIFZPKHQsZSl7Y29uc3Qgbj1PYmplY3Qua2V5cyhlKS5zb3J0KCkuZmlsdGVyKCh0PT52b2lkIDAhPT1lW3RdKSk7aWYoIW4ubGVuZ3RoKXJldHVybiB0O2NvbnN0IGk9LTEhPT10LmluZGV4T2YoIj8iKT8iJiI6Ij8iO3JldHVybiB0K2krW10uY29uY2F0KC4uLm4ubWFwKCh0PT57Y29uc3Qgbj1lW3RdO3JldHVybihBcnJheS5pc0FycmF5KG4pP246W25dKS5tYXAoKGU9PmAke3R9PSR7KGZ1bmN0aW9uIG4odCl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh0KS5yZXBsYWNlKC9cKC9nLCIlMjgiKS5yZXBsYWNlKC9cKS9nLCIlMjkiKX0KLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UKICAgIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlCiAgICBMaWNlbnNlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKICAgIFRISVMgQ09ERSBJUyBQUk9WSURFRCBPTiBBTiAqQVMgSVMqIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKICAgIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gQU5ZIElNUExJRUQKICAgIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsCiAgICBNRVJDSEFOVEFCTElUWSBPUiBOT04tSU5GUklOR0VNRU5ULgoKICAgIFNlZSB0aGUgQXBhY2hlIFZlcnNpb24gMi4wIExpY2Vuc2UgZm9yIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucwogICAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8pKGUpfWApKX0pKSkuam9pbigiJiIpfUZPLnRlbXBsYXRlPV9lYAogICAgPGgzIGNsYXNzPSJ0aXRsZSI+U21vb3RoaW5nPC9oMz4KICAgIDxkaXYgY2xhc3M9InNtb290aGluZy1ibG9jayI+CiAgICAgIDxwYXBlci1zbGlkZXIKICAgICAgICBpZD0ic2xpZGVyIgogICAgICAgIGltbWVkaWF0ZS12YWx1ZT0ie3tfaW1tZWRpYXRlV2VpZ2h0TnVtYmVyRm9yUGFwZXJTbGlkZXJ9fSIKICAgICAgICBtYXg9IltbbWF4XV0iCiAgICAgICAgbWluPSJbW21pbl1dIgogICAgICAgIHBpbgogICAgICAgIHN0ZXA9Iltbc3RlcF1dIgogICAgICAgIHR5cGU9Im51bWJlciIKICAgICAgICB2YWx1ZT0ie3t3ZWlnaHR9fSIKICAgICAgPjwvcGFwZXItc2xpZGVyPgogICAgICA8cGFwZXItaW5wdXQKICAgICAgICBpZD0iaW5wdXQiCiAgICAgICAgbGFiZWw9IndlaWdodCIKICAgICAgICBuby1sYWJlbC1mbG9hdAogICAgICAgIHZhbHVlPSJ7e19pbnB1dFdlaWdodFN0cmluZ0ZvclBhcGVySW5wdXR9fSIKICAgICAgICB0eXBlPSJudW1iZXIiCiAgICAgICAgc3RlcD0iW1tzdGVwXV0iCiAgICAgICAgbWluPSJbW21pbl1dIgogICAgICAgIG1heD0iW1ttYXhdXSIKICAgICAgPjwvcGFwZXItaW5wdXQ+CiAgICA8L2Rpdj4KICAgIDxzdHlsZT4KICAgICAgLnRpdGxlIHsKICAgICAgICBjb2xvcjogdmFyKC0tdGItc2Vjb25kYXJ5LXRleHQtY29sb3IpOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBmb250LXdlaWdodDogbm9ybWFsOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICAgIH0KCiAgICAgIC5zbW9vdGhpbmctYmxvY2sgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KCiAgICAgIHBhcGVyLXNsaWRlciB7CiAgICAgICAgLS1wYXBlci1zbGlkZXItYWN0aXZlLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLXN0YXJ0LWJvcmRlci1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItbWFya2Vycy1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItcGluLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1waW4tc3RhcnQtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIGZsZXgtZ3JvdzogMjsKICAgICAgfQoKICAgICAgcGFwZXItaW5wdXQgewogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWZvY3VzLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDogewogICAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIH0KICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1sYWJlbDogewogICAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIH0KICAgICAgICB3aWR0aDogNjBweDsKICAgICAgfQogICAgPC9zdHlsZT4KICBgLHQoW28oe3R5cGU6TnVtYmVyfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLEZPLnByb3RvdHlwZSwic3RlcCIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxGTy5wcm90b3R5cGUsIm1heCIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxGTy5wcm90b3R5cGUsIm1pbiIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcixub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sRk8ucHJvdG90eXBlLCJ3ZWlnaHQiLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXIsbm90aWZ5OiEwLG9ic2VydmVyOiJfaW1tZWRpYXRlV2VpZ2h0TnVtYmVyRm9yUGFwZXJTbGlkZXJDaGFuZ2VkIn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxGTy5wcm90b3R5cGUsIl9pbW1lZGlhdGVXZWlnaHROdW1iZXJGb3JQYXBlclNsaWRlciIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZyxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9pbnB1dFdlaWdodFN0cmluZ0ZvclBhcGVySW5wdXRDaGFuZ2VkIn0pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxGTy5wcm90b3R5cGUsIl9pbnB1dFdlaWdodFN0cmluZ0ZvclBhcGVySW5wdXQiLHZvaWQgMCksRk89dChbaSgidGYtc21vb3RoaW5nLWlucHV0IildLEZPKTt2YXIgVU89T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKHQsZSl7dC5fX3Byb3RvX189ZX18fGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShuKSYmKHRbbl09ZVtuXSl9LGpPPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uIHQoZSl7Zm9yKHZhciBuLGk9MSxyPWFyZ3VtZW50cy5sZW5ndGg7aTxyO2krKylmb3IodmFyIG8gaW4gbj1hcmd1bWVudHNbaV0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4sbykmJihlW29dPW5bb10pO3JldHVybiBlfTtmdW5jdGlvbiBHTyh0KXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl0sbj0wO3JldHVybiBlP2UuY2FsbCh0KTp7bmV4dDpmdW5jdGlvbigpe3JldHVybiB0JiZuPj10Lmxlbmd0aCYmKHQ9dm9pZCAwKSx7dmFsdWU6dCYmdFtuKytdLGRvbmU6IXR9fX19ZnVuY3Rpb24gV08odCxlKXt2YXIgbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl07aWYoIW4pcmV0dXJuIHQ7dmFyIGkscixvPW4uY2FsbCh0KSxhPVtdO3RyeXtmb3IoOyh2b2lkIDA9PT1lfHxlLS0gPjApJiYhKGk9by5uZXh0KCkpLmRvbmU7KWEucHVzaChpLnZhbHVlKX1jYXRjaCh0KXtyPXtlcnJvcjp0fX1maW5hbGx5e3RyeXtpJiYhaS5kb25lJiYobj1vLnJldHVybikmJm4uY2FsbChvKX1maW5hbGx5e2lmKHIpdGhyb3cgci5lcnJvcn19cmV0dXJuIGF9ZnVuY3Rpb24gcU8odCl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBxTz8odGhpcy52PXQsdGhpcyk6bmV3IHFPKHQpfXZhciBZTz1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxfX2V4dGVuZHM6ZnVuY3Rpb24gWE8odCxlKXtmdW5jdGlvbiBuKCl7dGhpcy5jb25zdHJ1Y3Rvcj10fVVPKHQsZSksdC5wcm90b3R5cGU9bnVsbD09PWU/T2JqZWN0LmNyZWF0ZShlKToobi5wcm90b3R5cGU9ZS5wcm90b3R5cGUsbmV3IG4pfSxfX2Fzc2lnbjpqTyxfX3Jlc3Q6ZnVuY3Rpb24gJE8odCxlKXt2YXIgbj17fTtmb3IodmFyIGkgaW4gdClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxpKSYmZS5pbmRleE9mKGkpPDAmJihuW2ldPXRbaV0pO2lmKG51bGwhPXQmJiJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj0wO2ZvcihpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCk7cjxpLmxlbmd0aDtyKyspZS5pbmRleE9mKGlbcl0pPDAmJihuW2lbcl1dPXRbaVtyXV0pfXJldHVybiBufSxfX2RlY29yYXRlOmZ1bmN0aW9uIEtPKHQsZSxuLGkpe3ZhciByLG89YXJndW1lbnRzLmxlbmd0aCxhPW88Mz9lOm51bGw9PT1pP2k9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLG4pOmk7aWYoIm9iamVjdCI9PXR5cGVvZiBSZWZsZWN0JiYiZnVuY3Rpb24iPT10eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSlhPVJlZmxlY3QuZGVjb3JhdGUodCxlLG4saSk7ZWxzZSBmb3IodmFyIHM9dC5sZW5ndGgtMTtzPj0wO3MtLSkocj10W3NdKSYmKGE9KG88Mz9yKGEpOm8+Mz9yKGUsbixhKTpyKGUsbikpfHxhKTtyZXR1cm4gbz4zJiZhJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLGEpLGF9LF9fcGFyYW06ZnVuY3Rpb24gWk8odCxlKXtyZXR1cm4gZnVuY3Rpb24obixpKXtlKG4saSx0KX19LF9fbWV0YWRhdGE6ZnVuY3Rpb24gSk8odCxlKXtpZigib2JqZWN0Ij09dHlwZW9mIFJlZmxlY3QmJiJmdW5jdGlvbiI9PXR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhKXJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKHQsZSl9LF9fYXdhaXRlcjpmdW5jdGlvbiBRTyh0LGUsbixpKXtyZXR1cm4gbmV3KG58fChuPVByb21pc2UpKSgoZnVuY3Rpb24ocixvKXtmdW5jdGlvbiBhKHQpe3RyeXtsKGkubmV4dCh0KSl9Y2F0Y2godCl7byh0KX19ZnVuY3Rpb24gcyh0KXt0cnl7bChpLnRocm93KHQpKX1jYXRjaCh0KXtvKHQpfX1mdW5jdGlvbiBsKHQpe3QuZG9uZT9yKHQudmFsdWUpOm5ldyBuKChmdW5jdGlvbihlKXtlKHQudmFsdWUpfSkpLnRoZW4oYSxzKX1sKChpPWkuYXBwbHkodCxlfHxbXSkpLm5leHQoKSl9KSl9LF9fZ2VuZXJhdG9yOmZ1bmN0aW9uIHRSKHQsZSl7dmFyIG4saSxyLG8sYT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZyWzBdKXRocm93IHJbMV07cmV0dXJuIHJbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gbz17bmV4dDpzKDApLHRocm93OnMoMSkscmV0dXJuOnMoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihvW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLG87ZnVuY3Rpb24gcyhvKXtyZXR1cm4gZnVuY3Rpb24ocyl7cmV0dXJuKGZ1bmN0aW9uIGwobyl7aWYobil0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDthOyl0cnl7aWYobj0xLGkmJihyPWlbMiZvWzBdPyJyZXR1cm4iOm9bMF0/InRocm93IjoibmV4dCJdKSYmIShyPXIuY2FsbChpLG9bMV0pKS5kb25lKXJldHVybiByO3N3aXRjaChpPTAsciYmKG89WzAsci52YWx1ZV0pLG9bMF0pe2Nhc2UgMDpjYXNlIDE6cj1vO2JyZWFrO2Nhc2UgNDpyZXR1cm4gYS5sYWJlbCsrLHt2YWx1ZTpvWzFdLGRvbmU6ITF9O2Nhc2UgNTphLmxhYmVsKyssaT1vWzFdLG89WzBdO2NvbnRpbnVlO2Nhc2UgNzpvPWEub3BzLnBvcCgpLGEudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKHI9KHI9YS50cnlzKS5sZW5ndGg+MCYmcltyLmxlbmd0aC0xXSl8fDYhPT1vWzBdJiYyIT09b1swXSkpe2E9MDtjb250aW51ZX1pZigzPT09b1swXSYmKCFyfHxvWzFdPnJbMF0mJm9bMV08clszXSkpe2EubGFiZWw9b1sxXTticmVha31pZig2PT09b1swXSYmYS5sYWJlbDxyWzFdKXthLmxhYmVsPXJbMV0scj1vO2JyZWFrfWlmKHImJmEubGFiZWw8clsyXSl7YS5sYWJlbD1yWzJdLGEub3BzLnB1c2gobyk7YnJlYWt9clsyXSYmYS5vcHMucG9wKCksYS50cnlzLnBvcCgpO2NvbnRpbnVlfW89ZS5jYWxsKHQsYSl9Y2F0Y2godCl7bz1bNix0XSxpPTB9ZmluYWxseXtuPXI9MH1pZig1Jm9bMF0pdGhyb3cgb1sxXTtyZXR1cm57dmFsdWU6b1swXT9vWzFdOnZvaWQgMCxkb25lOiEwfX0pKFtvLHNdKX19fSxfX2V4cG9ydFN0YXI6ZnVuY3Rpb24gZVIodCxlKXtmb3IodmFyIG4gaW4gdCllLmhhc093blByb3BlcnR5KG4pfHwoZVtuXT10W25dKX0sX192YWx1ZXM6R08sX19yZWFkOldPLF9fc3ByZWFkOmZ1bmN0aW9uIG5SKCl7Zm9yKHZhciB0PVtdLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXQ9dC5jb25jYXQoV08oYXJndW1lbnRzW2VdKSk7cmV0dXJuIHR9LF9fYXdhaXQ6cU8sX19hc3luY0dlbmVyYXRvcjpmdW5jdGlvbiBpUih0LGUsbil7aWYoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKXRocm93IG5ldyBUeXBlRXJyb3IoIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpO3ZhciBpLHI9bi5hcHBseSh0LGV8fFtdKSxvPVtdO3JldHVybiBpPXt9LGEoIm5leHQiKSxhKCJ0aHJvdyIpLGEoInJldHVybiIpLGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGk7ZnVuY3Rpb24gYSh0KXtyW3RdJiYoaVt0XT1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKG4saSl7by5wdXNoKFt0LGUsbixpXSk+MXx8cyh0LGUpfSkpfSl9ZnVuY3Rpb24gcyh0LGUpe3RyeXshKGZ1bmN0aW9uIG4odCl7dC52YWx1ZSBpbnN0YW5jZW9mIHFPP1Byb21pc2UucmVzb2x2ZSh0LnZhbHVlLnYpLnRoZW4obCxjKTp1KG9bMF1bMl0sdCl9KShyW3RdKGUpKX1jYXRjaCh0KXt1KG9bMF1bM10sdCl9fWZ1bmN0aW9uIGwodCl7cygibmV4dCIsdCl9ZnVuY3Rpb24gYyh0KXtzKCJ0aHJvdyIsdCl9ZnVuY3Rpb24gdSh0LGUpe3QoZSksby5zaGlmdCgpLG8ubGVuZ3RoJiZzKG9bMF1bMF0sb1swXVsxXSl9fSxfX2FzeW5jRGVsZWdhdG9yOmZ1bmN0aW9uIHJSKHQpe3ZhciBlLG47cmV0dXJuIGU9e30saSgibmV4dCIpLGkoInRocm93IiwoZnVuY3Rpb24odCl7dGhyb3cgdH0pKSxpKCJyZXR1cm4iKSxlW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZTtmdW5jdGlvbiBpKGkscil7dFtpXSYmKGVbaV09ZnVuY3Rpb24oZSl7cmV0dXJuKG49IW4pP3t2YWx1ZTpxTyh0W2ldKGUpKSxkb25lOiJyZXR1cm4iPT09aX06cj9yKGUpOmV9KX19LF9fYXN5bmNWYWx1ZXM6ZnVuY3Rpb24gb1IodCl7aWYoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKXRocm93IG5ldyBUeXBlRXJyb3IoIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpO3ZhciBlPXRbU3ltYm9sLmFzeW5jSXRlcmF0b3JdO3JldHVybiBlP2UuY2FsbCh0KTpHTyh0KX0sX19tYWtlVGVtcGxhdGVPYmplY3Q6ZnVuY3Rpb24gYVIodCxlKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5P09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJyYXciLHt2YWx1ZTplfSk6dC5yYXc9ZSx0fX0pO2Z1bmN0aW9uIHNSKHQsZSl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTp0Pj1lPzA6TmFOfWZ1bmN0aW9uIGxSKHQpe3JldHVybiAxPT09dC5sZW5ndGgmJih0PShmdW5jdGlvbiBlKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3JldHVybiBzUih0KGUpLG4pfX0pKHQpKSx7bGVmdDpmdW5jdGlvbihlLG4saSxyKXtmb3IobnVsbD09aSYmKGk9MCksbnVsbD09ciYmKHI9ZS5sZW5ndGgpO2k8cjspe3ZhciBvPWkrcj4+PjE7dChlW29dLG4pPDA/aT1vKzE6cj1vfXJldHVybiBpfSxyaWdodDpmdW5jdGlvbihlLG4saSxyKXtmb3IobnVsbD09aSYmKGk9MCksbnVsbD09ciYmKHI9ZS5sZW5ndGgpO2k8cjspe3ZhciBvPWkrcj4+PjE7dChlW29dLG4pPjA/cj1vOmk9bysxfXJldHVybiBpfX19dmFyIGNSPWxSKHNSKSx1Uj1jUi5yaWdodCxoUj1jUi5sZWZ0O2Z1bmN0aW9uIGRSKHQsZSl7cmV0dXJuW3QsZV19ZnVuY3Rpb24gcFIodCl7cmV0dXJuIG51bGw9PT10P05hTjordH1mdW5jdGlvbiBmUih0LGUpe3ZhciBuLGkscj10Lmxlbmd0aCxvPTAsYT0tMSxzPTAsbD0wO2lmKG51bGw9PWUpZm9yKDsrK2E8cjspaXNOYU4obj1wUih0W2FdKSl8fChsKz0oaT1uLXMpKihuLShzKz1pLysrbykpKTtlbHNlIGZvcig7KythPHI7KWlzTmFOKG49cFIoZSh0W2FdLGEsdCkpKXx8KGwrPShpPW4tcykqKG4tKHMrPWkvKytvKSkpO2lmKG8+MSlyZXR1cm4gbC8oby0xKX1mdW5jdGlvbiBtUih0LGUpe3ZhciBuPWZSKHQsZSk7cmV0dXJuIG4/TWF0aC5zcXJ0KG4pOm59ZnVuY3Rpb24gZ1IodCxlKXt2YXIgbixpLHIsbz10Lmxlbmd0aCxhPS0xO2lmKG51bGw9PWUpe2Zvcig7KythPG87KWlmKG51bGwhPShuPXRbYV0pJiZuPj1uKWZvcihpPXI9bjsrK2E8bzspbnVsbCE9KG49dFthXSkmJihpPm4mJihpPW4pLHI8biYmKHI9bikpfWVsc2UgZm9yKDsrK2E8bzspaWYobnVsbCE9KG49ZSh0W2FdLGEsdCkpJiZuPj1uKWZvcihpPXI9bjsrK2E8bzspbnVsbCE9KG49ZSh0W2FdLGEsdCkpJiYoaT5uJiYoaT1uKSxyPG4mJihyPW4pKTtyZXR1cm5baSxyXX12YXIgX1I9QXJyYXkucHJvdG90eXBlLHlSPV9SLnNsaWNlLHZSPV9SLm1hcDtmdW5jdGlvbiBiUih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24geFIodCl7cmV0dXJuIHR9ZnVuY3Rpb24gd1IodCxlLG4pe3Q9K3QsZT0rZSxuPShyPWFyZ3VtZW50cy5sZW5ndGgpPDI/KGU9dCx0PTAsMSk6cjwzPzE6K247Zm9yKHZhciBpPS0xLHI9MHxNYXRoLm1heCgwLE1hdGguY2VpbCgoZS10KS9uKSksbz1uZXcgQXJyYXkocik7KytpPHI7KW9baV09dCtpKm47cmV0dXJuIG99dmFyIFNSPU1hdGguc3FydCg1MCksTVI9TWF0aC5zcXJ0KDEwKSxFUj1NYXRoLnNxcnQoMik7ZnVuY3Rpb24gVFIodCxlLG4pe3ZhciBpPShlLXQpL01hdGgubWF4KDAsbikscj1NYXRoLmZsb29yKE1hdGgubG9nKGkpL01hdGguTE4xMCksbz1pL01hdGgucG93KDEwLHIpO3JldHVybiByPj0wPyhvPj1TUj8xMDpvPj1NUj81Om8+PUVSPzI6MSkqTWF0aC5wb3coMTAscik6LU1hdGgucG93KDEwLC1yKS8obz49U1I/MTA6bz49TVI/NTpvPj1FUj8yOjEpfWZ1bmN0aW9uIENSKHQsZSxuKXt2YXIgaT1NYXRoLmFicyhlLXQpL01hdGgubWF4KDAsbikscj1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKGkpL01hdGguTE4xMCkpLG89aS9yO3JldHVybiBvPj1TUj9yKj0xMDpvPj1NUj9yKj01Om8+PUVSJiYocio9MiksZTx0Py1yOnJ9ZnVuY3Rpb24gQVIodCl7cmV0dXJuIE1hdGguY2VpbChNYXRoLmxvZyh0Lmxlbmd0aCkvTWF0aC5MTjIpKzF9ZnVuY3Rpb24ga1IodCxlLG4pe2lmKG51bGw9PW4mJihuPXBSKSxpPXQubGVuZ3RoKXtpZigoZT0rZSk8PTB8fGk8MilyZXR1cm4rbih0WzBdLDAsdCk7aWYoZT49MSlyZXR1cm4rbih0W2ktMV0saS0xLHQpO3ZhciBpLHI9KGktMSkqZSxvPU1hdGguZmxvb3IociksYT0rbih0W29dLG8sdCk7cmV0dXJuIGErKCtuKHRbbysxXSxvKzEsdCktYSkqKHItbyl9fWZ1bmN0aW9uIExSKHQsZSl7dmFyIG4saSxyPXQubGVuZ3RoLG89LTE7aWYobnVsbD09ZSl7Zm9yKDsrK288cjspaWYobnVsbCE9KG49dFtvXSkmJm4+PW4pZm9yKGk9bjsrK288cjspbnVsbCE9KG49dFtvXSkmJmk+biYmKGk9bil9ZWxzZSBmb3IoOysrbzxyOylpZihudWxsIT0obj1lKHRbb10sbyx0KSkmJm4+PW4pZm9yKGk9bjsrK288cjspbnVsbCE9KG49ZSh0W29dLG8sdCkpJiZpPm4mJihpPW4pO3JldHVybiBpfWZ1bmN0aW9uIFBSKHQpe2lmKCEocj10Lmxlbmd0aCkpcmV0dXJuW107Zm9yKHZhciBlPS0xLG49TFIodCxOUiksaT1uZXcgQXJyYXkobik7KytlPG47KWZvcih2YXIgcixvPS0xLGE9aVtlXT1uZXcgQXJyYXkocik7KytvPHI7KWFbb109dFtvXVtlXTtyZXR1cm4gaX1mdW5jdGlvbiBOUih0KXtyZXR1cm4gdC5sZW5ndGh9dmFyIElSPUFycmF5LnByb3RvdHlwZS5zbGljZTtmdW5jdGlvbiBPUih0KXtyZXR1cm4gdH12YXIgUlI9MWUtNjtmdW5jdGlvbiB6Uih0KXtyZXR1cm4idHJhbnNsYXRlKCIrKHQrLjUpKyIsMCkifWZ1bmN0aW9uIERSKHQpe3JldHVybiJ0cmFuc2xhdGUoMCwiKyh0Ky41KSsiKSJ9ZnVuY3Rpb24gQlIodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybit0KGUpfX1mdW5jdGlvbiBIUih0KXt2YXIgZT1NYXRoLm1heCgwLHQuYmFuZHdpZHRoKCktMSkvMjtyZXR1cm4gdC5yb3VuZCgpJiYoZT1NYXRoLnJvdW5kKGUpKSxmdW5jdGlvbihuKXtyZXR1cm4rdChuKStlfX1mdW5jdGlvbiBGUigpe3JldHVybiF0aGlzLl9fYXhpc31mdW5jdGlvbiBWUih0LGUpe3ZhciBuPVtdLGk9bnVsbCxyPW51bGwsbz02LGE9NixzPTMsbD0xPT09dHx8ND09PXQ/LTE6MSxjPTQ9PT10fHwyPT09dD8ieCI6InkiLHU9MT09PXR8fDM9PT10P3pSOkRSO2Z1bmN0aW9uIGgoaCl7dmFyIGQ9bnVsbD09aT9lLnRpY2tzP2UudGlja3MuYXBwbHkoZSxuKTplLmRvbWFpbigpOmkscD1udWxsPT1yP2UudGlja0Zvcm1hdD9lLnRpY2tGb3JtYXQuYXBwbHkoZSxuKTpPUjpyLGY9TWF0aC5tYXgobywwKStzLG09ZS5yYW5nZSgpLGc9K21bMF0rLjUsXz0rbVttLmxlbmd0aC0xXSsuNSx5PShlLmJhbmR3aWR0aD9IUjpCUikoZS5jb3B5KCkpLHY9aC5zZWxlY3Rpb24/aC5zZWxlY3Rpb24oKTpoLGI9di5zZWxlY3RBbGwoIi5kb21haW4iKS5kYXRhKFtudWxsXSkseD12LnNlbGVjdEFsbCgiLnRpY2siKS5kYXRhKGQsZSkub3JkZXIoKSx3PXguZXhpdCgpLFM9eC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidGljayIpLE09eC5zZWxlY3QoImxpbmUiKSxFPXguc2VsZWN0KCJ0ZXh0Iik7Yj1iLm1lcmdlKGIuZW50ZXIoKS5pbnNlcnQoInBhdGgiLCIudGljayIpLmF0dHIoImNsYXNzIiwiZG9tYWluIikuYXR0cigic3Ryb2tlIiwiIzAwMCIpKSx4PXgubWVyZ2UoUyksTT1NLm1lcmdlKFMuYXBwZW5kKCJsaW5lIikuYXR0cigic3Ryb2tlIiwiIzAwMCIpLmF0dHIoYysiMiIsbCpvKSksRT1FLm1lcmdlKFMuYXBwZW5kKCJ0ZXh0IikuYXR0cigiZmlsbCIsIiMwMDAiKS5hdHRyKGMsbCpmKS5hdHRyKCJkeSIsMT09PXQ/IjBlbSI6Mz09PXQ/IjAuNzFlbSI6IjAuMzJlbSIpKSxoIT09diYmKGI9Yi50cmFuc2l0aW9uKGgpLHg9eC50cmFuc2l0aW9uKGgpLE09TS50cmFuc2l0aW9uKGgpLEU9RS50cmFuc2l0aW9uKGgpLHc9dy50cmFuc2l0aW9uKGgpLmF0dHIoIm9wYWNpdHkiLFJSKS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXtyZXR1cm4gaXNGaW5pdGUodD15KHQpKT91KHQpOnRoaXMuZ2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iKX0pKSxTLmF0dHIoIm9wYWNpdHkiLFJSKS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXt2YXIgZT10aGlzLnBhcmVudE5vZGUuX19heGlzO3JldHVybiB1KGUmJmlzRmluaXRlKGU9ZSh0KSk/ZTp5KHQpKX0pKSksdy5yZW1vdmUoKSxiLmF0dHIoImQiLDQ9PT10fHwyPT10PyJNIitsKmErIiwiK2crIkgwLjVWIitfKyJIIitsKmE6Ik0iK2crIiwiK2wqYSsiVjAuNUgiK18rIlYiK2wqYSkseC5hdHRyKCJvcGFjaXR5IiwxKS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXtyZXR1cm4gdSh5KHQpKX0pKSxNLmF0dHIoYysiMiIsbCpvKSxFLmF0dHIoYyxsKmYpLnRleHQocCksdi5maWx0ZXIoRlIpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZm9udC1zaXplIiwxMCkuYXR0cigiZm9udC1mYW1pbHkiLCJzYW5zLXNlcmlmIikuYXR0cigidGV4dC1hbmNob3IiLDI9PT10PyJzdGFydCI6ND09PXQ/ImVuZCI6Im1pZGRsZSIpLHYuZWFjaCgoZnVuY3Rpb24oKXt0aGlzLl9fYXhpcz15fSkpfXJldHVybiBoLnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsaCk6ZX0saC50aWNrcz1mdW5jdGlvbigpe3JldHVybiBuPUlSLmNhbGwoYXJndW1lbnRzKSxofSxoLnRpY2tBcmd1bWVudHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49bnVsbD09dD9bXTpJUi5jYWxsKHQpLGgpOm4uc2xpY2UoKX0saC50aWNrVmFsdWVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PXQ/bnVsbDpJUi5jYWxsKHQpLGgpOmkmJmkuc2xpY2UoKX0saC50aWNrRm9ybWF0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsaCk6cn0saC50aWNrU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1hPSt0LGgpOm99LGgudGlja1NpemVJbm5lcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0rdCxoKTpvfSxoLnRpY2tTaXplT3V0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9K3QsaCk6YX0saC50aWNrUGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0rdCxoKTpzfSxofXZhciBVUj17dmFsdWU6ZnVuY3Rpb24oKXt9fTtmdW5jdGlvbiBqUigpe2Zvcih2YXIgdCxlPTAsbj1hcmd1bWVudHMubGVuZ3RoLGk9e307ZTxuOysrZSl7aWYoISh0PWFyZ3VtZW50c1tlXSsiIil8fHQgaW4gaXx8L1tccy5dLy50ZXN0KHQpKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK3QpO2lbdF09W119cmV0dXJuIG5ldyBHUihpKX1mdW5jdGlvbiBHUih0KXt0aGlzLl89dH1mdW5jdGlvbiBXUih0LGUpe3JldHVybiB0LnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBuPSIiLGk9dC5pbmRleE9mKCIuIik7aWYoaT49MCYmKG49dC5zbGljZShpKzEpLHQ9dC5zbGljZSgwLGkpKSx0JiYhZS5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtyZXR1cm57dHlwZTp0LG5hbWU6bn19KSl9ZnVuY3Rpb24gcVIodCxlKXtmb3IodmFyIG4saT0wLHI9dC5sZW5ndGg7aTxyOysraSlpZigobj10W2ldKS5uYW1lPT09ZSlyZXR1cm4gbi52YWx1ZX1mdW5jdGlvbiBZUih0LGUsbil7Zm9yKHZhciBpPTAscj10Lmxlbmd0aDtpPHI7KytpKWlmKHRbaV0ubmFtZT09PWUpe3RbaV09VVIsdD10LnNsaWNlKDAsaSkuY29uY2F0KHQuc2xpY2UoaSsxKSk7YnJlYWt9cmV0dXJuIG51bGwhPW4mJnQucHVzaCh7bmFtZTplLHZhbHVlOm59KSx0fUdSLnByb3RvdHlwZT1qUi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkdSLG9uOmZ1bmN0aW9uKHQsZSl7dmFyIG4saT10aGlzLl8scj1XUih0KyIiLGkpLG89LTEsYT1yLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2lmKG51bGwhPWUmJiJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjazogIitlKTtmb3IoOysrbzxhOylpZihuPSh0PXJbb10pLnR5cGUpaVtuXT1ZUihpW25dLHQubmFtZSxlKTtlbHNlIGlmKG51bGw9PWUpZm9yKG4gaW4gaSlpW25dPVlSKGlbbl0sdC5uYW1lLG51bGwpO3JldHVybiB0aGlzfWZvcig7KytvPGE7KWlmKChuPSh0PXJbb10pLnR5cGUpJiYobj1xUihpW25dLHQubmFtZSkpKXJldHVybiBufSxjb3B5OmZ1bmN0aW9uKCl7dmFyIHQ9e30sZT10aGlzLl87Zm9yKHZhciBuIGluIGUpdFtuXT1lW25dLnNsaWNlKCk7cmV0dXJuIG5ldyBHUih0KX0sY2FsbDpmdW5jdGlvbih0LGUpe2lmKChuPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIG4saSxyPW5ldyBBcnJheShuKSxvPTA7bzxuOysrbylyW29dPWFyZ3VtZW50c1tvKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7Zm9yKG89MCxuPShpPXRoaXMuX1t0XSkubGVuZ3RoO288bjsrK28paVtvXS52YWx1ZS5hcHBseShlLHIpfSxhcHBseTpmdW5jdGlvbih0LGUsbil7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtmb3IodmFyIGk9dGhpcy5fW3RdLHI9MCxvPWkubGVuZ3RoO3I8bzsrK3IpaVtyXS52YWx1ZS5hcHBseShlLG4pfX07dmFyIFhSPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwkUj17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6WFIseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifTtmdW5jdGlvbiBLUih0KXt2YXIgZT10Kz0iIixuPWUuaW5kZXhPZigiOiIpO3JldHVybiBuPj0wJiYieG1sbnMiIT09KGU9dC5zbGljZSgwLG4pKSYmKHQ9dC5zbGljZShuKzEpKSwkUi5oYXNPd25Qcm9wZXJ0eShlKT97c3BhY2U6JFJbZV0sbG9jYWw6dH06dH1mdW5jdGlvbiBaUih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLm93bmVyRG9jdW1lbnQsbj10aGlzLm5hbWVzcGFjZVVSSTtyZXR1cm4gbj09PVhSJiZlLmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkk9PT1YUj9lLmNyZWF0ZUVsZW1lbnQodCk6ZS5jcmVhdGVFbGVtZW50TlMobix0KX19ZnVuY3Rpb24gSlIodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlModC5zcGFjZSx0LmxvY2FsKX19ZnVuY3Rpb24gUVIodCl7dmFyIGU9S1IodCk7cmV0dXJuKGUubG9jYWw/SlI6WlIpKGUpfWZ1bmN0aW9uIHR6KCl7fWZ1bmN0aW9uIGV6KHQpe3JldHVybiBudWxsPT10P3R6OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3Rvcih0KX19ZnVuY3Rpb24gbnooKXtyZXR1cm5bXX1mdW5jdGlvbiBpeih0KXtyZXR1cm4gbnVsbD09dD9uejpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwodCl9fWZ1bmN0aW9uIHJ6KHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoZXModCl9fWZ1bmN0aW9uIG96KHQpe3JldHVybiBuZXcgQXJyYXkodC5sZW5ndGgpfWZ1bmN0aW9uIGF6KHQsZSl7dGhpcy5vd25lckRvY3VtZW50PXQub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST10Lm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PXQsdGhpcy5fX2RhdGFfXz1lfWZ1bmN0aW9uIHN6KHQsZSxuLGkscixvKXtmb3IodmFyIGEscz0wLGw9ZS5sZW5ndGgsYz1vLmxlbmd0aDtzPGM7KytzKShhPWVbc10pPyhhLl9fZGF0YV9fPW9bc10saVtzXT1hKTpuW3NdPW5ldyBheih0LG9bc10pO2Zvcig7czxsOysrcykoYT1lW3NdKSYmKHJbc109YSl9ZnVuY3Rpb24gbHoodCxlLG4saSxyLG8sYSl7dmFyIHMsbCxjLHU9e30saD1lLmxlbmd0aCxkPW8ubGVuZ3RoLHA9bmV3IEFycmF5KGgpO2ZvcihzPTA7czxoOysrcykobD1lW3NdKSYmKHBbc109Yz0iJCIrYS5jYWxsKGwsbC5fX2RhdGFfXyxzLGUpLGMgaW4gdT9yW3NdPWw6dVtjXT1sKTtmb3Iocz0wO3M8ZDsrK3MpKGw9dVtjPSIkIithLmNhbGwodCxvW3NdLHMsbyldKT8oaVtzXT1sLGwuX19kYXRhX189b1tzXSx1W2NdPW51bGwpOm5bc109bmV3IGF6KHQsb1tzXSk7Zm9yKHM9MDtzPGg7KytzKShsPWVbc10pJiZ1W3Bbc11dPT09bCYmKHJbc109bCl9ZnVuY3Rpb24gY3oodCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59ZnVuY3Rpb24gdXoodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9fWZ1bmN0aW9uIGh6KHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKX19ZnVuY3Rpb24gZHoodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZSh0LGUpfX1mdW5jdGlvbiBweih0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsLGUpfX1mdW5jdGlvbiBmeih0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PW4/dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCk6dGhpcy5zZXRBdHRyaWJ1dGUodCxuKX19ZnVuY3Rpb24gbXoodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1uP3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxuKX19ZnVuY3Rpb24gZ3oodCl7cmV0dXJuIHQub3duZXJEb2N1bWVudCYmdC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHx0LmRvY3VtZW50JiZ0fHx0LmRlZmF1bHRWaWV3fWZ1bmN0aW9uIF96KHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCl9fWZ1bmN0aW9uIHl6KHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQsZSxuKX19ZnVuY3Rpb24gdnoodCxlLG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciBpPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PWk/dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KTp0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQsaSxuKX19ZnVuY3Rpb24gYnoodCxlKXtyZXR1cm4gdC5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKGUpfHxneih0KS5nZXRDb21wdXRlZFN0eWxlKHQsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShlKX1mdW5jdGlvbiB4eih0KXtyZXR1cm4gZnVuY3Rpb24oKXtkZWxldGUgdGhpc1t0XX19ZnVuY3Rpb24gd3oodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzW3RdPWV9fWZ1bmN0aW9uIFN6KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09bj9kZWxldGUgdGhpc1t0XTp0aGlzW3RdPW59fWZ1bmN0aW9uIE16KHQpe3JldHVybiB0LnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiBFeih0KXtyZXR1cm4gdC5jbGFzc0xpc3R8fG5ldyBUeih0KX1mdW5jdGlvbiBUeih0KXt0aGlzLl9ub2RlPXQsdGhpcy5fbmFtZXM9TXoodC5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX1mdW5jdGlvbiBDeih0LGUpe2Zvcih2YXIgbj1Feih0KSxpPS0xLHI9ZS5sZW5ndGg7KytpPHI7KW4uYWRkKGVbaV0pfWZ1bmN0aW9uIEF6KHQsZSl7Zm9yKHZhciBuPUV6KHQpLGk9LTEscj1lLmxlbmd0aDsrK2k8cjspbi5yZW1vdmUoZVtpXSl9ZnVuY3Rpb24ga3oodCl7cmV0dXJuIGZ1bmN0aW9uKCl7Q3oodGhpcyx0KX19ZnVuY3Rpb24gTHoodCl7cmV0dXJuIGZ1bmN0aW9uKCl7QXoodGhpcyx0KX19ZnVuY3Rpb24gUHoodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXsoZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk/Q3o6QXopKHRoaXMsdCl9fWZ1bmN0aW9uIE56KCl7dGhpcy50ZXh0Q29udGVudD0iIn1mdW5jdGlvbiBJeih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PXR9fWZ1bmN0aW9uIE96KHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMudGV4dENvbnRlbnQ9bnVsbD09ZT8iIjplfX1mdW5jdGlvbiBSeigpe3RoaXMuaW5uZXJIVE1MPSIifWZ1bmN0aW9uIHp6KHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPXR9fWZ1bmN0aW9uIER6KHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPW51bGw9PWU/IiI6ZX19ZnVuY3Rpb24gQnooKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gSHooKXt0aGlzLnByZXZpb3VzU2libGluZyYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLHRoaXMucGFyZW50Tm9kZS5maXJzdENoaWxkKX1mdW5jdGlvbiBGeigpe3JldHVybiBudWxsfWZ1bmN0aW9uIFZ6KCl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlO3QmJnQucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gVXooKXt2YXIgdD10aGlzLmNsb25lTm9kZSghMSksZT10aGlzLnBhcmVudE5vZGU7cmV0dXJuIGU/ZS5pbnNlcnRCZWZvcmUodCx0aGlzLm5leHRTaWJsaW5nKTp0fWZ1bmN0aW9uIGp6KCl7dmFyIHQ9dGhpcy5jbG9uZU5vZGUoITApLGU9dGhpcy5wYXJlbnROb2RlO3JldHVybiBlP2UuaW5zZXJ0QmVmb3JlKHQsdGhpcy5uZXh0U2libGluZyk6dH1hei5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmF6LGFwcGVuZENoaWxkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKHQsdGhpcy5fbmV4dCl9LGluc2VydEJlZm9yZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKHQsZSl9LHF1ZXJ5U2VsZWN0b3I6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yKHQpfSxxdWVyeVNlbGVjdG9yQWxsOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvckFsbCh0KX19LFR6LnByb3RvdHlwZT17YWRkOmZ1bmN0aW9uKHQpe3RoaXMuX25hbWVzLmluZGV4T2YodCk8MCYmKHRoaXMuX25hbWVzLnB1c2godCksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0scmVtb3ZlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX25hbWVzLmluZGV4T2YodCk7ZT49MCYmKHRoaXMuX25hbWVzLnNwbGljZShlLDEpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LGNvbnRhaW5zOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKHQpPj0wfX07dmFyIEd6PXt9LFd6PW51bGw7ZnVuY3Rpb24gcXoodCxlLG4pe3JldHVybiB0PVl6KHQsZSxuKSxmdW5jdGlvbihlKXt2YXIgbj1lLnJlbGF0ZWRUYXJnZXQ7biYmKG49PT10aGlzfHw4Jm4uY29tcGFyZURvY3VtZW50UG9zaXRpb24odGhpcykpfHx0LmNhbGwodGhpcyxlKX19ZnVuY3Rpb24gWXoodCxlLG4pe3JldHVybiBmdW5jdGlvbihpKXt2YXIgcj1XejtXej1pO3RyeXt0LmNhbGwodGhpcyx0aGlzLl9fZGF0YV9fLGUsbil9ZmluYWxseXtXej1yfX19ZnVuY3Rpb24gWHoodCl7cmV0dXJuIHQudHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcCgoZnVuY3Rpb24odCl7dmFyIGU9IiIsbj10LmluZGV4T2YoIi4iKTtyZXR1cm4gbj49MCYmKGU9dC5zbGljZShuKzEpLHQ9dC5zbGljZSgwLG4pKSx7dHlwZTp0LG5hbWU6ZX19KSl9ZnVuY3Rpb24gJHoodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fX29uO2lmKGUpe2Zvcih2YXIgbixpPTAscj0tMSxvPWUubGVuZ3RoO2k8bzsrK2kpbj1lW2ldLHQudHlwZSYmbi50eXBlIT09dC50eXBlfHxuLm5hbWUhPT10Lm5hbWU/ZVsrK3JdPW46dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKG4udHlwZSxuLmxpc3RlbmVyLG4uY2FwdHVyZSk7KytyP2UubGVuZ3RoPXI6ZGVsZXRlIHRoaXMuX19vbn19fWZ1bmN0aW9uIEt6KHQsZSxuKXt2YXIgaT1Hei5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpP3F6Oll6O3JldHVybiBmdW5jdGlvbihyLG8sYSl7dmFyIHMsbD10aGlzLl9fb24sYz1pKGUsbyxhKTtpZihsKWZvcih2YXIgdT0wLGg9bC5sZW5ndGg7dTxoOysrdSlpZigocz1sW3VdKS50eXBlPT09dC50eXBlJiZzLm5hbWU9PT10Lm5hbWUpcmV0dXJuIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihzLnR5cGUscy5saXN0ZW5lcixzLmNhcHR1cmUpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihzLnR5cGUscy5saXN0ZW5lcj1jLHMuY2FwdHVyZT1uKSx2b2lkKHMudmFsdWU9ZSk7dGhpcy5hZGRFdmVudExpc3RlbmVyKHQudHlwZSxjLG4pLHM9e3R5cGU6dC50eXBlLG5hbWU6dC5uYW1lLHZhbHVlOmUsbGlzdGVuZXI6YyxjYXB0dXJlOm59LGw/bC5wdXNoKHMpOnRoaXMuX19vbj1bc119fWZ1bmN0aW9uIFp6KHQsZSxuKXt2YXIgaT1neih0KSxyPWkuQ3VzdG9tRXZlbnQ7ImZ1bmN0aW9uIj09dHlwZW9mIHI/cj1uZXcgcihlLG4pOihyPWkuZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50Iiksbj8oci5pbml0RXZlbnQoZSxuLmJ1YmJsZXMsbi5jYW5jZWxhYmxlKSxyLmRldGFpbD1uLmRldGFpbCk6ci5pbml0RXZlbnQoZSwhMSwhMSkpLHQuZGlzcGF0Y2hFdmVudChyKX1mdW5jdGlvbiBKeih0LGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBaeih0aGlzLHQsZSl9fWZ1bmN0aW9uIFF6KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFp6KHRoaXMsdCxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fSJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQmJigib25tb3VzZWVudGVyImluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudHx8KEd6PXttb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0In0pKTt2YXIgdEQ9W251bGxdO2Z1bmN0aW9uIGVEKHQsZSl7dGhpcy5fZ3JvdXBzPXQsdGhpcy5fcGFyZW50cz1lfWZ1bmN0aW9uIG5EKCl7cmV0dXJuIG5ldyBlRChbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLHREKX1mdW5jdGlvbiBpRCh0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/bmV3IGVEKFtbZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0KV1dLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgZUQoW1t0XV0sdEQpfWZ1bmN0aW9uIHJEKHQpe3ZhciBlPShmdW5jdGlvbiBuKCl7Zm9yKHZhciB0LGU9V3o7dD1lLnNvdXJjZUV2ZW50OyllPXQ7cmV0dXJuIGV9KSgpO3JldHVybiBlLmNoYW5nZWRUb3VjaGVzJiYoZT1lLmNoYW5nZWRUb3VjaGVzWzBdKSwoZnVuY3Rpb24gaSh0LGUpe3ZhciBuPXQub3duZXJTVkdFbGVtZW50fHx0O2lmKG4uY3JlYXRlU1ZHUG9pbnQpe3ZhciBpPW4uY3JlYXRlU1ZHUG9pbnQoKTtyZXR1cm4gaS54PWUuY2xpZW50WCxpLnk9ZS5jbGllbnRZLFsoaT1pLm1hdHJpeFRyYW5zZm9ybSh0LmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSkpLngsaS55XX12YXIgcj10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybltlLmNsaWVudFgtci5sZWZ0LXQuY2xpZW50TGVmdCxlLmNsaWVudFktci50b3AtdC5jbGllbnRUb3BdfSkodCxlKX1mdW5jdGlvbiBvRCgpe1d6LnByZXZlbnREZWZhdWx0KCksV3ouc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gYUQodCl7dmFyIGU9dC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsbj1pRCh0KS5vbigiZHJhZ3N0YXJ0LmRyYWciLG9ELCEwKTsib25zZWxlY3RzdGFydCJpbiBlP24ub24oInNlbGVjdHN0YXJ0LmRyYWciLG9ELCEwKTooZS5fX25vc2VsZWN0PWUuc3R5bGUuTW96VXNlclNlbGVjdCxlLnN0eWxlLk1velVzZXJTZWxlY3Q9Im5vbmUiKX1mdW5jdGlvbiBzRCh0LGUpe3ZhciBuPXQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGk9aUQodCkub24oImRyYWdzdGFydC5kcmFnIixudWxsKTtlJiYoaS5vbigiY2xpY2suZHJhZyIsb0QsITApLHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7aS5vbigiY2xpY2suZHJhZyIsbnVsbCl9KSwwKSksIm9uc2VsZWN0c3RhcnQiaW4gbj9pLm9uKCJzZWxlY3RzdGFydC5kcmFnIixudWxsKToobi5zdHlsZS5Nb3pVc2VyU2VsZWN0PW4uX19ub3NlbGVjdCxkZWxldGUgbi5fX25vc2VsZWN0KX1mdW5jdGlvbiBsRCh0LGUsbil7dC5wcm90b3R5cGU9ZS5wcm90b3R5cGU9bixuLmNvbnN0cnVjdG9yPXR9ZnVuY3Rpb24gY0QodCxlKXt2YXIgbj1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlKTtmb3IodmFyIGkgaW4gZSluW2ldPWVbaV07cmV0dXJuIG59ZnVuY3Rpb24gdUQoKXt9ZUQucHJvdG90eXBlPW5ELnByb3RvdHlwZT17Y29uc3RydWN0b3I6ZUQsc2VsZWN0OmZ1bmN0aW9uIGhEKHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1leih0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLGk9bmV3IEFycmF5KG4pLHI9MDtyPG47KytyKWZvcih2YXIgbyxhLHM9ZVtyXSxsPXMubGVuZ3RoLGM9aVtyXT1uZXcgQXJyYXkobCksdT0wO3U8bDsrK3UpKG89c1t1XSkmJihhPXQuY2FsbChvLG8uX19kYXRhX18sdSxzKSkmJigiX19kYXRhX18iaW4gbyYmKGEuX19kYXRhX189by5fX2RhdGFfXyksY1t1XT1hKTtyZXR1cm4gbmV3IGVEKGksdGhpcy5fcGFyZW50cyl9LHNlbGVjdEFsbDpmdW5jdGlvbiBkRCh0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9aXoodCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxpPVtdLHI9W10sbz0wO288bjsrK28pZm9yKHZhciBhLHM9ZVtvXSxsPXMubGVuZ3RoLGM9MDtjPGw7KytjKShhPXNbY10pJiYoaS5wdXNoKHQuY2FsbChhLGEuX19kYXRhX18sYyxzKSksci5wdXNoKGEpKTtyZXR1cm4gbmV3IGVEKGkscil9LGZpbHRlcjpmdW5jdGlvbiBwRCh0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9cnoodCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxpPW5ldyBBcnJheShuKSxyPTA7cjxuOysrcilmb3IodmFyIG8sYT1lW3JdLHM9YS5sZW5ndGgsbD1pW3JdPVtdLGM9MDtjPHM7KytjKShvPWFbY10pJiZ0LmNhbGwobyxvLl9fZGF0YV9fLGMsYSkmJmwucHVzaChvKTtyZXR1cm4gbmV3IGVEKGksdGhpcy5fcGFyZW50cyl9LGRhdGE6ZnVuY3Rpb24gZkQodCxlKXtpZighdClyZXR1cm4gZj1uZXcgQXJyYXkodGhpcy5zaXplKCkpLHU9LTEsdGhpcy5lYWNoKChmdW5jdGlvbih0KXtmWysrdV09dH0pKSxmO3ZhciBuPWU/bHo6c3osaT10aGlzLl9wYXJlbnRzLHI9dGhpcy5fZ3JvdXBzOyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD0oZnVuY3Rpb24gbyh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19KSh0KSk7Zm9yKHZhciBhPXIubGVuZ3RoLHM9bmV3IEFycmF5KGEpLGw9bmV3IEFycmF5KGEpLGM9bmV3IEFycmF5KGEpLHU9MDt1PGE7Kyt1KXt2YXIgaD1pW3VdLGQ9clt1XSxwPWQubGVuZ3RoLGY9dC5jYWxsKGgsaCYmaC5fX2RhdGFfXyx1LGkpLG09Zi5sZW5ndGgsZz1sW3VdPW5ldyBBcnJheShtKSxfPXNbdV09bmV3IEFycmF5KG0pO24oaCxkLGcsXyxjW3VdPW5ldyBBcnJheShwKSxmLGUpO2Zvcih2YXIgeSx2LGI9MCx4PTA7YjxtOysrYilpZih5PWdbYl0pe2ZvcihiPj14JiYoeD1iKzEpOyEodj1fW3hdKSYmKyt4PG07KTt5Ll9uZXh0PXZ8fG51bGx9fXJldHVybihzPW5ldyBlRChzLGkpKS5fZW50ZXI9bCxzLl9leGl0PWMsc30sZW50ZXI6ZnVuY3Rpb24gbUQoKXtyZXR1cm4gbmV3IGVEKHRoaXMuX2VudGVyfHx0aGlzLl9ncm91cHMubWFwKG96KSx0aGlzLl9wYXJlbnRzKX0sZXhpdDpmdW5jdGlvbiBnRCgpe3JldHVybiBuZXcgZUQodGhpcy5fZXhpdHx8dGhpcy5fZ3JvdXBzLm1hcChveiksdGhpcy5fcGFyZW50cyl9LGpvaW46ZnVuY3Rpb24gX0QodCxlLG4pe3ZhciBpPXRoaXMuZW50ZXIoKSxyPXRoaXMsbz10aGlzLmV4aXQoKTtyZXR1cm4gaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90KGkpOmkuYXBwZW5kKHQrIiIpLG51bGwhPWUmJihyPWUocikpLG51bGw9PW4/by5yZW1vdmUoKTpuKG8pLGkmJnI/aS5tZXJnZShyKS5vcmRlcigpOnJ9LG1lcmdlOmZ1bmN0aW9uIHlEKHQpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj10Ll9ncm91cHMsaT1lLmxlbmd0aCxyPU1hdGgubWluKGksbi5sZW5ndGgpLG89bmV3IEFycmF5KGkpLGE9MDthPHI7KythKWZvcih2YXIgcyxsPWVbYV0sYz1uW2FdLHU9bC5sZW5ndGgsaD1vW2FdPW5ldyBBcnJheSh1KSxkPTA7ZDx1OysrZCkocz1sW2RdfHxjW2RdKSYmKGhbZF09cyk7Zm9yKDthPGk7KythKW9bYV09ZVthXTtyZXR1cm4gbmV3IGVEKG8sdGhpcy5fcGFyZW50cyl9LG9yZGVyOmZ1bmN0aW9uIHZEKCl7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPS0xLG49dC5sZW5ndGg7KytlPG47KWZvcih2YXIgaSxyPXRbZV0sbz1yLmxlbmd0aC0xLGE9cltvXTstLW8+PTA7KShpPXJbb10pJiYoYSYmNF5pLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGEpJiZhLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGksYSksYT1pKTtyZXR1cm4gdGhpc30sc29ydDpmdW5jdGlvbiBiRCh0KXtmdW5jdGlvbiBlKGUsbil7cmV0dXJuIGUmJm4/dChlLl9fZGF0YV9fLG4uX19kYXRhX18pOiFlLSFufXR8fCh0PWN6KTtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLGk9bi5sZW5ndGgscj1uZXcgQXJyYXkoaSksbz0wO288aTsrK28pe2Zvcih2YXIgYSxzPW5bb10sbD1zLmxlbmd0aCxjPXJbb109bmV3IEFycmF5KGwpLHU9MDt1PGw7Kyt1KShhPXNbdV0pJiYoY1t1XT1hKTtjLnNvcnQoZSl9cmV0dXJuIG5ldyBlRChyLHRoaXMuX3BhcmVudHMpLm9yZGVyKCl9LGNhbGw6ZnVuY3Rpb24geEQoKXt2YXIgdD1hcmd1bWVudHNbMF07cmV0dXJuIGFyZ3VtZW50c1swXT10aGlzLHQuYXBwbHkobnVsbCxhcmd1bWVudHMpLHRoaXN9LG5vZGVzOmZ1bmN0aW9uIHdEKCl7dmFyIHQ9bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSxlPS0xO3JldHVybiB0aGlzLmVhY2goKGZ1bmN0aW9uKCl7dFsrK2VdPXRoaXN9KSksdH0sbm9kZTpmdW5jdGlvbiBTRCgpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT0wLG49dC5sZW5ndGg7ZTxuOysrZSlmb3IodmFyIGk9dFtlXSxyPTAsbz1pLmxlbmd0aDtyPG87KytyKXt2YXIgYT1pW3JdO2lmKGEpcmV0dXJuIGF9cmV0dXJuIG51bGx9LHNpemU6ZnVuY3Rpb24gTUQoKXt2YXIgdD0wO3JldHVybiB0aGlzLmVhY2goKGZ1bmN0aW9uKCl7Kyt0fSkpLHR9LGVtcHR5OmZ1bmN0aW9uIEVEKCl7cmV0dXJuIXRoaXMubm9kZSgpfSxlYWNoOmZ1bmN0aW9uIFREKHQpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj0wLGk9ZS5sZW5ndGg7bjxpOysrbilmb3IodmFyIHIsbz1lW25dLGE9MCxzPW8ubGVuZ3RoO2E8czsrK2EpKHI9b1thXSkmJnQuY2FsbChyLHIuX19kYXRhX18sYSxvKTtyZXR1cm4gdGhpc30sYXR0cjpmdW5jdGlvbiBDRCh0LGUpe3ZhciBuPUtSKHQpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIGk9dGhpcy5ub2RlKCk7cmV0dXJuIG4ubG9jYWw/aS5nZXRBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwpOmkuZ2V0QXR0cmlidXRlKG4pfXJldHVybiB0aGlzLmVhY2goKG51bGw9PWU/bi5sb2NhbD9oejp1ejoiZnVuY3Rpb24iPT10eXBlb2YgZT9uLmxvY2FsP216OmZ6Om4ubG9jYWw/cHo6ZHopKG4sZSkpfSxzdHlsZTpmdW5jdGlvbiBBRCh0LGUsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PWU/X3o6ImZ1bmN0aW9uIj09dHlwZW9mIGU/dno6eXopKHQsZSxudWxsPT1uPyIiOm4pKTpieih0aGlzLm5vZGUoKSx0KX0scHJvcGVydHk6ZnVuY3Rpb24ga0QodCxlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgobnVsbD09ZT94ejoiZnVuY3Rpb24iPT10eXBlb2YgZT9Tejp3eikodCxlKSk6dGhpcy5ub2RlKClbdF19LGNsYXNzZWQ6ZnVuY3Rpb24gTEQodCxlKXt2YXIgbj1Neih0KyIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgaT1Feih0aGlzLm5vZGUoKSkscj0tMSxvPW4ubGVuZ3RoOysrcjxvOylpZighaS5jb250YWlucyhuW3JdKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gdGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgZT9QejplP2t6Okx6KShuLGUpKX0sdGV4dDpmdW5jdGlvbiBQRCh0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2gobnVsbD09dD9OejooImZ1bmN0aW9uIj09dHlwZW9mIHQ/T3o6SXopKHQpKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH0saHRtbDpmdW5jdGlvbiBORCh0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2gobnVsbD09dD9SejooImZ1bmN0aW9uIj09dHlwZW9mIHQ/RHo6enopKHQpKTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9LHJhaXNlOmZ1bmN0aW9uIElEKCl7cmV0dXJuIHRoaXMuZWFjaChCeil9LGxvd2VyOmZ1bmN0aW9uIE9EKCl7cmV0dXJuIHRoaXMuZWFjaChIeil9LGFwcGVuZDpmdW5jdGlvbiBSRCh0KXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlFSKHQpO3JldHVybiB0aGlzLnNlbGVjdCgoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZChlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KSl9LGluc2VydDpmdW5jdGlvbiB6RCh0LGUpe3ZhciBuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6UVIodCksaT1udWxsPT1lP0Z6OiJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6ZXooZSk7cmV0dXJuIHRoaXMuc2VsZWN0KChmdW5jdGlvbigpe3JldHVybiB0aGlzLmluc2VydEJlZm9yZShuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxpLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8bnVsbCl9KSl9LHJlbW92ZTpmdW5jdGlvbiBERCgpe3JldHVybiB0aGlzLmVhY2goVnopfSxjbG9uZTpmdW5jdGlvbiBCRCh0KXtyZXR1cm4gdGhpcy5zZWxlY3QodD9qejpVeil9LGRhdHVtOmZ1bmN0aW9uIEhEKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIix0KTp0aGlzLm5vZGUoKS5fX2RhdGFfX30sb246ZnVuY3Rpb24gRkQodCxlLG4pe3ZhciBpLHIsbz1Yeih0KyIiKSxhPW8ubGVuZ3RoO2lmKCEoYXJndW1lbnRzLmxlbmd0aDwyKSl7Zm9yKHM9ZT9LejokeixudWxsPT1uJiYobj0hMSksaT0wO2k8YTsrK2kpdGhpcy5lYWNoKHMob1tpXSxlLG4pKTtyZXR1cm4gdGhpc312YXIgcz10aGlzLm5vZGUoKS5fX29uO2lmKHMpZm9yKHZhciBsLGM9MCx1PXMubGVuZ3RoO2M8dTsrK2MpZm9yKGk9MCxsPXNbY107aTxhOysraSlpZigocj1vW2ldKS50eXBlPT09bC50eXBlJiZyLm5hbWU9PT1sLm5hbWUpcmV0dXJuIGwudmFsdWV9LGRpc3BhdGNoOmZ1bmN0aW9uIFZEKHQsZSl7cmV0dXJuIHRoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIGU/UXo6SnopKHQsZSkpfX07dmFyIFVEPS43LGpEPTEvVUQsR0Q9IlxccyooWystXT9cXGQrKVxccyoiLFdEPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLHFEPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIixZRD0vXiMoWzAtOWEtZl17Myw4fSkkLyxYRD1uZXcgUmVnRXhwKCJecmdiXFwoIitbR0QsR0QsR0RdKyJcXCkkIiksJEQ9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW3FELHFELHFEXSsiXFwpJCIpLEtEPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbR0QsR0QsR0QsV0RdKyJcXCkkIiksWkQ9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1txRCxxRCxxRCxXRF0rIlxcKSQiKSxKRD1uZXcgUmVnRXhwKCJeaHNsXFwoIitbV0QscUQscURdKyJcXCkkIiksUUQ9bmV3IFJlZ0V4cCgiXmhzbGFcXCgiK1tXRCxxRCxxRCxXRF0rIlxcKSQiKSx0Qj17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtmdW5jdGlvbiBlQigpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleCgpfWZ1bmN0aW9uIG5CKCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCl9ZnVuY3Rpb24gaUIodCl7dmFyIGUsbjtyZXR1cm4gdD0odCsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKGU9WUQuZXhlYyh0KSk/KG49ZVsxXS5sZW5ndGgsZT1wYXJzZUludChlWzFdLDE2KSw2PT09bj9yQihlKTozPT09bj9uZXcgbEIoZT4+OCYxNXxlPj40JjI0MCxlPj40JjE1fDI0MCZlLCgxNSZlKTw8NHwxNSZlLDEpOjg9PT1uP29CKGU+PjI0JjI1NSxlPj4xNiYyNTUsZT4+OCYyNTUsKDI1NSZlKS8yNTUpOjQ9PT1uP29CKGU+PjEyJjE1fGU+PjgmMjQwLGU+PjgmMTV8ZT4+NCYyNDAsZT4+NCYxNXwyNDAmZSwoKDE1JmUpPDw0fDE1JmUpLzI1NSk6bnVsbCk6KGU9WEQuZXhlYyh0KSk/bmV3IGxCKGVbMV0sZVsyXSxlWzNdLDEpOihlPSRELmV4ZWModCkpP25ldyBsQigyNTUqZVsxXS8xMDAsMjU1KmVbMl0vMTAwLDI1NSplWzNdLzEwMCwxKTooZT1LRC5leGVjKHQpKT9vQihlWzFdLGVbMl0sZVszXSxlWzRdKTooZT1aRC5leGVjKHQpKT9vQigyNTUqZVsxXS8xMDAsMjU1KmVbMl0vMTAwLDI1NSplWzNdLzEwMCxlWzRdKTooZT1KRC5leGVjKHQpKT9kQihlWzFdLGVbMl0vMTAwLGVbM10vMTAwLDEpOihlPVFELmV4ZWModCkpP2RCKGVbMV0sZVsyXS8xMDAsZVszXS8xMDAsZVs0XSk6dEIuaGFzT3duUHJvcGVydHkodCk/ckIodEJbdF0pOiJ0cmFuc3BhcmVudCI9PT10P25ldyBsQihOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIHJCKHQpe3JldHVybiBuZXcgbEIodD4+MTYmMjU1LHQ+PjgmMjU1LDI1NSZ0LDEpfWZ1bmN0aW9uIG9CKHQsZSxuLGkpe3JldHVybiBpPD0wJiYodD1lPW49TmFOKSxuZXcgbEIodCxlLG4saSl9ZnVuY3Rpb24gYUIodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB1RHx8KHQ9aUIodCkpLHQ/bmV3IGxCKCh0PXQucmdiKCkpLnIsdC5nLHQuYix0Lm9wYWNpdHkpOm5ldyBsQn1mdW5jdGlvbiBzQih0LGUsbixpKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/YUIodCk6bmV3IGxCKHQsZSxuLG51bGw9PWk/MTppKX1mdW5jdGlvbiBsQih0LGUsbixpKXt0aGlzLnI9K3QsdGhpcy5nPStlLHRoaXMuYj0rbix0aGlzLm9wYWNpdHk9K2l9ZnVuY3Rpb24gY0IoKXtyZXR1cm4iIyIraEIodGhpcy5yKStoQih0aGlzLmcpK2hCKHRoaXMuYil9ZnVuY3Rpb24gdUIoKXt2YXIgdD10aGlzLm9wYWNpdHk7cmV0dXJuKDE9PT0odD1pc05hTih0KT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSkpPyJyZ2IoIjoicmdiYSgiKStNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMucil8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKDE9PT10PyIpIjoiLCAiK3QrIikiKX1mdW5jdGlvbiBoQih0KXtyZXR1cm4oKHQ9TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0KXx8MCkpKTwxNj8iMCI6IiIpK3QudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIGRCKHQsZSxuLGkpe3JldHVybiBpPD0wP3Q9ZT1uPU5hTjpuPD0wfHxuPj0xP3Q9ZT1OYU46ZTw9MCYmKHQ9TmFOKSxuZXcgZkIodCxlLG4saSl9ZnVuY3Rpb24gcEIodCl7aWYodCBpbnN0YW5jZW9mIGZCKXJldHVybiBuZXcgZkIodC5oLHQucyx0LmwsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgdUR8fCh0PWlCKHQpKSwhdClyZXR1cm4gbmV3IGZCO2lmKHQgaW5zdGFuY2VvZiBmQilyZXR1cm4gdDt2YXIgZT0odD10LnJnYigpKS5yLzI1NSxuPXQuZy8yNTUsaT10LmIvMjU1LHI9TWF0aC5taW4oZSxuLGkpLG89TWF0aC5tYXgoZSxuLGkpLGE9TmFOLHM9by1yLGw9KG8rcikvMjtyZXR1cm4gcz8oYT1lPT09bz8obi1pKS9zKzYqKG48aSk6bj09PW8/KGktZSkvcysyOihlLW4pL3MrNCxzLz1sPC41P28rcjoyLW8tcixhKj02MCk6cz1sPjAmJmw8MT8wOmEsbmV3IGZCKGEscyxsLHQub3BhY2l0eSl9ZnVuY3Rpb24gZkIodCxlLG4saSl7dGhpcy5oPSt0LHRoaXMucz0rZSx0aGlzLmw9K24sdGhpcy5vcGFjaXR5PStpfWZ1bmN0aW9uIG1CKHQsZSxuKXtyZXR1cm4gMjU1Kih0PDYwP2UrKG4tZSkqdC82MDp0PDE4MD9uOnQ8MjQwP2UrKG4tZSkqKDI0MC10KS82MDplKX1mdW5jdGlvbiBnQih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gX0IodCxlKXt2YXIgbj1lLXQ7cmV0dXJuIG4/KGZ1bmN0aW9uIGkodCxlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHQrbiplfX0pKHQsbik6Z0IoaXNOYU4odCk/ZTp0KX1sRCh1RCxpQix7Y29weTpmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgdGhpcy5jb25zdHJ1Y3Rvcix0aGlzLHQpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LGhleDplQixmb3JtYXRIZXg6ZUIsZm9ybWF0SHNsOmZ1bmN0aW9uIHlCKCl7cmV0dXJuIHBCKHRoaXMpLmZvcm1hdEhzbCgpfSxmb3JtYXRSZ2I6bkIsdG9TdHJpbmc6bkJ9KSxsRChsQixzQixjRCh1RCx7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD9qRDpNYXRoLnBvdyhqRCx0KSxuZXcgbEIodGhpcy5yKnQsdGhpcy5nKnQsdGhpcy5iKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/VUQ6TWF0aC5wb3coVUQsdCksbmV3IGxCKHRoaXMucip0LHRoaXMuZyp0LHRoaXMuYip0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybi0uNTw9dGhpcy5yJiZ0aGlzLnI8MjU1LjUmJi0uNTw9dGhpcy5nJiZ0aGlzLmc8MjU1LjUmJi0uNTw9dGhpcy5iJiZ0aGlzLmI8MjU1LjUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6Y0IsZm9ybWF0SGV4OmNCLGZvcm1hdFJnYjp1Qix0b1N0cmluZzp1Qn0pKSxsRChmQiwoZnVuY3Rpb24gdkIodCxlLG4saSl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3BCKHQpOm5ldyBmQih0LGUsbixudWxsPT1pPzE6aSl9KSxjRCh1RCx7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD9qRDpNYXRoLnBvdyhqRCx0KSxuZXcgZkIodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD9VRDpNYXRoLnBvdyhVRCx0KSxuZXcgZkIodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmglMzYwKzM2MCoodGhpcy5oPDApLGU9aXNOYU4odCl8fGlzTmFOKHRoaXMucyk/MDp0aGlzLnMsbj10aGlzLmwsaT1uKyhuPC41P246MS1uKSplLHI9MipuLWk7cmV0dXJuIG5ldyBsQihtQih0Pj0yNDA/dC0yNDA6dCsxMjAscixpKSxtQih0LHIsaSksbUIodDwxMjA/dCsyNDA6dC0xMjAscixpKSx0aGlzLm9wYWNpdHkpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybigwPD10aGlzLnMmJnRoaXMuczw9MXx8aXNOYU4odGhpcy5zKSkmJjA8PXRoaXMubCYmdGhpcy5sPD0xJiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0sZm9ybWF0SHNsOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcGFjaXR5O3JldHVybigxPT09KHQ9aXNOYU4odCk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsdCkpKT8iaHNsKCI6ImhzbGEoIikrKHRoaXMuaHx8MCkrIiwgIisxMDAqKHRoaXMuc3x8MCkrIiUsICIrMTAwKih0aGlzLmx8fDApKyIlIisoMT09PXQ/IikiOiIsICIrdCsiKSIpfX0pKTt2YXIgYkI9KGZ1bmN0aW9uIHQoZSl7dmFyIG49KGZ1bmN0aW9uIGkodCl7cmV0dXJuIDE9PSh0PSt0KT9fQjpmdW5jdGlvbihlLG4pe3JldHVybiBuLWU/KGZ1bmN0aW9uIGkodCxlLG4pe3JldHVybiB0PU1hdGgucG93KHQsbiksZT1NYXRoLnBvdyhlLG4pLXQsbj0xL24sZnVuY3Rpb24oaSl7cmV0dXJuIE1hdGgucG93KHQraSplLG4pfX0pKGUsbix0KTpnQihpc05hTihlKT9uOmUpfX0pKGUpO2Z1bmN0aW9uIHIodCxlKXt2YXIgaT1uKCh0PXNCKHQpKS5yLChlPXNCKGUpKS5yKSxyPW4odC5nLGUuZyksbz1uKHQuYixlLmIpLGE9X0IodC5vcGFjaXR5LGUub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0LnI9aShlKSx0Lmc9cihlKSx0LmI9byhlKSx0Lm9wYWNpdHk9YShlKSx0KyIifX1yZXR1cm4gci5nYW1tYT10LHJ9KSgxKTtmdW5jdGlvbiB4Qih0LGUpe2V8fChlPVtdKTt2YXIgbixpPXQ/TWF0aC5taW4oZS5sZW5ndGgsdC5sZW5ndGgpOjAscj1lLnNsaWNlKCk7cmV0dXJuIGZ1bmN0aW9uKG8pe2ZvcihuPTA7bjxpOysrbilyW25dPXRbbl0qKDEtbykrZVtuXSpvO3JldHVybiByfX1mdW5jdGlvbiB3Qih0LGUpe3ZhciBuLGk9ZT9lLmxlbmd0aDowLHI9dD9NYXRoLm1pbihpLHQubGVuZ3RoKTowLG89bmV3IEFycmF5KHIpLGE9bmV3IEFycmF5KGkpO2ZvcihuPTA7bjxyOysrbilvW25dPWtCKHRbbl0sZVtuXSk7Zm9yKDtuPGk7KytuKWFbbl09ZVtuXTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKG49MDtuPHI7KytuKWFbbl09b1tuXSh0KTtyZXR1cm4gYX19ZnVuY3Rpb24gU0IodCxlKXt2YXIgbj1uZXcgRGF0ZTtyZXR1cm4gdD0rdCxlPStlLGZ1bmN0aW9uKGkpe3JldHVybiBuLnNldFRpbWUodCooMS1pKStlKmkpLG59fWZ1bmN0aW9uIE1CKHQsZSl7cmV0dXJuIHQ9K3QsZT0rZSxmdW5jdGlvbihuKXtyZXR1cm4gdCooMS1uKStlKm59fWZ1bmN0aW9uIEVCKHQsZSl7dmFyIG4saT17fSxyPXt9O2ZvcihuIGluIG51bGwhPT10JiYib2JqZWN0Ij09dHlwZW9mIHR8fCh0PXt9KSxudWxsIT09ZSYmIm9iamVjdCI9PXR5cGVvZiBlfHwoZT17fSksZSluIGluIHQ/aVtuXT1rQih0W25dLGVbbl0pOnJbbl09ZVtuXTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKG4gaW4gaSlyW25dPWlbbl0odCk7cmV0dXJuIHJ9fXZhciBUQj0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2csQ0I9bmV3IFJlZ0V4cChUQi5zb3VyY2UsImciKTtmdW5jdGlvbiBBQih0LGUpe3ZhciBuLGkscixvPVRCLmxhc3RJbmRleD1DQi5sYXN0SW5kZXg9MCxhPS0xLHM9W10sbD1bXTtmb3IodCs9IiIsZSs9IiI7KG49VEIuZXhlYyh0KSkmJihpPUNCLmV4ZWMoZSkpOykocj1pLmluZGV4KT5vJiYocj1lLnNsaWNlKG8sciksc1thXT9zW2FdKz1yOnNbKythXT1yKSwobj1uWzBdKT09PShpPWlbMF0pP3NbYV0/c1thXSs9aTpzWysrYV09aTooc1srK2FdPW51bGwsbC5wdXNoKHtpOmEseDpNQihuLGkpfSkpLG89Q0IubGFzdEluZGV4O3JldHVybiBvPGUubGVuZ3RoJiYocj1lLnNsaWNlKG8pLHNbYV0/c1thXSs9cjpzWysrYV09cikscy5sZW5ndGg8Mj9sWzBdPyhmdW5jdGlvbiBjKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdChlKSsiIn19KShsWzBdLngpOihmdW5jdGlvbiB1KHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0pKGUpOihlPWwubGVuZ3RoLGZ1bmN0aW9uKHQpe2Zvcih2YXIgbixpPTA7aTxlOysraSlzWyhuPWxbaV0pLmldPW4ueCh0KTtyZXR1cm4gcy5qb2luKCIiKX0pfWZ1bmN0aW9uIGtCKHQsZSl7dmFyIG4saT10eXBlb2YgZTtyZXR1cm4gbnVsbD09ZXx8ImJvb2xlYW4iPT09aT9nQihlKTooIm51bWJlciI9PT1pP01COiJzdHJpbmciPT09aT8obj1pQihlKSk/KGU9bixiQik6QUI6ZSBpbnN0YW5jZW9mIGlCP2JCOmUgaW5zdGFuY2VvZiBEYXRlP1NCOihmdW5jdGlvbiByKHQpe3JldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcodCkmJiEodCBpbnN0YW5jZW9mIERhdGFWaWV3KX0pKGUpP3hCOkFycmF5LmlzQXJyYXkoZSk/d0I6ImZ1bmN0aW9uIiE9dHlwZW9mIGUudmFsdWVPZiYmImZ1bmN0aW9uIiE9dHlwZW9mIGUudG9TdHJpbmd8fGlzTmFOKGUpP0VCOk1CKSh0LGUpfXZhciBMQixQQixOQixJQixPQj0xODAvTWF0aC5QSSxSQj17dHJhbnNsYXRlWDowLHRyYW5zbGF0ZVk6MCxyb3RhdGU6MCxza2V3WDowLHNjYWxlWDoxLHNjYWxlWToxfTtmdW5jdGlvbiB6Qih0LGUsbixpLHIsbyl7dmFyIGEscyxsO3JldHVybihhPU1hdGguc3FydCh0KnQrZSplKSkmJih0Lz1hLGUvPWEpLChsPXQqbitlKmkpJiYobi09dCpsLGktPWUqbCksKHM9TWF0aC5zcXJ0KG4qbitpKmkpKSYmKG4vPXMsaS89cyxsLz1zKSx0Kmk8ZSpuJiYodD0tdCxlPS1lLGw9LWwsYT0tYSkse3RyYW5zbGF0ZVg6cix0cmFuc2xhdGVZOm8scm90YXRlOk1hdGguYXRhbjIoZSx0KSpPQixza2V3WDpNYXRoLmF0YW4obCkqT0Isc2NhbGVYOmEsc2NhbGVZOnN9fWZ1bmN0aW9uIERCKHQsZSxuLGkpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIHQubGVuZ3RoP3QucG9wKCkrIiAiOiIifXJldHVybiBmdW5jdGlvbihvLGEpe3ZhciBzPVtdLGw9W107cmV0dXJuIG89dChvKSxhPXQoYSksKGZ1bmN0aW9uIGModCxpLHIsbyxhLHMpe2lmKHQhPT1yfHxpIT09byl7dmFyIGw9YS5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLGUsbnVsbCxuKTtzLnB1c2goe2k6bC00LHg6TUIodCxyKX0se2k6bC0yLHg6TUIoaSxvKX0pfWVsc2Uocnx8bykmJmEucHVzaCgidHJhbnNsYXRlKCIrcitlK28rbil9KShvLnRyYW5zbGF0ZVgsby50cmFuc2xhdGVZLGEudHJhbnNsYXRlWCxhLnRyYW5zbGF0ZVkscyxsKSwoZnVuY3Rpb24gdSh0LGUsbixvKXt0IT09ZT8odC1lPjE4MD9lKz0zNjA6ZS10PjE4MCYmKHQrPTM2MCksby5wdXNoKHtpOm4ucHVzaChyKG4pKyJyb3RhdGUoIixudWxsLGkpLTIseDpNQih0LGUpfSkpOmUmJm4ucHVzaChyKG4pKyJyb3RhdGUoIitlK2kpfSkoby5yb3RhdGUsYS5yb3RhdGUscyxsKSwoZnVuY3Rpb24gaCh0LGUsbixvKXt0IT09ZT9vLnB1c2goe2k6bi5wdXNoKHIobikrInNrZXdYKCIsbnVsbCxpKS0yLHg6TUIodCxlKX0pOmUmJm4ucHVzaChyKG4pKyJza2V3WCgiK2UraSl9KShvLnNrZXdYLGEuc2tld1gscyxsKSwoZnVuY3Rpb24gZCh0LGUsbixpLG8sYSl7aWYodCE9PW58fGUhPT1pKXt2YXIgcz1vLnB1c2gocihvKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7YS5wdXNoKHtpOnMtNCx4Ok1CKHQsbil9LHtpOnMtMix4Ok1CKGUsaSl9KX1lbHNlIDE9PT1uJiYxPT09aXx8by5wdXNoKHIobykrInNjYWxlKCIrbisiLCIraSsiKSIpfSkoby5zY2FsZVgsby5zY2FsZVksYS5zY2FsZVgsYS5zY2FsZVkscyxsKSxvPWE9bnVsbCxmdW5jdGlvbih0KXtmb3IodmFyIGUsbj0tMSxpPWwubGVuZ3RoOysrbjxpOylzWyhlPWxbbl0pLmldPWUueCh0KTtyZXR1cm4gcy5qb2luKCIiKX19fXZhciBCQixIQixGQj1EQigoZnVuY3Rpb24gVkIodCl7cmV0dXJuIm5vbmUiPT09dD9SQjooTEJ8fChMQj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSxQQj1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsTkI9ZG9jdW1lbnQuZGVmYXVsdFZpZXcpLExCLnN0eWxlLnRyYW5zZm9ybT10LHQ9TkIuZ2V0Q29tcHV0ZWRTdHlsZShQQi5hcHBlbmRDaGlsZChMQiksbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgidHJhbnNmb3JtIiksUEIucmVtb3ZlQ2hpbGQoTEIpLHpCKCsodD10LnNsaWNlKDcsLTEpLnNwbGl0KCIsIikpWzBdLCt0WzFdLCt0WzJdLCt0WzNdLCt0WzRdLCt0WzVdKSl9KSwicHgsICIsInB4KSIsImRlZykiKSxVQj1EQigoZnVuY3Rpb24gakIodCl7cmV0dXJuIG51bGw9PXQ/UkI6KElCfHwoSUI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKSksSUIuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLHQpLCh0PUlCLnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkpP3pCKCh0PXQubWF0cml4KS5hLHQuYix0LmMsdC5kLHQuZSx0LmYpOlJCKX0pLCIsICIsIikiLCIpIiksR0I9MCxXQj0wLHFCPTAsWUI9MCxYQj0wLCRCPTAsS0I9Im9iamVjdCI9PXR5cGVvZiBwZXJmb3JtYW5jZSYmcGVyZm9ybWFuY2Uubm93P3BlcmZvcm1hbmNlOkRhdGUsWkI9Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6ZnVuY3Rpb24odCl7c2V0VGltZW91dCh0LDE3KX07ZnVuY3Rpb24gSkIoKXtyZXR1cm4gWEJ8fChaQihRQiksWEI9S0Iubm93KCkrJEIpfWZ1bmN0aW9uIFFCKCl7WEI9MH1mdW5jdGlvbiB0SCgpe3RoaXMuX2NhbGw9dGhpcy5fdGltZT10aGlzLl9uZXh0PW51bGx9ZnVuY3Rpb24gZUgodCxlLG4pe3ZhciBpPW5ldyB0SDtyZXR1cm4gaS5yZXN0YXJ0KHQsZSxuKSxpfWZ1bmN0aW9uIG5IKCl7WEI9KFlCPUtCLm5vdygpKSskQixHQj1XQj0wO3RyeXshKGZ1bmN0aW9uIHQoKXtKQigpLCsrR0I7Zm9yKHZhciB0LGU9QkI7ZTspKHQ9WEItZS5fdGltZSk+PTAmJmUuX2NhbGwuY2FsbChudWxsLHQpLGU9ZS5fbmV4dDstLUdCfSkoKX1maW5hbGx5e0dCPTAsKGZ1bmN0aW9uIGUoKXtmb3IodmFyIHQsZSxuPUJCLGk9MS8wO247KW4uX2NhbGw/KGk+bi5fdGltZSYmKGk9bi5fdGltZSksdD1uLG49bi5fbmV4dCk6KGU9bi5fbmV4dCxuLl9uZXh0PW51bGwsbj10P3QuX25leHQ9ZTpCQj1lKTtIQj10LHJIKGkpfSkoKSxYQj0wfX1mdW5jdGlvbiBpSCgpe3ZhciB0PUtCLm5vdygpLGU9dC1ZQjtlPjFlMyYmKCRCLT1lLFlCPXQpfWZ1bmN0aW9uIHJIKHQpe0dCfHwoV0ImJihXQj1jbGVhclRpbWVvdXQoV0IpKSx0LVhCPjI0Pyh0PDEvMCYmKFdCPXNldFRpbWVvdXQobkgsdC1LQi5ub3coKS0kQikpLHFCJiYocUI9Y2xlYXJJbnRlcnZhbChxQikpKToocUJ8fChZQj1LQi5ub3coKSxxQj1zZXRJbnRlcnZhbChpSCwxZTMpKSxHQj0xLFpCKG5IKSkpfWZ1bmN0aW9uIG9IKHQsZSxuKXt2YXIgaT1uZXcgdEg7cmV0dXJuIGkucmVzdGFydCgoZnVuY3Rpb24obil7aS5zdG9wKCksdChuK2UpfSksZT1udWxsPT1lPzA6K2UsbiksaX10SC5wcm90b3R5cGU9ZUgucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp0SCxyZXN0YXJ0OmZ1bmN0aW9uKHQsZSxuKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiIpO249KG51bGw9PW4/SkIoKTorbikrKG51bGw9PWU/MDorZSksdGhpcy5fbmV4dHx8SEI9PT10aGlzfHwoSEI/SEIuX25leHQ9dGhpczpCQj10aGlzLEhCPXRoaXMpLHRoaXMuX2NhbGw9dCx0aGlzLl90aW1lPW4sckgoKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuX2NhbGwmJih0aGlzLl9jYWxsPW51bGwsdGhpcy5fdGltZT0xLzAsckgoKSl9fTt2YXIgYUg9alIoInN0YXJ0IiwiZW5kIiwiY2FuY2VsIiwiaW50ZXJydXB0Iiksc0g9W107ZnVuY3Rpb24gbEgodCxlLG4saSxyLG8pe3ZhciBhPXQuX190cmFuc2l0aW9uO2lmKGEpe2lmKG4gaW4gYSlyZXR1cm59ZWxzZSB0Ll9fdHJhbnNpdGlvbj17fTshKGZ1bmN0aW9uIHModCxlLG4pe3ZhciBpLHI9dC5fX3RyYW5zaXRpb247ZnVuY3Rpb24gbyhsKXt2YXIgYyx1LGgsZDtpZigxIT09bi5zdGF0ZSlyZXR1cm4gcygpO2ZvcihjIGluIHIpaWYoKGQ9cltjXSkubmFtZT09PW4ubmFtZSl7aWYoMz09PWQuc3RhdGUpcmV0dXJuIG9IKG8pOzQ9PT1kLnN0YXRlPyhkLnN0YXRlPTYsZC50aW1lci5zdG9wKCksZC5vbi5jYWxsKCJpbnRlcnJ1cHQiLHQsdC5fX2RhdGFfXyxkLmluZGV4LGQuZ3JvdXApLGRlbGV0ZSByW2NdKTorYzxlJiYoZC5zdGF0ZT02LGQudGltZXIuc3RvcCgpLGQub24uY2FsbCgiY2FuY2VsIix0LHQuX19kYXRhX18sZC5pbmRleCxkLmdyb3VwKSxkZWxldGUgcltjXSl9aWYob0goKGZ1bmN0aW9uKCl7Mz09PW4uc3RhdGUmJihuLnN0YXRlPTQsbi50aW1lci5yZXN0YXJ0KGEsbi5kZWxheSxuLnRpbWUpLGEobCkpfSkpLG4uc3RhdGU9MixuLm9uLmNhbGwoInN0YXJ0Iix0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSwyPT09bi5zdGF0ZSl7Zm9yKG4uc3RhdGU9MyxpPW5ldyBBcnJheShoPW4udHdlZW4ubGVuZ3RoKSxjPTAsdT0tMTtjPGg7KytjKShkPW4udHdlZW5bY10udmFsdWUuY2FsbCh0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSkmJihpWysrdV09ZCk7aS5sZW5ndGg9dSsxfX1mdW5jdGlvbiBhKGUpe2Zvcih2YXIgcj1lPG4uZHVyYXRpb24/bi5lYXNlLmNhbGwobnVsbCxlL24uZHVyYXRpb24pOihuLnRpbWVyLnJlc3RhcnQocyksbi5zdGF0ZT01LDEpLG89LTEsYT1pLmxlbmd0aDsrK288YTspaVtvXS5jYWxsKHQscik7NT09PW4uc3RhdGUmJihuLm9uLmNhbGwoImVuZCIsdCx0Ll9fZGF0YV9fLG4uaW5kZXgsbi5ncm91cCkscygpKX1mdW5jdGlvbiBzKCl7Zm9yKHZhciBpIGluIG4uc3RhdGU9NixuLnRpbWVyLnN0b3AoKSxkZWxldGUgcltlXSxyKXJldHVybjtkZWxldGUgdC5fX3RyYW5zaXRpb259cltlXT1uLG4udGltZXI9ZUgoKGZ1bmN0aW9uIGwodCl7bi5zdGF0ZT0xLG4udGltZXIucmVzdGFydChvLG4uZGVsYXksbi50aW1lKSxuLmRlbGF5PD10JiZvKHQtbi5kZWxheSl9KSwwLG4udGltZSl9KSh0LG4se25hbWU6ZSxpbmRleDppLGdyb3VwOnIsb246YUgsdHdlZW46c0gsdGltZTpvLnRpbWUsZGVsYXk6by5kZWxheSxkdXJhdGlvbjpvLmR1cmF0aW9uLGVhc2U6by5lYXNlLHRpbWVyOm51bGwsc3RhdGU6MH0pfWZ1bmN0aW9uIGNIKHQsZSl7dmFyIG49aEgodCxlKTtpZihuLnN0YXRlPjApdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBzY2hlZHVsZWQiKTtyZXR1cm4gbn1mdW5jdGlvbiB1SCh0LGUpe3ZhciBuPWhIKHQsZSk7aWYobi5zdGF0ZT4zKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgcnVubmluZyIpO3JldHVybiBufWZ1bmN0aW9uIGhIKHQsZSl7dmFyIG49dC5fX3RyYW5zaXRpb247aWYoIW58fCEobj1uW2VdKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJuIG59ZnVuY3Rpb24gZEgodCxlKXt2YXIgbixpLHIsbz10Ll9fdHJhbnNpdGlvbixhPSEwO2lmKG8pe2ZvcihyIGluIGU9bnVsbD09ZT9udWxsOmUrIiIsbykobj1vW3JdKS5uYW1lPT09ZT8oaT1uLnN0YXRlPjImJm4uc3RhdGU8NSxuLnN0YXRlPTYsbi50aW1lci5zdG9wKCksbi5vbi5jYWxsKGk/ImludGVycnVwdCI6ImNhbmNlbCIsdCx0Ll9fZGF0YV9fLG4uaW5kZXgsbi5ncm91cCksZGVsZXRlIG9bcl0pOmE9ITE7YSYmZGVsZXRlIHQuX190cmFuc2l0aW9ufX1mdW5jdGlvbiBwSCh0LGUpe3ZhciBuLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dUgodGhpcyx0KSxvPXIudHdlZW47aWYobyE9PW4pZm9yKHZhciBhPTAscz0oaT1uPW8pLmxlbmd0aDthPHM7KythKWlmKGlbYV0ubmFtZT09PWUpeyhpPWkuc2xpY2UoKSkuc3BsaWNlKGEsMSk7YnJlYWt9ci50d2Vlbj1pfX1mdW5jdGlvbiBmSCh0LGUsbil7dmFyIGkscjtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89dUgodGhpcyx0KSxhPW8udHdlZW47aWYoYSE9PWkpe3I9KGk9YSkuc2xpY2UoKTtmb3IodmFyIHM9e25hbWU6ZSx2YWx1ZTpufSxsPTAsYz1yLmxlbmd0aDtsPGM7KytsKWlmKHJbbF0ubmFtZT09PWUpe3JbbF09czticmVha31sPT09YyYmci5wdXNoKHMpfW8udHdlZW49cn19ZnVuY3Rpb24gbUgodCxlLG4pe3ZhciBpPXQuX2lkO3JldHVybiB0LmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9dUgodGhpcyxpKTsodC52YWx1ZXx8KHQudmFsdWU9e30pKVtlXT1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pKSxmdW5jdGlvbih0KXtyZXR1cm4gaEgodCxpKS52YWx1ZVtlXX19ZnVuY3Rpb24gZ0godCxlKXt2YXIgbjtyZXR1cm4oIm51bWJlciI9PXR5cGVvZiBlP01COmUgaW5zdGFuY2VvZiBpQj9iQjoobj1pQihlKSk/KGU9bixiQik6QUIpKHQsZSl9ZnVuY3Rpb24gX0godCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9fWZ1bmN0aW9uIHlIKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKX19ZnVuY3Rpb24gdkgodCxlLG4pe3ZhciBpLHIsbz1uKyIiO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0QXR0cmlidXRlKHQpO3JldHVybiBhPT09bz9udWxsOmE9PT1pP3I6cj1lKGk9YSxuKX19ZnVuY3Rpb24gYkgodCxlLG4pe3ZhciBpLHIsbz1uKyIiO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKTtyZXR1cm4gYT09PW8/bnVsbDphPT09aT9yOnI9ZShpPWEsbil9fWZ1bmN0aW9uIHhIKHQsZSxuKXt2YXIgaSxyLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGEscyxsPW4odGhpcyk7aWYobnVsbCE9bClyZXR1cm4oYT10aGlzLmdldEF0dHJpYnV0ZSh0KSk9PT0ocz1sKyIiKT9udWxsOmE9PT1pJiZzPT09cj9vOihyPXMsbz1lKGk9YSxsKSk7dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9fWZ1bmN0aW9uIHdIKHQsZSxuKXt2YXIgaSxyLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGEscyxsPW4odGhpcyk7aWYobnVsbCE9bClyZXR1cm4oYT10aGlzLmdldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCkpPT09KHM9bCsiIik/bnVsbDphPT09aSYmcz09PXI/bzoocj1zLG89ZShpPWEsbCkpO3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKX19ZnVuY3Rpb24gU0godCxlKXtyZXR1cm4gZnVuY3Rpb24obil7dGhpcy5zZXRBdHRyaWJ1dGUodCxlLmNhbGwodGhpcyxuKSl9fWZ1bmN0aW9uIE1IKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3RoaXMuc2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsLGUuY2FsbCh0aGlzLG4pKX19ZnVuY3Rpb24gRUgodCxlKXt2YXIgbixpO2Z1bmN0aW9uIHIoKXt2YXIgcj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gciE9PWkmJihuPShpPXIpJiZNSCh0LHIpKSxufXJldHVybiByLl92YWx1ZT1lLHJ9ZnVuY3Rpb24gVEgodCxlKXt2YXIgbixpO2Z1bmN0aW9uIHIoKXt2YXIgcj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gciE9PWkmJihuPShpPXIpJiZTSCh0LHIpKSxufXJldHVybiByLl92YWx1ZT1lLHJ9ZnVuY3Rpb24gQ0godCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtjSCh0aGlzLHQpLmRlbGF5PStlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gQUgodCxlKXtyZXR1cm4gZT0rZSxmdW5jdGlvbigpe2NIKHRoaXMsdCkuZGVsYXk9ZX19ZnVuY3Rpb24ga0godCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt1SCh0aGlzLHQpLmR1cmF0aW9uPStlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gTEgodCxlKXtyZXR1cm4gZT0rZSxmdW5jdGlvbigpe3VIKHRoaXMsdCkuZHVyYXRpb249ZX19ZnVuY3Rpb24gUEgodCxlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7dUgodGhpcyx0KS5lYXNlPWV9fWZ1bmN0aW9uIE5IKHQsZSxuKXt2YXIgaSxyLG89KGZ1bmN0aW9uIGEodCl7cmV0dXJuKHQrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeSgoZnVuY3Rpb24odCl7dmFyIGU9dC5pbmRleE9mKCIuIik7cmV0dXJuIGU+PTAmJih0PXQuc2xpY2UoMCxlKSksIXR8fCJzdGFydCI9PT10fSkpfSkoZSk/Y0g6dUg7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9byh0aGlzLHQpLHM9YS5vbjtzIT09aSYmKHI9KGk9cykuY29weSgpKS5vbihlLG4pLGEub249cn19dmFyIElIPW5ELnByb3RvdHlwZS5jb25zdHJ1Y3RvcjtmdW5jdGlvbiBPSCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpfX1mdW5jdGlvbiBSSCh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKGkpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxlLmNhbGwodGhpcyxpKSxuKX19ZnVuY3Rpb24gekgodCxlLG4pe3ZhciBpLHI7ZnVuY3Rpb24gbygpe3ZhciBvPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBvIT09ciYmKGk9KHI9bykmJlJIKHQsbyxuKSksaX1yZXR1cm4gby5fdmFsdWU9ZSxvfWZ1bmN0aW9uIERIKHQpe3JldHVybiBmdW5jdGlvbihlKXt0aGlzLnRleHRDb250ZW50PXQuY2FsbCh0aGlzLGUpfX1mdW5jdGlvbiBCSCh0KXt2YXIgZSxuO2Z1bmN0aW9uIGkoKXt2YXIgaT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gaSE9PW4mJihlPShuPWkpJiZESChpKSksZX1yZXR1cm4gaS5fdmFsdWU9dCxpfXZhciBISD0wO2Z1bmN0aW9uIEZIKHQsZSxuLGkpe3RoaXMuX2dyb3Vwcz10LHRoaXMuX3BhcmVudHM9ZSx0aGlzLl9uYW1lPW4sdGhpcy5faWQ9aX1mdW5jdGlvbiBWSCgpe3JldHVybisrSEh9dmFyIFVIPW5ELnByb3RvdHlwZTtGSC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkZILHNlbGVjdDpmdW5jdGlvbiBqSCh0KXt2YXIgZT10aGlzLl9uYW1lLG49dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PWV6KHQpKTtmb3IodmFyIGk9dGhpcy5fZ3JvdXBzLHI9aS5sZW5ndGgsbz1uZXcgQXJyYXkociksYT0wO2E8cjsrK2EpZm9yKHZhciBzLGwsYz1pW2FdLHU9Yy5sZW5ndGgsaD1vW2FdPW5ldyBBcnJheSh1KSxkPTA7ZDx1OysrZCkocz1jW2RdKSYmKGw9dC5jYWxsKHMscy5fX2RhdGFfXyxkLGMpKSYmKCJfX2RhdGFfXyJpbiBzJiYobC5fX2RhdGFfXz1zLl9fZGF0YV9fKSxoW2RdPWwsbEgoaFtkXSxlLG4sZCxoLGhIKHMsbikpKTtyZXR1cm4gbmV3IEZIKG8sdGhpcy5fcGFyZW50cyxlLG4pfSxzZWxlY3RBbGw6ZnVuY3Rpb24gR0godCl7dmFyIGU9dGhpcy5fbmFtZSxuPXRoaXMuX2lkOyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1peih0KSk7Zm9yKHZhciBpPXRoaXMuX2dyb3VwcyxyPWkubGVuZ3RoLG89W10sYT1bXSxzPTA7czxyOysrcylmb3IodmFyIGwsYz1pW3NdLHU9Yy5sZW5ndGgsaD0wO2g8dTsrK2gpaWYobD1jW2hdKXtmb3IodmFyIGQscD10LmNhbGwobCxsLl9fZGF0YV9fLGgsYyksZj1oSChsLG4pLG09MCxnPXAubGVuZ3RoO208ZzsrK20pKGQ9cFttXSkmJmxIKGQsZSxuLG0scCxmKTtvLnB1c2gocCksYS5wdXNoKGwpfXJldHVybiBuZXcgRkgobyxhLGUsbil9LGZpbHRlcjpmdW5jdGlvbiBXSCh0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9cnoodCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxpPW5ldyBBcnJheShuKSxyPTA7cjxuOysrcilmb3IodmFyIG8sYT1lW3JdLHM9YS5sZW5ndGgsbD1pW3JdPVtdLGM9MDtjPHM7KytjKShvPWFbY10pJiZ0LmNhbGwobyxvLl9fZGF0YV9fLGMsYSkmJmwucHVzaChvKTtyZXR1cm4gbmV3IEZIKGksdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX0sbWVyZ2U6ZnVuY3Rpb24gcUgodCl7aWYodC5faWQhPT10aGlzLl9pZCl0aHJvdyBuZXcgRXJyb3I7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPXQuX2dyb3VwcyxpPWUubGVuZ3RoLHI9TWF0aC5taW4oaSxuLmxlbmd0aCksbz1uZXcgQXJyYXkoaSksYT0wO2E8cjsrK2EpZm9yKHZhciBzLGw9ZVthXSxjPW5bYV0sdT1sLmxlbmd0aCxoPW9bYV09bmV3IEFycmF5KHUpLGQ9MDtkPHU7KytkKShzPWxbZF18fGNbZF0pJiYoaFtkXT1zKTtmb3IoO2E8aTsrK2Epb1thXT1lW2FdO3JldHVybiBuZXcgRkgobyx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfSxzZWxlY3Rpb246ZnVuY3Rpb24gWUgoKXtyZXR1cm4gbmV3IElIKHRoaXMuX2dyb3Vwcyx0aGlzLl9wYXJlbnRzKX0sdHJhbnNpdGlvbjpmdW5jdGlvbiBYSCgpe2Zvcih2YXIgdD10aGlzLl9uYW1lLGU9dGhpcy5faWQsbj1WSCgpLGk9dGhpcy5fZ3JvdXBzLHI9aS5sZW5ndGgsbz0wO288cjsrK28pZm9yKHZhciBhLHM9aVtvXSxsPXMubGVuZ3RoLGM9MDtjPGw7KytjKWlmKGE9c1tjXSl7dmFyIHU9aEgoYSxlKTtsSChhLHQsbixjLHMse3RpbWU6dS50aW1lK3UuZGVsYXkrdS5kdXJhdGlvbixkZWxheTowLGR1cmF0aW9uOnUuZHVyYXRpb24sZWFzZTp1LmVhc2V9KX1yZXR1cm4gbmV3IEZIKGksdGhpcy5fcGFyZW50cyx0LG4pfSxjYWxsOlVILmNhbGwsbm9kZXM6VUgubm9kZXMsbm9kZTpVSC5ub2RlLHNpemU6VUguc2l6ZSxlbXB0eTpVSC5lbXB0eSxlYWNoOlVILmVhY2gsb246ZnVuY3Rpb24gJEgodCxlKXt2YXIgbj10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP2hIKHRoaXMubm9kZSgpLG4pLm9uLm9uKHQpOnRoaXMuZWFjaChOSChuLHQsZSkpfSxhdHRyOmZ1bmN0aW9uIEtIKHQsZSl7dmFyIG49S1IodCksaT0idHJhbnNmb3JtIj09PW4/VUI6Z0g7cmV0dXJuIHRoaXMuYXR0clR3ZWVuKHQsImZ1bmN0aW9uIj09dHlwZW9mIGU/KG4ubG9jYWw/d0g6eEgpKG4saSxtSCh0aGlzLCJhdHRyLiIrdCxlKSk6bnVsbD09ZT8obi5sb2NhbD95SDpfSCkobik6KG4ubG9jYWw/Ykg6dkgpKG4saSxlKSl9LGF0dHJUd2VlbjpmdW5jdGlvbiBaSCh0LGUpe3ZhciBuPSJhdHRyLiIrdDtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKG49dGhpcy50d2VlbihuKSkmJm4uX3ZhbHVlO2lmKG51bGw9PWUpcmV0dXJuIHRoaXMudHdlZW4obixudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3I7dmFyIGk9S1IodCk7cmV0dXJuIHRoaXMudHdlZW4obiwoaS5sb2NhbD9FSDpUSCkoaSxlKSl9LHN0eWxlOmZ1bmN0aW9uIEpIKHQsZSxuKXt2YXIgaT0idHJhbnNmb3JtIj09KHQrPSIiKT9GQjpnSDtyZXR1cm4gbnVsbD09ZT90aGlzLnN0eWxlVHdlZW4odCwoZnVuY3Rpb24gcih0LGUpe3ZhciBuLGkscjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1ieih0aGlzLHQpLGE9KHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCksYnoodGhpcyx0KSk7cmV0dXJuIG89PT1hP251bGw6bz09PW4mJmE9PT1pP3I6cj1lKG49byxpPWEpfX0pKHQsaSkpLm9uKCJlbmQuc3R5bGUuIit0LE9IKHQpKToiZnVuY3Rpb24iPT10eXBlb2YgZT90aGlzLnN0eWxlVHdlZW4odCwoZnVuY3Rpb24gYSh0LGUsbil7dmFyIGkscixvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPWJ6KHRoaXMsdCkscz1uKHRoaXMpLGw9cysiIjtyZXR1cm4gbnVsbD09cyYmKHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCksbD1zPWJ6KHRoaXMsdCkpLGE9PT1sP251bGw6YT09PWkmJmw9PT1yP286KHI9bCxvPWUoaT1hLHMpKX19KSh0LGksbUgodGhpcywic3R5bGUuIit0LGUpKSkuZWFjaCgoZnVuY3Rpb24gbyh0LGUpe3ZhciBuLGkscixvLGE9InN0eWxlLiIrZSxzPSJlbmQuIithO3JldHVybiBmdW5jdGlvbigpe3ZhciBsPXVIKHRoaXMsdCksYz1sLm9uLHU9bnVsbD09bC52YWx1ZVthXT9vfHwobz1PSChlKSk6dm9pZCAwO2M9PT1uJiZyPT09dXx8KGk9KG49YykuY29weSgpKS5vbihzLHI9dSksbC5vbj1pfX0pKHRoaXMuX2lkLHQpKTp0aGlzLnN0eWxlVHdlZW4odCwoZnVuY3Rpb24gcyh0LGUsbil7dmFyIGkscixvPW4rIiI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9YnoodGhpcyx0KTtyZXR1cm4gYT09PW8/bnVsbDphPT09aT9yOnI9ZShpPWEsbil9fSkodCxpLGUpLG4pLm9uKCJlbmQuc3R5bGUuIit0LG51bGwpfSxzdHlsZVR3ZWVuOmZ1bmN0aW9uIFFIKHQsZSxuKXt2YXIgaT0ic3R5bGUuIisodCs9IiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4oaT10aGlzLnR3ZWVuKGkpKSYmaS5fdmFsdWU7aWYobnVsbD09ZSlyZXR1cm4gdGhpcy50d2VlbihpLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihpLHpIKHQsZSxudWxsPT1uPyIiOm4pKX0sdGV4dDpmdW5jdGlvbiB0Rih0KXtyZXR1cm4gdGhpcy50d2VlbigidGV4dCIsImZ1bmN0aW9uIj09dHlwZW9mIHQ/KGZ1bmN0aW9uIGUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKTt0aGlzLnRleHRDb250ZW50PW51bGw9PWU/IiI6ZX19KShtSCh0aGlzLCJ0ZXh0Iix0KSk6KGZ1bmN0aW9uIG4odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD10fX0pKG51bGw9PXQ/IiI6dCsiIikpfSx0ZXh0VHdlZW46ZnVuY3Rpb24gZUYodCl7dmFyIGU9InRleHQiO2lmKGFyZ3VtZW50cy5sZW5ndGg8MSlyZXR1cm4oZT10aGlzLnR3ZWVuKGUpKSYmZS5fdmFsdWU7aWYobnVsbD09dClyZXR1cm4gdGhpcy50d2VlbihlLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihlLEJIKHQpKX0scmVtb3ZlOmZ1bmN0aW9uIG5GKCl7cmV0dXJuIHRoaXMub24oImVuZC5yZW1vdmUiLChmdW5jdGlvbiB0KGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMucGFyZW50Tm9kZTtmb3IodmFyIG4gaW4gdGhpcy5fX3RyYW5zaXRpb24paWYoK24hPT1lKXJldHVybjt0JiZ0LnJlbW92ZUNoaWxkKHRoaXMpfX0pKHRoaXMuX2lkKSl9LHR3ZWVuOmZ1bmN0aW9uIGlGKHQsZSl7dmFyIG49dGhpcy5faWQ7aWYodCs9IiIsYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIGkscj1oSCh0aGlzLm5vZGUoKSxuKS50d2VlbixvPTAsYT1yLmxlbmd0aDtvPGE7KytvKWlmKChpPXJbb10pLm5hbWU9PT10KXJldHVybiBpLnZhbHVlO3JldHVybiBudWxsfXJldHVybiB0aGlzLmVhY2goKG51bGw9PWU/cEg6ZkgpKG4sdCxlKSl9LGRlbGF5OmZ1bmN0aW9uIHJGKHQpe3ZhciBlPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIHQ/Q0g6QUgpKGUsdCkpOmhIKHRoaXMubm9kZSgpLGUpLmRlbGF5fSxkdXJhdGlvbjpmdW5jdGlvbiBvRih0KXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiB0P2tIOkxIKShlLHQpKTpoSCh0aGlzLm5vZGUoKSxlKS5kdXJhdGlvbn0sZWFzZTpmdW5jdGlvbiBhRih0KXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goUEgoZSx0KSk6aEgodGhpcy5ub2RlKCksZSkuZWFzZX0sZW5kOmZ1bmN0aW9uIHNGKCl7dmFyIHQsZSxuPXRoaXMsaT1uLl9pZCxyPW4uc2l6ZSgpO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obyxhKXt2YXIgcz17dmFsdWU6YX0sbD17dmFsdWU6ZnVuY3Rpb24oKXswPT0tLXImJm8oKX19O24uZWFjaCgoZnVuY3Rpb24oKXt2YXIgbj11SCh0aGlzLGkpLHI9bi5vbjtyIT09dCYmKChlPSh0PXIpLmNvcHkoKSkuXy5jYW5jZWwucHVzaChzKSxlLl8uaW50ZXJydXB0LnB1c2gocyksZS5fLmVuZC5wdXNoKGwpKSxuLm9uPWV9KSl9KSl9fTt2YXIgbEY9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOkVmfTtmdW5jdGlvbiBjRih0LGUpe2Zvcih2YXIgbjshKG49dC5fX3RyYW5zaXRpb24pfHwhKG49bltlXSk7KWlmKCEodD10LnBhcmVudE5vZGUpKXJldHVybiBsRi50aW1lPUpCKCksbEY7cmV0dXJuIG59ZnVuY3Rpb24gdUYodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIGhGKHQsZSxuKXt0aGlzLnRhcmdldD10LHRoaXMudHlwZT1lLHRoaXMuc2VsZWN0aW9uPW59ZnVuY3Rpb24gZEYoKXtXei5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBwRigpe1d6LnByZXZlbnREZWZhdWx0KCksV3ouc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9bkQucHJvdG90eXBlLmludGVycnVwdD1mdW5jdGlvbiBmRih0KXtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpe2RIKHRoaXMsdCl9KSl9LG5ELnByb3RvdHlwZS50cmFuc2l0aW9uPWZ1bmN0aW9uIG1GKHQpe3ZhciBlLG47dCBpbnN0YW5jZW9mIEZIPyhlPXQuX2lkLHQ9dC5fbmFtZSk6KGU9VkgoKSwobj1sRikudGltZT1KQigpLHQ9bnVsbD09dD9udWxsOnQrIiIpO2Zvcih2YXIgaT10aGlzLl9ncm91cHMscj1pLmxlbmd0aCxvPTA7bzxyOysrbylmb3IodmFyIGEscz1pW29dLGw9cy5sZW5ndGgsYz0wO2M8bDsrK2MpKGE9c1tjXSkmJmxIKGEsdCxlLGMscyxufHxjRihhLGUpKTtyZXR1cm4gbmV3IEZIKGksdGhpcy5fcGFyZW50cyx0LGUpfTt2YXIgZ0Y9e25hbWU6ImRyYWcifSxfRj17bmFtZToic3BhY2UifSx5Rj17bmFtZToiaGFuZGxlIn0sdkY9e25hbWU6ImNlbnRlciJ9LGJGPXtuYW1lOiJ4IixoYW5kbGVzOlsiZSIsInciXS5tYXAoQUYpLGlucHV0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQmJltbdFswXSxlWzBdWzFdXSxbdFsxXSxlWzFdWzFdXV19LG91dHB1dDpmdW5jdGlvbih0KXtyZXR1cm4gdCYmW3RbMF1bMF0sdFsxXVswXV19fSx4Rj17bmFtZToieSIsaGFuZGxlczpbIm4iLCJzIl0ubWFwKEFGKSxpbnB1dDpmdW5jdGlvbih0LGUpe3JldHVybiB0JiZbW2VbMF1bMF0sdFswXV0sW2VbMV1bMF0sdFsxXV1dfSxvdXRwdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQmJlt0WzBdWzFdLHRbMV1bMV1dfX0sd0Y9e25hbWU6Inh5IixoYW5kbGVzOlsibiIsImUiLCJzIiwidyIsIm53IiwibmUiLCJzZSIsInN3Il0ubWFwKEFGKSxpbnB1dDpmdW5jdGlvbih0KXtyZXR1cm4gdH0sb3V0cHV0OmZ1bmN0aW9uKHQpe3JldHVybiB0fX0sU0Y9e292ZXJsYXk6ImNyb3NzaGFpciIsc2VsZWN0aW9uOiJtb3ZlIixuOiJucy1yZXNpemUiLGU6ImV3LXJlc2l6ZSIsczoibnMtcmVzaXplIix3OiJldy1yZXNpemUiLG53OiJud3NlLXJlc2l6ZSIsbmU6Im5lc3ctcmVzaXplIixzZToibndzZS1yZXNpemUiLHN3OiJuZXN3LXJlc2l6ZSJ9LE1GPXtlOiJ3Iix3OiJlIixudzoibmUiLG5lOiJudyIsc2U6InN3Iixzdzoic2UifSxFRj17bjoicyIsczoibiIsbnc6InN3IixuZToic2UiLHNlOiJuZSIsc3c6Im53In0sVEY9e292ZXJsYXk6MSxzZWxlY3Rpb246MSxuOm51bGwsZToxLHM6bnVsbCx3Oi0xLG53Oi0xLG5lOjEsc2U6MSxzdzotMX0sQ0Y9e292ZXJsYXk6MSxzZWxlY3Rpb246MSxuOi0xLGU6bnVsbCxzOjEsdzpudWxsLG53Oi0xLG5lOi0xLHNlOjEsc3c6MX07ZnVuY3Rpb24gQUYodCl7cmV0dXJue3R5cGU6dH19ZnVuY3Rpb24ga0YoKXtyZXR1cm4hV3ouYnV0dG9ufWZ1bmN0aW9uIExGKCl7dmFyIHQ9dGhpcy5vd25lclNWR0VsZW1lbnR8fHRoaXM7cmV0dXJuW1swLDBdLFt0LndpZHRoLmJhc2VWYWwudmFsdWUsdC5oZWlnaHQuYmFzZVZhbC52YWx1ZV1dfWZ1bmN0aW9uIFBGKHQpe2Zvcig7IXQuX19icnVzaDspaWYoISh0PXQucGFyZW50Tm9kZSkpcmV0dXJuO3JldHVybiB0Ll9fYnJ1c2h9ZnVuY3Rpb24gTkYodCl7cmV0dXJuIHRbMF1bMF09PT10WzFdWzBdfHx0WzBdWzFdPT09dFsxXVsxXX1mdW5jdGlvbiBJRih0KXt2YXIgZSxuPUxGLGk9a0Yscj1qUihhLCJzdGFydCIsImJydXNoIiwiZW5kIiksbz02O2Z1bmN0aW9uIGEoZSl7dmFyIG49ZS5wcm9wZXJ0eSgiX19icnVzaCIsaCkuc2VsZWN0QWxsKCIub3ZlcmxheSIpLmRhdGEoW0FGKCJvdmVybGF5IildKTtuLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJvdmVybGF5IikuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKS5hdHRyKCJjdXJzb3IiLFNGLm92ZXJsYXkpLm1lcmdlKG4pLmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9UEYodGhpcykuZXh0ZW50O2lEKHRoaXMpLmF0dHIoIngiLHRbMF1bMF0pLmF0dHIoInkiLHRbMF1bMV0pLmF0dHIoIndpZHRoIix0WzFdWzBdLXRbMF1bMF0pLmF0dHIoImhlaWdodCIsdFsxXVsxXS10WzBdWzFdKX0pKSxlLnNlbGVjdEFsbCgiLnNlbGVjdGlvbiIpLmRhdGEoW0FGKCJzZWxlY3Rpb24iKV0pLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJzZWxlY3Rpb24iKS5hdHRyKCJjdXJzb3IiLFNGLnNlbGVjdGlvbikuYXR0cigiZmlsbCIsIiM3NzciKS5hdHRyKCJmaWxsLW9wYWNpdHkiLC4zKS5hdHRyKCJzdHJva2UiLCIjZmZmIikuYXR0cigic2hhcGUtcmVuZGVyaW5nIiwiY3Jpc3BFZGdlcyIpO3ZhciBpPWUuc2VsZWN0QWxsKCIuaGFuZGxlIikuZGF0YSh0LmhhbmRsZXMsKGZ1bmN0aW9uKHQpe3JldHVybiB0LnR5cGV9KSk7aS5leGl0KCkucmVtb3ZlKCksaS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwoZnVuY3Rpb24odCl7cmV0dXJuImhhbmRsZSBoYW5kbGUtLSIrdC50eXBlfSkpLmF0dHIoImN1cnNvciIsKGZ1bmN0aW9uKHQpe3JldHVybiBTRlt0LnR5cGVdfSkpLGUuZWFjaChzKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIikuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKS5vbigibW91c2Vkb3duLmJydXNoIHRvdWNoc3RhcnQuYnJ1c2giLHUpfWZ1bmN0aW9uIHMoKXt2YXIgdD1pRCh0aGlzKSxlPVBGKHRoaXMpLnNlbGVjdGlvbjtlPyh0LnNlbGVjdEFsbCgiLnNlbGVjdGlvbiIpLnN0eWxlKCJkaXNwbGF5IixudWxsKS5hdHRyKCJ4IixlWzBdWzBdKS5hdHRyKCJ5IixlWzBdWzFdKS5hdHRyKCJ3aWR0aCIsZVsxXVswXS1lWzBdWzBdKS5hdHRyKCJoZWlnaHQiLGVbMV1bMV0tZVswXVsxXSksdC5zZWxlY3RBbGwoIi5oYW5kbGUiKS5zdHlsZSgiZGlzcGxheSIsbnVsbCkuYXR0cigieCIsKGZ1bmN0aW9uKHQpe3JldHVybiJlIj09PXQudHlwZVt0LnR5cGUubGVuZ3RoLTFdP2VbMV1bMF0tby8yOmVbMF1bMF0tby8yfSkpLmF0dHIoInkiLChmdW5jdGlvbih0KXtyZXR1cm4icyI9PT10LnR5cGVbMF0/ZVsxXVsxXS1vLzI6ZVswXVsxXS1vLzJ9KSkuYXR0cigid2lkdGgiLChmdW5jdGlvbih0KXtyZXR1cm4ibiI9PT10LnR5cGV8fCJzIj09PXQudHlwZT9lWzFdWzBdLWVbMF1bMF0rbzpvfSkpLmF0dHIoImhlaWdodCIsKGZ1bmN0aW9uKHQpe3JldHVybiJlIj09PXQudHlwZXx8InciPT09dC50eXBlP2VbMV1bMV0tZVswXVsxXStvOm99KSkpOnQuc2VsZWN0QWxsKCIuc2VsZWN0aW9uLC5oYW5kbGUiKS5zdHlsZSgiZGlzcGxheSIsIm5vbmUiKS5hdHRyKCJ4IixudWxsKS5hdHRyKCJ5IixudWxsKS5hdHRyKCJ3aWR0aCIsbnVsbCkuYXR0cigiaGVpZ2h0IixudWxsKX1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuIHQuX19icnVzaC5lbWl0dGVyfHxuZXcgYyh0LGUpfWZ1bmN0aW9uIGModCxlKXt0aGlzLnRoYXQ9dCx0aGlzLmFyZ3M9ZSx0aGlzLnN0YXRlPXQuX19icnVzaCx0aGlzLmFjdGl2ZT0wfWZ1bmN0aW9uIHUoKXtpZihXei50b3VjaGVzKXtpZihXei5jaGFuZ2VkVG91Y2hlcy5sZW5ndGg8V3oudG91Y2hlcy5sZW5ndGgpcmV0dXJuIHBGKCl9ZWxzZSBpZihlKXJldHVybjtpZihpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIG4scixvLGEsYyx1LGgsZCxwLGYsbSxnLF8seT10aGlzLHY9V3oudGFyZ2V0Ll9fZGF0YV9fLnR5cGUsYj0ic2VsZWN0aW9uIj09PShXei5tZXRhS2V5P3Y9Im92ZXJsYXkiOnYpP2dGOld6LmFsdEtleT92Rjp5Rix4PXQ9PT14Rj9udWxsOlRGW3ZdLHc9dD09PWJGP251bGw6Q0Zbdl0sUz1QRih5KSxNPVMuZXh0ZW50LEU9Uy5zZWxlY3Rpb24sVD1NWzBdWzBdLEM9TVswXVsxXSxBPU1bMV1bMF0saz1NWzFdWzFdLEw9eCYmdyYmV3ouc2hpZnRLZXksUD1yRCh5KSxOPVAsST1sKHksYXJndW1lbnRzKS5iZWZvcmVzdGFydCgpOyJvdmVybGF5Ij09PXY/Uy5zZWxlY3Rpb249RT1bW249dD09PXhGP1Q6UFswXSxvPXQ9PT1iRj9DOlBbMV1dLFtjPXQ9PT14Rj9BOm4saD10PT09YkY/azpvXV06KG49RVswXVswXSxvPUVbMF1bMV0sYz1FWzFdWzBdLGg9RVsxXVsxXSkscj1uLGE9byx1PWMsZD1oO3ZhciBPPWlEKHkpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpLFI9Ty5zZWxlY3RBbGwoIi5vdmVybGF5IikuYXR0cigiY3Vyc29yIixTRlt2XSk7aWYoV3oudG91Y2hlcylPLm9uKCJ0b3VjaG1vdmUuYnJ1c2giLEQsITApLm9uKCJ0b3VjaGVuZC5icnVzaCB0b3VjaGNhbmNlbC5icnVzaCIsSCwhMCk7ZWxzZXt2YXIgej1pRChXei52aWV3KS5vbigia2V5ZG93bi5icnVzaCIsRiwhMCkub24oImtleXVwLmJydXNoIixWLCEwKS5vbigibW91c2Vtb3ZlLmJydXNoIixELCEwKS5vbigibW91c2V1cC5icnVzaCIsSCwhMCk7YUQoV3oudmlldyl9ZEYoKSxkSCh5KSxzLmNhbGwoeSksSS5zdGFydCgpfWZ1bmN0aW9uIEQoKXt2YXIgdD1yRCh5KTshTHx8Z3x8X3x8KE1hdGguYWJzKHRbMF0tTlswXSk+TWF0aC5hYnModFsxXS1OWzFdKT9fPSEwOmc9ITApLE49dCxtPSEwLHBGKCksQigpfWZ1bmN0aW9uIEIoKXt2YXIgdDtzd2l0Y2gocD1OWzBdLVBbMF0sZj1OWzFdLVBbMV0sYil7Y2FzZSBfRjpjYXNlIGdGOngmJihwPU1hdGgubWF4KFQtbixNYXRoLm1pbihBLWMscCkpLHI9bitwLHU9YytwKSx3JiYoZj1NYXRoLm1heChDLW8sTWF0aC5taW4oay1oLGYpKSxhPW8rZixkPWgrZik7YnJlYWs7Y2FzZSB5Rjp4PDA/KHA9TWF0aC5tYXgoVC1uLE1hdGgubWluKEEtbixwKSkscj1uK3AsdT1jKTp4PjAmJihwPU1hdGgubWF4KFQtYyxNYXRoLm1pbihBLWMscCkpLHI9bix1PWMrcCksdzwwPyhmPU1hdGgubWF4KEMtbyxNYXRoLm1pbihrLW8sZikpLGE9bytmLGQ9aCk6dz4wJiYoZj1NYXRoLm1heChDLWgsTWF0aC5taW4oay1oLGYpKSxhPW8sZD1oK2YpO2JyZWFrO2Nhc2UgdkY6eCYmKHI9TWF0aC5tYXgoVCxNYXRoLm1pbihBLG4tcCp4KSksdT1NYXRoLm1heChULE1hdGgubWluKEEsYytwKngpKSksdyYmKGE9TWF0aC5tYXgoQyxNYXRoLm1pbihrLG8tZip3KSksZD1NYXRoLm1heChDLE1hdGgubWluKGssaCtmKncpKSl9dTxyJiYoeCo9LTEsdD1uLG49YyxjPXQsdD1yLHI9dSx1PXQsdiBpbiBNRiYmUi5hdHRyKCJjdXJzb3IiLFNGW3Y9TUZbdl1dKSksZDxhJiYodyo9LTEsdD1vLG89aCxoPXQsdD1hLGE9ZCxkPXQsdiBpbiBFRiYmUi5hdHRyKCJjdXJzb3IiLFNGW3Y9RUZbdl1dKSksUy5zZWxlY3Rpb24mJihFPVMuc2VsZWN0aW9uKSxnJiYocj1FWzBdWzBdLHU9RVsxXVswXSksXyYmKGE9RVswXVsxXSxkPUVbMV1bMV0pLEVbMF1bMF09PT1yJiZFWzBdWzFdPT09YSYmRVsxXVswXT09PXUmJkVbMV1bMV09PT1kfHwoUy5zZWxlY3Rpb249W1tyLGFdLFt1LGRdXSxzLmNhbGwoeSksSS5icnVzaCgpKX1mdW5jdGlvbiBIKCl7aWYoZEYoKSxXei50b3VjaGVzKXtpZihXei50b3VjaGVzLmxlbmd0aClyZXR1cm47ZSYmY2xlYXJUaW1lb3V0KGUpLGU9c2V0VGltZW91dCgoZnVuY3Rpb24oKXtlPW51bGx9KSw1MDApLE8ub24oInRvdWNobW92ZS5icnVzaCB0b3VjaGVuZC5icnVzaCB0b3VjaGNhbmNlbC5icnVzaCIsbnVsbCl9ZWxzZSBzRChXei52aWV3LG0pLHoub24oImtleWRvd24uYnJ1c2gga2V5dXAuYnJ1c2ggbW91c2Vtb3ZlLmJydXNoIG1vdXNldXAuYnJ1c2giLG51bGwpO08uYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKSxSLmF0dHIoImN1cnNvciIsU0Yub3ZlcmxheSksUy5zZWxlY3Rpb24mJihFPVMuc2VsZWN0aW9uKSxORihFKSYmKFMuc2VsZWN0aW9uPW51bGwscy5jYWxsKHkpKSxJLmVuZCgpfWZ1bmN0aW9uIEYoKXtzd2l0Y2goV3oua2V5Q29kZSl7Y2FzZSAxNjpMPXgmJnc7YnJlYWs7Y2FzZSAxODpiPT09eUYmJih4JiYoYz11LXAqeCxuPXIrcCp4KSx3JiYoaD1kLWYqdyxvPWErZip3KSxiPXZGLEIoKSk7YnJlYWs7Y2FzZSAzMjpiIT09eUYmJmIhPT12Rnx8KHg8MD9jPXUtcDp4PjAmJihuPXItcCksdzwwP2g9ZC1mOnc+MCYmKG89YS1mKSxiPV9GLFIuYXR0cigiY3Vyc29yIixTRi5zZWxlY3Rpb24pLEIoKSk7YnJlYWs7ZGVmYXVsdDpyZXR1cm59cEYoKX1mdW5jdGlvbiBWKCl7c3dpdGNoKFd6LmtleUNvZGUpe2Nhc2UgMTY6TCYmKGc9Xz1MPSExLEIoKSk7YnJlYWs7Y2FzZSAxODpiPT09dkYmJih4PDA/Yz11Ong+MCYmKG49ciksdzwwP2g9ZDp3PjAmJihvPWEpLGI9eUYsQigpKTticmVhaztjYXNlIDMyOmI9PT1fRiYmKFd6LmFsdEtleT8oeCYmKGM9dS1wKngsbj1yK3AqeCksdyYmKGg9ZC1mKncsbz1hK2YqdyksYj12Rik6KHg8MD9jPXU6eD4wJiYobj1yKSx3PDA/aD1kOnc+MCYmKG89YSksYj15RiksUi5hdHRyKCJjdXJzb3IiLFNGW3ZdKSxCKCkpO2JyZWFrO2RlZmF1bHQ6cmV0dXJufXBGKCl9fWZ1bmN0aW9uIGgoKXt2YXIgZT10aGlzLl9fYnJ1c2h8fHtzZWxlY3Rpb246bnVsbH07cmV0dXJuIGUuZXh0ZW50PW4uYXBwbHkodGhpcyxhcmd1bWVudHMpLGUuZGltPXQsZX1yZXR1cm4gYS5tb3ZlPWZ1bmN0aW9uKGUsbil7ZS5zZWxlY3Rpb24/ZS5vbigic3RhcnQuYnJ1c2giLChmdW5jdGlvbigpe2wodGhpcyxhcmd1bWVudHMpLmJlZm9yZXN0YXJ0KCkuc3RhcnQoKX0pKS5vbigiaW50ZXJydXB0LmJydXNoIGVuZC5icnVzaCIsKGZ1bmN0aW9uKCl7bCh0aGlzLGFyZ3VtZW50cykuZW5kKCl9KSkudHdlZW4oImJydXNoIiwoZnVuY3Rpb24oKXt2YXIgZT10aGlzLGk9ZS5fX2JydXNoLHI9bChlLGFyZ3VtZW50cyksbz1pLnNlbGVjdGlvbixhPXQuaW5wdXQoImZ1bmN0aW9uIj09dHlwZW9mIG4/bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6bixpLmV4dGVudCksYz1rQihvLGEpO2Z1bmN0aW9uIHUodCl7aS5zZWxlY3Rpb249MT09PXQmJk5GKGEpP251bGw6Yyh0KSxzLmNhbGwoZSksci5icnVzaCgpfXJldHVybiBvJiZhP3U6dSgxKX0pKTplLmVhY2goKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxpPWFyZ3VtZW50cyxyPWUuX19icnVzaCxvPXQuaW5wdXQoImZ1bmN0aW9uIj09dHlwZW9mIG4/bi5hcHBseShlLGkpOm4sci5leHRlbnQpLGE9bChlLGkpLmJlZm9yZXN0YXJ0KCk7ZEgoZSksci5zZWxlY3Rpb249bnVsbD09b3x8TkYobyk/bnVsbDpvLHMuY2FsbChlKSxhLnN0YXJ0KCkuYnJ1c2goKS5lbmQoKX0pKX0sYy5wcm90b3R5cGU9e2JlZm9yZXN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIDE9PSsrdGhpcy5hY3RpdmUmJih0aGlzLnN0YXRlLmVtaXR0ZXI9dGhpcyx0aGlzLnN0YXJ0aW5nPSEwKSx0aGlzfSxzdGFydDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXJ0aW5nJiYodGhpcy5zdGFydGluZz0hMSx0aGlzLmVtaXQoInN0YXJ0IikpLHRoaXN9LGJydXNoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW1pdCgiYnJ1c2giKSx0aGlzfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gMD09LS10aGlzLmFjdGl2ZSYmKGRlbGV0ZSB0aGlzLnN0YXRlLmVtaXR0ZXIsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1pdDpmdW5jdGlvbihlKXshKGZ1bmN0aW9uIG4odCxlLGkscil7dmFyIG89V3o7dC5zb3VyY2VFdmVudD1XeixXej10O3RyeXtlLmFwcGx5KGkscil9ZmluYWxseXtXej1vfX0pKG5ldyBoRihhLGUsdC5vdXRwdXQodGhpcy5zdGF0ZS5zZWxlY3Rpb24pKSxyLmFwcGx5LHIsW2UsdGhpcy50aGF0LHRoaXMuYXJnc10pfX0sYS5leHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp1RihbWyt0WzBdWzBdLCt0WzBdWzFdXSxbK3RbMV1bMF0sK3RbMV1bMV1dXSksYSk6bn0sYS5maWx0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp1RighIXQpLGEpOml9LGEuaGFuZGxlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0rdCxhKTpvfSxhLm9uPWZ1bmN0aW9uKCl7dmFyIHQ9ci5vbi5hcHBseShyLGFyZ3VtZW50cyk7cmV0dXJuIHQ9PT1yP2E6dH0sYX1mdW5jdGlvbiBPRih0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6dD49ZT8wOk5hTn1mdW5jdGlvbiBSRih0LGUsbil7dD0rdCxlPStlLG49KHI9YXJndW1lbnRzLmxlbmd0aCk8Mj8oZT10LHQ9MCwxKTpyPDM/MTorbjtmb3IodmFyIGk9LTEscj0wfE1hdGgubWF4KDAsTWF0aC5jZWlsKChlLXQpL24pKSxvPW5ldyBBcnJheShyKTsrK2k8cjspb1tpXT10K2kqbjtyZXR1cm4gb30hKGZ1bmN0aW9uIHpGKHQpezE9PT10Lmxlbmd0aCYmKHQ9KGZ1bmN0aW9uIGUodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7cmV0dXJuIE9GKHQoZSksbil9fSkodCkpfSkoT0YpO3ZhciBERj1NYXRoLmNvcyxCRj1NYXRoLnNpbixIRj1NYXRoLlBJLEZGPUhGLzIsVkY9MipIRixVRj1NYXRoLm1heDtmdW5jdGlvbiBqRih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXtyZXR1cm4gdChlLnNvdXJjZS52YWx1ZStlLnRhcmdldC52YWx1ZSxuLnNvdXJjZS52YWx1ZStuLnRhcmdldC52YWx1ZSl9fXZhciBHRj1BcnJheS5wcm90b3R5cGUuc2xpY2U7ZnVuY3Rpb24gV0YodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fXZhciBxRj1NYXRoLlBJLFlGPTIqcUYsWEY9MWUtNiwkRj1ZRi1YRjtmdW5jdGlvbiBLRigpe3RoaXMuX3gwPXRoaXMuX3kwPXRoaXMuX3gxPXRoaXMuX3kxPW51bGwsdGhpcy5fPSIifWZ1bmN0aW9uIFpGKCl7cmV0dXJuIG5ldyBLRn1mdW5jdGlvbiBKRih0KXtyZXR1cm4gdC5zb3VyY2V9ZnVuY3Rpb24gUUYodCl7cmV0dXJuIHQudGFyZ2V0fWZ1bmN0aW9uIHRWKHQpe3JldHVybiB0LnJhZGl1c31mdW5jdGlvbiBlVih0KXtyZXR1cm4gdC5zdGFydEFuZ2xlfWZ1bmN0aW9uIG5WKHQpe3JldHVybiB0LmVuZEFuZ2xlfUtGLnByb3RvdHlwZT1aRi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOktGLG1vdmVUbzpmdW5jdGlvbih0LGUpe3RoaXMuXys9Ik0iKyh0aGlzLl94MD10aGlzLl94MT0rdCkrIiwiKyh0aGlzLl95MD10aGlzLl95MT0rZSl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe251bGwhPT10aGlzLl94MSYmKHRoaXMuX3gxPXRoaXMuX3gwLHRoaXMuX3kxPXRoaXMuX3kwLHRoaXMuXys9IloiKX0sbGluZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fKz0iTCIrKHRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kxPStlKX0scXVhZHJhdGljQ3VydmVUbzpmdW5jdGlvbih0LGUsbixpKXt0aGlzLl8rPSJRIisgK3QrIiwiKyArZSsiLCIrKHRoaXMuX3gxPStuKSsiLCIrKHRoaXMuX3kxPStpKX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbih0LGUsbixpLHIsbyl7dGhpcy5fKz0iQyIrICt0KyIsIisgK2UrIiwiKyArbisiLCIrICtpKyIsIisodGhpcy5feDE9K3IpKyIsIisodGhpcy5feTE9K28pfSxhcmNUbzpmdW5jdGlvbih0LGUsbixpLHIpe3ZhciBvPXRoaXMuX3gxLGE9dGhpcy5feTEscz0obj0rbiktKHQ9K3QpLGw9KGk9K2kpLShlPStlKSxjPW8tdCx1PWEtZSxoPWMqYyt1KnU7aWYoKHI9K3IpPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrcik7aWYobnVsbD09PXRoaXMuX3gxKXRoaXMuXys9Ik0iKyh0aGlzLl94MT10KSsiLCIrKHRoaXMuX3kxPWUpO2Vsc2UgaWYoaD5YRilpZihNYXRoLmFicyh1KnMtbCpjKT5YRiYmcil7dmFyIGQ9bi1vLHA9aS1hLGY9cypzK2wqbCxtPWQqZCtwKnAsZz1NYXRoLnNxcnQoZiksXz1NYXRoLnNxcnQoaCkseT1yKk1hdGgudGFuKChxRi1NYXRoLmFjb3MoKGYraC1tKS8oMipnKl8pKSkvMiksdj15L18sYj15L2c7TWF0aC5hYnModi0xKT5YRiYmKHRoaXMuXys9IkwiKyh0K3YqYykrIiwiKyhlK3YqdSkpLHRoaXMuXys9IkEiK3IrIiwiK3IrIiwwLDAsIisgKyh1KmQ+YypwKSsiLCIrKHRoaXMuX3gxPXQrYipzKSsiLCIrKHRoaXMuX3kxPWUrYipsKX1lbHNlIHRoaXMuXys9IkwiKyh0aGlzLl94MT10KSsiLCIrKHRoaXMuX3kxPWUpfSxhcmM6ZnVuY3Rpb24odCxlLG4saSxyLG8pe3Q9K3QsZT0rZSxvPSEhbzt2YXIgYT0obj0rbikqTWF0aC5jb3MoaSkscz1uKk1hdGguc2luKGkpLGw9dCthLGM9ZStzLHU9MV5vLGg9bz9pLXI6ci1pO2lmKG48MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIituKTtudWxsPT09dGhpcy5feDE/dGhpcy5fKz0iTSIrbCsiLCIrYzooTWF0aC5hYnModGhpcy5feDEtbCk+WEZ8fE1hdGguYWJzKHRoaXMuX3kxLWMpPlhGKSYmKHRoaXMuXys9IkwiK2wrIiwiK2MpLG4mJihoPDAmJihoPWglWUYrWUYpLGg+JEY/dGhpcy5fKz0iQSIrbisiLCIrbisiLDAsMSwiK3UrIiwiKyh0LWEpKyIsIisoZS1zKSsiQSIrbisiLCIrbisiLDAsMSwiK3UrIiwiKyh0aGlzLl94MT1sKSsiLCIrKHRoaXMuX3kxPWMpOmg+WEYmJih0aGlzLl8rPSJBIituKyIsIituKyIsMCwiKyArKGg+PXFGKSsiLCIrdSsiLCIrKHRoaXMuX3gxPXQrbipNYXRoLmNvcyhyKSkrIiwiKyh0aGlzLl95MT1lK24qTWF0aC5zaW4ocikpKSl9LHJlY3Q6ZnVuY3Rpb24odCxlLG4saSl7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPStlKSsiaCIrICtuKyJ2IisgK2krImgiKy1uKyJaIn0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ffX07dmFyIGlWPSIkIjtmdW5jdGlvbiByVigpe31mdW5jdGlvbiBvVih0LGUpe3ZhciBuPW5ldyByVjtpZih0IGluc3RhbmNlb2YgclYpdC5lYWNoKChmdW5jdGlvbih0LGUpe24uc2V0KGUsdCl9KSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KHQpKXt2YXIgaSxyPS0xLG89dC5sZW5ndGg7aWYobnVsbD09ZSlmb3IoOysrcjxvOyluLnNldChyLHRbcl0pO2Vsc2UgZm9yKDsrK3I8bzspbi5zZXQoZShpPXRbcl0scix0KSxpKX1lbHNlIGlmKHQpZm9yKHZhciBhIGluIHQpbi5zZXQoYSx0W2FdKTtyZXR1cm4gbn1mdW5jdGlvbiBhVigpe3JldHVybnt9fWZ1bmN0aW9uIHNWKHQsZSxuKXt0W2VdPW59ZnVuY3Rpb24gbFYoKXtyZXR1cm4gb1YoKX1mdW5jdGlvbiBjVih0LGUsbil7dC5zZXQoZSxuKX1mdW5jdGlvbiB1Vigpe31yVi5wcm90b3R5cGU9b1YucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpyVixoYXM6ZnVuY3Rpb24odCl7cmV0dXJuIGlWK3QgaW4gdGhpc30sZ2V0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzW2lWK3RdfSxzZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpc1tpVit0XT1lLHRoaXN9LHJlbW92ZTpmdW5jdGlvbih0KXt2YXIgZT1pVit0O3JldHVybiBlIGluIHRoaXMmJmRlbGV0ZSB0aGlzW2VdfSxjbGVhcjpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1pViYmZGVsZXRlIHRoaXNbdF19LGtleXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcyllWzBdPT09aVYmJnQucHVzaChlLnNsaWNlKDEpKTtyZXR1cm4gdH0sdmFsdWVzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMpZVswXT09PWlWJiZ0LnB1c2godGhpc1tlXSk7cmV0dXJuIHR9LGVudHJpZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcyllWzBdPT09aVYmJnQucHVzaCh7a2V5OmUuc2xpY2UoMSksdmFsdWU6dGhpc1tlXX0pO3JldHVybiB0fSxzaXplOmZ1bmN0aW9uKCl7dmFyIHQ9MDtmb3IodmFyIGUgaW4gdGhpcyllWzBdPT09aVYmJisrdDtyZXR1cm4gdH0sZW1wdHk6ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcylpZih0WzBdPT09aVYpcmV0dXJuITE7cmV0dXJuITB9LGVhY2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMpZVswXT09PWlWJiZ0KHRoaXNbZV0sZS5zbGljZSgxKSx0aGlzKX19O3ZhciBoVj1vVi5wcm90b3R5cGU7ZnVuY3Rpb24gZFYodCxlKXt2YXIgbj1uZXcgdVY7aWYodCBpbnN0YW5jZW9mIHVWKXQuZWFjaCgoZnVuY3Rpb24odCl7bi5hZGQodCl9KSk7ZWxzZSBpZih0KXt2YXIgaT0tMSxyPXQubGVuZ3RoO2lmKG51bGw9PWUpZm9yKDsrK2k8cjspbi5hZGQodFtpXSk7ZWxzZSBmb3IoOysraTxyOyluLmFkZChlKHRbaV0saSx0KSl9cmV0dXJuIG59ZnVuY3Rpb24gcFYodCxlLG4pe3QucHJvdG90eXBlPWUucHJvdG90eXBlPW4sbi5jb25zdHJ1Y3Rvcj10fWZ1bmN0aW9uIGZWKHQsZSl7dmFyIG49T2JqZWN0LmNyZWF0ZSh0LnByb3RvdHlwZSk7Zm9yKHZhciBpIGluIGUpbltpXT1lW2ldO3JldHVybiBufWZ1bmN0aW9uIG1WKCl7fXVWLnByb3RvdHlwZT1kVi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnVWLGhhczpoVi5oYXMsYWRkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzW2lWKyh0Kz0iIildPXQsdGhpc30scmVtb3ZlOmhWLnJlbW92ZSxjbGVhcjpoVi5jbGVhcix2YWx1ZXM6aFYua2V5cyxzaXplOmhWLnNpemUsZW1wdHk6aFYuZW1wdHksZWFjaDpoVi5lYWNofTt2YXIgZ1Y9LjcsX1Y9MS9nVix5Vj0iXFxzKihbKy1dP1xcZCspXFxzKiIsdlY9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pXFxzKiIsYlY9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pJVxccyoiLHhWPS9eIyhbMC05YS1mXXszfSkkLyx3Vj0vXiMoWzAtOWEtZl17Nn0pJC8sU1Y9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW3lWLHlWLHlWXSsiXFwpJCIpLE1WPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tiVixiVixiVl0rIlxcKSQiKSxFVj1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW3lWLHlWLHlWLHZWXSsiXFwpJCIpLFRWPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbYlYsYlYsYlYsdlZdKyJcXCkkIiksQ1Y9bmV3IFJlZ0V4cCgiXmhzbFxcKCIrW3ZWLGJWLGJWXSsiXFwpJCIpLEFWPW5ldyBSZWdFeHAoIl5oc2xhXFwoIitbdlYsYlYsYlYsdlZdKyJcXCkkIiksa1Y9e2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH07ZnVuY3Rpb24gTFYodCl7dmFyIGU7cmV0dXJuIHQ9KHQrIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLChlPXhWLmV4ZWModCkpP25ldyBSVigoZT1wYXJzZUludChlWzFdLDE2KSk+PjgmMTV8ZT4+NCYyNDAsZT4+NCYxNXwyNDAmZSwoMTUmZSk8PDR8MTUmZSwxKTooZT13Vi5leGVjKHQpKT9QVihwYXJzZUludChlWzFdLDE2KSk6KGU9U1YuZXhlYyh0KSk/bmV3IFJWKGVbMV0sZVsyXSxlWzNdLDEpOihlPU1WLmV4ZWModCkpP25ldyBSVigyNTUqZVsxXS8xMDAsMjU1KmVbMl0vMTAwLDI1NSplWzNdLzEwMCwxKTooZT1FVi5leGVjKHQpKT9OVihlWzFdLGVbMl0sZVszXSxlWzRdKTooZT1UVi5leGVjKHQpKT9OVigyNTUqZVsxXS8xMDAsMjU1KmVbMl0vMTAwLDI1NSplWzNdLzEwMCxlWzRdKTooZT1DVi5leGVjKHQpKT96VihlWzFdLGVbMl0vMTAwLGVbM10vMTAwLDEpOihlPUFWLmV4ZWModCkpP3pWKGVbMV0sZVsyXS8xMDAsZVszXS8xMDAsZVs0XSk6a1YuaGFzT3duUHJvcGVydHkodCk/UFYoa1ZbdF0pOiJ0cmFuc3BhcmVudCI9PT10P25ldyBSVihOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIFBWKHQpe3JldHVybiBuZXcgUlYodD4+MTYmMjU1LHQ+PjgmMjU1LDI1NSZ0LDEpfWZ1bmN0aW9uIE5WKHQsZSxuLGkpe3JldHVybiBpPD0wJiYodD1lPW49TmFOKSxuZXcgUlYodCxlLG4saSl9ZnVuY3Rpb24gSVYodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBtVnx8KHQ9TFYodCkpLHQ/bmV3IFJWKCh0PXQucmdiKCkpLnIsdC5nLHQuYix0Lm9wYWNpdHkpOm5ldyBSVn1mdW5jdGlvbiBPVih0LGUsbixpKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/SVYodCk6bmV3IFJWKHQsZSxuLG51bGw9PWk/MTppKX1mdW5jdGlvbiBSVih0LGUsbixpKXt0aGlzLnI9K3QsdGhpcy5nPStlLHRoaXMuYj0rbix0aGlzLm9wYWNpdHk9K2l9ZnVuY3Rpb24gelYodCxlLG4saSl7cmV0dXJuIGk8PTA/dD1lPW49TmFOOm48PTB8fG4+PTE/dD1lPU5hTjplPD0wJiYodD1OYU4pLG5ldyBIVih0LGUsbixpKX1mdW5jdGlvbiBEVih0KXtpZih0IGluc3RhbmNlb2YgSFYpcmV0dXJuIG5ldyBIVih0LmgsdC5zLHQubCx0Lm9wYWNpdHkpO2lmKHQgaW5zdGFuY2VvZiBtVnx8KHQ9TFYodCkpLCF0KXJldHVybiBuZXcgSFY7aWYodCBpbnN0YW5jZW9mIEhWKXJldHVybiB0O3ZhciBlPSh0PXQucmdiKCkpLnIvMjU1LG49dC5nLzI1NSxpPXQuYi8yNTUscj1NYXRoLm1pbihlLG4saSksbz1NYXRoLm1heChlLG4saSksYT1OYU4scz1vLXIsbD0obytyKS8yO3JldHVybiBzPyhhPWU9PT1vPyhuLWkpL3MrNioobjxpKTpuPT09bz8oaS1lKS9zKzI6KGUtbikvcys0LHMvPWw8LjU/bytyOjItby1yLGEqPTYwKTpzPWw+MCYmbDwxPzA6YSxuZXcgSFYoYSxzLGwsdC5vcGFjaXR5KX1mdW5jdGlvbiBCVih0LGUsbixpKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/RFYodCk6bmV3IEhWKHQsZSxuLG51bGw9PWk/MTppKX1mdW5jdGlvbiBIVih0LGUsbixpKXt0aGlzLmg9K3QsdGhpcy5zPStlLHRoaXMubD0rbix0aGlzLm9wYWNpdHk9K2l9ZnVuY3Rpb24gRlYodCxlLG4pe3JldHVybiAyNTUqKHQ8NjA/ZSsobi1lKSp0LzYwOnQ8MTgwP246dDwyNDA/ZSsobi1lKSooMjQwLXQpLzYwOmUpfXBWKG1WLExWLHtkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkrIiJ9fSkscFYoUlYsT1YsZlYobVYse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/X1Y6TWF0aC5wb3coX1YsdCksbmV3IFJWKHRoaXMucip0LHRoaXMuZyp0LHRoaXMuYip0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P2dWOk1hdGgucG93KGdWLHQpLG5ldyBSVih0aGlzLnIqdCx0aGlzLmcqdCx0aGlzLmIqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gMDw9dGhpcy5yJiZ0aGlzLnI8PTI1NSYmMDw9dGhpcy5nJiZ0aGlzLmc8PTI1NSYmMDw9dGhpcy5iJiZ0aGlzLmI8PTI1NSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcGFjaXR5O3JldHVybigxPT09KHQ9aXNOYU4odCk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsdCkpKT8icmdiKCI6InJnYmEoIikrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLnIpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuZyl8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5iKXx8MCkpKygxPT09dD8iKSI6IiwgIit0KyIpIil9fSkpLHBWKEhWLEJWLGZWKG1WLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P19WOk1hdGgucG93KF9WLHQpLG5ldyBIVih0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P2dWOk1hdGgucG93KGdWLHQpLG5ldyBIVih0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PXRoaXMuaCUzNjArMzYwKih0aGlzLmg8MCksZT1pc05hTih0KXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxuPXRoaXMubCxpPW4rKG48LjU/bjoxLW4pKmUscj0yKm4taTtyZXR1cm4gbmV3IFJWKEZWKHQ+PTI0MD90LTI0MDp0KzEyMCxyLGkpLEZWKHQscixpKSxGVih0PDEyMD90KzI0MDp0LTEyMCxyLGkpLHRoaXMub3BhY2l0eSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfX0pKTt2YXIgVlY9TWF0aC5QSS8xODAsVVY9MTgwL01hdGguUEksalY9Ljk1MDQ3LEdWPTEuMDg4ODMsV1Y9NC8yOSxxVj02LzI5LFlWPTMqcVYqcVY7ZnVuY3Rpb24gWFYodCl7aWYodCBpbnN0YW5jZW9mIEtWKXJldHVybiBuZXcgS1YodC5sLHQuYSx0LmIsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgaVUpe3ZhciBlPXQuaCpWVjtyZXR1cm4gbmV3IEtWKHQubCxNYXRoLmNvcyhlKSp0LmMsTWF0aC5zaW4oZSkqdC5jLHQub3BhY2l0eSl9dCBpbnN0YW5jZW9mIFJWfHwodD1JVih0KSk7dmFyIG49dFUodC5yKSxpPXRVKHQuZykscj10VSh0LmIpLG89WlYoKC40MTI0NTY0Km4rLjM1NzU3NjEqaSsuMTgwNDM3NSpyKS9qViksYT1aVigoLjIxMjY3MjkqbisuNzE1MTUyMippKy4wNzIxNzUqcikvMSk7cmV0dXJuIG5ldyBLVigxMTYqYS0xNiw1MDAqKG8tYSksMjAwKihhLVpWKCguMDE5MzMzOSpuKy4xMTkxOTIqaSsuOTUwMzA0MSpyKS9HVikpLHQub3BhY2l0eSl9ZnVuY3Rpb24gJFYodCxlLG4saSl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP1hWKHQpOm5ldyBLVih0LGUsbixudWxsPT1pPzE6aSl9ZnVuY3Rpb24gS1YodCxlLG4saSl7dGhpcy5sPSt0LHRoaXMuYT0rZSx0aGlzLmI9K24sdGhpcy5vcGFjaXR5PStpfWZ1bmN0aW9uIFpWKHQpe3JldHVybiB0Pi4wMDg4NTY0NTE2NzkwMzU2MzE/TWF0aC5wb3codCwxLzMpOnQvWVYrV1Z9ZnVuY3Rpb24gSlYodCl7cmV0dXJuIHQ+cVY/dCp0KnQ6WVYqKHQtV1YpfWZ1bmN0aW9uIFFWKHQpe3JldHVybiAyNTUqKHQ8PS4wMDMxMzA4PzEyLjkyKnQ6MS4wNTUqTWF0aC5wb3codCwxLzIuNCktLjA1NSl9ZnVuY3Rpb24gdFUodCl7cmV0dXJuKHQvPTI1NSk8PS4wNDA0NT90LzEyLjkyOk1hdGgucG93KCh0Ky4wNTUpLzEuMDU1LDIuNCl9ZnVuY3Rpb24gZVUodCl7aWYodCBpbnN0YW5jZW9mIGlVKXJldHVybiBuZXcgaVUodC5oLHQuYyx0LmwsdC5vcGFjaXR5KTt0IGluc3RhbmNlb2YgS1Z8fCh0PVhWKHQpKTt2YXIgZT1NYXRoLmF0YW4yKHQuYix0LmEpKlVWO3JldHVybiBuZXcgaVUoZTwwP2UrMzYwOmUsTWF0aC5zcXJ0KHQuYSp0LmErdC5iKnQuYiksdC5sLHQub3BhY2l0eSl9ZnVuY3Rpb24gblUodCxlLG4saSl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP2VVKHQpOm5ldyBpVSh0LGUsbixudWxsPT1pPzE6aSl9ZnVuY3Rpb24gaVUodCxlLG4saSl7dGhpcy5oPSt0LHRoaXMuYz0rZSx0aGlzLmw9K24sdGhpcy5vcGFjaXR5PStpfXBWKEtWLCRWLGZWKG1WLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IEtWKHRoaXMubCsxOCoobnVsbD09dD8xOnQpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgS1YodGhpcy5sLTE4KihudWxsPT10PzE6dCksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD0odGhpcy5sKzE2KS8xMTYsZT1pc05hTih0aGlzLmEpP3Q6dCt0aGlzLmEvNTAwLG49aXNOYU4odGhpcy5iKT90OnQtdGhpcy5iLzIwMDtyZXR1cm4gdD0xKkpWKHQpLG5ldyBSVihRVigzLjI0MDQ1NDIqKGU9alYqSlYoZSkpLTEuNTM3MTM4NSp0LS40OTg1MzE0KihuPUdWKkpWKG4pKSksUVYoLS45NjkyNjYqZSsxLjg3NjAxMDgqdCsuMDQxNTU2Km4pLFFWKC4wNTU2NDM0KmUtLjIwNDAyNTkqdCsxLjA1NzIyNTIqbiksdGhpcy5vcGFjaXR5KX19KSkscFYoaVUsblUsZlYobVYse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgaVUodGhpcy5oLHRoaXMuYyx0aGlzLmwrMTgqKG51bGw9PXQ/MTp0KSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBpVSh0aGlzLmgsdGhpcy5jLHRoaXMubC0xOCoobnVsbD09dD8xOnQpLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiBYVih0aGlzKS5yZ2IoKX19KSk7dmFyIHJVPS0uMjkyMjcsb1U9LS45MDY0OSxhVT0xLjk3Mjk0O2Z1bmN0aW9uIHNVKHQpe2lmKHQgaW5zdGFuY2VvZiBjVSlyZXR1cm4gbmV3IGNVKHQuaCx0LnMsdC5sLHQub3BhY2l0eSk7dCBpbnN0YW5jZW9mIFJWfHwodD1JVih0KSk7dmFyIGU9dC5nLzI1NSxuPXQuYi8yNTUsaT0oLS42NTU3NjM2NjY3OTk5OTk5Km4rdC5yLzI1NSotMS43ODg0NTAzODA2LTMuNTE3Mjk4MjQzOCplKS8tNS45NjE1MTIyOTEyLHI9bi1pLG89KGFVKihlLWkpLXJVKnIpL29VLGE9TWF0aC5zcXJ0KG8qbytyKnIpLyhhVSppKigxLWkpKSxzPWE/TWF0aC5hdGFuMihvLHIpKlVWLTEyMDpOYU47cmV0dXJuIG5ldyBjVShzPDA/cyszNjA6cyxhLGksdC5vcGFjaXR5KX1mdW5jdGlvbiBsVSh0LGUsbixpKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/c1UodCk6bmV3IGNVKHQsZSxuLG51bGw9PWk/MTppKX1mdW5jdGlvbiBjVSh0LGUsbixpKXt0aGlzLmg9K3QsdGhpcy5zPStlLHRoaXMubD0rbix0aGlzLm9wYWNpdHk9K2l9cFYoY1UsbFUsZlYobVYse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/X1Y6TWF0aC5wb3coX1YsdCksbmV3IGNVKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/Z1Y6TWF0aC5wb3coZ1YsdCksbmV3IGNVKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIHQ9aXNOYU4odGhpcy5oKT8wOih0aGlzLmgrMTIwKSpWVixlPSt0aGlzLmwsbj1pc05hTih0aGlzLnMpPzA6dGhpcy5zKmUqKDEtZSksaT1NYXRoLmNvcyh0KSxyPU1hdGguc2luKHQpO3JldHVybiBuZXcgUlYoMjU1KihlK24qKC0uMTQ4NjEqaSsxLjc4Mjc3KnIpKSwyNTUqKGUrbiooclUqaStvVSpyKSksMjU1KihlK24qKGFVKmkpKSx0aGlzLm9wYWNpdHkpfX0pKTt2YXIgdVU9e3ZhbHVlOmZ1bmN0aW9uKCl7fX07ZnVuY3Rpb24gaFUoKXtmb3IodmFyIHQsZT0wLG49YXJndW1lbnRzLmxlbmd0aCxpPXt9O2U8bjsrK2Upe2lmKCEodD1hcmd1bWVudHNbZV0rIiIpfHx0IGluIGkpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrdCk7aVt0XT1bXX1yZXR1cm4gbmV3IGRVKGkpfWZ1bmN0aW9uIGRVKHQpe3RoaXMuXz10fWZ1bmN0aW9uIHBVKHQsZSl7cmV0dXJuIHQudHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcCgoZnVuY3Rpb24odCl7dmFyIG49IiIsaT10LmluZGV4T2YoIi4iKTtpZihpPj0wJiYobj10LnNsaWNlKGkrMSksdD10LnNsaWNlKDAsaSkpLHQmJiFlLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO3JldHVybnt0eXBlOnQsbmFtZTpufX0pKX1mdW5jdGlvbiBmVSh0LGUpe2Zvcih2YXIgbixpPTAscj10Lmxlbmd0aDtpPHI7KytpKWlmKChuPXRbaV0pLm5hbWU9PT1lKXJldHVybiBuLnZhbHVlfWZ1bmN0aW9uIG1VKHQsZSxuKXtmb3IodmFyIGk9MCxyPXQubGVuZ3RoO2k8cjsrK2kpaWYodFtpXS5uYW1lPT09ZSl7dFtpXT11VSx0PXQuc2xpY2UoMCxpKS5jb25jYXQodC5zbGljZShpKzEpKTticmVha31yZXR1cm4gbnVsbCE9biYmdC5wdXNoKHtuYW1lOmUsdmFsdWU6bn0pLHR9ZFUucHJvdG90eXBlPWhVLnByb3RvdHlwZT17Y29uc3RydWN0b3I6ZFUsb246ZnVuY3Rpb24odCxlKXt2YXIgbixpPXRoaXMuXyxyPXBVKHQrIiIsaSksbz0tMSxhPXIubGVuZ3RoO2lmKCEoYXJndW1lbnRzLmxlbmd0aDwyKSl7aWYobnVsbCE9ZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrOiAiK2UpO2Zvcig7KytvPGE7KWlmKG49KHQ9cltvXSkudHlwZSlpW25dPW1VKGlbbl0sdC5uYW1lLGUpO2Vsc2UgaWYobnVsbD09ZSlmb3IobiBpbiBpKWlbbl09bVUoaVtuXSx0Lm5hbWUsbnVsbCk7cmV0dXJuIHRoaXN9Zm9yKDsrK288YTspaWYoKG49KHQ9cltvXSkudHlwZSkmJihuPWZVKGlbbl0sdC5uYW1lKSkpcmV0dXJuIG59LGNvcHk6ZnVuY3Rpb24oKXt2YXIgdD17fSxlPXRoaXMuXztmb3IodmFyIG4gaW4gZSl0W25dPWVbbl0uc2xpY2UoKTtyZXR1cm4gbmV3IGRVKHQpfSxjYWxsOmZ1bmN0aW9uKHQsZSl7aWYoKG49YXJndW1lbnRzLmxlbmd0aC0yKT4wKWZvcih2YXIgbixpLHI9bmV3IEFycmF5KG4pLG89MDtvPG47KytvKXJbb109YXJndW1lbnRzW28rMl07aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtmb3Iobz0wLG49KGk9dGhpcy5fW3RdKS5sZW5ndGg7bzxuOysrbylpW29dLnZhbHVlLmFwcGx5KGUscil9LGFwcGx5OmZ1bmN0aW9uKHQsZSxuKXtpZighdGhpcy5fLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO2Zvcih2YXIgaT10aGlzLl9bdF0scj0wLG89aS5sZW5ndGg7cjxvOysrcilpW3JdLnZhbHVlLmFwcGx5KGUsbil9fTt2YXIgZ1U9e3ZhbHVlOmZ1bmN0aW9uKCl7fX07ZnVuY3Rpb24gX1UoKXtmb3IodmFyIHQsZT0wLG49YXJndW1lbnRzLmxlbmd0aCxpPXt9O2U8bjsrK2Upe2lmKCEodD1hcmd1bWVudHNbZV0rIiIpfHx0IGluIGl8fC9bXHMuXS8udGVzdCh0KSl0aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgdHlwZTogIit0KTtpW3RdPVtdfXJldHVybiBuZXcgeVUoaSl9ZnVuY3Rpb24geVUodCl7dGhpcy5fPXR9ZnVuY3Rpb24gdlUodCxlKXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLykubWFwKChmdW5jdGlvbih0KXt2YXIgbj0iIixpPXQuaW5kZXhPZigiLiIpO2lmKGk+PTAmJihuPXQuc2xpY2UoaSsxKSx0PXQuc2xpY2UoMCxpKSksdCYmIWUuaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7cmV0dXJue3R5cGU6dCxuYW1lOm59fSkpfWZ1bmN0aW9uIGJVKHQsZSl7Zm9yKHZhciBuLGk9MCxyPXQubGVuZ3RoO2k8cjsrK2kpaWYoKG49dFtpXSkubmFtZT09PWUpcmV0dXJuIG4udmFsdWV9ZnVuY3Rpb24geFUodCxlLG4pe2Zvcih2YXIgaT0wLHI9dC5sZW5ndGg7aTxyOysraSlpZih0W2ldLm5hbWU9PT1lKXt0W2ldPWdVLHQ9dC5zbGljZSgwLGkpLmNvbmNhdCh0LnNsaWNlKGkrMSkpO2JyZWFrfXJldHVybiBudWxsIT1uJiZ0LnB1c2goe25hbWU6ZSx2YWx1ZTpufSksdH15VS5wcm90b3R5cGU9X1UucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp5VSxvbjpmdW5jdGlvbih0LGUpe3ZhciBuLGk9dGhpcy5fLHI9dlUodCsiIixpKSxvPS0xLGE9ci5sZW5ndGg7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtpZihudWxsIT1lJiYiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrZSk7Zm9yKDsrK288YTspaWYobj0odD1yW29dKS50eXBlKWlbbl09eFUoaVtuXSx0Lm5hbWUsZSk7ZWxzZSBpZihudWxsPT1lKWZvcihuIGluIGkpaVtuXT14VShpW25dLHQubmFtZSxudWxsKTtyZXR1cm4gdGhpc31mb3IoOysrbzxhOylpZigobj0odD1yW29dKS50eXBlKSYmKG49YlUoaVtuXSx0Lm5hbWUpKSlyZXR1cm4gbn0sY29weTpmdW5jdGlvbigpe3ZhciB0PXt9LGU9dGhpcy5fO2Zvcih2YXIgbiBpbiBlKXRbbl09ZVtuXS5zbGljZSgpO3JldHVybiBuZXcgeVUodCl9LGNhbGw6ZnVuY3Rpb24odCxlKXtpZigobj1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciBuLGkscj1uZXcgQXJyYXkobiksbz0wO288bjsrK28pcltvXT1hcmd1bWVudHNbbysyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO2ZvcihvPTAsbj0oaT10aGlzLl9bdF0pLmxlbmd0aDtvPG47KytvKWlbb10udmFsdWUuYXBwbHkoZSxyKX0sYXBwbHk6ZnVuY3Rpb24odCxlLG4pe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7Zm9yKHZhciBpPXRoaXMuX1t0XSxyPTAsbz1pLmxlbmd0aDtyPG87KytyKWlbcl0udmFsdWUuYXBwbHkoZSxuKX19O3ZhciB3VT0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsU1U9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOndVLHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIn07ZnVuY3Rpb24gTVUodCl7dmFyIGU9dCs9IiIsbj1lLmluZGV4T2YoIjoiKTtyZXR1cm4gbj49MCYmInhtbG5zIiE9PShlPXQuc2xpY2UoMCxuKSkmJih0PXQuc2xpY2UobisxKSksU1UuaGFzT3duUHJvcGVydHkoZSk/e3NwYWNlOlNVW2VdLGxvY2FsOnR9OnR9ZnVuY3Rpb24gRVUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vd25lckRvY3VtZW50LG49dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIG49PT13VSYmZS5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09d1U/ZS5jcmVhdGVFbGVtZW50KHQpOmUuY3JlYXRlRWxlbWVudE5TKG4sdCl9fWZ1bmN0aW9uIFRVKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHQuc3BhY2UsdC5sb2NhbCl9fWZ1bmN0aW9uIENVKHQpe3ZhciBlPU1VKHQpO3JldHVybihlLmxvY2FsP1RVOkVVKShlKX1mdW5jdGlvbiBBVSgpe31mdW5jdGlvbiBrVSh0KXtyZXR1cm4gbnVsbD09dD9BVTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3IodCl9fWZ1bmN0aW9uIExVKCl7cmV0dXJuW119ZnVuY3Rpb24gUFUodCl7cmV0dXJuIG5ldyBBcnJheSh0Lmxlbmd0aCl9ZnVuY3Rpb24gTlUodCxlKXt0aGlzLm93bmVyRG9jdW1lbnQ9dC5vd25lckRvY3VtZW50LHRoaXMubmFtZXNwYWNlVVJJPXQubmFtZXNwYWNlVVJJLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wYXJlbnQ9dCx0aGlzLl9fZGF0YV9fPWV9ZnVuY3Rpb24gSVUodCxlLG4saSxyLG8pe2Zvcih2YXIgYSxzPTAsbD1lLmxlbmd0aCxjPW8ubGVuZ3RoO3M8YzsrK3MpKGE9ZVtzXSk/KGEuX19kYXRhX189b1tzXSxpW3NdPWEpOm5bc109bmV3IE5VKHQsb1tzXSk7Zm9yKDtzPGw7KytzKShhPWVbc10pJiYocltzXT1hKX1mdW5jdGlvbiBPVSh0LGUsbixpLHIsbyxhKXt2YXIgcyxsLGMsdT17fSxoPWUubGVuZ3RoLGQ9by5sZW5ndGgscD1uZXcgQXJyYXkoaCk7Zm9yKHM9MDtzPGg7KytzKShsPWVbc10pJiYocFtzXT1jPSIkIithLmNhbGwobCxsLl9fZGF0YV9fLHMsZSksYyBpbiB1P3Jbc109bDp1W2NdPWwpO2ZvcihzPTA7czxkOysrcykobD11W2M9IiQiK2EuY2FsbCh0LG9bc10scyxvKV0pPyhpW3NdPWwsbC5fX2RhdGFfXz1vW3NdLHVbY109bnVsbCk6bltzXT1uZXcgTlUodCxvW3NdKTtmb3Iocz0wO3M8aDsrK3MpKGw9ZVtzXSkmJnVbcFtzXV09PT1sJiYocltzXT1sKX1mdW5jdGlvbiBSVSh0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6dD49ZT8wOk5hTn1mdW5jdGlvbiB6VSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX19ZnVuY3Rpb24gRFUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpfX1mdW5jdGlvbiBCVSh0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKHQsZSl9fWZ1bmN0aW9uIEhVKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwsZSl9fWZ1bmN0aW9uIEZVKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09bj90aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KTp0aGlzLnNldEF0dHJpYnV0ZSh0LG4pfX1mdW5jdGlvbiBWVSh0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PW4/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsLG4pfX1mdW5jdGlvbiBVVSh0KXtyZXR1cm4gdC5vd25lckRvY3VtZW50JiZ0Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fHQuZG9jdW1lbnQmJnR8fHQuZGVmYXVsdFZpZXd9ZnVuY3Rpb24galUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KX19ZnVuY3Rpb24gR1UodCxlLG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxlLG4pfX1mdW5jdGlvbiBXVSh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGk9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09aT90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxpLG4pfX1mdW5jdGlvbiBxVSh0LGUpe3JldHVybiB0LnN0eWxlLmdldFByb3BlcnR5VmFsdWUoZSl8fFVVKHQpLmdldENvbXB1dGVkU3R5bGUodCxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKGUpfWZ1bmN0aW9uIFlVKHQpe3JldHVybiBmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW3RdfX1mdW5jdGlvbiBYVSh0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbdF09ZX19ZnVuY3Rpb24gJFUodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1uP2RlbGV0ZSB0aGlzW3RdOnRoaXNbdF09bn19ZnVuY3Rpb24gS1UodCl7cmV0dXJuIHQudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIFpVKHQpe3JldHVybiB0LmNsYXNzTGlzdHx8bmV3IEpVKHQpfWZ1bmN0aW9uIEpVKHQpe3RoaXMuX25vZGU9dCx0aGlzLl9uYW1lcz1LVSh0LmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfWZ1bmN0aW9uIFFVKHQsZSl7Zm9yKHZhciBuPVpVKHQpLGk9LTEscj1lLmxlbmd0aDsrK2k8cjspbi5hZGQoZVtpXSl9ZnVuY3Rpb24gdGoodCxlKXtmb3IodmFyIG49WlUodCksaT0tMSxyPWUubGVuZ3RoOysraTxyOyluLnJlbW92ZShlW2ldKX1mdW5jdGlvbiBlaih0KXtyZXR1cm4gZnVuY3Rpb24oKXtRVSh0aGlzLHQpfX1mdW5jdGlvbiBuaih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aih0aGlzLHQpfX1mdW5jdGlvbiBpaih0LGUpe3JldHVybiBmdW5jdGlvbigpeyhlLmFwcGx5KHRoaXMsYXJndW1lbnRzKT9RVTp0aikodGhpcyx0KX19ZnVuY3Rpb24gcmooKXt0aGlzLnRleHRDb250ZW50PSIifWZ1bmN0aW9uIG9qKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9dH19ZnVuY3Rpb24gYWoodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD1udWxsPT1lPyIiOmV9fWZ1bmN0aW9uIHNqKCl7dGhpcy5pbm5lckhUTUw9IiJ9ZnVuY3Rpb24gbGoodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9dH19ZnVuY3Rpb24gY2oodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5pbm5lckhUTUw9bnVsbD09ZT8iIjplfX1mdW5jdGlvbiB1aigpe3RoaXMubmV4dFNpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzKX1mdW5jdGlvbiBoaigpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIGRqKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gcGooKXt2YXIgdD10aGlzLnBhcmVudE5vZGU7dCYmdC5yZW1vdmVDaGlsZCh0aGlzKX1mdW5jdGlvbiBmaigpe3ZhciB0PXRoaXMuY2xvbmVOb2RlKCExKSxlPXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gZT9lLmluc2VydEJlZm9yZSh0LHRoaXMubmV4dFNpYmxpbmcpOnR9ZnVuY3Rpb24gbWooKXt2YXIgdD10aGlzLmNsb25lTm9kZSghMCksZT10aGlzLnBhcmVudE5vZGU7cmV0dXJuIGU/ZS5pbnNlcnRCZWZvcmUodCx0aGlzLm5leHRTaWJsaW5nKTp0fU5VLnByb3RvdHlwZT17Y29uc3RydWN0b3I6TlUsYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUodCx0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUodCxlKX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3IodCl9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKHQpfX0sSlUucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24odCl7dGhpcy5fbmFtZXMuaW5kZXhPZih0KTwwJiYodGhpcy5fbmFtZXMucHVzaCh0KSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxyZW1vdmU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbmFtZXMuaW5kZXhPZih0KTtlPj0wJiYodGhpcy5fbmFtZXMuc3BsaWNlKGUsMSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0sY29udGFpbnM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2YodCk+PTB9fTt2YXIgZ2o9e30sX2o9bnVsbDtmdW5jdGlvbiB5aih0LGUsbil7cmV0dXJuIHQ9dmoodCxlLG4pLGZ1bmN0aW9uKGUpe3ZhciBuPWUucmVsYXRlZFRhcmdldDtuJiYobj09PXRoaXN8fDgmbi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0aGlzKSl8fHQuY2FsbCh0aGlzLGUpfX1mdW5jdGlvbiB2aih0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKGkpe3ZhciByPV9qO19qPWk7dHJ5e3QuY2FsbCh0aGlzLHRoaXMuX19kYXRhX18sZSxuKX1maW5hbGx5e19qPXJ9fX1mdW5jdGlvbiBiaih0KXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLykubWFwKChmdW5jdGlvbih0KXt2YXIgZT0iIixuPXQuaW5kZXhPZigiLiIpO3JldHVybiBuPj0wJiYoZT10LnNsaWNlKG4rMSksdD10LnNsaWNlKDAsbikpLHt0eXBlOnQsbmFtZTplfX0pKX1mdW5jdGlvbiB4aih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9fb247aWYoZSl7Zm9yKHZhciBuLGk9MCxyPS0xLG89ZS5sZW5ndGg7aTxvOysraSluPWVbaV0sdC50eXBlJiZuLnR5cGUhPT10LnR5cGV8fG4ubmFtZSE9PXQubmFtZT9lWysrcl09bjp0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIobi50eXBlLG4ubGlzdGVuZXIsbi5jYXB0dXJlKTsrK3I/ZS5sZW5ndGg9cjpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gd2oodCxlLG4pe3ZhciBpPWdqLmhhc093blByb3BlcnR5KHQudHlwZSk/eWo6dmo7cmV0dXJuIGZ1bmN0aW9uKHIsbyxhKXt2YXIgcyxsPXRoaXMuX19vbixjPWkoZSxvLGEpO2lmKGwpZm9yKHZhciB1PTAsaD1sLmxlbmd0aDt1PGg7Kyt1KWlmKChzPWxbdV0pLnR5cGU9PT10LnR5cGUmJnMubmFtZT09PXQubmFtZSlyZXR1cm4gdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKHMudHlwZSxzLmxpc3RlbmVyLHMuY2FwdHVyZSksdGhpcy5hZGRFdmVudExpc3RlbmVyKHMudHlwZSxzLmxpc3RlbmVyPWMscy5jYXB0dXJlPW4pLHZvaWQocy52YWx1ZT1lKTt0aGlzLmFkZEV2ZW50TGlzdGVuZXIodC50eXBlLGMsbikscz17dHlwZTp0LnR5cGUsbmFtZTp0Lm5hbWUsdmFsdWU6ZSxsaXN0ZW5lcjpjLGNhcHR1cmU6bn0sbD9sLnB1c2gocyk6dGhpcy5fX29uPVtzXX19ZnVuY3Rpb24gU2oodCxlLG4saSl7dmFyIHI9X2o7dC5zb3VyY2VFdmVudD1faixfaj10O3RyeXtyZXR1cm4gZS5hcHBseShuLGkpfWZpbmFsbHl7X2o9cn19ZnVuY3Rpb24gTWoodCxlLG4pe3ZhciBpPVVVKHQpLHI9aS5DdXN0b21FdmVudDsiZnVuY3Rpb24iPT10eXBlb2Ygcj9yPW5ldyByKGUsbik6KHI9aS5kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSxuPyhyLmluaXRFdmVudChlLG4uYnViYmxlcyxuLmNhbmNlbGFibGUpLHIuZGV0YWlsPW4uZGV0YWlsKTpyLmluaXRFdmVudChlLCExLCExKSksdC5kaXNwYXRjaEV2ZW50KHIpfWZ1bmN0aW9uIEVqKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIE1qKHRoaXMsdCxlKX19ZnVuY3Rpb24gVGoodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTWoodGhpcyx0LGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19InVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudCYmKCJvbm1vdXNlZW50ZXIiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fHwoZ2o9e21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSkpO3ZhciBDaj1bbnVsbF07ZnVuY3Rpb24gQWoodCxlKXt0aGlzLl9ncm91cHM9dCx0aGlzLl9wYXJlbnRzPWV9ZnVuY3Rpb24ga2oodCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P25ldyBBaihbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodCldXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IEFqKFtbdF1dLENqKX1mdW5jdGlvbiBMaigpe2Zvcih2YXIgdCxlPV9qO3Q9ZS5zb3VyY2VFdmVudDspZT10O3JldHVybiBlfWZ1bmN0aW9uIFBqKHQsZSl7dmFyIG49dC5vd25lclNWR0VsZW1lbnR8fHQ7aWYobi5jcmVhdGVTVkdQb2ludCl7dmFyIGk9bi5jcmVhdGVTVkdQb2ludCgpO3JldHVybiBpLng9ZS5jbGllbnRYLGkueT1lLmNsaWVudFksWyhpPWkubWF0cml4VHJhbnNmb3JtKHQuZ2V0U2NyZWVuQ1RNKCkuaW52ZXJzZSgpKSkueCxpLnldfXZhciByPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW2UuY2xpZW50WC1yLmxlZnQtdC5jbGllbnRMZWZ0LGUuY2xpZW50WS1yLnRvcC10LmNsaWVudFRvcF19ZnVuY3Rpb24gTmoodCl7dmFyIGU9TGooKTtyZXR1cm4gZS5jaGFuZ2VkVG91Y2hlcyYmKGU9ZS5jaGFuZ2VkVG91Y2hlc1swXSksUGoodCxlKX1mdW5jdGlvbiBJaih0LGUsbil7YXJndW1lbnRzLmxlbmd0aDwzJiYobj1lLGU9TGooKS5jaGFuZ2VkVG91Y2hlcyk7Zm9yKHZhciBpLHI9MCxvPWU/ZS5sZW5ndGg6MDtyPG87KytyKWlmKChpPWVbcl0pLmlkZW50aWZpZXI9PT1uKXJldHVybiBQaih0LGkpO3JldHVybiBudWxsfWZ1bmN0aW9uIE9qKCl7X2ouc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gUmooKXtfai5wcmV2ZW50RGVmYXVsdCgpLF9qLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIHpqKHQpe3ZhciBlPXQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LG49a2oodCkub24oImRyYWdzdGFydC5kcmFnIixSaiwhMCk7Im9uc2VsZWN0c3RhcnQiaW4gZT9uLm9uKCJzZWxlY3RzdGFydC5kcmFnIixSaiwhMCk6KGUuX19ub3NlbGVjdD1lLnN0eWxlLk1velVzZXJTZWxlY3QsZS5zdHlsZS5Nb3pVc2VyU2VsZWN0PSJub25lIil9ZnVuY3Rpb24gRGoodCxlKXt2YXIgbj10LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxpPWtqKHQpLm9uKCJkcmFnc3RhcnQuZHJhZyIsbnVsbCk7ZSYmKGkub24oImNsaWNrLmRyYWciLFJqLCEwKSxzZXRUaW1lb3V0KChmdW5jdGlvbigpe2kub24oImNsaWNrLmRyYWciLG51bGwpfSksMCkpLCJvbnNlbGVjdHN0YXJ0ImluIG4/aS5vbigic2VsZWN0c3RhcnQuZHJhZyIsbnVsbCk6KG4uc3R5bGUuTW96VXNlclNlbGVjdD1uLl9fbm9zZWxlY3QsZGVsZXRlIG4uX19ub3NlbGVjdCl9ZnVuY3Rpb24gQmoodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIEhqKHQsZSxuLGkscixvLGEscyxsLGMpe3RoaXMudGFyZ2V0PXQsdGhpcy50eXBlPWUsdGhpcy5zdWJqZWN0PW4sdGhpcy5pZGVudGlmaWVyPWksdGhpcy5hY3RpdmU9cix0aGlzLng9byx0aGlzLnk9YSx0aGlzLmR4PXMsdGhpcy5keT1sLHRoaXMuXz1jfWZ1bmN0aW9uIEZqKCl7cmV0dXJuIV9qLmJ1dHRvbn1mdW5jdGlvbiBWaigpe3JldHVybiB0aGlzLnBhcmVudE5vZGV9ZnVuY3Rpb24gVWoodCl7cmV0dXJuIG51bGw9PXQ/e3g6X2oueCx5Ol9qLnl9OnR9ZnVuY3Rpb24gamooKXtyZXR1cm4ib250b3VjaHN0YXJ0ImluIHRoaXN9QWoucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpBaixzZWxlY3Q6ZnVuY3Rpb24gR2oodCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PWtVKHQpKTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49ZS5sZW5ndGgsaT1uZXcgQXJyYXkobikscj0wO3I8bjsrK3IpZm9yKHZhciBvLGEscz1lW3JdLGw9cy5sZW5ndGgsYz1pW3JdPW5ldyBBcnJheShsKSx1PTA7dTxsOysrdSkobz1zW3VdKSYmKGE9dC5jYWxsKG8sby5fX2RhdGFfXyx1LHMpKSYmKCJfX2RhdGFfXyJpbiBvJiYoYS5fX2RhdGFfXz1vLl9fZGF0YV9fKSxjW3VdPWEpO3JldHVybiBuZXcgQWooaSx0aGlzLl9wYXJlbnRzKX0sc2VsZWN0QWxsOmZ1bmN0aW9uIFdqKHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD0oZnVuY3Rpb24gZSh0KXtyZXR1cm4gbnVsbD09dD9MVTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwodCl9fSkodCkpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxyPVtdLG89W10sYT0wO2E8aTsrK2EpZm9yKHZhciBzLGw9blthXSxjPWwubGVuZ3RoLHU9MDt1PGM7Kyt1KShzPWxbdV0pJiYoci5wdXNoKHQuY2FsbChzLHMuX19kYXRhX18sdSxsKSksby5wdXNoKHMpKTtyZXR1cm4gbmV3IEFqKHIsbyl9LGZpbHRlcjpmdW5jdGlvbiBxaih0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9KGZ1bmN0aW9uIGUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2hlcyh0KX19KSh0KSk7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLHI9bmV3IEFycmF5KGkpLG89MDtvPGk7KytvKWZvcih2YXIgYSxzPW5bb10sbD1zLmxlbmd0aCxjPXJbb109W10sdT0wO3U8bDsrK3UpKGE9c1t1XSkmJnQuY2FsbChhLGEuX19kYXRhX18sdSxzKSYmYy5wdXNoKGEpO3JldHVybiBuZXcgQWoocix0aGlzLl9wYXJlbnRzKX0sZGF0YTpmdW5jdGlvbiBZaih0LGUpe2lmKCF0KXJldHVybiBmPW5ldyBBcnJheSh0aGlzLnNpemUoKSksdT0tMSx0aGlzLmVhY2goKGZ1bmN0aW9uKHQpe2ZbKyt1XT10fSkpLGY7dmFyIG49ZT9PVTpJVSxpPXRoaXMuX3BhcmVudHMscj10aGlzLl9ncm91cHM7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PShmdW5jdGlvbiBvKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0pKHQpKTtmb3IodmFyIGE9ci5sZW5ndGgscz1uZXcgQXJyYXkoYSksbD1uZXcgQXJyYXkoYSksYz1uZXcgQXJyYXkoYSksdT0wO3U8YTsrK3Upe3ZhciBoPWlbdV0sZD1yW3VdLHA9ZC5sZW5ndGgsZj10LmNhbGwoaCxoJiZoLl9fZGF0YV9fLHUsaSksbT1mLmxlbmd0aCxnPWxbdV09bmV3IEFycmF5KG0pLF89c1t1XT1uZXcgQXJyYXkobSk7bihoLGQsZyxfLGNbdV09bmV3IEFycmF5KHApLGYsZSk7Zm9yKHZhciB5LHYsYj0wLHg9MDtiPG07KytiKWlmKHk9Z1tiXSl7Zm9yKGI+PXgmJih4PWIrMSk7ISh2PV9beF0pJiYrK3g8bTspO3kuX25leHQ9dnx8bnVsbH19cmV0dXJuKHM9bmV3IEFqKHMsaSkpLl9lbnRlcj1sLHMuX2V4aXQ9YyxzfSxlbnRlcjpmdW5jdGlvbiBYaigpe3JldHVybiBuZXcgQWoodGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAoUFUpLHRoaXMuX3BhcmVudHMpfSxleGl0OmZ1bmN0aW9uICRqKCl7cmV0dXJuIG5ldyBBaih0aGlzLl9leGl0fHx0aGlzLl9ncm91cHMubWFwKFBVKSx0aGlzLl9wYXJlbnRzKX0sam9pbjpmdW5jdGlvbiBLaih0LGUsbil7dmFyIGk9dGhpcy5lbnRlcigpLHI9dGhpcyxvPXRoaXMuZXhpdCgpO3JldHVybiBpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3QoaSk6aS5hcHBlbmQodCsiIiksbnVsbCE9ZSYmKHI9ZShyKSksbnVsbD09bj9vLnJlbW92ZSgpOm4obyksaSYmcj9pLm1lcmdlKHIpLm9yZGVyKCk6cn0sbWVyZ2U6ZnVuY3Rpb24gWmoodCl7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPXQuX2dyb3VwcyxpPWUubGVuZ3RoLHI9TWF0aC5taW4oaSxuLmxlbmd0aCksbz1uZXcgQXJyYXkoaSksYT0wO2E8cjsrK2EpZm9yKHZhciBzLGw9ZVthXSxjPW5bYV0sdT1sLmxlbmd0aCxoPW9bYV09bmV3IEFycmF5KHUpLGQ9MDtkPHU7KytkKShzPWxbZF18fGNbZF0pJiYoaFtkXT1zKTtmb3IoO2E8aTsrK2Epb1thXT1lW2FdO3JldHVybiBuZXcgQWoobyx0aGlzLl9wYXJlbnRzKX0sb3JkZXI6ZnVuY3Rpb24gSmooKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9LTEsbj10Lmxlbmd0aDsrK2U8bjspZm9yKHZhciBpLHI9dFtlXSxvPXIubGVuZ3RoLTEsYT1yW29dOy0tbz49MDspKGk9cltvXSkmJihhJiY0XmkuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYSkmJmEucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoaSxhKSxhPWkpO3JldHVybiB0aGlzfSxzb3J0OmZ1bmN0aW9uIFFqKHQpe2Z1bmN0aW9uIGUoZSxuKXtyZXR1cm4gZSYmbj90KGUuX19kYXRhX18sbi5fX2RhdGFfXyk6IWUtIW59dHx8KHQ9UlUpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxyPW5ldyBBcnJheShpKSxvPTA7bzxpOysrbyl7Zm9yKHZhciBhLHM9bltvXSxsPXMubGVuZ3RoLGM9cltvXT1uZXcgQXJyYXkobCksdT0wO3U8bDsrK3UpKGE9c1t1XSkmJihjW3VdPWEpO2Muc29ydChlKX1yZXR1cm4gbmV3IEFqKHIsdGhpcy5fcGFyZW50cykub3JkZXIoKX0sY2FsbDpmdW5jdGlvbiB0Rygpe3ZhciB0PWFyZ3VtZW50c1swXTtyZXR1cm4gYXJndW1lbnRzWzBdPXRoaXMsdC5hcHBseShudWxsLGFyZ3VtZW50cyksdGhpc30sbm9kZXM6ZnVuY3Rpb24gZUcoKXt2YXIgdD1uZXcgQXJyYXkodGhpcy5zaXplKCkpLGU9LTE7cmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oKXt0WysrZV09dGhpc30pKSx0fSxub2RlOmZ1bmN0aW9uIG5HKCl7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPTAsbj10Lmxlbmd0aDtlPG47KytlKWZvcih2YXIgaT10W2VdLHI9MCxvPWkubGVuZ3RoO3I8bzsrK3Ipe3ZhciBhPWlbcl07aWYoYSlyZXR1cm4gYX1yZXR1cm4gbnVsbH0sc2l6ZTpmdW5jdGlvbiBpRygpe3ZhciB0PTA7cmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oKXsrK3R9KSksdH0sZW1wdHk6ZnVuY3Rpb24gckcoKXtyZXR1cm4hdGhpcy5ub2RlKCl9LGVhY2g6ZnVuY3Rpb24gb0codCl7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPTAsaT1lLmxlbmd0aDtuPGk7KytuKWZvcih2YXIgcixvPWVbbl0sYT0wLHM9by5sZW5ndGg7YTxzOysrYSkocj1vW2FdKSYmdC5jYWxsKHIsci5fX2RhdGFfXyxhLG8pO3JldHVybiB0aGlzfSxhdHRyOmZ1bmN0aW9uIGFHKHQsZSl7dmFyIG49TVUodCk7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgaT10aGlzLm5vZGUoKTtyZXR1cm4gbi5sb2NhbD9pLmdldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCk6aS5nZXRBdHRyaWJ1dGUobil9cmV0dXJuIHRoaXMuZWFjaCgobnVsbD09ZT9uLmxvY2FsP0RVOnpVOiJmdW5jdGlvbiI9PXR5cGVvZiBlP24ubG9jYWw/VlU6RlU6bi5sb2NhbD9IVTpCVSkobixlKSl9LHN0eWxlOmZ1bmN0aW9uIHNHKHQsZSxuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgobnVsbD09ZT9qVToiZnVuY3Rpb24iPT10eXBlb2YgZT9XVTpHVSkodCxlLG51bGw9PW4/IiI6bikpOnFVKHRoaXMubm9kZSgpLHQpfSxwcm9wZXJ0eTpmdW5jdGlvbiBsRyh0LGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChudWxsPT1lP1lVOiJmdW5jdGlvbiI9PXR5cGVvZiBlPyRVOlhVKSh0LGUpKTp0aGlzLm5vZGUoKVt0XX0sY2xhc3NlZDpmdW5jdGlvbiBjRyh0LGUpe3ZhciBuPUtVKHQrIiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBpPVpVKHRoaXMubm9kZSgpKSxyPS0xLG89bi5sZW5ndGg7KytyPG87KWlmKCFpLmNvbnRhaW5zKG5bcl0pKXJldHVybiExO3JldHVybiEwfXJldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBlP2lqOmU/ZWo6bmopKG4sZSkpfSx0ZXh0OmZ1bmN0aW9uIHVHKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChudWxsPT10P3JqOigiZnVuY3Rpb24iPT10eXBlb2YgdD9hajpvaikodCkpOnRoaXMubm9kZSgpLnRleHRDb250ZW50fSxodG1sOmZ1bmN0aW9uIGhHKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChudWxsPT10P3NqOigiZnVuY3Rpb24iPT10eXBlb2YgdD9jajpsaikodCkpOnRoaXMubm9kZSgpLmlubmVySFRNTH0scmFpc2U6ZnVuY3Rpb24gZEcoKXtyZXR1cm4gdGhpcy5lYWNoKHVqKX0sbG93ZXI6ZnVuY3Rpb24gcEcoKXtyZXR1cm4gdGhpcy5lYWNoKGhqKX0sYXBwZW5kOmZ1bmN0aW9uIGZHKHQpe3ZhciBlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6Q1UodCk7cmV0dXJuIHRoaXMuc2VsZWN0KChmdW5jdGlvbigpe3JldHVybiB0aGlzLmFwcGVuZENoaWxkKGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0pKX0saW5zZXJ0OmZ1bmN0aW9uIG1HKHQsZSl7dmFyIG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpDVSh0KSxpPW51bGw9PWU/ZGo6ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTprVShlKTtyZXR1cm4gdGhpcy5zZWxlY3QoKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKG4uYXBwbHkodGhpcyxhcmd1bWVudHMpLGkuYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxsKX0pKX0scmVtb3ZlOmZ1bmN0aW9uIGdHKCl7cmV0dXJuIHRoaXMuZWFjaChwail9LGNsb25lOmZ1bmN0aW9uIF9HKHQpe3JldHVybiB0aGlzLnNlbGVjdCh0P21qOmZqKX0sZGF0dW06ZnVuY3Rpb24geUcodCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iLHQpOnRoaXMubm9kZSgpLl9fZGF0YV9ffSxvbjpmdW5jdGlvbiB2Ryh0LGUsbil7dmFyIGkscixvPWJqKHQrIiIpLGE9by5sZW5ndGg7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtmb3Iocz1lP3dqOnhqLG51bGw9PW4mJihuPSExKSxpPTA7aTxhOysraSl0aGlzLmVhY2gocyhvW2ldLGUsbikpO3JldHVybiB0aGlzfXZhciBzPXRoaXMubm9kZSgpLl9fb247aWYocylmb3IodmFyIGwsYz0wLHU9cy5sZW5ndGg7Yzx1OysrYylmb3IoaT0wLGw9c1tjXTtpPGE7KytpKWlmKChyPW9baV0pLnR5cGU9PT1sLnR5cGUmJnIubmFtZT09PWwubmFtZSlyZXR1cm4gbC52YWx1ZX0sZGlzcGF0Y2g6ZnVuY3Rpb24gYkcodCxlKXtyZXR1cm4gdGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgZT9UajpFaikodCxlKSl9fSxIai5wcm90b3R5cGUub249ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl8ub24uYXBwbHkodGhpcy5fLGFyZ3VtZW50cyk7cmV0dXJuIHQ9PT10aGlzLl8/dGhpczp0fTt2YXIgeEc9e30sd0c9e307ZnVuY3Rpb24gU0codCl7cmV0dXJuIG5ldyBGdW5jdGlvbigiZCIsInJldHVybiB7Iit0Lm1hcCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodCkrIjogZFsiK2UrIl0ifSkpLmpvaW4oIiwiKSsifSIpfWZ1bmN0aW9uIE1HKHQpe3ZhciBlPW5ldyBSZWdFeHAoJ1siJyt0KyJcblxyXSIpLG49dC5jaGFyQ29kZUF0KDApO2Z1bmN0aW9uIGkodCxlKXt2YXIgaSxyPVtdLG89dC5sZW5ndGgsYT0wLHM9MCxsPW88PTAsYz0hMTtmdW5jdGlvbiB1KCl7aWYobClyZXR1cm4gd0c7aWYoYylyZXR1cm4gYz0hMSx4Rzt2YXIgZSxpLHI9YTtpZigzND09PXQuY2hhckNvZGVBdChyKSl7Zm9yKDthKys8byYmMzQhPT10LmNoYXJDb2RlQXQoYSl8fDM0PT09dC5jaGFyQ29kZUF0KCsrYSk7KTtyZXR1cm4oZT1hKT49bz9sPSEwOjEwPT09KGk9dC5jaGFyQ29kZUF0KGErKykpP2M9ITA6MTM9PT1pJiYoYz0hMCwxMD09PXQuY2hhckNvZGVBdChhKSYmKythKSx0LnNsaWNlKHIrMSxlLTEpLnJlcGxhY2UoLyIiL2csJyInKX1mb3IoO2E8bzspe2lmKDEwPT09KGk9dC5jaGFyQ29kZUF0KGU9YSsrKSkpYz0hMDtlbHNlIGlmKDEzPT09aSljPSEwLDEwPT09dC5jaGFyQ29kZUF0KGEpJiYrK2E7ZWxzZSBpZihpIT09biljb250aW51ZTtyZXR1cm4gdC5zbGljZShyLGUpfXJldHVybiBsPSEwLHQuc2xpY2UocixvKX1mb3IoMTA9PT10LmNoYXJDb2RlQXQoby0xKSYmLS1vLDEzPT09dC5jaGFyQ29kZUF0KG8tMSkmJi0tbzsoaT11KCkpIT09d0c7KXtmb3IodmFyIGg9W107aSE9PXhHJiZpIT09d0c7KWgucHVzaChpKSxpPXUoKTtlJiZudWxsPT0oaD1lKGgscysrKSl8fHIucHVzaChoKX1yZXR1cm4gcn1mdW5jdGlvbiByKGUpe3JldHVybiBlLm1hcChvKS5qb2luKHQpfWZ1bmN0aW9uIG8odCl7cmV0dXJuIG51bGw9PXQ/IiI6ZS50ZXN0KHQrPSIiKT8nIicrdC5yZXBsYWNlKC8iL2csJyIiJykrJyInOnR9cmV0dXJue3BhcnNlOmZ1bmN0aW9uIGEodCxlKXt2YXIgbixyLG89aSh0LChmdW5jdGlvbih0LGkpe2lmKG4pcmV0dXJuIG4odCxpLTEpO3I9dCxuPWU/KGZ1bmN0aW9uIG8odCxlKXt2YXIgbj1TRyh0KTtyZXR1cm4gZnVuY3Rpb24oaSxyKXtyZXR1cm4gZShuKGkpLHIsdCl9fSkodCxlKTpTRyh0KX0pKTtyZXR1cm4gby5jb2x1bW5zPXJ8fFtdLG99LHBhcnNlUm93czppLGZvcm1hdDpmdW5jdGlvbiBzKGUsbil7cmV0dXJuIG51bGw9PW4mJihuPShmdW5jdGlvbiBpKHQpe3ZhciBlPU9iamVjdC5jcmVhdGUobnVsbCksbj1bXTtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbih0KXtmb3IodmFyIGkgaW4gdClpIGluIGV8fG4ucHVzaChlW2ldPWkpfSkpLG59KShlKSksW24ubWFwKG8pLmpvaW4odCldLmNvbmNhdChlLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIG4ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gbyhlW3RdKX0pKS5qb2luKHQpfSkpKS5qb2luKCJcbiIpfSxmb3JtYXRSb3dzOmZ1bmN0aW9uIGwodCl7cmV0dXJuIHQubWFwKHIpLmpvaW4oIlxuIil9fX12YXIgRUc9TUcoIiwiKSxURz1FRy5wYXJzZSxDRz1FRy5wYXJzZVJvd3MsQUc9RUcuZm9ybWF0LGtHPUVHLmZvcm1hdFJvd3MsTEc9TUcoIlx0IiksUEc9TEcucGFyc2UsTkc9TEcucGFyc2VSb3dzLElHPUxHLmZvcm1hdCxPRz1MRy5mb3JtYXRSb3dzO2Z1bmN0aW9uIFJHKHQpe3JldHVybigodCo9Mik8PTE/dCp0Oi0tdCooMi10KSsxKS8yfWZ1bmN0aW9uIHpHKHQpe3JldHVybigodCo9Mik8PTE/dCp0KnQ6KHQtPTIpKnQqdCsyKS8yfXZhciBERz0oZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBNYXRoLnBvdyh0LGUpfXJldHVybiBlPStlLG4uZXhwb25lbnQ9dCxufSkoMyksQkc9KGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gMS1NYXRoLnBvdygxLXQsZSl9cmV0dXJuIGU9K2Usbi5leHBvbmVudD10LG59KSgzKSxIRz0oZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybigodCo9Mik8PTE/TWF0aC5wb3codCxlKToyLU1hdGgucG93KDItdCxlKSkvMn1yZXR1cm4gZT0rZSxuLmV4cG9uZW50PXQsbn0pKDMpLEZHPU1hdGguUEksVkc9RkcvMjtmdW5jdGlvbiBVRyh0KXtyZXR1cm4oMS1NYXRoLmNvcyhGRyp0KSkvMn1mdW5jdGlvbiBqRyh0KXtyZXR1cm4oKHQqPTIpPD0xP01hdGgucG93KDIsMTAqdC0xMCk6Mi1NYXRoLnBvdygyLDEwLTEwKnQpKS8yfWZ1bmN0aW9uIEdHKHQpe3JldHVybigodCo9Mik8PTE/MS1NYXRoLnNxcnQoMS10KnQpOk1hdGguc3FydCgxLSh0LT0yKSp0KSsxKS8yfXZhciBXRz03LjU2MjU7ZnVuY3Rpb24gcUcodCl7cmV0dXJuKHQ9K3QpPC4zNjM2MzYzNjM2MzYzNjM2NT9XRyp0KnQ6dDwuNzI3MjcyNzI3MjcyNzI3Mz9XRyoodC09LjU0NTQ1NDU0NTQ1NDU0NTQpKnQrLjc1OnQ8LjkwOTA5MDkwOTA5MDkwOTE/V0cqKHQtPS44MTgxODE4MTgxODE4MTgyKSp0Ky45Mzc1OldHKih0LT0uOTU0NTQ1NDU0NTQ1NDU0NikqdCsuOTg0Mzc1fXZhciBZRz0xLjcwMTU4LFhHPShmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIHQqdCooKGUrMSkqdC1lKX1yZXR1cm4gZT0rZSxuLm92ZXJzaG9vdD10LG59KShZRyksJEc9KGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4tLXQqdCooKGUrMSkqdCtlKSsxfXJldHVybiBlPStlLG4ub3ZlcnNob290PXQsbn0pKFlHKSxLRz0oZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybigodCo9Mik8MT90KnQqKChlKzEpKnQtZSk6KHQtPTIpKnQqKChlKzEpKnQrZSkrMikvMn1yZXR1cm4gZT0rZSxuLm92ZXJzaG9vdD10LG59KShZRyksWkc9MipNYXRoLlBJLEpHPShmdW5jdGlvbiB0KGUsbil7dmFyIGk9TWF0aC5hc2luKDEvKGU9TWF0aC5tYXgoMSxlKSkpKihuLz1aRyk7ZnVuY3Rpb24gcih0KXtyZXR1cm4gZSpNYXRoLnBvdygyLDEwKi0tdCkqTWF0aC5zaW4oKGktdCkvbil9cmV0dXJuIHIuYW1wbGl0dWRlPWZ1bmN0aW9uKGUpe3JldHVybiB0KGUsbipaRyl9LHIucGVyaW9kPWZ1bmN0aW9uKG4pe3JldHVybiB0KGUsbil9LHJ9KSgxLC4zKSxRRz0oZnVuY3Rpb24gdChlLG4pe3ZhciBpPU1hdGguYXNpbigxLyhlPU1hdGgubWF4KDEsZSkpKSoobi89WkcpO2Z1bmN0aW9uIHIodCl7cmV0dXJuIDEtZSpNYXRoLnBvdygyLC0xMCoodD0rdCkpKk1hdGguc2luKCh0K2kpL24pfXJldHVybiByLmFtcGxpdHVkZT1mdW5jdGlvbihlKXtyZXR1cm4gdChlLG4qWkcpfSxyLnBlcmlvZD1mdW5jdGlvbihuKXtyZXR1cm4gdChlLG4pfSxyfSkoMSwuMyksdFc9KGZ1bmN0aW9uIHQoZSxuKXt2YXIgaT1NYXRoLmFzaW4oMS8oZT1NYXRoLm1heCgxLGUpKSkqKG4vPVpHKTtmdW5jdGlvbiByKHQpe3JldHVybigodD0yKnQtMSk8MD9lKk1hdGgucG93KDIsMTAqdCkqTWF0aC5zaW4oKGktdCkvbik6Mi1lKk1hdGgucG93KDIsLTEwKnQpKk1hdGguc2luKChpK3QpL24pKS8yfXJldHVybiByLmFtcGxpdHVkZT1mdW5jdGlvbihlKXtyZXR1cm4gdChlLG4qWkcpfSxyLnBlcmlvZD1mdW5jdGlvbihuKXtyZXR1cm4gdChlLG4pfSxyfSkoMSwuMyk7ZnVuY3Rpb24gZVcodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIG5XKCl7cmV0dXJuIDFlLTYqKE1hdGgucmFuZG9tKCktLjUpfWZ1bmN0aW9uIGlXKHQsZSxuLGkpe2lmKGlzTmFOKGUpfHxpc05hTihuKSlyZXR1cm4gdDt2YXIgcixvLGEscyxsLGMsdSxoLGQscD10Ll9yb290LGY9e2RhdGE6aX0sbT10Ll94MCxnPXQuX3kwLF89dC5feDEseT10Ll95MTtpZighcClyZXR1cm4gdC5fcm9vdD1mLHQ7Zm9yKDtwLmxlbmd0aDspaWYoKGM9ZT49KG89KG0rXykvMikpP209bzpfPW8sKHU9bj49KGE9KGcreSkvMikpP2c9YTp5PWEscj1wLCEocD1wW2g9dTw8MXxjXSkpcmV0dXJuIHJbaF09Zix0O2lmKHM9K3QuX3guY2FsbChudWxsLHAuZGF0YSksbD0rdC5feS5jYWxsKG51bGwscC5kYXRhKSxlPT09cyYmbj09PWwpcmV0dXJuIGYubmV4dD1wLHI/cltoXT1mOnQuX3Jvb3Q9Zix0O2Rve3I9cj9yW2hdPW5ldyBBcnJheSg0KTp0Ll9yb290PW5ldyBBcnJheSg0KSwoYz1lPj0obz0obStfKS8yKSk/bT1vOl89bywodT1uPj0oYT0oZyt5KS8yKSk/Zz1hOnk9YX13aGlsZSgoaD11PDwxfGMpPT0oZD0obD49YSk8PDF8cz49bykpO3JldHVybiByW2RdPXAscltoXT1mLHR9ZnVuY3Rpb24gclcodCxlLG4saSxyKXt0aGlzLm5vZGU9dCx0aGlzLngwPWUsdGhpcy55MD1uLHRoaXMueDE9aSx0aGlzLnkxPXJ9ZnVuY3Rpb24gb1codCl7cmV0dXJuIHRbMF19ZnVuY3Rpb24gYVcodCl7cmV0dXJuIHRbMV19ZnVuY3Rpb24gc1codCxlLG4pe3ZhciBpPW5ldyBsVyhudWxsPT1lP29XOmUsbnVsbD09bj9hVzpuLE5hTixOYU4sTmFOLE5hTik7cmV0dXJuIG51bGw9PXQ/aTppLmFkZEFsbCh0KX1mdW5jdGlvbiBsVyh0LGUsbixpLHIsbyl7dGhpcy5feD10LHRoaXMuX3k9ZSx0aGlzLl94MD1uLHRoaXMuX3kwPWksdGhpcy5feDE9cix0aGlzLl95MT1vLHRoaXMuX3Jvb3Q9dm9pZCAwfWZ1bmN0aW9uIGNXKHQpe2Zvcih2YXIgZT17ZGF0YTp0LmRhdGF9LG49ZTt0PXQubmV4dDspbj1uLm5leHQ9e2RhdGE6dC5kYXRhfTtyZXR1cm4gZX12YXIgdVc9c1cucHJvdG90eXBlPWxXLnByb3RvdHlwZTtmdW5jdGlvbiBoVyh0KXtyZXR1cm4gdC54K3Qudnh9ZnVuY3Rpb24gZFcodCl7cmV0dXJuIHQueSt0LnZ5fXVXLmNvcHk9ZnVuY3Rpb24oKXt2YXIgdCxlLG49bmV3IGxXKHRoaXMuX3gsdGhpcy5feSx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSksaT10aGlzLl9yb290O2lmKCFpKXJldHVybiBuO2lmKCFpLmxlbmd0aClyZXR1cm4gbi5fcm9vdD1jVyhpKSxuO2Zvcih0PVt7c291cmNlOmksdGFyZ2V0Om4uX3Jvb3Q9bmV3IEFycmF5KDQpfV07aT10LnBvcCgpOylmb3IodmFyIHI9MDtyPDQ7KytyKShlPWkuc291cmNlW3JdKSYmKGUubGVuZ3RoP3QucHVzaCh7c291cmNlOmUsdGFyZ2V0OmkudGFyZ2V0W3JdPW5ldyBBcnJheSg0KX0pOmkudGFyZ2V0W3JdPWNXKGUpKTtyZXR1cm4gbn0sdVcuYWRkPWZ1bmN0aW9uIHBXKHQpe3ZhciBlPSt0aGlzLl94LmNhbGwobnVsbCx0KSxuPSt0aGlzLl95LmNhbGwobnVsbCx0KTtyZXR1cm4gaVcodGhpcy5jb3ZlcihlLG4pLGUsbix0KX0sdVcuYWRkQWxsPWZ1bmN0aW9uIGZXKHQpe3ZhciBlLG4saSxyLG89dC5sZW5ndGgsYT1uZXcgQXJyYXkobykscz1uZXcgQXJyYXkobyksbD0xLzAsYz0xLzAsdT0tMS8wLGg9LTEvMDtmb3Iobj0wO248bzsrK24paXNOYU4oaT0rdGhpcy5feC5jYWxsKG51bGwsZT10W25dKSl8fGlzTmFOKHI9K3RoaXMuX3kuY2FsbChudWxsLGUpKXx8KGFbbl09aSxzW25dPXIsaTxsJiYobD1pKSxpPnUmJih1PWkpLHI8YyYmKGM9cikscj5oJiYoaD1yKSk7aWYobD51fHxjPmgpcmV0dXJuIHRoaXM7Zm9yKHRoaXMuY292ZXIobCxjKS5jb3Zlcih1LGgpLG49MDtuPG87KytuKWlXKHRoaXMsYVtuXSxzW25dLHRbbl0pO3JldHVybiB0aGlzfSx1Vy5jb3Zlcj1mdW5jdGlvbiBtVyh0LGUpe2lmKGlzTmFOKHQ9K3QpfHxpc05hTihlPStlKSlyZXR1cm4gdGhpczt2YXIgbj10aGlzLl94MCxpPXRoaXMuX3kwLHI9dGhpcy5feDEsbz10aGlzLl95MTtpZihpc05hTihuKSlyPShuPU1hdGguZmxvb3IodCkpKzEsbz0oaT1NYXRoLmZsb29yKGUpKSsxO2Vsc2V7Zm9yKHZhciBhLHMsbD1yLW4sYz10aGlzLl9yb290O24+dHx8dD49cnx8aT5lfHxlPj1vOylzd2l0Y2gocz0oZTxpKTw8MXx0PG4sKGE9bmV3IEFycmF5KDQpKVtzXT1jLGM9YSxsKj0yLHMpe2Nhc2UgMDpyPW4rbCxvPWkrbDticmVhaztjYXNlIDE6bj1yLWwsbz1pK2w7YnJlYWs7Y2FzZSAyOnI9bitsLGk9by1sO2JyZWFrO2Nhc2UgMzpuPXItbCxpPW8tbH10aGlzLl9yb290JiZ0aGlzLl9yb290Lmxlbmd0aCYmKHRoaXMuX3Jvb3Q9Yyl9cmV0dXJuIHRoaXMuX3gwPW4sdGhpcy5feTA9aSx0aGlzLl94MT1yLHRoaXMuX3kxPW8sdGhpc30sdVcuZGF0YT1mdW5jdGlvbiBnVygpe3ZhciB0PVtdO3JldHVybiB0aGlzLnZpc2l0KChmdW5jdGlvbihlKXtpZighZS5sZW5ndGgpZG97dC5wdXNoKGUuZGF0YSl9d2hpbGUoZT1lLm5leHQpfSkpLHR9LHVXLmV4dGVudD1mdW5jdGlvbiBfVyh0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmNvdmVyKCt0WzBdWzBdLCt0WzBdWzFdKS5jb3ZlcigrdFsxXVswXSwrdFsxXVsxXSk6aXNOYU4odGhpcy5feDApP3ZvaWQgMDpbW3RoaXMuX3gwLHRoaXMuX3kwXSxbdGhpcy5feDEsdGhpcy5feTFdXX0sdVcuZmluZD1mdW5jdGlvbiB5Vyh0LGUsbil7dmFyIGkscixvLGEscyxsLGMsdT10aGlzLl94MCxoPXRoaXMuX3kwLGQ9dGhpcy5feDEscD10aGlzLl95MSxmPVtdLG09dGhpcy5fcm9vdDtmb3IobSYmZi5wdXNoKG5ldyByVyhtLHUsaCxkLHApKSxudWxsPT1uP249MS8wOih1PXQtbixoPWUtbixkPXQrbixwPWUrbixuKj1uKTtsPWYucG9wKCk7KWlmKCEoIShtPWwubm9kZSl8fChyPWwueDApPmR8fChvPWwueTApPnB8fChhPWwueDEpPHV8fChzPWwueTEpPGgpKWlmKG0ubGVuZ3RoKXt2YXIgZz0ocithKS8yLF89KG8rcykvMjtmLnB1c2gobmV3IHJXKG1bM10sZyxfLGEscyksbmV3IHJXKG1bMl0scixfLGcscyksbmV3IHJXKG1bMV0sZyxvLGEsXyksbmV3IHJXKG1bMF0scixvLGcsXykpLChjPShlPj1fKTw8MXx0Pj1nKSYmKGw9ZltmLmxlbmd0aC0xXSxmW2YubGVuZ3RoLTFdPWZbZi5sZW5ndGgtMS1jXSxmW2YubGVuZ3RoLTEtY109bCl9ZWxzZXt2YXIgeT10LSt0aGlzLl94LmNhbGwobnVsbCxtLmRhdGEpLHY9ZS0rdGhpcy5feS5jYWxsKG51bGwsbS5kYXRhKSxiPXkqeSt2KnY7aWYoYjxuKXt2YXIgeD1NYXRoLnNxcnQobj1iKTt1PXQteCxoPWUteCxkPXQreCxwPWUreCxpPW0uZGF0YX19cmV0dXJuIGl9LHVXLnJlbW92ZT1mdW5jdGlvbiB2Vyh0KXtpZihpc05hTihvPSt0aGlzLl94LmNhbGwobnVsbCx0KSl8fGlzTmFOKGE9K3RoaXMuX3kuY2FsbChudWxsLHQpKSlyZXR1cm4gdGhpczt2YXIgZSxuLGkscixvLGEscyxsLGMsdSxoLGQscD10aGlzLl9yb290LGY9dGhpcy5feDAsbT10aGlzLl95MCxnPXRoaXMuX3gxLF89dGhpcy5feTE7aWYoIXApcmV0dXJuIHRoaXM7aWYocC5sZW5ndGgpZm9yKDs7KXtpZigoYz1vPj0ocz0oZitnKS8yKSk/Zj1zOmc9cywodT1hPj0obD0obStfKS8yKSk/bT1sOl89bCxlPXAsIShwPXBbaD11PDwxfGNdKSlyZXR1cm4gdGhpcztpZighcC5sZW5ndGgpYnJlYWs7KGVbaCsxJjNdfHxlW2grMiYzXXx8ZVtoKzMmM10pJiYobj1lLGQ9aCl9Zm9yKDtwLmRhdGEhPT10OylpZihpPXAsIShwPXAubmV4dCkpcmV0dXJuIHRoaXM7cmV0dXJuKHI9cC5uZXh0KSYmZGVsZXRlIHAubmV4dCxpPyhyP2kubmV4dD1yOmRlbGV0ZSBpLm5leHQsdGhpcyk6ZT8ocj9lW2hdPXI6ZGVsZXRlIGVbaF0sKHA9ZVswXXx8ZVsxXXx8ZVsyXXx8ZVszXSkmJnA9PT0oZVszXXx8ZVsyXXx8ZVsxXXx8ZVswXSkmJiFwLmxlbmd0aCYmKG4/bltkXT1wOnRoaXMuX3Jvb3Q9cCksdGhpcyk6KHRoaXMuX3Jvb3Q9cix0aGlzKX0sdVcucmVtb3ZlQWxsPWZ1bmN0aW9uIGJXKHQpe2Zvcih2YXIgZT0wLG49dC5sZW5ndGg7ZTxuOysrZSl0aGlzLnJlbW92ZSh0W2VdKTtyZXR1cm4gdGhpc30sdVcucm9vdD1mdW5jdGlvbiB4Vygpe3JldHVybiB0aGlzLl9yb290fSx1Vy5zaXplPWZ1bmN0aW9uIHdXKCl7dmFyIHQ9MDtyZXR1cm4gdGhpcy52aXNpdCgoZnVuY3Rpb24oZSl7aWYoIWUubGVuZ3RoKWRveysrdH13aGlsZShlPWUubmV4dCl9KSksdH0sdVcudmlzaXQ9ZnVuY3Rpb24gU1codCl7dmFyIGUsbixpLHIsbyxhLHM9W10sbD10aGlzLl9yb290O2ZvcihsJiZzLnB1c2gobmV3IHJXKGwsdGhpcy5feDAsdGhpcy5feTAsdGhpcy5feDEsdGhpcy5feTEpKTtlPXMucG9wKCk7KWlmKCF0KGw9ZS5ub2RlLGk9ZS54MCxyPWUueTAsbz1lLngxLGE9ZS55MSkmJmwubGVuZ3RoKXt2YXIgYz0oaStvKS8yLHU9KHIrYSkvMjsobj1sWzNdKSYmcy5wdXNoKG5ldyByVyhuLGMsdSxvLGEpKSwobj1sWzJdKSYmcy5wdXNoKG5ldyByVyhuLGksdSxjLGEpKSwobj1sWzFdKSYmcy5wdXNoKG5ldyByVyhuLGMscixvLHUpKSwobj1sWzBdKSYmcy5wdXNoKG5ldyByVyhuLGkscixjLHUpKX1yZXR1cm4gdGhpc30sdVcudmlzaXRBZnRlcj1mdW5jdGlvbiBNVyh0KXt2YXIgZSxuPVtdLGk9W107Zm9yKHRoaXMuX3Jvb3QmJm4ucHVzaChuZXcgclcodGhpcy5fcm9vdCx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO2U9bi5wb3AoKTspe3ZhciByPWUubm9kZTtpZihyLmxlbmd0aCl7dmFyIG8sYT1lLngwLHM9ZS55MCxsPWUueDEsYz1lLnkxLHU9KGErbCkvMixoPShzK2MpLzI7KG89clswXSkmJm4ucHVzaChuZXcgclcobyxhLHMsdSxoKSksKG89clsxXSkmJm4ucHVzaChuZXcgclcobyx1LHMsbCxoKSksKG89clsyXSkmJm4ucHVzaChuZXcgclcobyxhLGgsdSxjKSksKG89clszXSkmJm4ucHVzaChuZXcgclcobyx1LGgsbCxjKSl9aS5wdXNoKGUpfWZvcig7ZT1pLnBvcCgpOyl0KGUubm9kZSxlLngwLGUueTAsZS54MSxlLnkxKTtyZXR1cm4gdGhpc30sdVcueD1mdW5jdGlvbiBFVyh0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feD10LHRoaXMpOnRoaXMuX3h9LHVXLnk9ZnVuY3Rpb24gVFcodCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX3k9dCx0aGlzKTp0aGlzLl95fTt2YXIgQ1c9IiQiO2Z1bmN0aW9uIEFXKCl7fWZ1bmN0aW9uIGtXKHQsZSl7dmFyIG49bmV3IEFXO2lmKHQgaW5zdGFuY2VvZiBBVyl0LmVhY2goKGZ1bmN0aW9uKHQsZSl7bi5zZXQoZSx0KX0pKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkodCkpe3ZhciBpLHI9LTEsbz10Lmxlbmd0aDtpZihudWxsPT1lKWZvcig7KytyPG87KW4uc2V0KHIsdFtyXSk7ZWxzZSBmb3IoOysrcjxvOyluLnNldChlKGk9dFtyXSxyLHQpLGkpfWVsc2UgaWYodClmb3IodmFyIGEgaW4gdCluLnNldChhLHRbYV0pO3JldHVybiBufWZ1bmN0aW9uIExXKCl7fUFXLnByb3RvdHlwZT1rVy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkFXLGhhczpmdW5jdGlvbih0KXtyZXR1cm4gQ1crdCBpbiB0aGlzfSxnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXNbQ1crdF19LHNldDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzW0NXK3RdPWUsdGhpc30scmVtb3ZlOmZ1bmN0aW9uKHQpe3ZhciBlPUNXK3Q7cmV0dXJuIGUgaW4gdGhpcyYmZGVsZXRlIHRoaXNbZV19LGNsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PUNXJiZkZWxldGUgdGhpc1t0XX0sa2V5czpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzKWVbMF09PT1DVyYmdC5wdXNoKGUuc2xpY2UoMSkpO3JldHVybiB0fSx2YWx1ZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcyllWzBdPT09Q1cmJnQucHVzaCh0aGlzW2VdKTtyZXR1cm4gdH0sZW50cmllczpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzKWVbMF09PT1DVyYmdC5wdXNoKHtrZXk6ZS5zbGljZSgxKSx2YWx1ZTp0aGlzW2VdfSk7cmV0dXJuIHR9LHNpemU6ZnVuY3Rpb24oKXt2YXIgdD0wO2Zvcih2YXIgZSBpbiB0aGlzKWVbMF09PT1DVyYmKyt0O3JldHVybiB0fSxlbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzKWlmKHRbMF09PT1DVylyZXR1cm4hMTtyZXR1cm4hMH0sZWFjaDpmdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcyllWzBdPT09Q1cmJnQodGhpc1tlXSxlLnNsaWNlKDEpLHRoaXMpfX07dmFyIFBXPWtXLnByb3RvdHlwZTtmdW5jdGlvbiBOVyh0KXtyZXR1cm4gdC5pbmRleH1mdW5jdGlvbiBJVyh0LGUpe3ZhciBuPXQuZ2V0KGUpO2lmKCFuKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIitlKTtyZXR1cm4gbn1MVy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkxXLGhhczpQVy5oYXMsYWRkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzW0NXKyh0Kz0iIildPXQsdGhpc30scmVtb3ZlOlBXLnJlbW92ZSxjbGVhcjpQVy5jbGVhcix2YWx1ZXM6UFcua2V5cyxzaXplOlBXLnNpemUsZW1wdHk6UFcuZW1wdHksZWFjaDpQVy5lYWNofTt2YXIgT1c9e3ZhbHVlOmZ1bmN0aW9uKCl7fX07ZnVuY3Rpb24gUlcoKXtmb3IodmFyIHQsZT0wLG49YXJndW1lbnRzLmxlbmd0aCxpPXt9O2U8bjsrK2Upe2lmKCEodD1hcmd1bWVudHNbZV0rIiIpfHx0IGluIGl8fC9bXHMuXS8udGVzdCh0KSl0aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgdHlwZTogIit0KTtpW3RdPVtdfXJldHVybiBuZXcgelcoaSl9ZnVuY3Rpb24gelcodCl7dGhpcy5fPXR9ZnVuY3Rpb24gRFcodCxlKXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLykubWFwKChmdW5jdGlvbih0KXt2YXIgbj0iIixpPXQuaW5kZXhPZigiLiIpO2lmKGk+PTAmJihuPXQuc2xpY2UoaSsxKSx0PXQuc2xpY2UoMCxpKSksdCYmIWUuaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7cmV0dXJue3R5cGU6dCxuYW1lOm59fSkpfWZ1bmN0aW9uIEJXKHQsZSl7Zm9yKHZhciBuLGk9MCxyPXQubGVuZ3RoO2k8cjsrK2kpaWYoKG49dFtpXSkubmFtZT09PWUpcmV0dXJuIG4udmFsdWV9ZnVuY3Rpb24gSFcodCxlLG4pe2Zvcih2YXIgaT0wLHI9dC5sZW5ndGg7aTxyOysraSlpZih0W2ldLm5hbWU9PT1lKXt0W2ldPU9XLHQ9dC5zbGljZSgwLGkpLmNvbmNhdCh0LnNsaWNlKGkrMSkpO2JyZWFrfXJldHVybiBudWxsIT1uJiZ0LnB1c2goe25hbWU6ZSx2YWx1ZTpufSksdH16Vy5wcm90b3R5cGU9UlcucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp6VyxvbjpmdW5jdGlvbih0LGUpe3ZhciBuLGk9dGhpcy5fLHI9RFcodCsiIixpKSxvPS0xLGE9ci5sZW5ndGg7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtpZihudWxsIT1lJiYiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrZSk7Zm9yKDsrK288YTspaWYobj0odD1yW29dKS50eXBlKWlbbl09SFcoaVtuXSx0Lm5hbWUsZSk7ZWxzZSBpZihudWxsPT1lKWZvcihuIGluIGkpaVtuXT1IVyhpW25dLHQubmFtZSxudWxsKTtyZXR1cm4gdGhpc31mb3IoOysrbzxhOylpZigobj0odD1yW29dKS50eXBlKSYmKG49QlcoaVtuXSx0Lm5hbWUpKSlyZXR1cm4gbn0sY29weTpmdW5jdGlvbigpe3ZhciB0PXt9LGU9dGhpcy5fO2Zvcih2YXIgbiBpbiBlKXRbbl09ZVtuXS5zbGljZSgpO3JldHVybiBuZXcgelcodCl9LGNhbGw6ZnVuY3Rpb24odCxlKXtpZigobj1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciBuLGkscj1uZXcgQXJyYXkobiksbz0wO288bjsrK28pcltvXT1hcmd1bWVudHNbbysyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO2ZvcihvPTAsbj0oaT10aGlzLl9bdF0pLmxlbmd0aDtvPG47KytvKWlbb10udmFsdWUuYXBwbHkoZSxyKX0sYXBwbHk6ZnVuY3Rpb24odCxlLG4pe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7Zm9yKHZhciBpPXRoaXMuX1t0XSxyPTAsbz1pLmxlbmd0aDtyPG87KytyKWlbcl0udmFsdWUuYXBwbHkoZSxuKX19O3ZhciBGVyxWVyxVVz0wLGpXPTAsR1c9MCxXVz0wLHFXPTAsWVc9MCxYVz0ib2JqZWN0Ij09dHlwZW9mIHBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSwkVz0ib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbih0KXtzZXRUaW1lb3V0KHQsMTcpfTtmdW5jdGlvbiBLVygpe3JldHVybiBxV3x8KCRXKFpXKSxxVz1YVy5ub3coKStZVyl9ZnVuY3Rpb24gWlcoKXtxVz0wfWZ1bmN0aW9uIEpXKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiBRVyh0LGUsbil7dmFyIGk9bmV3IEpXO3JldHVybiBpLnJlc3RhcnQodCxlLG4pLGl9ZnVuY3Rpb24gdHEoKXtxVz0oV1c9WFcubm93KCkpK1lXLFVXPWpXPTA7dHJ5eyEoZnVuY3Rpb24gdCgpe0tXKCksKytVVztmb3IodmFyIHQsZT1GVztlOykodD1xVy1lLl90aW1lKT49MCYmZS5fY2FsbC5jYWxsKG51bGwsdCksZT1lLl9uZXh0Oy0tVVd9KSgpfWZpbmFsbHl7VVc9MCwoZnVuY3Rpb24gZSgpe2Zvcih2YXIgdCxlLG49RlcsaT0xLzA7bjspbi5fY2FsbD8oaT5uLl90aW1lJiYoaT1uLl90aW1lKSx0PW4sbj1uLl9uZXh0KTooZT1uLl9uZXh0LG4uX25leHQ9bnVsbCxuPXQ/dC5fbmV4dD1lOkZXPWUpO1ZXPXQsbnEoaSl9KSgpLHFXPTB9fWZ1bmN0aW9uIGVxKCl7dmFyIHQ9WFcubm93KCksZT10LVdXO2U+MWUzJiYoWVctPWUsV1c9dCl9ZnVuY3Rpb24gbnEodCl7VVd8fChqVyYmKGpXPWNsZWFyVGltZW91dChqVykpLHQtcVc+MjQ/KHQ8MS8wJiYoalc9c2V0VGltZW91dCh0cSx0LVhXLm5vdygpLVlXKSksR1cmJihHVz1jbGVhckludGVydmFsKEdXKSkpOihHV3x8KFdXPVhXLm5vdygpLEdXPXNldEludGVydmFsKGVxLDFlMykpLFVXPTEsJFcodHEpKSl9ZnVuY3Rpb24gaXEodCl7cmV0dXJuIHQueH1mdW5jdGlvbiBycSh0KXtyZXR1cm4gdC55fUpXLnByb3RvdHlwZT1RVy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkpXLHJlc3RhcnQ6ZnVuY3Rpb24odCxlLG4pe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIik7bj0obnVsbD09bj9LVygpOituKSsobnVsbD09ZT8wOitlKSx0aGlzLl9uZXh0fHxWVz09PXRoaXN8fChWVz9WVy5fbmV4dD10aGlzOkZXPXRoaXMsVlc9dGhpcyksdGhpcy5fY2FsbD10LHRoaXMuX3RpbWU9bixucSgpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCxucSgpKX19O3ZhciBvcSxhcT1NYXRoLlBJKigzLU1hdGguc3FydCg1KSk7ZnVuY3Rpb24gc3EodCxlKXtpZigobj0odD1lP3QudG9FeHBvbmVudGlhbChlLTEpOnQudG9FeHBvbmVudGlhbCgpKS5pbmRleE9mKCJlIikpPDApcmV0dXJuIG51bGw7dmFyIG4saT10LnNsaWNlKDAsbik7cmV0dXJuW2kubGVuZ3RoPjE/aVswXStpLnNsaWNlKDIpOmksK3Quc2xpY2UobisxKV19ZnVuY3Rpb24gbHEodCl7cmV0dXJuKHQ9c3EoTWF0aC5hYnModCkpKT90WzFdOk5hTn1mdW5jdGlvbiBjcSh0LGUpe3ZhciBuPXNxKHQsZSk7aWYoIW4pcmV0dXJuIHQrIiI7dmFyIGk9blswXSxyPW5bMV07cmV0dXJuIHI8MD8iMC4iK25ldyBBcnJheSgtcikuam9pbigiMCIpK2k6aS5sZW5ndGg+cisxP2kuc2xpY2UoMCxyKzEpKyIuIitpLnNsaWNlKHIrMSk6aStuZXcgQXJyYXkoci1pLmxlbmd0aCsyKS5qb2luKCIwIil9dmFyIHVxPXsiIjpmdW5jdGlvbiBocSh0LGUpe3Q6Zm9yKHZhciBuLGk9KHQ9dC50b1ByZWNpc2lvbihlKSkubGVuZ3RoLHI9MSxvPS0xO3I8aTsrK3Ipc3dpdGNoKHRbcl0pe2Nhc2UiLiI6bz1uPXI7YnJlYWs7Y2FzZSIwIjowPT09byYmKG89ciksbj1yO2JyZWFrO2Nhc2UiZSI6YnJlYWsgdDtkZWZhdWx0Om8+MCYmKG89MCl9cmV0dXJuIG8+MD90LnNsaWNlKDAsbykrdC5zbGljZShuKzEpOnR9LCIlIjpmdW5jdGlvbih0LGUpe3JldHVybigxMDAqdCkudG9GaXhlZChlKX0sYjpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZygyKX0sYzpmdW5jdGlvbih0KXtyZXR1cm4gdCsiIn0sZDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZygxMCl9LGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50b0V4cG9uZW50aWFsKGUpfSxmOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudG9GaXhlZChlKX0sZzpmdW5jdGlvbih0LGUpe3JldHVybiB0LnRvUHJlY2lzaW9uKGUpfSxvOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDgpfSxwOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGNxKDEwMCp0LGUpfSxyOmNxLHM6ZnVuY3Rpb24gZHEodCxlKXt2YXIgbj1zcSh0LGUpO2lmKCFuKXJldHVybiB0KyIiO3ZhciBpPW5bMF0scj1uWzFdLG89ci0ob3E9MypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3Ioci8zKSkpKSsxLGE9aS5sZW5ndGg7cmV0dXJuIG89PT1hP2k6bz5hP2krbmV3IEFycmF5KG8tYSsxKS5qb2luKCIwIik6bz4wP2kuc2xpY2UoMCxvKSsiLiIraS5zbGljZShvKToiMC4iK25ldyBBcnJheSgxLW8pLmpvaW4oIjAiKStzcSh0LE1hdGgubWF4KDAsZStvLTEpKVswXX0sWDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKX0seDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZygxNil9fSxwcT0vXig/OiguKT8oWzw+PV5dKSk/KFsrXC1cKCBdKT8oWyQjXSk/KDApPyhcZCspPygsKT8oXC5cZCspPyhbYS16JV0pPyQvaTtmdW5jdGlvbiBmcSh0KXtyZXR1cm4gbmV3IG1xKHQpfWZ1bmN0aW9uIG1xKHQpe2lmKCEoZT1wcS5leGVjKHQpKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9ybWF0OiAiK3QpO3ZhciBlLG49ZVsxXXx8IiAiLGk9ZVsyXXx8Ij4iLHI9ZVszXXx8Ii0iLG89ZVs0XXx8IiIsYT0hIWVbNV0scz1lWzZdJiYrZVs2XSxsPSEhZVs3XSxjPWVbOF0mJitlWzhdLnNsaWNlKDEpLHU9ZVs5XXx8IiI7Im4iPT09dT8obD0hMCx1PSJnIik6dXFbdV18fCh1PSIiKSwoYXx8IjAiPT09biYmIj0iPT09aSkmJihhPSEwLG49IjAiLGk9Ij0iKSx0aGlzLmZpbGw9bix0aGlzLmFsaWduPWksdGhpcy5zaWduPXIsdGhpcy5zeW1ib2w9byx0aGlzLnplcm89YSx0aGlzLndpZHRoPXMsdGhpcy5jb21tYT1sLHRoaXMucHJlY2lzaW9uPWMsdGhpcy50eXBlPXV9ZnVuY3Rpb24gZ3EodCl7cmV0dXJuIHR9ZnEucHJvdG90eXBlPW1xLnByb3RvdHlwZSxtcS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWxsK3RoaXMuYWxpZ24rdGhpcy5zaWduK3RoaXMuc3ltYm9sKyh0aGlzLnplcm8/IjAiOiIiKSsobnVsbD09dGhpcy53aWR0aD8iIjpNYXRoLm1heCgxLDB8dGhpcy53aWR0aCkpKyh0aGlzLmNvbW1hPyIsIjoiIikrKG51bGw9PXRoaXMucHJlY2lzaW9uPyIiOiIuIitNYXRoLm1heCgwLDB8dGhpcy5wcmVjaXNpb24pKSt0aGlzLnR5cGV9O3ZhciBfcSx5cSx2cSxicT1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIsK1IiwibSIsIiIsImsiLCJNIiwiRyIsIlQiLCJQIiwiRSIsIloiLCJZIl07ZnVuY3Rpb24geHEodCl7dmFyIGU9dC5ncm91cGluZyYmdC50aG91c2FuZHM/KGZ1bmN0aW9uIG4odCxlKXtyZXR1cm4gZnVuY3Rpb24obixpKXtmb3IodmFyIHI9bi5sZW5ndGgsbz1bXSxhPTAscz10WzBdLGw9MDtyPjAmJnM+MCYmKGwrcysxPmkmJihzPU1hdGgubWF4KDEsaS1sKSksby5wdXNoKG4uc3Vic3RyaW5nKHItPXMscitzKSksISgobCs9cysxKT5pKSk7KXM9dFthPShhKzEpJXQubGVuZ3RoXTtyZXR1cm4gby5yZXZlcnNlKCkuam9pbihlKX19KSh0Lmdyb3VwaW5nLHQudGhvdXNhbmRzKTpncSxpPXQuY3VycmVuY3kscj10LmRlY2ltYWwsbz10Lm51bWVyYWxzPyhmdW5jdGlvbiBhKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9bMC05XS9nLChmdW5jdGlvbihlKXtyZXR1cm4gdFsrZV19KSl9fSkodC5udW1lcmFscyk6Z3Escz10LnBlcmNlbnR8fCIlIjtmdW5jdGlvbiBsKHQpe3ZhciBuPSh0PWZxKHQpKS5maWxsLGE9dC5hbGlnbixsPXQuc2lnbixjPXQuc3ltYm9sLHU9dC56ZXJvLGg9dC53aWR0aCxkPXQuY29tbWEscD10LnByZWNpc2lvbixmPXQudHlwZSxtPSIkIj09PWM/aVswXToiIyI9PT1jJiYvW2JveFhdLy50ZXN0KGYpPyIwIitmLnRvTG93ZXJDYXNlKCk6IiIsZz0iJCI9PT1jP2lbMV06L1slcF0vLnRlc3QoZik/czoiIixfPXVxW2ZdLHk9IWZ8fC9bZGVmZ3BycyVdLy50ZXN0KGYpO2Z1bmN0aW9uIHYodCl7dmFyIGkscyxjLHY9bSxiPWc7aWYoImMiPT09ZiliPV8odCkrYix0PSIiO2Vsc2V7dmFyIHg9KHQ9K3QpPDA7aWYodD1fKE1hdGguYWJzKHQpLHApLHgmJjA9PSt0JiYoeD0hMSksdj0oeD8iKCI9PT1sP2w6Ii0iOiItIj09PWx8fCIoIj09PWw/IiI6bCkrdixiPSgicyI9PT1mP2JxWzgrb3EvM106IiIpK2IrKHgmJiIoIj09PWw/IikiOiIiKSx5KWZvcihpPS0xLHM9dC5sZW5ndGg7KytpPHM7KWlmKDQ4PihjPXQuY2hhckNvZGVBdChpKSl8fGM+NTcpe2I9KDQ2PT09Yz9yK3Quc2xpY2UoaSsxKTp0LnNsaWNlKGkpKStiLHQ9dC5zbGljZSgwLGkpO2JyZWFrfX1kJiYhdSYmKHQ9ZSh0LDEvMCkpO3ZhciB3PXYubGVuZ3RoK3QubGVuZ3RoK2IubGVuZ3RoLFM9dzxoP25ldyBBcnJheShoLXcrMSkuam9pbihuKToiIjtzd2l0Y2goZCYmdSYmKHQ9ZShTK3QsUy5sZW5ndGg/aC1iLmxlbmd0aDoxLzApLFM9IiIpLGEpe2Nhc2UiPCI6dD12K3QrYitTO2JyZWFrO2Nhc2UiPSI6dD12K1MrdCtiO2JyZWFrO2Nhc2UiXiI6dD1TLnNsaWNlKDAsdz1TLmxlbmd0aD4+MSkrdit0K2IrUy5zbGljZSh3KTticmVhaztkZWZhdWx0OnQ9Uyt2K3QrYn1yZXR1cm4gbyh0KX1yZXR1cm4gcD1udWxsPT1wP2Y/NjoxMjovW2dwcnNdLy50ZXN0KGYpP01hdGgubWF4KDEsTWF0aC5taW4oMjEscCkpOk1hdGgubWF4KDAsTWF0aC5taW4oMjAscCkpLHYudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdCsiIn0sdn1yZXR1cm57Zm9ybWF0OmwsZm9ybWF0UHJlZml4OmZ1bmN0aW9uIGModCxlKXt2YXIgbj1sKCgodD1mcSh0KSkudHlwZT0iZiIsdCkpLGk9MypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IobHEoZSkvMykpKSxyPU1hdGgucG93KDEwLC1pKSxvPWJxWzgraS8zXTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG4ocip0KStvfX19fWZ1bmN0aW9uIHdxKHQpe3JldHVybiBfcT14cSh0KSx5cT1fcS5mb3JtYXQsdnE9X3EuZm9ybWF0UHJlZml4LF9xfWZ1bmN0aW9uIFNxKCl7cmV0dXJuIG5ldyBNcX1mdW5jdGlvbiBNcSgpe3RoaXMucmVzZXQoKX13cSh7ZGVjaW1hbDoiLiIsdGhvdXNhbmRzOiIsIixncm91cGluZzpbM10sY3VycmVuY3k6WyIkIiwiIl19KSxNcS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOk1xLHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5zPXRoaXMudD0wfSxhZGQ6ZnVuY3Rpb24odCl7VHEoRXEsdCx0aGlzLnQpLFRxKHRoaXMsRXEucyx0aGlzLnMpLHRoaXMucz90aGlzLnQrPUVxLnQ6dGhpcy5zPUVxLnR9LHZhbHVlT2Y6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zfX07dmFyIEVxPW5ldyBNcTtmdW5jdGlvbiBUcSh0LGUsbil7dmFyIGk9dC5zPWUrbixyPWktZTt0LnQ9ZS0oaS1yKSsobi1yKX12YXIgQ3E9MWUtNixBcT1NYXRoLlBJLGtxPUFxLzIsTHE9QXEvNCxQcT0yKkFxLE5xPTE4MC9BcSxJcT1BcS8xODAsT3E9TWF0aC5hYnMsUnE9TWF0aC5hdGFuLHpxPU1hdGguYXRhbjIsRHE9TWF0aC5jb3MsQnE9TWF0aC5jZWlsLEhxPU1hdGguZXhwLEZxPU1hdGgubG9nLFZxPU1hdGgucG93LFVxPU1hdGguc2luLGpxPU1hdGguc2lnbnx8ZnVuY3Rpb24odCl7cmV0dXJuIHQ+MD8xOnQ8MD8tMTowfSxHcT1NYXRoLnNxcnQsV3E9TWF0aC50YW47ZnVuY3Rpb24gcXEodCl7cmV0dXJuIHQ+MT8wOnQ8LTE/QXE6TWF0aC5hY29zKHQpfWZ1bmN0aW9uIFlxKHQpe3JldHVybiB0PjE/a3E6dDwtMT8ta3E6TWF0aC5hc2luKHQpfWZ1bmN0aW9uIFhxKHQpe3JldHVybih0PVVxKHQvMikpKnR9ZnVuY3Rpb24gJHEoKXt9ZnVuY3Rpb24gS3EodCxlKXt0JiZKcS5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpJiZKcVt0LnR5cGVdKHQsZSl9dmFyIFpxPXtGZWF0dXJlOmZ1bmN0aW9uKHQsZSl7S3EodC5nZW9tZXRyeSxlKX0sRmVhdHVyZUNvbGxlY3Rpb246ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5mZWF0dXJlcyxpPS0xLHI9bi5sZW5ndGg7KytpPHI7KUtxKG5baV0uZ2VvbWV0cnksZSl9fSxKcT17U3BoZXJlOmZ1bmN0aW9uKHQsZSl7ZS5zcGhlcmUoKX0sUG9pbnQ6ZnVuY3Rpb24odCxlKXtlLnBvaW50KCh0PXQuY29vcmRpbmF0ZXMpWzBdLHRbMV0sdFsyXSl9LE11bHRpUG9pbnQ6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5jb29yZGluYXRlcyxpPS0xLHI9bi5sZW5ndGg7KytpPHI7KWUucG9pbnQoKHQ9bltpXSlbMF0sdFsxXSx0WzJdKX0sTGluZVN0cmluZzpmdW5jdGlvbih0LGUpe1FxKHQuY29vcmRpbmF0ZXMsZSwwKX0sTXVsdGlMaW5lU3RyaW5nOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXQuY29vcmRpbmF0ZXMsaT0tMSxyPW4ubGVuZ3RoOysraTxyOylRcShuW2ldLGUsMCl9LFBvbHlnb246ZnVuY3Rpb24odCxlKXt0WSh0LmNvb3JkaW5hdGVzLGUpfSxNdWx0aVBvbHlnb246ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5jb29yZGluYXRlcyxpPS0xLHI9bi5sZW5ndGg7KytpPHI7KXRZKG5baV0sZSl9LEdlb21ldHJ5Q29sbGVjdGlvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10Lmdlb21ldHJpZXMsaT0tMSxyPW4ubGVuZ3RoOysraTxyOylLcShuW2ldLGUpfX07ZnVuY3Rpb24gUXEodCxlLG4pe3ZhciBpLHI9LTEsbz10Lmxlbmd0aC1uO2ZvcihlLmxpbmVTdGFydCgpOysrcjxvOyllLnBvaW50KChpPXRbcl0pWzBdLGlbMV0saVsyXSk7ZS5saW5lRW5kKCl9ZnVuY3Rpb24gdFkodCxlKXt2YXIgbj0tMSxpPXQubGVuZ3RoO2ZvcihlLnBvbHlnb25TdGFydCgpOysrbjxpOylRcSh0W25dLGUsMSk7ZS5wb2x5Z29uRW5kKCl9ZnVuY3Rpb24gZVkodCxlKXt0JiZacS5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpP1pxW3QudHlwZV0odCxlKTpLcSh0LGUpfXZhciBuWSxpWSxyWSxvWSxhWSxzWT1TcSgpLGxZPVNxKCksY1k9e3BvaW50OiRxLGxpbmVTdGFydDokcSxsaW5lRW5kOiRxLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3NZLnJlc2V0KCksY1kubGluZVN0YXJ0PXVZLGNZLmxpbmVFbmQ9aFl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt2YXIgdD0rc1k7bFkuYWRkKHQ8MD9QcSt0OnQpLHRoaXMubGluZVN0YXJ0PXRoaXMubGluZUVuZD10aGlzLnBvaW50PSRxfSxzcGhlcmU6ZnVuY3Rpb24oKXtsWS5hZGQoUHEpfX07ZnVuY3Rpb24gdVkoKXtjWS5wb2ludD1kWX1mdW5jdGlvbiBoWSgpe3BZKG5ZLGlZKX1mdW5jdGlvbiBkWSh0LGUpe2NZLnBvaW50PXBZLG5ZPXQsaVk9ZSxyWT10Kj1JcSxvWT1EcShlPShlKj1JcSkvMitMcSksYVk9VXEoZSl9ZnVuY3Rpb24gcFkodCxlKXt2YXIgbj0odCo9SXEpLXJZLGk9bj49MD8xOi0xLHI9aSpuLG89RHEoZT0oZSo9SXEpLzIrTHEpLGE9VXEoZSkscz1hWSphLGw9b1kqbytzKkRxKHIpLGM9cyppKlVxKHIpO3NZLmFkZCh6cShjLGwpKSxyWT10LG9ZPW8sYVk9YX1mdW5jdGlvbiBmWSh0KXtyZXR1cm5benEodFsxXSx0WzBdKSxZcSh0WzJdKV19ZnVuY3Rpb24gbVkodCl7dmFyIGU9dFswXSxuPXRbMV0saT1EcShuKTtyZXR1cm5baSpEcShlKSxpKlVxKGUpLFVxKG4pXX1mdW5jdGlvbiBnWSh0LGUpe3JldHVybiB0WzBdKmVbMF0rdFsxXSplWzFdK3RbMl0qZVsyXX1mdW5jdGlvbiBfWSh0LGUpe3JldHVyblt0WzFdKmVbMl0tdFsyXSplWzFdLHRbMl0qZVswXS10WzBdKmVbMl0sdFswXSplWzFdLXRbMV0qZVswXV19ZnVuY3Rpb24geVkodCxlKXt0WzBdKz1lWzBdLHRbMV0rPWVbMV0sdFsyXSs9ZVsyXX1mdW5jdGlvbiB2WSh0LGUpe3JldHVyblt0WzBdKmUsdFsxXSplLHRbMl0qZV19ZnVuY3Rpb24gYlkodCl7dmFyIGU9R3EodFswXSp0WzBdK3RbMV0qdFsxXSt0WzJdKnRbMl0pO3RbMF0vPWUsdFsxXS89ZSx0WzJdLz1lfXZhciB4WSx3WSxTWSxNWSxFWSxUWSxDWSxBWSxrWSxMWSxQWSxOWSxJWSxPWSxSWSx6WSxEWSxCWSxIWSxGWSxWWSxVWSxqWSxHWSxXWSxxWSxZWT1TcSgpLFhZPXtwb2ludDokWSxsaW5lU3RhcnQ6WlksbGluZUVuZDpKWSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtYWS5wb2ludD1RWSxYWS5saW5lU3RhcnQ9dFgsWFkubGluZUVuZD1lWCxZWS5yZXNldCgpLGNZLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7Y1kucG9seWdvbkVuZCgpLFhZLnBvaW50PSRZLFhZLmxpbmVTdGFydD1aWSxYWS5saW5lRW5kPUpZLHNZPDA/KHhZPS0oU1k9MTgwKSx3WT0tKE1ZPTkwKSk6WVk+Q3E/TVk9OTA6WVk8LTFlLTYmJih3WT0tOTApLExZWzBdPXhZLExZWzFdPVNZfX07ZnVuY3Rpb24gJFkodCxlKXtrWS5wdXNoKExZPVt4WT10LFNZPXRdKSxlPHdZJiYod1k9ZSksZT5NWSYmKE1ZPWUpfWZ1bmN0aW9uIEtZKHQsZSl7dmFyIG49bVkoW3QqSXEsZSpJcV0pO2lmKEFZKXt2YXIgaT1fWShBWSxuKSxyPV9ZKFtpWzFdLC1pWzBdLDBdLGkpO2JZKHIpLHI9Zlkocik7dmFyIG8sYT10LUVZLHM9YT4wPzE6LTEsbD1yWzBdKk5xKnMsYz1PcShhKT4xODA7Y14ocypFWTxsJiZsPHMqdCk/KG89clsxXSpOcSk+TVkmJihNWT1vKTpjXihzKkVZPChsPShsKzM2MCklMzYwLTE4MCkmJmw8cyp0KT8obz0tclsxXSpOcSk8d1kmJih3WT1vKTooZTx3WSYmKHdZPWUpLGU+TVkmJihNWT1lKSksYz90PEVZP25YKHhZLHQpPm5YKHhZLFNZKSYmKFNZPXQpOm5YKHQsU1kpPm5YKHhZLFNZKSYmKHhZPXQpOlNZPj14WT8odDx4WSYmKHhZPXQpLHQ+U1kmJihTWT10KSk6dD5FWT9uWCh4WSx0KT5uWCh4WSxTWSkmJihTWT10KTpuWCh0LFNZKT5uWCh4WSxTWSkmJih4WT10KX1lbHNlIGtZLnB1c2goTFk9W3hZPXQsU1k9dF0pO2U8d1kmJih3WT1lKSxlPk1ZJiYoTVk9ZSksQVk9bixFWT10fWZ1bmN0aW9uIFpZKCl7WFkucG9pbnQ9S1l9ZnVuY3Rpb24gSlkoKXtMWVswXT14WSxMWVsxXT1TWSxYWS5wb2ludD0kWSxBWT1udWxsfWZ1bmN0aW9uIFFZKHQsZSl7aWYoQVkpe3ZhciBuPXQtRVk7WVkuYWRkKE9xKG4pPjE4MD9uKyhuPjA/MzYwOi0zNjApOm4pfWVsc2UgVFk9dCxDWT1lO2NZLnBvaW50KHQsZSksS1kodCxlKX1mdW5jdGlvbiB0WCgpe2NZLmxpbmVTdGFydCgpfWZ1bmN0aW9uIGVYKCl7UVkoVFksQ1kpLGNZLmxpbmVFbmQoKSxPcShZWSk+Q3EmJih4WT0tKFNZPTE4MCkpLExZWzBdPXhZLExZWzFdPVNZLEFZPW51bGx9ZnVuY3Rpb24gblgodCxlKXtyZXR1cm4oZS09dCk8MD9lKzM2MDplfWZ1bmN0aW9uIGlYKHQsZSl7cmV0dXJuIHRbMF0tZVswXX1mdW5jdGlvbiByWCh0LGUpe3JldHVybiB0WzBdPD10WzFdP3RbMF08PWUmJmU8PXRbMV06ZTx0WzBdfHx0WzFdPGV9dmFyIG9YPXtzcGhlcmU6JHEscG9pbnQ6YVgsbGluZVN0YXJ0OmxYLGxpbmVFbmQ6aFgscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7b1gubGluZVN0YXJ0PWRYLG9YLmxpbmVFbmQ9cFh9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtvWC5saW5lU3RhcnQ9bFgsb1gubGluZUVuZD1oWH19O2Z1bmN0aW9uIGFYKHQsZSl7dCo9SXE7dmFyIG49RHEoZSo9SXEpO3NYKG4qRHEodCksbipVcSh0KSxVcShlKSl9ZnVuY3Rpb24gc1godCxlLG4peysrUFksSVkrPSh0LUlZKS9QWSxPWSs9KGUtT1kpL1BZLFJZKz0obi1SWSkvUFl9ZnVuY3Rpb24gbFgoKXtvWC5wb2ludD1jWH1mdW5jdGlvbiBjWCh0LGUpe3QqPUlxO3ZhciBuPURxKGUqPUlxKTtHWT1uKkRxKHQpLFdZPW4qVXEodCkscVk9VXEoZSksb1gucG9pbnQ9dVgsc1goR1ksV1kscVkpfWZ1bmN0aW9uIHVYKHQsZSl7dCo9SXE7dmFyIG49RHEoZSo9SXEpLGk9bipEcSh0KSxyPW4qVXEodCksbz1VcShlKSxhPXpxKEdxKChhPVdZKm8tcVkqcikqYSsoYT1xWSppLUdZKm8pKmErKGE9R1kqci1XWSppKSphKSxHWSppK1dZKnIrcVkqbyk7TlkrPWEselkrPWEqKEdZKyhHWT1pKSksRFkrPWEqKFdZKyhXWT1yKSksQlkrPWEqKHFZKyhxWT1vKSksc1goR1ksV1kscVkpfWZ1bmN0aW9uIGhYKCl7b1gucG9pbnQ9YVh9ZnVuY3Rpb24gZFgoKXtvWC5wb2ludD1mWH1mdW5jdGlvbiBwWCgpe21YKFVZLGpZKSxvWC5wb2ludD1hWH1mdW5jdGlvbiBmWCh0LGUpe1VZPXQsalk9ZSx0Kj1JcSxlKj1JcSxvWC5wb2ludD1tWDt2YXIgbj1EcShlKTtHWT1uKkRxKHQpLFdZPW4qVXEodCkscVk9VXEoZSksc1goR1ksV1kscVkpfWZ1bmN0aW9uIG1YKHQsZSl7dCo9SXE7dmFyIG49RHEoZSo9SXEpLGk9bipEcSh0KSxyPW4qVXEodCksbz1VcShlKSxhPVdZKm8tcVkqcixzPXFZKmktR1kqbyxsPUdZKnItV1kqaSxjPUdxKGEqYStzKnMrbCpsKSx1PVlxKGMpLGg9YyYmLXUvYztIWSs9aCphLEZZKz1oKnMsVlkrPWgqbCxOWSs9dSx6WSs9dSooR1krKEdZPWkpKSxEWSs9dSooV1krKFdZPXIpKSxCWSs9dSoocVkrKHFZPW8pKSxzWChHWSxXWSxxWSl9ZnVuY3Rpb24gZ1godCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIF9YKHQsZSl7ZnVuY3Rpb24gbihuLGkpe3JldHVybiBuPXQobixpKSxlKG5bMF0sblsxXSl9cmV0dXJuIHQuaW52ZXJ0JiZlLmludmVydCYmKG4uaW52ZXJ0PWZ1bmN0aW9uKG4saSl7cmV0dXJuKG49ZS5pbnZlcnQobixpKSkmJnQuaW52ZXJ0KG5bMF0sblsxXSl9KSxufWZ1bmN0aW9uIHlYKHQsZSl7cmV0dXJuW3Q+QXE/dC1QcTp0PC1BcT90K1BxOnQsZV19ZnVuY3Rpb24gdlgodCxlLG4pe3JldHVybih0JT1QcSk/ZXx8bj9fWCh4WCh0KSx3WChlLG4pKTp4WCh0KTplfHxuP3dYKGUsbik6eVh9ZnVuY3Rpb24gYlgodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7cmV0dXJuWyhlKz10KT5BcT9lLVBxOmU8LUFxP2UrUHE6ZSxuXX19ZnVuY3Rpb24geFgodCl7dmFyIGU9YlgodCk7cmV0dXJuIGUuaW52ZXJ0PWJYKC10KSxlfWZ1bmN0aW9uIHdYKHQsZSl7dmFyIG49RHEodCksaT1VcSh0KSxyPURxKGUpLG89VXEoZSk7ZnVuY3Rpb24gYSh0LGUpe3ZhciBhPURxKGUpLHM9RHEodCkqYSxsPVVxKHQpKmEsYz1VcShlKSx1PWMqbitzKmk7cmV0dXJuW3pxKGwqci11Km8scypuLWMqaSksWXEodSpyK2wqbyldfXJldHVybiBhLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciBhPURxKGUpLHM9RHEodCkqYSxsPVVxKHQpKmEsYz1VcShlKSx1PWMqci1sKm87cmV0dXJuW3pxKGwqcitjKm8scypuK3UqaSksWXEodSpuLXMqaSldfSxhfWZ1bmN0aW9uIFNYKHQpe2Z1bmN0aW9uIGUoZSl7cmV0dXJuKGU9dChlWzBdKklxLGVbMV0qSXEpKVswXSo9TnEsZVsxXSo9TnEsZX1yZXR1cm4gdD12WCh0WzBdKklxLHRbMV0qSXEsdC5sZW5ndGg+Mj90WzJdKklxOjApLGUuaW52ZXJ0PWZ1bmN0aW9uKGUpe3JldHVybihlPXQuaW52ZXJ0KGVbMF0qSXEsZVsxXSpJcSkpWzBdKj1OcSxlWzFdKj1OcSxlfSxlfWZ1bmN0aW9uIE1YKHQsZSxuLGkscixvKXtpZihuKXt2YXIgYT1EcShlKSxzPVVxKGUpLGw9aSpuO251bGw9PXI/KHI9ZStpKlBxLG89ZS1sLzIpOihyPUVYKGEsciksbz1FWChhLG8pLChpPjA/cjxvOnI+bykmJihyKz1pKlBxKSk7Zm9yKHZhciBjLHU9cjtpPjA/dT5vOnU8bzt1LT1sKWM9ZlkoW2EsLXMqRHEodSksLXMqVXEodSldKSx0LnBvaW50KGNbMF0sY1sxXSl9fWZ1bmN0aW9uIEVYKHQsZSl7KGU9bVkoZSkpWzBdLT10LGJZKGUpO3ZhciBuPXFxKC1lWzFdKTtyZXR1cm4oKC1lWzJdPDA/LW46bikrUHEtQ3EpJVBxfWZ1bmN0aW9uIFRYKCl7dmFyIHQsZT1bXTtyZXR1cm57cG9pbnQ6ZnVuY3Rpb24oZSxuKXt0LnB1c2goW2Usbl0pfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtlLnB1c2godD1bXSl9LGxpbmVFbmQ6JHEscmVqb2luOmZ1bmN0aW9uKCl7ZS5sZW5ndGg+MSYmZS5wdXNoKGUucG9wKCkuY29uY2F0KGUuc2hpZnQoKSkpfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgbj1lO3JldHVybiBlPVtdLHQ9bnVsbCxufX19ZnVuY3Rpb24gQ1godCxlKXtyZXR1cm4gT3EodFswXS1lWzBdKTxDcSYmT3EodFsxXS1lWzFdKTxDcX1mdW5jdGlvbiBBWCh0LGUsbixpKXt0aGlzLng9dCx0aGlzLno9ZSx0aGlzLm89bix0aGlzLmU9aSx0aGlzLnY9ITEsdGhpcy5uPXRoaXMucD1udWxsfWZ1bmN0aW9uIGtYKHQsZSxuLGkscil7dmFyIG8sYSxzPVtdLGw9W107aWYodC5mb3JFYWNoKChmdW5jdGlvbih0KXtpZighKChlPXQubGVuZ3RoLTEpPD0wKSl7dmFyIGUsbixpPXRbMF0sYT10W2VdO2lmKENYKGksYSkpe2ZvcihyLmxpbmVTdGFydCgpLG89MDtvPGU7KytvKXIucG9pbnQoKGk9dFtvXSlbMF0saVsxXSk7ci5saW5lRW5kKCl9ZWxzZSBzLnB1c2gobj1uZXcgQVgoaSx0LG51bGwsITApKSxsLnB1c2gobi5vPW5ldyBBWChpLG51bGwsbiwhMSkpLHMucHVzaChuPW5ldyBBWChhLHQsbnVsbCwhMSkpLGwucHVzaChuLm89bmV3IEFYKGEsbnVsbCxuLCEwKSl9fSkpLHMubGVuZ3RoKXtmb3IobC5zb3J0KGUpLExYKHMpLExYKGwpLG89MCxhPWwubGVuZ3RoO288YTsrK28pbFtvXS5lPW49IW47Zm9yKHZhciBjLHUsaD1zWzBdOzspe2Zvcih2YXIgZD1oLHA9ITA7ZC52OylpZigoZD1kLm4pPT09aClyZXR1cm47Yz1kLnosci5saW5lU3RhcnQoKTtkb3tpZihkLnY9ZC5vLnY9ITAsZC5lKXtpZihwKWZvcihvPTAsYT1jLmxlbmd0aDtvPGE7KytvKXIucG9pbnQoKHU9Y1tvXSlbMF0sdVsxXSk7ZWxzZSBpKGQueCxkLm4ueCwxLHIpO2Q9ZC5ufWVsc2V7aWYocClmb3Iobz0oYz1kLnAueikubGVuZ3RoLTE7bz49MDstLW8pci5wb2ludCgodT1jW29dKVswXSx1WzFdKTtlbHNlIGkoZC54LGQucC54LC0xLHIpO2Q9ZC5wfWM9KGQ9ZC5vKS56LHA9IXB9d2hpbGUoIWQudik7ci5saW5lRW5kKCl9fX1mdW5jdGlvbiBMWCh0KXtpZihlPXQubGVuZ3RoKXtmb3IodmFyIGUsbixpPTAscj10WzBdOysraTxlOylyLm49bj10W2ldLG4ucD1yLHI9bjtyLm49bj10WzBdLG4ucD1yfX15WC5pbnZlcnQ9eVg7dmFyIFBYPVNxKCk7ZnVuY3Rpb24gTlgodCxlKXt2YXIgbj1lWzBdLGk9ZVsxXSxyPVtVcShuKSwtRHEobiksMF0sbz0wLGE9MDtQWC5yZXNldCgpO2Zvcih2YXIgcz0wLGw9dC5sZW5ndGg7czxsOysrcylpZih1PShjPXRbc10pLmxlbmd0aClmb3IodmFyIGMsdSxoPWNbdS0xXSxkPWhbMF0scD1oWzFdLzIrTHEsZj1VcShwKSxtPURxKHApLGc9MDtnPHU7KytnLGQ9eSxmPWIsbT14LGg9Xyl7dmFyIF89Y1tnXSx5PV9bMF0sdj1fWzFdLzIrTHEsYj1VcSh2KSx4PURxKHYpLHc9eS1kLFM9dz49MD8xOi0xLE09Uyp3LEU9TT5BcSxUPWYqYjtpZihQWC5hZGQoenEoVCpTKlVxKE0pLG0qeCtUKkRxKE0pKSksbys9RT93K1MqUHE6dyxFXmQ+PW5eeT49bil7dmFyIEM9X1kobVkoaCksbVkoXykpO2JZKEMpO3ZhciBBPV9ZKHIsQyk7YlkoQSk7dmFyIGs9KEVedz49MD8tMToxKSpZcShBWzJdKTsoaT5rfHxpPT09ayYmKENbMF18fENbMV0pKSYmKGErPUVedz49MD8xOi0xKX19cmV0dXJuKG88LTFlLTZ8fG88Q3EmJlBYPC0xZS02KV4xJmF9ZnVuY3Rpb24gSVgodCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59ZnVuY3Rpb24gT1godCxlLG4pe3Q9K3QsZT0rZSxuPShyPWFyZ3VtZW50cy5sZW5ndGgpPDI/KGU9dCx0PTAsMSk6cjwzPzE6K247Zm9yKHZhciBpPS0xLHI9MHxNYXRoLm1heCgwLE1hdGguY2VpbCgoZS10KS9uKSksbz1uZXcgQXJyYXkocik7KytpPHI7KW9baV09dCtpKm47cmV0dXJuIG99ZnVuY3Rpb24gUlgodCl7Zm9yKHZhciBlLG4saSxyPXQubGVuZ3RoLG89LTEsYT0wOysrbzxyOylhKz10W29dLmxlbmd0aDtmb3Iobj1uZXcgQXJyYXkoYSk7LS1yPj0wOylmb3IoZT0oaT10W3JdKS5sZW5ndGg7LS1lPj0wOyluWy0tYV09aVtlXTtyZXR1cm4gbn1mdW5jdGlvbiB6WCh0LGUsbixpKXtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG8sYSxzLGw9ZShyKSxjPVRYKCksdT1lKGMpLGg9ITEsZD17cG9pbnQ6cCxsaW5lU3RhcnQ6bSxsaW5lRW5kOmcscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7ZC5wb2ludD1fLGQubGluZVN0YXJ0PXksZC5saW5lRW5kPXYsYT1bXSxvPVtdfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7ZC5wb2ludD1wLGQubGluZVN0YXJ0PW0sZC5saW5lRW5kPWcsYT1SWChhKTt2YXIgdD1OWChvLGkpO2EubGVuZ3RoPyhofHwoci5wb2x5Z29uU3RhcnQoKSxoPSEwKSxrWChhLEJYLHQsbixyKSk6dCYmKGh8fChyLnBvbHlnb25TdGFydCgpLGg9ITApLHIubGluZVN0YXJ0KCksbihudWxsLG51bGwsMSxyKSxyLmxpbmVFbmQoKSksaCYmKHIucG9seWdvbkVuZCgpLGg9ITEpLGE9bz1udWxsfSxzcGhlcmU6ZnVuY3Rpb24oKXtyLnBvbHlnb25TdGFydCgpLHIubGluZVN0YXJ0KCksbihudWxsLG51bGwsMSxyKSxyLmxpbmVFbmQoKSxyLnBvbHlnb25FbmQoKX19O2Z1bmN0aW9uIHAoZSxuKXt0KGUsbikmJnIucG9pbnQoZSxuKX1mdW5jdGlvbiBmKHQsZSl7bC5wb2ludCh0LGUpfWZ1bmN0aW9uIG0oKXtkLnBvaW50PWYsbC5saW5lU3RhcnQoKX1mdW5jdGlvbiBnKCl7ZC5wb2ludD1wLGwubGluZUVuZCgpfWZ1bmN0aW9uIF8odCxlKXtzLnB1c2goW3QsZV0pLHUucG9pbnQodCxlKX1mdW5jdGlvbiB5KCl7dS5saW5lU3RhcnQoKSxzPVtdfWZ1bmN0aW9uIHYoKXtfKHNbMF1bMF0sc1swXVsxXSksdS5saW5lRW5kKCk7dmFyIHQsZSxuLGksbD11LmNsZWFuKCksZD1jLnJlc3VsdCgpLHA9ZC5sZW5ndGg7aWYocy5wb3AoKSxvLnB1c2gocykscz1udWxsLHApaWYoMSZsKXtpZigoZT0obj1kWzBdKS5sZW5ndGgtMSk+MCl7Zm9yKGh8fChyLnBvbHlnb25TdGFydCgpLGg9ITApLHIubGluZVN0YXJ0KCksdD0wO3Q8ZTsrK3Qpci5wb2ludCgoaT1uW3RdKVswXSxpWzFdKTtyLmxpbmVFbmQoKX19ZWxzZSBwPjEmJjImbCYmZC5wdXNoKGQucG9wKCkuY29uY2F0KGQuc2hpZnQoKSkpLGEucHVzaChkLmZpbHRlcihEWCkpfXJldHVybiBkfX1mdW5jdGlvbiBEWCh0KXtyZXR1cm4gdC5sZW5ndGg+MX1mdW5jdGlvbiBCWCh0LGUpe3JldHVybigodD10LngpWzBdPDA/dFsxXS1rcS1DcTprcS10WzFdKS0oKGU9ZS54KVswXTwwP2VbMV0ta3EtQ3E6a3EtZVsxXSl9IShmdW5jdGlvbiBIWCh0KXsxPT09dC5sZW5ndGgmJih0PShmdW5jdGlvbiBlKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3JldHVybiBJWCh0KGUpLG4pfX0pKHQpKX0pKElYKTt2YXIgRlg9elgoKGZ1bmN0aW9uKCl7cmV0dXJuITB9KSwoZnVuY3Rpb24gVlgodCl7dmFyIGUsbj1OYU4saT1OYU4scj1OYU47cmV0dXJue2xpbmVTdGFydDpmdW5jdGlvbigpe3QubGluZVN0YXJ0KCksZT0xfSxwb2ludDpmdW5jdGlvbihvLGEpe3ZhciBzPW8+MD9BcTotQXEsbD1PcShvLW4pO09xKGwtQXEpPENxPyh0LnBvaW50KG4saT0oaSthKS8yPjA/a3E6LWtxKSx0LnBvaW50KHIsaSksdC5saW5lRW5kKCksdC5saW5lU3RhcnQoKSx0LnBvaW50KHMsaSksdC5wb2ludChvLGkpLGU9MCk6ciE9PXMmJmw+PUFxJiYoT3Eobi1yKTxDcSYmKG4tPXIqQ3EpLE9xKG8tcyk8Q3EmJihvLT1zKkNxKSxpPShmdW5jdGlvbiBjKHQsZSxuLGkpe3ZhciByLG8sYT1VcSh0LW4pO3JldHVybiBPcShhKT5DcT9ScSgoVXEoZSkqKG89RHEoaSkpKlVxKG4pLVVxKGkpKihyPURxKGUpKSpVcSh0KSkvKHIqbyphKSk6KGUraSkvMn0pKG4saSxvLGEpLHQucG9pbnQocixpKSx0LmxpbmVFbmQoKSx0LmxpbmVTdGFydCgpLHQucG9pbnQocyxpKSxlPTApLHQucG9pbnQobj1vLGk9YSkscj1zfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dC5saW5lRW5kKCksbj1pPU5hTn0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gMi1lfX19KSwoZnVuY3Rpb24gVVgodCxlLG4saSl7dmFyIHI7aWYobnVsbD09dClpLnBvaW50KC1BcSxyPW4qa3EpLGkucG9pbnQoMCxyKSxpLnBvaW50KEFxLHIpLGkucG9pbnQoQXEsMCksaS5wb2ludChBcSwtciksaS5wb2ludCgwLC1yKSxpLnBvaW50KC1BcSwtciksaS5wb2ludCgtQXEsMCksaS5wb2ludCgtQXEscik7ZWxzZSBpZihPcSh0WzBdLWVbMF0pPkNxKXt2YXIgbz10WzBdPGVbMF0/QXE6LUFxO2kucG9pbnQoLW8scj1uKm8vMiksaS5wb2ludCgwLHIpLGkucG9pbnQobyxyKX1lbHNlIGkucG9pbnQoZVswXSxlWzFdKX0pLFstQXEsLWtxXSk7ZnVuY3Rpb24galgodCl7dmFyIGU9RHEodCksbj02KklxLGk9ZT4wLHI9T3EoZSk+Q3E7ZnVuY3Rpb24gbyh0LG4pe3JldHVybiBEcSh0KSpEcShuKT5lfWZ1bmN0aW9uIGEodCxuLGkpe3ZhciByPVsxLDAsMF0sbz1fWShtWSh0KSxtWShuKSksYT1nWShvLG8pLHM9b1swXSxsPWEtcypzO2lmKCFsKXJldHVybiFpJiZ0O3ZhciBjPWUqYS9sLHU9LWUqcy9sLGg9X1kocixvKSxkPXZZKHIsYyk7eVkoZCx2WShvLHUpKTt2YXIgcD1oLGY9Z1koZCxwKSxtPWdZKHAscCksZz1mKmYtbSooZ1koZCxkKS0xKTtpZighKGc8MCkpe3ZhciBfPUdxKGcpLHk9dlkocCwoLWYtXykvbSk7aWYoeVkoeSxkKSx5PWZZKHkpLCFpKXJldHVybiB5O3ZhciB2LGI9dFswXSx4PW5bMF0sdz10WzFdLFM9blsxXTt4PGImJih2PWIsYj14LHg9dik7dmFyIE09eC1iLEU9T3EoTS1BcSk8Q3E7aWYoIUUmJlM8dyYmKHY9dyx3PVMsUz12KSxFfHxNPENxP0U/dytTPjBeeVsxXTwoT3EoeVswXS1iKTxDcT93OlMpOnc8PXlbMV0mJnlbMV08PVM6TT5BcV4oYjw9eVswXSYmeVswXTw9eCkpe3ZhciBUPXZZKHAsKC1mK18pL20pO3JldHVybiB5WShULGQpLFt5LGZZKFQpXX19fWZ1bmN0aW9uIHMoZSxuKXt2YXIgcj1pP3Q6QXEtdCxvPTA7cmV0dXJuIGU8LXI/b3w9MTplPnImJihvfD0yKSxuPC1yP298PTQ6bj5yJiYob3w9OCksb31yZXR1cm4gelgobywoZnVuY3Rpb24gbCh0KXt2YXIgZSxuLGwsYyx1O3JldHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtjPWw9ITEsdT0xfSxwb2ludDpmdW5jdGlvbihoLGQpe3ZhciBwLGY9W2gsZF0sbT1vKGgsZCksZz1pP20/MDpzKGgsZCk6bT9zKGgrKGg8MD9BcTotQXEpLGQpOjA7aWYoIWUmJihjPWw9bSkmJnQubGluZVN0YXJ0KCksbSE9PWwmJighKHA9YShlLGYpKXx8Q1goZSxwKXx8Q1goZixwKSkmJihmWzBdKz1DcSxmWzFdKz1DcSxtPW8oZlswXSxmWzFdKSksbSE9PWwpdT0wLG0/KHQubGluZVN0YXJ0KCkscD1hKGYsZSksdC5wb2ludChwWzBdLHBbMV0pKToocD1hKGUsZiksdC5wb2ludChwWzBdLHBbMV0pLHQubGluZUVuZCgpKSxlPXA7ZWxzZSBpZihyJiZlJiZpXm0pe3ZhciBfO2cmbnx8IShfPWEoZixlLCEwKSl8fCh1PTAsaT8odC5saW5lU3RhcnQoKSx0LnBvaW50KF9bMF1bMF0sX1swXVsxXSksdC5wb2ludChfWzFdWzBdLF9bMV1bMV0pLHQubGluZUVuZCgpKToodC5wb2ludChfWzFdWzBdLF9bMV1bMV0pLHQubGluZUVuZCgpLHQubGluZVN0YXJ0KCksdC5wb2ludChfWzBdWzBdLF9bMF1bMV0pKSl9IW18fGUmJkNYKGUsZil8fHQucG9pbnQoZlswXSxmWzFdKSxlPWYsbD1tLG49Z30sbGluZUVuZDpmdW5jdGlvbigpe2wmJnQubGluZUVuZCgpLGU9bnVsbH0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gdXwoYyYmbCk8PDF9fX0pLChmdW5jdGlvbiBjKGUsaSxyLG8pe01YKG8sdCxuLHIsZSxpKX0pLGk/WzAsLXRdOlstQXEsdC1BcV0pfXZhciBHWD0xZTksV1g9LUdYO2Z1bmN0aW9uIHFYKHQsZSxuLGkpe2Z1bmN0aW9uIHIocixvKXtyZXR1cm4gdDw9ciYmcjw9biYmZTw9byYmbzw9aX1mdW5jdGlvbiBvKHIsbyxzLGMpe3ZhciB1PTAsaD0wO2lmKG51bGw9PXJ8fCh1PWEocixzKSkhPT0oaD1hKG8scykpfHxsKHIsbyk8MF5zPjApZG97Yy5wb2ludCgwPT09dXx8Mz09PXU/dDpuLHU+MT9pOmUpfXdoaWxlKCh1PSh1K3MrNCklNCkhPT1oKTtlbHNlIGMucG9pbnQob1swXSxvWzFdKX1mdW5jdGlvbiBhKGkscil7cmV0dXJuIE9xKGlbMF0tdCk8Q3E/cj4wPzA6MzpPcShpWzBdLW4pPENxP3I+MD8yOjE6T3EoaVsxXS1lKTxDcT9yPjA/MTowOnI+MD8zOjJ9ZnVuY3Rpb24gcyh0LGUpe3JldHVybiBsKHQueCxlLngpfWZ1bmN0aW9uIGwodCxlKXt2YXIgbj1hKHQsMSksaT1hKGUsMSk7cmV0dXJuIG4hPT1pP24taTowPT09bj9lWzFdLXRbMV06MT09PW4/dFswXS1lWzBdOjI9PT1uP3RbMV0tZVsxXTplWzBdLXRbMF19cmV0dXJuIGZ1bmN0aW9uKGEpe3ZhciBsLGMsdSxoLGQscCxmLG0sZyxfLHksdj1hLGI9VFgoKSx4PXtwb2ludDpULGxpbmVTdGFydDpmdW5jdGlvbiB3KCl7eC5wb2ludD1DLGMmJmMucHVzaCh1PVtdKSxfPSEwLGc9ITEsZj1tPU5hTn0sbGluZUVuZDpmdW5jdGlvbiBTKCl7bCYmKEMoaCxkKSxwJiZnJiZiLnJlam9pbigpLGwucHVzaChiLnJlc3VsdCgpKSkseC5wb2ludD1ULGcmJnYubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24gTSgpe3Y9YixsPVtdLGM9W10seT0hMH0scG9seWdvbkVuZDpmdW5jdGlvbiBFKCl7dmFyIGU9KGZ1bmN0aW9uIG4oKXtmb3IodmFyIGU9MCxuPTAscj1jLmxlbmd0aDtuPHI7KytuKWZvcih2YXIgbyxhLHM9Y1tuXSxsPTEsdT1zLmxlbmd0aCxoPXNbMF0sZD1oWzBdLHA9aFsxXTtsPHU7KytsKW89ZCxhPXAsZD0oaD1zW2xdKVswXSxwPWhbMV0sYTw9aT9wPmkmJihkLW8pKihpLWEpPihwLWEpKih0LW8pJiYrK2U6cDw9aSYmKGQtbykqKGktYSk8KHAtYSkqKHQtbykmJi0tZTtyZXR1cm4gZX0pKCkscj15JiZlLGg9KGw9UlgobCkpLmxlbmd0aDsocnx8aCkmJihhLnBvbHlnb25TdGFydCgpLHImJihhLmxpbmVTdGFydCgpLG8obnVsbCxudWxsLDEsYSksYS5saW5lRW5kKCkpLGgmJmtYKGwscyxlLG8sYSksYS5wb2x5Z29uRW5kKCkpLHY9YSxsPWM9dT1udWxsfX07ZnVuY3Rpb24gVCh0LGUpe3IodCxlKSYmdi5wb2ludCh0LGUpfWZ1bmN0aW9uIEMobyxhKXt2YXIgcz1yKG8sYSk7aWYoYyYmdS5wdXNoKFtvLGFdKSxfKWg9byxkPWEscD1zLF89ITEscyYmKHYubGluZVN0YXJ0KCksdi5wb2ludChvLGEpKTtlbHNlIGlmKHMmJmcpdi5wb2ludChvLGEpO2Vsc2V7dmFyIGw9W2Y9TWF0aC5tYXgoV1gsTWF0aC5taW4oR1gsZikpLG09TWF0aC5tYXgoV1gsTWF0aC5taW4oR1gsbSkpXSxiPVtvPU1hdGgubWF4KFdYLE1hdGgubWluKEdYLG8pKSxhPU1hdGgubWF4KFdYLE1hdGgubWluKEdYLGEpKV07IShmdW5jdGlvbiB4KHQsZSxuLGkscixvKXt2YXIgYSxzPXRbMF0sbD10WzFdLGM9MCx1PTEsaD1lWzBdLXMsZD1lWzFdLWw7aWYoYT1uLXMsaHx8IShhPjApKXtpZihhLz1oLGg8MCl7aWYoYTxjKXJldHVybjthPHUmJih1PWEpfWVsc2UgaWYoaD4wKXtpZihhPnUpcmV0dXJuO2E+YyYmKGM9YSl9aWYoYT1yLXMsaHx8IShhPDApKXtpZihhLz1oLGg8MCl7aWYoYT51KXJldHVybjthPmMmJihjPWEpfWVsc2UgaWYoaD4wKXtpZihhPGMpcmV0dXJuO2E8dSYmKHU9YSl9aWYoYT1pLWwsZHx8IShhPjApKXtpZihhLz1kLGQ8MCl7aWYoYTxjKXJldHVybjthPHUmJih1PWEpfWVsc2UgaWYoZD4wKXtpZihhPnUpcmV0dXJuO2E+YyYmKGM9YSl9aWYoYT1vLWwsZHx8IShhPDApKXtpZihhLz1kLGQ8MCl7aWYoYT51KXJldHVybjthPmMmJihjPWEpfWVsc2UgaWYoZD4wKXtpZihhPGMpcmV0dXJuO2E8dSYmKHU9YSl9cmV0dXJuIGM+MCYmKHRbMF09cytjKmgsdFsxXT1sK2MqZCksdTwxJiYoZVswXT1zK3UqaCxlWzFdPWwrdSpkKSwhMH19fX19KShsLGIsdCxlLG4saSk/cyYmKHYubGluZVN0YXJ0KCksdi5wb2ludChvLGEpLHk9ITEpOihnfHwodi5saW5lU3RhcnQoKSx2LnBvaW50KGxbMF0sbFsxXSkpLHYucG9pbnQoYlswXSxiWzFdKSxzfHx2LmxpbmVFbmQoKSx5PSExKX1mPW8sbT1hLGc9c31yZXR1cm4geH19dmFyIFlYLFhYLCRYLEtYPVNxKCksWlg9e3NwaGVyZTokcSxwb2ludDokcSxsaW5lU3RhcnQ6ZnVuY3Rpb24gSlgoKXtaWC5wb2ludD10JCxaWC5saW5lRW5kPVFYfSxsaW5lRW5kOiRxLHBvbHlnb25TdGFydDokcSxwb2x5Z29uRW5kOiRxfTtmdW5jdGlvbiBRWCgpe1pYLnBvaW50PVpYLmxpbmVFbmQ9JHF9ZnVuY3Rpb24gdCQodCxlKXtZWD10Kj1JcSxYWD1VcShlKj1JcSksJFg9RHEoZSksWlgucG9pbnQ9ZSR9ZnVuY3Rpb24gZSQodCxlKXt0Kj1JcTt2YXIgbj1VcShlKj1JcSksaT1EcShlKSxyPU9xKHQtWVgpLG89RHEociksYT1pKlVxKHIpLHM9JFgqbi1YWCppKm8sbD1YWCpuKyRYKmkqbztLWC5hZGQoenEoR3EoYSphK3MqcyksbCkpLFlYPXQsWFg9biwkWD1pfWZ1bmN0aW9uIG4kKHQpe3JldHVybiBLWC5yZXNldCgpLGVZKHQsWlgpLCtLWH12YXIgaSQ9W251bGwsbnVsbF0sciQ9e3R5cGU6IkxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOmkkfTtmdW5jdGlvbiBvJCh0LGUpe3JldHVybiBpJFswXT10LGkkWzFdPWUsbiQociQpfXZhciBhJD17RmVhdHVyZTpmdW5jdGlvbih0LGUpe3JldHVybiBsJCh0Lmdlb21ldHJ5LGUpfSxGZWF0dXJlQ29sbGVjdGlvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmZlYXR1cmVzLGk9LTEscj1uLmxlbmd0aDsrK2k8cjspaWYobCQobltpXS5nZW9tZXRyeSxlKSlyZXR1cm4hMDtyZXR1cm4hMX19LHMkPXtTcGhlcmU6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sUG9pbnQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gYyQodC5jb29yZGluYXRlcyxlKX0sTXVsdGlQb2ludDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmNvb3JkaW5hdGVzLGk9LTEscj1uLmxlbmd0aDsrK2k8cjspaWYoYyQobltpXSxlKSlyZXR1cm4hMDtyZXR1cm4hMX0sTGluZVN0cmluZzpmdW5jdGlvbih0LGUpe3JldHVybiB1JCh0LmNvb3JkaW5hdGVzLGUpfSxNdWx0aUxpbmVTdHJpbmc6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5jb29yZGluYXRlcyxpPS0xLHI9bi5sZW5ndGg7KytpPHI7KWlmKHUkKG5baV0sZSkpcmV0dXJuITA7cmV0dXJuITF9LFBvbHlnb246ZnVuY3Rpb24odCxlKXtyZXR1cm4gaCQodC5jb29yZGluYXRlcyxlKX0sTXVsdGlQb2x5Z29uOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXQuY29vcmRpbmF0ZXMsaT0tMSxyPW4ubGVuZ3RoOysraTxyOylpZihoJChuW2ldLGUpKXJldHVybiEwO3JldHVybiExfSxHZW9tZXRyeUNvbGxlY3Rpb246ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5nZW9tZXRyaWVzLGk9LTEscj1uLmxlbmd0aDsrK2k8cjspaWYobCQobltpXSxlKSlyZXR1cm4hMDtyZXR1cm4hMX19O2Z1bmN0aW9uIGwkKHQsZSl7cmV0dXJuISghdHx8IXMkLmhhc093blByb3BlcnR5KHQudHlwZSkpJiZzJFt0LnR5cGVdKHQsZSl9ZnVuY3Rpb24gYyQodCxlKXtyZXR1cm4gMD09PW8kKHQsZSl9ZnVuY3Rpb24gdSQodCxlKXt2YXIgbj1vJCh0WzBdLHRbMV0pO3JldHVybiBvJCh0WzBdLGUpK28kKGUsdFsxXSk8PW4rQ3F9ZnVuY3Rpb24gaCQodCxlKXtyZXR1cm4hIU5YKHQubWFwKGQkKSxwJChlKSl9ZnVuY3Rpb24gZCQodCl7cmV0dXJuKHQ9dC5tYXAocCQpKS5wb3AoKSx0fWZ1bmN0aW9uIHAkKHQpe3JldHVyblt0WzBdKklxLHRbMV0qSXFdfWZ1bmN0aW9uIGYkKHQsZSxuKXt2YXIgaT1PWCh0LGUtQ3EsbikuY29uY2F0KGUpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gaS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVyblt0LGVdfSkpfX1mdW5jdGlvbiBtJCh0LGUsbil7dmFyIGk9T1godCxlLUNxLG4pLmNvbmNhdChlKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGkubWFwKChmdW5jdGlvbihlKXtyZXR1cm5bZSx0XX0pKX19ZnVuY3Rpb24gZyQoKXt2YXIgdCxlLG4saSxyLG8sYSxzLGwsYyx1LGgsZD0xMCxwPWQsZj05MCxtPTM2MCxnPTIuNTtmdW5jdGlvbiBfKCl7cmV0dXJue3R5cGU6Ik11bHRpTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6eSgpfX1mdW5jdGlvbiB5KCl7cmV0dXJuIE9YKEJxKGkvZikqZixuLGYpLm1hcCh1KS5jb25jYXQoT1goQnEocy9tKSptLGEsbSkubWFwKGgpKS5jb25jYXQoT1goQnEoZS9kKSpkLHQsZCkuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gT3EodCVmKT5DcX0pKS5tYXAobCkpLmNvbmNhdChPWChCcShvL3ApKnAscixwKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBPcSh0JW0pPkNxfSkpLm1hcChjKSl9cmV0dXJuIF8ubGluZXM9ZnVuY3Rpb24oKXtyZXR1cm4geSgpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJue3R5cGU6IkxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOnR9fSkpfSxfLm91dGxpbmU9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W3UoaSkuY29uY2F0KGgoYSkuc2xpY2UoMSksdShuKS5yZXZlcnNlKCkuc2xpY2UoMSksaChzKS5yZXZlcnNlKCkuc2xpY2UoMSkpXX19LF8uZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP18uZXh0ZW50TWFqb3IodCkuZXh0ZW50TWlub3IodCk6Xy5leHRlbnRNaW5vcigpfSxfLmV4dGVudE1ham9yPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSt0WzBdWzFdLGE9K3RbMV1bMV0sKGk9K3RbMF1bMF0pPihuPSt0WzFdWzBdKSYmKHQ9aSxpPW4sbj10KSxzPmEmJih0PXMscz1hLGE9dCksXy5wcmVjaXNpb24oZykpOltbaSxzXSxbbixhXV19LF8uZXh0ZW50TWlub3I9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89K25bMF1bMV0scj0rblsxXVsxXSwoZT0rblswXVswXSk+KHQ9K25bMV1bMF0pJiYobj1lLGU9dCx0PW4pLG8+ciYmKG49byxvPXIscj1uKSxfLnByZWNpc2lvbihnKSk6W1tlLG9dLFt0LHJdXX0sXy5zdGVwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP18uc3RlcE1ham9yKHQpLnN0ZXBNaW5vcih0KTpfLnN0ZXBNaW5vcigpfSxfLnN0ZXBNYWpvcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0rdFswXSxtPSt0WzFdLF8pOltmLG1dfSxfLnN0ZXBNaW5vcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0rdFswXSxwPSt0WzFdLF8pOltkLHBdfSxfLnByZWNpc2lvbj1mdW5jdGlvbihkKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz0rZCxsPWYkKG8sciw5MCksYz1tJChlLHQsZyksdT1mJChzLGEsOTApLGg9bSQoaSxuLGcpLF8pOmd9LF8uZXh0ZW50TWFqb3IoW1stMTgwLC04OS45OTk5OTldLFsxODAsODkuOTk5OTk5XV0pLmV4dGVudE1pbm9yKFtbLTE4MCwtODAuMDAwMDAxXSxbMTgwLDgwLjAwMDAwMV1dKX1mdW5jdGlvbiBfJCh0KXtyZXR1cm4gdH12YXIgeSQsdiQsYiQseCQsdyQ9U3EoKSxTJD1TcSgpLE0kPXtwb2ludDokcSxsaW5lU3RhcnQ6JHEsbGluZUVuZDokcSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtNJC5saW5lU3RhcnQ9RSQsTSQubGluZUVuZD1BJH0scG9seWdvbkVuZDpmdW5jdGlvbigpe00kLmxpbmVTdGFydD1NJC5saW5lRW5kPU0kLnBvaW50PSRxLHckLmFkZChPcShTJCkpLFMkLnJlc2V0KCl9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciB0PXckLzI7cmV0dXJuIHckLnJlc2V0KCksdH19O2Z1bmN0aW9uIEUkKCl7TSQucG9pbnQ9VCR9ZnVuY3Rpb24gVCQodCxlKXtNJC5wb2ludD1DJCx5JD1iJD10LHYkPXgkPWV9ZnVuY3Rpb24gQyQodCxlKXtTJC5hZGQoeCQqdC1iJCplKSxiJD10LHgkPWV9ZnVuY3Rpb24gQSQoKXtDJCh5JCx2JCl9dmFyIGskLEwkLFAkLE4kLEkkPTEvMCxPJD1JJCxSJD0tSSQseiQ9UiQsRCQ9e3BvaW50OmZ1bmN0aW9uIEIkKHQsZSl7dDxJJCYmKEkkPXQpLHQ+UiQmJihSJD10KSxlPE8kJiYoTyQ9ZSksZT56JCYmKHokPWUpfSxsaW5lU3RhcnQ6JHEsbGluZUVuZDokcSxwb2x5Z29uU3RhcnQ6JHEscG9seWdvbkVuZDokcSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgdD1bW0kkLE8kXSxbUiQseiRdXTtyZXR1cm4gUiQ9eiQ9LShPJD1JJD0xLzApLHR9fSxIJD0wLEYkPTAsViQ9MCxVJD0wLGokPTAsRyQ9MCxXJD0wLHEkPTAsWSQ9MCxYJD17cG9pbnQ6JCQsbGluZVN0YXJ0OkskLGxpbmVFbmQ6USQscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7WCQubGluZVN0YXJ0PXRLLFgkLmxpbmVFbmQ9ZUt9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtYJC5wb2ludD0kJCxYJC5saW5lU3RhcnQ9SyQsWCQubGluZUVuZD1RJH0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHQ9WSQ/W1ckL1kkLHEkL1kkXTpHJD9bVSQvRyQsaiQvRyRdOlYkP1tIJC9WJCxGJC9WJF06W05hTixOYU5dO3JldHVybiBIJD1GJD1WJD1VJD1qJD1HJD1XJD1xJD1ZJD0wLHR9fTtmdW5jdGlvbiAkJCh0LGUpe0gkKz10LEYkKz1lLCsrViR9ZnVuY3Rpb24gSyQoKXtYJC5wb2ludD1aJH1mdW5jdGlvbiBaJCh0LGUpe1gkLnBvaW50PUokLCQkKFAkPXQsTiQ9ZSl9ZnVuY3Rpb24gSiQodCxlKXt2YXIgbj10LVAkLGk9ZS1OJCxyPUdxKG4qbitpKmkpO1UkKz1yKihQJCt0KS8yLGokKz1yKihOJCtlKS8yLEckKz1yLCQkKFAkPXQsTiQ9ZSl9ZnVuY3Rpb24gUSQoKXtYJC5wb2ludD0kJH1mdW5jdGlvbiB0Sygpe1gkLnBvaW50PW5LfWZ1bmN0aW9uIGVLKCl7aUsoayQsTCQpfWZ1bmN0aW9uIG5LKHQsZSl7WCQucG9pbnQ9aUssJCQoayQ9UCQ9dCxMJD1OJD1lKX1mdW5jdGlvbiBpSyh0LGUpe3ZhciBuPXQtUCQsaT1lLU4kLHI9R3EobipuK2kqaSk7VSQrPXIqKFAkK3QpLzIsaiQrPXIqKE4kK2UpLzIsRyQrPXIsVyQrPShyPU4kKnQtUCQqZSkqKFAkK3QpLHEkKz1yKihOJCtlKSxZJCs9MypyLCQkKFAkPXQsTiQ9ZSl9ZnVuY3Rpb24gcksodCl7dGhpcy5fY29udGV4dD10fXJLLnByb3RvdHlwZT17X3JhZGl1czo0LjUscG9pbnRSYWRpdXM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3JhZGl1cz10LHRoaXN9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0scG9seWdvbkVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7MD09PXRoaXMuX2xpbmUmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fcG9pbnQ9TmFOfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSksdGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTticmVhaztkZWZhdWx0OnRoaXMuX2NvbnRleHQubW92ZVRvKHQrdGhpcy5fcmFkaXVzLGUpLHRoaXMuX2NvbnRleHQuYXJjKHQsZSx0aGlzLl9yYWRpdXMsMCxQcSl9fSxyZXN1bHQ6JHF9O3ZhciBvSyxhSyxzSyxsSyxjSyx1Sz1TcSgpLGhLPXtwb2ludDokcSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtoSy5wb2ludD1kS30sbGluZUVuZDpmdW5jdGlvbigpe29LJiZwSyhhSyxzSyksaEsucG9pbnQ9JHF9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe29LPSEwfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7b0s9bnVsbH0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHQ9K3VLO3JldHVybiB1Sy5yZXNldCgpLHR9fTtmdW5jdGlvbiBkSyh0LGUpe2hLLnBvaW50PXBLLGFLPWxLPXQsc0s9Y0s9ZX1mdW5jdGlvbiBwSyh0LGUpe3VLLmFkZChHcSgobEstPXQpKmxLKyhjSy09ZSkqY0spKSxsSz10LGNLPWV9ZnVuY3Rpb24gZksoKXt0aGlzLl9zdHJpbmc9W119ZnVuY3Rpb24gbUsodCl7cmV0dXJuIm0wLCIrdCsiYSIrdCsiLCIrdCsiIDAgMSwxIDAsIistMip0KyJhIit0KyIsIit0KyIgMCAxLDEgMCwiKzIqdCsieiJ9ZnVuY3Rpb24gZ0sodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPW5ldyBfSztmb3IodmFyIGkgaW4gdCluW2ldPXRbaV07cmV0dXJuIG4uc3RyZWFtPWUsbn19ZnVuY3Rpb24gX0soKXt9ZnVuY3Rpb24geUsodCxlLG4pe3ZhciBpPXQuY2xpcEV4dGVudCYmdC5jbGlwRXh0ZW50KCk7cmV0dXJuIHQuc2NhbGUoMTUwKS50cmFuc2xhdGUoWzAsMF0pLG51bGwhPWkmJnQuY2xpcEV4dGVudChudWxsKSxlWShuLHQuc3RyZWFtKEQkKSksZShEJC5yZXN1bHQoKSksbnVsbCE9aSYmdC5jbGlwRXh0ZW50KGkpLHR9ZnVuY3Rpb24gdksodCxlLG4pe3JldHVybiB5Syh0LChmdW5jdGlvbihuKXt2YXIgaT1lWzFdWzBdLWVbMF1bMF0scj1lWzFdWzFdLWVbMF1bMV0sbz1NYXRoLm1pbihpLyhuWzFdWzBdLW5bMF1bMF0pLHIvKG5bMV1bMV0tblswXVsxXSkpLGE9K2VbMF1bMF0rKGktbyooblsxXVswXStuWzBdWzBdKSkvMixzPStlWzBdWzFdKyhyLW8qKG5bMV1bMV0rblswXVsxXSkpLzI7dC5zY2FsZSgxNTAqbykudHJhbnNsYXRlKFthLHNdKX0pLG4pfWZ1bmN0aW9uIGJLKHQsZSxuKXtyZXR1cm4gdksodCxbWzAsMF0sZV0sbil9ZnVuY3Rpb24geEsodCxlLG4pe3JldHVybiB5Syh0LChmdW5jdGlvbihuKXt2YXIgaT0rZSxyPWkvKG5bMV1bMF0tblswXVswXSksbz0oaS1yKihuWzFdWzBdK25bMF1bMF0pKS8yLGE9LXIqblswXVsxXTt0LnNjYWxlKDE1MCpyKS50cmFuc2xhdGUoW28sYV0pfSksbil9ZnVuY3Rpb24gd0sodCxlLG4pe3JldHVybiB5Syh0LChmdW5jdGlvbihuKXt2YXIgaT0rZSxyPWkvKG5bMV1bMV0tblswXVsxXSksbz0tcipuWzBdWzBdLGE9KGktciooblsxXVsxXStuWzBdWzFdKSkvMjt0LnNjYWxlKDE1MCpyKS50cmFuc2xhdGUoW28sYV0pfSksbil9ZksucHJvdG90eXBlPXtfcmFkaXVzOjQuNSxfY2lyY2xlOm1LKDQuNSkscG9pbnRSYWRpdXM6ZnVuY3Rpb24odCl7cmV0dXJuKHQ9K3QpIT09dGhpcy5fcmFkaXVzJiYodGhpcy5fcmFkaXVzPXQsdGhpcy5fY2lyY2xlPW51bGwpLHRoaXN9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0scG9seWdvbkVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7MD09PXRoaXMuX2xpbmUmJnRoaXMuX3N0cmluZy5wdXNoKCJaIiksdGhpcy5fcG9pbnQ9TmFOfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3N0cmluZy5wdXNoKCJNIix0LCIsIixlKSx0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9zdHJpbmcucHVzaCgiTCIsdCwiLCIsZSk7YnJlYWs7ZGVmYXVsdDpudWxsPT10aGlzLl9jaXJjbGUmJih0aGlzLl9jaXJjbGU9bUsodGhpcy5fcmFkaXVzKSksdGhpcy5fc3RyaW5nLnB1c2goIk0iLHQsIiwiLGUsdGhpcy5fY2lyY2xlKX19LHJlc3VsdDpmdW5jdGlvbigpe2lmKHRoaXMuX3N0cmluZy5sZW5ndGgpe3ZhciB0PXRoaXMuX3N0cmluZy5qb2luKCIiKTtyZXR1cm4gdGhpcy5fc3RyaW5nPVtdLHR9cmV0dXJuIG51bGx9fSxfSy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOl9LLHBvaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy5zdHJlYW0ucG9pbnQodCxlKX0sc3BoZXJlOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnBvbHlnb25FbmQoKX19O3ZhciBTSz1EcSgzMCpJcSk7ZnVuY3Rpb24gTUsodCxlKXtyZXR1cm4rZT8oZnVuY3Rpb24gbih0LGUpe2Z1bmN0aW9uIG4oaSxyLG8sYSxzLGwsYyx1LGgsZCxwLGYsbSxnKXt2YXIgXz1jLWkseT11LXIsdj1fKl8reSp5O2lmKHY+NCplJiZtLS0pe3ZhciBiPWErZCx4PXMrcCx3PWwrZixTPUdxKGIqYit4Kngrdyp3KSxNPVlxKHcvPVMpLEU9T3EoT3EodyktMSk8Q3F8fE9xKG8taCk8Q3E/KG8raCkvMjp6cSh4LGIpLFQ9dChFLE0pLEM9VFswXSxBPVRbMV0saz1DLWksTD1BLXIsUD15KmstXypMOyhQKlAvdj5lfHxPcSgoXyprK3kqTCkvdi0uNSk+LjN8fGEqZCtzKnArbCpmPFNLKSYmKG4oaSxyLG8sYSxzLGwsQyxBLEUsYi89Uyx4Lz1TLHcsbSxnKSxnLnBvaW50KEMsQSksbihDLEEsRSxiLHgsdyxjLHUsaCxkLHAsZixtLGcpKX19cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBpLHIsbyxhLHMsbCxjLHUsaCxkLHAsZixtPXtwb2ludDpnLGxpbmVTdGFydDpfLGxpbmVFbmQ6dixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtlLnBvbHlnb25TdGFydCgpLG0ubGluZVN0YXJ0PWJ9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtlLnBvbHlnb25FbmQoKSxtLmxpbmVTdGFydD1ffX07ZnVuY3Rpb24gZyhuLGkpe249dChuLGkpLGUucG9pbnQoblswXSxuWzFdKX1mdW5jdGlvbiBfKCl7dT1OYU4sbS5wb2ludD15LGUubGluZVN0YXJ0KCl9ZnVuY3Rpb24geShpLHIpe3ZhciBvPW1ZKFtpLHJdKSxhPXQoaSxyKTtuKHUsaCxjLGQscCxmLHU9YVswXSxoPWFbMV0sYz1pLGQ9b1swXSxwPW9bMV0sZj1vWzJdLDE2LGUpLGUucG9pbnQodSxoKX1mdW5jdGlvbiB2KCl7bS5wb2ludD1nLGUubGluZUVuZCgpfWZ1bmN0aW9uIGIoKXtfKCksbS5wb2ludD14LG0ubGluZUVuZD13fWZ1bmN0aW9uIHgodCxlKXt5KGk9dCxlKSxyPXUsbz1oLGE9ZCxzPXAsbD1mLG0ucG9pbnQ9eX1mdW5jdGlvbiB3KCl7bih1LGgsYyxkLHAsZixyLG8saSxhLHMsbCwxNixlKSxtLmxpbmVFbmQ9dix2KCl9cmV0dXJuIG19fSkodCxlKTooZnVuY3Rpb24gaSh0KXtyZXR1cm4gZ0soe3BvaW50OmZ1bmN0aW9uKGUsbil7ZT10KGUsbiksdGhpcy5zdHJlYW0ucG9pbnQoZVswXSxlWzFdKX19KX0pKHQpfXZhciBFSz1nSyh7cG9pbnQ6ZnVuY3Rpb24odCxlKXt0aGlzLnN0cmVhbS5wb2ludCh0KklxLGUqSXEpfX0pO2Z1bmN0aW9uIFRLKHQpe3JldHVybiBDSygoZnVuY3Rpb24oKXtyZXR1cm4gdH0pKSgpfWZ1bmN0aW9uIENLKHQpe3ZhciBlLG4saSxyLG8sYSxzLGwsYyx1LGg9MTUwLGQ9NDgwLHA9MjUwLGY9MCxtPTAsZz0wLF89MCx5PTAsdj1udWxsLGI9RlgseD1udWxsLHc9XyQsUz0uNSxNPU1LKEMsUyk7ZnVuY3Rpb24gRSh0KXtyZXR1cm5bKHQ9byh0WzBdKklxLHRbMV0qSXEpKVswXSpoK24saS10WzFdKmhdfWZ1bmN0aW9uIFQodCl7cmV0dXJuKHQ9by5pbnZlcnQoKHRbMF0tbikvaCwoaS10WzFdKS9oKSkmJlt0WzBdKk5xLHRbMV0qTnFdfWZ1bmN0aW9uIEModCxyKXtyZXR1cm5bKHQ9ZSh0LHIpKVswXSpoK24saS10WzFdKmhdfWZ1bmN0aW9uIEEoKXtvPV9YKHI9dlgoZyxfLHkpLGUpO3ZhciB0PWUoZixtKTtyZXR1cm4gbj1kLXRbMF0qaCxpPXArdFsxXSpoLGsoKX1mdW5jdGlvbiBrKCl7cmV0dXJuIGM9dT1udWxsLEV9cmV0dXJuIEUuc3RyZWFtPWZ1bmN0aW9uKHQpe3JldHVybiBjJiZ1PT09dD9jOmM9RUsoKGZ1bmN0aW9uIGUodCl7cmV0dXJuIGdLKHtwb2ludDpmdW5jdGlvbihlLG4pe3ZhciBpPXQoZSxuKTtyZXR1cm4gdGhpcy5zdHJlYW0ucG9pbnQoaVswXSxpWzFdKX19KX0pKHIpKGIoTSh3KHU9dCkpKSkpfSxFLnByZWNsaXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGI9dCx2PXZvaWQgMCxrKCkpOmJ9LEUucG9zdGNsaXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHc9dCx4PWE9cz1sPW51bGwsaygpKTp3fSxFLmNsaXBBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj0rdD9qWCh2PXQqSXEpOih2PW51bGwsRlgpLGsoKSk6dipOcX0sRS5jbGlwRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh3PW51bGw9PXQ/KHg9YT1zPWw9bnVsbCxfJCk6cVgoeD0rdFswXVswXSxhPSt0WzBdWzFdLHM9K3RbMV1bMF0sbD0rdFsxXVsxXSksaygpKTpudWxsPT14P251bGw6W1t4LGFdLFtzLGxdXX0sRS5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0rdCxBKCkpOmh9LEUudHJhbnNsYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPSt0WzBdLHA9K3RbMV0sQSgpKTpbZCxwXX0sRS5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9dFswXSUzNjAqSXEsbT10WzFdJTM2MCpJcSxBKCkpOltmKk5xLG0qTnFdfSxFLnJvdGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz10WzBdJTM2MCpJcSxfPXRbMV0lMzYwKklxLHk9dC5sZW5ndGg+Mj90WzJdJTM2MCpJcTowLEEoKSk6W2cqTnEsXypOcSx5Kk5xXX0sRS5wcmVjaXNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KE09TUsoQyxTPXQqdCksaygpKTpHcShTKX0sRS5maXRFeHRlbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdksoRSx0LGUpfSxFLmZpdFNpemU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYksoRSx0LGUpfSxFLmZpdFdpZHRoPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHhLKEUsdCxlKX0sRS5maXRIZWlnaHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gd0soRSx0LGUpfSxmdW5jdGlvbigpe3JldHVybiBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLEUuaW52ZXJ0PWUuaW52ZXJ0JiZULEEoKX19ZnVuY3Rpb24gQUsodCl7dmFyIGU9MCxuPUFxLzMsaT1DSyh0KSxyPWkoZSxuKTtyZXR1cm4gci5wYXJhbGxlbHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/aShlPXRbMF0qSXEsbj10WzFdKklxKTpbZSpOcSxuKk5xXX0scn1mdW5jdGlvbiBrSyh0LGUpe3ZhciBuPVVxKHQpLGk9KG4rVXEoZSkpLzI7aWYoT3EoaSk8Q3EpcmV0dXJuKGZ1bmN0aW9uIHIodCl7dmFyIGU9RHEodCk7ZnVuY3Rpb24gbih0LG4pe3JldHVyblt0KmUsVXEobikvZV19cmV0dXJuIG4uaW52ZXJ0PWZ1bmN0aW9uKHQsbil7cmV0dXJuW3QvZSxZcShuKmUpXX0sbn0pKHQpO3ZhciBvPTErbiooMippLW4pLGE9R3EobykvaTtmdW5jdGlvbiBzKHQsZSl7dmFyIG49R3Eoby0yKmkqVXEoZSkpL2k7cmV0dXJuW24qVXEodCo9aSksYS1uKkRxKHQpXX1yZXR1cm4gcy5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1hLWU7cmV0dXJuW3pxKHQsT3EobikpL2kqanEobiksWXEoKG8tKHQqdCtuKm4pKmkqaSkvKDIqaSkpXX0sc31mdW5jdGlvbiBMSygpe3JldHVybiBBSyhrSykuc2NhbGUoMTU1LjQyNCkuY2VudGVyKFswLDMzLjY0NDJdKX1mdW5jdGlvbiBQSygpe3JldHVybiBMSygpLnBhcmFsbGVscyhbMjkuNSw0NS41XSkuc2NhbGUoMTA3MCkudHJhbnNsYXRlKFs0ODAsMjUwXSkucm90YXRlKFs5NiwwXSkuY2VudGVyKFstLjYsMzguN10pfWZ1bmN0aW9uIE5LKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3ZhciBpPURxKGUpLHI9RHEobiksbz10KGkqcik7cmV0dXJuW28qcipVcShlKSxvKlVxKG4pXX19ZnVuY3Rpb24gSUsodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7dmFyIGk9R3EoZSplK24qbikscj10KGkpLG89VXEociksYT1EcShyKTtyZXR1cm5benEoZSpvLGkqYSksWXEoaSYmbipvL2kpXX19dmFyIE9LPU5LKChmdW5jdGlvbih0KXtyZXR1cm4gR3EoMi8oMSt0KSl9KSk7T0suaW52ZXJ0PUlLKChmdW5jdGlvbih0KXtyZXR1cm4gMipZcSh0LzIpfSkpO3ZhciBSSz1OSygoZnVuY3Rpb24odCl7cmV0dXJuKHQ9cXEodCkpJiZ0L1VxKHQpfSkpO2Z1bmN0aW9uIHpLKHQsZSl7cmV0dXJuW3QsRnEoV3EoKGtxK2UpLzIpKV19ZnVuY3Rpb24gREsodCl7dmFyIGUsbixpLHI9VEsodCksbz1yLmNlbnRlcixhPXIuc2NhbGUscz1yLnRyYW5zbGF0ZSxsPXIuY2xpcEV4dGVudCxjPW51bGw7ZnVuY3Rpb24gdSgpe3ZhciBvPUFxKmEoKSxzPXIoU1goci5yb3RhdGUoKSkuaW52ZXJ0KFswLDBdKSk7cmV0dXJuIGwobnVsbD09Yz9bW3NbMF0tbyxzWzFdLW9dLFtzWzBdK28sc1sxXStvXV06dD09PXpLP1tbTWF0aC5tYXgoc1swXS1vLGMpLGVdLFtNYXRoLm1pbihzWzBdK28sbiksaV1dOltbYyxNYXRoLm1heChzWzFdLW8sZSldLFtuLE1hdGgubWluKHNbMV0rbyxpKV1dKX1yZXR1cm4gci5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYSh0KSx1KCkpOmEoKX0sci50cmFuc2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHModCksdSgpKTpzKCl9LHIuY2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvKHQpLHUoKSk6bygpfSxyLmNsaXBFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/Yz1lPW49aT1udWxsOihjPSt0WzBdWzBdLGU9K3RbMF1bMV0sbj0rdFsxXVswXSxpPSt0WzFdWzFdKSx1KCkpOm51bGw9PWM/bnVsbDpbW2MsZV0sW24saV1dfSx1KCl9ZnVuY3Rpb24gQksodCl7cmV0dXJuIFdxKChrcSt0KS8yKX1mdW5jdGlvbiBISyh0LGUpe3ZhciBuPURxKHQpLGk9dD09PWU/VXEodCk6RnEobi9EcShlKSkvRnEoQksoZSkvQksodCkpLHI9bipWcShCSyh0KSxpKS9pO2lmKCFpKXJldHVybiB6SztmdW5jdGlvbiBvKHQsZSl7cj4wP2U8LWtxK0NxJiYoZT0ta3ErQ3EpOmU+a3EtQ3EmJihlPWtxLUNxKTt2YXIgbj1yL1ZxKEJLKGUpLGkpO3JldHVybltuKlVxKGkqdCksci1uKkRxKGkqdCldfXJldHVybiBvLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciBuPXItZSxvPWpxKGkpKkdxKHQqdCtuKm4pO3JldHVyblt6cSh0LE9xKG4pKS9pKmpxKG4pLDIqUnEoVnEoci9vLDEvaSkpLWtxXX0sb31mdW5jdGlvbiBGSyh0LGUpe3JldHVyblt0LGVdfWZ1bmN0aW9uIFZLKHQsZSl7dmFyIG49RHEodCksaT10PT09ZT9VcSh0KToobi1EcShlKSkvKGUtdCkscj1uL2krdDtpZihPcShpKTxDcSlyZXR1cm4gRks7ZnVuY3Rpb24gbyh0LGUpe3ZhciBuPXItZSxvPWkqdDtyZXR1cm5bbipVcShvKSxyLW4qRHEobyldfXJldHVybiBvLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciBuPXItZTtyZXR1cm5benEodCxPcShuKSkvaSpqcShuKSxyLWpxKGkpKkdxKHQqdCtuKm4pXX0sb31mdW5jdGlvbiBVSyh0LGUpe3ZhciBuPURxKGUpLGk9RHEodCkqbjtyZXR1cm5bbipVcSh0KS9pLFVxKGUpL2ldfWZ1bmN0aW9uIGpLKHQsZSxuLGkpe3JldHVybiAxPT09dCYmMT09PWUmJjA9PT1uJiYwPT09aT9fJDpnSyh7cG9pbnQ6ZnVuY3Rpb24ocixvKXt0aGlzLnN0cmVhbS5wb2ludChyKnQrbixvKmUraSl9fSl9ZnVuY3Rpb24gR0sodCxlKXt2YXIgbj1lKmUsaT1uKm47cmV0dXJuW3QqKC44NzA3LS4xMzE5NzkqbitpKihpKiguMDAzOTcxKm4tLjAwMTUyOSppKS0uMDEzNzkxKSksZSooMS4wMDcyMjYrbiooLjAxNTA4NStpKiguMDI4ODc0Km4tLjA0NDQ3NS0uMDA1OTE2KmkpKSldfWZ1bmN0aW9uIFdLKHQsZSl7cmV0dXJuW0RxKGUpKlVxKHQpLFVxKGUpXX1mdW5jdGlvbiBxSyh0LGUpe3ZhciBuPURxKGUpLGk9MStEcSh0KSpuO3JldHVybltuKlVxKHQpL2ksVXEoZSkvaV19ZnVuY3Rpb24gWUsodCxlKXtyZXR1cm5bRnEoV3EoKGtxK2UpLzIpKSwtdF19ZnVuY3Rpb24gWEsodCxlKXtyZXR1cm4gdC5wYXJlbnQ9PT1lLnBhcmVudD8xOjJ9ZnVuY3Rpb24gJEsodCxlKXtyZXR1cm4gdCtlLnh9ZnVuY3Rpb24gS0sodCxlKXtyZXR1cm4gTWF0aC5tYXgodCxlLnkpfWZ1bmN0aW9uIFpLKHQpe3ZhciBlPTAsbj10LmNoaWxkcmVuLGk9biYmbi5sZW5ndGg7aWYoaSlmb3IoOy0taT49MDspZSs9bltpXS52YWx1ZTtlbHNlIGU9MTt0LnZhbHVlPWV9ZnVuY3Rpb24gSksodCxlKXt2YXIgbixpLHIsbyxhLHM9bmV3IG5aKHQpLGw9K3QudmFsdWUmJihzLnZhbHVlPXQudmFsdWUpLGM9W3NdO2ZvcihudWxsPT1lJiYoZT1RSyk7bj1jLnBvcCgpOylpZihsJiYobi52YWx1ZT0rbi5kYXRhLnZhbHVlKSwocj1lKG4uZGF0YSkpJiYoYT1yLmxlbmd0aCkpZm9yKG4uY2hpbGRyZW49bmV3IEFycmF5KGEpLG89YS0xO28+PTA7LS1vKWMucHVzaChpPW4uY2hpbGRyZW5bb109bmV3IG5aKHJbb10pKSxpLnBhcmVudD1uLGkuZGVwdGg9bi5kZXB0aCsxO3JldHVybiBzLmVhY2hCZWZvcmUoZVopfWZ1bmN0aW9uIFFLKHQpe3JldHVybiB0LmNoaWxkcmVufWZ1bmN0aW9uIHRaKHQpe3QuZGF0YT10LmRhdGEuZGF0YX1mdW5jdGlvbiBlWih0KXt2YXIgZT0wO2Rve3QuaGVpZ2h0PWV9d2hpbGUoKHQ9dC5wYXJlbnQpJiZ0LmhlaWdodDwrK2UpfWZ1bmN0aW9uIG5aKHQpe3RoaXMuZGF0YT10LHRoaXMuZGVwdGg9dGhpcy5oZWlnaHQ9MCx0aGlzLnBhcmVudD1udWxsfVJLLmludmVydD1JSygoZnVuY3Rpb24odCl7cmV0dXJuIHR9KSkseksuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuW3QsMipScShIcShlKSkta3FdfSxGSy5pbnZlcnQ9RkssVUsuaW52ZXJ0PUlLKFJxKSxHSy5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgbixpPWUscj0yNTtkb3t2YXIgbz1pKmksYT1vKm87aS09bj0oaSooMS4wMDcyMjYrbyooLjAxNTA4NSthKiguMDI4ODc0Km8tLjA0NDQ3NS0uMDA1OTE2KmEpKSktZSkvKDEuMDA3MjI2K28qKC4wNDUyNTUrYSooLjI1OTg2NipvLS4zMTEzMjUtLjAwNTkxNioxMSphKSkpfXdoaWxlKE9xKG4pPkNxJiYtLXI+MCk7cmV0dXJuW3QvKC44NzA3KyhvPWkqaSkqKG8qKG8qbypvKiguMDAzOTcxLS4wMDE1MjkqbyktLjAxMzc5MSktLjEzMTk3OSkpLGldfSxXSy5pbnZlcnQ9SUsoWXEpLHFLLmludmVydD1JSygoZnVuY3Rpb24odCl7cmV0dXJuIDIqUnEodCl9KSksWUsuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuWy1lLDIqUnEoSHEodCkpLWtxXX0sbloucHJvdG90eXBlPUpLLnByb3RvdHlwZT17Y29uc3RydWN0b3I6blosY291bnQ6ZnVuY3Rpb24gaVooKXtyZXR1cm4gdGhpcy5lYWNoQWZ0ZXIoWkspfSxlYWNoOmZ1bmN0aW9uIHJaKHQpe3ZhciBlLG4saSxyLG89dGhpcyxhPVtvXTtkb3tmb3IoZT1hLnJldmVyc2UoKSxhPVtdO289ZS5wb3AoKTspaWYodChvKSxuPW8uY2hpbGRyZW4pZm9yKGk9MCxyPW4ubGVuZ3RoO2k8cjsrK2kpYS5wdXNoKG5baV0pfXdoaWxlKGEubGVuZ3RoKTtyZXR1cm4gdGhpc30sZWFjaEFmdGVyOmZ1bmN0aW9uIG9aKHQpe2Zvcih2YXIgZSxuLGkscj10aGlzLG89W3JdLGE9W107cj1vLnBvcCgpOylpZihhLnB1c2gociksZT1yLmNoaWxkcmVuKWZvcihuPTAsaT1lLmxlbmd0aDtuPGk7KytuKW8ucHVzaChlW25dKTtmb3IoO3I9YS5wb3AoKTspdChyKTtyZXR1cm4gdGhpc30sZWFjaEJlZm9yZTpmdW5jdGlvbiBhWih0KXtmb3IodmFyIGUsbixpPXRoaXMscj1baV07aT1yLnBvcCgpOylpZih0KGkpLGU9aS5jaGlsZHJlbilmb3Iobj1lLmxlbmd0aC0xO24+PTA7LS1uKXIucHVzaChlW25dKTtyZXR1cm4gdGhpc30sc3VtOmZ1bmN0aW9uIHNaKHQpe3JldHVybiB0aGlzLmVhY2hBZnRlcigoZnVuY3Rpb24oZSl7Zm9yKHZhciBuPSt0KGUuZGF0YSl8fDAsaT1lLmNoaWxkcmVuLHI9aSYmaS5sZW5ndGg7LS1yPj0wOyluKz1pW3JdLnZhbHVlO2UudmFsdWU9bn0pKX0sc29ydDpmdW5jdGlvbiBsWih0KXtyZXR1cm4gdGhpcy5lYWNoQmVmb3JlKChmdW5jdGlvbihlKXtlLmNoaWxkcmVuJiZlLmNoaWxkcmVuLnNvcnQodCl9KSl9LHBhdGg6ZnVuY3Rpb24gY1oodCl7Zm9yKHZhciBlPXRoaXMsbj0oZnVuY3Rpb24gaSh0LGUpe2lmKHQ9PT1lKXJldHVybiB0O3ZhciBuPXQuYW5jZXN0b3JzKCksaT1lLmFuY2VzdG9ycygpLHI9bnVsbDtmb3IodD1uLnBvcCgpLGU9aS5wb3AoKTt0PT09ZTspcj10LHQ9bi5wb3AoKSxlPWkucG9wKCk7cmV0dXJuIHJ9KShlLHQpLHI9W2VdO2UhPT1uOylyLnB1c2goZT1lLnBhcmVudCk7Zm9yKHZhciBvPXIubGVuZ3RoO3QhPT1uOylyLnNwbGljZShvLDAsdCksdD10LnBhcmVudDtyZXR1cm4gcn0sYW5jZXN0b3JzOmZ1bmN0aW9uIHVaKCl7Zm9yKHZhciB0PXRoaXMsZT1bdF07dD10LnBhcmVudDspZS5wdXNoKHQpO3JldHVybiBlfSxkZXNjZW5kYW50czpmdW5jdGlvbiBoWigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmVhY2goKGZ1bmN0aW9uKGUpe3QucHVzaChlKX0pKSx0fSxsZWF2ZXM6ZnVuY3Rpb24gZFooKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5lYWNoQmVmb3JlKChmdW5jdGlvbihlKXtlLmNoaWxkcmVufHx0LnB1c2goZSl9KSksdH0sbGlua3M6ZnVuY3Rpb24gcFooKXt2YXIgdD10aGlzLGU9W107cmV0dXJuIHQuZWFjaCgoZnVuY3Rpb24obil7biE9PXQmJmUucHVzaCh7c291cmNlOm4ucGFyZW50LHRhcmdldDpufSl9KSksZX0sY29weTpmdW5jdGlvbiBmWigpe3JldHVybiBKSyh0aGlzKS5lYWNoQmVmb3JlKHRaKX19O3ZhciBtWj1BcnJheS5wcm90b3R5cGUuc2xpY2U7ZnVuY3Rpb24gZ1oodCl7Zm9yKHZhciBlLG4saT0wLHI9KHQ9KGZ1bmN0aW9uIG8odCl7Zm9yKHZhciBlLG4saT10Lmxlbmd0aDtpOyluPU1hdGgucmFuZG9tKCkqaS0tfDAsZT10W2ldLHRbaV09dFtuXSx0W25dPWU7cmV0dXJuIHR9KShtWi5jYWxsKHQpKSkubGVuZ3RoLGE9W107aTxyOyllPXRbaV0sbiYmdloobixlKT8rK2k6KG49eFooYT1fWihhLGUpKSxpPTApO3JldHVybiBufWZ1bmN0aW9uIF9aKHQsZSl7dmFyIG4saTtpZihiWihlLHQpKXJldHVybltlXTtmb3Iobj0wO248dC5sZW5ndGg7KytuKWlmKHlaKGUsdFtuXSkmJmJaKHdaKHRbbl0sZSksdCkpcmV0dXJuW3Rbbl0sZV07Zm9yKG49MDtuPHQubGVuZ3RoLTE7KytuKWZvcihpPW4rMTtpPHQubGVuZ3RoOysraSlpZih5Wih3Wih0W25dLHRbaV0pLGUpJiZ5Wih3Wih0W25dLGUpLHRbaV0pJiZ5Wih3Wih0W2ldLGUpLHRbbl0pJiZiWihTWih0W25dLHRbaV0sZSksdCkpcmV0dXJuW3Rbbl0sdFtpXSxlXTt0aHJvdyBuZXcgRXJyb3J9ZnVuY3Rpb24geVoodCxlKXt2YXIgbj10LnItZS5yLGk9ZS54LXQueCxyPWUueS10Lnk7cmV0dXJuIG48MHx8bipuPGkqaStyKnJ9ZnVuY3Rpb24gdloodCxlKXt2YXIgbj10LnItZS5yKzFlLTYsaT1lLngtdC54LHI9ZS55LXQueTtyZXR1cm4gbj4wJiZuKm4+aSppK3Iqcn1mdW5jdGlvbiBiWih0LGUpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7KytuKWlmKCF2Wih0LGVbbl0pKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIHhaKHQpe3N3aXRjaCh0Lmxlbmd0aCl7Y2FzZSAxOnJldHVybihmdW5jdGlvbiBlKHQpe3JldHVybnt4OnQueCx5OnQueSxyOnQucn19KSh0WzBdKTtjYXNlIDI6cmV0dXJuIHdaKHRbMF0sdFsxXSk7Y2FzZSAzOnJldHVybiBTWih0WzBdLHRbMV0sdFsyXSl9fWZ1bmN0aW9uIHdaKHQsZSl7dmFyIG49dC54LGk9dC55LHI9dC5yLG89ZS54LGE9ZS55LHM9ZS5yLGw9by1uLGM9YS1pLHU9cy1yLGg9TWF0aC5zcXJ0KGwqbCtjKmMpO3JldHVybnt4OihuK28rbC9oKnUpLzIseTooaSthK2MvaCp1KS8yLHI6KGgrcitzKS8yfX1mdW5jdGlvbiBTWih0LGUsbil7dmFyIGk9dC54LHI9dC55LG89dC5yLGE9ZS54LHM9ZS55LGw9ZS5yLGM9bi54LHU9bi55LGg9bi5yLGQ9aS1hLHA9aS1jLGY9ci1zLG09ci11LGc9bC1vLF89aC1vLHk9aSppK3Iqci1vKm8sdj15LWEqYS1zKnMrbCpsLGI9eS1jKmMtdSp1K2gqaCx4PXAqZi1kKm0sdz0oZipiLW0qdikvKDIqeCktaSxTPShtKmctZipfKS94LE09KHAqdi1kKmIpLygyKngpLXIsRT0oZCpfLXAqZykveCxUPVMqUytFKkUtMSxDPTIqKG8rdypTK00qRSksQT13KncrTSpNLW8qbyxrPS0oVD8oQytNYXRoLnNxcnQoQypDLTQqVCpBKSkvKDIqVCk6QS9DKTtyZXR1cm57eDppK3crUyprLHk6citNK0UqayxyOmt9fWZ1bmN0aW9uIE1aKHQsZSxuKXt2YXIgaT10Lngscj10Lnksbz1lLnIrbi5yLGE9dC5yK24ucixzPWUueC1pLGw9ZS55LXIsYz1zKnMrbCpsO2lmKGMpe3ZhciB1PS41KygoYSo9YSktKG8qPW8pKS8oMipjKSxoPU1hdGguc3FydChNYXRoLm1heCgwLDIqbyooYStjKS0oYS09YykqYS1vKm8pKS8oMipjKTtuLng9aSt1KnMraCpsLG4ueT1yK3UqbC1oKnN9ZWxzZSBuLng9aSthLG4ueT1yfWZ1bmN0aW9uIEVaKHQsZSl7dmFyIG49ZS54LXQueCxpPWUueS10Lnkscj10LnIrZS5yO3JldHVybiByKnItMWUtNj5uKm4raSppfWZ1bmN0aW9uIFRaKHQpe3ZhciBlPXQuXyxuPXQubmV4dC5fLGk9ZS5yK24ucixyPShlLngqbi5yK24ueCplLnIpL2ksbz0oZS55Km4ucituLnkqZS5yKS9pO3JldHVybiByKnIrbypvfWZ1bmN0aW9uIENaKHQpe3RoaXMuXz10LHRoaXMubmV4dD1udWxsLHRoaXMucHJldmlvdXM9bnVsbH1mdW5jdGlvbiBBWih0KXtpZighKHI9dC5sZW5ndGgpKXJldHVybiAwO3ZhciBlLG4saSxyLG8sYSxzLGwsYyx1LGg7aWYoKGU9dFswXSkueD0wLGUueT0wLCEocj4xKSlyZXR1cm4gZS5yO2lmKGUueD0tKG49dFsxXSkucixuLng9ZS5yLG4ueT0wLCEocj4yKSlyZXR1cm4gZS5yK24ucjtNWihuLGUsaT10WzJdKSxlPW5ldyBDWihlKSxuPW5ldyBDWihuKSxpPW5ldyBDWihpKSxlLm5leHQ9aS5wcmV2aW91cz1uLG4ubmV4dD1lLnByZXZpb3VzPWksaS5uZXh0PW4ucHJldmlvdXM9ZTt0OmZvcihzPTM7czxyOysrcyl7TVooZS5fLG4uXyxpPXRbc10pLGk9bmV3IENaKGkpLGw9bi5uZXh0LGM9ZS5wcmV2aW91cyx1PW4uXy5yLGg9ZS5fLnI7ZG97aWYodTw9aCl7aWYoRVoobC5fLGkuXykpe2UubmV4dD1uPWwsbi5wcmV2aW91cz1lLC0tcztjb250aW51ZSB0fXUrPWwuXy5yLGw9bC5uZXh0fWVsc2V7aWYoRVooYy5fLGkuXykpeyhlPWMpLm5leHQ9bixuLnByZXZpb3VzPWUsLS1zO2NvbnRpbnVlIHR9aCs9Yy5fLnIsYz1jLnByZXZpb3VzfX13aGlsZShsIT09Yy5uZXh0KTtmb3IoaS5wcmV2aW91cz1lLGkubmV4dD1uLGUubmV4dD1uLnByZXZpb3VzPW49aSxvPVRaKGUpOyhpPWkubmV4dCkhPT1uOykoYT1UWihpKSk8byYmKGU9aSxvPWEpO249ZS5uZXh0fWZvcihlPVtuLl9dLGk9bjsoaT1pLm5leHQpIT09bjspZS5wdXNoKGkuXyk7Zm9yKGk9Z1ooZSkscz0wO3M8cjsrK3MpKGU9dFtzXSkueC09aS54LGUueS09aS55O3JldHVybiBpLnJ9ZnVuY3Rpb24ga1oodCl7cmV0dXJuIG51bGw9PXQ/bnVsbDpMWih0KX1mdW5jdGlvbiBMWih0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHR9ZnVuY3Rpb24gUFooKXtyZXR1cm4gMH1mdW5jdGlvbiBOWih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gSVoodCl7cmV0dXJuIE1hdGguc3FydCh0LnZhbHVlKX1mdW5jdGlvbiBPWih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7ZS5jaGlsZHJlbnx8KGUucj1NYXRoLm1heCgwLCt0KGUpfHwwKSl9fWZ1bmN0aW9uIFJaKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe2lmKGk9bi5jaGlsZHJlbil7dmFyIGkscixvLGE9aS5sZW5ndGgscz10KG4pKmV8fDA7aWYocylmb3Iocj0wO3I8YTsrK3IpaVtyXS5yKz1zO2lmKG89QVooaSkscylmb3Iocj0wO3I8YTsrK3IpaVtyXS5yLT1zO24ucj1vK3N9fX1mdW5jdGlvbiB6Wih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49ZS5wYXJlbnQ7ZS5yKj10LG4mJihlLng9bi54K3QqZS54LGUueT1uLnkrdCplLnkpfX1mdW5jdGlvbiBEWih0KXt0LngwPU1hdGgucm91bmQodC54MCksdC55MD1NYXRoLnJvdW5kKHQueTApLHQueDE9TWF0aC5yb3VuZCh0LngxKSx0LnkxPU1hdGgucm91bmQodC55MSl9ZnVuY3Rpb24gQloodCxlLG4saSxyKXtmb3IodmFyIG8sYT10LmNoaWxkcmVuLHM9LTEsbD1hLmxlbmd0aCxjPXQudmFsdWUmJihpLWUpL3QudmFsdWU7KytzPGw7KShvPWFbc10pLnkwPW4sby55MT1yLG8ueDA9ZSxvLngxPWUrPW8udmFsdWUqY312YXIgSFo9e2RlcHRoOi0xfSxGWj17fTtmdW5jdGlvbiBWWih0KXtyZXR1cm4gdC5pZH1mdW5jdGlvbiBVWih0KXtyZXR1cm4gdC5wYXJlbnRJZH1mdW5jdGlvbiBqWih0LGUpe3JldHVybiB0LnBhcmVudD09PWUucGFyZW50PzE6Mn1mdW5jdGlvbiBHWih0KXt2YXIgZT10LmNoaWxkcmVuO3JldHVybiBlP2VbMF06dC50fWZ1bmN0aW9uIFdaKHQpe3ZhciBlPXQuY2hpbGRyZW47cmV0dXJuIGU/ZVtlLmxlbmd0aC0xXTp0LnR9ZnVuY3Rpb24gcVoodCxlLG4pe3ZhciBpPW4vKGUuaS10LmkpO2UuYy09aSxlLnMrPW4sdC5jKz1pLGUueis9bixlLm0rPW59ZnVuY3Rpb24gWVoodCxlLG4pe3JldHVybiB0LmEucGFyZW50PT09ZS5wYXJlbnQ/dC5hOm59ZnVuY3Rpb24gWFoodCxlKXt0aGlzLl89dCx0aGlzLnBhcmVudD1udWxsLHRoaXMuY2hpbGRyZW49bnVsbCx0aGlzLkE9bnVsbCx0aGlzLmE9dGhpcyx0aGlzLno9MCx0aGlzLm09MCx0aGlzLmM9MCx0aGlzLnM9MCx0aGlzLnQ9bnVsbCx0aGlzLmk9ZX1mdW5jdGlvbiAkWih0LGUsbixpLHIpe2Zvcih2YXIgbyxhPXQuY2hpbGRyZW4scz0tMSxsPWEubGVuZ3RoLGM9dC52YWx1ZSYmKHItbikvdC52YWx1ZTsrK3M8bDspKG89YVtzXSkueDA9ZSxvLngxPWksby55MD1uLG8ueTE9bis9by52YWx1ZSpjfVhaLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG5aLnByb3RvdHlwZSk7dmFyIEtaPSgxK01hdGguc3FydCg1KSkvMjtmdW5jdGlvbiBaWih0LGUsbixpLHIsbyl7Zm9yKHZhciBhLHMsbCxjLHUsaCxkLHAsZixtLGcsXz1bXSx5PWUuY2hpbGRyZW4sdj0wLGI9MCx4PXkubGVuZ3RoLHc9ZS52YWx1ZTt2PHg7KXtsPXItbixjPW8taTtkb3t1PXlbYisrXS52YWx1ZX13aGlsZSghdSYmYjx4KTtmb3IoaD1kPXUsZz11KnUqKG09TWF0aC5tYXgoYy9sLGwvYykvKHcqdCkpLGY9TWF0aC5tYXgoZC9nLGcvaCk7Yjx4OysrYil7aWYodSs9cz15W2JdLnZhbHVlLHM8aCYmKGg9cykscz5kJiYoZD1zKSxnPXUqdSptLChwPU1hdGgubWF4KGQvZyxnL2gpKT5mKXt1LT1zO2JyZWFrfWY9cH1fLnB1c2goYT17dmFsdWU6dSxkaWNlOmw8YyxjaGlsZHJlbjp5LnNsaWNlKHYsYil9KSxhLmRpY2U/QlooYSxuLGkscix3P2krPWMqdS93Om8pOiRaKGEsbixpLHc/bis9bCp1L3c6cixvKSx3LT11LHY9Yn1yZXR1cm4gX312YXIgSlo9KGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0LG4saSxyLG8pe1paKGUsdCxuLGkscixvKX1yZXR1cm4gbi5yYXRpbz1mdW5jdGlvbihlKXtyZXR1cm4gdCgoZT0rZSk+MT9lOjEpfSxufSkoS1opLFFaPShmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCxuLGkscixvKXtpZigoYT10Ll9zcXVhcmlmeSkmJmEucmF0aW89PT1lKWZvcih2YXIgYSxzLGwsYyx1LGg9LTEsZD1hLmxlbmd0aCxwPXQudmFsdWU7KytoPGQ7KXtmb3IobD0ocz1hW2hdKS5jaGlsZHJlbixjPXMudmFsdWU9MCx1PWwubGVuZ3RoO2M8dTsrK2Mpcy52YWx1ZSs9bFtjXS52YWx1ZTtzLmRpY2U/QloocyxuLGkscixpKz0oby1pKSpzLnZhbHVlL3ApOiRaKHMsbixpLG4rPShyLW4pKnMudmFsdWUvcCxvKSxwLT1zLnZhbHVlfWVsc2UgdC5fc3F1YXJpZnk9YT1aWihlLHQsbixpLHIsbyksYS5yYXRpbz1lfXJldHVybiBuLnJhdGlvPWZ1bmN0aW9uKGUpe3JldHVybiB0KChlPStlKT4xP2U6MSl9LG59KShLWik7ZnVuY3Rpb24gdEoodCxlLG4pe3QucHJvdG90eXBlPWUucHJvdG90eXBlPW4sbi5jb25zdHJ1Y3Rvcj10fWZ1bmN0aW9uIGVKKHQsZSl7dmFyIG49T2JqZWN0LmNyZWF0ZSh0LnByb3RvdHlwZSk7Zm9yKHZhciBpIGluIGUpbltpXT1lW2ldO3JldHVybiBufWZ1bmN0aW9uIG5KKCl7fXZhciBpSj0uNyxySj0xL2lKLG9KPSJcXHMqKFsrLV0/XFxkKylcXHMqIixhSj0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixzSj0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIsbEo9L14jKFswLTlhLWZdezMsOH0pJC8sY0o9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW29KLG9KLG9KXSsiXFwpJCIpLHVKPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tzSixzSixzSl0rIlxcKSQiKSxoSj1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW29KLG9KLG9KLGFKXSsiXFwpJCIpLGRKPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbc0osc0osc0osYUpdKyJcXCkkIikscEo9bmV3IFJlZ0V4cCgiXmhzbFxcKCIrW2FKLHNKLHNKXSsiXFwpJCIpLGZKPW5ldyBSZWdFeHAoIl5oc2xhXFwoIitbYUosc0osc0osYUpdKyJcXCkkIiksbUo9e2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH07ZnVuY3Rpb24gZ0ooKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXgoKX1mdW5jdGlvbiBfSigpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdFJnYigpfWZ1bmN0aW9uIHlKKHQpe3ZhciBlLG47cmV0dXJuIHQ9KHQrIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLChlPWxKLmV4ZWModCkpPyhuPWVbMV0ubGVuZ3RoLGU9cGFyc2VJbnQoZVsxXSwxNiksNj09PW4/dkooZSk6Mz09PW4/bmV3IFNKKGU+PjgmMTV8ZT4+NCYyNDAsZT4+NCYxNXwyNDAmZSwoMTUmZSk8PDR8MTUmZSwxKTo4PT09bj9iSihlPj4yNCYyNTUsZT4+MTYmMjU1LGU+PjgmMjU1LCgyNTUmZSkvMjU1KTo0PT09bj9iSihlPj4xMiYxNXxlPj44JjI0MCxlPj44JjE1fGU+PjQmMjQwLGU+PjQmMTV8MjQwJmUsKCgxNSZlKTw8NHwxNSZlKS8yNTUpOm51bGwpOihlPWNKLmV4ZWModCkpP25ldyBTSihlWzFdLGVbMl0sZVszXSwxKTooZT11Si5leGVjKHQpKT9uZXcgU0ooMjU1KmVbMV0vMTAwLDI1NSplWzJdLzEwMCwyNTUqZVszXS8xMDAsMSk6KGU9aEouZXhlYyh0KSk/YkooZVsxXSxlWzJdLGVbM10sZVs0XSk6KGU9ZEouZXhlYyh0KSk/YkooMjU1KmVbMV0vMTAwLDI1NSplWzJdLzEwMCwyNTUqZVszXS8xMDAsZVs0XSk6KGU9cEouZXhlYyh0KSk/Q0ooZVsxXSxlWzJdLzEwMCxlWzNdLzEwMCwxKTooZT1mSi5leGVjKHQpKT9DSihlWzFdLGVbMl0vMTAwLGVbM10vMTAwLGVbNF0pOm1KLmhhc093blByb3BlcnR5KHQpP3ZKKG1KW3RdKToidHJhbnNwYXJlbnQiPT09dD9uZXcgU0ooTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiB2Sih0KXtyZXR1cm4gbmV3IFNKKHQ+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdCwxKX1mdW5jdGlvbiBiSih0LGUsbixpKXtyZXR1cm4gaTw9MCYmKHQ9ZT1uPU5hTiksbmV3IFNKKHQsZSxuLGkpfWZ1bmN0aW9uIHhKKHQpe3JldHVybiB0IGluc3RhbmNlb2Ygbkp8fCh0PXlKKHQpKSx0P25ldyBTSigodD10LnJnYigpKS5yLHQuZyx0LmIsdC5vcGFjaXR5KTpuZXcgU0p9ZnVuY3Rpb24gd0oodCxlLG4saSl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3hKKHQpOm5ldyBTSih0LGUsbixudWxsPT1pPzE6aSl9ZnVuY3Rpb24gU0oodCxlLG4saSl7dGhpcy5yPSt0LHRoaXMuZz0rZSx0aGlzLmI9K24sdGhpcy5vcGFjaXR5PStpfWZ1bmN0aW9uIE1KKCl7cmV0dXJuIiMiK1RKKHRoaXMucikrVEoodGhpcy5nKStUSih0aGlzLmIpfWZ1bmN0aW9uIEVKKCl7dmFyIHQ9dGhpcy5vcGFjaXR5O3JldHVybigxPT09KHQ9aXNOYU4odCk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsdCkpKT8icmdiKCI6InJnYmEoIikrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLnIpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuZyl8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5iKXx8MCkpKygxPT09dD8iKSI6IiwgIit0KyIpIil9ZnVuY3Rpb24gVEoodCl7cmV0dXJuKCh0PU1hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodCl8fDApKSk8MTY/IjAiOiIiKSt0LnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBDSih0LGUsbixpKXtyZXR1cm4gaTw9MD90PWU9bj1OYU46bjw9MHx8bj49MT90PWU9TmFOOmU8PTAmJih0PU5hTiksbmV3IExKKHQsZSxuLGkpfWZ1bmN0aW9uIEFKKHQpe2lmKHQgaW5zdGFuY2VvZiBMSilyZXR1cm4gbmV3IExKKHQuaCx0LnMsdC5sLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIG5KfHwodD15Sih0KSksIXQpcmV0dXJuIG5ldyBMSjtpZih0IGluc3RhbmNlb2YgTEopcmV0dXJuIHQ7dmFyIGU9KHQ9dC5yZ2IoKSkuci8yNTUsbj10LmcvMjU1LGk9dC5iLzI1NSxyPU1hdGgubWluKGUsbixpKSxvPU1hdGgubWF4KGUsbixpKSxhPU5hTixzPW8tcixsPShvK3IpLzI7cmV0dXJuIHM/KGE9ZT09PW8/KG4taSkvcys2KihuPGkpOm49PT1vPyhpLWUpL3MrMjooZS1uKS9zKzQscy89bDwuNT9vK3I6Mi1vLXIsYSo9NjApOnM9bD4wJiZsPDE/MDphLG5ldyBMSihhLHMsbCx0Lm9wYWNpdHkpfWZ1bmN0aW9uIGtKKHQsZSxuLGkpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9BSih0KTpuZXcgTEoodCxlLG4sbnVsbD09aT8xOmkpfWZ1bmN0aW9uIExKKHQsZSxuLGkpe3RoaXMuaD0rdCx0aGlzLnM9K2UsdGhpcy5sPStuLHRoaXMub3BhY2l0eT0raX1mdW5jdGlvbiBQSih0LGUsbil7cmV0dXJuIDI1NSoodDw2MD9lKyhuLWUpKnQvNjA6dDwxODA/bjp0PDI0MD9lKyhuLWUpKigyNDAtdCkvNjA6ZSl9dEoobkoseUose2NvcHk6ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IHRoaXMuY29uc3RydWN0b3IsdGhpcyx0KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpfSxoZXg6Z0osZm9ybWF0SGV4OmdKLGZvcm1hdEhzbDpmdW5jdGlvbiBOSigpe3JldHVybiBBSih0aGlzKS5mb3JtYXRIc2woKX0sZm9ybWF0UmdiOl9KLHRvU3RyaW5nOl9KfSksdEooU0osd0osZUoobkose2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/cko6TWF0aC5wb3cockosdCksbmV3IFNKKHRoaXMucip0LHRoaXMuZyp0LHRoaXMuYip0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P2lKOk1hdGgucG93KGlKLHQpLG5ldyBTSih0aGlzLnIqdCx0aGlzLmcqdCx0aGlzLmIqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4tLjU8PXRoaXMuciYmdGhpcy5yPDI1NS41JiYtLjU8PXRoaXMuZyYmdGhpcy5nPDI1NS41JiYtLjU8PXRoaXMuYiYmdGhpcy5iPDI1NS41JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4Ok1KLGZvcm1hdEhleDpNSixmb3JtYXRSZ2I6RUosdG9TdHJpbmc6RUp9KSksdEooTEosa0osZUoobkose2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/cko6TWF0aC5wb3cockosdCksbmV3IExKKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/aUo6TWF0aC5wb3coaUosdCksbmV3IExKKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5oJTM2MCszNjAqKHRoaXMuaDwwKSxlPWlzTmFOKHQpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLG49dGhpcy5sLGk9bisobjwuNT9uOjEtbikqZSxyPTIqbi1pO3JldHVybiBuZXcgU0ooUEoodD49MjQwP3QtMjQwOnQrMTIwLHIsaSksUEoodCxyLGkpLFBKKHQ8MTIwP3QrMjQwOnQtMTIwLHIsaSksdGhpcy5vcGFjaXR5KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGZvcm1hdEhzbDpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3BhY2l0eTtyZXR1cm4oMT09PSh0PWlzTmFOKHQpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLHQpKSk/ImhzbCgiOiJoc2xhKCIpKyh0aGlzLmh8fDApKyIsICIrMTAwKih0aGlzLnN8fDApKyIlLCAiKzEwMCoodGhpcy5sfHwwKSsiJSIrKDE9PT10PyIpIjoiLCAiK3QrIikiKX19KSk7dmFyIElKPU1hdGguUEkvMTgwLE9KPTE4MC9NYXRoLlBJLFJKPS45NjQyMix6Sj0uODI1MjEsREo9NC8yOSxCSj02LzI5LEhKPTMqQkoqQko7ZnVuY3Rpb24gRkoodCl7aWYodCBpbnN0YW5jZW9mIFVKKXJldHVybiBuZXcgVUoodC5sLHQuYSx0LmIsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgJEopcmV0dXJuIEtKKHQpO3QgaW5zdGFuY2VvZiBTSnx8KHQ9eEoodCkpO3ZhciBlLG4saT1xSih0LnIpLHI9cUoodC5nKSxvPXFKKHQuYiksYT1qSigoLjIyMjUwNDUqaSsuNzE2ODc4NipyKy4wNjA2MTY5Km8pLzEpO3JldHVybiBpPT09ciYmcj09PW8/ZT1uPWE6KGU9akooKC40MzYwNzQ3KmkrLjM4NTA2NDkqcisuMTQzMDgwNCpvKS9SSiksbj1qSigoLjAxMzkzMjIqaSsuMDk3MTA0NSpyKy43MTQxNzMzKm8pL3pKKSksbmV3IFVKKDExNiphLTE2LDUwMCooZS1hKSwyMDAqKGEtbiksdC5vcGFjaXR5KX1mdW5jdGlvbiBWSih0LGUsbixpKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/RkoodCk6bmV3IFVKKHQsZSxuLG51bGw9PWk/MTppKX1mdW5jdGlvbiBVSih0LGUsbixpKXt0aGlzLmw9K3QsdGhpcy5hPStlLHRoaXMuYj0rbix0aGlzLm9wYWNpdHk9K2l9ZnVuY3Rpb24gakoodCl7cmV0dXJuIHQ+LjAwODg1NjQ1MTY3OTAzNTYzMT9NYXRoLnBvdyh0LDEvMyk6dC9ISitESn1mdW5jdGlvbiBHSih0KXtyZXR1cm4gdD5CSj90KnQqdDpISioodC1ESil9ZnVuY3Rpb24gV0oodCl7cmV0dXJuIDI1NSoodDw9LjAwMzEzMDg/MTIuOTIqdDoxLjA1NSpNYXRoLnBvdyh0LDEvMi40KS0uMDU1KX1mdW5jdGlvbiBxSih0KXtyZXR1cm4odC89MjU1KTw9LjA0MDQ1P3QvMTIuOTI6TWF0aC5wb3coKHQrLjA1NSkvMS4wNTUsMi40KX1mdW5jdGlvbiBZSih0KXtpZih0IGluc3RhbmNlb2YgJEopcmV0dXJuIG5ldyAkSih0LmgsdC5jLHQubCx0Lm9wYWNpdHkpO2lmKHQgaW5zdGFuY2VvZiBVSnx8KHQ9RkoodCkpLDA9PT10LmEmJjA9PT10LmIpcmV0dXJuIG5ldyAkSihOYU4sMDx0LmwmJnQubDwxMDA/MDpOYU4sdC5sLHQub3BhY2l0eSk7dmFyIGU9TWF0aC5hdGFuMih0LmIsdC5hKSpPSjtyZXR1cm4gbmV3ICRKKGU8MD9lKzM2MDplLE1hdGguc3FydCh0LmEqdC5hK3QuYip0LmIpLHQubCx0Lm9wYWNpdHkpfWZ1bmN0aW9uIFhKKHQsZSxuLGkpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9ZSih0KTpuZXcgJEoodCxlLG4sbnVsbD09aT8xOmkpfWZ1bmN0aW9uICRKKHQsZSxuLGkpe3RoaXMuaD0rdCx0aGlzLmM9K2UsdGhpcy5sPStuLHRoaXMub3BhY2l0eT0raX1mdW5jdGlvbiBLSih0KXtpZihpc05hTih0LmgpKXJldHVybiBuZXcgVUoodC5sLDAsMCx0Lm9wYWNpdHkpO3ZhciBlPXQuaCpJSjtyZXR1cm4gbmV3IFVKKHQubCxNYXRoLmNvcyhlKSp0LmMsTWF0aC5zaW4oZSkqdC5jLHQub3BhY2l0eSl9dEooVUosVkosZUoobkose2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgVUoodGhpcy5sKzE4KihudWxsPT10PzE6dCksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBVSih0aGlzLmwtMTgqKG51bGw9PXQ/MTp0KSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PSh0aGlzLmwrMTYpLzExNixlPWlzTmFOKHRoaXMuYSk/dDp0K3RoaXMuYS81MDAsbj1pc05hTih0aGlzLmIpP3Q6dC10aGlzLmIvMjAwO3JldHVybiBuZXcgU0ooV0ooMy4xMzM4NTYxKihlPVJKKkdKKGUpKS0xLjYxNjg2NjcqKHQ9MSpHSih0KSktLjQ5MDYxNDYqKG49ekoqR0oobikpKSxXSigtLjk3ODc2ODQqZSsxLjkxNjE0MTUqdCsuMDMzNDU0Km4pLFdKKC4wNzE5NDUzKmUtLjIyODk5MTQqdCsxLjQwNTI0MjcqbiksdGhpcy5vcGFjaXR5KX19KSksdEooJEosWEosZUoobkose2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgJEoodGhpcy5oLHRoaXMuYyx0aGlzLmwrMTgqKG51bGw9PXQ/MTp0KSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyAkSih0aGlzLmgsdGhpcy5jLHRoaXMubC0xOCoobnVsbD09dD8xOnQpLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiBLSih0aGlzKS5yZ2IoKX19KSk7dmFyIFpKPS0uMjkyMjcsSko9LS45MDY0OSxRSj0xLjk3Mjk0O2Z1bmN0aW9uIHRRKHQpe2lmKHQgaW5zdGFuY2VvZiBuUSlyZXR1cm4gbmV3IG5RKHQuaCx0LnMsdC5sLHQub3BhY2l0eSk7dCBpbnN0YW5jZW9mIFNKfHwodD14Sih0KSk7dmFyIGU9dC5nLzI1NSxuPXQuYi8yNTUsaT0oLS42NTU3NjM2NjY3OTk5OTk5Km4rdC5yLzI1NSotMS43ODg0NTAzODA2LTMuNTE3Mjk4MjQzOCplKS8tNS45NjE1MTIyOTEyLHI9bi1pLG89KFFKKihlLWkpLVpKKnIpL0pKLGE9TWF0aC5zcXJ0KG8qbytyKnIpLyhRSippKigxLWkpKSxzPWE/TWF0aC5hdGFuMihvLHIpKk9KLTEyMDpOYU47cmV0dXJuIG5ldyBuUShzPDA/cyszNjA6cyxhLGksdC5vcGFjaXR5KX1mdW5jdGlvbiBlUSh0LGUsbixpKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/dFEodCk6bmV3IG5RKHQsZSxuLG51bGw9PWk/MTppKX1mdW5jdGlvbiBuUSh0LGUsbixpKXt0aGlzLmg9K3QsdGhpcy5zPStlLHRoaXMubD0rbix0aGlzLm9wYWNpdHk9K2l9ZnVuY3Rpb24gaVEodCxlLG4saSxyKXt2YXIgbz10KnQsYT1vKnQ7cmV0dXJuKCgxLTMqdCszKm8tYSkqZSsoNC02Km8rMyphKSpuKygxKzMqdCszKm8tMyphKSppK2EqcikvNn1mdW5jdGlvbiByUSh0KXt2YXIgZT10Lmxlbmd0aC0xO3JldHVybiBmdW5jdGlvbihuKXt2YXIgaT1uPD0wP249MDpuPj0xPyhuPTEsZS0xKTpNYXRoLmZsb29yKG4qZSkscj10W2ldLG89dFtpKzFdO3JldHVybiBpUSgobi1pL2UpKmUsaT4wP3RbaS0xXToyKnItbyxyLG8saTxlLTE/dFtpKzJdOjIqby1yKX19ZnVuY3Rpb24gb1EodCl7dmFyIGU9dC5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBpPU1hdGguZmxvb3IoKChuJT0xKTwwPysrbjpuKSplKTtyZXR1cm4gaVEoKG4taS9lKSplLHRbKGkrZS0xKSVlXSx0W2klZV0sdFsoaSsxKSVlXSx0WyhpKzIpJWVdKX19ZnVuY3Rpb24gYVEodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIHNRKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0K24qZX19ZnVuY3Rpb24gbFEodCxlKXt2YXIgbj1lLXQ7cmV0dXJuIG4/c1EodCxuPjE4MHx8bjwtMTgwP24tMzYwKk1hdGgucm91bmQobi8zNjApOm4pOmFRKGlzTmFOKHQpP2U6dCl9ZnVuY3Rpb24gY1EodCxlKXt2YXIgbj1lLXQ7cmV0dXJuIG4/c1EodCxuKTphUShpc05hTih0KT9lOnQpfXRKKG5RLGVRLGVKKG5KLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P3JKOk1hdGgucG93KHJKLHQpLG5ldyBuUSh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P2lKOk1hdGgucG93KGlKLHQpLG5ldyBuUSh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PWlzTmFOKHRoaXMuaCk/MDoodGhpcy5oKzEyMCkqSUosZT0rdGhpcy5sLG49aXNOYU4odGhpcy5zKT8wOnRoaXMucyplKigxLWUpLGk9TWF0aC5jb3ModCkscj1NYXRoLnNpbih0KTtyZXR1cm4gbmV3IFNKKDI1NSooZStuKigtLjE0ODYxKmkrMS43ODI3NypyKSksMjU1KihlK24qKFpKKmkrSkoqcikpLDI1NSooZStuKihRSippKSksdGhpcy5vcGFjaXR5KX19KSk7dmFyIHVRPShmdW5jdGlvbiB0KGUpe3ZhciBuPShmdW5jdGlvbiBpKHQpe3JldHVybiAxPT0odD0rdCk/Y1E6ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbi1lPyhmdW5jdGlvbiBpKHQsZSxuKXtyZXR1cm4gdD1NYXRoLnBvdyh0LG4pLGU9TWF0aC5wb3coZSxuKS10LG49MS9uLGZ1bmN0aW9uKGkpe3JldHVybiBNYXRoLnBvdyh0K2kqZSxuKX19KShlLG4sdCk6YVEoaXNOYU4oZSk/bjplKX19KShlKTtmdW5jdGlvbiByKHQsZSl7dmFyIGk9bigodD13Sih0KSkuciwoZT13SihlKSkucikscj1uKHQuZyxlLmcpLG89bih0LmIsZS5iKSxhPWNRKHQub3BhY2l0eSxlLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC5yPWkoZSksdC5nPXIoZSksdC5iPW8oZSksdC5vcGFjaXR5PWEoZSksdCsiIn19cmV0dXJuIHIuZ2FtbWE9dCxyfSkoMSk7ZnVuY3Rpb24gaFEodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuLGkscj1lLmxlbmd0aCxvPW5ldyBBcnJheShyKSxhPW5ldyBBcnJheShyKSxzPW5ldyBBcnJheShyKTtmb3Iobj0wO248cjsrK24paT13SihlW25dKSxvW25dPWkucnx8MCxhW25dPWkuZ3x8MCxzW25dPWkuYnx8MDtyZXR1cm4gbz10KG8pLGE9dChhKSxzPXQocyksaS5vcGFjaXR5PTEsZnVuY3Rpb24odCl7cmV0dXJuIGkucj1vKHQpLGkuZz1hKHQpLGkuYj1zKHQpLGkrIiJ9fX12YXIgZFE9aFEoclEpLHBRPWhRKG9RKTtmdW5jdGlvbiBmUSh0LGUpe3ZhciBuLGk9ZT9lLmxlbmd0aDowLHI9dD9NYXRoLm1pbihpLHQubGVuZ3RoKTowLG89bmV3IEFycmF5KHIpLGE9bmV3IEFycmF5KGkpO2ZvcihuPTA7bjxyOysrbilvW25dPXhRKHRbbl0sZVtuXSk7Zm9yKDtuPGk7KytuKWFbbl09ZVtuXTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKG49MDtuPHI7KytuKWFbbl09b1tuXSh0KTtyZXR1cm4gYX19ZnVuY3Rpb24gbVEodCxlKXt2YXIgbj1uZXcgRGF0ZTtyZXR1cm4gZS09dD0rdCxmdW5jdGlvbihpKXtyZXR1cm4gbi5zZXRUaW1lKHQrZSppKSxufX1mdW5jdGlvbiBnUSh0LGUpe3JldHVybiBlLT10PSt0LGZ1bmN0aW9uKG4pe3JldHVybiB0K2Uqbn19ZnVuY3Rpb24gX1EodCxlKXt2YXIgbixpPXt9LHI9e307Zm9yKG4gaW4gbnVsbCE9PXQmJiJvYmplY3QiPT10eXBlb2YgdHx8KHQ9e30pLG51bGwhPT1lJiYib2JqZWN0Ij09dHlwZW9mIGV8fChlPXt9KSxlKW4gaW4gdD9pW25dPXhRKHRbbl0sZVtuXSk6cltuXT1lW25dO3JldHVybiBmdW5jdGlvbih0KXtmb3IobiBpbiBpKXJbbl09aVtuXSh0KTtyZXR1cm4gcn19dmFyIHlRPS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyx2UT1uZXcgUmVnRXhwKHlRLnNvdXJjZSwiZyIpO2Z1bmN0aW9uIGJRKHQsZSl7dmFyIG4saSxyLG89eVEubGFzdEluZGV4PXZRLmxhc3RJbmRleD0wLGE9LTEscz1bXSxsPVtdO2Zvcih0Kz0iIixlKz0iIjsobj15US5leGVjKHQpKSYmKGk9dlEuZXhlYyhlKSk7KShyPWkuaW5kZXgpPm8mJihyPWUuc2xpY2UobyxyKSxzW2FdP3NbYV0rPXI6c1srK2FdPXIpLChuPW5bMF0pPT09KGk9aVswXSk/c1thXT9zW2FdKz1pOnNbKythXT1pOihzWysrYV09bnVsbCxsLnB1c2goe2k6YSx4OmdRKG4saSl9KSksbz12US5sYXN0SW5kZXg7cmV0dXJuIG88ZS5sZW5ndGgmJihyPWUuc2xpY2Uobyksc1thXT9zW2FdKz1yOnNbKythXT1yKSxzLmxlbmd0aDwyP2xbMF0/KGZ1bmN0aW9uIGModCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0KGUpKyIifX0pKGxbMF0ueCk6KGZ1bmN0aW9uIHUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSkoZSk6KGU9bC5sZW5ndGgsZnVuY3Rpb24odCl7Zm9yKHZhciBuLGk9MDtpPGU7KytpKXNbKG49bFtpXSkuaV09bi54KHQpO3JldHVybiBzLmpvaW4oIiIpfSl9ZnVuY3Rpb24geFEodCxlKXt2YXIgbixpPXR5cGVvZiBlO3JldHVybiBudWxsPT1lfHwiYm9vbGVhbiI9PT1pP2FRKGUpOigibnVtYmVyIj09PWk/Z1E6InN0cmluZyI9PT1pPyhuPXlKKGUpKT8oZT1uLHVRKTpiUTplIGluc3RhbmNlb2YgeUo/dVE6ZSBpbnN0YW5jZW9mIERhdGU/bVE6QXJyYXkuaXNBcnJheShlKT9mUToiZnVuY3Rpb24iIT10eXBlb2YgZS52YWx1ZU9mJiYiZnVuY3Rpb24iIT10eXBlb2YgZS50b1N0cmluZ3x8aXNOYU4oZSk/X1E6Z1EpKHQsZSl9dmFyIHdRLFNRLE1RLEVRLFRRPTE4MC9NYXRoLlBJLENRPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9O2Z1bmN0aW9uIEFRKHQsZSxuLGkscixvKXt2YXIgYSxzLGw7cmV0dXJuKGE9TWF0aC5zcXJ0KHQqdCtlKmUpKSYmKHQvPWEsZS89YSksKGw9dCpuK2UqaSkmJihuLT10KmwsaS09ZSpsKSwocz1NYXRoLnNxcnQobipuK2kqaSkpJiYobi89cyxpLz1zLGwvPXMpLHQqaTxlKm4mJih0PS10LGU9LWUsbD0tbCxhPS1hKSx7dHJhbnNsYXRlWDpyLHRyYW5zbGF0ZVk6byxyb3RhdGU6TWF0aC5hdGFuMihlLHQpKlRRLHNrZXdYOk1hdGguYXRhbihsKSpUUSxzY2FsZVg6YSxzY2FsZVk6c319ZnVuY3Rpb24ga1EodCxlLG4saSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gdC5sZW5ndGg/dC5wb3AoKSsiICI6IiJ9cmV0dXJuIGZ1bmN0aW9uKG8sYSl7dmFyIHM9W10sbD1bXTtyZXR1cm4gbz10KG8pLGE9dChhKSwoZnVuY3Rpb24gYyh0LGkscixvLGEscyl7aWYodCE9PXJ8fGkhPT1vKXt2YXIgbD1hLnB1c2goInRyYW5zbGF0ZSgiLG51bGwsZSxudWxsLG4pO3MucHVzaCh7aTpsLTQseDpnUSh0LHIpfSx7aTpsLTIseDpnUShpLG8pfSl9ZWxzZShyfHxvKSYmYS5wdXNoKCJ0cmFuc2xhdGUoIityK2UrbytuKX0pKG8udHJhbnNsYXRlWCxvLnRyYW5zbGF0ZVksYS50cmFuc2xhdGVYLGEudHJhbnNsYXRlWSxzLGwpLChmdW5jdGlvbiB1KHQsZSxuLG8pe3QhPT1lPyh0LWU+MTgwP2UrPTM2MDplLXQ+MTgwJiYodCs9MzYwKSxvLnB1c2goe2k6bi5wdXNoKHIobikrInJvdGF0ZSgiLG51bGwsaSktMix4OmdRKHQsZSl9KSk6ZSYmbi5wdXNoKHIobikrInJvdGF0ZSgiK2UraSl9KShvLnJvdGF0ZSxhLnJvdGF0ZSxzLGwpLChmdW5jdGlvbiBoKHQsZSxuLG8pe3QhPT1lP28ucHVzaCh7aTpuLnB1c2gocihuKSsic2tld1goIixudWxsLGkpLTIseDpnUSh0LGUpfSk6ZSYmbi5wdXNoKHIobikrInNrZXdYKCIrZStpKX0pKG8uc2tld1gsYS5za2V3WCxzLGwpLChmdW5jdGlvbiBkKHQsZSxuLGksbyxhKXtpZih0IT09bnx8ZSE9PWkpe3ZhciBzPW8ucHVzaChyKG8pKyJzY2FsZSgiLG51bGwsIiwiLG51bGwsIikiKTthLnB1c2goe2k6cy00LHg6Z1EodCxuKX0se2k6cy0yLHg6Z1EoZSxpKX0pfWVsc2UgMT09PW4mJjE9PT1pfHxvLnB1c2gocihvKSsic2NhbGUoIituKyIsIitpKyIpIil9KShvLnNjYWxlWCxvLnNjYWxlWSxhLnNjYWxlWCxhLnNjYWxlWSxzLGwpLG89YT1udWxsLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPS0xLGk9bC5sZW5ndGg7KytuPGk7KXNbKGU9bFtuXSkuaV09ZS54KHQpO3JldHVybiBzLmpvaW4oIiIpfX19dmFyIExRPWtRKChmdW5jdGlvbiBQUSh0KXtyZXR1cm4ibm9uZSI9PT10P0NROih3UXx8KHdRPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLFNRPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxNUT1kb2N1bWVudC5kZWZhdWx0Vmlldyksd1Euc3R5bGUudHJhbnNmb3JtPXQsdD1NUS5nZXRDb21wdXRlZFN0eWxlKFNRLmFwcGVuZENoaWxkKHdRKSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKSxTUS5yZW1vdmVDaGlsZCh3USksQVEoKyh0PXQuc2xpY2UoNywtMSkuc3BsaXQoIiwiKSlbMF0sK3RbMV0sK3RbMl0sK3RbM10sK3RbNF0sK3RbNV0pKX0pLCJweCwgIiwicHgpIiwiZGVnKSIpLE5RPWtRKChmdW5jdGlvbiBJUSh0KXtyZXR1cm4gbnVsbD09dD9DUTooRVF8fChFUT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSxFUS5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsdCksKHQ9RVEudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/QVEoKHQ9dC5tYXRyaXgpLmEsdC5iLHQuYyx0LmQsdC5lLHQuZik6Q1EpfSksIiwgIiwiKSIsIikiKSxPUT1NYXRoLlNRUlQyO2Z1bmN0aW9uIFJRKHQpe3JldHVybigodD1NYXRoLmV4cCh0KSkrMS90KS8yfWZ1bmN0aW9uIHpRKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3ZhciBpPXQoKGU9a0ooZSkpLmgsKG49a0oobikpLmgpLHI9Y1EoZS5zLG4ucyksbz1jUShlLmwsbi5sKSxhPWNRKGUub3BhY2l0eSxuLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZS5oPWkodCksZS5zPXIodCksZS5sPW8odCksZS5vcGFjaXR5PWEodCksZSsiIn19fXZhciBEUT16UShsUSksQlE9elEoY1EpO2Z1bmN0aW9uIEhRKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3ZhciBpPXQoKGU9WEooZSkpLmgsKG49WEoobikpLmgpLHI9Y1EoZS5jLG4uYyksbz1jUShlLmwsbi5sKSxhPWNRKGUub3BhY2l0eSxuLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZS5oPWkodCksZS5jPXIodCksZS5sPW8odCksZS5vcGFjaXR5PWEodCksZSsiIn19fXZhciBGUT1IUShsUSksVlE9SFEoY1EpO2Z1bmN0aW9uIFVRKHQpe3JldHVybihmdW5jdGlvbiBlKG4pe2Z1bmN0aW9uIGkoZSxpKXt2YXIgcj10KChlPWVRKGUpKS5oLChpPWVRKGkpKS5oKSxvPWNRKGUucyxpLnMpLGE9Y1EoZS5sLGkubCkscz1jUShlLm9wYWNpdHksaS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUuaD1yKHQpLGUucz1vKHQpLGUubD1hKE1hdGgucG93KHQsbikpLGUub3BhY2l0eT1zKHQpLGUrIiJ9fXJldHVybiBuPStuLGkuZ2FtbWE9ZSxpfSkoMSl9dmFyIGpRPVVRKGxRKSxHUT1VUShjUSksV1E9TWF0aC5QSSxxUT0yKldRLFlRPTFlLTYsWFE9cVEtWVE7ZnVuY3Rpb24gJFEoKXt0aGlzLl94MD10aGlzLl95MD10aGlzLl94MT10aGlzLl95MT1udWxsLHRoaXMuXz0iIn1mdW5jdGlvbiBLUSgpe3JldHVybiBuZXcgJFF9ZnVuY3Rpb24gWlEodCxlLG4pe3JldHVybihlWzBdLXRbMF0pKihuWzFdLXRbMV0pLShlWzFdLXRbMV0pKihuWzBdLXRbMF0pfWZ1bmN0aW9uIEpRKHQsZSl7cmV0dXJuIHRbMF0tZVswXXx8dFsxXS1lWzFdfWZ1bmN0aW9uIFFRKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxuPVswLDFdLGk9MixyPTI7cjxlOysrcil7Zm9yKDtpPjEmJlpRKHRbbltpLTJdXSx0W25baS0xXV0sdFtyXSk8PTA7KS0taTtuW2krK109cn1yZXR1cm4gbi5zbGljZSgwLGkpfWZ1bmN0aW9uIHQxKHQsZSxuLGkpe2lmKGlzTmFOKGUpfHxpc05hTihuKSlyZXR1cm4gdDt2YXIgcixvLGEscyxsLGMsdSxoLGQscD10Ll9yb290LGY9e2RhdGE6aX0sbT10Ll94MCxnPXQuX3kwLF89dC5feDEseT10Ll95MTtpZighcClyZXR1cm4gdC5fcm9vdD1mLHQ7Zm9yKDtwLmxlbmd0aDspaWYoKGM9ZT49KG89KG0rXykvMikpP209bzpfPW8sKHU9bj49KGE9KGcreSkvMikpP2c9YTp5PWEscj1wLCEocD1wW2g9dTw8MXxjXSkpcmV0dXJuIHJbaF09Zix0O2lmKHM9K3QuX3guY2FsbChudWxsLHAuZGF0YSksbD0rdC5feS5jYWxsKG51bGwscC5kYXRhKSxlPT09cyYmbj09PWwpcmV0dXJuIGYubmV4dD1wLHI/cltoXT1mOnQuX3Jvb3Q9Zix0O2Rve3I9cj9yW2hdPW5ldyBBcnJheSg0KTp0Ll9yb290PW5ldyBBcnJheSg0KSwoYz1lPj0obz0obStfKS8yKSk/bT1vOl89bywodT1uPj0oYT0oZyt5KS8yKSk/Zz1hOnk9YX13aGlsZSgoaD11PDwxfGMpPT0oZD0obD49YSk8PDF8cz49bykpO3JldHVybiByW2RdPXAscltoXT1mLHR9ZnVuY3Rpb24gZTEodCxlLG4saSxyKXt0aGlzLm5vZGU9dCx0aGlzLngwPWUsdGhpcy55MD1uLHRoaXMueDE9aSx0aGlzLnkxPXJ9ZnVuY3Rpb24gbjEodCl7cmV0dXJuIHRbMF19ZnVuY3Rpb24gaTEodCl7cmV0dXJuIHRbMV19ZnVuY3Rpb24gcjEodCxlLG4pe3ZhciBpPW5ldyBvMShudWxsPT1lP24xOmUsbnVsbD09bj9pMTpuLE5hTixOYU4sTmFOLE5hTik7cmV0dXJuIG51bGw9PXQ/aTppLmFkZEFsbCh0KX1mdW5jdGlvbiBvMSh0LGUsbixpLHIsbyl7dGhpcy5feD10LHRoaXMuX3k9ZSx0aGlzLl94MD1uLHRoaXMuX3kwPWksdGhpcy5feDE9cix0aGlzLl95MT1vLHRoaXMuX3Jvb3Q9dm9pZCAwfWZ1bmN0aW9uIGExKHQpe2Zvcih2YXIgZT17ZGF0YTp0LmRhdGF9LG49ZTt0PXQubmV4dDspbj1uLm5leHQ9e2RhdGE6dC5kYXRhfTtyZXR1cm4gZX0kUS5wcm90b3R5cGU9S1EucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjokUSxtb3ZlVG86ZnVuY3Rpb24odCxlKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K3QpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K2UpfSxjbG9zZVBhdGg6ZnVuY3Rpb24oKXtudWxsIT09dGhpcy5feDEmJih0aGlzLl94MT10aGlzLl94MCx0aGlzLl95MT10aGlzLl95MCx0aGlzLl8rPSJaIil9LGxpbmVUbzpmdW5jdGlvbih0LGUpe3RoaXMuXys9IkwiKyh0aGlzLl94MT0rdCkrIiwiKyh0aGlzLl95MT0rZSl9LHF1YWRyYXRpY0N1cnZlVG86ZnVuY3Rpb24odCxlLG4saSl7dGhpcy5fKz0iUSIrICt0KyIsIisgK2UrIiwiKyh0aGlzLl94MT0rbikrIiwiKyh0aGlzLl95MT0raSl9LGJlemllckN1cnZlVG86ZnVuY3Rpb24odCxlLG4saSxyLG8pe3RoaXMuXys9IkMiKyArdCsiLCIrICtlKyIsIisgK24rIiwiKyAraSsiLCIrKHRoaXMuX3gxPStyKSsiLCIrKHRoaXMuX3kxPStvKX0sYXJjVG86ZnVuY3Rpb24odCxlLG4saSxyKXt2YXIgbz10aGlzLl94MSxhPXRoaXMuX3kxLHM9KG49K24pLSh0PSt0KSxsPShpPStpKS0oZT0rZSksYz1vLXQsdT1hLWUsaD1jKmMrdSp1O2lmKChyPStyKTwwKXRocm93IG5ldyBFcnJvcigibmVnYXRpdmUgcmFkaXVzOiAiK3IpO2lmKG51bGw9PT10aGlzLl94MSl0aGlzLl8rPSJNIisodGhpcy5feDE9dCkrIiwiKyh0aGlzLl95MT1lKTtlbHNlIGlmKGg+WVEpaWYoTWF0aC5hYnModSpzLWwqYyk+WVEmJnIpe3ZhciBkPW4tbyxwPWktYSxmPXMqcytsKmwsbT1kKmQrcCpwLGc9TWF0aC5zcXJ0KGYpLF89TWF0aC5zcXJ0KGgpLHk9cipNYXRoLnRhbigoV1EtTWF0aC5hY29zKChmK2gtbSkvKDIqZypfKSkpLzIpLHY9eS9fLGI9eS9nO01hdGguYWJzKHYtMSk+WVEmJih0aGlzLl8rPSJMIisodCt2KmMpKyIsIisoZSt2KnUpKSx0aGlzLl8rPSJBIityKyIsIityKyIsMCwwLCIrICsodSpkPmMqcCkrIiwiKyh0aGlzLl94MT10K2IqcykrIiwiKyh0aGlzLl95MT1lK2IqbCl9ZWxzZSB0aGlzLl8rPSJMIisodGhpcy5feDE9dCkrIiwiKyh0aGlzLl95MT1lKX0sYXJjOmZ1bmN0aW9uKHQsZSxuLGkscixvKXt0PSt0LGU9K2U7dmFyIGE9KG49K24pKk1hdGguY29zKGkpLHM9bipNYXRoLnNpbihpKSxsPXQrYSxjPWUrcyx1PTFebyxoPW8/aS1yOnItaTtpZihuPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrbik7bnVsbD09PXRoaXMuX3gxP3RoaXMuXys9Ik0iK2wrIiwiK2M6KE1hdGguYWJzKHRoaXMuX3gxLWwpPllRfHxNYXRoLmFicyh0aGlzLl95MS1jKT5ZUSkmJih0aGlzLl8rPSJMIitsKyIsIitjKSxuJiYoaDwwJiYoaD1oJXFRK3FRKSxoPlhRP3RoaXMuXys9IkEiK24rIiwiK24rIiwwLDEsIit1KyIsIisodC1hKSsiLCIrKGUtcykrIkEiK24rIiwiK24rIiwwLDEsIit1KyIsIisodGhpcy5feDE9bCkrIiwiKyh0aGlzLl95MT1jKTpoPllRJiYodGhpcy5fKz0iQSIrbisiLCIrbisiLDAsIisgKyhoPj1XUSkrIiwiK3UrIiwiKyh0aGlzLl94MT10K24qTWF0aC5jb3MocikpKyIsIisodGhpcy5feTE9ZStuKk1hdGguc2luKHIpKSkpfSxyZWN0OmZ1bmN0aW9uKHQsZSxuLGkpe3RoaXMuXys9Ik0iKyh0aGlzLl94MD10aGlzLl94MT0rdCkrIiwiKyh0aGlzLl95MD10aGlzLl95MT0rZSkrImgiKyArbisidiIrICtpKyJoIistbisiWiJ9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX319O3ZhciBzMT1yMS5wcm90b3R5cGU9bzEucHJvdG90eXBlO3MxLmNvcHk9ZnVuY3Rpb24oKXt2YXIgdCxlLG49bmV3IG8xKHRoaXMuX3gsdGhpcy5feSx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSksaT10aGlzLl9yb290O2lmKCFpKXJldHVybiBuO2lmKCFpLmxlbmd0aClyZXR1cm4gbi5fcm9vdD1hMShpKSxuO2Zvcih0PVt7c291cmNlOmksdGFyZ2V0Om4uX3Jvb3Q9bmV3IEFycmF5KDQpfV07aT10LnBvcCgpOylmb3IodmFyIHI9MDtyPDQ7KytyKShlPWkuc291cmNlW3JdKSYmKGUubGVuZ3RoP3QucHVzaCh7c291cmNlOmUsdGFyZ2V0OmkudGFyZ2V0W3JdPW5ldyBBcnJheSg0KX0pOmkudGFyZ2V0W3JdPWExKGUpKTtyZXR1cm4gbn0sczEuYWRkPWZ1bmN0aW9uIGwxKHQpe3ZhciBlPSt0aGlzLl94LmNhbGwobnVsbCx0KSxuPSt0aGlzLl95LmNhbGwobnVsbCx0KTtyZXR1cm4gdDEodGhpcy5jb3ZlcihlLG4pLGUsbix0KX0sczEuYWRkQWxsPWZ1bmN0aW9uIGMxKHQpe3ZhciBlLG4saSxyLG89dC5sZW5ndGgsYT1uZXcgQXJyYXkobykscz1uZXcgQXJyYXkobyksbD0xLzAsYz0xLzAsdT0tMS8wLGg9LTEvMDtmb3Iobj0wO248bzsrK24paXNOYU4oaT0rdGhpcy5feC5jYWxsKG51bGwsZT10W25dKSl8fGlzTmFOKHI9K3RoaXMuX3kuY2FsbChudWxsLGUpKXx8KGFbbl09aSxzW25dPXIsaTxsJiYobD1pKSxpPnUmJih1PWkpLHI8YyYmKGM9cikscj5oJiYoaD1yKSk7Zm9yKHU8bCYmKGw9dGhpcy5feDAsdT10aGlzLl94MSksaDxjJiYoYz10aGlzLl95MCxoPXRoaXMuX3kxKSx0aGlzLmNvdmVyKGwsYykuY292ZXIodSxoKSxuPTA7bjxvOysrbil0MSh0aGlzLGFbbl0sc1tuXSx0W25dKTtyZXR1cm4gdGhpc30sczEuY292ZXI9ZnVuY3Rpb24gdTEodCxlKXtpZihpc05hTih0PSt0KXx8aXNOYU4oZT0rZSkpcmV0dXJuIHRoaXM7dmFyIG49dGhpcy5feDAsaT10aGlzLl95MCxyPXRoaXMuX3gxLG89dGhpcy5feTE7aWYoaXNOYU4obikpcj0obj1NYXRoLmZsb29yKHQpKSsxLG89KGk9TWF0aC5mbG9vcihlKSkrMTtlbHNle2lmKCEobj50fHx0PnJ8fGk+ZXx8ZT5vKSlyZXR1cm4gdGhpczt2YXIgYSxzLGw9ci1uLGM9dGhpcy5fcm9vdDtzd2l0Y2gocz0oZTwoaStvKS8yKTw8MXx0PChuK3IpLzIpe2Nhc2UgMDpkb3soYT1uZXcgQXJyYXkoNCkpW3NdPWMsYz1hfXdoaWxlKG89aSsobCo9MiksdD4ocj1uK2wpfHxlPm8pO2JyZWFrO2Nhc2UgMTpkb3soYT1uZXcgQXJyYXkoNCkpW3NdPWMsYz1hfXdoaWxlKG89aSsobCo9MiksKG49ci1sKT50fHxlPm8pO2JyZWFrO2Nhc2UgMjpkb3soYT1uZXcgQXJyYXkoNCkpW3NdPWMsYz1hfXdoaWxlKGk9by0obCo9MiksdD4ocj1uK2wpfHxpPmUpO2JyZWFrO2Nhc2UgMzpkb3soYT1uZXcgQXJyYXkoNCkpW3NdPWMsYz1hfXdoaWxlKGk9by0obCo9MiksKG49ci1sKT50fHxpPmUpfXRoaXMuX3Jvb3QmJnRoaXMuX3Jvb3QubGVuZ3RoJiYodGhpcy5fcm9vdD1jKX1yZXR1cm4gdGhpcy5feDA9bix0aGlzLl95MD1pLHRoaXMuX3gxPXIsdGhpcy5feTE9byx0aGlzfSxzMS5kYXRhPWZ1bmN0aW9uIGgxKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMudmlzaXQoKGZ1bmN0aW9uKGUpe2lmKCFlLmxlbmd0aClkb3t0LnB1c2goZS5kYXRhKX13aGlsZShlPWUubmV4dCl9KSksdH0sczEuZXh0ZW50PWZ1bmN0aW9uIGQxKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuY292ZXIoK3RbMF1bMF0sK3RbMF1bMV0pLmNvdmVyKCt0WzFdWzBdLCt0WzFdWzFdKTppc05hTih0aGlzLl94MCk/dm9pZCAwOltbdGhpcy5feDAsdGhpcy5feTBdLFt0aGlzLl94MSx0aGlzLl95MV1dfSxzMS5maW5kPWZ1bmN0aW9uIHAxKHQsZSxuKXt2YXIgaSxyLG8sYSxzLGwsYyx1PXRoaXMuX3gwLGg9dGhpcy5feTAsZD10aGlzLl94MSxwPXRoaXMuX3kxLGY9W10sbT10aGlzLl9yb290O2ZvcihtJiZmLnB1c2gobmV3IGUxKG0sdSxoLGQscCkpLG51bGw9PW4/bj0xLzA6KHU9dC1uLGg9ZS1uLGQ9dCtuLHA9ZStuLG4qPW4pO2w9Zi5wb3AoKTspaWYoISghKG09bC5ub2RlKXx8KHI9bC54MCk+ZHx8KG89bC55MCk+cHx8KGE9bC54MSk8dXx8KHM9bC55MSk8aCkpaWYobS5sZW5ndGgpe3ZhciBnPShyK2EpLzIsXz0obytzKS8yO2YucHVzaChuZXcgZTEobVszXSxnLF8sYSxzKSxuZXcgZTEobVsyXSxyLF8sZyxzKSxuZXcgZTEobVsxXSxnLG8sYSxfKSxuZXcgZTEobVswXSxyLG8sZyxfKSksKGM9KGU+PV8pPDwxfHQ+PWcpJiYobD1mW2YubGVuZ3RoLTFdLGZbZi5sZW5ndGgtMV09ZltmLmxlbmd0aC0xLWNdLGZbZi5sZW5ndGgtMS1jXT1sKX1lbHNle3ZhciB5PXQtK3RoaXMuX3guY2FsbChudWxsLG0uZGF0YSksdj1lLSt0aGlzLl95LmNhbGwobnVsbCxtLmRhdGEpLGI9eSp5K3YqdjtpZihiPG4pe3ZhciB4PU1hdGguc3FydChuPWIpO3U9dC14LGg9ZS14LGQ9dCt4LHA9ZSt4LGk9bS5kYXRhfX1yZXR1cm4gaX0sczEucmVtb3ZlPWZ1bmN0aW9uIGYxKHQpe2lmKGlzTmFOKG89K3RoaXMuX3guY2FsbChudWxsLHQpKXx8aXNOYU4oYT0rdGhpcy5feS5jYWxsKG51bGwsdCkpKXJldHVybiB0aGlzO3ZhciBlLG4saSxyLG8sYSxzLGwsYyx1LGgsZCxwPXRoaXMuX3Jvb3QsZj10aGlzLl94MCxtPXRoaXMuX3kwLGc9dGhpcy5feDEsXz10aGlzLl95MTtpZighcClyZXR1cm4gdGhpcztpZihwLmxlbmd0aClmb3IoOzspe2lmKChjPW8+PShzPShmK2cpLzIpKT9mPXM6Zz1zLCh1PWE+PShsPShtK18pLzIpKT9tPWw6Xz1sLGU9cCwhKHA9cFtoPXU8PDF8Y10pKXJldHVybiB0aGlzO2lmKCFwLmxlbmd0aClicmVhazsoZVtoKzEmM118fGVbaCsyJjNdfHxlW2grMyYzXSkmJihuPWUsZD1oKX1mb3IoO3AuZGF0YSE9PXQ7KWlmKGk9cCwhKHA9cC5uZXh0KSlyZXR1cm4gdGhpcztyZXR1cm4ocj1wLm5leHQpJiZkZWxldGUgcC5uZXh0LGk/KHI/aS5uZXh0PXI6ZGVsZXRlIGkubmV4dCx0aGlzKTplPyhyP2VbaF09cjpkZWxldGUgZVtoXSwocD1lWzBdfHxlWzFdfHxlWzJdfHxlWzNdKSYmcD09PShlWzNdfHxlWzJdfHxlWzFdfHxlWzBdKSYmIXAubGVuZ3RoJiYobj9uW2RdPXA6dGhpcy5fcm9vdD1wKSx0aGlzKToodGhpcy5fcm9vdD1yLHRoaXMpfSxzMS5yZW1vdmVBbGw9ZnVuY3Rpb24gbTEodCl7Zm9yKHZhciBlPTAsbj10Lmxlbmd0aDtlPG47KytlKXRoaXMucmVtb3ZlKHRbZV0pO3JldHVybiB0aGlzfSxzMS5yb290PWZ1bmN0aW9uIGcxKCl7cmV0dXJuIHRoaXMuX3Jvb3R9LHMxLnNpemU9ZnVuY3Rpb24gXzEoKXt2YXIgdD0wO3JldHVybiB0aGlzLnZpc2l0KChmdW5jdGlvbihlKXtpZighZS5sZW5ndGgpZG97Kyt0fXdoaWxlKGU9ZS5uZXh0KX0pKSx0fSxzMS52aXNpdD1mdW5jdGlvbiB5MSh0KXt2YXIgZSxuLGkscixvLGEscz1bXSxsPXRoaXMuX3Jvb3Q7Zm9yKGwmJnMucHVzaChuZXcgZTEobCx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO2U9cy5wb3AoKTspaWYoIXQobD1lLm5vZGUsaT1lLngwLHI9ZS55MCxvPWUueDEsYT1lLnkxKSYmbC5sZW5ndGgpe3ZhciBjPShpK28pLzIsdT0ocithKS8yOyhuPWxbM10pJiZzLnB1c2gobmV3IGUxKG4sYyx1LG8sYSkpLChuPWxbMl0pJiZzLnB1c2gobmV3IGUxKG4saSx1LGMsYSkpLChuPWxbMV0pJiZzLnB1c2gobmV3IGUxKG4sYyxyLG8sdSkpLChuPWxbMF0pJiZzLnB1c2gobmV3IGUxKG4saSxyLGMsdSkpfXJldHVybiB0aGlzfSxzMS52aXNpdEFmdGVyPWZ1bmN0aW9uIHYxKHQpe3ZhciBlLG49W10saT1bXTtmb3IodGhpcy5fcm9vdCYmbi5wdXNoKG5ldyBlMSh0aGlzLl9yb290LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7ZT1uLnBvcCgpOyl7dmFyIHI9ZS5ub2RlO2lmKHIubGVuZ3RoKXt2YXIgbyxhPWUueDAscz1lLnkwLGw9ZS54MSxjPWUueTEsdT0oYStsKS8yLGg9KHMrYykvMjsobz1yWzBdKSYmbi5wdXNoKG5ldyBlMShvLGEscyx1LGgpKSwobz1yWzFdKSYmbi5wdXNoKG5ldyBlMShvLHUscyxsLGgpKSwobz1yWzJdKSYmbi5wdXNoKG5ldyBlMShvLGEsaCx1LGMpKSwobz1yWzNdKSYmbi5wdXNoKG5ldyBlMShvLHUsaCxsLGMpKX1pLnB1c2goZSl9Zm9yKDtlPWkucG9wKCk7KXQoZS5ub2RlLGUueDAsZS55MCxlLngxLGUueTEpO3JldHVybiB0aGlzfSxzMS54PWZ1bmN0aW9uIGIxKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0aGlzLl94PXQsdGhpcyk6dGhpcy5feH0sczEueT1mdW5jdGlvbiB4MSh0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feT10LHRoaXMpOnRoaXMuX3l9O3ZhciB3MT1bXS5zbGljZSxTMT17fTtmdW5jdGlvbiBNMSh0KXt0aGlzLl9zaXplPXQsdGhpcy5fY2FsbD10aGlzLl9lcnJvcj1udWxsLHRoaXMuX3Rhc2tzPVtdLHRoaXMuX2RhdGE9W10sdGhpcy5fd2FpdGluZz10aGlzLl9hY3RpdmU9dGhpcy5fZW5kZWQ9dGhpcy5fc3RhcnQ9MH1mdW5jdGlvbiBFMSh0KXtpZighdC5fc3RhcnQpdHJ5eyEoZnVuY3Rpb24gZSh0KXtmb3IoO3QuX3N0YXJ0PXQuX3dhaXRpbmcmJnQuX2FjdGl2ZTx0Ll9zaXplOyl7dmFyIGU9dC5fZW5kZWQrdC5fYWN0aXZlLG49dC5fdGFza3NbZV0saT1uLmxlbmd0aC0xLHI9bltpXTtuW2ldPVQxKHQsZSksLS10Ll93YWl0aW5nLCsrdC5fYWN0aXZlLG49ci5hcHBseShudWxsLG4pLHQuX3Rhc2tzW2VdJiYodC5fdGFza3NbZV09bnx8UzEpfX0pKHQpfWNhdGNoKGUpe2lmKHQuX3Rhc2tzW3QuX2VuZGVkK3QuX2FjdGl2ZS0xXSlDMSh0LGUpO2Vsc2UgaWYoIXQuX2RhdGEpdGhyb3cgZX19ZnVuY3Rpb24gVDEodCxlKXtyZXR1cm4gZnVuY3Rpb24obixpKXt0Ll90YXNrc1tlXSYmKC0tdC5fYWN0aXZlLCsrdC5fZW5kZWQsdC5fdGFza3NbZV09bnVsbCxudWxsPT10Ll9lcnJvciYmKG51bGwhPW4/QzEodCxuKToodC5fZGF0YVtlXT1pLHQuX3dhaXRpbmc/RTEodCk6QTEodCkpKSl9fWZ1bmN0aW9uIEMxKHQsZSl7dmFyIG4saT10Ll90YXNrcy5sZW5ndGg7Zm9yKHQuX2Vycm9yPWUsdC5fZGF0YT12b2lkIDAsdC5fd2FpdGluZz1OYU47LS1pPj0wOylpZigobj10Ll90YXNrc1tpXSkmJih0Ll90YXNrc1tpXT1udWxsLG4uYWJvcnQpKXRyeXtuLmFib3J0KCl9Y2F0Y2goZSl7fXQuX2FjdGl2ZT1OYU4sQTEodCl9ZnVuY3Rpb24gQTEodCl7aWYoIXQuX2FjdGl2ZSYmdC5fY2FsbCl7dmFyIGU9dC5fZGF0YTt0Ll9kYXRhPXZvaWQgMCx0Ll9jYWxsKHQuX2Vycm9yLGUpfX1mdW5jdGlvbiBrMSh0KXtpZihudWxsPT10KXQ9MS8wO2Vsc2UgaWYoISgodD0rdCk+PTEpKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjb25jdXJyZW5jeSIpO3JldHVybiBuZXcgTTEodCl9ZnVuY3Rpb24gTDEoKXtyZXR1cm4gTWF0aC5yYW5kb20oKX1NMS5wcm90b3R5cGU9azEucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpNMSxkZWZlcjpmdW5jdGlvbih0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2siKTtpZih0aGlzLl9jYWxsKXRocm93IG5ldyBFcnJvcigiZGVmZXIgYWZ0ZXIgYXdhaXQiKTtpZihudWxsIT10aGlzLl9lcnJvcilyZXR1cm4gdGhpczt2YXIgZT13MS5jYWxsKGFyZ3VtZW50cywxKTtyZXR1cm4gZS5wdXNoKHQpLCsrdGhpcy5fd2FpdGluZyx0aGlzLl90YXNrcy5wdXNoKGUpLEUxKHRoaXMpLHRoaXN9LGFib3J0OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PXRoaXMuX2Vycm9yJiZDMSh0aGlzLG5ldyBFcnJvcigiYWJvcnQiKSksdGhpc30sYXdhaXQ6ZnVuY3Rpb24odCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrIik7aWYodGhpcy5fY2FsbCl0aHJvdyBuZXcgRXJyb3IoIm11bHRpcGxlIGF3YWl0Iik7cmV0dXJuIHRoaXMuX2NhbGw9ZnVuY3Rpb24oZSxuKXt0LmFwcGx5KG51bGwsW2VdLmNvbmNhdChuKSl9LEExKHRoaXMpLHRoaXN9LGF3YWl0QWxsOmZ1bmN0aW9uKHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjayIpO2lmKHRoaXMuX2NhbGwpdGhyb3cgbmV3IEVycm9yKCJtdWx0aXBsZSBhd2FpdCIpO3JldHVybiB0aGlzLl9jYWxsPXQsQTEodGhpcyksdGhpc319O3ZhciBQMT0oZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQsbil7cmV0dXJuIHQ9bnVsbD09dD8wOit0LG49bnVsbD09bj8xOituLDE9PT1hcmd1bWVudHMubGVuZ3RoPyhuPXQsdD0wKTpuLT10LGZ1bmN0aW9uKCl7cmV0dXJuIGUoKSpuK3R9fXJldHVybiBuLnNvdXJjZT10LG59KShMMSksTjE9KGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0LG4pe3ZhciBpLHI7cmV0dXJuIHQ9bnVsbD09dD8wOit0LG49bnVsbD09bj8xOituLGZ1bmN0aW9uKCl7dmFyIG87aWYobnVsbCE9aSlvPWksaT1udWxsO2Vsc2UgZG97aT0yKmUoKS0xLG89MiplKCktMSxyPWkqaStvKm99d2hpbGUoIXJ8fHI+MSk7cmV0dXJuIHQrbipvKk1hdGguc3FydCgtMipNYXRoLmxvZyhyKS9yKX19cmV0dXJuIG4uc291cmNlPXQsbn0pKEwxKSxJMT0oZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKCl7dmFyIHQ9TjEuc291cmNlKGUpLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5leHAodCgpKX19cmV0dXJuIG4uc291cmNlPXQsbn0pKEwxKSxPMT0oZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgbj0wLGk9MDtpPHQ7KytpKW4rPWUoKTtyZXR1cm4gbn19cmV0dXJuIG4uc291cmNlPXQsbn0pKEwxKSxSMT0oZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3ZhciBuPU8xLnNvdXJjZShlKSh0KTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbigpL3R9fXJldHVybiBuLnNvdXJjZT10LG59KShMMSksejE9KGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4tTWF0aC5sb2coMS1lKCkpL3R9fXJldHVybiBuLnNvdXJjZT10LG59KShMMSk7ZnVuY3Rpb24gRDEodCxlKXt2YXIgbixpLHIsbyxhPXNjKCJiZWZvcmVzZW5kIiwicHJvZ3Jlc3MiLCJsb2FkIiwiZXJyb3IiKSxzPXhnKCksbD1uZXcgWE1MSHR0cFJlcXVlc3QsYz1udWxsLHU9bnVsbCxoPTA7ZnVuY3Rpb24gZCh0KXt2YXIgZSxpPWwuc3RhdHVzO2lmKCFpJiYoZnVuY3Rpb24gbyh0KXt2YXIgZT10LnJlc3BvbnNlVHlwZTtyZXR1cm4gZSYmInRleHQiIT09ZT90LnJlc3BvbnNlOnQucmVzcG9uc2VUZXh0fSkobCl8fGk+PTIwMCYmaTwzMDB8fDMwND09PWkpe2lmKHIpdHJ5e2U9ci5jYWxsKG4sbCl9Y2F0Y2godCl7cmV0dXJuIHZvaWQgYS5jYWxsKCJlcnJvciIsbix0KX1lbHNlIGU9bDthLmNhbGwoImxvYWQiLG4sZSl9ZWxzZSBhLmNhbGwoImVycm9yIixuLHQpfWlmKCJ1bmRlZmluZWQiIT10eXBlb2YgWERvbWFpblJlcXVlc3QmJiEoIndpdGhDcmVkZW50aWFscyJpbiBsKSYmL14oaHR0cChzKT86KT9cL1wvLy50ZXN0KHQpJiYobD1uZXcgWERvbWFpblJlcXVlc3QpLCJvbmxvYWQiaW4gbD9sLm9ubG9hZD1sLm9uZXJyb3I9bC5vbnRpbWVvdXQ9ZDpsLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbih0KXtsLnJlYWR5U3RhdGU+MyYmZCh0KX0sbC5vbnByb2dyZXNzPWZ1bmN0aW9uKHQpe2EuY2FsbCgicHJvZ3Jlc3MiLG4sdCl9LG49e2hlYWRlcjpmdW5jdGlvbih0LGUpe3JldHVybiB0PSh0KyIiKS50b0xvd2VyQ2FzZSgpLGFyZ3VtZW50cy5sZW5ndGg8Mj9zLmdldCh0KToobnVsbD09ZT9zLnJlbW92ZSh0KTpzLnNldCh0LGUrIiIpLG4pfSxtaW1lVHlwZTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1udWxsPT10P251bGw6dCsiIixuKTppfSxyZXNwb25zZVR5cGU6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dCxuKTpvfSx0aW1lb3V0OmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPSt0LG4pOmh9LHVzZXI6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8MT9jOihjPW51bGw9PXQ/bnVsbDp0KyIiLG4pfSxwYXNzd29yZDpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwxP3U6KHU9bnVsbD09dD9udWxsOnQrIiIsbil9LHJlc3BvbnNlOmZ1bmN0aW9uKHQpe3JldHVybiByPXQsbn0sZ2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4uc2VuZCgiR0VUIix0LGUpfSxwb3N0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4uc2VuZCgiUE9TVCIsdCxlKX0sc2VuZDpmdW5jdGlvbihlLHIsZCl7cmV0dXJuIGwub3BlbihlLHQsITAsYyx1KSxudWxsPT1pfHxzLmhhcygiYWNjZXB0Iil8fHMuc2V0KCJhY2NlcHQiLGkrIiwqLyoiKSxsLnNldFJlcXVlc3RIZWFkZXImJnMuZWFjaCgoZnVuY3Rpb24odCxlKXtsLnNldFJlcXVlc3RIZWFkZXIoZSx0KX0pKSxudWxsIT1pJiZsLm92ZXJyaWRlTWltZVR5cGUmJmwub3ZlcnJpZGVNaW1lVHlwZShpKSxudWxsIT1vJiYobC5yZXNwb25zZVR5cGU9byksaD4wJiYobC50aW1lb3V0PWgpLG51bGw9PWQmJiJmdW5jdGlvbiI9PXR5cGVvZiByJiYoZD1yLHI9bnVsbCksbnVsbCE9ZCYmMT09PWQubGVuZ3RoJiYoZD0oZnVuY3Rpb24gcCh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXt0KG51bGw9PWU/bjpudWxsKX19KShkKSksbnVsbCE9ZCYmbi5vbigiZXJyb3IiLGQpLm9uKCJsb2FkIiwoZnVuY3Rpb24odCl7ZChudWxsLHQpfSkpLGEuY2FsbCgiYmVmb3Jlc2VuZCIsbixsKSxsLnNlbmQobnVsbD09cj9udWxsOnIpLG59LGFib3J0OmZ1bmN0aW9uKCl7cmV0dXJuIGwuYWJvcnQoKSxufSxvbjpmdW5jdGlvbigpe3ZhciB0PWEub24uYXBwbHkoYSxhcmd1bWVudHMpO3JldHVybiB0PT09YT9uOnR9fSxudWxsIT1lKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrZSk7cmV0dXJuIG4uZ2V0KGUpfXJldHVybiBufWZ1bmN0aW9uIEIxKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4saSl7dmFyIHI9RDEobikubWltZVR5cGUodCkucmVzcG9uc2UoZSk7aWYobnVsbCE9aSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrOiAiK2kpO3JldHVybiByLmdldChpKX1yZXR1cm4gcn19dmFyIEgxPUIxKCJ0ZXh0L2h0bWwiLChmdW5jdGlvbih0KXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQodC5yZXNwb25zZVRleHQpfSkpLEYxPUIxKCJhcHBsaWNhdGlvbi9qc29uIiwoZnVuY3Rpb24odCl7cmV0dXJuIEpTT04ucGFyc2UodC5yZXNwb25zZVRleHQpfSkpLFYxPUIxKCJ0ZXh0L3BsYWluIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQucmVzcG9uc2VUZXh0fSkpLFUxPUIxKCJhcHBsaWNhdGlvbi94bWwiLChmdW5jdGlvbih0KXt2YXIgZT10LnJlc3BvbnNlWE1MO2lmKCFlKXRocm93IG5ldyBFcnJvcigicGFyc2UgZXJyb3IiKTtyZXR1cm4gZX0pKTtmdW5jdGlvbiBqMSh0LGUpe3JldHVybiBmdW5jdGlvbihuLGkscil7YXJndW1lbnRzLmxlbmd0aDwzJiYocj1pLGk9bnVsbCk7dmFyIG89RDEobikubWltZVR5cGUodCk7cmV0dXJuIG8ucm93PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP28ucmVzcG9uc2UoRzEoZSxpPXQpKTppfSxvLnJvdyhpKSxyP28uZ2V0KHIpOm99fWZ1bmN0aW9uIEcxKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0KG4ucmVzcG9uc2VUZXh0LGUpfX12YXIgVzE9ajEoInRleHQvY3N2IixaZykscTE9ajEoInRleHQvdGFiLXNlcGFyYXRlZC12YWx1ZXMiLG9fKTtmdW5jdGlvbiBZMSh0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6dD49ZT8wOk5hTn1mdW5jdGlvbiBYMSh0KXtyZXR1cm4gMT09PXQubGVuZ3RoJiYodD0oZnVuY3Rpb24gZSh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXtyZXR1cm4gWTEodChlKSxuKX19KSh0KSkse2xlZnQ6ZnVuY3Rpb24oZSxuLGkscil7Zm9yKG51bGw9PWkmJihpPTApLG51bGw9PXImJihyPWUubGVuZ3RoKTtpPHI7KXt2YXIgbz1pK3I+Pj4xO3QoZVtvXSxuKTwwP2k9bysxOnI9b31yZXR1cm4gaX0scmlnaHQ6ZnVuY3Rpb24oZSxuLGkscil7Zm9yKG51bGw9PWkmJihpPTApLG51bGw9PXImJihyPWUubGVuZ3RoKTtpPHI7KXt2YXIgbz1pK3I+Pj4xO3QoZVtvXSxuKT4wP3I9bzppPW8rMX1yZXR1cm4gaX19fXZhciAkMT1YMShZMSkucmlnaHQ7ZnVuY3Rpb24gSzEodCl7cmV0dXJuIG51bGw9PT10P05hTjordH12YXIgWjE9TWF0aC5zcXJ0KDUwKSxKMT1NYXRoLnNxcnQoMTApLFExPU1hdGguc3FydCgyKTtmdW5jdGlvbiB0MCh0LGUsbil7dmFyIGkscixvLGEscz0tMTtpZihuPStuLCh0PSt0KT09KGU9K2UpJiZuPjApcmV0dXJuW3RdO2lmKChpPWU8dCkmJihyPXQsdD1lLGU9ciksMD09PShhPWUwKHQsZSxuKSl8fCFpc0Zpbml0ZShhKSlyZXR1cm5bXTtpZihhPjApZm9yKHQ9TWF0aC5jZWlsKHQvYSksZT1NYXRoLmZsb29yKGUvYSksbz1uZXcgQXJyYXkocj1NYXRoLmNlaWwoZS10KzEpKTsrK3M8cjspb1tzXT0odCtzKSphO2Vsc2UgZm9yKHQ9TWF0aC5mbG9vcih0KmEpLGU9TWF0aC5jZWlsKGUqYSksbz1uZXcgQXJyYXkocj1NYXRoLmNlaWwodC1lKzEpKTsrK3M8cjspb1tzXT0odC1zKS9hO3JldHVybiBpJiZvLnJldmVyc2UoKSxvfWZ1bmN0aW9uIGUwKHQsZSxuKXt2YXIgaT0oZS10KS9NYXRoLm1heCgwLG4pLHI9TWF0aC5mbG9vcihNYXRoLmxvZyhpKS9NYXRoLkxOMTApLG89aS9NYXRoLnBvdygxMCxyKTtyZXR1cm4gcj49MD8obz49WjE/MTA6bz49SjE/NTpvPj1RMT8yOjEpKk1hdGgucG93KDEwLHIpOi1NYXRoLnBvdygxMCwtcikvKG8+PVoxPzEwOm8+PUoxPzU6bz49UTE/MjoxKX1mdW5jdGlvbiBuMCh0LGUsbil7dmFyIGk9TWF0aC5hYnMoZS10KS9NYXRoLm1heCgwLG4pLHI9TWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLmxvZyhpKS9NYXRoLkxOMTApKSxvPWkvcjtyZXR1cm4gbz49WjE/cio9MTA6bz49SjE/cio9NTpvPj1RMSYmKHIqPTIpLGU8dD8tcjpyfWZ1bmN0aW9uIGkwKHQsZSxuKXtpZihudWxsPT1uJiYobj1LMSksaT10Lmxlbmd0aCl7aWYoKGU9K2UpPD0wfHxpPDIpcmV0dXJuK24odFswXSwwLHQpO2lmKGU+PTEpcmV0dXJuK24odFtpLTFdLGktMSx0KTt2YXIgaSxyPShpLTEpKmUsbz1NYXRoLmZsb29yKHIpLGE9K24odFtvXSxvLHQpO3JldHVybiBhKygrbih0W28rMV0sbysxLHQpLWEpKihyLW8pfX12YXIgcjA9IiQiO2Z1bmN0aW9uIG8wKCl7fWZ1bmN0aW9uIGEwKHQsZSl7dmFyIG49bmV3IG8wO2lmKHQgaW5zdGFuY2VvZiBvMCl0LmVhY2goKGZ1bmN0aW9uKHQsZSl7bi5zZXQoZSx0KX0pKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkodCkpe3ZhciBpLHI9LTEsbz10Lmxlbmd0aDtpZihudWxsPT1lKWZvcig7KytyPG87KW4uc2V0KHIsdFtyXSk7ZWxzZSBmb3IoOysrcjxvOyluLnNldChlKGk9dFtyXSxyLHQpLGkpfWVsc2UgaWYodClmb3IodmFyIGEgaW4gdCluLnNldChhLHRbYV0pO3JldHVybiBufWZ1bmN0aW9uIHMwKCl7fW8wLnByb3RvdHlwZT1hMC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOm8wLGhhczpmdW5jdGlvbih0KXtyZXR1cm4gcjArdCBpbiB0aGlzfSxnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXNbcjArdF19LHNldDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzW3IwK3RdPWUsdGhpc30scmVtb3ZlOmZ1bmN0aW9uKHQpe3ZhciBlPXIwK3Q7cmV0dXJuIGUgaW4gdGhpcyYmZGVsZXRlIHRoaXNbZV19LGNsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PXIwJiZkZWxldGUgdGhpc1t0XX0sa2V5czpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzKWVbMF09PT1yMCYmdC5wdXNoKGUuc2xpY2UoMSkpO3JldHVybiB0fSx2YWx1ZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcyllWzBdPT09cjAmJnQucHVzaCh0aGlzW2VdKTtyZXR1cm4gdH0sZW50cmllczpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzKWVbMF09PT1yMCYmdC5wdXNoKHtrZXk6ZS5zbGljZSgxKSx2YWx1ZTp0aGlzW2VdfSk7cmV0dXJuIHR9LHNpemU6ZnVuY3Rpb24oKXt2YXIgdD0wO2Zvcih2YXIgZSBpbiB0aGlzKWVbMF09PT1yMCYmKyt0O3JldHVybiB0fSxlbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzKWlmKHRbMF09PT1yMClyZXR1cm4hMTtyZXR1cm4hMH0sZWFjaDpmdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcyllWzBdPT09cjAmJnQodGhpc1tlXSxlLnNsaWNlKDEpLHRoaXMpfX07dmFyIGwwPWEwLnByb3RvdHlwZTtzMC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnMwLGhhczpsMC5oYXMsYWRkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzW3IwKyh0Kz0iIildPXQsdGhpc30scmVtb3ZlOmwwLnJlbW92ZSxjbGVhcjpsMC5jbGVhcix2YWx1ZXM6bDAua2V5cyxzaXplOmwwLnNpemUsZW1wdHk6bDAuZW1wdHksZWFjaDpsMC5lYWNofTt2YXIgYzA9QXJyYXkucHJvdG90eXBlLHUwPWMwLm1hcCxoMD1jMC5zbGljZSxkMD17bmFtZToiaW1wbGljaXQifTtmdW5jdGlvbiBwMCh0KXt2YXIgZT1hMCgpLG49W10saT1kMDtmdW5jdGlvbiByKHIpe3ZhciBvPXIrIiIsYT1lLmdldChvKTtpZighYSl7aWYoaSE9PWQwKXJldHVybiBpO2Uuc2V0KG8sYT1uLnB1c2gocikpfXJldHVybiB0WyhhLTEpJXQubGVuZ3RoXX1yZXR1cm4gdD1udWxsPT10P1tdOmgwLmNhbGwodCksci5kb21haW49ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIG4uc2xpY2UoKTtuPVtdLGU9YTAoKTtmb3IodmFyIGksbyxhPS0xLHM9dC5sZW5ndGg7KythPHM7KWUuaGFzKG89KGk9dFthXSkrIiIpfHxlLnNldChvLG4ucHVzaChpKSk7cmV0dXJuIHJ9LHIucmFuZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9aDAuY2FsbChlKSxyKTp0LnNsaWNlKCl9LHIudW5rbm93bj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LHIpOml9LHIuY29weT1mdW5jdGlvbigpe3JldHVybiBwMCgpLmRvbWFpbihuKS5yYW5nZSh0KS51bmtub3duKGkpfSxyfWZ1bmN0aW9uIGYwKCl7dmFyIHQsZSxuPXAwKCkudW5rbm93bih2b2lkIDApLGk9bi5kb21haW4scj1uLnJhbmdlLG89WzAsMV0sYT0hMSxzPTAsbD0wLGM9LjU7ZnVuY3Rpb24gdSgpe3ZhciBuPWkoKS5sZW5ndGgsdT1vWzFdPG9bMF0saD1vW3UtMF0sZD1vWzEtdV07dD0oZC1oKS9NYXRoLm1heCgxLG4tcysyKmwpLGEmJih0PU1hdGguZmxvb3IodCkpLGgrPShkLWgtdCoobi1zKSkqYyxlPXQqKDEtcyksYSYmKGg9TWF0aC5yb3VuZChoKSxlPU1hdGgucm91bmQoZSkpO3ZhciBwPShmdW5jdGlvbiBmKHQsZSxuKXt0PSt0LGU9K2Usbj0ocj1hcmd1bWVudHMubGVuZ3RoKTwyPyhlPXQsdD0wLDEpOnI8Mz8xOituO2Zvcih2YXIgaT0tMSxyPTB8TWF0aC5tYXgoMCxNYXRoLmNlaWwoKGUtdCkvbikpLG89bmV3IEFycmF5KHIpOysraTxyOylvW2ldPXQraSpuO3JldHVybiBvfSkobikubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gaCt0KmV9KSk7cmV0dXJuIHIodT9wLnJldmVyc2UoKTpwKX1yZXR1cm4gZGVsZXRlIG4udW5rbm93bixuLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaSh0KSx1KCkpOmkoKX0sbi5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1bK3RbMF0sK3RbMV1dLHUoKSk6by5zbGljZSgpfSxuLnJhbmdlUm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIG89Wyt0WzBdLCt0WzFdXSxhPSEwLHUoKX0sbi5iYW5kd2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gZX0sbi5zdGVwPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LG4ucm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ISF0LHUoKSk6YX0sbi5wYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPWw9TWF0aC5tYXgoMCxNYXRoLm1pbigxLHQpKSx1KCkpOnN9LG4ucGFkZGluZ0lubmVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPU1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSksdSgpKTpzfSxuLnBhZGRpbmdPdXRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD1NYXRoLm1heCgwLE1hdGgubWluKDEsdCkpLHUoKSk6bH0sbi5hbGlnbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1NYXRoLm1heCgwLE1hdGgubWluKDEsdCkpLHUoKSk6Y30sbi5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGYwKCkuZG9tYWluKGkoKSkucmFuZ2Uobykucm91bmQoYSkucGFkZGluZ0lubmVyKHMpLnBhZGRpbmdPdXRlcihsKS5hbGlnbihjKX0sdSgpfWZ1bmN0aW9uIG0wKHQpe3ZhciBlPXQuY29weTtyZXR1cm4gdC5wYWRkaW5nPXQucGFkZGluZ091dGVyLGRlbGV0ZSB0LnBhZGRpbmdJbm5lcixkZWxldGUgdC5wYWRkaW5nT3V0ZXIsdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIG0wKGUoKSl9LHR9ZnVuY3Rpb24gZzAodCxlLG4pe3QucHJvdG90eXBlPWUucHJvdG90eXBlPW4sbi5jb25zdHJ1Y3Rvcj10fWZ1bmN0aW9uIF8wKHQsZSl7dmFyIG49T2JqZWN0LmNyZWF0ZSh0LnByb3RvdHlwZSk7Zm9yKHZhciBpIGluIGUpbltpXT1lW2ldO3JldHVybiBufWZ1bmN0aW9uIHkwKCl7fXZhciB2MD0uNyxiMD0xL3YwLHgwPSJcXHMqKFsrLV0/XFxkKylcXHMqIix3MD0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixTMD0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIsTTA9L14jKFswLTlhLWZdezMsOH0pJC8sRTA9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW3gwLHgwLHgwXSsiXFwpJCIpLFQwPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tTMCxTMCxTMF0rIlxcKSQiKSxDMD1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW3gwLHgwLHgwLHcwXSsiXFwpJCIpLEEwPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbUzAsUzAsUzAsdzBdKyJcXCkkIiksazA9bmV3IFJlZ0V4cCgiXmhzbFxcKCIrW3cwLFMwLFMwXSsiXFwpJCIpLEwwPW5ldyBSZWdFeHAoIl5oc2xhXFwoIitbdzAsUzAsUzAsdzBdKyJcXCkkIiksUDA9e2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH07ZnVuY3Rpb24gTjAoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXgoKX1mdW5jdGlvbiBJMCgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdFJnYigpfWZ1bmN0aW9uIE8wKHQpe3ZhciBlLG47cmV0dXJuIHQ9KHQrIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLChlPU0wLmV4ZWModCkpPyhuPWVbMV0ubGVuZ3RoLGU9cGFyc2VJbnQoZVsxXSwxNiksNj09PW4/UjAoZSk6Mz09PW4/bmV3IEgwKGU+PjgmMTV8ZT4+NCYyNDAsZT4+NCYxNXwyNDAmZSwoMTUmZSk8PDR8MTUmZSwxKTo4PT09bj96MChlPj4yNCYyNTUsZT4+MTYmMjU1LGU+PjgmMjU1LCgyNTUmZSkvMjU1KTo0PT09bj96MChlPj4xMiYxNXxlPj44JjI0MCxlPj44JjE1fGU+PjQmMjQwLGU+PjQmMTV8MjQwJmUsKCgxNSZlKTw8NHwxNSZlKS8yNTUpOm51bGwpOihlPUUwLmV4ZWModCkpP25ldyBIMChlWzFdLGVbMl0sZVszXSwxKTooZT1UMC5leGVjKHQpKT9uZXcgSDAoMjU1KmVbMV0vMTAwLDI1NSplWzJdLzEwMCwyNTUqZVszXS8xMDAsMSk6KGU9QzAuZXhlYyh0KSk/ejAoZVsxXSxlWzJdLGVbM10sZVs0XSk6KGU9QTAuZXhlYyh0KSk/ejAoMjU1KmVbMV0vMTAwLDI1NSplWzJdLzEwMCwyNTUqZVszXS8xMDAsZVs0XSk6KGU9azAuZXhlYyh0KSk/ajAoZVsxXSxlWzJdLzEwMCxlWzNdLzEwMCwxKTooZT1MMC5leGVjKHQpKT9qMChlWzFdLGVbMl0vMTAwLGVbM10vMTAwLGVbNF0pOlAwLmhhc093blByb3BlcnR5KHQpP1IwKFAwW3RdKToidHJhbnNwYXJlbnQiPT09dD9uZXcgSDAoTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiBSMCh0KXtyZXR1cm4gbmV3IEgwKHQ+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdCwxKX1mdW5jdGlvbiB6MCh0LGUsbixpKXtyZXR1cm4gaTw9MCYmKHQ9ZT1uPU5hTiksbmV3IEgwKHQsZSxuLGkpfWZ1bmN0aW9uIEQwKHQpe3JldHVybiB0IGluc3RhbmNlb2YgeTB8fCh0PU8wKHQpKSx0P25ldyBIMCgodD10LnJnYigpKS5yLHQuZyx0LmIsdC5vcGFjaXR5KTpuZXcgSDB9ZnVuY3Rpb24gQjAodCxlLG4saSl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP0QwKHQpOm5ldyBIMCh0LGUsbixudWxsPT1pPzE6aSl9ZnVuY3Rpb24gSDAodCxlLG4saSl7dGhpcy5yPSt0LHRoaXMuZz0rZSx0aGlzLmI9K24sdGhpcy5vcGFjaXR5PStpfWZ1bmN0aW9uIEYwKCl7cmV0dXJuIiMiK1UwKHRoaXMucikrVTAodGhpcy5nKStVMCh0aGlzLmIpfWZ1bmN0aW9uIFYwKCl7dmFyIHQ9dGhpcy5vcGFjaXR5O3JldHVybigxPT09KHQ9aXNOYU4odCk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsdCkpKT8icmdiKCI6InJnYmEoIikrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLnIpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuZyl8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5iKXx8MCkpKygxPT09dD8iKSI6IiwgIit0KyIpIil9ZnVuY3Rpb24gVTAodCl7cmV0dXJuKCh0PU1hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodCl8fDApKSk8MTY/IjAiOiIiKSt0LnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBqMCh0LGUsbixpKXtyZXR1cm4gaTw9MD90PWU9bj1OYU46bjw9MHx8bj49MT90PWU9TmFOOmU8PTAmJih0PU5hTiksbmV3IFcwKHQsZSxuLGkpfWZ1bmN0aW9uIEcwKHQpe2lmKHQgaW5zdGFuY2VvZiBXMClyZXR1cm4gbmV3IFcwKHQuaCx0LnMsdC5sLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIHkwfHwodD1PMCh0KSksIXQpcmV0dXJuIG5ldyBXMDtpZih0IGluc3RhbmNlb2YgVzApcmV0dXJuIHQ7dmFyIGU9KHQ9dC5yZ2IoKSkuci8yNTUsbj10LmcvMjU1LGk9dC5iLzI1NSxyPU1hdGgubWluKGUsbixpKSxvPU1hdGgubWF4KGUsbixpKSxhPU5hTixzPW8tcixsPShvK3IpLzI7cmV0dXJuIHM/KGE9ZT09PW8/KG4taSkvcys2KihuPGkpOm49PT1vPyhpLWUpL3MrMjooZS1uKS9zKzQscy89bDwuNT9vK3I6Mi1vLXIsYSo9NjApOnM9bD4wJiZsPDE/MDphLG5ldyBXMChhLHMsbCx0Lm9wYWNpdHkpfWZ1bmN0aW9uIFcwKHQsZSxuLGkpe3RoaXMuaD0rdCx0aGlzLnM9K2UsdGhpcy5sPStuLHRoaXMub3BhY2l0eT0raX1mdW5jdGlvbiBxMCh0LGUsbil7cmV0dXJuIDI1NSoodDw2MD9lKyhuLWUpKnQvNjA6dDwxODA/bjp0PDI0MD9lKyhuLWUpKigyNDAtdCkvNjA6ZSl9ZzAoeTAsTzAse2NvcHk6ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IHRoaXMuY29uc3RydWN0b3IsdGhpcyx0KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpfSxoZXg6TjAsZm9ybWF0SGV4Ok4wLGZvcm1hdEhzbDpmdW5jdGlvbiBZMCgpe3JldHVybiBHMCh0aGlzKS5mb3JtYXRIc2woKX0sZm9ybWF0UmdiOkkwLHRvU3RyaW5nOkkwfSksZzAoSDAsQjAsXzAoeTAse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/YjA6TWF0aC5wb3coYjAsdCksbmV3IEgwKHRoaXMucip0LHRoaXMuZyp0LHRoaXMuYip0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P3YwOk1hdGgucG93KHYwLHQpLG5ldyBIMCh0aGlzLnIqdCx0aGlzLmcqdCx0aGlzLmIqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4tLjU8PXRoaXMuciYmdGhpcy5yPDI1NS41JiYtLjU8PXRoaXMuZyYmdGhpcy5nPDI1NS41JiYtLjU8PXRoaXMuYiYmdGhpcy5iPDI1NS41JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4OkYwLGZvcm1hdEhleDpGMCxmb3JtYXRSZ2I6VjAsdG9TdHJpbmc6VjB9KSksZzAoVzAsKGZ1bmN0aW9uIFgwKHQsZSxuLGkpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9HMCh0KTpuZXcgVzAodCxlLG4sbnVsbD09aT8xOmkpfSksXzAoeTAse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/YjA6TWF0aC5wb3coYjAsdCksbmV3IFcwKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/djA6TWF0aC5wb3codjAsdCksbmV3IFcwKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5oJTM2MCszNjAqKHRoaXMuaDwwKSxlPWlzTmFOKHQpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLG49dGhpcy5sLGk9bisobjwuNT9uOjEtbikqZSxyPTIqbi1pO3JldHVybiBuZXcgSDAocTAodD49MjQwP3QtMjQwOnQrMTIwLHIsaSkscTAodCxyLGkpLHEwKHQ8MTIwP3QrMjQwOnQtMTIwLHIsaSksdGhpcy5vcGFjaXR5KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGZvcm1hdEhzbDpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3BhY2l0eTtyZXR1cm4oMT09PSh0PWlzTmFOKHQpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLHQpKSk/ImhzbCgiOiJoc2xhKCIpKyh0aGlzLmh8fDApKyIsICIrMTAwKih0aGlzLnN8fDApKyIlLCAiKzEwMCoodGhpcy5sfHwwKSsiJSIrKDE9PT10PyIpIjoiLCAiK3QrIikiKX19KSk7dmFyICQwPU1hdGguUEkvMTgwLEswPTE4MC9NYXRoLlBJLFowPS0uMTQ4NjEsSjA9MS43ODI3NyxRMD0tLjI5MjI3LHQyPS0uOTA2NDksZTI9MS45NzI5NCxuMj1lMip0MixpMj1lMipKMCxyMj1KMCpRMC10MipaMDtmdW5jdGlvbiBvMih0KXtpZih0IGluc3RhbmNlb2YgczIpcmV0dXJuIG5ldyBzMih0LmgsdC5zLHQubCx0Lm9wYWNpdHkpO3QgaW5zdGFuY2VvZiBIMHx8KHQ9RDAodCkpO3ZhciBlPXQuZy8yNTUsbj10LmIvMjU1LGk9KHIyKm4rbjIqKHQuci8yNTUpLWkyKmUpLyhyMituMi1pMikscj1uLWksbz0oZTIqKGUtaSktUTAqcikvdDIsYT1NYXRoLnNxcnQobypvK3IqcikvKGUyKmkqKDEtaSkpLHM9YT9NYXRoLmF0YW4yKG8scikqSzAtMTIwOk5hTjtyZXR1cm4gbmV3IHMyKHM8MD9zKzM2MDpzLGEsaSx0Lm9wYWNpdHkpfWZ1bmN0aW9uIGEyKHQsZSxuLGkpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9vMih0KTpuZXcgczIodCxlLG4sbnVsbD09aT8xOmkpfWZ1bmN0aW9uIHMyKHQsZSxuLGkpe3RoaXMuaD0rdCx0aGlzLnM9K2UsdGhpcy5sPStuLHRoaXMub3BhY2l0eT0raX1mdW5jdGlvbiBsMih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gYzIodCxlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHQrbiplfX1mdW5jdGlvbiB1Mih0LGUpe3ZhciBuPWUtdDtyZXR1cm4gbj9jMih0LG4pOmwyKGlzTmFOKHQpP2U6dCl9ZzAoczIsYTIsXzAoeTAse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/YjA6TWF0aC5wb3coYjAsdCksbmV3IHMyKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/djA6TWF0aC5wb3codjAsdCksbmV3IHMyKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIHQ9aXNOYU4odGhpcy5oKT8wOih0aGlzLmgrMTIwKSokMCxlPSt0aGlzLmwsbj1pc05hTih0aGlzLnMpPzA6dGhpcy5zKmUqKDEtZSksaT1NYXRoLmNvcyh0KSxyPU1hdGguc2luKHQpO3JldHVybiBuZXcgSDAoMjU1KihlK24qKFowKmkrSjAqcikpLDI1NSooZStuKihRMCppK3QyKnIpKSwyNTUqKGUrbiooZTIqaSkpLHRoaXMub3BhY2l0eSl9fSkpO3ZhciBoMj0oZnVuY3Rpb24gdChlKXt2YXIgbj0oZnVuY3Rpb24gaSh0KXtyZXR1cm4gMT09KHQ9K3QpP3UyOmZ1bmN0aW9uKGUsbil7cmV0dXJuIG4tZT8oZnVuY3Rpb24gaSh0LGUsbil7cmV0dXJuIHQ9TWF0aC5wb3codCxuKSxlPU1hdGgucG93KGUsbiktdCxuPTEvbixmdW5jdGlvbihpKXtyZXR1cm4gTWF0aC5wb3codCtpKmUsbil9fSkoZSxuLHQpOmwyKGlzTmFOKGUpP246ZSl9fSkoZSk7ZnVuY3Rpb24gcih0LGUpe3ZhciBpPW4oKHQ9QjAodCkpLnIsKGU9QjAoZSkpLnIpLHI9bih0LmcsZS5nKSxvPW4odC5iLGUuYiksYT11Mih0Lm9wYWNpdHksZS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQucj1pKGUpLHQuZz1yKGUpLHQuYj1vKGUpLHQub3BhY2l0eT1hKGUpLHQrIiJ9fXJldHVybiByLmdhbW1hPXQscn0pKDEpO2Z1bmN0aW9uIGQyKHQsZSl7ZXx8KGU9W10pO3ZhciBuLGk9dD9NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aCk6MCxyPWUuc2xpY2UoKTtyZXR1cm4gZnVuY3Rpb24obyl7Zm9yKG49MDtuPGk7KytuKXJbbl09dFtuXSooMS1vKStlW25dKm87cmV0dXJuIHJ9fWZ1bmN0aW9uIHAyKHQsZSl7dmFyIG4saT1lP2UubGVuZ3RoOjAscj10P01hdGgubWluKGksdC5sZW5ndGgpOjAsbz1uZXcgQXJyYXkociksYT1uZXcgQXJyYXkoaSk7Zm9yKG49MDtuPHI7KytuKW9bbl09YjIodFtuXSxlW25dKTtmb3IoO248aTsrK24pYVtuXT1lW25dO3JldHVybiBmdW5jdGlvbih0KXtmb3Iobj0wO248cjsrK24pYVtuXT1vW25dKHQpO3JldHVybiBhfX1mdW5jdGlvbiBmMih0LGUpe3ZhciBuPW5ldyBEYXRlO3JldHVybiB0PSt0LGU9K2UsZnVuY3Rpb24oaSl7cmV0dXJuIG4uc2V0VGltZSh0KigxLWkpK2UqaSksbn19ZnVuY3Rpb24gbTIodCxlKXtyZXR1cm4gdD0rdCxlPStlLGZ1bmN0aW9uKG4pe3JldHVybiB0KigxLW4pK2Uqbn19ZnVuY3Rpb24gZzIodCxlKXt2YXIgbixpPXt9LHI9e307Zm9yKG4gaW4gbnVsbCE9PXQmJiJvYmplY3QiPT10eXBlb2YgdHx8KHQ9e30pLG51bGwhPT1lJiYib2JqZWN0Ij09dHlwZW9mIGV8fChlPXt9KSxlKW4gaW4gdD9pW25dPWIyKHRbbl0sZVtuXSk6cltuXT1lW25dO3JldHVybiBmdW5jdGlvbih0KXtmb3IobiBpbiBpKXJbbl09aVtuXSh0KTtyZXR1cm4gcn19dmFyIF8yPS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyx5Mj1uZXcgUmVnRXhwKF8yLnNvdXJjZSwiZyIpO2Z1bmN0aW9uIHYyKHQsZSl7dmFyIG4saSxyLG89XzIubGFzdEluZGV4PXkyLmxhc3RJbmRleD0wLGE9LTEscz1bXSxsPVtdO2Zvcih0Kz0iIixlKz0iIjsobj1fMi5leGVjKHQpKSYmKGk9eTIuZXhlYyhlKSk7KShyPWkuaW5kZXgpPm8mJihyPWUuc2xpY2UobyxyKSxzW2FdP3NbYV0rPXI6c1srK2FdPXIpLChuPW5bMF0pPT09KGk9aVswXSk/c1thXT9zW2FdKz1pOnNbKythXT1pOihzWysrYV09bnVsbCxsLnB1c2goe2k6YSx4Om0yKG4saSl9KSksbz15Mi5sYXN0SW5kZXg7cmV0dXJuIG88ZS5sZW5ndGgmJihyPWUuc2xpY2Uobyksc1thXT9zW2FdKz1yOnNbKythXT1yKSxzLmxlbmd0aDwyP2xbMF0/KGZ1bmN0aW9uIGModCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0KGUpKyIifX0pKGxbMF0ueCk6KGZ1bmN0aW9uIHUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSkoZSk6KGU9bC5sZW5ndGgsZnVuY3Rpb24odCl7Zm9yKHZhciBuLGk9MDtpPGU7KytpKXNbKG49bFtpXSkuaV09bi54KHQpO3JldHVybiBzLmpvaW4oIiIpfSl9ZnVuY3Rpb24gYjIodCxlKXt2YXIgbixpPXR5cGVvZiBlO3JldHVybiBudWxsPT1lfHwiYm9vbGVhbiI9PT1pP2wyKGUpOigibnVtYmVyIj09PWk/bTI6InN0cmluZyI9PT1pPyhuPU8wKGUpKT8oZT1uLGgyKTp2MjplIGluc3RhbmNlb2YgTzA/aDI6ZSBpbnN0YW5jZW9mIERhdGU/ZjI6KGZ1bmN0aW9uIHIodCl7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyh0KSYmISh0IGluc3RhbmNlb2YgRGF0YVZpZXcpfSkoZSk/ZDI6QXJyYXkuaXNBcnJheShlKT9wMjoiZnVuY3Rpb24iIT10eXBlb2YgZS52YWx1ZU9mJiYiZnVuY3Rpb24iIT10eXBlb2YgZS50b1N0cmluZ3x8aXNOYU4oZSk/ZzI6bTIpKHQsZSl9ZnVuY3Rpb24geDIodCxlKXtyZXR1cm4gdD0rdCxlPStlLGZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnJvdW5kKHQqKDEtbikrZSpuKX19ZnVuY3Rpb24gdzIodCl7cmV0dXJuKGZ1bmN0aW9uIGUobil7ZnVuY3Rpb24gaShlLGkpe3ZhciByPXQoKGU9YTIoZSkpLmgsKGk9YTIoaSkpLmgpLG89dTIoZS5zLGkucyksYT11MihlLmwsaS5sKSxzPXUyKGUub3BhY2l0eSxpLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZS5oPXIodCksZS5zPW8odCksZS5sPWEoTWF0aC5wb3codCxuKSksZS5vcGFjaXR5PXModCksZSsiIn19cmV0dXJuIG49K24saS5nYW1tYT1lLGl9KSgxKX13MigoZnVuY3Rpb24gUzIodCxlKXt2YXIgbj1lLXQ7cmV0dXJuIG4/YzIodCxuPjE4MHx8bjwtMTgwP24tMzYwKk1hdGgucm91bmQobi8zNjApOm4pOmwyKGlzTmFOKHQpP2U6dCl9KSk7dmFyIE0yPXcyKHUyKTtmdW5jdGlvbiBFMih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gVDIodCl7cmV0dXJuK3R9dmFyIEMyPVswLDFdO2Z1bmN0aW9uIEEyKHQsZSl7cmV0dXJuKGUtPXQ9K3QpP2Z1bmN0aW9uKG4pe3JldHVybihuLXQpL2V9OkUyKGUpfWZ1bmN0aW9uIGsyKHQsZSxuLGkpe3ZhciByPXRbMF0sbz10WzFdLGE9ZVswXSxzPWVbMV07cmV0dXJuIG88cj8ocj1uKG8sciksYT1pKHMsYSkpOihyPW4ocixvKSxhPWkoYSxzKSksZnVuY3Rpb24odCl7cmV0dXJuIGEocih0KSl9fWZ1bmN0aW9uIEwyKHQsZSxuLGkpe3ZhciByPU1hdGgubWluKHQubGVuZ3RoLGUubGVuZ3RoKS0xLG89bmV3IEFycmF5KHIpLGE9bmV3IEFycmF5KHIpLHM9LTE7Zm9yKHRbcl08dFswXSYmKHQ9dC5zbGljZSgpLnJldmVyc2UoKSxlPWUuc2xpY2UoKS5yZXZlcnNlKCkpOysrczxyOylvW3NdPW4odFtzXSx0W3MrMV0pLGFbc109aShlW3NdLGVbcysxXSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPSQxKHQsZSwxLHIpLTE7cmV0dXJuIGFbbl0ob1tuXShlKSl9fWZ1bmN0aW9uIFAyKHQsZSl7cmV0dXJuIGUuZG9tYWluKHQuZG9tYWluKCkpLnJhbmdlKHQucmFuZ2UoKSkuaW50ZXJwb2xhdGUodC5pbnRlcnBvbGF0ZSgpKS5jbGFtcCh0LmNsYW1wKCkpfWZ1bmN0aW9uIE4yKHQsZSl7dmFyIG4saSxyLG89QzIsYT1DMixzPWIyLGw9ITE7ZnVuY3Rpb24gYygpe3JldHVybiBuPU1hdGgubWluKG8ubGVuZ3RoLGEubGVuZ3RoKT4yP0wyOmsyLGk9cj1udWxsLHV9ZnVuY3Rpb24gdShlKXtyZXR1cm4oaXx8KGk9bihvLGEsbD8oZnVuY3Rpb24gcih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXt2YXIgaT10KGU9K2Usbj0rbik7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0PD1lPzA6dD49bj8xOmkodCl9fX0pKHQpOnQscykpKSgrZSl9cmV0dXJuIHUuaW52ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybihyfHwocj1uKGEsbyxBMixsPyhmdW5jdGlvbiBpKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3ZhciBpPXQoZT0rZSxuPStuKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQ8PTA/ZTp0Pj0xP246aSh0KX19fSkoZSk6ZSkpKSgrdCl9LHUuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXUwLmNhbGwodCxUMiksYygpKTpvLnNsaWNlKCl9LHUucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9aDAuY2FsbCh0KSxjKCkpOmEuc2xpY2UoKX0sdS5yYW5nZVJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBhPWgwLmNhbGwodCkscz14MixjKCl9LHUuY2xhbXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9ISF0LGMoKSk6bH0sdS5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz10LGMoKSk6c30sYygpfWZ1bmN0aW9uIEkyKHQsZSl7aWYoKG49KHQ9ZT90LnRvRXhwb25lbnRpYWwoZS0xKTp0LnRvRXhwb25lbnRpYWwoKSkuaW5kZXhPZigiZSIpKTwwKXJldHVybiBudWxsO3ZhciBuLGk9dC5zbGljZSgwLG4pO3JldHVybltpLmxlbmd0aD4xP2lbMF0raS5zbGljZSgyKTppLCt0LnNsaWNlKG4rMSldfWZ1bmN0aW9uIE8yKHQpe3JldHVybih0PUkyKE1hdGguYWJzKHQpKSk/dFsxXTpOYU59dmFyIFIyLHoyPS9eKD86KC4pPyhbPD49Xl0pKT8oWytcLSggXSk/KFskI10pPygwKT8oXGQrKT8oLCk/KFwuXGQrKT8ofik/KFthLXolXSk/JC9pO2Z1bmN0aW9uIEQyKHQpe2lmKCEoZT16Mi5leGVjKHQpKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9ybWF0OiAiK3QpO3ZhciBlO3JldHVybiBuZXcgQjIoe2ZpbGw6ZVsxXSxhbGlnbjplWzJdLHNpZ246ZVszXSxzeW1ib2w6ZVs0XSx6ZXJvOmVbNV0sd2lkdGg6ZVs2XSxjb21tYTplWzddLHByZWNpc2lvbjplWzhdJiZlWzhdLnNsaWNlKDEpLHRyaW06ZVs5XSx0eXBlOmVbMTBdfSl9ZnVuY3Rpb24gQjIodCl7dGhpcy5maWxsPXZvaWQgMD09PXQuZmlsbD8iICI6dC5maWxsKyIiLHRoaXMuYWxpZ249dm9pZCAwPT09dC5hbGlnbj8iPiI6dC5hbGlnbisiIix0aGlzLnNpZ249dm9pZCAwPT09dC5zaWduPyItIjp0LnNpZ24rIiIsdGhpcy5zeW1ib2w9dm9pZCAwPT09dC5zeW1ib2w/IiI6dC5zeW1ib2wrIiIsdGhpcy56ZXJvPSEhdC56ZXJvLHRoaXMud2lkdGg9dm9pZCAwPT09dC53aWR0aD92b2lkIDA6K3Qud2lkdGgsdGhpcy5jb21tYT0hIXQuY29tbWEsdGhpcy5wcmVjaXNpb249dm9pZCAwPT09dC5wcmVjaXNpb24/dm9pZCAwOit0LnByZWNpc2lvbix0aGlzLnRyaW09ISF0LnRyaW0sdGhpcy50eXBlPXZvaWQgMD09PXQudHlwZT8iIjp0LnR5cGUrIiJ9ZnVuY3Rpb24gSDIodCxlKXt2YXIgbj1JMih0LGUpO2lmKCFuKXJldHVybiB0KyIiO3ZhciBpPW5bMF0scj1uWzFdO3JldHVybiByPDA/IjAuIituZXcgQXJyYXkoLXIpLmpvaW4oIjAiKStpOmkubGVuZ3RoPnIrMT9pLnNsaWNlKDAscisxKSsiLiIraS5zbGljZShyKzEpOmkrbmV3IEFycmF5KHItaS5sZW5ndGgrMikuam9pbigiMCIpfUQyLnByb3RvdHlwZT1CMi5wcm90b3R5cGUsQjIucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsbCt0aGlzLmFsaWduK3RoaXMuc2lnbit0aGlzLnN5bWJvbCsodGhpcy56ZXJvPyIwIjoiIikrKHZvaWQgMD09PXRoaXMud2lkdGg/IiI6TWF0aC5tYXgoMSwwfHRoaXMud2lkdGgpKSsodGhpcy5jb21tYT8iLCI6IiIpKyh2b2lkIDA9PT10aGlzLnByZWNpc2lvbj8iIjoiLiIrTWF0aC5tYXgoMCwwfHRoaXMucHJlY2lzaW9uKSkrKHRoaXMudHJpbT8ifiI6IiIpK3RoaXMudHlwZX07dmFyIEYyPXsiJSI6ZnVuY3Rpb24odCxlKXtyZXR1cm4oMTAwKnQpLnRvRml4ZWQoZSl9LGI6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoMil9LGM6ZnVuY3Rpb24odCl7cmV0dXJuIHQrIiJ9LGQ6ZnVuY3Rpb24gVjIodCl7cmV0dXJuIE1hdGguYWJzKHQ9TWF0aC5yb3VuZCh0KSk+PTFlMjE/dC50b0xvY2FsZVN0cmluZygiZW4iKS5yZXBsYWNlKC8sL2csIiIpOnQudG9TdHJpbmcoMTApfSxlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudG9FeHBvbmVudGlhbChlKX0sZjpmdW5jdGlvbih0LGUpe3JldHVybiB0LnRvRml4ZWQoZSl9LGc6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50b1ByZWNpc2lvbihlKX0sbzpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZyg4KX0scDpmdW5jdGlvbih0LGUpe3JldHVybiBIMigxMDAqdCxlKX0scjpIMixzOmZ1bmN0aW9uIFUyKHQsZSl7dmFyIG49STIodCxlKTtpZighbilyZXR1cm4gdCsiIjt2YXIgaT1uWzBdLHI9blsxXSxvPXItKFIyPTMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKHIvMykpKSkrMSxhPWkubGVuZ3RoO3JldHVybiBvPT09YT9pOm8+YT9pK25ldyBBcnJheShvLWErMSkuam9pbigiMCIpOm8+MD9pLnNsaWNlKDAsbykrIi4iK2kuc2xpY2Uobyk6IjAuIituZXcgQXJyYXkoMS1vKS5qb2luKCIwIikrSTIodCxNYXRoLm1heCgwLGUrby0xKSlbMF19LFg6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9LHg6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoMTYpfX07ZnVuY3Rpb24gajIodCl7cmV0dXJuIHR9dmFyIEcyLFcyLHEyLFkyPUFycmF5LnByb3RvdHlwZS5tYXAsWDI9WyJ5IiwieiIsImEiLCJmIiwicCIsIm4iLCLCtSIsIm0iLCIiLCJrIiwiTSIsIkciLCJUIiwiUCIsIkUiLCJaIiwiWSJdO2Z1bmN0aW9uICQyKHQpe3ZhciBlPXQuZG9tYWluO3JldHVybiB0LnRpY2tzPWZ1bmN0aW9uKHQpe3ZhciBuPWUoKTtyZXR1cm4gdDAoblswXSxuW24ubGVuZ3RoLTFdLG51bGw9PXQ/MTA6dCl9LHQudGlja0Zvcm1hdD1mdW5jdGlvbih0LG4pe3JldHVybihmdW5jdGlvbiBpKHQsZSxuKXt2YXIgaSxyPXRbMF0sbz10W3QubGVuZ3RoLTFdLGE9bjAocixvLG51bGw9PWU/MTA6ZSk7c3dpdGNoKChuPUQyKG51bGw9PW4/IixmIjpuKSkudHlwZSl7Y2FzZSJzIjp2YXIgcz1NYXRoLm1heChNYXRoLmFicyhyKSxNYXRoLmFicyhvKSk7cmV0dXJuIG51bGwhPW4ucHJlY2lzaW9ufHxpc05hTihpPShmdW5jdGlvbiBsKHQsZSl7cmV0dXJuIE1hdGgubWF4KDAsMypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoTzIoZSkvMykpKS1PMihNYXRoLmFicyh0KSkpfSkoYSxzKSl8fChuLnByZWNpc2lvbj1pKSxxMihuLHMpO2Nhc2UiIjpjYXNlImUiOmNhc2UiZyI6Y2FzZSJwIjpjYXNlInIiOm51bGwhPW4ucHJlY2lzaW9ufHxpc05hTihpPShmdW5jdGlvbiBjKHQsZSl7cmV0dXJuIHQ9TWF0aC5hYnModCksZT1NYXRoLmFicyhlKS10LE1hdGgubWF4KDAsTzIoZSktTzIodCkpKzF9KShhLE1hdGgubWF4KE1hdGguYWJzKHIpLE1hdGguYWJzKG8pKSkpfHwobi5wcmVjaXNpb249aS0oImUiPT09bi50eXBlKSk7YnJlYWs7Y2FzZSJmIjpjYXNlIiUiOm51bGwhPW4ucHJlY2lzaW9ufHxpc05hTihpPShmdW5jdGlvbiB1KHQpe3JldHVybiBNYXRoLm1heCgwLC1PMihNYXRoLmFicyh0KSkpfSkoYSkpfHwobi5wcmVjaXNpb249aS0yKigiJSI9PT1uLnR5cGUpKX1yZXR1cm4gVzIobil9KShlKCksdCxuKX0sdC5uaWNlPWZ1bmN0aW9uKG4pe251bGw9PW4mJihuPTEwKTt2YXIgaSxyPWUoKSxvPTAsYT1yLmxlbmd0aC0xLHM9cltvXSxsPXJbYV07cmV0dXJuIGw8cyYmKGk9cyxzPWwsbD1pLGk9byxvPWEsYT1pKSwoaT1lMChzLGwsbikpPjA/aT1lMChzPU1hdGguZmxvb3Iocy9pKSppLGw9TWF0aC5jZWlsKGwvaSkqaSxuKTppPDAmJihpPWUwKHM9TWF0aC5jZWlsKHMqaSkvaSxsPU1hdGguZmxvb3IobCppKS9pLG4pKSxpPjA/KHJbb109TWF0aC5mbG9vcihzL2kpKmksclthXT1NYXRoLmNlaWwobC9pKSppLGUocikpOmk8MCYmKHJbb109TWF0aC5jZWlsKHMqaSkvaSxyW2FdPU1hdGguZmxvb3IobCppKS9pLGUocikpLHR9LHR9ZnVuY3Rpb24gSzIodCxlKXt2YXIgbixpPTAscj0odD10LnNsaWNlKCkpLmxlbmd0aC0xLG89dFtpXSxhPXRbcl07cmV0dXJuIGE8byYmKG49aSxpPXIscj1uLG49byxvPWEsYT1uKSx0W2ldPWUuZmxvb3IobyksdFtyXT1lLmNlaWwoYSksdH1mdW5jdGlvbiBaMih0LGUpe3JldHVybihlPU1hdGgubG9nKGUvdCkpP2Z1bmN0aW9uKG4pe3JldHVybiBNYXRoLmxvZyhuL3QpL2V9OkUyKGUpfWZ1bmN0aW9uIEoyKHQsZSl7cmV0dXJuIHQ8MD9mdW5jdGlvbihuKXtyZXR1cm4tTWF0aC5wb3coLWUsbikqTWF0aC5wb3coLXQsMS1uKX06ZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucG93KGUsbikqTWF0aC5wb3codCwxLW4pfX1mdW5jdGlvbiBRMih0KXtyZXR1cm4gaXNGaW5pdGUodCk/KygiMWUiK3QpOnQ8MD8wOnR9ZnVuY3Rpb24gdDUodCl7cmV0dXJuIDEwPT09dD9RMjp0PT09TWF0aC5FP01hdGguZXhwOmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnBvdyh0LGUpfX1mdW5jdGlvbiBlNSh0KXtyZXR1cm4gdD09PU1hdGguRT9NYXRoLmxvZzoxMD09PXQmJk1hdGgubG9nMTB8fDI9PT10JiZNYXRoLmxvZzJ8fCh0PU1hdGgubG9nKHQpLGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLmxvZyhlKS90fSl9ZnVuY3Rpb24gbjUodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybi10KC1lKX19ZnVuY3Rpb24gaTUodCxlKXtyZXR1cm4gdDwwPy1NYXRoLnBvdygtdCxlKTpNYXRoLnBvdyh0LGUpfWZ1bmN0aW9uIHI1KCl7dmFyIHQ9MSxlPU4yKChmdW5jdGlvbiBuKGUsaSl7cmV0dXJuKGk9aTUoaSx0KS0oZT1pNShlLHQpKSk/ZnVuY3Rpb24obil7cmV0dXJuKGk1KG4sdCktZSkvaX06RTIoaSl9KSwoZnVuY3Rpb24gaShlLG4pe3JldHVybiBuPWk1KG4sdCktKGU9aTUoZSx0KSksZnVuY3Rpb24oaSl7cmV0dXJuIGk1KGUrbippLDEvdCl9fSkpLHI9ZS5kb21haW47cmV0dXJuIGUuZXhwb25lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2UscihyKCkpKTp0fSxlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gUDIoZSxyNSgpLmV4cG9uZW50KHQpKX0sJDIoZSl9IShmdW5jdGlvbiBvNSh0KXtHMj0oZnVuY3Rpb24gZSh0KXt2YXIgZT12b2lkIDA9PT10Lmdyb3VwaW5nfHx2b2lkIDA9PT10LnRob3VzYW5kcz9qMjooZnVuY3Rpb24gbih0LGUpe3JldHVybiBmdW5jdGlvbihuLGkpe2Zvcih2YXIgcj1uLmxlbmd0aCxvPVtdLGE9MCxzPXRbMF0sbD0wO3I+MCYmcz4wJiYobCtzKzE+aSYmKHM9TWF0aC5tYXgoMSxpLWwpKSxvLnB1c2gobi5zdWJzdHJpbmcoci09cyxyK3MpKSwhKChsKz1zKzEpPmkpKTspcz10W2E9KGErMSkldC5sZW5ndGhdO3JldHVybiBvLnJldmVyc2UoKS5qb2luKGUpfX0pKFkyLmNhbGwodC5ncm91cGluZyxOdW1iZXIpLHQudGhvdXNhbmRzKyIiKSxpPXZvaWQgMD09PXQuY3VycmVuY3k/IiI6dC5jdXJyZW5jeVswXSsiIixyPXZvaWQgMD09PXQuY3VycmVuY3k/IiI6dC5jdXJyZW5jeVsxXSsiIixvPXZvaWQgMD09PXQuZGVjaW1hbD8iLiI6dC5kZWNpbWFsKyIiLGE9dm9pZCAwPT09dC5udW1lcmFscz9qMjooZnVuY3Rpb24gcyh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvWzAtOV0vZywoZnVuY3Rpb24oZSl7cmV0dXJuIHRbK2VdfSkpfX0pKFkyLmNhbGwodC5udW1lcmFscyxTdHJpbmcpKSxsPXZvaWQgMD09PXQucGVyY2VudD8iJSI6dC5wZXJjZW50KyIiLGM9dm9pZCAwPT09dC5taW51cz8iLSI6dC5taW51cysiIix1PXZvaWQgMD09PXQubmFuPyJOYU4iOnQubmFuKyIiO2Z1bmN0aW9uIGgodCl7dmFyIG49KHQ9RDIodCkpLmZpbGwscz10LmFsaWduLGg9dC5zaWduLGQ9dC5zeW1ib2wscD10Lnplcm8sZj10LndpZHRoLG09dC5jb21tYSxnPXQucHJlY2lzaW9uLF89dC50cmltLHk9dC50eXBlOyJuIj09PXk/KG09ITAseT0iZyIpOkYyW3ldfHwodm9pZCAwPT09ZyYmKGc9MTIpLF89ITAseT0iZyIpLChwfHwiMCI9PT1uJiYiPSI9PT1zKSYmKHA9ITAsbj0iMCIscz0iPSIpO3ZhciB2PSIkIj09PWQ/aToiIyI9PT1kJiYvW2JveFhdLy50ZXN0KHkpPyIwIit5LnRvTG93ZXJDYXNlKCk6IiIsYj0iJCI9PT1kP3I6L1slcF0vLnRlc3QoeSk/bDoiIix4PUYyW3ldLHc9L1tkZWZncHJzJV0vLnRlc3QoeSk7ZnVuY3Rpb24gUyh0KXt2YXIgaSxyLGwsZD12LFM9YjtpZigiYyI9PT15KVM9eCh0KStTLHQ9IiI7ZWxzZXt2YXIgTT0odD0rdCk8MHx8MS90PDA7aWYodD1pc05hTih0KT91OngoTWF0aC5hYnModCksZyksXyYmKHQ9KGZ1bmN0aW9uIEUodCl7dDpmb3IodmFyIGUsbj10Lmxlbmd0aCxpPTEscj0tMTtpPG47KytpKXN3aXRjaCh0W2ldKXtjYXNlIi4iOnI9ZT1pO2JyZWFrO2Nhc2UiMCI6MD09PXImJihyPWkpLGU9aTticmVhaztkZWZhdWx0OmlmKCErdFtpXSlicmVhayB0O3I+MCYmKHI9MCl9cmV0dXJuIHI+MD90LnNsaWNlKDAscikrdC5zbGljZShlKzEpOnR9KSh0KSksTSYmMD09K3QmJiIrIiE9PWgmJihNPSExKSxkPShNPyIoIj09PWg/aDpjOiItIj09PWh8fCIoIj09PWg/IiI6aCkrZCxTPSgicyI9PT15P1gyWzgrUjIvM106IiIpK1MrKE0mJiIoIj09PWg/IikiOiIiKSx3KWZvcihpPS0xLHI9dC5sZW5ndGg7KytpPHI7KWlmKDQ4PihsPXQuY2hhckNvZGVBdChpKSl8fGw+NTcpe1M9KDQ2PT09bD9vK3Quc2xpY2UoaSsxKTp0LnNsaWNlKGkpKStTLHQ9dC5zbGljZSgwLGkpO2JyZWFrfX1tJiYhcCYmKHQ9ZSh0LDEvMCkpO3ZhciBUPWQubGVuZ3RoK3QubGVuZ3RoK1MubGVuZ3RoLEM9VDxmP25ldyBBcnJheShmLVQrMSkuam9pbihuKToiIjtzd2l0Y2gobSYmcCYmKHQ9ZShDK3QsQy5sZW5ndGg/Zi1TLmxlbmd0aDoxLzApLEM9IiIpLHMpe2Nhc2UiPCI6dD1kK3QrUytDO2JyZWFrO2Nhc2UiPSI6dD1kK0MrdCtTO2JyZWFrO2Nhc2UiXiI6dD1DLnNsaWNlKDAsVD1DLmxlbmd0aD4+MSkrZCt0K1MrQy5zbGljZShUKTticmVhaztkZWZhdWx0OnQ9QytkK3QrU31yZXR1cm4gYSh0KX1yZXR1cm4gZz12b2lkIDA9PT1nPzY6L1tncHJzXS8udGVzdCh5KT9NYXRoLm1heCgxLE1hdGgubWluKDIxLGcpKTpNYXRoLm1heCgwLE1hdGgubWluKDIwLGcpKSxTLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHQrIiJ9LFN9cmV0dXJue2Zvcm1hdDpoLGZvcm1hdFByZWZpeDpmdW5jdGlvbiBkKHQsZSl7dmFyIG49aCgoKHQ9RDIodCkpLnR5cGU9ImYiLHQpKSxpPTMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKE8yKGUpLzMpKSkscj1NYXRoLnBvdygxMCwtaSksbz1YMls4K2kvM107cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBuKHIqdCkrb319fX0pKHQpLFcyPUcyLmZvcm1hdCxxMj1HMi5mb3JtYXRQcmVmaXh9KSh7ZGVjaW1hbDoiLiIsdGhvdXNhbmRzOiIsIixncm91cGluZzpbM10sY3VycmVuY3k6WyIkIiwiIl0sbWludXM6Ii0ifSk7dmFyIGE1PW5ldyBEYXRlLHM1PW5ldyBEYXRlO2Z1bmN0aW9uIGw1KHQsZSxuLGkpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIHQoZT0wPT09YXJndW1lbnRzLmxlbmd0aD9uZXcgRGF0ZTpuZXcgRGF0ZSgrZSkpLGV9cmV0dXJuIHIuZmxvb3I9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoZT1uZXcgRGF0ZSgrZSkpLGV9LHIuY2VpbD1mdW5jdGlvbihuKXtyZXR1cm4gdChuPW5ldyBEYXRlKG4tMSkpLGUobiwxKSx0KG4pLG59LHIucm91bmQ9ZnVuY3Rpb24odCl7dmFyIGU9cih0KSxuPXIuY2VpbCh0KTtyZXR1cm4gdC1lPG4tdD9lOm59LHIub2Zmc2V0PWZ1bmN0aW9uKHQsbil7cmV0dXJuIGUodD1uZXcgRGF0ZSgrdCksbnVsbD09bj8xOk1hdGguZmxvb3IobikpLHR9LHIucmFuZ2U9ZnVuY3Rpb24obixpLG8pe3ZhciBhLHM9W107aWYobj1yLmNlaWwobiksbz1udWxsPT1vPzE6TWF0aC5mbG9vcihvKSwhKG48aSYmbz4wKSlyZXR1cm4gcztkb3tzLnB1c2goYT1uZXcgRGF0ZSgrbikpLGUobixvKSx0KG4pfXdoaWxlKGE8biYmbjxpKTtyZXR1cm4gc30sci5maWx0ZXI9ZnVuY3Rpb24obil7cmV0dXJuIGw1KChmdW5jdGlvbihlKXtpZihlPj1lKWZvcig7dChlKSwhbihlKTspZS5zZXRUaW1lKGUtMSl9KSwoZnVuY3Rpb24odCxpKXtpZih0Pj10KWlmKGk8MClmb3IoOysraTw9MDspZm9yKDtlKHQsLTEpLCFuKHQpOyk7ZWxzZSBmb3IoOy0taT49MDspZm9yKDtlKHQsMSksIW4odCk7KTt9KSl9LG4mJihyLmNvdW50PWZ1bmN0aW9uKGUsaSl7cmV0dXJuIGE1LnNldFRpbWUoK2UpLHM1LnNldFRpbWUoK2kpLHQoYTUpLHQoczUpLE1hdGguZmxvb3IobihhNSxzNSkpfSxyLmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiB0PU1hdGguZmxvb3IodCksaXNGaW5pdGUodCkmJnQ+MD90PjE/ci5maWx0ZXIoaT9mdW5jdGlvbihlKXtyZXR1cm4gaShlKSV0PT0wfTpmdW5jdGlvbihlKXtyZXR1cm4gci5jb3VudCgwLGUpJXQ9PTB9KTpyOm51bGx9KSxyfXZhciBjNT1sNSgoZnVuY3Rpb24oKXt9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS10fSkpO2M1LmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiB0PU1hdGguZmxvb3IodCksaXNGaW5pdGUodCkmJnQ+MD90PjE/bDUoKGZ1bmN0aW9uKGUpe2Uuc2V0VGltZShNYXRoLmZsb29yKGUvdCkqdCl9KSwoZnVuY3Rpb24oZSxuKXtlLnNldFRpbWUoK2Urbip0KX0pLChmdW5jdGlvbihlLG4pe3JldHVybihuLWUpL3R9KSk6YzU6bnVsbH07dmFyIHU1PTFlMyxoNT02ZTQsZDU9MzZlNSxwNT04NjRlNSxmNT02MDQ4ZTUsbTU9bDUoKGZ1bmN0aW9uKHQpe3Quc2V0VGltZSh0LXQuZ2V0TWlsbGlzZWNvbmRzKCkpfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0K2UqdTUpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvdTV9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDU2Vjb25kcygpfSkpLGc1PWw1KChmdW5jdGlvbih0KXt0LnNldFRpbWUodC10LmdldE1pbGxpc2Vjb25kcygpLXQuZ2V0U2Vjb25kcygpKnU1KX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCtlKmg1KX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQpL2g1fSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1pbnV0ZXMoKX0pKSxfNT1sNSgoZnVuY3Rpb24odCl7dC5zZXRUaW1lKHQtdC5nZXRNaWxsaXNlY29uZHMoKS10LmdldFNlY29uZHMoKSp1NS10LmdldE1pbnV0ZXMoKSpoNSl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrZSpkNSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS9kNX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRIb3VycygpfSkpLHk1PWw1KChmdW5jdGlvbih0KXt0LnNldEhvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpK2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdC0oZS5nZXRUaW1lem9uZU9mZnNldCgpLXQuZ2V0VGltZXpvbmVPZmZzZXQoKSkqaDUpL3A1fSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldERhdGUoKS0xfSkpO2Z1bmN0aW9uIHY1KHQpe3JldHVybiBsNSgoZnVuY3Rpb24oZSl7ZS5zZXREYXRlKGUuZ2V0RGF0ZSgpLShlLmdldERheSgpKzctdCklNyksZS5zZXRIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0RGF0ZSh0LmdldERhdGUoKSs3KmUpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdC0oZS5nZXRUaW1lem9uZU9mZnNldCgpLXQuZ2V0VGltZXpvbmVPZmZzZXQoKSkqaDUpL2Y1fSkpfXZhciBiNT12NSgwKSx4NT12NSgxKTt2NSgyKSx2NSgzKTt2YXIgdzU9djUoNCk7djUoNSksdjUoNik7dmFyIFM1PWw1KChmdW5jdGlvbih0KXt0LnNldERhdGUoMSksdC5zZXRIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0TW9udGgodC5nZXRNb250aCgpK2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZ2V0TW9udGgoKS10LmdldE1vbnRoKCkrMTIqKGUuZ2V0RnVsbFllYXIoKS10LmdldEZ1bGxZZWFyKCkpfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1vbnRoKCl9KSksTTU9bDUoKGZ1bmN0aW9uKHQpe3Quc2V0TW9udGgoMCwxKSx0LnNldEhvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXRGdWxsWWVhcigpLXQuZ2V0RnVsbFllYXIoKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRGdWxsWWVhcigpfSkpO001LmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiBpc0Zpbml0ZSh0PU1hdGguZmxvb3IodCkpJiZ0PjA/bDUoKGZ1bmN0aW9uKGUpe2Uuc2V0RnVsbFllYXIoTWF0aC5mbG9vcihlLmdldEZ1bGxZZWFyKCkvdCkqdCksZS5zZXRNb250aCgwLDEpLGUuc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24oZSxuKXtlLnNldEZ1bGxZZWFyKGUuZ2V0RnVsbFllYXIoKStuKnQpfSkpOm51bGx9O3ZhciBFNT1sNSgoZnVuY3Rpb24odCl7dC5zZXRVVENTZWNvbmRzKDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrZSpoNSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS9oNX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENNaW51dGVzKCl9KSksVDU9bDUoKGZ1bmN0aW9uKHQpe3Quc2V0VVRDTWludXRlcygwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrZSpkNSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS9kNX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENIb3VycygpfSkpLEM1PWw1KChmdW5jdGlvbih0KXt0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpK2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvcDV9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDRGF0ZSgpLTF9KSk7ZnVuY3Rpb24gQTUodCl7cmV0dXJuIGw1KChmdW5jdGlvbihlKXtlLnNldFVUQ0RhdGUoZS5nZXRVVENEYXRlKCktKGUuZ2V0VVRDRGF5KCkrNy10KSU3KSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpKzcqZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS9mNX0pKX12YXIgazU9QTUoMCksTDU9QTUoMSk7QTUoMiksQTUoMyk7dmFyIFA1PUE1KDQpO0E1KDUpLEE1KDYpO3ZhciBONT1sNSgoZnVuY3Rpb24odCl7dC5zZXRVVENEYXRlKDEpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFVUQ01vbnRoKHQuZ2V0VVRDTW9udGgoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldFVUQ01vbnRoKCktdC5nZXRVVENNb250aCgpKzEyKihlLmdldFVUQ0Z1bGxZZWFyKCktdC5nZXRVVENGdWxsWWVhcigpKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENNb250aCgpfSkpLEk1PWw1KChmdW5jdGlvbih0KXt0LnNldFVUQ01vbnRoKDAsMSksdC5zZXRVVENIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VVRDRnVsbFllYXIodC5nZXRVVENGdWxsWWVhcigpK2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZ2V0VVRDRnVsbFllYXIoKS10LmdldFVUQ0Z1bGxZZWFyKCl9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDRnVsbFllYXIoKX0pKTtmdW5jdGlvbiBPNSh0KXtpZigwPD10LnkmJnQueTwxMDApe3ZhciBlPW5ldyBEYXRlKC0xLHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKTtyZXR1cm4gZS5zZXRGdWxsWWVhcih0LnkpLGV9cmV0dXJuIG5ldyBEYXRlKHQueSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCl9ZnVuY3Rpb24gUjUodCl7aWYoMDw9dC55JiZ0Lnk8MTAwKXt2YXIgZT1uZXcgRGF0ZShEYXRlLlVUQygtMSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCkpO3JldHVybiBlLnNldFVUQ0Z1bGxZZWFyKHQueSksZX1yZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEModC55LHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKSl9ZnVuY3Rpb24gejUodCxlLG4pe3JldHVybnt5OnQsbTplLGQ6bixIOjAsTTowLFM6MCxMOjB9fUk1LmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiBpc0Zpbml0ZSh0PU1hdGguZmxvb3IodCkpJiZ0PjA/bDUoKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDRnVsbFllYXIoTWF0aC5mbG9vcihlLmdldFVUQ0Z1bGxZZWFyKCkvdCkqdCksZS5zZXRVVENNb250aCgwLDEpLGUuc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24oZSxuKXtlLnNldFVUQ0Z1bGxZZWFyKGUuZ2V0VVRDRnVsbFllYXIoKStuKnQpfSkpOm51bGx9O3ZhciBENSxCNSxINSxGNT17Ii0iOiIiLF86IiAiLDA6IjAifSxWNT0vXlxzKlxkKy8sVTU9L14lLyxqNT0vW1xcXiQqKz98W1xdKCkue31dL2c7ZnVuY3Rpb24gRzUodCxlLG4pe3ZhciBpPXQ8MD8iLSI6IiIscj0oaT8tdDp0KSsiIixvPXIubGVuZ3RoO3JldHVybiBpKyhvPG4/bmV3IEFycmF5KG4tbysxKS5qb2luKGUpK3I6cil9ZnVuY3Rpb24gVzUodCl7cmV0dXJuIHQucmVwbGFjZShqNSwiXFwkJiIpfWZ1bmN0aW9uIHE1KHQpe3JldHVybiBuZXcgUmVnRXhwKCJeKD86Iit0Lm1hcChXNSkuam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIFk1KHQpe2Zvcih2YXIgZT17fSxuPS0xLGk9dC5sZW5ndGg7KytuPGk7KWVbdFtuXS50b0xvd2VyQ2FzZSgpXT1uO3JldHVybiBlfWZ1bmN0aW9uIFg1KHQsZSxuKXt2YXIgaT1WNS5leGVjKGUuc2xpY2UobixuKzEpKTtyZXR1cm4gaT8odC53PStpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uICQ1KHQsZSxuKXt2YXIgaT1WNS5leGVjKGUuc2xpY2UobixuKzEpKTtyZXR1cm4gaT8odC51PStpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEs1KHQsZSxuKXt2YXIgaT1WNS5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gaT8odC5VPStpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFo1KHQsZSxuKXt2YXIgaT1WNS5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gaT8odC5WPStpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEo1KHQsZSxuKXt2YXIgaT1WNS5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gaT8odC5XPStpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFE1KHQsZSxuKXt2YXIgaT1WNS5leGVjKGUuc2xpY2UobixuKzQpKTtyZXR1cm4gaT8odC55PStpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHQzKHQsZSxuKXt2YXIgaT1WNS5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gaT8odC55PStpWzBdKygraVswXT42OD8xOTAwOjJlMyksbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gZTModCxlLG4pe3ZhciBpPS9eKFopfChbKy1dXGRcZCkoPzo6PyhcZFxkKSk/Ly5leGVjKGUuc2xpY2UobixuKzYpKTtyZXR1cm4gaT8odC5aPWlbMV0/MDotKGlbMl0rKGlbM118fCIwMCIpKSxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBuMyh0LGUsbil7dmFyIGk9VjUuZXhlYyhlLnNsaWNlKG4sbisxKSk7cmV0dXJuIGk/KHQucT0zKmlbMF0tMyxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBpMyh0LGUsbil7dmFyIGk9VjUuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIGk/KHQubT1pWzBdLTEsbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcjModCxlLG4pe3ZhciBpPVY1LmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiBpPyh0LmQ9K2lbMF0sbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbzModCxlLG4pe3ZhciBpPVY1LmV4ZWMoZS5zbGljZShuLG4rMykpO3JldHVybiBpPyh0Lm09MCx0LmQ9K2lbMF0sbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gYTModCxlLG4pe3ZhciBpPVY1LmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiBpPyh0Lkg9K2lbMF0sbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gczModCxlLG4pe3ZhciBpPVY1LmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiBpPyh0Lk09K2lbMF0sbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbDModCxlLG4pe3ZhciBpPVY1LmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiBpPyh0LlM9K2lbMF0sbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gYzModCxlLG4pe3ZhciBpPVY1LmV4ZWMoZS5zbGljZShuLG4rMykpO3JldHVybiBpPyh0Lkw9K2lbMF0sbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gdTModCxlLG4pe3ZhciBpPVY1LmV4ZWMoZS5zbGljZShuLG4rNikpO3JldHVybiBpPyh0Lkw9TWF0aC5mbG9vcihpWzBdLzFlMyksbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gaDModCxlLG4pe3ZhciBpPVU1LmV4ZWMoZS5zbGljZShuLG4rMSkpO3JldHVybiBpP24raVswXS5sZW5ndGg6LTF9ZnVuY3Rpb24gZDModCxlLG4pe3ZhciBpPVY1LmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIGk/KHQuUT0raVswXSxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBwMyh0LGUsbil7dmFyIGk9VjUuZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gaT8odC5zPStpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGYzKHQsZSl7cmV0dXJuIEc1KHQuZ2V0RGF0ZSgpLGUsMil9ZnVuY3Rpb24gbTModCxlKXtyZXR1cm4gRzUodC5nZXRIb3VycygpLGUsMil9ZnVuY3Rpb24gZzModCxlKXtyZXR1cm4gRzUodC5nZXRIb3VycygpJTEyfHwxMixlLDIpfWZ1bmN0aW9uIF8zKHQsZSl7cmV0dXJuIEc1KDEreTUuY291bnQoTTUodCksdCksZSwzKX1mdW5jdGlvbiB5Myh0LGUpe3JldHVybiBHNSh0LmdldE1pbGxpc2Vjb25kcygpLGUsMyl9ZnVuY3Rpb24gdjModCxlKXtyZXR1cm4geTModCxlKSsiMDAwIn1mdW5jdGlvbiBiMyh0LGUpe3JldHVybiBHNSh0LmdldE1vbnRoKCkrMSxlLDIpfWZ1bmN0aW9uIHgzKHQsZSl7cmV0dXJuIEc1KHQuZ2V0TWludXRlcygpLGUsMil9ZnVuY3Rpb24gdzModCxlKXtyZXR1cm4gRzUodC5nZXRTZWNvbmRzKCksZSwyKX1mdW5jdGlvbiBTMyh0KXt2YXIgZT10LmdldERheSgpO3JldHVybiAwPT09ZT83OmV9ZnVuY3Rpb24gTTModCxlKXtyZXR1cm4gRzUoYjUuY291bnQoTTUodCktMSx0KSxlLDIpfWZ1bmN0aW9uIEUzKHQpe3ZhciBlPXQuZ2V0RGF5KCk7cmV0dXJuIGU+PTR8fDA9PT1lP3c1KHQpOnc1LmNlaWwodCl9ZnVuY3Rpb24gVDModCxlKXtyZXR1cm4gdD1FMyh0KSxHNSh3NS5jb3VudChNNSh0KSx0KSsoND09PU01KHQpLmdldERheSgpKSxlLDIpfWZ1bmN0aW9uIEMzKHQpe3JldHVybiB0LmdldERheSgpfWZ1bmN0aW9uIEEzKHQsZSl7cmV0dXJuIEc1KHg1LmNvdW50KE01KHQpLTEsdCksZSwyKX1mdW5jdGlvbiBrMyh0LGUpe3JldHVybiBHNSh0LmdldEZ1bGxZZWFyKCklMTAwLGUsMil9ZnVuY3Rpb24gTDModCxlKXtyZXR1cm4gRzUoKHQ9RTModCkpLmdldEZ1bGxZZWFyKCklMTAwLGUsMil9ZnVuY3Rpb24gUDModCxlKXtyZXR1cm4gRzUodC5nZXRGdWxsWWVhcigpJTFlNCxlLDQpfWZ1bmN0aW9uIE4zKHQsZSl7dmFyIG49dC5nZXREYXkoKTtyZXR1cm4gRzUoKHQ9bj49NHx8MD09PW4/dzUodCk6dzUuY2VpbCh0KSkuZ2V0RnVsbFllYXIoKSUxZTQsZSw0KX1mdW5jdGlvbiBJMyh0KXt2YXIgZT10LmdldFRpbWV6b25lT2Zmc2V0KCk7cmV0dXJuKGU+MD8iLSI6KGUqPS0xLCIrIikpK0c1KGUvNjB8MCwiMCIsMikrRzUoZSU2MCwiMCIsMil9ZnVuY3Rpb24gTzModCxlKXtyZXR1cm4gRzUodC5nZXRVVENEYXRlKCksZSwyKX1mdW5jdGlvbiBSMyh0LGUpe3JldHVybiBHNSh0LmdldFVUQ0hvdXJzKCksZSwyKX1mdW5jdGlvbiB6Myh0LGUpe3JldHVybiBHNSh0LmdldFVUQ0hvdXJzKCklMTJ8fDEyLGUsMil9ZnVuY3Rpb24gRDModCxlKXtyZXR1cm4gRzUoMStDNS5jb3VudChJNSh0KSx0KSxlLDMpfWZ1bmN0aW9uIEIzKHQsZSl7cmV0dXJuIEc1KHQuZ2V0VVRDTWlsbGlzZWNvbmRzKCksZSwzKX1mdW5jdGlvbiBIMyh0LGUpe3JldHVybiBCMyh0LGUpKyIwMDAifWZ1bmN0aW9uIEYzKHQsZSl7cmV0dXJuIEc1KHQuZ2V0VVRDTW9udGgoKSsxLGUsMil9ZnVuY3Rpb24gVjModCxlKXtyZXR1cm4gRzUodC5nZXRVVENNaW51dGVzKCksZSwyKX1mdW5jdGlvbiBVMyh0LGUpe3JldHVybiBHNSh0LmdldFVUQ1NlY29uZHMoKSxlLDIpfWZ1bmN0aW9uIGozKHQpe3ZhciBlPXQuZ2V0VVRDRGF5KCk7cmV0dXJuIDA9PT1lPzc6ZX1mdW5jdGlvbiBHMyh0LGUpe3JldHVybiBHNShrNS5jb3VudChJNSh0KS0xLHQpLGUsMil9ZnVuY3Rpb24gVzModCl7dmFyIGU9dC5nZXRVVENEYXkoKTtyZXR1cm4gZT49NHx8MD09PWU/UDUodCk6UDUuY2VpbCh0KX1mdW5jdGlvbiBxMyh0LGUpe3JldHVybiB0PVczKHQpLEc1KFA1LmNvdW50KEk1KHQpLHQpKyg0PT09STUodCkuZ2V0VVRDRGF5KCkpLGUsMil9ZnVuY3Rpb24gWTModCl7cmV0dXJuIHQuZ2V0VVRDRGF5KCl9ZnVuY3Rpb24gWDModCxlKXtyZXR1cm4gRzUoTDUuY291bnQoSTUodCktMSx0KSxlLDIpfWZ1bmN0aW9uICQzKHQsZSl7cmV0dXJuIEc1KHQuZ2V0VVRDRnVsbFllYXIoKSUxMDAsZSwyKX1mdW5jdGlvbiBLMyh0LGUpe3JldHVybiBHNSgodD1XMyh0KSkuZ2V0VVRDRnVsbFllYXIoKSUxMDAsZSwyKX1mdW5jdGlvbiBaMyh0LGUpe3JldHVybiBHNSh0LmdldFVUQ0Z1bGxZZWFyKCklMWU0LGUsNCl9ZnVuY3Rpb24gSjModCxlKXt2YXIgbj10LmdldFVUQ0RheSgpO3JldHVybiBHNSgodD1uPj00fHwwPT09bj9QNSh0KTpQNS5jZWlsKHQpKS5nZXRVVENGdWxsWWVhcigpJTFlNCxlLDQpfWZ1bmN0aW9uIFEzKCl7cmV0dXJuIiswMDAwIn1mdW5jdGlvbiB0NCgpe3JldHVybiIlIn1mdW5jdGlvbiBlNCh0KXtyZXR1cm4rdH1mdW5jdGlvbiBuNCh0KXtyZXR1cm4gTWF0aC5mbG9vcigrdC8xZTMpfSEoZnVuY3Rpb24gaTQodCl7RDU9KGZ1bmN0aW9uIGUodCl7dmFyIGU9dC5kYXRlVGltZSxuPXQuZGF0ZSxpPXQudGltZSxyPXQucGVyaW9kcyxvPXQuZGF5cyxhPXQuc2hvcnREYXlzLHM9dC5tb250aHMsbD10LnNob3J0TW9udGhzLGM9cTUociksdT1ZNShyKSxoPXE1KG8pLGQ9WTUobykscD1xNShhKSxmPVk1KGEpLG09cTUocyksZz1ZNShzKSxfPXE1KGwpLHk9WTUobCksdj17YTpmdW5jdGlvbiBiKHQpe3JldHVybiBhW3QuZ2V0RGF5KCldfSxBOmZ1bmN0aW9uIHgodCl7cmV0dXJuIG9bdC5nZXREYXkoKV19LGI6ZnVuY3Rpb24gdyh0KXtyZXR1cm4gbFt0LmdldE1vbnRoKCldfSxCOmZ1bmN0aW9uIFModCl7cmV0dXJuIHNbdC5nZXRNb250aCgpXX0sYzpudWxsLGQ6ZjMsZTpmMyxmOnYzLGc6TDMsRzpOMyxIOm0zLEk6ZzMsajpfMyxMOnkzLG06YjMsTTp4MyxwOmZ1bmN0aW9uIE0odCl7cmV0dXJuIHJbKyh0LmdldEhvdXJzKCk+PTEyKV19LHE6ZnVuY3Rpb24gRSh0KXtyZXR1cm4gMSt+fih0LmdldE1vbnRoKCkvMyl9LFE6ZTQsczpuNCxTOnczLHU6UzMsVTpNMyxWOlQzLHc6QzMsVzpBMyx4Om51bGwsWDpudWxsLHk6azMsWTpQMyxaOkkzLCIlIjp0NH0sVD17YTpmdW5jdGlvbiBDKHQpe3JldHVybiBhW3QuZ2V0VVRDRGF5KCldfSxBOmZ1bmN0aW9uIEEodCl7cmV0dXJuIG9bdC5nZXRVVENEYXkoKV19LGI6ZnVuY3Rpb24gayh0KXtyZXR1cm4gbFt0LmdldFVUQ01vbnRoKCldfSxCOmZ1bmN0aW9uIEwodCl7cmV0dXJuIHNbdC5nZXRVVENNb250aCgpXX0sYzpudWxsLGQ6TzMsZTpPMyxmOkgzLGc6SzMsRzpKMyxIOlIzLEk6ejMsajpEMyxMOkIzLG06RjMsTTpWMyxwOmZ1bmN0aW9uIFAodCl7cmV0dXJuIHJbKyh0LmdldFVUQ0hvdXJzKCk+PTEyKV19LHE6ZnVuY3Rpb24gTih0KXtyZXR1cm4gMSt+fih0LmdldFVUQ01vbnRoKCkvMyl9LFE6ZTQsczpuNCxTOlUzLHU6ajMsVTpHMyxWOnEzLHc6WTMsVzpYMyx4Om51bGwsWDpudWxsLHk6JDMsWTpaMyxaOlEzLCIlIjp0NH0sST17YTpmdW5jdGlvbiBPKHQsZSxuKXt2YXIgaT1wLmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIGk/KHQudz1mW2lbMF0udG9Mb3dlckNhc2UoKV0sbitpWzBdLmxlbmd0aCk6LTF9LEE6ZnVuY3Rpb24gUih0LGUsbil7dmFyIGk9aC5leGVjKGUuc2xpY2UobikpO3JldHVybiBpPyh0Lnc9ZFtpWzBdLnRvTG93ZXJDYXNlKCldLG4raVswXS5sZW5ndGgpOi0xfSxiOmZ1bmN0aW9uIHoodCxlLG4pe3ZhciBpPV8uZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gaT8odC5tPXlbaVswXS50b0xvd2VyQ2FzZSgpXSxuK2lbMF0ubGVuZ3RoKTotMX0sQjpmdW5jdGlvbiBEKHQsZSxuKXt2YXIgaT1tLmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIGk/KHQubT1nW2lbMF0udG9Mb3dlckNhc2UoKV0sbitpWzBdLmxlbmd0aCk6LTF9LGM6ZnVuY3Rpb24gQih0LG4saSl7cmV0dXJuIEcodCxlLG4saSl9LGQ6cjMsZTpyMyxmOnUzLGc6dDMsRzpRNSxIOmEzLEk6YTMsajpvMyxMOmMzLG06aTMsTTpzMyxwOmZ1bmN0aW9uIEgodCxlLG4pe3ZhciBpPWMuZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gaT8odC5wPXVbaVswXS50b0xvd2VyQ2FzZSgpXSxuK2lbMF0ubGVuZ3RoKTotMX0scTpuMyxROmQzLHM6cDMsUzpsMyx1OiQ1LFU6SzUsVjpaNSx3Olg1LFc6SjUseDpmdW5jdGlvbiBGKHQsZSxpKXtyZXR1cm4gRyh0LG4sZSxpKX0sWDpmdW5jdGlvbiBWKHQsZSxuKXtyZXR1cm4gRyh0LGksZSxuKX0seTp0MyxZOlE1LFo6ZTMsIiUiOmgzfTtmdW5jdGlvbiBVKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBpLHIsbyxhPVtdLHM9LTEsbD0wLGM9dC5sZW5ndGg7Zm9yKG4gaW5zdGFuY2VvZiBEYXRlfHwobj1uZXcgRGF0ZSgrbikpOysrczxjOykzNz09PXQuY2hhckNvZGVBdChzKSYmKGEucHVzaCh0LnNsaWNlKGwscykpLG51bGwhPShyPUY1W2k9dC5jaGFyQXQoKytzKV0pP2k9dC5jaGFyQXQoKytzKTpyPSJlIj09PWk/IiAiOiIwIiwobz1lW2ldKSYmKGk9byhuLHIpKSxhLnB1c2goaSksbD1zKzEpO3JldHVybiBhLnB1c2godC5zbGljZShsLHMpKSxhLmpvaW4oIiIpfX1mdW5jdGlvbiBqKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBpLHIsbz16NSgxOTAwLHZvaWQgMCwxKTtpZihHKG8sdCxuKz0iIiwwKSE9bi5sZW5ndGgpcmV0dXJuIG51bGw7aWYoIlEiaW4gbylyZXR1cm4gbmV3IERhdGUoby5RKTtpZigicyJpbiBvKXJldHVybiBuZXcgRGF0ZSgxZTMqby5zKygiTCJpbiBvP28uTDowKSk7aWYoZSYmISgiWiJpbiBvKSYmKG8uWj0wKSwicCJpbiBvJiYoby5IPW8uSCUxMisxMipvLnApLHZvaWQgMD09PW8ubSYmKG8ubT0icSJpbiBvP28ucTowKSwiViJpbiBvKXtpZihvLlY8MXx8by5WPjUzKXJldHVybiBudWxsOyJ3ImluIG98fChvLnc9MSksIloiaW4gbz8ocj0oaT1SNSh6NShvLnksMCwxKSkpLmdldFVUQ0RheSgpLGk9cj40fHwwPT09cj9MNS5jZWlsKGkpOkw1KGkpLGk9QzUub2Zmc2V0KGksNyooby5WLTEpKSxvLnk9aS5nZXRVVENGdWxsWWVhcigpLG8ubT1pLmdldFVUQ01vbnRoKCksby5kPWkuZ2V0VVRDRGF0ZSgpKyhvLncrNiklNyk6KHI9KGk9TzUoejUoby55LDAsMSkpKS5nZXREYXkoKSxpPXI+NHx8MD09PXI/eDUuY2VpbChpKTp4NShpKSxpPXk1Lm9mZnNldChpLDcqKG8uVi0xKSksby55PWkuZ2V0RnVsbFllYXIoKSxvLm09aS5nZXRNb250aCgpLG8uZD1pLmdldERhdGUoKSsoby53KzYpJTcpfWVsc2UoIlciaW4gb3x8IlUiaW4gbykmJigidyJpbiBvfHwoby53PSJ1ImluIG8/by51JTc6IlciaW4gbz8xOjApLHI9IloiaW4gbz9SNSh6NShvLnksMCwxKSkuZ2V0VVRDRGF5KCk6TzUoejUoby55LDAsMSkpLmdldERheSgpLG8ubT0wLG8uZD0iVyJpbiBvPyhvLncrNiklNys3Km8uVy0ocis1KSU3Om8udys3Km8uVS0ocis2KSU3KTtyZXR1cm4iWiJpbiBvPyhvLkgrPW8uWi8xMDB8MCxvLk0rPW8uWiUxMDAsUjUobykpOk81KG8pfX1mdW5jdGlvbiBHKHQsZSxuLGkpe2Zvcih2YXIgcixvLGE9MCxzPWUubGVuZ3RoLGw9bi5sZW5ndGg7YTxzOyl7aWYoaT49bClyZXR1cm4tMTtpZigzNz09PShyPWUuY2hhckNvZGVBdChhKyspKSl7aWYocj1lLmNoYXJBdChhKyspLCEobz1JW3IgaW4gRjU/ZS5jaGFyQXQoYSsrKTpyXSl8fChpPW8odCxuLGkpKTwwKXJldHVybi0xfWVsc2UgaWYociE9bi5jaGFyQ29kZUF0KGkrKykpcmV0dXJuLTF9cmV0dXJuIGl9cmV0dXJuIHYueD1VKG4sdiksdi5YPVUoaSx2KSx2LmM9VShlLHYpLFQueD1VKG4sVCksVC5YPVUoaSxUKSxULmM9VShlLFQpLHtmb3JtYXQ6ZnVuY3Rpb24odCl7dmFyIGU9VSh0Kz0iIix2KTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgZT1qKHQrPSIiLCExKTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfSx1dGNGb3JtYXQ6ZnVuY3Rpb24odCl7dmFyIGU9VSh0Kz0iIixUKTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfSx1dGNQYXJzZTpmdW5jdGlvbih0KXt2YXIgZT1qKHQrPSIiLCEwKTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfX19KSh0KSxCNT1ENS5mb3JtYXQsSDU9RDUudXRjRm9ybWF0fSkoe2RhdGVUaW1lOiIleCwgJVgiLGRhdGU6IiUtbS8lLWQvJVkiLHRpbWU6IiUtSTolTTolUyAlcCIscGVyaW9kczpbIkFNIiwiUE0iXSxkYXlzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxzaG9ydERheXM6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxtb250aHM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHNob3J0TW9udGhzOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl19KTt2YXIgcjQ9MzE1MzZlNjtmdW5jdGlvbiBvNCh0KXtyZXR1cm4gbmV3IERhdGUodCl9ZnVuY3Rpb24gYTQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBEYXRlPyt0OituZXcgRGF0ZSgrdCl9ZnVuY3Rpb24gczQodCxlLG4saSxyLG8sYSxzLGwpe3ZhciBjPU4yKEEyLG0yKSx1PWMuaW52ZXJ0LGg9Yy5kb21haW4sZD1sKCIuJUwiKSxwPWwoIjolUyIpLGY9bCgiJUk6JU0iKSxtPWwoIiVJICVwIiksZz1sKCIlYSAlZCIpLF89bCgiJWIgJWQiKSx5PWwoIiVCIiksdj1sKCIlWSIpLGI9W1thLDEsMWUzXSxbYSw1LDVlM10sW2EsMTUsMTVlM10sW2EsMzAsM2U0XSxbbywxLDZlNF0sW28sNSwzZTVdLFtvLDE1LDllNV0sW28sMzAsMThlNV0sW3IsMSwzNmU1XSxbciwzLDEwOGU1XSxbciw2LDIxNmU1XSxbciwxMiw0MzJlNV0sW2ksMSw4NjRlNV0sW2ksMiwxNzI4ZTVdLFtuLDEsNjA0OGU1XSxbZSwxLDI1OTJlNl0sW2UsMyw3Nzc2ZTZdLFt0LDEscjRdXTtmdW5jdGlvbiB4KHMpe3JldHVybihhKHMpPHM/ZDpvKHMpPHM/cDpyKHMpPHM/ZjppKHMpPHM/bTplKHMpPHM/bihzKTxzP2c6Xzp0KHMpPHM/eTp2KShzKX1mdW5jdGlvbiB3KGUsbixpLHIpe2lmKG51bGw9PWUmJihlPTEwKSwibnVtYmVyIj09dHlwZW9mIGUpe3ZhciBvPU1hdGguYWJzKGktbikvZSxhPVgxKChmdW5jdGlvbih0KXtyZXR1cm4gdFsyXX0pKS5yaWdodChiLG8pO2E9PT1iLmxlbmd0aD8ocj1uMChuL3I0LGkvcjQsZSksZT10KTphPyhyPShhPWJbby9iW2EtMV1bMl08YlthXVsyXS9vP2EtMTphXSlbMV0sZT1hWzBdKToocj1NYXRoLm1heChuMChuLGksZSksMSksZT1zKX1yZXR1cm4gbnVsbD09cj9lOmUuZXZlcnkocil9cmV0dXJuIGMuaW52ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgRGF0ZSh1KHQpKX0sYy5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/aCh1MC5jYWxsKHQsYTQpKTpoKCkubWFwKG80KX0sYy50aWNrcz1mdW5jdGlvbih0LGUpe3ZhciBuLGk9aCgpLHI9aVswXSxvPWlbaS5sZW5ndGgtMV0sYT1vPHI7cmV0dXJuIGEmJihuPXIscj1vLG89biksbj0obj13KHQscixvLGUpKT9uLnJhbmdlKHIsbysxKTpbXSxhP24ucmV2ZXJzZSgpOm59LGMudGlja0Zvcm1hdD1mdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT1lP3g6bChlKX0sYy5uaWNlPWZ1bmN0aW9uKHQsZSl7dmFyIG49aCgpO3JldHVybih0PXcodCxuWzBdLG5bbi5sZW5ndGgtMV0sZSkpP2goSzIobix0KSk6Y30sYy5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIFAyKGMsczQodCxlLG4saSxyLG8sYSxzLGwpKX0sY31mdW5jdGlvbiBsNCh0KXtyZXR1cm4gdC5tYXRjaCgvLns2fS9nKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiIjIit0fSkpfXZhciBjND1sNCgiMWY3N2I0ZmY3ZjBlMmNhMDJjZDYyNzI4OTQ2N2JkOGM1NjRiZTM3N2MyN2Y3ZjdmYmNiZDIyMTdiZWNmIiksdTQ9bDQoIjM5M2I3OTUyNTRhMzZiNmVjZjljOWVkZTYzNzkzOThjYTI1MmI1Y2Y2YmNlZGI5YzhjNmQzMWJkOWUzOWU3YmE1MmU3Y2I5NDg0M2MzOWFkNDk0YWQ2NjE2YmU3OTY5YzdiNDE3M2E1NTE5NGNlNmRiZGRlOWVkNiIpLGg0PWw0KCIzMTgyYmQ2YmFlZDY5ZWNhZTFjNmRiZWZlNjU1MGRmZDhkM2NmZGFlNmJmZGQwYTIzMWEzNTQ3NGM0NzZhMWQ5OWJjN2U5YzA3NTZiYjE5ZTlhYzhiY2JkZGNkYWRhZWI2MzYzNjM5Njk2OTZiZGJkYmRkOWQ5ZDkiKSxkND1sNCgiMWY3N2I0YWVjN2U4ZmY3ZjBlZmZiYjc4MmNhMDJjOThkZjhhZDYyNzI4ZmY5ODk2OTQ2N2JkYzViMGQ1OGM1NjRiYzQ5Yzk0ZTM3N2MyZjdiNmQyN2Y3ZjdmYzdjN2M3YmNiZDIyZGJkYjhkMTdiZWNmOWVkYWU1IikscDQ9TTIoYTIoMzAwLC41LDApLGEyKC0yNDAsLjUsMSkpLGY0PU0yKGEyKC0xMDAsLjc1LC4zNSksYTIoODAsMS41LC44KSksbTQ9TTIoYTIoMjYwLC43NSwuMzUpLGEyKDgwLDEuNSwuOCkpLGc0PWEyKCk7ZnVuY3Rpb24gXzQodCl7dmFyIGU9dC5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0W01hdGgubWF4KDAsTWF0aC5taW4oZS0xLE1hdGguZmxvb3IobiplKSkpXX19dmFyIHk0PV80KGw0KCI0NDAxNTQ0NDAyNTY0NTA0NTc0NTA1NTk0NjA3NWE0NjA4NWM0NjBhNWQ0NjBiNWU0NzBkNjA0NzBlNjE0NzEwNjM0NzExNjQ0NzEzNjU0ODE0Njc0ODE2Njg0ODE3Njk0ODE4NmE0ODFhNmM0ODFiNmQ0ODFjNmU0ODFkNmY0ODFmNzA0ODIwNzE0ODIxNzM0ODIzNzQ0ODI0NzU0ODI1NzY0ODI2Nzc0ODI4Nzg0ODI5Nzk0NzJhN2E0NzJjN2E0NzJkN2I0NzJlN2M0NzJmN2Q0NjMwN2U0NjMyN2U0NjMzN2Y0NjM0ODA0NTM1ODE0NTM3ODE0NTM4ODI0NDM5ODM0NDNhODM0NDNiODQ0MzNkODQ0MzNlODU0MjNmODU0MjQwODY0MjQxODY0MTQyODc0MTQ0ODc0MDQ1ODg0MDQ2ODgzZjQ3ODgzZjQ4ODkzZTQ5ODkzZTRhODkzZTRjOGEzZDRkOGEzZDRlOGEzYzRmOGEzYzUwOGIzYjUxOGIzYjUyOGIzYTUzOGIzYTU0OGMzOTU1OGMzOTU2OGMzODU4OGMzODU5OGMzNzVhOGMzNzViOGQzNjVjOGQzNjVkOGQzNTVlOGQzNTVmOGQzNDYwOGQzNDYxOGQzMzYyOGQzMzYzOGQzMjY0OGUzMjY1OGUzMTY2OGUzMTY3OGUzMTY4OGUzMDY5OGUzMDZhOGUyZjZiOGUyZjZjOGUyZTZkOGUyZTZlOGUyZTZmOGUyZDcwOGUyZDcxOGUyYzcxOGUyYzcyOGUyYzczOGUyYjc0OGUyYjc1OGUyYTc2OGUyYTc3OGUyYTc4OGUyOTc5OGUyOTdhOGUyOTdiOGUyODdjOGUyODdkOGUyNzdlOGUyNzdmOGUyNzgwOGUyNjgxOGUyNjgyOGUyNjgyOGUyNTgzOGUyNTg0OGUyNTg1OGUyNDg2OGUyNDg3OGUyMzg4OGUyMzg5OGUyMzhhOGQyMjhiOGQyMjhjOGQyMjhkOGQyMThlOGQyMThmOGQyMTkwOGQyMTkxOGMyMDkyOGMyMDkyOGMyMDkzOGMxZjk0OGMxZjk1OGIxZjk2OGIxZjk3OGIxZjk4OGIxZjk5OGExZjlhOGExZTliOGExZTljODkxZTlkODkxZjllODkxZjlmODgxZmEwODgxZmExODgxZmExODcxZmEyODcyMGEzODYyMGE0ODYyMWE1ODUyMWE2ODUyMmE3ODUyMmE4ODQyM2E5ODMyNGFhODMyNWFiODIyNWFjODIyNmFkODEyN2FkODEyOGFlODAyOWFmN2YyYWIwN2YyY2IxN2UyZGIyN2QyZWIzN2MyZmI0N2MzMWI1N2IzMmI2N2EzNGI2NzkzNWI3NzkzN2I4NzgzOGI5NzczYWJhNzYzYmJiNzUzZGJjNzQzZmJjNzM0MGJkNzI0MmJlNzE0NGJmNzA0NmMwNmY0OGMxNmU0YWMxNmQ0Y2MyNmM0ZWMzNmI1MGM0NmE1MmM1Njk1NGM1Njg1NmM2Njc1OGM3NjU1YWM4NjQ1Y2M4NjM1ZWM5NjI2MGNhNjA2M2NiNWY2NWNiNWU2N2NjNWM2OWNkNWI2Y2NkNWE2ZWNlNTg3MGNmNTc3M2QwNTY3NWQwNTQ3N2QxNTM3YWQxNTE3Y2QyNTA3ZmQzNGU4MWQzNGQ4NGQ0NGI4NmQ1NDk4OWQ1NDg4YmQ2NDY4ZWQ2NDU5MGQ3NDM5M2Q3NDE5NWQ4NDA5OGQ4M2U5YmQ5M2M5ZGQ5M2JhMGRhMzlhMmRhMzdhNWRiMzZhOGRiMzRhYWRjMzJhZGRjMzBiMGRkMmZiMmRkMmRiNWRlMmJiOGRlMjliYWRlMjhiZGRmMjZjMGRmMjVjMmRmMjNjNWUwMjFjOGUwMjBjYWUxMWZjZGUxMWRkMGUxMWNkMmUyMWJkNWUyMWFkOGUyMTlkYWUzMTlkZGUzMThkZmUzMThlMmU0MThlNWU0MTllN2U0MTllYWU1MWFlY2U1MWJlZmU1MWNmMWU1MWRmNGU2MWVmNmU2MjBmOGU2MjFmYmU3MjNmZGU3MjUiKSksdjQ9XzQobDQoIjAwMDAwNDAxMDAwNTAxMDEwNjAxMDEwODAyMDEwOTAyMDIwYjAyMDIwZDAzMDMwZjAzMDMxMjA0MDQxNDA1MDQxNjA2MDUxODA2MDUxYTA3MDYxYzA4MDcxZTA5MDcyMDBhMDgyMjBiMDkyNDBjMDkyNjBkMGEyOTBlMGIyYjEwMGIyZDExMGMyZjEyMGQzMTEzMGQzNDE0MGUzNjE1MGUzODE2MGYzYjE4MGYzZDE5MTAzZjFhMTA0MjFjMTA0NDFkMTE0NzFlMTE0OTIwMTE0YjIxMTE0ZTIyMTE1MDI0MTI1MzI1MTI1NTI3MTI1ODI5MTE1YTJhMTE1YzJjMTE1ZjJkMTE2MTJmMTE2MzMxMTE2NTMzMTA2NzM0MTA2OTM2MTA2YjM4MTA2YzM5MGY2ZTNiMGY3MDNkMGY3MTNmMGY3MjQwMGY3NDQyMGY3NTQ0MGY3NjQ1MTA3NzQ3MTA3ODQ5MTA3ODRhMTA3OTRjMTE3YTRlMTE3YjRmMTI3YjUxMTI3YzUyMTM3YzU0MTM3ZDU2MTQ3ZDU3MTU3ZTU5MTU3ZTVhMTY3ZTVjMTY3ZjVkMTc3ZjVmMTg3ZjYwMTg4MDYyMTk4MDY0MWE4MDY1MWE4MDY3MWI4MDY4MWM4MTZhMWM4MTZiMWQ4MTZkMWQ4MTZlMWU4MTcwMWY4MTcyMWY4MTczMjA4MTc1MjE4MTc2MjE4MTc4MjI4MTc5MjI4MjdiMjM4MjdjMjM4MjdlMjQ4MjgwMjU4MjgxMjU4MTgzMjY4MTg0MjY4MTg2Mjc4MTg4Mjc4MTg5Mjg4MThiMjk4MThjMjk4MThlMmE4MTkwMmE4MTkxMmI4MTkzMmI4MDk0MmM4MDk2MmM4MDk4MmQ4MDk5MmQ4MDliMmU3ZjljMmU3ZjllMmY3ZmEwMmY3ZmExMzA3ZWEzMzA3ZWE1MzE3ZWE2MzE3ZGE4MzI3ZGFhMzM3ZGFiMzM3Y2FkMzQ3Y2FlMzQ3YmIwMzU3YmIyMzU3YmIzMzY3YWI1MzY3YWI3Mzc3OWI4Mzc3OWJhMzg3OGJjMzk3OGJkMzk3N2JmM2E3N2MwM2E3NmMyM2I3NWM0M2M3NWM1M2M3NGM3M2Q3M2M4M2U3M2NhM2U3MmNjM2Y3MWNkNDA3MWNmNDA3MGQwNDE2ZmQyNDI2ZmQzNDM2ZWQ1NDQ2ZGQ2NDU2Y2Q4NDU2Y2Q5NDY2YmRiNDc2YWRjNDg2OWRlNDk2OGRmNGE2OGUwNGM2N2UyNGQ2NmUzNGU2NWU0NGY2NGU1NTA2NGU3NTI2M2U4NTM2MmU5NTQ2MmVhNTY2MWViNTc2MGVjNTg2MGVkNWE1ZmVlNWI1ZWVmNWQ1ZWYwNWY1ZWYxNjA1ZGYyNjI1ZGYyNjQ1Y2YzNjU1Y2Y0Njc1Y2Y0Njk1Y2Y1NmI1Y2Y2NmM1Y2Y2NmU1Y2Y3NzA1Y2Y3NzI1Y2Y4NzQ1Y2Y4NzY1Y2Y5Nzg1ZGY5Nzk1ZGY5N2I1ZGZhN2Q1ZWZhN2Y1ZWZhODE1ZmZiODM1ZmZiODU2MGZiODc2MWZjODk2MWZjOGE2MmZjOGM2M2ZjOGU2NGZjOTA2NWZkOTI2NmZkOTQ2N2ZkOTY2OGZkOTg2OWZkOWE2YWZkOWI2YmZlOWQ2Y2ZlOWY2ZGZlYTE2ZWZlYTM2ZmZlYTU3MWZlYTc3MmZlYTk3M2ZlYWE3NGZlYWM3NmZlYWU3N2ZlYjA3OGZlYjI3YWZlYjQ3YmZlYjY3Y2ZlYjc3ZWZlYjk3ZmZlYmI4MWZlYmQ4MmZlYmY4NGZlYzE4NWZlYzI4N2ZlYzQ4OGZlYzY4YWZlYzg4Y2ZlY2E4ZGZlY2M4ZmZlY2Q5MGZlY2Y5MmZlZDE5NGZlZDM5NWZlZDU5N2ZlZDc5OWZlZDg5YWZkZGE5Y2ZkZGM5ZWZkZGVhMGZkZTBhMWZkZTJhM2ZkZTNhNWZkZTVhN2ZkZTdhOWZkZTlhYWZkZWJhY2ZjZWNhZWZjZWViMGZjZjBiMmZjZjJiNGZjZjRiNmZjZjZiOGZjZjdiOWZjZjliYmZjZmJiZGZjZmRiZiIpKSxiND1fNChsNCgiMDAwMDA0MDEwMDA1MDEwMTA2MDEwMTA4MDIwMTBhMDIwMjBjMDIwMjBlMDMwMjEwMDQwMzEyMDQwMzE0MDUwNDE3MDYwNDE5MDcwNTFiMDgwNTFkMDkwNjFmMGEwNzIyMGIwNzI0MGMwODI2MGQwODI5MGUwOTJiMTAwOTJkMTEwYTMwMTIwYTMyMTQwYjM0MTUwYjM3MTYwYjM5MTgwYzNjMTkwYzNlMWIwYzQxMWMwYzQzMWUwYzQ1MWYwYzQ4MjEwYzRhMjMwYzRjMjQwYzRmMjYwYzUxMjgwYjUzMjkwYjU1MmIwYjU3MmQwYjU5MmYwYTViMzEwYTVjMzIwYTVlMzQwYTVmMzYwOTYxMzgwOTYyMzkwOTYzM2IwOTY0M2QwOTY1M2UwOTY2NDAwYTY3NDIwYTY4NDQwYTY4NDUwYTY5NDcwYjZhNDkwYjZhNGEwYzZiNGMwYzZiNGQwZDZjNGYwZDZjNTEwZTZjNTIwZTZkNTQwZjZkNTUwZjZkNTcxMDZlNTkxMDZlNWExMTZlNWMxMjZlNWQxMjZlNWYxMzZlNjExMzZlNjIxNDZlNjQxNTZlNjUxNTZlNjcxNjZlNjkxNjZlNmExNzZlNmMxODZlNmQxODZlNmYxOTZlNzExOTZlNzIxYTZlNzQxYTZlNzUxYjZlNzcxYzZkNzgxYzZkN2ExZDZkN2MxZDZkN2QxZTZkN2YxZTZjODAxZjZjODIyMDZjODQyMDZiODUyMTZiODcyMTZiODgyMjZhOGEyMjZhOGMyMzY5OGQyMzY5OGYyNDY5OTAyNTY4OTIyNTY4OTMyNjY3OTUyNjY3OTcyNzY2OTgyNzY2OWEyODY1OWIyOTY0OWQyOTY0OWYyYTYzYTAyYTYzYTIyYjYyYTMyYzYxYTUyYzYwYTYyZDYwYTgyZTVmYTkyZTVlYWIyZjVlYWQzMDVkYWUzMDVjYjAzMTViYjEzMjVhYjMzMjVhYjQzMzU5YjYzNDU4YjczNTU3YjkzNTU2YmEzNjU1YmMzNzU0YmQzODUzYmYzOTUyYzAzYTUxYzEzYTUwYzMzYjRmYzQzYzRlYzYzZDRkYzczZTRjYzgzZjRiY2E0MDRhY2I0MTQ5Y2M0MjQ4Y2U0MzQ3Y2Y0NDQ2ZDA0NTQ1ZDI0NjQ0ZDM0NzQzZDQ0ODQyZDU0YTQxZDc0YjNmZDg0YzNlZDk0ZDNkZGE0ZTNjZGI1MDNiZGQ1MTNhZGU1MjM4ZGY1MzM3ZTA1NTM2ZTE1NjM1ZTI1NzM0ZTM1OTMzZTQ1YTMxZTU1YzMwZTY1ZDJmZTc1ZTJlZTg2MDJkZTk2MTJiZWE2MzJhZWI2NDI5ZWI2NjI4ZWM2NzI2ZWQ2OTI1ZWU2YTI0ZWY2YzIzZWY2ZTIxZjA2ZjIwZjE3MTFmZjE3MzFkZjI3NDFjZjM3NjFiZjM3ODE5ZjQ3OTE4ZjU3YjE3ZjU3ZDE1ZjY3ZTE0ZjY4MDEzZjc4MjEyZjc4NDEwZjg4NTBmZjg4NzBlZjg4OTBjZjk4YjBiZjk4YzBhZjk4ZTA5ZmE5MDA4ZmE5MjA3ZmE5NDA3ZmI5NjA2ZmI5NzA2ZmI5OTA2ZmI5YjA2ZmI5ZDA3ZmM5ZjA3ZmNhMTA4ZmNhMzA5ZmNhNTBhZmNhNjBjZmNhODBkZmNhYTBmZmNhYzExZmNhZTEyZmNiMDE0ZmNiMjE2ZmNiNDE4ZmJiNjFhZmJiODFkZmJiYTFmZmJiYzIxZmJiZTIzZmFjMDI2ZmFjMjI4ZmFjNDJhZmFjNjJkZjljNzJmZjljOTMyZjljYjM1ZjhjZDM3ZjhjZjNhZjdkMTNkZjdkMzQwZjZkNTQzZjZkNzQ2ZjVkOTQ5ZjVkYjRjZjRkZDRmZjRkZjUzZjRlMTU2ZjNlMzVhZjNlNTVkZjJlNjYxZjJlODY1ZjJlYTY5ZjFlYzZkZjFlZDcxZjFlZjc1ZjFmMTc5ZjJmMjdkZjJmNDgyZjNmNTg2ZjNmNjhhZjRmODhlZjVmOTkyZjZmYTk2ZjhmYjlhZjlmYzlkZmFmZGExZmNmZmE0IikpLHg0PV80KGw0KCIwZDA4ODcxMDA3ODgxMzA3ODkxNjA3OGExOTA2OGMxYjA2OGQxZDA2OGUyMDA2OGYyMjA2OTAyNDA2OTEyNjA1OTEyODA1OTIyYTA1OTMyYzA1OTQyZTA1OTUyZjA1OTYzMTA1OTczMzA1OTczNTA0OTgzNzA0OTkzODA0OWEzYTA0OWEzYzA0OWIzZTA0OWMzZjA0OWM0MTA0OWQ0MzAzOWU0NDAzOWU0NjAzOWY0ODAzOWY0OTAzYTA0YjAzYTE0YzAyYTE0ZTAyYTI1MDAyYTI1MTAyYTM1MzAyYTM1NTAyYTQ1NjAxYTQ1ODAxYTQ1OTAxYTU1YjAxYTU1YzAxYTY1ZTAxYTY2MDAxYTY2MTAwYTc2MzAwYTc2NDAwYTc2NjAwYTc2NzAwYTg2OTAwYTg2YTAwYTg2YzAwYTg2ZTAwYTg2ZjAwYTg3MTAwYTg3MjAxYTg3NDAxYTg3NTAxYTg3NzAxYTg3ODAxYTg3YTAyYTg3YjAyYTg3ZDAzYTg3ZTAzYTg4MDA0YTg4MTA0YTc4MzA1YTc4NDA1YTc4NjA2YTY4NzA3YTY4ODA4YTY4YTA5YTU4YjBhYTU4ZDBiYTU4ZTBjYTQ4ZjBkYTQ5MTBlYTM5MjBmYTM5NDEwYTI5NTExYTE5NjEzYTE5ODE0YTA5OTE1OWY5YTE2OWY5YzE3OWU5ZDE4OWQ5ZTE5OWRhMDFhOWNhMTFiOWJhMjFkOWFhMzFlOWFhNTFmOTlhNjIwOThhNzIxOTdhODIyOTZhYTIzOTVhYjI0OTRhYzI2OTRhZDI3OTNhZTI4OTJiMDI5OTFiMTJhOTBiMjJiOGZiMzJjOGViNDJlOGRiNTJmOGNiNjMwOGJiNzMxOGFiODMyODliYTMzODhiYjM0ODhiYzM1ODdiZDM3ODZiZTM4ODViZjM5ODRjMDNhODNjMTNiODJjMjNjODFjMzNkODBjNDNlN2ZjNTQwN2VjNjQxN2RjNzQyN2NjODQzN2JjOTQ0N2FjYTQ1N2FjYjQ2NzljYzQ3NzhjYzQ5NzdjZDRhNzZjZTRiNzVjZjRjNzRkMDRkNzNkMTRlNzJkMjRmNzFkMzUxNzFkNDUyNzBkNTUzNmZkNTU0NmVkNjU1NmRkNzU2NmNkODU3NmJkOTU4NmFkYTVhNmFkYTViNjlkYjVjNjhkYzVkNjdkZDVlNjZkZTVmNjVkZTYxNjRkZjYyNjNlMDYzNjNlMTY0NjJlMjY1NjFlMjY2NjBlMzY4NWZlNDY5NWVlNTZhNWRlNTZiNWRlNjZjNWNlNzZlNWJlNzZmNWFlODcwNTllOTcxNThlOTcyNTdlYTc0NTdlYjc1NTZlYjc2NTVlYzc3NTRlZDc5NTNlZDdhNTJlZTdiNTFlZjdjNTFlZjdlNTBmMDdmNGZmMDgwNGVmMTgxNGRmMTgzNGNmMjg0NGJmMzg1NGJmMzg3NGFmNDg4NDlmNDg5NDhmNThiNDdmNThjNDZmNjhkNDVmNjhmNDRmNzkwNDRmNzkxNDNmNzkzNDJmODk0NDFmODk1NDBmOTk3M2ZmOTk4M2VmOTlhM2VmYTliM2RmYTljM2NmYTllM2JmYjlmM2FmYmExMzlmYmEyMzhmY2EzMzhmY2E1MzdmY2E2MzZmY2E4MzVmY2E5MzRmZGFiMzNmZGFjMzNmZGFlMzJmZGFmMzFmZGIxMzBmZGIyMmZmZGI0MmZmZGI1MmVmZWI3MmRmZWI4MmNmZWJhMmNmZWJiMmJmZWJkMmFmZWJlMmFmZWMwMjlmZGMyMjlmZGMzMjhmZGM1MjdmZGM2MjdmZGM4MjdmZGNhMjZmZGNiMjZmY2NkMjVmY2NlMjVmY2QwMjVmY2QyMjVmYmQzMjRmYmQ1MjRmYmQ3MjRmYWQ4MjRmYWRhMjRmOWRjMjRmOWRkMjVmOGRmMjVmOGUxMjVmN2UyMjVmN2U0MjVmNmU2MjZmNmU4MjZmNWU5MjZmNWViMjdmNGVkMjdmM2VlMjdmM2YwMjdmMmYyMjdmMWY0MjZmMWY1MjVmMGY3MjRmMGY5MjEiKSksdzQ9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLFM0PXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDp3NCx4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9O2Z1bmN0aW9uIE00KHQpe3ZhciBlPXQrPSIiLG49ZS5pbmRleE9mKCI6Iik7cmV0dXJuIG4+PTAmJiJ4bWxucyIhPT0oZT10LnNsaWNlKDAsbikpJiYodD10LnNsaWNlKG4rMSkpLFM0Lmhhc093blByb3BlcnR5KGUpP3tzcGFjZTpTNFtlXSxsb2NhbDp0fTp0fWZ1bmN0aW9uIEU0KHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMub3duZXJEb2N1bWVudCxuPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiBuPT09dzQmJmUuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PXc0P2UuY3JlYXRlRWxlbWVudCh0KTplLmNyZWF0ZUVsZW1lbnROUyhuLHQpfX1mdW5jdGlvbiBUNCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyh0LnNwYWNlLHQubG9jYWwpfX1mdW5jdGlvbiBDNCh0KXt2YXIgZT1NNCh0KTtyZXR1cm4oZS5sb2NhbD9UNDpFNCkoZSl9ZnVuY3Rpb24gQTQoKXt9ZnVuY3Rpb24gazQodCl7cmV0dXJuIG51bGw9PXQ/QTQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKHQpfX1mdW5jdGlvbiBMNCgpe3JldHVybltdfWZ1bmN0aW9uIFA0KHQpe3JldHVybiBudWxsPT10P0w0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbCh0KX19dmFyIE40PWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoZXModCl9fTtpZigidW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50KXt2YXIgSTQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O2lmKCFJNC5tYXRjaGVzKXt2YXIgTzQ9STQud2Via2l0TWF0Y2hlc1NlbGVjdG9yfHxJNC5tc01hdGNoZXNTZWxlY3Rvcnx8STQubW96TWF0Y2hlc1NlbGVjdG9yfHxJNC5vTWF0Y2hlc1NlbGVjdG9yO040PWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBPNC5jYWxsKHRoaXMsdCl9fX19dmFyIFI0PU40O2Z1bmN0aW9uIHo0KHQpe3JldHVybiBuZXcgQXJyYXkodC5sZW5ndGgpfWZ1bmN0aW9uIEQ0KHQsZSl7dGhpcy5vd25lckRvY3VtZW50PXQub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST10Lm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PXQsdGhpcy5fX2RhdGFfXz1lfWZ1bmN0aW9uIEI0KHQsZSxuLGkscixvKXtmb3IodmFyIGEscz0wLGw9ZS5sZW5ndGgsYz1vLmxlbmd0aDtzPGM7KytzKShhPWVbc10pPyhhLl9fZGF0YV9fPW9bc10saVtzXT1hKTpuW3NdPW5ldyBENCh0LG9bc10pO2Zvcig7czxsOysrcykoYT1lW3NdKSYmKHJbc109YSl9ZnVuY3Rpb24gSDQodCxlLG4saSxyLG8sYSl7dmFyIHMsbCxjLHU9e30saD1lLmxlbmd0aCxkPW8ubGVuZ3RoLHA9bmV3IEFycmF5KGgpO2ZvcihzPTA7czxoOysrcykobD1lW3NdKSYmKHBbc109Yz0iJCIrYS5jYWxsKGwsbC5fX2RhdGFfXyxzLGUpLGMgaW4gdT9yW3NdPWw6dVtjXT1sKTtmb3Iocz0wO3M8ZDsrK3MpKGw9dVtjPSIkIithLmNhbGwodCxvW3NdLHMsbyldKT8oaVtzXT1sLGwuX19kYXRhX189b1tzXSx1W2NdPW51bGwpOm5bc109bmV3IEQ0KHQsb1tzXSk7Zm9yKHM9MDtzPGg7KytzKShsPWVbc10pJiZ1W3Bbc11dPT09bCYmKHJbc109bCl9ZnVuY3Rpb24gRjQodCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59ZnVuY3Rpb24gVjQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9fWZ1bmN0aW9uIFU0KHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKX19ZnVuY3Rpb24gajQodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZSh0LGUpfX1mdW5jdGlvbiBHNCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsLGUpfX1mdW5jdGlvbiBXNCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PW4/dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCk6dGhpcy5zZXRBdHRyaWJ1dGUodCxuKX19ZnVuY3Rpb24gcTQodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1uP3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxuKX19ZnVuY3Rpb24gWTQodCl7cmV0dXJuIHQub3duZXJEb2N1bWVudCYmdC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHx0LmRvY3VtZW50JiZ0fHx0LmRlZmF1bHRWaWV3fWZ1bmN0aW9uIFg0KHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCl9fWZ1bmN0aW9uICQ0KHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQsZSxuKX19ZnVuY3Rpb24gSzQodCxlLG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciBpPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PWk/dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KTp0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQsaSxuKX19ZnVuY3Rpb24gWjQodCxlKXtyZXR1cm4gdC5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKGUpfHxZNCh0KS5nZXRDb21wdXRlZFN0eWxlKHQsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShlKX1mdW5jdGlvbiBKNCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtkZWxldGUgdGhpc1t0XX19ZnVuY3Rpb24gUTQodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzW3RdPWV9fWZ1bmN0aW9uIHQ2KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09bj9kZWxldGUgdGhpc1t0XTp0aGlzW3RdPW59fWZ1bmN0aW9uIGU2KHQpe3JldHVybiB0LnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiBuNih0KXtyZXR1cm4gdC5jbGFzc0xpc3R8fG5ldyBpNih0KX1mdW5jdGlvbiBpNih0KXt0aGlzLl9ub2RlPXQsdGhpcy5fbmFtZXM9ZTYodC5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX1mdW5jdGlvbiByNih0LGUpe2Zvcih2YXIgbj1uNih0KSxpPS0xLHI9ZS5sZW5ndGg7KytpPHI7KW4uYWRkKGVbaV0pfWZ1bmN0aW9uIG82KHQsZSl7Zm9yKHZhciBuPW42KHQpLGk9LTEscj1lLmxlbmd0aDsrK2k8cjspbi5yZW1vdmUoZVtpXSl9ZnVuY3Rpb24gYTYodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cjYodGhpcyx0KX19ZnVuY3Rpb24gczYodCl7cmV0dXJuIGZ1bmN0aW9uKCl7bzYodGhpcyx0KX19ZnVuY3Rpb24gbDYodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXsoZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk/cjY6bzYpKHRoaXMsdCl9fWZ1bmN0aW9uIGM2KCl7dGhpcy50ZXh0Q29udGVudD0iIn1mdW5jdGlvbiB1Nih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PXR9fWZ1bmN0aW9uIGg2KHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMudGV4dENvbnRlbnQ9bnVsbD09ZT8iIjplfX1mdW5jdGlvbiBkNigpe3RoaXMuaW5uZXJIVE1MPSIifWZ1bmN0aW9uIHA2KHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPXR9fWZ1bmN0aW9uIGY2KHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPW51bGw9PWU/IiI6ZX19ZnVuY3Rpb24gbTYoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gZzYoKXt0aGlzLnByZXZpb3VzU2libGluZyYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLHRoaXMucGFyZW50Tm9kZS5maXJzdENoaWxkKX1mdW5jdGlvbiBfNigpe3JldHVybiBudWxsfWZ1bmN0aW9uIHk2KCl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlO3QmJnQucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gdjYoKXtyZXR1cm4gdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLmNsb25lTm9kZSghMSksdGhpcy5uZXh0U2libGluZyl9ZnVuY3Rpb24gYjYoKXtyZXR1cm4gdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLmNsb25lTm9kZSghMCksdGhpcy5uZXh0U2libGluZyl9RDQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpENCxhcHBlbmRDaGlsZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZSh0LHRoaXMuX25leHQpfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZSh0LGUpfSxxdWVyeVNlbGVjdG9yOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3Rvcih0KX0scXVlcnlTZWxlY3RvckFsbDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwodCl9fSxpNi5wcm90b3R5cGU9e2FkZDpmdW5jdGlvbih0KXt0aGlzLl9uYW1lcy5pbmRleE9mKHQpPDAmJih0aGlzLl9uYW1lcy5wdXNoKHQpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LHJlbW92ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9uYW1lcy5pbmRleE9mKHQpO2U+PTAmJih0aGlzLl9uYW1lcy5zcGxpY2UoZSwxKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxjb250YWluczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZih0KT49MH19O3ZhciB4Nj17fSx3Nj1udWxsO2Z1bmN0aW9uIFM2KHQsZSxuKXtyZXR1cm4gdD1NNih0LGUsbiksZnVuY3Rpb24oZSl7dmFyIG49ZS5yZWxhdGVkVGFyZ2V0O24mJihuPT09dGhpc3x8OCZuLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHRoaXMpKXx8dC5jYWxsKHRoaXMsZSl9fWZ1bmN0aW9uIE02KHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24oaSl7dmFyIHI9dzY7dzY9aTt0cnl7dC5jYWxsKHRoaXMsdGhpcy5fX2RhdGFfXyxlLG4pfWZpbmFsbHl7dzY9cn19fWZ1bmN0aW9uIEU2KHQpe3JldHVybiB0LnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBlPSIiLG49dC5pbmRleE9mKCIuIik7cmV0dXJuIG4+PTAmJihlPXQuc2xpY2UobisxKSx0PXQuc2xpY2UoMCxuKSkse3R5cGU6dCxuYW1lOmV9fSkpfWZ1bmN0aW9uIFQ2KHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMuX19vbjtpZihlKXtmb3IodmFyIG4saT0wLHI9LTEsbz1lLmxlbmd0aDtpPG87KytpKW49ZVtpXSx0LnR5cGUmJm4udHlwZSE9PXQudHlwZXx8bi5uYW1lIT09dC5uYW1lP2VbKytyXT1uOnRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihuLnR5cGUsbi5saXN0ZW5lcixuLmNhcHR1cmUpOysrcj9lLmxlbmd0aD1yOmRlbGV0ZSB0aGlzLl9fb259fX1mdW5jdGlvbiBDNih0LGUsbil7dmFyIGk9eDYuaGFzT3duUHJvcGVydHkodC50eXBlKT9TNjpNNjtyZXR1cm4gZnVuY3Rpb24ocixvLGEpe3ZhciBzLGw9dGhpcy5fX29uLGM9aShlLG8sYSk7aWYobClmb3IodmFyIHU9MCxoPWwubGVuZ3RoO3U8aDsrK3UpaWYoKHM9bFt1XSkudHlwZT09PXQudHlwZSYmcy5uYW1lPT09dC5uYW1lKXJldHVybiB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIocy50eXBlLHMubGlzdGVuZXIscy5jYXB0dXJlKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIocy50eXBlLHMubGlzdGVuZXI9YyxzLmNhcHR1cmU9biksdm9pZChzLnZhbHVlPWUpO3RoaXMuYWRkRXZlbnRMaXN0ZW5lcih0LnR5cGUsYyxuKSxzPXt0eXBlOnQudHlwZSxuYW1lOnQubmFtZSx2YWx1ZTplLGxpc3RlbmVyOmMsY2FwdHVyZTpufSxsP2wucHVzaChzKTp0aGlzLl9fb249W3NdfX1mdW5jdGlvbiBBNih0LGUsbil7dmFyIGk9WTQodCkscj1pLkN1c3RvbUV2ZW50OyJmdW5jdGlvbiI9PXR5cGVvZiByP3I9bmV3IHIoZSxuKToocj1pLmRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpLG4/KHIuaW5pdEV2ZW50KGUsbi5idWJibGVzLG4uY2FuY2VsYWJsZSksci5kZXRhaWw9bi5kZXRhaWwpOnIuaW5pdEV2ZW50KGUsITEsITEpKSx0LmRpc3BhdGNoRXZlbnQocil9ZnVuY3Rpb24gazYodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gQTYodGhpcyx0LGUpfX1mdW5jdGlvbiBMNih0LGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBBNih0aGlzLHQsZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX0idW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50JiYoIm9ubW91c2VlbnRlciJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnR8fCh4Nj17bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9KSk7dmFyIFA2PVtudWxsXTtmdW5jdGlvbiBONih0LGUpe3RoaXMuX2dyb3Vwcz10LHRoaXMuX3BhcmVudHM9ZX1mdW5jdGlvbiBJNigpe3JldHVybiBuZXcgTjYoW1tkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXSxQNil9ZnVuY3Rpb24gTzYodCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P25ldyBONihbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodCldXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IE42KFtbdF1dLFA2KX1ONi5wcm90b3R5cGU9STYucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpONixzZWxlY3Q6ZnVuY3Rpb24gUjYodCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PWs0KHQpKTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49ZS5sZW5ndGgsaT1uZXcgQXJyYXkobikscj0wO3I8bjsrK3IpZm9yKHZhciBvLGEscz1lW3JdLGw9cy5sZW5ndGgsYz1pW3JdPW5ldyBBcnJheShsKSx1PTA7dTxsOysrdSkobz1zW3VdKSYmKGE9dC5jYWxsKG8sby5fX2RhdGFfXyx1LHMpKSYmKCJfX2RhdGFfXyJpbiBvJiYoYS5fX2RhdGFfXz1vLl9fZGF0YV9fKSxjW3VdPWEpO3JldHVybiBuZXcgTjYoaSx0aGlzLl9wYXJlbnRzKX0sc2VsZWN0QWxsOmZ1bmN0aW9uIHo2KHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1QNCh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLGk9W10scj1bXSxvPTA7bzxuOysrbylmb3IodmFyIGEscz1lW29dLGw9cy5sZW5ndGgsYz0wO2M8bDsrK2MpKGE9c1tjXSkmJihpLnB1c2godC5jYWxsKGEsYS5fX2RhdGFfXyxjLHMpKSxyLnB1c2goYSkpO3JldHVybiBuZXcgTjYoaSxyKX0sZmlsdGVyOmZ1bmN0aW9uIEQ2KHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1SNCh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLGk9bmV3IEFycmF5KG4pLHI9MDtyPG47KytyKWZvcih2YXIgbyxhPWVbcl0scz1hLmxlbmd0aCxsPWlbcl09W10sYz0wO2M8czsrK2MpKG89YVtjXSkmJnQuY2FsbChvLG8uX19kYXRhX18sYyxhKSYmbC5wdXNoKG8pO3JldHVybiBuZXcgTjYoaSx0aGlzLl9wYXJlbnRzKX0sZGF0YTpmdW5jdGlvbiBCNih0LGUpe2lmKCF0KXJldHVybiBmPW5ldyBBcnJheSh0aGlzLnNpemUoKSksdT0tMSx0aGlzLmVhY2goKGZ1bmN0aW9uKHQpe2ZbKyt1XT10fSkpLGY7dmFyIG49ZT9INDpCNCxpPXRoaXMuX3BhcmVudHMscj10aGlzLl9ncm91cHM7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PShmdW5jdGlvbiBvKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0pKHQpKTtmb3IodmFyIGE9ci5sZW5ndGgscz1uZXcgQXJyYXkoYSksbD1uZXcgQXJyYXkoYSksYz1uZXcgQXJyYXkoYSksdT0wO3U8YTsrK3Upe3ZhciBoPWlbdV0sZD1yW3VdLHA9ZC5sZW5ndGgsZj10LmNhbGwoaCxoJiZoLl9fZGF0YV9fLHUsaSksbT1mLmxlbmd0aCxnPWxbdV09bmV3IEFycmF5KG0pLF89c1t1XT1uZXcgQXJyYXkobSk7bihoLGQsZyxfLGNbdV09bmV3IEFycmF5KHApLGYsZSk7Zm9yKHZhciB5LHYsYj0wLHg9MDtiPG07KytiKWlmKHk9Z1tiXSl7Zm9yKGI+PXgmJih4PWIrMSk7ISh2PV9beF0pJiYrK3g8bTspO3kuX25leHQ9dnx8bnVsbH19cmV0dXJuKHM9bmV3IE42KHMsaSkpLl9lbnRlcj1sLHMuX2V4aXQ9YyxzfSxlbnRlcjpmdW5jdGlvbiBINigpe3JldHVybiBuZXcgTjYodGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAoejQpLHRoaXMuX3BhcmVudHMpfSxleGl0OmZ1bmN0aW9uIEY2KCl7cmV0dXJuIG5ldyBONih0aGlzLl9leGl0fHx0aGlzLl9ncm91cHMubWFwKHo0KSx0aGlzLl9wYXJlbnRzKX0sbWVyZ2U6ZnVuY3Rpb24gVjYodCl7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPXQuX2dyb3VwcyxpPWUubGVuZ3RoLHI9TWF0aC5taW4oaSxuLmxlbmd0aCksbz1uZXcgQXJyYXkoaSksYT0wO2E8cjsrK2EpZm9yKHZhciBzLGw9ZVthXSxjPW5bYV0sdT1sLmxlbmd0aCxoPW9bYV09bmV3IEFycmF5KHUpLGQ9MDtkPHU7KytkKShzPWxbZF18fGNbZF0pJiYoaFtkXT1zKTtmb3IoO2E8aTsrK2Epb1thXT1lW2FdO3JldHVybiBuZXcgTjYobyx0aGlzLl9wYXJlbnRzKX0sb3JkZXI6ZnVuY3Rpb24gVTYoKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9LTEsbj10Lmxlbmd0aDsrK2U8bjspZm9yKHZhciBpLHI9dFtlXSxvPXIubGVuZ3RoLTEsYT1yW29dOy0tbz49MDspKGk9cltvXSkmJihhJiZhIT09aS5uZXh0U2libGluZyYmYS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShpLGEpLGE9aSk7cmV0dXJuIHRoaXN9LHNvcnQ6ZnVuY3Rpb24gajYodCl7ZnVuY3Rpb24gZShlLG4pe3JldHVybiBlJiZuP3QoZS5fX2RhdGFfXyxuLl9fZGF0YV9fKTohZS0hbn10fHwodD1GNCk7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLHI9bmV3IEFycmF5KGkpLG89MDtvPGk7KytvKXtmb3IodmFyIGEscz1uW29dLGw9cy5sZW5ndGgsYz1yW29dPW5ldyBBcnJheShsKSx1PTA7dTxsOysrdSkoYT1zW3VdKSYmKGNbdV09YSk7Yy5zb3J0KGUpfXJldHVybiBuZXcgTjYocix0aGlzLl9wYXJlbnRzKS5vcmRlcigpfSxjYWxsOmZ1bmN0aW9uIEc2KCl7dmFyIHQ9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyx0LmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfSxub2RlczpmdW5jdGlvbiBXNigpe3ZhciB0PW5ldyBBcnJheSh0aGlzLnNpemUoKSksZT0tMTtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpe3RbKytlXT10aGlzfSkpLHR9LG5vZGU6ZnVuY3Rpb24gcTYoKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9MCxuPXQubGVuZ3RoO2U8bjsrK2UpZm9yKHZhciBpPXRbZV0scj0wLG89aS5sZW5ndGg7cjxvOysrcil7dmFyIGE9aVtyXTtpZihhKXJldHVybiBhfXJldHVybiBudWxsfSxzaXplOmZ1bmN0aW9uIFk2KCl7dmFyIHQ9MDtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpeysrdH0pKSx0fSxlbXB0eTpmdW5jdGlvbiBYNigpe3JldHVybiF0aGlzLm5vZGUoKX0sZWFjaDpmdW5jdGlvbiAkNih0KXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49MCxpPWUubGVuZ3RoO248aTsrK24pZm9yKHZhciByLG89ZVtuXSxhPTAscz1vLmxlbmd0aDthPHM7KythKShyPW9bYV0pJiZ0LmNhbGwocixyLl9fZGF0YV9fLGEsbyk7cmV0dXJuIHRoaXN9LGF0dHI6ZnVuY3Rpb24gSzYodCxlKXt2YXIgbj1NNCh0KTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBpPXRoaXMubm9kZSgpO3JldHVybiBuLmxvY2FsP2kuZ2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKTppLmdldEF0dHJpYnV0ZShuKX1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT1lP24ubG9jYWw/VTQ6VjQ6ImZ1bmN0aW9uIj09dHlwZW9mIGU/bi5sb2NhbD9xNDpXNDpuLmxvY2FsP0c0Omo0KShuLGUpKX0sc3R5bGU6ZnVuY3Rpb24gWjYodCxlLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChudWxsPT1lP1g0OiJmdW5jdGlvbiI9PXR5cGVvZiBlP0s0OiQ0KSh0LGUsbnVsbD09bj8iIjpuKSk6WjQodGhpcy5ub2RlKCksdCl9LHByb3BlcnR5OmZ1bmN0aW9uIEo2KHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PWU/SjQ6ImZ1bmN0aW9uIj09dHlwZW9mIGU/dDY6UTQpKHQsZSkpOnRoaXMubm9kZSgpW3RdfSxjbGFzc2VkOmZ1bmN0aW9uIFE2KHQsZSl7dmFyIG49ZTYodCsiIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIGk9bjYodGhpcy5ub2RlKCkpLHI9LTEsbz1uLmxlbmd0aDsrK3I8bzspaWYoIWkuY29udGFpbnMobltyXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIHRoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIGU/bDY6ZT9hNjpzNikobixlKSl9LHRleHQ6ZnVuY3Rpb24gdDkodCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PXQ/YzY6KCJmdW5jdGlvbiI9PXR5cGVvZiB0P2g2OnU2KSh0KSk6dGhpcy5ub2RlKCkudGV4dENvbnRlbnR9LGh0bWw6ZnVuY3Rpb24gZTkodCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PXQ/ZDY6KCJmdW5jdGlvbiI9PXR5cGVvZiB0P2Y2OnA2KSh0KSk6dGhpcy5ub2RlKCkuaW5uZXJIVE1MfSxyYWlzZTpmdW5jdGlvbiBuOSgpe3JldHVybiB0aGlzLmVhY2gobTYpfSxsb3dlcjpmdW5jdGlvbiBpOSgpe3JldHVybiB0aGlzLmVhY2goZzYpfSxhcHBlbmQ6ZnVuY3Rpb24gcjkodCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpDNCh0KTtyZXR1cm4gdGhpcy5zZWxlY3QoKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQoZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSkpfSxpbnNlcnQ6ZnVuY3Rpb24gbzkodCxlKXt2YXIgbj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkM0KHQpLGk9bnVsbD09ZT9fNjoiZnVuY3Rpb24iPT10eXBlb2YgZT9lOms0KGUpO3JldHVybiB0aGlzLnNlbGVjdCgoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUobi5hcHBseSh0aGlzLGFyZ3VtZW50cyksaS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSkpfSxyZW1vdmU6ZnVuY3Rpb24gYTkoKXtyZXR1cm4gdGhpcy5lYWNoKHk2KX0sY2xvbmU6ZnVuY3Rpb24gczkodCl7cmV0dXJuIHRoaXMuc2VsZWN0KHQ/YjY6djYpfSxkYXR1bTpmdW5jdGlvbiBsOSh0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsdCk6dGhpcy5ub2RlKCkuX19kYXRhX199LG9uOmZ1bmN0aW9uIGM5KHQsZSxuKXt2YXIgaSxyLG89RTYodCsiIiksYT1vLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2ZvcihzPWU/QzY6VDYsbnVsbD09biYmKG49ITEpLGk9MDtpPGE7KytpKXRoaXMuZWFjaChzKG9baV0sZSxuKSk7cmV0dXJuIHRoaXN9dmFyIHM9dGhpcy5ub2RlKCkuX19vbjtpZihzKWZvcih2YXIgbCxjPTAsdT1zLmxlbmd0aDtjPHU7KytjKWZvcihpPTAsbD1zW2NdO2k8YTsrK2kpaWYoKHI9b1tpXSkudHlwZT09PWwudHlwZSYmci5uYW1lPT09bC5uYW1lKXJldHVybiBsLnZhbHVlfSxkaXNwYXRjaDpmdW5jdGlvbiB1OSh0LGUpe3JldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBlP0w2Oms2KSh0LGUpKX19O3ZhciBoOT0wO2Z1bmN0aW9uIGQ5KCl7cmV0dXJuIG5ldyBwOX1mdW5jdGlvbiBwOSgpe3RoaXMuXz0iQCIrKCsraDkpLnRvU3RyaW5nKDM2KX1mdW5jdGlvbiBmOSgpe2Zvcih2YXIgdCxlPXc2O3Q9ZS5zb3VyY2VFdmVudDspZT10O3JldHVybiBlfWZ1bmN0aW9uIG05KHQsZSl7dmFyIG49dC5vd25lclNWR0VsZW1lbnR8fHQ7aWYobi5jcmVhdGVTVkdQb2ludCl7dmFyIGk9bi5jcmVhdGVTVkdQb2ludCgpO3JldHVybiBpLng9ZS5jbGllbnRYLGkueT1lLmNsaWVudFksWyhpPWkubWF0cml4VHJhbnNmb3JtKHQuZ2V0U2NyZWVuQ1RNKCkuaW52ZXJzZSgpKSkueCxpLnldfXZhciByPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW2UuY2xpZW50WC1yLmxlZnQtdC5jbGllbnRMZWZ0LGUuY2xpZW50WS1yLnRvcC10LmNsaWVudFRvcF19cDkucHJvdG90eXBlPWQ5LnByb3RvdHlwZT17Y29uc3RydWN0b3I6cDksZ2V0OmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl87IShlIGluIHQpOylpZighKHQ9dC5wYXJlbnROb2RlKSlyZXR1cm47cmV0dXJuIHRbZV19LHNldDpmdW5jdGlvbih0LGUpe3JldHVybiB0W3RoaXMuX109ZX0scmVtb3ZlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl8gaW4gdCYmZGVsZXRlIHRbdGhpcy5fXX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ffX07dmFyIGc5PU1hdGguUEksXzk9MipnOSx5OT0xZS02LHY5PV85LXk5O2Z1bmN0aW9uIGI5KCl7dGhpcy5feDA9dGhpcy5feTA9dGhpcy5feDE9dGhpcy5feTE9bnVsbCx0aGlzLl89IiJ9ZnVuY3Rpb24geDkoKXtyZXR1cm4gbmV3IGI5fWZ1bmN0aW9uIHc5KHQpe3JldHVybiBmdW5jdGlvbiBlKCl7cmV0dXJuIHR9fWI5LnByb3RvdHlwZT14OS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmI5LG1vdmVUbzpmdW5jdGlvbih0LGUpe3RoaXMuXys9Ik0iKyh0aGlzLl94MD10aGlzLl94MT0rdCkrIiwiKyh0aGlzLl95MD10aGlzLl95MT0rZSl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe251bGwhPT10aGlzLl94MSYmKHRoaXMuX3gxPXRoaXMuX3gwLHRoaXMuX3kxPXRoaXMuX3kwLHRoaXMuXys9IloiKX0sbGluZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fKz0iTCIrKHRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kxPStlKX0scXVhZHJhdGljQ3VydmVUbzpmdW5jdGlvbih0LGUsbixpKXt0aGlzLl8rPSJRIisgK3QrIiwiKyArZSsiLCIrKHRoaXMuX3gxPStuKSsiLCIrKHRoaXMuX3kxPStpKX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbih0LGUsbixpLHIsbyl7dGhpcy5fKz0iQyIrICt0KyIsIisgK2UrIiwiKyArbisiLCIrICtpKyIsIisodGhpcy5feDE9K3IpKyIsIisodGhpcy5feTE9K28pfSxhcmNUbzpmdW5jdGlvbih0LGUsbixpLHIpe3ZhciBvPXRoaXMuX3gxLGE9dGhpcy5feTEscz0obj0rbiktKHQ9K3QpLGw9KGk9K2kpLShlPStlKSxjPW8tdCx1PWEtZSxoPWMqYyt1KnU7aWYoKHI9K3IpPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrcik7aWYobnVsbD09PXRoaXMuX3gxKXRoaXMuXys9Ik0iKyh0aGlzLl94MT10KSsiLCIrKHRoaXMuX3kxPWUpO2Vsc2UgaWYoaD55OSlpZihNYXRoLmFicyh1KnMtbCpjKT55OSYmcil7dmFyIGQ9bi1vLHA9aS1hLGY9cypzK2wqbCxtPWQqZCtwKnAsZz1NYXRoLnNxcnQoZiksXz1NYXRoLnNxcnQoaCkseT1yKk1hdGgudGFuKChnOS1NYXRoLmFjb3MoKGYraC1tKS8oMipnKl8pKSkvMiksdj15L18sYj15L2c7TWF0aC5hYnModi0xKT55OSYmKHRoaXMuXys9IkwiKyh0K3YqYykrIiwiKyhlK3YqdSkpLHRoaXMuXys9IkEiK3IrIiwiK3IrIiwwLDAsIisgKyh1KmQ+YypwKSsiLCIrKHRoaXMuX3gxPXQrYipzKSsiLCIrKHRoaXMuX3kxPWUrYipsKX1lbHNlIHRoaXMuXys9IkwiKyh0aGlzLl94MT10KSsiLCIrKHRoaXMuX3kxPWUpfSxhcmM6ZnVuY3Rpb24odCxlLG4saSxyLG8pe3Q9K3QsZT0rZSxvPSEhbzt2YXIgYT0obj0rbikqTWF0aC5jb3MoaSkscz1uKk1hdGguc2luKGkpLGw9dCthLGM9ZStzLHU9MV5vLGg9bz9pLXI6ci1pO2lmKG48MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIituKTtudWxsPT09dGhpcy5feDE/dGhpcy5fKz0iTSIrbCsiLCIrYzooTWF0aC5hYnModGhpcy5feDEtbCk+eTl8fE1hdGguYWJzKHRoaXMuX3kxLWMpPnk5KSYmKHRoaXMuXys9IkwiK2wrIiwiK2MpLG4mJihoPDAmJihoPWglXzkrXzkpLGg+djk/dGhpcy5fKz0iQSIrbisiLCIrbisiLDAsMSwiK3UrIiwiKyh0LWEpKyIsIisoZS1zKSsiQSIrbisiLCIrbisiLDAsMSwiK3UrIiwiKyh0aGlzLl94MT1sKSsiLCIrKHRoaXMuX3kxPWMpOmg+eTkmJih0aGlzLl8rPSJBIituKyIsIituKyIsMCwiKyArKGg+PWc5KSsiLCIrdSsiLCIrKHRoaXMuX3gxPXQrbipNYXRoLmNvcyhyKSkrIiwiKyh0aGlzLl95MT1lK24qTWF0aC5zaW4ocikpKSl9LHJlY3Q6ZnVuY3Rpb24odCxlLG4saSl7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPStlKSsiaCIrICtuKyJ2IisgK2krImgiKy1uKyJaIn0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ffX07dmFyIFM5PU1hdGguYWJzLE05PU1hdGguYXRhbjIsRTk9TWF0aC5jb3MsVDk9TWF0aC5tYXgsQzk9TWF0aC5taW4sQTk9TWF0aC5zaW4sazk9TWF0aC5zcXJ0LEw5PTFlLTEyLFA5PU1hdGguUEksTjk9UDkvMixJOT0yKlA5O2Z1bmN0aW9uIE85KHQpe3JldHVybiB0PjE/MDp0PC0xP1A5Ok1hdGguYWNvcyh0KX1mdW5jdGlvbiBSOSh0KXtyZXR1cm4gdD49MT9OOTp0PD0tMT8tTjk6TWF0aC5hc2luKHQpfWZ1bmN0aW9uIHo5KHQpe3JldHVybiB0LmlubmVyUmFkaXVzfWZ1bmN0aW9uIEQ5KHQpe3JldHVybiB0Lm91dGVyUmFkaXVzfWZ1bmN0aW9uIEI5KHQpe3JldHVybiB0LnN0YXJ0QW5nbGV9ZnVuY3Rpb24gSDkodCl7cmV0dXJuIHQuZW5kQW5nbGV9ZnVuY3Rpb24gRjkodCl7cmV0dXJuIHQmJnQucGFkQW5nbGV9ZnVuY3Rpb24gVjkodCxlLG4saSxyLG8sYSxzKXt2YXIgbD1uLXQsYz1pLWUsdT1hLXIsaD1zLW8sZD0odSooZS1vKS1oKih0LXIpKS8oaCpsLXUqYyk7cmV0dXJuW3QrZCpsLGUrZCpjXX1mdW5jdGlvbiBVOSh0LGUsbixpLHIsbyxhKXt2YXIgcz10LW4sbD1lLWksYz0oYT9vOi1vKS9rOShzKnMrbCpsKSx1PWMqbCxoPS1jKnMsZD10K3UscD1lK2gsZj1uK3UsbT1pK2gsZz0oZCtmKS8yLF89KHArbSkvMix5PWYtZCx2PW0tcCxiPXkqeSt2KnYseD1yLW8sdz1kKm0tZipwLFM9KHY8MD8tMToxKSprOShUOSgwLHgqeCpiLXcqdykpLE09KHcqdi15KlMpL2IsRT0oLXcqeS12KlMpL2IsVD0odyp2K3kqUykvYixDPSgtdyp5K3YqUykvYixBPU0tZyxrPUUtXyxMPVQtZyxQPUMtXztyZXR1cm4gQSpBK2sqaz5MKkwrUCpQJiYoTT1ULEU9Qykse2N4Ok0sY3k6RSx4MDE6LXUseTAxOi1oLHgxMTpNKihyL3gtMSkseTExOkUqKHIveC0xKX19ZnVuY3Rpb24gajkodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIEc5KHQpe3JldHVybiBuZXcgajkodCl9ZnVuY3Rpb24gVzkodCl7cmV0dXJuIHRbMF19ZnVuY3Rpb24gcTkodCl7cmV0dXJuIHRbMV19ZnVuY3Rpb24gWTkoKXt2YXIgdD1XOSxlPXE5LG49dzkoITApLGk9bnVsbCxyPUc5LG89bnVsbDtmdW5jdGlvbiBhKGEpe3ZhciBzLGwsYyx1PWEubGVuZ3RoLGg9ITE7Zm9yKG51bGw9PWkmJihvPXIoYz14OSgpKSkscz0wO3M8PXU7KytzKSEoczx1JiZuKGw9YVtzXSxzLGEpKT09PWgmJigoaD0haCk/by5saW5lU3RhcnQoKTpvLmxpbmVFbmQoKSksaCYmby5wb2ludCgrdChsLHMsYSksK2UobCxzLGEpKTtpZihjKXJldHVybiBvPW51bGwsYysiInx8bnVsbH1yZXR1cm4gYS54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6dzkoK2UpLGEpOnR9LGEueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90Onc5KCt0KSxhKTplfSxhLmRlZmluZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp3OSghIXQpLGEpOm59LGEuY3VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxudWxsIT1pJiYobz1yKGkpKSxhKTpyfSxhLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/aT1vPW51bGw6bz1yKGk9dCksYSk6aX0sYX1mdW5jdGlvbiBYOSgpe3ZhciB0PVc5LGU9bnVsbCxuPXc5KDApLGk9cTkscj13OSghMCksbz1udWxsLGE9Rzkscz1udWxsO2Z1bmN0aW9uIGwobCl7dmFyIGMsdSxoLGQscCxmPWwubGVuZ3RoLG09ITEsZz1uZXcgQXJyYXkoZiksXz1uZXcgQXJyYXkoZik7Zm9yKG51bGw9PW8mJihzPWEocD14OSgpKSksYz0wO2M8PWY7KytjKXtpZighKGM8ZiYmcihkPWxbY10sYyxsKSk9PT1tKWlmKG09IW0pdT1jLHMuYXJlYVN0YXJ0KCkscy5saW5lU3RhcnQoKTtlbHNle2ZvcihzLmxpbmVFbmQoKSxzLmxpbmVTdGFydCgpLGg9Yy0xO2g+PXU7LS1oKXMucG9pbnQoZ1toXSxfW2hdKTtzLmxpbmVFbmQoKSxzLmFyZWFFbmQoKX1tJiYoZ1tjXT0rdChkLGMsbCksX1tjXT0rbihkLGMsbCkscy5wb2ludChlPytlKGQsYyxsKTpnW2NdLGk/K2koZCxjLGwpOl9bY10pKX1pZihwKXJldHVybiBzPW51bGwscCsiInx8bnVsbH1mdW5jdGlvbiBjKCl7cmV0dXJuIFk5KCkuZGVmaW5lZChyKS5jdXJ2ZShhKS5jb250ZXh0KG8pfXJldHVybiBsLng9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjp3OSgrbiksZT1udWxsLGwpOnR9LGwueDA9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTp3OSgrZSksbCk6dH0sbC54MT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1udWxsPT10P251bGw6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp3OSgrdCksbCk6ZX0sbC55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6dzkoK3QpLGk9bnVsbCxsKTpufSxsLnkwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6dzkoK3QpLGwpOm59LGwueTE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9bnVsbD09dD9udWxsOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6dzkoK3QpLGwpOml9LGwubGluZVgwPWwubGluZVkwPWZ1bmN0aW9uKCl7cmV0dXJuIGMoKS54KHQpLnkobil9LGwubGluZVkxPWZ1bmN0aW9uKCl7cmV0dXJuIGMoKS54KHQpLnkoaSl9LGwubGluZVgxPWZ1bmN0aW9uKCl7cmV0dXJuIGMoKS54KGUpLnkobil9LGwuZGVmaW5lZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90Onc5KCEhdCksbCk6cn0sbC5jdXJ2ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10LG51bGwhPW8mJihzPWEobykpLGwpOmF9LGwuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09dD9vPXM9bnVsbDpzPWEobz10KSxsKTpvfSxsfWZ1bmN0aW9uICQ5KHQsZSl7cmV0dXJuIGU8dD8tMTplPnQ/MTplPj10PzA6TmFOfWZ1bmN0aW9uIEs5KHQpe3JldHVybiB0fWo5LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDp0aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpfX19O3ZhciBaOT1ROShHOSk7ZnVuY3Rpb24gSjkodCl7dGhpcy5fY3VydmU9dH1mdW5jdGlvbiBROSh0KXtmdW5jdGlvbiBlKGUpe3JldHVybiBuZXcgSjkodChlKSl9cmV0dXJuIGUuX2N1cnZlPXQsZX1mdW5jdGlvbiB0OCh0KXt2YXIgZT10LmN1cnZlO3JldHVybiB0LmFuZ2xlPXQueCxkZWxldGUgdC54LHQucmFkaXVzPXQueSxkZWxldGUgdC55LHQuY3VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZShROSh0KSk6ZSgpLl9jdXJ2ZX0sdH1mdW5jdGlvbiBlOCgpe3JldHVybiB0OChZOSgpLmN1cnZlKFo5KSl9ZnVuY3Rpb24gbjgoKXt2YXIgdD1YOSgpLmN1cnZlKFo5KSxlPXQuY3VydmUsbj10LmxpbmVYMCxpPXQubGluZVgxLHI9dC5saW5lWTAsbz10LmxpbmVZMTtyZXR1cm4gdC5hbmdsZT10LngsZGVsZXRlIHQueCx0LnN0YXJ0QW5nbGU9dC54MCxkZWxldGUgdC54MCx0LmVuZEFuZ2xlPXQueDEsZGVsZXRlIHQueDEsdC5yYWRpdXM9dC55LGRlbGV0ZSB0LnksdC5pbm5lclJhZGl1cz10LnkwLGRlbGV0ZSB0LnkwLHQub3V0ZXJSYWRpdXM9dC55MSxkZWxldGUgdC55MSx0LmxpbmVTdGFydEFuZ2xlPWZ1bmN0aW9uKCl7cmV0dXJuIHQ4KG4oKSl9LGRlbGV0ZSB0LmxpbmVYMCx0LmxpbmVFbmRBbmdsZT1mdW5jdGlvbigpe3JldHVybiB0OChpKCkpfSxkZWxldGUgdC5saW5lWDEsdC5saW5lSW5uZXJSYWRpdXM9ZnVuY3Rpb24oKXtyZXR1cm4gdDgocigpKX0sZGVsZXRlIHQubGluZVkwLHQubGluZU91dGVyUmFkaXVzPWZ1bmN0aW9uKCl7cmV0dXJuIHQ4KG8oKSl9LGRlbGV0ZSB0LmxpbmVZMSx0LmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2UoUTkodCkpOmUoKS5fY3VydmV9LHR9ZnVuY3Rpb24gaTgodCxlKXtyZXR1cm5bKGU9K2UpKk1hdGguY29zKHQtPU1hdGguUEkvMiksZSpNYXRoLnNpbih0KV19SjkucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5hcmVhU3RhcnQoKX0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmFyZWFFbmQoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5saW5lRW5kKCl9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy5fY3VydmUucG9pbnQoZSpNYXRoLnNpbih0KSxlKi1NYXRoLmNvcyh0KSl9fTt2YXIgcjg9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIG84KHQpe3JldHVybiB0LnNvdXJjZX1mdW5jdGlvbiBhOCh0KXtyZXR1cm4gdC50YXJnZXR9ZnVuY3Rpb24gczgodCl7dmFyIGU9bzgsbj1hOCxpPVc5LHI9cTksbz1udWxsO2Z1bmN0aW9uIGEoKXt2YXIgYSxzPXI4LmNhbGwoYXJndW1lbnRzKSxsPWUuYXBwbHkodGhpcyxzKSxjPW4uYXBwbHkodGhpcyxzKTtpZihvfHwobz1hPXg5KCkpLHQobywraS5hcHBseSh0aGlzLChzWzBdPWwscykpLCtyLmFwcGx5KHRoaXMscyksK2kuYXBwbHkodGhpcywoc1swXT1jLHMpKSwrci5hcHBseSh0aGlzLHMpKSxhKXJldHVybiBvPW51bGwsYSsiInx8bnVsbH1yZXR1cm4gYS5zb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxhKTplfSxhLnRhcmdldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LGEpOm59LGEueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90Onc5KCt0KSxhKTppfSxhLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp3OSgrdCksYSk6cn0sYS5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPW51bGw9PXQ/bnVsbDp0LGEpOm99LGF9ZnVuY3Rpb24gbDgodCxlLG4saSxyKXt0Lm1vdmVUbyhlLG4pLHQuYmV6aWVyQ3VydmVUbyhlPShlK2kpLzIsbixlLHIsaSxyKX1mdW5jdGlvbiBjOCh0LGUsbixpLHIpe3QubW92ZVRvKGUsbiksdC5iZXppZXJDdXJ2ZVRvKGUsbj0obityKS8yLGksbixpLHIpfWZ1bmN0aW9uIHU4KHQsZSxuLGkscil7dmFyIG89aTgoZSxuKSxhPWk4KGUsbj0obityKS8yKSxzPWk4KGksbiksbD1pOChpLHIpO3QubW92ZVRvKG9bMF0sb1sxXSksdC5iZXppZXJDdXJ2ZVRvKGFbMF0sYVsxXSxzWzBdLHNbMV0sbFswXSxsWzFdKX12YXIgaDg9e2RyYXc6ZnVuY3Rpb24odCxlKXt2YXIgbj1NYXRoLnNxcnQoZS9QOSk7dC5tb3ZlVG8obiwwKSx0LmFyYygwLDAsbiwwLEk5KX19LGQ4PXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIG49TWF0aC5zcXJ0KGUvNSkvMjt0Lm1vdmVUbygtMypuLC1uKSx0LmxpbmVUbygtbiwtbiksdC5saW5lVG8oLW4sLTMqbiksdC5saW5lVG8obiwtMypuKSx0LmxpbmVUbyhuLC1uKSx0LmxpbmVUbygzKm4sLW4pLHQubGluZVRvKDMqbixuKSx0LmxpbmVUbyhuLG4pLHQubGluZVRvKG4sMypuKSx0LmxpbmVUbygtbiwzKm4pLHQubGluZVRvKC1uLG4pLHQubGluZVRvKC0zKm4sbiksdC5jbG9zZVBhdGgoKX19LHA4PU1hdGguc3FydCgxLzMpLGY4PTIqcDgsbTg9e2RyYXc6ZnVuY3Rpb24odCxlKXt2YXIgbj1NYXRoLnNxcnQoZS9mOCksaT1uKnA4O3QubW92ZVRvKDAsLW4pLHQubGluZVRvKGksMCksdC5saW5lVG8oMCxuKSx0LmxpbmVUbygtaSwwKSx0LmNsb3NlUGF0aCgpfX0sZzg9TWF0aC5zaW4oUDkvMTApL01hdGguc2luKDcqUDkvMTApLF84PU1hdGguc2luKEk5LzEwKSpnOCx5OD0tTWF0aC5jb3MoSTkvMTApKmc4LHY4PXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIG49TWF0aC5zcXJ0KC44OTA4MTMwOTE1MjkyODUyKmUpLGk9XzgqbixyPXk4Km47dC5tb3ZlVG8oMCwtbiksdC5saW5lVG8oaSxyKTtmb3IodmFyIG89MTtvPDU7KytvKXt2YXIgYT1JOSpvLzUscz1NYXRoLmNvcyhhKSxsPU1hdGguc2luKGEpO3QubGluZVRvKGwqbiwtcypuKSx0LmxpbmVUbyhzKmktbCpyLGwqaStzKnIpfXQuY2xvc2VQYXRoKCl9fSxiOD17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciBuPU1hdGguc3FydChlKSxpPS1uLzI7dC5yZWN0KGksaSxuLG4pfX0seDg9TWF0aC5zcXJ0KDMpLHc4PXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIG49LU1hdGguc3FydChlLygzKng4KSk7dC5tb3ZlVG8oMCwyKm4pLHQubGluZVRvKC14OCpuLC1uKSx0LmxpbmVUbyh4OCpuLC1uKSx0LmNsb3NlUGF0aCgpfX0sUzg9LS41LE04PU1hdGguc3FydCgzKS8yLEU4PTEvTWF0aC5zcXJ0KDEyKSxUOD0zKihFOC8yKzEpLEM4PXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIG49TWF0aC5zcXJ0KGUvVDgpLGk9bi8yLHI9bipFOCxvPWksYT1uKkU4K24scz0tbyxsPWE7dC5tb3ZlVG8oaSxyKSx0LmxpbmVUbyhvLGEpLHQubGluZVRvKHMsbCksdC5saW5lVG8oUzgqaS1NOCpyLE04KmkrUzgqciksdC5saW5lVG8oUzgqby1NOCphLE04Km8rUzgqYSksdC5saW5lVG8oUzgqcy1NOCpsLE04KnMrUzgqbCksdC5saW5lVG8oUzgqaStNOCpyLFM4KnItTTgqaSksdC5saW5lVG8oUzgqbytNOCphLFM4KmEtTTgqbyksdC5saW5lVG8oUzgqcytNOCpsLFM4KmwtTTgqcyksdC5jbG9zZVBhdGgoKX19LEE4PVtoOCxkOCxtOCxiOCx2OCx3OCxDOF07ZnVuY3Rpb24gazgoKXt9ZnVuY3Rpb24gTDgodCxlLG4pe3QuX2NvbnRleHQuYmV6aWVyQ3VydmVUbygoMip0Ll94MCt0Ll94MSkvMywoMip0Ll95MCt0Ll95MSkvMywodC5feDArMip0Ll94MSkvMywodC5feTArMip0Ll95MSkvMywodC5feDArNCp0Ll94MStlKS82LCh0Ll95MCs0KnQuX3kxK24pLzYpfWZ1bmN0aW9uIFA4KHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBOOCh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gSTgodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIE84KHQsZSl7dGhpcy5fYmFzaXM9bmV3IFA4KHQpLHRoaXMuX2JldGE9ZX1QOC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAzOkw4KHRoaXMsdGhpcy5feDEsdGhpcy5feTEpO2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSl9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2NvbnRleHQubGluZVRvKCg1KnRoaXMuX3gwK3RoaXMuX3gxKS82LCg1KnRoaXMuX3kwK3RoaXMuX3kxKS82KTtkZWZhdWx0Okw4KHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWV9fSxOOC5wcm90b3R5cGU9e2FyZWFTdGFydDprOCxhcmVhRW5kOms4LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAyOnRoaXMuX2NvbnRleHQubW92ZVRvKCh0aGlzLl94MisyKnRoaXMuX3gzKS8zLCh0aGlzLl95MisyKnRoaXMuX3kzKS8zKSx0aGlzLl9jb250ZXh0LmxpbmVUbygodGhpcy5feDMrMip0aGlzLl94MikvMywodGhpcy5feTMrMip0aGlzLl95MikvMyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Mix0aGlzLl95MiksdGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCl9fSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gyPXQsdGhpcy5feTI9ZTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl94Mz10LHRoaXMuX3kzPWU7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDQ9dCx0aGlzLl95ND1lLHRoaXMuX2NvbnRleHQubW92ZVRvKCh0aGlzLl94MCs0KnRoaXMuX3gxK3QpLzYsKHRoaXMuX3kwKzQqdGhpcy5feTErZSkvNik7YnJlYWs7ZGVmYXVsdDpMOCh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1lfX0sSTgucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjM9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7dmFyIG49KHRoaXMuX3gwKzQqdGhpcy5feDErdCkvNixpPSh0aGlzLl95MCs0KnRoaXMuX3kxK2UpLzY7dGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhuLGkpOnRoaXMuX2NvbnRleHQubW92ZVRvKG4saSk7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpMOCh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1lfX0sTzgucHJvdG90eXBlPXtsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PVtdLHRoaXMuX3k9W10sdGhpcy5fYmFzaXMubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl94LGU9dGhpcy5feSxuPXQubGVuZ3RoLTE7aWYobj4wKWZvcih2YXIgaSxyPXRbMF0sbz1lWzBdLGE9dFtuXS1yLHM9ZVtuXS1vLGw9LTE7KytsPD1uOyl0aGlzLl9iYXNpcy5wb2ludCh0aGlzLl9iZXRhKnRbbF0rKDEtdGhpcy5fYmV0YSkqKHIrKGk9bC9uKSphKSx0aGlzLl9iZXRhKmVbbF0rKDEtdGhpcy5fYmV0YSkqKG8raSpzKSk7dGhpcy5feD10aGlzLl95PW51bGwsdGhpcy5fYmFzaXMubGluZUVuZCgpfSxwb2ludDpmdW5jdGlvbih0LGUpe3RoaXMuX3gucHVzaCgrdCksdGhpcy5feS5wdXNoKCtlKX19O3ZhciBSOD0oZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiAxPT09ZT9uZXcgUDgodCk6bmV3IE84KHQsZSl9cmV0dXJuIG4uYmV0YT1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LG59KSguODUpO2Z1bmN0aW9uIHo4KHQsZSxuKXt0Ll9jb250ZXh0LmJlemllckN1cnZlVG8odC5feDErdC5fayoodC5feDItdC5feDApLHQuX3kxK3QuX2sqKHQuX3kyLXQuX3kwKSx0Ll94Mit0Ll9rKih0Ll94MS1lKSx0Ll95Mit0Ll9rKih0Ll95MS1uKSx0Ll94Mix0Ll95Mil9ZnVuY3Rpb24gRDgodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1lKS82fUQ4LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp6OCh0aGlzLHRoaXMuX3gxLHRoaXMuX3kxKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5feDE9dCx0aGlzLl95MT1lO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO2RlZmF1bHQ6ejgodGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19O3ZhciBCOD0oZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBuZXcgRDgodCxlKX1yZXR1cm4gbi50ZW5zaW9uPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0pKDApO2Z1bmN0aW9uIEg4KHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2s9KDEtZSkvNn1IOC5wcm90b3R5cGU9e2FyZWFTdGFydDprOCxhcmVhRW5kOms4LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KX19LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDM9dCx0aGlzLl95Mz1lO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3g0PXQsdGhpcy5feTQ9ZSk7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDU9dCx0aGlzLl95NT1lO2JyZWFrO2RlZmF1bHQ6ejgodGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19O3ZhciBGOD0oZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBuZXcgSDgodCxlKX1yZXR1cm4gbi50ZW5zaW9uPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0pKDApO2Z1bmN0aW9uIFY4KHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2s9KDEtZSkvNn1WOC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMz09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDp6OCh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07dmFyIFU4PShmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIG5ldyBWOCh0LGUpfXJldHVybiBuLnRlbnNpb249ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSkoMCk7ZnVuY3Rpb24gajgodCxlLG4pe3ZhciBpPXQuX3gxLHI9dC5feTEsbz10Ll94MixhPXQuX3kyO2lmKHQuX2wwMV9hPkw5KXt2YXIgcz0yKnQuX2wwMV8yYSszKnQuX2wwMV9hKnQuX2wxMl9hK3QuX2wxMl8yYSxsPTMqdC5fbDAxX2EqKHQuX2wwMV9hK3QuX2wxMl9hKTtpPShpKnMtdC5feDAqdC5fbDEyXzJhK3QuX3gyKnQuX2wwMV8yYSkvbCxyPShyKnMtdC5feTAqdC5fbDEyXzJhK3QuX3kyKnQuX2wwMV8yYSkvbH1pZih0Ll9sMjNfYT5MOSl7dmFyIGM9Mip0Ll9sMjNfMmErMyp0Ll9sMjNfYSp0Ll9sMTJfYSt0Ll9sMTJfMmEsdT0zKnQuX2wyM19hKih0Ll9sMjNfYSt0Ll9sMTJfYSk7bz0obypjK3QuX3gxKnQuX2wyM18yYS1lKnQuX2wxMl8yYSkvdSxhPShhKmMrdC5feTEqdC5fbDIzXzJhLW4qdC5fbDEyXzJhKS91fXQuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhpLHIsbyxhLHQuX3gyLHQuX3kyKX1mdW5jdGlvbiBHOCh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9hbHBoYT1lfUc4LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gyLHRoaXMuX3kyKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7aWYodD0rdCxlPStlLHRoaXMuX3BvaW50KXt2YXIgbj10aGlzLl94Mi10LGk9dGhpcy5feTItZTt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KG4qbitpKmksdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO2RlZmF1bHQ6ajgodGhpcyx0LGUpfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIgVzg9KGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gZT9uZXcgRzgodCxlKTpuZXcgRDgodCwwKX1yZXR1cm4gbi5hbHBoYT1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LG59KSguNSk7ZnVuY3Rpb24gcTgodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fYWxwaGE9ZX1xOC5wcm90b3R5cGU9e2FyZWFTdGFydDprOCxhcmVhRW5kOms4LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KX19LHBvaW50OmZ1bmN0aW9uKHQsZSl7aWYodD0rdCxlPStlLHRoaXMuX3BvaW50KXt2YXIgbj10aGlzLl94Mi10LGk9dGhpcy5feTItZTt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KG4qbitpKmksdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gzPXQsdGhpcy5feTM9ZTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94ND10LHRoaXMuX3k0PWUpO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g1PXQsdGhpcy5feTU9ZTticmVhaztkZWZhdWx0Omo4KHRoaXMsdCxlKX10aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07dmFyIFk4PShmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIGU/bmV3IHE4KHQsZSk6bmV3IEg4KHQsMCl9cmV0dXJuIG4uYWxwaGE9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSkoLjUpO2Z1bmN0aW9uIFg4KHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2FscGhhPWV9WDgucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjM9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7aWYodD0rdCxlPStlLHRoaXMuX3BvaW50KXt2YXIgbj10aGlzLl94Mi10LGk9dGhpcy5feTItZTt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KG4qbitpKmksdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0Omo4KHRoaXMsdCxlKX10aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07dmFyICQ4PShmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIGU/bmV3IFg4KHQsZSk6bmV3IFY4KHQsMCl9cmV0dXJuIG4uYWxwaGE9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSkoLjUpO2Z1bmN0aW9uIEs4KHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBaOCh0KXtyZXR1cm4gdDwwPy0xOjF9ZnVuY3Rpb24gSjgodCxlLG4pe3ZhciBpPXQuX3gxLXQuX3gwLHI9ZS10Ll94MSxvPSh0Ll95MS10Ll95MCkvKGl8fHI8MCYmLTApLGE9KG4tdC5feTEpLyhyfHxpPDAmJi0wKSxzPShvKnIrYSppKS8oaStyKTtyZXR1cm4oWjgobykrWjgoYSkpKk1hdGgubWluKE1hdGguYWJzKG8pLE1hdGguYWJzKGEpLC41Kk1hdGguYWJzKHMpKXx8MH1mdW5jdGlvbiBROCh0LGUpe3ZhciBuPXQuX3gxLXQuX3gwO3JldHVybiBuPygzKih0Ll95MS10Ll95MCkvbi1lKS8yOmV9ZnVuY3Rpb24gdDcodCxlLG4pe3ZhciBpPXQuX3gwLHI9dC5feDEsbz10Ll95MSxhPShyLWkpLzM7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKGkrYSx0Ll95MCthKmUsci1hLG8tYSpuLHIsbyl9ZnVuY3Rpb24gZTcodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIG43KHQpe3RoaXMuX2NvbnRleHQ9bmV3IGk3KHQpfWZ1bmN0aW9uIGk3KHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiByNyh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gbzcodCl7dmFyIGUsbixpPXQubGVuZ3RoLTEscj1uZXcgQXJyYXkoaSksbz1uZXcgQXJyYXkoaSksYT1uZXcgQXJyYXkoaSk7Zm9yKHJbMF09MCxvWzBdPTIsYVswXT10WzBdKzIqdFsxXSxlPTE7ZTxpLTE7KytlKXJbZV09MSxvW2VdPTQsYVtlXT00KnRbZV0rMip0W2UrMV07Zm9yKHJbaS0xXT0yLG9baS0xXT03LGFbaS0xXT04KnRbaS0xXSt0W2ldLGU9MTtlPGk7KytlKW9bZV0tPW49cltlXS9vW2UtMV0sYVtlXS09biphW2UtMV07Zm9yKHJbaS0xXT1hW2ktMV0vb1tpLTFdLGU9aS0yO2U+PTA7LS1lKXJbZV09KGFbZV0tcltlKzFdKS9vW2VdO2ZvcihvW2ktMV09KHRbaV0rcltpLTFdKS8yLGU9MDtlPGktMTsrK2Upb1tlXT0yKnRbZSsxXS1yW2UrMV07cmV0dXJuW3Isb119ZnVuY3Rpb24gYTcodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fdD1lfWZ1bmN0aW9uIHM3KHQsZSl7aWYoKHI9dC5sZW5ndGgpPjEpZm9yKHZhciBuLGkscixvPTEsYT10W2VbMF1dLHM9YS5sZW5ndGg7bzxyOysrbylmb3IoaT1hLGE9dFtlW29dXSxuPTA7bjxzOysrbilhW25dWzFdKz1hW25dWzBdPWlzTmFOKGlbbl1bMV0pP2lbbl1bMF06aVtuXVsxXX1mdW5jdGlvbiBsNyh0KXtmb3IodmFyIGU9dC5sZW5ndGgsbj1uZXcgQXJyYXkoZSk7LS1lPj0wOyluW2VdPWU7cmV0dXJuIG59ZnVuY3Rpb24gYzcodCxlKXtyZXR1cm4gdFtlXX1mdW5jdGlvbiB1Nyh0KXt2YXIgZT10Lm1hcChoNyk7cmV0dXJuIGw3KHQpLnNvcnQoKGZ1bmN0aW9uKHQsbil7cmV0dXJuIGVbdF0tZVtuXX0pKX1mdW5jdGlvbiBoNyh0KXtmb3IodmFyIGUsbj0wLGk9LTEscj10Lmxlbmd0aDsrK2k8cjspKGU9K3RbaV1bMV0pJiYobis9ZSk7cmV0dXJuIG59SzgucHJvdG90eXBlPXthcmVhU3RhcnQ6azgsYXJlYUVuZDprOCxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCl9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dD0rdCxlPStlLHRoaXMuX3BvaW50P3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6KHRoaXMuX3BvaW50PTEsdGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKSl9fSxlNy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT10aGlzLl90MD1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLHRoaXMuX3kxKTticmVhaztjYXNlIDM6dDcodGhpcyx0aGlzLl90MCxROCh0aGlzLHRoaXMuX3QwKSl9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3ZhciBuPU5hTjtpZihlPStlLCh0PSt0KSE9PXRoaXMuX3gxfHxlIT09dGhpcy5feTEpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdDcodGhpcyxROCh0aGlzLG49SjgodGhpcyx0LGUpKSxuKTticmVhaztkZWZhdWx0OnQ3KHRoaXMsdGhpcy5fdDAsbj1KOCh0aGlzLHQsZSkpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9ZSx0aGlzLl90MD1ufX19LChuNy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlNy5wcm90b3R5cGUpKS5wb2ludD1mdW5jdGlvbih0LGUpe2U3LnByb3RvdHlwZS5wb2ludC5jYWxsKHRoaXMsZSx0KX0saTcucHJvdG90eXBlPXttb3ZlVG86ZnVuY3Rpb24odCxlKXt0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpfSxjbG9zZVBhdGg6ZnVuY3Rpb24oKXt0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpfSxsaW5lVG86ZnVuY3Rpb24odCxlKXt0aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKHQsZSxuLGkscixvKXt0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8oZSx0LGksbixvLHIpfX0scjcucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feD1bXSx0aGlzLl95PVtdfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5feCxlPXRoaXMuX3ksbj10Lmxlbmd0aDtpZihuKWlmKHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odFswXSxlWzBdKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0WzBdLGVbMF0pLDI9PT1uKXRoaXMuX2NvbnRleHQubGluZVRvKHRbMV0sZVsxXSk7ZWxzZSBmb3IodmFyIGk9bzcodCkscj1vNyhlKSxvPTAsYT0xO2E8bjsrK28sKythKXRoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhpWzBdW29dLHJbMF1bb10saVsxXVtvXSxyWzFdW29dLHRbYV0sZVthXSk7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09bikmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmUsdGhpcy5feD10aGlzLl95PW51bGx9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy5feC5wdXNoKCt0KSx0aGlzLl95LnB1c2goK2UpfX0sYTcucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feD10aGlzLl95PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7MDx0aGlzLl90JiZ0aGlzLl90PDEmJjI9PT10aGlzLl9wb2ludCYmdGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feCx0aGlzLl95KSwodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT49MCYmKHRoaXMuX3Q9MS10aGlzLl90LHRoaXMuX2xpbmU9MS10aGlzLl9saW5lKX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjtkZWZhdWx0OmlmKHRoaXMuX3Q8PTApdGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feCxlKSx0aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpO2Vsc2V7dmFyIG49dGhpcy5feCooMS10aGlzLl90KSt0KnRoaXMuX3Q7dGhpcy5fY29udGV4dC5saW5lVG8obix0aGlzLl95KSx0aGlzLl9jb250ZXh0LmxpbmVUbyhuLGUpfX10aGlzLl94PXQsdGhpcy5feT1lfX07dmFyIGQ3PW5ldyBEYXRlLHA3PW5ldyBEYXRlO2Z1bmN0aW9uIGY3KHQsZSxuLGkpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIHQoZT1uZXcgRGF0ZSgrZSkpLGV9cmV0dXJuIHIuZmxvb3I9cixyLmNlaWw9ZnVuY3Rpb24obil7cmV0dXJuIHQobj1uZXcgRGF0ZShuLTEpKSxlKG4sMSksdChuKSxufSxyLnJvdW5kPWZ1bmN0aW9uKHQpe3ZhciBlPXIodCksbj1yLmNlaWwodCk7cmV0dXJuIHQtZTxuLXQ/ZTpufSxyLm9mZnNldD1mdW5jdGlvbih0LG4pe3JldHVybiBlKHQ9bmV3IERhdGUoK3QpLG51bGw9PW4/MTpNYXRoLmZsb29yKG4pKSx0fSxyLnJhbmdlPWZ1bmN0aW9uKG4saSxvKXt2YXIgYSxzPVtdO2lmKG49ci5jZWlsKG4pLG89bnVsbD09bz8xOk1hdGguZmxvb3IobyksIShuPGkmJm8+MCkpcmV0dXJuIHM7ZG97cy5wdXNoKGE9bmV3IERhdGUoK24pKSxlKG4sbyksdChuKX13aGlsZShhPG4mJm48aSk7cmV0dXJuIHN9LHIuZmlsdGVyPWZ1bmN0aW9uKG4pe3JldHVybiBmNygoZnVuY3Rpb24oZSl7aWYoZT49ZSlmb3IoO3QoZSksIW4oZSk7KWUuc2V0VGltZShlLTEpfSksKGZ1bmN0aW9uKHQsaSl7aWYodD49dClpZihpPDApZm9yKDsrK2k8PTA7KWZvcig7ZSh0LC0xKSwhbih0KTspO2Vsc2UgZm9yKDstLWk+PTA7KWZvcig7ZSh0LDEpLCFuKHQpOyk7fSkpfSxuJiYoci5jb3VudD1mdW5jdGlvbihlLGkpe3JldHVybiBkNy5zZXRUaW1lKCtlKSxwNy5zZXRUaW1lKCtpKSx0KGQ3KSx0KHA3KSxNYXRoLmZsb29yKG4oZDcscDcpKX0sci5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLmZsb29yKHQpLGlzRmluaXRlKHQpJiZ0PjA/dD4xP3IuZmlsdGVyKGk/ZnVuY3Rpb24oZSl7cmV0dXJuIGkoZSkldD09MH06ZnVuY3Rpb24oZSl7cmV0dXJuIHIuY291bnQoMCxlKSV0PT0wfSk6cjpudWxsfSkscn12YXIgbTc9ZjcoKGZ1bmN0aW9uKCl7fSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0K2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUtdH0pKTttNy5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLmZsb29yKHQpLGlzRmluaXRlKHQpJiZ0PjA/dD4xP2Y3KChmdW5jdGlvbihlKXtlLnNldFRpbWUoTWF0aC5mbG9vcihlL3QpKnQpfSksKGZ1bmN0aW9uKGUsbil7ZS5zZXRUaW1lKCtlK24qdCl9KSwoZnVuY3Rpb24oZSxuKXtyZXR1cm4obi1lKS90fSkpOm03Om51bGx9O3ZhciBnNz1tNy5yYW5nZSxfNz0xZTMseTc9NmU0LHY3PTM2ZTUsYjc9ODY0ZTUseDc9NjA0OGU1LHc3PWY3KChmdW5jdGlvbih0KXt0LnNldFRpbWUoTWF0aC5mbG9vcih0L183KSpfNyl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrZSpfNyl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS9fN30pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENTZWNvbmRzKCl9KSksUzc9dzcucmFuZ2UsTTc9ZjcoKGZ1bmN0aW9uKHQpe3Quc2V0VGltZShNYXRoLmZsb29yKHQveTcpKnk3KX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCtlKnk3KX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQpL3k3fSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1pbnV0ZXMoKX0pKSxFNz1NNy5yYW5nZSxUNz1mNygoZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRUaW1lem9uZU9mZnNldCgpKnk3JXY3O2U8MCYmKGUrPXY3KSx0LnNldFRpbWUoTWF0aC5mbG9vcigoK3QtZSkvdjcpKnY3K2UpfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0K2UqdjcpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvdjd9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0SG91cnMoKX0pKSxDNz1UNy5yYW5nZSxBNz1mNygoZnVuY3Rpb24odCl7dC5zZXRIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0RGF0ZSh0LmdldERhdGUoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQtKGUuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKnk3KS9iN30pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXREYXRlKCktMX0pKSxrNz1BNy5yYW5nZTtmdW5jdGlvbiBMNyh0KXtyZXR1cm4gZjcoKGZ1bmN0aW9uKGUpe2Uuc2V0RGF0ZShlLmdldERhdGUoKS0oZS5nZXREYXkoKSs3LXQpJTcpLGUuc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldERhdGUodC5nZXREYXRlKCkrNyplKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQtKGUuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKnk3KS94N30pKX12YXIgUDc9TDcoMCksTjc9TDcoMSksSTc9TDcoMiksTzc9TDcoMyksUjc9TDcoNCksejc9TDcoNSksRDc9TDcoNiksQjc9UDcucmFuZ2UsSDc9TjcucmFuZ2UsRjc9STcucmFuZ2UsVjc9TzcucmFuZ2UsVTc9UjcucmFuZ2Usajc9ejcucmFuZ2UsRzc9RDcucmFuZ2UsVzc9ZjcoKGZ1bmN0aW9uKHQpe3Quc2V0RGF0ZSgxKSx0LnNldEhvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRNb250aCh0LmdldE1vbnRoKCkrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXRNb250aCgpLXQuZ2V0TW9udGgoKSsxMiooZS5nZXRGdWxsWWVhcigpLXQuZ2V0RnVsbFllYXIoKSl9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0TW9udGgoKX0pKSxxNz1XNy5yYW5nZSxZNz1mNygoZnVuY3Rpb24odCl7dC5zZXRNb250aCgwLDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldEZ1bGxZZWFyKHQuZ2V0RnVsbFllYXIoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldEZ1bGxZZWFyKCktdC5nZXRGdWxsWWVhcigpfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEZ1bGxZZWFyKCl9KSk7WTcuZXZlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIGlzRmluaXRlKHQ9TWF0aC5mbG9vcih0KSkmJnQ+MD9mNygoZnVuY3Rpb24oZSl7ZS5zZXRGdWxsWWVhcihNYXRoLmZsb29yKGUuZ2V0RnVsbFllYXIoKS90KSp0KSxlLnNldE1vbnRoKDAsMSksZS5zZXRIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbihlLG4pe2Uuc2V0RnVsbFllYXIoZS5nZXRGdWxsWWVhcigpK24qdCl9KSk6bnVsbH07dmFyIFg3PVk3LnJhbmdlLCQ3PWY3KChmdW5jdGlvbih0KXt0LnNldFVUQ1NlY29uZHMoMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCtlKnk3KX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQpL3k3fSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ01pbnV0ZXMoKX0pKSxLNz0kNy5yYW5nZSxaNz1mNygoZnVuY3Rpb24odCl7dC5zZXRVVENNaW51dGVzKDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCtlKnY3KX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQpL3Y3fSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0hvdXJzKCl9KSksSjc9WjcucmFuZ2UsUTc9ZjcoKGZ1bmN0aW9uKHQpe3Quc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFVUQ0RhdGUodC5nZXRVVENEYXRlKCkrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS9iN30pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENEYXRlKCktMX0pKSx0dHQ9UTcucmFuZ2U7ZnVuY3Rpb24gZXR0KHQpe3JldHVybiBmNygoZnVuY3Rpb24oZSl7ZS5zZXRVVENEYXRlKGUuZ2V0VVRDRGF0ZSgpLShlLmdldFVUQ0RheSgpKzctdCklNyksZS5zZXRVVENIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKSs3KmUpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkveDd9KSl9dmFyIG50dD1ldHQoMCksaXR0PWV0dCgxKSxydHQ9ZXR0KDIpLG90dD1ldHQoMyksYXR0PWV0dCg0KSxzdHQ9ZXR0KDUpLGx0dD1ldHQoNiksY3R0PW50dC5yYW5nZSx1dHQ9aXR0LnJhbmdlLGh0dD1ydHQucmFuZ2UsZHR0PW90dC5yYW5nZSxwdHQ9YXR0LnJhbmdlLGZ0dD1zdHQucmFuZ2UsbXR0PWx0dC5yYW5nZSxndHQ9ZjcoKGZ1bmN0aW9uKHQpe3Quc2V0VVRDRGF0ZSgxKSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENNb250aCh0LmdldFVUQ01vbnRoKCkrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXRVVENNb250aCgpLXQuZ2V0VVRDTW9udGgoKSsxMiooZS5nZXRVVENGdWxsWWVhcigpLXQuZ2V0VVRDRnVsbFllYXIoKSl9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDTW9udGgoKX0pKSxfdHQ9Z3R0LnJhbmdlLHl0dD1mNygoZnVuY3Rpb24odCl7dC5zZXRVVENNb250aCgwLDEpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFVUQ0Z1bGxZZWFyKHQuZ2V0VVRDRnVsbFllYXIoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldFVUQ0Z1bGxZZWFyKCktdC5nZXRVVENGdWxsWWVhcigpfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0Z1bGxZZWFyKCl9KSk7eXR0LmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiBpc0Zpbml0ZSh0PU1hdGguZmxvb3IodCkpJiZ0PjA/ZjcoKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDRnVsbFllYXIoTWF0aC5mbG9vcihlLmdldFVUQ0Z1bGxZZWFyKCkvdCkqdCksZS5zZXRVVENNb250aCgwLDEpLGUuc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24oZSxuKXtlLnNldFVUQ0Z1bGxZZWFyKGUuZ2V0VVRDRnVsbFllYXIoKStuKnQpfSkpOm51bGx9O3ZhciB2dHQ9eXR0LnJhbmdlLGJ0dD1uZXcgRGF0ZSx4dHQ9bmV3IERhdGU7ZnVuY3Rpb24gd3R0KHQsZSxuLGkpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIHQoZT0wPT09YXJndW1lbnRzLmxlbmd0aD9uZXcgRGF0ZTpuZXcgRGF0ZSgrZSkpLGV9cmV0dXJuIHIuZmxvb3I9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoZT1uZXcgRGF0ZSgrZSkpLGV9LHIuY2VpbD1mdW5jdGlvbihuKXtyZXR1cm4gdChuPW5ldyBEYXRlKG4tMSkpLGUobiwxKSx0KG4pLG59LHIucm91bmQ9ZnVuY3Rpb24odCl7dmFyIGU9cih0KSxuPXIuY2VpbCh0KTtyZXR1cm4gdC1lPG4tdD9lOm59LHIub2Zmc2V0PWZ1bmN0aW9uKHQsbil7cmV0dXJuIGUodD1uZXcgRGF0ZSgrdCksbnVsbD09bj8xOk1hdGguZmxvb3IobikpLHR9LHIucmFuZ2U9ZnVuY3Rpb24obixpLG8pe3ZhciBhLHM9W107aWYobj1yLmNlaWwobiksbz1udWxsPT1vPzE6TWF0aC5mbG9vcihvKSwhKG48aSYmbz4wKSlyZXR1cm4gcztkb3tzLnB1c2goYT1uZXcgRGF0ZSgrbikpLGUobixvKSx0KG4pfXdoaWxlKGE8biYmbjxpKTtyZXR1cm4gc30sci5maWx0ZXI9ZnVuY3Rpb24obil7cmV0dXJuIHd0dCgoZnVuY3Rpb24oZSl7aWYoZT49ZSlmb3IoO3QoZSksIW4oZSk7KWUuc2V0VGltZShlLTEpfSksKGZ1bmN0aW9uKHQsaSl7aWYodD49dClpZihpPDApZm9yKDsrK2k8PTA7KWZvcig7ZSh0LC0xKSwhbih0KTspO2Vsc2UgZm9yKDstLWk+PTA7KWZvcig7ZSh0LDEpLCFuKHQpOyk7fSkpfSxuJiYoci5jb3VudD1mdW5jdGlvbihlLGkpe3JldHVybiBidHQuc2V0VGltZSgrZSkseHR0LnNldFRpbWUoK2kpLHQoYnR0KSx0KHh0dCksTWF0aC5mbG9vcihuKGJ0dCx4dHQpKX0sci5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLmZsb29yKHQpLGlzRmluaXRlKHQpJiZ0PjA/dD4xP3IuZmlsdGVyKGk/ZnVuY3Rpb24oZSl7cmV0dXJuIGkoZSkldD09MH06ZnVuY3Rpb24oZSl7cmV0dXJuIHIuY291bnQoMCxlKSV0PT0wfSk6cjpudWxsfSkscn12YXIgU3R0PTg2NGU1LE10dD02MDQ4ZTUsRXR0PXd0dCgoZnVuY3Rpb24odCl7dC5zZXRIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0RGF0ZSh0LmdldERhdGUoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQtNmU0KihlLmdldFRpbWV6b25lT2Zmc2V0KCktdC5nZXRUaW1lem9uZU9mZnNldCgpKSkvU3R0fSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldERhdGUoKS0xfSkpO2Z1bmN0aW9uIFR0dCh0KXtyZXR1cm4gd3R0KChmdW5jdGlvbihlKXtlLnNldERhdGUoZS5nZXREYXRlKCktKGUuZ2V0RGF5KCkrNy10KSU3KSxlLnNldEhvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpKzcqZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10LTZlNCooZS5nZXRUaW1lem9uZU9mZnNldCgpLXQuZ2V0VGltZXpvbmVPZmZzZXQoKSkpL010dH0pKX12YXIgQ3R0PVR0dCgwKSxBdHQ9VHR0KDEpO1R0dCgyKSxUdHQoMyk7dmFyIGt0dD1UdHQoNCk7VHR0KDUpLFR0dCg2KTt2YXIgTHR0PXd0dCgoZnVuY3Rpb24odCl7dC5zZXRNb250aCgwLDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldEZ1bGxZZWFyKHQuZ2V0RnVsbFllYXIoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldEZ1bGxZZWFyKCktdC5nZXRGdWxsWWVhcigpfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEZ1bGxZZWFyKCl9KSk7THR0LmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiBpc0Zpbml0ZSh0PU1hdGguZmxvb3IodCkpJiZ0PjA/d3R0KChmdW5jdGlvbihlKXtlLnNldEZ1bGxZZWFyKE1hdGguZmxvb3IoZS5nZXRGdWxsWWVhcigpL3QpKnQpLGUuc2V0TW9udGgoMCwxKSxlLnNldEhvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKGUsbil7ZS5zZXRGdWxsWWVhcihlLmdldEZ1bGxZZWFyKCkrbip0KX0pKTpudWxsfTt2YXIgUHR0PXd0dCgoZnVuY3Rpb24odCl7dC5zZXRVVENIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQpL1N0dH0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENEYXRlKCktMX0pKTtmdW5jdGlvbiBOdHQodCl7cmV0dXJuIHd0dCgoZnVuY3Rpb24oZSl7ZS5zZXRVVENEYXRlKGUuZ2V0VVRDRGF0ZSgpLShlLmdldFVUQ0RheSgpKzctdCklNyksZS5zZXRVVENIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKSs3KmUpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvTXR0fSkpfXZhciBJdHQ9TnR0KDApLE90dD1OdHQoMSk7TnR0KDIpLE50dCgzKTt2YXIgUnR0PU50dCg0KTtOdHQoNSksTnR0KDYpO3ZhciB6dHQ9d3R0KChmdW5jdGlvbih0KXt0LnNldFVUQ01vbnRoKDAsMSksdC5zZXRVVENIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VVRDRnVsbFllYXIodC5nZXRVVENGdWxsWWVhcigpK2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZ2V0VVRDRnVsbFllYXIoKS10LmdldFVUQ0Z1bGxZZWFyKCl9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDRnVsbFllYXIoKX0pKTtmdW5jdGlvbiBEdHQodCl7aWYoMDw9dC55JiZ0Lnk8MTAwKXt2YXIgZT1uZXcgRGF0ZSgtMSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCk7cmV0dXJuIGUuc2V0RnVsbFllYXIodC55KSxlfXJldHVybiBuZXcgRGF0ZSh0LnksdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpfWZ1bmN0aW9uIEJ0dCh0KXtpZigwPD10LnkmJnQueTwxMDApe3ZhciBlPW5ldyBEYXRlKERhdGUuVVRDKC0xLHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKSk7cmV0dXJuIGUuc2V0VVRDRnVsbFllYXIodC55KSxlfXJldHVybiBuZXcgRGF0ZShEYXRlLlVUQyh0LnksdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpKX1mdW5jdGlvbiBIdHQodCl7cmV0dXJue3k6dCxtOjAsZDoxLEg6MCxNOjAsUzowLEw6MH19ZnVuY3Rpb24gRnR0KHQpe3ZhciBlPXQuZGF0ZVRpbWUsbj10LmRhdGUsaT10LnRpbWUscj10LnBlcmlvZHMsbz10LmRheXMsYT10LnNob3J0RGF5cyxzPXQubW9udGhzLGw9dC5zaG9ydE1vbnRocyxjPUp0dChyKSx1PVF0dChyKSxoPUp0dChvKSxkPVF0dChvKSxwPUp0dChhKSxmPVF0dChhKSxtPUp0dChzKSxnPVF0dChzKSxfPUp0dChsKSx5PVF0dChsKSx2PXthOmZ1bmN0aW9uIGIodCl7cmV0dXJuIGFbdC5nZXREYXkoKV19LEE6ZnVuY3Rpb24geCh0KXtyZXR1cm4gb1t0LmdldERheSgpXX0sYjpmdW5jdGlvbiB3KHQpe3JldHVybiBsW3QuZ2V0TW9udGgoKV19LEI6ZnVuY3Rpb24gUyh0KXtyZXR1cm4gc1t0LmdldE1vbnRoKCldfSxjOm51bGwsZDpiZXQsZTpiZXQsZjpUZXQsSDp4ZXQsSTp3ZXQsajpNZXQsTDpFZXQsbTpDZXQsTTpBZXQscDpmdW5jdGlvbiBNKHQpe3JldHVybiByWysodC5nZXRIb3VycygpPj0xMildfSxROm5udCxzOmludCxTOmtldCx1OkxldCxVOlBldCxWOk5ldCx3OklldCxXOk9ldCx4Om51bGwsWDpudWxsLHk6UmV0LFk6emV0LFo6RGV0LCIlIjplbnR9LEU9e2E6ZnVuY3Rpb24gVCh0KXtyZXR1cm4gYVt0LmdldFVUQ0RheSgpXX0sQTpmdW5jdGlvbiBDKHQpe3JldHVybiBvW3QuZ2V0VVRDRGF5KCldfSxiOmZ1bmN0aW9uIEEodCl7cmV0dXJuIGxbdC5nZXRVVENNb250aCgpXX0sQjpmdW5jdGlvbiBrKHQpe3JldHVybiBzW3QuZ2V0VVRDTW9udGgoKV19LGM6bnVsbCxkOkJldCxlOkJldCxmOmpldCxIOkhldCxJOkZldCxqOlZldCxMOlVldCxtOkdldCxNOldldCxwOmZ1bmN0aW9uIEwodCl7cmV0dXJuIHJbKyh0LmdldFVUQ0hvdXJzKCk+PTEyKV19LFE6bm50LHM6aW50LFM6cWV0LHU6WWV0LFU6WGV0LFY6JGV0LHc6S2V0LFc6WmV0LHg6bnVsbCxYOm51bGwseTpKZXQsWTpRZXQsWjp0bnQsIiUiOmVudH0sUD17YTpmdW5jdGlvbiBOKHQsZSxuKXt2YXIgaT1wLmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIGk/KHQudz1mW2lbMF0udG9Mb3dlckNhc2UoKV0sbitpWzBdLmxlbmd0aCk6LTF9LEE6ZnVuY3Rpb24gSSh0LGUsbil7dmFyIGk9aC5leGVjKGUuc2xpY2UobikpO3JldHVybiBpPyh0Lnc9ZFtpWzBdLnRvTG93ZXJDYXNlKCldLG4raVswXS5sZW5ndGgpOi0xfSxiOmZ1bmN0aW9uIE8odCxlLG4pe3ZhciBpPV8uZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gaT8odC5tPXlbaVswXS50b0xvd2VyQ2FzZSgpXSxuK2lbMF0ubGVuZ3RoKTotMX0sQjpmdW5jdGlvbiBSKHQsZSxuKXt2YXIgaT1tLmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIGk/KHQubT1nW2lbMF0udG9Mb3dlckNhc2UoKV0sbitpWzBdLmxlbmd0aCk6LTF9LGM6ZnVuY3Rpb24geih0LG4saSl7cmV0dXJuIFUodCxlLG4saSl9LGQ6dWV0LGU6dWV0LGY6Z2V0LEg6ZGV0LEk6ZGV0LGo6aGV0LEw6bWV0LG06Y2V0LE06cGV0LHA6ZnVuY3Rpb24gRCh0LGUsbil7dmFyIGk9Yy5leGVjKGUuc2xpY2UobikpO3JldHVybiBpPyh0LnA9dVtpWzBdLnRvTG93ZXJDYXNlKCldLG4raVswXS5sZW5ndGgpOi0xfSxROnlldCxzOnZldCxTOmZldCx1OmVldCxVOm5ldCxWOmlldCx3OnRldCxXOnJldCx4OmZ1bmN0aW9uIEIodCxlLGkpe3JldHVybiBVKHQsbixlLGkpfSxYOmZ1bmN0aW9uIEgodCxlLG4pe3JldHVybiBVKHQsaSxlLG4pfSx5OmFldCxZOm9ldCxaOnNldCwiJSI6X2V0fTtmdW5jdGlvbiBGKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBpLHIsbyxhPVtdLHM9LTEsbD0wLGM9dC5sZW5ndGg7Zm9yKG4gaW5zdGFuY2VvZiBEYXRlfHwobj1uZXcgRGF0ZSgrbikpOysrczxjOykzNz09PXQuY2hhckNvZGVBdChzKSYmKGEucHVzaCh0LnNsaWNlKGwscykpLG51bGwhPShyPXF0dFtpPXQuY2hhckF0KCsrcyldKT9pPXQuY2hhckF0KCsrcyk6cj0iZSI9PT1pPyIgIjoiMCIsKG89ZVtpXSkmJihpPW8obixyKSksYS5wdXNoKGkpLGw9cysxKTtyZXR1cm4gYS5wdXNoKHQuc2xpY2UobCxzKSksYS5qb2luKCIiKX19ZnVuY3Rpb24gVih0LGUpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgaSxyLG89SHR0KDE5MDApO2lmKFUobyx0LG4rPSIiLDApIT1uLmxlbmd0aClyZXR1cm4gbnVsbDtpZigiUSJpbiBvKXJldHVybiBuZXcgRGF0ZShvLlEpO2lmKCJwImluIG8mJihvLkg9by5IJTEyKzEyKm8ucCksIlYiaW4gbyl7aWYoby5WPDF8fG8uVj41MylyZXR1cm4gbnVsbDsidyJpbiBvfHwoby53PTEpLCJaImluIG8/KHI9KGk9QnR0KEh0dChvLnkpKSkuZ2V0VVRDRGF5KCksaT1yPjR8fDA9PT1yP090dC5jZWlsKGkpOk90dChpKSxpPVB0dC5vZmZzZXQoaSw3KihvLlYtMSkpLG8ueT1pLmdldFVUQ0Z1bGxZZWFyKCksby5tPWkuZ2V0VVRDTW9udGgoKSxvLmQ9aS5nZXRVVENEYXRlKCkrKG8udys2KSU3KToocj0oaT1lKEh0dChvLnkpKSkuZ2V0RGF5KCksaT1yPjR8fDA9PT1yP0F0dC5jZWlsKGkpOkF0dChpKSxpPUV0dC5vZmZzZXQoaSw3KihvLlYtMSkpLG8ueT1pLmdldEZ1bGxZZWFyKCksby5tPWkuZ2V0TW9udGgoKSxvLmQ9aS5nZXREYXRlKCkrKG8udys2KSU3KX1lbHNlKCJXImluIG98fCJVImluIG8pJiYoInciaW4gb3x8KG8udz0idSJpbiBvP28udSU3OiJXImluIG8/MTowKSxyPSJaImluIG8/QnR0KEh0dChvLnkpKS5nZXRVVENEYXkoKTplKEh0dChvLnkpKS5nZXREYXkoKSxvLm09MCxvLmQ9IlciaW4gbz8oby53KzYpJTcrNypvLlctKHIrNSklNzpvLncrNypvLlUtKHIrNiklNyk7cmV0dXJuIloiaW4gbz8oby5IKz1vLlovMTAwfDAsby5NKz1vLlolMTAwLEJ0dChvKSk6ZShvKX19ZnVuY3Rpb24gVSh0LGUsbixpKXtmb3IodmFyIHIsbyxhPTAscz1lLmxlbmd0aCxsPW4ubGVuZ3RoO2E8czspe2lmKGk+PWwpcmV0dXJuLTE7aWYoMzc9PT0ocj1lLmNoYXJDb2RlQXQoYSsrKSkpe2lmKHI9ZS5jaGFyQXQoYSsrKSwhKG89UFtyIGluIHF0dD9lLmNoYXJBdChhKyspOnJdKXx8KGk9byh0LG4saSkpPDApcmV0dXJuLTF9ZWxzZSBpZihyIT1uLmNoYXJDb2RlQXQoaSsrKSlyZXR1cm4tMX1yZXR1cm4gaX1yZXR1cm4gdi54PUYobix2KSx2Llg9RihpLHYpLHYuYz1GKGUsdiksRS54PUYobixFKSxFLlg9RihpLEUpLEUuYz1GKGUsRSkse2Zvcm1hdDpmdW5jdGlvbih0KXt2YXIgZT1GKHQrPSIiLHYpO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGV9LHBhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPVYodCs9IiIsRHR0KTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfSx1dGNGb3JtYXQ6ZnVuY3Rpb24odCl7dmFyIGU9Rih0Kz0iIixFKTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfSx1dGNQYXJzZTpmdW5jdGlvbih0KXt2YXIgZT1WKHQsQnR0KTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfX19enR0LmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiBpc0Zpbml0ZSh0PU1hdGguZmxvb3IodCkpJiZ0PjA/d3R0KChmdW5jdGlvbihlKXtlLnNldFVUQ0Z1bGxZZWFyKE1hdGguZmxvb3IoZS5nZXRVVENGdWxsWWVhcigpL3QpKnQpLGUuc2V0VVRDTW9udGgoMCwxKSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKGUsbil7ZS5zZXRVVENGdWxsWWVhcihlLmdldFVUQ0Z1bGxZZWFyKCkrbip0KX0pKTpudWxsfTt2YXIgVnR0LFV0dCxqdHQsR3R0LFd0dCxxdHQ9eyItIjoiIixfOiIgIiwwOiIwIn0sWXR0PS9eXHMqXGQrLyxYdHQ9L14lLywkdHQ9L1tcXF4kKis/fFtcXSgpLnt9XS9nO2Z1bmN0aW9uIEt0dCh0LGUsbil7dmFyIGk9dDwwPyItIjoiIixyPShpPy10OnQpKyIiLG89ci5sZW5ndGg7cmV0dXJuIGkrKG88bj9uZXcgQXJyYXkobi1vKzEpLmpvaW4oZSkrcjpyKX1mdW5jdGlvbiBadHQodCl7cmV0dXJuIHQucmVwbGFjZSgkdHQsIlxcJCYiKX1mdW5jdGlvbiBKdHQodCl7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK3QubWFwKFp0dCkuam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIFF0dCh0KXtmb3IodmFyIGU9e30sbj0tMSxpPXQubGVuZ3RoOysrbjxpOyllW3Rbbl0udG9Mb3dlckNhc2UoKV09bjtyZXR1cm4gZX1mdW5jdGlvbiB0ZXQodCxlLG4pe3ZhciBpPVl0dC5leGVjKGUuc2xpY2UobixuKzEpKTtyZXR1cm4gaT8odC53PStpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGVldCh0LGUsbil7dmFyIGk9WXR0LmV4ZWMoZS5zbGljZShuLG4rMSkpO3JldHVybiBpPyh0LnU9K2lbMF0sbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbmV0KHQsZSxuKXt2YXIgaT1ZdHQuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIGk/KHQuVT0raVswXSxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBpZXQodCxlLG4pe3ZhciBpPVl0dC5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gaT8odC5WPStpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHJldCh0LGUsbil7dmFyIGk9WXR0LmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiBpPyh0Llc9K2lbMF0sbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gb2V0KHQsZSxuKXt2YXIgaT1ZdHQuZXhlYyhlLnNsaWNlKG4sbis0KSk7cmV0dXJuIGk/KHQueT0raVswXSxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBhZXQodCxlLG4pe3ZhciBpPVl0dC5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gaT8odC55PStpWzBdKygraVswXT42OD8xOTAwOjJlMyksbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gc2V0KHQsZSxuKXt2YXIgaT0vXihaKXwoWystXVxkXGQpKD86Oj8oXGRcZCkpPy8uZXhlYyhlLnNsaWNlKG4sbis2KSk7cmV0dXJuIGk/KHQuWj1pWzFdPzA6LShpWzJdKyhpWzNdfHwiMDAiKSksbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gY2V0KHQsZSxuKXt2YXIgaT1ZdHQuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIGk/KHQubT1pWzBdLTEsbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gdWV0KHQsZSxuKXt2YXIgaT1ZdHQuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIGk/KHQuZD0raVswXSxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBoZXQodCxlLG4pe3ZhciBpPVl0dC5leGVjKGUuc2xpY2UobixuKzMpKTtyZXR1cm4gaT8odC5tPTAsdC5kPStpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGRldCh0LGUsbil7dmFyIGk9WXR0LmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiBpPyh0Lkg9K2lbMF0sbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcGV0KHQsZSxuKXt2YXIgaT1ZdHQuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIGk/KHQuTT0raVswXSxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBmZXQodCxlLG4pe3ZhciBpPVl0dC5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gaT8odC5TPStpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIG1ldCh0LGUsbil7dmFyIGk9WXR0LmV4ZWMoZS5zbGljZShuLG4rMykpO3JldHVybiBpPyh0Lkw9K2lbMF0sbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gZ2V0KHQsZSxuKXt2YXIgaT1ZdHQuZXhlYyhlLnNsaWNlKG4sbis2KSk7cmV0dXJuIGk/KHQuTD1NYXRoLmZsb29yKGlbMF0vMWUzKSxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBfZXQodCxlLG4pe3ZhciBpPVh0dC5leGVjKGUuc2xpY2UobixuKzEpKTtyZXR1cm4gaT9uK2lbMF0ubGVuZ3RoOi0xfWZ1bmN0aW9uIHlldCh0LGUsbil7dmFyIGk9WXR0LmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIGk/KHQuUT0raVswXSxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB2ZXQodCxlLG4pe3ZhciBpPVl0dC5leGVjKGUuc2xpY2UobikpO3JldHVybiBpPyh0LlE9MWUzKitpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGJldCh0LGUpe3JldHVybiBLdHQodC5nZXREYXRlKCksZSwyKX1mdW5jdGlvbiB4ZXQodCxlKXtyZXR1cm4gS3R0KHQuZ2V0SG91cnMoKSxlLDIpfWZ1bmN0aW9uIHdldCh0LGUpe3JldHVybiBLdHQodC5nZXRIb3VycygpJTEyfHwxMixlLDIpfWZ1bmN0aW9uIE1ldCh0LGUpe3JldHVybiBLdHQoMStFdHQuY291bnQoTHR0KHQpLHQpLGUsMyl9ZnVuY3Rpb24gRWV0KHQsZSl7cmV0dXJuIEt0dCh0LmdldE1pbGxpc2Vjb25kcygpLGUsMyl9ZnVuY3Rpb24gVGV0KHQsZSl7cmV0dXJuIEVldCh0LGUpKyIwMDAifWZ1bmN0aW9uIENldCh0LGUpe3JldHVybiBLdHQodC5nZXRNb250aCgpKzEsZSwyKX1mdW5jdGlvbiBBZXQodCxlKXtyZXR1cm4gS3R0KHQuZ2V0TWludXRlcygpLGUsMil9ZnVuY3Rpb24ga2V0KHQsZSl7cmV0dXJuIEt0dCh0LmdldFNlY29uZHMoKSxlLDIpfWZ1bmN0aW9uIExldCh0KXt2YXIgZT10LmdldERheSgpO3JldHVybiAwPT09ZT83OmV9ZnVuY3Rpb24gUGV0KHQsZSl7cmV0dXJuIEt0dChDdHQuY291bnQoTHR0KHQpLHQpLGUsMil9ZnVuY3Rpb24gTmV0KHQsZSl7dmFyIG49dC5nZXREYXkoKTtyZXR1cm4gdD1uPj00fHwwPT09bj9rdHQodCk6a3R0LmNlaWwodCksS3R0KGt0dC5jb3VudChMdHQodCksdCkrKDQ9PT1MdHQodCkuZ2V0RGF5KCkpLGUsMil9ZnVuY3Rpb24gSWV0KHQpe3JldHVybiB0LmdldERheSgpfWZ1bmN0aW9uIE9ldCh0LGUpe3JldHVybiBLdHQoQXR0LmNvdW50KEx0dCh0KSx0KSxlLDIpfWZ1bmN0aW9uIFJldCh0LGUpe3JldHVybiBLdHQodC5nZXRGdWxsWWVhcigpJTEwMCxlLDIpfWZ1bmN0aW9uIHpldCh0LGUpe3JldHVybiBLdHQodC5nZXRGdWxsWWVhcigpJTFlNCxlLDQpfWZ1bmN0aW9uIERldCh0KXt2YXIgZT10LmdldFRpbWV6b25lT2Zmc2V0KCk7cmV0dXJuKGU+MD8iLSI6KGUqPS0xLCIrIikpK0t0dChlLzYwfDAsIjAiLDIpK0t0dChlJTYwLCIwIiwyKX1mdW5jdGlvbiBCZXQodCxlKXtyZXR1cm4gS3R0KHQuZ2V0VVRDRGF0ZSgpLGUsMil9ZnVuY3Rpb24gSGV0KHQsZSl7cmV0dXJuIEt0dCh0LmdldFVUQ0hvdXJzKCksZSwyKX1mdW5jdGlvbiBGZXQodCxlKXtyZXR1cm4gS3R0KHQuZ2V0VVRDSG91cnMoKSUxMnx8MTIsZSwyKX1mdW5jdGlvbiBWZXQodCxlKXtyZXR1cm4gS3R0KDErUHR0LmNvdW50KHp0dCh0KSx0KSxlLDMpfWZ1bmN0aW9uIFVldCh0LGUpe3JldHVybiBLdHQodC5nZXRVVENNaWxsaXNlY29uZHMoKSxlLDMpfWZ1bmN0aW9uIGpldCh0LGUpe3JldHVybiBVZXQodCxlKSsiMDAwIn1mdW5jdGlvbiBHZXQodCxlKXtyZXR1cm4gS3R0KHQuZ2V0VVRDTW9udGgoKSsxLGUsMil9ZnVuY3Rpb24gV2V0KHQsZSl7cmV0dXJuIEt0dCh0LmdldFVUQ01pbnV0ZXMoKSxlLDIpfWZ1bmN0aW9uIHFldCh0LGUpe3JldHVybiBLdHQodC5nZXRVVENTZWNvbmRzKCksZSwyKX1mdW5jdGlvbiBZZXQodCl7dmFyIGU9dC5nZXRVVENEYXkoKTtyZXR1cm4gMD09PWU/NzplfWZ1bmN0aW9uIFhldCh0LGUpe3JldHVybiBLdHQoSXR0LmNvdW50KHp0dCh0KSx0KSxlLDIpfWZ1bmN0aW9uICRldCh0LGUpe3ZhciBuPXQuZ2V0VVRDRGF5KCk7cmV0dXJuIHQ9bj49NHx8MD09PW4/UnR0KHQpOlJ0dC5jZWlsKHQpLEt0dChSdHQuY291bnQoenR0KHQpLHQpKyg0PT09enR0KHQpLmdldFVUQ0RheSgpKSxlLDIpfWZ1bmN0aW9uIEtldCh0KXtyZXR1cm4gdC5nZXRVVENEYXkoKX1mdW5jdGlvbiBaZXQodCxlKXtyZXR1cm4gS3R0KE90dC5jb3VudCh6dHQodCksdCksZSwyKX1mdW5jdGlvbiBKZXQodCxlKXtyZXR1cm4gS3R0KHQuZ2V0VVRDRnVsbFllYXIoKSUxMDAsZSwyKX1mdW5jdGlvbiBRZXQodCxlKXtyZXR1cm4gS3R0KHQuZ2V0VVRDRnVsbFllYXIoKSUxZTQsZSw0KX1mdW5jdGlvbiB0bnQoKXtyZXR1cm4iKzAwMDAifWZ1bmN0aW9uIGVudCgpe3JldHVybiIlIn1mdW5jdGlvbiBubnQodCl7cmV0dXJuK3R9ZnVuY3Rpb24gaW50KHQpe3JldHVybiBNYXRoLmZsb29yKCt0LzFlMyl9ZnVuY3Rpb24gcm50KHQpe3JldHVybiBWdHQ9RnR0KHQpLFV0dD1WdHQuZm9ybWF0LGp0dD1WdHQucGFyc2UsR3R0PVZ0dC51dGNGb3JtYXQsV3R0PVZ0dC51dGNQYXJzZSxWdHR9cm50KHtkYXRlVGltZToiJXgsICVYIixkYXRlOiIlLW0vJS1kLyVZIix0aW1lOiIlLUk6JU06JVMgJXAiLHBlcmlvZHM6WyJBTSIsIlBNIl0sZGF5czpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sc2hvcnREYXlzOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sbW9udGhzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxzaG9ydE1vbnRoczpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdfSk7dmFyIG9udCxhbnQsc250PSIlWS0lbS0lZFQlSDolTTolUy4lTFoiLGxudD1EYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZz9mdW5jdGlvbiBjbnQodCl7cmV0dXJuIHQudG9JU09TdHJpbmcoKX06R3R0KHNudCksdW50PStuZXcgRGF0ZSgiMjAwMC0wMS0wMVQwMDowMDowMC4wMDBaIik/ZnVuY3Rpb24gaG50KHQpe3ZhciBlPW5ldyBEYXRlKHQpO3JldHVybiBpc05hTihlKT9udWxsOmV9Old0dChzbnQpLGRudD0wLHBudD0wLGZudD0wLG1udD0wLGdudD0wLF9udD0wLHludD0ib2JqZWN0Ij09dHlwZW9mIHBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSx2bnQ9Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6ZnVuY3Rpb24odCl7c2V0VGltZW91dCh0LDE3KX07ZnVuY3Rpb24gYm50KCl7cmV0dXJuIGdudHx8KHZudCh4bnQpLGdudD15bnQubm93KCkrX250KX1mdW5jdGlvbiB4bnQoKXtnbnQ9MH1mdW5jdGlvbiB3bnQoKXt0aGlzLl9jYWxsPXRoaXMuX3RpbWU9dGhpcy5fbmV4dD1udWxsfWZ1bmN0aW9uIFNudCh0LGUsbil7dmFyIGk9bmV3IHdudDtyZXR1cm4gaS5yZXN0YXJ0KHQsZSxuKSxpfWZ1bmN0aW9uIE1udCgpe2JudCgpLCsrZG50O2Zvcih2YXIgdCxlPW9udDtlOykodD1nbnQtZS5fdGltZSk+PTAmJmUuX2NhbGwuY2FsbChudWxsLHQpLGU9ZS5fbmV4dDstLWRudH1mdW5jdGlvbiBFbnQoKXtnbnQ9KG1udD15bnQubm93KCkpK19udCxkbnQ9cG50PTA7dHJ5e01udCgpfWZpbmFsbHl7ZG50PTAsKGZ1bmN0aW9uIHQoKXtmb3IodmFyIHQsZSxuPW9udCxpPTEvMDtuOyluLl9jYWxsPyhpPm4uX3RpbWUmJihpPW4uX3RpbWUpLHQ9bixuPW4uX25leHQpOihlPW4uX25leHQsbi5fbmV4dD1udWxsLG49dD90Ll9uZXh0PWU6b250PWUpO2FudD10LENudChpKX0pKCksZ250PTB9fWZ1bmN0aW9uIFRudCgpe3ZhciB0PXludC5ub3coKSxlPXQtbW50O2U+MWUzJiYoX250LT1lLG1udD10KX1mdW5jdGlvbiBDbnQodCl7ZG50fHwocG50JiYocG50PWNsZWFyVGltZW91dChwbnQpKSx0LWdudD4yND8odDwxLzAmJihwbnQ9c2V0VGltZW91dChFbnQsdC15bnQubm93KCktX250KSksZm50JiYoZm50PWNsZWFySW50ZXJ2YWwoZm50KSkpOihmbnR8fChtbnQ9eW50Lm5vdygpLGZudD1zZXRJbnRlcnZhbChUbnQsMWUzKSksZG50PTEsdm50KEVudCkpKX13bnQucHJvdG90eXBlPVNudC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOndudCxyZXN0YXJ0OmZ1bmN0aW9uKHQsZSxuKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiIpO249KG51bGw9PW4/Ym50KCk6K24pKyhudWxsPT1lPzA6K2UpLHRoaXMuX25leHR8fGFudD09PXRoaXN8fChhbnQ/YW50Ll9uZXh0PXRoaXM6b250PXRoaXMsYW50PXRoaXMpLHRoaXMuX2NhbGw9dCx0aGlzLl90aW1lPW4sQ250KCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLENudCgpKX19O3ZhciBBbnQ9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLGtudD17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6QW50LHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIn07ZnVuY3Rpb24gTG50KHQpe3ZhciBlPXQrPSIiLG49ZS5pbmRleE9mKCI6Iik7cmV0dXJuIG4+PTAmJiJ4bWxucyIhPT0oZT10LnNsaWNlKDAsbikpJiYodD10LnNsaWNlKG4rMSkpLGtudC5oYXNPd25Qcm9wZXJ0eShlKT97c3BhY2U6a250W2VdLGxvY2FsOnR9OnR9ZnVuY3Rpb24gUG50KHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMub3duZXJEb2N1bWVudCxuPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiBuPT09QW50JiZlLmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkk9PT1BbnQ/ZS5jcmVhdGVFbGVtZW50KHQpOmUuY3JlYXRlRWxlbWVudE5TKG4sdCl9fWZ1bmN0aW9uIE5udCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyh0LnNwYWNlLHQubG9jYWwpfX1mdW5jdGlvbiBJbnQodCl7dmFyIGU9TG50KHQpO3JldHVybihlLmxvY2FsP05udDpQbnQpKGUpfWZ1bmN0aW9uIE9udCgpe31mdW5jdGlvbiBSbnQodCl7cmV0dXJuIG51bGw9PXQ/T250OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3Rvcih0KX19ZnVuY3Rpb24gem50KCl7cmV0dXJuW119ZnVuY3Rpb24gRG50KHQpe3JldHVybiBudWxsPT10P3pudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwodCl9fWZ1bmN0aW9uIEJudCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXRjaGVzKHQpfX1mdW5jdGlvbiBIbnQodCl7cmV0dXJuIG5ldyBBcnJheSh0Lmxlbmd0aCl9ZnVuY3Rpb24gRm50KHQsZSl7dGhpcy5vd25lckRvY3VtZW50PXQub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST10Lm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PXQsdGhpcy5fX2RhdGFfXz1lfWZ1bmN0aW9uIFZudCh0LGUsbixpLHIsbyl7Zm9yKHZhciBhLHM9MCxsPWUubGVuZ3RoLGM9by5sZW5ndGg7czxjOysrcykoYT1lW3NdKT8oYS5fX2RhdGFfXz1vW3NdLGlbc109YSk6bltzXT1uZXcgRm50KHQsb1tzXSk7Zm9yKDtzPGw7KytzKShhPWVbc10pJiYocltzXT1hKX1mdW5jdGlvbiBVbnQodCxlLG4saSxyLG8sYSl7dmFyIHMsbCxjLHU9e30saD1lLmxlbmd0aCxkPW8ubGVuZ3RoLHA9bmV3IEFycmF5KGgpO2ZvcihzPTA7czxoOysrcykobD1lW3NdKSYmKHBbc109Yz0iJCIrYS5jYWxsKGwsbC5fX2RhdGFfXyxzLGUpLGMgaW4gdT9yW3NdPWw6dVtjXT1sKTtmb3Iocz0wO3M8ZDsrK3MpKGw9dVtjPSIkIithLmNhbGwodCxvW3NdLHMsbyldKT8oaVtzXT1sLGwuX19kYXRhX189b1tzXSx1W2NdPW51bGwpOm5bc109bmV3IEZudCh0LG9bc10pO2ZvcihzPTA7czxoOysrcykobD1lW3NdKSYmdVtwW3NdXT09PWwmJihyW3NdPWwpfWZ1bmN0aW9uIGpudCh0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6dD49ZT8wOk5hTn1mdW5jdGlvbiBHbnQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9fWZ1bmN0aW9uIFdudCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCl9fWZ1bmN0aW9uIHFudCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKHQsZSl9fWZ1bmN0aW9uIFludCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsLGUpfX1mdW5jdGlvbiBYbnQodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1uP3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpOnRoaXMuc2V0QXR0cmlidXRlKHQsbil9fWZ1bmN0aW9uICRudCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PW4/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsLG4pfX1mdW5jdGlvbiBLbnQodCl7cmV0dXJuIHQub3duZXJEb2N1bWVudCYmdC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHx0LmRvY3VtZW50JiZ0fHx0LmRlZmF1bHRWaWV3fWZ1bmN0aW9uIFpudCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpfX1mdW5jdGlvbiBKbnQodCxlLG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxlLG4pfX1mdW5jdGlvbiBRbnQodCxlLG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciBpPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PWk/dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KTp0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQsaSxuKX19ZnVuY3Rpb24gdGl0KHQsZSl7cmV0dXJuIHQuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShlKXx8S250KHQpLmdldENvbXB1dGVkU3R5bGUodCxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKGUpfWZ1bmN0aW9uIGVpdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtkZWxldGUgdGhpc1t0XX19ZnVuY3Rpb24gbml0KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpc1t0XT1lfX1mdW5jdGlvbiBpaXQodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1uP2RlbGV0ZSB0aGlzW3RdOnRoaXNbdF09bn19ZnVuY3Rpb24gcml0KHQpe3JldHVybiB0LnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiBvaXQodCl7cmV0dXJuIHQuY2xhc3NMaXN0fHxuZXcgYWl0KHQpfWZ1bmN0aW9uIGFpdCh0KXt0aGlzLl9ub2RlPXQsdGhpcy5fbmFtZXM9cml0KHQuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9ZnVuY3Rpb24gc2l0KHQsZSl7Zm9yKHZhciBuPW9pdCh0KSxpPS0xLHI9ZS5sZW5ndGg7KytpPHI7KW4uYWRkKGVbaV0pfWZ1bmN0aW9uIGxpdCh0LGUpe2Zvcih2YXIgbj1vaXQodCksaT0tMSxyPWUubGVuZ3RoOysraTxyOyluLnJlbW92ZShlW2ldKX1mdW5jdGlvbiBjaXQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7c2l0KHRoaXMsdCl9fWZ1bmN0aW9uIHVpdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtsaXQodGhpcyx0KX19ZnVuY3Rpb24gaGl0KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7KGUuYXBwbHkodGhpcyxhcmd1bWVudHMpP3NpdDpsaXQpKHRoaXMsdCl9fWZ1bmN0aW9uIGRpdCgpe3RoaXMudGV4dENvbnRlbnQ9IiJ9ZnVuY3Rpb24gcGl0KHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9dH19ZnVuY3Rpb24gZml0KHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMudGV4dENvbnRlbnQ9bnVsbD09ZT8iIjplfX1mdW5jdGlvbiBtaXQoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiBnaXQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9dH19ZnVuY3Rpb24gX2l0KHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPW51bGw9PWU/IiI6ZX19ZnVuY3Rpb24geWl0KCl7dGhpcy5uZXh0U2libGluZyYmdGhpcy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMpfWZ1bmN0aW9uIHZpdCgpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIGJpdCgpe3JldHVybiBudWxsfWZ1bmN0aW9uIHhpdCgpe3ZhciB0PXRoaXMucGFyZW50Tm9kZTt0JiZ0LnJlbW92ZUNoaWxkKHRoaXMpfWZ1bmN0aW9uIHdpdCgpe3ZhciB0PXRoaXMuY2xvbmVOb2RlKCExKSxlPXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gZT9lLmluc2VydEJlZm9yZSh0LHRoaXMubmV4dFNpYmxpbmcpOnR9ZnVuY3Rpb24gU2l0KCl7dmFyIHQ9dGhpcy5jbG9uZU5vZGUoITApLGU9dGhpcy5wYXJlbnROb2RlO3JldHVybiBlP2UuaW5zZXJ0QmVmb3JlKHQsdGhpcy5uZXh0U2libGluZyk6dH1GbnQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpGbnQsYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUodCx0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUodCxlKX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3IodCl9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKHQpfX0sYWl0LnByb3RvdHlwZT17YWRkOmZ1bmN0aW9uKHQpe3RoaXMuX25hbWVzLmluZGV4T2YodCk8MCYmKHRoaXMuX25hbWVzLnB1c2godCksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0scmVtb3ZlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX25hbWVzLmluZGV4T2YodCk7ZT49MCYmKHRoaXMuX25hbWVzLnNwbGljZShlLDEpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LGNvbnRhaW5zOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKHQpPj0wfX07dmFyIE1pdD17fTtmdW5jdGlvbiBFaXQodCxlLG4pe3JldHVybiB0PVRpdCh0LGUsbiksZnVuY3Rpb24oZSl7dmFyIG49ZS5yZWxhdGVkVGFyZ2V0O24mJihuPT09dGhpc3x8OCZuLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHRoaXMpKXx8dC5jYWxsKHRoaXMsZSl9fWZ1bmN0aW9uIFRpdCh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKGkpe3RyeXt0LmNhbGwodGhpcyx0aGlzLl9fZGF0YV9fLGUsbil9ZmluYWxseXt9fX1mdW5jdGlvbiBDaXQodCl7cmV0dXJuIHQudHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcCgoZnVuY3Rpb24odCl7dmFyIGU9IiIsbj10LmluZGV4T2YoIi4iKTtyZXR1cm4gbj49MCYmKGU9dC5zbGljZShuKzEpLHQ9dC5zbGljZSgwLG4pKSx7dHlwZTp0LG5hbWU6ZX19KSl9ZnVuY3Rpb24gQWl0KHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMuX19vbjtpZihlKXtmb3IodmFyIG4saT0wLHI9LTEsbz1lLmxlbmd0aDtpPG87KytpKW49ZVtpXSx0LnR5cGUmJm4udHlwZSE9PXQudHlwZXx8bi5uYW1lIT09dC5uYW1lP2VbKytyXT1uOnRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihuLnR5cGUsbi5saXN0ZW5lcixuLmNhcHR1cmUpOysrcj9lLmxlbmd0aD1yOmRlbGV0ZSB0aGlzLl9fb259fX1mdW5jdGlvbiBraXQodCxlLG4pe3ZhciBpPU1pdC5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpP0VpdDpUaXQ7cmV0dXJuIGZ1bmN0aW9uKHIsbyxhKXt2YXIgcyxsPXRoaXMuX19vbixjPWkoZSxvLGEpO2lmKGwpZm9yKHZhciB1PTAsaD1sLmxlbmd0aDt1PGg7Kyt1KWlmKChzPWxbdV0pLnR5cGU9PT10LnR5cGUmJnMubmFtZT09PXQubmFtZSlyZXR1cm4gdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKHMudHlwZSxzLmxpc3RlbmVyLHMuY2FwdHVyZSksdGhpcy5hZGRFdmVudExpc3RlbmVyKHMudHlwZSxzLmxpc3RlbmVyPWMscy5jYXB0dXJlPW4pLHZvaWQocy52YWx1ZT1lKTt0aGlzLmFkZEV2ZW50TGlzdGVuZXIodC50eXBlLGMsbikscz17dHlwZTp0LnR5cGUsbmFtZTp0Lm5hbWUsdmFsdWU6ZSxsaXN0ZW5lcjpjLGNhcHR1cmU6bn0sbD9sLnB1c2gocyk6dGhpcy5fX29uPVtzXX19ZnVuY3Rpb24gTGl0KHQsZSxuKXt2YXIgaT1LbnQodCkscj1pLkN1c3RvbUV2ZW50OyJmdW5jdGlvbiI9PXR5cGVvZiByP3I9bmV3IHIoZSxuKToocj1pLmRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpLG4/KHIuaW5pdEV2ZW50KGUsbi5idWJibGVzLG4uY2FuY2VsYWJsZSksci5kZXRhaWw9bi5kZXRhaWwpOnIuaW5pdEV2ZW50KGUsITEsITEpKSx0LmRpc3BhdGNoRXZlbnQocil9ZnVuY3Rpb24gUGl0KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIExpdCh0aGlzLHQsZSl9fWZ1bmN0aW9uIE5pdCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBMaXQodGhpcyx0LGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19InVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudCYmKCJvbm1vdXNlZW50ZXIiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fHwoTWl0PXttb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0In0pKTt2YXIgSWl0PVtudWxsXTtmdW5jdGlvbiBPaXQodCxlKXt0aGlzLl9ncm91cHM9dCx0aGlzLl9wYXJlbnRzPWV9ZnVuY3Rpb24gUml0KCl7cmV0dXJuIG5ldyBPaXQoW1tkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXSxJaXQpfU9pdC5wcm90b3R5cGU9Uml0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6T2l0LHNlbGVjdDpmdW5jdGlvbiB6aXQodCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PVJudCh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLGk9bmV3IEFycmF5KG4pLHI9MDtyPG47KytyKWZvcih2YXIgbyxhLHM9ZVtyXSxsPXMubGVuZ3RoLGM9aVtyXT1uZXcgQXJyYXkobCksdT0wO3U8bDsrK3UpKG89c1t1XSkmJihhPXQuY2FsbChvLG8uX19kYXRhX18sdSxzKSkmJigiX19kYXRhX18iaW4gbyYmKGEuX19kYXRhX189by5fX2RhdGFfXyksY1t1XT1hKTtyZXR1cm4gbmV3IE9pdChpLHRoaXMuX3BhcmVudHMpfSxzZWxlY3RBbGw6ZnVuY3Rpb24gRGl0KHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1EbnQodCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxpPVtdLHI9W10sbz0wO288bjsrK28pZm9yKHZhciBhLHM9ZVtvXSxsPXMubGVuZ3RoLGM9MDtjPGw7KytjKShhPXNbY10pJiYoaS5wdXNoKHQuY2FsbChhLGEuX19kYXRhX18sYyxzKSksci5wdXNoKGEpKTtyZXR1cm4gbmV3IE9pdChpLHIpfSxmaWx0ZXI6ZnVuY3Rpb24gQml0KHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1CbnQodCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxpPW5ldyBBcnJheShuKSxyPTA7cjxuOysrcilmb3IodmFyIG8sYT1lW3JdLHM9YS5sZW5ndGgsbD1pW3JdPVtdLGM9MDtjPHM7KytjKShvPWFbY10pJiZ0LmNhbGwobyxvLl9fZGF0YV9fLGMsYSkmJmwucHVzaChvKTtyZXR1cm4gbmV3IE9pdChpLHRoaXMuX3BhcmVudHMpfSxkYXRhOmZ1bmN0aW9uIEhpdCh0LGUpe2lmKCF0KXJldHVybiBmPW5ldyBBcnJheSh0aGlzLnNpemUoKSksdT0tMSx0aGlzLmVhY2goKGZ1bmN0aW9uKHQpe2ZbKyt1XT10fSkpLGY7dmFyIG49ZT9VbnQ6Vm50LGk9dGhpcy5fcGFyZW50cyxyPXRoaXMuX2dyb3VwczsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9KGZ1bmN0aW9uIG8odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSkodCkpO2Zvcih2YXIgYT1yLmxlbmd0aCxzPW5ldyBBcnJheShhKSxsPW5ldyBBcnJheShhKSxjPW5ldyBBcnJheShhKSx1PTA7dTxhOysrdSl7dmFyIGg9aVt1XSxkPXJbdV0scD1kLmxlbmd0aCxmPXQuY2FsbChoLGgmJmguX19kYXRhX18sdSxpKSxtPWYubGVuZ3RoLGc9bFt1XT1uZXcgQXJyYXkobSksXz1zW3VdPW5ldyBBcnJheShtKTtuKGgsZCxnLF8sY1t1XT1uZXcgQXJyYXkocCksZixlKTtmb3IodmFyIHksdixiPTAseD0wO2I8bTsrK2IpaWYoeT1nW2JdKXtmb3IoYj49eCYmKHg9YisxKTshKHY9X1t4XSkmJisreDxtOyk7eS5fbmV4dD12fHxudWxsfX1yZXR1cm4ocz1uZXcgT2l0KHMsaSkpLl9lbnRlcj1sLHMuX2V4aXQ9YyxzfSxlbnRlcjpmdW5jdGlvbiBGaXQoKXtyZXR1cm4gbmV3IE9pdCh0aGlzLl9lbnRlcnx8dGhpcy5fZ3JvdXBzLm1hcChIbnQpLHRoaXMuX3BhcmVudHMpfSxleGl0OmZ1bmN0aW9uIFZpdCgpe3JldHVybiBuZXcgT2l0KHRoaXMuX2V4aXR8fHRoaXMuX2dyb3Vwcy5tYXAoSG50KSx0aGlzLl9wYXJlbnRzKX0sam9pbjpmdW5jdGlvbiBVaXQodCxlLG4pe3ZhciBpPXRoaXMuZW50ZXIoKSxyPXRoaXMsbz10aGlzLmV4aXQoKTtyZXR1cm4gaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90KGkpOmkuYXBwZW5kKHQrIiIpLG51bGwhPWUmJihyPWUocikpLG51bGw9PW4/by5yZW1vdmUoKTpuKG8pLGkmJnI/aS5tZXJnZShyKS5vcmRlcigpOnJ9LG1lcmdlOmZ1bmN0aW9uIGppdCh0KXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49dC5fZ3JvdXBzLGk9ZS5sZW5ndGgscj1NYXRoLm1pbihpLG4ubGVuZ3RoKSxvPW5ldyBBcnJheShpKSxhPTA7YTxyOysrYSlmb3IodmFyIHMsbD1lW2FdLGM9blthXSx1PWwubGVuZ3RoLGg9b1thXT1uZXcgQXJyYXkodSksZD0wO2Q8dTsrK2QpKHM9bFtkXXx8Y1tkXSkmJihoW2RdPXMpO2Zvcig7YTxpOysrYSlvW2FdPWVbYV07cmV0dXJuIG5ldyBPaXQobyx0aGlzLl9wYXJlbnRzKX0sb3JkZXI6ZnVuY3Rpb24gR2l0KCl7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPS0xLG49dC5sZW5ndGg7KytlPG47KWZvcih2YXIgaSxyPXRbZV0sbz1yLmxlbmd0aC0xLGE9cltvXTstLW8+PTA7KShpPXJbb10pJiYoYSYmNF5pLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGEpJiZhLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGksYSksYT1pKTtyZXR1cm4gdGhpc30sc29ydDpmdW5jdGlvbiBXaXQodCl7ZnVuY3Rpb24gZShlLG4pe3JldHVybiBlJiZuP3QoZS5fX2RhdGFfXyxuLl9fZGF0YV9fKTohZS0hbn10fHwodD1qbnQpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxyPW5ldyBBcnJheShpKSxvPTA7bzxpOysrbyl7Zm9yKHZhciBhLHM9bltvXSxsPXMubGVuZ3RoLGM9cltvXT1uZXcgQXJyYXkobCksdT0wO3U8bDsrK3UpKGE9c1t1XSkmJihjW3VdPWEpO2Muc29ydChlKX1yZXR1cm4gbmV3IE9pdChyLHRoaXMuX3BhcmVudHMpLm9yZGVyKCl9LGNhbGw6ZnVuY3Rpb24gcWl0KCl7dmFyIHQ9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyx0LmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfSxub2RlczpmdW5jdGlvbiBZaXQoKXt2YXIgdD1uZXcgQXJyYXkodGhpcy5zaXplKCkpLGU9LTE7cmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oKXt0WysrZV09dGhpc30pKSx0fSxub2RlOmZ1bmN0aW9uIFhpdCgpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT0wLG49dC5sZW5ndGg7ZTxuOysrZSlmb3IodmFyIGk9dFtlXSxyPTAsbz1pLmxlbmd0aDtyPG87KytyKXt2YXIgYT1pW3JdO2lmKGEpcmV0dXJuIGF9cmV0dXJuIG51bGx9LHNpemU6ZnVuY3Rpb24gJGl0KCl7dmFyIHQ9MDtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpeysrdH0pKSx0fSxlbXB0eTpmdW5jdGlvbiBLaXQoKXtyZXR1cm4hdGhpcy5ub2RlKCl9LGVhY2g6ZnVuY3Rpb24gWml0KHQpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj0wLGk9ZS5sZW5ndGg7bjxpOysrbilmb3IodmFyIHIsbz1lW25dLGE9MCxzPW8ubGVuZ3RoO2E8czsrK2EpKHI9b1thXSkmJnQuY2FsbChyLHIuX19kYXRhX18sYSxvKTtyZXR1cm4gdGhpc30sYXR0cjpmdW5jdGlvbiBKaXQodCxlKXt2YXIgbj1MbnQodCk7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgaT10aGlzLm5vZGUoKTtyZXR1cm4gbi5sb2NhbD9pLmdldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCk6aS5nZXRBdHRyaWJ1dGUobil9cmV0dXJuIHRoaXMuZWFjaCgobnVsbD09ZT9uLmxvY2FsP1dudDpHbnQ6ImZ1bmN0aW9uIj09dHlwZW9mIGU/bi5sb2NhbD8kbnQ6WG50Om4ubG9jYWw/WW50OnFudCkobixlKSl9LHN0eWxlOmZ1bmN0aW9uIFFpdCh0LGUsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PWU/Wm50OiJmdW5jdGlvbiI9PXR5cGVvZiBlP1FudDpKbnQpKHQsZSxudWxsPT1uPyIiOm4pKTp0aXQodGhpcy5ub2RlKCksdCl9LHByb3BlcnR5OmZ1bmN0aW9uIHRydCh0LGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChudWxsPT1lP2VpdDoiZnVuY3Rpb24iPT10eXBlb2YgZT9paXQ6bml0KSh0LGUpKTp0aGlzLm5vZGUoKVt0XX0sY2xhc3NlZDpmdW5jdGlvbiBlcnQodCxlKXt2YXIgbj1yaXQodCsiIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIGk9b2l0KHRoaXMubm9kZSgpKSxyPS0xLG89bi5sZW5ndGg7KytyPG87KWlmKCFpLmNvbnRhaW5zKG5bcl0pKXJldHVybiExO3JldHVybiEwfXJldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBlP2hpdDplP2NpdDp1aXQpKG4sZSkpfSx0ZXh0OmZ1bmN0aW9uIG5ydCh0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2gobnVsbD09dD9kaXQ6KCJmdW5jdGlvbiI9PXR5cGVvZiB0P2ZpdDpwaXQpKHQpKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH0saHRtbDpmdW5jdGlvbiBpcnQodCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PXQ/bWl0OigiZnVuY3Rpb24iPT10eXBlb2YgdD9faXQ6Z2l0KSh0KSk6dGhpcy5ub2RlKCkuaW5uZXJIVE1MfSxyYWlzZTpmdW5jdGlvbiBycnQoKXtyZXR1cm4gdGhpcy5lYWNoKHlpdCl9LGxvd2VyOmZ1bmN0aW9uIG9ydCgpe3JldHVybiB0aGlzLmVhY2godml0KX0sYXBwZW5kOmZ1bmN0aW9uIGFydCh0KXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkludCh0KTtyZXR1cm4gdGhpcy5zZWxlY3QoKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQoZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSkpfSxpbnNlcnQ6ZnVuY3Rpb24gc3J0KHQsZSl7dmFyIG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpJbnQodCksaT1udWxsPT1lP2JpdDoiZnVuY3Rpb24iPT10eXBlb2YgZT9lOlJudChlKTtyZXR1cm4gdGhpcy5zZWxlY3QoKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKG4uYXBwbHkodGhpcyxhcmd1bWVudHMpLGkuYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxsKX0pKX0scmVtb3ZlOmZ1bmN0aW9uIGxydCgpe3JldHVybiB0aGlzLmVhY2goeGl0KX0sY2xvbmU6ZnVuY3Rpb24gY3J0KHQpe3JldHVybiB0aGlzLnNlbGVjdCh0P1NpdDp3aXQpfSxkYXR1bTpmdW5jdGlvbiB1cnQodCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iLHQpOnRoaXMubm9kZSgpLl9fZGF0YV9ffSxvbjpmdW5jdGlvbiBocnQodCxlLG4pe3ZhciBpLHIsbz1DaXQodCsiIiksYT1vLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2ZvcihzPWU/a2l0OkFpdCxudWxsPT1uJiYobj0hMSksaT0wO2k8YTsrK2kpdGhpcy5lYWNoKHMob1tpXSxlLG4pKTtyZXR1cm4gdGhpc312YXIgcz10aGlzLm5vZGUoKS5fX29uO2lmKHMpZm9yKHZhciBsLGM9MCx1PXMubGVuZ3RoO2M8dTsrK2MpZm9yKGk9MCxsPXNbY107aTxhOysraSlpZigocj1vW2ldKS50eXBlPT09bC50eXBlJiZyLm5hbWU9PT1sLm5hbWUpcmV0dXJuIGwudmFsdWV9LGRpc3BhdGNoOmZ1bmN0aW9uIGRydCh0LGUpe3JldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBlP05pdDpQaXQpKHQsZSkpfX07dmFyIHBydD17dmFsdWU6ZnVuY3Rpb24oKXt9fTtmdW5jdGlvbiBmcnQoKXtmb3IodmFyIHQsZT0wLG49YXJndW1lbnRzLmxlbmd0aCxpPXt9O2U8bjsrK2Upe2lmKCEodD1hcmd1bWVudHNbZV0rIiIpfHx0IGluIGl8fC9bXHMuXS8udGVzdCh0KSl0aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgdHlwZTogIit0KTtpW3RdPVtdfXJldHVybiBuZXcgbXJ0KGkpfWZ1bmN0aW9uIG1ydCh0KXt0aGlzLl89dH1mdW5jdGlvbiBncnQodCxlKXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLykubWFwKChmdW5jdGlvbih0KXt2YXIgbj0iIixpPXQuaW5kZXhPZigiLiIpO2lmKGk+PTAmJihuPXQuc2xpY2UoaSsxKSx0PXQuc2xpY2UoMCxpKSksdCYmIWUuaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7cmV0dXJue3R5cGU6dCxuYW1lOm59fSkpfWZ1bmN0aW9uIF9ydCh0LGUpe2Zvcih2YXIgbixpPTAscj10Lmxlbmd0aDtpPHI7KytpKWlmKChuPXRbaV0pLm5hbWU9PT1lKXJldHVybiBuLnZhbHVlfWZ1bmN0aW9uIHlydCh0LGUsbil7Zm9yKHZhciBpPTAscj10Lmxlbmd0aDtpPHI7KytpKWlmKHRbaV0ubmFtZT09PWUpe3RbaV09cHJ0LHQ9dC5zbGljZSgwLGkpLmNvbmNhdCh0LnNsaWNlKGkrMSkpO2JyZWFrfXJldHVybiBudWxsIT1uJiZ0LnB1c2goe25hbWU6ZSx2YWx1ZTpufSksdH1tcnQucHJvdG90eXBlPWZydC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOm1ydCxvbjpmdW5jdGlvbih0LGUpe3ZhciBuLGk9dGhpcy5fLHI9Z3J0KHQrIiIsaSksbz0tMSxhPXIubGVuZ3RoO2lmKCEoYXJndW1lbnRzLmxlbmd0aDwyKSl7aWYobnVsbCE9ZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrOiAiK2UpO2Zvcig7KytvPGE7KWlmKG49KHQ9cltvXSkudHlwZSlpW25dPXlydChpW25dLHQubmFtZSxlKTtlbHNlIGlmKG51bGw9PWUpZm9yKG4gaW4gaSlpW25dPXlydChpW25dLHQubmFtZSxudWxsKTtyZXR1cm4gdGhpc31mb3IoOysrbzxhOylpZigobj0odD1yW29dKS50eXBlKSYmKG49X3J0KGlbbl0sdC5uYW1lKSkpcmV0dXJuIG59LGNvcHk6ZnVuY3Rpb24oKXt2YXIgdD17fSxlPXRoaXMuXztmb3IodmFyIG4gaW4gZSl0W25dPWVbbl0uc2xpY2UoKTtyZXR1cm4gbmV3IG1ydCh0KX0sY2FsbDpmdW5jdGlvbih0LGUpe2lmKChuPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIG4saSxyPW5ldyBBcnJheShuKSxvPTA7bzxuOysrbylyW29dPWFyZ3VtZW50c1tvKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7Zm9yKG89MCxuPShpPXRoaXMuX1t0XSkubGVuZ3RoO288bjsrK28paVtvXS52YWx1ZS5hcHBseShlLHIpfSxhcHBseTpmdW5jdGlvbih0LGUsbil7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtmb3IodmFyIGk9dGhpcy5fW3RdLHI9MCxvPWkubGVuZ3RoO3I8bzsrK3IpaVtyXS52YWx1ZS5hcHBseShlLG4pfX07dmFyIHZydCxicnQseHJ0PTAsd3J0PTAsU3J0PTAsTXJ0PTAsRXJ0PTAsVHJ0PTAsQ3J0PSJvYmplY3QiPT10eXBlb2YgcGVyZm9ybWFuY2UmJnBlcmZvcm1hbmNlLm5vdz9wZXJmb3JtYW5jZTpEYXRlLEFydD0ib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbih0KXtzZXRUaW1lb3V0KHQsMTcpfTtmdW5jdGlvbiBrcnQoKXtyZXR1cm4gRXJ0fHwoQXJ0KExydCksRXJ0PUNydC5ub3coKStUcnQpfWZ1bmN0aW9uIExydCgpe0VydD0wfWZ1bmN0aW9uIFBydCgpe3RoaXMuX2NhbGw9dGhpcy5fdGltZT10aGlzLl9uZXh0PW51bGx9ZnVuY3Rpb24gTnJ0KHQsZSxuKXt2YXIgaT1uZXcgUHJ0O3JldHVybiBpLnJlc3RhcnQodCxlLG4pLGl9ZnVuY3Rpb24gSXJ0KCl7RXJ0PShNcnQ9Q3J0Lm5vdygpKStUcnQseHJ0PXdydD0wO3RyeXshKGZ1bmN0aW9uIHQoKXtrcnQoKSwrK3hydDtmb3IodmFyIHQsZT12cnQ7ZTspKHQ9RXJ0LWUuX3RpbWUpPj0wJiZlLl9jYWxsLmNhbGwobnVsbCx0KSxlPWUuX25leHQ7LS14cnR9KSgpfWZpbmFsbHl7eHJ0PTAsKGZ1bmN0aW9uIGUoKXtmb3IodmFyIHQsZSxuPXZydCxpPTEvMDtuOyluLl9jYWxsPyhpPm4uX3RpbWUmJihpPW4uX3RpbWUpLHQ9bixuPW4uX25leHQpOihlPW4uX25leHQsbi5fbmV4dD1udWxsLG49dD90Ll9uZXh0PWU6dnJ0PWUpO2JydD10LFJydChpKX0pKCksRXJ0PTB9fWZ1bmN0aW9uIE9ydCgpe3ZhciB0PUNydC5ub3coKSxlPXQtTXJ0O2U+MWUzJiYoVHJ0LT1lLE1ydD10KX1mdW5jdGlvbiBScnQodCl7eHJ0fHwod3J0JiYod3J0PWNsZWFyVGltZW91dCh3cnQpKSx0LUVydD4yND8odDwxLzAmJih3cnQ9c2V0VGltZW91dChJcnQsdC1DcnQubm93KCktVHJ0KSksU3J0JiYoU3J0PWNsZWFySW50ZXJ2YWwoU3J0KSkpOihTcnR8fChNcnQ9Q3J0Lm5vdygpLFNydD1zZXRJbnRlcnZhbChPcnQsMWUzKSkseHJ0PTEsQXJ0KElydCkpKX1mdW5jdGlvbiB6cnQodCxlLG4pe3ZhciBpPW5ldyBQcnQ7cmV0dXJuIGkucmVzdGFydCgoZnVuY3Rpb24obil7aS5zdG9wKCksdChuK2UpfSksZT1udWxsPT1lPzA6K2UsbiksaX1QcnQucHJvdG90eXBlPU5ydC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlBydCxyZXN0YXJ0OmZ1bmN0aW9uKHQsZSxuKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiIpO249KG51bGw9PW4/a3J0KCk6K24pKyhudWxsPT1lPzA6K2UpLHRoaXMuX25leHR8fGJydD09PXRoaXN8fChicnQ/YnJ0Ll9uZXh0PXRoaXM6dnJ0PXRoaXMsYnJ0PXRoaXMpLHRoaXMuX2NhbGw9dCx0aGlzLl90aW1lPW4sUnJ0KCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLFJydCgpKX19O3ZhciBEcnQ9ZnJ0KCJzdGFydCIsImVuZCIsImludGVycnVwdCIpLEJydD1bXTtmdW5jdGlvbiBIcnQodCxlLG4saSxyLG8pe3ZhciBhPXQuX190cmFuc2l0aW9uO2lmKGEpe2lmKG4gaW4gYSlyZXR1cm59ZWxzZSB0Ll9fdHJhbnNpdGlvbj17fTshKGZ1bmN0aW9uIHModCxlLG4pe3ZhciBpLHI9dC5fX3RyYW5zaXRpb247ZnVuY3Rpb24gbyhsKXt2YXIgYyx1LGgsZDtpZigxIT09bi5zdGF0ZSlyZXR1cm4gcygpO2ZvcihjIGluIHIpaWYoKGQ9cltjXSkubmFtZT09PW4ubmFtZSl7aWYoMz09PWQuc3RhdGUpcmV0dXJuIHpydChvKTs0PT09ZC5zdGF0ZT8oZC5zdGF0ZT02LGQudGltZXIuc3RvcCgpLGQub24uY2FsbCgiaW50ZXJydXB0Iix0LHQuX19kYXRhX18sZC5pbmRleCxkLmdyb3VwKSxkZWxldGUgcltjXSk6K2M8ZSYmKGQuc3RhdGU9NixkLnRpbWVyLnN0b3AoKSxkZWxldGUgcltjXSl9aWYoenJ0KChmdW5jdGlvbigpezM9PT1uLnN0YXRlJiYobi5zdGF0ZT00LG4udGltZXIucmVzdGFydChhLG4uZGVsYXksbi50aW1lKSxhKGwpKX0pKSxuLnN0YXRlPTIsbi5vbi5jYWxsKCJzdGFydCIsdCx0Ll9fZGF0YV9fLG4uaW5kZXgsbi5ncm91cCksMj09PW4uc3RhdGUpe2ZvcihuLnN0YXRlPTMsaT1uZXcgQXJyYXkoaD1uLnR3ZWVuLmxlbmd0aCksYz0wLHU9LTE7YzxoOysrYykoZD1uLnR3ZWVuW2NdLnZhbHVlLmNhbGwodCx0Ll9fZGF0YV9fLG4uaW5kZXgsbi5ncm91cCkpJiYoaVsrK3VdPWQpO2kubGVuZ3RoPXUrMX19ZnVuY3Rpb24gYShlKXtmb3IodmFyIHI9ZTxuLmR1cmF0aW9uP24uZWFzZS5jYWxsKG51bGwsZS9uLmR1cmF0aW9uKToobi50aW1lci5yZXN0YXJ0KHMpLG4uc3RhdGU9NSwxKSxvPS0xLGE9aS5sZW5ndGg7KytvPGE7KWlbb10uY2FsbChudWxsLHIpOzU9PT1uLnN0YXRlJiYobi5vbi5jYWxsKCJlbmQiLHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApLHMoKSl9ZnVuY3Rpb24gcygpe2Zvcih2YXIgaSBpbiBuLnN0YXRlPTYsbi50aW1lci5zdG9wKCksZGVsZXRlIHJbZV0scilyZXR1cm47ZGVsZXRlIHQuX190cmFuc2l0aW9ufXJbZV09bixuLnRpbWVyPU5ydCgoZnVuY3Rpb24gbCh0KXtuLnN0YXRlPTEsbi50aW1lci5yZXN0YXJ0KG8sbi5kZWxheSxuLnRpbWUpLG4uZGVsYXk8PXQmJm8odC1uLmRlbGF5KX0pLDAsbi50aW1lKX0pKHQsbix7bmFtZTplLGluZGV4OmksZ3JvdXA6cixvbjpEcnQsdHdlZW46QnJ0LHRpbWU6by50aW1lLGRlbGF5Om8uZGVsYXksZHVyYXRpb246by5kdXJhdGlvbixlYXNlOm8uZWFzZSx0aW1lcjpudWxsLHN0YXRlOjB9KX1mdW5jdGlvbiBGcnQodCxlKXt2YXIgbj1VcnQodCxlKTtpZihuLnN0YXRlPjApdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBzY2hlZHVsZWQiKTtyZXR1cm4gbn1mdW5jdGlvbiBWcnQodCxlKXt2YXIgbj1VcnQodCxlKTtpZihuLnN0YXRlPjIpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBzdGFydGVkIik7cmV0dXJuIG59ZnVuY3Rpb24gVXJ0KHQsZSl7dmFyIG49dC5fX3RyYW5zaXRpb247aWYoIW58fCEobj1uW2VdKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJuIG59ZnVuY3Rpb24ganJ0KHQsZSl7dmFyIG4saSxyLG89dC5fX3RyYW5zaXRpb24sYT0hMDtpZihvKXtmb3IociBpbiBlPW51bGw9PWU/bnVsbDplKyIiLG8pKG49b1tyXSkubmFtZT09PWU/KGk9bi5zdGF0ZT4yJiZuLnN0YXRlPDUsbi5zdGF0ZT02LG4udGltZXIuc3RvcCgpLGkmJm4ub24uY2FsbCgiaW50ZXJydXB0Iix0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxkZWxldGUgb1tyXSk6YT0hMTthJiZkZWxldGUgdC5fX3RyYW5zaXRpb259fWZ1bmN0aW9uIEdydCh0LGUsbil7dC5wcm90b3R5cGU9ZS5wcm90b3R5cGU9bixuLmNvbnN0cnVjdG9yPXR9ZnVuY3Rpb24gV3J0KHQsZSl7dmFyIG49T2JqZWN0LmNyZWF0ZSh0LnByb3RvdHlwZSk7Zm9yKHZhciBpIGluIGUpbltpXT1lW2ldO3JldHVybiBufWZ1bmN0aW9uIHFydCgpe312YXIgWXJ0PS43LFhydD0xL1lydCwkcnQ9IlxccyooWystXT9cXGQrKVxccyoiLEtydD0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixacnQ9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pJVxccyoiLEpydD0vXiMoWzAtOWEtZl17Myw4fSkkLyxRcnQ9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrWyRydCwkcnQsJHJ0XSsiXFwpJCIpLHRvdD1uZXcgUmVnRXhwKCJecmdiXFwoIitbWnJ0LFpydCxacnRdKyJcXCkkIiksZW90PW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbJHJ0LCRydCwkcnQsS3J0XSsiXFwpJCIpLG5vdD1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW1pydCxacnQsWnJ0LEtydF0rIlxcKSQiKSxpb3Q9bmV3IFJlZ0V4cCgiXmhzbFxcKCIrW0tydCxacnQsWnJ0XSsiXFwpJCIpLHJvdD1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrW0tydCxacnQsWnJ0LEtydF0rIlxcKSQiKSxvb3Q9e2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH07ZnVuY3Rpb24gYW90KCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4KCl9ZnVuY3Rpb24gc290KCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCl9ZnVuY3Rpb24gbG90KHQpe3ZhciBlLG47cmV0dXJuIHQ9KHQrIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLChlPUpydC5leGVjKHQpKT8obj1lWzFdLmxlbmd0aCxlPXBhcnNlSW50KGVbMV0sMTYpLDY9PT1uP2NvdChlKTozPT09bj9uZXcgcG90KGU+PjgmMTV8ZT4+NCYyNDAsZT4+NCYxNXwyNDAmZSwoMTUmZSk8PDR8MTUmZSwxKTo4PT09bj91b3QoZT4+MjQmMjU1LGU+PjE2JjI1NSxlPj44JjI1NSwoMjU1JmUpLzI1NSk6ND09PW4/dW90KGU+PjEyJjE1fGU+PjgmMjQwLGU+PjgmMTV8ZT4+NCYyNDAsZT4+NCYxNXwyNDAmZSwoKDE1JmUpPDw0fDE1JmUpLzI1NSk6bnVsbCk6KGU9UXJ0LmV4ZWModCkpP25ldyBwb3QoZVsxXSxlWzJdLGVbM10sMSk6KGU9dG90LmV4ZWModCkpP25ldyBwb3QoMjU1KmVbMV0vMTAwLDI1NSplWzJdLzEwMCwyNTUqZVszXS8xMDAsMSk6KGU9ZW90LmV4ZWModCkpP3VvdChlWzFdLGVbMl0sZVszXSxlWzRdKTooZT1ub3QuZXhlYyh0KSk/dW90KDI1NSplWzFdLzEwMCwyNTUqZVsyXS8xMDAsMjU1KmVbM10vMTAwLGVbNF0pOihlPWlvdC5leGVjKHQpKT9fb3QoZVsxXSxlWzJdLzEwMCxlWzNdLzEwMCwxKTooZT1yb3QuZXhlYyh0KSk/X290KGVbMV0sZVsyXS8xMDAsZVszXS8xMDAsZVs0XSk6b290Lmhhc093blByb3BlcnR5KHQpP2NvdChvb3RbdF0pOiJ0cmFuc3BhcmVudCI9PT10P25ldyBwb3QoTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiBjb3QodCl7cmV0dXJuIG5ldyBwb3QodD4+MTYmMjU1LHQ+PjgmMjU1LDI1NSZ0LDEpfWZ1bmN0aW9uIHVvdCh0LGUsbixpKXtyZXR1cm4gaTw9MCYmKHQ9ZT1uPU5hTiksbmV3IHBvdCh0LGUsbixpKX1mdW5jdGlvbiBob3QodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBxcnR8fCh0PWxvdCh0KSksdD9uZXcgcG90KCh0PXQucmdiKCkpLnIsdC5nLHQuYix0Lm9wYWNpdHkpOm5ldyBwb3R9ZnVuY3Rpb24gZG90KHQsZSxuLGkpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9ob3QodCk6bmV3IHBvdCh0LGUsbixudWxsPT1pPzE6aSl9ZnVuY3Rpb24gcG90KHQsZSxuLGkpe3RoaXMucj0rdCx0aGlzLmc9K2UsdGhpcy5iPStuLHRoaXMub3BhY2l0eT0raX1mdW5jdGlvbiBmb3QoKXtyZXR1cm4iIyIrZ290KHRoaXMucikrZ290KHRoaXMuZykrZ290KHRoaXMuYil9ZnVuY3Rpb24gbW90KCl7dmFyIHQ9dGhpcy5vcGFjaXR5O3JldHVybigxPT09KHQ9aXNOYU4odCk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsdCkpKT8icmdiKCI6InJnYmEoIikrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLnIpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuZyl8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5iKXx8MCkpKygxPT09dD8iKSI6IiwgIit0KyIpIil9ZnVuY3Rpb24gZ290KHQpe3JldHVybigodD1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHQpfHwwKSkpPDE2PyIwIjoiIikrdC50b1N0cmluZygxNil9ZnVuY3Rpb24gX290KHQsZSxuLGkpe3JldHVybiBpPD0wP3Q9ZT1uPU5hTjpuPD0wfHxuPj0xP3Q9ZT1OYU46ZTw9MCYmKHQ9TmFOKSxuZXcgdm90KHQsZSxuLGkpfWZ1bmN0aW9uIHlvdCh0KXtpZih0IGluc3RhbmNlb2Ygdm90KXJldHVybiBuZXcgdm90KHQuaCx0LnMsdC5sLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIHFydHx8KHQ9bG90KHQpKSwhdClyZXR1cm4gbmV3IHZvdDtpZih0IGluc3RhbmNlb2Ygdm90KXJldHVybiB0O3ZhciBlPSh0PXQucmdiKCkpLnIvMjU1LG49dC5nLzI1NSxpPXQuYi8yNTUscj1NYXRoLm1pbihlLG4saSksbz1NYXRoLm1heChlLG4saSksYT1OYU4scz1vLXIsbD0obytyKS8yO3JldHVybiBzPyhhPWU9PT1vPyhuLWkpL3MrNioobjxpKTpuPT09bz8oaS1lKS9zKzI6KGUtbikvcys0LHMvPWw8LjU/bytyOjItby1yLGEqPTYwKTpzPWw+MCYmbDwxPzA6YSxuZXcgdm90KGEscyxsLHQub3BhY2l0eSl9ZnVuY3Rpb24gdm90KHQsZSxuLGkpe3RoaXMuaD0rdCx0aGlzLnM9K2UsdGhpcy5sPStuLHRoaXMub3BhY2l0eT0raX1mdW5jdGlvbiBib3QodCxlLG4pe3JldHVybiAyNTUqKHQ8NjA/ZSsobi1lKSp0LzYwOnQ8MTgwP246dDwyNDA/ZSsobi1lKSooMjQwLXQpLzYwOmUpfWZ1bmN0aW9uIHhvdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gd290KHQsZSl7dmFyIG49ZS10O3JldHVybiBuPyhmdW5jdGlvbiBpKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0K24qZX19KSh0LG4pOnhvdChpc05hTih0KT9lOnQpfUdydChxcnQsbG90LHtjb3B5OmZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsdCl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OmFvdCxmb3JtYXRIZXg6YW90LGZvcm1hdEhzbDpmdW5jdGlvbiBTb3QoKXtyZXR1cm4geW90KHRoaXMpLmZvcm1hdEhzbCgpfSxmb3JtYXRSZ2I6c290LHRvU3RyaW5nOnNvdH0pLEdydChwb3QsZG90LFdydChxcnQse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/WHJ0Ok1hdGgucG93KFhydCx0KSxuZXcgcG90KHRoaXMucip0LHRoaXMuZyp0LHRoaXMuYip0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P1lydDpNYXRoLnBvdyhZcnQsdCksbmV3IHBvdCh0aGlzLnIqdCx0aGlzLmcqdCx0aGlzLmIqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4tLjU8PXRoaXMuciYmdGhpcy5yPDI1NS41JiYtLjU8PXRoaXMuZyYmdGhpcy5nPDI1NS41JiYtLjU8PXRoaXMuYiYmdGhpcy5iPDI1NS41JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4OmZvdCxmb3JtYXRIZXg6Zm90LGZvcm1hdFJnYjptb3QsdG9TdHJpbmc6bW90fSkpLEdydCh2b3QsKGZ1bmN0aW9uIE1vdCh0LGUsbixpKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/eW90KHQpOm5ldyB2b3QodCxlLG4sbnVsbD09aT8xOmkpfSksV3J0KHFydCx7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD9YcnQ6TWF0aC5wb3coWHJ0LHQpLG5ldyB2b3QodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD9ZcnQ6TWF0aC5wb3coWXJ0LHQpLG5ldyB2b3QodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmglMzYwKzM2MCoodGhpcy5oPDApLGU9aXNOYU4odCl8fGlzTmFOKHRoaXMucyk/MDp0aGlzLnMsbj10aGlzLmwsaT1uKyhuPC41P246MS1uKSplLHI9MipuLWk7cmV0dXJuIG5ldyBwb3QoYm90KHQ+PTI0MD90LTI0MDp0KzEyMCxyLGkpLGJvdCh0LHIsaSksYm90KHQ8MTIwP3QrMjQwOnQtMTIwLHIsaSksdGhpcy5vcGFjaXR5KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGZvcm1hdEhzbDpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3BhY2l0eTtyZXR1cm4oMT09PSh0PWlzTmFOKHQpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLHQpKSk/ImhzbCgiOiJoc2xhKCIpKyh0aGlzLmh8fDApKyIsICIrMTAwKih0aGlzLnN8fDApKyIlLCAiKzEwMCoodGhpcy5sfHwwKSsiJSIrKDE9PT10PyIpIjoiLCAiK3QrIikiKX19KSk7dmFyIEVvdD0oZnVuY3Rpb24gdChlKXt2YXIgbj0oZnVuY3Rpb24gaSh0KXtyZXR1cm4gMT09KHQ9K3QpP3dvdDpmdW5jdGlvbihlLG4pe3JldHVybiBuLWU/KGZ1bmN0aW9uIGkodCxlLG4pe3JldHVybiB0PU1hdGgucG93KHQsbiksZT1NYXRoLnBvdyhlLG4pLXQsbj0xL24sZnVuY3Rpb24oaSl7cmV0dXJuIE1hdGgucG93KHQraSplLG4pfX0pKGUsbix0KTp4b3QoaXNOYU4oZSk/bjplKX19KShlKTtmdW5jdGlvbiByKHQsZSl7dmFyIGk9bigodD1kb3QodCkpLnIsKGU9ZG90KGUpKS5yKSxyPW4odC5nLGUuZyksbz1uKHQuYixlLmIpLGE9d290KHQub3BhY2l0eSxlLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC5yPWkoZSksdC5nPXIoZSksdC5iPW8oZSksdC5vcGFjaXR5PWEoZSksdCsiIn19cmV0dXJuIHIuZ2FtbWE9dCxyfSkoMSk7ZnVuY3Rpb24gVG90KHQsZSl7cmV0dXJuIHQ9K3QsZT0rZSxmdW5jdGlvbihuKXtyZXR1cm4gdCooMS1uKStlKm59fXZhciBDb3Q9L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLEFvdD1uZXcgUmVnRXhwKENvdC5zb3VyY2UsImciKTtmdW5jdGlvbiBrb3QodCxlKXt2YXIgbixpLHIsbz1Db3QubGFzdEluZGV4PUFvdC5sYXN0SW5kZXg9MCxhPS0xLHM9W10sbD1bXTtmb3IodCs9IiIsZSs9IiI7KG49Q290LmV4ZWModCkpJiYoaT1Bb3QuZXhlYyhlKSk7KShyPWkuaW5kZXgpPm8mJihyPWUuc2xpY2UobyxyKSxzW2FdP3NbYV0rPXI6c1srK2FdPXIpLChuPW5bMF0pPT09KGk9aVswXSk/c1thXT9zW2FdKz1pOnNbKythXT1pOihzWysrYV09bnVsbCxsLnB1c2goe2k6YSx4OlRvdChuLGkpfSkpLG89QW90Lmxhc3RJbmRleDtyZXR1cm4gbzxlLmxlbmd0aCYmKHI9ZS5zbGljZShvKSxzW2FdP3NbYV0rPXI6c1srK2FdPXIpLHMubGVuZ3RoPDI/bFswXT8oZnVuY3Rpb24gYyh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSkrIiJ9fSkobFswXS54KTooZnVuY3Rpb24gdSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19KShlKTooZT1sLmxlbmd0aCxmdW5jdGlvbih0KXtmb3IodmFyIG4saT0wO2k8ZTsrK2kpc1sobj1sW2ldKS5pXT1uLngodCk7cmV0dXJuIHMuam9pbigiIil9KX12YXIgTG90LFBvdCxOb3QsSW90LE9vdD0xODAvTWF0aC5QSSxSb3Q9e3RyYW5zbGF0ZVg6MCx0cmFuc2xhdGVZOjAscm90YXRlOjAsc2tld1g6MCxzY2FsZVg6MSxzY2FsZVk6MX07ZnVuY3Rpb24gem90KHQsZSxuLGkscixvKXt2YXIgYSxzLGw7cmV0dXJuKGE9TWF0aC5zcXJ0KHQqdCtlKmUpKSYmKHQvPWEsZS89YSksKGw9dCpuK2UqaSkmJihuLT10KmwsaS09ZSpsKSwocz1NYXRoLnNxcnQobipuK2kqaSkpJiYobi89cyxpLz1zLGwvPXMpLHQqaTxlKm4mJih0PS10LGU9LWUsbD0tbCxhPS1hKSx7dHJhbnNsYXRlWDpyLHRyYW5zbGF0ZVk6byxyb3RhdGU6TWF0aC5hdGFuMihlLHQpKk9vdCxza2V3WDpNYXRoLmF0YW4obCkqT290LHNjYWxlWDphLHNjYWxlWTpzfX1mdW5jdGlvbiBEb3QodCxlLG4saSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gdC5sZW5ndGg/dC5wb3AoKSsiICI6IiJ9cmV0dXJuIGZ1bmN0aW9uKG8sYSl7dmFyIHM9W10sbD1bXTtyZXR1cm4gbz10KG8pLGE9dChhKSwoZnVuY3Rpb24gYyh0LGkscixvLGEscyl7aWYodCE9PXJ8fGkhPT1vKXt2YXIgbD1hLnB1c2goInRyYW5zbGF0ZSgiLG51bGwsZSxudWxsLG4pO3MucHVzaCh7aTpsLTQseDpUb3QodCxyKX0se2k6bC0yLHg6VG90KGksbyl9KX1lbHNlKHJ8fG8pJiZhLnB1c2goInRyYW5zbGF0ZSgiK3IrZStvK24pfSkoby50cmFuc2xhdGVYLG8udHJhbnNsYXRlWSxhLnRyYW5zbGF0ZVgsYS50cmFuc2xhdGVZLHMsbCksKGZ1bmN0aW9uIHUodCxlLG4sbyl7dCE9PWU/KHQtZT4xODA/ZSs9MzYwOmUtdD4xODAmJih0Kz0zNjApLG8ucHVzaCh7aTpuLnB1c2gocihuKSsicm90YXRlKCIsbnVsbCxpKS0yLHg6VG90KHQsZSl9KSk6ZSYmbi5wdXNoKHIobikrInJvdGF0ZSgiK2UraSl9KShvLnJvdGF0ZSxhLnJvdGF0ZSxzLGwpLChmdW5jdGlvbiBoKHQsZSxuLG8pe3QhPT1lP28ucHVzaCh7aTpuLnB1c2gocihuKSsic2tld1goIixudWxsLGkpLTIseDpUb3QodCxlKX0pOmUmJm4ucHVzaChyKG4pKyJza2V3WCgiK2UraSl9KShvLnNrZXdYLGEuc2tld1gscyxsKSwoZnVuY3Rpb24gZCh0LGUsbixpLG8sYSl7aWYodCE9PW58fGUhPT1pKXt2YXIgcz1vLnB1c2gocihvKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7YS5wdXNoKHtpOnMtNCx4OlRvdCh0LG4pfSx7aTpzLTIseDpUb3QoZSxpKX0pfWVsc2UgMT09PW4mJjE9PT1pfHxvLnB1c2gocihvKSsic2NhbGUoIituKyIsIitpKyIpIil9KShvLnNjYWxlWCxvLnNjYWxlWSxhLnNjYWxlWCxhLnNjYWxlWSxzLGwpLG89YT1udWxsLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPS0xLGk9bC5sZW5ndGg7KytuPGk7KXNbKGU9bFtuXSkuaV09ZS54KHQpO3JldHVybiBzLmpvaW4oIiIpfX19dmFyIEJvdD1Eb3QoKGZ1bmN0aW9uIEhvdCh0KXtyZXR1cm4ibm9uZSI9PT10P1JvdDooTG90fHwoTG90PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLFBvdD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsTm90PWRvY3VtZW50LmRlZmF1bHRWaWV3KSxMb3Quc3R5bGUudHJhbnNmb3JtPXQsdD1Ob3QuZ2V0Q29tcHV0ZWRTdHlsZShQb3QuYXBwZW5kQ2hpbGQoTG90KSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKSxQb3QucmVtb3ZlQ2hpbGQoTG90KSx6b3QoKyh0PXQuc2xpY2UoNywtMSkuc3BsaXQoIiwiKSlbMF0sK3RbMV0sK3RbMl0sK3RbM10sK3RbNF0sK3RbNV0pKX0pLCJweCwgIiwicHgpIiwiZGVnKSIpLEZvdD1Eb3QoKGZ1bmN0aW9uIFZvdCh0KXtyZXR1cm4gbnVsbD09dD9Sb3Q6KElvdHx8KElvdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSxJb3Quc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLHQpLCh0PUlvdC50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0ZSgpKT96b3QoKHQ9dC5tYXRyaXgpLmEsdC5iLHQuYyx0LmQsdC5lLHQuZik6Um90KX0pLCIsICIsIikiLCIpIik7ZnVuY3Rpb24gVW90KHQsZSl7dmFyIG4saTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj1WcnQodGhpcyx0KSxvPXIudHdlZW47aWYobyE9PW4pZm9yKHZhciBhPTAscz0oaT1uPW8pLmxlbmd0aDthPHM7KythKWlmKGlbYV0ubmFtZT09PWUpeyhpPWkuc2xpY2UoKSkuc3BsaWNlKGEsMSk7YnJlYWt9ci50d2Vlbj1pfX1mdW5jdGlvbiBqb3QodCxlLG4pe3ZhciBpLHI7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG4pdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPVZydCh0aGlzLHQpLGE9by50d2VlbjtpZihhIT09aSl7cj0oaT1hKS5zbGljZSgpO2Zvcih2YXIgcz17bmFtZTplLHZhbHVlOm59LGw9MCxjPXIubGVuZ3RoO2w8YzsrK2wpaWYocltsXS5uYW1lPT09ZSl7cltsXT1zO2JyZWFrfWw9PT1jJiZyLnB1c2gocyl9by50d2Vlbj1yfX1mdW5jdGlvbiBHb3QodCxlLG4pe3ZhciBpPXQuX2lkO3JldHVybiB0LmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9VnJ0KHRoaXMsaSk7KHQudmFsdWV8fCh0LnZhbHVlPXt9KSlbZV09bi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSksZnVuY3Rpb24odCl7cmV0dXJuIFVydCh0LGkpLnZhbHVlW2VdfX1mdW5jdGlvbiBXb3QodCxlKXt2YXIgbjtyZXR1cm4oIm51bWJlciI9PXR5cGVvZiBlP1RvdDplIGluc3RhbmNlb2YgbG90P0VvdDoobj1sb3QoZSkpPyhlPW4sRW90KTprb3QpKHQsZSl9ZnVuY3Rpb24gcW90KHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX1mdW5jdGlvbiBZb3QodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpfX1mdW5jdGlvbiBYb3QodCxlLG4pe3ZhciBpLHI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89dGhpcy5nZXRBdHRyaWJ1dGUodCk7cmV0dXJuIG89PT1uP251bGw6bz09PWk/cjpyPWUoaT1vLG4pfX1mdW5jdGlvbiAkb3QodCxlLG4pe3ZhciBpLHI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89dGhpcy5nZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpO3JldHVybiBvPT09bj9udWxsOm89PT1pP3I6cj1lKGk9byxuKX19ZnVuY3Rpb24gS290KHQsZSxuKXt2YXIgaSxyLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGEscz1uKHRoaXMpO2lmKG51bGwhPXMpcmV0dXJuKGE9dGhpcy5nZXRBdHRyaWJ1dGUodCkpPT09cz9udWxsOmE9PT1pJiZzPT09cj9vOm89ZShpPWEscj1zKTt0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX19ZnVuY3Rpb24gWm90KHQsZSxuKXt2YXIgaSxyLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGEscz1uKHRoaXMpO2lmKG51bGwhPXMpcmV0dXJuKGE9dGhpcy5nZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpKT09PXM/bnVsbDphPT09aSYmcz09PXI/bzpvPWUoaT1hLHI9cyk7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpfX1mdW5jdGlvbiBKb3QodCxlKXtmdW5jdGlvbiBuKCl7dmFyIG49dGhpcyxpPWUuYXBwbHkobixhcmd1bWVudHMpO3JldHVybiBpJiZmdW5jdGlvbihlKXtuLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxpKGUpKX19cmV0dXJuIG4uX3ZhbHVlPWUsbn1mdW5jdGlvbiBRb3QodCxlKXtmdW5jdGlvbiBuKCl7dmFyIG49dGhpcyxpPWUuYXBwbHkobixhcmd1bWVudHMpO3JldHVybiBpJiZmdW5jdGlvbihlKXtuLnNldEF0dHJpYnV0ZSh0LGkoZSkpfX1yZXR1cm4gbi5fdmFsdWU9ZSxufWZ1bmN0aW9uIHRhdCh0LGUpe3JldHVybiBmdW5jdGlvbigpe0ZydCh0aGlzLHQpLmRlbGF5PStlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gZWF0KHQsZSl7cmV0dXJuIGU9K2UsZnVuY3Rpb24oKXtGcnQodGhpcyx0KS5kZWxheT1lfX1mdW5jdGlvbiBuYXQodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtWcnQodGhpcyx0KS5kdXJhdGlvbj0rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIGlhdCh0LGUpe3JldHVybiBlPStlLGZ1bmN0aW9uKCl7VnJ0KHRoaXMsdCkuZHVyYXRpb249ZX19ZnVuY3Rpb24gcmF0KHQsZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe1ZydCh0aGlzLHQpLmVhc2U9ZX19ZnVuY3Rpb24gb2F0KHQsZSxuKXt2YXIgaSxyLG89KGZ1bmN0aW9uIGEodCl7cmV0dXJuKHQrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeSgoZnVuY3Rpb24odCl7dmFyIGU9dC5pbmRleE9mKCIuIik7cmV0dXJuIGU+PTAmJih0PXQuc2xpY2UoMCxlKSksIXR8fCJzdGFydCI9PT10fSkpfSkoZSk/RnJ0OlZydDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1vKHRoaXMsdCkscz1hLm9uO3MhPT1pJiYocj0oaT1zKS5jb3B5KCkpLm9uKGUsbiksYS5vbj1yfX12YXIgYWF0PVJpdC5wcm90b3R5cGUuY29uc3RydWN0b3I7ZnVuY3Rpb24gc2F0KHQsZSxuKXtmdW5jdGlvbiBpKCl7dmFyIGk9dGhpcyxyPWUuYXBwbHkoaSxhcmd1bWVudHMpO3JldHVybiByJiZmdW5jdGlvbihlKXtpLnN0eWxlLnNldFByb3BlcnR5KHQscihlKSxuKX19cmV0dXJuIGkuX3ZhbHVlPWUsaX12YXIgbGF0PTA7ZnVuY3Rpb24gY2F0KHQsZSxuLGkpe3RoaXMuX2dyb3Vwcz10LHRoaXMuX3BhcmVudHM9ZSx0aGlzLl9uYW1lPW4sdGhpcy5faWQ9aX1mdW5jdGlvbiB1YXQodCl7cmV0dXJuIFJpdCgpLnRyYW5zaXRpb24odCl9ZnVuY3Rpb24gaGF0KCl7cmV0dXJuKytsYXR9dmFyIGRhdD1SaXQucHJvdG90eXBlO2NhdC5wcm90b3R5cGU9dWF0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6Y2F0LHNlbGVjdDpmdW5jdGlvbiBwYXQodCl7dmFyIGU9dGhpcy5fbmFtZSxuPXRoaXMuX2lkOyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1SbnQodCkpO2Zvcih2YXIgaT10aGlzLl9ncm91cHMscj1pLmxlbmd0aCxvPW5ldyBBcnJheShyKSxhPTA7YTxyOysrYSlmb3IodmFyIHMsbCxjPWlbYV0sdT1jLmxlbmd0aCxoPW9bYV09bmV3IEFycmF5KHUpLGQ9MDtkPHU7KytkKShzPWNbZF0pJiYobD10LmNhbGwocyxzLl9fZGF0YV9fLGQsYykpJiYoIl9fZGF0YV9fImluIHMmJihsLl9fZGF0YV9fPXMuX19kYXRhX18pLGhbZF09bCxIcnQoaFtkXSxlLG4sZCxoLFVydChzLG4pKSk7cmV0dXJuIG5ldyBjYXQobyx0aGlzLl9wYXJlbnRzLGUsbil9LHNlbGVjdEFsbDpmdW5jdGlvbiBmYXQodCl7dmFyIGU9dGhpcy5fbmFtZSxuPXRoaXMuX2lkOyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1EbnQodCkpO2Zvcih2YXIgaT10aGlzLl9ncm91cHMscj1pLmxlbmd0aCxvPVtdLGE9W10scz0wO3M8cjsrK3MpZm9yKHZhciBsLGM9aVtzXSx1PWMubGVuZ3RoLGg9MDtoPHU7KytoKWlmKGw9Y1toXSl7Zm9yKHZhciBkLHA9dC5jYWxsKGwsbC5fX2RhdGFfXyxoLGMpLGY9VXJ0KGwsbiksbT0wLGc9cC5sZW5ndGg7bTxnOysrbSkoZD1wW21dKSYmSHJ0KGQsZSxuLG0scCxmKTtvLnB1c2gocCksYS5wdXNoKGwpfXJldHVybiBuZXcgY2F0KG8sYSxlLG4pfSxmaWx0ZXI6ZnVuY3Rpb24gbWF0KHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1CbnQodCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxpPW5ldyBBcnJheShuKSxyPTA7cjxuOysrcilmb3IodmFyIG8sYT1lW3JdLHM9YS5sZW5ndGgsbD1pW3JdPVtdLGM9MDtjPHM7KytjKShvPWFbY10pJiZ0LmNhbGwobyxvLl9fZGF0YV9fLGMsYSkmJmwucHVzaChvKTtyZXR1cm4gbmV3IGNhdChpLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9LG1lcmdlOmZ1bmN0aW9uIGdhdCh0KXtpZih0Ll9pZCE9PXRoaXMuX2lkKXRocm93IG5ldyBFcnJvcjtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49dC5fZ3JvdXBzLGk9ZS5sZW5ndGgscj1NYXRoLm1pbihpLG4ubGVuZ3RoKSxvPW5ldyBBcnJheShpKSxhPTA7YTxyOysrYSlmb3IodmFyIHMsbD1lW2FdLGM9blthXSx1PWwubGVuZ3RoLGg9b1thXT1uZXcgQXJyYXkodSksZD0wO2Q8dTsrK2QpKHM9bFtkXXx8Y1tkXSkmJihoW2RdPXMpO2Zvcig7YTxpOysrYSlvW2FdPWVbYV07cmV0dXJuIG5ldyBjYXQobyx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfSxzZWxlY3Rpb246ZnVuY3Rpb24gX2F0KCl7cmV0dXJuIG5ldyBhYXQodGhpcy5fZ3JvdXBzLHRoaXMuX3BhcmVudHMpfSx0cmFuc2l0aW9uOmZ1bmN0aW9uIHlhdCgpe2Zvcih2YXIgdD10aGlzLl9uYW1lLGU9dGhpcy5faWQsbj1oYXQoKSxpPXRoaXMuX2dyb3VwcyxyPWkubGVuZ3RoLG89MDtvPHI7KytvKWZvcih2YXIgYSxzPWlbb10sbD1zLmxlbmd0aCxjPTA7YzxsOysrYylpZihhPXNbY10pe3ZhciB1PVVydChhLGUpO0hydChhLHQsbixjLHMse3RpbWU6dS50aW1lK3UuZGVsYXkrdS5kdXJhdGlvbixkZWxheTowLGR1cmF0aW9uOnUuZHVyYXRpb24sZWFzZTp1LmVhc2V9KX1yZXR1cm4gbmV3IGNhdChpLHRoaXMuX3BhcmVudHMsdCxuKX0sY2FsbDpkYXQuY2FsbCxub2RlczpkYXQubm9kZXMsbm9kZTpkYXQubm9kZSxzaXplOmRhdC5zaXplLGVtcHR5OmRhdC5lbXB0eSxlYWNoOmRhdC5lYWNoLG9uOmZ1bmN0aW9uIHZhdCh0LGUpe3ZhciBuPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/VXJ0KHRoaXMubm9kZSgpLG4pLm9uLm9uKHQpOnRoaXMuZWFjaChvYXQobix0LGUpKX0sYXR0cjpmdW5jdGlvbiBiYXQodCxlKXt2YXIgbj1MbnQodCksaT0idHJhbnNmb3JtIj09PW4/Rm90OldvdDtyZXR1cm4gdGhpcy5hdHRyVHdlZW4odCwiZnVuY3Rpb24iPT10eXBlb2YgZT8obi5sb2NhbD9ab3Q6S290KShuLGksR290KHRoaXMsImF0dHIuIit0LGUpKTpudWxsPT1lPyhuLmxvY2FsP1lvdDpxb3QpKG4pOihuLmxvY2FsPyRvdDpYb3QpKG4saSxlKyIiKSl9LGF0dHJUd2VlbjpmdW5jdGlvbiB4YXQodCxlKXt2YXIgbj0iYXR0ci4iK3Q7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihuPXRoaXMudHdlZW4obikpJiZuLl92YWx1ZTtpZihudWxsPT1lKXJldHVybiB0aGlzLnR3ZWVuKG4sbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yO3ZhciBpPUxudCh0KTtyZXR1cm4gdGhpcy50d2VlbihuLChpLmxvY2FsP0pvdDpRb3QpKGksZSkpfSxzdHlsZTpmdW5jdGlvbiB3YXQodCxlLG4pe3ZhciBpPSJ0cmFuc2Zvcm0iPT0odCs9IiIpP0JvdDpXb3Q7cmV0dXJuIG51bGw9PWU/dGhpcy5zdHlsZVR3ZWVuKHQsKGZ1bmN0aW9uIG8odCxlKXt2YXIgbixpLHI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89dGl0KHRoaXMsdCksYT0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KSx0aXQodGhpcyx0KSk7cmV0dXJuIG89PT1hP251bGw6bz09PW4mJmE9PT1pP3I6cj1lKG49byxpPWEpfX0pKHQsaSkpLm9uKCJlbmQuc3R5bGUuIit0LChmdW5jdGlvbiByKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCl9fSkodCkpOnRoaXMuc3R5bGVUd2Vlbih0LCJmdW5jdGlvbiI9PXR5cGVvZiBlPyhmdW5jdGlvbiBhKHQsZSxuKXt2YXIgaSxyLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9dGl0KHRoaXMsdCkscz1uKHRoaXMpO3JldHVybiBudWxsPT1zJiYodGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KSxzPXRpdCh0aGlzLHQpKSxhPT09cz9udWxsOmE9PT1pJiZzPT09cj9vOm89ZShpPWEscj1zKX19KSh0LGksR290KHRoaXMsInN0eWxlLiIrdCxlKSk6KGZ1bmN0aW9uIHModCxlLG4pe3ZhciBpLHI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89dGl0KHRoaXMsdCk7cmV0dXJuIG89PT1uP251bGw6bz09PWk/cjpyPWUoaT1vLG4pfX0pKHQsaSxlKyIiKSxuKX0sc3R5bGVUd2VlbjpmdW5jdGlvbiBTYXQodCxlLG4pe3ZhciBpPSJzdHlsZS4iKyh0Kz0iIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihpPXRoaXMudHdlZW4oaSkpJiZpLl92YWx1ZTtpZihudWxsPT1lKXJldHVybiB0aGlzLnR3ZWVuKGksbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKGksc2F0KHQsZSxudWxsPT1uPyIiOm4pKX0sdGV4dDpmdW5jdGlvbiBNYXQodCl7cmV0dXJuIHRoaXMudHdlZW4oInRleHQiLCJmdW5jdGlvbiI9PXR5cGVvZiB0PyhmdW5jdGlvbiBlKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQodGhpcyk7dGhpcy50ZXh0Q29udGVudD1udWxsPT1lPyIiOmV9fSkoR290KHRoaXMsInRleHQiLHQpKTooZnVuY3Rpb24gbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PXR9fSkobnVsbD09dD8iIjp0KyIiKSl9LHJlbW92ZTpmdW5jdGlvbiBFYXQoKXtyZXR1cm4gdGhpcy5vbigiZW5kLnJlbW92ZSIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlO2Zvcih2YXIgbiBpbiB0aGlzLl9fdHJhbnNpdGlvbilpZigrbiE9PWUpcmV0dXJuO3QmJnQucmVtb3ZlQ2hpbGQodGhpcyl9fSkodGhpcy5faWQpKX0sdHdlZW46ZnVuY3Rpb24gVGF0KHQsZSl7dmFyIG49dGhpcy5faWQ7aWYodCs9IiIsYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIGkscj1VcnQodGhpcy5ub2RlKCksbikudHdlZW4sbz0wLGE9ci5sZW5ndGg7bzxhOysrbylpZigoaT1yW29dKS5uYW1lPT09dClyZXR1cm4gaS52YWx1ZTtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT1lP1VvdDpqb3QpKG4sdCxlKSl9LGRlbGF5OmZ1bmN0aW9uIENhdCh0KXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiB0P3RhdDplYXQpKGUsdCkpOlVydCh0aGlzLm5vZGUoKSxlKS5kZWxheX0sZHVyYXRpb246ZnVuY3Rpb24gQWF0KHQpe3ZhciBlPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIHQ/bmF0OmlhdCkoZSx0KSk6VXJ0KHRoaXMubm9kZSgpLGUpLmR1cmF0aW9ufSxlYXNlOmZ1bmN0aW9uIGthdCh0KXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2gocmF0KGUsdCkpOlVydCh0aGlzLm5vZGUoKSxlKS5lYXNlfX07dmFyIExhdD17dGltZTpudWxsLGRlbGF5OjAsZHVyYXRpb246MjUwLGVhc2U6RWZ9O2Z1bmN0aW9uIFBhdCh0LGUpe2Zvcih2YXIgbjshKG49dC5fX3RyYW5zaXRpb24pfHwhKG49bltlXSk7KWlmKCEodD10LnBhcmVudE5vZGUpKXJldHVybiBMYXQudGltZT1rcnQoKSxMYXQ7cmV0dXJuIG59Uml0LnByb3RvdHlwZS5pbnRlcnJ1cHQ9ZnVuY3Rpb24gTmF0KHQpe3JldHVybiB0aGlzLmVhY2goKGZ1bmN0aW9uKCl7anJ0KHRoaXMsdCl9KSl9LFJpdC5wcm90b3R5cGUudHJhbnNpdGlvbj1mdW5jdGlvbiBJYXQodCl7dmFyIGUsbjt0IGluc3RhbmNlb2YgY2F0PyhlPXQuX2lkLHQ9dC5fbmFtZSk6KGU9aGF0KCksKG49TGF0KS50aW1lPWtydCgpLHQ9bnVsbD09dD9udWxsOnQrIiIpO2Zvcih2YXIgaT10aGlzLl9ncm91cHMscj1pLmxlbmd0aCxvPTA7bzxyOysrbylmb3IodmFyIGEscz1pW29dLGw9cy5sZW5ndGgsYz0wO2M8bDsrK2MpKGE9c1tjXSkmJkhydChhLHQsZSxjLHMsbnx8UGF0KGEsZSkpO3JldHVybiBuZXcgY2F0KGksdGhpcy5fcGFyZW50cyx0LGUpfTt2YXIgT2F0PVtudWxsXTtmdW5jdGlvbiBSYXQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIHphdCh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiBEYXQodCl7cmV0dXJuIHRbMV19ZnVuY3Rpb24gQmF0KCl7dGhpcy5fPW51bGx9ZnVuY3Rpb24gSGF0KHQpe3QuVT10LkM9dC5MPXQuUj10LlA9dC5OPW51bGx9ZnVuY3Rpb24gRmF0KHQsZSl7dmFyIG49ZSxpPWUuUixyPW4uVTtyP3IuTD09PW4/ci5MPWk6ci5SPWk6dC5fPWksaS5VPXIsbi5VPWksbi5SPWkuTCxuLlImJihuLlIuVT1uKSxpLkw9bn1mdW5jdGlvbiBWYXQodCxlKXt2YXIgbj1lLGk9ZS5MLHI9bi5VO3I/ci5MPT09bj9yLkw9aTpyLlI9aTp0Ll89aSxpLlU9cixuLlU9aSxuLkw9aS5SLG4uTCYmKG4uTC5VPW4pLGkuUj1ufWZ1bmN0aW9uIFVhdCh0KXtmb3IoO3QuTDspdD10Lkw7cmV0dXJuIHR9ZnVuY3Rpb24gamF0KHQsZSxuLGkpe3ZhciByPVtudWxsLG51bGxdLG89cHN0LnB1c2gociktMTtyZXR1cm4gci5sZWZ0PXQsci5yaWdodD1lLG4mJldhdChyLHQsZSxuKSxpJiZXYXQocixlLHQsaSksaHN0W3QuaW5kZXhdLmhhbGZlZGdlcy5wdXNoKG8pLGhzdFtlLmluZGV4XS5oYWxmZWRnZXMucHVzaChvKSxyfWZ1bmN0aW9uIEdhdCh0LGUsbil7dmFyIGk9W2Usbl07cmV0dXJuIGkubGVmdD10LGl9ZnVuY3Rpb24gV2F0KHQsZSxuLGkpe3RbMF18fHRbMV0/dC5sZWZ0PT09bj90WzFdPWk6dFswXT1pOih0WzBdPWksdC5sZWZ0PWUsdC5yaWdodD1uKX1mdW5jdGlvbiBxYXQodCxlLG4saSxyKXt2YXIgbyxhPXRbMF0scz10WzFdLGw9YVswXSxjPWFbMV0sdT0wLGg9MSxkPXNbMF0tbCxwPXNbMV0tYztpZihvPWUtbCxkfHwhKG8+MCkpe2lmKG8vPWQsZDwwKXtpZihvPHUpcmV0dXJuO288aCYmKGg9byl9ZWxzZSBpZihkPjApe2lmKG8+aClyZXR1cm47bz51JiYodT1vKX1pZihvPWktbCxkfHwhKG88MCkpe2lmKG8vPWQsZDwwKXtpZihvPmgpcmV0dXJuO28+dSYmKHU9byl9ZWxzZSBpZihkPjApe2lmKG88dSlyZXR1cm47bzxoJiYoaD1vKX1pZihvPW4tYyxwfHwhKG8+MCkpe2lmKG8vPXAscDwwKXtpZihvPHUpcmV0dXJuO288aCYmKGg9byl9ZWxzZSBpZihwPjApe2lmKG8+aClyZXR1cm47bz51JiYodT1vKX1pZihvPXItYyxwfHwhKG88MCkpe2lmKG8vPXAscDwwKXtpZihvPmgpcmV0dXJuO28+dSYmKHU9byl9ZWxzZSBpZihwPjApe2lmKG88dSlyZXR1cm47bzxoJiYoaD1vKX1yZXR1cm4hKHU+MHx8aDwxKXx8KHU+MCYmKHRbMF09W2wrdSpkLGMrdSpwXSksaDwxJiYodFsxXT1bbCtoKmQsYytoKnBdKSwhMCl9fX19fWZ1bmN0aW9uIFlhdCh0LGUsbixpLHIpe3ZhciBvPXRbMV07aWYobylyZXR1cm4hMDt2YXIgYSxzLGw9dFswXSxjPXQubGVmdCx1PXQucmlnaHQsaD1jWzBdLGQ9Y1sxXSxwPXVbMF0sZj11WzFdLG09KGgrcCkvMjtpZihmPT09ZCl7aWYobTxlfHxtPj1pKXJldHVybjtpZihoPnApe2lmKGwpe2lmKGxbMV0+PXIpcmV0dXJufWVsc2UgbD1bbSxuXTtvPVttLHJdfWVsc2V7aWYobCl7aWYobFsxXTxuKXJldHVybn1lbHNlIGw9W20scl07bz1bbSxuXX19ZWxzZSBpZihzPShkK2YpLzItKGE9KGgtcCkvKGYtZCkpKm0sYTwtMXx8YT4xKWlmKGg+cCl7aWYobCl7aWYobFsxXT49cilyZXR1cm59ZWxzZSBsPVsobi1zKS9hLG5dO289WyhyLXMpL2Escl19ZWxzZXtpZihsKXtpZihsWzFdPG4pcmV0dXJufWVsc2UgbD1bKHItcykvYSxyXTtvPVsobi1zKS9hLG5dfWVsc2UgaWYoZDxmKXtpZihsKXtpZihsWzBdPj1pKXJldHVybn1lbHNlIGw9W2UsYSplK3NdO289W2ksYSppK3NdfWVsc2V7aWYobCl7aWYobFswXTxlKXJldHVybn1lbHNlIGw9W2ksYSppK3NdO289W2UsYSplK3NdfXJldHVybiB0WzBdPWwsdFsxXT1vLCEwfWZ1bmN0aW9uIFhhdCh0LGUpe3ZhciBuPXQuc2l0ZSxpPWUubGVmdCxyPWUucmlnaHQ7cmV0dXJuIG49PT1yJiYocj1pLGk9bikscj9NYXRoLmF0YW4yKHJbMV0taVsxXSxyWzBdLWlbMF0pOihuPT09aT8oaT1lWzFdLHI9ZVswXSk6KGk9ZVswXSxyPWVbMV0pLE1hdGguYXRhbjIoaVswXS1yWzBdLHJbMV0taVsxXSkpfWZ1bmN0aW9uICRhdCh0LGUpe3JldHVybiBlWysoZS5sZWZ0IT09dC5zaXRlKV19ZnVuY3Rpb24gS2F0KHQsZSl7cmV0dXJuIGVbKyhlLmxlZnQ9PT10LnNpdGUpXX1CYXQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpCYXQsaW5zZXJ0OmZ1bmN0aW9uKHQsZSl7dmFyIG4saSxyO2lmKHQpe2lmKGUuUD10LGUuTj10Lk4sdC5OJiYodC5OLlA9ZSksdC5OPWUsdC5SKXtmb3IodD10LlI7dC5MOyl0PXQuTDt0Lkw9ZX1lbHNlIHQuUj1lO249dH1lbHNlIHRoaXMuXz8odD1VYXQodGhpcy5fKSxlLlA9bnVsbCxlLk49dCx0LlA9dC5MPWUsbj10KTooZS5QPWUuTj1udWxsLHRoaXMuXz1lLG49bnVsbCk7Zm9yKGUuTD1lLlI9bnVsbCxlLlU9bixlLkM9ITAsdD1lO24mJm4uQzspbj09PShpPW4uVSkuTD8ocj1pLlIpJiZyLkM/KG4uQz1yLkM9ITEsaS5DPSEwLHQ9aSk6KHQ9PT1uLlImJihGYXQodGhpcyxuKSxuPSh0PW4pLlUpLG4uQz0hMSxpLkM9ITAsVmF0KHRoaXMsaSkpOihyPWkuTCkmJnIuQz8obi5DPXIuQz0hMSxpLkM9ITAsdD1pKToodD09PW4uTCYmKFZhdCh0aGlzLG4pLG49KHQ9bikuVSksbi5DPSExLGkuQz0hMCxGYXQodGhpcyxpKSksbj10LlU7dGhpcy5fLkM9ITF9LHJlbW92ZTpmdW5jdGlvbih0KXt0Lk4mJih0Lk4uUD10LlApLHQuUCYmKHQuUC5OPXQuTiksdC5OPXQuUD1udWxsO3ZhciBlLG4saSxyPXQuVSxvPXQuTCxhPXQuUjtpZihuPW8/YT9VYXQoYSk6bzphLHI/ci5MPT09dD9yLkw9bjpyLlI9bjp0aGlzLl89bixvJiZhPyhpPW4uQyxuLkM9dC5DLG4uTD1vLG8uVT1uLG4hPT1hPyhyPW4uVSxuLlU9dC5VLHIuTD10PW4uUixuLlI9YSxhLlU9bik6KG4uVT1yLHI9bix0PW4uUikpOihpPXQuQyx0PW4pLHQmJih0LlU9ciksIWkpaWYodCYmdC5DKXQuQz0hMTtlbHNle2Rve2lmKHQ9PT10aGlzLl8pYnJlYWs7aWYodD09PXIuTCl7aWYoKGU9ci5SKS5DJiYoZS5DPSExLHIuQz0hMCxGYXQodGhpcyxyKSxlPXIuUiksZS5MJiZlLkwuQ3x8ZS5SJiZlLlIuQyl7ZS5SJiZlLlIuQ3x8KGUuTC5DPSExLGUuQz0hMCxWYXQodGhpcyxlKSxlPXIuUiksZS5DPXIuQyxyLkM9ZS5SLkM9ITEsRmF0KHRoaXMsciksdD10aGlzLl87YnJlYWt9fWVsc2UgaWYoKGU9ci5MKS5DJiYoZS5DPSExLHIuQz0hMCxWYXQodGhpcyxyKSxlPXIuTCksZS5MJiZlLkwuQ3x8ZS5SJiZlLlIuQyl7ZS5MJiZlLkwuQ3x8KGUuUi5DPSExLGUuQz0hMCxGYXQodGhpcyxlKSxlPXIuTCksZS5DPXIuQyxyLkM9ZS5MLkM9ITEsVmF0KHRoaXMsciksdD10aGlzLl87YnJlYWt9ZS5DPSEwLHQ9cixyPXIuVX13aGlsZSghdC5DKTt0JiYodC5DPSExKX19fTt2YXIgWmF0LEphdD1bXTtmdW5jdGlvbiBRYXQoKXtIYXQodGhpcyksdGhpcy54PXRoaXMueT10aGlzLmFyYz10aGlzLnNpdGU9dGhpcy5jeT1udWxsfWZ1bmN0aW9uIHRzdCh0KXt2YXIgZT10LlAsbj10Lk47aWYoZSYmbil7dmFyIGk9ZS5zaXRlLHI9dC5zaXRlLG89bi5zaXRlO2lmKGkhPT1vKXt2YXIgYT1yWzBdLHM9clsxXSxsPWlbMF0tYSxjPWlbMV0tcyx1PW9bMF0tYSxoPW9bMV0tcyxkPTIqKGwqaC1jKnUpO2lmKCEoZD49LW1zdCkpe3ZhciBwPWwqbCtjKmMsZj11KnUraCpoLG09KGgqcC1jKmYpL2QsZz0obCpmLXUqcCkvZCxfPUphdC5wb3AoKXx8bmV3IFFhdDtfLmFyYz10LF8uc2l0ZT1yLF8ueD1tK2EsXy55PShfLmN5PWcrcykrTWF0aC5zcXJ0KG0qbStnKmcpLHQuY2lyY2xlPV87Zm9yKHZhciB5PW51bGwsdj1kc3QuXzt2OylpZihfLnk8di55fHxfLnk9PT12LnkmJl8ueDw9di54KXtpZighdi5MKXt5PXYuUDticmVha312PXYuTH1lbHNle2lmKCF2LlIpe3k9djticmVha312PXYuUn1kc3QuaW5zZXJ0KHksXykseXx8KFphdD1fKX19fX1mdW5jdGlvbiBlc3QodCl7dmFyIGU9dC5jaXJjbGU7ZSYmKGUuUHx8KFphdD1lLk4pLGRzdC5yZW1vdmUoZSksSmF0LnB1c2goZSksSGF0KGUpLHQuY2lyY2xlPW51bGwpfXZhciBuc3Q9W107ZnVuY3Rpb24gaXN0KCl7SGF0KHRoaXMpLHRoaXMuZWRnZT10aGlzLnNpdGU9dGhpcy5jaXJjbGU9bnVsbH1mdW5jdGlvbiByc3QodCl7dmFyIGU9bnN0LnBvcCgpfHxuZXcgaXN0O3JldHVybiBlLnNpdGU9dCxlfWZ1bmN0aW9uIG9zdCh0KXtlc3QodCksdXN0LnJlbW92ZSh0KSxuc3QucHVzaCh0KSxIYXQodCl9ZnVuY3Rpb24gYXN0KHQpe3ZhciBlPXQuY2lyY2xlLG49ZS54LGk9ZS5jeSxyPVtuLGldLG89dC5QLGE9dC5OLHM9W3RdO29zdCh0KTtmb3IodmFyIGw9bztsLmNpcmNsZSYmTWF0aC5hYnMobi1sLmNpcmNsZS54KTxmc3QmJk1hdGguYWJzKGktbC5jaXJjbGUuY3kpPGZzdDspbz1sLlAscy51bnNoaWZ0KGwpLG9zdChsKSxsPW87cy51bnNoaWZ0KGwpLGVzdChsKTtmb3IodmFyIGM9YTtjLmNpcmNsZSYmTWF0aC5hYnMobi1jLmNpcmNsZS54KTxmc3QmJk1hdGguYWJzKGktYy5jaXJjbGUuY3kpPGZzdDspYT1jLk4scy5wdXNoKGMpLG9zdChjKSxjPWE7cy5wdXNoKGMpLGVzdChjKTt2YXIgdSxoPXMubGVuZ3RoO2Zvcih1PTE7dTxoOysrdSlXYXQoKGM9c1t1XSkuZWRnZSwobD1zW3UtMV0pLnNpdGUsYy5zaXRlLHIpOyhjPXNbaC0xXSkuZWRnZT1qYXQoKGw9c1swXSkuc2l0ZSxjLnNpdGUsbnVsbCxyKSx0c3QobCksdHN0KGMpfWZ1bmN0aW9uIHNzdCh0KXtmb3IodmFyIGUsbixpLHIsbz10WzBdLGE9dFsxXSxzPXVzdC5fO3M7KWlmKChpPWxzdChzLGEpLW8pPmZzdClzPXMuTDtlbHNle2lmKCEoKHI9by1jc3QocyxhKSk+ZnN0KSl7aT4tZnN0PyhlPXMuUCxuPXMpOnI+LWZzdD8oZT1zLG49cy5OKTplPW49czticmVha31pZighcy5SKXtlPXM7YnJlYWt9cz1zLlJ9IShmdW5jdGlvbiBsKHQpe2hzdFt0LmluZGV4XT17c2l0ZTp0LGhhbGZlZGdlczpbXX19KSh0KTt2YXIgYz1yc3QodCk7aWYodXN0Lmluc2VydChlLGMpLGV8fG4pe2lmKGU9PT1uKXJldHVybiBlc3QoZSksbj1yc3QoZS5zaXRlKSx1c3QuaW5zZXJ0KGMsbiksYy5lZGdlPW4uZWRnZT1qYXQoZS5zaXRlLGMuc2l0ZSksdHN0KGUpLHZvaWQgdHN0KG4pO2lmKG4pe2VzdChlKSxlc3Qobik7dmFyIHU9ZS5zaXRlLGg9dVswXSxkPXVbMV0scD10WzBdLWgsZj10WzFdLWQsbT1uLnNpdGUsZz1tWzBdLWgsXz1tWzFdLWQseT0yKihwKl8tZipnKSx2PXAqcCtmKmYsYj1nKmcrXypfLHg9WyhfKnYtZipiKS95K2gsKHAqYi1nKnYpL3krZF07V2F0KG4uZWRnZSx1LG0seCksYy5lZGdlPWphdCh1LHQsbnVsbCx4KSxuLmVkZ2U9amF0KHQsbSxudWxsLHgpLHRzdChlKSx0c3Qobil9ZWxzZSBjLmVkZ2U9amF0KGUuc2l0ZSxjLnNpdGUpfX1mdW5jdGlvbiBsc3QodCxlKXt2YXIgbj10LnNpdGUsaT1uWzBdLHI9blsxXSxvPXItZTtpZighbylyZXR1cm4gaTt2YXIgYT10LlA7aWYoIWEpcmV0dXJuLTEvMDt2YXIgcz0obj1hLnNpdGUpWzBdLGw9blsxXSxjPWwtZTtpZighYylyZXR1cm4gczt2YXIgdT1zLWksaD0xL28tMS9jLGQ9dS9jO3JldHVybiBoPygtZCtNYXRoLnNxcnQoZCpkLTIqaCoodSp1LygtMipjKS1sK2MvMityLW8vMikpKS9oK2k6KGkrcykvMn1mdW5jdGlvbiBjc3QodCxlKXt2YXIgbj10Lk47aWYobilyZXR1cm4gbHN0KG4sZSk7dmFyIGk9dC5zaXRlO3JldHVybiBpWzFdPT09ZT9pWzBdOjEvMH12YXIgdXN0LGhzdCxkc3QscHN0LGZzdD0xZS02LG1zdD0xZS0xMjtmdW5jdGlvbiBnc3QodCxlLG4pe3JldHVybih0WzBdLW5bMF0pKihlWzFdLXRbMV0pLSh0WzBdLWVbMF0pKihuWzFdLXRbMV0pfWZ1bmN0aW9uIF9zdCh0LGUpe3JldHVybiBlWzFdLXRbMV18fGVbMF0tdFswXX1mdW5jdGlvbiB5c3QodCxlKXt2YXIgbixpLHIsbz10LnNvcnQoX3N0KS5wb3AoKTtmb3IocHN0PVtdLGhzdD1uZXcgQXJyYXkodC5sZW5ndGgpLHVzdD1uZXcgQmF0LGRzdD1uZXcgQmF0OzspaWYocj1aYXQsbyYmKCFyfHxvWzFdPHIueXx8b1sxXT09PXIueSYmb1swXTxyLngpKW9bMF09PT1uJiZvWzFdPT09aXx8KHNzdChvKSxuPW9bMF0saT1vWzFdKSxvPXQucG9wKCk7ZWxzZXtpZighcilicmVhazthc3Qoci5hcmMpfWlmKChmdW5jdGlvbiBhKCl7Zm9yKHZhciB0LGUsbixpLHI9MCxvPWhzdC5sZW5ndGg7cjxvOysrcilpZigodD1oc3Rbcl0pJiYoaT0oZT10LmhhbGZlZGdlcykubGVuZ3RoKSl7dmFyIGE9bmV3IEFycmF5KGkpLHM9bmV3IEFycmF5KGkpO2ZvcihuPTA7bjxpOysrbilhW25dPW4sc1tuXT1YYXQodCxwc3RbZVtuXV0pO2ZvcihhLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHNbZV0tc1t0XX0pKSxuPTA7bjxpOysrbilzW25dPWVbYVtuXV07Zm9yKG49MDtuPGk7KytuKWVbbl09c1tuXX19KSgpLGUpe3ZhciBzPStlWzBdWzBdLGw9K2VbMF1bMV0sYz0rZVsxXVswXSx1PStlWzFdWzFdOyEoZnVuY3Rpb24gaCh0LGUsbixpKXtmb3IodmFyIHIsbz1wc3QubGVuZ3RoO28tLTspWWF0KHI9cHN0W29dLHQsZSxuLGkpJiZxYXQocix0LGUsbixpKSYmKE1hdGguYWJzKHJbMF1bMF0tclsxXVswXSk+ZnN0fHxNYXRoLmFicyhyWzBdWzFdLXJbMV1bMV0pPmZzdCl8fGRlbGV0ZSBwc3Rbb119KShzLGwsYyx1KSwoZnVuY3Rpb24gZCh0LGUsbixpKXt2YXIgcixvLGEscyxsLGMsdSxoLGQscCxmLG0sZz1oc3QubGVuZ3RoLF89ITA7Zm9yKHI9MDtyPGc7KytyKWlmKG89aHN0W3JdKXtmb3IoYT1vLnNpdGUscz0obD1vLmhhbGZlZGdlcykubGVuZ3RoO3MtLTspcHN0W2xbc11dfHxsLnNwbGljZShzLDEpO2ZvcihzPTAsYz1sLmxlbmd0aDtzPGM7KWY9KHA9S2F0KG8scHN0W2xbc11dKSlbMF0sbT1wWzFdLGg9KHU9JGF0KG8scHN0W2xbKytzJWNdXSkpWzBdLGQ9dVsxXSwoTWF0aC5hYnMoZi1oKT5mc3R8fE1hdGguYWJzKG0tZCk+ZnN0KSYmKGwuc3BsaWNlKHMsMCxwc3QucHVzaChHYXQoYSxwLE1hdGguYWJzKGYtdCk8ZnN0JiZpLW0+ZnN0P1t0LE1hdGguYWJzKGgtdCk8ZnN0P2Q6aV06TWF0aC5hYnMobS1pKTxmc3QmJm4tZj5mc3Q/W01hdGguYWJzKGQtaSk8ZnN0P2g6bixpXTpNYXRoLmFicyhmLW4pPGZzdCYmbS1lPmZzdD9bbixNYXRoLmFicyhoLW4pPGZzdD9kOmVdOk1hdGguYWJzKG0tZSk8ZnN0JiZmLXQ+ZnN0P1tNYXRoLmFicyhkLWUpPGZzdD9oOnQsZV06bnVsbCkpLTEpLCsrYyk7YyYmKF89ITEpfWlmKF8pe3ZhciB5LHYsYix4PTEvMDtmb3Iocj0wLF89bnVsbDtyPGc7KytyKShvPWhzdFtyXSkmJihiPSh5PShhPW8uc2l0ZSlbMF0tdCkqeSsodj1hWzFdLWUpKnYpPHgmJih4PWIsXz1vKTtpZihfKXt2YXIgdz1bdCxlXSxTPVt0LGldLE09W24saV0sRT1bbixlXTtfLmhhbGZlZGdlcy5wdXNoKHBzdC5wdXNoKEdhdChhPV8uc2l0ZSx3LFMpKS0xLHBzdC5wdXNoKEdhdChhLFMsTSkpLTEscHN0LnB1c2goR2F0KGEsTSxFKSktMSxwc3QucHVzaChHYXQoYSxFLHcpKS0xKX19Zm9yKHI9MDtyPGc7KytyKShvPWhzdFtyXSkmJihvLmhhbGZlZGdlcy5sZW5ndGh8fGRlbGV0ZSBoc3Rbcl0pfSkocyxsLGMsdSl9dGhpcy5lZGdlcz1wc3QsdGhpcy5jZWxscz1oc3QsdXN0PWRzdD1wc3Q9aHN0PW51bGx9eXN0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6eXN0LHBvbHlnb25zOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5lZGdlcztyZXR1cm4gdGhpcy5jZWxscy5tYXAoKGZ1bmN0aW9uKGUpe3ZhciBuPWUuaGFsZmVkZ2VzLm1hcCgoZnVuY3Rpb24obil7cmV0dXJuICRhdChlLHRbbl0pfSkpO3JldHVybiBuLmRhdGE9ZS5zaXRlLmRhdGEsbn0pKX0sdHJpYW5nbGVzOmZ1bmN0aW9uKCl7dmFyIHQ9W10sZT10aGlzLmVkZ2VzO3JldHVybiB0aGlzLmNlbGxzLmZvckVhY2goKGZ1bmN0aW9uKG4saSl7aWYobz0ocj1uLmhhbGZlZGdlcykubGVuZ3RoKWZvcih2YXIgcixvLGEscz1uLnNpdGUsbD0tMSxjPWVbcltvLTFdXSx1PWMubGVmdD09PXM/Yy5yaWdodDpjLmxlZnQ7KytsPG87KWE9dSx1PShjPWVbcltsXV0pLmxlZnQ9PT1zP2MucmlnaHQ6Yy5sZWZ0LGEmJnUmJmk8YS5pbmRleCYmaTx1LmluZGV4JiZnc3QocyxhLHUpPDAmJnQucHVzaChbcy5kYXRhLGEuZGF0YSx1LmRhdGFdKX0pKSx0fSxsaW5rczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZ2VzLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQucmlnaHR9KSkubWFwKChmdW5jdGlvbih0KXtyZXR1cm57c291cmNlOnQubGVmdC5kYXRhLHRhcmdldDp0LnJpZ2h0LmRhdGF9fSkpfSxmaW5kOmZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIGkscixvPXRoaXMsYT1vLl9mb3VuZHx8MCxzPW8uY2VsbHMubGVuZ3RoOyEocj1vLmNlbGxzW2FdKTspaWYoKythPj1zKXJldHVybiBudWxsO3ZhciBsPXQtci5zaXRlWzBdLGM9ZS1yLnNpdGVbMV0sdT1sKmwrYypjO2Rve3I9by5jZWxsc1tpPWFdLGE9bnVsbCxyLmhhbGZlZGdlcy5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgaT1vLmVkZ2VzW25dLHM9aS5sZWZ0O2lmKHMhPT1yLnNpdGUmJnN8fChzPWkucmlnaHQpKXt2YXIgbD10LXNbMF0sYz1lLXNbMV0saD1sKmwrYypjO2g8dSYmKHU9aCxhPXMuaW5kZXgpfX0pKX13aGlsZShudWxsIT09YSk7cmV0dXJuIG8uX2ZvdW5kPWksbnVsbD09bnx8dTw9bipuP3Iuc2l0ZTpudWxsfX07dmFyIHZzdD17dmFsdWU6ZnVuY3Rpb24oKXt9fTtmdW5jdGlvbiBic3QoKXtmb3IodmFyIHQsZT0wLG49YXJndW1lbnRzLmxlbmd0aCxpPXt9O2U8bjsrK2Upe2lmKCEodD1hcmd1bWVudHNbZV0rIiIpfHx0IGluIGl8fC9bXHMuXS8udGVzdCh0KSl0aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgdHlwZTogIit0KTtpW3RdPVtdfXJldHVybiBuZXcgeHN0KGkpfWZ1bmN0aW9uIHhzdCh0KXt0aGlzLl89dH1mdW5jdGlvbiB3c3QodCxlKXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLykubWFwKChmdW5jdGlvbih0KXt2YXIgbj0iIixpPXQuaW5kZXhPZigiLiIpO2lmKGk+PTAmJihuPXQuc2xpY2UoaSsxKSx0PXQuc2xpY2UoMCxpKSksdCYmIWUuaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7cmV0dXJue3R5cGU6dCxuYW1lOm59fSkpfWZ1bmN0aW9uIFNzdCh0LGUpe2Zvcih2YXIgbixpPTAscj10Lmxlbmd0aDtpPHI7KytpKWlmKChuPXRbaV0pLm5hbWU9PT1lKXJldHVybiBuLnZhbHVlfWZ1bmN0aW9uIE1zdCh0LGUsbil7Zm9yKHZhciBpPTAscj10Lmxlbmd0aDtpPHI7KytpKWlmKHRbaV0ubmFtZT09PWUpe3RbaV09dnN0LHQ9dC5zbGljZSgwLGkpLmNvbmNhdCh0LnNsaWNlKGkrMSkpO2JyZWFrfXJldHVybiBudWxsIT1uJiZ0LnB1c2goe25hbWU6ZSx2YWx1ZTpufSksdH14c3QucHJvdG90eXBlPWJzdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnhzdCxvbjpmdW5jdGlvbih0LGUpe3ZhciBuLGk9dGhpcy5fLHI9d3N0KHQrIiIsaSksbz0tMSxhPXIubGVuZ3RoO2lmKCEoYXJndW1lbnRzLmxlbmd0aDwyKSl7aWYobnVsbCE9ZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrOiAiK2UpO2Zvcig7KytvPGE7KWlmKG49KHQ9cltvXSkudHlwZSlpW25dPU1zdChpW25dLHQubmFtZSxlKTtlbHNlIGlmKG51bGw9PWUpZm9yKG4gaW4gaSlpW25dPU1zdChpW25dLHQubmFtZSxudWxsKTtyZXR1cm4gdGhpc31mb3IoOysrbzxhOylpZigobj0odD1yW29dKS50eXBlKSYmKG49U3N0KGlbbl0sdC5uYW1lKSkpcmV0dXJuIG59LGNvcHk6ZnVuY3Rpb24oKXt2YXIgdD17fSxlPXRoaXMuXztmb3IodmFyIG4gaW4gZSl0W25dPWVbbl0uc2xpY2UoKTtyZXR1cm4gbmV3IHhzdCh0KX0sY2FsbDpmdW5jdGlvbih0LGUpe2lmKChuPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIG4saSxyPW5ldyBBcnJheShuKSxvPTA7bzxuOysrbylyW29dPWFyZ3VtZW50c1tvKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7Zm9yKG89MCxuPShpPXRoaXMuX1t0XSkubGVuZ3RoO288bjsrK28paVtvXS52YWx1ZS5hcHBseShlLHIpfSxhcHBseTpmdW5jdGlvbih0LGUsbil7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtmb3IodmFyIGk9dGhpcy5fW3RdLHI9MCxvPWkubGVuZ3RoO3I8bzsrK3IpaVtyXS52YWx1ZS5hcHBseShlLG4pfX07dmFyIEVzdD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsVHN0PXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDpFc3QseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifTtmdW5jdGlvbiBDc3QodCl7dmFyIGU9dCs9IiIsbj1lLmluZGV4T2YoIjoiKTtyZXR1cm4gbj49MCYmInhtbG5zIiE9PShlPXQuc2xpY2UoMCxuKSkmJih0PXQuc2xpY2UobisxKSksVHN0Lmhhc093blByb3BlcnR5KGUpP3tzcGFjZTpUc3RbZV0sbG9jYWw6dH06dH1mdW5jdGlvbiBBc3QodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vd25lckRvY3VtZW50LG49dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIG49PT1Fc3QmJmUuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PUVzdD9lLmNyZWF0ZUVsZW1lbnQodCk6ZS5jcmVhdGVFbGVtZW50TlMobix0KX19ZnVuY3Rpb24ga3N0KHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHQuc3BhY2UsdC5sb2NhbCl9fWZ1bmN0aW9uIExzdCh0KXt2YXIgZT1Dc3QodCk7cmV0dXJuKGUubG9jYWw/a3N0OkFzdCkoZSl9ZnVuY3Rpb24gUHN0KCl7fWZ1bmN0aW9uIE5zdCh0KXtyZXR1cm4gbnVsbD09dD9Qc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKHQpfX1mdW5jdGlvbiBJc3QoKXtyZXR1cm5bXX1mdW5jdGlvbiBPc3QodCl7cmV0dXJuIG51bGw9PXQ/SXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbCh0KX19ZnVuY3Rpb24gUnN0KHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoZXModCl9fWZ1bmN0aW9uIHpzdCh0KXtyZXR1cm4gbmV3IEFycmF5KHQubGVuZ3RoKX1mdW5jdGlvbiBEc3QodCxlKXt0aGlzLm93bmVyRG9jdW1lbnQ9dC5vd25lckRvY3VtZW50LHRoaXMubmFtZXNwYWNlVVJJPXQubmFtZXNwYWNlVVJJLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wYXJlbnQ9dCx0aGlzLl9fZGF0YV9fPWV9ZnVuY3Rpb24gQnN0KHQsZSxuLGkscixvKXtmb3IodmFyIGEscz0wLGw9ZS5sZW5ndGgsYz1vLmxlbmd0aDtzPGM7KytzKShhPWVbc10pPyhhLl9fZGF0YV9fPW9bc10saVtzXT1hKTpuW3NdPW5ldyBEc3QodCxvW3NdKTtmb3IoO3M8bDsrK3MpKGE9ZVtzXSkmJihyW3NdPWEpfWZ1bmN0aW9uIEhzdCh0LGUsbixpLHIsbyxhKXt2YXIgcyxsLGMsdT17fSxoPWUubGVuZ3RoLGQ9by5sZW5ndGgscD1uZXcgQXJyYXkoaCk7Zm9yKHM9MDtzPGg7KytzKShsPWVbc10pJiYocFtzXT1jPSIkIithLmNhbGwobCxsLl9fZGF0YV9fLHMsZSksYyBpbiB1P3Jbc109bDp1W2NdPWwpO2ZvcihzPTA7czxkOysrcykobD11W2M9IiQiK2EuY2FsbCh0LG9bc10scyxvKV0pPyhpW3NdPWwsbC5fX2RhdGFfXz1vW3NdLHVbY109bnVsbCk6bltzXT1uZXcgRHN0KHQsb1tzXSk7Zm9yKHM9MDtzPGg7KytzKShsPWVbc10pJiZ1W3Bbc11dPT09bCYmKHJbc109bCl9ZnVuY3Rpb24gRnN0KHQsZSl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTp0Pj1lPzA6TmFOfWZ1bmN0aW9uIFZzdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX19ZnVuY3Rpb24gVXN0KHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKX19ZnVuY3Rpb24ganN0KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUodCxlKX19ZnVuY3Rpb24gR3N0KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwsZSl9fWZ1bmN0aW9uIFdzdCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PW4/dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCk6dGhpcy5zZXRBdHRyaWJ1dGUodCxuKX19ZnVuY3Rpb24gcXN0KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09bj90aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCk6dGhpcy5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwsbil9fWZ1bmN0aW9uIFlzdCh0KXtyZXR1cm4gdC5vd25lckRvY3VtZW50JiZ0Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fHQuZG9jdW1lbnQmJnR8fHQuZGVmYXVsdFZpZXd9ZnVuY3Rpb24gWHN0KHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCl9fWZ1bmN0aW9uICRzdCh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LGUsbil9fWZ1bmN0aW9uIEtzdCh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGk9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09aT90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxpLG4pfX1mdW5jdGlvbiBac3QodCxlKXtyZXR1cm4gdC5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKGUpfHxZc3QodCkuZ2V0Q29tcHV0ZWRTdHlsZSh0LG51bGwpLmdldFByb3BlcnR5VmFsdWUoZSl9ZnVuY3Rpb24gSnN0KHQpe3JldHVybiBmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW3RdfX1mdW5jdGlvbiBRc3QodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzW3RdPWV9fWZ1bmN0aW9uIHRsdCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PW4/ZGVsZXRlIHRoaXNbdF06dGhpc1t0XT1ufX1mdW5jdGlvbiBlbHQodCl7cmV0dXJuIHQudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIG5sdCh0KXtyZXR1cm4gdC5jbGFzc0xpc3R8fG5ldyBpbHQodCl9ZnVuY3Rpb24gaWx0KHQpe3RoaXMuX25vZGU9dCx0aGlzLl9uYW1lcz1lbHQodC5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX1mdW5jdGlvbiBybHQodCxlKXtmb3IodmFyIG49bmx0KHQpLGk9LTEscj1lLmxlbmd0aDsrK2k8cjspbi5hZGQoZVtpXSl9ZnVuY3Rpb24gb2x0KHQsZSl7Zm9yKHZhciBuPW5sdCh0KSxpPS0xLHI9ZS5sZW5ndGg7KytpPHI7KW4ucmVtb3ZlKGVbaV0pfWZ1bmN0aW9uIGFsdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtybHQodGhpcyx0KX19ZnVuY3Rpb24gc2x0KHQpe3JldHVybiBmdW5jdGlvbigpe29sdCh0aGlzLHQpfX1mdW5jdGlvbiBsbHQodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXsoZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk/cmx0Om9sdCkodGhpcyx0KX19ZnVuY3Rpb24gY2x0KCl7dGhpcy50ZXh0Q29udGVudD0iIn1mdW5jdGlvbiB1bHQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD10fX1mdW5jdGlvbiBobHQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD1udWxsPT1lPyIiOmV9fWZ1bmN0aW9uIGRsdCgpe3RoaXMuaW5uZXJIVE1MPSIifWZ1bmN0aW9uIHBsdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD10fX1mdW5jdGlvbiBmbHQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5pbm5lckhUTUw9bnVsbD09ZT8iIjplfX1mdW5jdGlvbiBtbHQoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gZ2x0KCl7dGhpcy5wcmV2aW91c1NpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcyx0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gX2x0KCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24geWx0KCl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlO3QmJnQucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gdmx0KCl7dmFyIHQ9dGhpcy5jbG9uZU5vZGUoITEpLGU9dGhpcy5wYXJlbnROb2RlO3JldHVybiBlP2UuaW5zZXJ0QmVmb3JlKHQsdGhpcy5uZXh0U2libGluZyk6dH1mdW5jdGlvbiBibHQoKXt2YXIgdD10aGlzLmNsb25lTm9kZSghMCksZT10aGlzLnBhcmVudE5vZGU7cmV0dXJuIGU/ZS5pbnNlcnRCZWZvcmUodCx0aGlzLm5leHRTaWJsaW5nKTp0fURzdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkRzdCxhcHBlbmRDaGlsZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZSh0LHRoaXMuX25leHQpfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZSh0LGUpfSxxdWVyeVNlbGVjdG9yOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3Rvcih0KX0scXVlcnlTZWxlY3RvckFsbDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwodCl9fSxpbHQucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24odCl7dGhpcy5fbmFtZXMuaW5kZXhPZih0KTwwJiYodGhpcy5fbmFtZXMucHVzaCh0KSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxyZW1vdmU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbmFtZXMuaW5kZXhPZih0KTtlPj0wJiYodGhpcy5fbmFtZXMuc3BsaWNlKGUsMSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0sY29udGFpbnM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2YodCk+PTB9fTt2YXIgeGx0PXt9LHdsdD1udWxsO2Z1bmN0aW9uIFNsdCh0LGUsbil7cmV0dXJuIHQ9TWx0KHQsZSxuKSxmdW5jdGlvbihlKXt2YXIgbj1lLnJlbGF0ZWRUYXJnZXQ7biYmKG49PT10aGlzfHw4Jm4uY29tcGFyZURvY3VtZW50UG9zaXRpb24odGhpcykpfHx0LmNhbGwodGhpcyxlKX19ZnVuY3Rpb24gTWx0KHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24oaSl7dmFyIHI9d2x0O3dsdD1pO3RyeXt0LmNhbGwodGhpcyx0aGlzLl9fZGF0YV9fLGUsbil9ZmluYWxseXt3bHQ9cn19fWZ1bmN0aW9uIEVsdCh0KXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLykubWFwKChmdW5jdGlvbih0KXt2YXIgZT0iIixuPXQuaW5kZXhPZigiLiIpO3JldHVybiBuPj0wJiYoZT10LnNsaWNlKG4rMSksdD10LnNsaWNlKDAsbikpLHt0eXBlOnQsbmFtZTplfX0pKX1mdW5jdGlvbiBUbHQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fX29uO2lmKGUpe2Zvcih2YXIgbixpPTAscj0tMSxvPWUubGVuZ3RoO2k8bzsrK2kpbj1lW2ldLHQudHlwZSYmbi50eXBlIT09dC50eXBlfHxuLm5hbWUhPT10Lm5hbWU/ZVsrK3JdPW46dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKG4udHlwZSxuLmxpc3RlbmVyLG4uY2FwdHVyZSk7KytyP2UubGVuZ3RoPXI6ZGVsZXRlIHRoaXMuX19vbn19fWZ1bmN0aW9uIENsdCh0LGUsbil7dmFyIGk9eGx0Lmhhc093blByb3BlcnR5KHQudHlwZSk/U2x0Ok1sdDtyZXR1cm4gZnVuY3Rpb24ocixvLGEpe3ZhciBzLGw9dGhpcy5fX29uLGM9aShlLG8sYSk7aWYobClmb3IodmFyIHU9MCxoPWwubGVuZ3RoO3U8aDsrK3UpaWYoKHM9bFt1XSkudHlwZT09PXQudHlwZSYmcy5uYW1lPT09dC5uYW1lKXJldHVybiB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIocy50eXBlLHMubGlzdGVuZXIscy5jYXB0dXJlKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIocy50eXBlLHMubGlzdGVuZXI9YyxzLmNhcHR1cmU9biksdm9pZChzLnZhbHVlPWUpO3RoaXMuYWRkRXZlbnRMaXN0ZW5lcih0LnR5cGUsYyxuKSxzPXt0eXBlOnQudHlwZSxuYW1lOnQubmFtZSx2YWx1ZTplLGxpc3RlbmVyOmMsY2FwdHVyZTpufSxsP2wucHVzaChzKTp0aGlzLl9fb249W3NdfX1mdW5jdGlvbiBBbHQodCxlLG4pe3ZhciBpPVlzdCh0KSxyPWkuQ3VzdG9tRXZlbnQ7ImZ1bmN0aW9uIj09dHlwZW9mIHI/cj1uZXcgcihlLG4pOihyPWkuZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50Iiksbj8oci5pbml0RXZlbnQoZSxuLmJ1YmJsZXMsbi5jYW5jZWxhYmxlKSxyLmRldGFpbD1uLmRldGFpbCk6ci5pbml0RXZlbnQoZSwhMSwhMSkpLHQuZGlzcGF0Y2hFdmVudChyKX1mdW5jdGlvbiBrbHQodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gQWx0KHRoaXMsdCxlKX19ZnVuY3Rpb24gTGx0KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEFsdCh0aGlzLHQsZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX0idW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50JiYoIm9ubW91c2VlbnRlciJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnR8fCh4bHQ9e21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSkpO3ZhciBQbHQ9W251bGxdO2Z1bmN0aW9uIE5sdCh0LGUpe3RoaXMuX2dyb3Vwcz10LHRoaXMuX3BhcmVudHM9ZX1mdW5jdGlvbiBJbHQoKXtyZXR1cm4gbmV3IE5sdChbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLFBsdCl9ZnVuY3Rpb24gT2x0KHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD9uZXcgTmx0KFtbZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0KV1dLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgTmx0KFtbdF1dLFBsdCl9ZnVuY3Rpb24gUmx0KCl7Zm9yKHZhciB0LGU9d2x0O3Q9ZS5zb3VyY2VFdmVudDspZT10O3JldHVybiBlfWZ1bmN0aW9uIHpsdCh0LGUpe3ZhciBuPXQub3duZXJTVkdFbGVtZW50fHx0O2lmKG4uY3JlYXRlU1ZHUG9pbnQpe3ZhciBpPW4uY3JlYXRlU1ZHUG9pbnQoKTtyZXR1cm4gaS54PWUuY2xpZW50WCxpLnk9ZS5jbGllbnRZLFsoaT1pLm1hdHJpeFRyYW5zZm9ybSh0LmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSkpLngsaS55XX12YXIgcj10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybltlLmNsaWVudFgtci5sZWZ0LXQuY2xpZW50TGVmdCxlLmNsaWVudFktci50b3AtdC5jbGllbnRUb3BdfWZ1bmN0aW9uIERsdCh0KXt2YXIgZT1SbHQoKTtyZXR1cm4gZS5jaGFuZ2VkVG91Y2hlcyYmKGU9ZS5jaGFuZ2VkVG91Y2hlc1swXSksemx0KHQsZSl9ZnVuY3Rpb24gQmx0KHQsZSxuKXthcmd1bWVudHMubGVuZ3RoPDMmJihuPWUsZT1SbHQoKS5jaGFuZ2VkVG91Y2hlcyk7Zm9yKHZhciBpLHI9MCxvPWU/ZS5sZW5ndGg6MDtyPG87KytyKWlmKChpPWVbcl0pLmlkZW50aWZpZXI9PT1uKXJldHVybiB6bHQodCxpKTtyZXR1cm4gbnVsbH1mdW5jdGlvbiBIbHQoKXt3bHQucHJldmVudERlZmF1bHQoKSx3bHQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gRmx0KHQpe3ZhciBlPXQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LG49T2x0KHQpLm9uKCJkcmFnc3RhcnQuZHJhZyIsSGx0LCEwKTsib25zZWxlY3RzdGFydCJpbiBlP24ub24oInNlbGVjdHN0YXJ0LmRyYWciLEhsdCwhMCk6KGUuX19ub3NlbGVjdD1lLnN0eWxlLk1velVzZXJTZWxlY3QsZS5zdHlsZS5Nb3pVc2VyU2VsZWN0PSJub25lIil9ZnVuY3Rpb24gVmx0KHQsZSl7dmFyIG49dC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsaT1PbHQodCkub24oImRyYWdzdGFydC5kcmFnIixudWxsKTtlJiYoaS5vbigiY2xpY2suZHJhZyIsSGx0LCEwKSxzZXRUaW1lb3V0KChmdW5jdGlvbigpe2kub24oImNsaWNrLmRyYWciLG51bGwpfSksMCkpLCJvbnNlbGVjdHN0YXJ0ImluIG4/aS5vbigic2VsZWN0c3RhcnQuZHJhZyIsbnVsbCk6KG4uc3R5bGUuTW96VXNlclNlbGVjdD1uLl9fbm9zZWxlY3QsZGVsZXRlIG4uX19ub3NlbGVjdCl9ZnVuY3Rpb24gVWx0KHQsZSxuKXt0LnByb3RvdHlwZT1lLnByb3RvdHlwZT1uLG4uY29uc3RydWN0b3I9dH1mdW5jdGlvbiBqbHQodCxlKXt2YXIgbj1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlKTtmb3IodmFyIGkgaW4gZSluW2ldPWVbaV07cmV0dXJuIG59ZnVuY3Rpb24gR2x0KCl7fU5sdC5wcm90b3R5cGU9SWx0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6Tmx0LHNlbGVjdDpmdW5jdGlvbiBXbHQodCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PU5zdCh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLGk9bmV3IEFycmF5KG4pLHI9MDtyPG47KytyKWZvcih2YXIgbyxhLHM9ZVtyXSxsPXMubGVuZ3RoLGM9aVtyXT1uZXcgQXJyYXkobCksdT0wO3U8bDsrK3UpKG89c1t1XSkmJihhPXQuY2FsbChvLG8uX19kYXRhX18sdSxzKSkmJigiX19kYXRhX18iaW4gbyYmKGEuX19kYXRhX189by5fX2RhdGFfXyksY1t1XT1hKTtyZXR1cm4gbmV3IE5sdChpLHRoaXMuX3BhcmVudHMpfSxzZWxlY3RBbGw6ZnVuY3Rpb24gcWx0KHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1Pc3QodCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxpPVtdLHI9W10sbz0wO288bjsrK28pZm9yKHZhciBhLHM9ZVtvXSxsPXMubGVuZ3RoLGM9MDtjPGw7KytjKShhPXNbY10pJiYoaS5wdXNoKHQuY2FsbChhLGEuX19kYXRhX18sYyxzKSksci5wdXNoKGEpKTtyZXR1cm4gbmV3IE5sdChpLHIpfSxmaWx0ZXI6ZnVuY3Rpb24gWWx0KHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1Sc3QodCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxpPW5ldyBBcnJheShuKSxyPTA7cjxuOysrcilmb3IodmFyIG8sYT1lW3JdLHM9YS5sZW5ndGgsbD1pW3JdPVtdLGM9MDtjPHM7KytjKShvPWFbY10pJiZ0LmNhbGwobyxvLl9fZGF0YV9fLGMsYSkmJmwucHVzaChvKTtyZXR1cm4gbmV3IE5sdChpLHRoaXMuX3BhcmVudHMpfSxkYXRhOmZ1bmN0aW9uIFhsdCh0LGUpe2lmKCF0KXJldHVybiBmPW5ldyBBcnJheSh0aGlzLnNpemUoKSksdT0tMSx0aGlzLmVhY2goKGZ1bmN0aW9uKHQpe2ZbKyt1XT10fSkpLGY7dmFyIG49ZT9Ic3Q6QnN0LGk9dGhpcy5fcGFyZW50cyxyPXRoaXMuX2dyb3VwczsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9KGZ1bmN0aW9uIG8odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSkodCkpO2Zvcih2YXIgYT1yLmxlbmd0aCxzPW5ldyBBcnJheShhKSxsPW5ldyBBcnJheShhKSxjPW5ldyBBcnJheShhKSx1PTA7dTxhOysrdSl7dmFyIGg9aVt1XSxkPXJbdV0scD1kLmxlbmd0aCxmPXQuY2FsbChoLGgmJmguX19kYXRhX18sdSxpKSxtPWYubGVuZ3RoLGc9bFt1XT1uZXcgQXJyYXkobSksXz1zW3VdPW5ldyBBcnJheShtKTtuKGgsZCxnLF8sY1t1XT1uZXcgQXJyYXkocCksZixlKTtmb3IodmFyIHksdixiPTAseD0wO2I8bTsrK2IpaWYoeT1nW2JdKXtmb3IoYj49eCYmKHg9YisxKTshKHY9X1t4XSkmJisreDxtOyk7eS5fbmV4dD12fHxudWxsfX1yZXR1cm4ocz1uZXcgTmx0KHMsaSkpLl9lbnRlcj1sLHMuX2V4aXQ9YyxzfSxlbnRlcjpmdW5jdGlvbiAkbHQoKXtyZXR1cm4gbmV3IE5sdCh0aGlzLl9lbnRlcnx8dGhpcy5fZ3JvdXBzLm1hcCh6c3QpLHRoaXMuX3BhcmVudHMpfSxleGl0OmZ1bmN0aW9uIEtsdCgpe3JldHVybiBuZXcgTmx0KHRoaXMuX2V4aXR8fHRoaXMuX2dyb3Vwcy5tYXAoenN0KSx0aGlzLl9wYXJlbnRzKX0sam9pbjpmdW5jdGlvbiBabHQodCxlLG4pe3ZhciBpPXRoaXMuZW50ZXIoKSxyPXRoaXMsbz10aGlzLmV4aXQoKTtyZXR1cm4gaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90KGkpOmkuYXBwZW5kKHQrIiIpLG51bGwhPWUmJihyPWUocikpLG51bGw9PW4/by5yZW1vdmUoKTpuKG8pLGkmJnI/aS5tZXJnZShyKS5vcmRlcigpOnJ9LG1lcmdlOmZ1bmN0aW9uIEpsdCh0KXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49dC5fZ3JvdXBzLGk9ZS5sZW5ndGgscj1NYXRoLm1pbihpLG4ubGVuZ3RoKSxvPW5ldyBBcnJheShpKSxhPTA7YTxyOysrYSlmb3IodmFyIHMsbD1lW2FdLGM9blthXSx1PWwubGVuZ3RoLGg9b1thXT1uZXcgQXJyYXkodSksZD0wO2Q8dTsrK2QpKHM9bFtkXXx8Y1tkXSkmJihoW2RdPXMpO2Zvcig7YTxpOysrYSlvW2FdPWVbYV07cmV0dXJuIG5ldyBObHQobyx0aGlzLl9wYXJlbnRzKX0sb3JkZXI6ZnVuY3Rpb24gUWx0KCl7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPS0xLG49dC5sZW5ndGg7KytlPG47KWZvcih2YXIgaSxyPXRbZV0sbz1yLmxlbmd0aC0xLGE9cltvXTstLW8+PTA7KShpPXJbb10pJiYoYSYmNF5pLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGEpJiZhLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGksYSksYT1pKTtyZXR1cm4gdGhpc30sc29ydDpmdW5jdGlvbiB0Y3QodCl7ZnVuY3Rpb24gZShlLG4pe3JldHVybiBlJiZuP3QoZS5fX2RhdGFfXyxuLl9fZGF0YV9fKTohZS0hbn10fHwodD1Gc3QpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxyPW5ldyBBcnJheShpKSxvPTA7bzxpOysrbyl7Zm9yKHZhciBhLHM9bltvXSxsPXMubGVuZ3RoLGM9cltvXT1uZXcgQXJyYXkobCksdT0wO3U8bDsrK3UpKGE9c1t1XSkmJihjW3VdPWEpO2Muc29ydChlKX1yZXR1cm4gbmV3IE5sdChyLHRoaXMuX3BhcmVudHMpLm9yZGVyKCl9LGNhbGw6ZnVuY3Rpb24gZWN0KCl7dmFyIHQ9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyx0LmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfSxub2RlczpmdW5jdGlvbiBuY3QoKXt2YXIgdD1uZXcgQXJyYXkodGhpcy5zaXplKCkpLGU9LTE7cmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oKXt0WysrZV09dGhpc30pKSx0fSxub2RlOmZ1bmN0aW9uIGljdCgpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT0wLG49dC5sZW5ndGg7ZTxuOysrZSlmb3IodmFyIGk9dFtlXSxyPTAsbz1pLmxlbmd0aDtyPG87KytyKXt2YXIgYT1pW3JdO2lmKGEpcmV0dXJuIGF9cmV0dXJuIG51bGx9LHNpemU6ZnVuY3Rpb24gcmN0KCl7dmFyIHQ9MDtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpeysrdH0pKSx0fSxlbXB0eTpmdW5jdGlvbiBvY3QoKXtyZXR1cm4hdGhpcy5ub2RlKCl9LGVhY2g6ZnVuY3Rpb24gYWN0KHQpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj0wLGk9ZS5sZW5ndGg7bjxpOysrbilmb3IodmFyIHIsbz1lW25dLGE9MCxzPW8ubGVuZ3RoO2E8czsrK2EpKHI9b1thXSkmJnQuY2FsbChyLHIuX19kYXRhX18sYSxvKTtyZXR1cm4gdGhpc30sYXR0cjpmdW5jdGlvbiBzY3QodCxlKXt2YXIgbj1Dc3QodCk7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgaT10aGlzLm5vZGUoKTtyZXR1cm4gbi5sb2NhbD9pLmdldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCk6aS5nZXRBdHRyaWJ1dGUobil9cmV0dXJuIHRoaXMuZWFjaCgobnVsbD09ZT9uLmxvY2FsP1VzdDpWc3Q6ImZ1bmN0aW9uIj09dHlwZW9mIGU/bi5sb2NhbD9xc3Q6V3N0Om4ubG9jYWw/R3N0OmpzdCkobixlKSl9LHN0eWxlOmZ1bmN0aW9uIGxjdCh0LGUsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PWU/WHN0OiJmdW5jdGlvbiI9PXR5cGVvZiBlP0tzdDokc3QpKHQsZSxudWxsPT1uPyIiOm4pKTpac3QodGhpcy5ub2RlKCksdCl9LHByb3BlcnR5OmZ1bmN0aW9uIGNjdCh0LGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChudWxsPT1lP0pzdDoiZnVuY3Rpb24iPT10eXBlb2YgZT90bHQ6UXN0KSh0LGUpKTp0aGlzLm5vZGUoKVt0XX0sY2xhc3NlZDpmdW5jdGlvbiB1Y3QodCxlKXt2YXIgbj1lbHQodCsiIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIGk9bmx0KHRoaXMubm9kZSgpKSxyPS0xLG89bi5sZW5ndGg7KytyPG87KWlmKCFpLmNvbnRhaW5zKG5bcl0pKXJldHVybiExO3JldHVybiEwfXJldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBlP2xsdDplP2FsdDpzbHQpKG4sZSkpfSx0ZXh0OmZ1bmN0aW9uIGhjdCh0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2gobnVsbD09dD9jbHQ6KCJmdW5jdGlvbiI9PXR5cGVvZiB0P2hsdDp1bHQpKHQpKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH0saHRtbDpmdW5jdGlvbiBkY3QodCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PXQ/ZGx0OigiZnVuY3Rpb24iPT10eXBlb2YgdD9mbHQ6cGx0KSh0KSk6dGhpcy5ub2RlKCkuaW5uZXJIVE1MfSxyYWlzZTpmdW5jdGlvbiBwY3QoKXtyZXR1cm4gdGhpcy5lYWNoKG1sdCl9LGxvd2VyOmZ1bmN0aW9uIGZjdCgpe3JldHVybiB0aGlzLmVhY2goZ2x0KX0sYXBwZW5kOmZ1bmN0aW9uIG1jdCh0KXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkxzdCh0KTtyZXR1cm4gdGhpcy5zZWxlY3QoKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQoZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSkpfSxpbnNlcnQ6ZnVuY3Rpb24gZ2N0KHQsZSl7dmFyIG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpMc3QodCksaT1udWxsPT1lP19sdDoiZnVuY3Rpb24iPT10eXBlb2YgZT9lOk5zdChlKTtyZXR1cm4gdGhpcy5zZWxlY3QoKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKG4uYXBwbHkodGhpcyxhcmd1bWVudHMpLGkuYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxsKX0pKX0scmVtb3ZlOmZ1bmN0aW9uIF9jdCgpe3JldHVybiB0aGlzLmVhY2goeWx0KX0sY2xvbmU6ZnVuY3Rpb24geWN0KHQpe3JldHVybiB0aGlzLnNlbGVjdCh0P2JsdDp2bHQpfSxkYXR1bTpmdW5jdGlvbiB2Y3QodCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iLHQpOnRoaXMubm9kZSgpLl9fZGF0YV9ffSxvbjpmdW5jdGlvbiBiY3QodCxlLG4pe3ZhciBpLHIsbz1FbHQodCsiIiksYT1vLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2ZvcihzPWU/Q2x0OlRsdCxudWxsPT1uJiYobj0hMSksaT0wO2k8YTsrK2kpdGhpcy5lYWNoKHMob1tpXSxlLG4pKTtyZXR1cm4gdGhpc312YXIgcz10aGlzLm5vZGUoKS5fX29uO2lmKHMpZm9yKHZhciBsLGM9MCx1PXMubGVuZ3RoO2M8dTsrK2MpZm9yKGk9MCxsPXNbY107aTxhOysraSlpZigocj1vW2ldKS50eXBlPT09bC50eXBlJiZyLm5hbWU9PT1sLm5hbWUpcmV0dXJuIGwudmFsdWV9LGRpc3BhdGNoOmZ1bmN0aW9uIHhjdCh0LGUpe3JldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBlP0xsdDprbHQpKHQsZSkpfX07dmFyIHdjdD0uNyxTY3Q9MS93Y3QsTWN0PSJcXHMqKFsrLV0/XFxkKylcXHMqIixFY3Q9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pXFxzKiIsVGN0PSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIixDY3Q9L14jKFswLTlhLWZdezMsOH0pJC8sQWN0PW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tNY3QsTWN0LE1jdF0rIlxcKSQiKSxrY3Q9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW1RjdCxUY3QsVGN0XSsiXFwpJCIpLExjdD1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW01jdCxNY3QsTWN0LEVjdF0rIlxcKSQiKSxQY3Q9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tUY3QsVGN0LFRjdCxFY3RdKyJcXCkkIiksTmN0PW5ldyBSZWdFeHAoIl5oc2xcXCgiK1tFY3QsVGN0LFRjdF0rIlxcKSQiKSxJY3Q9bmV3IFJlZ0V4cCgiXmhzbGFcXCgiK1tFY3QsVGN0LFRjdCxFY3RdKyJcXCkkIiksT2N0PXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O2Z1bmN0aW9uIFJjdCgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleCgpfWZ1bmN0aW9uIHpjdCgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdFJnYigpfWZ1bmN0aW9uIERjdCh0KXt2YXIgZSxuO3JldHVybiB0PSh0KyIiKS50cmltKCkudG9Mb3dlckNhc2UoKSwoZT1DY3QuZXhlYyh0KSk/KG49ZVsxXS5sZW5ndGgsZT1wYXJzZUludChlWzFdLDE2KSw2PT09bj9CY3QoZSk6Mz09PW4/bmV3IFVjdChlPj44JjE1fGU+PjQmMjQwLGU+PjQmMTV8MjQwJmUsKDE1JmUpPDw0fDE1JmUsMSk6OD09PW4/SGN0KGU+PjI0JjI1NSxlPj4xNiYyNTUsZT4+OCYyNTUsKDI1NSZlKS8yNTUpOjQ9PT1uP0hjdChlPj4xMiYxNXxlPj44JjI0MCxlPj44JjE1fGU+PjQmMjQwLGU+PjQmMTV8MjQwJmUsKCgxNSZlKTw8NHwxNSZlKS8yNTUpOm51bGwpOihlPUFjdC5leGVjKHQpKT9uZXcgVWN0KGVbMV0sZVsyXSxlWzNdLDEpOihlPWtjdC5leGVjKHQpKT9uZXcgVWN0KDI1NSplWzFdLzEwMCwyNTUqZVsyXS8xMDAsMjU1KmVbM10vMTAwLDEpOihlPUxjdC5leGVjKHQpKT9IY3QoZVsxXSxlWzJdLGVbM10sZVs0XSk6KGU9UGN0LmV4ZWModCkpP0hjdCgyNTUqZVsxXS8xMDAsMjU1KmVbMl0vMTAwLDI1NSplWzNdLzEwMCxlWzRdKTooZT1OY3QuZXhlYyh0KSk/cWN0KGVbMV0sZVsyXS8xMDAsZVszXS8xMDAsMSk6KGU9SWN0LmV4ZWModCkpP3FjdChlWzFdLGVbMl0vMTAwLGVbM10vMTAwLGVbNF0pOk9jdC5oYXNPd25Qcm9wZXJ0eSh0KT9CY3QoT2N0W3RdKToidHJhbnNwYXJlbnQiPT09dD9uZXcgVWN0KE5hTixOYU4sTmFOLDApOm51bGx9ZnVuY3Rpb24gQmN0KHQpe3JldHVybiBuZXcgVWN0KHQ+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdCwxKX1mdW5jdGlvbiBIY3QodCxlLG4saSl7cmV0dXJuIGk8PTAmJih0PWU9bj1OYU4pLG5ldyBVY3QodCxlLG4saSl9ZnVuY3Rpb24gRmN0KHQpe3JldHVybiB0IGluc3RhbmNlb2YgR2x0fHwodD1EY3QodCkpLHQ/bmV3IFVjdCgodD10LnJnYigpKS5yLHQuZyx0LmIsdC5vcGFjaXR5KTpuZXcgVWN0fWZ1bmN0aW9uIFZjdCh0LGUsbixpKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/RmN0KHQpOm5ldyBVY3QodCxlLG4sbnVsbD09aT8xOmkpfWZ1bmN0aW9uIFVjdCh0LGUsbixpKXt0aGlzLnI9K3QsdGhpcy5nPStlLHRoaXMuYj0rbix0aGlzLm9wYWNpdHk9K2l9ZnVuY3Rpb24gamN0KCl7cmV0dXJuIiMiK1djdCh0aGlzLnIpK1djdCh0aGlzLmcpK1djdCh0aGlzLmIpfWZ1bmN0aW9uIEdjdCgpe3ZhciB0PXRoaXMub3BhY2l0eTtyZXR1cm4oMT09PSh0PWlzTmFOKHQpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLHQpKSk/InJnYigiOiJyZ2JhKCIpK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5yKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmcpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuYil8fDApKSsoMT09PXQ/IikiOiIsICIrdCsiKSIpfWZ1bmN0aW9uIFdjdCh0KXtyZXR1cm4oKHQ9TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0KXx8MCkpKTwxNj8iMCI6IiIpK3QudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIHFjdCh0LGUsbixpKXtyZXR1cm4gaTw9MD90PWU9bj1OYU46bjw9MHx8bj49MT90PWU9TmFOOmU8PTAmJih0PU5hTiksbmV3IFhjdCh0LGUsbixpKX1mdW5jdGlvbiBZY3QodCl7aWYodCBpbnN0YW5jZW9mIFhjdClyZXR1cm4gbmV3IFhjdCh0LmgsdC5zLHQubCx0Lm9wYWNpdHkpO2lmKHQgaW5zdGFuY2VvZiBHbHR8fCh0PURjdCh0KSksIXQpcmV0dXJuIG5ldyBYY3Q7aWYodCBpbnN0YW5jZW9mIFhjdClyZXR1cm4gdDt2YXIgZT0odD10LnJnYigpKS5yLzI1NSxuPXQuZy8yNTUsaT10LmIvMjU1LHI9TWF0aC5taW4oZSxuLGkpLG89TWF0aC5tYXgoZSxuLGkpLGE9TmFOLHM9by1yLGw9KG8rcikvMjtyZXR1cm4gcz8oYT1lPT09bz8obi1pKS9zKzYqKG48aSk6bj09PW8/KGktZSkvcysyOihlLW4pL3MrNCxzLz1sPC41P28rcjoyLW8tcixhKj02MCk6cz1sPjAmJmw8MT8wOmEsbmV3IFhjdChhLHMsbCx0Lm9wYWNpdHkpfWZ1bmN0aW9uIFhjdCh0LGUsbixpKXt0aGlzLmg9K3QsdGhpcy5zPStlLHRoaXMubD0rbix0aGlzLm9wYWNpdHk9K2l9ZnVuY3Rpb24gJGN0KHQsZSxuKXtyZXR1cm4gMjU1Kih0PDYwP2UrKG4tZSkqdC82MDp0PDE4MD9uOnQ8MjQwP2UrKG4tZSkqKDI0MC10KS82MDplKX1mdW5jdGlvbiBLY3QodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIFpjdCh0LGUpe3ZhciBuPWUtdDtyZXR1cm4gbj8oZnVuY3Rpb24gaSh0LGUpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdCtuKmV9fSkodCxuKTpLY3QoaXNOYU4odCk/ZTp0KX1VbHQoR2x0LERjdCx7Y29weTpmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgdGhpcy5jb25zdHJ1Y3Rvcix0aGlzLHQpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LGhleDpSY3QsZm9ybWF0SGV4OlJjdCxmb3JtYXRIc2w6ZnVuY3Rpb24gSmN0KCl7cmV0dXJuIFljdCh0aGlzKS5mb3JtYXRIc2woKX0sZm9ybWF0UmdiOnpjdCx0b1N0cmluZzp6Y3R9KSxVbHQoVWN0LFZjdCxqbHQoR2x0LHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P1NjdDpNYXRoLnBvdyhTY3QsdCksbmV3IFVjdCh0aGlzLnIqdCx0aGlzLmcqdCx0aGlzLmIqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD93Y3Q6TWF0aC5wb3cod2N0LHQpLG5ldyBVY3QodGhpcy5yKnQsdGhpcy5nKnQsdGhpcy5iKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuLS41PD10aGlzLnImJnRoaXMucjwyNTUuNSYmLS41PD10aGlzLmcmJnRoaXMuZzwyNTUuNSYmLS41PD10aGlzLmImJnRoaXMuYjwyNTUuNSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGhleDpqY3QsZm9ybWF0SGV4OmpjdCxmb3JtYXRSZ2I6R2N0LHRvU3RyaW5nOkdjdH0pKSxVbHQoWGN0LChmdW5jdGlvbiBRY3QodCxlLG4saSl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP1ljdCh0KTpuZXcgWGN0KHQsZSxuLG51bGw9PWk/MTppKX0pLGpsdChHbHQse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/U2N0Ok1hdGgucG93KFNjdCx0KSxuZXcgWGN0KHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/d2N0Ok1hdGgucG93KHdjdCx0KSxuZXcgWGN0KHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5oJTM2MCszNjAqKHRoaXMuaDwwKSxlPWlzTmFOKHQpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLG49dGhpcy5sLGk9bisobjwuNT9uOjEtbikqZSxyPTIqbi1pO3JldHVybiBuZXcgVWN0KCRjdCh0Pj0yNDA/dC0yNDA6dCsxMjAscixpKSwkY3QodCxyLGkpLCRjdCh0PDEyMD90KzI0MDp0LTEyMCxyLGkpLHRoaXMub3BhY2l0eSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxmb3JtYXRIc2w6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wYWNpdHk7cmV0dXJuKDE9PT0odD1pc05hTih0KT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSkpPyJoc2woIjoiaHNsYSgiKSsodGhpcy5ofHwwKSsiLCAiKzEwMCoodGhpcy5zfHwwKSsiJSwgIisxMDAqKHRoaXMubHx8MCkrIiUiKygxPT09dD8iKSI6IiwgIit0KyIpIil9fSkpO3ZhciB0dXQ9KGZ1bmN0aW9uIHQoZSl7dmFyIG49KGZ1bmN0aW9uIGkodCl7cmV0dXJuIDE9PSh0PSt0KT9aY3Q6ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbi1lPyhmdW5jdGlvbiBpKHQsZSxuKXtyZXR1cm4gdD1NYXRoLnBvdyh0LG4pLGU9TWF0aC5wb3coZSxuKS10LG49MS9uLGZ1bmN0aW9uKGkpe3JldHVybiBNYXRoLnBvdyh0K2kqZSxuKX19KShlLG4sdCk6S2N0KGlzTmFOKGUpP246ZSl9fSkoZSk7ZnVuY3Rpb24gcih0LGUpe3ZhciBpPW4oKHQ9VmN0KHQpKS5yLChlPVZjdChlKSkucikscj1uKHQuZyxlLmcpLG89bih0LmIsZS5iKSxhPVpjdCh0Lm9wYWNpdHksZS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQucj1pKGUpLHQuZz1yKGUpLHQuYj1vKGUpLHQub3BhY2l0eT1hKGUpLHQrIiJ9fXJldHVybiByLmdhbW1hPXQscn0pKDEpO2Z1bmN0aW9uIGV1dCh0LGUpe3JldHVybiB0PSt0LGU9K2UsZnVuY3Rpb24obil7cmV0dXJuIHQqKDEtbikrZSpufX12YXIgbnV0PS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxpdXQ9bmV3IFJlZ0V4cChudXQuc291cmNlLCJnIik7ZnVuY3Rpb24gcnV0KHQsZSl7dmFyIG4saSxyLG89bnV0Lmxhc3RJbmRleD1pdXQubGFzdEluZGV4PTAsYT0tMSxzPVtdLGw9W107Zm9yKHQrPSIiLGUrPSIiOyhuPW51dC5leGVjKHQpKSYmKGk9aXV0LmV4ZWMoZSkpOykocj1pLmluZGV4KT5vJiYocj1lLnNsaWNlKG8sciksc1thXT9zW2FdKz1yOnNbKythXT1yKSwobj1uWzBdKT09PShpPWlbMF0pP3NbYV0/c1thXSs9aTpzWysrYV09aTooc1srK2FdPW51bGwsbC5wdXNoKHtpOmEseDpldXQobixpKX0pKSxvPWl1dC5sYXN0SW5kZXg7cmV0dXJuIG88ZS5sZW5ndGgmJihyPWUuc2xpY2Uobyksc1thXT9zW2FdKz1yOnNbKythXT1yKSxzLmxlbmd0aDwyP2xbMF0/KGZ1bmN0aW9uIGModCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0KGUpKyIifX0pKGxbMF0ueCk6KGZ1bmN0aW9uIHUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSkoZSk6KGU9bC5sZW5ndGgsZnVuY3Rpb24odCl7Zm9yKHZhciBuLGk9MDtpPGU7KytpKXNbKG49bFtpXSkuaV09bi54KHQpO3JldHVybiBzLmpvaW4oIiIpfSl9dmFyIG91dCxhdXQsc3V0LGx1dCxjdXQ9MTgwL01hdGguUEksdXV0PXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9O2Z1bmN0aW9uIGh1dCh0LGUsbixpLHIsbyl7dmFyIGEscyxsO3JldHVybihhPU1hdGguc3FydCh0KnQrZSplKSkmJih0Lz1hLGUvPWEpLChsPXQqbitlKmkpJiYobi09dCpsLGktPWUqbCksKHM9TWF0aC5zcXJ0KG4qbitpKmkpKSYmKG4vPXMsaS89cyxsLz1zKSx0Kmk8ZSpuJiYodD0tdCxlPS1lLGw9LWwsYT0tYSkse3RyYW5zbGF0ZVg6cix0cmFuc2xhdGVZOm8scm90YXRlOk1hdGguYXRhbjIoZSx0KSpjdXQsc2tld1g6TWF0aC5hdGFuKGwpKmN1dCxzY2FsZVg6YSxzY2FsZVk6c319ZnVuY3Rpb24gZHV0KHQsZSxuLGkpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIHQubGVuZ3RoP3QucG9wKCkrIiAiOiIifXJldHVybiBmdW5jdGlvbihvLGEpe3ZhciBzPVtdLGw9W107cmV0dXJuIG89dChvKSxhPXQoYSksKGZ1bmN0aW9uIGModCxpLHIsbyxhLHMpe2lmKHQhPT1yfHxpIT09byl7dmFyIGw9YS5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLGUsbnVsbCxuKTtzLnB1c2goe2k6bC00LHg6ZXV0KHQscil9LHtpOmwtMix4OmV1dChpLG8pfSl9ZWxzZShyfHxvKSYmYS5wdXNoKCJ0cmFuc2xhdGUoIityK2UrbytuKX0pKG8udHJhbnNsYXRlWCxvLnRyYW5zbGF0ZVksYS50cmFuc2xhdGVYLGEudHJhbnNsYXRlWSxzLGwpLChmdW5jdGlvbiB1KHQsZSxuLG8pe3QhPT1lPyh0LWU+MTgwP2UrPTM2MDplLXQ+MTgwJiYodCs9MzYwKSxvLnB1c2goe2k6bi5wdXNoKHIobikrInJvdGF0ZSgiLG51bGwsaSktMix4OmV1dCh0LGUpfSkpOmUmJm4ucHVzaChyKG4pKyJyb3RhdGUoIitlK2kpfSkoby5yb3RhdGUsYS5yb3RhdGUscyxsKSwoZnVuY3Rpb24gaCh0LGUsbixvKXt0IT09ZT9vLnB1c2goe2k6bi5wdXNoKHIobikrInNrZXdYKCIsbnVsbCxpKS0yLHg6ZXV0KHQsZSl9KTplJiZuLnB1c2gocihuKSsic2tld1goIitlK2kpfSkoby5za2V3WCxhLnNrZXdYLHMsbCksKGZ1bmN0aW9uIGQodCxlLG4saSxvLGEpe2lmKHQhPT1ufHxlIT09aSl7dmFyIHM9by5wdXNoKHIobykrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO2EucHVzaCh7aTpzLTQseDpldXQodCxuKX0se2k6cy0yLHg6ZXV0KGUsaSl9KX1lbHNlIDE9PT1uJiYxPT09aXx8by5wdXNoKHIobykrInNjYWxlKCIrbisiLCIraSsiKSIpfSkoby5zY2FsZVgsby5zY2FsZVksYS5zY2FsZVgsYS5zY2FsZVkscyxsKSxvPWE9bnVsbCxmdW5jdGlvbih0KXtmb3IodmFyIGUsbj0tMSxpPWwubGVuZ3RoOysrbjxpOylzWyhlPWxbbl0pLmldPWUueCh0KTtyZXR1cm4gcy5qb2luKCIiKX19fXZhciBwdXQ9ZHV0KChmdW5jdGlvbiBmdXQodCl7cmV0dXJuIm5vbmUiPT09dD91dXQ6KG91dHx8KG91dD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSxhdXQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHN1dD1kb2N1bWVudC5kZWZhdWx0Vmlldyksb3V0LnN0eWxlLnRyYW5zZm9ybT10LHQ9c3V0LmdldENvbXB1dGVkU3R5bGUoYXV0LmFwcGVuZENoaWxkKG91dCksbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgidHJhbnNmb3JtIiksYXV0LnJlbW92ZUNoaWxkKG91dCksaHV0KCsodD10LnNsaWNlKDcsLTEpLnNwbGl0KCIsIikpWzBdLCt0WzFdLCt0WzJdLCt0WzNdLCt0WzRdLCt0WzVdKSl9KSwicHgsICIsInB4KSIsImRlZykiKSxtdXQ9ZHV0KChmdW5jdGlvbiBndXQodCl7cmV0dXJuIG51bGw9PXQ/dXV0OihsdXR8fChsdXQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKSksbHV0LnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIix0KSwodD1sdXQudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/aHV0KCh0PXQubWF0cml4KS5hLHQuYix0LmMsdC5kLHQuZSx0LmYpOnV1dCl9KSwiLCAiLCIpIiwiKSIpLF91dD1NYXRoLlNRUlQyO2Z1bmN0aW9uIHl1dCh0KXtyZXR1cm4oKHQ9TWF0aC5leHAodCkpKzEvdCkvMn1mdW5jdGlvbiB2dXQodCxlKXt2YXIgbixpLHI9dFswXSxvPXRbMV0sYT10WzJdLHM9ZVsyXSxsPWVbMF0tcixjPWVbMV0tbyx1PWwqbCtjKmM7aWYodTwxZS0xMilpPU1hdGgubG9nKHMvYSkvX3V0LG49ZnVuY3Rpb24odCl7cmV0dXJuW3IrdCpsLG8rdCpjLGEqTWF0aC5leHAoX3V0KnQqaSldfTtlbHNle3ZhciBoPU1hdGguc3FydCh1KSxkPShzKnMtYSphKzQqdSkvKDIqYSoyKmgpLHA9KHMqcy1hKmEtNCp1KS8oMipzKjIqaCksZj1NYXRoLmxvZyhNYXRoLnNxcnQoZCpkKzEpLWQpLG09TWF0aC5sb2coTWF0aC5zcXJ0KHAqcCsxKS1wKTtpPShtLWYpL191dCxuPWZ1bmN0aW9uKHQpe3ZhciBlPXQqaSxuPXl1dChmKSxzPWEvKDIqaCkqKG4qKGZ1bmN0aW9uIHUodCl7cmV0dXJuKCh0PU1hdGguZXhwKDIqdCkpLTEpLyh0KzEpfSkoX3V0KmUrZiktKGZ1bmN0aW9uIGQodCl7cmV0dXJuKCh0PU1hdGguZXhwKHQpKS0xL3QpLzJ9KShmKSk7cmV0dXJuW3IrcypsLG8rcypjLGEqbi95dXQoX3V0KmUrZildfX1yZXR1cm4gbi5kdXJhdGlvbj0xZTMqaSxufXZhciBidXQseHV0LHd1dD0wLFN1dD0wLE11dD0wLEV1dD0wLFR1dD0wLEN1dD0wLEF1dD0ib2JqZWN0Ij09dHlwZW9mIHBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxrdXQ9Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6ZnVuY3Rpb24odCl7c2V0VGltZW91dCh0LDE3KX07ZnVuY3Rpb24gTHV0KCl7cmV0dXJuIFR1dHx8KGt1dChQdXQpLFR1dD1BdXQubm93KCkrQ3V0KX1mdW5jdGlvbiBQdXQoKXtUdXQ9MH1mdW5jdGlvbiBOdXQoKXt0aGlzLl9jYWxsPXRoaXMuX3RpbWU9dGhpcy5fbmV4dD1udWxsfWZ1bmN0aW9uIEl1dCh0LGUsbil7dmFyIGk9bmV3IE51dDtyZXR1cm4gaS5yZXN0YXJ0KHQsZSxuKSxpfWZ1bmN0aW9uIE91dCgpe1R1dD0oRXV0PUF1dC5ub3coKSkrQ3V0LHd1dD1TdXQ9MDt0cnl7IShmdW5jdGlvbiB0KCl7THV0KCksKyt3dXQ7Zm9yKHZhciB0LGU9YnV0O2U7KSh0PVR1dC1lLl90aW1lKT49MCYmZS5fY2FsbC5jYWxsKG51bGwsdCksZT1lLl9uZXh0Oy0td3V0fSkoKX1maW5hbGx5e3d1dD0wLChmdW5jdGlvbiBlKCl7Zm9yKHZhciB0LGUsbj1idXQsaT0xLzA7bjspbi5fY2FsbD8oaT5uLl90aW1lJiYoaT1uLl90aW1lKSx0PW4sbj1uLl9uZXh0KTooZT1uLl9uZXh0LG4uX25leHQ9bnVsbCxuPXQ/dC5fbmV4dD1lOmJ1dD1lKTt4dXQ9dCx6dXQoaSl9KSgpLFR1dD0wfX1mdW5jdGlvbiBSdXQoKXt2YXIgdD1BdXQubm93KCksZT10LUV1dDtlPjFlMyYmKEN1dC09ZSxFdXQ9dCl9ZnVuY3Rpb24genV0KHQpe3d1dHx8KFN1dCYmKFN1dD1jbGVhclRpbWVvdXQoU3V0KSksdC1UdXQ+MjQ/KHQ8MS8wJiYoU3V0PXNldFRpbWVvdXQoT3V0LHQtQXV0Lm5vdygpLUN1dCkpLE11dCYmKE11dD1jbGVhckludGVydmFsKE11dCkpKTooTXV0fHwoRXV0PUF1dC5ub3coKSxNdXQ9c2V0SW50ZXJ2YWwoUnV0LDFlMykpLHd1dD0xLGt1dChPdXQpKSl9ZnVuY3Rpb24gRHV0KHQsZSxuKXt2YXIgaT1uZXcgTnV0O3JldHVybiBpLnJlc3RhcnQoKGZ1bmN0aW9uKG4pe2kuc3RvcCgpLHQobitlKX0pLGU9bnVsbD09ZT8wOitlLG4pLGl9TnV0LnByb3RvdHlwZT1JdXQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpOdXQscmVzdGFydDpmdW5jdGlvbih0LGUsbil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24iKTtuPShudWxsPT1uP0x1dCgpOituKSsobnVsbD09ZT8wOitlKSx0aGlzLl9uZXh0fHx4dXQ9PT10aGlzfHwoeHV0P3h1dC5fbmV4dD10aGlzOmJ1dD10aGlzLHh1dD10aGlzKSx0aGlzLl9jYWxsPXQsdGhpcy5fdGltZT1uLHp1dCgpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCx6dXQoKSl9fTt2YXIgQnV0PWJzdCgic3RhcnQiLCJlbmQiLCJjYW5jZWwiLCJpbnRlcnJ1cHQiKSxIdXQ9W107ZnVuY3Rpb24gRnV0KHQsZSxuLGkscixvKXt2YXIgYT10Ll9fdHJhbnNpdGlvbjtpZihhKXtpZihuIGluIGEpcmV0dXJufWVsc2UgdC5fX3RyYW5zaXRpb249e307IShmdW5jdGlvbiBzKHQsZSxuKXt2YXIgaSxyPXQuX190cmFuc2l0aW9uO2Z1bmN0aW9uIG8obCl7dmFyIGMsdSxoLGQ7aWYoMSE9PW4uc3RhdGUpcmV0dXJuIHMoKTtmb3IoYyBpbiByKWlmKChkPXJbY10pLm5hbWU9PT1uLm5hbWUpe2lmKDM9PT1kLnN0YXRlKXJldHVybiBEdXQobyk7ND09PWQuc3RhdGU/KGQuc3RhdGU9NixkLnRpbWVyLnN0b3AoKSxkLm9uLmNhbGwoImludGVycnVwdCIsdCx0Ll9fZGF0YV9fLGQuaW5kZXgsZC5ncm91cCksZGVsZXRlIHJbY10pOitjPGUmJihkLnN0YXRlPTYsZC50aW1lci5zdG9wKCksZC5vbi5jYWxsKCJjYW5jZWwiLHQsdC5fX2RhdGFfXyxkLmluZGV4LGQuZ3JvdXApLGRlbGV0ZSByW2NdKX1pZihEdXQoKGZ1bmN0aW9uKCl7Mz09PW4uc3RhdGUmJihuLnN0YXRlPTQsbi50aW1lci5yZXN0YXJ0KGEsbi5kZWxheSxuLnRpbWUpLGEobCkpfSkpLG4uc3RhdGU9MixuLm9uLmNhbGwoInN0YXJ0Iix0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSwyPT09bi5zdGF0ZSl7Zm9yKG4uc3RhdGU9MyxpPW5ldyBBcnJheShoPW4udHdlZW4ubGVuZ3RoKSxjPTAsdT0tMTtjPGg7KytjKShkPW4udHdlZW5bY10udmFsdWUuY2FsbCh0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSkmJihpWysrdV09ZCk7aS5sZW5ndGg9dSsxfX1mdW5jdGlvbiBhKGUpe2Zvcih2YXIgcj1lPG4uZHVyYXRpb24/bi5lYXNlLmNhbGwobnVsbCxlL24uZHVyYXRpb24pOihuLnRpbWVyLnJlc3RhcnQocyksbi5zdGF0ZT01LDEpLG89LTEsYT1pLmxlbmd0aDsrK288YTspaVtvXS5jYWxsKHQscik7NT09PW4uc3RhdGUmJihuLm9uLmNhbGwoImVuZCIsdCx0Ll9fZGF0YV9fLG4uaW5kZXgsbi5ncm91cCkscygpKX1mdW5jdGlvbiBzKCl7Zm9yKHZhciBpIGluIG4uc3RhdGU9NixuLnRpbWVyLnN0b3AoKSxkZWxldGUgcltlXSxyKXJldHVybjtkZWxldGUgdC5fX3RyYW5zaXRpb259cltlXT1uLG4udGltZXI9SXV0KChmdW5jdGlvbiBsKHQpe24uc3RhdGU9MSxuLnRpbWVyLnJlc3RhcnQobyxuLmRlbGF5LG4udGltZSksbi5kZWxheTw9dCYmbyh0LW4uZGVsYXkpfSksMCxuLnRpbWUpfSkodCxuLHtuYW1lOmUsaW5kZXg6aSxncm91cDpyLG9uOkJ1dCx0d2VlbjpIdXQsdGltZTpvLnRpbWUsZGVsYXk6by5kZWxheSxkdXJhdGlvbjpvLmR1cmF0aW9uLGVhc2U6by5lYXNlLHRpbWVyOm51bGwsc3RhdGU6MH0pfWZ1bmN0aW9uIFZ1dCh0LGUpe3ZhciBuPWp1dCh0LGUpO2lmKG4uc3RhdGU+MCl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZCIpO3JldHVybiBufWZ1bmN0aW9uIFV1dCh0LGUpe3ZhciBuPWp1dCh0LGUpO2lmKG4uc3RhdGU+Myl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHJ1bm5pbmciKTtyZXR1cm4gbn1mdW5jdGlvbiBqdXQodCxlKXt2YXIgbj10Ll9fdHJhbnNpdGlvbjtpZighbnx8IShuPW5bZV0pKXRocm93IG5ldyBFcnJvcigidHJhbnNpdGlvbiBub3QgZm91bmQiKTtyZXR1cm4gbn1mdW5jdGlvbiBHdXQodCxlKXt2YXIgbixpLHIsbz10Ll9fdHJhbnNpdGlvbixhPSEwO2lmKG8pe2ZvcihyIGluIGU9bnVsbD09ZT9udWxsOmUrIiIsbykobj1vW3JdKS5uYW1lPT09ZT8oaT1uLnN0YXRlPjImJm4uc3RhdGU8NSxuLnN0YXRlPTYsbi50aW1lci5zdG9wKCksbi5vbi5jYWxsKGk/ImludGVycnVwdCI6ImNhbmNlbCIsdCx0Ll9fZGF0YV9fLG4uaW5kZXgsbi5ncm91cCksZGVsZXRlIG9bcl0pOmE9ITE7YSYmZGVsZXRlIHQuX190cmFuc2l0aW9ufX1mdW5jdGlvbiBXdXQodCxlKXt2YXIgbixpO3JldHVybiBmdW5jdGlvbigpe3ZhciByPVV1dCh0aGlzLHQpLG89ci50d2VlbjtpZihvIT09bilmb3IodmFyIGE9MCxzPShpPW49bykubGVuZ3RoO2E8czsrK2EpaWYoaVthXS5uYW1lPT09ZSl7KGk9aS5zbGljZSgpKS5zcGxpY2UoYSwxKTticmVha31yLnR3ZWVuPWl9fWZ1bmN0aW9uIHF1dCh0LGUsbil7dmFyIGkscjtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89VXV0KHRoaXMsdCksYT1vLnR3ZWVuO2lmKGEhPT1pKXtyPShpPWEpLnNsaWNlKCk7Zm9yKHZhciBzPXtuYW1lOmUsdmFsdWU6bn0sbD0wLGM9ci5sZW5ndGg7bDxjOysrbClpZihyW2xdLm5hbWU9PT1lKXtyW2xdPXM7YnJlYWt9bD09PWMmJnIucHVzaChzKX1vLnR3ZWVuPXJ9fWZ1bmN0aW9uIFl1dCh0LGUsbil7dmFyIGk9dC5faWQ7cmV0dXJuIHQuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1VdXQodGhpcyxpKTsodC52YWx1ZXx8KHQudmFsdWU9e30pKVtlXT1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pKSxmdW5jdGlvbih0KXtyZXR1cm4ganV0KHQsaSkudmFsdWVbZV19fWZ1bmN0aW9uIFh1dCh0LGUpe3ZhciBuO3JldHVybigibnVtYmVyIj09dHlwZW9mIGU/ZXV0OmUgaW5zdGFuY2VvZiBEY3Q/dHV0OihuPURjdChlKSk/KGU9bix0dXQpOnJ1dCkodCxlKX1mdW5jdGlvbiAkdXQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9fWZ1bmN0aW9uIEt1dCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCl9fWZ1bmN0aW9uIFp1dCh0LGUsbil7dmFyIGkscixvPW4rIiI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5nZXRBdHRyaWJ1dGUodCk7cmV0dXJuIGE9PT1vP251bGw6YT09PWk/cjpyPWUoaT1hLG4pfX1mdW5jdGlvbiBKdXQodCxlLG4pe3ZhciBpLHIsbz1uKyIiO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKTtyZXR1cm4gYT09PW8/bnVsbDphPT09aT9yOnI9ZShpPWEsbil9fWZ1bmN0aW9uIFF1dCh0LGUsbil7dmFyIGkscixvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhLHMsbD1uKHRoaXMpO2lmKG51bGwhPWwpcmV0dXJuKGE9dGhpcy5nZXRBdHRyaWJ1dGUodCkpPT09KHM9bCsiIik/bnVsbDphPT09aSYmcz09PXI/bzoocj1zLG89ZShpPWEsbCkpO3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX1mdW5jdGlvbiB0aHQodCxlLG4pe3ZhciBpLHIsbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzLGw9bih0aGlzKTtpZihudWxsIT1sKXJldHVybihhPXRoaXMuZ2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKSk9PT0ocz1sKyIiKT9udWxsOmE9PT1pJiZzPT09cj9vOihyPXMsbz1lKGk9YSxsKSk7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpfX1mdW5jdGlvbiBlaHQodCxlKXtyZXR1cm4gZnVuY3Rpb24obil7dGhpcy5zZXRBdHRyaWJ1dGUodCxlLmNhbGwodGhpcyxuKSl9fWZ1bmN0aW9uIG5odCh0LGUpe3JldHVybiBmdW5jdGlvbihuKXt0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxlLmNhbGwodGhpcyxuKSl9fWZ1bmN0aW9uIGlodCh0LGUpe3ZhciBuLGk7ZnVuY3Rpb24gcigpe3ZhciByPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiByIT09aSYmKG49KGk9cikmJm5odCh0LHIpKSxufXJldHVybiByLl92YWx1ZT1lLHJ9ZnVuY3Rpb24gcmh0KHQsZSl7dmFyIG4saTtmdW5jdGlvbiByKCl7dmFyIHI9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIHIhPT1pJiYobj0oaT1yKSYmZWh0KHQscikpLG59cmV0dXJuIHIuX3ZhbHVlPWUscn1mdW5jdGlvbiBvaHQodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtWdXQodGhpcyx0KS5kZWxheT0rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIGFodCh0LGUpe3JldHVybiBlPStlLGZ1bmN0aW9uKCl7VnV0KHRoaXMsdCkuZGVsYXk9ZX19ZnVuY3Rpb24gc2h0KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7VXV0KHRoaXMsdCkuZHVyYXRpb249K2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBsaHQodCxlKXtyZXR1cm4gZT0rZSxmdW5jdGlvbigpe1V1dCh0aGlzLHQpLmR1cmF0aW9uPWV9fWZ1bmN0aW9uIGNodCh0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXtVdXQodGhpcyx0KS5lYXNlPWV9fWZ1bmN0aW9uIHVodCh0LGUsbil7dmFyIGkscixvPShmdW5jdGlvbiBhKHQpe3JldHVybih0KyIiKS50cmltKCkuc3BsaXQoL158XHMrLykuZXZlcnkoKGZ1bmN0aW9uKHQpe3ZhciBlPXQuaW5kZXhPZigiLiIpO3JldHVybiBlPj0wJiYodD10LnNsaWNlKDAsZSkpLCF0fHwic3RhcnQiPT09dH0pKX0pKGUpP1Z1dDpVdXQ7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9byh0aGlzLHQpLHM9YS5vbjtzIT09aSYmKHI9KGk9cykuY29weSgpKS5vbihlLG4pLGEub249cn19dmFyIGhodD1JbHQucHJvdG90eXBlLmNvbnN0cnVjdG9yO2Z1bmN0aW9uIGRodCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpfX1mdW5jdGlvbiBwaHQodCxlLG4pe3JldHVybiBmdW5jdGlvbihpKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQsZS5jYWxsKHRoaXMsaSksbil9fWZ1bmN0aW9uIGZodCh0LGUsbil7dmFyIGkscjtmdW5jdGlvbiBvKCl7dmFyIG89ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIG8hPT1yJiYoaT0ocj1vKSYmcGh0KHQsbyxuKSksaX1yZXR1cm4gby5fdmFsdWU9ZSxvfWZ1bmN0aW9uIG1odCh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dGhpcy50ZXh0Q29udGVudD10LmNhbGwodGhpcyxlKX19ZnVuY3Rpb24gZ2h0KHQpe3ZhciBlLG47ZnVuY3Rpb24gaSgpe3ZhciBpPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBpIT09biYmKGU9KG49aSkmJm1odChpKSksZX1yZXR1cm4gaS5fdmFsdWU9dCxpfXZhciBfaHQ9MDtmdW5jdGlvbiB5aHQodCxlLG4saSl7dGhpcy5fZ3JvdXBzPXQsdGhpcy5fcGFyZW50cz1lLHRoaXMuX25hbWU9bix0aGlzLl9pZD1pfWZ1bmN0aW9uIHZodCgpe3JldHVybisrX2h0fXZhciBiaHQ9SWx0LnByb3RvdHlwZTt5aHQucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp5aHQsc2VsZWN0OmZ1bmN0aW9uIHhodCh0KXt2YXIgZT10aGlzLl9uYW1lLG49dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PU5zdCh0KSk7Zm9yKHZhciBpPXRoaXMuX2dyb3VwcyxyPWkubGVuZ3RoLG89bmV3IEFycmF5KHIpLGE9MDthPHI7KythKWZvcih2YXIgcyxsLGM9aVthXSx1PWMubGVuZ3RoLGg9b1thXT1uZXcgQXJyYXkodSksZD0wO2Q8dTsrK2QpKHM9Y1tkXSkmJihsPXQuY2FsbChzLHMuX19kYXRhX18sZCxjKSkmJigiX19kYXRhX18iaW4gcyYmKGwuX19kYXRhX189cy5fX2RhdGFfXyksaFtkXT1sLEZ1dChoW2RdLGUsbixkLGgsanV0KHMsbikpKTtyZXR1cm4gbmV3IHlodChvLHRoaXMuX3BhcmVudHMsZSxuKX0sc2VsZWN0QWxsOmZ1bmN0aW9uIHdodCh0KXt2YXIgZT10aGlzLl9uYW1lLG49dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PU9zdCh0KSk7Zm9yKHZhciBpPXRoaXMuX2dyb3VwcyxyPWkubGVuZ3RoLG89W10sYT1bXSxzPTA7czxyOysrcylmb3IodmFyIGwsYz1pW3NdLHU9Yy5sZW5ndGgsaD0wO2g8dTsrK2gpaWYobD1jW2hdKXtmb3IodmFyIGQscD10LmNhbGwobCxsLl9fZGF0YV9fLGgsYyksZj1qdXQobCxuKSxtPTAsZz1wLmxlbmd0aDttPGc7KyttKShkPXBbbV0pJiZGdXQoZCxlLG4sbSxwLGYpO28ucHVzaChwKSxhLnB1c2gobCl9cmV0dXJuIG5ldyB5aHQobyxhLGUsbil9LGZpbHRlcjpmdW5jdGlvbiBTaHQodCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PVJzdCh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLGk9bmV3IEFycmF5KG4pLHI9MDtyPG47KytyKWZvcih2YXIgbyxhPWVbcl0scz1hLmxlbmd0aCxsPWlbcl09W10sYz0wO2M8czsrK2MpKG89YVtjXSkmJnQuY2FsbChvLG8uX19kYXRhX18sYyxhKSYmbC5wdXNoKG8pO3JldHVybiBuZXcgeWh0KGksdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX0sbWVyZ2U6ZnVuY3Rpb24gTWh0KHQpe2lmKHQuX2lkIT09dGhpcy5faWQpdGhyb3cgbmV3IEVycm9yO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj10Ll9ncm91cHMsaT1lLmxlbmd0aCxyPU1hdGgubWluKGksbi5sZW5ndGgpLG89bmV3IEFycmF5KGkpLGE9MDthPHI7KythKWZvcih2YXIgcyxsPWVbYV0sYz1uW2FdLHU9bC5sZW5ndGgsaD1vW2FdPW5ldyBBcnJheSh1KSxkPTA7ZDx1OysrZCkocz1sW2RdfHxjW2RdKSYmKGhbZF09cyk7Zm9yKDthPGk7KythKW9bYV09ZVthXTtyZXR1cm4gbmV3IHlodChvLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9LHNlbGVjdGlvbjpmdW5jdGlvbiBFaHQoKXtyZXR1cm4gbmV3IGhodCh0aGlzLl9ncm91cHMsdGhpcy5fcGFyZW50cyl9LHRyYW5zaXRpb246ZnVuY3Rpb24gVGh0KCl7Zm9yKHZhciB0PXRoaXMuX25hbWUsZT10aGlzLl9pZCxuPXZodCgpLGk9dGhpcy5fZ3JvdXBzLHI9aS5sZW5ndGgsbz0wO288cjsrK28pZm9yKHZhciBhLHM9aVtvXSxsPXMubGVuZ3RoLGM9MDtjPGw7KytjKWlmKGE9c1tjXSl7dmFyIHU9anV0KGEsZSk7RnV0KGEsdCxuLGMscyx7dGltZTp1LnRpbWUrdS5kZWxheSt1LmR1cmF0aW9uLGRlbGF5OjAsZHVyYXRpb246dS5kdXJhdGlvbixlYXNlOnUuZWFzZX0pfXJldHVybiBuZXcgeWh0KGksdGhpcy5fcGFyZW50cyx0LG4pfSxjYWxsOmJodC5jYWxsLG5vZGVzOmJodC5ub2Rlcyxub2RlOmJodC5ub2RlLHNpemU6Ymh0LnNpemUsZW1wdHk6Ymh0LmVtcHR5LGVhY2g6Ymh0LmVhY2gsb246ZnVuY3Rpb24gQ2h0KHQsZSl7dmFyIG49dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9qdXQodGhpcy5ub2RlKCksbikub24ub24odCk6dGhpcy5lYWNoKHVodChuLHQsZSkpfSxhdHRyOmZ1bmN0aW9uIEFodCh0LGUpe3ZhciBuPUNzdCh0KSxpPSJ0cmFuc2Zvcm0iPT09bj9tdXQ6WHV0O3JldHVybiB0aGlzLmF0dHJUd2Vlbih0LCJmdW5jdGlvbiI9PXR5cGVvZiBlPyhuLmxvY2FsP3RodDpRdXQpKG4saSxZdXQodGhpcywiYXR0ci4iK3QsZSkpOm51bGw9PWU/KG4ubG9jYWw/S3V0OiR1dCkobik6KG4ubG9jYWw/SnV0Olp1dCkobixpLGUpKX0sYXR0clR3ZWVuOmZ1bmN0aW9uIGtodCh0LGUpe3ZhciBuPSJhdHRyLiIrdDtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKG49dGhpcy50d2VlbihuKSkmJm4uX3ZhbHVlO2lmKG51bGw9PWUpcmV0dXJuIHRoaXMudHdlZW4obixudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3I7dmFyIGk9Q3N0KHQpO3JldHVybiB0aGlzLnR3ZWVuKG4sKGkubG9jYWw/aWh0OnJodCkoaSxlKSl9LHN0eWxlOmZ1bmN0aW9uIExodCh0LGUsbil7dmFyIGk9InRyYW5zZm9ybSI9PSh0Kz0iIik/cHV0Olh1dDtyZXR1cm4gbnVsbD09ZT90aGlzLnN0eWxlVHdlZW4odCwoZnVuY3Rpb24gcih0LGUpe3ZhciBuLGkscjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1ac3QodGhpcyx0KSxhPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpLFpzdCh0aGlzLHQpKTtyZXR1cm4gbz09PWE/bnVsbDpvPT09biYmYT09PWk/cjpyPWUobj1vLGk9YSl9fSkodCxpKSkub24oImVuZC5zdHlsZS4iK3QsZGh0KHQpKToiZnVuY3Rpb24iPT10eXBlb2YgZT90aGlzLnN0eWxlVHdlZW4odCwoZnVuY3Rpb24gYSh0LGUsbil7dmFyIGkscixvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPVpzdCh0aGlzLHQpLHM9bih0aGlzKSxsPXMrIiI7cmV0dXJuIG51bGw9PXMmJih0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpLGw9cz1ac3QodGhpcyx0KSksYT09PWw/bnVsbDphPT09aSYmbD09PXI/bzoocj1sLG89ZShpPWEscykpfX0pKHQsaSxZdXQodGhpcywic3R5bGUuIit0LGUpKSkuZWFjaCgoZnVuY3Rpb24gbyh0LGUpe3ZhciBuLGkscixvLGE9InN0eWxlLiIrZSxzPSJlbmQuIithO3JldHVybiBmdW5jdGlvbigpe3ZhciBsPVV1dCh0aGlzLHQpLGM9bC5vbix1PW51bGw9PWwudmFsdWVbYV0/b3x8KG89ZGh0KGUpKTp2b2lkIDA7Yz09PW4mJnI9PT11fHwoaT0obj1jKS5jb3B5KCkpLm9uKHMscj11KSxsLm9uPWl9fSkodGhpcy5faWQsdCkpOnRoaXMuc3R5bGVUd2Vlbih0LChmdW5jdGlvbiBzKHQsZSxuKXt2YXIgaSxyLG89bisiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1ac3QodGhpcyx0KTtyZXR1cm4gYT09PW8/bnVsbDphPT09aT9yOnI9ZShpPWEsbil9fSkodCxpLGUpLG4pLm9uKCJlbmQuc3R5bGUuIit0LG51bGwpfSxzdHlsZVR3ZWVuOmZ1bmN0aW9uIFBodCh0LGUsbil7dmFyIGk9InN0eWxlLiIrKHQrPSIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKGk9dGhpcy50d2VlbihpKSkmJmkuX3ZhbHVlO2lmKG51bGw9PWUpcmV0dXJuIHRoaXMudHdlZW4oaSxudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4oaSxmaHQodCxlLG51bGw9PW4/IiI6bikpfSx0ZXh0OmZ1bmN0aW9uIE5odCh0KXtyZXR1cm4gdGhpcy50d2VlbigidGV4dCIsImZ1bmN0aW9uIj09dHlwZW9mIHQ/KGZ1bmN0aW9uIGUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKTt0aGlzLnRleHRDb250ZW50PW51bGw9PWU/IiI6ZX19KShZdXQodGhpcywidGV4dCIsdCkpOihmdW5jdGlvbiBuKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9dH19KShudWxsPT10PyIiOnQrIiIpKX0sdGV4dFR3ZWVuOmZ1bmN0aW9uIElodCh0KXt2YXIgZT0idGV4dCI7aWYoYXJndW1lbnRzLmxlbmd0aDwxKXJldHVybihlPXRoaXMudHdlZW4oZSkpJiZlLl92YWx1ZTtpZihudWxsPT10KXJldHVybiB0aGlzLnR3ZWVuKGUsbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKGUsZ2h0KHQpKX0scmVtb3ZlOmZ1bmN0aW9uIE9odCgpe3JldHVybiB0aGlzLm9uKCJlbmQucmVtb3ZlIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhcmVudE5vZGU7Zm9yKHZhciBuIGluIHRoaXMuX190cmFuc2l0aW9uKWlmKCtuIT09ZSlyZXR1cm47dCYmdC5yZW1vdmVDaGlsZCh0aGlzKX19KSh0aGlzLl9pZCkpfSx0d2VlbjpmdW5jdGlvbiBSaHQodCxlKXt2YXIgbj10aGlzLl9pZDtpZih0Kz0iIixhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgaSxyPWp1dCh0aGlzLm5vZGUoKSxuKS50d2VlbixvPTAsYT1yLmxlbmd0aDtvPGE7KytvKWlmKChpPXJbb10pLm5hbWU9PT10KXJldHVybiBpLnZhbHVlO3JldHVybiBudWxsfXJldHVybiB0aGlzLmVhY2goKG51bGw9PWU/V3V0OnF1dCkobix0LGUpKX0sZGVsYXk6ZnVuY3Rpb24gemh0KHQpe3ZhciBlPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIHQ/b2h0OmFodCkoZSx0KSk6anV0KHRoaXMubm9kZSgpLGUpLmRlbGF5fSxkdXJhdGlvbjpmdW5jdGlvbiBEaHQodCl7dmFyIGU9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgdD9zaHQ6bGh0KShlLHQpKTpqdXQodGhpcy5ub2RlKCksZSkuZHVyYXRpb259LGVhc2U6ZnVuY3Rpb24gQmh0KHQpe3ZhciBlPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChjaHQoZSx0KSk6anV0KHRoaXMubm9kZSgpLGUpLmVhc2V9LGVuZDpmdW5jdGlvbiBIaHQoKXt2YXIgdCxlLG49dGhpcyxpPW4uX2lkLHI9bi5zaXplKCk7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihvLGEpe3ZhciBzPXt2YWx1ZTphfSxsPXt2YWx1ZTpmdW5jdGlvbigpezA9PS0tciYmbygpfX07bi5lYWNoKChmdW5jdGlvbigpe3ZhciBuPVV1dCh0aGlzLGkpLHI9bi5vbjtyIT09dCYmKChlPSh0PXIpLmNvcHkoKSkuXy5jYW5jZWwucHVzaChzKSxlLl8uaW50ZXJydXB0LnB1c2gocyksZS5fLmVuZC5wdXNoKGwpKSxuLm9uPWV9KSl9KSl9fTt2YXIgRmh0PXt0aW1lOm51bGwsZGVsYXk6MCxkdXJhdGlvbjoyNTAsZWFzZTpFZn07ZnVuY3Rpb24gVmh0KHQsZSl7Zm9yKHZhciBuOyEobj10Ll9fdHJhbnNpdGlvbil8fCEobj1uW2VdKTspaWYoISh0PXQucGFyZW50Tm9kZSkpcmV0dXJuIEZodC50aW1lPUx1dCgpLEZodDtyZXR1cm4gbn1mdW5jdGlvbiBVaHQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIGpodCh0LGUsbil7dGhpcy50YXJnZXQ9dCx0aGlzLnR5cGU9ZSx0aGlzLnRyYW5zZm9ybT1ufWZ1bmN0aW9uIEdodCh0LGUsbil7dGhpcy5rPXQsdGhpcy54PWUsdGhpcy55PW59SWx0LnByb3RvdHlwZS5pbnRlcnJ1cHQ9ZnVuY3Rpb24gV2h0KHQpe3JldHVybiB0aGlzLmVhY2goKGZ1bmN0aW9uKCl7R3V0KHRoaXMsdCl9KSl9LElsdC5wcm90b3R5cGUudHJhbnNpdGlvbj1mdW5jdGlvbiBxaHQodCl7dmFyIGUsbjt0IGluc3RhbmNlb2YgeWh0PyhlPXQuX2lkLHQ9dC5fbmFtZSk6KGU9dmh0KCksKG49Rmh0KS50aW1lPUx1dCgpLHQ9bnVsbD09dD9udWxsOnQrIiIpO2Zvcih2YXIgaT10aGlzLl9ncm91cHMscj1pLmxlbmd0aCxvPTA7bzxyOysrbylmb3IodmFyIGEscz1pW29dLGw9cy5sZW5ndGgsYz0wO2M8bDsrK2MpKGE9c1tjXSkmJkZ1dChhLHQsZSxjLHMsbnx8Vmh0KGEsZSkpO3JldHVybiBuZXcgeWh0KGksdGhpcy5fcGFyZW50cyx0LGUpfSxHaHQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpHaHQsc2NhbGU6ZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10P3RoaXM6bmV3IEdodCh0aGlzLmsqdCx0aGlzLngsdGhpcy55KX0sdHJhbnNsYXRlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIDA9PT10JjA9PT1lP3RoaXM6bmV3IEdodCh0aGlzLmssdGhpcy54K3RoaXMuayp0LHRoaXMueSt0aGlzLmsqZSl9LGFwcGx5OmZ1bmN0aW9uKHQpe3JldHVyblt0WzBdKnRoaXMuayt0aGlzLngsdFsxXSp0aGlzLmsrdGhpcy55XX0sYXBwbHlYOmZ1bmN0aW9uKHQpe3JldHVybiB0KnRoaXMuayt0aGlzLnh9LGFwcGx5WTpmdW5jdGlvbih0KXtyZXR1cm4gdCp0aGlzLmsrdGhpcy55fSxpbnZlcnQ6ZnVuY3Rpb24odCl7cmV0dXJuWyh0WzBdLXRoaXMueCkvdGhpcy5rLCh0WzFdLXRoaXMueSkvdGhpcy5rXX0saW52ZXJ0WDpmdW5jdGlvbih0KXtyZXR1cm4odC10aGlzLngpL3RoaXMua30saW52ZXJ0WTpmdW5jdGlvbih0KXtyZXR1cm4odC10aGlzLnkpL3RoaXMua30scmVzY2FsZVg6ZnVuY3Rpb24odCl7cmV0dXJuIHQuY29weSgpLmRvbWFpbih0LnJhbmdlKCkubWFwKHRoaXMuaW52ZXJ0WCx0aGlzKS5tYXAodC5pbnZlcnQsdCkpfSxyZXNjYWxlWTpmdW5jdGlvbih0KXtyZXR1cm4gdC5jb3B5KCkuZG9tYWluKHQucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRZLHRoaXMpLm1hcCh0LmludmVydCx0KSl9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuInRyYW5zbGF0ZSgiK3RoaXMueCsiLCIrdGhpcy55KyIpIHNjYWxlKCIrdGhpcy5rKyIpIn19O3ZhciBZaHQ9bmV3IEdodCgxLDAsMCk7ZnVuY3Rpb24gWGh0KHQpe3JldHVybiB0Ll9fem9vbXx8WWh0fWZ1bmN0aW9uICRodCgpe3dsdC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBLaHQoKXt3bHQucHJldmVudERlZmF1bHQoKSx3bHQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gWmh0KCl7cmV0dXJuIXdsdC5idXR0b259ZnVuY3Rpb24gSmh0KCl7dmFyIHQsZSxuPXRoaXM7cmV0dXJuIG4gaW5zdGFuY2VvZiBTVkdFbGVtZW50Pyh0PShuPW4ub3duZXJTVkdFbGVtZW50fHxuKS53aWR0aC5iYXNlVmFsLnZhbHVlLGU9bi5oZWlnaHQuYmFzZVZhbC52YWx1ZSk6KHQ9bi5jbGllbnRXaWR0aCxlPW4uY2xpZW50SGVpZ2h0KSxbWzAsMF0sW3QsZV1dfWZ1bmN0aW9uIFFodCgpe3JldHVybiB0aGlzLl9fem9vbXx8WWh0fWZ1bmN0aW9uIHRkdCgpe3JldHVybi13bHQuZGVsdGFZKih3bHQuZGVsdGFNb2RlPzEyMDoxKS81MDB9ZnVuY3Rpb24gZWR0KCl7cmV0dXJuIm9udG91Y2hzdGFydCJpbiB0aGlzfWZ1bmN0aW9uIG5kdCh0LGUsbil7dmFyIGk9dC5pbnZlcnRYKGVbMF1bMF0pLW5bMF1bMF0scj10LmludmVydFgoZVsxXVswXSktblsxXVswXSxvPXQuaW52ZXJ0WShlWzBdWzFdKS1uWzBdWzFdLGE9dC5pbnZlcnRZKGVbMV1bMV0pLW5bMV1bMV07cmV0dXJuIHQudHJhbnNsYXRlKHI+aT8oaStyKS8yOk1hdGgubWluKDAsaSl8fE1hdGgubWF4KDAsciksYT5vPyhvK2EpLzI6TWF0aC5taW4oMCxvKXx8TWF0aC5tYXgoMCxhKSl9WGh0LnByb3RvdHlwZT1HaHQucHJvdG90eXBlO3ZhciBpZHQ9eGUoT2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsdmVyc2lvbjoiNC4xMy4wIixiaXNlY3Q6dVIsYmlzZWN0UmlnaHQ6dVIsYmlzZWN0TGVmdDpoUixhc2NlbmRpbmc6c1IsYmlzZWN0b3I6bFIsY3Jvc3M6ZnVuY3Rpb24gcmR0KHQsZSxuKXt2YXIgaSxyLG8sYSxzPXQubGVuZ3RoLGw9ZS5sZW5ndGgsYz1uZXcgQXJyYXkocypsKTtmb3IobnVsbD09biYmKG49ZFIpLGk9bz0wO2k8czsrK2kpZm9yKGE9dFtpXSxyPTA7cjxsOysrciwrK28pY1tvXT1uKGEsZVtyXSk7cmV0dXJuIGN9LGRlc2NlbmRpbmc6ZnVuY3Rpb24gb2R0KHQsZSl7cmV0dXJuIGU8dD8tMTplPnQ/MTplPj10PzA6TmFOfSxkZXZpYXRpb246bVIsZXh0ZW50OmdSLGhpc3RvZ3JhbTpmdW5jdGlvbiBhZHQoKXt2YXIgdD14UixlPWdSLG49QVI7ZnVuY3Rpb24gaShpKXt2YXIgcixvLGE9aS5sZW5ndGgscz1uZXcgQXJyYXkoYSk7Zm9yKHI9MDtyPGE7KytyKXNbcl09dChpW3JdLHIsaSk7dmFyIGw9ZShzKSxjPWxbMF0sdT1sWzFdLGg9bihzLGMsdSk7QXJyYXkuaXNBcnJheShoKXx8KGg9Q1IoYyx1LGgpLGg9d1IoTWF0aC5jZWlsKGMvaCkqaCxNYXRoLmZsb29yKHUvaCkqaCxoKSk7Zm9yKHZhciBkPWgubGVuZ3RoO2hbMF08PWM7KWguc2hpZnQoKSwtLWQ7Zm9yKDtoW2QtMV0+dTspaC5wb3AoKSwtLWQ7dmFyIHAsZj1uZXcgQXJyYXkoZCsxKTtmb3Iocj0wO3I8PWQ7KytyKShwPWZbcl09W10pLngwPXI+MD9oW3ItMV06YyxwLngxPXI8ZD9oW3JdOnU7Zm9yKHI9MDtyPGE7KytyKWM8PShvPXNbcl0pJiZvPD11JiZmW3VSKGgsbywwLGQpXS5wdXNoKGlbcl0pO3JldHVybiBmfXJldHVybiBpLnZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6YlIoZSksaSk6dH0saS5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpiUihbdFswXSx0WzFdXSksaSk6ZX0saS50aHJlc2hvbGRzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6QXJyYXkuaXNBcnJheSh0KT9iUih5Ui5jYWxsKHQpKTpiUih0KSxpKTpufSxpfSx0aHJlc2hvbGRGcmVlZG1hbkRpYWNvbmlzOmZ1bmN0aW9uIHNkdCh0LGUsbil7cmV0dXJuIHQ9dlIuY2FsbCh0LHBSKS5zb3J0KHNSKSxNYXRoLmNlaWwoKG4tZSkvKDIqKGtSKHQsLjc1KS1rUih0LC4yNSkpKk1hdGgucG93KHQubGVuZ3RoLC0xLzMpKSl9LHRocmVzaG9sZFNjb3R0OmZ1bmN0aW9uIGxkdCh0LGUsbil7cmV0dXJuIE1hdGguY2VpbCgobi1lKS8oMy41Km1SKHQpKk1hdGgucG93KHQubGVuZ3RoLC0xLzMpKSl9LHRocmVzaG9sZFN0dXJnZXM6QVIsbWF4OmZ1bmN0aW9uIGNkdCh0LGUpe3ZhciBuLGkscj10Lmxlbmd0aCxvPS0xO2lmKG51bGw9PWUpe2Zvcig7KytvPHI7KWlmKG51bGwhPShuPXRbb10pJiZuPj1uKWZvcihpPW47KytvPHI7KW51bGwhPShuPXRbb10pJiZuPmkmJihpPW4pfWVsc2UgZm9yKDsrK288cjspaWYobnVsbCE9KG49ZSh0W29dLG8sdCkpJiZuPj1uKWZvcihpPW47KytvPHI7KW51bGwhPShuPWUodFtvXSxvLHQpKSYmbj5pJiYoaT1uKTtyZXR1cm4gaX0sbWVhbjpmdW5jdGlvbiB1ZHQodCxlKXt2YXIgbixpPXQubGVuZ3RoLHI9aSxvPS0xLGE9MDtpZihudWxsPT1lKWZvcig7KytvPGk7KWlzTmFOKG49cFIodFtvXSkpPy0tcjphKz1uO2Vsc2UgZm9yKDsrK288aTspaXNOYU4obj1wUihlKHRbb10sbyx0KSkpPy0tcjphKz1uO2lmKHIpcmV0dXJuIGEvcn0sbWVkaWFuOmZ1bmN0aW9uIGhkdCh0LGUpe3ZhciBuLGk9dC5sZW5ndGgscj0tMSxvPVtdO2lmKG51bGw9PWUpZm9yKDsrK3I8aTspaXNOYU4obj1wUih0W3JdKSl8fG8ucHVzaChuKTtlbHNlIGZvcig7KytyPGk7KWlzTmFOKG49cFIoZSh0W3JdLHIsdCkpKXx8by5wdXNoKG4pO3JldHVybiBrUihvLnNvcnQoc1IpLC41KX0sbWVyZ2U6ZnVuY3Rpb24gZGR0KHQpe2Zvcih2YXIgZSxuLGkscj10Lmxlbmd0aCxvPS0xLGE9MDsrK288cjspYSs9dFtvXS5sZW5ndGg7Zm9yKG49bmV3IEFycmF5KGEpOy0tcj49MDspZm9yKGU9KGk9dFtyXSkubGVuZ3RoOy0tZT49MDspblstLWFdPWlbZV07cmV0dXJuIG59LG1pbjpMUixwYWlyczpmdW5jdGlvbiBwZHQodCxlKXtudWxsPT1lJiYoZT1kUik7Zm9yKHZhciBuPTAsaT10Lmxlbmd0aC0xLHI9dFswXSxvPW5ldyBBcnJheShpPDA/MDppKTtuPGk7KW9bbl09ZShyLHI9dFsrK25dKTtyZXR1cm4gb30scGVybXV0ZTpmdW5jdGlvbiBmZHQodCxlKXtmb3IodmFyIG49ZS5sZW5ndGgsaT1uZXcgQXJyYXkobik7bi0tOylpW25dPXRbZVtuXV07cmV0dXJuIGl9LHF1YW50aWxlOmtSLHJhbmdlOndSLHNjYW46ZnVuY3Rpb24gbWR0KHQsZSl7aWYobj10Lmxlbmd0aCl7dmFyIG4saSxyPTAsbz0wLGE9dFtvXTtmb3IobnVsbD09ZSYmKGU9c1IpOysrcjxuOykoZShpPXRbcl0sYSk8MHx8MCE9PWUoYSxhKSkmJihhPWksbz1yKTtyZXR1cm4gMD09PWUoYSxhKT9vOnZvaWQgMH19LHNodWZmbGU6ZnVuY3Rpb24gZ2R0KHQsZSxuKXtmb3IodmFyIGkscixvPShudWxsPT1uP3QubGVuZ3RoOm4pLShlPW51bGw9PWU/MDorZSk7bzspcj1NYXRoLnJhbmRvbSgpKm8tLXwwLGk9dFtvK2VdLHRbbytlXT10W3IrZV0sdFtyK2VdPWk7cmV0dXJuIHR9LHN1bTpmdW5jdGlvbiBfZHQodCxlKXt2YXIgbixpPXQubGVuZ3RoLHI9LTEsbz0wO2lmKG51bGw9PWUpZm9yKDsrK3I8aTspKG49K3Rbcl0pJiYobys9bik7ZWxzZSBmb3IoOysrcjxpOykobj0rZSh0W3JdLHIsdCkpJiYobys9bik7cmV0dXJuIG99LHRpY2tzOmZ1bmN0aW9uIHlkdCh0LGUsbil7dmFyIGkscixvLGEscz0tMTtpZihuPStuLCh0PSt0KT09KGU9K2UpJiZuPjApcmV0dXJuW3RdO2lmKChpPWU8dCkmJihyPXQsdD1lLGU9ciksMD09PShhPVRSKHQsZSxuKSl8fCFpc0Zpbml0ZShhKSlyZXR1cm5bXTtpZihhPjApZm9yKHQ9TWF0aC5jZWlsKHQvYSksZT1NYXRoLmZsb29yKGUvYSksbz1uZXcgQXJyYXkocj1NYXRoLmNlaWwoZS10KzEpKTsrK3M8cjspb1tzXT0odCtzKSphO2Vsc2UgZm9yKHQ9TWF0aC5mbG9vcih0KmEpLGU9TWF0aC5jZWlsKGUqYSksbz1uZXcgQXJyYXkocj1NYXRoLmNlaWwodC1lKzEpKTsrK3M8cjspb1tzXT0odC1zKS9hO3JldHVybiBpJiZvLnJldmVyc2UoKSxvfSx0aWNrSW5jcmVtZW50OlRSLHRpY2tTdGVwOkNSLHRyYW5zcG9zZTpQUix2YXJpYW5jZTpmUix6aXA6ZnVuY3Rpb24gdmR0KCl7cmV0dXJuIFBSKGFyZ3VtZW50cyl9LGF4aXNUb3A6ZnVuY3Rpb24gYmR0KHQpe3JldHVybiBWUigxLHQpfSxheGlzUmlnaHQ6ZnVuY3Rpb24geGR0KHQpe3JldHVybiBWUigyLHQpfSxheGlzQm90dG9tOmZ1bmN0aW9uIHdkdCh0KXtyZXR1cm4gVlIoMyx0KX0sYXhpc0xlZnQ6ZnVuY3Rpb24gU2R0KHQpe3JldHVybiBWUig0LHQpfSxicnVzaDpmdW5jdGlvbiBNZHQoKXtyZXR1cm4gSUYod0YpfSxicnVzaFg6ZnVuY3Rpb24gRWR0KCl7cmV0dXJuIElGKGJGKX0sYnJ1c2hZOmZ1bmN0aW9uIFRkdCgpe3JldHVybiBJRih4Ril9LGJydXNoU2VsZWN0aW9uOmZ1bmN0aW9uIENkdCh0KXt2YXIgZT10Ll9fYnJ1c2g7cmV0dXJuIGU/ZS5kaW0ub3V0cHV0KGUuc2VsZWN0aW9uKTpudWxsfSxjaG9yZDpmdW5jdGlvbiBBZHQoKXt2YXIgdD0wLGU9bnVsbCxuPW51bGwsaT1udWxsO2Z1bmN0aW9uIHIocil7dmFyIG8sYSxzLGwsYyx1LGg9ci5sZW5ndGgsZD1bXSxwPVJGKGgpLGY9W10sbT1bXSxnPW0uZ3JvdXBzPW5ldyBBcnJheShoKSxfPW5ldyBBcnJheShoKmgpO2ZvcihvPTAsYz0tMTsrK2M8aDspe2ZvcihhPTAsdT0tMTsrK3U8aDspYSs9cltjXVt1XTtkLnB1c2goYSksZi5wdXNoKFJGKGgpKSxvKz1hfWZvcihlJiZwLnNvcnQoKGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUoZFt0XSxkW25dKX0pKSxuJiZmLmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7dC5zb3J0KChmdW5jdGlvbih0LGkpe3JldHVybiBuKHJbZV1bdF0scltlXVtpXSl9KSl9KSksbD0obz1VRigwLFZGLXQqaCkvbyk/dDpWRi9oLGE9MCxjPS0xOysrYzxoOyl7Zm9yKHM9YSx1PS0xOysrdTxoOyl7dmFyIHk9cFtjXSx2PWZbeV1bdV0sYj1yW3ldW3ZdLHg9YSx3PWErPWIqbztfW3YqaCt5XT17aW5kZXg6eSxzdWJpbmRleDp2LHN0YXJ0QW5nbGU6eCxlbmRBbmdsZTp3LHZhbHVlOmJ9fWdbeV09e2luZGV4Onksc3RhcnRBbmdsZTpzLGVuZEFuZ2xlOmEsdmFsdWU6ZFt5XX0sYSs9bH1mb3IoYz0tMTsrK2M8aDspZm9yKHU9Yy0xOysrdTxoOyl7dmFyIFM9X1t1KmgrY10sTT1fW2MqaCt1XTsoUy52YWx1ZXx8TS52YWx1ZSkmJm0ucHVzaChTLnZhbHVlPE0udmFsdWU/e3NvdXJjZTpNLHRhcmdldDpTfTp7c291cmNlOlMsdGFyZ2V0Ok19KX1yZXR1cm4gaT9tLnNvcnQoaSk6bX1yZXR1cm4gci5wYWRBbmdsZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1VRigwLGUpLHIpOnR9LHIuc29ydEdyb3Vwcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LHIpOmV9LHIuc29ydFN1Ymdyb3Vwcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LHIpOm59LHIuc29ydENob3Jkcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09dD9pPW51bGw6KGk9akYodCkpLl89dCxyKTppJiZpLl99LHJ9LHJpYmJvbjpmdW5jdGlvbiBrZHQoKXt2YXIgdD1KRixlPVFGLG49dFYsaT1lVixyPW5WLG89bnVsbDtmdW5jdGlvbiBhKCl7dmFyIGEscz1HRi5jYWxsKGFyZ3VtZW50cyksbD10LmFwcGx5KHRoaXMscyksYz1lLmFwcGx5KHRoaXMscyksdT0rbi5hcHBseSh0aGlzLChzWzBdPWwscykpLGg9aS5hcHBseSh0aGlzLHMpLUZGLGQ9ci5hcHBseSh0aGlzLHMpLUZGLHA9dSpERihoKSxmPXUqQkYoaCksbT0rbi5hcHBseSh0aGlzLChzWzBdPWMscykpLGc9aS5hcHBseSh0aGlzLHMpLUZGLF89ci5hcHBseSh0aGlzLHMpLUZGO2lmKG98fChvPWE9WkYoKSksby5tb3ZlVG8ocCxmKSxvLmFyYygwLDAsdSxoLGQpLGg9PT1nJiZkPT09X3x8KG8ucXVhZHJhdGljQ3VydmVUbygwLDAsbSpERihnKSxtKkJGKGcpKSxvLmFyYygwLDAsbSxnLF8pKSxvLnF1YWRyYXRpY0N1cnZlVG8oMCwwLHAsZiksby5jbG9zZVBhdGgoKSxhKXJldHVybiBvPW51bGwsYSsiInx8bnVsbH1yZXR1cm4gYS5yYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpXRigrdCksYSk6bn0sYS5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6V0YoK3QpLGEpOml9LGEuZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpXRigrdCksYSk6cn0sYS5zb3VyY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxhKTp0fSxhLnRhcmdldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LGEpOmV9LGEuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1udWxsPT10P251bGw6dCxhKTpvfSxhfSxuZXN0OmZ1bmN0aW9uIExkdCgpe3ZhciB0LGUsbixpPVtdLHI9W107ZnVuY3Rpb24gbyhuLHIsYSxzKXtpZihyPj1pLmxlbmd0aClyZXR1cm4gbnVsbCE9dCYmbi5zb3J0KHQpLG51bGwhPWU/ZShuKTpuO2Zvcih2YXIgbCxjLHUsaD0tMSxkPW4ubGVuZ3RoLHA9aVtyKytdLGY9b1YoKSxtPWEoKTsrK2g8ZDspKHU9Zi5nZXQobD1wKGM9bltoXSkrIiIpKT91LnB1c2goYyk6Zi5zZXQobCxbY10pO3JldHVybiBmLmVhY2goKGZ1bmN0aW9uKHQsZSl7cyhtLGUsbyh0LHIsYSxzKSl9KSksbX1mdW5jdGlvbiBhKHQsbil7aWYoKytuPmkubGVuZ3RoKXJldHVybiB0O3ZhciBvLHM9cltuLTFdO3JldHVybiBudWxsIT1lJiZuPj1pLmxlbmd0aD9vPXQuZW50cmllcygpOihvPVtdLHQuZWFjaCgoZnVuY3Rpb24odCxlKXtvLnB1c2goe2tleTplLHZhbHVlczphKHQsbil9KX0pKSksbnVsbCE9cz9vLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHModC5rZXksZS5rZXkpfSkpOm99cmV0dXJuIG49e29iamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gbyh0LDAsYVYsc1YpfSxtYXA6ZnVuY3Rpb24odCl7cmV0dXJuIG8odCwwLGxWLGNWKX0sZW50cmllczpmdW5jdGlvbih0KXtyZXR1cm4gYShvKHQsMCxsVixjViksMCl9LGtleTpmdW5jdGlvbih0KXtyZXR1cm4gaS5wdXNoKHQpLG59LHNvcnRLZXlzOmZ1bmN0aW9uKHQpe3JldHVybiByW2kubGVuZ3RoLTFdPXQsbn0sc29ydFZhbHVlczpmdW5jdGlvbihlKXtyZXR1cm4gdD1lLG59LHJvbGx1cDpmdW5jdGlvbih0KXtyZXR1cm4gZT10LG59fX0sc2V0OmRWLG1hcDpvVixrZXlzOmZ1bmN0aW9uIFBkdCh0KXt2YXIgZT1bXTtmb3IodmFyIG4gaW4gdCllLnB1c2gobik7cmV0dXJuIGV9LHZhbHVlczpmdW5jdGlvbiBOZHQodCl7dmFyIGU9W107Zm9yKHZhciBuIGluIHQpZS5wdXNoKHRbbl0pO3JldHVybiBlfSxlbnRyaWVzOmZ1bmN0aW9uIElkdCh0KXt2YXIgZT1bXTtmb3IodmFyIG4gaW4gdCllLnB1c2goe2tleTpuLHZhbHVlOnRbbl19KTtyZXR1cm4gZX0sY29sb3I6TFYscmdiOk9WLGhzbDpCVixsYWI6JFYsaGNsOm5VLGN1YmVoZWxpeDpsVSxkaXNwYXRjaDpoVSxkcmFnOmZ1bmN0aW9uIE9kdCgpe3ZhciB0LGUsbixpLHI9Rmosbz1WaixhPVVqLHM9amosbD17fSxjPV9VKCJzdGFydCIsImRyYWciLCJlbmQiKSx1PTAsaD0wO2Z1bmN0aW9uIGQodCl7dC5vbigibW91c2Vkb3duLmRyYWciLHApLmZpbHRlcihzKS5vbigidG91Y2hzdGFydC5kcmFnIixnKS5vbigidG91Y2htb3ZlLmRyYWciLF8pLm9uKCJ0b3VjaGVuZC5kcmFnIHRvdWNoY2FuY2VsLmRyYWciLHkpLnN0eWxlKCJ0b3VjaC1hY3Rpb24iLCJub25lIikuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKX1mdW5jdGlvbiBwKCl7aWYoIWkmJnIuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgYT12KCJtb3VzZSIsby5hcHBseSh0aGlzLGFyZ3VtZW50cyksTmosdGhpcyxhcmd1bWVudHMpO2EmJihraihfai52aWV3KS5vbigibW91c2Vtb3ZlLmRyYWciLGYsITApLm9uKCJtb3VzZXVwLmRyYWciLG0sITApLHpqKF9qLnZpZXcpLE9qKCksbj0hMSx0PV9qLmNsaWVudFgsZT1fai5jbGllbnRZLGEoInN0YXJ0IikpfX1mdW5jdGlvbiBmKCl7aWYoUmooKSwhbil7dmFyIGk9X2ouY2xpZW50WC10LHI9X2ouY2xpZW50WS1lO249aSppK3Iqcj5ofWwubW91c2UoImRyYWciKX1mdW5jdGlvbiBtKCl7a2ooX2oudmlldykub24oIm1vdXNlbW92ZS5kcmFnIG1vdXNldXAuZHJhZyIsbnVsbCksRGooX2oudmlldyxuKSxSaigpLGwubW91c2UoImVuZCIpfWZ1bmN0aW9uIGcoKXtpZihyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIHQsZSxuPV9qLmNoYW5nZWRUb3VjaGVzLGk9by5hcHBseSh0aGlzLGFyZ3VtZW50cyksYT1uLmxlbmd0aDtmb3IodD0wO3Q8YTsrK3QpKGU9dihuW3RdLmlkZW50aWZpZXIsaSxJaix0aGlzLGFyZ3VtZW50cykpJiYoT2ooKSxlKCJzdGFydCIpKX19ZnVuY3Rpb24gXygpe3ZhciB0LGUsbj1fai5jaGFuZ2VkVG91Y2hlcyxpPW4ubGVuZ3RoO2Zvcih0PTA7dDxpOysrdCkoZT1sW25bdF0uaWRlbnRpZmllcl0pJiYoUmooKSxlKCJkcmFnIikpfWZ1bmN0aW9uIHkoKXt2YXIgdCxlLG49X2ouY2hhbmdlZFRvdWNoZXMscj1uLmxlbmd0aDtmb3IoaSYmY2xlYXJUaW1lb3V0KGkpLGk9c2V0VGltZW91dCgoZnVuY3Rpb24oKXtpPW51bGx9KSw1MDApLHQ9MDt0PHI7Kyt0KShlPWxbblt0XS5pZGVudGlmaWVyXSkmJihPaigpLGUoImVuZCIpKX1mdW5jdGlvbiB2KHQsZSxuLGkscil7dmFyIG8scyxoLHA9bihlLHQpLGY9Yy5jb3B5KCk7aWYoU2oobmV3IEhqKGQsImJlZm9yZXN0YXJ0IixvLHQsdSxwWzBdLHBbMV0sMCwwLGYpLChmdW5jdGlvbigpe3JldHVybiBudWxsIT0oX2ouc3ViamVjdD1vPWEuYXBwbHkoaSxyKSkmJihzPW8ueC1wWzBdfHwwLGg9by55LXBbMV18fDAsITApfSkpKXJldHVybiBmdW5jdGlvbiBhKGMpe3ZhciBtLGc9cDtzd2l0Y2goYyl7Y2FzZSJzdGFydCI6bFt0XT1hLG09dSsrO2JyZWFrO2Nhc2UiZW5kIjpkZWxldGUgbFt0XSwtLXU7Y2FzZSJkcmFnIjpwPW4oZSx0KSxtPXV9U2oobmV3IEhqKGQsYyxvLHQsbSxwWzBdK3MscFsxXStoLHBbMF0tZ1swXSxwWzFdLWdbMV0sZiksZi5hcHBseSxmLFtjLGkscl0pfX1yZXR1cm4gZC5maWx0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpCaighIXQpLGQpOnJ9LGQuY29udGFpbmVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6QmoodCksZCk6b30sZC5zdWJqZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6QmoodCksZCk6YX0sZC50b3VjaGFibGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpCaighIXQpLGQpOnN9LGQub249ZnVuY3Rpb24oKXt2YXIgdD1jLm9uLmFwcGx5KGMsYXJndW1lbnRzKTtyZXR1cm4gdD09PWM/ZDp0fSxkLmNsaWNrRGlzdGFuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9KHQ9K3QpKnQsZCk6TWF0aC5zcXJ0KGgpfSxkfSxkcmFnRGlzYWJsZTp6aixkcmFnRW5hYmxlOkRqLGRzdkZvcm1hdDpNRyxjc3ZQYXJzZTpURyxjc3ZQYXJzZVJvd3M6Q0csY3N2Rm9ybWF0OkFHLGNzdkZvcm1hdFJvd3M6a0csdHN2UGFyc2U6UEcsdHN2UGFyc2VSb3dzOk5HLHRzdkZvcm1hdDpJRyx0c3ZGb3JtYXRSb3dzOk9HLGVhc2VMaW5lYXI6ZnVuY3Rpb24gUmR0KHQpe3JldHVybit0fSxlYXNlUXVhZDpSRyxlYXNlUXVhZEluOmZ1bmN0aW9uIHpkdCh0KXtyZXR1cm4gdCp0fSxlYXNlUXVhZE91dDpmdW5jdGlvbiBEZHQodCl7cmV0dXJuIHQqKDItdCl9LGVhc2VRdWFkSW5PdXQ6UkcsZWFzZUN1YmljOnpHLGVhc2VDdWJpY0luOmZ1bmN0aW9uIEJkdCh0KXtyZXR1cm4gdCp0KnR9LGVhc2VDdWJpY091dDpmdW5jdGlvbiBIZHQodCl7cmV0dXJuLS10KnQqdCsxfSxlYXNlQ3ViaWNJbk91dDp6RyxlYXNlUG9seTpIRyxlYXNlUG9seUluOkRHLGVhc2VQb2x5T3V0OkJHLGVhc2VQb2x5SW5PdXQ6SEcsZWFzZVNpbjpVRyxlYXNlU2luSW46ZnVuY3Rpb24gRmR0KHQpe3JldHVybiAxLU1hdGguY29zKHQqVkcpfSxlYXNlU2luT3V0OmZ1bmN0aW9uIFZkdCh0KXtyZXR1cm4gTWF0aC5zaW4odCpWRyl9LGVhc2VTaW5Jbk91dDpVRyxlYXNlRXhwOmpHLGVhc2VFeHBJbjpmdW5jdGlvbiBVZHQodCl7cmV0dXJuIE1hdGgucG93KDIsMTAqdC0xMCl9LGVhc2VFeHBPdXQ6ZnVuY3Rpb24gamR0KHQpe3JldHVybiAxLU1hdGgucG93KDIsLTEwKnQpfSxlYXNlRXhwSW5PdXQ6akcsZWFzZUNpcmNsZTpHRyxlYXNlQ2lyY2xlSW46ZnVuY3Rpb24gR2R0KHQpe3JldHVybiAxLU1hdGguc3FydCgxLXQqdCl9LGVhc2VDaXJjbGVPdXQ6ZnVuY3Rpb24gV2R0KHQpe3JldHVybiBNYXRoLnNxcnQoMS0gLS10KnQpfSxlYXNlQ2lyY2xlSW5PdXQ6R0csZWFzZUJvdW5jZTpxRyxlYXNlQm91bmNlSW46ZnVuY3Rpb24gcWR0KHQpe3JldHVybiAxLXFHKDEtdCl9LGVhc2VCb3VuY2VPdXQ6cUcsZWFzZUJvdW5jZUluT3V0OmZ1bmN0aW9uIFlkdCh0KXtyZXR1cm4oKHQqPTIpPD0xPzEtcUcoMS10KTpxRyh0LTEpKzEpLzJ9LGVhc2VCYWNrOktHLGVhc2VCYWNrSW46WEcsZWFzZUJhY2tPdXQ6JEcsZWFzZUJhY2tJbk91dDpLRyxlYXNlRWxhc3RpYzpRRyxlYXNlRWxhc3RpY0luOkpHLGVhc2VFbGFzdGljT3V0OlFHLGVhc2VFbGFzdGljSW5PdXQ6dFcsZm9yY2VDZW50ZXI6ZnVuY3Rpb24gWGR0KHQsZSl7dmFyIG47ZnVuY3Rpb24gaSgpe3ZhciBpLHIsbz1uLmxlbmd0aCxhPTAscz0wO2ZvcihpPTA7aTxvOysraSlhKz0ocj1uW2ldKS54LHMrPXIueTtmb3IoYT1hL28tdCxzPXMvby1lLGk9MDtpPG87KytpKShyPW5baV0pLngtPWEsci55LT1zfXJldHVybiBudWxsPT10JiYodD0wKSxudWxsPT1lJiYoZT0wKSxpLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7bj10fSxpLng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2UsaSk6dH0saS55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0LGkpOmV9LGl9LGZvcmNlQ29sbGlkZTpmdW5jdGlvbiAkZHQodCl7dmFyIGUsbixpPTEscj0xO2Z1bmN0aW9uIG8oKXtmb3IodmFyIHQsbyxzLGwsYyx1LGgsZD1lLmxlbmd0aCxwPTA7cDxyOysrcClmb3Iobz1zVyhlLGhXLGRXKS52aXNpdEFmdGVyKGEpLHQ9MDt0PGQ7Kyt0KWg9KHU9blsocz1lW3RdKS5pbmRleF0pKnUsbD1zLngrcy52eCxjPXMueStzLnZ5LG8udmlzaXQoZik7ZnVuY3Rpb24gZih0LGUsbixyLG8pe3ZhciBhPXQuZGF0YSxkPXQucixwPXUrZDtpZighYSlyZXR1cm4gZT5sK3B8fHI8bC1wfHxuPmMrcHx8bzxjLXA7aWYoYS5pbmRleD5zLmluZGV4KXt2YXIgZj1sLWEueC1hLnZ4LG09Yy1hLnktYS52eSxnPWYqZittKm07ZzxwKnAmJigwPT09ZiYmKGcrPShmPW5XKCkpKmYpLDA9PT1tJiYoZys9KG09blcoKSkqbSksZz0ocC0oZz1NYXRoLnNxcnQoZykpKS9nKmkscy52eCs9KGYqPWcpKihwPShkKj1kKS8oaCtkKSkscy52eSs9KG0qPWcpKnAsYS52eC09ZioocD0xLXApLGEudnktPW0qcCl9fX1mdW5jdGlvbiBhKHQpe2lmKHQuZGF0YSlyZXR1cm4gdC5yPW5bdC5kYXRhLmluZGV4XTtmb3IodmFyIGU9dC5yPTA7ZTw0OysrZSl0W2VdJiZ0W2VdLnI+dC5yJiYodC5yPXRbZV0ucil9ZnVuY3Rpb24gcygpe2lmKGUpe3ZhciBpLHIsbz1lLmxlbmd0aDtmb3Iobj1uZXcgQXJyYXkobyksaT0wO2k8bzsrK2kpblsocj1lW2ldKS5pbmRleF09K3QocixpLGUpfX1yZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9ZVcobnVsbD09dD8xOit0KSksby5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe2U9dCxzKCl9LG8uaXRlcmF0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rdCxvKTpyfSxvLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSt0LG8pOml9LG8ucmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6ZVcoK2UpLHMoKSxvKTp0fSxvfSxmb3JjZUxpbms6ZnVuY3Rpb24gS2R0KHQpe3ZhciBlLG4saSxyLG8sYT1OVyxzPWZ1bmN0aW9uIGwodCl7cmV0dXJuIDEvTWF0aC5taW4oclt0LnNvdXJjZS5pbmRleF0sclt0LnRhcmdldC5pbmRleF0pfSxjPWVXKDMwKSx1PTE7ZnVuY3Rpb24gaChpKXtmb3IodmFyIHI9MCxhPXQubGVuZ3RoO3I8dTsrK3IpZm9yKHZhciBzLGwsYyxoLGQscCxmLG09MDttPGE7KyttKWg9KGM9KHM9dFttXSkudGFyZ2V0KS54K2MudngtKGw9cy5zb3VyY2UpLngtbC52eHx8blcoKSxkPWMueStjLnZ5LWwueS1sLnZ5fHxuVygpLGQqPXA9KChwPU1hdGguc3FydChoKmgrZCpkKSktblttXSkvcCppKmVbbV0sYy52eC09KGgqPXApKihmPW9bbV0pLGMudnktPWQqZixsLnZ4Kz1oKihmPTEtZiksbC52eSs9ZCpmfWZ1bmN0aW9uIGQoKXtpZihpKXt2YXIgcyxsLGM9aS5sZW5ndGgsdT10Lmxlbmd0aCxoPWtXKGksYSk7Zm9yKHM9MCxyPW5ldyBBcnJheShjKTtzPHU7KytzKShsPXRbc10pLmluZGV4PXMsIm9iamVjdCIhPXR5cGVvZiBsLnNvdXJjZSYmKGwuc291cmNlPUlXKGgsbC5zb3VyY2UpKSwib2JqZWN0IiE9dHlwZW9mIGwudGFyZ2V0JiYobC50YXJnZXQ9SVcoaCxsLnRhcmdldCkpLHJbbC5zb3VyY2UuaW5kZXhdPShyW2wuc291cmNlLmluZGV4XXx8MCkrMSxyW2wudGFyZ2V0LmluZGV4XT0ocltsLnRhcmdldC5pbmRleF18fDApKzE7Zm9yKHM9MCxvPW5ldyBBcnJheSh1KTtzPHU7KytzKW9bc109clsobD10W3NdKS5zb3VyY2UuaW5kZXhdLyhyW2wuc291cmNlLmluZGV4XStyW2wudGFyZ2V0LmluZGV4XSk7ZT1uZXcgQXJyYXkodSkscCgpLG49bmV3IEFycmF5KHUpLGYoKX19ZnVuY3Rpb24gcCgpe2lmKGkpZm9yKHZhciBuPTAscj10Lmxlbmd0aDtuPHI7KytuKWVbbl09K3ModFtuXSxuLHQpfWZ1bmN0aW9uIGYoKXtpZihpKWZvcih2YXIgZT0wLHI9dC5sZW5ndGg7ZTxyOysrZSluW2VdPStjKHRbZV0sZSx0KX1yZXR1cm4gbnVsbD09dCYmKHQ9W10pLGguaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtpPXQsZCgpfSxoLmxpbmtzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUsZCgpLGgpOnR9LGguaWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dCxoKTphfSxoLml0ZXJhdGlvbnM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9K3QsaCk6dX0saC5zdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmVXKCt0KSxwKCksaCk6c30saC5kaXN0YW5jZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmVXKCt0KSxmKCksaCk6Y30saH0sZm9yY2VNYW55Qm9keTpmdW5jdGlvbiBaZHQoKXt2YXIgdCxlLG4saSxyPWVXKC0zMCksbz0xLGE9MS8wLHM9LjgxO2Z1bmN0aW9uIGwoaSl7dmFyIHIsbz10Lmxlbmd0aCxhPXNXKHQsaXEscnEpLnZpc2l0QWZ0ZXIodSk7Zm9yKG49aSxyPTA7cjxvOysrcillPXRbcl0sYS52aXNpdChoKX1mdW5jdGlvbiBjKCl7aWYodCl7dmFyIGUsbixvPXQubGVuZ3RoO2ZvcihpPW5ldyBBcnJheShvKSxlPTA7ZTxvOysrZSlpWyhuPXRbZV0pLmluZGV4XT0rcihuLGUsdCl9fWZ1bmN0aW9uIHUodCl7dmFyIGUsbixyLG8sYSxzPTAsbD0wO2lmKHQubGVuZ3RoKXtmb3Iocj1vPWE9MDthPDQ7KythKShlPXRbYV0pJiYobj1NYXRoLmFicyhlLnZhbHVlKSkmJihzKz1lLnZhbHVlLGwrPW4scis9biplLngsbys9biplLnkpO3QueD1yL2wsdC55PW8vbH1lbHNleyhlPXQpLng9ZS5kYXRhLngsZS55PWUuZGF0YS55O2Rve3MrPWlbZS5kYXRhLmluZGV4XX13aGlsZShlPWUubmV4dCl9dC52YWx1ZT1zfWZ1bmN0aW9uIGgodCxyLGwsYyl7aWYoIXQudmFsdWUpcmV0dXJuITA7dmFyIHU9dC54LWUueCxoPXQueS1lLnksZD1jLXIscD11KnUraCpoO2lmKGQqZC9zPHApcmV0dXJuIHA8YSYmKDA9PT11JiYocCs9KHU9blcoKSkqdSksMD09PWgmJihwKz0oaD1uVygpKSpoKSxwPG8mJihwPU1hdGguc3FydChvKnApKSxlLnZ4Kz11KnQudmFsdWUqbi9wLGUudnkrPWgqdC52YWx1ZSpuL3ApLCEwO2lmKCEodC5sZW5ndGh8fHA+PWEpKXsodC5kYXRhIT09ZXx8dC5uZXh0KSYmKDA9PT11JiYocCs9KHU9blcoKSkqdSksMD09PWgmJihwKz0oaD1uVygpKSpoKSxwPG8mJihwPU1hdGguc3FydChvKnApKSk7ZG97dC5kYXRhIT09ZSYmKGUudngrPXUqKGQ9aVt0LmRhdGEuaW5kZXhdKm4vcCksZS52eSs9aCpkKX13aGlsZSh0PXQubmV4dCl9fXJldHVybiBsLmluaXRpYWxpemU9ZnVuY3Rpb24oZSl7dD1lLGMoKX0sbC5zdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmVXKCt0KSxjKCksbCk6cn0sbC5kaXN0YW5jZU1pbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10KnQsbCk6TWF0aC5zcXJ0KG8pfSxsLmRpc3RhbmNlTWF4PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXQqdCxsKTpNYXRoLnNxcnQoYSl9LGwudGhldGE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9dCp0LGwpOk1hdGguc3FydChzKX0sbH0sZm9yY2VSYWRpYWw6ZnVuY3Rpb24gSmR0KHQsZSxuKXt2YXIgaSxyLG8sYT1lVyguMSk7ZnVuY3Rpb24gcyh0KXtmb3IodmFyIGE9MCxzPWkubGVuZ3RoO2E8czsrK2Epe3ZhciBsPWlbYV0sYz1sLngtZXx8MWUtNix1PWwueS1ufHwxZS02LGg9TWF0aC5zcXJ0KGMqYyt1KnUpLGQ9KG9bYV0taCkqclthXSp0L2g7bC52eCs9YypkLGwudnkrPXUqZH19ZnVuY3Rpb24gbCgpe2lmKGkpe3ZhciBlLG49aS5sZW5ndGg7Zm9yKHI9bmV3IEFycmF5KG4pLG89bmV3IEFycmF5KG4pLGU9MDtlPG47KytlKW9bZV09K3QoaVtlXSxlLGkpLHJbZV09aXNOYU4ob1tlXSk/MDorYShpW2VdLGUsaSl9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1lVygrdCkpLG51bGw9PWUmJihlPTApLG51bGw9PW4mJihuPTApLHMuaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtpPXQsbCgpfSxzLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZVcoK3QpLGwoKSxzKTphfSxzLnJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOmVXKCtlKSxsKCkscyk6dH0scy54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0LHMpOmV9LHMueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rdCxzKTpufSxzfSxmb3JjZVNpbXVsYXRpb246ZnVuY3Rpb24gUWR0KHQpe3ZhciBlLG49MSxpPS4wMDEscj0xLU1hdGgucG93KGksMS8zMDApLG89MCxhPS42LHM9a1coKSxsPVFXKHUpLGM9UlcoInRpY2siLCJlbmQiKTtmdW5jdGlvbiB1KCl7aCgpLGMuY2FsbCgidGljayIsZSksbjxpJiYobC5zdG9wKCksYy5jYWxsKCJlbmQiLGUpKX1mdW5jdGlvbiBoKCl7dmFyIGUsaSxsPXQubGVuZ3RoO2ZvcihuKz0oby1uKSpyLHMuZWFjaCgoZnVuY3Rpb24odCl7dChuKX0pKSxlPTA7ZTxsOysrZSludWxsPT0oaT10W2VdKS5meD9pLngrPWkudngqPWE6KGkueD1pLmZ4LGkudng9MCksbnVsbD09aS5meT9pLnkrPWkudnkqPWE6KGkueT1pLmZ5LGkudnk9MCl9ZnVuY3Rpb24gZCgpe2Zvcih2YXIgZSxuPTAsaT10Lmxlbmd0aDtuPGk7KytuKXtpZigoZT10W25dKS5pbmRleD1uLGlzTmFOKGUueCl8fGlzTmFOKGUueSkpe3ZhciByPTEwKk1hdGguc3FydChuKSxvPW4qYXE7ZS54PXIqTWF0aC5jb3MobyksZS55PXIqTWF0aC5zaW4obyl9KGlzTmFOKGUudngpfHxpc05hTihlLnZ5KSkmJihlLnZ4PWUudnk9MCl9fWZ1bmN0aW9uIHAoZSl7cmV0dXJuIGUuaW5pdGlhbGl6ZSYmZS5pbml0aWFsaXplKHQpLGV9cmV0dXJuIG51bGw9PXQmJih0PVtdKSxkKCksZT17dGljazpoLHJlc3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gbC5yZXN0YXJ0KHUpLGV9LHN0b3A6ZnVuY3Rpb24oKXtyZXR1cm4gbC5zdG9wKCksZX0sbm9kZXM6ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9bixkKCkscy5lYWNoKHApLGUpOnR9LGFscGhhOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSt0LGUpOm59LGFscGhhTWluOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSt0LGUpOml9LGFscGhhRGVjYXk6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K3QsZSk6K3J9LGFscGhhVGFyZ2V0OmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSt0LGUpOm99LHZlbG9jaXR5RGVjYXk6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9MS10LGUpOjEtYX0sZm9yY2U6ZnVuY3Rpb24odCxuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xPyhudWxsPT1uP3MucmVtb3ZlKHQpOnMuc2V0KHQscChuKSksZSk6cy5nZXQodCl9LGZpbmQ6ZnVuY3Rpb24oZSxuLGkpe3ZhciByLG8sYSxzLGwsYz0wLHU9dC5sZW5ndGg7Zm9yKG51bGw9PWk/aT0xLzA6aSo9aSxjPTA7Yzx1OysrYykoYT0ocj1lLShzPXRbY10pLngpKnIrKG89bi1zLnkpKm8pPGkmJihsPXMsaT1hKTtyZXR1cm4gbH0sb246ZnVuY3Rpb24odCxuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xPyhjLm9uKHQsbiksZSk6Yy5vbih0KX19fSxmb3JjZVg6ZnVuY3Rpb24gdHB0KHQpe3ZhciBlLG4saSxyPWVXKC4xKTtmdW5jdGlvbiBvKHQpe2Zvcih2YXIgcixvPTAsYT1lLmxlbmd0aDtvPGE7KytvKShyPWVbb10pLnZ4Kz0oaVtvXS1yLngpKm5bb10qdH1mdW5jdGlvbiBhKCl7aWYoZSl7dmFyIG8sYT1lLmxlbmd0aDtmb3Iobj1uZXcgQXJyYXkoYSksaT1uZXcgQXJyYXkoYSksbz0wO288YTsrK28pbltvXT1pc05hTihpW29dPSt0KGVbb10sbyxlKSk/MDorcihlW29dLG8sZSl9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1lVyhudWxsPT10PzA6K3QpKSxvLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7ZT10LGEoKX0sby5zdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmVXKCt0KSxhKCksbyk6cn0sby54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6ZVcoK2UpLGEoKSxvKTp0fSxvfSxmb3JjZVk6ZnVuY3Rpb24gZXB0KHQpe3ZhciBlLG4saSxyPWVXKC4xKTtmdW5jdGlvbiBvKHQpe2Zvcih2YXIgcixvPTAsYT1lLmxlbmd0aDtvPGE7KytvKShyPWVbb10pLnZ5Kz0oaVtvXS1yLnkpKm5bb10qdH1mdW5jdGlvbiBhKCl7aWYoZSl7dmFyIG8sYT1lLmxlbmd0aDtmb3Iobj1uZXcgQXJyYXkoYSksaT1uZXcgQXJyYXkoYSksbz0wO288YTsrK28pbltvXT1pc05hTihpW29dPSt0KGVbb10sbyxlKSk/MDorcihlW29dLG8sZSl9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1lVyhudWxsPT10PzA6K3QpKSxvLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7ZT10LGEoKX0sby5zdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmVXKCt0KSxhKCksbyk6cn0sby55PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6ZVcoK2UpLGEoKSxvKTp0fSxvfSxmb3JtYXREZWZhdWx0TG9jYWxlOndxLGdldCBmb3JtYXQoKXtyZXR1cm4geXF9LGdldCBmb3JtYXRQcmVmaXgoKXtyZXR1cm4gdnF9LGZvcm1hdExvY2FsZTp4cSxmb3JtYXRTcGVjaWZpZXI6ZnEscHJlY2lzaW9uRml4ZWQ6ZnVuY3Rpb24gbnB0KHQpe3JldHVybiBNYXRoLm1heCgwLC1scShNYXRoLmFicyh0KSkpfSxwcmVjaXNpb25QcmVmaXg6ZnVuY3Rpb24gaXB0KHQsZSl7cmV0dXJuIE1hdGgubWF4KDAsMypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IobHEoZSkvMykpKS1scShNYXRoLmFicyh0KSkpfSxwcmVjaXNpb25Sb3VuZDpmdW5jdGlvbiBycHQodCxlKXtyZXR1cm4gdD1NYXRoLmFicyh0KSxlPU1hdGguYWJzKGUpLXQsTWF0aC5tYXgoMCxscShlKS1scSh0KSkrMX0sZ2VvQXJlYTpmdW5jdGlvbiBvcHQodCl7cmV0dXJuIGxZLnJlc2V0KCksZVkodCxjWSksMipsWX0sZ2VvQm91bmRzOmZ1bmN0aW9uIGFwdCh0KXt2YXIgZSxuLGkscixvLGEscztpZihNWT1TWT0tKHhZPXdZPTEvMCksa1k9W10sZVkodCxYWSksbj1rWS5sZW5ndGgpe2ZvcihrWS5zb3J0KGlYKSxlPTEsbz1baT1rWVswXV07ZTxuOysrZSlyWChpLChyPWtZW2VdKVswXSl8fHJYKGksclsxXSk/KG5YKGlbMF0sclsxXSk+blgoaVswXSxpWzFdKSYmKGlbMV09clsxXSksblgoclswXSxpWzFdKT5uWChpWzBdLGlbMV0pJiYoaVswXT1yWzBdKSk6by5wdXNoKGk9cik7Zm9yKGE9LTEvMCxlPTAsaT1vW249by5sZW5ndGgtMV07ZTw9bjtpPXIsKytlKShzPW5YKGlbMV0sKHI9b1tlXSlbMF0pKT5hJiYoYT1zLHhZPXJbMF0sU1k9aVsxXSl9cmV0dXJuIGtZPUxZPW51bGwseFk9PT0xLzB8fHdZPT09MS8wP1tbTmFOLE5hTl0sW05hTixOYU5dXTpbW3hZLHdZXSxbU1ksTVldXX0sZ2VvQ2VudHJvaWQ6ZnVuY3Rpb24gc3B0KHQpe1BZPU5ZPUlZPU9ZPVJZPXpZPURZPUJZPUhZPUZZPVZZPTAsZVkodCxvWCk7dmFyIGU9SFksbj1GWSxpPVZZLHI9ZSplK24qbitpKmk7cmV0dXJuIHI8MWUtMTImJihlPXpZLG49RFksaT1CWSxOWTxDcSYmKGU9SVksbj1PWSxpPVJZKSwocj1lKmUrbipuK2kqaSk8MWUtMTIpP1tOYU4sTmFOXTpbenEobixlKSpOcSxZcShpL0dxKHIpKSpOcV19LGdlb0NpcmNsZTpmdW5jdGlvbiBscHQoKXt2YXIgdCxlLG49Z1goWzAsMF0pLGk9Z1goOTApLHI9Z1goNiksbz17cG9pbnQ6ZnVuY3Rpb24gYShuLGkpe3QucHVzaChuPWUobixpKSksblswXSo9TnEsblsxXSo9TnF9fTtmdW5jdGlvbiBzKCl7dmFyIGE9bi5hcHBseSh0aGlzLGFyZ3VtZW50cykscz1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKSpJcSxsPXIuYXBwbHkodGhpcyxhcmd1bWVudHMpKklxO3JldHVybiB0PVtdLGU9dlgoLWFbMF0qSXEsLWFbMV0qSXEsMCkuaW52ZXJ0LE1YKG8scyxsLDEpLGE9e3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOlt0XX0sdD1lPW51bGwsYX1yZXR1cm4gcy5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpnWChbK3RbMF0sK3RbMV1dKSxzKTpufSxzLnJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmdYKCt0KSxzKTppfSxzLnByZWNpc2lvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmdYKCt0KSxzKTpyfSxzfSxnZW9DbGlwQW50aW1lcmlkaWFuOkZYLGdlb0NsaXBDaXJjbGU6algsZ2VvQ2xpcEV4dGVudDpmdW5jdGlvbiBjcHQoKXt2YXIgdCxlLG4saT0wLHI9MCxvPTk2MCxhPTUwMDtyZXR1cm4gbj17c3RyZWFtOmZ1bmN0aW9uKG4pe3JldHVybiB0JiZlPT09bj90OnQ9cVgoaSxyLG8sYSkoZT1uKX0sZXh0ZW50OmZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPStzWzBdWzBdLHI9K3NbMF1bMV0sbz0rc1sxXVswXSxhPStzWzFdWzFdLHQ9ZT1udWxsLG4pOltbaSxyXSxbbyxhXV19fX0sZ2VvQ2xpcFJlY3RhbmdsZTpxWCxnZW9Db250YWluczpmdW5jdGlvbiB1cHQodCxlKXtyZXR1cm4odCYmYSQuaGFzT3duUHJvcGVydHkodC50eXBlKT9hJFt0LnR5cGVdOmwkKSh0LGUpfSxnZW9EaXN0YW5jZTpvJCxnZW9HcmF0aWN1bGU6ZyQsZ2VvR3JhdGljdWxlMTA6ZnVuY3Rpb24gaHB0KCl7cmV0dXJuIGckKCkoKX0sZ2VvSW50ZXJwb2xhdGU6ZnVuY3Rpb24gZHB0KHQsZSl7dmFyIG49dFswXSpJcSxpPXRbMV0qSXEscj1lWzBdKklxLG89ZVsxXSpJcSxhPURxKGkpLHM9VXEoaSksbD1EcShvKSxjPVVxKG8pLHU9YSpEcShuKSxoPWEqVXEobiksZD1sKkRxKHIpLHA9bCpVcShyKSxmPTIqWXEoR3EoWHEoby1pKSthKmwqWHEoci1uKSkpLG09VXEoZiksZz1mP2Z1bmN0aW9uKHQpe3ZhciBlPVVxKHQqPWYpL20sbj1VcShmLXQpL20saT1uKnUrZSpkLHI9bipoK2UqcCxvPW4qcytlKmM7cmV0dXJuW3pxKHIsaSkqTnEsenEobyxHcShpKmkrcipyKSkqTnFdfTpmdW5jdGlvbigpe3JldHVybltuKk5xLGkqTnFdfTtyZXR1cm4gZy5kaXN0YW5jZT1mLGd9LGdlb0xlbmd0aDpuJCxnZW9QYXRoOmZ1bmN0aW9uIHBwdCh0LGUpe3ZhciBuLGkscj00LjU7ZnVuY3Rpb24gbyh0KXtyZXR1cm4gdCYmKCJmdW5jdGlvbiI9PXR5cGVvZiByJiZpLnBvaW50UmFkaXVzKCtyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksZVkodCxuKGkpKSksaS5yZXN1bHQoKX1yZXR1cm4gby5hcmVhPWZ1bmN0aW9uKHQpe3JldHVybiBlWSh0LG4oTSQpKSxNJC5yZXN1bHQoKX0sby5tZWFzdXJlPWZ1bmN0aW9uKHQpe3JldHVybiBlWSh0LG4oaEspKSxoSy5yZXN1bHQoKX0sby5ib3VuZHM9ZnVuY3Rpb24odCl7cmV0dXJuIGVZKHQsbihEJCkpLEQkLnJlc3VsdCgpfSxvLmNlbnRyb2lkPWZ1bmN0aW9uKHQpe3JldHVybiBlWSh0LG4oWCQpKSxYJC5yZXN1bHQoKX0sby5wcm9qZWN0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW51bGw9PWU/KHQ9bnVsbCxfJCk6KHQ9ZSkuc3RyZWFtLG8pOnR9LG8uY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1udWxsPT10PyhlPW51bGwsbmV3IGZLKTpuZXcgcksoZT10KSwiZnVuY3Rpb24iIT10eXBlb2YgciYmaS5wb2ludFJhZGl1cyhyKSxvKTplfSxvLnBvaW50UmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6KGkucG9pbnRSYWRpdXMoK3QpLCt0KSxvKTpyfSxvLnByb2plY3Rpb24odCkuY29udGV4dChlKX0sZ2VvQWxiZXJzOlBLLGdlb0FsYmVyc1VzYTpmdW5jdGlvbiBmcHQoKXt2YXIgdCxlLG4saSxyLG8sYT1QSygpLHM9TEsoKS5yb3RhdGUoWzE1NCwwXSkuY2VudGVyKFstMiw1OC41XSkucGFyYWxsZWxzKFs1NSw2NV0pLGw9TEsoKS5yb3RhdGUoWzE1NywwXSkuY2VudGVyKFstMywxOS45XSkucGFyYWxsZWxzKFs4LDE4XSksYz17cG9pbnQ6ZnVuY3Rpb24odCxlKXtvPVt0LGVdfX07ZnVuY3Rpb24gdSh0KXt2YXIgZT10WzBdLGE9dFsxXTtyZXR1cm4gbz1udWxsLG4ucG9pbnQoZSxhKSxvfHwoaS5wb2ludChlLGEpLG8pfHwoci5wb2ludChlLGEpLG8pfWZ1bmN0aW9uIGgoKXtyZXR1cm4gdD1lPW51bGwsdX1yZXR1cm4gdS5pbnZlcnQ9ZnVuY3Rpb24odCl7dmFyIGU9YS5zY2FsZSgpLG49YS50cmFuc2xhdGUoKSxpPSh0WzBdLW5bMF0pL2Uscj0odFsxXS1uWzFdKS9lO3JldHVybihyPj0uMTImJnI8LjIzNCYmaT49LS40MjUmJmk8LS4yMTQ/czpyPj0uMTY2JiZyPC4yMzQmJmk+PS0uMjE0JiZpPC0uMTE1P2w6YSkuaW52ZXJ0KHQpfSx1LnN0cmVhbT1mdW5jdGlvbihuKXtyZXR1cm4gdCYmZT09PW4/dDp0PShmdW5jdGlvbiBpKHQpe3ZhciBlPXQubGVuZ3RoO3JldHVybntwb2ludDpmdW5jdGlvbihuLGkpe2Zvcih2YXIgcj0tMTsrK3I8ZTspdFtyXS5wb2ludChuLGkpfSxzcGhlcmU6ZnVuY3Rpb24oKXtmb3IodmFyIG49LTE7KytuPGU7KXRbbl0uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe2Zvcih2YXIgbj0tMTsrK248ZTspdFtuXS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe2Zvcih2YXIgbj0tMTsrK248ZTspdFtuXS5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2Zvcih2YXIgbj0tMTsrK248ZTspdFtuXS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe2Zvcih2YXIgbj0tMTsrK248ZTspdFtuXS5wb2x5Z29uRW5kKCl9fX0pKFthLnN0cmVhbShlPW4pLHMuc3RyZWFtKG4pLGwuc3RyZWFtKG4pXSl9LHUucHJlY2lzaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhLnByZWNpc2lvbih0KSxzLnByZWNpc2lvbih0KSxsLnByZWNpc2lvbih0KSxoKCkpOmEucHJlY2lzaW9uKCl9LHUuc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGEuc2NhbGUodCkscy5zY2FsZSguMzUqdCksbC5zY2FsZSh0KSx1LnRyYW5zbGF0ZShhLnRyYW5zbGF0ZSgpKSk6YS5zY2FsZSgpfSx1LnRyYW5zbGF0ZT1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gYS50cmFuc2xhdGUoKTt2YXIgZT1hLnNjYWxlKCksbz0rdFswXSx1PSt0WzFdO3JldHVybiBuPWEudHJhbnNsYXRlKHQpLmNsaXBFeHRlbnQoW1tvLS40NTUqZSx1LS4yMzgqZV0sW28rLjQ1NSplLHUrLjIzOCplXV0pLnN0cmVhbShjKSxpPXMudHJhbnNsYXRlKFtvLS4zMDcqZSx1Ky4yMDEqZV0pLmNsaXBFeHRlbnQoW1tvLS40MjUqZStDcSx1Ky4xMiplK0NxXSxbby0uMjE0KmUtQ3EsdSsuMjM0KmUtQ3FdXSkuc3RyZWFtKGMpLHI9bC50cmFuc2xhdGUoW28tLjIwNSplLHUrLjIxMiplXSkuY2xpcEV4dGVudChbW28tLjIxNCplK0NxLHUrLjE2NiplK0NxXSxbby0uMTE1KmUtQ3EsdSsuMjM0KmUtQ3FdXSkuc3RyZWFtKGMpLGgoKX0sdS5maXRFeHRlbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdksodSx0LGUpfSx1LmZpdFNpemU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYksodSx0LGUpfSx1LmZpdFdpZHRoPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHhLKHUsdCxlKX0sdS5maXRIZWlnaHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gd0sodSx0LGUpfSx1LnNjYWxlKDEwNzApfSxnZW9BemltdXRoYWxFcXVhbEFyZWE6ZnVuY3Rpb24gbXB0KCl7cmV0dXJuIFRLKE9LKS5zY2FsZSgxMjQuNzUpLmNsaXBBbmdsZSgxNzkuOTk5KX0sZ2VvQXppbXV0aGFsRXF1YWxBcmVhUmF3Ok9LLGdlb0F6aW11dGhhbEVxdWlkaXN0YW50OmZ1bmN0aW9uIGdwdCgpe3JldHVybiBUSyhSSykuc2NhbGUoNzkuNDE4OCkuY2xpcEFuZ2xlKDE3OS45OTkpfSxnZW9BemltdXRoYWxFcXVpZGlzdGFudFJhdzpSSyxnZW9Db25pY0NvbmZvcm1hbDpmdW5jdGlvbiBfcHQoKXtyZXR1cm4gQUsoSEspLnNjYWxlKDEwOS41KS5wYXJhbGxlbHMoWzMwLDMwXSl9LGdlb0NvbmljQ29uZm9ybWFsUmF3OkhLLGdlb0NvbmljRXF1YWxBcmVhOkxLLGdlb0NvbmljRXF1YWxBcmVhUmF3OmtLLGdlb0NvbmljRXF1aWRpc3RhbnQ6ZnVuY3Rpb24geXB0KCl7cmV0dXJuIEFLKFZLKS5zY2FsZSgxMzEuMTU0KS5jZW50ZXIoWzAsMTMuOTM4OV0pfSxnZW9Db25pY0VxdWlkaXN0YW50UmF3OlZLLGdlb0VxdWlyZWN0YW5ndWxhcjpmdW5jdGlvbiB2cHQoKXtyZXR1cm4gVEsoRkspLnNjYWxlKDE1Mi42Myl9LGdlb0VxdWlyZWN0YW5ndWxhclJhdzpGSyxnZW9Hbm9tb25pYzpmdW5jdGlvbiBicHQoKXtyZXR1cm4gVEsoVUspLnNjYWxlKDE0NC4wNDkpLmNsaXBBbmdsZSg2MCl9LGdlb0dub21vbmljUmF3OlVLLGdlb0lkZW50aXR5OmZ1bmN0aW9uIHhwdCgpe3ZhciB0LGUsbixpLHIsbyxhPTEscz0wLGw9MCxjPTEsdT0xLGg9XyQsZD1udWxsLHA9XyQ7ZnVuY3Rpb24gZigpe3JldHVybiBpPXI9bnVsbCxvfXJldHVybiBvPXtzdHJlYW06ZnVuY3Rpb24odCl7cmV0dXJuIGkmJnI9PT10P2k6aT1oKHAocj10KSl9LHBvc3RjbGlwOmZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPWksZD10PWU9bj1udWxsLGYoKSk6cH0sY2xpcEV4dGVudDpmdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD1udWxsPT1pPyhkPXQ9ZT1uPW51bGwsXyQpOnFYKGQ9K2lbMF1bMF0sdD0raVswXVsxXSxlPStpWzFdWzBdLG49K2lbMV1bMV0pLGYoKSk6bnVsbD09ZD9udWxsOltbZCx0XSxbZSxuXV19LHNjYWxlOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPWpLKChhPSt0KSpjLGEqdSxzLGwpLGYoKSk6YX0sdHJhbnNsYXRlOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPWpLKGEqYyxhKnUscz0rdFswXSxsPSt0WzFdKSxmKCkpOltzLGxdfSxyZWZsZWN0WDpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD1qSyhhKihjPXQ/LTE6MSksYSp1LHMsbCksZigpKTpjPDB9LHJlZmxlY3RZOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPWpLKGEqYyxhKih1PXQ/LTE6MSkscyxsKSxmKCkpOnU8MH0sZml0RXh0ZW50OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZLKG8sdCxlKX0sZml0U2l6ZTpmdW5jdGlvbih0LGUpe3JldHVybiBiSyhvLHQsZSl9LGZpdFdpZHRoOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHhLKG8sdCxlKX0sZml0SGVpZ2h0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHdLKG8sdCxlKX19fSxnZW9Qcm9qZWN0aW9uOlRLLGdlb1Byb2plY3Rpb25NdXRhdG9yOkNLLGdlb01lcmNhdG9yOmZ1bmN0aW9uIHdwdCgpe3JldHVybiBESyh6Sykuc2NhbGUoOTYxL1BxKX0sZ2VvTWVyY2F0b3JSYXc6ekssZ2VvTmF0dXJhbEVhcnRoMTpmdW5jdGlvbiBTcHQoKXtyZXR1cm4gVEsoR0spLnNjYWxlKDE3NS4yOTUpfSxnZW9OYXR1cmFsRWFydGgxUmF3OkdLLGdlb09ydGhvZ3JhcGhpYzpmdW5jdGlvbiBNcHQoKXtyZXR1cm4gVEsoV0spLnNjYWxlKDI0OS41KS5jbGlwQW5nbGUoOTAuMDAwMDAxKX0sZ2VvT3J0aG9ncmFwaGljUmF3OldLLGdlb1N0ZXJlb2dyYXBoaWM6ZnVuY3Rpb24gRXB0KCl7cmV0dXJuIFRLKHFLKS5zY2FsZSgyNTApLmNsaXBBbmdsZSgxNDIpfSxnZW9TdGVyZW9ncmFwaGljUmF3OnFLLGdlb1RyYW5zdmVyc2VNZXJjYXRvcjpmdW5jdGlvbiBUcHQoKXt2YXIgdD1ESyhZSyksZT10LmNlbnRlcixuPXQucm90YXRlO3JldHVybiB0LmNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9lKFstdFsxXSx0WzBdXSk6Wyh0PWUoKSlbMV0sLXRbMF1dfSx0LnJvdGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uKFt0WzBdLHRbMV0sdC5sZW5ndGg+Mj90WzJdKzkwOjkwXSk6Wyh0PW4oKSlbMF0sdFsxXSx0WzJdLTkwXX0sbihbMCwwLDkwXSkuc2NhbGUoMTU5LjE1NSl9LGdlb1RyYW5zdmVyc2VNZXJjYXRvclJhdzpZSyxnZW9Sb3RhdGlvbjpTWCxnZW9TdHJlYW06ZVksZ2VvVHJhbnNmb3JtOmZ1bmN0aW9uIENwdCh0KXtyZXR1cm57c3RyZWFtOmdLKHQpfX0sY2x1c3RlcjpmdW5jdGlvbiBBcHQoKXt2YXIgdD1YSyxlPTEsbj0xLGk9ITE7ZnVuY3Rpb24gcihyKXt2YXIgbyxhPTA7ci5lYWNoQWZ0ZXIoKGZ1bmN0aW9uKGUpe3ZhciBuPWUuY2hpbGRyZW47bj8oZS54PShmdW5jdGlvbiBpKHQpe3JldHVybiB0LnJlZHVjZSgkSywwKS90Lmxlbmd0aH0pKG4pLGUueT0oZnVuY3Rpb24gcih0KXtyZXR1cm4gMSt0LnJlZHVjZShLSywwKX0pKG4pKTooZS54PW8/YSs9dChlLG8pOjAsZS55PTAsbz1lKX0pKTt2YXIgcz0oZnVuY3Rpb24gbCh0KXtmb3IodmFyIGU7ZT10LmNoaWxkcmVuOyl0PWVbMF07cmV0dXJuIHR9KShyKSxjPShmdW5jdGlvbiB1KHQpe2Zvcih2YXIgZTtlPXQuY2hpbGRyZW47KXQ9ZVtlLmxlbmd0aC0xXTtyZXR1cm4gdH0pKHIpLGg9cy54LXQocyxjKS8yLGQ9Yy54K3QoYyxzKS8yO3JldHVybiByLmVhY2hBZnRlcihpP2Z1bmN0aW9uKHQpe3QueD0odC54LXIueCkqZSx0Lnk9KHIueS10LnkpKm59OmZ1bmN0aW9uKHQpe3QueD0odC54LWgpLyhkLWgpKmUsdC55PSgxLShyLnk/dC55L3IueToxKSkqbn0pfXJldHVybiByLnNlcGFyYXRpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxyKTp0fSxyLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ITEsZT0rdFswXSxuPSt0WzFdLHIpOmk/bnVsbDpbZSxuXX0sci5ub2RlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0hMCxlPSt0WzBdLG49K3RbMV0scik6aT9bZSxuXTpudWxsfSxyfSxoaWVyYXJjaHk6SksscGFjazpmdW5jdGlvbiBrcHQoKXt2YXIgdD1udWxsLGU9MSxuPTEsaT1QWjtmdW5jdGlvbiByKHIpe3JldHVybiByLng9ZS8yLHIueT1uLzIsdD9yLmVhY2hCZWZvcmUoT1oodCkpLmVhY2hBZnRlcihSWihpLC41KSkuZWFjaEJlZm9yZSh6WigxKSk6ci5lYWNoQmVmb3JlKE9aKElaKSkuZWFjaEFmdGVyKFJaKFBaLDEpKS5lYWNoQWZ0ZXIoUlooaSxyLnIvTWF0aC5taW4oZSxuKSkpLmVhY2hCZWZvcmUoelooTWF0aC5taW4oZSxuKS8oMipyLnIpKSkscn1yZXR1cm4gci5yYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9a1ooZSkscik6dH0sci5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0WzBdLG49K3RbMV0scik6W2Usbl19LHIucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90Ok5aKCt0KSxyKTppfSxyfSxwYWNrU2libGluZ3M6ZnVuY3Rpb24gTHB0KHQpe3JldHVybiBBWih0KSx0fSxwYWNrRW5jbG9zZTpnWixwYXJ0aXRpb246ZnVuY3Rpb24gUHB0KCl7dmFyIHQ9MSxlPTEsbj0wLGk9ITE7ZnVuY3Rpb24gcihyKXt2YXIgbz1yLmhlaWdodCsxO3JldHVybiByLngwPXIueTA9bixyLngxPXQsci55MT1lL28sci5lYWNoQmVmb3JlKChmdW5jdGlvbiBhKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKGkpe2kuY2hpbGRyZW4mJkJaKGksaS54MCx0KihpLmRlcHRoKzEpL2UsaS54MSx0KihpLmRlcHRoKzIpL2UpO3ZhciByPWkueDAsbz1pLnkwLGE9aS54MS1uLHM9aS55MS1uO2E8ciYmKHI9YT0ocithKS8yKSxzPG8mJihvPXM9KG8rcykvMiksaS54MD1yLGkueTA9byxpLngxPWEsaS55MT1zfX0pKGUsbykpLGkmJnIuZWFjaEJlZm9yZShEWikscn1yZXR1cm4gci5yb3VuZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0hIXQscik6aX0sci5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStuWzBdLGU9K25bMV0scik6W3QsZV19LHIucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rdCxyKTpufSxyfSxzdHJhdGlmeTpmdW5jdGlvbiBOcHQoKXt2YXIgdD1WWixlPVVaO2Z1bmN0aW9uIG4obil7dmFyIGkscixvLGEscyxsLGMsdT1uLmxlbmd0aCxoPW5ldyBBcnJheSh1KSxkPXt9O2ZvcihyPTA7cjx1OysrcilzPWhbcl09bmV3IG5aKGk9bltyXSksbnVsbCE9KGw9dChpLHIsbikpJiYobCs9IiIpJiYoZFtjPSIkIisocy5pZD1sKV09YyBpbiBkP0ZaOnMpO2ZvcihyPTA7cjx1OysrcilpZihzPWhbcl0sbnVsbCE9KGw9ZShuW3JdLHIsbikpJiYobCs9IiIpKXtpZighKGE9ZFsiJCIrbF0pKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIitsKTtpZihhPT09RlopdGhyb3cgbmV3IEVycm9yKCJhbWJpZ3VvdXM6ICIrbCk7YS5jaGlsZHJlbj9hLmNoaWxkcmVuLnB1c2gocyk6YS5jaGlsZHJlbj1bc10scy5wYXJlbnQ9YX1lbHNle2lmKG8pdGhyb3cgbmV3IEVycm9yKCJtdWx0aXBsZSByb290cyIpO289c31pZighbyl0aHJvdyBuZXcgRXJyb3IoIm5vIHJvb3QiKTtpZihvLnBhcmVudD1IWixvLmVhY2hCZWZvcmUoKGZ1bmN0aW9uKHQpe3QuZGVwdGg9dC5wYXJlbnQuZGVwdGgrMSwtLXV9KSkuZWFjaEJlZm9yZShlWiksby5wYXJlbnQ9bnVsbCx1PjApdGhyb3cgbmV3IEVycm9yKCJjeWNsZSIpO3JldHVybiBvfXJldHVybiBuLmlkPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PUxaKGUpLG4pOnR9LG4ucGFyZW50SWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9TFoodCksbik6ZX0sbn0sdHJlZTpmdW5jdGlvbiBJcHQoKXt2YXIgdD1qWixlPTEsbj0xLGk9bnVsbDtmdW5jdGlvbiByKHIpe3ZhciBsPShmdW5jdGlvbiBjKHQpe2Zvcih2YXIgZSxuLGkscixvLGE9bmV3IFhaKHQsMCkscz1bYV07ZT1zLnBvcCgpOylpZihpPWUuXy5jaGlsZHJlbilmb3IoZS5jaGlsZHJlbj1uZXcgQXJyYXkobz1pLmxlbmd0aCkscj1vLTE7cj49MDstLXIpcy5wdXNoKG49ZS5jaGlsZHJlbltyXT1uZXcgWFooaVtyXSxyKSksbi5wYXJlbnQ9ZTtyZXR1cm4oYS5wYXJlbnQ9bmV3IFhaKG51bGwsMCkpLmNoaWxkcmVuPVthXSxhfSkocik7aWYobC5lYWNoQWZ0ZXIobyksbC5wYXJlbnQubT0tbC56LGwuZWFjaEJlZm9yZShhKSxpKXIuZWFjaEJlZm9yZShzKTtlbHNle3ZhciB1PXIsaD1yLGQ9cjtyLmVhY2hCZWZvcmUoKGZ1bmN0aW9uKHQpe3QueDx1LngmJih1PXQpLHQueD5oLngmJihoPXQpLHQuZGVwdGg+ZC5kZXB0aCYmKGQ9dCl9KSk7dmFyIHA9dT09PWg/MTp0KHUsaCkvMixmPXAtdS54LG09ZS8oaC54K3ArZiksZz1uLyhkLmRlcHRofHwxKTtyLmVhY2hCZWZvcmUoKGZ1bmN0aW9uKHQpe3QueD0odC54K2YpKm0sdC55PXQuZGVwdGgqZ30pKX1yZXR1cm4gcn1mdW5jdGlvbiBvKGUpe3ZhciBuPWUuY2hpbGRyZW4saT1lLnBhcmVudC5jaGlsZHJlbixyPWUuaT9pW2UuaS0xXTpudWxsO2lmKG4peyEoZnVuY3Rpb24gbyh0KXtmb3IodmFyIGUsbj0wLGk9MCxyPXQuY2hpbGRyZW4sbz1yLmxlbmd0aDstLW8+PTA7KShlPXJbb10pLnorPW4sZS5tKz1uLG4rPWUucysoaSs9ZS5jKX0pKGUpO3ZhciBhPShuWzBdLnorbltuLmxlbmd0aC0xXS56KS8yO3I/KGUuej1yLnordChlLl8sci5fKSxlLm09ZS56LWEpOmUuej1hfWVsc2UgciYmKGUuej1yLnordChlLl8sci5fKSk7ZS5wYXJlbnQuQT0oZnVuY3Rpb24gcyhlLG4saSl7aWYobil7Zm9yKHZhciByLG89ZSxhPWUscz1uLGw9by5wYXJlbnQuY2hpbGRyZW5bMF0sYz1vLm0sdT1hLm0saD1zLm0sZD1sLm07cz1XWihzKSxvPUdaKG8pLHMmJm87KWw9R1oobCksKGE9V1ooYSkpLmE9ZSwocj1zLnoraC1vLnotYyt0KHMuXyxvLl8pKT4wJiYocVooWVoocyxlLGkpLGUsciksYys9cix1Kz1yKSxoKz1zLm0sYys9by5tLGQrPWwubSx1Kz1hLm07cyYmIVdaKGEpJiYoYS50PXMsYS5tKz1oLXUpLG8mJiFHWihsKSYmKGwudD1vLGwubSs9Yy1kLGk9ZSl9cmV0dXJuIGl9KShlLHIsZS5wYXJlbnQuQXx8aVswXSl9ZnVuY3Rpb24gYSh0KXt0Ll8ueD10LnordC5wYXJlbnQubSx0Lm0rPXQucGFyZW50Lm19ZnVuY3Rpb24gcyh0KXt0LngqPWUsdC55PXQuZGVwdGgqbn1yZXR1cm4gci5zZXBhcmF0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUscik6dH0sci5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSExLGU9K3RbMF0sbj0rdFsxXSxyKTppP251bGw6W2Usbl19LHIubm9kZVNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ITAsZT0rdFswXSxuPSt0WzFdLHIpOmk/W2Usbl06bnVsbH0scn0sdHJlZW1hcDpmdW5jdGlvbiBPcHQoKXt2YXIgdD1KWixlPSExLG49MSxpPTEscj1bMF0sbz1QWixhPVBaLHM9UFosbD1QWixjPVBaO2Z1bmN0aW9uIHUodCl7cmV0dXJuIHQueDA9dC55MD0wLHQueDE9bix0LnkxPWksdC5lYWNoQmVmb3JlKGgpLHI9WzBdLGUmJnQuZWFjaEJlZm9yZShEWiksdH1mdW5jdGlvbiBoKGUpe3ZhciBuPXJbZS5kZXB0aF0saT1lLngwK24sdT1lLnkwK24saD1lLngxLW4sZD1lLnkxLW47aDxpJiYoaT1oPShpK2gpLzIpLGQ8dSYmKHU9ZD0odStkKS8yKSxlLngwPWksZS55MD11LGUueDE9aCxlLnkxPWQsZS5jaGlsZHJlbiYmKG49cltlLmRlcHRoKzFdPW8oZSkvMixpKz1jKGUpLW4sdSs9YShlKS1uLChoLT1zKGUpLW4pPGkmJihpPWg9KGkraCkvMiksKGQtPWwoZSktbik8dSYmKHU9ZD0odStkKS8yKSx0KGUsaSx1LGgsZCkpfXJldHVybiB1LnJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSEhdCx1KTplfSx1LnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K3RbMF0saT0rdFsxXSx1KTpbbixpXX0sdS50aWxlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PUxaKGUpLHUpOnR9LHUucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD91LnBhZGRpbmdJbm5lcih0KS5wYWRkaW5nT3V0ZXIodCk6dS5wYWRkaW5nSW5uZXIoKX0sdS5wYWRkaW5nSW5uZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpOWigrdCksdSk6b30sdS5wYWRkaW5nT3V0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dS5wYWRkaW5nVG9wKHQpLnBhZGRpbmdSaWdodCh0KS5wYWRkaW5nQm90dG9tKHQpLnBhZGRpbmdMZWZ0KHQpOnUucGFkZGluZ1RvcCgpfSx1LnBhZGRpbmdUb3A9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpOWigrdCksdSk6YX0sdS5wYWRkaW5nUmlnaHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpOWigrdCksdSk6c30sdS5wYWRkaW5nQm90dG9tPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6TlooK3QpLHUpOmx9LHUucGFkZGluZ0xlZnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpOWigrdCksdSk6Y30sdX0sdHJlZW1hcEJpbmFyeTpmdW5jdGlvbiBScHQodCxlLG4saSxyKXt2YXIgbyxhLHM9dC5jaGlsZHJlbixsPXMubGVuZ3RoLGM9bmV3IEFycmF5KGwrMSk7Zm9yKGNbMF09YT1vPTA7bzxsOysrbyljW28rMV09YSs9c1tvXS52YWx1ZTshKGZ1bmN0aW9uIHQoZSxuLGkscixvLGEsbCl7aWYoZT49bi0xKXt2YXIgdT1zW2VdO3JldHVybiB1LngwPXIsdS55MD1vLHUueDE9YSx2b2lkKHUueTE9bCl9Zm9yKHZhciBoPWNbZV0sZD1pLzIraCxwPWUrMSxmPW4tMTtwPGY7KXt2YXIgbT1wK2Y+Pj4xO2NbbV08ZD9wPW0rMTpmPW19ZC1jW3AtMV08Y1twXS1kJiZlKzE8cCYmLS1wO3ZhciBnPWNbcF0taCxfPWktZztpZihhLXI+bC1vKXt2YXIgeT0ocipfK2EqZykvaTt0KGUscCxnLHIsbyx5LGwpLHQocCxuLF8seSxvLGEsbCl9ZWxzZXt2YXIgdj0obypfK2wqZykvaTt0KGUscCxnLHIsbyxhLHYpLHQocCxuLF8scix2LGEsbCl9fSkoMCxsLHQudmFsdWUsZSxuLGkscil9LHRyZWVtYXBEaWNlOkJaLHRyZWVtYXBTbGljZTokWix0cmVlbWFwU2xpY2VEaWNlOmZ1bmN0aW9uIHpwdCh0LGUsbixpLHIpeygxJnQuZGVwdGg/JFo6QlopKHQsZSxuLGkscil9LHRyZWVtYXBTcXVhcmlmeTpKWix0cmVlbWFwUmVzcXVhcmlmeTpRWixpbnRlcnBvbGF0ZTp4USxpbnRlcnBvbGF0ZUFycmF5OmZRLGludGVycG9sYXRlQmFzaXM6clEsaW50ZXJwb2xhdGVCYXNpc0Nsb3NlZDpvUSxpbnRlcnBvbGF0ZURhdGU6bVEsaW50ZXJwb2xhdGVOdW1iZXI6Z1EsaW50ZXJwb2xhdGVPYmplY3Q6X1EsaW50ZXJwb2xhdGVSb3VuZDpmdW5jdGlvbiBEcHQodCxlKXtyZXR1cm4gZS09dD0rdCxmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5yb3VuZCh0K2Uqbil9fSxpbnRlcnBvbGF0ZVN0cmluZzpiUSxpbnRlcnBvbGF0ZVRyYW5zZm9ybUNzczpMUSxpbnRlcnBvbGF0ZVRyYW5zZm9ybVN2ZzpOUSxpbnRlcnBvbGF0ZVpvb206ZnVuY3Rpb24gQnB0KHQsZSl7dmFyIG4saSxyPXRbMF0sbz10WzFdLGE9dFsyXSxzPWVbMl0sbD1lWzBdLXIsYz1lWzFdLW8sdT1sKmwrYypjO2lmKHU8MWUtMTIpaT1NYXRoLmxvZyhzL2EpL09RLG49ZnVuY3Rpb24odCl7cmV0dXJuW3IrdCpsLG8rdCpjLGEqTWF0aC5leHAoT1EqdCppKV19O2Vsc2V7dmFyIGg9TWF0aC5zcXJ0KHUpLGQ9KHMqcy1hKmErNCp1KS8oMiphKjIqaCkscD0ocypzLWEqYS00KnUpLygyKnMqMipoKSxmPU1hdGgubG9nKE1hdGguc3FydChkKmQrMSktZCksbT1NYXRoLmxvZyhNYXRoLnNxcnQocCpwKzEpLXApO2k9KG0tZikvT1Esbj1mdW5jdGlvbih0KXt2YXIgZT10Kmksbj1SUShmKSxzPWEvKDIqaCkqKG4qKGZ1bmN0aW9uIHUodCl7cmV0dXJuKCh0PU1hdGguZXhwKDIqdCkpLTEpLyh0KzEpfSkoT1EqZStmKS0oZnVuY3Rpb24gZCh0KXtyZXR1cm4oKHQ9TWF0aC5leHAodCkpLTEvdCkvMn0pKGYpKTtyZXR1cm5bcitzKmwsbytzKmMsYSpuL1JRKE9RKmUrZildfX1yZXR1cm4gbi5kdXJhdGlvbj0xZTMqaSxufSxpbnRlcnBvbGF0ZVJnYjp1USxpbnRlcnBvbGF0ZVJnYkJhc2lzOmRRLGludGVycG9sYXRlUmdiQmFzaXNDbG9zZWQ6cFEsaW50ZXJwb2xhdGVIc2w6RFEsaW50ZXJwb2xhdGVIc2xMb25nOkJRLGludGVycG9sYXRlTGFiOmZ1bmN0aW9uIEhwdCh0LGUpe3ZhciBuPWNRKCh0PVZKKHQpKS5sLChlPVZKKGUpKS5sKSxpPWNRKHQuYSxlLmEpLHI9Y1EodC5iLGUuYiksbz1jUSh0Lm9wYWNpdHksZS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQubD1uKGUpLHQuYT1pKGUpLHQuYj1yKGUpLHQub3BhY2l0eT1vKGUpLHQrIiJ9fSxpbnRlcnBvbGF0ZUhjbDpGUSxpbnRlcnBvbGF0ZUhjbExvbmc6VlEsaW50ZXJwb2xhdGVDdWJlaGVsaXg6alEsaW50ZXJwb2xhdGVDdWJlaGVsaXhMb25nOkdRLHF1YW50aXplOmZ1bmN0aW9uIEZwdCh0LGUpe2Zvcih2YXIgbj1uZXcgQXJyYXkoZSksaT0wO2k8ZTsrK2kpbltpXT10KGkvKGUtMSkpO3JldHVybiBufSxwYXRoOktRLHBvbHlnb25BcmVhOmZ1bmN0aW9uIFZwdCh0KXtmb3IodmFyIGUsbj0tMSxpPXQubGVuZ3RoLHI9dFtpLTFdLG89MDsrK248aTspbys9KGU9cilbMV0qKHI9dFtuXSlbMF0tZVswXSpyWzFdO3JldHVybiBvLzJ9LHBvbHlnb25DZW50cm9pZDpmdW5jdGlvbiBVcHQodCl7Zm9yKHZhciBlLG4saT0tMSxyPXQubGVuZ3RoLG89MCxhPTAscz10W3ItMV0sbD0wOysraTxyOylsKz1uPShlPXMpWzBdKihzPXRbaV0pWzFdLXNbMF0qZVsxXSxvKz0oZVswXStzWzBdKSpuLGErPShlWzFdK3NbMV0pKm47cmV0dXJuW28vKGwqPTMpLGEvbF19LHBvbHlnb25IdWxsOmZ1bmN0aW9uIGpwdCh0KXtpZigobj10Lmxlbmd0aCk8MylyZXR1cm4gbnVsbDt2YXIgZSxuLGk9bmV3IEFycmF5KG4pLHI9bmV3IEFycmF5KG4pO2ZvcihlPTA7ZTxuOysrZSlpW2VdPVsrdFtlXVswXSwrdFtlXVsxXSxlXTtmb3IoaS5zb3J0KEpRKSxlPTA7ZTxuOysrZSlyW2VdPVtpW2VdWzBdLC1pW2VdWzFdXTt2YXIgbz1RUShpKSxhPVFRKHIpLHM9YVswXT09PW9bMF0sbD1hW2EubGVuZ3RoLTFdPT09b1tvLmxlbmd0aC0xXSxjPVtdO2ZvcihlPW8ubGVuZ3RoLTE7ZT49MDstLWUpYy5wdXNoKHRbaVtvW2VdXVsyXV0pO2ZvcihlPStzO2U8YS5sZW5ndGgtbDsrK2UpYy5wdXNoKHRbaVthW2VdXVsyXV0pO3JldHVybiBjfSxwb2x5Z29uQ29udGFpbnM6ZnVuY3Rpb24gR3B0KHQsZSl7Zm9yKHZhciBuLGkscj10Lmxlbmd0aCxvPXRbci0xXSxhPWVbMF0scz1lWzFdLGw9b1swXSxjPW9bMV0sdT0hMSxoPTA7aDxyOysraCluPShvPXRbaF0pWzBdLChpPW9bMV0pPnMhPWM+cyYmYTwobC1uKSoocy1pKS8oYy1pKStuJiYodT0hdSksbD1uLGM9aTtyZXR1cm4gdX0scG9seWdvbkxlbmd0aDpmdW5jdGlvbiBXcHQodCl7Zm9yKHZhciBlLG4saT0tMSxyPXQubGVuZ3RoLG89dFtyLTFdLGE9b1swXSxzPW9bMV0sbD0wOysraTxyOyllPWEsbj1zLGUtPWE9KG89dFtpXSlbMF0sbi09cz1vWzFdLGwrPU1hdGguc3FydChlKmUrbipuKTtyZXR1cm4gbH0scXVhZHRyZWU6cjEscXVldWU6azEscmFuZG9tVW5pZm9ybTpQMSxyYW5kb21Ob3JtYWw6TjEscmFuZG9tTG9nTm9ybWFsOkkxLHJhbmRvbUJhdGVzOlIxLHJhbmRvbUlyd2luSGFsbDpPMSxyYW5kb21FeHBvbmVudGlhbDp6MSxyZXF1ZXN0OkQxLGh0bWw6SDEsanNvbjpGMSx0ZXh0OlYxLHhtbDpVMSxjc3Y6VzEsdHN2OnExLHNjYWxlQmFuZDpmMCxzY2FsZVBvaW50OmZ1bmN0aW9uIHFwdCgpe3JldHVybiBtMChmMCgpLnBhZGRpbmdJbm5lcigxKSl9LHNjYWxlSWRlbnRpdHk6ZnVuY3Rpb24gdCgpe3ZhciBlPVswLDFdO2Z1bmN0aW9uIG4odCl7cmV0dXJuK3R9cmV0dXJuIG4uaW52ZXJ0PW4sbi5kb21haW49bi5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT11MC5jYWxsKHQsVDIpLG4pOmUuc2xpY2UoKX0sbi5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHQoKS5kb21haW4oZSl9LCQyKG4pfSxzY2FsZUxpbmVhcjpmdW5jdGlvbiB0KCl7dmFyIGU9TjIoQTIsbTIpO3JldHVybiBlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gUDIoZSx0KCkpfSwkMihlKX0sc2NhbGVMb2c6ZnVuY3Rpb24gdCgpe3ZhciBlPU4yKFoyLEoyKS5kb21haW4oWzEsMTBdKSxuPWUuZG9tYWluLGk9MTAscj1lNSgxMCksbz10NSgxMCk7ZnVuY3Rpb24gYSgpe3JldHVybiByPWU1KGkpLG89dDUoaSksbigpWzBdPDAmJihyPW41KHIpLG89bjUobykpLGV9cmV0dXJuIGUuYmFzZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rdCxhKCkpOml9LGUuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuKHQpLGEoKSk6bigpfSxlLnRpY2tzPWZ1bmN0aW9uKHQpe3ZhciBlLGE9bigpLHM9YVswXSxsPWFbYS5sZW5ndGgtMV07KGU9bDxzKSYmKGQ9cyxzPWwsbD1kKTt2YXIgYyx1LGgsZD1yKHMpLHA9cihsKSxmPW51bGw9PXQ/MTA6K3QsbT1bXTtpZighKGklMSkmJnAtZDxmKXtpZihkPU1hdGgucm91bmQoZCktMSxwPU1hdGgucm91bmQocCkrMSxzPjApe2Zvcig7ZDxwOysrZClmb3IodT0xLGM9byhkKTt1PGk7Kyt1KWlmKCEoKGg9Yyp1KTxzKSl7aWYoaD5sKWJyZWFrO20ucHVzaChoKX19ZWxzZSBmb3IoO2Q8cDsrK2QpZm9yKHU9aS0xLGM9byhkKTt1Pj0xOy0tdSlpZighKChoPWMqdSk8cykpe2lmKGg+bClicmVhazttLnB1c2goaCl9fWVsc2UgbT10MChkLHAsTWF0aC5taW4ocC1kLGYpKS5tYXAobyk7cmV0dXJuIGU/bS5yZXZlcnNlKCk6bX0sZS50aWNrRm9ybWF0PWZ1bmN0aW9uKHQsbil7aWYobnVsbD09biYmKG49MTA9PT1pPyIuMGUiOiIsIiksImZ1bmN0aW9uIiE9dHlwZW9mIG4mJihuPVcyKG4pKSx0PT09MS8wKXJldHVybiBuO251bGw9PXQmJih0PTEwKTt2YXIgYT1NYXRoLm1heCgxLGkqdC9lLnRpY2tzKCkubGVuZ3RoKTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9dC9vKE1hdGgucm91bmQocih0KSkpO3JldHVybiBlKmk8aS0uNSYmKGUqPWkpLGU8PWE/bih0KToiIn19LGUubmljZT1mdW5jdGlvbigpe3JldHVybiBuKEsyKG4oKSx7Zmxvb3I6ZnVuY3Rpb24odCl7cmV0dXJuIG8oTWF0aC5mbG9vcihyKHQpKSl9LGNlaWw6ZnVuY3Rpb24odCl7cmV0dXJuIG8oTWF0aC5jZWlsKHIodCkpKX19KSl9LGUuY29weT1mdW5jdGlvbigpe3JldHVybiBQMihlLHQoKS5iYXNlKGkpKX0sZX0sc2NhbGVPcmRpbmFsOnAwLHNjYWxlSW1wbGljaXQ6ZDAsc2NhbGVQb3c6cjUsc2NhbGVTcXJ0OmZ1bmN0aW9uIFlwdCgpe3JldHVybiByNSgpLmV4cG9uZW50KC41KX0sc2NhbGVRdWFudGlsZTpmdW5jdGlvbiB0KCl7dmFyIGU9W10sbj1bXSxpPVtdO2Z1bmN0aW9uIHIoKXt2YXIgdD0wLHI9TWF0aC5tYXgoMSxuLmxlbmd0aCk7Zm9yKGk9bmV3IEFycmF5KHItMSk7Kyt0PHI7KWlbdC0xXT1pMChlLHQvcik7cmV0dXJuIG99ZnVuY3Rpb24gbyh0KXtpZighaXNOYU4odD0rdCkpcmV0dXJuIG5bJDEoaSx0KV19cmV0dXJuIG8uaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHQpe3ZhciByPW4uaW5kZXhPZih0KTtyZXR1cm4gcjwwP1tOYU4sTmFOXTpbcj4wP2lbci0xXTplWzBdLHI8aS5sZW5ndGg/aVtyXTplW2UubGVuZ3RoLTFdXX0sby5kb21haW49ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGUuc2xpY2UoKTtlPVtdO2Zvcih2YXIgbixpPTAsbz10Lmxlbmd0aDtpPG87KytpKW51bGw9PShuPXRbaV0pfHxpc05hTihuPStuKXx8ZS5wdXNoKG4pO3JldHVybiBlLnNvcnQoWTEpLHIoKX0sby5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1oMC5jYWxsKHQpLHIoKSk6bi5zbGljZSgpfSxvLnF1YW50aWxlcz1mdW5jdGlvbigpe3JldHVybiBpLnNsaWNlKCl9LG8uY29weT1mdW5jdGlvbigpe3JldHVybiB0KCkuZG9tYWluKGUpLnJhbmdlKG4pfSxvfSxzY2FsZVF1YW50aXplOmZ1bmN0aW9uIHQoKXt2YXIgZT0wLG49MSxpPTEscj1bLjVdLG89WzAsMV07ZnVuY3Rpb24gYSh0KXtpZih0PD10KXJldHVybiBvWyQxKHIsdCwwLGkpXX1mdW5jdGlvbiBzKCl7dmFyIHQ9LTE7Zm9yKHI9bmV3IEFycmF5KGkpOysrdDxpOylyW3RdPSgodCsxKSpuLSh0LWkpKmUpLyhpKzEpO3JldHVybiBhfXJldHVybiBhLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rdFswXSxuPSt0WzFdLHMoKSk6W2Usbl19LGEucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9KG89aDAuY2FsbCh0KSkubGVuZ3RoLTEscygpKTpvLnNsaWNlKCl9LGEuaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHQpe3ZhciBhPW8uaW5kZXhPZih0KTtyZXR1cm4gYTwwP1tOYU4sTmFOXTphPDE/W2UsclswXV06YT49aT9bcltpLTFdLG5dOltyW2EtMV0sclthXV19LGEuY29weT1mdW5jdGlvbigpe3JldHVybiB0KCkuZG9tYWluKFtlLG5dKS5yYW5nZShvKX0sJDIoYSl9LHNjYWxlVGhyZXNob2xkOmZ1bmN0aW9uIHQoKXt2YXIgZT1bLjVdLG49WzAsMV0saT0xO2Z1bmN0aW9uIHIodCl7aWYodDw9dClyZXR1cm4gblskMShlLHQsMCxpKV19cmV0dXJuIHIuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPWgwLmNhbGwodCksaT1NYXRoLm1pbihlLmxlbmd0aCxuLmxlbmd0aC0xKSxyKTplLnNsaWNlKCl9LHIucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49aDAuY2FsbCh0KSxpPU1hdGgubWluKGUubGVuZ3RoLG4ubGVuZ3RoLTEpLHIpOm4uc2xpY2UoKX0sci5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24odCl7dmFyIGk9bi5pbmRleE9mKHQpO3JldHVybltlW2ktMV0sZVtpXV19LHIuY29weT1mdW5jdGlvbigpe3JldHVybiB0KCkuZG9tYWluKGUpLnJhbmdlKG4pfSxyfSxzY2FsZVRpbWU6ZnVuY3Rpb24gWHB0KCl7cmV0dXJuIHM0KE01LFM1LGI1LHk1LF81LGc1LG01LGM1LEI1KS5kb21haW4oW25ldyBEYXRlKDJlMywwLDEpLG5ldyBEYXRlKDJlMywwLDIpXSl9LHNjYWxlVXRjOmZ1bmN0aW9uICRwdCgpe3JldHVybiBzNChJNSxONSxrNSxDNSxUNSxFNSxtNSxjNSxINSkuZG9tYWluKFtEYXRlLlVUQygyZTMsMCwxKSxEYXRlLlVUQygyZTMsMCwyKV0pfSxzY2hlbWVDYXRlZ29yeTEwOmM0LHNjaGVtZUNhdGVnb3J5MjBiOnU0LHNjaGVtZUNhdGVnb3J5MjBjOmg0LHNjaGVtZUNhdGVnb3J5MjA6ZDQsaW50ZXJwb2xhdGVDdWJlaGVsaXhEZWZhdWx0OnA0LGludGVycG9sYXRlUmFpbmJvdzpmdW5jdGlvbiBLcHQodCl7KHQ8MHx8dD4xKSYmKHQtPU1hdGguZmxvb3IodCkpO3ZhciBlPU1hdGguYWJzKHQtLjUpO3JldHVybiBnNC5oPTM2MCp0LTEwMCxnNC5zPTEuNS0xLjUqZSxnNC5sPS44LS45KmUsZzQrIiJ9LGludGVycG9sYXRlV2FybTpmNCxpbnRlcnBvbGF0ZUNvb2w6bTQsaW50ZXJwb2xhdGVWaXJpZGlzOnk0LGludGVycG9sYXRlTWFnbWE6djQsaW50ZXJwb2xhdGVJbmZlcm5vOmI0LGludGVycG9sYXRlUGxhc21hOng0LHNjYWxlU2VxdWVudGlhbDpmdW5jdGlvbiB0KGUpe3ZhciBuPTAsaT0xLHI9ITE7ZnVuY3Rpb24gbyh0KXt2YXIgbz0odC1uKS8oaS1uKTtyZXR1cm4gZShyP01hdGgubWF4KDAsTWF0aC5taW4oMSxvKSk6byl9cmV0dXJuIG8uZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSt0WzBdLGk9K3RbMV0sbyk6W24saV19LG8uY2xhbXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ISF0LG8pOnJ9LG8uaW50ZXJwb2xhdG9yPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsbyk6ZX0sby5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHQoZSkuZG9tYWluKFtuLGldKS5jbGFtcChyKX0sJDIobyl9LGNyZWF0ZTpmdW5jdGlvbiBacHQodCl7cmV0dXJuIE82KEM0KHQpLmNhbGwoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSl9LGNyZWF0b3I6QzQsbG9jYWw6ZDksbWF0Y2hlcjpSNCxtb3VzZTpmdW5jdGlvbiBKcHQodCl7dmFyIGU9ZjkoKTtyZXR1cm4gZS5jaGFuZ2VkVG91Y2hlcyYmKGU9ZS5jaGFuZ2VkVG91Y2hlc1swXSksbTkodCxlKX0sbmFtZXNwYWNlOk00LG5hbWVzcGFjZXM6UzQsY2xpZW50UG9pbnQ6bTksc2VsZWN0Ok82LHNlbGVjdEFsbDpmdW5jdGlvbiBRcHQodCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P25ldyBONihbZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCh0KV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyBONihbbnVsbD09dD9bXTp0XSxQNil9LHNlbGVjdGlvbjpJNixzZWxlY3RvcjprNCxzZWxlY3RvckFsbDpQNCxzdHlsZTpaNCx0b3VjaDpmdW5jdGlvbiB0ZnQodCxlLG4pe2FyZ3VtZW50cy5sZW5ndGg8MyYmKG49ZSxlPWY5KCkuY2hhbmdlZFRvdWNoZXMpO2Zvcih2YXIgaSxyPTAsbz1lP2UubGVuZ3RoOjA7cjxvOysrcilpZigoaT1lW3JdKS5pZGVudGlmaWVyPT09bilyZXR1cm4gbTkodCxpKTtyZXR1cm4gbnVsbH0sdG91Y2hlczpmdW5jdGlvbiBlZnQodCxlKXtudWxsPT1lJiYoZT1mOSgpLnRvdWNoZXMpO2Zvcih2YXIgbj0wLGk9ZT9lLmxlbmd0aDowLHI9bmV3IEFycmF5KGkpO248aTsrK24pcltuXT1tOSh0LGVbbl0pO3JldHVybiByfSx3aW5kb3c6WTQsZ2V0IGV2ZW50KCl7cmV0dXJuIHc2fSxjdXN0b21FdmVudDpmdW5jdGlvbiBuZnQodCxlLG4saSl7dmFyIHI9dzY7dC5zb3VyY2VFdmVudD13Nix3Nj10O3RyeXtyZXR1cm4gZS5hcHBseShuLGkpfWZpbmFsbHl7dzY9cn19LGFyYzpmdW5jdGlvbiBpZnQoKXt2YXIgdD16OSxlPUQ5LG49dzkoMCksaT1udWxsLHI9Qjksbz1IOSxhPUY5LHM9bnVsbDtmdW5jdGlvbiBsKCl7dmFyIGwsYyx1PSt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxoPStlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxkPXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLU45LHA9by5hcHBseSh0aGlzLGFyZ3VtZW50cyktTjksZj1TOShwLWQpLG09cD5kO2lmKHN8fChzPWw9eDkoKSksaDx1JiYoYz1oLGg9dSx1PWMpLGg+TDkpaWYoZj5JOS1MOSlzLm1vdmVUbyhoKkU5KGQpLGgqQTkoZCkpLHMuYXJjKDAsMCxoLGQscCwhbSksdT5MOSYmKHMubW92ZVRvKHUqRTkocCksdSpBOShwKSkscy5hcmMoMCwwLHUscCxkLG0pKTtlbHNle3ZhciBnLF8seT1kLHY9cCxiPWQseD1wLHc9ZixTPWYsTT1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKS8yLEU9TT5MOSYmKGk/K2kuYXBwbHkodGhpcyxhcmd1bWVudHMpOms5KHUqdStoKmgpKSxUPUM5KFM5KGgtdSkvMiwrbi5hcHBseSh0aGlzLGFyZ3VtZW50cykpLEM9VCxBPVQ7aWYoRT5MOSl7dmFyIGs9UjkoRS91KkE5KE0pKSxMPVI5KEUvaCpBOShNKSk7KHctPTIqayk+TDk/KGIrPWsqPW0/MTotMSx4LT1rKToodz0wLGI9eD0oZCtwKS8yKSwoUy09MipMKT5MOT8oeSs9TCo9bT8xOi0xLHYtPUwpOihTPTAseT12PShkK3ApLzIpfXZhciBQPWgqRTkoeSksTj1oKkE5KHkpLEk9dSpFOSh4KSxPPXUqQTkoeCk7aWYoVD5MOSl7dmFyIFI9aCpFOSh2KSx6PWgqQTkodiksRD11KkU5KGIpLEI9dSpBOShiKTtpZihmPFA5KXt2YXIgSD13Pkw5P1Y5KFAsTixELEIsUix6LEksTyk6W0ksT10sRj1QLUhbMF0sVj1OLUhbMV0sVT1SLUhbMF0saj16LUhbMV0sRz0xL0E5KE85KChGKlUrVipqKS8oazkoRipGK1YqVikqazkoVSpVK2oqaikpKS8yKSxXPWs5KEhbMF0qSFswXStIWzFdKkhbMV0pO0M9QzkoVCwodS1XKS8oRy0xKSksQT1DOShULChoLVcpLyhHKzEpKX19Uz5MOT9BPkw5PyhnPVU5KEQsQixQLE4saCxBLG0pLF89VTkoUix6LEksTyxoLEEsbSkscy5tb3ZlVG8oZy5jeCtnLngwMSxnLmN5K2cueTAxKSxBPFQ/cy5hcmMoZy5jeCxnLmN5LEEsTTkoZy55MDEsZy54MDEpLE05KF8ueTAxLF8ueDAxKSwhbSk6KHMuYXJjKGcuY3gsZy5jeSxBLE05KGcueTAxLGcueDAxKSxNOShnLnkxMSxnLngxMSksIW0pLHMuYXJjKDAsMCxoLE05KGcuY3krZy55MTEsZy5jeCtnLngxMSksTTkoXy5jeStfLnkxMSxfLmN4K18ueDExKSwhbSkscy5hcmMoXy5jeCxfLmN5LEEsTTkoXy55MTEsXy54MTEpLE05KF8ueTAxLF8ueDAxKSwhbSkpKToocy5tb3ZlVG8oUCxOKSxzLmFyYygwLDAsaCx5LHYsIW0pKTpzLm1vdmVUbyhQLE4pLHU+TDkmJnc+TDk/Qz5MOT8oZz1VOShJLE8sUix6LHUsLUMsbSksXz1VOShQLE4sRCxCLHUsLUMsbSkscy5saW5lVG8oZy5jeCtnLngwMSxnLmN5K2cueTAxKSxDPFQ/cy5hcmMoZy5jeCxnLmN5LEMsTTkoZy55MDEsZy54MDEpLE05KF8ueTAxLF8ueDAxKSwhbSk6KHMuYXJjKGcuY3gsZy5jeSxDLE05KGcueTAxLGcueDAxKSxNOShnLnkxMSxnLngxMSksIW0pLHMuYXJjKDAsMCx1LE05KGcuY3krZy55MTEsZy5jeCtnLngxMSksTTkoXy5jeStfLnkxMSxfLmN4K18ueDExKSxtKSxzLmFyYyhfLmN4LF8uY3ksQyxNOShfLnkxMSxfLngxMSksTTkoXy55MDEsXy54MDEpLCFtKSkpOnMuYXJjKDAsMCx1LHgsYixtKTpzLmxpbmVUbyhJLE8pfWVsc2Ugcy5tb3ZlVG8oMCwwKTtpZihzLmNsb3NlUGF0aCgpLGwpcmV0dXJuIHM9bnVsbCxsKyIifHxudWxsfXJldHVybiBsLmNlbnRyb2lkPWZ1bmN0aW9uKCl7dmFyIG49KCt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK2UuYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLGk9KCtyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK28uYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLVA5LzI7cmV0dXJuW0U5KGkpKm4sQTkoaSkqbl19LGwuaW5uZXJSYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTp3OSgrZSksbCk6dH0sbC5vdXRlclJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90Onc5KCt0KSxsKTplfSxsLmNvcm5lclJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90Onc5KCt0KSxsKTpufSxsLnBhZFJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1udWxsPT10P251bGw6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp3OSgrdCksbCk6aX0sbC5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6dzkoK3QpLGwpOnJ9LGwuZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp3OSgrdCksbCk6b30sbC5wYWRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgdD90Onc5KCt0KSxsKTphfSxsLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9bnVsbD09dD9udWxsOnQsbCk6c30sbH0sYXJlYTpYOSxsaW5lOlk5LHBpZTpmdW5jdGlvbiByZnQoKXt2YXIgdD1LOSxlPSQ5LG49bnVsbCxpPXc5KDApLHI9dzkoSTkpLG89dzkoMCk7ZnVuY3Rpb24gYShhKXt2YXIgcyxsLGMsdSxoLGQ9YS5sZW5ndGgscD0wLGY9bmV3IEFycmF5KGQpLG09bmV3IEFycmF5KGQpLGc9K2kuYXBwbHkodGhpcyxhcmd1bWVudHMpLF89TWF0aC5taW4oSTksTWF0aC5tYXgoLUk5LHIuYXBwbHkodGhpcyxhcmd1bWVudHMpLWcpKSx5PU1hdGgubWluKE1hdGguYWJzKF8pL2Qsby5hcHBseSh0aGlzLGFyZ3VtZW50cykpLHY9eSooXzwwPy0xOjEpO2ZvcihzPTA7czxkOysrcykoaD1tW2Zbc109c109K3QoYVtzXSxzLGEpKT4wJiYocCs9aCk7Zm9yKG51bGwhPWU/Zi5zb3J0KChmdW5jdGlvbih0LG4pe3JldHVybiBlKG1bdF0sbVtuXSl9KSk6bnVsbCE9biYmZi5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiBuKGFbdF0sYVtlXSl9KSkscz0wLGM9cD8oXy1kKnYpL3A6MDtzPGQ7KytzLGc9dSltW2w9ZltzXV09e2RhdGE6YVtsXSxpbmRleDpzLHZhbHVlOmg9bVtsXSxzdGFydEFuZ2xlOmcsZW5kQW5nbGU6dT1nKyhoPjA/aCpjOjApK3YscGFkQW5nbGU6eX07cmV0dXJuIG19cmV0dXJuIGEudmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTp3OSgrZSksYSk6dH0sYS5zb3J0VmFsdWVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsbj1udWxsLGEpOmV9LGEuc29ydD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LGU9bnVsbCxhKTpufSxhLnN0YXJ0QW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp3OSgrdCksYSk6aX0sYS5lbmRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90Onc5KCt0KSxhKTpyfSxhLnBhZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6dzkoK3QpLGEpOm99LGF9LGFyZWFSYWRpYWw6bjgscmFkaWFsQXJlYTpuOCxsaW5lUmFkaWFsOmU4LHJhZGlhbExpbmU6ZTgscG9pbnRSYWRpYWw6aTgsbGlua0hvcml6b250YWw6ZnVuY3Rpb24gb2Z0KCl7cmV0dXJuIHM4KGw4KX0sbGlua1ZlcnRpY2FsOmZ1bmN0aW9uIGFmdCgpe3JldHVybiBzOChjOCl9LGxpbmtSYWRpYWw6ZnVuY3Rpb24gc2Z0KCl7dmFyIHQ9czgodTgpO3JldHVybiB0LmFuZ2xlPXQueCxkZWxldGUgdC54LHQucmFkaXVzPXQueSxkZWxldGUgdC55LHR9LHN5bWJvbDpmdW5jdGlvbiBsZnQoKXt2YXIgdD13OShoOCksZT13OSg2NCksbj1udWxsO2Z1bmN0aW9uIGkoKXt2YXIgaTtpZihufHwobj1pPXg5KCkpLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpLmRyYXcobiwrZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLGkpcmV0dXJuIG49bnVsbCxpKyIifHxudWxsfXJldHVybiBpLnR5cGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTp3OShlKSxpKTp0fSxpLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp3OSgrdCksaSk6ZX0saS5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW51bGw9PXQ/bnVsbDp0LGkpOm59LGl9LHN5bWJvbHM6QTgsc3ltYm9sQ2lyY2xlOmg4LHN5bWJvbENyb3NzOmQ4LHN5bWJvbERpYW1vbmQ6bTgsc3ltYm9sU3F1YXJlOmI4LHN5bWJvbFN0YXI6djgsc3ltYm9sVHJpYW5nbGU6dzgsc3ltYm9sV3llOkM4LGN1cnZlQmFzaXNDbG9zZWQ6ZnVuY3Rpb24gY2Z0KHQpe3JldHVybiBuZXcgTjgodCl9LGN1cnZlQmFzaXNPcGVuOmZ1bmN0aW9uIHVmdCh0KXtyZXR1cm4gbmV3IEk4KHQpfSxjdXJ2ZUJhc2lzOmZ1bmN0aW9uIGhmdCh0KXtyZXR1cm4gbmV3IFA4KHQpfSxjdXJ2ZUJ1bmRsZTpSOCxjdXJ2ZUNhcmRpbmFsQ2xvc2VkOkY4LGN1cnZlQ2FyZGluYWxPcGVuOlU4LGN1cnZlQ2FyZGluYWw6QjgsY3VydmVDYXRtdWxsUm9tQ2xvc2VkOlk4LGN1cnZlQ2F0bXVsbFJvbU9wZW46JDgsY3VydmVDYXRtdWxsUm9tOlc4LGN1cnZlTGluZWFyQ2xvc2VkOmZ1bmN0aW9uIGRmdCh0KXtyZXR1cm4gbmV3IEs4KHQpfSxjdXJ2ZUxpbmVhcjpHOSxjdXJ2ZU1vbm90b25lWDpmdW5jdGlvbiBwZnQodCl7cmV0dXJuIG5ldyBlNyh0KX0sY3VydmVNb25vdG9uZVk6ZnVuY3Rpb24gZmZ0KHQpe3JldHVybiBuZXcgbjcodCl9LGN1cnZlTmF0dXJhbDpmdW5jdGlvbiBtZnQodCl7cmV0dXJuIG5ldyByNyh0KX0sY3VydmVTdGVwOmZ1bmN0aW9uIGdmdCh0KXtyZXR1cm4gbmV3IGE3KHQsLjUpfSxjdXJ2ZVN0ZXBBZnRlcjpmdW5jdGlvbiBfZnQodCl7cmV0dXJuIG5ldyBhNyh0LDEpfSxjdXJ2ZVN0ZXBCZWZvcmU6ZnVuY3Rpb24geWZ0KHQpe3JldHVybiBuZXcgYTcodCwwKX0sc3RhY2s6ZnVuY3Rpb24gdmZ0KCl7dmFyIHQ9dzkoW10pLGU9bDcsbj1zNyxpPWM3O2Z1bmN0aW9uIHIocil7dmFyIG8sYSxzPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLGw9ci5sZW5ndGgsYz1zLmxlbmd0aCx1PW5ldyBBcnJheShjKTtmb3Iobz0wO288YzsrK28pe2Zvcih2YXIgaCxkPXNbb10scD11W29dPW5ldyBBcnJheShsKSxmPTA7ZjxsOysrZilwW2ZdPWg9WzAsK2kocltmXSxkLGYscildLGguZGF0YT1yW2ZdO3Aua2V5PWR9Zm9yKG89MCxhPWUodSk7bzxjOysrbyl1W2Fbb11dLmluZGV4PW87cmV0dXJuIG4odSxhKSx1fXJldHVybiByLmtleXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTp3OShyOC5jYWxsKGUpKSxyKTp0fSxyLnZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6dzkoK3QpLHIpOml9LHIub3JkZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bnVsbD09dD9sNzoiZnVuY3Rpb24iPT10eXBlb2YgdD90Onc5KHI4LmNhbGwodCkpLHIpOmV9LHIub2Zmc2V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW51bGw9PXQ/czc6dCxyKTpufSxyfSxzdGFja09mZnNldEV4cGFuZDpmdW5jdGlvbiBiZnQodCxlKXtpZigoaT10Lmxlbmd0aCk+MCl7Zm9yKHZhciBuLGkscixvPTAsYT10WzBdLmxlbmd0aDtvPGE7KytvKXtmb3Iocj1uPTA7bjxpOysrbilyKz10W25dW29dWzFdfHwwO2lmKHIpZm9yKG49MDtuPGk7KytuKXRbbl1bb11bMV0vPXJ9czcodCxlKX19LHN0YWNrT2Zmc2V0RGl2ZXJnaW5nOmZ1bmN0aW9uIHhmdCh0LGUpe2lmKChzPXQubGVuZ3RoKT4xKWZvcih2YXIgbixpLHIsbyxhLHMsbD0wLGM9dFtlWzBdXS5sZW5ndGg7bDxjOysrbClmb3Iobz1hPTAsbj0wO248czsrK24pKHI9KGk9dFtlW25dXVtsXSlbMV0taVswXSk+PTA/KGlbMF09byxpWzFdPW8rPXIpOnI8MD8oaVsxXT1hLGlbMF09YSs9cik6aVswXT1vfSxzdGFja09mZnNldE5vbmU6czcsc3RhY2tPZmZzZXRTaWxob3VldHRlOmZ1bmN0aW9uIHdmdCh0LGUpe2lmKChuPXQubGVuZ3RoKT4wKXtmb3IodmFyIG4saT0wLHI9dFtlWzBdXSxvPXIubGVuZ3RoO2k8bzsrK2kpe2Zvcih2YXIgYT0wLHM9MDthPG47KythKXMrPXRbYV1baV1bMV18fDA7cltpXVsxXSs9cltpXVswXT0tcy8yfXM3KHQsZSl9fSxzdGFja09mZnNldFdpZ2dsZTpmdW5jdGlvbiBTZnQodCxlKXtpZigocj10Lmxlbmd0aCk+MCYmKGk9KG49dFtlWzBdXSkubGVuZ3RoKT4wKXtmb3IodmFyIG4saSxyLG89MCxhPTE7YTxpOysrYSl7Zm9yKHZhciBzPTAsbD0wLGM9MDtzPHI7KytzKXtmb3IodmFyIHU9dFtlW3NdXSxoPXVbYV1bMV18fDAsZD0oaC0odVthLTFdWzFdfHwwKSkvMixwPTA7cDxzOysrcCl7dmFyIGY9dFtlW3BdXTtkKz0oZlthXVsxXXx8MCktKGZbYS0xXVsxXXx8MCl9bCs9aCxjKz1kKmh9blthLTFdWzFdKz1uW2EtMV1bMF09byxsJiYoby09Yy9sKX1uW2EtMV1bMV0rPW5bYS0xXVswXT1vLHM3KHQsZSl9fSxzdGFja09yZGVyQXNjZW5kaW5nOnU3LHN0YWNrT3JkZXJEZXNjZW5kaW5nOmZ1bmN0aW9uIE1mdCh0KXtyZXR1cm4gdTcodCkucmV2ZXJzZSgpfSxzdGFja09yZGVySW5zaWRlT3V0OmZ1bmN0aW9uIEVmdCh0KXt2YXIgZSxuLGk9dC5sZW5ndGgscj10Lm1hcChoNyksbz1sNyh0KS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiByW2VdLXJbdF19KSksYT0wLHM9MCxsPVtdLGM9W107Zm9yKGU9MDtlPGk7KytlKW49b1tlXSxhPHM/KGErPXJbbl0sbC5wdXNoKG4pKToocys9cltuXSxjLnB1c2gobikpO3JldHVybiBjLnJldmVyc2UoKS5jb25jYXQobCl9LHN0YWNrT3JkZXJOb25lOmw3LHN0YWNrT3JkZXJSZXZlcnNlOmZ1bmN0aW9uIFRmdCh0KXtyZXR1cm4gbDcodCkucmV2ZXJzZSgpfSx0aW1lSW50ZXJ2YWw6ZjcsdGltZU1pbGxpc2Vjb25kOm03LHRpbWVNaWxsaXNlY29uZHM6ZzcsdXRjTWlsbGlzZWNvbmQ6bTcsdXRjTWlsbGlzZWNvbmRzOmc3LHRpbWVTZWNvbmQ6dzcsdGltZVNlY29uZHM6UzcsdXRjU2Vjb25kOnc3LHV0Y1NlY29uZHM6UzcsdGltZU1pbnV0ZTpNNyx0aW1lTWludXRlczpFNyx0aW1lSG91cjpUNyx0aW1lSG91cnM6QzcsdGltZURheTpBNyx0aW1lRGF5czprNyx0aW1lV2VlazpQNyx0aW1lV2Vla3M6QjcsdGltZVN1bmRheTpQNyx0aW1lU3VuZGF5czpCNyx0aW1lTW9uZGF5Ok43LHRpbWVNb25kYXlzOkg3LHRpbWVUdWVzZGF5Okk3LHRpbWVUdWVzZGF5czpGNyx0aW1lV2VkbmVzZGF5Ok83LHRpbWVXZWRuZXNkYXlzOlY3LHRpbWVUaHVyc2RheTpSNyx0aW1lVGh1cnNkYXlzOlU3LHRpbWVGcmlkYXk6ejcsdGltZUZyaWRheXM6ajcsdGltZVNhdHVyZGF5OkQ3LHRpbWVTYXR1cmRheXM6RzcsdGltZU1vbnRoOlc3LHRpbWVNb250aHM6cTcsdGltZVllYXI6WTcsdGltZVllYXJzOlg3LHV0Y01pbnV0ZTokNyx1dGNNaW51dGVzOks3LHV0Y0hvdXI6WjcsdXRjSG91cnM6SjcsdXRjRGF5OlE3LHV0Y0RheXM6dHR0LHV0Y1dlZWs6bnR0LHV0Y1dlZWtzOmN0dCx1dGNTdW5kYXk6bnR0LHV0Y1N1bmRheXM6Y3R0LHV0Y01vbmRheTppdHQsdXRjTW9uZGF5czp1dHQsdXRjVHVlc2RheTpydHQsdXRjVHVlc2RheXM6aHR0LHV0Y1dlZG5lc2RheTpvdHQsdXRjV2VkbmVzZGF5czpkdHQsdXRjVGh1cnNkYXk6YXR0LHV0Y1RodXJzZGF5czpwdHQsdXRjRnJpZGF5OnN0dCx1dGNGcmlkYXlzOmZ0dCx1dGNTYXR1cmRheTpsdHQsdXRjU2F0dXJkYXlzOm10dCx1dGNNb250aDpndHQsdXRjTW9udGhzOl90dCx1dGNZZWFyOnl0dCx1dGNZZWFyczp2dHQsdGltZUZvcm1hdERlZmF1bHRMb2NhbGU6cm50LGdldCB0aW1lRm9ybWF0KCl7cmV0dXJuIFV0dH0sZ2V0IHRpbWVQYXJzZSgpe3JldHVybiBqdHR9LGdldCB1dGNGb3JtYXQoKXtyZXR1cm4gR3R0fSxnZXQgdXRjUGFyc2UoKXtyZXR1cm4gV3R0fSx0aW1lRm9ybWF0TG9jYWxlOkZ0dCxpc29Gb3JtYXQ6bG50LGlzb1BhcnNlOnVudCxub3c6Ym50LHRpbWVyOlNudCx0aW1lckZsdXNoOk1udCx0aW1lb3V0OmZ1bmN0aW9uIENmdCh0LGUsbil7dmFyIGk9bmV3IHdudDtyZXR1cm4gaS5yZXN0YXJ0KChmdW5jdGlvbihuKXtpLnN0b3AoKSx0KG4rZSl9KSxlPW51bGw9PWU/MDorZSxuKSxpfSxpbnRlcnZhbDpmdW5jdGlvbiBBZnQodCxlLG4pe3ZhciBpPW5ldyB3bnQscj1lO3JldHVybiBudWxsPT1lPyhpLnJlc3RhcnQodCxlLG4pLGkpOihlPStlLG49bnVsbD09bj9ibnQoKTorbixpLnJlc3RhcnQoKGZ1bmN0aW9uIG8oYSl7YSs9cixpLnJlc3RhcnQobyxyKz1lLG4pLHQoYSl9KSxlLG4pLGkpfSx0cmFuc2l0aW9uOnVhdCxhY3RpdmU6ZnVuY3Rpb24ga2Z0KHQsZSl7dmFyIG4saSxyPXQuX190cmFuc2l0aW9uO2lmKHIpZm9yKGkgaW4gZT1udWxsPT1lP251bGw6ZSsiIixyKWlmKChuPXJbaV0pLnN0YXRlPjEmJm4ubmFtZT09PWUpcmV0dXJuIG5ldyBjYXQoW1t0XV0sT2F0LGUsK2kpO3JldHVybiBudWxsfSxpbnRlcnJ1cHQ6anJ0LHZvcm9ub2k6ZnVuY3Rpb24gTGZ0KCl7dmFyIHQ9emF0LGU9RGF0LG49bnVsbDtmdW5jdGlvbiBpKGkpe3JldHVybiBuZXcgeXN0KGkubWFwKChmdW5jdGlvbihuLHIpe3ZhciBvPVtNYXRoLnJvdW5kKHQobixyLGkpL2ZzdCkqZnN0LE1hdGgucm91bmQoZShuLHIsaSkvZnN0KSpmc3RdO3JldHVybiBvLmluZGV4PXIsby5kYXRhPW4sb30pKSxuKX1yZXR1cm4gaS5wb2x5Z29ucz1mdW5jdGlvbih0KXtyZXR1cm4gaSh0KS5wb2x5Z29ucygpfSxpLmxpbmtzPWZ1bmN0aW9uKHQpe3JldHVybiBpKHQpLmxpbmtzKCl9LGkudHJpYW5nbGVzPWZ1bmN0aW9uKHQpe3JldHVybiBpKHQpLnRyaWFuZ2xlcygpfSxpLng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpSYXQoK2UpLGkpOnR9LGkueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlJhdCgrdCksaSk6ZX0saS5leHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49bnVsbD09dD9udWxsOltbK3RbMF1bMF0sK3RbMF1bMV1dLFsrdFsxXVswXSwrdFsxXVsxXV1dLGkpOm4mJltbblswXVswXSxuWzBdWzFdXSxbblsxXVswXSxuWzFdWzFdXV19LGkuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1udWxsPT10P251bGw6W1swLDBdLFsrdFswXSwrdFsxXV1dLGkpOm4mJltuWzFdWzBdLW5bMF1bMF0sblsxXVsxXS1uWzBdWzFdXX0saX0sem9vbTpmdW5jdGlvbiBQZnQoKXt2YXIgdCxlLG49Wmh0LGk9Smh0LHI9bmR0LG89dGR0LGE9ZWR0LHM9WzAsMS8wXSxsPVtbLTEvMCwtMS8wXSxbMS8wLDEvMF1dLGM9MjUwLHU9dnV0LGg9W10sZD1ic3QoInN0YXJ0Iiwiem9vbSIsImVuZCIpLHA9NTAwLGY9MDtmdW5jdGlvbiBtKHQpe3QucHJvcGVydHkoIl9fem9vbSIsUWh0KS5vbigid2hlZWwuem9vbSIsdykub24oIm1vdXNlZG93bi56b29tIixTKS5vbigiZGJsY2xpY2suem9vbSIsTSkuZmlsdGVyKGEpLm9uKCJ0b3VjaHN0YXJ0Lnpvb20iLEUpLm9uKCJ0b3VjaG1vdmUuem9vbSIsVCkub24oInRvdWNoZW5kLnpvb20gdG91Y2hjYW5jZWwuem9vbSIsQykuc3R5bGUoInRvdWNoLWFjdGlvbiIsIm5vbmUiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpfWZ1bmN0aW9uIGcodCxlKXtyZXR1cm4oZT1NYXRoLm1heChzWzBdLE1hdGgubWluKHNbMV0sZSkpKT09PXQuaz90Om5ldyBHaHQoZSx0LngsdC55KX1mdW5jdGlvbiBfKHQsZSxuKXt2YXIgaT1lWzBdLW5bMF0qdC5rLHI9ZVsxXS1uWzFdKnQuaztyZXR1cm4gaT09PXQueCYmcj09PXQueT90Om5ldyBHaHQodC5rLGkscil9ZnVuY3Rpb24geSh0KXtyZXR1cm5bKCt0WzBdWzBdKyArdFsxXVswXSkvMiwoK3RbMF1bMV0rICt0WzFdWzFdKS8yXX1mdW5jdGlvbiB2KHQsZSxuKXt0Lm9uKCJzdGFydC56b29tIiwoZnVuY3Rpb24oKXtiKHRoaXMsYXJndW1lbnRzKS5zdGFydCgpfSkpLm9uKCJpbnRlcnJ1cHQuem9vbSBlbmQuem9vbSIsKGZ1bmN0aW9uKCl7Yih0aGlzLGFyZ3VtZW50cykuZW5kKCl9KSkudHdlZW4oInpvb20iLChmdW5jdGlvbigpe3ZhciB0PXRoaXMscj1hcmd1bWVudHMsbz1iKHQsciksYT1pLmFwcGx5KHQscikscz1ufHx5KGEpLGw9TWF0aC5tYXgoYVsxXVswXS1hWzBdWzBdLGFbMV1bMV0tYVswXVsxXSksYz10Ll9fem9vbSxoPSJmdW5jdGlvbiI9PXR5cGVvZiBlP2UuYXBwbHkodCxyKTplLGQ9dShjLmludmVydChzKS5jb25jYXQobC9jLmspLGguaW52ZXJ0KHMpLmNvbmNhdChsL2guaykpO3JldHVybiBmdW5jdGlvbih0KXtpZigxPT09dCl0PWg7ZWxzZXt2YXIgZT1kKHQpLG49bC9lWzJdO3Q9bmV3IEdodChuLHNbMF0tZVswXSpuLHNbMV0tZVsxXSpuKX1vLnpvb20obnVsbCx0KX19KSl9ZnVuY3Rpb24gYih0LGUpe2Zvcih2YXIgbixpPTAscj1oLmxlbmd0aDtpPHI7KytpKWlmKChuPWhbaV0pLnRoYXQ9PT10KXJldHVybiBuO3JldHVybiBuZXcgeCh0LGUpfWZ1bmN0aW9uIHgodCxlKXt0aGlzLnRoYXQ9dCx0aGlzLmFyZ3M9ZSx0aGlzLmluZGV4PS0xLHRoaXMuYWN0aXZlPTAsdGhpcy5leHRlbnQ9aS5hcHBseSh0LGUpfWZ1bmN0aW9uIHcoKXtpZihuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIHQ9Yih0aGlzLGFyZ3VtZW50cyksZT10aGlzLl9fem9vbSxpPU1hdGgubWF4KHNbMF0sTWF0aC5taW4oc1sxXSxlLmsqTWF0aC5wb3coMixvLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkpKSxhPURsdCh0aGlzKTtpZih0LndoZWVsKXQubW91c2VbMF1bMF09PT1hWzBdJiZ0Lm1vdXNlWzBdWzFdPT09YVsxXXx8KHQubW91c2VbMV09ZS5pbnZlcnQodC5tb3VzZVswXT1hKSksY2xlYXJUaW1lb3V0KHQud2hlZWwpO2Vsc2V7aWYoZS5rPT09aSlyZXR1cm47dC5tb3VzZT1bYSxlLmludmVydChhKV0sR3V0KHRoaXMpLHQuc3RhcnQoKX1LaHQoKSx0LndoZWVsPXNldFRpbWVvdXQoYywxNTApLHQuem9vbSgibW91c2UiLHIoXyhnKGUsaSksdC5tb3VzZVswXSx0Lm1vdXNlWzFdKSx0LmV4dGVudCxsKSl9ZnVuY3Rpb24gYygpe3Qud2hlZWw9bnVsbCx0LmVuZCgpfX1mdW5jdGlvbiBTKCl7aWYoIWUmJm4uYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgdD1iKHRoaXMsYXJndW1lbnRzKSxpPU9sdCh3bHQudmlldykub24oIm1vdXNlbW92ZS56b29tIixjLCEwKS5vbigibW91c2V1cC56b29tIix1LCEwKSxvPURsdCh0aGlzKSxhPXdsdC5jbGllbnRYLHM9d2x0LmNsaWVudFk7Rmx0KHdsdC52aWV3KSwkaHQoKSx0Lm1vdXNlPVtvLHRoaXMuX196b29tLmludmVydChvKV0sR3V0KHRoaXMpLHQuc3RhcnQoKX1mdW5jdGlvbiBjKCl7aWYoS2h0KCksIXQubW92ZWQpe3ZhciBlPXdsdC5jbGllbnRYLWEsbj13bHQuY2xpZW50WS1zO3QubW92ZWQ9ZSplK24qbj5mfXQuem9vbSgibW91c2UiLHIoXyh0LnRoYXQuX196b29tLHQubW91c2VbMF09RGx0KHQudGhhdCksdC5tb3VzZVsxXSksdC5leHRlbnQsbCkpfWZ1bmN0aW9uIHUoKXtpLm9uKCJtb3VzZW1vdmUuem9vbSBtb3VzZXVwLnpvb20iLG51bGwpLFZsdCh3bHQudmlldyx0Lm1vdmVkKSxLaHQoKSx0LmVuZCgpfX1mdW5jdGlvbiBNKCl7aWYobi5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciB0PXRoaXMuX196b29tLGU9RGx0KHRoaXMpLG89dC5pbnZlcnQoZSksYT10LmsqKHdsdC5zaGlmdEtleT8uNToyKSxzPXIoXyhnKHQsYSksZSxvKSxpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxsKTtLaHQoKSxjPjA/T2x0KHRoaXMpLnRyYW5zaXRpb24oKS5kdXJhdGlvbihjKS5jYWxsKHYscyxlKTpPbHQodGhpcykuY2FsbChtLnRyYW5zZm9ybSxzKX19ZnVuY3Rpb24gRSgpe2lmKG4uYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgZSxpLHIsbyxhPWIodGhpcyxhcmd1bWVudHMpLHM9d2x0LmNoYW5nZWRUb3VjaGVzLGw9cy5sZW5ndGg7Zm9yKCRodCgpLGk9MDtpPGw7KytpKW89W289Qmx0KHRoaXMscywocj1zW2ldKS5pZGVudGlmaWVyKSx0aGlzLl9fem9vbS5pbnZlcnQobyksci5pZGVudGlmaWVyXSxhLnRvdWNoMD9hLnRvdWNoMXx8KGEudG91Y2gxPW8pOihhLnRvdWNoMD1vLGU9ITApO2lmKHQmJih0PWNsZWFyVGltZW91dCh0KSwhYS50b3VjaDEpKXJldHVybiBhLmVuZCgpLHZvaWQoKG89T2x0KHRoaXMpLm9uKCJkYmxjbGljay56b29tIikpJiZvLmFwcGx5KHRoaXMsYXJndW1lbnRzKSk7ZSYmKHQ9c2V0VGltZW91dCgoZnVuY3Rpb24oKXt0PW51bGx9KSxwKSxHdXQodGhpcyksYS5zdGFydCgpKX19ZnVuY3Rpb24gVCgpe3ZhciBlLG4saSxvLGE9Yih0aGlzLGFyZ3VtZW50cykscz13bHQuY2hhbmdlZFRvdWNoZXMsYz1zLmxlbmd0aDtmb3IoS2h0KCksdCYmKHQ9Y2xlYXJUaW1lb3V0KHQpKSxlPTA7ZTxjOysrZSlpPUJsdCh0aGlzLHMsKG49c1tlXSkuaWRlbnRpZmllciksYS50b3VjaDAmJmEudG91Y2gwWzJdPT09bi5pZGVudGlmaWVyP2EudG91Y2gwWzBdPWk6YS50b3VjaDEmJmEudG91Y2gxWzJdPT09bi5pZGVudGlmaWVyJiYoYS50b3VjaDFbMF09aSk7aWYobj1hLnRoYXQuX196b29tLGEudG91Y2gxKXt2YXIgdT1hLnRvdWNoMFswXSxoPWEudG91Y2gwWzFdLGQ9YS50b3VjaDFbMF0scD1hLnRvdWNoMVsxXSxmPShmPWRbMF0tdVswXSkqZisoZj1kWzFdLXVbMV0pKmYsbT0obT1wWzBdLWhbMF0pKm0rKG09cFsxXS1oWzFdKSptO249ZyhuLE1hdGguc3FydChmL20pKSxpPVsodVswXStkWzBdKS8yLCh1WzFdK2RbMV0pLzJdLG89WyhoWzBdK3BbMF0pLzIsKGhbMV0rcFsxXSkvMl19ZWxzZXtpZighYS50b3VjaDApcmV0dXJuO2k9YS50b3VjaDBbMF0sbz1hLnRvdWNoMFsxXX1hLnpvb20oInRvdWNoIixyKF8obixpLG8pLGEuZXh0ZW50LGwpKX1mdW5jdGlvbiBDKCl7dmFyIHQsbixpPWIodGhpcyxhcmd1bWVudHMpLHI9d2x0LmNoYW5nZWRUb3VjaGVzLG89ci5sZW5ndGg7Zm9yKCRodCgpLGUmJmNsZWFyVGltZW91dChlKSxlPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ZT1udWxsfSkscCksdD0wO3Q8bzsrK3Qpbj1yW3RdLGkudG91Y2gwJiZpLnRvdWNoMFsyXT09PW4uaWRlbnRpZmllcj9kZWxldGUgaS50b3VjaDA6aS50b3VjaDEmJmkudG91Y2gxWzJdPT09bi5pZGVudGlmaWVyJiZkZWxldGUgaS50b3VjaDE7aS50b3VjaDEmJiFpLnRvdWNoMCYmKGkudG91Y2gwPWkudG91Y2gxLGRlbGV0ZSBpLnRvdWNoMSksaS50b3VjaDA/aS50b3VjaDBbMV09dGhpcy5fX3pvb20uaW52ZXJ0KGkudG91Y2gwWzBdKTppLmVuZCgpfXJldHVybiBtLnRyYW5zZm9ybT1mdW5jdGlvbih0LGUpe3ZhciBuPXQuc2VsZWN0aW9uP3Quc2VsZWN0aW9uKCk6dDtuLnByb3BlcnR5KCJfX3pvb20iLFFodCksdCE9PW4/dih0LGUpOm4uaW50ZXJydXB0KCkuZWFjaCgoZnVuY3Rpb24oKXtiKHRoaXMsYXJndW1lbnRzKS5zdGFydCgpLnpvb20obnVsbCwiZnVuY3Rpb24iPT10eXBlb2YgZT9lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTplKS5lbmQoKX0pKX0sbS5zY2FsZUJ5PWZ1bmN0aW9uKHQsZSl7bS5zY2FsZVRvKHQsKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fX3pvb20uayxuPSJmdW5jdGlvbiI9PXR5cGVvZiBlP2UuYXBwbHkodGhpcyxhcmd1bWVudHMpOmU7cmV0dXJuIHQqbn0pKX0sbS5zY2FsZVRvPWZ1bmN0aW9uKHQsZSl7bS50cmFuc2Zvcm0odCwoZnVuY3Rpb24oKXt2YXIgdD1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxuPXRoaXMuX196b29tLG89eSh0KSxhPW4uaW52ZXJ0KG8pLHM9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6ZTtyZXR1cm4gcihfKGcobixzKSxvLGEpLHQsbCl9KSl9LG0udHJhbnNsYXRlQnk9ZnVuY3Rpb24odCxlLG4pe20udHJhbnNmb3JtKHQsKGZ1bmN0aW9uKCl7cmV0dXJuIHIodGhpcy5fX3pvb20udHJhbnNsYXRlKCJmdW5jdGlvbiI9PXR5cGVvZiBlP2UuYXBwbHkodGhpcyxhcmd1bWVudHMpOmUsImZ1bmN0aW9uIj09dHlwZW9mIG4/bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6biksaS5hcHBseSh0aGlzLGFyZ3VtZW50cyksbCl9KSl9LG0udHJhbnNsYXRlVG89ZnVuY3Rpb24odCxlLG4pe20udHJhbnNmb3JtKHQsKGZ1bmN0aW9uKCl7dmFyIHQ9aS5hcHBseSh0aGlzLGFyZ3VtZW50cyksbz10aGlzLl9fem9vbSxhPXkodCk7cmV0dXJuIHIoWWh0LnRyYW5zbGF0ZShhWzBdLGFbMV0pLnNjYWxlKG8uaykudHJhbnNsYXRlKCJmdW5jdGlvbiI9PXR5cGVvZiBlPy1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTotZSwiZnVuY3Rpb24iPT10eXBlb2Ygbj8tbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6LW4pLHQsbCl9KSl9LHgucHJvdG90eXBlPXtzdGFydDpmdW5jdGlvbigpe3JldHVybiAxPT0rK3RoaXMuYWN0aXZlJiYodGhpcy5pbmRleD1oLnB1c2godGhpcyktMSx0aGlzLmVtaXQoInN0YXJ0IikpLHRoaXN9LHpvb206ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5tb3VzZSYmIm1vdXNlIiE9PXQmJih0aGlzLm1vdXNlWzFdPWUuaW52ZXJ0KHRoaXMubW91c2VbMF0pKSx0aGlzLnRvdWNoMCYmInRvdWNoIiE9PXQmJih0aGlzLnRvdWNoMFsxXT1lLmludmVydCh0aGlzLnRvdWNoMFswXSkpLHRoaXMudG91Y2gxJiYidG91Y2giIT09dCYmKHRoaXMudG91Y2gxWzFdPWUuaW52ZXJ0KHRoaXMudG91Y2gxWzBdKSksdGhpcy50aGF0Ll9fem9vbT1lLHRoaXMuZW1pdCgiem9vbSIpLHRoaXN9LGVuZDpmdW5jdGlvbigpe3JldHVybiAwPT0tLXRoaXMuYWN0aXZlJiYoaC5zcGxpY2UodGhpcy5pbmRleCwxKSx0aGlzLmluZGV4PS0xLHRoaXMuZW1pdCgiZW5kIikpLHRoaXN9LGVtaXQ6ZnVuY3Rpb24odCl7IShmdW5jdGlvbiBlKHQsbixpLHIpe3ZhciBvPXdsdDt0LnNvdXJjZUV2ZW50PXdsdCx3bHQ9dDt0cnl7bi5hcHBseShpLHIpfWZpbmFsbHl7d2x0PW99fSkobmV3IGpodChtLHQsdGhpcy50aGF0Ll9fem9vbSksZC5hcHBseSxkLFt0LHRoaXMudGhhdCx0aGlzLmFyZ3NdKX19LG0ud2hlZWxEZWx0YT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlVodCgrdCksbSk6b30sbS5maWx0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpVaHQoISF0KSxtKTpufSxtLnRvdWNoYWJsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlVodCghIXQpLG0pOmF9LG0uZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6VWh0KFtbK3RbMF1bMF0sK3RbMF1bMV1dLFsrdFsxXVswXSwrdFsxXVsxXV1dKSxtKTppfSxtLnNjYWxlRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzWzBdPSt0WzBdLHNbMV09K3RbMV0sbSk6W3NbMF0sc1sxXV19LG0udHJhbnNsYXRlRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsWzBdWzBdPSt0WzBdWzBdLGxbMV1bMF09K3RbMV1bMF0sbFswXVsxXT0rdFswXVsxXSxsWzFdWzFdPSt0WzFdWzFdLG0pOltbbFswXVswXSxsWzBdWzFdXSxbbFsxXVswXSxsWzFdWzFdXV19LG0uY29uc3RyYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsbSk6cn0sbS5kdXJhdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0rdCxtKTpjfSxtLmludGVycG9sYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXQsbSk6dX0sbS5vbj1mdW5jdGlvbigpe3ZhciB0PWQub24uYXBwbHkoZCxhcmd1bWVudHMpO3JldHVybiB0PT09ZD9tOnR9LG0uY2xpY2tEaXN0YW5jZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0odD0rdCkqdCxtKTpNYXRoLnNxcnQoZil9LG19LHpvb21UcmFuc2Zvcm06WGh0LHpvb21JZGVudGl0eTpZaHR9KSk7YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICoKICAgICAqIEBmaWxlb3ZlcnZpZXcgbWFudWFsbHkgYWRkIGQzLXNlbGVjdGlvbi1tdWx0aSB0byBkMyBkZWZhdWx0IGJ1bmRsZS4gTW9zdCBvZiB0aGlzIGNvZGUgaXMKICAgICAqIGNvcGllZCBmcm9tIGQzLXNlbGVjdGlvbi1tdWx0aUAxLjAuMC4KICAgICAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZDMvZDMtc2VsZWN0aW9uLW11bHRpL2lzc3Vlcy8xMSBmb3Igd2h5IHdlIGhhdmUgdG8gZG8gdGhpcwogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1pZHQsaT1pZHQ7ZnVuY3Rpb24gcih0LGUpe3JldHVybiB0LmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksaT1uLnNlbGVjdCh0aGlzKTtmb3IodmFyIHIgaW4gdClpLmF0dHIocix0W3JdKX0pKX1mdW5jdGlvbiBvKHQsZSl7Zm9yKHZhciBuIGluIGUpdC5hdHRyKG4sZVtuXSk7cmV0dXJuIHR9ZnVuY3Rpb24gYSh0LGUsaSl7cmV0dXJuIHQuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxyPW4uc2VsZWN0KHRoaXMpO2Zvcih2YXIgbyBpbiB0KXIuc3R5bGUobyx0W29dLGkpfSkpfWZ1bmN0aW9uIHModCxlLG4pe2Zvcih2YXIgaSBpbiBlKXQuc3R5bGUoaSxlW2ldLG4pO3JldHVybiB0fWZ1bmN0aW9uIGwodCxlKXtyZXR1cm4gdC5lYWNoKChmdW5jdGlvbigpe3ZhciB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpLGk9bi5zZWxlY3QodGhpcyk7Zm9yKHZhciByIGluIHQpaS5wcm9wZXJ0eShyLHRbcl0pfSkpfWZ1bmN0aW9uIGModCxlKXtmb3IodmFyIG4gaW4gZSl0LnByb3BlcnR5KG4sZVtuXSk7cmV0dXJuIHR9ZnVuY3Rpb24gdSh0LGUpe3JldHVybiB0LmVhY2goKGZ1bmN0aW9uKCl7dmFyIGk9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cykscj1uLnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKHQpO2Zvcih2YXIgbyBpbiBpKXIuYXR0cihvLGlbb10pfSkpfWZ1bmN0aW9uIGgodCxlKXtmb3IodmFyIG4gaW4gZSl0LmF0dHIobixlW25dKTtyZXR1cm4gdH1mdW5jdGlvbiBkKHQsZSxpKXtyZXR1cm4gdC5lYWNoKChmdW5jdGlvbigpe3ZhciByPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpLG89bi5zZWxlY3QodGhpcykudHJhbnNpdGlvbih0KTtmb3IodmFyIGEgaW4gcilvLnN0eWxlKGEsclthXSxpKX0pKX1mdW5jdGlvbiBwKHQsZSxuKXtmb3IodmFyIGkgaW4gZSl0LnN0eWxlKGksZVtpXSxuKTtyZXR1cm4gdH1uLnNlbGVjdGlvbi5wcm90b3R5cGUuYXR0cnM9ZnVuY3Rpb24gZih0KXtyZXR1cm4oImZ1bmN0aW9uIj09dHlwZW9mIHQ/cjpvKSh0aGlzLHQpfSxuLnNlbGVjdGlvbi5wcm90b3R5cGUuc3R5bGVzPWZ1bmN0aW9uIG0odCxlKXtyZXR1cm4oImZ1bmN0aW9uIj09dHlwZW9mIHQ/YTpzKSh0aGlzLHQsbnVsbD09ZT8iIjplKX0sbi5zZWxlY3Rpb24ucHJvdG90eXBlLnByb3BlcnRpZXM9ZnVuY3Rpb24gZyh0KXtyZXR1cm4oImZ1bmN0aW9uIj09dHlwZW9mIHQ/bDpjKSh0aGlzLHQpfSxpLnRyYW5zaXRpb24ucHJvdG90eXBlLmF0dHJzPWZ1bmN0aW9uIF8odCl7cmV0dXJuKCJmdW5jdGlvbiI9PXR5cGVvZiB0P3U6aCkodGhpcyx0KX0saS50cmFuc2l0aW9uLnByb3RvdHlwZS5zdHlsZXM9ZnVuY3Rpb24geSh0LGUpe3JldHVybigiZnVuY3Rpb24iPT10eXBlb2YgdD9kOnApKHRoaXMsdCxudWxsPT1lPyIiOmUpfX0pKTt2YXIgTmZ0PWJlKChmdW5jdGlvbih0LGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLmNvZXJjZUV4dGVybmFsRDM9ZnVuY3Rpb24gbih0KXtpZihudWxsPT10LmF0dHJzKXtpZihudWxsPT10Lm5vZGVzKXt2YXIgZT1bXTtyZXR1cm4gdC5lYWNoKChmdW5jdGlvbigpe2UucHVzaCh0aGlzKX0pKSxpZHQuc2VsZWN0QWxsKGUpfXJldHVybiBpZHQuc2VsZWN0QWxsKHQubm9kZXMoKSl9cmV0dXJuIHR9fSkpLElmdD1iZSgoZnVuY3Rpb24odCxlKXsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUubWFrZUVudW09ZnVuY3Rpb24gbih0KXtyZXR1cm4gdC5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbZV09ZSx0fSkse30pfX0pKSxPZnQ9eGUoeW0pLFJmdD1iZSgoZnVuY3Rpb24odCxlKXsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPXtsaW5lYXI6T2Z0LmVhc2VMaW5lYXIscXVhZDpPZnQuZWFzZVF1YWQscXVhZEluOk9mdC5lYXNlUXVhZEluLHF1YWRPdXQ6T2Z0LmVhc2VRdWFkT3V0LHF1YWRJbk91dDpPZnQuZWFzZVF1YWRJbk91dCxjdWJpYzpPZnQuZWFzZUN1YmljLGN1YmljSW46T2Z0LmVhc2VDdWJpY0luLGN1YmljT3V0Ok9mdC5lYXNlQ3ViaWNPdXQsY3ViaWNJbk91dDpPZnQuZWFzZUN1YmljSW5PdXQscG9seTpPZnQuZWFzZVBvbHkscG9seUluOk9mdC5lYXNlUG9seUluLHBvbHlPdXQ6T2Z0LmVhc2VQb2x5T3V0LHBvbHlJbk91dDpPZnQuZWFzZVBvbHlJbk91dCxzaW46T2Z0LmVhc2VTaW4sc2luSW46T2Z0LmVhc2VTaW5JbixzaW5PdXQ6T2Z0LmVhc2VTaW5PdXQsc2luSW5PdXQ6T2Z0LmVhc2VTaW5Jbk91dCxleHA6T2Z0LmVhc2VFeHAsZXhwSW46T2Z0LmVhc2VFeHBJbixleHBPdXQ6T2Z0LmVhc2VFeHBPdXQsZXhwSW5PdXQ6T2Z0LmVhc2VFeHBJbk91dCxjaXJjbGU6T2Z0LmVhc2VDaXJjbGUsY2lyY2xlSW46T2Z0LmVhc2VDaXJjbGVJbixjaXJjbGVPdXQ6T2Z0LmVhc2VDaXJjbGVPdXQsY2lyY2xlSW5PdXQ6T2Z0LmVhc2VDaXJjbGVJbk91dCxib3VuY2U6T2Z0LmVhc2VCb3VuY2UsYm91bmNlSW46T2Z0LmVhc2VCb3VuY2VJbixib3VuY2VPdXQ6T2Z0LmVhc2VCb3VuY2VPdXQsYm91bmNlSW5PdXQ6T2Z0LmVhc2VCb3VuY2VJbk91dCxiYWNrOk9mdC5lYXNlQmFjayxiYWNrSW46T2Z0LmVhc2VCYWNrSW4sYmFja091dDpPZnQuZWFzZUJhY2tPdXQsYmFja0luT3V0Ok9mdC5lYXNlQmFja0luT3V0LGVsYXN0aWM6T2Z0LmVhc2VFbGFzdGljLGVsYXN0aWNJbjpPZnQuZWFzZUVsYXN0aWNJbixlbGFzdGljT3V0Ok9mdC5lYXNlRWxhc3RpY091dCxlbGFzdGljSW5PdXQ6T2Z0LmVhc2VFbGFzdGljSW5PdXR9O2UuRWFzZU5hbWU9SWZ0Lm1ha2VFbnVtKFsibGluZWFyIiwicXVhZCIsInF1YWRJbiIsInF1YWRPdXQiLCJxdWFkSW5PdXQiLCJjdWJpYyIsImN1YmljSW4iLCJjdWJpY091dCIsImN1YmljSW5PdXQiLCJwb2x5IiwicG9seUluIiwicG9seU91dCIsInBvbHlJbk91dCIsInNpbiIsInNpbkluIiwic2luT3V0Iiwic2luSW5PdXQiLCJleHAiLCJleHBJbiIsImV4cE91dCIsImV4cEluT3V0IiwiY2lyY2xlIiwiY2lyY2xlSW4iLCJjaXJjbGVPdXQiLCJjaXJjbGVJbk91dCIsImJvdW5jZSIsImJvdW5jZUluIiwiYm91bmNlT3V0IiwiYm91bmNlSW5PdXQiLCJiYWNrIiwiYmFja0luIiwiYmFja091dCIsImJhY2tJbk91dCIsImVsYXN0aWMiLCJlbGFzdGljSW4iLCJlbGFzdGljT3V0IiwiZWxhc3RpY0luT3V0Il0pO3ZhciBpPShmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLl9zdGFydERlbGF5PXQuX0RFRkFVTFRfU1RBUlRfREVMQVlfTUlMTElTRUNPTkRTLHRoaXMuX3N0ZXBEdXJhdGlvbj10Ll9ERUZBVUxUX1NURVBfRFVSQVRJT05fTUlMTElTRUNPTkRTLHRoaXMuX3N0ZXBEZWxheT10Ll9ERUZBVUxUX0lURVJBVElWRV9ERUxBWV9NSUxMSVNFQ09ORFMsdGhpcy5fbWF4VG90YWxEdXJhdGlvbj10Ll9ERUZBVUxUX01BWF9UT1RBTF9EVVJBVElPTl9NSUxMSVNFQ09ORFMsdGhpcy5fZWFzaW5nTW9kZT10Ll9ERUZBVUxUX0VBU0lOR19NT0RFfXJldHVybiB0LnByb3RvdHlwZS50b3RhbFRpbWU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZ2V0QWRqdXN0ZWRJdGVyYXRpdmVEZWxheSh0KTtyZXR1cm4gdGhpcy5zdGFydERlbGF5KCkrZSpNYXRoLm1heCh0LTEsMCkrdGhpcy5zdGVwRHVyYXRpb24oKX0sdC5wcm90b3R5cGUuYW5pbWF0ZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMsaT0odD1OZnQuY29lcmNlRXh0ZXJuYWxEMyh0KSkuc2l6ZSgpLHI9dGhpcy5fZ2V0QWRqdXN0ZWRJdGVyYXRpdmVEZWxheShpKTtyZXR1cm4gdC50cmFuc2l0aW9uKCkuZWFzZSh0aGlzLl9nZXRFYXNlRmFjdG9yeSgpKS5kdXJhdGlvbih0aGlzLnN0ZXBEdXJhdGlvbigpKS5kZWxheSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gbi5zdGFydERlbGF5KCkrciplfSkpLmF0dHJzKGUpfSx0LnByb3RvdHlwZS5zdGFydERlbGF5PWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX3N0YXJ0RGVsYXk6KHRoaXMuX3N0YXJ0RGVsYXk9dCx0aGlzKX0sdC5wcm90b3R5cGUuc3RlcER1cmF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P01hdGgubWluKHRoaXMuX3N0ZXBEdXJhdGlvbix0aGlzLl9tYXhUb3RhbER1cmF0aW9uKToodGhpcy5fc3RlcER1cmF0aW9uPXQsdGhpcyl9LHQucHJvdG90eXBlLnN0ZXBEZWxheT1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9zdGVwRGVsYXk6KHRoaXMuX3N0ZXBEZWxheT10LHRoaXMpfSx0LnByb3RvdHlwZS5tYXhUb3RhbER1cmF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX21heFRvdGFsRHVyYXRpb246KHRoaXMuX21heFRvdGFsRHVyYXRpb249dCx0aGlzKX0sdC5wcm90b3R5cGUuZWFzaW5nTW9kZT1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9lYXNpbmdNb2RlOih0aGlzLl9lYXNpbmdNb2RlPXQsdGhpcyl9LHQucHJvdG90eXBlLl9nZXRFYXNlRmFjdG9yeT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZWFzaW5nTW9kZSgpO2lmKCJzdHJpbmciPT10eXBlb2YgdCl7dmFyIGU9blt0XTtyZXR1cm4gbnVsbD09ZT9uLmxpbmVhcjplfXJldHVybiB0fSx0LnByb3RvdHlwZS5fZ2V0QWRqdXN0ZWRJdGVyYXRpdmVEZWxheT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLm1heFRvdGFsRHVyYXRpb24oKS10aGlzLnN0ZXBEdXJhdGlvbigpLG49KGU9TWF0aC5tYXgoZSwwKSkvTWF0aC5tYXgodC0xLDEpO3JldHVybiBNYXRoLm1pbih0aGlzLnN0ZXBEZWxheSgpLG4pfSx0Ll9ERUZBVUxUX1NUQVJUX0RFTEFZX01JTExJU0VDT05EUz0wLHQuX0RFRkFVTFRfU1RFUF9EVVJBVElPTl9NSUxMSVNFQ09ORFM9MzAwLHQuX0RFRkFVTFRfSVRFUkFUSVZFX0RFTEFZX01JTExJU0VDT05EUz0xNSx0Ll9ERUZBVUxUX01BWF9UT1RBTF9EVVJBVElPTl9NSUxMSVNFQ09ORFM9MS8wLHQuX0RFRkFVTFRfRUFTSU5HX01PREU9ImV4cE91dCIsdH0pKCk7ZS5FYXNpbmc9aX0pKSx6ZnQ9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS50b3RhbFRpbWU9ZnVuY3Rpb24odCl7cmV0dXJuIDB9LHQucHJvdG90eXBlLmFuaW1hdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4odD1OZnQuY29lcmNlRXh0ZXJuYWxEMyh0KSkuYXR0cnMoZSl9LHR9KSgpO2UuTnVsbD1ufSkpLERmdD14ZShZTyksQmZ0PWJlKChmdW5jdGlvbih0LGUpewovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksRGZ0Ll9fZXhwb3J0U3RhcihSZnQsZSksRGZ0Ll9fZXhwb3J0U3Rhcih6ZnQsZSl9KSksSGZ0PWJlKChmdW5jdGlvbih0LGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuY2FjaGU9e30sdGhpcy5jb21wdXRlPXR9cmV0dXJuIHQucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jYWNoZS5oYXNPd25Qcm9wZXJ0eSh0KXx8KHRoaXMuY2FjaGVbdF09dGhpcy5jb21wdXRlKHQpKSx0aGlzLmNhY2hlW3RdfSx0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNhY2hlPXt9LHRoaXN9LHR9KSgpO2UuQ2FjaGU9bn0pKSxGZnQ9YmUoKGZ1bmN0aW9uKHQsZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPShmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQuYXJyYXlFcT1mdW5jdGlvbih0LGUpe2lmKG51bGw9PXR8fG51bGw9PWUpcmV0dXJuIHQ9PT1lO2lmKHQubGVuZ3RoIT09ZS5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspaWYodFtuXSE9PWVbbl0pcmV0dXJuITE7cmV0dXJuITB9LHQub2JqRXE9ZnVuY3Rpb24oZSxuKXtpZihudWxsPT1lfHxudWxsPT1uKXJldHVybiBlPT09bjt2YXIgaT1PYmplY3Qua2V5cyhlKS5zb3J0KCkscj1PYmplY3Qua2V5cyhuKS5zb3J0KCksbz1pLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGVbdF19KSksYT1yLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIG5bdF19KSk7cmV0dXJuIHQuYXJyYXlFcShpLHIpJiZ0LmFycmF5RXEobyxhKX0sdC5zdHJpY3RFcT1mdW5jdGlvbih0LGUpe3JldHVybiB0PT09ZX0sdC5kZWZhdWx0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9W10sbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspZVtuLTFdPWFyZ3VtZW50c1tuXTtpZihudWxsPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjb252ZXJ0IHVuZGVmaW5lZCBvciBudWxsIHRvIG9iamVjdCIpO3ZhciBpPU9iamVjdCh0KTtyZXR1cm4gZS5mb3JFYWNoKChmdW5jdGlvbih0KXtpZihudWxsIT10KWZvcih2YXIgZSBpbiB0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGUpJiYoaVtlXT10W2VdKX0pKSxpfSx0fSkoKTtlLk1ldGhvZHM9bn0pKSxWZnQ9YmUoKGZ1bmN0aW9uKHQsZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPShmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQuY29tYmluZVdoaXRlc3BhY2U9ZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZSgvWyBcdF0rL2csIiAiKX0sdC5pc05vdEVtcHR5U3RyaW5nPWZ1bmN0aW9uKHQpe3JldHVybiB0JiYiIiE9PXQudHJpbSgpfSx0LnRyaW1TdGFydD1mdW5jdGlvbihlLG4pe2lmKCFlKXJldHVybiBlO3ZhciBpPWUuc3BsaXQoIiIpLHI9bj9mdW5jdGlvbihlKXtyZXR1cm4gZS5zcGxpdChuKS5zb21lKHQuaXNOb3RFbXB0eVN0cmluZyl9OnQuaXNOb3RFbXB0eVN0cmluZztyZXR1cm4gaS5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIodCtlKT90K2U6dH0pLCIiKX0sdC50cmltRW5kPWZ1bmN0aW9uKGUsbil7aWYoIWUpcmV0dXJuIGU7dmFyIGk9ZS5zcGxpdCgiIik7cmV0dXJuIGkucmV2ZXJzZSgpLChpPXQudHJpbVN0YXJ0KGkuam9pbigiIiksbikuc3BsaXQoIiIpKS5yZXZlcnNlKCksaS5qb2luKCIiKX0sdH0pKCk7ZS5TdHJpbmdNZXRob2RzPW59KSksVWZ0PWJlKChmdW5jdGlvbih0LGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5Xb3JkRGl2aWRlclJlZ0V4cD1uZXcgUmVnRXhwKCJcXFciKSx0aGlzLldoaXRlc3BhY2VSZWdFeHA9bmV3IFJlZ0V4cCgiXFxzIil9cmV0dXJuIHQucHJvdG90eXBlLnRva2VuaXplPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHQuc3BsaXQoIiIpLnJlZHVjZSgoZnVuY3Rpb24odCxuKXtyZXR1cm4gdC5zbGljZSgwLC0xKS5jb25jYXQoZS5zaG91bGRDcmVhdGVOZXdUb2tlbih0W3QubGVuZ3RoLTFdLG4pKX0pLFsiIl0pfSx0LnByb3RvdHlwZS5zaG91bGRDcmVhdGVOZXdUb2tlbj1mdW5jdGlvbih0LGUpe2lmKCF0KXJldHVybltlXTt2YXIgbj10W3QubGVuZ3RoLTFdO3JldHVybiB0aGlzLldoaXRlc3BhY2VSZWdFeHAudGVzdChuKSYmdGhpcy5XaGl0ZXNwYWNlUmVnRXhwLnRlc3QoZSk/W3QrZV06dGhpcy5XaGl0ZXNwYWNlUmVnRXhwLnRlc3Qobil8fHRoaXMuV2hpdGVzcGFjZVJlZ0V4cC50ZXN0KGUpP1t0LGVdOnRoaXMuV29yZERpdmlkZXJSZWdFeHAudGVzdChuKT9uPT09ZT9bdCtlXTpbdCxlXTpbdCtlXX0sdH0pKCk7ZS5Ub2tlbml6ZXI9bn0pKSxqZnQ9YmUoKGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gbih0KXtmb3IodmFyIG4gaW4gdCllLmhhc093blByb3BlcnR5KG4pfHwoZVtuXT10W25dKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksbihIZnQpLG4oRmZ0KSxuKFZmdCksbihVZnQpfSkpLEdmdD1iZSgoZnVuY3Rpb24odCxlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49e3RleHRSb3RhdGlvbjowLHRleHRTaGVhcjowLHhBbGlnbjoibGVmdCIseUFsaWduOiJ0b3AifSxpPShmdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuX21lYXN1cmVyPXQsdGhpcy5fcGVuRmFjdG9yeT1lLHRoaXMuX3dyYXBwZXI9bn1yZXR1cm4gdC5wcm90b3R5cGUubWVhc3VyZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX21lYXN1cmVyPXQsdGhpc30sdC5wcm90b3R5cGUud3JhcHBlcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fd3JhcHBlcj10LHRoaXN9LHQucHJvdG90eXBlLnBlbkZhY3Rvcnk9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BlbkZhY3Rvcnk9dCx0aGlzfSx0LnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihlLGkscixvLGEpe2lmKHZvaWQgMD09PW8mJihvPXt9KSxvPWpmdC5NZXRob2RzLmRlZmF1bHRzKHt9LG4sbyksLTE9PT10LlN1cHBvcnRlZFJvdGF0aW9uLmluZGV4T2Yoby50ZXh0Um90YXRpb24pKXRocm93IG5ldyBFcnJvcigidW5zdXBwb3J0ZWQgcm90YXRpb24gLSAiK28udGV4dFJvdGF0aW9uKyIuIFN1cHBvcnRlZCByb3RhdGlvbnMgYXJlICIrdC5TdXBwb3J0ZWRSb3RhdGlvbi5qb2luKCIsICIpKTtpZihudWxsIT1vLnRleHRTaGVhciYmby50ZXh0U2hlYXI8LTgwfHxvLnRleHRTaGVhcj44MCl0aHJvdyBuZXcgRXJyb3IoInVuc3VwcG9ydGVkIHNoZWFyIGFuZ2xlIC0gIitvLnRleHRTaGVhcisiLiBNdXN0IGJlIGJldHdlZW4gLTgwIGFuZCA4MCIpO3ZhciBzPU1hdGguYWJzKE1hdGguYWJzKG8udGV4dFJvdGF0aW9uKS05MCk+NDUsbD1zP2k6cixjPXM/cjppLHU9by50ZXh0U2hlYXIsaD11Kk1hdGguUEkvMTgwLGQ9dGhpcy5fbWVhc3VyZXIubWVhc3VyZSgpLmhlaWdodCxwPWQqTWF0aC50YW4oaCksZj1sL01hdGguY29zKGgpLU1hdGguYWJzKHApLG09YypNYXRoLmNvcyhoKSxnPWpmdC5TdHJpbmdNZXRob2RzLmNvbWJpbmVXaGl0ZXNwYWNlKGUpLF89KHRoaXMuX3dyYXBwZXI/dGhpcy5fd3JhcHBlci53cmFwKGcsdGhpcy5fbWVhc3VyZXIsZixtKS53cmFwcGVkVGV4dDpnKS5zcGxpdCgiXG4iKSx5PXQuWE9mZnNldEZhY3RvcltvLnhBbGlnbl0qZipNYXRoLnNpbihoKS10LllPZmZzZXRGYWN0b3Jbby55QWxpZ25dKihtLV8ubGVuZ3RoKmQpLHY9WzAsMF0sYj1vLnRleHRSb3RhdGlvbit1O3N3aXRjaChvLnRleHRSb3RhdGlvbil7Y2FzZSA5MDp2PVtpK3ksMF07YnJlYWs7Y2FzZS05MDp2PVsteSxyXTticmVhaztjYXNlIDE4MDp2PVtpLHIreV07YnJlYWs7ZGVmYXVsdDp2PVswLC15XX12YXIgeD10aGlzLl9wZW5GYWN0b3J5LmNyZWF0ZVBlbihlLHt0cmFuc2xhdGU6dixyb3RhdGU6Yn0sYSk7dGhpcy53cml0ZUxpbmVzKF8seCxmLGQscCxvLnhBbGlnbiksbnVsbCE9eC5kZXN0cm95JiZ4LmRlc3Ryb3koKX0sdC5wcm90b3R5cGUud3JpdGVMaW5lcz1mdW5jdGlvbih0LGUsbixpLHIsbyl7dC5mb3JFYWNoKChmdW5jdGlvbih0LGEpe2Uud3JpdGUodCxuLG8scj4wPyhhKzEpKnI6YSpyLChhKzEpKmkpfSkpfSx0fSkoKTtpLlhPZmZzZXRGYWN0b3I9e2NlbnRlcjouNSxsZWZ0OjAscmlnaHQ6MX0saS5ZT2Zmc2V0RmFjdG9yPXtib3R0b206MSxjZW50ZXI6LjUsdG9wOjB9LGkuU3VwcG9ydGVkUm90YXRpb249Wy05MCwwLDE4MCw5MF0sZS5Xcml0ZXI9aX0pKSxXZnQ9YmUoKGZ1bmN0aW9uKHQsZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLChmdW5jdGlvbiBuKHQpe2Zvcih2YXIgbiBpbiB0KWUuaGFzT3duUHJvcGVydHkobil8fChlW25dPXRbbl0pfSkoR2Z0KX0pKSxxZnQ9YmUoKGZ1bmN0aW9uKHQsZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPShmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQuYXBwZW5kPWZ1bmN0aW9uKGUsbil7Zm9yKHZhciBpPVtdLHI9MjtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKWlbci0yXT1hcmd1bWVudHNbcl07dmFyIG89dC5jcmVhdGUuYXBwbHkodCxbbl0uY29uY2F0KGkpKTtyZXR1cm4gZS5hcHBlbmRDaGlsZChvKSxvfSx0LmNyZWF0ZT1mdW5jdGlvbihlKXtmb3IodmFyIG49W10saT0xO2k8YXJndW1lbnRzLmxlbmd0aDtpKyspbltpLTFdPWFyZ3VtZW50c1tpXTt2YXIgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGUpO3JldHVybiB0LmFkZENsYXNzZXMuYXBwbHkodCxbcl0uY29uY2F0KG4pKSxyfSx0LmFkZENsYXNzZXM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbi0xXT1hcmd1bWVudHNbbl07ZT1lLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPXR9KSksbnVsbCE9dC5jbGFzc0xpc3Q/ZS5mb3JFYWNoKChmdW5jdGlvbihlKXt0LmNsYXNzTGlzdC5hZGQoZSl9KSk6dC5zZXRBdHRyaWJ1dGUoImNsYXNzIixlLmpvaW4oIiAiKSl9LHQuZ2V0RGltZW5zaW9ucz1mdW5jdGlvbih0KXtpZih0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCl0cnl7dmFyIGU9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57d2lkdGg6ZS53aWR0aCxoZWlnaHQ6ZS5oZWlnaHR9fWNhdGNoKHQpe31yZXR1cm57aGVpZ2h0OjAsd2lkdGg6MH19LHR9KSgpO2UuSHRtbFV0aWxzPW47dmFyIGk9KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsaSl7dm9pZCAwPT09aSYmKGk9ITEpO3ZhciByPXRoaXM7dGhpcy5lbGVtZW50PXQsdGhpcy5jbGFzc05hbWU9ZSx0aGlzLmFkZFRpdGxlPWksdGhpcy5jcmVhdGVSdWxlcj1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT1uLmFwcGVuZChyLmVsZW1lbnQsInNwYW4iLCJ0ZXh0LXRtcCIsci5jbGFzc05hbWUpO2UudGV4dENvbnRlbnQ9dDt2YXIgaT1uLmdldERpbWVuc2lvbnMoZSk7cmV0dXJuIHIuZWxlbWVudC5yZW1vdmVDaGlsZChlKSxpfX0sdGhpcy5jcmVhdGVQZW49ZnVuY3Rpb24odCxlLGkpe251bGw9PWkmJihpPXIuZWxlbWVudCk7dmFyIG89bi5hcHBlbmQoaSwiZGl2IiwidGV4dC1ibG9jayIsci5jbGFzc05hbWUpO3JldHVybiBvLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIsby5zdHlsZS50cmFuc2Zvcm09InRyYW5zbGF0ZSgwLCAtMWVtKSB0cmFuc2xhdGUoIitlLnRyYW5zbGF0ZVswXSsicHgsICIrZS50cmFuc2xhdGVbMV0rInB4KSByb3RhdGUoIitlLnJvdGF0ZSsiZGVnKSIsby5zdHlsZS50cmFuc2Zvcm1PcmlnaW49IjAgMS4yZW0iLHIuYWRkVGl0bGUmJm8uc2V0QXR0cmlidXRlKCJ0aXRsZSIsdCksci5jcmVhdGVIdG1sTGluZVBlbihvKX19cmV0dXJuIHQucHJvdG90eXBlLnNldEFkZFRpdGxlPWZ1bmN0aW9uKHQpe3RoaXMuYWRkVGl0bGU9dH0sdC5wcm90b3R5cGUuY3JlYXRlSHRtbExpbmVQZW49ZnVuY3Rpb24odCl7cmV0dXJue3dyaXRlOmZ1bmN0aW9uKGUsaSxyLG8sYSl7dmFyIHM9bi5hcHBlbmQodCwiZGl2IiwidGV4dC1saW5lIik7cy50ZXh0Q29udGVudD1lLHMuc3R5bGUud2lkdGg9aSsicHgiLHMuc3R5bGUudGV4dEFsaWduPXIscy5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHMuc3R5bGUud2hpdGVTcGFjZT0ibm93cmFwIixzLnN0eWxlLnRvcD1hKyJweCIscy5zdHlsZS5sZWZ0PW8rInB4In19fSx0fSkoKTtlLkh0bWxDb250ZXh0PWl9KSksWWZ0PWJlKChmdW5jdGlvbih0LGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LmFwcGVuZD1mdW5jdGlvbihlLG4pe2Zvcih2YXIgaT1bXSxyPTI7cjxhcmd1bWVudHMubGVuZ3RoO3IrKylpW3ItMl09YXJndW1lbnRzW3JdO3ZhciBvPXQuY3JlYXRlLmFwcGx5KHQsW25dLmNvbmNhdChpKSk7cmV0dXJuIGUuYXBwZW5kQ2hpbGQobyksb30sdC5jcmVhdGU9ZnVuY3Rpb24oZSl7Zm9yKHZhciBuPVtdLGk9MTtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKW5baS0xXT1hcmd1bWVudHNbaV07dmFyIHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHQuU1ZHX05TLGUpO3JldHVybiBxZnQuSHRtbFV0aWxzLmFkZENsYXNzZXMuYXBwbHkocWZ0Lkh0bWxVdGlscyxbcl0uY29uY2F0KG4pKSxyfSx0LmdldERpbWVuc2lvbnM9ZnVuY3Rpb24odCl7aWYodC5nZXRCQm94KXRyeXt2YXIgZT10LmdldEJCb3goKTtyZXR1cm57d2lkdGg6ZS53aWR0aCxoZWlnaHQ6ZS5oZWlnaHR9fWNhdGNoKHQpe31yZXR1cm57aGVpZ2h0OjAsd2lkdGg6MH19LHR9KSgpO24uU1ZHX05TPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsZS5TdmdVdGlscz1uO3ZhciBpPShmdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLGkpe3ZvaWQgMD09PWkmJihpPSExKTt2YXIgcj10aGlzO3RoaXMuZWxlbWVudD10LHRoaXMuY2xhc3NOYW1lPWUsdGhpcy5hZGRUaXRsZUVsZW1lbnQ9aSx0aGlzLmNyZWF0ZVJ1bGVyPWZ1bmN0aW9uKCl7dmFyIHQ9ci5nZXRUZXh0RWxlbWVudHMoci5lbGVtZW50KSxlPXQucGFyZW50RWxlbWVudCxpPXQuY29udGFpbmVyRWxlbWVudCxvPXQudGV4dEVsZW1lbnQ7cmV0dXJuIGZ1bmN0aW9uKHQpe2UuYXBwZW5kQ2hpbGQoaSksby50ZXh0Q29udGVudD10O3ZhciByPW4uZ2V0RGltZW5zaW9ucyhvKTtyZXR1cm4gZS5yZW1vdmVDaGlsZChpKSxyfX0sdGhpcy5jcmVhdGVQZW49ZnVuY3Rpb24odCxlLGkpe251bGw9PWkmJihpPXIuZWxlbWVudCk7dmFyIG89bi5hcHBlbmQoaSwiZyIsInRleHQtY29udGFpbmVyIixyLmNsYXNzTmFtZSk7ci5hZGRUaXRsZUVsZW1lbnQmJihuLmFwcGVuZChvLCJ0aXRsZSIpLnRleHRDb250ZW50PXQsby5zZXRBdHRyaWJ1dGUoInRpdGxlIix0KSk7dmFyIGE9bi5hcHBlbmQobywiZyIsInRleHQtYXJlYSIpO3JldHVybiBhLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrZS50cmFuc2xhdGVbMF0rIiwiK2UudHJhbnNsYXRlWzFdKyIpcm90YXRlKCIrZS5yb3RhdGUrIikiKSxyLmNyZWF0ZVN2Z0xpbmVQZW4oYSl9fXJldHVybiB0LnByb3RvdHlwZS5zZXRBZGRUaXRsZUVsZW1lbnQ9ZnVuY3Rpb24odCl7dGhpcy5hZGRUaXRsZUVsZW1lbnQ9dH0sdC5wcm90b3R5cGUuY3JlYXRlU3ZnTGluZVBlbj1mdW5jdGlvbihlKXtyZXR1cm57d3JpdGU6ZnVuY3Rpb24oaSxyLG8sYSxzKXthKz1yKldmdC5Xcml0ZXIuWE9mZnNldEZhY3RvcltvXTt2YXIgbD1uLmFwcGVuZChlLCJ0ZXh0IiwidGV4dC1saW5lIik7bC50ZXh0Q29udGVudD1pLGwuc2V0QXR0cmlidXRlKCJ0ZXh0LWFuY2hvciIsdC5BbmNob3JNYXBbb10pLGwuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIithKyIsIitzKyIpIiksbC5zZXRBdHRyaWJ1dGUoInkiLCItMC4yNWVtIil9fX0sdC5wcm90b3R5cGUuZ2V0VGV4dEVsZW1lbnRzPWZ1bmN0aW9uKHQpe2lmKCJ0ZXh0Ij09PXQudGFnTmFtZSlyZXR1cm4gbnVsbD09KGU9dC5wYXJlbnRFbGVtZW50KSYmKGU9dC5wYXJlbnROb2RlKSxlLnJlbW92ZUNoaWxkKHQpLHtjb250YWluZXJFbGVtZW50OnQscGFyZW50RWxlbWVudDplLHRleHRFbGVtZW50OnR9O3ZhciBlLGk9dC5xdWVyeVNlbGVjdG9yKCJ0ZXh0Iik7aWYobnVsbCE9aSlyZXR1cm4gbnVsbD09KGU9aS5wYXJlbnRFbGVtZW50KSYmKGU9aS5wYXJlbnROb2RlKSxlLnJlbW92ZUNoaWxkKGkpLHtjb250YWluZXJFbGVtZW50OmkscGFyZW50RWxlbWVudDplLHRleHRFbGVtZW50Oml9O3ZhciByPW4uY3JlYXRlKCJ0ZXh0Iix0aGlzLmNsYXNzTmFtZSk7cmV0dXJue2NvbnRhaW5lckVsZW1lbnQ6cixwYXJlbnRFbGVtZW50OnQsdGV4dEVsZW1lbnQ6cn19LHR9KSgpO2kuQW5jaG9yTWFwPXtjZW50ZXI6Im1pZGRsZSIsbGVmdDoic3RhcnQiLHJpZ2h0OiJlbmQifSxlLlN2Z0NvbnRleHQ9aX0pKSxYZnQ9YmUoKGZ1bmN0aW9uKHQsZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPShmdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3ZvaWQgMD09PWUmJihlPTEwKSx2b2lkIDA9PT1uJiYobj17fSk7dmFyIGk9dGhpczt0aGlzLmN0eD10LHRoaXMubGluZUhlaWdodD1lLHRoaXMuc3R5bGU9bix0aGlzLmNyZWF0ZVJ1bGVyPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBpLmN0eC5mb250PWkuc3R5bGUuZm9udCx7d2lkdGg6aS5jdHgubWVhc3VyZVRleHQodCkud2lkdGgsaGVpZ2h0OmkubGluZUhlaWdodH19fSx0aGlzLmNyZWF0ZVBlbj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIG51bGw9PW4mJihuPWkuY3R4KSxuLnNhdmUoKSxuLnRyYW5zbGF0ZShlLnRyYW5zbGF0ZVswXSxlLnRyYW5zbGF0ZVsxXSksbi5yb3RhdGUoZS5yb3RhdGUqTWF0aC5QSS8xODApLGkuY3JlYXRlQ2FudmFzUGVuKG4pfSx2b2lkIDA9PT10aGlzLnN0eWxlLmZpbGwmJih0aGlzLnN0eWxlLmZpbGw9IiM0NDQiKX1yZXR1cm4gdC5wcm90b3R5cGUuY3JlYXRlQ2FudmFzUGVuPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJue2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0LnJlc3RvcmUoKX0sd3JpdGU6ZnVuY3Rpb24obixpLHIsbyxhKXtvKz1pKldmdC5Xcml0ZXIuWE9mZnNldEZhY3RvcltyXSx0LnRleHRBbGlnbj1yLG51bGwhPWUuc3R5bGUuZm9udCYmKHQuZm9udD1lLnN0eWxlLmZvbnQpLG51bGwhPWUuc3R5bGUuZmlsbCYmKHQuZmlsbFN0eWxlPWUuc3R5bGUuZmlsbCx0LmZpbGxUZXh0KG4sbyxhKSksbnVsbCE9ZS5zdHlsZS5zdHJva2UmJih0LnN0cm9rZVN0eWxlPWUuc3R5bGUuZmlsbCx0LnN0cm9rZVRleHQobixvLGEpKX19fSx0fSkoKTtlLkNhbnZhc0NvbnRleHQ9bn0pKSwkZnQ9YmUoKGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gbih0KXtmb3IodmFyIG4gaW4gdCllLmhhc093blByb3BlcnR5KG4pfHwoZVtuXT10W25dKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksbihZZnQpLG4oWGZ0KSxuKHFmdCl9KSksS2Z0PWJlKChmdW5jdGlvbih0LGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMucnVsZXI9bnVsbCE9dC5jcmVhdGVSdWxlcj90LmNyZWF0ZVJ1bGVyKCk6dH1yZXR1cm4gdC5wcm90b3R5cGUubWVhc3VyZT1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9dC5IRUlHSFRfVEVYVCksdGhpcy5ydWxlcihlKX0sdH0pKCk7bi5IRUlHSFRfVEVYVD0iYmRwcWwiLGUuQWJzdHJhY3RNZWFzdXJlcj1ufSkpLFpmdD1iZSgoZnVuY3Rpb24odCxlKXt2YXIgbj12ZSYmdmUuX19leHRlbmRzfHwoZnVuY3Rpb24oKXt2YXIgdD1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24odCxlKXt0Ll9fcHJvdG9fXz1lfXx8ZnVuY3Rpb24odCxlKXtmb3IodmFyIG4gaW4gZSllLmhhc093blByb3BlcnR5KG4pJiYodFtuXT1lW25dKX07cmV0dXJuIGZ1bmN0aW9uKGUsbil7ZnVuY3Rpb24gaSgpe3RoaXMuY29uc3RydWN0b3I9ZX10KGUsbiksZS5wcm90b3R5cGU9bnVsbD09PW4/T2JqZWN0LmNyZWF0ZShuKTooaS5wcm90b3R5cGU9bi5wcm90b3R5cGUsbmV3IGkpfX0pKCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBpPShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dm9pZCAwPT09biYmKG49ITEpO3ZhciBpPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiBpLnVzZUd1YXJkcz1uLGl9cmV0dXJuIG4oZSx0KSxlLnByb3RvdHlwZS5fYWRkR3VhcmRzPWZ1bmN0aW9uKHQpe3JldHVybiBLZnQuQWJzdHJhY3RNZWFzdXJlci5IRUlHSFRfVEVYVCt0K0tmdC5BYnN0cmFjdE1lYXN1cmVyLkhFSUdIVF9URVhUfSxlLnByb3RvdHlwZS5fbWVhc3VyZUxpbmU9ZnVuY3Rpb24oZSxuKXt2b2lkIDA9PT1uJiYobj0hMSk7dmFyIGk9dGhpcy51c2VHdWFyZHN8fG58fC9eW1x0IF0kLy50ZXN0KGUpLHI9aT90aGlzLl9hZGRHdWFyZHMoZSk6ZSxvPXQucHJvdG90eXBlLm1lYXN1cmUuY2FsbCh0aGlzLHIpO3JldHVybiBvLndpZHRoLT1pPzIqdGhpcy5nZXRHdWFyZFdpZHRoKCk6MCxvfSxlLnByb3RvdHlwZS5tZWFzdXJlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYodm9pZCAwPT09dCYmKHQ9S2Z0LkFic3RyYWN0TWVhc3VyZXIuSEVJR0hUX1RFWFQpLCIiPT09dC50cmltKCkpcmV0dXJue3dpZHRoOjAsaGVpZ2h0OjB9O3ZhciBuPXQudHJpbSgpLnNwbGl0KCJcbiIpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGUuX21lYXN1cmVMaW5lKHQpfSkpO3JldHVybntoZWlnaHQ6bi5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZS5oZWlnaHR9KSwwKSx3aWR0aDpuLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5tYXgodCxlLndpZHRoKX0pLDApfX0sZS5wcm90b3R5cGUuZ2V0R3VhcmRXaWR0aD1mdW5jdGlvbigpe3JldHVybiBudWxsPT10aGlzLmd1YXJkV2lkdGgmJih0aGlzLmd1YXJkV2lkdGg9dC5wcm90b3R5cGUubWVhc3VyZS5jYWxsKHRoaXMpLndpZHRoKSx0aGlzLmd1YXJkV2lkdGh9LGV9KShLZnQuQWJzdHJhY3RNZWFzdXJlcik7ZS5NZWFzdXJlcj1pfSkpLEpmdD1iZSgoZnVuY3Rpb24odCxlKXt2YXIgbj12ZSYmdmUuX19leHRlbmRzfHwoZnVuY3Rpb24oKXt2YXIgdD1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24odCxlKXt0Ll9fcHJvdG9fXz1lfXx8ZnVuY3Rpb24odCxlKXtmb3IodmFyIG4gaW4gZSllLmhhc093blByb3BlcnR5KG4pJiYodFtuXT1lW25dKX07cmV0dXJuIGZ1bmN0aW9uKGUsbil7ZnVuY3Rpb24gaSgpe3RoaXMuY29uc3RydWN0b3I9ZX10KGUsbiksZS5wcm90b3R5cGU9bnVsbD09PW4/T2JqZWN0LmNyZWF0ZShuKTooaS5wcm90b3R5cGU9bi5wcm90b3R5cGUsbmV3IGkpfX0pKCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBpPShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gbihlLHQpLGUucHJvdG90eXBlLl9tZWFzdXJlQ2hhcmFjdGVyPWZ1bmN0aW9uKGUpe3JldHVybiB0LnByb3RvdHlwZS5fbWVhc3VyZUxpbmUuY2FsbCh0aGlzLGUpfSxlLnByb3RvdHlwZS5fbWVhc3VyZUxpbmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXQuc3BsaXQoIiIpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGUuX21lYXN1cmVDaGFyYWN0ZXIodCl9KSk7cmV0dXJue2hlaWdodDpuLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5tYXgodCxlLmhlaWdodCl9KSwwKSx3aWR0aDpuLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlLndpZHRofSksMCl9fSxlfSkoWmZ0Lk1lYXN1cmVyKTtlLkNoYXJhY3Rlck1lYXN1cmVyPWl9KSksUWZ0PWJlKChmdW5jdGlvbih0LGUpe3ZhciBuPXZlJiZ2ZS5fX2V4dGVuZHN8fChmdW5jdGlvbigpe3ZhciB0PU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbih0LGUpe3QuX19wcm90b19fPWV9fHxmdW5jdGlvbih0LGUpe2Zvcih2YXIgbiBpbiBlKWUuaGFzT3duUHJvcGVydHkobikmJih0W25dPWVbbl0pfTtyZXR1cm4gZnVuY3Rpb24oZSxuKXtmdW5jdGlvbiBpKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfXQoZSxuKSxlLnByb3RvdHlwZT1udWxsPT09bj9PYmplY3QuY3JlYXRlKG4pOihpLnByb3RvdHlwZT1uLnByb3RvdHlwZSxuZXcgaSl9fSkoKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGk9KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgaT10LmNhbGwodGhpcyxlLG4pfHx0aGlzO3JldHVybiBpLmNhY2hlPW5ldyBqZnQuQ2FjaGUoKGZ1bmN0aW9uKHQpe3JldHVybiBpLl9tZWFzdXJlQ2hhcmFjdGVyTm90RnJvbUNhY2hlKHQpfSkpLGl9cmV0dXJuIG4oZSx0KSxlLnByb3RvdHlwZS5fbWVhc3VyZUNoYXJhY3Rlck5vdEZyb21DYWNoZT1mdW5jdGlvbihlKXtyZXR1cm4gdC5wcm90b3R5cGUuX21lYXN1cmVDaGFyYWN0ZXIuY2FsbCh0aGlzLGUpfSxlLnByb3RvdHlwZS5fbWVhc3VyZUNoYXJhY3Rlcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jYWNoZS5nZXQodCl9LGUucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5jYWNoZS5jbGVhcigpfSxlfSkoSmZ0LkNoYXJhY3Rlck1lYXN1cmVyKTtlLkNhY2hlQ2hhcmFjdGVyTWVhc3VyZXI9aX0pKSx0bXQ9YmUoKGZ1bmN0aW9uKHQsZSl7dmFyIG49dmUmJnZlLl9fZXh0ZW5kc3x8KGZ1bmN0aW9uKCl7dmFyIHQ9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKHQsZSl7dC5fX3Byb3RvX189ZX18fGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShuKSYmKHRbbl09ZVtuXSl9O3JldHVybiBmdW5jdGlvbihlLG4pe2Z1bmN0aW9uIGkoKXt0aGlzLmNvbnN0cnVjdG9yPWV9dChlLG4pLGUucHJvdG90eXBlPW51bGw9PT1uP09iamVjdC5jcmVhdGUobik6KGkucHJvdG90eXBlPW4ucHJvdG90eXBlLG5ldyBpKX19KSgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgaT0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt2YXIgbj10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gbi5kaW1DYWNoZT1uZXcgamZ0LkNhY2hlKChmdW5jdGlvbih0KXtyZXR1cm4gbi5fbWVhc3VyZU5vdEZyb21DYWNoZSh0KX0pKSxufXJldHVybiBuKGUsdCksZS5wcm90b3R5cGUuX21lYXN1cmVOb3RGcm9tQ2FjaGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHQucHJvdG90eXBlLm1lYXN1cmUuY2FsbCh0aGlzLGUpfSxlLnByb3RvdHlwZS5tZWFzdXJlPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD1LZnQuQWJzdHJhY3RNZWFzdXJlci5IRUlHSFRfVEVYVCksdGhpcy5kaW1DYWNoZS5nZXQodCl9LGUucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5kaW1DYWNoZS5jbGVhcigpLHQucHJvdG90eXBlLnJlc2V0LmNhbGwodGhpcyl9LGV9KShRZnQuQ2FjaGVDaGFyYWN0ZXJNZWFzdXJlcik7ZS5DYWNoZU1lYXN1cmVyPWl9KSksZW10PWJlKChmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIG4odCl7Zm9yKHZhciBuIGluIHQpZS5oYXNPd25Qcm9wZXJ0eShuKXx8KGVbbl09dFtuXSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLG4oS2Z0KSxuKFFmdCksbih0bXQpLG4oSmZ0KSxuKFpmdCl9KSksbm10PWJlKChmdW5jdGlvbih0LGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5tYXhMaW5lcygxLzApLHRoaXMudGV4dFRyaW1taW5nKCJlbGxpcHNpcyIpLHRoaXMuYWxsb3dCcmVha2luZ1dvcmRzKCExKSx0aGlzLl90b2tlbml6ZXI9bmV3IGpmdC5Ub2tlbml6ZXIsdGhpcy5fYnJlYWtpbmdDaGFyYWN0ZXI9Ii0ifXJldHVybiB0LnByb3RvdHlwZS5tYXhMaW5lcz1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9tYXhMaW5lczoodGhpcy5fbWF4TGluZXM9dCx0aGlzKX0sdC5wcm90b3R5cGUudGV4dFRyaW1taW5nPWZ1bmN0aW9uKHQpe2lmKG51bGw9PXQpcmV0dXJuIHRoaXMuX3RleHRUcmltbWluZztpZigiZWxsaXBzaXMiIT09dCYmIm5vbmUiIT09dCl0aHJvdyBuZXcgRXJyb3IodCsiIC0gdW5zdXBwb3J0ZWQgdGV4dCB0cmltbWluZyBvcHRpb24uIik7cmV0dXJuIHRoaXMuX3RleHRUcmltbWluZz10LHRoaXN9LHQucHJvdG90eXBlLmFsbG93QnJlYWtpbmdXb3Jkcz1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9hbGxvd0JyZWFraW5nV29yZHM6KHRoaXMuX2FsbG93QnJlYWtpbmdXb3Jkcz10LHRoaXMpfSx0LnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciByPXRoaXM7dm9pZCAwPT09aSYmKGk9MS8wKTt2YXIgbz17bm9Ccm9rZVdvcmRzOjAsbm9MaW5lczowLG9yaWdpbmFsVGV4dDp0LHRydW5jYXRlZFRleHQ6IiIsd3JhcHBlZFRleHQ6IiJ9LGE9e2F2YWlsYWJsZUxpbmVzOk1hdGgubWluKE1hdGguZmxvb3IoaS9lLm1lYXN1cmUoKS5oZWlnaHQpLHRoaXMuX21heExpbmVzKSxhdmFpbGFibGVXaWR0aDpuLGNhbkZpdFRleHQ6ITAsY3VycmVudExpbmU6IiIsd3JhcHBpbmc6b30scz10LnNwbGl0KCJcbiIpO3JldHVybiBzLnJlZHVjZSgoZnVuY3Rpb24odCxuLGkpe3JldHVybiByLmJyZWFrTGluZVRvRml0V2lkdGgodCxuLGkhPT1zLmxlbmd0aC0xLGUpfSksYSkud3JhcHBpbmd9LHQucHJvdG90eXBlLmJyZWFrTGluZVRvRml0V2lkdGg9ZnVuY3Rpb24odCxlLG4saSl7dmFyIHI9dGhpczt0LmNhbkZpdFRleHR8fCIiPT09dC53cmFwcGluZy50cnVuY2F0ZWRUZXh0fHwodC53cmFwcGluZy50cnVuY2F0ZWRUZXh0Kz0iXG4iKSx0PXRoaXMuX3Rva2VuaXplci50b2tlbml6ZShlKS5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIud3JhcE5leHRUb2tlbihlLHQsaSl9KSx0KTt2YXIgbz1qZnQuU3RyaW5nTWV0aG9kcy50cmltRW5kKHQuY3VycmVudExpbmUpO3JldHVybiB0LndyYXBwaW5nLm5vTGluZXMrPSsoIiIhPT1vKSx0LndyYXBwaW5nLm5vTGluZXM9PT10LmF2YWlsYWJsZUxpbmVzJiYibm9uZSIhPT10aGlzLl90ZXh0VHJpbW1pbmcmJm4/dC5jYW5GaXRUZXh0PSExOnQud3JhcHBpbmcud3JhcHBlZFRleHQrPW8sdC5jdXJyZW50TGluZT0iXG4iLHR9LHQucHJvdG90eXBlLmNhbkZpdFRva2VuPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT10aGlzLHI9dC5zcGxpdCgiIikubWFwKChmdW5jdGlvbihlLG4pe3JldHVybiBuIT09dC5sZW5ndGgtMT9lK2kuX2JyZWFraW5nQ2hhcmFjdGVyOmV9KSk7cmV0dXJuIG4ubWVhc3VyZSh0KS53aWR0aDw9ZXx8ci5ldmVyeSgoZnVuY3Rpb24odCl7cmV0dXJuIG4ubWVhc3VyZSh0KS53aWR0aDw9ZX0pKX0sdC5wcm90b3R5cGUuYWRkRWxsaXBzaXM9ZnVuY3Rpb24odCxlLG4pe2lmKCJub25lIj09PXRoaXMuX3RleHRUcmltbWluZylyZXR1cm57cmVtYWluaW5nVG9rZW46IiIsd3JhcHBlZFRva2VuOnR9O3ZhciBpPXQuc3Vic3RyaW5nKDApLnRyaW0oKSxyPW4ubWVhc3VyZShpKS53aWR0aCxvPW4ubWVhc3VyZSgiLi4uIikud2lkdGgsYT10Lmxlbmd0aD4wJiYiXG4iPT09dFswXT8iXG4iOiIiO2lmKGU8PW8pe3ZhciBzPU1hdGguZmxvb3IoZS8oby8zKSk7cmV0dXJue3JlbWFpbmluZ1Rva2VuOnQsd3JhcHBlZFRva2VuOmErIi4uLiIuc3Vic3RyKDAscyl9fWZvcig7citvPmU7KWk9amZ0LlN0cmluZ01ldGhvZHMudHJpbUVuZChpLnN1YnN0cigwLGkubGVuZ3RoLTEpKSxyPW4ubWVhc3VyZShpKS53aWR0aDtyZXR1cm57cmVtYWluaW5nVG9rZW46amZ0LlN0cmluZ01ldGhvZHMudHJpbUVuZCh0LnN1YnN0cmluZyhpLmxlbmd0aCksIi0iKS50cmltKCksd3JhcHBlZFRva2VuOmEraSsiLi4uIn19LHQucHJvdG90eXBlLndyYXBOZXh0VG9rZW49ZnVuY3Rpb24odCxlLG4pe2lmKCFlLmNhbkZpdFRleHR8fGUuYXZhaWxhYmxlTGluZXM9PT1lLndyYXBwaW5nLm5vTGluZXN8fCF0aGlzLmNhbkZpdFRva2VuKHQsZS5hdmFpbGFibGVXaWR0aCxuKSlyZXR1cm4gdGhpcy5maW5pc2hXcmFwcGluZyh0LGUsbik7Zm9yKHZhciBpPXQ7aTspe3ZhciByPXRoaXMuYnJlYWtUb2tlblRvRml0SW5XaWR0aChpLGUuY3VycmVudExpbmUsZS5hdmFpbGFibGVXaWR0aCxuKTtpZihlLmN1cnJlbnRMaW5lPXIubGluZSxudWxsIT0oaT1yLnJlbWFpbmluZ1Rva2VuKSl7aWYoZS53cmFwcGluZy5ub0Jyb2tlV29yZHMrPStyLmJyZWFrV29yZCwrK2Uud3JhcHBpbmcubm9MaW5lcyxlLmF2YWlsYWJsZUxpbmVzPT09ZS53cmFwcGluZy5ub0xpbmVzKXt2YXIgbz10aGlzLmFkZEVsbGlwc2lzKGUuY3VycmVudExpbmUsZS5hdmFpbGFibGVXaWR0aCxuKTtyZXR1cm4gZS53cmFwcGluZy53cmFwcGVkVGV4dCs9by53cmFwcGVkVG9rZW4sZS53cmFwcGluZy50cnVuY2F0ZWRUZXh0Kz1vLnJlbWFpbmluZ1Rva2VuK2ksZS5jdXJyZW50TGluZT0iXG4iLGV9ZS53cmFwcGluZy53cmFwcGVkVGV4dCs9amZ0LlN0cmluZ01ldGhvZHMudHJpbUVuZChlLmN1cnJlbnRMaW5lKSxlLmN1cnJlbnRMaW5lPSJcbiJ9fXJldHVybiBlfSx0LnByb3RvdHlwZS5maW5pc2hXcmFwcGluZz1mdW5jdGlvbih0LGUsbil7aWYoZS5jYW5GaXRUZXh0JiZlLmF2YWlsYWJsZUxpbmVzIT09ZS53cmFwcGluZy5ub0xpbmVzJiYibm9uZSIhPT10aGlzLl90ZXh0VHJpbW1pbmcpe3ZhciBpPXRoaXMuYWRkRWxsaXBzaXMoZS5jdXJyZW50TGluZSt0LGUuYXZhaWxhYmxlV2lkdGgsbik7ZS53cmFwcGluZy53cmFwcGVkVGV4dCs9aS53cmFwcGVkVG9rZW4sZS53cmFwcGluZy50cnVuY2F0ZWRUZXh0Kz1pLnJlbWFpbmluZ1Rva2VuLGUud3JhcHBpbmcubm9Ccm9rZVdvcmRzKz0rKGkucmVtYWluaW5nVG9rZW4ubGVuZ3RoPHQubGVuZ3RoKSxlLndyYXBwaW5nLm5vTGluZXMrPSsoaS53cmFwcGVkVG9rZW4ubGVuZ3RoPjApLGUuY3VycmVudExpbmU9IiJ9ZWxzZSBlLndyYXBwaW5nLnRydW5jYXRlZFRleHQrPXQ7cmV0dXJuIGUuY2FuRml0VGV4dD0hMSxlfSx0LnByb3RvdHlwZS5icmVha1Rva2VuVG9GaXRJbldpZHRoPWZ1bmN0aW9uKHQsZSxuLGkscil7aWYodm9pZCAwPT09ciYmKHI9dGhpcy5fYnJlYWtpbmdDaGFyYWN0ZXIpLGkubWVhc3VyZShlK3QpLndpZHRoPD1uKXJldHVybnticmVha1dvcmQ6ITEsbGluZTplK3QscmVtYWluaW5nVG9rZW46bnVsbH07aWYoIiI9PT10LnRyaW0oKSlyZXR1cm57YnJlYWtXb3JkOiExLGxpbmU6ZSxyZW1haW5pbmdUb2tlbjoiIn07aWYoIXRoaXMuX2FsbG93QnJlYWtpbmdXb3JkcyYmIiIhPT1lLnRyaW0oKSlyZXR1cm57YnJlYWtXb3JkOiExLGxpbmU6ZSxyZW1haW5pbmdUb2tlbjp0fTtmb3IodmFyIG89MDtvPHQubGVuZ3RoJiZpLm1lYXN1cmUoZSt0LnN1YnN0cmluZygwLG8rMSkrcikud2lkdGg8PW47KSsrbzt2YXIgYT0iIjtyZXR1cm4gbz4wJiYoYT1yKSx7YnJlYWtXb3JkOm8+MCxsaW5lOmUrdC5zdWJzdHJpbmcoMCxvKSthLHJlbWFpbmluZ1Rva2VuOnQuc3Vic3RyaW5nKG8pfX0sdH0pKCk7ZS5XcmFwcGVyPW59KSksaW10PWJlKChmdW5jdGlvbih0LGUpe3ZhciBuPXZlJiZ2ZS5fX2V4dGVuZHN8fChmdW5jdGlvbigpe3ZhciB0PU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbih0LGUpe3QuX19wcm90b19fPWV9fHxmdW5jdGlvbih0LGUpe2Zvcih2YXIgbiBpbiBlKWUuaGFzT3duUHJvcGVydHkobikmJih0W25dPWVbbl0pfTtyZXR1cm4gZnVuY3Rpb24oZSxuKXtmdW5jdGlvbiBpKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfXQoZSxuKSxlLnByb3RvdHlwZT1udWxsPT09bj9PYmplY3QuY3JlYXRlKG4pOihpLnByb3RvdHlwZT1uLnByb3RvdHlwZSxuZXcgaSl9fSkoKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGk9KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBuKGUsdCksZS5wcm90b3R5cGUud3JhcD1mdW5jdGlvbihuLGkscixvKXt2YXIgYT10aGlzO2lmKHZvaWQgMD09PW8mJihvPTEvMCksbi5zcGxpdCgiXG4iKS5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlNpbmdsZUxpbmVXcmFwcGVyIGlzIGRlc2lnbmVkIHRvIHdvcmsgb25seSBvbiBzaW5nbGUgbGluZSIpO3ZhciBzPWZ1bmN0aW9uKGUpe3JldHVybiB0LnByb3RvdHlwZS53cmFwLmNhbGwoYSxuLGksZSxvKX0sbD1zKHIpO2lmKGwubm9MaW5lczwyKXJldHVybiBsO2Zvcih2YXIgYz0wLHU9cixoPTA7aDxlLk5PX1dSQVBfSVRFUkFUSU9OUyYmdT5jOysraCl7dmFyIGQ9KHUrYykvMixwPXMoZCk7dGhpcy5hcmVTYW1lUmVzdWx0cyhsLHApPyh1PWQsbD1wKTpjPWR9cmV0dXJuIGx9LGUucHJvdG90eXBlLmFyZVNhbWVSZXN1bHRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubm9MaW5lcz09PWUubm9MaW5lcyYmdC50cnVuY2F0ZWRUZXh0PT09ZS50cnVuY2F0ZWRUZXh0fSxlfSkobm10LldyYXBwZXIpO2kuTk9fV1JBUF9JVEVSQVRJT05TPTUsZS5TaW5nbGVMaW5lV3JhcHBlcj1pfSkpLHJtdD1iZSgoZnVuY3Rpb24odCxlKXtmdW5jdGlvbiBuKHQpe2Zvcih2YXIgbiBpbiB0KWUuaGFzT3duUHJvcGVydHkobil8fChlW25dPXRbbl0pfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxuKGltdCksbihubXQpfSkpLG9tdD1iZSgoZnVuY3Rpb24odCxlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmNvbnRleHQ9dCx0aGlzLm1lYXN1cmVyPW5ldyBlbXQuQ2FjaGVNZWFzdXJlcih0aGlzLmNvbnRleHQpLHRoaXMud3JhcHBlcj1uZXcgcm10LldyYXBwZXIsdGhpcy53cml0ZXI9bmV3IFdmdC5Xcml0ZXIodGhpcy5tZWFzdXJlcix0aGlzLmNvbnRleHQsdGhpcy53cmFwcGVyKX1yZXR1cm4gdC5zdmc9ZnVuY3Rpb24oZSxuLGkpe3JldHVybiBuZXcgdChuZXcgJGZ0LlN2Z0NvbnRleHQoZSxuLGkpKX0sdC5jYW52YXM9ZnVuY3Rpb24oZSxuLGkpe3JldHVybiBuZXcgdChuZXcgJGZ0LkNhbnZhc0NvbnRleHQoZSxuLGkpKX0sdC5odG1sPWZ1bmN0aW9uKGUsbixpKXtyZXR1cm4gbmV3IHQobmV3ICRmdC5IdG1sQ29udGV4dChlLG4saSkpfSx0LnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbih0LGUsbixpLHIpe3RoaXMud3JpdGVyLndyaXRlKHQsZSxuLGkscil9LHQucHJvdG90eXBlLmNsZWFyTWVhc3VyZXJDYWNoZT1mdW5jdGlvbigpe3RoaXMubWVhc3VyZXIucmVzZXQoKX0sdH0pKCk7ZS5UeXBlc2V0dGVyPW59KSksYW10PWJlKChmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIG4odCl7Zm9yKHZhciBuIGluIHQpZS5oYXNPd25Qcm9wZXJ0eShuKXx8KGVbbl09dFtuXSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLG4oJGZ0KSxuKGVtdCksbihvbXQpLG4oamZ0KSxuKHJtdCksbihXZnQpfSkpLHNtdD1iZSgoZnVuY3Rpb24odCxlKXsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPXdpbmRvdy5BcnJheTtlLmFkZD1mdW5jdGlvbiBpKHQsZSl7aWYodC5sZW5ndGghPT1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImF0dGVtcHRlZCB0byBhZGQgYXJyYXlzIG9mIHVuZXF1YWwgbGVuZ3RoIik7cmV0dXJuIHQubWFwKChmdW5jdGlvbihuLGkpe3JldHVybiB0W2ldK2VbaV19KSl9LGUudW5pcT1mdW5jdGlvbiByKHQpe3ZhciBlPWlkdC5zZXQoKSxuPVtdO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQpe2UuaGFzKFN0cmluZyh0KSl8fChlLmFkZChTdHJpbmcodCkpLG4ucHVzaCh0KSl9KSksbn0sZS5mbGF0dGVuPWZ1bmN0aW9uIG8odCl7cmV0dXJuIG4ucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSx0KX0sZS5jcmVhdGVGaWxsZWRBcnJheT1mdW5jdGlvbiBhKHQsZSl7Zm9yKHZhciBuPVtdLGk9MDtpPGU7aSsrKW5baV09ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dChpKTp0O3JldHVybiBufX0pKSxsbXQ9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj13aW5kb3cuTWF0aDtmdW5jdGlvbiBpKHQpe3ZhciBlPWlkdC5yZ2IodCksaT1mdW5jdGlvbih0KXtyZXR1cm4odC89MjU1KTw9LjAzOTI4P3QvMTIuOTI6bi5wb3coKHQrLjA1NSkvMS4wNTUsMi40KX07cmV0dXJuLjIxMjYqaShlLnIpKy43MTUyKmkoZS5nKSsuMDcyMippKGUuYil9ZS5jb250cmFzdD1mdW5jdGlvbiByKHQsZSl7dmFyIG49aSh0KSsuMDUscj1pKGUpKy4wNTtyZXR1cm4gbj5yP24vcjpyL259LGUubGlnaHRlbkNvbG9yPWZ1bmN0aW9uIG8odCxlKXtyZXR1cm4gaWR0LmNvbG9yKHQpLmJyaWdodGVyKGUpLnJnYigpLnRvU3RyaW5nKCl9LGUuY29sb3JUZXN0PWZ1bmN0aW9uIGEodCxlKXt0LmNsYXNzZWQoZSwhMCk7dmFyIG49dC5zdHlsZSgiYmFja2dyb3VuZC1jb2xvciIpO2lmKCJ0cmFuc3BhcmVudCI9PT1uKXJldHVybiBudWxsO3ZhciBpPS9cKCguKylcKS8uZXhlYyhuKTtpZighaSlyZXR1cm4gbnVsbDt2YXIgcj1pWzFdLnNwbGl0KCIsIikubWFwKChmdW5jdGlvbih0KXt2YXIgZT0rdCxuPWUudG9TdHJpbmcoMTYpO3JldHVybiBlPDE2PyIwIituOm59KSk7aWYoND09PXIubGVuZ3RoJiYiMDAiPT09clszXSlyZXR1cm4gbnVsbDt2YXIgbz0iIyIrci5qb2luKCIiKTtyZXR1cm4gdC5jbGFzc2VkKGUsITEpLG99fSkpLGNtdD1iZSgoZnVuY3Rpb24odCxlKXsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPXdpbmRvdy5NYXRoO2Z1bmN0aW9uIGkodCl7dmFyIGU7dHJ5e2U9dC5ub2RlKCkuZ2V0QkJveCgpfWNhdGNoKHQpe2U9e3g6MCx5OjAsd2lkdGg6MCxoZWlnaHQ6MH19cmV0dXJuIGV9ZS5jb250YWlucz1mdW5jdGlvbiByKHQsZSl7Zm9yKHZhciBuPWU7bnVsbCE9biYmbiE9PXQ7KW49bi5wYXJlbnROb2RlO3JldHVybiBuPT09dH0sZS5lbGVtZW50QkJveD1pLGUuZW50aXR5Qm91bmRzPWZ1bmN0aW9uIG8odCl7aWYodCBpbnN0YW5jZW9mIFNWR0VsZW1lbnQpcmV0dXJuIGkoaWR0LnNlbGVjdCh0KSk7aWYodCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KXt2YXIgZT10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybnt4OmUubGVmdCx5OmUudG9wLHdpZHRoOmUud2lkdGgsaGVpZ2h0OmUuaGVpZ2h0fX1yZXR1cm57eDowLHk6MCx3aWR0aDowLGhlaWdodDowfX0sZS5TQ1JFRU5fUkVGUkVTSF9SQVRFX01JTExJU0VDT05EUz0xZTMvNjAsZS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVQb2x5ZmlsbD1mdW5jdGlvbiBhKHQpe251bGwhPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0KTpzZXRUaW1lb3V0KHQsZS5TQ1JFRU5fUkVGUkVTSF9SQVRFX01JTExJU0VDT05EUyl9LGUuZWxlbWVudFdpZHRoPWZ1bmN0aW9uIHModCl7dmFyIGU9dCBpbnN0YW5jZW9mIGlkdC5zZWxlY3Rpb24/dC5ub2RlKCk6dCxuPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUpO3JldHVybiBtKG4sIndpZHRoIikrbShuLCJwYWRkaW5nLWxlZnQiKSttKG4sInBhZGRpbmctcmlnaHQiKSttKG4sImJvcmRlci1sZWZ0LXdpZHRoIikrbShuLCJib3JkZXItcmlnaHQtd2lkdGgiKX0sZS5lbGVtZW50SGVpZ2h0PWZ1bmN0aW9uIGwodCl7dmFyIGU9dCBpbnN0YW5jZW9mIGlkdC5zZWxlY3Rpb24/dC5ub2RlKCk6dCxuPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUpO3JldHVybiBtKG4sImhlaWdodCIpK20obiwicGFkZGluZy10b3AiKSttKG4sInBhZGRpbmctYm90dG9tIikrbShuLCJib3JkZXItdG9wLXdpZHRoIikrbShuLCJib3JkZXItYm90dG9tLXdpZHRoIil9O3ZhciBjPSIoPzpbLStdP1swLTldKlxcLj9bMC05XSspIix1PSIoPzooPzpcXHMrLD9cXHMqKXwoPzosXFxzKikpIixoPW5ldyBSZWdFeHAoInRyYW5zbGF0ZVxccypcXChcXHMqKCIrYysiKSg/OiIrdSsiKCIrYysiKSk/XFxzKlxcKSIpLGQ9bmV3IFJlZ0V4cCgicm90YXRlXFxzKlxcKFxccyooIitjKyIpXFxzKlxcKSIpLHA9bmV3IFJlZ0V4cCgic2NhbGVcXHMqXFwoXFxzKigiK2MrIikoPzoiK3UrIigiK2MrIikpP1xccypcXCkiKTtmdW5jdGlvbiBmKHQpe2lmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm57bWluOnQsbWF4OnR9O2lmKHQgaW5zdGFuY2VvZiBPYmplY3QmJiJtaW4iaW4gdCYmIm1heCJpbiB0KXJldHVybiB0O3Rocm93IG5ldyBFcnJvcigiaW5wdXQgJyIrdCsiJyBjYW4ndCBiZSBwYXJzZWQgYXMgYW4gUmFuZ2UiKX1mdW5jdGlvbiBtKHQsZSl7dmFyIG49dC5nZXRQcm9wZXJ0eVZhbHVlKGUpO3JldHVybiBwYXJzZUZsb2F0KG4pfHwwfWUuZ2V0VHJhbnNsYXRlVmFsdWVzPWZ1bmN0aW9uIGcodCl7dmFyIGU9aC5leGVjKHQuYXR0cigidHJhbnNmb3JtIikpO2lmKG51bGwhPWUpe3ZhciBuPWVbMl07cmV0dXJuWytlWzFdLCsodm9pZCAwPT09bj8wOm4pXX1yZXR1cm5bMCwwXX0sZS5nZXRSb3RhdGU9ZnVuY3Rpb24gXyh0KXt2YXIgZT1kLmV4ZWModC5hdHRyKCJ0cmFuc2Zvcm0iKSk7cmV0dXJuIG51bGwhPWU/K2VbMV06MH0sZS5nZXRTY2FsZVZhbHVlcz1mdW5jdGlvbiB5KHQpe3ZhciBlPXAuZXhlYyh0LmF0dHIoInRyYW5zZm9ybSIpKTtpZihudWxsIT1lKXt2YXIgbj1lWzFdLGk9ZVsyXTtyZXR1cm5bK24sbnVsbD09aT8rbjoraV19cmV0dXJuWzAsMF19LGUuY2xpZW50UmVjdHNPdmVybGFwPWZ1bmN0aW9uIHYodCxlKXtyZXR1cm4hKG4uZmxvb3IodC5yaWdodCk8PW4uY2VpbChlLmxlZnQpfHxuLmNlaWwodC5sZWZ0KT49bi5mbG9vcihlLnJpZ2h0KXx8bi5mbG9vcih0LmJvdHRvbSk8PW4uY2VpbChlLnRvcCl8fG4uY2VpbCh0LnRvcCk+PW4uZmxvb3IoZS5ib3R0b20pKX0sZS5leHBhbmRSZWN0PWZ1bmN0aW9uIGIodCxlKXtyZXR1cm57bGVmdDp0LmxlZnQtZSx0b3A6dC50b3AtZSxyaWdodDp0LnJpZ2h0K2UsYm90dG9tOnQuYm90dG9tK2Usd2lkdGg6dC53aWR0aCsyKmUsaGVpZ2h0OnQuaGVpZ2h0KzIqZX19LGUuY2xpZW50UmVjdEluc2lkZT1mdW5jdGlvbiB4KHQsZSl7cmV0dXJuIG4uZmxvb3IoZS5sZWZ0KTw9bi5jZWlsKHQubGVmdCkmJm4uZmxvb3IoZS50b3ApPD1uLmNlaWwodC50b3ApJiZuLmZsb29yKHQucmlnaHQpPD1uLmNlaWwoZS5yaWdodCkmJm4uZmxvb3IodC5ib3R0b20pPD1uLmNlaWwoZS5ib3R0b20pfSxlLmludGVyc2VjdHNCQm94PWZ1bmN0aW9uIHcodCxlLG4saSl7dm9pZCAwPT09aSYmKGk9LjUpO3ZhciByPWYodCksbz1mKGUpO3JldHVybiBuLngrbi53aWR0aD49ci5taW4taSYmbi54PD1yLm1heCtpJiZuLnkrbi5oZWlnaHQ+PW8ubWluLWkmJm4ueTw9by5tYXgraX0sZS5nZXRIdG1sRWxlbWVudEFuY2VzdG9ycz1mdW5jdGlvbiBTKHQpe2Zvcih2YXIgZT1bXTt0JiZ0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQ7KWUucHVzaCh0KSx0PXQucGFyZW50RWxlbWVudDtyZXR1cm4gZX0sZS5nZXRFbGVtZW50VHJhbnNmb3JtPWZ1bmN0aW9uIE0odCl7dmFyIGU9d2luZG93LmdldENvbXB1dGVkU3R5bGUodCxudWxsKTtyZXR1cm4oZnVuY3Rpb24gbih0KXtpZihudWxsPT10fHwibm9uZSI9PT10KXJldHVybiBudWxsO3ZhciBlPXQubWF0Y2goRSk7aWYobnVsbD09ZXx8ZS5sZW5ndGg8MilyZXR1cm4gbnVsbDt2YXIgbj1lWzFdLnNwbGl0KFQpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHBhcnNlRmxvYXQodCl9KSk7cmV0dXJuIDYhPW4ubGVuZ3RoP251bGw6bn0pKGUuZ2V0UHJvcGVydHlWYWx1ZSgiLXdlYmtpdC10cmFuc2Zvcm0iKXx8ZS5nZXRQcm9wZXJ0eVZhbHVlKCItbW96LXRyYW5zZm9ybSIpfHxlLmdldFByb3BlcnR5VmFsdWUoIi1tcy10cmFuc2Zvcm0iKXx8ZS5nZXRQcm9wZXJ0eVZhbHVlKCItby10cmFuc2Zvcm0iKXx8ZS5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKSl9O3ZhciBFPS9ebWF0cml4XCgoW14pXSspXCkkLyxUPS9bLCBdKy99KSksdW10PWJlKChmdW5jdGlvbih0LGUpewovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49d2luZG93Lk1hdGgsaT1bMSwwLDAsMSwwLDBdO2Z1bmN0aW9uIHIodCxlKXtyZXR1cm5bdFswXSplWzBdK3RbMl0qZVsxXSx0WzFdKmVbMF0rdFszXSplWzFdLHRbMF0qZVsyXSt0WzJdKmVbM10sdFsxXSplWzJdK3RbM10qZVszXSx0WzBdKmVbNF0rdFsyXSplWzVdK3RbNF0sdFsxXSplWzRdK3RbM10qZVs1XSt0WzVdXX1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuW3RbMF0sdFsxXSx0WzJdLHRbM10sdFswXSplWzBdK3RbMl0qZVsxXSt0WzRdLHRbMV0qZVswXSt0WzNdKmVbMV0rdFs1XV19ZnVuY3Rpb24gYSh0KXt2YXIgZT10WzBdKnRbM10tdFsxXSp0WzJdO2lmKDA9PT1lKXRocm93IG5ldyBFcnJvcigic2luZ3VsYXIgbWF0cml4Iik7dmFyIG49MS9lO3JldHVybltuKnRbM10sbiotdFsxXSxuKi10WzJdLG4qdFswXSxuKigtdFszXSp0WzRdK3RbMl0qdFs1XSksbioodFsxXSp0WzRdKy10WzBdKnRbNV0pXX1lLmluUmFuZ2U9ZnVuY3Rpb24gcyh0LGUsaSl7cmV0dXJuIG4ubWluKGUsaSk8PXQmJnQ8PW4ubWF4KGUsaSl9LGUuY2xhbXA9ZnVuY3Rpb24gbCh0LGUsaSl7cmV0dXJuIG4ubWluKG4ubWF4KGUsdCksaSl9LGUubWF4PWZ1bmN0aW9uIGModCxlLG4pe3ZhciBpPSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6bnVsbCxyPW51bGw9PWk/ZTpuLG89bnVsbD09aT9pZHQubWF4KHQpOmlkdC5tYXgodCxpKTtyZXR1cm4gdm9pZCAwIT09bz9vOnJ9LGUubWluPWZ1bmN0aW9uIHUodCxlLG4pe3ZhciBpPSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6bnVsbCxyPW51bGw9PWk/ZTpuLG89bnVsbD09aT9pZHQubWluKHQpOmlkdC5taW4odCxpKTtyZXR1cm4gdm9pZCAwIT09bz9vOnJ9LGUuaXNOYU49ZnVuY3Rpb24gaCh0KXtyZXR1cm4gdCE9dH0sZS5pc1ZhbGlkTnVtYmVyPWZ1bmN0aW9uIGQodCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0JiZ0LXQ8MX0sZS5yYW5nZT1mdW5jdGlvbiBwKHQsZSxpKXtpZih2b2lkIDA9PT1pJiYoaT0xKSwwPT09aSl0aHJvdyBuZXcgRXJyb3IoInN0ZXAgY2Fubm90IGJlIDAiKTtmb3IodmFyIHI9bi5tYXgobi5jZWlsKChlLXQpL2kpLDApLG89W10sYT0wO2E8cjsrK2Epb1thXT10K2kqYTtyZXR1cm4gb30sZS5kaXN0YW5jZVNxdWFyZWQ9ZnVuY3Rpb24gZih0LGUpe3JldHVybiBuLnBvdyhlLnktdC55LDIpK24ucG93KGUueC10LngsMil9LGUuZGVncmVlc1RvUmFkaWFucz1mdW5jdGlvbiBtKHQpe3JldHVybiB0LzM2MCpuLlBJKjJ9LGUud2l0aGluPWZ1bmN0aW9uIGcodCxlKXtyZXR1cm4gZS50b3BMZWZ0Lng8PXQueCYmZS5ib3R0b21SaWdodC54Pj10LngmJmUudG9wTGVmdC55PD10LnkmJmUuYm90dG9tUmlnaHQueT49dC55fSxlLmJvdW5kc0ludGVyc2VjdHM9ZnVuY3Rpb24gXyh0LGUsbixpLHIsbyxhLHMpe3JldHVybiB0PD1yK2EmJnI8PXQrbiYmZTw9bytzJiZvPD1lK2l9LGUuZ2V0Q3VtdWxhdGl2ZVRyYW5zZm9ybT1mdW5jdGlvbiB5KHQpe2Zvcih2YXIgZT1jbXQuZ2V0SHRtbEVsZW1lbnRBbmNlc3RvcnModCksbj1pLHM9bnVsbCxsPTAsYz1lO2w8Yy5sZW5ndGg7bCsrKXt2YXIgdT1jW2xdLGg9Y210LmdldEVsZW1lbnRUcmFuc2Zvcm0odSk7aWYobnVsbCE9aCl7dmFyIGQ9dS5jbGllbnRXaWR0aC8yLHA9dS5jbGllbnRIZWlnaHQvMjtuPW8obixbZCxwXSksbj1vKG49cihuLGEoaCkpLFstZCwtcF0pfXZhciBmPXUuc2Nyb2xsTGVmdCxtPXUuc2Nyb2xsVG9wO251bGwhPT1zJiZ1IT09c3x8KGYtPXUub2Zmc2V0TGVmdCt1LmNsaWVudExlZnQsbS09dS5vZmZzZXRUb3ArdS5jbGllbnRUb3Ascz11Lm9mZnNldFBhcmVudCksbj1vKG4sW2YsbV0pfXJldHVybiBufSxlLm11bHRpcGx5TWF0cml4PXIsZS5wcmVtdWx0aXBseVRyYW5zbGF0ZT1mdW5jdGlvbiB2KHQsZSl7cmV0dXJuW2VbMF0sZVsxXSxlWzJdLGVbM10sZVs0XSt0WzBdLGVbNV0rdFsxXV19LGUubXVsdGlwbHlUcmFuc2xhdGU9byxlLmludmVydE1hdHJpeD1hLGUuYXBwbHlUcmFuc2Zvcm09ZnVuY3Rpb24gYih0LGUpe3JldHVybnt4OnRbMF0qZS54K3RbMl0qZS55K3RbNF0seTp0WzFdKmUueCt0WzNdKmUueSt0WzVdfX19KSksaG10PWJlKChmdW5jdGlvbih0LGUpewovKioKICAgICAqIENvcHlyaWdodCAyMDE3LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49TWF0aC5jZWlsKHQubGVuZ3RoLzIpLGk9MDtpPG47aSsrKWVbMF0uaW5zZXJ0KHRbaV0pO2ZvcihpPW47aTx0Lmxlbmd0aDtpKyspZVsxXS5pbnNlcnQodFtpXSl9LHR9KSgpO2UuU3BsaXRTdHJhdGVneVRyaXZpYWw9bjt2YXIgaT0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbih0LGUpe2Zvcih0PXQuc2xpY2UoKSx0aGlzLmNob29zZUZpcnN0U3BsaXQodCxlKTt0Lmxlbmd0aD4wOyl0aGlzLmFkZE5leHQodCxlKX0sdC5wcm90b3R5cGUuY2hvb3NlRmlyc3RTcGxpdD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0wLGk9MCxyPXQubGVuZ3RoLTEsbz10Lmxlbmd0aC0xLGE9MTthPHQubGVuZ3RoLTE7YSsrKXt2YXIgcz10W2FdO3MuYm91bmRzLnhsPnRbcl0uYm91bmRzLnhsP3I9YTpzLmJvdW5kcy54aDx0W25dLmJvdW5kcy54aCYmKG49YSkscy5ib3VuZHMueWw+dFtvXS5ib3VuZHMueWw/bz1hOnMuYm91bmRzLnloPHRbaV0uYm91bmRzLnloJiYoaT1hKX12YXIgbD1NYXRoLmFicyh0W25dLmJvdW5kcy54aC10W3JdLmJvdW5kcy54bCk+TWF0aC5hYnModFtpXS5ib3VuZHMueWgtdFtvXS5ib3VuZHMueWwpP1tuLHJdOltpLG9dLGM9bFswXSx1PWxbMV07Yz09PXUmJihjPTAsdT10Lmxlbmd0aC0xKSxlWzBdLmluc2VydCh0LnNwbGljZShNYXRoLm1heChjLHUpLDEpWzBdKSxlWzFdLmluc2VydCh0LnNwbGljZShNYXRoLm1pbihjLHUpLDEpWzBdKX0sdC5wcm90b3R5cGUuYWRkTmV4dD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj1udWxsLGk9bnVsbCxyPW51bGwsbz0wO288dC5sZW5ndGg7bysrKXt2YXIgYT10W29dLHM9ZVswXS51bmlvbkFyZWFEaWZmZXJlbmNlKGEuYm91bmRzKSxsPWVbMV0udW5pb25BcmVhRGlmZmVyZW5jZShhLmJvdW5kcyk7KHM8aXx8bnVsbD09bikmJihuPW8saT1zLHI9ZVswXSksbDxpJiYobj1vLGk9bCxyPWVbMV0pfXIuaW5zZXJ0KHQuc3BsaWNlKG4sMSlbMF0pfSx0fSkoKTtlLlNwbGl0U3RyYXRlZ3lMaW5lYXI9aX0pKSxkbXQ9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTctcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbixpPW5ldyBobXQuU3BsaXRTdHJhdGVneUxpbmVhcjtmdW5jdGlvbiByKHQsZSxpKXt2YXIgcj0xLzAsbz0xLzA7cmV0dXJuIGZ1bmN0aW9uKGEpe3ZhciBzPWUoYS5ib3VuZHMsdCksbD1pKGEuYm91bmRzLHQpO3JldHVybiBudWxsIT1hLnZhbHVlP3M8cj8ocj1zLG89bCxuLlBBU1NfQU5EX09WRVJXUklURSk6cz09PXI/bi5QQVNTOm4uRkFJTDpzPm8/bi5GQUlMOihvPU1hdGgubWF4KGwsbyksbi5QQVNTKX19ZnVuY3Rpb24gbyh0LGUpe3JldHVybiBmdW5jdGlvbihuLGkpe3JldHVybiBlKGkuYm91bmRzLHQpLWUobi5ib3VuZHMsdCl9fSEoZnVuY3Rpb24odCl7dFt0LlBBU1M9MF09IlBBU1MiLHRbdC5GQUlMPTFdPSJGQUlMIix0W3QuUEFTU19BTkRfT1ZFUldSSVRFPTJdPSJQQVNTX0FORF9PVkVSV1JJVEUifSkobj1lLlF1ZXJ5UHJlZGljYXRlUmVzdWx0fHwoZS5RdWVyeVByZWRpY2F0ZVJlc3VsdD17fSkpLGUuY3JlYXRlTWluaW1pemluZ05vZGVQcmVkaWNhdGU9cixlLmNyZWF0ZU5vZGVTb3J0PW87dmFyIGE9KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3ZvaWQgMD09PXQmJih0PTUpLHZvaWQgMD09PWUmJihlPWkpLHRoaXMubWF4Tm9kZUNoaWxkcmVuPXQsdGhpcy5zcGxpdFN0cmF0ZWd5PWUsdGhpcy5yb290PW5ldyBzKCEwKSx0aGlzLnNpemU9MH1yZXR1cm4gdC5wcm90b3R5cGUuZ2V0Um9vdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJvb3R9LHQucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5yb290PW5ldyBzKCEwKSx0aGlzLnNpemU9MH0sdC5wcm90b3R5cGUuaW5zZXJ0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXRoaXMucm9vdDshbi5sZWFmOyluPW4uc3VidHJlZSh0KTt2YXIgaT1zLnZhbHVlTm9kZSh0LGUpO2ZvcihuLmluc2VydChpKSx0aGlzLnNpemUrPTE7bi5vdmVyZmxvdyh0aGlzLm1heE5vZGVDaGlsZHJlbik7KW51bGw9PShuPW4uc3BsaXQodGhpcy5zcGxpdFN0cmF0ZWd5KSkucGFyZW50JiYodGhpcy5yb290PW4pO3JldHVybiBpfSx0LnByb3RvdHlwZS5sb2NhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucXVlcnkoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmNvbnRhaW5zKHQpfSkpfSx0LnByb3RvdHlwZS5sb2NhdGVOZWFyZXN0PWZ1bmN0aW9uKHQpe3ZhciBlPXIodCxsLmRpc3RhbmNlU3F1YXJlZFRvTmVhckVkZ2UsbC5kaXN0YW5jZVNxdWFyZWRUb0ZhckVkZ2UpO3JldHVybiB0aGlzLnF1ZXJ5Tm9kZXMoZSkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC52YWx1ZX0pKX0sdC5wcm90b3R5cGUubG9jYXRlTmVhcmVzdFg9ZnVuY3Rpb24odCl7dmFyIGU9cih0LGwuYWJzb2x1dGVEaXN0YW5jZVRvTmVhckVkZ2VYLGwuYWJzb2x1dGVEaXN0YW5jZVRvRmFyRWRnZVgpLG49dGhpcy5xdWVyeU5vZGVzKGUpO3JldHVybiBuLnNvcnQobyh0LGwuYWJzb2x1dGVEaXN0YW5jZVRvTmVhckVkZ2VZKSksbi5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnZhbHVlfSkpfSx0LnByb3RvdHlwZS5sb2NhdGVOZWFyZXN0WT1mdW5jdGlvbih0KXt2YXIgZT1yKHQsbC5hYnNvbHV0ZURpc3RhbmNlVG9OZWFyRWRnZVksbC5hYnNvbHV0ZURpc3RhbmNlVG9GYXJFZGdlWSksbj10aGlzLnF1ZXJ5Tm9kZXMoZSk7cmV0dXJuIG4uc29ydChvKHQsbC5hYnNvbHV0ZURpc3RhbmNlVG9OZWFyRWRnZVgpKSxuLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQudmFsdWV9KSl9LHQucHJvdG90eXBlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5xdWVyeSgoZnVuY3Rpb24oZSl7cmV0dXJuIGwuaXNCb3VuZHNPdmVybGFwQm91bmRzKGUsdCl9KSl9LHQucHJvdG90eXBlLmludGVyc2VjdFg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucXVlcnkoKGZ1bmN0aW9uKGUpe3JldHVybiBsLmlzQm91bmRzT3ZlcmxhcFgoZSx0KX0pKX0sdC5wcm90b3R5cGUuaW50ZXJzZWN0WT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5xdWVyeSgoZnVuY3Rpb24oZSl7cmV0dXJuIGwuaXNCb3VuZHNPdmVybGFwWShlLHQpfSkpfSx0LnByb3RvdHlwZS5xdWVyeT1mdW5jdGlvbih0KXt2YXIgZT1bXTtpZihudWxsIT10aGlzLnJvb3QuYm91bmRzJiYhdCh0aGlzLnJvb3QuYm91bmRzKSlyZXR1cm4gZTtmb3IodmFyIG49W3RoaXMucm9vdF07bi5sZW5ndGg+MDspZm9yKHZhciBpPW4uc2hpZnQoKSxyPTA7cjxpLmVudHJpZXMubGVuZ3RoO3IrKyl7dmFyIG89aS5lbnRyaWVzW3JdO3Qoby5ib3VuZHMpJiYoaS5sZWFmP2UucHVzaChvLnZhbHVlKTpuLnB1c2gobykpfXJldHVybiBlfSx0LnByb3RvdHlwZS5xdWVyeU5vZGVzPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO2lmKG51bGwhPXRoaXMucm9vdC5ib3VuZHMmJnQodGhpcy5yb290KT09PW4uRkFJTClyZXR1cm4gZTtmb3IodmFyIGk9W3RoaXMucm9vdF07aS5sZW5ndGg+MDspZm9yKHZhciByPWkuc2hpZnQoKSxvPTA7bzxyLmVudHJpZXMubGVuZ3RoO28rKyl7dmFyIGE9ci5lbnRyaWVzW29dLHM9dChhKTtzPT09bi5QQVNTX0FORF9PVkVSV1JJVEUmJihlPVtdKSxzIT09bi5QQVNTJiZzIT09bi5QQVNTX0FORF9PVkVSV1JJVEV8fChyLmxlYWY/ZS5wdXNoKGEpOmkucHVzaChhKSl9cmV0dXJuIGV9LHR9KSgpO2UuUlRyZWU9YTt2YXIgcz0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMubGVhZj10LHRoaXMuYm91bmRzPW51bGwsdGhpcy5lbnRyaWVzPVtdLHRoaXMucGFyZW50PW51bGwsdGhpcy52YWx1ZT1udWxsfXJldHVybiB0LnZhbHVlTm9kZT1mdW5jdGlvbihlLG4pe3ZhciBpPW5ldyB0KCEwKTtyZXR1cm4gaS5ib3VuZHM9ZSxpLnZhbHVlPW4saX0sdC5wcm90b3R5cGUub3ZlcmZsb3c9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZW50cmllcy5sZW5ndGg+dH0sdC5wcm90b3R5cGUuaW5zZXJ0PWZ1bmN0aW9uKHQpe3RoaXMuZW50cmllcy5wdXNoKHQpLHQucGFyZW50PXRoaXM7Zm9yKHZhciBlPXRoaXM7bnVsbCE9ZTspZS5ib3VuZHM9bC51bmlvbkFsbChbZS5ib3VuZHMsdC5ib3VuZHNdKSxlPWUucGFyZW50O3JldHVybiB0aGlzfSx0LnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5lbnRyaWVzLmluZGV4T2YodCk7aWYoZT49MCl7dGhpcy5lbnRyaWVzLnNwbGljZShlLDEpO2Zvcih2YXIgbj10aGlzO251bGwhPW47KW4uYm91bmRzPWwudW5pb25BbGwobi5lbnRyaWVzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuYm91bmRzfSkpKSxuPW4ucGFyZW50fXJldHVybiB0aGlzfSx0LnByb3RvdHlwZS5zdWJ0cmVlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0xLzAsbj1udWxsLGk9MDtpPHRoaXMuZW50cmllcy5sZW5ndGg7aSsrKXt2YXIgcj10aGlzLmVudHJpZXNbaV0sbz1yLnVuaW9uQXJlYURpZmZlcmVuY2UodCk7KG88ZXx8bz09PWUmJm51bGwhPW4mJnIuZW50cmllcy5sZW5ndGg8bi5lbnRyaWVzLmxlbmd0aCkmJihuPXIpfXJldHVybiBufSx0LnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihlKXtudWxsIT10aGlzLnBhcmVudCYmdGhpcy5wYXJlbnQucmVtb3ZlKHRoaXMpO3ZhciBuPVtuZXcgdCh0aGlzLmxlYWYpLG5ldyB0KHRoaXMubGVhZildO2Uuc3BsaXQodGhpcy5lbnRyaWVzLG4pO3ZhciBpPW51bGwhPXRoaXMucGFyZW50P3RoaXMucGFyZW50Om5ldyB0KCExKTtyZXR1cm4gaS5pbnNlcnQoblswXSksaS5pbnNlcnQoblsxXSksaS5sZWFmPSExLGl9LHQucHJvdG90eXBlLnVuaW9uQXJlYURpZmZlcmVuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguYWJzKGwudW5pb24odGhpcy5ib3VuZHMsdCkuYXJlYSgpLXRoaXMuYm91bmRzLmFyZWEoKSl9LHQucHJvdG90eXBlLm1heERlcHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVhZj8xOjErdGhpcy5lbnRyaWVzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQubWF4RGVwdGgoKX0pKS5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGgubWF4KHQsZSl9KSl9LHR9KSgpO2UuUlRyZWVOb2RlPXM7dmFyIGw9KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixpKXt0aGlzLnhsPXQsdGhpcy55bD1lLHRoaXMueGg9bix0aGlzLnloPWksdGhpcy53aWR0aD10aGlzLnhoLXRoaXMueGwsdGhpcy5oZWlnaHQ9dGhpcy55aC10aGlzLnlsfXJldHVybiB0Lnh5d2g9ZnVuY3Rpb24oZSxuLGkscil7cmV0dXJuIG5ldyB0KGUsbixlK2ksbityKX0sdC5lbnRpdHlCb3VuZHM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB0KGUueCxlLnksZS54K2Uud2lkdGgsZS55K2UuaGVpZ2h0KX0sdC5ib3VuZHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHQucG9pbnRQYWlyKGUudG9wTGVmdCxlLmJvdHRvbVJpZ2h0KX0sdC5wb2ludFBhaXI9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbmV3IHQoTWF0aC5taW4oZS54LG4ueCksTWF0aC5taW4oZS55LG4ueSksTWF0aC5tYXgoZS54LG4ueCksTWF0aC5tYXgoZS55LG4ueSkpfSx0LnBvaW50cz1mdW5jdGlvbihlKXtpZihlLmxlbmd0aDwyKXRocm93IG5ldyBFcnJvcigibmVlZCBhdCBsZWFzdCAyIHBvaW50cyB0byBjcmVhdGUgYm91bmRzIik7dmFyIG49ZS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnh9KSksaT1lLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQueX0pKTtyZXR1cm4gbmV3IHQobi5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGgubWluKHQsZSl9KSksaS5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGgubWluKHQsZSl9KSksbi5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGgubWF4KHQsZSl9KSksaS5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGgubWF4KHQsZSl9KSkpfSx0LnVuaW9uPWZ1bmN0aW9uKGUsbil7cmV0dXJuIG5ldyB0KE1hdGgubWluKGUueGwsbi54bCksTWF0aC5taW4oZS55bCxuLnlsKSxNYXRoLm1heChlLnhoLG4ueGgpLE1hdGgubWF4KGUueWgsbi55aCkpfSx0LnVuaW9uQWxsPWZ1bmN0aW9uKGUpe3JldHVybiAwPT09KGU9ZS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT10fSkpKS5sZW5ndGg/bnVsbDplLnJlZHVjZSgoZnVuY3Rpb24oZSxuKXtyZXR1cm4gdC51bmlvbihlLG4pfSkpfSx0LmlzQm91bmRzT3ZlcmxhcEJvdW5kcz1mdW5jdGlvbihlLG4pe3JldHVybiB0LmlzQm91bmRzT3ZlcmxhcFgoZSxuKSYmdC5pc0JvdW5kc092ZXJsYXBZKGUsbil9LHQuaXNCb3VuZHNPdmVybGFwWD1mdW5jdGlvbih0LGUpe3JldHVybiEodC54aDxlLnhsfHx0LnhsPmUueGgpfSx0LmlzQm91bmRzT3ZlcmxhcFk9ZnVuY3Rpb24odCxlKXtyZXR1cm4hKHQueWg8ZS55bHx8dC55bD5lLnloKX0sdC5hYnNvbHV0ZURpc3RhbmNlVG9OZWFyRWRnZVg9ZnVuY3Rpb24odCxlKXt2YXIgbj10LndpZHRoLzI7cmV0dXJuIE1hdGgubWF4KE1hdGguYWJzKGUueC0odC54bCtuKSktbiwwKX0sdC5hYnNvbHV0ZURpc3RhbmNlVG9OZWFyRWRnZVk9ZnVuY3Rpb24odCxlKXt2YXIgbj10LmhlaWdodC8yO3JldHVybiBNYXRoLm1heChNYXRoLmFicyhlLnktKHQueWwrbikpLW4sMCl9LHQuYWJzb2x1dGVEaXN0YW5jZVRvRmFyRWRnZVg9ZnVuY3Rpb24oZSxuKXt2YXIgaT10LmFic29sdXRlRGlzdGFuY2VUb05lYXJFZGdlWChlLG4pO3JldHVybiAwPT09aT8wOmkrZS53aWR0aH0sdC5hYnNvbHV0ZURpc3RhbmNlVG9GYXJFZGdlWT1mdW5jdGlvbihlLG4pe3ZhciBpPXQuYWJzb2x1dGVEaXN0YW5jZVRvTmVhckVkZ2VZKGUsbik7cmV0dXJuIDA9PT1pPzA6aStlLmhlaWdodH0sdC5kaXN0YW5jZVNxdWFyZWRUb05lYXJFZGdlPWZ1bmN0aW9uKGUsbil7dmFyIGk9dC5hYnNvbHV0ZURpc3RhbmNlVG9OZWFyRWRnZVgoZSxuKSxyPXQuYWJzb2x1dGVEaXN0YW5jZVRvTmVhckVkZ2VZKGUsbik7cmV0dXJuIGkqaStyKnJ9LHQuZGlzdGFuY2VTcXVhcmVkVG9GYXJFZGdlPWZ1bmN0aW9uKGUsbil7dmFyIGk9dC5hYnNvbHV0ZURpc3RhbmNlVG9GYXJFZGdlWChlLG4pLHI9dC5hYnNvbHV0ZURpc3RhbmNlVG9GYXJFZGdlWShlLG4pO3JldHVybiBpKmkrcipyfSx0LnByb3RvdHlwZS5hcmVhPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PXRoaXMuYXJlYUNhY2hlZCYmKHRoaXMuYXJlYUNhY2hlZD0odGhpcy54aC10aGlzLnhsKSoodGhpcy55aC10aGlzLnlsKSksdGhpcy5hcmVhQ2FjaGVkfSx0LnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54bDw9dC54JiZ0aGlzLnhoPj10LngmJnRoaXMueWw8PXQueSYmdGhpcy55aD49dC55fSx0fSkoKTtlLlJUcmVlQm91bmRzPWx9KSkscG10PWJlKChmdW5jdGlvbih0LGUpewovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5JU3RhY2tpbmdPcmRlcj1JZnQubWFrZUVudW0oWyJ0b3Bkb3duIiwiYm90dG9tdXAiXSk7dmFyIG49d2luZG93Lk1hdGg7ZS5zdGFjaz1mdW5jdGlvbiBpKHQsbixyLG8pe3ZvaWQgMD09PW8mJihvPSJib3R0b211cCIpO3ZhciBhPWlkdC5tYXAoKSxzPWlkdC5tYXAoKSxsPW5ldyBTbXQuTWFwOyJ0b3Bkb3duIj09PW8mJih0PXQuc2xpY2UoKSkucmV2ZXJzZSgpO2Zvcih2YXIgYz0wLHU9dDtjPHUubGVuZ3RoO2MrKyl7Zm9yKHZhciBoPXVbY10sZD1uZXcgU210Lk1hcCxwPWguZGF0YSgpLGY9cC5sZW5ndGgsbT0wO208ZjttKyspe3ZhciBnPXBbbV0sXz1uKGcsbSxoKSx5PWUubm9ybWFsaXplS2V5KF8pLHY9K3IoZyxtLGgpLGI9dm9pZCAwLHg9dj49MD9hOnM7eC5oYXMoeSk/KGI9eC5nZXQoeSkseC5zZXQoeSxiK3YpKTooYj0wLHguc2V0KHksdikpLGQuc2V0KHkse29mZnNldDpiLHZhbHVlOnYsYXhpc1ZhbHVlOl8sb3JpZ2luYWxEYXR1bTpnLG9yaWdpbmFsRGF0YXNldDpoLG9yaWdpbmFsSW5kZXg6bX0pfWwuc2V0KGgsZCl9cmV0dXJuIGx9LGUuc3RhY2tlZEV4dGVudHM9ZnVuY3Rpb24gcih0KXt2YXIgZT1uZXcgU210Lk1hcCxuPW5ldyBTbXQuTWFwO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuZm9yRWFjaCgoZnVuY3Rpb24odCxpKXt2YXIgcj10Lm9mZnNldCt0LnZhbHVlLG89U210Lk1hdGgubWF4KFtyLHQub2Zmc2V0XSx0Lm9mZnNldCksYT1TbXQuTWF0aC5taW4oW3IsdC5vZmZzZXRdLHQub2Zmc2V0KSxzPXQuYXhpc1ZhbHVlO2UuaGFzKGkpP2UuZ2V0KGkpLmV4dGVudDxvJiZlLnNldChpLHtleHRlbnQ6byxheGlzVmFsdWU6cyxzdGFja2VkRGF0dW06dH0pOmUuc2V0KGkse2V4dGVudDpvLGF4aXNWYWx1ZTpzLHN0YWNrZWREYXR1bTp0fSksbi5oYXMoaSk/bi5nZXQoaSkuZXh0ZW50PmEmJm4uc2V0KGkse2V4dGVudDphLGF4aXNWYWx1ZTpzLHN0YWNrZWREYXR1bTp0fSk6bi5zZXQoaSx7ZXh0ZW50OmEsYXhpc1ZhbHVlOnMsc3RhY2tlZERhdHVtOnR9KX0pKX0pKSx7bWF4aW11bUV4dGVudHM6ZSxtaW5pbXVtRXh0ZW50czpufX0sZS5zdGFja2VkRXh0ZW50PWZ1bmN0aW9uIG8odCxpLHIpe3ZhciBvPVtdO3QuZm9yRWFjaCgoZnVuY3Rpb24odCxuKXtmb3IodmFyIGE9bi5kYXRhKCkscz1hLmxlbmd0aCxsPTA7bDxzO2wrKyl7dmFyIGM9YVtsXTtpZihudWxsPT1yfHxyKGMsbCxuKSl7dmFyIHU9dC5nZXQoZS5ub3JtYWxpemVLZXkoaShjLGwsbikpKTtvLnB1c2godS52YWx1ZSt1Lm9mZnNldCl9fX0pKTt2YXIgYT1TbXQuTWF0aC5tYXgobywwKSxzPVNtdC5NYXRoLm1pbihvLDApO3JldHVybltuLm1pbihzLDApLG4ubWF4KDAsYSldfSxlLm5vcm1hbGl6ZUtleT13ZS5tZW1vaXplKChmdW5jdGlvbih0KXtyZXR1cm4gU3RyaW5nKHQpfSkpfSkpLGZtdD1iZSgoZnVuY3Rpb24odCxlKXsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuU0hPV19XQVJOSU5HUz0hMCxlLkFERF9USVRMRV9FTEVNRU5UUz0hMH0pKSxtbXQ9YmUoKGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gbih0KXtmbXQuU0hPV19XQVJOSU5HUyYmY29uc29sZS53YXJuKHQpfWZ1bmN0aW9uIGkodCxlKXtmb3IodmFyIG49W10saT0yO2k8YXJndW1lbnRzLmxlbmd0aDtpKyspbltpLTJdPWFyZ3VtZW50c1tpXTtyZXR1cm4gMD09PWU/KHQobiksLTEpOndpbmRvdy5zZXRUaW1lb3V0KHQsZSxuKX0KLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUud2Fybj1uLGUuc2V0VGltZW91dD1pLGUuZGVib3VuY2U9ZnVuY3Rpb24gcih0LGUsbil7dmFyIHI9bnVsbCxvPVtdLGE9ZnVuY3Rpb24oKXtlLmFwcGx5KG4sbyl9O3JldHVybiBmdW5jdGlvbigpe289QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSxjbGVhclRpbWVvdXQocikscj1pKGEsdCl9fSxlLmRlcHJlY2F0ZWQ9ZnVuY3Rpb24gbyh0LGUsaSl7dm9pZCAwPT09aSYmKGk9IiIpLG4oIk1ldGhvZCAiK3QrIiBoYXMgYmVlbiBkZXByZWNhdGVkIGluIHZlcnNpb24gIitlKyIuIFBsZWFzZSByZWZlciB0byB0aGUgcmVsZWFzZSBub3Rlcy4gIitpKX19KSksZ210PWJlKChmdW5jdGlvbih0LGUpewovKioKICAgICAqIENvcHlyaWdodCAyMDE3LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5lbnRyeUluZGV4PXQsdGhpcy5leGl0SW5kZXg9dCx0aGlzLm1pbkluZGV4PXQsdGhpcy5tYXhJbmRleD10LHRoaXMuYnVja2V0VmFsdWU9ZSx0aGlzLm1pblZhbHVlPW4sdGhpcy5tYXhWYWx1ZT1ufXJldHVybiB0LnByb3RvdHlwZS5pc0luQnVja2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0PT10aGlzLmJ1Y2tldFZhbHVlfSx0LnByb3RvdHlwZS5hZGRUb0J1Y2tldD1mdW5jdGlvbih0LGUpe3Q8dGhpcy5taW5WYWx1ZSYmKHRoaXMubWluVmFsdWU9dCx0aGlzLm1pbkluZGV4PWUpLHQ+dGhpcy5tYXhWYWx1ZSYmKHRoaXMubWF4VmFsdWU9dCx0aGlzLm1heEluZGV4PWUpLHRoaXMuZXhpdEluZGV4PWV9LHQucHJvdG90eXBlLmdldFVuaXF1ZUluZGljZXM9ZnVuY3Rpb24oKXt2YXIgdD1bdGhpcy5lbnRyeUluZGV4LHRoaXMubWF4SW5kZXgsdGhpcy5taW5JbmRleCx0aGlzLmV4aXRJbmRleF07cmV0dXJuIHQuZmlsdGVyKChmdW5jdGlvbihlLG4pe3JldHVybiAwPT1ufHxlIT10W24tMV19KSl9LHR9KSgpO2UuQnVja2V0PW59KSksX210PWJlKChmdW5jdGlvbih0LGUpewovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpeyJmdW5jdGlvbiI9PXR5cGVvZiB3aW5kb3cuU2V0P3RoaXMuX2VzNlNldD1uZXcgd2luZG93LlNldDp0aGlzLl92YWx1ZXM9W10sdGhpcy5zaXplPTB9cmV0dXJuIHQucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9dGhpcy5fZXM2U2V0Pyh0aGlzLl9lczZTZXQuYWRkKHQpLHRoaXMuc2l6ZT10aGlzLl9lczZTZXQuc2l6ZSx0aGlzKToodGhpcy5oYXModCl8fCh0aGlzLl92YWx1ZXMucHVzaCh0KSx0aGlzLnNpemU9dGhpcy5fdmFsdWVzLmxlbmd0aCksdGhpcyl9LHQucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbih0KXtpZihudWxsIT10aGlzLl9lczZTZXQpe3ZhciBlPXRoaXMuX2VzNlNldC5kZWxldGUodCk7cmV0dXJuIHRoaXMuc2l6ZT10aGlzLl9lczZTZXQuc2l6ZSxlfXZhciBuPXRoaXMuX3ZhbHVlcy5pbmRleE9mKHQpO3JldHVybi0xIT09biYmKHRoaXMuX3ZhbHVlcy5zcGxpY2UobiwxKSx0aGlzLnNpemU9dGhpcy5fdmFsdWVzLmxlbmd0aCwhMCl9LHQucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9dGhpcy5fZXM2U2V0P3RoaXMuX2VzNlNldC5oYXModCk6LTEhPT10aGlzLl92YWx1ZXMuaW5kZXhPZih0KX0sdC5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7bnVsbD09dGhpcy5fZXM2U2V0P3RoaXMuX3ZhbHVlcy5mb3JFYWNoKChmdW5jdGlvbihpKXt0LmNhbGwoZSxpLGksbil9KSk6dGhpcy5fZXM2U2V0LmZvckVhY2goKGZ1bmN0aW9uKGkscil7cmV0dXJuIHQuY2FsbChlLGkscixuKX0pLGUpfSx0fSkoKTtlLlNldD1ufSkpLHltdD1iZSgoZnVuY3Rpb24odCxlKXsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gRGZ0Ll9fZXh0ZW5kcyhlLHQpLGUucHJvdG90eXBlLmNhbGxDYWxsYmFja3M9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcyxlPVtdLG49MDtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbl09YXJndW1lbnRzW25dO3JldHVybiB0aGlzLmZvckVhY2goKGZ1bmN0aW9uKG4pe24uYXBwbHkodCxlKX0pKSx0aGlzfSxlfSkoX210LlNldCk7ZS5DYWxsYmFja1NldD1ufSkpLHZtdD1iZSgoZnVuY3Rpb24odCxlKXsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPShmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLl9lbnRpdGllcz1bXSx0aGlzLl9ydHJlZT1uZXcgZG10LlJUcmVlfXJldHVybiB0LnByb3RvdHlwZS5hZGRBbGw9ZnVuY3Rpb24odCxlLG4pe2lmKHRoaXMuX2VudGl0aWVzPXRoaXMuX2VudGl0aWVzLmNvbmNhdCh0KSx2b2lkIDAhPT1uKWZvcih2YXIgaT1kbXQuUlRyZWVCb3VuZHMuYm91bmRzKG4pLHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG89ZG10LlJUcmVlQm91bmRzLmVudGl0eUJvdW5kcyhlKGE9dFtyXSkpO2RtdC5SVHJlZUJvdW5kcy5pc0JvdW5kc092ZXJsYXBCb3VuZHMoaSxvKSYmdGhpcy5fcnRyZWUuaW5zZXJ0KG8sYSl9ZWxzZSBmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYTtvPWRtdC5SVHJlZUJvdW5kcy5lbnRpdHlCb3VuZHMoZShhPXRbcl0pKSx0aGlzLl9ydHJlZS5pbnNlcnQobyxhKX19LHQucHJvdG90eXBlLmVudGl0eU5lYXJlc3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3J0cmVlLmxvY2F0ZU5lYXJlc3QodCkucG9wKCl9LHQucHJvdG90eXBlLmVudGl0eU5lYXJlc3RYPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ydHJlZS5sb2NhdGVOZWFyZXN0WCh0KS5wb3AoKX0sdC5wcm90b3R5cGUuZW50aXR5TmVhcmVzdFk9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3J0cmVlLmxvY2F0ZU5lYXJlc3RZKHQpLnBvcCgpfSx0LnByb3RvdHlwZS5lbnRpdGllc0luQm91bmRzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ydHJlZS5pbnRlcnNlY3QoZG10LlJUcmVlQm91bmRzLmVudGl0eUJvdW5kcyh0KSl9LHQucHJvdG90eXBlLmVudGl0aWVzSW5YQm91bmRzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ydHJlZS5pbnRlcnNlY3RYKGRtdC5SVHJlZUJvdW5kcy5lbnRpdHlCb3VuZHModCkpfSx0LnByb3RvdHlwZS5lbnRpdGllc0luWUJvdW5kcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcnRyZWUuaW50ZXJzZWN0WShkbXQuUlRyZWVCb3VuZHMuZW50aXR5Qm91bmRzKHQpKX0sdC5wcm90b3R5cGUuZW50aXRpZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZW50aXRpZXN9LHR9KSgpO2UuRW50aXR5U3RvcmU9bn0pKSxibXQ9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7ImZ1bmN0aW9uIj09dHlwZW9mIHdpbmRvdy5NYXA/dGhpcy5fZXM2TWFwPW5ldyB3aW5kb3cuTWFwOnRoaXMuX2tleVZhbHVlUGFpcnM9W119cmV0dXJuIHQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0LGUpe2lmKHVtdC5pc05hTih0KSl0aHJvdyBuZXcgRXJyb3IoIk5hTiBtYXkgbm90IGJlIHVzZWQgYXMgYSBrZXkgdG8gdGhlIE1hcCIpO2lmKG51bGwhPXRoaXMuX2VzNk1hcClyZXR1cm4gdGhpcy5fZXM2TWFwLnNldCh0LGUpLHRoaXM7Zm9yKHZhciBuPTA7bjx0aGlzLl9rZXlWYWx1ZVBhaXJzLmxlbmd0aDtuKyspaWYodGhpcy5fa2V5VmFsdWVQYWlyc1tuXS5rZXk9PT10KXJldHVybiB0aGlzLl9rZXlWYWx1ZVBhaXJzW25dLnZhbHVlPWUsdGhpcztyZXR1cm4gdGhpcy5fa2V5VmFsdWVQYWlycy5wdXNoKHtrZXk6dCx2YWx1ZTplfSksdGhpc30sdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe2lmKG51bGwhPXRoaXMuX2VzNk1hcClyZXR1cm4gdGhpcy5fZXM2TWFwLmdldCh0KTtmb3IodmFyIGU9MDtlPHRoaXMuX2tleVZhbHVlUGFpcnMubGVuZ3RoO2UrKylpZih0aGlzLl9rZXlWYWx1ZVBhaXJzW2VdLmtleT09PXQpcmV0dXJuIHRoaXMuX2tleVZhbHVlUGFpcnNbZV0udmFsdWV9LHQucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtpZihudWxsIT10aGlzLl9lczZNYXApcmV0dXJuIHRoaXMuX2VzNk1hcC5oYXModCk7Zm9yKHZhciBlPTA7ZTx0aGlzLl9rZXlWYWx1ZVBhaXJzLmxlbmd0aDtlKyspaWYodGhpcy5fa2V5VmFsdWVQYWlyc1tlXS5rZXk9PT10KXJldHVybiEwO3JldHVybiExfSx0LnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztudWxsPT10aGlzLl9lczZNYXA/dGhpcy5fa2V5VmFsdWVQYWlycy5mb3JFYWNoKChmdW5jdGlvbihpKXt0LmNhbGwoZSxpLnZhbHVlLGkua2V5LG4pfSkpOnRoaXMuX2VzNk1hcC5mb3JFYWNoKChmdW5jdGlvbihpLHIpe3JldHVybiB0LmNhbGwoZSxpLHIsbil9KSxlKX0sdC5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKHQpe2lmKG51bGwhPXRoaXMuX2VzNk1hcClyZXR1cm4gdGhpcy5fZXM2TWFwLmRlbGV0ZSh0KTtmb3IodmFyIGU9MDtlPHRoaXMuX2tleVZhbHVlUGFpcnMubGVuZ3RoO2UrKylpZih0aGlzLl9rZXlWYWx1ZVBhaXJzW2VdLmtleT09PXQpcmV0dXJuIHRoaXMuX2tleVZhbHVlUGFpcnMuc3BsaWNlKGUsMSksITA7cmV0dXJuITF9LHR9KSgpO2UuTWFwPW59KSkseG10PWJlKChmdW5jdGlvbih0LGUpewovKioKICAgICAqIENvcHlyaWdodCAyMDE3LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5hc3NpZ249ZnVuY3Rpb24gbigpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0W2VdPWFyZ3VtZW50c1tlXTtmb3IodmFyIG49e30saT0wLHI9dDtpPHIubGVuZ3RoO2krKylmb3IodmFyIG89cltpXSxhPU9iamVjdC5rZXlzKG8pLHM9MCxsPWE7czxsLmxlbmd0aDtzKyspe3ZhciBjPWxbc107bltjXT1vW2NdfXJldHVybiBufX0pKSx3bXQ9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTctcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0iX19QbG90dGFibGVfQ2xpZW50VHJhbnNsYXRvciI7ZS5nZXRUcmFuc2xhdG9yPWZ1bmN0aW9uIGkodCl7dmFyIGU9dC5yb290KCkucm9vdEVsZW1lbnQoKS5ub2RlKCksaT1lW25dO3JldHVybiBudWxsPT1pJiYoaT1uZXcgcihlKSxlW25dPWkpLGl9O3ZhciByPShmdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5fcm9vdEVsZW1lbnQ9dH1yZXR1cm4gdC5wcm90b3R5cGUuY29tcHV0ZVBvc2l0aW9uPWZ1bmN0aW9uKHQsZSl7dmFyIG49e3g6dCx5OmV9LGk9U210Lk1hdGguZ2V0Q3VtdWxhdGl2ZVRyYW5zZm9ybSh0aGlzLl9yb290RWxlbWVudCk7cmV0dXJuIG51bGw9PWk/bjpTbXQuTWF0aC5hcHBseVRyYW5zZm9ybShpLG4pfSx0LmlzRXZlbnRJbnNpZGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gU210LkRPTS5jb250YWlucyh0LnJvb3QoKS5yb290RWxlbWVudCgpLm5vZGUoKSxlLnRhcmdldCl9LHR9KSgpO2UuVHJhbnNsYXRvcj1yfSkpLFNtdD1iZSgoZnVuY3Rpb24odCxlKXsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuQXJyYXk9c210LGUuQ29sb3I9bG10LGUuRE9NPWNtdCxlLk1hdGg9dW10LGUuUlRyZWU9ZG10LGUuU3RhY2tpbmc9cG10LGUuV2luZG93PW1tdCxEZnQuX19leHBvcnRTdGFyKGdtdCxlKSxEZnQuX19leHBvcnRTdGFyKHltdCxlKSxEZnQuX19leHBvcnRTdGFyKE5mdCxlKSxEZnQuX19leHBvcnRTdGFyKHZtdCxlKSxEZnQuX19leHBvcnRTdGFyKGJtdCxlKSxEZnQuX19leHBvcnRTdGFyKHhtdCxlKSxEZnQuX19leHBvcnRTdGFyKF9tdCxlKSxEZnQuX19leHBvcnRTdGFyKHdtdCxlKX0pKSxNbXQ9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtFbXQuZmx1c2goKX0sdH0pKCk7ZS5JbW1lZGlhdGU9bjt2YXIgaT0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtTbXQuRE9NLnJlcXVlc3RBbmltYXRpb25GcmFtZVBvbHlmaWxsKEVtdC5mbHVzaCl9LHR9KSgpO2UuQW5pbWF0aW9uRnJhbWU9aTt2YXIgcj0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5fdGltZW91dE1zZWM9U210LkRPTS5TQ1JFRU5fUkVGUkVTSF9SQVRFX01JTExJU0VDT05EU31yZXR1cm4gdC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7c2V0VGltZW91dChFbXQuZmx1c2gsdGhpcy5fdGltZW91dE1zZWMpfSx0fSkoKTtlLlRpbWVvdXQ9cn0pKSxFbXQ9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1uZXcgU210LlNldCxpPW5ldyBTbXQuU2V0LHI9ITEsbz0hMTtlLlBvbGljeT1JZnQubWFrZUVudW0oWyJpbW1lZGlhdGUiLCJhbmltYXRpb25GcmFtZSIsInRpbWVvdXQiXSk7dmFyIGE9bmV3IE1tdC5BbmltYXRpb25GcmFtZTtmdW5jdGlvbiBzKHQpe2kuYWRkKHQpLG4uYWRkKHQpLGwoKX1mdW5jdGlvbiBsKCl7cnx8KHI9ITAsYS5yZW5kZXIoKSl9ZS5yZW5kZXJQb2xpY3k9ZnVuY3Rpb24gYyh0KXtpZihudWxsPT10KXJldHVybiBhO3N3aXRjaCh0KXtjYXNlIGUuUG9saWN5LmltbWVkaWF0ZTphPW5ldyBNbXQuSW1tZWRpYXRlO2JyZWFrO2Nhc2UgZS5Qb2xpY3kuYW5pbWF0aW9uRnJhbWU6YT1uZXcgTW10LkFuaW1hdGlvbkZyYW1lO2JyZWFrO2Nhc2UgZS5Qb2xpY3kudGltZW91dDphPW5ldyBNbXQuVGltZW91dDticmVhaztkZWZhdWx0OlNtdC5XaW5kb3cud2FybigiVW5yZWNvZ25pemVkIHJlbmRlclBvbGljeTogIit0KX19LGUucmVnaXN0ZXJUb1JlbmRlcj1mdW5jdGlvbiB1KHQpe28mJlNtdC5XaW5kb3cud2FybigiUmVnaXN0ZXJlZCB0byByZW5kZXIgd2hpbGUgb3RoZXIgY29tcG9uZW50cyBhcmUgZmx1c2hpbmc6IHJlcXVlc3QgbWF5IGJlIGlnbm9yZWQiKSxuLmFkZCh0KSxsKCl9LGUucmVnaXN0ZXJUb0NvbXB1dGVMYXlvdXRBbmRSZW5kZXI9cyxlLnJlZ2lzdGVyVG9Db21wdXRlTGF5b3V0PWZ1bmN0aW9uIGgodCl7cyh0KX0sZS5mbHVzaD1mdW5jdGlvbiBkKCl7aWYocil7aS5mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gdC5jb21wdXRlTGF5b3V0KCl9KSksbi5mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gdC5yZW5kZXIoKX0pKSxvPSEwO3ZhciB0PW5ldyBTbXQuU2V0O24uZm9yRWFjaCgoZnVuY3Rpb24oZSl7dHJ5e2UucmVuZGVySW1tZWRpYXRlbHkoKX1jYXRjaChuKXt3aW5kb3cuc2V0VGltZW91dCgoZnVuY3Rpb24oKXt0aHJvdyBufSksMCksdC5hZGQoZSl9fSkpLGk9bmV3IFNtdC5TZXQsbj10LHI9ITEsbz0hMX19fSkpLFRtdD1iZSgoZnVuY3Rpb24odCxlKXsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuWEFsaWdubWVudD1JZnQubWFrZUVudW0oWyJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXSksZS5ZQWxpZ25tZW50PUlmdC5tYWtlRW51bShbInRvcCIsImNlbnRlciIsImJvdHRvbSJdKTt2YXIgbj0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5fb3ZlcmZsb3dIaWRkZW49ITEsdGhpcy5fb3JpZ2luPXt4OjAseTowfSx0aGlzLl94QWxpZ25tZW50PSJsZWZ0Iix0aGlzLl95QWxpZ25tZW50PSJ0b3AiLHRoaXMuX2lzU2V0dXA9ITEsdGhpcy5faXNBbmNob3JlZD0hMSx0aGlzLl9jc3NDbGFzc2VzPW5ldyBTbXQuU2V0LHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9vbkFuY2hvckNhbGxiYWNrcz1uZXcgU210LkNhbGxiYWNrU2V0LHRoaXMuX29uRGV0YWNoQ2FsbGJhY2tzPW5ldyBTbXQuQ2FsbGJhY2tTZXQsdGhpcy5fY3NzQ2xhc3Nlcy5hZGQoImNvbXBvbmVudCIpfXJldHVybiB0LnByb3RvdHlwZS5hbmNob3I9ZnVuY3Rpb24odCl7aWYodD1OZnQuY29lcmNlRXh0ZXJuYWxEMyh0KSx0aGlzLl9kZXN0cm95ZWQpdGhyb3cgbmV3IEVycm9yKCJDYW4ndCByZXVzZSBkZXN0cm95KCktZWQgQ29tcG9uZW50cyEiKTtyZXR1cm4gdGhpcy5pc1Jvb3QoKSYmKHRoaXMuX3Jvb3RFbGVtZW50PXQsdGhpcy5fcm9vdEVsZW1lbnQuY2xhc3NlZCgicGxvdHRhYmxlIiwhMCkpLG51bGwhPXRoaXMuX2VsZW1lbnQ/dC5ub2RlKCkuYXBwZW5kQ2hpbGQodGhpcy5fZWxlbWVudC5ub2RlKCkpOih0aGlzLl9lbGVtZW50PXQuYXBwZW5kKCJkaXYiKSx0aGlzLl9zZXR1cCgpKSx0aGlzLl9pc0FuY2hvcmVkPSEwLHRoaXMuX29uQW5jaG9yQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3ModGhpcyksdGhpc30sdC5wcm90b3R5cGUub25BbmNob3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2lzQW5jaG9yZWQmJnQodGhpcyksdGhpcy5fb25BbmNob3JDYWxsYmFja3MuYWRkKHQpLHRoaXN9LHQucHJvdG90eXBlLm9mZkFuY2hvcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fb25BbmNob3JDYWxsYmFja3MuZGVsZXRlKHQpLHRoaXN9LHQucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5faXNTZXR1cHx8KHRoaXMuX2Nzc0NsYXNzZXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dC5fZWxlbWVudC5jbGFzc2VkKGUsITApfSkpLHRoaXMuX2Nzc0NsYXNzZXM9bmV3IFNtdC5TZXQsdGhpcy5fYmFja2dyb3VuZENvbnRhaW5lcj10aGlzLl9lbGVtZW50LmFwcGVuZCgic3ZnIikuY2xhc3NlZCgiYmFja2dyb3VuZC1jb250YWluZXIiLCEwKSx0aGlzLl9jb250ZW50PXRoaXMuX2VsZW1lbnQuYXBwZW5kKCJzdmciKS5jbGFzc2VkKCJjb250ZW50IiwhMCksdGhpcy5fZm9yZWdyb3VuZENvbnRhaW5lcj10aGlzLl9lbGVtZW50LmFwcGVuZCgic3ZnIikuY2xhc3NlZCgiZm9yZWdyb3VuZC1jb250YWluZXIiLCEwKSx0aGlzLl9jb250ZW50LmNsYXNzZWQodGhpcy5fb3ZlcmZsb3dIaWRkZW4/ImNvbXBvbmVudC1vdmVyZmxvdy1oaWRkZW4iOiJjb21wb25lbnQtb3ZlcmZsb3ctdmlzaWJsZSIsITApLHRoaXMuX2lzU2V0dXA9ITApfSx0LnByb3RvdHlwZS5yZXF1ZXN0ZWRTcGFjZT1mdW5jdGlvbih0LGUpe3JldHVybnttaW5XaWR0aDowLG1pbkhlaWdodDowfX0sdC5wcm90b3R5cGUuY29tcHV0ZUxheW91dD1mdW5jdGlvbihlLG4saSl7aWYobnVsbD09ZXx8bnVsbD09bnx8bnVsbD09aSl7aWYobnVsbD09dGhpcy5fZWxlbWVudCl0aHJvdyBuZXcgRXJyb3IoImFuY2hvcigpIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBjb21wdXRlTGF5b3V0KCkiKTtpZihudWxsPT10aGlzLl9yb290RWxlbWVudCl0aHJvdyBuZXcgRXJyb3IoIm51bGwgYXJndW1lbnRzIGNhbm5vdCBiZSBwYXNzZWQgdG8gY29tcHV0ZUxheW91dCgpIG9uIGEgbm9uLXJvb3QsIHVuYW5jaG9yZWQgbm9kZSIpO2U9e3g6MCx5OjB9O3ZhciByPXRoaXMuX3Jvb3RFbGVtZW50Lm5vZGUoKTtuPVNtdC5ET00uZWxlbWVudFdpZHRoKHIpLGk9U210LkRPTS5lbGVtZW50SGVpZ2h0KHIpfXZhciBvPXRoaXMuX3NpemVGcm9tT2ZmZXIobixpKSxhPW8uaGVpZ2h0LHM9by53aWR0aDtyZXR1cm4gdGhpcy5zZXRCb3VuZHMocyxhLGUueCsobi1zKSp0Ll94QWxpZ25Ub1Byb3BvcnRpb25bdGhpcy5feEFsaWdubWVudF0sZS55KyhpLWEpKnQuX3lBbGlnblRvUHJvcG9ydGlvblt0aGlzLl95QWxpZ25tZW50XSksdGhpc30sdC5wcm90b3R5cGUuc2V0Qm91bmRzPWZ1bmN0aW9uKHQsZSxuLGkpe3JldHVybiB2b2lkIDA9PT1uJiYobj0wKSx2b2lkIDA9PT1pJiYoaT0wKSx0aGlzLl93aWR0aD10LHRoaXMuX2hlaWdodD1lLHRoaXMuX29yaWdpbj17eDpuLHk6aX0sbnVsbCE9dGhpcy5fZWxlbWVudCYmdGhpcy5fZWxlbWVudC5zdHlsZXMoe2xlZnQ6bisicHgiLGhlaWdodDplKyJweCIsdG9wOmkrInB4Iix3aWR0aDp0KyJweCJ9KSxudWxsIT10aGlzLl9yZXNpemVIYW5kbGVyJiZ0aGlzLl9yZXNpemVIYW5kbGVyKHt3aWR0aDp0LGhlaWdodDplfSksdGhpc30sdC5wcm90b3R5cGUuX3NpemVGcm9tT2ZmZXI9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLnJlcXVlc3RlZFNwYWNlKHQsZSk7cmV0dXJue3dpZHRoOnRoaXMuZml4ZWRXaWR0aCgpP01hdGgubWluKHQsbi5taW5XaWR0aCk6dCxoZWlnaHQ6dGhpcy5maXhlZEhlaWdodCgpP01hdGgubWluKGUsbi5taW5IZWlnaHQpOmV9fSx0LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNBbmNob3JlZCYmdGhpcy5faXNTZXR1cCYmdGhpcy53aWR0aCgpPj0wJiZ0aGlzLmhlaWdodCgpPj0wJiZFbXQucmVnaXN0ZXJUb1JlbmRlcih0aGlzKSx0aGlzfSx0LnByb3RvdHlwZS5yZW5kZXJMb3dQcmlvcml0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlbmRlcigpfSx0LnByb3RvdHlwZS5fc2NoZWR1bGVDb21wdXRlTGF5b3V0PWZ1bmN0aW9uKCl7dGhpcy5faXNBbmNob3JlZCYmdGhpcy5faXNTZXR1cCYmRW10LnJlZ2lzdGVyVG9Db21wdXRlTGF5b3V0QW5kUmVuZGVyKHRoaXMpfSx0LnByb3RvdHlwZS5vblJlc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmVzaXplSGFuZGxlcj10LHRoaXN9LHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLnJlZHJhdz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc0FuY2hvcmVkJiZ0aGlzLl9pc1NldHVwJiYodGhpcy5pc1Jvb3QoKT90aGlzLl9zY2hlZHVsZUNvbXB1dGVMYXlvdXQoKTp0aGlzLnBhcmVudCgpLnJlZHJhdygpKSx0aGlzfSx0LnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGU9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLnJlbmRlclRvPWZ1bmN0aW9uKHQpe2lmKHRoaXMuZGV0YWNoKCksbnVsbCE9dCl7dmFyIGU9dm9pZCAwO2lmKCEoZT0ic3RyaW5nIj09dHlwZW9mIHR8fHdlLmlzRWxlbWVudCh0KT9pZHQuc2VsZWN0KHQpOk5mdC5jb2VyY2VFeHRlcm5hbEQzKHQpKS5ub2RlKCl8fG51bGw9PWUubm9kZSgpLm5vZGVOYW1lKXRocm93IG5ldyBFcnJvcigiUGxvdHRhYmxlIHJlcXVpcmVzIGEgdmFsaWQgRWxlbWVudCB0byByZW5kZXJUbyIpO2lmKCJzdmciPT09ZS5ub2RlKCkubm9kZU5hbWUpdGhyb3cgbmV3IEVycm9yKCJQbG90dGFibGUgMy54IGFuZCBsYXRlciBjYW4gb25seSByZW5kZXJUbyBhbiBIVE1MIGNvbXBvbmVudDsgcGFzcyBhIGRpdiBpbnN0ZWFkISIpO3RoaXMuYW5jaG9yKGUpfWlmKG51bGw9PXRoaXMuX2VsZW1lbnQpdGhyb3cgbmV3IEVycm9yKCJJZiBhIENvbXBvbmVudCBoYXMgbmV2ZXIgYmVlbiByZW5kZXJlZCBiZWZvcmUsIHRoZW4gcmVuZGVyVG8gbXVzdCBiZSBnaXZlbiBhIG5vZGUgdG8gcmVuZGVyIHRvLCBvciBhIGQzLlNlbGVjdGlvbiwgb3IgYSBzZWxlY3RvciBzdHJpbmciKTtyZXR1cm4gRW10LnJlZ2lzdGVyVG9Db21wdXRlTGF5b3V0QW5kUmVuZGVyKHRoaXMpLEVtdC5mbHVzaCgpLHRoaXN9LHQucHJvdG90eXBlLnhBbGlnbm1lbnQ9ZnVuY3Rpb24oZSl7aWYobnVsbD09ZSlyZXR1cm4gdGhpcy5feEFsaWdubWVudDtpZihlPWUudG9Mb3dlckNhc2UoKSxudWxsPT10Ll94QWxpZ25Ub1Byb3BvcnRpb25bZV0pdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBhbGlnbm1lbnQ6ICIrZSk7cmV0dXJuIHRoaXMuX3hBbGlnbm1lbnQ9ZSx0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLnlBbGlnbm1lbnQ9ZnVuY3Rpb24oZSl7aWYobnVsbD09ZSlyZXR1cm4gdGhpcy5feUFsaWdubWVudDtpZihlPWUudG9Mb3dlckNhc2UoKSxudWxsPT10Ll95QWxpZ25Ub1Byb3BvcnRpb25bZV0pdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBhbGlnbm1lbnQ6ICIrZSk7cmV0dXJuIHRoaXMuX3lBbGlnbm1lbnQ9ZSx0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLmhhc0NsYXNzPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT10JiYobnVsbD09dGhpcy5fZWxlbWVudD90aGlzLl9jc3NDbGFzc2VzLmhhcyh0KTp0aGlzLl9lbGVtZW50LmNsYXNzZWQodCkpfSx0LnByb3RvdHlwZS5hZGRDbGFzcz1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dHx8KG51bGw9PXRoaXMuX2VsZW1lbnQ/dGhpcy5fY3NzQ2xhc3Nlcy5hZGQodCk6dGhpcy5fZWxlbWVudC5jbGFzc2VkKHQsITApKSx0aGlzfSx0LnByb3RvdHlwZS5yZW1vdmVDbGFzcz1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dHx8KG51bGw9PXRoaXMuX2VsZW1lbnQ/dGhpcy5fY3NzQ2xhc3Nlcy5kZWxldGUodCk6dGhpcy5fZWxlbWVudC5jbGFzc2VkKHQsITEpKSx0aGlzfSx0LnByb3RvdHlwZS5maXhlZFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuITF9LHQucHJvdG90eXBlLmZpeGVkSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuITF9LHQucHJvdG90eXBlLmRldGFjaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcmVudChudWxsKSx0aGlzLl9pc0FuY2hvcmVkJiZ0aGlzLl9lbGVtZW50LnJlbW92ZSgpLHRoaXMuX2lzQW5jaG9yZWQ9ITEsdGhpcy5fb25EZXRhY2hDYWxsYmFja3MuY2FsbENhbGxiYWNrcyh0aGlzKSx0aGlzfSx0LnByb3RvdHlwZS5vbkRldGFjaD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fb25EZXRhY2hDYWxsYmFja3MuYWRkKHQpLHRoaXN9LHQucHJvdG90eXBlLm9mZkRldGFjaD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fb25EZXRhY2hDYWxsYmFja3MuZGVsZXRlKHQpLHRoaXN9LHQucHJvdG90eXBlLnBhcmVudD1mdW5jdGlvbih0KXtpZih2b2lkIDA9PT10KXJldHVybiB0aGlzLl9wYXJlbnQ7aWYobnVsbCE9PXQmJiF0Lmhhcyh0aGlzKSl0aHJvdyBuZXcgRXJyb3IoIlBhc3NlZCBpbnZhbGlkIHBhcmVudCIpO3JldHVybiB0aGlzLl9wYXJlbnQ9dCx0aGlzfSx0LnByb3RvdHlwZS5ib3VuZHM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9yaWdpbigpO3JldHVybnt0b3BMZWZ0OnQsYm90dG9tUmlnaHQ6e3g6dC54K3RoaXMud2lkdGgoKSx5OnQueSt0aGlzLmhlaWdodCgpfX19LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy5kZXRhY2goKX0sdC5wcm90b3R5cGUud2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd2lkdGh9LHQucHJvdG90eXBlLmhlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9oZWlnaHR9LHQucHJvdG90eXBlLm9yaWdpbj1mdW5jdGlvbigpe3JldHVybnt4OnRoaXMuX29yaWdpbi54LHk6dGhpcy5fb3JpZ2luLnl9fSx0LnByb3RvdHlwZS5vcmlnaW5Ub1Jvb3Q9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5vcmlnaW4oKSxlPXRoaXMucGFyZW50KCk7bnVsbCE9ZTspe3ZhciBuPWUub3JpZ2luKCk7dC54Kz1uLngsdC55Kz1uLnksZT1lLnBhcmVudCgpfXJldHVybiB0fSx0LnByb3RvdHlwZS5yb290PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXM7IXQuaXNSb290KCk7KXQ9dC5wYXJlbnQoKTtyZXR1cm4gdH0sdC5wcm90b3R5cGUuaXNSb290PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PXRoaXMucGFyZW50KCl9LHQucHJvdG90eXBlLmZvcmVncm91bmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZm9yZWdyb3VuZENvbnRhaW5lcn0sdC5wcm90b3R5cGUuY29udGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250ZW50fSx0LnByb3RvdHlwZS5lbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VsZW1lbnR9LHQucHJvdG90eXBlLnJvb3RFbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdCgpLl9yb290RWxlbWVudH0sdC5wcm90b3R5cGUuYmFja2dyb3VuZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYWNrZ3JvdW5kQ29udGFpbmVyfSx0Ll94QWxpZ25Ub1Byb3BvcnRpb249e2xlZnQ6MCxjZW50ZXI6LjUscmlnaHQ6MX0sdC5feUFsaWduVG9Qcm9wb3J0aW9uPXt0b3A6MCxjZW50ZXI6LjUsYm90dG9tOjF9LHR9KSgpO2UuQ29tcG9uZW50PW59KSksQ210PWJlKChmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PTMpLGkodCksZnVuY3Rpb24oZSl7cmV0dXJuIGUudG9GaXhlZCh0KX19ZnVuY3Rpb24gaSh0KXtpZih0PDB8fHQ+MjApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkZvcm1hdHRlciBwcmVjaXNpb24gbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDIwIik7aWYodCE9PU1hdGguZmxvb3IodCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkZvcm1hdHRlciBwcmVjaXNpb24gbXVzdCBiZSBhbiBpbnRlZ2VyIil9Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLmN1cnJlbmN5PWZ1bmN0aW9uIHIodCxlLGkpe3ZvaWQgMD09PXQmJih0PTIpLHZvaWQgMD09PWUmJihlPSIkIiksdm9pZCAwPT09aSYmKGk9ITApO3ZhciByPW4odCk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBuPXIoTWF0aC5hYnModCkpO3JldHVybiIiIT09biYmKGk/bj1lK246bis9ZSx0PDAmJihuPSItIituKSksbn19LGUuZml4ZWQ9bixlLmdlbmVyYWw9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9MyksaSh0KSxmdW5jdGlvbihlKXtpZigibnVtYmVyIj09dHlwZW9mIGUpe3ZhciBuPU1hdGgucG93KDEwLHQpO3JldHVybiBTdHJpbmcoTWF0aC5yb3VuZChlKm4pL24pfXJldHVybiBTdHJpbmcoZSl9fSxlLmlkZW50aXR5PWZ1bmN0aW9uIGEoKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIFN0cmluZyh0KX19LGUucGVyY2VudGFnZT1mdW5jdGlvbiBzKHQpe3ZvaWQgMD09PXQmJih0PTApO3ZhciBlPW4odCk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBuPTEwMCp0LGk9dC50b1N0cmluZygpLHI9TWF0aC5wb3coMTAsaS5sZW5ndGgtKGkuaW5kZXhPZigiLiIpKzEpKTtyZXR1cm4gbj1wYXJzZUludCgobipyKS50b1N0cmluZygpLDEwKS9yLGUobikrIiUifX0sZS5zaVN1ZmZpeD1mdW5jdGlvbiBsKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0zKSxpKHQpLGZ1bmN0aW9uKGUpe3JldHVybiBpZHQuZm9ybWF0KCIuIit0KyJzIikoZSl9fSxlLnNob3J0U2NhbGU9ZnVuY3Rpb24gYyh0KXt2b2lkIDA9PT10JiYodD0zKSxpKHQpO3ZhciBlPSJLTUJUUSIsbj1pZHQuZm9ybWF0KCIuIit0KyJlIikscj1pZHQuZm9ybWF0KCIuIit0KyJmIiksbz1NYXRoLnBvdygxMCwzKihlLmxlbmd0aCsxKSksYT1NYXRoLnBvdygxMCwtdCk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBpPU1hdGguYWJzKHQpO2lmKChpPGF8fGk+PW8pJiYwIT09aSlyZXR1cm4gbih0KTtmb3IodmFyIHM9LTE7aT49TWF0aC5wb3coMWUzLHMrMikmJnM8ZS5sZW5ndGgtMTspcysrO3ZhciBsPSIiO3JldHVybiBsPS0xPT09cz9yKHQpOnIodC9NYXRoLnBvdygxZTMscysxKSkrZVtzXSwodD4wJiYiMTAwMCI9PT1sLnN1YnN0cigwLDQpfHx0PDAmJiItMTAwMCI9PT1sLnN1YnN0cigwLDUpKSYmKHM8ZS5sZW5ndGgtMT8ocysrLGw9cih0L01hdGgucG93KDFlMyxzKzEpKStlW3NdKTpsPW4odCkpLGx9fSxlLm11bHRpVGltZT1mdW5jdGlvbiB1KCl7dmFyIHQ9W3tzcGVjaWZpZXI6Ii4lTCIscHJlZGljYXRlOmZ1bmN0aW9uKHQpe3JldHVybiAwIT09dC5nZXRNaWxsaXNlY29uZHMoKX19LHtzcGVjaWZpZXI6IjolUyIscHJlZGljYXRlOmZ1bmN0aW9uKHQpe3JldHVybiAwIT09dC5nZXRTZWNvbmRzKCl9fSx7c3BlY2lmaWVyOiIlSTolTSIscHJlZGljYXRlOmZ1bmN0aW9uKHQpe3JldHVybiAwIT09dC5nZXRNaW51dGVzKCl9fSx7c3BlY2lmaWVyOiIlSSAlcCIscHJlZGljYXRlOmZ1bmN0aW9uKHQpe3JldHVybiAwIT09dC5nZXRIb3VycygpfX0se3NwZWNpZmllcjoiJWEgJWQiLHByZWRpY2F0ZTpmdW5jdGlvbih0KXtyZXR1cm4gMCE9PXQuZ2V0RGF5KCkmJjEhPT10LmdldERhdGUoKX19LHtzcGVjaWZpZXI6IiViICVkIixwcmVkaWNhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIDEhPT10LmdldERhdGUoKX19LHtzcGVjaWZpZXI6IiViIixwcmVkaWNhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIDAhPT10LmdldE1vbnRoKCl9fV07cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPXQuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC5wcmVkaWNhdGUoZSl9KSk7cmV0dXJuIGlkdC50aW1lRm9ybWF0KG4ubGVuZ3RoPjA/blswXS5zcGVjaWZpZXI6IiVZIikoZSl9fSxlLnRpbWU9ZnVuY3Rpb24gaCh0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT0hMSksZT9pZHQudXRjRm9ybWF0KHQpOmlkdC50aW1lRm9ybWF0KHQpfX0pKSxBbXQ9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLkF4aXNPcmllbnRhdGlvbj1JZnQubWFrZUVudW0oWyJib3R0b20iLCJsZWZ0IiwicmlnaHQiLCJ0b3AiXSk7dmFyIG49KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgaT10LmNhbGwodGhpcyl8fHRoaXM7aWYoaS5fZW5kVGlja0xlbmd0aD01LGkuX2lubmVyVGlja0xlbmd0aD01LGkuX3RpY2tMYWJlbFBhZGRpbmc9MTAsaS5fbWFyZ2luPTE1LGkuX3Nob3dFbmRUaWNrTGFiZWxzPSExLGkuX2Fubm90YXRpb25zRW5hYmxlZD0hMSxpLl9hbm5vdGF0aW9uVGllckNvdW50PTEsbnVsbD09ZXx8bnVsbD09bil0aHJvdyBuZXcgRXJyb3IoIkF4aXMgcmVxdWlyZXMgYSBzY2FsZSBhbmQgb3JpZW50YXRpb24iKTtyZXR1cm4gaS5fc2NhbGU9ZSxpLm9yaWVudGF0aW9uKG4pLGkuX3NldERlZmF1bHRBbGlnbm1lbnQoKSxpLmFkZENsYXNzKCJheGlzIiksaS5pc0hvcml6b250YWwoKT9pLmFkZENsYXNzKCJ4LWF4aXMiKTppLmFkZENsYXNzKCJ5LWF4aXMiKSxpLmZvcm1hdHRlcihDbXQuaWRlbnRpdHkoKSksaS5fcmVzY2FsZUNhbGxiYWNrPWZ1bmN0aW9uKHQpe3JldHVybiBpLl9yZXNjYWxlKCl9LGkuX3NjYWxlLm9uVXBkYXRlKGkuX3Jlc2NhbGVDYWxsYmFjayksaS5fYW5ub3RhdGVkVGlja3M9W10saS5fYW5ub3RhdGlvbkZvcm1hdHRlcj1DbXQuaWRlbnRpdHkoKSxpfXJldHVybiBEZnQuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3QucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKSx0aGlzLl9zY2FsZS5vZmZVcGRhdGUodGhpcy5fcmVzY2FsZUNhbGxiYWNrKX0sZS5wcm90b3R5cGUudGlja0xhYmVsRGF0YU9uRWxlbWVudD1mdW5jdGlvbih0KXtpZihudWxsIT10KXtmb3IodmFyIG47bnVsbCE9dCYmdC5jbGFzc0xpc3QmJnZvaWQgMD09PW47KXQuY2xhc3NMaXN0LmNvbnRhaW5zKGUuVElDS19MQUJFTF9DTEFTUyk/bj10OnQ9dC5wYXJlbnROb2RlO3JldHVybiB2b2lkIDA9PT10P3ZvaWQgMDppZHQuc2VsZWN0KHQpLmRhdHVtKCl9fSxlLnByb3RvdHlwZS5fY29tcHV0ZVdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21heExhYmVsVGlja0xlbmd0aCgpfSxlLnByb3RvdHlwZS5fY29tcHV0ZUhlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXhMYWJlbFRpY2tMZW5ndGgoKX0sZS5wcm90b3R5cGUucmVxdWVzdGVkU3BhY2U9ZnVuY3Rpb24odCxuKXt2YXIgaT0wLHI9MDtyZXR1cm4gdGhpcy5pc0hvcml6b250YWwoKT8ocj10aGlzLl9jb21wdXRlSGVpZ2h0KCkrdGhpcy5fbWFyZ2luLHRoaXMuYW5ub3RhdGlvbnNFbmFibGVkKCkmJihyKz0odGhpcy5fYW5ub3RhdGlvbk1lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQrMiplLl9BTk5PVEFUSU9OX0xBQkVMX1BBRERJTkcpKnRoaXMuYW5ub3RhdGlvblRpZXJDb3VudCgpKSk6KGk9dGhpcy5fY29tcHV0ZVdpZHRoKCkrdGhpcy5fbWFyZ2luLHRoaXMuYW5ub3RhdGlvbnNFbmFibGVkKCkmJihpKz0odGhpcy5fYW5ub3RhdGlvbk1lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQrMiplLl9BTk5PVEFUSU9OX0xBQkVMX1BBRERJTkcpKnRoaXMuYW5ub3RhdGlvblRpZXJDb3VudCgpKSkse21pbldpZHRoOmksbWluSGVpZ2h0OnJ9fSxlLnByb3RvdHlwZS5maXhlZEhlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSG9yaXpvbnRhbCgpfSxlLnByb3RvdHlwZS5maXhlZFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuaXNIb3Jpem9udGFsKCl9LGUucHJvdG90eXBlLl9yZXNjYWxlPWZ1bmN0aW9uKCl7dGhpcy5yZW5kZXIoKX0sZS5wcm90b3R5cGUuY29tcHV0ZUxheW91dD1mdW5jdGlvbihlLG4saSl7cmV0dXJuIHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQuY2FsbCh0aGlzLGUsbixpKSx0aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMuX3NjYWxlLnJhbmdlKFswLHRoaXMud2lkdGgoKV0pOnRoaXMuX3NjYWxlLnJhbmdlKFt0aGlzLmhlaWdodCgpLDBdKSx0aGlzfSxlLnByb3RvdHlwZS5fc2l6ZUZyb21PZmZlcj1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMucmVxdWVzdGVkU3BhY2UodCxlKTtyZXR1cm4gdGhpcy5pc0hvcml6b250YWwoKT97d2lkdGg6dCxoZWlnaHQ6bi5taW5IZWlnaHR9OntoZWlnaHQ6ZSx3aWR0aDpuLm1pbldpZHRofX0sZS5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7dC5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyksdGhpcy5fdGlja01hcmtDb250YWluZXI9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIikuY2xhc3NlZChlLlRJQ0tfTUFSS19DTEFTUysiLWNvbnRhaW5lciIsITApLHRoaXMuX3RpY2tMYWJlbENvbnRhaW5lcj10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKGUuVElDS19MQUJFTF9DTEFTUysiLWNvbnRhaW5lciIsITApLHRoaXMuX2Jhc2VsaW5lPXRoaXMuY29udGVudCgpLmFwcGVuZCgibGluZSIpLmNsYXNzZWQoImJhc2VsaW5lIiwhMCksdGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lcj10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJhbm5vdGF0aW9uLWNvbnRhaW5lciIsITApLHRoaXMuX2Fubm90YXRpb25Db250YWluZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgiYW5ub3RhdGlvbi1saW5lLWNvbnRhaW5lciIsITApLHRoaXMuX2Fubm90YXRpb25Db250YWluZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgiYW5ub3RhdGlvbi1jaXJjbGUtY29udGFpbmVyIiwhMCksdGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5hcHBlbmQoImciKS5jbGFzc2VkKCJhbm5vdGF0aW9uLXJlY3QtY29udGFpbmVyIiwhMCk7dmFyIG49dGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5hcHBlbmQoImciKS5jbGFzc2VkKCJhbm5vdGF0aW9uLWxhYmVsLWNvbnRhaW5lciIsITApLGk9bmV3IGFtdC5TdmdDb250ZXh0KG4ubm9kZSgpKTt0aGlzLl9hbm5vdGF0aW9uTWVhc3VyZXI9bmV3IGFtdC5DYWNoZU1lYXN1cmVyKGkpLHRoaXMuX2Fubm90YXRpb25Xcml0ZXI9bmV3IGFtdC5Xcml0ZXIodGhpcy5fYW5ub3RhdGlvbk1lYXN1cmVyLGkpfSxlLnByb3RvdHlwZS5fZ2V0VGlja1ZhbHVlcz1mdW5jdGlvbigpe3JldHVybltdfSxlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2dldFRpY2tWYWx1ZXMoKSxuPXRoaXMuX3RpY2tNYXJrQ29udGFpbmVyLnNlbGVjdEFsbCgiLiIrZS5USUNLX01BUktfQ0xBU1MpLmRhdGEodCksaT1uLmVudGVyKCkuYXBwZW5kKCJsaW5lIikuY2xhc3NlZChlLlRJQ0tfTUFSS19DTEFTUywhMCkubWVyZ2Uobik7cmV0dXJuIGkuYXR0cnModGhpcy5fZ2VuZXJhdGVUaWNrTWFya0F0dHJIYXNoKCkpLGlkdC5zZWxlY3QoaS5ub2RlcygpWzBdKS5jbGFzc2VkKGUuRU5EX1RJQ0tfTUFSS19DTEFTUywhMCkuYXR0cnModGhpcy5fZ2VuZXJhdGVUaWNrTWFya0F0dHJIYXNoKCEwKSksaWR0LnNlbGVjdChpLm5vZGVzKClbdC5sZW5ndGgtMV0pLmNsYXNzZWQoZS5FTkRfVElDS19NQVJLX0NMQVNTLCEwKS5hdHRycyh0aGlzLl9nZW5lcmF0ZVRpY2tNYXJrQXR0ckhhc2goITApKSxuLmV4aXQoKS5yZW1vdmUoKSx0aGlzLl9iYXNlbGluZS5hdHRycyh0aGlzLl9nZW5lcmF0ZUJhc2VsaW5lQXR0ckhhc2goKSksdGhpcy5hbm5vdGF0aW9uc0VuYWJsZWQoKT90aGlzLl9kcmF3QW5ub3RhdGlvbnMoKTp0aGlzLl9yZW1vdmVBbm5vdGF0aW9ucygpLHRoaXN9LGUucHJvdG90eXBlLmFubm90YXRlZFRpY2tzPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX2Fubm90YXRlZFRpY2tzOih0aGlzLl9hbm5vdGF0ZWRUaWNrcz10LHRoaXMucmVuZGVyKCksdGhpcyl9LGUucHJvdG90eXBlLmFubm90YXRpb25Gb3JtYXR0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5fYW5ub3RhdGlvbkZvcm1hdHRlcjoodGhpcy5fYW5ub3RhdGlvbkZvcm1hdHRlcj10LHRoaXMucmVuZGVyKCksdGhpcyl9LGUucHJvdG90eXBlLmFubm90YXRpb25zRW5hYmxlZD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9hbm5vdGF0aW9uc0VuYWJsZWQ6KHRoaXMuX2Fubm90YXRpb25zRW5hYmxlZD10LHRoaXMucmVkcmF3KCksdGhpcyl9LGUucHJvdG90eXBlLmFubm90YXRpb25UaWVyQ291bnQ9ZnVuY3Rpb24odCl7aWYobnVsbD09dClyZXR1cm4gdGhpcy5fYW5ub3RhdGlvblRpZXJDb3VudDtpZih0PDApdGhyb3cgbmV3IEVycm9yKCJhbm5vdGF0aW9uVGllckNvdW50IGNhbm5vdCBiZSBuZWdhdGl2ZSIpO3JldHVybiB0aGlzLl9hbm5vdGF0aW9uVGllckNvdW50PXQsdGhpcy5yZWRyYXcoKSx0aGlzfSxlLnByb3RvdHlwZS5fZHJhd0Fubm90YXRpb25zPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxuPWUuX0FOTk9UQVRJT05fTEFCRUxfUEFERElORyxpPW5ldyBTbXQuTWFwLHI9dGhpcy5fYW5ub3RhdGVkVGlja3NUb1JlbmRlcigpO3IuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9dC5fYW5ub3RhdGlvbk1lYXN1cmVyLm1lYXN1cmUodC5hbm5vdGF0aW9uRm9ybWF0dGVyKCkoZSkpO2kuc2V0KGUse3dpZHRoOnIud2lkdGgrMipuLGhlaWdodDpyLmhlaWdodCsyKm59KX0pKTt2YXIgbz10aGlzLl9hbm5vdGF0aW9uTWVhc3VyZXIubWVhc3VyZSgpLmhlaWdodCsyKm4sYT10aGlzLl9hbm5vdGF0aW9uVG9UaWVyKGkpLHM9bmV3IFNtdC5TZXQsbD10aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMuaGVpZ2h0KCk6dGhpcy53aWR0aCgpLGM9dGhpcy5fY29yZVNpemUoKSx1PU1hdGgubWluKHRoaXMuYW5ub3RhdGlvblRpZXJDb3VudCgpLE1hdGguZmxvb3IoKGwtYykvbykpO2EuZm9yRWFjaCgoZnVuY3Rpb24odCxlKXsoLTE9PT10fHx0Pj11KSYmcy5hZGQoZSl9KSk7dmFyIGgsZD1mdW5jdGlvbih0LGUsbil7dmFyIGk9dC5zZWxlY3RBbGwoIi4iK24pLmRhdGEociksbz1pLmVudGVyKCkuYXBwZW5kKGUpLmNsYXNzZWQobiwhMCkubWVyZ2UoaSk7cmV0dXJuIGkuZXhpdCgpLnJlbW92ZSgpLG99LHA9ZnVuY3Rpb24oZSl7c3dpdGNoKHQub3JpZW50YXRpb24oKSl7Y2FzZSJib3R0b20iOmNhc2UicmlnaHQiOnJldHVybiBhLmdldChlKSpvK2M7Y2FzZSJ0b3AiOmNhc2UibGVmdCI6cmV0dXJuIGwtYy1hLmdldChlKSpvfX0sZj1mdW5jdGlvbihlKXtyZXR1cm4gdC5fc2NhbGUuc2NhbGUoZSl9LG09ZnVuY3Rpb24odCl7cmV0dXJuIHMuaGFzKHQpPyJoaWRkZW4iOiJ2aXNpYmxlIn07c3dpdGNoKHRoaXMub3JpZW50YXRpb24oKSl7Y2FzZSJib3R0b20iOmNhc2UicmlnaHQiOmg9MDticmVhaztjYXNlInRvcCI6aD10aGlzLmhlaWdodCgpO2JyZWFrO2Nhc2UibGVmdCI6aD10aGlzLndpZHRoKCl9dmFyIGc9dGhpcy5pc0hvcml6b250YWwoKTtkKHRoaXMuX2Fubm90YXRpb25Db250YWluZXIuc2VsZWN0KCIuYW5ub3RhdGlvbi1saW5lLWNvbnRhaW5lciIpLCJsaW5lIixlLkFOTk9UQVRJT05fTElORV9DTEFTUykuYXR0cnMoe3gxOmc/ZjpoLHgyOmc/ZjpwLHkxOmc/aDpmLHkyOmc/cDpmLHZpc2liaWxpdHk6bX0pLGQodGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5zZWxlY3QoIi5hbm5vdGF0aW9uLWNpcmNsZS1jb250YWluZXIiKSwiY2lyY2xlIixlLkFOTk9UQVRJT05fQ0lSQ0xFX0NMQVNTKS5hdHRycyh7Y3g6Zz9mOmgsY3k6Zz9oOmYscjozfSk7dmFyIF89ZnVuY3Rpb24oZSl7c3dpdGNoKHQub3JpZW50YXRpb24oKSl7Y2FzZSJib3R0b20iOmNhc2UicmlnaHQiOnJldHVybiBwKGUpO2Nhc2UidG9wIjpjYXNlImxlZnQiOnJldHVybiBwKGUpLWkuZ2V0KGUpLmhlaWdodH19O2QodGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5zZWxlY3QoIi5hbm5vdGF0aW9uLXJlY3QtY29udGFpbmVyIiksInJlY3QiLGUuQU5OT1RBVElPTl9SRUNUX0NMQVNTKS5hdHRycyh7eDpnP2Y6Xyx5Omc/XzpmLHdpZHRoOmc/ZnVuY3Rpb24odCl7cmV0dXJuIGkuZ2V0KHQpLndpZHRofTpmdW5jdGlvbih0KXtyZXR1cm4gaS5nZXQodCkuaGVpZ2h0fSxoZWlnaHQ6Zz9mdW5jdGlvbih0KXtyZXR1cm4gaS5nZXQodCkuaGVpZ2h0fTpmdW5jdGlvbih0KXtyZXR1cm4gaS5nZXQodCkud2lkdGh9LHZpc2liaWxpdHk6bX0pO3ZhciB5PXRoaXMuX2Fubm90YXRpb25Xcml0ZXIsdj10aGlzLmFubm90YXRpb25Gb3JtYXR0ZXIoKSxiPWQodGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5zZWxlY3QoIi5hbm5vdGF0aW9uLWxhYmVsLWNvbnRhaW5lciIpLCJnIixlLkFOTk9UQVRJT05fTEFCRUxfQ0xBU1MpO2Iuc2VsZWN0QWxsKCIudGV4dC1jb250YWluZXIiKS5yZW1vdmUoKSxiLmF0dHJzKHt0cmFuc2Zvcm06ZnVuY3Rpb24odCl7cmV0dXJuInRyYW5zbGF0ZSgiKyhnP2YodCk6Xyh0KSkrIiwiKyhnP18odCk6Zih0KSkrIikifSx2aXNpYmlsaXR5Om19KS5lYWNoKChmdW5jdGlvbih0KXt5LndyaXRlKHYodCksZz9pLmdldCh0KS53aWR0aDppLmdldCh0KS5oZWlnaHQsZz9pLmdldCh0KS5oZWlnaHQ6aS5nZXQodCkud2lkdGgse3hBbGlnbjoiY2VudGVyIix5QWxpZ246ImNlbnRlciIsdGV4dFJvdGF0aW9uOmc/MDo5MH0saWR0LnNlbGVjdCh0aGlzKS5ub2RlKCkpfSkpfSxlLnByb3RvdHlwZS5fYW5ub3RhdGVkVGlja3NUb1JlbmRlcj1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10aGlzLl9zY2FsZS5yYW5nZSgpO3JldHVybiBTbXQuQXJyYXkudW5pcSh0aGlzLmFubm90YXRlZFRpY2tzKCkuZmlsdGVyKChmdW5jdGlvbihuKXtyZXR1cm4gbnVsbCE9biYmU210Lk1hdGguaW5SYW5nZSh0Ll9zY2FsZS5zY2FsZShuKSxlWzBdLGVbMV0pfSkpKX0sZS5wcm90b3R5cGUuX2NvcmVTaXplPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5pc0hvcml6b250YWwoKT90aGlzLmhlaWdodCgpOnRoaXMud2lkdGgoKSxlPXRoaXMuaXNIb3Jpem9udGFsKCk/dGhpcy5fY29tcHV0ZUhlaWdodCgpOnRoaXMuX2NvbXB1dGVXaWR0aCgpO3JldHVybiBNYXRoLm1pbihlLHQpfSxlLnByb3RvdHlwZS5fYW5ub3RhdGlvblRpZXJIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYW5ub3RhdGlvbk1lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQrMiplLl9BTk5PVEFUSU9OX0xBQkVMX1BBRERJTkd9LGUucHJvdG90eXBlLl9hbm5vdGF0aW9uVG9UaWVyPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1bW11dLGk9bmV3IFNtdC5NYXAscj10aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMud2lkdGgoKTp0aGlzLmhlaWdodCgpO3JldHVybiB0aGlzLl9hbm5vdGF0ZWRUaWNrc1RvUmVuZGVyKCkuZm9yRWFjaCgoZnVuY3Rpb24obyl7dmFyIGE9ZS5fc2NhbGUuc2NhbGUobykscz10LmdldChvKS53aWR0aDtpZihhPDB8fGErcz5yKWkuc2V0KG8sLTEpO2Vsc2V7Zm9yKHZhciBsPTA7bltsXS5zb21lKChmdW5jdGlvbihuKXt2YXIgaT1lLl9zY2FsZS5zY2FsZShuKSxyPXQuZ2V0KG4pLndpZHRoO3JldHVybiBhK3M+PWkmJmE8PWkrcn0pKTspbCsrLG4ubGVuZ3RoPT09bCYmbi5wdXNoKFtdKTtuW2xdLnB1c2gobyksaS5zZXQobyxsKX19KSksaX0sZS5wcm90b3R5cGUuX3JlbW92ZUFubm90YXRpb25zPWZ1bmN0aW9uKCl7dGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5zZWxlY3RBbGwoIi5hbm5vdGF0aW9uLWxpbmUiKS5yZW1vdmUoKSx0aGlzLl9hbm5vdGF0aW9uQ29udGFpbmVyLnNlbGVjdEFsbCgiLmFubm90YXRpb24tY2lyY2xlIikucmVtb3ZlKCksdGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5zZWxlY3RBbGwoIi5hbm5vdGF0aW9uLXJlY3QiKS5yZW1vdmUoKSx0aGlzLl9hbm5vdGF0aW9uQ29udGFpbmVyLnNlbGVjdEFsbCgiLmFubm90YXRpb24tbGFiZWwiKS5yZW1vdmUoKX0sZS5wcm90b3R5cGUuX2dlbmVyYXRlQmFzZWxpbmVBdHRySGFzaD1mdW5jdGlvbigpe3ZhciB0PXt4MTowLHkxOjAseDI6MCx5MjowfTtzd2l0Y2godGhpcy5fb3JpZW50YXRpb24pe2Nhc2UiYm90dG9tIjp0LngyPXRoaXMud2lkdGgoKTticmVhaztjYXNlInRvcCI6dC54Mj10aGlzLndpZHRoKCksdC55MT10aGlzLmhlaWdodCgpLHQueTI9dGhpcy5oZWlnaHQoKTticmVhaztjYXNlImxlZnQiOnQueDE9dGhpcy53aWR0aCgpLHQueDI9dGhpcy53aWR0aCgpLHQueTI9dGhpcy5oZWlnaHQoKTticmVhaztjYXNlInJpZ2h0Ijp0LnkyPXRoaXMuaGVpZ2h0KCl9cmV0dXJuIHR9LGUucHJvdG90eXBlLl9nZW5lcmF0ZVRpY2tNYXJrQXR0ckhhc2g9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt2b2lkIDA9PT10JiYodD0hMSk7dmFyIG49e3gxOjAseTE6MCx4MjowLHkyOjB9LGk9ZnVuY3Rpb24odCl7cmV0dXJuIGUuX3NjYWxlLnNjYWxlKHQpfTt0aGlzLmlzSG9yaXpvbnRhbCgpPyhuLngxPWksbi54Mj1pKToobi55MT1pLG4ueTI9aSk7dmFyIHI9dD90aGlzLl9lbmRUaWNrTGVuZ3RoOnRoaXMuX2lubmVyVGlja0xlbmd0aDtzd2l0Y2godGhpcy5fb3JpZW50YXRpb24pe2Nhc2UiYm90dG9tIjpuLnkyPXI7YnJlYWs7Y2FzZSJ0b3AiOm4ueTE9dGhpcy5oZWlnaHQoKSxuLnkyPXRoaXMuaGVpZ2h0KCktcjticmVhaztjYXNlImxlZnQiOm4ueDE9dGhpcy53aWR0aCgpLG4ueDI9dGhpcy53aWR0aCgpLXI7YnJlYWs7Y2FzZSJyaWdodCI6bi54Mj1yfXJldHVybiBufSxlLnByb3RvdHlwZS5fc2V0RGVmYXVsdEFsaWdubWVudD1mdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9vcmllbnRhdGlvbil7Y2FzZSJib3R0b20iOnRoaXMueUFsaWdubWVudCgidG9wIik7YnJlYWs7Y2FzZSJ0b3AiOnRoaXMueUFsaWdubWVudCgiYm90dG9tIik7YnJlYWs7Y2FzZSJsZWZ0Ijp0aGlzLnhBbGlnbm1lbnQoInJpZ2h0Iik7YnJlYWs7Y2FzZSJyaWdodCI6dGhpcy54QWxpZ25tZW50KCJsZWZ0Iil9fSxlLnByb3RvdHlwZS5pc0hvcml6b250YWw9ZnVuY3Rpb24oKXtyZXR1cm4idG9wIj09PXRoaXMuX29yaWVudGF0aW9ufHwiYm90dG9tIj09PXRoaXMuX29yaWVudGF0aW9ufSxlLnByb3RvdHlwZS5nZXRTY2FsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zY2FsZX0sZS5wcm90b3R5cGUuZm9ybWF0dGVyPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX2Zvcm1hdHRlcjoodGhpcy5fZm9ybWF0dGVyPXQsdGhpcy5yZWRyYXcoKSx0aGlzKX0sZS5wcm90b3R5cGUuaW5uZXJUaWNrTGVuZ3RoPWZ1bmN0aW9uKHQpe2lmKG51bGw9PXQpcmV0dXJuIHRoaXMuX2lubmVyVGlja0xlbmd0aDtpZih0PDApdGhyb3cgbmV3IEVycm9yKCJpbm5lciB0aWNrIGxlbmd0aCBtdXN0IGJlIHBvc2l0aXZlIik7cmV0dXJuIHRoaXMuX2lubmVyVGlja0xlbmd0aD10LHRoaXMucmVkcmF3KCksdGhpc30sZS5wcm90b3R5cGUuZW5kVGlja0xlbmd0aD1mdW5jdGlvbih0KXtpZihudWxsPT10KXJldHVybiB0aGlzLl9lbmRUaWNrTGVuZ3RoO2lmKHQ8MCl0aHJvdyBuZXcgRXJyb3IoImVuZCB0aWNrIGxlbmd0aCBtdXN0IGJlIHBvc2l0aXZlIik7cmV0dXJuIHRoaXMuX2VuZFRpY2tMZW5ndGg9dCx0aGlzLnJlZHJhdygpLHRoaXN9LGUucHJvdG90eXBlLl9tYXhMYWJlbFRpY2tMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaG93RW5kVGlja0xhYmVscygpP01hdGgubWF4KHRoaXMuaW5uZXJUaWNrTGVuZ3RoKCksdGhpcy5lbmRUaWNrTGVuZ3RoKCkpOnRoaXMuaW5uZXJUaWNrTGVuZ3RoKCl9LGUucHJvdG90eXBlLnRpY2tMYWJlbFBhZGRpbmc9ZnVuY3Rpb24odCl7aWYobnVsbD09dClyZXR1cm4gdGhpcy5fdGlja0xhYmVsUGFkZGluZztpZih0PDApdGhyb3cgbmV3IEVycm9yKCJ0aWNrIGxhYmVsIHBhZGRpbmcgbXVzdCBiZSBwb3NpdGl2ZSIpO3JldHVybiB0aGlzLl90aWNrTGFiZWxQYWRkaW5nPXQsdGhpcy5yZWRyYXcoKSx0aGlzfSxlLnByb3RvdHlwZS5tYXJnaW49ZnVuY3Rpb24odCl7aWYobnVsbD09dClyZXR1cm4gdGhpcy5fbWFyZ2luO2lmKHQ8MCl0aHJvdyBuZXcgRXJyb3IoIm1hcmdpbiBzaXplIG11c3QgYmUgcG9zaXRpdmUiKTtyZXR1cm4gdGhpcy5fbWFyZ2luPXQsdGhpcy5yZWRyYXcoKSx0aGlzfSxlLnByb3RvdHlwZS5vcmllbnRhdGlvbj1mdW5jdGlvbih0KXtpZihudWxsPT10KXJldHVybiB0aGlzLl9vcmllbnRhdGlvbjt2YXIgZT10LnRvTG93ZXJDYXNlKCk7aWYoInRvcCIhPT1lJiYiYm90dG9tIiE9PWUmJiJsZWZ0IiE9PWUmJiJyaWdodCIhPT1lKXRocm93IG5ldyBFcnJvcigidW5zdXBwb3J0ZWQgb3JpZW50YXRpb24iKTtyZXR1cm4gdGhpcy5fb3JpZW50YXRpb249ZSx0aGlzLnJlZHJhdygpLHRoaXN9LGUucHJvdG90eXBlLnNob3dFbmRUaWNrTGFiZWxzPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX3Nob3dFbmRUaWNrTGFiZWxzOih0aGlzLl9zaG93RW5kVGlja0xhYmVscz10LHRoaXMucmVuZGVyKCksdGhpcyl9LGUucHJvdG90eXBlLl9zaG93QWxsVGlja01hcmtzPWZ1bmN0aW9uKCl7dGhpcy5fdGlja01hcmtDb250YWluZXIuc2VsZWN0QWxsKCIuIitlLlRJQ0tfTUFSS19DTEFTUykuZWFjaCgoZnVuY3Rpb24oKXtpZHQuc2VsZWN0KHRoaXMpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaW5oZXJpdCIpfSkpfSxlLnByb3RvdHlwZS5fc2hvd0FsbFRpY2tMYWJlbHM9ZnVuY3Rpb24oKXt0aGlzLl90aWNrTGFiZWxDb250YWluZXIuc2VsZWN0QWxsKCIuIitlLlRJQ0tfTEFCRUxfQ0xBU1MpLmVhY2goKGZ1bmN0aW9uKCl7aWR0LnNlbGVjdCh0aGlzKS5zdHlsZSgidmlzaWJpbGl0eSIsImluaGVyaXQiKX0pKX0sZS5wcm90b3R5cGUuX2hpZGVPdmVyZmxvd2luZ1RpY2tMYWJlbHM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVsZW1lbnQoKS5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj10aGlzLl90aWNrTGFiZWxDb250YWluZXIuc2VsZWN0QWxsKCIuIitlLlRJQ0tfTEFCRUxfQ0xBU1MpO24uZW1wdHkoKXx8bi5lYWNoKChmdW5jdGlvbihlLG4pe1NtdC5ET00uY2xpZW50UmVjdEluc2lkZSh0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHQpfHxpZHQuc2VsZWN0KHRoaXMpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIil9KSl9LGUucHJvdG90eXBlLl9oaWRlVGlja01hcmtzV2l0aG91dExhYmVsPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fdGlja01hcmtDb250YWluZXIuc2VsZWN0QWxsKCIuIitlLlRJQ0tfTUFSS19DTEFTUyksbj10aGlzLl90aWNrTGFiZWxDb250YWluZXIuc2VsZWN0QWxsKCIuIitlLlRJQ0tfTEFCRUxfQ0xBU1MpLmZpbHRlcigoZnVuY3Rpb24odCxlKXt2YXIgbj1pZHQuc2VsZWN0KHRoaXMpLnN0eWxlKCJ2aXNpYmlsaXR5Iik7cmV0dXJuImluaGVyaXQiPT09bnx8InZpc2libGUiPT09bn0pKS5kYXRhKCk7dC5lYWNoKChmdW5jdGlvbih0LGUpey0xPT09bi5pbmRleE9mKHQpJiZpZHQuc2VsZWN0KHRoaXMpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIil9KSl9LGUucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZT1mdW5jdGlvbigpe3QucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZS5jYWxsKHRoaXMpLHRoaXMuX2Fubm90YXRpb25NZWFzdXJlci5yZXNldCgpfSxlLkVORF9USUNLX01BUktfQ0xBU1M9ImVuZC10aWNrLW1hcmsiLGUuVElDS19NQVJLX0NMQVNTPSJ0aWNrLW1hcmsiLGUuVElDS19MQUJFTF9DTEFTUz0idGljay1sYWJlbCIsZS5BTk5PVEFUSU9OX0xJTkVfQ0xBU1M9ImFubm90YXRpb24tbGluZSIsZS5BTk5PVEFUSU9OX1JFQ1RfQ0xBU1M9ImFubm90YXRpb24tcmVjdCIsZS5BTk5PVEFUSU9OX0NJUkNMRV9DTEFTUz0iYW5ub3RhdGlvbi1jaXJjbGUiLGUuQU5OT1RBVElPTl9MQUJFTF9DTEFTUz0iYW5ub3RhdGlvbi1sYWJlbCIsZS5fQU5OT1RBVElPTl9MQUJFTF9QQURESU5HPTQsZX0pKFRtdC5Db21wb25lbnQpO2UuQXhpcz1ufSkpLGttdD1iZSgoZnVuY3Rpb24odCxlKXsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dm9pZCAwPT09biYmKG49ImJvdHRvbSIpO3ZhciBpPXQuY2FsbCh0aGlzLGUsbil8fHRoaXM7cmV0dXJuIGkuX3RpY2tMYWJlbEFuZ2xlPTAsaS5fdGlja0xhYmVsU2hlYXJBbmdsZT0wLGkuYWRkQ2xhc3MoImNhdGVnb3J5LWF4aXMiKSxpfXJldHVybiBEZnQuX19leHRlbmRzKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJfd3JhcHBlciIse2dldDpmdW5jdGlvbigpe3ZhciB0PW5ldyBhbXQuV3JhcHBlcjtyZXR1cm4gbnVsbCE9dGhpcy5fdGlja0xhYmVsTWF4TGluZXMmJnQubWF4TGluZXModGhpcy5fdGlja0xhYmVsTWF4TGluZXMpLHR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJfd3JpdGVyIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBhbXQuV3JpdGVyKHRoaXMuX21lYXN1cmVyLHRoaXMuX3R5cGVzZXR0ZXJDb250ZXh0LHRoaXMuX3dyYXBwZXIpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe3QucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLHRoaXMuX3R5cGVzZXR0ZXJDb250ZXh0PW5ldyBhbXQuU3ZnQ29udGV4dCh0aGlzLl90aWNrTGFiZWxDb250YWluZXIubm9kZSgpKSx0aGlzLl9tZWFzdXJlcj1uZXcgYW10LkNhY2hlTWVhc3VyZXIodGhpcy5fdHlwZXNldHRlckNvbnRleHQpfSxlLnByb3RvdHlwZS5fcmVzY2FsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlZHJhdygpfSxlLnByb3RvdHlwZS5yZXF1ZXN0ZWRTcGFjZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuaXNIb3Jpem9udGFsKCk/MDp0aGlzLl90aWNrU3BhY2VSZXF1aXJlZCgpK3RoaXMubWFyZ2luKCksaT10aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCkrdGhpcy5tYXJnaW4oKTowO2lmKDA9PT10aGlzLl9zY2FsZS5kb21haW4oKS5sZW5ndGgpcmV0dXJue21pbldpZHRoOjAsbWluSGVpZ2h0OjB9O2lmKHRoaXMuYW5ub3RhdGlvbnNFbmFibGVkKCkpe3ZhciByPXRoaXMuX2Fubm90YXRpb25UaWVySGVpZ2h0KCkqdGhpcy5hbm5vdGF0aW9uVGllckNvdW50KCk7dGhpcy5pc0hvcml6b250YWwoKT9pKz1yOm4rPXJ9dmFyIG89dGhpcy5fbWVhc3VyZVRpY2tMYWJlbHModCxlKTtyZXR1cm57bWluV2lkdGg6by51c2VkV2lkdGgrbixtaW5IZWlnaHQ6by51c2VkSGVpZ2h0K2l9fSxlLnByb3RvdHlwZS5fY29yZVNpemU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMuaGVpZ2h0KCk6dGhpcy53aWR0aCgpLGU9dGhpcy5pc0hvcml6b250YWwoKT90aGlzLnJlcXVlc3RlZFNwYWNlKHRoaXMud2lkdGgoKSx0aGlzLmhlaWdodCgpKS5taW5IZWlnaHQ6dGhpcy5yZXF1ZXN0ZWRTcGFjZSh0aGlzLndpZHRoKCksdGhpcy5oZWlnaHQoKSkubWluV2lkdGgsbj10aGlzLm1hcmdpbigpK3RoaXMuX2Fubm90YXRpb25UaWVySGVpZ2h0KCk7cmV0dXJuIE1hdGgubWluKGUtbix0KX0sZS5wcm90b3R5cGUuX2dldFRpY2tWYWx1ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXREb3duc2FtcGxlSW5mbygpLmRvbWFpbn0sZS5wcm90b3R5cGUuX3NpemVGcm9tT2ZmZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gVG10LkNvbXBvbmVudC5wcm90b3R5cGUuX3NpemVGcm9tT2ZmZXIuY2FsbCh0aGlzLHQsZSl9LGUucHJvdG90eXBlLmdldERvd25zYW1wbGVJbmZvPWZ1bmN0aW9uKHQsbil7dm9pZCAwPT09dCYmKHQ9dGhpcy5fc2NhbGUpLHZvaWQgMD09PW4mJihuPXQuaW52ZXJ0UmFuZ2UoKSk7dmFyIGk9MD09PXRoaXMuX3RpY2tMYWJlbEFuZ2xlPzE6MS9NYXRoLmNvcyh0aGlzLl90aWNrTGFiZWxTaGVhckFuZ2xlLzE4MCpNYXRoLlBJKSxyPU1hdGguY2VpbChlLl9NSU5JTVVNX1dJRFRIX1BFUl9MQUJFTF9QWCppL3Quc3RlcFdpZHRoKCkpO3JldHVybntkb21haW46bi5maWx0ZXIoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUlcj09MH0pKSxzdGVwV2lkdGg6cip0LnN0ZXBXaWR0aCgpfX0sZS5wcm90b3R5cGUudGlja0xhYmVsQW5nbGU9ZnVuY3Rpb24odCl7aWYobnVsbD09dClyZXR1cm4gdGhpcy5fdGlja0xhYmVsQW5nbGU7aWYoMCE9PXQmJjkwIT09dCYmLTkwIT09dCl0aHJvdyBuZXcgRXJyb3IoIkFuZ2xlICIrdCsiIG5vdCBzdXBwb3J0ZWQ7IG9ubHkgMCwgOTAsIGFuZCAtOTAgYXJlIHZhbGlkIHZhbHVlcyIpO3JldHVybiB0aGlzLl90aWNrTGFiZWxBbmdsZT10LHRoaXMucmVkcmF3KCksdGhpc30sZS5wcm90b3R5cGUudGlja0xhYmVsU2hlYXJBbmdsZT1mdW5jdGlvbih0KXtpZihudWxsPT10KXJldHVybiB0aGlzLl90aWNrTGFiZWxTaGVhckFuZ2xlO2lmKHQ8LTgwfHx0PjgwKXRocm93IG5ldyBFcnJvcigiQW5nbGUgIit0KyIgbm90IHN1cHBvcnRlZDsgTXVzdCBiZSBiZXR3ZWVuIFstODAsIDgwXSIpO3JldHVybiB0aGlzLl90aWNrTGFiZWxTaGVhckFuZ2xlPXQsdGhpcy5yZWRyYXcoKSx0aGlzfSxlLnByb3RvdHlwZS50aWNrTGFiZWxNYXhXaWR0aD1mdW5jdGlvbih0KXtyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGg/dGhpcy5fdGlja0xhYmVsTWF4V2lkdGg6KHRoaXMuX3RpY2tMYWJlbE1heFdpZHRoPXQsdGhpcy5yZWRyYXcoKSx0aGlzKX0sZS5wcm90b3R5cGUudGlja0xhYmVsTWF4TGluZXM9ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMuX3RpY2tMYWJlbE1heExpbmVzOih0aGlzLl90aWNrTGFiZWxNYXhMaW5lcz10LHRoaXMucmVkcmF3KCksdGhpcyl9LGUucHJvdG90eXBlLl90aWNrU3BhY2VSZXF1aXJlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXhMYWJlbFRpY2tMZW5ndGgoKSt0aGlzLnRpY2tMYWJlbFBhZGRpbmcoKX0sZS5wcm90b3R5cGUuX2RyYXdUaWNrcz1mdW5jdGlvbih0LGUpe3ZhciBuLGkscj10aGlzO3N3aXRjaCh0aGlzLnRpY2tMYWJlbEFuZ2xlKCkpe2Nhc2UgMDpuPXtsZWZ0OiJyaWdodCIscmlnaHQ6ImxlZnQiLHRvcDoiY2VudGVyIixib3R0b206ImNlbnRlciJ9LGk9e2xlZnQ6ImNlbnRlciIscmlnaHQ6ImNlbnRlciIsdG9wOiJib3R0b20iLGJvdHRvbToidG9wIn07YnJlYWs7Y2FzZSA5MDpuPXtsZWZ0OiJjZW50ZXIiLHJpZ2h0OiJjZW50ZXIiLHRvcDoicmlnaHQiLGJvdHRvbToibGVmdCJ9LGk9e2xlZnQ6InRvcCIscmlnaHQ6ImJvdHRvbSIsdG9wOiJjZW50ZXIiLGJvdHRvbToiY2VudGVyIn07YnJlYWs7Y2FzZS05MDpuPXtsZWZ0OiJjZW50ZXIiLHJpZ2h0OiJjZW50ZXIiLHRvcDoibGVmdCIsYm90dG9tOiJyaWdodCJ9LGk9e2xlZnQ6ImJvdHRvbSIscmlnaHQ6InRvcCIsdG9wOiJjZW50ZXIiLGJvdHRvbToiY2VudGVyIn19ZS5lYWNoKChmdW5jdGlvbihlKXt2YXIgbz1pZHQuc2VsZWN0KHRoaXMpLGE9ci5pc0hvcml6b250YWwoKT90OnIud2lkdGgoKS1yLl90aWNrU3BhY2VSZXF1aXJlZCgpLHM9ci5pc0hvcml6b250YWwoKT9yLmhlaWdodCgpLXIuX3RpY2tTcGFjZVJlcXVpcmVkKCk6dCxsPXt4QWxpZ246bltyLm9yaWVudGF0aW9uKCldLHlBbGlnbjppW3Iub3JpZW50YXRpb24oKV0sdGV4dFJvdGF0aW9uOnIudGlja0xhYmVsQW5nbGUoKSx0ZXh0U2hlYXI6ci50aWNrTGFiZWxTaGVhckFuZ2xlKCl9O2lmKG51bGwhPXIuX3RpY2tMYWJlbE1heFdpZHRoKXtpZigibGVmdCI9PT1yLm9yaWVudGF0aW9uKCkmJmE+ci5fdGlja0xhYmVsTWF4V2lkdGgpe3ZhciBjPWEtci5fdGlja0xhYmVsTWF4V2lkdGgsdT1vLmF0dHIoInRyYW5zZm9ybSIpKyIgdHJhbnNsYXRlKCIrYysiLCAwKSI7by5hdHRyKCJ0cmFuc2Zvcm0iLHUpfWE9TWF0aC5taW4oYSxyLl90aWNrTGFiZWxNYXhXaWR0aCl9ci5fd3JpdGVyLndyaXRlKHIuZm9ybWF0dGVyKCkoZSksYSxzLGwsby5ub2RlKCkpfSkpfSxlLnByb3RvdHlwZS5fbWVhc3VyZVRpY2tMYWJlbHM9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLGk9dGhpcy5fc2NhbGUuY2xvbmVXaXRob3V0UHJvdmlkZXJzKCkucmFuZ2UoWzAsdGhpcy5pc0hvcml6b250YWwoKT90OmVdKSxyPXRoaXMuZ2V0RG93bnNhbXBsZUluZm8oaSksbz1yLmRvbWFpbixhPXIuc3RlcFdpZHRoLHM9dC10aGlzLl90aWNrU3BhY2VSZXF1aXJlZCgpO3RoaXMuaXNIb3Jpem9udGFsKCkmJihzPWEsMCE9PXRoaXMuX3RpY2tMYWJlbEFuZ2xlJiYocz1lLXRoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCkpLHM9TWF0aC5tYXgocywwKSk7dmFyIGw9YTt0aGlzLmlzSG9yaXpvbnRhbCgpJiYobD1lLXRoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCksMCE9PXRoaXMuX3RpY2tMYWJlbEFuZ2xlJiYobD10LXRoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCkpLGw9TWF0aC5tYXgobCwwKSksbnVsbCE9dGhpcy5fdGlja0xhYmVsTWF4V2lkdGgmJihzPU1hdGgubWluKHMsdGhpcy5fdGlja0xhYmVsTWF4V2lkdGgpKTt2YXIgYyx1PW8ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gbi5fd3JhcHBlci53cmFwKG4uZm9ybWF0dGVyKCkodCksbi5fbWVhc3VyZXIscyxsKX0pKSxoPXRoaXMuaXNIb3Jpem9udGFsKCkmJjA9PT10aGlzLl90aWNrTGFiZWxBbmdsZT9pZHQuc3VtOlNtdC5NYXRoLm1heCxkPXRoaXMuaXNIb3Jpem9udGFsKCkmJjA9PT10aGlzLl90aWNrTGFiZWxBbmdsZT9TbXQuTWF0aC5tYXg6aWR0LnN1bSxwPWgodSwoZnVuY3Rpb24odCl7cmV0dXJuIG4uX21lYXN1cmVyLm1lYXN1cmUodC53cmFwcGVkVGV4dCkud2lkdGh9KSwwKSxmPWQodSwoZnVuY3Rpb24odCl7cmV0dXJuIG4uX21lYXN1cmVyLm1lYXN1cmUodC53cmFwcGVkVGV4dCkuaGVpZ2h0fSksMCk7cmV0dXJuIDAhPT10aGlzLl90aWNrTGFiZWxBbmdsZSYmKHA9KGM9W2YscF0pWzBdLGY9Y1sxXSkse3VzZWRXaWR0aDpwLHVzZWRIZWlnaHQ6Zn19LGUucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0LnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHRoaXMpO3ZhciBuPXRoaXMuX3NjYWxlLGk9dGhpcy5nZXREb3duc2FtcGxlSW5mbyhuKSxyPWkuZG9tYWluLG89aS5zdGVwV2lkdGgsYT1vO3RoaXMuaXNIb3Jpem9udGFsKCkmJm51bGwhPXRoaXMuX3RpY2tMYWJlbE1heFdpZHRoJiYoYT1NYXRoLm1pbihhLHRoaXMuX3RpY2tMYWJlbE1heFdpZHRoKSk7dmFyIHM9dGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLnNlbGVjdEFsbCgiLiIrQW10LkF4aXMuVElDS19MQUJFTF9DTEFTUykuZGF0YShyKSxsPXMuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKEFtdC5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MsITApLm1lcmdlKHMpO3MuZXhpdCgpLnJlbW92ZSgpLGwuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCxpKXt2YXIgcj1uLnNjYWxlKHQpLWEvMjtyZXR1cm4idHJhbnNsYXRlKCIrKGUuaXNIb3Jpem9udGFsKCk/cjowKSsiLCIrKGUuaXNIb3Jpem9udGFsKCk/MDpyKSsiKSJ9KSksbC50ZXh0KCIiKSx0aGlzLl9kcmF3VGlja3MobyxsKTt2YXIgYz0icmlnaHQiPT09dGhpcy5vcmllbnRhdGlvbigpP3RoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCk6MCx1PSJib3R0b20iPT09dGhpcy5vcmllbnRhdGlvbigpP3RoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCk6MDtyZXR1cm4gdGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2MrIiwiK3UrIikiKSx0aGlzLl9zaG93QWxsVGlja01hcmtzKCksdGhpcy5fc2hvd0FsbFRpY2tMYWJlbHMoKSx0aGlzLl9oaWRlVGlja01hcmtzV2l0aG91dExhYmVsKCksdGhpc30sZS5wcm90b3R5cGUuY29tcHV0ZUxheW91dD1mdW5jdGlvbihlLG4saSl7cmV0dXJuIHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQuY2FsbCh0aGlzLGUsbixpKSx0aGlzLmlzSG9yaXpvbnRhbCgpfHx0aGlzLl9zY2FsZS5yYW5nZShbMCx0aGlzLmhlaWdodCgpXSksdGhpc30sZS5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7dC5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlLmNhbGwodGhpcyksdGhpcy5fbWVhc3VyZXIucmVzZXQoKX0sZS5fTUlOSU1VTV9XSURUSF9QRVJfTEFCRUxfUFg9MTUsZX0pKEFtdC5BeGlzKTtlLkNhdGVnb3J5PW59KSksTG10PWJlKChmdW5jdGlvbih0LGUpewovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgaT10LmNhbGwodGhpcyxlLG4pfHx0aGlzO3JldHVybiBpLl90aWNrTGFiZWxQb3NpdGlvbmluZz0iY2VudGVyIixpLl91c2VzVGV4dFdpZHRoQXBwcm94aW1hdGlvbj0hMSxpLmZvcm1hdHRlcihDbXQuZ2VuZXJhbCgpKSxpfXJldHVybiBEZnQuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7dC5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyk7dmFyIGU9bmV3IGFtdC5TdmdDb250ZXh0KHRoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5ub2RlKCksQW10LkF4aXMuVElDS19MQUJFTF9DTEFTUyk7dGhpcy5fbWVhc3VyZXI9bmV3IGFtdC5DYWNoZU1lYXN1cmVyKGUpLHRoaXMuX3dyYXBwZXI9KG5ldyBhbXQuV3JhcHBlcikubWF4TGluZXMoMSl9LGUucHJvdG90eXBlLl9jb21wdXRlV2lkdGg9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl91c2VzVGV4dFdpZHRoQXBwcm94aW1hdGlvbj90aGlzLl9jb21wdXRlQXBwcm94aW1hdGVUZXh0V2lkdGgoKTp0aGlzLl9jb21wdXRlRXhhY3RUZXh0V2lkdGgoKTtyZXR1cm4iY2VudGVyIj09PXRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nP3RoaXMuX21heExhYmVsVGlja0xlbmd0aCgpK3RoaXMudGlja0xhYmVsUGFkZGluZygpK3Q6TWF0aC5tYXgodGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCksdGhpcy50aWNrTGFiZWxQYWRkaW5nKCkrdCl9LGUucHJvdG90eXBlLl9jb21wdXRlRXhhY3RUZXh0V2lkdGg9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dGhpcy5fZ2V0VGlja1ZhbHVlcygpLm1hcCgoZnVuY3Rpb24oZSl7dmFyIG49dC5mb3JtYXR0ZXIoKShlKTtyZXR1cm4gdC5fbWVhc3VyZXIubWVhc3VyZShuKS53aWR0aH0pKTtyZXR1cm4gU210Lk1hdGgubWF4KGUsMCl9LGUucHJvdG90eXBlLl9jb21wdXRlQXBwcm94aW1hdGVUZXh0V2lkdGg9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dGhpcy5fZ2V0VGlja1ZhbHVlcygpLG49dGhpcy5fbWVhc3VyZXIubWVhc3VyZSgiTSIpLndpZHRoLGk9ZS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiB0LmZvcm1hdHRlcigpKGUpLmxlbmd0aCpufSkpO3JldHVybiBTbXQuTWF0aC5tYXgoaSwwKX0sZS5wcm90b3R5cGUuX2NvbXB1dGVIZWlnaHQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9tZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0O3JldHVybiJjZW50ZXIiPT09dGhpcy5fdGlja0xhYmVsUG9zaXRpb25pbmc/dGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCkrdGhpcy50aWNrTGFiZWxQYWRkaW5nKCkrdDpNYXRoLm1heCh0aGlzLl9tYXhMYWJlbFRpY2tMZW5ndGgoKSx0aGlzLnRpY2tMYWJlbFBhZGRpbmcoKSt0KX0sZS5wcm90b3R5cGUuX2dldFRpY2tWYWx1ZXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9zY2FsZSxlPXQuZG9tYWluKCksbj1lWzBdPD1lWzFdP2VbMF06ZVsxXSxpPWVbMF0+PWVbMV0/ZVswXTplWzFdO3JldHVybiB0LnRpY2tzKCkuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdD49biYmdDw9aX0pKX0sZS5wcm90b3R5cGUuX3Jlc2NhbGU9ZnVuY3Rpb24oKXtpZih0aGlzLl9pc1NldHVwKXtpZighdGhpcy5pc0hvcml6b250YWwoKSl7dmFyIHQ9dGhpcy5fY29tcHV0ZVdpZHRoKCk7aWYodD50aGlzLndpZHRoKCl8fHQ8dGhpcy53aWR0aCgpLXRoaXMubWFyZ2luKCkpcmV0dXJuIHZvaWQgdGhpcy5yZWRyYXcoKX10aGlzLnJlbmRlcigpfX0sZS5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3QucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5LmNhbGwodGhpcyk7dmFyIG49e3g6MCx5OjAsZHg6IjBlbSIsZHk6IjAuM2VtIn0saT10aGlzLl9tYXhMYWJlbFRpY2tMZW5ndGgoKSxyPXRoaXMudGlja0xhYmVsUGFkZGluZygpLG89Im1pZGRsZSIsYT0wLHM9MCxsPTAsYz0wO2lmKHRoaXMuaXNIb3Jpem9udGFsKCkpc3dpdGNoKHRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nKXtjYXNlImxlZnQiOm89ImVuZCIsYT0tcixjPXI7YnJlYWs7Y2FzZSJjZW50ZXIiOmM9aStyO2JyZWFrO2Nhc2UicmlnaHQiOm89InN0YXJ0IixhPXIsYz1yfWVsc2Ugc3dpdGNoKHRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nKXtjYXNlInRvcCI6bi5keT0iLTAuM2VtIixsPXIscz0tcjticmVhaztjYXNlImNlbnRlciI6bD1pK3I7YnJlYWs7Y2FzZSJib3R0b20iOm4uZHk9IjFlbSIsbD1yLHM9cn12YXIgdT10aGlzLl9nZW5lcmF0ZVRpY2tNYXJrQXR0ckhhc2goKTtzd2l0Y2godGhpcy5vcmllbnRhdGlvbigpKXtjYXNlImJvdHRvbSI6bi54PXUueDEsbi5keT0iMC45NWVtIixzPXUueTErYzticmVhaztjYXNlInRvcCI6bi54PXUueDEsbi5keT0iLS4yNWVtIixzPXUueTEtYzticmVhaztjYXNlImxlZnQiOm89ImVuZCIsYT11LngxLWwsbi55PXUueTE7YnJlYWs7Y2FzZSJyaWdodCI6bz0ic3RhcnQiLGE9dS54MStsLG4ueT11LnkxfXZhciBoPXRoaXMuX2dldFRpY2tWYWx1ZXMoKSxkPXRoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5zZWxlY3RBbGwoIi4iK0FtdC5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MpLmRhdGEoaCk7cmV0dXJuIGQuZXhpdCgpLnJlbW92ZSgpLGQuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKEFtdC5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MsITApLm1lcmdlKGQpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsbykuc3R5bGUoInZpc2liaWxpdHkiLCJpbmhlcml0IikuYXR0cnMobikudGV4dCgoZnVuY3Rpb24odCl7cmV0dXJuIGUuZm9ybWF0dGVyKCkodCl9KSksdGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2ErIiwgIitzKyIpIiksdGhpcy5fc2hvd0FsbFRpY2tNYXJrcygpLHRoaXMuc2hvd0VuZFRpY2tMYWJlbHMoKXx8dGhpcy5faGlkZUVuZFRpY2tMYWJlbHMoKSx0aGlzLl9oaWRlT3ZlcmZsb3dpbmdUaWNrTGFiZWxzKCksdGhpcy5faGlkZU92ZXJsYXBwaW5nVGlja0xhYmVscygpLCJjZW50ZXIiIT09dGhpcy5fdGlja0xhYmVsUG9zaXRpb25pbmcmJnRoaXMuX2hpZGVUaWNrTWFya3NXaXRob3V0TGFiZWwoKSx0aGlzfSxlLnByb3RvdHlwZS50aWNrTGFiZWxQb3NpdGlvbj1mdW5jdGlvbih0KXtpZihudWxsPT10KXJldHVybiB0aGlzLl90aWNrTGFiZWxQb3NpdGlvbmluZzt2YXIgZT10LnRvTG93ZXJDYXNlKCk7aWYodGhpcy5pc0hvcml6b250YWwoKSl7aWYoImxlZnQiIT09ZSYmImNlbnRlciIhPT1lJiYicmlnaHQiIT09ZSl0aHJvdyBuZXcgRXJyb3IoZSsiIGlzIG5vdCBhIHZhbGlkIHRpY2sgbGFiZWwgcG9zaXRpb24gZm9yIGEgaG9yaXpvbnRhbCBOdW1lcmljQXhpcyIpfWVsc2UgaWYoInRvcCIhPT1lJiYiY2VudGVyIiE9PWUmJiJib3R0b20iIT09ZSl0aHJvdyBuZXcgRXJyb3IoZSsiIGlzIG5vdCBhIHZhbGlkIHRpY2sgbGFiZWwgcG9zaXRpb24gZm9yIGEgdmVydGljYWwgTnVtZXJpY0F4aXMiKTtyZXR1cm4gdGhpcy5fdGlja0xhYmVsUG9zaXRpb25pbmc9ZSx0aGlzLnJlZHJhdygpLHRoaXN9LGUucHJvdG90eXBlLnVzZXNUZXh0V2lkdGhBcHByb3hpbWF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX3VzZXNUZXh0V2lkdGhBcHByb3hpbWF0aW9uOih0aGlzLl91c2VzVGV4dFdpZHRoQXBwcm94aW1hdGlvbj10LHRoaXMpfSxlLnByb3RvdHlwZS5faGlkZUVuZFRpY2tMYWJlbHM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVsZW1lbnQoKS5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZT10aGlzLl90aWNrTGFiZWxDb250YWluZXIuc2VsZWN0QWxsKCIuIitBbXQuQXhpcy5USUNLX0xBQkVMX0NMQVNTKTtpZigwIT09ZS5zaXplKCkpe3ZhciBuPWUubm9kZXMoKVswXTtTbXQuRE9NLmNsaWVudFJlY3RJbnNpZGUobi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0KXx8aWR0LnNlbGVjdChuKS5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpO3ZhciBpPWUubm9kZXMoKVtlLnNpemUoKS0xXTtTbXQuRE9NLmNsaWVudFJlY3RJbnNpZGUoaS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0KXx8aWR0LnNlbGVjdChpKS5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpfX0sZS5wcm90b3R5cGUuX2hpZGVPdmVybGFwcGluZ1RpY2tMYWJlbHM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLnNlbGVjdEFsbCgiLiIrQW10LkF4aXMuVElDS19MQUJFTF9DTEFTUykuZmlsdGVyKChmdW5jdGlvbih0LGUpe3ZhciBuPWlkdC5zZWxlY3QodGhpcykuc3R5bGUoInZpc2liaWxpdHkiKTtyZXR1cm4iaW5oZXJpdCI9PT1ufHwidmlzaWJsZSI9PT1ufSkpLGU9dC5ub2RlcygpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9KSksbj0xOyF0aGlzLl9oYXNPdmVybGFwV2l0aEludGVydmFsKG4sZSkmJm48ZS5sZW5ndGg7KW4rPTE7dC5lYWNoKChmdW5jdGlvbih0LGUpe3ZhciBpPWlkdC5zZWxlY3QodGhpcyk7ZSVuIT0wJiZpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIil9KSl9LGUucHJvdG90eXBlLl9oYXNPdmVybGFwV2l0aEludGVydmFsPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPSJjZW50ZXIiPT09dGhpcy5fdGlja0xhYmVsUG9zaXRpb25pbmc/dGhpcy50aWNrTGFiZWxQYWRkaW5nKCk6Myp0aGlzLnRpY2tMYWJlbFBhZGRpbmcoKSxpPWUubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gU210LkRPTS5leHBhbmRSZWN0KHQsbil9KSkscj0wO3I8aS5sZW5ndGgtdDtyKz10KWlmKFNtdC5ET00uY2xpZW50UmVjdHNPdmVybGFwKGlbcl0saVtyK3RdKSlyZXR1cm4hMTtyZXR1cm4hMH0sZS5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7dC5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlLmNhbGwodGhpcyksdGhpcy5fbWVhc3VyZXIucmVzZXQoKX0sZX0pKEFtdC5BeGlzKTtlLk51bWVyaWM9bn0pKSxQbXQ9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLmludGVydmFsVGlja0dlbmVyYXRvcj1mdW5jdGlvbiBuKHQpe2lmKHQ8PTApdGhyb3cgbmV3IEVycm9yKCJpbnRlcnZhbCBtdXN0IGJlIHBvc2l0aXZlIG51bWJlciIpO3JldHVybiBmdW5jdGlvbihlKXt2YXIgbj1lLmRvbWFpbigpLGk9TWF0aC5taW4oblswXSxuWzFdKSxyPU1hdGgubWF4KG5bMF0sblsxXSksbz1NYXRoLmNlaWwoaS90KSp0LGE9TWF0aC5mbG9vcigoci1vKS90KSsxLHM9aSV0PT0wP1tdOltpXSxsPVNtdC5NYXRoLnJhbmdlKDAsYSkubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gbytlKnR9KSksYz1yJXQ9PTA/W106W3JdO3JldHVybiBzLmNvbmNhdChsKS5jb25jYXQoYyl9fSxlLmludGVnZXJUaWNrR2VuZXJhdG9yPWZ1bmN0aW9uIGkoKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9dC5kZWZhdWx0VGlja3MoKTtyZXR1cm4gZS5maWx0ZXIoKGZ1bmN0aW9uKHQsbil7cmV0dXJuIHQlMT09MHx8MD09PW58fG49PT1lLmxlbmd0aC0xfSkpfX19KSksTm10PWJlKChmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIG4odCxlLG4pe3JldHVybiBuLShuLXQpKmV9ZnVuY3Rpb24gaSh0LGUsbil7cmV0dXJuKHQqZS1uKS8oZS0xKX1mdW5jdGlvbiByKHQsZSxuLGkpe3ZhciByPWU+MSxvPXI/aTpuO2lmKG51bGw9PW8pcmV0dXJuIGU7dmFyIGE9dC5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpLHM9TWF0aC5hYnMoYVsxXS1hWzBdKTtyZXR1cm4ocj9NYXRoLm1pbjpNYXRoLm1heCkoZSxvL3MpfWZ1bmN0aW9uIG8odCxlLHIsbyxzKXtpZihlPD0xKXJldHVybntjZW50ZXJQb2ludDpyLHpvb21BbW91bnQ6ZX07aWYobnVsbD09byYmbnVsbD09cylyZXR1cm57Y2VudGVyUG9pbnQ6cix6b29tQW1vdW50OmV9O3ZhciBsPWEodCksYz0oZnVuY3Rpb24gdSh0KXt2YXIgZT10LmdldFRyYW5zZm9ybWF0aW9uRG9tYWluKCk7cmV0dXJuIGVbMV08ZVswXX0pKHQpO289bnVsbD09bz9jPzEvMDotMS8wOm8scz1udWxsPT1zP2M/LTEvMDoxLzA6czt2YXIgaD10LmdldFRyYW5zZm9ybWF0aW9uRG9tYWluKCksZD1oWzBdLHA9aFsxXSxmPXQuc2NhbGVUcmFuc2Zvcm1hdGlvbihzKSxtPXQuc2NhbGVUcmFuc2Zvcm1hdGlvbihwKSxnPW4obSxlLHIpLF89dC5zY2FsZVRyYW5zZm9ybWF0aW9uKG8pLHk9dC5zY2FsZVRyYW5zZm9ybWF0aW9uKGQpLHY9bih5LGUsciksYj1NYXRoLmFicyhmLV8pO2lmKE1hdGguYWJzKGctdik+Yil7dmFyIHg9KGYtXykvKG0teSk7cmV0dXJuIDEhPT14P3tjZW50ZXJQb2ludDppKG0seCxmKSx6b29tQW1vdW50Onh9OntjZW50ZXJQb2ludDpyLHpvb21BbW91bnQ6eH19cmV0dXJuIGc+ZiE9bD97Y2VudGVyUG9pbnQ6aShtLGUsZiksem9vbUFtb3VudDplfTp2PF8hPWw/e2NlbnRlclBvaW50OmkoeSxlLF8pLHpvb21BbW91bnQ6ZX06e2NlbnRlclBvaW50OnIsem9vbUFtb3VudDplfX1mdW5jdGlvbiBhKHQpe3ZhciBlPXQucmFuZ2UoKTtyZXR1cm4gZVsxXTxlWzBdfQovKioKICAgICAqIENvcHlyaWdodCAyMDE3LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS56b29tT3V0PW4sZS5jb25zdHJhaW5lZFpvb209ZnVuY3Rpb24gcyh0LGUsbixpLGEsbCxjKXtyZXR1cm4gbyh0LGU9cih0LGUsaSxhKSxuLGwsYyl9LGUuY29uc3RyYWluWm9vbUV4dGVudHM9cixlLmNvbnN0cmFpblpvb21WYWx1ZXM9byxlLmNvbnN0cmFpbmVkVHJhbnNsYXRpb249ZnVuY3Rpb24gbCh0LGUsbixpKXt2YXIgcixvPXQuZ2V0VHJhbnNmb3JtYXRpb25Eb21haW4oKSxzPW9bMF0sbD1vWzFdLGM9YSh0KTtpZihlPjAhPT1jKXtpZihudWxsIT0ocj1pKSl7dmFyIHU9dC5zY2FsZVRyYW5zZm9ybWF0aW9uKGwpLGg9dC5zY2FsZVRyYW5zZm9ybWF0aW9uKHIpO2U9KGM/TWF0aC5tYXg6TWF0aC5taW4pKHUrZSxoKS11fX1lbHNlIGlmKG51bGwhPShyPW4pKXt2YXIgZD10LnNjYWxlVHJhbnNmb3JtYXRpb24ocykscD10LnNjYWxlVHJhbnNmb3JtYXRpb24ocik7ZT0oYz9NYXRoLm1pbjpNYXRoLm1heCkoZCtlLHApLWR9cmV0dXJuIGV9fSkpLEltdD1iZSgoZnVuY3Rpb24odCxlKXsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPShmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLl9hdXRvRG9tYWluQXV0b21hdGljYWxseT0hMCx0aGlzLl9kb21haW5Nb2RpZmljYXRpb25JblByb2dyZXNzPSExLHRoaXMuX3VwZGF0ZUlkPTAsdGhpcy5fY2FsbGJhY2tzPW5ldyBTbXQuQ2FsbGJhY2tTZXQsdGhpcy5faW5jbHVkZWRWYWx1ZXNQcm92aWRlcnM9bmV3IFNtdC5TZXR9cmV0dXJuIHQucHJvdG90eXBlLmV4dGVudE9mVmFsdWVzPWZ1bmN0aW9uKHQpe3JldHVybltdfSx0LnByb3RvdHlwZS5fZ2V0QWxsSW5jbHVkZWRWYWx1ZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt2b2lkIDA9PT10JiYodD0hMSk7dmFyIG49W107cmV0dXJuIHRoaXMuX2luY2x1ZGVkVmFsdWVzUHJvdmlkZXJzLmZvckVhY2goKGZ1bmN0aW9uKGkpe3ZhciByPWkoZSx0KTtuPW4uY29uY2F0KHIpfSkpLG59LHQucHJvdG90eXBlLl9nZXRFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm5bXX0sdC5wcm90b3R5cGUub25VcGRhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NhbGxiYWNrcy5hZGQodCksdGhpc30sdC5wcm90b3R5cGUub2ZmVXBkYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jYWxsYmFja3MuZGVsZXRlKHQpLHRoaXN9LHQucHJvdG90eXBlLl9kaXNwYXRjaFVwZGF0ZT1mdW5jdGlvbigpe3RoaXMuX3VwZGF0ZUlkKyssdGhpcy5fY2FsbGJhY2tzLmNhbGxDYWxsYmFja3ModGhpcyl9LHQucHJvdG90eXBlLmF1dG9Eb21haW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXV0b0RvbWFpbkF1dG9tYXRpY2FsbHk9ITAsdGhpcy5fc2V0RG9tYWluKHRoaXMuX2dldEV4dGVudCgpKSx0aGlzfSx0LnByb3RvdHlwZS5hdXRvRG9tYWluSWZBdXRvbWF0aWNNb2RlPWZ1bmN0aW9uKCl7dGhpcy5fYXV0b0RvbWFpbkF1dG9tYXRpY2FsbHkmJnRoaXMuYXV0b0RvbWFpbigpfSx0LnByb3RvdHlwZS5zY2FsZT1mdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoIlN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIHNjYWxlIil9LHQucHJvdG90eXBlLnRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tYWluKCl9LHQucHJvdG90eXBlLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9nZXREb21haW4oKToodGhpcy5fYXV0b0RvbWFpbkF1dG9tYXRpY2FsbHk9ITEsdGhpcy5fc2V0RG9tYWluKHQpLHRoaXMpfSx0LnByb3RvdHlwZS5fZ2V0RG9tYWluPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBfZ2V0RG9tYWluIil9LHQucHJvdG90eXBlLl9zZXREb21haW49ZnVuY3Rpb24odCl7dGhpcy5fZG9tYWluTW9kaWZpY2F0aW9uSW5Qcm9ncmVzc3x8KHRoaXMuX2RvbWFpbk1vZGlmaWNhdGlvbkluUHJvZ3Jlc3M9ITAsdGhpcy5fYmFja2luZ1NjYWxlRG9tYWluKHQpLHRoaXMuX2Rpc3BhdGNoVXBkYXRlKCksdGhpcy5fZG9tYWluTW9kaWZpY2F0aW9uSW5Qcm9ncmVzcz0hMSl9LHQucHJvdG90eXBlLl9iYWNraW5nU2NhbGVEb21haW49ZnVuY3Rpb24odCl7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBfYmFja2luZ0RvbWFpbiIpfSx0LnByb3RvdHlwZS5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9nZXRSYW5nZSgpOih0aGlzLl9zZXRSYW5nZSh0KSx0aGlzKX0sdC5wcm90b3R5cGUuX2dldFJhbmdlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBfZ2V0UmFuZ2UiKX0sdC5wcm90b3R5cGUuX3NldFJhbmdlPWZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgX3NldFJhbmdlIil9LHQucHJvdG90eXBlLmFkZEluY2x1ZGVkVmFsdWVzUHJvdmlkZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2luY2x1ZGVkVmFsdWVzUHJvdmlkZXJzLmFkZCh0KSx0aGlzLmF1dG9Eb21haW5JZkF1dG9tYXRpY01vZGUoKSx0aGlzfSx0LnByb3RvdHlwZS5yZW1vdmVJbmNsdWRlZFZhbHVlc1Byb3ZpZGVyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9pbmNsdWRlZFZhbHVlc1Byb3ZpZGVycy5kZWxldGUodCksdGhpcy5hdXRvRG9tYWluSWZBdXRvbWF0aWNNb2RlKCksdGhpc30sdC5wcm90b3R5cGUudXBkYXRlSWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdXBkYXRlSWR9LHR9KSgpO2UuU2NhbGU9bn0pKSxPbXQ9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1bMCwxXSxpPShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dmFyIGk9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBpLl9yYW5nZT1bMCwxXSxpLl9kM1NjYWxlPWlkdC5zY2FsZUJhbmQoKSxpLl9kM1NjYWxlLnJhbmdlKG4pLGkuX2QzVHJhbnNmb3JtYXRpb25TY2FsZT1pZHQuc2NhbGVMaW5lYXIoKSxpLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUuZG9tYWluKG4pLGkuX2lubmVyUGFkZGluZz1lLl9jb252ZXJ0VG9QbG90dGFibGVJbm5lclBhZGRpbmcoLjMpLGkuX291dGVyUGFkZGluZz1lLl9jb252ZXJ0VG9QbG90dGFibGVPdXRlclBhZGRpbmcoLjUsLjMpLGl9cmV0dXJuIERmdC5fX2V4dGVuZHMoZSx0KSxlLnByb3RvdHlwZS5jbG9uZVdpdGhvdXRQcm92aWRlcnM9ZnVuY3Rpb24oKXt2YXIgdD0obmV3IGUpLmRvbWFpbih0aGlzLmRvbWFpbigpKS5yYW5nZSh0aGlzLnJhbmdlKCkpLmlubmVyUGFkZGluZyh0aGlzLmlubmVyUGFkZGluZygpKS5vdXRlclBhZGRpbmcodGhpcy5vdXRlclBhZGRpbmcoKSk7cmV0dXJuIHQuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5kb21haW4odGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlLmRvbWFpbigpKSx0fSxlLnByb3RvdHlwZS5leHRlbnRPZlZhbHVlcz1mdW5jdGlvbih0KXtyZXR1cm4gU210LkFycmF5LnVuaXEodCl9LGUucHJvdG90eXBlLl9nZXRFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gU210LkFycmF5LnVuaXEodGhpcy5fZ2V0QWxsSW5jbHVkZWRWYWx1ZXMoKSl9LGUucHJvdG90eXBlLmRvbWFpbj1mdW5jdGlvbihlKXtyZXR1cm4gdC5wcm90b3R5cGUuZG9tYWluLmNhbGwodGhpcyxlKX0sZS5wcm90b3R5cGUuaW52ZXJ0UmFuZ2U9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt2b2lkIDA9PT10JiYodD10aGlzLnJhbmdlKCkpO3ZhciBuPXRoaXMuX2QzU2NhbGUuYmFuZHdpZHRoKCksaT10aGlzLmludmVydGVkVHJhbnNmb3JtYXRpb24odFswXSkscj10aGlzLmludmVydGVkVHJhbnNmb3JtYXRpb24odFsxXSksbz10aGlzLl9kM1NjYWxlLmRvbWFpbigpLGE9by5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBlLl9kM1NjYWxlKHQpK24vMn0pKSxzPWlkdC5iaXNlY3QoYSxpKSxsPWlkdC5iaXNlY3QoYSxyKTtyZXR1cm4gby5zbGljZShzLGwpfSxlLnByb3RvdHlwZS5yYW5nZT1mdW5jdGlvbihlKXtyZXR1cm4gdC5wcm90b3R5cGUucmFuZ2UuY2FsbCh0aGlzLGUpfSxlLl9jb252ZXJ0VG9QbG90dGFibGVJbm5lclBhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIDEvKDEtdCktMX0sZS5fY29udmVydFRvUGxvdHRhYmxlT3V0ZXJQYWRkaW5nPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQvKDEtZSl9LGUucHJvdG90eXBlLl9zZXRCYW5kcz1mdW5jdGlvbigpe3ZhciB0PTEtMS8oMSt0aGlzLmlubmVyUGFkZGluZygpKSxlPXRoaXMub3V0ZXJQYWRkaW5nKCkvKDErdGhpcy5pbm5lclBhZGRpbmcoKSk7dGhpcy5fZDNTY2FsZS5wYWRkaW5nSW5uZXIodCksdGhpcy5fZDNTY2FsZS5wYWRkaW5nT3V0ZXIoZSl9LGUucHJvdG90eXBlLnJhbmdlQmFuZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZXNjYWxlQmFuZCh0aGlzLl9kM1NjYWxlLmJhbmR3aWR0aCgpKX0sZS5wcm90b3R5cGUuc3RlcFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Jlc2NhbGVCYW5kKHRoaXMuX2QzU2NhbGUuYmFuZHdpZHRoKCkqKDErdGhpcy5pbm5lclBhZGRpbmcoKSkpfSxlLnByb3RvdHlwZS50aWNrcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbWFpbigpfSxlLnByb3RvdHlwZS5pbm5lclBhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5faW5uZXJQYWRkaW5nOih0aGlzLl9pbm5lclBhZGRpbmc9dCx0aGlzLnJhbmdlKHRoaXMucmFuZ2UoKSksdGhpcy5fZGlzcGF0Y2hVcGRhdGUoKSx0aGlzKX0sZS5wcm90b3R5cGUub3V0ZXJQYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX291dGVyUGFkZGluZzoodGhpcy5fb3V0ZXJQYWRkaW5nPXQsdGhpcy5yYW5nZSh0aGlzLnJhbmdlKCkpLHRoaXMuX2Rpc3BhdGNoVXBkYXRlKCksdGhpcyl9LGUucHJvdG90eXBlLnNjYWxlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2QzU2NhbGUodCkrdGhpcy5fZDNTY2FsZS5iYW5kd2lkdGgoKS8yO3JldHVybiB0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUoZSl9LGUucHJvdG90eXBlLnpvb209ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3RoaXMuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5kb21haW4odGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlLnJhbmdlKCkubWFwKChmdW5jdGlvbihpKXtyZXR1cm4gbi5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlLmludmVydChObXQuem9vbU91dChpLHQsZSkpfSkpKSx0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpfSxlLnByb3RvdHlwZS5wYW49ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUuZG9tYWluKHRoaXMuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5yYW5nZSgpLm1hcCgoZnVuY3Rpb24obil7cmV0dXJuIGUuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5pbnZlcnQobit0KX0pKSksdGhpcy5fZGlzcGF0Y2hVcGRhdGUoKX0sZS5wcm90b3R5cGUuc2NhbGVUcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlKHQpfSxlLnByb3RvdHlwZS5pbnZlcnRlZFRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUuaW52ZXJ0KHQpfSxlLnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkV4dGVudD1mdW5jdGlvbigpe3JldHVybiBufSxlLnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUuZG9tYWluKCl9LGUucHJvdG90eXBlLnNldFRyYW5zZm9ybWF0aW9uRG9tYWluPWZ1bmN0aW9uKHQpe3RoaXMuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5kb21haW4odCksdGhpcy5fZGlzcGF0Y2hVcGRhdGUoKX0sZS5wcm90b3R5cGUuX2dldERvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYWNraW5nU2NhbGVEb21haW4oKX0sZS5wcm90b3R5cGUuX2JhY2tpbmdTY2FsZURvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9kM1NjYWxlLmRvbWFpbigpOih0aGlzLl9kM1NjYWxlLmRvbWFpbih0KSx0aGlzLl9zZXRCYW5kcygpLHRoaXMpfSxlLnByb3RvdHlwZS5fZ2V0UmFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmFuZ2V9LGUucHJvdG90eXBlLl9zZXRSYW5nZT1mdW5jdGlvbih0KXt0aGlzLl9yYW5nZT10LHRoaXMuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5yYW5nZSh0KSx0aGlzLl9zZXRCYW5kcygpfSxlLnByb3RvdHlwZS5fcmVzY2FsZUJhbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguYWJzKHRoaXMuX2QzVHJhbnNmb3JtYXRpb25TY2FsZSh0KS10aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUoMCkpfSxlfSkoSW10LlNjYWxlKTtlLkNhdGVnb3J5PWl9KSksUm10PWJlKChmdW5jdGlvbih0LGUpewovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuY291bnQ9MCx0aGlzLnRyYWNrZXI9e319cmV0dXJuIHQucHJvdG90eXBlLmdldEluZGV4PWZ1bmN0aW9uKHQpe2lmKG51bGwhPXRoaXMudHJhY2tlclt0XSlyZXR1cm4gdGhpcy50cmFja2VyW3RdO3ZhciBlPXRoaXMuY291bnQ7cmV0dXJuIHRoaXMudHJhY2tlclt0XT1lLHRoaXMuY291bnQrPTEsZX0sdC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLmNvdW50PTAsdGhpcy50cmFja2VyPXt9fSx0fSkoKSxpPShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGkpe3ZhciByLG89dC5jYWxsKHRoaXMpfHx0aGlzO3N3aXRjaChvLl9yYW5nZUxlbmd0aD0xLG8uX3RyYWNrZXI9bmV3IG4saSl7Y2FzZSBudWxsOmNhc2Ugdm9pZCAwOm51bGw9PWUuX3Bsb3R0YWJsZUNvbG9yQ2FjaGUmJihlLl9wbG90dGFibGVDb2xvckNhY2hlPWUuX2dldFBsb3R0YWJsZUNvbG9ycygpKSxyPWlkdC5zY2FsZU9yZGluYWwoKS5yYW5nZShlLl9wbG90dGFibGVDb2xvckNhY2hlKTticmVhaztjYXNlIkNhdGVnb3J5MTAiOmNhc2UiY2F0ZWdvcnkxMCI6Y2FzZSIxMCI6cj1pZHQuc2NhbGVPcmRpbmFsKGlkdC5zY2hlbWVDYXRlZ29yeTEwKTticmVhaztjYXNlIkNhdGVnb3J5MjAiOmNhc2UiY2F0ZWdvcnkyMCI6Y2FzZSIyMCI6cj1pZHQuc2NhbGVPcmRpbmFsKGlkdC5zY2hlbWVDYXRlZ29yeTIwKTticmVhaztjYXNlIkNhdGVnb3J5MjBiIjpjYXNlImNhdGVnb3J5MjBiIjpjYXNlIjIwYiI6cj1pZHQuc2NhbGVPcmRpbmFsKGlkdC5zY2hlbWVDYXRlZ29yeTIwYik7YnJlYWs7Y2FzZSJDYXRlZ29yeTIwYyI6Y2FzZSJjYXRlZ29yeTIwYyI6Y2FzZSIyMGMiOnI9aWR0LnNjYWxlT3JkaW5hbChpZHQuc2NoZW1lQ2F0ZWdvcnkyMGMpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBDb2xvclNjYWxlIHR5cGUiKX1yZXR1cm4gby5fZDNTY2FsZT1yLG8uX3JhbmdlTGVuZ3RoPW8uX2QzU2NhbGUucmFuZ2UoKS5sZW5ndGgsb31yZXR1cm4gRGZ0Ll9fZXh0ZW5kcyhlLHQpLGUucHJvdG90eXBlLmV4dGVudE9mVmFsdWVzPWZ1bmN0aW9uKHQpe3JldHVybiBTbXQuQXJyYXkudW5pcSh0KX0sZS5wcm90b3R5cGUuX2dldEV4dGVudD1mdW5jdGlvbigpe3JldHVybiBTbXQuQXJyYXkudW5pcSh0aGlzLl9nZXRBbGxJbmNsdWRlZFZhbHVlcygpKX0sZS5pbnZhbGlkYXRlQ29sb3JDYWNoZT1mdW5jdGlvbigpe2UuX3Bsb3R0YWJsZUNvbG9yQ2FjaGU9bnVsbH0sZS5fZ2V0UGxvdHRhYmxlQ29sb3JzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLGU9aWR0LnNlbGVjdCgiYm9keSIpLmFwcGVuZCgicGxvdHRhYmxlLWNvbG9yLXRlc3RlciIpLG49U210LkNvbG9yLmNvbG9yVGVzdChlLCIiKSxpPTAscj1TbXQuQ29sb3IuY29sb3JUZXN0KGUsInBsb3R0YWJsZS1jb2xvcnMtMCIpO251bGwhPXImJmk8dGhpcy5fTUFYSU1VTV9DT0xPUlNfRlJPTV9DU1MmJihyIT09bnx8ciE9PXRbdC5sZW5ndGgtMV0pOyl0LnB1c2gociksaSsrLHI9U210LkNvbG9yLmNvbG9yVGVzdChlLCJwbG90dGFibGUtY29sb3JzLSIraSk7cmV0dXJuIGUucmVtb3ZlKCksdH0sZS5wcm90b3R5cGUuc2NhbGU9ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5fZDNTY2FsZSh0KSxpPXRoaXMuX3RyYWNrZXIuZ2V0SW5kZXgodCkscj1NYXRoLmZsb29yKGkvdGhpcy5fcmFuZ2VMZW5ndGgpO2lmKDA9PT1yKXJldHVybiBuO3ZhciBvPU1hdGgubG9nKHIqZS5fTE9PUF9MSUdIVEVOX0ZBQ1RPUisxKTtyZXR1cm4gU210LkNvbG9yLmxpZ2h0ZW5Db2xvcihuLG8pfSxlLnByb3RvdHlwZS5fZ2V0RG9tYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JhY2tpbmdTY2FsZURvbWFpbigpfSxlLnByb3RvdHlwZS5fYmFja2luZ1NjYWxlRG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX2QzU2NhbGUuZG9tYWluKCk6KHRoaXMuX2QzU2NhbGUuZG9tYWluKHQpLHRoaXMuX3RyYWNrZXIuY2xlYXIoKSx0aGlzKX0sZS5wcm90b3R5cGUuX2dldFJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2QzU2NhbGUucmFuZ2UoKX0sZS5wcm90b3R5cGUuX3NldFJhbmdlPWZ1bmN0aW9uKHQpe3RoaXMuX2QzU2NhbGUucmFuZ2UodCksdGhpcy5fcmFuZ2VMZW5ndGg9dC5sZW5ndGh9LGUuX0xPT1BfTElHSFRFTl9GQUNUT1I9MS42LGUuX01BWElNVU1fQ09MT1JTX0ZST01fQ1NTPTI1NixlfSkoSW10LlNjYWxlKTtlLkNvbG9yPWl9KSksem10PWJlKChmdW5jdGlvbih0LGUpewovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobil7dm9pZCAwPT09biYmKG49ImxpbmVhciIpO3ZhciBpPXQuY2FsbCh0aGlzKXx8dGhpcztzd2l0Y2gobil7Y2FzZSJsaW5lYXIiOmkuX2NvbG9yU2NhbGU9aWR0LnNjYWxlTGluZWFyKCk7YnJlYWs7Y2FzZSJsb2ciOmkuX2NvbG9yU2NhbGU9aWR0LnNjYWxlTG9nKCk7YnJlYWs7Y2FzZSJzcXJ0IjppLl9jb2xvclNjYWxlPWlkdC5zY2FsZVNxcnQoKTticmVhaztjYXNlInBvdyI6aS5fY29sb3JTY2FsZT1pZHQuc2NhbGVQb3coKX1pZihudWxsPT1pLl9jb2xvclNjYWxlKXRocm93IG5ldyBFcnJvcigidW5rbm93biBRdWFudGl0YXRpdmVTY2FsZSBzY2FsZSB0eXBlICIrbik7cmV0dXJuIGkucmFuZ2UoZS5SRURTKSxpfXJldHVybiBEZnQuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUuZXh0ZW50T2ZWYWx1ZXM9ZnVuY3Rpb24odCl7dmFyIGU9aWR0LmV4dGVudCh0KTtyZXR1cm4gbnVsbD09ZVswXXx8bnVsbD09ZVsxXT9bXTplfSxlLnByb3RvdHlwZS5fZDNJbnRlcnBvbGF0ZWRTY2FsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb2xvclNjYWxlLnJhbmdlKFswLDFdKS5pbnRlcnBvbGF0ZSh0aGlzLl9pbnRlcnBvbGF0ZUNvbG9ycygpKX0sZS5wcm90b3R5cGUuX2ludGVycG9sYXRlQ29sb3JzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fY29sb3JSYW5nZTtpZih0Lmxlbmd0aDwyKXRocm93IG5ldyBFcnJvcigiQ29sb3Igc2NhbGUgYXJyYXlzIG11c3QgaGF2ZSBhdCBsZWFzdCB0d28gZWxlbWVudHMuIik7cmV0dXJuIGZ1bmN0aW9uKGUsbil7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPShlPU1hdGgubWF4KDAsTWF0aC5taW4oMSxlKSkpKih0Lmxlbmd0aC0xKSxpPU1hdGguZmxvb3Iobikscj1NYXRoLmNlaWwobiksbz1uLWk7cmV0dXJuIGlkdC5pbnRlcnBvbGF0ZUxhYih0W2ldLHRbcl0pKG8pfX19LGUucHJvdG90eXBlLl9yZXNldFNjYWxlPWZ1bmN0aW9uKCl7dGhpcy5fZDNTY2FsZT10aGlzLl9kM0ludGVycG9sYXRlZFNjYWxlKCksdGhpcy5hdXRvRG9tYWluSWZBdXRvbWF0aWNNb2RlKCksdGhpcy5fZGlzcGF0Y2hVcGRhdGUoKX0sZS5wcm90b3R5cGUuYXV0b0RvbWFpbj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2dldEFsbEluY2x1ZGVkVmFsdWVzKCk7cmV0dXJuIHQubGVuZ3RoPjAmJnRoaXMuX3NldERvbWFpbihbU210Lk1hdGgubWluKHQsMCksU210Lk1hdGgubWF4KHQsMCldKSx0aGlzfSxlLnByb3RvdHlwZS5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZDNTY2FsZSh0KX0sZS5wcm90b3R5cGUuX2dldERvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYWNraW5nU2NhbGVEb21haW4oKX0sZS5wcm90b3R5cGUuX2JhY2tpbmdTY2FsZURvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9kM1NjYWxlLmRvbWFpbigpOih0aGlzLl9kM1NjYWxlLmRvbWFpbih0KSx0aGlzKX0sZS5wcm90b3R5cGUuX2dldFJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbG9yUmFuZ2V9LGUucHJvdG90eXBlLl9zZXRSYW5nZT1mdW5jdGlvbih0KXt0aGlzLl9jb2xvclJhbmdlPXQsdGhpcy5fcmVzZXRTY2FsZSgpfSxlLlJFRFM9WyIjRkZGRkZGIiwiI0ZGRjZFMSIsIiNGRUY0QzAiLCIjRkVEOTc2IiwiI0ZFQjI0QyIsIiNGRDhEM0MiLCIjRkM0RTJBIiwiI0UzMUExQyIsIiNCMTAwMjYiXSxlLkJMVUVTPVsiI0ZGRkZGRiIsIiNDQ0ZGRkYiLCIjQTVGRkZEIiwiIzg1RjdGQiIsIiM2RUQzRUYiLCIjNTVBN0UwIiwiIzQxN0ZEMCIsIiMyNTQ1RDMiLCIjMEIwMkUxIl0sZS5QT1NORUc9WyIjMEIwMkUxIiwiIzI1NDVEMyIsIiM0MTdGRDAiLCIjNTVBN0UwIiwiIzZFRDNFRiIsIiM4NUY3RkIiLCIjQTVGRkZEIiwiI0NDRkZGRiIsIiNGRkZGRkYiLCIjRkZGNkUxIiwiI0ZFRjRDMCIsIiNGRUQ5NzYiLCIjRkVCMjRDIiwiI0ZEOEQzQyIsIiNGQzRFMkEiLCIjRTMxQTFDIiwiI0IxMDAyNiJdLGV9KShJbXQuU2NhbGUpO2UuSW50ZXJwb2xhdGVkQ29sb3I9bn0pKSxEbXQ9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBlPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gZS5fdGlja0dlbmVyYXRvcj1mdW5jdGlvbih0KXtyZXR1cm4gdC5kZWZhdWx0VGlja3MoKX0sZS5fcGFkUHJvcG9ydGlvbj0uMDUsZS5fc25hcHBpbmdEb21haW5FbmFibGVkPSEwLGUuX3BhZGRpbmdFeGNlcHRpb25zUHJvdmlkZXJzPW5ldyBTbXQuU2V0LGV9cmV0dXJuIERmdC5fX2V4dGVuZHMoZSx0KSxlLnByb3RvdHlwZS5hdXRvRG9tYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RvbWFpbk1pbj1udWxsLHRoaXMuX2RvbWFpbk1heD1udWxsLHQucHJvdG90eXBlLmF1dG9Eb21haW4uY2FsbCh0aGlzKSx0aGlzfSxlLnByb3RvdHlwZS5hdXRvRG9tYWluSWZBdXRvbWF0aWNNb2RlPWZ1bmN0aW9uKCl7aWYobnVsbD09dGhpcy5fZG9tYWluTWlufHxudWxsPT10aGlzLl9kb21haW5NYXgpe3ZhciBlPXRoaXMuX2dldEV4dGVudCgpO2lmKG51bGwhPXRoaXMuX2RvbWFpbk1pbil7dmFyIG49ZVsxXTtyZXR1cm4gdGhpcy5fZG9tYWluTWluPj1uJiYobj10aGlzLl9leHBhbmRTaW5nbGVWYWx1ZURvbWFpbihbdGhpcy5fZG9tYWluTWluLHRoaXMuX2RvbWFpbk1pbl0pWzFdKSx2b2lkIHRoaXMuX3NldERvbWFpbihbdGhpcy5fZG9tYWluTWluLG5dKX1pZihudWxsIT10aGlzLl9kb21haW5NYXgpe3ZhciBpPWVbMF07cmV0dXJuIHRoaXMuX2RvbWFpbk1heDw9aSYmKGk9dGhpcy5fZXhwYW5kU2luZ2xlVmFsdWVEb21haW4oW3RoaXMuX2RvbWFpbk1heCx0aGlzLl9kb21haW5NYXhdKVswXSksdm9pZCB0aGlzLl9zZXREb21haW4oW2ksdGhpcy5fZG9tYWluTWF4XSl9dC5wcm90b3R5cGUuYXV0b0RvbWFpbklmQXV0b21hdGljTW9kZS5jYWxsKHRoaXMpfWVsc2UgdGhpcy5fc2V0RG9tYWluKFt0aGlzLl9kb21haW5NaW4sdGhpcy5fZG9tYWluTWF4XSl9LGUucHJvdG90eXBlLl9nZXRVbmJvdW5kZWRFeHRlbnQ9ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9ITEpO3ZhciBlPXRoaXMuX2dldEFsbEluY2x1ZGVkVmFsdWVzKHQpLG49dGhpcy5fZGVmYXVsdEV4dGVudCgpO2lmKDAhPT1lLmxlbmd0aCl7dmFyIGk9W1NtdC5NYXRoLm1pbihlLG5bMF0pLFNtdC5NYXRoLm1heChlLG5bMV0pXTtuPXRoaXMuX3BhZERvbWFpbihpKX1yZXR1cm4gbn0sZS5wcm90b3R5cGUuX2dldEV4dGVudD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2dldFVuYm91bmRlZEV4dGVudCgpO3JldHVybiBudWxsIT10aGlzLl9kb21haW5NaW4mJih0WzBdPXRoaXMuX2RvbWFpbk1pbiksbnVsbCE9dGhpcy5fZG9tYWluTWF4JiYodFsxXT10aGlzLl9kb21haW5NYXgpLHR9LGUucHJvdG90eXBlLmFkZFBhZGRpbmdFeGNlcHRpb25zUHJvdmlkZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhZGRpbmdFeGNlcHRpb25zUHJvdmlkZXJzLmFkZCh0KSx0aGlzLmF1dG9Eb21haW5JZkF1dG9tYXRpY01vZGUoKSx0aGlzfSxlLnByb3RvdHlwZS5yZW1vdmVQYWRkaW5nRXhjZXB0aW9uc1Byb3ZpZGVyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYWRkaW5nRXhjZXB0aW9uc1Byb3ZpZGVycy5kZWxldGUodCksdGhpcy5hdXRvRG9tYWluSWZBdXRvbWF0aWNNb2RlKCksdGhpc30sZS5wcm90b3R5cGUucGFkUHJvcG9ydGlvbj1mdW5jdGlvbih0KXtpZihudWxsPT10KXJldHVybiB0aGlzLl9wYWRQcm9wb3J0aW9uO2lmKHQ8MCl0aHJvdyBuZXcgRXJyb3IoInBhZFByb3BvcnRpb24gbXVzdCBiZSBub24tbmVnYXRpdmUiKTtyZXR1cm4gdGhpcy5fcGFkUHJvcG9ydGlvbj10LHRoaXMuYXV0b0RvbWFpbklmQXV0b21hdGljTW9kZSgpLHRoaXN9LGUucHJvdG90eXBlLl9wYWREb21haW49ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZih0WzBdLnZhbHVlT2YoKT09PXRbMV0udmFsdWVPZigpKXJldHVybiB0aGlzLl9leHBhbmRTaW5nbGVWYWx1ZURvbWFpbih0KTtpZigwPT09dGhpcy5fcGFkUHJvcG9ydGlvbilyZXR1cm4gdDt2YXIgbj10aGlzLl9wYWRQcm9wb3J0aW9uLzIsaT10WzBdLHI9dFsxXSxvPSExLGE9ITE7dGhpcy5fcGFkZGluZ0V4Y2VwdGlvbnNQcm92aWRlcnMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dChlKS5mb3JFYWNoKChmdW5jdGlvbih0KXt0LnZhbHVlT2YoKT09PWkudmFsdWVPZigpJiYobz0hMCksdC52YWx1ZU9mKCk9PT1yLnZhbHVlT2YoKSYmKGE9ITApfSkpfSkpO3ZhciBzPXRoaXMuX2JhY2tpbmdTY2FsZURvbWFpbigpO3RoaXMuX2JhY2tpbmdTY2FsZURvbWFpbih0KTt2YXIgbD1vP2k6dGhpcy5pbnZlcnQodGhpcy5zY2FsZShpKS0odGhpcy5zY2FsZShyKS10aGlzLnNjYWxlKGkpKSpuKSxjPWE/cjp0aGlzLmludmVydCh0aGlzLnNjYWxlKHIpKyh0aGlzLnNjYWxlKHIpLXRoaXMuc2NhbGUoaSkpKm4pO3JldHVybiB0aGlzLl9iYWNraW5nU2NhbGVEb21haW4ocyksdGhpcy5fc25hcHBpbmdEb21haW5FbmFibGVkP3RoaXMuX25pY2VEb21haW4oW2wsY10pOltsLGNdfSxlLnByb3RvdHlwZS5zbmFwcGluZ0RvbWFpbkVuYWJsZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5fc25hcHBpbmdEb21haW5FbmFibGVkOih0aGlzLl9zbmFwcGluZ0RvbWFpbkVuYWJsZWQ9dCx0aGlzLmF1dG9Eb21haW5JZkF1dG9tYXRpY01vZGUoKSx0aGlzKX0sZS5wcm90b3R5cGUuX2V4cGFuZFNpbmdsZVZhbHVlRG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiB0fSxlLnByb3RvdHlwZS5pbnZlcnQ9ZnVuY3Rpb24odCl7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBpbnZlcnQiKX0sZS5wcm90b3R5cGUuZG9tYWluPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT1lJiYodGhpcy5fZG9tYWluTWluPWVbMF0sdGhpcy5fZG9tYWluTWF4PWVbMV0pLHQucHJvdG90eXBlLmRvbWFpbi5jYWxsKHRoaXMsZSl9LGUucHJvdG90eXBlLmRvbWFpbk1pbj1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLmRvbWFpbigpWzBdOih0aGlzLl9kb21haW5NaW49dCx0aGlzLmF1dG9Eb21haW5JZkF1dG9tYXRpY01vZGUoKSx0aGlzKX0sZS5wcm90b3R5cGUuZG9tYWluTWF4PWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuZG9tYWluKClbMV06KHRoaXMuX2RvbWFpbk1heD10LHRoaXMuYXV0b0RvbWFpbklmQXV0b21hdGljTW9kZSgpLHRoaXMpfSxlLnByb3RvdHlwZS5leHRlbnRPZlZhbHVlcz1mdW5jdGlvbih0KXt2YXIgZT1pZHQuZXh0ZW50KHQuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gU210Lk1hdGguaXNWYWxpZE51bWJlcigrdCl9KSkpO3JldHVybiBudWxsPT1lWzBdfHxudWxsPT1lWzFdP1tdOmV9LGUucHJvdG90eXBlLnpvb209ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3RoaXMuZG9tYWluKHRoaXMucmFuZ2UoKS5tYXAoKGZ1bmN0aW9uKGkpe3JldHVybiBuLmludmVydChObXQuem9vbU91dChpLHQsZSkpfSkpKX0sZS5wcm90b3R5cGUucGFuPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5kb21haW4odGhpcy5yYW5nZSgpLm1hcCgoZnVuY3Rpb24obil7cmV0dXJuIGUuaW52ZXJ0KG4rdCl9KSkpfSxlLnByb3RvdHlwZS5zY2FsZVRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgc2NhbGVUcmFuc2Zvcm1hdGlvbiIpfSxlLnByb3RvdHlwZS5pbnZlcnRlZFRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgaW52ZXJ0ZWRUcmFuc2Zvcm1hdGlvbiIpfSxlLnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkV4dGVudD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgZ2V0VHJhbnNmb3JtYXRpb25FeHRlbnQiKX0sZS5wcm90b3R5cGUuZ2V0VHJhbnNmb3JtYXRpb25Eb21haW49ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIGdldFRyYW5zZm9ybWF0aW9uRG9tYWluIil9LGUucHJvdG90eXBlLnNldFRyYW5zZm9ybWF0aW9uRG9tYWluPWZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgc2V0VHJhbnNmb3JtYXRpb25Eb21haW4iKX0sZS5wcm90b3R5cGUuX3NldERvbWFpbj1mdW5jdGlvbihlKXt2YXIgbj1mdW5jdGlvbih0KXtyZXR1cm4gU210Lk1hdGguaXNOYU4odCl8fHQ9PT0xLzB8fHQ9PT0tMS8wfTtuKGVbMF0pfHxuKGVbMV0pP1NtdC5XaW5kb3cud2FybigiV2FybmluZzogUXVhbnRpdGF0aXZlU2NhbGVzIGNhbm5vdCB0YWtlIE5hTiBvciBJbmZpbml0eSBhcyBhIGRvbWFpbiB2YWx1ZS4gSWdub3JpbmcuIik6dC5wcm90b3R5cGUuX3NldERvbWFpbi5jYWxsKHRoaXMsZSl9LGUucHJvdG90eXBlLmRlZmF1bHRUaWNrcz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgX2dldERlZmF1bHRUaWNrcyIpfSxlLnByb3RvdHlwZS50aWNrcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl90aWNrR2VuZXJhdG9yKHRoaXMpfSxlLnByb3RvdHlwZS5fbmljZURvbWFpbj1mdW5jdGlvbih0LGUpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgX25pY2VEb21haW4iKX0sZS5wcm90b3R5cGUuX2RlZmF1bHRFeHRlbnQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIF9kZWZhdWx0RXh0ZW50Iil9LGUucHJvdG90eXBlLnRpY2tHZW5lcmF0b3I9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5fdGlja0dlbmVyYXRvcjoodGhpcy5fdGlja0dlbmVyYXRvcj10LHRoaXMpfSxlLl9ERUZBVUxUX05VTV9USUNLUz0xMCxlfSkoSW10LlNjYWxlKTtlLlF1YW50aXRhdGl2ZVNjYWxlPW59KSksQm10PWJlKChmdW5jdGlvbih0LGUpewovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt2YXIgZT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGUuX2QzU2NhbGU9aWR0LnNjYWxlTGluZWFyKCksZX1yZXR1cm4gRGZ0Ll9fZXh0ZW5kcyhlLHQpLGUucHJvdG90eXBlLl9kZWZhdWx0RXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJuWzAsMV19LGUucHJvdG90eXBlLl9leHBhbmRTaW5nbGVWYWx1ZURvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gdFswXT09PXRbMV0/W3RbMF0tMSx0WzFdKzFdOnR9LGUucHJvdG90eXBlLnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9kM1NjYWxlKHQpfSxlLnByb3RvdHlwZS5zY2FsZVRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnNjYWxlKHQpfSxlLnByb3RvdHlwZS5pbnZlcnRlZFRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmludmVydCh0KX0sZS5wcm90b3R5cGUuZ2V0VHJhbnNmb3JtYXRpb25FeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZ2V0VW5ib3VuZGVkRXh0ZW50KCEwKX0sZS5wcm90b3R5cGUuZ2V0VHJhbnNmb3JtYXRpb25Eb21haW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21haW4oKX0sZS5wcm90b3R5cGUuc2V0VHJhbnNmb3JtYXRpb25Eb21haW49ZnVuY3Rpb24odCl7dGhpcy5kb21haW4odCl9LGUucHJvdG90eXBlLl9nZXREb21haW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFja2luZ1NjYWxlRG9tYWluKCl9LGUucHJvdG90eXBlLl9iYWNraW5nU2NhbGVEb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5fZDNTY2FsZS5kb21haW4oKToodGhpcy5fZDNTY2FsZS5kb21haW4odCksdGhpcyl9LGUucHJvdG90eXBlLl9nZXRSYW5nZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kM1NjYWxlLnJhbmdlKCl9LGUucHJvdG90eXBlLl9zZXRSYW5nZT1mdW5jdGlvbih0KXt0aGlzLl9kM1NjYWxlLnJhbmdlKHQpfSxlLnByb3RvdHlwZS5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2QzU2NhbGUuaW52ZXJ0KHQpfSxlLnByb3RvdHlwZS5kZWZhdWx0VGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS50aWNrcyhlLl9ERUZBVUxUX05VTV9USUNLUyl9LGUucHJvdG90eXBlLl9uaWNlRG9tYWluPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2QzU2NhbGUuY29weSgpLmRvbWFpbih0KS5uaWNlKGUpLmRvbWFpbigpfSxlfSkoRG10LlF1YW50aXRhdGl2ZVNjYWxlKTtlLkxpbmVhcj1ufSkpLEhtdD1iZSgoZnVuY3Rpb24odCxlKXsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3ZvaWQgMD09PWUmJihlPTEwKTt2YXIgbj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIG4uX2QzU2NhbGU9aWR0LnNjYWxlTG9nKCkuYmFzZShlKSxuLl9zZXREb21haW4obi5fZGVmYXVsdEV4dGVudCgpKSxufXJldHVybiBEZnQuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUuX2RlZmF1bHRFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm5bMSx0aGlzLl9kM1NjYWxlLmJhc2UoKV19LGUucHJvdG90eXBlLl9leHBhbmRTaW5nbGVWYWx1ZURvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gdFswXT09PXRbMV0/W3RbMF0vdGhpcy5fZDNTY2FsZS5iYXNlKCksdFsxXSp0aGlzLl9kM1NjYWxlLmJhc2UoKV06dH0sZS5wcm90b3R5cGUuc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2QzU2NhbGUodCl9LGUucHJvdG90eXBlLnNjYWxlVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc2NhbGUodCl9LGUucHJvdG90eXBlLmludmVydGVkVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW52ZXJ0KHQpfSxlLnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkV4dGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9nZXRVbmJvdW5kZWRFeHRlbnQoITApfSxlLnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbWFpbigpfSxlLnByb3RvdHlwZS5zZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbih0KXt0aGlzLmRvbWFpbih0KX0sZS5wcm90b3R5cGUuX2dldERvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYWNraW5nU2NhbGVEb21haW4oKX0sZS5wcm90b3R5cGUuX2JhY2tpbmdTY2FsZURvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9kM1NjYWxlLmRvbWFpbigpOih0aGlzLl9kM1NjYWxlLmRvbWFpbih0KSx0aGlzKX0sZS5wcm90b3R5cGUuX2dldFJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2QzU2NhbGUucmFuZ2UoKX0sZS5wcm90b3R5cGUuX3NldFJhbmdlPWZ1bmN0aW9uKHQpe3RoaXMuX2QzU2NhbGUucmFuZ2UodCl9LGUucHJvdG90eXBlLmludmVydD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZDNTY2FsZS5pbnZlcnQodCl9LGUucHJvdG90eXBlLmRlZmF1bHRUaWNrcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kM1NjYWxlLnRpY2tzKGUuX0RFRkFVTFRfTlVNX1RJQ0tTKX0sZS5wcm90b3R5cGUuX25pY2VEb21haW49ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS5jb3B5KCkuZG9tYWluKHQpLm5pY2UoKS5kb21haW4oKX0sZX0pKERtdC5RdWFudGl0YXRpdmVTY2FsZSk7ZS5Mb2c9bn0pKSxGbXQ9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt2b2lkIDA9PT1lJiYoZT0xMCk7dmFyIG49dC5jYWxsKHRoaXMpfHx0aGlzO2lmKG4uX2xvZ1RpY2tHZW5lcmF0b3I9ZnVuY3Rpb24odCl7dmFyIGU9ZnVuY3Rpb24odCxlLG4pe3JldHVyblt0LGUsbl0uc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSkpWzFdfSxpPVNtdC5NYXRoLm1pbihuLl91bnRyYW5zZm9ybWVkRG9tYWluLDApLHI9U210Lk1hdGgubWF4KG4uX3VudHJhbnNmb3JtZWREb21haW4sMCksbz1pLGE9ZShpLHIsLW4uX3Bpdm90KSxzPWUoaSxyLG4uX3Bpdm90KSxsPXIsYz1uLl9sb2dUaWNrcygtYSwtbykubWFwKChmdW5jdGlvbih0KXtyZXR1cm4tdH0pKS5yZXZlcnNlKCksdT1uLl9sb2dUaWNrcyhzLGwpLGg9TWF0aC5tYXgoaSwtbi5fcGl2b3QpLGQ9TWF0aC5taW4ocixuLl9waXZvdCkscD1pZHQuc2NhbGVMaW5lYXIoKS5kb21haW4oW2gsZF0pLnRpY2tzKG4uX2hvd01hbnlUaWNrcyhoLGQpKSxmPWMuY29uY2F0KHApLmNvbmNhdCh1KTtyZXR1cm4gZi5sZW5ndGg8PTEmJihmPWlkdC5zY2FsZUxpbmVhcigpLmRvbWFpbihbaSxyXSkudGlja3MoVW10Lk1vZGlmaWVkTG9nLl9ERUZBVUxUX05VTV9USUNLUykpLGZ9LG4uX2QzU2NhbGU9aWR0LnNjYWxlTGluZWFyKCksbi5fYmFzZT1lLG4uX3Bpdm90PW4uX2Jhc2Usbi5fc2V0RG9tYWluKG4uX2RlZmF1bHRFeHRlbnQoKSksbi50aWNrR2VuZXJhdG9yKG4uX2xvZ1RpY2tHZW5lcmF0b3IpLGU8PTEpdGhyb3cgbmV3IEVycm9yKCJNb2RpZmllZExvZ1NjYWxlOiBUaGUgYmFzZSBtdXN0IGJlID4gMSIpO3JldHVybiBufXJldHVybiBEZnQuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUuX2FkanVzdGVkTG9nPWZ1bmN0aW9uKHQpe3ZhciBlPXQ8MD8tMToxO3JldHVybih0Kj1lKTx0aGlzLl9waXZvdCYmKHQrPSh0aGlzLl9waXZvdC10KS90aGlzLl9waXZvdCksKHQ9TWF0aC5sb2codCkvTWF0aC5sb2codGhpcy5fYmFzZSkpKmV9LGUucHJvdG90eXBlLl9pbnZlcnRlZEFkanVzdGVkTG9nPWZ1bmN0aW9uKHQpe3ZhciBlPXQ8MD8tMToxO3JldHVybiB0Kj1lLCh0PU1hdGgucG93KHRoaXMuX2Jhc2UsdCkpPHRoaXMuX3Bpdm90JiYodD10aGlzLl9waXZvdCoodC0xKS8odGhpcy5fcGl2b3QtMSkpLHQqZX0sZS5wcm90b3R5cGUuc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2QzU2NhbGUodGhpcy5fYWRqdXN0ZWRMb2codCkpfSxlLnByb3RvdHlwZS5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2ludmVydGVkQWRqdXN0ZWRMb2codGhpcy5fZDNTY2FsZS5pbnZlcnQodCkpfSxlLnByb3RvdHlwZS5zY2FsZVRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnNjYWxlKHQpfSxlLnByb3RvdHlwZS5pbnZlcnRlZFRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmludmVydCh0KX0sZS5wcm90b3R5cGUuZ2V0VHJhbnNmb3JtYXRpb25FeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZ2V0VW5ib3VuZGVkRXh0ZW50KCEwKX0sZS5wcm90b3R5cGUuZ2V0VHJhbnNmb3JtYXRpb25Eb21haW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21haW4oKX0sZS5wcm90b3R5cGUuc2V0VHJhbnNmb3JtYXRpb25Eb21haW49ZnVuY3Rpb24odCl7dGhpcy5kb21haW4odCl9LGUucHJvdG90eXBlLl9nZXREb21haW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdW50cmFuc2Zvcm1lZERvbWFpbn0sZS5wcm90b3R5cGUuX3NldERvbWFpbj1mdW5jdGlvbihlKXt0aGlzLl91bnRyYW5zZm9ybWVkRG9tYWluPWU7dmFyIG49W3RoaXMuX2FkanVzdGVkTG9nKGVbMF0pLHRoaXMuX2FkanVzdGVkTG9nKGVbMV0pXTt0LnByb3RvdHlwZS5fc2V0RG9tYWluLmNhbGwodGhpcyxuKX0sZS5wcm90b3R5cGUuX2JhY2tpbmdTY2FsZURvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9kM1NjYWxlLmRvbWFpbigpOih0aGlzLl9kM1NjYWxlLmRvbWFpbih0KSx0aGlzKX0sZS5wcm90b3R5cGUuX2xvZ1RpY2tzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxpPXRoaXMuX2hvd01hbnlUaWNrcyh0LGUpO2lmKDA9PT1pKXJldHVybltdO3ZhciByPU1hdGguZmxvb3IoTWF0aC5sb2codCkvTWF0aC5sb2codGhpcy5fYmFzZSkpLG89TWF0aC5jZWlsKE1hdGgubG9nKGUpL01hdGgubG9nKHRoaXMuX2Jhc2UpKSxhPWlkdC5yYW5nZShvLHIsLU1hdGguY2VpbCgoby1yKS9pKSkscz1pZHQucmFuZ2UodGhpcy5fYmFzZSwxLC0odGhpcy5fYmFzZS0xKSkubWFwKE1hdGguZmxvb3IpLGw9U210LkFycmF5LnVuaXEocyksYz1hLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGwubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5wb3cobi5fYmFzZSx0LTEpKmV9KSl9KSk7cmV0dXJuIFNtdC5BcnJheS5mbGF0dGVuKGMpLmZpbHRlcigoZnVuY3Rpb24obil7cmV0dXJuIHQ8PW4mJm48PWV9KSkuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSkpfSxlLnByb3RvdHlwZS5faG93TWFueVRpY2tzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fYWRqdXN0ZWRMb2coU210Lk1hdGgubWluKHRoaXMuX3VudHJhbnNmb3JtZWREb21haW4sMCkpLGk9dGhpcy5fYWRqdXN0ZWRMb2coU210Lk1hdGgubWF4KHRoaXMuX3VudHJhbnNmb3JtZWREb21haW4sMCkpLHI9dGhpcy5fYWRqdXN0ZWRMb2codCksbz10aGlzLl9hZGp1c3RlZExvZyhlKTtyZXR1cm4gTWF0aC5jZWlsKChvLXIpLyhpLW4pKlVtdC5Nb2RpZmllZExvZy5fREVGQVVMVF9OVU1fVElDS1MpfSxlLnByb3RvdHlwZS5fbmljZURvbWFpbj1mdW5jdGlvbih0LGUpe3JldHVybiB0fSxlLnByb3RvdHlwZS5fZGVmYXVsdEV4dGVudD1mdW5jdGlvbigpe3JldHVyblswLHRoaXMuX2Jhc2VdfSxlLnByb3RvdHlwZS5fZXhwYW5kU2luZ2xlVmFsdWVEb21haW49ZnVuY3Rpb24odCl7aWYodFswXT09PXRbMV0pe3ZhciBlPXRbMF07cmV0dXJuIGU+MD9bZS90aGlzLl9iYXNlLGUqdGhpcy5fYmFzZV06MD09PWU/Wy10aGlzLl9iYXNlLHRoaXMuX2Jhc2VdOltlKnRoaXMuX2Jhc2UsZS90aGlzLl9iYXNlXX1yZXR1cm4gdH0sZS5wcm90b3R5cGUuX2dldFJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2QzU2NhbGUucmFuZ2UoKX0sZS5wcm90b3R5cGUuX3NldFJhbmdlPWZ1bmN0aW9uKHQpe3RoaXMuX2QzU2NhbGUucmFuZ2UodCl9LGUucHJvdG90eXBlLmRlZmF1bHRUaWNrcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kM1NjYWxlLnRpY2tzKFVtdC5Nb2RpZmllZExvZy5fREVGQVVMVF9OVU1fVElDS1MpfSxlfSkoRG10LlF1YW50aXRhdGl2ZVNjYWxlKTtlLk1vZGlmaWVkTG9nPW59KSksVm10PWJlKChmdW5jdGlvbih0LGUpewovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt2YXIgZT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGUuX2QzU2NhbGU9aWR0LnNjYWxlVGltZSgpLGUuYXV0b0RvbWFpbigpLGV9cmV0dXJuIERmdC5fX2V4dGVuZHMoZSx0KSxlLnByb3RvdHlwZS50aWNrSW50ZXJ2YWw9ZnVuY3Rpb24odCxuLGkpe3ZvaWQgMD09PW4mJihuPTEpLHZvaWQgMD09PWkmJihpPSExKTt2YXIgcj1pZHQuc2NhbGVUaW1lKCksbz1lLnRpbWVJbnRlcnZhbFRvRDNUaW1lKHQsaSkuZXZlcnkobik7cmV0dXJuIHIuZG9tYWluKHRoaXMuZG9tYWluKCkpLHIucmFuZ2UodGhpcy5yYW5nZSgpKSxyLnRpY2tzKG8pfSxlLnByb3RvdHlwZS5fc2V0RG9tYWluPWZ1bmN0aW9uKGUpe2lmKGVbMV08ZVswXSl0aHJvdyBuZXcgRXJyb3IoIlNjYWxlLlRpbWUgZG9tYWluIHZhbHVlcyBtdXN0IGJlIGluIGNocm9ub2xvZ2ljYWwgb3JkZXIiKTtyZXR1cm4gdC5wcm90b3R5cGUuX3NldERvbWFpbi5jYWxsKHRoaXMsZSl9LGUucHJvdG90eXBlLl9kZWZhdWx0RXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJuW25ldyBEYXRlKCIxOTcwLTAxLTAxIiksbmV3IERhdGUoIjE5NzAtMDEtMDIiKV19LGUucHJvdG90eXBlLl9leHBhbmRTaW5nbGVWYWx1ZURvbWFpbj1mdW5jdGlvbih0KXt2YXIgZT10WzBdLmdldFRpbWUoKSxuPXRbMV0uZ2V0VGltZSgpO2lmKGU9PT1uKXt2YXIgaT1uZXcgRGF0ZShlKTtpLnNldERhdGUoaS5nZXREYXRlKCktMSk7dmFyIHI9bmV3IERhdGUobik7cmV0dXJuIHIuc2V0RGF0ZShyLmdldERhdGUoKSsxKSxbaSxyXX1yZXR1cm4gdH0sZS5wcm90b3R5cGUuc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2QzU2NhbGUodCl9LGUucHJvdG90eXBlLnNjYWxlVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc2NhbGUobmV3IERhdGUodCkpfSxlLnByb3RvdHlwZS5pbnZlcnRlZFRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmludmVydCh0KS5nZXRUaW1lKCl9LGUucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRXh0ZW50PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZ2V0VW5ib3VuZGVkRXh0ZW50KCEwKTtyZXR1cm5bdFswXS52YWx1ZU9mKCksdFsxXS52YWx1ZU9mKCldfSxlLnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZG9tYWluKCk7cmV0dXJuW3RbMF0udmFsdWVPZigpLHRbMV0udmFsdWVPZigpXX0sZS5wcm90b3R5cGUuc2V0VHJhbnNmb3JtYXRpb25Eb21haW49ZnVuY3Rpb24odCl7dmFyIGU9dFsxXTt0aGlzLmRvbWFpbihbbmV3IERhdGUodFswXSksbmV3IERhdGUoZSldKX0sZS5wcm90b3R5cGUuX2dldERvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYWNraW5nU2NhbGVEb21haW4oKX0sZS5wcm90b3R5cGUuX2JhY2tpbmdTY2FsZURvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9kM1NjYWxlLmRvbWFpbigpOih0aGlzLl9kM1NjYWxlLmRvbWFpbih0KSx0aGlzKX0sZS5wcm90b3R5cGUuX2dldFJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2QzU2NhbGUucmFuZ2UoKX0sZS5wcm90b3R5cGUuX3NldFJhbmdlPWZ1bmN0aW9uKHQpe3RoaXMuX2QzU2NhbGUucmFuZ2UodCl9LGUucHJvdG90eXBlLmludmVydD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZDNTY2FsZS5pbnZlcnQodCl9LGUucHJvdG90eXBlLmRlZmF1bHRUaWNrcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kM1NjYWxlLnRpY2tzKGUuX0RFRkFVTFRfTlVNX1RJQ0tTKX0sZS5wcm90b3R5cGUuX25pY2VEb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2QzU2NhbGUuY29weSgpLmRvbWFpbih0KS5uaWNlKCkuZG9tYWluKCl9LGUudGltZUludGVydmFsVG9EM1RpbWU9ZnVuY3Rpb24odCxlKXtzd2l0Y2godCl7Y2FzZSBqbXQuVGltZUludGVydmFsLnNlY29uZDpyZXR1cm4gZT9pZHQudXRjU2Vjb25kOmlkdC50aW1lU2Vjb25kO2Nhc2Ugam10LlRpbWVJbnRlcnZhbC5taW51dGU6cmV0dXJuIGU/aWR0LnV0Y01pbnV0ZTppZHQudGltZU1pbnV0ZTtjYXNlIGptdC5UaW1lSW50ZXJ2YWwuaG91cjpyZXR1cm4gZT9pZHQudXRjSG91cjppZHQudGltZUhvdXI7Y2FzZSBqbXQuVGltZUludGVydmFsLmRheTpyZXR1cm4gZT9pZHQudXRjRGF5OmlkdC50aW1lRGF5O2Nhc2Ugam10LlRpbWVJbnRlcnZhbC53ZWVrOnJldHVybiBlP2lkdC51dGNXZWVrOmlkdC50aW1lV2VlaztjYXNlIGptdC5UaW1lSW50ZXJ2YWwubW9udGg6cmV0dXJuIGU/aWR0LnV0Y01vbnRoOmlkdC50aW1lTW9udGg7Y2FzZSBqbXQuVGltZUludGVydmFsLnllYXI6cmV0dXJuIGU/aWR0LnV0Y1llYXI6aWR0LnRpbWVZZWFyO2RlZmF1bHQ6dGhyb3cgRXJyb3IoIlRpbWVJbnRlcnZhbCBzcGVjaWZpZWQgZG9lcyBub3QgZXhpc3Q6ICIrdCl9fSxlfSkoRG10LlF1YW50aXRhdGl2ZVNjYWxlKTtlLlRpbWU9bn0pKSxVbXQ9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLlRpY2tHZW5lcmF0b3JzPVBtdCxEZnQuX19leHBvcnRTdGFyKE9tdCxlKSxEZnQuX19leHBvcnRTdGFyKFJtdCxlKSxEZnQuX19leHBvcnRTdGFyKHptdCxlKSxEZnQuX19leHBvcnRTdGFyKEJtdCxlKSxEZnQuX19leHBvcnRTdGFyKEhtdCxlKSxEZnQuX19leHBvcnRTdGFyKEZtdCxlKSxEZnQuX19leHBvcnRTdGFyKFZtdCxlKTt2YXIgbj1PbXQ7ZS5pc1RyYW5zZm9ybWFibGU9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIERtdC5RdWFudGl0YXRpdmVTY2FsZXx8dCBpbnN0YW5jZW9mIG4uQ2F0ZWdvcnl9fSkpLGptdD1iZSgoZnVuY3Rpb24odCxlKXsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuVGltZUludGVydmFsPUlmdC5tYWtlRW51bShbInNlY29uZCIsIm1pbnV0ZSIsImhvdXIiLCJkYXkiLCJ3ZWVrIiwibW9udGgiLCJ5ZWFyIl0pLGUuVGltZUF4aXNPcmllbnRhdGlvbj1JZnQubWFrZUVudW0oWyJ0b3AiLCJib3R0b20iXSksZS5UaWVyTGFiZWxQb3NpdGlvbj1JZnQubWFrZUVudW0oWyJiZXR3ZWVuIiwiY2VudGVyIl0pO3ZhciBuLGk9KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGkoZSxuLHIpe3ZhciBvPXQuY2FsbCh0aGlzLGUsbil8fHRoaXM7cmV0dXJuIG8uX21heFRpbWVJbnRlcnZhbFByZWNpc2lvbj1udWxsLG8uX3RpZXJMYWJlbFBvc2l0aW9ucz1bXSxvLl91c2VVVEM9cixvLmFkZENsYXNzKCJ0aW1lLWF4aXMiKSxvLnRpY2tMYWJlbFBhZGRpbmcoNSksby5heGlzQ29uZmlndXJhdGlvbnMoaS5fREVGQVVMVF9USU1FX0FYSVNfQ09ORklHVVJBVElPTlMoby5fdXNlVVRDKSksby5hbm5vdGF0aW9uRm9ybWF0dGVyKENtdC50aW1lKCIlYSAlYiAlZCwgJVkiLG8uX3VzZVVUQykpLG99cmV0dXJuIERmdC5fX2V4dGVuZHMoaSx0KSxpLnByb3RvdHlwZS50aWVyTGFiZWxQb3NpdGlvbnM9ZnVuY3Rpb24odCl7aWYobnVsbD09dClyZXR1cm4gdGhpcy5fdGllckxhYmVsUG9zaXRpb25zO2lmKCF0LmV2ZXJ5KChmdW5jdGlvbih0KXtyZXR1cm4iYmV0d2VlbiI9PT10LnRvTG93ZXJDYXNlKCl8fCJjZW50ZXIiPT09dC50b0xvd2VyQ2FzZSgpfSkpKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgcG9zaXRpb24gZm9yIHRpZXIgbGFiZWxzIik7cmV0dXJuIHRoaXMuX3RpZXJMYWJlbFBvc2l0aW9ucz10LHRoaXMucmVkcmF3KCksdGhpc30saS5wcm90b3R5cGUubWF4VGltZUludGVydmFsUHJlY2lzaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX21heFRpbWVJbnRlcnZhbFByZWNpc2lvbjoodGhpcy5fbWF4VGltZUludGVydmFsUHJlY2lzaW9uPXQsdGhpcy5yZWRyYXcoKSx0aGlzKX0saS5wcm90b3R5cGUuY3VycmVudEF4aXNDb25maWd1cmF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Bvc3NpYmxlVGltZUF4aXNDb25maWd1cmF0aW9uc1t0aGlzLl9tb3N0UHJlY2lzZUNvbmZpZ0luZGV4XX0saS5wcm90b3R5cGUuYXhpc0NvbmZpZ3VyYXRpb25zPWZ1bmN0aW9uKHQpe2lmKG51bGw9PXQpcmV0dXJuIHRoaXMuX3Bvc3NpYmxlVGltZUF4aXNDb25maWd1cmF0aW9uczt0aGlzLl9wb3NzaWJsZVRpbWVBeGlzQ29uZmlndXJhdGlvbnM9dCx0aGlzLl9udW1UaWVycz1TbXQuTWF0aC5tYXgodGhpcy5fcG9zc2libGVUaW1lQXhpc0NvbmZpZ3VyYXRpb25zLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQubGVuZ3RofSkpLDApLHRoaXMuX2lzQW5jaG9yZWQmJnRoaXMuX3NldHVwRG9tRWxlbWVudHMoKTtmb3IodmFyIGU9dGhpcy50aWVyTGFiZWxQb3NpdGlvbnMoKSxuPVtdLGk9MDtpPHRoaXMuX251bVRpZXJzO2krKyluLnB1c2goZVtpXXx8ImJldHdlZW4iKTtyZXR1cm4gdGhpcy50aWVyTGFiZWxQb3NpdGlvbnMobiksdGhpcy5yZWRyYXcoKSx0aGlzfSxpLnByb3RvdHlwZS5fZ2V0TW9zdFByZWNpc2VDb25maWd1cmF0aW9uSW5kZXg9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dGhpcy5fcG9zc2libGVUaW1lQXhpc0NvbmZpZ3VyYXRpb25zLmxlbmd0aDtyZXR1cm4gdGhpcy5fcG9zc2libGVUaW1lQXhpc0NvbmZpZ3VyYXRpb25zLmZvckVhY2goKGZ1bmN0aW9uKG4saSl7aTxlJiZuLmV2ZXJ5KChmdW5jdGlvbihlKXtyZXR1cm4gdC5fY2hlY2tUaW1lQXhpc1RpZXJDb25maWd1cmF0aW9uKGUpfSkpJiYoZT1pKX0pKSxlPT09dGhpcy5fcG9zc2libGVUaW1lQXhpc0NvbmZpZ3VyYXRpb25zLmxlbmd0aCYmKFNtdC5XaW5kb3cud2Fybigiem9vbWVkIG91dCB0b28gZmFyOiBjb3VsZCBub3QgZmluZCBzdWl0YWJsZSBpbnRlcnZhbCB0byBkaXNwbGF5IGxhYmVscyIpLC0tZSksZX0saS5wcm90b3R5cGUub3JpZW50YXRpb249ZnVuY3Rpb24oZSl7aWYoZSYmKCJyaWdodCI9PT1lLnRvTG93ZXJDYXNlKCl8fCJsZWZ0Ij09PWUudG9Mb3dlckNhc2UoKSkpdGhyb3cgbmV3IEVycm9yKGUrIiBpcyBub3QgYSBzdXBwb3J0ZWQgb3JpZW50YXRpb24gZm9yIFRpbWVBeGlzIC0gb25seSBob3Jpem9udGFsIG9yaWVudGF0aW9ucyBhcmUgc3VwcG9ydGVkIik7cmV0dXJuIHQucHJvdG90eXBlLm9yaWVudGF0aW9uLmNhbGwodGhpcyxlKX0saS5wcm90b3R5cGUuX2NvbXB1dGVIZWlnaHQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9tZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0O3RoaXMuX3RpZXJIZWlnaHRzPVtdO2Zvcih2YXIgZT0wO2U8dGhpcy5fbnVtVGllcnM7ZSsrKXRoaXMuX3RpZXJIZWlnaHRzLnB1c2godCt0aGlzLnRpY2tMYWJlbFBhZGRpbmcoKSsoImJldHdlZW4iPT09dGhpcy5fdGllckxhYmVsUG9zaXRpb25zW2VdPzA6dGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCkpKTtyZXR1cm4gaWR0LnN1bSh0aGlzLl90aWVySGVpZ2h0cyl9LGkucHJvdG90eXBlLl9nZXRJbnRlcnZhbExlbmd0aD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9zY2FsZS5kb21haW4oKVswXSxuPVVtdC5UaW1lLnRpbWVJbnRlcnZhbFRvRDNUaW1lKHQuaW50ZXJ2YWwsdGhpcy5fdXNlVVRDKS5vZmZzZXQoZSx0LnN0ZXApO3JldHVybiBuPnRoaXMuX3NjYWxlLmRvbWFpbigpWzFdP3RoaXMud2lkdGgoKTpNYXRoLmFicyh0aGlzLl9zY2FsZS5zY2FsZShuKS10aGlzLl9zY2FsZS5zY2FsZShlKSl9LGkucHJvdG90eXBlLl9tYXhXaWR0aEZvckludGVydmFsPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9tZWFzdXJlci5tZWFzdXJlKHQuZm9ybWF0dGVyKGkuX0xPTkdfREFURSkpLndpZHRofSxpLnByb3RvdHlwZS5fY2hlY2tUaW1lQXhpc1RpZXJDb25maWd1cmF0aW9uPWZ1bmN0aW9uKHQpe2lmKG51bGwhPXRoaXMuX21heFRpbWVJbnRlcnZhbFByZWNpc2lvbil7dmFyIGU9aS5fU09SVEVEX1RJTUVfSU5URVJWQUxfSU5ERVhbdGhpcy5fbWF4VGltZUludGVydmFsUHJlY2lzaW9uXSxuPWkuX1NPUlRFRF9USU1FX0lOVEVSVkFMX0lOREVYW3QuaW50ZXJ2YWxdO2lmKG51bGwhPWUmJm51bGwhPW4mJm48ZSlyZXR1cm4hMX12YXIgcj10aGlzLl9tYXhXaWR0aEZvckludGVydmFsKHQpKzIqdGhpcy50aWNrTGFiZWxQYWRkaW5nKCk7cmV0dXJuIE1hdGgubWluKHRoaXMuX2dldEludGVydmFsTGVuZ3RoKHQpLHRoaXMud2lkdGgoKSk+PXJ9LGkucHJvdG90eXBlLl9zaXplRnJvbU9mZmVyPWZ1bmN0aW9uKGUsbil7dmFyIGk9dC5wcm90b3R5cGUuX3NpemVGcm9tT2ZmZXIuY2FsbCh0aGlzLGUsbikscj10aGlzLl90aWVySGVpZ2h0cy5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSxuLHIpe3JldHVybiB0K2U+aS5oZWlnaHQ/dDp0K2V9KSksbz10aGlzLm1hcmdpbigpKyh0aGlzLmFubm90YXRpb25zRW5hYmxlZCgpP3RoaXMuYW5ub3RhdGlvblRpZXJDb3VudCgpKnRoaXMuX2Fubm90YXRpb25UaWVySGVpZ2h0KCk6MCk7cmV0dXJuIGkuaGVpZ2h0PU1hdGgubWluKGkuaGVpZ2h0LHIrbyksaX0saS5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7dC5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyksdGhpcy5fc2V0dXBEb21FbGVtZW50cygpfSxpLnByb3RvdHlwZS5fc2V0dXBEb21FbGVtZW50cz1mdW5jdGlvbigpe3RoaXMuY29udGVudCgpLnNlbGVjdEFsbCgiLiIraS5USU1FX0FYSVNfVElFUl9DTEFTUykucmVtb3ZlKCksdGhpcy5fdGllckxhYmVsQ29udGFpbmVycz1bXSx0aGlzLl90aWVyTWFya0NvbnRhaW5lcnM9W10sdGhpcy5fdGllckJhc2VsaW5lcz1bXSx0aGlzLl90aWNrTGFiZWxDb250YWluZXIucmVtb3ZlKCksdGhpcy5fYmFzZWxpbmUucmVtb3ZlKCk7Zm9yKHZhciB0PTA7dDx0aGlzLl9udW1UaWVyczsrK3Qpe3ZhciBlPXRoaXMuY29udGVudCgpLmFwcGVuZCgiZyIpLmNsYXNzZWQoaS5USU1FX0FYSVNfVElFUl9DTEFTUywhMCk7dGhpcy5fdGllckxhYmVsQ29udGFpbmVycy5wdXNoKGUuYXBwZW5kKCJnIikuY2xhc3NlZChBbXQuQXhpcy5USUNLX0xBQkVMX0NMQVNTKyItY29udGFpbmVyIiwhMCkpLHRoaXMuX3RpZXJNYXJrQ29udGFpbmVycy5wdXNoKGUuYXBwZW5kKCJnIikuY2xhc3NlZChBbXQuQXhpcy5USUNLX01BUktfQ0xBU1MrIi1jb250YWluZXIiLCEwKSksdGhpcy5fdGllckJhc2VsaW5lcy5wdXNoKGUuYXBwZW5kKCJsaW5lIikuY2xhc3NlZCgiYmFzZWxpbmUiLCEwKSl9dmFyIG49bmV3IGFtdC5TdmdDb250ZXh0KHRoaXMuX3RpZXJMYWJlbENvbnRhaW5lcnNbMF0ubm9kZSgpKTt0aGlzLl9tZWFzdXJlcj1uZXcgYW10LkNhY2hlTWVhc3VyZXIobil9LGkucHJvdG90eXBlLl9nZXRUaWNrSW50ZXJ2YWxWYWx1ZXM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3NjYWxlLnRpY2tJbnRlcnZhbCh0LmludGVydmFsLHQuc3RlcCx0aGlzLl91c2VVVEMpfSxpLnByb3RvdHlwZS5fZ2V0VGlja1ZhbHVlcz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMuX3Bvc3NpYmxlVGltZUF4aXNDb25maWd1cmF0aW9uc1t0aGlzLl9tb3N0UHJlY2lzZUNvbmZpZ0luZGV4XS5yZWR1Y2UoKGZ1bmN0aW9uKGUsbil7cmV0dXJuIGUuY29uY2F0KHQuX2dldFRpY2tJbnRlcnZhbFZhbHVlcyhuKSl9KSxbXSl9LGkucHJvdG90eXBlLl9jbGVhblRpZXJzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDx0aGlzLl90aWVyTGFiZWxDb250YWluZXJzLmxlbmd0aDt0KyspdGhpcy5fdGllckxhYmVsQ29udGFpbmVyc1t0XS5zZWxlY3RBbGwoIi4iK0FtdC5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MpLnJlbW92ZSgpLHRoaXMuX3RpZXJNYXJrQ29udGFpbmVyc1t0XS5zZWxlY3RBbGwoIi4iK0FtdC5BeGlzLlRJQ0tfTUFSS19DTEFTUykucmVtb3ZlKCksdGhpcy5fdGllckJhc2VsaW5lc1t0XS5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpfSxpLnByb3RvdHlwZS5fZ2V0VGlja1ZhbHVlc0ZvckNvbmZpZ3VyYXRpb249ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fc2NhbGUudGlja0ludGVydmFsKHQuaW50ZXJ2YWwsdC5zdGVwLHRoaXMuX3VzZVVUQyksbj10aGlzLl9zY2FsZS5kb21haW4oKSxpPWUubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC52YWx1ZU9mKCl9KSk7cmV0dXJuLTE9PT1pLmluZGV4T2YoblswXS52YWx1ZU9mKCkpJiZlLnVuc2hpZnQoblswXSksLTE9PT1pLmluZGV4T2YoblsxXS52YWx1ZU9mKCkpJiZlLnB1c2goblsxXSksZX0saS5wcm90b3R5cGUuX3JlbmRlclRpZXJMYWJlbHM9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPXRoaXMscj10aGlzLl9nZXRUaWNrVmFsdWVzRm9yQ29uZmlndXJhdGlvbihlKSxvPVtdOyJiZXR3ZWVuIj09PXRoaXMuX3RpZXJMYWJlbFBvc2l0aW9uc1tuXSYmMT09PWUuc3RlcD9yLm1hcCgoZnVuY3Rpb24odCxlKXtlKzE+PXIubGVuZ3RofHxvLnB1c2gobmV3IERhdGUoKHJbZSsxXS52YWx1ZU9mKCktcltlXS52YWx1ZU9mKCkpLzIrcltlXS52YWx1ZU9mKCkpKX0pKTpvPXI7dmFyIGE9dC5zZWxlY3RBbGwoIi4iK0FtdC5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MpLmRhdGEobywoZnVuY3Rpb24odCl7cmV0dXJuIFN0cmluZyh0LnZhbHVlT2YoKSl9KSkscz1hLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChBbXQuQXhpcy5USUNLX0xBQkVMX0NMQVNTLCEwKTtzLmFwcGVuZCgidGV4dCIpO3ZhciBsLGM9ImNlbnRlciI9PT10aGlzLl90aWVyTGFiZWxQb3NpdGlvbnNbbl18fDE9PT1lLnN0ZXA/MDp0aGlzLnRpY2tMYWJlbFBhZGRpbmcoKTtsPSJib3R0b20iPT09dGhpcy5vcmllbnRhdGlvbigpP2lkdC5zdW0odGhpcy5fdGllckhlaWdodHMuc2xpY2UoMCxuKzEpKS10aGlzLnRpY2tMYWJlbFBhZGRpbmcoKToiY2VudGVyIj09PXRoaXMuX3RpZXJMYWJlbFBvc2l0aW9uc1tuXT90aGlzLmhlaWdodCgpLWlkdC5zdW0odGhpcy5fdGllckhlaWdodHMuc2xpY2UoMCxuKSktdGhpcy50aWNrTGFiZWxQYWRkaW5nKCktdGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCk6dGhpcy5oZWlnaHQoKS1pZHQuc3VtKHRoaXMuX3RpZXJIZWlnaHRzLnNsaWNlKDAsbikpLXRoaXMudGlja0xhYmVsUGFkZGluZygpO3ZhciB1PWEubWVyZ2UocyksaD11LnNlbGVjdEFsbCgidGV4dCIpO2guc2l6ZSgpPjAmJmguYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrYysiLCIrbCsiKSIpLGEuZXhpdCgpLnJlbW92ZSgpLHUuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuInRyYW5zbGF0ZSgiK2kuX3NjYWxlLnNjYWxlKHQpKyIsMCkifSkpO3ZhciBkPSJjZW50ZXIiPT09dGhpcy5fdGllckxhYmVsUG9zaXRpb25zW25dfHwxPT09ZS5zdGVwPyJtaWRkbGUiOiJzdGFydCI7dS5zZWxlY3RBbGwoInRleHQiKS50ZXh0KGUuZm9ybWF0dGVyKS5zdHlsZSgidGV4dC1hbmNob3IiLGQpfSxpLnByb3RvdHlwZS5fcmVuZGVyVGlja01hcmtzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fdGllck1hcmtDb250YWluZXJzW2VdLnNlbGVjdEFsbCgiLiIrQW10LkF4aXMuVElDS19NQVJLX0NMQVNTKS5kYXRhKHQpLGk9bi5lbnRlcigpLmFwcGVuZCgibGluZSIpLmNsYXNzZWQoQW10LkF4aXMuVElDS19NQVJLX0NMQVNTLCEwKS5tZXJnZShuKSxyPXRoaXMuX2dlbmVyYXRlVGlja01hcmtBdHRySGFzaCgpLG89dGhpcy5fdGllckhlaWdodHMuc2xpY2UoMCxlKS5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZX0pLDApOyJib3R0b20iPT09dGhpcy5vcmllbnRhdGlvbigpPyhyLnkxPW8sci55Mj1vKygiY2VudGVyIj09PXRoaXMuX3RpZXJMYWJlbFBvc2l0aW9uc1tlXT90aGlzLmlubmVyVGlja0xlbmd0aCgpOnRoaXMuX3RpZXJIZWlnaHRzW2VdKSk6KHIueTE9dGhpcy5oZWlnaHQoKS1vLHIueTI9dGhpcy5oZWlnaHQoKS0obysoImNlbnRlciI9PT10aGlzLl90aWVyTGFiZWxQb3NpdGlvbnNbZV0/dGhpcy5pbm5lclRpY2tMZW5ndGgoKTp0aGlzLl90aWVySGVpZ2h0c1tlXSkpKSxpLmF0dHJzKHIpLCJib3R0b20iPT09dGhpcy5vcmllbnRhdGlvbigpPyhyLnkxPW8sci55Mj1vKygiY2VudGVyIj09PXRoaXMuX3RpZXJMYWJlbFBvc2l0aW9uc1tlXT90aGlzLmVuZFRpY2tMZW5ndGgoKTp0aGlzLl90aWVySGVpZ2h0c1tlXSkpOihyLnkxPXRoaXMuaGVpZ2h0KCktbyxyLnkyPXRoaXMuaGVpZ2h0KCktKG8rKCJjZW50ZXIiPT09dGhpcy5fdGllckxhYmVsUG9zaXRpb25zW2VdP3RoaXMuZW5kVGlja0xlbmd0aCgpOnRoaXMuX3RpZXJIZWlnaHRzW2VdKSkpLGlkdC5zZWxlY3QoaS5ub2RlcygpWzBdKS5hdHRycyhyKSxpZHQuc2VsZWN0KGkubm9kZXMoKVtpLnNpemUoKS0xXSkuYXR0cnMociksaWR0LnNlbGVjdChpLm5vZGVzKClbMF0pLmNsYXNzZWQoQW10LkF4aXMuRU5EX1RJQ0tfTUFSS19DTEFTUywhMCksaWR0LnNlbGVjdChpLm5vZGVzKClbaS5zaXplKCktMV0pLmNsYXNzZWQoQW10LkF4aXMuRU5EX1RJQ0tfTUFSS19DTEFTUywhMCksbi5leGl0KCkucmVtb3ZlKCl9LGkucHJvdG90eXBlLl9yZW5kZXJMYWJlbGxlc3NUaWNrTWFya3M9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdGlja01hcmtDb250YWluZXIuc2VsZWN0QWxsKCIuIitBbXQuQXhpcy5USUNLX01BUktfQ0xBU1MpLmRhdGEodCksbj1lLmVudGVyKCkuYXBwZW5kKCJsaW5lIikuY2xhc3NlZChBbXQuQXhpcy5USUNLX01BUktfQ0xBU1MsITApLm1lcmdlKGUpLGk9dGhpcy5fZ2VuZXJhdGVUaWNrTWFya0F0dHJIYXNoKCk7aS55Mj0iYm90dG9tIj09PXRoaXMub3JpZW50YXRpb24oKT90aGlzLnRpY2tMYWJlbFBhZGRpbmcoKTp0aGlzLmhlaWdodCgpLXRoaXMudGlja0xhYmVsUGFkZGluZygpLG4uYXR0cnMoaSksZS5leGl0KCkucmVtb3ZlKCl9LGkucHJvdG90eXBlLl9nZW5lcmF0ZUxhYmVsbGVzc1RpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vc3RQcmVjaXNlQ29uZmlnSW5kZXg8MT9bXTp0aGlzLl9nZXRUaWNrSW50ZXJ2YWxWYWx1ZXModGhpcy5fcG9zc2libGVUaW1lQXhpc0NvbmZpZ3VyYXRpb25zW3RoaXMuX21vc3RQcmVjaXNlQ29uZmlnSW5kZXgtMV1bMF0pfSxpLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fbW9zdFByZWNpc2VDb25maWdJbmRleD10aGlzLl9nZXRNb3N0UHJlY2lzZUNvbmZpZ3VyYXRpb25JbmRleCgpO3ZhciBlPXRoaXMuX3Bvc3NpYmxlVGltZUF4aXNDb25maWd1cmF0aW9uc1t0aGlzLl9tb3N0UHJlY2lzZUNvbmZpZ0luZGV4XTt0aGlzLl9jbGVhblRpZXJzKCksZS5mb3JFYWNoKChmdW5jdGlvbihlLG4pe3JldHVybiB0Ll9yZW5kZXJUaWVyTGFiZWxzKHQuX3RpZXJMYWJlbENvbnRhaW5lcnNbbl0sZSxuKX0pKTtmb3IodmFyIG49ZS5tYXAoKGZ1bmN0aW9uKGUsbil7cmV0dXJuIHQuX2dldFRpY2tWYWx1ZXNGb3JDb25maWd1cmF0aW9uKGUpfSkpLGk9MCxyPTA7cjxNYXRoLm1heChlLmxlbmd0aCwxKTsrK3Ipe3ZhciBvPXRoaXMuX2dlbmVyYXRlQmFzZWxpbmVBdHRySGFzaCgpO28ueTErPSJib3R0b20iPT09dGhpcy5vcmllbnRhdGlvbigpP2k6LWksby55Mj1vLnkxLHRoaXMuX3RpZXJCYXNlbGluZXNbcl0uYXR0cnMobykuc3R5bGUoInZpc2liaWxpdHkiLCJpbmhlcml0IiksaSs9dGhpcy5fdGllckhlaWdodHNbcl19dmFyIGE9W10scz10aGlzLl9zY2FsZS5kb21haW4oKSxsPXRoaXMuX3NjYWxlLnNjYWxlKHNbMV0pLXRoaXMuX3NjYWxlLnNjYWxlKHNbMF0pO2ZvcigxLjUqdGhpcy5fZ2V0SW50ZXJ2YWxMZW5ndGgoZVswXSk+PWwmJihhPXRoaXMuX2dlbmVyYXRlTGFiZWxsZXNzVGlja3MoKSksdGhpcy5fcmVuZGVyTGFiZWxsZXNzVGlja01hcmtzKGEpLHRoaXMuX2hpZGVPdmVyZmxvd2luZ1RpZXJzKCkscj0wO3I8ZS5sZW5ndGg7KytyKXRoaXMuX3JlbmRlclRpY2tNYXJrcyhuW3JdLHIpLHRoaXMuX2hpZGVPdmVybGFwcGluZ0FuZEN1dE9mZkxhYmVscyhyKTtyZXR1cm4gdGhpcy5hbm5vdGF0aW9uc0VuYWJsZWQoKT90aGlzLl9kcmF3QW5ub3RhdGlvbnMoKTp0aGlzLl9yZW1vdmVBbm5vdGF0aW9ucygpLHRoaXN9LGkucHJvdG90eXBlLl9oaWRlT3ZlcmZsb3dpbmdUaWVycz1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10aGlzLmhlaWdodCgpLG49MDt0aGlzLmNvbnRlbnQoKS5zZWxlY3RBbGwoIi4iK2kuVElNRV9BWElTX1RJRVJfQ0xBU1MpLmF0dHIoInZpc2liaWxpdHkiLChmdW5jdGlvbihpLHIpe3JldHVybihuKz10Ll90aWVySGVpZ2h0c1tyXSk8PWU/ImluaGVyaXQiOiJoaWRkZW4ifSkpfSxpLnByb3RvdHlwZS5faGlkZU92ZXJsYXBwaW5nQW5kQ3V0T2ZmTGFiZWxzPWZ1bmN0aW9uKHQpe3ZhciBlLG49dGhpcyxpPXRoaXMuZWxlbWVudCgpLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxyPXRoaXMuX3RpZXJNYXJrQ29udGFpbmVyc1t0XS5zZWxlY3RBbGwoIi4iK0FtdC5BeGlzLlRJQ0tfTUFSS19DTEFTUykuZmlsdGVyKChmdW5jdGlvbih0LGUpe3ZhciBuPWlkdC5zZWxlY3QodGhpcykuc3R5bGUoInZpc2liaWxpdHkiKTtyZXR1cm4idmlzaWJsZSI9PT1ufHwiaW5oZXJpdCI9PT1ufSkpLm5vZGVzKCkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKX0pKTt0aGlzLl90aWVyTGFiZWxDb250YWluZXJzW3RdLnNlbGVjdEFsbCgiLiIrQW10LkF4aXMuVElDS19MQUJFTF9DTEFTUykuZmlsdGVyKChmdW5jdGlvbih0LGUpe3ZhciBuPWlkdC5zZWxlY3QodGhpcykuc3R5bGUoInZpc2liaWxpdHkiKTtyZXR1cm4idmlzaWJsZSI9PT1ufHwiaW5oZXJpdCI9PT1ufSkpLmVhY2goKGZ1bmN0aW9uKHQsbyl7dmFyIGEscz10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGw9aWR0LnNlbGVjdCh0aGlzKSxjPXJbb10sdT1yW28rMV0saD1udWxsIT1lJiZTbXQuRE9NLmNsaWVudFJlY3RzT3ZlcmxhcChzLGUpLGQ9bnVsbCE9YyYmU210LkRPTS5jbGllbnRSZWN0c092ZXJsYXAocyxjKSxwPW51bGwhPXUmJlNtdC5ET00uY2xpZW50UmVjdHNPdmVybGFwKHMsdSk7YT1zLCEoTWF0aC5mbG9vcihpLmxlZnQpPD1NYXRoLmNlaWwoYS5sZWZ0KSYmTWF0aC5mbG9vcihpLnRvcCk8PU1hdGguY2VpbChhLnRvcCkmJk1hdGguZmxvb3IoYS5yaWdodCk8PU1hdGguY2VpbChpLmxlZnQrbi53aWR0aCgpKSYmTWF0aC5mbG9vcihhLmJvdHRvbSk8PU1hdGguY2VpbChpLnRvcCtuLmhlaWdodCgpKSl8fGh8fGR8fHA/bC5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpOihlPXMsbC5zdHlsZSgidmlzaWJpbGl0eSIsImluaGVyaXQiKSl9KSl9LGkucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZT1mdW5jdGlvbigpe3QucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZS5jYWxsKHRoaXMpLHRoaXMuX21lYXN1cmVyLnJlc2V0KCl9LGkuVElNRV9BWElTX1RJRVJfQ0xBU1M9InRpbWUtYXhpcy10aWVyIixpLl9TT1JURURfVElNRV9JTlRFUlZBTF9JTkRFWD0oKG49e30pW2UuVGltZUludGVydmFsLnNlY29uZF09MCxuW2UuVGltZUludGVydmFsLm1pbnV0ZV09MSxuW2UuVGltZUludGVydmFsLmhvdXJdPTIsbltlLlRpbWVJbnRlcnZhbC5kYXldPTMsbltlLlRpbWVJbnRlcnZhbC53ZWVrXT00LG5bZS5UaW1lSW50ZXJ2YWwubW9udGhdPTUsbltlLlRpbWVJbnRlcnZhbC55ZWFyXT02LG4pLGkuX0RFRkFVTFRfVElNRV9BWElTX0NPTkZJR1VSQVRJT05TPWZ1bmN0aW9uKHQpe3ZhciBuPWZ1bmN0aW9uKGUpe3JldHVybiBDbXQudGltZShlLHQpfTtyZXR1cm5bW3tpbnRlcnZhbDplLlRpbWVJbnRlcnZhbC5zZWNvbmQsc3RlcDoxLGZvcm1hdHRlcjpuKCIlSTolTTolUyAlcCIpfSx7aW50ZXJ2YWw6ZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOmUuVGltZUludGVydmFsLnNlY29uZCxzdGVwOjUsZm9ybWF0dGVyOm4oIiVJOiVNOiVTICVwIil9LHtpbnRlcnZhbDplLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6ZS5UaW1lSW50ZXJ2YWwuc2Vjb25kLHN0ZXA6MTAsZm9ybWF0dGVyOm4oIiVJOiVNOiVTICVwIil9LHtpbnRlcnZhbDplLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6ZS5UaW1lSW50ZXJ2YWwuc2Vjb25kLHN0ZXA6MTUsZm9ybWF0dGVyOm4oIiVJOiVNOiVTICVwIil9LHtpbnRlcnZhbDplLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6ZS5UaW1lSW50ZXJ2YWwuc2Vjb25kLHN0ZXA6MzAsZm9ybWF0dGVyOm4oIiVJOiVNOiVTICVwIil9LHtpbnRlcnZhbDplLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6ZS5UaW1lSW50ZXJ2YWwubWludXRlLHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUk6JU0gJXAiKX0se2ludGVydmFsOmUuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCICVlLCAlWSIpfV0sW3tpbnRlcnZhbDplLlRpbWVJbnRlcnZhbC5taW51dGUsc3RlcDo1LGZvcm1hdHRlcjpuKCIlSTolTSAlcCIpfSx7aW50ZXJ2YWw6ZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOmUuVGltZUludGVydmFsLm1pbnV0ZSxzdGVwOjEwLGZvcm1hdHRlcjpuKCIlSTolTSAlcCIpfSx7aW50ZXJ2YWw6ZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOmUuVGltZUludGVydmFsLm1pbnV0ZSxzdGVwOjE1LGZvcm1hdHRlcjpuKCIlSTolTSAlcCIpfSx7aW50ZXJ2YWw6ZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOmUuVGltZUludGVydmFsLm1pbnV0ZSxzdGVwOjMwLGZvcm1hdHRlcjpuKCIlSTolTSAlcCIpfSx7aW50ZXJ2YWw6ZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOmUuVGltZUludGVydmFsLmhvdXIsc3RlcDoxLGZvcm1hdHRlcjpuKCIlSSAlcCIpfSx7aW50ZXJ2YWw6ZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOmUuVGltZUludGVydmFsLmhvdXIsc3RlcDozLGZvcm1hdHRlcjpuKCIlSSAlcCIpfSx7aW50ZXJ2YWw6ZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOmUuVGltZUludGVydmFsLmhvdXIsc3RlcDo2LGZvcm1hdHRlcjpuKCIlSSAlcCIpfSx7aW50ZXJ2YWw6ZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOmUuVGltZUludGVydmFsLmhvdXIsc3RlcDoxMixmb3JtYXR0ZXI6bigiJUkgJXAiKX0se2ludGVydmFsOmUuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCICVlLCAlWSIpfV0sW3tpbnRlcnZhbDplLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlYSAlZSIpfSx7aW50ZXJ2YWw6ZS5UaW1lSW50ZXJ2YWwubW9udGgsc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlWSIpfV0sW3tpbnRlcnZhbDplLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlZSIpfSx7aW50ZXJ2YWw6ZS5UaW1lSW50ZXJ2YWwubW9udGgsc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlWSIpfV0sW3tpbnRlcnZhbDplLlRpbWVJbnRlcnZhbC5tb250aCxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCIil9LHtpbnRlcnZhbDplLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6MSxmb3JtYXR0ZXI6bigiJVkiKX1dLFt7aW50ZXJ2YWw6ZS5UaW1lSW50ZXJ2YWwubW9udGgsc3RlcDoxLGZvcm1hdHRlcjpuKCIlYiIpfSx7aW50ZXJ2YWw6ZS5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjEsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOmUuVGltZUludGVydmFsLm1vbnRoLHN0ZXA6Myxmb3JtYXR0ZXI6bigiJWIiKX0se2ludGVydmFsOmUuVGltZUludGVydmFsLnllYXIsc3RlcDoxLGZvcm1hdHRlcjpuKCIlWSIpfV0sW3tpbnRlcnZhbDplLlRpbWVJbnRlcnZhbC5tb250aCxzdGVwOjYsZm9ybWF0dGVyOm4oIiViIil9LHtpbnRlcnZhbDplLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6MSxmb3JtYXR0ZXI6bigiJVkiKX1dLFt7aW50ZXJ2YWw6ZS5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjEsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOmUuVGltZUludGVydmFsLnllYXIsc3RlcDoxLGZvcm1hdHRlcjpuKCIleSIpfV0sW3tpbnRlcnZhbDplLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6NSxmb3JtYXR0ZXI6bigiJVkiKX1dLFt7aW50ZXJ2YWw6ZS5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjI1LGZvcm1hdHRlcjpuKCIlWSIpfV0sW3tpbnRlcnZhbDplLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6NTAsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOmUuVGltZUludGVydmFsLnllYXIsc3RlcDoxMDAsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOmUuVGltZUludGVydmFsLnllYXIsc3RlcDoyMDAsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOmUuVGltZUludGVydmFsLnllYXIsc3RlcDo1MDAsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOmUuVGltZUludGVydmFsLnllYXIsc3RlcDoxZTMsZm9ybWF0dGVyOm4oIiVZIil9XV19LGkuX0xPTkdfREFURT1uZXcgRGF0ZSg5OTk5LDgsMjksMTIsNTksOTk5OSksaX0pKEFtdC5BeGlzKTtlLlRpbWU9aX0pKSxHbXQ9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxEZnQuX19leHBvcnRTdGFyKGttdCxlKSxEZnQuX19leHBvcnRTdGFyKExtdCxlKSxEZnQuX19leHBvcnRTdGFyKGptdCxlKX0pKSxXbXQ9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvbj17fSx0aGlzLl9ldmVudFRhcmdldD1kb2N1bWVudCx0aGlzLl9ldmVudE5hbWVUb0NhbGxiYWNrU2V0PXt9LHRoaXMuX2Nvbm5lY3RlZD0hMX1yZXR1cm4gdC5wcm90b3R5cGUuX2hhc05vQ2FsbGJhY2tzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PU9iamVjdC5rZXlzKHRoaXMuX2V2ZW50TmFtZVRvQ2FsbGJhY2tTZXQpLGU9MDtlPHQubGVuZ3RoO2UrKylpZigwIT09dGhpcy5fZXZlbnROYW1lVG9DYWxsYmFja1NldFt0W2VdXS5zaXplKXJldHVybiExO3JldHVybiEwfSx0LnByb3RvdHlwZS5fY29ubmVjdD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fY29ubmVjdGVkfHwoT2JqZWN0LmtleXModGhpcy5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvbikuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dC5fZXZlbnRUYXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihlLHQuX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bZV0sIndoZWVsIj09PWU/e3Bhc3NpdmU6ITF9OnZvaWQgMCl9KSksdGhpcy5fY29ubmVjdGVkPSEwKX0sdC5wcm90b3R5cGUuX2Rpc2Nvbm5lY3Q9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX2Nvbm5lY3RlZCYmdGhpcy5faGFzTm9DYWxsYmFja3MoKSYmKE9iamVjdC5rZXlzKHRoaXMuX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb24pLmZvckVhY2goKGZ1bmN0aW9uKGUpe3QuX2V2ZW50VGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZSx0Ll9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW2VdKX0pKSx0aGlzLl9jb25uZWN0ZWQ9ITEpfSx0LnByb3RvdHlwZS5fYWRkQ2FsbGJhY2tGb3JFdmVudD1mdW5jdGlvbih0LGUpe251bGw9PXRoaXMuX2V2ZW50TmFtZVRvQ2FsbGJhY2tTZXRbdF0mJih0aGlzLl9ldmVudE5hbWVUb0NhbGxiYWNrU2V0W3RdPW5ldyBTbXQuQ2FsbGJhY2tTZXQpLHRoaXMuX2V2ZW50TmFtZVRvQ2FsbGJhY2tTZXRbdF0uYWRkKGUpLHRoaXMuX2Nvbm5lY3QoKX0sdC5wcm90b3R5cGUuX3JlbW92ZUNhbGxiYWNrRm9yRXZlbnQ9ZnVuY3Rpb24odCxlKXtudWxsIT10aGlzLl9ldmVudE5hbWVUb0NhbGxiYWNrU2V0W3RdJiZ0aGlzLl9ldmVudE5hbWVUb0NhbGxiYWNrU2V0W3RdLmRlbGV0ZShlKSx0aGlzLl9kaXNjb25uZWN0KCl9LHQucHJvdG90eXBlLl9jYWxsQ2FsbGJhY2tzRm9yRXZlbnQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbi0xXT1hcmd1bWVudHNbbl07dmFyIGk9dGhpcy5fZXZlbnROYW1lVG9DYWxsYmFja1NldFt0XTtudWxsIT1pJiZpLmNhbGxDYWxsYmFja3MuYXBwbHkoaSxlKX0sdH0pKCk7ZS5EaXNwYXRjaGVyPW59KSkscW10PWJlKChmdW5jdGlvbih0LGUpewovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt2YXIgbj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIG4uX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bZS5fS0VZRE9XTl9FVkVOVF9OQU1FXT1mdW5jdGlvbih0KXtyZXR1cm4gbi5fcHJvY2Vzc0tleWRvd24odCl9LG4uX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bZS5fS0VZVVBfRVZFTlRfTkFNRV09ZnVuY3Rpb24odCl7cmV0dXJuIG4uX3Byb2Nlc3NLZXl1cCh0KX0sbn1yZXR1cm4gRGZ0Ll9fZXh0ZW5kcyhlLHQpLGUuZ2V0RGlzcGF0Y2hlcj1mdW5jdGlvbigpe3ZhciB0PWRvY3VtZW50W2UuX0RJU1BBVENIRVJfS0VZXTtyZXR1cm4gbnVsbD09dCYmKHQ9bmV3IGUsZG9jdW1lbnRbZS5fRElTUEFUQ0hFUl9LRVldPXQpLHR9LGUucHJvdG90eXBlLl9wcm9jZXNzS2V5ZG93bj1mdW5jdGlvbih0KXt0aGlzLl9jYWxsQ2FsbGJhY2tzRm9yRXZlbnQoZS5fS0VZRE9XTl9FVkVOVF9OQU1FLHQua2V5Q29kZSx0KX0sZS5wcm90b3R5cGUuX3Byb2Nlc3NLZXl1cD1mdW5jdGlvbih0KXt0aGlzLl9jYWxsQ2FsbGJhY2tzRm9yRXZlbnQoZS5fS0VZVVBfRVZFTlRfTkFNRSx0LmtleUNvZGUsdCl9LGUucHJvdG90eXBlLm9uS2V5RG93bj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudChlLl9LRVlET1dOX0VWRU5UX05BTUUsdCksdGhpc30sZS5wcm90b3R5cGUub2ZmS2V5RG93bj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmVtb3ZlQ2FsbGJhY2tGb3JFdmVudChlLl9LRVlET1dOX0VWRU5UX05BTUUsdCksdGhpc30sZS5wcm90b3R5cGUub25LZXlVcD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudChlLl9LRVlVUF9FVkVOVF9OQU1FLHQpLHRoaXN9LGUucHJvdG90eXBlLm9mZktleVVwPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KGUuX0tFWVVQX0VWRU5UX05BTUUsdCksdGhpc30sZS5fRElTUEFUQ0hFUl9LRVk9Il9fUGxvdHRhYmxlX0Rpc3BhdGNoZXJfS2V5IixlLl9LRVlET1dOX0VWRU5UX05BTUU9ImtleWRvd24iLGUuX0tFWVVQX0VWRU5UX05BTUU9ImtleXVwIixlfSkoV210LkRpc3BhdGNoZXIpO2UuS2V5PW59KSksWW10PWJlKChmdW5jdGlvbih0LGUpewovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobil7dmFyIGk9dC5jYWxsKHRoaXMpfHx0aGlzO2kuX2xhc3RNb3VzZVBvc2l0aW9uPXt4Oi0xLHk6LTF9LGkuX3RyYW5zbGF0b3I9U210LmdldFRyYW5zbGF0b3Iobik7dmFyIHI9ZnVuY3Rpb24odCl7cmV0dXJuIGkuX21lYXN1cmVBbmREaXNwYXRjaChuLHQsZS5fTU9VU0VNT1ZFX0VWRU5UX05BTUUsInBhZ2UiKX07cmV0dXJuIGkuX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bZS5fTU9VU0VPVkVSX0VWRU5UX05BTUVdPXIsaS5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvbltlLl9NT1VTRU1PVkVfRVZFTlRfTkFNRV09cixpLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW2UuX01PVVNFT1VUX0VWRU5UX05BTUVdPXIsaS5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvbltlLl9NT1VTRURPV05fRVZFTlRfTkFNRV09ZnVuY3Rpb24odCl7cmV0dXJuIGkuX21lYXN1cmVBbmREaXNwYXRjaChuLHQsZS5fTU9VU0VET1dOX0VWRU5UX05BTUUpfSxpLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW2UuX01PVVNFVVBfRVZFTlRfTkFNRV09ZnVuY3Rpb24odCl7cmV0dXJuIGkuX21lYXN1cmVBbmREaXNwYXRjaChuLHQsZS5fTU9VU0VVUF9FVkVOVF9OQU1FLCJwYWdlIil9LGkuX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bZS5fV0hFRUxfRVZFTlRfTkFNRV09ZnVuY3Rpb24odCl7cmV0dXJuIGkuX21lYXN1cmVBbmREaXNwYXRjaChuLHQsZS5fV0hFRUxfRVZFTlRfTkFNRSl9LGkuX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bZS5fREJMQ0xJQ0tfRVZFTlRfTkFNRV09ZnVuY3Rpb24odCl7cmV0dXJuIGkuX21lYXN1cmVBbmREaXNwYXRjaChuLHQsZS5fREJMQ0xJQ0tfRVZFTlRfTkFNRSl9LGl9cmV0dXJuIERmdC5fX2V4dGVuZHMoZSx0KSxlLmdldERpc3BhdGNoZXI9ZnVuY3Rpb24odCl7dmFyIG49dC5yb290KCkucm9vdEVsZW1lbnQoKSxpPW5bZS5fRElTUEFUQ0hFUl9LRVldO3JldHVybiBudWxsPT1pJiYoaT1uZXcgZSh0KSxuW2UuX0RJU1BBVENIRVJfS0VZXT1pKSxpfSxlLnByb3RvdHlwZS5vbk1vdXNlTW92ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudChlLl9NT1VTRU1PVkVfRVZFTlRfTkFNRSx0KSx0aGlzfSxlLnByb3RvdHlwZS5vZmZNb3VzZU1vdmU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3JlbW92ZUNhbGxiYWNrRm9yRXZlbnQoZS5fTU9VU0VNT1ZFX0VWRU5UX05BTUUsdCksdGhpc30sZS5wcm90b3R5cGUub25Nb3VzZURvd249ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2FkZENhbGxiYWNrRm9yRXZlbnQoZS5fTU9VU0VET1dOX0VWRU5UX05BTUUsdCksdGhpc30sZS5wcm90b3R5cGUub2ZmTW91c2VEb3duPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KGUuX01PVVNFRE9XTl9FVkVOVF9OQU1FLHQpLHRoaXN9LGUucHJvdG90eXBlLm9uTW91c2VVcD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudChlLl9NT1VTRVVQX0VWRU5UX05BTUUsdCksdGhpc30sZS5wcm90b3R5cGUub2ZmTW91c2VVcD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmVtb3ZlQ2FsbGJhY2tGb3JFdmVudChlLl9NT1VTRVVQX0VWRU5UX05BTUUsdCksdGhpc30sZS5wcm90b3R5cGUub25XaGVlbD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudChlLl9XSEVFTF9FVkVOVF9OQU1FLHQpLHRoaXN9LGUucHJvdG90eXBlLm9mZldoZWVsPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KGUuX1dIRUVMX0VWRU5UX05BTUUsdCksdGhpc30sZS5wcm90b3R5cGUub25EYmxDbGljaz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudChlLl9EQkxDTElDS19FVkVOVF9OQU1FLHQpLHRoaXN9LGUucHJvdG90eXBlLm9mZkRibENsaWNrPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KGUuX0RCTENMSUNLX0VWRU5UX05BTUUsdCksdGhpc30sZS5wcm90b3R5cGUuX21lYXN1cmVBbmREaXNwYXRjaD1mdW5jdGlvbih0LGUsbixpKXtpZih2b2lkIDA9PT1pJiYoaT0iZWxlbWVudCIpLCJwYWdlIiE9PWkmJiJlbGVtZW50IiE9PWkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHNjb3BlICciK2krIicsIG11c3QgYmUgJ2VsZW1lbnQnIG9yICdwYWdlJyIpO2lmKCJwYWdlIj09PWl8fHRoaXMuZXZlbnRJbnNpZGUodCxlKSl7dmFyIHI9dGhpcy5fdHJhbnNsYXRvci5jb21wdXRlUG9zaXRpb24oZS5jbGllbnRYLGUuY2xpZW50WSk7dGhpcy5fbGFzdE1vdXNlUG9zaXRpb249cix0aGlzLl9jYWxsQ2FsbGJhY2tzRm9yRXZlbnQobix0aGlzLmxhc3RNb3VzZVBvc2l0aW9uKCksZSl9fSxlLnByb3RvdHlwZS5ldmVudEluc2lkZT1mdW5jdGlvbih0LGUpe3JldHVybiBTbXQuVHJhbnNsYXRvci5pc0V2ZW50SW5zaWRlKHQsZSl9LGUucHJvdG90eXBlLmxhc3RNb3VzZVBvc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xhc3RNb3VzZVBvc2l0aW9ufSxlLl9ESVNQQVRDSEVSX0tFWT0iX19QbG90dGFibGVfRGlzcGF0Y2hlcl9Nb3VzZSIsZS5fTU9VU0VPVkVSX0VWRU5UX05BTUU9Im1vdXNlb3ZlciIsZS5fTU9VU0VNT1ZFX0VWRU5UX05BTUU9Im1vdXNlbW92ZSIsZS5fTU9VU0VPVVRfRVZFTlRfTkFNRT0ibW91c2VvdXQiLGUuX01PVVNFRE9XTl9FVkVOVF9OQU1FPSJtb3VzZWRvd24iLGUuX01PVVNFVVBfRVZFTlRfTkFNRT0ibW91c2V1cCIsZS5fV0hFRUxfRVZFTlRfTkFNRT0id2hlZWwiLGUuX0RCTENMSUNLX0VWRU5UX05BTUU9ImRibGNsaWNrIixlfSkoV210LkRpc3BhdGNoZXIpO2UuTW91c2U9bn0pKSxYbXQ9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuKXt2YXIgaT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkuX3RyYW5zbGF0b3I9U210LmdldFRyYW5zbGF0b3IobiksaS5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvbltlLl9UT1VDSFNUQVJUX0VWRU5UX05BTUVdPWZ1bmN0aW9uKHQpe3JldHVybiBpLl9tZWFzdXJlQW5kRGlzcGF0Y2gobix0LGUuX1RPVUNIU1RBUlRfRVZFTlRfTkFNRSwicGFnZSIpfSxpLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW2UuX1RPVUNITU9WRV9FVkVOVF9OQU1FXT1mdW5jdGlvbih0KXtyZXR1cm4gaS5fbWVhc3VyZUFuZERpc3BhdGNoKG4sdCxlLl9UT1VDSE1PVkVfRVZFTlRfTkFNRSwicGFnZSIpfSxpLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW2UuX1RPVUNIRU5EX0VWRU5UX05BTUVdPWZ1bmN0aW9uKHQpe3JldHVybiBpLl9tZWFzdXJlQW5kRGlzcGF0Y2gobix0LGUuX1RPVUNIRU5EX0VWRU5UX05BTUUsInBhZ2UiKX0saS5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvbltlLl9UT1VDSENBTkNFTF9FVkVOVF9OQU1FXT1mdW5jdGlvbih0KXtyZXR1cm4gaS5fbWVhc3VyZUFuZERpc3BhdGNoKG4sdCxlLl9UT1VDSENBTkNFTF9FVkVOVF9OQU1FLCJwYWdlIil9LGl9cmV0dXJuIERmdC5fX2V4dGVuZHMoZSx0KSxlLmdldERpc3BhdGNoZXI9ZnVuY3Rpb24odCl7dmFyIG49dC5yb290KCkucm9vdEVsZW1lbnQoKSxpPW5bZS5fRElTUEFUQ0hFUl9LRVldO3JldHVybiBudWxsPT1pJiYoaT1uZXcgZSh0KSxuW2UuX0RJU1BBVENIRVJfS0VZXT1pKSxpfSxlLnByb3RvdHlwZS5vblRvdWNoU3RhcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2FkZENhbGxiYWNrRm9yRXZlbnQoZS5fVE9VQ0hTVEFSVF9FVkVOVF9OQU1FLHQpLHRoaXN9LGUucHJvdG90eXBlLm9mZlRvdWNoU3RhcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3JlbW92ZUNhbGxiYWNrRm9yRXZlbnQoZS5fVE9VQ0hTVEFSVF9FVkVOVF9OQU1FLHQpLHRoaXN9LGUucHJvdG90eXBlLm9uVG91Y2hNb3ZlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9hZGRDYWxsYmFja0ZvckV2ZW50KGUuX1RPVUNITU9WRV9FVkVOVF9OQU1FLHQpLHRoaXN9LGUucHJvdG90eXBlLm9mZlRvdWNoTW92ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmVtb3ZlQ2FsbGJhY2tGb3JFdmVudChlLl9UT1VDSE1PVkVfRVZFTlRfTkFNRSx0KSx0aGlzfSxlLnByb3RvdHlwZS5vblRvdWNoRW5kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9hZGRDYWxsYmFja0ZvckV2ZW50KGUuX1RPVUNIRU5EX0VWRU5UX05BTUUsdCksdGhpc30sZS5wcm90b3R5cGUub2ZmVG91Y2hFbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3JlbW92ZUNhbGxiYWNrRm9yRXZlbnQoZS5fVE9VQ0hFTkRfRVZFTlRfTkFNRSx0KSx0aGlzfSxlLnByb3RvdHlwZS5vblRvdWNoQ2FuY2VsPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9hZGRDYWxsYmFja0ZvckV2ZW50KGUuX1RPVUNIQ0FOQ0VMX0VWRU5UX05BTUUsdCksdGhpc30sZS5wcm90b3R5cGUub2ZmVG91Y2hDYW5jZWw9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3JlbW92ZUNhbGxiYWNrRm9yRXZlbnQoZS5fVE9VQ0hDQU5DRUxfRVZFTlRfTkFNRSx0KSx0aGlzfSxlLnByb3RvdHlwZS5fbWVhc3VyZUFuZERpc3BhdGNoPWZ1bmN0aW9uKHQsZSxuLGkpe2lmKHZvaWQgMD09PWkmJihpPSJlbGVtZW50IiksInBhZ2UiIT09aSYmImVsZW1lbnQiIT09aSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc2NvcGUgJyIraSsiJywgbXVzdCBiZSAnZWxlbWVudCcgb3IgJ3BhZ2UnIik7aWYoImVsZW1lbnQiIT09aXx8dGhpcy5ldmVudEluc2lkZSh0LGUpKXtmb3IodmFyIHI9ZS5jaGFuZ2VkVG91Y2hlcyxvPXt9LGE9W10scz0wO3M8ci5sZW5ndGg7cysrKXt2YXIgbD1yW3NdLGM9bC5pZGVudGlmaWVyLHU9dGhpcy5fdHJhbnNsYXRvci5jb21wdXRlUG9zaXRpb24obC5jbGllbnRYLGwuY2xpZW50WSk7bnVsbCE9dSYmKG9bY109dSxhLnB1c2goYykpfWEubGVuZ3RoPjAmJnRoaXMuX2NhbGxDYWxsYmFja3NGb3JFdmVudChuLGEsbyxlKX19LGUucHJvdG90eXBlLmV2ZW50SW5zaWRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIFNtdC5UcmFuc2xhdG9yLmlzRXZlbnRJbnNpZGUodCxlKX0sZS5fRElTUEFUQ0hFUl9LRVk9Il9fUGxvdHRhYmxlX0Rpc3BhdGNoZXJfVG91Y2giLGUuX1RPVUNIU1RBUlRfRVZFTlRfTkFNRT0idG91Y2hzdGFydCIsZS5fVE9VQ0hNT1ZFX0VWRU5UX05BTUU9InRvdWNobW92ZSIsZS5fVE9VQ0hFTkRfRVZFTlRfTkFNRT0idG91Y2hlbmQiLGUuX1RPVUNIQ0FOQ0VMX0VWRU5UX05BTUU9InRvdWNoY2FuY2VsIixlfSkoV210LkRpc3BhdGNoZXIpO2UuVG91Y2g9bn0pKSwkbXQ9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxEZnQuX19leHBvcnRTdGFyKHFtdCxlKSxEZnQuX19leHBvcnRTdGFyKFltdCxlKSxEZnQuX19leHBvcnRTdGFyKFhtdCxlKX0pKSxLbXQ9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dmFyIHQ9dGhpczt0aGlzLl9hbmNob3JDYWxsYmFjaz1mdW5jdGlvbihlKXtyZXR1cm4gdC5fYW5jaG9yKGUpfSx0aGlzLl9lbmFibGVkPSEwfXJldHVybiB0LnByb3RvdHlwZS5hdHRhY2hUbz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZGlzY29ubmVjdCgpLHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG89dCx0aGlzLl9jb25uZWN0KCksdGhpc30sdC5wcm90b3R5cGUuZGV0YWNoRnJvbT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kZXRhY2goKX0sdC5wcm90b3R5cGUuZGV0YWNoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Rpc2Nvbm5lY3QoKSx0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvPW51bGwsdGhpc30sdC5wcm90b3R5cGUuZW5hYmxlZD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9lbmFibGVkOih0aGlzLl9lbmFibGVkPXQsdGhpcy5fZW5hYmxlZD90aGlzLl9jb25uZWN0KCk6dGhpcy5fZGlzY29ubmVjdCgpLHRoaXMpfSx0LnByb3RvdHlwZS5fYW5jaG9yPWZ1bmN0aW9uKHQpe3RoaXMuX2lzQW5jaG9yZWQ9ITB9LHQucHJvdG90eXBlLl91bmFuY2hvcj1mdW5jdGlvbigpe3RoaXMuX2lzQW5jaG9yZWQ9ITF9LHQucHJvdG90eXBlLl90cmFuc2xhdGVUb0NvbXBvbmVudFNwYWNlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8ub3JpZ2luVG9Sb290KCk7cmV0dXJue3g6dC54LWUueCx5OnQueS1lLnl9fSx0LnByb3RvdHlwZS5faXNJbnNpZGVDb21wb25lbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIDA8PXQueCYmMDw9dC55JiZ0Lng8PXRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8ud2lkdGgoKSYmdC55PD10aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvLmhlaWdodCgpfSx0LnByb3RvdHlwZS5fY29ubmVjdD1mdW5jdGlvbigpe3RoaXMuZW5hYmxlZCgpJiZudWxsIT10aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvJiYhdGhpcy5faXNBbmNob3JlZCYmdGhpcy5fY29tcG9uZW50QXR0YWNoZWRUby5vbkFuY2hvcih0aGlzLl9hbmNob3JDYWxsYmFjayl9LHQucHJvdG90eXBlLl9kaXNjb25uZWN0PWZ1bmN0aW9uKCl7dGhpcy5faXNBbmNob3JlZCYmdGhpcy5fdW5hbmNob3IoKSxudWxsIT10aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvJiZ0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvLm9mZkFuY2hvcih0aGlzLl9hbmNob3JDYWxsYmFjayl9LHR9KSgpO2UuSW50ZXJhY3Rpb249bn0pKSxabXQ9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBlPW51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztyZXR1cm4gZS5fY2xpY2tlZERvd249ITEsZS5fZG91YmxlQ2xpY2tpbmc9ITEsZS5fb25DbGlja0NhbGxiYWNrcz1uZXcgU210LkNhbGxiYWNrU2V0LGUuX29uRG91YmxlQ2xpY2tDYWxsYmFja3M9bmV3IFNtdC5DYWxsYmFja1NldCxlLl9tb3VzZURvd25DYWxsYmFjaz1mdW5jdGlvbih0LG4pe3JldHVybiBlLl9oYW5kbGVDbGlja0Rvd24odCxuKX0sZS5fbW91c2VVcENhbGxiYWNrPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGUuX2hhbmRsZUNsaWNrVXAodCxuKX0sZS5fZGJsQ2xpY2tDYWxsYmFjaz1mdW5jdGlvbih0LG4pe3JldHVybiBlLl9oYW5kbGVEYmxDbGljayh0LG4pfSxlLl90b3VjaFN0YXJ0Q2FsbGJhY2s9ZnVuY3Rpb24odCxuLGkpe3JldHVybiBlLl9oYW5kbGVDbGlja0Rvd24oblt0WzBdXSxpKX0sZS5fdG91Y2hFbmRDYWxsYmFjaz1mdW5jdGlvbih0LG4saSl7cmV0dXJuIGUuX2hhbmRsZUNsaWNrVXAoblt0WzBdXSxpKX0sZS5fdG91Y2hDYW5jZWxDYWxsYmFjaz1mdW5jdGlvbih0LG4pe3JldHVybiBlLl9jbGlja2VkRG93bj0hMX0sZX1yZXR1cm4gRGZ0Ll9fZXh0ZW5kcyhlLHQpLGUucHJvdG90eXBlLl9hbmNob3I9ZnVuY3Rpb24oZSl7dC5wcm90b3R5cGUuX2FuY2hvci5jYWxsKHRoaXMsZSksdGhpcy5fbW91c2VEaXNwYXRjaGVyPSRtdC5Nb3VzZS5nZXREaXNwYXRjaGVyKGUpLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vbk1vdXNlRG93bih0aGlzLl9tb3VzZURvd25DYWxsYmFjayksdGhpcy5fbW91c2VEaXNwYXRjaGVyLm9uTW91c2VVcCh0aGlzLl9tb3VzZVVwQ2FsbGJhY2spLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vbkRibENsaWNrKHRoaXMuX2RibENsaWNrQ2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlcj0kbXQuVG91Y2guZ2V0RGlzcGF0Y2hlcihlKSx0aGlzLl90b3VjaERpc3BhdGNoZXIub25Ub3VjaFN0YXJ0KHRoaXMuX3RvdWNoU3RhcnRDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hFbmQodGhpcy5fdG91Y2hFbmRDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hDYW5jZWwodGhpcy5fdG91Y2hDYW5jZWxDYWxsYmFjayl9LGUucHJvdG90eXBlLl91bmFuY2hvcj1mdW5jdGlvbigpe3QucHJvdG90eXBlLl91bmFuY2hvci5jYWxsKHRoaXMpLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZNb3VzZURvd24odGhpcy5fbW91c2VEb3duQ2FsbGJhY2spLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZNb3VzZVVwKHRoaXMuX21vdXNlVXBDYWxsYmFjayksdGhpcy5fbW91c2VEaXNwYXRjaGVyLm9mZkRibENsaWNrKHRoaXMuX2RibENsaWNrQ2FsbGJhY2spLHRoaXMuX21vdXNlRGlzcGF0Y2hlcj1udWxsLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vZmZUb3VjaFN0YXJ0KHRoaXMuX3RvdWNoU3RhcnRDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9mZlRvdWNoRW5kKHRoaXMuX3RvdWNoRW5kQ2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vZmZUb3VjaENhbmNlbCh0aGlzLl90b3VjaENhbmNlbENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXI9bnVsbH0sZS5wcm90b3R5cGUuX2hhbmRsZUNsaWNrRG93bj1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2UodCk7dGhpcy5faXNJbnNpZGVDb21wb25lbnQobikmJih0aGlzLl9jbGlja2VkRG93bj0hMCx0aGlzLl9jbGlja2VkUG9pbnQ9bil9LGUucHJvdG90eXBlLl9oYW5kbGVDbGlja1VwPWZ1bmN0aW9uKHQsbil7dmFyIGk9dGhpcyxyPXRoaXMuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2UodCk7dGhpcy5fY2xpY2tlZERvd24mJmUuX3BvaW50c0VxdWFsKHIsdGhpcy5fY2xpY2tlZFBvaW50KSYmc2V0VGltZW91dCgoZnVuY3Rpb24oKXtpLl9kb3VibGVDbGlja2luZ3x8aS5fb25DbGlja0NhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKHIsbil9KSwwKSx0aGlzLl9jbGlja2VkRG93bj0hMX0sZS5wcm90b3R5cGUuX2hhbmRsZURibENsaWNrPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxpPXRoaXMuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2UodCk7dGhpcy5fZG91YmxlQ2xpY2tpbmc9ITAsdGhpcy5fb25Eb3VibGVDbGlja0NhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKGksZSksc2V0VGltZW91dCgoZnVuY3Rpb24oKXtyZXR1cm4gbi5fZG91YmxlQ2xpY2tpbmc9ITF9KSwwKX0sZS5fcG9pbnRzRXF1YWw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC54PT09ZS54JiZ0Lnk9PT1lLnl9LGUucHJvdG90eXBlLm9uQ2xpY2s9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX29uQ2xpY2tDYWxsYmFja3MuYWRkKHQpLHRoaXN9LGUucHJvdG90eXBlLm9mZkNsaWNrPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9vbkNsaWNrQ2FsbGJhY2tzLmRlbGV0ZSh0KSx0aGlzfSxlLnByb3RvdHlwZS5vbkRvdWJsZUNsaWNrPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9vbkRvdWJsZUNsaWNrQ2FsbGJhY2tzLmFkZCh0KSx0aGlzfSxlLnByb3RvdHlwZS5vZmZEb3VibGVDbGljaz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fb25Eb3VibGVDbGlja0NhbGxiYWNrcy5kZWxldGUodCksdGhpc30sZX0pKEttdC5JbnRlcmFjdGlvbik7ZS5DbGljaz1ufSkpLEptdD1iZSgoZnVuY3Rpb24odCxlKXsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4pe3ZhciBpPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gaS5fZHJhZ2dpbmc9ITEsaS5fY29uc3RyYWluZWRUb0NvbXBvbmVudD0hMCxpLl9tb3VzZUZpbHRlcj1lLl9ERUZBVUxUX01PVVNFX0ZJTFRFUixpLl9kcmFnU3RhcnRDYWxsYmFja3M9bmV3IFNtdC5DYWxsYmFja1NldCxpLl9kcmFnQ2FsbGJhY2tzPW5ldyBTbXQuQ2FsbGJhY2tTZXQsaS5fZHJhZ0VuZENhbGxiYWNrcz1uZXcgU210LkNhbGxiYWNrU2V0LGkuX21vdXNlRG93bkNhbGxiYWNrPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGkuX3N0YXJ0RHJhZyh0LGUpfSxpLl9tb3VzZU1vdmVDYWxsYmFjaz1mdW5jdGlvbih0LGUpe3JldHVybiBpLl9kb0RyYWcodCxlKX0saS5fbW91c2VVcENhbGxiYWNrPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGkuX2VuZERyYWcodCxlKX0saS5fdG91Y2hTdGFydENhbGxiYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gaS5fc3RhcnREcmFnKGVbdFswXV0sbil9LGkuX3RvdWNoTW92ZUNhbGxiYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gaS5fZG9EcmFnKGVbdFswXV0sbil9LGkuX3RvdWNoRW5kQ2FsbGJhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBpLl9lbmREcmFnKGVbdFswXV0sbil9LGkuX21vdXNlQnV0dG9uPXZvaWQgMCE9PW4/bjowLGl9cmV0dXJuIERmdC5fX2V4dGVuZHMoZSx0KSxlLnByb3RvdHlwZS5fYW5jaG9yPWZ1bmN0aW9uKGUpe3QucHJvdG90eXBlLl9hbmNob3IuY2FsbCh0aGlzLGUpLHRoaXMuX21vdXNlRGlzcGF0Y2hlcj0kbXQuTW91c2UuZ2V0RGlzcGF0Y2hlcih0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub25Nb3VzZURvd24odGhpcy5fbW91c2VEb3duQ2FsbGJhY2spLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vbk1vdXNlTW92ZSh0aGlzLl9tb3VzZU1vdmVDYWxsYmFjayksdGhpcy5fbW91c2VEaXNwYXRjaGVyLm9uTW91c2VVcCh0aGlzLl9tb3VzZVVwQ2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlcj0kbXQuVG91Y2guZ2V0RGlzcGF0Y2hlcih0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvKSx0aGlzLl90b3VjaERpc3BhdGNoZXIub25Ub3VjaFN0YXJ0KHRoaXMuX3RvdWNoU3RhcnRDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hNb3ZlKHRoaXMuX3RvdWNoTW92ZUNhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXIub25Ub3VjaEVuZCh0aGlzLl90b3VjaEVuZENhbGxiYWNrKX0sZS5wcm90b3R5cGUuX3VuYW5jaG9yPWZ1bmN0aW9uKCl7dC5wcm90b3R5cGUuX3VuYW5jaG9yLmNhbGwodGhpcyksdGhpcy5fbW91c2VEaXNwYXRjaGVyLm9mZk1vdXNlRG93bih0aGlzLl9tb3VzZURvd25DYWxsYmFjayksdGhpcy5fbW91c2VEaXNwYXRjaGVyLm9mZk1vdXNlTW92ZSh0aGlzLl9tb3VzZU1vdmVDYWxsYmFjayksdGhpcy5fbW91c2VEaXNwYXRjaGVyLm9mZk1vdXNlVXAodGhpcy5fbW91c2VVcENhbGxiYWNrKSx0aGlzLl9tb3VzZURpc3BhdGNoZXI9bnVsbCx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vZmZUb3VjaE1vdmUodGhpcy5fdG91Y2hNb3ZlQ2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vZmZUb3VjaEVuZCh0aGlzLl90b3VjaEVuZENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXI9bnVsbH0sZS5wcm90b3R5cGUuX3RyYW5zbGF0ZUFuZENvbnN0cmFpbj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl90cmFuc2xhdGVUb0NvbXBvbmVudFNwYWNlKHQpO3JldHVybiB0aGlzLl9jb25zdHJhaW5lZFRvQ29tcG9uZW50P3t4OlNtdC5NYXRoLmNsYW1wKGUueCwwLHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8ud2lkdGgoKSkseTpTbXQuTWF0aC5jbGFtcChlLnksMCx0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvLmhlaWdodCgpKX06ZX0sZS5wcm90b3R5cGUuX3N0YXJ0RHJhZz1mdW5jdGlvbih0LGUpe2lmKCEoZSBpbnN0YW5jZW9mIE1vdXNlRXZlbnQpfHx0aGlzLl9tb3VzZUZpbHRlcihlKSl7dmFyIG49dGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZSh0KTt0aGlzLl9pc0luc2lkZUNvbXBvbmVudChuKSYmKGUucHJldmVudERlZmF1bHQoKSx0aGlzLl9kcmFnZ2luZz0hMCx0aGlzLl9kcmFnT3JpZ2luPW4sdGhpcy5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmNhbGxDYWxsYmFja3ModGhpcy5fZHJhZ09yaWdpbikpfX0sZS5wcm90b3R5cGUuX2RvRHJhZz1mdW5jdGlvbih0LGUpe3RoaXMuX2RyYWdnaW5nJiZ0aGlzLl9kcmFnQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3ModGhpcy5fZHJhZ09yaWdpbix0aGlzLl90cmFuc2xhdGVBbmRDb25zdHJhaW4odCkpfSxlLnByb3RvdHlwZS5fZW5kRHJhZz1mdW5jdGlvbih0LGUpe2UgaW5zdGFuY2VvZiBNb3VzZUV2ZW50JiZlLmJ1dHRvbiE9PXRoaXMuX21vdXNlQnV0dG9ufHx0aGlzLl9kcmFnZ2luZyYmKHRoaXMuX2RyYWdnaW5nPSExLHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuY2FsbENhbGxiYWNrcyh0aGlzLl9kcmFnT3JpZ2luLHRoaXMuX3RyYW5zbGF0ZUFuZENvbnN0cmFpbih0KSkpfSxlLnByb3RvdHlwZS5jb25zdHJhaW5lZFRvQ29tcG9uZW50PWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX2NvbnN0cmFpbmVkVG9Db21wb25lbnQ6KHRoaXMuX2NvbnN0cmFpbmVkVG9Db21wb25lbnQ9dCx0aGlzKX0sZS5wcm90b3R5cGUubW91c2VGaWx0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMuX21vdXNlRmlsdGVyOih0aGlzLl9tb3VzZUZpbHRlcj10LHRoaXMpfSxlLnByb3RvdHlwZS5vbkRyYWdTdGFydD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmFkZCh0KSx0aGlzfSxlLnByb3RvdHlwZS5vZmZEcmFnU3RhcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2RyYWdTdGFydENhbGxiYWNrcy5kZWxldGUodCksdGhpc30sZS5wcm90b3R5cGUub25EcmFnPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9kcmFnQ2FsbGJhY2tzLmFkZCh0KSx0aGlzfSxlLnByb3RvdHlwZS5vZmZEcmFnPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9kcmFnQ2FsbGJhY2tzLmRlbGV0ZSh0KSx0aGlzfSxlLnByb3RvdHlwZS5vbkRyYWdFbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuYWRkKHQpLHRoaXN9LGUucHJvdG90eXBlLm9mZkRyYWdFbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuZGVsZXRlKHQpLHRoaXN9LGUuX0RFRkFVTFRfTU9VU0VfRklMVEVSPWZ1bmN0aW9uKHQpe3JldHVybiAwPT09dC5idXR0b259LGV9KShLbXQuSW50ZXJhY3Rpb24pO2UuRHJhZz1ufSkpLFFtdD1iZSgoZnVuY3Rpb24odCxlKXsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dmFyIGU9bnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiBlLl9rZXlQcmVzc0NhbGxiYWNrcz17fSxlLl9rZXlSZWxlYXNlQ2FsbGJhY2tzPXt9LGUuX21vdXNlTW92ZUNhbGxiYWNrPWZ1bmN0aW9uKHQpe3JldHVybiExfSxlLl9kb3duZWRLZXlzPW5ldyBTbXQuU2V0LGUuX2tleURvd25DYWxsYmFjaz1mdW5jdGlvbih0LG4pe3JldHVybiBlLl9oYW5kbGVLZXlEb3duRXZlbnQodCxuKX0sZS5fa2V5VXBDYWxsYmFjaz1mdW5jdGlvbih0KXtyZXR1cm4gZS5faGFuZGxlS2V5VXBFdmVudCh0KX0sZX1yZXR1cm4gRGZ0Ll9fZXh0ZW5kcyhlLHQpLGUucHJvdG90eXBlLl9hbmNob3I9ZnVuY3Rpb24oZSl7dC5wcm90b3R5cGUuX2FuY2hvci5jYWxsKHRoaXMsZSksdGhpcy5fcG9zaXRpb25EaXNwYXRjaGVyPSRtdC5Nb3VzZS5nZXREaXNwYXRjaGVyKHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8pLHRoaXMuX3Bvc2l0aW9uRGlzcGF0Y2hlci5vbk1vdXNlTW92ZSh0aGlzLl9tb3VzZU1vdmVDYWxsYmFjayksdGhpcy5fa2V5RGlzcGF0Y2hlcj0kbXQuS2V5LmdldERpc3BhdGNoZXIoKSx0aGlzLl9rZXlEaXNwYXRjaGVyLm9uS2V5RG93bih0aGlzLl9rZXlEb3duQ2FsbGJhY2spLHRoaXMuX2tleURpc3BhdGNoZXIub25LZXlVcCh0aGlzLl9rZXlVcENhbGxiYWNrKX0sZS5wcm90b3R5cGUuX3VuYW5jaG9yPWZ1bmN0aW9uKCl7dC5wcm90b3R5cGUuX3VuYW5jaG9yLmNhbGwodGhpcyksdGhpcy5fcG9zaXRpb25EaXNwYXRjaGVyLm9mZk1vdXNlTW92ZSh0aGlzLl9tb3VzZU1vdmVDYWxsYmFjayksdGhpcy5fcG9zaXRpb25EaXNwYXRjaGVyPW51bGwsdGhpcy5fa2V5RGlzcGF0Y2hlci5vZmZLZXlEb3duKHRoaXMuX2tleURvd25DYWxsYmFjayksdGhpcy5fa2V5RGlzcGF0Y2hlci5vZmZLZXlVcCh0aGlzLl9rZXlVcENhbGxiYWNrKSx0aGlzLl9rZXlEaXNwYXRjaGVyPW51bGx9LGUucHJvdG90eXBlLl9oYW5kbGVLZXlEb3duRXZlbnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl90cmFuc2xhdGVUb0NvbXBvbmVudFNwYWNlKHRoaXMuX3Bvc2l0aW9uRGlzcGF0Y2hlci5sYXN0TW91c2VQb3NpdGlvbigpKTt0aGlzLl9pc0luc2lkZUNvbXBvbmVudChuKSYmIWUucmVwZWF0JiYodGhpcy5fa2V5UHJlc3NDYWxsYmFja3NbdF0mJnRoaXMuX2tleVByZXNzQ2FsbGJhY2tzW3RdLmNhbGxDYWxsYmFja3ModCksdGhpcy5fZG93bmVkS2V5cy5hZGQodCkpfSxlLnByb3RvdHlwZS5faGFuZGxlS2V5VXBFdmVudD1mdW5jdGlvbih0KXt0aGlzLl9kb3duZWRLZXlzLmhhcyh0KSYmdGhpcy5fa2V5UmVsZWFzZUNhbGxiYWNrc1t0XSYmdGhpcy5fa2V5UmVsZWFzZUNhbGxiYWNrc1t0XS5jYWxsQ2FsbGJhY2tzKHQpLHRoaXMuX2Rvd25lZEtleXMuZGVsZXRlKHQpfSxlLnByb3RvdHlwZS5vbktleVByZXNzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2tleVByZXNzQ2FsbGJhY2tzW3RdfHwodGhpcy5fa2V5UHJlc3NDYWxsYmFja3NbdF09bmV3IFNtdC5DYWxsYmFja1NldCksdGhpcy5fa2V5UHJlc3NDYWxsYmFja3NbdF0uYWRkKGUpLHRoaXN9LGUucHJvdG90eXBlLm9mZktleVByZXNzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2tleVByZXNzQ2FsbGJhY2tzW3RdLmRlbGV0ZShlKSwwPT09dGhpcy5fa2V5UHJlc3NDYWxsYmFja3NbdF0uc2l6ZSYmZGVsZXRlIHRoaXMuX2tleVByZXNzQ2FsbGJhY2tzW3RdLHRoaXN9LGUucHJvdG90eXBlLm9uS2V5UmVsZWFzZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9rZXlSZWxlYXNlQ2FsbGJhY2tzW3RdfHwodGhpcy5fa2V5UmVsZWFzZUNhbGxiYWNrc1t0XT1uZXcgU210LkNhbGxiYWNrU2V0KSx0aGlzLl9rZXlSZWxlYXNlQ2FsbGJhY2tzW3RdLmFkZChlKSx0aGlzfSxlLnByb3RvdHlwZS5vZmZLZXlSZWxlYXNlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2tleVJlbGVhc2VDYWxsYmFja3NbdF0uZGVsZXRlKGUpLDA9PT10aGlzLl9rZXlSZWxlYXNlQ2FsbGJhY2tzW3RdLnNpemUmJmRlbGV0ZSB0aGlzLl9rZXlSZWxlYXNlQ2FsbGJhY2tzW3RdLHRoaXN9LGV9KShLbXQuSW50ZXJhY3Rpb24pO2UuS2V5PW59KSksdGd0PWJlKChmdW5jdGlvbih0LGUpewovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgaT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkuX3doZWVsRmlsdGVyPWZ1bmN0aW9uKHQpe3JldHVybiEwfSxpLl93aGVlbENhbGxiYWNrPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGkuX2hhbmRsZVdoZWVsRXZlbnQodCxlKX0saS5fdG91Y2hTdGFydENhbGxiYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gaS5faGFuZGxlVG91Y2hTdGFydCh0LGUsbil9LGkuX3RvdWNoTW92ZUNhbGxiYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gaS5faGFuZGxlUGluY2godCxlLG4pfSxpLl90b3VjaEVuZENhbGxiYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gaS5faGFuZGxlVG91Y2hFbmQodCxlLG4pfSxpLl90b3VjaENhbmNlbENhbGxiYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gaS5faGFuZGxlVG91Y2hFbmQodCxlLG4pfSxpLl9wYW5FbmRDYWxsYmFja3M9bmV3IFNtdC5DYWxsYmFja1NldCxpLl96b29tRW5kQ2FsbGJhY2tzPW5ldyBTbXQuQ2FsbGJhY2tTZXQsaS5fcGFuWm9vbVVwZGF0ZUNhbGxiYWNrcz1uZXcgU210LkNhbGxiYWNrU2V0LGkuX3hTY2FsZXM9bmV3IFNtdC5TZXQsaS5feVNjYWxlcz1uZXcgU210LlNldCxpLl9kcmFnSW50ZXJhY3Rpb249bmV3IG5ndC5EcmFnLGkuX3NldHVwRHJhZ0ludGVyYWN0aW9uKCksaS5fdG91Y2hJZHM9aWR0Lm1hcCgpLGkuX21pbkRvbWFpbkV4dGVudHM9bmV3IFNtdC5NYXAsaS5fbWF4RG9tYWluRXh0ZW50cz1uZXcgU210Lk1hcCxpLl9taW5Eb21haW5WYWx1ZXM9bmV3IFNtdC5NYXAsaS5fbWF4RG9tYWluVmFsdWVzPW5ldyBTbXQuTWFwLG51bGwhPWUmJmkuYWRkWFNjYWxlKGUpLG51bGwhPW4mJmkuYWRkWVNjYWxlKG4pLGl9cmV0dXJuIERmdC5fX2V4dGVuZHMoZSx0KSxlLnByb3RvdHlwZS5kcmFnSW50ZXJhY3Rpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZHJhZ0ludGVyYWN0aW9ufSxlLnByb3RvdHlwZS53aGVlbEZpbHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGg/dGhpcy5fd2hlZWxGaWx0ZXI6KHRoaXMuX3doZWVsRmlsdGVyPXQsdGhpcyl9LGUucHJvdG90eXBlLnBhbj1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMueFNjYWxlcygpLmZvckVhY2goKGZ1bmN0aW9uKG4pe24ucGFuKGUuX2NvbnN0cmFpbmVkVHJhbnNsYXRpb24obix0LngpKX0pKSx0aGlzLnlTY2FsZXMoKS5mb3JFYWNoKChmdW5jdGlvbihuKXtuLnBhbihlLl9jb25zdHJhaW5lZFRyYW5zbGF0aW9uKG4sdC55KSl9KSksdGhpcy5fcGFuWm9vbVVwZGF0ZUNhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKCl9LGUucHJvdG90eXBlLnpvb209ZnVuY3Rpb24odCxlLG4pe3ZhciBpLHIsbz10aGlzO3JldHVybiB2b2lkIDA9PT1uJiYobj0hMCksbnVsbCE9ZSYmKGk9ZS54LHI9ZS55LG4mJih0aGlzLnhTY2FsZXMoKS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgbj1vLl9jb25zdHJhaW5lZFpvb20oZSx0LGkpO2k9bi5jZW50ZXJQb2ludCx0PW4uem9vbUFtb3VudH0pKSx0aGlzLnlTY2FsZXMoKS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgbj1vLl9jb25zdHJhaW5lZFpvb20oZSx0LHIpO3I9bi5jZW50ZXJQb2ludCx0PW4uem9vbUFtb3VudH0pKSkpLHRoaXMueFNjYWxlcygpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciBuPWUucmFuZ2UoKTtlLnpvb20odCxudWxsPT1pPyhuWzFdK25bMF0pLzI6aSl9KSksdGhpcy55U2NhbGVzKCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIG49ZS5yYW5nZSgpO2Uuem9vbSh0LG51bGw9PXI/KG5bMV0rblswXSkvMjpyKX0pKSx0aGlzLl9wYW5ab29tVXBkYXRlQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MoKSx7em9vbUFtb3VudDp0LGNlbnRlclZhbHVlOntjZW50ZXJYOmksY2VudGVyWTpyfX19LGUucHJvdG90eXBlLl9hbmNob3I9ZnVuY3Rpb24oZSl7dC5wcm90b3R5cGUuX2FuY2hvci5jYWxsKHRoaXMsZSksdGhpcy5fZHJhZ0ludGVyYWN0aW9uLmF0dGFjaFRvKGUpLHRoaXMuX21vdXNlRGlzcGF0Y2hlcj0kbXQuTW91c2UuZ2V0RGlzcGF0Y2hlcih0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub25XaGVlbCh0aGlzLl93aGVlbENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXI9JG10LlRvdWNoLmdldERpc3BhdGNoZXIodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoTW92ZSh0aGlzLl90b3VjaE1vdmVDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hFbmQodGhpcy5fdG91Y2hFbmRDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hDYW5jZWwodGhpcy5fdG91Y2hDYW5jZWxDYWxsYmFjayl9LGUucHJvdG90eXBlLl91bmFuY2hvcj1mdW5jdGlvbigpe3QucHJvdG90eXBlLl91bmFuY2hvci5jYWxsKHRoaXMpLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZXaGVlbCh0aGlzLl93aGVlbENhbGxiYWNrKSx0aGlzLl9tb3VzZURpc3BhdGNoZXI9bnVsbCx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vZmZUb3VjaE1vdmUodGhpcy5fdG91Y2hNb3ZlQ2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vZmZUb3VjaEVuZCh0aGlzLl90b3VjaEVuZENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hDYW5jZWwodGhpcy5fdG91Y2hDYW5jZWxDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyPW51bGwsdGhpcy5fZHJhZ0ludGVyYWN0aW9uLmRldGFjaCgpfSxlLnByb3RvdHlwZS5faGFuZGxlVG91Y2hTdGFydD1mdW5jdGlvbih0LGUsbil7Zm9yKHZhciBpPTA7aTx0Lmxlbmd0aCYmdGhpcy5fdG91Y2hJZHMuc2l6ZSgpPDI7aSsrKXt2YXIgcj10W2ldO3RoaXMuX3RvdWNoSWRzLnNldChyLnRvU3RyaW5nKCksdGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShlW3JdKSl9fSxlLnByb3RvdHlwZS5faGFuZGxlUGluY2g9ZnVuY3Rpb24odCxuLGkpe3ZhciByPXRoaXM7aWYoISh0aGlzLl90b3VjaElkcy5zaXplKCk8Mikpe3ZhciBvPXRoaXMuX3RvdWNoSWRzLnZhbHVlcygpO2lmKHRoaXMuX2lzSW5zaWRlQ29tcG9uZW50KHRoaXMuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2Uob1swXSkpJiZ0aGlzLl9pc0luc2lkZUNvbXBvbmVudCh0aGlzLl90cmFuc2xhdGVUb0NvbXBvbmVudFNwYWNlKG9bMV0pKSl7dmFyIGE9ZS5fcG9pbnREaXN0YW5jZShvWzBdLG9bMV0pO2lmKDAhPT1hKXt0LmZvckVhY2goKGZ1bmN0aW9uKHQpe3IuX3RvdWNoSWRzLmhhcyh0LnRvU3RyaW5nKCkpJiZyLl90b3VjaElkcy5zZXQodC50b1N0cmluZygpLHIuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2Uoblt0XSkpfSkpO3ZhciBzPXRoaXMuX3RvdWNoSWRzLnZhbHVlcygpLGw9ZS5fcG9pbnREaXN0YW5jZShzWzBdLHNbMV0pO2lmKDAhPT1sKXt2YXIgYz1hL2wsdT1zLm1hcCgoZnVuY3Rpb24odCxlKXtyZXR1cm57eDoodC54LW9bZV0ueCkvYyx5Oih0Lnktb1tlXS55KS9jfX0pKSxoPWUuY2VudGVyUG9pbnQob1swXSxvWzFdKSxkPXRoaXMuem9vbShjLGgpLHA9ZC5jZW50ZXJWYWx1ZSxmPWQuem9vbUFtb3VudCxtPXAuY2VudGVyWCxnPXAuY2VudGVyWSxfPW8ubWFwKChmdW5jdGlvbih0LGUpe3JldHVybnt4OnVbZV0ueCpmK3QueCx5OnVbZV0ueSpmK3QueX19KSk7dGhpcy5wYW4oe3g6bS0oX1swXS54K19bMV0ueCkvMix5OmctKF9bMF0ueStfWzFdLnkpLzJ9KX19fX19LGUuY2VudGVyUG9pbnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1NYXRoLm1pbih0LngsZS54KSxpPU1hdGgubWF4KHQueCxlLngpLHI9TWF0aC5taW4odC55LGUueSk7cmV0dXJue3g6KG4raSkvMix5OihNYXRoLm1heCh0LnksZS55KStyKS8yfX0sZS5fcG9pbnREaXN0YW5jZT1mdW5jdGlvbih0LGUpe3ZhciBuPU1hdGgubWluKHQueCxlLngpLGk9TWF0aC5tYXgodC54LGUueCkscj1NYXRoLm1pbih0LnksZS55KSxvPU1hdGgubWF4KHQueSxlLnkpO3JldHVybiBNYXRoLnNxcnQoTWF0aC5wb3coaS1uLDIpK01hdGgucG93KG8tciwyKSl9LGUucHJvdG90eXBlLl9oYW5kbGVUb3VjaEVuZD1mdW5jdGlvbih0LGUsbil7dmFyIGk9dGhpczt0LmZvckVhY2goKGZ1bmN0aW9uKHQpe2kuX3RvdWNoSWRzLnJlbW92ZSh0LnRvU3RyaW5nKCkpfSkpLHRoaXMuX3RvdWNoSWRzLnNpemUoKT4wJiZ0aGlzLl96b29tRW5kQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MoKX0sZS5wcm90b3R5cGUuX2hhbmRsZVdoZWVsRXZlbnQ9ZnVuY3Rpb24odCxuKXtpZih0aGlzLl93aGVlbEZpbHRlcihuKSl7dmFyIGk9dGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZSh0KTtpZih0aGlzLl9pc0luc2lkZUNvbXBvbmVudChpKSl7bi5wcmV2ZW50RGVmYXVsdCgpO3ZhciByPU1hdGgucG93KDIsKDAhPT1uLmRlbHRhWT9uLmRlbHRhWTpuLmRlbHRhWCkqKG4uZGVsdGFNb2RlP2UuX1BJWEVMU19QRVJfTElORToxKSouMDAyKTt0aGlzLnpvb20ocixpKSx0aGlzLl96b29tRW5kQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MoKX19fSxlLnByb3RvdHlwZS5fY29uc3RyYWluZWRab29tPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gTm10LmNvbnN0cmFpbmVkWm9vbSh0LGUsbix0aGlzLm1pbkRvbWFpbkV4dGVudCh0KSx0aGlzLm1heERvbWFpbkV4dGVudCh0KSx0aGlzLm1pbkRvbWFpblZhbHVlKHQpLHRoaXMubWF4RG9tYWluVmFsdWUodCkpfSxlLnByb3RvdHlwZS5fY29uc3RyYWluZWRUcmFuc2xhdGlvbj1mdW5jdGlvbih0LGUpe3JldHVybiBObXQuY29uc3RyYWluZWRUcmFuc2xhdGlvbih0LGUsdGhpcy5taW5Eb21haW5WYWx1ZSh0KSx0aGlzLm1heERvbWFpblZhbHVlKHQpKX0sZS5wcm90b3R5cGUuX3NldHVwRHJhZ0ludGVyYWN0aW9uPWZ1bmN0aW9uKCl7dmFyIHQsZT10aGlzO3RoaXMuX2RyYWdJbnRlcmFjdGlvbi5jb25zdHJhaW5lZFRvQ29tcG9uZW50KCExKSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnU3RhcnQoKGZ1bmN0aW9uKCl7cmV0dXJuIHQ9bnVsbH0pKSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnKChmdW5jdGlvbihuLGkpe2UuX3RvdWNoSWRzLnNpemUoKT49Mnx8KGUucGFuKHt4OihudWxsPT10P24ueDp0LngpLWkueCx5OihudWxsPT10P24ueTp0LnkpLWkueX0pLHQ9aSl9KSksdGhpcy5fZHJhZ0ludGVyYWN0aW9uLm9uRHJhZ0VuZCgoZnVuY3Rpb24oKXtyZXR1cm4gZS5fcGFuRW5kQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MoKX0pKX0sZS5wcm90b3R5cGUuX25vbkxpbmVhclNjYWxlV2l0aEV4dGVudHM9ZnVuY3Rpb24odCl7cmV0dXJuIShudWxsPT10aGlzLm1pbkRvbWFpbkV4dGVudCh0KXx8bnVsbD09dGhpcy5tYXhEb21haW5FeHRlbnQodCl8fHQgaW5zdGFuY2VvZiBVbXQuTGluZWFyfHx0IGluc3RhbmNlb2YgVW10LlRpbWUpfSxlLnByb3RvdHlwZS54U2NhbGVzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYobnVsbD09dCl7dmFyIG49W107cmV0dXJuIHRoaXMuX3hTY2FsZXMuZm9yRWFjaCgoZnVuY3Rpb24odCl7bi5wdXNoKHQpfSkpLG59cmV0dXJuIHRoaXMuX3hTY2FsZXM9bmV3IFNtdC5TZXQsdC5mb3JFYWNoKChmdW5jdGlvbih0KXtlLmFkZFhTY2FsZSh0KX0pKSx0aGlzfSxlLnByb3RvdHlwZS55U2NhbGVzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYobnVsbD09dCl7dmFyIG49W107cmV0dXJuIHRoaXMuX3lTY2FsZXMuZm9yRWFjaCgoZnVuY3Rpb24odCl7bi5wdXNoKHQpfSkpLG59cmV0dXJuIHRoaXMuX3lTY2FsZXM9bmV3IFNtdC5TZXQsdC5mb3JFYWNoKChmdW5jdGlvbih0KXtlLmFkZFlTY2FsZSh0KX0pKSx0aGlzfSxlLnByb3RvdHlwZS5hZGRYU2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3hTY2FsZXMuYWRkKHQpLHRoaXN9LGUucHJvdG90eXBlLnJlbW92ZVhTY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5feFNjYWxlcy5kZWxldGUodCksdGhpcy5fbWluRG9tYWluRXh0ZW50cy5kZWxldGUodCksdGhpcy5fbWF4RG9tYWluRXh0ZW50cy5kZWxldGUodCksdGhpcy5fbWluRG9tYWluVmFsdWVzLmRlbGV0ZSh0KSx0aGlzLl9tYXhEb21haW5WYWx1ZXMuZGVsZXRlKHQpLHRoaXN9LGUucHJvdG90eXBlLmFkZFlTY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5feVNjYWxlcy5hZGQodCksdGhpc30sZS5wcm90b3R5cGUucmVtb3ZlWVNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl95U2NhbGVzLmRlbGV0ZSh0KSx0aGlzLl9taW5Eb21haW5FeHRlbnRzLmRlbGV0ZSh0KSx0aGlzLl9tYXhEb21haW5FeHRlbnRzLmRlbGV0ZSh0KSx0aGlzLl9taW5Eb21haW5WYWx1ZXMuZGVsZXRlKHQpLHRoaXMuX21heERvbWFpblZhbHVlcy5kZWxldGUodCksdGhpc30sZS5wcm90b3R5cGUubWluRG9tYWluRXh0ZW50PWZ1bmN0aW9uKHQsZSl7aWYobnVsbD09ZSlyZXR1cm4gdGhpcy5fbWluRG9tYWluRXh0ZW50cy5nZXQodCk7aWYoZS52YWx1ZU9mKCk8MCl0aHJvdyBuZXcgRXJyb3IoImV4dGVudCBtdXN0IGJlIG5vbi1uZWdhdGl2ZSIpO3ZhciBuPXRoaXMubWF4RG9tYWluRXh0ZW50KHQpO2lmKG51bGwhPW4mJm4udmFsdWVPZigpPGUudmFsdWVPZigpKXRocm93IG5ldyBFcnJvcigibWluRG9tYWluRXh0ZW50IG11c3QgYmUgc21hbGxlciB0aGFuIG1heERvbWFpbkV4dGVudCBmb3IgdGhlIHNhbWUgU2NhbGUiKTtyZXR1cm4gdGhpcy5fbm9uTGluZWFyU2NhbGVXaXRoRXh0ZW50cyh0KSYmU210LldpbmRvdy53YXJuKCJQYW5uaW5nIGFuZCB6b29taW5nIHdpdGggZXh0ZW50cyBvbiBhIG5vbmxpbmVhciBzY2FsZSBtYXkgaGF2ZSB1bmludGVuZGVkIGJlaGF2aW9yLiIpLHRoaXMuX21pbkRvbWFpbkV4dGVudHMuc2V0KHQsZSksdGhpc30sZS5wcm90b3R5cGUubWF4RG9tYWluRXh0ZW50PWZ1bmN0aW9uKHQsZSl7aWYobnVsbD09ZSlyZXR1cm4gdGhpcy5fbWF4RG9tYWluRXh0ZW50cy5nZXQodCk7aWYoZS52YWx1ZU9mKCk8PTApdGhyb3cgbmV3IEVycm9yKCJleHRlbnQgbXVzdCBiZSBwb3NpdGl2ZSIpO3ZhciBuPXRoaXMubWluRG9tYWluRXh0ZW50KHQpO2lmKG51bGwhPW4mJmUudmFsdWVPZigpPG4udmFsdWVPZigpKXRocm93IG5ldyBFcnJvcigibWF4RG9tYWluRXh0ZW50IG11c3QgYmUgbGFyZ2VyIHRoYW4gbWluRG9tYWluRXh0ZW50IGZvciB0aGUgc2FtZSBTY2FsZSIpO3JldHVybiB0aGlzLl9ub25MaW5lYXJTY2FsZVdpdGhFeHRlbnRzKHQpJiZTbXQuV2luZG93Lndhcm4oIlBhbm5pbmcgYW5kIHpvb21pbmcgd2l0aCBleHRlbnRzIG9uIGEgbm9ubGluZWFyIHNjYWxlIG1heSBoYXZlIHVuaW50ZW5kZWQgYmVoYXZpb3IuIiksdGhpcy5fbWF4RG9tYWluRXh0ZW50cy5zZXQodCxlKSx0aGlzfSxlLnByb3RvdHlwZS5taW5Eb21haW5WYWx1ZT1mdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT1lP3RoaXMuX21pbkRvbWFpblZhbHVlcy5nZXQodCk6KHRoaXMuX21pbkRvbWFpblZhbHVlcy5zZXQodCxlKSx0aGlzKX0sZS5wcm90b3R5cGUubWF4RG9tYWluVmFsdWU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09ZT90aGlzLl9tYXhEb21haW5WYWx1ZXMuZ2V0KHQpOih0aGlzLl9tYXhEb21haW5WYWx1ZXMuc2V0KHQsZSksdGhpcyl9LGUucHJvdG90eXBlLnNldE1pbk1heERvbWFpblZhbHVlc1RvPWZ1bmN0aW9uKHQpe3RoaXMuX21pbkRvbWFpblZhbHVlcy5kZWxldGUodCksdGhpcy5fbWF4RG9tYWluVmFsdWVzLmRlbGV0ZSh0KTt2YXIgZT10LmdldFRyYW5zZm9ybWF0aW9uRG9tYWluKCksbj1lWzFdO3JldHVybiB0aGlzLm1pbkRvbWFpblZhbHVlKHQsZVswXSksdGhpcy5tYXhEb21haW5WYWx1ZSh0LG4pLHRoaXN9LGUucHJvdG90eXBlLm9uUGFuRW5kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYW5FbmRDYWxsYmFja3MuYWRkKHQpLHRoaXN9LGUucHJvdG90eXBlLm9mZlBhbkVuZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFuRW5kQ2FsbGJhY2tzLmRlbGV0ZSh0KSx0aGlzfSxlLnByb3RvdHlwZS5vblpvb21FbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3pvb21FbmRDYWxsYmFja3MuYWRkKHQpLHRoaXN9LGUucHJvdG90eXBlLm9mZlpvb21FbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3pvb21FbmRDYWxsYmFja3MuZGVsZXRlKHQpLHRoaXN9LGUucHJvdG90eXBlLm9uUGFuWm9vbVVwZGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFuWm9vbVVwZGF0ZUNhbGxiYWNrcy5hZGQodCksdGhpc30sZS5wcm90b3R5cGUub2ZmUGFuWm9vbVVwZGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFuWm9vbVVwZGF0ZUNhbGxiYWNrcy5kZWxldGUodCksdGhpc30sZS5fUElYRUxTX1BFUl9MSU5FPTEyMCxlfSkoS210LkludGVyYWN0aW9uKTtlLlBhblpvb209bn0pKSxlZ3Q9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBlPW51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztyZXR1cm4gZS5fb3ZlckNvbXBvbmVudD0hMSxlLl9wb2ludGVyRW50ZXJDYWxsYmFja3M9bmV3IFNtdC5DYWxsYmFja1NldCxlLl9wb2ludGVyTW92ZUNhbGxiYWNrcz1uZXcgU210LkNhbGxiYWNrU2V0LGUuX3BvaW50ZXJFeGl0Q2FsbGJhY2tzPW5ldyBTbXQuQ2FsbGJhY2tTZXQsZS5fbW91c2VNb3ZlQ2FsbGJhY2s9ZnVuY3Rpb24odCxuKXtyZXR1cm4gZS5faGFuZGxlTW91c2VFdmVudCh0LG4pfSxlLl90b3VjaFN0YXJ0Q2FsbGJhY2s9ZnVuY3Rpb24odCxuLGkpe3JldHVybiBlLl9oYW5kbGVUb3VjaEV2ZW50KG5bdFswXV0saSl9LGV9cmV0dXJuIERmdC5fX2V4dGVuZHMoZSx0KSxlLnByb3RvdHlwZS5fYW5jaG9yPWZ1bmN0aW9uKGUpe3QucHJvdG90eXBlLl9hbmNob3IuY2FsbCh0aGlzLGUpLHRoaXMuX21vdXNlRGlzcGF0Y2hlcj0kbXQuTW91c2UuZ2V0RGlzcGF0Y2hlcih0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub25Nb3VzZU1vdmUodGhpcy5fbW91c2VNb3ZlQ2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlcj0kbXQuVG91Y2guZ2V0RGlzcGF0Y2hlcih0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvKSx0aGlzLl90b3VjaERpc3BhdGNoZXIub25Ub3VjaFN0YXJ0KHRoaXMuX3RvdWNoU3RhcnRDYWxsYmFjayl9LGUucHJvdG90eXBlLl91bmFuY2hvcj1mdW5jdGlvbigpe3QucHJvdG90eXBlLl91bmFuY2hvci5jYWxsKHRoaXMpLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZNb3VzZU1vdmUodGhpcy5fbW91c2VNb3ZlQ2FsbGJhY2spLHRoaXMuX21vdXNlRGlzcGF0Y2hlcj1udWxsLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vZmZUb3VjaFN0YXJ0KHRoaXMuX3RvdWNoU3RhcnRDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyPW51bGx9LGUucHJvdG90eXBlLl9oYW5kbGVNb3VzZUV2ZW50PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fbW91c2VEaXNwYXRjaGVyLmV2ZW50SW5zaWRlKHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8sZSk7dGhpcy5faGFuZGxlUG9pbnRlckV2ZW50KHQsbil9LGUucHJvdG90eXBlLl9oYW5kbGVUb3VjaEV2ZW50PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fdG91Y2hEaXNwYXRjaGVyLmV2ZW50SW5zaWRlKHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8sZSk7dGhpcy5faGFuZGxlUG9pbnRlckV2ZW50KHQsbil9LGUucHJvdG90eXBlLl9oYW5kbGVQb2ludGVyRXZlbnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl90cmFuc2xhdGVUb0NvbXBvbmVudFNwYWNlKHQpLGk9dGhpcy5faXNJbnNpZGVDb21wb25lbnQobik7aSYmZT8odGhpcy5fb3ZlckNvbXBvbmVudHx8dGhpcy5fcG9pbnRlckVudGVyQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MobiksdGhpcy5fcG9pbnRlck1vdmVDYWxsYmFja3MuY2FsbENhbGxiYWNrcyhuKSk6dGhpcy5fb3ZlckNvbXBvbmVudCYmdGhpcy5fcG9pbnRlckV4aXRDYWxsYmFja3MuY2FsbENhbGxiYWNrcyhuKSx0aGlzLl9vdmVyQ29tcG9uZW50PWkmJmV9LGUucHJvdG90eXBlLm9uUG9pbnRlckVudGVyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wb2ludGVyRW50ZXJDYWxsYmFja3MuYWRkKHQpLHRoaXN9LGUucHJvdG90eXBlLm9mZlBvaW50ZXJFbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcG9pbnRlckVudGVyQ2FsbGJhY2tzLmRlbGV0ZSh0KSx0aGlzfSxlLnByb3RvdHlwZS5vblBvaW50ZXJNb3ZlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wb2ludGVyTW92ZUNhbGxiYWNrcy5hZGQodCksdGhpc30sZS5wcm90b3R5cGUub2ZmUG9pbnRlck1vdmU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BvaW50ZXJNb3ZlQ2FsbGJhY2tzLmRlbGV0ZSh0KSx0aGlzfSxlLnByb3RvdHlwZS5vblBvaW50ZXJFeGl0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wb2ludGVyRXhpdENhbGxiYWNrcy5hZGQodCksdGhpc30sZS5wcm90b3R5cGUub2ZmUG9pbnRlckV4aXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BvaW50ZXJFeGl0Q2FsbGJhY2tzLmRlbGV0ZSh0KSx0aGlzfSxlfSkoS210LkludGVyYWN0aW9uKTtlLlBvaW50ZXI9bn0pKSxuZ3Q9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxEZnQuX19leHBvcnRTdGFyKFptdCxlKSxEZnQuX19leHBvcnRTdGFyKEptdCxlKSxEZnQuX19leHBvcnRTdGFyKFFtdCxlKSxEZnQuX19leHBvcnRTdGFyKHRndCxlKSxEZnQuX19leHBvcnRTdGFyKGVndCxlKSxlLnpvb21PdXQ9Tm10Lnpvb21PdXR9KSksaWd0PWJlKChmdW5jdGlvbih0LGUpe3ZhciBuOwovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksKGZ1bmN0aW9uKHQpe3RbdC5WQUxVRT0wXT0iVkFMVUUiLHRbdC5QSVhFTD0xXT0iUElYRUwifSkobj1lLlByb3BlcnR5TW9kZXx8KGUuUHJvcGVydHlNb2RlPXt9KSk7dmFyIGk9KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt2YXIgZT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGUuX2JveFZpc2libGU9ITEsZS5fYm94Qm91bmRzPXt0b3BMZWZ0Ont4OjAseTowfSxib3R0b21SaWdodDp7eDowLHk6MH19LGUuX3hCb3VuZHNNb2RlPW4uUElYRUwsZS5feUJvdW5kc01vZGU9bi5QSVhFTCxlLmFkZENsYXNzKCJzZWxlY3Rpb24tYm94LWxheWVyIiksZS5fYWRqdXN0Qm91bmRzQ2FsbGJhY2s9ZnVuY3Rpb24oKXtlLnJlbmRlcigpfSxlLl9vdmVyZmxvd0hpZGRlbj0hMCxlLl94RXh0ZW50PVt2b2lkIDAsdm9pZCAwXSxlLl95RXh0ZW50PVt2b2lkIDAsdm9pZCAwXSxlfXJldHVybiBEZnQuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7dC5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyksdGhpcy5fYm94PXRoaXMuY29udGVudCgpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInNlbGVjdGlvbi1ib3giLCEwKS5yZW1vdmUoKSx0aGlzLl9ib3hBcmVhPXRoaXMuX2JveC5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKCJzZWxlY3Rpb24tYXJlYSIsITApfSxlLnByb3RvdHlwZS5fc2l6ZUZyb21PZmZlcj1mdW5jdGlvbih0LGUpe3JldHVybnt3aWR0aDp0LGhlaWdodDplfX0sZS5wcm90b3R5cGUuYm91bmRzPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX2dldEJvdW5kcygpOih0aGlzLl9zZXRCb3VuZHModCksdGhpcy5feEJvdW5kc01vZGU9bi5QSVhFTCx0aGlzLl95Qm91bmRzTW9kZT1uLlBJWEVMLHRoaXMucmVuZGVyKCksdGhpcyl9LGUucHJvdG90eXBlLl9zZXRCb3VuZHM9ZnVuY3Rpb24odCl7dmFyIGU9e3g6TWF0aC5taW4odC50b3BMZWZ0LngsdC5ib3R0b21SaWdodC54KSx5Ok1hdGgubWluKHQudG9wTGVmdC55LHQuYm90dG9tUmlnaHQueSl9LG49e3g6TWF0aC5tYXgodC50b3BMZWZ0LngsdC5ib3R0b21SaWdodC54KSx5Ok1hdGgubWF4KHQudG9wTGVmdC55LHQuYm90dG9tUmlnaHQueSl9O3RoaXMuX2JveEJvdW5kcz17dG9wTGVmdDplLGJvdHRvbVJpZ2h0Om59fSxlLnByb3RvdHlwZS5fZ2V0Qm91bmRzPWZ1bmN0aW9uKCl7cmV0dXJue3RvcExlZnQ6e3g6dGhpcy5feEJvdW5kc01vZGU9PT1uLlBJWEVMP3RoaXMuX2JveEJvdW5kcy50b3BMZWZ0Lng6bnVsbD09dGhpcy5feFNjYWxlPzA6TWF0aC5taW4odGhpcy54U2NhbGUoKS5zY2FsZSh0aGlzLnhFeHRlbnQoKVswXSksdGhpcy54U2NhbGUoKS5zY2FsZSh0aGlzLnhFeHRlbnQoKVsxXSkpLHk6dGhpcy5feUJvdW5kc01vZGU9PT1uLlBJWEVMP3RoaXMuX2JveEJvdW5kcy50b3BMZWZ0Lnk6bnVsbD09dGhpcy5feVNjYWxlPzA6TWF0aC5taW4odGhpcy55U2NhbGUoKS5zY2FsZSh0aGlzLnlFeHRlbnQoKVswXSksdGhpcy55U2NhbGUoKS5zY2FsZSh0aGlzLnlFeHRlbnQoKVsxXSkpfSxib3R0b21SaWdodDp7eDp0aGlzLl94Qm91bmRzTW9kZT09PW4uUElYRUw/dGhpcy5fYm94Qm91bmRzLmJvdHRvbVJpZ2h0Lng6bnVsbD09dGhpcy5feFNjYWxlPzA6TWF0aC5tYXgodGhpcy54U2NhbGUoKS5zY2FsZSh0aGlzLnhFeHRlbnQoKVswXSksdGhpcy54U2NhbGUoKS5zY2FsZSh0aGlzLnhFeHRlbnQoKVsxXSkpLHk6dGhpcy5feUJvdW5kc01vZGU9PT1uLlBJWEVMP3RoaXMuX2JveEJvdW5kcy5ib3R0b21SaWdodC55Om51bGw9PXRoaXMuX3lTY2FsZT8wOk1hdGgubWF4KHRoaXMueVNjYWxlKCkuc2NhbGUodGhpcy55RXh0ZW50KClbMF0pLHRoaXMueVNjYWxlKCkuc2NhbGUodGhpcy55RXh0ZW50KClbMV0pKX19fSxlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseT1mdW5jdGlvbigpe2lmKHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5LmNhbGwodGhpcyksdGhpcy5fYm94VmlzaWJsZSl7dmFyIGU9dGhpcy5ib3VuZHMoKSxuPWUudG9wTGVmdC55LGk9ZS5ib3R0b21SaWdodC55LHI9ZS50b3BMZWZ0Lngsbz1lLmJvdHRvbVJpZ2h0Lng7aWYoIShTbXQuTWF0aC5pc1ZhbGlkTnVtYmVyKG4pJiZTbXQuTWF0aC5pc1ZhbGlkTnVtYmVyKGkpJiZTbXQuTWF0aC5pc1ZhbGlkTnVtYmVyKHIpJiZTbXQuTWF0aC5pc1ZhbGlkTnVtYmVyKG8pKSl0aHJvdyBuZXcgRXJyb3IoImJvdW5kcyBoYXZlIG5vdCBiZWVuIHByb3Blcmx5IHNldCIpO3RoaXMuX2JveEFyZWEuYXR0cnMoe3g6cix5Om4sd2lkdGg6by1yLGhlaWdodDppLW59KSx0aGlzLmNvbnRlbnQoKS5ub2RlKCkuYXBwZW5kQ2hpbGQodGhpcy5fYm94Lm5vZGUoKSl9ZWxzZSB0aGlzLl9ib3gucmVtb3ZlKCk7cmV0dXJuIHRoaXN9LGUucHJvdG90eXBlLmJveFZpc2libGU9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5fYm94VmlzaWJsZToodGhpcy5fYm94VmlzaWJsZT10LHRoaXMucmVuZGVyKCksdGhpcyl9LGUucHJvdG90eXBlLmZpeGVkV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sZS5wcm90b3R5cGUuZml4ZWRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sZS5wcm90b3R5cGUueFNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX3hTY2FsZToobnVsbCE9dGhpcy5feFNjYWxlJiZ0aGlzLl94U2NhbGUub2ZmVXBkYXRlKHRoaXMuX2FkanVzdEJvdW5kc0NhbGxiYWNrKSx0aGlzLl94U2NhbGU9dCx0aGlzLl94Qm91bmRzTW9kZT1uLlZBTFVFLHRoaXMuX3hTY2FsZS5vblVwZGF0ZSh0aGlzLl9hZGp1c3RCb3VuZHNDYWxsYmFjayksdGhpcy5yZW5kZXIoKSx0aGlzKX0sZS5wcm90b3R5cGUueVNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX3lTY2FsZToobnVsbCE9dGhpcy5feVNjYWxlJiZ0aGlzLl95U2NhbGUub2ZmVXBkYXRlKHRoaXMuX2FkanVzdEJvdW5kc0NhbGxiYWNrKSx0aGlzLl95U2NhbGU9dCx0aGlzLl95Qm91bmRzTW9kZT1uLlZBTFVFLHRoaXMuX3lTY2FsZS5vblVwZGF0ZSh0aGlzLl9hZGp1c3RCb3VuZHNDYWxsYmFjayksdGhpcy5yZW5kZXIoKSx0aGlzKX0sZS5wcm90b3R5cGUueEV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9nZXRYRXh0ZW50KCk6KHRoaXMuX3NldFhFeHRlbnQodCksdGhpcy5feEJvdW5kc01vZGU9bi5WQUxVRSx0aGlzLnJlbmRlcigpLHRoaXMpfSxlLnByb3RvdHlwZS5fZ2V0WEV4dGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl94Qm91bmRzTW9kZT09PW4uVkFMVUU/dGhpcy5feEV4dGVudDpudWxsPT10aGlzLl94U2NhbGU/W3ZvaWQgMCx2b2lkIDBdOlt0aGlzLl94U2NhbGUuaW52ZXJ0KHRoaXMuX2JveEJvdW5kcy50b3BMZWZ0LngpLHRoaXMuX3hTY2FsZS5pbnZlcnQodGhpcy5fYm94Qm91bmRzLmJvdHRvbVJpZ2h0LngpXX0sZS5wcm90b3R5cGUuX3NldFhFeHRlbnQ9ZnVuY3Rpb24odCl7dGhpcy5feEV4dGVudD10fSxlLnByb3RvdHlwZS55RXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX2dldFlFeHRlbnQoKToodGhpcy5fc2V0WUV4dGVudCh0KSx0aGlzLl95Qm91bmRzTW9kZT1uLlZBTFVFLHRoaXMucmVuZGVyKCksdGhpcyl9LGUucHJvdG90eXBlLl9nZXRZRXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3lCb3VuZHNNb2RlPT09bi5WQUxVRT90aGlzLl95RXh0ZW50Om51bGw9PXRoaXMuX3lTY2FsZT9bdm9pZCAwLHZvaWQgMF06W3RoaXMuX3lTY2FsZS5pbnZlcnQodGhpcy5fYm94Qm91bmRzLnRvcExlZnQueSksdGhpcy5feVNjYWxlLmludmVydCh0aGlzLl9ib3hCb3VuZHMuYm90dG9tUmlnaHQueSldfSxlLnByb3RvdHlwZS5fc2V0WUV4dGVudD1mdW5jdGlvbih0KXt0aGlzLl95RXh0ZW50PXR9LGUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0LnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyksbnVsbCE9dGhpcy5feFNjYWxlJiZ0aGlzLnhTY2FsZSgpLm9mZlVwZGF0ZSh0aGlzLl9hZGp1c3RCb3VuZHNDYWxsYmFjayksbnVsbCE9dGhpcy5feVNjYWxlJiZ0aGlzLnlTY2FsZSgpLm9mZlVwZGF0ZSh0aGlzLl9hZGp1c3RCb3VuZHNDYWxsYmFjayl9LGV9KShUbXQuQ29tcG9uZW50KTtlLlNlbGVjdGlvbkJveExheWVyPWl9KSkscmd0PWJlKChmdW5jdGlvbih0LGUpewovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt2YXIgZT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGUuX2RldGVjdGlvblJhZGl1cz0zLGUuX3Jlc2l6YWJsZT0hMSxlLl9tb3ZhYmxlPSExLGUuX2hhc0Nvcm5lcnM9ITAsZS5hZGRDbGFzcygiZHJhZy1ib3gtbGF5ZXIiKSxlLl9kcmFnSW50ZXJhY3Rpb249bmV3IG5ndC5EcmFnLGUuX3NldFVwQ2FsbGJhY2tzKCksZS5fZHJhZ0ludGVyYWN0aW9uLmF0dGFjaFRvKGUpLGUuX2RyYWdTdGFydENhbGxiYWNrcz1uZXcgU210LkNhbGxiYWNrU2V0LGUuX2RyYWdDYWxsYmFja3M9bmV3IFNtdC5DYWxsYmFja1NldCxlLl9kcmFnRW5kQ2FsbGJhY2tzPW5ldyBTbXQuQ2FsbGJhY2tTZXQsZX1yZXR1cm4gRGZ0Ll9fZXh0ZW5kcyhlLHQpLGUucHJvdG90eXBlLl9zZXRVcENhbGxiYWNrcz1mdW5jdGlvbigpe3ZhciB0LGUsbixpLHI9dGhpcyxvPTAsYT1mdW5jdGlvbihhKXt0PXIuX2dldFJlc2l6aW5nRWRnZXMoYSk7dmFyIHM9ci5ib3VuZHMoKSxsPXMudG9wTGVmdC54PD1hLngmJmEueDw9cy5ib3R0b21SaWdodC54JiZzLnRvcExlZnQueTw9YS55JiZhLnk8PXMuYm90dG9tUmlnaHQueTtyLmJveFZpc2libGUoKSYmKHQudG9wfHx0LmJvdHRvbXx8dC5sZWZ0fHx0LnJpZ2h0KT9vPTE6ci5ib3hWaXNpYmxlKCkmJnIubW92YWJsZSgpJiZsP289Mjoobz0wLHIuX3NldEJvdW5kcyh7dG9wTGVmdDphLGJvdHRvbVJpZ2h0OmF9KSxyLl94Qm91bmRzTW9kZT09PU5ndC5Qcm9wZXJ0eU1vZGUuVkFMVUUmJm51bGwhPXIueFNjYWxlKCkmJnIuX3NldFhFeHRlbnQoW3IueFNjYWxlKCkuaW52ZXJ0KGEueCksci54U2NhbGUoKS5pbnZlcnQoYS54KV0pLHIuX3lCb3VuZHNNb2RlPT09Tmd0LlByb3BlcnR5TW9kZS5WQUxVRSYmbnVsbCE9ci55U2NhbGUoKSYmci5fc2V0WUV4dGVudChbci55U2NhbGUoKS5pbnZlcnQoYS55KSxyLnlTY2FsZSgpLmludmVydChhLnkpXSksci5yZW5kZXIoKSksci5ib3hWaXNpYmxlKCEwKSxzPXIuYm91bmRzKCksZT17eDpzLnRvcExlZnQueCx5OnMudG9wTGVmdC55fSxuPXt4OnMuYm90dG9tUmlnaHQueCx5OnMuYm90dG9tUmlnaHQueX0saT1hLHIuX2RyYWdTdGFydENhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKHMpfSxzPWZ1bmN0aW9uKGEscyl7c3dpdGNoKG8pe2Nhc2UgMDpuLng9cy54LG4ueT1zLnk7YnJlYWs7Y2FzZSAxOnQuYm90dG9tP24ueT1zLnk6dC50b3AmJihlLnk9cy55KSx0LnJpZ2h0P24ueD1zLng6dC5sZWZ0JiYoZS54PXMueCk7YnJlYWs7Y2FzZSAyOnZhciBsPXMueC1pLngsYz1zLnktaS55O2UueCs9bCxlLnkrPWMsbi54Kz1sLG4ueSs9YyxpPXN9ci5fc2V0Qm91bmRzKHt0b3BMZWZ0OmUsYm90dG9tUmlnaHQ6bn0pLHIuX3hCb3VuZHNNb2RlPT09Tmd0LlByb3BlcnR5TW9kZS5WQUxVRSYmbnVsbCE9ci54U2NhbGUoKSYmci5fc2V0WEV4dGVudChbci54U2NhbGUoKS5pbnZlcnQoZS54KSxyLnhTY2FsZSgpLmludmVydChuLngpXSksci5feUJvdW5kc01vZGU9PT1OZ3QuUHJvcGVydHlNb2RlLlZBTFVFJiZudWxsIT1yLnlTY2FsZSgpJiZyLl9zZXRZRXh0ZW50KFtyLnlTY2FsZSgpLmludmVydChlLnkpLHIueVNjYWxlKCkuaW52ZXJ0KG4ueSldKSxyLnJlbmRlcigpLHIuX2RyYWdDYWxsYmFja3MuY2FsbENhbGxiYWNrcyhyLmJvdW5kcygpKX0sbD1mdW5jdGlvbih0LGUpezA9PT1vJiZ0Lng9PT1lLngmJnQueT09PWUueSYmci5ib3hWaXNpYmxlKCExKSxyLl9kcmFnRW5kQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3Moci5ib3VuZHMoKSl9O3RoaXMuX2RyYWdJbnRlcmFjdGlvbi5vbkRyYWdTdGFydChhKSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnKHMpLHRoaXMuX2RyYWdJbnRlcmFjdGlvbi5vbkRyYWdFbmQobCksdGhpcy5fZGlzY29ubmVjdEludGVyYWN0aW9uPWZ1bmN0aW9uKCl7ci5fZHJhZ0ludGVyYWN0aW9uLm9mZkRyYWdTdGFydChhKSxyLl9kcmFnSW50ZXJhY3Rpb24ub2ZmRHJhZyhzKSxyLl9kcmFnSW50ZXJhY3Rpb24ub2ZmRHJhZ0VuZChsKSxyLl9kcmFnSW50ZXJhY3Rpb24uZGV0YWNoKCl9fSxlLnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3QucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpO3ZhciBuPWZ1bmN0aW9uKCl7cmV0dXJuIGUuX2JveC5hcHBlbmQoImxpbmUiKS5zdHlsZXMoe29wYWNpdHk6MCxzdHJva2U6InBpbmsiLCJwb2ludGVyLWV2ZW50cyI6InZpc2libGVTdHJva2UifSl9O2lmKHRoaXMuX2RldGVjdGlvbkVkZ2VUPW4oKS5jbGFzc2VkKCJkcmFnLWVkZ2UtdGIiLCEwKSx0aGlzLl9kZXRlY3Rpb25FZGdlQj1uKCkuY2xhc3NlZCgiZHJhZy1lZGdlLXRiIiwhMCksdGhpcy5fZGV0ZWN0aW9uRWRnZUw9bigpLmNsYXNzZWQoImRyYWctZWRnZS1sciIsITApLHRoaXMuX2RldGVjdGlvbkVkZ2VSPW4oKS5jbGFzc2VkKCJkcmFnLWVkZ2UtbHIiLCEwKSx0aGlzLl9oYXNDb3JuZXJzKXt2YXIgaT1mdW5jdGlvbigpe3JldHVybiBlLl9ib3guYXBwZW5kKCJjaXJjbGUiKS5zdHlsZXMoe29wYWNpdHk6MCxmaWxsOiJwaW5rIiwicG9pbnRlci1ldmVudHMiOiJ2aXNpYmxlRmlsbCJ9KX07dGhpcy5fZGV0ZWN0aW9uQ29ybmVyVEw9aSgpLmNsYXNzZWQoImRyYWctY29ybmVyLXRsIiwhMCksdGhpcy5fZGV0ZWN0aW9uQ29ybmVyVFI9aSgpLmNsYXNzZWQoImRyYWctY29ybmVyLXRyIiwhMCksdGhpcy5fZGV0ZWN0aW9uQ29ybmVyQkw9aSgpLmNsYXNzZWQoImRyYWctY29ybmVyLWJsIiwhMCksdGhpcy5fZGV0ZWN0aW9uQ29ybmVyQlI9aSgpLmNsYXNzZWQoImRyYWctY29ybmVyLWJyIiwhMCl9fSxlLnByb3RvdHlwZS5fZ2V0UmVzaXppbmdFZGdlcz1mdW5jdGlvbih0KXt2YXIgZT17dG9wOiExLGJvdHRvbTohMSxsZWZ0OiExLHJpZ2h0OiExfTtpZighdGhpcy5yZXNpemFibGUoKSlyZXR1cm4gZTt2YXIgbj10aGlzLmJvdW5kcygpLGk9bi50b3BMZWZ0Lnkscj1uLmJvdHRvbVJpZ2h0Lnksbz1uLnRvcExlZnQueCxhPW4uYm90dG9tUmlnaHQueCxzPXRoaXMuX2RldGVjdGlvblJhZGl1cztyZXR1cm4gby1zPD10LngmJnQueDw9YStzJiYoZS50b3A9aS1zPD10LnkmJnQueTw9aStzLGUuYm90dG9tPXItczw9dC55JiZ0Lnk8PXIrcyksaS1zPD10LnkmJnQueTw9citzJiYoZS5sZWZ0PW8tczw9dC54JiZ0Lng8PW8rcyxlLnJpZ2h0PWEtczw9dC54JiZ0Lng8PWErcyksZX0sZS5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXtpZih0LnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHRoaXMpLHRoaXMuYm94VmlzaWJsZSgpKXt2YXIgZT10aGlzLmJvdW5kcygpLG49ZS50b3BMZWZ0LnksaT1lLmJvdHRvbVJpZ2h0Lnkscj1lLnRvcExlZnQueCxvPWUuYm90dG9tUmlnaHQueDt0aGlzLl9kZXRlY3Rpb25FZGdlVC5hdHRycyh7eDE6cix5MTpuLHgyOm8seTI6biwic3Ryb2tlLXdpZHRoIjoyKnRoaXMuX2RldGVjdGlvblJhZGl1c30pLHRoaXMuX2RldGVjdGlvbkVkZ2VCLmF0dHJzKHt4MTpyLHkxOmkseDI6byx5MjppLCJzdHJva2Utd2lkdGgiOjIqdGhpcy5fZGV0ZWN0aW9uUmFkaXVzfSksdGhpcy5fZGV0ZWN0aW9uRWRnZUwuYXR0cnMoe3gxOnIseTE6bix4MjpyLHkyOmksInN0cm9rZS13aWR0aCI6Mip0aGlzLl9kZXRlY3Rpb25SYWRpdXN9KSx0aGlzLl9kZXRlY3Rpb25FZGdlUi5hdHRycyh7eDE6byx5MTpuLHgyOm8seTI6aSwic3Ryb2tlLXdpZHRoIjoyKnRoaXMuX2RldGVjdGlvblJhZGl1c30pLHRoaXMuX2hhc0Nvcm5lcnMmJih0aGlzLl9kZXRlY3Rpb25Db3JuZXJUTC5hdHRycyh7Y3g6cixjeTpuLHI6dGhpcy5fZGV0ZWN0aW9uUmFkaXVzfSksdGhpcy5fZGV0ZWN0aW9uQ29ybmVyVFIuYXR0cnMoe2N4Om8sY3k6bixyOnRoaXMuX2RldGVjdGlvblJhZGl1c30pLHRoaXMuX2RldGVjdGlvbkNvcm5lckJMLmF0dHJzKHtjeDpyLGN5Omkscjp0aGlzLl9kZXRlY3Rpb25SYWRpdXN9KSx0aGlzLl9kZXRlY3Rpb25Db3JuZXJCUi5hdHRycyh7Y3g6byxjeTppLHI6dGhpcy5fZGV0ZWN0aW9uUmFkaXVzfSkpfXJldHVybiB0aGlzfSxlLnByb3RvdHlwZS5kZXRlY3Rpb25SYWRpdXM9ZnVuY3Rpb24odCl7aWYobnVsbD09dClyZXR1cm4gdGhpcy5fZGV0ZWN0aW9uUmFkaXVzO2lmKHQ8MCl0aHJvdyBuZXcgRXJyb3IoImRldGVjdGlvbiByYWRpdXMgY2Fubm90IGJlIG5lZ2F0aXZlLiIpO3JldHVybiB0aGlzLl9kZXRlY3Rpb25SYWRpdXM9dCx0aGlzLnJlbmRlcigpLHRoaXN9LGUucHJvdG90eXBlLnJlc2l6YWJsZT1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9yZXNpemFibGU6KHRoaXMuX3Jlc2l6YWJsZT10LHRoaXMuX3NldFJlc2l6YWJsZUNsYXNzZXModCksdGhpcyl9LGUucHJvdG90eXBlLl9zZXRSZXNpemFibGVDbGFzc2VzPWZ1bmN0aW9uKHQpe3QmJnRoaXMuZW5hYmxlZCgpPyh0aGlzLmFkZENsYXNzKCJ4LXJlc2l6YWJsZSIpLHRoaXMuYWRkQ2xhc3MoInktcmVzaXphYmxlIikpOih0aGlzLnJlbW92ZUNsYXNzKCJ4LXJlc2l6YWJsZSIpLHRoaXMucmVtb3ZlQ2xhc3MoInktcmVzaXphYmxlIikpfSxlLnByb3RvdHlwZS5tb3ZhYmxlPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX21vdmFibGU6KHRoaXMuX21vdmFibGU9dCx0aGlzLl9zZXRNb3ZhYmxlQ2xhc3MoKSx0aGlzKX0sZS5wcm90b3R5cGUuX3NldE1vdmFibGVDbGFzcz1mdW5jdGlvbigpe3RoaXMubW92YWJsZSgpJiZ0aGlzLmVuYWJsZWQoKT90aGlzLmFkZENsYXNzKCJtb3ZhYmxlIik6dGhpcy5yZW1vdmVDbGFzcygibW92YWJsZSIpfSxlLnByb3RvdHlwZS5vbkRyYWdTdGFydD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmFkZCh0KSx0aGlzfSxlLnByb3RvdHlwZS5vZmZEcmFnU3RhcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2RyYWdTdGFydENhbGxiYWNrcy5kZWxldGUodCksdGhpc30sZS5wcm90b3R5cGUub25EcmFnPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9kcmFnQ2FsbGJhY2tzLmFkZCh0KSx0aGlzfSxlLnByb3RvdHlwZS5vZmZEcmFnPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9kcmFnQ2FsbGJhY2tzLmRlbGV0ZSh0KSx0aGlzfSxlLnByb3RvdHlwZS5vbkRyYWdFbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuYWRkKHQpLHRoaXN9LGUucHJvdG90eXBlLm9mZkRyYWdFbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuZGVsZXRlKHQpLHRoaXN9LGUucHJvdG90eXBlLmRyYWdJbnRlcmFjdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kcmFnSW50ZXJhY3Rpb259LGUucHJvdG90eXBlLmVuYWJsZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5fZHJhZ0ludGVyYWN0aW9uLmVuYWJsZWQoKToodGhpcy5fZHJhZ0ludGVyYWN0aW9uLmVuYWJsZWQodCksdGhpcy5fc2V0UmVzaXphYmxlQ2xhc3Nlcyh0aGlzLnJlc2l6YWJsZSgpKSx0aGlzLl9zZXRNb3ZhYmxlQ2xhc3MoKSx0aGlzKX0sZS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dC5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuX2RyYWdTdGFydENhbGxiYWNrcy5mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gZS5fZHJhZ0NhbGxiYWNrcy5kZWxldGUodCl9KSksdGhpcy5fZHJhZ0NhbGxiYWNrcy5mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gZS5fZHJhZ0NhbGxiYWNrcy5kZWxldGUodCl9KSksdGhpcy5fZHJhZ0VuZENhbGxiYWNrcy5mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gZS5fZHJhZ0VuZENhbGxiYWNrcy5kZWxldGUodCl9KSksdGhpcy5fZGlzY29ubmVjdEludGVyYWN0aW9uKCl9LGUucHJvdG90eXBlLmRldGFjaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZXNldFN0YXRlKCksdGhpcy5fZHJhZ0ludGVyYWN0aW9uLmRldGFjaCgpLHQucHJvdG90eXBlLmRldGFjaC5jYWxsKHRoaXMpLHRoaXN9LGUucHJvdG90eXBlLmFuY2hvcj1mdW5jdGlvbihlKXtyZXR1cm4gZT1OZnQuY29lcmNlRXh0ZXJuYWxEMyhlKSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24uYXR0YWNoVG8odGhpcyksdC5wcm90b3R5cGUuYW5jaG9yLmNhbGwodGhpcyxlKSx0aGlzfSxlLnByb3RvdHlwZS5fcmVzZXRTdGF0ZT1mdW5jdGlvbigpe3RoaXMuYm91bmRzKHt0b3BMZWZ0Ont4OjAseTowfSxib3R0b21SaWdodDp7eDowLHk6MH19KX0sZX0pKGlndC5TZWxlY3Rpb25Cb3hMYXllcik7ZS5EcmFnQm94TGF5ZXI9bn0pKSxvZ3Q9YmUoKGZ1bmN0aW9uKHQsZSl7dmFyIG47Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSwoZnVuY3Rpb24odCl7dFt0LlZBTFVFPTBdPSJWQUxVRSIsdFt0LlBJWEVMPTFdPSJQSVhFTCJ9KShufHwobj17fSkpO3ZhciBpPShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGkpe3ZhciByPXQuY2FsbCh0aGlzKXx8dGhpcztpZihyLl9tb2RlPW4uVkFMVUUsaSE9PWUuT1JJRU5UQVRJT05fVkVSVElDQUwmJmkhPT1lLk9SSUVOVEFUSU9OX0hPUklaT05UQUwpdGhyb3cgbmV3IEVycm9yKGkrIiBpcyBub3QgYSB2YWxpZCBvcmllbnRhdGlvbiBmb3IgR3VpZGVMaW5lTGF5ZXIiKTtyZXR1cm4gci5fb3JpZW50YXRpb249aSxyLl9vdmVyZmxvd0hpZGRlbj0hMCxyLmFkZENsYXNzKCJndWlkZS1saW5lLWxheWVyIiksci5faXNWZXJ0aWNhbCgpP3IuYWRkQ2xhc3MoInZlcnRpY2FsIik6ci5hZGRDbGFzcygiaG9yaXpvbnRhbCIpLHIuX3NjYWxlVXBkYXRlQ2FsbGJhY2s9ZnVuY3Rpb24oKXtyLl9zeW5jUGl4ZWxQb3NpdGlvbkFuZFZhbHVlKCksci5yZW5kZXIoKX0scn1yZXR1cm4gRGZ0Ll9fZXh0ZW5kcyhlLHQpLGUucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe3QucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLHRoaXMuX2d1aWRlTGluZT10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKCJndWlkZS1saW5lIiwhMCl9LGUucHJvdG90eXBlLl9zaXplRnJvbU9mZmVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJue3dpZHRoOnQsaGVpZ2h0OmV9fSxlLnByb3RvdHlwZS5faXNWZXJ0aWNhbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9vcmllbnRhdGlvbj09PWUuT1JJRU5UQVRJT05fVkVSVElDQUx9LGUucHJvdG90eXBlLmZpeGVkV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sZS5wcm90b3R5cGUuZml4ZWRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sZS5wcm90b3R5cGUuY29tcHV0ZUxheW91dD1mdW5jdGlvbihlLG4saSl7cmV0dXJuIHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQuY2FsbCh0aGlzLGUsbixpKSxudWxsIT10aGlzLnNjYWxlKCkmJih0aGlzLl9pc1ZlcnRpY2FsKCk/dGhpcy5zY2FsZSgpLnJhbmdlKFswLHRoaXMud2lkdGgoKV0pOnRoaXMuc2NhbGUoKS5yYW5nZShbdGhpcy5oZWlnaHQoKSwwXSkpLHRoaXN9LGUucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7cmV0dXJuIHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5LmNhbGwodGhpcyksdGhpcy5fc3luY1BpeGVsUG9zaXRpb25BbmRWYWx1ZSgpLHRoaXMuX2d1aWRlTGluZS5hdHRycyh7eDE6dGhpcy5faXNWZXJ0aWNhbCgpP3RoaXMucGl4ZWxQb3NpdGlvbigpOjAseTE6dGhpcy5faXNWZXJ0aWNhbCgpPzA6dGhpcy5waXhlbFBvc2l0aW9uKCkseDI6dGhpcy5faXNWZXJ0aWNhbCgpP3RoaXMucGl4ZWxQb3NpdGlvbigpOnRoaXMud2lkdGgoKSx5Mjp0aGlzLl9pc1ZlcnRpY2FsKCk/dGhpcy5oZWlnaHQoKTp0aGlzLnBpeGVsUG9zaXRpb24oKX0pLHRoaXN9LGUucHJvdG90eXBlLl9zeW5jUGl4ZWxQb3NpdGlvbkFuZFZhbHVlPWZ1bmN0aW9uKCl7bnVsbCE9dGhpcy5zY2FsZSgpJiYodGhpcy5fbW9kZT09PW4uVkFMVUUmJm51bGwhPXRoaXMudmFsdWUoKT90aGlzLl9waXhlbFBvc2l0aW9uPXRoaXMuc2NhbGUoKS5zY2FsZSh0aGlzLnZhbHVlKCkpOnRoaXMuX21vZGU9PT1uLlBJWEVMJiZudWxsIT10aGlzLnBpeGVsUG9zaXRpb24oKSYmKHRoaXMuX3ZhbHVlPXRoaXMuc2NhbGUoKS5pbnZlcnQodGhpcy5waXhlbFBvc2l0aW9uKCkpKSl9LGUucHJvdG90eXBlLl9zZXRQaXhlbFBvc2l0aW9uV2l0aG91dENoYW5naW5nTW9kZT1mdW5jdGlvbih0KXt0aGlzLl9waXhlbFBvc2l0aW9uPXQsbnVsbCE9dGhpcy5zY2FsZSgpJiYodGhpcy5fdmFsdWU9dGhpcy5zY2FsZSgpLmludmVydCh0aGlzLnBpeGVsUG9zaXRpb24oKSkpLHRoaXMucmVuZGVyKCl9LGUucHJvdG90eXBlLnNjYWxlPWZ1bmN0aW9uKHQpe2lmKG51bGw9PXQpcmV0dXJuIHRoaXMuX3NjYWxlO3ZhciBlPXRoaXMuX3NjYWxlO3JldHVybiBudWxsIT1lJiZlLm9mZlVwZGF0ZSh0aGlzLl9zY2FsZVVwZGF0ZUNhbGxiYWNrKSx0aGlzLl9zY2FsZT10LHRoaXMuX3NjYWxlLm9uVXBkYXRlKHRoaXMuX3NjYWxlVXBkYXRlQ2FsbGJhY2spLHRoaXMuX3N5bmNQaXhlbFBvc2l0aW9uQW5kVmFsdWUoKSx0aGlzLnJlZHJhdygpLHRoaXN9LGUucHJvdG90eXBlLnZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX3ZhbHVlOih0aGlzLl92YWx1ZT10LHRoaXMuX21vZGU9bi5WQUxVRSx0aGlzLl9zeW5jUGl4ZWxQb3NpdGlvbkFuZFZhbHVlKCksdGhpcy5yZW5kZXIoKSx0aGlzKX0sZS5wcm90b3R5cGUucGl4ZWxQb3NpdGlvbj1mdW5jdGlvbih0KXtpZihudWxsPT10KXJldHVybiB0aGlzLl9waXhlbFBvc2l0aW9uO2lmKCFTbXQuTWF0aC5pc1ZhbGlkTnVtYmVyKHQpKXRocm93IG5ldyBFcnJvcigicGl4ZWxQb3NpdGlvbiBtdXN0IGJlIGEgZmluaXRlIG51bWJlciIpO3JldHVybiB0aGlzLl9waXhlbFBvc2l0aW9uPXQsdGhpcy5fbW9kZT1uLlBJWEVMLHRoaXMuX3N5bmNQaXhlbFBvc2l0aW9uQW5kVmFsdWUoKSx0aGlzLnJlbmRlcigpLHRoaXN9LGUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0LnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyksbnVsbCE9dGhpcy5zY2FsZSgpJiZ0aGlzLnNjYWxlKCkub2ZmVXBkYXRlKHRoaXMuX3NjYWxlVXBkYXRlQ2FsbGJhY2spfSxlLk9SSUVOVEFUSU9OX1ZFUlRJQ0FMPSJ2ZXJ0aWNhbCIsZS5PUklFTlRBVElPTl9IT1JJWk9OVEFMPSJob3Jpem9udGFsIixlfSkoVG10LkNvbXBvbmVudCk7ZS5HdWlkZUxpbmVMYXllcj1pfSkpLGFndD1iZSgoZnVuY3Rpb24odCxlKXsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3ZhciBuPXQuY2FsbCh0aGlzLGUpfHx0aGlzO24uX2RldGVjdGlvblJhZGl1cz0zLG4uX2VuYWJsZWQ9ITAsbi5hZGRDbGFzcygiZHJhZy1saW5lLWxheWVyIiksbi5hZGRDbGFzcygiZW5hYmxlZCIpLG4uX2RyYWdJbnRlcmFjdGlvbj1uZXcgbmd0LkRyYWcsbi5fZHJhZ0ludGVyYWN0aW9uLmF0dGFjaFRvKG4pO3ZhciBpPSExLHI9ZnVuY3Rpb24odCl7KGZ1bmN0aW9uKHQpe3JldHVybiBuLl9pc1ZlcnRpY2FsKCkmJm4ucGl4ZWxQb3NpdGlvbigpLW4uZGV0ZWN0aW9uUmFkaXVzKCk8PXQueCYmdC54PD1uLnBpeGVsUG9zaXRpb24oKStuLmRldGVjdGlvblJhZGl1cygpfHwhbi5faXNWZXJ0aWNhbCgpJiZuLnBpeGVsUG9zaXRpb24oKS1uLmRldGVjdGlvblJhZGl1cygpPD10LnkmJnQueTw9bi5waXhlbFBvc2l0aW9uKCkrbi5kZXRlY3Rpb25SYWRpdXMoKX0pKHQpJiYoaT0hMCxuLl9kcmFnU3RhcnRDYWxsYmFja3MuY2FsbENhbGxiYWNrcyhuKSl9O24uX2RyYWdJbnRlcmFjdGlvbi5vbkRyYWdTdGFydChyKTt2YXIgbz1mdW5jdGlvbih0LGUpe2kmJihuLl9zZXRQaXhlbFBvc2l0aW9uV2l0aG91dENoYW5naW5nTW9kZShuLl9pc1ZlcnRpY2FsKCk/ZS54OmUueSksbi5fZHJhZ0NhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKG4pKX07bi5fZHJhZ0ludGVyYWN0aW9uLm9uRHJhZyhvKTt2YXIgYT1mdW5jdGlvbih0LGUpe2kmJihpPSExLG4uX2RyYWdFbmRDYWxsYmFja3MuY2FsbENhbGxiYWNrcyhuKSl9O3JldHVybiBuLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnRW5kKGEpLG4uX2Rpc2Nvbm5lY3RJbnRlcmFjdGlvbj1mdW5jdGlvbigpe24uX2RyYWdJbnRlcmFjdGlvbi5vZmZEcmFnU3RhcnQociksbi5fZHJhZ0ludGVyYWN0aW9uLm9mZkRyYWcobyksbi5fZHJhZ0ludGVyYWN0aW9uLm9mZkRyYWdFbmQoYSksbi5fZHJhZ0ludGVyYWN0aW9uLmRldGFjaCgpfSxuLl9kcmFnU3RhcnRDYWxsYmFja3M9bmV3IFNtdC5DYWxsYmFja1NldCxuLl9kcmFnQ2FsbGJhY2tzPW5ldyBTbXQuQ2FsbGJhY2tTZXQsbi5fZHJhZ0VuZENhbGxiYWNrcz1uZXcgU210LkNhbGxiYWNrU2V0LG59cmV0dXJuIERmdC5fX2V4dGVuZHMoZSx0KSxlLnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXt0LnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl9kZXRlY3Rpb25FZGdlPXRoaXMuY29udGVudCgpLmFwcGVuZCgibGluZSIpLnN0eWxlcyh7b3BhY2l0eTowLHN0cm9rZToicGluayIsInBvaW50ZXItZXZlbnRzIjoidmlzaWJsZVN0cm9rZSJ9KS5jbGFzc2VkKCJkcmFnLWVkZ2UiLCEwKX0sZS5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXtyZXR1cm4gdC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHkuY2FsbCh0aGlzKSx0aGlzLl9kZXRlY3Rpb25FZGdlLmF0dHJzKHt4MTp0aGlzLl9pc1ZlcnRpY2FsKCk/dGhpcy5waXhlbFBvc2l0aW9uKCk6MCx5MTp0aGlzLl9pc1ZlcnRpY2FsKCk/MDp0aGlzLnBpeGVsUG9zaXRpb24oKSx4Mjp0aGlzLl9pc1ZlcnRpY2FsKCk/dGhpcy5waXhlbFBvc2l0aW9uKCk6dGhpcy53aWR0aCgpLHkyOnRoaXMuX2lzVmVydGljYWwoKT90aGlzLmhlaWdodCgpOnRoaXMucGl4ZWxQb3NpdGlvbigpLCJzdHJva2Utd2lkdGgiOjIqdGhpcy5fZGV0ZWN0aW9uUmFkaXVzfSksdGhpc30sZS5wcm90b3R5cGUuZGV0ZWN0aW9uUmFkaXVzPWZ1bmN0aW9uKHQpe2lmKG51bGw9PXQpcmV0dXJuIHRoaXMuX2RldGVjdGlvblJhZGl1cztpZih0PDApdGhyb3cgbmV3IEVycm9yKCJkZXRlY3Rpb24gcmFkaXVzIGNhbm5vdCBiZSBuZWdhdGl2ZS4iKTtyZXR1cm4gdGhpcy5fZGV0ZWN0aW9uUmFkaXVzPXQsdGhpcy5yZW5kZXIoKSx0aGlzfSxlLnByb3RvdHlwZS5lbmFibGVkPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX2VuYWJsZWQ6KHRoaXMuX2VuYWJsZWQ9dCx0P3RoaXMuYWRkQ2xhc3MoImVuYWJsZWQiKTp0aGlzLnJlbW92ZUNsYXNzKCJlbmFibGVkIiksdGhpcy5fZHJhZ0ludGVyYWN0aW9uLmVuYWJsZWQodCksdGhpcyl9LGUucHJvdG90eXBlLm9uRHJhZ1N0YXJ0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9kcmFnU3RhcnRDYWxsYmFja3MuYWRkKHQpLHRoaXN9LGUucHJvdG90eXBlLm9mZkRyYWdTdGFydD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmRlbGV0ZSh0KSx0aGlzfSxlLnByb3RvdHlwZS5vbkRyYWc9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2RyYWdDYWxsYmFja3MuYWRkKHQpLHRoaXN9LGUucHJvdG90eXBlLm9mZkRyYWc9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2RyYWdDYWxsYmFja3MuZGVsZXRlKHQpLHRoaXN9LGUucHJvdG90eXBlLm9uRHJhZ0VuZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZHJhZ0VuZENhbGxiYWNrcy5hZGQodCksdGhpc30sZS5wcm90b3R5cGUub2ZmRHJhZ0VuZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZHJhZ0VuZENhbGxiYWNrcy5kZWxldGUodCksdGhpc30sZS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dC5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuX2RyYWdTdGFydENhbGxiYWNrcy5mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gZS5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmRlbGV0ZSh0KX0pKSx0aGlzLl9kcmFnQ2FsbGJhY2tzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3JldHVybiBlLl9kcmFnQ2FsbGJhY2tzLmRlbGV0ZSh0KX0pKSx0aGlzLl9kcmFnRW5kQ2FsbGJhY2tzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3JldHVybiBlLl9kcmFnRW5kQ2FsbGJhY2tzLmRlbGV0ZSh0KX0pKSx0aGlzLl9kaXNjb25uZWN0SW50ZXJhY3Rpb24oKX0sZX0pKG9ndC5HdWlkZUxpbmVMYXllcik7ZS5EcmFnTGluZUxheWVyPW59KSksc2d0PWJlKChmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIG4odCxlLG4pe3ZhciBpPXt9O2lmKHZvaWQgMCE9PW4pZm9yKHZhciByPTA7cjxuLmxlbmd0aDtyKyspaVtuW3JdXT1uW3ItMV07cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciByLG89dC5zY2FsZShuKTtpZighZSlyZXR1cm4gbzt2YXIgYT12b2lkIDA9PT1pW25dP3ZvaWQgMDp0LnNjYWxlKGlbbl0pO3JldHVybiB2b2lkIDAhPT1hJiYocj1hKyhvLWEpLzIpLHJ9fQovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGk9KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgaT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkuYWRkQ2xhc3MoImdyaWRsaW5lcyIpLGkuX3hTY2FsZT1lLGkuX3lTY2FsZT1uLGkuX3JlbmRlckNhbGxiYWNrPWZ1bmN0aW9uKHQpe3JldHVybiBpLnJlbmRlcigpfSxpLl94U2NhbGUmJmkuX3hTY2FsZS5vblVwZGF0ZShpLl9yZW5kZXJDYWxsYmFjayksaS5feVNjYWxlJiZpLl95U2NhbGUub25VcGRhdGUoaS5fcmVuZGVyQ2FsbGJhY2spLGl9cmV0dXJuIERmdC5fX2V4dGVuZHMoZSx0KSxlLnByb3RvdHlwZS5iZXR3ZWVuWD1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dD90aGlzLl9iZXR3ZWVuWDoodCE9PXRoaXMuX2JldHdlZW5YJiYodGhpcy5fYmV0d2Vlblg9dCx0aGlzLnJlbmRlcigpKSx0aGlzKX0sZS5wcm90b3R5cGUuYmV0d2Vlblk9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQ/dGhpcy5fYmV0d2Vlblk6KHQhPT10aGlzLl9iZXR3ZWVuWSYmKHRoaXMuX2JldHdlZW5ZPXQsdGhpcy5yZW5kZXIoKSksdGhpcyl9LGUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtyZXR1cm4gdC5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuX3hTY2FsZSYmdGhpcy5feFNjYWxlLm9mZlVwZGF0ZSh0aGlzLl9yZW5kZXJDYWxsYmFjayksdGhpcy5feVNjYWxlJiZ0aGlzLl95U2NhbGUub2ZmVXBkYXRlKHRoaXMuX3JlbmRlckNhbGxiYWNrKSx0aGlzfSxlLnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXt0LnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl94TGluZXNDb250YWluZXI9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIikuY2xhc3NlZCgieC1ncmlkbGluZXMiLCEwKSx0aGlzLl95TGluZXNDb250YWluZXI9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIikuY2xhc3NlZCgieS1ncmlkbGluZXMiLCEwKX0sZS5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXtyZXR1cm4gdC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHkuY2FsbCh0aGlzKSx0aGlzLl9yZWRyYXdYTGluZXMoKSx0aGlzLl9yZWRyYXdZTGluZXMoKSx0aGlzfSxlLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0PWZ1bmN0aW9uKGUsbixpKXtyZXR1cm4gdC5wcm90b3R5cGUuY29tcHV0ZUxheW91dC5jYWxsKHRoaXMsZSxuLGkpLG51bGwhPXRoaXMuX3hTY2FsZSYmdGhpcy5feFNjYWxlLnJhbmdlKFswLHRoaXMud2lkdGgoKV0pLG51bGwhPXRoaXMuX3lTY2FsZSYmdGhpcy5feVNjYWxlLnJhbmdlKFt0aGlzLmhlaWdodCgpLDBdKSx0aGlzfSxlLnByb3RvdHlwZS5fcmVkcmF3WExpbmVzPWZ1bmN0aW9uKCl7aWYodGhpcy5feFNjYWxlKXt2YXIgdD10aGlzLmJldHdlZW5YKCksZT10aGlzLl94U2NhbGUudGlja3MoKS5zbGljZSh0PzE6MCksaT10aGlzLl94TGluZXNDb250YWluZXIuc2VsZWN0QWxsKCJsaW5lIikuZGF0YShlKTtpLmVudGVyKCkuYXBwZW5kKCJsaW5lIikubWVyZ2UoaSkuYXR0cigieDEiLG4odGhpcy5feFNjYWxlLHQsdGhpcy5feFNjYWxlLnRpY2tzKCkpKS5hdHRyKCJ5MSIsMCkuYXR0cigieDIiLG4odGhpcy5feFNjYWxlLHQsdGhpcy5feFNjYWxlLnRpY2tzKCkpKS5hdHRyKCJ5MiIsdGhpcy5oZWlnaHQoKSkuY2xhc3NlZCgiYmV0d2VlbmxpbmUiLHQpLmNsYXNzZWQoInplcm9saW5lIiwoZnVuY3Rpb24odCl7cmV0dXJuIDA9PT10fSkpLGkuZXhpdCgpLnJlbW92ZSgpfX0sZS5wcm90b3R5cGUuX3JlZHJhd1lMaW5lcz1mdW5jdGlvbigpe2lmKHRoaXMuX3lTY2FsZSl7dmFyIHQ9dGhpcy5iZXR3ZWVuWSgpLGU9dGhpcy5feVNjYWxlLnRpY2tzKCkuc2xpY2UodD8xOjApLGk9dGhpcy5feUxpbmVzQ29udGFpbmVyLnNlbGVjdEFsbCgibGluZSIpLmRhdGEoZSk7aS5lbnRlcigpLmFwcGVuZCgibGluZSIpLm1lcmdlKGkpLmF0dHIoIngxIiwwKS5hdHRyKCJ5MSIsbih0aGlzLl95U2NhbGUsdCx0aGlzLl95U2NhbGUudGlja3MoKSkpLmF0dHIoIngyIix0aGlzLndpZHRoKCkpLmF0dHIoInkyIixuKHRoaXMuX3lTY2FsZSx0LHRoaXMuX3lTY2FsZS50aWNrcygpKSkuY2xhc3NlZCgiYmV0d2VlbmxpbmUiLHQpLmNsYXNzZWQoInplcm9saW5lIiwoZnVuY3Rpb24odCl7cmV0dXJuIDA9PT10fSkpLGkuZXhpdCgpLnJlbW92ZSgpfX0sZX0pKFRtdC5Db21wb25lbnQpO2UuR3JpZGxpbmVzPWl9KSksbGd0PWJlKChmdW5jdGlvbih0LGUpewovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt2YXIgZT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGUuX2RldGFjaENhbGxiYWNrPWZ1bmN0aW9uKHQpe3JldHVybiBlLnJlbW92ZSh0KX0sZX1yZXR1cm4gRGZ0Ll9fZXh0ZW5kcyhlLHQpLGUucHJvdG90eXBlLmFuY2hvcj1mdW5jdGlvbihlKXt2YXIgbj10aGlzO3JldHVybiBlPU5mdC5jb2VyY2VFeHRlcm5hbEQzKGUpLHQucHJvdG90eXBlLmFuY2hvci5jYWxsKHRoaXMsZSksdGhpcy5fZm9yRWFjaCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuYW5jaG9yKG4uZWxlbWVudCgpKX0pKSx0aGlzfSxlLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZm9yRWFjaCgoZnVuY3Rpb24odCl7cmV0dXJuIHQucmVuZGVyKCl9KSksdGhpc30sZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcigiaGFzKCkgaXMgbm90IGltcGxlbWVudGVkIG9uIENvbXBvbmVudENvbnRhaW5lciIpfSxlLnByb3RvdHlwZS5fYWRvcHRBbmRBbmNob3I9ZnVuY3Rpb24odCl7dC5wYXJlbnQodGhpcyksdC5vbkRldGFjaCh0aGlzLl9kZXRhY2hDYWxsYmFjayksdGhpcy5faXNBbmNob3JlZCYmdC5hbmNob3IodGhpcy5lbGVtZW50KCkpfSxlLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaGFzKHQpJiYodC5vZmZEZXRhY2godGhpcy5fZGV0YWNoQ2FsbGJhY2spLHRoaXMuX3JlbW92ZSh0KSx0LmRldGFjaCgpLHRoaXMucmVkcmF3KCkpLHRoaXN9LGUucHJvdG90eXBlLl9yZW1vdmU9ZnVuY3Rpb24odCl7cmV0dXJuITF9LGUucHJvdG90eXBlLl9mb3JFYWNoPWZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcigiX2ZvckVhY2goKSBpcyBub3QgaW1wbGVtZW50ZWQgb24gQ29tcG9uZW50Q29udGFpbmVyIil9LGUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0LnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyksdGhpcy5fZm9yRWFjaCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuZGVzdHJveSgpfSkpfSxlLnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGU9ZnVuY3Rpb24oKXt0aGlzLl9mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gdC5pbnZhbGlkYXRlQ2FjaGUoKX0pKX0sZX0pKFRtdC5Db21wb25lbnQpO2UuQ29tcG9uZW50Q29udGFpbmVyPW59KSksY2d0PWJlKChmdW5jdGlvbih0LGUpewovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dm9pZCAwPT09ZSYmKGU9W10pO3ZhciBuPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5fY29tcG9uZW50cz1bXSxuLmFkZENsYXNzKCJjb21wb25lbnQtZ3JvdXAiKSxlLmZvckVhY2goKGZ1bmN0aW9uKHQpe3JldHVybiBuLmFwcGVuZCh0KX0pKSxufXJldHVybiBEZnQuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUuX2ZvckVhY2g9ZnVuY3Rpb24odCl7dGhpcy5jb21wb25lbnRzKCkuZm9yRWFjaCh0KX0sZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jb21wb25lbnRzLmluZGV4T2YodCk+PTB9LGUucHJvdG90eXBlLnJlcXVlc3RlZFNwYWNlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fY29tcG9uZW50cy5tYXAoKGZ1bmN0aW9uKG4pe3JldHVybiBuLnJlcXVlc3RlZFNwYWNlKHQsZSl9KSk7cmV0dXJue21pbldpZHRoOlNtdC5NYXRoLm1heChuLChmdW5jdGlvbih0KXtyZXR1cm4gdC5taW5XaWR0aH0pLDApLG1pbkhlaWdodDpTbXQuTWF0aC5tYXgobiwoZnVuY3Rpb24odCl7cmV0dXJuIHQubWluSGVpZ2h0fSksMCl9fSxlLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0PWZ1bmN0aW9uKGUsbixpKXt2YXIgcj10aGlzO3JldHVybiB0LnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcyxlLG4saSksdGhpcy5fZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5jb21wdXRlTGF5b3V0KHt4OjAseTowfSxyLndpZHRoKCksci5oZWlnaHQoKSl9KSksdGhpc30sZS5wcm90b3R5cGUuX3NpemVGcm9tT2ZmZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm57d2lkdGg6dCxoZWlnaHQ6ZX19LGUucHJvdG90eXBlLmZpeGVkV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29tcG9uZW50cy5ldmVyeSgoZnVuY3Rpb24odCl7cmV0dXJuIHQuZml4ZWRXaWR0aCgpfSkpfSxlLnByb3RvdHlwZS5maXhlZEhlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb21wb25lbnRzLmV2ZXJ5KChmdW5jdGlvbih0KXtyZXR1cm4gdC5maXhlZEhlaWdodCgpfSkpfSxlLnByb3RvdHlwZS5jb21wb25lbnRzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbXBvbmVudHMuc2xpY2UoKX0sZS5wcm90b3R5cGUuYXBwZW5kPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10fHx0aGlzLmhhcyh0KXx8KHQuZGV0YWNoKCksdGhpcy5fY29tcG9uZW50cy5wdXNoKHQpLHRoaXMuX2Fkb3B0QW5kQW5jaG9yKHQpLHRoaXMucmVkcmF3KCkpLHRoaXN9LGUucHJvdG90eXBlLl9yZW1vdmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fY29tcG9uZW50cy5pbmRleE9mKHQpO3JldHVybiBlPj0wJiYodGhpcy5fY29tcG9uZW50cy5zcGxpY2UoZSwxKSwhMCl9LGV9KShsZ3QuQ29tcG9uZW50Q29udGFpbmVyKTtlLkdyb3VwPW59KSksdWd0PWJlKChmdW5jdGlvbih0LGUpewovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dmFyIG49dC5jYWxsKHRoaXMpfHx0aGlzO2lmKG4uX3RleHRQYWRkaW5nPTUsbnVsbD09ZSl0aHJvdyBuZXcgRXJyb3IoIkludGVycG9sYXRlZENvbG9yTGVnZW5kIHJlcXVpcmVzIGEgaW50ZXJwb2xhdGVkQ29sb3JTY2FsZSIpO3JldHVybiBuLl9zY2FsZT1lLG4uX3JlZHJhd0NhbGxiYWNrPWZ1bmN0aW9uKHQpe3JldHVybiBuLnJlZHJhdygpfSxuLl9zY2FsZS5vblVwZGF0ZShuLl9yZWRyYXdDYWxsYmFjayksbi5fZm9ybWF0dGVyPUNtdC5nZW5lcmFsKCksbi5fb3JpZW50YXRpb249Imhvcml6b250YWwiLG4uX2V4cGFuZHM9ITEsbi5hZGRDbGFzcygibGVnZW5kIiksbi5hZGRDbGFzcygiaW50ZXJwb2xhdGVkLWNvbG9yLWxlZ2VuZCIpLG59cmV0dXJuIERmdC5fX2V4dGVuZHMoZSx0KSxlLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dC5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuX3NjYWxlLm9mZlVwZGF0ZSh0aGlzLl9yZWRyYXdDYWxsYmFjayl9LGUucHJvdG90eXBlLmZvcm1hdHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dD90aGlzLl9mb3JtYXR0ZXI6KHRoaXMuX2Zvcm1hdHRlcj10LHRoaXMucmVkcmF3KCksdGhpcyl9LGUucHJvdG90eXBlLmV4cGFuZHM9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5fZXhwYW5kczoodGhpcy5fZXhwYW5kcz10LHRoaXMucmVkcmF3KCksdGhpcyl9LGUuX2Vuc3VyZU9yaWVudGF0aW9uPWZ1bmN0aW9uKHQpe2lmKCJob3Jpem9udGFsIj09PSh0PXQudG9Mb3dlckNhc2UoKSl8fCJsZWZ0Ij09PXR8fCJyaWdodCI9PT10KXJldHVybiB0O3Rocm93IG5ldyBFcnJvcignIicrdCsnIiBpcyBub3QgYSB2YWxpZCBvcmllbnRhdGlvbiBmb3IgSW50ZXJwb2xhdGVkQ29sb3JMZWdlbmQnKX0sZS5wcm90b3R5cGUub3JpZW50YXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5fb3JpZW50YXRpb246KHRoaXMuX29yaWVudGF0aW9uPWUuX2Vuc3VyZU9yaWVudGF0aW9uKHQpLHRoaXMucmVkcmF3KCksdGhpcyl9LGUucHJvdG90eXBlLmZpeGVkV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5leHBhbmRzKCl8fHRoaXMuX2lzVmVydGljYWwoKX0sZS5wcm90b3R5cGUuZml4ZWRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5leHBhbmRzKCl8fCF0aGlzLl9pc1ZlcnRpY2FsKCl9LGUucHJvdG90eXBlLl9nZW5lcmF0ZVRpY2tzPWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PWUuX0RFRkFVTFRfTlVNX1NXQVRDSEVTKTt2YXIgbj10aGlzLl9zY2FsZS5kb21haW4oKTtpZigxPT09dClyZXR1cm5bblswXV07Zm9yKHZhciBpPShuWzFdLW5bMF0pLyh0LTEpLHI9W10sbz0wO288dDtvKyspci5wdXNoKG5bMF0raSpvKTtyZXR1cm4gcn0sZS5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7dC5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyksdGhpcy5fc3dhdGNoQ29udGFpbmVyPXRoaXMuY29udGVudCgpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInN3YXRjaC1jb250YWluZXIiLCEwKSx0aGlzLl9zd2F0Y2hCb3VuZGluZ0JveD10aGlzLmNvbnRlbnQoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKCJzd2F0Y2gtYm91bmRpbmctYm94IiwhMCksdGhpcy5fbG93ZXJMYWJlbD10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKGUuTEVHRU5EX0xBQkVMX0NMQVNTLCEwKSx0aGlzLl91cHBlckxhYmVsPXRoaXMuY29udGVudCgpLmFwcGVuZCgiZyIpLmNsYXNzZWQoZS5MRUdFTkRfTEFCRUxfQ0xBU1MsITApO3ZhciBuPW5ldyBhbXQuU3ZnQ29udGV4dCh0aGlzLmNvbnRlbnQoKS5ub2RlKCkpO3RoaXMuX21lYXN1cmVyPW5ldyBhbXQuTWVhc3VyZXIobiksdGhpcy5fd3JhcHBlcj1uZXcgYW10LldyYXBwZXIsdGhpcy5fd3JpdGVyPW5ldyBhbXQuV3JpdGVyKHRoaXMuX21lYXN1cmVyLG4sdGhpcy5fd3JhcHBlcil9LGUucHJvdG90eXBlLnJlcXVlc3RlZFNwYWNlPWZ1bmN0aW9uKHQsbil7dmFyIGkscixvPXRoaXMsYT10aGlzLl9tZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0LHM9YSxsPXRoaXMuX3NjYWxlLmRvbWFpbigpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIG8uX21lYXN1cmVyLm1lYXN1cmUoby5fZm9ybWF0dGVyKHQpKS53aWR0aH0pKSxjPWUuX0RFRkFVTFRfTlVNX1NXQVRDSEVTO2lmKHRoaXMuX2lzVmVydGljYWwoKSl7dmFyIHU9U210Lk1hdGgubWF4KGwsMCk7cj1zK2ErdGhpcy5fdGV4dFBhZGRpbmcrdSt0aGlzLl90ZXh0UGFkZGluZyxpPWMqYX1lbHNlIGk9cythK3Mscj10aGlzLl90ZXh0UGFkZGluZytsWzBdK2MqYStsWzFdK3RoaXMuX3RleHRQYWRkaW5nO3JldHVybnttaW5XaWR0aDpyLG1pbkhlaWdodDppfX0sZS5wcm90b3R5cGUuX2lzVmVydGljYWw9ZnVuY3Rpb24oKXtyZXR1cm4iaG9yaXpvbnRhbCIhPT10aGlzLl9vcmllbnRhdGlvbn0sZS5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3QucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5LmNhbGwodGhpcyk7dmFyIG4saSxyLG8sYSxzLGw9dGhpcy5fc2NhbGUuZG9tYWluKCksYz10aGlzLl9mb3JtYXR0ZXIobFswXSksdT10aGlzLl9tZWFzdXJlci5tZWFzdXJlKGMpLndpZHRoLGg9dGhpcy5fZm9ybWF0dGVyKGxbMV0pLGQ9dGhpcy5fbWVhc3VyZXIubWVhc3VyZShoKS53aWR0aCxwPXRoaXMuX21lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQsZj10aGlzLl90ZXh0UGFkZGluZyxtPXt4OjAseTowfSxnPXt4OjAseTowfSxfPXt4QWxpZ246ImNlbnRlciIseUFsaWduOiJjZW50ZXIiLHRleHRSb3RhdGlvbjowfSx5PXt4QWxpZ246ImNlbnRlciIseUFsaWduOiJjZW50ZXIiLHRleHRSb3RhdGlvbjowfSx2PXt4OjAseTowLHdpZHRoOjAsaGVpZ2h0OjB9O2lmKHRoaXMuX2lzVmVydGljYWwoKSl7cz1NYXRoLmZsb29yKHRoaXMuaGVpZ2h0KCkpO3ZhciBiPU1hdGgubWF4KHUsZCk7YT0odGhpcy53aWR0aCgpLWItMip0aGlzLl90ZXh0UGFkZGluZykvMixuPU1hdGgubWF4KHRoaXMud2lkdGgoKS1hLTIqZi1iLDApLGk9MSxvPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGUuaGVpZ2h0KCktKG4rMSl9LHkueUFsaWduPSJ0b3AiLG0ueT0wLF8ueUFsaWduPSJib3R0b20iLGcueT0wLCJsZWZ0Ij09PXRoaXMuX29yaWVudGF0aW9uPyhyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGYrYitmfSx5LnhBbGlnbj0icmlnaHQiLG0ueD0tKGErbitmKSxfLnhBbGlnbj0icmlnaHQiLGcueD0tKGErbitmKSk6KHI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYX0seS54QWxpZ249ImxlZnQiLG0ueD1hK24rZixfLnhBbGlnbj0ibGVmdCIsZy54PWErbitmKSx2LndpZHRoPW4sdi5oZWlnaHQ9cyppfWVsc2UgYT1NYXRoLm1heChmLCh0aGlzLmhlaWdodCgpLXApLzIpLHM9TWF0aC5tYXgoTWF0aC5mbG9vcih0aGlzLndpZHRoKCktNCpmLXUtZCksMCksbj0xLGk9TWF0aC5tYXgodGhpcy5oZWlnaHQoKS0yKmEsMCkscj1mdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLmZsb29yKHUrMipmKStlfSxvPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGF9LHkueEFsaWduPSJyaWdodCIsbS54PS1mLF8ueEFsaWduPSJsZWZ0IixnLng9Zix2Lnk9YSx2LndpZHRoPXMqbix2LmhlaWdodD1pO3YueD1yKG51bGwsMCksdGhpcy5fdXBwZXJMYWJlbC50ZXh0KCIiKSx0aGlzLl93cml0ZXIud3JpdGUoaCx0aGlzLndpZHRoKCksdGhpcy5oZWlnaHQoKSx5LHRoaXMuX3VwcGVyTGFiZWwubm9kZSgpKSx0aGlzLl91cHBlckxhYmVsLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK20ueCsiLCAiK20ueSsiKSIpLHRoaXMuX2xvd2VyTGFiZWwudGV4dCgiIiksdGhpcy5fd3JpdGVyLndyaXRlKGMsdGhpcy53aWR0aCgpLHRoaXMuaGVpZ2h0KCksXyx0aGlzLl9sb3dlckxhYmVsLm5vZGUoKSksdGhpcy5fbG93ZXJMYWJlbC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitnLngrIiwgIitnLnkrIikiKSx0aGlzLl9zd2F0Y2hCb3VuZGluZ0JveC5hdHRycyh2KTt2YXIgeD10aGlzLl9nZW5lcmF0ZVRpY2tzKHMpLHc9dGhpcy5fc3dhdGNoQ29udGFpbmVyLnNlbGVjdEFsbCgicmVjdC5zd2F0Y2giKS5kYXRhKHgpLFM9dy5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoInN3YXRjaCIsITApLE09dy5tZXJnZShTKTtyZXR1cm4gdy5leGl0KCkucmVtb3ZlKCksTS5hdHRycyh7ZmlsbDpmdW5jdGlvbih0LG4pe3JldHVybiBlLl9zY2FsZS5zY2FsZSh0KX0sd2lkdGg6bixoZWlnaHQ6aSx4OnIseTpvLCJzaGFwZS1yZW5kZXJpbmciOiJjcmlzcEVkZ2VzIn0pLGZtdC5BRERfVElUTEVfRUxFTUVOVFMmJlMuYXBwZW5kKCJ0aXRsZSIpLnRleHQoKGZ1bmN0aW9uKHQpe3JldHVybiBlLl9mb3JtYXR0ZXIodCl9KSksdGhpc30sZS5fREVGQVVMVF9OVU1fU1dBVENIRVM9MTEsZS5MRUdFTkRfTEFCRUxfQ0xBU1M9ImxlZ2VuZC1sYWJlbCIsZX0pKFRtdC5Db21wb25lbnQpO2UuSW50ZXJwb2xhdGVkQ29sb3JMZWdlbmQ9bn0pKSxoZ3Q9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZvaWQgMD09PWUmJihlPSIiKSx2b2lkIDA9PT1uJiYobj0wKTt2YXIgaT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkuYWRkQ2xhc3MoImxhYmVsIiksaS50ZXh0KGUpLGkuYW5nbGUobiksaS54QWxpZ25tZW50KCJjZW50ZXIiKS55QWxpZ25tZW50KCJjZW50ZXIiKSxpLl9wYWRkaW5nPTAsaX1yZXR1cm4gRGZ0Ll9fZXh0ZW5kcyhlLHQpLGUucHJvdG90eXBlLnJlcXVlc3RlZFNwYWNlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fbWVhc3VyZXIubWVhc3VyZSh0aGlzLl90ZXh0KTtyZXR1cm57bWluV2lkdGg6KDA9PT10aGlzLmFuZ2xlKCk/bi53aWR0aDpuLmhlaWdodCkrMip0aGlzLnBhZGRpbmcoKSxtaW5IZWlnaHQ6KDA9PT10aGlzLmFuZ2xlKCk/bi5oZWlnaHQ6bi53aWR0aCkrMip0aGlzLnBhZGRpbmcoKX19LGUucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe3QucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLHRoaXMuX3RleHRDb250YWluZXI9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIik7dmFyIGU9bmV3IGFtdC5TdmdDb250ZXh0KHRoaXMuX3RleHRDb250YWluZXIubm9kZSgpKTt0aGlzLl9tZWFzdXJlcj1uZXcgYW10LkNhY2hlTWVhc3VyZXIoZSksdGhpcy5fd3JhcHBlcj1uZXcgYW10LldyYXBwZXIsdGhpcy5fd3JpdGVyPW5ldyBhbXQuV3JpdGVyKHRoaXMuX21lYXN1cmVyLGUsdGhpcy5fd3JhcHBlciksdGhpcy50ZXh0KHRoaXMuX3RleHQpfSxlLnByb3RvdHlwZS50ZXh0PWZ1bmN0aW9uKHQpe2lmKG51bGw9PXQpcmV0dXJuIHRoaXMuX3RleHQ7aWYoInN0cmluZyIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcigiTGFiZWwudGV4dCgpIG9ubHkgdGFrZXMgc3RyaW5ncyBhcyBpbnB1dCIpO3JldHVybiB0aGlzLl90ZXh0PXQsdGhpcy5yZWRyYXcoKSx0aGlzfSxlLnByb3RvdHlwZS5hbmdsZT1mdW5jdGlvbih0KXtpZihudWxsPT10KXJldHVybiB0aGlzLl9hbmdsZTtpZigodCU9MzYwKT4xODA/dC09MzYwOnQ8LTE4MCYmKHQrPTM2MCksLTkwIT09dCYmMCE9PXQmJjkwIT09dCl0aHJvdyBuZXcgRXJyb3IodCsiIGlzIG5vdCBhIHZhbGlkIGFuZ2xlIGZvciBMYWJlbCIpO3JldHVybiB0aGlzLl9hbmdsZT10LHRoaXMucmVkcmF3KCksdGhpc30sZS5wcm90b3R5cGUucGFkZGluZz1mdW5jdGlvbih0KXtpZihudWxsPT10KXJldHVybiB0aGlzLl9wYWRkaW5nO2lmKCh0PSt0KTwwKXRocm93IG5ldyBFcnJvcih0KyIgaXMgbm90IGEgdmFsaWQgcGFkZGluZyB2YWx1ZS4gQ2Fubm90IGJlIGxlc3MgdGhhbiAwLiIpO3JldHVybiB0aGlzLl9wYWRkaW5nPXQsdGhpcy5yZWRyYXcoKSx0aGlzfSxlLnByb3RvdHlwZS5maXhlZFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGUucHJvdG90eXBlLmZpeGVkSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuITB9LGUucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7dC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHkuY2FsbCh0aGlzKSx0aGlzLl90ZXh0Q29udGFpbmVyLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpO3ZhciBlPXRoaXMuX21lYXN1cmVyLm1lYXN1cmUodGhpcy5fdGV4dCksbj1NYXRoLm1heChNYXRoLm1pbigodGhpcy5oZWlnaHQoKS1lLmhlaWdodCkvMix0aGlzLnBhZGRpbmcoKSksMCksaT1NYXRoLm1heChNYXRoLm1pbigodGhpcy53aWR0aCgpLWUud2lkdGgpLzIsdGhpcy5wYWRkaW5nKCkpLDApO3RoaXMuX3RleHRDb250YWluZXIuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIraSsiLCIrbisiKSIpO3ZhciByPXRoaXMud2lkdGgoKS0yKmksbz10aGlzLmhlaWdodCgpLTIqbixhPXt4QWxpZ246dGhpcy54QWxpZ25tZW50KCkseUFsaWduOnRoaXMueUFsaWdubWVudCgpLHRleHRSb3RhdGlvbjp0aGlzLmFuZ2xlKCl9O3JldHVybiB0aGlzLl93cml0ZXIud3JpdGUodGhpcy5fdGV4dCxyLG8sYSksdGhpc30sZS5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7dC5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlLmNhbGwodGhpcyksdGhpcy5fbWVhc3VyZXIucmVzZXQoKX0sZX0pKFRtdC5Db21wb25lbnQpO2UuTGFiZWw9bjt2YXIgaT0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGkpe3ZhciByPXQuY2FsbCh0aGlzLG4saSl8fHRoaXM7cmV0dXJuIHIuYWRkQ2xhc3MoZS5USVRMRV9MQUJFTF9DTEFTUykscn1yZXR1cm4gRGZ0Ll9fZXh0ZW5kcyhlLHQpLGUuVElUTEVfTEFCRUxfQ0xBU1M9InRpdGxlLWxhYmVsIixlfSkobik7ZS5UaXRsZUxhYmVsPWk7dmFyIHI9KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpKXt2YXIgcj10LmNhbGwodGhpcyxuLGkpfHx0aGlzO3JldHVybiByLmFkZENsYXNzKGUuQVhJU19MQUJFTF9DTEFTUykscn1yZXR1cm4gRGZ0Ll9fZXh0ZW5kcyhlLHQpLGUuQVhJU19MQUJFTF9DTEFTUz0iYXhpcy1sYWJlbCIsZX0pKG4pO2UuQXhpc0xhYmVsPXJ9KSksZGd0PWJlKChmdW5jdGlvbih0LGUpewovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5jaXJjbGU9ZnVuY3Rpb24gbigpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gaWR0LnN5bWJvbCgpLnR5cGUoaWR0LnN5bWJvbENpcmNsZSkuc2l6ZShNYXRoLlBJKk1hdGgucG93KHQvMiwyKSl9fSxlLnNxdWFyZT1mdW5jdGlvbiBpKCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBpZHQuc3ltYm9sKCkudHlwZShpZHQuc3ltYm9sU3F1YXJlKS5zaXplKE1hdGgucG93KHQsMikpfX0sZS5jcm9zcz1mdW5jdGlvbiByKCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBpZHQuc3ltYm9sKCkudHlwZShpZHQuc3ltYm9sQ3Jvc3MpLnNpemUoNS85Kk1hdGgucG93KHQsMikpfX0sZS5kaWFtb25kPWZ1bmN0aW9uIG8oKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGlkdC5zeW1ib2woKS50eXBlKGlkdC5zeW1ib2xEaWFtb25kKS5zaXplKE1hdGgudGFuKE1hdGguUEkvNikqTWF0aC5wb3codCwyKS8yKX19LGUudHJpYW5nbGU9ZnVuY3Rpb24gYSgpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gaWR0LnN5bWJvbCgpLnR5cGUoaWR0LnN5bWJvbFRyaWFuZ2xlKS5zaXplKE1hdGguc3FydCgzKSpNYXRoLnBvdyh0LzIsMikpfX0sZS5zdGFyPWZ1bmN0aW9uIHMoKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGlkdC5zeW1ib2woKS50eXBlKGlkdC5zeW1ib2xTdGFyKS5zaXplKC44OTA4MTMwOTE1MjkyODUyKk1hdGgucG93KHQvMiwyKSl9fTt2YXIgbD0zKigxL01hdGguc3FydCgxMikvMisxKTtlLnd5ZT1mdW5jdGlvbiBjKCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBpZHQuc3ltYm9sKCkudHlwZShpZHQuc3ltYm9sV3llKS5zaXplKGwqTWF0aC5wb3codC8yLjQsMikpfX19KSkscGd0PWJlKChmdW5jdGlvbih0LGUpewovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dm9pZCAwPT09dCYmKHQ9W10pLHZvaWQgMD09PWUmJihlPTApLHZvaWQgMD09PW4mJihuPTEvMCksdGhpcy5jb2x1bW5zPXQsdGhpcy5ib3R0b21QYWRkaW5nPWUsdGhpcy5tYXhXaWR0aD1ufXJldHVybiB0LnByb3RvdHlwZS5hZGRDb2x1bW49ZnVuY3Rpb24odCl7dmFyIGU9dC53aWR0aCxuPXRoaXMuZ2V0V2lkdGhBdmFpbGFibGUoKTt0LndpZHRoPU1hdGgubWluKG4sZSksdGhpcy5jb2x1bW5zLnB1c2godCl9LHQucHJvdG90eXBlLmdldEJvdW5kcz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5jb2x1bW5zW3RdLG49MCxpPTA7aTx0O2krKyluKz10aGlzLmNvbHVtbnNbaV0ud2lkdGg7cmV0dXJue3RvcExlZnQ6e3g6bix5OjB9LGJvdHRvbVJpZ2h0Ont4Om4rZS53aWR0aCx5OmUuaGVpZ2h0fX19LHQucHJvdG90eXBlLmdldEhlaWdodD1mdW5jdGlvbigpe3JldHVybiBTbXQuTWF0aC5tYXgodGhpcy5jb2x1bW5zLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0fSkpLDApK3RoaXMuYm90dG9tUGFkZGluZ30sdC5wcm90b3R5cGUuZ2V0V2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5taW4odGhpcy5jb2x1bW5zLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlLndpZHRofSksMCksdGhpcy5tYXhXaWR0aCl9LHQucHJvdG90eXBlLmdldFdpZHRoQXZhaWxhYmxlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nZXRXaWR0aCgpO3JldHVybiBNYXRoLm1heCh0aGlzLm1heFdpZHRoLXQsMCl9LHR9KSgpLGk9KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixpKXt2b2lkIDA9PT10JiYodD0xLzApLHZvaWQgMD09PWUmJihlPTEvMCksdm9pZCAwPT09biYmKG49MCksdm9pZCAwPT09aSYmKGk9W10pLHRoaXMubWF4V2lkdGg9dCx0aGlzLm1heEhlaWdodD1lLHRoaXMucGFkZGluZz1uLHRoaXMucm93cz1pfXJldHVybiB0LnByb3RvdHlwZS5hZGRSb3c9ZnVuY3Rpb24odCl7dC5tYXhXaWR0aD10aGlzLm1heFdpZHRoLTIqdGhpcy5wYWRkaW5nLHRoaXMucm93cy5wdXNoKHQpfSx0LnByb3RvdHlwZS5nZXRDb2x1bW5Cb3VuZHM9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLmdldFJvd0JvdW5kcyh0KSxpPXRoaXMucm93c1t0XS5nZXRCb3VuZHMoZSk7cmV0dXJuIGkudG9wTGVmdC54Kz1uLnRvcExlZnQueCxpLmJvdHRvbVJpZ2h0LngrPW4udG9wTGVmdC54LGkudG9wTGVmdC55Kz1uLnRvcExlZnQueSxpLmJvdHRvbVJpZ2h0LnkrPW4udG9wTGVmdC55LGl9LHQucHJvdG90eXBlLmdldFJvd0JvdW5kcz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5wYWRkaW5nLG49dGhpcy5wYWRkaW5nLGk9MDtpPHQ7aSsrKW4rPXRoaXMucm93c1tpXS5nZXRIZWlnaHQoKTtyZXR1cm57dG9wTGVmdDp7eDplLHk6bn0sYm90dG9tUmlnaHQ6e3g6ZSt0aGlzLnJvd3NbdF0uZ2V0V2lkdGgoKSx5Om4rdGhpcy5yb3dzW3RdLmdldEhlaWdodCgpfX19LHQucHJvdG90eXBlLmdldEhlaWdodD1mdW5jdGlvbigpe3JldHVybiBNYXRoLm1pbih0aGlzLnJvd3MucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiB0K2UuZ2V0SGVpZ2h0KCl9KSwwKSsyKnRoaXMucGFkZGluZyx0aGlzLm1heEhlaWdodCl9LHQucHJvdG90eXBlLmdldFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgubWluKFNtdC5NYXRoLm1heCh0aGlzLnJvd3MubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRXaWR0aCgpfSkpLDApKzIqdGhpcy5wYWRkaW5nLHRoaXMubWF4V2lkdGgpfSx0fSkoKSxyPShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3ZhciBuPXQuY2FsbCh0aGlzKXx8dGhpcztpZihuLl9wYWRkaW5nPTUsbi5fcm93Qm90dG9tUGFkZGluZz0zLG4uYWRkQ2xhc3MoImxlZ2VuZCIpLG4ubWF4RW50cmllc1BlclJvdygxKSxudWxsPT1lKXRocm93IG5ldyBFcnJvcigiTGVnZW5kIHJlcXVpcmVzIGEgY29sb3JTY2FsZSIpO3JldHVybiBuLl9jb2xvclNjYWxlPWUsbi5fcmVkcmF3Q2FsbGJhY2s9ZnVuY3Rpb24odCl7cmV0dXJuIG4ucmVkcmF3KCl9LG4uX2NvbG9yU2NhbGUub25VcGRhdGUobi5fcmVkcmF3Q2FsbGJhY2spLG4uX2Zvcm1hdHRlcj1DbXQuaWRlbnRpdHkoKSxuLm1heExpbmVzUGVyRW50cnkoMSksbi54QWxpZ25tZW50KCJyaWdodCIpLnlBbGlnbm1lbnQoInRvcCIpLG4uY29tcGFyYXRvcigoZnVuY3Rpb24odCxlKXt2YXIgaT1uLl9jb2xvclNjYWxlLmRvbWFpbigpLnNsaWNlKCkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gbi5fZm9ybWF0dGVyKHQpfSkpO3JldHVybiBpLmluZGV4T2YodCktaS5pbmRleE9mKGUpfSkpLG4uX3N5bWJvbEZhY3RvcnlBY2Nlc3Nvcj1mdW5jdGlvbigpe3JldHVybiBkZ3QuY2lyY2xlKCl9LG4uX3N5bWJvbE9wYWNpdHlBY2Nlc3Nvcj1mdW5jdGlvbigpe3JldHVybiAxfSxufXJldHVybiBEZnQuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7dC5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyk7dmFyIG49dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIikuY2xhc3NlZChlLkxFR0VORF9ST1dfQ0xBU1MsITApO24uYXBwZW5kKCJnIikuY2xhc3NlZChlLkxFR0VORF9FTlRSWV9DTEFTUywhMCkuYXBwZW5kKCJ0ZXh0Iik7dmFyIGk9bmV3IGFtdC5TdmdDb250ZXh0KG4ubm9kZSgpLG51bGwsZm10LkFERF9USVRMRV9FTEVNRU5UUyk7dGhpcy5fbWVhc3VyZXI9bmV3IGFtdC5DYWNoZU1lYXN1cmVyKGkpLHRoaXMuX3dyYXBwZXI9KG5ldyBhbXQuV3JhcHBlcikubWF4TGluZXModGhpcy5tYXhMaW5lc1BlckVudHJ5KCkpLHRoaXMuX3dyaXRlcj1uZXcgYW10LldyaXRlcih0aGlzLl9tZWFzdXJlcixpLHRoaXMuX3dyYXBwZXIpfSxlLnByb3RvdHlwZS5mb3JtYXR0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5fZm9ybWF0dGVyOih0aGlzLl9mb3JtYXR0ZXI9dCx0aGlzLnJlZHJhdygpLHRoaXMpfSxlLnByb3RvdHlwZS5tYXhFbnRyaWVzUGVyUm93PWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX21heEVudHJpZXNQZXJSb3c6KHRoaXMuX21heEVudHJpZXNQZXJSb3c9dCx0aGlzLnJlZHJhdygpLHRoaXMpfSxlLnByb3RvdHlwZS5tYXhMaW5lc1BlckVudHJ5PWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX21heExpbmVzUGVyRW50cnk6KHRoaXMuX21heExpbmVzUGVyRW50cnk9dCx0aGlzLnJlZHJhdygpLHRoaXMpfSxlLnByb3RvdHlwZS5tYXhXaWR0aD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9tYXhXaWR0aDoodGhpcy5fbWF4V2lkdGg9dCx0aGlzLnJlZHJhdygpLHRoaXMpfSxlLnByb3RvdHlwZS5jb21wYXJhdG9yPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX2NvbXBhcmF0b3I6KHRoaXMuX2NvbXBhcmF0b3I9dCx0aGlzLnJlZHJhdygpLHRoaXMpfSxlLnByb3RvdHlwZS5jb2xvclNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT10Pyh0aGlzLl9jb2xvclNjYWxlLm9mZlVwZGF0ZSh0aGlzLl9yZWRyYXdDYWxsYmFjayksdGhpcy5fY29sb3JTY2FsZT10LHRoaXMuX2NvbG9yU2NhbGUub25VcGRhdGUodGhpcy5fcmVkcmF3Q2FsbGJhY2spLHRoaXMucmVkcmF3KCksdGhpcyk6dGhpcy5fY29sb3JTY2FsZX0sZS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3QucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKSx0aGlzLl9jb2xvclNjYWxlLm9mZlVwZGF0ZSh0aGlzLl9yZWRyYXdDYWxsYmFjayl9LGUucHJvdG90eXBlLl9idWlsZExlZ2VuZFRhYmxlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxvPXRoaXMuX21lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQsYT1uZXcgaSh0LGUsdGhpcy5fcGFkZGluZykscz10aGlzLl9jb2xvclNjYWxlLmRvbWFpbigpLnNsaWNlKCkuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gci5fY29tcGFyYXRvcihyLl9mb3JtYXR0ZXIodCksci5fZm9ybWF0dGVyKGUpKX0pKSxsPW5ldyBuO3JldHVybiBhLmFkZFJvdyhsKSxsLmJvdHRvbVBhZGRpbmc9dGhpcy5fcm93Qm90dG9tUGFkZGluZyxzLmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7bC5jb2x1bW5zLmxlbmd0aC8yPT09ci5tYXhFbnRyaWVzUGVyUm93KCkmJigobD1uZXcgbikuYm90dG9tUGFkZGluZz1yLl9yb3dCb3R0b21QYWRkaW5nLGEuYWRkUm93KGwpKTt2YXIgaT1sLmdldFdpZHRoQXZhaWxhYmxlKCkscz1yLl9mb3JtYXR0ZXIodCksYz1yLl9tZWFzdXJlci5tZWFzdXJlKHMpLndpZHRoO2ktby1jPDAmJmwuY29sdW1ucy5sZW5ndGg+MSYmKChsPW5ldyBuKS5ib3R0b21QYWRkaW5nPXIuX3Jvd0JvdHRvbVBhZGRpbmcsYS5hZGRSb3cobCkpLGwuYWRkQ29sdW1uKHt3aWR0aDpvLGhlaWdodDpvLGRhdGE6e25hbWU6dCx0eXBlOiJzeW1ib2wifX0pLGk9bC5nZXRXaWR0aEF2YWlsYWJsZSgpO3ZhciB1PU1hdGgubWluKGksYyk7ci5fd3JhcHBlci5tYXhMaW5lcyhyLm1heExpbmVzUGVyRW50cnkoKSk7dmFyIGg9ci5fd3JhcHBlci53cmFwKHMsci5fbWVhc3VyZXIsdSkubm9MaW5lcztsLmFkZENvbHVtbih7d2lkdGg6dSxoZWlnaHQ6aCpvLGRhdGE6e25hbWU6dCx0eXBlOiJ0ZXh0In19KX0pKSxhfSxlLnByb3RvdHlwZS5yZXF1ZXN0ZWRTcGFjZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX2J1aWxkTGVnZW5kVGFibGUoU210Lk1hdGgubWluKFt0aGlzLm1heFdpZHRoKCksdF0sdCksZSk7cmV0dXJue21pbkhlaWdodDpuLmdldEhlaWdodCgpLG1pbldpZHRoOm4uZ2V0V2lkdGgoKX19LGUucHJvdG90eXBlLmVudGl0aWVzQXQ9ZnVuY3Rpb24odCl7dmFyIG49dGhpcztpZighdGhpcy5faXNTZXR1cClyZXR1cm5bXTt2YXIgaT10aGlzLl9idWlsZExlZ2VuZFRhYmxlKHRoaXMud2lkdGgoKSx0aGlzLmhlaWdodCgpKTtyZXR1cm4gaS5yb3dzLnJlZHVjZSgoZnVuY3Rpb24ocixvLGEpe2lmKDAhPT1yLmxlbmd0aClyZXR1cm4gcjt2YXIgcz1pLmdldFJvd0JvdW5kcyhhKTtyZXR1cm4gU210Lk1hdGgud2l0aGluKHQscyk/by5jb2x1bW5zLnJlZHVjZSgoZnVuY3Rpb24ocixvLHMpe3ZhciBsPWkuZ2V0Q29sdW1uQm91bmRzKGEscyk7aWYoU210Lk1hdGgud2l0aGluKHQsbCkpe3ZhciBjPW4uY29udGVudCgpLnNlbGVjdEFsbCgiLiIrZS5MRUdFTkRfUk9XX0NMQVNTKS5ub2RlcygpW2FdLHU9aWR0LnNlbGVjdChjKS5zZWxlY3RBbGwoIi4iK2UuTEVHRU5EX0VOVFJZX0NMQVNTKS5ub2RlcygpW01hdGguZmxvb3Iocy8yKV0saD1pZHQuc2VsZWN0KHUpLnNlbGVjdCgiLiIrZS5MRUdFTkRfU1lNQk9MX0NMQVNTKSxkPVNtdC5ET00uZ2V0VHJhbnNsYXRlVmFsdWVzKGlkdC5zZWxlY3QoYykpLHA9U210LkRPTS5nZXRUcmFuc2xhdGVWYWx1ZXMoaCk7cmV0dXJuW3tib3VuZHM6U210LkRPTS5lbGVtZW50QkJveChpZHQuc2VsZWN0KGMpKSxkYXR1bTpvLmRhdGEubmFtZSxwb3NpdGlvbjp7eDpkWzBdK3BbMF0seTpkWzFdK3BbMV19LHNlbGVjdGlvbjppZHQuc2VsZWN0KHUpLGNvbXBvbmVudDpufV19cmV0dXJuIHJ9KSxyKTpyfSksW10pfSxlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseT1mdW5jdGlvbigpe3QucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5LmNhbGwodGhpcyk7dmFyIG49dGhpcy5fYnVpbGRMZWdlbmRUYWJsZSh0aGlzLndpZHRoKCksdGhpcy5oZWlnaHQoKSk7dGhpcy5jb250ZW50KCkuc2VsZWN0QWxsKCIqIikucmVtb3ZlKCk7dmFyIGk9dGhpcy5jb250ZW50KCkuc2VsZWN0QWxsKCJnLiIrZS5MRUdFTkRfUk9XX0NMQVNTKS5kYXRhKG4ucm93cykscj1pLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChlLkxFR0VORF9ST1dfQ0xBU1MsITApLm1lcmdlKGkpO2kuZXhpdCgpLnJlbW92ZSgpLHIuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCxlKXt2YXIgaT1uLmdldFJvd0JvdW5kcyhlKTtyZXR1cm4idHJhbnNsYXRlKCIraS50b3BMZWZ0LngrIiwgIitpLnRvcExlZnQueSsiKSJ9KSk7dmFyIG89dGhpcztyZXR1cm4gci5lYWNoKChmdW5jdGlvbih0LGkpe2Zvcih2YXIgcj1bXSxhPTA7YTx0LmNvbHVtbnMubGVuZ3RoO2ErPTIpci5wdXNoKFt0LmNvbHVtbnNbYV0sdC5jb2x1bW5zW2ErMV1dKTt2YXIgcz1pZHQuc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgiZy4iK2UuTEVHRU5EX0VOVFJZX0NMQVNTKS5kYXRhKHIpLGw9cy5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoZS5MRUdFTkRfRU5UUllfQ0xBU1MsITApLm1lcmdlKHMpO2wuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsKGZ1bmN0aW9uKHQsZSl7dmFyIG49dFswXTtyZXR1cm4gby5zeW1ib2woKShuLmRhdGEubmFtZSxpKSguNipuLmhlaWdodCkobnVsbCl9KSkuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCxlKXt2YXIgcj10WzBdLG89bi5yb3dzW2ldLmNvbHVtbnMuaW5kZXhPZihyKTtyZXR1cm4idHJhbnNsYXRlKCIrKG4uZ2V0Q29sdW1uQm91bmRzKGksbykudG9wTGVmdC54K3Iud2lkdGgvMikrIiwgIityLmhlaWdodC8yKyIpIn0pKS5hdHRyKCJmaWxsIiwoZnVuY3Rpb24odCl7cmV0dXJuIG8uX2NvbG9yU2NhbGUuc2NhbGUodFswXS5kYXRhLm5hbWUpfSkpLmF0dHIoIm9wYWNpdHkiLChmdW5jdGlvbih0LGUpe3JldHVybiBvLnN5bWJvbE9wYWNpdHkoKSh0WzBdLmRhdGEubmFtZSxpKX0pKS5jbGFzc2VkKGUuTEVHRU5EX1NZTUJPTF9DTEFTUywhMCksbC5hcHBlbmQoImciKS5jbGFzc2VkKCJ0ZXh0LWNvbnRhaW5lciIsITApLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQsZSl7dmFyIHI9bi5yb3dzW2ldLmNvbHVtbnMuaW5kZXhPZih0WzFdKTtyZXR1cm4idHJhbnNsYXRlKCIrbi5nZXRDb2x1bW5Cb3VuZHMoaSxyKS50b3BMZWZ0LngrIiwgMCkifSkpLmVhY2goKGZ1bmN0aW9uKHQsZSxuKXt2YXIgaT1pZHQuc2VsZWN0KHRoaXMpLHI9dFsxXTtvLl93cml0ZXIud3JpdGUoby5fZm9ybWF0dGVyKHIuZGF0YS5uYW1lKSxyLndpZHRoLG8uaGVpZ2h0KCkse3hBbGlnbjoibGVmdCIseUFsaWduOiJ0b3AiLHRleHRSb3RhdGlvbjowfSxpLm5vZGUoKSl9KSkscy5leGl0KCkucmVtb3ZlKCl9KSksdGhpc30sZS5wcm90b3R5cGUuc3ltYm9sPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX3N5bWJvbEZhY3RvcnlBY2Nlc3NvcjoodGhpcy5fc3ltYm9sRmFjdG9yeUFjY2Vzc29yPXQsdGhpcy5yZW5kZXIoKSx0aGlzKX0sZS5wcm90b3R5cGUuc3ltYm9sT3BhY2l0eT1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9zeW1ib2xPcGFjaXR5QWNjZXNzb3I6KHRoaXMuX3N5bWJvbE9wYWNpdHlBY2Nlc3Nvcj0ibnVtYmVyIj09dHlwZW9mIHQ/ZnVuY3Rpb24oKXtyZXR1cm4gdH06dCx0aGlzLnJlbmRlcigpLHRoaXMpfSxlLnByb3RvdHlwZS5maXhlZFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGUucHJvdG90eXBlLmZpeGVkSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuITB9LGUucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZT1mdW5jdGlvbigpe3QucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZS5jYWxsKHRoaXMpLHRoaXMuX21lYXN1cmVyLnJlc2V0KCl9LGUuTEVHRU5EX1JPV19DTEFTUz0ibGVnZW5kLXJvdyIsZS5MRUdFTkRfRU5UUllfQ0xBU1M9ImxlZ2VuZC1lbnRyeSIsZS5MRUdFTkRfU1lNQk9MX0NMQVNTPSJsZWdlbmQtc3ltYm9sIixlfSkoVG10LkNvbXBvbmVudCk7ZS5MZWdlbmQ9cn0pKSxmZ3Q9YmUoKGZ1bmN0aW9uKHQsZSl7dmFyIG47Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSwobj1lLkFuaW1hdG9yfHwoZS5BbmltYXRvcj17fSkpLk1BSU49Im1haW4iLG4uUkVTRVQ9InJlc2V0In0pKTtmdW5jdGlvbiBtZ3QodCl7cmV0dXJuITA9PT0oZnVuY3Rpb24gdChlKXtyZXR1cm4gbnVsbCE9ZSYmIm9iamVjdCI9PXR5cGVvZiBlJiYhMT09PUFycmF5LmlzQXJyYXkoZSl9KSh0KSYmIltvYmplY3QgT2JqZWN0XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9dmFyIGdndD1iZSgoZnVuY3Rpb24odCxlKXsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPTAsaT0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dm9pZCAwPT09dCYmKHQ9W10pLHZvaWQgMD09PWUmJihlPXt9KSx0aGlzLl91cGRhdGVJZD1uKyssdGhpcy5fZGF0YT10LHRoaXMuX21ldGFkYXRhPWUsdGhpcy5fY2FsbGJhY2tzPW5ldyBTbXQuQ2FsbGJhY2tTZXR9cmV0dXJuIHQucHJvdG90eXBlLm9uVXBkYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jYWxsYmFja3MuYWRkKHQpLHRoaXN9LHQucHJvdG90eXBlLm9mZlVwZGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fY2FsbGJhY2tzLmRlbGV0ZSh0KSx0aGlzfSx0LnByb3RvdHlwZS5kYXRhPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX2RhdGE6KHRoaXMuX2RhdGE9dCx0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpLHRoaXMpfSx0LnByb3RvdHlwZS5tZXRhZGF0YT1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9tZXRhZGF0YToodGhpcy5fbWV0YWRhdGE9dCx0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpLHRoaXMpfSx0LnByb3RvdHlwZS51cGRhdGVJZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl91cGRhdGVJZH0sdC5wcm90b3R5cGUuX2Rpc3BhdGNoVXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlSWQ9bisrLHRoaXMuX2NhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKHRoaXMpfSx0fSkoKTtlLkRhdGFzZXQ9aX0pKSxfZ3Q9YmUoKGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGw/dDp0IGluc3RhbmNlb2YgRGF0ZT9vKHQudmFsdWVPZigpKTp0IGluc3RhbmNlb2YgSW10LlNjYWxlP2kodCk6dCBpbnN0YW5jZW9mIGdndC5EYXRhc2V0P3IodCk6KGZ1bmN0aW9uIHQoZSl7dmFyIG4saTtyZXR1cm4hMSE9PW1ndChlKSYmImZ1bmN0aW9uIj09dHlwZW9mKG49ZS5jb25zdHJ1Y3RvcikmJiExIT09bWd0KGk9bi5wcm90b3R5cGUpJiYhMSE9PWkuaGFzT3duUHJvcGVydHkoImlzUHJvdG90eXBlT2YiKX0pKHQpP3ModCk6QXJyYXkuaXNBcnJheSh0KT9hKHQpOm8odCl9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gcyh7ZG9tYWluOnQuZG9tYWluKCkscmFuZ2U6dC5yYW5nZSgpLHVwZGF0ZUlkOnQudXBkYXRlSWQoKSxyZWY6byh0KX0pfWZ1bmN0aW9uIHIodCl7cmV0dXJuIHMoe3JlZjpvKHQpLHVwZGF0ZUlkOnQudXBkYXRlSWQoKX0pfWZ1bmN0aW9uIG8odCl7cmV0dXJuIG5ldyB1KHQpfWZ1bmN0aW9uIGEodCl7cmV0dXJuIG5ldyBjKHQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gbih0KX0pKSl9ZnVuY3Rpb24gcyh0KXt2YXIgZT17fTtmb3IodmFyIGkgaW4gdCl0Lmhhc093blByb3BlcnR5KGkpJiYoZVtpXT1uKHRbaV0pKTtyZXR1cm4gbmV3IGgoZSl9Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICogQGZpbGVvdmVydmlldyBJbXBsZW1lbnRzIHRoZSBTaWduYXR1cmUgQVBJIHRvIGhlbHAgaW4gY29tcGFyaW5nIHdoZW4gdHdvCiAgICAgKiBQbG90dGFibGUgb2JqZWN0cyBoYXZlICJjaGFuZ2VkIi4KICAgICAqCiAgICAgKiBNZW1vaXphdGlvbiBpbiBQbG90dGFibGUgaXMgY29tcGxpY2F0ZWQgYnkgbXV0YWJsZSBzY2FsZXMgYW5kIGRhdGFzZXRzLiBXZSBjYW5ub3Qgc2ltcGx5CiAgICAgKiByZWZlcmVuY2UgY29tcGFyZSB0d28gZS5nLiBzY2FsZXMgc2luY2UgaXQgbWF5IGhhdmUgaW50ZXJuYWxseSBtdXRhdGVkLiBUbyByZXNvbHZlIHRoaXMsCiAgICAgKiB3ZSB3cml0ZSBhIHJlY3Vyc2l2ZSBTaWduYXR1cmUgaW50ZXJmYWNlIHRoYXQgaG9sZHMgYW4gaW1tdXRhYmxlIHNuYXBzaG90IG9mIHdoYXRldmVyCiAgICAgKiBzdGF0ZSB0aGUgc2NhbGUvZGF0YSB3YXMgaW4gYXQgdGhlIHRpbWUuIFRoZW4gb24gbWVtb2l6ZWQgZnVuY3Rpb24gaW52b2NhdGlvbiB3ZSBzaWduIHRoZQogICAgICogbmV3IGlucHV0cyBhbmQgY29tcGFyZSB0aGUgc2lnbmF0dXJlcyB0byBkZWNpZGUgaWYgd2Ugc2hvdWxkIHJlY29tcHV0ZS4KICAgICAqCiAgICAgKiBXZSBtdXN0IGhhbmQtd3JpdGUgYSBzaWduYXR1cmUgZm9yIGVhY2ggY3VzdG9tIGNsYXNzIHdlIHdpc2ggdG8gc3VwcG9ydC4KICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5zaWduPW4sZS5zaWduU2NhbGU9aSxlLnNpZ25EYXRhc2V0PXIsZS5zaWduUmVmPW8sZS5zaWduQXJyYXk9YSxlLnNpZ25PYmo9czt2YXIgbD0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5pc0RpZmZlcmVudD1mdW5jdGlvbih0KXtyZXR1cm4hKHQgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yKXx8dGhpcy5pc1NpZ25hdHVyZURpZmZlcmVudCh0KX0sdH0pKCk7ZS5TaWduYXR1cmU9bDt2YXIgYz0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt2YXIgbj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIG4uYXJyYXk9ZSxufXJldHVybiBEZnQuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUuaXNTaWduYXR1cmVEaWZmZXJlbnQ9ZnVuY3Rpb24odCl7aWYodC5hcnJheS5sZW5ndGghPT10aGlzLmFycmF5Lmxlbmd0aClyZXR1cm4hMDtmb3IodmFyIGU9MDtlPHRoaXMuYXJyYXkubGVuZ3RoO2UrKylpZih0aGlzLmFycmF5W2VdLmlzRGlmZmVyZW50KHQuYXJyYXlbZV0pKXJldHVybiEwO3JldHVybiExfSxlfSkobCk7ZS5BcnJheVNpZ25hdHVyZT1jO3ZhciB1PShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3ZhciBuPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5yZWY9ZSxufXJldHVybiBEZnQuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUuaXNTaWduYXR1cmVEaWZmZXJlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucmVmIT09dC5yZWZ9LGV9KShsKTtlLlJlZmVyZW5jZVNpZ25hdHVyZT11O3ZhciBoPShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3ZhciBuPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5vYmo9ZSxufXJldHVybiBEZnQuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUuaXNTaWduYXR1cmVEaWZmZXJlbnQ9ZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0LmtleXModGhpcy5vYmopLG49T2JqZWN0LmtleXModC5vYmopO2lmKGUubGVuZ3RoIT09bi5sZW5ndGgpcmV0dXJuITA7Zm9yKHZhciBpPTAscj1lO2k8ci5sZW5ndGg7aSsrKXt2YXIgbz1yW2ldO2lmKCF0Lm9iai5oYXNPd25Qcm9wZXJ0eShvKSlyZXR1cm4hMDtpZih0aGlzLm9ialtvXS5pc0RpZmZlcmVudCh0Lm9ialtvXSkpcmV0dXJuITB9cmV0dXJuITF9LGV9KShsKTtlLk9iamVjdFNpZ25hdHVyZT1ofSkpLHlndD1iZSgoZnVuY3Rpb24odCxlKXsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKiBAZmlsZW92ZXJ2aWV3IEltcGxlbWVudHMgYSBmdW5jdGlvbiBtZW1vaXplciB1c2luZyB0aGUgU2lnbmF0dXJlIEFQSS4KICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5tZW1vaXplPWZ1bmN0aW9uIG4odCl7dmFyIGUsbj12b2lkIDAsaT0hMSxyPSExLG89ZnVuY3Rpb24oKXtmb3IodmFyIG89W10sYT0wO2E8YXJndW1lbnRzLmxlbmd0aDthKyspb1thXT1hcmd1bWVudHNbYV07aWYoaSlyZXR1cm4gZTt2YXIgcz1fZ3Quc2lnbkFycmF5KG8pO3JldHVybiB2b2lkIDA9PT1ufHxuLmlzRGlmZmVyZW50KHMpPyhyJiZjb25zb2xlLndhcm4oImNhY2hlIG1pc3MhIGNvbXB1dGluZyIpLG49cyxlPXQuYXBwbHkodGhpcyxvKSk6ciYmY29uc29sZS53YXJuKCJjYWNoZSBoaXQhIiksZX07cmV0dXJuIG8uZG9Mb2NrZWQ9ZnVuY3Rpb24odCl7aWYoaSl0aHJvdyBuZXcgRXJyb3IoIkxvY2tpbmcgYW4gYWxyZWFkeSBsb2NrZWQgbWVtb2l6ZSBmdW5jdGlvbiEiKTtpPSEwO3ZhciBlPXQuYXBwbHkodGhpcyk7cmV0dXJuIGk9ITEsZX0sby5sb2dQZXJmb3JtYW5jZT1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9ITApLHI9dCx0aGlzfSxvfX0pKSx2Z3Q9YmUoKGZ1bmN0aW9uKHQsZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPShmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLm1hcD1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuZXhpc3RzPU9iamVjdC5jcmVhdGUobnVsbCl9cmV0dXJuIHQucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbih0KXtyZXR1cm4gZGVsZXRlIHRoaXMubWFwW3RdLGRlbGV0ZSB0aGlzLmV4aXN0c1t0XSwhMH0sdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm1hcFt0XX0sdC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiEhdGhpcy5leGlzdHNbdF19LHQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLm1hcFt0XT1lLHRoaXMuZXhpc3RzW3RdPSEwLHRoaXN9LHR9KSgpLGk9KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMubWFwPW5ldyBufXJldHVybiB0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubWFwLmdldCh0WzBdKS5nZXQodFsxXSl9LHQucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5tYXAuaGFzKHRbMF0pJiZ0aGlzLm1hcC5nZXQodFswXSkuaGFzKHRbMV0pfSx0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5tYXAuaGFzKHRbMF0pfHx0aGlzLm1hcC5zZXQodFswXSxuZXcgbiksdGhpcy5tYXAuZ2V0KHRbMF0pLnNldCh0WzFdLGUpLHRoaXN9LHQucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5tYXAuaGFzKHRbMF0pJiZ0aGlzLm1hcC5nZXQodFswXSkuZGVsZXRlKHRbMV0pLCEwfSx0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMubWFwPW5ldyBufSx0LnJlc29sdmVyPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm5bbi51cGRhdGVJZCgpLGVdfSx0fSkoKTtmdW5jdGlvbiByKHQpe3ZhciBlPXdlLm1lbW9pemUodCxpLnJlc29sdmVyKTtyZXR1cm4gZS5jYWNoZT1uZXcgaSxlfWUubWVtb2l6ZVByb2plY3Rvcj1yLGUubWVtb2l6ZVByb2plY3RvcnM9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gT2JqZWN0LmtleXModCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dFtlXT1yKHRbZV0pfSkpLHR9fSkpLGJndD1iZSgoZnVuY3Rpb24odCxlKXsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKiBAZmlsZW92ZXJ2aWV3IEltcGxlbWVudHMgYSBjb252ZW5pZW50IHRodW5rIGZ1bmN0aW9uIHRvIGhhbmRsZSB0aGUgY29tbW9uIGNhc2UKICAgICAqIG9mIGNyZWF0aW5nIGEgbWVtb2l6ZWQgZnVuY3Rpb24gdGhhdCB0YWtlcyBpdHMgaW5wdXRzIGZyb20gbXV0YWJsZSBjbGFzcyBwcm9wZXJ0aWVzLgogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLm1lbVRodW5rPWZ1bmN0aW9uIG4oKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdFtlXT1hcmd1bWVudHNbZV07dmFyIG49dC5zbGljZSgwLC0xKSxpPXRbdC5sZW5ndGgtMV0scj14Z3QubWVtb2l6ZShpKSxvPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPW4ubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS5hcHBseSh0KX0pKTtyZXR1cm4gci5hcHBseSh2b2lkIDAsZSl9O3JldHVybiBvfX0pKSx4Z3Q9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxEZnQuX19leHBvcnRTdGFyKHlndCxlKSxEZnQuX19leHBvcnRTdGFyKHZndCxlKSxEZnQuX19leHBvcnRTdGFyKGJndCxlKSxlLnNpZ249X2d0LnNpZ259KSksd2d0PWJlKChmdW5jdGlvbih0LGUpewovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9kcmF3U3RlcD1lfXJldHVybiB0LnByb3RvdHlwZS5nZXREcmF3U3RlcD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kcmF3U3RlcH0sdC5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbih0LGUpe3ZhciBuPWVbZS5sZW5ndGgtMV0uYXR0clRvQXBwbGllZFByb2plY3Rvcjt0aGlzLl9jb250ZXh0LnNhdmUoKSx0aGlzLl9kcmF3U3RlcCh0aGlzLl9jb250ZXh0LHQsbiksdGhpcy5fY29udGV4dC5yZXN0b3JlKCl9LHQucHJvdG90eXBlLmdldFZpc3VhbFByaW1pdGl2ZXM9ZnVuY3Rpb24oKXtyZXR1cm5bXX0sdC5wcm90b3R5cGUuZ2V0VmlzdWFsUHJpbWl0aXZlQXRJbmRleD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbH0sdC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKCl7fSx0fSkoKTtmdW5jdGlvbiBpKHQsZSxuLGkpe2Zvcih2YXIgcj17fSxvPTAsYT1lO288YS5sZW5ndGg7bysrKXt2YXIgcz1hW29dO3QuaGFzT3duUHJvcGVydHkocykmJihyW3NdPXRbc10obixpKSl9cmV0dXJuIHJ9ZnVuY3Rpb24gcih0KXtyZXR1cm4gbnVsbCE9dFsic3Ryb2tlLXdpZHRoIl0/cGFyc2VGbG9hdCh0WyJzdHJva2Utd2lkdGgiXSk6MX1mdW5jdGlvbiBvKHQpe3ZhciBlPXRbInN0cm9rZS1kYXNoYXJyYXkiXTtpZihudWxsIT1lKXRyeXtyZXR1cm4gZS5zcGxpdCgvWyAsXSsvKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBwYXJzZUludCh0LDEwKX0pKX1jYXRjaCh0KXtyZXR1cm4gY29uc29sZS5lcnJvcigiZ2V0U3Ryb2tlRGFzaEFycmF5IGZhaWxlZCB3aXRoOiAiK3QpLFtdfXJldHVybltdfWZ1bmN0aW9uIGEodCxlKXtpZihlLnN0cm9rZSl7dC5saW5lV2lkdGg9cihlKTt2YXIgbj1pZHQuY29sb3IoZS5zdHJva2UpLGk9byhlKTt0LnNldExpbmVEYXNoKGkpLG4ub3BhY2l0eSo9KGZ1bmN0aW9uIGEodCl7dmFyIGU9bnVsbCE9dC5vcGFjaXR5P3BhcnNlRmxvYXQodC5vcGFjaXR5KToxO3JldHVybihudWxsIT10WyJzdHJva2Utb3BhY2l0eSJdP3BhcnNlRmxvYXQodFsic3Ryb2tlLW9wYWNpdHkiXSk6MSkqZX0pKGUpLHQuc3Ryb2tlU3R5bGU9bi50b1N0cmluZygpLHQuc3Ryb2tlKCl9aWYoZS5maWxsKXt2YXIgcz1pZHQuY29sb3IoZS5maWxsKTtzLm9wYWNpdHkqPShmdW5jdGlvbiBsKHQpe3ZhciBlPW51bGwhPXQub3BhY2l0eT9wYXJzZUZsb2F0KHQub3BhY2l0eSk6MTtyZXR1cm4obnVsbCE9dFsiZmlsbC1vcGFjaXR5Il0/cGFyc2VGbG9hdCh0WyJmaWxsLW9wYWNpdHkiXSk6MSkqZX0pKGUpLHQuZmlsbFN0eWxlPXMudG9TdHJpbmcoKSx0LmZpbGwoKX19ZS5DYW52YXNEcmF3ZXI9bixlLkNvbnRleHRTdHlsZUF0dHJzPVsiZmlsbC1vcGFjaXR5IiwiZmlsbCIsIm9wYWNpdHkiLCJzdHJva2Utb3BhY2l0eSIsInN0cm9rZS13aWR0aCIsInN0cm9rZSIsInN0cm9rZS1kYXNoYXJyYXkiXSxlLnJlc29sdmVBdHRyaWJ1dGVzU3Vic2V0V2l0aFN0eWxlcz1mdW5jdGlvbiBzKHQsbixyLG8pe3JldHVybiBpKHQsZS5Db250ZXh0U3R5bGVBdHRycy5jb25jYXQobikscixvKX0sZS5yZXNvbHZlQXR0cmlidXRlcz1pLGUuZ2V0U3Ryb2tlV2lkdGg9cixlLmdldFN0cm9rZURhc2hBcnJheT1vLGUucmVuZGVyQXJlYT1mdW5jdGlvbiBsKHQsZSxuLGkpe3Quc2F2ZSgpLHQuYmVnaW5QYXRoKCksZS5jb250ZXh0KHQpLGUobiksdC5saW5lSm9pbj0icm91bmQiLGEodCxpKSx0LnJlc3RvcmUoKX0sZS5yZW5kZXJMaW5lPWZ1bmN0aW9uIGModCxlLG4saSl7dC5zYXZlKCksdC5iZWdpblBhdGgoKSxlLmNvbnRleHQodCksZShuKSx0LmxpbmVKb2luPSJyb3VuZCIsYSh0LGkpLHQucmVzdG9yZSgpfSxlLnJlbmRlclBhdGhXaXRoU3R5bGU9YX0pKSxTZ3Q9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5fc3ZnRHJhd2VyRmFjdG9yeT10LHRoaXMuX2NhbnZhc0RyYXdlckZhY3Rvcnk9ZX1yZXR1cm4gdC5wcm90b3R5cGUudXNlU1ZHPWZ1bmN0aW9uKHQpe251bGwhPXRoaXMuX2N1cnJlbnREcmF3ZXImJnRoaXMuX2N1cnJlbnREcmF3ZXIucmVtb3ZlKCk7dmFyIGU9dGhpcy5fc3ZnRHJhd2VyRmFjdG9yeSgpO2UuYXR0YWNoVG8odCksdGhpcy5fY3VycmVudERyYXdlcj1lfSx0LnByb3RvdHlwZS51c2VDYW52YXM9ZnVuY3Rpb24odCl7bnVsbCE9dGhpcy5fY3VycmVudERyYXdlciYmdGhpcy5fY3VycmVudERyYXdlci5yZW1vdmUoKSx0aGlzLl9jdXJyZW50RHJhd2VyPXRoaXMuX2NhbnZhc0RyYXdlckZhY3RvcnkodC5ub2RlKCkuZ2V0Q29udGV4dCgiMmQiKSl9LHQucHJvdG90eXBlLmdldERyYXdlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jdXJyZW50RHJhd2VyfSx0LnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oKXtudWxsIT10aGlzLl9jdXJyZW50RHJhd2VyJiZ0aGlzLl9jdXJyZW50RHJhd2VyLnJlbW92ZSgpfSx0LnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKHQsZSl7dGhpcy5fY3VycmVudERyYXdlci5kcmF3KHQsZSl9LHQucHJvdG90eXBlLmdldFZpc3VhbFByaW1pdGl2ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY3VycmVudERyYXdlci5nZXRWaXN1YWxQcmltaXRpdmVzKCl9LHQucHJvdG90eXBlLmdldFZpc3VhbFByaW1pdGl2ZUF0SW5kZXg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2N1cnJlbnREcmF3ZXIuZ2V0VmlzdWFsUHJpbWl0aXZlQXRJbmRleCh0KX0sdH0pKCk7ZS5Qcm94eURyYXdlcj1ufSkpLE1ndD1iZSgoZnVuY3Rpb24odCxlKXsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPShmdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLl9yb290PWlkdC5zZWxlY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKSksdGhpcy5fY2xhc3NOYW1lPWUsdGhpcy5fc3ZnRWxlbWVudE5hbWU9dH1yZXR1cm4gdC5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7dGhpcy5fY3JlYXRlQW5kRGVzdHJveURPTUVsZW1lbnRzKHQpO2Zvcih2YXIgaT0wLHI9ZS5sZW5ndGgsbz1mdW5jdGlvbihyKXt2YXIgbz1lW3JdO1NtdC5XaW5kb3cuc2V0VGltZW91dCgoZnVuY3Rpb24oKXtyZXR1cm4gbi5fZHJhd1N0ZXAobyl9KSxpKSxpKz1vLmFuaW1hdG9yLnRvdGFsVGltZSh0Lmxlbmd0aCl9LGE9MDthPHI7YSsrKW8oYSl9LHQucHJvdG90eXBlLmdldFZpc3VhbFByaW1pdGl2ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09dGhpcy5fY2FjaGVkVmlzdWFsUHJpbWl0aXZlc05vZGVzJiYodGhpcy5fY2FjaGVkVmlzdWFsUHJpbWl0aXZlc05vZGVzPXRoaXMuX3NlbGVjdGlvbi5ub2RlcygpKSx0aGlzLl9jYWNoZWRWaXN1YWxQcmltaXRpdmVzTm9kZXN9LHQucHJvdG90eXBlLmdldFZpc3VhbFByaW1pdGl2ZUF0SW5kZXg9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXRoaXMuX2NhY2hlZFZpc3VhbFByaW1pdGl2ZXNOb2RlTWFwP251bGw6dGhpcy5fY2FjaGVkVmlzdWFsUHJpbWl0aXZlc05vZGVNYXAuZ2V0KHQpfSx0LnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oKXt0aGlzLl9yb290LnJlbW92ZSgpfSx0LnByb3RvdHlwZS5hdHRhY2hUbz1mdW5jdGlvbih0KXt0Lm5vZGUoKS5hcHBlbmRDaGlsZCh0aGlzLl9yb290Lm5vZGUoKSl9LHQucHJvdG90eXBlLmdldFJvb3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm9vdH0sdC5wcm90b3R5cGUuc2VsZWN0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3ZnRWxlbWVudE5hbWV9LHQucHJvdG90eXBlLl9hcHBseURlZmF1bHRBdHRyaWJ1dGVzPWZ1bmN0aW9uKHQpe30sdC5wcm90b3R5cGUuX2NyZWF0ZUFuZERlc3Ryb3lET01FbGVtZW50cz1mdW5jdGlvbih0KXt2YXIgZT10Lm1hcCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbCE9dD97ZDp0LGk6ZX06bnVsbH0pKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT10fSkpLG49dGhpcy5fcm9vdC5zZWxlY3RBbGwodGhpcy5zZWxlY3RvcigpKS5kYXRhKGUpO3RoaXMuX3NlbGVjdGlvbj1uLmVudGVyKCkuYXBwZW5kKHRoaXMuX3N2Z0VsZW1lbnROYW1lKS5tZXJnZShuKSxuLmV4aXQoKS5yZW1vdmUoKTt2YXIgaT1uZXcgU210Lk1hcDt0aGlzLl9zZWxlY3Rpb24uZWFjaCgoZnVuY3Rpb24odCl7aS5zZXQodC5pLHRoaXMpfSkpLHRoaXMuX2NhY2hlZFZpc3VhbFByaW1pdGl2ZXNOb2RlTWFwPWksdGhpcy5fY2FjaGVkVmlzdWFsUHJpbWl0aXZlc05vZGVzPW51bGwsdGhpcy5fc2VsZWN0aW9uLmRhdGEodGhpcy5fc2VsZWN0aW9uLmRhdGEoKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmR9KSkpLG51bGwhPXRoaXMuX2NsYXNzTmFtZSYmdGhpcy5fc2VsZWN0aW9uLmNsYXNzZWQodGhpcy5fY2xhc3NOYW1lLCEwKSx0aGlzLl9hcHBseURlZmF1bHRBdHRyaWJ1dGVzKHRoaXMuX3NlbGVjdGlvbil9LHQucHJvdG90eXBlLl9kcmF3U3RlcD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO1siZmlsbCIsInN0cm9rZSJdLmZvckVhY2goKGZ1bmN0aW9uKG4pe251bGwhPXQuYXR0clRvQXBwbGllZFByb2plY3RvcltuXSYmZS5fc2VsZWN0aW9uLmF0dHIobix0LmF0dHJUb0FwcGxpZWRQcm9qZWN0b3Jbbl0pfSkpLHQuYW5pbWF0b3IuYW5pbWF0ZSh0aGlzLl9zZWxlY3Rpb24sdC5hdHRyVG9BcHBsaWVkUHJvamVjdG9yKSxudWxsIT10aGlzLl9jbGFzc05hbWUmJnRoaXMuX3NlbGVjdGlvbi5jbGFzc2VkKHRoaXMuX2NsYXNzTmFtZSwhMCl9LHR9KSgpO2UuU1ZHRHJhd2VyPW59KSksRWd0PWJlKChmdW5jdGlvbih0LGUpewovKioKICAgICAqIENvcHlyaWdodCAyMDE3LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3ZhciB0PXRoaXM7dGhpcy5zY2FsZT0wLHRoaXMudHJhbnNsYXRlPTAsdGhpcy5jYWNoZWREb21haW49W251bGwsbnVsbF0sdGhpcy5sYXN0U2VlbkRvbWFpbj1bbnVsbCxudWxsXSx0aGlzLnVwZGF0ZURvbWFpbj1mdW5jdGlvbihlKXt0Lmxhc3RTZWVuRG9tYWluPWUuZ2V0VHJhbnNmb3JtYXRpb25Eb21haW4oKTt2YXIgbj1lLnNjYWxlVHJhbnNmb3JtYXRpb24odC5jYWNoZWREb21haW5bMV0pLWUuc2NhbGVUcmFuc2Zvcm1hdGlvbih0LmNhY2hlZERvbWFpblswXSksaT1lLnNjYWxlVHJhbnNmb3JtYXRpb24odC5sYXN0U2VlbkRvbWFpblsxXSktZS5zY2FsZVRyYW5zZm9ybWF0aW9uKHQubGFzdFNlZW5Eb21haW5bMF0pO3Quc2NhbGU9bi9pfHwxLHQudHJhbnNsYXRlPWUuc2NhbGVUcmFuc2Zvcm1hdGlvbih0LmNhY2hlZERvbWFpblswXSktZS5zY2FsZVRyYW5zZm9ybWF0aW9uKHQubGFzdFNlZW5Eb21haW5bMF0pKnQuc2NhbGV8fDB9fXJldHVybiB0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuc2NhbGU9MSx0aGlzLnRyYW5zbGF0ZT0wLHRoaXMuY2FjaGVkRG9tYWluPXRoaXMubGFzdFNlZW5Eb21haW59LHQucHJvdG90eXBlLnNldERvbWFpbj1mdW5jdGlvbih0KXt0aGlzLmNhY2hlZERvbWFpbj10LmdldFRyYW5zZm9ybWF0aW9uRG9tYWluKCl9LHR9KSgpLGk9KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLGkpe3ZhciByPXRoaXM7dGhpcy5yZW5kZXJDYWxsYmFjaz1lLHRoaXMuYXBwbHlUcmFuc2Zvcm1DYWxsYmFjaz1pLHRoaXMuZG9tYWluVHJhbnNmb3JtWD1uZXcgbix0aGlzLmRvbWFpblRyYW5zZm9ybVk9bmV3IG4sdGhpcy5yZW5kZXJEZWZlcnJlZD1mdW5jdGlvbigpe3IuYXBwbHlUcmFuc2Zvcm0oKSxjbGVhclRpbWVvdXQoci50aW1lb3V0VG9rZW4pLHIudGltZW91dFRva2VuPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ci5yZW5kZXJDYWxsYmFjaygpfSksdC5ERUZFUlJFRF9SRU5ERVJJTkdfREVMQVkpfX1yZXR1cm4gdC5wcm90b3R5cGUuc2V0RG9tYWlucz1mdW5jdGlvbih0LGUpe3QmJnRoaXMuZG9tYWluVHJhbnNmb3JtWC5zZXREb21haW4odCksZSYmdGhpcy5kb21haW5UcmFuc2Zvcm1ZLnNldERvbWFpbihlKSx0aGlzLnJlbmRlckRlZmVycmVkKCl9LHQucHJvdG90eXBlLnVwZGF0ZURvbWFpbnM9ZnVuY3Rpb24odCxlKXt0JiZ0aGlzLmRvbWFpblRyYW5zZm9ybVgudXBkYXRlRG9tYWluKHQpLGUmJnRoaXMuZG9tYWluVHJhbnNmb3JtWS51cGRhdGVEb21haW4oZSksdGhpcy5yZW5kZXJEZWZlcnJlZCgpfSx0LnByb3RvdHlwZS5yZXNldFRyYW5zZm9ybXM9ZnVuY3Rpb24oKXt0aGlzLmRvbWFpblRyYW5zZm9ybVgucmVzZXQoKSx0aGlzLmRvbWFpblRyYW5zZm9ybVkucmVzZXQoKSx0aGlzLmFwcGx5VHJhbnNmb3JtKCl9LHQucHJvdG90eXBlLmFwcGx5VHJhbnNmb3JtPWZ1bmN0aW9uKCl7dGhpcy5hcHBseVRyYW5zZm9ybUNhbGxiYWNrKHRoaXMuZG9tYWluVHJhbnNmb3JtWC50cmFuc2xhdGUsdGhpcy5kb21haW5UcmFuc2Zvcm1ZLnRyYW5zbGF0ZSx0aGlzLmRvbWFpblRyYW5zZm9ybVguc2NhbGUsdGhpcy5kb21haW5UcmFuc2Zvcm1ZLnNjYWxlKX0sdC5ERUZFUlJFRF9SRU5ERVJJTkdfREVMQVk9MjAwLHR9KSgpO2UuRGVmZXJyZWRSZW5kZXJlcj1pfSkpLFRndD1iZSgoZnVuY3Rpb24odCxlKXsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuUmVuZGVyZXI9SWZ0Lm1ha2VFbnVtKFsic3ZnIiwiY2FudmFzIl0pO3ZhciBuPShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dmFyIG49dC5jYWxsKHRoaXMpfHx0aGlzO24uX2RhdGFDaGFuZ2VkPSExLG4uX2F0dHJFeHRlbnRzPXt9LG4uX2FuaW1hdGU9ITEsbi5fYW5pbWF0b3JzPXt9LG4uX3Byb3BlcnR5RXh0ZW50cz17fSxuLl9yZXNldEVudGl0eVN0b3JlPWZ1bmN0aW9uKCl7bi5fY2FjaGVkRW50aXR5U3RvcmU9dm9pZCAwfSxuLl9vdmVyZmxvd0hpZGRlbj0hMCxuLmFkZENsYXNzKCJwbG90Iiksbi5fZGF0YXNldFRvRHJhd2VyPW5ldyBTbXQuTWFwLG4uX2F0dHJCaW5kaW5ncz1pZHQubWFwKCksbi5faW5jbHVkZWRWYWx1ZXNQcm92aWRlcj1mdW5jdGlvbih0LGUpe3JldHVybiBuLl9pbmNsdWRlZFZhbHVlc0ZvclNjYWxlKHQsZSl9LG4uX3JlbmRlckNhbGxiYWNrPWZ1bmN0aW9uKCl7cmV0dXJuIG4ucmVuZGVyKCl9LG4uX29uRGF0YXNldFVwZGF0ZUNhbGxiYWNrPWZ1bmN0aW9uKCl7cmV0dXJuIG4uX29uRGF0YXNldFVwZGF0ZSgpfSxuLl9wcm9wZXJ0eUJpbmRpbmdzPWlkdC5tYXAoKTt2YXIgaT0obmV3IEJmdC5FYXNpbmcpLm1heFRvdGFsRHVyYXRpb24oZS5fQU5JTUFUSU9OX01BWF9EVVJBVElPTik7cmV0dXJuIG4uYW5pbWF0b3IoZmd0LkFuaW1hdG9yLk1BSU4saSksbi5hbmltYXRvcihmZ3QuQW5pbWF0b3IuUkVTRVQsbmV3IEJmdC5OdWxsKSxuLl9kZWZlcnJlZFJlc2V0RW50aXR5U3RvcmU9U210LldpbmRvdy5kZWJvdW5jZShFZ3QuRGVmZXJyZWRSZW5kZXJlci5ERUZFUlJFRF9SRU5ERVJJTkdfREVMQVksbi5fcmVzZXRFbnRpdHlTdG9yZSksbn1yZXR1cm4gRGZ0Ll9fZXh0ZW5kcyhlLHQpLGUuZ2V0VG90YWxEcmF3VGltZT1mdW5jdGlvbih0LGUpe3JldHVybiBlLnJlZHVjZSgoZnVuY3Rpb24oZSxuKXtyZXR1cm4gZStuLmFuaW1hdG9yLnRvdGFsVGltZSh0Lmxlbmd0aCl9KSwwKX0sZS5hcHBseURyYXdTdGVwcz1mdW5jdGlvbih0LGUpe3JldHVybiB0Lm1hcCgoZnVuY3Rpb24odCl7dmFyIG49dC5hdHRyVG9Qcm9qZWN0b3IsaT17fTtyZXR1cm4gT2JqZWN0LmtleXMobikuZm9yRWFjaCgoZnVuY3Rpb24odCl7aVt0XT1mdW5jdGlvbihpLHIpe3JldHVybiBuW3RdKGkscixlKX19KSkse2F0dHJUb0FwcGxpZWRQcm9qZWN0b3I6aSxhbmltYXRvcjp0LmFuaW1hdG9yfX0pKX0sZS5wcm90b3R5cGUuYW5jaG9yPWZ1bmN0aW9uKGUpe3JldHVybiBlPU5mdC5jb2VyY2VFeHRlcm5hbEQzKGUpLHQucHJvdG90eXBlLmFuY2hvci5jYWxsKHRoaXMsZSksdGhpcy5fZGF0YUNoYW5nZWQ9ITAsdGhpcy5fcmVzZXRFbnRpdHlTdG9yZSgpLHRoaXMuX3VwZGF0ZUV4dGVudHMoKSx0aGlzfSxlLnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuX2lzU2V0dXB8fCh0LnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSxudWxsIT10aGlzLl9jYW52YXMmJnRoaXMuX2FwcGVuZENhbnZhc05vZGUoKSx0aGlzLl9yZW5kZXJBcmVhPXRoaXMuY29udGVudCgpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInJlbmRlci1hcmVhIiwhMCksdGhpcy5kYXRhc2V0cygpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3JldHVybiBlLl9jcmVhdGVOb2Rlc0ZvckRhdGFzZXQodCl9KSkpfSxlLnByb3RvdHlwZS5fYXBwZW5kQ2FudmFzTm9kZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZWxlbWVudCgpLnNlbGVjdCgiLnBsb3QtY2FudmFzLWNvbnRhaW5lciIpO3QuZW1wdHkoKSYmKHQ9dGhpcy5lbGVtZW50KCkuYXBwZW5kKCJkaXYiKS5jbGFzc2VkKCJwbG90LWNhbnZhcy1jb250YWluZXIiLCEwKSkubm9kZSgpLmFwcGVuZENoaWxkKHRoaXMuX2NhbnZhcy5ub2RlKCkpfSxlLnByb3RvdHlwZS5zZXRCb3VuZHM9ZnVuY3Rpb24oZSxuLGkscil7aWYodC5wcm90b3R5cGUuc2V0Qm91bmRzLmNhbGwodGhpcyxlLG4saSxyKSx0aGlzLl91cGRhdGVFeHRlbnRzKCksbnVsbCE9dGhpcy5fY2FudmFzKXtpZih0aGlzLl9idWZmZXJDYW52YXMmJiF0aGlzLl9idWZmZXJDYW52YXNWYWxpZCl7dGhpcy5fYnVmZmVyQ2FudmFzLmF0dHIoIndpZHRoIix0aGlzLl9jYW52YXMuYXR0cigid2lkdGgiKSksdGhpcy5fYnVmZmVyQ2FudmFzLmF0dHIoImhlaWdodCIsdGhpcy5fY2FudmFzLmF0dHIoImhlaWdodCIpKTt2YXIgbz10aGlzLl9idWZmZXJDYW52YXMubm9kZSgpLmdldENvbnRleHQoIjJkIik7aWYobyl7dmFyIGE9dGhpcy5fY2FudmFzLm5vZGUoKTthLndpZHRoPjAmJmEuaGVpZ2h0PjA/by5jYW52YXMud2lkdGg+MCYmby5jYW52YXMuaGVpZ2h0PjAmJm8uZHJhd0ltYWdlKGEsMCwwKTpjb25zb2xlLndhcm4oIkZhaWxlZCB0byBmaWxsIGJ1ZmZlciBjYW52YXMgd2l0aCB3aXRoIDB4MCBjYW52YXMiKX10aGlzLl9idWZmZXJDYW52YXNWYWxpZD0hMH12YXIgcz1udWxsIT13aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbz93aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbzoxO3RoaXMuX2NhbnZhcy5hdHRyKCJ3aWR0aCIsZSpzKSx0aGlzLl9jYW52YXMuYXR0cigiaGVpZ2h0IixuKnMpO3ZhciBsPXRoaXMuX2NhbnZhcy5ub2RlKCkuZ2V0Q29udGV4dCgiMmQiKTtpZihsJiYobC5zZXRUcmFuc2Zvcm0ocywwLDAscywwLDApLHRoaXMuX2J1ZmZlckNhbnZhcykpe3ZhciBjPXRoaXMuX2J1ZmZlckNhbnZhcy5ub2RlKCk7Yy53aWR0aD4wJiZjLmhlaWdodD4wP2wuY2FudmFzLndpZHRoPjAmJmwuY2FudmFzLmhlaWdodD4wJiZsLmRyYXdJbWFnZShjLDAsMCxlLG4pOmNvbnNvbGUud2FybigiRmFpbGVkIHRvIGZpbGwgY2FudmFzIHdpdGggMHgwIGJ1ZmZlciBjYW52YXMiKX19cmV0dXJuIHRoaXN9LGUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3QucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKSx0aGlzLl9zY2FsZXMoKS5mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gdC5vZmZVcGRhdGUoZS5fcmVuZGVyQ2FsbGJhY2spfSkpLHRoaXMuZGF0YXNldHMoW10pfSxlLnByb3RvdHlwZS5fY3JlYXRlTm9kZXNGb3JEYXRhc2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2RhdGFzZXRUb0RyYXdlci5nZXQodCk7cmV0dXJuInN2ZyI9PT10aGlzLnJlbmRlcmVyKCk/ZS51c2VTVkcodGhpcy5fcmVuZGVyQXJlYSk6ZS51c2VDYW52YXModGhpcy5fY2FudmFzKSxlfSxlLnByb3RvdHlwZS5fY3JlYXRlRHJhd2VyPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgU2d0LlByb3h5RHJhd2VyKChmdW5jdGlvbigpe3JldHVybiBuZXcgTWd0LlNWR0RyYXdlcigicGF0aCIsIiIpfSksKGZ1bmN0aW9uKHQpe3JldHVybiBuZXcgd2d0LkNhbnZhc0RyYXdlcih0LChmdW5jdGlvbigpe30pKX0pKX0sZS5wcm90b3R5cGUuX2dldEFuaW1hdG9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9hbmltYXRlT25OZXh0UmVuZGVyKCkmJnRoaXMuX2FuaW1hdG9yc1t0XXx8bmV3IEJmdC5OdWxsfSxlLnByb3RvdHlwZS5fb25EYXRhc2V0VXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlRXh0ZW50cygpLHRoaXMuX2RhdGFDaGFuZ2VkPSEwLHRoaXMuX3Jlc2V0RW50aXR5U3RvcmUoKSx0aGlzLnJlbmRlckxvd1ByaW9yaXR5KCl9LGUucHJvdG90eXBlLmF0dHI9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBudWxsPT1lP3RoaXMuX2F0dHJCaW5kaW5ncy5nZXQodCk6KHRoaXMuX2JpbmRBdHRyKHQsZSxuKSx0aGlzLnJlbmRlcigpLHRoaXMpfSxlLnByb3RvdHlwZS5fYmluZFByb3BlcnR5PWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciByPXRoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KHQpLG89bnVsbCE9cj9yLnNjYWxlOm51bGw7dGhpcy5fcHJvcGVydHlCaW5kaW5ncy5zZXQodCx7YWNjZXNzb3I6ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpmdW5jdGlvbigpe3JldHVybiBlfSxzY2FsZTpuLHBvc3RTY2FsZTppfSksbnVsbCE9byYmdGhpcy5fdW5pbnN0YWxsU2NhbGVGb3JLZXkobyx0KSxudWxsIT1uJiZ0aGlzLl9pbnN0YWxsU2NhbGVGb3JLZXkobix0KSx0aGlzLl9jbGVhckF0dHJUb1Byb2plY3RvckNhY2hlKCl9LGUucHJvdG90eXBlLl9iaW5kQXR0cj1mdW5jdGlvbih0LGUsbil7dmFyIGk9dGhpcy5fYXR0ckJpbmRpbmdzLmdldCh0KSxyPW51bGwhPWk/aS5zY2FsZTpudWxsO3RoaXMuX2F0dHJCaW5kaW5ncy5zZXQodCx7YWNjZXNzb3I6ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpmdW5jdGlvbigpe3JldHVybiBlfSxzY2FsZTpufSksbnVsbCE9ciYmdGhpcy5fdW5pbnN0YWxsU2NhbGVGb3JLZXkocix0KSxudWxsIT1uJiZ0aGlzLl9pbnN0YWxsU2NhbGVGb3JLZXkobix0KSx0aGlzLl9jbGVhckF0dHJUb1Byb2plY3RvckNhY2hlKCl9LGUucHJvdG90eXBlLl9jbGVhckF0dHJUb1Byb2plY3RvckNhY2hlPWZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXMuX2NhY2hlZEF0dHJUb1Byb2plY3Rvcn0sZS5wcm90b3R5cGUuX2dldEF0dHJUb1Byb2plY3Rvcj1mdW5jdGlvbigpe2lmKG51bGw9PXRoaXMuX2NhY2hlZEF0dHJUb1Byb2plY3Rvcil7dmFyIHQ9dGhpcy5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3IoKTtlLk9QVElNSVpFX01FTU9JWkVfUFJPSkVDVE9SUyYmKHQ9eGd0Lm1lbW9pemVQcm9qZWN0b3JzKHQpKSx0aGlzLl9jYWNoZWRBdHRyVG9Qcm9qZWN0b3I9dH1yZXR1cm4gU210LmFzc2lnbih7fSx0aGlzLl9jYWNoZWRBdHRyVG9Qcm9qZWN0b3IpfSxlLnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3I9ZnVuY3Rpb24oKXt2YXIgdD17fTt0aGlzLl9hdHRyQmluZGluZ3MuZWFjaCgoZnVuY3Rpb24obixpKXt0W2ldPWUuX3NjYWxlZEFjY2Vzc29yKG4pfSkpO3ZhciBuPXRoaXMuX3Byb3BlcnR5UHJvamVjdG9ycygpO3JldHVybiBPYmplY3Qua2V5cyhuKS5mb3JFYWNoKChmdW5jdGlvbihlKXtudWxsPT10W2VdJiYodFtlXT1uW2VdKX0pKSx0fSxlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseT1mdW5jdGlvbigpe3JldHVybiB0LnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHRoaXMpLHRoaXMuX2lzQW5jaG9yZWQmJih0aGlzLl9wYWludCgpLHRoaXMuX2RhdGFDaGFuZ2VkPSExKSx0aGlzfSxlLnByb3RvdHlwZS5yZW5kZXJMb3dQcmlvcml0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZW5kZXJDYWxsYmFjaygpLHRoaXN9LGUucHJvdG90eXBlLmFuaW1hdGVkPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX2FuaW1hdGU6KHRoaXMuX2FuaW1hdGU9dCx0aGlzKX0sZS5wcm90b3R5cGUuZGV0YWNoPWZ1bmN0aW9uKCl7cmV0dXJuIHQucHJvdG90eXBlLmRldGFjaC5jYWxsKHRoaXMpLHRoaXMuX3VwZGF0ZUV4dGVudHMoKSx0aGlzfSxlLnByb3RvdHlwZS5fc2NhbGVzPWZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuX2F0dHJCaW5kaW5ncy5lYWNoKChmdW5jdGlvbihlLG4pe3ZhciBpPWUuc2NhbGU7bnVsbCE9aSYmLTE9PT10LmluZGV4T2YoaSkmJnQucHVzaChpKX0pKSx0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmVhY2goKGZ1bmN0aW9uKGUsbil7dmFyIGk9ZS5zY2FsZTtudWxsIT1pJiYtMT09PXQuaW5kZXhPZihpKSYmdC5wdXNoKGkpfSkpLHR9LGUucHJvdG90eXBlLl91cGRhdGVFeHRlbnRzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9yZXNldEVudGl0eVN0b3JlKCksdGhpcy5fc2NhbGVzKCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuYWRkSW5jbHVkZWRWYWx1ZXNQcm92aWRlcih0Ll9pbmNsdWRlZFZhbHVlc1Byb3ZpZGVyKX0pKX0sZS5wcm90b3R5cGUuX2ZpbHRlckZvclByb3BlcnR5PWZ1bmN0aW9uKHQpe3JldHVybiBudWxsfSxlLnByb3RvdHlwZS5nZXRFeHRlbnRzRm9yQXR0cj1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKG51bGw9PXRoaXMuX2F0dHJFeHRlbnRzW3RdKXt2YXIgbj14Z3QubWVtVGh1bmsoKGZ1bmN0aW9uKCl7cmV0dXJuIGUuZGF0YXNldHMoKX0pLChmdW5jdGlvbigpe3JldHVybiBlLl9hdHRyQmluZGluZ3MuZ2V0KHQpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG51bGw9PWV8fG51bGw9PWUuYWNjZXNzb3I/bnVsbDp0Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGkodCxlLG51bGwpfSkpfSkpO3RoaXMuX2F0dHJFeHRlbnRzW3RdPW59cmV0dXJuIHRoaXMuX2F0dHJFeHRlbnRzW3RdKCl9LGUucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKG51bGw9PXRoaXMuX3Byb3BlcnR5RXh0ZW50c1t0XSl7dmFyIG49eGd0Lm1lbVRodW5rKChmdW5jdGlvbigpe3JldHVybiBlLmRhdGFzZXRzKCl9KSwoZnVuY3Rpb24oKXtyZXR1cm4gZS5fcHJvcGVydHlCaW5kaW5ncy5nZXQodCl9KSwoZnVuY3Rpb24oKXtyZXR1cm4gZS5fZmlsdGVyRm9yUHJvcGVydHkodCl9KSwoZnVuY3Rpb24odCxlLG4pe3JldHVybiBudWxsPT1lfHxudWxsPT1lLmFjY2Vzc29yP251bGw6dC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBpKHQsZSxuKX0pKX0pKTt0aGlzLl9wcm9wZXJ0eUV4dGVudHNbdF09bn1yZXR1cm4gdGhpcy5fcHJvcGVydHlFeHRlbnRzW3RdKCl9LGUucHJvdG90eXBlLl9pbmNsdWRlZFZhbHVlc0ZvclNjYWxlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztpZighdGhpcy5faXNBbmNob3JlZCYmIWUpcmV0dXJuW107dmFyIGk9W107cmV0dXJuIHRoaXMuX2F0dHJCaW5kaW5ncy5lYWNoKChmdW5jdGlvbihlLHIpe2lmKGUuc2NhbGU9PT10KXt2YXIgbz1uLmdldEV4dGVudHNGb3JBdHRyKHIpO251bGwhPW8mJihpPWkuY29uY2F0KGlkdC5tZXJnZShvKSkpfX0pKSx0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmVhY2goKGZ1bmN0aW9uKGUscil7aWYoZS5zY2FsZT09PXQpe3ZhciBvPW4uZ2V0RXh0ZW50c0ZvclByb3BlcnR5KHIpO251bGwhPW8mJihpPWkuY29uY2F0KGlkdC5tZXJnZShvKSkpfX0pKSxpfSxlLnByb3RvdHlwZS5hbmltYXRvcj1mdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT1lP3RoaXMuX2FuaW1hdG9yc1t0XToodGhpcy5fYW5pbWF0b3JzW3RdPWUsdGhpcyl9LGUucHJvdG90eXBlLnJlbmRlcmVyPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHZvaWQgMD09PXQ/bnVsbD09dGhpcy5fY2FudmFzPyJzdmciOiJjYW52YXMiOihudWxsPT10aGlzLl9jYW52YXMmJiJjYW52YXMiPT09dD8odGhpcy5fY2FudmFzPWlkdC5zZWxlY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIikpLmNsYXNzZWQoInBsb3QtY2FudmFzIiwhMCksdGhpcy5fYnVmZmVyQ2FudmFzPWlkdC5zZWxlY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIikpLG51bGwhPXRoaXMuZWxlbWVudCgpJiZ0aGlzLl9hcHBlbmRDYW52YXNOb2RlKCksdGhpcy5fZGF0YXNldFRvRHJhd2VyLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QudXNlQ2FudmFzKGUuX2NhbnZhcyl9KSksdGhpcy5yZW5kZXIoKSk6bnVsbCE9dGhpcy5fY2FudmFzJiYic3ZnIj09dCYmKHRoaXMuX2NhbnZhcy5yZW1vdmUoKSx0aGlzLl9jYW52YXM9bnVsbCx0aGlzLl9idWZmZXJDYW52YXM9bnVsbCx0aGlzLl9kYXRhc2V0VG9EcmF3ZXIuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC51c2VTVkcoZS5fcmVuZGVyQXJlYSl9KSksdGhpcy5yZW5kZXIoKSksdGhpcyl9LGUucHJvdG90eXBlLmFkZERhdGFzZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2FkZERhdGFzZXQodCksdGhpcy5fb25EYXRhc2V0VXBkYXRlKCksdGhpc30sZS5wcm90b3R5cGUuX2FkZERhdGFzZXQ9ZnVuY3Rpb24odCl7dGhpcy5fcmVtb3ZlRGF0YXNldCh0KTt2YXIgZT10aGlzLl9jcmVhdGVEcmF3ZXIodCk7cmV0dXJuIHRoaXMuX2RhdGFzZXRUb0RyYXdlci5zZXQodCxlKSx0aGlzLl9pc1NldHVwJiZ0aGlzLl9jcmVhdGVOb2Rlc0ZvckRhdGFzZXQodCksdC5vblVwZGF0ZSh0aGlzLl9vbkRhdGFzZXRVcGRhdGVDYWxsYmFjayksdGhpc30sZS5wcm90b3R5cGUucmVtb3ZlRGF0YXNldD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmVtb3ZlRGF0YXNldCh0KSx0aGlzLl9vbkRhdGFzZXRVcGRhdGUoKSx0aGlzfSxlLnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldD1mdW5jdGlvbih0KXtyZXR1cm4tMT09PXRoaXMuZGF0YXNldHMoKS5pbmRleE9mKHQpfHwodGhpcy5fcmVtb3ZlRGF0YXNldE5vZGVzKHQpLHQub2ZmVXBkYXRlKHRoaXMuX29uRGF0YXNldFVwZGF0ZUNhbGxiYWNrKSx0aGlzLl9kYXRhc2V0VG9EcmF3ZXIuZGVsZXRlKHQpKSx0aGlzfSxlLnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldE5vZGVzPWZ1bmN0aW9uKHQpe3RoaXMuX2RhdGFzZXRUb0RyYXdlci5nZXQodCkucmVtb3ZlKCl9LGUucHJvdG90eXBlLmRhdGFzZXRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1bXTtyZXR1cm4gdGhpcy5fZGF0YXNldFRvRHJhd2VyLmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4ucHVzaChlKX0pKSxudWxsPT10P246KG4uZm9yRWFjaCgoZnVuY3Rpb24odCl7cmV0dXJuIGUuX3JlbW92ZURhdGFzZXQodCl9KSksdC5mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gZS5fYWRkRGF0YXNldCh0KX0pKSx0aGlzLl9vbkRhdGFzZXRVcGRhdGUoKSx0aGlzKX0sZS5wcm90b3R5cGUuX2dlbmVyYXRlRHJhd1N0ZXBzPWZ1bmN0aW9uKCl7cmV0dXJuW3thdHRyVG9Qcm9qZWN0b3I6dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksYW5pbWF0b3I6bmV3IEJmdC5OdWxsfV19LGUucHJvdG90eXBlLl9hZGRpdGlvbmFsUGFpbnQ9ZnVuY3Rpb24odCl7fSxlLnByb3RvdHlwZS5fYnVpbGRMaWdodHdlaWdodFBsb3RFbnRpdGllcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49W107cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24odCxpKXtmb3IodmFyIHI9ZS5fZGF0YXNldFRvRHJhd2VyLmdldCh0KSxvPTAsYT10LmRhdGEoKSxzPWEubGVuZ3RoLGw9ZnVuY3Rpb24ocyl7dmFyIGw9YVtzXSxjPWUuX3BpeGVsUG9pbnQobCxzLHQpO2lmKFNtdC5NYXRoLmlzTmFOKGMueCl8fFNtdC5NYXRoLmlzTmFOKGMueSkpcmV0dXJuImNvbnRpbnVlIjt2YXIgdT1lO24ucHVzaCh7ZGF0dW06bCxnZXQgcG9zaXRpb24oKXtyZXR1cm4gdS5fcGl4ZWxQb2ludC5jYWxsKHUsbCxzLHQpfSxpbmRleDpzLGRhdGFzZXQ6dCxkYXRhc2V0SW5kZXg6aSxjb21wb25lbnQ6ZSxkcmF3ZXI6cix2YWxpZERhdHVtSW5kZXg6b30pLG8rK30sYz0wO2M8cztjKyspbChjKX0pKSxufSxlLnByb3RvdHlwZS5fZ2V0RGF0YVRvRHJhdz1mdW5jdGlvbigpe3ZhciB0PW5ldyBTbXQuTWFwO3JldHVybiB0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIHQuc2V0KGUsZS5kYXRhKCkpfSkpLHR9LGUucHJvdG90eXBlLl9wYWludD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7ZGVsZXRlIHRoaXMuX2NhY2hlZEF0dHJUb1Byb2plY3Rvcjt2YXIgbj10aGlzLl9nZW5lcmF0ZURyYXdTdGVwcygpLGk9dGhpcy5fZ2V0RGF0YVRvRHJhdygpLHI9dGhpcy5kYXRhc2V0cygpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHQuX2RhdGFzZXRUb0RyYXdlci5nZXQoZSl9KSk7aWYoImNhbnZhcyI9PT10aGlzLnJlbmRlcmVyKCkpe3ZhciBvPXRoaXMuX2NhbnZhcy5ub2RlKCk7by5nZXRDb250ZXh0KCIyZCIpLmNsZWFyUmVjdCgwLDAsby5jbGllbnRXaWR0aCxvLmNsaWVudEhlaWdodCksdGhpcy5fYnVmZmVyQ2FudmFzVmFsaWQ9ITF9dGhpcy5kYXRhc2V0cygpLmZvckVhY2goKGZ1bmN0aW9uKHQsbyl7dmFyIGE9ZS5hcHBseURyYXdTdGVwcyhuLHQpO3Jbb10uZHJhdyhpLmdldCh0KSxhKX0pKTt2YXIgYT10aGlzLmRhdGFzZXRzKCkubWFwKChmdW5jdGlvbih0LHIpe3JldHVybiBlLmdldFRvdGFsRHJhd1RpbWUoaS5nZXQodCksbil9KSkscz1TbXQuTWF0aC5tYXgoYSwwKTt0aGlzLl9hZGRpdGlvbmFsUGFpbnQocyl9LGUucHJvdG90eXBlLnNlbGVjdGlvbnM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZih2b2lkIDA9PT10JiYodD10aGlzLmRhdGFzZXRzKCkpLCJjYW52YXMiPT09dGhpcy5yZW5kZXJlcigpKXJldHVybiBpZHQuc2VsZWN0QWxsKCk7dmFyIG49W107cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGk9ZS5fZGF0YXNldFRvRHJhd2VyLmdldCh0KTtpZihudWxsIT1pKXt2YXIgcj1pLmdldFZpc3VhbFByaW1pdGl2ZXMoKTtuLnB1c2guYXBwbHkobixyKX19KSksaWR0LnNlbGVjdEFsbChuKX0sZS5wcm90b3R5cGUuZW50aXRpZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdGhpcy5fZ2V0RW50aXR5U3RvcmUodCkuZW50aXRpZXMoKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBlLl9saWdodHdlaWdodFBsb3RFbnRpdHlUb1Bsb3RFbnRpdHkodCl9KSl9LGUucHJvdG90eXBlLmZpbHRlckVudGl0aWVzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHRoaXMuX2dldEVudGl0eVN0b3JlKCkuZW50aXRpZXMoKS5maWx0ZXIodCkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gZS5fbGlnaHR3ZWlnaHRQbG90RW50aXR5VG9QbG90RW50aXR5KHQpfSkpfSxlLnByb3RvdHlwZS5fZ2V0RW50aXR5U3RvcmU9ZnVuY3Rpb24odCl7dmFyIGUsbj10aGlzLGk9ZnVuY3Rpb24odCl7cmV0dXJuIG4uX2VudGl0eUJvdW5kcyh0KX07cmV0dXJuIHZvaWQgMCE9PXQ/KChlPW5ldyBTbXQuRW50aXR5U3RvcmUpLmFkZEFsbCh0aGlzLl9idWlsZExpZ2h0d2VpZ2h0UGxvdEVudGl0aWVzKHQpLGksdGhpcy5fbG9jYWxPcmlnaW5Cb3VuZHMoKSksZSk6KHZvaWQgMD09PXRoaXMuX2NhY2hlZEVudGl0eVN0b3JlJiYoKGU9bmV3IFNtdC5FbnRpdHlTdG9yZSkuYWRkQWxsKHRoaXMuX2J1aWxkTGlnaHR3ZWlnaHRQbG90RW50aXRpZXModGhpcy5kYXRhc2V0cygpKSxpLHRoaXMuX2xvY2FsT3JpZ2luQm91bmRzKCkpLHRoaXMuX2NhY2hlZEVudGl0eVN0b3JlPWUpLHRoaXMuX2NhY2hlZEVudGl0eVN0b3JlKX0sZS5wcm90b3R5cGUuX2xvY2FsT3JpZ2luQm91bmRzPWZ1bmN0aW9uKCl7cmV0dXJue3RvcExlZnQ6e3g6MCx5OjB9LGJvdHRvbVJpZ2h0Ont4OnRoaXMud2lkdGgoKSx5OnRoaXMuaGVpZ2h0KCl9fX0sZS5wcm90b3R5cGUuX2VudGl0eUJvdW5kcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9waXhlbFBvaW50KHQuZGF0dW0sdC5pbmRleCx0LmRhdGFzZXQpO3JldHVybnt4OmUueCx5OmUueSx3aWR0aDowLGhlaWdodDowfX0sZS5wcm90b3R5cGUuX2xpZ2h0d2VpZ2h0UGxvdEVudGl0eVRvUGxvdEVudGl0eT1mdW5jdGlvbih0KXtyZXR1cm57Ym91bmRzOnRoaXMuX2VudGl0eUJvdW5kcyh0KSxjb21wb25lbnQ6dC5jb21wb25lbnQsZGF0YXNldDp0LmRhdGFzZXQsZGF0YXNldEluZGV4OnQuZGF0YXNldEluZGV4LGRhdHVtOnQuZGF0dW0saW5kZXg6dC5pbmRleCxwb3NpdGlvbjp0LnBvc2l0aW9uLHNlbGVjdGlvbjppZHQuc2VsZWN0KHQuZHJhd2VyLmdldFZpc3VhbFByaW1pdGl2ZUF0SW5kZXgodC52YWxpZERhdHVtSW5kZXgpKX19LGUucHJvdG90eXBlLmVudGl0aWVzQXQ9ZnVuY3Rpb24odCl7dGhyb3cgbmV3IEVycm9yKCJwbG90cyBtdXN0IGltcGxlbWVudCBlbnRpdGllc0F0Iil9LGUucHJvdG90eXBlLmVudGl0eU5lYXJlc3Q9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZ2V0RW50aXR5U3RvcmUoKS5lbnRpdHlOZWFyZXN0KHQpO3JldHVybiB2b2lkIDA9PT1lP3ZvaWQgMDp0aGlzLl9saWdodHdlaWdodFBsb3RFbnRpdHlUb1Bsb3RFbnRpdHkoZSl9LGUucHJvdG90eXBlLmVudGl0aWVzSW49ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5lbnRpdGllc0luQm91bmRzKG51bGw9PWU/e3g6dC50b3BMZWZ0LngseTp0LnRvcExlZnQueSx3aWR0aDp0LmJvdHRvbVJpZ2h0LngtdC50b3BMZWZ0LngsaGVpZ2h0OnQuYm90dG9tUmlnaHQueS10LnRvcExlZnQueX06e3g6dC5taW4seTplLm1pbix3aWR0aDp0Lm1heC10Lm1pbixoZWlnaHQ6ZS5tYXgtZS5taW59KX0sZS5wcm90b3R5cGUuZW50aXRpZXNJbkJvdW5kcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49dGhpcy5fZ2V0RW50aXR5U3RvcmUoKS5lbnRpdGllc0luQm91bmRzKHQpO2lmKG4pcmV0dXJuIG4ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gZS5fbGlnaHR3ZWlnaHRQbG90RW50aXR5VG9QbG90RW50aXR5KHQpfSkpfSxlLnByb3RvdHlwZS5lbnRpdGllc0luWEJvdW5kcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49dGhpcy5fZ2V0RW50aXR5U3RvcmUoKS5lbnRpdGllc0luWEJvdW5kcyh0KTtpZihuKXJldHVybiBuLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGUuX2xpZ2h0d2VpZ2h0UGxvdEVudGl0eVRvUGxvdEVudGl0eSh0KX0pKX0sZS5wcm90b3R5cGUuZW50aXRpZXNJbllCb3VuZHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXRoaXMuX2dldEVudGl0eVN0b3JlKCkuZW50aXRpZXNJbllCb3VuZHModCk7aWYobilyZXR1cm4gbi5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBlLl9saWdodHdlaWdodFBsb3RFbnRpdHlUb1Bsb3RFbnRpdHkodCl9KSl9LGUucHJvdG90eXBlLl91bmluc3RhbGxTY2FsZUZvcktleT1mdW5jdGlvbih0LGUpe3Qub2ZmVXBkYXRlKHRoaXMuX3JlbmRlckNhbGxiYWNrKSx0Lm9mZlVwZGF0ZSh0aGlzLl9kZWZlcnJlZFJlc2V0RW50aXR5U3RvcmUpLHQucmVtb3ZlSW5jbHVkZWRWYWx1ZXNQcm92aWRlcih0aGlzLl9pbmNsdWRlZFZhbHVlc1Byb3ZpZGVyKX0sZS5wcm90b3R5cGUuX2luc3RhbGxTY2FsZUZvcktleT1mdW5jdGlvbih0LGUpe3Qub25VcGRhdGUodGhpcy5fcmVuZGVyQ2FsbGJhY2spLHQub25VcGRhdGUodGhpcy5fZGVmZXJyZWRSZXNldEVudGl0eVN0b3JlKSx0LmFkZEluY2x1ZGVkVmFsdWVzUHJvdmlkZXIodGhpcy5faW5jbHVkZWRWYWx1ZXNQcm92aWRlcil9LGUucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnM9ZnVuY3Rpb24oKXtyZXR1cm57fX0sZS5fc2NhbGVkQWNjZXNzb3I9ZnVuY3Rpb24odCl7dmFyIGU9dC5zY2FsZSxuPXQuYWNjZXNzb3IsaT10LnBvc3RTY2FsZSxyPW51bGw9PWU/bjpmdW5jdGlvbih0LGkscil7cmV0dXJuIGUuc2NhbGUobih0LGkscikpfTtyZXR1cm4gbnVsbD09aT9yOmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gaShyKHQsZSxuKSx0LGUsbil9fSxlLnByb3RvdHlwZS5fcGl4ZWxQb2ludD1mdW5jdGlvbih0LGUsbil7cmV0dXJue3g6MCx5OjB9fSxlLnByb3RvdHlwZS5fYW5pbWF0ZU9uTmV4dFJlbmRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hbmltYXRlJiZ0aGlzLl9kYXRhQ2hhbmdlZH0sZS5PUFRJTUlaRV9NRU1PSVpFX1BST0pFQ1RPUlM9ITEsZS5fQU5JTUFUSU9OX01BWF9EVVJBVElPTj02MDAsZX0pKFRtdC5Db21wb25lbnQpO2Z1bmN0aW9uIGkodCxlLG4pe3ZhciBpPWUuYWNjZXNzb3Iscj1lLnNjYWxlO2lmKG51bGw9PXIpcmV0dXJuW107dmFyIG89dC5kYXRhKCk7bnVsbCE9biYmKG89by5maWx0ZXIoKGZ1bmN0aW9uKGUsaSl7cmV0dXJuIG4oZSxpLHQpfSkpKTt2YXIgYT1vLm1hcCgoZnVuY3Rpb24oZSxuKXtyZXR1cm4gaShlLG4sdCl9KSk7cmV0dXJuIHIuZXh0ZW50T2ZWYWx1ZXMoYSl9ZS5QbG90PW59KSksQ2d0PWJlKChmdW5jdGlvbih0LGUpewovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBEZnQuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUuZW50aXR5TmVhcmVzdD1mdW5jdGlvbih0KXt2YXIgZSxuPTEvMDtyZXR1cm4gdGhpcy5jb21wb25lbnRzKCkuZm9yRWFjaCgoZnVuY3Rpb24oaSl7dmFyIHI9aS5lbnRpdHlOZWFyZXN0KHQpO2lmKG51bGwhPXIpe3ZhciBvPVNtdC5NYXRoLmRpc3RhbmNlU3F1YXJlZChyLnBvc2l0aW9uLHQpO288PW4mJihuPW8sZT1yKX19KSksZX0sZS5wcm90b3R5cGUuYXBwZW5kPWZ1bmN0aW9uKGUpe2lmKG51bGwhPWUmJiEoZSBpbnN0YW5jZW9mIFRndC5QbG90KSl0aHJvdyBuZXcgRXJyb3IoIlBsb3QgR3JvdXAgb25seSBhY2NlcHRzIHBsb3RzIik7cmV0dXJuIHQucHJvdG90eXBlLmFwcGVuZC5jYWxsKHRoaXMsZSksdGhpc30sZX0pKGNndC5Hcm91cCk7ZS5QbG90R3JvdXA9bn0pKSxBZ3Q9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt2b2lkIDA9PT1lJiYoZT1bXSk7dmFyIG49dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBuLl9yb3dQYWRkaW5nPTAsbi5fY29sdW1uUGFkZGluZz0wLG4uX3Jvd3M9W10sbi5fcm93V2VpZ2h0cz1bXSxuLl9jb2x1bW5XZWlnaHRzPVtdLG4uX25Sb3dzPTAsbi5fbkNvbHM9MCxuLl9jYWxjdWxhdGVkTGF5b3V0PW51bGwsbi5hZGRDbGFzcygidGFibGUiKSxlLmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7dC5mb3JFYWNoKChmdW5jdGlvbih0LGkpe251bGwhPXQmJm4uYWRkKHQsZSxpKX0pKX0pKSxufXJldHVybiBEZnQuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUuX2ZvckVhY2g9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0aGlzLl9uUm93cztlKyspZm9yKHZhciBuPTA7bjx0aGlzLl9uQ29scztuKyspbnVsbCE9dGhpcy5fcm93c1tlXVtuXSYmdCh0aGlzLl9yb3dzW2VdW25dKX0sZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dGhpcy5fblJvd3M7ZSsrKWZvcih2YXIgbj0wO248dGhpcy5fbkNvbHM7bisrKWlmKHRoaXMuX3Jvd3NbZV1bbl09PT10KXJldHVybiEwO3JldHVybiExfSxlLnByb3RvdHlwZS5jb21wb25lbnRBdD1mdW5jdGlvbih0LGUpe3JldHVybiB0PDB8fHQ+PXRoaXMuX25Sb3dzfHxlPDB8fGU+PXRoaXMuX25Db2xzP251bGw6dGhpcy5fcm93c1t0XVtlXX0sZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHQsZSxuKXtpZihudWxsPT10KXRocm93IEVycm9yKCJDYW5ub3QgYWRkIG51bGwgdG8gYSB0YWJsZSBjZWxsIik7aWYoIXRoaXMuaGFzKHQpKXtpZihudWxsIT0odGhpcy5fcm93c1tlXSYmdGhpcy5fcm93c1tlXVtuXSkpdGhyb3cgbmV3IEVycm9yKCJjZWxsIGlzIG9jY3VwaWVkIik7dC5kZXRhY2goKSx0aGlzLl9uUm93cz1NYXRoLm1heChlKzEsdGhpcy5fblJvd3MpLHRoaXMuX25Db2xzPU1hdGgubWF4KG4rMSx0aGlzLl9uQ29scyksdGhpcy5fcGFkVGFibGVUb1NpemUodGhpcy5fblJvd3MsdGhpcy5fbkNvbHMpLHRoaXMuX3Jvd3NbZV1bbl09dCx0aGlzLl9hZG9wdEFuZEFuY2hvcih0KSx0aGlzLnJlZHJhdygpfXJldHVybiB0aGlzfSxlLnByb3RvdHlwZS5fcmVtb3ZlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dGhpcy5fblJvd3M7ZSsrKWZvcih2YXIgbj0wO248dGhpcy5fbkNvbHM7bisrKWlmKHRoaXMuX3Jvd3NbZV1bbl09PT10KXJldHVybiB0aGlzLl9yb3dzW2VdW25dPW51bGwsITA7cmV0dXJuITF9LGUucHJvdG90eXBlLl9pdGVyYXRlTGF5b3V0PWZ1bmN0aW9uKHQsbixpKXt2b2lkIDA9PT1pJiYoaT0hMSk7Zm9yKHZhciByLG8sYSxzLGwsYz10aGlzLl9yb3dzLHU9aWR0LnRyYW5zcG9zZSh0aGlzLl9yb3dzKSxoPXQtdGhpcy5fY29sdW1uUGFkZGluZyoodGhpcy5fbkNvbHMtMSksZD1uLXRoaXMuX3Jvd1BhZGRpbmcqKHRoaXMuX25Sb3dzLTEpLHA9ZS5fY2FsY0NvbXBvbmVudFdlaWdodHModGhpcy5fcm93V2VpZ2h0cyxjLChmdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dHx8dC5maXhlZEhlaWdodCgpfSkpLGY9ZS5fY2FsY0NvbXBvbmVudFdlaWdodHModGhpcy5fY29sdW1uV2VpZ2h0cyx1LChmdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dHx8dC5maXhlZFdpZHRoKCl9KSksbT1mLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIDA9PT10Py41OnR9KSksZz1wLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIDA9PT10Py41OnR9KSksXz1lLl9jYWxjUHJvcG9ydGlvbmFsU3BhY2UobSxoKSx5PWUuX2NhbGNQcm9wb3J0aW9uYWxTcGFjZShnLGQpLHY9U210LkFycmF5LmNyZWF0ZUZpbGxlZEFycmF5KDAsdGhpcy5fbkNvbHMpLGI9U210LkFycmF5LmNyZWF0ZUZpbGxlZEFycmF5KDAsdGhpcy5fblJvd3MpLHg9MDs7KXt2YXIgdz1TbXQuQXJyYXkuYWRkKGIseSksUz1TbXQuQXJyYXkuYWRkKHYsXyk7dj0oYT10aGlzLl9kZXRlcm1pbmVHdWFyYW50ZWVzKFMsdyxpKSkuZ3VhcmFudGVlZFdpZHRocyxiPWEuZ3VhcmFudGVlZEhlaWdodHMscz1hLndhbnRzV2lkdGhBcnIuc29tZSgoZnVuY3Rpb24odCl7cmV0dXJuIHR9KSksbD1hLndhbnRzSGVpZ2h0QXJyLnNvbWUoKGZ1bmN0aW9uKHQpe3JldHVybiB0fSkpO3ZhciBNPXIsRT1vO3I9aC1pZHQuc3VtKGEuZ3VhcmFudGVlZFdpZHRocyksbz1kLWlkdC5zdW0oYS5ndWFyYW50ZWVkSGVpZ2h0cyk7dmFyIFQ9dm9pZCAwO3M/KFQ9YS53YW50c1dpZHRoQXJyLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQ/LjE6MH0pKSxUPVNtdC5BcnJheS5hZGQoVCxmKSk6VD1mO3ZhciBDPXZvaWQgMDtpZihsPyhDPWEud2FudHNIZWlnaHRBcnIubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdD8uMTowfSkpLEM9U210LkFycmF5LmFkZChDLHApKTpDPXAsXz1lLl9jYWxjUHJvcG9ydGlvbmFsU3BhY2UoVCxyKSx5PWUuX2NhbGNQcm9wb3J0aW9uYWxTcGFjZShDLG8pLHgrKywhKHI+MCYmciE9PU18fG8+MCYmbyE9PUUpKWJyZWFrO2lmKHg+NSlicmVha31yZXR1cm4gcj1oLWlkdC5zdW0oYS5ndWFyYW50ZWVkV2lkdGhzKSxvPWQtaWR0LnN1bShhLmd1YXJhbnRlZWRIZWlnaHRzKSx7Y29sUHJvcG9ydGlvbmFsU3BhY2U6Xz1lLl9jYWxjUHJvcG9ydGlvbmFsU3BhY2UoZixyKSxyb3dQcm9wb3J0aW9uYWxTcGFjZTp5PWUuX2NhbGNQcm9wb3J0aW9uYWxTcGFjZShwLG8pLGd1YXJhbnRlZWRXaWR0aHM6YS5ndWFyYW50ZWVkV2lkdGhzLGd1YXJhbnRlZWRIZWlnaHRzOmEuZ3VhcmFudGVlZEhlaWdodHMsd2FudHNXaWR0aDpzLHdhbnRzSGVpZ2h0Omx9fSxlLnByb3RvdHlwZS5fZGV0ZXJtaW5lR3VhcmFudGVlcz1mdW5jdGlvbih0LGUsbil7dm9pZCAwPT09biYmKG49ITEpO3ZhciBpPVNtdC5BcnJheS5jcmVhdGVGaWxsZWRBcnJheSgwLHRoaXMuX25Db2xzKSxyPVNtdC5BcnJheS5jcmVhdGVGaWxsZWRBcnJheSgwLHRoaXMuX25Sb3dzKSxvPVNtdC5BcnJheS5jcmVhdGVGaWxsZWRBcnJheSghMSx0aGlzLl9uQ29scyksYT1TbXQuQXJyYXkuY3JlYXRlRmlsbGVkQXJyYXkoITEsdGhpcy5fblJvd3MpO3JldHVybiB0aGlzLl9yb3dzLmZvckVhY2goKGZ1bmN0aW9uKHMsbCl7cy5mb3JFYWNoKChmdW5jdGlvbihzLGMpe3ZhciB1O3U9bnVsbCE9cz9zLnJlcXVlc3RlZFNwYWNlKHRbY10sZVtsXSk6e21pbldpZHRoOjAsbWluSGVpZ2h0OjB9O3ZhciBoPW4/TWF0aC5taW4odS5taW5XaWR0aCx0W2NdKTp1Lm1pbldpZHRoO2lbY109TWF0aC5tYXgoaVtjXSxoKTt2YXIgZD1uP01hdGgubWluKHUubWluSGVpZ2h0LGVbbF0pOnUubWluSGVpZ2h0O3JbbF09TWF0aC5tYXgocltsXSxkKSxvW2NdPW9bY118fHUubWluV2lkdGg+dFtjXSxhW2xdPWFbbF18fHUubWluSGVpZ2h0PmVbbF19KSl9KSkse2d1YXJhbnRlZWRXaWR0aHM6aSxndWFyYW50ZWVkSGVpZ2h0czpyLHdhbnRzV2lkdGhBcnI6byx3YW50c0hlaWdodEFycjphfX0sZS5wcm90b3R5cGUucmVxdWVzdGVkU3BhY2U9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fY2FsY3VsYXRlZExheW91dD10aGlzLl9pdGVyYXRlTGF5b3V0KHQsZSkse21pbldpZHRoOmlkdC5zdW0odGhpcy5fY2FsY3VsYXRlZExheW91dC5ndWFyYW50ZWVkV2lkdGhzKSxtaW5IZWlnaHQ6aWR0LnN1bSh0aGlzLl9jYWxjdWxhdGVkTGF5b3V0Lmd1YXJhbnRlZWRIZWlnaHRzKX19LGUucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24oZSxuLGkpe3ZhciByPXRoaXM7dC5wcm90b3R5cGUuY29tcHV0ZUxheW91dC5jYWxsKHRoaXMsZSxuLGkpO3ZhciBvPWlkdC5zdW0odGhpcy5fY2FsY3VsYXRlZExheW91dC5ndWFyYW50ZWVkV2lkdGhzKSxhPWlkdC5zdW0odGhpcy5fY2FsY3VsYXRlZExheW91dC5ndWFyYW50ZWVkSGVpZ2h0cykscz10aGlzLl9jYWxjdWxhdGVkTGF5b3V0OyhvPnRoaXMud2lkdGgoKXx8YT50aGlzLmhlaWdodCgpKSYmKHM9dGhpcy5faXRlcmF0ZUxheW91dCh0aGlzLndpZHRoKCksdGhpcy5oZWlnaHQoKSwhMCkpO3ZhciBsPTAsYz1TbXQuQXJyYXkuYWRkKHMucm93UHJvcG9ydGlvbmFsU3BhY2Uscy5ndWFyYW50ZWVkSGVpZ2h0cyksdT1TbXQuQXJyYXkuYWRkKHMuY29sUHJvcG9ydGlvbmFsU3BhY2Uscy5ndWFyYW50ZWVkV2lkdGhzKTtyZXR1cm4gdGhpcy5fcm93cy5mb3JFYWNoKChmdW5jdGlvbih0LGUpe3ZhciBuPTA7dC5mb3JFYWNoKChmdW5jdGlvbih0LGkpe251bGwhPXQmJnQuY29tcHV0ZUxheW91dCh7eDpuLHk6bH0sdVtpXSxjW2VdKSxuKz11W2ldK3IuX2NvbHVtblBhZGRpbmd9KSksbCs9Y1tlXStyLl9yb3dQYWRkaW5nfSkpLHRoaXN9LGUucHJvdG90eXBlLnJvd1BhZGRpbmc9ZnVuY3Rpb24odCl7aWYobnVsbD09dClyZXR1cm4gdGhpcy5fcm93UGFkZGluZztpZighU210Lk1hdGguaXNWYWxpZE51bWJlcih0KXx8dDwwKXRocm93IEVycm9yKCJyb3dQYWRkaW5nIG11c3QgYmUgYSBub24tbmVnYXRpdmUgZmluaXRlIHZhbHVlIik7cmV0dXJuIHRoaXMuX3Jvd1BhZGRpbmc9dCx0aGlzLnJlZHJhdygpLHRoaXN9LGUucHJvdG90eXBlLmNvbHVtblBhZGRpbmc9ZnVuY3Rpb24odCl7aWYobnVsbD09dClyZXR1cm4gdGhpcy5fY29sdW1uUGFkZGluZztpZighU210Lk1hdGguaXNWYWxpZE51bWJlcih0KXx8dDwwKXRocm93IEVycm9yKCJjb2x1bW5QYWRkaW5nIG11c3QgYmUgYSBub24tbmVnYXRpdmUgZmluaXRlIHZhbHVlIik7cmV0dXJuIHRoaXMuX2NvbHVtblBhZGRpbmc9dCx0aGlzLnJlZHJhdygpLHRoaXN9LGUucHJvdG90eXBlLnJvd1dlaWdodD1mdW5jdGlvbih0LGUpe2lmKG51bGw9PWUpcmV0dXJuIHRoaXMuX3Jvd1dlaWdodHNbdF07aWYoIVNtdC5NYXRoLmlzVmFsaWROdW1iZXIoZSl8fGU8MCl0aHJvdyBFcnJvcigicm93V2VpZ2h0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgZmluaXRlIHZhbHVlIik7cmV0dXJuIHRoaXMuX3Jvd1dlaWdodHNbdF09ZSx0aGlzLnJlZHJhdygpLHRoaXN9LGUucHJvdG90eXBlLmNvbHVtbldlaWdodD1mdW5jdGlvbih0LGUpe2lmKG51bGw9PWUpcmV0dXJuIHRoaXMuX2NvbHVtbldlaWdodHNbdF07aWYoIVNtdC5NYXRoLmlzVmFsaWROdW1iZXIoZSl8fGU8MCl0aHJvdyBFcnJvcigiY29sdW1uV2VpZ2h0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgZmluaXRlIHZhbHVlIik7cmV0dXJuIHRoaXMuX2NvbHVtbldlaWdodHNbdF09ZSx0aGlzLnJlZHJhdygpLHRoaXN9LGUucHJvdG90eXBlLmZpeGVkV2lkdGg9ZnVuY3Rpb24oKXt2YXIgdD1pZHQudHJhbnNwb3NlKHRoaXMuX3Jvd3MpO3JldHVybiBlLl9maXhlZFNwYWNlKHQsKGZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10fHx0LmZpeGVkV2lkdGgoKX0pKX0sZS5wcm90b3R5cGUuZml4ZWRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5fZml4ZWRTcGFjZSh0aGlzLl9yb3dzLChmdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dHx8dC5maXhlZEhlaWdodCgpfSkpfSxlLnByb3RvdHlwZS5fcGFkVGFibGVUb1NpemU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49MDtuPHQ7bisrKXt2b2lkIDA9PT10aGlzLl9yb3dzW25dJiYodGhpcy5fcm93c1tuXT1bXSx0aGlzLl9yb3dXZWlnaHRzW25dPW51bGwpO2Zvcih2YXIgaT0wO2k8ZTtpKyspdm9pZCAwPT09dGhpcy5fcm93c1tuXVtpXSYmKHRoaXMuX3Jvd3Nbbl1baV09bnVsbCl9Zm9yKGk9MDtpPGU7aSsrKXZvaWQgMD09PXRoaXMuX2NvbHVtbldlaWdodHNbaV0mJih0aGlzLl9jb2x1bW5XZWlnaHRzW2ldPW51bGwpfSxlLl9jYWxjQ29tcG9uZW50V2VpZ2h0cz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHQubWFwKChmdW5jdGlvbih0LGkpe3JldHVybiBudWxsIT10P3Q6ZVtpXS5tYXAobikucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiB0JiZlfSksITApPzA6MX0pKX0sZS5fY2FsY1Byb3BvcnRpb25hbFNwYWNlPWZ1bmN0aW9uKHQsZSl7dmFyIG49aWR0LnN1bSh0KTtyZXR1cm4gMD09PW4/U210LkFycmF5LmNyZWF0ZUZpbGxlZEFycmF5KDAsdC5sZW5ndGgpOnQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gZSp0L259KSl9LGUuX2ZpeGVkU3BhY2U9ZnVuY3Rpb24odCxlKXt2YXIgbj1mdW5jdGlvbih0KXtyZXR1cm4gdC5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQmJmV9KSwhMCl9O3JldHVybiBuKHQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gbih0Lm1hcChlKSl9KSkpfSxlfSkobGd0LkNvbXBvbmVudENvbnRhaW5lcik7ZS5UYWJsZT1ufSkpLGtndD1iZSgoZnVuY3Rpb24odCxlKXsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dmFyIGU9bnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiBlLl9tYXhMaW5lcz0yLGV9cmV0dXJuIERmdC5fX2V4dGVuZHMoZSx0KSxlLnByb3RvdHlwZS5yZXF1ZXN0ZWRTcGFjZT1mdW5jdGlvbih0LGUpe3RoaXMuX3dyYXBwZXIubWF4TGluZXModGhpcy5fbWF4TGluZXMpO3ZhciBuPTA9PT10aGlzLmFuZ2xlKCk/dDplOzA9PT1uJiYobj0xLzApO3ZhciBpPXRoaXMuX3dyYXBwZXIud3JhcCh0aGlzLl90ZXh0LHRoaXMuX21lYXN1cmVyLG4pLHI9dGhpcy5fbWVhc3VyZXIubWVhc3VyZShpLndyYXBwZWRUZXh0KTtyZXR1cm57bWluV2lkdGg6KDA9PT10aGlzLmFuZ2xlKCk/ci53aWR0aDpyLmhlaWdodCkrMip0aGlzLnBhZGRpbmcoKSxtaW5IZWlnaHQ6KDA9PT10aGlzLmFuZ2xlKCk/ci5oZWlnaHQ6ci53aWR0aCkrMip0aGlzLnBhZGRpbmcoKX19LGUucHJvdG90eXBlLm1heExpbmVzPWZ1bmN0aW9uKHQpe3JldHVybiAwPT09YXJndW1lbnRzLmxlbmd0aD90aGlzLl9tYXhMaW5lczoodGhpcy5fbWF4TGluZXM9dCx0aGlzLnJlZHJhdygpLHRoaXMpfSxlfSkoaGd0LkxhYmVsKTtlLldyYXBwZWRMYWJlbD1ufSkpLExndD1iZSgoZnVuY3Rpb24odCxlKXsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dmFyIGU9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBlLmFkZENsYXNzKCJ4LWRyYWctYm94LWxheWVyIiksZS5faGFzQ29ybmVycz0hMSxlfXJldHVybiBEZnQuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUuY29tcHV0ZUxheW91dD1mdW5jdGlvbihlLG4saSl7cmV0dXJuIHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQuY2FsbCh0aGlzLGUsbixpKSx0aGlzLl9zZXRCb3VuZHModGhpcy5ib3VuZHMoKSksdGhpc30sZS5wcm90b3R5cGUuX3NldEJvdW5kcz1mdW5jdGlvbihlKXt0LnByb3RvdHlwZS5fc2V0Qm91bmRzLmNhbGwodGhpcyx7dG9wTGVmdDp7eDplLnRvcExlZnQueCx5OjB9LGJvdHRvbVJpZ2h0Ont4OmUuYm90dG9tUmlnaHQueCx5OnRoaXMuaGVpZ2h0KCl9fSl9LGUucHJvdG90eXBlLl9zZXRSZXNpemFibGVDbGFzc2VzPWZ1bmN0aW9uKHQpe3QmJnRoaXMuZW5hYmxlZCgpP3RoaXMuYWRkQ2xhc3MoIngtcmVzaXphYmxlIik6dGhpcy5yZW1vdmVDbGFzcygieC1yZXNpemFibGUiKX0sZS5wcm90b3R5cGUueVNjYWxlPWZ1bmN0aW9uKGUpe2lmKG51bGw9PWUpcmV0dXJuIHQucHJvdG90eXBlLnlTY2FsZS5jYWxsKHRoaXMpO3Rocm93IG5ldyBFcnJvcigieVNjYWxlcyBjYW5ub3QgYmUgc2V0IG9uIGFuIFhEcmFnQm94TGF5ZXIiKX0sZS5wcm90b3R5cGUueUV4dGVudD1mdW5jdGlvbihlKXtpZihudWxsPT1lKXJldHVybiB0LnByb3RvdHlwZS55RXh0ZW50LmNhbGwodGhpcyk7dGhyb3cgbmV3IEVycm9yKCJYRHJhZ0JveExheWVyIGhhcyBubyB5RXh0ZW50Iil9LGV9KShyZ3QuRHJhZ0JveExheWVyKTtlLlhEcmFnQm94TGF5ZXI9bn0pKSxQZ3Q9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBlPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gZS5hZGRDbGFzcygieS1kcmFnLWJveC1sYXllciIpLGUuX2hhc0Nvcm5lcnM9ITEsZX1yZXR1cm4gRGZ0Ll9fZXh0ZW5kcyhlLHQpLGUucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24oZSxuLGkpe3JldHVybiB0LnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcyxlLG4saSksdGhpcy5fc2V0Qm91bmRzKHRoaXMuYm91bmRzKCkpLHRoaXN9LGUucHJvdG90eXBlLl9zZXRCb3VuZHM9ZnVuY3Rpb24oZSl7dC5wcm90b3R5cGUuX3NldEJvdW5kcy5jYWxsKHRoaXMse3RvcExlZnQ6e3g6MCx5OmUudG9wTGVmdC55fSxib3R0b21SaWdodDp7eDp0aGlzLndpZHRoKCkseTplLmJvdHRvbVJpZ2h0Lnl9fSl9LGUucHJvdG90eXBlLl9zZXRSZXNpemFibGVDbGFzc2VzPWZ1bmN0aW9uKHQpe3QmJnRoaXMuZW5hYmxlZCgpP3RoaXMuYWRkQ2xhc3MoInktcmVzaXphYmxlIik6dGhpcy5yZW1vdmVDbGFzcygieS1yZXNpemFibGUiKX0sZS5wcm90b3R5cGUueFNjYWxlPWZ1bmN0aW9uKGUpe2lmKG51bGw9PWUpcmV0dXJuIHQucHJvdG90eXBlLnhTY2FsZS5jYWxsKHRoaXMpO3Rocm93IG5ldyBFcnJvcigieFNjYWxlcyBjYW5ub3QgYmUgc2V0IG9uIGFuIFlEcmFnQm94TGF5ZXIiKX0sZS5wcm90b3R5cGUueEV4dGVudD1mdW5jdGlvbihlKXtpZihudWxsPT1lKXJldHVybiB0LnByb3RvdHlwZS54RXh0ZW50LmNhbGwodGhpcyk7dGhyb3cgbmV3IEVycm9yKCJZRHJhZ0JveExheWVyIGhhcyBubyB4RXh0ZW50Iil9LGV9KShyZ3QuRHJhZ0JveExheWVyKTtlLllEcmFnQm94TGF5ZXI9bn0pKSxOZ3Q9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxEZnQuX19leHBvcnRTdGFyKHJndCxlKSxEZnQuX19leHBvcnRTdGFyKGFndCxlKSxEZnQuX19leHBvcnRTdGFyKHNndCxlKSxEZnQuX19leHBvcnRTdGFyKGNndCxlKSxEZnQuX19leHBvcnRTdGFyKG9ndCxlKSxEZnQuX19leHBvcnRTdGFyKHVndCxlKSxEZnQuX19leHBvcnRTdGFyKGhndCxlKSxEZnQuX19leHBvcnRTdGFyKHBndCxlKSxEZnQuX19leHBvcnRTdGFyKENndCxlKSxEZnQuX19leHBvcnRTdGFyKGlndCxlKSxEZnQuX19leHBvcnRTdGFyKEFndCxlKSxEZnQuX19leHBvcnRTdGFyKGtndCxlKSxEZnQuX19leHBvcnRTdGFyKExndCxlKSxEZnQuX19leHBvcnRTdGFyKFBndCxlKX0pKSxJZ3Q9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiB0LmNhbGwodGhpcywicGF0aCIsImFyYyBmaWxsIil8fHRoaXN9cmV0dXJuIERmdC5fX2V4dGVuZHMoZSx0KSxlLnByb3RvdHlwZS5fYXBwbHlEZWZhdWx0QXR0cmlidXRlcz1mdW5jdGlvbih0KXt0LnN0eWxlKCJzdHJva2UiLCJub25lIil9LGV9KShNZ3QuU1ZHRHJhd2VyKTtlLkFyY1NWR0RyYXdlcj1ufSkpLE9ndD1iZSgoZnVuY3Rpb24odCxlKXsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIHQuY2FsbCh0aGlzLCJwYXRoIiwiYXJjIG91dGxpbmUiKXx8dGhpc31yZXR1cm4gRGZ0Ll9fZXh0ZW5kcyhlLHQpLGUucHJvdG90eXBlLl9hcHBseURlZmF1bHRBdHRyaWJ1dGVzPWZ1bmN0aW9uKHQpe3Quc3R5bGUoImZpbGwiLCJub25lIil9LGV9KShNZ3QuU1ZHRHJhd2VyKTtlLkFyY091dGxpbmVTVkdEcmF3ZXI9bn0pKSxSZ3Q9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiB0LmNhbGwodGhpcywicGF0aCIsImFyZWEiKXx8dGhpc31yZXR1cm4gRGZ0Ll9fZXh0ZW5kcyhlLHQpLGUucHJvdG90eXBlLl9hcHBseURlZmF1bHRBdHRyaWJ1dGVzPWZ1bmN0aW9uKHQpe3Quc3R5bGUoInN0cm9rZSIsIm5vbmUiKX0sZS5wcm90b3R5cGUuZ2V0VmlzdWFsUHJpbWl0aXZlQXRJbmRleD1mdW5jdGlvbihlKXtyZXR1cm4gdC5wcm90b3R5cGUuZ2V0VmlzdWFsUHJpbWl0aXZlQXRJbmRleC5jYWxsKHRoaXMsMCl9LGV9KShNZ3QuU1ZHRHJhd2VyKTtlLkFyZWFTVkdEcmF3ZXI9bjt2YXIgaT1bIm9wYWNpdHkiLCJmaWxsIiwiZmlsbC1vcGFjaXR5Il0scj1bIm9wYWNpdHkiLCJzdHJva2UiLCJzdHJva2Utd2lkdGgiXTtlLm1ha2VBcmVhQ2FudmFzRHJhd1N0ZXA9ZnVuY3Rpb24gbyh0LGUpe3JldHVybiBmdW5jdGlvbihuLG8sYSl7dmFyIHM9d2d0LnJlc29sdmVBdHRyaWJ1dGVzKGEsaSxvWzBdLDApO3dndC5yZW5kZXJBcmVhKG4sdCgpLG9bMF0scyk7dmFyIGw9d2d0LnJlc29sdmVBdHRyaWJ1dGVzKGEscixvWzBdLDApO3dndC5yZW5kZXJMaW5lKG4sZSgpLG9bMF0sbCl9fX0pKSx6Z3Q9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiB0LmNhbGwodGhpcywicGF0aCIsImxpbmUiKXx8dGhpc31yZXR1cm4gRGZ0Ll9fZXh0ZW5kcyhlLHQpLGUucHJvdG90eXBlLl9hcHBseURlZmF1bHRBdHRyaWJ1dGVzPWZ1bmN0aW9uKHQpe3Quc3R5bGUoImZpbGwiLCJub25lIil9LGUucHJvdG90eXBlLmdldFZpc3VhbFByaW1pdGl2ZUF0SW5kZXg9ZnVuY3Rpb24oZSl7cmV0dXJuIHQucHJvdG90eXBlLmdldFZpc3VhbFByaW1pdGl2ZUF0SW5kZXguY2FsbCh0aGlzLDApfSxlfSkoTWd0LlNWR0RyYXdlcik7ZS5MaW5lU1ZHRHJhd2VyPW47dmFyIGk9WyJvcGFjaXR5Iiwic3Ryb2tlLW9wYWNpdHkiLCJzdHJva2Utd2lkdGgiLCJzdHJva2UiLCJzdHJva2UtZGFzaGFycmF5Il07ZS5tYWtlTGluZUNhbnZhc0RyYXdTdGVwPWZ1bmN0aW9uIHIodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbixyKXt2YXIgbz13Z3QucmVzb2x2ZUF0dHJpYnV0ZXMocixpLG5bMF0sMCk7d2d0LnJlbmRlckxpbmUoZSx0KCksblswXSxvKX19fSkpLERndD1iZSgoZnVuY3Rpb24odCxlKXsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3ZvaWQgMD09PWUmJihlPSIiKTt2YXIgbj10LmNhbGwodGhpcywicmVjdCIsIiIpfHx0aGlzO3JldHVybiBuLl9yb290Q2xhc3NOYW1lPWUsbi5fcm9vdC5jbGFzc2VkKG4uX3Jvb3RDbGFzc05hbWUsITApLG59cmV0dXJuIERmdC5fX2V4dGVuZHMoZSx0KSxlfSkoTWd0LlNWR0RyYXdlcik7ZS5SZWN0YW5nbGVTVkdEcmF3ZXI9bjt2YXIgaT13Z3QuQ29udGV4dFN0eWxlQXR0cnMuY29uY2F0KFsieCIsInkiLCJ3aWR0aCIsImhlaWdodCJdKTtlLlJlY3RhbmdsZUNhbnZhc0RyYXdTdGVwPWZ1bmN0aW9uKHQsZSxuKXt0LnNhdmUoKTtmb3IodmFyIHI9ZS5sZW5ndGgsbz0wO288cjtvKyspe3ZhciBhPWVbb107aWYobnVsbCE9YSl7dmFyIHM9d2d0LnJlc29sdmVBdHRyaWJ1dGVzKG4saSxhLG8pO3QuYmVnaW5QYXRoKCksdC5yZWN0KHMueCxzLnkscy53aWR0aCxzLmhlaWdodCksd2d0LnJlbmRlclBhdGhXaXRoU3R5bGUodCxzKX19dC5yZXN0b3JlKCl9O3ZhciByPShmdW5jdGlvbih0KXtmdW5jdGlvbiBuKG4pe3JldHVybiB0LmNhbGwodGhpcyxuLGUuUmVjdGFuZ2xlQ2FudmFzRHJhd1N0ZXApfHx0aGlzfXJldHVybiBEZnQuX19leHRlbmRzKG4sdCksbn0pKHdndC5DYW52YXNEcmF3ZXIpO2UuUmVjdGFuZ2xlQ2FudmFzRHJhd2VyPXJ9KSksQmd0PWJlKChmdW5jdGlvbih0LGUpewovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gdC5jYWxsKHRoaXMsImxpbmUiLCIiKXx8dGhpc31yZXR1cm4gRGZ0Ll9fZXh0ZW5kcyhlLHQpLGV9KShNZ3QuU1ZHRHJhd2VyKTtlLlNlZ21lbnRTVkdEcmF3ZXI9bn0pKSxIZ3Q9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTctcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUsbixpKXt2b2lkIDA9PT1pJiYoaT13aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyksdGhpcy5zY3JlZW5XaWR0aD1lLHRoaXMuc2NyZWVuSGVpZ2h0PW4sdGhpcy5kZXZpY2VQaXhlbFJhdGlvPWksdGhpcy5waXhlbFdpZHRoPWUqaSx0aGlzLnBpeGVsSGVpZ2h0PW4qaSx0aGlzLmNhbnZhcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSx0aGlzLmN0eD10aGlzLmNhbnZhcy5nZXRDb250ZXh0KCIyZCIpLHQuc2l6ZVBpeGVscyh0aGlzLmN0eCxlLG4saSl9cmV0dXJuIHQuc2l6ZVBpeGVscz1mdW5jdGlvbih0LGUsbixpKXt2YXIgcj10LmNhbnZhcztyLndpZHRoPWUqaSxyLmhlaWdodD1uKmksci5zdHlsZS53aWR0aD1lKyJweCIsci5zdHlsZS5oZWlnaHQ9bisicHgiLHQuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSx0LnNjYWxlKGksaSl9LHQucHJvdG90eXBlLmJsaXQ9ZnVuY3Rpb24odCxlLG4pe3ZvaWQgMD09PWUmJihlPTApLHZvaWQgMD09PW4mJihuPTApLHQuZHJhd0ltYWdlKHRoaXMuY2FudmFzLGUsbix0aGlzLnNjcmVlbldpZHRoLHRoaXMuc2NyZWVuSGVpZ2h0KX0sdC5wcm90b3R5cGUuYmxpdENlbnRlcj1mdW5jdGlvbih0LGUsbil7dm9pZCAwPT09ZSYmKGU9MCksdm9pZCAwPT09biYmKG49MCksdGhpcy5ibGl0KHQsTWF0aC5mbG9vcihlLXRoaXMuc2NyZWVuV2lkdGgvMiksTWF0aC5mbG9vcihuLXRoaXMuc2NyZWVuSGVpZ2h0LzIpKX0sdC5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKGUsbixpKXt2b2lkIDA9PT1pJiYoaT0hMSk7dmFyIHI9dGhpcy5kZXZpY2VQaXhlbFJhdGlvO3JldHVybiB0aGlzLnNjcmVlbldpZHRoPWUsdGhpcy5zY3JlZW5IZWlnaHQ9bix0aGlzLnBpeGVsV2lkdGg9ZSpyLHRoaXMucGl4ZWxIZWlnaHQ9bipyLHQuc2l6ZVBpeGVscyh0aGlzLmN0eCxlLG4sciksaSYmdGhpcy5jdHgudHJhbnNsYXRlKGUvMixlLzIpLHRoaXN9LHQucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1lLnBpeGVsV2lkdGgsaT1lLnBpeGVsSGVpZ2h0LHI9ZS5jdHg7cmV0dXJuIHIuc2F2ZSgpLHIuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSxudWxsPT10P3IuY2xlYXJSZWN0KDAsMCxuLGkpOihyLmZpbGxTdHlsZT10LHIuZmlsbFJlY3QoMCwwLG4saSkpLHIucmVzdG9yZSgpLHRoaXN9LHQucHJvdG90eXBlLmdldEltYWdlRGF0YT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN0eC5nZXRJbWFnZURhdGEoMCwwLHRoaXMucGl4ZWxXaWR0aCx0aGlzLnBpeGVsSGVpZ2h0KX0sdH0pKCk7ZS5DYW52YXNCdWZmZXI9bn0pKSxGZ3Q9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiB0LmNhbGwodGhpcywicGF0aCIsInN5bWJvbCIpfHx0aGlzfXJldHVybiBEZnQuX19leHRlbmRzKGUsdCksZX0pKE1ndC5TVkdEcmF3ZXIpO2UuU3ltYm9sU1ZHRHJhd2VyPW47dmFyIGk9d2d0LkNvbnRleHRTdHlsZUF0dHJzLmNvbmNhdChbIngiLCJ5Il0pO2Z1bmN0aW9uIHIodCxlLG4saSxyKXtyZXR1cm4gbityPj0wJiZuLXI8PXQmJmkrcj49MCYmaS1yPD1lfWZ1bmN0aW9uIG8odCxlLG4pe2lmKG51bGw9PXQpcmV0dXJuITE7Zm9yKHZhciBpPTA7aTxuLmxlbmd0aDtpKyspe3ZhciByPW5baV07aWYodFtyXSE9ZVtyXSlyZXR1cm4hMX1yZXR1cm4hMH1lLm1ha2VTeW1ib2xDYW52YXNEcmF3U3RlcD1mdW5jdGlvbiBhKHQsZSxuLHMpe3ZhciBsPXRoaXM7cmV0dXJuIGZ1bmN0aW9uKGEsYyx1KXtmb3IodmFyIGg9YS5jYW52YXMsZD1oLmNsaWVudFdpZHRoLHA9aC5jbGllbnRIZWlnaHQsZj12b2lkIDA9PT1zP25ldyBIZ3QuQ2FudmFzQnVmZmVyKDAsMCk6cyxtPWUoKSxnPW4oKSxfPW51bGwseT1udWxsLHY9bnVsbCxiPTA7YjxjLmxlbmd0aDtiKyspe3ZhciB4PWNbYl07aWYobnVsbCE9eCl7dmFyIHc9d2d0LnJlc29sdmVBdHRyaWJ1dGVzKHUsaSx4LGIpLFM9Zyh4LGIsdCk7aWYocihkLHAsdy54LHcueSxTKSl7dmFyIE09byhfLHcsd2d0LkNvbnRleHRTdHlsZUF0dHJzKSxFPW0oeCxiLGwuX2RhdGFzZXQpO2lmKE0mJnY9PVMmJnk9PUUpO2Vsc2V7dmFyIFQ9Uyt3Z3QuZ2V0U3Ryb2tlV2lkdGgodykrMTsoVD5mLnNjcmVlbldpZHRofHxUPmYuc2NyZWVuSGVpZ2h0KSYmZi5yZXNpemUoVCxULCEwKSxmLmNsZWFyKCk7dmFyIEM9Zi5jdHg7Qy5iZWdpblBhdGgoKSxFKFMpLmNvbnRleHQoQykobnVsbCksQy5jbG9zZVBhdGgoKSx3Z3QucmVuZGVyUGF0aFdpdGhTdHlsZShDLHcpLHk9RSx2PVMsXz13fWYuYmxpdENlbnRlcihhLHcueCx3LnkpfX19fX19KSksVmd0PWJlKChmdW5jdGlvbih0LGUpewovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksRGZ0Ll9fZXhwb3J0U3RhcihJZ3QsZSksRGZ0Ll9fZXhwb3J0U3RhcihPZ3QsZSksRGZ0Ll9fZXhwb3J0U3RhcihSZ3QsZSksRGZ0Ll9fZXhwb3J0U3Rhcih3Z3QsZSksRGZ0Ll9fZXhwb3J0U3RhcihTZ3QsZSksRGZ0Ll9fZXhwb3J0U3Rhcih6Z3QsZSksRGZ0Ll9fZXhwb3J0U3RhcihEZ3QsZSksRGZ0Ll9fZXhwb3J0U3RhcihCZ3QsZSksRGZ0Ll9fZXhwb3J0U3RhcihNZ3QsZSksRGZ0Ll9fZXhwb3J0U3RhcihGZ3QsZSl9KSksVWd0PWJlKChmdW5jdGlvbih0LGUpewovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt2YXIgZT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGUuX2F1dG9BZGp1c3RYU2NhbGVEb21haW49ITEsZS5fYXV0b0FkanVzdFlTY2FsZURvbWFpbj0hMSxlLl9kZWZlcnJlZFJlbmRlcmluZz0hMSxlLl9hcHBseURlZmVycmVkUmVuZGVyaW5nVHJhbnNmb3JtPWZ1bmN0aW9uKHQsbixpLHIpe2UuX2lzQW5jaG9yZWQmJihudWxsIT1lLl9yZW5kZXJBcmVhJiZlLl9yZW5kZXJBcmVhLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3QrIiwgIituKyIpIHNjYWxlKCIraSsiLCAiK3IrIikiKSxudWxsIT1lLl9jYW52YXMmJmUuX2NhbnZhcy5zdHlsZSgidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdCsicHgsICIrbisicHgpIHNjYWxlKCIraSsiLCAiK3IrIikiKSl9LGUuYWRkQ2xhc3MoInh5LXBsb3QiKSxlLl9hZGp1c3RZRG9tYWluT25DaGFuZ2VGcm9tWENhbGxiYWNrPWZ1bmN0aW9uKHQpe3JldHVybiBlLl9hZGp1c3RZRG9tYWluT25DaGFuZ2VGcm9tWCgpfSxlLl9hZGp1c3RYRG9tYWluT25DaGFuZ2VGcm9tWUNhbGxiYWNrPWZ1bmN0aW9uKHQpe3JldHVybiBlLl9hZGp1c3RYRG9tYWluT25DaGFuZ2VGcm9tWSgpfSxlLl9yZW5kZXJDYWxsYmFjaz1mdW5jdGlvbigpe2lmKGUuZGVmZXJyZWRSZW5kZXJpbmcoKSl7dmFyIHQ9ZS54KCkmJmUueCgpLnNjYWxlLG49ZS55KCkmJmUueSgpLnNjYWxlO2UuX2RlZmVycmVkUmVuZGVyZXIudXBkYXRlRG9tYWlucyh0LG4pfWVsc2UgZS5yZW5kZXIoKX0sZS5fZGVmZXJyZWRSZW5kZXJlcj1uZXcgRWd0LkRlZmVycmVkUmVuZGVyZXIoKGZ1bmN0aW9uKCl7cmV0dXJuIGUucmVuZGVyKCl9KSxlLl9hcHBseURlZmVycmVkUmVuZGVyaW5nVHJhbnNmb3JtKSxlfXJldHVybiBEZnQuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVmZXJyZWRSZW5kZXJpbmcoKSYmdGhpcy5fZGVmZXJyZWRSZW5kZXJlci5yZXNldFRyYW5zZm9ybXMoKSx0LnByb3RvdHlwZS5yZW5kZXIuY2FsbCh0aGlzKX0sZS5wcm90b3R5cGUuZGVmZXJyZWRSZW5kZXJpbmc9ZnVuY3Rpb24odCl7aWYobnVsbD09dClyZXR1cm4gdGhpcy5fZGVmZXJyZWRSZW5kZXJpbmc7aWYodCl7dmFyIGU9dGhpcy54KCkmJnRoaXMueCgpLnNjYWxlLG49dGhpcy55KCkmJnRoaXMueSgpLnNjYWxlO3RoaXMuX2RlZmVycmVkUmVuZGVyZXIuc2V0RG9tYWlucyhlLG4pfXJldHVybiB0aGlzLl9kZWZlcnJlZFJlbmRlcmluZz10LHRoaXN9LGUucHJvdG90eXBlLng9ZnVuY3Rpb24odCxuLGkpe2lmKG51bGw9PXQpcmV0dXJuIHRoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KGUuX1hfS0VZKTt0aGlzLl9iaW5kUHJvcGVydHkoZS5fWF9LRVksdCxuLGkpO3ZhciByPXRoaXMud2lkdGgoKTtyZXR1cm4gbnVsbCE9biYmbnVsbCE9ciYmbi5yYW5nZShbMCxyXSksdGhpcy5fYXV0b0FkanVzdFlTY2FsZURvbWFpbiYmdGhpcy5fdXBkYXRlWUV4dGVudHNBbmRBdXRvZG9tYWluKCksdGhpcy5yZW5kZXIoKSx0aGlzfSxlLnByb3RvdHlwZS55PWZ1bmN0aW9uKHQsbixpKXtpZihudWxsPT10KXJldHVybiB0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldChlLl9ZX0tFWSk7dGhpcy5fYmluZFByb3BlcnR5KGUuX1lfS0VZLHQsbixpKTt2YXIgcj10aGlzLmhlaWdodCgpO3JldHVybiBudWxsIT1uJiZudWxsIT1yJiZuLnJhbmdlKG4gaW5zdGFuY2VvZiBVbXQuQ2F0ZWdvcnk/WzAscl06W3IsMF0pLHRoaXMuX2F1dG9BZGp1c3RYU2NhbGVEb21haW4mJnRoaXMuX3VwZGF0ZVhFeHRlbnRzQW5kQXV0b2RvbWFpbigpLHRoaXMucmVuZGVyKCksdGhpc30sZS5wcm90b3R5cGUuX2ZpbHRlckZvclByb3BlcnR5PWZ1bmN0aW9uKHQpe3JldHVybiJ4Ij09PXQmJnRoaXMuX2F1dG9BZGp1c3RYU2NhbGVEb21haW4/dGhpcy5fbWFrZUZpbHRlckJ5UHJvcGVydHkoInkiKToieSIhPT10JiYieTAiIT09dHx8IXRoaXMuX2F1dG9BZGp1c3RZU2NhbGVEb21haW4/bnVsbDp0aGlzLl9tYWtlRmlsdGVyQnlQcm9wZXJ0eSgieCIpfSxlLnByb3RvdHlwZS5fbWFrZUZpbHRlckJ5UHJvcGVydHk9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQodCk7aWYobnVsbCE9ZSl7dmFyIG49ZS5hY2Nlc3NvcixpPWUuc2NhbGU7aWYobnVsbCE9aSlyZXR1cm4gZnVuY3Rpb24odCxlLHIpe3ZhciBvPWkucmFuZ2UoKTtyZXR1cm4gU210Lk1hdGguaW5SYW5nZShpLnNjYWxlKG4odCxlLHIpKSxvWzBdLG9bMV0pfX1yZXR1cm4gbnVsbH0sZS5wcm90b3R5cGUuX3VuaW5zdGFsbFNjYWxlRm9yS2V5PWZ1bmN0aW9uKG4saSl7dC5wcm90b3R5cGUuX3VuaW5zdGFsbFNjYWxlRm9yS2V5LmNhbGwodGhpcyxuLGkpLG4ub2ZmVXBkYXRlKGk9PT1lLl9YX0tFWT90aGlzLl9hZGp1c3RZRG9tYWluT25DaGFuZ2VGcm9tWENhbGxiYWNrOnRoaXMuX2FkanVzdFhEb21haW5PbkNoYW5nZUZyb21ZQ2FsbGJhY2spfSxlLnByb3RvdHlwZS5faW5zdGFsbFNjYWxlRm9yS2V5PWZ1bmN0aW9uKG4saSl7dC5wcm90b3R5cGUuX2luc3RhbGxTY2FsZUZvcktleS5jYWxsKHRoaXMsbixpKSxuLm9uVXBkYXRlKGk9PT1lLl9YX0tFWT90aGlzLl9hZGp1c3RZRG9tYWluT25DaGFuZ2VGcm9tWENhbGxiYWNrOnRoaXMuX2FkanVzdFhEb21haW5PbkNoYW5nZUZyb21ZQ2FsbGJhY2spfSxlLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7cmV0dXJuIHQucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKSx0aGlzLngoKS5zY2FsZSYmdGhpcy54KCkuc2NhbGUub2ZmVXBkYXRlKHRoaXMuX2FkanVzdFlEb21haW5PbkNoYW5nZUZyb21YQ2FsbGJhY2spLHRoaXMueSgpLnNjYWxlJiZ0aGlzLnkoKS5zY2FsZS5vZmZVcGRhdGUodGhpcy5fYWRqdXN0WERvbWFpbk9uQ2hhbmdlRnJvbVlDYWxsYmFjayksdGhpc30sZS5wcm90b3R5cGUuYXV0b3JhbmdlTW9kZT1mdW5jdGlvbih0KXtpZihudWxsPT10KXJldHVybiB0aGlzLl9hdXRvQWRqdXN0WFNjYWxlRG9tYWluPyJ4Ijp0aGlzLl9hdXRvQWRqdXN0WVNjYWxlRG9tYWluPyJ5Ijoibm9uZSI7c3dpdGNoKHQpe2Nhc2UieCI6dGhpcy5fYXV0b0FkanVzdFhTY2FsZURvbWFpbj0hMCx0aGlzLl9hdXRvQWRqdXN0WVNjYWxlRG9tYWluPSExLHRoaXMuX2FkanVzdFhEb21haW5PbkNoYW5nZUZyb21ZKCk7YnJlYWs7Y2FzZSJ5Ijp0aGlzLl9hdXRvQWRqdXN0WFNjYWxlRG9tYWluPSExLHRoaXMuX2F1dG9BZGp1c3RZU2NhbGVEb21haW49ITAsdGhpcy5fYWRqdXN0WURvbWFpbk9uQ2hhbmdlRnJvbVgoKTticmVhaztjYXNlIm5vbmUiOnRoaXMuX2F1dG9BZGp1c3RYU2NhbGVEb21haW49ITEsdGhpcy5fYXV0b0FkanVzdFlTY2FsZURvbWFpbj0hMTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzY2FsZSBuYW1lICciK3QrIicsIG11c3QgYmUgJ3gnLCAneScgb3IgJ25vbmUnIil9cmV0dXJuIHRoaXN9LGUucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24oZSxuLGkpe3QucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQuY2FsbCh0aGlzLGUsbixpKTt2YXIgcj10aGlzLngoKSxvPXImJnIuc2NhbGU7bnVsbCE9byYmby5yYW5nZShbMCx0aGlzLndpZHRoKCldKTt2YXIgYT10aGlzLnkoKSxzPWEmJmEuc2NhbGU7cmV0dXJuIG51bGwhPXMmJnMucmFuZ2UocyBpbnN0YW5jZW9mIFVtdC5DYXRlZ29yeT9bMCx0aGlzLmhlaWdodCgpXTpbdGhpcy5oZWlnaHQoKSwwXSksdGhpc30sZS5wcm90b3R5cGUuX3VwZGF0ZVhFeHRlbnRzQW5kQXV0b2RvbWFpbj1mdW5jdGlvbigpe3ZhciB0PXRoaXMueCgpLnNjYWxlO251bGwhPXQmJnQuYXV0b0RvbWFpbigpfSxlLnByb3RvdHlwZS5fdXBkYXRlWUV4dGVudHNBbmRBdXRvZG9tYWluPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy55KCkuc2NhbGU7bnVsbCE9dCYmdC5hdXRvRG9tYWluKCl9LGUucHJvdG90eXBlLnNob3dBbGxEYXRhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3VwZGF0ZVhFeHRlbnRzQW5kQXV0b2RvbWFpbigpLHRoaXMuX3VwZGF0ZVlFeHRlbnRzQW5kQXV0b2RvbWFpbigpLHRoaXN9LGUucHJvdG90eXBlLl9hZGp1c3RZRG9tYWluT25DaGFuZ2VGcm9tWD1mdW5jdGlvbigpe3RoaXMuX3Byb2plY3RvcnNSZWFkeSgpJiZ0aGlzLl9hdXRvQWRqdXN0WVNjYWxlRG9tYWluJiZ0aGlzLl91cGRhdGVZRXh0ZW50c0FuZEF1dG9kb21haW4oKX0sZS5wcm90b3R5cGUuX2FkanVzdFhEb21haW5PbkNoYW5nZUZyb21ZPWZ1bmN0aW9uKCl7dGhpcy5fcHJvamVjdG9yc1JlYWR5KCkmJnRoaXMuX2F1dG9BZGp1c3RYU2NhbGVEb21haW4mJnRoaXMuX3VwZGF0ZVhFeHRlbnRzQW5kQXV0b2RvbWFpbigpfSxlLnByb3RvdHlwZS5fcHJvamVjdG9yc1JlYWR5PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy54KCksZT10aGlzLnkoKTtyZXR1cm4gbnVsbCE9dCYmbnVsbCE9dC5hY2Nlc3NvciYmbnVsbCE9ZSYmbnVsbCE9ZS5hY2Nlc3Nvcn0sZS5wcm90b3R5cGUuX3BpeGVsUG9pbnQ9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPVRndC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSkscj1UZ3QuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpO3JldHVybnt4OmkodCxlLG4pLHk6cih0LGUsbil9fSxlLnByb3RvdHlwZS5fZ2V0RGF0YVRvRHJhdz1mdW5jdGlvbigpe3ZhciBlPXRoaXMsbj10LnByb3RvdHlwZS5fZ2V0RGF0YVRvRHJhdy5jYWxsKHRoaXMpLGk9dGhpcy5hdHRyKCJkZWZpbmVkIik7cmV0dXJuIHRoaXMuZGF0YXNldHMoKS5mb3JFYWNoKChmdW5jdGlvbih0KXtuLnNldCh0LG4uZ2V0KHQpLmZpbHRlcigoZnVuY3Rpb24obixyKXtyZXR1cm4oZnVuY3Rpb24odCxuLHIpe3ZhciBvPVRndC5QbG90Ll9zY2FsZWRBY2Nlc3NvcihlLngoKSkodCxuLHIpLGE9VGd0LlBsb3QuX3NjYWxlZEFjY2Vzc29yKGUueSgpKSh0LG4scik7cmV0dXJuKCFpfHwhMSE9PWkuYWNjZXNzb3IodCxuLHIpKSYmU210Lk1hdGguaXNWYWxpZE51bWJlcihvKSYmU210Lk1hdGguaXNWYWxpZE51bWJlcihhKX0pKG4scix0KX0pKSl9KSksbn0sZS5fWF9LRVk9IngiLGUuX1lfS0VZPSJ5IixlfSkoVGd0LlBsb3QpO2UuWFlQbG90PW59KSksamd0PWJlKChmdW5jdGlvbih0LGUpewovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49e2xpbmVhcjppZHQuY3VydmVMaW5lYXIsbGluZWFyQ2xvc2VkOmlkdC5jdXJ2ZUxpbmVhckNsb3NlZCxzdGVwOmlkdC5jdXJ2ZVN0ZXAsc3RlcEJlZm9yZTppZHQuY3VydmVTdGVwQmVmb3JlLHN0ZXBBZnRlcjppZHQuY3VydmVTdGVwQWZ0ZXIsYmFzaXM6aWR0LmN1cnZlQmFzaXMsYmFzaXNPcGVuOmlkdC5jdXJ2ZUJhc2lzT3BlbixiYXNpc0Nsb3NlZDppZHQuY3VydmVCYXNpc0Nsb3NlZCxidW5kbGU6aWR0LmN1cnZlQnVuZGxlLGNhcmRpbmFsOmlkdC5jdXJ2ZUNhcmRpbmFsLGNhcmRpbmFsT3BlbjppZHQuY3VydmVDYXJkaW5hbE9wZW4sY2FyZGluYWxDbG9zZWQ6aWR0LmN1cnZlQ2FyZGluYWxDbG9zZWQsbW9ub3RvbmU6aWR0LmN1cnZlTW9ub3RvbmVYfTtlLkN1cnZlTmFtZT1JZnQubWFrZUVudW0oWyJsaW5lYXIiLCJsaW5lYXJDbG9zZWQiLCJzdGVwIiwic3RlcEJlZm9yZSIsInN0ZXBBZnRlciIsImJhc2lzIiwiYmFzaXNPcGVuIiwiYmFzaXNDbG9zZWQiLCJidW5kbGUiLCJjYXJkaW5hbCIsImNhcmRpbmFsT3BlbiIsImNhcmRpbmFsQ2xvc2VkIiwibW9ub3RvbmUiXSk7dmFyIGk9KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt2YXIgZT10LmNhbGwodGhpcyl8fHRoaXM7ZS5fY3VydmU9ImxpbmVhciIsZS5fYXV0b3JhbmdlU21vb3RoPSExLGUuX2Nyb3BwZWRSZW5kZXJpbmdFbmFibGVkPSEwLGUuX2NvbGxhcHNlRGVuc2VWZXJ0aWNhbExpbmVzRW5hYmxlZD0hMSxlLl9kb3duc2FtcGxpbmdFbmFibGVkPSExLGUuYWRkQ2xhc3MoImxpbmUtcGxvdCIpO3ZhciBuPW5ldyBCZnQuRWFzaW5nO3JldHVybiBuLnN0ZXBEdXJhdGlvbihUZ3QuUGxvdC5fQU5JTUFUSU9OX01BWF9EVVJBVElPTiksbi5lYXNpbmdNb2RlKCJleHBJbk91dCIpLG4ubWF4VG90YWxEdXJhdGlvbihUZ3QuUGxvdC5fQU5JTUFUSU9OX01BWF9EVVJBVElPTiksZS5hbmltYXRvcih0X3QuQW5pbWF0b3IuTUFJTixuKSxlLmF0dHIoInN0cm9rZSIsKG5ldyBVbXQuQ29sb3IpLnJhbmdlKClbMF0pLGUuYXR0cigic3Ryb2tlLXdpZHRoIiwiMnB4IiksZX1yZXR1cm4gRGZ0Ll9fZXh0ZW5kcyhlLHQpLGUucHJvdG90eXBlLng9ZnVuY3Rpb24oZSxuLGkpe3JldHVybiBudWxsPT1lP3QucHJvdG90eXBlLnguY2FsbCh0aGlzKToodC5wcm90b3R5cGUueC5jYWxsKHRoaXMsZSxuLGkpLHRoaXMuX3NldFNjYWxlU25hcHBpbmcoKSx0aGlzKX0sZS5wcm90b3R5cGUueT1mdW5jdGlvbihlLG4saSl7cmV0dXJuIG51bGw9PWU/dC5wcm90b3R5cGUueS5jYWxsKHRoaXMpOih0LnByb3RvdHlwZS55LmNhbGwodGhpcyxlLG4saSksdGhpcy5fc2V0U2NhbGVTbmFwcGluZygpLHRoaXMpfSxlLnByb3RvdHlwZS5hdXRvcmFuZ2VNb2RlPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP3QucHJvdG90eXBlLmF1dG9yYW5nZU1vZGUuY2FsbCh0aGlzKToodC5wcm90b3R5cGUuYXV0b3JhbmdlTW9kZS5jYWxsKHRoaXMsZSksdGhpcy5fc2V0U2NhbGVTbmFwcGluZygpLHRoaXMpfSxlLnByb3RvdHlwZS5hdXRvcmFuZ2VTbW9vdGg9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5fYXV0b3JhbmdlU21vb3RoOih0aGlzLl9hdXRvcmFuZ2VTbW9vdGg9dCx0aGlzLl9zZXRTY2FsZVNuYXBwaW5nKCksdGhpcyl9LGUucHJvdG90eXBlLl9zZXRTY2FsZVNuYXBwaW5nPWZ1bmN0aW9uKCl7IngiPT09dGhpcy5hdXRvcmFuZ2VNb2RlKCkmJnRoaXMueCgpJiZ0aGlzLngoKS5zY2FsZSYmdGhpcy54KCkuc2NhbGUgaW5zdGFuY2VvZiBEbXQuUXVhbnRpdGF0aXZlU2NhbGUmJnRoaXMueCgpLnNjYWxlLnNuYXBwaW5nRG9tYWluRW5hYmxlZCghdGhpcy5hdXRvcmFuZ2VTbW9vdGgoKSksInkiPT09dGhpcy5hdXRvcmFuZ2VNb2RlKCkmJnRoaXMueSgpJiZ0aGlzLnkoKS5zY2FsZSYmdGhpcy55KCkuc2NhbGUgaW5zdGFuY2VvZiBEbXQuUXVhbnRpdGF0aXZlU2NhbGUmJnRoaXMueSgpLnNjYWxlLnNuYXBwaW5nRG9tYWluRW5hYmxlZCghdGhpcy5hdXRvcmFuZ2VTbW9vdGgoKSl9LGUucHJvdG90eXBlLmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX2N1cnZlOih0aGlzLl9jdXJ2ZT10LHRoaXMucmVuZGVyKCksdGhpcyl9LGUucHJvdG90eXBlLmRvd25zYW1wbGluZ0VuYWJsZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5fZG93bnNhbXBsaW5nRW5hYmxlZDoodGhpcy5fZG93bnNhbXBsaW5nRW5hYmxlZD10LHRoaXMpfSxlLnByb3RvdHlwZS5jcm9wcGVkUmVuZGVyaW5nRW5hYmxlZD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9jcm9wcGVkUmVuZGVyaW5nRW5hYmxlZDoodGhpcy5fY3JvcHBlZFJlbmRlcmluZ0VuYWJsZWQ9dCx0aGlzLnJlbmRlcigpLHRoaXMpfSxlLnByb3RvdHlwZS5jb2xsYXBzZURlbnNlTGluZXNFbmFibGVkPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX2NvbGxhcHNlRGVuc2VWZXJ0aWNhbExpbmVzRW5hYmxlZDoodGhpcy5fY29sbGFwc2VEZW5zZVZlcnRpY2FsTGluZXNFbmFibGVkPXQsdGhpcy5yZW5kZXIoKSx0aGlzKX0sZS5wcm90b3R5cGUuX2NyZWF0ZURyYXdlcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiBuZXcgU2d0LlByb3h5RHJhd2VyKChmdW5jdGlvbigpe3JldHVybiBuZXcgemd0LkxpbmVTVkdEcmF3ZXJ9KSwoZnVuY3Rpb24obil7cmV0dXJuIG5ldyBWZ3QuQ2FudmFzRHJhd2VyKG4semd0Lm1ha2VMaW5lQ2FudmFzRHJhd1N0ZXAoKGZ1bmN0aW9uKCl7cmV0dXJuIGUuX2QzTGluZUZhY3RvcnkodCl9KSkpfSkpfSxlLnByb3RvdHlwZS5nZXRFeHRlbnRzRm9yUHJvcGVydHk9ZnVuY3Rpb24oZSl7dmFyIG49dC5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5LmNhbGwodGhpcyxlKTtpZighdGhpcy5fYXV0b3JhbmdlU21vb3RoKXJldHVybiBuO2lmKHRoaXMuYXV0b3JhbmdlTW9kZSgpIT09ZSlyZXR1cm4gbjtpZigieCIhPT10aGlzLmF1dG9yYW5nZU1vZGUoKSYmInkiIT09dGhpcy5hdXRvcmFuZ2VNb2RlKCkpcmV0dXJuIG47dmFyIGkscj10aGlzLl9nZXRFZGdlSW50ZXJzZWN0aW9uUG9pbnRzKCk7cmV0dXJuIGk9InkiPT09dGhpcy5hdXRvcmFuZ2VNb2RlKCk/ci5sZWZ0LmNvbmNhdChyLnJpZ2h0KS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnl9KSk6ci50b3AuY29uY2F0KHIuYm90dG9tKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnh9KSksbi5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBpZHQuZXh0ZW50KGlkdC5tZXJnZShbdCxpXSkpfSkpfSxlLnByb3RvdHlwZS5fZ2V0RWRnZUludGVyc2VjdGlvblBvaW50cz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7aWYoISh0aGlzLnkoKS5zY2FsZSBpbnN0YW5jZW9mIERtdC5RdWFudGl0YXRpdmVTY2FsZSYmdGhpcy54KCkuc2NhbGUgaW5zdGFuY2VvZiBEbXQuUXVhbnRpdGF0aXZlU2NhbGUpKXJldHVybntsZWZ0OltdLHJpZ2h0OltdLHRvcDpbXSxib3R0b206W119O3ZhciBlPXRoaXMueSgpLnNjYWxlLG49dGhpcy54KCkuc2NhbGUsaT17bGVmdDpbXSxyaWdodDpbXSx0b3A6W10sYm90dG9tOltdfSxyPW4uc2NhbGUobi5kb21haW4oKVswXSksbz1uLnNjYWxlKG4uZG9tYWluKClbMV0pLGE9ZS5zY2FsZShlLmRvbWFpbigpWzBdKSxzPWUuc2NhbGUoZS5kb21haW4oKVsxXSk7cmV0dXJuIHRoaXMuZGF0YXNldHMoKS5mb3JFYWNoKChmdW5jdGlvbihsKXtmb3IodmFyIGMsdSxoLGQscD1sLmRhdGEoKSxmPTE7ZjxwLmxlbmd0aDtmKyspYz1ofHxuLnNjYWxlKHQueCgpLmFjY2Vzc29yKHBbZi0xXSxmLTEsbCkpLHU9ZHx8ZS5zY2FsZSh0LnkoKS5hY2Nlc3NvcihwW2YtMV0sZi0xLGwpKSxoPW4uc2NhbGUodC54KCkuYWNjZXNzb3IocFtmXSxmLGwpKSxkPWUuc2NhbGUodC55KCkuYWNjZXNzb3IocFtmXSxmLGwpKSxjPHI9PXI8PWgmJmkubGVmdC5wdXNoKHt4OnIseTplLmludmVydCh1KyhyLWMpKihkLXUpLyhoLWMpKX0pLGM8bz09bzw9aCYmaS5yaWdodC5wdXNoKHt4Om8seTplLmludmVydCh1KyhvLWMpKihkLXUpLyhoLWMpKX0pLHU8cz09czw9ZCYmaS50b3AucHVzaCh7eDpuLmludmVydChjKyhzLXUpKihoLWMpLyhkLXUpKSx5OnN9KSx1PGE9PWE8PWQmJmkuYm90dG9tLnB1c2goe3g6bi5pbnZlcnQoYysoYS11KSooaC1jKS8oZC11KSkseTphfSl9KSksaX0sZS5wcm90b3R5cGUuX2dldFJlc2V0WUZ1bmN0aW9uPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy55KCkuc2NhbGUuZG9tYWluKCksZT1NYXRoLm1heCh0WzBdLHRbMV0pLG49TWF0aC5taW4odFswXSx0WzFdKSxpPWU8MCYmZXx8bj4wJiZufHwwLHI9dGhpcy55KCkuc2NhbGUuc2NhbGUoaSk7cmV0dXJuIGZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gcn19LGUucHJvdG90eXBlLl9nZW5lcmF0ZURyYXdTdGVwcz1mdW5jdGlvbigpe3ZhciB0PVtdO2lmKHRoaXMuX2FuaW1hdGVPbk5leHRSZW5kZXIoKSl7dmFyIGU9dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCk7ZS5kPXRoaXMuX2NvbnN0cnVjdExpbmVQcm9qZWN0b3IoVGd0LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSx0aGlzLl9nZXRSZXNldFlGdW5jdGlvbigpKSx0LnB1c2goe2F0dHJUb1Byb2plY3RvcjplLGFuaW1hdG9yOnRoaXMuX2dldEFuaW1hdG9yKHRfdC5BbmltYXRvci5SRVNFVCl9KX1yZXR1cm4gdC5wdXNoKHthdHRyVG9Qcm9qZWN0b3I6dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3IodF90LkFuaW1hdG9yLk1BSU4pfSksdH0sZS5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yPWZ1bmN0aW9uKCl7dmFyIGU9dC5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yLmNhbGwodGhpcyk7cmV0dXJuIE9iamVjdC5rZXlzKGUpLmZvckVhY2goKGZ1bmN0aW9uKHQpe2lmKCJkIiE9PXQpe3ZhciBuPWVbdF07ZVt0XT1mdW5jdGlvbih0LGUsaSl7cmV0dXJuIHQubGVuZ3RoPjA/bih0WzBdLGUsaSk6bnVsbH19fSkpLGV9LGUucHJvdG90eXBlLmVudGl0aWVzQXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5lbnRpdHlOZWFyZXN0QnlYVGhlblkodCk7cmV0dXJuIG51bGwhPWU/W2VdOltdfSxlLnByb3RvdHlwZS5lbnRpdHlOZWFyZXN0QnlYVGhlblk9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG49MS8wLGk9MS8wLHI9dGhpcy5ib3VuZHMoKSxvPXRoaXMuZW50aXRpZXMoKSxhPW8ubGVuZ3RoLHM9MDtzPGE7cysrKXt2YXIgbD1vW3NdO2lmKFNtdC5NYXRoLndpdGhpbihsLnBvc2l0aW9uLHIpKXt2YXIgYz1NYXRoLmFicyh0LngtbC5wb3NpdGlvbi54KSx1PU1hdGguYWJzKHQueS1sLnBvc2l0aW9uLnkpOyhjPG58fGM9PT1uJiZ1PGkpJiYoZT1sLG49YyxpPXUpfX1yZXR1cm4gZX0sZS5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycz1mdW5jdGlvbigpe3ZhciBlPXQucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnMuY2FsbCh0aGlzKTtyZXR1cm4gZS5kPXRoaXMuX2NvbnN0cnVjdExpbmVQcm9qZWN0b3IoVGd0LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSxUZ3QuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpKSxlfSxlLnByb3RvdHlwZS5fY29uc3RydWN0TGluZVByb2plY3Rvcj1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7cmV0dXJuIGZ1bmN0aW9uKGkscixvKXtyZXR1cm4gbi5fZDNMaW5lRmFjdG9yeShvLHQsZSkoaSl9fSxlLnByb3RvdHlwZS5fZDNMaW5lRmFjdG9yeT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHZvaWQgMD09PWUmJihlPVRndC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSkpLHZvaWQgMD09PW4mJihuPVRndC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSkpLGlkdC5saW5lKCkueCgoZnVuY3Rpb24obixpKXtyZXR1cm4gZShuLGksdCl9KSkueSgoZnVuY3Rpb24oZSxpKXtyZXR1cm4gbihlLGksdCl9KSkuY3VydmUodGhpcy5fZ2V0Q3VydmVGYWN0b3J5KCkpLmRlZmluZWQoKGZ1bmN0aW9uKGkscil7cmV0dXJuKGZ1bmN0aW9uKHQsaSxyKXt2YXIgbz1lKHQsaSxyKSxhPW4odCxpLHIpO3JldHVybiBTbXQuTWF0aC5pc1ZhbGlkTnVtYmVyKG8pJiZTbXQuTWF0aC5pc1ZhbGlkTnVtYmVyKGEpfSkoaSxyLHQpfSkpfSxlLnByb3RvdHlwZS5fZ2V0Q3VydmVGYWN0b3J5PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jdXJ2ZSgpO2lmKCJzdHJpbmciPT10eXBlb2YgdCl7dmFyIGU9blt0XTtyZXR1cm4gbnVsbD09ZT9uLmxpbmVhcjplfXJldHVybiB0fSxlLnByb3RvdHlwZS5fZ2V0RGF0YVRvRHJhdz1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT1uZXcgU210Lk1hcDtyZXR1cm4gdGhpcy5kYXRhc2V0cygpLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciBpPW4uZGF0YSgpO2lmKHQuX2Nyb3BwZWRSZW5kZXJpbmdFbmFibGVkfHx0Ll9kb3duc2FtcGxpbmdFbmFibGVkKXtmb3IodmFyIHI9W10sbz1pLmxlbmd0aCxhPTA7YTxvO2ErKylyW2FdPWE7dC5fY3JvcHBlZFJlbmRlcmluZ0VuYWJsZWQmJihyPXQuX2ZpbHRlckNyb3BwZWRSZW5kZXJpbmcobixyKSksdC5fZG93bnNhbXBsaW5nRW5hYmxlZCYmKHI9dC5fZmlsdGVyRG93bnNhbXBsaW5nKG4scikpLHQuX2NvbGxhcHNlRGVuc2VWZXJ0aWNhbExpbmVzRW5hYmxlZCYmKHI9dC5fZmlsdGVyRGVuc2VMaW5lcyhuLHIpKTt2YXIgcz1bXSxsPXIubGVuZ3RoO2ZvcihhPTA7YTxsO2ErKylzW2FdPWlbclthXV07ZS5zZXQobixbc10pfWVsc2UgZS5zZXQobixbaV0pfSkpLGV9LGUucHJvdG90eXBlLl9maWx0ZXJDcm9wcGVkUmVuZGVyaW5nPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXRoaXMsaT1UZ3QuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpLHI9VGd0LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKSxvPXQuZGF0YSgpLGE9W10scz1mdW5jdGlvbih0LGUpe3JldHVybiBTbXQuTWF0aC5pblJhbmdlKHQsMCxuLndpZHRoKCkpJiZTbXQuTWF0aC5pblJhbmdlKGUsMCxuLmhlaWdodCgpKX0sbD0wO2w8ZS5sZW5ndGg7bCsrKXt2YXIgYz1zKGkob1tlW2xdXSxlW2xdLHQpLHIob1tlW2xdXSxlW2xdLHQpKTtpZighYyYmbnVsbCE9ZVtsLTFdJiZudWxsIT1vW2VbbC0xXV0pe3ZhciB1PWkob1tlW2wtMV1dLGVbbC0xXSx0KSxoPXIob1tlW2wtMV1dLGVbbC0xXSx0KTtjPWN8fHModSxoKX1pZighYyYmbnVsbCE9ZVtsKzFdJiZudWxsIT1vW2VbbCsxXV0pe3ZhciBkPWkob1tlW2wrMV1dLGVbbCsxXSx0KSxwPXIob1tlW2wrMV1dLGVbbCsxXSx0KTtjPWN8fHMoZCxwKX1jJiZhLnB1c2goZVtsXSl9cmV0dXJuIGF9LGUucHJvdG90eXBlLl9maWx0ZXJEb3duc2FtcGxpbmc9ZnVuY3Rpb24odCxlKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuW107Zm9yKHZhciBuPXQuZGF0YSgpLGk9VGd0LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSxyPVRndC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSksbz1bZVswXV0sYT1mdW5jdGlvbihvLGEpe3ZhciBzPWkobltlW29dXSxlW29dLHQpLGw9cihuW2Vbb11dLGVbb10sdCksYz1pKG5bZVtvKzFdXSxlW28rMV0sdCksdT1yKG5bZVtvKzFdXSxlW28rMV0sdCk7aWYoYT09PTEvMClyZXR1cm4gTWF0aC5mbG9vcihzKT09PU1hdGguZmxvb3IoYyk7dmFyIGg9bCsoYy1zKSphO3JldHVybiBNYXRoLmZsb29yKHUpPT09TWF0aC5mbG9vcihoKX0scz0wO3M8ZS5sZW5ndGgtMTspe2Zvcih2YXIgbD1lW3NdLGM9aShuW2Vbc11dLGVbc10sdCksdT1yKG5bZVtzXV0sZVtzXSx0KSxoPWkobltlW3MrMV1dLGVbcysxXSx0KSxkPXIobltlW3MrMV1dLGVbcysxXSx0KSxwPU1hdGguZmxvb3IoYyk9PT1NYXRoLmZsb29yKGgpPzEvMDooZC11KS8oaC1jKSxmPWVbc10sbT1wPT09MS8wP3U6YyxnPWYsXz1tLHk9ITA7czxlLmxlbmd0aC0xJiYoeXx8YShzLHApKTspe3MrKyx5PSExO3ZhciB2PXA9PT0xLzA/cihuW2Vbc11dLGVbc10sdCk6aShuW2Vbc11dLGVbc10sdCk7dj5fJiYoXz12LGc9ZVtzXSksdjxtJiYobT12LGY9ZVtzXSl9dmFyIGI9ZVtzXTtmIT09bCYmby5wdXNoKGYpLGchPT1mJiZnIT09bCYmby5wdXNoKGcpLGIhPT1sJiZiIT09ZiYmYiE9PWcmJm8ucHVzaChiKX1yZXR1cm4gb30sZS5wcm90b3R5cGUuX2ZpbHRlckRlbnNlTGluZXM9ZnVuY3Rpb24odCxlKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuW107dmFyIG49dC5kYXRhKCksaT1UZ3QuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpLHI9VGd0LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKTtyZXR1cm4gdGhpcy5fYnVja2V0QnlYKHQsZSwoZnVuY3Rpb24oZSl7cmV0dXJuIGkobltlXSxlLHQpfSksKGZ1bmN0aW9uKGUpe3JldHVybiByKG5bZV0sZSx0KX0pKX0sZS5wcm90b3R5cGUuX2J1Y2tldEJ5WD1mdW5jdGlvbih0LGUsbixpKXtmb3IodmFyIHI9W10sbz10LmRhdGEoKSxhPW51bGwscz1lLmxlbmd0aCxsPTA7bDw9czsrK2wpe3ZhciBjPWVbbF07aWYobnVsbCE9b1tjXSl7dmFyIHU9TWF0aC5mbG9vcihuKGMpKSxoPWkoYyk7bnVsbD09YT9hPW5ldyBTbXQuQnVja2V0KGMsdSxoKTphLmlzSW5CdWNrZXQodSk/YS5hZGRUb0J1Y2tldChoLGMpOihyLnB1c2guYXBwbHkocixhLmdldFVuaXF1ZUluZGljZXMoKSksYT1uZXcgU210LkJ1Y2tldChjLHUsaCkpfX1yZXR1cm4gbnVsbCE9YSYmci5wdXNoLmFwcGx5KHIsYS5nZXRVbmlxdWVJbmRpY2VzKCkpLHJ9LGV9KShVZ3QuWFlQbG90KTtlLkxpbmU9aX0pKSxHZ3Q9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBlPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gZS5hZGRDbGFzcygiYXJlYS1wbG90IiksZS55MCgwKSxlLmF0dHIoImZpbGwtb3BhY2l0eSIsLjI1KSxlLmF0dHIoImZpbGwiLChuZXcgVW10LkNvbG9yKS5yYW5nZSgpWzBdKSxlLl9saW5lRHJhd2Vycz1uZXcgU210Lk1hcCxlfXJldHVybiBEZnQuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUueT1mdW5jdGlvbihuLGkpe2lmKG51bGw9PW4pcmV0dXJuIHQucHJvdG90eXBlLnkuY2FsbCh0aGlzKTtpZihudWxsPT1pP3QucHJvdG90eXBlLnkuY2FsbCh0aGlzLG4pOnQucHJvdG90eXBlLnkuY2FsbCh0aGlzLG4saSksbnVsbCE9aSl7dmFyIHI9dGhpcy55MCgpLmFjY2Vzc29yO251bGwhPXImJnRoaXMuX2JpbmRQcm9wZXJ0eShlLl9ZMF9LRVkscixpKSx0aGlzLl91cGRhdGVZU2NhbGUoKX1yZXR1cm4gdGhpc30sZS5wcm90b3R5cGUueTA9ZnVuY3Rpb24odCl7aWYobnVsbD09dClyZXR1cm4gdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQoZS5fWTBfS0VZKTt2YXIgbj10aGlzLnkoKTtyZXR1cm4gdGhpcy5fYmluZFByb3BlcnR5KGUuX1kwX0tFWSx0LG4mJm4uc2NhbGUpLHRoaXMuX3VwZGF0ZVlTY2FsZSgpLHRoaXMucmVuZGVyKCksdGhpc30sZS5wcm90b3R5cGUuX29uRGF0YXNldFVwZGF0ZT1mdW5jdGlvbigpe3QucHJvdG90eXBlLl9vbkRhdGFzZXRVcGRhdGUuY2FsbCh0aGlzKSx0aGlzLl91cGRhdGVZU2NhbGUoKX0sZS5wcm90b3R5cGUuX2FkZERhdGFzZXQ9ZnVuY3Rpb24oZSl7dmFyIG49dGhpcztyZXR1cm4gdGhpcy5fbGluZURyYXdlcnMuc2V0KGUsbmV3IFZndC5Qcm94eURyYXdlcigoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHpndC5MaW5lU1ZHRHJhd2VyfSksKGZ1bmN0aW9uKHQpe3JldHVybiBuZXcgVmd0LkNhbnZhc0RyYXdlcih0LHpndC5tYWtlTGluZUNhbnZhc0RyYXdTdGVwKChmdW5jdGlvbigpe3ZhciB0PVRndC5QbG90Ll9zY2FsZWRBY2Nlc3NvcihuLngoKSksaT1UZ3QuUGxvdC5fc2NhbGVkQWNjZXNzb3Iobi55KCkpO3JldHVybiBuLl9kM0xpbmVGYWN0b3J5KGUsdCxpKX0pKSl9KSkpLHQucHJvdG90eXBlLl9hZGREYXRhc2V0LmNhbGwodGhpcyxlKSx0aGlzfSxlLnByb3RvdHlwZS5fY3JlYXRlTm9kZXNGb3JEYXRhc2V0PWZ1bmN0aW9uKGUpe3QucHJvdG90eXBlLl9jcmVhdGVOb2Rlc0ZvckRhdGFzZXQuY2FsbCh0aGlzLGUpO3ZhciBuPXRoaXMuX2xpbmVEcmF3ZXJzLmdldChlKTtyZXR1cm4ic3ZnIj09PXRoaXMucmVuZGVyZXIoKT9uLnVzZVNWRyh0aGlzLl9yZW5kZXJBcmVhKTpuLnVzZUNhbnZhcyh0aGlzLl9jYW52YXMpLG59LGUucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0Tm9kZXM9ZnVuY3Rpb24oZSl7dC5wcm90b3R5cGUuX3JlbW92ZURhdGFzZXROb2Rlcy5jYWxsKHRoaXMsZSksdGhpcy5fbGluZURyYXdlcnMuZ2V0KGUpLnJlbW92ZSgpfSxlLnByb3RvdHlwZS5fYWRkaXRpb25hbFBhaW50PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXRoaXMuX2dlbmVyYXRlTGluZURyYXdTdGVwcygpLG49dGhpcy5fZ2V0RGF0YVRvRHJhdygpO3RoaXMuZGF0YXNldHMoKS5mb3JFYWNoKChmdW5jdGlvbihpKXt2YXIgcj1UZ3QuUGxvdC5hcHBseURyYXdTdGVwcyhlLGkpO3QuX2xpbmVEcmF3ZXJzLmdldChpKS5kcmF3KG4uZ2V0KGkpLHIpfSkpfSxlLnByb3RvdHlwZS5fZ2VuZXJhdGVMaW5lRHJhd1N0ZXBzPWZ1bmN0aW9uKCl7dmFyIHQ9W107aWYodGhpcy5fYW5pbWF0ZU9uTmV4dFJlbmRlcigpKXt2YXIgZT10aGlzLl9nZW5lcmF0ZUxpbmVBdHRyVG9Qcm9qZWN0b3IoKTtlLmQ9dGhpcy5fY29uc3RydWN0TGluZVByb2plY3RvcihUZ3QuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpLHRoaXMuX2dldFJlc2V0WUZ1bmN0aW9uKCkpLHQucHVzaCh7YXR0clRvUHJvamVjdG9yOmUsYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3IodF90LkFuaW1hdG9yLlJFU0VUKX0pfXJldHVybiB0LnB1c2goe2F0dHJUb1Byb2plY3Rvcjp0aGlzLl9nZW5lcmF0ZUxpbmVBdHRyVG9Qcm9qZWN0b3IoKSxhbmltYXRvcjp0aGlzLl9nZXRBbmltYXRvcih0X3QuQW5pbWF0b3IuTUFJTil9KSx0fSxlLnByb3RvdHlwZS5fZ2VuZXJhdGVMaW5lQXR0clRvUHJvamVjdG9yPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCk7cmV0dXJuIHQuZD10aGlzLl9jb25zdHJ1Y3RMaW5lUHJvamVjdG9yKFRndC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksVGd0LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKSksdH0sZS5wcm90b3R5cGUuX2NyZWF0ZURyYXdlcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiBuZXcgU2d0LlByb3h5RHJhd2VyKChmdW5jdGlvbigpe3JldHVybiBuZXcgUmd0LkFyZWFTVkdEcmF3ZXJ9KSwoZnVuY3Rpb24obil7cmV0dXJuIG5ldyBWZ3QuQ2FudmFzRHJhd2VyKG4sUmd0Lm1ha2VBcmVhQ2FudmFzRHJhd1N0ZXAoKGZ1bmN0aW9uKCl7dmFyIG49ZS5fY29vcmRpbmF0ZVByb2plY3RvcnMoKSxpPW5bMF0scj1uWzFdLG89blsyXSxhPWUuX2NyZWF0ZURlZmluZWRQcm9qZWN0b3IoaSxyKTtyZXR1cm4gZS5fY3JlYXRlQXJlYUdlbmVyYXRvcihpLHIsbyxhLHQpfSksKGZ1bmN0aW9uKCl7dmFyIG49ZS5fY29vcmRpbmF0ZVByb2plY3RvcnMoKSxpPW5bMF0scj1uWzFdLG89ZS5fY3JlYXRlRGVmaW5lZFByb2plY3RvcihpLHIpO3JldHVybiBlLl9jcmVhdGVUb3BMaW5lR2VuZXJhdG9yKGkscixvLHQpfSkpKX0pKX0sZS5wcm90b3R5cGUuX2dlbmVyYXRlRHJhd1N0ZXBzPWZ1bmN0aW9uKCl7dmFyIHQ9W107aWYodGhpcy5fYW5pbWF0ZU9uTmV4dFJlbmRlcigpKXt2YXIgZT10aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKTtlLmQ9dGhpcy5fY29uc3RydWN0QXJlYVByb2plY3RvcihUZ3QuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpLHRoaXMuX2dldFJlc2V0WUZ1bmN0aW9uKCksVGd0LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueTAoKSkpLHQucHVzaCh7YXR0clRvUHJvamVjdG9yOmUsYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3IodF90LkFuaW1hdG9yLlJFU0VUKX0pfXJldHVybiB0LnB1c2goe2F0dHJUb1Byb2plY3Rvcjp0aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxhbmltYXRvcjp0aGlzLl9nZXRBbmltYXRvcih0X3QuQW5pbWF0b3IuTUFJTil9KSx0fSxlLnByb3RvdHlwZS5fdXBkYXRlWVNjYWxlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nZXRFeHRlbnRzRm9yUHJvcGVydHkoInkwIiksZT1TbXQuQXJyYXkuZmxhdHRlbih0KSxuPVNtdC5BcnJheS51bmlxKGUpLGk9MT09PW4ubGVuZ3RoP25bMF06bnVsbCxyPXRoaXMueSgpLG89ciYmci5zY2FsZTtudWxsIT1vJiYobnVsbCE9dGhpcy5fY29uc3RhbnRCYXNlbGluZVZhbHVlUHJvdmlkZXImJihvLnJlbW92ZVBhZGRpbmdFeGNlcHRpb25zUHJvdmlkZXIodGhpcy5fY29uc3RhbnRCYXNlbGluZVZhbHVlUHJvdmlkZXIpLHRoaXMuX2NvbnN0YW50QmFzZWxpbmVWYWx1ZVByb3ZpZGVyPW51bGwpLG51bGwhPWkmJih0aGlzLl9jb25zdGFudEJhc2VsaW5lVmFsdWVQcm92aWRlcj1mdW5jdGlvbigpe3JldHVybltpXX0sby5hZGRQYWRkaW5nRXhjZXB0aW9uc1Byb3ZpZGVyKHRoaXMuX2NvbnN0YW50QmFzZWxpbmVWYWx1ZVByb3ZpZGVyKSkpfSxlLnByb3RvdHlwZS5fZ2V0UmVzZXRZRnVuY3Rpb249ZnVuY3Rpb24oKXtyZXR1cm4gVGd0LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueTAoKSl9LGUucHJvdG90eXBlLl9jb29yZGluYXRlUHJvamVjdG9ycz1mdW5jdGlvbigpe3JldHVybltUZ3QuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpLFRndC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSksVGd0LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueTAoKSldfSxlLnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzPWZ1bmN0aW9uKCl7dmFyIGU9dC5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycy5jYWxsKHRoaXMpLG49dGhpcy5fY29vcmRpbmF0ZVByb2plY3RvcnMoKTtyZXR1cm4gZS5kPXRoaXMuX2NvbnN0cnVjdEFyZWFQcm9qZWN0b3IoblswXSxuWzFdLG5bMl0pLGV9LGUucHJvdG90eXBlLnNlbGVjdGlvbnM9ZnVuY3Rpb24oZSl7dmFyIG49dGhpcztpZih2b2lkIDA9PT1lJiYoZT10aGlzLmRhdGFzZXRzKCkpLCJjYW52YXMiPT09dGhpcy5yZW5kZXJlcigpKXJldHVybiBpZHQuc2VsZWN0QWxsKCk7dmFyIGk9dC5wcm90b3R5cGUuc2VsZWN0aW9ucy5jYWxsKHRoaXMsZSkubm9kZXMoKTtyZXR1cm4gZS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBuLl9saW5lRHJhd2Vycy5nZXQodCl9KSkuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9dH0pKS5mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gaS5wdXNoLmFwcGx5KGksdC5nZXRWaXN1YWxQcmltaXRpdmVzKCkpfSkpLGlkdC5zZWxlY3RBbGwoaSl9LGUucHJvdG90eXBlLl9jb25zdHJ1Y3RBcmVhUHJvamVjdG9yPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT10aGlzLHI9dGhpcy5fY3JlYXRlRGVmaW5lZFByb2plY3RvcihUZ3QuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpLFRndC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSkpO3JldHVybiBmdW5jdGlvbihvLGEscyl7cmV0dXJuIGkuX2NyZWF0ZUFyZWFHZW5lcmF0b3IodCxlLG4scixzKShvKX19LGUucHJvdG90eXBlLl9jcmVhdGVEZWZpbmVkUHJvamVjdG9yPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4saSxyKXt2YXIgbz10KG4saSxyKSxhPWUobixpLHIpO3JldHVybiBTbXQuTWF0aC5pc1ZhbGlkTnVtYmVyKG8pJiZTbXQuTWF0aC5pc1ZhbGlkTnVtYmVyKGEpfX0sZS5wcm90b3R5cGUuX2NyZWF0ZUFyZWFHZW5lcmF0b3I9ZnVuY3Rpb24odCxlLG4saSxyKXt2YXIgbz10aGlzLl9nZXRDdXJ2ZUZhY3RvcnkoKTtyZXR1cm4gaWR0LmFyZWEoKS54KChmdW5jdGlvbihlLG4pe3JldHVybiB0KGUsbixyKX0pKS55MSgoZnVuY3Rpb24odCxuKXtyZXR1cm4gZSh0LG4scil9KSkueTAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odCxlLHIpfSkpLmN1cnZlKG8pLmRlZmluZWQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGkodCxlLHIpfSkpfSxlLnByb3RvdHlwZS5fY3JlYXRlVG9wTGluZUdlbmVyYXRvcj1mdW5jdGlvbih0LGUsbixpKXt2YXIgcj10aGlzLl9nZXRDdXJ2ZUZhY3RvcnkoKTtyZXR1cm4gaWR0LmxpbmUoKS54KChmdW5jdGlvbihlLG4pe3JldHVybiB0KGUsbixpKX0pKS55KChmdW5jdGlvbih0LG4pe3JldHVybiBlKHQsbixpKX0pKS5jdXJ2ZShyKS5kZWZpbmVkKChmdW5jdGlvbih0LGUpe3JldHVybiBuKHQsZSxpKX0pKX0sZS5fWTBfS0VZPSJ5MCIsZX0pKGpndC5MaW5lKTtlLkFyZWE9bn0pKSxXZ3Q9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLkJhck9yaWVudGF0aW9uPUlmdC5tYWtlRW51bShbInZlcnRpY2FsIiwiaG9yaXpvbnRhbCJdKSxlLkxhYmVsc1Bvc2l0aW9uPUlmdC5tYWtlRW51bShbInN0YXJ0IiwibWlkZGxlIiwiZW5kIiwib3V0c2lkZSJdKSxlLkJhckFsaWdubWVudD1JZnQubWFrZUVudW0oWyJzdGFydCIsIm1pZGRsZSIsImVuZCJdKTt2YXIgbj0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gbihyKXt2b2lkIDA9PT1yJiYocj0idmVydGljYWwiKTt2YXIgbz10LmNhbGwodGhpcyl8fHRoaXM7aWYoby5fbGFiZWxGb3JtYXR0ZXI9Q210LmlkZW50aXR5KCksby5fbGFiZWxzRW5hYmxlZD0hMSxvLl9sYWJlbHNQb3NpdGlvbj1lLkxhYmVsc1Bvc2l0aW9uLmVuZCxvLl9oaWRlQmFyc0lmQW55QXJlVG9vV2lkZT0hMCxvLl9iYXJBbGlnbm1lbnQ9Im1pZGRsZSIsby5fY29tcHV0ZUJhclBpeGVsVGhpY2tuZXNzPXhndC5tZW1vaXplKGkpLG8uX2ZpeGVkQmFyUGl4ZWxUaGlja25lc3M9ITAsby5hZGRDbGFzcygiYmFyLXBsb3QiKSwidmVydGljYWwiIT09ciYmImhvcml6b250YWwiIT09cil0aHJvdyBuZXcgRXJyb3IocisiIGlzIG5vdCBhIHZhbGlkIG9yaWVudGF0aW9uIGZvciBQbG90cy5CYXIiKTtyZXR1cm4gby5faXNWZXJ0aWNhbD0idmVydGljYWwiPT09cixvLmFuaW1hdG9yKCJiYXNlbGluZSIsbmV3IEJmdC5OdWxsKSxvLmF0dHIoImZpbGwiLChuZXcgVW10LkNvbG9yKS5yYW5nZSgpWzBdKSxvLmF0dHIobi5fQkFSX1RISUNLTkVTU19LRVksKGZ1bmN0aW9uKCl7cmV0dXJuIG8uX2JhclBpeGVsVGhpY2tuZXNzKCl9KSksby5fbGFiZWxDb25maWc9bmV3IFNtdC5NYXAsby5fYmFzZWxpbmVWYWx1ZVByb3ZpZGVyPWZ1bmN0aW9uKCl7cmV0dXJuW28uYmFzZWxpbmVWYWx1ZSgpXX0sb31yZXR1cm4gRGZ0Ll9fZXh0ZW5kcyhuLHQpLG4ucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24oZSxuLGkpe3JldHVybiB0LnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcyxlLG4saSksdGhpcy5fdXBkYXRlRXh0ZW50cygpLHRoaXN9LG4ucHJvdG90eXBlLng9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbnVsbD09ZT90LnByb3RvdHlwZS54LmNhbGwodGhpcyk6KG51bGw9PW4/dC5wcm90b3R5cGUueC5jYWxsKHRoaXMsZSk6dC5wcm90b3R5cGUueC5jYWxsKHRoaXMsZSxuKSx0aGlzLl91cGRhdGVUaGlja25lc3NBdHRyKCksdGhpcy5fdXBkYXRlTGVuZ3RoU2NhbGUoKSx0aGlzKX0sbi5wcm90b3R5cGUueT1mdW5jdGlvbihlLG4pe3JldHVybiBudWxsPT1lP3QucHJvdG90eXBlLnkuY2FsbCh0aGlzKToobnVsbD09bj90LnByb3RvdHlwZS55LmNhbGwodGhpcyxlKTp0LnByb3RvdHlwZS55LmNhbGwodGhpcyxlLG4pLHRoaXMuX3VwZGF0ZUxlbmd0aFNjYWxlKCksdGhpcyl9LG4ucHJvdG90eXBlLmxlbmd0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc1ZlcnRpY2FsP3RoaXMueSgpOnRoaXMueCgpfSxuLnByb3RvdHlwZS5wb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc1ZlcnRpY2FsP3RoaXMueCgpOnRoaXMueSgpfSxuLnByb3RvdHlwZS5iYXJFbmQ9ZnVuY3Rpb24odCl7aWYobnVsbD09dClyZXR1cm4gdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQobi5fQkFSX0VORF9LRVkpO3ZhciBlPXRoaXMucG9zaXRpb24oKTtyZXR1cm4gdGhpcy5fYmluZFByb3BlcnR5KG4uX0JBUl9FTkRfS0VZLHQsZSYmZS5zY2FsZSksdGhpcy5fdXBkYXRlVGhpY2tuZXNzQXR0cigpLHRoaXMuX3VwZGF0ZUxlbmd0aFNjYWxlKCksdGhpcy5yZW5kZXIoKSx0aGlzfSxuLnByb3RvdHlwZS5iYXJBbGlnbm1lbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5fYmFyQWxpZ25tZW50Oih0aGlzLl9iYXJBbGlnbm1lbnQ9dCx0aGlzLl9jbGVhckF0dHJUb1Byb2plY3RvckNhY2hlKCksdGhpcy5yZW5kZXIoKSx0aGlzKX0sbi5wcm90b3R5cGUub3JpZW50YXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNWZXJ0aWNhbD8idmVydGljYWwiOiJob3Jpem9udGFsIn0sbi5wcm90b3R5cGUuX2NyZWF0ZURyYXdlcj1mdW5jdGlvbigpe3JldHVybiBuZXcgU2d0LlByb3h5RHJhd2VyKChmdW5jdGlvbigpe3JldHVybiBuZXcgRGd0LlJlY3RhbmdsZVNWR0RyYXdlcihuLl9CQVJfQVJFQV9DTEFTUyl9KSwoZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBWZ3QuUmVjdGFuZ2xlQ2FudmFzRHJhd2VyKHQpfSkpfSxuLnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXt0LnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl9iYXNlbGluZT10aGlzLl9yZW5kZXJBcmVhLmFwcGVuZCgibGluZSIpLmNsYXNzZWQoImJhc2VsaW5lIiwhMCl9LG4ucHJvdG90eXBlLmJhc2VsaW5lVmFsdWU9ZnVuY3Rpb24odCl7aWYobnVsbD09dCl7aWYobnVsbCE9dGhpcy5fYmFzZWxpbmVWYWx1ZSlyZXR1cm4gdGhpcy5fYmFzZWxpbmVWYWx1ZTtpZighdGhpcy5fcHJvamVjdG9yc1JlYWR5KCkpcmV0dXJuIDA7dmFyIGU9dGhpcy5sZW5ndGgoKS5zY2FsZTtyZXR1cm4gZSYmZSBpbnN0YW5jZW9mIFVtdC5UaW1lP25ldyBEYXRlKDApOjB9cmV0dXJuIHRoaXMuX2Jhc2VsaW5lVmFsdWU9dCx0aGlzLl91cGRhdGVMZW5ndGhTY2FsZSgpLHRoaXMuX2NsZWFyQXR0clRvUHJvamVjdG9yQ2FjaGUoKSx0aGlzLnJlbmRlcigpLHRoaXN9LG4ucHJvdG90eXBlLmFkZERhdGFzZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHQucHJvdG90eXBlLmFkZERhdGFzZXQuY2FsbCh0aGlzLGUpLHRoaXN9LG4ucHJvdG90eXBlLl9hZGREYXRhc2V0PWZ1bmN0aW9uKGUpe3JldHVybiB0LnByb3RvdHlwZS5fYWRkRGF0YXNldC5jYWxsKHRoaXMsZSksdGhpc30sbi5wcm90b3R5cGUucmVtb3ZlRGF0YXNldD1mdW5jdGlvbihlKXtyZXR1cm4gdC5wcm90b3R5cGUucmVtb3ZlRGF0YXNldC5jYWxsKHRoaXMsZSksdGhpc30sbi5wcm90b3R5cGUuX3JlbW92ZURhdGFzZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHQucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0LmNhbGwodGhpcyxlKSx0aGlzfSxuLnByb3RvdHlwZS5kYXRhc2V0cz1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT90LnByb3RvdHlwZS5kYXRhc2V0cy5jYWxsKHRoaXMpOih0LnByb3RvdHlwZS5kYXRhc2V0cy5jYWxsKHRoaXMsZSksdGhpcyl9LG4ucHJvdG90eXBlLmxhYmVsc0VuYWJsZWQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09dD90aGlzLl9sYWJlbHNFbmFibGVkOih0aGlzLl9sYWJlbHNFbmFibGVkPXQsbnVsbCE9ZSYmKHRoaXMuX2xhYmVsc1Bvc2l0aW9uPWUpLHRoaXMuX2NsZWFyQXR0clRvUHJvamVjdG9yQ2FjaGUoKSx0aGlzLnJlbmRlcigpLHRoaXMpfSxuLnByb3RvdHlwZS5sYWJlbEZvcm1hdHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9sYWJlbEZvcm1hdHRlcjoodGhpcy5fbGFiZWxGb3JtYXR0ZXI9dCx0aGlzLl9jbGVhckF0dHJUb1Byb2plY3RvckNhY2hlKCksdGhpcy5yZW5kZXIoKSx0aGlzKX0sbi5wcm90b3R5cGUuX2NyZWF0ZU5vZGVzRm9yRGF0YXNldD1mdW5jdGlvbihlKXt2YXIgaT10LnByb3RvdHlwZS5fY3JlYXRlTm9kZXNGb3JEYXRhc2V0LmNhbGwodGhpcyxlKSxyPXRoaXMuX3JlbmRlckFyZWEuYXBwZW5kKCJnIikuY2xhc3NlZChuLl9MQUJFTF9BUkVBX0NMQVNTLCEwKSxvPW5ldyBhbXQuU3ZnQ29udGV4dChyLm5vZGUoKSksYT1uZXcgYW10LkNhY2hlTWVhc3VyZXIobykscz1uZXcgYW10LldyaXRlcihhLG8pO3JldHVybiB0aGlzLl9sYWJlbENvbmZpZy5zZXQoZSx7bGFiZWxBcmVhOnIsbWVhc3VyZXI6YSx3cml0ZXI6c30pLGl9LG4ucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0Tm9kZXM9ZnVuY3Rpb24oZSl7dC5wcm90b3R5cGUuX3JlbW92ZURhdGFzZXROb2Rlcy5jYWxsKHRoaXMsZSk7dmFyIG49dGhpcy5fbGFiZWxDb25maWcuZ2V0KGUpO251bGwhPW4mJihuLmxhYmVsQXJlYS5yZW1vdmUoKSx0aGlzLl9sYWJlbENvbmZpZy5kZWxldGUoZSkpfSxuLnByb3RvdHlwZS5lbnRpdHlOZWFyZXN0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1mdW5jdGlvbigpe3ZhciBuPWUuX2lzVmVydGljYWw/ZS5fZ2V0RW50aXR5U3RvcmUoKS5lbnRpdHlOZWFyZXN0WCh0KTplLl9nZXRFbnRpdHlTdG9yZSgpLmVudGl0eU5lYXJlc3RZKHQpO3JldHVybiB2b2lkIDA9PT1uP3ZvaWQgMDplLl9saWdodHdlaWdodFBsb3RFbnRpdHlUb1Bsb3RFbnRpdHkobil9O3JldHVybiB0aGlzLl9maXhlZEJhclBpeGVsVGhpY2tuZXNzP3RoaXMuX2NvbXB1dGVCYXJQaXhlbFRoaWNrbmVzcy5kb0xvY2tlZChuKTpuKCl9LG4ucHJvdG90eXBlLmVudGl0aWVzQXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPWZ1bmN0aW9uKCl7cmV0dXJuIGUuX2VudGl0aWVzSW50ZXJzZWN0aW5nKHQueCx0LnkpfTtyZXR1cm4gdGhpcy5fZml4ZWRCYXJQaXhlbFRoaWNrbmVzcz90aGlzLl9jb21wdXRlQmFyUGl4ZWxUaGlja25lc3MuZG9Mb2NrZWQobik6bigpfSxuLnByb3RvdHlwZS5lbnRpdGllc0luQm91bmRzPWZ1bmN0aW9uKGUpe3ZhciBuPXRoaXMsaT1mdW5jdGlvbigpe3JldHVybiB0LnByb3RvdHlwZS5lbnRpdGllc0luQm91bmRzLmNhbGwobixlKX07cmV0dXJuIHRoaXMuX2ZpeGVkQmFyUGl4ZWxUaGlja25lc3M/dGhpcy5fY29tcHV0ZUJhclBpeGVsVGhpY2tuZXNzLmRvTG9ja2VkKGkpOmkoKX0sbi5wcm90b3R5cGUuZW50aXRpZXNJblhCb3VuZHM9ZnVuY3Rpb24oZSl7dmFyIG49dGhpcyxpPWZ1bmN0aW9uKCl7cmV0dXJuIHQucHJvdG90eXBlLmVudGl0aWVzSW5YQm91bmRzLmNhbGwobixlKX07cmV0dXJuIHRoaXMuX2ZpeGVkQmFyUGl4ZWxUaGlja25lc3M/dGhpcy5fY29tcHV0ZUJhclBpeGVsVGhpY2tuZXNzLmRvTG9ja2VkKGkpOmkoKX0sbi5wcm90b3R5cGUuZW50aXRpZXNJbllCb3VuZHM9ZnVuY3Rpb24oZSl7dmFyIG49dGhpcyxpPWZ1bmN0aW9uKCl7cmV0dXJuIHQucHJvdG90eXBlLmVudGl0aWVzSW5ZQm91bmRzLmNhbGwobixlKX07cmV0dXJuIHRoaXMuX2ZpeGVkQmFyUGl4ZWxUaGlja25lc3M/dGhpcy5fY29tcHV0ZUJhclBpeGVsVGhpY2tuZXNzLmRvTG9ja2VkKGkpOmkoKX0sbi5wcm90b3R5cGUuX2VudGl0aWVzSW50ZXJzZWN0aW5nPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPVtdLGk9dGhpcy5fZ2V0RW50aXR5U3RvcmUoKS5lbnRpdGllcygpLHI9aS5sZW5ndGgsbz0wO288cjtvKyspe3ZhciBhPWlbb107U210LkRPTS5pbnRlcnNlY3RzQkJveCh0LGUsdGhpcy5fZW50aXR5Qm91bmRzKGEpKSYmbi5wdXNoKHRoaXMuX2xpZ2h0d2VpZ2h0UGxvdEVudGl0eVRvUGxvdEVudGl0eShhKSl9cmV0dXJuIG59LG4ucHJvdG90eXBlLl91cGRhdGVMZW5ndGhTY2FsZT1mdW5jdGlvbigpe2lmKHRoaXMuX3Byb2plY3RvcnNSZWFkeSgpKXt2YXIgdD10aGlzLmxlbmd0aCgpLnNjYWxlO3QgaW5zdGFuY2VvZiBEbXQuUXVhbnRpdGF0aXZlU2NhbGUmJih0LmFkZFBhZGRpbmdFeGNlcHRpb25zUHJvdmlkZXIodGhpcy5fYmFzZWxpbmVWYWx1ZVByb3ZpZGVyKSx0LmFkZEluY2x1ZGVkVmFsdWVzUHJvdmlkZXIodGhpcy5fYmFzZWxpbmVWYWx1ZVByb3ZpZGVyKSl9fSxuLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseT1mdW5jdGlvbigpe3ZhciBlPXRoaXM7cmV0dXJuIHRoaXMuX2JhclBpeGVsVGhpY2tuZXNzKCksdGhpcy5fY29tcHV0ZUJhclBpeGVsVGhpY2tuZXNzLmRvTG9ja2VkKChmdW5jdGlvbigpe3JldHVybiB0LnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKGUpfSkpfSxuLnByb3RvdHlwZS5fYWRkaXRpb25hbFBhaW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10aGlzLmxlbmd0aCgpLnNjYWxlLnNjYWxlKHRoaXMuYmFzZWxpbmVWYWx1ZSgpKSxpPXt4MTp0aGlzLl9pc1ZlcnRpY2FsPzA6bix5MTp0aGlzLl9pc1ZlcnRpY2FsP246MCx4Mjp0aGlzLl9pc1ZlcnRpY2FsP3RoaXMud2lkdGgoKTpuLHkyOnRoaXMuX2lzVmVydGljYWw/bjp0aGlzLmhlaWdodCgpfTt0aGlzLl9nZXRBbmltYXRvcigiYmFzZWxpbmUiKS5hbmltYXRlKHRoaXMuX2Jhc2VsaW5lLGkpLHRoaXMuZGF0YXNldHMoKS5mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gZS5fbGFiZWxDb25maWcuZ2V0KHQpLmxhYmVsQXJlYS5zZWxlY3RBbGwoImciKS5yZW1vdmUoKX0pKSx0aGlzLl9sYWJlbHNFbmFibGVkJiZTbXQuV2luZG93LnNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7cmV0dXJuIGUuX2RyYXdMYWJlbHMoKX0pLHQpfSxuLnByb3RvdHlwZS5nZXRFeHRlbnRzRm9yUHJvcGVydHk9ZnVuY3Rpb24oZSl7dmFyIG4saT10aGlzLHI9dC5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5LmNhbGwodGhpcyxlKTtpZigieCI9PT1lJiZ0aGlzLl9pc1ZlcnRpY2FsKW49dGhpcy54KCk7ZWxzZXtpZigieSIhPT1lfHx0aGlzLl9pc1ZlcnRpY2FsKXJldHVybiByO249dGhpcy55KCl9aWYoIShuJiZuLnNjYWxlJiZuLnNjYWxlIGluc3RhbmNlb2YgRG10LlF1YW50aXRhdGl2ZVNjYWxlKSlyZXR1cm4gcjt2YXIgbz1uLnNjYWxlLGE9dGhpcy5fYmFyUGl4ZWxUaGlja25lc3MoKTtyZXR1cm4gci5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBpZHQuZXh0ZW50KFtvLmludmVydChpLl9nZXRQb3NpdGlvbkF0dHIoby5zY2FsZSh0WzBdKSxhKSksby5pbnZlcnQoaS5fZ2V0UG9zaXRpb25BdHRyKG8uc2NhbGUodFswXSksYSkrYSksby5pbnZlcnQoaS5fZ2V0UG9zaXRpb25BdHRyKG8uc2NhbGUodFsxXSksYSkpLG8uaW52ZXJ0KGkuX2dldFBvc2l0aW9uQXR0cihvLnNjYWxlKHRbMV0pLGEpK2EpXSl9KSl9LG4ucHJvdG90eXBlLl9nZXRQb3NpdGlvbkF0dHI9ZnVuY3Rpb24odCxlKXtzd2l0Y2godGhpcy5faXNWZXJ0aWNhbHx8KHQtPWUsZSo9LTEpLHRoaXMuX2JhckFsaWdubWVudCl7Y2FzZSJzdGFydCI6cmV0dXJuIHQ7Y2FzZSJlbmQiOnJldHVybiB0LWU7Y2FzZSJtaWRkbGUiOmRlZmF1bHQ6cmV0dXJuIHQtZS8yfX0sbi5wcm90b3R5cGUuX2RyYXdMYWJlbHM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dGhpcy5fZ2V0RGF0YVRvRHJhdygpLG49dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksaT10aGlzLmRhdGFzZXRzKCkuc29tZSgoZnVuY3Rpb24oaSl7cmV0dXJuIGUuZ2V0KGkpLnNvbWUoKGZ1bmN0aW9uKGUscil7cmV0dXJuIG51bGwhPWUmJnQuX2RyYXdMYWJlbChlLHIsaSxuKX0pKX0pKTt0aGlzLl9oaWRlQmFyc0lmQW55QXJlVG9vV2lkZSYmaSYmdGhpcy5kYXRhc2V0cygpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiB0Ll9sYWJlbENvbmZpZy5nZXQoZSkubGFiZWxBcmVhLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpfSkpfSxuLnByb3RvdHlwZS5fZHJhd0xhYmVsPWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciByPXRoaXMuX2xhYmVsQ29uZmlnLmdldChuKSxvPXIubGFiZWxBcmVhLGE9ci5tZWFzdXJlcixzPXIud3JpdGVyLGw9KDAsdGhpcy5sZW5ndGgoKS5hY2Nlc3NvcikodCxlLG4pLGM9dGhpcy5sZW5ndGgoKS5zY2FsZSx1PW51bGwhPWM/Yy5zY2FsZShsKTpsLGg9bnVsbCE9Yz9jLnNjYWxlKHRoaXMuYmFzZWxpbmVWYWx1ZSgpKTp0aGlzLmJhc2VsaW5lVmFsdWUoKSxkPXt4OmkueCh0LGUsbikseTppLnkodCxlLG4pfSxwPXt3aWR0aDppLndpZHRoKHQsZSxuKSxoZWlnaHQ6aS5oZWlnaHQodCxlLG4pfSxmPXRoaXMuX2xhYmVsRm9ybWF0dGVyKGwsdCxlLG4pLG09YS5tZWFzdXJlKGYpLGc9dGhpcy5fc2hvdWxkU2hvd0xhYmVsT25CYXIoZCxwLG0pLF89dGhpcy5fY2FsY3VsYXRlTGFiZWxQcm9wZXJ0aWVzKGQscCxtLGcsdGhpcy5faXNWZXJ0aWNhbD91PD1oOnU8aCkseT1fLmNvbnRhaW5lckRpbWVuc2lvbnMsdj1fLmxhYmVsQ29udGFpbmVyT3JpZ2luLGI9Xy5sYWJlbE9yaWdpbix4PV8uYWxpZ25tZW50LHc9aS5maWxsKHQsZSxuKSxTPXRoaXMuX2NyZWF0ZUxhYmVsQ29udGFpbmVyKG8sdixiLG0sZyx3KTtyZXR1cm4gcy53cml0ZShmLHkud2lkdGgseS5oZWlnaHQse3hBbGlnbjp4LngseUFsaWduOngueX0sUy5ub2RlKCkpLHRoaXMuX2lzVmVydGljYWw/cC53aWR0aDxtLndpZHRoOnAuaGVpZ2h0PG0uaGVpZ2h0fSxuLnByb3RvdHlwZS5fc2hvdWxkU2hvd0xhYmVsT25CYXI9ZnVuY3Rpb24odCxpLHIpe2lmKHRoaXMuX2xhYmVsc1Bvc2l0aW9uPT09ZS5MYWJlbHNQb3NpdGlvbi5vdXRzaWRlKXJldHVybiExO3ZhciBvPXRoaXMuX2lzVmVydGljYWw/dC55OnQueCxhPXRoaXMuX2lzVmVydGljYWw/aS5oZWlnaHQ6aS53aWR0aCxzPXRoaXMuX2lzVmVydGljYWw/dGhpcy5oZWlnaHQoKTp0aGlzLndpZHRoKCksbD1vK2EsYz1hO3JldHVybiBsPnM/Yz1zLW86bzwwJiYoYz1sKSwodGhpcy5faXNWZXJ0aWNhbD9yLmhlaWdodDpyLndpZHRoKStuLl9MQUJFTF9NQVJHSU5fSU5TSURFX0JBUjw9Y30sbi5wcm90b3R5cGUuX2NhbGN1bGF0ZUxhYmVsUHJvcGVydGllcz1mdW5jdGlvbih0LGkscixvLGEpe3ZhciBzPXRoaXMsbD10aGlzLl9pc1ZlcnRpY2FsP3QueTp0LngsYz10aGlzLl9pc1ZlcnRpY2FsP2kuaGVpZ2h0Omkud2lkdGgsdT10aGlzLl9pc1ZlcnRpY2FsP3IuaGVpZ2h0OnIud2lkdGgsaD0iY2VudGVyIixkPWMscD1sLGY9bCxtPWZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlInRvcExlZnQiOnJldHVybiBoPXMuX2lzVmVydGljYWw/InRvcCI6ImxlZnQiLHArPW4uX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSLHZvaWQoZis9bi5fTEFCRUxfTUFSR0lOX0lOU0lERV9CQVIpO2Nhc2UiY2VudGVyIjpyZXR1cm4gdm9pZChmKz0oYyt1KS8yKTtjYXNlImJvdHRvbVJpZ2h0IjpyZXR1cm4gaD1zLl9pc1ZlcnRpY2FsPyJib3R0b20iOiJyaWdodCIscC09bi5fTEFCRUxfTUFSR0lOX0lOU0lERV9CQVIsdm9pZChmKz1kLW4uX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSLXUpfX07aWYobylzd2l0Y2godGhpcy5fbGFiZWxzUG9zaXRpb24pe2Nhc2UgZS5MYWJlbHNQb3NpdGlvbi5zdGFydDptKGE/ImJvdHRvbVJpZ2h0IjoidG9wTGVmdCIpO2JyZWFrO2Nhc2UgZS5MYWJlbHNQb3NpdGlvbi5taWRkbGU6bSgiY2VudGVyIik7YnJlYWs7Y2FzZSBlLkxhYmVsc1Bvc2l0aW9uLmVuZDptKGE/InRvcExlZnQiOiJib3R0b21SaWdodCIpfWVsc2UgYT8oaD10aGlzLl9pc1ZlcnRpY2FsPyJ0b3AiOiJsZWZ0IixkPWMrbi5fTEFCRUxfTUFSR0lOX0lOU0lERV9CQVIrdSxwLT1uLl9MQUJFTF9NQVJHSU5fSU5TSURFX0JBUit1LGYtPW4uX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSK3UpOihoPXRoaXMuX2lzVmVydGljYWw/ImJvdHRvbSI6InJpZ2h0IixkPWMrbi5fTEFCRUxfTUFSR0lOX0lOU0lERV9CQVIrdSxmKz1jK24uX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSKTtyZXR1cm57Y29udGFpbmVyRGltZW5zaW9uczp7d2lkdGg6dGhpcy5faXNWZXJ0aWNhbD9pLndpZHRoOmQsaGVpZ2h0OnRoaXMuX2lzVmVydGljYWw/ZDppLmhlaWdodH0sbGFiZWxDb250YWluZXJPcmlnaW46e3g6dGhpcy5faXNWZXJ0aWNhbD90Lng6cCx5OnRoaXMuX2lzVmVydGljYWw/cDp0Lnl9LGxhYmVsT3JpZ2luOnt4OnRoaXMuX2lzVmVydGljYWw/dC54K2kud2lkdGgvMi1yLndpZHRoLzI6Zix5OnRoaXMuX2lzVmVydGljYWw/Zjp0LnkraS5oZWlnaHQvMi1yLmhlaWdodC8yfSxhbGlnbm1lbnQ6e3g6dGhpcy5faXNWZXJ0aWNhbD8iY2VudGVyIjpoLHk6dGhpcy5faXNWZXJ0aWNhbD9oOiJjZW50ZXIifX19LG4ucHJvdG90eXBlLl9jcmVhdGVMYWJlbENvbnRhaW5lcj1mdW5jdGlvbih0LGUsbixpLHIsbyl7dmFyIGE9dC5hcHBlbmQoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitlLngrIiwgIitlLnkrIikiKTtpZihyKXthLmNsYXNzZWQoIm9uLWJhci1sYWJlbCIsITApO3ZhciBzPTEuNipTbXQuQ29sb3IuY29udHJhc3QoIndoaXRlIixvKTxTbXQuQ29sb3IuY29udHJhc3QoImJsYWNrIixvKTthLmNsYXNzZWQocz8iZGFyay1sYWJlbCI6ImxpZ2h0LWxhYmVsIiwhMCl9ZWxzZSBhLmNsYXNzZWQoIm9mZi1iYXItbGFiZWwiLCEwKTtyZXR1cm4gYX0sbi5wcm90b3R5cGUuX2dlbmVyYXRlRHJhd1N0ZXBzPWZ1bmN0aW9uKCl7dmFyIHQ9W107aWYodGhpcy5fYW5pbWF0ZU9uTmV4dFJlbmRlcigpKXt2YXIgZT10aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxuPXRoaXMubGVuZ3RoKCkuc2NhbGUuc2NhbGUodGhpcy5iYXNlbGluZVZhbHVlKCkpLGk9dGhpcy5faXNWZXJ0aWNhbD8iaGVpZ2h0Ijoid2lkdGgiO2VbdGhpcy5faXNWZXJ0aWNhbD8ieSI6IngiXT1mdW5jdGlvbigpe3JldHVybiBufSxlW2ldPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LHQucHVzaCh7YXR0clRvUHJvamVjdG9yOmUsYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3IodF90LkFuaW1hdG9yLlJFU0VUKX0pfXJldHVybiB0LnB1c2goe2F0dHJUb1Byb2plY3Rvcjp0aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxhbmltYXRvcjp0aGlzLl9nZXRBbmltYXRvcih0X3QuQW5pbWF0b3IuTUFJTil9KSx0fSxuLnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3I9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLGk9dC5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yLmNhbGwodGhpcykscj10aGlzLmxlbmd0aCgpLnNjYWxlLnNjYWxlKHRoaXMuYmFzZWxpbmVWYWx1ZSgpKSxvPXRoaXMuX2lzVmVydGljYWw/InkiOiJ4IixhPXRoaXMuX2lzVmVydGljYWw/IngiOiJ5IixzPVRndC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnBvc2l0aW9uKCkpLGw9VGd0LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMubGVuZ3RoKCkpLGM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBNYXRoLmFicyhyLWwodCxlLG4pKX0sdT1pW24uX0JBUl9USElDS05FU1NfS0VZXSxoPWkuZ2FwLGQ9bnVsbD09aD91OmZ1bmN0aW9uKHQsZSxpKXt2YXIgcj11KHQsZSxpKTtyZXR1cm4gcjxuLl9CQVJfR0FQTEVTU19USFJFU0hPTERfUFg/cjpyLWgodCxlLGkpfTtyZXR1cm4gaS53aWR0aD10aGlzLl9pc1ZlcnRpY2FsP2Q6YyxpLmhlaWdodD10aGlzLl9pc1ZlcnRpY2FsP2M6ZCxpW29dPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT1sKHQsZSxuKTtyZXR1cm4gaT5yP3I6aX0saVthXT1mdW5jdGlvbih0LG4saSl7cmV0dXJuIGUuX2dldFBvc2l0aW9uQXR0cihzKHQsbixpKSx1KHQsbixpKSl9LGl9LG4ucHJvdG90eXBlLl91cGRhdGVUaGlja25lc3NBdHRyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXRoaXMucG9zaXRpb24oKSxpPXRoaXMuYmFyRW5kKCk7bnVsbCE9ZSYmbnVsbCE9aT8odGhpcy5fZml4ZWRCYXJQaXhlbFRoaWNrbmVzcz0hMSx0aGlzLmF0dHIobi5fQkFSX1RISUNLTkVTU19LRVksKGZ1bmN0aW9uKHQsbixyKXt2YXIgbz1lLmFjY2Vzc29yKHQsbixyKSxhPWkuYWNjZXNzb3IodCxuLHIpO3JldHVybiBvPWUuc2NhbGU/ZS5zY2FsZS5zY2FsZShvKTpvLGE9aS5zY2FsZT9pLnNjYWxlLnNjYWxlKGEpOmEsTWF0aC5hYnMoYS1vKX0pKSk6KHRoaXMuX2ZpeGVkQmFyUGl4ZWxUaGlja25lc3M9ITAsdGhpcy5hdHRyKG4uX0JBUl9USElDS05FU1NfS0VZLChmdW5jdGlvbigpe3JldHVybiB0Ll9iYXJQaXhlbFRoaWNrbmVzcygpfSkpKX0sbi5wcm90b3R5cGUuX2JhclBpeGVsVGhpY2tuZXNzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZpeGVkQmFyUGl4ZWxUaGlja25lc3MmJnRoaXMuX3Byb2plY3RvcnNSZWFkeSgpP3RoaXMuX2NvbXB1dGVCYXJQaXhlbFRoaWNrbmVzcyh0aGlzLnBvc2l0aW9uKCksdGhpcy5kYXRhc2V0cygpLHRoaXMuX2lzVmVydGljYWw/dGhpcy53aWR0aCgpOnRoaXMuaGVpZ2h0KCkpOjB9LG4ucHJvdG90eXBlLmVudGl0aWVzPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT10aGlzLmRhdGFzZXRzKCkpLHRoaXMuX3Byb2plY3RvcnNSZWFkeSgpP3QucHJvdG90eXBlLmVudGl0aWVzLmNhbGwodGhpcyxlKTpbXX0sbi5wcm90b3R5cGUuX2VudGl0eUJvdW5kcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGl4ZWxCb3VuZHModC5kYXR1bSx0LmluZGV4LHQuZGF0YXNldCl9LG4ucHJvdG90eXBlLl9waXhlbEJvdW5kcz1mdW5jdGlvbih0LGUsbil7dmFyIGk9dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCk7cmV0dXJue3g6aS54KHQsZSxuKSx5OmkueSh0LGUsbiksd2lkdGg6aS53aWR0aCh0LGUsbiksaGVpZ2h0OmkuaGVpZ2h0KHQsZSxuKX19LG4ucHJvdG90eXBlLl9waXhlbFBvaW50PWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT10aGlzLl9waXhlbEJvdW5kcyh0LGUsbikscj1UZ3QuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5faXNWZXJ0aWNhbD90aGlzLnkoKTp0aGlzLngoKSkodCxlLG4pLG89KHRoaXMuX2lzVmVydGljYWw/dGhpcy55KCkuc2NhbGU6dGhpcy54KCkuc2NhbGUpLnNjYWxlKHRoaXMuYmFzZWxpbmVWYWx1ZSgpKTtyZXR1cm4gdGhpcy5fcGl4ZWxQb2ludEJhcihyLG8saSl9LG4ucHJvdG90eXBlLl9waXhlbFBvaW50QmFyPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaSxyO3JldHVybiB0aGlzLl9pc1ZlcnRpY2FsPyhpPW4ueCtuLndpZHRoLzIscj10PD1lP24ueTpuLnkrbi5oZWlnaHQpOihpPXQ+PWU/bi54K24ud2lkdGg6bi54LHI9bi55K24uaGVpZ2h0LzIpLHt4OmkseTpyfX0sbi5wcm90b3R5cGUuX3VuaW5zdGFsbFNjYWxlRm9yS2V5PWZ1bmN0aW9uKGUsbil7dC5wcm90b3R5cGUuX3VuaW5zdGFsbFNjYWxlRm9yS2V5LmNhbGwodGhpcyxlLG4pfSxuLnByb3RvdHlwZS5fZ2V0RGF0YVRvRHJhdz1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT1uZXcgU210Lk1hcCxuPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGk9dGhpcy53aWR0aCgpLHI9dGhpcy5oZWlnaHQoKTtyZXR1cm4gdGhpcy5kYXRhc2V0cygpLmZvckVhY2goKGZ1bmN0aW9uKG8pe3ZhciBhPW8uZGF0YSgpLm1hcCgoZnVuY3Rpb24oZSxhKXtyZXR1cm4gdC5faXNEYXR1bU9uU2NyZWVuKG4saSxyLGUsYSxvKT9lOm51bGx9KSk7ZS5zZXQobyxhKX0pKSxlfSxuLnByb3RvdHlwZS5faXNEYXR1bU9uU2NyZWVuPWZ1bmN0aW9uKHQsZSxuLGkscixvKXt2YXIgYT10LngoaSxyLG8pLHM9dC55KGkscixvKSxsPXQud2lkdGgoaSxyLG8pLGM9dC5oZWlnaHQoaSxyLG8pO3JldHVybiEhKFNtdC5NYXRoLmlzVmFsaWROdW1iZXIoYSkmJlNtdC5NYXRoLmlzVmFsaWROdW1iZXIocykmJlNtdC5NYXRoLmlzVmFsaWROdW1iZXIobCkmJlNtdC5NYXRoLmlzVmFsaWROdW1iZXIoYykpJiZTbXQuTWF0aC5ib3VuZHNJbnRlcnNlY3RzKGEscyxsLGMsMCwwLGUsbil9LG4ucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZT1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dC5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlLmNhbGwodGhpcyksdGhpcy5kYXRhc2V0cygpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3JldHVybiBlLl9sYWJlbENvbmZpZy5nZXQodCkubWVhc3VyZXIucmVzZXQoKX0pKX0sbi5fQkFSX1RISUNLTkVTU19SQVRJTz0uOTUsbi5fQkFSX0dBUExFU1NfVEhSRVNIT0xEX1BYPTMsbi5fU0lOR0xFX0JBUl9ESU1FTlNJT05fUkFUSU89LjQsbi5fQkFSX0FSRUFfQ0xBU1M9ImJhci1hcmVhIixuLl9CQVJfRU5EX0tFWT0iYmFyRW5kIixuLl9CQVJfVEhJQ0tORVNTX0tFWT0id2lkdGgiLG4uX0xBQkVMX0FSRUFfQ0xBU1M9ImJhci1sYWJlbC10ZXh0LWFyZWEiLG4uX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSPTEwLG59KShVZ3QuWFlQbG90KTtmdW5jdGlvbiBpKHQsZSxpKXt2YXIgcixvPXQuc2NhbGU7aWYobyBpbnN0YW5jZW9mIFVtdC5DYXRlZ29yeSlyPW8ucmFuZ2VCYW5kKCk7ZWxzZXt2YXIgYT10LmFjY2Vzc29yLHM9aWR0LnNldChTbXQuQXJyYXkuZmxhdHRlbihlLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuZGF0YSgpLm1hcCgoZnVuY3Rpb24oZSxuKXtyZXR1cm4gYShlLG4sdCl9KSkuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9dH0pKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnZhbHVlT2YoKX0pKX0pKSkpLnZhbHVlcygpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuK3R9KSk7cy5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0LWV9KSk7dmFyIGw9cy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBvLnNjYWxlKHQpfSkpLGM9aWR0LnBhaXJzKGwpO3I9U210Lk1hdGgubWluKGMsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGguYWJzKHRbMV0tdFswXSl9KSxpKm4uX1NJTkdMRV9CQVJfRElNRU5TSU9OX1JBVElPKSxyKj1uLl9CQVJfVEhJQ0tORVNTX1JBVElPfXJldHVybiByfWUuQmFyPW59KSkscWd0PWJlKChmdW5jdGlvbih0LGUpewovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dm9pZCAwPT09ZSYmKGU9InZlcnRpY2FsIik7dmFyIG49dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIG4uX2NsdXN0ZXJPZmZzZXRzPW5ldyBTbXQuTWFwLG59cmV0dXJuIERmdC5fX2V4dGVuZHMoZSx0KSxlLnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3I9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLG49dC5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yLmNhbGwodGhpcyksaT10aGlzLl9tYWtlSW5uZXJTY2FsZSgpLHI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gaS5yYW5nZUJhbmQoKX07bi53aWR0aD10aGlzLl9pc1ZlcnRpY2FsP3I6bi53aWR0aCxuLmhlaWdodD10aGlzLl9pc1ZlcnRpY2FsP24uaGVpZ2h0OnI7dmFyIG89bi54LGE9bi55O3JldHVybiBuLng9dGhpcy5faXNWZXJ0aWNhbD9mdW5jdGlvbih0LG4saSl7cmV0dXJuIG8odCxuLGkpK2UuX2NsdXN0ZXJPZmZzZXRzLmdldChpKX06ZnVuY3Rpb24odCxlLG4pe3JldHVybiBvKHQsZSxuKX0sbi55PXRoaXMuX2lzVmVydGljYWw/ZnVuY3Rpb24odCxlLG4pe3JldHVybiBhKHQsZSxuKX06ZnVuY3Rpb24odCxuLGkpe3JldHVybiBhKHQsbixpKStlLl9jbHVzdGVyT2Zmc2V0cy5nZXQoaSl9LG59LGUucHJvdG90eXBlLl91cGRhdGVDbHVzdGVyUG9zaXRpb249ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dGhpcy5fbWFrZUlubmVyU2NhbGUoKTt0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaCgoZnVuY3Rpb24obixpKXtyZXR1cm4gdC5fY2x1c3Rlck9mZnNldHMuc2V0KG4sZS5zY2FsZShTdHJpbmcoaSkpLWUucmFuZ2VCYW5kKCkvMil9KSl9LGUucHJvdG90eXBlLl9tYWtlSW5uZXJTY2FsZT1mdW5jdGlvbigpe3ZhciB0PW5ldyBVbXQuQ2F0ZWdvcnk7dC5kb21haW4odGhpcy5kYXRhc2V0cygpLm1hcCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gU3RyaW5nKGUpfSkpKTt2YXIgZT1UZ3QuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5hdHRyKFdndC5CYXIuX0JBUl9USElDS05FU1NfS0VZKSk7cmV0dXJuIHQucmFuZ2UoWzAsZShudWxsLDAsbnVsbCldKSx0fSxlLnByb3RvdHlwZS5fZ2V0RGF0YVRvRHJhdz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl91cGRhdGVDbHVzdGVyUG9zaXRpb24oKSx0LnByb3RvdHlwZS5fZ2V0RGF0YVRvRHJhdy5jYWxsKHRoaXMpfSxlfSkoV2d0LkJhcik7ZS5DbHVzdGVyZWRCYXI9bn0pKSxZZ3Q9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBlPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gZS5fc3RhcnRBbmdsZT0wLGUuX2VuZEFuZ2xlPTIqTWF0aC5QSSxlLl9sYWJlbEZvcm1hdHRlcj1DbXQuaWRlbnRpdHkoKSxlLl9sYWJlbHNFbmFibGVkPSExLGUuaW5uZXJSYWRpdXMoMCksZS5vdXRlclJhZGl1cygoZnVuY3Rpb24oKXt2YXIgdD1lLl9waWVDZW50ZXIoKTtyZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgoZS53aWR0aCgpLXQueCx0LngpLE1hdGgubWF4KGUuaGVpZ2h0KCktdC55LHQueSkpfSkpLGUuYWRkQ2xhc3MoInBpZS1wbG90IiksZS5hdHRyKCJmaWxsIiwoZnVuY3Rpb24odCxlKXtyZXR1cm4gU3RyaW5nKGUpfSksbmV3IFVtdC5Db2xvciksZS5fc3Ryb2tlRHJhd2Vycz1uZXcgU210Lk1hcCxlfXJldHVybiBEZnQuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0LnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl9zdHJva2VEcmF3ZXJzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3JldHVybiB0LmF0dGFjaFRvKGUuX3JlbmRlckFyZWEpfSkpfSxlLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0PWZ1bmN0aW9uKGUsbixpKXt0LnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcyxlLG4saSk7dmFyIHI9dGhpcy5fcGllQ2VudGVyKCk7dGhpcy5fcmVuZGVyQXJlYS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIityLngrIiwiK3IueSsiKSIpO3ZhciBvPU1hdGgubWluKE1hdGgubWF4KHRoaXMud2lkdGgoKS1yLngsci54KSxNYXRoLm1heCh0aGlzLmhlaWdodCgpLXIueSxyLnkpKTtyZXR1cm4gbnVsbCE9dGhpcy5pbm5lclJhZGl1cygpLnNjYWxlJiZ0aGlzLmlubmVyUmFkaXVzKCkuc2NhbGUucmFuZ2UoWzAsb10pLG51bGwhPXRoaXMub3V0ZXJSYWRpdXMoKS5zY2FsZSYmdGhpcy5vdXRlclJhZGl1cygpLnNjYWxlLnJhbmdlKFswLG9dKSx0aGlzfSxlLnByb3RvdHlwZS5hZGREYXRhc2V0PWZ1bmN0aW9uKGUpe3JldHVybiB0LnByb3RvdHlwZS5hZGREYXRhc2V0LmNhbGwodGhpcyxlKSx0aGlzfSxlLnByb3RvdHlwZS5fYWRkRGF0YXNldD1mdW5jdGlvbihlKXtpZigxPT09dGhpcy5kYXRhc2V0cygpLmxlbmd0aClyZXR1cm4gU210LldpbmRvdy53YXJuKCJPbmx5IG9uZSBkYXRhc2V0IGlzIHN1cHBvcnRlZCBpbiBQaWUgcGxvdHMiKSx0aGlzO3RoaXMuX3VwZGF0ZVBpZUFuZ2xlcygpLHQucHJvdG90eXBlLl9hZGREYXRhc2V0LmNhbGwodGhpcyxlKTt2YXIgbj1uZXcgT2d0LkFyY091dGxpbmVTVkdEcmF3ZXI7cmV0dXJuIHRoaXMuX2lzU2V0dXAmJm4uYXR0YWNoVG8odGhpcy5fcmVuZGVyQXJlYSksdGhpcy5fc3Ryb2tlRHJhd2Vycy5zZXQoZSxuKSx0aGlzfSxlLnByb3RvdHlwZS5yZW1vdmVEYXRhc2V0PWZ1bmN0aW9uKGUpe3JldHVybiB0LnByb3RvdHlwZS5yZW1vdmVEYXRhc2V0LmNhbGwodGhpcyxlKSx0aGlzfSxlLnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldE5vZGVzPWZ1bmN0aW9uKGUpe3QucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0Tm9kZXMuY2FsbCh0aGlzLGUpLHRoaXMuX3N0cm9rZURyYXdlcnMuZ2V0KGUpLnJlbW92ZSgpfSxlLnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldD1mdW5jdGlvbihlKXtyZXR1cm4gdC5wcm90b3R5cGUuX3JlbW92ZURhdGFzZXQuY2FsbCh0aGlzLGUpLHRoaXMuX3N0cm9rZURyYXdlcnMuZGVsZXRlKGUpLHRoaXMuX3N0YXJ0QW5nbGVzPVtdLHRoaXMuX2VuZEFuZ2xlcz1bXSx0aGlzfSxlLnByb3RvdHlwZS5zZWxlY3Rpb25zPWZ1bmN0aW9uKGUpe3ZhciBuPXRoaXM7dm9pZCAwPT09ZSYmKGU9dGhpcy5kYXRhc2V0cygpKTt2YXIgaT10LnByb3RvdHlwZS5zZWxlY3Rpb25zLmNhbGwodGhpcyxlKS5ub2RlcygpO3JldHVybiBlLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPW4uX3N0cm9rZURyYXdlcnMuZ2V0KHQpO251bGwhPWUmJmkucHVzaC5hcHBseShpLGUuZ2V0VmlzdWFsUHJpbWl0aXZlcygpKX0pKSxpZHQuc2VsZWN0QWxsKGkpfSxlLnByb3RvdHlwZS5fb25EYXRhc2V0VXBkYXRlPWZ1bmN0aW9uKCl7dC5wcm90b3R5cGUuX29uRGF0YXNldFVwZGF0ZS5jYWxsKHRoaXMpLHRoaXMuX3VwZGF0ZVBpZUFuZ2xlcygpLHRoaXMucmVuZGVyKCl9LGUucHJvdG90eXBlLl9jcmVhdGVEcmF3ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFNndC5Qcm94eURyYXdlcigoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IElndC5BcmNTVkdEcmF3ZXJ9KSwoZnVuY3Rpb24oKXtyZXR1cm4gbW10Lndhcm4oImNhbnZhcyByZW5kZXJlciBpcyBub3Qgc3VwcG9ydGVkIG9uIFBpZSBQbG90ISIpLG51bGx9KSl9LGUucHJvdG90eXBlLmVudGl0aWVzPWZ1bmN0aW9uKGUpe3ZhciBuPXRoaXM7cmV0dXJuIHZvaWQgMD09PWUmJihlPXRoaXMuZGF0YXNldHMoKSksdC5wcm90b3R5cGUuZW50aXRpZXMuY2FsbCh0aGlzLGUpLm1hcCgoZnVuY3Rpb24odCl7dC5wb3NpdGlvbi54Kz1uLndpZHRoKCkvMix0LnBvc2l0aW9uLnkrPW4uaGVpZ2h0KCkvMjt2YXIgZT1pZHQuc2VsZWN0KG4uX3N0cm9rZURyYXdlcnMuZ2V0KHQuZGF0YXNldCkuZ2V0VmlzdWFsUHJpbWl0aXZlQXRJbmRleCh0LmluZGV4KSksaT10O3JldHVybiBpLnN0cm9rZVNlbGVjdGlvbj1lLGl9KSl9LGUucHJvdG90eXBlLnNlY3RvclZhbHVlPWZ1bmN0aW9uKHQsbil7cmV0dXJuIG51bGw9PXQ/dGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQoZS5fU0VDVE9SX1ZBTFVFX0tFWSk6KHRoaXMuX2JpbmRQcm9wZXJ0eShlLl9TRUNUT1JfVkFMVUVfS0VZLHQsbiksdGhpcy5fdXBkYXRlUGllQW5nbGVzKCksdGhpcy5yZW5kZXIoKSx0aGlzKX0sZS5wcm90b3R5cGUuaW5uZXJSYWRpdXM9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbnVsbD09dD90aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldChlLl9JTk5FUl9SQURJVVNfS0VZKToodGhpcy5fYmluZFByb3BlcnR5KGUuX0lOTkVSX1JBRElVU19LRVksdCxuKSx0aGlzLnJlbmRlcigpLHRoaXMpfSxlLnByb3RvdHlwZS5vdXRlclJhZGl1cz1mdW5jdGlvbih0LG4pe3JldHVybiBudWxsPT10P3RoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KGUuX09VVEVSX1JBRElVU19LRVkpOih0aGlzLl9iaW5kUHJvcGVydHkoZS5fT1VURVJfUkFESVVTX0tFWSx0LG4pLHRoaXMucmVuZGVyKCksdGhpcyl9LGUucHJvdG90eXBlLnN0YXJ0QW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5fc3RhcnRBbmdsZToodGhpcy5fc3RhcnRBbmdsZT10LHRoaXMuX3VwZGF0ZVBpZUFuZ2xlcygpLHRoaXMucmVuZGVyKCksdGhpcyl9LGUucHJvdG90eXBlLmVuZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX2VuZEFuZ2xlOih0aGlzLl9lbmRBbmdsZT10LHRoaXMuX3VwZGF0ZVBpZUFuZ2xlcygpLHRoaXMucmVuZGVyKCksdGhpcyl9LGUucHJvdG90eXBlLmxhYmVsc0VuYWJsZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5fbGFiZWxzRW5hYmxlZDoodGhpcy5fbGFiZWxzRW5hYmxlZD10LHRoaXMucmVuZGVyKCksdGhpcyl9LGUucHJvdG90eXBlLmxhYmVsRm9ybWF0dGVyPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX2xhYmVsRm9ybWF0dGVyOih0aGlzLl9sYWJlbEZvcm1hdHRlcj10LHRoaXMucmVuZGVyKCksdGhpcyl9LGUucHJvdG90eXBlLmVudGl0aWVzQXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy53aWR0aCgpLzIsbj10aGlzLmhlaWdodCgpLzIsaT10aGlzLl9zbGljZUluZGV4Rm9yUG9pbnQoe3g6dC54LWUseTp0Lnktbn0pO3JldHVybiBudWxsPT1pP1tdOlt0aGlzLmVudGl0aWVzKClbaV1dfSxlLnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxuPXQucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnMuY2FsbCh0aGlzKSxpPVRndC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLmlubmVyUmFkaXVzKCkpLHI9VGd0LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMub3V0ZXJSYWRpdXMoKSk7cmV0dXJuIG4uZD1mdW5jdGlvbih0LG4sbyl7cmV0dXJuIGlkdC5hcmMoKS5pbm5lclJhZGl1cyhpKHQsbixvKSkub3V0ZXJSYWRpdXMocih0LG4sbykpLnN0YXJ0QW5nbGUoZS5fc3RhcnRBbmdsZXNbbl0pLmVuZEFuZ2xlKGUuX2VuZEFuZ2xlc1tuXSkodCxuKX0sbn0sZS5wcm90b3R5cGUuX3VwZGF0ZVBpZUFuZ2xlcz1mdW5jdGlvbigpe2lmKG51bGwhPXRoaXMuc2VjdG9yVmFsdWUoKSYmMCE9PXRoaXMuZGF0YXNldHMoKS5sZW5ndGgpe3ZhciB0PVRndC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnNlY3RvclZhbHVlKCkpLGU9dGhpcy5kYXRhc2V0cygpWzBdLG49dGhpcy5fZ2V0RGF0YVRvRHJhdygpLmdldChlKSxpPWlkdC5waWUoKS5zb3J0KG51bGwpLnN0YXJ0QW5nbGUodGhpcy5fc3RhcnRBbmdsZSkuZW5kQW5nbGUodGhpcy5fZW5kQW5nbGUpLnZhbHVlKChmdW5jdGlvbihuLGkpe3JldHVybiB0KG4saSxlKX0pKShuKTt0aGlzLl9zdGFydEFuZ2xlcz1pLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuc3RhcnRBbmdsZX0pKSx0aGlzLl9lbmRBbmdsZXM9aS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmVuZEFuZ2xlfSkpfX0sZS5wcm90b3R5cGUuX3BpZUNlbnRlcj1mdW5jdGlvbigpe3ZhciB0LGUsbixpLHI9dGhpcy5fc3RhcnRBbmdsZTx0aGlzLl9lbmRBbmdsZT90aGlzLl9zdGFydEFuZ2xlOnRoaXMuX2VuZEFuZ2xlLG89dGhpcy5fc3RhcnRBbmdsZTx0aGlzLl9lbmRBbmdsZT90aGlzLl9lbmRBbmdsZTp0aGlzLl9zdGFydEFuZ2xlLGE9TWF0aC5zaW4ocikscz1NYXRoLmNvcyhyKSxsPU1hdGguc2luKG8pLGM9TWF0aC5jb3Mobyk7cmV0dXJuIGE+PTAmJmw+PTA/cz49MCYmYz49MD8odD1zLGU9MCxpPTAsbj1sKTpzPDAmJmM8MD8odD0wLGU9LWMsaT0wLG49YSk6cz49MCYmYzwwPyh0PXMsZT0tYyxpPTAsbj1hKTpzPDAmJmM+PTAmJih0PTEsZT0xLGk9MSxuPU1hdGgubWF4KGEsbCkpOmE+PTAmJmw8MD9zPj0wJiZjPj0wPyh0PU1hdGgubWF4KHMsYyksZT0xLGk9MSxuPTEpOnM8MCYmYzwwPyh0PTAsZT0xLGk9LWwsbj1hKTpzPj0wJiZjPDA/KHQ9cyxlPTEsaT0tbCxuPTEpOnM8MCYmYz49MCYmKHQ9YyxlPTEsaT0xLG49YSk6YTwwJiZsPj0wP3M+PTAmJmM+PTA/KHQ9MSxlPTAsaT0tYSxuPWwpOnM8MCYmYzwwPyh0PTEsZT1NYXRoLm1heCgtcywtYyksaT0xLG49MSk6cz49MCYmYzwwPyh0PTEsZT0tYyxpPS1hLG49MSk6czwwJiZjPj0wJiYodD0xLGU9LXMsaT0xLG49bCk6YTwwJiZsPDAmJihzPj0wJiZjPj0wPyh0PWMsZT0wLGk9LWEsbj0wKTpzPDAmJmM8MD8odD0wLGU9LXMsaT0tbCxuPTApOnM+PTAmJmM8MD8odD0xLGU9MSxpPU1hdGgubWF4KHMsLWMpLG49MSk6czwwJiZjPj0wJiYodD1jLGU9LXMsaT0xLG49MCkpLHt4Omkrbj09MD8wOmkvKGkrbikqdGhpcy53aWR0aCgpLHk6dCtlPT0wPzA6dC8odCtlKSp0aGlzLmhlaWdodCgpfX0sZS5wcm90b3R5cGUuX2dldERhdGFUb0RyYXc9ZnVuY3Rpb24oKXt2YXIgbj10LnByb3RvdHlwZS5fZ2V0RGF0YVRvRHJhdy5jYWxsKHRoaXMpO2lmKDA9PT10aGlzLmRhdGFzZXRzKCkubGVuZ3RoKXJldHVybiBuO3ZhciBpPVRndC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnNlY3RvclZhbHVlKCkpLHI9dGhpcy5kYXRhc2V0cygpWzBdLG89bi5nZXQocikuZmlsdGVyKChmdW5jdGlvbih0LG4pe3JldHVybiBlLl9pc1ZhbGlkRGF0YShpKHQsbixyKSl9KSk7cmV0dXJuIG4uc2V0KHIsbyksbn0sZS5faXNWYWxpZERhdGE9ZnVuY3Rpb24odCl7cmV0dXJuIFNtdC5NYXRoLmlzVmFsaWROdW1iZXIodCkmJnQ+PTB9LGUucHJvdG90eXBlLl9waXhlbFBvaW50PWZ1bmN0aW9uKHQsbixpKXt2YXIgcj1UZ3QuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5zZWN0b3JWYWx1ZSgpKTtpZighZS5faXNWYWxpZERhdGEocih0LG4saSkpKXJldHVybnt4Ok5hTix5Ok5hTn07dmFyIG89KFRndC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLmlubmVyUmFkaXVzKCkpKHQsbixpKStUZ3QuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5vdXRlclJhZGl1cygpKSh0LG4saSkpLzIsYT1pZHQucGllKCkuc29ydChudWxsKS52YWx1ZSgoZnVuY3Rpb24odCxuKXt2YXIgbz1yKHQsbixpKTtyZXR1cm4gZS5faXNWYWxpZERhdGEobyk/bzowfSkpLnN0YXJ0QW5nbGUodGhpcy5fc3RhcnRBbmdsZSkuZW5kQW5nbGUodGhpcy5fZW5kQW5nbGUpKGkuZGF0YSgpKSxzPShhW25dLnN0YXJ0QW5nbGUrYVtuXS5lbmRBbmdsZSkvMjtyZXR1cm57eDpvKk1hdGguc2luKHMpLHk6LW8qTWF0aC5jb3Mocyl9fSxlLnByb3RvdHlwZS5fYWRkaXRpb25hbFBhaW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5fcmVuZGVyQXJlYS5zZWxlY3QoIi5sYWJlbC1hcmVhIikucmVtb3ZlKCksdGhpcy5fbGFiZWxzRW5hYmxlZCYmU210LldpbmRvdy5zZXRUaW1lb3V0KChmdW5jdGlvbigpe3JldHVybiBlLl9kcmF3TGFiZWxzKCl9KSx0KTt2YXIgbj10aGlzLl9nZW5lcmF0ZVN0cm9rZURyYXdTdGVwcygpLGk9dGhpcy5fZ2V0RGF0YVRvRHJhdygpO3RoaXMuZGF0YXNldHMoKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgcj1UZ3QuUGxvdC5hcHBseURyYXdTdGVwcyhuLHQpO2UuX3N0cm9rZURyYXdlcnMuZ2V0KHQpLmRyYXcoaS5nZXQodCkscil9KSl9LGUucHJvdG90eXBlLl9nZW5lcmF0ZVN0cm9rZURyYXdTdGVwcz1mdW5jdGlvbigpe3JldHVyblt7YXR0clRvUHJvamVjdG9yOnRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGFuaW1hdG9yOm5ldyBCZnQuTnVsbH1dfSxlLnByb3RvdHlwZS5fc2xpY2VJbmRleEZvclBvaW50PWZ1bmN0aW9uKHQpe3ZhciBlLG49TWF0aC5zcXJ0KE1hdGgucG93KHQueCwyKStNYXRoLnBvdyh0LnksMikpLGk9TWF0aC5hY29zKC10Lnkvbik7dC54PDAmJihpPTIqTWF0aC5QSS1pKTtmb3IodmFyIHI9MDtyPHRoaXMuX3N0YXJ0QW5nbGVzLmxlbmd0aDtyKyspaWYodGhpcy5fc3RhcnRBbmdsZXNbcl08aSYmdGhpcy5fZW5kQW5nbGVzW3JdPmkpe2U9cjticmVha31pZih2b2lkIDAhPT1lKXt2YXIgbz10aGlzLmRhdGFzZXRzKClbMF0sYT1vLmRhdGEoKVtlXSxzPXRoaXMuaW5uZXJSYWRpdXMoKS5hY2Nlc3NvcihhLGUsbyksbD10aGlzLm91dGVyUmFkaXVzKCkuYWNjZXNzb3IoYSxlLG8pO2lmKG4+cyYmbjxsKXJldHVybiBlfXJldHVybiBudWxsfSxlLnByb3RvdHlwZS5fZHJhd0xhYmVscz1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLGU9dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksbj10aGlzLl9yZW5kZXJBcmVhLmFwcGVuZCgiZyIpLmNsYXNzZWQoImxhYmVsLWFyZWEiLCEwKSxpPW5ldyBhbXQuU3ZnQ29udGV4dChuLm5vZGUoKSkscj1uZXcgYW10LkNhY2hlTWVhc3VyZXIoaSksbz1uZXcgYW10LldyaXRlcihyLGkpLGE9dGhpcy5kYXRhc2V0cygpWzBdLHM9dGhpcy5fZ2V0RGF0YVRvRHJhdygpLmdldChhKSxsPXMubGVuZ3RoLGM9ZnVuY3Rpb24oaSl7dmFyIGw9c1tpXSxjPXUuc2VjdG9yVmFsdWUoKS5hY2Nlc3NvcihsLGksYSk7aWYoIVNtdC5NYXRoLmlzVmFsaWROdW1iZXIoYykpcmV0dXJuImNvbnRpbnVlIjtjPXUuX2xhYmVsRm9ybWF0dGVyKGMsbCxpLGEpO3ZhciBoPXIubWVhc3VyZShjKSxkPSh1Ll9lbmRBbmdsZXNbaV0rdS5fc3RhcnRBbmdsZXNbaV0pLzIscD11Lm91dGVyUmFkaXVzKCkuYWNjZXNzb3IobCxpLGEpO3Uub3V0ZXJSYWRpdXMoKS5zY2FsZSYmKHA9dS5vdXRlclJhZGl1cygpLnNjYWxlLnNjYWxlKHApKTt2YXIgZj11LmlubmVyUmFkaXVzKCkuYWNjZXNzb3IobCxpLGEpO3UuaW5uZXJSYWRpdXMoKS5zY2FsZSYmKGY9dS5pbm5lclJhZGl1cygpLnNjYWxlLnNjYWxlKGYpKTt2YXIgbT0ocCtmKS8yLGc9TWF0aC5zaW4oZCkqbS1oLndpZHRoLzIsXz0tTWF0aC5jb3MoZCkqbS1oLmhlaWdodC8yLHk9W3t4OmcseTpffSx7eDpnLHk6XytoLmhlaWdodH0se3g6ZytoLndpZHRoLHk6X30se3g6ZytoLndpZHRoLHk6XytoLmhlaWdodH1dLHY9eS5ldmVyeSgoZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguYWJzKGUueCk8PXQud2lkdGgoKS8yJiZNYXRoLmFicyhlLnkpPD10LmhlaWdodCgpLzJ9KSk7diYmKHY9eS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiB0Ll9zbGljZUluZGV4Rm9yUG9pbnQoZSl9KSkuZXZlcnkoKGZ1bmN0aW9uKHQpe3JldHVybiB0PT09aX0pKSk7dmFyIGI9ZS5maWxsKGwsaSxhKSx4PTEuNipTbXQuQ29sb3IuY29udHJhc3QoIndoaXRlIixiKTxTbXQuQ29sb3IuY29udHJhc3QoImJsYWNrIixiKSx3PW4uYXBwZW5kKCJnIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrZysiLCIrXysiKSIpO3cuY2xhc3NlZCh4PyJkYXJrLWxhYmVsIjoibGlnaHQtbGFiZWwiLCEwKSx3LnN0eWxlKCJ2aXNpYmlsaXR5Iix2PyJpbmhlcml0IjoiaGlkZGVuIiksby53cml0ZShjLGgud2lkdGgsaC5oZWlnaHQse3hBbGlnbjoiY2VudGVyIix5QWxpZ246ImNlbnRlciJ9LHcubm9kZSgpKX0sdT10aGlzLGg9MDtoPGw7aCsrKWMoaCl9LGUuX0lOTkVSX1JBRElVU19LRVk9ImlubmVyLXJhZGl1cyIsZS5fT1VURVJfUkFESVVTX0tFWT0ib3V0ZXItcmFkaXVzIixlLl9TRUNUT1JfVkFMVUVfS0VZPSJzZWN0b3ItdmFsdWUiLGV9KShUZ3QuUGxvdCk7ZS5QaWU9bn0pKSxYZ3Q9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBlPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gZS5fbGFiZWxzRW5hYmxlZD0hMSxlLl9sYWJlbD1udWxsLGUuYW5pbWF0b3IoInJlY3RhbmdsZXMiLG5ldyBCZnQuTnVsbCksZS5hZGRDbGFzcygicmVjdGFuZ2xlLXBsb3QiKSxlLmF0dHIoImZpbGwiLChuZXcgVW10LkNvbG9yKS5yYW5nZSgpWzBdKSxlfXJldHVybiBEZnQuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUuX2NyZWF0ZURyYXdlcj1mdW5jdGlvbigpe3JldHVybiBuZXcgU2d0LlByb3h5RHJhd2VyKChmdW5jdGlvbigpe3JldHVybiBuZXcgRGd0LlJlY3RhbmdsZVNWR0RyYXdlcn0pLChmdW5jdGlvbih0KXtyZXR1cm4gbmV3IFZndC5SZWN0YW5nbGVDYW52YXNEcmF3ZXIodCl9KSl9LGUucHJvdG90eXBlLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3Rvcj1mdW5jdGlvbigpe3ZhciBuPXRoaXMsaT10LnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3IuY2FsbCh0aGlzKSxyPVRndC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksbz1pW2UuX1gyX0tFWV0sYT1UZ3QuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpLHM9aVtlLl9ZMl9LRVldLGw9dGhpcy54KCkuc2NhbGUsYz10aGlzLnkoKS5zY2FsZTtyZXR1cm4gbnVsbCE9bz8oaS53aWR0aD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIE1hdGguYWJzKG8odCxlLG4pLXIodCxlLG4pKX0saS54PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gTWF0aC5taW4obyh0LGUsbikscih0LGUsbikpfSk6KGkud2lkdGg9ZnVuY3Rpb24odCxlLGkpe3JldHVybiBuLl9yZWN0YW5nbGVXaWR0aChsKX0saS54PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gcih0LGUsbiktLjUqaS53aWR0aCh0LGUsbil9KSxudWxsIT1zPyhpLmhlaWdodD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIE1hdGguYWJzKHModCxlLG4pLWEodCxlLG4pKX0saS55PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gTWF0aC5tYXgocyh0LGUsbiksYSh0LGUsbikpLWkuaGVpZ2h0KHQsZSxuKX0pOihpLmhlaWdodD1mdW5jdGlvbih0LGUsaSl7cmV0dXJuIG4uX3JlY3RhbmdsZVdpZHRoKGMpfSxpLnk9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBhKHQsZSxuKS0uNSppLmhlaWdodCh0LGUsbil9KSxkZWxldGUgaVtlLl9YMl9LRVldLGRlbGV0ZSBpW2UuX1kyX0tFWV0saX0sZS5wcm90b3R5cGUuX2dlbmVyYXRlRHJhd1N0ZXBzPWZ1bmN0aW9uKCl7cmV0dXJuW3thdHRyVG9Qcm9qZWN0b3I6dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3IoInJlY3RhbmdsZXMiKX1dfSxlLnByb3RvdHlwZS5fZmlsdGVyRm9yUHJvcGVydHk9ZnVuY3Rpb24oZSl7cmV0dXJuIHQucHJvdG90eXBlLl9maWx0ZXJGb3JQcm9wZXJ0eS5jYWxsKHRoaXMsIngyIj09PWU/IngiOiJ5MiI9PT1lPyJ5IjplKX0sZS5wcm90b3R5cGUueD1mdW5jdGlvbihuLGkscil7aWYobnVsbD09bilyZXR1cm4gdC5wcm90b3R5cGUueC5jYWxsKHRoaXMpO2lmKG51bGw9PWk/dC5wcm90b3R5cGUueC5jYWxsKHRoaXMsbik6dC5wcm90b3R5cGUueC5jYWxsKHRoaXMsbixpLHIpLG51bGwhPWkpe3ZhciBvPXRoaXMueDIoKSxhPW8mJm8uYWNjZXNzb3I7bnVsbCE9YSYmdGhpcy5fYmluZFByb3BlcnR5KGUuX1gyX0tFWSxhLGksby5wb3N0U2NhbGUpfXJldHVybiBpIGluc3RhbmNlb2YgVW10LkNhdGVnb3J5JiZpLmlubmVyUGFkZGluZygwKS5vdXRlclBhZGRpbmcoMCksdGhpc30sZS5wcm90b3R5cGUueDI9ZnVuY3Rpb24odCxuKXtpZihudWxsPT10KXJldHVybiB0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldChlLl9YMl9LRVkpO3ZhciBpPXRoaXMueCgpO3JldHVybiB0aGlzLl9iaW5kUHJvcGVydHkoZS5fWDJfS0VZLHQsaSYmaS5zY2FsZSxuKSx0aGlzLnJlbmRlcigpLHRoaXN9LGUucHJvdG90eXBlLnk9ZnVuY3Rpb24obixpLHIpe2lmKG51bGw9PW4pcmV0dXJuIHQucHJvdG90eXBlLnkuY2FsbCh0aGlzKTtpZihudWxsPT1pP3QucHJvdG90eXBlLnkuY2FsbCh0aGlzLG4pOnQucHJvdG90eXBlLnkuY2FsbCh0aGlzLG4saSxyKSxudWxsIT1pKXt2YXIgbz10aGlzLnkyKCksYT1vJiZvLmFjY2Vzc29yO251bGwhPWEmJnRoaXMuX2JpbmRQcm9wZXJ0eShlLl9ZMl9LRVksYSxpLG8ucG9zdFNjYWxlKX1yZXR1cm4gaSBpbnN0YW5jZW9mIFVtdC5DYXRlZ29yeSYmaS5pbm5lclBhZGRpbmcoMCkub3V0ZXJQYWRkaW5nKDApLHRoaXN9LGUucHJvdG90eXBlLnkyPWZ1bmN0aW9uKHQsbil7aWYobnVsbD09dClyZXR1cm4gdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQoZS5fWTJfS0VZKTt2YXIgaT10aGlzLnkoKTtyZXR1cm4gdGhpcy5fYmluZFByb3BlcnR5KGUuX1kyX0tFWSx0LGkmJmkuc2NhbGUsbiksdGhpcy5yZW5kZXIoKSx0aGlzfSxlLnByb3RvdHlwZS5lbnRpdGllc0F0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpO3JldHVybiB0aGlzLmVudGl0aWVzKCkuZmlsdGVyKChmdW5jdGlvbihuKXt2YXIgaT1uLmRhdHVtLHI9bi5pbmRleCxvPW4uZGF0YXNldCxhPWUueChpLHIsbykscz1lLnkoaSxyLG8pLGw9ZS53aWR0aChpLHIsbyksYz1lLmhlaWdodChpLHIsbyk7cmV0dXJuIGE8PXQueCYmdC54PD1hK2wmJnM8PXQueSYmdC55PD1zK2N9KSl9LGUucHJvdG90eXBlLl9lbnRpdHlCb3VuZHM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2VudGl0eUJCb3godC5kYXR1bSx0LmluZGV4LHQuZGF0YXNldCx0aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSl9LGUucHJvdG90eXBlLl9lbnRpdHlCQm94PWZ1bmN0aW9uKHQsZSxuLGkpe3JldHVybnt4OmkueCh0LGUsbikseTppLnkodCxlLG4pLHdpZHRoOmkud2lkdGgodCxlLG4pLGhlaWdodDppLmhlaWdodCh0LGUsbil9fSxlLnByb3RvdHlwZS5sYWJlbD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9sYWJlbDoodGhpcy5fbGFiZWw9dCx0aGlzLnJlbmRlcigpLHRoaXMpfSxlLnByb3RvdHlwZS5sYWJlbHNFbmFibGVkPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX2xhYmVsc0VuYWJsZWQ6KHRoaXMuX2xhYmVsc0VuYWJsZWQ9dCx0aGlzLnJlbmRlcigpLHRoaXMpfSxlLnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzPWZ1bmN0aW9uKCl7dmFyIGU9dC5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycy5jYWxsKHRoaXMpO3JldHVybiBudWxsIT10aGlzLngyKCkmJihlLngyPVRndC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngyKCkpKSxudWxsIT10aGlzLnkyKCkmJihlLnkyPVRndC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkyKCkpKSxlfSxlLnByb3RvdHlwZS5fcGl4ZWxQb2ludD1mdW5jdGlvbih0LGUsbil7dmFyIGk9dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCkscj1pLngodCxlLG4pLG89aS55KHQsZSxuKTtyZXR1cm57eDpyK2kud2lkdGgodCxlLG4pLzIseTpvK2kuaGVpZ2h0KHQsZSxuKS8yfX0sZS5wcm90b3R5cGUuX3JlY3RhbmdsZVdpZHRoPWZ1bmN0aW9uKHQpe2lmKHQgaW5zdGFuY2VvZiBVbXQuQ2F0ZWdvcnkpcmV0dXJuIHQucmFuZ2VCYW5kKCk7dmFyIGU9dD09PXRoaXMueCgpLnNjYWxlP3RoaXMueCgpLmFjY2Vzc29yOnRoaXMueSgpLmFjY2Vzc29yLG49aWR0LnNldChTbXQuQXJyYXkuZmxhdHRlbih0aGlzLmRhdGFzZXRzKCkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5kYXRhKCkubWFwKChmdW5jdGlvbihuLGkpe3JldHVybiBlKG4saSx0KS52YWx1ZU9mKCl9KSl9KSkpKS52YWx1ZXMoKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybit0fSkpLGk9U210Lk1hdGgubWluKG4sMCkscj1TbXQuTWF0aC5tYXgobiwwKSxvPXQuc2NhbGUoaSk7cmV0dXJuKHQuc2NhbGUociktbykvTWF0aC5hYnMoci1pKX0sZS5wcm90b3R5cGUuX2dldERhdGFUb0RyYXc9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgU210Lk1hcCxlPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpO3JldHVybiB0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIGk9bi5kYXRhKCkubWFwKChmdW5jdGlvbih0LGkpe3JldHVybiBTbXQuTWF0aC5pc1ZhbGlkTnVtYmVyKGUueCh0LGksbikpJiZTbXQuTWF0aC5pc1ZhbGlkTnVtYmVyKGUueSh0LGksbikpJiZTbXQuTWF0aC5pc1ZhbGlkTnVtYmVyKGUud2lkdGgodCxpLG4pKSYmU210Lk1hdGguaXNWYWxpZE51bWJlcihlLmhlaWdodCh0LGksbikpP3Q6bnVsbH0pKTt0LnNldChuLGkpfSkpLHR9LGUucHJvdG90eXBlLl9hZGRpdGlvbmFsUGFpbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLl9yZW5kZXJBcmVhLnNlbGVjdEFsbCgiLmxhYmVsLWFyZWEiKS5yZW1vdmUoKSx0aGlzLl9sYWJlbHNFbmFibGVkJiZudWxsIT10aGlzLmxhYmVsKCkmJlNtdC5XaW5kb3cuc2V0VGltZW91dCgoZnVuY3Rpb24oKXtyZXR1cm4gZS5fZHJhd0xhYmVscygpfSksdCl9LGUucHJvdG90eXBlLl9kcmF3TGFiZWxzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXRoaXMuX2dldERhdGFUb0RyYXcoKTt0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaCgoZnVuY3Rpb24obixpKXtyZXR1cm4gdC5fZHJhd0xhYmVsKGUsbixpKX0pKX0sZS5wcm90b3R5cGUuX2RyYXdMYWJlbD1mdW5jdGlvbih0LGUsbil7Zm9yKHZhciBpPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLHI9dGhpcy5fcmVuZGVyQXJlYS5hcHBlbmQoImciKS5jbGFzc2VkKCJsYWJlbC1hcmVhIiwhMCksbz1uZXcgYW10LlN2Z0NvbnRleHQoci5ub2RlKCkpLGE9bmV3IGFtdC5DYWNoZU1lYXN1cmVyKG8pLHM9bmV3IGFtdC5Xcml0ZXIoYSxvKSxsPXRoaXMueCgpLnNjYWxlLnJhbmdlKCksYz10aGlzLnkoKS5zY2FsZS5yYW5nZSgpLHU9TWF0aC5taW4uYXBwbHkobnVsbCxsKSxoPU1hdGgubWF4LmFwcGx5KG51bGwsbCksZD1NYXRoLm1pbi5hcHBseShudWxsLGMpLHA9TWF0aC5tYXguYXBwbHkobnVsbCxjKSxmPXQuZ2V0KGUpLG09Zi5sZW5ndGgsZz0wO2c8bTtnKyspe3ZhciBfPWZbZ107aWYobnVsbCE9Xyl7dmFyIHk9IiIrdGhpcy5sYWJlbCgpKF8sZyxlKSx2PWEubWVhc3VyZSh5KSxiPWkueChfLGcsZSkseD1pLnkoXyxnLGUpLHc9aS53aWR0aChfLGcsZSksUz1pLmhlaWdodChfLGcsZSk7aWYodi5oZWlnaHQ8PVMmJnYud2lkdGg8PXcpe3ZhciBNPXttaW46Yis9KHctdi53aWR0aCkvMixtYXg6Yit2LndpZHRofSxFPXttaW46eCs9KFMtdi5oZWlnaHQpLzIsbWF4Ongrdi5oZWlnaHR9O2lmKE0ubWluPHV8fE0ubWF4Pmh8fEUubWluPGR8fEUubWF4PnApY29udGludWU7aWYodGhpcy5fb3ZlcmxheUxhYmVsKE0sRSxnLG4sdCkpY29udGludWU7dmFyIFQ9aS5maWxsKF8sZyxlKSxDPTEuNipTbXQuQ29sb3IuY29udHJhc3QoIndoaXRlIixUKTxTbXQuQ29sb3IuY29udHJhc3QoImJsYWNrIixUKSxBPXIuYXBwZW5kKCJnIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrYisiLCIreCsiKSIpO0EuY2xhc3NlZChDPyJkYXJrLWxhYmVsIjoibGlnaHQtbGFiZWwiLCEwKSxzLndyaXRlKHksdi53aWR0aCx2LmhlaWdodCx7eEFsaWduOiJjZW50ZXIiLHlBbGlnbjoiY2VudGVyIn0sQS5ub2RlKCkpfX19fSxlLnByb3RvdHlwZS5fb3ZlcmxheUxhYmVsPWZ1bmN0aW9uKHQsZSxuLGkscil7Zm9yKHZhciBvPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGE9dGhpcy5kYXRhc2V0cygpLHM9aTtzPGEubGVuZ3RoO3MrKylmb3IodmFyIGw9YVtzXSxjPXIuZ2V0KGwpLHU9Yy5sZW5ndGgsaD1zPT09aT9uKzE6MDtoPHU7aCsrKWlmKFNtdC5ET00uaW50ZXJzZWN0c0JCb3godCxlLHRoaXMuX2VudGl0eUJCb3goY1toXSxoLGwsbykpKXJldHVybiEwO3JldHVybiExfSxlLl9YMl9LRVk9IngyIixlLl9ZMl9LRVk9InkyIixlfSkoVWd0LlhZUGxvdCk7ZS5SZWN0YW5nbGU9bn0pKSwkZ3Q9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBlPXQuY2FsbCh0aGlzKXx8dGhpcztlLl9sYWJlbEZvcm1hdHRlcj1DbXQuaWRlbnRpdHkoKSxlLl9sYWJlbHNFbmFibGVkPSExLGUuYWRkQ2xhc3MoInNjYXR0ZXItcGxvdCIpO3ZhciBuPW5ldyBCZnQuRWFzaW5nO24uc3RhcnREZWxheSg1KSxuLnN0ZXBEdXJhdGlvbigyNTApLG4ubWF4VG90YWxEdXJhdGlvbihUZ3QuUGxvdC5fQU5JTUFUSU9OX01BWF9EVVJBVElPTiksZS5hbmltYXRvcih0X3QuQW5pbWF0b3IuTUFJTixuKSxlLmF0dHIoIm9wYWNpdHkiLC42KSxlLmF0dHIoImZpbGwiLChuZXcgVW10LkNvbG9yKS5yYW5nZSgpWzBdKSxlLnNpemUoNik7dmFyIGk9ZGd0LmNpcmNsZSgpO3JldHVybiBlLnN5bWJvbCgoZnVuY3Rpb24oKXtyZXR1cm4gaX0pKSxlLl9sYWJlbENvbmZpZz1uZXcgU210Lk1hcCxlfXJldHVybiBEZnQuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUuX2J1aWxkTGlnaHR3ZWlnaHRQbG90RW50aXRpZXM9ZnVuY3Rpb24oZSl7dmFyIG49dGhpcztyZXR1cm4gdC5wcm90b3R5cGUuX2J1aWxkTGlnaHR3ZWlnaHRQbG90RW50aXRpZXMuY2FsbCh0aGlzLGUpLm1hcCgoZnVuY3Rpb24odCl7dmFyIGU9VGd0LlBsb3QuX3NjYWxlZEFjY2Vzc29yKG4uc2l6ZSgpKSh0LmRhdHVtLHQuaW5kZXgsdC5kYXRhc2V0KTtyZXR1cm4gdC5kaWFtZXRlcj1lLHR9KSl9LGUucHJvdG90eXBlLl9jcmVhdGVEcmF3ZXI9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gbmV3IFNndC5Qcm94eURyYXdlcigoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEZndC5TeW1ib2xTVkdEcmF3ZXJ9KSwoZnVuY3Rpb24obil7cmV0dXJuIG5ldyBWZ3QuQ2FudmFzRHJhd2VyKG4sRmd0Lm1ha2VTeW1ib2xDYW52YXNEcmF3U3RlcCh0LChmdW5jdGlvbigpe3JldHVybiBUZ3QuUGxvdC5fc2NhbGVkQWNjZXNzb3IoZS5zeW1ib2woKSl9KSwoZnVuY3Rpb24oKXtyZXR1cm4gVGd0LlBsb3QuX3NjYWxlZEFjY2Vzc29yKGUuc2l6ZSgpKX0pKSl9KSl9LGUucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbnVsbD09dD90aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldChlLl9TSVpFX0tFWSk6KHRoaXMuX2JpbmRQcm9wZXJ0eShlLl9TSVpFX0tFWSx0LG4pLHRoaXMucmVuZGVyKCksdGhpcyl9LGUucHJvdG90eXBlLnN5bWJvbD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldChlLl9TWU1CT0xfS0VZKToodGhpcy5fcHJvcGVydHlCaW5kaW5ncy5zZXQoZS5fU1lNQk9MX0tFWSx7YWNjZXNzb3I6dH0pLHRoaXMucmVuZGVyKCksdGhpcyl9LGUucHJvdG90eXBlLl9nZW5lcmF0ZURyYXdTdGVwcz1mdW5jdGlvbigpe3ZhciB0PVtdO2lmKHRoaXMuX2FuaW1hdGVPbk5leHRSZW5kZXIoKSl7dmFyIGU9dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksbj1UZ3QuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5zeW1ib2woKSk7ZS5kPWZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gbih0LGUsaSkoMCkobnVsbCl9LHQucHVzaCh7YXR0clRvUHJvamVjdG9yOmUsYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3IodF90LkFuaW1hdG9yLlJFU0VUKX0pfXJldHVybiB0LnB1c2goe2F0dHJUb1Byb2plY3Rvcjp0aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxhbmltYXRvcjp0aGlzLl9nZXRBbmltYXRvcih0X3QuQW5pbWF0b3IuTUFJTil9KSx0fSxlLnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzPWZ1bmN0aW9uKCl7dmFyIGU9dC5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycy5jYWxsKHRoaXMpLG49VGd0LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSxpPVRndC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSk7cmV0dXJuIGUueD1uLGUueT1pLGUudHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4idHJhbnNsYXRlKCIrbih0LGUscikrIiwiK2kodCxlLHIpKyIpIn0sZS5kPXRoaXMuX2NvbnN0cnVjdFN5bWJvbEdlbmVyYXRvcigpLGV9LGUucHJvdG90eXBlLl9jb25zdHJ1Y3RTeW1ib2xHZW5lcmF0b3I9ZnVuY3Rpb24oKXt2YXIgdD1UZ3QuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5zeW1ib2woKSksZT1UZ3QuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5zaXplKCkpO3JldHVybiBmdW5jdGlvbihuLGkscil7cmV0dXJuIHQobixpLHIpKGUobixpLHIpKShudWxsKX19LGUucHJvdG90eXBlLl9lbnRpdHlCb3VuZHM9ZnVuY3Rpb24odCl7cmV0dXJue3g6dC5wb3NpdGlvbi54LXQuZGlhbWV0ZXIvMix5OnQucG9zaXRpb24ueS10LmRpYW1ldGVyLzIsd2lkdGg6dC5kaWFtZXRlcixoZWlnaHQ6dC5kaWFtZXRlcn19LGUucHJvdG90eXBlLl9lbnRpdHlWaXNpYmxlT25QbG90PWZ1bmN0aW9uKHQsZSl7dmFyIG49e21pbjplLnRvcExlZnQueCxtYXg6ZS5ib3R0b21SaWdodC54fSxpPXttaW46ZS50b3BMZWZ0LnksbWF4OmUuYm90dG9tUmlnaHQueX0scj10aGlzLl9lbnRpdHlCb3VuZHModCk7cmV0dXJuIFNtdC5ET00uaW50ZXJzZWN0c0JCb3gobixpLHIpfSxlLnByb3RvdHlwZS5lbnRpdGllc0F0PWZ1bmN0aW9uKHQpe3ZhciBlPVRndC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksbj1UZ3QuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpLGk9VGd0LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMuc2l6ZSgpKTtyZXR1cm4gdGhpcy5lbnRpdGllcygpLmZpbHRlcigoZnVuY3Rpb24ocil7dmFyIG89ci5kYXR1bSxhPXIuaW5kZXgscz1yLmRhdGFzZXQsbD1lKG8sYSxzKSxjPW4obyxhLHMpLHU9aShvLGEscyk7cmV0dXJuIGwtdS8yPD10LngmJnQueDw9bCt1LzImJmMtdS8yPD10LnkmJnQueTw9Yyt1LzJ9KSl9LGUucHJvdG90eXBlLmxhYmVsc0VuYWJsZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5fbGFiZWxzRW5hYmxlZDoodGhpcy5fbGFiZWxzRW5hYmxlZD10LHRoaXMuX2NsZWFyQXR0clRvUHJvamVjdG9yQ2FjaGUoKSx0aGlzLnJlbmRlcigpLHRoaXMpfSxlLnByb3RvdHlwZS5fY3JlYXRlTm9kZXNGb3JEYXRhc2V0PWZ1bmN0aW9uKG4pe3ZhciBpPXQucHJvdG90eXBlLl9jcmVhdGVOb2Rlc0ZvckRhdGFzZXQuY2FsbCh0aGlzLG4pLHI9dGhpcy5fcmVuZGVyQXJlYS5hcHBlbmQoImciKS5jbGFzc2VkKGUuX0xBQkVMX0FSRUFfQ0xBU1MsITApLG89bmV3IGFtdC5TdmdDb250ZXh0KHIubm9kZSgpKSxhPW5ldyBhbXQuQ2FjaGVNZWFzdXJlcihvKSxzPW5ldyBhbXQuV3JpdGVyKGEsbyk7cmV0dXJuIHRoaXMuX2xhYmVsQ29uZmlnLnNldChuLHtsYWJlbEFyZWE6cixtZWFzdXJlcjphLHdyaXRlcjpzfSksaX0sZS5wcm90b3R5cGUuX3JlbW92ZURhdGFzZXROb2Rlcz1mdW5jdGlvbihlKXt0LnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldE5vZGVzLmNhbGwodGhpcyxlKTt2YXIgbj10aGlzLl9sYWJlbENvbmZpZy5nZXQoZSk7bnVsbCE9biYmKG4ubGFiZWxBcmVhLnJlbW92ZSgpLHRoaXMuX2xhYmVsQ29uZmlnLmRlbGV0ZShlKSl9LGUucHJvdG90eXBlLl9hZGRpdGlvbmFsUGFpbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7cmV0dXJuIGUuX2xhYmVsQ29uZmlnLmdldCh0KS5sYWJlbEFyZWEuc2VsZWN0QWxsKCJnIikucmVtb3ZlKCl9KSksdGhpcy5fbGFiZWxzRW5hYmxlZCYmU210LldpbmRvdy5zZXRUaW1lb3V0KChmdW5jdGlvbigpe3JldHVybiBlLl9kcmF3TGFiZWxzKCl9KSx0KX0sZS5wcm90b3R5cGUuX2RyYXdMYWJlbHM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dGhpcy5fZ2V0RGF0YVRvRHJhdygpLG49dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCk7dGhpcy5kYXRhc2V0cygpLmZvckVhY2goKGZ1bmN0aW9uKGkpe2Zvcih2YXIgcj1lLmdldChpKSxvPXIubGVuZ3RoLGE9MDthPG87YSsrKXt2YXIgcz1yW2FdO251bGwhPXMmJnQuX2RyYXdMYWJlbChzLGEsaSxuKX19KSl9LGUucHJvdG90eXBlLl9kcmF3TGFiZWw9ZnVuY3Rpb24odCxlLG4saSl7aWYobnVsbCE9dC5sYWJlbCl7dmFyIHI9dGhpcy5fbGFiZWxDb25maWcuZ2V0KG4pLG89ci5sYWJlbEFyZWEsYT1yLm1lYXN1cmVyLHM9ci53cml0ZXIsbD17eDppLngodCxlLG4pLHk6aS55KHQsZSxuKX0sYz1UZ3QuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5zaXplKCkpKHQsZSxuKSx1PXRoaXMuX2xhYmVsRm9ybWF0dGVyKHQubGFiZWwsdCxlLG4pLGg9YS5tZWFzdXJlKHUpLGQ9dGhpcy5fY2FsY3VsYXRlTGFiZWxQcm9wZXJ0aWVzKGwsYyxoKSxwPWQuY29udGFpbmVyRGltZW5zaW9ucyxmPWQuYWxpZ25tZW50LG09dGhpcy5fY3JlYXRlTGFiZWxDb250YWluZXIobyxkLmxhYmVsQ29udGFpbmVyT3JpZ2luLGQubGFiZWxPcmlnaW4saCk7cy53cml0ZSh1LHAud2lkdGgscC5oZWlnaHQse3hBbGlnbjpmLngseUFsaWduOmYueX0sbS5ub2RlKCkpfX0sZS5wcm90b3R5cGUuX2NhbGN1bGF0ZUxhYmVsUHJvcGVydGllcz1mdW5jdGlvbih0LG4saSl7cmV0dXJue2NvbnRhaW5lckRpbWVuc2lvbnM6e3dpZHRoOmkud2lkdGgsaGVpZ2h0OmkuaGVpZ2h0fSxsYWJlbENvbnRhaW5lck9yaWdpbjp7eDp0LngtaS53aWR0aC8yLHk6dC55LWkuaGVpZ2h0LzIrKG48aS5oZWlnaHQ/bi8yK2UuX0xBQkVMX01BUkdJTl9GUk9NX0JVQkJMRTowKX0sbGFiZWxPcmlnaW46e3g6dC54LHk6dC55fSxhbGlnbm1lbnQ6e3g6ImNlbnRlciIseToiY2VudGVyIn19fSxlLnByb3RvdHlwZS5fY3JlYXRlTGFiZWxDb250YWluZXI9ZnVuY3Rpb24odCxlLG4saSl7dmFyIHI9dC5hcHBlbmQoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitlLngrIiwgIitlLnkrIikiKTtyZXR1cm4gci5jbGFzc2VkKCJvbi1iYXItbGFiZWwiLCEwKSxyfSxlLl9TSVpFX0tFWT0ic2l6ZSIsZS5fU1lNQk9MX0tFWT0ic3ltYm9sIixlLl9MQUJFTF9BUkVBX0NMQVNTPSJzY2F0dGVyLWxhYmVsLXRleHQtYXJlYSIsZS5fTEFCRUxfTUFSR0lOX0ZST01fQlVCQkxFPTE1LGV9KShVZ3QuWFlQbG90KTtlLlNjYXR0ZXI9bn0pKSxLZ3Q9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBlPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gZS5hZGRDbGFzcygic2VnbWVudC1wbG90IiksZS5hdHRyKCJzdHJva2UiLChuZXcgVW10LkNvbG9yKS5yYW5nZSgpWzBdKSxlLmF0dHIoInN0cm9rZS13aWR0aCIsIjJweCIpLGV9cmV0dXJuIERmdC5fX2V4dGVuZHMoZSx0KSxlLnByb3RvdHlwZS5fY3JlYXRlRHJhd2VyPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBTZ3QuUHJveHlEcmF3ZXIoKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBCZ3QuU2VnbWVudFNWR0RyYXdlcn0pLChmdW5jdGlvbigpe3JldHVybiBtbXQud2FybigiY2FudmFzIHJlbmRlcmVyIGlzIG5vdCBzdXBwb3J0ZWQgb24gU2VnbWVudCBQbG90ISIpLG51bGx9KSl9LGUucHJvdG90eXBlLl9nZW5lcmF0ZURyYXdTdGVwcz1mdW5jdGlvbigpe3JldHVyblt7YXR0clRvUHJvamVjdG9yOnRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGFuaW1hdG9yOm5ldyBCZnQuTnVsbH1dfSxlLnByb3RvdHlwZS5fZmlsdGVyRm9yUHJvcGVydHk9ZnVuY3Rpb24oZSl7cmV0dXJuIHQucHJvdG90eXBlLl9maWx0ZXJGb3JQcm9wZXJ0eS5jYWxsKHRoaXMsIngyIj09PWU/IngiOiJ5MiI9PT1lPyJ5IjplKX0sZS5wcm90b3R5cGUueD1mdW5jdGlvbihuLGkpe2lmKG51bGw9PW4pcmV0dXJuIHQucHJvdG90eXBlLnguY2FsbCh0aGlzKTtpZihudWxsPT1pKXQucHJvdG90eXBlLnguY2FsbCh0aGlzLG4pO2Vsc2V7dC5wcm90b3R5cGUueC5jYWxsKHRoaXMsbixpKTt2YXIgcj10aGlzLngyKCksbz1yJiZyLmFjY2Vzc29yO251bGwhPW8mJnRoaXMuX2JpbmRQcm9wZXJ0eShlLl9YMl9LRVksbyxpKX1yZXR1cm4gdGhpc30sZS5wcm90b3R5cGUueDI9ZnVuY3Rpb24odCl7aWYobnVsbD09dClyZXR1cm4gdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQoZS5fWDJfS0VZKTt2YXIgbj10aGlzLngoKTtyZXR1cm4gdGhpcy5fYmluZFByb3BlcnR5KGUuX1gyX0tFWSx0LG4mJm4uc2NhbGUpLHRoaXMucmVuZGVyKCksdGhpc30sZS5wcm90b3R5cGUueT1mdW5jdGlvbihuLGkpe2lmKG51bGw9PW4pcmV0dXJuIHQucHJvdG90eXBlLnkuY2FsbCh0aGlzKTtpZihudWxsPT1pKXQucHJvdG90eXBlLnkuY2FsbCh0aGlzLG4pO2Vsc2V7dC5wcm90b3R5cGUueS5jYWxsKHRoaXMsbixpKTt2YXIgcj10aGlzLnkyKCksbz1yJiZyLmFjY2Vzc29yO251bGwhPW8mJnRoaXMuX2JpbmRQcm9wZXJ0eShlLl9ZMl9LRVksbyxpKX1yZXR1cm4gdGhpc30sZS5wcm90b3R5cGUueTI9ZnVuY3Rpb24odCl7aWYobnVsbD09dClyZXR1cm4gdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQoZS5fWTJfS0VZKTt2YXIgbj10aGlzLnkoKTtyZXR1cm4gdGhpcy5fYmluZFByb3BlcnR5KGUuX1kyX0tFWSx0LG4mJm4uc2NhbGUpLHRoaXMucmVuZGVyKCksdGhpc30sZS5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycz1mdW5jdGlvbigpe3ZhciBlPXQucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnMuY2FsbCh0aGlzKTtyZXR1cm4gZS54MT1UZ3QuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpLGUueDI9bnVsbD09dGhpcy54MigpP1RndC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSk6VGd0LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueDIoKSksZS55MT1UZ3QuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpLGUueTI9bnVsbD09dGhpcy55MigpP1RndC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSk6VGd0LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueTIoKSksZX0sZS5wcm90b3R5cGUuZW50aXRpZXNBdD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmVudGl0eU5lYXJlc3QodCk7cmV0dXJuIG51bGwhPWU/W2VdOltdfSxlLnByb3RvdHlwZS5lbnRpdGllc0luPWZ1bmN0aW9uKHQsZSl7dmFyIG4saTtyZXR1cm4gbnVsbD09ZT8obj17bWluOnQudG9wTGVmdC54LG1heDp0LmJvdHRvbVJpZ2h0Lnh9LGk9e21pbjp0LnRvcExlZnQueSxtYXg6dC5ib3R0b21SaWdodC55fSk6KG49dCxpPWUpLHRoaXMuX2VudGl0aWVzSW50ZXJzZWN0aW5nKG4saSl9LGUucHJvdG90eXBlLl9lbnRpdGllc0ludGVyc2VjdGluZz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj1bXSxpPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLHI9dGhpcy5lbnRpdGllcygpLG89ci5sZW5ndGgsYT0wO2E8bzthKyspe3ZhciBzPXJbYV07dGhpcy5fbGluZUludGVyc2VjdHNCb3gocyx0LGUsaSkmJm4ucHVzaChzKX1yZXR1cm4gbn0sZS5wcm90b3R5cGUuX2xpbmVJbnRlcnNlY3RzQm94PWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciByPXRoaXMsbz1pLngxKHQuZGF0dW0sdC5pbmRleCx0LmRhdGFzZXQpLGE9aS54Mih0LmRhdHVtLHQuaW5kZXgsdC5kYXRhc2V0KSxzPWkueTEodC5kYXR1bSx0LmluZGV4LHQuZGF0YXNldCksbD1pLnkyKHQuZGF0dW0sdC5pbmRleCx0LmRhdGFzZXQpO2lmKGUubWluPD1vJiZvPD1lLm1heCYmbi5taW48PXMmJnM8PW4ubWF4fHxlLm1pbjw9YSYmYTw9ZS5tYXgmJm4ubWluPD1sJiZsPD1uLm1heClyZXR1cm4hMDt2YXIgYz17eDpvLHk6c30sdT17eDphLHk6bH0saD1be3g6ZS5taW4seTpuLm1pbn0se3g6ZS5taW4seTpuLm1heH0se3g6ZS5tYXgseTpuLm1heH0se3g6ZS5tYXgseTpuLm1pbn1dO3JldHVybiBoLmZpbHRlcigoZnVuY3Rpb24odCxlKXtyZXR1cm4gMCE9PWUmJnIuX2xpbmVJbnRlcnNlY3RzU2VnbWVudChjLHUsdCxoW2UtMV0pJiZyLl9saW5lSW50ZXJzZWN0c1NlZ21lbnQodCxoW2UtMV0sYyx1KX0pKS5sZW5ndGg+MH0sZS5wcm90b3R5cGUuX2xpbmVJbnRlcnNlY3RzU2VnbWVudD1mdW5jdGlvbih0LGUsbixpKXt2YXIgcj1mdW5jdGlvbih0LGUsbil7cmV0dXJuKGUueC10LngpKihuLnktZS55KS0oZS55LXQueSkqKG4ueC1lLngpfTtyZXR1cm4gcih0LGUsbikqcih0LGUsaSk8MH0sZS5fWDJfS0VZPSJ4MiIsZS5fWTJfS0VZPSJ5MiIsZX0pKFVndC5YWVBsb3QpO2UuU2VnbWVudD1ufSkpLFpndD1iZSgoZnVuY3Rpb24odCxlKXsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dmFyIGU9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBlLl9zdGFja2luZ1Jlc3VsdD14Z3QubWVtVGh1bmsoKGZ1bmN0aW9uKCl7cmV0dXJuIGUuZGF0YXNldHMoKX0pLChmdW5jdGlvbigpe3JldHVybiBlLngoKS5hY2Nlc3Nvcn0pLChmdW5jdGlvbigpe3JldHVybiBlLnkoKS5hY2Nlc3Nvcn0pLChmdW5jdGlvbigpe3JldHVybiBlLl9zdGFja2luZ09yZGVyfSksKGZ1bmN0aW9uKHQsZSxuLGkpe3JldHVybiBTbXQuU3RhY2tpbmcuc3RhY2sodCxlLG4saSl9KSksZS5fc3RhY2tlZEV4dGVudD14Z3QubWVtVGh1bmsoZS5fc3RhY2tpbmdSZXN1bHQsKGZ1bmN0aW9uKCl7cmV0dXJuIGUueCgpLmFjY2Vzc29yfSksKGZ1bmN0aW9uKCl7cmV0dXJuIGUuX2ZpbHRlckZvclByb3BlcnR5KCJ5Iil9KSwoZnVuY3Rpb24odCxlLG4pe3JldHVybiBTbXQuU3RhY2tpbmcuc3RhY2tlZEV4dGVudCh0LGUsbil9KSksZS5fYmFzZWxpbmVWYWx1ZT0wLGUuX3N0YWNraW5nT3JkZXI9ImJvdHRvbXVwIixlLmFkZENsYXNzKCJzdGFja2VkLWFyZWEtcGxvdCIpLGUuX2Jhc2VsaW5lVmFsdWVQcm92aWRlcj1mdW5jdGlvbigpe3JldHVybltlLl9iYXNlbGluZVZhbHVlXX0sZS5jcm9wcGVkUmVuZGVyaW5nRW5hYmxlZCghMSksZX1yZXR1cm4gRGZ0Ll9fZXh0ZW5kcyhlLHQpLGUucHJvdG90eXBlLmNyb3BwZWRSZW5kZXJpbmdFbmFibGVkPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP3QucHJvdG90eXBlLmNyb3BwZWRSZW5kZXJpbmdFbmFibGVkLmNhbGwodGhpcyk6ZT8oU210LldpbmRvdy53YXJuKCJXYXJuaW5nOiBTdGFja2VkIEFyZWEgUGxvdCBkb2VzIG5vdCBzdXBwb3J0IGNyb3BwZWQgcmVuZGVyaW5nLiIpLHRoaXMpOnQucHJvdG90eXBlLmNyb3BwZWRSZW5kZXJpbmdFbmFibGVkLmNhbGwodGhpcyxlKX0sZS5wcm90b3R5cGUuX2dldEFuaW1hdG9yPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgQmZ0Lk51bGx9LGUucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe3QucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLHRoaXMuX2Jhc2VsaW5lPXRoaXMuX3JlbmRlckFyZWEuYXBwZW5kKCJsaW5lIikuY2xhc3NlZCgiYmFzZWxpbmUiLCEwKX0sZS5wcm90b3R5cGUueD1mdW5jdGlvbihlLG4pe3JldHVybiBudWxsPT1lP3QucHJvdG90eXBlLnguY2FsbCh0aGlzKToobnVsbD09bj90LnByb3RvdHlwZS54LmNhbGwodGhpcyxlKTp0LnByb3RvdHlwZS54LmNhbGwodGhpcyxlLG4pLHRoaXMuX2NoZWNrU2FtZURvbWFpbigpLHRoaXMpfSxlLnByb3RvdHlwZS55PWZ1bmN0aW9uKGUsbil7cmV0dXJuIG51bGw9PWU/dC5wcm90b3R5cGUueS5jYWxsKHRoaXMpOihudWxsPT1uP3QucHJvdG90eXBlLnkuY2FsbCh0aGlzLGUpOnQucHJvdG90eXBlLnkuY2FsbCh0aGlzLGUsbiksdGhpcy5fY2hlY2tTYW1lRG9tYWluKCksdGhpcyl9LGUucHJvdG90eXBlLnlPZmZzZXQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9zdGFja2luZ1Jlc3VsdCgpO2lmKG51bGwhPW4pe3ZhciBpPW4uZ2V0KHQpO2lmKG51bGwhPWkpe3ZhciByPWkuZ2V0KFN0cmluZyhlKSk7aWYobnVsbCE9cilyZXR1cm4gci5vZmZzZXR9fX0sZS5wcm90b3R5cGUuc3RhY2tpbmdPcmRlcj1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9zdGFja2luZ09yZGVyOih0aGlzLl9zdGFja2luZ09yZGVyPXQsdGhpcy5fb25EYXRhc2V0VXBkYXRlKCksdGhpcyl9LGUucHJvdG90eXBlLmRvd25zYW1wbGluZ0VuYWJsZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWU/dC5wcm90b3R5cGUuZG93bnNhbXBsaW5nRW5hYmxlZC5jYWxsKHRoaXMpOihTbXQuV2luZG93Lndhcm4oIldhcm5pbmc6IFN0YWNrZWQgQXJlYSBQbG90IGRvZXMgbm90IHN1cHBvcnQgZG93bnNhbXBsaW5nIiksdGhpcyl9LGUucHJvdG90eXBlLl9hZGRpdGlvbmFsUGFpbnQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnkoKS5zY2FsZS5zY2FsZSh0aGlzLl9iYXNlbGluZVZhbHVlKSxlPXt4MTowLHkxOnQseDI6dGhpcy53aWR0aCgpLHkyOnR9O3RoaXMuX2dldEFuaW1hdG9yKCJiYXNlbGluZSIpLmFuaW1hdGUodGhpcy5fYmFzZWxpbmUsZSl9LGUucHJvdG90eXBlLl91cGRhdGVZU2NhbGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnkoKSxlPXQmJnQuc2NhbGU7bnVsbCE9ZSYmKGUuYWRkUGFkZGluZ0V4Y2VwdGlvbnNQcm92aWRlcih0aGlzLl9iYXNlbGluZVZhbHVlUHJvdmlkZXIpLGUuYWRkSW5jbHVkZWRWYWx1ZXNQcm92aWRlcih0aGlzLl9iYXNlbGluZVZhbHVlUHJvdmlkZXIpKX0sZS5wcm90b3R5cGUuX29uRGF0YXNldFVwZGF0ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jaGVja1NhbWVEb21haW4oKSx0LnByb3RvdHlwZS5fb25EYXRhc2V0VXBkYXRlLmNhbGwodGhpcyksdGhpc30sZS5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5PWZ1bmN0aW9uKGUpe3JldHVybiJ5Ij09PWU/W3RoaXMuX3N0YWNrZWRFeHRlbnQoKV06dC5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5LmNhbGwodGhpcyxlKX0sZS5wcm90b3R5cGUuX2NoZWNrU2FtZURvbWFpbj1mdW5jdGlvbigpe2lmKHRoaXMuX3Byb2plY3RvcnNSZWFkeSgpKXt2YXIgdD10aGlzLmRhdGFzZXRzKCksbj10aGlzLngoKS5hY2Nlc3NvcixpPXQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gaWR0LnNldCh0LmRhdGEoKS5tYXAoKGZ1bmN0aW9uKGUsaSl7cmV0dXJuIFNtdC5TdGFja2luZy5ub3JtYWxpemVLZXkobihlLGksdCkpfSkpKS52YWx1ZXMoKX0pKSxyPWUuX2RvbWFpbktleXModCxuKTtpLnNvbWUoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lmxlbmd0aCE9PXIubGVuZ3RofSkpJiZTbXQuV2luZG93Lndhcm4oInRoZSBkb21haW5zIGFjcm9zcyB0aGUgZGF0YXNldHMgYXJlIG5vdCB0aGUgc2FtZS4gUGxvdCBtYXkgcHJvZHVjZSB1bmludGVuZGVkIGJlaGF2aW9yLiIpfX0sZS5fZG9tYWluS2V5cz1mdW5jdGlvbih0LGUpe3ZhciBuPWlkdC5zZXQoKTtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbih0KXtmb3IodmFyIGk9dC5kYXRhKCkscj1pLmxlbmd0aCxvPTA7bzxyO28rKyluLmFkZChlKGlbb10sbyx0KSl9KSksbi52YWx1ZXMoKX0sZS5wcm90b3R5cGUuX2Nvb3JkaW5hdGVQcm9qZWN0b3JzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPVRndC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksbj10aGlzLnkoKS5hY2Nlc3NvcixpPXRoaXMueCgpLmFjY2Vzc29yLHI9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBTbXQuU3RhY2tpbmcubm9ybWFsaXplS2V5KGkodCxlLG4pKX0sbz10aGlzLl9zdGFja2luZ1Jlc3VsdCgpO3JldHVybltlLGZ1bmN0aW9uKGUsaSxhKXt2YXIgcz0rbihlLGksYSksbD1vLmdldChhKS5nZXQocihlLGksYSkpLm9mZnNldDtyZXR1cm4gdC55KCkuc2NhbGUuc2NhbGUocytsKX0sZnVuY3Rpb24oZSxuLGkpe3ZhciBhPW8uZ2V0KGkpLmdldChyKGUsbixpKSkub2Zmc2V0O3JldHVybiB0LnkoKS5zY2FsZS5zY2FsZShhKX1dfSxlLnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzPWZ1bmN0aW9uKCl7dmFyIGU9dC5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycy5jYWxsKHRoaXMpLG49dGhpcy5fY29vcmRpbmF0ZVByb2plY3RvcnMoKTtyZXR1cm4gZS5kPXRoaXMuX2NvbnN0cnVjdEFyZWFQcm9qZWN0b3IoblswXSxuWzFdLG5bMl0pLGV9LGUucHJvdG90eXBlLl9waXhlbFBvaW50PWZ1bmN0aW9uKGUsbixpKXt2YXIgcj10LnByb3RvdHlwZS5fcGl4ZWxQb2ludC5jYWxsKHRoaXMsZSxuLGkpLG89dGhpcy54KCkuYWNjZXNzb3IoZSxuLGkpLGE9dGhpcy55KCkuYWNjZXNzb3IoZSxuLGkpLHM9dGhpcy55KCkuc2NhbGUuc2NhbGUoK2ErdGhpcy5fc3RhY2tpbmdSZXN1bHQoKS5nZXQoaSkuZ2V0KFNtdC5TdGFja2luZy5ub3JtYWxpemVLZXkobykpLm9mZnNldCk7cmV0dXJue3g6ci54LHk6c319LGV9KShHZ3QuQXJlYSk7ZS5TdGFja2VkQXJlYT1ufSkpLEpndD1iZSgoZnVuY3Rpb24odCxlKXsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3ZvaWQgMD09PWUmJihlPSJ2ZXJ0aWNhbCIpO3ZhciBuPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiBuLl9leHRyZW1hRm9ybWF0dGVyPUNtdC5pZGVudGl0eSgpLG4uX3N0YWNraW5nUmVzdWx0PXhndC5tZW1UaHVuaygoZnVuY3Rpb24oKXtyZXR1cm4gbi5kYXRhc2V0cygpfSksKGZ1bmN0aW9uKCl7cmV0dXJuIG4ucG9zaXRpb24oKS5hY2Nlc3Nvcn0pLChmdW5jdGlvbigpe3JldHVybiBuLmxlbmd0aCgpLmFjY2Vzc29yfSksKGZ1bmN0aW9uKCl7cmV0dXJuIG4uX3N0YWNraW5nT3JkZXJ9KSwoZnVuY3Rpb24odCxlLG4saSl7cmV0dXJuIFNtdC5TdGFja2luZy5zdGFjayh0LGUsbixpKX0pKSxuLl9zdGFja2VkRXh0ZW50PXhndC5tZW1UaHVuayhuLl9zdGFja2luZ1Jlc3VsdCwoZnVuY3Rpb24oKXtyZXR1cm4gbi5wb3NpdGlvbigpLmFjY2Vzc29yfSksKGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2ZpbHRlckZvclByb3BlcnR5KG4uX2lzVmVydGljYWw/InkiOiJ4Iil9KSwoZnVuY3Rpb24odCxlLG4pe3JldHVybiBTbXQuU3RhY2tpbmcuc3RhY2tlZEV4dGVudCh0LGUsbil9KSksbi5hZGRDbGFzcygic3RhY2tlZC1iYXItcGxvdCIpLG4uX3N0YWNraW5nT3JkZXI9ImJvdHRvbXVwIixufXJldHVybiBEZnQuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUuc3RhY2tpbmdPcmRlcj1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9zdGFja2luZ09yZGVyOih0aGlzLl9zdGFja2luZ09yZGVyPXQsdGhpcy5fb25EYXRhc2V0VXBkYXRlKCksdGhpcyl9LGUucHJvdG90eXBlLmV4dHJlbWFGb3JtYXR0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMuX2V4dHJlbWFGb3JtYXR0ZXI6KHRoaXMuX2V4dHJlbWFGb3JtYXR0ZXI9dCx0aGlzLnJlbmRlcigpLHRoaXMpfSxlLnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXt0LnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl9sYWJlbEFyZWE9dGhpcy5fcmVuZGVyQXJlYS5hcHBlbmQoImciKS5jbGFzc2VkKFdndC5CYXIuX0xBQkVMX0FSRUFfQ0xBU1MsITApO3ZhciBlPW5ldyBhbXQuU3ZnQ29udGV4dCh0aGlzLl9sYWJlbEFyZWEubm9kZSgpKTt0aGlzLl9tZWFzdXJlcj1uZXcgYW10LkNhY2hlTWVhc3VyZXIoZSksdGhpcy5fd3JpdGVyPW5ldyBhbXQuV3JpdGVyKHRoaXMuX21lYXN1cmVyLGUpfSxlLnByb3RvdHlwZS5fZHJhd0xhYmVscz1mdW5jdGlvbigpe3ZhciBuPXRoaXM7dC5wcm90b3R5cGUuX2RyYXdMYWJlbHMuY2FsbCh0aGlzKSx0aGlzLl9sYWJlbEFyZWEuc2VsZWN0QWxsKCJnIikucmVtb3ZlKCk7dmFyIGk9K3RoaXMuYmFzZWxpbmVWYWx1ZSgpLHI9dGhpcy5wb3NpdGlvbigpLnNjYWxlLG89dGhpcy5sZW5ndGgoKS5zY2FsZSxhPVNtdC5TdGFja2luZy5zdGFja2VkRXh0ZW50cyh0aGlzLl9zdGFja2luZ1Jlc3VsdCgpKSxzPWEubWluaW11bUV4dGVudHMsbD1bXSxjPWZ1bmN0aW9uKHQsZSl7dmFyIGE9bi5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3IoKSxzPW4ud2lkdGgoKSxjPW4uaGVpZ2h0KCk7dC5mb3JFYWNoKChmdW5jdGlvbih0KXtpZih0LmV4dGVudCE9PWkpe3ZhciB1PW4uZXh0cmVtYUZvcm1hdHRlcigpKHQuZXh0ZW50KSxoPW4uX21lYXN1cmVyLm1lYXN1cmUodSksZD10LnN0YWNrZWREYXR1bSxwPWQub3JpZ2luYWxEYXR1bSxmPWQub3JpZ2luYWxJbmRleCxtPWQub3JpZ2luYWxEYXRhc2V0O2lmKCFuLl9pc0RhdHVtT25TY3JlZW4oYSxzLGMscCxmLG0pKXJldHVybjt2YXIgZz1UZ3QuUGxvdC5fc2NhbGVkQWNjZXNzb3Iobi5hdHRyKFdndC5CYXIuX0JBUl9USElDS05FU1NfS0VZKSkocCxmLG0pLF89by5zY2FsZSh0LmV4dGVudCkseT1uLl9nZXRQb3NpdGlvbkF0dHIoci5zY2FsZSh0LmF4aXNWYWx1ZSksZykrZy8yLHY9ZShuLl9pc1ZlcnRpY2FsP3t4OnkseTpffTp7eDpfLHk6eX0saCxnKSxiPShmdW5jdGlvbih0LGUsaSl7dmFyIHI9ZS50b3BMZWZ0LG89ci54LGE9ci55LHM9ZS5ib3R0b21SaWdodC54LWUudG9wTGVmdC54LGw9ZS5ib3R0b21SaWdodC55LWUudG9wTGVmdC55LGM9bi5faXNWZXJ0aWNhbD9zPmk6bD5pO2lmKCFjKXt2YXIgdT1uLl9sYWJlbEFyZWEuYXBwZW5kKCJnIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrbysiLCAiK2ErIikiKTt1LmNsYXNzZWQoInN0YWNrZWQtYmFyLWxhYmVsIiwhMCksbi5fd3JpdGVyLndyaXRlKHQscyxsLHt4QWxpZ246ImNlbnRlciIseUFsaWduOiJjZW50ZXIifSx1Lm5vZGUoKSl9cmV0dXJuIGN9KSh1LHt0b3BMZWZ0OnYsYm90dG9tUmlnaHQ6e3g6di54K2gud2lkdGgseTp2LnkraC5oZWlnaHR9fSxnKTtsLnB1c2goYil9fSkpfTtjKGEubWF4aW11bUV4dGVudHMsKGZ1bmN0aW9uKHQsaSxyKXt2YXIgbz1uLl9pc1ZlcnRpY2FsP2kud2lkdGg6aS5oZWlnaHQ7cmV0dXJue3g6bi5faXNWZXJ0aWNhbD90Lngtby8yOnQueCtlLl9FWFRSRU1BX0xBQkVMX01BUkdJTl9GUk9NX0JBUix5Om4uX2lzVmVydGljYWw/dC55LShuLl9pc1ZlcnRpY2FsP2kuaGVpZ2h0Omkud2lkdGgpOnQueS1vLzJ9fSkpLGMocywoZnVuY3Rpb24odCxpLHIpe3ZhciBvPW4uX2lzVmVydGljYWw/aS53aWR0aDppLmhlaWdodDtyZXR1cm57eDpuLl9pc1ZlcnRpY2FsP3QueC1vLzI6dC54LShuLl9pc1ZlcnRpY2FsP2kuaGVpZ2h0Omkud2lkdGgpLHk6bi5faXNWZXJ0aWNhbD90LnkrZS5fRVhUUkVNQV9MQUJFTF9NQVJHSU5fRlJPTV9CQVI6dC55LW8vMn19KSksbC5zb21lKChmdW5jdGlvbih0KXtyZXR1cm4gdH0pKSYmdGhpcy5fbGFiZWxBcmVhLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpfSxlLnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3I9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLG49dC5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yLmNhbGwodGhpcyksaT10aGlzLl9pc1ZlcnRpY2FsPyJ5IjoieCIscj10aGlzLmxlbmd0aCgpLnNjYWxlLG89dGhpcy5sZW5ndGgoKS5hY2Nlc3NvcixhPXRoaXMucG9zaXRpb24oKS5hY2Nlc3NvcixzPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gU210LlN0YWNraW5nLm5vcm1hbGl6ZUtleShhKHQsZSxuKSl9LGw9dGhpcy5fc3RhY2tpbmdSZXN1bHQoKSxjPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gci5zY2FsZShsLmdldChuKS5nZXQocyh0LGUsbikpLm9mZnNldCl9LHU9ZnVuY3Rpb24odCxlLG4pe3JldHVybiByLnNjYWxlKCtvKHQsZSxuKStsLmdldChuKS5nZXQocyh0LGUsbikpLm9mZnNldCl9LGg9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBNYXRoLmFicyh1KHQsZSxuKS1jKHQsZSxuKSl9O25bdGhpcy5faXNWZXJ0aWNhbD8iaGVpZ2h0Ijoid2lkdGgiXT1oO3ZhciBkPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4rbyh0LGUsbik8MD9jKHQsZSxuKTp1KHQsZSxuKX07cmV0dXJuIG5baV09ZnVuY3Rpb24odCxuLGkpe3JldHVybiBlLl9pc1ZlcnRpY2FsP2QodCxuLGkpOmQodCxuLGkpLWgodCxuLGkpfSxufSxlLnByb3RvdHlwZS5nZXRFeHRlbnRzRm9yUHJvcGVydHk9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT0odGhpcy5faXNWZXJ0aWNhbD8ieSI6IngiKT9bdGhpcy5fc3RhY2tlZEV4dGVudCgpXTp0LnByb3RvdHlwZS5nZXRFeHRlbnRzRm9yUHJvcGVydHkuY2FsbCh0aGlzLGUpfSxlLnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGU9ZnVuY3Rpb24oKXt0LnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGUuY2FsbCh0aGlzKSx0aGlzLl9tZWFzdXJlci5yZXNldCgpfSxlLl9FWFRSRU1BX0xBQkVMX01BUkdJTl9GUk9NX0JBUj01LGV9KShXZ3QuQmFyKTtlLlN0YWNrZWRCYXI9bn0pKSxRZ3Q9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBlPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gZS5fY29ubmVjdG9yc0VuYWJsZWQ9ITEsZS5hZGRDbGFzcygid2F0ZXJmYWxsLXBsb3QiKSxlfXJldHVybiBEZnQuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUuY29ubmVjdG9yc0VuYWJsZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5fY29ubmVjdG9yc0VuYWJsZWQ6KHRoaXMuX2Nvbm5lY3RvcnNFbmFibGVkPXQsdGhpcyl9LGUucHJvdG90eXBlLnRvdGFsPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KGUuX1RPVEFMX0tFWSk6KHRoaXMuX2JpbmRQcm9wZXJ0eShlLl9UT1RBTF9LRVksdCxudWxsKSx0aGlzKX0sZS5wcm90b3R5cGUuX2FkZGl0aW9uYWxQYWludD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuX2Nvbm5lY3RvckFyZWEuc2VsZWN0QWxsKCJsaW5lIikucmVtb3ZlKCksdGhpcy5fY29ubmVjdG9yc0VuYWJsZWQmJlNtdC5XaW5kb3cuc2V0VGltZW91dCgoZnVuY3Rpb24oKXtyZXR1cm4gZS5fZHJhd0Nvbm5lY3RvcnMoKX0pLHQpfSxlLnByb3RvdHlwZS5fY3JlYXRlTm9kZXNGb3JEYXRhc2V0PWZ1bmN0aW9uKG4pe3ZhciBpPXQucHJvdG90eXBlLl9jcmVhdGVOb2Rlc0ZvckRhdGFzZXQuY2FsbCh0aGlzLG4pO3JldHVybiB0aGlzLl9jb25uZWN0b3JBcmVhPXRoaXMuX3JlbmRlckFyZWEuYXBwZW5kKCJnIikuY2xhc3NlZChlLl9DT05ORUNUT1JfQVJFQV9DTEFTUywhMCksaX0sZS5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5PWZ1bmN0aW9uKGUpe3JldHVybiJ5Ij09PWU/W3RoaXMuX2V4dGVudF06dC5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5LmNhbGwodGhpcyxlKX0sZS5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yPWZ1bmN0aW9uKCl7dmFyIG49dGhpcyxpPXQucHJvdG90eXBlLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3Rvci5jYWxsKHRoaXMpLHI9dGhpcy55KCkuc2NhbGUsbz1UZ3QuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy50b3RhbCgpKTtyZXR1cm4gbnVsbD09dGhpcy5hdHRyKCJ5IikmJihpLnk9ZnVuY3Rpb24odCxlLGkpe3ZhciBhPW4ueSgpLmFjY2Vzc29yKHQsZSxpKTtpZihvKHQsZSxpKSlyZXR1cm4gTWF0aC5taW4oci5zY2FsZShhKSxyLnNjYWxlKDApKTt2YXIgcz1uLl9zdWJ0b3RhbHNbZV07aWYoMD09PWUpcmV0dXJuIHIuc2NhbGUoYTwwP3MtYTpzKTt2YXIgbD1uLl9zdWJ0b3RhbHNbZS0xXTtyZXR1cm4gci5zY2FsZShzPmw/czpsKX0pLG51bGw9PXRoaXMuYXR0cigiaGVpZ2h0IikmJihpLmhlaWdodD1mdW5jdGlvbih0LGUsaSl7dmFyIGE9byh0LGUsaSkscz1uLnkoKS5hY2Nlc3Nvcih0LGUsaSk7aWYoYSlyZXR1cm4gTWF0aC5hYnMoci5zY2FsZShzKS1yLnNjYWxlKDApKTt2YXIgbD1uLl9zdWJ0b3RhbHNbZV07aWYoMD09PWUpcmV0dXJuIE1hdGguYWJzKHIuc2NhbGUobCktci5zY2FsZShsLXMpKTt2YXIgYz1uLl9zdWJ0b3RhbHNbZS0xXTtyZXR1cm4gTWF0aC5hYnMoci5zY2FsZShsKS1yLnNjYWxlKGMpKX0pLGkuY2xhc3M9ZnVuY3Rpb24odCxpLHIpe3ZhciBhPSIiO3JldHVybiBudWxsIT1uLmF0dHIoImNsYXNzIikmJihhPW4uYXR0cigiY2xhc3MiKS5hY2Nlc3Nvcih0LGkscikrIiAiKSxvKHQsaSxyKT9hK2UuX0JBUl9UT1RBTF9DTEFTUzphKyhuLnkoKS5hY2Nlc3Nvcih0LGkscik+MD9lLl9CQVJfR1JPV1RIX0NMQVNTOmUuX0JBUl9ERUNMSU5FX0NMQVNTKX0saX0sZS5wcm90b3R5cGUuX29uRGF0YXNldFVwZGF0ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl91cGRhdGVTdWJ0b3RhbHMoKSx0LnByb3RvdHlwZS5fb25EYXRhc2V0VXBkYXRlLmNhbGwodGhpcyksdGhpc30sZS5wcm90b3R5cGUuX2NhbGN1bGF0ZVN1YnRvdGFsc0FuZEV4dGVudD1mdW5jdGlvbih0KXtmb3IodmFyIGU9TnVtYmVyLk1BWF9WQUxVRSxuPU51bWJlci5NSU5fVkFMVUUsaT0wLHI9ITEsbz10LmRhdGEoKSxhPW8ubGVuZ3RoLHM9MDtzPGE7cysrKXt2YXIgbD1vW3NdLGM9dGhpcy55KCkuYWNjZXNzb3IobCxzLHQpLHU9dGhpcy50b3RhbCgpLmFjY2Vzc29yKGwscyx0KTtpZih1JiYwIT09c3x8KGkrPWMpLHRoaXMuX3N1YnRvdGFscy5wdXNoKGkpLGk8ZSYmKGU9aSksaT5uJiYobj1pKSx1JiYoYzxlJiYoZT1jKSxjPm4mJihuPWMpKSwhciYmdSl7Zm9yKHZhciBoPWMtaSxkPTA7ZDx0aGlzLl9zdWJ0b3RhbHMubGVuZ3RoO2QrKyl0aGlzLl9zdWJ0b3RhbHNbZF0rPWg7cj0hMCxpKz1oLGUrPWgsbis9aH19dGhpcy5fZXh0ZW50PVtlLG5dfSxlLnByb3RvdHlwZS5fZHJhd0Nvbm5lY3RvcnM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksbj10aGlzLmRhdGFzZXRzKClbMF0saT0xO2k8bi5kYXRhKCkubGVuZ3RoO2krKyl7dmFyIHI9aS0xLG89bi5kYXRhKClbaV0sYT1uLmRhdGEoKVtyXSxzPXQueChhLHIsbiksbD10LngobyxpLG4pK3Qud2lkdGgobyxpLG4pLGM9dC55KG8saSxuKTsodGhpcy5fc3VidG90YWxzW2ldPjAmJnRoaXMuX3N1YnRvdGFsc1tpXT50aGlzLl9zdWJ0b3RhbHNbcl18fHRoaXMuX3N1YnRvdGFsc1tpXTwwJiZ0aGlzLl9zdWJ0b3RhbHNbaV0+PXRoaXMuX3N1YnRvdGFsc1tyXSkmJihjPXQueShvLGksbikrdC5oZWlnaHQobyxpLG4pKSx0aGlzLl9jb25uZWN0b3JBcmVhLmFwcGVuZCgibGluZSIpLmNsYXNzZWQoZS5fQ09OTkVDVE9SX0NMQVNTLCEwKS5hdHRyKCJ4MSIscykuYXR0cigieDIiLGwpLmF0dHIoInkxIixjKS5hdHRyKCJ5MiIsYyl9fSxlLnByb3RvdHlwZS5fdXBkYXRlU3VidG90YWxzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5kYXRhc2V0cygpO2lmKHQubGVuZ3RoPjApe3ZhciBlPXRbdC5sZW5ndGgtMV07dGhpcy5fc3VidG90YWxzPW5ldyBBcnJheSx0aGlzLl9jYWxjdWxhdGVTdWJ0b3RhbHNBbmRFeHRlbnQoZSl9fSxlLl9CQVJfREVDTElORV9DTEFTUz0id2F0ZXJmYWxsLWRlY2xpbmUiLGUuX0JBUl9HUk9XVEhfQ0xBU1M9IndhdGVyZmFsbC1ncm93dGgiLGUuX0JBUl9UT1RBTF9DTEFTUz0id2F0ZXJmYWxsLXRvdGFsIixlLl9DT05ORUNUT1JfQ0xBU1M9ImNvbm5lY3RvciIsZS5fQ09OTkVDVE9SX0FSRUFfQ0xBU1M9ImNvbm5lY3Rvci1hcmVhIixlLl9UT1RBTF9LRVk9InRvdGFsIixlfSkoV2d0LkJhcik7ZS5XYXRlcmZhbGw9bn0pKSx0X3Q9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxEZnQuX19leHBvcnRTdGFyKEdndCxlKSxEZnQuX19leHBvcnRTdGFyKFdndCxlKSxEZnQuX19leHBvcnRTdGFyKGZndCxlKSxEZnQuX19leHBvcnRTdGFyKHFndCxlKSxEZnQuX19leHBvcnRTdGFyKGpndCxlKSxEZnQuX19leHBvcnRTdGFyKFlndCxlKSxEZnQuX19leHBvcnRTdGFyKFhndCxlKSxEZnQuX19leHBvcnRTdGFyKCRndCxlKSxEZnQuX19leHBvcnRTdGFyKEtndCxlKSxEZnQuX19leHBvcnRTdGFyKFpndCxlKSxEZnQuX19leHBvcnRTdGFyKEpndCxlKSxEZnQuX19leHBvcnRTdGFyKFFndCxlKX0pKSxlX3Q9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLnZlcnNpb249IjMuOS4wIn0pKSxuX3Q9YmUoKGZ1bmN0aW9uKHQsZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuQW5pbWF0b3JzPUJmdCxlLkF4ZXM9R210LGUuQ29tcG9uZW50cz1OZ3QsZS5Db25maWdzPWZtdCxlLkZvcm1hdHRlcnM9Q210LGUuUmVuZGVyQ29udHJvbGxlcj1FbXQsZS5SZW5kZXJQb2xpY2llcz1NbXQsZS5TeW1ib2xGYWN0b3JpZXM9ZGd0LGUuRGlzcGF0Y2hlcnM9JG10LGUuRHJhd2Vycz1WZ3QsZS5JbnRlcmFjdGlvbnM9bmd0LGUuUGxvdHM9dF90LGUuU2NhbGVzPVVtdCxlLlV0aWxzPVNtdCxEZnQuX19leHBvcnRTdGFyKEFtdCxlKSxlLlRpbWVJbnRlcnZhbD1qbXQuVGltZUludGVydmFsLERmdC5fX2V4cG9ydFN0YXIoVG10LGUpLERmdC5fX2V4cG9ydFN0YXIobGd0LGUpLERmdC5fX2V4cG9ydFN0YXIoZ2d0LGUpLGUudmVyc2lvbj1lX3QudmVyc2lvbixEZnQuX19leHBvcnRTdGFyKFdtdCxlKSxEZnQuX19leHBvcnRTdGFyKFNndCxlKSxEZnQuX19leHBvcnRTdGFyKEttdCxlKSxEZnQuX19leHBvcnRTdGFyKFFtdCxlKSxEZnQuX19leHBvcnRTdGFyKFVndCxlKSxEZnQuX19leHBvcnRTdGFyKFRndCxlKSxEZnQuX19leHBvcnRTdGFyKERtdCxlKSxEZnQuX19leHBvcnRTdGFyKEltdCxlKX0pKTtjb25zdCBpX3Q9W3tjaGFyYWN0ZXI6IuKXvCIsbWV0aG9kOm5fdC5TeW1ib2xGYWN0b3JpZXMuc3F1YXJlfSx7Y2hhcmFjdGVyOiLil4YiLG1ldGhvZDpuX3QuU3ltYm9sRmFjdG9yaWVzLmRpYW1vbmR9LHtjaGFyYWN0ZXI6IuKWsiIsbWV0aG9kOm5fdC5TeW1ib2xGYWN0b3JpZXMudHJpYW5nbGV9LHtjaGFyYWN0ZXI6IuKYhSIsbWV0aG9kOm5fdC5TeW1ib2xGYWN0b3JpZXMuc3Rhcn0se2NoYXJhY3Rlcjoi4pyaIixtZXRob2Q6bl90LlN5bWJvbEZhY3Rvcmllcy5jcm9zc31dO3ZhciByX3Q7ZnVuY3Rpb24gb190KHQpe3JldHVybiBlPT57bGV0IG4saT1NYXRoLmFicyhlKTtyZXR1cm4gaTwxZS0xNSYmKGk9MCksbj1meShpPj0xZTR8fGk+MCYmaTwuMDE/Ii4iK3QrIn5lIjoiLiIrdCsifmciKSxuKGUpfX0hKGZ1bmN0aW9uKHQpe3QuU1RFUD0ic3RlcCIsdC5SRUxBVElWRT0icmVsYXRpdmUiLHQuV0FMTF9USU1FPSJ3YWxsX3RpbWUifSkocl90fHwocl90PXt9KSk7Y29uc3QgYV90PWZ5KCIuNH5zIik7ZnVuY3Rpb24gc190KCl7bGV0IHQ9bmV3IG5fdC5TY2FsZXMuTGluZWFyO3QudGlja0dlbmVyYXRvcihuX3QuU2NhbGVzLlRpY2tHZW5lcmF0b3JzLmludGVnZXJUaWNrR2VuZXJhdG9yKCkpO2xldCBlPW5ldyBuX3QuQXhlcy5OdW1lcmljKHQsImJvdHRvbSIpO3JldHVybiBlLmZvcm1hdHRlcihhX3QpLHtzY2FsZTp0LGF4aXM6ZSxhY2Nlc3Nvcjp0PT50LnN0ZXB9fWxldCBsX3Q9bl90LkZvcm1hdHRlcnMudGltZSgiJWEgJWIgJWUsICVIOiVNOiVTIiksY190PSh0LGUsbik9PntpZihudWxsIT10LnJlbGF0aXZlKXJldHVybiB0LnJlbGF0aXZlO2xldCBpPW4uZGF0YSgpO3JldHVybigrdC53YWxsX3RpbWUtKGkubGVuZ3RoPjA/K2lbMF0ud2FsbF90aW1lOjApKS8zNmU1fSx1X3Q9dD0+e2xldCBlPSIiLG49TWF0aC5mbG9vcih0LzI0KTt0LT0yNCpuLG4mJihlKz1uKyJkICIpO2xldCBpPU1hdGguZmxvb3IodCk7dC09aSx0Kj02MCwoaXx8bikmJihlKz1pKyJoICIpO2xldCByPU1hdGguZmxvb3IodCk7cmV0dXJuIHQtPXIsdCo9NjAsKHJ8fGl8fG4pJiYoZSs9cisibSAiKSxlK01hdGguZmxvb3IodCkrInMifTtmdW5jdGlvbiBoX3QodCl7c3dpdGNoKHQpe2Nhc2Ugcl90LlNURVA6cmV0dXJuIHNfdCgpO2Nhc2Ugcl90LldBTExfVElNRTpyZXR1cm4oZnVuY3Rpb24gZSgpe2xldCB0PW5ldyBuX3QuU2NhbGVzLlRpbWU7cmV0dXJue3NjYWxlOnQsYXhpczpuZXcgbl90LkF4ZXMuVGltZSh0LCJib3R0b20iKSxhY2Nlc3Nvcjp0PT50LndhbGxfdGltZX19KSgpO2Nhc2Ugcl90LlJFTEFUSVZFOnJldHVybihmdW5jdGlvbiBuKCl7bGV0IHQ9bmV3IG5fdC5TY2FsZXMuTGluZWFyO3JldHVybntzY2FsZTp0LGF4aXM6bmV3IG5fdC5BeGVzLk51bWVyaWModCwiYm90dG9tIiksYWNjZXNzb3I6Y190fX0pKCk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgeFR5cGU6ICIrdCl9fXZhciBkX3Q7ZnVuY3Rpb24gcF90KHQpe3JldHVybiBjbGFzcyBleHRlbmRzIHR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMubG9hZEtleT0iIix0aGlzLmRhdGFUb0xvYWQ9W10sdGhpcy5nZXREYXRhTG9hZE5hbWU9dD0+U3RyaW5nKHQpLHRoaXMuZGF0YUxvYWRpbmc9ITEsdGhpcy5kYXRhTG9hZGVkQXRMZWFzdE9uY2U9ITEsdGhpcy5faXNDb25uZWN0ZWQ9ITEsdGhpcy5fZGF0YUxvYWRTdGF0ZT1uZXcgTWFwLHRoaXMuX2NhbmNlbGxlcj1uZXcgTk8sdGhpcy5fbG9hZERhdGFBc3luYz1udWxsLHRoaXMuX2xvYWREYXRhPXdlLnRocm90dGxlKHRoaXMuX2xvYWREYXRhSW1wbCwxMDAse2xlYWRpbmc6ITAsdHJhaWxpbmc6ITB9KX1jb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5faXNDb25uZWN0ZWQ9ITB9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuX2lzQ29ubmVjdGVkPSExfXN0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybnthY3RpdmU6e3R5cGU6Qm9vbGVhbixvYnNlcnZlcjoiX2xvYWREYXRhSWZBY3RpdmUifSxfaXNDb25uZWN0ZWQ6e3R5cGU6Qm9vbGVhbn0sbG9hZEtleTp7dHlwZTpTdHJpbmd9LGRhdGFUb0xvYWQ6e3R5cGU6QXJyYXl9LGdldERhdGFMb2FkTmFtZTp7dHlwZTpPYmplY3R9LGxvYWREYXRhQ2FsbGJhY2s6e3R5cGU6T2JqZWN0fSxyZXF1ZXN0RGF0YTp7dHlwZTpPYmplY3R9fX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX2RhdGFUb0xvYWRDaGFuZ2VkKF9pc0Nvbm5lY3RlZCwgZGF0YVRvTG9hZC4qKSJdfW9uTG9hZEZpbmlzaCgpe31yZWxvYWQoKXt0aGlzLl9kYXRhTG9hZFN0YXRlLmNsZWFyKCksdGhpcy5fbG9hZERhdGEoKX1yZXNldCgpe251bGwhPXRoaXMuX2xvYWREYXRhQXN5bmMmJihjbGVhclRpbWVvdXQodGhpcy5fbG9hZERhdGFBc3luYyksdGhpcy5fbG9hZERhdGFBc3luYz1udWxsKSx0aGlzLl9jYW5jZWxsZXImJnRoaXMuX2NhbmNlbGxlci5jYW5jZWxBbGwoKSx0aGlzLl9kYXRhTG9hZFN0YXRlJiZ0aGlzLl9kYXRhTG9hZFN0YXRlLmNsZWFyKCksdGhpcy5faXNDb25uZWN0ZWQmJnRoaXMuX2xvYWREYXRhKCl9X2RhdGFUb0xvYWRDaGFuZ2VkKCl7dGhpcy5faXNDb25uZWN0ZWQmJnRoaXMuX2xvYWREYXRhKCl9ZGV0YWNoZWQoKXtudWxsIT10aGlzLl9sb2FkRGF0YUFzeW5jJiYoY2xlYXJUaW1lb3V0KHRoaXMuX2xvYWREYXRhQXN5bmMpLHRoaXMuX2xvYWREYXRhQXN5bmM9bnVsbCl9X2xvYWREYXRhSWZBY3RpdmUoKXt0aGlzLmFjdGl2ZSYmdGhpcy5fbG9hZERhdGEoKX1fbG9hZERhdGFJbXBsKCl7dGhpcy5hY3RpdmUmJihudWxsIT09dGhpcy5fbG9hZERhdGFBc3luYyYmY2xlYXJUaW1lb3V0KHRoaXMuX2xvYWREYXRhQXN5bmMpLHRoaXMuX2xvYWREYXRhQXN5bmM9c2V0VGltZW91dCh0aGlzLl9jYW5jZWxsZXIuY2FuY2VsbGFibGUoKHQ9PntpZih0LmNhbmNlbGxlZClyZXR1cm47dGhpcy5kYXRhTG9hZGluZz0hMDtjb25zdCBlPXRoaXMuZGF0YVRvTG9hZC5maWx0ZXIoKHQ9Pntjb25zdCBlPXRoaXMuZ2V0RGF0YUxvYWROYW1lKHQpO3JldHVybiF0aGlzLl9kYXRhTG9hZFN0YXRlLmhhcyhlKX0pKTtmb3IoY29uc3QgdCBvZiBlKXtjb25zdCBlPXRoaXMuZ2V0RGF0YUxvYWROYW1lKHQpO3RoaXMuX2RhdGFMb2FkU3RhdGUuc2V0KGUsZF90LkxPQURJTkcpfWNvbnN0IG49dGhpcy5fY2FuY2VsbGVyLmNhbmNlbGxhYmxlKCh0PT57aWYodC5jYW5jZWxsZWQpcmV0dXJuO2NvbnN0e2l0ZW06ZSxkYXRhOm59PXQudmFsdWUsaT10aGlzLmdldERhdGFMb2FkTmFtZShlKTt0aGlzLl9kYXRhTG9hZFN0YXRlLnNldChpLGRfdC5MT0FERUQpLHRoaXMubG9hZERhdGFDYWxsYmFjayh0aGlzLGUsbil9KSksaT10aGlzLl9jYW5jZWxsZXIuY2FuY2VsbGFibGUoKHQ9PntpZighdC5jYW5jZWxsZWQpe2NvbnN0IHQ9bmV3IFNldChlLm1hcCgodD0+dGhpcy5nZXREYXRhTG9hZE5hbWUodCkpKSk7dGhpcy5kYXRhVG9Mb2FkLnNvbWUoKGU9PnQuaGFzKHRoaXMuZ2V0RGF0YUxvYWROYW1lKGUpKSkpJiZ0aGlzLm9uTG9hZEZpbmlzaCgpLHRoaXMuX2xvYWREYXRhQXN5bmM9bnVsbCx0aGlzLmRhdGFMb2FkZWRBdExlYXN0T25jZT0hMH1BcnJheS5mcm9tKHRoaXMuX2RhdGFMb2FkU3RhdGUudmFsdWVzKCkpLmluY2x1ZGVzKGRfdC5MT0FESU5HKXx8KHRoaXMuZGF0YUxvYWRpbmc9ITEpfSkpO3RoaXMucmVxdWVzdERhdGEoZSxuLCgoKT0+aSh2b2lkIDApKSl9KSkpKX19fSEoZnVuY3Rpb24odCl7dFt0LkxPQURJTkc9MF09IkxPQURJTkciLHRbdC5MT0FERUQ9MV09IkxPQURFRCJ9KShkX3R8fChkX3Q9e30pKSx0bCh7bW9kdWxlTmFtZToicGxvdHRhYmxlLXN0eWxlIixzdHlsZUNvbnRlbnQ6IlxuICAgIFxuLnBsb3R0YWJsZS1jb2xvcnMtMCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM1Mjc5Yzc7IC8qIElORElHTyAqL1xufVxuXG4ucGxvdHRhYmxlLWNvbG9ycy0xIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZkMzczZTsgLyogQ09SQUxfUkVEICovXG59XG5cbi5wbG90dGFibGUtY29sb3JzLTIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjNjMjYxOyAvKiBGRVJOICovXG59XG5cbi5wbG90dGFibGUtY29sb3JzLTMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmFkNDE5OyAvKiBCUklHSFRfU1VOICovXG59XG5cbi5wbG90dGFibGUtY29sb3JzLTQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMmMyYjZmOyAvKiBKQUNBUlRBICovXG59XG5cbi5wbG90dGFibGUtY29sb3JzLTUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY3OTM5OyAvKiBCVVJOSU5HX09SQU5HRSAqL1xufVxuXG4ucGxvdHRhYmxlLWNvbG9ycy02IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RiMmU2NTsgLyogQ0VSSVNFX1JFRCAqL1xufVxuXG4ucGxvdHRhYmxlLWNvbG9ycy03IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzk5Y2U1MDsgLyogQ09OSUZFUiAqL1xufVxuXG4ucGxvdHRhYmxlLWNvbG9ycy04IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzk2MjU2NTsgLyogUk9ZQUxfSEVBVEggKi9cbn1cblxuLnBsb3R0YWJsZS1jb2xvcnMtOSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMwNmNjY2M7IC8qIFJPQklOU19FR0dfQkxVRSAqL1xufVxuXG4vKipcbiAqIFVzZXItc3VwcGxpZWQgcmVuZGVyVG8gZWxlbWVudC5cbiAqL1xuLnBsb3R0YWJsZSB7XG4gIGRpc3BsYXk6IGJsb2NrOyAvKiBtdXN0IGJlIGJsb2NrIGVsZW1lbnRzIGZvciB3aWR0aC9oZWlnaHQgY2FsY3VsYXRpb25zIHRvIHdvcmsgaW4gRmlyZWZveC4gKi9cbiAgcG9pbnRlci1ldmVudHM6IHZpc2libGVGaWxsO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIC8qKlxuICAgKiBQcmUgMy4wLCB1c2VycyBjb3VsZCBzZXQgdGhlIGRpbWVuc2lvbiBvZiB0aGUgcm9vdCBlbGVtZW50IGluIHR3byB3YXlzOiBlaXRoZXIgdXNpbmcgQ1NTXG4gICAqIChpbmxpbmUgb3IgdGhyb3VnaCBhIHN0eWxlc2hlZXQpLCBvciB1c2luZyB0aGUgU1ZHIHdpZHRoL2hlaWdodCBhdHRyaWJ1dGVzLiBCeSBkZWZhdWx0LCB3ZVxuICAgKiBzZXQgdGhlIFNWRyB3aWR0aC9oZWlnaHQgYXR0cmlidXRlcyB0byAxMDAlLlxuICAgKlxuICAgKiBQb3N0IDMuMCB0aGUgcm9vdCBlbGVtZW50IGlzIGFsd2F5cyBhIG5vcm1hbCBkaXYgYW5kIHRoZSBvbmx5IHdheSB0byBzZXQgdGhlIGRpbWVuc2lvbnMgaXNcbiAgICogdG8gdXNlIENTUy4gVG8gcmVwbGljYXRlIHRoZSBcIjEwMCUtYnktZGVmYXVsdFwiIGJlaGF2aW9yLCB3ZSBhcHBseSB3aWR0aC9oZWlnaHQgMTAwJS5cbiAgICovXG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG59XG5cbi8qKlxuICogVGhlIF9lbGVtZW50IHRoYXQgcm9vdHMgZWFjaCBDb21wb25lbnQncyBET00uXG4gKi9cbi5wbG90dGFibGUgLmNvbXBvbmVudCB7XG4gIC8qIEFsbG93IGNvbXBvbmVudHMgdG8gYmUgcG9zaXRpb25lZCB3aXRoIGV4cGxpY2l0IGxlZnQvdG9wL3dpZHRoL2hlaWdodCBzdHlsZXMgKi9cbiAgcG9zaXRpb246IGFic29sdXRlO1xufVxuXG4ucGxvdHRhYmxlIC5iYWNrZ3JvdW5kLWNvbnRhaW5lcixcbi5wbG90dGFibGUgLmNvbnRlbnQsXG4ucGxvdHRhYmxlIC5mb3JlZ3JvdW5kLWNvbnRhaW5lciB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbn1cblxuLyoqXG4gKiBEb24ndCBhbGxvdyBzdmcgZWxlbWVudHMgYWJvdmUgdGhlIGNvbnRlbnQgdG8gc3RlYWwgZXZlbnRzXG4gKi9cbi5wbG90dGFibGUgLmZvcmVncm91bmQtY29udGFpbmVyIHtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbi5wbG90dGFibGUgLmNvbXBvbmVudC1vdmVyZmxvdy1oaWRkZW4ge1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4ucGxvdHRhYmxlIC5jb21wb25lbnQtb3ZlcmZsb3ctdmlzaWJsZSB7XG4gIG92ZXJmbG93OiB2aXNpYmxlO1xufVxuXG4ucGxvdHRhYmxlIC5wbG90LWNhbnZhcy1jb250YWluZXIge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4ucGxvdHRhYmxlIC5wbG90LWNhbnZhcyB7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIC8qKlxuICAgKiBQbGF5IHdlbGwgd2l0aCBkZWZlcnJlZCByZW5kZXJpbmcuXG4gICAqL1xuICB0cmFuc2Zvcm0tb3JpZ2luOiAwcHggMHB4IDBweDtcbn1cblxuLnBsb3R0YWJsZSB0ZXh0IHtcbiAgdGV4dC1yZW5kZXJpbmc6IGdlb21ldHJpY1ByZWNpc2lvbjtcbn1cblxuLnBsb3R0YWJsZSAubGFiZWwgdGV4dCB7XG4gIGZpbGw6ICMzMjMxM0Y7XG59XG5cbi5wbG90dGFibGUgLmJhci1sYWJlbC10ZXh0LWFyZWEgdGV4dCxcbi5wbG90dGFibGUgLnNjYXR0ZXItbGFiZWwtdGV4dC1hcmVhIHRleHQge1xuICBmb250LXNpemU6IDEycHg7XG59XG5cbi5wbG90dGFibGUgLmxhYmVsLWFyZWEgdGV4dCB7XG4gIGZpbGw6ICMzMjMxM0Y7XG4gIGZvbnQtc2l6ZTogMTRweDtcbn1cblxuLnBsb3R0YWJsZSAubGlnaHQtbGFiZWwgdGV4dCB7XG4gIGZpbGw6IHdoaXRlO1xufVxuXG4ucGxvdHRhYmxlIC5kYXJrLWxhYmVsIHRleHQge1xuICBmaWxsOiAjMzIzMTNGO1xufVxuXG4ucGxvdHRhYmxlIC5vZmYtYmFyLWxhYmVsIHRleHQge1xuICBmaWxsOiAjMzIzMTNGO1xufVxuXG4ucGxvdHRhYmxlIC5zdGFja2VkLWJhci1sYWJlbCB0ZXh0IHtcbiAgZmlsbDogIzMyMzEzRjtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xufVxuXG4ucGxvdHRhYmxlIC5zdGFja2VkLWJhci1wbG90IC5vZmYtYmFyLWxhYmVsIHtcbiAgLyogSEFDS0hBQ0sgIzI3OTU6IGNvcnJlY3Qgb2ZmLWJhciBsYWJlbCBsb2dpYyB0byBiZSBpbXBsZW1lbnRlZCBvbiBTdGFja2VkQmFyICovXG4gIHZpc2liaWxpdHk6IGhpZGRlbiAhaW1wb3J0YW50O1xufVxuXG4ucGxvdHRhYmxlIC5heGlzLWxhYmVsIHRleHQge1xuICBmb250LXNpemU6IDEwcHg7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBsZXR0ZXItc3BhY2luZzogMXB4O1xuICBsaW5lLWhlaWdodDogbm9ybWFsO1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xufVxuXG4ucGxvdHRhYmxlIC50aXRsZS1sYWJlbCB0ZXh0IHtcbiAgZm9udC1zaXplOiAyMHB4O1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cblxuLnBsb3R0YWJsZSAuYXhpcyBsaW5lLmJhc2VsaW5lIHtcbiAgc3Ryb2tlOiAjQ0NDO1xuICBzdHJva2Utd2lkdGg6IDFweDtcbn1cblxuLnBsb3R0YWJsZSAuYXhpcyBsaW5lLnRpY2stbWFyayB7XG4gIHN0cm9rZTogI0NDQztcbiAgc3Ryb2tlLXdpZHRoOiAxcHg7XG59XG5cbi5wbG90dGFibGUgLmF4aXMgdGV4dCB7XG4gIGZpbGw6ICMzMjMxM0Y7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgZm9udC13ZWlnaHQ6IDIwMDtcbiAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcbn1cblxuLnBsb3R0YWJsZSAuYXhpcyAuYW5ub3RhdGlvbi1jaXJjbGUge1xuICBmaWxsOiB3aGl0ZTtcbiAgc3Ryb2tlLXdpZHRoOiAxcHg7XG4gIHN0cm9rZTogI0NDQztcbn1cblxuLnBsb3R0YWJsZSAuYXhpcyAuYW5ub3RhdGlvbi1saW5lIHtcbiAgc3Ryb2tlOiAjQ0NDO1xuICBzdHJva2Utd2lkdGg6IDFweDtcbn1cblxuLnBsb3R0YWJsZSAuYXhpcyAuYW5ub3RhdGlvbi1yZWN0IHtcbiAgc3Ryb2tlOiAjQ0NDO1xuICBzdHJva2Utd2lkdGg6IDFweDtcbiAgZmlsbDogd2hpdGU7XG59XG5cbi5wbG90dGFibGUgLmJhci1wbG90IC5iYXNlbGluZSB7XG4gIHN0cm9rZTogIzk5OTtcbn1cblxuLnBsb3R0YWJsZSAuZ3JpZGxpbmVzIGxpbmUge1xuICBzdHJva2U6ICMzQzNDM0M7IC8qIGhhY2toYWNrOiBncmlkbGluZXMgc2hvdWxkIGJlIHNvbGlkOyBzZWUgIzgyMCAqL1xuICBvcGFjaXR5OiAwLjI1O1xuICBzdHJva2Utd2lkdGg6IDFweDtcbn1cblxuLnBsb3R0YWJsZSAuc2VsZWN0aW9uLWJveC1sYXllciAuc2VsZWN0aW9uLWFyZWEge1xuICBmaWxsOiBibGFjaztcbiAgZmlsbC1vcGFjaXR5OiAwLjAzO1xuICBzdHJva2U6ICNDQ0M7XG59XG4vKiBEcmFnQm94TGF5ZXIgKi9cbi5wbG90dGFibGUgLmRyYWctYm94LWxheWVyLngtcmVzaXphYmxlIC5kcmFnLWVkZ2UtbHIge1xuICBjdXJzb3I6IGV3LXJlc2l6ZTtcbn1cbi5wbG90dGFibGUgLmRyYWctYm94LWxheWVyLnktcmVzaXphYmxlIC5kcmFnLWVkZ2UtdGIge1xuICBjdXJzb3I6IG5zLXJlc2l6ZTtcbn1cblxuLnBsb3R0YWJsZSAuZHJhZy1ib3gtbGF5ZXIueC1yZXNpemFibGUueS1yZXNpemFibGUgLmRyYWctY29ybmVyLXRsIHtcbiAgY3Vyc29yOiBud3NlLXJlc2l6ZTtcbn1cbi5wbG90dGFibGUgLmRyYWctYm94LWxheWVyLngtcmVzaXphYmxlLnktcmVzaXphYmxlIC5kcmFnLWNvcm5lci10ciB7XG4gIGN1cnNvcjogbmVzdy1yZXNpemU7XG59XG4ucGxvdHRhYmxlIC5kcmFnLWJveC1sYXllci54LXJlc2l6YWJsZS55LXJlc2l6YWJsZSAuZHJhZy1jb3JuZXItYmwge1xuICBjdXJzb3I6IG5lc3ctcmVzaXplO1xufVxuLnBsb3R0YWJsZSAuZHJhZy1ib3gtbGF5ZXIueC1yZXNpemFibGUueS1yZXNpemFibGUgLmRyYWctY29ybmVyLWJyIHtcbiAgY3Vyc29yOiBud3NlLXJlc2l6ZTtcbn1cblxuLnBsb3R0YWJsZSAuZHJhZy1ib3gtbGF5ZXIubW92YWJsZSAuc2VsZWN0aW9uLWFyZWEge1xuICBjdXJzb3I6IG1vdmU7IC8qIElFIGZhbGxiYWNrICovXG4gIGN1cnNvcjogLW1vei1ncmFiO1xuICBjdXJzb3I6IC13ZWJraXQtZ3JhYjtcbiAgY3Vyc29yOiBncmFiO1xufVxuXG4ucGxvdHRhYmxlIC5kcmFnLWJveC1sYXllci5tb3ZhYmxlIC5zZWxlY3Rpb24tYXJlYTphY3RpdmUge1xuICBjdXJzb3I6IC1tb3otZ3JhYmJpbmc7XG4gIGN1cnNvcjogLXdlYmtpdC1ncmFiYmluZztcbiAgY3Vyc29yOiBncmFiYmluZztcbn1cbi8qIC9EcmFnQm94TGF5ZXIgKi9cblxuLnBsb3R0YWJsZSAuZ3VpZGUtbGluZS1sYXllciBsaW5lLmd1aWRlLWxpbmUge1xuICBzdHJva2U6ICNDQ0M7XG4gIHN0cm9rZS13aWR0aDogMXB4O1xufVxuXG4ucGxvdHRhYmxlIC5kcmFnLWxpbmUtbGF5ZXIuZW5hYmxlZC52ZXJ0aWNhbCBsaW5lLmRyYWctZWRnZSB7XG4gIGN1cnNvcjogZXctcmVzaXplO1xufVxuXG4ucGxvdHRhYmxlIC5kcmFnLWxpbmUtbGF5ZXIuZW5hYmxlZC5ob3Jpem9udGFsIGxpbmUuZHJhZy1lZGdlIHtcbiAgY3Vyc29yOiBucy1yZXNpemU7XG59XG5cbi5wbG90dGFibGUgLmxlZ2VuZCB0ZXh0IHtcbiAgZmlsbDogIzMyMzEzRjtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcbn1cblxuLnBsb3R0YWJsZSAuaW50ZXJwb2xhdGVkLWNvbG9yLWxlZ2VuZCByZWN0LnN3YXRjaC1ib3VuZGluZy1ib3gge1xuICBmaWxsOiBub25lO1xuICBzdHJva2U6ICNDQ0M7XG4gIHN0cm9rZS13aWR0aDogMXB4O1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cblxuLnBsb3R0YWJsZSAud2F0ZXJmYWxsLXBsb3QgbGluZS5jb25uZWN0b3Ige1xuICBzdHJva2U6ICNDQ0M7XG4gIHN0cm9rZS13aWR0aDogMXB4O1xufVxuXG4ucGxvdHRhYmxlIC5waWUtcGxvdCAuYXJjLm91dGxpbmUge1xuICBzdHJva2UtbGluZWpvaW46IHJvdW5kO1xufVxuXG4ifSk7Y29uc3QgZl90PVsxLDAsMCwxLDAsMF07Y2xhc3MgbV90IGV4dGVuZHMgbl90LlV0aWxzLlRyYW5zbGF0b3J7Y29tcHV0ZVBvc2l0aW9uKHQsZSl7Y29uc3Qgbj17eDp0LHk6ZX0saT0oZnVuY3Rpb24gcih0KXtjb25zdCBlPShmdW5jdGlvbiBuKHQpe2NvbnN0IGU9W107Zm9yKDt0JiZ0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQ7KWlmKGUucHVzaCh0KSx0LmFzc2lnbmVkU2xvdCl0PXQuYXNzaWduZWRTbG90O2Vsc2UgaWYodC5wYXJlbnRFbGVtZW50KXQ9dC5wYXJlbnRFbGVtZW50O2Vsc2V7Y29uc3QgZT10LnBhcmVudE5vZGU7dD1lIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudD9lLmhvc3Q6ZSE9PXQ/ZTpudWxsfXJldHVybiBlfSkodCk7bGV0IGk9Zl90LHI9bnVsbDtmb3IoY29uc3QgdCBvZiBlKXtjb25zdCBlPW5fdC5VdGlscy5ET00uZ2V0RWxlbWVudFRyYW5zZm9ybSh0KTtpZihudWxsIT1lKXtjb25zdCBuPXQuY2xpZW50V2lkdGgvMixyPXQuY2xpZW50SGVpZ2h0LzI7aT1uX3QuVXRpbHMuTWF0aC5tdWx0aXBseVRyYW5zbGF0ZShpLFtuLHJdKSxpPW5fdC5VdGlscy5NYXRoLm11bHRpcGx5TWF0cml4KGksbl90LlV0aWxzLk1hdGguaW52ZXJ0TWF0cml4KGUpKSxpPW5fdC5VdGlscy5NYXRoLm11bHRpcGx5VHJhbnNsYXRlKGksWy1uLC1yXSl9bGV0IG49dC5zY3JvbGxMZWZ0LG89dC5zY3JvbGxUb3A7bnVsbCE9PXImJnQhPT1yfHwobi09dC5vZmZzZXRMZWZ0K3QuY2xpZW50TGVmdCxvLT10Lm9mZnNldFRvcCt0LmNsaWVudFRvcCxyPXQub2Zmc2V0UGFyZW50KSxpPW5fdC5VdGlscy5NYXRoLm11bHRpcGx5VHJhbnNsYXRlKGksW24sb10pfXJldHVybiBpfSkodGhpcy5fcm9vdEVsZW1lbnQpO3JldHVybiBudWxsPT1pP246bl90LlV0aWxzLk1hdGguYXBwbHlUcmFuc2Zvcm0oaSxuKX19Y2xhc3MgZ190IGV4dGVuZHMgbl90LkRpc3BhdGNoZXJzLk1vdXNle2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpLHRoaXMuX2V2ZW50VGFyZ2V0PXQucm9vdCgpLnJvb3RFbGVtZW50KCkubm9kZSgpLHRoaXMuX3RyYW5zbGF0b3I9bmV3IG1fdCh0LnJvb3QoKS5yb290RWxlbWVudCgpLm5vZGUoKSl9c3RhdGljIGdldERpc3BhdGNoZXIodCl7Y29uc3QgZT10LnJvb3QoKS5yb290RWxlbWVudCgpO2xldCBuPWVbZ190Ll9ESVNQQVRDSEVSX0tFWV07cmV0dXJuIG58fChuPW5ldyBnX3QodCksZVtnX3QuX0RJU1BBVENIRVJfS0VZXT1uKSxufX1jbGFzcyBfX3QgZXh0ZW5kcyBuX3QuRGlzcGF0Y2hlcnMuVG91Y2h7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy5fZXZlbnRUYXJnZXQ9dC5yb290KCkucm9vdEVsZW1lbnQoKS5ub2RlKCksdGhpcy5fdHJhbnNsYXRvcj1uZXcgbV90KHQucm9vdCgpLnJvb3RFbGVtZW50KCkubm9kZSgpKX1zdGF0aWMgZ2V0RGlzcGF0Y2hlcih0KXtjb25zdCBlPXQucm9vdCgpLnJvb3RFbGVtZW50KCk7bGV0IG49ZVtfX3QuX0RJU1BBVENIRVJfS0VZXTtyZXR1cm4gbnx8KG49bmV3IF9fdCh0KSxlW19fdC5fRElTUEFUQ0hFUl9LRVldPW4pLG59fW5fdC5JbnRlcmFjdGlvbi5wcm90b3R5cGUuX2lzSW5zaWRlQ29tcG9uZW50PWZ1bmN0aW9uKHQpe3JldHVybiAwPD10LngmJjA8PXQueSYmdC54PHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8ud2lkdGgoKSYmdC55PHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8uaGVpZ2h0KCl9O2NsYXNzIHlfdCBleHRlbmRzIG5fdC5JbnRlcmFjdGlvbnMuUG9pbnRlcntfYW5jaG9yKHQpe2NvbnN0IGU9dGhpcztlLl9pc0FuY2hvcmVkPSEwLGUuX21vdXNlRGlzcGF0Y2hlcj1nX3QuZ2V0RGlzcGF0Y2hlcihlLl9jb21wb25lbnRBdHRhY2hlZFRvKSxlLl9tb3VzZURpc3BhdGNoZXIub25Nb3VzZU1vdmUoZS5fbW91c2VNb3ZlQ2FsbGJhY2spLGUuX3RvdWNoRGlzcGF0Y2hlcj1fX3QuZ2V0RGlzcGF0Y2hlcihlLl9jb21wb25lbnRBdHRhY2hlZFRvKSxlLl90b3VjaERpc3BhdGNoZXIub25Ub3VjaFN0YXJ0KGUuX3RvdWNoU3RhcnRDYWxsYmFjayl9fXZhciB2X3Q7IShmdW5jdGlvbih0KXt0LkFVVE89ImF1dG8iLHQuQk9UVE9NPSJib3R0b20iLHQuUklHSFQ9InJpZ2h0In0pKHZfdHx8KHZfdD17fSkpO2NvbnN0IGJfdD17Ym94U2hhZG93OiIwIDFweCA0cHggcmdiYSgwLCAwLCAwLCAuMykiLG9wYWNpdHk6MCxwb3NpdGlvbjoiZml4ZWQiLHdpbGxDaGFuZ2U6InRyYW5zZm9ybSIsekluZGV4OjV9O2xldCB4X3Q9Y2xhc3MgZXh0ZW5kcyh0cih5ZSkpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnBvc2l0aW9uPXZfdC5BVVRPLHRoaXMubWluRGlzdEZyb21FZGdlPTE1LHRoaXMuX3N0eWxlQ2FjaGU9bnVsbCx0aGlzLl9yYWY9bnVsbCx0aGlzLl90dW5uZWw9bnVsbH1yZWFkeSgpe3RoaXMuX3N0eWxlQ2FjaGU9bnVsbCx0aGlzLl9yYWY9bnVsbCx0aGlzLl90dW5uZWw9bnVsbH1hdHRhY2hlZCgpe3RoaXMuX3R1bm5lbD10aGlzLl9jcmVhdGVUdW5uZWwoKSx0aGlzLl9oaWRlT25CbHVyPSgpPT57ZG9jdW1lbnQuaGlkZGVuJiZ0aGlzLmhpZGUoKX0sd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLHRoaXMuX2hpZGVPbkJsdXIpfWRldGFjaGVkKCl7dGhpcy5oaWRlKCksdGhpcy5fcmVtb3ZlVHVubmVsKHRoaXMuX3R1bm5lbCksdGhpcy5fdHVubmVsPW51bGwsd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLHRoaXMuX2hpZGVPbkJsdXIpfWNvbnRlbnQoKXtyZXR1cm4gdGhpcy5fdHVubmVsLnNoYWRvd1Jvb3R9aGlkZSgpe3dpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yYWYpLHRoaXMuX3N0eWxlQ2FjaGU9bnVsbCx0aGlzLl90dW5uZWwuc3R5bGUub3BhY2l0eT0wfXVwZGF0ZUFuZFBvc2l0aW9uKHQpe3dpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yYWYpLHRoaXMuX3JhZj13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgoKT0+e3RoaXMuaXNBdHRhY2hlZCYmdGhpcy5fcmVwb3NpdGlvbkltcGwodCl9KSl9X3JlcG9zaXRpb25JbXBsKHQpe2NvbnN0IGU9dGhpcy5fdHVubmVsLG49dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxpPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscj13aW5kb3cuaW5uZXJIZWlnaHQsbz1kb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoLGE9bi50b3Ascz1hK24uaGVpZ2h0LGw9aS5oZWlnaHQrMjA7bGV0IGM9bnVsbCx1PU1hdGgubWF4KHRoaXMubWluRGlzdEZyb21FZGdlLG4ubGVmdCksaD1udWxsLGQ9YTt0aGlzLnBvc2l0aW9uPT12X3QuUklHSFQ/dT1uLnJpZ2h0OihkPXMrMjAsbzx1K2kud2lkdGgrdGhpcy5taW5EaXN0RnJvbUVkZ2UmJih1PW51bGwsaD10aGlzLm1pbkRpc3RGcm9tRWRnZSkpLHRoaXMucG9zaXRpb249PXZfdC5BVVRPJiZuLnRvcC1sPjAmJnI8bi50b3Arbi5oZWlnaHQrbCYmKGQ9bnVsbCxjPXItYSsyMCk7Y29uc3QgcD17Y29udGFpbjoiY29udGVudCIsb3BhY2l0eToxLGxlZnQ6dT9gJHt1fXB4YDpudWxsLHJpZ2h0Omg/YCR7aH1weGA6bnVsbCx0b3A6ZD9gJHtkfXB4YDpudWxsLGJvdHRvbTpjP2Ake2N9cHhgOm51bGx9O3dlLmlzRXF1YWwodGhpcy5fc3R5bGVDYWNoZSxwKXx8KE9iamVjdC5hc3NpZ24oZS5zdHlsZSxwKSx0aGlzLl9zdHlsZUNhY2hlPXApfV9jcmVhdGVUdW5uZWwoKXtpZighdGhpcy5jb250ZW50Q29tcG9uZW50TmFtZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiUmVxdWlyZSBgY29udGVudENvbXBvbmVudE5hbWVgIHRvIGJlIGEgbmFtZSBvZiBhIFBvbHltZXIgY29tcG9uZW50Iik7Y29uc3QgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KHRoaXMuY29udGVudENvbXBvbmVudE5hbWUpO3JldHVybiBPYmplY3QuYXNzaWduKHQuc3R5bGUsYl90KSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHQpLHR9X3JlbW92ZVR1bm5lbCh0KXtkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHQpfX07dChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0seF90LnByb3RvdHlwZSwiY29udGVudENvbXBvbmVudE5hbWUiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0seF90LnByb3RvdHlwZSwicG9zaXRpb24iLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXJ9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0seF90LnByb3RvdHlwZSwibWluRGlzdEZyb21FZGdlIix2b2lkIDApLHhfdD10KFtpKCJ2ei1jaGFydC10b29sdGlwIildLHhfdCk7Y29uc3Qgd190PWZ5KCIuMn5lIiksU190PWZ5KCIuNH5yIiksTV90PWZ5KCIsfiIpO2Z1bmN0aW9uIEVfdCh0KXtpZigwPT09dClyZXR1cm4iMCI7Y29uc3QgZT1NYXRoLmFicyh0KTtyZXR1cm4gZT49MWU0fHxlPC4wMDE/d190KHQpOlNfdCh0KX1jb25zdCBUX3Q9e2Zvcm1hdFRpY2s6RV90LGZvcm1hdFNob3J0OkVfdCxmb3JtYXRSZWFkYWJsZSh0KXtjb25zdCBlPU1hdGguYWJzKHQpO3JldHVybiBlPj0xZTR8fGU8LjAwMT93X3QodCk6TV90KHQpfSxmb3JtYXRMb25nOk1fdH07ZnkoIjAuM35zIiksZnkoIiwuM35mIiksZnkoIi40fiIpO2NvbnN0IENfdD1ZQygpLnRpY2tGb3JtYXQoKTtsZXQgQV90O2NvbnN0IGtfdD17Zm9ybWF0VGljazp0PT5DX3QobmV3IERhdGUodCkpLGZvcm1hdFNob3J0OnQ9Pm5ldyBEYXRlKHQpLnRvTG9jYWxlU3RyaW5nKEFfdCx7eWVhcjoibnVtZXJpYyIsbW9udGg6InNob3J0IixkYXk6Im51bWVyaWMiLGhvdXI6Im51bWVyaWMiLG1pbnV0ZToibnVtZXJpYyIsc2Vjb25kOiJudW1lcmljIn0pLGZvcm1hdFJlYWRhYmxlOnQ9Pm5ldyBEYXRlKHQpLnRvTG9jYWxlU3RyaW5nKEFfdCx7eWVhcjoibnVtZXJpYyIsbW9udGg6InNob3J0IixkYXk6Im51bWVyaWMiLGhvdXI6Im51bWVyaWMiLG1pbnV0ZToibnVtZXJpYyIsc2Vjb25kOiJudW1lcmljIix0aW1lWm9uZU5hbWU6InNob3J0In0pLGZvcm1hdExvbmc6dD0+bmV3IERhdGUodCkudG9Mb2NhbGVTdHJpbmcoQV90LHt5ZWFyOiJudW1lcmljIixtb250aDoibG9uZyIsZGF5OiJudW1lcmljIixob3VyOiJudW1lcmljIixtaW51dGU6Im51bWVyaWMiLHNlY29uZDoibnVtZXJpYyIsdGltZVpvbmVOYW1lOiJzaG9ydCIsZnJhY3Rpb25hbFNlY29uZERpZ2l0czozfSl9O3ZhciBMX3Q7IShmdW5jdGlvbih0KXt0W3QuTElORUFSPTBdPSJMSU5FQVIiLHRbdC5MT0cxMD0xXT0iTE9HMTAiLHRbdC5USU1FPTJdPSJUSU1FIn0pKExfdHx8KExfdD17fSkpO2NsYXNzIFBfdHtjb25zdHJ1Y3Rvcigpe3RoaXMuZGVmYXVsdEZvcm1hdHRlcj1UX3R9dHJhbnNmb3JtKHQsZSxuKXtjb25zdFtpLHJdPXQsbz1yLWksW2Esc109ZTtyZXR1cm4gMD09PW8/YToocy1hKS9vKihuLWkpK2F9Zm9yd2FyZCh0LGUsbil7cmV0dXJuIHRoaXMudHJhbnNmb3JtKHQsZSxuKX1yZXZlcnNlKHQsZSxuKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0oZSx0LG4pfW5pY2VEb21haW4odCl7bGV0W2Usbl09dDtpZihuPGUpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIGlucHV0OiBtaW4gaXMgbGFyZ2VyIHRoYW4gbWF4Iik7aWYobj09PWUpcmV0dXJuIDA9PT1lP1stMSwxXTplPDA/WzIqZSwwXTpbMCwyKmVdO2NvbnN0IGk9RE0oKSxyPS4wNSoobi1lK051bWJlci5FUFNJTE9OKSxbbyxhXT1pLmRvbWFpbihbZS1yLG4rcl0pLm5pY2UoKS5kb21haW4oKTtyZXR1cm5bbyxhXX10aWNrcyh0LGUpe3JldHVybiBETSgpLmRvbWFpbih0KS50aWNrcyhlKX1pc1NhZmVOdW1iZXIodCl7cmV0dXJuIE51bWJlci5pc0Zpbml0ZSh0KX19Y2xhc3MgTl90e2NvbnN0cnVjdG9yKCl7dGhpcy5kZWZhdWx0Rm9ybWF0dGVyPVRfdH10cmFuc2Zvcm0odCl7cmV0dXJuIE1hdGgubG9nMTAodD4wP3Q6TnVtYmVyLk1JTl9WQUxVRSl9dW50cmFuc2Zvcm0odCl7cmV0dXJuIE1hdGguZXhwKHQvTWF0aC5MT0cxMEUpfWZvcndhcmQodCxlLG4pe2lmKG48PTApcmV0dXJuIGVbMF07Y29uc3RbaSxyXT10LFtvLGFdPWUscz10aGlzLnRyYW5zZm9ybShpKSxsPXRoaXMudHJhbnNmb3JtKHIpLXMsYz1hLW87cmV0dXJuIG49dGhpcy50cmFuc2Zvcm0obiksYy8obCtOdW1iZXIuRVBTSUxPTikqKG4tcykrb31yZXZlcnNlKHQsZSxuKXtjb25zdFtpLHJdPXQsW28sYV09ZSxzPXRoaXMudHJhbnNmb3JtKGkpLGw9dGhpcy50cmFuc2Zvcm0ocik7cmV0dXJuIHRoaXMudW50cmFuc2Zvcm0oKGwtcykvKGEtbytOdW1iZXIuRVBTSUxPTikqKG4tbykrcyl9bmljZURvbWFpbih0KXtjb25zdFtlLG5dPXQ7aWYoZT5uKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBpbnB1dDogbWluIGlzIGxhcmdlciB0aGFuIG1heCIpO2NvbnN0IGk9TWF0aC5tYXgoZSxOdW1iZXIuTUlOX1ZBTFVFKSxyPU1hdGgubWF4KG4sTnVtYmVyLk1JTl9WQUxVRSk7cmV0dXJuIG48PTA/W051bWJlci5NSU5fVkFMVUUsMV06W01hdGgubWF4KE51bWJlci5NSU5fVkFMVUUsLjUqaSksMipyXX10aWNrcyh0LGUpe2NvbnN0IG49dFswXTw9MD9OdW1iZXIuTUlOX1ZBTFVFOnRbMF0saT10WzFdPD0wP051bWJlci5NSU5fVkFMVUU6dFsxXSxyPXFNKCkuZG9tYWluKFtuLGldKS50aWNrcyhlKTtyZXR1cm4gci5sZW5ndGg/cjp0fWlzU2FmZU51bWJlcih0KXtyZXR1cm4gTnVtYmVyLmlzRmluaXRlKHQpJiZ0PjB9fWNsYXNzIElfdHtjb25zdHJ1Y3Rvcigpe3RoaXMuc2NhbGU9WUMoKSx0aGlzLmRlZmF1bHRGb3JtYXR0ZXI9a190fWZvcndhcmQodCxlLG4pe3JldHVybiB0aGlzLnNjYWxlLmRvbWFpbih0KS5yYW5nZShlKShuKX1yZXZlcnNlKHQsZSxuKXtyZXR1cm4gdGhpcy5zY2FsZS5kb21haW4odCkucmFuZ2UoZSkuaW52ZXJ0KG4pLmdldFRpbWUoKX1uaWNlRG9tYWluKHQpe2NvbnN0W2Usbl09dGhpcy5zY2FsZS5kb21haW4odCkubmljZSgpLmRvbWFpbigpO3JldHVybltlLmdldFRpbWUoKSxuLmdldFRpbWUoKV19dGlja3ModCxlKXtyZXR1cm4gdGhpcy5zY2FsZS5kb21haW4odCkudGlja3MoZSkubWFwKCh0PT50LmdldFRpbWUoKSkpfWlzU2FmZU51bWJlcih0KXtyZXR1cm4gTnVtYmVyLmlzRmluaXRlKHQpfX1jbGFzcyBPX3QgZXh0ZW5kcyBuX3QuU2NhbGVzLkxpbmVhcntjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5faWdub3JlT3V0bGllcj0hMSx0aGlzLnBhZFByb3BvcnRpb24oLjIpfXNldFZhbHVlUHJvdmlkZXJGb3JEb21haW4odCl7cmV0dXJuIHRoaXMuX3ZhbHVlUHJvdmlkZXJGb3JEb21haW49dCx0aGlzfV9uaWNlRG9tYWluKHQsZSl7Y29uc3RbbixpXT10O3JldHVybihmdW5jdGlvbiByKHQpe3N3aXRjaCh0KXtjYXNlIExfdC5MSU5FQVI6cmV0dXJuIG5ldyBQX3Q7Y2FzZSBMX3QuTE9HMTA6cmV0dXJuIG5ldyBOX3Q7Y2FzZSBMX3QuVElNRTpyZXR1cm4gbmV3IElfdDtkZWZhdWx0OnRocm93IG5ldyBSYW5nZUVycm9yKGBTY2FsZVR5cGUgJHt0fSBub3Qgc3VwcG9ydGVkLmApfX0pKExfdC5MSU5FQVIpLm5pY2VEb21haW4oW24saV0pfV9nZXRVbmJvdW5kZWRFeHRlbnQodCl7Y29uc3QgZT10aGlzLl9nZXRBbGxJbmNsdWRlZFZhbHVlcyh0KTtsZXQgbj10aGlzLl9kZWZhdWx0RXh0ZW50KCk7aWYoMCE9PWUubGVuZ3RoKXtjb25zdCB0PVtuX3QuVXRpbHMuTWF0aC5taW4oZSxuWzBdKSxuX3QuVXRpbHMuTWF0aC5tYXgoZSxuWzFdKV07bj10aGlzLl9uaWNlRG9tYWluKHQpfXJldHVybiBufV9nZXRBbGxJbmNsdWRlZFZhbHVlcyh0PSExKXtjb25zdCBlPXRoaXMuX3ZhbHVlUHJvdmlkZXJGb3JEb21haW4/dGhpcy5fdmFsdWVQcm92aWRlckZvckRvbWFpbigpOltdO3JldHVybiB0aGlzLmV4dGVudE9mVmFsdWVzKGUpfWV4dGVudE9mVmFsdWVzKHQpe2NvbnN0IGU9dC5maWx0ZXIoKHQ9Pm5fdC5VdGlscy5NYXRoLmlzVmFsaWROdW1iZXIodCkpKTtsZXQgbj1lO2lmKHRoaXMuaWdub3JlT3V0bGllcigpKXtjb25zdCB0PWUuc29ydCgoKHQsZSk9PnQtZSkpLGk9amwodCwuMDUpLHI9amwodCwuOTUpO249ZS5maWx0ZXIoKHQ9PnQ+PWkmJnQ8PXIpKX1jb25zdCBpPWtsKG4pO3JldHVybiBudWxsPT1pWzBdfHxudWxsPT1pWzFdP1tdOml9aWdub3JlT3V0bGllcih0KXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiB0Pyh0aGlzLl9pZ25vcmVPdXRsaWVyPXQsdGhpcyk6dGhpcy5faWdub3JlT3V0bGllcn19Y2xhc3MgUl90IGV4dGVuZHMgbl90LlF1YW50aXRhdGl2ZVNjYWxle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9pZ25vcmVPdXRsaWVyPSExfXNldFZhbHVlUHJvdmlkZXJGb3JEb21haW4odCl7cmV0dXJuIHRoaXMuX3ZhbHVlUHJvdmlkZXJGb3JEb21haW49dCx0aGlzfWlnbm9yZU91dGxpZXIodCl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgdD8odGhpcy5faWdub3JlT3V0bGllcj10LHRoaXMpOnRoaXMuX2lnbm9yZU91dGxpZXJ9X2dldEFsbEluY2x1ZGVkVmFsdWVzKHQ9ITEpe2NvbnN0IGU9dGhpcy5fdmFsdWVQcm92aWRlckZvckRvbWFpbj90aGlzLl92YWx1ZVByb3ZpZGVyRm9yRG9tYWluKCk6W107cmV0dXJuIHRoaXMuZXh0ZW50T2ZWYWx1ZXMoZSl9fWNvbnN0IHpfdD1NYXRoLnBvdygyLC0xMDc0KTtmdW5jdGlvbiBEX3QodCl7cmV0dXJuIE1hdGgubG9nMTAodCl9ZnVuY3Rpb24gQl90KHQpe3JldHVybiBNYXRoLnBvdygxMCx0KX1jbGFzcyBIX3QgZXh0ZW5kcyBSX3R7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX2QzTG9nU2NhbGU9cU0oKSx0aGlzLnBhZFByb3BvcnRpb24oLjIpfXNjYWxlKHQpe3JldHVybiB0PD0wP05hTjp0aGlzLl9kM0xvZ1NjYWxlKHQpfWludmVydCh0KXtyZXR1cm4gdGhpcy5fZDNMb2dTY2FsZS5pbnZlcnQodCl9c2NhbGVUcmFuc2Zvcm1hdGlvbih0KXtyZXR1cm4gdGhpcy5zY2FsZSh0KX1pbnZlcnRlZFRyYW5zZm9ybWF0aW9uKHQpe3JldHVybiB0aGlzLmludmVydCh0KX1nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpe3JldHVybiB0aGlzLmRvbWFpbigpfXNldFRyYW5zZm9ybWF0aW9uRG9tYWluKHQpe3RoaXMuZG9tYWluKHQpfWdldFRyYW5zZm9ybWF0aW9uRXh0ZW50KCl7cmV0dXJuIHRoaXMuX2dldFVuYm91bmRlZEV4dGVudCghMCl9X2dldERvbWFpbigpe3JldHVybiB0aGlzLl91bnRyYW5zZm9ybWVkRG9tYWlufV9zZXREb21haW4odCl7dGhpcy5fdW50cmFuc2Zvcm1lZERvbWFpbj10O2NvbnN0W2Usbl09dDtzdXBlci5fc2V0RG9tYWluKFtNYXRoLm1heCh6X3QsZSksbl0pfV9uaWNlRG9tYWluKHQsZSl7Y29uc3RbbixpXT10LHI9TWF0aC5tYXgoRF90KHpfdCksRF90KG4pKSxvPURfdChpKSxhPW8tcixzPWE/YSp0aGlzLnBhZFByb3BvcnRpb24oKToxO3JldHVybltCX3QoTWF0aC5tYXgoRF90KHpfdCksci1zKSksQl90KG8rcyldfV9nZXRVbmJvdW5kZWRFeHRlbnQodCl7Y29uc3QgZT10aGlzLl9nZXRBbGxJbmNsdWRlZFZhbHVlcyh0KTtsZXQgbj10aGlzLl9kZWZhdWx0RXh0ZW50KCk7aWYoMCE9PWUubGVuZ3RoKXtjb25zdCB0PVtuX3QuVXRpbHMuTWF0aC5taW4oZSxuWzBdKSxuX3QuVXRpbHMuTWF0aC5tYXgoZSxuWzFdKV07bj10aGlzLl9uaWNlRG9tYWluKHQpfXJldHVybiBufV9nZXRBbGxJbmNsdWRlZFZhbHVlcyh0PSExKXtyZXR1cm4gc3VwZXIuX2dldEFsbEluY2x1ZGVkVmFsdWVzKCkubWFwKCh0PT50PjA/dDp6X3QpKX1fZGVmYXVsdEV4dGVudCgpe3JldHVyblsxLDEwXX1fYmFja2luZ1NjYWxlRG9tYWluKHQpe3JldHVybiBudWxsPT10P3RoaXMuX2QzTG9nU2NhbGUuZG9tYWluKCk6KHRoaXMuX2QzTG9nU2NhbGUuZG9tYWluKHQpLHRoaXMpfV9nZXRSYW5nZSgpe3JldHVybiB0aGlzLl9kM0xvZ1NjYWxlLnJhbmdlKCl9X3NldFJhbmdlKHQpe3RoaXMuX2QzTG9nU2NhbGUucmFuZ2UodCl9ZGVmYXVsdFRpY2tzKCl7cmV0dXJuIHRoaXMuX2QzTG9nU2NhbGUudGlja3MoMSl9dGlja3MoKXtyZXR1cm4gdGhpcy5fZDNMb2dTY2FsZS50aWNrcygpfWV4dGVudE9mVmFsdWVzKHQpe2NvbnN0IGU9dC5maWx0ZXIoKHQ9Pm5fdC5VdGlscy5NYXRoLmlzVmFsaWROdW1iZXIodCkmJnQ+MCkpO2xldCBuPWU7aWYodGhpcy5pZ25vcmVPdXRsaWVyKCkpe2NvbnN0IHQ9ZS5tYXAoRF90KS5zb3J0KCgodCxlKT0+dC1lKSksaT1qbCh0LC4wNSkscj1qbCh0LC45NSk7bj10LmZpbHRlcigodD0+dD49aSYmdDw9cikpLm1hcChCX3QpfWNvbnN0IGk9a2wobik7cmV0dXJuIG51bGw9PWlbMF18fG51bGw9PWlbMV0/W106aX19Y2xhc3MgRl90IGV4dGVuZHMgbl90LkNvbXBvbmVudHMuU2VsZWN0aW9uQm94TGF5ZXJ7Y29uc3RydWN0b3IodCxlLG4pe3N1cGVyKCksdGhpcy5lYXNlRm49RWYsdGhpcy5fYW5pbWF0aW9uVGltZT03NTAsdGhpcy54U2NhbGUodCksdGhpcy55U2NhbGUoZSksdGhpcy5fZHJhZ0ludGVyYWN0aW9uPW5ldyBuX3QuSW50ZXJhY3Rpb25zLkRyYWcsdGhpcy5fZG91YmxlQ2xpY2tJbnRlcmFjdGlvbj1uZXcgbl90LkludGVyYWN0aW9ucy5DbGljayx0aGlzLnNldHVwQ2FsbGJhY2tzKCksdGhpcy51bnpvb21NZXRob2Q9bix0aGlzLm9uRGV0YWNoKCgoKT0+e3RoaXMuX2RvdWJsZUNsaWNrSW50ZXJhY3Rpb24uZGV0YWNoRnJvbSh0aGlzKSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24uZGV0YWNoRnJvbSh0aGlzKX0pKSx0aGlzLm9uQW5jaG9yKCgoKT0+e3RoaXMuX2RvdWJsZUNsaWNrSW50ZXJhY3Rpb24uYXR0YWNoVG8odGhpcyksdGhpcy5fZHJhZ0ludGVyYWN0aW9uLmF0dGFjaFRvKHRoaXMpfSkpfWludGVyYWN0aW9uU3RhcnQodCl7dGhpcy5vblN0YXJ0PXR9aW50ZXJhY3Rpb25FbmQodCl7dGhpcy5vbkVuZD10fWRyYWdJbnRlcmFjdGlvbigpe3JldHVybiB0aGlzLl9kcmFnSW50ZXJhY3Rpb259c2V0dXBDYWxsYmFja3MoKXtsZXQgdD0hMTt0aGlzLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnU3RhcnQoKHQ9Pnt0aGlzLmJvdW5kcyh7dG9wTGVmdDp0LGJvdHRvbVJpZ2h0OnR9KSx0aGlzLm9uU3RhcnQoKX0pKSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnKCgoZSxuKT0+e3RoaXMuYm91bmRzKHt0b3BMZWZ0OmUsYm90dG9tUmlnaHQ6bn0pLHRoaXMuYm94VmlzaWJsZSghMCksdD0hMH0pKSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnRW5kKCgoZSxuKT0+e3RoaXMuYm94VmlzaWJsZSghMSksdGhpcy5ib3VuZHMoe3RvcExlZnQ6ZSxib3R0b21SaWdodDpufSksdD90aGlzLnpvb20oKTp0aGlzLm9uRW5kKCksdD0hMX0pKSx0aGlzLl9kb3VibGVDbGlja0ludGVyYWN0aW9uLm9uRG91YmxlQ2xpY2sodGhpcy51bnpvb20uYmluZCh0aGlzKSl9YW5pbWF0aW9uVGltZSh0KXtpZihudWxsPT10KXJldHVybiB0aGlzLl9hbmltYXRpb25UaW1lO2lmKHQ8MCl0aHJvdyBuZXcgRXJyb3IoImFuaW1hdGlvblRpbWUgY2Fubm90IGJlIG5lZ2F0aXZlIik7cmV0dXJuIHRoaXMuX2FuaW1hdGlvblRpbWU9dCx0aGlzfWVhc2UodCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKCJlYXNlIGZ1bmN0aW9uIG11c3QgYmUgYSBmdW5jdGlvbiIpO3JldHVybiAwPT09dCgwKSYmMT09PXQoMSl8fG5fdC5VdGlscy5XaW5kb3cud2FybigiRWFzaW5nIGZ1bmN0aW9uIGRvZXMgbm90IG1haW50YWluIGludmFyaWFudCBmKDApPT0wICYmIGYoMSk9PTEuIEJhZCBiZWhhdmlvciBtYXkgcmVzdWx0LiIpLHRoaXMuZWFzZUZuPXQsdGhpc316b29tKCl7bGV0IHQ9dGhpcy54RXh0ZW50KClbMF0udmFsdWVPZigpLGU9dGhpcy54RXh0ZW50KClbMV0udmFsdWVPZigpLG49dGhpcy55RXh0ZW50KClbMV0udmFsdWVPZigpLGk9dGhpcy55RXh0ZW50KClbMF0udmFsdWVPZigpO3QhPT1lJiZuIT09aSYmdGhpcy5pbnRlcnBvbGF0ZVpvb20odCxlLG4saSl9dW56b29tKCl7bGV0IHQ9dGhpcy54U2NhbGUoKTt0Ll9kb21haW5NaW49bnVsbCx0Ll9kb21haW5NYXg9bnVsbDtsZXQgZT10Ll9nZXRFeHRlbnQoKTt0aGlzLnhTY2FsZSgpLmRvbWFpbihlKSx0aGlzLnVuem9vbU1ldGhvZCgpfWlzWm9vbWluZyh0KXt0aGlzLl9kcmFnSW50ZXJhY3Rpb24uZW5hYmxlZCghdCksdGhpcy5fZG91YmxlQ2xpY2tJbnRlcmFjdGlvbi5lbmFibGVkKCF0KX1pbnRlcnBvbGF0ZVpvb20odCxlLG4saSl7bGV0IHI9dGhpcy54U2NhbGUoKS5kb21haW4oKVswXS52YWx1ZU9mKCksbz10aGlzLnhTY2FsZSgpLmRvbWFpbigpWzFdLnZhbHVlT2YoKSxhPXRoaXMueVNjYWxlKCkuZG9tYWluKClbMF0udmFsdWVPZigpLHM9dGhpcy55U2NhbGUoKS5kb21haW4oKVsxXS52YWx1ZU9mKCksbD10aGlzLmVhc2VGbixjPSh0LGUsbik9PkRkKHQsZSkobChuKSk7dGhpcy5pc1pvb21pbmcoITApO2xldCB1PURhdGUubm93KCksaD0oKT0+e2xldCBsPURhdGUubm93KCksZD0wPT09dGhpcy5fYW5pbWF0aW9uVGltZT8xOk1hdGgubWluKDEsKGwtdSkvdGhpcy5fYW5pbWF0aW9uVGltZSkscD1jKHIsdCxkKSxmPWMobyxlLGQpLG09YyhhLG4sZCksZz1jKHMsaSxkKTt0aGlzLnhTY2FsZSgpLmRvbWFpbihbcCxmXSksdGhpcy55U2NhbGUoKS5kb21haW4oW20sZ10pLGQ8MT9uX3QuVXRpbHMuRE9NLnJlcXVlc3RBbmltYXRpb25GcmFtZVBvbHlmaWxsKGgpOih0aGlzLm9uRW5kKCksdGhpcy5pc1pvb21pbmcoITEpKX07aCgpfX12YXIgVl90LFVfdCxqX3QsR190OyEoZnVuY3Rpb24odCl7dFt0Lk5PTkU9MF09Ik5PTkUiLHRbdC5EUkFHX1pPT01JTkc9MV09IkRSQUdfWk9PTUlORyIsdFt0LlBBTk5JTkc9Ml09IlBBTk5JTkcifSkoVl90fHwoVl90PXt9KSk7Y2xhc3MgV190IGV4dGVuZHMgbl90LkNvbXBvbmVudHMuR3JvdXB7Y29uc3RydWN0b3IodCxlLG4pe3N1cGVyKCksdGhpcy5zdGF0ZT1WX3QuTk9ORSx0aGlzLnBhblN0YXJ0Q2FsbGJhY2s9bmV3IG5fdC5VdGlscy5DYWxsYmFja1NldCx0aGlzLnBhbkVuZENhbGxiYWNrPW5ldyBuX3QuVXRpbHMuQ2FsbGJhY2tTZXQsdGhpcy5wYW5ab29tPW5ldyBuX3QuSW50ZXJhY3Rpb25zLlBhblpvb20odCxlKSx0aGlzLnBhblpvb20uZHJhZ0ludGVyYWN0aW9uKCkubW91c2VGaWx0ZXIoKHQ9PldfdC5pc1BhbktleSh0KSYmMD09PXQuYnV0dG9uKSksdGhpcy5wYW5ab29tLndoZWVsRmlsdGVyKHRoaXMuY2FuU2Nyb2xsWm9vbSksdGhpcy5kcmFnWm9vbUxheWVyPW5ldyBGX3QodCxlLG4pLHRoaXMuZHJhZ1pvb21MYXllci5kcmFnSW50ZXJhY3Rpb24oKS5tb3VzZUZpbHRlcigodD0+IVdfdC5pc1BhbktleSh0KSYmMD09PXQuYnV0dG9uKSksdGhpcy5hcHBlbmQodGhpcy5kcmFnWm9vbUxheWVyKTtjb25zdCBpPXRoaXMub25XaGVlbC5iaW5kKHRoaXMpO3RoaXMub25BbmNob3IoKCgpPT57dGhpcy5fbW91c2VEaXNwYXRjaGVyPW5fdC5EaXNwYXRjaGVycy5Nb3VzZS5nZXREaXNwYXRjaGVyKHRoaXMpLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vbldoZWVsKGkpLHRoaXMucGFuWm9vbS5hdHRhY2hUbyh0aGlzKX0pKSx0aGlzLm9uRGV0YWNoKCgoKT0+e3RoaXMucGFuWm9vbS5kZXRhY2hGcm9tKHRoaXMpLHRoaXMuX21vdXNlRGlzcGF0Y2hlciYmKHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZXaGVlbChpKSx0aGlzLl9tb3VzZURpc3BhdGNoZXI9bnVsbCl9KSksdGhpcy5wYW5ab29tLmRyYWdJbnRlcmFjdGlvbigpLm9uRHJhZ1N0YXJ0KCgoKT0+e3RoaXMuc3RhdGU9PVZfdC5OT05FJiZ0aGlzLnNldFN0YXRlKFZfdC5QQU5OSU5HKX0pKSx0aGlzLnBhblpvb20uZHJhZ0ludGVyYWN0aW9uKCkub25EcmFnRW5kKCgoKT0+e3RoaXMuc3RhdGU9PVZfdC5QQU5OSU5HJiZ0aGlzLnNldFN0YXRlKFZfdC5OT05FKX0pKSx0aGlzLmRyYWdab29tTGF5ZXIuZHJhZ0ludGVyYWN0aW9uKCkub25EcmFnU3RhcnQoKCgpPT57dGhpcy5zdGF0ZT09Vl90Lk5PTkUmJnRoaXMuc2V0U3RhdGUoVl90LkRSQUdfWk9PTUlORyl9KSksdGhpcy5kcmFnWm9vbUxheWVyLmRyYWdJbnRlcmFjdGlvbigpLm9uRHJhZ0VuZCgoKCk9Pnt0aGlzLnN0YXRlPT1WX3QuRFJBR19aT09NSU5HJiZ0aGlzLnNldFN0YXRlKFZfdC5OT05FKX0pKX1vbldoZWVsKHQsZSl7aWYodGhpcy5jYW5TY3JvbGxab29tKGUpKXJldHVybjtjb25zdCBuPXRoaXMuZWxlbWVudCgpO2lmKCFuLnNlbGVjdCgiLmhlbHAiKS5lbXB0eSgpKXJldHVybjtjb25zdCBpPW4uYXBwZW5kKCJkaXYiKS5jbGFzc2VkKCJoZWxwIiwhMCk7aS5hcHBlbmQoInNwYW4iKS50ZXh0KCJBbHQgKyBTY3JvbGwgdG8gWm9vbSIpLGkub24oImFuaW1hdGlvbmVuZCIsKCgpPT57aS5yZW1vdmUoKX0pKX1zdGF0aWMgaXNQYW5LZXkodCl7cmV0dXJuIEJvb2xlYW4odC5hbHRLZXkpfHxCb29sZWFuKHQuc2hpZnRLZXkpfWNhblNjcm9sbFpvb20odCl7cmV0dXJuIHQuYWx0S2V5fXNldFN0YXRlKHQpe2lmKHRoaXMuc3RhdGU9PXQpcmV0dXJuO2NvbnN0IGU9dGhpcy5zdGF0ZTt0aGlzLnN0YXRlPXQsdGhpcy5yb290KCkucmVtb3ZlQ2xhc3ModGhpcy5zdGF0ZUNsYXNzTmFtZShlKSksdGhpcy5yb290KCkuYWRkQ2xhc3ModGhpcy5zdGF0ZUNsYXNzTmFtZSh0KSksZT09Vl90LlBBTk5JTkcmJnRoaXMucGFuRW5kQ2FsbGJhY2suY2FsbENhbGxiYWNrcygpLHQ9PVZfdC5QQU5OSU5HJiZ0aGlzLnBhblN0YXJ0Q2FsbGJhY2suY2FsbENhbGxiYWNrcygpfXN0YXRlQ2xhc3NOYW1lKHQpe3N3aXRjaCh0KXtjYXNlIFZfdC5QQU5OSU5HOnJldHVybiJwYW5uaW5nIjtjYXNlIFZfdC5EUkFHX1pPT01JTkc6cmV0dXJuImRyYWctem9vbWluZyI7Y2FzZSBWX3QuTk9ORTpkZWZhdWx0OnJldHVybiIifX1vblBhblN0YXJ0KHQpe3RoaXMucGFuU3RhcnRDYWxsYmFjay5hZGQodCl9b25QYW5FbmQodCl7dGhpcy5wYW5FbmRDYWxsYmFjay5hZGQodCl9b25TY3JvbGxab29tKHQpe3RoaXMucGFuWm9vbS5vblpvb21FbmQodCl9b25EcmFnWm9vbVN0YXJ0KHQpe3RoaXMuZHJhZ1pvb21MYXllci5pbnRlcmFjdGlvblN0YXJ0KHQpfW9uRHJhZ1pvb21FbmQodCl7dGhpcy5kcmFnWm9vbUxheWVyLmludGVyYWN0aW9uRW5kKHQpfX0hKGZ1bmN0aW9uKHQpe3RbdC5URVhUPTBdPSJURVhUIix0W3QuRE9NPTFdPSJET00ifSkoVV90fHwoVV90PXt9KSksKGZ1bmN0aW9uKHQpe3QuTE9HPSJsb2ciLHQuTElORUFSPSJsaW5lYXIifSkoal90fHwoal90PXt9KSk7Y2xhc3MgcV90e2NvbnN0cnVjdG9yKHQsZSxuLGkscixvLGEscyxsLGMsdSl7dGhpcy5kaXJ0eURhdGFzZXRzPW5ldyBTZXQsdGhpcy5zZXJpZXNOYW1lcz1bXSx0aGlzLm5hbWUyZGF0YXNldHM9e30sdGhpcy5jb2xvclNjYWxlPWksdGhpcy50b29sdGlwPXIsdGhpcy5kYXRhc2V0cz1bXSx0aGlzLl9pZ25vcmVZT3V0bGllcnM9ITEsdGhpcy5sYXN0UG9pbnRzRGF0YXNldD1uZXcgbl90LkRhdGFzZXQsdGhpcy5uYW5EYXRhc2V0PW5ldyBuX3QuRGF0YXNldCx0aGlzLnlWYWx1ZUFjY2Vzc29yPWUsdGhpcy5zeW1ib2xGdW5jdGlvbj1jLHRoaXMuX2RlZmF1bHRYUmFuZ2U9cyx0aGlzLl9kZWZhdWx0WVJhbmdlPWwsdGhpcy50b29sdGlwQ29sdW1ucz1vLHRoaXMuYnVpbGRDaGFydCh0LGUsbixhLHUpfWJ1aWxkQ2hhcnQodCxlLG4saSxyKXt0aGlzLmRlc3Ryb3koKTtjb25zdCBvPXQoKTt0aGlzLnhBY2Nlc3Nvcj1vLmFjY2Vzc29yLHRoaXMueFNjYWxlPW8uc2NhbGUsdGhpcy54QXhpcz1vLmF4aXMsdGhpcy54QXhpcy5tYXJnaW4oMSkudGlja0xhYmVsUGFkZGluZygzKSxyJiZ0aGlzLnhBeGlzLmZvcm1hdHRlcihyKSx0aGlzLnlTY2FsZT1xX3QuZ2V0WVNjYWxlRnJvbVR5cGUobiksdGhpcy55U2NhbGUuc2V0VmFsdWVQcm92aWRlckZvckRvbWFpbigoKCk9PnRoaXMuZ2V0VmFsdWVzRm9yWUF4aXNEb21haW5Db21wdXRlKCkpKSx0aGlzLnlBeGlzPW5ldyBuX3QuQXhlcy5OdW1lcmljKHRoaXMueVNjYWxlLCJsZWZ0Iik7bGV0IGE9b190KDMpO3RoaXMueUF4aXMubWFyZ2luKDApLnRpY2tMYWJlbFBhZGRpbmcoNSkuZm9ybWF0dGVyKGEpLHRoaXMueUF4aXMudXNlc1RleHRXaWR0aEFwcHJveGltYXRpb24oITApLHRoaXMuZmlsbEFyZWE9aTtjb25zdCBzPW5ldyBXX3QodGhpcy54U2NhbGUsdGhpcy55U2NhbGUsKCgpPT50aGlzLnJlc2V0RG9tYWluKCkpKTt0aGlzLnRvb2x0aXBJbnRlcmFjdGlvbj10aGlzLmNyZWF0ZVRvb2x0aXBJbnRlcmFjdGlvbihzKSx0aGlzLnRvb2x0aXBQb2ludHNDb21wb25lbnQ9bmV3IG5fdC5Db21wb25lbnQ7Y29uc3QgbD10aGlzLmJ1aWxkUGxvdCh0aGlzLnhTY2FsZSx0aGlzLnlTY2FsZSxpKTt0aGlzLmdyaWRsaW5lcz1uZXcgbl90LkNvbXBvbmVudHMuR3JpZGxpbmVzKHRoaXMueFNjYWxlLHRoaXMueVNjYWxlKTtsZXQgYz1udWxsO24hPT1qX3QuTE9HJiYoYz1uZXcgbl90LkNvbXBvbmVudHMuR3VpZGVMaW5lTGF5ZXIoImhvcml6b250YWwiKSxjLnNjYWxlKHRoaXMueVNjYWxlKS52YWx1ZSgwKSk7bGV0IHU9bmV3IG5fdC5Db21wb25lbnRzLkd1aWRlTGluZUxheWVyKCJ2ZXJ0aWNhbCIpO3Uuc2NhbGUodGhpcy54U2NhbGUpLnZhbHVlKDApLHRoaXMuY2VudGVyPW5ldyBuX3QuQ29tcG9uZW50cy5Hcm91cChbdGhpcy5ncmlkbGluZXMsYyx1LGwsdGhpcy50b29sdGlwUG9pbnRzQ29tcG9uZW50LHNdKSx0aGlzLmNlbnRlci5hZGRDbGFzcygibWFpbiIpLHRoaXMub3V0ZXI9bmV3IG5fdC5Db21wb25lbnRzLlRhYmxlKFtbdGhpcy55QXhpcyx0aGlzLmNlbnRlcl0sW251bGwsdGhpcy54QXhpc11dKX1idWlsZFBsb3QodCxlLG4pe24mJih0aGlzLm1hcmdpbkFyZWFQbG90PW5ldyBuX3QuUGxvdHMuQXJlYSx0aGlzLm1hcmdpbkFyZWFQbG90LngodGhpcy54QWNjZXNzb3IsdCksdGhpcy5tYXJnaW5BcmVhUGxvdC55KG4uaGlnaGVyQWNjZXNzb3IsZSksdGhpcy5tYXJnaW5BcmVhUGxvdC55MChuLmxvd2VyQWNjZXNzb3IpLHRoaXMubWFyZ2luQXJlYVBsb3QuYXR0cigiZmlsbCIsKCh0LGUsbik9PnRoaXMuY29sb3JTY2FsZS5zY2FsZShuLm1ldGFkYXRhKCkubmFtZSkpKSx0aGlzLm1hcmdpbkFyZWFQbG90LmF0dHIoImZpbGwtb3BhY2l0eSIsLjMpLHRoaXMubWFyZ2luQXJlYVBsb3QuYXR0cigic3Ryb2tlLXdpZHRoIiwwKSksdGhpcy5zbW9vdGhlZEFjY2Vzc29yPXQ9PnQuc21vb3RoZWQ7bGV0IGk9bmV3IG5fdC5QbG90cy5MaW5lO2kueCh0aGlzLnhBY2Nlc3Nvcix0KSxpLnkodGhpcy55VmFsdWVBY2Nlc3NvcixlKSxpLmF0dHIoInN0cm9rZSIsKCh0LGUsbik9PnRoaXMuY29sb3JTY2FsZS5zY2FsZShuLm1ldGFkYXRhKCkubmFtZSkpKSx0aGlzLmxpbmVQbG90PWksdGhpcy5zZXR1cFRvb2x0aXBzKGkpO2xldCByPW5ldyBuX3QuUGxvdHMuTGluZTtpZihyLngodGhpcy54QWNjZXNzb3IsdCksci55KHRoaXMuc21vb3RoZWRBY2Nlc3NvcixlKSxyLmF0dHIoInN0cm9rZSIsKCh0LGUsbik9PnRoaXMuY29sb3JTY2FsZS5zY2FsZShuLm1ldGFkYXRhKCkubmFtZSkpKSx0aGlzLnNtb290aExpbmVQbG90PXIsdGhpcy5zeW1ib2xGdW5jdGlvbil7Y29uc3Qgbj1uZXcgbl90LlBsb3RzLlNjYXR0ZXI7bi54KHRoaXMueEFjY2Vzc29yLHQpLG4ueSh0aGlzLnlWYWx1ZUFjY2Vzc29yLGUpLG4uYXR0cigiZmlsbCIsKCh0LGUsbik9PnRoaXMuY29sb3JTY2FsZS5zY2FsZShuLm1ldGFkYXRhKCkubmFtZSkpKSxuLmF0dHIoIm9wYWNpdHkiLDEpLG4uc2l6ZSg4KSxuLnN5bWJvbCgoKHQsZSxuKT0+dGhpcy5zeW1ib2xGdW5jdGlvbihuLm1ldGFkYXRhKCkubmFtZSkpKSx0aGlzLm1hcmtlcnNTY2F0dGVyUGxvdD1ufWxldCBvPW5ldyBuX3QuUGxvdHMuU2NhdHRlcjtvLngodGhpcy54QWNjZXNzb3IsdCksby55KHRoaXMueVZhbHVlQWNjZXNzb3IsZSksby5hdHRyKCJmaWxsIiwodD0+dGhpcy5jb2xvclNjYWxlLnNjYWxlKHQubmFtZSkpKSxvLmF0dHIoIm9wYWNpdHkiLDEpLG8uc2l6ZSg4KSxvLmRhdGFzZXRzKFt0aGlzLmxhc3RQb2ludHNEYXRhc2V0XSksdGhpcy5zY2F0dGVyUGxvdD1vO2xldCBhPW5ldyBuX3QuUGxvdHMuU2NhdHRlcjthLngodGhpcy54QWNjZXNzb3IsdCksYS55KCh0PT50LmRpc3BsYXlZKSxlKSxhLmF0dHIoImZpbGwiLCh0PT50aGlzLmNvbG9yU2NhbGUuc2NhbGUodC5uYW1lKSkpLGEuYXR0cigib3BhY2l0eSIsMSksYS5zaXplKDEyKSxhLmRhdGFzZXRzKFt0aGlzLm5hbkRhdGFzZXRdKSxhLnN5bWJvbChuX3QuU3ltYm9sRmFjdG9yaWVzLnRyaWFuZ2xlKSx0aGlzLm5hbkRpc3BsYXk9YTtjb25zdCBzPVthLG8scixpXTtyZXR1cm4gdGhpcy5tYXJnaW5BcmVhUGxvdCYmcy5wdXNoKHRoaXMubWFyZ2luQXJlYVBsb3QpLHRoaXMubWFya2Vyc1NjYXR0ZXJQbG90JiZzLnB1c2godGhpcy5tYXJrZXJzU2NhdHRlclBsb3QpLG5ldyBuX3QuQ29tcG9uZW50cy5Hcm91cChzKX1pZ25vcmVZT3V0bGllcnModCl7dCE9PXRoaXMuX2lnbm9yZVlPdXRsaWVycyYmKHRoaXMuX2lnbm9yZVlPdXRsaWVycz10LHRoaXMudXBkYXRlU3BlY2lhbERhdGFzZXRzKCksdGhpcy55U2NhbGUuaWdub3JlT3V0bGllcih0KSx0aGlzLnJlc2V0WURvbWFpbigpKX1nZXRWYWx1ZXNGb3JZQXhpc0RvbWFpbkNvbXB1dGUoKXtjb25zdCB0PXRoaXMuZ2V0QWNjZXNzb3JzRm9yQ29tcHV0aW5nWVJhbmdlKCk7cmV0dXJuIHdlLmZsYXR0ZW5EZWVwKHRoaXMuZGF0YXNldHMubWFwKChlPT50Lm1hcCgodD0+ZS5kYXRhKCkubWFwKChuPT50KG4sLTEsZSkpKSkpKSkpLmZpbHRlcihpc0Zpbml0ZSl9dXBkYXRlU3BlY2lhbERhdGFzZXRzKCl7Y29uc3QgdD10aGlzLmdldFlBeGlzQWNjZXNzb3IoKTtsZXQgZT10aGlzLmRhdGFzZXRzLm1hcCgoZT0+e2xldCBuPW51bGwsaT1lLmRhdGEoKS5maWx0ZXIoKG49PiFpc05hTih0KG4sLTEsZSkpKSk7cmV0dXJuIGkubGVuZ3RoPjAmJihuPWlbaS5sZW5ndGgtMV0sbi5uYW1lPWUubWV0YWRhdGEoKS5uYW1lLG4ucmVsYXRpdmU9Y190KG4sMCxlKSksbn0pKS5maWx0ZXIoKHQ9Pm51bGwhPXQpKTt0aGlzLmxhc3RQb2ludHNEYXRhc2V0LmRhdGEoZSksdGhpcy5tYXJrZXJzU2NhdHRlclBsb3QmJnRoaXMubWFya2Vyc1NjYXR0ZXJQbG90LmRhdGFzZXRzKHRoaXMuZGF0YXNldHMubWFwKHRoaXMuY3JlYXRlU2FtcGxlZERhdGFzZXRGb3JNYXJrZXJzKSk7bGV0IG49d2UuZmxhdHRlbih0aGlzLmRhdGFzZXRzLm1hcCgoZT0+e2xldCBuPW51bGwsaT1lLmRhdGEoKSxyPTA7Zm9yKDtyPGkubGVuZ3RoJiZudWxsPT1uOylpc05hTih0KGlbcl0sLTEsZSkpfHwobj10KGlbcl0sLTEsZSkpLHIrKztudWxsPT1uJiYobj0wKTtsZXQgbz1bXTtmb3Iocj0wO3I8aS5sZW5ndGg7cisrKWlzTmFOKHQoaVtyXSwtMSxlKSk/KGlbcl0ubmFtZT1lLm1ldGFkYXRhKCkubmFtZSxpW3JdLmRpc3BsYXlZPW4saVtyXS5yZWxhdGl2ZT1jX3QoaVtyXSwwLGUpLG8ucHVzaChpW3JdKSk6bj10KGlbcl0sLTEsZSk7cmV0dXJuIG99KSkpO3RoaXMubmFuRGF0YXNldC5kYXRhKG4pfXJlc2V0RG9tYWluKCl7dGhpcy5yZXNldFhEb21haW4oKSx0aGlzLnJlc2V0WURvbWFpbigpfXJlc2V0WERvbWFpbigpe2xldCB0O2lmKG51bGwhPXRoaXMuX2RlZmF1bHRYUmFuZ2UpdD10aGlzLl9kZWZhdWx0WFJhbmdlO2Vsc2V7Y29uc3QgZT10aGlzLnhTY2FsZTtlLl9kb21haW5NaW49bnVsbCxlLl9kb21haW5NYXg9bnVsbCx0PWUuX2dldEV4dGVudCgpfXRoaXMueFNjYWxlLmRvbWFpbih0KX1yZXNldFlEb21haW4oKXtudWxsIT10aGlzLl9kZWZhdWx0WVJhbmdlP3RoaXMueVNjYWxlLmRvbWFpbih0aGlzLl9kZWZhdWx0WVJhbmdlKToodGhpcy55U2NhbGUuYXV0b0RvbWFpbigpLHRoaXMueVNjYWxlLmRvbWFpbih0aGlzLnlTY2FsZS5kb21haW4oKSkpfWdldEFjY2Vzc29yc0ZvckNvbXB1dGluZ1lSYW5nZSgpe2NvbnN0IHQ9W3RoaXMuZ2V0WUF4aXNBY2Nlc3NvcigpXTtyZXR1cm4gdGhpcy5maWxsQXJlYSYmdC5wdXNoKHRoaXMuZmlsbEFyZWEubG93ZXJBY2Nlc3Nvcix0aGlzLmZpbGxBcmVhLmhpZ2hlckFjY2Vzc29yKSx0fWdldFlBeGlzQWNjZXNzb3IoKXtyZXR1cm4gdGhpcy5zbW9vdGhpbmdFbmFibGVkP3RoaXMuc21vb3RoZWRBY2Nlc3Nvcjp0aGlzLnlWYWx1ZUFjY2Vzc29yfWNyZWF0ZVRvb2x0aXBJbnRlcmFjdGlvbih0KXtjb25zdCBlPW5ldyB5X3Qsbj0oKT0+e2UuZW5hYmxlZCghMSksdGhpcy5oaWRlVG9vbHRpcHMoKX0saT0oKT0+ZS5lbmFibGVkKCEwKTtyZXR1cm4gdC5vblBhblN0YXJ0KG4pLHQub25EcmFnWm9vbVN0YXJ0KG4pLHQub25QYW5FbmQoaSksdC5vbkRyYWdab29tRW5kKGkpLHQub25TY3JvbGxab29tKCgoKT0+dGhpcy51cGRhdGVUb29sdGlwQ29udGVudCh0aGlzLl9sYXN0TW91c2VQb3NpdGlvbikpKSxlLm9uUG9pbnRlck1vdmUoKHQ9Pnt0aGlzLl9sYXN0TW91c2VQb3NpdGlvbj10LHRoaXMudXBkYXRlVG9vbHRpcENvbnRlbnQodCl9KSksZS5vblBvaW50ZXJFeGl0KCgoKT0+dGhpcy5oaWRlVG9vbHRpcHMoKSkpLGV9dXBkYXRlVG9vbHRpcENvbnRlbnQodCl7dGhpcy5saW5lUGxvdCYmKHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl90b29sdGlwVXBkYXRlQW5pbWF0aW9uRnJhbWUpLHRoaXMuX3Rvb2x0aXBVcGRhdGVBbmltYXRpb25GcmFtZT13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgoKT0+e2xldCBlPXt4OnQueCx5OnQueSxkYXR1bTpudWxsLGRhdGFzZXQ6bnVsbH0sbj10aGlzLmdyaWRsaW5lcy5jb250ZW50KCkubm9kZSgpLmdldEJCb3goKSxpPXRoaXMubGluZVBsb3QuZGF0YXNldHMoKS5tYXAoKHQ9PnRoaXMuZmluZENsb3Nlc3RQb2ludChlLHQpKSkuZmlsdGVyKEJvb2xlYW4pLHI9bl90LlV0aWxzLkRPTS5pbnRlcnNlY3RzQkJveCxvPWkuZmlsdGVyKCh0PT5yKHQueCx0Lnksbil8fGlzTmFOKHRoaXMueVZhbHVlQWNjZXNzb3IodC5kYXR1bSwwLHQuZGF0YXNldCkpKSksYT1vLmZpbHRlcigodD0+IWlzTmFOKHRoaXMueVZhbHVlQWNjZXNzb3IodC5kYXR1bSwwLHQuZGF0YXNldCkpKSk7aWYoMCE9PWkubGVuZ3RoKXt0aGlzLnNjYXR0ZXJQbG90LmF0dHIoImRpc3BsYXkiLCJub25lIik7Y29uc3QgdD10aGlzLnRvb2x0aXBQb2ludHNDb21wb25lbnQuY29udGVudCgpLnNlbGVjdEFsbCgiLnBvaW50IikuZGF0YShhLCh0PT50LmRhdGFzZXQubWV0YWRhdGEoKS5uYW1lKSk7dC5lbnRlcigpLmFwcGVuZCgiY2lyY2xlIikuY2xhc3NlZCgicG9pbnQiLCEwKSx0LmF0dHIoInIiLDQpLmF0dHIoImN4IiwodD0+dC54KSkuYXR0cigiY3kiLCh0PT50LnkpKS5zdHlsZSgic3Ryb2tlIiwibm9uZSIpLmF0dHIoImZpbGwiLCh0PT50aGlzLmNvbG9yU2NhbGUuc2NhbGUodC5kYXRhc2V0Lm1ldGFkYXRhKCkubmFtZSkpKSx0LmV4aXQoKS5yZW1vdmUoKSx0aGlzLmRyYXdUb29sdGlwcyhvLGUsdGhpcy50b29sdGlwQ29sdW1ucyl9ZWxzZSB0aGlzLmhpZGVUb29sdGlwcygpfSkpKX1oaWRlVG9vbHRpcHMoKXt3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fdG9vbHRpcFVwZGF0ZUFuaW1hdGlvbkZyYW1lKSx0aGlzLnRvb2x0aXAuaGlkZSgpLHRoaXMuc2NhdHRlclBsb3QuYXR0cigiZGlzcGxheSIsImJsb2NrIiksdGhpcy50b29sdGlwUG9pbnRzQ29tcG9uZW50LmNvbnRlbnQoKS5zZWxlY3RBbGwoIi5wb2ludCIpLnJlbW92ZSgpfXNldHVwVG9vbHRpcHModCl7dC5vbkRldGFjaCgoKCk9Pnt0aGlzLnRvb2x0aXBJbnRlcmFjdGlvbi5kZXRhY2hGcm9tKHQpLHRoaXMudG9vbHRpcEludGVyYWN0aW9uLmVuYWJsZWQoITEpfSkpLHQub25BbmNob3IoKCgpPT57dGhpcy50b29sdGlwSW50ZXJhY3Rpb24uYXR0YWNoVG8odCksdGhpcy50b29sdGlwSW50ZXJhY3Rpb24uZW5hYmxlZCghMCl9KSl9ZHJhd1Rvb2x0aXBzKHQsZSxuKXtpZighdC5sZW5ndGgpcmV0dXJuIHZvaWQgdGhpcy50b29sdGlwLmhpZGUoKTtjb25zdHtjb2xvclNjYWxlOml9PXRoaXM7bj1be3RpdGxlOiIiLHN0YXRpYzohMSxldmFsVHlwZTpVX3QuRE9NLGV2YWx1YXRlKHQpe3JldHVybiB3dSh0aGlzKS5zZWxlY3QoInNwYW4iKS5zdHlsZSgiYmFja2dyb3VuZC1jb2xvciIsKCgpPT5pLnNjYWxlKHQuZGF0YXNldC5tZXRhZGF0YSgpLm5hbWUpKSksIiJ9LGVudGVyKHQpe3d1KHRoaXMpLmFwcGVuZCgic3BhbiIpLmNsYXNzZWQoInN3YXRjaCIsITApLnN0eWxlKCJiYWNrZ3JvdW5kLWNvbG9yIiwoKCk9Pmkuc2NhbGUodC5kYXRhc2V0Lm1ldGFkYXRhKCkubmFtZSkpKX19LC4uLm5dO2NvbnN0IHI9dD0+TWF0aC5wb3codC54LWUueCwyKStNYXRoLnBvdyh0LnktZS55LDIpLG89d2UubWluKHQubWFwKHIpKSxhPXRoaXMuc21vb3RoaW5nRW5hYmxlZD90aGlzLnNtb290aGVkQWNjZXNzb3I6dGhpcy55VmFsdWVBY2Nlc3Nvcjt0PSJhc2NlbmRpbmciPT09dGhpcy50b29sdGlwU29ydGluZ01ldGhvZD93ZS5zb3J0QnkodCwodD0+YSh0LmRhdHVtLC0xLHQuZGF0YXNldCkpKToiZGVzY2VuZGluZyI9PT10aGlzLnRvb2x0aXBTb3J0aW5nTWV0aG9kP3dlLnNvcnRCeSh0LCh0PT5hKHQuZGF0dW0sLTEsdC5kYXRhc2V0KSkpLnJldmVyc2UoKToibmVhcmVzdCI9PT10aGlzLnRvb2x0aXBTb3J0aW5nTWV0aG9kP3dlLnNvcnRCeSh0LHIpOnQuc2xpY2UoMCkucmV2ZXJzZSgpO2NvbnN0IHM9dGhpcyxsPXd1KHRoaXMudG9vbHRpcC5jb250ZW50KCkpLnNlbGVjdCgidGFibGUiKSxjPWwuc2VsZWN0KCJ0aGVhZCIpLnNlbGVjdEFsbCgidGgiKS5kYXRhKG4sKCh0LGUsbik9PnQudGl0bGUpKTtjLmVudGVyKCkuYXBwZW5kKCJ0aCIpLnRleHQoKHQ9PnQudGl0bGUpKS5ub2RlcygpLGMuZXhpdCgpLnJlbW92ZSgpO2NvbnN0IHU9bC5zZWxlY3QoInRib2R5Iikuc2VsZWN0QWxsKCJ0ciIpLmRhdGEodCwoKHQsZSxuKT0+dC5kYXRhc2V0Lm1ldGFkYXRhKCkubmFtZSkpO3UuY2xhc3NlZCgiZGlzdGFudCIsKHQ9PntsZXQgbj10LmRhdGFzZXQuZGF0YSgpWzBdLGk9d2UubGFzdCh0LmRhdGFzZXQuZGF0YSgpKSxyPXRoaXMueFNjYWxlLnNjYWxlKHRoaXMueEFjY2Vzc29yKG4sMCx0LmRhdGFzZXQpKSxvPXRoaXMueFNjYWxlLnNjYWxlKHRoaXMueEFjY2Vzc29yKGksMCx0LmRhdGFzZXQpKSxhPXRoaXMuc21vb3RoaW5nRW5hYmxlZD90LmRhdHVtLnNtb290aGVkOnRoaXMueVZhbHVlQWNjZXNzb3IodC5kYXR1bSwwLHQuZGF0YXNldCk7cmV0dXJuIGUueDxyfHxlLng+b3x8aXNOYU4oYSl9KSkuY2xhc3NlZCgiY2xvc2VzdCIsKHQ9PnIodCk9PT1vKSkuZWFjaCgoZnVuY3Rpb24odCl7cy5kcmF3VG9vbHRpcFJvdyh0aGlzLG4sdCl9KSkub3JkZXIoKSx1LmV4aXQoKS5yZW1vdmUoKSx1LmVudGVyKCkuYXBwZW5kKCJ0ciIpLmVhY2goKGZ1bmN0aW9uKHQpe3MuZHJhd1Rvb2x0aXBSb3codGhpcyxuLHQpfSkpLm5vZGVzKCksdGhpcy50b29sdGlwLnVwZGF0ZUFuZFBvc2l0aW9uKHRoaXMudGFyZ2V0U1ZHLm5vZGUoKSl9ZHJhd1Rvb2x0aXBSb3codCxlLG4pe2NvbnN0IGk9dGhpcyxyPXd1KHQpLnNlbGVjdEFsbCgidGQiKS5kYXRhKGUpO3IuZWFjaCgoZnVuY3Rpb24odCl7dC5zdGF0aWN8fGkuZHJhd1Rvb2x0aXBDb2x1bW4uY2FsbChpLHRoaXMsdCxuKX0pKSxyLmV4aXQoKS5yZW1vdmUoKSxyLmVudGVyKCkuYXBwZW5kKCJ0ZCIpLmVhY2goKGZ1bmN0aW9uKHQpeyJlbnRlciJpbiB0JiZ0LmVudGVyJiZ0LmVudGVyLmNhbGwodGhpcyxuKSxpLmRyYXdUb29sdGlwQ29sdW1uLmNhbGwoaSx0aGlzLHQsbil9KSl9ZHJhd1Rvb2x0aXBDb2x1bW4odCxlLG4pe2NvbnN0e3Ntb290aGluZ0VuYWJsZWQ6aX09dGhpczsiZXZhbFR5cGUiaW4gZSYmZS5ldmFsVHlwZT09VV90LkRPTT9lLmV2YWx1YXRlLmNhbGwodCxuLHtzbW9vdGhpbmdFbmFibGVkOml9KTp3dSh0KS50ZXh0KGUuZXZhbHVhdGUuY2FsbCh0LG4se3Ntb290aGluZ0VuYWJsZWQ6aX0pKX1maW5kQ2xvc2VzdFBvaW50KHQsZSl7Y29uc3Qgbj1lLmRhdGEoKS5tYXAoKCh0LG4pPT50aGlzLnhTY2FsZS5zY2FsZSh0aGlzLnhBY2Nlc3Nvcih0LG4sZSkpKSk7bGV0IGk9d2Uuc29ydGVkSW5kZXgobix0LngpO2lmKDA9PW4ubGVuZ3RoKXJldHVybiBudWxsO2k9PT1uLmxlbmd0aD9pLT0xOjAhPT1pJiYoaT1NYXRoLmFicyhuW2ktMV0tdC54KTxNYXRoLmFicyhuW2ldLXQueCk/aS0xOmkpO2NvbnN0IHI9ZS5kYXRhKClbaV0sbz10aGlzLnNtb290aGluZ0VuYWJsZWQ/dGhpcy5zbW9vdGhlZEFjY2Vzc29yKHIsaSxlKTp0aGlzLnlWYWx1ZUFjY2Vzc29yKHIsaSxlKTtyZXR1cm57eDpuW2ldLHk6dGhpcy55U2NhbGUuc2NhbGUobyksZGF0dW06cixkYXRhc2V0OmV9fXJlc21vb3RoRGF0YXNldCh0KXtsZXQgZT10LmRhdGEoKTtjb25zdCBuPXRoaXMuc21vb3RoaW5nV2VpZ2h0O2xldCBpPWUubGVuZ3RoPjA/MDpOYU4scj0wO2NvbnN0IG89ZS5tYXAoKChlLG4pPT50aGlzLnlWYWx1ZUFjY2Vzc29yKGUsbix0KSkpLGE9by5ldmVyeSgodD0+dD09b1swXSkpO2UuZm9yRWFjaCgoKHQsZSk9Pntjb25zdCBzPW9bZV07aWYoYXx8IU51bWJlci5pc0Zpbml0ZShzKSl0LnNtb290aGVkPXM7ZWxzZXtpPWkqbisoMS1uKSpzLHIrKztsZXQgZT0xOzEhPT1uJiYoZT0xLU1hdGgucG93KG4scikpLHQuc21vb3RoZWQ9aS9lfX0pKX1nZXREYXRhc2V0KHQpe3JldHVybiB2b2lkIDA9PT10aGlzLm5hbWUyZGF0YXNldHNbdF0mJih0aGlzLm5hbWUyZGF0YXNldHNbdF09bmV3IG5fdC5EYXRhc2V0KFtdLHtuYW1lOnQsbWV0YTpudWxsfSkpLHRoaXMubmFtZTJkYXRhc2V0c1t0XX1zdGF0aWMgZ2V0WVNjYWxlRnJvbVR5cGUodCl7aWYodD09PWpfdC5MT0cpcmV0dXJuIG5ldyBIX3Q7aWYodD09PWpfdC5MSU5FQVIpcmV0dXJuIG5ldyBPX3Q7dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgeVNjYWxlIHR5cGUgIit0KX1zZXRWaXNpYmxlU2VyaWVzKHQpe3RoaXMuZGlzYWJsZUNoYW5nZXMoKSwodD10LnNvcnQoKSkucmV2ZXJzZSgpLHRoaXMuc2VyaWVzTmFtZXM9dH1kaXNhYmxlQ2hhbmdlcygpe3RoaXMuZGlydHlEYXRhc2V0cy5zaXplfHwodGhpcy5saW5lUGxvdC5kYXRhc2V0cyhbXSksdGhpcy5zbW9vdGhMaW5lUGxvdCYmdGhpcy5zbW9vdGhMaW5lUGxvdC5kYXRhc2V0cyhbXSksdGhpcy5tYXJnaW5BcmVhUGxvdCYmdGhpcy5tYXJnaW5BcmVhUGxvdC5kYXRhc2V0cyhbXSkpfWNvbW1pdENoYW5nZXMoKXt0aGlzLmRhdGFzZXRzPXRoaXMuc2VyaWVzTmFtZXMubWFwKCh0PT50aGlzLmdldERhdGFzZXQodCkpKSxbLi4udGhpcy5kaXJ0eURhdGFzZXRzXS5mb3JFYWNoKCh0PT57dGhpcy5zbW9vdGhpbmdFbmFibGVkJiZ0aGlzLnJlc21vb3RoRGF0YXNldCh0aGlzLmdldERhdGFzZXQodCkpfSkpLHRoaXMudXBkYXRlU3BlY2lhbERhdGFzZXRzKCksdGhpcy5saW5lUGxvdC5kYXRhc2V0cyh0aGlzLmRhdGFzZXRzKSx0aGlzLnNtb290aGluZ0VuYWJsZWQmJnRoaXMuc21vb3RoTGluZVBsb3QuZGF0YXNldHModGhpcy5kYXRhc2V0cyksdGhpcy5tYXJnaW5BcmVhUGxvdCYmdGhpcy5tYXJnaW5BcmVhUGxvdC5kYXRhc2V0cyh0aGlzLmRhdGFzZXRzKSx0aGlzLm1lYXN1cmVCQm94QW5kTWF5YmVJbnZhbGlkYXRlTGF5b3V0SW5SYWYoKSx0aGlzLmRpcnR5RGF0YXNldHMuY2xlYXIoKX1jcmVhdGVTYW1wbGVkRGF0YXNldEZvck1hcmtlcnModCl7Y29uc3QgZT10LmRhdGEoKTtpZihlLmxlbmd0aDw9MjApcmV0dXJuIHQ7Y29uc3Qgbj1NYXRoLmNlaWwoZS5sZW5ndGgvMjApLGk9bmV3IEFycmF5KE1hdGguZmxvb3IoZS5sZW5ndGgvbikpO2ZvcihsZXQgdD0wLHI9MDt0PGkubGVuZ3RoO3QrKyxyKz1uKWlbdF09ZVtyXTtyZXR1cm4gbmV3IG5fdC5EYXRhc2V0KGksdC5tZXRhZGF0YSgpKX1zZXRTZXJpZXNEYXRhKHQsZSl7dGhpcy5kaXNhYmxlQ2hhbmdlcygpLHRoaXMuZ2V0RGF0YXNldCh0KS5kYXRhKGUpLHRoaXMuZGlydHlEYXRhc2V0cy5hZGQodCl9c2V0U2VyaWVzTWV0YWRhdGEodCxlKXt0aGlzLmRpc2FibGVDaGFuZ2VzKCksdGhpcy5nZXREYXRhc2V0KHQpLm1ldGFkYXRhKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0aGlzLmdldERhdGFzZXQodCkubWV0YWRhdGEoKSkse21ldGE6ZX0pKSx0aGlzLmRpcnR5RGF0YXNldHMuYWRkKHQpfXNtb290aGluZ1VwZGF0ZSh0KXt0aGlzLnNtb290aGluZ1dlaWdodD10LHRoaXMuZGF0YXNldHMuZm9yRWFjaCgodD0+dGhpcy5yZXNtb290aERhdGFzZXQodCkpKSx0aGlzLnNtb290aGluZ0VuYWJsZWR8fCh0aGlzLmxpbmVQbG90LmFkZENsYXNzKCJnaG9zdCIpLHRoaXMuc2NhdHRlclBsb3QueSh0aGlzLnNtb290aGVkQWNjZXNzb3IsdGhpcy55U2NhbGUpLHRoaXMuc21vb3RoaW5nRW5hYmxlZD0hMCx0aGlzLnNtb290aExpbmVQbG90LmRhdGFzZXRzKHRoaXMuZGF0YXNldHMpKSx0aGlzLm1hcmtlcnNTY2F0dGVyUGxvdCYmdGhpcy5tYXJrZXJzU2NhdHRlclBsb3QueSh0aGlzLmdldFlBeGlzQWNjZXNzb3IoKSx0aGlzLnlTY2FsZSksdGhpcy51cGRhdGVTcGVjaWFsRGF0YXNldHMoKX1zbW9vdGhpbmdEaXNhYmxlKCl7dGhpcy5zbW9vdGhpbmdFbmFibGVkJiYodGhpcy5saW5lUGxvdC5yZW1vdmVDbGFzcygiZ2hvc3QiKSx0aGlzLnNjYXR0ZXJQbG90LnkodGhpcy55VmFsdWVBY2Nlc3Nvcix0aGlzLnlTY2FsZSksdGhpcy5zbW9vdGhMaW5lUGxvdC5kYXRhc2V0cyhbXSksdGhpcy5zbW9vdGhpbmdFbmFibGVkPSExLHRoaXMudXBkYXRlU3BlY2lhbERhdGFzZXRzKCkpLHRoaXMubWFya2Vyc1NjYXR0ZXJQbG90JiZ0aGlzLm1hcmtlcnNTY2F0dGVyUGxvdC55KHRoaXMuZ2V0WUF4aXNBY2Nlc3NvcigpLHRoaXMueVNjYWxlKX1zZXRDb2xvclNjYWxlKHQpe3RoaXMuY29sb3JTY2FsZT10fXNldFRvb2x0aXBDb2x1bW5zKHQpe3RoaXMudG9vbHRpcENvbHVtbnM9dH1zZXRUb29sdGlwU29ydGluZ01ldGhvZCh0KXt0aGlzLnRvb2x0aXBTb3J0aW5nTWV0aG9kPXR9cmVuZGVyVG8odCl7dGhpcy50YXJnZXRTVkc9dCx0aGlzLm91dGVyLnJlbmRlclRvKHQpLG51bGwhPXRoaXMuX2RlZmF1bHRYUmFuZ2UmJnRoaXMucmVzZXRYRG9tYWluKCksbnVsbCE9dGhpcy5fZGVmYXVsdFlSYW5nZSYmdGhpcy5yZXNldFlEb21haW4oKSx0aGlzLm1lYXN1cmVCQm94QW5kTWF5YmVJbnZhbGlkYXRlTGF5b3V0SW5SYWYoKX1yZWRyYXcoKXt3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fcmVkcmF3UmFmKSx0aGlzLl9yZWRyYXdSYWY9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKCk9Pnt0aGlzLm1lYXN1cmVCQm94QW5kTWF5YmVJbnZhbGlkYXRlTGF5b3V0KCksdGhpcy5vdXRlci5yZWRyYXcoKX0pKX1tZWFzdXJlQkJveEFuZE1heWJlSW52YWxpZGF0ZUxheW91dEluUmFmKCl7d2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX2ludmFsaWRhdGVMYXlvdXRSYWYpLHRoaXMuX2ludmFsaWRhdGVMYXlvdXRSYWY9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKCk9Pnt0aGlzLm1lYXN1cmVCQm94QW5kTWF5YmVJbnZhbGlkYXRlTGF5b3V0KCl9KSl9bWVhc3VyZUJCb3hBbmRNYXliZUludmFsaWRhdGVMYXlvdXQoKXtpZih0aGlzLl9sYXN0RHJhd0JCb3gpe2NvbnN0e3dpZHRoOnR9PXRoaXMuX2xhc3REcmF3QkJveCx7d2lkdGg6ZX09dGhpcy50YXJnZXRTVkcubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOzA9PXQmJnQ8ZSYmdGhpcy5vdXRlci5pbnZhbGlkYXRlQ2FjaGUoKX10aGlzLl9sYXN0RHJhd0JCb3g9dGhpcy50YXJnZXRTVkcubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpfWRlc3Ryb3koKXt3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fcmVkcmF3UmFmKSx3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5faW52YWxpZGF0ZUxheW91dFJhZiksdGhpcy5vdXRlciYmdGhpcy5vdXRlci5kZXN0cm95KCl9b25BbmNob3IodCl7dGhpcy5vdXRlciYmdGhpcy5vdXRlci5vbkFuY2hvcih0KX1pc0RhdGFGaXRUb0RvbWFpbigpe3JldHVybiB0KHRoaXMueEF4aXMuZ2V0U2NhbGUoKSkmJnQodGhpcy55QXhpcy5nZXRTY2FsZSgpKTtmdW5jdGlvbiB0KHQpe2NvbnN0IGU9dC5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpLG49dC5nZXRUcmFuc2Zvcm1hdGlvbkV4dGVudCgpO3JldHVybiBuWzBdPT09ZVswXSYmblsxXT09PWVbMV19fX0hKGZ1bmN0aW9uKHQpe3QuR1JPVVA9IkciLHQuRElWPSJESVYiLHQuU1ZHPSJTVkciLHQuVEVYVD0iVEVYVCJ9KShHX3R8fChHX3Q9e30pKTtjbGFzcyBZX3QgZXh0ZW5kcyBjbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnVuaXF1ZUlkPTAsdGhpcy5yb290PXR9ZXhwb3J0QXNTdHJpbmcoKXtjb25zdCB0PXRoaXMuY29udmVydCh0aGlzLnJvb3QpO2lmKCF0KXJldHVybiIiO2NvbnN0IGU9dGhpcy5jcmVhdGVSb290U3ZnKCk7cmV0dXJuIGUuYXBwZW5kQ2hpbGQodCksZS5vdXRlckhUTUx9Y3JlYXRlVW5pcXVlSWQodCl7cmV0dXJuYCR7dH1fJHt0aGlzLnVuaXF1ZUlkKyt9YH1nZXRTaXplKCl7cmV0dXJuIHRoaXMucm9vdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKX1jcmVhdGVSb290U3ZnKCl7Y29uc3QgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdmciKSxlPXRoaXMuZ2V0U2l6ZSgpO3JldHVybiB0LnNldEF0dHJpYnV0ZU5TKCJzdmciLCJ2aWV3Qm94IixgMCAwICR7ZS53aWR0aH0gJHtlLmhlaWdodH1gKSx0LnNldEF0dHJpYnV0ZSgieG1sbnMiLCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIpLHR9Y29udmVydCh0KXtsZXQgZT1udWxsO2NvbnN0IG49dC5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpO2lmKHQubm9kZVR5cGUhPU5vZGUuRUxFTUVOVF9OT0RFfHxuIT1HX3QuRElWJiZuIT1HX3QuU1ZHKWU9dC5jbG9uZU5vZGUoKTtlbHNle2U9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChHX3QuR1JPVVApO2NvbnN0IG49d2luZG93LmdldENvbXB1dGVkU3R5bGUodCksaT1wYXJzZUludChuLmxlZnQsMTApLHI9cGFyc2VJbnQobi50b3AsMTApO2lmKGl8fHIpe2NvbnN0IHQ9dGhpcy5jcmVhdGVVbmlxdWVJZCgiY2xpcCIpO2Uuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtpfSwgJHtyfSlgKSxlLnNldEF0dHJpYnV0ZSgiY2xpcC1wYXRoIixgdXJsKCMke3R9KWApO2NvbnN0IG89cGFyc2VJbnQobi53aWR0aCwxMCksYT1wYXJzZUludChuLmhlaWdodCwxMCkscz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJyZWN0Iik7cy5zZXRBdHRyaWJ1dGUoIndpZHRoIixTdHJpbmcobykpLHMuc2V0QXR0cmlidXRlKCJoZWlnaHQiLFN0cmluZyhhKSk7Y29uc3QgbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoInN2ZyIsImNsaXBQYXRoIik7bC5pZD10LGwuYXBwZW5kQ2hpbGQocyksZS5hcHBlbmRDaGlsZChsKX19cmV0dXJuIEFycmF5LmZyb20odC5jaGlsZE5vZGVzKS5tYXAoKHQ9PnRoaXMuY29udmVydCh0KSkpLmZpbHRlcihCb29sZWFuKS5mb3JFYWNoKCh0PT5lLmFwcGVuZENoaWxkKHQpKSksZS5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpPT1HX3QuR1JPVVAmJiFlLmhhc0NoaWxkTm9kZXMoKXx8dGhpcy5zaG91bGRPbWl0Tm9kZSh0KT9udWxsOnRoaXMuc3RyaXBDbGFzcyh0aGlzLnRyYW5zZmVyU3R5bGUodCxlKSl9c3RyaXBDbGFzcyh0KXtyZXR1cm4gdC5ub2RlVHlwZT09Tm9kZS5FTEVNRU5UX05PREUmJnQucmVtb3ZlQXR0cmlidXRlKCJjbGFzcyIpLHR9dHJhbnNmZXJTdHlsZSh0LGUpe2lmKGUubm9kZVR5cGUhPU5vZGUuRUxFTUVOVF9OT0RFKXJldHVybiBlO2NvbnN0IG49ZSxpPWUubm9kZU5hbWUudG9VcHBlckNhc2UoKSxyPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQpO3JldHVybiBpPT1HX3QuVEVYVCYmT2JqZWN0LmFzc2lnbihuLnN0eWxlLHtmb250RmFtaWx5OnIuZm9udEZhbWlseSxmb250U2l6ZTpyLmZvbnRTaXplLGZvbnRXZWlnaHQ6ci5mb250V2VpZ2h0fSksaSE9R190LkdST1VQJiYobi5zZXRBdHRyaWJ1dGUoImZpbGwiLHIuZmlsbCksbi5zZXRBdHRyaWJ1dGUoInN0cm9rZSIsci5zdHJva2UpLG4uc2V0QXR0cmlidXRlKCJzdHJva2Utd2lkdGgiLHIuc3Ryb2tlV2lkdGgpKSwiMSIhPXIub3BhY2l0eSYmbi5zZXRBdHRyaWJ1dGUoIm9wYWNpdHkiLHIub3BhY2l0eSksZX1zaG91bGRPbWl0Tm9kZSh0KXtyZXR1cm4hMX19e3Nob3VsZE9taXROb2RlKHQpe3JldHVybiB0Lm5vZGVUeXBlPT1Ob2RlLkVMRU1FTlRfTk9ERSYmdC5jbGFzc0xpc3QuY29udGFpbnMoInNjYXR0ZXItcGxvdCIpfX10bCh7bW9kdWxlTmFtZToidnotcGFuLXpvb20tc3R5bGUiLHN0eWxlQ29udGVudDoiXG4gICAgLmhlbHAge1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGFuaW1hdGlvbi1kZWxheTogMXM7XG4gICAgICBhbmltYXRpb24tZHVyYXRpb246IDFzO1xuICAgICAgYW5pbWF0aW9uLW5hbWU6IGZhZGUtb3V0O1xuICAgICAgYmFja2dyb3VuZDogcmdiYSgzMCwgMzAsIDMwLCAwLjYpO1xuICAgICAgYm90dG9tOiAwO1xuICAgICAgY29sb3I6ICNmZmY7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICBsZWZ0OiAwO1xuICAgICAgb3BhY2l0eTogMTtcbiAgICAgIHBhZGRpbmc6IDIwcHg7XG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHJpZ2h0OiAwO1xuICAgICAgdG9wOiAwO1xuICAgIH1cblxuICAgIC5oZWxwID4gc3BhbiB7XG4gICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xuICAgIH1cblxuICAgIEBrZXlmcmFtZXMgZmFkZS1vdXQge1xuICAgICAgMCUge1xuICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgfVxuXG4gICAgICAxMDAlIHtcbiAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgIH1cbiAgICB9XG4gICJ9KTtjb25zdCBYX3Q9b190KDQpLCRfdD10PT5pc05hTih0KT8iTmFOIjpYX3QodCksS190PVt7dGl0bGU6Ik5hbWUiLGV2YWx1YXRlOnQ9PnQuZGF0YXNldC5tZXRhZGF0YSgpLm5hbWV9LHt0aXRsZToiU21vb3RoZWQiLGV2YWx1YXRlKHQsZSl7Y29uc3R7c21vb3RoaW5nRW5hYmxlZDpufT1lO3JldHVybiAkX3Qobj90LmRhdHVtLnNtb290aGVkOnQuZGF0dW0uc2NhbGFyKX19LHt0aXRsZToiVmFsdWUiLGV2YWx1YXRlOnQ9PiRfdCh0LmRhdHVtLnNjYWxhcil9LHt0aXRsZToiU3RlcCIsZXZhbHVhdGU6dD0+YV90KHQuZGF0dW0uc3RlcCl9LHt0aXRsZToiVGltZSIsZXZhbHVhdGU6dD0+bF90KHQuZGF0dW0ud2FsbF90aW1lKX0se3RpdGxlOiJSZWxhdGl2ZSIsZXZhbHVhdGU6dD0+dV90KGNfdCh0LmRhdHVtLDAsdC5kYXRhc2V0KSl9XTtsZXQgWl90PWNsYXNzIGV4dGVuZHModHIoeWUpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2xvclNjYWxlPShuZXcgbl90LlNjYWxlcy5Db2xvcikucmFuZ2UodEEuc2xpY2UoMCkpLHRoaXMuc21vb3RoaW5nRW5hYmxlZD0hMSx0aGlzLnNtb290aGluZ1dlaWdodD0uNix0aGlzLnhUeXBlPW51bGwsdGhpcy54Q29tcG9uZW50c0NyZWF0aW9uTWV0aG9kPW51bGwsdGhpcy55VmFsdWVBY2Nlc3Nvcj10PT50LnNjYWxhcix0aGlzLnRvb2x0aXBDb2x1bW5zPUtfdCx0aGlzLnlTY2FsZVR5cGU9al90LkxJTkVBUix0aGlzLmlnbm9yZVlPdXRsaWVycz0hMSx0aGlzLnRvb2x0aXBTb3J0aW5nTWV0aG9kPSJkZWZhdWx0Iix0aGlzLnRvb2x0aXBQb3NpdGlvbj12X3QuQk9UVE9NLHRoaXMuX3Zpc2libGVTZXJpZXNDYWNoZT1bXSx0aGlzLl9zZXJpZXNEYXRhQ2FjaGU9e30sdGhpcy5fc2VyaWVzTWV0YWRhdGFDYWNoZT17fSx0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQ9bnVsbH1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5zY29wZVN1YnRyZWUodGhpcy4kLmNoYXJ0ZGl2LCEwKX1hdHRhY2hlZCgpe2NvbnN0IHQ9e2NhcHR1cmU6ITAscGFzc2l2ZTohMH07dGhpcy5fbGlzdGVuKHRoaXMsIm1vdXNlZG93biIsdGhpcy5fb25Nb3VzZURvd24uYmluZCh0aGlzKSx0KSx0aGlzLl9saXN0ZW4odGhpcywibW91c2V1cCIsdGhpcy5fb25Nb3VzZVVwLmJpbmQodGhpcyksdCksdGhpcy5fbGlzdGVuKHdpbmRvdywia2V5ZG93biIsdGhpcy5fb25LZXlEb3duLmJpbmQodGhpcyksdCksdGhpcy5fbGlzdGVuKHdpbmRvdywia2V5dXAiLHRoaXMuX29uS2V5VXAuYmluZCh0aGlzKSx0KX1kZXRhY2hlZCgpe3RoaXMuY2FuY2VsQXN5bmModGhpcy5fbWFrZUNoYXJ0QXN5bmNDYWxsYmFja0lkKSx0aGlzLl9jaGFydCYmKHRoaXMuX2NoYXJ0LmRlc3Ryb3koKSx0aGlzLl9jaGFydD12b2lkIDApLHRoaXMuX2xpc3RlbmVycyYmKHRoaXMuX2xpc3RlbmVycy5mb3JFYWNoKCgoe25vZGU6dCxldmVudE5hbWU6ZSxmdW5jOm4sb3B0aW9uOml9KT0+e3QucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLG4saSl9KSksdGhpcy5fbGlzdGVuZXJzLmNsZWFyKCkpfV9saXN0ZW4odCxlLG4saT17fSl7dGhpcy5fbGlzdGVuZXJzfHwodGhpcy5fbGlzdGVuZXJzPW5ldyBTZXQpLHRoaXMuX2xpc3RlbmVycy5hZGQoe25vZGU6dCxldmVudE5hbWU6ZSxmdW5jOm4sb3B0aW9uOml9KSx0LmFkZEV2ZW50TGlzdGVuZXIoZSxuLGkpfV9vbktleURvd24odCl7dGhpcy50b2dnbGVDbGFzcygicGFua2V5IixXX3QuaXNQYW5LZXkodCkpfV9vbktleVVwKHQpe3RoaXMudG9nZ2xlQ2xhc3MoInBhbmtleSIsV190LmlzUGFuS2V5KHQpKX1fb25Nb3VzZURvd24odCl7dGhpcy50b2dnbGVDbGFzcygibW91c2Vkb3duIiwhMCl9X29uTW91c2VVcCh0KXt0aGlzLnRvZ2dsZUNsYXNzKCJtb3VzZWRvd24iLCExKX1pc0RhdGFGaXRUb0RvbWFpbigpe3JldHVybiF0aGlzLl9jaGFydHx8dGhpcy5fY2hhcnQuaXNEYXRhRml0VG9Eb21haW4oKX1zZXRWaXNpYmxlU2VyaWVzKHQpe3dlLmlzRXF1YWwodGhpcy5fdmlzaWJsZVNlcmllc0NhY2hlLHQpfHwodGhpcy5fdmlzaWJsZVNlcmllc0NhY2hlPXQpfXNldFNlcmllc0RhdGEodCxlKXt0aGlzLl9zZXJpZXNEYXRhQ2FjaGVbdF09ZSx0aGlzLl9jaGFydCYmdGhpcy5fY2hhcnQuc2V0U2VyaWVzRGF0YSh0LGUpfXNldFNlcmllc01ldGFkYXRhKHQsZSl7dGhpcy5fc2VyaWVzTWV0YWRhdGFDYWNoZVt0XT1lLHRoaXMuX2NoYXJ0JiZ0aGlzLl9jaGFydC5zZXRTZXJpZXNNZXRhZGF0YSh0LGUpfWNvbW1pdENoYW5nZXMoKXt0aGlzLl9jaGFydCYmdGhpcy5fY2hhcnQuY29tbWl0Q2hhbmdlcygpfXJlc2V0RG9tYWluKCl7dGhpcy5fY2hhcnQmJnRoaXMuX2NoYXJ0LnJlc2V0RG9tYWluKCl9cmVkcmF3KCl7dGhpcy5fY2hhcnQmJnRoaXMuX2NoYXJ0LnJlZHJhdygpfV9tYWtlQ2hhcnQoKXtudWxsIT09dGhpcy5fbWFrZUNoYXJ0QXN5bmNDYWxsYmFja0lkJiYodGhpcy5jYW5jZWxBc3luYyh0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQpLHRoaXMuX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZD1udWxsKSx0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQ9dGhpcy5hc3luYygoZnVuY3Rpb24oKXt0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQ9bnVsbDtsZXQgdD10aGlzLnhDb21wb25lbnRzQ3JlYXRpb25NZXRob2Q7aWYodGhpcy54VHlwZXx8dD90aGlzLnhUeXBlJiYodD0oKT0+aF90KHRoaXMueFR5cGUpKTp0PXNfdCx0JiZ0aGlzLnlWYWx1ZUFjY2Vzc29yJiZ0aGlzLnRvb2x0aXBDb2x1bW5zKXt2YXIgZT1uZXcgcV90KHQsdGhpcy55VmFsdWVBY2Nlc3Nvcix0aGlzLnlTY2FsZVR5cGUsdGhpcy5jb2xvclNjYWxlLHRoaXMuJC50b29sdGlwLHRoaXMudG9vbHRpcENvbHVtbnMsdGhpcy5maWxsQXJlYSx0aGlzLmRlZmF1bHRYUmFuZ2UsdGhpcy5kZWZhdWx0WVJhbmdlLHRoaXMuc3ltYm9sRnVuY3Rpb24sdGhpcy54QXhpc0Zvcm1hdHRlciksbj13dSh0aGlzLiQuY2hhcnRkaXYpO2UucmVuZGVyVG8obiksdGhpcy5fY2hhcnQmJnRoaXMuX2NoYXJ0LmRlc3Ryb3koKSx0aGlzLl9jaGFydD1lLHRoaXMuX2NoYXJ0Lm9uQW5jaG9yKCgoKT0+dGhpcy5maXJlKCJjaGFydC1hdHRhY2hlZCIpKSl9fSksMzUwKX1fcmVsb2FkRnJvbUNhY2hlKCl7dGhpcy5fY2hhcnQmJih0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGUuZm9yRWFjaCgodD0+e3RoaXMuX2NoYXJ0LnNldFNlcmllc0RhdGEodCx0aGlzLl9zZXJpZXNEYXRhQ2FjaGVbdF18fFtdKX0pKSx0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGUuZmlsdGVyKCh0PT50aGlzLl9zZXJpZXNNZXRhZGF0YUNhY2hlW3RdKSkuZm9yRWFjaCgodD0+e3RoaXMuX2NoYXJ0LnNldFNlcmllc01ldGFkYXRhKHQsdGhpcy5fc2VyaWVzTWV0YWRhdGFDYWNoZVt0XSl9KSksdGhpcy5fY2hhcnQuc2V0VmlzaWJsZVNlcmllcyh0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGUpLHRoaXMuX2NoYXJ0LmNvbW1pdENoYW5nZXMoKSl9X3Ntb290aGluZ0NoYW5nZWQoKXt0aGlzLl9jaGFydCYmKHRoaXMuc21vb3RoaW5nRW5hYmxlZD90aGlzLl9jaGFydC5zbW9vdGhpbmdVcGRhdGUodGhpcy5zbW9vdGhpbmdXZWlnaHQpOnRoaXMuX2NoYXJ0LnNtb290aGluZ0Rpc2FibGUoKSl9X291dGxpZXJzQ2hhbmdlZCgpe3RoaXMuX2NoYXJ0JiZ0aGlzLl9jaGFydC5pZ25vcmVZT3V0bGllcnModGhpcy5pZ25vcmVZT3V0bGllcnMpfV9jb2xvclNjYWxlQ2hhbmdlZCgpe3RoaXMuX2NoYXJ0JiYodGhpcy5fY2hhcnQuc2V0Q29sb3JTY2FsZSh0aGlzLmNvbG9yU2NhbGUpLHRoaXMuX2NoYXJ0LnJlZHJhdygpKX1fdG9vbHRpcENvbHVtbnNDaGFuZ2VkKCl7dGhpcy5fY2hhcnQmJnRoaXMuX2NoYXJ0LnNldFRvb2x0aXBDb2x1bW5zKHRoaXMudG9vbHRpcENvbHVtbnMpfV90b29sdGlwU29ydGluZ01ldGhvZENoYW5nZWQoKXt0aGlzLl9jaGFydCYmdGhpcy5fY2hhcnQuc2V0VG9vbHRpcFNvcnRpbmdNZXRob2QodGhpcy50b29sdGlwU29ydGluZ01ldGhvZCl9Z2V0RXhwb3J0ZXIoKXtyZXR1cm4gbmV3IFlfdCh0aGlzLiQuY2hhcnRkaXYpfX07Wl90LnRlbXBsYXRlPV9lYAogICAgPGRpdiBpZD0iY2hhcnRkaXYiPjwvZGl2PgogICAgPHZ6LWNoYXJ0LXRvb2x0aXAKICAgICAgaWQ9InRvb2x0aXAiCiAgICAgIHBvc2l0aW9uPSJbW3Rvb2x0aXBQb3NpdGlvbl1dIgogICAgICBjb250ZW50LWNvbXBvbmVudC1uYW1lPSJ2ei1saW5lLWNoYXJ0LXRvb2x0aXAiCiAgICA+PC92ei1jaGFydC10b29sdGlwPgogICAgPHN0eWxlIGluY2x1ZGU9InBsb3R0YWJsZS1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZSBpbmNsdWRlPSJ2ei1wYW4tem9vbS1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KICAgICAgZGl2IHsKICAgICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICB9CgogICAgICAjY2hhcnRkaXYgLm1haW4gewogICAgICAgIGNvbnRhaW46IHN0cmljdDsKICAgICAgICBjdXJzb3I6IGNyb3NzaGFpcjsKICAgICAgfQoKICAgICAgOmhvc3QoLnBhbmtleSkgI2NoYXJ0ZGl2IDpub3QoLmRyYWctem9vbWluZykgLm1haW4gewogICAgICAgIGN1cnNvcjogLXdlYmtpdC1ncmFiOwogICAgICAgIGN1cnNvcjogZ3JhYjsKICAgICAgfQoKICAgICAgOmhvc3QoLm1vdXNlZG93bikgI2NoYXJ0ZGl2IC5wYW5uaW5nIC5tYWluIHsKICAgICAgICBjdXJzb3I6IC13ZWJraXQtZ3JhYmJpbmc7CiAgICAgICAgY3Vyc29yOiBncmFiYmluZzsKICAgICAgfQoKICAgICAgI2NoYXJ0ZGl2IHsKICAgICAgICBjb250YWluOiBzdHJpY3Q7CiAgICAgIH0KCiAgICAgICNjaGFydGRpdiBsaW5lLmd1aWRlLWxpbmUgewogICAgICAgIHN0cm9rZTogIzk5OTsKICAgICAgICBzdHJva2Utd2lkdGg6IDEuNXB4OwogICAgICB9CiAgICAgICNjaGFydGRpdjpob3ZlciAubWFpbiB7CiAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsKICAgICAgfQoKICAgICAgLmdob3N0IHsKICAgICAgICBvcGFjaXR5OiAwLjI7CiAgICAgICAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgICAgIH0KCiAgICAgIC5wbG90dGFibGUgLmF4aXMgdGV4dCB7CiAgICAgICAgZmlsbDogY3VycmVudENvbG9yOwogICAgICB9CgogICAgICAucGxvdHRhYmxlIC5ncmlkbGluZXMgbGluZSB7CiAgICAgICAgc3Ryb2tlOiB2YXIoLS10Yi1zZWNvbmRhcnktdGV4dC1jb2xvcik7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYCx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixuX3QuU2NhbGVzLkNvbG9yKV0sWl90LnByb3RvdHlwZSwiY29sb3JTY2FsZSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLFpfdC5wcm90b3R5cGUsInN5bWJvbEZ1bmN0aW9uIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbixub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFpfdC5wcm90b3R5cGUsInNtb290aGluZ0VuYWJsZWQiLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXJ9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sWl90LnByb3RvdHlwZSwic21vb3RoaW5nV2VpZ2h0Iix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLFpfdC5wcm90b3R5cGUsInhUeXBlIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sWl90LnByb3RvdHlwZSwieENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZCIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLFpfdC5wcm90b3R5cGUsInhBeGlzRm9ybWF0dGVyIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sWl90LnByb3RvdHlwZSwieVZhbHVlQWNjZXNzb3IiLHZvaWQgMCksdChbbyh7dHlwZTpBcnJheX0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLFpfdC5wcm90b3R5cGUsInRvb2x0aXBDb2x1bW5zIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLFpfdC5wcm90b3R5cGUsImZpbGxBcmVhIix2b2lkIDApLHQoW28oe3R5cGU6QXJyYXl9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSxaX3QucHJvdG90eXBlLCJkZWZhdWx0WFJhbmdlIix2b2lkIDApLHQoW28oe3R5cGU6QXJyYXl9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSxaX3QucHJvdG90eXBlLCJkZWZhdWx0WVJhbmdlIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLFpfdC5wcm90b3R5cGUsInlTY2FsZVR5cGUiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxaX3QucHJvdG90eXBlLCJpZ25vcmVZT3V0bGllcnMiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sWl90LnByb3RvdHlwZSwidG9vbHRpcFNvcnRpbmdNZXRob2QiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sWl90LnByb3RvdHlwZSwidG9vbHRpcFBvc2l0aW9uIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLFpfdC5wcm90b3R5cGUsIl9jaGFydCIsdm9pZCAwKSx0KFtvKHt0eXBlOkFycmF5fSksZSgiZGVzaWduOnR5cGUiLEFycmF5KV0sWl90LnByb3RvdHlwZSwiX3Zpc2libGVTZXJpZXNDYWNoZSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxaX3QucHJvdG90eXBlLCJfc2VyaWVzRGF0YUNhY2hlIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLFpfdC5wcm90b3R5cGUsIl9zZXJpZXNNZXRhZGF0YUNhY2hlIix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLFpfdC5wcm90b3R5cGUsIl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQiLHZvaWQgMCksdChbYSgieENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZCIsInhUeXBlIiwieVZhbHVlQWNjZXNzb3IiLCJ5U2NhbGVUeXBlIiwiaXNBdHRhY2hlZCIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sWl90LnByb3RvdHlwZSwiX21ha2VDaGFydCIsbnVsbCksdChbYSgiX2NoYXJ0IiwiX3Zpc2libGVTZXJpZXNDYWNoZSIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sWl90LnByb3RvdHlwZSwiX3JlbG9hZEZyb21DYWNoZSIsbnVsbCksdChbYSgic21vb3RoaW5nRW5hYmxlZCIsInNtb290aGluZ1dlaWdodCIsIl9jaGFydCIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sWl90LnByb3RvdHlwZSwiX3Ntb290aGluZ0NoYW5nZWQiLG51bGwpLHQoW2EoImlnbm9yZVlPdXRsaWVycyIsIl9jaGFydCIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sWl90LnByb3RvdHlwZSwiX291dGxpZXJzQ2hhbmdlZCIsbnVsbCksdChbYSgiY29sb3JTY2FsZSIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sWl90LnByb3RvdHlwZSwiX2NvbG9yU2NhbGVDaGFuZ2VkIixudWxsKSx0KFthKCJ0b29sdGlwQ29sdW1ucyIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sWl90LnByb3RvdHlwZSwiX3Rvb2x0aXBDb2x1bW5zQ2hhbmdlZCIsbnVsbCksdChbYSgidG9vbHRpcFNvcnRpbmdNZXRob2QiLCJfY2hhcnQiKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFpfdC5wcm90b3R5cGUsIl90b29sdGlwU29ydGluZ01ldGhvZENoYW5nZWQiLG51bGwpLFpfdD10KFtpKCJ2ei1saW5lLWNoYXJ0MiIpXSxaX3QpO2xldCBKX3Q9Y2xhc3MgZXh0ZW5kcyB5ZXt9O0pfdC50ZW1wbGF0ZT1fZWAKICAgIDxkaXYgY2xhc3M9ImNvbnRlbnQiPgogICAgICA8dGFibGU+CiAgICAgICAgPHRoZWFkPjwvdGhlYWQ+CiAgICAgICAgPHRib2R5PjwvdGJvZHk+CiAgICAgIDwvdGFibGU+CiAgICA8L2Rpdj4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAuY29udGVudCB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjgpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICB0YWJsZSB7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjRlbTsKICAgICAgICBtYXJnaW4tdG9wOiAxMHB4OwogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgfQoKICAgICAgdGhlYWQgewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgfQoKICAgICAgdGJvZHkgewogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBsaW5lLWhlaWdodDogMjFweDsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CgogICAgICB0ZCB7CiAgICAgICAgcGFkZGluZzogMCA1cHg7CiAgICAgIH0KCiAgICAgIC5zd2F0Y2ggewogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBoZWlnaHQ6IDE4cHg7CiAgICAgICAgd2lkdGg6IDE4cHg7CiAgICAgIH0KCiAgICAgIC5jbG9zZXN0IC5zd2F0Y2ggewogICAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDJweCAjZmZmOwogICAgICB9CgogICAgICB0aCB7CiAgICAgICAgcGFkZGluZzogMCA1cHg7CiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKICAgICAgfQoKICAgICAgLmRpc3RhbnQgdGQ6bm90KC5zd2F0Y2gpIHsKICAgICAgICBvcGFjaXR5OiAwLjg7CiAgICAgIH0KCiAgICAgIC5naG9zdCB7CiAgICAgICAgb3BhY2l0eTogMC4yOwogICAgICAgIHN0cm9rZS13aWR0aDogMXB4OwogICAgICB9CiAgICA8L3N0eWxlPgogIGAsSl90PXQoW2koInZ6LWxpbmUtY2hhcnQtdG9vbHRpcCIpXSxKX3QpO2NvbnN0IFFfdD1bXSx0eXQ9d2UudGhyb3R0bGUoKGZ1bmN0aW9uIHQoKXtpZigwPT1RX3QubGVuZ3RoKXJldHVybjtjb25zdCBlPVFfdC5zaGlmdCgpO2UmJmUuYWN0aXZlJiYoZS5yZWRyYXcoKSxlLl9tYXliZVJlbmRlcmVkSW5CYWRTdGF0ZT0hMSksd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKDApLHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodCl9KSwxMDApO2xldCBleXQ9Y2xhc3MgZXh0ZW5kcyhwX3QodHIoeWUpKSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3JlZHJhd1JhZj1udWxsLHRoaXMuYWN0aXZlPSExLHRoaXMubG9nU2NhbGVBY3RpdmU9ITEsdGhpcy5jb2xvclNjYWxlPXtzY2FsZTpBT30sdGhpcy5fcmVzZXREb21haW5Pbk5leHRMb2FkPSEwLHRoaXMuX21heWJlUmVuZGVyZWRJbkJhZFN0YXRlPSExfW9uTG9hZEZpbmlzaCgpe3RoaXMuY29tbWl0Q2hhbmdlcygpLHRoaXMuZGF0YVRvTG9hZC5sZW5ndGg+MCYmdGhpcy5fcmVzZXREb21haW5Pbk5leHRMb2FkJiYodGhpcy5fcmVzZXREb21haW5Pbk5leHRMb2FkPSExLHRoaXMuZ2V0Q2hhcnQoKS5yZXNldERvbWFpbigpKSx0aGlzLnJlZHJhdygpfWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSxudWxsIT09dGhpcy5fcmVkcmF3UmFmJiZjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yZWRyYXdSYWYpfWV4cG9ydEFzU3ZnU3RyaW5nKCl7cmV0dXJuIHRoaXMuZ2V0Q2hhcnQoKS5nZXRFeHBvcnRlcigpLmV4cG9ydEFzU3RyaW5nKCl9Z2V0Q2hhcnQoKXtyZXR1cm4gdGhpcy4kLmNoYXJ0fXJlc2V0RG9tYWluKCl7dGhpcy5nZXRDaGFydCgpLnJlc2V0RG9tYWluKCl9c2V0U2VyaWVzRGF0YSh0LGUpe3RoaXMuZ2V0Q2hhcnQoKS5zZXRTZXJpZXNEYXRhKHQsZSl9c2V0U2VyaWVzTWV0YWRhdGEodCxlKXt0aGlzLmdldENoYXJ0KCkuc2V0U2VyaWVzTWV0YWRhdGEodCxlKX1jb21taXRDaGFuZ2VzKCl7dGhpcy5nZXRDaGFydCgpLmNvbW1pdENoYW5nZXMoKX1yZWRyYXcoKXtudWxsIT09dGhpcy5fcmVkcmF3UmFmJiZjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yZWRyYXdSYWYpLHRoaXMuX3JlZHJhd1JhZj13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgoKT0+e3RoaXMuYWN0aXZlP3RoaXMuZ2V0Q2hhcnQoKS5yZWRyYXcoKTp0aGlzLl9tYXliZVJlbmRlcmVkSW5CYWRTdGF0ZT0hMH0pKX1fbG9hZEtleUNoYW5nZWQoKXt0aGlzLnJlc2V0KCksdGhpcy5fcmVzZXREb21haW5Pbk5leHRMb2FkPSEwfV9kYXRhU2VyaWVzQ2hhbmdlZCgpe3RoaXMuZ2V0Q2hhcnQoKS5zZXRWaXNpYmxlU2VyaWVzKHRoaXMuZGF0YVNlcmllcyl9X2xvZ1NjYWxlQ2hhbmdlZCh0KXt0aGlzLmdldENoYXJ0KCkueVNjYWxlVHlwZT10P2pfdC5MT0c6al90LkxJTkVBUix0aGlzLnJlZHJhdygpfV9maXhCYWRTdGF0ZVdoZW5BY3RpdmUoKXt0aGlzLmFjdGl2ZSYmdGhpcy5fbWF5YmVSZW5kZXJlZEluQmFkU3RhdGUmJihRX3QucHVzaCh0aGlzKSx0eXQoKSl9X29uQ2hhcnRBdHRhY2hlZCgpe3RoaXMuYWN0aXZlfHwodGhpcy5fbWF5YmVSZW5kZXJlZEluQmFkU3RhdGU9ITApfX07ZXl0LnRlbXBsYXRlPV9lYAogICAgPGRpdiBpZD0iY2hhcnQtYW5kLXNwaW5uZXItY29udGFpbmVyIj4KICAgICAgPHZ6LWxpbmUtY2hhcnQyCiAgICAgICAgaWQ9ImNoYXJ0IgogICAgICAgIGRhdGEtbG9hZGluZyQ9IltbZGF0YUxvYWRpbmddXSIKICAgICAgICBkYXRhLWxvYWRlZC1vbmNlJD0iW1tkYXRhTG9hZGVkQXRMZWFzdE9uY2VdXSIKICAgICAgICBjb2xvci1zY2FsZT0iW1tjb2xvclNjYWxlXV0iCiAgICAgICAgZGVmYXVsdC14LXJhbmdlPSJbW2RlZmF1bHRYUmFuZ2VdXSIKICAgICAgICBkZWZhdWx0LXktcmFuZ2U9IltbZGVmYXVsdFlSYW5nZV1dIgogICAgICAgIGZpbGwtYXJlYT0iW1tmaWxsQXJlYV1dIgogICAgICAgIGlnbm9yZS15LW91dGxpZXJzPSJbW2lnbm9yZVlPdXRsaWVyc11dIgogICAgICAgIG9uLWNoYXJ0LWF0dGFjaGVkPSJfb25DaGFydEF0dGFjaGVkIgogICAgICAgIHNtb290aGluZy1lbmFibGVkPSJbW3Ntb290aGluZ0VuYWJsZWRdXSIKICAgICAgICBzbW9vdGhpbmctd2VpZ2h0PSJbW3Ntb290aGluZ1dlaWdodF1dIgogICAgICAgIHN5bWJvbC1mdW5jdGlvbj0iW1tzeW1ib2xGdW5jdGlvbl1dIgogICAgICAgIHRvb2x0aXAtY29sdW1ucz0iW1t0b29sdGlwQ29sdW1uc11dIgogICAgICAgIHRvb2x0aXAtcG9zaXRpb249IltbdG9vbHRpcFBvc2l0aW9uXV0iCiAgICAgICAgdG9vbHRpcC1zb3J0aW5nLW1ldGhvZD0iW1t0b29sdGlwU29ydGluZ01ldGhvZF1dIgogICAgICAgIHgtY29tcG9uZW50cy1jcmVhdGlvbi1tZXRob2Q9IltbeENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZF1dIgogICAgICAgIHgtdHlwZT0iW1t4VHlwZV1dIgogICAgICAgIHktdmFsdWUtYWNjZXNzb3I9IltbeVZhbHVlQWNjZXNzb3JdXSIKICAgICAgPjwvdnotbGluZS1jaGFydDI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tkYXRhTG9hZGluZ11dIj4KICAgICAgICA8ZGl2IGlkPSJsb2FkaW5nLXNwaW5uZXItY29udGFpbmVyIj4KICAgICAgICAgIDxwYXBlci1zcGlubmVyLWxpdGUgYWN0aXZlPSIiPjwvcGFwZXItc3Bpbm5lci1saXRlPgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICB9CgogICAgICA6aG9zdChbX21heWJlLXJlbmRlcmVkLWluLWJhZC1zdGF0ZV0pIHZ6LWxpbmUtY2hhcnQgewogICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgICAgfQoKICAgICAgI2NoYXJ0LWFuZC1zcGlubmVyLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAjbG9hZGluZy1zcGlubmVyLWNvbnRhaW5lciB7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIHRvcDogMDsKICAgICAgfQoKICAgICAgdnotbGluZS1jaGFydDIgewogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgfQoKICAgICAgdnotbGluZS1jaGFydDJbZGF0YS1sb2FkaW5nXSB7CiAgICAgICAgb3BhY2l0eTogMC4zOwogICAgICB9CiAgICA8L3N0eWxlPgogIGAsdChbbyh7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfZml4QmFkU3RhdGVXaGVuQWN0aXZlIn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sZXl0LnByb3RvdHlwZSwiYWN0aXZlIix2b2lkIDApLHQoW28oe3R5cGU6QXJyYXl9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSxleXQucHJvdG90eXBlLCJkYXRhU2VyaWVzIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLGhyKV0sZXl0LnByb3RvdHlwZSwicmVxdWVzdE1hbmFnZXIiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfbG9nU2NhbGVDaGFuZ2VkIn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sZXl0LnByb3RvdHlwZSwibG9nU2NhbGVBY3RpdmUiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZXl0LnByb3RvdHlwZSwieENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZCIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxleXQucHJvdG90eXBlLCJ4VHlwZSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLGV5dC5wcm90b3R5cGUsInlWYWx1ZUFjY2Vzc29yIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLGV5dC5wcm90b3R5cGUsImZpbGxBcmVhIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sZXl0LnByb3RvdHlwZSwic21vb3RoaW5nRW5hYmxlZCIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxleXQucHJvdG90eXBlLCJzbW9vdGhpbmdXZWlnaHQiLHZvaWQgMCksdChbbyh7dHlwZTpBcnJheX0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLGV5dC5wcm90b3R5cGUsInRvb2x0aXBDb2x1bW5zIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLGV5dC5wcm90b3R5cGUsInRvb2x0aXBTb3J0aW5nTWV0aG9kIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLGV5dC5wcm90b3R5cGUsInRvb2x0aXBQb3NpdGlvbiIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGV5dC5wcm90b3R5cGUsImlnbm9yZVlPdXRsaWVycyIsdm9pZCAwKSx0KFtvKHt0eXBlOkFycmF5fSksZSgiZGVzaWduOnR5cGUiLEFycmF5KV0sZXl0LnByb3RvdHlwZSwiZGVmYXVsdFhSYW5nZSIsdm9pZCAwKSx0KFtvKHt0eXBlOkFycmF5fSksZSgiZGVzaWduOnR5cGUiLEFycmF5KV0sZXl0LnByb3RvdHlwZSwiZGVmYXVsdFlSYW5nZSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLGV5dC5wcm90b3R5cGUsInN5bWJvbEZ1bmN0aW9uIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLGV5dC5wcm90b3R5cGUsImNvbG9yU2NhbGUiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxleXQucHJvdG90eXBlLCJfcmVzZXREb21haW5Pbk5leHRMb2FkIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGV5dC5wcm90b3R5cGUsIl9tYXliZVJlbmRlcmVkSW5CYWRTdGF0ZSIsdm9pZCAwKSx0KFthKCJsb2FkS2V5IiksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pLGUoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxleXQucHJvdG90eXBlLCJfbG9hZEtleUNoYW5nZWQiLG51bGwpLHQoW2EoImRhdGFTZXJpZXMuKiIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sZXl0LnByb3RvdHlwZSwiX2RhdGFTZXJpZXNDaGFuZ2VkIixudWxsKSxleXQ9dChbaSgidGYtbGluZS1jaGFydC1kYXRhLWxvYWRlciIpXSxleXQpLHRsKHttb2R1bGVOYW1lOiJ0Zi1jdXN0b20tc2NhbGFyLWNhcmQtc3R5bGUiLHN0eWxlQ29udGVudDoiXG4gICAgOmhvc3Qge1xuICAgICAgbWFyZ2luOiA1cHggMTBweDtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIHdpZHRoOiAzMzBweDtcbiAgICAgIHZlcnRpY2FsLWFsaWduOiB0ZXh0LXRvcDtcbiAgICB9XG5cbiAgICA6aG9zdChbX2V4cGFuZGVkXSkge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgfVxuXG4gICAgOmhvc3QoW19leHBhbmRlZF0pICN0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyLWNvbnRhaW5lciB7XG4gICAgICBoZWlnaHQ6IDQwMHB4O1xuICAgIH1cblxuICAgIGgxIHtcbiAgICAgIGZvbnQtc2l6ZTogMTlweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gICAgfVxuXG4gICAgI3RmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXItY29udGFpbmVyIHtcbiAgICAgIGhlaWdodDogMjAwcHg7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG5cbiAgICAjYnV0dG9ucyB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICB9XG5cbiAgICBwYXBlci1pY29uLWJ1dHRvbiB7XG4gICAgICBjb2xvcjogIzIxOTZmMztcbiAgICAgIGJvcmRlci1yYWRpdXM6IDEwMCU7XG4gICAgICB3aWR0aDogMzJweDtcbiAgICAgIGhlaWdodDogMzJweDtcbiAgICAgIHBhZGRpbmc6IDRweDtcbiAgICB9XG5cbiAgICBwYXBlci1pY29uLWJ1dHRvbltzZWxlY3RlZF0ge1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0tdGItdWktbGlnaHQtYWNjZW50KTtcbiAgICB9XG5cbiAgICAuZG93bmxvYWQtbGlua3Mge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGhlaWdodDogMzJweDtcbiAgICB9XG5cbiAgICAuZG93bmxvYWQtbGlua3MgYSB7XG4gICAgICBmb250LXNpemU6IDEwcHg7XG4gICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XG4gICAgICBtYXJnaW46IDJweDtcbiAgICB9XG5cbiAgICAuZG93bmxvYWQtbGlua3MgcGFwZXItZHJvcGRvd24tbWVudSB7XG4gICAgICB3aWR0aDogMTAwcHg7XG4gICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1sYWJlbDoge1xuICAgICAgICBmb250LXNpemU6IDEwcHg7XG4gICAgICB9XG4gICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDoge1xuICAgICAgICBmb250LXNpemU6IDEwcHg7XG4gICAgICB9XG4gICAgfVxuICAifSk7Y2xhc3Mgbnl0e2NvbnN0cnVjdG9yKHQsZSxuLGkscil7dGhpcy5ydW49dCx0aGlzLnRhZz1lLHRoaXMubmFtZT1uLHRoaXMuc2NhbGFyRGF0YT1pLHRoaXMuc3ltYm9sPXJ9Z2V0TmFtZSgpe3JldHVybiB0aGlzLm5hbWV9c2V0RGF0YSh0KXt0aGlzLnNjYWxhckRhdGE9dH1nZXREYXRhKCl7cmV0dXJuIHRoaXMuc2NhbGFyRGF0YX1nZXRSdW4oKXtyZXR1cm4gdGhpcy5ydW59Z2V0VGFnKCl7cmV0dXJuIHRoaXMudGFnfWdldFN5bWJvbCgpe3JldHVybiB0aGlzLnN5bWJvbH19ZnVuY3Rpb24gaXl0KHQsZSl7cmV0dXJuYCR7ZX0gKCR7dH0pYH1jbGFzcyByeXR7Y29uc3RydWN0b3IodCl7dGhpcy5ydW5CYXNlZENvbG9yU2NhbGU9dH1zY2FsZSh0KXtyZXR1cm4gdGhpcy5ydW5CYXNlZENvbG9yU2NhbGUuc2NhbGUodGhpcy5wYXJzZVJ1bk5hbWUodCkpfXBhcnNlUnVuTmFtZSh0KXtjb25zdCBlPXQubWF0Y2goL1woKC4qKVwpJC8pO3JldHVybiBlP2VbMV06IiJ9fWxldCBveXQ9Y2xhc3MgZXh0ZW5kcyh0cih5ZSkpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmFjdGl2ZT0hMCx0aGlzLl9jb2xvclNjYWxlPW5ldyByeXQoe3NjYWxlOkFPfSksdGhpcy5fbmFtZVRvRGF0YVNlcmllcz17fSx0aGlzLl9leHBhbmRlZD0hMSx0aGlzLl9yZXF1ZXN0RGF0YT0odCxlLG4pPT57Y29uc3QgaT1ncigpLnBsdWdpblJvdXRlKCJjdXN0b21fc2NhbGFycyIsIi9zY2FsYXJzIik7UHJvbWlzZS5hbGwodC5tYXAoKHQ9Pntjb25zdCBuPVZPKGkse3RhZzp0aGlzLl90YWdGaWx0ZXIscnVuOnR9KTtyZXR1cm4gdGhpcy5yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KG4pLnRoZW4oKG49PntlKHtpdGVtOnQsZGF0YTpufSl9KSl9KSkpLmZpbmFsbHkoKCgpPT57bigpfSkpfSx0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleD17fSx0aGlzLl9tYXRjaGVzTGlzdE9wZW5lZD0hMSx0aGlzLl9maWxsQXJlYT17bG93ZXJBY2Nlc3Nvcjp0PT50Lmxvd2VyLGhpZ2hlckFjY2Vzc29yOnQ9PnQudXBwZXJ9LHRoaXMuX3Rvb2x0aXBDb2x1bW5zPSgoKT0+e2NvbnN0IHQ9b190KDQpLGU9ZT0+aXNOYU4oZSk/Ik5hTiI6dChlKTtyZXR1cm5be3RpdGxlOiJOYW1lIixldmFsdWF0ZTp0PT50LmRhdGFzZXQubWV0YWRhdGEoKS5uYW1lfSx7dGl0bGU6IlZhbHVlIixldmFsdWF0ZTp0PT5lKHQuZGF0dW0uc2NhbGFyKX0se3RpdGxlOiJMb3dlciBNYXJnaW4iLGV2YWx1YXRlOnQ9PmUodC5kYXR1bS5sb3dlcil9LHt0aXRsZToiVXBwZXIgTWFyZ2luIixldmFsdWF0ZTp0PT5lKHQuZGF0dW0udXBwZXIpfSx7dGl0bGU6IlN0ZXAiLGV2YWx1YXRlOnQ9PmFfdCh0LmRhdHVtLnN0ZXApfSx7dGl0bGU6IlRpbWUiLGV2YWx1YXRlOnQ9PmxfdCh0LmRhdHVtLndhbGxfdGltZSl9LHt0aXRsZToiUmVsYXRpdmUiLGV2YWx1YXRlOnQ9PnVfdChjX3QodC5kYXR1bSwwLHQuZGF0YXNldCkpfV19KSgpLHRoaXMuX21pc3NpbmdUYWdzPVtdLHRoaXMuX21pc3NpbmdUYWdzQ29sbGFwc2libGVPcGVuZWQ9ITF9cmVsb2FkKCl7dGhpcy4kLmxvYWRlci5yZWxvYWQoKX1yZWRyYXcoKXt0aGlzLiQubG9hZGVyLnJlZHJhdygpfV90b2dnbGVFeHBhbmRlZCh0KXt0aGlzLnNldCgiX2V4cGFuZGVkIiwhdGhpcy5fZXhwYW5kZWQpLHRoaXMucmVkcmF3KCl9X3RvZ2dsZUxvZ1NjYWxlKCl7dGhpcy5zZXQoIl9sb2dTY2FsZUFjdGl2ZSIsIXRoaXMuX2xvZ1NjYWxlQWN0aXZlKX1fcmVzZXREb21haW4oKXtjb25zdCB0PXRoaXMuJC5sb2FkZXI7dCYmdC5yZXNldERvbWFpbigpfV9jc3ZVcmwodCxlKXtyZXR1cm4gZT9WTyh0aGlzLl9kb3dubG9hZERhdGFVcmwodCxlKSx7Zm9ybWF0OiJjc3YifSk6IiJ9X2pzb25VcmwodCxlKXtyZXR1cm4gZT9WTyh0aGlzLl9kb3dubG9hZERhdGFVcmwodCxlKSx7Zm9ybWF0OiJqc29uIn0pOiIifV9kb3dubG9hZERhdGFVcmwodCxlKXtjb25zdCBuPXRbZV0saT17dGFnOm4uZ2V0VGFnKCkscnVuOm4uZ2V0UnVuKCl9O3JldHVybiBWTyhncigpLnBsdWdpblJvdXRlKCJjdXN0b21fc2NhbGFycyIsIi9kb3dubG9hZF9kYXRhIiksaSl9X2NyZWF0ZVByb2Nlc3NEYXRhRnVuY3Rpb24odCl7cmV0dXJuKGUsbixpKT0+e2lmKCFpLnJlZ2V4X3ZhbGlkKXJldHVybiB2b2lkIHRoaXMuc2V0KCJfdGFnRmlsdGVySW52YWxpZCIsITApO2NvbnN0IHI9d2UuY2xvbmUodGhpcy5fbmFtZVRvRGF0YVNlcmllcyksbz1bXTt3ZS5mb3JFYWNoKHQsKHQ9PntsZXQgZT0hMTtjb25zdCBhPWkudGFnX3RvX2V2ZW50c1t0LnZhbHVlXSxzPWkudGFnX3RvX2V2ZW50c1t0Lmxvd2VyXSxsPWkudGFnX3RvX2V2ZW50c1t0LnVwcGVyXTtpZih3ZS5pc1VuZGVmaW5lZChhKSYmKG8ucHVzaCh0LnZhbHVlKSxlPSEwKSx3ZS5pc1VuZGVmaW5lZChzKSYmKG8ucHVzaCh0Lmxvd2VyKSxlPSEwKSx3ZS5pc1VuZGVmaW5lZChsKSYmKG8ucHVzaCh0LnVwcGVyKSxlPSEwKSxlKXJldHVybjtjb25zdCBjPXQ9PnRbMV0sdT10aGlzLl9maW5kU3RlcE1pc21hdGNoKHQsYS5tYXAoYykscy5tYXAoYyksbC5tYXAoYykpO2lmKHUpcmV0dXJuIHZvaWQgdGhpcy5zZXQoIl9zdGVwc01pc21hdGNoIix1KTtjb25zdCBoPXQ9PnRbMl0sZD1hLm1hcCgoKHQsZSk9Pih7d2FsbF90aW1lOm5ldyBEYXRlKDFlMyp0WzBdKSxzdGVwOmModCksc2NhbGFyOmgodCksbG93ZXI6aChzW2VdKSx1cHBlcjpoKGxbZV0pfSkpKSxwPWl5dChuLHQudmFsdWUpLGY9cltwXTtpZihmKWYuc2V0RGF0YShkKTtlbHNle2NvbnN0IGU9dGhpcy5fY3JlYXRlTmV3RGF0YVNlcmllcyhuLHQudmFsdWUscCxkKTtyW3BdPWV9fSkpLHRoaXMuc2V0KCJfbmFtZVRvRGF0YVNlcmllcyIscik7Y29uc3QgYT13ZS5maW5kSW5kZXgodGhpcy5fbWlzc2luZ1RhZ3MsKHQ9PnQucnVuPT09bikpO2lmKG8ubGVuZ3RoJiYzIT1vLmxlbmd0aCl7Y29uc3QgdD17cnVuOm4sdGFnczpvfTthPj0wP3RoaXMuc3BsaWNlKCJfbWlzc2luZ1RhZ3MiLGEsMSx0KTp0aGlzLnB1c2goIl9taXNzaW5nVGFncyIsdCl9ZWxzZSBhPj0wJiZ0aGlzLnNwbGljZSgiX21pc3NpbmdUYWdzIixhLDEpfX1fZmluZFN0ZXBNaXNtYXRjaCh0LGUsbixpKXtyZXR1cm4gd2UuaXNFcXVhbChuLGUpJiZ3ZS5pc0VxdWFsKGksZSk/bnVsbDp7c2VyaWVzT2JqZWN0OnQsdmFsdWVTdGVwczplLGxvd2VyU3RlcHM6bix1cHBlclN0ZXBzOml9fV9jcmVhdGVOZXdEYXRhU2VyaWVzKHQsZSxuLGkpe3RoaXMuX3J1blRvTmV4dEF2YWlsYWJsZVN5bWJvbEluZGV4W3RdfD0wO2NvbnN0IHI9bmV3IG55dCh0LGUsbixpLGlfdFt0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFt0XV0pO3JldHVybiB0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFt0XT0odGhpcy5fcnVuVG9OZXh0QXZhaWxhYmxlU3ltYm9sSW5kZXhbdF0rMSklaV90Lmxlbmd0aCxyfV91cGRhdGVDaGFydCgpe3dlLmZvck93bih0aGlzLl9uYW1lVG9EYXRhU2VyaWVzLCh0PT57dGhpcy4kLmxvYWRlci5zZXRTZXJpZXNEYXRhKHQuZ2V0TmFtZSgpLHQuZ2V0RGF0YSgpKX0pKSx0aGlzLiQubG9hZGVyLmNvbW1pdENoYW5nZXMoKX1nZXQgX3Nlcmllc05hbWVzKCl7Y29uc3QgdD1uZXcgU2V0KHRoaXMucnVucyk7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMuX25hbWVUb0RhdGFTZXJpZXMpLmZpbHRlcigoKFtlLG5dKT0+dC5oYXMobi5ydW4pKSkubWFwKCgoW3RdKT0+dCkpfV9kZXRlcm1pbmVDb2xvcih0LGUpe3JldHVybiB0LnNjYWxlKGUpfV9yZWZyZXNoRGF0YVNlcmllcygpe3RoaXMuc2V0KCJfbmFtZVRvRGF0YVNlcmllcyIse30pfV9jcmVhdGVTeW1ib2xGdW5jdGlvbigpe3JldHVybiB0PT50aGlzLl9uYW1lVG9EYXRhU2VyaWVzW3RdLmdldFN5bWJvbCgpLm1ldGhvZCgpfV9kZXRlcm1pbmVTeW1ib2wodCxlKXtyZXR1cm4gdFtlXS5nZXRTeW1ib2woKS5jaGFyYWN0ZXJ9Z2V0IF90YWdGaWx0ZXIoKXtyZXR1cm4gd2UuZmxhdHRlbih0aGlzLm1hcmdpbkNoYXJ0U2VyaWVzLm1hcCgodD0+W3QudmFsdWUsdC5sb3dlcix0LnVwcGVyXSkpKS5tYXAoKHQ9PiIoIit0aGlzLl9lc2NhcGVSZWdleENoYXJhY3RlcnModCkrIikiKSkuam9pbigifCIpfV9lc2NhcGVSZWdleENoYXJhY3RlcnModCl7cmV0dXJuIHQucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xdXFxdL2csIlxcJCYiKX1fZ2V0VG9nZ2xlQ29sbGFwc2libGVJY29uKHQpe3JldHVybiB0PyJleHBhbmQtbGVzcyI6ImV4cGFuZC1tb3JlIn1fdG9nZ2xlTWF0Y2hlc09wZW4oKXt0aGlzLnNldCgiX21hdGNoZXNMaXN0T3BlbmVkIiwhdGhpcy5fbWF0Y2hlc0xpc3RPcGVuZWQpfWdldCBfdGl0bGVEaXNwbGF5U3RyaW5nKCl7cmV0dXJuIHRoaXMudGl0bGV8fCJ1bnRpdGxlZCJ9X3NlcGFyYXRlV2l0aENvbW1hcyh0KXtyZXR1cm4gdC5qb2luKCIsICIpfV90b2dnbGVNaXNzaW5nVGFnc0NvbGxhcHNpYmxlT3Blbigpe3RoaXMuc2V0KCJfbWlzc2luZ1RhZ3NDb2xsYXBzaWJsZU9wZW5lZCIsIXRoaXMuX21pc3NpbmdUYWdzQ29sbGFwc2libGVPcGVuZWQpfV9tYXRjaExpc3RFbnRyeUNvbG9yVXBkYXRlZCgpe2NvbnN0IHQ9dGhpcy4kJCgiI21hdGNoLWxpc3QtcmVwZWF0Iik7dCYmdGhpcy5yb290LnF1ZXJ5U2VsZWN0b3JBbGwoIi5tYXRjaC1saXN0LWVudHJ5IikuZm9yRWFjaCgoZT0+e2NvbnN0IG49dC5pdGVtRm9yRWxlbWVudChlKTtlLnN0eWxlLmNvbG9yPXRoaXMuX2RldGVybWluZUNvbG9yKHRoaXMuX2NvbG9yU2NhbGUsbil9KSl9fTtveXQudGVtcGxhdGU9X2VgCiAgICA8dGYtY2FyZC1oZWFkaW5nIGRpc3BsYXktbmFtZT0iW1tfdGl0bGVEaXNwbGF5U3RyaW5nXV0iPjwvdGYtY2FyZC1oZWFkaW5nPgogICAgPGRpdiBpZD0idGYtbGluZS1jaGFydC1kYXRhLWxvYWRlci1jb250YWluZXIiPgogICAgICA8dGYtbGluZS1jaGFydC1kYXRhLWxvYWRlcgogICAgICAgIGlkPSJsb2FkZXIiCiAgICAgICAgYWN0aXZlPSJbW2FjdGl2ZV1dIgogICAgICAgIGNvbG9yLXNjYWxlPSJbW19jb2xvclNjYWxlXV0iCiAgICAgICAgZGF0YS1zZXJpZXM9IltbX3Nlcmllc05hbWVzXV0iCiAgICAgICAgZmlsbC1hcmVhPSJbW19maWxsQXJlYV1dIgogICAgICAgIGlnbm9yZS15LW91dGxpZXJzPSJbW2lnbm9yZVlPdXRsaWVyc11dIgogICAgICAgIGxvYWQta2V5PSJbW190YWdGaWx0ZXJdXSIKICAgICAgICBkYXRhLXRvLWxvYWQ9IltbcnVuc11dIgogICAgICAgIHJlcXVlc3QtZGF0YT0iW1tfcmVxdWVzdERhdGFdXSIKICAgICAgICBsb2ctc2NhbGUtYWN0aXZlPSJbW19sb2dTY2FsZUFjdGl2ZV1dIgogICAgICAgIGxvYWQtZGF0YS1jYWxsYmFjaz0iW1tfY3JlYXRlUHJvY2Vzc0RhdGFGdW5jdGlvbihtYXJnaW5DaGFydFNlcmllcyldXSIKICAgICAgICByZXF1ZXN0LW1hbmFnZXI9IltbcmVxdWVzdE1hbmFnZXJdXSIKICAgICAgICBzeW1ib2wtZnVuY3Rpb249IltbX2NyZWF0ZVN5bWJvbEZ1bmN0aW9uKCldXSIKICAgICAgICB0b29sdGlwLWNvbHVtbnM9IltbX3Rvb2x0aXBDb2x1bW5zXV0iCiAgICAgICAgdG9vbHRpcC1zb3J0aW5nLW1ldGhvZD0iW1t0b29sdGlwU29ydGluZ01ldGhvZF1dIgogICAgICAgIHgtdHlwZT0iW1t4VHlwZV1dIgogICAgICA+CiAgICAgIDwvdGYtbGluZS1jaGFydC1kYXRhLWxvYWRlcj4KICAgIDwvZGl2PgogICAgPGRpdiBpZD0iYnV0dG9ucyI+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIHNlbGVjdGVkJD0iW1tfZXhwYW5kZWRdXSIKICAgICAgICBpY29uPSJmdWxsc2NyZWVuIgogICAgICAgIG9uLXRhcD0iX3RvZ2dsZUV4cGFuZGVkIgogICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgc2VsZWN0ZWQkPSJbW19sb2dTY2FsZUFjdGl2ZV1dIgogICAgICAgIGljb249ImxpbmUtd2VpZ2h0IgogICAgICAgIG9uLXRhcD0iX3RvZ2dsZUxvZ1NjYWxlIgogICAgICAgIHRpdGxlPSJUb2dnbGUgeS1heGlzIGxvZyBzY2FsZSIKICAgICAgPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIGljb249InNldHRpbmdzLW92ZXJzY2FuIgogICAgICAgIG9uLXRhcD0iX3Jlc2V0RG9tYWluIgogICAgICAgIHRpdGxlPSJGaXQgZG9tYWluIHRvIGRhdGEiCiAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICA8c3BhbiBzdHlsZT0iZmxleC1ncm93OiAxIj48L3NwYW4+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzaG93RG93bmxvYWRMaW5rc11dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJkb3dubG9hZC1saW5rcyI+CiAgICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudQogICAgICAgICAgICBuby1sYWJlbC1mbG9hdD0idHJ1ZSIKICAgICAgICAgICAgbGFiZWw9InNlcmllcyB0byBkb3dubG9hZCIKICAgICAgICAgICAgc2VsZWN0ZWQtaXRlbS1sYWJlbD0ie3tfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkfX0iCiAgICAgICAgICA+CiAgICAgICAgICAgIDxwYXBlci1saXN0Ym94IGNsYXNzPSJkcm9wZG93bi1jb250ZW50IiBzbG90PSJkcm9wZG93bi1jb250ZW50Ij4KICAgICAgICAgICAgICA8dGVtcGxhdGUKICAgICAgICAgICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgICAgICAgICAgaXRlbXM9IltbX3Nlcmllc05hbWVzXV0iCiAgICAgICAgICAgICAgICBhcz0iZGF0YVNlcmllc05hbWUiCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0gbm8tbGFiZWwtZmxvYXQ9InRydWUiCiAgICAgICAgICAgICAgICAgID5bW2RhdGFTZXJpZXNOYW1lXV08L3BhcGVyLWl0ZW0KICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgICAgICA8YQogICAgICAgICAgICBkb3dubG9hZD0iW1tfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkXV0uY3N2IgogICAgICAgICAgICBocmVmPSJbW19jc3ZVcmwoX25hbWVUb0RhdGFTZXJpZXMsIF9kYXRhU2VyaWVzTmFtZVRvRG93bmxvYWQpXV0iCiAgICAgICAgICAgID5DU1Y8L2EKICAgICAgICAgID4KICAgICAgICAgIDxhCiAgICAgICAgICAgIGRvd25sb2FkPSJbW19kYXRhU2VyaWVzTmFtZVRvRG93bmxvYWRdXS5qc29uIgogICAgICAgICAgICBocmVmPSJbW19qc29uVXJsKF9uYW1lVG9EYXRhU2VyaWVzLCBfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkKV1dIgogICAgICAgICAgICA+SlNPTjwvYQogICAgICAgICAgPgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CgogICAgPCEtLSBoZXJlIC0tPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19taXNzaW5nVGFncy5sZW5ndGhdXSI+CiAgICAgIDxkaXYgY2xhc3M9ImNvbGxhcHNpYmxlLWxpc3QtdGl0bGUiPgogICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgICAgaWNvbj0iW1tfZ2V0VG9nZ2xlQ29sbGFwc2libGVJY29uKF9taXNzaW5nVGFnc0NvbGxhcHNpYmxlT3BlbmVkKV1dIgogICAgICAgICAgb24tY2xpY2s9Il90b2dnbGVNaXNzaW5nVGFnc0NvbGxhcHNpYmxlT3BlbiIKICAgICAgICAgIGNsYXNzPSJ0b2dnbGUtY29sbGFwc2libGUtYnV0dG9uIgogICAgICAgID4KICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgIDxzcGFuIGNsYXNzPSJjb2xsYXBzaWJsZS10aXRsZS10ZXh0Ij4KICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0iaWNvbnM6ZXJyb3IiPjwvaXJvbi1pY29uPiBNaXNzaW5nIFRhZ3MKICAgICAgICA8L3NwYW4+CiAgICAgIDwvZGl2PgogICAgICA8aXJvbi1jb2xsYXBzZSBvcGVuZWQ9IltbX21pc3NpbmdUYWdzQ29sbGFwc2libGVPcGVuZWRdXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iZXJyb3ItY29udGVudCI+CiAgICAgICAgICA8aXJvbi1pY29uIGNsYXNzPSJlcnJvci1pY29uIiBpY29uPSJpY29uczplcnJvciI+PC9pcm9uLWljb24+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19taXNzaW5nVGFnc11dIiBhcz0ibWlzc2luZ0VudHJ5Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWlzc2luZy10YWdzLWZvci1ydW4tY29udGFpbmVyIj4KICAgICAgICAgICAgICBSdW4gIltbbWlzc2luZ0VudHJ5LnJ1bl1dIiBsYWNrcyBkYXRhIGZvciB0YWdzCiAgICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgICAgPHRlbXBsYXRlCiAgICAgICAgICAgICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgICAgICAgICAgICBpdGVtcz0iW1ttaXNzaW5nRW50cnkudGFnc11dIgogICAgICAgICAgICAgICAgICBhcz0idGFnIgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICA8bGk+W1t0YWddXTwvbGk+CiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9pcm9uLWNvbGxhcHNlPgogICAgPC90ZW1wbGF0ZT4KCiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3RhZ0ZpbHRlckludmFsaWRdXSI+CiAgICAgIDxkaXYgY2xhc3M9ImVycm9yLWNvbnRlbnQiPgogICAgICAgIDxpcm9uLWljb24gY2xhc3M9ImVycm9yLWljb24iIGljb249Imljb25zOmVycm9yIj48L2lyb24taWNvbj4KICAgICAgICBUaGlzIHJlZ3VsYXIgZXhwcmVzaW9uIGlzIGludmFsaWQ6PGJyIC8+CiAgICAgICAgPHNwYW4gY2xhc3M9ImludmFsaWQtcmVnZXgiPltbX3RhZ0ZpbHRlcl1dPC9zcGFuPgogICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19zdGVwc01pc21hdGNoXV0iPgogICAgICA8ZGl2IGNsYXNzPSJlcnJvci1jb250ZW50Ij4KICAgICAgICA8aXJvbi1pY29uIGNsYXNzPSJlcnJvci1pY29uIiBpY29uPSJpY29uczplcnJvciI+PC9pcm9uLWljb24+CiAgICAgICAgVGhlIHN0ZXBzIGZvciB2YWx1ZSwgbG93ZXIsIGFuZCB1cHBlciB0YWdzIGRvIG5vdCBtYXRjaDoKICAgICAgICA8dWw+CiAgICAgICAgICA8bGk+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0YWctbmFtZSI+W1tfc3RlcHNNaXNtYXRjaC5zZXJpZXNPYmplY3QudmFsdWVdXTwvc3Bhbj46CiAgICAgICAgICAgIFtbX3NlcGFyYXRlV2l0aENvbW1hcyhfc3RlcHNNaXNtYXRjaC52YWx1ZVN0ZXBzKV1dCiAgICAgICAgICA8L2xpPgogICAgICAgICAgPGxpPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0idGFnLW5hbWUiPltbX3N0ZXBzTWlzbWF0Y2guc2VyaWVzT2JqZWN0Lmxvd2VyXV08L3NwYW4+OgogICAgICAgICAgICBbW19zZXBhcmF0ZVdpdGhDb21tYXMoX3N0ZXBzTWlzbWF0Y2gubG93ZXJTdGVwcyldXQogICAgICAgICAgPC9saT4KICAgICAgICAgIDxsaT4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRhZy1uYW1lIj5bW19zdGVwc01pc21hdGNoLnNlcmllc09iamVjdC51cHBlcl1dPC9zcGFuPjoKICAgICAgICAgICAgW1tfc2VwYXJhdGVXaXRoQ29tbWFzKF9zdGVwc01pc21hdGNoLnVwcGVyU3RlcHMpXV0KICAgICAgICAgIDwvbGk+CiAgICAgICAgPC91bD4KICAgICAgPC9kaXY+CiAgICA8L3RlbXBsYXRlPgoKICAgIDxkaXYgaWQ9Im1hdGNoZXMtY29udGFpbmVyIj4KICAgICAgPGRpdiBjbGFzcz0iY29sbGFwc2libGUtbGlzdC10aXRsZSI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19zZXJpZXNOYW1lcy5sZW5ndGhdXSI+CiAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICAgICAgaWNvbj0iW1tfZ2V0VG9nZ2xlQ29sbGFwc2libGVJY29uKF9tYXRjaGVzTGlzdE9wZW5lZCldXSIKICAgICAgICAgICAgb24tY2xpY2s9Il90b2dnbGVNYXRjaGVzT3BlbiIKICAgICAgICAgICAgY2xhc3M9InRvZ2dsZS1tYXRjaGVzLWJ1dHRvbiIKICAgICAgICAgID4KICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgPHNwYW4gY2xhc3M9ImNvbGxhcHNpYmxlLXRpdGxlLXRleHQiPgogICAgICAgICAgTWF0Y2hlcyAoW1tfc2VyaWVzTmFtZXMubGVuZ3RoXV0pCiAgICAgICAgPC9zcGFuPgogICAgICA8L2Rpdj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19zZXJpZXNOYW1lcy5sZW5ndGhdXSI+CiAgICAgICAgPGlyb24tY29sbGFwc2Ugb3BlbmVkPSJbW19tYXRjaGVzTGlzdE9wZW5lZF1dIj4KICAgICAgICAgIDxkaXYgaWQ9Im1hdGNoZXMtbGlzdCI+CiAgICAgICAgICAgIDx0ZW1wbGF0ZQogICAgICAgICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgICAgICAgIGl0ZW1zPSJbW19zZXJpZXNOYW1lc11dIgogICAgICAgICAgICAgIGFzPSJzZXJpZXNOYW1lIgogICAgICAgICAgICAgIGlkPSJtYXRjaC1saXN0LXJlcGVhdCIKICAgICAgICAgICAgICBvbi1kb20tY2hhbmdlPSJfbWF0Y2hMaXN0RW50cnlDb2xvclVwZGF0ZWQiCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtYXRjaC1saXN0LWVudHJ5Ij4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtYXRjaC1lbnRyeS1zeW1ib2wiPgogICAgICAgICAgICAgICAgICBbW19kZXRlcm1pbmVTeW1ib2woX25hbWVUb0RhdGFTZXJpZXMsIHNlcmllc05hbWUpXV0KICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgIFtbc2VyaWVzTmFtZV1dCiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2lyb24tY29sbGFwc2U+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L2Rpdj4KCiAgICA8c3R5bGUgaW5jbHVkZT0idGYtY3VzdG9tLXNjYWxhci1jYXJkLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAuZXJyb3ItY29udGVudCB7CiAgICAgICAgYmFja2dyb3VuZDogI2YwMDsKICAgICAgICBib3JkZXItcmFkaXVzOiA1cHg7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgbWFyZ2luOiAxMHB4IDAgMCAwOwogICAgICAgIHBhZGRpbmc6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5lcnJvci1pY29uIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBmaWxsOiAjZmZmOwogICAgICAgIG1hcmdpbjogMCBhdXRvIDVweCBhdXRvOwogICAgICB9CgogICAgICAuaW52YWxpZC1yZWdleCB7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgIH0KCiAgICAgIC5lcnJvci1jb250ZW50IHVsIHsKICAgICAgICBtYXJnaW46IDFweCAwIDAgMDsKICAgICAgICBwYWRkaW5nOiAwIDAgMCAxOXB4OwogICAgICB9CgogICAgICAudGFnLW5hbWUgewogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICB9CgogICAgICAuY29sbGFwc2libGUtbGlzdC10aXRsZSB7CiAgICAgICAgbWFyZ2luOiAxMHB4IDAgNXB4IDA7CiAgICAgIH0KCiAgICAgIC5jb2xsYXBzaWJsZS10aXRsZS10ZXh0IHsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgICB9CgogICAgICAjbWF0Y2hlcy1saXN0IHsKICAgICAgICBtYXgtaGVpZ2h0OiAyMDBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CgogICAgICAubWF0Y2gtbGlzdC1lbnRyeSB7CiAgICAgICAgbWFyZ2luOiAwIDAgNXB4IDA7CiAgICAgIH0KCiAgICAgIC5tYXRjaC1lbnRyeS1zeW1ib2wgewogICAgICAgIGZvbnQtZmFtaWx5OiBhcmlhbCwgc2Fucy1zZXJpZjsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgd2lkdGg6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5taXNzaW5nLXRhZ3MtZm9yLXJ1bi1jb250YWluZXIgewogICAgICAgIG1hcmdpbjogOHB4IDAgMCAwOwogICAgICB9CiAgICA8L3N0eWxlPgogIGAsdChbbyh7dHlwZTpBcnJheX0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLG95dC5wcm90b3R5cGUsInJ1bnMiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sb3l0LnByb3RvdHlwZSwieFR5cGUiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxveXQucHJvdG90eXBlLCJhY3RpdmUiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sb3l0LnByb3RvdHlwZSwidGl0bGUiLHZvaWQgMCksdChbbyh7dHlwZTpBcnJheX0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLG95dC5wcm90b3R5cGUsIm1hcmdpbkNoYXJ0U2VyaWVzIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sb3l0LnByb3RvdHlwZSwiaWdub3JlWU91dGxpZXJzIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLGhyKV0sb3l0LnByb3RvdHlwZSwicmVxdWVzdE1hbmFnZXIiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxveXQucHJvdG90eXBlLCJzaG93RG93bmxvYWRMaW5rcyIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxveXQucHJvdG90eXBlLCJ0YWdNZXRhZGF0YSIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxveXQucHJvdG90eXBlLCJ0b29sdGlwU29ydGluZ01ldGhvZCIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxveXQucHJvdG90eXBlLCJfY29sb3JTY2FsZSIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLG95dC5wcm90b3R5cGUsIl90YWdGaWx0ZXJJbnZhbGlkIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLG95dC5wcm90b3R5cGUsIl9uYW1lVG9EYXRhU2VyaWVzIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLG95dC5wcm90b3R5cGUsIl9leHBhbmRlZCIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLG95dC5wcm90b3R5cGUsIl9sb2dTY2FsZUFjdGl2ZSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLG95dC5wcm90b3R5cGUsIl9yZXF1ZXN0RGF0YSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxveXQucHJvdG90eXBlLCJfcnVuVG9OZXh0QXZhaWxhYmxlU3ltYm9sSW5kZXgiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxveXQucHJvdG90eXBlLCJfbWF0Y2hlc0xpc3RPcGVuZWQiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sb3l0LnByb3RvdHlwZSwiX2ZpbGxBcmVhIix2b2lkIDApLHQoW28oe3R5cGU6QXJyYXl9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSxveXQucHJvdG90eXBlLCJfdG9vbHRpcENvbHVtbnMiLHZvaWQgMCksdChbbyh7dHlwZTpBcnJheX0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLG95dC5wcm90b3R5cGUsIl9taXNzaW5nVGFncyIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLG95dC5wcm90b3R5cGUsIl9taXNzaW5nVGFnc0NvbGxhcHNpYmxlT3BlbmVkIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLG95dC5wcm90b3R5cGUsIl9zdGVwc01pc21hdGNoIix2b2lkIDApLHQoW2EoIl9uYW1lVG9EYXRhU2VyaWVzIiksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pLGUoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxveXQucHJvdG90eXBlLCJfdXBkYXRlQ2hhcnQiLG51bGwpLHQoW3MoIl9uYW1lVG9EYXRhU2VyaWVzIiwicnVucyIpLGUoImRlc2lnbjp0eXBlIixPYmplY3QpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLG95dC5wcm90b3R5cGUsIl9zZXJpZXNOYW1lcyIsbnVsbCksdChbYSgiX3RhZ0ZpbHRlciIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sb3l0LnByb3RvdHlwZSwiX3JlZnJlc2hEYXRhU2VyaWVzIixudWxsKSx0KFtzKCJtYXJnaW5DaGFydFNlcmllcyIpLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLG95dC5wcm90b3R5cGUsIl90YWdGaWx0ZXIiLG51bGwpLHQoW3MoInRpdGxlIiksZSgiZGVzaWduOnR5cGUiLFN0cmluZyksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sb3l0LnByb3RvdHlwZSwiX3RpdGxlRGlzcGxheVN0cmluZyIsbnVsbCksb3l0PXQoW2koInRmLWN1c3RvbS1zY2FsYXItbWFyZ2luLWNoYXJ0LWNhcmQiKV0sb3l0KTt2YXIgYXl0PU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLFRZUEVTOltdLGdldFJ1bnNOYW1lZDpmdW5jdGlvbiBzeXQodCl7cmV0dXJuIHdlLmtleXModCkuc29ydChlcil9LGdldFRhZ3M6b3IsZmlsdGVyVGFnczpmdW5jdGlvbiBseXQodCxlKXtsZXQgbj1bXTtyZXR1cm4gZS5mb3JFYWNoKChlPT5uPW4uY29uY2F0KHRbZV0pKSksd2UudW5pcShuKS5zb3J0KGVyKX0sTGlzdGVuS2V5OnBsLEJhc2VTdG9yZTpmbCxDYW5jZWxsZXI6Tk8sRW52aXJvbm1lbnRTdG9yZTptbCxlbnZpcm9ubWVudFN0b3JlOmdsLEV4cGVyaW1lbnRzU3RvcmU6TU8sZXhwZXJpbWVudHNTdG9yZTpFTyxSZXF1ZXN0Q2FuY2VsbGF0aW9uRXJyb3I6YXIsSW52YWxpZFJlcXVlc3RPcHRpb25zRXJyb3I6c3IsUmVxdWVzdE5ldHdvcmtFcnJvcjpscixnZXQgSHR0cE1ldGhvZFR5cGUoKXtyZXR1cm4gY3J9LFJlcXVlc3RPcHRpb25zOnVyLFJlcXVlc3RNYW5hZ2VyOmhyLGNyZWF0ZVJvdXRlcjptcixnZXRSb3V0ZXI6Z3Isc2V0Um91dGVyOmZ1bmN0aW9uIGN5dCh0KXtpZihudWxsPT10KXRocm93IG5ldyBFcnJvcigiUm91dGVyIHJlcXVpcmVkLCBidXQgZ290OiAiK3QpO2ZyPXR9LGNyZWF0ZVNlYXJjaFBhcmFtOnlyLFJ1bnNTdG9yZTpfbCxydW5zU3RvcmU6eWwsYWRkUGFyYW1zOlZPfSk7bGV0IHV5dD1jbGFzcyBleHRlbmRzKHRyKHllKSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuYWN0aXZlPSEwLHRoaXMuX2NvbG9yU2NhbGU9bmV3IHJ5dCh7c2NhbGU6QU99KSx0aGlzLl9uYW1lVG9EYXRhU2VyaWVzPXt9LHRoaXMuX2V4cGFuZGVkPSExLHRoaXMuX3JlcXVlc3REYXRhPSh0LGUsbik9Pntjb25zdCBpPWdyKCkucGx1Z2luUm91dGUoImN1c3RvbV9zY2FsYXJzIiwiL3NjYWxhcnMiKTtQcm9taXNlLmFsbCh0Lm1hcCgodD0+e2NvbnN0IG49Vk8oaSx7dGFnOnRoaXMuX3RhZ0ZpbHRlcixydW46dH0pO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QobikudGhlbigobj0+e2Uoe2l0ZW06dCxkYXRhOm59KX0pKX0pKSkuZmluYWxseSgoKCk9PntuKCl9KSl9LHRoaXMuX3J1blRvTmV4dEF2YWlsYWJsZVN5bWJvbEluZGV4PXt9LHRoaXMuX21hdGNoZXNMaXN0T3BlbmVkPSExfXJlbG9hZCgpe3RoaXMuJC5sb2FkZXIucmVsb2FkKCl9cmVkcmF3KCl7dGhpcy4kLmxvYWRlci5yZWRyYXcoKX1fdG9nZ2xlRXhwYW5kZWQodCl7dGhpcy5zZXQoIl9leHBhbmRlZCIsIXRoaXMuX2V4cGFuZGVkKSx0aGlzLnJlZHJhdygpfV90b2dnbGVMb2dTY2FsZSgpe3RoaXMuc2V0KCJfbG9nU2NhbGVBY3RpdmUiLCF0aGlzLl9sb2dTY2FsZUFjdGl2ZSl9X3Jlc2V0RG9tYWluKCl7Y29uc3QgdD10aGlzLiQubG9hZGVyO3QmJnQucmVzZXREb21haW4oKX1fY3N2VXJsKHQsZSl7cmV0dXJuIGU/Vk8odGhpcy5fZG93bmxvYWREYXRhVXJsKHQsZSkse2Zvcm1hdDoiY3N2In0pOiIifV9qc29uVXJsKHQsZSl7cmV0dXJuIGU/Vk8odGhpcy5fZG93bmxvYWREYXRhVXJsKHQsZSkse2Zvcm1hdDoianNvbiJ9KToiIn1fZG93bmxvYWREYXRhVXJsKHQsZSl7Y29uc3Qgbj10W2VdLGk9e3RhZzpuLmdldFRhZygpLHJ1bjpuLmdldFJ1bigpfTtyZXR1cm4gVk8oZ3IoKS5wbHVnaW5Sb3V0ZSgiY3VzdG9tX3NjYWxhcnMiLCIvZG93bmxvYWRfZGF0YSIpLGkpfV9jcmVhdGVQcm9jZXNzRGF0YUZ1bmN0aW9uKCl7cmV0dXJuKHQsZSxuKT0+e2lmKG4ucmVnZXhfdmFsaWQpe2NvbnN0IHQ9d2UuY2xvbmUodGhpcy5fbmFtZVRvRGF0YVNlcmllcyk7d2UuZm9yT3duKG4udGFnX3RvX2V2ZW50cywoKG4saSk9Pntjb25zdCByPW4ubWFwKCh0PT4oe3dhbGxfdGltZTpuZXcgRGF0ZSgxZTMqdFswXSksc3RlcDp0WzFdLHNjYWxhcjp0WzJdfSkpKSxvPWl5dChlLGkpLGE9dFtvXTtpZihhKWEuc2V0RGF0YShyKTtlbHNle3dlLmlzVW5kZWZpbmVkKHRoaXMuX3J1blRvTmV4dEF2YWlsYWJsZVN5bWJvbEluZGV4W2VdKSYmKHRoaXMuX3J1blRvTmV4dEF2YWlsYWJsZVN5bWJvbEluZGV4W2VdPTApO2NvbnN0IG49bmV3IG55dChlLGksbyxyLGlfdFt0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFtlXV0pO3Rbb109bix0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFtlXT0odGhpcy5fcnVuVG9OZXh0QXZhaWxhYmxlU3ltYm9sSW5kZXhbZV0rMSklaV90Lmxlbmd0aH19KSksdGhpcy5zZXQoIl9uYW1lVG9EYXRhU2VyaWVzIix0KX19fV91cGRhdGVDaGFydCgpe09iamVjdC5lbnRyaWVzKHRoaXMuX25hbWVUb0RhdGFTZXJpZXMpLmZvckVhY2goKChbdCxlXSk9Pnt0aGlzLiQubG9hZGVyLnNldFNlcmllc0RhdGEodCxlLmdldERhdGEoKSl9KSksdGhpcy4kLmxvYWRlci5jb21taXRDaGFuZ2VzKCl9X2NvbXB1dGVTZWxlY3RlZFJ1bnNTZXQodCl7Y29uc3QgZT17fTtyZXR1cm4gd2UuZm9yRWFjaCh0LCh0PT57ZVt0XT0xfSkpLGV9Z2V0IF9zZXJpZXNOYW1lcygpe2NvbnN0IHQ9bmV3IFNldCh0aGlzLnJ1bnMpO3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLl9uYW1lVG9EYXRhU2VyaWVzKS5maWx0ZXIoKChbZSxuXSk9PnQuaGFzKG4ucnVuKSkpLm1hcCgoKFt0XSk9PnQpKX1fZGV0ZXJtaW5lQ29sb3IodCxlKXtyZXR1cm4gdC5zY2FsZShlKX1fcmVmcmVzaERhdGFTZXJpZXMoKXt0aGlzLnNldCgiX25hbWVUb0RhdGFTZXJpZXMiLHt9KX1fY3JlYXRlU3ltYm9sRnVuY3Rpb24oKXtyZXR1cm4gdD0+dGhpcy5fbmFtZVRvRGF0YVNlcmllc1t0XS5nZXRTeW1ib2woKS5tZXRob2QoKX1fZGV0ZXJtaW5lU3ltYm9sKHQsZSl7cmV0dXJuIHRbZV0uZ2V0U3ltYm9sKCkuY2hhcmFjdGVyfWdldCBfdGFnRmlsdGVyKCl7dmFyIHQ9dGhpcy50YWdSZWdleGVzO3JldHVybiAxPT09dC5sZW5ndGg/dFswXTp0Lm1hcCgodD0+IigiK3QrIikiKSkuam9pbigifCIpfV9nZXRUb2dnbGVNYXRjaGVzSWNvbih0KXtyZXR1cm4gdD8iZXhwYW5kLWxlc3MiOiJleHBhbmQtbW9yZSJ9X3RvZ2dsZU1hdGNoZXNPcGVuKCl7dGhpcy5zZXQoIl9tYXRjaGVzTGlzdE9wZW5lZCIsIXRoaXMuX21hdGNoZXNMaXN0T3BlbmVkKX1nZXQgX3RpdGxlRGlzcGxheVN0cmluZygpe3JldHVybiB0aGlzLnRpdGxlfHwidW50aXRsZWQifV9tYXRjaExpc3RFbnRyeUNvbG9yVXBkYXRlZCh0KXtjb25zdCBlPXRoaXMuJCQoIiNtYXRjaC1saXN0LXJlcGVhdCIpO2UmJnRoaXMucm9vdC5xdWVyeVNlbGVjdG9yQWxsKCIubWF0Y2gtbGlzdC1lbnRyeSIpLmZvckVhY2goKHQ9Pntjb25zdCBuPWUuaXRlbUZvckVsZW1lbnQodCk7dC5zdHlsZS5jb2xvcj10aGlzLl9kZXRlcm1pbmVDb2xvcih0aGlzLl9jb2xvclNjYWxlLG4pfSkpfX07dXl0LnRlbXBsYXRlPV9lYAogICAgPHRmLWNhcmQtaGVhZGluZyBkaXNwbGF5LW5hbWU9IltbX3RpdGxlRGlzcGxheVN0cmluZ11dIj48L3RmLWNhcmQtaGVhZGluZz4KICAgIDxkaXYgaWQ9InRmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXItY29udGFpbmVyIj4KICAgICAgPHRmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXIKICAgICAgICBpZD0ibG9hZGVyIgogICAgICAgIGFjdGl2ZT0iW1thY3RpdmVdXSIKICAgICAgICBjb2xvci1zY2FsZT0iW1tfY29sb3JTY2FsZV1dIgogICAgICAgIGRhdGEtc2VyaWVzPSJbW19zZXJpZXNOYW1lc11dIgogICAgICAgIGlnbm9yZS15LW91dGxpZXJzPSJbW2lnbm9yZVlPdXRsaWVyc11dIgogICAgICAgIGxvYWQta2V5PSJbW190YWdGaWx0ZXJdXSIKICAgICAgICBkYXRhLXRvLWxvYWQ9IltbcnVuc11dIgogICAgICAgIHJlcXVlc3QtZGF0YT0iW1tfcmVxdWVzdERhdGFdXSIKICAgICAgICBsb2ctc2NhbGUtYWN0aXZlPSJbW19sb2dTY2FsZUFjdGl2ZV1dIgogICAgICAgIGxvYWQtZGF0YS1jYWxsYmFjaz0iW1tfY3JlYXRlUHJvY2Vzc0RhdGFGdW5jdGlvbigpXV0iCiAgICAgICAgcmVxdWVzdC1tYW5hZ2VyPSJbW3JlcXVlc3RNYW5hZ2VyXV0iCiAgICAgICAgc21vb3RoaW5nLWVuYWJsZWQ9Iltbc21vb3RoaW5nRW5hYmxlZF1dIgogICAgICAgIHNtb290aGluZy13ZWlnaHQ9Iltbc21vb3RoaW5nV2VpZ2h0XV0iCiAgICAgICAgc3ltYm9sLWZ1bmN0aW9uPSJbW19jcmVhdGVTeW1ib2xGdW5jdGlvbigpXV0iCiAgICAgICAgdG9vbHRpcC1zb3J0aW5nLW1ldGhvZD0iW1t0b29sdGlwU29ydGluZ01ldGhvZF1dIgogICAgICAgIHgtdHlwZT0iW1t4VHlwZV1dIgogICAgICA+CiAgICAgIDwvdGYtbGluZS1jaGFydC1kYXRhLWxvYWRlcj4KICAgIDwvZGl2PgogICAgPGRpdiBpZD0iYnV0dG9ucyI+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIHNlbGVjdGVkJD0iW1tfZXhwYW5kZWRdXSIKICAgICAgICBpY29uPSJmdWxsc2NyZWVuIgogICAgICAgIG9uLXRhcD0iX3RvZ2dsZUV4cGFuZGVkIgogICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgc2VsZWN0ZWQkPSJbW19sb2dTY2FsZUFjdGl2ZV1dIgogICAgICAgIGljb249ImxpbmUtd2VpZ2h0IgogICAgICAgIG9uLXRhcD0iX3RvZ2dsZUxvZ1NjYWxlIgogICAgICAgIHRpdGxlPSJUb2dnbGUgeS1heGlzIGxvZyBzY2FsZSIKICAgICAgPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIGljb249InNldHRpbmdzLW92ZXJzY2FuIgogICAgICAgIG9uLXRhcD0iX3Jlc2V0RG9tYWluIgogICAgICAgIHRpdGxlPSJGaXQgZG9tYWluIHRvIGRhdGEiCiAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICA8c3BhbiBzdHlsZT0iZmxleC1ncm93OiAxIj48L3NwYW4+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzaG93RG93bmxvYWRMaW5rc11dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJkb3dubG9hZC1saW5rcyI+CiAgICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudQogICAgICAgICAgICBuby1sYWJlbC1mbG9hdD0idHJ1ZSIKICAgICAgICAgICAgbGFiZWw9InNlcmllcyB0byBkb3dubG9hZCIKICAgICAgICAgICAgc2VsZWN0ZWQtaXRlbS1sYWJlbD0ie3tfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkfX0iCiAgICAgICAgICA+CiAgICAgICAgICAgIDxwYXBlci1saXN0Ym94IGNsYXNzPSJkcm9wZG93bi1jb250ZW50IiBzbG90PSJkcm9wZG93bi1jb250ZW50Ij4KICAgICAgICAgICAgICA8dGVtcGxhdGUKICAgICAgICAgICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgICAgICAgICAgaXRlbXM9IltbX3Nlcmllc05hbWVzXV0iCiAgICAgICAgICAgICAgICBhcz0iZGF0YVNlcmllc05hbWUiCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0gbm8tbGFiZWwtZmxvYXQ9InRydWUiCiAgICAgICAgICAgICAgICAgID5bW2RhdGFTZXJpZXNOYW1lXV08L3BhcGVyLWl0ZW0KICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgICAgICA8YQogICAgICAgICAgICBkb3dubG9hZD0iW1tfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkXV0uY3N2IgogICAgICAgICAgICBocmVmPSJbW19jc3ZVcmwoX25hbWVUb0RhdGFTZXJpZXMsIF9kYXRhU2VyaWVzTmFtZVRvRG93bmxvYWQpXV0iCiAgICAgICAgICAgID5DU1Y8L2EKICAgICAgICAgID4KICAgICAgICAgIDxhCiAgICAgICAgICAgIGRvd25sb2FkPSJbW19kYXRhU2VyaWVzTmFtZVRvRG93bmxvYWRdXS5qc29uIgogICAgICAgICAgICBocmVmPSJbW19qc29uVXJsKF9uYW1lVG9EYXRhU2VyaWVzLCBfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkKV1dIgogICAgICAgICAgICA+SlNPTjwvYQogICAgICAgICAgPgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CiAgICA8ZGl2IGlkPSJtYXRjaGVzLWNvbnRhaW5lciI+CiAgICAgIDxkaXYgaWQ9Im1hdGNoZXMtbGlzdC10aXRsZSI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19zZXJpZXNOYW1lcy5sZW5ndGhdXSI+CiAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICAgICAgaWNvbj0iW1tfZ2V0VG9nZ2xlTWF0Y2hlc0ljb24oX21hdGNoZXNMaXN0T3BlbmVkKV1dIgogICAgICAgICAgICBvbi1jbGljaz0iX3RvZ2dsZU1hdGNoZXNPcGVuIgogICAgICAgICAgICBjbGFzcz0idG9nZ2xlLW1hdGNoZXMtYnV0dG9uIgogICAgICAgICAgPgogICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICA8L3RlbXBsYXRlPgoKICAgICAgICA8c3BhbiBjbGFzcz0ibWF0Y2hlcy10ZXh0Ij4gTWF0Y2hlcyAoW1tfc2VyaWVzTmFtZXMubGVuZ3RoXV0pIDwvc3Bhbj4KICAgICAgPC9kaXY+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfc2VyaWVzTmFtZXMubGVuZ3RoXV0iPgogICAgICAgIDxpcm9uLWNvbGxhcHNlIG9wZW5lZD0iW1tfbWF0Y2hlc0xpc3RPcGVuZWRdXSI+CiAgICAgICAgICA8ZGl2IGlkPSJtYXRjaGVzLWxpc3QiPgogICAgICAgICAgICA8dGVtcGxhdGUKICAgICAgICAgICAgICBpcz0iZG9tLXJlcGVhdCIKICAgICAgICAgICAgICBpdGVtcz0iW1tfc2VyaWVzTmFtZXNdXSIKICAgICAgICAgICAgICBhcz0ic2VyaWVzTmFtZSIKICAgICAgICAgICAgICBpZD0ibWF0Y2gtbGlzdC1yZXBlYXQiCiAgICAgICAgICAgICAgb24tZG9tLWNoYW5nZT0iX21hdGNoTGlzdEVudHJ5Q29sb3JVcGRhdGVkIgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWF0Y2gtbGlzdC1lbnRyeSI+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibWF0Y2gtZW50cnktc3ltYm9sIj4KICAgICAgICAgICAgICAgICAgW1tfZGV0ZXJtaW5lU3ltYm9sKF9uYW1lVG9EYXRhU2VyaWVzLCBzZXJpZXNOYW1lKV1dCiAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICBbW3Nlcmllc05hbWVdXQogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9pcm9uLWNvbGxhcHNlPgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CgogICAgPHN0eWxlIGluY2x1ZGU9InRmLWN1c3RvbS1zY2FsYXItY2FyZC1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgI21hdGNoZXMtbGlzdC10aXRsZSB7CiAgICAgICAgbWFyZ2luOiAxMHB4IDAgNXB4IDA7CiAgICAgIH0KCiAgICAgICNtYXRjaGVzLWxpc3QgewogICAgICAgIG1heC1oZWlnaHQ6IDIwMHB4OwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgIH0KCiAgICAgIC5tYXRjaC1saXN0LWVudHJ5IHsKICAgICAgICBtYXJnaW46IDAgMCA1cHggMDsKICAgICAgfQoKICAgICAgLm1hdGNoLWVudHJ5LXN5bWJvbCB7CiAgICAgICAgZm9udC1mYW1pbHk6IGFyaWFsLCBzYW5zLXNlcmlmOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB3aWR0aDogMTBweDsKICAgICAgfQoKICAgICAgLm1hdGNoZXMtdGV4dCB7CiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgLHQoW28oe3R5cGU6QXJyYXl9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSx1eXQucHJvdG90eXBlLCJydW5zIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLHV5dC5wcm90b3R5cGUsInhUeXBlIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sdXl0LnByb3RvdHlwZSwiYWN0aXZlIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLHV5dC5wcm90b3R5cGUsInRpdGxlIix2b2lkIDApLHQoW28oe3R5cGU6QXJyYXl9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSx1eXQucHJvdG90eXBlLCJ0YWdSZWdleGVzIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sdXl0LnByb3RvdHlwZSwiaWdub3JlWU91dGxpZXJzIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLGhyKV0sdXl0LnByb3RvdHlwZSwicmVxdWVzdE1hbmFnZXIiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSx1eXQucHJvdG90eXBlLCJzaG93RG93bmxvYWRMaW5rcyIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHV5dC5wcm90b3R5cGUsInNtb290aGluZ0VuYWJsZWQiLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXJ9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sdXl0LnByb3RvdHlwZSwic21vb3RoaW5nV2VpZ2h0Iix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLHV5dC5wcm90b3R5cGUsInRhZ01ldGFkYXRhIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLHV5dC5wcm90b3R5cGUsInRvb2x0aXBTb3J0aW5nTWV0aG9kIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLHJ5dCldLHV5dC5wcm90b3R5cGUsIl9jb2xvclNjYWxlIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLHV5dC5wcm90b3R5cGUsIl9uYW1lVG9EYXRhU2VyaWVzIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHV5dC5wcm90b3R5cGUsIl9leHBhbmRlZCIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHV5dC5wcm90b3R5cGUsIl9sb2dTY2FsZUFjdGl2ZSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLHV5dC5wcm90b3R5cGUsIl9yZXF1ZXN0RGF0YSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSx1eXQucHJvdG90eXBlLCJfcnVuVG9OZXh0QXZhaWxhYmxlU3ltYm9sSW5kZXgiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSx1eXQucHJvdG90eXBlLCJfbWF0Y2hlc0xpc3RPcGVuZWQiLHZvaWQgMCksdChbYSgiX25hbWVUb0RhdGFTZXJpZXMiKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLHV5dC5wcm90b3R5cGUsIl91cGRhdGVDaGFydCIsbnVsbCksdChbcygiX25hbWVUb0RhdGFTZXJpZXMiLCJydW5zIiksZSgiZGVzaWduOnR5cGUiLE9iamVjdCksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sdXl0LnByb3RvdHlwZSwiX3Nlcmllc05hbWVzIixudWxsKSx0KFthKCJfdGFnRmlsdGVyIiksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pLGUoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSx1eXQucHJvdG90eXBlLCJfcmVmcmVzaERhdGFTZXJpZXMiLG51bGwpLHQoW3MoInRhZ1JlZ2V4ZXMiKSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSx1eXQucHJvdG90eXBlLCJfdGFnRmlsdGVyIixudWxsKSx0KFtzKCJ0aXRsZSIpLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLHV5dC5wcm90b3R5cGUsIl90aXRsZURpc3BsYXlTdHJpbmciLG51bGwpLHV5dD10KFtpKCJ0Zi1jdXN0b20tc2NhbGFyLW11bHRpLWxpbmUtY2hhcnQtY2FyZCIpXSx1eXQpO2xldCBoeXQ9Y2xhc3MgZXh0ZW5kcyB5ZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fcmVxdWVzdE1hbmFnZXI9bmV3IGhyKDUwKSx0aGlzLl9jYW5jZWxsZXI9bmV3IE5PLHRoaXMuX3Nob3dEb3dubG9hZExpbmtzPUJzKCJfc2hvd0Rvd25sb2FkTGlua3MiLHtkZWZhdWx0VmFsdWU6ITEsdXNlTG9jYWxTdG9yYWdlOiEwfSkuY2FsbCh0aGlzKSx0aGlzLl9zbW9vdGhpbmdXZWlnaHQ9anMoIl9zbW9vdGhpbmdXZWlnaHQiLHtkZWZhdWx0VmFsdWU6LjZ9KS5jYWxsKHRoaXMpLHRoaXMuX2lnbm9yZVlPdXRsaWVycz1CcygiX2lnbm9yZVlPdXRsaWVycyIse2RlZmF1bHRWYWx1ZTohMCx1c2VMb2NhbFN0b3JhZ2U6ITB9KS5jYWxsKHRoaXMpLHRoaXMuX3hUeXBlPSJzdGVwIix0aGlzLl9hY3RpdmU9ITAsdGhpcy5yZWxvYWRPblJlYWR5PSEwLHRoaXMuX3Nob3dEb3dubG9hZExpbmtzT2JzZXJ2ZXI9SHMoIl9zaG93RG93bmxvYWRMaW5rcyIse2RlZmF1bHRWYWx1ZTohMSx1c2VMb2NhbFN0b3JhZ2U6ITB9KSx0aGlzLl9zbW9vdGhpbmdXZWlnaHRPYnNlcnZlcj1HcygiX3Ntb290aGluZ1dlaWdodCIse2RlZmF1bHRWYWx1ZTouNn0pLHRoaXMuX2lnbm9yZVlPdXRsaWVyc09ic2VydmVyPUhzKCJfaWdub3JlWU91dGxpZXJzIix7ZGVmYXVsdFZhbHVlOiEwLHVzZUxvY2FsU3RvcmFnZTohMH0pfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLnJlbG9hZE9uUmVhZHkmJnRoaXMucmVsb2FkKCl9cmVsb2FkKCl7Y29uc3QgdD1ncigpLnBsdWdpbnNMaXN0aW5nKCksZT10aGlzLl9jYW5jZWxsZXIuY2FuY2VsbGFibGUoKHQ9Pnt0LmNhbmNlbGxlZHx8KHRoaXMuc2V0KCJfZGF0YU5vdEZvdW5kIiwhdC52YWx1ZS5jdXN0b21fc2NhbGFycyksdGhpcy5fZGF0YU5vdEZvdW5kfHx0aGlzLl9yZXRyaWV2ZUxheW91dEFuZERhdGEoKSl9KSk7dGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKGUpfV9yZWxvYWRDaGFydHMoKXt0aGlzLnJvb3QucXVlcnlTZWxlY3RvckFsbCgidGYtY3VzdG9tLXNjYWxhci1tYXJnaW4tY2hhcnQtY2FyZCwgdGYtY3VzdG9tLXNjYWxhci1tdWx0aS1saW5lLWNoYXJ0LWNhcmQiKS5mb3JFYWNoKCh0PT57dC5yZWxvYWQoKX0pKX1fcmV0cmlldmVMYXlvdXRBbmREYXRhKCl7Y29uc3QgdD1ncigpLnBsdWdpblJvdXRlKCJjdXN0b21fc2NhbGFycyIsIi9sYXlvdXQiKSxlPXRoaXMuX2NhbmNlbGxlci5jYW5jZWxsYWJsZSgodD0+e3QuY2FuY2VsbGVkfHwodGhpcy5zZXQoIl9sYXlvdXQiLHQudmFsdWUpLHRoaXMuX2RhdGFOb3RGb3VuZHx8dGhpcy5fcmVsb2FkQ2hhcnRzKCkpfSkpO3RoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbihlKX1nZXQgX3Ntb290aGluZ0VuYWJsZWQoKXtyZXR1cm4gdGhpcy5fc21vb3RoaW5nV2VpZ2h0PjB9Z2V0IF9jYXRlZ29yaWVzKCl7dmFyIHQ9dGhpcy5fbGF5b3V0O2lmKCF0LmNhdGVnb3J5KXJldHVybltdO2xldCBlPSExO3JldHVybiB0aGlzLl9vcGVuZWRDYXRlZ29yaWVzfHwoZT0hMCx0aGlzLl9vcGVuZWRDYXRlZ29yaWVzPXt9KSx0LmNhdGVnb3J5Lm1hcCgodD0+KGUmJiF0LmNsb3NlZCYmKHRoaXMuX29wZW5lZENhdGVnb3JpZXNbdC50aXRsZV09ITApLHtuYW1lOnQudGl0bGUsaXRlbXM6dC5jaGFydCxtZXRhZGF0YTp7dHlwZTp2ci5QUkVGSVhfR1JPVVAsb3BlbmVkOiEhdGhpcy5fb3BlbmVkQ2F0ZWdvcmllc1t0LnRpdGxlXX19KSkpfV9jYXRlZ29yeU9wZW5lZFRvZ2dsZWQodCl7Y29uc3QgZT10LnRhcmdldDtlLm9wZW5lZD90aGlzLl9vcGVuZWRDYXRlZ29yaWVzW2UuY2F0ZWdvcnkubmFtZV09ITA6ZGVsZXRlIHRoaXMuX29wZW5lZENhdGVnb3JpZXNbZS5jYXRlZ29yeS5uYW1lXX19O2h5dC50ZW1wbGF0ZT1fZWAKICAgIDx0Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyIiBzbG90PSJzaWRlYmFyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZXR0aW5ncyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJsaW5lLWl0ZW0iPgogICAgICAgICAgICAgIDxwYXBlci1jaGVja2JveCBjaGVja2VkPSJ7e19zaG93RG93bmxvYWRMaW5rc319IgogICAgICAgICAgICAgICAgPlNob3cgZGF0YSBkb3dubG9hZCBsaW5rczwvcGFwZXItY2hlY2tib3gKICAgICAgICAgICAgICA+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJsaW5lLWl0ZW0iPgogICAgICAgICAgICAgIDxwYXBlci1jaGVja2JveCBjaGVja2VkPSJ7e19pZ25vcmVZT3V0bGllcnN9fSIKICAgICAgICAgICAgICAgID5JZ25vcmUgb3V0bGllcnMgaW4gY2hhcnQgc2NhbGluZzwvcGFwZXItY2hlY2tib3gKICAgICAgICAgICAgICA+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGlkPSJ0b29sdGlwLXNvcnRpbmciPgogICAgICAgICAgICAgIDxkaXYgaWQ9InRvb2x0aXAtc29ydGluZy1sYWJlbCI+VG9vbHRpcCBzb3J0aW5nIG1ldGhvZDo8L2Rpdj4KICAgICAgICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudQogICAgICAgICAgICAgICAgbm8tbGFiZWwtZmxvYXQ9IiIKICAgICAgICAgICAgICAgIHNlbGVjdGVkLWl0ZW0tbGFiZWw9Int7X3Rvb2x0aXBTb3J0aW5nTWV0aG9kfX0iCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPHBhcGVyLWxpc3Rib3gKICAgICAgICAgICAgICAgICAgY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiCiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkPSIwIgogICAgICAgICAgICAgICAgICBzbG90PSJkcm9wZG93bi1jb250ZW50IgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICA8cGFwZXItaXRlbT5kZWZhdWx0PC9wYXBlci1pdGVtPgogICAgICAgICAgICAgICAgICA8cGFwZXItaXRlbT5kZXNjZW5kaW5nPC9wYXBlci1pdGVtPgogICAgICAgICAgICAgICAgICA8cGFwZXItaXRlbT5hc2NlbmRpbmc8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPm5lYXJlc3Q8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgICAgICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgICAgPHRmLXNtb290aGluZy1pbnB1dAogICAgICAgICAgICAgIHdlaWdodD0ie3tfc21vb3RoaW5nV2VpZ2h0fX0iCiAgICAgICAgICAgICAgc3RlcD0iMC4wMDEiCiAgICAgICAgICAgICAgbWluPSIwIgogICAgICAgICAgICAgIG1heD0iMSIKICAgICAgICAgICAgPjwvdGYtc21vb3RoaW5nLWlucHV0PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgICA8dGYtb3B0aW9uLXNlbGVjdG9yCiAgICAgICAgICAgICAgaWQ9IngtdHlwZS1zZWxlY3RvciIKICAgICAgICAgICAgICBuYW1lPSJIb3Jpem9udGFsIEF4aXMiCiAgICAgICAgICAgICAgc2VsZWN0ZWQtaWQ9Int7X3hUeXBlfX0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJzdGVwIj5zdGVwPC9wYXBlci1idXR0b24KICAgICAgICAgICAgICA+PCEtLQogICAgICAgICAgICAtLT48cGFwZXItYnV0dG9uIGlkPSJyZWxhdGl2ZSI+cmVsYXRpdmU8L3BhcGVyLWJ1dHRvbgogICAgICAgICAgICAgID48IS0tCiAgICAgICAgICAgIC0tPjxwYXBlci1idXR0b24gaWQ9IndhbGxfdGltZSI+d2FsbDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICA8L3RmLW9wdGlvbi1zZWxlY3Rvcj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiBydW5zLXNlbGVjdG9yIj4KICAgICAgICAgIDx0Zi1ydW5zLXNlbGVjdG9yIHNlbGVjdGVkLXJ1bnM9Int7X3NlbGVjdGVkUnVuc319Ij4KICAgICAgICAgIDwvdGYtcnVucy1zZWxlY3Rvcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNlbnRlciIgc2xvdD0iY2VudGVyIiBpZD0iY2F0ZWdvcmllcy1jb250YWluZXIiPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPGRpdiBjbGFzcz0ibm8tZGF0YS13YXJuaW5nIj4KICAgICAgICAgICAgPGgzPlRoZSBjdXN0b20gc2NhbGFycyBkYXNoYm9hcmQgaXMgaW5hY3RpdmUuPC9oMz4KICAgICAgICAgICAgPHA+UHJvYmFibGUgY2F1c2VzOjwvcD4KICAgICAgICAgICAgPG9sPgogICAgICAgICAgICAgIDxsaT5Zb3UgaGF2ZW4ndCBsYWlkIG91dCB0aGUgZGFzaGJvYXJkLjwvbGk+CiAgICAgICAgICAgICAgPGxpPllvdSBoYXZlbuKAmXQgd3JpdHRlbiBhbnkgc2NhbGFyIGRhdGEgdG8geW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICA8L29sPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgVG8gbGF5IG91dCB0aGUgZGFzaGJvYXJkLCBwYXNzIGEgPGNvZGU+TGF5b3V0PC9jb2RlPiBwcm90b2J1ZmZlcgogICAgICAgICAgICAgIHRvIHRoZSA8Y29kZT5zZXRfbGF5b3V0PC9jb2RlPiBtZXRob2QuIEZvciBleGFtcGxlLAogICAgICAgICAgICA8L3A+CiAgICAgICAgICAgIDxwcmU+CmZyb20gdGVuc29yYm9hcmQgaW1wb3J0IHN1bW1hcnkKZnJvbSB0ZW5zb3Jib2FyZC5wbHVnaW5zLmN1c3RvbV9zY2FsYXIgaW1wb3J0IGxheW91dF9wYjIKLi4uCiMgVGhpcyBhY3Rpb24gZG9lcyBub3QgaGF2ZSB0byBiZSBwZXJmb3JtZWQgYXQgZXZlcnkgc3RlcCwgc28gdGhlIGFjdGlvbiBpcyBub3QKIyB0YWtlbiBjYXJlIG9mIGJ5IGFuIG9wIGluIHRoZSBncmFwaC4gV2Ugb25seSBuZWVkIHRvIHNwZWNpZnkgdGhlIGxheW91dCBvbmNlCiMgKGluc3RlYWQgb2YgcGVyIHN0ZXApLgpsYXlvdXRfc3VtbWFyeSA9IHN1bW1hcnlfbGliLmN1c3RvbV9zY2FsYXJfcGIobGF5b3V0X3BiMi5MYXlvdXQoCiAgY2F0ZWdvcnk9WwogICAgbGF5b3V0X3BiMi5DYXRlZ29yeSgKICAgICAgdGl0bGU9J2xvc3NlcycsCiAgICAgIGNoYXJ0PVsKICAgICAgICAgIGxheW91dF9wYjIuQ2hhcnQoCiAgICAgICAgICAgICAgdGl0bGU9J2xvc3NlcycsCiAgICAgICAgICAgICAgbXVsdGlsaW5lPWxheW91dF9wYjIuTXVsdGlsaW5lQ2hhcnRDb250ZW50KAogICAgICAgICAgICAgICAgdGFnPVtyJ2xvc3MuKiddLAogICAgICAgICAgICAgICkpLAogICAgICAgICAgbGF5b3V0X3BiMi5DaGFydCgKICAgICAgICAgICAgICB0aXRsZT0nYmF6JywKICAgICAgICAgICAgICBtYXJnaW49bGF5b3V0X3BiMi5NYXJnaW5DaGFydENvbnRlbnQoCiAgICAgICAgICAgICAgICBzZXJpZXM9WwogICAgICAgICAgICAgICAgICBsYXlvdXRfcGIyLk1hcmdpbkNoYXJ0Q29udGVudC5TZXJpZXMoCiAgICAgICAgICAgICAgICAgICAgdmFsdWU9J2xvc3MvYmF6L3NjYWxhcl9zdW1tYXJ5JywKICAgICAgICAgICAgICAgICAgICBsb3dlcj0nYmF6X2xvd2VyL2Jhei9zY2FsYXJfc3VtbWFyeScsCiAgICAgICAgICAgICAgICAgICAgdXBwZXI9J2Jhel91cHBlci9iYXovc2NhbGFyX3N1bW1hcnknKSwKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgKSksCiAgICAgIF0pLAogICAgbGF5b3V0X3BiMi5DYXRlZ29yeSgKICAgICAgdGl0bGU9J3RyaWcgZnVuY3Rpb25zJywKICAgICAgY2hhcnQ9WwogICAgICAgICAgbGF5b3V0X3BiMi5DaGFydCgKICAgICAgICAgICAgICB0aXRsZT0nd2F2ZSB0cmlnIGZ1bmN0aW9ucycsCiAgICAgICAgICAgICAgbXVsdGlsaW5lPWxheW91dF9wYjIuTXVsdGlsaW5lQ2hhcnRDb250ZW50KAogICAgICAgICAgICAgICAgdGFnPVtyJ3RyaWdGdW5jdGlvbnMvY29zaW5lJywgcid0cmlnRnVuY3Rpb25zL3NpbmUnXSwKICAgICAgICAgICAgICApKSwKICAgICAgICAgICMgVGhlIHJhbmdlIG9mIHRhbmdlbnQgaXMgZGlmZmVyZW50LiBMZXQncyBnaXZlIGl0IGl0cyBvd24gY2hhcnQuCiAgICAgICAgICBsYXlvdXRfcGIyLkNoYXJ0KAogICAgICAgICAgICAgIHRpdGxlPSd0YW4nLAogICAgICAgICAgICAgIG11bHRpbGluZT1sYXlvdXRfcGIyLk11bHRpbGluZUNoYXJ0Q29udGVudCgKICAgICAgICAgICAgICAgIHRhZz1bcid0cmlnRnVuY3Rpb25zL3RhbmdlbnQnXSwKICAgICAgICAgICAgICApKSwKICAgICAgXSwKICAgICAgIyBUaGlzIGNhdGVnb3J5IHdlIGNhcmUgbGVzcyBhYm91dC4gTGV0J3MgbWFrZSBpdCBpbml0aWFsbHkgY2xvc2VkLgogICAgICBjbG9zZWQ9VHJ1ZSksCiAgXSkpCndyaXRlci5hZGRfc3VtbWFyeShsYXlvdXRfc3VtbWFyeSkKPC9wcmUKICAgICAgICAgICAgPgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3XigJlyZSBuZXcgdG8gdXNpbmcgVGVuc29yQm9hcmQsIGFuZCB3YW50IHRvIGZpbmQgb3V0IGhvdyB0bwogICAgICAgICAgICAgIGFkZCBkYXRhIGFuZCBzZXQgdXAgeW91ciBldmVudCBmaWxlcywgY2hlY2sgb3V0IHRoZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQiCiAgICAgICAgICAgICAgICA+UkVBRE1FPC9hCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIGFuZCBwZXJoYXBzIHRoZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9nZXRfc3RhcnRlZC9zdW1tYXJpZXNfYW5kX3RlbnNvcmJvYXJkIgogICAgICAgICAgICAgICAgPlRlbnNvckJvYXJkIHR1dG9yaWFsPC9hCiAgICAgICAgICAgICAgPi4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jYXRlZ29yaWVzXV0iIGFzPSJjYXRlZ29yeSI+CiAgICAgICAgICAgIDx0Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldwogICAgICAgICAgICAgIGFzPSJjaGFydCIKICAgICAgICAgICAgICBjYXRlZ29yeT0iW1tjYXRlZ29yeV1dIgogICAgICAgICAgICAgIGRpc2FibGUtcGFnaW5hdGlvbgogICAgICAgICAgICAgIGluaXRpYWwtb3BlbmVkPSJbW2NhdGVnb3J5Lm1ldGFkYXRhLm9wZW5lZF1dIgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2NoYXJ0Lm11bHRpbGluZV1dIj4KICAgICAgICAgICAgICAgICAgPHRmLWN1c3RvbS1zY2FsYXItbXVsdGktbGluZS1jaGFydC1jYXJkCiAgICAgICAgICAgICAgICAgICAgYWN0aXZlPSJbW2FjdGl2ZV1dIgogICAgICAgICAgICAgICAgICAgIHJlcXVlc3QtbWFuYWdlcj0iW1tfcmVxdWVzdE1hbmFnZXJdXSIKICAgICAgICAgICAgICAgICAgICBydW5zPSJbW19zZWxlY3RlZFJ1bnNdXSIKICAgICAgICAgICAgICAgICAgICB0aXRsZT0iW1tjaGFydC50aXRsZV1dIgogICAgICAgICAgICAgICAgICAgIHgtdHlwZT0iW1tfeFR5cGVdXSIKICAgICAgICAgICAgICAgICAgICBzbW9vdGhpbmctZW5hYmxlZD0iW1tfc21vb3RoaW5nRW5hYmxlZF1dIgogICAgICAgICAgICAgICAgICAgIHNtb290aGluZy13ZWlnaHQ9IltbX3Ntb290aGluZ1dlaWdodF1dIgogICAgICAgICAgICAgICAgICAgIHRvb2x0aXAtc29ydGluZy1tZXRob2Q9IltbdG9vbHRpcFNvcnRpbmdNZXRob2RdXSIKICAgICAgICAgICAgICAgICAgICBpZ25vcmUteS1vdXRsaWVycz0iW1tfaWdub3JlWU91dGxpZXJzXV0iCiAgICAgICAgICAgICAgICAgICAgc2hvdy1kb3dubG9hZC1saW5rcz0iW1tfc2hvd0Rvd25sb2FkTGlua3NdXSIKICAgICAgICAgICAgICAgICAgICB0YWctcmVnZXhlcz0iW1tjaGFydC5tdWx0aWxpbmUudGFnXV0iCiAgICAgICAgICAgICAgICAgID48L3RmLWN1c3RvbS1zY2FsYXItbXVsdGktbGluZS1jaGFydC1jYXJkPgogICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tjaGFydC5tYXJnaW5dXSI+CiAgICAgICAgICAgICAgICAgIDx0Zi1jdXN0b20tc2NhbGFyLW1hcmdpbi1jaGFydC1jYXJkCiAgICAgICAgICAgICAgICAgICAgYWN0aXZlPSJbW2FjdGl2ZV1dIgogICAgICAgICAgICAgICAgICAgIHJlcXVlc3QtbWFuYWdlcj0iW1tfcmVxdWVzdE1hbmFnZXJdXSIKICAgICAgICAgICAgICAgICAgICBydW5zPSJbW19zZWxlY3RlZFJ1bnNdXSIKICAgICAgICAgICAgICAgICAgICB0aXRsZT0iW1tjaGFydC50aXRsZV1dIgogICAgICAgICAgICAgICAgICAgIHgtdHlwZT0iW1tfeFR5cGVdXSIKICAgICAgICAgICAgICAgICAgICB0b29sdGlwLXNvcnRpbmctbWV0aG9kPSJbW3Rvb2x0aXBTb3J0aW5nTWV0aG9kXV0iCiAgICAgICAgICAgICAgICAgICAgaWdub3JlLXktb3V0bGllcnM9IltbX2lnbm9yZVlPdXRsaWVyc11dIgogICAgICAgICAgICAgICAgICAgIHNob3ctZG93bmxvYWQtbGlua3M9IltbX3Nob3dEb3dubG9hZExpbmtzXV0iCiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWNoYXJ0LXNlcmllcz0iW1tjaGFydC5tYXJnaW4uc2VyaWVzXV0iCiAgICAgICAgICAgICAgICAgID48L3RmLWN1c3RvbS1zY2FsYXItbWFyZ2luLWNoYXJ0LWNhcmQ+CiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvdGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXc+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC90Zi1kYXNoYm9hcmQtbGF5b3V0PgoKICAgIDxzdHlsZSBpbmNsdWRlPSJkYXNoYm9hcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgICN0b29sdGlwLXNvcnRpbmcgewogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgbWFyZ2luLXRvcDogMTVweDsKICAgICAgfQogICAgICAjdG9vbHRpcC1zb3J0aW5nIHBhcGVyLWRyb3Bkb3duLW1lbnUgewogICAgICAgIG1hcmdpbi1sZWZ0OiAxMHB4OwogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWZvY3VzLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICB3aWR0aDogMTA1cHg7CiAgICAgIH0KICAgICAgLmxpbmUtaXRlbSB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcGFkZGluZy10b3A6IDVweDsKICAgICAgfQogICAgICAubm8tZGF0YS13YXJuaW5nIHsKICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OwogICAgICAgIG1hcmdpbjogODBweCBhdXRvIDAgYXV0bzsKICAgICAgfQogICAgPC9zdHlsZT4KICBgLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLGhyKV0saHl0LnByb3RvdHlwZSwiX3JlcXVlc3RNYW5hZ2VyIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE5PKV0saHl0LnByb3RvdHlwZSwiX2NhbmNlbGxlciIsdm9pZCAwKSx0KFtvKHt0eXBlOkFycmF5fSksZSgiZGVzaWduOnR5cGUiLEFycmF5KV0saHl0LnByb3RvdHlwZSwiX3NlbGVjdGVkUnVucyIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwLG9ic2VydmVyOiJfc2hvd0Rvd25sb2FkTGlua3NPYnNlcnZlciJ9KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGh5dC5wcm90b3R5cGUsIl9zaG93RG93bmxvYWRMaW5rcyIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcixub3RpZnk6ITAsb2JzZXJ2ZXI6Il9zbW9vdGhpbmdXZWlnaHRPYnNlcnZlciJ9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0saHl0LnByb3RvdHlwZSwiX3Ntb290aGluZ1dlaWdodCIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW4sb2JzZXJ2ZXI6Il9pZ25vcmVZT3V0bGllcnNPYnNlcnZlciJ9KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGh5dC5wcm90b3R5cGUsIl9pZ25vcmVZT3V0bGllcnMiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0saHl0LnByb3RvdHlwZSwiX3hUeXBlIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLGh5dC5wcm90b3R5cGUsIl9sYXlvdXQiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxoeXQucHJvdG90eXBlLCJfZGF0YU5vdEZvdW5kIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLGh5dC5wcm90b3R5cGUsIl9vcGVuZWRDYXRlZ29yaWVzIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0saHl0LnByb3RvdHlwZSwiX2FjdGl2ZSIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGh5dC5wcm90b3R5cGUsInJlbG9hZE9uUmVhZHkiLHZvaWQgMCksdChbcygiX3Ntb290aGluZ1dlaWdodCIpLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxoeXQucHJvdG90eXBlLCJfc21vb3RoaW5nRW5hYmxlZCIsbnVsbCksdChbcygiX2xheW91dCIpLGUoImRlc2lnbjp0eXBlIixBcnJheSksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0saHl0LnByb3RvdHlwZSwiX2NhdGVnb3JpZXMiLG51bGwpLGh5dD10KFtpKCJ0Zi1jdXN0b20tc2NhbGFyLWRhc2hib2FyZCIpXSxoeXQpO2NsYXNzIGR5dHtjb25zdHJ1Y3Rvcih0LGUpe3RoaXMucnVuMmRhdGFzZXRzPXt9LHRoaXMuY29sb3JTY2FsZT1lLHRoaXMuYnVpbGRDaGFydCh0KX1nZXREYXRhc2V0KHQpe3JldHVybiB2b2lkIDA9PT10aGlzLnJ1bjJkYXRhc2V0c1t0XSYmKHRoaXMucnVuMmRhdGFzZXRzW3RdPW5ldyBuX3QuRGF0YXNldChbXSx7cnVuOnR9KSksdGhpcy5ydW4yZGF0YXNldHNbdF19YnVpbGRDaGFydCh0KXt0aGlzLm91dGVyJiZ0aGlzLm91dGVyLmRlc3Ryb3koKTtsZXQgZT1oX3QodCk7dGhpcy54QWNjZXNzb3I9ZS5hY2Nlc3Nvcix0aGlzLnhTY2FsZT1lLnNjYWxlLHRoaXMueEF4aXM9ZS5heGlzLHRoaXMueEF4aXMubWFyZ2luKDApLHRoaXMueEF4aXMudGlja0xhYmVsUGFkZGluZygzKSx0aGlzLnlTY2FsZT1uZXcgbl90LlNjYWxlcy5MaW5lYXIsdGhpcy55QXhpcz1uZXcgbl90LkF4ZXMuTnVtZXJpYyh0aGlzLnlTY2FsZSwibGVmdCIpO2xldCBuPW9fdCgzKTt0aGlzLnlBeGlzLm1hcmdpbigwKS50aWNrTGFiZWxQYWRkaW5nKDUpLmZvcm1hdHRlcihuKSx0aGlzLnlBeGlzLnVzZXNUZXh0V2lkdGhBcHByb3hpbWF0aW9uKCEwKTtsZXQgaT10aGlzLmJ1aWxkUGxvdCh0aGlzLnhBY2Nlc3Nvcix0aGlzLnhTY2FsZSx0aGlzLnlTY2FsZSk7dGhpcy5ncmlkbGluZXM9bmV3IG5fdC5Db21wb25lbnRzLkdyaWRsaW5lcyh0aGlzLnhTY2FsZSx0aGlzLnlTY2FsZSksdGhpcy5jZW50ZXI9bmV3IG5fdC5Db21wb25lbnRzLkdyb3VwKFt0aGlzLmdyaWRsaW5lcyxpXSksdGhpcy5vdXRlcj1uZXcgbl90LkNvbXBvbmVudHMuVGFibGUoW1t0aGlzLnlBeGlzLHRoaXMuY2VudGVyXSxbbnVsbCx0aGlzLnhBeGlzXV0pfWJ1aWxkUGxvdCh0LGUsbil7bGV0IGk9WzAsMjI4LDE1ODcsMzA4NSw1ZTMsNjkxNSw4NDEzLDk3NzIsMWU0XSxyPXdlLnJhbmdlKGkubGVuZ3RoLTEpLm1hcCgodD0+KGlbdCsxXS1pW3RdKS8yNTAwKSksbz1pLm1hcCgoKHQsZSk9PnQ9PnRbZV1bMV0pKSxhPW9bNF0scz13ZS5yYW5nZShvLmxlbmd0aC0xKS5tYXAoKGk9PntsZXQgYT1uZXcgbl90LlBsb3RzLkFyZWE7YS54KHQsZSk7bGV0IHM9aT40P29baV06b1tpKzFdO3JldHVybiBhLnkoaT40P29baSsxXTpvW2ldLG4pLGEueTAocyksYS5hdHRyKCJmaWxsIiwoKHQsZSxuKT0+dGhpcy5jb2xvclNjYWxlLnNjYWxlKG4ubWV0YWRhdGEoKS5ydW4pKSksYS5hdHRyKCJzdHJva2UiLCgodCxlLG4pPT50aGlzLmNvbG9yU2NhbGUuc2NhbGUobi5tZXRhZGF0YSgpLnJ1bikpKSxhLmF0dHIoInN0cm9rZS13ZWlnaHQiLCgodCxlLG4pPT4iMC41cHgiKSksYS5hdHRyKCJzdHJva2Utb3BhY2l0eSIsKCgpPT5yW2ldKSksYS5hdHRyKCJmaWxsLW9wYWNpdHkiLCgoKT0+cltpXSkpLGF9KSksbD1uZXcgbl90LlBsb3RzLkxpbmU7cmV0dXJuIGwueCh0LGUpLGwueShhLG4pLGwuYXR0cigic3Ryb2tlIiwoKHQsZSxuKT0+dGhpcy5jb2xvclNjYWxlLnNjYWxlKG4ucnVuKSkpLHRoaXMucGxvdHM9cyxuZXcgbl90LkNvbXBvbmVudHMuR3JvdXAocyl9c2V0VmlzaWJsZVNlcmllcyh0KXt0aGlzLnJ1bnM9dDtsZXQgZT10Lm1hcCgodD0+dGhpcy5nZXREYXRhc2V0KHQpKSk7dGhpcy5wbG90cy5mb3JFYWNoKCh0PT50LmRhdGFzZXRzKGUpKSl9c2V0U2VyaWVzRGF0YSh0LGUpe3RoaXMuZ2V0RGF0YXNldCh0KS5kYXRhKGUpfXJlbmRlclRvKHQpe3RoaXMudGFyZ2V0U1ZHPXQsdGhpcy5vdXRlci5yZW5kZXJUbyh0KX1yZWRyYXcoKXt0aGlzLm91dGVyLnJlZHJhdygpfWRlc3Ryb3koKXt0aGlzLm91dGVyLmRlc3Ryb3koKX19bGV0IHB5dD1jbGFzcyBleHRlbmRzKHRyKHllKSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29sb3JTY2FsZT0obmV3IG5fdC5TY2FsZXMuQ29sb3IpLnJhbmdlKHRBLnNsaWNlKCkpLHRoaXMueFR5cGU9InN0ZXAiLHRoaXMuX3Zpc2libGVTZXJpZXNDYWNoZT1bXSx0aGlzLl9zZXJpZXNEYXRhQ2FjaGU9e30sdGhpcy5fbWFrZUNoYXJ0QXN5bmNDYWxsYmFja0lkPW51bGx9c2V0VmlzaWJsZVNlcmllcyh0KXt0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGU9dCx0aGlzLl9jaGFydCYmKHRoaXMuX2NoYXJ0LnNldFZpc2libGVTZXJpZXModCksdGhpcy5yZWRyYXcoKSl9c2V0U2VyaWVzRGF0YSh0LGUpe3RoaXMuX3Nlcmllc0RhdGFDYWNoZVt0XT1lLHRoaXMuX2NoYXJ0JiZ0aGlzLl9jaGFydC5zZXRTZXJpZXNEYXRhKHQsZSl9cmVkcmF3KCl7dGhpcy5fY2hhcnQucmVkcmF3KCl9X21ha2VDaGFydCgpe3ZhciB0PXRoaXMueFR5cGUsZT10aGlzLmNvbG9yU2NhbGUsbj10aGlzLl9hdHRhY2hlZDtudWxsPT09dGhpcy5fbWFrZUNoYXJ0QXN5bmNDYWxsYmFja0lkJiZ0aGlzLmNhbmNlbEFzeW5jKHRoaXMuX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZCksdGhpcy5fbWFrZUNoYXJ0QXN5bmNDYWxsYmFja0lkPXRoaXMuYXN5bmMoKGZ1bmN0aW9uKCl7aWYodGhpcy5fbWFrZUNoYXJ0QXN5bmNDYWxsYmFja0lkPW51bGwsbil7dGhpcy5fY2hhcnQmJnRoaXMuX2NoYXJ0LmRlc3Ryb3koKTt2YXIgaT1uZXcgZHl0KHQsZSkscj13dSh0aGlzLiQuY2hhcnRkaXYpO2kucmVuZGVyVG8ociksdGhpcy5fY2hhcnQ9aX19KSwzNTApfV9yZWxvYWRGcm9tQ2FjaGUoKXt0aGlzLl9jaGFydCYmKHRoaXMuX2NoYXJ0LnNldFZpc2libGVTZXJpZXModGhpcy5fdmlzaWJsZVNlcmllc0NhY2hlKSx0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGUuZm9yRWFjaChmdW5jdGlvbih0KXt0aGlzLl9jaGFydC5zZXRTZXJpZXNEYXRhKHQsdGhpcy5fc2VyaWVzRGF0YUNhY2hlW3RdfHxbXSl9LmJpbmQodGhpcykpKX1hdHRhY2hlZCgpe3RoaXMuX2F0dGFjaGVkPSEwfWRldGFjaGVkKCl7dGhpcy5fYXR0YWNoZWQ9ITF9fTtweXQudGVtcGxhdGU9X2VgCiAgICA8c3R5bGUgaW5jbHVkZT0icGxvdHRhYmxlLXN0eWxlIj48L3N0eWxlPgogICAgPGRpdiBpZD0iY2hhcnRkaXYiPjwvZGl2PgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CiAgICAgICNjaGFydGRpdiB7CiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgfQogICAgICAucGxvdHRhYmxlIC5heGlzIHRleHQgewogICAgICAgIGZpbGw6IGN1cnJlbnRDb2xvcjsKICAgICAgfQogICAgPC9zdHlsZT4KICBgLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLG5fdC5TY2FsZXMuQ29sb3IpXSxweXQucHJvdG90eXBlLCJjb2xvclNjYWxlIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLHB5dC5wcm90b3R5cGUsInhUeXBlIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0scHl0LnByb3RvdHlwZSwiX2F0dGFjaGVkIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLGR5dCldLHB5dC5wcm90b3R5cGUsIl9jaGFydCIsdm9pZCAwKSx0KFtvKHt0eXBlOkFycmF5fSksZSgiZGVzaWduOnR5cGUiLEFycmF5KV0scHl0LnByb3RvdHlwZSwiX3Zpc2libGVTZXJpZXNDYWNoZSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxweXQucHJvdG90eXBlLCJfc2VyaWVzRGF0YUNhY2hlIix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLHB5dC5wcm90b3R5cGUsIl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQiLHZvaWQgMCksdChbYSgieFR5cGUiLCJjb2xvclNjYWxlIiwiX2F0dGFjaGVkIiksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pLGUoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxweXQucHJvdG90eXBlLCJfbWFrZUNoYXJ0IixudWxsKSx0KFthKCJfY2hhcnQiKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLHB5dC5wcm90b3R5cGUsIl9yZWxvYWRGcm9tQ2FjaGUiLG51bGwpLHB5dD10KFtpKCJ2ei1kaXN0cmlidXRpb24tY2hhcnQiKV0scHl0KTtsZXQgZnl0PWNsYXNzIGV4dGVuZHMocF90KHRyKHllKSkpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmdldERhdGFMb2FkTmFtZT0oe3J1bjp0fSk9PnQsdGhpcy5yZXF1ZXN0RGF0YT0odCxlLG4pPT57Y29uc3QgaT1ncigpLnBsdWdpblJvdXRlKCJkaXN0cmlidXRpb25zIiwiL2Rpc3RyaWJ1dGlvbnMiKTtQcm9taXNlLmFsbCh0Lm1hcCgodD0+e2NvbnN0IG49Vk8oaSx7dGFnOnQudGFnLHJ1bjp0LnJ1bn0pO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QobikudGhlbigobj0+e2Uoe2l0ZW06dCxkYXRhOm59KX0pKX0pKSkuZmluYWxseSgoKCk9PntuKCl9KSl9LHRoaXMubG9hZERhdGFDYWxsYmFjaz0odCxlLG4pPT57Y29uc3QgaT1uLm1hcCgodD0+e2NvbnN0W2UsbixpXT10O3JldHVybiBpLndhbGxfdGltZT1uZXcgRGF0ZSgxZTMqZSksaS5zdGVwPW4saX0pKSxyPXRoaXMuZ2V0RGF0YUxvYWROYW1lKGUpO3RoaXMuJC5jaGFydC5zZXRTZXJpZXNEYXRhKHIsaSksdGhpcy4kLmNoYXJ0LnNldFZpc2libGVTZXJpZXMoW3JdKX0sdGhpcy5fY29sb3JTY2FsZT17c2NhbGU6QU99LHRoaXMuX2V4cGFuZGVkPSExLHRoaXMuX2NhbmNlbGxlcj1uZXcgTk99X3JlbG9hZE9uUnVuVGFnQ2hhbmdlKCl7dGhpcy5yZWxvYWQoKX1fdXBkYXRlRGF0YVRvTG9hZCgpe3RoaXMuZGF0YVRvTG9hZD1be3J1bjp0aGlzLnJ1bix0YWc6dGhpcy50YWd9XX1nZXQgX3J1bkNvbG9yKCl7cmV0dXJuIHRoaXMuX2NvbG9yU2NhbGUuc2NhbGUodGhpcy5ydW4pfXJlZHJhdygpe3RoaXMuJC5jaGFydC5yZWRyYXcoKX1fdG9nZ2xlRXhwYW5kZWQodCl7dGhpcy5zZXQoIl9leHBhbmRlZCIsIXRoaXMuX2V4cGFuZGVkKSx0aGlzLnJlZHJhdygpfX07Znl0LnRlbXBsYXRlPV9lYAogICAgPHRmLWNhcmQtaGVhZGluZwogICAgICB0YWc9IltbdGFnXV0iCiAgICAgIHJ1bj0iW1tydW5dXSIKICAgICAgZGlzcGxheS1uYW1lPSJbW3RhZ01ldGFkYXRhLmRpc3BsYXlOYW1lXV0iCiAgICAgIGRlc2NyaXB0aW9uPSJbW3RhZ01ldGFkYXRhLmRlc2NyaXB0aW9uXV0iCiAgICAgIGNvbG9yPSJbW19ydW5Db2xvcl1dIgogICAgPjwvdGYtY2FyZC1oZWFkaW5nPgogICAgPCEtLQogICAgICBUaGUgbWFpbiBkaXN0cmlidXRpb24gdGhhdCB3ZSByZW5kZXIuIERhdGEgaXMgc2V0IGRpcmVjdGx5IHdpdGgKICAgICAgXGBzZXRTZXJpZXNEYXRhXGAsIG5vdCB3aXRoIGEgYm91bmQgcHJvcGVydHkuCiAgICAtLT4KICAgIDx2ei1kaXN0cmlidXRpb24tY2hhcnQKICAgICAgaWQ9ImNoYXJ0IgogICAgICB4LXR5cGU9IltbeFR5cGVdXSIKICAgICAgY29sb3Itc2NhbGU9IltbX2NvbG9yU2NhbGVdXSIKICAgID48L3Z6LWRpc3RyaWJ1dGlvbi1jaGFydD4KICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiByb3c7Ij4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgc2VsZWN0ZWQkPSJbW19leHBhbmRlZF1dIgogICAgICAgIGljb249ImZ1bGxzY3JlZW4iCiAgICAgICAgb24tdGFwPSJfdG9nZ2xlRXhwYW5kZWQiCiAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgd2lkdGg6IDMzMHB4OwogICAgICAgIGhlaWdodDogMjM1cHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7CiAgICAgIH0KICAgICAgOmhvc3QoW19leHBhbmRlZF0pIHsKICAgICAgICB3aWR0aDogNzAwcHg7CiAgICAgICAgaGVpZ2h0OiA1MDBweDsKICAgICAgfQoKICAgICAgdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMgewogICAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgfQoKICAgICAgcGFwZXItaWNvbi1idXR0b24gewogICAgICAgIGNvbG9yOiAjMjE5NmYzOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDEwMCU7CiAgICAgICAgd2lkdGg6IDMycHg7CiAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICAgIHBhZGRpbmc6IDRweDsKICAgICAgfQogICAgICBwYXBlci1pY29uLWJ1dHRvbltzZWxlY3RlZF0gewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXRiLXVpLWxpZ2h0LWFjY2VudCk7CiAgICAgIH0KCiAgICAgIHRmLWNhcmQtaGVhZGluZyB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgICAgfQogICAgPC9zdHlsZT4KICBgLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLGZ5dC5wcm90b3R5cGUsInJ1biIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxmeXQucHJvdG90eXBlLCJ0YWciLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZnl0LnByb3RvdHlwZSwidGFnTWV0YWRhdGEiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sZnl0LnByb3RvdHlwZSwieFR5cGUiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZnl0LnByb3RvdHlwZSwiZ2V0RGF0YUxvYWROYW1lIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLGZ5dC5wcm90b3R5cGUsImxvYWREYXRhQ2FsbGJhY2siLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZnl0LnByb3RvdHlwZSwiX2NvbG9yU2NhbGUiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFuLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sZnl0LnByb3RvdHlwZSwiX2V4cGFuZGVkIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLGhyKV0sZnl0LnByb3RvdHlwZSwicmVxdWVzdE1hbmFnZXIiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsTk8pXSxmeXQucHJvdG90eXBlLCJfY2FuY2VsbGVyIix2b2lkIDApLHQoW2EoInJ1biIsInRhZyIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sZnl0LnByb3RvdHlwZSwiX3JlbG9hZE9uUnVuVGFnQ2hhbmdlIixudWxsKSx0KFthKCJydW4iLCJ0YWciKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLGZ5dC5wcm90b3R5cGUsIl91cGRhdGVEYXRhVG9Mb2FkIixudWxsKSx0KFtzKCJydW4iKSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxmeXQucHJvdG90eXBlLCJfcnVuQ29sb3IiLG51bGwpLGZ5dD10KFtpKCJ0Zi1kaXN0cmlidXRpb24tbG9hZGVyIildLGZ5dCk7bGV0IG15dD1jbGFzcyBleHRlbmRzKHRyKHllKSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMucmVsb2FkT25SZWFkeT0hMCx0aGlzLl94VHlwZT0ic3RlcCIsdGhpcy5fcmVxdWVzdE1hbmFnZXI9bmV3IGhyfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLnJlbG9hZE9uUmVhZHkmJnRoaXMucmVsb2FkKCl9cmVsb2FkKCl7dGhpcy5fZmV0Y2hUYWdzKCkudGhlbigoKCk9Pnt0aGlzLl9yZWxvYWREaXN0cmlidXRpb25zKCl9KSl9X2ZldGNoVGFncygpe2NvbnN0IHQ9Z3IoKS5wbHVnaW5Sb3V0ZSgiZGlzdHJpYnV0aW9ucyIsIi90YWdzIik7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbigodD0+e2lmKHdlLmlzRXF1YWwodCx0aGlzLl9ydW5Ub1RhZ0luZm8pKXJldHVybjtjb25zdCBlPXdlLm1hcFZhbHVlcyh0LCh0PT5PYmplY3Qua2V5cyh0KSkpLG49b3IoZSk7dGhpcy5zZXQoIl9kYXRhTm90Rm91bmQiLDA9PT1uLmxlbmd0aCksdGhpcy5zZXQoIl9ydW5Ub1RhZyIsZSksdGhpcy5zZXQoIl9ydW5Ub1RhZ0luZm8iLHQpLHRoaXMuYXN5bmMoKCgpPT57dGhpcy5zZXQoIl9jYXRlZ29yaWVzRG9tUmVhZHkiLCEwKX0pKX0pKX1fcmVsb2FkRGlzdHJpYnV0aW9ucygpe3RoaXMucm9vdC5xdWVyeVNlbGVjdG9yQWxsKCJ0Zi1kaXN0cmlidXRpb24tbG9hZGVyIikuZm9yRWFjaCgodD0+e3QucmVsb2FkKCl9KSl9X3Nob3VsZE9wZW4odCl7cmV0dXJuIHQ8PTJ9Z2V0IF9jYXRlZ29yaWVzKCl7cmV0dXJuIFNyKHRoaXMuX3J1blRvVGFnLHRoaXMuX3NlbGVjdGVkUnVucyx0aGlzLl90YWdGaWx0ZXIpfV90YWdNZXRhZGF0YSh0LGUsbil7cmV0dXJuIHRbZV1bbl19fTtteXQudGVtcGxhdGU9X2VgCiAgICA8dGYtZGFzaGJvYXJkLWxheW91dD4KICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhciIgc2xvdD0ic2lkZWJhciI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2V0dGluZ3MiPgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgICAgPHRmLW9wdGlvbi1zZWxlY3RvcgogICAgICAgICAgICAgIGlkPSJ4VHlwZVNlbGVjdG9yIgogICAgICAgICAgICAgIG5hbWU9Ikhvcml6b250YWwgYXhpcyIKICAgICAgICAgICAgICBzZWxlY3RlZC1pZD0ie3tfeFR5cGV9fSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9InN0ZXAiPnN0ZXA8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJyZWxhdGl2ZSI+cmVsYXRpdmU8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJ3YWxsX3RpbWUiPndhbGw8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgPC90Zi1vcHRpb24tc2VsZWN0b3I+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24gcnVucy1zZWxlY3RvciI+CiAgICAgICAgICA8dGYtcnVucy1zZWxlY3RvciBzZWxlY3RlZC1ydW5zPSJ7e19zZWxlY3RlZFJ1bnN9fSI+CiAgICAgICAgICA8L3RmLXJ1bnMtc2VsZWN0b3I+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0iY2VudGVyIiBzbG90PSJjZW50ZXIiPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPGRpdiBjbGFzcz0ibm8tZGF0YS13YXJuaW5nIj4KICAgICAgICAgICAgPGgzPk5vIGRpc3RyaWJ1dGlvbiBkYXRhIHdhcyBmb3VuZC48L2gzPgogICAgICAgICAgICA8cD5Qcm9iYWJsZSBjYXVzZXM6PC9wPgogICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgWW91IGhhdmVu4oCZdCB3cml0dGVuIGFueSBoaXN0b2dyYW0gZGF0YSB0byB5b3VyIGV2ZW50IGZpbGVzLgogICAgICAgICAgICAgICAgKEhpc3RvZ3JhbXMgYW5kIGRpc3RyaWJ1dGlvbnMgYm90aCB1c2UgdGhlIGhpc3RvZ3JhbSBzdW1tYXJ5CiAgICAgICAgICAgICAgICBvcGVyYXRpb24uKQogICAgICAgICAgICAgIDwvbGk+CgogICAgICAgICAgICAgIDxsaT5UZW5zb3JCb2FyZCBjYW7igJl0IGZpbmQgeW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICA8L3VsPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW914oCZcmUgbmV3IHRvIHVzaW5nIFRlbnNvckJvYXJkLCBhbmQgd2FudCB0byBmaW5kIG91dCBob3cgdG8KICAgICAgICAgICAgICBhZGQgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIgogICAgICAgICAgICAgICAgPlJFQURNRTwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgcGVyaGFwcyB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCIKICAgICAgICAgICAgICAgID5UZW5zb3JCb2FyZCB0dXRvcmlhbDwvYQogICAgICAgICAgICAgID4uCiAgICAgICAgICAgIDwvcD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciCiAgICAgICAgICAgICAgICA+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgY29uc2lkZXIgZmlsaW5nIGFuIGlzc3VlIG9uIEdpdEh1Yi4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8dGYtdGFnLWZpbHRlcmVyIHRhZy1maWx0ZXI9Int7X3RhZ0ZpbHRlcn19Ij48L3RmLXRhZy1maWx0ZXJlcj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3CiAgICAgICAgICAgICAgY2F0ZWdvcnk9IltbY2F0ZWdvcnldXSIKICAgICAgICAgICAgICBpbml0aWFsLW9wZW5lZD0iW1tfc2hvdWxkT3BlbihpbmRleCldXSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0Zi1kaXN0cmlidXRpb24tbG9hZGVyCiAgICAgICAgICAgICAgICAgIGFjdGl2ZT0iW1thY3RpdmVdXSIKICAgICAgICAgICAgICAgICAgcnVuPSJbW2l0ZW0ucnVuXV0iCiAgICAgICAgICAgICAgICAgIHRhZz0iW1tpdGVtLnRhZ11dIgogICAgICAgICAgICAgICAgICB0YWctbWV0YWRhdGE9IltbX3RhZ01ldGFkYXRhKF9ydW5Ub1RhZ0luZm8sIGl0ZW0ucnVuLCBpdGVtLnRhZyldXSIKICAgICAgICAgICAgICAgICAgeC10eXBlPSJbW194VHlwZV1dIgogICAgICAgICAgICAgICAgICByZXF1ZXN0LW1hbmFnZXI9IltbX3JlcXVlc3RNYW5hZ2VyXV0iCiAgICAgICAgICAgICAgICA+PC90Zi1kaXN0cmlidXRpb24tbG9hZGVyPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvdGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXc+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC90Zi1kYXNoYm9hcmQtbGF5b3V0PgoKICAgIDxzdHlsZSBpbmNsdWRlPSJkYXNoYm9hcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CiAgICA8L3N0eWxlPgogIGAsdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxteXQucHJvdG90eXBlLCJyZWxvYWRPblJlYWR5Iix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLG15dC5wcm90b3R5cGUsIl94VHlwZSIsdm9pZCAwKSx0KFtvKHt0eXBlOkFycmF5fSksZSgiZGVzaWduOnR5cGUiLEFycmF5KV0sbXl0LnByb3RvdHlwZSwiX3NlbGVjdGVkUnVucyIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxteXQucHJvdG90eXBlLCJfcnVuVG9UYWciLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sbXl0LnByb3RvdHlwZSwiX3J1blRvVGFnSW5mbyIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLG15dC5wcm90b3R5cGUsIl9kYXRhTm90Rm91bmQiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sbXl0LnByb3RvdHlwZSwiX3RhZ0ZpbHRlciIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLG15dC5wcm90b3R5cGUsIl9jYXRlZ29yaWVzRG9tUmVhZHkiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsaHIpXSxteXQucHJvdG90eXBlLCJfcmVxdWVzdE1hbmFnZXIiLHZvaWQgMCksdChbcygiX3J1blRvVGFnIiwiX3NlbGVjdGVkUnVucyIsIl90YWdGaWx0ZXIiLCJfY2F0ZWdvcmllc0RvbVJlYWR5IiksZSgiZGVzaWduOnR5cGUiLEFycmF5KSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxteXQucHJvdG90eXBlLCJfY2F0ZWdvcmllcyIsbnVsbCksbXl0PXQoW2koInRmLWRpc3RyaWJ1dGlvbi1kYXNoYm9hcmQiKV0sbXl0KTt2YXIgZ3l0PU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLExpc3RlbktleTpocyxhZGRIYXNoTGlzdGVuZXI6ZnMsYWRkU3RvcmFnZUxpc3RlbmVyOm1zLGZpcmVTdG9yYWdlQ2hhbmdlZDpncyxyZW1vdmVIYXNoTGlzdGVuZXJCeUtleTpfcyxyZW1vdmVTdG9yYWdlTGlzdGVuZXJCeUtleTp5cyxnZXRVcmxIYXNoRGljdDpmdW5jdGlvbiBfeXQoKXtyZXR1cm4gVHN9LERJU0FNQklHVUFUT1I6ImRpc2FtYmlndWF0b3IiLGdldFN0cmluZzpQcyxzZXRTdHJpbmc6TnMsZ2V0U3RyaW5nSW5pdGlhbGl6ZXI6SXMsZ2V0U3RyaW5nT2JzZXJ2ZXI6T3MsZGlzcG9zZVN0cmluZ0JpbmRpbmc6UnMsZ2V0Qm9vbGVhbjp6cyxzZXRCb29sZWFuOkRzLGdldEJvb2xlYW5Jbml0aWFsaXplcjpCcyxnZXRCb29sZWFuT2JzZXJ2ZXI6SHMsZGlzcG9zZUJvb2xlYW5CaW5kaW5nOkZzLGdldE51bWJlcjpWcyxzZXROdW1iZXI6VXMsZ2V0TnVtYmVySW5pdGlhbGl6ZXI6anMsZ2V0TnVtYmVyT2JzZXJ2ZXI6R3MsZGlzcG9zZU51bWJlckJpbmRpbmc6V3MsZ2V0T2JqZWN0OnFzLHNldE9iamVjdDpZcyxnZXRPYmplY3RJbml0aWFsaXplcjpYcyxnZXRPYmplY3RPYnNlcnZlcjokcyxkaXNwb3NlT2JqZWN0QmluZGluZzpLcyxtYWtlQmluZGluZ3M6WnMsbWlncmF0ZUxlZ2FjeVVSTFNjaGVtZTpmdW5jdGlvbiB5eXQoKXtjb25zdCB0PW5ldyBTZXQoWyJleGFtcGxlc1BhdGgiLCJoaWRlTW9kZWxQYW5lMiIsIm1vZGVsTmFtZTEiLCJtb2RlbE5hbWUyIiwiaW5mZXJlbmNlQWRkcmVzczEiLCJpbmZlcmVuY2VBZGRyZXNzMiIsIm1vZGVsVHlwZSIsIm1vZGVsVmVyc2lvbjEiLCJtb2RlbFZlcnNpb24yIiwibW9kZWxTaWduYXR1cmUxIiwibW9kZWxTaWduYXR1cmUyIiwibWF4RXhhbXBsZXMiLCJsYWJlbFZvY2FiUGF0aCIsIm11bHRpQ2xhc3MiLCJzZXF1ZW5jZUV4YW1wbGVzIiwibWF4Q2xhc3Nlc1RvRGlzcGxheSIsInNhbXBsaW5nT2RkcyIsInVzZVByZWRpY3RBcGkiLCJwcmVkaWN0SW5wdXRUZW5zb3IiLCJwcmVkaWN0T3V0cHV0VGVuc29yIl0pLGU9QXMoQ3MoKSk7aWYoIndoYXRpZiI9PT1lLl9fdGFiX18pZm9yKGxldCBuIG9mIHQpbiBpbiBlJiYoZVtgcC53aGF0aWYuJHtufWBdPWVbbl0pO2tzKExzKGUpKSwoZnVuY3Rpb24gbih0KXtUcz10fSkoZSl9fSksdnl0PWZ1bmN0aW9uIGJ5dCh0LGUpe3JldHVybiB0PT09ZXx8dCE9dCYmZSE9ZX0seHl0PWZ1bmN0aW9uIHd5dCh0LGUpe2Zvcih2YXIgbj10Lmxlbmd0aDtuLS07KWlmKHZ5dCh0W25dWzBdLGUpKXJldHVybiBuO3JldHVybi0xfSxTeXQ9QXJyYXkucHJvdG90eXBlLnNwbGljZTtmdW5jdGlvbiBNeXQodCl7dmFyIGU9LTEsbj1udWxsPT10PzA6dC5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2U8bjspe3ZhciBpPXRbZV07dGhpcy5zZXQoaVswXSxpWzFdKX19TXl0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbiBFeXQoKXt0aGlzLl9fZGF0YV9fPVtdLHRoaXMuc2l6ZT0wfSxNeXQucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbiBUeXQodCl7dmFyIGU9dGhpcy5fX2RhdGFfXyxuPXh5dChlLHQpO3JldHVybiEobjwwfHwobj09ZS5sZW5ndGgtMT9lLnBvcCgpOlN5dC5jYWxsKGUsbiwxKSwtLXRoaXMuc2l6ZSwwKSl9LE15dC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uIEN5dCh0KXt2YXIgZT10aGlzLl9fZGF0YV9fLG49eHl0KGUsdCk7cmV0dXJuIG48MD92b2lkIDA6ZVtuXVsxXX0sTXl0LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24gQXl0KHQpe3JldHVybiB4eXQodGhpcy5fX2RhdGFfXyx0KT4tMX0sTXl0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24ga3l0KHQsZSl7dmFyIG49dGhpcy5fX2RhdGFfXyxpPXh5dChuLHQpO3JldHVybiBpPDA/KCsrdGhpcy5zaXplLG4ucHVzaChbdCxlXSkpOm5baV1bMV09ZSx0aGlzfTt2YXIgTHl0LFB5dD1NeXQsTnl0PSJvYmplY3QiPT10eXBlb2YgdmUmJnZlJiZ2ZS5PYmplY3Q9PT1PYmplY3QmJnZlLEl5dD0ib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmLE95dD1OeXR8fEl5dHx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKSxSeXQ9T3l0LlN5bWJvbCx6eXQ9T2JqZWN0LnByb3RvdHlwZSxEeXQ9enl0Lmhhc093blByb3BlcnR5LEJ5dD16eXQudG9TdHJpbmcsSHl0PVJ5dD9SeXQudG9TdHJpbmdUYWc6dm9pZCAwLEZ5dD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLFZ5dD1SeXQ/Unl0LnRvU3RyaW5nVGFnOnZvaWQgMCxVeXQ9ZnVuY3Rpb24ganl0KHQpe3JldHVybiBudWxsPT10P3ZvaWQgMD09PXQ/IltvYmplY3QgVW5kZWZpbmVkXSI6IltvYmplY3QgTnVsbF0iOlZ5dCYmVnl0IGluIE9iamVjdCh0KT8oZnVuY3Rpb24gZSh0KXt2YXIgZT1EeXQuY2FsbCh0LEh5dCksbj10W0h5dF07dHJ5e3RbSHl0XT12b2lkIDA7dmFyIGk9ITB9Y2F0Y2godCl7fXZhciByPUJ5dC5jYWxsKHQpO3JldHVybiBpJiYoZT90W0h5dF09bjpkZWxldGUgdFtIeXRdKSxyfSkodCk6KGZ1bmN0aW9uIG4odCl7cmV0dXJuIEZ5dC5jYWxsKHQpfSkodCl9LEd5dD1mdW5jdGlvbiBXeXQodCl7dmFyIGU9dHlwZW9mIHQ7cmV0dXJuIG51bGwhPXQmJigib2JqZWN0Ij09ZXx8ImZ1bmN0aW9uIj09ZSl9LHF5dD1mdW5jdGlvbiBZeXQodCl7aWYoIUd5dCh0KSlyZXR1cm4hMTt2YXIgZT1VeXQodCk7cmV0dXJuIltvYmplY3QgRnVuY3Rpb25dIj09ZXx8IltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIj09ZXx8IltvYmplY3QgQXN5bmNGdW5jdGlvbl0iPT1lfHwiW29iamVjdCBQcm94eV0iPT1lfSxYeXQ9T3l0WyJfX2NvcmUtanNfc2hhcmVkX18iXSwkeXQ9KEx5dD0vW14uXSskLy5leGVjKFh5dCYmWHl0LmtleXMmJlh5dC5rZXlzLklFX1BST1RPfHwiIikpPyJTeW1ib2woc3JjKV8xLiIrTHl0OiIiLEt5dD1GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcsWnl0PWZ1bmN0aW9uIEp5dCh0KXtpZihudWxsIT10KXt0cnl7cmV0dXJuIEt5dC5jYWxsKHQpfWNhdGNoKHQpe310cnl7cmV0dXJuIHQrIiJ9Y2F0Y2godCl7fX1yZXR1cm4iIn0sUXl0PS9eXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXSQvLHR2dD1SZWdFeHAoIl4iK0Z1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpLnJlcGxhY2UoL1tcXF4kLiorPygpW1xde318XS9nLCJcXCQmIikucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXCgpfCBmb3IgLis/KD89XFxcXSkvZywiJDEuKj8iKSsiJCIpLGV2dD1mdW5jdGlvbiBudnQodCxlKXt2YXIgbj0oZnVuY3Rpb24gaSh0LGUpe3JldHVybiBudWxsPT10P3ZvaWQgMDp0W2VdfSkodCxlKTtyZXR1cm4oZnVuY3Rpb24gcih0KXtyZXR1cm4hKCFHeXQodCl8fChmdW5jdGlvbiBlKHQpe3JldHVybiEhJHl0JiYkeXQgaW4gdH0pKHQpKSYmKHF5dCh0KT90dnQ6UXl0KS50ZXN0KFp5dCh0KSl9KShuKT9uOnZvaWQgMH0saXZ0PWV2dChPeXQsIk1hcCIpLHJ2dD1ldnQoT2JqZWN0LCJjcmVhdGUiKSxvdnQ9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxhdnQ9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBzdnQodCl7dmFyIGU9LTEsbj1udWxsPT10PzA6dC5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2U8bjspe3ZhciBpPXRbZV07dGhpcy5zZXQoaVswXSxpWzFdKX19c3Z0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbiBsdnQoKXt0aGlzLl9fZGF0YV9fPXJ2dD9ydnQobnVsbCk6e30sdGhpcy5zaXplPTB9LHN2dC5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uIGN2dCh0KXt2YXIgZT10aGlzLmhhcyh0KSYmZGVsZXRlIHRoaXMuX19kYXRhX19bdF07cmV0dXJuIHRoaXMuc2l6ZS09ZT8xOjAsZX0sc3Z0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24gdXZ0KHQpe3ZhciBlPXRoaXMuX19kYXRhX187aWYocnZ0KXt2YXIgbj1lW3RdO3JldHVybiJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIj09PW4/dm9pZCAwOm59cmV0dXJuIG92dC5jYWxsKGUsdCk/ZVt0XTp2b2lkIDB9LHN2dC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uIGh2dCh0KXt2YXIgZT10aGlzLl9fZGF0YV9fO3JldHVybiBydnQ/dm9pZCAwIT09ZVt0XTphdnQuY2FsbChlLHQpfSxzdnQucHJvdG90eXBlLnNldD1mdW5jdGlvbiBkdnQodCxlKXt2YXIgbj10aGlzLl9fZGF0YV9fO3JldHVybiB0aGlzLnNpemUrPXRoaXMuaGFzKHQpPzA6MSxuW3RdPXJ2dCYmdm9pZCAwPT09ZT8iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI6ZSx0aGlzfTt2YXIgcHZ0PXN2dCxmdnQ9ZnVuY3Rpb24gbXZ0KHQsZSl7dmFyIG49dC5fX2RhdGFfXztyZXR1cm4oZnVuY3Rpb24gaSh0KXt2YXIgZT10eXBlb2YgdDtyZXR1cm4ic3RyaW5nIj09ZXx8Im51bWJlciI9PWV8fCJzeW1ib2wiPT1lfHwiYm9vbGVhbiI9PWU/Il9fcHJvdG9fXyIhPT10Om51bGw9PT10fSkoZSk/blsic3RyaW5nIj09dHlwZW9mIGU/InN0cmluZyI6Imhhc2giXTpuLm1hcH07ZnVuY3Rpb24gZ3Z0KHQpe3ZhciBlPS0xLG49bnVsbD09dD8wOnQubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytlPG47KXt2YXIgaT10W2VdO3RoaXMuc2V0KGlbMF0saVsxXSl9fWd2dC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24gX3Z0KCl7dGhpcy5zaXplPTAsdGhpcy5fX2RhdGFfXz17aGFzaDpuZXcgcHZ0LG1hcDpuZXcoaXZ0fHxQeXQpLHN0cmluZzpuZXcgcHZ0fX0sZ3Z0LnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24geXZ0KHQpe3ZhciBlPWZ2dCh0aGlzLHQpLmRlbGV0ZSh0KTtyZXR1cm4gdGhpcy5zaXplLT1lPzE6MCxlfSxndnQucHJvdG90eXBlLmdldD1mdW5jdGlvbiB2dnQodCl7cmV0dXJuIGZ2dCh0aGlzLHQpLmdldCh0KX0sZ3Z0LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24gYnZ0KHQpe3JldHVybiBmdnQodGhpcyx0KS5oYXModCl9LGd2dC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uIHh2dCh0LGUpe3ZhciBuPWZ2dCh0aGlzLHQpLGk9bi5zaXplO3JldHVybiBuLnNldCh0LGUpLHRoaXMuc2l6ZSs9bi5zaXplPT1pPzA6MSx0aGlzfTt2YXIgd3Z0PWd2dDtmdW5jdGlvbiBTdnQodCl7dmFyIGU9dGhpcy5fX2RhdGFfXz1uZXcgUHl0KHQpO3RoaXMuc2l6ZT1lLnNpemV9U3Z0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbiBNdnQoKXt0aGlzLl9fZGF0YV9fPW5ldyBQeXQsdGhpcy5zaXplPTB9LFN2dC5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uIEV2dCh0KXt2YXIgZT10aGlzLl9fZGF0YV9fLG49ZS5kZWxldGUodCk7cmV0dXJuIHRoaXMuc2l6ZT1lLnNpemUsbn0sU3Z0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24gVHZ0KHQpe3JldHVybiB0aGlzLl9fZGF0YV9fLmdldCh0KX0sU3Z0LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24gQ3Z0KHQpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyh0KX0sU3Z0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24gQXZ0KHQsZSl7dmFyIG49dGhpcy5fX2RhdGFfXztpZihuIGluc3RhbmNlb2YgUHl0KXt2YXIgaT1uLl9fZGF0YV9fO2lmKCFpdnR8fGkubGVuZ3RoPDE5OSlyZXR1cm4gaS5wdXNoKFt0LGVdKSx0aGlzLnNpemU9KytuLnNpemUsdGhpcztuPXRoaXMuX19kYXRhX189bmV3IHd2dChpKX1yZXR1cm4gbi5zZXQodCxlKSx0aGlzLnNpemU9bi5zaXplLHRoaXN9O3ZhciBrdnQ9U3Z0LEx2dD1mdW5jdGlvbiBQdnQodCxlKXtmb3IodmFyIG49LTEsaT1udWxsPT10PzA6dC5sZW5ndGg7KytuPGkmJiExIT09ZSh0W25dLG4sdCk7KTtyZXR1cm4gdH0sTnZ0PShmdW5jdGlvbigpe3RyeXt2YXIgdD1ldnQoT2JqZWN0LCJkZWZpbmVQcm9wZXJ0eSIpO3JldHVybiB0KHt9LCIiLHt9KSx0fWNhdGNoKHQpe319KSgpLEl2dD1mdW5jdGlvbiBPdnQodCxlLG4peyJfX3Byb3RvX18iPT1lJiZOdnQ/TnZ0KHQsZSx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6bix3cml0YWJsZTohMH0pOnRbZV09bn0sUnZ0PU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksenZ0PWZ1bmN0aW9uIER2dCh0LGUsbil7dmFyIGk9dFtlXTtSdnQuY2FsbCh0LGUpJiZ2eXQoaSxuKSYmKHZvaWQgMCE9PW58fGUgaW4gdCl8fEl2dCh0LGUsbil9LEJ2dD1mdW5jdGlvbiBIdnQodCxlLG4saSl7dmFyIHI9IW47bnx8KG49e30pO2Zvcih2YXIgbz0tMSxhPWUubGVuZ3RoOysrbzxhOyl7dmFyIHM9ZVtvXSxsPWk/aShuW3NdLHRbc10scyxuLHQpOnZvaWQgMDt2b2lkIDA9PT1sJiYobD10W3NdKSxyP0l2dChuLHMsbCk6enZ0KG4scyxsKX1yZXR1cm4gbn0sRnZ0PWZ1bmN0aW9uIFZ2dCh0KXtyZXR1cm4gbnVsbCE9dCYmIm9iamVjdCI9PXR5cGVvZiB0fSxVdnQ9ZnVuY3Rpb24ganZ0KHQpe3JldHVybiBGdnQodCkmJiJbb2JqZWN0IEFyZ3VtZW50c10iPT1VeXQodCl9LEd2dD1PYmplY3QucHJvdG90eXBlLFd2dD1HdnQuaGFzT3duUHJvcGVydHkscXZ0PUd2dC5wcm9wZXJ0eUlzRW51bWVyYWJsZSxZdnQ9VXZ0KChmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KSgpKT9VdnQ6ZnVuY3Rpb24odCl7cmV0dXJuIEZ2dCh0KSYmV3Z0LmNhbGwodCwiY2FsbGVlIikmJiFxdnQuY2FsbCh0LCJjYWxsZWUiKX0sWHZ0PUFycmF5LmlzQXJyYXksJHZ0PWZ1bmN0aW9uIEt2dCgpe3JldHVybiExfSxadnQ9YmUoKGZ1bmN0aW9uKHQsZSl7dmFyIG49ZSYmIWUubm9kZVR5cGUmJmUsaT1uJiZ0JiYhdC5ub2RlVHlwZSYmdCxyPWkmJmkuZXhwb3J0cz09PW4/T3l0LkJ1ZmZlcjp2b2lkIDA7dC5leHBvcnRzPShyP3IuaXNCdWZmZXI6dm9pZCAwKXx8JHZ0fSkpLEp2dD0vXig/OjB8WzEtOV1cZCopJC8sUXZ0PWZ1bmN0aW9uIHRidCh0LGUpe3ZhciBuPXR5cGVvZiB0O3JldHVybiEhKGU9bnVsbD09ZT85MDA3MTk5MjU0NzQwOTkxOmUpJiYoIm51bWJlciI9PW58fCJzeW1ib2wiIT1uJiZKdnQudGVzdCh0KSkmJnQ+LTEmJnQlMT09MCYmdDxlfSxlYnQ9ZnVuY3Rpb24gbmJ0KHQpe3JldHVybiJudW1iZXIiPT10eXBlb2YgdCYmdD4tMSYmdCUxPT0wJiZ0PD05MDA3MTk5MjU0NzQwOTkxfSxpYnQ9e307aWJ0WyJbb2JqZWN0IEZsb2F0MzJBcnJheV0iXT1pYnRbIltvYmplY3QgRmxvYXQ2NEFycmF5XSJdPWlidFsiW29iamVjdCBJbnQ4QXJyYXldIl09aWJ0WyJbb2JqZWN0IEludDE2QXJyYXldIl09aWJ0WyJbb2JqZWN0IEludDMyQXJyYXldIl09aWJ0WyJbb2JqZWN0IFVpbnQ4QXJyYXldIl09aWJ0WyJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSJdPWlidFsiW29iamVjdCBVaW50MTZBcnJheV0iXT1pYnRbIltvYmplY3QgVWludDMyQXJyYXldIl09ITAsaWJ0WyJbb2JqZWN0IEFyZ3VtZW50c10iXT1pYnRbIltvYmplY3QgQXJyYXldIl09aWJ0WyJbb2JqZWN0IEFycmF5QnVmZmVyXSJdPWlidFsiW29iamVjdCBCb29sZWFuXSJdPWlidFsiW29iamVjdCBEYXRhVmlld10iXT1pYnRbIltvYmplY3QgRGF0ZV0iXT1pYnRbIltvYmplY3QgRXJyb3JdIl09aWJ0WyJbb2JqZWN0IEZ1bmN0aW9uXSJdPWlidFsiW29iamVjdCBNYXBdIl09aWJ0WyJbb2JqZWN0IE51bWJlcl0iXT1pYnRbIltvYmplY3QgT2JqZWN0XSJdPWlidFsiW29iamVjdCBSZWdFeHBdIl09aWJ0WyJbb2JqZWN0IFNldF0iXT1pYnRbIltvYmplY3QgU3RyaW5nXSJdPWlidFsiW29iamVjdCBXZWFrTWFwXSJdPSExO3ZhciByYnQ9ZnVuY3Rpb24gb2J0KHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdChlKX19LGFidD1iZSgoZnVuY3Rpb24odCxlKXt2YXIgbj1lJiYhZS5ub2RlVHlwZSYmZSxpPW4mJnQmJiF0Lm5vZGVUeXBlJiZ0LHI9aSYmaS5leHBvcnRzPT09biYmTnl0LnByb2Nlc3Msbz0oZnVuY3Rpb24oKXt0cnl7cmV0dXJuIGkmJmkucmVxdWlyZSYmaS5yZXF1aXJlKCJ1dGlsIikudHlwZXN8fHImJnIuYmluZGluZyYmci5iaW5kaW5nKCJ1dGlsIil9Y2F0Y2godCl7fX0pKCk7dC5leHBvcnRzPW99KSksc2J0PWFidCYmYWJ0LmlzVHlwZWRBcnJheSxsYnQ9c2J0P3JidChzYnQpOmZ1bmN0aW9uIGNidCh0KXtyZXR1cm4gRnZ0KHQpJiZlYnQodC5sZW5ndGgpJiYhIWlidFtVeXQodCldfSx1YnQ9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxoYnQ9ZnVuY3Rpb24gZGJ0KHQsZSl7dmFyIG49WHZ0KHQpLGk9IW4mJll2dCh0KSxyPSFuJiYhaSYmWnZ0KHQpLG89IW4mJiFpJiYhciYmbGJ0KHQpLGE9bnx8aXx8cnx8byxzPWE/KGZ1bmN0aW9uIGwodCxlKXtmb3IodmFyIG49LTEsaT1BcnJheSh0KTsrK248dDspaVtuXT1lKG4pO3JldHVybiBpfSkodC5sZW5ndGgsU3RyaW5nKTpbXSxjPXMubGVuZ3RoO2Zvcih2YXIgdSBpbiB0KSFlJiYhdWJ0LmNhbGwodCx1KXx8YSYmKCJsZW5ndGgiPT11fHxyJiYoIm9mZnNldCI9PXV8fCJwYXJlbnQiPT11KXx8byYmKCJidWZmZXIiPT11fHwiYnl0ZUxlbmd0aCI9PXV8fCJieXRlT2Zmc2V0Ij09dSl8fFF2dCh1LGMpKXx8cy5wdXNoKHUpO3JldHVybiBzfSxwYnQ9T2JqZWN0LnByb3RvdHlwZSxmYnQ9ZnVuY3Rpb24gbWJ0KHQpe3ZhciBlPXQmJnQuY29uc3RydWN0b3I7cmV0dXJuIHQ9PT0oImZ1bmN0aW9uIj09dHlwZW9mIGUmJmUucHJvdG90eXBlfHxwYnQpfSxnYnQ9ZnVuY3Rpb24gX2J0KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0KGUobikpfX0seWJ0PWdidChPYmplY3Qua2V5cyxPYmplY3QpLHZidD1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LGJidD1mdW5jdGlvbiB4YnQodCl7aWYoIWZidCh0KSlyZXR1cm4geWJ0KHQpO3ZhciBlPVtdO2Zvcih2YXIgbiBpbiBPYmplY3QodCkpdmJ0LmNhbGwodCxuKSYmImNvbnN0cnVjdG9yIiE9biYmZS5wdXNoKG4pO3JldHVybiBlfSx3YnQ9ZnVuY3Rpb24gU2J0KHQpe3JldHVybiBudWxsIT10JiZlYnQodC5sZW5ndGgpJiYhcXl0KHQpfSxNYnQ9ZnVuY3Rpb24gRWJ0KHQpe3JldHVybiB3YnQodCk/aGJ0KHQpOmJidCh0KX0sVGJ0PU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksQ2J0PWZ1bmN0aW9uIEFidCh0KXtyZXR1cm4gd2J0KHQpP2hidCh0LCEwKTooZnVuY3Rpb24gZSh0KXtpZighR3l0KHQpKXJldHVybihmdW5jdGlvbiBlKHQpe3ZhciBlPVtdO2lmKG51bGwhPXQpZm9yKHZhciBuIGluIE9iamVjdCh0KSllLnB1c2gobik7cmV0dXJuIGV9KSh0KTt2YXIgbj1mYnQodCksaT1bXTtmb3IodmFyIHIgaW4gdCkoImNvbnN0cnVjdG9yIiE9cnx8IW4mJlRidC5jYWxsKHQscikpJiZpLnB1c2gocik7cmV0dXJuIGl9KSh0KX0sa2J0PWJlKChmdW5jdGlvbih0LGUpe3ZhciBuPWUmJiFlLm5vZGVUeXBlJiZlLGk9biYmdCYmIXQubm9kZVR5cGUmJnQscj1pJiZpLmV4cG9ydHM9PT1uP095dC5CdWZmZXI6dm9pZCAwLG89cj9yLmFsbG9jVW5zYWZlOnZvaWQgMDt0LmV4cG9ydHM9ZnVuY3Rpb24gYSh0LGUpe2lmKGUpcmV0dXJuIHQuc2xpY2UoKTt2YXIgbj10Lmxlbmd0aCxpPW8/byhuKTpuZXcgdC5jb25zdHJ1Y3RvcihuKTtyZXR1cm4gdC5jb3B5KGkpLGl9fSkpLExidD1mdW5jdGlvbiBQYnQodCxlKXt2YXIgbj0tMSxpPXQubGVuZ3RoO2ZvcihlfHwoZT1BcnJheShpKSk7KytuPGk7KWVbbl09dFtuXTtyZXR1cm4gZX0sTmJ0PWZ1bmN0aW9uIElidCh0LGUpe2Zvcih2YXIgbj0tMSxpPW51bGw9PXQ/MDp0Lmxlbmd0aCxyPTAsbz1bXTsrK248aTspe3ZhciBhPXRbbl07ZShhLG4sdCkmJihvW3IrK109YSl9cmV0dXJuIG99LE9idD1mdW5jdGlvbiBSYnQoKXtyZXR1cm5bXX0semJ0PU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUsRGJ0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsQmJ0PURidD9mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD9bXToodD1PYmplY3QodCksTmJ0KERidCh0KSwoZnVuY3Rpb24oZSl7cmV0dXJuIHpidC5jYWxsKHQsZSl9KSkpfTpPYnQsSGJ0PWZ1bmN0aW9uIEZidCh0LGUpe2Zvcih2YXIgbj0tMSxpPWUubGVuZ3RoLHI9dC5sZW5ndGg7KytuPGk7KXRbcituXT1lW25dO3JldHVybiB0fSxWYnQ9Z2J0KE9iamVjdC5nZXRQcm90b3R5cGVPZixPYmplY3QpLFVidD1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzP2Z1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXTt0OylIYnQoZSxCYnQodCkpLHQ9VmJ0KHQpO3JldHVybiBlfTpPYnQsamJ0PWZ1bmN0aW9uIEdidCh0LGUsbil7dmFyIGk9ZSh0KTtyZXR1cm4gWHZ0KHQpP2k6SGJ0KGksbih0KSl9LFdidD1mdW5jdGlvbiBxYnQodCl7cmV0dXJuIGpidCh0LE1idCxCYnQpfSxZYnQ9ZnVuY3Rpb24gWGJ0KHQpe3JldHVybiBqYnQodCxDYnQsVWJ0KX0sJGJ0PWV2dChPeXQsIkRhdGFWaWV3IiksS2J0PWV2dChPeXQsIlByb21pc2UiKSxaYnQ9ZXZ0KE95dCwiU2V0IiksSmJ0PWV2dChPeXQsIldlYWtNYXAiKSxRYnQ9IltvYmplY3QgTWFwXSIsdHh0PSJbb2JqZWN0IFByb21pc2VdIixleHQ9IltvYmplY3QgU2V0XSIsbnh0PSJbb2JqZWN0IFdlYWtNYXBdIixpeHQ9IltvYmplY3QgRGF0YVZpZXddIixyeHQ9Wnl0KCRidCksb3h0PVp5dChpdnQpLGF4dD1aeXQoS2J0KSxzeHQ9Wnl0KFpidCksbHh0PVp5dChKYnQpLGN4dD1VeXQ7KCRidCYmY3h0KG5ldyAkYnQobmV3IEFycmF5QnVmZmVyKDEpKSkhPWl4dHx8aXZ0JiZjeHQobmV3IGl2dCkhPVFidHx8S2J0JiZjeHQoS2J0LnJlc29sdmUoKSkhPXR4dHx8WmJ0JiZjeHQobmV3IFpidCkhPWV4dHx8SmJ0JiZjeHQobmV3IEpidCkhPW54dCkmJihjeHQ9ZnVuY3Rpb24odCl7dmFyIGU9VXl0KHQpLG49IltvYmplY3QgT2JqZWN0XSI9PWU/dC5jb25zdHJ1Y3Rvcjp2b2lkIDAsaT1uP1p5dChuKToiIjtpZihpKXN3aXRjaChpKXtjYXNlIHJ4dDpyZXR1cm4gaXh0O2Nhc2Ugb3h0OnJldHVybiBRYnQ7Y2FzZSBheHQ6cmV0dXJuIHR4dDtjYXNlIHN4dDpyZXR1cm4gZXh0O2Nhc2UgbHh0OnJldHVybiBueHR9cmV0dXJuIGV9KTt2YXIgdXh0PWN4dCxoeHQ9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxkeHQ9T3l0LlVpbnQ4QXJyYXkscHh0PWZ1bmN0aW9uIGZ4dCh0KXt2YXIgZT1uZXcgdC5jb25zdHJ1Y3Rvcih0LmJ5dGVMZW5ndGgpO3JldHVybiBuZXcgZHh0KGUpLnNldChuZXcgZHh0KHQpKSxlfSxteHQ9L1x3KiQvLGd4dD1SeXQ/Unl0LnByb3RvdHlwZTp2b2lkIDAsX3h0PWd4dD9neHQudmFsdWVPZjp2b2lkIDAseXh0PWZ1bmN0aW9uIHZ4dCh0LGUpe3ZhciBuPWU/cHh0KHQuYnVmZmVyKTp0LmJ1ZmZlcjtyZXR1cm4gbmV3IHQuY29uc3RydWN0b3Iobix0LmJ5dGVPZmZzZXQsdC5sZW5ndGgpfSxieHQ9T2JqZWN0LmNyZWF0ZSx4eHQ9KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gZnVuY3Rpb24oZSl7aWYoIUd5dChlKSlyZXR1cm57fTtpZihieHQpcmV0dXJuIGJ4dChlKTt0LnByb3RvdHlwZT1lO3ZhciBuPW5ldyB0O3JldHVybiB0LnByb3RvdHlwZT12b2lkIDAsbn19KSgpLHd4dD1mdW5jdGlvbiBTeHQodCl7cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIHQuY29uc3RydWN0b3J8fGZidCh0KT97fTp4eHQoVmJ0KHQpKX0sTXh0PWFidCYmYWJ0LmlzTWFwLEV4dD1NeHQ/cmJ0KE14dCk6ZnVuY3Rpb24gVHh0KHQpe3JldHVybiBGdnQodCkmJiJbb2JqZWN0IE1hcF0iPT11eHQodCl9LEN4dD1hYnQmJmFidC5pc1NldCxBeHQ9Q3h0P3JidChDeHQpOmZ1bmN0aW9uIGt4dCh0KXtyZXR1cm4gRnZ0KHQpJiYiW29iamVjdCBTZXRdIj09dXh0KHQpfSxMeHQ9IltvYmplY3QgQXJndW1lbnRzXSIsUHh0PSJbb2JqZWN0IEZ1bmN0aW9uXSIsTnh0PSJbb2JqZWN0IE9iamVjdF0iLEl4dD17fTtJeHRbTHh0XT1JeHRbIltvYmplY3QgQXJyYXldIl09SXh0WyJbb2JqZWN0IEFycmF5QnVmZmVyXSJdPUl4dFsiW29iamVjdCBEYXRhVmlld10iXT1JeHRbIltvYmplY3QgQm9vbGVhbl0iXT1JeHRbIltvYmplY3QgRGF0ZV0iXT1JeHRbIltvYmplY3QgRmxvYXQzMkFycmF5XSJdPUl4dFsiW29iamVjdCBGbG9hdDY0QXJyYXldIl09SXh0WyJbb2JqZWN0IEludDhBcnJheV0iXT1JeHRbIltvYmplY3QgSW50MTZBcnJheV0iXT1JeHRbIltvYmplY3QgSW50MzJBcnJheV0iXT1JeHRbIltvYmplY3QgTWFwXSJdPUl4dFsiW29iamVjdCBOdW1iZXJdIl09SXh0W054dF09SXh0WyJbb2JqZWN0IFJlZ0V4cF0iXT1JeHRbIltvYmplY3QgU2V0XSJdPUl4dFsiW29iamVjdCBTdHJpbmddIl09SXh0WyJbb2JqZWN0IFN5bWJvbF0iXT1JeHRbIltvYmplY3QgVWludDhBcnJheV0iXT1JeHRbIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIl09SXh0WyJbb2JqZWN0IFVpbnQxNkFycmF5XSJdPUl4dFsiW29iamVjdCBVaW50MzJBcnJheV0iXT0hMCxJeHRbIltvYmplY3QgRXJyb3JdIl09SXh0W1B4dF09SXh0WyJbb2JqZWN0IFdlYWtNYXBdIl09ITE7dmFyIE94dD1mdW5jdGlvbiB0KGUsbixpLHIsbyxhKXt2YXIgcyxsPTEmbixjPTImbix1PTQmbjtpZihpJiYocz1vP2koZSxyLG8sYSk6aShlKSksdm9pZCAwIT09cylyZXR1cm4gcztpZighR3l0KGUpKXJldHVybiBlO3ZhciBoPVh2dChlKTtpZihoKXtpZihzPShmdW5jdGlvbiBkKHQpe3ZhciBlPXQubGVuZ3RoLG49bmV3IHQuY29uc3RydWN0b3IoZSk7cmV0dXJuIGUmJiJzdHJpbmciPT10eXBlb2YgdFswXSYmaHh0LmNhbGwodCwiaW5kZXgiKSYmKG4uaW5kZXg9dC5pbmRleCxuLmlucHV0PXQuaW5wdXQpLG59KShlKSwhbClyZXR1cm4gTGJ0KGUscyl9ZWxzZXt2YXIgcD11eHQoZSksZj1wPT1QeHR8fCJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSI9PXA7aWYoWnZ0KGUpKXJldHVybiBrYnQoZSxsKTtpZihwPT1OeHR8fHA9PUx4dHx8ZiYmIW8pe2lmKHM9Y3x8Zj97fTp3eHQoZSksIWwpcmV0dXJuIGM/KGZ1bmN0aW9uIGcodCxlKXtyZXR1cm4gQnZ0KHQsVWJ0KHQpLGUpfSkoZSwoZnVuY3Rpb24gbSh0LGUpe3JldHVybiB0JiZCdnQoZSxDYnQoZSksdCl9KShzLGUpKTooZnVuY3Rpb24geSh0LGUpe3JldHVybiBCdnQodCxCYnQodCksZSl9KShlLChmdW5jdGlvbiBfKHQsZSl7cmV0dXJuIHQmJkJ2dChlLE1idChlKSx0KX0pKHMsZSkpfWVsc2V7aWYoIUl4dFtwXSlyZXR1cm4gbz9lOnt9O3M9KGZ1bmN0aW9uIHYodCxlLG4pe3ZhciBpPXQuY29uc3RydWN0b3I7c3dpdGNoKGUpe2Nhc2UiW29iamVjdCBBcnJheUJ1ZmZlcl0iOnJldHVybiBweHQodCk7Y2FzZSJbb2JqZWN0IEJvb2xlYW5dIjpjYXNlIltvYmplY3QgRGF0ZV0iOnJldHVybiBuZXcgaSgrdCk7Y2FzZSJbb2JqZWN0IERhdGFWaWV3XSI6cmV0dXJuKGZ1bmN0aW9uIHIodCxlKXt2YXIgbj1lP3B4dCh0LmJ1ZmZlcik6dC5idWZmZXI7cmV0dXJuIG5ldyB0LmNvbnN0cnVjdG9yKG4sdC5ieXRlT2Zmc2V0LHQuYnl0ZUxlbmd0aCl9KSh0LG4pO2Nhc2UiW29iamVjdCBGbG9hdDMyQXJyYXldIjpjYXNlIltvYmplY3QgRmxvYXQ2NEFycmF5XSI6Y2FzZSJbb2JqZWN0IEludDhBcnJheV0iOmNhc2UiW29iamVjdCBJbnQxNkFycmF5XSI6Y2FzZSJbb2JqZWN0IEludDMyQXJyYXldIjpjYXNlIltvYmplY3QgVWludDhBcnJheV0iOmNhc2UiW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iOmNhc2UiW29iamVjdCBVaW50MTZBcnJheV0iOmNhc2UiW29iamVjdCBVaW50MzJBcnJheV0iOnJldHVybiB5eHQodCxuKTtjYXNlIltvYmplY3QgTWFwXSI6cmV0dXJuIG5ldyBpO2Nhc2UiW29iamVjdCBOdW1iZXJdIjpjYXNlIltvYmplY3QgU3RyaW5nXSI6cmV0dXJuIG5ldyBpKHQpO2Nhc2UiW29iamVjdCBSZWdFeHBdIjpyZXR1cm4oZnVuY3Rpb24gbyh0KXt2YXIgZT1uZXcgdC5jb25zdHJ1Y3Rvcih0LnNvdXJjZSxteHQuZXhlYyh0KSk7cmV0dXJuIGUubGFzdEluZGV4PXQubGFzdEluZGV4LGV9KSh0KTtjYXNlIltvYmplY3QgU2V0XSI6cmV0dXJuIG5ldyBpO2Nhc2UiW29iamVjdCBTeW1ib2xdIjpyZXR1cm4oZnVuY3Rpb24gYSh0KXtyZXR1cm4gX3h0P09iamVjdChfeHQuY2FsbCh0KSk6e319KSh0KX19KShlLHAsbCl9fWF8fChhPW5ldyBrdnQpO3ZhciBiPWEuZ2V0KGUpO2lmKGIpcmV0dXJuIGI7YS5zZXQoZSxzKSxBeHQoZSk/ZS5mb3JFYWNoKChmdW5jdGlvbihyKXtzLmFkZCh0KHIsbixpLHIsZSxhKSl9KSk6RXh0KGUpJiZlLmZvckVhY2goKGZ1bmN0aW9uKHIsbyl7cy5zZXQobyx0KHIsbixpLG8sZSxhKSl9KSk7dmFyIHg9aD92b2lkIDA6KHU/Yz9ZYnQ6V2J0OmM/Q2J0Ok1idCkoZSk7cmV0dXJuIEx2dCh4fHxlLChmdW5jdGlvbihyLG8pe3gmJihyPWVbbz1yXSksenZ0KHMsbyx0KHIsbixpLG8sZSxhKSl9KSksc30sUnh0PWZ1bmN0aW9uIHp4dCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19LER4dD0oZnVuY3Rpb24gQnh0KHQpe3JldHVybiBmdW5jdGlvbihlLG4saSl7Zm9yKHZhciByPS0xLG89T2JqZWN0KGUpLGE9aShlKSxzPWEubGVuZ3RoO3MtLTspe3ZhciBsPWFbdD9zOisrcl07aWYoITE9PT1uKG9bbF0sbCxvKSlicmVha31yZXR1cm4gZX19KSgpLEh4dD1mdW5jdGlvbiBGeHQodCxlKXtyZXR1cm4gdCYmRHh0KHQsZSxNYnQpfSxWeHQ9KGZ1bmN0aW9uIFV4dCh0LGUpe3JldHVybiBmdW5jdGlvbihuLGkpe2lmKG51bGw9PW4pcmV0dXJuIG47aWYoIXdidChuKSlyZXR1cm4gdChuLGkpO2Zvcih2YXIgcj1uLmxlbmd0aCxvPWU/cjotMSxhPU9iamVjdChuKTsoZT9vLS06KytvPHIpJiYhMSE9PWkoYVtvXSxvLGEpOyk7cmV0dXJuIG59fSkoSHh0KSxqeHQ9ZnVuY3Rpb24gR3h0KHQpe3JldHVybiB0fSxXeHQ9ZnVuY3Rpb24gcXh0KHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6anh0fSxZeHQ9ZnVuY3Rpb24gWHh0KHQsZSl7cmV0dXJuKFh2dCh0KT9MdnQ6Vnh0KSh0LFd4dChlKSl9LCR4dD1ZeHQsS3h0PWZ1bmN0aW9uIFp4dCh0LGUpe3ZhciBuPVtdO3JldHVybiBWeHQodCwoZnVuY3Rpb24odCxpLHIpe2UodCxpLHIpJiZuLnB1c2godCl9KSksbn07ZnVuY3Rpb24gSnh0KHQpe3ZhciBlPS0xLG49bnVsbD09dD8wOnQubGVuZ3RoO2Zvcih0aGlzLl9fZGF0YV9fPW5ldyB3dnQ7KytlPG47KXRoaXMuYWRkKHRbZV0pfUp4dC5wcm90b3R5cGUuYWRkPUp4dC5wcm90b3R5cGUucHVzaD1mdW5jdGlvbiBReHQodCl7cmV0dXJuIHRoaXMuX19kYXRhX18uc2V0KHQsIl9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iKSx0aGlzfSxKeHQucHJvdG90eXBlLmhhcz1mdW5jdGlvbiB0d3QodCl7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKHQpfTt2YXIgZXd0PUp4dCxud3Q9ZnVuY3Rpb24gaXd0KHQsZSl7Zm9yKHZhciBuPS0xLGk9bnVsbD09dD8wOnQubGVuZ3RoOysrbjxpOylpZihlKHRbbl0sbix0KSlyZXR1cm4hMDtyZXR1cm4hMX0scnd0PWZ1bmN0aW9uIG93dCh0LGUpe3JldHVybiB0LmhhcyhlKX0sYXd0PWZ1bmN0aW9uIHN3dCh0LGUsbixpLHIsbyl7dmFyIGE9MSZuLHM9dC5sZW5ndGgsbD1lLmxlbmd0aDtpZihzIT1sJiYhKGEmJmw+cykpcmV0dXJuITE7dmFyIGM9by5nZXQodCksdT1vLmdldChlKTtpZihjJiZ1KXJldHVybiBjPT1lJiZ1PT10O3ZhciBoPS0xLGQ9ITAscD0yJm4/bmV3IGV3dDp2b2lkIDA7Zm9yKG8uc2V0KHQsZSksby5zZXQoZSx0KTsrK2g8czspe3ZhciBmPXRbaF0sbT1lW2hdO2lmKGkpdmFyIGc9YT9pKG0sZixoLGUsdCxvKTppKGYsbSxoLHQsZSxvKTtpZih2b2lkIDAhPT1nKXtpZihnKWNvbnRpbnVlO2Q9ITE7YnJlYWt9aWYocCl7aWYoIW53dChlLChmdW5jdGlvbih0LGUpe2lmKCFyd3QocCxlKSYmKGY9PT10fHxyKGYsdCxuLGksbykpKXJldHVybiBwLnB1c2goZSl9KSkpe2Q9ITE7YnJlYWt9fWVsc2UgaWYoZiE9PW0mJiFyKGYsbSxuLGksbykpe2Q9ITE7YnJlYWt9fXJldHVybiBvLmRlbGV0ZSh0KSxvLmRlbGV0ZShlKSxkfSxsd3Q9ZnVuY3Rpb24gY3d0KHQpe3ZhciBlPS0xLG49QXJyYXkodC5zaXplKTtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbih0LGkpe25bKytlXT1baSx0XX0pKSxufSx1d3Q9ZnVuY3Rpb24gaHd0KHQpe3ZhciBlPS0xLG49QXJyYXkodC5zaXplKTtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbih0KXtuWysrZV09dH0pKSxufSxkd3Q9Unl0P1J5dC5wcm90b3R5cGU6dm9pZCAwLHB3dD1kd3Q/ZHd0LnZhbHVlT2Y6dm9pZCAwLGZ3dD1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LG13dD0iW29iamVjdCBBcmd1bWVudHNdIixnd3Q9IltvYmplY3QgQXJyYXldIixfd3Q9IltvYmplY3QgT2JqZWN0XSIseXd0PU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksdnd0PWZ1bmN0aW9uIHQoZSxuLGkscixvKXtyZXR1cm4gZT09PW58fChudWxsPT1lfHxudWxsPT1ufHwhRnZ0KGUpJiYhRnZ0KG4pP2UhPWUmJm4hPW46KGZ1bmN0aW9uIGEodCxlLG4saSxyLG8pe3ZhciBhPVh2dCh0KSxzPVh2dChlKSxsPWE/Z3d0OnV4dCh0KSxjPXM/Z3d0OnV4dChlKSx1PShsPWw9PW13dD9fd3Q6bCk9PV93dCxoPShjPWM9PW13dD9fd3Q6Yyk9PV93dCxkPWw9PWM7aWYoZCYmWnZ0KHQpKXtpZighWnZ0KGUpKXJldHVybiExO2E9ITAsdT0hMX1pZihkJiYhdSlyZXR1cm4gb3x8KG89bmV3IGt2dCksYXx8bGJ0KHQpP2F3dCh0LGUsbixpLHIsbyk6KGZ1bmN0aW9uIHAodCxlLG4saSxyLG8sYSl7c3dpdGNoKG4pe2Nhc2UiW29iamVjdCBEYXRhVmlld10iOmlmKHQuYnl0ZUxlbmd0aCE9ZS5ieXRlTGVuZ3RofHx0LmJ5dGVPZmZzZXQhPWUuYnl0ZU9mZnNldClyZXR1cm4hMTt0PXQuYnVmZmVyLGU9ZS5idWZmZXI7Y2FzZSJbb2JqZWN0IEFycmF5QnVmZmVyXSI6cmV0dXJuISh0LmJ5dGVMZW5ndGghPWUuYnl0ZUxlbmd0aHx8IW8obmV3IGR4dCh0KSxuZXcgZHh0KGUpKSk7Y2FzZSJbb2JqZWN0IEJvb2xlYW5dIjpjYXNlIltvYmplY3QgRGF0ZV0iOmNhc2UiW29iamVjdCBOdW1iZXJdIjpyZXR1cm4gdnl0KCt0LCtlKTtjYXNlIltvYmplY3QgRXJyb3JdIjpyZXR1cm4gdC5uYW1lPT1lLm5hbWUmJnQubWVzc2FnZT09ZS5tZXNzYWdlO2Nhc2UiW29iamVjdCBSZWdFeHBdIjpjYXNlIltvYmplY3QgU3RyaW5nXSI6cmV0dXJuIHQ9PWUrIiI7Y2FzZSJbb2JqZWN0IE1hcF0iOnZhciBzPWx3dDtjYXNlIltvYmplY3QgU2V0XSI6aWYoc3x8KHM9dXd0KSx0LnNpemUhPWUuc2l6ZSYmISgxJmkpKXJldHVybiExO3ZhciBsPWEuZ2V0KHQpO2lmKGwpcmV0dXJuIGw9PWU7aXw9MixhLnNldCh0LGUpO3ZhciBjPWF3dChzKHQpLHMoZSksaSxyLG8sYSk7cmV0dXJuIGEuZGVsZXRlKHQpLGM7Y2FzZSJbb2JqZWN0IFN5bWJvbF0iOmlmKHB3dClyZXR1cm4gcHd0LmNhbGwodCk9PXB3dC5jYWxsKGUpfXJldHVybiExfSkodCxlLGwsbixpLHIsbyk7aWYoISgxJm4pKXt2YXIgZj11JiZ5d3QuY2FsbCh0LCJfX3dyYXBwZWRfXyIpLG09aCYmeXd0LmNhbGwoZSwiX193cmFwcGVkX18iKTtpZihmfHxtKXt2YXIgZz1mP3QudmFsdWUoKTp0LF89bT9lLnZhbHVlKCk6ZTtyZXR1cm4gb3x8KG89bmV3IGt2dCkscihnLF8sbixpLG8pfX1yZXR1cm4hIWQmJihvfHwobz1uZXcga3Z0KSwoZnVuY3Rpb24geSh0LGUsbixpLHIsbyl7dmFyIGE9MSZuLHM9V2J0KHQpLGw9cy5sZW5ndGg7aWYobCE9V2J0KGUpLmxlbmd0aCYmIWEpcmV0dXJuITE7Zm9yKHZhciBjPWw7Yy0tOyl7dmFyIHU9c1tjXTtpZighKGE/dSBpbiBlOmZ3dC5jYWxsKGUsdSkpKXJldHVybiExfXZhciBoPW8uZ2V0KHQpLGQ9by5nZXQoZSk7aWYoaCYmZClyZXR1cm4gaD09ZSYmZD09dDt2YXIgcD0hMDtvLnNldCh0LGUpLG8uc2V0KGUsdCk7Zm9yKHZhciBmPWE7KytjPGw7KXt2YXIgbT10W3U9c1tjXV0sZz1lW3VdO2lmKGkpdmFyIF89YT9pKGcsbSx1LGUsdCxvKTppKG0sZyx1LHQsZSxvKTtpZighKHZvaWQgMD09PV8/bT09PWd8fHIobSxnLG4saSxvKTpfKSl7cD0hMTticmVha31mfHwoZj0iY29uc3RydWN0b3IiPT11KX1pZihwJiYhZil7dmFyIHk9dC5jb25zdHJ1Y3Rvcix2PWUuY29uc3RydWN0b3I7eT09dnx8ISgiY29uc3RydWN0b3IiaW4gdCl8fCEoImNvbnN0cnVjdG9yImluIGUpfHwiZnVuY3Rpb24iPT10eXBlb2YgeSYmeSBpbnN0YW5jZW9mIHkmJiJmdW5jdGlvbiI9PXR5cGVvZiB2JiZ2IGluc3RhbmNlb2Ygdnx8KHA9ITEpfXJldHVybiBvLmRlbGV0ZSh0KSxvLmRlbGV0ZShlKSxwfSkodCxlLG4saSxyLG8pKX0pKGUsbixpLHIsdCxvKSl9LGJ3dD1mdW5jdGlvbiB4d3QodCl7cmV0dXJuIHQ9PXQmJiFHeXQodCl9LHd3dD1mdW5jdGlvbiBTd3QodCxlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG51bGwhPW4mJm5bdF09PT1lJiYodm9pZCAwIT09ZXx8dCBpbiBPYmplY3QobikpfX0sTXd0PWZ1bmN0aW9uIEV3dCh0KXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHR8fEZ2dCh0KSYmIltvYmplY3QgU3ltYm9sXSI9PVV5dCh0KX0sVHd0PS9cLnxcWyg/OlteW1xdXSp8KFsiJ10pKD86KD8hXDEpW15cXF18XFwuKSo/XDEpXF0vLEN3dD0vXlx3KiQvLEF3dD1mdW5jdGlvbiBrd3QodCxlKXtpZihYdnQodCkpcmV0dXJuITE7dmFyIG49dHlwZW9mIHQ7cmV0dXJuISgibnVtYmVyIiE9biYmInN5bWJvbCIhPW4mJiJib29sZWFuIiE9biYmbnVsbCE9dCYmIU13dCh0KSl8fEN3dC50ZXN0KHQpfHwhVHd0LnRlc3QodCl8fG51bGwhPWUmJnQgaW4gT2JqZWN0KGUpfTtmdW5jdGlvbiBMd3QodCxlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdHx8bnVsbCE9ZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgYSBmdW5jdGlvbiIpO3ZhciBuPWZ1bmN0aW9uKCl7dmFyIGk9YXJndW1lbnRzLHI9ZT9lLmFwcGx5KHRoaXMsaSk6aVswXSxvPW4uY2FjaGU7aWYoby5oYXMocikpcmV0dXJuIG8uZ2V0KHIpO3ZhciBhPXQuYXBwbHkodGhpcyxpKTtyZXR1cm4gbi5jYWNoZT1vLnNldChyLGEpfHxvLGF9O3JldHVybiBuLmNhY2hlPW5ldyhMd3QuQ2FjaGV8fHd2dCksbn1Md3QuQ2FjaGU9d3Z0O3ZhciBQd3QsTnd0PUx3dCxJd3Q9L1teLltcXV0rfFxbKD86KC0/XGQrKD86XC5cZCspPyl8KFsiJ10pKCg/Oig/IVwyKVteXFxdfFxcLikqPylcMilcXXwoPz0oPzpcLnxcW1xdKSg/OlwufFxbXF18JCkpL2csT3d0PS9cXChcXCk/L2csUnd0PShmdW5jdGlvbiB6d3QodCl7dmFyIGU9Tnd0KHQsKGZ1bmN0aW9uKHQpe3JldHVybiA1MDA9PT1uLnNpemUmJm4uY2xlYXIoKSx0fSkpLG49ZS5jYWNoZTtyZXR1cm4gZX0pKChmdW5jdGlvbih0KXt2YXIgZT1bXTtyZXR1cm4gNDY9PT10LmNoYXJDb2RlQXQoMCkmJmUucHVzaCgiIiksdC5yZXBsYWNlKEl3dCwoZnVuY3Rpb24odCxuLGkscil7ZS5wdXNoKGk/ci5yZXBsYWNlKE93dCwiJDEiKTpufHx0KX0pKSxlfSkpLER3dD1mdW5jdGlvbiBCd3QodCxlKXtmb3IodmFyIG49LTEsaT1udWxsPT10PzA6dC5sZW5ndGgscj1BcnJheShpKTsrK248aTspcltuXT1lKHRbbl0sbix0KTtyZXR1cm4gcn0sSHd0PVJ5dD9SeXQucHJvdG90eXBlOnZvaWQgMCxGd3Q9SHd0P0h3dC50b1N0cmluZzp2b2lkIDAsVnd0PWZ1bmN0aW9uIHQoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBlO2lmKFh2dChlKSlyZXR1cm4gRHd0KGUsdCkrIiI7aWYoTXd0KGUpKXJldHVybiBGd3Q/Rnd0LmNhbGwoZSk6IiI7dmFyIG49ZSsiIjtyZXR1cm4iMCI9PW4mJjEvZT09LTEvMD8iLTAiOm59LFV3dD1mdW5jdGlvbiBqd3QodCl7cmV0dXJuIG51bGw9PXQ/IiI6Vnd0KHQpfSxHd3Q9ZnVuY3Rpb24gV3d0KHQsZSl7cmV0dXJuIFh2dCh0KT90OkF3dCh0LGUpP1t0XTpSd3QoVXd0KHQpKX0scXd0PWZ1bmN0aW9uIFl3dCh0KXtpZigic3RyaW5nIj09dHlwZW9mIHR8fE13dCh0KSlyZXR1cm4gdDt2YXIgZT10KyIiO3JldHVybiIwIj09ZSYmMS90PT0tMS8wPyItMCI6ZX0sWHd0PWZ1bmN0aW9uICR3dCh0LGUpe2Zvcih2YXIgbj0wLGk9KGU9R3d0KGUsdCkpLmxlbmd0aDtudWxsIT10JiZuPGk7KXQ9dFtxd3QoZVtuKytdKV07cmV0dXJuIG4mJm49PWk/dDp2b2lkIDB9LEt3dD1mdW5jdGlvbiBad3QodCxlKXtyZXR1cm4gbnVsbCE9dCYmZSBpbiBPYmplY3QodCl9LEp3dD1mdW5jdGlvbiBRd3QodCxlLG4pe2Zvcih2YXIgaT0tMSxyPShlPUd3dChlLHQpKS5sZW5ndGgsbz0hMTsrK2k8cjspe3ZhciBhPXF3dChlW2ldKTtpZighKG89bnVsbCE9dCYmbih0LGEpKSlicmVhazt0PXRbYV19cmV0dXJuIG98fCsraSE9cj9vOiEhKHI9bnVsbD09dD8wOnQubGVuZ3RoKSYmZWJ0KHIpJiZRdnQoYSxyKSYmKFh2dCh0KXx8WXZ0KHQpKX0sdFN0PWZ1bmN0aW9uIGVTdCh0LGUpe3JldHVybiBudWxsIT10JiZKd3QodCxlLEt3dCl9LG5TdD1mdW5jdGlvbiBpU3QodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP3ZvaWQgMDplW3RdfX0sclN0PWZ1bmN0aW9uIG9TdCh0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD90Om51bGw9PXQ/anh0OiJvYmplY3QiPT10eXBlb2YgdD9YdnQodCk/KGZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gQXd0KHQpJiZid3Qobik/d3d0KHF3dCh0KSxuKTpmdW5jdGlvbihlKXt2YXIgaT0oZnVuY3Rpb24gcih0LGUsbil7dmFyIGk9bnVsbD09dD92b2lkIDA6WHd0KHQsZSk7cmV0dXJuIHZvaWQgMD09PWk/bjppfSkoZSx0KTtyZXR1cm4gdm9pZCAwPT09aSYmaT09PW4/dFN0KGUsdCk6dnd0KG4saSwzKX19KSh0WzBdLHRbMV0pOihmdW5jdGlvbiBuKHQpe3ZhciBlPShmdW5jdGlvbiBuKHQpe2Zvcih2YXIgZT1NYnQodCksbj1lLmxlbmd0aDtuLS07KXt2YXIgaT1lW25dLHI9dFtpXTtlW25dPVtpLHIsYnd0KHIpXX1yZXR1cm4gZX0pKHQpO3JldHVybiAxPT1lLmxlbmd0aCYmZVswXVsyXT93d3QoZVswXVswXSxlWzBdWzFdKTpmdW5jdGlvbihuKXtyZXR1cm4gbj09PXR8fChmdW5jdGlvbiBpKHQsZSxuLHIpe3ZhciBvPW4ubGVuZ3RoLGE9byxzPSFyO2lmKG51bGw9PXQpcmV0dXJuIWE7Zm9yKHQ9T2JqZWN0KHQpO28tLTspe3ZhciBsPW5bb107aWYocyYmbFsyXT9sWzFdIT09dFtsWzBdXTohKGxbMF1pbiB0KSlyZXR1cm4hMX1mb3IoOysrbzxhOyl7dmFyIGM9KGw9bltvXSlbMF0sdT10W2NdLGg9bFsxXTtpZihzJiZsWzJdKXtpZih2b2lkIDA9PT11JiYhKGMgaW4gdCkpcmV0dXJuITF9ZWxzZXt2YXIgZD1uZXcga3Z0O2lmKHIpdmFyIHA9cih1LGgsYyx0LGUsZCk7aWYoISh2b2lkIDA9PT1wP3Z3dChoLHUsMyxyLGQpOnApKXJldHVybiExfX1yZXR1cm4hMH0pKG4sdCxlKX19KSh0KTooZnVuY3Rpb24gaSh0KXtyZXR1cm4gQXd0KHQpP25TdChxd3QodCkpOihmdW5jdGlvbiBlKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gWHd0KGUsdCl9fSkodCl9KSh0KX0sYVN0PWZ1bmN0aW9uIHNTdCh0LGUpe3JldHVybihYdnQodCk/TmJ0Okt4dCkodCxyU3QoZSkpfSxsU3Q9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxjU3Q9ZnVuY3Rpb24gdVN0KHQsZSl7cmV0dXJuIG51bGwhPXQmJmxTdC5jYWxsKHQsZSl9LGhTdD1mdW5jdGlvbiBkU3QodCxlKXtyZXR1cm4gbnVsbCE9dCYmSnd0KHQsZSxjU3QpfSxwU3Q9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxmU3Q9ZnVuY3Rpb24gbVN0KHQpe3JldHVybiB2b2lkIDA9PT10fSxnU3Q9ZnVuY3Rpb24gX1N0KHQsZSl7dmFyIG49LTEsaT13YnQodCk/QXJyYXkodC5sZW5ndGgpOltdO3JldHVybiBWeHQodCwoZnVuY3Rpb24odCxyLG8pe2lbKytuXT1lKHQscixvKX0pKSxpfSx5U3Q9ZnVuY3Rpb24gdlN0KHQsZSl7cmV0dXJuKFh2dCh0KT9Ed3Q6Z1N0KSh0LHJTdChlKSl9LGJTdD1mdW5jdGlvbiB4U3QodCxlLG4saSl7dmFyIHI9LTEsbz1udWxsPT10PzA6dC5sZW5ndGg7Zm9yKGkmJm8mJihuPXRbKytyXSk7KytyPG87KW49ZShuLHRbcl0scix0KTtyZXR1cm4gbn0sd1N0PWZ1bmN0aW9uIFNTdCh0LGUsbixpLHIpe3JldHVybiByKHQsKGZ1bmN0aW9uKHQscixvKXtuPWk/KGk9ITEsdCk6ZShuLHQscixvKX0pKSxufSxNU3Q9ZnVuY3Rpb24gRVN0KHQsZSxuKXt2YXIgaT1YdnQodCk/YlN0OndTdCxyPWFyZ3VtZW50cy5sZW5ndGg8MztyZXR1cm4gaSh0LHJTdChlKSxuLHIsVnh0KX0sVFN0PW5TdCgibGVuZ3RoIiksQ1N0PVJlZ0V4cCgiW1xcdTIwMGRcXHVkODAwLVxcdWRmZmZcXHUwMzAwLVxcdTAzNmZcXHVmZTIwLVxcdWZlMmZcXHUyMGQwLVxcdTIwZmZcXHVmZTBlXFx1ZmUwZl0iKSxBU3Q9IltcXHUwMzAwLVxcdTAzNmZcXHVmZTIwLVxcdWZlMmZcXHUyMGQwLVxcdTIwZmZdIixrU3Q9IlxcdWQ4M2NbXFx1ZGZmYi1cXHVkZmZmXSIsTFN0PSJbXlxcdWQ4MDAtXFx1ZGZmZl0iLFBTdD0iKD86XFx1ZDgzY1tcXHVkZGU2LVxcdWRkZmZdKXsyfSIsTlN0PSJbXFx1ZDgwMC1cXHVkYmZmXVtcXHVkYzAwLVxcdWRmZmZdIixJU3Q9Iig/OiIrQVN0KyJ8IitrU3QrIik/IixPU3Q9IltcXHVmZTBlXFx1ZmUwZl0/IixSU3Q9T1N0K0lTdCsiKD86XFx1MjAwZCg/OiIrW0xTdCxQU3QsTlN0XS5qb2luKCJ8IikrIikiK09TdCtJU3QrIikqIix6U3Q9Iig/OiIrW0xTdCtBU3QrIj8iLEFTdCxQU3QsTlN0LCJbXFx1ZDgwMC1cXHVkZmZmXSJdLmpvaW4oInwiKSsiKSIsRFN0PVJlZ0V4cChrU3QrIig/PSIra1N0KyIpfCIrelN0K1JTdCwiZyIpLEJTdD1SeXQ/Unl0LmlzQ29uY2F0U3ByZWFkYWJsZTp2b2lkIDAsSFN0PWZ1bmN0aW9uIEZTdCh0KXtyZXR1cm4gWHZ0KHQpfHxZdnQodCl8fCEhKEJTdCYmdCYmdFtCU3RdKX0sVlN0PWZ1bmN0aW9uIHQoZSxuLGkscixvKXt2YXIgYT0tMSxzPWUubGVuZ3RoO2ZvcihpfHwoaT1IU3QpLG98fChvPVtdKTsrK2E8czspe3ZhciBsPWVbYV07bj4wJiZpKGwpP24+MT90KGwsbi0xLGkscixvKTpIYnQobyxsKTpyfHwob1tvLmxlbmd0aF09bCl9cmV0dXJuIG99LFVTdD1mdW5jdGlvbiBqU3QodCxlLG4pe3N3aXRjaChuLmxlbmd0aCl7Y2FzZSAwOnJldHVybiB0LmNhbGwoZSk7Y2FzZSAxOnJldHVybiB0LmNhbGwoZSxuWzBdKTtjYXNlIDI6cmV0dXJuIHQuY2FsbChlLG5bMF0sblsxXSk7Y2FzZSAzOnJldHVybiB0LmNhbGwoZSxuWzBdLG5bMV0sblsyXSl9cmV0dXJuIHQuYXBwbHkoZSxuKX0sR1N0PU1hdGgubWF4LFdTdD1mdW5jdGlvbiBxU3QodCxlLG4pe3JldHVybiBlPUdTdCh2b2lkIDA9PT1lP3QubGVuZ3RoLTE6ZSwwKSxmdW5jdGlvbigpe2Zvcih2YXIgaT1hcmd1bWVudHMscj0tMSxvPUdTdChpLmxlbmd0aC1lLDApLGE9QXJyYXkobyk7KytyPG87KWFbcl09aVtlK3JdO3I9LTE7Zm9yKHZhciBzPUFycmF5KGUrMSk7KytyPGU7KXNbcl09aVtyXTtyZXR1cm4gc1tlXT1uKGEpLFVTdCh0LHRoaXMscyl9fSxZU3Q9RGF0ZS5ub3csWFN0PShmdW5jdGlvbiAkU3QodCl7dmFyIGU9MCxuPTA7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGk9WVN0KCkscj0xNi0oaS1uKTtpZihuPWkscj4wKXtpZigrK2U+PTgwMClyZXR1cm4gYXJndW1lbnRzWzBdfWVsc2UgZT0wO3JldHVybiB0LmFwcGx5KHZvaWQgMCxhcmd1bWVudHMpfX0pKE52dD9mdW5jdGlvbih0LGUpe3JldHVybiBOdnQodCwidG9TdHJpbmciLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx2YWx1ZTpSeHQoZSksd3JpdGFibGU6ITB9KX06anh0KSxLU3Q9ZnVuY3Rpb24gWlN0KHQsZSl7cmV0dXJuIFhTdChXU3QodCxlLGp4dCksdCsiIil9LEpTdD1mdW5jdGlvbiBRU3QodCxlLG4saSl7Zm9yKHZhciByPXQubGVuZ3RoLG89bisoaT8xOi0xKTtpP28tLTorK288cjspaWYoZSh0W29dLG8sdCkpcmV0dXJuIG87cmV0dXJuLTF9LHRNdD1mdW5jdGlvbiBlTXQodCl7cmV0dXJuIHQhPXR9LG5NdD1mdW5jdGlvbiBpTXQodCxlKXtyZXR1cm4hKG51bGw9PXR8fCF0Lmxlbmd0aCkmJihmdW5jdGlvbiBuKHQsZSxpKXtyZXR1cm4gZT09ZT8oZnVuY3Rpb24gcih0LGUsbil7Zm9yKHZhciBpPW4tMSxyPXQubGVuZ3RoOysraTxyOylpZih0W2ldPT09ZSlyZXR1cm4gaTtyZXR1cm4tMX0pKHQsZSxpKTpKU3QodCx0TXQsaSl9KSh0LGUsMCk+LTF9LHJNdD1mdW5jdGlvbiBvTXQodCxlLG4pe2Zvcih2YXIgaT0tMSxyPW51bGw9PXQ/MDp0Lmxlbmd0aDsrK2k8cjspaWYobihlLHRbaV0pKXJldHVybiEwO3JldHVybiExfSxhTXQ9WmJ0JiYxL3V3dChuZXcgWmJ0KFssLTBdKSlbMV09PTEvMD9mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFpidCh0KX06ZnVuY3Rpb24gc010KCl7fSxsTXQ9ZnVuY3Rpb24gY010KHQpe3JldHVybiBGdnQodCkmJndidCh0KX0sdU10PUtTdCgoZnVuY3Rpb24odCl7cmV0dXJuKGZ1bmN0aW9uIGUodCxuLGkpe3ZhciByPS0xLG89bk10LGE9dC5sZW5ndGgscz0hMCxsPVtdLGM9bDtpZihpKXM9ITEsbz1yTXQ7ZWxzZSBpZihhPj0yMDApe3ZhciB1PW4/bnVsbDphTXQodCk7aWYodSlyZXR1cm4gdXd0KHUpO3M9ITEsbz1yd3QsYz1uZXcgZXd0fWVsc2UgYz1uP1tdOmw7dDpmb3IoOysrcjxhOyl7dmFyIGg9dFtyXSxkPW4/bihoKTpoO2lmKGg9aXx8MCE9PWg/aDowLHMmJmQ9PWQpe2Zvcih2YXIgcD1jLmxlbmd0aDtwLS07KWlmKGNbcF09PT1kKWNvbnRpbnVlIHQ7biYmYy5wdXNoKGQpLGwucHVzaChoKX1lbHNlIG8oYyxkLGkpfHwoYyE9PWwmJmMucHVzaChkKSxsLnB1c2goaCkpfXJldHVybiBsfSkoVlN0KHQsMSxsTXQsITApKX0pKSxoTXQ9ZnVuY3Rpb24gZE10KHQpe3JldHVybiBudWxsPT10P1tdOihmdW5jdGlvbiBlKHQsbil7cmV0dXJuIER3dChuLChmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pKX0pKHQsTWJ0KHQpKX07dHJ5e1B3dD17Y2xvbmU6ZnVuY3Rpb24gcE10KHQpe3JldHVybiBPeHQodCw0KX0sY29uc3RhbnQ6Unh0LGVhY2g6JHh0LGZpbHRlcjphU3QsaGFzOmhTdCxpc0FycmF5Olh2dCxpc0VtcHR5OmZ1bmN0aW9uIGZNdCh0KXtpZihudWxsPT10KXJldHVybiEwO2lmKHdidCh0KSYmKFh2dCh0KXx8InN0cmluZyI9PXR5cGVvZiB0fHwiZnVuY3Rpb24iPT10eXBlb2YgdC5zcGxpY2V8fFp2dCh0KXx8bGJ0KHQpfHxZdnQodCkpKXJldHVybiF0Lmxlbmd0aDt2YXIgZT11eHQodCk7aWYoIltvYmplY3QgTWFwXSI9PWV8fCJbb2JqZWN0IFNldF0iPT1lKXJldHVybiF0LnNpemU7aWYoZmJ0KHQpKXJldHVybiFiYnQodCkubGVuZ3RoO2Zvcih2YXIgbiBpbiB0KWlmKHBTdC5jYWxsKHQsbikpcmV0dXJuITE7cmV0dXJuITB9LGlzRnVuY3Rpb246cXl0LGlzVW5kZWZpbmVkOmZTdCxrZXlzOk1idCxtYXA6eVN0LHJlZHVjZTpNU3Qsc2l6ZTpmdW5jdGlvbiBtTXQodCl7aWYobnVsbD09dClyZXR1cm4gMDtpZih3YnQodCkpcmV0dXJuKGZ1bmN0aW9uIGUodCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0fHwhWHZ0KHQpJiZGdnQodCkmJiJbb2JqZWN0IFN0cmluZ10iPT1VeXQodCl9KSh0KT8oZnVuY3Rpb24gbih0KXtyZXR1cm4oZnVuY3Rpb24gZSh0KXtyZXR1cm4gQ1N0LnRlc3QodCl9KSh0KT8oZnVuY3Rpb24gbih0KXtmb3IodmFyIGU9RFN0Lmxhc3RJbmRleD0wO0RTdC50ZXN0KHQpOykrK2U7cmV0dXJuIGV9KSh0KTpUU3QodCl9KSh0KTp0Lmxlbmd0aDt2YXIgaT11eHQodCk7cmV0dXJuIltvYmplY3QgTWFwXSI9PWl8fCJbb2JqZWN0IFNldF0iPT1pP3Quc2l6ZTpiYnQodCkubGVuZ3RofSx0cmFuc2Zvcm06ZnVuY3Rpb24gZ010KHQsZSxuKXt2YXIgaT1YdnQodCkscj1pfHxadnQodCl8fGxidCh0KTtpZihlPXJTdChlKSxudWxsPT1uKXt2YXIgbz10JiZ0LmNvbnN0cnVjdG9yO249cj9pP25ldyBvOltdOkd5dCh0KSYmcXl0KG8pP3h4dChWYnQodCkpOnt9fXJldHVybihyP0x2dDpIeHQpKHQsKGZ1bmN0aW9uKHQsaSxyKXtyZXR1cm4gZShuLHQsaSxyKX0pKSxufSx1bmlvbjp1TXQsdmFsdWVzOmhNdH19Y2F0Y2godCl7fVB3dHx8KFB3dD13aW5kb3cuXyk7dmFyIF9NdD1Qd3QseU10PWJNdCx2TXQ9IlwwIjtmdW5jdGlvbiBiTXQodCl7dGhpcy5faXNEaXJlY3RlZD0hX010Lmhhcyh0LCJkaXJlY3RlZCIpfHx0LmRpcmVjdGVkLHRoaXMuX2lzTXVsdGlncmFwaD0hIV9NdC5oYXModCwibXVsdGlncmFwaCIpJiZ0Lm11bHRpZ3JhcGgsdGhpcy5faXNDb21wb3VuZD0hIV9NdC5oYXModCwiY29tcG91bmQiKSYmdC5jb21wb3VuZCx0aGlzLl9sYWJlbD12b2lkIDAsdGhpcy5fZGVmYXVsdE5vZGVMYWJlbEZuPV9NdC5jb25zdGFudCh2b2lkIDApLHRoaXMuX2RlZmF1bHRFZGdlTGFiZWxGbj1fTXQuY29uc3RhbnQodm9pZCAwKSx0aGlzLl9ub2Rlcz17fSx0aGlzLl9pc0NvbXBvdW5kJiYodGhpcy5fcGFyZW50PXt9LHRoaXMuX2NoaWxkcmVuPXt9LHRoaXMuX2NoaWxkcmVuWyJcMCJdPXt9KSx0aGlzLl9pbj17fSx0aGlzLl9wcmVkcz17fSx0aGlzLl9vdXQ9e30sdGhpcy5fc3Vjcz17fSx0aGlzLl9lZGdlT2Jqcz17fSx0aGlzLl9lZGdlTGFiZWxzPXt9fWZ1bmN0aW9uIHhNdCh0LGUpe3RbZV0/dFtlXSsrOnRbZV09MX1mdW5jdGlvbiB3TXQodCxlKXstLXRbZV18fGRlbGV0ZSB0W2VdfWZ1bmN0aW9uIFNNdCh0LGUsbixpKXt2YXIgcj0iIitlLG89IiIrbjtpZighdCYmcj5vKXt2YXIgYT1yO3I9byxvPWF9cmV0dXJuIHIrIgEiK28rIgEiKyhfTXQuaXNVbmRlZmluZWQoaSk/IlwwIjppKX1mdW5jdGlvbiBNTXQodCxlLG4saSl7dmFyIHI9IiIrZSxvPSIiK247aWYoIXQmJnI+byl7dmFyIGE9cjtyPW8sbz1hfXZhciBzPXt2OnIsdzpvfTtyZXR1cm4gaSYmKHMubmFtZT1pKSxzfWZ1bmN0aW9uIEVNdCh0LGUpe3JldHVybiBTTXQodCxlLnYsZS53LGUubmFtZSl9Yk10LnByb3RvdHlwZS5fbm9kZUNvdW50PTAsYk10LnByb3RvdHlwZS5fZWRnZUNvdW50PTAsYk10LnByb3RvdHlwZS5pc0RpcmVjdGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzRGlyZWN0ZWR9LGJNdC5wcm90b3R5cGUuaXNNdWx0aWdyYXBoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzTXVsdGlncmFwaH0sYk10LnByb3RvdHlwZS5pc0NvbXBvdW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzQ29tcG91bmR9LGJNdC5wcm90b3R5cGUuc2V0R3JhcGg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2xhYmVsPXQsdGhpc30sYk10LnByb3RvdHlwZS5ncmFwaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9sYWJlbH0sYk10LnByb3RvdHlwZS5zZXREZWZhdWx0Tm9kZUxhYmVsPWZ1bmN0aW9uKHQpe3JldHVybiBfTXQuaXNGdW5jdGlvbih0KXx8KHQ9X010LmNvbnN0YW50KHQpKSx0aGlzLl9kZWZhdWx0Tm9kZUxhYmVsRm49dCx0aGlzfSxiTXQucHJvdG90eXBlLm5vZGVDb3VudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9ub2RlQ291bnR9LGJNdC5wcm90b3R5cGUubm9kZXM9ZnVuY3Rpb24oKXtyZXR1cm4gX010LmtleXModGhpcy5fbm9kZXMpfSxiTXQucHJvdG90eXBlLnNvdXJjZXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiBfTXQuZmlsdGVyKHRoaXMubm9kZXMoKSwoZnVuY3Rpb24oZSl7cmV0dXJuIF9NdC5pc0VtcHR5KHQuX2luW2VdKX0pKX0sYk10LnByb3RvdHlwZS5zaW5rcz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIF9NdC5maWx0ZXIodGhpcy5ub2RlcygpLChmdW5jdGlvbihlKXtyZXR1cm4gX010LmlzRW1wdHkodC5fb3V0W2VdKX0pKX0sYk10LnByb3RvdHlwZS5zZXROb2Rlcz1mdW5jdGlvbih0LGUpe3ZhciBuPWFyZ3VtZW50cyxpPXRoaXM7cmV0dXJuIF9NdC5lYWNoKHQsKGZ1bmN0aW9uKHQpe24ubGVuZ3RoPjE/aS5zZXROb2RlKHQsZSk6aS5zZXROb2RlKHQpfSkpLHRoaXN9LGJNdC5wcm90b3R5cGUuc2V0Tm9kZT1mdW5jdGlvbih0LGUpe3JldHVybiBfTXQuaGFzKHRoaXMuX25vZGVzLHQpPyhhcmd1bWVudHMubGVuZ3RoPjEmJih0aGlzLl9ub2Rlc1t0XT1lKSx0aGlzKToodGhpcy5fbm9kZXNbdF09YXJndW1lbnRzLmxlbmd0aD4xP2U6dGhpcy5fZGVmYXVsdE5vZGVMYWJlbEZuKHQpLHRoaXMuX2lzQ29tcG91bmQmJih0aGlzLl9wYXJlbnRbdF09dk10LHRoaXMuX2NoaWxkcmVuW3RdPXt9LHRoaXMuX2NoaWxkcmVuWyJcMCJdW3RdPSEwKSx0aGlzLl9pblt0XT17fSx0aGlzLl9wcmVkc1t0XT17fSx0aGlzLl9vdXRbdF09e30sdGhpcy5fc3Vjc1t0XT17fSwrK3RoaXMuX25vZGVDb3VudCx0aGlzKX0sYk10LnByb3RvdHlwZS5ub2RlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ub2Rlc1t0XX0sYk10LnByb3RvdHlwZS5oYXNOb2RlPWZ1bmN0aW9uKHQpe3JldHVybiBfTXQuaGFzKHRoaXMuX25vZGVzLHQpfSxiTXQucHJvdG90eXBlLnJlbW92ZU5vZGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZihfTXQuaGFzKHRoaXMuX25vZGVzLHQpKXt2YXIgbj1mdW5jdGlvbih0KXtlLnJlbW92ZUVkZ2UoZS5fZWRnZU9ianNbdF0pfTtkZWxldGUgdGhpcy5fbm9kZXNbdF0sdGhpcy5faXNDb21wb3VuZCYmKHRoaXMuX3JlbW92ZUZyb21QYXJlbnRzQ2hpbGRMaXN0KHQpLGRlbGV0ZSB0aGlzLl9wYXJlbnRbdF0sX010LmVhY2godGhpcy5jaGlsZHJlbih0KSwoZnVuY3Rpb24odCl7ZS5zZXRQYXJlbnQodCl9KSksZGVsZXRlIHRoaXMuX2NoaWxkcmVuW3RdKSxfTXQuZWFjaChfTXQua2V5cyh0aGlzLl9pblt0XSksbiksZGVsZXRlIHRoaXMuX2luW3RdLGRlbGV0ZSB0aGlzLl9wcmVkc1t0XSxfTXQuZWFjaChfTXQua2V5cyh0aGlzLl9vdXRbdF0pLG4pLGRlbGV0ZSB0aGlzLl9vdXRbdF0sZGVsZXRlIHRoaXMuX3N1Y3NbdF0sLS10aGlzLl9ub2RlQ291bnR9cmV0dXJuIHRoaXN9LGJNdC5wcm90b3R5cGUuc2V0UGFyZW50PWZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMuX2lzQ29tcG91bmQpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc2V0IHBhcmVudCBpbiBhIG5vbi1jb21wb3VuZCBncmFwaCIpO2lmKF9NdC5pc1VuZGVmaW5lZChlKSllPXZNdDtlbHNle2Zvcih2YXIgbj1lKz0iIjshX010LmlzVW5kZWZpbmVkKG4pO249dGhpcy5wYXJlbnQobikpaWYobj09PXQpdGhyb3cgbmV3IEVycm9yKCJTZXR0aW5nICIrZSsiIGFzIHBhcmVudCBvZiAiK3QrIiB3b3VsZCBjcmVhdGUgYSBjeWNsZSIpO3RoaXMuc2V0Tm9kZShlKX1yZXR1cm4gdGhpcy5zZXROb2RlKHQpLHRoaXMuX3JlbW92ZUZyb21QYXJlbnRzQ2hpbGRMaXN0KHQpLHRoaXMuX3BhcmVudFt0XT1lLHRoaXMuX2NoaWxkcmVuW2VdW3RdPSEwLHRoaXN9LGJNdC5wcm90b3R5cGUuX3JlbW92ZUZyb21QYXJlbnRzQ2hpbGRMaXN0PWZ1bmN0aW9uKHQpe2RlbGV0ZSB0aGlzLl9jaGlsZHJlblt0aGlzLl9wYXJlbnRbdF1dW3RdfSxiTXQucHJvdG90eXBlLnBhcmVudD1mdW5jdGlvbih0KXtpZih0aGlzLl9pc0NvbXBvdW5kKXt2YXIgZT10aGlzLl9wYXJlbnRbdF07aWYoZSE9PXZNdClyZXR1cm4gZX19LGJNdC5wcm90b3R5cGUuY2hpbGRyZW49ZnVuY3Rpb24odCl7aWYoX010LmlzVW5kZWZpbmVkKHQpJiYodD12TXQpLHRoaXMuX2lzQ29tcG91bmQpe3ZhciBlPXRoaXMuX2NoaWxkcmVuW3RdO2lmKGUpcmV0dXJuIF9NdC5rZXlzKGUpfWVsc2V7aWYodD09PXZNdClyZXR1cm4gdGhpcy5ub2RlcygpO2lmKHRoaXMuaGFzTm9kZSh0KSlyZXR1cm5bXX19LGJNdC5wcm90b3R5cGUucHJlZGVjZXNzb3JzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ByZWRzW3RdO2lmKGUpcmV0dXJuIF9NdC5rZXlzKGUpfSxiTXQucHJvdG90eXBlLnN1Y2Nlc3NvcnM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fc3Vjc1t0XTtpZihlKXJldHVybiBfTXQua2V5cyhlKX0sYk10LnByb3RvdHlwZS5uZWlnaGJvcnM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5wcmVkZWNlc3NvcnModCk7aWYoZSlyZXR1cm4gX010LnVuaW9uKGUsdGhpcy5zdWNjZXNzb3JzKHQpKX0sYk10LnByb3RvdHlwZS5pc0xlYWY9ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT0odGhpcy5pc0RpcmVjdGVkKCk/dGhpcy5zdWNjZXNzb3JzKHQpOnRoaXMubmVpZ2hib3JzKHQpKS5sZW5ndGh9LGJNdC5wcm90b3R5cGUuZmlsdGVyTm9kZXM9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IHRoaXMuY29uc3RydWN0b3Ioe2RpcmVjdGVkOnRoaXMuX2lzRGlyZWN0ZWQsbXVsdGlncmFwaDp0aGlzLl9pc011bHRpZ3JhcGgsY29tcG91bmQ6dGhpcy5faXNDb21wb3VuZH0pO2Uuc2V0R3JhcGgodGhpcy5ncmFwaCgpKTt2YXIgbj10aGlzO19NdC5lYWNoKHRoaXMuX25vZGVzLChmdW5jdGlvbihuLGkpe3QoaSkmJmUuc2V0Tm9kZShpLG4pfSkpLF9NdC5lYWNoKHRoaXMuX2VkZ2VPYmpzLChmdW5jdGlvbih0KXtlLmhhc05vZGUodC52KSYmZS5oYXNOb2RlKHQudykmJmUuc2V0RWRnZSh0LG4uZWRnZSh0KSl9KSk7dmFyIGk9e307ZnVuY3Rpb24gcih0KXt2YXIgbz1uLnBhcmVudCh0KTtyZXR1cm4gdm9pZCAwPT09b3x8ZS5oYXNOb2RlKG8pPyhpW3RdPW8sbyk6byBpbiBpP2lbb106cihvKX1yZXR1cm4gdGhpcy5faXNDb21wb3VuZCYmX010LmVhY2goZS5ub2RlcygpLChmdW5jdGlvbih0KXtlLnNldFBhcmVudCh0LHIodCkpfSkpLGV9LGJNdC5wcm90b3R5cGUuc2V0RGVmYXVsdEVkZ2VMYWJlbD1mdW5jdGlvbih0KXtyZXR1cm4gX010LmlzRnVuY3Rpb24odCl8fCh0PV9NdC5jb25zdGFudCh0KSksdGhpcy5fZGVmYXVsdEVkZ2VMYWJlbEZuPXQsdGhpc30sYk10LnByb3RvdHlwZS5lZGdlQ291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWRnZUNvdW50fSxiTXQucHJvdG90eXBlLmVkZ2VzPWZ1bmN0aW9uKCl7cmV0dXJuIF9NdC52YWx1ZXModGhpcy5fZWRnZU9ianMpfSxiTXQucHJvdG90eXBlLnNldFBhdGg9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLGk9YXJndW1lbnRzO3JldHVybiBfTXQucmVkdWNlKHQsKGZ1bmN0aW9uKHQscil7cmV0dXJuIGkubGVuZ3RoPjE/bi5zZXRFZGdlKHQscixlKTpuLnNldEVkZ2UodCxyKSxyfSkpLHRoaXN9LGJNdC5wcm90b3R5cGUuc2V0RWRnZT1mdW5jdGlvbigpe3ZhciB0LGUsbixpLHI9ITEsbz1hcmd1bWVudHNbMF07Im9iamVjdCI9PXR5cGVvZiBvJiZudWxsIT09byYmInYiaW4gbz8odD1vLnYsZT1vLncsbj1vLm5hbWUsMj09PWFyZ3VtZW50cy5sZW5ndGgmJihpPWFyZ3VtZW50c1sxXSxyPSEwKSk6KHQ9byxlPWFyZ3VtZW50c1sxXSxuPWFyZ3VtZW50c1szXSxhcmd1bWVudHMubGVuZ3RoPjImJihpPWFyZ3VtZW50c1syXSxyPSEwKSksdD0iIit0LGU9IiIrZSxfTXQuaXNVbmRlZmluZWQobil8fChuPSIiK24pO3ZhciBhPVNNdCh0aGlzLl9pc0RpcmVjdGVkLHQsZSxuKTtpZihfTXQuaGFzKHRoaXMuX2VkZ2VMYWJlbHMsYSkpcmV0dXJuIHImJih0aGlzLl9lZGdlTGFiZWxzW2FdPWkpLHRoaXM7aWYoIV9NdC5pc1VuZGVmaW5lZChuKSYmIXRoaXMuX2lzTXVsdGlncmFwaCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzZXQgYSBuYW1lZCBlZGdlIHdoZW4gaXNNdWx0aWdyYXBoID0gZmFsc2UiKTt0aGlzLnNldE5vZGUodCksdGhpcy5zZXROb2RlKGUpLHRoaXMuX2VkZ2VMYWJlbHNbYV09cj9pOnRoaXMuX2RlZmF1bHRFZGdlTGFiZWxGbih0LGUsbik7dmFyIHM9TU10KHRoaXMuX2lzRGlyZWN0ZWQsdCxlLG4pO3JldHVybiB0PXMudixlPXMudyxPYmplY3QuZnJlZXplKHMpLHRoaXMuX2VkZ2VPYmpzW2FdPXMseE10KHRoaXMuX3ByZWRzW2VdLHQpLHhNdCh0aGlzLl9zdWNzW3RdLGUpLHRoaXMuX2luW2VdW2FdPXMsdGhpcy5fb3V0W3RdW2FdPXMsdGhpcy5fZWRnZUNvdW50KyssdGhpc30sYk10LnByb3RvdHlwZS5lZGdlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT0xPT09YXJndW1lbnRzLmxlbmd0aD9FTXQodGhpcy5faXNEaXJlY3RlZCxhcmd1bWVudHNbMF0pOlNNdCh0aGlzLl9pc0RpcmVjdGVkLHQsZSxuKTtyZXR1cm4gdGhpcy5fZWRnZUxhYmVsc1tpXX0sYk10LnByb3RvdHlwZS5oYXNFZGdlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT0xPT09YXJndW1lbnRzLmxlbmd0aD9FTXQodGhpcy5faXNEaXJlY3RlZCxhcmd1bWVudHNbMF0pOlNNdCh0aGlzLl9pc0RpcmVjdGVkLHQsZSxuKTtyZXR1cm4gX010Lmhhcyh0aGlzLl9lZGdlTGFiZWxzLGkpfSxiTXQucHJvdG90eXBlLnJlbW92ZUVkZ2U9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPTE9PT1hcmd1bWVudHMubGVuZ3RoP0VNdCh0aGlzLl9pc0RpcmVjdGVkLGFyZ3VtZW50c1swXSk6U010KHRoaXMuX2lzRGlyZWN0ZWQsdCxlLG4pLHI9dGhpcy5fZWRnZU9ianNbaV07cmV0dXJuIHImJih0PXIudixlPXIudyxkZWxldGUgdGhpcy5fZWRnZUxhYmVsc1tpXSxkZWxldGUgdGhpcy5fZWRnZU9ianNbaV0sd010KHRoaXMuX3ByZWRzW2VdLHQpLHdNdCh0aGlzLl9zdWNzW3RdLGUpLGRlbGV0ZSB0aGlzLl9pbltlXVtpXSxkZWxldGUgdGhpcy5fb3V0W3RdW2ldLHRoaXMuX2VkZ2VDb3VudC0tKSx0aGlzfSxiTXQucHJvdG90eXBlLmluRWRnZXM9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9pblt0XTtpZihuKXt2YXIgaT1fTXQudmFsdWVzKG4pO3JldHVybiBlP19NdC5maWx0ZXIoaSwoZnVuY3Rpb24odCl7cmV0dXJuIHQudj09PWV9KSk6aX19LGJNdC5wcm90b3R5cGUub3V0RWRnZXM9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9vdXRbdF07aWYobil7dmFyIGk9X010LnZhbHVlcyhuKTtyZXR1cm4gZT9fTXQuZmlsdGVyKGksKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnc9PT1lfSkpOml9fSxiTXQucHJvdG90eXBlLm5vZGVFZGdlcz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuaW5FZGdlcyh0LGUpO2lmKG4pcmV0dXJuIG4uY29uY2F0KHRoaXMub3V0RWRnZXModCxlKSl9O3ZhciBUTXQ9e0dyYXBoOnlNdCx2ZXJzaW9uOiIyLjEuOCJ9LENNdD17d3JpdGU6ZnVuY3Rpb24gQU10KHQpe3ZhciBlPXtvcHRpb25zOntkaXJlY3RlZDp0LmlzRGlyZWN0ZWQoKSxtdWx0aWdyYXBoOnQuaXNNdWx0aWdyYXBoKCksY29tcG91bmQ6dC5pc0NvbXBvdW5kKCl9LG5vZGVzOkxNdCh0KSxlZGdlczpQTXQodCl9O3JldHVybiBfTXQuaXNVbmRlZmluZWQodC5ncmFwaCgpKXx8KGUudmFsdWU9X010LmNsb25lKHQuZ3JhcGgoKSkpLGV9LHJlYWQ6ZnVuY3Rpb24ga010KHQpe3ZhciBlPW5ldyB5TXQodC5vcHRpb25zKS5zZXRHcmFwaCh0LnZhbHVlKTtyZXR1cm4gX010LmVhY2godC5ub2RlcywoZnVuY3Rpb24odCl7ZS5zZXROb2RlKHQudix0LnZhbHVlKSx0LnBhcmVudCYmZS5zZXRQYXJlbnQodC52LHQucGFyZW50KX0pKSxfTXQuZWFjaCh0LmVkZ2VzLChmdW5jdGlvbih0KXtlLnNldEVkZ2Uoe3Y6dC52LHc6dC53LG5hbWU6dC5uYW1lfSx0LnZhbHVlKX0pKSxlfX07ZnVuY3Rpb24gTE10KHQpe3JldHVybiBfTXQubWFwKHQubm9kZXMoKSwoZnVuY3Rpb24oZSl7dmFyIG49dC5ub2RlKGUpLGk9dC5wYXJlbnQoZSkscj17djplfTtyZXR1cm4gX010LmlzVW5kZWZpbmVkKG4pfHwoci52YWx1ZT1uKSxfTXQuaXNVbmRlZmluZWQoaSl8fChyLnBhcmVudD1pKSxyfSkpfWZ1bmN0aW9uIFBNdCh0KXtyZXR1cm4gX010Lm1hcCh0LmVkZ2VzKCksKGZ1bmN0aW9uKGUpe3ZhciBuPXQuZWRnZShlKSxpPXt2OmUudix3OmUud307cmV0dXJuIF9NdC5pc1VuZGVmaW5lZChlLm5hbWUpfHwoaS5uYW1lPWUubmFtZSksX010LmlzVW5kZWZpbmVkKG4pfHwoaS52YWx1ZT1uKSxpfSkpfXZhciBOTXQ9SU10O2Z1bmN0aW9uIElNdCgpe3RoaXMuX2Fycj1bXSx0aGlzLl9rZXlJbmRpY2VzPXt9fUlNdC5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcnIubGVuZ3RofSxJTXQucHJvdG90eXBlLmtleXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXJyLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5fSkpfSxJTXQucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4gX010Lmhhcyh0aGlzLl9rZXlJbmRpY2VzLHQpfSxJTXQucHJvdG90eXBlLnByaW9yaXR5PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2tleUluZGljZXNbdF07aWYodm9pZCAwIT09ZSlyZXR1cm4gdGhpcy5fYXJyW2VdLnByaW9yaXR5fSxJTXQucHJvdG90eXBlLm1pbj1mdW5jdGlvbigpe2lmKDA9PT10aGlzLnNpemUoKSl0aHJvdyBuZXcgRXJyb3IoIlF1ZXVlIHVuZGVyZmxvdyIpO3JldHVybiB0aGlzLl9hcnJbMF0ua2V5fSxJTXQucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX2tleUluZGljZXM7aWYodD1TdHJpbmcodCksIV9NdC5oYXMobix0KSl7dmFyIGk9dGhpcy5fYXJyLHI9aS5sZW5ndGg7cmV0dXJuIG5bdF09cixpLnB1c2goe2tleTp0LHByaW9yaXR5OmV9KSx0aGlzLl9kZWNyZWFzZShyKSwhMH1yZXR1cm4hMX0sSU10LnByb3RvdHlwZS5yZW1vdmVNaW49ZnVuY3Rpb24oKXt0aGlzLl9zd2FwKDAsdGhpcy5fYXJyLmxlbmd0aC0xKTt2YXIgdD10aGlzLl9hcnIucG9wKCk7cmV0dXJuIGRlbGV0ZSB0aGlzLl9rZXlJbmRpY2VzW3Qua2V5XSx0aGlzLl9oZWFwaWZ5KDApLHQua2V5fSxJTXQucHJvdG90eXBlLmRlY3JlYXNlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fa2V5SW5kaWNlc1t0XTtpZihlPnRoaXMuX2FycltuXS5wcmlvcml0eSl0aHJvdyBuZXcgRXJyb3IoIk5ldyBwcmlvcml0eSBpcyBncmVhdGVyIHRoYW4gY3VycmVudCBwcmlvcml0eS4gS2V5OiAiK3QrIiBPbGQ6ICIrdGhpcy5fYXJyW25dLnByaW9yaXR5KyIgTmV3OiAiK2UpO3RoaXMuX2FycltuXS5wcmlvcml0eT1lLHRoaXMuX2RlY3JlYXNlKG4pfSxJTXQucHJvdG90eXBlLl9oZWFwaWZ5PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2FycixuPTIqdCxpPW4rMSxyPXQ7bjxlLmxlbmd0aCYmKHI9ZVtuXS5wcmlvcml0eTxlW3JdLnByaW9yaXR5P246cixpPGUubGVuZ3RoJiYocj1lW2ldLnByaW9yaXR5PGVbcl0ucHJpb3JpdHk/aTpyKSxyIT09dCYmKHRoaXMuX3N3YXAodCxyKSx0aGlzLl9oZWFwaWZ5KHIpKSl9LElNdC5wcm90b3R5cGUuX2RlY3JlYXNlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPXRoaXMuX2FycixpPW5bdF0ucHJpb3JpdHk7MCE9PXQmJiEobltlPXQ+PjFdLnByaW9yaXR5PGkpOyl0aGlzLl9zd2FwKHQsZSksdD1lfSxJTXQucHJvdG90eXBlLl9zd2FwPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fYXJyLGk9dGhpcy5fa2V5SW5kaWNlcyxyPW5bdF0sbz1uW2VdO25bdF09byxuW2VdPXIsaVtvLmtleV09dCxpW3Iua2V5XT1lfTt2YXIgT010PWZ1bmN0aW9uIFJNdCh0LGUsbixpKXtyZXR1cm4oZnVuY3Rpb24gcih0LGUsbixpKXt2YXIgcixvLGE9e30scz1uZXcgTk10LGw9ZnVuY3Rpb24odCl7dmFyIGU9dC52IT09cj90LnY6dC53LGk9YVtlXSxsPW4odCksYz1vLmRpc3RhbmNlK2w7aWYobDwwKXRocm93IG5ldyBFcnJvcigiZGlqa3N0cmEgZG9lcyBub3QgYWxsb3cgbmVnYXRpdmUgZWRnZSB3ZWlnaHRzLiBCYWQgZWRnZTogIit0KyIgV2VpZ2h0OiAiK2wpO2M8aS5kaXN0YW5jZSYmKGkuZGlzdGFuY2U9YyxpLnByZWRlY2Vzc29yPXIscy5kZWNyZWFzZShlLGMpKX07Zm9yKHQubm9kZXMoKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj10PT09ZT8wOk51bWJlci5QT1NJVElWRV9JTkZJTklUWTthW3RdPXtkaXN0YW5jZTpufSxzLmFkZCh0LG4pfSkpO3Muc2l6ZSgpPjAmJihyPXMucmVtb3ZlTWluKCksKG89YVtyXSkuZGlzdGFuY2UhPT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpOylpKHIpLmZvckVhY2gobCk7cmV0dXJuIGF9KSh0LFN0cmluZyhlKSxufHx6TXQsaXx8ZnVuY3Rpb24oZSl7cmV0dXJuIHQub3V0RWRnZXMoZSl9KX0sek10PV9NdC5jb25zdGFudCgxKSxETXQ9ZnVuY3Rpb24gQk10KHQpe3ZhciBlPTAsbj1bXSxpPXt9LHI9W107ZnVuY3Rpb24gbyhhKXt2YXIgcz1pW2FdPXtvblN0YWNrOiEwLGxvd2xpbms6ZSxpbmRleDplKyt9O2lmKG4ucHVzaChhKSx0LnN1Y2Nlc3NvcnMoYSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7X010LmhhcyhpLHQpP2lbdF0ub25TdGFjayYmKHMubG93bGluaz1NYXRoLm1pbihzLmxvd2xpbmssaVt0XS5pbmRleCkpOihvKHQpLHMubG93bGluaz1NYXRoLm1pbihzLmxvd2xpbmssaVt0XS5sb3dsaW5rKSl9KSkscy5sb3dsaW5rPT09cy5pbmRleCl7dmFyIGwsYz1bXTtkb3tsPW4ucG9wKCksaVtsXS5vblN0YWNrPSExLGMucHVzaChsKX13aGlsZShhIT09bCk7ci5wdXNoKGMpfX1yZXR1cm4gdC5ub2RlcygpLmZvckVhY2goKGZ1bmN0aW9uKHQpe19NdC5oYXMoaSx0KXx8byh0KX0pKSxyfSxITXQ9X010LmNvbnN0YW50KDEpLEZNdD1WTXQ7ZnVuY3Rpb24gVk10KHQpe3ZhciBlPXt9LG49e30saT1bXTtpZihfTXQuZWFjaCh0LnNpbmtzKCksKGZ1bmN0aW9uIHIobyl7aWYoX010LmhhcyhuLG8pKXRocm93IG5ldyBVTXQ7X010LmhhcyhlLG8pfHwobltvXT0hMCxlW29dPSEwLF9NdC5lYWNoKHQucHJlZGVjZXNzb3JzKG8pLHIpLGRlbGV0ZSBuW29dLGkucHVzaChvKSl9KSksX010LnNpemUoZSkhPT10Lm5vZGVDb3VudCgpKXRocm93IG5ldyBVTXQ7cmV0dXJuIGl9ZnVuY3Rpb24gVU10KCl7fVZNdC5DeWNsZUV4Y2VwdGlvbj1VTXQsVU10LnByb3RvdHlwZT1uZXcgRXJyb3I7dmFyIGpNdD1mdW5jdGlvbiBHTXQodCxlLG4pe19NdC5pc0FycmF5KGUpfHwoZT1bZV0pO3ZhciBpPSh0LmlzRGlyZWN0ZWQoKT90LnN1Y2Nlc3NvcnM6dC5uZWlnaGJvcnMpLmJpbmQodCkscj1bXSxvPXt9O3JldHVybiBfTXQuZWFjaChlLChmdW5jdGlvbihlKXtpZighdC5oYXNOb2RlKGUpKXRocm93IG5ldyBFcnJvcigiR3JhcGggZG9lcyBub3QgaGF2ZSBub2RlOiAiK2UpO1dNdCh0LGUsInBvc3QiPT09bixvLGkscil9KSkscn07ZnVuY3Rpb24gV010KHQsZSxuLGkscixvKXtfTXQuaGFzKGksZSl8fChpW2VdPSEwLG58fG8ucHVzaChlKSxfTXQuZWFjaChyKGUpLChmdW5jdGlvbihlKXtXTXQodCxlLG4saSxyLG8pfSkpLG4mJm8ucHVzaChlKSl9dmFyIHFNdCxZTXQ9e0dyYXBoOlRNdC5HcmFwaCxqc29uOkNNdCxhbGc6e2NvbXBvbmVudHM6ZnVuY3Rpb24gWE10KHQpe3ZhciBlLG49e30saT1bXTtmdW5jdGlvbiByKGkpe19NdC5oYXMobixpKXx8KG5baV09ITAsZS5wdXNoKGkpLF9NdC5lYWNoKHQuc3VjY2Vzc29ycyhpKSxyKSxfTXQuZWFjaCh0LnByZWRlY2Vzc29ycyhpKSxyKSl9cmV0dXJuIF9NdC5lYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24odCl7ZT1bXSxyKHQpLGUubGVuZ3RoJiZpLnB1c2goZSl9KSksaX0sZGlqa3N0cmE6T010LGRpamtzdHJhQWxsOmZ1bmN0aW9uICRNdCh0LGUsbil7cmV0dXJuIF9NdC50cmFuc2Zvcm0odC5ub2RlcygpLChmdW5jdGlvbihpLHIpe2lbcl09T010KHQscixlLG4pfSkse30pfSxmaW5kQ3ljbGVzOmZ1bmN0aW9uIEtNdCh0KXtyZXR1cm4gX010LmZpbHRlcihETXQodCksKGZ1bmN0aW9uKGUpe3JldHVybiBlLmxlbmd0aD4xfHwxPT09ZS5sZW5ndGgmJnQuaGFzRWRnZShlWzBdLGVbMF0pfSkpfSxmbG95ZFdhcnNoYWxsOmZ1bmN0aW9uIFpNdCh0LGUsbil7cmV0dXJuKGZ1bmN0aW9uIGkodCxlLG4pe3ZhciBpPXt9LHI9dC5ub2RlcygpO3JldHVybiByLmZvckVhY2goKGZ1bmN0aW9uKHQpe2lbdF09e30saVt0XVt0XT17ZGlzdGFuY2U6MH0sci5mb3JFYWNoKChmdW5jdGlvbihlKXt0IT09ZSYmKGlbdF1bZV09e2Rpc3RhbmNlOk51bWJlci5QT1NJVElWRV9JTkZJTklUWX0pfSkpLG4odCkuZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIHI9bi52PT09dD9uLnc6bi52LG89ZShuKTtpW3RdW3JdPXtkaXN0YW5jZTpvLHByZWRlY2Vzc29yOnR9fSkpfSkpLHIuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9aVt0XTtyLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciBvPWlbbl07ci5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgaT1lW25dLHI9b1tuXSxhPW9bdF0uZGlzdGFuY2UraS5kaXN0YW5jZTthPHIuZGlzdGFuY2UmJihyLmRpc3RhbmNlPWEsci5wcmVkZWNlc3Nvcj1pLnByZWRlY2Vzc29yKX0pKX0pKX0pKSxpfSkodCxlfHxITXQsbnx8ZnVuY3Rpb24oZSl7cmV0dXJuIHQub3V0RWRnZXMoZSl9KX0saXNBY3ljbGljOmZ1bmN0aW9uIEpNdCh0KXt0cnl7Rk10KHQpfWNhdGNoKHQpe2lmKHQgaW5zdGFuY2VvZiBGTXQuQ3ljbGVFeGNlcHRpb24pcmV0dXJuITE7dGhyb3cgdH1yZXR1cm4hMH0scG9zdG9yZGVyOmZ1bmN0aW9uIFFNdCh0LGUpe3JldHVybiBqTXQodCxlLCJwb3N0Iil9LHByZW9yZGVyOmZ1bmN0aW9uIHRFdCh0LGUpe3JldHVybiBqTXQodCxlLCJwcmUiKX0scHJpbTpmdW5jdGlvbiBlRXQodCxlKXt2YXIgbixpPW5ldyB5TXQscj17fSxvPW5ldyBOTXQ7ZnVuY3Rpb24gYSh0KXt2YXIgaT10LnY9PT1uP3Qudzp0LnYsYT1vLnByaW9yaXR5KGkpO2lmKHZvaWQgMCE9PWEpe3ZhciBzPWUodCk7czxhJiYocltpXT1uLG8uZGVjcmVhc2UoaSxzKSl9fWlmKDA9PT10Lm5vZGVDb3VudCgpKXJldHVybiBpO19NdC5lYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24odCl7by5hZGQodCxOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpLGkuc2V0Tm9kZSh0KX0pKSxvLmRlY3JlYXNlKHQubm9kZXMoKVswXSwwKTtmb3IodmFyIHM9ITE7by5zaXplKCk+MDspe2lmKG49by5yZW1vdmVNaW4oKSxfTXQuaGFzKHIsbikpaS5zZXRFZGdlKG4scltuXSk7ZWxzZXtpZihzKXRocm93IG5ldyBFcnJvcigiSW5wdXQgZ3JhcGggaXMgbm90IGNvbm5lY3RlZDogIit0KTtzPSEwfXQubm9kZUVkZ2VzKG4pLmZvckVhY2goYSl9cmV0dXJuIGl9LHRhcmphbjpETXQsdG9wc29ydDpGTXR9LHZlcnNpb246VE10LnZlcnNpb259O3RyeXtxTXQ9WU10fWNhdGNoKHQpe31xTXR8fChxTXQ9d2luZG93LmdyYXBobGliKTt2YXIgbkV0LGlFdD1xTXQsckV0PWZ1bmN0aW9uIG9FdCh0LGUsbil7aWYoIUd5dChuKSlyZXR1cm4hMTt2YXIgaT10eXBlb2YgZTtyZXR1cm4hISgibnVtYmVyIj09aT93YnQobikmJlF2dChlLG4ubGVuZ3RoKToic3RyaW5nIj09aSYmZSBpbiBuKSYmdnl0KG5bZV0sdCl9LGFFdD1PYmplY3QucHJvdG90eXBlLHNFdD1hRXQuaGFzT3duUHJvcGVydHksbEV0PUtTdCgoZnVuY3Rpb24odCxlKXt0PU9iamVjdCh0KTt2YXIgbj0tMSxpPWUubGVuZ3RoLHI9aT4yP2VbMl06dm9pZCAwO2ZvcihyJiZyRXQoZVswXSxlWzFdLHIpJiYoaT0xKTsrK248aTspZm9yKHZhciBvPWVbbl0sYT1DYnQobykscz0tMSxsPWEubGVuZ3RoOysrczxsOyl7dmFyIGM9YVtzXSx1PXRbY107KHZvaWQgMD09PXV8fHZ5dCh1LGFFdFtjXSkmJiFzRXQuY2FsbCh0LGMpKSYmKHRbY109b1tjXSl9cmV0dXJuIHR9KSksY0V0PS9ccy8sdUV0PS9eXHMrLyxoRXQ9L15bLStdMHhbMC05YS1mXSskL2ksZEV0PS9eMGJbMDFdKyQvaSxwRXQ9L14wb1swLTddKyQvaSxmRXQ9cGFyc2VJbnQsbUV0PWZ1bmN0aW9uIGdFdCh0KXtyZXR1cm4gdD8xLzA9PT0odD0oZnVuY3Rpb24gZSh0KXtpZigibnVtYmVyIj09dHlwZW9mIHQpcmV0dXJuIHQ7aWYoTXd0KHQpKXJldHVybiBOYU47aWYoR3l0KHQpKXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2YgdC52YWx1ZU9mP3QudmFsdWVPZigpOnQ7dD1HeXQoZSk/ZSsiIjplfWlmKCJzdHJpbmciIT10eXBlb2YgdClyZXR1cm4gMD09PXQ/dDordDt0PShmdW5jdGlvbiBuKHQpe3JldHVybiB0P3Quc2xpY2UoMCwoZnVuY3Rpb24gZSh0KXtmb3IodmFyIGU9dC5sZW5ndGg7ZS0tJiZjRXQudGVzdCh0LmNoYXJBdChlKSk7KTtyZXR1cm4gZX0pKHQpKzEpLnJlcGxhY2UodUV0LCIiKTp0fSkodCk7dmFyIGk9ZEV0LnRlc3QodCk7cmV0dXJuIGl8fHBFdC50ZXN0KHQpP2ZFdCh0LnNsaWNlKDIpLGk/Mjo4KTpoRXQudGVzdCh0KT9OYU46K3R9KSh0KSl8fHQ9PT0tMS8wPzE3OTc2OTMxMzQ4NjIzMTU3ZTI5MioodDwwPy0xOjEpOnQ9PXQ/dDowOjA9PT10P3Q6MH0sX0V0PU1hdGgubWF4LHlFdD0oZnVuY3Rpb24gYkV0KHQpe3JldHVybiBmdW5jdGlvbihlLG4saSl7dmFyIHI9T2JqZWN0KGUpO2lmKCF3YnQoZSkpe3ZhciBvPXJTdChuKTtlPU1idChlKSxuPWZ1bmN0aW9uKHQpe3JldHVybiBvKHJbdF0sdCxyKX19dmFyIGE9dChlLG4saSk7cmV0dXJuIGE+LTE/cltvP2VbYV06YV06dm9pZCAwfX0pKChmdW5jdGlvbiB2RXQodCxlLG4pe3ZhciBpPW51bGw9PXQ/MDp0Lmxlbmd0aDtpZighaSlyZXR1cm4tMTt2YXIgcj1udWxsPT1uPzA6KGZ1bmN0aW9uIG8odCl7dmFyIGU9bUV0KHQpLG49ZSUxO3JldHVybiBlPT1lP24/ZS1uOmU6MH0pKG4pO3JldHVybiByPDAmJihyPV9FdChpK3IsMCkpLEpTdCh0LHJTdChlKSxyKX0pKSx4RXQ9ZnVuY3Rpb24gd0V0KHQpe3JldHVybiBudWxsIT10JiZ0Lmxlbmd0aD9WU3QodCwxKTpbXX0sU0V0PWZ1bmN0aW9uIE1FdCh0LGUsbil7Zm9yKHZhciBpPS0xLHI9dC5sZW5ndGg7KytpPHI7KXt2YXIgbz10W2ldLGE9ZShvKTtpZihudWxsIT1hJiYodm9pZCAwPT09cz9hPT1hJiYhTXd0KGEpOm4oYSxzKSkpdmFyIHM9YSxsPW99cmV0dXJuIGx9LEVFdD1mdW5jdGlvbiBURXQodCxlKXtyZXR1cm4gdD5lfSxDRXQ9ZnVuY3Rpb24gQUV0KHQsZSxuKXsodm9pZCAwIT09biYmIXZ5dCh0W2VdLG4pfHx2b2lkIDA9PT1uJiYhKGUgaW4gdCkpJiZJdnQodCxlLG4pfSxrRXQ9RnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nLExFdD1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LFBFdD1rRXQuY2FsbChPYmplY3QpLE5FdD1mdW5jdGlvbiBJRXQodCxlKXtpZigoImNvbnN0cnVjdG9yIiE9PWV8fCJmdW5jdGlvbiIhPXR5cGVvZiB0W2VdKSYmIl9fcHJvdG9fXyIhPWUpcmV0dXJuIHRbZV19LE9FdD1mdW5jdGlvbiB0KGUsbixpLHIsbyl7ZSE9PW4mJkR4dChuLChmdW5jdGlvbihhLHMpe2lmKG98fChvPW5ldyBrdnQpLEd5dChhKSkhKGZ1bmN0aW9uIGwodCxlLG4saSxyLG8sYSl7dmFyIHM9TkV0KHQsbiksbD1ORXQoZSxuKSxjPWEuZ2V0KGwpO2lmKGMpQ0V0KHQsbixjKTtlbHNle3ZhciB1PW8/byhzLGwsbisiIix0LGUsYSk6dm9pZCAwLGg9dm9pZCAwPT09dTtpZihoKXt2YXIgZD1YdnQobCkscD0hZCYmWnZ0KGwpLGY9IWQmJiFwJiZsYnQobCk7dT1sLGR8fHB8fGY/WHZ0KHMpP3U9czpsTXQocyk/dT1MYnQocyk6cD8oaD0hMSx1PWtidChsLCEwKSk6Zj8oaD0hMSx1PXl4dChsLCEwKSk6dT1bXTooZnVuY3Rpb24gbSh0KXtpZighRnZ0KHQpfHwiW29iamVjdCBPYmplY3RdIiE9VXl0KHQpKXJldHVybiExO3ZhciBlPVZidCh0KTtpZihudWxsPT09ZSlyZXR1cm4hMDt2YXIgbj1MRXQuY2FsbChlLCJjb25zdHJ1Y3RvciIpJiZlLmNvbnN0cnVjdG9yO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBuJiZuIGluc3RhbmNlb2YgbiYma0V0LmNhbGwobik9PVBFdH0pKGwpfHxZdnQobCk/KHU9cyxZdnQocyk/dT0oZnVuY3Rpb24gZyh0KXtyZXR1cm4gQnZ0KHQsQ2J0KHQpKX0pKHMpOkd5dChzKSYmIXF5dChzKXx8KHU9d3h0KGwpKSk6aD0hMX1oJiYoYS5zZXQobCx1KSxyKHUsbCxpLG8sYSksYS5kZWxldGUobCkpLENFdCh0LG4sdSl9fSkoZSxuLHMsaSx0LHIsbyk7ZWxzZXt2YXIgYz1yP3IoTkV0KGUscyksYSxzKyIiLGUsbixvKTp2b2lkIDA7dm9pZCAwPT09YyYmKGM9YSksQ0V0KGUscyxjKX19KSxDYnQpfSxSRXQ9KGZ1bmN0aW9uIHpFdCh0KXtyZXR1cm4gS1N0KChmdW5jdGlvbihlLG4pe3ZhciBpPS0xLHI9bi5sZW5ndGgsbz1yPjE/bltyLTFdOnZvaWQgMCxhPXI+Mj9uWzJdOnZvaWQgMDtmb3Iobz10Lmxlbmd0aD4zJiYiZnVuY3Rpb24iPT10eXBlb2Ygbz8oci0tLG8pOnZvaWQgMCxhJiZyRXQoblswXSxuWzFdLGEpJiYobz1yPDM/dm9pZCAwOm8scj0xKSxlPU9iamVjdChlKTsrK2k8cjspe3ZhciBzPW5baV07cyYmdChlLHMsaSxvKX1yZXR1cm4gZX0pKX0pKChmdW5jdGlvbih0LGUsbil7T0V0KHQsZSxuKX0pKSxERXQ9ZnVuY3Rpb24gQkV0KHQsZSl7cmV0dXJuIHQ8ZX0sSEV0PWZ1bmN0aW9uIEZFdCh0LGUsbixpKXtpZighR3l0KHQpKXJldHVybiB0O2Zvcih2YXIgcj0tMSxvPShlPUd3dChlLHQpKS5sZW5ndGgsYT1vLTEscz10O251bGwhPXMmJisrcjxvOyl7dmFyIGw9cXd0KGVbcl0pLGM9bjtpZigiX19wcm90b19fIj09PWx8fCJjb25zdHJ1Y3RvciI9PT1sfHwicHJvdG90eXBlIj09PWwpcmV0dXJuIHQ7aWYociE9YSl7dmFyIHU9c1tsXTt2b2lkIDA9PT0oYz1pP2kodSxsLHMpOnZvaWQgMCkmJihjPUd5dCh1KT91OlF2dChlW3IrMV0pP1tdOnt9KX16dnQocyxsLGMpLHM9c1tsXX1yZXR1cm4gdH0sVkV0PShmdW5jdGlvbiBVRXQodCl7cmV0dXJuIFhTdChXU3QodCx2b2lkIDAseEV0KSx0KyIiKX0pKChmdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT10P3t9OihmdW5jdGlvbiBuKHQsZSl7cmV0dXJuKGZ1bmN0aW9uIG4odCxlLGkpe2Zvcih2YXIgcj0tMSxvPWUubGVuZ3RoLGE9e307KytyPG87KXt2YXIgcz1lW3JdLGw9WHd0KHQscyk7aShsLHMpJiZIRXQoYSxHd3Qocyx0KSxsKX1yZXR1cm4gYX0pKHQsZSwoZnVuY3Rpb24oZSxuKXtyZXR1cm4gdFN0KHQsbil9KSl9KSh0LGUpfSkpLGpFdD1NYXRoLmNlaWwsR0V0PU1hdGgubWF4LFdFdD0oZnVuY3Rpb24gcUV0KHQpe3JldHVybiBmdW5jdGlvbihlLG4saSl7cmV0dXJuIGkmJiJudW1iZXIiIT10eXBlb2YgaSYmckV0KGUsbixpKSYmKG49aT12b2lkIDApLGU9bUV0KGUpLHZvaWQgMD09PW4/KG49ZSxlPTApOm49bUV0KG4pLChmdW5jdGlvbiByKHQsZSxuLGkpe2Zvcih2YXIgcj0tMSxvPUdFdChqRXQoKGUtdCkvKG58fDEpKSwwKSxhPUFycmF5KG8pO28tLTspYVtpP286KytyXT10LHQrPW47cmV0dXJuIGF9KShlLG4saT12b2lkIDA9PT1pP2U8bj8xOi0xOm1FdChpKSx0KX19KSgpLFlFdD1mdW5jdGlvbiBYRXQodCxlKXtpZih0IT09ZSl7dmFyIG49dm9pZCAwIT09dCxpPW51bGw9PT10LHI9dD09dCxvPU13dCh0KSxhPXZvaWQgMCE9PWUscz1udWxsPT09ZSxsPWU9PWUsYz1Nd3QoZSk7aWYoIXMmJiFjJiYhbyYmdD5lfHxvJiZhJiZsJiYhcyYmIWN8fGkmJmEmJmx8fCFuJiZsfHwhcilyZXR1cm4gMTtpZighaSYmIW8mJiFjJiZ0PGV8fGMmJm4mJnImJiFpJiYhb3x8cyYmbiYmcnx8IWEmJnJ8fCFsKXJldHVybi0xfXJldHVybiAwfSwkRXQ9S1N0KChmdW5jdGlvbih0LGUpe2lmKG51bGw9PXQpcmV0dXJuW107dmFyIG49ZS5sZW5ndGg7cmV0dXJuIG4+MSYmckV0KHQsZVswXSxlWzFdKT9lPVtdOm4+MiYmckV0KGVbMF0sZVsxXSxlWzJdKSYmKGU9W2VbMF1dKSwoZnVuY3Rpb24gaSh0LGUsbil7ZT1lLmxlbmd0aD9Ed3QoZSwoZnVuY3Rpb24odCl7cmV0dXJuIFh2dCh0KT9mdW5jdGlvbihlKXtyZXR1cm4gWHd0KGUsMT09PXQubGVuZ3RoP3RbMF06dCl9OnR9KSk6W2p4dF07dmFyIGk9LTE7cmV0dXJuIGU9RHd0KGUscmJ0KHJTdCkpLChmdW5jdGlvbiByKHQsZSl7dmFyIG49dC5sZW5ndGg7Zm9yKHQuc29ydChlKTtuLS07KXRbbl09dFtuXS52YWx1ZTtyZXR1cm4gdH0pKGdTdCh0LChmdW5jdGlvbih0LG4scil7cmV0dXJue2NyaXRlcmlhOkR3dChlLChmdW5jdGlvbihlKXtyZXR1cm4gZSh0KX0pKSxpbmRleDorK2ksdmFsdWU6dH19KSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGZ1bmN0aW9uIGkodCxlLG4pe2Zvcih2YXIgaT0tMSxyPXQuY3JpdGVyaWEsbz1lLmNyaXRlcmlhLGE9ci5sZW5ndGgscz1uLmxlbmd0aDsrK2k8YTspe3ZhciBsPVlFdChyW2ldLG9baV0pO2lmKGwpcmV0dXJuIGk+PXM/bDpsKigiZGVzYyI9PW5baV0/LTE6MSl9cmV0dXJuIHQuaW5kZXgtZS5pbmRleH0pKHQsZSxuKX0pKX0pKHQsVlN0KGUsMSksW10pfSkpLEtFdD0wO3RyeXtuRXQ9e2Nsb25lRGVlcDpmdW5jdGlvbiBaRXQodCl7cmV0dXJuIE94dCh0LDUpfSxjb25zdGFudDpSeHQsZGVmYXVsdHM6bEV0LGVhY2g6JHh0LGZpbHRlcjphU3QsZmluZDp5RXQsZmxhdHRlbjp4RXQsZm9yRWFjaDpZeHQsZm9ySW46ZnVuY3Rpb24gSkV0KHQsZSl7cmV0dXJuIG51bGw9PXQ/dDpEeHQodCxXeHQoZSksQ2J0KX0saGFzOmhTdCxpc1VuZGVmaW5lZDpmU3QsbGFzdDpmdW5jdGlvbiBRRXQodCl7dmFyIGU9bnVsbD09dD8wOnQubGVuZ3RoO3JldHVybiBlP3RbZS0xXTp2b2lkIDB9LG1hcDp5U3QsbWFwVmFsdWVzOmZ1bmN0aW9uIHRUdCh0LGUpe3ZhciBuPXt9O3JldHVybiBlPXJTdChlKSxIeHQodCwoZnVuY3Rpb24odCxpLHIpe0l2dChuLGksZSh0LGkscikpfSkpLG59LG1heDpmdW5jdGlvbiBlVHQodCl7cmV0dXJuIHQmJnQubGVuZ3RoP1NFdCh0LGp4dCxFRXQpOnZvaWQgMH0sbWVyZ2U6UkV0LG1pbjpmdW5jdGlvbiBuVHQodCl7cmV0dXJuIHQmJnQubGVuZ3RoP1NFdCh0LGp4dCxERXQpOnZvaWQgMH0sbWluQnk6ZnVuY3Rpb24gaVR0KHQsZSl7cmV0dXJuIHQmJnQubGVuZ3RoP1NFdCh0LHJTdChlKSxERXQpOnZvaWQgMH0sbm93OmZ1bmN0aW9uKCl7cmV0dXJuIE95dC5EYXRlLm5vdygpfSxwaWNrOlZFdCxyYW5nZTpXRXQscmVkdWNlOk1TdCxzb3J0Qnk6JEV0LHVuaXF1ZUlkOmZ1bmN0aW9uIHJUdCh0KXt2YXIgZT0rK0tFdDtyZXR1cm4gVXd0KHQpK2V9LHZhbHVlczpoTXQsemlwT2JqZWN0OmZ1bmN0aW9uIG9UdCh0LGUpe3JldHVybihmdW5jdGlvbiBuKHQsZSxpKXtmb3IodmFyIHI9LTEsbz10Lmxlbmd0aCxhPWUubGVuZ3RoLHM9e307KytyPG87KWkocyx0W3JdLHI8YT9lW3JdOnZvaWQgMCk7cmV0dXJuIHN9KSh0fHxbXSxlfHxbXSx6dnQpfX19Y2F0Y2godCl7fW5FdHx8KG5FdD13aW5kb3cuXyk7dmFyIGFUdD1uRXQsc1R0PWxUdDtmdW5jdGlvbiBsVHQoKXt2YXIgdD17fTt0Ll9uZXh0PXQuX3ByZXY9dCx0aGlzLl9zZW50aW5lbD10fWZ1bmN0aW9uIGNUdCh0KXt0Ll9wcmV2Ll9uZXh0PXQuX25leHQsdC5fbmV4dC5fcHJldj10Ll9wcmV2LGRlbGV0ZSB0Ll9uZXh0LGRlbGV0ZSB0Ll9wcmV2fWZ1bmN0aW9uIHVUdCh0LGUpe2lmKCJfbmV4dCIhPT10JiYiX3ByZXYiIT09dClyZXR1cm4gZX1sVHQucHJvdG90eXBlLmRlcXVldWU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9zZW50aW5lbCxlPXQuX3ByZXY7aWYoZSE9PXQpcmV0dXJuIGNUdChlKSxlfSxsVHQucHJvdG90eXBlLmVucXVldWU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fc2VudGluZWw7dC5fcHJldiYmdC5fbmV4dCYmY1R0KHQpLHQuX25leHQ9ZS5fbmV4dCxlLl9uZXh0Ll9wcmV2PXQsZS5fbmV4dD10LHQuX3ByZXY9ZX0sbFR0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPXRoaXMuX3NlbnRpbmVsLG49ZS5fcHJldjtuIT09ZTspdC5wdXNoKEpTT04uc3RyaW5naWZ5KG4sdVR0KSksbj1uLl9wcmV2O3JldHVybiJbIit0LmpvaW4oIiwgIikrIl0ifTt2YXIgaFR0PWlFdC5HcmFwaCxkVHQ9YVR0LmNvbnN0YW50KDEpO2Z1bmN0aW9uIHBUdCh0LGUsbixpLHIpe3ZhciBvPXI/W106dm9pZCAwO3JldHVybiBhVHQuZm9yRWFjaCh0LmluRWRnZXMoaS52KSwoZnVuY3Rpb24oaSl7dmFyIGE9dC5lZGdlKGkpLHM9dC5ub2RlKGkudik7ciYmby5wdXNoKHt2Omkudix3Omkud30pLHMub3V0LT1hLGZUdChlLG4scyl9KSksYVR0LmZvckVhY2godC5vdXRFZGdlcyhpLnYpLChmdW5jdGlvbihpKXt2YXIgcj10LmVkZ2UoaSksbz10Lm5vZGUoaS53KTtvLmluLT1yLGZUdChlLG4sbyl9KSksdC5yZW1vdmVOb2RlKGkudiksb31mdW5jdGlvbiBmVHQodCxlLG4pe24ub3V0P24uaW4/dFtuLm91dC1uLmluK2VdLmVucXVldWUobik6dFt0Lmxlbmd0aC0xXS5lbnF1ZXVlKG4pOnRbMF0uZW5xdWV1ZShuKX12YXIgbVR0PWlFdC5HcmFwaCxnVHQ9e2FkZER1bW15Tm9kZTprVHQsc2ltcGxpZnk6ZnVuY3Rpb24gX1R0KHQpe3ZhciBlPShuZXcgbVR0KS5zZXRHcmFwaCh0LmdyYXBoKCkpO3JldHVybiBhVHQuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKG4pe2Uuc2V0Tm9kZShuLHQubm9kZShuKSl9KSksYVR0LmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihuKXt2YXIgaT1lLmVkZ2Uobi52LG4udyl8fHt3ZWlnaHQ6MCxtaW5sZW46MX0scj10LmVkZ2Uobik7ZS5zZXRFZGdlKG4udixuLncse3dlaWdodDppLndlaWdodCtyLndlaWdodCxtaW5sZW46TWF0aC5tYXgoaS5taW5sZW4sci5taW5sZW4pfSl9KSksZX0sYXNOb25Db21wb3VuZEdyYXBoOmZ1bmN0aW9uIHlUdCh0KXt2YXIgZT1uZXcgbVR0KHttdWx0aWdyYXBoOnQuaXNNdWx0aWdyYXBoKCl9KS5zZXRHcmFwaCh0LmdyYXBoKCkpO3JldHVybiBhVHQuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKG4pe3QuY2hpbGRyZW4obikubGVuZ3RofHxlLnNldE5vZGUobix0Lm5vZGUobikpfSkpLGFUdC5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24obil7ZS5zZXRFZGdlKG4sdC5lZGdlKG4pKX0pKSxlfSxzdWNjZXNzb3JXZWlnaHRzOmZ1bmN0aW9uIHZUdCh0KXt2YXIgZT1hVHQubWFwKHQubm9kZXMoKSwoZnVuY3Rpb24oZSl7dmFyIG49e307cmV0dXJuIGFUdC5mb3JFYWNoKHQub3V0RWRnZXMoZSksKGZ1bmN0aW9uKGUpe25bZS53XT0obltlLnddfHwwKSt0LmVkZ2UoZSkud2VpZ2h0fSkpLG59KSk7cmV0dXJuIGFUdC56aXBPYmplY3QodC5ub2RlcygpLGUpfSxwcmVkZWNlc3NvcldlaWdodHM6ZnVuY3Rpb24gYlR0KHQpe3ZhciBlPWFUdC5tYXAodC5ub2RlcygpLChmdW5jdGlvbihlKXt2YXIgbj17fTtyZXR1cm4gYVR0LmZvckVhY2godC5pbkVkZ2VzKGUpLChmdW5jdGlvbihlKXtuW2Uudl09KG5bZS52XXx8MCkrdC5lZGdlKGUpLndlaWdodH0pKSxufSkpO3JldHVybiBhVHQuemlwT2JqZWN0KHQubm9kZXMoKSxlKX0saW50ZXJzZWN0UmVjdDpmdW5jdGlvbiB4VHQodCxlKXt2YXIgbixpLHI9dC54LG89dC55LGE9ZS54LXIscz1lLnktbyxsPXQud2lkdGgvMixjPXQuaGVpZ2h0LzI7aWYoIWEmJiFzKXRocm93IG5ldyBFcnJvcigiTm90IHBvc3NpYmxlIHRvIGZpbmQgaW50ZXJzZWN0aW9uIGluc2lkZSBvZiB0aGUgcmVjdGFuZ2xlIik7cmV0dXJuIE1hdGguYWJzKHMpKmw+TWF0aC5hYnMoYSkqYz8oczwwJiYoYz0tYyksbj1jKmEvcyxpPWMpOihhPDAmJihsPS1sKSxuPWwsaT1sKnMvYSkse3g6cituLHk6bytpfX0sYnVpbGRMYXllck1hdHJpeDpmdW5jdGlvbiB3VHQodCl7dmFyIGU9YVR0Lm1hcChhVHQucmFuZ2UoTFR0KHQpKzEpLChmdW5jdGlvbigpe3JldHVybltdfSkpO3JldHVybiBhVHQuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKG4pe3ZhciBpPXQubm9kZShuKSxyPWkucmFuazthVHQuaXNVbmRlZmluZWQocil8fChlW3JdW2kub3JkZXJdPW4pfSkpLGV9LG5vcm1hbGl6ZVJhbmtzOmZ1bmN0aW9uIFNUdCh0KXt2YXIgZT1hVHQubWluKGFUdC5tYXAodC5ub2RlcygpLChmdW5jdGlvbihlKXtyZXR1cm4gdC5ub2RlKGUpLnJhbmt9KSkpO2FUdC5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24obil7dmFyIGk9dC5ub2RlKG4pO2FUdC5oYXMoaSwicmFuayIpJiYoaS5yYW5rLT1lKX0pKX0scmVtb3ZlRW1wdHlSYW5rczpmdW5jdGlvbiBNVHQodCl7dmFyIGU9YVR0Lm1pbihhVHQubWFwKHQubm9kZXMoKSwoZnVuY3Rpb24oZSl7cmV0dXJuIHQubm9kZShlKS5yYW5rfSkpKSxuPVtdO2FUdC5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24oaSl7dmFyIHI9dC5ub2RlKGkpLnJhbmstZTtuW3JdfHwobltyXT1bXSksbltyXS5wdXNoKGkpfSkpO3ZhciBpPTAscj10LmdyYXBoKCkubm9kZVJhbmtGYWN0b3I7YVR0LmZvckVhY2gobiwoZnVuY3Rpb24oZSxuKXthVHQuaXNVbmRlZmluZWQoZSkmJm4lciE9MD8tLWk6aSYmYVR0LmZvckVhY2goZSwoZnVuY3Rpb24oZSl7dC5ub2RlKGUpLnJhbmsrPWl9KSl9KSl9LGFkZEJvcmRlck5vZGU6ZnVuY3Rpb24gRVR0KHQsZSxuLGkpe3ZhciByPXt3aWR0aDowLGhlaWdodDowfTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD49NCYmKHIucmFuaz1uLHIub3JkZXI9aSksa1R0KHQsImJvcmRlciIscixlKX0sbWF4UmFuazpMVHQscGFydGl0aW9uOmZ1bmN0aW9uIFRUdCh0LGUpe3ZhciBuPXtsaHM6W10scmhzOltdfTtyZXR1cm4gYVR0LmZvckVhY2godCwoZnVuY3Rpb24odCl7ZSh0KT9uLmxocy5wdXNoKHQpOm4ucmhzLnB1c2godCl9KSksbn0sdGltZTpmdW5jdGlvbiBDVHQodCxlKXt2YXIgbj1hVHQubm93KCk7dHJ5e3JldHVybiBlKCl9ZmluYWxseXtjb25zb2xlLmxvZyh0KyIgdGltZTogIisoYVR0Lm5vdygpLW4pKyJtcyIpfX0sbm90aW1lOmZ1bmN0aW9uIEFUdCh0LGUpe3JldHVybiBlKCl9fTtmdW5jdGlvbiBrVHQodCxlLG4saSl7dmFyIHI7ZG97cj1hVHQudW5pcXVlSWQoaSl9d2hpbGUodC5oYXNOb2RlKHIpKTtyZXR1cm4gbi5kdW1teT1lLHQuc2V0Tm9kZShyLG4pLHJ9ZnVuY3Rpb24gTFR0KHQpe3JldHVybiBhVHQubWF4KGFUdC5tYXAodC5ub2RlcygpLChmdW5jdGlvbihlKXt2YXIgbj10Lm5vZGUoZSkucmFuaztpZighYVR0LmlzVW5kZWZpbmVkKG4pKXJldHVybiBufSkpKX12YXIgUFR0PWZ1bmN0aW9uIE5UdCh0KXt2YXIgZT17fTthVHQuZm9yRWFjaCh0LnNvdXJjZXMoKSwoZnVuY3Rpb24gbihpKXt2YXIgcj10Lm5vZGUoaSk7aWYoYVR0LmhhcyhlLGkpKXJldHVybiByLnJhbms7ZVtpXT0hMDt2YXIgbz1hVHQubWluKGFUdC5tYXAodC5vdXRFZGdlcyhpKSwoZnVuY3Rpb24oZSl7cmV0dXJuIG4oZS53KS10LmVkZ2UoZSkubWlubGVufSkpKTtyZXR1cm4gbyE9PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSYmbnVsbCE9b3x8KG89MCksci5yYW5rPW99KSl9LElUdD1mdW5jdGlvbiBPVHQodCxlKXtyZXR1cm4gdC5ub2RlKGUudykucmFuay10Lm5vZGUoZS52KS5yYW5rLXQuZWRnZShlKS5taW5sZW59LFJUdD1pRXQuR3JhcGgselR0PUlUdCxEVHQ9ZnVuY3Rpb24gQlR0KHQpe3ZhciBlLG4saT1uZXcgUlR0KHtkaXJlY3RlZDohMX0pLHI9dC5ub2RlcygpWzBdLG89dC5ub2RlQ291bnQoKTtmb3IoaS5zZXROb2RlKHIse30pO0hUdChpLHQpPG87KWU9RlR0KGksdCksbj1pLmhhc05vZGUoZS52KT96VHQodCxlKTotelR0KHQsZSksVlR0KGksdCxuKTtyZXR1cm4gaX07ZnVuY3Rpb24gSFR0KHQsZSl7cmV0dXJuIGFUdC5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24gbihpKXthVHQuZm9yRWFjaChlLm5vZGVFZGdlcyhpKSwoZnVuY3Rpb24ocil7dmFyIG89ci52LGE9aT09PW8/ci53Om87dC5oYXNOb2RlKGEpfHx6VHQoZSxyKXx8KHQuc2V0Tm9kZShhLHt9KSx0LnNldEVkZ2UoaSxhLHt9KSxuKGEpKX0pKX0pKSx0Lm5vZGVDb3VudCgpfWZ1bmN0aW9uIEZUdCh0LGUpe3JldHVybiBhVHQubWluQnkoZS5lZGdlcygpLChmdW5jdGlvbihuKXtpZih0Lmhhc05vZGUobi52KSE9PXQuaGFzTm9kZShuLncpKXJldHVybiB6VHQoZSxuKX0pKX1mdW5jdGlvbiBWVHQodCxlLG4pe2FUdC5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24odCl7ZS5ub2RlKHQpLnJhbmsrPW59KSl9dmFyIFVUdD1JVHQsalR0PVBUdCxHVHQ9aUV0LmFsZy5wcmVvcmRlcixXVHQ9aUV0LmFsZy5wb3N0b3JkZXIscVR0PWdUdC5zaW1wbGlmeSxZVHQ9WFR0O2Z1bmN0aW9uIFhUdCh0KXt0PXFUdCh0KSxqVHQodCk7dmFyIGUsbj1EVHQodCk7Zm9yKFpUdChuKSwkVHQobix0KTtlPVFUdChuKTspZUN0KG4sdCxlLHRDdChuLHQsZSkpfWZ1bmN0aW9uICRUdCh0LGUpe3ZhciBuPVdUdCh0LHQubm9kZXMoKSk7bj1uLnNsaWNlKDAsbi5sZW5ndGgtMSksYVR0LmZvckVhY2gobiwoZnVuY3Rpb24obil7IShmdW5jdGlvbiBpKHQsZSxuKXt2YXIgaT10Lm5vZGUobik7dC5lZGdlKG4saS5wYXJlbnQpLmN1dHZhbHVlPUtUdCh0LGUsbil9KSh0LGUsbil9KSl9ZnVuY3Rpb24gS1R0KHQsZSxuKXt2YXIgaT10Lm5vZGUobikucGFyZW50LHI9ITAsbz1lLmVkZ2UobixpKSxhPTA7cmV0dXJuIG98fChyPSExLG89ZS5lZGdlKGksbikpLGE9by53ZWlnaHQsYVR0LmZvckVhY2goZS5ub2RlRWRnZXMobiksKGZ1bmN0aW9uKG8pe3ZhciBzPW8udj09PW4sbD1zP28udzpvLnY7aWYobCE9PWkpe3ZhciBjPXM9PT1yLHU9ZS5lZGdlKG8pLndlaWdodDtpZihhKz1jP3U6LXUsKGZ1bmN0aW9uIGgodCxlLG4pe3JldHVybiB0Lmhhc0VkZ2UoZSxuKX0pKHQsbixsKSl7dmFyIGQ9dC5lZGdlKG4sbCkuY3V0dmFsdWU7YSs9Yz8tZDpkfX19KSksYX1mdW5jdGlvbiBaVHQodCxlKXthcmd1bWVudHMubGVuZ3RoPDImJihlPXQubm9kZXMoKVswXSksSlR0KHQse30sMSxlKX1mdW5jdGlvbiBKVHQodCxlLG4saSxyKXt2YXIgbz1uLGE9dC5ub2RlKGkpO3JldHVybiBlW2ldPSEwLGFUdC5mb3JFYWNoKHQubmVpZ2hib3JzKGkpLChmdW5jdGlvbihyKXthVHQuaGFzKGUscil8fChuPUpUdCh0LGUsbixyLGkpKX0pKSxhLmxvdz1vLGEubGltPW4rKyxyP2EucGFyZW50PXI6ZGVsZXRlIGEucGFyZW50LG59ZnVuY3Rpb24gUVR0KHQpe3JldHVybiBhVHQuZmluZCh0LmVkZ2VzKCksKGZ1bmN0aW9uKGUpe3JldHVybiB0LmVkZ2UoZSkuY3V0dmFsdWU8MH0pKX1mdW5jdGlvbiB0Q3QodCxlLG4pe3ZhciBpPW4udixyPW4udztlLmhhc0VkZ2UoaSxyKXx8KGk9bi53LHI9bi52KTt2YXIgbz10Lm5vZGUoaSksYT10Lm5vZGUocikscz1vLGw9ITE7by5saW0+YS5saW0mJihzPWEsbD0hMCk7dmFyIGM9YVR0LmZpbHRlcihlLmVkZ2VzKCksKGZ1bmN0aW9uKGUpe3JldHVybiBsPT09bkN0KDAsdC5ub2RlKGUudikscykmJmwhPT1uQ3QoMCx0Lm5vZGUoZS53KSxzKX0pKTtyZXR1cm4gYVR0Lm1pbkJ5KGMsKGZ1bmN0aW9uKHQpe3JldHVybiBVVHQoZSx0KX0pKX1mdW5jdGlvbiBlQ3QodCxlLG4saSl7dC5yZW1vdmVFZGdlKG4udixuLncpLHQuc2V0RWRnZShpLnYsaS53LHt9KSxaVHQodCksJFR0KHQsZSksKGZ1bmN0aW9uIHIodCxlKXt2YXIgbj1hVHQuZmluZCh0Lm5vZGVzKCksKGZ1bmN0aW9uKHQpe3JldHVybiFlLm5vZGUodCkucGFyZW50fSkpLGk9R1R0KHQsbik7aT1pLnNsaWNlKDEpLGFUdC5mb3JFYWNoKGksKGZ1bmN0aW9uKG4pe3ZhciBpPXQubm9kZShuKS5wYXJlbnQscj1lLmVkZ2UobixpKSxvPSExO3J8fChyPWUuZWRnZShpLG4pLG89ITApLGUubm9kZShuKS5yYW5rPWUubm9kZShpKS5yYW5rKyhvP3IubWlubGVuOi1yLm1pbmxlbil9KSl9KSh0LGUpfWZ1bmN0aW9uIG5DdCh0LGUsbil7cmV0dXJuIG4ubG93PD1lLmxpbSYmZS5saW08PW4ubGltfVhUdC5pbml0TG93TGltVmFsdWVzPVpUdCxYVHQuaW5pdEN1dFZhbHVlcz0kVHQsWFR0LmNhbGNDdXRWYWx1ZT1LVHQsWFR0LmxlYXZlRWRnZT1RVHQsWFR0LmVudGVyRWRnZT10Q3QsWFR0LmV4Y2hhbmdlRWRnZXM9ZUN0O3ZhciBpQ3Q9UFR0LHJDdD1pQ3Q7ZnVuY3Rpb24gb0N0KHQpe1lUdCh0KX12YXIgYUN0PWZ1bmN0aW9uIHNDdCh0KXt2YXIgZT1nVHQuYWRkRHVtbXlOb2RlKHQsInJvb3QiLHt9LCJfcm9vdCIpLG49KGZ1bmN0aW9uIGkodCl7dmFyIGU9e307ZnVuY3Rpb24gbihpLHIpe3ZhciBvPXQuY2hpbGRyZW4oaSk7byYmby5sZW5ndGgmJmFUdC5mb3JFYWNoKG8sKGZ1bmN0aW9uKHQpe24odCxyKzEpfSkpLGVbaV09cn1yZXR1cm4gYVR0LmZvckVhY2godC5jaGlsZHJlbigpLChmdW5jdGlvbih0KXtuKHQsMSl9KSksZX0pKHQpLHI9YVR0Lm1heChhVHQudmFsdWVzKG4pKS0xLG89MipyKzE7dC5ncmFwaCgpLm5lc3RpbmdSb290PWUsYVR0LmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihlKXt0LmVkZ2UoZSkubWlubGVuKj1vfSkpO3ZhciBhPShmdW5jdGlvbiBzKHQpe3JldHVybiBhVHQucmVkdWNlKHQuZWRnZXMoKSwoZnVuY3Rpb24oZSxuKXtyZXR1cm4gZSt0LmVkZ2Uobikud2VpZ2h0fSksMCl9KSh0KSsxO2FUdC5mb3JFYWNoKHQuY2hpbGRyZW4oKSwoZnVuY3Rpb24oaSl7bEN0KHQsZSxvLGEscixuLGkpfSkpLHQuZ3JhcGgoKS5ub2RlUmFua0ZhY3Rvcj1vfTtmdW5jdGlvbiBsQ3QodCxlLG4saSxyLG8sYSl7dmFyIHM9dC5jaGlsZHJlbihhKTtpZihzLmxlbmd0aCl7dmFyIGw9Z1R0LmFkZEJvcmRlck5vZGUodCwiX2J0IiksYz1nVHQuYWRkQm9yZGVyTm9kZSh0LCJfYmIiKSx1PXQubm9kZShhKTt0LnNldFBhcmVudChsLGEpLHUuYm9yZGVyVG9wPWwsdC5zZXRQYXJlbnQoYyxhKSx1LmJvcmRlckJvdHRvbT1jLGFUdC5mb3JFYWNoKHMsKGZ1bmN0aW9uKHMpe2xDdCh0LGUsbixpLHIsbyxzKTt2YXIgdT10Lm5vZGUocyksaD11LmJvcmRlclRvcD91LmJvcmRlclRvcDpzLGQ9dS5ib3JkZXJCb3R0b20/dS5ib3JkZXJCb3R0b206cyxwPXUuYm9yZGVyVG9wP2k6MippLGY9aCE9PWQ/MTpyLW9bYV0rMTt0LnNldEVkZ2UobCxoLHt3ZWlnaHQ6cCxtaW5sZW46ZixuZXN0aW5nRWRnZTohMH0pLHQuc2V0RWRnZShkLGMse3dlaWdodDpwLG1pbmxlbjpmLG5lc3RpbmdFZGdlOiEwfSl9KSksdC5wYXJlbnQoYSl8fHQuc2V0RWRnZShlLGwse3dlaWdodDowLG1pbmxlbjpyK29bYV19KX1lbHNlIGEhPT1lJiZ0LnNldEVkZ2UoZSxhLHt3ZWlnaHQ6MCxtaW5sZW46bn0pfWZ1bmN0aW9uIGNDdCh0LGUsbixpLHIsbyl7dmFyIGE9cltlXVtvLTFdLHM9Z1R0LmFkZER1bW15Tm9kZSh0LCJib3JkZXIiLHt3aWR0aDowLGhlaWdodDowLHJhbms6byxib3JkZXJUeXBlOmV9LG4pO3JbZV1bb109cyx0LnNldFBhcmVudChzLGkpLGEmJnQuc2V0RWRnZShhLHMse3dlaWdodDoxfSl9ZnVuY3Rpb24gdUN0KHQpe2FUdC5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24oZSl7aEN0KHQubm9kZShlKSl9KSksYVR0LmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihlKXtoQ3QodC5lZGdlKGUpKX0pKX1mdW5jdGlvbiBoQ3QodCl7dmFyIGU9dC53aWR0aDt0LndpZHRoPXQuaGVpZ2h0LHQuaGVpZ2h0PWV9ZnVuY3Rpb24gZEN0KHQpe3QueT0tdC55fWZ1bmN0aW9uIHBDdCh0KXt2YXIgZT10Lng7dC54PXQueSx0Lnk9ZX12YXIgZkN0PWZ1bmN0aW9uIG1DdCh0LGUpe2Zvcih2YXIgbj0wLGk9MTtpPGUubGVuZ3RoOysraSluKz1nQ3QodCxlW2ktMV0sZVtpXSk7cmV0dXJuIG59O2Z1bmN0aW9uIGdDdCh0LGUsbil7Zm9yKHZhciBpPWFUdC56aXBPYmplY3QobixhVHQubWFwKG4sKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV9KSkpLHI9YVR0LmZsYXR0ZW4oYVR0Lm1hcChlLChmdW5jdGlvbihlKXtyZXR1cm4gYVR0LnNvcnRCeShhVHQubWFwKHQub3V0RWRnZXMoZSksKGZ1bmN0aW9uKGUpe3JldHVybntwb3M6aVtlLnddLHdlaWdodDp0LmVkZ2UoZSkud2VpZ2h0fX0pKSwicG9zIil9KSksITApLG89MTtvPG4ubGVuZ3RoOylvPDw9MTt2YXIgYT0yKm8tMTtvLT0xO3ZhciBzPWFUdC5tYXAobmV3IEFycmF5KGEpLChmdW5jdGlvbigpe3JldHVybiAwfSkpLGw9MDtyZXR1cm4gYVR0LmZvckVhY2goci5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT10LnBvcytvO3NbZV0rPXQud2VpZ2h0O2Zvcih2YXIgbj0wO2U+MDspZSUyJiYobis9c1tlKzFdKSxzW2U9ZS0xPj4xXSs9dC53ZWlnaHQ7bCs9dC53ZWlnaHQqbn0pKSksbH1mdW5jdGlvbiBfQ3QodCxlLG4pe2Zvcih2YXIgaTtlLmxlbmd0aCYmKGk9YVR0Lmxhc3QoZSkpLmk8PW47KWUucG9wKCksdC5wdXNoKGkudnMpLG4rKztyZXR1cm4gbn12YXIgeUN0PWZ1bmN0aW9uIHQoZSxuLGkscil7dmFyIG89ZS5jaGlsZHJlbihuKSxhPWUubm9kZShuKSxzPWE/YS5ib3JkZXJMZWZ0OnZvaWQgMCxsPWE/YS5ib3JkZXJSaWdodDp2b2lkIDAsYz17fTtzJiYobz1hVHQuZmlsdGVyKG8sKGZ1bmN0aW9uKHQpe3JldHVybiB0IT09cyYmdCE9PWx9KSkpO3ZhciB1PShmdW5jdGlvbiBoKHQsZSl7cmV0dXJuIGFUdC5tYXAoZSwoZnVuY3Rpb24oZSl7dmFyIG49dC5pbkVkZ2VzKGUpO2lmKG4ubGVuZ3RoKXt2YXIgaT1hVHQucmVkdWNlKG4sKGZ1bmN0aW9uKGUsbil7dmFyIGk9dC5lZGdlKG4pLHI9dC5ub2RlKG4udik7cmV0dXJue3N1bTplLnN1bStpLndlaWdodCpyLm9yZGVyLHdlaWdodDplLndlaWdodCtpLndlaWdodH19KSx7c3VtOjAsd2VpZ2h0OjB9KTtyZXR1cm57djplLGJhcnljZW50ZXI6aS5zdW0vaS53ZWlnaHQsd2VpZ2h0Omkud2VpZ2h0fX1yZXR1cm57djplfX0pKX0pKGUsbyk7YVR0LmZvckVhY2godSwoZnVuY3Rpb24obil7aWYoZS5jaGlsZHJlbihuLnYpLmxlbmd0aCl7dmFyIG89dChlLG4udixpLHIpO2Nbbi52XT1vLGFUdC5oYXMobywiYmFyeWNlbnRlciIpJiYoZnVuY3Rpb24gYSh0LGUpe2FUdC5pc1VuZGVmaW5lZCh0LmJhcnljZW50ZXIpPyh0LmJhcnljZW50ZXI9ZS5iYXJ5Y2VudGVyLHQud2VpZ2h0PWUud2VpZ2h0KToodC5iYXJ5Y2VudGVyPSh0LmJhcnljZW50ZXIqdC53ZWlnaHQrZS5iYXJ5Y2VudGVyKmUud2VpZ2h0KS8odC53ZWlnaHQrZS53ZWlnaHQpLHQud2VpZ2h0Kz1lLndlaWdodCl9KShuLG8pfX0pKTt2YXIgZD0oZnVuY3Rpb24gcCh0LGUpe3ZhciBuPXt9O3JldHVybiBhVHQuZm9yRWFjaCh0LChmdW5jdGlvbih0LGUpe3ZhciBpPW5bdC52XT17aW5kZWdyZWU6MCxpbjpbXSxvdXQ6W10sdnM6W3Qudl0saTplfTthVHQuaXNVbmRlZmluZWQodC5iYXJ5Y2VudGVyKXx8KGkuYmFyeWNlbnRlcj10LmJhcnljZW50ZXIsaS53ZWlnaHQ9dC53ZWlnaHQpfSkpLGFUdC5mb3JFYWNoKGUuZWRnZXMoKSwoZnVuY3Rpb24odCl7dmFyIGU9blt0LnZdLGk9blt0LnddO2FUdC5pc1VuZGVmaW5lZChlKXx8YVR0LmlzVW5kZWZpbmVkKGkpfHwoaS5pbmRlZ3JlZSsrLGUub3V0LnB1c2goblt0LnddKSl9KSksKGZ1bmN0aW9uIGkodCl7dmFyIGU9W107ZnVuY3Rpb24gbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7ZS5tZXJnZWR8fChhVHQuaXNVbmRlZmluZWQoZS5iYXJ5Y2VudGVyKXx8YVR0LmlzVW5kZWZpbmVkKHQuYmFyeWNlbnRlcil8fGUuYmFyeWNlbnRlcj49dC5iYXJ5Y2VudGVyKSYmKGZ1bmN0aW9uIG4odCxlKXt2YXIgbj0wLGk9MDt0LndlaWdodCYmKG4rPXQuYmFyeWNlbnRlcip0LndlaWdodCxpKz10LndlaWdodCksZS53ZWlnaHQmJihuKz1lLmJhcnljZW50ZXIqZS53ZWlnaHQsaSs9ZS53ZWlnaHQpLHQudnM9ZS52cy5jb25jYXQodC52cyksdC5iYXJ5Y2VudGVyPW4vaSx0LndlaWdodD1pLHQuaT1NYXRoLm1pbihlLmksdC5pKSxlLm1lcmdlZD0hMH0pKHQsZSl9fWZ1bmN0aW9uIGkoZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe24uaW4ucHVzaChlKSwwPT0tLW4uaW5kZWdyZWUmJnQucHVzaChuKX19Zm9yKDt0Lmxlbmd0aDspe3ZhciByPXQucG9wKCk7ZS5wdXNoKHIpLGFUdC5mb3JFYWNoKHIuaW4ucmV2ZXJzZSgpLG4ocikpLGFUdC5mb3JFYWNoKHIub3V0LGkocikpfXJldHVybiBhVHQubWFwKGFUdC5maWx0ZXIoZSwoZnVuY3Rpb24odCl7cmV0dXJuIXQubWVyZ2VkfSkpLChmdW5jdGlvbih0KXtyZXR1cm4gYVR0LnBpY2sodCxbInZzIiwiaSIsImJhcnljZW50ZXIiLCJ3ZWlnaHQiXSl9KSl9KShhVHQuZmlsdGVyKG4sKGZ1bmN0aW9uKHQpe3JldHVybiF0LmluZGVncmVlfSkpKX0pKHUsaSk7IShmdW5jdGlvbiBmKHQsZSl7YVR0LmZvckVhY2godCwoZnVuY3Rpb24odCl7dC52cz1hVHQuZmxhdHRlbih0LnZzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGVbdF0/ZVt0XS52czp0fSkpLCEwKX0pKX0pKGQsYyk7dmFyIG09KGZ1bmN0aW9uIGcodCxlKXt2YXIgbj1nVHQucGFydGl0aW9uKHQsKGZ1bmN0aW9uKHQpe3JldHVybiBhVHQuaGFzKHQsImJhcnljZW50ZXIiKX0pKSxpPW4ubGhzLHI9YVR0LnNvcnRCeShuLnJocywoZnVuY3Rpb24odCl7cmV0dXJuLXQuaX0pKSxvPVtdLGE9MCxzPTAsbD0wO2kuc29ydCgoZnVuY3Rpb24gYyh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXtyZXR1cm4gZS5iYXJ5Y2VudGVyPG4uYmFyeWNlbnRlcj8tMTplLmJhcnljZW50ZXI+bi5iYXJ5Y2VudGVyPzE6dD9uLmktZS5pOmUuaS1uLml9fSkoISFlKSksbD1fQ3QobyxyLGwpLGFUdC5mb3JFYWNoKGksKGZ1bmN0aW9uKHQpe2wrPXQudnMubGVuZ3RoLG8ucHVzaCh0LnZzKSxhKz10LmJhcnljZW50ZXIqdC53ZWlnaHQscys9dC53ZWlnaHQsbD1fQ3QobyxyLGwpfSkpO3ZhciB1PXt2czphVHQuZmxhdHRlbihvLCEwKX07cmV0dXJuIHMmJih1LmJhcnljZW50ZXI9YS9zLHUud2VpZ2h0PXMpLHV9KShkLHIpO2lmKHMmJihtLnZzPWFUdC5mbGF0dGVuKFtzLG0udnMsbF0sITApLGUucHJlZGVjZXNzb3JzKHMpLmxlbmd0aCkpe3ZhciBfPWUubm9kZShlLnByZWRlY2Vzc29ycyhzKVswXSkseT1lLm5vZGUoZS5wcmVkZWNlc3NvcnMobClbMF0pO2FUdC5oYXMobSwiYmFyeWNlbnRlciIpfHwobS5iYXJ5Y2VudGVyPTAsbS53ZWlnaHQ9MCksbS5iYXJ5Y2VudGVyPShtLmJhcnljZW50ZXIqbS53ZWlnaHQrXy5vcmRlcit5Lm9yZGVyKS8obS53ZWlnaHQrMiksbS53ZWlnaHQrPTJ9cmV0dXJuIG19LHZDdD1pRXQuR3JhcGgsYkN0PWlFdC5HcmFwaDtmdW5jdGlvbiB4Q3QodCxlLG4pe3JldHVybiBhVHQubWFwKGUsKGZ1bmN0aW9uKGUpe3JldHVybihmdW5jdGlvbiBpKHQsZSxuKXt2YXIgaT0oZnVuY3Rpb24gcih0KXtmb3IodmFyIGU7dC5oYXNOb2RlKGU9YVR0LnVuaXF1ZUlkKCJfcm9vdCIpKTspO3JldHVybiBlfSkodCksbz1uZXcgdkN0KHtjb21wb3VuZDohMH0pLnNldEdyYXBoKHtyb290Oml9KS5zZXREZWZhdWx0Tm9kZUxhYmVsKChmdW5jdGlvbihlKXtyZXR1cm4gdC5ub2RlKGUpfSkpO3JldHVybiBhVHQuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKHIpe3ZhciBhPXQubm9kZShyKSxzPXQucGFyZW50KHIpOyhhLnJhbms9PT1lfHxhLm1pblJhbms8PWUmJmU8PWEubWF4UmFuaykmJihvLnNldE5vZGUociksby5zZXRQYXJlbnQocixzfHxpKSxhVHQuZm9yRWFjaCh0W25dKHIpLChmdW5jdGlvbihlKXt2YXIgbj1lLnY9PT1yP2UudzplLnYsaT1vLmVkZ2UobixyKSxhPWFUdC5pc1VuZGVmaW5lZChpKT8wOmkud2VpZ2h0O28uc2V0RWRnZShuLHIse3dlaWdodDp0LmVkZ2UoZSkud2VpZ2h0K2F9KX0pKSxhVHQuaGFzKGEsIm1pblJhbmsiKSYmby5zZXROb2RlKHIse2JvcmRlckxlZnQ6YS5ib3JkZXJMZWZ0W2VdLGJvcmRlclJpZ2h0OmEuYm9yZGVyUmlnaHRbZV19KSl9KSksb30pKHQsZSxuKX0pKX1mdW5jdGlvbiB3Q3QodCxlKXt2YXIgbj1uZXcgYkN0O2FUdC5mb3JFYWNoKHQsKGZ1bmN0aW9uKHQpe3ZhciBpPXQuZ3JhcGgoKS5yb290LHI9eUN0KHQsaSxuLGUpO2FUdC5mb3JFYWNoKHIudnMsKGZ1bmN0aW9uKGUsbil7dC5ub2RlKGUpLm9yZGVyPW59KSksKGZ1bmN0aW9uIG8odCxlLG4pe3ZhciBpLHI9e307YVR0LmZvckVhY2gobiwoZnVuY3Rpb24obil7Zm9yKHZhciBvLGEscz10LnBhcmVudChuKTtzOyl7aWYoKG89dC5wYXJlbnQocykpPyhhPXJbb10scltvXT1zKTooYT1pLGk9cyksYSYmYSE9PXMpcmV0dXJuIHZvaWQgZS5zZXRFZGdlKGEscyk7cz1vfX0pKX0pKHQsbixyLnZzKX0pKX1mdW5jdGlvbiBTQ3QodCxlKXthVHQuZm9yRWFjaChlLChmdW5jdGlvbihlKXthVHQuZm9yRWFjaChlLChmdW5jdGlvbihlLG4pe3Qubm9kZShlKS5vcmRlcj1ufSkpfSkpfXZhciBNQ3Q9aUV0LkdyYXBoO2Z1bmN0aW9uIEVDdCh0LGUsbil7aWYoZT5uKXt2YXIgaT1lO2U9bixuPWl9dmFyIHI9dFtlXTtyfHwodFtlXT1yPXt9KSxyW25dPSEwfWZ1bmN0aW9uIFRDdCh0LGUsbil7aWYoZT5uKXt2YXIgaT1lO2U9bixuPWl9cmV0dXJuIGFUdC5oYXModFtlXSxuKX12YXIgQ0N0PWdUdC5ub3JtYWxpemVSYW5rcyxBQ3Q9Z1R0LnJlbW92ZUVtcHR5UmFua3Msa0N0PWdUdCxMQ3Q9aUV0LkdyYXBoLFBDdD1bIm5vZGVzZXAiLCJlZGdlc2VwIiwicmFua3NlcCIsIm1hcmdpbngiLCJtYXJnaW55Il0sTkN0PXtyYW5rc2VwOjUwLGVkZ2VzZXA6MjAsbm9kZXNlcDo1MCxyYW5rZGlyOiJ0YiJ9LElDdD1bImFjeWNsaWNlciIsInJhbmtlciIsInJhbmtkaXIiLCJhbGlnbiJdLE9DdD1bIndpZHRoIiwiaGVpZ2h0Il0sUkN0PXt3aWR0aDowLGhlaWdodDowfSx6Q3Q9WyJtaW5sZW4iLCJ3ZWlnaHQiLCJ3aWR0aCIsImhlaWdodCIsImxhYmVsb2Zmc2V0Il0sREN0PXttaW5sZW46MSx3ZWlnaHQ6MSx3aWR0aDowLGhlaWdodDowLGxhYmVsb2Zmc2V0OjEwLGxhYmVscG9zOiJyIn0sQkN0PVsibGFiZWxwb3MiXTtmdW5jdGlvbiBIQ3QodCxlKXtyZXR1cm4gYVR0Lm1hcFZhbHVlcyhhVHQucGljayh0LGUpLE51bWJlcil9ZnVuY3Rpb24gRkN0KHQpe3ZhciBlPXt9O3JldHVybiBhVHQuZm9yRWFjaCh0LChmdW5jdGlvbih0LG4pe2Vbbi50b0xvd2VyQ2FzZSgpXT10fSkpLGV9dmFyIFZDdCxVQ3QsakN0PWlFdC5HcmFwaCxHQ3Q9e2dyYXBobGliOmlFdCxsYXlvdXQ6ZnVuY3Rpb24gV0N0KHQsZSl7dmFyIG49ZSYmZS5kZWJ1Z1RpbWluZz9rQ3QudGltZTprQ3Qubm90aW1lO24oImxheW91dCIsKGZ1bmN0aW9uKCl7dmFyIGU9bigiICBidWlsZExheW91dEdyYXBoIiwoZnVuY3Rpb24oKXtyZXR1cm4oZnVuY3Rpb24gZSh0KXt2YXIgZT1uZXcgTEN0KHttdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwfSksbj1GQ3QodC5ncmFwaCgpKTtyZXR1cm4gZS5zZXRHcmFwaChhVHQubWVyZ2Uoe30sTkN0LEhDdChuLFBDdCksYVR0LnBpY2sobixJQ3QpKSksYVR0LmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihuKXt2YXIgaT1GQ3QodC5ub2RlKG4pKTtlLnNldE5vZGUobixhVHQuZGVmYXVsdHMoSEN0KGksT0N0KSxSQ3QpKSxlLnNldFBhcmVudChuLHQucGFyZW50KG4pKX0pKSxhVHQuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKG4pe3ZhciBpPUZDdCh0LmVkZ2UobikpO2Uuc2V0RWRnZShuLGFUdC5tZXJnZSh7fSxEQ3QsSEN0KGksekN0KSxhVHQucGljayhpLEJDdCkpKX0pKSxlfSkodCl9KSk7bigiICBydW5MYXlvdXQiLChmdW5jdGlvbigpeyEoZnVuY3Rpb24gdChlLG4pe24oIiAgICBtYWtlU3BhY2VGb3JFZGdlTGFiZWxzIiwoZnVuY3Rpb24oKXshKGZ1bmN0aW9uIHQoZSl7dmFyIG49ZS5ncmFwaCgpO24ucmFua3NlcC89MixhVHQuZm9yRWFjaChlLmVkZ2VzKCksKGZ1bmN0aW9uKHQpe3ZhciBpPWUuZWRnZSh0KTtpLm1pbmxlbio9MiwiYyIhPT1pLmxhYmVscG9zLnRvTG93ZXJDYXNlKCkmJigiVEIiPT09bi5yYW5rZGlyfHwiQlQiPT09bi5yYW5rZGlyP2kud2lkdGgrPWkubGFiZWxvZmZzZXQ6aS5oZWlnaHQrPWkubGFiZWxvZmZzZXQpfSkpfSkoZSl9KSksbigiICAgIHJlbW92ZVNlbGZFZGdlcyIsKGZ1bmN0aW9uKCl7IShmdW5jdGlvbiB0KGUpe2FUdC5mb3JFYWNoKGUuZWRnZXMoKSwoZnVuY3Rpb24odCl7aWYodC52PT09dC53KXt2YXIgbj1lLm5vZGUodC52KTtuLnNlbGZFZGdlc3x8KG4uc2VsZkVkZ2VzPVtdKSxuLnNlbGZFZGdlcy5wdXNoKHtlOnQsbGFiZWw6ZS5lZGdlKHQpfSksZS5yZW1vdmVFZGdlKHQpfX0pKX0pKGUpfSkpLG4oIiAgICBhY3ljbGljIiwoZnVuY3Rpb24oKXshKGZ1bmN0aW9uIHQoZSl7dmFyIG49ImdyZWVkeSI9PT1lLmdyYXBoKCkuYWN5Y2xpY2VyPyhmdW5jdGlvbiByKHQsZSl7aWYodC5ub2RlQ291bnQoKTw9MSlyZXR1cm5bXTt2YXIgbj0oZnVuY3Rpb24gaSh0LGUpe3ZhciBuPW5ldyBoVHQsaT0wLHI9MDthVHQuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKHQpe24uc2V0Tm9kZSh0LHt2OnQsaW46MCxvdXQ6MH0pfSkpLGFUdC5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24odCl7dmFyIG89bi5lZGdlKHQudix0LncpfHwwLGE9ZSh0KTtuLnNldEVkZ2UodC52LHQudyxvK2EpLHI9TWF0aC5tYXgocixuLm5vZGUodC52KS5vdXQrPWEpLGk9TWF0aC5tYXgoaSxuLm5vZGUodC53KS5pbis9YSl9KSk7dmFyIG89YVR0LnJhbmdlKHIraSszKS5tYXAoKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBzVHR9KSksYT1pKzE7cmV0dXJuIGFUdC5mb3JFYWNoKG4ubm9kZXMoKSwoZnVuY3Rpb24odCl7ZlR0KG8sYSxuLm5vZGUodCkpfSkpLHtncmFwaDpuLGJ1Y2tldHM6byx6ZXJvSWR4OmF9fSkodCxlfHxkVHQpLHI9KGZ1bmN0aW9uIG8odCxlLG4pe2Zvcih2YXIgaSxyPVtdLG89ZVtlLmxlbmd0aC0xXSxhPWVbMF07dC5ub2RlQ291bnQoKTspe2Zvcig7aT1hLmRlcXVldWUoKTspcFR0KHQsZSxuLGkpO2Zvcig7aT1vLmRlcXVldWUoKTspcFR0KHQsZSxuLGkpO2lmKHQubm9kZUNvdW50KCkpZm9yKHZhciBzPWUubGVuZ3RoLTI7cz4wOy0tcylpZihpPWVbc10uZGVxdWV1ZSgpKXtyPXIuY29uY2F0KHBUdCh0LGUsbixpLCEwKSk7YnJlYWt9fXJldHVybiByfSkobi5ncmFwaCxuLmJ1Y2tldHMsbi56ZXJvSWR4KTtyZXR1cm4gYVR0LmZsYXR0ZW4oYVR0Lm1hcChyLChmdW5jdGlvbihlKXtyZXR1cm4gdC5vdXRFZGdlcyhlLnYsZS53KX0pKSwhMCl9KShlLChmdW5jdGlvbiBpKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC5lZGdlKGUpLndlaWdodH19KShlKSk6KGZ1bmN0aW9uIG8odCl7dmFyIGU9W10sbj17fSxpPXt9O3JldHVybiBhVHQuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uIHIobyl7YVR0LmhhcyhpLG8pfHwoaVtvXT0hMCxuW29dPSEwLGFUdC5mb3JFYWNoKHQub3V0RWRnZXMobyksKGZ1bmN0aW9uKHQpe2FUdC5oYXMobix0LncpP2UucHVzaCh0KTpyKHQudyl9KSksZGVsZXRlIG5bb10pfSkpLGV9KShlKTthVHQuZm9yRWFjaChuLChmdW5jdGlvbih0KXt2YXIgbj1lLmVkZ2UodCk7ZS5yZW1vdmVFZGdlKHQpLG4uZm9yd2FyZE5hbWU9dC5uYW1lLG4ucmV2ZXJzZWQ9ITAsZS5zZXRFZGdlKHQudyx0LnYsbixhVHQudW5pcXVlSWQoInJldiIpKX0pKX0pKGUpfSkpLG4oIiAgICBuZXN0aW5nR3JhcGgucnVuIiwoZnVuY3Rpb24oKXthQ3QoZSl9KSksbigiICAgIHJhbmsiLChmdW5jdGlvbigpeyEoZnVuY3Rpb24gdChlKXtzd2l0Y2goZS5ncmFwaCgpLnJhbmtlcil7Y2FzZSJuZXR3b3JrLXNpbXBsZXgiOm9DdChlKTticmVhaztjYXNlInRpZ2h0LXRyZWUiOiEoZnVuY3Rpb24gbih0KXtpQ3QodCksRFR0KHQpfSkoZSk7YnJlYWs7Y2FzZSJsb25nZXN0LXBhdGgiOnJDdChlKTticmVhaztkZWZhdWx0Om9DdChlKX19KShrQ3QuYXNOb25Db21wb3VuZEdyYXBoKGUpKX0pKSxuKCIgICAgaW5qZWN0RWRnZUxhYmVsUHJveGllcyIsKGZ1bmN0aW9uKCl7IShmdW5jdGlvbiB0KGUpe2FUdC5mb3JFYWNoKGUuZWRnZXMoKSwoZnVuY3Rpb24odCl7dmFyIG49ZS5lZGdlKHQpO2lmKG4ud2lkdGgmJm4uaGVpZ2h0KXt2YXIgaT1lLm5vZGUodC52KSxyPWUubm9kZSh0LncpO2tDdC5hZGREdW1teU5vZGUoZSwiZWRnZS1wcm94eSIse3Jhbms6KHIucmFuay1pLnJhbmspLzIraS5yYW5rLGU6dH0sIl9lcCIpfX0pKX0pKGUpfSkpLG4oIiAgICByZW1vdmVFbXB0eVJhbmtzIiwoZnVuY3Rpb24oKXtBQ3QoZSl9KSksbigiICAgIG5lc3RpbmdHcmFwaC5jbGVhbnVwIiwoZnVuY3Rpb24oKXshKGZ1bmN0aW9uIHQoZSl7dmFyIG49ZS5ncmFwaCgpO2UucmVtb3ZlTm9kZShuLm5lc3RpbmdSb290KSxkZWxldGUgbi5uZXN0aW5nUm9vdCxhVHQuZm9yRWFjaChlLmVkZ2VzKCksKGZ1bmN0aW9uKHQpe2UuZWRnZSh0KS5uZXN0aW5nRWRnZSYmZS5yZW1vdmVFZGdlKHQpfSkpfSkoZSl9KSksbigiICAgIG5vcm1hbGl6ZVJhbmtzIiwoZnVuY3Rpb24oKXtDQ3QoZSl9KSksbigiICAgIGFzc2lnblJhbmtNaW5NYXgiLChmdW5jdGlvbigpeyEoZnVuY3Rpb24gdChlKXt2YXIgbj0wO2FUdC5mb3JFYWNoKGUubm9kZXMoKSwoZnVuY3Rpb24odCl7dmFyIGk9ZS5ub2RlKHQpO2kuYm9yZGVyVG9wJiYoaS5taW5SYW5rPWUubm9kZShpLmJvcmRlclRvcCkucmFuayxpLm1heFJhbms9ZS5ub2RlKGkuYm9yZGVyQm90dG9tKS5yYW5rLG49YVR0Lm1heChuLGkubWF4UmFuaykpfSkpLGUuZ3JhcGgoKS5tYXhSYW5rPW59KShlKX0pKSxuKCIgICAgcmVtb3ZlRWRnZUxhYmVsUHJveGllcyIsKGZ1bmN0aW9uKCl7IShmdW5jdGlvbiB0KGUpe2FUdC5mb3JFYWNoKGUubm9kZXMoKSwoZnVuY3Rpb24odCl7dmFyIG49ZS5ub2RlKHQpOyJlZGdlLXByb3h5Ij09PW4uZHVtbXkmJihlLmVkZ2Uobi5lKS5sYWJlbFJhbms9bi5yYW5rLGUucmVtb3ZlTm9kZSh0KSl9KSl9KShlKX0pKSxuKCIgICAgbm9ybWFsaXplLnJ1biIsKGZ1bmN0aW9uKCl7IShmdW5jdGlvbiB0KGUpe2UuZ3JhcGgoKS5kdW1teUNoYWlucz1bXSxhVHQuZm9yRWFjaChlLmVkZ2VzKCksKGZ1bmN0aW9uKHQpeyEoZnVuY3Rpb24gbih0LGUpe3ZhciBuLGkscixvPWUudixhPXQubm9kZShvKS5yYW5rLHM9ZS53LGw9dC5ub2RlKHMpLnJhbmssYz1lLm5hbWUsdT10LmVkZ2UoZSksaD11LmxhYmVsUmFuaztpZihsIT09YSsxKXtmb3IodC5yZW1vdmVFZGdlKGUpLHI9MCwrK2E7YTxsOysrciwrK2EpdS5wb2ludHM9W10sbj1nVHQuYWRkRHVtbXlOb2RlKHQsImVkZ2UiLGk9e3dpZHRoOjAsaGVpZ2h0OjAsZWRnZUxhYmVsOnUsZWRnZU9iajplLHJhbms6YX0sIl9kIiksYT09PWgmJihpLndpZHRoPXUud2lkdGgsaS5oZWlnaHQ9dS5oZWlnaHQsaS5kdW1teT0iZWRnZS1sYWJlbCIsaS5sYWJlbHBvcz11LmxhYmVscG9zKSx0LnNldEVkZ2UobyxuLHt3ZWlnaHQ6dS53ZWlnaHR9LGMpLDA9PT1yJiZ0LmdyYXBoKCkuZHVtbXlDaGFpbnMucHVzaChuKSxvPW47dC5zZXRFZGdlKG8scyx7d2VpZ2h0OnUud2VpZ2h0fSxjKX19KShlLHQpfSkpfSkoZSl9KSksbigiICAgIHBhcmVudER1bW15Q2hhaW5zIiwoZnVuY3Rpb24oKXshKGZ1bmN0aW9uIHQoZSl7dmFyIG49KGZ1bmN0aW9uIGkodCl7dmFyIGU9e30sbj0wO3JldHVybiBhVHQuZm9yRWFjaCh0LmNoaWxkcmVuKCksKGZ1bmN0aW9uIGkocil7dmFyIG89bjthVHQuZm9yRWFjaCh0LmNoaWxkcmVuKHIpLGkpLGVbcl09e2xvdzpvLGxpbTpuKyt9fSkpLGV9KShlKTthVHQuZm9yRWFjaChlLmdyYXBoKCkuZHVtbXlDaGFpbnMsKGZ1bmN0aW9uKHQpe2Zvcih2YXIgaT1lLm5vZGUodCkscj1pLmVkZ2VPYmosbz0oZnVuY3Rpb24gYSh0LGUsbixpKXt2YXIgcixvLGE9W10scz1bXSxsPU1hdGgubWluKGVbbl0ubG93LGVbaV0ubG93KSxjPU1hdGgubWF4KGVbbl0ubGltLGVbaV0ubGltKTtyPW47ZG97cj10LnBhcmVudChyKSxhLnB1c2gocil9d2hpbGUociYmKGVbcl0ubG93Pmx8fGM+ZVtyXS5saW0pKTtmb3Iobz1yLHI9aTsocj10LnBhcmVudChyKSkhPT1vOylzLnB1c2gocik7cmV0dXJue3BhdGg6YS5jb25jYXQocy5yZXZlcnNlKCkpLGxjYTpvfX0pKGUsbixyLnYsci53KSxzPW8ucGF0aCxsPW8ubGNhLGM9MCx1PXNbY10saD0hMDt0IT09ci53Oyl7aWYoaT1lLm5vZGUodCksaCl7Zm9yKDsodT1zW2NdKSE9PWwmJmUubm9kZSh1KS5tYXhSYW5rPGkucmFuazspYysrO3U9PT1sJiYoaD0hMSl9aWYoIWgpe2Zvcig7YzxzLmxlbmd0aC0xJiZlLm5vZGUodT1zW2MrMV0pLm1pblJhbms8PWkucmFuazspYysrO3U9c1tjXX1lLnNldFBhcmVudCh0LHUpLHQ9ZS5zdWNjZXNzb3JzKHQpWzBdfX0pKX0pKGUpfSkpLG4oIiAgICBhZGRCb3JkZXJTZWdtZW50cyIsKGZ1bmN0aW9uKCl7IShmdW5jdGlvbiB0KGUpe2FUdC5mb3JFYWNoKGUuY2hpbGRyZW4oKSwoZnVuY3Rpb24gdChuKXt2YXIgaT1lLmNoaWxkcmVuKG4pLHI9ZS5ub2RlKG4pO2lmKGkubGVuZ3RoJiZhVHQuZm9yRWFjaChpLHQpLGFUdC5oYXMociwibWluUmFuayIpKXtyLmJvcmRlckxlZnQ9W10sci5ib3JkZXJSaWdodD1bXTtmb3IodmFyIG89ci5taW5SYW5rLGE9ci5tYXhSYW5rKzE7bzxhOysrbyljQ3QoZSwiYm9yZGVyTGVmdCIsIl9ibCIsbixyLG8pLGNDdChlLCJib3JkZXJSaWdodCIsIl9iciIsbixyLG8pfX0pKX0pKGUpfSkpLG4oIiAgICBvcmRlciIsKGZ1bmN0aW9uKCl7IShmdW5jdGlvbiB0KGUpe3ZhciBuPWdUdC5tYXhSYW5rKGUpLGk9eEN0KGUsYVR0LnJhbmdlKDEsbisxKSwiaW5FZGdlcyIpLHI9eEN0KGUsYVR0LnJhbmdlKG4tMSwtMSwtMSksIm91dEVkZ2VzIiksbz0oZnVuY3Rpb24gYSh0KXt2YXIgZT17fSxuPWFUdC5maWx0ZXIodC5ub2RlcygpLChmdW5jdGlvbihlKXtyZXR1cm4hdC5jaGlsZHJlbihlKS5sZW5ndGh9KSksaT1hVHQubWF4KGFUdC5tYXAobiwoZnVuY3Rpb24oZSl7cmV0dXJuIHQubm9kZShlKS5yYW5rfSkpKSxyPWFUdC5tYXAoYVR0LnJhbmdlKGkrMSksKGZ1bmN0aW9uKCl7cmV0dXJuW119KSksbz1hVHQuc29ydEJ5KG4sKGZ1bmN0aW9uKGUpe3JldHVybiB0Lm5vZGUoZSkucmFua30pKTtyZXR1cm4gYVR0LmZvckVhY2gobywoZnVuY3Rpb24gbihpKXtpZighYVR0LmhhcyhlLGkpKXtlW2ldPSEwO3ZhciBvPXQubm9kZShpKTtyW28ucmFua10ucHVzaChpKSxhVHQuZm9yRWFjaCh0LnN1Y2Nlc3NvcnMoaSksbil9fSkpLHJ9KShlKTtTQ3QoZSxvKTtmb3IodmFyIHMsbD1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksYz0wLHU9MDt1PDQ7KytjLCsrdSl7d0N0KGMlMj9pOnIsYyU0Pj0yKSxvPWdUdC5idWlsZExheWVyTWF0cml4KGUpO3ZhciBoPWZDdChlLG8pO2g8bCYmKHU9MCxzPWFUdC5jbG9uZURlZXAobyksbD1oKX1TQ3QoZSxzKX0pKGUpfSkpLG4oIiAgICBpbnNlcnRTZWxmRWRnZXMiLChmdW5jdGlvbigpeyEoZnVuY3Rpb24gdChlKXt2YXIgbj1rQ3QuYnVpbGRMYXllck1hdHJpeChlKTthVHQuZm9yRWFjaChuLChmdW5jdGlvbih0KXt2YXIgbj0wO2FUdC5mb3JFYWNoKHQsKGZ1bmN0aW9uKHQsaSl7dmFyIHI9ZS5ub2RlKHQpO3Iub3JkZXI9aStuLGFUdC5mb3JFYWNoKHIuc2VsZkVkZ2VzLChmdW5jdGlvbih0KXtrQ3QuYWRkRHVtbXlOb2RlKGUsInNlbGZlZGdlIix7d2lkdGg6dC5sYWJlbC53aWR0aCxoZWlnaHQ6dC5sYWJlbC5oZWlnaHQscmFuazpyLnJhbmssb3JkZXI6aSsgKytuLGU6dC5lLGxhYmVsOnQubGFiZWx9LCJfc2UiKX0pKSxkZWxldGUgci5zZWxmRWRnZXN9KSl9KSl9KShlKX0pKSxuKCIgICAgYWRqdXN0Q29vcmRpbmF0ZVN5c3RlbSIsKGZ1bmN0aW9uKCl7IShmdW5jdGlvbiB0KGUpe3ZhciBuPWUuZ3JhcGgoKS5yYW5rZGlyLnRvTG93ZXJDYXNlKCk7ImxyIiE9PW4mJiJybCIhPT1ufHx1Q3QoZSl9KShlKX0pKSxuKCIgICAgcG9zaXRpb24iLChmdW5jdGlvbigpeyEoZnVuY3Rpb24gdChlKXsoZnVuY3Rpb24gbih0KXt2YXIgZT1nVHQuYnVpbGRMYXllck1hdHJpeCh0KSxuPXQuZ3JhcGgoKS5yYW5rc2VwLGk9MDthVHQuZm9yRWFjaChlLChmdW5jdGlvbihlKXt2YXIgcj1hVHQubWF4KGFUdC5tYXAoZSwoZnVuY3Rpb24oZSl7cmV0dXJuIHQubm9kZShlKS5oZWlnaHR9KSkpO2FUdC5mb3JFYWNoKGUsKGZ1bmN0aW9uKGUpe3Qubm9kZShlKS55PWkrci8yfSkpLGkrPXIrbn0pKX0pKGU9Z1R0LmFzTm9uQ29tcG91bmRHcmFwaChlKSksYVR0LmZvckVhY2goKGZ1bmN0aW9uIGkodCl7dmFyIGUsbj1nVHQuYnVpbGRMYXllck1hdHJpeCh0KSxpPWFUdC5tZXJnZSgoZnVuY3Rpb24gcih0LGUpe3ZhciBuPXt9O3JldHVybiBhVHQucmVkdWNlKGUsKGZ1bmN0aW9uIGkoZSxyKXt2YXIgbz0wLGE9MCxzPWUubGVuZ3RoLGw9YVR0Lmxhc3Qocik7cmV0dXJuIGFUdC5mb3JFYWNoKHIsKGZ1bmN0aW9uKGUsaSl7dmFyIGM9KGZ1bmN0aW9uIHUodCxlKXtpZih0Lm5vZGUoZSkuZHVtbXkpcmV0dXJuIGFUdC5maW5kKHQucHJlZGVjZXNzb3JzKGUpLChmdW5jdGlvbihlKXtyZXR1cm4gdC5ub2RlKGUpLmR1bW15fSkpfSkodCxlKSxoPWM/dC5ub2RlKGMpLm9yZGVyOnM7KGN8fGU9PT1sKSYmKGFUdC5mb3JFYWNoKHIuc2xpY2UoYSxpKzEpLChmdW5jdGlvbihlKXthVHQuZm9yRWFjaCh0LnByZWRlY2Vzc29ycyhlKSwoZnVuY3Rpb24oaSl7dmFyIHI9dC5ub2RlKGkpLGE9ci5vcmRlcjshKGE8b3x8aDxhKXx8ci5kdW1teSYmdC5ub2RlKGUpLmR1bW15fHxFQ3QobixpLGUpfSkpfSkpLGE9aSsxLG89aCl9KSkscn0pKSxufSkodCxuKSwoZnVuY3Rpb24gbyh0LGUpe3ZhciBuPXt9O2Z1bmN0aW9uIGkoZSxpLHIsbyxhKXt2YXIgczthVHQuZm9yRWFjaChhVHQucmFuZ2UoaSxyKSwoZnVuY3Rpb24oaSl7dC5ub2RlKHM9ZVtpXSkuZHVtbXkmJmFUdC5mb3JFYWNoKHQucHJlZGVjZXNzb3JzKHMpLChmdW5jdGlvbihlKXt2YXIgaT10Lm5vZGUoZSk7aS5kdW1teSYmKGkub3JkZXI8b3x8aS5vcmRlcj5hKSYmRUN0KG4sZSxzKX0pKX0pKX1yZXR1cm4gYVR0LnJlZHVjZShlLChmdW5jdGlvbiByKGUsbil7dmFyIHIsbz0tMSxhPTA7cmV0dXJuIGFUdC5mb3JFYWNoKG4sKGZ1bmN0aW9uKHMsbCl7aWYoImJvcmRlciI9PT10Lm5vZGUocykuZHVtbXkpe3ZhciBjPXQucHJlZGVjZXNzb3JzKHMpO2MubGVuZ3RoJiYocj10Lm5vZGUoY1swXSkub3JkZXIsaShuLGEsbCxvLHIpLGE9bCxvPXIpfWkobixhLG4ubGVuZ3RoLHIsZS5sZW5ndGgpfSkpLG59KSksbn0pKHQsbikpLGE9e307YVR0LmZvckVhY2goWyJ1IiwiZCJdLChmdW5jdGlvbihyKXtlPSJ1Ij09PXI/bjphVHQudmFsdWVzKG4pLnJldmVyc2UoKSxhVHQuZm9yRWFjaChbImwiLCJyIl0sKGZ1bmN0aW9uKG4peyJyIj09PW4mJihlPWFUdC5tYXAoZSwoZnVuY3Rpb24odCl7cmV0dXJuIGFUdC52YWx1ZXModCkucmV2ZXJzZSgpfSkpKTt2YXIgbz0oInUiPT09cj90LnByZWRlY2Vzc29yczp0LnN1Y2Nlc3NvcnMpLmJpbmQodCkscz0oZnVuY3Rpb24gbCh0LGUsbixpKXt2YXIgcj17fSxvPXt9LGE9e307cmV0dXJuIGFUdC5mb3JFYWNoKGUsKGZ1bmN0aW9uKHQpe2FUdC5mb3JFYWNoKHQsKGZ1bmN0aW9uKHQsZSl7clt0XT10LG9bdF09dCxhW3RdPWV9KSl9KSksYVR0LmZvckVhY2goZSwoZnVuY3Rpb24odCl7dmFyIGU9LTE7YVR0LmZvckVhY2godCwoZnVuY3Rpb24odCl7dmFyIHM9aSh0KTtpZihzLmxlbmd0aClmb3IodmFyIGw9KChzPWFUdC5zb3J0QnkocywoZnVuY3Rpb24odCl7cmV0dXJuIGFbdF19KSkpLmxlbmd0aC0xKS8yLGM9TWF0aC5mbG9vcihsKSx1PU1hdGguY2VpbChsKTtjPD11OysrYyl7dmFyIGg9c1tjXTtvW3RdPT09dCYmZTxhW2hdJiYhVEN0KG4sdCxoKSYmKG9baF09dCxvW3RdPXJbdF09cltoXSxlPWFbaF0pfX0pKX0pKSx7cm9vdDpyLGFsaWduOm99fSkoMCxlLGksbyksYz0oZnVuY3Rpb24gdSh0LGUsbixpLHIpe3ZhciBvPXt9LGE9KGZ1bmN0aW9uIHModCxlLG4saSl7dmFyIHI9bmV3IE1DdCxvPXQuZ3JhcGgoKSxhPShmdW5jdGlvbiBzKHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24oaSxyLG8pe3ZhciBhLHM9aS5ub2RlKHIpLGw9aS5ub2RlKG8pLGM9MDtpZihjKz1zLndpZHRoLzIsYVR0LmhhcyhzLCJsYWJlbHBvcyIpKXN3aXRjaChzLmxhYmVscG9zLnRvTG93ZXJDYXNlKCkpe2Nhc2UibCI6YT0tcy53aWR0aC8yO2JyZWFrO2Nhc2UiciI6YT1zLndpZHRoLzJ9aWYoYSYmKGMrPW4/YTotYSksYT0wLGMrPShzLmR1bW15P2U6dCkvMixjKz0obC5kdW1teT9lOnQpLzIsYys9bC53aWR0aC8yLGFUdC5oYXMobCwibGFiZWxwb3MiKSlzd2l0Y2gobC5sYWJlbHBvcy50b0xvd2VyQ2FzZSgpKXtjYXNlImwiOmE9bC53aWR0aC8yO2JyZWFrO2Nhc2UiciI6YT0tbC53aWR0aC8yfXJldHVybiBhJiYoYys9bj9hOi1hKSxhPTAsY319KShvLm5vZGVzZXAsby5lZGdlc2VwLGkpO3JldHVybiBhVHQuZm9yRWFjaChlLChmdW5jdGlvbihlKXt2YXIgaTthVHQuZm9yRWFjaChlLChmdW5jdGlvbihlKXt2YXIgbz1uW2VdO2lmKHIuc2V0Tm9kZShvKSxpKXt2YXIgcz1uW2ldLGw9ci5lZGdlKHMsbyk7ci5zZXRFZGdlKHMsbyxNYXRoLm1heChhKHQsZSxpKSxsfHwwKSl9aT1lfSkpfSkpLHJ9KSh0LGUsbixyKSxsPXI/ImJvcmRlckxlZnQiOiJib3JkZXJSaWdodCI7ZnVuY3Rpb24gYyh0LGUpe2Zvcih2YXIgbj1hLm5vZGVzKCksaT1uLnBvcCgpLHI9e307aTspcltpXT90KGkpOihyW2ldPSEwLG4ucHVzaChpKSxuPW4uY29uY2F0KGUoaSkpKSxpPW4ucG9wKCl9cmV0dXJuIGMoKGZ1bmN0aW9uIHUodCl7b1t0XT1hLmluRWRnZXModCkucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLm1heCh0LG9bZS52XSthLmVkZ2UoZSkpfSksMCl9KSxhLnByZWRlY2Vzc29ycy5iaW5kKGEpKSxjKChmdW5jdGlvbiBoKGUpe3ZhciBuPWEub3V0RWRnZXMoZSkucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLm1pbih0LG9bZS53XS1hLmVkZ2UoZSkpfSksTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSxpPXQubm9kZShlKTtuIT09TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZJiZpLmJvcmRlclR5cGUhPT1sJiYob1tlXT1NYXRoLm1heChvW2VdLG4pKX0pLGEuc3VjY2Vzc29ycy5iaW5kKGEpKSxhVHQuZm9yRWFjaChpLChmdW5jdGlvbih0KXtvW3RdPW9bblt0XV19KSksb30pKHQsZSxzLnJvb3Qscy5hbGlnbiwiciI9PT1uKTsiciI9PT1uJiYoYz1hVHQubWFwVmFsdWVzKGMsKGZ1bmN0aW9uKHQpe3JldHVybi10fSkpKSxhW3Irbl09Y30pKX0pKTt2YXIgcz0oZnVuY3Rpb24gbCh0LGUpe3JldHVybiBhVHQubWluQnkoYVR0LnZhbHVlcyhlKSwoZnVuY3Rpb24oZSl7dmFyIG49TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLGk9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO3JldHVybiBhVHQuZm9ySW4oZSwoZnVuY3Rpb24oZSxyKXt2YXIgbz0oZnVuY3Rpb24gYSh0LGUpe3JldHVybiB0Lm5vZGUoZSkud2lkdGh9KSh0LHIpLzI7bj1NYXRoLm1heChlK28sbiksaT1NYXRoLm1pbihlLW8saSl9KSksbi1pfSkpfSkodCxhKTtyZXR1cm4oZnVuY3Rpb24gYyh0LGUpe3ZhciBuPWFUdC52YWx1ZXMoZSksaT1hVHQubWluKG4pLHI9YVR0Lm1heChuKTthVHQuZm9yRWFjaChbInUiLCJkIl0sKGZ1bmN0aW9uKG4pe2FUdC5mb3JFYWNoKFsibCIsInIiXSwoZnVuY3Rpb24obyl7dmFyIGEscz1uK28sbD10W3NdO2lmKGwhPT1lKXt2YXIgYz1hVHQudmFsdWVzKGwpOyhhPSJsIj09PW8/aS1hVHQubWluKGMpOnItYVR0Lm1heChjKSkmJih0W3NdPWFUdC5tYXBWYWx1ZXMobCwoZnVuY3Rpb24odCl7cmV0dXJuIHQrYX0pKSl9fSkpfSkpfSkoYSxzKSwoZnVuY3Rpb24gdSh0LGUpe3JldHVybiBhVHQubWFwVmFsdWVzKHQudWwsKGZ1bmN0aW9uKG4saSl7aWYoZSlyZXR1cm4gdFtlLnRvTG93ZXJDYXNlKCldW2ldO3ZhciByPWFUdC5zb3J0QnkoYVR0Lm1hcCh0LGkpKTtyZXR1cm4oclsxXStyWzJdKS8yfSkpfSkoYSx0LmdyYXBoKCkuYWxpZ24pfSkoZSksKGZ1bmN0aW9uKHQsbil7ZS5ub2RlKG4pLng9dH0pKX0pKGUpfSkpLG4oIiAgICBwb3NpdGlvblNlbGZFZGdlcyIsKGZ1bmN0aW9uKCl7IShmdW5jdGlvbiB0KGUpe2FUdC5mb3JFYWNoKGUubm9kZXMoKSwoZnVuY3Rpb24odCl7dmFyIG49ZS5ub2RlKHQpO2lmKCJzZWxmZWRnZSI9PT1uLmR1bW15KXt2YXIgaT1lLm5vZGUobi5lLnYpLHI9aS54K2kud2lkdGgvMixvPWkueSxhPW4ueC1yLHM9aS5oZWlnaHQvMjtlLnNldEVkZ2Uobi5lLG4ubGFiZWwpLGUucmVtb3ZlTm9kZSh0KSxuLmxhYmVsLnBvaW50cz1be3g6cisyKmEvMyx5Om8tc30se3g6cis1KmEvNix5Om8tc30se3g6cithLHk6b30se3g6cis1KmEvNix5Om8rc30se3g6cisyKmEvMyx5Om8rc31dLG4ubGFiZWwueD1uLngsbi5sYWJlbC55PW4ueX19KSl9KShlKX0pKSxuKCIgICAgcmVtb3ZlQm9yZGVyTm9kZXMiLChmdW5jdGlvbigpeyEoZnVuY3Rpb24gdChlKXthVHQuZm9yRWFjaChlLm5vZGVzKCksKGZ1bmN0aW9uKHQpe2lmKGUuY2hpbGRyZW4odCkubGVuZ3RoKXt2YXIgbj1lLm5vZGUodCksaT1lLm5vZGUobi5ib3JkZXJUb3ApLHI9ZS5ub2RlKG4uYm9yZGVyQm90dG9tKSxvPWUubm9kZShhVHQubGFzdChuLmJvcmRlckxlZnQpKSxhPWUubm9kZShhVHQubGFzdChuLmJvcmRlclJpZ2h0KSk7bi53aWR0aD1NYXRoLmFicyhhLngtby54KSxuLmhlaWdodD1NYXRoLmFicyhyLnktaS55KSxuLng9by54K24ud2lkdGgvMixuLnk9aS55K24uaGVpZ2h0LzJ9fSkpLGFUdC5mb3JFYWNoKGUubm9kZXMoKSwoZnVuY3Rpb24odCl7ImJvcmRlciI9PT1lLm5vZGUodCkuZHVtbXkmJmUucmVtb3ZlTm9kZSh0KX0pKX0pKGUpfSkpLG4oIiAgICBub3JtYWxpemUudW5kbyIsKGZ1bmN0aW9uKCl7IShmdW5jdGlvbiB0KGUpe2FUdC5mb3JFYWNoKGUuZ3JhcGgoKS5kdW1teUNoYWlucywoZnVuY3Rpb24odCl7dmFyIG4saT1lLm5vZGUodCkscj1pLmVkZ2VMYWJlbDtmb3IoZS5zZXRFZGdlKGkuZWRnZU9iaixyKTtpLmR1bW15OyluPWUuc3VjY2Vzc29ycyh0KVswXSxlLnJlbW92ZU5vZGUodCksci5wb2ludHMucHVzaCh7eDppLngseTppLnl9KSwiZWRnZS1sYWJlbCI9PT1pLmR1bW15JiYoci54PWkueCxyLnk9aS55LHIud2lkdGg9aS53aWR0aCxyLmhlaWdodD1pLmhlaWdodCksaT1lLm5vZGUodD1uKX0pKX0pKGUpfSkpLG4oIiAgICBmaXh1cEVkZ2VMYWJlbENvb3JkcyIsKGZ1bmN0aW9uKCl7IShmdW5jdGlvbiB0KGUpe2FUdC5mb3JFYWNoKGUuZWRnZXMoKSwoZnVuY3Rpb24odCl7dmFyIG49ZS5lZGdlKHQpO2lmKGFUdC5oYXMobiwieCIpKXN3aXRjaCgibCIhPT1uLmxhYmVscG9zJiYiciIhPT1uLmxhYmVscG9zfHwobi53aWR0aC09bi5sYWJlbG9mZnNldCksbi5sYWJlbHBvcyl7Y2FzZSJsIjpuLngtPW4ud2lkdGgvMituLmxhYmVsb2Zmc2V0O2JyZWFrO2Nhc2UiciI6bi54Kz1uLndpZHRoLzIrbi5sYWJlbG9mZnNldH19KSl9KShlKX0pKSxuKCIgICAgdW5kb0Nvb3JkaW5hdGVTeXN0ZW0iLChmdW5jdGlvbigpeyEoZnVuY3Rpb24gdChlKXt2YXIgbj1lLmdyYXBoKCkucmFua2Rpci50b0xvd2VyQ2FzZSgpOyJidCIhPT1uJiYicmwiIT09bnx8KGZ1bmN0aW9uIGkodCl7YVR0LmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihlKXtkQ3QodC5ub2RlKGUpKX0pKSxhVHQuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKGUpe3ZhciBuPXQuZWRnZShlKTthVHQuZm9yRWFjaChuLnBvaW50cyxkQ3QpLGFUdC5oYXMobiwieSIpJiZkQ3Qobil9KSl9KShlKSwibHIiIT09biYmInJsIiE9PW58fCgoZnVuY3Rpb24gcih0KXthVHQuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe3BDdCh0Lm5vZGUoZSkpfSkpLGFUdC5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24oZSl7dmFyIG49dC5lZGdlKGUpO2FUdC5mb3JFYWNoKG4ucG9pbnRzLHBDdCksYVR0LmhhcyhuLCJ4IikmJnBDdChuKX0pKX0pKGUpLHVDdChlKSl9KShlKX0pKSxuKCIgICAgdHJhbnNsYXRlR3JhcGgiLChmdW5jdGlvbigpeyEoZnVuY3Rpb24gdChlKXt2YXIgbj1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksaT0wLHI9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLG89MCxhPWUuZ3JhcGgoKSxzPWEubWFyZ2lueHx8MCxsPWEubWFyZ2lueXx8MDtmdW5jdGlvbiBjKHQpe3ZhciBlPXQueCxhPXQueSxzPXQud2lkdGgsbD10LmhlaWdodDtuPU1hdGgubWluKG4sZS1zLzIpLGk9TWF0aC5tYXgoaSxlK3MvMikscj1NYXRoLm1pbihyLGEtbC8yKSxvPU1hdGgubWF4KG8sYStsLzIpfWFUdC5mb3JFYWNoKGUubm9kZXMoKSwoZnVuY3Rpb24odCl7YyhlLm5vZGUodCkpfSkpLGFUdC5mb3JFYWNoKGUuZWRnZXMoKSwoZnVuY3Rpb24odCl7dmFyIG49ZS5lZGdlKHQpO2FUdC5oYXMobiwieCIpJiZjKG4pfSkpLG4tPXMsci09bCxhVHQuZm9yRWFjaChlLm5vZGVzKCksKGZ1bmN0aW9uKHQpe3ZhciBpPWUubm9kZSh0KTtpLngtPW4saS55LT1yfSkpLGFUdC5mb3JFYWNoKGUuZWRnZXMoKSwoZnVuY3Rpb24odCl7dmFyIGk9ZS5lZGdlKHQpO2FUdC5mb3JFYWNoKGkucG9pbnRzLChmdW5jdGlvbih0KXt0LngtPW4sdC55LT1yfSkpLGFUdC5oYXMoaSwieCIpJiYoaS54LT1uKSxhVHQuaGFzKGksInkiKSYmKGkueS09cil9KSksYS53aWR0aD1pLW4rcyxhLmhlaWdodD1vLXIrbH0pKGUpfSkpLG4oIiAgICBhc3NpZ25Ob2RlSW50ZXJzZWN0cyIsKGZ1bmN0aW9uKCl7IShmdW5jdGlvbiB0KGUpe2FUdC5mb3JFYWNoKGUuZWRnZXMoKSwoZnVuY3Rpb24odCl7dmFyIG4saSxyPWUuZWRnZSh0KSxvPWUubm9kZSh0LnYpLGE9ZS5ub2RlKHQudyk7ci5wb2ludHM/KG49ci5wb2ludHNbMF0saT1yLnBvaW50c1tyLnBvaW50cy5sZW5ndGgtMV0pOihyLnBvaW50cz1bXSxuPWEsaT1vKSxyLnBvaW50cy51bnNoaWZ0KGtDdC5pbnRlcnNlY3RSZWN0KG8sbikpLHIucG9pbnRzLnB1c2goa0N0LmludGVyc2VjdFJlY3QoYSxpKSl9KSl9KShlKX0pKSxuKCIgICAgcmV2ZXJzZVBvaW50cyIsKGZ1bmN0aW9uKCl7IShmdW5jdGlvbiB0KGUpe2FUdC5mb3JFYWNoKGUuZWRnZXMoKSwoZnVuY3Rpb24odCl7dmFyIG49ZS5lZGdlKHQpO24ucmV2ZXJzZWQmJm4ucG9pbnRzLnJldmVyc2UoKX0pKX0pKGUpfSkpLG4oIiAgICBhY3ljbGljLnVuZG8iLChmdW5jdGlvbigpeyEoZnVuY3Rpb24gdChlKXthVHQuZm9yRWFjaChlLmVkZ2VzKCksKGZ1bmN0aW9uKHQpe3ZhciBuPWUuZWRnZSh0KTtpZihuLnJldmVyc2VkKXtlLnJlbW92ZUVkZ2UodCk7dmFyIGk9bi5mb3J3YXJkTmFtZTtkZWxldGUgbi5yZXZlcnNlZCxkZWxldGUgbi5mb3J3YXJkTmFtZSxlLnNldEVkZ2UodC53LHQudixuLGkpfX0pKX0pKGUpfSkpfSkoZSxuKX0pKSxuKCIgIHVwZGF0ZUlucHV0R3JhcGgiLChmdW5jdGlvbigpeyEoZnVuY3Rpb24gbih0LGUpe2FUdC5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24obil7dmFyIGk9dC5ub2RlKG4pLHI9ZS5ub2RlKG4pO2kmJihpLng9ci54LGkueT1yLnksZS5jaGlsZHJlbihuKS5sZW5ndGgmJihpLndpZHRoPXIud2lkdGgsaS5oZWlnaHQ9ci5oZWlnaHQpKX0pKSxhVHQuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKG4pe3ZhciBpPXQuZWRnZShuKSxyPWUuZWRnZShuKTtpLnBvaW50cz1yLnBvaW50cyxhVHQuaGFzKHIsIngiKSYmKGkueD1yLngsaS55PXIueSl9KSksdC5ncmFwaCgpLndpZHRoPWUuZ3JhcGgoKS53aWR0aCx0LmdyYXBoKCkuaGVpZ2h0PWUuZ3JhcGgoKS5oZWlnaHR9KSh0LGUpfSkpfSkpfSxkZWJ1Zzp7ZGVidWdPcmRlcmluZzpmdW5jdGlvbiBxQ3QodCl7dmFyIGU9Z1R0LmJ1aWxkTGF5ZXJNYXRyaXgodCksbj1uZXcgakN0KHtjb21wb3VuZDohMCxtdWx0aWdyYXBoOiEwfSkuc2V0R3JhcGgoe30pO3JldHVybiBhVHQuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe24uc2V0Tm9kZShlLHtsYWJlbDplfSksbi5zZXRQYXJlbnQoZSwibGF5ZXIiK3Qubm9kZShlKS5yYW5rKX0pKSxhVHQuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKHQpe24uc2V0RWRnZSh0LnYsdC53LHt9LHQubmFtZSl9KSksYVR0LmZvckVhY2goZSwoZnVuY3Rpb24odCxlKXtuLnNldE5vZGUoImxheWVyIitlLHtyYW5rOiJzYW1lIn0pLGFUdC5yZWR1Y2UodCwoZnVuY3Rpb24odCxlKXtyZXR1cm4gbi5zZXRFZGdlKHQsZSx7c3R5bGU6ImludmlzIn0pLGV9KSl9KSksbn19LHV0aWw6e3RpbWU6Z1R0LnRpbWUsbm90aW1lOmdUdC5ub3RpbWV9LHZlcnNpb246IjAuOC41In07IShmdW5jdGlvbih0KXt0LkZFVENIX1BCVFhUX0JZVEVTPSJGRVRDSF9QQlRYVF9CWVRFUyIsdC5GRVRDSF9QQlRYVF9CWVRFU19GUk9NX0ZJTEVTWVNURU09IkZFVENIX1BCVFhUX0JZVEVTX0ZST01fRklMRVNZU1RFTSIsdC5GRVRDSF9QQlRYVF9CWVRFU19GUk9NX1NFUlZFUj0iRkVUQ0hfUEJUWFRfQllURVNfRlJPTV9TRVJWRVIiLHQuUEFSU0VfUEJUWFRfSU5UT19PQkpFQ1Q9IlBBUlNFX1BCVFhUX0lOVE9fT0JKRUNUIix0LkZFVENIX01FVEFEQVRBX1BCVFhUX0JZVEVTPSJGRVRDSF9NRVRBREFUQV9QQlRYVF9CWVRFUyIsdC5QQVJTRV9NRVRBREFUQV9QQlRYVF9JTlRPX09CSkVDVD0iUEFSU0VfTUVUQURBVEFfUEJUWFRfSU5UT19PQkpFQ1QiLHQuTk9STUFMSVpJTkdfTkFNRVM9Ik5PUk1BTElaSU5HX05BTUVTIix0LkJVSUxEX1NMSU1fR1JBUEg9IkJVSUxEX1NMSU1fR1JBUEgiLHQuSElFUkFSQ0hZX0FERF9OT0RFUz0iSElFUkFSQ0hZX0FERF9OT0RFUyIsdC5ISUVSQVJDSFlfREVURUNUX1NFUklFUz0iSElFUkFSQ0hZX0RFVEVDVF9TRVJJRVMiLHQuSElFUkFSQ0hZX0FERF9FREdFUz0iSElFUkFSQ0hZX0FERF9FREdFUyIsdC5ISUVSQVJDSFlfRklORF9TSU1JTEFSX1NVQkdSQVBIUz0iSElFUkFSQ0hZX0ZJTkRfU0lNSUxBUl9TVUJHUkFQSFMiLHQuUkVOREVSX0JVSUxEX0hJRVJBUkNIWT0iUkVOREVSX0JVSUxEX0hJRVJBUkNIWSIsdC5SRU5ERVJfU0NFTkVfTEFZT1VUPSJSRU5ERVJfU0NFTkVfTEFZT1VUIix0LlJFTkRFUl9TQ0VORV9CVUlMRF9TQ0VORT0iUkVOREVSX1NDRU5FX0JVSUxEX1NDRU5FIix0LkdSQVBIX0xPQURfU1VDQ0VFREVEPSJHUkFQSF9MT0FEX1NVQ0NFRURFRCIsdC5HUkFQSF9MT0FEX0ZBSUxFRD0iR1JBUEhfTE9BRF9GQUlMRUQifSkoVkN0fHwoVkN0PXt9KSksKGZ1bmN0aW9uKHQpe3QuTk9ERV9FWFBBTlNJT05fVE9HR0xFRD0iTk9ERV9FWFBBTlNJT05fVE9HR0xFRCIsdC5OT0RFX1NFQVJDSF9SRVNVTFRfRk9DVVNFRD0iTk9ERV9TRUFSQ0hfUkVTVUxUX0ZPQ1VTRUQiLHQuTk9ERV9BVVhJTElBUllfRVhUUkFDVElPTl9DSEFOR0VEPSJOT0RFX0FVWElMSUFSWV9FWFRSQUNUSU9OX0NIQU5HRUQiLHQuR1JBUEhfVFlQRV9DSEFOR0VEPSJHUkFQSF9UWVBFX0NIQU5HRUQiLHQuVFJBQ0VfSU5QVVRfTU9ERV9UT0dHTEVEPSJUUkFDRV9JTlBVVF9NT0RFX1RPR0dMRUQiLHQuTk9ERV9DT0xPUl9NT0RFX0NIQU5HRUQ9Ik5PREVfQ09MT1JfTU9ERV9DSEFOR0VEIix0LlVQTE9BREVEX0dSQVBIX0ZST01fRklMRVNZU1RFTT0iVVBMT0FERURfR1JBUEhfRlJPTV9GSUxFU1lTVEVNIn0pKFVDdHx8KFVDdD17fSkpO2NvbnN0IFlDdD1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sVkN0KSxVQ3QpO3ZhciBYQ3Q7IShmdW5jdGlvbih0KXt0Lk9QX0dSQVBIPSJvcF9ncmFwaCIsdC5DT05DRVBUVUFMX0dSQVBIPSJjb25jZXB0dWFsX2dyYXBoIix0LlBST0ZJTEU9InByb2ZpbGUifSkoWEN0fHwoWEN0PXt9KSk7bGV0ICRDdD17Tm9kZTp7Q09OVEFJTkVSOiJub2RlcyIsR1JPVVA6Im5vZGUiLFNIQVBFOiJub2Rlc2hhcGUiLENPTE9SX1RBUkdFVDoibm9kZWNvbG9ydGFyZ2V0IixMQUJFTDoibm9kZWxhYmVsIixCVVRUT05fQ09OVEFJTkVSOiJidXR0b25jb250YWluZXIiLEJVVFRPTl9DSVJDTEU6ImJ1dHRvbmNpcmNsZSIsRVhQQU5EX0JVVFRPTjoiZXhwYW5kYnV0dG9uIixDT0xMQVBTRV9CVVRUT046ImNvbGxhcHNlYnV0dG9uIn0sRWRnZTp7Q09OVEFJTkVSOiJlZGdlcyIsR1JPVVA6ImVkZ2UiLExJTkU6ImVkZ2VsaW5lIixSRUZFUkVOQ0VfRURHRToicmVmZXJlbmNlZWRnZSIsUkVGX0xJTkU6InJlZmxpbmUiLFNFTEVDVEFCTEU6InNlbGVjdGFibGVlZGdlIixTRUxFQ1RFRDoic2VsZWN0ZWRlZGdlIixTVFJVQ1RVUkFMOiJzdHJ1Y3R1cmFsIn0sQW5ub3RhdGlvbjp7T1VUQk9YOiJvdXQtYW5ub3RhdGlvbnMiLElOQk9YOiJpbi1hbm5vdGF0aW9ucyIsR1JPVVA6ImFubm90YXRpb24iLE5PREU6ImFubm90YXRpb24tbm9kZSIsRURHRToiYW5ub3RhdGlvbi1lZGdlIixDT05UUk9MX0VER0U6ImFubm90YXRpb24tY29udHJvbC1lZGdlIixMQUJFTDoiYW5ub3RhdGlvbi1sYWJlbCIsRUxMSVBTSVM6ImFubm90YXRpb24tZWxsaXBzaXMifSxTY2VuZTp7R1JPVVA6InNjZW5lIixDT1JFOiJjb3JlIixGVU5DVElPTl9MSUJSQVJZOiJmdW5jdGlvbi1saWJyYXJ5IixJTkVYVFJBQ1Q6ImluLWV4dHJhY3QiLE9VVEVYVFJBQ1Q6Im91dC1leHRyYWN0In0sU3Vic2NlbmU6e0dST1VQOiJzdWJzY2VuZSJ9LE9QTk9ERToib3AiLE1FVEFOT0RFOiJtZXRhIixTRVJJRVNOT0RFOiJzZXJpZXMiLEJSSURHRU5PREU6ImJyaWRnZSIsRUxMSVBTSVNOT0RFOiJlbGxpcHNpcyJ9O2NvbnN0IEtDdD0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciO2Z1bmN0aW9uIFpDdCh0LGUsbil7bGV0IGk9dC5ub2RlKCkuY2hpbGROb2Rlcztmb3IobGV0IHQ9MDt0PGkubGVuZ3RoO3QrKyl7bGV0IHI9aVt0XTtpZihyLnRhZ05hbWU9PT1lKWlmKG4gaW5zdGFuY2VvZiBBcnJheSl7bGV0IHQ9ITA7Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspdD10JiZyLmNsYXNzTGlzdC5jb250YWlucyhuW2VdKTtpZih0KXJldHVybiB3dShyKX1lbHNlIGlmKCFufHxyLmNsYXNzTGlzdC5jb250YWlucyhuKSlyZXR1cm4gd3Uocil9cmV0dXJuIHd1KG51bGwpfWZ1bmN0aW9uIEpDdCh0LGUsbixpKXtsZXQgcj1aQ3QodCxlLG4pO2lmKCFyLmVtcHR5KCkpcmV0dXJuIHI7bGV0IG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsZSk7aWYobiBpbnN0YW5jZW9mIEFycmF5KWZvcihsZXQgdD0wO3Q8bi5sZW5ndGg7dCsrKW8uY2xhc3NMaXN0LmFkZChuW3RdKTtlbHNlIG8uY2xhc3NMaXN0LmFkZChuKTtyZXR1cm4gaT90Lm5vZGUoKS5pbnNlcnRCZWZvcmUobyxpKTp0Lm5vZGUoKS5hcHBlbmRDaGlsZChvKSx3dShvKS5kYXR1bSh0LmRhdHVtKCkpfWNsYXNzIFFDdHtjb25zdHJ1Y3Rvcih0KXt0aGlzLnRvdGFsQnl0ZXM9MCx0aGlzLm91dHB1dFNpemU9dH1hZGRFeGVjdXRpb25UaW1lKHQsZSl7dGhpcy5zdGFydFRpbWU9bnVsbCE9dGhpcy5zdGFydFRpbWU/TWF0aC5taW4odGhpcy5zdGFydFRpbWUsdCk6dCx0aGlzLmVuZFRpbWU9bnVsbCE9dGhpcy5lbmRUaW1lP01hdGgubWF4KHRoaXMuZW5kVGltZSxlKTplfWFkZEJ5dGVzQWxsb2NhdGlvbih0KXt0aGlzLnRvdGFsQnl0ZXM9bnVsbCE9dGhpcy50b3RhbEJ5dGVzP01hdGgubWF4KHRoaXMudG90YWxCeXRlcyx0KTp0fWNvbWJpbmUodCl7bnVsbCE9dC50b3RhbEJ5dGVzJiYodGhpcy50b3RhbEJ5dGVzKz10LnRvdGFsQnl0ZXMpLG51bGwhPXQuZ2V0VG90YWxNaWNyb3MoKSYmdGhpcy5hZGRFeGVjdXRpb25UaW1lKHQuc3RhcnRUaW1lLHQuZW5kVGltZSl9Z2V0VG90YWxNaWNyb3MoKXtyZXR1cm4gbnVsbD09dGhpcy5zdGFydFRpbWV8fG51bGw9PXRoaXMuZW5kVGltZT9udWxsOnRoaXMuZW5kVGltZS10aGlzLnN0YXJ0VGltZX19Y29uc3QgdEF0PS43NSxlQXQ9dEUoKS5leHBvbmVudCguMykuZG9tYWluKFsxLDVlNl0pLnJhbmdlKFt0QXQsMTJdKS5jbGFtcCghMCk7ZnVuY3Rpb24gbkF0KHQpeyEoZnVuY3Rpb24gZSh0KXt0Lmhhc093blByb3BlcnR5KCJ0aW1pbmdJZCIpfSkodCl9ZnVuY3Rpb24gaUF0KHQsZSxuKXtsZXQgaT1EYXRlLm5vdygpLHI9ZSgpO2NvbnN0IG89RGF0ZS5ub3coKS1pO3JldHVybiBjb25zb2xlLmxvZyh0LCI6IixvLCJtcyIpLG4mJm5BdCh7dGltaW5nSWQ6bixldmVudFZhbHVlOm99KSxyfWZ1bmN0aW9uIHJBdCh0KXtyZXR1cm57c2V0TWVzc2FnZTpmdW5jdGlvbihlKXt0LnNldCgicHJvZ3Jlc3MiLHt2YWx1ZTp0LnByb2dyZXNzLnZhbHVlLG1zZzplfSl9LHVwZGF0ZVByb2dyZXNzOmZ1bmN0aW9uKGUpe3Quc2V0KCJwcm9ncmVzcyIse3ZhbHVlOnQucHJvZ3Jlc3MudmFsdWUrZSxtc2c6dC5wcm9ncmVzcy5tc2d9KX0scmVwb3J0RXJyb3I6ZnVuY3Rpb24oZSxuKXtjb25zb2xlLmVycm9yKG4uc3RhY2spLHQuc2V0KCJwcm9ncmVzcyIse3ZhbHVlOnQucHJvZ3Jlc3MudmFsdWUsbXNnOmUsZXJyb3I6ITB9KX19fWZ1bmN0aW9uIG9BdCh0LGUsbil7cmV0dXJue3NldE1lc3NhZ2U6ZnVuY3Rpb24oZSl7dC5zZXRNZXNzYWdlKG4rIjogIitlKX0sdXBkYXRlUHJvZ3Jlc3M6ZnVuY3Rpb24obil7dC51cGRhdGVQcm9ncmVzcyhuKmUvMTAwKX0scmVwb3J0RXJyb3I6ZnVuY3Rpb24oZSxpKXt0LnJlcG9ydEVycm9yKG4rIjogIitlLGkpfX19ZnVuY3Rpb24gYUF0KHQsZSxuLGkscil7cmV0dXJuIG5ldyBQcm9taXNlKCgobyxhKT0+e2kuc2V0TWVzc2FnZSh0KSxzZXRUaW1lb3V0KChmdW5jdGlvbigpe3RyeXtsZXQgYT1pQXQodCxuLHIpO2kudXBkYXRlUHJvZ3Jlc3MoZSksbyhhKX1jYXRjaChlKXtpLnJlcG9ydEVycm9yKCJGYWlsZWQgIit0LGUpfX0pLDIwKX0pKX1mdW5jdGlvbiBzQXQodCxlLG4saSxyKXtyZXR1cm4gbmV3IFByb21pc2UoKChvLGEpPT57bGV0IHM9ZnVuY3Rpb24oZSl7aS5yZXBvcnRFcnJvcigiRmFpbGVkICIrdCxlKSxhKGUpfTtpLnNldE1lc3NhZ2UodCksc2V0VGltZW91dCgoZnVuY3Rpb24oKXt0cnl7bGV0IGE9RGF0ZS5ub3coKTtuKCkudGhlbigoZnVuY3Rpb24obil7Y29uc3Qgcz1EYXRlLm5vdygpLWE7Y29uc29sZS5sb2codCwiOiIscywibXMiKSxpLnVwZGF0ZVByb2dyZXNzKGUpLG5BdCh7dGltaW5nSWQ6cixldmVudFZhbHVlOnN9KSxvKG4pfSkpLmNhdGNoKHMpfWNhdGNoKHQpe3ModCl9fSksMjApfSkpfWNvbnN0IGxBdD1be3N5bWJvbDoiQiJ9LHtzeW1ib2w6IktCIixudW1Vbml0czoxMDI0fSx7c3ltYm9sOiJNQiIsbnVtVW5pdHM6MTAyNH0se3N5bWJvbDoiR0IiLG51bVVuaXRzOjEwMjR9LHtzeW1ib2w6IlRCIixudW1Vbml0czoxMDI0fSx7c3ltYm9sOiJQQiIsbnVtVW5pdHM6MTAyNH1dLGNBdD1be3N5bWJvbDoiwrVzIn0se3N5bWJvbDoibXMiLG51bVVuaXRzOjFlM30se3N5bWJvbDoicyIsbnVtVW5pdHM6MWUzfSx7c3ltYm9sOiJtaW4iLG51bVVuaXRzOjYwfSx7c3ltYm9sOiJociIsbnVtVW5pdHM6NjB9LHtzeW1ib2w6ImRheXMiLG51bVVuaXRzOjI0fV07ZnVuY3Rpb24gdUF0KHQsZSxuPTApe3JldHVybiBuKzE8ZS5sZW5ndGgmJnQ+PWVbbisxXS5udW1Vbml0cz91QXQodC9lW24rMV0ubnVtVW5pdHMsZSxuKzEpOk51bWJlcih0LnRvUHJlY2lzaW9uKDMpKSsiICIrZVtuXS5zeW1ib2x9ZnVuY3Rpb24gaEF0KHQpe3JldHVybiEoIXR8fCEodC50b3RhbEJ5dGVzPjB8fHQuZ2V0VG90YWxNaWNyb3MoKT4wfHx0Lm91dHB1dFNpemUpKX1mdW5jdGlvbiBkQXQodCl7aWYodC5sZW5ndGg8MilyZXR1cm4gdDtsZXQgZT0wLG49MCxpPXdlLm1pbih3ZS5tYXAodCwodD0+dC5sZW5ndGgpKSk7Zm9yKDs7KXtlKys7bGV0IHI9d2UubWFwKHQsKHQ9PnQuc3Vic3RyaW5nKDAsZSkpKTtpZighci5ldmVyeSgoKHQsZSk9PjA9PT1lfHx0PT09cltlLTFdKSkpYnJlYWs7aWYoZT49aSlyZXR1cm4gdDtuPWV9cmV0dXJuIHdlLm1hcCh0LCh0PT50LnN1YnN0cmluZyhuKSkpfWNvbnN0IHBBdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKS5nZXRDb250ZXh0KCIyZCIpO2Z1bmN0aW9uIGZBdCh0LGUpe3JldHVybiBwQXQuZm9udD1gJHtlfXB4IFJvYm90bywgc2Fucy1zZXJpZmAscEF0Lm1lYXN1cmVUZXh0KHQpLndpZHRofWNvbnN0IG1BdD0iLyIsZ0F0PSJfX3Jvb3RfXyIsX0F0PSJfX2Z1bmN0aW9uX2xpYnJhcnlfXyI7dmFyIHlBdCx2QXQsYkF0LHhBdDshKGZ1bmN0aW9uKHQpe3RbdC5GVUxMPTBdPSJGVUxMIix0W3QuRU1CRURERUQ9MV09IkVNQkVEREVEIix0W3QuTUVUQT0yXT0iTUVUQSIsdFt0LlNFUklFUz0zXT0iU0VSSUVTIix0W3QuQ09SRT00XT0iQ09SRSIsdFt0LlNIQURPVz01XT0iU0hBRE9XIix0W3QuQlJJREdFPTZdPSJCUklER0UiLHRbdC5FREdFPTddPSJFREdFIn0pKHlBdHx8KHlBdD17fSkpLChmdW5jdGlvbih0KXt0W3QuTUVUQT0wXT0iTUVUQSIsdFt0Lk9QPTFdPSJPUCIsdFt0LlNFUklFUz0yXT0iU0VSSUVTIix0W3QuQlJJREdFPTNdPSJCUklER0UiLHRbdC5FTExJUFNJUz00XT0iRUxMSVBTSVMifSkodkF0fHwodkF0PXt9KSksKGZ1bmN0aW9uKHQpe3RbdC5JTkNMVURFPTBdPSJJTkNMVURFIix0W3QuRVhDTFVERT0xXT0iRVhDTFVERSIsdFt0LlVOU1BFQ0lGSUVEPTJdPSJVTlNQRUNJRklFRCJ9KShiQXR8fChiQXQ9e30pKSwoZnVuY3Rpb24odCl7dFt0LkdST1VQPTBdPSJHUk9VUCIsdFt0LlVOR1JPVVA9MV09IlVOR1JPVVAifSkoeEF0fHwoeEF0PXt9KSk7Y2xhc3Mgd0F0e2NvbnN0cnVjdG9yKCl7dGhpcy5ub2Rlcz17fSx0aGlzLmVkZ2VzPVtdfX1jbGFzcyBTQXR7Y29uc3RydWN0b3IodCl7dGhpcy50eXBlPXZBdC5FTExJUFNJUyx0aGlzLmlzR3JvdXBOb2RlPSExLHRoaXMuY2FyZGluYWxpdHk9MSx0aGlzLnBhcmVudE5vZGU9bnVsbCx0aGlzLnN0YXRzPW51bGwsdGhpcy5zZXROdW1Nb3JlTm9kZXModCksdGhpcy5pbmNsdWRlPWJBdC5VTlNQRUNJRklFRH1zZXROdW1Nb3JlTm9kZXModCl7dGhpcy5udW1Nb3JlTm9kZXM9dCx0aGlzLm5hbWU9Ii4uLiAiK3QrIiBtb3JlIn19Y2xhc3MgTUF0e2NvbnN0cnVjdG9yKHQpe3RoaXMub3A9dC5vcCx0aGlzLm5hbWU9dC5uYW1lLHRoaXMuZGV2aWNlPXQuZGV2aWNlLHRoaXMuYXR0cj10LmF0dHIsdGhpcy5pbnB1dHM9KGZ1bmN0aW9uIGUodCl7Y29uc3QgZT1bXTtsZXQgbj1udWxsO2ZvcihsZXQgaSBvZiB0fHxbXSl7Y29uc3QgdD1pLnN0YXJ0c1dpdGgoIl4iKTt0JiYoaT1pLnN1YnN0cmluZygxKSk7bGV0IHI9aSxvPSIwIjtjb25zdCBhPWkuaW5jbHVkZXMoIjoiKSYmaS5tYXRjaChOQXQpO2EmJihyPWFbMV0sbz1hWzJdKSxuIT09ciYmKG49cixlLnB1c2goe25hbWU6cixvdXRwdXRUZW5zb3JLZXk6byxpc0NvbnRyb2xEZXBlbmRlbmN5OnR9KSl9cmV0dXJuIGV9KSh0LmlucHV0KSx0aGlzLm91dHB1dFNoYXBlcz0oZnVuY3Rpb24gbih0KXtpZighdClyZXR1cm4gbnVsbDtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKyl7bGV0e2tleTpuLHZhbHVlOml9PXRbZV07aWYoIl9vdXRwdXRfc2hhcGVzIj09PW4pe2lmKCFpLmxpc3R8fCFpLmxpc3Quc2hhcGUpcmV0dXJuIG51bGw7bGV0IG49aS5saXN0LnNoYXBlLm1hcCgodD0+dC51bmtub3duX3Jhbms/bnVsbDpudWxsPT10LmRpbXx8MT09PXQuZGltLmxlbmd0aCYmbnVsbD09dC5kaW1bMF0uc2l6ZT9bXTp0LmRpbS5tYXAoKHQ9PnQuc2l6ZSkpKSk7cmV0dXJuIHQuc3BsaWNlKGUsMSksbn19cmV0dXJuIG51bGx9KSh0LmF0dHIpLHRoaXMueGxhQ2x1c3Rlcj0oZnVuY3Rpb24gaSh0KXtpZighdClyZXR1cm4gbnVsbDtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKylpZigiX1hsYUNsdXN0ZXIiPT09dFtlXS5rZXkpcmV0dXJuIHRbZV0udmFsdWUuc3x8bnVsbDtyZXR1cm4gbnVsbH0pKHQuYXR0ciksdGhpcy5jb21wYXRpYmxlPSExLHRoaXMudHlwZT12QXQuT1AsdGhpcy5pc0dyb3VwTm9kZT0hMSx0aGlzLmNhcmRpbmFsaXR5PTEsdGhpcy5pbkVtYmVkZGluZ3M9W10sdGhpcy5vdXRFbWJlZGRpbmdzPVtdLHRoaXMucGFyZW50Tm9kZT1udWxsLHRoaXMuaW5jbHVkZT1iQXQuVU5TUEVDSUZJRUQsdGhpcy5vd25pbmdTZXJpZXM9bnVsbH19ZnVuY3Rpb24gRUF0KHQsZT17fSl7cmV0dXJuIG5ldyBUQXQodCxlKX1jbGFzcyBUQXR7Y29uc3RydWN0b3IodCxlPXt9KXt0aGlzLm5hbWU9dCx0aGlzLnR5cGU9dkF0Lk1FVEEsdGhpcy5kZXB0aD0xLHRoaXMuaXNHcm91cE5vZGU9ITAsdGhpcy5jYXJkaW5hbGl0eT0wLHRoaXMubWV0YWdyYXBoPVJBdCh0LHlBdC5NRVRBLGUpLHRoaXMuYnJpZGdlZ3JhcGg9bnVsbCx0aGlzLm9wSGlzdG9ncmFtPXt9LHRoaXMuZGV2aWNlSGlzdG9ncmFtPXt9LHRoaXMueGxhQ2x1c3Rlckhpc3RvZ3JhbT17fSx0aGlzLmNvbXBhdGliaWxpdHlIaXN0b2dyYW09e2NvbXBhdGlibGU6MCxpbmNvbXBhdGlibGU6MH0sdGhpcy50ZW1wbGF0ZUlkPW51bGwsdGhpcy5wYXJlbnROb2RlPW51bGwsdGhpcy5oYXNOb25Db250cm9sRWRnZXM9ITEsdGhpcy5pbmNsdWRlPWJBdC5VTlNQRUNJRklFRCx0aGlzLmFzc29jaWF0ZWRGdW5jdGlvbj0iIn1nZXRGaXJzdENoaWxkKCl7cmV0dXJuIHRoaXMubWV0YWdyYXBoLm5vZGUodGhpcy5tZXRhZ3JhcGgubm9kZXMoKVswXSl9Z2V0Um9vdE9wKCl7bGV0IHQ9dGhpcy5uYW1lLnNwbGl0KCIvIik7cmV0dXJuIHRoaXMubWV0YWdyYXBoLm5vZGUodGhpcy5uYW1lKyIvKCIrdFt0Lmxlbmd0aC0xXSsiKSIpfWxlYXZlcygpe2xldCB0LGU9W10sbj1bdGhpc107Zm9yKDtuLmxlbmd0aDspe2xldCBpPW4uc2hpZnQoKTtpLmlzR3JvdXBOb2RlPyh0PWkubWV0YWdyYXBoLHdlLmVhY2godC5ub2RlcygpLChlPT5uLnB1c2godC5ub2RlKGUpKSkpKTplLnB1c2goaS5uYW1lKX1yZXR1cm4gZX19ZnVuY3Rpb24gQ0F0KHQsZSl7cmV0dXJuIG5ldyBBQXQodCxlKX1jbGFzcyBBQXR7Y29uc3RydWN0b3IodCxlKXt0aGlzLnY9dCx0aGlzLnc9ZSx0aGlzLmJhc2VFZGdlTGlzdD1bXSx0aGlzLmluYm91bmQ9bnVsbCx0aGlzLm51bVJlZ3VsYXJFZGdlcz0wLHRoaXMubnVtQ29udHJvbEVkZ2VzPTAsdGhpcy5udW1SZWZFZGdlcz0wLHRoaXMudG90YWxTaXplPTB9YWRkQmFzZUVkZ2UodCxlKXt0aGlzLmJhc2VFZGdlTGlzdC5wdXNoKHQpLHQuaXNDb250cm9sRGVwZW5kZW5jeT90aGlzLm51bUNvbnRyb2xFZGdlcys9MTp0aGlzLm51bVJlZ3VsYXJFZGdlcys9MSx0LmlzUmVmZXJlbmNlRWRnZSYmKHRoaXMubnVtUmVmRWRnZXMrPTEpLHRoaXMudG90YWxTaXplKz1BQXQuY29tcHV0ZVNpemVPZkVkZ2UodCxlKSxlLm1heE1ldGFFZGdlU2l6ZT1NYXRoLm1heChlLm1heE1ldGFFZGdlU2l6ZSx0aGlzLnRvdGFsU2l6ZSl9c3RhdGljIGNvbXB1dGVTaXplT2ZFZGdlKHQsZSl7bGV0IG49ZS5ub2RlKHQudik7aWYoIW4ub3V0cHV0U2hhcGVzKXJldHVybiAxO2UuaGFzU2hhcGVJbmZvPSEwO2NvbnN0IGk9T2JqZWN0LmtleXMobi5vdXRwdXRTaGFwZXMpLm1hcCgodD0+bi5vdXRwdXRTaGFwZXNbdF0pKS5tYXAoKHQ9Pm51bGw9PXQ/MTp0LnJlZHVjZSgoKHQsZSk9PigtMT09PWUmJihlPTEpLHQqZSkpLDEpKSk7cmV0dXJuIHdlLnN1bShpKX19ZnVuY3Rpb24ga0F0KHQsZSxuLGkscixvKXtyZXR1cm4gbmV3IFBBdCh0LGUsbixpLHIsbyl9ZnVuY3Rpb24gTEF0KHQsZSxuLGkscil7cmV0dXJuKG4/bisiLyI6IiIpK3QrKHZvaWQgMCE9PWkmJnZvaWQgMCE9PXI/IlsiK2krIi0iK3IrIl0iOiIjIikrZX1jbGFzcyBQQXR7Y29uc3RydWN0b3IodCxlLG4saSxyLG8pe3RoaXMubmFtZT1yfHxMQXQodCxlLG4pLHRoaXMudHlwZT12QXQuU0VSSUVTLHRoaXMuaGFzTG9vcD0hMSx0aGlzLnByZWZpeD10LHRoaXMuc3VmZml4PWUsdGhpcy5jbHVzdGVySWQ9aSx0aGlzLmlkcz1bXSx0aGlzLnBhcmVudD1uLHRoaXMuaXNHcm91cE5vZGU9ITAsdGhpcy5jYXJkaW5hbGl0eT0wLHRoaXMubWV0YWdyYXBoPVJBdChyLHlBdC5TRVJJRVMsbyksdGhpcy5icmlkZ2VncmFwaD1udWxsLHRoaXMucGFyZW50Tm9kZT1udWxsLHRoaXMuZGV2aWNlSGlzdG9ncmFtPXt9LHRoaXMueGxhQ2x1c3Rlckhpc3RvZ3JhbT17fSx0aGlzLmNvbXBhdGliaWxpdHlIaXN0b2dyYW09e2NvbXBhdGlibGU6MCxpbmNvbXBhdGlibGU6MH0sdGhpcy5oYXNOb25Db250cm9sRWRnZXM9ITEsdGhpcy5pbmNsdWRlPWJBdC5VTlNQRUNJRklFRH19Y29uc3QgTkF0PS9eKFteOl0rKTooKFx3Kzp8KVxkKykkLztmdW5jdGlvbiBJQXQodCxlLG4saSxyLG8pe2UhPT1uLm5hbWUmJnQuZWRnZXMucHVzaCh7djplLHc6bi5uYW1lLG91dHB1dFRlbnNvcktleTppLm91dHB1dFRlbnNvcktleSxpc0NvbnRyb2xEZXBlbmRlbmN5OmkuaXNDb250cm9sRGVwZW5kZW5jeSxpc1JlZmVyZW5jZUVkZ2U6ITA9PT1yLnJlZkVkZ2VzW24ub3ArIiAiK29dfSl9Y29uc3QgT0F0PXtlbmFibGVFbWJlZGRpbmc6ITAsaW5FbWJlZGRpbmdUeXBlczpbIkNvbnN0Il0sb3V0RW1iZWRkaW5nVHlwZXM6WyJeW2EtekEtWl0rU3VtbWFyeSQiXSxyZWZFZGdlczp7IkFzc2lnbiAwIjohMCwiQXNzaWduQWRkIDAiOiEwLCJBc3NpZ25TdWIgMCI6ITAsImFzc2lnbiAwIjohMCwiYXNzaWduX2FkZCAwIjohMCwiYXNzaWduX3N1YiAwIjohMCwiY291bnRfdXBfdG8gMCI6ITAsIlNjYXR0ZXJBZGQgMCI6ITAsIlNjYXR0ZXJTdWIgMCI6ITAsIlNjYXR0ZXJVcGRhdGUgMCI6ITAsInNjYXR0ZXJfYWRkIDAiOiEwLCJzY2F0dGVyX3N1YiAwIjohMCwic2NhdHRlcl91cGRhdGUgMCI6ITB9fTtmdW5jdGlvbiBSQXQodCxlLG49e30pe2NvbnN0IGk9bmV3IEdDdC5ncmFwaGxpYi5HcmFwaChuKTtyZXR1cm4gaS5zZXRHcmFwaCh7bmFtZTp0LHJhbmtkaXI6bi5yYW5rZGlyfHwiQlQiLHR5cGU6ZX0pLGl9ZnVuY3Rpb24gekF0KHQpe3JldHVybiBmdW5jdGlvbihlKXtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKyl7bGV0IGk9bmV3IFJlZ0V4cCh0W25dKTtpZigic3RyaW5nIj09dHlwZW9mIGUub3AmJmUub3AubWF0Y2goaSkpcmV0dXJuITB9cmV0dXJuITF9fWZ1bmN0aW9uIERBdCh0KXtsZXQgZT10LnNwbGl0KG1BdCk7cmV0dXJuIHQrbUF0KyIoIitlW2UubGVuZ3RoLTFdKyIpIn1mdW5jdGlvbiBCQXQodCl7bGV0IGU9dC5ub2RlcygpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHQubmVpZ2hib3JzKGUpLmxlbmd0aH0pKTtyZXR1cm4gZS5zb3J0KCksZX1mdW5jdGlvbiBIQXQodCxlKXtsZXQgbj1bXSxpPXQuaW5kZXhPZihtQXQpO2Zvcig7aT49MDspbi5wdXNoKHQuc3Vic3RyaW5nKDAsaSkpLGk9dC5pbmRleE9mKG1BdCxpKzEpO2lmKGUpe2xldCBpPWVbdF07aSYmbi5wdXNoKGkpfXJldHVybiBuLnB1c2godCksbn1mdW5jdGlvbiBGQXQodCl7cmV0dXJuIHQ9PT1iQXQuRVhDTFVERT8iQWRkIHRvIG1haW4gZ3JhcGgiOiJSZW1vdmUgZnJvbSBtYWluIGdyYXBoIn1sZXQgVkF0PSIjMGY5ZDU4IixVQXQ9IiNkYjQ0MzciLGpBdD17REVGQVVMVF9GSUxMOiIjZDlkOWQ5IixERUZBVUxUX1NUUk9LRToiI2E2YTZhNiIsU0FUVVJBVElPTjouNixMSUdIVE5FU1M6Ljg1LEVYUEFOREVEX0NPTE9SOiIjZjBmMGYwIixIVUVTOlsyMjAsMTAwLDE4MCw0MCwyMCwzNDAsMjYwLDMwMCwxNDAsNjBdLFNUUlVDVFVSRV9QQUxFVFRFKHQsZSl7bGV0IG49akF0LkhVRVMsaT1uW3Qlbi5sZW5ndGhdLHI9TWF0aC5zaW4oaSpNYXRoLlBJLzM2MCk7cmV0dXJuIFhoKGksLjAxKihlPzMwOjkwLTYwKnIpLC4wMSooZT85NTo4MCkpLnRvU3RyaW5nKCl9LERFVklDRV9QQUxFVFRFOnQ9PmpBdC5TVFJVQ1RVUkVfUEFMRVRURSh0KSxYTEFfQ0xVU1RFUl9QQUxFVFRFOnQ9PmpBdC5TVFJVQ1RVUkVfUEFMRVRURSh0KSxVTktOT1dOOiIjZWVlIixHUkFESUVOVF9PVVRMSU5FOiIjODg4In07Y29uc3QgR0F0PVsiTm9PcCJdLFdBdD1bXSxxQXQ9WyIjZmZmNWYwIiwiI2ZiNmE0YSJdLFlBdD1uZXcgUmVnRXhwKCJeKD86X19mdW5jdGlvbl9saWJyYXJ5X18pPyhcXHcrKV9bYS16MC05XXs4fSg/Ol9cXGQrKT8kIik7Y2xhc3MgWEF0e2NvbnN0cnVjdG9yKHQsZSxuKXt0aGlzLmhpZXJhcmNoeT10LHRoaXMuZGlzcGxheWluZ1N0YXRzPWUsdGhpcy5hdXRvRXh0cmFjdE5vZGVzPW4sdGhpcy5pbmRleD17fSx0aGlzLnJlbmRlcmVkT3BOYW1lcz1bXSx0aGlzLmNvbXB1dGVTY2FsZXMoKSx0aGlzLmhhc1N1YmhpZXJhcmNoeT17fSx0aGlzLnJvb3Q9bmV3IG5rdCh0LnJvb3QsdC5ncmFwaE9wdGlvbnMpLHRoaXMuaW5kZXhbdC5yb290Lm5hbWVdPXRoaXMucm9vdCx0aGlzLnJlbmRlcmVkT3BOYW1lcy5wdXNoKHQucm9vdC5uYW1lKSx0aGlzLmJ1aWxkU3ViaGllcmFyY2h5KHQucm9vdC5uYW1lKSx0aGlzLnJvb3QuZXhwYW5kZWQ9ITAsdGhpcy50cmFjZUlucHV0cz0hMX1jb21wdXRlU2NhbGVzKCl7dGhpcy5kZXZpY2VDb2xvck1hcD14TSgpLmRvbWFpbih0aGlzLmhpZXJhcmNoeS5kZXZpY2VzKS5yYW5nZSh3ZS5tYXAoUmwodGhpcy5oaWVyYXJjaHkuZGV2aWNlcy5sZW5ndGgpLGpBdC5ERVZJQ0VfUEFMRVRURSkpLHRoaXMueGxhQ2x1c3RlckNvbG9yTWFwPXhNKCkuZG9tYWluKHRoaXMuaGllcmFyY2h5LnhsYUNsdXN0ZXJzKS5yYW5nZSh3ZS5tYXAoUmwodGhpcy5oaWVyYXJjaHkueGxhQ2x1c3RlcnMubGVuZ3RoKSxqQXQuWExBX0NMVVNURVJfUEFMRVRURSkpO2xldCB0PXRoaXMuaGllcmFyY2h5LnJvb3QubWV0YWdyYXBoLGU9R2wodC5ub2RlcygpLCgoZSxuKT0+e2xldCBpPXQubm9kZShlKTtpZihudWxsIT1pLnN0YXRzKXJldHVybiBpLnN0YXRzLnRvdGFsQnl0ZXN9KSk7dGhpcy5tZW1vcnlVc2FnZVNjYWxlPURNKCkuZG9tYWluKFswLGVdKS5yYW5nZShxQXQpO2xldCBuPUdsKHQubm9kZXMoKSwoKGUsbik9PntsZXQgaT10Lm5vZGUoZSk7aWYobnVsbCE9aS5zdGF0cylyZXR1cm4gaS5zdGF0cy5nZXRUb3RhbE1pY3JvcygpfSkpO3RoaXMuY29tcHV0ZVRpbWVTY2FsZT1ETSgpLmRvbWFpbihbMCxuXSkucmFuZ2UocUF0KSx0aGlzLmVkZ2VXaWR0aFNpemVkQmFzZWRTY2FsZT10aGlzLmhpZXJhcmNoeS5oYXNTaGFwZUluZm8/ZUF0OkRNKCkuZG9tYWluKFsxLHRoaXMuaGllcmFyY2h5Lm1heE1ldGFFZGdlU2l6ZV0pLnJhbmdlKFt0QXQsMTJdKX1nZXRSZW5kZXJOb2RlQnlOYW1lKHQpe3JldHVybiB0aGlzLmluZGV4W3RdfWdldE5vZGVCeU5hbWUodCl7cmV0dXJuIHRoaXMuaGllcmFyY2h5Lm5vZGUodCl9Y29sb3JIaXN0b2dyYW0odCxlKXtpZihPYmplY3Qua2V5cyh0KS5sZW5ndGg+MCl7Y29uc3Qgbj13ZS5zdW0oT2JqZWN0LmtleXModCkubWFwKChlPT50W2VdKSkpO3JldHVybiBPYmplY3Qua2V5cyh0KS5tYXAoKGk9Pih7Y29sb3I6ZShpKSxwcm9wb3J0aW9uOnRbaV0vbn0pKSl9cmV0dXJuIG51bGx9Z2V0T3JDcmVhdGVSZW5kZXJOb2RlQnlOYW1lKHQpe2lmKCF0KXJldHVybiBudWxsO2lmKHQgaW4gdGhpcy5pbmRleClyZXR1cm4gdGhpcy5pbmRleFt0XTtsZXQgZT10aGlzLmhpZXJhcmNoeS5ub2RlKHQpO2lmKCFlKXJldHVybiBudWxsO2xldCBuPWUuaXNHcm91cE5vZGU/bmV3IG5rdChlLHRoaXMuaGllcmFyY2h5LmdyYXBoT3B0aW9ucyk6bmV3IEpBdChlKTt0aGlzLmluZGV4W3RdPW4sdGhpcy5yZW5kZXJlZE9wTmFtZXMucHVzaCh0KSxlLnN0YXRzJiYobi5tZW1vcnlDb2xvcj10aGlzLm1lbW9yeVVzYWdlU2NhbGUoZS5zdGF0cy50b3RhbEJ5dGVzKSxuLmNvbXB1dGVUaW1lQ29sb3I9dGhpcy5jb21wdXRlVGltZVNjYWxlKGUuc3RhdHMuZ2V0VG90YWxNaWNyb3MoKSkpLG4uaXNGYWRlZE91dD10aGlzLmRpc3BsYXlpbmdTdGF0cyYmIWhBdChlLnN0YXRzKTt2YXIgaT1udWxsLHI9bnVsbCxvPW51bGw7aWYoZS5pc0dyb3VwTm9kZSl7aT1lLmRldmljZUhpc3RvZ3JhbSxyPWUueGxhQ2x1c3Rlckhpc3RvZ3JhbTtsZXQgdD1lLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZSxuPWUuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGU7MD09dCYmMD09bnx8KG89dC8odCtuKSl9ZWxzZXtsZXQgdD1uLm5vZGUuZGV2aWNlO3QmJihpPXtbdF06MX0pO2xldCBlPW4ubm9kZS54bGFDbHVzdGVyO2UmJihyPXtbZV06MX0pLG4ubm9kZS50eXBlPT09dkF0Lk9QJiYobz1uLm5vZGUuY29tcGF0aWJsZT8xOjApfXJldHVybiBpJiYobi5kZXZpY2VDb2xvcnM9dGhpcy5jb2xvckhpc3RvZ3JhbShpLHRoaXMuZGV2aWNlQ29sb3JNYXApKSxyJiYobi54bGFDbHVzdGVyQ29sb3JzPXRoaXMuY29sb3JIaXN0b2dyYW0ocix0aGlzLnhsYUNsdXN0ZXJDb2xvck1hcCkpLG51bGwhPW8mJihuLmNvbXBhdGliaWxpdHlDb2xvcnM9W3tjb2xvcjpWQXQscHJvcG9ydGlvbjpvfSx7Y29sb3I6VUF0LHByb3BvcnRpb246MS1vfV0pLHRoaXMuaW5kZXhbdF19Z2V0TmVhcmVzdFZpc2libGVBbmNlc3Rvcih0KXtsZXQgZT1IQXQodCksbj0wLGk9bnVsbCxyPXQ7Zm9yKDtuPGUubGVuZ3RoJiYocj1lW25dLGk9dGhpcy5nZXRSZW5kZXJOb2RlQnlOYW1lKHIpLGkuZXhwYW5kZWQpO24rKyk7aWYobj09ZS5sZW5ndGgtMil7bGV0IHQ9ZVtuKzFdO2lmKGkuaW5Bbm5vdGF0aW9ucy5ub2RlTmFtZXNbdF0pcmV0dXJuIHQ7aWYoaS5vdXRBbm5vdGF0aW9ucy5ub2RlTmFtZXNbdF0pcmV0dXJuIHR9cmV0dXJuIHJ9c2V0RGVwdGgodCl7aWt0KHRoaXMucm9vdCwrdCl9aXNOb2RlQXV4aWxpYXJ5KHQpe2xldCBlPXRoaXMuZ2V0UmVuZGVyTm9kZUJ5TmFtZSh0Lm5vZGUucGFyZW50Tm9kZS5uYW1lKSxuPXdlLmZpbmQoZS5pc29sYXRlZEluRXh0cmFjdCwoZT0+ZS5ub2RlLm5hbWU9PT10Lm5vZGUubmFtZSkpO3JldHVybiEhbnx8KG49d2UuZmluZChlLmlzb2xhdGVkT3V0RXh0cmFjdCwoZT0+ZS5ub2RlLm5hbWU9PT10Lm5vZGUubmFtZSkpLCEhbil9Z2V0TmFtZXNPZlJlbmRlcmVkT3BzKCl7cmV0dXJuIHRoaXMucmVuZGVyZWRPcE5hbWVzfWNsb25lQW5kQWRkRnVuY3Rpb25PcE5vZGUodCxlLG4saSl7Y29uc3Qgcj1uLm5hbWUucmVwbGFjZShlLGkpO2xldCBvPXQubWV0YWdyYXBoLm5vZGUocik7aWYobylyZXR1cm4gbztvPW5ldyBNQXQoe25hbWU6cixpbnB1dDpbXSxkZXZpY2U6bi5kZXZpY2Usb3A6bi5vcCxhdHRyOndlLmNsb25lRGVlcChuLmF0dHIpfSksby5jYXJkaW5hbGl0eT1uLmNhcmRpbmFsaXR5LG8uaW5jbHVkZT1uLmluY2x1ZGUsby5vdXRwdXRTaGFwZXM9d2UuY2xvbmVEZWVwKG4ub3V0cHV0U2hhcGVzKSxvLnhsYUNsdXN0ZXI9bi54bGFDbHVzdGVyLG8uZnVuY3Rpb25JbnB1dEluZGV4PW4uZnVuY3Rpb25JbnB1dEluZGV4LG8uZnVuY3Rpb25PdXRwdXRJbmRleD1uLmZ1bmN0aW9uT3V0cHV0SW5kZXgsby5pbnB1dHM9bi5pbnB1dHMubWFwKCh0PT57Y29uc3Qgbj13ZS5jbG9uZSh0KTtyZXR1cm4gbi5uYW1lPXQubmFtZS5yZXBsYWNlKGUsaSksbn0pKSxvLnBhcmVudE5vZGU9dCx0Lm1ldGFncmFwaC5zZXROb2RlKG8ubmFtZSxvKSx0aGlzLmhpZXJhcmNoeS5zZXROb2RlKG8ubmFtZSxvKTtjb25zdCBhPW49PnRoaXMuY2xvbmVBbmRBZGRGdW5jdGlvbk9wTm9kZSh0LGUsbixpKTtyZXR1cm4gby5pbkVtYmVkZGluZ3M9bi5pbkVtYmVkZGluZ3MubWFwKGEpLG8ub3V0RW1iZWRkaW5ncz1uLm91dEVtYmVkZGluZ3MubWFwKGEpLG99Y2xvbmVGdW5jdGlvbkxpYnJhcnlNZXRhbm9kZSh0LGUsbixpLHIpe2NvbnN0IG89e30sYT10aGlzLmNsb25lRnVuY3Rpb25MaWJyYXJ5TWV0YW5vZGVIZWxwZXIodCxlLG4saSxyLG8pO3JldHVybiB3ZS5pc0VtcHR5KG8pfHx0aGlzLnBhdGNoRWRnZXNGcm9tRnVuY3Rpb25PdXRwdXRzKGUsbyksYX1jbG9uZUZ1bmN0aW9uTGlicmFyeU1ldGFub2RlSGVscGVyKHQsZSxuLGkscixvKXtjb25zdCBhPUVBdChuLm5hbWUucmVwbGFjZShpLHIpKTtyZXR1cm4gYS5kZXB0aD1uLmRlcHRoLGEuY2FyZGluYWxpdHk9bi5jYXJkaW5hbGl0eSxhLnRlbXBsYXRlSWQ9bi50ZW1wbGF0ZUlkLGEub3BIaXN0b2dyYW09d2UuY2xvbmUobi5vcEhpc3RvZ3JhbSksYS5kZXZpY2VIaXN0b2dyYW09d2UuY2xvbmUobi5kZXZpY2VIaXN0b2dyYW0pLGEueGxhQ2x1c3Rlckhpc3RvZ3JhbT13ZS5jbG9uZShuLnhsYUNsdXN0ZXJIaXN0b2dyYW0pLGEuaGFzTm9uQ29udHJvbEVkZ2VzPW4uaGFzTm9uQ29udHJvbEVkZ2VzLGEuaW5jbHVkZT1uLmluY2x1ZGUsYS5ub2RlQXR0cmlidXRlcz13ZS5jbG9uZShuLm5vZGVBdHRyaWJ1dGVzKSxhLmFzc29jaWF0ZWRGdW5jdGlvbj1uLmFzc29jaWF0ZWRGdW5jdGlvbix3ZS5lYWNoKG4ubWV0YWdyYXBoLm5vZGVzKCksKHM9Pntjb25zdCBsPW4ubWV0YWdyYXBoLm5vZGUocyk7c3dpdGNoKGwudHlwZSl7Y2FzZSB2QXQuTUVUQTpjb25zdCBuPXRoaXMuY2xvbmVGdW5jdGlvbkxpYnJhcnlNZXRhbm9kZUhlbHBlcih0LGUsbCxpLHIsbyk7bi5wYXJlbnROb2RlPWEsYS5tZXRhZ3JhcGguc2V0Tm9kZShuLm5hbWUsbiksdGhpcy5oaWVyYXJjaHkuc2V0Tm9kZShuLm5hbWUsbik7YnJlYWs7Y2FzZSB2QXQuT1A6Y29uc3Qgcz10aGlzLmNsb25lQW5kQWRkRnVuY3Rpb25PcE5vZGUoYSxpLGwscik7d2UuaXNOdW1iZXIocy5mdW5jdGlvbklucHV0SW5kZXgpJiZ0aGlzLnBhdGNoRWRnZXNJbnRvRnVuY3Rpb25JbnB1dHMoZSxzKSx3ZS5pc051bWJlcihzLmZ1bmN0aW9uT3V0cHV0SW5kZXgpJiYob1tzLmZ1bmN0aW9uT3V0cHV0SW5kZXhdPXMpO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS53YXJuKGwubmFtZSsiIGlzIG9kZGx5IG5laXRoZXIgYSBtZXRhbm9kZSBub3IgYW4gb3Bub2RlLiIpfX0pKSx0aGlzLmNsb25lTGlicmFyeU1ldGFub2RlRWRnZXMobixhLGksciksYX1jbG9uZUxpYnJhcnlNZXRhbm9kZUVkZ2VzKHQsZSxuLGkpe3dlLmVhY2godC5tZXRhZ3JhcGguZWRnZXMoKSwocj0+e2NvbnN0IG89dC5tZXRhZ3JhcGguZWRnZShyKSxhPW8udi5yZXBsYWNlKG4saSkscz1vLncucmVwbGFjZShuLGkpLGw9bmV3IEFBdChhLHMpO2wuaW5ib3VuZD1vLmluYm91bmQsbC5udW1SZWd1bGFyRWRnZXM9by5udW1SZWd1bGFyRWRnZXMsbC5udW1Db250cm9sRWRnZXM9by5udW1Db250cm9sRWRnZXMsbC5udW1SZWZFZGdlcz1vLm51bVJlZkVkZ2VzLGwudG90YWxTaXplPW8udG90YWxTaXplLG8uYmFzZUVkZ2VMaXN0JiYobC5iYXNlRWRnZUxpc3Q9by5iYXNlRWRnZUxpc3QubWFwKCh0PT57Y29uc3QgZT13ZS5jbG9uZSh0KTtyZXR1cm4gZS52PXQudi5yZXBsYWNlKG4saSksZS53PXQudy5yZXBsYWNlKG4saSksZX0pKSksZS5tZXRhZ3JhcGgubm9kZShzKT9lLm1ldGFncmFwaC5zZXRFZGdlKGEscyxsKTplLm1ldGFncmFwaC5zZXRFZGdlKHMsYSxsKX0pKX1wYXRjaEVkZ2VzSW50b0Z1bmN0aW9uSW5wdXRzKHQsZSl7bGV0IG49TWF0aC5taW4oZS5mdW5jdGlvbklucHV0SW5kZXgsdC5pbnB1dHMubGVuZ3RoLTEpLGk9d2UuY2xvbmUodC5pbnB1dHNbbl0pO2Zvcig7aS5pc0NvbnRyb2xEZXBlbmRlbmN5OyluKyssaT10LmlucHV0c1tuXTtlLmlucHV0cy5wdXNoKGkpO2NvbnN0IHI9dGhpcy5oaWVyYXJjaHkuZ2V0UHJlZGVjZXNzb3JzKHQubmFtZSk7bGV0IG8sYT0wO3dlLmVhY2goci5yZWd1bGFyLCh0PT57aWYoYSs9dC5udW1SZWd1bGFyRWRnZXMsYT5uKXJldHVybiBvPXQsITF9KSksd2UuZWFjaChvLmJhc2VFZGdlTGlzdCwobj0+e24udz09PXQubmFtZSYmKG4udz1lLm5hbWUpLG4udj09PXQubmFtZSYmKG4udj1lLm5hbWUpfSkpfXBhdGNoRWRnZXNGcm9tRnVuY3Rpb25PdXRwdXRzKHQsZSl7Y29uc3Qgbj10aGlzLmhpZXJhcmNoeS5nZXRTdWNjZXNzb3JzKHQubmFtZSk7d2UuZWFjaChuLnJlZ3VsYXIsKG49Pnt3ZS5lYWNoKG4uYmFzZUVkZ2VMaXN0LChuPT57Y29uc3QgaT10aGlzLmhpZXJhcmNoeS5ub2RlKG4udyk7d2UuZWFjaChpLmlucHV0cywoaT0+e2kubmFtZT09PXQubmFtZSYmKGkubmFtZT1lW2kub3V0cHV0VGVuc29yS2V5XS5uYW1lLGkub3V0cHV0VGVuc29yS2V5PW4ub3V0cHV0VGVuc29yS2V5KX0pKX0pKSx3ZS5lYWNoKG4uYmFzZUVkZ2VMaXN0LCh0PT57dC52PWVbdC5vdXRwdXRUZW5zb3JLZXldLm5hbWUsdC5vdXRwdXRUZW5zb3JLZXk9IjAifSkpfSkpfWJ1aWxkU3ViaGllcmFyY2h5KHQpe2lmKHQgaW4gdGhpcy5oYXNTdWJoaWVyYXJjaHkpcmV0dXJuO3RoaXMuaGFzU3ViaGllcmFyY2h5W3RdPSEwO2xldCBlPXRoaXMuaW5kZXhbdF07aWYoZS5ub2RlLnR5cGUhPT12QXQuTUVUQSYmZS5ub2RlLnR5cGUhPT12QXQuU0VSSUVTKXJldHVybjtsZXQgbj1lLGk9bi5ub2RlLm1ldGFncmFwaCxyPW4uY29yZUdyYXBoO2NvbnN0IG89W10sYT1bXTt3ZS5pc0VtcHR5KHRoaXMuaGllcmFyY2h5LmxpYnJhcnlGdW5jdGlvbnMpfHwod2UuZWFjaChpLm5vZGVzKCksKHQ9Pntjb25zdCBlPWkubm9kZSh0KSxuPXRoaXMuaGllcmFyY2h5LmxpYnJhcnlGdW5jdGlvbnNbZS5vcF07aWYoIW4pcmV0dXJuO2lmKDA9PT10LmluZGV4T2YoX0F0KSlyZXR1cm47Y29uc3Qgcj10aGlzLmNsb25lRnVuY3Rpb25MaWJyYXJ5TWV0YW5vZGUoaSxlLG4ubm9kZSxuLm5vZGUubmFtZSxlLm5hbWUpO28ucHVzaChlKSxhLnB1c2gocil9KSksd2UuZWFjaChhLCgodCxlKT0+e2NvbnN0IG49b1tlXTt0LnBhcmVudE5vZGU9bi5wYXJlbnROb2RlLGkuc2V0Tm9kZShuLm5hbWUsdCksdGhpcy5oaWVyYXJjaHkuc2V0Tm9kZShuLm5hbWUsdCl9KSkpLHdlLmVhY2goaS5ub2RlcygpLCh0PT57bGV0IGU9dGhpcy5nZXRPckNyZWF0ZVJlbmRlck5vZGVCeU5hbWUodCksbj1lLm5vZGU7ci5zZXROb2RlKHQsZSksbi5pc0dyb3VwTm9kZXx8KHdlLmVhY2gobi5pbkVtYmVkZGluZ3MsKHQ9PntsZXQgbj1uZXcgUUF0KG51bGwpLGk9bmV3IEpBdCh0KTt0a3QoZSx0LGksbixLQXQuQ09OU1RBTlQpLHRoaXMuaW5kZXhbdC5uYW1lXT1pfSkpLHdlLmVhY2gobi5vdXRFbWJlZGRpbmdzLCh0PT57bGV0IG49bmV3IFFBdChudWxsKSxpPW5ldyBKQXQodCk7ZWt0KGUsdCxpLG4sS0F0LlNVTU1BUlkpLHRoaXMuaW5kZXhbdC5uYW1lXT1pfSkpKX0pKSx3ZS5lYWNoKGkuZWRnZXMoKSwodD0+e2xldCBlPWkuZWRnZSh0KSxuPW5ldyBRQXQoZSk7bi5pc0ZhZGVkT3V0PXRoaXMuaW5kZXhbdC52XS5pc0ZhZGVkT3V0fHx0aGlzLmluZGV4W3Qud10uaXNGYWRlZE91dCxyLnNldEVkZ2UodC52LHQudyxuKX0pKSxuLm5vZGUudHlwZT09PXZBdC5NRVRBJiYoZnVuY3Rpb24gcyh0LGUpeyhmdW5jdGlvbiBuKHQpe2xldCBlPXQuY29yZUdyYXBoO3dlLmVhY2goZS5ub2RlcygpLChuPT57ZS5ub2RlKG4pLm5vZGUuaW5jbHVkZSE9PWJBdC5FWENMVURFfHxuLnN0YXJ0c1dpdGgoX0F0KXx8KHQuY29yZUdyYXBoLm91dEVkZ2VzKG4pLmxlbmd0aD50LmNvcmVHcmFwaC5pbkVkZ2VzKG4pLmxlbmd0aD9va3QodCxuKTpha3QodCxuKSl9KSl9KSh0KSxHQXQubGVuZ3RoJiYoZnVuY3Rpb24gaSh0KXtsZXQgZT10LmNvcmVHcmFwaDt3ZS5lYWNoKGUubm9kZXMoKSwobj0+e2xldCBpPWUubm9kZShuKTtpLm5vZGUuaW5jbHVkZT09PWJBdC5VTlNQRUNJRklFRCYmc2t0KGkubm9kZSxHQXQpJiZva3QodCxuKX0pKX0pKHQpLFdBdC5sZW5ndGgmJihmdW5jdGlvbiByKHQpe2xldCBlPXQuY29yZUdyYXBoO3dlLmVhY2goZS5ub2RlcygpLChuPT57bGV0IGk9ZS5ub2RlKG4pO2kubm9kZS5pbmNsdWRlPT09YkF0LlVOU1BFQ0lGSUVEJiZza3QoaS5ub2RlLFdBdCkmJmFrdCh0LG4pfSkpfSkodCksZSYmKGZ1bmN0aW9uIG8odCl7bGV0IGU9dC5jb3JlR3JhcGgsbj17fSxpPXt9LHI9MDtpZih3ZS5lYWNoKGUubm9kZXMoKSwodD0+e2lmKGUubm9kZSh0KS5ub2RlLmluY2x1ZGUhPT1iQXQuVU5TUEVDSUZJRUQpcmV0dXJuO2xldCBvPXdlLnJlZHVjZShlLnByZWRlY2Vzc29ycyh0KSwoKG4saSk9Pm4rKGUuZWRnZShpLHQpLm1ldGFlZGdlLm51bVJlZ3VsYXJFZGdlcz8xOjApKSwwKTswPT09byYmZS5wcmVkZWNlc3NvcnModCkubGVuZ3RoPjAmJihvPWUucHJlZGVjZXNzb3JzKHQpLmxlbmd0aCk7bGV0IGE9d2UucmVkdWNlKGUuc3VjY2Vzc29ycyh0KSwoKG4saSk9Pm4rKGUuZWRnZSh0LGkpLm1ldGFlZGdlLm51bVJlZ3VsYXJFZGdlcz8xOjApKSwwKTswPT09YSYmZS5zdWNjZXNzb3JzKHQpLmxlbmd0aD4wJiYoYT1lLnN1Y2Nlc3NvcnModCkubGVuZ3RoKSxuW3RdPW8saVt0XT1hLHIrK30pKSxyPDE1KXJldHVybjtsZXQgbz1NYXRoLnJvdW5kKC43NSpyKSxhPU1hdGgucm91bmQoLjI1KnIpLHM9T2JqZWN0LmtleXMobikuc29ydCgoKHQsZSk9Pm5bdF0tbltlXSkpLGw9bltzW29dXSxjPWwrbC1uW3NbYV1dO2M9TWF0aC5tYXgoYyw0KTtmb3IobGV0IGU9ci0xO25bc1tlXV0+YztlLS0pYWt0KHQsc1tlXSk7bGV0IHU9T2JqZWN0LmtleXMoaSkuc29ydCgoKHQsZSk9PmlbdF0taVtlXSkpLGg9aVt1W29dXSxkPWgrNCooaC1pW3VbYV1dKTtkPU1hdGgubWF4KGQsNCk7Zm9yKGxldCBuPXItMTtpW3Vbbl1dPmQ7bi0tKXtsZXQgaT1lLm5vZGUodVtuXSk7aSYmIWkuaXNJbkV4dHJhY3QmJm9rdCh0LHVbbl0pfX0pKHQpLChmdW5jdGlvbiBhKHQpe2xldCBlPXQuY29yZUdyYXBoLG49e307d2UuZWFjaChlLmVkZ2VzKCksKHQ9PntlLmVkZ2UodCkubWV0YWVkZ2UubnVtUmVndWxhckVkZ2VzfHwoKG5bdC52XT1uW3Qudl18fFtdKS5wdXNoKHQpLChuW3Qud109blt0LnddfHxbXSkucHVzaCh0KSl9KSksd2UuZWFjaChuLCgodCxuKT0+e3QubGVuZ3RoPjQmJndlLmVhY2godCwodD0+cmt0KGUsdC52LHQudykpKX0pKX0pKHQpO2xldCBzPXQuY29yZUdyYXBoO3dlLmVhY2gocy5ub2RlcygpLChlPT57bGV0IG49cy5ub2RlKGUpLGk9cy5uZWlnaGJvcnMoZSkubGVuZ3RoO2lmKG4ubm9kZS5pbmNsdWRlPT09YkF0LlVOU1BFQ0lGSUVEJiYwPT09aSl7bGV0IGk9bi5vdXRBbm5vdGF0aW9ucy5saXN0Lmxlbmd0aD4wLHI9bi5pbkFubm90YXRpb25zLmxpc3QubGVuZ3RoPjA7bi5pc0luRXh0cmFjdD8odC5pc29sYXRlZEluRXh0cmFjdC5wdXNoKG4pLG4ubm9kZS5pbmNsdWRlPWJBdC5FWENMVURFLHMucmVtb3ZlTm9kZShlKSk6bi5pc091dEV4dHJhY3Q/KHQuaXNvbGF0ZWRPdXRFeHRyYWN0LnB1c2gobiksbi5ub2RlLmluY2x1ZGU9YkF0LkVYQ0xVREUscy5yZW1vdmVOb2RlKGUpKTppJiYhcj8obi5pc0luRXh0cmFjdD0hMCx0Lmlzb2xhdGVkSW5FeHRyYWN0LnB1c2gobiksbi5ub2RlLmluY2x1ZGU9YkF0LkVYQ0xVREUscy5yZW1vdmVOb2RlKGUpKTpyJiYhaSYmKG4uaXNPdXRFeHRyYWN0PSEwLHQuaXNvbGF0ZWRPdXRFeHRyYWN0LnB1c2gobiksbi5ub2RlLmluY2x1ZGU9YkF0LkVYQ0xVREUscy5yZW1vdmVOb2RlKGUpKX19KSl9KShuLHRoaXMuYXV0b0V4dHJhY3ROb2Rlcyksd2UuaXNFbXB0eSh0aGlzLmhpZXJhcmNoeS5saWJyYXJ5RnVuY3Rpb25zKXx8dGhpcy5idWlsZFN1YmhpZXJhcmNoaWVzRm9yTmVlZGVkRnVuY3Rpb25zKGkpLHQ9PT1nQXQmJndlLmZvck93bih0aGlzLmhpZXJhcmNoeS5saWJyYXJ5RnVuY3Rpb25zLCgodCxlKT0+e2NvbnN0IGk9dC5ub2RlLG89dGhpcy5nZXRPckNyZWF0ZVJlbmRlck5vZGVCeU5hbWUoaS5uYW1lKTtuLmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0LnB1c2gobyksby5ub2RlLmluY2x1ZGU9YkF0LkVYQ0xVREUsci5yZW1vdmVOb2RlKGkubmFtZSl9KSk7bGV0IGw9bi5ub2RlLnBhcmVudE5vZGU7aWYoIWwpcmV0dXJuO2xldCBjPXRoaXMuaW5kZXhbbC5uYW1lXSx1PSh0LC4uLmUpPT5lLmNvbmNhdChbdD8iSU4iOiJPVVQiXSkuam9pbigifn4iKSxoPXRoaXMuaGllcmFyY2h5LmdldEJyaWRnZWdyYXBoKHQpLGQ9e2luOnt9LG91dDp7fSxjb250cm9sOnt9fTt3ZS5lYWNoKGguZWRnZXMoKSwodD0+e2xldCBlPSEhaS5ub2RlKHQudyksbj1lP3Qudjp0Lnc7aC5lZGdlKHQpLm51bVJlZ3VsYXJFZGdlcz9lP2Qub3V0W25dPShkLm91dFtuXXx8MCkrMTpkLmluW25dPShkLmluW25dfHwwKSsxOmQuY29udHJvbFtuXT0oZC5jb250cm9sW25dfHwwKSsxfSkpO2xldCBwPXRoaXMuaGllcmFyY2h5LmdldE5vZGVNYXAoKTt3ZS5lYWNoKGguZWRnZXMoKSwobj0+e2xldCBvPWguZWRnZShuKSxhPSEhaS5ub2RlKG4udyksW3MsZl09YT9bbi53LG4udl06W24udixuLnddLG09dGhpcy5pbmRleFtzXSxnPXRoaXMuaW5kZXhbZl0sXz1nP2cubm9kZTpwW2ZdLHk9IW8ubnVtUmVndWxhckVkZ2VzJiZkLmNvbnRyb2xbZl0+NCxbLHZdPWE/W2UuaW5Bbm5vdGF0aW9ucyxtLmluQW5ub3RhdGlvbnNdOltlLm91dEFubm90YXRpb25zLG0ub3V0QW5ub3RhdGlvbnNdLGI9bnVsbCx4PSExO2lmKCEoKGE/ZC5vdXQ6ZC5pbilbZl0+NCkmJiF5JiZtLmlzSW5Db3JlKCkpe2xldCBlPWU9PmMuY29yZUdyYXBoLmVkZ2UoYT97djplLHc6dH06e3Y6dCx3OmV9KTtiPWUoZiksYnx8KGI9ZSh1KGEsZixsLm5hbWUpKSkseD0hIWJ9bGV0IHc9ITE7aWYoYiYmIW8ubnVtUmVndWxhckVkZ2VzKXtsZXQgdD1iLGU9Yy5ub2RlO2Zvcig7dC5hZGpvaW5pbmdNZXRhZWRnZTspdD10LmFkam9pbmluZ01ldGFlZGdlLGU9ZS5wYXJlbnROb2RlO2xldCBuPXRoaXMuaGllcmFyY2h5LmdldFRvcG9sb2dpY2FsT3JkZXJpbmcoZS5uYW1lKSxpPXQubWV0YWVkZ2U7dz1uW2kudl0+bltpLnddfWlmKHg9eCYmIXcsIXgpcmV0dXJuIHZvaWQgdi5wdXNoKG5ldyAkQXQoXyxnLG5ldyBRQXQobyksS0F0LlNIT1JUQ1VULGEpKTtsZXQgUz11KGEsdCksTT11KGEsZix0KSxFPXIubm9kZShNKTtpZighRSl7bGV0IHQ9ci5ub2RlKFMpO3R8fCh0PW5ldyBKQXQoe25hbWU6Uyx0eXBlOnZBdC5CUklER0UsaXNHcm91cE5vZGU6ITEsY2FyZGluYWxpdHk6MCxwYXJlbnROb2RlOm51bGwsc3RhdHM6bnVsbCxpbmNsdWRlOmJBdC5VTlNQRUNJRklFRCxpbmJvdW5kOmEsbm9kZUF0dHJpYnV0ZXM6e319KSx0aGlzLmluZGV4W1NdPXQsci5zZXROb2RlKFMsdCkpLEU9bmV3IEpBdCh7bmFtZTpNLHR5cGU6dkF0LkJSSURHRSxpc0dyb3VwTm9kZTohMSxjYXJkaW5hbGl0eToxLHBhcmVudE5vZGU6bnVsbCxzdGF0czpudWxsLGluY2x1ZGU6YkF0LlVOU1BFQ0lGSUVELGluYm91bmQ6YSxub2RlQXR0cmlidXRlczp7fX0pLHRoaXMuaW5kZXhbTV09RSxyLnNldE5vZGUoTSxFKSxyLnNldFBhcmVudChNLFMpLHQubm9kZS5jYXJkaW5hbGl0eSsrfWxldCBUPW5ldyBRQXQobyk7VC5hZGpvaW5pbmdNZXRhZWRnZT1iLGE/ci5zZXRFZGdlKE0scyxUKTpyLnNldEVkZ2UocyxNLFQpfSkpLHdlLmVhY2goWyEwLCExXSwoZT0+e2xldCBuPXUoZSx0KSxpPXIubm9kZShuKTtpJiZ3ZS5lYWNoKHIubm9kZXMoKSwobz0+e2lmKHIubm9kZShvKS5ub2RlLnR5cGU9PT12QXQuQlJJREdFKXJldHVybjtpZighKGU/IXIucHJlZGVjZXNzb3JzKG8pLmxlbmd0aDohci5zdWNjZXNzb3JzKG8pLmxlbmd0aCkpcmV0dXJuO2xldCBhPXUoZSx0LCJTVFJVQ1RVUkFMX1RBUkdFVCIpLHM9ci5ub2RlKGEpO3N8fChzPW5ldyBKQXQoe25hbWU6YSx0eXBlOnZBdC5CUklER0UsaXNHcm91cE5vZGU6ITEsY2FyZGluYWxpdHk6MSxwYXJlbnROb2RlOm51bGwsc3RhdHM6bnVsbCxpbmNsdWRlOmJBdC5VTlNQRUNJRklFRCxpbmJvdW5kOmUsbm9kZUF0dHJpYnV0ZXM6e319KSxzLnN0cnVjdHVyYWw9ITAsdGhpcy5pbmRleFthXT1zLHIuc2V0Tm9kZShhLHMpLGkubm9kZS5jYXJkaW5hbGl0eSsrLHIuc2V0UGFyZW50KGEsbikpO2xldCBsPW5ldyBRQXQobnVsbCk7bC5zdHJ1Y3R1cmFsPSEwLGwud2VpZ2h0LS0sZT9yLnNldEVkZ2UoYSxvLGwpOnIuc2V0RWRnZShvLGEsbCl9KSl9KSl9YnVpbGRTdWJoaWVyYXJjaGllc0Zvck5lZWRlZEZ1bmN0aW9ucyh0KXt3ZS5lYWNoKHQuZWRnZXMoKSwoZT0+e2xldCBuPXQuZWRnZShlKSxpPW5ldyBRQXQobik7d2UuZm9yRWFjaChpLm1ldGFlZGdlLmJhc2VFZGdlTGlzdCwodD0+e2NvbnN0IGU9dC52LnNwbGl0KG1BdCk7Zm9yKGxldCB0PWUubGVuZ3RoO3Q+PTA7dC0tKXtjb25zdCBuPWUuc2xpY2UoMCx0KSxpPXRoaXMuaGllcmFyY2h5Lm5vZGUobi5qb2luKG1BdCkpO2lmKGkpe2lmKGkudHlwZT09PXZBdC5PUCYmdGhpcy5oaWVyYXJjaHkubGlicmFyeUZ1bmN0aW9uc1tpLm9wXSlmb3IobGV0IHQ9MTt0PG4ubGVuZ3RoO3QrKyl7Y29uc3QgZT1uLnNsaWNlKDAsdCkuam9pbihtQXQpO2UmJnRoaXMuYnVpbGRTdWJoaWVyYXJjaHkoZSl9YnJlYWt9fX0pKX0pKX19Y2xhc3MgJEF0e2NvbnN0cnVjdG9yKHQsZSxuLGkscil7dGhpcy5ub2RlPXQsdGhpcy5yZW5kZXJOb2RlSW5mbz1lLHRoaXMucmVuZGVyTWV0YWVkZ2VJbmZvPW4sdGhpcy5hbm5vdGF0aW9uVHlwZT1pLHRoaXMuZHg9MCx0aGlzLmR5PTAsdGhpcy53aWR0aD0wLHRoaXMuaGVpZ2h0PTAsbiYmbi5tZXRhZWRnZSYmKHRoaXMudj1uLm1ldGFlZGdlLnYsdGhpcy53PW4ubWV0YWVkZ2UudyksdGhpcy5pc0luPXIsdGhpcy5wb2ludHM9W119fXZhciBLQXQ7IShmdW5jdGlvbih0KXt0W3QuU0hPUlRDVVQ9MF09IlNIT1JUQ1VUIix0W3QuQ09OU1RBTlQ9MV09IkNPTlNUQU5UIix0W3QuU1VNTUFSWT0yXT0iU1VNTUFSWSIsdFt0LkVMTElQU0lTPTNdPSJFTExJUFNJUyJ9KShLQXR8fChLQXQ9e30pKTtjbGFzcyBaQXR7Y29uc3RydWN0b3IoKXt0aGlzLmxpc3Q9W10sdGhpcy5ub2RlTmFtZXM9e319cHVzaCh0KXtpZih0Lm5vZGUubmFtZSBpbiB0aGlzLm5vZGVOYW1lcylyZXR1cm47aWYodGhpcy5ub2RlTmFtZXNbdC5ub2RlLm5hbWVdPSEwLHRoaXMubGlzdC5sZW5ndGg8NSlyZXR1cm4gdm9pZCB0aGlzLmxpc3QucHVzaCh0KTtsZXQgZT10aGlzLmxpc3RbdGhpcy5saXN0Lmxlbmd0aC0xXTtpZihlLmFubm90YXRpb25UeXBlPT09S0F0LkVMTElQU0lTKXtsZXQgdD1lLm5vZGU7cmV0dXJuIHZvaWQgdC5zZXROdW1Nb3JlTm9kZXMoKyt0Lm51bU1vcmVOb2Rlcyl9bGV0IG49bmV3IFNBdCgxKTt0aGlzLmxpc3QucHVzaChuZXcgJEF0KG4sbmV3IEpBdChuKSxudWxsLEtBdC5FTExJUFNJUyx0LmlzSW4pKX19Y2xhc3MgSkF0e2NvbnN0cnVjdG9yKHQpe2lmKHRoaXMubm9kZT10LHRoaXMuZXhwYW5kZWQ9ITEsdGhpcy5pbkFubm90YXRpb25zPW5ldyBaQXQsdGhpcy5vdXRBbm5vdGF0aW9ucz1uZXcgWkF0LHRoaXMueD0wLHRoaXMueT0wLHRoaXMud2lkdGg9MCx0aGlzLmhlaWdodD0wLHRoaXMuaW5ib3hXaWR0aD0wLHRoaXMub3V0Ym94V2lkdGg9MCx0aGlzLmV4Y2x1ZGVkPSExLHRoaXMuc3RydWN0dXJhbD0hMSx0aGlzLmxhYmVsT2Zmc2V0PTAsdGhpcy5yYWRpdXM9MCx0aGlzLmxhYmVsSGVpZ2h0PTAsdGhpcy5wYWRkaW5nVG9wPTAsdGhpcy5wYWRkaW5nTGVmdD0wLHRoaXMucGFkZGluZ1JpZ2h0PTAsdGhpcy5wYWRkaW5nQm90dG9tPTAsdGhpcy5pc0luRXh0cmFjdD0hMSx0aGlzLmlzT3V0RXh0cmFjdD0hMSx0aGlzLmNvcmVCb3g9e3dpZHRoOjAsaGVpZ2h0OjB9LHRoaXMuaXNGYWRlZE91dD0hMSx0aGlzLmRpc3BsYXlOYW1lPXQubmFtZS5zdWJzdHJpbmcodC5uYW1lLmxhc3RJbmRleE9mKG1BdCkrMSksdC50eXBlPT09dkF0Lk1FVEEmJnQuYXNzb2NpYXRlZEZ1bmN0aW9uKXtjb25zdCB0PXRoaXMuZGlzcGxheU5hbWUubWF0Y2goWUF0KTt0P3RoaXMuZGlzcGxheU5hbWU9dFsxXTp3ZS5zdGFydHNXaXRoKHRoaXMuZGlzcGxheU5hbWUsX0F0KSYmKHRoaXMuZGlzcGxheU5hbWU9dGhpcy5kaXNwbGF5TmFtZS5zdWJzdHJpbmcoX0F0Lmxlbmd0aCkpfX1pc0luQ29yZSgpe3JldHVybiF0aGlzLmlzSW5FeHRyYWN0JiYhdGhpcy5pc091dEV4dHJhY3QmJiF0aGlzLmlzTGlicmFyeUZ1bmN0aW9ufX1jbGFzcyBRQXR7Y29uc3RydWN0b3IodCl7dGhpcy5tZXRhZWRnZT10LHRoaXMuYWRqb2luaW5nTWV0YWVkZ2U9bnVsbCx0aGlzLnN0cnVjdHVyYWw9ITEsdGhpcy53ZWlnaHQ9MSx0aGlzLmlzRmFkZWRPdXQ9ITF9fWZ1bmN0aW9uIHRrdCh0LGUsbixpLHIpe2xldCBvPW5ldyAkQXQoZSxuLGksciwhMCk7dC5pbkFubm90YXRpb25zLnB1c2gobyl9ZnVuY3Rpb24gZWt0KHQsZSxuLGkscil7bGV0IG89bmV3ICRBdChlLG4saSxyLCExKTt0Lm91dEFubm90YXRpb25zLnB1c2gobyl9Y2xhc3Mgbmt0IGV4dGVuZHMgSkF0e2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCk7bGV0IG49dC5tZXRhZ3JhcGguZ3JhcGgoKTt0aGlzLmNvcmVHcmFwaD1SQXQobi5uYW1lLHlBdC5DT1JFLGUpLHRoaXMuaW5FeHRyYWN0Qm94PXt3aWR0aDowLGhlaWdodDowfSx0aGlzLm91dEV4dHJhY3RCb3g9e3dpZHRoOjAsaGVpZ2h0OjB9LHRoaXMubGlicmFyeUZ1bmN0aW9uc0JveD17d2lkdGg6MCxoZWlnaHQ6MH0sdGhpcy5pc29sYXRlZEluRXh0cmFjdD1bXSx0aGlzLmlzb2xhdGVkT3V0RXh0cmFjdD1bXSx0aGlzLmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0PVtdfX1mdW5jdGlvbiBpa3QodCxlKXt0LmNvcmVHcmFwaCYmKGZ1bmN0aW9uIG4odCxlKXt3ZS5lYWNoKHQubm9kZXMoKSwobj0+e2xldCBpPXQubm9kZShuKTtpZihpLmV4cGFuZGVkPWU+MSxlPjApc3dpdGNoKGkubm9kZS50eXBlKXtjYXNlIHZBdC5NRVRBOmNhc2UgdkF0LlNFUklFUzppa3QoaSxlLTEpfX0pKX0pKHQuY29yZUdyYXBoLGUpfWZ1bmN0aW9uIHJrdCh0LGUsbil7bGV0IGk9dC5ub2RlKGUpLHI9dC5ub2RlKG4pLG89dC5lZGdlKGUsbik7KGkubm9kZS5pbmNsdWRlIT09YkF0LklOQ0xVREUmJnIubm9kZS5pbmNsdWRlIT09YkF0LklOQ0xVREV8fGkubm9kZS5pbmNsdWRlPT09YkF0LkVYQ0xVREV8fHIubm9kZS5pbmNsdWRlPT09YkF0LkVYQ0xVREUpJiYoZWt0KGksci5ub2RlLHIsbyxLQXQuU0hPUlRDVVQpLHRrdChyLGkubm9kZSxpLG8sS0F0LlNIT1JUQ1VUKSx0LnJlbW92ZUVkZ2UoZSxuKSl9ZnVuY3Rpb24gb2t0KHQsZSxuKXtsZXQgaT10LmNvcmVHcmFwaCxyPWkubm9kZShlKTtyLmlzT3V0RXh0cmFjdD0hMCx3ZS5lYWNoKGkucHJlZGVjZXNzb3JzKGUpLCgodCxuKT0+e3JrdChpLHQsZSl9KSksd2UuZWFjaChpLnN1Y2Nlc3NvcnMoZSksKCh0LG4pPT57cmt0KGksZSx0KX0pKSwwPT09aS5uZWlnaGJvcnMoZSkubGVuZ3RoJiYoci5ub2RlLmluY2x1ZGU9YkF0LkVYQ0xVREUsdC5pc29sYXRlZE91dEV4dHJhY3QucHVzaChyKSxpLnJlbW92ZU5vZGUoZSkpfWZ1bmN0aW9uIGFrdCh0LGUsbil7bGV0IGk9dC5jb3JlR3JhcGgscj1pLm5vZGUoZSk7ci5pc0luRXh0cmFjdD0hMCx3ZS5lYWNoKGkuc3VjY2Vzc29ycyhlKSwoKHQsbik9Pntya3QoaSxlLHQpfSkpLHdlLmVhY2goaS5wcmVkZWNlc3NvcnMoZSksKCh0LG4pPT57cmt0KGksdCxlKX0pKSwwPT09aS5uZWlnaGJvcnMoZSkubGVuZ3RoJiYoci5ub2RlLmluY2x1ZGU9YkF0LkVYQ0xVREUsdC5pc29sYXRlZEluRXh0cmFjdC5wdXNoKHIpLGkucmVtb3ZlTm9kZShlKSl9ZnVuY3Rpb24gc2t0KHQsZSl7aWYodC50eXBlPT09dkF0Lk9QKXtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKylpZih0Lm9wPT09ZVtuXSlyZXR1cm4hMH1lbHNlIGlmKHQudHlwZT09PXZBdC5NRVRBKXtsZXQgbj10LmdldFJvb3RPcCgpO2lmKG4pZm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0KyspaWYobi5vcD09PWVbdF0pcmV0dXJuITB9cmV0dXJuITF9Y29uc3QgbGt0PXthbmltYXRpb246e2R1cmF0aW9uOjI1MH0sZ3JhcGg6e21ldGE6e25vZGVTZXA6NSxyYW5rU2VwOjI1LGVkZ2VTZXA6NX0sc2VyaWVzOntub2RlU2VwOjUscmFua1NlcDoyNSxlZGdlU2VwOjV9LHBhZGRpbmc6e3BhZGRpbmdUb3A6NDAscGFkZGluZ0xlZnQ6MjB9fSxzdWJzY2VuZTp7bWV0YTp7cGFkZGluZ1RvcDoxMCxwYWRkaW5nQm90dG9tOjEwLHBhZGRpbmdMZWZ0OjEwLHBhZGRpbmdSaWdodDoxMCxsYWJlbEhlaWdodDoyMCxleHRyYWN0WE9mZnNldDoxNSxleHRyYWN0WU9mZnNldDoyMH0sc2VyaWVzOntwYWRkaW5nVG9wOjEwLHBhZGRpbmdCb3R0b206MTAscGFkZGluZ0xlZnQ6MTAscGFkZGluZ1JpZ2h0OjEwLGxhYmVsSGVpZ2h0OjEwfX0sbm9kZVNpemU6e21ldGE6e3JhZGl1czo1LHdpZHRoOjYwLG1heExhYmVsV2lkdGg6NTIsaGVpZ2h0OkRNKCkuZG9tYWluKFsxLDIwMF0pLnJhbmdlKFsxNSw2MF0pLmNsYW1wKCEwKSxleHBhbmRCdXR0b25SYWRpdXM6M30sb3A6e3dpZHRoOjE1LGhlaWdodDo2LHJhZGl1czozLGxhYmVsT2Zmc2V0Oi04LG1heExhYmVsV2lkdGg6MzB9LHNlcmllczp7ZXhwYW5kZWQ6e3JhZGl1czoxMCxsYWJlbE9mZnNldDowfSx2ZXJ0aWNhbDp7d2lkdGg6MTYsaGVpZ2h0OjEzLGxhYmVsT2Zmc2V0Oi0xM30saG9yaXpvbnRhbDp7d2lkdGg6MjQsaGVpZ2h0OjgscmFkaXVzOjEwLGxhYmVsT2Zmc2V0Oi0xMH19LGJyaWRnZTp7d2lkdGg6MjAsaGVpZ2h0OjIwLHJhZGl1czoyLGxhYmVsT2Zmc2V0OjB9fSxzaG9ydGN1dFNpemU6e29wOnt3aWR0aDoxMCxoZWlnaHQ6NH0sbWV0YTp7d2lkdGg6MTIsaGVpZ2h0OjQscmFkaXVzOjF9LHNlcmllczp7d2lkdGg6MTQsaGVpZ2h0OjR9fSxhbm5vdGF0aW9uczp7aW5ib3hXaWR0aDo1MCxvdXRib3hXaWR0aDo1MCx4T2Zmc2V0OjEwLHlPZmZzZXQ6MyxsYWJlbE9mZnNldDoyLG1heExhYmVsV2lkdGg6NDB9LGNvbnN0YW50OntzaXplOnt3aWR0aDo0LGhlaWdodDo0fX0sc2VyaWVzOnttYXhTdGFja0NvdW50OjMscGFyYWxsZWxTdGFja09mZnNldFJhdGlvOi4yLHRvd2VyU3RhY2tPZmZzZXRSYXRpbzouNX0sbWluaW1hcDp7c2l6ZToxNTB9fSxja3Q9MTQwO2Z1bmN0aW9uIHVrdCh0KXt0Lm5vZGUuaXNHcm91cE5vZGUmJihmdW5jdGlvbiBlKHQpe2xldCBlPXQuY29yZUdyYXBoLm5vZGVzKCkubWFwKChlPT50LmNvcmVHcmFwaC5ub2RlKGUpKSkuY29uY2F0KHQuaXNvbGF0ZWRJbkV4dHJhY3QsdC5pc29sYXRlZE91dEV4dHJhY3QsdC5saWJyYXJ5RnVuY3Rpb25zRXh0cmFjdCk7d2UuZWFjaChlLCh0PT57c3dpdGNoKHQubm9kZS50eXBlKXtjYXNlIHZBdC5PUDp3ZS5leHRlbmQodCxsa3Qubm9kZVNpemUub3ApO2JyZWFrO2Nhc2UgdkF0LkJSSURHRTp3ZS5leHRlbmQodCxsa3Qubm9kZVNpemUuYnJpZGdlKTticmVhaztjYXNlIHZBdC5NRVRBOnQuZXhwYW5kZWQ/dWt0KHQpOih3ZS5leHRlbmQodCxsa3Qubm9kZVNpemUubWV0YSksdC5oZWlnaHQ9bGt0Lm5vZGVTaXplLm1ldGEuaGVpZ2h0KHQubm9kZS5jYXJkaW5hbGl0eSkpO2JyZWFrO2Nhc2UgdkF0LlNFUklFUzp0LmV4cGFuZGVkPyh3ZS5leHRlbmQodCxsa3Qubm9kZVNpemUuc2VyaWVzLmV4cGFuZGVkKSx1a3QodCkpOndlLmV4dGVuZCh0LHQubm9kZS5oYXNOb25Db250cm9sRWRnZXM/bGt0Lm5vZGVTaXplLnNlcmllcy52ZXJ0aWNhbDpsa3Qubm9kZVNpemUuc2VyaWVzLmhvcml6b250YWwpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoIlVucmVjb2duaXplZCBub2RlIHR5cGU6ICIrdC5ub2RlLnR5cGUpfXQuZXhwYW5kZWR8fChmdW5jdGlvbiBlKHQpe3QuaW5ib3hXaWR0aD10LmluQW5ub3RhdGlvbnMubGlzdC5sZW5ndGg+MD9sa3QuYW5ub3RhdGlvbnMuaW5ib3hXaWR0aDowLHQub3V0Ym94V2lkdGg9dC5vdXRBbm5vdGF0aW9ucy5saXN0Lmxlbmd0aD4wP2xrdC5hbm5vdGF0aW9ucy5vdXRib3hXaWR0aDowLHQuY29yZUJveC53aWR0aD10LndpZHRoLHQuY29yZUJveC5oZWlnaHQ9dC5oZWlnaHQsdC53aWR0aD1NYXRoLm1heCh0LmNvcmVCb3gud2lkdGgrdC5pbmJveFdpZHRoK3Qub3V0Ym94V2lkdGgsMyp0LmRpc3BsYXlOYW1lLmxlbmd0aCl9KSh0KSwoZnVuY3Rpb24gbih0KXtpZih0LmV4cGFuZGVkKXJldHVybjtsZXQgZT10LmluQW5ub3RhdGlvbnMubGlzdCxuPXQub3V0QW5ub3RhdGlvbnMubGlzdDt3ZS5lYWNoKGUsKHQ9PmRrdCh0KSkpLHdlLmVhY2gobiwodD0+ZGt0KHQpKSk7bGV0IGk9bGt0LmFubm90YXRpb25zLHI9d2UucmVkdWNlKGUsKChlLG4scik9PntsZXQgbz1yPjA/aS55T2Zmc2V0OjA7cmV0dXJuIG4uZHg9LSh0LmNvcmVCb3gud2lkdGgrbi53aWR0aCkvMi1pLnhPZmZzZXQsbi5keT1lK28rbi5oZWlnaHQvMixlK28rbi5oZWlnaHR9KSwwKTt3ZS5lYWNoKGUsKHQ9Pnt0LmR5LT1yLzIsdC5sYWJlbE9mZnNldD1pLmxhYmVsT2Zmc2V0fSkpO2xldCBvPXdlLnJlZHVjZShuLCgoZSxuLHIpPT57bGV0IG89cj4wP2kueU9mZnNldDowO3JldHVybiBuLmR4PSh0LmNvcmVCb3gud2lkdGgrbi53aWR0aCkvMitpLnhPZmZzZXQsbi5keT1lK28rbi5oZWlnaHQvMixlK28rbi5oZWlnaHR9KSwwKTt3ZS5lYWNoKG4sKHQ9Pnt0LmR5LT1vLzIsdC5sYWJlbE9mZnNldD1pLmxhYmVsT2Zmc2V0fSkpO2xldCBhPU1hdGgubWluKHQuaGVpZ2h0LzItdC5yYWRpdXMsci8yKTthPWE8MD8wOmE7bGV0IHM9RE0oKS5kb21haW4oWzAsZS5sZW5ndGgtMV0pLnJhbmdlKFstYSxhXSk7d2UuZWFjaChlLCgobixpKT0+e24ucG9pbnRzPVt7ZHg6bi5keCtuLndpZHRoLzIsZHk6bi5keX0se2R4Oi10LmNvcmVCb3gud2lkdGgvMixkeTplLmxlbmd0aD4xP3MoaSk6MH1dfSkpO2xldCBsPU1hdGgubWluKHQuaGVpZ2h0LzItdC5yYWRpdXMsby8yKTtsPWw8MD8wOmw7bGV0IGM9RE0oKS5kb21haW4oWzAsbi5sZW5ndGgtMV0pLnJhbmdlKFstbCxsXSk7d2UuZWFjaChuLCgoZSxpKT0+e2UucG9pbnRzPVt7ZHg6dC5jb3JlQm94LndpZHRoLzIsZHk6bi5sZW5ndGg+MT9jKGkpOjB9LHtkeDplLmR4LWUud2lkdGgvMixkeTplLmR5fV19KSksdC5oZWlnaHQ9TWF0aC5tYXgodC5oZWlnaHQscixvKX0pKHQpfSkpfSkodCksdC5ub2RlLnR5cGU9PT12QXQuTUVUQT8oZnVuY3Rpb24gbih0KXtsZXQgZT1sa3Quc3Vic2NlbmUubWV0YTt3ZS5leHRlbmQodCxlKSx3ZS5leHRlbmQodC5jb3JlQm94LGhrdCh0LmNvcmVHcmFwaCxsa3QuZ3JhcGgubWV0YSkpO2xldCBuPXQuaXNvbGF0ZWRJbkV4dHJhY3QubGVuZ3RoP3dlLm1heEJ5KHQuaXNvbGF0ZWRJbkV4dHJhY3QsKHQ9PnQud2lkdGgpKS53aWR0aDpudWxsO3QuaW5FeHRyYWN0Qm94LndpZHRoPW51bGwhPW4/bjowLHQuaW5FeHRyYWN0Qm94LmhlaWdodD13ZS5yZWR1Y2UodC5pc29sYXRlZEluRXh0cmFjdCwoKHQsbixpKT0+e2xldCByPWk+MD9lLmV4dHJhY3RZT2Zmc2V0OjA7cmV0dXJuIG4ueD0wLG4ueT10K3Irbi5oZWlnaHQvMix0K3Irbi5oZWlnaHR9KSwwKTtsZXQgaT10Lmlzb2xhdGVkT3V0RXh0cmFjdC5sZW5ndGg/d2UubWF4QnkodC5pc29sYXRlZE91dEV4dHJhY3QsKHQ9PnQud2lkdGgpKS53aWR0aDpudWxsO3Qub3V0RXh0cmFjdEJveC53aWR0aD1udWxsIT1pP2k6MCx0Lm91dEV4dHJhY3RCb3guaGVpZ2h0PXdlLnJlZHVjZSh0Lmlzb2xhdGVkT3V0RXh0cmFjdCwoKHQsbixpKT0+e2xldCByPWk+MD9lLmV4dHJhY3RZT2Zmc2V0OjA7cmV0dXJuIG4ueD0wLG4ueT10K3Irbi5oZWlnaHQvMix0K3Irbi5oZWlnaHR9KSwwKTtsZXQgcj10LmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0Lmxlbmd0aD93ZS5tYXhCeSh0LmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0LCh0PT50LndpZHRoKSkud2lkdGg6bnVsbDt0LmxpYnJhcnlGdW5jdGlvbnNCb3gud2lkdGg9bnVsbCE9cj9yOjAsdC5saWJyYXJ5RnVuY3Rpb25zQm94LmhlaWdodD13ZS5yZWR1Y2UodC5saWJyYXJ5RnVuY3Rpb25zRXh0cmFjdCwoKHQsbixpKT0+e2xldCByPWk+MD9lLmV4dHJhY3RZT2Zmc2V0OjA7cmV0dXJuIG4ueD0wLG4ueT10K3Irbi5oZWlnaHQvMix0K3Irbi5oZWlnaHR9KSwwKTtsZXQgbz0wO3QuaXNvbGF0ZWRJbkV4dHJhY3QubGVuZ3RoPjAmJm8rKyx0Lmlzb2xhdGVkT3V0RXh0cmFjdC5sZW5ndGg+MCYmbysrLHQubGlicmFyeUZ1bmN0aW9uc0V4dHJhY3QubGVuZ3RoPjAmJm8rKyx0LmNvcmVHcmFwaC5ub2RlQ291bnQoKT4wJiZvKys7bGV0IGE9bzw9MT8wOm8qbGt0LnN1YnNjZW5lLm1ldGEuZXh0cmFjdFhPZmZzZXQ7Y29uc3Qgcz1NYXRoLm1heChja3QsdC5pbkV4dHJhY3RCb3gud2lkdGgrdC5vdXRFeHRyYWN0Qm94LndpZHRoKTt0LmNvcmVCb3gud2lkdGgrPXMrYSt0LmxpYnJhcnlGdW5jdGlvbnNCb3gud2lkdGgrYSx0LmNvcmVCb3guaGVpZ2h0PWUubGFiZWxIZWlnaHQrTWF0aC5tYXgodC5pbkV4dHJhY3RCb3guaGVpZ2h0LHQuY29yZUJveC5oZWlnaHQsdC5saWJyYXJ5RnVuY3Rpb25zQm94LmhlaWdodCx0Lm91dEV4dHJhY3RCb3guaGVpZ2h0KSx0LndpZHRoPXQuY29yZUJveC53aWR0aCtlLnBhZGRpbmdMZWZ0K2UucGFkZGluZ1JpZ2h0LHQuaGVpZ2h0PXQucGFkZGluZ1RvcCt0LmNvcmVCb3guaGVpZ2h0K3QucGFkZGluZ0JvdHRvbX0pKHQpOnQubm9kZS50eXBlPT09dkF0LlNFUklFUyYmKGZ1bmN0aW9uIGkodCl7bGV0IGU9dC5jb3JlR3JhcGgsbj1sa3Quc3Vic2NlbmUuc2VyaWVzO3dlLmV4dGVuZCh0LG4pLHdlLmV4dGVuZCh0LmNvcmVCb3gsaGt0KHQuY29yZUdyYXBoLGxrdC5ncmFwaC5zZXJpZXMpKSx3ZS5lYWNoKGUubm9kZXMoKSwodD0+e2Uubm9kZSh0KS5leGNsdWRlZD0hMX0pKSx0LndpZHRoPXQuY29yZUJveC53aWR0aCtuLnBhZGRpbmdMZWZ0K24ucGFkZGluZ1JpZ2h0LHQuaGVpZ2h0PXQuY29yZUJveC5oZWlnaHQrbi5wYWRkaW5nVG9wK24ucGFkZGluZ0JvdHRvbX0pKHQpfWZ1bmN0aW9uIGhrdCh0LGUpe3dlLmV4dGVuZCh0LmdyYXBoKCkse25vZGVzZXA6ZS5ub2RlU2VwLHJhbmtzZXA6ZS5yYW5rU2VwLGVkZ2VzZXA6ZS5lZGdlU2VwfSk7bGV0IG49W107aWYod2UuZWFjaCh0Lm5vZGVzKCksKGU9Pnt0Lm5vZGUoZSkubm9kZS50eXBlPT09dkF0LkJSSURHRXx8bi5wdXNoKGUpfSkpLCFuLmxlbmd0aClyZXR1cm57d2lkdGg6MCxoZWlnaHQ6MH07R0N0LmxheW91dCh0KTtsZXQgaT0xLzAscj0xLzAsbz0tMS8wLGE9LTEvMDtyZXR1cm4gd2UuZWFjaChuLChlPT57bGV0IG49dC5ub2RlKGUpLHM9LjUqbi53aWR0aCxsPW4ueC1zLGM9bi54K3M7aT1sPGk/bDppLG89Yz5vP2M6bztsZXQgdT0uNSpuLmhlaWdodCxoPW4ueS11LGQ9bi55K3U7cj1oPHI/aDpyLGE9ZD5hP2Q6YX0pKSx3ZS5lYWNoKHQuZWRnZXMoKSwoZT0+e2xldCBuPXQuZWRnZShlKTtpZihuLnN0cnVjdHVyYWwpcmV0dXJuO2xldCBzPXQubm9kZShuLm1ldGFlZGdlLnYpLGw9dC5ub2RlKG4ubWV0YWVkZ2Uudyk7aWYoMz09PW4ucG9pbnRzLmxlbmd0aCYmKGZ1bmN0aW9uIGModCl7bGV0IGU9Zmt0KHRbMF0sdFsxXSk7Zm9yKGxldCBuPTE7bjx0Lmxlbmd0aC0xO24rKyl7bGV0IGk9Zmt0KHRbbl0sdFtuKzFdKTtpZihNYXRoLmFicyhpLWUpPjEpcmV0dXJuITE7ZT1pfXJldHVybiEwfSkobi5wb2ludHMpKXtpZihudWxsIT1zKXtsZXQgdD1zLmV4cGFuZGVkP3MueDpwa3Qocyk7bi5wb2ludHNbMF0ueD10fWlmKG51bGwhPWwpe2xldCB0PWwuZXhwYW5kZWQ/bC54OnBrdChsKTtuLnBvaW50c1syXS54PXR9bi5wb2ludHM9W24ucG9pbnRzWzBdLG4ucG9pbnRzWzFdXX1udWxsIT1sJiYobi5wb2ludHNbbi5wb2ludHMubGVuZ3RoLTFdPW1rdChuLnBvaW50c1tuLnBvaW50cy5sZW5ndGgtMl0sbCkpLG51bGwhPXMmJihuLnBvaW50c1swXT1ta3Qobi5wb2ludHNbMV0scykpLHdlLmVhY2gobi5wb2ludHMsKHQ9PntpPXQueDxpP3QueDppLG89dC54Pm8/dC54Om8scj10Lnk8cj90Lnk6cixhPXQueT5hP3QueTphfSkpfSkpLHdlLmVhY2godC5ub2RlcygpLChlPT57bGV0IG49dC5ub2RlKGUpO24ueC09aSxuLnktPXJ9KSksd2UuZWFjaCh0LmVkZ2VzKCksKGU9Pnt3ZS5lYWNoKHQuZWRnZShlKS5wb2ludHMsKHQ9Pnt0LngtPWksdC55LT1yfSkpfSkpLHt3aWR0aDpvLWksaGVpZ2h0OmEtcn19ZnVuY3Rpb24gZGt0KHQpe3N3aXRjaCh0LmFubm90YXRpb25UeXBlKXtjYXNlIEtBdC5DT05TVEFOVDp3ZS5leHRlbmQodCxsa3QuY29uc3RhbnQuc2l6ZSk7YnJlYWs7Y2FzZSBLQXQuU0hPUlRDVVQ6aWYodC5ub2RlLnR5cGU9PT12QXQuT1Apd2UuZXh0ZW5kKHQsbGt0LnNob3J0Y3V0U2l6ZS5vcCk7ZWxzZSBpZih0Lm5vZGUudHlwZT09PXZBdC5NRVRBKXdlLmV4dGVuZCh0LGxrdC5zaG9ydGN1dFNpemUubWV0YSk7ZWxzZXtpZih0Lm5vZGUudHlwZSE9PXZBdC5TRVJJRVMpdGhyb3cgRXJyb3IoIkludmFsaWQgbm9kZSB0eXBlOiAiK3Qubm9kZS50eXBlKTt3ZS5leHRlbmQodCxsa3Quc2hvcnRjdXRTaXplLnNlcmllcyl9YnJlYWs7Y2FzZSBLQXQuU1VNTUFSWTp3ZS5leHRlbmQodCxsa3QuY29uc3RhbnQuc2l6ZSl9fWZ1bmN0aW9uIHBrdCh0KXtyZXR1cm4gdC5leHBhbmRlZD90Lng6dC54LXQud2lkdGgvMisodC5pbkFubm90YXRpb25zLmxpc3QubGVuZ3RoP3QuaW5ib3hXaWR0aDowKSt0LmNvcmVCb3gud2lkdGgvMn1mdW5jdGlvbiBma3QodCxlKXtyZXR1cm4gMTgwKk1hdGguYXRhbigoZS55LXQueSkvKGUueC10LngpKS9NYXRoLlBJfWZ1bmN0aW9uIG1rdCh0LGUpe2xldCBuLGkscj1lLmV4cGFuZGVkP2UueDpwa3QoZSksbz1lLnksYT10LngtcixzPXQueS1vLGw9ZS5leHBhbmRlZD9lLndpZHRoOmUuY29yZUJveC53aWR0aCxjPWUuZXhwYW5kZWQ/ZS5oZWlnaHQ6ZS5jb3JlQm94LmhlaWdodDtyZXR1cm4gTWF0aC5hYnMocykqbC8yPk1hdGguYWJzKGEpKmMvMj8oczwwJiYoYz0tYyksbj0wPT09cz8wOmMvMiphL3MsaT1jLzIpOihhPDAmJihsPS1sKSxuPWwvMixpPTA9PT1hPzA6bC8yKnMvYSkse3g6cituLHk6bytpfX1jb25zdCBna3Q9WkN0LF9rdD0kQ3Q7bGV0IHlrdD1be2JhY2tncm91bmRfY29sb3I6IiNDQzJGMkMiLGxhYmVsOiJOYU4ifSx7YmFja2dyb3VuZF9jb2xvcjoiI0ZGOEQwMCIsbGFiZWw6Ii3iiJ4ifSx7YmFja2dyb3VuZF9jb2xvcjoiI0VBRUFFQSIsbGFiZWw6Ii0ifSx7YmFja2dyb3VuZF9jb2xvcjoiI0E1QTVBNSIsbGFiZWw6IjAifSx7YmFja2dyb3VuZF9jb2xvcjoiIzI2MjYyNiIsbGFiZWw6IisifSx7YmFja2dyb3VuZF9jb2xvcjoiIzAwM0VENCIsbGFiZWw6IiviiJ4ifV07ZnVuY3Rpb24gdmt0KHQsZSxuKXtudWxsIT10LmF0dHIoInRyYW5zZm9ybSIpJiYodD10LnRyYW5zaXRpb24oInBvc2l0aW9uIikpLHQuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrZSsiLCIrbisiKSIpfWZ1bmN0aW9uIGJrdCh0LGUsbixpLHIpe3QudHJhbnNpdGlvbigpLmF0dHIoIngiLGUtaS8yKS5hdHRyKCJ5IixuLXIvMikuYXR0cigid2lkdGgiLGkpLmF0dHIoImhlaWdodCIscil9ZnVuY3Rpb24geGt0KHQsZSxuLGkscil7dC50cmFuc2l0aW9uKCkuYXR0cigiY3giLGUpLmF0dHIoImN5IixuKS5hdHRyKCJyeCIsaS8yKS5hdHRyKCJyeSIsci8yKX1mdW5jdGlvbiB3a3QodCxlKXtyZXR1cm4gZT90LnRvRml4ZWQoMCk6TWF0aC5hYnModCk+PTE/dC50b0ZpeGVkKDEpOnQudG9FeHBvbmVudGlhbCgxKX1sZXQgU2t0PWNsYXNzIGV4dGVuZHModHIoeWUpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5zcGVjaWZpY0hlYWx0aFBpbGxTdGVwPTAsdGhpcy5oZWFsdGhQaWxsRW50cmllcz15a3R9cmVhZHkoKXtzdXBlci5yZWFkeSgpO3ZhciB0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYWluQ29udGFpbmVyIiksZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJ0Zi1kYXNoYm9hcmQtbGF5b3V0IC5zY3JvbGxiYXIiKTt0JiZlJiYodC5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIixlLnN0eWxlLm92ZXJmbG93PSJoaWRkZW4iKX1faGVhbHRoUGlsbHNBdmFpbGFibGUodCxlKXtyZXR1cm4gdCYmZX1fY29tcHV0ZVRlbnNvckNvdW50U3RyaW5nKHQsZSl7cmV0dXJuIHQ/dFtlXS50b0ZpeGVkKDApOiIifWdldCBoZWFsdGhQaWxsVmFsdWVzRm9yU2VsZWN0ZWROb2RlKCl7dmFyIHQ9dGhpcy5zZWxlY3RlZE5vZGU7aWYodGhpcy5hcmVIZWFsdGhQaWxsc0xvYWRpbmcpcmV0dXJuIG51bGw7aWYoIXQpcmV0dXJuIG51bGw7Y29uc3QgZT10aGlzLm5vZGVOYW1lc1RvSGVhbHRoUGlsbHNbdF07aWYoIWUpcmV0dXJuIG51bGw7Y29uc3Qgbj1lW3RoaXMuYWxsU3RlcHNNb2RlRW5hYmxlZD8wOnRoaXMuaGVhbHRoUGlsbFN0ZXBJbmRleF07cmV0dXJuIG4/bi52YWx1ZS5zbGljZSgyLDgpOm51bGx9Z2V0IF9jdXJyZW50U3RlcERpc3BsYXlWYWx1ZSgpe3ZhciB0PXRoaXMubm9kZU5hbWVzVG9IZWFsdGhQaWxscyxlPXRoaXMuaGVhbHRoUGlsbFN0ZXBJbmRleCxuPXRoaXMuYXJlSGVhbHRoUGlsbHNMb2FkaW5nO2lmKHRoaXMuYWxsU3RlcHNNb2RlRW5hYmxlZClyZXR1cm4gdGhpcy5zcGVjaWZpY0hlYWx0aFBpbGxTdGVwLnRvRml4ZWQoMCk7aWYobilyZXR1cm4gMDtmb3IobGV0IG4gaW4gdClyZXR1cm4gdFtuXVtlXS5zdGVwLnRvRml4ZWQoMCk7cmV0dXJuIDB9Z2V0IF9iaWdnZXN0U3RlcEV2ZXJTZWVuKCl7dmFyIHQ9dGhpcy5ub2RlTmFtZXNUb0hlYWx0aFBpbGxzO2ZvcihsZXQgbiBpbiB0KXt2YXIgZT10W25dO3JldHVybiBNYXRoLm1heCh0aGlzLl9iaWdnZXN0U3RlcEV2ZXJTZWVuLGVbZS5sZW5ndGgtMV0uc3RlcCl9cmV0dXJuIHRoaXMuX2JpZ2dlc3RTdGVwRXZlclNlZW58fDB9Z2V0IF9tYXhTdGVwSW5kZXgoKXt2YXIgdD10aGlzLm5vZGVOYW1lc1RvSGVhbHRoUGlsbHM7Zm9yKGxldCBlIGluIHQpcmV0dXJuIHRbZV0ubGVuZ3RoLTE7cmV0dXJuIDB9X2hhc0RlYnVnZ2VyTnVtZXJpY0FsZXJ0cyh0KXtyZXR1cm4gdCYmdC5sZW5ndGh9X3VwZGF0ZUFsZXJ0c0xpc3QoKXt2YXIgdD10aGlzLmRlYnVnZ2VyTnVtZXJpY0FsZXJ0cyxlPXRoaXMuJCQoIiNudW1lcmljLWFsZXJ0cy1ib2R5Iik7aWYoZSl7ZS5pbm5lclRleHQ9IiI7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPXRbbl0scj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpLG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTtvLmlubmVyVGV4dD0oZj1pLmZpcnN0X3RpbWVzdGFtcCwobT0rbmV3IERhdGUtK25ldyBEYXRlKGYvMWUzKSk8M2U0PyJqdXN0IG5vdyI6bTw2ZTQ/TWF0aC5mbG9vcihtLzFlMykrIiBzZWNvbmRzIGFnbyI6bTwxMmU0PyJhIG1pbnV0ZSBhZ28iOm08MzZlNT9NYXRoLmZsb29yKG0vNmU0KSsiIG1pbnV0ZXMgYWdvIjoxPT1NYXRoLmZsb29yKG0vMzZlNSk/ImFuIGhvdXIgYWdvIjptPDg2NGU1P01hdGguZmxvb3IobS8zNmU1KSsiIGhvdXJzIGFnbyI6bTwxNzI4ZTU/Inllc3RlcmRheSI6TWF0aC5mbG9vcihtLzg2NGU1KSsiIGRheXMgYWdvIiksby5jbGFzc0xpc3QuYWRkKCJmaXJzdC1vZmZlbnNlLXRkIiksci5hcHBlbmRDaGlsZChvKTt2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpO2EuY2xhc3NMaXN0LmFkZCgidGVuc29yLWRldmljZS10ZCIpO3ZhciBzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3MuY2xhc3NMaXN0LmFkZCgidGVuc29yLXNlY3Rpb24td2l0aGluLXRhYmxlIikscy5pbm5lclRleHQ9aS50ZW5zb3JfbmFtZSx0aGlzLl9hZGRPcEV4cGFuc2lvbkxpc3RlbmVyKHMsaS50ZW5zb3JfbmFtZSksYS5hcHBlbmRDaGlsZChzKTt2YXIgbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtsLmNsYXNzTGlzdC5hZGQoImRldmljZS1zZWN0aW9uLXdpdGhpbi10YWJsZSIpLGwuaW5uZXJUZXh0PSIoIitpLmRldmljZV9uYW1lKyIpIixhLmFwcGVuZENoaWxkKGwpLHIuYXBwZW5kQ2hpbGQoYSk7dmFyIGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Yy5jbGFzc0xpc3QuYWRkKCJtaW5pLWhlYWx0aC1waWxsIik7dmFyIHU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTtpZih1LmNsYXNzTGlzdC5hZGQoIm1pbmktaGVhbHRoLXBpbGwtdGQiKSx1LmFwcGVuZENoaWxkKGMpLHIuYXBwZW5kQ2hpbGQodSksaS5uZWdfaW5mX2V2ZW50X2NvdW50KXt2YXIgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtoLmNsYXNzTGlzdC5hZGQoIm5lZ2F0aXZlLWluZi1taW5pLWhlYWx0aC1waWxsLXNlY3Rpb24iKSxoLmlubmVyVGV4dD1pLm5lZ19pbmZfZXZlbnRfY291bnQsaC5zZXRBdHRyaWJ1dGUoInRpdGxlIixpLm5lZ19pbmZfZXZlbnRfY291bnQrIiBldmVudHMgd2l0aCAt4oieIiksYy5hcHBlbmRDaGlsZChoKX1pZihpLnBvc19pbmZfZXZlbnRfY291bnQpe3ZhciBkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2QuY2xhc3NMaXN0LmFkZCgicG9zaXRpdmUtaW5mLW1pbmktaGVhbHRoLXBpbGwtc2VjdGlvbiIpLGQuaW5uZXJUZXh0PWkucG9zX2luZl9ldmVudF9jb3VudCxkLnNldEF0dHJpYnV0ZSgidGl0bGUiLGkucG9zX2luZl9ldmVudF9jb3VudCsiIGV2ZW50cyB3aXRoICviiJ4iKSxjLmFwcGVuZENoaWxkKGQpfWlmKGkubmFuX2V2ZW50X2NvdW50KXt2YXIgcD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtwLmNsYXNzTGlzdC5hZGQoIm5hbi1taW5pLWhlYWx0aC1waWxsLXNlY3Rpb24iKSxwLmlubmVyVGV4dD1pLm5hbl9ldmVudF9jb3VudCxwLnNldEF0dHJpYnV0ZSgidGl0bGUiLGkubmFuX2V2ZW50X2NvdW50KyIgZXZlbnRzIHdpdGggTmFOIiksYy5hcHBlbmRDaGlsZChwKX1xaShlKS5hcHBlbmRDaGlsZChyKX12YXIgZixtfX1fYWRkT3BFeHBhbnNpb25MaXN0ZW5lcih0LGUpe3QuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCgoKT0+e3ZhciB0LG49KGZ1bmN0aW9uIGkodCxlLG4pe2NvbnN0IGk9bi5zcGxpdCgiLyIpLHI9aVtpLmxlbmd0aC0xXS5tYXRjaCgvKC4qKTpcdysvKTsyPT09ci5sZW5ndGgmJihpW2kubGVuZ3RoLTFdPXJbMV0pO2xldCBvPWlbMF0sYT1lLmdldFJlbmRlck5vZGVCeU5hbWUobyk7Zm9yKGxldCBuPTE7bjxpLmxlbmd0aCYmYS5ub2RlLnR5cGUhPT12QXQuT1A7bisrKWUuYnVpbGRTdWJoaWVyYXJjaHkobyksYS5leHBhbmRlZD0hMCx0LnNldE5vZGVFeHBhbmRlZChhKSxvKz0iLyIraVtuXSxhPWUuZ2V0UmVuZGVyTm9kZUJ5TmFtZShvKTtyZXR1cm4gYS5ub2RlLm5hbWV9KShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2NlbmUiKSx0aGlzLnJlbmRlckhpZXJhcmNoeSxlKSxyPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInRmLWdyYXBoLWluZm8jZ3JhcGgtaW5mbyIpO3ImJih0PXIuc2Nyb2xsSGVpZ2h0LXIuc2Nyb2xsVG9wKTt2YXIgbz10aGlzLnNlbGVjdGVkTm9kZTt0aGlzLnNldCgic2VsZWN0ZWROb2RlIixuKTt2YXIgYT0oKT0+e3Iuc2Nyb2xsVG9wPXIuc2Nyb2xsSGVpZ2h0LXR9O3ImJihvP2EoKTp3aW5kb3cuc2V0VGltZW91dChhLDIwKSl9KSl9fTt2YXIgTWt0O1NrdC50ZW1wbGF0ZT1fZWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgaDIgewogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgfQoKICAgICAgLmhlYWx0aC1waWxsLWxlZ2VuZCB7CiAgICAgICAgcGFkZGluZzogMTVweDsKICAgICAgfQoKICAgICAgLmhlYWx0aC1waWxsLWxlZ2VuZCBoMiB7CiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKICAgICAgfQoKICAgICAgLmhlYWx0aC1waWxsLWVudHJ5IHsKICAgICAgICBtYXJnaW46IDEwcHggMTBweCAxMHB4IDA7CiAgICAgIH0KCiAgICAgIC5oZWFsdGgtcGlsbC1lbnRyeSAuY29sb3ItcHJldmlldyB7CiAgICAgICAgd2lkdGg6IDI2cHg7CiAgICAgICAgaGVpZ2h0OiAyNnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgbWFyZ2luOiAwIDEwcHggMCAwOwogICAgICB9CgogICAgICAuaGVhbHRoLXBpbGwtZW50cnkgLmNvbG9yLWxhYmVsLAogICAgICAuaGVhbHRoLXBpbGwtZW50cnkgLnRlbnNvci1jb3VudCB7CiAgICAgICAgY29sb3I6ICM3Nzc7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIGhlaWdodDogMjZweDsKICAgICAgICBmb250LXNpemU6IDIycHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDI2cHg7CiAgICAgICAgdmVydGljYWwtYWxpZ246IHRvcDsKICAgICAgfQoKICAgICAgLmhlYWx0aC1waWxsLWVudHJ5IC50ZW5zb3ItY291bnQgewogICAgICAgIGZsb2F0OiByaWdodDsKICAgICAgfQoKICAgICAgI2hlYWx0aC1waWxsLXN0ZXAtc2xpZGVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBtYXJnaW46IDAgMCAwIC0xNXB4OwogICAgICAgIC8qIDMxIGNvbWVzIGZyb20gYWRkaW5nIGEgcGFkZGluZyBvZiAxNXB4IGZyb20gYm90aCBzaWRlcyBvZiB0aGUgcGFwZXItc2xpZGVyLCBzdWJ0cmFjdGluZwogICAqIDFweCBzbyB0aGF0IHRoZSBzbGlkZXIgd2lkdGggYWxpZ25zIHdpdGggdGhlIGltYWdlICh0aGUgbGFzdCBzbGlkZXIgbWFya2VyIHRha2VzIHVwIDFweCksCiAgICogYW5kIGFkZGluZyAycHggdG8gYWNjb3VudCBmb3IgYSBib3JkZXIgb2YgMXB4IG9uIGJvdGggc2lkZXMgb2YgdGhlIGltYWdlLiAzMCAtIDEgKyAyLgogICAqIEFwcGFyZW50bHksIHRoZSBwYXBlci1zbGlkZXIgbGFja3MgYSBtaXhpbiBmb3IgdGhvc2UgcGFkZGluZyB2YWx1ZXMuICovCiAgICAgICAgd2lkdGg6IGNhbGMoMTAwJSArIDMxcHgpOwogICAgICB9CgogICAgICAjaGVhbHRoLXBpbGxzLWxvYWRpbmctc3Bpbm5lciB7CiAgICAgICAgd2lkdGg6IDIwcHg7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7CiAgICAgIH0KCiAgICAgICNoZWFsdGgtcGlsbC1zdGVwLW51bWJlci1pbnB1dCB7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7CiAgICAgIH0KCiAgICAgICNudW1lcmljLWFsZXJ0cy10YWJsZS1jb250YWluZXIgewogICAgICAgIG1heC1oZWlnaHQ6IDQwMHB4OwogICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CgogICAgICAjbnVtZXJpYy1hbGVydHMtdGFibGUgewogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgIH0KCiAgICAgICNudW1lcmljLWFsZXJ0cy10YWJsZSB0ZCB7CiAgICAgICAgdmVydGljYWwtYWxpZ246IHRvcDsKICAgICAgfQoKICAgICAgI251bWVyaWMtYWxlcnRzLXRhYmxlIC5maXJzdC1vZmZlbnNlLXRkIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KCiAgICAgIC5maXJzdC1vZmZlbnNlLXRkIHsKICAgICAgICB3aWR0aDogODBweDsKICAgICAgfQoKICAgICAgLnRlbnNvci1kZXZpY2UtdGQgewogICAgICAgIG1heC13aWR0aDogMTQwcHg7CiAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkOwogICAgICB9CgogICAgICAudGVuc29yLXNlY3Rpb24td2l0aGluLXRhYmxlIHsKICAgICAgICBjb2xvcjogIzI2NjIzNjsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgb3BhY2l0eTogMC44OwogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgICB9CgogICAgICAudGVuc29yLXNlY3Rpb24td2l0aGluLXRhYmxlOmhvdmVyIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAuZGV2aWNlLXNlY3Rpb24td2l0aGluLXRhYmxlIHsKICAgICAgICBjb2xvcjogIzY2NjsKICAgICAgfQoKICAgICAgLm1pbmktaGVhbHRoLXBpbGwgewogICAgICAgIHdpZHRoOiAxMzBweDsKICAgICAgfQoKICAgICAgLm1pbmktaGVhbHRoLXBpbGwgPiBkaXYgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICB3aWR0aDogNjBweDsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgIH0KCiAgICAgICNldmVudC1jb3VudHMtdGggewogICAgICAgIHBhZGRpbmc6IDAgMCAwIDEwcHg7CiAgICAgIH0KCiAgICAgIC5uZWdhdGl2ZS1pbmYtbWluaS1oZWFsdGgtcGlsbC1zZWN0aW9uIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2IoMjU1LCAxNDEsIDApOwogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICB9CgogICAgICAucG9zaXRpdmUtaW5mLW1pbmktaGVhbHRoLXBpbGwtc2VjdGlvbiB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiKDAsIDYyLCAyMTIpOwogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICB9CgogICAgICAubmFuLW1pbmktaGVhbHRoLXBpbGwtc2VjdGlvbiB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiKDIwNCwgNDcsIDQ0KTsKICAgICAgICB3aWR0aDogMjBweDsKICAgICAgfQoKICAgICAgLm5lZ2F0aXZlLWluZi1taW5pLWhlYWx0aC1waWxsLXNlY3Rpb24sCiAgICAgIC5wb3NpdGl2ZS1pbmYtbWluaS1oZWFsdGgtcGlsbC1zZWN0aW9uLAogICAgICAubmFuLW1pbmktaGVhbHRoLXBpbGwtc2VjdGlvbiB7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBsaW5lLWhlaWdodDogMjBweDsKICAgICAgICBtYXJnaW46IDAgMCAwIDEwcHg7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICB9CgogICAgICAubm8tbnVtZXJpYy1hbGVydHMtbm90aWZpY2F0aW9uIHsKICAgICAgICBtYXJnaW46IDA7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8cGFwZXItbWF0ZXJpYWwgZWxldmF0aW9uPSIxIiBjbGFzcz0iY2FyZCBoZWFsdGgtcGlsbC1sZWdlbmQiPgogICAgICA8ZGl2IGNsYXNzPSJ0aXRsZSI+CiAgICAgICAgRW5hYmxlIGFsbCAobm90IGp1c3Qgc2FtcGxlZCkgc3RlcHMuIFJlcXVpcmVzIHNsb3cgZGlzayByZWFkLgogICAgICA8L2Rpdj4KICAgICAgPHBhcGVyLXRvZ2dsZS1idXR0b24KICAgICAgICBpZD0iZW5hYmxlQWxsU3RlcHNNb2RlVG9nZ2xlIgogICAgICAgIGNoZWNrZWQ9Int7YWxsU3RlcHNNb2RlRW5hYmxlZH19IgogICAgICA+CiAgICAgIDwvcGFwZXItdG9nZ2xlLWJ1dHRvbj4KICAgICAgPGgyPgogICAgICAgIFN0ZXAgb2YgSGVhbHRoIFBpbGxzOgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1thbGxTdGVwc01vZGVFbmFibGVkXV0iPgogICAgICAgICAgPGlucHV0CiAgICAgICAgICAgIHR5cGU9Im51bWJlciIKICAgICAgICAgICAgaWQ9ImhlYWx0aC1waWxsLXN0ZXAtbnVtYmVyLWlucHV0IgogICAgICAgICAgICBtaW49IjAiCiAgICAgICAgICAgIG1heD0iW1tfYmlnZ2VzdFN0ZXBFdmVyU2Vlbl1dIgogICAgICAgICAgICB2YWx1ZT0ie3tzcGVjaWZpY0hlYWx0aFBpbGxTdGVwOjppbnB1dH19IgogICAgICAgICAgLz4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shYWxsU3RlcHNNb2RlRW5hYmxlZF1dIj4KICAgICAgICAgIFtbX2N1cnJlbnRTdGVwRGlzcGxheVZhbHVlXV0KICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDxwYXBlci1zcGlubmVyLWxpdGUKICAgICAgICAgIGFjdGl2ZQogICAgICAgICAgaGlkZGVuJD0iW1shYXJlSGVhbHRoUGlsbHNMb2FkaW5nXV0iCiAgICAgICAgICBpZD0iaGVhbHRoLXBpbGxzLWxvYWRpbmctc3Bpbm5lciIKICAgICAgICA+PC9wYXBlci1zcGlubmVyLWxpdGU+CiAgICAgIDwvaDI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1thbGxTdGVwc01vZGVFbmFibGVkXV0iPgogICAgICAgIDxwYXBlci1zbGlkZXIKICAgICAgICAgIGlkPSJoZWFsdGgtcGlsbC1zdGVwLXNsaWRlciIKICAgICAgICAgIGltbWVkaWF0ZS12YWx1ZT0ie3tzcGVjaWZpY0hlYWx0aFBpbGxTdGVwfX0iCiAgICAgICAgICBtYXg9IltbX2JpZ2dlc3RTdGVwRXZlclNlZW5dXSIKICAgICAgICAgIHNuYXBzCiAgICAgICAgICBzdGVwPSIxIgogICAgICAgICAgdmFsdWU9Int7c3BlY2lmaWNIZWFsdGhQaWxsU3RlcH19IgogICAgICAgID48L3BhcGVyLXNsaWRlcj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFhbGxTdGVwc01vZGVFbmFibGVkXV0iPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfbWF4U3RlcEluZGV4XV0iPgogICAgICAgICAgPHBhcGVyLXNsaWRlcgogICAgICAgICAgICBpZD0iaGVhbHRoLXBpbGwtc3RlcC1zbGlkZXIiCiAgICAgICAgICAgIGltbWVkaWF0ZS12YWx1ZT0ie3toZWFsdGhQaWxsU3RlcEluZGV4fX0iCiAgICAgICAgICAgIG1heD0iW1tfbWF4U3RlcEluZGV4XV0iCiAgICAgICAgICAgIHNuYXBzCiAgICAgICAgICAgIHN0ZXA9IjEiCiAgICAgICAgICAgIHZhbHVlPSJ7e2hlYWx0aFBpbGxTdGVwSW5kZXh9fSIKICAgICAgICAgID48L3BhcGVyLXNsaWRlcj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L3RlbXBsYXRlPgogICAgICA8aDI+CiAgICAgICAgSGVhbHRoIFBpbGwKICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbaGVhbHRoUGlsbFZhbHVlc0ZvclNlbGVjdGVkTm9kZV1dIj4KICAgICAgICAgIENvdW50cyBmb3IgU2VsZWN0ZWQgTm9kZQogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFoZWFsdGhQaWxsVmFsdWVzRm9yU2VsZWN0ZWROb2RlXV0iPgogICAgICAgICAgTGVnZW5kCiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9oMj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1toZWFsdGhQaWxsRW50cmllc11dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFsdGgtcGlsbC1lbnRyeSI+CiAgICAgICAgICA8ZGl2CiAgICAgICAgICAgIGNsYXNzPSJjb2xvci1wcmV2aWV3IgogICAgICAgICAgICBzdHlsZT0iYmFja2dyb3VuZDpbW2l0ZW0uYmFja2dyb3VuZF9jb2xvcl1dIgogICAgICAgICAgPjwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGFiZWwiPltbaXRlbS5sYWJlbF1dPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0ZW5zb3ItY291bnQiPgogICAgICAgICAgICBbW19jb21wdXRlVGVuc29yQ291bnRTdHJpbmcoaGVhbHRoUGlsbFZhbHVlc0ZvclNlbGVjdGVkTm9kZSwKICAgICAgICAgICAgaW5kZXgpXV0KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgICA8ZGl2IGhpZGRlbiQ9IltbIV9oYXNEZWJ1Z2dlck51bWVyaWNBbGVydHMoZGVidWdnZXJOdW1lcmljQWxlcnRzKV1dIj4KICAgICAgICA8aDIgaWQ9Im51bWVyaWMtYWxlcnRzLWhlYWRlciI+TnVtZXJpYyBBbGVydHM8L2gyPgogICAgICAgIDxwPkFsZXJ0cyBhcmUgc29ydGVkIGZyb20gdG9wIHRvIGJvdHRvbSBieSBpbmNyZWFzaW5nIHRpbWVzdGFtcC48L3A+CiAgICAgICAgPGRpdiBpZD0ibnVtZXJpYy1hbGVydHMtdGFibGUtY29udGFpbmVyIj4KICAgICAgICAgIDx0YWJsZSBpZD0ibnVtZXJpYy1hbGVydHMtdGFibGUiPgogICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgPHRoPkZpcnN0IE9mZmVuc2U8L3RoPgogICAgICAgICAgICAgICAgPHRoPlRlbnNvciAoRGV2aWNlKTwvdGg+CiAgICAgICAgICAgICAgICA8dGggaWQ9ImV2ZW50LWNvdW50cy10aCI+RXZlbnQgQ291bnRzPC90aD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICA8dGJvZHkgaWQ9Im51bWVyaWMtYWxlcnRzLWJvZHkiPjwvdGJvZHk+CiAgICAgICAgICA8L3RhYmxlPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPHRlbXBsYXRlCiAgICAgICAgaXM9ImRvbS1pZiIKICAgICAgICBpZj0iW1shX2hhc0RlYnVnZ2VyTnVtZXJpY0FsZXJ0cyhkZWJ1Z2dlck51bWVyaWNBbGVydHMpXV0iCiAgICAgID4KICAgICAgICA8cCBjbGFzcz0ibm8tbnVtZXJpYy1hbGVydHMtbm90aWZpY2F0aW9uIj4KICAgICAgICAgIE5vIG51bWVyaWMgYWxlcnRzIHNvIGZhci4gVGhhdCBpcyBsaWtlbHkgZ29vZC4gQWxlcnRzIGluZGljYXRlIHRoZQogICAgICAgICAgcHJlc2VuY2Ugb2YgTmFOIG9yICgrLy0pIEluZmluaXR5IHZhbHVlcywgd2hpY2ggbWF5IGJlIGNvbmNlcm5pbmcuCiAgICAgICAgPC9wPgogICAgICA8L3RlbXBsYXRlPgogICAgPC9wYXBlci1tYXRlcmlhbD4KICBgLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLFhBdCldLFNrdC5wcm90b3R5cGUsInJlbmRlckhpZXJhcmNoeSIsdm9pZCAwKSx0KFtvKHt0eXBlOkFycmF5LG5vdGlmeTohMH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxTa3QucHJvdG90eXBlLCJkZWJ1Z2dlck51bWVyaWNBbGVydHMiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sU2t0LnByb3RvdHlwZSwibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcixub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sU2t0LnByb3RvdHlwZSwiaGVhbHRoUGlsbFN0ZXBJbmRleCIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcixub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sU2t0LnByb3RvdHlwZSwic3BlY2lmaWNIZWFsdGhQaWxsU3RlcCIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sU2t0LnByb3RvdHlwZSwic2VsZWN0ZWROb2RlIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxTa3QucHJvdG90eXBlLCJoaWdobGlnaHRlZE5vZGUiLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXIsbm90aWZ5OiEwfSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLFNrdC5wcm90b3R5cGUsInNlbGVjdGVkTm9kZUluY2x1ZGUiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLFNrdC5wcm90b3R5cGUsImFyZUhlYWx0aFBpbGxzTG9hZGluZyIsdm9pZCAwKSx0KFtvKHt0eXBlOkFycmF5fSksZSgiZGVzaWduOnR5cGUiLEFycmF5KV0sU2t0LnByb3RvdHlwZSwiaGVhbHRoUGlsbEVudHJpZXMiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFuLG5vdGlmeTohMH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxTa3QucHJvdG90eXBlLCJhbGxTdGVwc01vZGVFbmFibGVkIix2b2lkIDApLHQoW3MoIm5vZGVOYW1lc1RvSGVhbHRoUGlsbHMiLCJoZWFsdGhQaWxsU3RlcEluZGV4Iiwic2VsZWN0ZWROb2RlIiwiYWxsU3RlcHNNb2RlRW5hYmxlZCIsImFyZUhlYWx0aFBpbGxzTG9hZGluZyIpLGUoImRlc2lnbjp0eXBlIixBcnJheSksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sU2t0LnByb3RvdHlwZSwiaGVhbHRoUGlsbFZhbHVlc0ZvclNlbGVjdGVkTm9kZSIsbnVsbCksdChbcygibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIsImhlYWx0aFBpbGxTdGVwSW5kZXgiLCJhbGxTdGVwc01vZGVFbmFibGVkIiwic3BlY2lmaWNIZWFsdGhQaWxsU3RlcCIsImFyZUhlYWx0aFBpbGxzTG9hZGluZyIpLGUoImRlc2lnbjp0eXBlIixPYmplY3QpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFNrdC5wcm90b3R5cGUsIl9jdXJyZW50U3RlcERpc3BsYXlWYWx1ZSIsbnVsbCksdChbcygibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIpLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFNrdC5wcm90b3R5cGUsIl9iaWdnZXN0U3RlcEV2ZXJTZWVuIixudWxsKSx0KFtzKCJub2RlTmFtZXNUb0hlYWx0aFBpbGxzIiksZSgiZGVzaWduOnR5cGUiLE51bWJlciksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sU2t0LnByb3RvdHlwZSwiX21heFN0ZXBJbmRleCIsbnVsbCksdChbYSgiZGVidWdnZXJOdW1lcmljQWxlcnRzIiksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pLGUoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxTa3QucHJvdG90eXBlLCJfdXBkYXRlQWxlcnRzTGlzdCIsbnVsbCksU2t0PXQoW2koInRmLWdyYXBoLWRlYnVnZ2VyLWRhdGEtY2FyZCIpXSxTa3QpLChmdW5jdGlvbih0KXt0LkNPTlNUPSJDT05TVCIsdC5NRVRBPSJNRVRBIix0Lk9QPSJPUCIsdC5TRVJJRVM9IlNFUklFUyIsdC5TVU1NQVJZPSJTVU1NQVJZIn0pKE1rdHx8KE1rdD17fSkpO2xldCBFa3Q9Y2xhc3MgZXh0ZW5kcyh0cihubCh5ZSkpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy52ZXJ0aWNhbD0hMSx0aGlzLmZpbGxPdmVycmlkZT1udWxsLHRoaXMuc3Ryb2tlT3ZlcnJpZGU9bnVsbCx0aGlzLmhlaWdodD0yMCx0aGlzLmZhZGVkPSExfWdldFN2Z0RlZmluYWJsZUVsZW1lbnQoKXtyZXR1cm4gdGhpcy4kLnN2Z0RlZnN9Z2V0IF9maWxsKCl7dmFyIHQ9dGhpcy5maWxsT3ZlcnJpZGU7aWYobnVsbCE9dClyZXR1cm4gdDtzd2l0Y2godGhpcy50eXBlKXtjYXNlIE1rdC5NRVRBOnJldHVybiBqQXQuREVGQVVMVF9GSUxMO2Nhc2UgTWt0LlNFUklFUzpyZXR1cm4id2hpdGUiO2RlZmF1bHQ6cmV0dXJuIiNmZmZmZmYifX1nZXQgX3N0cm9rZSgpe3ZhciB0PXRoaXMuc3Ryb2tlT3ZlcnJpZGU7aWYobnVsbCE9dClyZXR1cm4gdDtzd2l0Y2godGhpcy50eXBlKXtjYXNlIE1rdC5NRVRBOnJldHVybiBqQXQuREVGQVVMVF9TVFJPS0U7Y2FzZSBNa3QuU0VSSUVTOmRlZmF1bHQ6cmV0dXJuIiNiMmIyYjIifX1faXNUeXBlKHQsZSl7cmV0dXJuIHQ9PT1lfV9mYWRlZENsYXNzKHQsZSl7cmV0dXJuIHQ/ImZhZGVkLSIrZToiIn19O0VrdC50ZW1wbGF0ZT1fZWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGZvbnQtc2l6ZTogMDsKICAgICAgfQoKICAgICAgOmhvc3QoLmRhcmstbW9kZSkgc3ZnIHsKICAgICAgICBmaWx0ZXI6IGludmVydCgxKTsKICAgICAgfQoKICAgICAgLmZhZGVkLXJlY3QgewogICAgICAgIGZpbGw6IHVybCgjcmVjdEhhdGNoKTsKICAgICAgfQoKICAgICAgLmZhZGVkLWVsbGlwc2UgewogICAgICAgIGZpbGw6IHVybCgjZWxsaXBzZUhhdGNoKTsKICAgICAgfQoKICAgICAgLmZhZGVkLXJlY3QsCiAgICAgIC5mYWRlZC1lbGxpcHNlLAogICAgICAuZmFkZWQtc2VyaWVzIHsKICAgICAgICBzdHJva2U6IHZhcigtLXRiLWdyYXBoLWZhZGVkKSAhaW1wb3J0YW50OwogICAgICB9CiAgICAgICNyZWN0SGF0Y2ggbGluZSwKICAgICAgI2VsbGlwc2VIYXRjaCBsaW5lIHsKICAgICAgICBjb2xvcjogI2UwZDRiMyAhaW1wb3J0YW50OwogICAgICAgIGZpbGw6IHdoaXRlOwogICAgICAgIHN0cm9rZTogI2UwZDRiMyAhaW1wb3J0YW50OwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPCEtLSBTVkcgZm9yIGRlZmluaXRpb25zIC0tPgogICAgPHN2ZyBoZWlnaHQ9IjAiIHdpZHRoPSIwIiBpZD0ic3ZnRGVmcyI+CiAgICAgIDxkZWZzPgogICAgICAgIDwhLS0gSGF0Y2ggcGF0dGVybnMgZm9yIGZhZGVkIG91dCBub2Rlcy4gLS0+CiAgICAgICAgPHBhdHRlcm4KICAgICAgICAgIGlkPSJyZWN0SGF0Y2giCiAgICAgICAgICBwYXR0ZXJuVHJhbnNmb3JtPSJyb3RhdGUoNDUgMCAwKSIKICAgICAgICAgIHdpZHRoPSI1IgogICAgICAgICAgaGVpZ2h0PSI1IgogICAgICAgICAgcGF0dGVyblVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgICA+CiAgICAgICAgICA8bGluZSB4MT0iMCIgeTE9IjAiIHgyPSIwIiB5Mj0iNSIgc3R5bGU9InN0cm9rZS13aWR0aDogMSI+PC9saW5lPgogICAgICAgIDwvcGF0dGVybj4KICAgICAgICA8cGF0dGVybgogICAgICAgICAgaWQ9ImVsbGlwc2VIYXRjaCIKICAgICAgICAgIHBhdHRlcm5UcmFuc2Zvcm09InJvdGF0ZSg0NSAwIDApIgogICAgICAgICAgd2lkdGg9IjIiCiAgICAgICAgICBoZWlnaHQ9IjIiCiAgICAgICAgICBwYXR0ZXJuVW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgID4KICAgICAgICAgIDxsaW5lIHgxPSIwIiB5MT0iMCIgeDI9IjAiIHkyPSIyIiBzdHlsZT0ic3Ryb2tlLXdpZHRoOiAxIj48L2xpbmU+CiAgICAgICAgPC9wYXR0ZXJuPgogICAgICAgIDwhLS0gVGVtcGxhdGUgZm9yIGFuIE9wIG5vZGUgZWxsaXBzZS4gLS0+CiAgICAgICAgPGVsbGlwc2UKICAgICAgICAgIGlkPSJvcC1ub2RlLXN0YW1wIgogICAgICAgICAgcng9IjcuNSIKICAgICAgICAgIHJ5PSIzIgogICAgICAgICAgc3Ryb2tlPSJpbmhlcml0IgogICAgICAgICAgZmlsbD0iaW5oZXJpdCIKICAgICAgICA+PC9lbGxpcHNlPgogICAgICAgIDwhLS0gVGVtcGxhdGUgZm9yIGFuIE9wIG5vZGUgYW5ub3RhdGlvbiBlbGxpcHNlIChzbWFsbGVyKS4gLS0+CiAgICAgICAgPGVsbGlwc2UKICAgICAgICAgIGlkPSJvcC1ub2RlLWFubm90YXRpb24tc3RhbXAiCiAgICAgICAgICByeD0iNSIKICAgICAgICAgIHJ5PSIyIgogICAgICAgICAgc3Ryb2tlPSJpbmhlcml0IgogICAgICAgICAgZmlsbD0iaW5oZXJpdCIKICAgICAgICA+PC9lbGxpcHNlPgogICAgICAgIDwhLS0gVmVydGljYWxseSBzdGFja2VkIHNlcmllcyBvZiBPcCBub2RlcyB3aGVuIHVuZXhwYW5kZWQuIC0tPgogICAgICAgIDxnIGlkPSJvcC1zZXJpZXMtdmVydGljYWwtc3RhbXAiPgogICAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iOCIgeT0iOSI+PC91c2U+CiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSI4IiB5PSI2Ij48L3VzZT4KICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtc3RhbXAiIHg9IjgiIHk9IjMiPjwvdXNlPgogICAgICAgIDwvZz4KICAgICAgICA8ZyBpZD0ib3Atc2VyaWVzLWhvcml6b250YWwtc3RhbXAiPgogICAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iMTYiIHk9IjQiPjwvdXNlPgogICAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iMTIiIHk9IjQiPjwvdXNlPgogICAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iOCIgeT0iNCI+PC91c2U+CiAgICAgICAgPC9nPgogICAgICAgIDxnCiAgICAgICAgICBpZD0ic3VtbWFyeS1pY29uIgogICAgICAgICAgZmlsbD0iIzg0ODQ4NCIKICAgICAgICAgIGhlaWdodD0iMTIiCiAgICAgICAgICB2aWV3Qm94PSIwIDAgMjQgMjQiCiAgICAgICAgICB3aWR0aD0iMTIiCiAgICAgICAgPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgZD0iTTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yek05IDE3SDd2LTdoMnY3em00IDBoLTJWN2gydjEwem00IDBoLTJ2LTRoMnY0eiIKICAgICAgICAgID48L3BhdGg+CiAgICAgICAgPC9nPgogICAgICA8L2RlZnM+CiAgICA8L3N2Zz4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNUeXBlKHR5cGUsICdDT05TVCcpXV0iPgogICAgICA8c3ZnCiAgICAgICAgaGVpZ2h0JD0iW1toZWlnaHRdXSIKICAgICAgICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pZCBtZWV0IgogICAgICAgIHZpZXdCb3g9IjAgMCAxMCAxMCIKICAgICAgPgogICAgICAgIDxjaXJjbGUKICAgICAgICAgIGN4PSI1IgogICAgICAgICAgY3k9IjUiCiAgICAgICAgICByPSIzIgogICAgICAgICAgZmlsbCQ9IltbX2ZpbGxdXSIKICAgICAgICAgIHN0cm9rZSQ9IltbX3N0cm9rZV1dIgogICAgICAgID48L2NpcmNsZT4KICAgICAgPC9zdmc+CiAgICA8L3RlbXBsYXRlPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1R5cGUodHlwZSwgJ1NVTU1BUlknKV1dIj4KICAgICAgPHN2ZwogICAgICAgIHdpZHRoJD0iW1toZWlnaHRdXSIKICAgICAgICBoZWlnaHQkPSJbW2hlaWdodF1dIgogICAgICAgIHZpZXdCb3g9IjAgMCAyNCAyNCIKICAgICAgICBmaWxsPSIjODQ4NDg0IgogICAgICA+CiAgICAgICAgPHBhdGgKICAgICAgICAgIGQ9Ik0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnpNOSAxN0g3di03aDJ2N3ptNCAwaC0yVjdoMnYxMHptNCAwaC0ydi00aDJ2NHoiCiAgICAgICAgPjwvcGF0aD4KICAgICAgPC9zdmc+CiAgICA8L3RlbXBsYXRlPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1R5cGUodHlwZSwgJ09QJyldXSI+CiAgICAgIDxzdmcKICAgICAgICBoZWlnaHQkPSJbW2hlaWdodF1dIgogICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWlkIG1lZXQiCiAgICAgICAgdmlld0JveD0iMCAwIDE2IDgiCiAgICAgID4KICAgICAgICA8dXNlCiAgICAgICAgICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIKICAgICAgICAgIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIgogICAgICAgICAgZmlsbCQ9IltbX2ZpbGxdXSIKICAgICAgICAgIHN0cm9rZSQ9IltbX3N0cm9rZV1dIgogICAgICAgICAgY2xhc3MkPSJ7e19mYWRlZENsYXNzKGZhZGVkLCAnZWxsaXBzZScpfX0iCiAgICAgICAgICB4PSI4IgogICAgICAgICAgeT0iNCIKICAgICAgICA+PC91c2U+CiAgICAgIDwvc3ZnPgogICAgPC90ZW1wbGF0ZT4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNUeXBlKHR5cGUsICdNRVRBJyldXSI+CiAgICAgIDxzdmcKICAgICAgICBoZWlnaHQkPSJbW2hlaWdodF1dIgogICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWlkIG1lZXQiCiAgICAgICAgdmlld0JveD0iMCAwIDM3IDE2IgogICAgICA+CiAgICAgICAgPHJlY3QKICAgICAgICAgIHg9IjEiCiAgICAgICAgICB5PSIxIgogICAgICAgICAgZmlsbCQ9IltbX2ZpbGxdXSIKICAgICAgICAgIHN0cm9rZSQ9IltbX3N0cm9rZV1dIgogICAgICAgICAgY2xhc3MkPSJ7e19mYWRlZENsYXNzKGZhZGVkLCAncmVjdCcpfX0iCiAgICAgICAgICBzdHJva2Utd2lkdGg9IjJweCIKICAgICAgICAgIGhlaWdodD0iMTQiCiAgICAgICAgICB3aWR0aD0iMzUiCiAgICAgICAgICByeD0iNSIKICAgICAgICAgIHJ5PSI1IgogICAgICAgID48L3JlY3Q+CiAgICAgIDwvc3ZnPgogICAgPC90ZW1wbGF0ZT4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNUeXBlKHR5cGUsICdTRVJJRVMnKV1dIj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3ZlcnRpY2FsXV0iPgogICAgICAgIDxzdmcKICAgICAgICAgIGhlaWdodCQ9IltbaGVpZ2h0XV0iCiAgICAgICAgICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pZCBtZWV0IgogICAgICAgICAgdmlld0JveD0iMCAwIDE2IDE1IgogICAgICAgID4KICAgICAgICAgIDx1c2UKICAgICAgICAgICAgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiCiAgICAgICAgICAgIHhsaW5rOmhyZWY9IiNvcC1zZXJpZXMtdmVydGljYWwtc3RhbXAiCiAgICAgICAgICAgIGZpbGwkPSJbW19maWxsXV0iCiAgICAgICAgICAgIHN0cm9rZSQ9IltbX3N0cm9rZV1dIgogICAgICAgICAgICBjbGFzcyQ9Int7X2ZhZGVkQ2xhc3MoZmFkZWQsICdzZXJpZXMnKX19IgogICAgICAgICAgICB4PSIwIgogICAgICAgICAgICB5PSIyIgogICAgICAgICAgPjwvdXNlPgogICAgICAgIDwvc3ZnPgogICAgICA8L3RlbXBsYXRlPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIXZlcnRpY2FsXV0iPgogICAgICAgIDxzdmcKICAgICAgICAgIGhlaWdodCQ9IltbaGVpZ2h0XV0iCiAgICAgICAgICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pZCBtZWV0IgogICAgICAgICAgdmlld0JveD0iMCAwIDI0IDEwIgogICAgICAgID4KICAgICAgICAgIDx1c2UKICAgICAgICAgICAgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiCiAgICAgICAgICAgIHhsaW5rOmhyZWY9IiNvcC1zZXJpZXMtaG9yaXpvbnRhbC1zdGFtcCIKICAgICAgICAgICAgZmlsbCQ9IltbX2ZpbGxdXSIKICAgICAgICAgICAgc3Ryb2tlJD0iW1tfc3Ryb2tlXV0iCiAgICAgICAgICAgIGNsYXNzJD0ie3tfZmFkZWRDbGFzcyhmYWRlZCwgJ3NlcmllcycpfX0iCiAgICAgICAgICAgIHg9IjAiCiAgICAgICAgICAgIHk9IjEiCiAgICAgICAgICA+PC91c2U+CiAgICAgICAgPC9zdmc+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L3RlbXBsYXRlPgogIGAsdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRWt0LnByb3RvdHlwZSwidHlwZSIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEVrdC5wcm90b3R5cGUsInZlcnRpY2FsIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLEVrdC5wcm90b3R5cGUsImZpbGxPdmVycmlkZSIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxFa3QucHJvdG90eXBlLCJzdHJva2VPdmVycmlkZSIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxFa3QucHJvdG90eXBlLCJoZWlnaHQiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxFa3QucHJvdG90eXBlLCJmYWRlZCIsdm9pZCAwKSx0KFtzKCJ0eXBlIiwiZmlsbE92ZXJyaWRlIiksZSgiZGVzaWduOnR5cGUiLFN0cmluZyksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sRWt0LnByb3RvdHlwZSwiX2ZpbGwiLG51bGwpLHQoW3MoInR5cGUiLCJzdHJva2VPdmVycmlkZSIpLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLEVrdC5wcm90b3R5cGUsIl9zdHJva2UiLG51bGwpLEVrdD10KFtpKCJ0Zi1ncmFwaC1pY29uIildLEVrdCk7dmFyIFRrdD1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxnZXQgR3JhcGhJY29uVHlwZSgpe3JldHVybiBNa3R9fSk7ZnVuY3Rpb24gQ2t0KHQsZSl7Y29uc3Qgbj10LmdldENvbnRleHRNZW51KCksaT13dSh0LmdldENvbnRleHRNZW51KCkpO3JldHVybiBmdW5jdGlvbihyLG8pe2xldCBhPWN1O2NvbnN0IHM9KGZ1bmN0aW9uIGwodCl7bGV0IGU9MCxuPTAsaT10O2Zvcig7aSYmaS5vZmZzZXRMZWZ0Pj0wJiZpLm9mZnNldFRvcD49MDspZSs9aS5vZmZzZXRMZWZ0LWkuc2Nyb2xsTGVmdCxuKz1pLm9mZnNldFRvcC1pLnNjcm9sbFRvcCxpPWkub2Zmc2V0UGFyZW50O3JldHVybntsZWZ0OmUsdG9wOm59fSkodCk7ZnVuY3Rpb24gYyh0KXt0JiZ0LmNvbXBvc2VkUGF0aCgpLmluY2x1ZGVzKG4pfHwoaS5zdHlsZSgiZGlzcGxheSIsIm5vbmUiKSxkb2N1bWVudC5ib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsYyx7Y2FwdHVyZTohMH0pKX1pLnN0eWxlKCJkaXNwbGF5IiwiYmxvY2siKS5zdHlsZSgibGVmdCIsYS5jbGllbnRYLXMubGVmdCsxKyJweCIpLnN0eWxlKCJ0b3AiLGEuY2xpZW50WS1zLnRvcCsxKyJweCIpLGEucHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpLGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixjLHtjYXB0dXJlOiEwfSksaS5odG1sKCIiKSxpLmFwcGVuZCgidWwiKS5zZWxlY3RBbGwoImxpIikuZGF0YShlKS5lbnRlcigpLmFwcGVuZCgibGkiKS5vbigiY2xpY2siLCgodCxlKT0+e3QuYWN0aW9uKHRoaXMscixvKSxjKCl9KSkuaHRtbCgoZnVuY3Rpb24odCl7cmV0dXJuIHQudGl0bGUocil9KSl9fWxldCBBa3Q9bkUoKS5kb21haW4oW3RBdCwxMl0pLnJhbmdlKFsic21hbGwiLCJtZWRpdW0iLCJsYXJnZSIsInhsYXJnZSJdKTtmdW5jdGlvbiBra3QodCl7cmV0dXJuIHQudisiLS0iK3Qud31mdW5jdGlvbiBMa3QodCxlKXtsZXQgbj1lLmdldE5vZGVCeU5hbWUodC52KTtpZihudWxsPT1uLm91dHB1dFNoYXBlc3x8d2UuaXNFbXB0eShuLm91dHB1dFNoYXBlcykpcmV0dXJuIG51bGw7bGV0IGk9bi5vdXRwdXRTaGFwZXNbdC5vdXRwdXRUZW5zb3JLZXldO3JldHVybiBudWxsPT1pP251bGw6MD09PWkubGVuZ3RoPyJzY2FsYXIiOmkubWFwKCh0PT4tMT09PXQ/Ij8iOnQpKS5qb2luKCLDlyIpfWZ1bmN0aW9uIFBrdCh0LGUpe3JldHVybiBlLmVkZ2VMYWJlbEZ1bmN0aW9uP2UuZWRnZUxhYmVsRnVuY3Rpb24odCxlKTp0LmJhc2VFZGdlTGlzdC5sZW5ndGg+MT90LmJhc2VFZGdlTGlzdC5sZW5ndGgrIiB0ZW5zb3JzIjpMa3QodC5iYXNlRWRnZUxpc3RbMF0sZSl9ZnVuY3Rpb24gTmt0KHQsZSxuKXtjb25zdCBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhLQ3QsInBhdGgiKTtmb3IobGV0IHI9MTtyPHQubGVuZ3RoO3IrKylpZihpLnNldEF0dHJpYnV0ZSgiZCIsbih0LnNsaWNlKDAscikpKSxpLmdldFRvdGFsTGVuZ3RoKCk+ZSlyZXR1cm4gci0xO3JldHVybiB0Lmxlbmd0aC0xfWZ1bmN0aW9uIElrdCh0LGUsbil7bGV0IGk9WGsoKS54KCh0PT50LngpKS55KCh0PT50LnkpKSxyPXd1KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJwYXRoIikpLmF0dHIoImQiLGkodCkpLG89K2UuYXR0cigibWFya2VyV2lkdGgiKSxhPWUuYXR0cigidmlld0JveCIpLnNwbGl0KCIgIikubWFwKE51bWJlcikscz1hWzJdLWFbMF0sbD0rZS5hdHRyKCJyZWZYIiksYz1yLm5vZGUoKTtpZihuKXtjb25zdCBlPW8qKDEtbC9zKSxuPWMuZ2V0UG9pbnRBdExlbmd0aChlKSxyPU5rdCh0LGUsaSk7cmV0dXJuIHRbci0xXT17eDpuLngseTpuLnl9LHQuc2xpY2Uoci0xKX17Y29uc3QgZT0xLWwvcyxuPWMuZ2V0VG90YWxMZW5ndGgoKS1vKmUscj1jLmdldFBvaW50QXRMZW5ndGgobiksYT1Oa3QodCxuLGkpO3JldHVybiB0W2FdPXt4OnIueCx5OnIueX0sdC5zbGljZSgwLGErMSl9fWZ1bmN0aW9uIE9rdCh0LGUsbixpKXtpPWl8fCRDdC5FZGdlLkxJTkUsZS5sYWJlbCYmZS5sYWJlbC5zdHJ1Y3R1cmFsJiYoaSs9IiAiKyRDdC5FZGdlLlNUUlVDVFVSQUwpLGUubGFiZWwmJmUubGFiZWwubWV0YWVkZ2UmJmUubGFiZWwubWV0YWVkZ2UubnVtUmVmRWRnZXMmJihpKz0iICIrJEN0LkVkZ2UuUkVGRVJFTkNFX0VER0UpLG4uaGFuZGxlRWRnZVNlbGVjdGVkJiYoaSs9IiAiKyRDdC5FZGdlLlNFTEVDVEFCTEUpO2xldCByLG89InBhdGhfIitra3QoZSk7aWYobi5yZW5kZXJIaWVyYXJjaHkuZWRnZVdpZHRoRnVuY3Rpb24pcj1uLnJlbmRlckhpZXJhcmNoeS5lZGdlV2lkdGhGdW5jdGlvbihlLGkpO2Vsc2V7bGV0IHQ9MTtudWxsIT1lLmxhYmVsJiZudWxsIT1lLmxhYmVsLm1ldGFlZGdlJiYodD1lLmxhYmVsLm1ldGFlZGdlLnRvdGFsU2l6ZSkscj1uLnJlbmRlckhpZXJhcmNoeS5lZGdlV2lkdGhTaXplZEJhc2VkU2NhbGUodCl9bGV0IGE9dC5hcHBlbmQoInBhdGgiKS5hdHRyKCJpZCIsbykuYXR0cigiY2xhc3MiLGkpLnN0eWxlKCJzdHJva2Utd2lkdGgiLHIrInB4Iik7aWYoZS5sYWJlbCYmZS5sYWJlbC5tZXRhZWRnZSlpZihlLmxhYmVsLm1ldGFlZGdlLm51bVJlZkVkZ2VzKXtjb25zdCB0PWByZWZlcmVuY2UtYXJyb3doZWFkLSR7QWt0KHIpfWA7YS5zdHlsZSgibWFya2VyLXN0YXJ0IixgdXJsKCMke3R9KWApLGUubGFiZWwuc3RhcnRNYXJrZXJJZD10fWVsc2V7Y29uc3QgdD1gZGF0YWZsb3ctYXJyb3doZWFkLSR7QWt0KHIpfWA7YS5zdHlsZSgibWFya2VyLWVuZCIsYHVybCgjJHt0fSlgKSxlLmxhYmVsLmVuZE1hcmtlcklkPXR9aWYobnVsbD09ZS5sYWJlbHx8bnVsbD09ZS5sYWJlbC5tZXRhZWRnZSlyZXR1cm47bGV0IHM9UGt0KGUubGFiZWwubWV0YWVkZ2Usbi5yZW5kZXJIaWVyYXJjaHkpO251bGwhPXMmJnQuYXBwZW5kKCJ0ZXh0IikuYXBwZW5kKCJ0ZXh0UGF0aCIpLmF0dHIoInhsaW5rOmhyZWYiLCIjIitvKS5hdHRyKCJzdGFydE9mZnNldCIsIjUwJSIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJjZW50cmFsIikudGV4dChzKX1sZXQgUmt0PVhrKCkuY3VydmUoSUwpLngoKHQ9PnQueCkpLnkoKHQ9PnQueSkpO3ZhciB6a3Q7ZnVuY3Rpb24gRGt0KHQsZSxuKXtsZXQgaT1KQ3QodCwiZyIsJEN0Lk5vZGUuQ09OVEFJTkVSKS5zZWxlY3RBbGwoKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2hpbGROb2Rlc30pKS5kYXRhKGUsKHQ9PnQubm9kZS5uYW1lKyI6Iit0Lm5vZGUudHlwZSkpO3JldHVybiBpLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiZGF0YS1uYW1lIiwodD0+dC5ub2RlLm5hbWUpKS5lYWNoKChmdW5jdGlvbih0KXtsZXQgZT13dSh0aGlzKTtuLmFkZE5vZGVHcm91cCh0Lm5vZGUubmFtZSxlKX0pKS5tZXJnZShpKS5hdHRyKCJjbGFzcyIsKHQ9PiRDdC5Ob2RlLkdST1VQKyIgIitYa3QodCkpKS5lYWNoKChmdW5jdGlvbih0KXtsZXQgZT13dSh0aGlzKTtyTHQoSkN0KGUsImciLCRDdC5Bbm5vdGF0aW9uLklOQk9YKSx0LmluQW5ub3RhdGlvbnMsdCxuKSxyTHQoSkN0KGUsImciLCRDdC5Bbm5vdGF0aW9uLk9VVEJPWCksdC5vdXRBbm5vdGF0aW9ucyx0LG4pO2xldCBpPVlrdChlLHQsJEN0Lk5vZGUuU0hBUEUpO3Qubm9kZS5pc0dyb3VwTm9kZSYmKGZ1bmN0aW9uIHIodCxlLG4pe2xldCBpPUpDdCh0LCJnIiwkQ3QuTm9kZS5CVVRUT05fQ09OVEFJTkVSKTtKQ3QoaSwiY2lyY2xlIiwkQ3QuTm9kZS5CVVRUT05fQ0lSQ0xFKSxKQ3QoaSwicGF0aCIsJEN0Lk5vZGUuRVhQQU5EX0JVVFRPTikuYXR0cigiZCIsIk0wLC0yLjIgVjIuMiBNLTIuMiwwIEgyLjIiKSxKQ3QoaSwicGF0aCIsJEN0Lk5vZGUuQ09MTEFQU0VfQlVUVE9OKS5hdHRyKCJkIiwiTS0yLjIsMCBIMi4yIiksaS5vbigiY2xpY2siLCh0PT57Y3Uuc3RvcFByb3BhZ2F0aW9uKCksbi5maXJlKCJub2RlLXRvZ2dsZS1leHBhbmQiLHtuYW1lOnQubm9kZS5uYW1lfSl9KSksKGZ1bmN0aW9uIHIodCxlKXtsZXQgbj1wa3QoZSkrKGUuZXhwYW5kZWQ/ZS53aWR0aDplLmNvcmVCb3gud2lkdGgpLzItNixpPWUueS0oZS5leHBhbmRlZD9lLmhlaWdodDplLmNvcmVCb3guaGVpZ2h0KS8yKzY7ZS5ub2RlLnR5cGUhPT12QXQuU0VSSUVTfHxlLmV4cGFuZGVkfHwobis9MTAsaS09Mik7bGV0IHI9InRyYW5zbGF0ZSgiK24rIiwiK2krIikiO3Quc2VsZWN0QWxsKCJwYXRoIikudHJhbnNpdGlvbigpLmF0dHIoInRyYW5zZm9ybSIsciksdC5zZWxlY3QoImNpcmNsZSIpLnRyYW5zaXRpb24oKS5hdHRyKHtjeDpuLGN5Omkscjpsa3Qubm9kZVNpemUubWV0YS5leHBhbmRCdXR0b25SYWRpdXN9KX0pKGksZSl9KShpLHQsbiksSGt0KGksdCxuKSwoZnVuY3Rpb24gbyh0LGUsbil7aWYoZS5ub2RlLmlzR3JvdXBOb2RlKXtpZihlLmV4cGFuZGVkKXJldHVybiBhTHQodCxlLG4sJEN0LlN1YnNjZW5lLkdST1VQKTtna3QodCwiZyIsJEN0LlN1YnNjZW5lLkdST1VQKS5yZW1vdmUoKX19KShlLHQsbiksSGt0KChmdW5jdGlvbiBhKHQsZSxuKXtsZXQgaT1lLmRpc3BsYXlOYW1lLHI9ZS5ub2RlLnR5cGU9PT12QXQuTUVUQSYmIWUuZXhwYW5kZWQsbz1KQ3QodCwidGV4dCIsJEN0Lk5vZGUuTEFCRUwpLGE9by5ub2RlKCk7YS5wYXJlbnROb2RlLmFwcGVuZENoaWxkKGEpLG8uYXR0cigiZHkiLCIuMzVlbSIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIik7bGV0IHM9ODtzd2l0Y2goZS5ub2RlLnR5cGUpe2Nhc2UgdkF0Lk1FVEE6cz1lLmV4cGFuZGVkPzk6ODticmVhaztjYXNlIHZBdC5PUDpzPTZ9aWYocil7aS5sZW5ndGg+bi5tYXhNZXRhbm9kZUxhYmVsTGVuZ3RoJiYoaT1pLnN1YnN0cigwLG4ubWF4TWV0YW5vZGVMYWJlbExlbmd0aC0yKSsi4oCmIik7bGV0IHQ9KGZ1bmN0aW9uIGwodCl7cmV0dXJuIFdrdHx8KFdrdD1ETSgpLmRvbWFpbihbdC5tYXhNZXRhbm9kZUxhYmVsTGVuZ3RoTGFyZ2VGb250LHQubWF4TWV0YW5vZGVMYWJlbExlbmd0aF0pLnJhbmdlKFt0Lm1heE1ldGFub2RlTGFiZWxMZW5ndGhGb250U2l6ZSx0Lm1pbk1ldGFub2RlTGFiZWxMZW5ndGhGb250U2l6ZV0pLmNsYW1wKCEwKSksV2t0fSkobik7by5hdHRyKCJmb250LXNpemUiLHQoaS5sZW5ndGgpKyJweCIpLHM9dChpLmxlbmd0aCl9cmV0dXJuIEdrdChvLnRleHQoaSksZS5ub2RlLnR5cGUscyxlKSxvfSkoZSx0LG4pLHQsbix0Lm5vZGUudHlwZT09PXZBdC5NRVRBKSxKa3QoZSx0LG4pLChmdW5jdGlvbiBzKHQsZSl7bGV0IG49Z2t0KHQsImciLCRDdC5Ob2RlLlNIQVBFKSxpPXBrdChlKTtzd2l0Y2goZS5ub2RlLnR5cGUpe2Nhc2UgdkF0Lk9QOntjb25zdCByPWUubm9kZTt3ZS5pc051bWJlcihyLmZ1bmN0aW9uSW5wdXRJbmRleCl8fHdlLmlzTnVtYmVyKHIuZnVuY3Rpb25PdXRwdXRJbmRleCk/KGZ1bmN0aW9uIHIodCxlLG4saSxvKXtjb25zdCBhPW8vMixzPWkvMixsPVtbZSxuLWFdLFtlK3MsbithXSxbZS1zLG4rYV1dO3QudHJhbnNpdGlvbigpLmF0dHIoInBvaW50cyIsbC5tYXAoKHQ9PnQuam9pbigiLCIpKSkuam9pbigiICIpKX0pKGdrdChuLCJwb2x5Z29uIiksZS54LGUueSxlLmNvcmVCb3gud2lkdGgsZS5jb3JlQm94LmhlaWdodCk6eGt0KGdrdChuLCJlbGxpcHNlIiksaSxlLnksZS5jb3JlQm94LndpZHRoLGUuY29yZUJveC5oZWlnaHQpLHFrdCh0LGksZS55LGUubGFiZWxPZmZzZXQpO2JyZWFrfWNhc2UgdkF0Lk1FVEE6e2xldCByPW4uc2VsZWN0QWxsKCJyZWN0Iik7ZS5leHBhbmRlZD8oYmt0KHIsZS54LGUueSxlLndpZHRoLGUuaGVpZ2h0KSxCa3QodCxlKSxxa3QodCxpLGUueSwtZS5oZWlnaHQvMitlLmxhYmVsSGVpZ2h0LzIpKTooYmt0KHIsaSxlLnksZS5jb3JlQm94LndpZHRoLGUuY29yZUJveC5oZWlnaHQpLHFrdCh0LGksZS55LDApKTticmVha31jYXNlIHZBdC5TRVJJRVM6e2xldCByPWdrdChuLCJ1c2UiKTtlLmV4cGFuZGVkPyhia3QocixlLngsZS55LGUud2lkdGgsZS5oZWlnaHQpLEJrdCh0LGUpLHFrdCh0LGksZS55LC1lLmhlaWdodC8yK2UubGFiZWxIZWlnaHQvMikpOihia3QocixpLGUueSxlLmNvcmVCb3gud2lkdGgsZS5jb3JlQm94LmhlaWdodCkscWt0KHQsaSxlLnksZS5sYWJlbE9mZnNldCkpO2JyZWFrfWNhc2UgdkF0LkJSSURHRTpia3QoZ2t0KG4sInJlY3QiKSxlLngsZS55LGUud2lkdGgsZS5oZWlnaHQpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoIlVucmVjb2duaXplZCBub2RlIHR5cGU6ICIrZS5ub2RlLnR5cGUpfX0pKGUsdCl9KSksaS5leGl0KCkuZWFjaCgoZnVuY3Rpb24odCl7bi5yZW1vdmVOb2RlR3JvdXAodC5ub2RlLm5hbWUpO2xldCBlPXd1KHRoaXMpO3QuaW5Bbm5vdGF0aW9ucy5saXN0Lmxlbmd0aD4wJiZlLnNlbGVjdCgiLiIrJEN0LkFubm90YXRpb24uSU5CT1gpLnNlbGVjdEFsbCgiLiIrJEN0LkFubm90YXRpb24uR1JPVVApLmVhY2goKGU9PntuLnJlbW92ZUFubm90YXRpb25Hcm91cChlLHQpfSkpLHQub3V0QW5ub3RhdGlvbnMubGlzdC5sZW5ndGg+MCYmZS5zZWxlY3QoIi4iKyRDdC5Bbm5vdGF0aW9uLk9VVEJPWCkuc2VsZWN0QWxsKCIuIiskQ3QuQW5ub3RhdGlvbi5HUk9VUCkuZWFjaCgoZT0+e24ucmVtb3ZlQW5ub3RhdGlvbkdyb3VwKGUsdCl9KSl9KSkucmVtb3ZlKCksaX1mdW5jdGlvbiBCa3QodCxlKXtsZXQgbj1lLngtZS53aWR0aC8yK2UucGFkZGluZ0xlZnQsaT1lLnktZS5oZWlnaHQvMitlLnBhZGRpbmdUb3A7dmt0KGdrdCh0LCJnIiwkQ3QuU3Vic2NlbmUuR1JPVVApLG4saSl9ZnVuY3Rpb24gSGt0KHQsZSxuLGkpe2lmKGkpcmV0dXJuIHZvaWQgdC5hdHRyKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUiKTtsZXQgcj1Da3QobixGa3QoZS5ub2RlLG4pKTt0Lm9uKCJkYmxjbGljayIsKHQ9PntuLmZpcmUoIm5vZGUtdG9nZ2xlLWV4cGFuZCIse25hbWU6dC5ub2RlLm5hbWV9KX0pKS5vbigibW91c2VvdmVyIiwodD0+e24uaXNOb2RlRXhwYW5kZWQodCl8fG4uZmlyZSgibm9kZS1oaWdobGlnaHQiLHtuYW1lOnQubm9kZS5uYW1lfSl9KSkub24oIm1vdXNlb3V0IiwodD0+e24uaXNOb2RlRXhwYW5kZWQodCl8fG4uZmlyZSgibm9kZS11bmhpZ2hsaWdodCIse25hbWU6dC5ub2RlLm5hbWV9KX0pKS5vbigiY2xpY2siLCh0PT57Y3Uuc3RvcFByb3BhZ2F0aW9uKCksbi5maXJlKCJub2RlLXNlbGVjdCIse25hbWU6dC5ub2RlLm5hbWV9KX0pKS5vbigiY29udGV4dG1lbnUiLCgodCxlKT0+e24uZmlyZSgibm9kZS1zZWxlY3QiLHtuYW1lOnQubm9kZS5uYW1lfSksci5jYWxsKHQsZSl9KSl9ZnVuY3Rpb24gRmt0KHQsZSl7bGV0IG49W3t0aXRsZTplPT5GQXQodC5pbmNsdWRlKSxhY3Rpb246KG4saSxyKT0+e2UuZmlyZSgibm9kZS10b2dnbGUtZXh0cmFjdCIse25hbWU6dC5uYW1lfSl9fV07cmV0dXJuIGUubm9kZUNvbnRleHRNZW51SXRlbXMmJihuPW4uY29uY2F0KGUubm9kZUNvbnRleHRNZW51SXRlbXMpKSxWa3QodCkmJm4ucHVzaCh7dGl0bGU6ZT0+amt0KHQpLGFjdGlvbjoobixpLHIpPT57ZS5maXJlKCJub2RlLXRvZ2dsZS1zZXJpZXNncm91cCIse25hbWU6VWt0KHQpfSl9fSksbn1mdW5jdGlvbiBWa3QodCl7cmV0dXJuIG51bGwhPT1Va3QodCl9ZnVuY3Rpb24gVWt0KHQpe3JldHVybiB0P3QudHlwZT09PXZBdC5TRVJJRVM/dC5uYW1lOnQudHlwZT09PXZBdC5PUD90Lm93bmluZ1NlcmllczpudWxsOm51bGx9ZnVuY3Rpb24gamt0KHQpe3JldHVybihmdW5jdGlvbiBuKHQpe3JldHVybiB0PT09eEF0LkdST1VQPyJVbmdyb3VwIHRoaXMgc2VyaWVzIG9mIG5vZGVzIjoiR3JvdXAgdGhpcyBzZXJpZXMgb2Ygbm9kZXMifSkobnVsbCE9PShmdW5jdGlvbiBlKHQpe2xldCBlPW51bGw7cmV0dXJuIHQ/KHQudHlwZT09PXZBdC5TRVJJRVM/ZT10OnQucGFyZW50Tm9kZSYmdC5wYXJlbnROb2RlLnR5cGU9PT12QXQuU0VSSUVTJiYoZT10LnBhcmVudE5vZGUpLGUpOm51bGx9KSh0KT94QXQuR1JPVVA6eEF0LlVOR1JPVVApfWZ1bmN0aW9uIEdrdCh0LGUsbixpKXtsZXQgcj10Lm5vZGUoKSxvPXIudGV4dENvbnRlbnQsYT1udWxsO3N3aXRjaChlKXtjYXNlIHZBdC5NRVRBOmkmJiFpLmV4cGFuZGVkJiYoYT1sa3Qubm9kZVNpemUubWV0YS5tYXhMYWJlbFdpZHRoKTticmVhaztjYXNlIHZBdC5PUDphPWxrdC5ub2RlU2l6ZS5vcC5tYXhMYWJlbFdpZHRoO2JyZWFrO2Nhc2UtMTphPWxrdC5hbm5vdGF0aW9ucy5tYXhMYWJlbFdpZHRofWlmKG51bGwhPT1hKXJldHVybiByLnRleHRDb250ZW50PShmdW5jdGlvbiBzKHQsZSxuKXtpZighdClyZXR1cm4iIjtpZihmQXQodCxlKTw9bilyZXR1cm4gdDtsZXQgaT0wLHI9dC5sZW5ndGg7Zm9yKDtpPHI7KXtjb25zdCBvPWkrTWF0aC5yb3VuZCgoci1pKS8yKTtmQXQodC5zbGljZSgwLG8pKyLigKYiLGUpPD1uP2k9bzpyPW8tMX1yZXR1cm4gMD09PWk/dFswXTp0LnNsaWNlKDAsaSkrIuKApiJ9KShyLnRleHRDb250ZW50LG4sYSksdC5hcHBlbmQoInRpdGxlIikudGV4dChvKX0hKGZ1bmN0aW9uKHQpe3QuTk9ORT0ibm9uZSIsdC5DT01QVVRFX1RJTUU9ImNvbXB1dGVfdGltZSIsdC5ERVZJQ0U9ImRldmljZSIsdC5NRU1PUlk9Im1lbW9yeSIsdC5PUF9DT01QQVRJQklMSVRZPSJvcF9jb21wYXRpYmlsaXR5Iix0LlNUUlVDVFVSRT0ic3RydWN0dXJlIix0LlhMQV9DTFVTVEVSPSJ4bGFfY2x1c3RlciJ9KSh6a3R8fCh6a3Q9e30pKTtsZXQgV2t0PW51bGw7ZnVuY3Rpb24gcWt0KHQsZSxuLGkpe2drdCh0LCJ0ZXh0IiwkQ3QuTm9kZS5MQUJFTCkudHJhbnNpdGlvbigpLmF0dHIoIngiLGUpLmF0dHIoInkiLG4raSl9ZnVuY3Rpb24gWWt0KHQsZSxuKXtsZXQgaT1KQ3QodCwiZyIsbik7c3dpdGNoKGUubm9kZS50eXBlKXtjYXNlIHZBdC5PUDpjb25zdCB0PWUubm9kZTtpZih3ZS5pc051bWJlcih0LmZ1bmN0aW9uSW5wdXRJbmRleCl8fHdlLmlzTnVtYmVyKHQuZnVuY3Rpb25PdXRwdXRJbmRleCkpe0pDdChpLCJwb2x5Z29uIiwkQ3QuTm9kZS5DT0xPUl9UQVJHRVQpO2JyZWFrfUpDdChpLCJlbGxpcHNlIiwkQ3QuTm9kZS5DT0xPUl9UQVJHRVQpO2JyZWFrO2Nhc2UgdkF0LlNFUklFUzpsZXQgbj0iYW5ub3RhdGlvbiIscj1lO3IuY29yZUdyYXBoJiYobj1yLm5vZGUuaGFzTm9uQ29udHJvbEVkZ2VzPyJ2ZXJ0aWNhbCI6Imhvcml6b250YWwiKTtsZXQgbz1bJEN0Lk5vZGUuQ09MT1JfVEFSR0VUXTtyLmlzRmFkZWRPdXQmJm8ucHVzaCgiZmFkZWQtZWxsaXBzZSIpLEpDdChpLCJ1c2UiLG8pLmF0dHIoInhsaW5rOmhyZWYiLCIjb3Atc2VyaWVzLSIrbisiLXN0YW1wIiksSkN0KGksInJlY3QiLCRDdC5Ob2RlLkNPTE9SX1RBUkdFVCkuYXR0cigicngiLGUucmFkaXVzKS5hdHRyKCJyeSIsZS5yYWRpdXMpO2JyZWFrO2Nhc2UgdkF0LkJSSURHRTpjYXNlIHZBdC5NRVRBOkpDdChpLCJyZWN0IiwkQ3QuTm9kZS5DT0xPUl9UQVJHRVQpLmF0dHIoInJ4IixlLnJhZGl1cykuYXR0cigicnkiLGUucmFkaXVzKTticmVhaztkZWZhdWx0OnRocm93IEVycm9yKCJVbnJlY29nbml6ZWQgbm9kZSB0eXBlOiAiK2Uubm9kZS50eXBlKX1yZXR1cm4gaX1mdW5jdGlvbiBYa3QodCl7c3dpdGNoKHQubm9kZS50eXBlKXtjYXNlIHZBdC5PUDpyZXR1cm4gJEN0Lk9QTk9ERTtjYXNlIHZBdC5NRVRBOnJldHVybiAkQ3QuTUVUQU5PREU7Y2FzZSB2QXQuU0VSSUVTOnJldHVybiAkQ3QuU0VSSUVTTk9ERTtjYXNlIHZBdC5CUklER0U6cmV0dXJuICRDdC5CUklER0VOT0RFO2Nhc2UgdkF0LkVMTElQU0lTOnJldHVybiAkQ3QuRUxMSVBTSVNOT0RFfXRocm93IEVycm9yKCJVbnJlY29nbml6ZWQgbm9kZSB0eXBlOiAiK3Qubm9kZS50eXBlKX1mdW5jdGlvbiAka3QodCxlLG4pe2xldCBpPShmdW5jdGlvbiByKHQpe3JldHVybiB0LnJlcGxhY2UoLyhbOi5cW1xdLC9cXFwoXCldKS9nLCJcXCQxIil9KSh0KTtpZighbilyZXR1cm5gdXJsKCMke2l9KWA7bGV0IG89d3UobiksYT1vLnNlbGVjdCgiZGVmcyNfZ3JhcGgtZ3JhZGllbnRzIik7YS5lbXB0eSgpJiYoYT1vLmFwcGVuZCgiZGVmcyIpLmF0dHIoImlkIiwiX2dyYXBoLWdyYWRpZW50cyIpKTtsZXQgcz1hLnNlbGVjdCgibGluZWFyR3JhZGllbnQjIitpKTtpZihzLmVtcHR5KCkpe3M9YS5hcHBlbmQoImxpbmVhckdyYWRpZW50IikuYXR0cigiaWQiLHQpLHMuc2VsZWN0QWxsKCIqIikucmVtb3ZlKCk7bGV0IG49MDt3ZS5lYWNoKGUsKHQ9PntsZXQgZT10LmNvbG9yO3MuYXBwZW5kKCJzdG9wIikuYXR0cigib2Zmc2V0IixuKS5hdHRyKCJzdG9wLWNvbG9yIixlKSxzLmFwcGVuZCgic3RvcCIpLmF0dHIoIm9mZnNldCIsbit0LnByb3BvcnRpb24pLmF0dHIoInN0b3AtY29sb3IiLGUpLG4rPXQucHJvcG9ydGlvbn0pKX1yZXR1cm5gdXJsKCMke2l9KWB9ZnVuY3Rpb24gS2t0KHQpe3d1KHQpLnNlbGVjdCgiZGVmcyNfZ3JhcGgtZ3JhZGllbnRzIikucmVtb3ZlKCl9ZnVuY3Rpb24gWmt0KHQsZSxuLGkscil7bGV0IG89akF0O3N3aXRjaCh0PXR8fCgoKT0+MCksZSl7Y2FzZSB6a3QuTk9ORTpjYXNlIHprdC5TVFJVQ1RVUkU6aWYobi5ub2RlLnR5cGU9PT12QXQuTUVUQSl7bGV0IHI9bi5ub2RlLnRlbXBsYXRlSWQ7cmV0dXJuIGU9PT16a3QuU1RSVUNUVVJFJiZudWxsIT09cj9vLlNUUlVDVFVSRV9QQUxFVFRFKHQociksaSk6by5VTktOT1dOfXJldHVybiBuLm5vZGUudHlwZT09PXZBdC5TRVJJRVM/aT9vLkVYUEFOREVEX0NPTE9SOiJ3aGl0ZSI6bi5ub2RlLnR5cGU9PT12QXQuQlJJREdFP24uc3RydWN0dXJhbD8iI2YwZSI6bi5ub2RlLmluYm91bmQ/IiMwZWYiOiIjZmUwIjp3ZS5pc051bWJlcihuLm5vZGUuZnVuY3Rpb25JbnB1dEluZGV4KT8iIzc5NTU0OCI6d2UuaXNOdW1iZXIobi5ub2RlLmZ1bmN0aW9uT3V0cHV0SW5kZXgpPyIjMDA5Njg4Ijoid2hpdGUiO2Nhc2Ugemt0LkRFVklDRTpyZXR1cm4gbnVsbD09bi5kZXZpY2VDb2xvcnM/by5VTktOT1dOOmk/by5FWFBBTkRFRF9DT0xPUjoka3QoImRldmljZS0iK24ubm9kZS5uYW1lLG4uZGV2aWNlQ29sb3JzLHIpO2Nhc2Ugemt0LlhMQV9DTFVTVEVSOnJldHVybiBudWxsPT1uLnhsYUNsdXN0ZXJDb2xvcnM/by5VTktOT1dOOmk/by5FWFBBTkRFRF9DT0xPUjoka3QoInhsYS0iK24ubm9kZS5uYW1lLG4ueGxhQ2x1c3RlckNvbG9ycyxyKTtjYXNlIHprdC5DT01QVVRFX1RJTUU6cmV0dXJuIGk/by5FWFBBTkRFRF9DT0xPUjpuLmNvbXB1dGVUaW1lQ29sb3J8fG8uVU5LTk9XTjtjYXNlIHprdC5NRU1PUlk6cmV0dXJuIGk/by5FWFBBTkRFRF9DT0xPUjpuLm1lbW9yeUNvbG9yfHxvLlVOS05PV047Y2FzZSB6a3QuT1BfQ09NUEFUSUJJTElUWTpyZXR1cm4gbnVsbD09bi5jb21wYXRpYmlsaXR5Q29sb3JzP28uVU5LTk9XTjppP28uRVhQQU5ERURfQ09MT1I6JGt0KCJvcC1jb21wYXQtIituLm5vZGUubmFtZSxuLmNvbXBhdGliaWxpdHlDb2xvcnMscik7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gY2FzZSB0byBjb2xvciBub2RlcyBieSIpfX1mdW5jdGlvbiBKa3QodCxlLG4saSl7aT1pfHwkQ3QuTm9kZS5TSEFQRTtjb25zdCByPW4uaXNOb2RlSGlnaGxpZ2h0ZWQoZS5ub2RlLm5hbWUpLG89bi5pc05vZGVTZWxlY3RlZChlLm5vZGUubmFtZSksYT1lLmlzSW5FeHRyYWN0fHxlLmlzT3V0RXh0cmFjdHx8ZS5pc0xpYnJhcnlGdW5jdGlvbixzPWUuZXhwYW5kZWQmJmkhPT0kQ3QuQW5ub3RhdGlvbi5OT0RFLGw9ZS5pc0ZhZGVkT3V0O3QuY2xhc3NlZCgiaGlnaGxpZ2h0ZWQiLHIpLHQuY2xhc3NlZCgic2VsZWN0ZWQiLG8pLHQuY2xhc3NlZCgiZXh0cmFjdCIsYSksdC5jbGFzc2VkKCJleHBhbmRlZCIscyksdC5jbGFzc2VkKCJmYWRlZCIsbCk7Y29uc3QgYz10LnNlbGVjdCgiLiIraSsiIC4iKyRDdC5Ob2RlLkNPTE9SX1RBUkdFVCksdT1aa3Qobi50ZW1wbGF0ZUluZGV4LG4uY29sb3JCeSxlLHMsbi5nZXRHcmFwaFN2Z1Jvb3QoKSk7Yy5zdHlsZSgiZmlsbCIsdSksYy5zdHlsZSgic3Ryb2tlIixvP251bGw6UWt0KHUpKX1mdW5jdGlvbiBRa3QodCl7cmV0dXJuInVybCI9PT10LnN1YnN0cmluZygwLDMpP2pBdC5HUkFESUVOVF9PVVRMSU5FOlZoKHQpLmRhcmtlcigpLnRvU3RyaW5nKCl9ZnVuY3Rpb24gdEx0KHQsZSxuLGkpe2NvbnN0IHI9d3UodCk7aWYoci5zZWxlY3RBbGwoIi5pbnB1dC1oaWdobGlnaHQiKS5jbGFzc2VkKCJpbnB1dC1oaWdobGlnaHQiLCExKSxyLnNlbGVjdEFsbCgiLm5vbi1pbnB1dCIpLmNsYXNzZWQoIm5vbi1pbnB1dCIsITEpLHIuc2VsZWN0QWxsKCIuaW5wdXQtcGFyZW50IikuY2xhc3NlZCgiaW5wdXQtcGFyZW50IiwhMSksci5zZWxlY3RBbGwoIi5pbnB1dC1jaGlsZCIpLmNsYXNzZWQoImlucHV0LWNoaWxkIiwhMSksci5zZWxlY3RBbGwoIi5pbnB1dC1lZGdlLWhpZ2hsaWdodCIpLmNsYXNzZWQoImlucHV0LWVkZ2UtaGlnaGxpZ2h0IiwhMSksci5zZWxlY3RBbGwoIi5ub24taW5wdXQtZWRnZS1oaWdobGlnaHQiKS5jbGFzc2VkKCJub24taW5wdXQtZWRnZS1oaWdobGlnaHQiLCExKSxyLnNlbGVjdEFsbCgiLmlucHV0LWhpZ2hsaWdodC1zZWxlY3RlZCIpLmNsYXNzZWQoImlucHV0LWhpZ2hsaWdodC1zZWxlY3RlZCIsITEpLCFlfHwhaXx8IW4pcmV0dXJuO2xldCBvPWVMdChuLGUpLGE9e307d2UuZWFjaChvLChmdW5jdGlvbihuKXthPW5MdCh0LGUsbixhKX0pKTtsZXQgcz1PYmplY3Qua2V5cyhhKSxsPShmdW5jdGlvbiBjKHQsZSl7bGV0IG49e307cmV0dXJuIHdlLmVhY2goZSwoZnVuY3Rpb24oZSl7bGV0IGk9dC5nZXROb2RlQnlOYW1lKGUpLHI9aUx0KHQsaSk7bltyLm5hbWVdPXJ9KSksbn0pKGUscyk7IShmdW5jdGlvbiB1KHQsZSl7d2UuZm9yT3duKGUsKGZ1bmN0aW9uKGUpe2xldCBuPWU7Zm9yKDtuLm5hbWUhPT1nQXQ7KXtjb25zdCBlPXd1KHQpLnNlbGVjdChgLm5vZGVbZGF0YS1uYW1lPSIke24ubmFtZX0iXWApOyFlLm5vZGVzKCkubGVuZ3RofHxlLmNsYXNzZWQoImlucHV0LWhpZ2hsaWdodCIpfHxlLmNsYXNzZWQoInNlbGVjdGVkIil8fGUuY2xhc3NlZCgib3AiKXx8ZS5jbGFzc2VkKCJpbnB1dC1wYXJlbnQiLCEwKSxuPW4ucGFyZW50Tm9kZX19KSl9KSh0LGwpLHIuc2VsZWN0QWxsKCJnLm5vZGU6bm90KC5zZWxlY3RlZCk6bm90KC5pbnB1dC1oaWdobGlnaHQpOm5vdCguaW5wdXQtcGFyZW50KTpub3QoLmlucHV0LWNoaWxkcmVuKSIpLmNsYXNzZWQoIm5vbi1pbnB1dCIsITApLmVhY2goKGZ1bmN0aW9uKHQpe3Iuc2VsZWN0QWxsKGBbZGF0YS1uYW1lPSIke3Qubm9kZS5uYW1lfSJdYCkuY2xhc3NlZCgibm9uLWlucHV0IiwhMCl9KSksci5zZWxlY3RBbGwoImcuZWRnZTpub3QoLmlucHV0LWVkZ2UtaGlnaGxpZ2h0KSIpLmNsYXNzZWQoIm5vbi1pbnB1dC1lZGdlLWhpZ2hsaWdodCIsITApfWZ1bmN0aW9uIGVMdCh0LGUpe2xldCBuPVtdLGk9ZS5nZXROb2RlQnlOYW1lKHQpO2lmKGkgaW5zdGFuY2VvZiBNQXQpcmV0dXJuW2ldLmNvbmNhdChpLmluRW1iZWRkaW5ncyk7bGV0IHI9aS5tZXRhZ3JhcGgubm9kZXMoKTtyZXR1cm4gd2UuZWFjaChyLChmdW5jdGlvbih0KXtuPW4uY29uY2F0KGVMdCh0LGUpKX0pKSxufWZ1bmN0aW9uIG5MdCh0LGUsbixpKXtpZihpW24ubmFtZV0pcmV0dXJuIGk7aVtuLm5hbWVdPSEwO2xldCByPW4uaW5wdXRzLG89aUx0KGUsbik7d3UodCkuc2VsZWN0KGAubm9kZVtkYXRhLW5hbWU9IiR7by5uYW1lfSJdYCkuY2xhc3NlZCgiaW5wdXQtaGlnaGxpZ2h0IiwhMCk7bGV0IGE9e307d2UuZWFjaChyLChmdW5jdGlvbih0KXtsZXQgbj1lLmdldE5vZGVCeU5hbWUodC5uYW1lKTtpZih2b2lkIDA9PT1uKXJldHVybjtpZihuIGluc3RhbmNlb2YgVEF0KXtsZXQgdD1EQXQobi5uYW1lKTtuPWUuZ2V0Tm9kZUJ5TmFtZSh0KX1sZXQgaT1pTHQoZSxuKSxyPWFbaS5uYW1lXTtyP3Iub3BOb2Rlcy5wdXNoKG4pOmFbaS5uYW1lXT17dmlzaWJsZVBhcmVudDppLG9wTm9kZXM6W25dfX0pKTtsZXQgcz17fSxsPVtvXTtzW28ubmFtZV09e3RyYWNlZDohMSxpbmRleDowLGNvbm5lY3Rpb25FbmRwb2ludHM6W119O2xldCBjPW87Zm9yKGxldCB0PTE7Yy5uYW1lIT09Z0F0O3QrKyljPWMucGFyZW50Tm9kZSxzW2MubmFtZV09e3RyYWNlZDohMSxpbmRleDp0LGNvbm5lY3Rpb25FbmRwb2ludHM6W119LGxbdF09YztyZXR1cm4gd2UuZm9yT3duKGEsKGZ1bmN0aW9uKG4scil7bGV0IGE9bi52aXNpYmxlUGFyZW50O3dlLmVhY2gobi5vcE5vZGVzLChmdW5jdGlvbihuKXtpPW5MdCh0LGUsbixpKX0pKSxhLm5hbWUhPT1vLm5hbWUmJihmdW5jdGlvbiBjKHQsZSxuLGkpe2xldCByPWUsbz1lLGE9W107Zm9yKDshbltyLm5hbWVdOylvLm5hbWUhPT1yLm5hbWUmJmEucHVzaChbbyxyXSksbz1yLHI9ci5wYXJlbnROb2RlO2xldCBzPW5bci5uYW1lXS5pbmRleCxsPWlbTWF0aC5tYXgocy0xLDApXS5uYW1lLGM9bCx1PW8ubmFtZSxoPW8ubmFtZTtjb25zdCBkPXd1KHQpO2Quc2VsZWN0QWxsKGBbZGF0YS1lZGdlPSIke2h9LS0ke2x9Il1gKS5jbGFzc2VkKCJpbnB1dC1lZGdlLWhpZ2hsaWdodCIsITApLHdlLmVhY2goYSwoZnVuY3Rpb24odCl7ZC5zZWxlY3RBbGwoYFtkYXRhLWVkZ2U9IiR7dFswXS5uYW1lfS0tJHtjfX5+JHt0WzFdLm5hbWV9fn5PVVQiXWApLmNsYXNzZWQoImlucHV0LWVkZ2UtaGlnaGxpZ2h0IiwhMCl9KSk7Zm9yKGxldCB0PTE7dDxzO3QrKylkLnNlbGVjdEFsbChgW2RhdGEtZWRnZT0iJHt1fX5+JHtpW3RdLm5hbWV9fn5JTi0tJHtpW3QtMV0ubmFtZX0iXWApLmNsYXNzZWQoImlucHV0LWVkZ2UtaGlnaGxpZ2h0IiwhMCl9KSh0LGEscyxsKX0pKSxpfWZ1bmN0aW9uIGlMdCh0LGUpe2xldCBuPSExLGk9ZTtmb3IoOyFuOylpZihpPShlPWkpLnBhcmVudE5vZGUsdm9pZCAwPT09aSluPSEwO2Vsc2V7bGV0IGU9dC5nZXRSZW5kZXJOb2RlQnlOYW1lKGkubmFtZSk7ZSYmKGUuZXhwYW5kZWR8fGkgaW5zdGFuY2VvZiBNQXQpJiYobj0hMCl9cmV0dXJuIGV9ZnVuY3Rpb24gckx0KHQsZSxuLGkpe2xldCByPXQuc2VsZWN0QWxsKChmdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkTm9kZXN9KSkuZGF0YShlLmxpc3QsKHQ9PnQubm9kZS5uYW1lKSk7cmV0dXJuIHIuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJkYXRhLW5hbWUiLCh0PT50Lm5vZGUubmFtZSkpLmVhY2goKGZ1bmN0aW9uKHQpe2xldCBlPXd1KHRoaXMpO2kuYWRkQW5ub3RhdGlvbkdyb3VwKHQsbixlKTtsZXQgcj0kQ3QuQW5ub3RhdGlvbi5FREdFLG89dC5yZW5kZXJNZXRhZWRnZUluZm8mJnQucmVuZGVyTWV0YWVkZ2VJbmZvLm1ldGFlZGdlO28mJiFvLm51bVJlZ3VsYXJFZGdlcyYmKHIrPSIgIiskQ3QuQW5ub3RhdGlvbi5DT05UUk9MX0VER0UpLG8mJm8ubnVtUmVmRWRnZXMmJihyKz0iICIrJEN0LkVkZ2UuUkVGX0xJTkUpLE9rdChlLHQsaSxyKSx0LmFubm90YXRpb25UeXBlIT09S0F0LkVMTElQU0lTPygoZnVuY3Rpb24gYSh0LGUpe2xldCBuPWUubm9kZS5uYW1lLnNwbGl0KCIvIik7b0x0KHQsbltuLmxlbmd0aC0xXSxlLG51bGwpfSkoZSx0KSwoZnVuY3Rpb24gcyh0LGUpe2UuYW5ub3RhdGlvblR5cGU9PT1LQXQuU1VNTUFSWT9KQ3QodCwidXNlIikuYXR0cigiY2xhc3MiLCJzdW1tYXJ5IikuYXR0cigieGxpbms6aHJlZiIsIiNzdW1tYXJ5LWljb24iKS5hdHRyKCJjdXJzb3IiLCJwb2ludGVyIik6SkN0KFlrdCh0LGUsJEN0LkFubm90YXRpb24uTk9ERSksInRpdGxlIikudGV4dChlLm5vZGUubmFtZSl9KShlLHQpKTpvTHQoZSx0Lm5vZGUubmFtZSx0LCRDdC5Bbm5vdGF0aW9uLkVMTElQU0lTKX0pKS5tZXJnZShyKS5hdHRyKCJjbGFzcyIsKHQ9PiRDdC5Bbm5vdGF0aW9uLkdST1VQKyIgIisoZnVuY3Rpb24gZSh0KXtyZXR1cm4oS0F0W3RdfHwiIikudG9Mb3dlckNhc2UoKXx8bnVsbH0pKHQuYW5ub3RhdGlvblR5cGUpKyIgIitYa3QodCkpKS5lYWNoKChmdW5jdGlvbih0KXtsZXQgZT13dSh0aGlzKTshKGZ1bmN0aW9uIHIodCxlLG4saSl7bGV0IHI9cGt0KGUpO24ucmVuZGVyTm9kZUluZm8mJm4uYW5ub3RhdGlvblR5cGUhPT1LQXQuRUxMSVBTSVMmJkprdCh0LG4ucmVuZGVyTm9kZUluZm8saSwkQ3QuQW5ub3RhdGlvbi5OT0RFKSxuLmFubm90YXRpb25UeXBlPT09S0F0LlNVTU1BUlkmJihuLndpZHRoKz0xMCksdC5zZWxlY3QoInRleHQuIiskQ3QuQW5ub3RhdGlvbi5MQUJFTCkudHJhbnNpdGlvbigpLmF0dHIoIngiLHIrbi5keCsobi5pc0luPy0xOjEpKihuLndpZHRoLzIrbi5sYWJlbE9mZnNldCkpLmF0dHIoInkiLGUueStuLmR5KSx0LnNlbGVjdCgidXNlLnN1bW1hcnkiKS50cmFuc2l0aW9uKCkuYXR0cigieCIscituLmR4LTMpLmF0dHIoInkiLGUueStuLmR5LTYpLHhrdCh0LnNlbGVjdCgiLiIrJEN0LkFubm90YXRpb24uTk9ERSsiIGVsbGlwc2UiKSxyK24uZHgsZS55K24uZHksbi53aWR0aCxuLmhlaWdodCksYmt0KHQuc2VsZWN0KCIuIiskQ3QuQW5ub3RhdGlvbi5OT0RFKyIgcmVjdCIpLHIrbi5keCxlLnkrbi5keSxuLndpZHRoLG4uaGVpZ2h0KSxia3QodC5zZWxlY3QoIi4iKyRDdC5Bbm5vdGF0aW9uLk5PREUrIiB1c2UiKSxyK24uZHgsZS55K24uZHksbi53aWR0aCxuLmhlaWdodCksdC5zZWxlY3QoInBhdGguIiskQ3QuQW5ub3RhdGlvbi5FREdFKS50cmFuc2l0aW9uKCkuYXR0cigiZCIsKHQ9PntsZXQgbj10LnBvaW50cy5tYXAoKHQ9Pih7eDp0LmR4K3IseTp0LmR5K2UueX0pKSk7cmV0dXJuIFJrdChuKX0pKX0pKGUsbix0LGkpLHQuYW5ub3RhdGlvblR5cGUhPT1LQXQuRUxMSVBTSVMmJihmdW5jdGlvbiBvKHQsZSxuLGkpe3Qub24oIm1vdXNlb3ZlciIsKHQ9PntpLmZpcmUoImFubm90YXRpb24taGlnaGxpZ2h0Iix7bmFtZTp0Lm5vZGUubmFtZSxob3N0TmFtZTplLm5vZGUubmFtZX0pfSkpLm9uKCJtb3VzZW91dCIsKHQ9PntpLmZpcmUoImFubm90YXRpb24tdW5oaWdobGlnaHQiLHtuYW1lOnQubm9kZS5uYW1lLGhvc3ROYW1lOmUubm9kZS5uYW1lfSl9KSkub24oImNsaWNrIiwodD0+e2N1LnN0b3BQcm9wYWdhdGlvbigpLGkuZmlyZSgiYW5ub3RhdGlvbi1zZWxlY3QiLHtuYW1lOnQubm9kZS5uYW1lLGhvc3ROYW1lOmUubm9kZS5uYW1lfSl9KSksbi5hbm5vdGF0aW9uVHlwZSE9PUtBdC5TVU1NQVJZJiZuLmFubm90YXRpb25UeXBlIT09S0F0LkNPTlNUQU5UJiZ0Lm9uKCJjb250ZXh0bWVudSIsQ2t0KGksRmt0KG4ubm9kZSxpKSkpfSkoZSxuLHQsaSl9KSksci5leGl0KCkuZWFjaCgoZnVuY3Rpb24odCl7aS5yZW1vdmVBbm5vdGF0aW9uR3JvdXAodCxuKX0pKS5yZW1vdmUoKSxyfWZ1bmN0aW9uIG9MdCh0LGUsbixpKXtsZXQgcj0kQ3QuQW5ub3RhdGlvbi5MQUJFTDtyZXR1cm4gaSYmKHIrPSIgIitpKSxHa3QodC5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIscikuYXR0cigiZHkiLCIuMzVlbSIpLmF0dHIoInRleHQtYW5jaG9yIixuLmlzSW4/ImVuZCI6InN0YXJ0IikudGV4dChlKSwtMSw1KX1mdW5jdGlvbiBhTHQodCxlLG4saSl7bGV0IHI9WkN0KHQsImciLGk9aXx8JEN0LlNjZW5lLkdST1VQKS5lbXB0eSgpLG89SkN0KHQsImciLGkpLGE9SkN0KG8sImciLCRDdC5TY2VuZS5DT1JFKSxzPXdlLnJlZHVjZShlLmNvcmVHcmFwaC5ub2RlcygpLCgodCxuKT0+e2xldCBpPWUuY29yZUdyYXBoLm5vZGUobik7cmV0dXJuIGkuZXhjbHVkZWR8fHQucHVzaChpKSx0fSksW10pO3JldHVybiBlLm5vZGUudHlwZT09PXZBdC5TRVJJRVMmJnMucmV2ZXJzZSgpLChmdW5jdGlvbiBsKHQsZSxuKXtjb25zdCBpPW47bGV0IHI9W107cj13ZS5yZWR1Y2UoZS5lZGdlcygpLCgodCxuKT0+e2xldCBpPWUuZWRnZShuKTtyZXR1cm4gdC5wdXNoKHt2Om4udix3Om4udyxsYWJlbDppfSksdH0pLHIpO2xldCBvPUpDdCh0LCJnIiwkQ3QuRWRnZS5DT05UQUlORVIpLnNlbGVjdEFsbCgoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZE5vZGVzfSkpLmRhdGEocixra3QpO28uZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsJEN0LkVkZ2UuR1JPVVApLmF0dHIoImRhdGEtZWRnZSIsa2t0KS5lYWNoKChmdW5jdGlvbih0KXtsZXQgZT13dSh0aGlzKTt0LmxhYmVsLmVkZ2VHcm91cD1lLGkuX2VkZ2VHcm91cEluZGV4W2trdCh0KV09ZSxpLmhhbmRsZUVkZ2VTZWxlY3RlZCYmZS5vbigiY2xpY2siLCh0PT57Y3Uuc3RvcFByb3BhZ2F0aW9uKCksaS5maXJlKCJlZGdlLXNlbGVjdCIse2VkZ2VEYXRhOnQsZWRnZUdyb3VwOmV9KX0pKSxPa3QoZSx0LGkpfSkpLm1lcmdlKG8pLmVhY2goKGZ1bmN0aW9uKCl7IShmdW5jdGlvbiB0KGUsbil7d3Uobikuc2VsZWN0KCJwYXRoLiIrJEN0LkVkZ2UuTElORSkudHJhbnNpdGlvbigpLmF0dHJUd2VlbigiZCIsKGZ1bmN0aW9uKHQsbixpKXtyZXR1cm4oZnVuY3Rpb24gcih0LGUsbixpLG8pe2xldCBhPW4ubGFiZWwscz1hLmFkam9pbmluZ01ldGFlZGdlLGw9YS5wb2ludHM7Y29uc3R7c2hhZG93Um9vdDpjfT10O2lmKG4ubGFiZWwuc3RhcnRNYXJrZXJJZCYmKGw9SWt0KGwsd3UoYy5xdWVyeVNlbGVjdG9yKCIjIituLmxhYmVsLnN0YXJ0TWFya2VySWQpKSwhMCkpLG4ubGFiZWwuZW5kTWFya2VySWQmJihsPUlrdChsLHd1KGMucXVlcnlTZWxlY3RvcigiIyIrbi5sYWJlbC5lbmRNYXJrZXJJZCkpLCExKSksIXMpcmV0dXJuIFVkKG8sUmt0KGwpKTtsZXQgdT1zLmVkZ2VHcm91cC5ub2RlKCkuZmlyc3RDaGlsZCxoPWEubWV0YWVkZ2UuaW5ib3VuZDtyZXR1cm4gZnVuY3Rpb24odCl7bGV0IG49dS5nZXRQb2ludEF0TGVuZ3RoKGg/dS5nZXRUb3RhbExlbmd0aCgpOjApLm1hdHJpeFRyYW5zZm9ybSh1LmdldENUTSgpKS5tYXRyaXhUcmFuc2Zvcm0oZS5nZXRDVE0oKS5pbnZlcnNlKCkpLGk9aD8wOmwubGVuZ3RoLTE7cmV0dXJuIGxbaV0ueD1uLngsbFtpXS55PW4ueSxSa3QobCl9fSkoZSx0aGlzLHQsMCxpKX0pKX0pKG4sdGhpcyl9KSkuZWFjaCgoZnVuY3Rpb24odCl7IShmdW5jdGlvbiBlKHQsbixpKXt0LmNsYXNzZWQoImZhZGVkIixuLmxhYmVsLmlzRmFkZWRPdXQpO2xldCByPW4ubGFiZWwubWV0YWVkZ2U7dC5zZWxlY3QoInBhdGguIiskQ3QuRWRnZS5MSU5FKS5jbGFzc2VkKCJjb250cm9sLWRlcCIsciYmIXIubnVtUmVndWxhckVkZ2VzKX0pKHd1KHRoaXMpLHQpfSkpLG8uZXhpdCgpLmVhY2goKHQ9PntkZWxldGUgaS5fZWRnZUdyb3VwSW5kZXhba2t0KHQpXX0pKS5yZW1vdmUoKX0pKGEsZS5jb3JlR3JhcGgsbiksRGt0KGEscyxuKSxlLmlzb2xhdGVkSW5FeHRyYWN0Lmxlbmd0aD4wP0RrdChKQ3QobywiZyIsJEN0LlNjZW5lLklORVhUUkFDVCksZS5pc29sYXRlZEluRXh0cmFjdCxuKTpaQ3QobywiZyIsJEN0LlNjZW5lLklORVhUUkFDVCkucmVtb3ZlKCksZS5pc29sYXRlZE91dEV4dHJhY3QubGVuZ3RoPjA/RGt0KEpDdChvLCJnIiwkQ3QuU2NlbmUuT1VURVhUUkFDVCksZS5pc29sYXRlZE91dEV4dHJhY3Qsbik6WkN0KG8sImciLCRDdC5TY2VuZS5PVVRFWFRSQUNUKS5yZW1vdmUoKSxlLmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0Lmxlbmd0aD4wP0RrdChKQ3QobywiZyIsJEN0LlNjZW5lLkZVTkNUSU9OX0xJQlJBUlkpLGUubGlicmFyeUZ1bmN0aW9uc0V4dHJhY3Qsbik6WkN0KG8sImciLCRDdC5TY2VuZS5GVU5DVElPTl9MSUJSQVJZKS5yZW1vdmUoKSwoZnVuY3Rpb24gYyh0LGUpe2xldCBuPWUubm9kZS50eXBlPT09dkF0LlNFUklFUz8wOmxrdC5zdWJzY2VuZS5tZXRhLmxhYmVsSGVpZ2h0O3ZrdChna3QodCwiZyIsX2t0LlNjZW5lLkNPUkUpLDAsbik7bGV0IGk9ZS5pc29sYXRlZEluRXh0cmFjdC5sZW5ndGg+MCxyPWUuaXNvbGF0ZWRPdXRFeHRyYWN0Lmxlbmd0aD4wLG89ZS5saWJyYXJ5RnVuY3Rpb25zRXh0cmFjdC5sZW5ndGg+MCxhPWxrdC5zdWJzY2VuZS5tZXRhLmV4dHJhY3RYT2Zmc2V0LHM9MDtpZihpJiYocys9ZS5vdXRFeHRyYWN0Qm94LndpZHRoKSxyJiYocys9ZS5vdXRFeHRyYWN0Qm94LndpZHRoKSxpKXtsZXQgaT1lLmNvcmVCb3gud2lkdGg7aT1zPGNrdD9pLWNrdCtlLmluRXh0cmFjdEJveC53aWR0aC8yOmktZS5pbkV4dHJhY3RCb3gud2lkdGgvMi1lLm91dEV4dHJhY3RCb3gud2lkdGgtKHI/YTowKSxpPWktZS5saWJyYXJ5RnVuY3Rpb25zQm94LndpZHRoLShvP2E6MCksdmt0KGdrdCh0LCJnIixfa3QuU2NlbmUuSU5FWFRSQUNUKSxpLG4pfWlmKHIpe2xldCBpPWUuY29yZUJveC53aWR0aDtzPGNrdD9pPWktY2t0K2Uub3V0RXh0cmFjdEJveC53aWR0aC8yOmktPWUub3V0RXh0cmFjdEJveC53aWR0aC8yLGk9aS1lLmxpYnJhcnlGdW5jdGlvbnNCb3gud2lkdGgtKG8/YTowKSx2a3QoZ2t0KHQsImciLF9rdC5TY2VuZS5PVVRFWFRSQUNUKSxpLG4pfWlmKG8pe2xldCBpPWUuY29yZUJveC53aWR0aC1lLmxpYnJhcnlGdW5jdGlvbnNCb3gud2lkdGgvMjt2a3QoZ2t0KHQsImciLF9rdC5TY2VuZS5GVU5DVElPTl9MSUJSQVJZKSxpLG4pfX0pKG8sZSksciYmby5hdHRyKCJvcGFjaXR5IiwwKS50cmFuc2l0aW9uKCkuYXR0cigib3BhY2l0eSIsMSksb31sZXQgc0x0PWNsYXNzIGV4dGVuZHModHIoeWUpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5ub2RlPW51bGwsdGhpcy5yZW5kZXJJbmZvPW51bGwsdGhpcy5jb2xvckJ5PXprdC5TVFJVQ1RVUkUsdGhpcy50ZW1wbGF0ZUluZGV4PW51bGwsdGhpcy50eXBlPW51bGwsdGhpcy52ZXJ0aWNhbD0hMSx0aGlzLmNvbnN0PSExLHRoaXMuc3VtbWFyeT0hMSx0aGlzLmZpbGw9bnVsbCx0aGlzLmhlaWdodD0yMH1fY29tcHV0ZUZpbGxPdmVycmlkZSh0LGUsbixpLHIpe3JldHVybiB0JiZlJiZpP1prdChpLG4sZSwhMSk6cn1fZ2V0U3Ryb2tlT3ZlcnJpZGUodCl7cmV0dXJuIHQ/UWt0KHQpOm51bGx9X2dldFR5cGUodCxlLG4saSl7Y29uc3R7R3JhcGhJY29uVHlwZTpyfT1Ua3Q7aWYodClzd2l0Y2godC50eXBlKXtjYXNlIHZBdC5PUDp7Y29uc3QgaT10Lm9wO3JldHVybiJzdHJpbmciIT10eXBlb2YgaT9yLk9QOiJDb25zdCI9PT1pfHxuP3IuQ09OU1Q6aS5lbmRzV2l0aCgiU3VtbWFyeSIpfHxlP3IuU1VNTUFSWTpyLk9QfWNhc2UgdkF0Lk1FVEE6cmV0dXJuIHIuTUVUQTtjYXNlIHZBdC5TRVJJRVM6cmV0dXJuIHIuU0VSSUVTfXJldHVybiBpfV9pc1ZlcnRpY2FsKHQsZSl7cmV0dXJuIHQ/dC5oYXNOb25Db250cm9sRWRnZXM6ISFlfV9nZXRGYWRlZCh0KXtyZXR1cm4gdCYmdC5pc0ZhZGVkT3V0fV9vbkZpbGxPdmVycmlkZUNoYW5nZWQodCxlKXtjb25zdHtub2RlOm4scmVuZGVySW5mbzppLGNvbG9yQnk6cix0ZW1wbGF0ZUluZGV4Om99PXRoaXM7dCE9PWUmJktrdCh0aGlzLiQuaWNvbi5nZXRTdmdEZWZpbmFibGVFbGVtZW50KCkpLG4mJmkmJm8mJlprdChvLHIsaSwhMSx0aGlzLiQuaWNvbi5nZXRTdmdEZWZpbmFibGVFbGVtZW50KCkpfX07c0x0LnRlbXBsYXRlPV9lYAogICAgPHN0eWxlPgogICAgICB0Zi1ncmFwaC1pY29uIHsKICAgICAgICAtLXRiLWdyYXBoLWZhZGVkOiB2YXIoLS10Yi1ncmFwaC1mYWRlZCk7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8dGYtZ3JhcGgtaWNvbgogICAgICBpZD0iaWNvbiIKICAgICAgdHlwZT0iW1tfZ2V0VHlwZShub2RlLCBzdW1tYXJ5LCBjb25zdCwgdHlwZSldXSIKICAgICAgaGVpZ2h0PSJbW2hlaWdodF1dIgogICAgICBmaWxsLW92ZXJyaWRlPSJbW19maWxsT3ZlcnJpZGVdXSIKICAgICAgc3Ryb2tlLW92ZXJyaWRlPSJbW19nZXRTdHJva2VPdmVycmlkZShfZmlsbE92ZXJyaWRlKV1dIgogICAgICBmYWRlZD0iW1tfZ2V0RmFkZWQocmVuZGVySW5mbyldXSIKICAgICAgdmVydGljYWw9IltbX2lzVmVydGljYWwobm9kZSwgdmVydGljYWwpXV0iCiAgICA+PC90Zi1ncmFwaC1pY29uPgogIGAsdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sc0x0LnByb3RvdHlwZSwibm9kZSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxzTHQucHJvdG90eXBlLCJyZW5kZXJJbmZvIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLHNMdC5wcm90b3R5cGUsImNvbG9yQnkiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pXSxzTHQucHJvdG90eXBlLCJ0ZW1wbGF0ZUluZGV4Iix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLHNMdC5wcm90b3R5cGUsInR5cGUiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxzTHQucHJvdG90eXBlLCJ2ZXJ0aWNhbCIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHNMdC5wcm90b3R5cGUsImNvbnN0Iix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sc0x0LnByb3RvdHlwZSwic3VtbWFyeSIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxzTHQucHJvdG90eXBlLCJmaWxsIix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLHNMdC5wcm90b3R5cGUsImhlaWdodCIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZyxjb21wdXRlZDoiX2NvbXB1dGVGaWxsT3ZlcnJpZGUobm9kZSwgcmVuZGVySW5mbywgY29sb3JCeSwgdGVtcGxhdGVJbmRleCwgZmlsbCkiLG9ic2VydmVyOiJfb25GaWxsT3ZlcnJpZGVDaGFuZ2VkIn0pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxzTHQucHJvdG90eXBlLCJfZmlsbE92ZXJyaWRlIix2b2lkIDApLHNMdD10KFtpKCJ0Zi1ub2RlLWljb24iKV0sc0x0KTtsZXQgbEx0PWNsYXNzIGV4dGVuZHModHIoeWUpKXtfaXRlbVR5cGVDaGFuZ2VkKCl7InN1Ym5vZGUiIT09dGhpcy5pdGVtVHlwZT90aGlzLiRbImxpc3QtaXRlbSJdLmNsYXNzTGlzdC5hZGQoImNsaWNrYWJsZSIpOnRoaXMuJFsibGlzdC1pdGVtIl0uY2xhc3NMaXN0LnJlbW92ZSgiY2xpY2thYmxlIil9X25vZGVMaXN0ZW5lcih0KXt0aGlzLmZpcmUoIm5vZGUtbGlzdC1pdGVtLSIrdC50eXBlLHtub2RlTmFtZTp0aGlzLm5hbWUsdHlwZTp0aGlzLml0ZW1UeXBlfSl9X2ZhZGVkQ2xhc3ModCl7cmV0dXJuIHQmJnQuaXNGYWRlZE91dD8iZmFkZWQiOiIifX07ZnVuY3Rpb24gY0x0KHQsZSxuKXtyZXR1cm4gd2Uuc29ydEJ5KHQsW3Q9PmUubm9kZSh0KS5vcCx0PT5lLm5vZGUodCkudGVtcGxhdGVJZCx0PT5lLm5laWdoYm9ycyh0KS5sZW5ndGgsdD0+ZS5wcmVkZWNlc3NvcnModCkubGVuZ3RoLHQ9PmUuc3VjY2Vzc29ycyh0KS5sZW5ndGgsdD0+dC5zdWJzdHIobi5sZW5ndGgpXSl9ZnVuY3Rpb24gdUx0KHQsZSl7aWYoIShmdW5jdGlvbiBuKHQsZSl7bGV0IG49QkF0KHQpLGk9QkF0KGUpO2ZvcihsZXQgdD0wO3Q8bi5sZW5ndGg7dCsrKWlmKG5bdF0hPT1pW3RdKXJldHVybiExO3JldHVybiEwfSkodCxlKSlyZXR1cm4hMTtsZXQgaT10LmdyYXBoKCkubmFtZSxyPWUuZ3JhcGgoKS5uYW1lLG89e30sYT17fSxzPVtdO2Z1bmN0aW9uIGwodCxlKXtsZXQgbj10LnN1YnN0cihpLmxlbmd0aCksbD1lLnN1YnN0cihyLmxlbmd0aCk7cmV0dXJuIG9bbl1eYVtsXT8oY29uc29sZS53YXJuKCJkaWZmZXJlbnQgdmlzaXQgcGF0dGVybiIsIlsiK2krIl0iLG4sIlsiK3IrIl0iLGwpLCEwKToob1tuXXx8KG9bbl09YVtsXT0hMCxzLnB1c2goe24xOnQsbjI6ZX0pKSwhMSl9bGV0IGM9dC5zb3VyY2VzKCksdT1lLnNvdXJjZXMoKTtpZihjLmxlbmd0aCE9PXUubGVuZ3RoKXJldHVybiBjb25zb2xlLmxvZygiZGlmZmVyZW50IHNvdXJjZSBsZW5ndGgiKSwhMTtjPWNMdChjLHQsaSksdT1jTHQodSxlLHIpO2ZvcihsZXQgdD0wO3Q8Yy5sZW5ndGg7dCsrKWlmKGwoY1t0XSx1W3RdKSlyZXR1cm4hMTtmb3IoO3MubGVuZ3RoPjA7KXtsZXQgbj1zLnBvcCgpO2lmKCFoTHQodC5ub2RlKG4ubjEpLGUubm9kZShuLm4yKSkpcmV0dXJuITE7bGV0IG89dC5zdWNjZXNzb3JzKG4ubjEpLGE9ZS5zdWNjZXNzb3JzKG4ubjIpO2lmKG8ubGVuZ3RoIT09YS5sZW5ndGgpcmV0dXJuIGNvbnNvbGUubG9nKCIjIG9mIHN1Y2Nlc3NvcnMgbWlzbWF0Y2giLG8sYSksITE7bz1jTHQobyx0LGkpLGE9Y0x0KGEsZSxyKTtmb3IobGV0IHQ9MDt0PG8ubGVuZ3RoO3QrKylpZihsKG9bdF0sYVt0XSkpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gaEx0KHQsZSl7aWYodC50eXBlPT09dkF0Lk1FVEEpe2xldCBuPXQsaT1lO3JldHVybiBuLnRlbXBsYXRlSWQmJmkudGVtcGxhdGVJZCYmbi50ZW1wbGF0ZUlkPT09aS50ZW1wbGF0ZUlkfWlmKHQudHlwZT09PXZBdC5PUCYmZS50eXBlPT09dkF0Lk9QKXJldHVybiB0Lm9wPT09ZS5vcDtpZih0LnR5cGU9PT12QXQuU0VSSUVTJiZlLnR5cGU9PT12QXQuU0VSSUVTKXtsZXQgbj10LGk9ZSxyPW4ubWV0YWdyYXBoLm5vZGVDb3VudCgpO3JldHVybiByPT09aS5tZXRhZ3JhcGgubm9kZUNvdW50KCkmJigwPT09cnx8bi5tZXRhZ3JhcGgubm9kZShuLm1ldGFncmFwaC5ub2RlcygpWzBdKS5vcD09PWkubWV0YWdyYXBoLm5vZGUoaS5tZXRhZ3JhcGgubm9kZXMoKVswXSkub3ApfXJldHVybiExfXZhciBkTHQ7bEx0LnRlbXBsYXRlPV9lYAogICAgPHN0eWxlPgogICAgICAjbGlzdC1pdGVtIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBjb2xvcjogdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpOwogICAgICAgIGZvbnQtc2l6ZTogMTFwdDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KCiAgICAgICNsaXN0LWl0ZW06aG92ZXIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWdvb2dsZS15ZWxsb3ctMTAwKTsKICAgICAgfQoKICAgICAgLmNsaWNrYWJsZSB7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICB9CgogICAgICAjbGlzdC1pdGVtIHNwYW4gewogICAgICAgIG1hcmdpbi1sZWZ0OiA0MHB4OwogICAgICB9CgogICAgICAjbGlzdC1pdGVtLmV4Y2x1ZGVkIHNwYW4gewogICAgICAgIGNvbG9yOiAjOTk5OwogICAgICB9CgogICAgICAjbGlzdC1pdGVtIHNwYW4uZWRnZS1sYWJlbCB7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICBtYXJnaW4tbGVmdDogM3B4OwogICAgICAgIG1hcmdpbi1yaWdodDogNXB4OwogICAgICB9CgogICAgICAubm9kZS1pY29uIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAxcHg7CiAgICAgICAgbGVmdDogMnB4OwogICAgICB9CgogICAgICAuZmFkZWQgc3BhbiB7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLWdyYXBoLWZhZGVkKTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2CiAgICAgIGlkPSJsaXN0LWl0ZW0iCiAgICAgIG9uLW1vdXNlb3Zlcj0iX25vZGVMaXN0ZW5lciIKICAgICAgb24tbW91c2VvdXQ9Il9ub2RlTGlzdGVuZXIiCiAgICAgIG9uLWNsaWNrPSJfbm9kZUxpc3RlbmVyIgogICAgPgogICAgICA8ZGl2IGNsYXNzJD0ie3tfZmFkZWRDbGFzcyhpdGVtUmVuZGVySW5mbyl9fSI+CiAgICAgICAgPHRmLW5vZGUtaWNvbgogICAgICAgICAgY2xhc3M9Im5vZGUtaWNvbiIKICAgICAgICAgIGhlaWdodD0iMTIiCiAgICAgICAgICBjb2xvci1ieT0iW1tjb2xvckJ5XV0iCiAgICAgICAgICBjb2xvci1ieS1wYXJhbXM9IltbY29sb3JCeVBhcmFtc11dIgogICAgICAgICAgbm9kZT0iW1tpdGVtTm9kZV1dIgogICAgICAgICAgcmVuZGVyLWluZm89IltbaXRlbVJlbmRlckluZm9dXSIKICAgICAgICAgIHRlbXBsYXRlLWluZGV4PSJbW3RlbXBsYXRlSW5kZXhdXSIKICAgICAgICA+CiAgICAgICAgPC90Zi1ub2RlLWljb24+CiAgICAgICAgPHNwYW4gdGl0bGUkPSJbW25hbWVdXSI+W1tuYW1lXV08L3NwYW4+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgYCx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxsTHQucHJvdG90eXBlLCJjYXJkTm9kZSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxsTHQucHJvdG90eXBlLCJpdGVtTm9kZSIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxsTHQucHJvdG90eXBlLCJlZGdlTGFiZWwiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sbEx0LnByb3RvdHlwZSwiaXRlbVJlbmRlckluZm8iLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sbEx0LnByb3RvdHlwZSwibmFtZSIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZyxvYnNlcnZlcjoiX2l0ZW1UeXBlQ2hhbmdlZCJ9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sbEx0LnByb3RvdHlwZSwiaXRlbVR5cGUiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sbEx0LnByb3RvdHlwZSwiY29sb3JCeSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxsTHQucHJvdG90eXBlLCJjb2xvckJ5UGFyYW1zIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sbEx0LnByb3RvdHlwZSwidGVtcGxhdGVJbmRleCIsdm9pZCAwKSxsTHQ9dChbaSgidGYtZ3JhcGgtb3AtY29tcGF0LWxpc3QtaXRlbSIpXSxsTHQpLChmdW5jdGlvbih0KXt0W3QuVEVNUExBVEVTX1VQREFURUQ9MF09IlRFTVBMQVRFU19VUERBVEVEIn0pKGRMdHx8KGRMdD17fSkpO2NsYXNzIHBMdCBleHRlbmRzIGNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5ldmVudFR5cGVUb0xpc3RlbmVycz1uZXcgTWFwfWdldExpc3RlbmVycyh0KXtyZXR1cm4gdGhpcy5ldmVudFR5cGVUb0xpc3RlbmVycy5oYXModCl8fHRoaXMuZXZlbnRUeXBlVG9MaXN0ZW5lcnMuc2V0KHQsW10pLHRoaXMuZXZlbnRUeXBlVG9MaXN0ZW5lcnMuZ2V0KHQpfWFkZExpc3RlbmVyKHQsZSl7dGhpcy5nZXRMaXN0ZW5lcnModCkucHVzaChlKX1yZW1vdmVMaXN0ZW5lcih0LGUpe2NvbnN0IG49dGhpcy5nZXRMaXN0ZW5lcnModCkuZmlsdGVyKCh0PT50IT09ZSkpO3RoaXMuZXZlbnRUeXBlVG9MaXN0ZW5lcnMuc2V0KHQsbil9ZGlzcGF0Y2hFdmVudCh0LGUpe2Zvcihjb25zdCBuIG9mIHRoaXMuZ2V0TGlzdGVuZXJzKHQpKW4oZSl9fXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuaGFzU2hhcGVJbmZvPSExLHRoaXMubWF4TWV0YUVkZ2VTaXplPTEsdGhpcy5ncmFwaE9wdGlvbnM9e30sdGhpcy50ZW1wbGF0ZXM9bnVsbCx0aGlzLmdyYXBoT3B0aW9ucy5jb21wb3VuZD0hMCx0aGlzLmdyYXBoT3B0aW9ucy5yYW5rZGlyPXQucmFua0RpcmVjdGlvbix0aGlzLnJvb3Q9RUF0KGdBdCx0aGlzLmdyYXBoT3B0aW9ucyksdGhpcy5saWJyYXJ5RnVuY3Rpb25zPXt9LHRoaXMuc2VyaWVzR3JvdXBNYXA9bmV3IE1hcCh0LnNlcmllc01hcCksdGhpcy5kZXZpY2VzPW51bGwsdGhpcy54bGFDbHVzdGVycz1udWxsLHRoaXMudmVyaWZ5VGVtcGxhdGU9dC52ZXJpZnlUZW1wbGF0ZSx0aGlzLmluZGV4PXt9LHRoaXMuaW5kZXguX19yb290X189dGhpcy5yb290LHRoaXMub3JkZXJpbmdzPXt9fWdldFNlcmllc0dyb3VwVHlwZSh0KXt2YXIgZTtyZXR1cm4gbnVsbCE9PShlPXRoaXMuc2VyaWVzR3JvdXBNYXAuZ2V0KHQpKSYmdm9pZCAwIT09ZT9lOnhBdC5HUk9VUH1zZXRTZXJpZXNHcm91cFR5cGUodCxlKXtyZXR1cm4gdGhpcy5zZXJpZXNHcm91cE1hcC5zZXQodCxlKX1idWlsZFNlcmllc0dyb3VwTWFwVG9nZ2xlZCh0KXtjb25zdCBlPXRoaXMuZ2V0U2VyaWVzR3JvdXBUeXBlKHQpPT09eEF0LkdST1VQP3hBdC5VTkdST1VQOnhBdC5HUk9VUDtyZXR1cm4gbmV3IE1hcChbLi4udGhpcy5zZXJpZXNHcm91cE1hcCxbdCxlXV0pfWdldE5vZGVNYXAoKXtyZXR1cm4gdGhpcy5pbmRleH1ub2RlKHQpe3JldHVybiB0aGlzLmluZGV4W3RdfXNldE5vZGUodCxlKXt0aGlzLmluZGV4W3RdPWV9Z2V0QnJpZGdlZ3JhcGgodCl7bGV0IGU9dGhpcy5pbmRleFt0XTtpZighZSl0aHJvdyBFcnJvcigiQ291bGQgbm90IGZpbmQgbm9kZSBpbiBoaWVyYXJjaHk6ICIrdCk7aWYoISgibWV0YWdyYXBoImluIGUpKXJldHVybiBudWxsO2lmKGUuYnJpZGdlZ3JhcGgpcmV0dXJuIGUuYnJpZGdlZ3JhcGg7bGV0IG49ZS5icmlkZ2VncmFwaD1SQXQoIkJSSURHRUdSQVBIIix5QXQuQlJJREdFLHRoaXMuZ3JhcGhPcHRpb25zKTtpZighZS5wYXJlbnROb2RlfHwhKCJtZXRhZ3JhcGgiaW4gZS5wYXJlbnROb2RlKSlyZXR1cm4gbjtsZXQgaT1lLnBhcmVudE5vZGUscj1pLm1ldGFncmFwaCxvPXRoaXMuZ2V0QnJpZGdlZ3JhcGgoaS5uYW1lKTtyZXR1cm4gd2UuZWFjaChbcixvXSwoZT0+e2UuZWRnZXMoKS5maWx0ZXIoKGU9PmUudj09PXR8fGUudz09PXQpKS5mb3JFYWNoKChpPT57bGV0IHI9aS53PT09dCxvPWUuZWRnZShpKTt3ZS5lYWNoKG8uYmFzZUVkZ2VMaXN0LChlPT57bGV0W28sYV09cj9bZS53LGkudl06W2UudixpLnddLHM9dGhpcy5nZXRDaGlsZE5hbWUodCxvKSxsPXt2OnI/YTpzLHc6cj9zOmF9LGM9bi5lZGdlKGwpO2N8fChjPUNBdChsLnYsbC53KSxjLmluYm91bmQ9cixuLnNldEVkZ2UobC52LGwudyxjKSksYy5hZGRCYXNlRWRnZShlLHRoaXMpfSkpfSkpfSkpLG59Z2V0Q2hpbGROYW1lKHQsZSl7bGV0IG49dGhpcy5pbmRleFtlXTtmb3IoO247KXtpZihuLnBhcmVudE5vZGUmJm4ucGFyZW50Tm9kZS5uYW1lPT09dClyZXR1cm4gbi5uYW1lO249bi5wYXJlbnROb2RlfXRocm93IEVycm9yKCJDb3VsZCBub3QgZmluZCBpbW1lZGlhdGUgY2hpbGQgZm9yIGRlc2NlbmRhbnQ6ICIrZSl9Z2V0UHJlZGVjZXNzb3JzKHQpe2xldCBlPXRoaXMuaW5kZXhbdF07aWYoIWUpdGhyb3cgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIG5vZGUgd2l0aCBuYW1lOiAiK3QpO2xldCBuPXRoaXMuZ2V0T25lV2F5RWRnZXMoZSwhMCk7cmV0dXJuIGUuaXNHcm91cE5vZGV8fHdlLmVhY2goZS5pbkVtYmVkZGluZ3MsKGk9Pnt3ZS5lYWNoKGUuaW5wdXRzLChlPT57aWYoZS5uYW1lPT09aS5uYW1lKXtsZXQgcj1uZXcgQUF0KGkubmFtZSx0KTtyLmFkZEJhc2VFZGdlKHtpc0NvbnRyb2xEZXBlbmRlbmN5OmUuaXNDb250cm9sRGVwZW5kZW5jeSxvdXRwdXRUZW5zb3JLZXk6ZS5vdXRwdXRUZW5zb3JLZXksaXNSZWZlcmVuY2VFZGdlOiExLHY6aS5uYW1lLHc6dH0sdGhpcyksbi5yZWd1bGFyLnB1c2gocil9fSkpfSkpLG59Z2V0U3VjY2Vzc29ycyh0KXtsZXQgZT10aGlzLmluZGV4W3RdO2lmKCFlKXRocm93IEVycm9yKCJDb3VsZCBub3QgZmluZCBub2RlIHdpdGggbmFtZTogIit0KTtsZXQgbj10aGlzLmdldE9uZVdheUVkZ2VzKGUsITEpO3JldHVybiBlLmlzR3JvdXBOb2RlfHx3ZS5lYWNoKGUub3V0RW1iZWRkaW5ncywoZT0+e3dlLmVhY2goZS5pbnB1dHMsKGk9PntpZihpLm5hbWU9PT10KXtsZXQgcj1uZXcgQUF0KHQsZS5uYW1lKTtyLmFkZEJhc2VFZGdlKHtpc0NvbnRyb2xEZXBlbmRlbmN5OmkuaXNDb250cm9sRGVwZW5kZW5jeSxvdXRwdXRUZW5zb3JLZXk6aS5vdXRwdXRUZW5zb3JLZXksaXNSZWZlcmVuY2VFZGdlOiExLHY6dCx3OmUubmFtZX0sdGhpcyksbi5yZWd1bGFyLnB1c2gocil9fSkpfSkpLG59Z2V0T25lV2F5RWRnZXModCxlKXtsZXQgbj17Y29udHJvbDpbXSxyZWd1bGFyOltdfTtpZighdC5wYXJlbnROb2RlfHwhdC5wYXJlbnROb2RlLmlzR3JvdXBOb2RlKXJldHVybiBuO2xldCBpPXQucGFyZW50Tm9kZSxyPWkubWV0YWdyYXBoLG89dGhpcy5nZXRCcmlkZ2VncmFwaChpLm5hbWUpO3JldHVybiBmTHQocix0LGUsbiksZkx0KG8sdCxlLG4pLG59Z2V0VG9wb2xvZ2ljYWxPcmRlcmluZyh0KXtsZXQgZT10aGlzLmluZGV4W3RdO2lmKCFlKXRocm93IEVycm9yKCJDb3VsZCBub3QgZmluZCBub2RlIHdpdGggbmFtZTogIit0KTtpZighZS5pc0dyb3VwTm9kZSlyZXR1cm4gbnVsbDtpZih0IGluIHRoaXMub3JkZXJpbmdzKXJldHVybiB0aGlzLm9yZGVyaW5nc1t0XTtsZXQgbj17fSxpPXt9LHI9ZS5tZXRhZ3JhcGg7d2UuZWFjaChyLmVkZ2VzKCksKHQ9PntyLmVkZ2UodCkubnVtUmVndWxhckVkZ2VzJiYodC52IGluIG58fChuW3Qudl09W10pLG5bdC52XS5wdXNoKHQudyksaVt0LnddPSEwKX0pKTtsZXQgbz13ZS5kaWZmZXJlbmNlKHdlLmtleXMobiksd2Uua2V5cyhpKSksYT10aGlzLm9yZGVyaW5nc1t0XT17fSxzPTA7Zm9yKDtvLmxlbmd0aDspe2xldCB0PW8uc2hpZnQoKTthW3RdPXMrKyx3ZS5lYWNoKG5bdF0sKHQ9Pm8ucHVzaCh0KSkpLGRlbGV0ZSBuW3RdfXJldHVybiBhfWdldFRlbXBsYXRlSW5kZXgoKXtpZighdGhpcy50ZW1wbGF0ZXMpcmV0dXJuIG51bGw7bGV0IHQ9a2codGhpcy50ZW1wbGF0ZXMpO2lmKCF0Lmxlbmd0aClyZXR1cm4gbnVsbDtsZXQgZT14TSgpLmRvbWFpbih0KS5yYW5nZShSbCgwLHQubGVuZ3RoKSk7cmV0dXJuIHQ9PmUodCl9dXBkYXRlVGVtcGxhdGVzKCl7aUF0KCJGaW5kaW5nIHNpbWlsYXIgc3ViZ3JhcGhzIiwoKCk9Pnt0aGlzLnRlbXBsYXRlcz0oZnVuY3Rpb24gdChlLG4pe2xldCBpPShmdW5jdGlvbiBvKHQsZSl7cmV0dXJuIHdlLnJlZHVjZSh0LChmdW5jdGlvbih0LG4pe2xldCBpPW5bMF0scj1bXTtyZXR1cm4gblsxXS5ub2Rlcy5mb3JFYWNoKChmdW5jdGlvbih0KXtmb3IobGV0IG49MDtuPHIubGVuZ3RoO24rKylpZighZXx8dUx0KHJbbl0ubWV0YW5vZGUubWV0YWdyYXBoLHQubWV0YWdyYXBoKSlyZXR1cm4gdC50ZW1wbGF0ZUlkPXJbbl0ubWV0YW5vZGUudGVtcGxhdGVJZCx2b2lkIHJbbl0ubWVtYmVycy5wdXNoKHQubmFtZSk7dC50ZW1wbGF0ZUlkPWkrIlsiK3IubGVuZ3RoKyJdIixyLnB1c2goe21ldGFub2RlOnQsbWVtYmVyczpbdC5uYW1lXX0pfSkpLHIuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dFtlLm1ldGFub2RlLnRlbXBsYXRlSWRdPXtsZXZlbDpuWzFdLmxldmVsLG5vZGVzOmUubWVtYmVyc319KSksdH0pLHt9KX0pKChmdW5jdGlvbiByKHQpe2NvbnN0IGU9dC5nZXROb2RlTWFwKCk7bGV0IG49T2JqZWN0LmtleXMoZSkucmVkdWNlKCgodCxuKT0+e2NvbnN0IGk9ZVtuXTtpZihpLnR5cGUhPT12QXQuTUVUQSlyZXR1cm4gdDtsZXQgcj1uLnNwbGl0KCIvIikubGVuZ3RoLTEsbz0oZnVuY3Rpb24gYSh0KXtyZXR1cm4gd2UubWFwKHtkZXB0aDp0LmRlcHRoLCJ8VnwiOnQubWV0YWdyYXBoLm5vZGVzKCkubGVuZ3RoLCJ8RXwiOnQubWV0YWdyYXBoLmVkZ2VzKCkubGVuZ3RofSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZSsiPSIrdH0pKS5qb2luKCIgIikrIiBbb3BzXSAiK3dlLm1hcCh0Lm9wSGlzdG9ncmFtLChmdW5jdGlvbih0LGUpe3JldHVybiBlKyI9Iit0fSkpLmpvaW4oIiwiKX0pKGkpLHM9dFtvXXx8e25vZGVzOltdLGxldmVsOnJ9O3JldHVybiB0W29dPXMscy5ub2Rlcy5wdXNoKGkpLHMubGV2ZWw+ciYmKHMubGV2ZWw9ciksdH0pLHt9KTtyZXR1cm4gT2JqZWN0LmtleXMobikubWFwKCh0PT5bdCxuW3RdXSkpLmZpbHRlcigoKFt0LGVdKT0+e2NvbnN0e25vZGVzOm59PWU7aWYobi5sZW5ndGg+MSlyZXR1cm4hMDtjb25zdCBpPW5bMF07cmV0dXJuIGkudHlwZT09PXZBdC5NRVRBJiZpLmFzc29jaWF0ZWRGdW5jdGlvbn0pKS5zb3J0KCgoW3QsZV0pPT5lLm5vZGVzWzBdLmRlcHRoKSl9KShlKSxuKTtyZXR1cm4gT2JqZWN0LmtleXMoaSkuc29ydCgodD0+aVt0XS5sZXZlbCkpLnJlZHVjZSgoKHQsZSk9Pih0W2VdPWlbZV0sdCkpLHt9KX0pKHRoaXMsdGhpcy52ZXJpZnlUZW1wbGF0ZSksdGhpcy5kaXNwYXRjaEV2ZW50KGRMdC5URU1QTEFURVNfVVBEQVRFRCl9KSxZQ3QuSElFUkFSQ0hZX0ZJTkRfU0lNSUxBUl9TVUJHUkFQSFMpfX1mdW5jdGlvbiBmTHQodCxlLG4saSl7bGV0IHI9bj90LmluRWRnZXMoZS5uYW1lKTp0Lm91dEVkZ2VzKGUubmFtZSk7d2UuZWFjaChyLChlPT57bGV0IG49dC5lZGdlKGUpOyhuLm51bVJlZ3VsYXJFZGdlcz9pLnJlZ3VsYXI6aS5jb250cm9sKS5wdXNoKG4pfSkpfWNvbnN0IG1MdD17dmVyaWZ5VGVtcGxhdGU6ITAsc2VyaWVzTm9kZU1pblNpemU6NSxzZXJpZXNNYXA6bmV3IE1hcCxyYW5rRGlyZWN0aW9uOiJCVCIsdXNlR2VuZXJhbGl6ZWRTZXJpZXNQYXR0ZXJuczohMX07ZnVuY3Rpb24gZ0x0KHQsZSxuKXtjb25zdCBpPW5ldyBwTHQoZSkscj17fTtyZXR1cm4gYUF0KCJBZGRpbmcgbm9kZXMiLDMwLCgoKT0+e2xldCBlPXt9LG49e307d2UuZWFjaCh0Lm5vZGVzLCgodCxpKT0+e3QuZGV2aWNlJiYoZVt0LmRldmljZV09ITApLHQueGxhQ2x1c3RlciYmKG5bdC54bGFDbHVzdGVyXT0hMCl9KSksaS5kZXZpY2VzPXdlLmtleXMoZSksaS54bGFDbHVzdGVycz13ZS5rZXlzKG4pLChmdW5jdGlvbiByKHQsZSl7Y29uc3Qgbj17fTt3ZS5lYWNoKGUubm9kZXMsKChlLGkpPT57bGV0IHI9SEF0KGUubmFtZSksbz10LnJvb3Q7by5kZXB0aD1NYXRoLm1heChyLmxlbmd0aCxvLmRlcHRoKSxuW2Uub3BdfHwobltlLm9wXT1bXSksbltlLm9wXS5wdXNoKGUpO2ZvcihsZXQgaT0wO2k8ci5sZW5ndGgmJihvLmRlcHRoPU1hdGgubWF4KG8uZGVwdGgsci5sZW5ndGgtaSksby5jYXJkaW5hbGl0eSs9ZS5jYXJkaW5hbGl0eSxvLm9wSGlzdG9ncmFtW2Uub3BdPShvLm9wSGlzdG9ncmFtW2Uub3BdfHwwKSsxLG51bGwhPWUuZGV2aWNlJiYoby5kZXZpY2VIaXN0b2dyYW1bZS5kZXZpY2VdPShvLmRldmljZUhpc3RvZ3JhbVtlLmRldmljZV18fDApKzEpLG51bGwhPWUueGxhQ2x1c3RlciYmKG8ueGxhQ2x1c3Rlckhpc3RvZ3JhbVtlLnhsYUNsdXN0ZXJdPShvLnhsYUNsdXN0ZXJIaXN0b2dyYW1bZS54bGFDbHVzdGVyXXx8MCkrMSksZS5jb21wYXRpYmxlP28uY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5jb21wYXRpYmxlPShvLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZXx8MCkrMTpvLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlPShvLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlfHwwKSsxLHdlLmVhY2goZS5pbkVtYmVkZGluZ3MsKHQ9Pnt0LmNvbXBhdGlibGU/by5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGU9KG8uY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5jb21wYXRpYmxlfHwwKSsxOm8uY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGU9KG8uY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGV8fDApKzF9KSksd2UuZWFjaChlLm91dEVtYmVkZGluZ3MsKHQ9Pnt0LmNvbXBhdGlibGU/by5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGU9KG8uY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5jb21wYXRpYmxlfHwwKSsxOm8uY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGU9KG8uY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGV8fDApKzF9KSksaSE9PXIubGVuZ3RoLTEpO2krKyl7bGV0IGU9cltpXSxhPXQubm9kZShlKTtpZighYSYmKGE9RUF0KGUsdC5ncmFwaE9wdGlvbnMpLGEucGFyZW50Tm9kZT1vLHQuc2V0Tm9kZShlLGEpLG8ubWV0YWdyYXBoLnNldE5vZGUoZSxhKSwwPT09ZS5pbmRleE9mKF9BdCkmJm8ubmFtZT09PWdBdCkpe2NvbnN0IGk9ZS5zdWJzdHJpbmcoX0F0Lmxlbmd0aCk7bltpXXx8KG5baV09W10pLHQubGlicmFyeUZ1bmN0aW9uc1tpXT17bm9kZTphLHVzYWdlczpuW2ldfSxhLmFzc29jaWF0ZWRGdW5jdGlvbj1pfW89YX10LnNldE5vZGUoZS5uYW1lLGUpLGUucGFyZW50Tm9kZT1vLG8ubWV0YWdyYXBoLnNldE5vZGUoZS5uYW1lLGUpLHdlLmVhY2goZS5pbkVtYmVkZGluZ3MsKGZ1bmN0aW9uKG4pe3Quc2V0Tm9kZShuLm5hbWUsbiksbi5wYXJlbnROb2RlPWV9KSksd2UuZWFjaChlLm91dEVtYmVkZGluZ3MsKGZ1bmN0aW9uKG4pe3Quc2V0Tm9kZShuLm5hbWUsbiksbi5wYXJlbnROb2RlPWV9KSl9KSl9KShpLHQpfSksbixZQ3QuSElFUkFSQ0hZX0FERF9OT0RFUykudGhlbigoKCk9PmFBdCgiRGV0ZWN0IHNlcmllcyIsMzAsKCgpPT57ZS5zZXJpZXNOb2RlTWluU2l6ZT4wJiZfTHQoaS5yb290LGkscixlLnNlcmllc05vZGVNaW5TaXplLGUuc2VyaWVzTWFwLGUudXNlR2VuZXJhbGl6ZWRTZXJpZXNQYXR0ZXJucyl9KSxuLFlDdC5ISUVSQVJDSFlfREVURUNUX1NFUklFUykpKS50aGVuKCgoKT0+YUF0KCJBZGRpbmcgZWRnZXMiLDQwLCgoKT0+eyEoZnVuY3Rpb24gZSh0LG4saSl7bGV0IHI9dC5nZXROb2RlTWFwKCksbz1bXSxhPVtdLHM9KHQsZSk9PntsZXQgbj0wO2Zvcig7dDspZVtuKytdPXQubmFtZSx0PXQucGFyZW50Tm9kZTtyZXR1cm4gbi0xfTt3ZS5lYWNoKG4uZWRnZXMsKGU9PntsZXQgaT1zKG4ubm9kZXNbZS52XSxvKSxsPXMobi5ub2Rlc1tlLnddLGEpO2lmKC0xPT09aXx8LTE9PT1sKXJldHVybjtmb3IoO29baV09PT1hW2xdOylpZihpLS0sbC0tLGk8MHx8bDwwKXRocm93IEVycm9yKCJObyBkaWZmZXJlbmNlIGZvdW5kIGJldHdlZW4gYW5jZXN0b3IgcGF0aHMuIik7bGV0IGM9cltvW2krMV1dLHU9b1tpXSxoPWFbbF0sZD1jLm1ldGFncmFwaC5lZGdlKHUsaCk7ZHx8KGQ9Q0F0KHUsaCksYy5tZXRhZ3JhcGguc2V0RWRnZSh1LGgsZCkpLGMuaGFzTm9uQ29udHJvbEVkZ2VzfHxlLmlzQ29udHJvbERlcGVuZGVuY3l8fChjLmhhc05vbkNvbnRyb2xFZGdlcz0hMCksZC5hZGRCYXNlRWRnZShlLHQpfSkpfSkoaSx0KX0pLG4sWUN0LkhJRVJBUkNIWV9BRERfRURHRVMpKSkudGhlbigoKCk9PmkpKX1mdW5jdGlvbiBfTHQodCxlLG4saSxyLG8pe2xldCBhPXQubWV0YWdyYXBoO3dlLmVhY2goYS5ub2RlcygpLCh0PT57bGV0IHM9YS5ub2RlKHQpO3MudHlwZT09PXZBdC5NRVRBJiZfTHQocyxlLG4saSxyLG8pfSkpO2xldCBzPShmdW5jdGlvbiBsKHQpe3JldHVybiB3ZS5yZWR1Y2UodC5ub2RlcygpLCgoZSxuKT0+e2xldCBpPXQubm9kZShuKTtpZihpLnR5cGU9PT12QXQuTUVUQSlyZXR1cm4gZTtsZXQgcj1pLm9wO3JldHVybiByJiYoZVtyXT1lW3JdfHxbXSxlW3JdLnB1c2goaS5uYW1lKSksZX0pLHt9KX0pKGEpLGM9KG8/dkx0OnlMdCkocyxhLGUuZ3JhcGhPcHRpb25zKTt3ZS5lYWNoKGMsKGZ1bmN0aW9uKHQscil7bGV0IG89dC5tZXRhZ3JhcGgubm9kZXMoKTt3ZS5lYWNoKG8sKHQ9PntsZXQgZT1hLm5vZGUodCk7ZS5vd25pbmdTZXJpZXN8fChlLm93bmluZ1Nlcmllcz1yKX0pKSxvLmxlbmd0aDxpJiZlLmdldFNlcmllc0dyb3VwVHlwZSh0Lm5hbWUpPT09eEF0LkdST1VQJiZlLnNldFNlcmllc0dyb3VwVHlwZSh0Lm5hbWUseEF0LlVOR1JPVVApLGUuZ2V0U2VyaWVzR3JvdXBUeXBlKHQubmFtZSkhPT14QXQuVU5HUk9VUCYmKGUuc2V0Tm9kZShyLHQpLGEuc2V0Tm9kZShyLHQpLHdlLmVhY2gobywoZT0+e2xldCBpPWEubm9kZShlKTt0Lm1ldGFncmFwaC5zZXROb2RlKGUsaSksdC5wYXJlbnROb2RlPWkucGFyZW50Tm9kZSx0LmNhcmRpbmFsaXR5KyssbnVsbCE9aS5kZXZpY2UmJih0LmRldmljZUhpc3RvZ3JhbVtpLmRldmljZV09KHQuZGV2aWNlSGlzdG9ncmFtW2kuZGV2aWNlXXx8MCkrMSksbnVsbCE9aS54bGFDbHVzdGVyJiYodC54bGFDbHVzdGVySGlzdG9ncmFtW2kueGxhQ2x1c3Rlcl09KHQueGxhQ2x1c3Rlckhpc3RvZ3JhbVtpLnhsYUNsdXN0ZXJdfHwwKSsxKSxpLmNvbXBhdGlibGU/dC5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGU9KHQuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5jb21wYXRpYmxlfHwwKSsxOnQuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGU9KHQuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGV8fDApKzEsd2UuZWFjaChpLmluRW1iZWRkaW5ncywoZT0+e2UuY29tcGF0aWJsZT90LmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZT0odC5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGV8fDApKzE6dC5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZT0odC5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZXx8MCkrMX0pKSx3ZS5lYWNoKGkub3V0RW1iZWRkaW5ncywoZT0+e2UuY29tcGF0aWJsZT90LmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZT0odC5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGV8fDApKzE6dC5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZT0odC5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZXx8MCkrMX0pKSxpLnBhcmVudE5vZGU9dCxuW2VdPXIsYS5yZW1vdmVOb2RlKGUpfSkpKX0pKX1mdW5jdGlvbiB5THQodCxlLG4pe2xldCBpPXt9O3JldHVybiB3ZS5lYWNoKHQsKGZ1bmN0aW9uKHQscil7aWYodC5sZW5ndGg8PTEpcmV0dXJuO2xldCBvPXt9O3dlLmVhY2godCwoZnVuY3Rpb24odCl7Y29uc3QgZT0iKiI9PT10LmNoYXJBdCh0Lmxlbmd0aC0xKSxpPXQuc3BsaXQoIi8iKSxyPWlbaS5sZW5ndGgtMV0sYT1pLnNsaWNlKDAsaS5sZW5ndGgtMSkuam9pbigiLyIpLHM9ci5tYXRjaCgvXihcRCopKFxkKykkLyk7bGV0IGwsYyx1PSIiO3M/KGw9c1sxXSxjPXNbMl0pOihsPWU/ci5zdWJzdHIoMCxyLmxlbmd0aC0xKTpyLGM9MCx1PWU/IioiOiIiKTtjb25zdCBoPUxBdChsLHUsYSk7b1toXT1vW2hdfHxbXTtjb25zdCBkPWtBdChsLHUsYSwrYyx0LG4pO29baF0ucHVzaChkKX0pKSx3ZS5lYWNoKG8sKGZ1bmN0aW9uKHQsbyl7aWYodC5sZW5ndGg8MilyZXR1cm47dC5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybit0LmNsdXN0ZXJJZC0rZS5jbHVzdGVySWR9KSk7bGV0IGE9W3RbMF1dO2ZvcihsZXQgbz0xO288dC5sZW5ndGg7bysrKXtsZXQgcz10W29dO3MuY2x1c3RlcklkIT09YVthLmxlbmd0aC0xXS5jbHVzdGVySWQrMT8oYkx0KGEsaSwrcixlLG4pLGE9W3NdKTphLnB1c2gocyl9Ykx0KGEsaSwrcixlLG4pfSkpfSkpLGl9ZnVuY3Rpb24gdkx0KHQsZSxuKXtsZXQgaT17fTtyZXR1cm4gd2UuZWFjaCh0LChmdW5jdGlvbih0LHIpe2lmKHQubGVuZ3RoPD0xKXJldHVybjtsZXQgbz17fSxhPXt9O3dlLmVhY2godCwoZnVuY3Rpb24odCl7bGV0IGU9IioiPT09dC5jaGFyQXQodC5sZW5ndGgtMSksaT10LnNwbGl0KCIvIikscj1pW2kubGVuZ3RoLTFdLHM9aS5zbGljZSgwLGkubGVuZ3RoLTEpLmpvaW4oIi8iKTtjb25zdCBsPS8oXGQrKS9nO2xldCBjLHUsaCxkLHAsZj0wO2Zvcig7Yz1sLmV4ZWMocik7KSsrZix1PXIuc2xpY2UoMCxjLmluZGV4KSxoPWNbMF0sZD1yLnNsaWNlKGMuaW5kZXgrY1swXS5sZW5ndGgpLHA9TEF0KHUsZCxzKSxvW3BdPW9bcF0sb1twXXx8KG9bcF09a0F0KHUsZCxzLCtoLHQsbikpLG9bcF0uaWRzLnB1c2goaCksYVt0XT1hW3RdfHxbXSxhW3RdLnB1c2goW3AsaF0pO2Y8MSYmKHU9ZT9yLnN1YnN0cigwLHIubGVuZ3RoLTEpOnIsaD0wLGQ9ZT8iKiI6IiIscD1MQXQodSxkLHMpLG9bcF09b1twXSxvW3BdfHwob1twXT1rQXQodSxkLHMsK2gsdCxuKSksb1twXS5pZHMucHVzaChoKSxhW3RdPWFbdF18fFtdLGFbdF0ucHVzaChbcCxoXSkpfSkpO3ZhciBzPXt9O3dlLmVhY2goYSwoZnVuY3Rpb24odCxlKXt0LnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG9bZVswXV0uaWRzLmxlbmd0aC1vW3RbMF1dLmlkcy5sZW5ndGh9KSk7dmFyIGk9dFswXVswXSxyPXRbMF1bMV07c1tpXT1zW2ldfHxbXTtjb25zdCBhPWUuc3BsaXQoIi8iKSxsPWEuc2xpY2UoMCxhLmxlbmd0aC0xKS5qb2luKCIvIik7dmFyIGM9a0F0KG9baV0ucHJlZml4LG9baV0uc3VmZml4LGwsK3IsZSxuKTtzW2ldLnB1c2goYyl9KSksd2UuZWFjaChzLChmdW5jdGlvbih0LG8pe2lmKHQubGVuZ3RoPDIpcmV0dXJuO3Quc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4rdC5jbHVzdGVySWQtK2UuY2x1c3RlcklkfSkpO2xldCBhPVt0WzBdXTtmb3IobGV0IG89MTtvPHQubGVuZ3RoO28rKyl7bGV0IHM9dFtvXTtzLmNsdXN0ZXJJZCE9PWFbYS5sZW5ndGgtMV0uY2x1c3RlcklkKzE/KGJMdChhLGksK3IsZSxuKSxhPVtzXSk6YS5wdXNoKHMpfWJMdChhLGksK3IsZSxuKX0pKX0pKSxpfWZ1bmN0aW9uIGJMdCh0LGUsbixpLHIpe2lmKHQubGVuZ3RoPjEpe2xldCBvPUxBdCh0WzBdLnByZWZpeCx0WzBdLnN1ZmZpeCx0WzBdLnBhcmVudCx0WzBdLmNsdXN0ZXJJZCx0W3QubGVuZ3RoLTFdLmNsdXN0ZXJJZCksYT1rQXQodFswXS5wcmVmaXgsdFswXS5zdWZmaXgsdFswXS5wYXJlbnQsbixvLHIpO3dlLmVhY2godCwoZnVuY3Rpb24odCl7YS5pZHMucHVzaCh0LmNsdXN0ZXJJZCksYS5tZXRhZ3JhcGguc2V0Tm9kZSh0Lm5hbWUsaS5ub2RlKHQubmFtZSkpfSkpLGVbb109YX19bGV0IHhMdD1jbGFzcyBleHRlbmRzKHRyKG5sKHllKSkpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9leHBhbmRlZD0hMCx0aGlzLl9vcENvbXBhdENvbG9yPVZBdCx0aGlzLl9vcEluY29tcGF0Q29sb3I9VUF0LHRoaXMuX3RlbXBsYXRlSW5kZXg9bnVsbH1fZ2V0Tm9kZSh0LGUpe3JldHVybiBlLm5vZGUodCl9X2dldFJlbmRlckluZm8odCxlKXtyZXR1cm4gdGhpcy5yZW5kZXJIaWVyYXJjaHkuZ2V0T3JDcmVhdGVSZW5kZXJOb2RlQnlOYW1lKHQpfV90b2dnbGVFeHBhbmRlZCgpe3RoaXMuX2V4cGFuZGVkPSF0aGlzLl9leHBhbmRlZH1fZ2V0VG9nZ2xlSWNvbih0KXtyZXR1cm4gdD8iZXhwYW5kLWxlc3MiOiJleHBhbmQtbW9yZSJ9X3Jlc2l6ZUxpc3QodCl7dmFyIGU9ZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0KTtlJiZlLmZpcmUoImlyb24tcmVzaXplIil9Z2V0IF9pbmNvbXBhdGlibGVPcE5vZGVzKCl7Y29uc3QgdD10aGlzLmdyYXBoSGllcmFyY2h5O3JldHVybiB0JiZ0LnJvb3Q/KHRoaXMuYXN5bmModGhpcy5fcmVzaXplTGlzdC5iaW5kKHRoaXMsIiNpbmNvbXBhdGlibGVPcHNMaXN0IikpLChmdW5jdGlvbiBlKHQpe2NvbnN0IGU9W10sbj17fTtyZXR1cm4gd2UuZWFjaCh0LnJvb3QubGVhdmVzKCksKGk9PntsZXQgcj10Lm5vZGUoaSk7aWYoci50eXBlPT12QXQuT1Ape2xldCBpPXI7aWYoIWkuY29tcGF0aWJsZSlpZihpLm93bmluZ1Nlcmllcyl7aWYodC5nZXRTZXJpZXNHcm91cFR5cGUoaS5vd25pbmdTZXJpZXMpPT09eEF0LlVOR1JPVVApZS5wdXNoKGkpO2Vsc2UgaWYoIW5baS5vd25pbmdTZXJpZXNdKXtsZXQgcj10Lm5vZGUoaS5vd25pbmdTZXJpZXMpO3ImJihuW2kub3duaW5nU2VyaWVzXT1yLGUucHVzaChyKSl9fWVsc2UgZS5wdXNoKGkpO3dlLmVhY2goaS5pbkVtYmVkZGluZ3MsKHQ9Pnt0LmNvbXBhdGlibGV8fGUucHVzaCh0KX0pKSx3ZS5lYWNoKGkub3V0RW1iZWRkaW5ncywodD0+e3QuY29tcGF0aWJsZXx8ZS5wdXNoKHQpfSkpfX0pKSxlfSkodCkpOltdfWdldCBfb3BDb21wYXRTY29yZSgpe3ZhciB0PXRoaXMuZ3JhcGhIaWVyYXJjaHk7aWYodCYmdC5yb290KXt2YXIgZT10LnJvb3Qsbj1lLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZSxpPWUuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGU7cmV0dXJuIDA9PW4mJjA9PWk/MDpNYXRoLmZsb29yKDEwMCpuLyhuK2kpKS8xMDB9cmV0dXJuIDB9Z2V0IF9vcENvbXBhdFNjb3JlTGFiZWwoKXt2YXIgdD10aGlzLl9vcENvbXBhdFNjb3JlO3JldHVybiBmeSgiLjAlIikodCl9Z2V0IF90b3RhbEluY29tcGF0T3BzKCl7dmFyIHQ9dGhpcy5ncmFwaEhpZXJhcmNoeTtyZXR1cm4gdCYmdC5yb290P3Qucm9vdC5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZTowfV9ncmFwaEhpZXJhcmNoeUNoYW5nZWQoKXt0aGlzLl90ZW1wbGF0ZUluZGV4PXRoaXMuZ3JhcGhIaWVyYXJjaHkuZ2V0VGVtcGxhdGVJbmRleCgpLHRoaXMuZ3JhcGhIaWVyYXJjaHkuYWRkTGlzdGVuZXIoZEx0LlRFTVBMQVRFU19VUERBVEVELCgoKT0+e3RoaXMuX3RlbXBsYXRlSW5kZXg9dGhpcy5ncmFwaEhpZXJhcmNoeS5nZXRUZW1wbGF0ZUluZGV4KCl9KSl9fTt4THQudGVtcGxhdGU9X2VgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBtYXgtaGVpZ2h0OiA1MDBweDsKICAgICAgfQoKICAgICAgLmluY29tcGF0aWJsZS1vcHMtbGlzdCB7CiAgICAgICAgaGVpZ2h0OiAzNTBweDsKICAgICAgICBtYXgtaGVpZ2h0OiA0MDBweDsKICAgICAgICBvdmVyZmxvdy15OiBzY3JvbGw7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICB9CgogICAgICBpcm9uLWxpc3QgewogICAgICAgIGZsZXg6IDEgMSBhdXRvOwogICAgICB9CgogICAgICBwYXBlci1pdGVtIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXNlY29uZGFyeS1iYWNrZ3JvdW5kLWNvbG9yKTsKICAgICAgfQoKICAgICAgcGFwZXItaXRlbS1ib2R5W3R3by1saW5lXSB7CiAgICAgICAgbWluLWhlaWdodDogMDsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweCA0cHg7CiAgICAgIH0KCiAgICAgIC5leHBhbmRlZEluZm8gewogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgZm9udC1zaXplOiAxMnB0OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAubm9kZS1uYW1lIHsKICAgICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgICBmb250LXNpemU6IDE0cHQ7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgfQoKICAgICAgLnN1YnRpdGxlIHsKICAgICAgICBjb2xvcjogdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpOwogICAgICAgIGZvbnQtc2l6ZTogMTJwdDsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1idXR0b24gewogICAgICAgIGZsb2F0OiByaWdodDsKICAgICAgICBtYXgtaGVpZ2h0OiAyMHB4OwogICAgICAgIG1heC13aWR0aDogMjBweDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CgogICAgICAubm9uLWNvbnRyb2wtbGlzdC1pdGVtIHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDEwcHg7CiAgICAgIH0KCiAgICAgIGRpdi5vcC1jb21wYXQtZGlzcGxheSB7CiAgICAgICAgbWFyZ2luLXRvcDogMTBweDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBTYWRseSwgYmVjYXVzZSB0aGUgd2hvbGUgYm9keSBpcyBpbnZlcnRlZCBpbiBjb2xvciwgbGVnZW5kcyBhbHNvIG5lZWQKICAgICAgICogdG8gYmUgaW52ZXJ0ZWQuCiAgICAgICAqKi8KICAgICAgOmhvc3QoLmRhcmstbW9kZSkgZGl2Lm9wLWNvbXBhdC1kaXNwbGF5IHsKICAgICAgICBmaWx0ZXI6IGludmVydCgxKTsKICAgICAgfQoKICAgICAgc3ZnLm9wLWNvbXBhdCB7CiAgICAgICAgd2lkdGg6IDI1MHB4OwogICAgICAgIGhlaWdodDogMjVweDsKICAgICAgICBmbG9hdDogbGVmdDsKICAgICAgfQoKICAgICAgZGl2Lm9wLWNvbXBhdC12YWx1ZSB7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY29sb3I6IGJsYWNrOwogICAgICAgIG1hcmdpbi1sZWZ0OiAxMHB4OwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxwYXBlci1pdGVtPgogICAgICA8cGFwZXItaXRlbS1ib2R5IHR3by1saW5lPgogICAgICAgIDxkaXY+CiAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICAgICAgaWNvbj0ie3tfZ2V0VG9nZ2xlSWNvbihfZXhwYW5kZWQpfX0iCiAgICAgICAgICAgIG9uLWNsaWNrPSJfdG9nZ2xlRXhwYW5kZWQiCiAgICAgICAgICAgIGNsYXNzPSJ0b2dnbGUtYnV0dG9uIgogICAgICAgICAgPgogICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vZGUtbmFtZSIgaWQ9Im5vZGV0aXRsZSI+W1tub2RlVGl0bGVdXTwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgc2Vjb25kYXJ5PgogICAgICAgICAgPGRpdiBjbGFzcz0ic3VidGl0bGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJvcC1jb21wYXQtZGlzcGxheSI+CiAgICAgICAgICAgICAgPHN2ZwogICAgICAgICAgICAgICAgY2xhc3M9Im9wLWNvbXBhdCIKICAgICAgICAgICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWlkIG1lZXQiCiAgICAgICAgICAgICAgICB2aWV3Qm94PSIwIDAgMjUwIDI1IgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxkZWZzPgogICAgICAgICAgICAgICAgICA8bGluZWFyR3JhZGllbnQgaWQ9Im9wLWNvbXBhdC1maWxsIj4KICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3IkPSJbW19vcENvbXBhdENvbG9yXV0iPjwvc3RvcD4KICAgICAgICAgICAgICAgICAgICA8c3RvcAogICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0JD0iW1tfb3BDb21wYXRTY29yZV1dIgogICAgICAgICAgICAgICAgICAgICAgc3RvcC1jb2xvciQ9IltbX29wQ29tcGF0Q29sb3JdXSIKICAgICAgICAgICAgICAgICAgICA+PC9zdG9wPgogICAgICAgICAgICAgICAgICAgIDxzdG9wCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQkPSJbW19vcENvbXBhdFNjb3JlXV0iCiAgICAgICAgICAgICAgICAgICAgICBzdG9wLWNvbG9yJD0iW1tfb3BJbmNvbXBhdENvbG9yXV0iCiAgICAgICAgICAgICAgICAgICAgPjwvc3RvcD4KICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3IkPSJbW19vcEluY29tcGF0Q29sb3IgXV0iPjwvc3RvcD4KICAgICAgICAgICAgICAgICAgPC9saW5lYXJHcmFkaWVudD4KICAgICAgICAgICAgICAgIDwvZGVmcz4KICAgICAgICAgICAgICAgIDxyZWN0CiAgICAgICAgICAgICAgICAgIGhlaWdodD0iMjUiCiAgICAgICAgICAgICAgICAgIHdpZHRoPSIyNTAiCiAgICAgICAgICAgICAgICAgIHJ4PSI1IgogICAgICAgICAgICAgICAgICByeT0iNSIKICAgICAgICAgICAgICAgICAgc3R5bGU9ImZpbGw6IHVybCgnI29wLWNvbXBhdC1maWxsJyk7IgogICAgICAgICAgICAgICAgPjwvcmVjdD4KICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJvcC1jb21wYXQtdmFsdWUiPltbX29wQ29tcGF0U2NvcmVMYWJlbF1dPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvcGFwZXItaXRlbS1ib2R5PgogICAgPC9wYXBlci1pdGVtPgoKICAgIDxpcm9uLWNvbGxhcHNlIG9wZW5lZD0ie3tfZXhwYW5kZWR9fSI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfZXhwYW5kZWR9fSIgcmVzdGFtcD0idHJ1ZSI+CiAgICAgICAgPGRpdiBjbGFzcz0iZXhwYW5kZWRJbmZvIj4KICAgICAgICAgIEluY29tcGF0aWJsZSBPcGVyYXRpb25zOiAoPHNwYW4+W1tfdG90YWxJbmNvbXBhdE9wc11dPC9zcGFuPikKICAgICAgICAgIDxpcm9uLWxpc3QKICAgICAgICAgICAgY2xhc3M9ImluY29tcGF0aWJsZS1vcHMtbGlzdCIKICAgICAgICAgICAgaWQ9ImluY29tcGF0aWJsZU9wc0xpc3QiCiAgICAgICAgICAgIGl0ZW1zPSJbW19pbmNvbXBhdGlibGVPcE5vZGVzXV0iCiAgICAgICAgICA+CiAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICA8dGYtZ3JhcGgtb3AtY29tcGF0LWxpc3QtaXRlbQogICAgICAgICAgICAgICAgY2xhc3M9Im5vbi1jb250cm9sLWxpc3QtaXRlbSIKICAgICAgICAgICAgICAgIGl0ZW0tbm9kZT0iW1tpdGVtXV0iCiAgICAgICAgICAgICAgICBpdGVtLXJlbmRlci1pbmZvPSJbW19nZXRSZW5kZXJJbmZvKGl0ZW0ubmFtZSwgcmVuZGVySGllcmFyY2h5KV1dIgogICAgICAgICAgICAgICAgbmFtZT0iW1tpdGVtLm5hbWVdXSIKICAgICAgICAgICAgICAgIHRlbXBsYXRlLWluZGV4PSJbW190ZW1wbGF0ZUluZGV4XV0iCiAgICAgICAgICAgICAgICBjb2xvci1ieT0iW1tjb2xvckJ5XV0iCiAgICAgICAgICAgICAgICBpdGVtLXR5cGU9ImluY29tcGF0aWJsZS1vcHMiCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIDwvdGYtZ3JhcGgtb3AtY29tcGF0LWxpc3QtaXRlbT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvaXJvbi1saXN0PgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9pcm9uLWNvbGxhcHNlPgogIGAsdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIscEx0KV0seEx0LnByb3RvdHlwZSwiZ3JhcGhIaWVyYXJjaHkiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsWEF0KV0seEx0LnByb3RvdHlwZSwicmVuZGVySGllcmFyY2h5Iix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLHhMdC5wcm90b3R5cGUsIm5vZGVUaXRsZSIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHhMdC5wcm90b3R5cGUsIl9leHBhbmRlZCIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx4THQucHJvdG90eXBlLCJfb3BDb21wYXRDb2xvciIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx4THQucHJvdG90eXBlLCJfb3BJbmNvbXBhdENvbG9yIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0seEx0LnByb3RvdHlwZSwiX3RlbXBsYXRlSW5kZXgiLHZvaWQgMCksdChbcygiZ3JhcGhIaWVyYXJjaHkiKSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLHhMdC5wcm90b3R5cGUsIl9pbmNvbXBhdGlibGVPcE5vZGVzIixudWxsKSx0KFtzKCJncmFwaEhpZXJhcmNoeSIpLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLHhMdC5wcm90b3R5cGUsIl9vcENvbXBhdFNjb3JlIixudWxsKSx0KFtzKCJfb3BDb21wYXRTY29yZSIpLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLHhMdC5wcm90b3R5cGUsIl9vcENvbXBhdFNjb3JlTGFiZWwiLG51bGwpLHQoW3MoImdyYXBoSGllcmFyY2h5IiksZSgiZGVzaWduOnR5cGUiLE51bWJlciksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0seEx0LnByb3RvdHlwZSwiX3RvdGFsSW5jb21wYXRPcHMiLG51bGwpLHQoW2EoImdyYXBoSGllcmFyY2h5IiksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pLGUoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSx4THQucHJvdG90eXBlLCJfZ3JhcGhIaWVyYXJjaHlDaGFuZ2VkIixudWxsKSx4THQ9dChbaSgidGYtZ3JhcGgtb3AtY29tcGF0LWNhcmQiKV0seEx0KTtsZXQgd0x0PWNsYXNzIGV4dGVuZHModHIobmwoeWUpKSl7X2l0ZW1UeXBlQ2hhbmdlZCgpeyJzdWJub2RlIiE9PXRoaXMuaXRlbVR5cGU/dGhpcy4kWyJsaXN0LWl0ZW0iXS5jbGFzc0xpc3QuYWRkKCJjbGlja2FibGUiKTp0aGlzLiRbImxpc3QtaXRlbSJdLmNsYXNzTGlzdC5yZW1vdmUoImNsaWNrYWJsZSIpfV9ub2RlTGlzdGVuZXIodCl7dGhpcy5maXJlKCJub2RlLWxpc3QtaXRlbS0iK3QudHlwZSx7Y2FyZE5vZGU6dGhpcy5jYXJkTm9kZS5uYW1lLG5vZGVOYW1lOnRoaXMubmFtZSx0eXBlOnRoaXMuaXRlbVR5cGV9KX1fZmFkZWRDbGFzcyh0KXtyZXR1cm4gdCYmdC5pc0ZhZGVkT3V0PyJmYWRlZCI6IiJ9fTt3THQudGVtcGxhdGU9X2VgCiAgICA8c3R5bGU+CiAgICAgICNsaXN0LWl0ZW0gewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGNvbG9yOiB2YXIoLS1zZWNvbmRhcnktdGV4dC1jb2xvcik7CiAgICAgICAgZm9udC1zaXplOiAxMXB0OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgfQoKICAgICAgI2xpc3QtaXRlbTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZ29vZ2xlLXllbGxvdy0xMDApOwogICAgICB9CgogICAgICA6aG9zdCguZGFyay1tb2RlKSAjbGlzdC1pdGVtOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci15ZWxsb3ctOTAwKTsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgfQoKICAgICAgLmNsaWNrYWJsZSB7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICB9CgogICAgICAjbGlzdC1pdGVtIHNwYW4gewogICAgICAgIG1hcmdpbi1sZWZ0OiA0MHB4OwogICAgICB9CgogICAgICAjbGlzdC1pdGVtLmV4Y2x1ZGVkIHNwYW4gewogICAgICAgIGNvbG9yOiAjOTk5OwogICAgICB9CgogICAgICAjbGlzdC1pdGVtIHNwYW4uZWRnZS1sYWJlbCB7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICBtYXJnaW4tbGVmdDogM3B4OwogICAgICAgIG1hcmdpbi1yaWdodDogNXB4OwogICAgICB9CgogICAgICAubm9kZS1pY29uIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAxcHg7CiAgICAgICAgbGVmdDogMnB4OwogICAgICB9CgogICAgICAuZmFkZWQgc3BhbiB7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLWdyYXBoLWZhZGVkKTsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxkaXYKICAgICAgaWQ9Imxpc3QtaXRlbSIKICAgICAgb24tbW91c2VvdmVyPSJfbm9kZUxpc3RlbmVyIgogICAgICBvbi1tb3VzZW91dD0iX25vZGVMaXN0ZW5lciIKICAgICAgb24tY2xpY2s9Il9ub2RlTGlzdGVuZXIiCiAgICA+CiAgICAgIDxkaXYgY2xhc3MkPSJ7e19mYWRlZENsYXNzKGl0ZW1SZW5kZXJJbmZvKX19Ij4KICAgICAgICA8dGYtbm9kZS1pY29uCiAgICAgICAgICBjbGFzcz0ibm9kZS1pY29uIgogICAgICAgICAgaGVpZ2h0PSIxMiIKICAgICAgICAgIGNvbG9yLWJ5PSJbW2NvbG9yQnldXSIKICAgICAgICAgIGNvbG9yLWJ5LXBhcmFtcz0iW1tjb2xvckJ5UGFyYW1zXV0iCiAgICAgICAgICBub2RlPSJbW2l0ZW1Ob2RlXV0iCiAgICAgICAgICByZW5kZXItaW5mbz0iW1tpdGVtUmVuZGVySW5mb11dIgogICAgICAgICAgdGVtcGxhdGUtaW5kZXg9IltbdGVtcGxhdGVJbmRleF1dIgogICAgICAgID48L3RmLW5vZGUtaWNvbj4KICAgICAgICA8c3BhbiB0aXRsZSQ9IltbbmFtZV1dIj5bW25hbWVdXTwvc3Bhbj4KICAgICAgICA8c3BhbiBjbGFzcz0iZWRnZS1sYWJlbCI+W1tlZGdlTGFiZWxdXTwvc3Bhbj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICBgLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLHdMdC5wcm90b3R5cGUsImNhcmROb2RlIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLHdMdC5wcm90b3R5cGUsIml0ZW1Ob2RlIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLHdMdC5wcm90b3R5cGUsImVkZ2VMYWJlbCIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSx3THQucHJvdG90eXBlLCJpdGVtUmVuZGVySW5mbyIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx3THQucHJvdG90eXBlLCJuYW1lIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfaXRlbVR5cGVDaGFuZ2VkIn0pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx3THQucHJvdG90eXBlLCJpdGVtVHlwZSIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx3THQucHJvdG90eXBlLCJjb2xvckJ5Iix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLHdMdC5wcm90b3R5cGUsImNvbG9yQnlQYXJhbXMiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sd0x0LnByb3RvdHlwZSwidGVtcGxhdGVJbmRleCIsdm9pZCAwKSx3THQ9dChbaSgidGYtbm9kZS1saXN0LWl0ZW0iKV0sd0x0KTtsZXQgU0x0PWNsYXNzIGV4dGVuZHModHIoeWUpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fZXhwYW5kZWQ9ITAsdGhpcy5fb3BlbmVkQ29udHJvbFByZWQ9ITEsdGhpcy5fb3BlbmVkQ29udHJvbFN1Y2M9ITEsdGhpcy5fdGVtcGxhdGVJbmRleD1udWxsfWV4cGFuZE5vZGUoKXt0aGlzLmZpcmUoIl9ub2RlLmV4cGFuZCIsdGhpcy5ub2RlKX1fZ2V0Tm9kZSh0LGUpe3JldHVybiBlLm5vZGUodCl9X2dldE5vZGVTdGF0cyh0LGUpe3ZhciBuPXRoaXMuX2dldE5vZGUodCxlKTtyZXR1cm4gbj9uLnN0YXRzOm51bGx9X2dldFRvdGFsTWljcm9zKHQpe3JldHVybiB0P3QuZ2V0VG90YWxNaWNyb3MoKTowfWdldCBfaGFzRGlzcGxheWFibGVOb2RlU3RhdHMoKXtyZXR1cm4gaEF0KHRoaXMuX25vZGVTdGF0cyl9Z2V0IF9ub2RlU3RhdHNGb3JtYXR0ZWRCeXRlcygpe3ZhciB0PXRoaXMuX25vZGVTdGF0cztpZih0JiZ0LnRvdGFsQnl0ZXMpcmV0dXJuIHVBdCh0LnRvdGFsQnl0ZXMsbEF0KX1nZXQgX25vZGVTdGF0c0Zvcm1hdHRlZENvbXB1dGVUaW1lKCl7dmFyIHQ9dGhpcy5fbm9kZVN0YXRzO2lmKHQmJnQuZ2V0VG90YWxNaWNyb3MoKSlyZXR1cm4gdUF0KHQuZ2V0VG90YWxNaWNyb3MoKSxjQXQpfWdldCBfbm9kZVN0YXRzRm9ybWF0dGVkT3V0cHV0U2l6ZXMoKXt2YXIgdD10aGlzLl9ub2RlU3RhdHM7aWYodCYmdC5vdXRwdXRTaXplJiZ0Lm91dHB1dFNpemUubGVuZ3RoKXJldHVybiB3ZS5tYXAodC5vdXRwdXRTaXplLChmdW5jdGlvbih0KXtyZXR1cm4gMD09PXQubGVuZ3RoPyJzY2FsYXIiOiJbIit0LmpvaW4oIiwgIikrIl0ifSkpfV9nZXRSZW5kZXJJbmZvKHQsZSl7cmV0dXJuIHRoaXMucmVuZGVySGllcmFyY2h5LmdldE9yQ3JlYXRlUmVuZGVyTm9kZUJ5TmFtZSh0KX1nZXQgX2F0dHJpYnV0ZXMoKXt2YXIgdD10aGlzLl9ub2RlO2lmKHRoaXMuYXN5bmModGhpcy5fcmVzaXplTGlzdC5iaW5kKHRoaXMsIiNhdHRyaWJ1dGVzTGlzdCIpKSwhdHx8IXQuYXR0cilyZXR1cm5bXTt2YXIgZT1bXTtyZXR1cm4gd2UuZWFjaCh0LmF0dHIsKGZ1bmN0aW9uKHQpeyJfdG9vX2xhcmdlX2F0dHJzIj09PXQua2V5P2U9ZS5jb25jYXQodC52YWx1ZS5saXN0LnMubWFwKChmdW5jdGlvbih0KXtyZXR1cm57a2V5OnQsdmFsdWU6IlRvbyBsYXJnZSB0byBzaG93Li4uIn19KSkpOmUucHVzaCh7a2V5OnQua2V5LHZhbHVlOkpTT04uc3RyaW5naWZ5KHQudmFsdWUpfSl9KSksZX1nZXQgX2RldmljZSgpe3ZhciB0PXRoaXMuX25vZGU7cmV0dXJuIHQ/dC5kZXZpY2U6bnVsbH1nZXQgX3N1Y2Nlc3NvcnMoKXt2YXIgdD10aGlzLl9ub2RlLGU9dGhpcy5ncmFwaEhpZXJhcmNoeTtyZXR1cm4gdGhpcy5fcmVmcmVzaE5vZGVJdGVtTGlzdCgiaW5wdXRzTGlzdCIpLHQ/dGhpcy5fY29udmVydEVkZ2VMaXN0VG9FZGdlSW5mb0xpc3QoZS5nZXRTdWNjZXNzb3JzKHQubmFtZSksITEsdC5pc0dyb3VwTm9kZSk6e3JlZ3VsYXI6W10sY29udHJvbDpbXX19Z2V0IF9wcmVkZWNlc3NvcnMoKXt2YXIgdD10aGlzLl9ub2RlLGU9dGhpcy5ncmFwaEhpZXJhcmNoeTtyZXR1cm4gdGhpcy5fcmVmcmVzaE5vZGVJdGVtTGlzdCgib3V0cHV0c0xpc3QiKSx0P3RoaXMuX2NvbnZlcnRFZGdlTGlzdFRvRWRnZUluZm9MaXN0KGUuZ2V0UHJlZGVjZXNzb3JzKHQubmFtZSksITAsdC5pc0dyb3VwTm9kZSk6e3JlZ3VsYXI6W10sY29udHJvbDpbXX19Z2V0IF9mdW5jdGlvblVzYWdlcygpe3ZhciB0PXRoaXMuX25vZGUsZT10aGlzLmdyYXBoSGllcmFyY2h5O2lmKHRoaXMuX3JlZnJlc2hOb2RlSXRlbUxpc3QoImZ1bmN0aW9uVXNhZ2VzTGlzdCIpLCF0fHx0LnR5cGUhPT12QXQuTUVUQSlyZXR1cm5bXTtjb25zdCBuPWUubGlicmFyeUZ1bmN0aW9uc1t0LmFzc29jaWF0ZWRGdW5jdGlvbl07cmV0dXJuIG4/bi51c2FnZXM6W119X3JlZnJlc2hOb2RlSXRlbUxpc3QodCl7dGhpcy5hc3luYyh0aGlzLl9yZXNpemVMaXN0LmJpbmQodGhpcyxgIyR7dH1gKSl9X2NvbnZlcnRFZGdlTGlzdFRvRWRnZUluZm9MaXN0KHQsZSxuKXt2YXIgaT10PT53ZS5tYXAodC5iYXNlRWRnZUxpc3QsKHQ9Pnt2YXIgbj1lP3Qudjp0Lnc7cmV0dXJue25hbWU6bixub2RlOnRoaXMuX2dldE5vZGUobix0aGlzLmdyYXBoSGllcmFyY2h5KSxlZGdlTGFiZWw6TGt0KHQsdGhpcy5yZW5kZXJIaWVyYXJjaHkpLHJlbmRlckluZm86dGhpcy5fZ2V0UmVuZGVySW5mbyhuLHRoaXMucmVuZGVySGllcmFyY2h5KX19KSkscj1mdW5jdGlvbih0KXt2YXIgcj1bXTtyZXR1cm4gd2UuZWFjaCh0LCh0PT57dmFyIG89ZT90LnY6dC53O24mJjEhPXQuYmFzZUVkZ2VMaXN0Lmxlbmd0aD9yLnB1c2goe25hbWU6byxub2RlOnRoaXMuX2dldE5vZGUobyx0aGlzLmdyYXBoSGllcmFyY2h5KSxlZGdlTGFiZWw6UGt0KHQsdGhpcy5yZW5kZXJIaWVyYXJjaHkpLHJlbmRlckluZm86dGhpcy5fZ2V0UmVuZGVySW5mbyhvLHRoaXMucmVuZGVySGllcmFyY2h5KX0pOnI9ci5jb25jYXQoaSh0KSl9KSkscn0uYmluZCh0aGlzKTtyZXR1cm57cmVndWxhcjpyKHQucmVndWxhciksY29udHJvbDpyKHQuY29udHJvbCl9fWdldCBfc3Vibm9kZXMoKXt2YXIgdD10aGlzLl9ub2RlO3JldHVybiB0JiZ0Lm1ldGFncmFwaD90Lm1ldGFncmFwaC5ub2RlcygpOm51bGx9Z2V0IF90b3RhbFByZWRlY2Vzc29ycygpe3ZhciB0PXRoaXMuX3ByZWRlY2Vzc29ycztyZXR1cm4gdC5yZWd1bGFyLmxlbmd0aCt0LmNvbnRyb2wubGVuZ3RofWdldCBfdG90YWxTdWNjZXNzb3JzKCl7dmFyIHQ9dGhpcy5fc3VjY2Vzc29ycztyZXR1cm4gdC5yZWd1bGFyLmxlbmd0aCt0LmNvbnRyb2wubGVuZ3RofV90b2dnbGVDb250cm9sUHJlZCgpe3RoaXMuX29wZW5lZENvbnRyb2xQcmVkPSF0aGlzLl9vcGVuZWRDb250cm9sUHJlZH1fdG9nZ2xlQ29udHJvbFN1Y2MoKXt0aGlzLl9vcGVuZWRDb250cm9sU3VjYz0hdGhpcy5fb3BlbmVkQ29udHJvbFN1Y2N9X3RvZ2dsZUV4cGFuZGVkKCl7dGhpcy5fZXhwYW5kZWQ9IXRoaXMuX2V4cGFuZGVkfV9nZXRUb2dnbGVJY29uKHQpe3JldHVybiB0PyJleHBhbmQtbGVzcyI6ImV4cGFuZC1tb3JlIn1fcmVzZXRTdGF0ZSgpe3RoaXMuX29wZW5lZENvbnRyb2xQcmVkPSExLHRoaXMuX29wZW5lZENvbnRyb2xTdWNjPSExLHRoaXMuc2V0KCJfZ3JvdXBCdXR0b25UZXh0Iixqa3QodGhpcy5fbm9kZSkpfV9yZXNpemVMaXN0KHQpe3ZhciBlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodCk7ZSYmZS5maXJlKCJpcm9uLXJlc2l6ZSIpfV90b2dnbGVJbmNsdWRlKCl7dGhpcy5maXJlKCJub2RlLXRvZ2dsZS1pbmNsdXNpb24iLHtuYW1lOnRoaXMuZ3JhcGhOb2RlTmFtZX0pfV9ub2RlSW5jbHVkZVN0YXRlQ2hhbmdlZCh0LGUpe3RoaXMuc2V0KCJfYXV4QnV0dG9uVGV4dCIsRkF0KHQpKX1fdG9nZ2xlR3JvdXAoKXt2YXIgdD1Va3QodGhpcy5fbm9kZSk7dGhpcy5maXJlKCJub2RlLXRvZ2dsZS1zZXJpZXNncm91cCIse25hbWU6dH0pfV9pc0xpYnJhcnlGdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5uYW1lLnN0YXJ0c1dpdGgoX0F0KX1faXNJblNlcmllcyh0KXtyZXR1cm4gVmt0KHQpfV9ncmFwaEhpZXJhcmNoeUNoYW5nZWQoKXt0aGlzLl90ZW1wbGF0ZUluZGV4PXRoaXMuZ3JhcGhIaWVyYXJjaHkuZ2V0VGVtcGxhdGVJbmRleCgpLHRoaXMuZ3JhcGhIaWVyYXJjaHkuYWRkTGlzdGVuZXIoZEx0LlRFTVBMQVRFU19VUERBVEVELCgoKT0+e3RoaXMuX3RlbXBsYXRlSW5kZXg9dGhpcy5ncmFwaEhpZXJhcmNoeS5nZXRUZW1wbGF0ZUluZGV4KCl9KSl9fTtTTHQudGVtcGxhdGU9X2VgCiAgICA8c3R5bGU+CiAgICAgIC5zdWItbGlzdC1ncm91cCB7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBmb250LXNpemU6IDEycHQ7CiAgICAgICAgcGFkZGluZy1ib3R0b206IDhweDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgLnN1Yi1saXN0IHsKICAgICAgICBtYXgtaGVpZ2h0OiAzMDBweDsKICAgICAgICBvdmVyZmxvdy15OiBzY3JvbGw7CiAgICAgIH0KCiAgICAgIC5hdHRyLWxlZnQgewogICAgICAgIGZsb2F0OiBsZWZ0OwogICAgICAgIHdpZHRoOiAzMCU7CiAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkOwogICAgICAgIGNvbG9yOiB2YXIoLS1zZWNvbmRhcnktdGV4dC1jb2xvcik7CiAgICAgICAgZm9udC1zaXplOiAxMXB0OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgIH0KCiAgICAgIC5hdHRyLXJpZ2h0IHsKICAgICAgICBtYXJnaW4tbGVmdDogMzAlOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgICBjb2xvcjogdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpOwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgIH0KCiAgICAgIC5zdWItbGlzdC10YWJsZSB7CiAgICAgICAgZGlzcGxheTogdGFibGU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5zdWItbGlzdC10YWJsZS1yb3cgewogICAgICAgIGRpc3BsYXk6IHRhYmxlLXJvdzsKICAgICAgfQoKICAgICAgLnN1Yi1saXN0LXRhYmxlLXJvdyAuc3ViLWxpc3QtdGFibGUtY2VsbDpsYXN0LWNoaWxkIHsKICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgICAgfQoKICAgICAgLnN1Yi1saXN0LXRhYmxlLWNlbGwgewogICAgICAgIGNvbG9yOiB2YXIoLS1zZWNvbmRhcnktdGV4dC1jb2xvcik7CiAgICAgICAgZGlzcGxheTogdGFibGUtY2VsbDsKICAgICAgICBmb250LXNpemU6IDExcHQ7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBtYXgtd2lkdGg6IDIwMHB4OwogICAgICAgIHBhZGRpbmc6IDAgNHB4OwogICAgICB9CgogICAgICBwYXBlci1pdGVtIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXByaW1hcnktYmFja2dyb3VuZC1jb2xvcik7CiAgICAgIH0KCiAgICAgIHBhcGVyLWl0ZW0tYm9keVt0d28tbGluZV0gewogICAgICAgIG1pbi1oZWlnaHQ6IDA7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHggNHB4OwogICAgICB9CgogICAgICAuZXhwYW5kZWRJbmZvIHsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgfQoKICAgICAgLmNvbnRyb2xEZXBzIHsKICAgICAgICBwYWRkaW5nOiAwIDAgMCA4cHg7CiAgICAgIH0KCiAgICAgIC5ub2RlLW5hbWUgewogICAgICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7CiAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkOwogICAgICAgIGZvbnQtc2l6ZTogMTRwdDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICB9CgogICAgICAubm9kZS1pY29uIHsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICAgIH0KCiAgICAgIC5zdWJ0aXRsZSB7CiAgICAgICAgY29sb3I6IHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKTsKICAgICAgICBmb250LXNpemU6IDEycHQ7CiAgICAgIH0KCiAgICAgIC5jb250cm9sTGluZSB7CiAgICAgICAgZm9udC1zaXplOiAxMXB0OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtYnV0dG9uIHsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICAgICAgbWF4LWhlaWdodDogMjBweDsKICAgICAgICBtYXgtd2lkdGg6IDIwcHg7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQoKICAgICAgLmNvbnRyb2wtdG9nZ2xlLWJ1dHRvbiB7CiAgICAgICAgZmxvYXQ6IGxlZnQ7CiAgICAgICAgbWF4LWhlaWdodDogMjBweDsKICAgICAgICBtYXgtd2lkdGg6IDIwcHg7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1pbmNsdWRlLWdyb3VwIHsKICAgICAgICBwYWRkaW5nLXRvcDogNHB4OwogICAgICB9CgogICAgICAudG9nZ2xlLWluY2x1ZGUgewogICAgICAgIG1hcmdpbjogNXB4IDZweDsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTsKICAgICAgICBwYWRkaW5nOiA0cHggNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTBwdDsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmFmYWZhOwogICAgICAgIGNvbG9yOiAjNjY2OwogICAgICB9CgogICAgICAudG9nZ2xlLWluY2x1ZGU6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWdvb2dsZS15ZWxsb3ctMTAwKTsKICAgICAgfQoKICAgICAgLm5vbi1jb250cm9sLWxpc3QtaXRlbSB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAxMHB4OwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPHBhcGVyLWl0ZW0+CiAgICAgIDxwYXBlci1pdGVtLWJvZHkgdHdvLWxpbmU+CiAgICAgICAgPGRpdj4KICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgICAgICBpY29uPSJ7e19nZXRUb2dnbGVJY29uKF9leHBhbmRlZCl9fSIKICAgICAgICAgICAgb24tY2xpY2s9Il90b2dnbGVFeHBhbmRlZCIKICAgICAgICAgICAgY2xhc3M9InRvZ2dsZS1idXR0b24iCiAgICAgICAgICA+CiAgICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgPGRpdiBjbGFzcz0ibm9kZS1uYW1lIj4KICAgICAgICAgICAgPHRmLXdici1zdHJpbmcgdmFsdWU9IltbX25vZGUubmFtZV1dIiBkZWxpbWl0ZXItcGF0dGVybj0iLyI+CiAgICAgICAgICAgIDwvdGYtd2JyLXN0cmluZz4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgc2Vjb25kYXJ5PgogICAgICAgICAgPHRmLW5vZGUtaWNvbgogICAgICAgICAgICBjbGFzcz0ibm9kZS1pY29uIgogICAgICAgICAgICBub2RlPSJbW19ub2RlXV0iCiAgICAgICAgICAgIHJlbmRlci1pbmZvPSJbW19nZXRSZW5kZXJJbmZvKGdyYXBoTm9kZU5hbWUsIHJlbmRlckhpZXJhcmNoeSldXSIKICAgICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgICB0ZW1wbGF0ZS1pbmRleD0iW1tfdGVtcGxhdGVJbmRleF1dIgogICAgICAgICAgPjwvdGYtbm9kZS1pY29uPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJ7e19ub2RlLm9wfX0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWJ0aXRsZSI+CiAgICAgICAgICAgICAgT3BlcmF0aW9uOgogICAgICAgICAgICAgIDxzcGFuPltbX25vZGUub3BdXTwvc3Bhbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJ7e19ub2RlLm1ldGFncmFwaH19Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3VidGl0bGUiPgogICAgICAgICAgICAgIFN1YmdyYXBoOgogICAgICAgICAgICAgIDxzcGFuPltbX25vZGUuY2FyZGluYWxpdHldXTwvc3Bhbj4gbm9kZXMKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvZGl2PgogICAgICA8L3BhcGVyLWl0ZW0tYm9keT4KICAgIDwvcGFwZXItaXRlbT4KICAgIDxpcm9uLWNvbGxhcHNlIG9wZW5lZD0ie3tfZXhwYW5kZWR9fSI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfZXhwYW5kZWR9fSIgcmVzdGFtcD0idHJ1ZSI+CiAgICAgICAgPGRpdiBjbGFzcz0iZXhwYW5kZWRJbmZvIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LWdyb3VwIGF0dHJpYnV0ZXMiPgogICAgICAgICAgICBBdHRyaWJ1dGVzICg8c3Bhbj5bW19hdHRyaWJ1dGVzLmxlbmd0aF1dPC9zcGFuPikKICAgICAgICAgICAgPGlyb24tbGlzdAogICAgICAgICAgICAgIGNsYXNzPSJzdWItbGlzdCIKICAgICAgICAgICAgICBpZD0iYXR0cmlidXRlc0xpc3QiCiAgICAgICAgICAgICAgaXRlbXM9IltbX2F0dHJpYnV0ZXNdXSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImF0dHItbGVmdCI+W1tpdGVtLmtleV1dPC9kaXY+CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImF0dHItcmlnaHQiPltbaXRlbS52YWx1ZV1dPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L2lyb24tbGlzdD4KICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfZGV2aWNlfX0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC1ncm91cCBkZXZpY2UiPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImF0dHItbGVmdCI+RGV2aWNlPC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYXR0ci1yaWdodCI+W1tfZGV2aWNlXV08L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgoKICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LWdyb3VwIHByZWRlY2Vzc29ycyI+CiAgICAgICAgICAgIElucHV0cyAoPHNwYW4+W1tfdG90YWxQcmVkZWNlc3NvcnNdXTwvc3Bhbj4pCiAgICAgICAgICAgIDxpcm9uLWxpc3QKICAgICAgICAgICAgICBjbGFzcz0ic3ViLWxpc3QiCiAgICAgICAgICAgICAgaWQ9ImlucHV0c0xpc3QiCiAgICAgICAgICAgICAgaXRlbXM9IltbX3ByZWRlY2Vzc29ycy5yZWd1bGFyXV0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGYtbm9kZS1saXN0LWl0ZW0KICAgICAgICAgICAgICAgICAgY2xhc3M9Im5vbi1jb250cm9sLWxpc3QtaXRlbSIKICAgICAgICAgICAgICAgICAgY2FyZC1ub2RlPSJbW19ub2RlXV0iCiAgICAgICAgICAgICAgICAgIGl0ZW0tbm9kZT0iW1tpdGVtLm5vZGVdXSIKICAgICAgICAgICAgICAgICAgZWRnZS1sYWJlbD0iW1tpdGVtLmVkZ2VMYWJlbF1dIgogICAgICAgICAgICAgICAgICBpdGVtLXJlbmRlci1pbmZvPSJbW2l0ZW0ucmVuZGVySW5mb11dIgogICAgICAgICAgICAgICAgICBuYW1lPSJbW2l0ZW0ubmFtZV1dIgogICAgICAgICAgICAgICAgICBpdGVtLXR5cGU9InByZWRlY2Vzc29ycyIKICAgICAgICAgICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgICAgICAgICB0ZW1wbGF0ZS1pbmRleD0iW1tfdGVtcGxhdGVJbmRleF1dIgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPC90Zi1ub2RlLWxpc3QtaXRlbT4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L2lyb24tbGlzdD4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19wcmVkZWNlc3NvcnMuY29udHJvbC5sZW5ndGhdXSI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbERlcHMiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbExpbmUiPgogICAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICAgICAgICAgICAgICBpY29uPSJ7e19nZXRUb2dnbGVJY29uKF9vcGVuZWRDb250cm9sUHJlZCl9fSIKICAgICAgICAgICAgICAgICAgICBvbi1jbGljaz0iX3RvZ2dsZUNvbnRyb2xQcmVkIgogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJjb250cm9sLXRvZ2dsZS1idXR0b24iCiAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgQ29udHJvbCBkZXBlbmRlbmNpZXMKICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGlyb24tY29sbGFwc2Ugb3BlbmVkPSJ7e19vcGVuZWRDb250cm9sUHJlZH19IiBuby1hbmltYXRpb24+CiAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZQogICAgICAgICAgICAgICAgICAgIGlzPSJkb20taWYiCiAgICAgICAgICAgICAgICAgICAgaWY9Int7X29wZW5lZENvbnRyb2xQcmVkfX0iCiAgICAgICAgICAgICAgICAgICAgcmVzdGFtcD0idHJ1ZSIKICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgIDxpcm9uLWxpc3QKICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzdWItbGlzdCIKICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zPSJbW19wcmVkZWNlc3NvcnMuY29udHJvbF1dIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICAgICAgPHRmLW5vZGUtbGlzdC1pdGVtCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2FyZC1ub2RlPSJbW19ub2RlXV0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS1ub2RlPSJbW2l0ZW0ubm9kZV1dIgogICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tcmVuZGVyLWluZm89IltbaXRlbS5yZW5kZXJJbmZvXV0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT0iW1tpdGVtLm5hbWVdXSIKICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLXR5cGU9InByZWRlY2Vzc29ycyIKICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvci1ieT0iW1tjb2xvckJ5XV0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGUtaW5kZXg9IltbX3RlbXBsYXRlSW5kZXhdXSIKICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RmLW5vZGUtbGlzdC1pdGVtPgogICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICA8L2lyb24tbGlzdD4KICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDwvaXJvbi1jb2xsYXBzZT4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LWdyb3VwIHN1Y2Nlc3NvcnMiPgogICAgICAgICAgICBPdXRwdXRzICg8c3Bhbj5bW190b3RhbFN1Y2Nlc3NvcnNdXTwvc3Bhbj4pCiAgICAgICAgICAgIDxpcm9uLWxpc3QKICAgICAgICAgICAgICBjbGFzcz0ic3ViLWxpc3QiCiAgICAgICAgICAgICAgaWQ9Im91dHB1dHNMaXN0IgogICAgICAgICAgICAgIGl0ZW1zPSJbW19zdWNjZXNzb3JzLnJlZ3VsYXJdXSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0Zi1ub2RlLWxpc3QtaXRlbQogICAgICAgICAgICAgICAgICBjbGFzcz0ibm9uLWNvbnRyb2wtbGlzdC1pdGVtIgogICAgICAgICAgICAgICAgICBjYXJkLW5vZGU9IltbX25vZGVdXSIKICAgICAgICAgICAgICAgICAgaXRlbS1ub2RlPSJbW2l0ZW0ubm9kZV1dIgogICAgICAgICAgICAgICAgICBlZGdlLWxhYmVsPSJbW2l0ZW0uZWRnZUxhYmVsXV0iCiAgICAgICAgICAgICAgICAgIGl0ZW0tcmVuZGVyLWluZm89IltbaXRlbS5yZW5kZXJJbmZvXV0iCiAgICAgICAgICAgICAgICAgIG5hbWU9IltbaXRlbS5uYW1lXV0iCiAgICAgICAgICAgICAgICAgIGl0ZW0tdHlwZT0ic3VjY2Vzc29yIgogICAgICAgICAgICAgICAgICBjb2xvci1ieT0iW1tjb2xvckJ5XV0iCiAgICAgICAgICAgICAgICAgIHRlbXBsYXRlLWluZGV4PSJbW190ZW1wbGF0ZUluZGV4XV0iCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8L3RmLW5vZGUtbGlzdC1pdGVtPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvaXJvbi1saXN0PgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3N1Y2Nlc3NvcnMuY29udHJvbC5sZW5ndGhdXSI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbERlcHMiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbExpbmUiPgogICAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICAgICAgICAgICAgICBpY29uPSJ7e19nZXRUb2dnbGVJY29uKF9vcGVuZWRDb250cm9sU3VjYyl9fSIKICAgICAgICAgICAgICAgICAgICBvbi1jbGljaz0iX3RvZ2dsZUNvbnRyb2xTdWNjIgogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJjb250cm9sLXRvZ2dsZS1idXR0b24iCiAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgQ29udHJvbCBkZXBlbmRlbmNpZXMKICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGlyb24tY29sbGFwc2Ugb3BlbmVkPSJ7e19vcGVuZWRDb250cm9sU3VjY319IiBuby1hbmltYXRpb24+CiAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZQogICAgICAgICAgICAgICAgICAgIGlzPSJkb20taWYiCiAgICAgICAgICAgICAgICAgICAgaWY9Int7X29wZW5lZENvbnRyb2xTdWNjfX0iCiAgICAgICAgICAgICAgICAgICAgcmVzdGFtcD0idHJ1ZSIKICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgIDxpcm9uLWxpc3QgY2xhc3M9InN1Yi1saXN0IiBpdGVtcz0iW1tfc3VjY2Vzc29ycy5jb250cm9sXV0iPgogICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICAgICAgICAgICAgICA8dGYtbm9kZS1saXN0LWl0ZW0KICAgICAgICAgICAgICAgICAgICAgICAgICBjYXJkLW5vZGU9IltbX25vZGVdXSIKICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLW5vZGU9IltbaXRlbS5ub2RlXV0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS1yZW5kZXItaW5mbz0iW1tpdGVtLnJlbmRlckluZm9dXSIKICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPSJbW2l0ZW0ubmFtZV1dIgogICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tdHlwZT0ic3VjY2Vzc29ycyIKICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvci1ieT0iW1tjb2xvckJ5XV0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGUtaW5kZXg9IltbX3RlbXBsYXRlSW5kZXhdXSIKICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RmLW5vZGUtbGlzdC1pdGVtPgogICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICA8L2lyb24tbGlzdD4KICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDwvaXJvbi1jb2xsYXBzZT4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJ7e19oYXNEaXNwbGF5YWJsZU5vZGVTdGF0c319Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3ViLWxpc3QtZ3JvdXAgbm9kZS1zdGF0cyI+CiAgICAgICAgICAgICAgTm9kZSBTdGF0cwogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlIj4KICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfbm9kZVN0YXRzLnRvdGFsQnl0ZXN9fSI+CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLXJvdyI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3ViLWxpc3QtdGFibGUtY2VsbCI+TWVtb3J5PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3ViLWxpc3QtdGFibGUtY2VsbCI+CiAgICAgICAgICAgICAgICAgICAgICBbW19ub2RlU3RhdHNGb3JtYXR0ZWRCeXRlc11dCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfZ2V0VG90YWxNaWNyb3MoX25vZGVTdGF0cyl9fSI+CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLXJvdyI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3ViLWxpc3QtdGFibGUtY2VsbCI+Q29tcHV0ZSBUaW1lPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3ViLWxpc3QtdGFibGUtY2VsbCI+CiAgICAgICAgICAgICAgICAgICAgICBbW19ub2RlU3RhdHNGb3JtYXR0ZWRDb21wdXRlVGltZV1dCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfbm9kZVN0YXRzLm91dHB1dFNpemV9fSI+CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLXJvdyI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3ViLWxpc3QtdGFibGUtY2VsbCI+VGVuc29yIE91dHB1dCBTaXplczwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLWNlbGwiPgogICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlCiAgICAgICAgICAgICAgICAgICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgICAgICAgICAgICAgICAgICBpdGVtcz0ie3tfbm9kZVN0YXRzRm9ybWF0dGVkT3V0cHV0U2l6ZXN9fSIKICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgW1tpdGVtXV0gPGJyIC8+CiAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2Z1bmN0aW9uVXNhZ2VzLmxlbmd0aF1dIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3ViLWxpc3QtZ3JvdXAgcHJlZGVjZXNzb3JzIj4KICAgICAgICAgICAgICBVc2FnZXMgb2YgdGhlIEZ1bmN0aW9uICg8c3Bhbj5bW19mdW5jdGlvblVzYWdlcy5sZW5ndGhdXTwvc3Bhbj4pCiAgICAgICAgICAgICAgPGlyb24tbGlzdAogICAgICAgICAgICAgICAgY2xhc3M9InN1Yi1saXN0IgogICAgICAgICAgICAgICAgaWQ9ImZ1bmN0aW9uVXNhZ2VzTGlzdCIKICAgICAgICAgICAgICAgIGl0ZW1zPSJbW19mdW5jdGlvblVzYWdlc11dIgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgPHRmLW5vZGUtbGlzdC1pdGVtCiAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im5vbi1jb250cm9sLWxpc3QtaXRlbSIKICAgICAgICAgICAgICAgICAgICBjYXJkLW5vZGU9IltbX25vZGVdXSIKICAgICAgICAgICAgICAgICAgICBpdGVtLW5vZGU9IltbaXRlbV1dIgogICAgICAgICAgICAgICAgICAgIG5hbWU9IltbaXRlbS5uYW1lXV0iCiAgICAgICAgICAgICAgICAgICAgaXRlbS10eXBlPSJmdW5jdGlvblVzYWdlcyIKICAgICAgICAgICAgICAgICAgICBjb2xvci1ieT0iW1tjb2xvckJ5XV0iCiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGUtaW5kZXg9IltbX3RlbXBsYXRlSW5kZXhdXSIKICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICA8L3RmLW5vZGUtbGlzdC1pdGVtPgogICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICA8L2lyb24tbGlzdD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgoKICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2lzTGlicmFyeUZ1bmN0aW9uKF9ub2RlKV1dIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9nZ2xlLWluY2x1ZGUtZ3JvdXAiPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24KICAgICAgICAgICAgICAgIHJhaXNlZAogICAgICAgICAgICAgICAgY2xhc3M9InRvZ2dsZS1pbmNsdWRlIgogICAgICAgICAgICAgICAgb24tY2xpY2s9Il90b2dnbGVJbmNsdWRlIgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxzcGFuPltbX2F1eEJ1dHRvblRleHRdXTwvc3Bhbj4KICAgICAgICAgICAgICA8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgoKICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfaXNJblNlcmllcyhfbm9kZSl9fSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRvZ2dsZS1pbmNsdWRlLWdyb3VwIj4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgICByYWlzZWQKICAgICAgICAgICAgICAgIGNsYXNzPSJ0b2dnbGUtaW5jbHVkZSIKICAgICAgICAgICAgICAgIG9uLWNsaWNrPSJfdG9nZ2xlR3JvdXAiCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPHNwYW4+W1tfZ3JvdXBCdXR0b25UZXh0XV08L3NwYW4+CiAgICAgICAgICAgICAgPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvaXJvbi1jb2xsYXBzZT4KICBgLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLFNMdC5wcm90b3R5cGUsImdyYXBoTm9kZU5hbWUiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIscEx0KV0sU0x0LnByb3RvdHlwZSwiZ3JhcGhIaWVyYXJjaHkiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sU0x0LnByb3RvdHlwZSwicmVuZGVySGllcmFyY2h5Iix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLFNMdC5wcm90b3R5cGUsImNvbG9yQnkiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3QsY29tcHV0ZWQ6Il9nZXROb2RlKGdyYXBoTm9kZU5hbWUsIGdyYXBoSGllcmFyY2h5KSIsb2JzZXJ2ZXI6Il9yZXNldFN0YXRlIn0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxTTHQucHJvdG90eXBlLCJfbm9kZSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdCxjb21wdXRlZDoiX2dldE5vZGVTdGF0cyhncmFwaE5vZGVOYW1lLCBncmFwaEhpZXJhcmNoeSkiLG9ic2VydmVyOiJfcmVzZXRTdGF0ZSJ9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sU0x0LnByb3RvdHlwZSwiX25vZGVTdGF0cyIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcixvYnNlcnZlcjoiX25vZGVJbmNsdWRlU3RhdGVDaGFuZ2VkIn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxTTHQucHJvdG90eXBlLCJub2RlSW5jbHVkZSIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFNMdC5wcm90b3R5cGUsIl9leHBhbmRlZCIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFNMdC5wcm90b3R5cGUsIl9vcGVuZWRDb250cm9sUHJlZCIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFNMdC5wcm90b3R5cGUsIl9vcGVuZWRDb250cm9sU3VjYyIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxTTHQucHJvdG90eXBlLCJfYXV4QnV0dG9uVGV4dCIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxTTHQucHJvdG90eXBlLCJfZ3JvdXBCdXR0b25UZXh0Iix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sU0x0LnByb3RvdHlwZSwiX3RlbXBsYXRlSW5kZXgiLHZvaWQgMCksdChbcygiX25vZGVTdGF0cyIpLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxTTHQucHJvdG90eXBlLCJfaGFzRGlzcGxheWFibGVOb2RlU3RhdHMiLG51bGwpLHQoW3MoIl9ub2RlU3RhdHMiKSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxTTHQucHJvdG90eXBlLCJfbm9kZVN0YXRzRm9ybWF0dGVkQnl0ZXMiLG51bGwpLHQoW3MoIl9ub2RlU3RhdHMiKSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxTTHQucHJvdG90eXBlLCJfbm9kZVN0YXRzRm9ybWF0dGVkQ29tcHV0ZVRpbWUiLG51bGwpLHQoW3MoIl9ub2RlU3RhdHMiKSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFNMdC5wcm90b3R5cGUsIl9ub2RlU3RhdHNGb3JtYXR0ZWRPdXRwdXRTaXplcyIsbnVsbCksdChbcygiX25vZGUiKSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFNMdC5wcm90b3R5cGUsIl9hdHRyaWJ1dGVzIixudWxsKSx0KFtzKCJfbm9kZSIpLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFNMdC5wcm90b3R5cGUsIl9kZXZpY2UiLG51bGwpLHQoW3MoIl9ub2RlIiwiZ3JhcGhIaWVyYXJjaHkiKSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxTTHQucHJvdG90eXBlLCJfc3VjY2Vzc29ycyIsbnVsbCksdChbcygiX25vZGUiLCJncmFwaEhpZXJhcmNoeSIpLGUoImRlc2lnbjp0eXBlIixPYmplY3QpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFNMdC5wcm90b3R5cGUsIl9wcmVkZWNlc3NvcnMiLG51bGwpLHQoW3MoIl9ub2RlIiwiZ3JhcGhIaWVyYXJjaHkiKSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFNMdC5wcm90b3R5cGUsIl9mdW5jdGlvblVzYWdlcyIsbnVsbCksdChbcygiX25vZGUiKSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFNMdC5wcm90b3R5cGUsIl9zdWJub2RlcyIsbnVsbCksdChbcygiX3ByZWRlY2Vzc29ycyIpLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFNMdC5wcm90b3R5cGUsIl90b3RhbFByZWRlY2Vzc29ycyIsbnVsbCksdChbcygiX3N1Y2Nlc3NvcnMiKSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxTTHQucHJvdG90eXBlLCJfdG90YWxTdWNjZXNzb3JzIixudWxsKSx0KFthKCJncmFwaEhpZXJhcmNoeSIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sU0x0LnByb3RvdHlwZSwiX2dyYXBoSGllcmFyY2h5Q2hhbmdlZCIsbnVsbCksU0x0PXQoW2koInRmLW5vZGUtaW5mbyIpXSxTTHQpO2xldCBNTHQ9Y2xhc3MgZXh0ZW5kcyh0cih5ZSkpe3JlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoIm5vZGUtbGlzdC1pdGVtLWNsaWNrIix0aGlzLl9ub2RlTGlzdEl0ZW1DbGlja2VkLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigibm9kZS1saXN0LWl0ZW0tbW91c2VvdmVyIix0aGlzLl9ub2RlTGlzdEl0ZW1Nb3VzZW92ZXIuYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJub2RlLWxpc3QtaXRlbS1tb3VzZW91dCIsdGhpcy5fbm9kZUxpc3RJdGVtTW91c2VvdXQuYmluZCh0aGlzKSl9X25vZGVMaXN0SXRlbUNsaWNrZWQodCl7dGhpcy5zZWxlY3RlZE5vZGU9dC5kZXRhaWwubm9kZU5hbWV9X25vZGVMaXN0SXRlbU1vdXNlb3Zlcih0KXt0aGlzLmhpZ2hsaWdodGVkTm9kZT10LmRldGFpbC5ub2RlTmFtZX1fbm9kZUxpc3RJdGVtTW91c2VvdXQoKXt0aGlzLmhpZ2hsaWdodGVkTm9kZT1udWxsfV9oZWFsdGhQaWxsc0F2YWlsYWJsZSh0LGUpe3JldHVybiB0JiZlJiZPYmplY3Qua2V5cyhlKS5sZW5ndGg+MH1fZXF1YWxzKHQsZSl7cmV0dXJuIHQ9PT1lfX07TUx0LnRlbXBsYXRlPV9lYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tc2Vjb25kYXJ5LWJhY2tncm91bmQtY29sb3IpOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBtYXgtaGVpZ2h0OiA2NTBweDsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgfQoKICAgICAgaDIgewogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tzZWxlY3RlZE5vZGV9fSI+CiAgICAgIDxwYXBlci1tYXRlcmlhbCBlbGV2YXRpb249IjEiIGNsYXNzPSJjYXJkIj4KICAgICAgICA8dGYtbm9kZS1pbmZvCiAgICAgICAgICBncmFwaC1oaWVyYXJjaHk9IltbZ3JhcGhIaWVyYXJjaHldXSIKICAgICAgICAgIHJlbmRlci1oaWVyYXJjaHk9IltbcmVuZGVySGllcmFyY2h5XV0iCiAgICAgICAgICBmbGF0LWdyYXBoPSJbW2dyYXBoXV0iCiAgICAgICAgICBncmFwaC1ub2RlLW5hbWU9Iltbc2VsZWN0ZWROb2RlXV0iCiAgICAgICAgICBub2RlLWluY2x1ZGU9Iltbc2VsZWN0ZWROb2RlSW5jbHVkZV1dIgogICAgICAgICAgaGlnaGxpZ2h0ZWQtbm9kZT0ie3toaWdobGlnaHRlZE5vZGV9fSIKICAgICAgICAgIGNvbG9yLWJ5PSJbW2NvbG9yQnldXSIKICAgICAgICA+CiAgICAgICAgPC90Zi1ub2RlLWluZm8+CiAgICAgIDwvcGFwZXItbWF0ZXJpYWw+CiAgICA8L3RlbXBsYXRlPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19lcXVhbHMoY29sb3JCeSwgJ29wX2NvbXBhdGliaWxpdHknKV1dIj4KICAgICAgPHRmLWdyYXBoLW9wLWNvbXBhdC1jYXJkCiAgICAgICAgZ3JhcGgtaGllcmFyY2h5PSJbW2dyYXBoSGllcmFyY2h5XV0iCiAgICAgICAgcmVuZGVyLWhpZXJhcmNoeT0iW1tyZW5kZXJIaWVyYXJjaHldXSIKICAgICAgICBjb2xvci1ieT0iW1tjb2xvckJ5XV0iCiAgICAgICAgbm9kZS10aXRsZT0iW1tjb21wYXROb2RlVGl0bGVdXSIKICAgICAgPgogICAgICA8L3RmLWdyYXBoLW9wLWNvbXBhdC1jYXJkPgogICAgPC90ZW1wbGF0ZT4KICAgIDx0ZW1wbGF0ZQogICAgICBpcz0iZG9tLWlmIgogICAgICBpZj0iW1tfaGVhbHRoUGlsbHNBdmFpbGFibGUoZGVidWdnZXJEYXRhRW5hYmxlZCwgbm9kZU5hbWVzVG9IZWFsdGhQaWxscyldXSIKICAgID4KICAgICAgPHRmLWdyYXBoLWRlYnVnZ2VyLWRhdGEtY2FyZAogICAgICAgIHJlbmRlci1oaWVyYXJjaHk9IltbcmVuZGVySGllcmFyY2h5XV0iCiAgICAgICAgZGVidWdnZXItbnVtZXJpYy1hbGVydHM9IltbZGVidWdnZXJOdW1lcmljQWxlcnRzXV0iCiAgICAgICAgbm9kZS1uYW1lcy10by1oZWFsdGgtcGlsbHM9Iltbbm9kZU5hbWVzVG9IZWFsdGhQaWxsc11dIgogICAgICAgIHNlbGVjdGVkLW5vZGU9Int7c2VsZWN0ZWROb2RlfX0iCiAgICAgICAgaGlnaGxpZ2h0ZWQtbm9kZT0ie3toaWdobGlnaHRlZE5vZGV9fSIKICAgICAgICBhcmUtaGVhbHRoLXBpbGxzLWxvYWRpbmc9IltbYXJlSGVhbHRoUGlsbHNMb2FkaW5nXV0iCiAgICAgICAgYWxsLXN0ZXBzLW1vZGUtZW5hYmxlZD0ie3thbGxTdGVwc01vZGVFbmFibGVkfX0iCiAgICAgICAgc3BlY2lmaWMtaGVhbHRoLXBpbGwtc3RlcD0ie3tzcGVjaWZpY0hlYWx0aFBpbGxTdGVwfX0iCiAgICAgICAgaGVhbHRoLXBpbGwtc3RlcC1pbmRleD0ie3toZWFsdGhQaWxsU3RlcEluZGV4fX0iCiAgICAgID4KICAgICAgPC90Zi1ncmFwaC1kZWJ1Z2dlci1kYXRhLWNhcmQ+CiAgICA8L3RlbXBsYXRlPgogIGAsdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sTUx0LnByb3RvdHlwZSwidGl0bGUiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIscEx0KV0sTUx0LnByb3RvdHlwZSwiZ3JhcGhIaWVyYXJjaHkiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsd0F0KV0sTUx0LnByb3RvdHlwZSwiZ3JhcGgiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsWEF0KV0sTUx0LnByb3RvdHlwZSwicmVuZGVySGllcmFyY2h5Iix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLE1MdC5wcm90b3R5cGUsIm5vZGVOYW1lc1RvSGVhbHRoUGlsbHMiLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXIsbm90aWZ5OiEwfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLE1MdC5wcm90b3R5cGUsImhlYWx0aFBpbGxTdGVwSW5kZXgiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sTUx0LnByb3RvdHlwZSwiY29sb3JCeSIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxNTHQucHJvdG90eXBlLCJjb21wYXROb2RlVGl0bGUiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLE1MdC5wcm90b3R5cGUsInNlbGVjdGVkTm9kZSIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sTUx0LnByb3RvdHlwZSwiaGlnaGxpZ2h0ZWROb2RlIix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyLG5vdGlmeTohMH0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxNTHQucHJvdG90eXBlLCJzZWxlY3RlZE5vZGVJbmNsdWRlIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sTUx0LnByb3RvdHlwZSwiZGVidWdnZXJEYXRhRW5hYmxlZCIsdm9pZCAwKSxNTHQ9dChbaSgidGYtZ3JhcGgtaW5mbyIpXSxNTHQpO2NsYXNzIEVMdHtjb25zdHJ1Y3Rvcih0LGUsbixpLHIsbyl7dGhpcy5zdmc9dCx0aGlzLmxhYmVsUGFkZGluZz1vLHRoaXMuem9vbUc9ZSx0aGlzLm1haW5ab29tPW4sdGhpcy5tYXhXYW5kSD1yO2xldCBhPXd1KGkuc2hhZG93Um9vdCkscz1hLnNlbGVjdCgic3ZnIiksbD1zLnNlbGVjdCgicmVjdCIpO3RoaXMudmlld3BvaW50Q29vcmQ9e3g6MCx5OjB9O2xldCBjPXloKCkuc3ViamVjdChPYmplY3QpLm9uKCJkcmFnIiwodD0+e3RoaXMudmlld3BvaW50Q29vcmQueD1jdS54LHRoaXMudmlld3BvaW50Q29vcmQueT1jdS55LHRoaXMudXBkYXRlVmlld3BvaW50KCl9KSk7bC5kYXR1bSh0aGlzLnZpZXdwb2ludENvb3JkKS5jYWxsKGMpLHMub24oImNsaWNrIiwoKCk9PntpZihjdS5kZWZhdWx0UHJldmVudGVkKXJldHVybjtsZXQgdD1OdW1iZXIobC5hdHRyKCJ3aWR0aCIpKSxlPU51bWJlcihsLmF0dHIoImhlaWdodCIpKSxuPW9oKHMubm9kZSgpKTt0aGlzLnZpZXdwb2ludENvb3JkLng9blswXS10LzIsdGhpcy52aWV3cG9pbnRDb29yZC55PW5bMV0tZS8yLHRoaXMudXBkYXRlVmlld3BvaW50KCl9KSksdGhpcy52aWV3cG9pbnQ9bC5ub2RlKCksdGhpcy5taW5pbWFwU3ZnPXMubm9kZSgpLHRoaXMubWluaW1hcD1pLHRoaXMuY2FudmFzPWEuc2VsZWN0KCJjYW52YXMuZmlyc3QiKS5ub2RlKCksdGhpcy5jYW52YXNCdWZmZXI9YS5zZWxlY3QoImNhbnZhcy5zZWNvbmQiKS5ub2RlKCksdGhpcy5kb3dubG9hZENhbnZhcz1hLnNlbGVjdCgiY2FudmFzLmRvd25sb2FkIikubm9kZSgpLHd1KHRoaXMuZG93bmxvYWRDYW52YXMpLnN0eWxlKCJkaXNwbGF5Iiwibm9uZSIpLHRoaXMudXBkYXRlKCl9dXBkYXRlVmlld3BvaW50KCl7d3UodGhpcy52aWV3cG9pbnQpLmF0dHIoIngiLHRoaXMudmlld3BvaW50Q29vcmQueCkuYXR0cigieSIsdGhpcy52aWV3cG9pbnRDb29yZC55KTtsZXQgdD0tdGhpcy52aWV3cG9pbnRDb29yZC54KnRoaXMuc2NhbGVNYWluL3RoaXMuc2NhbGVNaW5pbWFwLGU9LXRoaXMudmlld3BvaW50Q29vcmQueSp0aGlzLnNjYWxlTWFpbi90aGlzLnNjYWxlTWluaW1hcDt3dSh0aGlzLnN2ZykuY2FsbCh0aGlzLm1haW5ab29tLnRyYW5zZm9ybSxpTi50cmFuc2xhdGUodCxlKS5zY2FsZSh0aGlzLnNjYWxlTWFpbikpfWdldEltYWdlQmxvYigpe3JldHVybiBuZXcgUHJvbWlzZSgodD0+e3RoaXMuZG93bmxvYWRDYW52YXMudG9CbG9iKChlPT57dChlKX0pLCJpbWFnZS9wbmciKX0pKX11cGRhdGUoKXtsZXQgdD1udWxsO3RyeXtpZih0PXRoaXMuem9vbUcuZ2V0QkJveCgpLDA9PT10LndpZHRoKXJldHVybn1jYXRjaCh0KXtyZXR1cm59bGV0IGU9d3UodGhpcy5zdmcpLG49IiI7Y29uc3QgaT10aGlzLnN2ZyxyPShpLmdldFJvb3ROb2RlP2kuZ2V0Um9vdE5vZGUoKTp0aGlzLnN2Zy5wYXJlbnROb2RlKS5zdHlsZVNoZWV0cztmb3IobGV0IHQ9MDt0PHIubGVuZ3RoO3QrKyl0cnl7bGV0IGU9clt0XS5jc3NSdWxlc3x8clt0XS5ydWxlcztpZihudWxsPT1lKWNvbnRpbnVlO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKW4rPWVbdF0uY3NzVGV4dC5yZXBsYWNlKC8gP3RmLVtcdy1dKyA/L2csIiIpKyJcbiJ9Y2F0Y2godCl7aWYoIlNlY3VyaXR5RXJyb3IiIT09dC5uYW1lKXRocm93IHR9bGV0IG89ZS5hcHBlbmQoInN0eWxlIik7by50ZXh0KG4pO2xldCBhPXd1KHRoaXMuem9vbUcpLHM9YS5hdHRyKCJ0cmFuc2Zvcm0iKTthLmF0dHIoInRyYW5zZm9ybSIsbnVsbCksdC5oZWlnaHQrPXQueSx0LndpZHRoKz10LngsdC5oZWlnaHQrPTIqdGhpcy5sYWJlbFBhZGRpbmcsdC53aWR0aCs9Mip0aGlzLmxhYmVsUGFkZGluZyxlLmF0dHIoIndpZHRoIix0LndpZHRoKS5hdHRyKCJoZWlnaHQiLHQuaGVpZ2h0KSx0aGlzLnNjYWxlTWluaW1hcD10aGlzLm1heFdhbmRIL01hdGgubWF4KHQud2lkdGgsdC5oZWlnaHQpLHRoaXMubWluaW1hcFNpemU9e3dpZHRoOnQud2lkdGgqdGhpcy5zY2FsZU1pbmltYXAsaGVpZ2h0OnQuaGVpZ2h0KnRoaXMuc2NhbGVNaW5pbWFwfSx3dSh0aGlzLm1pbmltYXBTdmcpLmF0dHIodGhpcy5taW5pbWFwU2l6ZSksd3UodGhpcy5jYW52YXNCdWZmZXIpLmF0dHIodGhpcy5taW5pbWFwU2l6ZSk7Y29uc3QgbD13dSh0aGlzLmRvd25sb2FkQ2FudmFzKTtsLnN0eWxlKCJ3aWR0aCIsdC53aWR0aCksbC5zdHlsZSgiaGVpZ2h0Iix0LmhlaWdodCksbC5hdHRyKCJ3aWR0aCIsMyp0LndpZHRoKSxsLmF0dHIoImhlaWdodCIsMyp0LmhlaWdodCksbnVsbCE9dGhpcy50cmFuc2xhdGUmJm51bGwhPXRoaXMuem9vbSYmcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgoKT0+dGhpcy56b29tKCkpKTtsZXQgYz0obmV3IFhNTFNlcmlhbGl6ZXIpLnNlcmlhbGl6ZVRvU3RyaW5nKHRoaXMuc3ZnKTtvLnJlbW92ZSgpLGUuYXR0cigid2lkdGgiLG51bGwpLmF0dHIoImhlaWdodCIsbnVsbCksYS5hdHRyKCJ0cmFuc2Zvcm0iLHMpO2xldCB1PW5ldyBJbWFnZTt1Lm9ubG9hZD0oKT0+e2xldCB0PXRoaXMuY2FudmFzQnVmZmVyLmdldENvbnRleHQoIjJkIik7dC5jbGVhclJlY3QoMCwwLHRoaXMuY2FudmFzQnVmZmVyLndpZHRoLHRoaXMuY2FudmFzQnVmZmVyLmhlaWdodCksdC5kcmF3SW1hZ2UodSwwLDAsdGhpcy5taW5pbWFwU2l6ZS53aWR0aCx0aGlzLm1pbmltYXBTaXplLmhlaWdodCkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgoKT0+e3d1KHRoaXMuY2FudmFzQnVmZmVyKS5zdHlsZSgiZGlzcGxheSIsbnVsbCksd3UodGhpcy5jYW52YXMpLnN0eWxlKCJkaXNwbGF5Iiwibm9uZSIpLFt0aGlzLmNhbnZhcyx0aGlzLmNhbnZhc0J1ZmZlcl09W3RoaXMuY2FudmFzQnVmZmVyLHRoaXMuY2FudmFzXX0pKTtsZXQgZT10aGlzLmRvd25sb2FkQ2FudmFzLmdldENvbnRleHQoIjJkIik7ZS5jbGVhclJlY3QoMCwwLHRoaXMuZG93bmxvYWRDYW52YXMud2lkdGgsdGhpcy5kb3dubG9hZENhbnZhcy5oZWlnaHQpLGUuZHJhd0ltYWdlKHUsMCwwLHRoaXMuZG93bmxvYWRDYW52YXMud2lkdGgsdGhpcy5kb3dubG9hZENhbnZhcy5oZWlnaHQpfSx1Lm9uZXJyb3I9KCk9PntsZXQgdD1uZXcgQmxvYihbY10se3R5cGU6ImltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCJ9KTt1LnNyYz1VUkwuY3JlYXRlT2JqZWN0VVJMKHQpfSx1LnNyYz0iZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsIitlbmNvZGVVUklDb21wb25lbnQoYyl9em9vbSh0KXtpZihudWxsPT10aGlzLnNjYWxlTWluaW1hcClyZXR1cm47dCYmKHRoaXMudHJhbnNsYXRlPVt0LngsdC55XSx0aGlzLnNjYWxlTWFpbj10LmspO2xldCBlPXRoaXMuc3ZnLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49d3UodGhpcy52aWV3cG9pbnQpO3RoaXMudmlld3BvaW50Q29vcmQueD0tdGhpcy50cmFuc2xhdGVbMF0qdGhpcy5zY2FsZU1pbmltYXAvdGhpcy5zY2FsZU1haW4sdGhpcy52aWV3cG9pbnRDb29yZC55PS10aGlzLnRyYW5zbGF0ZVsxXSp0aGlzLnNjYWxlTWluaW1hcC90aGlzLnNjYWxlTWFpbjtsZXQgaT1lLndpZHRoKnRoaXMuc2NhbGVNaW5pbWFwL3RoaXMuc2NhbGVNYWluLHI9ZS5oZWlnaHQqdGhpcy5zY2FsZU1pbmltYXAvdGhpcy5zY2FsZU1haW47bi5hdHRyKCJ4Iix0aGlzLnZpZXdwb2ludENvb3JkLngpLmF0dHIoInkiLHRoaXMudmlld3BvaW50Q29vcmQueSkuYXR0cigid2lkdGgiLGkpLmF0dHIoImhlaWdodCIscik7bGV0IG89dGhpcy5taW5pbWFwU2l6ZS53aWR0aCxhPXRoaXMubWluaW1hcFNpemUuaGVpZ2h0LHM9dGhpcy52aWV3cG9pbnRDb29yZC54LGw9dGhpcy52aWV3cG9pbnRDb29yZC55OyhNYXRoLm1pbihNYXRoLm1heCgwLHMraSksbyktTWF0aC5taW4oTWF0aC5tYXgoMCxzKSxvKSkqKE1hdGgubWluKE1hdGgubWF4KDAsbCtyKSxhKS1NYXRoLm1pbihNYXRoLm1heCgwLGwpLGEpKS8obyphKTwuOD90aGlzLm1pbmltYXAuY2xhc3NMaXN0LnJlbW92ZSgiaGlkZGVuIik6dGhpcy5taW5pbWFwLmNsYXNzTGlzdC5hZGQoImhpZGRlbiIpfX1sZXQgVEx0PWNsYXNzIGV4dGVuZHMgeWV7aW5pdCh0LGUsbixpLHIpe3JldHVybiBuZXcgRUx0KHQsZSxuLHRoaXMsaSxyKX19O1RMdC50ZW1wbGF0ZT1fZWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4zcyBsaW5lYXI7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgICAgIH0KCiAgICAgIDpob3N0KC5oaWRkZW4pIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICBjYW52YXMgewogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7CiAgICAgIH0KCiAgICAgIHJlY3QgewogICAgICAgIGZpbGw6IHdoaXRlOwogICAgICAgIHN0cm9rZTogIzExMTExMTsKICAgICAgICBzdHJva2Utd2lkdGg6IDFweDsKICAgICAgICBmaWxsLW9wYWNpdHk6IDA7CiAgICAgICAgZmlsdGVyOiB1cmwoI21pbmltYXBEcm9wU2hhZG93KTsKICAgICAgICBjdXJzb3I6IG1vdmU7CiAgICAgIH0KCiAgICAgIHN2ZyB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPHN2Zz4KICAgICAgPGRlZnM+CiAgICAgICAgPGZpbHRlcgogICAgICAgICAgaWQ9Im1pbmltYXBEcm9wU2hhZG93IgogICAgICAgICAgeD0iLTIwJSIKICAgICAgICAgIHk9Ii0yMCUiCiAgICAgICAgICB3aWR0aD0iMTUwJSIKICAgICAgICAgIGhlaWdodD0iMTUwJSIKICAgICAgICA+CiAgICAgICAgICA8ZmVPZmZzZXQgcmVzdWx0PSJvZmZPdXQiIGluPSJTb3VyY2VHcmFwaGljIiBkeD0iMSIgZHk9IjEiPjwvZmVPZmZzZXQ+CiAgICAgICAgICA8ZmVDb2xvck1hdHJpeAogICAgICAgICAgICByZXN1bHQ9Im1hdHJpeE91dCIKICAgICAgICAgICAgaW49Im9mZk91dCIKICAgICAgICAgICAgdHlwZT0ibWF0cml4IgogICAgICAgICAgICB2YWx1ZXM9IjAuMSAwIDAgMCAwIDAgMC4xIDAgMCAwIDAgMCAwLjEgMCAwIDAgMCAwIDAuNSAwIgogICAgICAgICAgPjwvZmVDb2xvck1hdHJpeD4KICAgICAgICAgIDxmZUdhdXNzaWFuQmx1cgogICAgICAgICAgICByZXN1bHQ9ImJsdXJPdXQiCiAgICAgICAgICAgIGluPSJtYXRyaXhPdXQiCiAgICAgICAgICAgIHN0ZERldmlhdGlvbj0iMiIKICAgICAgICAgID48L2ZlR2F1c3NpYW5CbHVyPgogICAgICAgICAgPGZlQmxlbmQgaW49IlNvdXJjZUdyYXBoaWMiIGluMj0iYmx1ck91dCIgbW9kZT0ibm9ybWFsIj48L2ZlQmxlbmQ+CiAgICAgICAgPC9maWx0ZXI+CiAgICAgIDwvZGVmcz4KICAgICAgPHJlY3Q+PC9yZWN0PgogICAgPC9zdmc+CiAgICA8Y2FudmFzIGNsYXNzPSJmaXJzdCI+PC9jYW52YXM+CiAgICA8IS0tIEFkZGl0aW9uYWwgY2FudmFzIHRvIHVzZSBhcyBidWZmZXIgdG8gYXZvaWQgZmxpY2tlcmluZyBiZXR3ZWVuIHVwZGF0ZXMgLS0+CiAgICA8Y2FudmFzIGNsYXNzPSJzZWNvbmQiPjwvY2FudmFzPgogICAgPGNhbnZhcyBjbGFzcz0iZG93bmxvYWQiPjwvY2FudmFzPgogIGAsVEx0PXQoW2koInRmLWdyYXBoLW1pbmltYXAiKV0sVEx0KTtjb25zdCBDTHQ9X2VgCiAgPHN0eWxlPgogICAgOmhvc3QoLmRhcmstbW9kZSkgewogICAgICBmaWx0ZXI6IGludmVydCgxKTsKICAgIH0KCiAgICA6aG9zdCB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZvbnQtc2l6ZTogMjBweDsKICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB3aWR0aDogMTAwJTsKICAgIH0KCiAgICAjc3ZnIHsKICAgICAgZmxleDogMTsKICAgICAgZm9udC1mYW1pbHk6IFJvYm90bywgc2Fucy1zZXJpZjsKICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB3aWR0aDogMTAwJTsKICAgIH0KCiAgICAjaGlkZGVuIHsKICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICB0b3A6IDBweDsKICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgfQoKICAgIHRleHQgewogICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgIH0KCiAgICAvKiAtLS0gTm9kZSBhbmQgYW5ub3RhdGlvbi1ub2RlIGZvciBNZXRhbm9kZSAtLS0gKi8KCiAgICAubWV0YSA+IC5ub2Rlc2hhcGUgPiByZWN0LAogICAgLm1ldGEgPiAuYW5ub3RhdGlvbi1ub2RlID4gcmVjdCB7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgZmlsbDogaHNsKDAsIDAlLCA3MCUpOwogICAgfQogICAgLm5vZGUubWV0YS5oaWdobGlnaHRlZCA+IC5ub2Rlc2hhcGUgPiByZWN0LAogICAgLm5vZGUubWV0YS5oaWdobGlnaHRlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiByZWN0IHsKICAgICAgc3Ryb2tlLXdpZHRoOiAyOwogICAgfQogICAgLmFubm90YXRpb24ubWV0YS5oaWdobGlnaHRlZCA+IC5ub2Rlc2hhcGUgPiByZWN0LAogICAgLmFubm90YXRpb24ubWV0YS5oaWdobGlnaHRlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiByZWN0IHsKICAgICAgc3Ryb2tlLXdpZHRoOiAxOwogICAgfQogICAgLm1ldGEuc2VsZWN0ZWQgPiAubm9kZXNoYXBlID4gcmVjdCwKICAgIC5tZXRhLnNlbGVjdGVkID4gLmFubm90YXRpb24tbm9kZSA+IHJlY3QgewogICAgICBzdHJva2U6IHJlZDsKICAgICAgc3Ryb2tlLXdpZHRoOiAyOwogICAgfQogICAgLm5vZGUubWV0YS5zZWxlY3RlZC5leHBhbmRlZCA+IC5ub2Rlc2hhcGUgPiByZWN0LAogICAgLm5vZGUubWV0YS5zZWxlY3RlZC5leHBhbmRlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiByZWN0IHsKICAgICAgc3Ryb2tlOiByZWQ7CiAgICAgIHN0cm9rZS13aWR0aDogMzsKICAgIH0KICAgIC5hbm5vdGF0aW9uLm1ldGEuc2VsZWN0ZWQgPiAubm9kZXNoYXBlID4gcmVjdCwKICAgIC5hbm5vdGF0aW9uLm1ldGEuc2VsZWN0ZWQgPiAuYW5ub3RhdGlvbi1ub2RlID4gcmVjdCB7CiAgICAgIHN0cm9rZTogcmVkOwogICAgICBzdHJva2Utd2lkdGg6IDI7CiAgICB9CiAgICAubm9kZS5tZXRhLnNlbGVjdGVkLmV4cGFuZGVkLmhpZ2hsaWdodGVkID4gLm5vZGVzaGFwZSA+IHJlY3QsCiAgICAubm9kZS5tZXRhLnNlbGVjdGVkLmV4cGFuZGVkLmhpZ2hsaWdodGVkID4gLmFubm90YXRpb24tbm9kZSA+IHJlY3QgewogICAgICBzdHJva2U6IHJlZDsKICAgICAgc3Ryb2tlLXdpZHRoOiA0OwogICAgfQoKICAgIC5mYWRlZCwKICAgIC5mYWRlZCByZWN0LAogICAgLmZhZGVkIGVsbGlwc2UsCiAgICAuZmFkZWQgcGF0aCwKICAgIC5mYWRlZCB1c2UsCiAgICAjcmVjdEhhdGNoIGxpbmUsCiAgICAjZWxsaXBzZUhhdGNoIGxpbmUgewogICAgICBjb2xvcjogI2UwZDRiMyAhaW1wb3J0YW50OwogICAgICBmaWxsOiB3aGl0ZTsKICAgICAgc3Ryb2tlOiAjZTBkNGIzICFpbXBvcnRhbnQ7CiAgICB9CgogICAgLmZhZGVkIHBhdGggewogICAgICBzdHJva2Utd2lkdGg6IDFweCAhaW1wb3J0YW50OwogICAgfQoKICAgIC5mYWRlZCByZWN0IHsKICAgICAgZmlsbDogdXJsKCNyZWN0SGF0Y2gpICFpbXBvcnRhbnQ7CiAgICB9CgogICAgLmZhZGVkIGVsbGlwc2UsCiAgICAuZmFkZWQgdXNlIHsKICAgICAgZmlsbDogdXJsKCNlbGxpcHNlSGF0Y2gpICFpbXBvcnRhbnQ7CiAgICB9CgogICAgLmZhZGVkIHRleHQgewogICAgICBvcGFjaXR5OiAwOwogICAgfQoKICAgIC8qIFJ1bGVzIHVzZWQgZm9yIGlucHV0LXRyYWNpbmcuICovCiAgICAuaW5wdXQtaGlnaGxpZ2h0ID4gKiA+IHJlY3QsCiAgICAuaW5wdXQtaGlnaGxpZ2h0ID4gKiA+IGVsbGlwc2UsCiAgICAuaW5wdXQtaGlnaGxpZ2h0ID4gKiA+IHVzZSB7CiAgICAgIGZpbGw6IHdoaXRlOwogICAgICBzdHJva2U6ICNmZjk4MDAgIWltcG9ydGFudDsKICAgIH0KCiAgICAvKiAgLSBGYWRlZCBub24taW5wdXQgc3R5bGluZyAqLwogICAgLm5vbi1pbnB1dCA+ICogPiByZWN0LAoubm9uLWlucHV0ID4gKiA+IGVsbGlwc2UsCi5ub24taW5wdXQgPiAqID4gdXNlLAovKiBGb3IgQ29uc3Qgbm9kZXMuICovCi5ub24taW5wdXQgPiAqID4gLmNvbnN0YW50Om5vdChbY2xhc3MqPSJpbnB1dC1oaWdobGlnaHQiXSkgPgogIC5hbm5vdGF0aW9uLW5vZGUgPiBlbGxpcHNlLAovKiBGb3Igc3R5bGluZyBvZiBhbm5vdGF0aW9uIG5vZGVzIG9mIG5vbi1pbnB1dCBub2Rlcy4gKi8KLm5vbi1pbnB1dCA+IGcgPiAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLW5vZGUgPiByZWN0IHsKICAgICAgc3Ryb2tlOiAjZTBkNGIzICFpbXBvcnRhbnQ7CiAgICAgIHN0cm9rZS13aWR0aDogaW5oZXJpdDsKICAgICAgc3Ryb2tlLWRhc2hhcnJheTogaW5oZXJpdDsKICAgIH0KCiAgICAubm9uLWlucHV0IHBhdGggewogICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICB9CgogICAgLm5vbi1pbnB1dCA+IC5ub2Rlc2hhcGUgPiByZWN0LAoubm9uLWlucHV0ID4gLmFubm90YXRpb24tbm9kZSA+IHJlY3QsCi8qIEZvciBzdHlsaW5nIG9mIGFubm90YXRpb24gbm9kZXMgb2Ygbm9uLWlucHV0IG5vZGVzLiAqLwoubm9uLWlucHV0ID4gZyA+IC5hbm5vdGF0aW9uID4gLmFubm90YXRpb24tbm9kZSA+IHJlY3QgewogICAgICBmaWxsOiB1cmwoI3JlY3RIYXRjaCkgIWltcG9ydGFudDsKICAgIH0KCiAgICAubm9uLWlucHV0IGVsbGlwc2UsCiAgICAubm9uLWlucHV0IHVzZSB7CiAgICAgIGZpbGw6IHVybCgjZWxsaXBzZUhhdGNoKSAhaW1wb3J0YW50OwogICAgfQoKICAgIC5ub24taW5wdXQgPiB0ZXh0IHsKICAgICAgb3BhY2l0eTogMDsKICAgIH0KCiAgICAubm9uLWlucHV0IC5hbm5vdGF0aW9uID4gLmFubm90YXRpb24tZWRnZSB7CiAgICAgIG1hcmtlci1lbmQ6IHVybCgjYW5ub3RhdGlvbi1hcnJvd2hlYWQtZmFkZWQpOwogICAgfQoKICAgIC5ub24taW5wdXQgLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1lZGdlLnJlZmxpbmUgewogICAgICBtYXJrZXItc3RhcnQ6IHVybCgjcmVmLWFubm90YXRpb24tYXJyb3doZWFkLWZhZGVkKTsKICAgIH0KCiAgICAvKiBJbnB1dCBlZGdlcy4gKi8KICAgIC5pbnB1dC1lZGdlLWhpZ2hsaWdodCA+IHRleHQgewogICAgICBmaWxsOiBibGFjayAhaW1wb3J0YW50OwogICAgfQogICAgLmlucHV0LWhpZ2hsaWdodCA+IC5pbi1hbm5vdGF0aW9ucyA+IC5hbm5vdGF0aW9uID4gLmFubm90YXRpb24tZWRnZSwKICAgIC5pbnB1dC1oaWdobGlnaHQtc2VsZWN0ZWQKICAgICAgPiAuaW4tYW5ub3RhdGlvbnMKICAgICAgPiAuYW5ub3RhdGlvbgogICAgICA+IC5hbm5vdGF0aW9uLWVkZ2UgewogICAgICBzdHJva2U6ICM5OTkgIWltcG9ydGFudDsKICAgIH0KCiAgICAvKiBOb24taW5wdXQgZWRnZXMuICovCiAgICAubm9uLWlucHV0LWVkZ2UtaGlnaGxpZ2h0LAoubm9uLWlucHV0ID4gZyA+IC5hbm5vdGF0aW9uID4gcGF0aCwKLyogQW5ub3RhdGlvbiBzdHlsZXMgKGxhYmVsIGFuZCBlZGdlcyByZXNwZWN0aXZlbHkpLiAqLwoubm9uLWlucHV0ID4gZyA+Ci5hbm5vdGF0aW9uOm5vdCguaW5wdXQtaGlnaGxpZ2h0KTpub3QoLmlucHV0LWhpZ2hsaWdodC1zZWxlY3RlZCkgPgouYW5ub3RhdGlvbi1sYWJlbAovKi5hbm5vdGF0aW9uLWVkZ2UqLyB7CiAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgIH0KCiAgICAvKiAtLS0gT3AgTm9kZSAtLS0gKi8KCiAgICAub3AgPiAubm9kZXNoYXBlID4gLm5vZGVjb2xvcnRhcmdldCwKICAgIC5vcCA+IC5hbm5vdGF0aW9uLW5vZGUgPiAubm9kZWNvbG9ydGFyZ2V0IHsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICBmaWxsOiAjZmZmOwogICAgICBzdHJva2U6ICNjY2M7CiAgICB9CgogICAgLm9wLnNlbGVjdGVkID4gLm5vZGVzaGFwZSA+IC5ub2RlY29sb3J0YXJnZXQsCiAgICAub3Auc2VsZWN0ZWQgPiAuYW5ub3RhdGlvbi1ub2RlID4gLm5vZGVjb2xvcnRhcmdldCB7CiAgICAgIHN0cm9rZTogcmVkOwogICAgICBzdHJva2Utd2lkdGg6IDI7CiAgICB9CgogICAgLm9wLmhpZ2hsaWdodGVkID4gLm5vZGVzaGFwZSA+IC5ub2RlY29sb3J0YXJnZXQsCiAgICAub3AuaGlnaGxpZ2h0ZWQgPiAuYW5ub3RhdGlvbi1ub2RlID4gLm5vZGVjb2xvcnRhcmdldCB7CiAgICAgIHN0cm9rZS13aWR0aDogMjsKICAgIH0KCiAgICAvKiAtLS0gU2VyaWVzIE5vZGUgLS0tICovCgogICAgLyogQnkgZGVmYXVsdCwgZG9uJ3Qgc2hvdyB0aGUgc2VyaWVzIGJhY2tncm91bmQgPHJlY3Q+LiAqLwogICAgLnNlcmllcyA+IC5ub2Rlc2hhcGUgPiByZWN0IHsKICAgICAgZmlsbDogaHNsKDAsIDAlLCA3MCUpOwogICAgICBmaWxsLW9wYWNpdHk6IDA7CiAgICAgIHN0cm9rZS1kYXNoYXJyYXk6IDUsIDU7CiAgICAgIHN0cm9rZS1vcGFjaXR5OiAwOwogICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB9CgogICAgLyogT25jZSBleHBhbmRlZCwgc2hvdyB0aGUgc2VyaWVzIGJhY2tncm91bmQgPHJlY3Q+IGFuZCBoaWRlIHRoZSA8dXNlPi4gKi8KICAgIC5zZXJpZXMuZXhwYW5kZWQgPiAubm9kZXNoYXBlID4gcmVjdCB7CiAgICAgIGZpbGwtb3BhY2l0eTogMC4xNTsKICAgICAgc3Ryb2tlOiBoc2woMCwgMCUsIDcwJSk7CiAgICAgIHN0cm9rZS1vcGFjaXR5OiAxOwogICAgfQogICAgLnNlcmllcy5leHBhbmRlZCA+IC5ub2Rlc2hhcGUgPiB1c2UgewogICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICB9CgogICAgLyoqCiAqIFRPRE86IFNpbXBsaWZ5IHRoaXMgYnkgYXBwbHlpbmcgYSBzdGFibGUgY2xhc3MgbmFtZSB0byBhbGwgPGc+CiAqIGVsZW1lbnRzIHRoYXQgY3VycmVudGx5IGhhdmUgZWl0aGVyIHRoZSBub2Rlc2hhcGUgb3IgYW5ub3RhdGlvbi1ub2RlIGNsYXNzZXMuCiAqLwogICAgLnNlcmllcyA+IC5ub2Rlc2hhcGUgPiB1c2UsCiAgICAuc2VyaWVzID4gLmFubm90YXRpb24tbm9kZSA+IHVzZSB7CiAgICAgIHN0cm9rZTogI2NjYzsKICAgIH0KICAgIC5zZXJpZXMuaGlnaGxpZ2h0ZWQgPiAubm9kZXNoYXBlID4gdXNlLAogICAgLnNlcmllcy5oaWdobGlnaHRlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiB1c2UgewogICAgICBzdHJva2Utd2lkdGg6IDI7CiAgICB9CiAgICAuc2VyaWVzLnNlbGVjdGVkID4gLm5vZGVzaGFwZSA+IHVzZSwKICAgIC5zZXJpZXMuc2VsZWN0ZWQgPiAuYW5ub3RhdGlvbi1ub2RlID4gdXNlIHsKICAgICAgc3Ryb2tlOiByZWQ7CiAgICAgIHN0cm9rZS13aWR0aDogMjsKICAgIH0KCiAgICAuc2VyaWVzLnNlbGVjdGVkID4gLm5vZGVzaGFwZSA+IHJlY3QgewogICAgICBzdHJva2U6IHJlZDsKICAgICAgc3Ryb2tlLXdpZHRoOiAyOwogICAgfQoKICAgIC5hbm5vdGF0aW9uLnNlcmllcy5zZWxlY3RlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiB1c2UgewogICAgICBzdHJva2U6IHJlZDsKICAgICAgc3Ryb2tlLXdpZHRoOiAyOwogICAgfQoKICAgIC8qIC0tLSBCcmlkZ2UgTm9kZSAtLS0gKi8KICAgIC5icmlkZ2UgPiAubm9kZXNoYXBlID4gcmVjdCB7CiAgICAgIHN0cm9rZTogI2YwZjsKICAgICAgb3BhY2l0eTogMC4yOwogICAgICBkaXNwbGF5OiBub25lOwogICAgfQoKICAgIC8qIC0tLSBTdHJ1Y3R1cmFsIEVsZW1lbnRzIC0tLSAqLwogICAgLmVkZ2UgPiBwYXRoLmVkZ2VsaW5lLnN0cnVjdHVyYWwgewogICAgICBzdHJva2U6ICNmMGY7CiAgICAgIG9wYWNpdHk6IDAuMjsKICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KCiAgICAvKiBSZWZlcmVuY2UgRWRnZSAqLwogICAgLmVkZ2UgPiBwYXRoLmVkZ2VsaW5lLnJlZmVyZW5jZWVkZ2UgewogICAgICBzdHJva2U6ICNmZmI3NGQ7CiAgICAgIG9wYWNpdHk6IDE7CiAgICB9CgogICAgLyogLS0tIFNlcmllcyBOb2RlcyAtLS0gKi8KCiAgICAvKiBIaWRlIHRoZSByZWN0IGZvciBhIHNlcmllcycgYW5ub3RhdGlvbi4gKi8KICAgIC5zZXJpZXMgPiAuYW5ub3RhdGlvbi1ub2RlID4gcmVjdCB7CiAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CgogICAgLyogLS0tIE5vZGUgbGFiZWwgLS0tICovCgogICAgLm5vZGUgewogICAgICAvKiBQcm92aWRlIGEgaGludCB0byBicm93c2VycyB0byBhdm9pZCB1c2luZyB0aGVpciBzdGF0aWMgcmFzdGVyaXphdGlvbgogICAgICBhdCBpbml0aWFsIHNjYWxlLCB3aGljaCBsb29rcyB2ZXJ5IHBpeGVsYXRlZCBvbiBDaHJvbWl1bSB3aGVuIHpvb21lZCBpbi4KICAgICAgTm90ZSB0aGF0IHdlIGludGVudGlvbmFsbHkgZG8gKm5vdCogdXNlICd3aWxsLWNoYW5nZTogdHJhbnNmb3JtJyBhbmQKICAgICAgJ3RyYW5zbGF0ZVooMCkgaGVyZSwgd2hpY2ggaW50cm9kdWNlIGJsdXJyaW5lc3Mgb24gRmlyZWZveC4KICAgICAgU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2lzc3Vlcy80NzQ0ICovCiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWigxcHgpOwogICAgfQoKICAgIC5ub2RlID4gdGV4dC5ub2RlbGFiZWwgewogICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIGZpbGw6ICM0NDQ7CiAgICB9CgogICAgLm1ldGEuZXhwYW5kZWQgPiB0ZXh0Lm5vZGVsYWJlbCB7CiAgICAgIGZvbnQtc2l6ZTogOXB4OwogICAgfQoKICAgIC5zZXJpZXMgPiB0ZXh0Lm5vZGVsYWJlbCB7CiAgICAgIGZvbnQtc2l6ZTogOHB4OwogICAgfQoKICAgIC5vcCA+IHRleHQubm9kZWxhYmVsIHsKICAgICAgZm9udC1zaXplOiA2cHg7CiAgICB9CgogICAgLmJyaWRnZSA+IHRleHQubm9kZWxhYmVsIHsKICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KCiAgICAubm9kZS5tZXRhLmV4cGFuZGVkID4gdGV4dC5ub2RlbGFiZWwgewogICAgICBjdXJzb3I6IG5vcm1hbDsKICAgIH0KCiAgICAuYW5ub3RhdGlvbi5tZXRhLmhpZ2hsaWdodGVkID4gdGV4dC5hbm5vdGF0aW9uLWxhYmVsIHsKICAgICAgZmlsbDogIzUwYTNmNzsKICAgIH0KCiAgICAuYW5ub3RhdGlvbi5tZXRhLnNlbGVjdGVkID4gdGV4dC5hbm5vdGF0aW9uLWxhYmVsIHsKICAgICAgZmlsbDogIzQyODVmNDsKICAgIH0KCiAgICAvKiAtLS0gQW5ub3RhdGlvbiAtLS0gKi8KCiAgICAvKiBvbmx5IGFwcGxpZWQgZm9yIGFubm90YXRpb25zIHRoYXQgYXJlIG5vdCBzdW1tYXJ5IG9yIGNvbnN0YW50LgooLnN1bW1hcnksIC5jb25zdGFudCBnZXRzIG92ZXJyaWRkZW4gYmVsb3cpICovCiAgICAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLW5vZGUgPiAqIHsKICAgICAgc3Ryb2tlLXdpZHRoOiAwLjU7CiAgICAgIHN0cm9rZS1kYXNoYXJyYXk6IDEsIDE7CiAgICB9CgogICAgLmFubm90YXRpb24uc3VtbWFyeSA+IC5hbm5vdGF0aW9uLW5vZGUgPiAqLAogICAgLmFubm90YXRpb24uY29uc3RhbnQgPiAuYW5ub3RhdGlvbi1ub2RlID4gKiB7CiAgICAgIHN0cm9rZS13aWR0aDogMTsKICAgICAgc3Ryb2tlLWRhc2hhcnJheTogbm9uZTsKICAgIH0KCiAgICAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWVkZ2UgewogICAgICBmaWxsOiBub25lOwogICAgICBzdHJva2U6ICNhYWE7CiAgICAgIHN0cm9rZS13aWR0aDogMC41OwogICAgICBtYXJrZXItZW5kOiB1cmwoI2Fubm90YXRpb24tYXJyb3doZWFkKTsKICAgIH0KCiAgICAuZmFkZWQgLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1lZGdlIHsKICAgICAgbWFya2VyLWVuZDogdXJsKCNhbm5vdGF0aW9uLWFycm93aGVhZC1mYWRlZCk7CiAgICB9CgogICAgLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1lZGdlLnJlZmxpbmUgewogICAgICBtYXJrZXItc3RhcnQ6IHVybCgjcmVmLWFubm90YXRpb24tYXJyb3doZWFkKTsKICAgIH0KCiAgICAuZmFkZWQgLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1lZGdlLnJlZmxpbmUgewogICAgICBtYXJrZXItc3RhcnQ6IHVybCgjcmVmLWFubm90YXRpb24tYXJyb3doZWFkLWZhZGVkKTsKICAgIH0KCiAgICAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWNvbnRyb2wtZWRnZSB7CiAgICAgIHN0cm9rZS1kYXNoYXJyYXk6IDEsIDE7CiAgICB9CgogICAgI2Fubm90YXRpb24tYXJyb3doZWFkIHsKICAgICAgZmlsbDogI2FhYTsKICAgIH0KCiAgICAjYW5ub3RhdGlvbi1hcnJvd2hlYWQtZmFkZWQgewogICAgICBmaWxsOiAjZTBkNGIzOwogICAgfQoKICAgICNyZWYtYW5ub3RhdGlvbi1hcnJvd2hlYWQgewogICAgICBmaWxsOiAjYWFhOwogICAgfQoKICAgICNyZWYtYW5ub3RhdGlvbi1hcnJvd2hlYWQtZmFkZWQgewogICAgICBmaWxsOiAjZTBkNGIzOwogICAgfQoKICAgIC5hbm5vdGF0aW9uID4gLmFubm90YXRpb24tbGFiZWwgewogICAgICBmb250LXNpemU6IDVweDsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgfQogICAgLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1sYWJlbC5hbm5vdGF0aW9uLWVsbGlwc2lzIHsKICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgfQoKICAgIC8qIEhpZGUgYW5ub3RhdGlvbnMgb24gZXhwYW5kZWQgbWV0YSBub2RlcyBzaW5jZSB0aGV5J3JlIHJlZHVuZGFudC4gKi8KICAgIC5leHBhbmRlZCA+IC5pbi1hbm5vdGF0aW9ucywKICAgIC5leHBhbmRlZCA+IC5vdXQtYW5ub3RhdGlvbnMgewogICAgICBkaXNwbGF5OiBub25lOwogICAgfQoKICAgIC8qIC0tLSBBbm5vdGF0aW9uOiBDb25zdGFudCAtLS0gKi8KCiAgICAuY29uc3RhbnQgPiAuYW5ub3RhdGlvbi1ub2RlID4gZWxsaXBzZSB7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgZmlsbDogd2hpdGU7CiAgICAgIHN0cm9rZTogIzg0ODQ4NDsKICAgIH0KCiAgICAuY29uc3RhbnQuc2VsZWN0ZWQgPiAuYW5ub3RhdGlvbi1ub2RlID4gZWxsaXBzZSB7CiAgICAgIGZpbGw6IHdoaXRlOwogICAgICBzdHJva2U6IHJlZDsKICAgIH0KCiAgICAuY29uc3RhbnQuaGlnaGxpZ2h0ZWQgPiAuYW5ub3RhdGlvbi1ub2RlID4gZWxsaXBzZSB7CiAgICAgIHN0cm9rZS13aWR0aDogMS41OwogICAgfQoKICAgIC8qIC0tLSBBbm5vdGF0aW9uOiBTdW1tYXJ5IC0tLSAqLwoKICAgIC5zdW1tYXJ5ID4gLmFubm90YXRpb24tbm9kZSA+IGVsbGlwc2UgewogICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIGZpbGw6ICNkYjQ0Mzc7CiAgICAgIHN0cm9rZTogI2RiNDQzNzsKICAgIH0KCiAgICAuc3VtbWFyeS5zZWxlY3RlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiBlbGxpcHNlIHsKICAgICAgZmlsbDogI2E1MjcxNDsKICAgICAgc3Ryb2tlOiAjYTUyNzE0OwogICAgfQoKICAgIC5zdW1tYXJ5LmhpZ2hsaWdodGVkID4gLmFubm90YXRpb24tbm9kZSA+IGVsbGlwc2UgewogICAgICBzdHJva2Utd2lkdGg6IDEuNTsKICAgIH0KCiAgICAvKiAtLS0gRWRnZSAtLS0gKi8KCiAgICAuZWRnZSA+IHBhdGguZWRnZWxpbmUgewogICAgICBmaWxsOiBub25lOwogICAgICBzdHJva2U6ICNiYmI7CiAgICAgIHN0cm9rZS1saW5lY2FwOiByb3VuZDsKICAgICAgc3Ryb2tlLXdpZHRoOiAwLjc1OwogICAgfQoKICAgIC5lZGdlIC5zZWxlY3RhYmxlZWRnZSB7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIH0KCiAgICAuc2VsZWN0ZWRlZGdlID4gcGF0aC5lZGdlbGluZSB7CiAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgc3Ryb2tlOiAjZjAwOwogICAgfQoKICAgIC5lZGdlLnNlbGVjdGVkZWRnZSB0ZXh0IHsKICAgICAgZmlsbDogIzAwMDsKICAgIH0KCiAgICAvKiBMYWJlbHMgc2hvd2luZyB0ZW5zb3Igc2hhcGVzIG9uIGVkZ2VzICovCiAgICAuZWRnZSA+IHRleHQgewogICAgICBmb250LXNpemU6IDMuNXB4OwogICAgICBmaWxsOiAjNjY2OwogICAgfQoKICAgIC5kYXRhZmxvdy1hcnJvd2hlYWQgewogICAgICBmaWxsOiAjYmJiOwogICAgfQoKICAgIC5yZWZlcmVuY2UtYXJyb3doZWFkIHsKICAgICAgZmlsbDogI2ZmYjc0ZDsKICAgIH0KCiAgICAuc2VsZWN0ZWQtYXJyb3doZWFkIHsKICAgICAgZmlsbDogI2YwMDsKICAgIH0KCiAgICAuZWRnZSAuY29udHJvbC1kZXAgewogICAgICBzdHJva2UtZGFzaGFycmF5OiAyLCAyOwogICAgfQoKICAgIC8qIC0tLSBHcm91cCBub2RlIGV4cGFuZC9jb2xsYXBzZSBidXR0b24gLS0tICovCgogICAgLyogSGlkZXMgZXhwYW5kL2NvbGxhcHNlIGJ1dHRvbnMgd2hlbiBhIG5vZGUgaXNuJ3QgZXhwYW5kZWQgb3IgaGlnaGxpZ2h0ZWQuIFVzaW5nCiAgIGluY3JlZGlibHkgc21hbGwgb3BhY2l0eSBzbyB0aGF0IHRoZSBib3VuZGluZyBib3ggb2YgdGhlIDxnPiBwYXJlbnQgc3RpbGwgdGFrZXMKICAgdGhpcyBjb250YWluZXIgaW50byBhY2NvdW50IGV2ZW4gd2hlbiBpdCBpc24ndCB2aXNpYmxlICovCiAgICAubm9kZTpub3QoLmhpZ2hsaWdodGVkKTpub3QoLmV4cGFuZGVkKSA+IC5ub2Rlc2hhcGUgPiAuYnV0dG9uY29udGFpbmVyIHsKICAgICAgb3BhY2l0eTogMC4wMTsKICAgIH0KICAgIC5ub2RlLmhpZ2hsaWdodGVkID4gLm5vZGVzaGFwZSA+IC5idXR0b25jb250YWluZXIgewogICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB9CiAgICAuYnV0dG9uY2lyY2xlIHsKICAgICAgZmlsbDogI2U3ODExZDsKICAgIH0KICAgIC5idXR0b25jaXJjbGU6aG92ZXIgewogICAgICBmaWxsOiAjYjk2NzE3OwogICAgfQogICAgLmV4cGFuZGJ1dHRvbiwKICAgIC5jb2xsYXBzZWJ1dHRvbiB7CiAgICAgIHN0cm9rZTogd2hpdGU7CiAgICB9CiAgICAvKiBEbyBub3QgbGV0IHRoZSBwYXRoIGVsZW1lbnRzIGluIHRoZSBidXR0b24gdGFrZSBwb2ludGVyIGZvY3VzICovCiAgICAubm9kZSA+IC5ub2Rlc2hhcGUgPiAuYnV0dG9uY29udGFpbmVyID4gLmV4cGFuZGJ1dHRvbiwKICAgIC5ub2RlID4gLm5vZGVzaGFwZSA+IC5idXR0b25jb250YWluZXIgPiAuY29sbGFwc2VidXR0b24gewogICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIH0KICAgIC8qIE9ubHkgc2hvdyB0aGUgZXhwYW5kIGJ1dHRvbiB3aGVuIGEgbm9kZSBpcyBjb2xsYXBzZWQgYW5kIG9ubHkgc2hvdyB0aGUKICAgY29sbGFwc2UgYnV0dG9uIHdoZW4gYSBub2RlIGlzIGV4cGFuZGVkLiAqLwogICAgLm5vZGUuZXhwYW5kZWQgPiAubm9kZXNoYXBlID4gLmJ1dHRvbmNvbnRhaW5lciA+IC5leHBhbmRidXR0b24gewogICAgICBkaXNwbGF5OiBub25lOwogICAgfQogICAgLm5vZGU6bm90KC5leHBhbmRlZCkgPiAubm9kZXNoYXBlID4gLmJ1dHRvbmNvbnRhaW5lciA+IC5jb2xsYXBzZWJ1dHRvbiB7CiAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CgogICAgLmhlYWx0aC1waWxsLXN0YXRzIHsKICAgICAgZm9udC1zaXplOiA0cHg7CiAgICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgICB9CgogICAgLmhlYWx0aC1waWxsIHJlY3QgewogICAgICBmaWx0ZXI6IHVybCgjaGVhbHRoLXBpbGwtc2hhZG93KTsKICAgICAgcng6IDM7CiAgICAgIHJ5OiAzOwogICAgfQoKICAgIC50aXRsZUNvbnRhaW5lciB7CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgdG9wOiAyMHB4OwogICAgfQoKICAgIC50aXRsZSwKICAgIC5hdXhUaXRsZSwKICAgIC5mdW5jdGlvbkxpYnJhcnlUaXRsZSB7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIH0KCiAgICAjbWluaW1hcCB7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgcmlnaHQ6IDIwcHg7CiAgICAgIGJvdHRvbTogMjBweDsKICAgIH0KCiAgICAuY29udGV4dC1tZW51IHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICBkaXNwbGF5OiBub25lOwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTJlMmUyOwogICAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgbWluLXdpZHRoOiAxNTBweDsKICAgICAgYm9yZGVyOiAxcHggc29saWQgI2Q0ZDRkNDsKICAgIH0KCiAgICAuY29udGV4dC1tZW51IHVsIHsKICAgICAgbGlzdC1zdHlsZS10eXBlOiBub25lOwogICAgICBtYXJnaW46IDA7CiAgICAgIHBhZGRpbmc6IDA7CiAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgIH0KCiAgICAuY29udGV4dC1tZW51IHVsIGxpIHsKICAgICAgcGFkZGluZzogNHB4IDE2cHg7CiAgICB9CgogICAgLmNvbnRleHQtbWVudSB1bCBsaTpob3ZlciB7CiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmMzkxM2U7CiAgICAgIGNvbG9yOiB3aGl0ZTsKICAgIH0KICA8L3N0eWxlPgogIDxkaXYgY2xhc3M9InRpdGxlQ29udGFpbmVyIj4KICAgIDxkaXYgaWQ9InRpdGxlIiBjbGFzcz0idGl0bGUiPk1haW4gR3JhcGg8L2Rpdj4KICAgIDxkaXYgaWQ9ImF1eFRpdGxlIiBjbGFzcz0iYXV4VGl0bGUiPkF1eGlsaWFyeSBOb2RlczwvZGl2PgogICAgPGRpdiBpZD0iZnVuY3Rpb25MaWJyYXJ5VGl0bGUiIGNsYXNzPSJmdW5jdGlvbkxpYnJhcnlUaXRsZSI+RnVuY3Rpb25zPC9kaXY+CiAgPC9kaXY+CiAgPHN2ZyBpZD0ic3ZnIj4KICAgIDxkZWZzPgogICAgICA8IS0tIEFycm93IGhlYWRzIGZvciByZWZlcmVuY2UgZWRnZSBwYXRocyBvZiBkaWZmZXJlbnQgcHJlZGVmaW5lZCBzaXplcyBwZXIgY29sb3IuIC0tPgogICAgICA8cGF0aAogICAgICAgIGlkPSJyZWZlcmVuY2UtYXJyb3doZWFkLXBhdGgiCiAgICAgICAgZD0iTSAwLDAgTCAxMCw1IEwgMCwxMCBDIDMsNyAzLDMgMCwwIgogICAgICA+PC9wYXRoPgogICAgICA8bWFya2VyCiAgICAgICAgY2xhc3M9InJlZmVyZW5jZS1hcnJvd2hlYWQiCiAgICAgICAgaWQ9InJlZmVyZW5jZS1hcnJvd2hlYWQtc21hbGwiCiAgICAgICAgdmlld0JveD0iMCAwIDEwIDEwIgogICAgICAgIG1hcmtlcldpZHRoPSI1IgogICAgICAgIG1hcmtlckhlaWdodD0iNSIKICAgICAgICByZWZYPSIyIgogICAgICAgIHJlZlk9IjUiCiAgICAgICAgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiCiAgICAgICAgbWFya2VyVW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICA+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjcmVmZXJlbmNlLWFycm93aGVhZC1wYXRoIj48L3VzZT4KICAgICAgPC9tYXJrZXI+CiAgICAgIDxtYXJrZXIKICAgICAgICBjbGFzcz0icmVmZXJlbmNlLWFycm93aGVhZCIKICAgICAgICBpZD0icmVmZXJlbmNlLWFycm93aGVhZC1tZWRpdW0iCiAgICAgICAgdmlld0JveD0iMCAwIDEwIDEwIgogICAgICAgIG1hcmtlcldpZHRoPSIxMyIKICAgICAgICBtYXJrZXJIZWlnaHQ9IjEzIgogICAgICAgIHJlZlg9IjIiCiAgICAgICAgcmVmWT0iNSIKICAgICAgICBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIKICAgICAgICBtYXJrZXJVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgID4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNyZWZlcmVuY2UtYXJyb3doZWFkLXBhdGgiPjwvdXNlPgogICAgICA8L21hcmtlcj4KICAgICAgPG1hcmtlcgogICAgICAgIGNsYXNzPSJyZWZlcmVuY2UtYXJyb3doZWFkIgogICAgICAgIGlkPSJyZWZlcmVuY2UtYXJyb3doZWFkLWxhcmdlIgogICAgICAgIHZpZXdCb3g9IjAgMCAxMCAxMCIKICAgICAgICBtYXJrZXJXaWR0aD0iMTYiCiAgICAgICAgbWFya2VySGVpZ2h0PSIxNiIKICAgICAgICByZWZYPSIyIgogICAgICAgIHJlZlk9IjUiCiAgICAgICAgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiCiAgICAgICAgbWFya2VyVW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICA+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjcmVmZXJlbmNlLWFycm93aGVhZC1wYXRoIj48L3VzZT4KICAgICAgPC9tYXJrZXI+CiAgICAgIDxtYXJrZXIKICAgICAgICBjbGFzcz0icmVmZXJlbmNlLWFycm93aGVhZCIKICAgICAgICBpZD0icmVmZXJlbmNlLWFycm93aGVhZC14bGFyZ2UiCiAgICAgICAgdmlld0JveD0iMCAwIDEwIDEwIgogICAgICAgIG1hcmtlcldpZHRoPSIyMCIKICAgICAgICBtYXJrZXJIZWlnaHQ9IjIwIgogICAgICAgIHJlZlg9IjIiCiAgICAgICAgcmVmWT0iNSIKICAgICAgICBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIKICAgICAgICBtYXJrZXJVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgID4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNyZWZlcmVuY2UtYXJyb3doZWFkLXBhdGgiPjwvdXNlPgogICAgICA8L21hcmtlcj4KCiAgICAgIDwhLS0gQXJyb3cgaGVhZHMgZm9yIGRhdGFmbG93IGVkZ2UgcGF0aHMgb2YgZGlmZmVyZW50IHByZWRlZmluZWQgc2l6ZXMgcGVyIGNvbG9yLiAtLT4KICAgICAgPHBhdGgKICAgICAgICBpZD0iZGF0YWZsb3ctYXJyb3doZWFkLXBhdGgiCiAgICAgICAgZD0iTSAwLDAgTCAxMCw1IEwgMCwxMCBDIDMsNyAzLDMgMCwwIgogICAgICA+PC9wYXRoPgogICAgICA8bWFya2VyCiAgICAgICAgY2xhc3M9ImRhdGFmbG93LWFycm93aGVhZCIKICAgICAgICBpZD0iZGF0YWZsb3ctYXJyb3doZWFkLXNtYWxsIgogICAgICAgIHZpZXdCb3g9IjAgMCAxMCAxMCIKICAgICAgICBtYXJrZXJXaWR0aD0iNSIKICAgICAgICBtYXJrZXJIZWlnaHQ9IjUiCiAgICAgICAgcmVmWD0iMiIKICAgICAgICByZWZZPSI1IgogICAgICAgIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIgogICAgICAgIG1hcmtlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgPgogICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI2RhdGFmbG93LWFycm93aGVhZC1wYXRoIj48L3VzZT4KICAgICAgPC9tYXJrZXI+CiAgICAgIDxtYXJrZXIKICAgICAgICBjbGFzcz0iZGF0YWZsb3ctYXJyb3doZWFkIgogICAgICAgIGlkPSJkYXRhZmxvdy1hcnJvd2hlYWQtbWVkaXVtIgogICAgICAgIHZpZXdCb3g9IjAgMCAxMCAxMCIKICAgICAgICBtYXJrZXJXaWR0aD0iMTMiCiAgICAgICAgbWFya2VySGVpZ2h0PSIxMyIKICAgICAgICByZWZYPSIyIgogICAgICAgIHJlZlk9IjUiCiAgICAgICAgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiCiAgICAgICAgbWFya2VyVW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICA+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjZGF0YWZsb3ctYXJyb3doZWFkLXBhdGgiPjwvdXNlPgogICAgICA8L21hcmtlcj4KICAgICAgPG1hcmtlcgogICAgICAgIGNsYXNzPSJkYXRhZmxvdy1hcnJvd2hlYWQiCiAgICAgICAgaWQ9ImRhdGFmbG93LWFycm93aGVhZC1sYXJnZSIKICAgICAgICB2aWV3Qm94PSIwIDAgMTAgMTAiCiAgICAgICAgbWFya2VyV2lkdGg9IjE2IgogICAgICAgIG1hcmtlckhlaWdodD0iMTYiCiAgICAgICAgcmVmWD0iMiIKICAgICAgICByZWZZPSI1IgogICAgICAgIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIgogICAgICAgIG1hcmtlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgPgogICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI2RhdGFmbG93LWFycm93aGVhZC1wYXRoIj48L3VzZT4KICAgICAgPC9tYXJrZXI+CiAgICAgIDxtYXJrZXIKICAgICAgICBjbGFzcz0iZGF0YWZsb3ctYXJyb3doZWFkIgogICAgICAgIGlkPSJkYXRhZmxvdy1hcnJvd2hlYWQteGxhcmdlIgogICAgICAgIHZpZXdCb3g9IjAgMCAxMCAxMCIKICAgICAgICBtYXJrZXJXaWR0aD0iMjAiCiAgICAgICAgbWFya2VySGVpZ2h0PSIyMCIKICAgICAgICByZWZYPSIyIgogICAgICAgIHJlZlk9IjUiCiAgICAgICAgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiCiAgICAgICAgbWFya2VyVW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICA+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjZGF0YWZsb3ctYXJyb3doZWFkLXBhdGgiPjwvdXNlPgogICAgICA8L21hcmtlcj4KCiAgICAgIDwhLS0gQXJyb3cgaGVhZCBmb3IgYW5ub3RhdGlvbiBlZGdlIHBhdGhzLiAtLT4KICAgICAgPG1hcmtlcgogICAgICAgIGlkPSJhbm5vdGF0aW9uLWFycm93aGVhZCIKICAgICAgICBtYXJrZXJXaWR0aD0iNSIKICAgICAgICBtYXJrZXJIZWlnaHQ9IjUiCiAgICAgICAgcmVmWD0iNSIKICAgICAgICByZWZZPSIyLjUiCiAgICAgICAgb3JpZW50PSJhdXRvIgogICAgICA+CiAgICAgICAgPHBhdGggZD0iTSAwLDAgTCA1LDIuNSBMIDAsNSBMIDAsMCI+PC9wYXRoPgogICAgICA8L21hcmtlcj4KICAgICAgPG1hcmtlcgogICAgICAgIGlkPSJhbm5vdGF0aW9uLWFycm93aGVhZC1mYWRlZCIKICAgICAgICBtYXJrZXJXaWR0aD0iNSIKICAgICAgICBtYXJrZXJIZWlnaHQ9IjUiCiAgICAgICAgcmVmWD0iNSIKICAgICAgICByZWZZPSIyLjUiCiAgICAgICAgb3JpZW50PSJhdXRvIgogICAgICA+CiAgICAgICAgPHBhdGggZD0iTSAwLDAgTCA1LDIuNSBMIDAsNSBMIDAsMCI+PC9wYXRoPgogICAgICA8L21hcmtlcj4KICAgICAgPG1hcmtlcgogICAgICAgIGlkPSJyZWYtYW5ub3RhdGlvbi1hcnJvd2hlYWQiCiAgICAgICAgbWFya2VyV2lkdGg9IjUiCiAgICAgICAgbWFya2VySGVpZ2h0PSI1IgogICAgICAgIHJlZlg9IjAiCiAgICAgICAgcmVmWT0iMi41IgogICAgICAgIG9yaWVudD0iYXV0byIKICAgICAgPgogICAgICAgIDxwYXRoIGQ9Ik0gNSwwIEwgMCwyLjUgTCA1LDUgTCA1LDAiPjwvcGF0aD4KICAgICAgPC9tYXJrZXI+CiAgICAgIDxtYXJrZXIKICAgICAgICBpZD0icmVmLWFubm90YXRpb24tYXJyb3doZWFkLWZhZGVkIgogICAgICAgIG1hcmtlcldpZHRoPSI1IgogICAgICAgIG1hcmtlckhlaWdodD0iNSIKICAgICAgICByZWZYPSIwIgogICAgICAgIHJlZlk9IjIuNSIKICAgICAgICBvcmllbnQ9ImF1dG8iCiAgICAgID4KICAgICAgICA8cGF0aCBkPSJNIDUsMCBMIDAsMi41IEwgNSw1IEwgNSwwIj48L3BhdGg+CiAgICAgIDwvbWFya2VyPgogICAgICA8IS0tIFRlbXBsYXRlIGZvciBhbiBPcCBub2RlIGVsbGlwc2UuIC0tPgogICAgICA8ZWxsaXBzZQogICAgICAgIGlkPSJvcC1ub2RlLXN0YW1wIgogICAgICAgIHJ4PSI3LjUiCiAgICAgICAgcnk9IjMiCiAgICAgICAgc3Ryb2tlPSJpbmhlcml0IgogICAgICAgIGZpbGw9ImluaGVyaXQiCiAgICAgID48L2VsbGlwc2U+CiAgICAgIDwhLS0gVGVtcGxhdGUgZm9yIGFuIE9wIG5vZGUgYW5ub3RhdGlvbiBlbGxpcHNlIChzbWFsbGVyKS4gLS0+CiAgICAgIDxlbGxpcHNlCiAgICAgICAgaWQ9Im9wLW5vZGUtYW5ub3RhdGlvbi1zdGFtcCIKICAgICAgICByeD0iNSIKICAgICAgICByeT0iMiIKICAgICAgICBzdHJva2U9ImluaGVyaXQiCiAgICAgICAgZmlsbD0iaW5oZXJpdCIKICAgICAgPjwvZWxsaXBzZT4KICAgICAgPCEtLSBWZXJ0aWNhbGx5IHN0YWNrZWQgc2VyaWVzIG9mIE9wIG5vZGVzIHdoZW4gdW5leHBhbmRlZC4gLS0+CiAgICAgIDxnIGlkPSJvcC1zZXJpZXMtdmVydGljYWwtc3RhbXAiPgogICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtc3RhbXAiIHg9IjgiIHk9IjkiPjwvdXNlPgogICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtc3RhbXAiIHg9IjgiIHk9IjYiPjwvdXNlPgogICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtc3RhbXAiIHg9IjgiIHk9IjMiPjwvdXNlPgogICAgICA8L2c+CiAgICAgIDwhLS0gSG9yaXpvbnRhbGx5IHN0YWNrZWQgc2VyaWVzIG9mIE9wIG5vZGVzIHdoZW4gdW5leHBhbmRlZC4gLS0+CiAgICAgIDxnIGlkPSJvcC1zZXJpZXMtaG9yaXpvbnRhbC1zdGFtcCI+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iMTYiIHk9IjQiPjwvdXNlPgogICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtc3RhbXAiIHg9IjEyIiB5PSI0Ij48L3VzZT4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSI4IiB5PSI0Ij48L3VzZT4KICAgICAgPC9nPgogICAgICA8IS0tIEhvcml6b250YWxseSBzdGFja2VkIHNlcmllcyBvZiBPcCBub2RlcyBmb3IgYW5ub3RhdGlvbi4gLS0+CiAgICAgIDxnIGlkPSJvcC1zZXJpZXMtYW5ub3RhdGlvbi1zdGFtcCI+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1hbm5vdGF0aW9uLXN0YW1wIiB4PSI5IiB5PSIyIj48L3VzZT4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLWFubm90YXRpb24tc3RhbXAiIHg9IjciIHk9IjIiPjwvdXNlPgogICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtYW5ub3RhdGlvbi1zdGFtcCIgeD0iNSIgeT0iMiI+PC91c2U+CiAgICAgIDwvZz4KICAgICAgPHN2ZwogICAgICAgIGlkPSJzdW1tYXJ5LWljb24iCiAgICAgICAgZmlsbD0iIzg0ODQ4NCIKICAgICAgICBoZWlnaHQ9IjEyIgogICAgICAgIHZpZXdCb3g9IjAgMCAyNCAyNCIKICAgICAgICB3aWR0aD0iMTIiCiAgICAgID4KICAgICAgICA8cGF0aAogICAgICAgICAgZD0iTTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yek05IDE3SDd2LTdoMnY3em00IDBoLTJWN2gydjEwem00IDBoLTJ2LTRoMnY0eiIKICAgICAgICA+PC9wYXRoPgogICAgICA8L3N2Zz4KCiAgICAgIDwhLS0gSGF0Y2ggcGF0dGVybnMgZm9yIGZhZGVkIG91dCBub2Rlcy4gLS0+CiAgICAgIDxwYXR0ZXJuCiAgICAgICAgaWQ9InJlY3RIYXRjaCIKICAgICAgICBwYXR0ZXJuVHJhbnNmb3JtPSJyb3RhdGUoNDUgMCAwKSIKICAgICAgICB3aWR0aD0iNSIKICAgICAgICBoZWlnaHQ9IjUiCiAgICAgICAgcGF0dGVyblVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgPgogICAgICAgIDxsaW5lIHgxPSIwIiB5MT0iMCIgeDI9IjAiIHkyPSI1IiBzdHlsZT0ic3Ryb2tlLXdpZHRoOiAxIj48L2xpbmU+CiAgICAgIDwvcGF0dGVybj4KICAgICAgPHBhdHRlcm4KICAgICAgICBpZD0iZWxsaXBzZUhhdGNoIgogICAgICAgIHBhdHRlcm5UcmFuc2Zvcm09InJvdGF0ZSg0NSAwIDApIgogICAgICAgIHdpZHRoPSIyIgogICAgICAgIGhlaWdodD0iMiIKICAgICAgICBwYXR0ZXJuVW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICA+CiAgICAgICAgPGxpbmUgeDE9IjAiIHkxPSIwIiB4Mj0iMCIgeTI9IjIiIHN0eWxlPSJzdHJva2Utd2lkdGg6IDEiPjwvbGluZT4KICAgICAgPC9wYXR0ZXJuPgoKICAgICAgPCEtLSBBIHNoYWRvdyBmb3IgaGVhbHRoIHBpbGxzLiAtLT4KICAgICAgPGZpbHRlcgogICAgICAgIGlkPSJoZWFsdGgtcGlsbC1zaGFkb3ciCiAgICAgICAgeD0iLTQwJSIKICAgICAgICB5PSItNDAlIgogICAgICAgIHdpZHRoPSIxODAlIgogICAgICAgIGhlaWdodD0iMTgwJSIKICAgICAgPgogICAgICAgIDxmZUdhdXNzaWFuQmx1ciBpbj0iU291cmNlQWxwaGEiIHN0ZERldmlhdGlvbj0iMC44Ij48L2ZlR2F1c3NpYW5CbHVyPgogICAgICAgIDxmZU9mZnNldCBkeD0iMCIgZHk9IjAiIHJlc3VsdD0ib2Zmc2V0Ymx1ciI+PC9mZU9mZnNldD4KICAgICAgICA8ZmVGbG9vZCBmbG9vZC1jb2xvcj0iIzAwMDAwMCI+PC9mZUZsb29kPgogICAgICAgIDxmZUNvbXBvc2l0ZSBpbjI9Im9mZnNldGJsdXIiIG9wZXJhdG9yPSJpbiI+PC9mZUNvbXBvc2l0ZT4KICAgICAgICA8ZmVNZXJnZT4KICAgICAgICAgIDxmZU1lcmdlTm9kZT48L2ZlTWVyZ2VOb2RlPgogICAgICAgICAgPGZlTWVyZ2VOb2RlIGluPSJTb3VyY2VHcmFwaGljIj48L2ZlTWVyZ2VOb2RlPgogICAgICAgIDwvZmVNZXJnZT4KICAgICAgPC9maWx0ZXI+CiAgICA8L2RlZnM+CiAgICA8IS0tIE1ha2UgYSBsYXJnZSByZWN0YW5nbGUgdGhhdCBmaWxscyB0aGUgc3ZnIHNwYWNlIHNvIHRoYXQKICB6b29tIGV2ZW50cyBnZXQgY2FwdHVyZWQgb24gc2FmYXJpIC0tPgogICAgPHJlY3QgZmlsbD0id2hpdGUiIHdpZHRoPSIxMDAwMCIgaGVpZ2h0PSIxMDAwMCI+PC9yZWN0PgogICAgPGcgaWQ9InJvb3QiPjwvZz4KICA8L3N2Zz4KICA8dGYtZ3JhcGgtbWluaW1hcCBpZD0ibWluaW1hcCI+PC90Zi1ncmFwaC1taW5pbWFwPgogIDxkaXYgaWQ9ImNvbnRleHRNZW51IiBjbGFzcz0iY29udGV4dC1tZW51Ij48L2Rpdj4KYDtsZXQgQUx0PWNsYXNzIGV4dGVuZHModHIobmwoeWUpKSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3pvb21lZD0hMSx0aGlzLl96b29tU3RhcnRDb29yZHM9bnVsbCx0aGlzLl96b29tVHJhbnNmb3JtPW51bGwsdGhpcy5fbWF4Wm9vbURpc3RhbmNlRm9yQ2xpY2s9MjAsdGhpcy5fbm9kZUdyb3VwSW5kZXg9e30sdGhpcy5fYW5ub3RhdGlvbkdyb3VwSW5kZXg9e30sdGhpcy5fZWRnZUdyb3VwSW5kZXg9e30sdGhpcy5tYXhNZXRhbm9kZUxhYmVsTGVuZ3RoRm9udFNpemU9OSx0aGlzLm1pbk1ldGFub2RlTGFiZWxMZW5ndGhGb250U2l6ZT02LHRoaXMubWF4TWV0YW5vZGVMYWJlbExlbmd0aExhcmdlRm9udD0xMSx0aGlzLm1heE1ldGFub2RlTGFiZWxMZW5ndGg9MTh9Z2V0Tm9kZSh0KXtyZXR1cm4gdGhpcy5yZW5kZXJIaWVyYXJjaHkuZ2V0UmVuZGVyTm9kZUJ5TmFtZSh0KX1pc05vZGVFeHBhbmRlZCh0KXtyZXR1cm4gdC5leHBhbmRlZH1zZXROb2RlRXhwYW5kZWQodCl7dGhpcy5fYnVpbGQodGhpcy5yZW5kZXJIaWVyYXJjaHkpLHRoaXMuX3VwZGF0ZUxhYmVscyghdGhpcy5fem9vbWVkKX1wYW5Ub05vZGUodCl7KGZ1bmN0aW9uIGUodCxuLGkscil7Y29uc3Qgbz13dShuKS5zZWxlY3QoYFtkYXRhLW5hbWU9IiR7dH0iXWApLm5vZGUoKTtpZighbylyZXR1cm4gY29uc29sZS53YXJuKGBwYW5Ub05vZGUoKSBmYWlsZWQgZm9yIG5vZGUgbmFtZSAiJHt0fSJgKSwhMTtsZXQgYT1vLmdldEJCb3goKSxzPW8uZ2V0U2NyZWVuQ1RNKCksbD1uLmNyZWF0ZVNWR1BvaW50KCksYz1uLmNyZWF0ZVNWR1BvaW50KCk7bC54PWEueCxsLnk9YS55LGMueD1hLngrYS53aWR0aCxjLnk9YS55K2EuaGVpZ2h0LGw9bC5tYXRyaXhUcmFuc2Zvcm0ocyksYz1jLm1hdHJpeFRyYW5zZm9ybShzKTtsZXQgdT0odCxlLG4saSk9PiEodD5uJiZlPGkpLGg9bi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtjb25zdCBkPWgudG9wK2guaGVpZ2h0LTE1MDtpZih1KGwueCxjLngsaC5sZWZ0LGgubGVmdCtoLndpZHRoLTMyMCl8fHUobC55LGMueSxoLnRvcCxkKSl7bGV0IHQ9aC5sZWZ0K2gud2lkdGgvMi0obC54K2MueCkvMixlPWgudG9wK2guaGVpZ2h0LzItKGwueStjLnkpLzI7Y29uc3QgaT1yTihuKTtyZXR1cm4gd3UobikudHJhbnNpdGlvbigpLmR1cmF0aW9uKDUwMCkuY2FsbChyLnRyYW5zbGF0ZUJ5LHQvaS5rLGUvaS5rKSwhMH1yZXR1cm4hMX0pKHQsdGhpcy4kLnN2ZywwLHRoaXMuX3pvb20pJiYodGhpcy5fem9vbWVkPSEwKX1nZXRHcmFwaFN2Z1Jvb3QoKXtyZXR1cm4gdGhpcy4kLnN2Z31nZXRDb250ZXh0TWVudSgpe3JldHVybiB0aGlzLiQuY29udGV4dE1lbnV9X3Jlc2V0U3RhdGUoKXt0aGlzLl9ub2RlR3JvdXBJbmRleD17fSx0aGlzLl9hbm5vdGF0aW9uR3JvdXBJbmRleD17fSx0aGlzLl9lZGdlR3JvdXBJbmRleD17fSx0aGlzLl91cGRhdGVMYWJlbHMoITEpLHd1KHRoaXMuJC5zdmcpLnNlbGVjdCgiI3Jvb3QiKS5zZWxlY3RBbGwoIioiKS5yZW1vdmUoKSxLa3QodGhpcy4kLnN2Zyl9X2J1aWxkKHQpe3RoaXMudGVtcGxhdGVJbmRleD10LmhpZXJhcmNoeS5nZXRUZW1wbGF0ZUluZGV4KCksaUF0KCJ0Zi1ncmFwaC1zY2VuZSAobGF5b3V0KToiLGZ1bmN0aW9uKCl7dWt0KHQucm9vdCl9LmJpbmQodGhpcyksWUN0LlJFTkRFUl9TQ0VORV9MQVlPVVQpLGlBdCgidGYtZ3JhcGgtc2NlbmUgKGJ1aWxkIHNjZW5lKToiLGZ1bmN0aW9uKCl7YUx0KHd1KHRoaXMuJC5yb290KSx0LnJvb3QsdGhpcyksKGZ1bmN0aW9uIGUodCxuKXt3dSh0KS5vbigiY2xpY2siLCgoKT0+e24uZmlyZSgiZ3JhcGgtc2VsZWN0Iil9KSl9KSh0aGlzLiQuc3ZnLHRoaXMpLHRoaXMuX3VwZGF0ZUlucHV0VHJhY2UoKX0uYmluZCh0aGlzKSxZQ3QuUkVOREVSX1NDRU5FX0JVSUxEX1NDRU5FKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlSGVhbHRoUGlsbHModGhpcy5ub2RlTmFtZXNUb0hlYWx0aFBpbGxzLHRoaXMuaGVhbHRoUGlsbFN0ZXBJbmRleCksdGhpcy5taW5pbWFwLnVwZGF0ZSgpfS5iaW5kKHRoaXMpLGxrdC5hbmltYXRpb24uZHVyYXRpb24pfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLl96b29tPXBOKCkub24oImVuZCIsZnVuY3Rpb24oKXt0aGlzLl96b29tU3RhcnRDb29yZHMmJihNYXRoLnNxcnQoTWF0aC5wb3codGhpcy5fem9vbVN0YXJ0Q29vcmRzLngtdGhpcy5fem9vbVRyYW5zZm9ybS54LDIpK01hdGgucG93KHRoaXMuX3pvb21TdGFydENvb3Jkcy55LXRoaXMuX3pvb21UcmFuc2Zvcm0ueSwyKSk8dGhpcy5fbWF4Wm9vbURpc3RhbmNlRm9yQ2xpY2s/dGhpcy5fZmlyZUVuYWJsZUNsaWNrKCk6c2V0VGltZW91dCh0aGlzLl9maXJlRW5hYmxlQ2xpY2suYmluZCh0aGlzKSw1MCkpLHRoaXMuX3pvb21TdGFydENvb3Jkcz1udWxsfS5iaW5kKHRoaXMpKS5vbigiem9vbSIsZnVuY3Rpb24oKXt0aGlzLl96b29tVHJhbnNmb3JtPWN1LnRyYW5zZm9ybSx0aGlzLl96b29tU3RhcnRDb29yZHN8fCh0aGlzLl96b29tU3RhcnRDb29yZHM9dGhpcy5fem9vbVRyYW5zZm9ybSx0aGlzLmZpcmUoImRpc2FibGUtY2xpY2siKSksdGhpcy5fem9vbWVkPSEwLHd1KHRoaXMuJC5yb290KS5hdHRyKCJ0cmFuc2Zvcm0iLGN1LnRyYW5zZm9ybSksdGhpcy5taW5pbWFwLnpvb20oY3UudHJhbnNmb3JtKX0uYmluZCh0aGlzKSksd3UodGhpcy4kLnN2ZykuY2FsbCh0aGlzLl96b29tKS5vbigiZGJsY2xpY2suem9vbSIsbnVsbCksd3Uod2luZG93KS5vbigicmVzaXplIixmdW5jdGlvbigpe3RoaXMubWluaW1hcC56b29tKCl9LmJpbmQodGhpcykpLHRoaXMubWluaW1hcD10aGlzLiQubWluaW1hcC5pbml0KHRoaXMuJC5zdmcsdGhpcy4kLnJvb3QsdGhpcy5fem9vbSxsa3QubWluaW1hcC5zaXplLGxrdC5zdWJzY2VuZS5tZXRhLmxhYmVsSGVpZ2h0KX1hdHRhY2hlZCgpe3RoaXMuc2V0KCJfaXNBdHRhY2hlZCIsITApfWRldGFjaGVkKCl7dGhpcy5zZXQoIl9pc0F0dGFjaGVkIiwhMSl9X3JlbmRlckhpZXJhcmNoeUNoYW5nZWQoKXt2YXIgdD10aGlzLnJlbmRlckhpZXJhcmNoeTt0aGlzLl9oYXNSZW5kZXJIaWVyYXJjaHlCZWVuRml0T25jZT0hMSx0aGlzLl9yZXNldFN0YXRlKCksdGhpcy5fYnVpbGQodCl9X2FuaW1hdGVBbmRGaXQoKXshdGhpcy5faGFzUmVuZGVySGllcmFyY2h5QmVlbkZpdE9uY2UmJnRoaXMuX2lzQXR0YWNoZWQmJnNldFRpbWVvdXQodGhpcy5maXQuYmluZCh0aGlzKSxsa3QuYW5pbWF0aW9uLmR1cmF0aW9uKX1fdXBkYXRlTGFiZWxzKHQpe3ZhciBlPXRoaXMuJCQoIi50aXRsZSIpLG49ZS5zdHlsZSxpPXRoaXMuJCQoIi5hdXhUaXRsZSIpLHI9aS5zdHlsZSxvPXRoaXMuJCQoIi5mdW5jdGlvbkxpYnJhcnlUaXRsZSIpLnN0eWxlO2NvbnN0IGE9d3UodGhpcy4kLnN2Zyk7dmFyIHM9YS5zZWxlY3QoIi4iK19rdC5TY2VuZS5HUk9VUCsiPi4iK19rdC5TY2VuZS5DT1JFKS5ub2RlKCk7aWYodCYmcyYmdGhpcy5wcm9ncmVzcyYmMTAwPT09dGhpcy5wcm9ncmVzcy52YWx1ZSl7dmFyIGw9YS5zZWxlY3QoIi4iK19rdC5TY2VuZS5HUk9VUCsiPi4iK19rdC5TY2VuZS5JTkVYVFJBQ1QpLm5vZGUoKXx8YS5zZWxlY3QoIi4iK19rdC5TY2VuZS5HUk9VUCsiPi4iK19rdC5TY2VuZS5PVVRFWFRSQUNUKS5ub2RlKCksYz1zLmdldENUTSgpLmUsdT1sP2wuZ2V0Q1RNKCkuZTpudWxsO24uZGlzcGxheT0iaW5saW5lIixuLmxlZnQ9YysicHgiLG51bGwhPT11JiZ1IT09Yz8oci5kaXNwbGF5PSJpbmxpbmUiLHU9TWF0aC5tYXgoYytlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoLHUpLHIubGVmdD11KyJweCIpOnIuZGlzcGxheT0ibm9uZSI7bGV0IHQ9YS5zZWxlY3QoIi4iK19rdC5TY2VuZS5HUk9VUCsiPi4iK19rdC5TY2VuZS5GVU5DVElPTl9MSUJSQVJZKS5ub2RlKCksaD10P3QuZ2V0Q1RNKCkuZTpudWxsO251bGwhPT1oJiZoIT09dT8oby5kaXNwbGF5PSJpbmxpbmUiLGg9TWF0aC5tYXgodStpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoLGgpLG8ubGVmdD1oKyJweCIpOm8uZGlzcGxheT0ibm9uZSJ9ZWxzZSBuLmRpc3BsYXk9Im5vbmUiLHIuZGlzcGxheT0ibm9uZSIsby5kaXNwbGF5PSJub25lIn1ub2RlQ29sb3JzQ2hhbmdlZCgpe251bGwhPXRoaXMucmVuZGVySGllcmFyY2h5JiYodGhpcy50ZW1wbGF0ZUluZGV4PXRoaXMucmVuZGVySGllcmFyY2h5LmhpZXJhcmNoeS5nZXRUZW1wbGF0ZUluZGV4KCksd2UuZWFjaCh0aGlzLl9ub2RlR3JvdXBJbmRleCwoKHQsZSk9Pnt0aGlzLl91cGRhdGVOb2RlU3RhdGUoZSl9KSksdGhpcy5taW5pbWFwLnVwZGF0ZSgpKX1maXQoKXt0aGlzLl9oYXNSZW5kZXJIaWVyYXJjaHlCZWVuRml0T25jZT0hMCwoZnVuY3Rpb24gdChlLG4saSxyKXtsZXQgbz1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGE9bnVsbDt0cnl7aWYoYT1uLmdldEJCb3goKSwwPT09YS53aWR0aClyZXR1cm59Y2F0Y2godCl7cmV0dXJufWxldCBzPS45Kk1hdGgubWluKG8ud2lkdGgvYS53aWR0aCxvLmhlaWdodC9hLmhlaWdodCwyKSxsPWxrdC5ncmFwaDtjb25zdCBjPWlOLnNjYWxlKHMpLnRyYW5zbGF0ZShsLnBhZGRpbmcucGFkZGluZ0xlZnQsbC5wYWRkaW5nLnBhZGRpbmdUb3ApO3d1KGUpLnRyYW5zaXRpb24oKS5kdXJhdGlvbig1MDApLmNhbGwoaS50cmFuc2Zvcm0sYykub24oImVuZC5maXR0ZWQiLCgoKT0+e2kub24oImVuZC5maXR0ZWQiLG51bGwpLHIoKX0pKX0pKHRoaXMuJC5zdmcsdGhpcy4kLnJvb3QsdGhpcy5fem9vbSxmdW5jdGlvbigpe3RoaXMuX3pvb21lZD0hMX0uYmluZCh0aGlzKSl9Z2V0SW1hZ2VCbG9iKCl7cmV0dXJuIHRoaXMubWluaW1hcC5nZXRJbWFnZUJsb2IoKX1pc05vZGVTZWxlY3RlZCh0KXtyZXR1cm4gdD09PXRoaXMuc2VsZWN0ZWROb2RlfWlzTm9kZUhpZ2hsaWdodGVkKHQpe3JldHVybiB0PT09dGhpcy5oaWdobGlnaHRlZE5vZGV9YWRkQW5ub3RhdGlvbkdyb3VwKHQsZSxuKXt2YXIgaT10Lm5vZGUubmFtZTt0aGlzLl9hbm5vdGF0aW9uR3JvdXBJbmRleFtpXT10aGlzLl9hbm5vdGF0aW9uR3JvdXBJbmRleFtpXXx8e30sdGhpcy5fYW5ub3RhdGlvbkdyb3VwSW5kZXhbaV1bZS5ub2RlLm5hbWVdPW59Z2V0QW5ub3RhdGlvbkdyb3Vwc0luZGV4KHQpe3JldHVybiB0aGlzLl9hbm5vdGF0aW9uR3JvdXBJbmRleFt0XX1yZW1vdmVBbm5vdGF0aW9uR3JvdXAodCxlKXtkZWxldGUgdGhpcy5fYW5ub3RhdGlvbkdyb3VwSW5kZXhbdC5ub2RlLm5hbWVdW2Uubm9kZS5uYW1lXX1hZGROb2RlR3JvdXAodCxlKXt0aGlzLl9ub2RlR3JvdXBJbmRleFt0XT1lfWdldE5vZGVHcm91cCh0KXtyZXR1cm4gdGhpcy5fbm9kZUdyb3VwSW5kZXhbdF19cmVtb3ZlTm9kZUdyb3VwKHQpe2RlbGV0ZSB0aGlzLl9ub2RlR3JvdXBJbmRleFt0XX1hZGRFZGdlR3JvdXAodCxlKXt0aGlzLl9lZGdlR3JvdXBJbmRleFt0XT1lfWdldEVkZ2VHcm91cCh0KXtyZXR1cm4gdGhpcy5fZWRnZUdyb3VwSW5kZXhbdF19X3VwZGF0ZUhlYWx0aFBpbGxzKCl7IShmdW5jdGlvbiB0KGUsbixpKXtpZighbilyZXR1cm47bGV0IHI9MTt3dShlKS5zZWxlY3RBbGwoImcubm9kZXNoYXBlIikuZWFjaCgoZnVuY3Rpb24odCl7Y29uc3QgZT1uW3Qubm9kZS5uYW1lXTshKGZ1bmN0aW9uIG8odCxlLG4saSxyPTYwLGE9MTAscz0wLGwpe2lmKHd1KHQucGFyZW50Tm9kZSkuc2VsZWN0QWxsKCIuaGVhbHRoLXBpbGwiKS5yZW1vdmUoKSwhZSlyZXR1cm47Y29uc3QgYz1lLnZhbHVlLHU9Yy5zbGljZSgyLDgpLGg9dVswXSxkPXVbMV0scD11WzVdO2xldCBmPWNbMV07Y29uc3QgbT17bWluOmNbOF0sbWF4OmNbOV0sbWVhbjpjWzEwXSxzdGRkZXY6TWF0aC5zcXJ0KGNbMTFdKX07bnVsbD09ciYmKHI9NjApLG51bGw9PWEmJihhPTEwKSxudWxsPT1zJiYocz0wKSxudWxsIT1uJiZuLm5vZGUudHlwZT09PXZBdC5PUCYmKHIvPTIsYS89Mik7bGV0IGc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKEtDdCwiZyIpO2cuY2xhc3NMaXN0LmFkZCgiaGVhbHRoLXBpbGwiKTtsZXQgXz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoS0N0LCJkZWZzIik7Zy5hcHBlbmRDaGlsZChfKTtsZXQgeT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoS0N0LCJsaW5lYXJHcmFkaWVudCIpO2NvbnN0IHY9ImhlYWx0aC1waWxsLWdyYWRpZW50LSIraTt5LnNldEF0dHJpYnV0ZSgiaWQiLHYpO2xldCBiPTAseD0iMCUiO2ZvcihsZXQgdD0wO3Q8dS5sZW5ndGg7dCsrKXtpZighdVt0XSljb250aW51ZTtiKz11W3RdO2xldCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhLQ3QsInN0b3AiKTtlLnNldEF0dHJpYnV0ZSgib2Zmc2V0Iix4KSxlLnNldEF0dHJpYnV0ZSgic3RvcC1jb2xvciIseWt0W3RdLmJhY2tncm91bmRfY29sb3IpLHkuYXBwZW5kQ2hpbGQoZSk7bGV0IG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKEtDdCwic3RvcCIpLGk9MTAwKmIvZisiJSI7bi5zZXRBdHRyaWJ1dGUoIm9mZnNldCIsaSksbi5zZXRBdHRyaWJ1dGUoInN0b3AtY29sb3IiLHlrdFt0XS5iYWNrZ3JvdW5kX2NvbG9yKSx5LmFwcGVuZENoaWxkKG4pLHg9aX1fLmFwcGVuZENoaWxkKHkpO2xldCB3PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhLQ3QsInJlY3QiKTt3LnNldEF0dHJpYnV0ZSgiZmlsbCIsInVybCgjIit2KyIpIiksdy5zZXRBdHRyaWJ1dGUoIndpZHRoIixTdHJpbmcocikpLHcuc2V0QXR0cmlidXRlKCJoZWlnaHQiLFN0cmluZyhhKSksdy5zZXRBdHRyaWJ1dGUoInkiLFN0cmluZyhzKSksZy5hcHBlbmRDaGlsZCh3KTtsZXQgUz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoS0N0LCJ0aXRsZSIpO1MudGV4dENvbnRlbnQ9KGZ1bmN0aW9uIE0odCxlLG4saSl7bGV0IHI9IkRldmljZTogIit0LmRldmljZV9uYW1lKyJcbiI7cis9ImR0eXBlOiAiK3QuZHR5cGUrIlxuIjtsZXQgbz0iKHNjYWxhcikiO3Quc2hhcGUubGVuZ3RoPjAmJihvPSIoIit0LnNoYXBlLmpvaW4oIiwiKSsiKSIpLHIrPSJcbnNoYXBlOiAiK28rIlxuXG4iLHIrPSIjKGVsZW1lbnRzKTogIitlKyJcbiI7Y29uc3QgYT1bXTtmb3IobGV0IHQ9MDt0PG4ubGVuZ3RoO3QrKyluW3RdPjAmJmEucHVzaCgiIygiK3lrdFt0XS5sYWJlbCsiKTogIituW3RdKTtyZXR1cm4gcis9YS5qb2luKCIsICIpKyJcblxuIixpLm1heD49aS5taW4mJihyKz0ibWluOiAiK2kubWluKyIsIG1heDogIitpLm1heCsiXG4iLHIrPSJtZWFuOiAiK2kubWVhbisiLCBzdGRkZXY6ICIraS5zdGRkZXYpLHJ9KShlLGYsdSxtKSxnLmFwcGVuZENoaWxkKFMpO2xldCBFPSExO2lmKG51bGwhPW4pe2xldCB0PW4ueS1hLW4uaGVpZ2h0LzItMjtpZihuLmxhYmVsT2Zmc2V0PDAmJih0Kz1uLmxhYmVsT2Zmc2V0KSxnLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKG4ueC1yLzIpKyIsICIrdCsiKSIpLHVbMl18fHVbM118fHVbNF0pe2xldCB0PW4ubm9kZS5hdHRyO2lmKHQmJnQubGVuZ3RoKWZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKWlmKCJUIj09PXRbZV0ua2V5KXtsZXQgbj10W2VdLnZhbHVlLnR5cGU7RT1uJiYvXkRUXyhCT09MfElOVHxVSU5UKS8udGVzdChuKTticmVha319fWxldCBUPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhLQ3QsInRleHQiKTtpZihOdW1iZXIuaXNGaW5pdGUobS5taW4pJiZOdW1iZXIuaXNGaW5pdGUobS5tYXgpKXtjb25zdCB0PXdrdChtLm1pbixFKSxlPXdrdChtLm1heCxFKTtpZihULnRleHRDb250ZW50PWY+MT90KyIgfiAiK2U6dCxoPjB8fGQ+MHx8cD4wKXtULnRleHRDb250ZW50Kz0iICgiO2NvbnN0IHQ9W107aD4wJiZ0LnB1c2goYE5hTsOXJHtofWApLGQ+MCYmdC5wdXNoKGAt4oiew5cke2R9YCkscD4wJiZ0LnB1c2goYCviiJ7DlyR7cH1gKSxULnRleHRDb250ZW50Kz10LmpvaW4oIjsgIikrIikifX1lbHNlIFQudGV4dENvbnRlbnQ9IihObyBmaW5pdGUgZWxlbWVudHMpIjtULmNsYXNzTGlzdC5hZGQoImhlYWx0aC1waWxsLXN0YXRzIiksbnVsbD09bCYmKGw9ci8yKSxULnNldEF0dHJpYnV0ZSgieCIsU3RyaW5nKGwpKSxULnNldEF0dHJpYnV0ZSgieSIsU3RyaW5nKHMtMikpLGcuYXBwZW5kQ2hpbGQoVCkscWkodC5wYXJlbnROb2RlKS5hcHBlbmRDaGlsZChnKX0pKHRoaXMsZT9lW2ldOm51bGwsdCxyKyspfSkpfSkodGhpcy4kLnN2Zyx0aGlzLm5vZGVOYW1lc1RvSGVhbHRoUGlsbHMsdGhpcy5oZWFsdGhQaWxsU3RlcEluZGV4KX1fdXBkYXRlTm9kZVN0YXRlKHQpe3ZhciBlPXRoaXMuZ2V0Tm9kZSh0KSxuPXRoaXMuZ2V0Tm9kZUdyb3VwKHQpO24mJkprdChuLGUsdGhpcyksZS5ub2RlLnR5cGU9PT12QXQuTUVUQSYmZS5ub2RlLmFzc29jaWF0ZWRGdW5jdGlvbiYmIWUuaXNMaWJyYXJ5RnVuY3Rpb24mJkprdCh3dSgiLiIrX2t0LlNjZW5lLkdST1VQKyI+LiIrX2t0LlNjZW5lLkZVTkNUSU9OX0xJQlJBUlkrJyBnW2RhdGEtbmFtZT0iJysoX0F0K2Uubm9kZS5hc3NvY2lhdGVkRnVuY3Rpb24pKyciXScpLGUsdGhpcyk7dmFyIGk9dGhpcy5nZXRBbm5vdGF0aW9uR3JvdXBzSW5kZXgodCk7d2UuZWFjaChpLCgodCxuKT0+e0prdCh0LGUsdGhpcyxfa3QuQW5ub3RhdGlvbi5OT0RFKX0pKX1fc2VsZWN0ZWROb2RlQ2hhbmdlZCh0LGUpe2lmKHQhPT1lJiYoZSYmdGhpcy5fdXBkYXRlTm9kZVN0YXRlKGUpLHQpKXt0aGlzLm1pbmltYXAudXBkYXRlKCk7Zm9yKHZhciBuLGk9dGhpcy5yZW5kZXJIaWVyYXJjaHkuaGllcmFyY2h5Lm5vZGUodCkscj1bXTtudWxsIT1pLnBhcmVudE5vZGUmJmkucGFyZW50Tm9kZS5uYW1lIT1nQXQ7KXIucHVzaCgoaT1pLnBhcmVudE5vZGUpLm5hbWUpO3dlLmZvckVhY2hSaWdodChyLCh0PT57dGhpcy5yZW5kZXJIaWVyYXJjaHkuYnVpbGRTdWJoaWVyYXJjaHkodCk7dmFyIGU9dGhpcy5yZW5kZXJIaWVyYXJjaHkuZ2V0UmVuZGVyTm9kZUJ5TmFtZSh0KTtlLm5vZGUuaXNHcm91cE5vZGUmJiFlLmV4cGFuZGVkJiYoZS5leHBhbmRlZD0hMCxufHwobj1lKSl9KSksbiYmKHRoaXMuc2V0Tm9kZUV4cGFuZGVkKG4pLHRoaXMuX3pvb21lZD0hMCksdCYmdGhpcy5fdXBkYXRlTm9kZVN0YXRlKHQpLHNldFRpbWVvdXQoKCgpPT57dGhpcy5wYW5Ub05vZGUodCl9KSxsa3QuYW5pbWF0aW9uLmR1cmF0aW9uKX19X2hpZ2hsaWdodGVkTm9kZUNoYW5nZWQodCxlKXt0IT09ZSYmKHQmJnRoaXMuX3VwZGF0ZU5vZGVTdGF0ZSh0KSxlJiZ0aGlzLl91cGRhdGVOb2RlU3RhdGUoZSkpfV9vblpvb21DaGFuZ2VkKCl7dGhpcy5fdXBkYXRlTGFiZWxzKCF0aGlzLl96b29tZWQpfV9maXJlRW5hYmxlQ2xpY2soKXt0aGlzLmZpcmUoImVuYWJsZS1jbGljayIpfV91cGRhdGVJbnB1dFRyYWNlKCl7dEx0KHRoaXMuZ2V0R3JhcGhTdmdSb290KCksdGhpcy5yZW5kZXJIaWVyYXJjaHksdGhpcy5zZWxlY3RlZE5vZGUsdGhpcy50cmFjZUlucHV0cyl9fTtBTHQudGVtcGxhdGU9Q0x0LHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLFhBdCldLEFMdC5wcm90b3R5cGUsInJlbmRlckhpZXJhcmNoeSIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxBTHQucHJvdG90eXBlLCJuYW1lIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLEFMdC5wcm90b3R5cGUsImNvbG9yQnkiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxBTHQucHJvdG90eXBlLCJ0cmFjZUlucHV0cyIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEFMdC5wcm90b3R5cGUsIl9oYXNSZW5kZXJIaWVyYXJjaHlCZWVuRml0T25jZSIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEFMdC5wcm90b3R5cGUsIl9pc0F0dGFjaGVkIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLEFMdC5wcm90b3R5cGUsIl96b29tIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfaGlnaGxpZ2h0ZWROb2RlQ2hhbmdlZCJ9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sQUx0LnByb3RvdHlwZSwiaGlnaGxpZ2h0ZWROb2RlIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfc2VsZWN0ZWROb2RlQ2hhbmdlZCJ9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sQUx0LnByb3RvdHlwZSwic2VsZWN0ZWROb2RlIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLEFMdC5wcm90b3R5cGUsImhhbmRsZUVkZ2VTZWxlY3RlZCIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW4sb2JzZXJ2ZXI6Il9vblpvb21DaGFuZ2VkIn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sQUx0LnByb3RvdHlwZSwiX3pvb21lZCIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxBTHQucHJvdG90eXBlLCJfem9vbVN0YXJ0Q29vcmRzIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLEFMdC5wcm90b3R5cGUsIl96b29tVHJhbnNmb3JtIix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLEFMdC5wcm90b3R5cGUsIl9tYXhab29tRGlzdGFuY2VGb3JDbGljayIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLEFMdC5wcm90b3R5cGUsInRlbXBsYXRlSW5kZXgiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sQUx0LnByb3RvdHlwZSwiX25vZGVHcm91cEluZGV4Iix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLEFMdC5wcm90b3R5cGUsIl9hbm5vdGF0aW9uR3JvdXBJbmRleCIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxBTHQucHJvdG90eXBlLCJfZWRnZUdyb3VwSW5kZXgiLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXJ9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sQUx0LnByb3RvdHlwZSwibWF4TWV0YW5vZGVMYWJlbExlbmd0aEZvbnRTaXplIix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLEFMdC5wcm90b3R5cGUsIm1pbk1ldGFub2RlTGFiZWxMZW5ndGhGb250U2l6ZSIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxBTHQucHJvdG90eXBlLCJtYXhNZXRhbm9kZUxhYmVsTGVuZ3RoTGFyZ2VGb250Iix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLEFMdC5wcm90b3R5cGUsIm1heE1ldGFub2RlTGFiZWxMZW5ndGgiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sQUx0LnByb3RvdHlwZSwicHJvZ3Jlc3MiLHZvaWQgMCksdChbbyh7dHlwZTpBcnJheX0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLEFMdC5wcm90b3R5cGUsIm5vZGVDb250ZXh0TWVudUl0ZW1zIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLEFMdC5wcm90b3R5cGUsIm5vZGVOYW1lc1RvSGVhbHRoUGlsbHMiLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXJ9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sQUx0LnByb3RvdHlwZSwiaGVhbHRoUGlsbFN0ZXBJbmRleCIsdm9pZCAwKSx0KFthKCJyZW5kZXJIaWVyYXJjaHkiKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEFMdC5wcm90b3R5cGUsIl9yZW5kZXJIaWVyYXJjaHlDaGFuZ2VkIixudWxsKSx0KFthKCJfaXNBdHRhY2hlZCIsInJlbmRlckhpZXJhcmNoeSIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sQUx0LnByb3RvdHlwZSwiX2FuaW1hdGVBbmRGaXQiLG51bGwpLHQoW2EoImNvbG9yQnkiKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEFMdC5wcm90b3R5cGUsIm5vZGVDb2xvcnNDaGFuZ2VkIixudWxsKSx0KFthKCJub2RlTmFtZXNUb0hlYWx0aFBpbGxzIiwiaGVhbHRoUGlsbFN0ZXBJbmRleCIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sQUx0LnByb3RvdHlwZSwiX3VwZGF0ZUhlYWx0aFBpbGxzIixudWxsKSx0KFthKCJ0cmFjZUlucHV0cyIsInNlbGVjdGVkTm9kZSIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sQUx0LnByb3RvdHlwZSwiX3VwZGF0ZUlucHV0VHJhY2UiLG51bGwpLEFMdD10KFtpKCJ0Zi1ncmFwaC1zY2VuZSIpXSxBTHQpO2xldCBrTHQ9Y2xhc3MgZXh0ZW5kcyh0cih5ZSkpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJEZXB0aD0xLHRoaXMuX2FsbG93R3JhcGhTZWxlY3Q9ITAsdGhpcy5lZGdlV2lkdGhGdW5jdGlvbj0iIix0aGlzLmhhbmRsZU5vZGVTZWxlY3RlZD0iIix0aGlzLmVkZ2VMYWJlbEZ1bmN0aW9uPSIiLHRoaXMuaGFuZGxlRWRnZVNlbGVjdGVkPSIifXBhblRvTm9kZSh0KXt0aGlzLiQkKCJ0Zi1ncmFwaC1zY2VuZSIpLnBhblRvTm9kZSh0KX1fYXV0b0V4dHJhY3ROb2Rlc0NoYW5nZWQoKXt2YXIgdD10aGlzLmdyYXBoSGllcmFyY2h5O2lmKHQpe2Zvcihjb25zdCBlIG9mIE9iamVjdC52YWx1ZXModC5nZXROb2RlTWFwKCkpKWUuaW5jbHVkZT1iQXQuVU5TUEVDSUZJRUQ7dGhpcy5fYnVpbGRSZW5kZXJIaWVyYXJjaHkodCl9fV9idWlsZE5ld1JlbmRlckhpZXJhcmNoeSgpe3ZhciB0PXRoaXMuZ3JhcGhIaWVyYXJjaHk7dCYmdGhpcy5fYnVpbGRSZW5kZXJIaWVyYXJjaHkodCl9X3N0YXRzQ2hhbmdlZCgpe3ZhciB0PXRoaXMuc3RhdHMsZT10aGlzLmRldmljZXNGb3JTdGF0czt0aGlzLmdyYXBoSGllcmFyY2h5JiYodCYmZSYmKChmdW5jdGlvbiBuKHQsZSxpKXt3ZS5lYWNoKHQubm9kZXMsKHQ9Pnt0LnN0YXRzPW51bGx9KSksd2UuZWFjaChlLmRldl9zdGF0cywoZT0+e2kmJiFpW2UuZGV2aWNlXXx8d2UuZWFjaChlLm5vZGVfc3RhdHMsKG49PntsZXQgaT1uLm5vZGVfbmFtZSBpbiB0Lm5vZGVzP24ubm9kZV9uYW1lOkRBdChuLm5vZGVfbmFtZSk7aWYoIShpIGluIHQubm9kZXMpKXJldHVybjtsZXQgcj0wO24ubWVtb3J5JiZ3ZS5lYWNoKG4ubWVtb3J5LCh0PT57dC50b3RhbF9ieXRlcyYmKHQudG90YWxfYnl0ZXM+MD9yKz1OdW1iZXIodC50b3RhbF9ieXRlcyk6Y29uc29sZS5sb2coImlnbm9yaW5nIG5lZ2F0aXZlIG1lbW9yeSBhbGxvY2F0aW9uIGZvciAiK2kpKX0pKTtsZXQgbz1udWxsO24ub3V0cHV0JiYobz13ZS5tYXAobi5vdXRwdXQsKHQ9PndlLm1hcCh0LnRlbnNvcl9kZXNjcmlwdGlvbi5zaGFwZS5kaW0sKHQ9Pk51bWJlcih0LnNpemUpKSkpKSksdC5ub2Rlc1tpXS5kZXZpY2U9ZS5kZXZpY2UsbnVsbD09dC5ub2Rlc1tpXS5zdGF0cyYmKHQubm9kZXNbaV0uc3RhdHM9bmV3IFFDdChvKSksdC5ub2Rlc1tpXS5zdGF0cy5hZGRCeXRlc0FsbG9jYXRpb24ociksbi5hbGxfZW5kX3JlbF9taWNyb3MmJihuLmFsbF9lbmRfcmVsX21pY3Jvcz4wP3Qubm9kZXNbaV0uc3RhdHMuYWRkRXhlY3V0aW9uVGltZShuLmFsbF9zdGFydF9taWNyb3Msbi5hbGxfc3RhcnRfbWljcm9zK24uYWxsX2VuZF9yZWxfbWljcm9zKTpjb25zb2xlLmxvZygiaWdub3JpbmcgbmVnYXRpdmUgcnVudGltZSBmb3IgIitpKSl9KSl9KSl9KSh0aGlzLmJhc2ljR3JhcGgsdCxlKSwoZnVuY3Rpb24gaSh0LGUpe2xldCBuPXt9LGk9e307d2UuZWFjaCh0LnJvb3QubGVhdmVzKCksKGU9PntsZXQgcj10Lm5vZGUoZSk7bnVsbCE9ci5kZXZpY2UmJihuW3IuZGV2aWNlXT0hMCksbnVsbCE9ci54bGFDbHVzdGVyJiYoaVtyLnhsYUNsdXN0ZXJdPSEwKX0pKSx0LmRldmljZXM9d2Uua2V5cyhuKSx0LnhsYUNsdXN0ZXJzPXdlLmtleXMoaSksd2UuZWFjaCh0LmdldE5vZGVNYXAoKSwoKHQsZSk9Pnt0LmlzR3JvdXBOb2RlJiYodC5zdGF0cz1uZXcgUUN0KG51bGwpLHQuZGV2aWNlSGlzdG9ncmFtPXt9KX0pKSx3ZS5lYWNoKHQucm9vdC5sZWF2ZXMoKSwoZT0+e2xldCBuPXQubm9kZShlKSxpPW47Zm9yKDtudWxsIT1pLnBhcmVudE5vZGU7KXtpZihudWxsIT1uLmRldmljZSl7bGV0IHQ9aS5wYXJlbnROb2RlLmRldmljZUhpc3RvZ3JhbTt0W24uZGV2aWNlXT0odFtuLmRldmljZV18fDApKzF9aWYobnVsbCE9bi54bGFDbHVzdGVyKXtsZXQgdD1pLnBhcmVudE5vZGUueGxhQ2x1c3Rlckhpc3RvZ3JhbTt0W24ueGxhQ2x1c3Rlcl09KHRbbi54bGFDbHVzdGVyXXx8MCkrMX1udWxsIT1uLnN0YXRzJiZpLnBhcmVudE5vZGUuc3RhdHMuY29tYmluZShuLnN0YXRzKSxpPWkucGFyZW50Tm9kZX19KSl9KSh0aGlzLmdyYXBoSGllcmFyY2h5KSksdGhpcy5fYnVpbGRSZW5kZXJIaWVyYXJjaHkodGhpcy5ncmFwaEhpZXJhcmNoeSkpfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImdyYXBoLXNlbGVjdCIsdGhpcy5fZ3JhcGhTZWxlY3RlZC5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImRpc2FibGUtY2xpY2siLHRoaXMuX2Rpc2FibGVDbGljay5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImVuYWJsZS1jbGljayIsdGhpcy5fZW5hYmxlQ2xpY2suYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJub2RlLXRvZ2dsZS1leHBhbmQiLHRoaXMuX25vZGVUb2dnbGVFeHBhbmQuYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJub2RlLXNlbGVjdCIsdGhpcy5fbm9kZVNlbGVjdGVkLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigibm9kZS1oaWdobGlnaHQiLHRoaXMuX25vZGVIaWdobGlnaHRlZC5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoIm5vZGUtdW5oaWdobGlnaHQiLHRoaXMuX25vZGVVbmhpZ2hsaWdodGVkLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigibm9kZS10b2dnbGUtZXh0cmFjdCIsdGhpcy5fbm9kZVRvZ2dsZUV4dHJhY3QuYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJub2RlLXRvZ2dsZS1zZXJpZXNncm91cCIsdGhpcy5fbm9kZVRvZ2dsZVNlcmllc0dyb3VwLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiZWRnZS1zZWxlY3QiLHRoaXMuX2VkZ2VTZWxlY3RlZC5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImFubm90YXRpb24tc2VsZWN0Iix0aGlzLl9ub2RlU2VsZWN0ZWQuYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJhbm5vdGF0aW9uLWhpZ2hsaWdodCIsdGhpcy5fbm9kZUhpZ2hsaWdodGVkLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiYW5ub3RhdGlvbi11bmhpZ2hsaWdodCIsdGhpcy5fbm9kZVVuaGlnaGxpZ2h0ZWQuYmluZCh0aGlzKSl9X2J1aWxkUmVuZGVySGllcmFyY2h5KHQpe2lmKHQucm9vdC50eXBlIT09dkF0Lk1FVEEpcmV0dXJuO2NvbnN0IGU9dGhpcyxuPWlBdCgibmV3IHRmX2dyYXBoX3JlbmRlci5IaWVyYXJjaHkiLCgoKT0+e2NvbnN0IG49bmV3IFhBdCh0LCEhdGhpcy5zdGF0cyx0aGlzLmF1dG9FeHRyYWN0Tm9kZXMpO2Z1bmN0aW9uIGkodCl7cmV0dXJue21pblZhbHVlOnQuZG9tYWluKClbMF0sbWF4VmFsdWU6dC5kb21haW4oKVsxXSxzdGFydENvbG9yOnQucmFuZ2UoKVswXSxlbmRDb2xvcjp0LnJhbmdlKClbMV19fXJldHVybiBuLmVkZ2VMYWJlbEZ1bmN0aW9uPXRoaXMuZWRnZUxhYmVsRnVuY3Rpb24sbi5lZGdlV2lkdGhGdW5jdGlvbj10aGlzLmVkZ2VXaWR0aEZ1bmN0aW9uLGUuX3NldENvbG9yQnlQYXJhbXMoe2NvbXB1dGVfdGltZTppKG4uY29tcHV0ZVRpbWVTY2FsZSksbWVtb3J5Omkobi5tZW1vcnlVc2FnZVNjYWxlKSxkZXZpY2U6d2UubWFwKG4uZGV2aWNlQ29sb3JNYXAuZG9tYWluKCksKGZ1bmN0aW9uKHQpe3JldHVybntkZXZpY2U6dCxjb2xvcjpuLmRldmljZUNvbG9yTWFwKHQpfX0pKSx4bGFfY2x1c3Rlcjp3ZS5tYXAobi54bGFDbHVzdGVyQ29sb3JNYXAuZG9tYWluKCksKGZ1bmN0aW9uKHQpe3JldHVybnt4bGFfY2x1c3Rlcjp0LGNvbG9yOm4ueGxhQ2x1c3RlckNvbG9yTWFwKHQpfX0pKX0pLG59KSxZQ3QuUkVOREVSX0JVSUxEX0hJRVJBUkNIWSk7ZS5fc2V0UmVuZGVySGllcmFyY2h5KG4pfV9nZXRWaXNpYmxlKHQpe3JldHVybiB0P3RoaXMucmVuZGVySGllcmFyY2h5LmdldE5lYXJlc3RWaXNpYmxlQW5jZXN0b3IodCk6dH1maXQoKXt0aGlzLiQuc2NlbmUuZml0KCl9Z2V0SW1hZ2VCbG9iKCl7cmV0dXJuIHRoaXMuJC5zY2VuZS5nZXRJbWFnZUJsb2IoKX1fZ3JhcGhDaGFuZ2VkKCl7dGhpcy5ncmFwaEhpZXJhcmNoeSYmKHRoaXMuZ3JhcGhIaWVyYXJjaHkuYWRkTGlzdGVuZXIoZEx0LlRFTVBMQVRFU19VUERBVEVELCgoKT0+e3RoaXMuJC5zY2VuZS5ub2RlQ29sb3JzQ2hhbmdlZCgpfSkpLHRoaXMuZmlyZSgiZ3JhcGgtc2VsZWN0IikpfV9ncmFwaFNlbGVjdGVkKHQpe3RoaXMuX2FsbG93R3JhcGhTZWxlY3QmJih0aGlzLnNldCgic2VsZWN0ZWROb2RlIixudWxsKSx0aGlzLnNldCgic2VsZWN0ZWRFZGdlIixudWxsKSksdGhpcy5fYWxsb3dHcmFwaFNlbGVjdD0hMH1fZGlzYWJsZUNsaWNrKHQpe3RoaXMuX2FsbG93R3JhcGhTZWxlY3Q9ITF9X2VuYWJsZUNsaWNrKHQpe3RoaXMuX2FsbG93R3JhcGhTZWxlY3Q9ITB9X3NlbGVjdGVkTm9kZUNoYW5nZWQoKXt0aGlzLmhhbmRsZU5vZGVTZWxlY3RlZCYmdGhpcy5oYW5kbGVOb2RlU2VsZWN0ZWQodGhpcy5zZWxlY3RlZE5vZGUpfV9zZWxlY3RlZEVkZ2VDaGFuZ2VkKCl7dmFyIHQ9dGhpcy5zZWxlY3RlZEVkZ2U7dGhpcy5fZGVzZWxlY3RQcmV2aW91c0VkZ2UoKSx0JiYodGhpcy5fbGFzdFNlbGVjdGVkRWRnZUdyb3VwLmNsYXNzZWQoX2t0LkVkZ2UuU0VMRUNURUQsITApLHRoaXMuX3VwZGF0ZU1hcmtlck9mU2VsZWN0ZWRFZGdlKHQpKSx0aGlzLmhhbmRsZUVkZ2VTZWxlY3RlZCYmdGhpcy5oYW5kbGVFZGdlU2VsZWN0ZWQodCl9X25vZGVTZWxlY3RlZCh0KXt0aGlzLl9hbGxvd0dyYXBoU2VsZWN0JiZ0aGlzLnNldCgic2VsZWN0ZWROb2RlIix0LmRldGFpbC5uYW1lKSx0aGlzLl9hbGxvd0dyYXBoU2VsZWN0PSEwfV9lZGdlU2VsZWN0ZWQodCl7dGhpcy5fYWxsb3dHcmFwaFNlbGVjdCYmKHRoaXMuc2V0KCJfbGFzdFNlbGVjdGVkRWRnZUdyb3VwIix0LmRldGFpbC5lZGdlR3JvdXApLHRoaXMuc2V0KCJzZWxlY3RlZEVkZ2UiLHQuZGV0YWlsLmVkZ2VEYXRhKSksdGhpcy5fYWxsb3dHcmFwaFNlbGVjdD0hMH1fbm9kZUhpZ2hsaWdodGVkKHQpe3RoaXMuc2V0KCJoaWdobGlnaHRlZE5vZGUiLHQuZGV0YWlsLm5hbWUpfV9ub2RlVW5oaWdobGlnaHRlZCh0KXt0aGlzLnNldCgiaGlnaGxpZ2h0ZWROb2RlIixudWxsKX1fbm9kZVRvZ2dsZUV4cGFuZCh0KXt0aGlzLl9ub2RlU2VsZWN0ZWQodCk7dmFyIGU9dC5kZXRhaWwubmFtZSxuPXRoaXMucmVuZGVySGllcmFyY2h5LmdldFJlbmRlck5vZGVCeU5hbWUoZSk7bi5ub2RlLnR5cGUhPT12QXQuT1AmJih0aGlzLnJlbmRlckhpZXJhcmNoeS5idWlsZFN1YmhpZXJhcmNoeShlKSxuLmV4cGFuZGVkPSFuLmV4cGFuZGVkLHRoaXMuYXN5bmMoKGZ1bmN0aW9uKCl7dGhpcy4kLnNjZW5lLnNldE5vZGVFeHBhbmRlZChuKX0pLDc1KSxuQXQoe2FjdGlvbklkOllDdC5OT0RFX0VYUEFOU0lPTl9UT0dHTEVELGV2ZW50TGFiZWw6bi5leHBhbmRlZD8iZXhwYW5kZWQiOiJjb2xsYXBzZWQifSkpfV9ub2RlVG9nZ2xlRXh0cmFjdCh0KXt0aGlzLm5vZGVUb2dnbGVFeHRyYWN0KHQuZGV0YWlsLm5hbWUpfW5vZGVUb2dnbGVFeHRyYWN0KHQpe2NvbnN0IGU9dGhpcy5yZW5kZXJIaWVyYXJjaHkuZ2V0UmVuZGVyTm9kZUJ5TmFtZSh0KTtlLm5vZGUuaW5jbHVkZT1lLm5vZGUuaW5jbHVkZT09YkF0LklOQ0xVREU/YkF0LkVYQ0xVREU6ZS5ub2RlLmluY2x1ZGU9PWJBdC5FWENMVURFfHx0aGlzLnJlbmRlckhpZXJhcmNoeS5pc05vZGVBdXhpbGlhcnkoZSk/YkF0LklOQ0xVREU6YkF0LkVYQ0xVREUsdGhpcy5fYnVpbGRSZW5kZXJIaWVyYXJjaHkodGhpcy5ncmFwaEhpZXJhcmNoeSksbkF0KHthY3Rpb25JZDpZQ3QuTk9ERV9BVVhJTElBUllfRVhUUkFDVElPTl9DSEFOR0VELGV2ZW50TGFiZWw6ZS5ub2RlLmluY2x1ZGU9PT1iQXQuSU5DTFVERT8iQXV4aWxpYXJ5IHRvIE1haW4iOiJNYWluIHRvIEF1eGlsaWFyeSJ9KX1fbm9kZVRvZ2dsZVNlcmllc0dyb3VwKHQpe3RoaXMubm9kZVRvZ2dsZVNlcmllc0dyb3VwKHQuZGV0YWlsLm5hbWUpfW5vZGVUb2dnbGVTZXJpZXNHcm91cCh0KXt0aGlzLnNldCgicHJvZ3Jlc3MiLHt2YWx1ZTowLG1zZzoiIn0pO3ZhciBlPW9BdChyQXQodGhpcyksMTAwLCJOYW1lc3BhY2UgaGllcmFyY2h5Iik7Y29uc3Qgbj1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdGhpcy5oaWVyYXJjaHlQYXJhbXMpLHtzZXJpZXNNYXA6dGhpcy5ncmFwaEhpZXJhcmNoeS5idWlsZFNlcmllc0dyb3VwTWFwVG9nZ2xlZCh0KX0pO2dMdCh0aGlzLmJhc2ljR3JhcGgsbixlKS50aGVuKGZ1bmN0aW9uKHQpe3RoaXMuc2V0KCJncmFwaEhpZXJhcmNoeSIsdCksdGhpcy5fYnVpbGRSZW5kZXJIaWVyYXJjaHkodGhpcy5ncmFwaEhpZXJhcmNoeSl9LmJpbmQodGhpcykpfV9kZXNlbGVjdFByZXZpb3VzRWRnZSgpe3d1KCIuIitfa3QuRWRnZS5TRUxFQ1RFRCkuY2xhc3NlZChfa3QuRWRnZS5TRUxFQ1RFRCwhMSkuZWFjaCgoKHQsZSk9PntpZih0LmxhYmVsKXtjb25zdCBlPXd1KHRoaXMpLnNlbGVjdEFsbCgicGF0aC5lZGdlbGluZSIpO3QubGFiZWwuc3RhcnRNYXJrZXJJZCYmZS5zdHlsZSgibWFya2VyLXN0YXJ0IixgdXJsKCMke3QubGFiZWwuc3RhcnRNYXJrZXJJZH0pYCksdC5sYWJlbC5lbmRNYXJrZXJJZCYmZS5zdHlsZSgibWFya2VyLWVuZCIsYHVybCgjJHt0LmxhYmVsLmVuZE1hcmtlcklkfSlgKX19KSl9X3VwZGF0ZU1hcmtlck9mU2VsZWN0ZWRFZGdlKHQpe2lmKHQubGFiZWwpe2NvbnN0IGU9dC5sYWJlbC5zdGFydE1hcmtlcklkfHx0LmxhYmVsLmVuZE1hcmtlcklkO2lmKGUpe2NvbnN0IG49ZS5yZXBsYWNlKCJkYXRhZmxvdy0iLCJzZWxlY3RlZC0iKTtsZXQgaT10aGlzLiQkKCIjIituKTtpZighaSl7Y29uc3QgdD10aGlzLiQuc2NlbmUucXVlcnlTZWxlY3RvcigiIyIrZSk7aT10LmNsb25lTm9kZSghMCksaS5zZXRBdHRyaWJ1dGUoImlkIixuKSxpLmNsYXNzTGlzdC5hZGQoInNlbGVjdGVkLWFycm93aGVhZCIpLHQucGFyZW50Tm9kZS5hcHBlbmRDaGlsZChpKX1jb25zdCByPXQubGFiZWwuc3RhcnRNYXJrZXJJZD8ibWFya2VyLXN0YXJ0IjoibWFya2VyLWVuZCI7dGhpcy5fbGFzdFNlbGVjdGVkRWRnZUdyb3VwLnNlbGVjdEFsbCgicGF0aC5lZGdlbGluZSIpLnN0eWxlKHIsYHVybCgjJHtufSlgKX19fW5vdCh0KXtyZXR1cm4hdH19O2tMdC50ZW1wbGF0ZT1fZWAKICAgIDxzdHlsZT4KICAgICAgLmNvbnRhaW5lciB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGJhY2tncm91bmQ6IHdoaXRlOwogICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMik7CiAgICAgIH0KCiAgICAgIC52ZXJ0aWNhbCB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIEBhcHBseSAtLWxheW91dC12ZXJ0aWNhbDsKICAgICAgfQoKICAgICAgLmF1dG8gewogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4LWF1dG87CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LXZlcnRpY2FsOwogICAgICB9CgogICAgICBoMiB7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICB9CgogICAgICBwYXBlci1idXR0b24gewogICAgICAgIHRleHQtdHJhbnNmb3JtOiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIj4KICAgICAgPGRpdiBjbGFzcz0idmVydGljYWwiPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1t0aXRsZV1dIj4KICAgICAgICAgIDxoMj5bW3RpdGxlXV08L2gyPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRmLWdyYXBoLXNjZW5lCiAgICAgICAgICBpZD0ic2NlbmUiCiAgICAgICAgICBjbGFzcz0iYXV0byIKICAgICAgICAgIHJlbmRlci1oaWVyYXJjaHk9IltbcmVuZGVySGllcmFyY2h5XV0iCiAgICAgICAgICBoaWdobGlnaHRlZC1ub2RlPSJbW19nZXRWaXNpYmxlKGhpZ2hsaWdodGVkTm9kZSldXSIKICAgICAgICAgIHNlbGVjdGVkLW5vZGU9Int7c2VsZWN0ZWROb2RlfX0iCiAgICAgICAgICBzZWxlY3RlZC1lZGdlPSJ7e3NlbGVjdGVkRWRnZX19IgogICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgcHJvZ3Jlc3M9IltbcHJvZ3Jlc3NdXSIKICAgICAgICAgIG5vZGUtY29udGV4dC1tZW51LWl0ZW1zPSJbW25vZGVDb250ZXh0TWVudUl0ZW1zXV0iCiAgICAgICAgICBub2RlLW5hbWVzLXRvLWhlYWx0aC1waWxscz0iW1tub2RlTmFtZXNUb0hlYWx0aFBpbGxzXV0iCiAgICAgICAgICBoZWFsdGgtcGlsbC1zdGVwLWluZGV4PSJ7e2hlYWx0aFBpbGxTdGVwSW5kZXh9fSIKICAgICAgICAgIGhhbmRsZS1lZGdlLXNlbGVjdGVkPSJbW2hhbmRsZUVkZ2VTZWxlY3RlZF1dIgogICAgICAgICAgdHJhY2UtaW5wdXRzPSJbW3RyYWNlSW5wdXRzXV0iCiAgICAgICAgPjwvdGYtZ3JhcGgtc2NlbmU+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgYCx0KFtvKHt0eXBlOk9iamVjdCxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9ncmFwaENoYW5nZWQifSksZSgiZGVzaWduOnR5cGUiLHBMdCldLGtMdC5wcm90b3R5cGUsImdyYXBoSGllcmFyY2h5Iix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLHdBdCldLGtMdC5wcm90b3R5cGUsImJhc2ljR3JhcGgiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sa0x0LnByb3RvdHlwZSwic3RhdHMiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sa0x0LnByb3RvdHlwZSwiZGV2aWNlc0ZvclN0YXRzIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLGtMdC5wcm90b3R5cGUsImhpZXJhcmNoeVBhcmFtcyIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdCxub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sa0x0LnByb3RvdHlwZSwicHJvZ3Jlc3MiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sa0x0LnByb3RvdHlwZSwidGl0bGUiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLGtMdC5wcm90b3R5cGUsInNlbGVjdGVkTm9kZSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdCxub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sa0x0LnByb3RvdHlwZSwic2VsZWN0ZWRFZGdlIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLGtMdC5wcm90b3R5cGUsIl9sYXN0U2VsZWN0ZWRFZGdlR3JvdXAiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLGtMdC5wcm90b3R5cGUsImhpZ2hsaWdodGVkTm9kZSIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxrTHQucHJvdG90eXBlLCJjb2xvckJ5Iix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0LG5vdGlmeTohMCxyZWFkT25seTohMH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxrTHQucHJvdG90eXBlLCJjb2xvckJ5UGFyYW1zIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0LHJlYWRPbmx5OiEwLG5vdGlmeTohMH0pLGUoImRlc2lnbjp0eXBlIixYQXQpXSxrTHQucHJvdG90eXBlLCJyZW5kZXJIaWVyYXJjaHkiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxrTHQucHJvdG90eXBlLCJ0cmFjZUlucHV0cyIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGtMdC5wcm90b3R5cGUsImF1dG9FeHRyYWN0Tm9kZXMiLHZvaWQgMCksdChbbyh7dHlwZTpBcnJheX0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLGtMdC5wcm90b3R5cGUsIm5vZGVDb250ZXh0TWVudUl0ZW1zIix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLGtMdC5wcm90b3R5cGUsIl9yZW5kZXJEZXB0aCIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGtMdC5wcm90b3R5cGUsIl9hbGxvd0dyYXBoU2VsZWN0Iix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLGtMdC5wcm90b3R5cGUsIm5vZGVOYW1lc1RvSGVhbHRoUGlsbHMiLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXJ9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sa0x0LnByb3RvdHlwZSwiaGVhbHRoUGlsbFN0ZXBJbmRleCIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxrTHQucHJvdG90eXBlLCJlZGdlV2lkdGhGdW5jdGlvbiIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxrTHQucHJvdG90eXBlLCJoYW5kbGVOb2RlU2VsZWN0ZWQiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sa0x0LnByb3RvdHlwZSwiZWRnZUxhYmVsRnVuY3Rpb24iLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sa0x0LnByb3RvdHlwZSwiaGFuZGxlRWRnZVNlbGVjdGVkIix2b2lkIDApLHQoW2EoImF1dG9FeHRyYWN0Tm9kZXMiKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLGtMdC5wcm90b3R5cGUsIl9hdXRvRXh0cmFjdE5vZGVzQ2hhbmdlZCIsbnVsbCksdChbYSgiZ3JhcGhIaWVyYXJjaHkiLCJlZGdlV2lkdGhGdW5jdGlvbiIsImhhbmRsZU5vZGVTZWxlY3RlZCIsImVkZ2VMYWJlbEZ1bmN0aW9uIiwiaGFuZGxlRWRnZVNlbGVjdGVkIiksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pLGUoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxrTHQucHJvdG90eXBlLCJfYnVpbGROZXdSZW5kZXJIaWVyYXJjaHkiLG51bGwpLHQoW2EoInN0YXRzIiwiZGV2aWNlc0ZvclN0YXRzIiksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pLGUoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxrTHQucHJvdG90eXBlLCJfc3RhdHNDaGFuZ2VkIixudWxsKSx0KFthKCJzZWxlY3RlZE5vZGUiKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLGtMdC5wcm90b3R5cGUsIl9zZWxlY3RlZE5vZGVDaGFuZ2VkIixudWxsKSx0KFthKCJzZWxlY3RlZEVkZ2UiKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLGtMdC5wcm90b3R5cGUsIl9zZWxlY3RlZEVkZ2VDaGFuZ2VkIixudWxsKSxrTHQ9dChbaSgidGYtZ3JhcGgiKV0sa0x0KTtjb25zdCBMTHQ9e01BWF9OT0RFX0NPVU5UOjFlNCxNQVhfRURHRV9DT1VOVDoxZTR9O2xldCBQTHQ9Y2xhc3MgZXh0ZW5kcyh0cih5ZSkpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmhpZXJhcmNoeVBhcmFtcz1tTHQsdGhpcy5hbGxTdGVwc01vZGVFbmFibGVkPSExLHRoaXMuc3BlY2lmaWNIZWFsdGhQaWxsU3RlcD0wLHRoaXMuY29tcGF0Tm9kZVRpdGxlPSJUUFUgQ29tcGF0aWJpbGl0eSJ9Zml0KCl7dGhpcy4kLmdyYXBoLmZpdCgpfWRvd25sb2FkQXNJbWFnZSh0KXtyZXR1cm4gbih0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9eWllbGQgdGhpcy4kLmdyYXBoLmdldEltYWdlQmxvYigpLG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO24uaHJlZj1VUkwuY3JlYXRlT2JqZWN0VVJMKGUpLG4uZG93bmxvYWQ9dCxuLmNsaWNrKCksVVJMLnJldm9rZU9iamVjdFVSTChuLmhyZWYpfSkpfV9pc05vdENvbXBsZXRlKHQpe3JldHVybiB0LnZhbHVlPDEwMH1fZ2V0Q29udGFpbmVyQ2xhc3ModCl7dmFyIGU9ImNvbnRhaW5lciI7cmV0dXJuIHQuZXJyb3ImJihlKz0iIGVycm9yIiksdGhpcy5faXNOb3RDb21wbGV0ZSh0KSYmKGUrPSIgbG9hZGluZyIpLGV9X29uTm9kZUluY2x1c2lvblRvZ2dsZWQodCl7dGhpcy4kLmdyYXBoLm5vZGVUb2dnbGVFeHRyYWN0KHQuZGV0YWlsLm5hbWUpfV9vbk5vZGVTZXJpZXNHcm91cFRvZ2dsZWQodCl7dGhpcy4kLmdyYXBoLm5vZGVUb2dnbGVTZXJpZXNHcm91cCh0LmRldGFpbC5uYW1lKX1fdXBkYXRlTm9kZUluY2x1ZGUoKXtjb25zdCB0PXRoaXMucmVuZGVySGllcmFyY2h5P3RoaXMucmVuZGVySGllcmFyY2h5LmdldE5vZGVCeU5hbWUodGhpcy5zZWxlY3RlZE5vZGUpOm51bGw7dGhpcy5fc2VsZWN0ZWROb2RlSW5jbHVkZT10P3QuaW5jbHVkZTpiQXQuVU5TUEVDSUZJRUR9X3NsaW1HcmFwaENoYW5nZWQoKXtpZighdGhpcy5ncmFwaClyZXR1cm47Y29uc3R7TUFYX05PREVfQ09VTlQ6dCxNQVhfRURHRV9DT1VOVDplfT1MTHQ7T2JqZWN0LmtleXModGhpcy5ncmFwaC5ub2RlcykubGVuZ3RoPnQmJnRoaXMuZ3JhcGguZWRnZXMubGVuZ3RoPmUmJnRoaXMuY29sb3JCeT09PXprdC5TVFJVQ1RVUkUmJih0aGlzLmNvbG9yQnk9emt0Lk5PTkUpfV9lbnN1cmVUZW1wbGF0ZXMoKXt0aGlzLmdyYXBoSGllcmFyY2h5JiZ0aGlzLmNvbG9yQnk9PT16a3QuU1RSVUNUVVJFJiYodGhpcy5ncmFwaEhpZXJhcmNoeS5nZXRUZW1wbGF0ZUluZGV4KCl8fHRoaXMuZ3JhcGhIaWVyYXJjaHkudXBkYXRlVGVtcGxhdGVzKCkpfX07UEx0LnRlbXBsYXRlPV9lYAogICAgPHN0eWxlPgogICAgICA6Omhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICAvZGVlcC8gLmNsb3NlIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGxlZnQ6IDE1cHg7CiAgICAgICAgYm90dG9tOiAxNXB4OwogICAgICB9CgogICAgICAuY29udGFpbmVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLmNvbnRhaW5lci5sb2FkaW5nIHsKICAgICAgICBjdXJzb3I6IHByb2dyZXNzOwogICAgICAgIG9wYWNpdHk6IDAuMTsKICAgICAgfQoKICAgICAgLmNvbnRhaW5lci5sb2FkaW5nLmVycm9yIHsKICAgICAgICBjdXJzb3I6IGF1dG87CiAgICAgIH0KCiAgICAgICNpbmZvIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IDVweDsKICAgICAgICB0b3A6IDVweDsKICAgICAgICBwYWRkaW5nOiAwcHg7CiAgICAgICAgbWF4LXdpZHRoOiAzODBweDsKICAgICAgICBtaW4td2lkdGg6IDMyMHB4OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTsKICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTJkcDsKICAgICAgfQoKICAgICAgI21haW4gewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQoKICAgICAgI3Byb2dyZXNzLWJhciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogNDBweDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgfQoKICAgICAgI3Byb2dyZXNzLW1zZyB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKICAgICAgICB3aWR0aDogNDAwcHg7CiAgICAgIH0KCiAgICAgIHBhcGVyLXByb2dyZXNzIHsKICAgICAgICB3aWR0aDogNDAwcHg7CiAgICAgICAgLS1wYXBlci1wcm9ncmVzcy1oZWlnaHQ6IDZweDsKICAgICAgICAtLXBhcGVyLXByb2dyZXNzLWFjdGl2ZS1jb2xvcjogI2YzOTEzZTsKICAgICAgfQoKICAgICAgLmNvbnRleHQtbWVudSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2UyZTJlMjsKICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIG1pbi13aWR0aDogMTUwcHg7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2Q0ZDRkNDsKICAgICAgfQoKICAgICAgL2RlZXAvIC5jb250ZXh0LW1lbnUgdWwgewogICAgICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgIH0KCiAgICAgIC9kZWVwLyAuY29udGV4dC1tZW51IHVsIGxpIHsKICAgICAgICBwYWRkaW5nOiA0cHggMTZweDsKICAgICAgfQoKICAgICAgL2RlZXAvIC5jb250ZXh0LW1lbnUgdWwgbGk6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmMzkxM2U7CiAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc05vdENvbXBsZXRlKHByb2dyZXNzKV1dIj4KICAgICAgPGRpdiBpZD0icHJvZ3Jlc3MtYmFyIj4KICAgICAgICA8ZGl2IGlkPSJwcm9ncmVzcy1tc2ciPltbcHJvZ3Jlc3MubXNnXV08L2Rpdj4KICAgICAgICA8cGFwZXItcHJvZ3Jlc3MgdmFsdWU9IltbcHJvZ3Jlc3MudmFsdWVdXSI+PC9wYXBlci1wcm9ncmVzcz4KICAgICAgPC9kaXY+CiAgICA8L3RlbXBsYXRlPgogICAgPGRpdiBjbGFzcyQ9IltbX2dldENvbnRhaW5lckNsYXNzKHByb2dyZXNzKV1dIj4KICAgICAgPGRpdiBpZD0ibWFpbiI+CiAgICAgICAgPHRmLWdyYXBoCiAgICAgICAgICBpZD0iZ3JhcGgiCiAgICAgICAgICBncmFwaC1oaWVyYXJjaHk9Int7Z3JhcGhIaWVyYXJjaHl9fSIKICAgICAgICAgIGJhc2ljLWdyYXBoPSJbW2dyYXBoXV0iCiAgICAgICAgICBoaWVyYXJjaHktcGFyYW1zPSJbW2hpZXJhcmNoeVBhcmFtc11dIgogICAgICAgICAgcmVuZGVyLWhpZXJhcmNoeT0ie3tyZW5kZXJIaWVyYXJjaHl9fSIKICAgICAgICAgIGRldmljZXMtZm9yLXN0YXRzPSJbW2RldmljZXNGb3JTdGF0c11dIgogICAgICAgICAgc3RhdHM9Iltbc3RhdHNdXSIKICAgICAgICAgIHNlbGVjdGVkLW5vZGU9Int7c2VsZWN0ZWROb2RlfX0iCiAgICAgICAgICBoaWdobGlnaHRlZC1ub2RlPSJ7e19oaWdobGlnaHRlZE5vZGV9fSIKICAgICAgICAgIGNvbG9yLWJ5PSJbW2NvbG9yQnldXSIKICAgICAgICAgIGNvbG9yLWJ5LXBhcmFtcz0ie3tjb2xvckJ5UGFyYW1zfX0iCiAgICAgICAgICBwcm9ncmVzcz0ie3twcm9ncmVzc319IgogICAgICAgICAgZWRnZS1sYWJlbC1mdW5jdGlvbj0iW1tlZGdlTGFiZWxGdW5jdGlvbl1dIgogICAgICAgICAgZWRnZS13aWR0aC1mdW5jdGlvbj0iW1tlZGdlV2lkdGhGdW5jdGlvbl1dIgogICAgICAgICAgbm9kZS1uYW1lcy10by1oZWFsdGgtcGlsbHM9Iltbbm9kZU5hbWVzVG9IZWFsdGhQaWxsc11dIgogICAgICAgICAgaGVhbHRoLXBpbGwtc3RlcC1pbmRleD0iW1toZWFsdGhQaWxsU3RlcEluZGV4XV0iCiAgICAgICAgICBoYW5kbGUtbm9kZS1zZWxlY3RlZD0iW1toYW5kbGVOb2RlU2VsZWN0ZWRdXSIKICAgICAgICAgIGhhbmRsZS1lZGdlLXNlbGVjdGVkPSJbW2hhbmRsZUVkZ2VTZWxlY3RlZF1dIgogICAgICAgICAgdHJhY2UtaW5wdXRzPSJbW3RyYWNlSW5wdXRzXV0iCiAgICAgICAgICBhdXRvLWV4dHJhY3Qtbm9kZXM9IltbYXV0b0V4dHJhY3ROb2Rlc11dIgogICAgICAgID48L3RmLWdyYXBoPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBpZD0iaW5mbyI+CiAgICAgICAgPHRmLWdyYXBoLWluZm8KICAgICAgICAgIGlkPSJncmFwaC1pbmZvIgogICAgICAgICAgdGl0bGU9InNlbGVjdGVkIgogICAgICAgICAgZ3JhcGgtaGllcmFyY2h5PSJbW2dyYXBoSGllcmFyY2h5XV0iCiAgICAgICAgICByZW5kZXItaGllcmFyY2h5PSJbW3JlbmRlckhpZXJhcmNoeV1dIgogICAgICAgICAgZ3JhcGg9IltbZ3JhcGhdXSIKICAgICAgICAgIHNlbGVjdGVkLW5vZGU9Int7c2VsZWN0ZWROb2RlfX0iCiAgICAgICAgICBzZWxlY3RlZC1ub2RlLWluY2x1ZGU9Int7X3NlbGVjdGVkTm9kZUluY2x1ZGV9fSIKICAgICAgICAgIGhpZ2hsaWdodGVkLW5vZGU9Int7X2hpZ2hsaWdodGVkTm9kZX19IgogICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgY29sb3ItYnktcGFyYW1zPSJbW2NvbG9yQnlQYXJhbXNdXSIKICAgICAgICAgIGRlYnVnZ2VyLWRhdGEtZW5hYmxlZD0iW1tkZWJ1Z2dlckRhdGFFbmFibGVkXV0iCiAgICAgICAgICBhcmUtaGVhbHRoLXBpbGxzLWxvYWRpbmc9IltbYXJlSGVhbHRoUGlsbHNMb2FkaW5nXV0iCiAgICAgICAgICBkZWJ1Z2dlci1udW1lcmljLWFsZXJ0cz0iW1tkZWJ1Z2dlck51bWVyaWNBbGVydHNdXSIKICAgICAgICAgIG5vZGUtbmFtZXMtdG8taGVhbHRoLXBpbGxzPSJbW25vZGVOYW1lc1RvSGVhbHRoUGlsbHNdXSIKICAgICAgICAgIGFsbC1zdGVwcy1tb2RlLWVuYWJsZWQ9Int7YWxsU3RlcHNNb2RlRW5hYmxlZH19IgogICAgICAgICAgc3BlY2lmaWMtaGVhbHRoLXBpbGwtc3RlcD0ie3tzcGVjaWZpY0hlYWx0aFBpbGxTdGVwfX0iCiAgICAgICAgICBoZWFsdGgtcGlsbC1zdGVwLWluZGV4PSJ7e2hlYWx0aFBpbGxTdGVwSW5kZXh9fSIKICAgICAgICAgIGNvbXBhdC1ub2RlLXRpdGxlPSJbW2NvbXBhdE5vZGVUaXRsZV1dIgogICAgICAgICAgb24tbm9kZS10b2dnbGUtaW5jbHVzaW9uPSJfb25Ob2RlSW5jbHVzaW9uVG9nZ2xlZCIKICAgICAgICAgIG9uLW5vZGUtdG9nZ2xlLXNlcmllc2dyb3VwPSJfb25Ob2RlU2VyaWVzR3JvdXBUb2dnbGVkIgogICAgICAgID48L3RmLWdyYXBoLWluZm8+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgYCx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixwTHQpXSxQTHQucHJvdG90eXBlLCJncmFwaEhpZXJhcmNoeSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIix3QXQpXSxQTHQucHJvdG90eXBlLCJncmFwaCIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxQTHQucHJvdG90eXBlLCJoaWVyYXJjaHlQYXJhbXMiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUEx0LnByb3RvdHlwZSwic3RhdHMiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUEx0LnByb3RvdHlwZSwicHJvZ3Jlc3MiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxQTHQucHJvdG90eXBlLCJ0cmFjZUlucHV0cyIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFBMdC5wcm90b3R5cGUsImF1dG9FeHRyYWN0Tm9kZXMiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLFBMdC5wcm90b3R5cGUsImNvbG9yQnkiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLFBMdC5wcm90b3R5cGUsImNvbG9yQnlQYXJhbXMiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSksZSgiZGVzaWduOnR5cGUiLFhBdCldLFBMdC5wcm90b3R5cGUsInJlbmRlckhpZXJhcmNoeSIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFBMdC5wcm90b3R5cGUsImRlYnVnZ2VyRGF0YUVuYWJsZWQiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxQTHQucHJvdG90eXBlLCJhcmVIZWFsdGhQaWxsc0xvYWRpbmciLHZvaWQgMCksdChbbyh7dHlwZTpBcnJheSxub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSxQTHQucHJvdG90eXBlLCJkZWJ1Z2dlck51bWVyaWNBbGVydHMiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUEx0LnByb3RvdHlwZSwibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwfSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxQTHQucHJvdG90eXBlLCJhbGxTdGVwc01vZGVFbmFibGVkIix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyLG5vdGlmeTohMH0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxQTHQucHJvdG90eXBlLCJzcGVjaWZpY0hlYWx0aFBpbGxTdGVwIix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLFBMdC5wcm90b3R5cGUsImhlYWx0aFBpbGxTdGVwSW5kZXgiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLFBMdC5wcm90b3R5cGUsInNlbGVjdGVkTm9kZSIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxQTHQucHJvdG90eXBlLCJjb21wYXROb2RlVGl0bGUiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUEx0LnByb3RvdHlwZSwiZWRnZVdpZHRoRnVuY3Rpb24iLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXJ9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sUEx0LnByb3RvdHlwZSwiX3NlbGVjdGVkTm9kZUluY2x1ZGUiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sUEx0LnByb3RvdHlwZSwiX2hpZ2hsaWdodGVkTm9kZSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxQTHQucHJvdG90eXBlLCJoYW5kbGVOb2RlU2VsZWN0ZWQiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUEx0LnByb3RvdHlwZSwiZWRnZUxhYmVsRnVuY3Rpb24iLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUEx0LnByb3RvdHlwZSwiaGFuZGxlRWRnZVNlbGVjdGVkIix2b2lkIDApLHQoW2EoInNlbGVjdGVkTm9kZSIsInJlbmRlckhpZXJhcmNoeSIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sUEx0LnByb3RvdHlwZSwiX3VwZGF0ZU5vZGVJbmNsdWRlIixudWxsKSx0KFthKCJncmFwaCIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sUEx0LnByb3RvdHlwZSwiX3NsaW1HcmFwaENoYW5nZWQiLG51bGwpLHQoW2EoImNvbG9yQnkiLCJncmFwaEhpZXJhcmNoeSIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sUEx0LnByb3RvdHlwZSwiX2Vuc3VyZVRlbXBsYXRlcyIsbnVsbCksUEx0PXQoW2koInRmLWdyYXBoLWJvYXJkIildLFBMdCk7bGV0IE5MdD1jbGFzcyBleHRlbmRzKHRyKHllKSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3Jhd1JlZ2V4SW5wdXQ9IiIsdGhpcy5fcHJldmlvdXNSZWdleElucHV0PSIiLHRoaXMuX3NlYXJjaFRpbWVvdXREZWxheT0xNTAsdGhpcy5fbWF4UmVnZXhSZXN1bHRzPTQyfWdldCBfcmVnZXhJbnB1dCgpe3JldHVybiB0aGlzLl9yYXdSZWdleElucHV0LnRyaW0oKX1fcmVnZXhJbnB1dENoYW5nZWQoKXt0aGlzLl9yZXF1ZXN0U2VhcmNoKCl9X2NsZWFyU2VhcmNoUmVzdWx0cygpe3RoaXMuc2V0KCJfcmVnZXhNYXRjaGVzIixbXSl9X3JlcXVlc3RTZWFyY2goKXt0aGlzLl9zZWFyY2hQZW5kaW5nfHwodGhpcy5fcmVnZXhJbnB1dCE9PXRoaXMuX3ByZXZpb3VzUmVnZXhJbnB1dD8odGhpcy5fc2VhcmNoUGVuZGluZz0hMCx0aGlzLl9leGVjdXRlU2VhcmNoKCksdGhpcy5hc3luYygoKCk9Pnt0aGlzLl9zZWFyY2hQZW5kaW5nPSExLHRoaXMuX3JlcXVlc3RTZWFyY2goKX0pLHRoaXMuX3NlYXJjaFRpbWVvdXREZWxheSkpOnRoaXMuX3NlYXJjaFBlbmRpbmc9ITEpfV9leGVjdXRlU2VhcmNoKCl7aWYodGhpcy5fcHJldmlvdXNSZWdleElucHV0PXRoaXMuX3JlZ2V4SW5wdXQsIXRoaXMuX3JlZ2V4SW5wdXQpcmV0dXJuIHZvaWQgdGhpcy5fY2xlYXJTZWFyY2hSZXN1bHRzKCk7dHJ5e3ZhciB0PW5ldyBSZWdFeHAodGhpcy5fcmVnZXhJbnB1dCl9Y2F0Y2godCl7cmV0dXJuIHZvaWQgdGhpcy5fY2xlYXJTZWFyY2hSZXN1bHRzKCl9Y29uc3QgZT1bXSxuPXRoaXMucmVuZGVySGllcmFyY2h5LmhpZXJhcmNoeS5nZXROb2RlTWFwKCk7d2UuZWFjaChuLCgobixpKT0+e2lmKGUubGVuZ3RoPj10aGlzLl9tYXhSZWdleFJlc3VsdHMpcmV0dXJuITE7dC50ZXN0KGkpJiZlLnB1c2goaSl9KSksdGhpcy5zZXQoIl9yZWdleE1hdGNoZXMiLGUpfV9tYXRjaENsaWNrZWQodCl7dGhpcy5zZXQoInNlbGVjdGVkTm9kZSIsdC5tb2RlbC5pdGVtKSxuQXQoe2FjdGlvbklkOllDdC5OT0RFX1NFQVJDSF9SRVNVTFRfRk9DVVNFRH0pfX07Tkx0LnRlbXBsYXRlPV9lYAogICAgPGRpdiBpZD0ic2VhcmNoLWNvbnRhaW5lciI+CiAgICAgIDxwYXBlci1pbnB1dAogICAgICAgIGlkPSJydW5zLXJlZ2V4IgogICAgICAgIGxhYmVsPSJTZWFyY2ggbm9kZXMgKHJlZ2V4KSIKICAgICAgICB2YWx1ZT0ie3tfcmF3UmVnZXhJbnB1dH19IgogICAgICA+CiAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICAgIDxkaXYgaWQ9InNlYXJjaC1yZXN1bHRzLWFuY2hvciI+CiAgICAgICAgPGRpdiBpZD0ic2VhcmNoLXJlc3VsdHMiPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfcmVnZXhNYXRjaGVzXV0iPgogICAgICAgICAgICA8ZGl2IGlkPSJzZWFyY2gtbWF0Y2giIG9uLWNsaWNrPSJfbWF0Y2hDbGlja2VkIj5bW2l0ZW1dXTwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxzdHlsZT4KICAgICAgI3NlYXJjaC1jb250YWluZXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIG92ZXJmbG93OiB2aXNpYmxlOwogICAgICB9CgogICAgICAjcnVucy1yZWdleCB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgICNzZWFyY2gtcmVzdWx0cy1hbmNob3IgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgI3NlYXJjaC1yZXN1bHRzIHsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgbWF4LWhlaWdodDogMjAwcHg7CiAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIH0KCiAgICAgICNzZWFyY2gtbWF0Y2ggewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIHBhZGRpbmc6IDNweDsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBkaXJlY3Rpb246IHJ0bDsKICAgICAgfQoKICAgICAgI3NlYXJjaC1tYXRjaDpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tdGItb3JhbmdlLXdlYWspOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQogICAgPC9zdHlsZT4KICBgLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLE5MdC5wcm90b3R5cGUsInJlbmRlckhpZXJhcmNoeSIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sTkx0LnByb3RvdHlwZSwic2VsZWN0ZWROb2RlIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLE5MdC5wcm90b3R5cGUsIl9yYXdSZWdleElucHV0Iix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLE5MdC5wcm90b3R5cGUsIl9wcmV2aW91c1JlZ2V4SW5wdXQiLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXJ9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sTkx0LnByb3RvdHlwZSwiX3NlYXJjaFRpbWVvdXREZWxheSIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLE5MdC5wcm90b3R5cGUsIl9zZWFyY2hQZW5kaW5nIix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLE5MdC5wcm90b3R5cGUsIl9tYXhSZWdleFJlc3VsdHMiLHZvaWQgMCksdChbbyh7dHlwZTpBcnJheX0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLE5MdC5wcm90b3R5cGUsIl9yZWdleE1hdGNoZXMiLHZvaWQgMCksdChbcygicmVuZGVySGllcmFyY2h5IiwiX3Jhd1JlZ2V4SW5wdXQiKSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxOTHQucHJvdG90eXBlLCJfcmVnZXhJbnB1dCIsbnVsbCksdChbYSgiX3JlZ2V4SW5wdXQiKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLE5MdC5wcm90b3R5cGUsIl9yZWdleElucHV0Q2hhbmdlZCIsbnVsbCksTkx0PXQoW2koInRmLWdyYXBoLW5vZGUtc2VhcmNoIildLE5MdCk7Y29uc3QgSUx0PS9kZXZpY2U6KFteOl0rOlswLTldKykkLyxPTHQ9W3tyZWdleDpJTHR9XSxSTHQ9W10sekx0PW5ldyBTZXQoW3prdC5DT01QVVRFX1RJTUUsemt0Lk1FTU9SWV0pO2xldCBETHQ9Y2xhc3MgZXh0ZW5kcyh0cihubCh5ZSkpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5Db2xvckJ5PXprdCx0aGlzLnN0YXRzPW51bGwsdGhpcy5kZXZpY2VzRm9yU3RhdHM9bnVsbCx0aGlzLmNvbG9yQnk9emt0LlNUUlVDVFVSRSx0aGlzLmRhdGFzZXRzPVtdLHRoaXMuX3NlbGVjdGVkUnVuSW5kZXg9MCx0aGlzLnRyYWNlSW5wdXRzPSExLHRoaXMuYXV0b0V4dHJhY3ROb2Rlcz0hMCx0aGlzLl9zZWxlY3RlZFRhZ0luZGV4PTAsdGhpcy5fc2VsZWN0ZWRHcmFwaFR5cGU9WEN0Lk9QX0dSQVBILHRoaXMuc2hvd1Nlc3Npb25SdW5zRHJvcGRvd249ITAsdGhpcy5zaG93VXBsb2FkQnV0dG9uPSEwLHRoaXMuX2xlZ2VuZE9wZW5lZD0hMCx0aGlzLl9kb3dubG9hZEZpbGVuYW1lPSJncmFwaC5wbmcifV9vbkdyYXBoVHlwZUNoYW5nZWRCeVVzZXJHZXN0dXJlKCl7bkF0KHthY3Rpb25JZDpZQ3QuR1JBUEhfVFlQRV9DSEFOR0VELGV2ZW50TGFiZWw6dGhpcy5fc2VsZWN0ZWRHcmFwaFR5cGV9KX1fb25Db2xvckJ5Q2hhbmdlZEJ5VXNlckdlc3R1cmUoKXtuQXQoe2FjdGlvbklkOllDdC5OT0RFX0NPTE9SX01PREVfQ0hBTkdFRCxldmVudExhYmVsOnRoaXMuY29sb3JCeX0pfV9vblRyYWNlSW5wdXRzQ2hhbmdlZEJ5VXNlckdlc3R1cmUoKXtuQXQoe2FjdGlvbklkOllDdC5UUkFDRV9JTlBVVF9NT0RFX1RPR0dMRUR9KX1feGxhQ2x1c3RlcnNQcm92aWRlZCh0KXtyZXR1cm4gdCYmdC5oaWVyYXJjaHkmJnQuaGllcmFyY2h5LnhsYUNsdXN0ZXJzLmxlbmd0aD4wfV9zdGF0c0NoYW5nZWQodCl7aWYobnVsbCE9dCl7dmFyIGU9e307d2UuZWFjaCh0LmRldl9zdGF0cywoZnVuY3Rpb24odCl7dmFyIG49d2Uuc29tZShPTHQsKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlZ2V4LnRlc3QodC5kZXZpY2UpfSkpLGk9d2Uuc29tZShSTHQsKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlZ2V4LnRlc3QodC5kZXZpY2UpfSkpO24mJiFpJiYoZVt0LmRldmljZV09ITApfSkpLHRoaXMuc2V0KCJkZXZpY2VzRm9yU3RhdHMiLGUpfX1nZXQgX2N1cnJlbnREZXZpY2VzKCl7dmFyIHQ9dGhpcy5kZXZpY2VzRm9yU3RhdHM7Y29uc3QgZT10aGlzLnN0YXRzLG49KGU/ZS5kZXZfc3RhdHM6W10pLm1hcCgodD0+dC5kZXZpY2UpKS5maWx0ZXIoKHQ9Pk9MdC5zb21lKChlPT5lLnJlZ2V4LnRlc3QodCkpKSkpLGk9ZEF0KG4pO2lmKDE9PWkubGVuZ3RoKXtjb25zdCB0PWlbMF0ubWF0Y2goSUx0KTt0JiYoaVswXT10WzFdKX1yZXR1cm4gbi5tYXAoKChlLG4pPT57bGV0IHI9bnVsbDtyZXR1cm4gUkx0LmZvckVhY2goKHQ9Pnt0LnJlZ2V4LnRlc3QoZSkmJihyPXQubXNnKX0pKSx7ZGV2aWNlOmUsc3VmZml4Omlbbl0sdXNlZDp0W2VdLGlnbm9yZWRNc2c6cn19KSl9X2RldmljZUNoZWNrYm94Q2xpY2tlZCh0KXtjb25zdCBlPXQudGFyZ2V0LG49T2JqZWN0LmFzc2lnbih7fSx0aGlzLmRldmljZXNGb3JTdGF0cyksaT1lLnZhbHVlO2UuY2hlY2tlZD9uW2ldPSEwOmRlbGV0ZSBuW2ldLHRoaXMuc2V0KCJkZXZpY2VzRm9yU3RhdHMiLG4pfV9udW1UYWdzKHQsZSl7cmV0dXJuIHRoaXMuX2dldFRhZ3ModCxlKS5sZW5ndGh9X2dldFRhZ3ModCxlKXtyZXR1cm4gdCYmdFtlXT90W2VdLnRhZ3M6W119X2ZpdCgpe3RoaXMuZmlyZSgiZml0LXRhcCIpfV9pc0dyYWRpZW50Q29sb3JpbmcodCxlKXtyZXR1cm4gekx0LmhhcyhlKSYmbnVsbCE9dH1fZXF1YWxzKHQsZSl7cmV0dXJuIHQ9PT1lfWdldCBfY3VycmVudERldmljZVBhcmFtcygpe2NvbnN0IHQ9dGhpcy5jb2xvckJ5UGFyYW1zLmRldmljZS5maWx0ZXIoKHQ9Pk9MdC5zb21lKChlPT5lLnJlZ2V4LnRlc3QodC5kZXZpY2UpKSkpKSxlPWRBdCh0Lm1hcCgodD0+dC5kZXZpY2UpKSk7aWYoMT09ZS5sZW5ndGgpe3ZhciBuPWVbMF0ubWF0Y2goSUx0KTtuJiYoZVswXT1uWzFdKX1yZXR1cm4gdC5tYXAoKCh0LG4pPT4oe2RldmljZTplW25dLGNvbG9yOnQuY29sb3J9KSkpfWdldCBfY3VycmVudFhsYUNsdXN0ZXJQYXJhbXMoKXtyZXR1cm4gdGhpcy5jb2xvckJ5UGFyYW1zLnhsYV9jbHVzdGVyfWdldCBfY3VycmVudEdyYWRpZW50UGFyYW1zKCl7dmFyIHQ9dGhpcy5jb2xvckJ5UGFyYW1zLGU9dGhpcy5jb2xvckJ5O2lmKCF0aGlzLl9pc0dyYWRpZW50Q29sb3JpbmcodGhpcy5zdGF0cyxlKSlyZXR1cm47Y29uc3Qgbj10W2VdO2xldCBpPW4ubWluVmFsdWUscj1uLm1heFZhbHVlO3JldHVybiBlPT09emt0Lk1FTU9SWT8oaT11QXQoaSxsQXQpLHI9dUF0KHIsbEF0KSk6ZT09PXprdC5DT01QVVRFX1RJTUUmJihpPXVBdChpLGNBdCkscj11QXQocixjQXQpKSx7bWluVmFsdWU6aSxtYXhWYWx1ZTpyLHN0YXJ0Q29sb3I6bi5zdGFydENvbG9yLGVuZENvbG9yOm4uZW5kQ29sb3J9fWRvd25sb2FkKCl7dGhpcy5maXJlKCJkb3dubG9hZC1pbWFnZS1yZXF1ZXN0ZWQiLHRoaXMuX2Rvd25sb2FkRmlsZW5hbWUpfV91cGRhdGVGaWxlSW5wdXQodCl7Y29uc3QgZT10LnRhcmdldC5maWxlc1swXTtpZighZSlyZXR1cm47bGV0IG49ZS5uYW1lO2NvbnN0IGk9bi5sYXN0SW5kZXhPZigiLiIpO2k+PTAmJihuPW4uc3Vic3RyaW5nKDAsaSkpO2NvbnN0IHI9bi5sYXN0SW5kZXhPZigiLyIpO3I+PTAmJihuPW4uc3Vic3RyaW5nKHIrMSkpLHRoaXMuX3NldERvd25sb2FkRmlsZW5hbWUobiksdGhpcy5zZXQoInNlbGVjdGVkRmlsZSIsdCksbkF0KHthY3Rpb25JZDpZQ3QuVVBMT0FERURfR1JBUEhfRlJPTV9GSUxFU1lTVEVNfSl9X2RhdGFzZXRzQ2hhbmdlZCh0LGUpe3ZhciBuO251bGwhPWUmJih0aGlzLl9zZWxlY3RlZFJ1bkluZGV4PTApLHRoaXMuX3NldERvd25sb2FkRmlsZW5hbWUobnVsbD09PShuPXRoaXMuZGF0YXNldHNbdGhpcy5fc2VsZWN0ZWRSdW5JbmRleF0pfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLm5hbWUpfV9jb21wdXRlU2VsZWN0aW9uKHQsZSxuLGkpe3JldHVybiB0W2VdJiZ0W2VdLnRhZ3Nbbl0/e3J1bjp0W2VdLm5hbWUsdGFnOnRbZV0udGFnc1tuXS50YWcsdHlwZTppfTpudWxsfV9zZWxlY3RlZFJ1bkluZGV4Q2hhbmdlZCh0KXt2YXIgZTt0aGlzLmRhdGFzZXRzJiYodGhpcy5jb2xvckJ5PXprdC5TVFJVQ1RVUkUsdGhpcy5fc2VsZWN0ZWRUYWdJbmRleD0wLHRoaXMuX3NlbGVjdGVkR3JhcGhUeXBlPXRoaXMuX2dldERlZmF1bHRTZWxlY3Rpb25UeXBlKCksdGhpcy50cmFjZUlucHV0cz0hMSx0aGlzLl9zZXREb3dubG9hZEZpbGVuYW1lKG51bGw9PT0oZT10aGlzLmRhdGFzZXRzW3RdKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5uYW1lKSl9X3NlbGVjdGVkVGFnSW5kZXhDaGFuZ2VkKCl7dGhpcy5fc2VsZWN0ZWRHcmFwaFR5cGU9dGhpcy5fZ2V0RGVmYXVsdFNlbGVjdGlvblR5cGUoKX1fZ2V0RGVmYXVsdFNlbGVjdGlvblR5cGUoKXtjb25zdHtkYXRhc2V0czp0LF9zZWxlY3RlZFJ1bkluZGV4OmUsX3NlbGVjdGVkVGFnSW5kZXg6bn09dGhpcztpZighdHx8IXRbZV18fCF0W2VdLnRhZ3Nbbl18fHRbZV0udGFnc1tuXS5vcEdyYXBoKXJldHVybiBYQ3QuT1BfR1JBUEg7Y29uc3QgaT10W2VdO3JldHVybiBpLnRhZ3Nbbl0ucHJvZmlsZT9YQ3QuUFJPRklMRTppLnRhZ3Nbbl0uY29uY2VwdHVhbEdyYXBoP1hDdC5DT05DRVBUVUFMX0dSQVBIOlhDdC5PUF9HUkFQSH1fZ2V0RmlsZSgpe3RoaXMuJCQoIiNmaWxlIikuY2xpY2soKX1fc2V0RG93bmxvYWRGaWxlbmFtZSh0KXt0aGlzLl9kb3dubG9hZEZpbGVuYW1lPSh0fHwiZ3JhcGgiKSsiLnBuZyJ9X3N0YXRzTm90TnVsbCh0KXtyZXR1cm4gbnVsbCE9PXR9X3RvZ2dsZUxlZ2VuZE9wZW4oKXt0aGlzLnNldCgiX2xlZ2VuZE9wZW5lZCIsIXRoaXMuX2xlZ2VuZE9wZW5lZCl9X2dldFRvZ2dsZUxlZ2VuZEljb24odCl7cmV0dXJuIHQ/ImV4cGFuZC1tb3JlIjoiZXhwYW5kLWxlc3MifV9nZXRTZWxlY3Rpb25PcEdyYXBoRGlzYWJsZWQodCxlLG4pe3JldHVybiF0W2VdfHwhdFtlXS50YWdzW25dfHwhdFtlXS50YWdzW25dLm9wR3JhcGh9X2dldFNlbGVjdGlvblByb2ZpbGVEaXNhYmxlZCh0LGUsbil7cmV0dXJuIXRbZV18fCF0W2VdLnRhZ3Nbbl18fCF0W2VdLnRhZ3Nbbl0ucHJvZmlsZX1fZ2V0U2VsZWN0aW9uQ29uY2VwdHVhbEdyYXBoRGlzYWJsZWQodCxlLG4pe3JldHVybiF0W2VdfHwhdFtlXS50YWdzW25dfHwhdFtlXS50YWdzW25dLmNvbmNlcHR1YWxHcmFwaH19O0RMdC50ZW1wbGF0ZT1fZWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGNvbG9yOiAjNTU1OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgLS10Yi1ncmFwaC1jb250cm9scy10aXRsZS1jb2xvcjogIzAwMDsKICAgICAgICAtLXRiLWdyYXBoLWNvbnRyb2xzLWxlZ2VuZC10ZXh0LWNvbG9yOiAjMDAwOwogICAgICAgIC0tdGItZ3JhcGgtY29udHJvbHMtdGV4dC1jb2xvcjogIzU1NTsKICAgICAgICAtLXRiLWdyYXBoLWNvbnRyb2xzLXRpdGxlLWZvbnQtc2l6ZTogMTRweDsKICAgICAgICAtLXRiLWdyYXBoLWNvbnRyb2xzLXN1YnRpdGxlLWZvbnQtc2l6ZTogMTRweDsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1zaGFyZWQtaW5wdXQtc3R5bGVfLV9mb250LXNpemU6IDE0cHg7CiAgICAgICAgLS1wYXBlci1mb250LXN1YmhlYWRfLV9mb250LXNpemU6IDE0cHg7CiAgICAgIH0KCiAgICAgIDpob3N0KC5kYXJrLW1vZGUpIHsKICAgICAgICAtLXRiLWdyYXBoLWNvbnRyb2xzLXRpdGxlLWNvbG9yOiAjZmZmOwogICAgICAgIC0tdGItZ3JhcGgtY29udHJvbHMtbGVnZW5kLXRleHQtY29sb3I6ICNmM2YzZjM7CiAgICAgICAgLS10Yi1ncmFwaC1jb250cm9scy10ZXh0LWNvbG9yOiAjZWVlOwogICAgICB9CgogICAgICBwYXBlci1kcm9wZG93bi1tZW51IHsKICAgICAgICAtLXBhcGVyLWRyb3Bkb3duLW1lbnUtaW5wdXQ6IHsKICAgICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgICBjb2xvcjogZ3JheTsKICAgICAgICB9CiAgICAgICAgLS1pcm9uLWljb24td2lkdGg6IDE1cHg7CiAgICAgICAgLS1pcm9uLWljb24taGVpZ2h0OiAxNXB4OwogICAgICAgIC0tcHJpbWFyeS10ZXh0LWNvbG9yOiBncmF5OwogICAgICAgIC0tcGFwZXItaXRlbS1taW4taGVpZ2h0OiAzMHB4OwogICAgICB9CgogICAgICBwYXBlci1idXR0b25bcmFpc2VkXS5rZXlib2FyZC1mb2N1cyB7CiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgICAgfQoKICAgICAgLnJ1bi1kcm9wZG93biB7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXI6IHsKICAgICAgICAgIHBhZGRpbmc6IDVweCAwIDVweCA1cHg7CiAgICAgICAgfQogICAgICB9CgogICAgICB0YWJsZSB7CiAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKICAgICAgICBib3JkZXItc3BhY2luZzogMDsKICAgICAgfQoKICAgICAgdGFibGUgdHIgewogICAgICAgIGhlaWdodDogMjBweDsKICAgICAgfQoKICAgICAgdGFibGUgdGQgewogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICB9CgogICAgICAuYWxsY29udHJvbHMgewogICAgICAgIHBhZGRpbmc6IDAgMjBweCAyMHB4OwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CgogICAgICAubGVnZW5kLWhvbGRlciB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tc2Vjb25kYXJ5LWJhY2tncm91bmQtY29sb3IpOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLWdyYXBoLWNvbnRyb2xzLXRleHQtY29sb3IpOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAubGVnZW5kLXRvb2xiYXIgewogICAgICAgIGFwcGVhcmFuY2U6IG5vbmU7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogaW5oZXJpdDsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2NjYzsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2NjYzsKICAgICAgICBib3JkZXItcmlnaHQ6IG5vbmU7CiAgICAgICAgYm9yZGVyLWxlZnQ6IG5vbmU7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1ncmFwaC1jb250cm9scy1sZWdlbmQtdGV4dC1jb2xvcik7CiAgICAgICAgZm9udDogaW5oZXJpdDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAubGVnZW5kLXRvb2xiYXIsCiAgICAgIC5sZWdlbmQtY29udGVudCB7CiAgICAgICAgcGFkZGluZzogOHB4IDIwcHg7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtbGVnZW5kLWJ1dHRvbiB7CiAgICAgICAgbWF4LWhlaWdodDogMjBweDsKICAgICAgICBtYXgtd2lkdGg6IDIwcHg7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1sZWdlbmQtdGV4dCB7CiAgICAgICAgZm9udC1zaXplOiB2YXIoLS10Yi1ncmFwaC1jb250cm9scy1zdWJ0aXRsZS1mb250LXNpemUpOwogICAgICB9CgogICAgICBwYXBlci1yYWRpby1idXR0b24gewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmc6IDVweDsKICAgICAgfQogICAgICBzdmcuaWNvbiwKICAgICAgdGYtZ3JhcGgtaWNvbiB7CiAgICAgICAgd2lkdGg6IDYwcHg7CiAgICAgICAgaGVpZ2h0OiAxOHB4OwogICAgICB9CiAgICAgIC5kb21haW5WYWx1ZXMgewogICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7CiAgICAgICAgd2lkdGg6IDE2NXB4OwogICAgICB9CiAgICAgIC5kb21haW5TdGFydCB7CiAgICAgICAgZmxvYXQ6IGxlZnQ7CiAgICAgIH0KICAgICAgLmRvbWFpbkVuZCB7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICB9CiAgICAgIC5jb2xvckJveCB7CiAgICAgICAgd2lkdGg6IDIwcHg7CiAgICAgIH0KCiAgICAgIC5pbWFnZS1pY29uIHsKICAgICAgICB3aWR0aDogMjRweDsKICAgICAgICBoZWlnaHQ6IDI0cHg7CiAgICAgIH0KCiAgICAgIC5oZWxwLWljb24gewogICAgICAgIGhlaWdodDogMTVweDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQoKICAgICAgLmdyYXkgewogICAgICAgIGNvbG9yOiAjNjY2OwogICAgICB9CgogICAgICAudGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tdGItZ3JhcGgtY29udHJvbHMtdGl0bGUtZm9udC1zaXplKTsKICAgICAgICBtYXJnaW46IDhweCA1cHggOHB4IDA7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLWdyYXBoLWNvbnRyb2xzLXRpdGxlLWNvbG9yKTsKICAgICAgfQogICAgICAudGl0bGUgc21hbGwgewogICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgIH0KICAgICAgLmRldmljZUxpc3QsCiAgICAgIC54bGFDbHVzdGVyTGlzdCB7CiAgICAgICAgbWF4LWhlaWdodDogMjAwcHg7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgfQoKICAgICAgI2ZpbGUgewogICAgICAgIHBhZGRpbmc6IDhweCAwOwogICAgICB9CgogICAgICAuY29sb3ItbGVnZW5kLXJvdyB7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBjbGVhcjogYm90aDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGhlaWdodDogMjBweDsKICAgICAgICBtYXJnaW4tdG9wOiA1cHg7CiAgICAgIH0KCiAgICAgIC5jb2xvci1sZWdlbmQtcm93IC5sYWJlbCwKICAgICAgLmNvbG9yLWxlZ2VuZC1yb3cgc3ZnLAogICAgICAuY29sb3ItbGVnZW5kLXJvdyB0Zi1ncmFwaC1pY29uIHsKICAgICAgICBmbGV4OiAwIDAgNDBweDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDIwcHg7CiAgICAgIH0KCiAgICAgIC5kZXZpY2VzLWNoZWNrYm94IGlucHV0IHsKICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgICAgIH0KCiAgICAgIC5jb250cm9sLWhvbGRlciAuaWNvbi1idXR0b24gewogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tdGItZ3JhcGgtY29udHJvbHMtc3VidGl0bGUtZm9udC1zaXplKTsKICAgICAgICBtYXJnaW46IDAgLTVweDsKICAgICAgICBwYWRkaW5nOiA1cHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLWdyYXBoLWNvbnRyb2xzLXRleHQtY29sb3IpOwogICAgICB9CgogICAgICAuYnV0dG9uLXRleHQgewogICAgICAgIHBhZGRpbmctbGVmdDogMjBweDsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTsKICAgICAgfQoKICAgICAgLnVwbG9hZC1idXR0b24gewogICAgICAgIHdpZHRoOiAxNjVweDsKICAgICAgICBoZWlnaHQ6IDI1cHg7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7CiAgICAgICAgbWFyZ2luLXRvcDogNHB4OwogICAgICB9CgogICAgICAuYnV0dG9uLWljb24gewogICAgICAgIHdpZHRoOiAyNnB4OwogICAgICAgIGhlaWdodDogMjZweDsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItb3JhbmdlLTUwMCk7CiAgICAgIH0KCiAgICAgIC5oaWRkZW4taW5wdXQgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5hbGxjb250cm9scyAuY29udHJvbC1ob2xkZXIgewogICAgICAgIGNsZWFyOiBib3RoOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICB9CgogICAgICAuYWxsY29udHJvbHMgLmNvbnRyb2wtaG9sZGVyLmNvbnRyb2wtb3B0aW9ucyB7CiAgICAgICAgcGFkZGluZzogMCAwIDE1cHggMTVweDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICB9CgogICAgICAuYWxsY29udHJvbHMgLmNvbnRyb2wtaG9sZGVyIHBhcGVyLXRvZ2dsZS1idXR0b24gewogICAgICAgIG1hcmdpbi1ib3R0b206IDVweDsKICAgICAgfQoKICAgICAgc3Bhbi5jb3VudGVyIHsKICAgICAgICBmb250LXNpemU6IHZhcigtLXRiLWdyYXBoLWNvbnRyb2xzLXN1YnRpdGxlLWZvbnQtc2l6ZSk7CiAgICAgICAgY29sb3I6IGdyYXk7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDRweDsKICAgICAgfQoKICAgICAgLnJ1bnMtcm93IC50aXRsZSwKICAgICAgLnRhZ3Mtcm93IC50aXRsZSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogYmFzZWxpbmU7CiAgICAgIH0KCiAgICAgIC5ydW5zLXJvdyBwYXBlci1pdGVtLAogICAgICAudGFncy1yb3cgcGFwZXItaXRlbSB7CiAgICAgICAgLS1wYXBlci1pdGVtOiB7CiAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIH0KICAgICAgfQoKICAgICAgdGFibGUuY29udHJvbC1ob2xkZXIgewogICAgICAgIGJvcmRlcjogMDsKICAgICAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwogICAgICB9CgogICAgICB0YWJsZS50Zi1ncmFwaC1jb250cm9scyB0ZC5pbnB1dC1lbGVtZW50LXRhYmxlLWRhdGEgewogICAgICAgIHBhZGRpbmc6IDAgMCAwIDIwcHg7CiAgICAgIH0KCiAgICAgIC5zcGFjZXIgewogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgfQoKICAgICAgLmNvbG9yLXRleHQgewogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5jb2xvci10ZXh0LmdyYWRpZW50LWNvbnRhaW5lciB7CiAgICAgICAgbWFyZ2luOiAwIDVweDsKICAgICAgfQoKICAgICAgLyoqIE92ZXJyaWRlIGlubGluZSBzdHlsZXMgdGhhdCBzdXBwcmVzcyBwb2ludGVyIGV2ZW50cyBmb3IgZGlzYWJsZWQgYnV0dG9ucy4gT3RoZXJ3aXNlLCB0aGUgKi8KICAgICAgLyogIHRvb2x0aXBzIGRvIG5vdCBhcHBlYXIuICovCiAgICAgIHBhcGVyLXJhZGlvLWdyb3VwIHBhcGVyLXJhZGlvLWJ1dHRvbiB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG8gIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgLmxlZ2VuZC1jbGFyaWZpZXIgewogICAgICAgIGNvbG9yOiAjMjY2MjM2OwogICAgICAgIGN1cnNvcjogaGVscDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICAgIH0KCiAgICAgIC5sZWdlbmQtY2xhcmlmaWVyIHBhcGVyLXRvb2x0aXAgewogICAgICAgIHdpZHRoOiAxNTBweDsKICAgICAgfQoKICAgICAgLyoqIE90aGVyd2lzZSwgcG9seW1lciBVSSBjb250cm9scyBhcHBlYXIgYXRvcCBub2RlIHNlYXJjaC4gKi8KICAgICAgdGYtZ3JhcGgtbm9kZS1zZWFyY2ggewogICAgICAgIHotaW5kZXg6IDE7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIHBhcGVyLWRyb3Bkb3duLW1lbnUgewogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGNsYXNzPSJhbGxjb250cm9scyI+CiAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtaG9sZGVyIj4KICAgICAgICA8dGYtZ3JhcGgtbm9kZS1zZWFyY2gKICAgICAgICAgIHNlbGVjdGVkLW5vZGU9Int7c2VsZWN0ZWROb2RlfX0iCiAgICAgICAgICByZW5kZXItaGllcmFyY2h5PSJbW3JlbmRlckhpZXJhcmNoeV1dIgogICAgICAgID48L3RmLWdyYXBoLW5vZGUtc2VhcmNoPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ob2xkZXIiPgogICAgICAgIDxwYXBlci1idXR0b24gY2xhc3M9Imljb24tYnV0dG9uIiBvbi10YXA9Il9maXQiIGFsdD0iRml0IHRvIHNjcmVlbiI+CiAgICAgICAgICA8aXJvbi1pY29uIGljb249ImFzcGVjdC1yYXRpbyIgY2xhc3M9ImJ1dHRvbi1pY29uIj48L2lyb24taWNvbj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJidXR0b24tdGV4dCI+Rml0IHRvIHNjcmVlbjwvc3Bhbj4KICAgICAgICA8L3BhcGVyLWJ1dHRvbj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtaG9sZGVyIj4KICAgICAgICA8cGFwZXItYnV0dG9uCiAgICAgICAgICBjbGFzcz0iaWNvbi1idXR0b24iCiAgICAgICAgICBvbi1jbGljaz0iZG93bmxvYWQiCiAgICAgICAgICBhbHQ9IkRvd25sb2FkIFBORyIKICAgICAgICA+CiAgICAgICAgICA8aXJvbi1pY29uIGljb249ImZpbGUtZG93bmxvYWQiIGNsYXNzPSJidXR0b24taWNvbiI+PC9pcm9uLWljb24+CiAgICAgICAgICA8c3BhbiBjbGFzcz0iYnV0dG9uLXRleHQiPkRvd25sb2FkIFBORzwvc3Bhbj4KICAgICAgICA8L3BhcGVyLWJ1dHRvbj4KICAgICAgPC9kaXY+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzaG93VXBsb2FkQnV0dG9uXV0iPgogICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtaG9sZGVyIj4KICAgICAgICAgIDxwYXBlci1idXR0b24KICAgICAgICAgICAgY2xhc3M9Imljb24tYnV0dG9uIgogICAgICAgICAgICBvbi1jbGljaz0iX2dldEZpbGUiCiAgICAgICAgICAgIGFsdD0iVXBsb2FkIGZpbGUiCiAgICAgICAgICAgIHRpdGxlPSJVcGxvYWQgYSBwYnR4dCBmaWxlIHRvIHZpZXcgYSBncmFwaCBmcm9tIHRoZSBsb2NhbCBmaWxlc3lzdGVtIgogICAgICAgICAgPgogICAgICAgICAgICA8aXJvbi1pY29uIGljb249ImZpbGUtdXBsb2FkIiBjbGFzcz0iYnV0dG9uLWljb24iPjwvaXJvbi1pY29uPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iYnV0dG9uLXRleHQiPlVwbG9hZCBmaWxlPC9zcGFuPgogICAgICAgICAgPC9wYXBlci1idXR0b24+CgogICAgICAgICAgPGRpdiBjbGFzcz0iaGlkZGVuLWlucHV0Ij4KICAgICAgICAgICAgPGlucHV0CiAgICAgICAgICAgICAgdHlwZT0iZmlsZSIKICAgICAgICAgICAgICBpZD0iZmlsZSIKICAgICAgICAgICAgICBuYW1lPSJmaWxlIgogICAgICAgICAgICAgIG9uLWNoYW5nZT0iX3VwZGF0ZUZpbGVJbnB1dCIKICAgICAgICAgICAgICBhY2NlcHQ9Ii5wYnR4dCIKICAgICAgICAgICAgLz4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWhvbGRlciBydW5zLXJvdyI+CiAgICAgICAgPGRpdiBjbGFzcz0idGl0bGUiPgogICAgICAgICAgUnVuIDxzcGFuIGNsYXNzPSJjb3VudGVyIj4oW1tkYXRhc2V0cy5sZW5ndGhdXSk8L3NwYW4+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUKICAgICAgICAgIG5vLWxhYmVsLWZsb2F0CiAgICAgICAgICBuby1hbmltYXRpb25zCiAgICAgICAgICBub2luawogICAgICAgICAgaG9yaXpvbnRhbC1hbGlnbj0ibGVmdCIKICAgICAgICAgIGNsYXNzPSJydW4tZHJvcGRvd24iCiAgICAgICAgPgogICAgICAgICAgPHBhcGVyLWxpc3Rib3gKICAgICAgICAgICAgY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiCiAgICAgICAgICAgIHNlbGVjdGVkPSJ7e19zZWxlY3RlZFJ1bkluZGV4fX0iCiAgICAgICAgICAgIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiCiAgICAgICAgICA+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbZGF0YXNldHNdXSI+CiAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+W1tpdGVtLm5hbWVdXTwvcGFwZXItaXRlbT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgIDwvZGl2PgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Iltbc2hvd1Nlc3Npb25SdW5zRHJvcGRvd25dXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ob2xkZXIgdGFncy1yb3ciPgogICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGUiPgogICAgICAgICAgICBUYWcKICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvdW50ZXIiCiAgICAgICAgICAgICAgPihbW19udW1UYWdzKGRhdGFzZXRzLCBfc2VsZWN0ZWRSdW5JbmRleCldXSk8L3NwYW4KICAgICAgICAgICAgPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudQogICAgICAgICAgICBuby1sYWJlbC1mbG9hdAogICAgICAgICAgICBuby1hbmltYXRpb25zCiAgICAgICAgICAgIGhvcml6b250YWwtYWxpZ249ImxlZnQiCiAgICAgICAgICAgIG5vaW5rCiAgICAgICAgICAgIGNsYXNzPSJydW4tZHJvcGRvd24iCiAgICAgICAgICA+CiAgICAgICAgICAgIDxwYXBlci1saXN0Ym94CiAgICAgICAgICAgICAgY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiCiAgICAgICAgICAgICAgc2VsZWN0ZWQ9Int7X3NlbGVjdGVkVGFnSW5kZXh9fSIKICAgICAgICAgICAgICBzbG90PSJkcm9wZG93bi1jb250ZW50IgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPHRlbXBsYXRlCiAgICAgICAgICAgICAgICBpcz0iZG9tLXJlcGVhdCIKICAgICAgICAgICAgICAgIGl0ZW1zPSJbW19nZXRUYWdzKGRhdGFzZXRzLCBfc2VsZWN0ZWRSdW5JbmRleCldXSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8cGFwZXItaXRlbT5bW2l0ZW0uZGlzcGxheU5hbWVdXTwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDxkaXYgY2xhc3M9InRpdGxlIj5HcmFwaCB0eXBlPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtaG9sZGVyIGNvbnRyb2wtb3B0aW9ucyI+CiAgICAgICAgPHBhcGVyLXJhZGlvLWdyb3VwCiAgICAgICAgICBzZWxlY3RlZD0ie3tfc2VsZWN0ZWRHcmFwaFR5cGV9fSIKICAgICAgICAgIG9uLXBhcGVyLXJhZGlvLWdyb3VwLWNoYW5nZWQ9Il9vbkdyYXBoVHlwZUNoYW5nZWRCeVVzZXJHZXN0dXJlIgogICAgICAgID4KICAgICAgICAgIDwhLS0gTm90ZSB0aGF0IHRoZSBuYW1lIGhhcyB0byBtYXRjaCB0aGF0IG9mIHRmX2dyYXBoX2NvbW1vbi5TZWxlY3Rpb25UeXBlLiAtLT4KICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24KICAgICAgICAgICAgbmFtZT0ib3BfZ3JhcGgiCiAgICAgICAgICAgIGRpc2FibGVkPSJbW19nZXRTZWxlY3Rpb25PcEdyYXBoRGlzYWJsZWQoZGF0YXNldHMsIF9zZWxlY3RlZFJ1bkluZGV4LCBfc2VsZWN0ZWRUYWdJbmRleCldXSIKICAgICAgICAgICAgPk9wIGdyYXBoPC9wYXBlci1yYWRpby1idXR0b24KICAgICAgICAgID4KICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24KICAgICAgICAgICAgbmFtZT0iY29uY2VwdHVhbF9ncmFwaCIKICAgICAgICAgICAgZGlzYWJsZWQ9IltbX2dldFNlbGVjdGlvbkNvbmNlcHR1YWxHcmFwaERpc2FibGVkKGRhdGFzZXRzLCBfc2VsZWN0ZWRSdW5JbmRleCwgX3NlbGVjdGVkVGFnSW5kZXgpXV0iCiAgICAgICAgICAgID5Db25jZXB0dWFsIGdyYXBoPC9wYXBlci1yYWRpby1idXR0b24KICAgICAgICAgID4KICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24KICAgICAgICAgICAgbmFtZT0icHJvZmlsZSIKICAgICAgICAgICAgZGlzYWJsZWQ9IltbX2dldFNlbGVjdGlvblByb2ZpbGVEaXNhYmxlZChkYXRhc2V0cywgX3NlbGVjdGVkUnVuSW5kZXgsIF9zZWxlY3RlZFRhZ0luZGV4KV1dIgogICAgICAgICAgICA+UHJvZmlsZTwvcGFwZXItcmFkaW8tYnV0dG9uCiAgICAgICAgICA+CiAgICAgICAgPC9wYXBlci1yYWRpby1ncm91cD4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InRpdGxlIj5Ob2RlIG9wdGlvbnM8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ob2xkZXIgY29udHJvbC1vcHRpb25zIj4KICAgICAgICA8cGFwZXItdG9nZ2xlLWJ1dHRvbgogICAgICAgICAgY2hlY2tlZD0ie3t0cmFjZUlucHV0c319IgogICAgICAgICAgb24tY2hhbmdlPSJfb25UcmFjZUlucHV0c0NoYW5nZWRCeVVzZXJHZXN0dXJlIgogICAgICAgID4KICAgICAgICAgIFRyYWNlIGlucHV0cwogICAgICAgIDwvcGFwZXItdG9nZ2xlLWJ1dHRvbj4KICAgICAgICA8cGFwZXItdG9nZ2xlLWJ1dHRvbiBjaGVja2VkPSJ7e2F1dG9FeHRyYWN0Tm9kZXN9fSI+CiAgICAgICAgICBBdXRvLWV4dHJhY3QgaGlnaC1kZWdyZWUgbm9kZXMKICAgICAgICA8L3BhcGVyLXRvZ2dsZS1idXR0b24+CiAgICAgIDwvZGl2PgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbaGVhbHRoUGlsbHNGZWF0dXJlRW5hYmxlZF1dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWhvbGRlciI+CiAgICAgICAgICA8cGFwZXItdG9nZ2xlLWJ1dHRvbiBjaGVja2VkPSJ7e2hlYWx0aFBpbGxzVG9nZ2xlZE9ufX0iCiAgICAgICAgICAgID5TaG93IGhlYWx0aCBwaWxsczwvcGFwZXItdG9nZ2xlLWJ1dHRvbgogICAgICAgICAgPgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgICA8ZGl2IGNsYXNzPSJ0aXRsZSI+Q29sb3IgYnk8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ob2xkZXIgY29udHJvbC1vcHRpb25zIj4KICAgICAgICA8cGFwZXItcmFkaW8tZ3JvdXAKICAgICAgICAgIHNlbGVjdGVkPSJ7e2NvbG9yQnl9fSIKICAgICAgICAgIG9uLXBhcGVyLXJhZGlvLWdyb3VwLWNoYW5nZWQ9Il9vbkNvbG9yQnlDaGFuZ2VkQnlVc2VyR2VzdHVyZSIKICAgICAgICA+CiAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIG5hbWU9IltbQ29sb3JCeS5OT05FXV0iPk5vbmU8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KCiAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIG5hbWU9IltbQ29sb3JCeS5TVFJVQ1RVUkVdXSIKICAgICAgICAgICAgPlN0cnVjdHVyZTwvcGFwZXItcmFkaW8tYnV0dG9uCiAgICAgICAgICA+CgogICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBuYW1lPSJbW0NvbG9yQnkuREVWSUNFXV0iCiAgICAgICAgICAgID5EZXZpY2U8L3BhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgPgoKICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24KICAgICAgICAgICAgaWQ9InhsYS1jbHVzdGVyLXJhZGlvLWJ1dHRvbiIKICAgICAgICAgICAgbmFtZT0iW1tDb2xvckJ5LlhMQV9DTFVTVEVSXV0iCiAgICAgICAgICAgIGRpc2FibGVkPSJbWyFfeGxhQ2x1c3RlcnNQcm92aWRlZChyZW5kZXJIaWVyYXJjaHkpXV0iCiAgICAgICAgICA+CiAgICAgICAgICAgIFhMQSBjbHVzdGVyCiAgICAgICAgICA8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgICAgIDxwYXBlci10b29sdGlwCiAgICAgICAgICAgIGFuaW1hdGlvbi1kZWxheT0iMCIKICAgICAgICAgICAgZm9yPSJ4bGEtY2x1c3Rlci1yYWRpby1idXR0b24iCiAgICAgICAgICAgIHBvc2l0aW9uPSJyaWdodCIKICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgPgogICAgICAgICAgICBDb2xvcmluZyBieSBYTEEgY2x1c3RlciBpcyBvbmx5IGVuYWJsZWQgaWYgYXQgbGVhc3QgMSBvcCBzcGVjaWZpZXMKICAgICAgICAgICAgYW4gWExBIGNsdXN0ZXIuCiAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CgogICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgICBpZD0iY29tcHV0ZS10aW1lLXJhZGlvLWJ1dHRvbiIKICAgICAgICAgICAgbmFtZT0iW1tDb2xvckJ5LkNPTVBVVEVfVElNRV1dIgogICAgICAgICAgICBkaXNhYmxlZD0iW1shc3RhdHNdXSIKICAgICAgICAgID4KICAgICAgICAgICAgQ29tcHV0ZSB0aW1lCiAgICAgICAgICA8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgICAgIDxwYXBlci10b29sdGlwCiAgICAgICAgICAgIGFuaW1hdGlvbi1kZWxheT0iMCIKICAgICAgICAgICAgZm9yPSJjb21wdXRlLXRpbWUtcmFkaW8tYnV0dG9uIgogICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgID4KICAgICAgICAgICAgQ29sb3JpbmcgYnkgY29tcHV0ZSB0aW1lIGlzIG9ubHkgZW5hYmxlZCBpZiB0aGUgUnVuTWV0YWRhdGEgcHJvdG8gaXMKICAgICAgICAgICAgcGFzc2VkIHRvIHRoZSBGaWxlV3JpdGVyIHdoZW4gYSBzcGVjaWZpYyBzZXNzaW9uIGlzIHJ1bi4KICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KCiAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uCiAgICAgICAgICAgIGlkPSJtZW1vcnktcmFkaW8tYnV0dG9uIgogICAgICAgICAgICBuYW1lPSJbW0NvbG9yQnkuTUVNT1JZXV0iCiAgICAgICAgICAgIGRpc2FibGVkPSJbWyFzdGF0c11dIgogICAgICAgICAgPgogICAgICAgICAgICBNZW1vcnkKICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgPHBhcGVyLXRvb2x0aXAKICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICBmb3I9Im1lbW9yeS1yYWRpby1idXR0b24iCiAgICAgICAgICAgIHBvc2l0aW9uPSJyaWdodCIKICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgPgogICAgICAgICAgICBDb2xvcmluZyBieSBtZW1vcnkgaXMgb25seSBlbmFibGVkIGlmIHRoZSBSdW5NZXRhZGF0YSBwcm90byBpcwogICAgICAgICAgICBwYXNzZWQgdG8gdGhlIEZpbGVXcml0ZXIgd2hlbiBhIHNwZWNpZmljIHNlc3Npb24gaXMgcnVuLgogICAgICAgICAgPC9wYXBlci10b29sdGlwPgoKICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24KICAgICAgICAgICAgaWQ9InRwdS1jb21wYXRpYmlsaXR5LXJhZGlvLWJ1dHRvbiIKICAgICAgICAgICAgbmFtZT0iW1tDb2xvckJ5Lk9QX0NPTVBBVElCSUxJVFldXSIKICAgICAgICAgID4KICAgICAgICAgICAgVFBVIGNvbXBhdGliaWxpdHkKICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgPHBhcGVyLXRvb2x0aXAKICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICBmb3I9InRwdS1jb21wYXRpYmlsaXR5LXJhZGlvLWJ1dHRvbiIKICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICA+CiAgICAgICAgICAgIENvbG9yaW5nIGJ5IHdoZXRoZXIgYW4gb3BlcmF0aW9uIGlzIGNvbXBhdGlibGUgZm9yIHRoZSBUUFUgZGV2aWNlLgogICAgICAgICAgPC9wYXBlci10b29sdGlwPgogICAgICAgIDwvcGFwZXItcmFkaW8tZ3JvdXA+CiAgICAgICAgPHNwYW4gY2xhc3M9InNwYWNlciI+PC9zcGFuPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0ibGVnZW5kLWhvbGRlciI+CiAgICAgIDxidXR0b24gY2xhc3M9ImxlZ2VuZC10b29sYmFyIiBvbi1jbGljaz0iX3RvZ2dsZUxlZ2VuZE9wZW4iPgogICAgICAgIDxzcGFuIGNsYXNzPSJ0b2dnbGUtbGVnZW5kLXRleHQiPkxlZ2VuZDwvc3Bhbj4KICAgICAgICA8aXJvbi1pY29uCiAgICAgICAgICBpY29uPSJbW19nZXRUb2dnbGVMZWdlbmRJY29uKF9sZWdlbmRPcGVuZWQpXV0iCiAgICAgICAgICBjbGFzcz0idG9nZ2xlLWxlZ2VuZC1idXR0b24iCiAgICAgICAgPgogICAgICAgIDwvaXJvbi1pY29uPgogICAgICA8L2J1dHRvbj4KICAgICAgPGlyb24tY29sbGFwc2Ugb3BlbmVkPSJbW19sZWdlbmRPcGVuZWRdXSIgY2xhc3M9ImxlZ2VuZC1jb250ZW50Ij4KICAgICAgICA8IS0tIENvbG9yLW1vZGUtc3BlY2lmaWMgbGVnZW5kIGl0ZW1zIC0tPgogICAgICAgIDxkaXY+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzR3JhZGllbnRDb2xvcmluZyhzdGF0cywgY29sb3JCeSldXSI+CiAgICAgICAgICAgIDxzdmcgd2lkdGg9IjE0MCIgaGVpZ2h0PSIyMCIgY2xhc3M9ImNvbG9yLXRleHQgZ3JhZGllbnQtY29udGFpbmVyIj4KICAgICAgICAgICAgICA8ZGVmcz4KICAgICAgICAgICAgICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgICAgICAgICAgICBpZD0ibGluZWFyR3JhZGllbnQiCiAgICAgICAgICAgICAgICAgIHgxPSIwJSIKICAgICAgICAgICAgICAgICAgeTE9IjAlIgogICAgICAgICAgICAgICAgICB4Mj0iMTAwJSIKICAgICAgICAgICAgICAgICAgeTI9IjAlIgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICA8c3RvcAogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzdGFydCIKICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAlIgogICAgICAgICAgICAgICAgICAgIHN0b3AtY29sb3IkPSJbW19jdXJyZW50R3JhZGllbnRQYXJhbXMuc3RhcnRDb2xvcl1dIgogICAgICAgICAgICAgICAgICA+PC9zdG9wPgogICAgICAgICAgICAgICAgICA8c3RvcAogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJlbmQiCiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIxMDAlIgogICAgICAgICAgICAgICAgICAgIHN0b3AtY29sb3IkPSJbW19jdXJyZW50R3JhZGllbnRQYXJhbXMuZW5kQ29sb3JdXSIKICAgICAgICAgICAgICAgICAgPjwvc3RvcD4KICAgICAgICAgICAgICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICAgICAgICAgICAgPC9kZWZzPgogICAgICAgICAgICAgIDxyZWN0CiAgICAgICAgICAgICAgICB4PSIwIgogICAgICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgICAgIHdpZHRoPSIxMzUiCiAgICAgICAgICAgICAgICBoZWlnaHQ9IjIwIgogICAgICAgICAgICAgICAgZmlsbD0idXJsKCNsaW5lYXJHcmFkaWVudCkiCiAgICAgICAgICAgICAgICBzdHJva2U9ImJsYWNrIgogICAgICAgICAgICAgID48L3JlY3Q+CiAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJkb21haW5WYWx1ZXMgY29sb3ItdGV4dCI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZG9tYWluU3RhcnQiPltbX2N1cnJlbnRHcmFkaWVudFBhcmFtcy5taW5WYWx1ZV1dPC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZG9tYWluRW5kIj5bW19jdXJyZW50R3JhZGllbnRQYXJhbXMubWF4VmFsdWVdXTwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGJyIHN0eWxlPSJjbGVhcjogYm90aCIgLz4KICAgICAgICAgICAgPGRpdj5EZXZpY2VzIGluY2x1ZGVkIGluIHN0YXRzOjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJkZXZpY2VMaXN0Ij4KICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jdXJyZW50RGV2aWNlc11dIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLWxlZ2VuZC1yb3cgZGV2aWNlcy1jaGVja2JveCI+CiAgICAgICAgICAgICAgICAgIDxzcGFuCiAgICAgICAgICAgICAgICAgICAgPjxpbnB1dAogICAgICAgICAgICAgICAgICAgICAgdHlwZT0iY2hlY2tib3giCiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSQ9IltbaXRlbS5kZXZpY2VdXSIKICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQkPSJbW2l0ZW0udXNlZF1dIgogICAgICAgICAgICAgICAgICAgICAgb24tY2xpY2s9Il9kZXZpY2VDaGVja2JveENsaWNrZWQiCiAgICAgICAgICAgICAgICAgIC8+PC9zcGFuPgogICAgICAgICAgICAgICAgICA8c3Bhbj5bW2l0ZW0uc3VmZml4XV08L3NwYW4+CiAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tpdGVtLmlnbm9yZWRNc2ddXSI+CiAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgICAgICAgICAgICAgICBpY29uPSJoZWxwIgogICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImhlbHAtaWNvbiIKICAgICAgICAgICAgICAgICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICAgICAgPltbaXRlbS5pZ25vcmVkTXNnXV08L3BhcGVyLXRvb2x0aXAKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2VxdWFscyhjb2xvckJ5LCAnc3RydWN0dXJlJyldXSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLXRleHQiPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLWxlZ2VuZC1yb3ciPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxhYmVsIj4gY29sb3JzIDwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb2xvci1sZWdlbmQtdmFsdWUiPnNhbWUgc3Vic3RydWN0dXJlPC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLWxlZ2VuZC1yb3ciPgogICAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24KICAgICAgICAgICAgICAgICAgdHlwZT0iTUVUQSIKICAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxNiIKICAgICAgICAgICAgICAgICAgZmlsbC1vdmVycmlkZT0iI2VlZSIKICAgICAgICAgICAgICAgICAgc3Ryb2tlLW92ZXJyaWRlPSIjYTZhNmE2IgogICAgICAgICAgICAgICAgPjwvdGYtZ3JhcGgtaWNvbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb2xvci1sZWdlbmQtdmFsdWUiPnVuaXF1ZSBzdWJzdHJ1Y3R1cmU8L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZXF1YWxzKGNvbG9yQnksICdkZXZpY2UnKV1dIj4KICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jdXJyZW50RGV2aWNlUGFyYW1zXV0iPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyI+CiAgICAgICAgICAgICAgICAgIDx0Zi1ncmFwaC1pY29uCiAgICAgICAgICAgICAgICAgICAgdHlwZT0iTUVUQSIKICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9IjE2IgogICAgICAgICAgICAgICAgICAgIGZpbGwtb3ZlcnJpZGU9IltbaXRlbS5jb2xvcl1dIgogICAgICAgICAgICAgICAgICAgIHN0cm9rZS1vdmVycmlkZT0iI2E2YTZhNiIKICAgICAgICAgICAgICAgICAgPjwvdGYtZ3JhcGgtaWNvbj4KICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvbG9yLWxlZ2VuZC12YWx1ZSI+W1tpdGVtLmRldmljZV1dPC9zcGFuPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2xvci1sZWdlbmQtcm93Ij4KICAgICAgICAgICAgICAgIDx0Zi1ncmFwaC1pY29uCiAgICAgICAgICAgICAgICAgIHR5cGU9Ik1FVEEiCiAgICAgICAgICAgICAgICAgIGhlaWdodD0iMTYiCiAgICAgICAgICAgICAgICAgIGZpbGwtb3ZlcnJpZGU9IiNlZWUiCiAgICAgICAgICAgICAgICAgIHN0cm9rZS1vdmVycmlkZT0iI2E2YTZhNiIKICAgICAgICAgICAgICAgID48L3RmLWdyYXBoLWljb24+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY29sb3ItbGVnZW5kLXZhbHVlIj51bmtub3duIGRldmljZTwvc3Bhbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19lcXVhbHMoY29sb3JCeSwgJ3hsYV9jbHVzdGVyJyldXSI+CiAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfY3VycmVudFhsYUNsdXN0ZXJQYXJhbXNdXSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2xvci1sZWdlbmQtcm93Ij4KICAgICAgICAgICAgICAgICAgPHN2Zz4KICAgICAgICAgICAgICAgICAgICA8dXNlCiAgICAgICAgICAgICAgICAgICAgICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIKICAgICAgICAgICAgICAgICAgICAgIHhsaW5rOmhyZWY9IiN1bmZpbGxlZC1yZWN0IgogICAgICAgICAgICAgICAgICAgICAgeD0iMCIKICAgICAgICAgICAgICAgICAgICAgIHk9IjAiCiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT0iZmlsbDpbW2l0ZW0uY29sb3JdXSIKICAgICAgICAgICAgICAgICAgICA+PC91c2U+CiAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY29sb3ItbGVnZW5kLXZhbHVlIj5bW2l0ZW0ueGxhX2NsdXN0ZXJdXTwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyI+CiAgICAgICAgICAgICAgICA8c3ZnPgogICAgICAgICAgICAgICAgICA8dXNlCiAgICAgICAgICAgICAgICAgICAgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiCiAgICAgICAgICAgICAgICAgICAgeGxpbms6aHJlZj0iI2dyZXktcmVjdCIKICAgICAgICAgICAgICAgICAgICB4PSIwIgogICAgICAgICAgICAgICAgICAgIHk9IjAiCiAgICAgICAgICAgICAgICAgID48L3VzZT4KICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvbG9yLWxlZ2VuZC12YWx1ZSI+dW5rbm93biBYTEEgY2x1c3Rlcjwvc3Bhbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19lcXVhbHMoY29sb3JCeSwgJ29wX2NvbXBhdGliaWxpdHknKV1dIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItdGV4dCI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyI+CiAgICAgICAgICAgICAgICA8dGYtZ3JhcGgtaWNvbgogICAgICAgICAgICAgICAgICB0eXBlPSJPUCIKICAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxNiIKICAgICAgICAgICAgICAgICAgZmlsbC1vdmVycmlkZT0iIzBmOWQ1OCIKICAgICAgICAgICAgICAgICAgc3Ryb2tlLW92ZXJyaWRlPSIjY2NjIgogICAgICAgICAgICAgICAgPjwvdGYtZ3JhcGgtaWNvbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb2xvci1sZWdlbmQtdmFsdWUiPlZhbGlkIE9wPC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLWxlZ2VuZC1yb3ciPgogICAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24KICAgICAgICAgICAgICAgICAgdHlwZT0iT1AiCiAgICAgICAgICAgICAgICAgIGhlaWdodD0iMTYiCiAgICAgICAgICAgICAgICAgIGZpbGwtb3ZlcnJpZGU9IiNkYjQ0MzciCiAgICAgICAgICAgICAgICAgIHN0cm9rZS1vdmVycmlkZT0iI2NjYyIKICAgICAgICAgICAgICAgID48L3RmLWdyYXBoLWljb24+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY29sb3ItbGVnZW5kLXZhbHVlIj5JbnZhbGlkIE9wPC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3N0YXRzTm90TnVsbChzdGF0cyldXSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLWxlZ2VuZC1yb3ciPgogICAgICAgICAgICAgIDx0Zi1ncmFwaC1pY29uIHR5cGU9Ik1FVEEiIGhlaWdodD0iMTYiIGZhZGVkPjwvdGYtZ3JhcGgtaWNvbj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY29sb3ItbGVnZW5kLXZhbHVlIj51bnVzZWQgc3Vic3RydWN0dXJlPC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDwhLS0gQ29tbW9uIGxlZ2VuZCBpdGVtcyAtLT4KICAgICAgICA8ZGl2PgogICAgICAgICAgPHRhYmxlPgogICAgICAgICAgICA8dGJvZHk+CiAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgPHRkPjwvdGQ+CiAgICAgICAgICAgICAgICA8dGQ+KCogPSBleHBhbmRhYmxlKTwvdGQ+CiAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIDx0Zi1ncmFwaC1pY29uCiAgICAgICAgICAgICAgICAgICAgdHlwZT0iTUVUQSIKICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9IjE2IgogICAgICAgICAgICAgICAgICAgIGZpbGwtb3ZlcnJpZGU9IiNkOWQ5ZDkiCiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLW92ZXJyaWRlPSIjY2NjIgogICAgICAgICAgICAgICAgICA+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgTmFtZXNwYWNlPHNwYW4gY2xhc3M9ImdyYXkiPio8L3NwYW4+CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxlZ2VuZC1jbGFyaWZpZXIiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuPj88L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPHBhcGVyLXRvb2x0aXAKICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbi1kZWxheT0iMCIKICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uPSJyaWdodCIKICAgICAgICAgICAgICAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICBFbmNhcHN1bGF0ZXMgYSBzZXQgb2Ygbm9kZXMuIE5hbWVzcGFjZSBpcyBoaWVyYXJjaGljYWwgYW5kCiAgICAgICAgICAgICAgICAgICAgICBiYXNlZCBvbiBzY29wZS4KICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24gdHlwZT0iT1AiIGhlaWdodD0iMTYiPjwvdGYtZ3JhcGgtaWNvbj4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIE9wTm9kZQogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtY2xhcmlmaWVyIj4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj4/PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci10b29sdGlwCiAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgTm9kZSB0aGF0IHBlcmZvcm1zIGFuIG9wZXJhdGlvbi4gVGhlc2Ugbm9kZXMgY2Fubm90CiAgICAgICAgICAgICAgICAgICAgICBleHBhbmQuCiAgICAgICAgICAgICAgICAgICAgPC9wYXBlci10b29sdGlwPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIDx0Zi1ncmFwaC1pY29uIHR5cGU9IlNFUklFUyIgaGVpZ2h0PSIxNiI+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgVW5jb25uZWN0ZWQgc2VyaWVzPHNwYW4gY2xhc3M9ImdyYXkiPio8L3NwYW4+CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxlZ2VuZC1jbGFyaWZpZXIiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuPj88L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPHBhcGVyLXRvb2x0aXAKICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbi1kZWxheT0iMCIKICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uPSJyaWdodCIKICAgICAgICAgICAgICAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICBTZXF1ZW5jZSBvZiBudW1iZXJlZCBub2RlcyB0aGF0IGFyZSBub3QgY29ubmVjdGVkIHRvIGVhY2gKICAgICAgICAgICAgICAgICAgICAgIG90aGVyLgogICAgICAgICAgICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICA8dGYtZ3JhcGgtaWNvbgogICAgICAgICAgICAgICAgICAgIHR5cGU9IlNFUklFUyIKICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9IjE2IgogICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsCiAgICAgICAgICAgICAgICAgID48L3RmLWdyYXBoLWljb24+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICBDb25uZWN0ZWQgc2VyaWVzPHNwYW4gY2xhc3M9ImdyYXkiPio8L3NwYW4+CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxlZ2VuZC1jbGFyaWZpZXIiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuPj88L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPHBhcGVyLXRvb2x0aXAKICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbi1kZWxheT0iMCIKICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uPSJyaWdodCIKICAgICAgICAgICAgICAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICBTZXF1ZW5jZSBvZiBudW1iZXJlZCBub2RlcyB0aGF0IGFyZSBjb25uZWN0ZWQgdG8gZWFjaAogICAgICAgICAgICAgICAgICAgICAgb3RoZXIuCiAgICAgICAgICAgICAgICAgICAgPC9wYXBlci10b29sdGlwPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9Imljb24iPgogICAgICAgICAgICAgICAgICAgIDxjaXJjbGUKICAgICAgICAgICAgICAgICAgICAgIGZpbGw9IndoaXRlIgogICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPSIjODQ4NDg0IgogICAgICAgICAgICAgICAgICAgICAgY3g9IjEwIgogICAgICAgICAgICAgICAgICAgICAgY3k9IjEwIgogICAgICAgICAgICAgICAgICAgICAgcj0iNSIKICAgICAgICAgICAgICAgICAgICA+PC9jaXJjbGU+CiAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgQ29uc3RhbnQKICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWNsYXJpZmllciI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+Pzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgIE5vZGUgdGhhdCBvdXRwdXRzIGEgY29uc3RhbnQgdmFsdWUuCiAgICAgICAgICAgICAgICAgICAgPC9wYXBlci10b29sdGlwPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIDx0Zi1ncmFwaC1pY29uIHR5cGU9IlNVTU1BUlkiIGhlaWdodD0iMjAiPjwvdGYtZ3JhcGgtaWNvbj4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIFN1bW1hcnkKICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWNsYXJpZmllciI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+Pzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgIE5vZGUgdGhhdCBjb2xsZWN0cyBkYXRhIGZvciB2aXN1YWxpemF0aW9uIHdpdGhpbgogICAgICAgICAgICAgICAgICAgICAgVGVuc29yQm9hcmQuCiAgICAgICAgICAgICAgICAgICAgPC9wYXBlci10b29sdGlwPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIDxzdmcKICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaWNvbiIKICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9IjE1cHgiCiAgICAgICAgICAgICAgICAgICAgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pbllNaWQgbWVldCIKICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PSIwIDAgMTUgMTUiCiAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICA8ZGVmcz4KICAgICAgICAgICAgICAgICAgICAgIDxtYXJrZXIKICAgICAgICAgICAgICAgICAgICAgICAgaWQ9ImRhdGFmbG93LWFycm93aGVhZC1sZWdlbmQiCiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9IiNiYmIiCiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlcldpZHRoPSIxMCIKICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VySGVpZ2h0PSIxMCIKICAgICAgICAgICAgICAgICAgICAgICAgcmVmWD0iOSIKICAgICAgICAgICAgICAgICAgICAgICAgcmVmWT0iNSIKICAgICAgICAgICAgICAgICAgICAgICAgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiCiAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0gMCwwIEwgMTAsNSBMIDAsMTAgQyAzLDcgMywzIDAsMCI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgICAgPC9tYXJrZXI+CiAgICAgICAgICAgICAgICAgICAgPC9kZWZzPgogICAgICAgICAgICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICAgICAgICAgICBtYXJrZXItZW5kPSJ1cmwoI2RhdGFmbG93LWFycm93aGVhZC1sZWdlbmQpIgogICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPSIjYmJiIgogICAgICAgICAgICAgICAgICAgICAgZD0iTTIgOSBsIDI5IDAiCiAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD0icm91bmQiCiAgICAgICAgICAgICAgICAgICAgPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICBEYXRhZmxvdyBlZGdlCiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxlZ2VuZC1jbGFyaWZpZXIiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuPj88L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPHBhcGVyLXRvb2x0aXAKICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbi1kZWxheT0iMCIKICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uPSJyaWdodCIKICAgICAgICAgICAgICAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICBFZGdlIHNob3dpbmcgdGhlIGRhdGEgZmxvdyBiZXR3ZWVuIG9wZXJhdGlvbnMuIEVkZ2VzIGZsb3cKICAgICAgICAgICAgICAgICAgICAgIHVwd2FyZHMgdW5sZXNzIGFycm93aGVhZHMgc3BlY2lmeSBvdGhlcndpc2UuCiAgICAgICAgICAgICAgICAgICAgPC9wYXBlci10b29sdGlwPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIDxzdmcKICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaWNvbiIKICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9IjE1cHgiCiAgICAgICAgICAgICAgICAgICAgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pbllNaWQgbWVldCIKICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PSIwIDAgMTUgMTUiCiAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPSIjYmJiIgogICAgICAgICAgICAgICAgICAgICAgZD0iTTIgOSBsIDI5IDAiCiAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD0icm91bmQiCiAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtZGFzaGFycmF5PSIyLCAyIgogICAgICAgICAgICAgICAgICAgID48L3BhdGg+CiAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgQ29udHJvbCBkZXBlbmRlbmN5IGVkZ2UKICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWNsYXJpZmllciI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+Pzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgIEVkZ2Ugc2hvd2luZyB0aGUgY29udHJvbCBkZXBlbmRlbmN5IGJldHdlZW4gb3BlcmF0aW9ucy4KICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHN2ZwogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpY29uIgogICAgICAgICAgICAgICAgICAgIGhlaWdodD0iMTVweCIKICAgICAgICAgICAgICAgICAgICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pZCBtZWV0IgogICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9IjAgMCAxNSAxNSIKICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgIDxkZWZzPgogICAgICAgICAgICAgICAgICAgICAgPG1hcmtlcgogICAgICAgICAgICAgICAgICAgICAgICBpZD0icmVmZXJlbmNlLWFycm93aGVhZC1sZWdlbmQiCiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9IiNGRkI3NEQiCiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlcldpZHRoPSIxMCIKICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VySGVpZ2h0PSIxMCIKICAgICAgICAgICAgICAgICAgICAgICAgcmVmWD0iOSIKICAgICAgICAgICAgICAgICAgICAgICAgcmVmWT0iNSIKICAgICAgICAgICAgICAgICAgICAgICAgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiCiAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0gMCwwIEwgMTAsNSBMIDAsMTAgQyAzLDcgMywzIDAsMCI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgICAgPC9tYXJrZXI+CiAgICAgICAgICAgICAgICAgICAgPC9kZWZzPgogICAgICAgICAgICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICAgICAgICAgICBtYXJrZXItZW5kPSJ1cmwoI3JlZmVyZW5jZS1hcnJvd2hlYWQtbGVnZW5kKSIKICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT0iI0ZGQjc0RCIKICAgICAgICAgICAgICAgICAgICAgIGQ9Ik0yIDkgbCAyOSAwIgogICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogICAgICAgICAgICAgICAgICAgID48L3BhdGg+CiAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgUmVmZXJlbmNlIGVkZ2UKICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWNsYXJpZmllciI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+Pzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgIEVkZ2Ugc2hvd2luZyB0aGF0IHRoZSBvdXRnb2luZyBvcGVyYXRpb24gbm9kZSBjYW4gbXV0YXRlCiAgICAgICAgICAgICAgICAgICAgICB0aGUgaW5jb21pbmcgdGVuc29yLgogICAgICAgICAgICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgICA8L3RhYmxlPgogICAgICAgIDwvZGl2PgogICAgICA8L2lyb24tY29sbGFwc2U+CiAgICA8L2Rpdj4KICBgLHQoW28oe3R5cGU6T2JqZWN0LG9ic2VydmVyOiJfc3RhdHNDaGFuZ2VkIn0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxETHQucHJvdG90eXBlLCJzdGF0cyIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdCxub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sREx0LnByb3RvdHlwZSwiZGV2aWNlc0ZvclN0YXRzIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxETHQucHJvdG90eXBlLCJjb2xvckJ5Iix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxETHQucHJvdG90eXBlLCJjb2xvckJ5UGFyYW1zIix2b2lkIDApLHQoW28oe3R5cGU6QXJyYXksb2JzZXJ2ZXI6Il9kYXRhc2V0c0NoYW5nZWQifSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLERMdC5wcm90b3R5cGUsImRhdGFzZXRzIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLFhBdCldLERMdC5wcm90b3R5cGUsInJlbmRlckhpZXJhcmNoeSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdCxub3RpZnk6ITAscmVhZE9ubHk6ITAsY29tcHV0ZWQ6Il9jb21wdXRlU2VsZWN0aW9uKGRhdGFzZXRzLCBfc2VsZWN0ZWRSdW5JbmRleCwgX3NlbGVjdGVkVGFnSW5kZXgsIF9zZWxlY3RlZEdyYXBoVHlwZSkifSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLERMdC5wcm90b3R5cGUsInNlbGVjdGlvbiIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdCxub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sREx0LnByb3RvdHlwZSwic2VsZWN0ZWRGaWxlIix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyLG9ic2VydmVyOiJfc2VsZWN0ZWRSdW5JbmRleENoYW5nZWQifSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLERMdC5wcm90b3R5cGUsIl9zZWxlY3RlZFJ1bkluZGV4Iix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbixub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLERMdC5wcm90b3R5cGUsInRyYWNlSW5wdXRzIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbixub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLERMdC5wcm90b3R5cGUsImF1dG9FeHRyYWN0Tm9kZXMiLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXIsb2JzZXJ2ZXI6Il9zZWxlY3RlZFRhZ0luZGV4Q2hhbmdlZCJ9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sREx0LnByb3RvdHlwZSwiX3NlbGVjdGVkVGFnSW5kZXgiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sREx0LnByb3RvdHlwZSwiX3NlbGVjdGVkR3JhcGhUeXBlIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxETHQucHJvdG90eXBlLCJzZWxlY3RlZE5vZGUiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxETHQucHJvdG90eXBlLCJzaG93U2Vzc2lvblJ1bnNEcm9wZG93biIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLERMdC5wcm90b3R5cGUsInNob3dVcGxvYWRCdXR0b24iLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxETHQucHJvdG90eXBlLCJoZWFsdGhQaWxsc0ZlYXR1cmVFbmFibGVkIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbixub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLERMdC5wcm90b3R5cGUsImhlYWx0aFBpbGxzVG9nZ2xlZE9uIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sREx0LnByb3RvdHlwZSwiX2xlZ2VuZE9wZW5lZCIsdm9pZCAwKSx0KFtzKCJkZXZpY2VzRm9yU3RhdHMiKSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLERMdC5wcm90b3R5cGUsIl9jdXJyZW50RGV2aWNlcyIsbnVsbCksdChbcygiY29sb3JCeVBhcmFtcyIpLGUoImRlc2lnbjp0eXBlIixBcnJheSksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sREx0LnByb3RvdHlwZSwiX2N1cnJlbnREZXZpY2VQYXJhbXMiLG51bGwpLHQoW3MoImNvbG9yQnlQYXJhbXMiKSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLERMdC5wcm90b3R5cGUsIl9jdXJyZW50WGxhQ2x1c3RlclBhcmFtcyIsbnVsbCksdChbcygiY29sb3JCeVBhcmFtcyIsImNvbG9yQnkiKSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxETHQucHJvdG90eXBlLCJfY3VycmVudEdyYWRpZW50UGFyYW1zIixudWxsKSxETHQ9dChbaSgidGYtZ3JhcGgtY29udHJvbHMiKV0sREx0KTtjbGFzcyBCTHR7aXNOb3RUcHVPcCh0KXtyZXR1cm4tMSE9dC50b0xvd2VyQ2FzZSgpLnNlYXJjaCgiY3B1OiIpfHwtMSE9dC50b0xvd2VyQ2FzZSgpLnNlYXJjaCgiZ3B1OiIpfHwtMT09dC50b0xvd2VyQ2FzZSgpLnNlYXJjaCgidHB1Iil9b3BWYWxpZCh0KXtyZXR1cm4gMD09dC5uYW1lLnNlYXJjaChfQXQpfHwhdC5vcHx8ISghdC5kZXZpY2V8fCF0aGlzLmlzTm90VHB1T3AodC5kZXZpY2UpKXx8ISghdC5kZXZpY2V8fC0xPT10LmRldmljZS5zZWFyY2goIlRQVV9TWVNURU0iKSl8fHdlLmluY2x1ZGVzKEJMdC5XSElURUxJU1QsdC5vcCl9fWZ1bmN0aW9uIEhMdCh0KXtyZXR1cm4gbmV3IFByb21pc2UoKChlLG4pPT57ZmV0Y2godCkudGhlbigodD0+e3Qub2s/dC5hcnJheUJ1ZmZlcigpLnRoZW4oZSxuKTp0LnRleHQoKS50aGVuKG4sbil9KSl9KSl9Qkx0LldISVRFTElTVD1bIkFicyIsIkFjb3MiLCJBY29zaCIsIkFkZCIsIkFkZE4iLCJBZGRWMiIsIkFkanVzdENvbnRyYXN0djIiLCJBZGp1c3RIdWUiLCJBZGp1c3RTYXR1cmF0aW9uIiwiQWxsIiwiQWxsVG9BbGwiLCJBbmdsZSIsIkFueSIsIkFwcHJveGltYXRlRXF1YWwiLCJBcmdNYXgiLCJBcmdNaW4iLCJBc2luIiwiQXNpbmgiLCJBc3NlcnQiLCJBc3NpZ25BZGRWYXJpYWJsZU9wIiwiQXNzaWduU3ViVmFyaWFibGVPcCIsIkFzc2lnblZhcmlhYmxlT3AiLCJBdGFuIiwiQXRhbjIiLCJBdGFuaCIsIkF2Z1Bvb2wiLCJBdmdQb29sM0QiLCJBdmdQb29sM0RHcmFkIiwiQXZnUG9vbEdyYWQiLCJCYXRjaE1hdE11bCIsIkJhdGNoTWF0TXVsVjIiLCJCYXRjaFRvU3BhY2UiLCJCYXRjaFRvU3BhY2VORCIsIkJlc3NlbEkwZSIsIkJlc3NlbEkxZSIsIkJldGFpbmMiLCJCaWFzQWRkIiwiQmlhc0FkZEdyYWQiLCJCaWFzQWRkVjEiLCJCaXRjYXN0IiwiQml0d2lzZUFuZCIsIkJpdHdpc2VPciIsIkJpdHdpc2VYb3IiLCJCcm9hZGNhc3RBcmdzIiwiQnJvYWRjYXN0R3JhZGllbnRBcmdzIiwiQnJvYWRjYXN0VG8iLCJCdWNrZXRpemUiLCJDYXNlIiwiQ2FzdCIsIkNlaWwiLCJDaGVja051bWVyaWNzIiwiQ2hvbGVza3kiLCJDbGlwQnlWYWx1ZSIsIkNvbGxlY3RpdmVQZXJtdXRlIiwiQ29sbGVjdGl2ZVJlZHVjZVYyIiwiQ29tcGxleCIsIkNvbXBsZXhBYnMiLCJDb25jYXQiLCJDb25jYXRPZmZzZXQiLCJDb25jYXRWMiIsIkNvbmoiLCJDb25qdWdhdGVUcmFuc3Bvc2UiLCJDb25zdCIsIkNvbnRyb2xUcmlnZ2VyIiwiQ29udjJEIiwiQ29udjJEQmFja3Byb3BGaWx0ZXIiLCJDb252MkRCYWNrcHJvcElucHV0IiwiQ29udjNEIiwiQ29udjNEQmFja3Byb3BGaWx0ZXJWMiIsIkNvbnYzREJhY2twcm9wSW5wdXRWMiIsIkNvcyIsIkNvc2giLCJDcm9zcyIsIkNyb3NzUmVwbGljYVN1bSIsIkN1bXByb2QiLCJDdW1zdW0iLCJEYXRhRm9ybWF0RGltTWFwIiwiRGF0YUZvcm1hdFZlY1Blcm11dGUiLCJEZXB0aFRvU3BhY2UiLCJEZXB0aHdpc2VDb252MmROYXRpdmUiLCJEZXB0aHdpc2VDb252MmROYXRpdmVCYWNrcHJvcEZpbHRlciIsIkRlcHRod2lzZUNvbnYyZE5hdGl2ZUJhY2twcm9wSW5wdXQiLCJEZXF1YW50aXplIiwiRGV2aWNlSW5kZXgiLCJEaWFnIiwiRGlhZ1BhcnQiLCJEaWdhbW1hIiwiRGl2IiwiRGl2Tm9OYW4iLCJEeW5hbWljU3RpdGNoIiwiRWluc3VtIiwiRWx1IiwiRWx1R3JhZCIsIkVtcHR5IiwiRW1wdHlUZW5zb3JMaXN0IiwiRW5zdXJlU2hhcGUiLCJFcXVhbCIsIkVyZiIsIkVyZmMiLCJFcmZpbnYiLCJFeHAiLCJFeHBhbmREaW1zIiwiRXhwbTEiLCJFeHRyYWN0SW1hZ2VQYXRjaGVzIiwiRkZUIiwiRkZUMkQiLCJGRlQzRCIsIkZha2VQYXJhbSIsIkZha2VRdWFudFdpdGhNaW5NYXhBcmdzIiwiRmFrZVF1YW50V2l0aE1pbk1heEFyZ3NHcmFkaWVudCIsIkZha2VRdWFudFdpdGhNaW5NYXhWYXJzIiwiRmFrZVF1YW50V2l0aE1pbk1heFZhcnNHcmFkaWVudCIsIkZpbGwiLCJGbG9vciIsIkZsb29yRGl2IiwiRmxvb3JNb2QiLCJGdXNlZEJhdGNoTm9ybSIsIkZ1c2VkQmF0Y2hOb3JtR3JhZCIsIkZ1c2VkQmF0Y2hOb3JtR3JhZFYyIiwiRnVzZWRCYXRjaE5vcm1HcmFkVjMiLCJGdXNlZEJhdGNoTm9ybVYyIiwiRnVzZWRCYXRjaE5vcm1WMyIsIkdhdGhlciIsIkdhdGhlck5kIiwiR2F0aGVyVjIiLCJHZXRJdGVtIiwiR3JlYXRlciIsIkdyZWF0ZXJFcXVhbCIsIkhTVlRvUkdCIiwiSUZGVCIsIklGRlQyRCIsIklGRlQzRCIsIklSRkZUIiwiSVJGRlQyRCIsIklSRkZUM0QiLCJJZGVudGl0eSIsIklkZW50aXR5TiIsIklmIiwiSWdhbW1hIiwiSWdhbW1hR3JhZEEiLCJJZ2FtbWFjIiwiSW1hZyIsIkluVG9wS1YyIiwiSW5mZWVkRGVxdWV1ZSIsIkluZmVlZERlcXVldWVUdXBsZSIsIklucGxhY2VBZGQiLCJJbnBsYWNlVXBkYXRlIiwiSW52IiwiSW52ZXJ0IiwiSW52ZXJ0UGVybXV0YXRpb24iLCJJc0Zpbml0ZSIsIklzSW5mIiwiSXNOYW4iLCJLdGhPcmRlclN0YXRpc3RpYyIsIkwyTG9zcyIsIkxSTiIsIkxSTkdyYWQiLCJMZWFreVJlbHUiLCJMZWFreVJlbHVHcmFkIiwiTGVmdFNoaWZ0IiwiTGVzcyIsIkxlc3NFcXVhbCIsIkxnYW1tYSIsIkxpblNwYWNlIiwiTGlzdERpZmYiLCJMb2ciLCJMb2cxcCIsIkxvZ1NvZnRtYXgiLCJMb2dpY2FsQW5kIiwiTG9naWNhbE5vdCIsIkxvZ2ljYWxPciIsIkxvd2VyQm91bmQiLCJNYWtlVW5pcXVlIiwiTWF0TXVsIiwiTWF0cml4QmFuZFBhcnQiLCJNYXRyaXhEaWFnIiwiTWF0cml4RGlhZ1BhcnQiLCJNYXRyaXhEaWFnUGFydFYyIiwiTWF0cml4RGlhZ1BhcnRWMyIsIk1hdHJpeERpYWdWMiIsIk1hdHJpeERpYWdWMyIsIk1hdHJpeEludmVyc2UiLCJNYXRyaXhTZXREaWFnIiwiTWF0cml4U2V0RGlhZ1YyIiwiTWF0cml4U2V0RGlhZ1YzIiwiTWF0cml4U29sdmUiLCJNYXRyaXhUcmlhbmd1bGFyU29sdmUiLCJNYXgiLCJNYXhQb29sIiwiTWF4UG9vbDNEIiwiTWF4UG9vbDNER3JhZCIsIk1heFBvb2wzREdyYWRHcmFkIiwiTWF4UG9vbEdyYWQiLCJNYXhQb29sR3JhZEdyYWQiLCJNYXhQb29sR3JhZEdyYWRWMiIsIk1heFBvb2xHcmFkVjIiLCJNYXhQb29sVjIiLCJNYXhpbXVtIiwiTWVhbiIsIk1pbiIsIk1pbmltdW0iLCJNaXJyb3JQYWQiLCJNaXJyb3JQYWRHcmFkIiwiTW9kIiwiTXVsIiwiTXVsTm9OYW4iLCJNdWx0aW5vbWlhbCIsIk5kdHJpIiwiTmVnIiwiTmV4dEFmdGVyIiwiTm9PcCIsIk5vbk1heFN1cHByZXNzaW9uVjQiLCJOb3RFcXVhbCIsIk9uZUhvdCIsIk9uZXNMaWtlIiwiT3V0ZmVlZEVucXVldWUiLCJPdXRmZWVkRW5xdWV1ZVR1cGxlIiwiUGFjayIsIlBhZCIsIlBhZFYyIiwiUGFyYWxsZWxEeW5hbWljU3RpdGNoIiwiUGFyYW1ldGVyaXplZFRydW5jYXRlZE5vcm1hbCIsIlBhcnRpdGlvbmVkQ2FsbCIsIlBsYWNlaG9sZGVyV2l0aERlZmF1bHQiLCJQb2x5Z2FtbWEiLCJQb3B1bGF0aW9uQ291bnQiLCJQb3ciLCJQcmV2ZW50R3JhZGllbnQiLCJQcm9kIiwiUXIiLCJRdWFudGl6ZUFuZERlcXVhbnRpemVWMiIsIlF1YW50aXplQW5kRGVxdWFudGl6ZVYzIiwiUkZGVCIsIlJGRlQyRCIsIlJGRlQzRCIsIlJHQlRvSFNWIiwiUmFuZG9tR2FtbWFHcmFkIiwiUmFuZG9tU2h1ZmZsZSIsIlJhbmRvbVN0YW5kYXJkTm9ybWFsIiwiUmFuZG9tVW5pZm9ybSIsIlJhbmRvbVVuaWZvcm1JbnQiLCJSYW5nZSIsIlJhbmsiLCJSZWFkVmFyaWFibGVPcCIsIlJlYWwiLCJSZWFsRGl2IiwiUmVjaXByb2NhbCIsIlJlY2lwcm9jYWxHcmFkIiwiUmVsdSIsIlJlbHU2IiwiUmVsdTZHcmFkIiwiUmVsdUdyYWQiLCJSZXNoYXBlIiwiUmVzaXplQmlsaW5lYXIiLCJSZXNpemVCaWxpbmVhckdyYWQiLCJSZXNpemVOZWFyZXN0TmVpZ2hib3IiLCJSZXNpemVOZWFyZXN0TmVpZ2hib3JHcmFkIiwiUmVzb3VyY2VBcHBseUFkYU1heCIsIlJlc291cmNlQXBwbHlBZGFkZWx0YSIsIlJlc291cmNlQXBwbHlBZGFncmFkIiwiUmVzb3VyY2VBcHBseUFkYWdyYWREQSIsIlJlc291cmNlQXBwbHlBZGFncmFkVjIiLCJSZXNvdXJjZUFwcGx5QWRhbSIsIlJlc291cmNlQXBwbHlBZGRTaWduIiwiUmVzb3VyY2VBcHBseUNlbnRlcmVkUk1TUHJvcCIsIlJlc291cmNlQXBwbHlGdHJsIiwiUmVzb3VyY2VBcHBseUZ0cmxWMiIsIlJlc291cmNlQXBwbHlHcmFkaWVudERlc2NlbnQiLCJSZXNvdXJjZUFwcGx5S2VyYXNNb21lbnR1bSIsIlJlc291cmNlQXBwbHlNb21lbnR1bSIsIlJlc291cmNlQXBwbHlQb3dlclNpZ24iLCJSZXNvdXJjZUFwcGx5UHJveGltYWxBZGFncmFkIiwiUmVzb3VyY2VBcHBseVByb3hpbWFsR3JhZGllbnREZXNjZW50IiwiUmVzb3VyY2VBcHBseVJNU1Byb3AiLCJSZXNvdXJjZUdhdGhlciIsIlJlc291cmNlU2NhdHRlckFkZCIsIlJlc291cmNlU2NhdHRlckRpdiIsIlJlc291cmNlU2NhdHRlck1heCIsIlJlc291cmNlU2NhdHRlck1pbiIsIlJlc291cmNlU2NhdHRlck11bCIsIlJlc291cmNlU2NhdHRlck5kQWRkIiwiUmVzb3VyY2VTY2F0dGVyTmRTdWIiLCJSZXNvdXJjZVNjYXR0ZXJOZFVwZGF0ZSIsIlJlc291cmNlU2NhdHRlclN1YiIsIlJlc291cmNlU2NhdHRlclVwZGF0ZSIsIlJlc291cmNlU3RyaWRlZFNsaWNlQXNzaWduIiwiUmV2ZXJzZSIsIlJldmVyc2VTZXF1ZW5jZSIsIlJldmVyc2VWMiIsIlJpZ2h0U2hpZnQiLCJSaW50IiwiUm5nUmVhZEFuZFNraXAiLCJSbmdTa2lwIiwiUm9sbCIsIlJvdW5kIiwiUnNxcnQiLCJSc3FydEdyYWQiLCJTY2F0dGVyTmQiLCJTZWxlY3QiLCJTZWxlY3RWMiIsIlNlbGZBZGpvaW50RWlnVjIiLCJTZWx1IiwiU2VsdUdyYWQiLCJTaGFwZSIsIlNoYXBlTiIsIlNpZ21vaWQiLCJTaWdtb2lkR3JhZCIsIlNpZ24iLCJTaW4iLCJTaW5oIiwiU2l6ZSIsIlNsaWNlIiwiU25hcHNob3QiLCJTb2Z0bWF4IiwiU29mdG1heENyb3NzRW50cm9weVdpdGhMb2dpdHMiLCJTb2Z0cGx1cyIsIlNvZnRwbHVzR3JhZCIsIlNvZnRzaWduIiwiU29mdHNpZ25HcmFkIiwiU3BhY2VUb0JhdGNoIiwiU3BhY2VUb0JhdGNoTkQiLCJTcGFjZVRvRGVwdGgiLCJTcGFyc2VNYXRNdWwiLCJTcGFyc2VTb2Z0bWF4Q3Jvc3NFbnRyb3B5V2l0aExvZ2l0cyIsIlNwYXJzZVRvRGVuc2UiLCJTcGxpdCIsIlNwbGl0ViIsIlNxcnQiLCJTcXJ0R3JhZCIsIlNxdWFyZSIsIlNxdWFyZWREaWZmZXJlbmNlIiwiU3F1ZWV6ZSIsIlN0YWNrQ2xvc2VWMiIsIlN0YWNrUG9wVjIiLCJTdGFja1B1c2hWMiIsIlN0YWNrVjIiLCJTdGF0ZWZ1bFBhcnRpdGlvbmVkQ2FsbCIsIlN0YXRlZnVsU3RhbmRhcmROb3JtYWxWMiIsIlN0YXRlZnVsVHJ1bmNhdGVkTm9ybWFsIiwiU3RhdGVmdWxVbmlmb3JtIiwiU3RhdGVmdWxVbmlmb3JtRnVsbEludCIsIlN0YXRlZnVsVW5pZm9ybUludCIsIlN0YXRlbGVzc0Nhc2UiLCJTdGF0ZWxlc3NJZiIsIlN0YXRlbGVzc011bHRpbm9taWFsIiwiU3RhdGVsZXNzUmFuZG9tR2V0QWxnIiwiU3RhdGVsZXNzUmFuZG9tR2V0S2V5Q291bnRlciIsIlN0YXRlbGVzc1JhbmRvbUdldEtleUNvdW50ZXJBbGciLCJTdGF0ZWxlc3NSYW5kb21Ob3JtYWwiLCJTdGF0ZWxlc3NSYW5kb21Ob3JtYWxWMiIsIlN0YXRlbGVzc1JhbmRvbVVuaWZvcm0iLCJTdGF0ZWxlc3NSYW5kb21Vbmlmb3JtRnVsbEludCIsIlN0YXRlbGVzc1JhbmRvbVVuaWZvcm1GdWxsSW50VjIiLCJTdGF0ZWxlc3NSYW5kb21Vbmlmb3JtSW50IiwiU3RhdGVsZXNzUmFuZG9tVW5pZm9ybUludFYyIiwiU3RhdGVsZXNzUmFuZG9tVW5pZm9ybVYyIiwiU3RhdGVsZXNzVHJ1bmNhdGVkTm9ybWFsIiwiU3RhdGVsZXNzVHJ1bmNhdGVkTm9ybWFsVjIiLCJTdGF0ZWxlc3NXaGlsZSIsIlN0b3BHcmFkaWVudCIsIlN0cmlkZWRTbGljZSIsIlN0cmlkZWRTbGljZUdyYWQiLCJTdWIiLCJTdW0iLCJTdmQiLCJTeW1ib2xpY0dyYWRpZW50IiwiVFBVRW1iZWRkaW5nQWN0aXZhdGlvbnMiLCJUYW4iLCJUYW5oIiwiVGFuaEdyYWQiLCJUZW5zb3JBcnJheUNsb3NlVjMiLCJUZW5zb3JBcnJheUNvbmNhdFYzIiwiVGVuc29yQXJyYXlHYXRoZXJWMyIsIlRlbnNvckFycmF5R3JhZFYzIiwiVGVuc29yQXJyYXlSZWFkVjMiLCJUZW5zb3JBcnJheVNjYXR0ZXJWMyIsIlRlbnNvckFycmF5U2l6ZVYzIiwiVGVuc29yQXJyYXlTcGxpdFYzIiwiVGVuc29yQXJyYXlWMyIsIlRlbnNvckFycmF5V3JpdGVWMyIsIlRlbnNvckxpc3RDb25jYXRWMiIsIlRlbnNvckxpc3RFbGVtZW50U2hhcGUiLCJUZW5zb3JMaXN0RnJvbVRlbnNvciIsIlRlbnNvckxpc3RHYXRoZXIiLCJUZW5zb3JMaXN0R2V0SXRlbSIsIlRlbnNvckxpc3RMZW5ndGgiLCJUZW5zb3JMaXN0UG9wQmFjayIsIlRlbnNvckxpc3RQdXNoQmFjayIsIlRlbnNvckxpc3RSZXNlcnZlIiwiVGVuc29yTGlzdFNldEl0ZW0iLCJUZW5zb3JMaXN0U3BsaXQiLCJUZW5zb3JMaXN0U3RhY2siLCJUZW5zb3JTY2F0dGVyQWRkIiwiVGVuc29yU2NhdHRlck1heCIsIlRlbnNvclNjYXR0ZXJNaW4iLCJUZW5zb3JTY2F0dGVyU3ViIiwiVGVuc29yU2NhdHRlclVwZGF0ZSIsIlRlbnNvclN0cmlkZWRTbGljZVVwZGF0ZSIsIlRpbGUiLCJUb3BLVW5pcXVlIiwiVG9wS1YyIiwiVG9wS1dpdGhVbmlxdWUiLCJUcmFuc3Bvc2UiLCJUcmlkaWFnb25hbFNvbHZlIiwiVHJ1bmNhdGVEaXYiLCJUcnVuY2F0ZU1vZCIsIlRydW5jYXRlZE5vcm1hbCIsIlVuaXF1ZSIsIlVucGFjayIsIlVuc29ydGVkU2VnbWVudE1heCIsIlVuc29ydGVkU2VnbWVudE1pbiIsIlVuc29ydGVkU2VnbWVudFByb2QiLCJVbnNvcnRlZFNlZ21lbnRTdW0iLCJVcHBlckJvdW5kIiwiVmFySXNJbml0aWFsaXplZE9wIiwiVmFyaWFibGVTaGFwZSIsIldoZXJlIiwiV2hpbGUiLCJYZGl2eSIsIlhsYUJyb2FkY2FzdEhlbHBlciIsIlhsYUNvbnYiLCJYbGFDb252VjIiLCJYbGFEZXF1YW50aXplIiwiWGxhRG90IiwiWGxhRG90VjIiLCJYbGFEeW5hbWljU2xpY2UiLCJYbGFEeW5hbWljVXBkYXRlU2xpY2UiLCJYbGFFaW5zdW0iLCJYbGFHYXRoZXIiLCJYbGFIb3N0Q29tcHV0ZSIsIlhsYUlmIiwiWGxhS2V5VmFsdWVTb3J0IiwiWGxhUGFkIiwiWGxhUmVjdiIsIlhsYVJlY3ZGcm9tSG9zdCIsIlhsYVJlZHVjZSIsIlhsYVJlZHVjZVdpbmRvdyIsIlhsYVJlcGxpY2FJZCIsIlhsYVNjYXR0ZXIiLCJYbGFTZWxlY3RBbmRTY2F0dGVyIiwiWGxhU2VsZkFkam9pbnRFaWciLCJYbGFTZW5kIiwiWGxhU2VuZFRvSG9zdCIsIlhsYVNldEJvdW5kIiwiWGxhU2V0RHluYW1pY0RpbWVuc2lvblNpemUiLCJYbGFTaGFyZGluZyIsIlhsYVNvcnQiLCJYbGFTcG1kRnVsbFRvU2hhcmRTaGFwZSIsIlhsYVNwbWRTaGFyZFRvRnVsbFNoYXBlIiwiWGxhU3ZkIiwiWGxhVmFyaWFkaWNSZWR1Y2UiLCJYbGFWYXJpYWRpY1NvcnQiLCJYbGFXaGlsZSIsIlhsb2cxcHkiLCJYbG9neSIsIlplcm9zTGlrZSIsIlpldGEiLCJFbnRlciIsIkV4aXQiLCJMb29wQ29uZCIsIk1lcmdlIiwiTmV4dEl0ZXJhdGlvbiIsIlN3aXRjaCIsIl9BcmciLCJfQXJyYXlUb0xpc3QiLCJfRnVzZWRCYXRjaE5vcm1FeCIsIl9MaXN0VG9BcnJheSIsIl9QYXJhbGxlbENvbmNhdFVwZGF0ZSIsIl9SZWN2VFBVRW1iZWRkaW5nQWN0aXZhdGlvbnMiLCJfUmVjdlRQVUVtYmVkZGluZ0RlZHVwbGljYXRpb25EYXRhIiwiX1JldHZhbCIsIl9TZW5kVFBVRW1iZWRkaW5nR3JhZGllbnRzIiwiX1RQVUNvbXBpbGUiLCJfVFBVRXhlY3V0ZSIsIl9VbmFyeU9wc0NvbXBvc2l0aW9uIiwiVFBVQ29tcGlsYXRpb25SZXN1bHQiLCJUUFVSZXBsaWNhdGVkSW5wdXQiLCJUUFVSZXBsaWNhdGVkT3V0cHV0IiwiVFBVUmVwbGljYXRlTWV0YWRhdGEiLCJNZXJnZVYyQ2hlY2twb2ludHMiLCJSZXN0b3JlVjIiLCJTYXZlVjIiLCJBYm9ydCIsIkFzc2VydCIsIkFzc2lnbiIsIlBsYWNlaG9sZGVyIiwiUGxhY2Vob2xkZXJWMiIsIlNoYXJkZWRGaWxlbmFtZSIsIlN0cmluZ0pvaW4iLCJWYXJpYWJsZSIsIlZhcmlhYmxlVjIiLCJWYXJIYW5kbGVPcCIsIkF1ZGlvU3VtbWFyeSIsIkF1ZGlvU3VtbWFyeVYyIiwiRGVidWdOdW1lcmljU3VtbWFyeSIsIkhpc3RvZ3JhbVN1bW1hcnkiLCJJbWFnZVN1bW1hcnkiLCJNZXJnZVN1bW1hcnkiLCJTY2FsYXJTdW1tYXJ5IiwiU3RhdHNBZ2dyZWdhdG9yU3VtbWFyeSJdO2NvbnN0IEZMdD17ImxpYnJhcnkuZnVuY3Rpb24iOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5pbnB1dCI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuYXR0ciI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuYXR0ci52YWx1ZS5saXN0LmIiOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUubGlzdC5mIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3QuZnVuYyI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuYXR0ci52YWx1ZS5saXN0LmkiOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUubGlzdC5zIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3Quc2hhcGUiOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUubGlzdC5zaGFwZS5kaW0iOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUubGlzdC50ZW5zb3IiOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUubGlzdC50eXBlIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLnNoYXBlLmRpbSI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuYXR0ci52YWx1ZS50ZW5zb3Iuc3RyaW5nX3ZhbCI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuYXR0ci52YWx1ZS50ZW5zb3IudGVuc29yX3NoYXBlLmRpbSI6ITAsImxpYnJhcnkuZnVuY3Rpb24uc2lnbmF0dXJlLmlucHV0X2FyZyI6ITAsImxpYnJhcnkuZnVuY3Rpb24uc2lnbmF0dXJlLm91dHB1dF9hcmciOiEwLCJsaWJyYXJ5LnZlcnNpb25zIjohMCxub2RlOiEwLCJub2RlLmlucHV0IjohMCwibm9kZS5hdHRyIjohMCwibm9kZS5hdHRyLnZhbHVlLmxpc3QuYiI6ITAsIm5vZGUuYXR0ci52YWx1ZS5saXN0LmYiOiEwLCJub2RlLmF0dHIudmFsdWUubGlzdC5mdW5jIjohMCwibm9kZS5hdHRyLnZhbHVlLmxpc3QuaSI6ITAsIm5vZGUuYXR0ci52YWx1ZS5saXN0LnMiOiEwLCJub2RlLmF0dHIudmFsdWUubGlzdC5zaGFwZSI6ITAsIm5vZGUuYXR0ci52YWx1ZS5saXN0LnNoYXBlLmRpbSI6ITAsIm5vZGUuYXR0ci52YWx1ZS5saXN0LnRlbnNvciI6ITAsIm5vZGUuYXR0ci52YWx1ZS5saXN0LnR5cGUiOiEwLCJub2RlLmF0dHIudmFsdWUuc2hhcGUuZGltIjohMCwibm9kZS5hdHRyLnZhbHVlLnRlbnNvci5zdHJpbmdfdmFsIjohMCwibm9kZS5hdHRyLnZhbHVlLnRlbnNvci50ZW5zb3Jfc2hhcGUuZGltIjohMH0sVkx0PXsic3RlcF9zdGF0cy5kZXZfc3RhdHMiOiEwLCJzdGVwX3N0YXRzLmRldl9zdGF0cy5ub2RlX3N0YXRzIjohMCwic3RlcF9zdGF0cy5kZXZfc3RhdHMubm9kZV9zdGF0cy5vdXRwdXQiOiEwLCJzdGVwX3N0YXRzLmRldl9zdGF0cy5ub2RlX3N0YXRzLm1lbW9yeSI6ITAsInN0ZXBfc3RhdHMuZGV2X3N0YXRzLm5vZGVfc3RhdHMub3V0cHV0LnRlbnNvcl9kZXNjcmlwdGlvbi5zaGFwZS5kaW0iOiEwfTtmdW5jdGlvbiBVTHQodCxlKXtsZXQgbj17fSxpPVtdLHI9W10sbz1uO2Z1bmN0aW9uIGEodCxuLGkscil7bGV0IG89dFtuXTtudWxsPT1vP3Rbbl09ci5qb2luKCIuIilpbiBlP1tpXTppOkFycmF5LmlzQXJyYXkobyk/by5wdXNoKGkpOnRbbl09W28saV19cmV0dXJuKGZ1bmN0aW9uIHModCxlLG49MWU2LGk9IlxuIil7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihyLG8peyEoZnVuY3Rpb24gYShzLGwsYyl7Y29uc3QgdT1jPj10LmJ5dGVMZW5ndGgsaD1sLnNwbGl0KGkpO2hbMF09cytoWzBdO2NvbnN0IGQ9dT8iIjpoLnBvcCgpO2ZvcihsZXQgdCBvZiBoKXRyeXtlKHQpfWNhdGNoKHQpe3JldHVybiB2b2lkIG8odCl9aWYodSlyZXR1cm4gdm9pZCByKCEwKTtjb25zdCBwPW5ldyBCbG9iKFt0LnNsaWNlKGMsYytuKV0pLGY9bmV3IEZpbGVSZWFkZXI7Zi5vbmxvYWQ9ZnVuY3Rpb24odCl7YShkLHQudGFyZ2V0LnJlc3VsdCxjK24pfSxmLnJlYWRBc1RleHQocCl9KSgiIiwiIiwwKX0pKX0pKHQsKGZ1bmN0aW9uKHQpe2lmKHQ9dC50cmltKCkpc3dpdGNoKHRbdC5sZW5ndGgtMV0pe2Nhc2UieyI6bGV0IGU9dC5zdWJzdHJpbmcoMCx0Lmxlbmd0aC0yKS50cmltKCksbj17fTtpLnB1c2gobyksci5wdXNoKGUpLGEobyxlLG4sciksbz1uO2JyZWFrO2Nhc2UifSI6bz1pLnBvcCgpLHIucG9wKCk7YnJlYWs7ZGVmYXVsdDpsZXQgcz0oZnVuY3Rpb24gZSh0KXtsZXQgZT10LmluZGV4T2YoIjoiKTtyZXR1cm57bmFtZTp0LnN1YnN0cmluZygwLGUpLnRyaW0oKSx2YWx1ZTooZnVuY3Rpb24gbih0KXtpZigidHJ1ZSI9PT10KXJldHVybiEwO2lmKCJmYWxzZSI9PT10KXJldHVybiExO2lmKCciJz09PXRbMF0pcmV0dXJuIHQuc3Vic3RyaW5nKDEsdC5sZW5ndGgtMSk7bGV0IGU9cGFyc2VGbG9hdCh0KTtyZXR1cm4gaXNOYU4oZSk/dDplfSkodC5zdWJzdHJpbmcoZSsyKS50cmltKCkpfX0pKHQpO2EobyxzLm5hbWUscy52YWx1ZSxyLmNvbmNhdChzLm5hbWUpKX19KSkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gbn0pKX1sZXQgakx0PWNsYXNzIGV4dGVuZHModHIoeWUpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb21wYXRpYmlsaXR5UHJvdmlkZXI9bmV3IEJMdCx0aGlzLmhpZXJhcmNoeVBhcmFtcz1tTHQsdGhpcy5fdGVtcGxhdGU9bnVsbH1fc2VsZWN0aW9uQ2hhbmdlZCgpe3RoaXMuc2VsZWN0aW9uJiZ0aGlzLmRlYm91bmNlKCJzZWxlY3Rpb25jaGFuZ2UiLCgoKT0+e3RoaXMuX2xvYWQodGhpcy5zZWxlY3Rpb24pfSkpfV9sb2FkKHQpe2NvbnN0e3J1bjplLHRhZzpuLHR5cGU6aX09dDtzd2l0Y2goaSl7Y2FzZSBYQ3QuT1BfR1JBUEg6Y2FzZSBYQ3QuQ09OQ0VQVFVBTF9HUkFQSDp7KGZ1bmN0aW9uKCl7dGhpcy5fc2V0T3V0U3RhdHMobnVsbCl9KS5iaW5kKHRoaXMpKCk7Y29uc3QgdD1uZXcgVVJMU2VhcmNoUGFyYW1zO3Quc2V0KCJydW4iLGUpLHQuc2V0KCJjb25jZXB0dWFsIixTdHJpbmcoaT09PVhDdC5DT05DRVBUVUFMX0dSQVBIKSksbiYmdC5zZXQoInRhZyIsbik7Y29uc3Qgcj1ncigpLnBsdWdpblJvdXRlKCJncmFwaHMiLCIvZ3JhcGgiLHQpO3JldHVybiB0aGlzLl9mZXRjaEFuZENvbnN0cnVjdEhpZXJhcmNoaWNhbEdyYXBoKHIpLnRoZW4oKCgpPT57dGhpcy5fZ3JhcGhSdW5UYWc9e3J1bjplLHRhZzpufX0pKX1jYXNlIFhDdC5QUk9GSUxFOntjb25zdHt0YWdzOnR9PXRoaXMuZGF0YXNldHMuZmluZCgoKHtuYW1lOnR9KT0+dD09PWUpKSxpPXQuZmluZCgodD0+dC50YWc9PT1uKSkub3BHcmFwaD9uOm51bGw7Y29uc29sZS5hc3NlcnQodC5maW5kKCh0PT50LnRhZz09PWkpKSxgUmVxdWlyZWQgdGFnICgke2l9KSBpcyBtaXNzaW5nLmApO2NvbnN0IHI9dGhpcy5fZ3JhcGhSdW5UYWcmJnRoaXMuX2dyYXBoUnVuVGFnLnJ1bj09PWUmJnRoaXMuX2dyYXBoUnVuVGFnLnRhZz09PWk/UHJvbWlzZS5yZXNvbHZlKCk6dGhpcy5fbG9hZCh7cnVuOmUsdGFnOmksdHlwZTpYQ3QuT1BfR1JBUEh9KSxvPW5ldyBVUkxTZWFyY2hQYXJhbXM7by5zZXQoInRhZyIsbiksby5zZXQoInJ1biIsZSk7Y29uc3QgYT1ncigpLnBsdWdpblJvdXRlKCJncmFwaHMiLCIvcnVuX21ldGFkYXRhIixvKTtyZXR1cm4gci50aGVuKCgoKT0+dGhpcy5fcmVhZEFuZFBhcnNlTWV0YWRhdGEoYSkpKX1kZWZhdWx0OnJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoYFVua25vd24gc2VsZWN0aW9uIHR5cGU6ICR7aX1gKSl9fV9yZWFkQW5kUGFyc2VNZXRhZGF0YSh0KXt0aGlzLnNldCgicHJvZ3Jlc3MiLHt2YWx1ZTowLG1zZzoiIn0pLChmdW5jdGlvbiBlKHQsbil7cmV0dXJuKGZ1bmN0aW9uIGkodCxlLG4scixvKXtyLnNldE1lc3NhZ2UodCk7dHJ5e2xldCBpPWlBdCh0LG4sbyk7cmV0dXJuIHIudXBkYXRlUHJvZ3Jlc3MoZSksaX1jYXRjaChlKXtyLnJlcG9ydEVycm9yKCJGYWlsZWQgIit0LGUpfX0pKCJSZWFkaW5nIG1ldGFkYXRhIHBidHh0Iiw0MCwoKCk9Pm51bGw9PXQ/UHJvbWlzZS5yZXNvbHZlKG51bGwpOkhMdCh0KSksbixZQ3QuRkVUQ0hfTUVUQURBVEFfUEJUWFRfQllURVMpLnRoZW4oKHQ9PnNBdCgiUGFyc2luZyBtZXRhZGF0YS5wYnR4dCIsNjAsKCgpPT5udWxsIT10PyhmdW5jdGlvbiBlKHQpe3JldHVybiBVTHQodCxWTHQpLnRoZW4oKHQ9PnQuc3RlcF9zdGF0cykpfSkodCk6UHJvbWlzZS5yZXNvbHZlKG51bGwpKSxuLFlDdC5QQVJTRV9NRVRBREFUQV9QQlRYVF9JTlRPX09CSkVDVCkpKX0pKHQsckF0KHRoaXMpKS50aGVuKGZ1bmN0aW9uKHQpe3RoaXMuX3NldE91dFN0YXRzKHQpfS5iaW5kKHRoaXMpKX1fZmV0Y2hBbmRDb25zdHJ1Y3RIaWVyYXJjaGljYWxHcmFwaCh0LGUpe3JldHVybiB0aGlzLnNldCgicHJvZ3Jlc3MiLHt2YWx1ZTowLG1zZzoiIn0pLChmdW5jdGlvbiBpKHQsZSxyLG89bmV3IEJMdCxhPW1MdCl7Y29uc3Qgcz1vQXQodCwzMCwiRGF0YSIpLGw9b0F0KHQsMjAsIkdyYXBoIiksYz1vQXQodCw1MCwiTmFtZXNwYWNlIGhpZXJhcmNoeSIpLHU9RGF0ZS5ub3coKTtyZXR1cm4oZnVuY3Rpb24gaCh0LGUsaSl7cmV0dXJuIHNBdCgiUmVhZGluZyBncmFwaCBwYnR4dCIsNDAsKCgpPT5uKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgbj1EYXRlLm5vdygpO2lmKGUpe2NvbnN0IHQ9eWllbGQgbmV3IFByb21pc2UoKGZ1bmN0aW9uKHQsbil7bGV0IGk9bmV3IEZpbGVSZWFkZXI7aS5vbmxvYWQ9KCk9PnQoaS5yZXN1bHQpLGkub25lcnJvcj0oKT0+bihpLmVycm9yKSxpLnJlYWRBc0FycmF5QnVmZmVyKGUpfSkpO3JldHVybiBuQXQoe3RpbWluZ0lkOllDdC5GRVRDSF9QQlRYVF9CWVRFU19GUk9NX0ZJTEVTWVNURU0sZXZlbnRWYWx1ZTpEYXRlLm5vdygpLW59KSx0fWNvbnN0IGk9eWllbGQgSEx0KHQpO3JldHVybiBuQXQoe3RpbWluZ0lkOllDdC5GRVRDSF9QQlRYVF9CWVRFU19GUk9NX1NFUlZFUixldmVudFZhbHVlOkRhdGUubm93KCktbn0pLGl9KSkpLGksWUN0LkZFVENIX1BCVFhUX0JZVEVTKS50aGVuKCh0PT5zQXQoIlBhcnNpbmcgZ3JhcGgucGJ0eHQiLDYwLCgoKT0+KGZ1bmN0aW9uIGUodCl7cmV0dXJuIFVMdCh0LEZMdCl9KSh0KSksaSxZQ3QuUEFSU0VfUEJUWFRfSU5UT19PQkpFQ1QpKSl9KShlLHIscykudGhlbigoZnVuY3Rpb24odCl7aWYoIXQubm9kZSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBncmFwaCBpcyBlbXB0eS4gVGhpcyBjYW4gaGFwcGVuIHdoZW4gVGVuc29yRmxvdyBjb3VsZCBub3QgdHJhY2UgYW55IGdyYXBoLiBQbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvaXNzdWVzLzE5NjEgZm9yIG1vcmUgaW5mb3JtYXRpb24uIik7cmV0dXJuKGZ1bmN0aW9uIGUodCxuLGkpe2xldCByPXt9LG89e30sYT17fSxzPXpBdChuLmluRW1iZWRkaW5nVHlwZXMpLGw9ekF0KG4ub3V0RW1iZWRkaW5nVHlwZXMpLGM9W10sdT10Lm5vZGUsaD1uZXcgQXJyYXkodS5sZW5ndGgpO3JldHVybiBhQXQoIk5vcm1hbGl6aW5nIG5hbWVzIiwzMCwoKCk9PntsZXQgZT1uZXcgQXJyYXkodS5sZW5ndGgpLG49MDtjb25zdCBpPXQ9PntsZXQgaT1uZXcgTUF0KHQpO3JldHVybiBzKGkpPyhjLnB1c2goaS5uYW1lKSxyW2kubmFtZV09aSxpKTpsKGkpPyhjLnB1c2goaS5uYW1lKSxvW2kubmFtZV09aSx3ZS5lYWNoKGkuaW5wdXRzLCh0PT57bGV0IGU9dC5uYW1lO2FbZV09YVtlXXx8W10sYVtlXS5wdXNoKGkpfSkpLGkpOihlW25dPWksaFtuXT1pLm5hbWUsbisrLGkpfTtyZXR1cm4gd2UuZWFjaCh1LGkpLHQubGlicmFyeSYmdC5saWJyYXJ5LmZ1bmN0aW9uJiZ3ZS5lYWNoKHQubGlicmFyeS5mdW5jdGlvbiwodD0+e2NvbnN0IGU9X0F0K3Quc2lnbmF0dXJlLm5hbWU7aWYoaSh7bmFtZTplLGlucHV0OltdLGRldmljZToiIixvcDoiIixhdHRyOltdfSksdC5zaWduYXR1cmUuaW5wdXRfYXJnKXtsZXQgbj0wO2NvbnN0IHI9dD0+e2koe25hbWU6ZSttQXQrdC5uYW1lLGlucHV0OltdLGRldmljZToiIixvcDoiaW5wdXRfYXJnIixhdHRyOlt7a2V5OiJUIix2YWx1ZTp7dHlwZTp0LnR5cGV9fV19KS5mdW5jdGlvbklucHV0SW5kZXg9bixuKyt9O3Quc2lnbmF0dXJlLmlucHV0X2FyZy5uYW1lP3IodC5zaWduYXR1cmUuaW5wdXRfYXJnKTp3ZS5lYWNoKHQuc2lnbmF0dXJlLmlucHV0X2FyZyxyKX1sZXQgbj0wO2NvbnN0IHI9e307aWYodC5zaWduYXR1cmUub3V0cHV0X2FyZyl7Y29uc3QgaT10PT57cltlK21BdCt0Lm5hbWVdPW4sbisrfTt0LnNpZ25hdHVyZS5vdXRwdXRfYXJnLm5hbWU/aSh0LnNpZ25hdHVyZS5vdXRwdXRfYXJnKTp3ZS5lYWNoKHQuc2lnbmF0dXJlLm91dHB1dF9hcmcsaSl9d2UuZWFjaCh0Lm5vZGVfZGVmLCh0PT57dC5uYW1lPWUrIi8iK3QubmFtZSwic3RyaW5nIj09dHlwZW9mIHQuaW5wdXQmJih0LmlucHV0PVt0LmlucHV0XSk7Y29uc3Qgbj1pKHQpO3dlLmlzTnVtYmVyKHJbdC5uYW1lXSkmJihuLmZ1bmN0aW9uT3V0cHV0SW5kZXg9clt0Lm5hbWVdKSx3ZS5lYWNoKG4uaW5wdXRzLCh0PT57dC5uYW1lPWUrbUF0K3QubmFtZX0pKX0pKX0pKSxlLnNwbGljZShuKSxoLnNwbGljZShuKSxlfSksaSxZQ3QuTk9STUFMSVpJTkdfTkFNRVMpLnRoZW4oKHQ9PmFBdCgiQnVpbGRpbmcgdGhlIGRhdGEgc3RydWN0dXJlIiw3MCwoKCk9PntsZXQgZT0oZnVuY3Rpb24gaSh0LGUpe2xldCBuPXt9LGk9e307dC5zb3J0KCk7Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aC0xOysrZSl7bGV0IHI9dFtlXTt3ZS5lYWNoKEhBdChyKS5zbGljZSgwLC0xKSwodD0+e2lbdF09ITB9KSk7Zm9yKGxldCBpPWUrMTtpPHQubGVuZ3RoOysraSl7bGV0IGU9dFtpXTtpZighd2Uuc3RhcnRzV2l0aChlLHIpKWJyZWFrO2lmKGUubGVuZ3RoPnIubGVuZ3RoJiZlLmNoYXJBdChyLmxlbmd0aCk9PT1tQXQpe25bcl09REF0KHIpO2JyZWFrfX19cmV0dXJuIHdlLmVhY2goZSwodD0+e3QgaW4gaSYmKG5bdF09REF0KHQpKX0pKSxufSkoaCxjKSxzPW5ldyB3QXQ7cmV0dXJuIHdlLmVhY2godCwodD0+e2xldCBuPWVbdC5uYW1lXXx8dC5uYW1lO3Mubm9kZXNbbl09dCx0Lm5hbWUgaW4gYSYmKHQub3V0RW1iZWRkaW5ncz1hW3QubmFtZV0sd2UuZWFjaCh0Lm91dEVtYmVkZGluZ3MsKHQ9Pnt0Lm5hbWU9ZVt0Lm5hbWVdfHx0Lm5hbWV9KSkpLHQubmFtZT1ufSkpLHdlLmVhY2godCwodD0+e3dlLmVhY2godC5pbnB1dHMsKChpLGEpPT57bGV0IGw9aS5uYW1lO2lmKGwgaW4gcil7bGV0IGk9cltsXTt0LmluRW1iZWRkaW5ncy5wdXNoKGkpO2ZvcihsZXQgciBvZiBpLmlucHV0cylJQXQocyxlW3IubmFtZV18fHIubmFtZSx0LHIsbixhKX1lbHNlIGlmKGwgaW4gbyl7bGV0IHI9b1tsXTtmb3IobGV0IG8gb2Ygci5pbnB1dHMpSUF0KHMsZVtvLm5hbWVdfHxvLm5hbWUsdCxpLG4sYSl9ZWxzZSBJQXQocyxlW2xdfHxsLHQsaSxuLGEpfSkpfSkpLHdlLmVhY2gociwoKHQsbik9Pnt0Lm5hbWU9ZVt0Lm5hbWVdfHx0Lm5hbWV9KSksc30pLGksWUN0LkJVSUxEX1NMSU1fR1JBUEgpKSl9KSh0LE9BdCxsKX0pLCgoKT0+e3Rocm93IG5ldyBFcnJvcigiTWFsZm9ybWVkIEdyYXBoRGVmLiBUaGlzIGNhbiBzb21ldGltZXMgYmUgY2F1c2VkIGJ5IGEgYmFkIG5ldHdvcmsgY29ubmVjdGlvbiBvciBkaWZmaWN1bHR5IHJlY29uY2lsaW5nIG11bHRpcGxlIEdyYXBoRGVmczsgZm9yIHRoZSBsYXR0ZXIgY2FzZSwgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2lzc3Vlcy8xOTI5LiIpfSkpLnRoZW4oKHQ9Pm4odGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXshKGZ1bmN0aW9uIGUodCxuKXtpZihudWxsPT09bil0aHJvdyBuZXcgRXJyb3IoIkNvbXBhdGliaWxpdHkgcHJvdmlkZXIgcmVxdWlyZWQsIGJ1dCBnb3Q6ICIrbik7d2UuZWFjaCh0Lm5vZGVzLCh0PT57dC5jb21wYXRpYmxlPW4ub3BWYWxpZCh0KSx3ZS5lYWNoKHQuaW5FbWJlZGRpbmdzLCh0PT57dC5jb21wYXRpYmxlPW4ub3BWYWxpZCh0KX0pKSx3ZS5lYWNoKHQub3V0RW1iZWRkaW5ncywodD0+e3QuY29tcGF0aWJsZT1uLm9wVmFsaWQodCl9KSl9KSl9KSh0LG8pO2NvbnN0IG49eWllbGQgZ0x0KHQsYSxjKTtyZXR1cm4gbkF0KHt0aW1pbmdJZDpZQ3QuR1JBUEhfTE9BRF9TVUNDRUVERUQsZXZlbnRWYWx1ZTpEYXRlLm5vdygpLXV9KSx7Z3JhcGg6dCxncmFwaEhpZXJhcmNoeTpufX0pKSkpLmNhdGNoKChlPT57dGhyb3cgdC5yZXBvcnRFcnJvcihgR3JhcGggdmlzdWFsaXphdGlvbiBmYWlsZWQuXG5cbiR7ZX1gLGUpLG5BdCh7dGltaW5nSWQ6WUN0LkdSQVBIX0xPQURfRkFJTEVELGV2ZW50VmFsdWU6RGF0ZS5ub3coKS11fSksZX0pKX0pKHJBdCh0aGlzKSx0LGUsdGhpcy5jb21wYXRpYmlsaXR5UHJvdmlkZXIsdGhpcy5oaWVyYXJjaHlQYXJhbXMpLnRoZW4oZnVuY3Rpb24oe2dyYXBoOnQsZ3JhcGhIaWVyYXJjaHk6ZX0pe3RoaXMuX3NldE91dEdyYXBoKHQpLHRoaXMuX3NldE91dEdyYXBoSGllcmFyY2h5KGUpfS5iaW5kKHRoaXMpKX1fc2VsZWN0ZWRGaWxlQ2hhbmdlZCgpe3ZhciB0PXRoaXMuc2VsZWN0ZWRGaWxlO2lmKCF0KXJldHVybjtjb25zdCBlPXQudGFyZ2V0LG49ZS5maWxlc1swXTtuJiYoZS52YWx1ZT0iIix0aGlzLl9mZXRjaEFuZENvbnN0cnVjdEhpZXJhcmNoaWNhbEdyYXBoKG51bGwsbikpfX07dChbbyh7dHlwZTpBcnJheX0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLGpMdC5wcm90b3R5cGUsImRhdGFzZXRzIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxqTHQucHJvdG90eXBlLCJwcm9ncmVzcyIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxqTHQucHJvdG90eXBlLCJzZWxlY3Rpb24iLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sakx0LnByb3RvdHlwZSwic2VsZWN0ZWRGaWxlIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLGpMdC5wcm90b3R5cGUsImNvbXBhdGliaWxpdHlQcm92aWRlciIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxqTHQucHJvdG90eXBlLCJoaWVyYXJjaHlQYXJhbXMiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3QscmVhZE9ubHk6ITAsbm90aWZ5OiEwfSksZSgiZGVzaWduOnR5cGUiLHBMdCldLGpMdC5wcm90b3R5cGUsIm91dEdyYXBoSGllcmFyY2h5Iix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0LHJlYWRPbmx5OiEwLG5vdGlmeTohMH0pLGUoImRlc2lnbjp0eXBlIix3QXQpXSxqTHQucHJvdG90eXBlLCJvdXRHcmFwaCIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdCxyZWFkT25seTohMCxub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sakx0LnByb3RvdHlwZSwib3V0U3RhdHMiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sakx0LnByb3RvdHlwZSwiX2dyYXBoUnVuVGFnIix2b2lkIDApLHQoW2EoInNlbGVjdGlvbiIsImNvbXBhdGliaWxpdHlQcm92aWRlciIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sakx0LnByb3RvdHlwZSwiX3NlbGVjdGlvbkNoYW5nZWQiLG51bGwpLHQoW2EoInNlbGVjdGVkRmlsZSIsImNvbXBhdGliaWxpdHlQcm92aWRlciIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sakx0LnByb3RvdHlwZSwiX3NlbGVjdGVkRmlsZUNoYW5nZWQiLG51bGwpLGpMdD10KFtpKCJ0Zi1ncmFwaC1kYXNoYm9hcmQtbG9hZGVyIildLGpMdCk7bGV0IEdMdD1jbGFzcyBleHRlbmRzKHRyKHllKSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2RhdGFzZXRzPVtdLHRoaXMuX2RhdGFzZXRzRmV0Y2hlZD0hMSx0aGlzLl9zZWxlY3RlZERhdGFzZXQ9MCx0aGlzLl9yZXF1ZXN0TWFuYWdlcj1uZXcgaHIsdGhpcy5fY2FuY2VsbGVyPW5ldyBOTyx0aGlzLnNwZWNpZmljSGVhbHRoUGlsbFN0ZXA9MCx0aGlzLmhlYWx0aFBpbGxzVG9nZ2xlZE9uPSExLHRoaXMuX2RlYnVnZ2VyTnVtZXJpY0FsZXJ0cz1bXSx0aGlzLl9ub2RlTmFtZXNUb0hlYWx0aFBpbGxzPXt9LHRoaXMuX2hlYWx0aFBpbGxSZXF1ZXN0SWQ9MSx0aGlzLl9oZWFsdGhQaWxsU3RlcFJlcXVlc3RUaW1lckRlbGF5PTUwMCx0aGlzLnJ1bj1JcygicnVuIix7ZGVmYXVsdFZhbHVlOiIiLHVzZUxvY2FsU3RvcmFnZTohMX0pLmNhbGwodGhpcyksdGhpcy5fcnVuT2JzZXJ2ZXI9T3MoInJ1biIse2RlZmF1bHRWYWx1ZToiIixwb2x5bWVyUHJvcGVydHk6InJ1biIsdXNlTG9jYWxTdG9yYWdlOiExfSl9YXR0YWNoZWQoKXt0aGlzLnNldCgiX2lzQXR0YWNoZWQiLCEwKX1kZXRhY2hlZCgpe3RoaXMuc2V0KCJfaXNBdHRhY2hlZCIsITEpfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoIm5vZGUtdG9nZ2xlLWV4cGFuZCIsdGhpcy5faGFuZGxlTm9kZVRvZ2dsZUV4cGFuZC5iaW5kKHRoaXMpKX1yZWxvYWQoKXt0aGlzLl9kZWJ1Z2dlckRhdGFFbmFibGVkfHx0aGlzLl9yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KGdyKCkucGx1Z2luc0xpc3RpbmcoKSkudGhlbih0aGlzLl9jYW5jZWxsZXIuY2FuY2VsbGFibGUoKHQ9Pnt0LmNhbmNlbGxlZHx8dC52YWx1ZS5kZWJ1Z2dlciYmdGhpcy5zZXQoIl9kZWJ1Z2dlckRhdGFFbmFibGVkIiwhMCl9KSkpLHRoaXMuX21heWJlRmV0Y2hIZWFsdGhQaWxscygpfV9maXQoKXt0aGlzLiQkKCIjZ3JhcGhib2FyZCIpLmZpdCgpfV9vbkRvd25sb2FkSW1hZ2VSZXF1ZXN0ZWQodCl7dGhpcy4kJCgiI2dyYXBoYm9hcmQiKS5kb3dubG9hZEFzSW1hZ2UodC5kZXRhaWwpfV9nZXRHcmFwaERpc3BsYXlDbGFzc05hbWUodCxlKXtyZXR1cm4gdHx8ZS5sZW5ndGg/IiI6Im5vLWdyYXBoIn1fZmV0Y2hEYXRhc2V0KCl7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoZ3IoKS5wbHVnaW5Sb3V0ZSgiZ3JhcGhzIiwiL2luZm8iKSl9X2ZldGNoSGVhbHRoUGlsbHModCxlKXtjb25zdCBuPXtub2RlX25hbWVzOkpTT04uc3RyaW5naWZ5KHQpLHJ1bjoiX19kZWJ1Z2dlcl9kYXRhX18ifTt2b2lkIDAhPT1lJiYobi5zdGVwPWUpO2NvbnN0IGk9Z3IoKS5wbHVnaW5Sb3V0ZSgiZGVidWdnZXIiLCIvaGVhbHRoX3BpbGxzIik7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoaSxuKX1fZmV0Y2hEZWJ1Z2dlck51bWVyaWNzQWxlcnRzKCl7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoZ3IoKS5wbHVnaW5Sb3V0ZSgiZGVidWdnZXIiLCIvbnVtZXJpY3NfYWxlcnRfcmVwb3J0IikpfV9ncmFwaFVybCh0LGUsbil7cmV0dXJuIGdyKCkucGx1Z2luUm91dGUoImdyYXBocyIsIi9ncmFwaCIsbmV3IFVSTFNlYXJjaFBhcmFtcyh7cnVuOnQsbGltaXRfYXR0cl9zaXplOmUsbGFyZ2VfYXR0cnNfa2V5Om59KSl9X3Nob3VsZFJlcXVlc3RIZWFsdGhQaWxscygpe3JldHVybiB0aGlzLl9kZWJ1Z2dlckRhdGFFbmFibGVkJiZ0aGlzLmhlYWx0aFBpbGxzVG9nZ2xlZE9uJiZ0aGlzLl9yZW5kZXJIaWVyYXJjaHkmJnRoaXMuX2RhdGFzZXRzU3RhdGUodGhpcy5fZGF0YXNldHNGZXRjaGVkLHRoaXMuX2RhdGFzZXRzLCJQUkVTRU5UIil9X21heWJlSW5pdGlhbGl6ZURhc2hib2FyZCgpeyF0aGlzLl9pbml0aWFsaXplZCYmdGhpcy5faXNBdHRhY2hlZCYmKHRoaXMuc2V0KCJfY29tcGF0aWJpbGl0eVByb3ZpZGVyIixuZXcgQkx0KSx0aGlzLl9pbml0aWFsaXplZD0hMCx0aGlzLl9mZXRjaERhdGFzZXQoKS50aGVuKCh0PT57Y29uc3QgZT1PYmplY3Qua2V5cyh0KTt0aGlzLl9kYXRhc2V0cz1lLnNvcnQoZXIpLm1hcCgoZT0+e2NvbnN0IG49dFtlXSxpPU9iamVjdC5rZXlzKG4udGFncykuc29ydChlcikubWFwKCh0PT5uLnRhZ3NbdF0pKS5tYXAoKCh7dGFnOnQsY29uY2VwdHVhbF9ncmFwaDplLG9wX2dyYXBoOm4scHJvZmlsZTppfSk9Pih7dGFnOnQsZGlzcGxheU5hbWU6dCxjb25jZXB0dWFsR3JhcGg6ZSxvcEdyYXBoOm4scHJvZmlsZTppfSkpKTtyZXR1cm57bmFtZTplLHRhZ3M6bi5ydW5fZ3JhcGg/W3t0YWc6bnVsbCxkaXNwbGF5TmFtZToiRGVmYXVsdCIsY29uY2VwdHVhbEdyYXBoOiExLG9wR3JhcGg6ITAscHJvZmlsZTohMX0sLi4uaV06aX19KSksdGhpcy5fZGF0YXNldHNGZXRjaGVkPSEwfSkpKX1fZGV0ZXJtaW5lU2VsZWN0ZWREYXRhc2V0KCl7dmFyIHQ9dGhpcy5fZGF0YXNldHNGZXRjaGVkLGU9dGhpcy5fZGF0YXNldHMsbj10aGlzLnJ1bjtpZighbilyZXR1cm4gdm9pZCB0aGlzLnNldCgiX3NlbGVjdGVkRGF0YXNldCIsMCk7Y29uc3QgaT1lLmZpbmRJbmRleCgodD0+dC5uYW1lPT09bikpO2lmKC0xIT09aSl0aGlzLnNldCgiX3NlbGVjdGVkRGF0YXNldCIsaSk7ZWxzZSBpZih0KXtjb25zdCB0PXRoaXMuJCQoIiNlcnJvci1kaWFsb2ciKTt0LnRleHRDb250ZW50PWBObyBkYXRhc2V0IG5hbWVkICIke259IiBjb3VsZCBiZSBmb3VuZC5gLHQub3BlbigpfX1fdXBkYXRlU2VsZWN0ZWREYXRhc2V0TmFtZSgpe3ZhciB0PXRoaXMuX2RhdGFzZXRzLGU9dGhpcy5fc2VsZWN0ZWREYXRhc2V0O3RoaXMuX2RhdGFzZXRzRmV0Y2hlZCYmKHQubGVuZ3RoPD1lfHx0aGlzLnNldCgicnVuIix0W2VdLm5hbWUpKX1fcmVxdWVzdEhlYWx0aFBpbGxzKCl7dGhpcy5zZXQoIl9hcmVIZWFsdGhQaWxsc0xvYWRpbmciLCEwKTt2YXIgdD0rK3RoaXMuX2hlYWx0aFBpbGxSZXF1ZXN0SWQ7bnVsbCE9PXRoaXMuX2hlYWx0aFBpbGxTdGVwUmVxdWVzdFRpbWVySWQmJih3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMuX2hlYWx0aFBpbGxTdGVwUmVxdWVzdFRpbWVySWQpLHRoaXMuX2hlYWx0aFBpbGxTdGVwUmVxdWVzdFRpbWVySWQ9bnVsbCksdGhpcy5hbGxTdGVwc01vZGVFbmFibGVkP3RoaXMuX2hlYWx0aFBpbGxTdGVwUmVxdWVzdFRpbWVySWQ9c2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuX2hlYWx0aFBpbGxTdGVwUmVxdWVzdFRpbWVySWQ9bnVsbCx0aGlzLl9pbml0aWF0ZU5ldHdvcmtSZXF1ZXN0Rm9ySGVhbHRoUGlsbHModCl9LmJpbmQodGhpcyksdGhpcy5faGVhbHRoUGlsbFN0ZXBSZXF1ZXN0VGltZXJEZWxheSk6dGhpcy5faW5pdGlhdGVOZXR3b3JrUmVxdWVzdEZvckhlYWx0aFBpbGxzKHQpfV9pbml0aWF0ZU5ldHdvcmtSZXF1ZXN0Rm9ySGVhbHRoUGlsbHModCl7aWYodGhpcy5faGVhbHRoUGlsbFJlcXVlc3RJZCE9PXQpcmV0dXJuO2NvbnN0IGU9dGhpcy5hbGxTdGVwc01vZGVFbmFibGVkP3RoaXMuc3BlY2lmaWNIZWFsdGhQaWxsU3RlcDp2b2lkIDAsbj10aGlzLl9mZXRjaEhlYWx0aFBpbGxzKHRoaXMuX3JlbmRlckhpZXJhcmNoeS5nZXROYW1lc09mUmVuZGVyZWRPcHMoKSxlKSxpPXRoaXMuX2ZldGNoRGVidWdnZXJOdW1lcmljc0FsZXJ0cygpO1Byb21pc2UuYWxsKFtuLGldKS50aGVuKGZ1bmN0aW9uKGUpe3ZhciBuPWVbMF0saT1lWzFdO2lmKHRoaXMuaGVhbHRoUGlsbHNUb2dnbGVkT24mJnQ9PT10aGlzLl9oZWFsdGhQaWxsUmVxdWVzdElkKXtmb3IodmFyIHIgaW4gbil7dGhpcy5zZXQoIl9oZWFsdGhQaWxsU3RlcEluZGV4IixuW3JdLmxlbmd0aC0xKTticmVha310aGlzLnNldCgiX2RlYnVnZ2VyTnVtZXJpY0FsZXJ0cyIsaSksdGhpcy5zZXQoIl9ub2RlTmFtZXNUb0hlYWx0aFBpbGxzIixuKSx0aGlzLnNldCgiX2FyZUhlYWx0aFBpbGxzTG9hZGluZyIsITEpLHRoaXMuc2V0KCJfaGVhbHRoUGlsbFN0ZXBSZXF1ZXN0VGltZXJJZCIsbnVsbCl9fS5iaW5kKHRoaXMpKX1fZGF0YXNldHNTdGF0ZSh0LGUsbil7cmV0dXJuIHQ/ZSYmZS5sZW5ndGg/IlBSRVNFTlQiPT09bjoiRU1QVFkiPT09bjoiTk9UX0xPQURFRCI9PT1ufV9yZW5kZXJIaWVyYXJjaHlDaGFuZ2VkKHQpe3RoaXMucmVsb2FkKCl9X2hhbmRsZU5vZGVUb2dnbGVFeHBhbmQoKXt0aGlzLl9tYXliZUZldGNoSGVhbHRoUGlsbHMoKX1faGVhbHRoUGlsbHNUb2dnbGVkT25DaGFuZ2VkKHQpe3Q/dGhpcy5yZWxvYWQoKTp0aGlzLnNldCgiX25vZGVOYW1lc1RvSGVhbHRoUGlsbHMiLHt9KX1fbWF5YmVGZXRjaEhlYWx0aFBpbGxzKCl7dGhpcy5fc2hvdWxkUmVxdWVzdEhlYWx0aFBpbGxzKCkmJnRoaXMuX3JlcXVlc3RIZWFsdGhQaWxscygpfX07R0x0LnRlbXBsYXRlPV9lYAogICAgPHBhcGVyLWRpYWxvZyBpZD0iZXJyb3ItZGlhbG9nIiB3aXRoLWJhY2tkcm9wPjwvcGFwZXItZGlhbG9nPgogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDx0Zi1ncmFwaC1jb250cm9scwogICAgICAgIGlkPSJjb250cm9scyIKICAgICAgICBjbGFzcz0ic2lkZWJhciIKICAgICAgICBzbG90PSJzaWRlYmFyIgogICAgICAgIGRldmljZXMtZm9yLXN0YXRzPSJ7e19kZXZpY2VzRm9yU3RhdHN9fSIKICAgICAgICBjb2xvci1ieS1wYXJhbXM9IltbX2NvbG9yQnlQYXJhbXNdXSIKICAgICAgICBzdGF0cz0iW1tfc3RhdHNdXSIKICAgICAgICBjb2xvci1ieT0ie3tfY29sb3JCeX19IgogICAgICAgIGRhdGFzZXRzPSJbW19kYXRhc2V0c11dIgogICAgICAgIHJlbmRlci1oaWVyYXJjaHk9IltbX3JlbmRlckhpZXJhcmNoeV1dIgogICAgICAgIHNlbGVjdGlvbj0ie3tfc2VsZWN0aW9ufX0iCiAgICAgICAgc2VsZWN0ZWQtZmlsZT0ie3tfc2VsZWN0ZWRGaWxlfX0iCiAgICAgICAgc2VsZWN0ZWQtbm9kZT0ie3tfc2VsZWN0ZWROb2RlfX0iCiAgICAgICAgaGVhbHRoLXBpbGxzLWZlYXR1cmUtZW5hYmxlZD0iW1tfZGVidWdnZXJEYXRhRW5hYmxlZF1dIgogICAgICAgIGhlYWx0aC1waWxscy10b2dnbGVkLW9uPSJ7e2hlYWx0aFBpbGxzVG9nZ2xlZE9ufX0iCiAgICAgICAgb24tZml0LXRhcD0iX2ZpdCIKICAgICAgICB0cmFjZS1pbnB1dHM9Int7X3RyYWNlSW5wdXRzfX0iCiAgICAgICAgYXV0by1leHRyYWN0LW5vZGVzPSJ7e19hdXRvRXh0cmFjdE5vZGVzfX0iCiAgICAgICAgb24tZG93bmxvYWQtaW1hZ2UtcmVxdWVzdGVkPSJfb25Eb3dubG9hZEltYWdlUmVxdWVzdGVkIgogICAgICA+PC90Zi1ncmFwaC1jb250cm9scz4KICAgICAgPGRpdgogICAgICAgIGNsYXNzJD0iY2VudGVyIFtbX2dldEdyYXBoRGlzcGxheUNsYXNzTmFtZShfc2VsZWN0ZWRGaWxlLCBfZGF0YXNldHMpXV0iCiAgICAgICAgc2xvdD0iY2VudGVyIgogICAgICA+CiAgICAgICAgPHRmLWdyYXBoLWRhc2hib2FyZC1sb2FkZXIKICAgICAgICAgIGlkPSJsb2FkZXIiCiAgICAgICAgICBkYXRhc2V0cz0iW1tfZGF0YXNldHNdXSIKICAgICAgICAgIHNlbGVjdGlvbj0iW1tfc2VsZWN0aW9uXV0iCiAgICAgICAgICBzZWxlY3RlZC1maWxlPSJbW19zZWxlY3RlZEZpbGVdXSIKICAgICAgICAgIG91dC1ncmFwaC1oaWVyYXJjaHk9Int7X2dyYXBoSGllcmFyY2h5fX0iCiAgICAgICAgICBvdXQtZ3JhcGg9Int7X2dyYXBofX0iCiAgICAgICAgICBvdXQtc3RhdHM9Int7X3N0YXRzfX0iCiAgICAgICAgICBwcm9ncmVzcz0ie3tfcHJvZ3Jlc3N9fSIKICAgICAgICAgIGhpZXJhcmNoeS1wYXJhbXM9IltbX2hpZXJhcmNoeVBhcmFtc11dIgogICAgICAgICAgY29tcGF0aWJpbGl0eS1wcm92aWRlcj0iW1tfY29tcGF0aWJpbGl0eVByb3ZpZGVyXV0iCiAgICAgICAgPjwvdGYtZ3JhcGgtZGFzaGJvYXJkLWxvYWRlcj4KICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLW1lc3NhZ2UiPgogICAgICAgICAgPGgzPk5vIGdyYXBoIGRlZmluaXRpb24gZmlsZXMgd2VyZSBmb3VuZC48L2gzPgogICAgICAgICAgPHA+CiAgICAgICAgICAgIFRvIHN0b3JlIGEgZ3JhcGgsIGNyZWF0ZSBhCiAgICAgICAgICAgIDxjb2RlPnRmLnN1bW1hcnkuRmlsZVdyaXRlcjwvY29kZT4KICAgICAgICAgICAgYW5kIHBhc3MgdGhlIGdyYXBoIGVpdGhlciB2aWEgdGhlIGNvbnN0cnVjdG9yLCBvciBieSBjYWxsaW5nIGl0cwogICAgICAgICAgICA8Y29kZT5hZGRfZ3JhcGgoKTwvY29kZT4gbWV0aG9kLiBZb3UgbWF5IHdhbnQgdG8gY2hlY2sgb3V0IHRoZQogICAgICAgICAgICA8YSBocmVmPSJodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy90ZW5zb3Jib2FyZC9ncmFwaHMiCiAgICAgICAgICAgICAgPmV4YW1pbmluZyB0aGUgVGVuc29yRmxvdyBncmFwaCB0dXRvcmlhbDwvYQogICAgICAgICAgICA+LgogICAgICAgICAgPC9wPgoKICAgICAgICAgIDxwPgogICAgICAgICAgICBJZiB5b3XigJlyZSBuZXcgdG8gdXNpbmcgVGVuc29yQm9hcmQsIGFuZCB3YW50IHRvIGZpbmQgb3V0IGhvdyB0byBhZGQKICAgICAgICAgICAgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgPGEKICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQiCiAgICAgICAgICAgICAgPlJFQURNRTwvYQogICAgICAgICAgICA+CiAgICAgICAgICAgIGFuZCBwZXJoYXBzIHRoZQogICAgICAgICAgICA8YQogICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiCiAgICAgICAgICAgICAgPlRlbnNvckJvYXJkIHR1dG9yaWFsPC9hCiAgICAgICAgICAgID4uCiAgICAgICAgICA8L3A+CgogICAgICAgICAgPHA+CiAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI215LXRlbnNvcmJvYXJkLWlzbnQtc2hvd2luZy1hbnktZGF0YS13aGF0cy13cm9uZyIKICAgICAgICAgICAgICA+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYQogICAgICAgICAgICA+CiAgICAgICAgICAgIGFuZCBjb25zaWRlciBmaWxpbmcgYW4gaXNzdWUgb24gR2l0SHViLgogICAgICAgICAgPC9wPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImdyYXBoYm9hcmQiPgogICAgICAgICAgPHRmLWdyYXBoLWJvYXJkCiAgICAgICAgICAgIGlkPSJncmFwaGJvYXJkIgogICAgICAgICAgICBkZXZpY2VzLWZvci1zdGF0cz0iW1tfZGV2aWNlc0ZvclN0YXRzXV0iCiAgICAgICAgICAgIGNvbG9yLWJ5PSJ7e19jb2xvckJ5fX0iCiAgICAgICAgICAgIGNvbG9yLWJ5LXBhcmFtcz0ie3tfY29sb3JCeVBhcmFtc319IgogICAgICAgICAgICBncmFwaC1oaWVyYXJjaHk9IltbX2dyYXBoSGllcmFyY2h5XV0iCiAgICAgICAgICAgIGdyYXBoPSJbW19ncmFwaF1dIgogICAgICAgICAgICBoaWVyYXJjaHktcGFyYW1zPSJbW19oaWVyYXJjaHlQYXJhbXNdXSIKICAgICAgICAgICAgcHJvZ3Jlc3M9IltbX3Byb2dyZXNzXV0iCiAgICAgICAgICAgIGRlYnVnZ2VyLWRhdGEtZW5hYmxlZD0iW1tfZGVidWdnZXJEYXRhRW5hYmxlZF1dIgogICAgICAgICAgICBhcmUtaGVhbHRoLXBpbGxzLWxvYWRpbmc9IltbX2FyZUhlYWx0aFBpbGxzTG9hZGluZ11dIgogICAgICAgICAgICBkZWJ1Z2dlci1udW1lcmljLWFsZXJ0cz0iW1tfZGVidWdnZXJOdW1lcmljQWxlcnRzXV0iCiAgICAgICAgICAgIG5vZGUtbmFtZXMtdG8taGVhbHRoLXBpbGxzPSJbW19ub2RlTmFtZXNUb0hlYWx0aFBpbGxzXV0iCiAgICAgICAgICAgIGFsbC1zdGVwcy1tb2RlLWVuYWJsZWQ9Int7YWxsU3RlcHNNb2RlRW5hYmxlZH19IgogICAgICAgICAgICBzcGVjaWZpYy1oZWFsdGgtcGlsbC1zdGVwPSJ7e3NwZWNpZmljSGVhbHRoUGlsbFN0ZXB9fSIKICAgICAgICAgICAgaGVhbHRoLXBpbGwtc3RlcC1pbmRleD0iW1tfaGVhbHRoUGlsbFN0ZXBJbmRleF1dIgogICAgICAgICAgICByZW5kZXItaGllcmFyY2h5PSJ7e19yZW5kZXJIaWVyYXJjaHl9fSIKICAgICAgICAgICAgc2VsZWN0ZWQtbm9kZT0ie3tfc2VsZWN0ZWROb2RlfX0iCiAgICAgICAgICAgIHN0YXRzPSJbW19zdGF0c11dIgogICAgICAgICAgICB0cmFjZS1pbnB1dHM9IltbX3RyYWNlSW5wdXRzXV0iCiAgICAgICAgICAgIGF1dG8tZXh0cmFjdC1ub2Rlcz0iW1tfYXV0b0V4dHJhY3ROb2Rlc11dIgogICAgICAgICAgPjwvdGYtZ3JhcGgtYm9hcmQ+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC90Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgPHN0eWxlPgogICAgICA6aG9zdCAvZGVlcC8gewogICAgICAgIGZvbnQtZmFtaWx5OiAnUm9ib3RvJywgc2Fucy1zZXJpZjsKICAgICAgfQoKICAgICAgLnNpZGViYXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAuY2VudGVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICBwYXBlci1kaWFsb2cgewogICAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgIH0KCiAgICAgIC5uby1kYXRhLW1lc3NhZ2UgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CgogICAgICAuZ3JhcGhib2FyZCB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAubm8tZ3JhcGggLmdyYXBoYm9hcmQgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5jZW50ZXI6bm90KC5uby1ncmFwaCkgLm5vLWRhdGEtbWVzc2FnZSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgLHQoW28oe3R5cGU6QXJyYXl9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSxHTHQucHJvdG90eXBlLCJfZGF0YXNldHMiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxHTHQucHJvdG90eXBlLCJfZGF0YXNldHNGZXRjaGVkIix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLEdMdC5wcm90b3R5cGUsIl9zZWxlY3RlZERhdGFzZXQiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3Qsb2JzZXJ2ZXI6Il9yZW5kZXJIaWVyYXJjaHlDaGFuZ2VkIn0pLGUoImRlc2lnbjp0eXBlIixYQXQpXSxHTHQucHJvdG90eXBlLCJfcmVuZGVySGllcmFyY2h5Iix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLGhyKV0sR0x0LnByb3RvdHlwZSwiX3JlcXVlc3RNYW5hZ2VyIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE5PKV0sR0x0LnByb3RvdHlwZSwiX2NhbmNlbGxlciIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEdMdC5wcm90b3R5cGUsIl9kZWJ1Z2dlckRhdGFFbmFibGVkIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sR0x0LnByb3RvdHlwZSwiYWxsU3RlcHNNb2RlRW5hYmxlZCIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxHTHQucHJvdG90eXBlLCJzcGVjaWZpY0hlYWx0aFBpbGxTdGVwIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbixvYnNlcnZlcjoiX2hlYWx0aFBpbGxzVG9nZ2xlZE9uQ2hhbmdlZCJ9KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEdMdC5wcm90b3R5cGUsImhlYWx0aFBpbGxzVG9nZ2xlZE9uIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxHTHQucHJvdG90eXBlLCJzZWxlY3RlZE5vZGUiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxHTHQucHJvdG90eXBlLCJfaXNBdHRhY2hlZCIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEdMdC5wcm90b3R5cGUsIl9pbml0aWFsaXplZCIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEdMdC5wcm90b3R5cGUsIl9hcmVIZWFsdGhQaWxsc0xvYWRpbmciLHZvaWQgMCksdChbbyh7dHlwZTpBcnJheSxub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSxHTHQucHJvdG90eXBlLCJfZGVidWdnZXJOdW1lcmljQWxlcnRzIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLEdMdC5wcm90b3R5cGUsIl9ub2RlTmFtZXNUb0hlYWx0aFBpbGxzIix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLEdMdC5wcm90b3R5cGUsIl9oZWFsdGhQaWxsU3RlcEluZGV4Iix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLEdMdC5wcm90b3R5cGUsIl9oZWFsdGhQaWxsUmVxdWVzdElkIix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLEdMdC5wcm90b3R5cGUsIl9oZWFsdGhQaWxsU3RlcFJlcXVlc3RUaW1lcklkIix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLEdMdC5wcm90b3R5cGUsIl9oZWFsdGhQaWxsU3RlcFJlcXVlc3RUaW1lckRlbGF5Iix2b2lkIDApLHQoW28oe3R5cGU6QXJyYXl9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSxHTHQucHJvdG90eXBlLCJydW5zIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nLG5vdGlmeTohMCxvYnNlcnZlcjoiX3J1bk9ic2VydmVyIn0pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxHTHQucHJvdG90eXBlLCJydW4iLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sR0x0LnByb3RvdHlwZSwiX3NlbGVjdGlvbiIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxHTHQucHJvdG90eXBlLCJfY29tcGF0aWJpbGl0eVByb3ZpZGVyIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sR0x0LnByb3RvdHlwZSwiX3RyYWNlSW5wdXRzIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sR0x0LnByb3RvdHlwZSwiX2F1dG9FeHRyYWN0Tm9kZXMiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sR0x0LnByb3RvdHlwZSwiX3NlbGVjdGVkRmlsZSIsdm9pZCAwKSx0KFthKCJfaXNBdHRhY2hlZCIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sR0x0LnByb3RvdHlwZSwiX21heWJlSW5pdGlhbGl6ZURhc2hib2FyZCIsbnVsbCksdChbYSgiX2RhdGFzZXRzRmV0Y2hlZCIsIl9kYXRhc2V0cyIsInJ1biIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sR0x0LnByb3RvdHlwZSwiX2RldGVybWluZVNlbGVjdGVkRGF0YXNldCIsbnVsbCksdChbYSgiX2RhdGFzZXRzRmV0Y2hlZCIsIl9kYXRhc2V0cyIsIl9zZWxlY3RlZERhdGFzZXQiKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEdMdC5wcm90b3R5cGUsIl91cGRhdGVTZWxlY3RlZERhdGFzZXROYW1lIixudWxsKSxHTHQ9dChbaSgidGYtZ3JhcGgtZGFzaGJvYXJkIildLEdMdCk7Y29uc3QgV0x0PWZOO2xldCBxTHQ9Y2xhc3MgZXh0ZW5kcyh0cihubCh5ZSkpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5tb2RlPSJvZmZzZXQiLHRoaXMudGltZVByb3BlcnR5PSJzdGVwIix0aGlzLmJpbnM9ImJpbnMiLHRoaXMueD0ieCIsdGhpcy5keD0iZHgiLHRoaXMueT0ieSIsdGhpcy5jb2xvclNjYWxlPVdMdC5zY2FsZU9yZGluYWwoV0x0LnNjaGVtZUNhdGVnb3J5MTApLHRoaXMubW9kZVRyYW5zaXRpb25EdXJhdGlvbj01MDAsdGhpcy5fbmFtZT1udWxsLHRoaXMuX2RhdGE9bnVsbH1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5zY29wZVN1YnRyZWUodGhpcy4kLnN2ZywhMCl9YXR0YWNoZWQoKXt0aGlzLl9hdHRhY2hlZD0hMH1kZXRhY2hlZCgpe3RoaXMuX2F0dGFjaGVkPSExfXNldFNlcmllc0RhdGEodCxlKXt0aGlzLl9uYW1lPXQsdGhpcy5fZGF0YT1lLHRoaXMucmVkcmF3KCl9X3JlZHJhd09uQ2hhbmdlKCl7dGhpcy5yZWRyYXcoKX1yZWRyYXcoKXt0aGlzLl9kcmF3KDApfV9tb2RlUmVkcmF3KCl7dGhpcy5fZHJhdyh0aGlzLm1vZGVUcmFuc2l0aW9uRHVyYXRpb24pfV9kcmF3KHQpe2lmKCF0aGlzLl9hdHRhY2hlZHx8IXRoaXMuX2RhdGEpcmV0dXJuO2lmKHZvaWQgMD09PXQpdGhyb3cgbmV3IEVycm9yKCJ2ei1oaXN0b2dyYW0tdGltZXNlcmllcyBfZHJhdyBuZWVkcyBkdXJhdGlvbiIpO2lmKHRoaXMuX2RhdGEubGVuZ3RoPD0wKXRocm93IG5ldyBFcnJvcigiTm90IGVub3VnaCBzdGVwcyBpbiB0aGUgZGF0YSIpO2lmKCF0aGlzLl9kYXRhWzBdLmhhc093blByb3BlcnR5KHRoaXMuYmlucykpdGhyb3cgbmV3IEVycm9yKCJObyBiaW5zIHByb3BlcnR5IG9mICciK3RoaXMuYmlucysiJyBpbiBkYXRhIik7aWYodGhpcy5fZGF0YVswXVt0aGlzLmJpbnNdLmxlbmd0aDw9MCl0aHJvdyBuZXcgRXJyb3IoIk11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgYmluIGluIGJpbnMgaW4gZGF0YSIpO2lmKCF0aGlzLl9kYXRhWzBdW3RoaXMuYmluc11bMF0uaGFzT3duUHJvcGVydHkodGhpcy54KSl0aHJvdyBuZXcgRXJyb3IoIk5vIHggcHJvcGVydHkgJyIrdGhpcy54KyInIG9uIGJpbnMgZGF0YSIpO2lmKCF0aGlzLl9kYXRhWzBdW3RoaXMuYmluc11bMF0uaGFzT3duUHJvcGVydHkodGhpcy5keCkpdGhyb3cgbmV3IEVycm9yKCJObyBkeCBwcm9wZXJ0eSAnIit0aGlzLmR4KyInIG9uIGJpbnMgZGF0YSIpO2lmKCF0aGlzLl9kYXRhWzBdW3RoaXMuYmluc11bMF0uaGFzT3duUHJvcGVydHkodGhpcy55KSl0aHJvdyBuZXcgRXJyb3IoIk5vIHkgcHJvcGVydHkgJyIrdGhpcy55KyInIG9uIGJpbnMgZGF0YSIpO3ZhciBlPXRoaXMudGltZVByb3BlcnR5LG49dGhpcy54LGk9dGhpcy5iaW5zLHI9dGhpcy5keCxvPXRoaXMueSxhPXRoaXMuX2RhdGEscz10aGlzLm1vZGUsbD1XTHQuaGNsKHRoaXMuY29sb3JTY2FsZSh0aGlzLl9uYW1lKSksYz1XTHQuc2VsZWN0KHRoaXMuJC50b29sdGlwKSx1PWZ1bmN0aW9uKHQpe3JldHVybiB0W25dfSxoPWZ1bmN0aW9uKHQpe3JldHVybiB0W29dfSxkPWZ1bmN0aW9uKHQpe3JldHVybiB0W25dK3Rbcl19LHA9ZnVuY3Rpb24odCl7cmV0dXJuIHRbZV19OyJyZWxhdGl2ZSI9PT1lJiYocD1mdW5jdGlvbih0KXtyZXR1cm4gdC53YWxsX3RpbWUtYVswXS53YWxsX3RpbWV9KTt2YXIgZixtPXRoaXMuJC5zdmcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZz1tLndpZHRoLF89bS5oZWlnaHQseT17dG9wOjUscmlnaHQ6NjAsYm90dG9tOjIwLGxlZnQ6MjR9OyJvZmZzZXQiPT09cz95LnRvcD01KyhmPV8vMi41KTpmPV8teS50b3AteS5ib3R0b207dmFyIHY9Zy15LmxlZnQteS5yaWdodCxiPV8teS50b3AteS5ib3R0b207V0x0Lm1pbihhLHUpLFdMdC5tYXgoYSxkKTt2YXIgeD1XTHQuZm9ybWF0KCIuM24iKSx3PVdMdC5mb3JtYXQoIi4wZiIpOyJ3YWxsX3RpbWUiPT09ZT93PVdMdC50aW1lRm9ybWF0KCIlbS8lZCAlWCIpOiJyZWxhdGl2ZSI9PT1lJiYodz1mdW5jdGlvbih0KXtyZXR1cm4gV0x0LmZvcm1hdCgiLjFyIikodC8zNmU1KSsiaCJ9KTt2YXIgUz1hLm1hcCgoZnVuY3Rpb24odCxlKXtyZXR1cm5bV0x0Lm1pbih0W2ldLHUpLFdMdC5tYXgodFtpXSxkKV19KSksTT1hLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIFdMdC5leHRlbnQodFtpXSxoKX0pKSxFPTUwMCxUPVdMdC5leHRlbnQoYSxwKSxDPSgid2FsbF90aW1lIj09PWU/V0x0LnNjYWxlVGltZSgpOldMdC5zY2FsZUxpbmVhcigpKS5kb21haW4oVCkucmFuZ2UoWzAsIm9mZnNldCI9PT1zP2I6MF0pLEE9V0x0LnNjYWxlTGluZWFyKCkuZG9tYWluKFswLFdMdC5tYXgoYSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gTVtlXVsxXX0pKV0pLnJhbmdlKFtmLDBdKSxrPVdMdC5zY2FsZUxpbmVhcigpLmRvbWFpbihBLmRvbWFpbigpKS5yYW5nZShbRSwwXSksTD1XTHQuc2NhbGVMaW5lYXIoKS5kb21haW4oW1dMdC5taW4oYSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gU1tlXVswXX0pKSxXTHQubWF4KGEsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIFNbZV1bMV19KSldKS5uaWNlKCkucmFuZ2UoWzAsdl0pLFA9V0x0LnNjYWxlTGluZWFyKCkuZG9tYWluKEwuZG9tYWluKCkpLnJhbmdlKFswLEVdKTtjb25zdCBOPVdMdC5zY2FsZUxpbmVhcigpLmRvbWFpbihXTHQuZXh0ZW50KGEscCkpLnJhbmdlKFtsLmJyaWdodGVyKCksbC5kYXJrZXIoKV0pLmludGVycG9sYXRlKFdMdC5pbnRlcnBvbGF0ZUhjbCk7dmFyIEk9V0x0LmF4aXNCb3R0b20oTCkudGlja3MoTWF0aC5tYXgoMix2LzIwKSksTz1XTHQuYXhpc1JpZ2h0KEMpLnRpY2tzKE1hdGgubWF4KDIsYi8xNSkpLnRpY2tGb3JtYXQodyksUj1XTHQuYXhpc1JpZ2h0KEEpLnRpY2tzKE1hdGgubWF4KDIsYi8xNSkpLnRpY2tTaXplKHYrNSkudGlja0Zvcm1hdCh4KSx6PWZ1bmN0aW9uKHQpe3JldHVybiB0W25dK3Rbcl0vMn0sRD1XTHQubGluZSgpLngoKGZ1bmN0aW9uKHQpe3JldHVybiBQKHoodCkpfSkpLnkoKGZ1bmN0aW9uKHQpe3JldHVybiBrKHRbb10pfSkpLEI9dGhpcy4kLnN2ZyxIPVdMdC5zZWxlY3QoQiksRj1ILnRyYW5zaXRpb24oKS5kdXJhdGlvbih0KSxWPUguc2VsZWN0KCJnIikuY2xhc3NlZCgic21hbGwiLChmdW5jdGlvbigpe3JldHVybiB2PjAmJnY8PTE1MH0pKS5jbGFzc2VkKCJtZWRpdW0iLChmdW5jdGlvbigpe3JldHVybiB2PjE1MCYmdjw9MzAwfSkpLmNsYXNzZWQoImxhcmdlIiwoZnVuY3Rpb24oKXtyZXR1cm4gdj4zMDB9KSksVT1GLnNlbGVjdCgiZyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3kubGVmdCsiLCIreS50b3ArIikiKSxqPVdMdC5iaXNlY3RvcihkKS5sZWZ0LEc9Vi5zZWxlY3QoIi5zdGFnZSIpLm9uKCJtb3VzZW92ZXIiLChmdW5jdGlvbigpe0ouc3R5bGUoIm9wYWNpdHkiLDEpLGV0LnN0eWxlKCJvcGFjaXR5IiwxKSxydC5zdHlsZSgib3BhY2l0eSIsMSksc3Quc3R5bGUoIm9wYWNpdHkiLDEpLGMuc3R5bGUoIm9wYWNpdHkiLDEpfSkpLm9uKCJtb3VzZW91dCIsKGZ1bmN0aW9uKCl7Si5zdHlsZSgib3BhY2l0eSIsMCksZXQuc3R5bGUoIm9wYWNpdHkiLDApLHJ0LnN0eWxlKCJvcGFjaXR5IiwwKSxzdC5zdHlsZSgib3BhY2l0eSIsMCksSi5jbGFzc2VkKCJob3Zlci1jbG9zZXN0IiwhMSksSy5jbGFzc2VkKCJvdXRsaW5lLWhvdmVyIiwhMSksYy5zdHlsZSgib3BhY2l0eSIsMCl9KSkub24oIm1vdXNlbW92ZSIsKGZ1bmN0aW9uIFcoKXt2YXIgdCxhPVdMdC5tb3VzZSh0aGlzKSxsPUwuaW52ZXJ0KGFbMF0pO2Z1bmN0aW9uIHUodCl7cmV0dXJuIE1hdGgubWluKHRbaV0ubGVuZ3RoLTEsaih0W2ldLGwpKX1DLmludmVydChhWzFdKTt2YXIgaCxkPTEvMDtKLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKGUsbCl7dmFyIGM9dShlKTtoPWU7dmFyIG09TChlW2ldW2NdW25dK2VbaV1bY11bcl0vMiksZz1BKGVbaV1bY11bb10pLF89Im9mZnNldCI9PT1zP0MocChlKSktKGYtZyk6Zyx5PU1hdGguYWJzKGFbMV0tXyk7cmV0dXJuIHk8ZCYmKGQ9eSx0PWUpLCJ0cmFuc2xhdGUoIittKyIsIitnKyIpIn0pKSxKLnNlbGVjdCgidGV4dCIpLnRleHQoKGZ1bmN0aW9uKHQpe3ZhciBlPXUodCk7cmV0dXJuIHRbaV1bZV1bb119KSksSi5jbGFzc2VkKCJob3Zlci1jbG9zZXN0IiwoZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT10fSkpLEsuY2xhc3NlZCgib3V0bGluZS1ob3ZlciIsKGZ1bmN0aW9uKGUpe3JldHVybiBlPT09dH0pKTt2YXIgbT11KGgpO2V0LmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3JldHVybiJ0cmFuc2xhdGUoIitMKGhbaV1bbV1bbl0raFtpXVttXVtyXS8yKSsiLCAiK2IrIikifSkpLnNlbGVjdCgidGV4dCIpLnRleHQoKGZ1bmN0aW9uKHQpe3JldHVybiB4KGhbaV1bbV1bbl0raFtpXVttXVtyXS8yKX0pKTt2YXIgZz1PLnRpY2tGb3JtYXQoKTtydC5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbihlKXtyZXR1cm4idHJhbnNsYXRlKCIrdisiLCAiKygib2Zmc2V0Ij09PXM/QyhwKHQpKTowKSsiKSJ9KSkuc3R5bGUoImRpc3BsYXkiLCJvZmZzZXQiPT09cz8iIjoibm9uZSIpLnNlbGVjdCgidGV4dCIpLnRleHQoKGZ1bmN0aW9uKGUpe3JldHVybiBnKHAodCkpfSkpO3ZhciBfPVIudGlja0Zvcm1hdCgpO3N0LmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKGUpe3JldHVybiJ0cmFuc2xhdGUoIit2KyIsICIrKCJvZmZzZXQiPT09cz8wOkEodFtpXVttXVtvXSkpKyIpIn0pKS5zdHlsZSgiZGlzcGxheSIsIm9mZnNldCI9PT1zPyJub25lIjoiIikuc2VsZWN0KCJ0ZXh0IikudGV4dCgoZnVuY3Rpb24oZSl7cmV0dXJuIF8odFtpXVttXVtvXSl9KSk7dmFyIHk9V0x0Lm1vdXNlKEIpO2Muc3R5bGUoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyh5WzBdKzE1KSsicHgsIisoeVsxXS0xNSkrInB4KSIpLnNlbGVjdCgic3BhbiIpLnRleHQoIm9mZnNldCI9PT1zP18odFtpXVttXVtvXSk6KCJzdGVwIj09PWU/InN0ZXAgIjoiIikrZyhwKHQpKSl9KSk7Ry5zZWxlY3QoIi5iYWNrZ3JvdW5kIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLXkubGVmdCsiLCIrLXkudG9wKyIpIikuYXR0cigid2lkdGgiLGcpLmF0dHIoImhlaWdodCIsXyk7dmFyIHE9Ry5zZWxlY3RBbGwoIi5oaXN0b2dyYW0iKS5kYXRhKGEpO3EuZXhpdCgpLnJlbW92ZSgpO3ZhciBZPXEuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImhpc3RvZ3JhbSIpLFg9WS5tZXJnZShxKS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiBwKHQpLXAoZSl9KSksJD1VLnNlbGVjdEFsbCgiLmhpc3RvZ3JhbSIpLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3JldHVybiJ0cmFuc2xhdGUoMCwgIisoIm9mZnNldCI9PT1zP0MocCh0KSktZjowKSsiKSJ9KSk7WS5hcHBlbmQoImxpbmUiKS5hdHRyKCJjbGFzcyIsImJhc2VsaW5lIiksJC5zZWxlY3QoIi5iYXNlbGluZSIpLnN0eWxlKCJzdHJva2Utb3BhY2l0eSIsKGZ1bmN0aW9uKHQpe3JldHVybiJvZmZzZXQiPT09cz8uMTowfSkpLmF0dHIoInkxIixmKS5hdHRyKCJ5MiIsZikuYXR0cigieDIiLHYpLFkuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJvdXRsaW5lIik7dmFyIEs9WC5zZWxlY3QoIi5vdXRsaW5lIikuYXR0cigidmVjdG9yLWVmZmVjdCIsIm5vbi1zY2FsaW5nLXN0cm9rZSIpLmF0dHIoImQiLChmdW5jdGlvbih0KXtyZXR1cm4oZnVuY3Rpb24odCl7cmV0dXJuIk0iK1Aoeih0WzBdKSkrIiwiK2soMCkrIkwiK0QodCkuc2xpY2UoMSkrIkwiK1Aoeih0W3QubGVuZ3RoLTFdKSkrIiwiK2soMCl9KSh0W2ldKX0pKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwxKTskLnNlbGVjdCgiLm91dGxpbmUiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJzY2FsZSgiK3YvRSsiLCAiK2YvRSsiKSIpLnN0eWxlKCJzdHJva2UiLChmdW5jdGlvbih0KXtyZXR1cm4ib2Zmc2V0Ij09PXM/IiI6TihwKHQpKX0pKS5zdHlsZSgiZmlsbC1vcGFjaXR5IiwoZnVuY3Rpb24odCl7cmV0dXJuIm9mZnNldCI9PT1zPzE6MH0pKS5zdHlsZSgiZmlsbCIsKGZ1bmN0aW9uKHQpe3JldHVybiBOKHAodCkpfSkpO3ZhciBaPVkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJob3ZlciIpLEo9WC5zZWxlY3QoIi5ob3ZlciIpLnN0eWxlKCJmaWxsIiwoZnVuY3Rpb24odCl7cmV0dXJuIE4ocCh0KSl9KSk7Wi5hcHBlbmQoImNpcmNsZSIpLmF0dHIoInIiLDIpLFouYXBwZW5kKCJ0ZXh0Iikuc3R5bGUoImRpc3BsYXkiLCJub25lIikuYXR0cigiZHgiLDQpO3ZhciBRPVYuc2VsZWN0KCIueC1heGlzLWhvdmVyIikuc2VsZWN0QWxsKCIubGFiZWwiKS5kYXRhKFsieCJdKSx0dD1RLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLGV0PVEubWVyZ2UodHQpO3R0LmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLC0yMCkuYXR0cigieSIsNikuYXR0cigid2lkdGgiLDQwKS5hdHRyKCJoZWlnaHQiLDE0KSx0dC5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsMCkuYXR0cigieDIiLDApLmF0dHIoInkxIiwwKS5hdHRyKCJ5MiIsNiksdHQuYXBwZW5kKCJ0ZXh0IikuYXR0cigiZHkiLDE4KTt2YXIgbnQ9Vi5zZWxlY3QoIi55LWF4aXMtaG92ZXIiKS5zZWxlY3RBbGwoIi5sYWJlbCIpLmRhdGEoWyJ5Il0pLGl0PW50LmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLHJ0PW50Lm1lcmdlKGl0KTtpdC5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4Iiw4KS5hdHRyKCJ5IiwtNikuYXR0cigid2lkdGgiLDQwKS5hdHRyKCJoZWlnaHQiLDE0KSxpdC5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsMCkuYXR0cigieDIiLDYpLmF0dHIoInkxIiwwKS5hdHRyKCJ5MiIsMCksaXQuYXBwZW5kKCJ0ZXh0IikuYXR0cigiZHgiLDgpLmF0dHIoImR5Iiw0KTt2YXIgb3Q9Vi5zZWxlY3QoIi55LXNsaWNlLWF4aXMtaG92ZXIiKS5zZWxlY3RBbGwoIi5sYWJlbCIpLmRhdGEoWyJ5Il0pLGF0PW90LmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLHN0PW90Lm1lcmdlKGF0KTthdC5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4Iiw4KS5hdHRyKCJ5IiwtNikuYXR0cigid2lkdGgiLDQwKS5hdHRyKCJoZWlnaHQiLDE0KSxhdC5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsMCkuYXR0cigieDIiLDYpLmF0dHIoInkxIiwwKS5hdHRyKCJ5MiIsMCksYXQuYXBwZW5kKCJ0ZXh0IikuYXR0cigiZHgiLDgpLmF0dHIoImR5Iiw0KSxVLnNlbGVjdCgiLnkuYXhpcy5zbGljZSIpLnN0eWxlKCJvcGFjaXR5Iiwib2Zmc2V0Ij09PXM/MDoxKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwgIisoIm9mZnNldCI9PT1zPy1mOjApKyIpIikuY2FsbChSKSxVLnNlbGVjdCgiLnguYXhpcyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCAiK2IrIikiKS5jYWxsKEkpLFUuc2VsZWN0KCIueS5heGlzIikuc3R5bGUoIm9wYWNpdHkiLCJvZmZzZXQiPT09cz8xOjApLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3YrIiwgIisoIm9mZnNldCI9PT1zPzA6YikrIikiKS5jYWxsKE8pLFUuc2VsZWN0QWxsKCIudGljayB0ZXh0IikuYXR0cigiZmlsbCIsIiNhYWEiKSxVLnNlbGVjdEFsbCgiLmF4aXMgcGF0aC5kb21haW4iKS5hdHRyKCJzdHJva2UiLCJub25lIil9fTtmdW5jdGlvbiBZTHQodCl7Y29uc3RbZSxuLGldPXQ7cmV0dXJue3dhbGxfdGltZTplLHN0ZXA6bixtaW46cWwoaS5tYXAoKChbdCwsXSk9PnQpKSksbWF4OkdsKGkubWFwKCgoWyx0XSk9PnQpKSksYnVja2V0czppLm1hcCgoKFt0LGUsbl0pPT4oe2xlZnQ6dCxyaWdodDplLGNvdW50Om59KSkpfX1mdW5jdGlvbiBYTHQodCxlLG4saT0zMCl7bj09PWUmJihuPTEuMSplKzEsZT1lLzEuMS0xKTtjb25zdCByPShuLWUpL2k7bGV0IG89MDtyZXR1cm4gUmwoZSxuLHIpLm1hcCgoaT0+e2NvbnN0IGE9aStyO2xldCBzPTA7Zm9yKDtvPHQuYnVja2V0cy5sZW5ndGg7KXtjb25zdCByPU1hdGgubWluKG4sdC5idWNrZXRzW29dLnJpZ2h0KSxsPU1hdGgubWF4KGUsdC5idWNrZXRzW29dLmxlZnQpLGM9TWF0aC5taW4ocixhKS1NYXRoLm1heChsLGkpLHU9Yy8oci1sKSp0LmJ1Y2tldHNbb10uY291bnQ7aWYocys9Yz4wP3U6MCxyPmEpYnJlYWs7bysrfXJldHVybnt4OmksZHg6cix5OnN9fSkpfXFMdC50ZW1wbGF0ZT1fZWAKICAgIDxkaXYgaWQ9InRvb2x0aXAiPjxzcGFuPjwvc3Bhbj48L2Rpdj4KICAgIDxzdmcgaWQ9InN2ZyI+CiAgICAgIDxnPgogICAgICAgIDxnIGNsYXNzPSJheGlzIHgiPjwvZz4KICAgICAgICA8ZyBjbGFzcz0iYXhpcyB5Ij48L2c+CiAgICAgICAgPGcgY2xhc3M9ImF4aXMgeSBzbGljZSI+PC9nPgogICAgICAgIDxnIGNsYXNzPSJzdGFnZSI+CiAgICAgICAgICA8cmVjdCBjbGFzcz0iYmFja2dyb3VuZCI+PC9yZWN0PgogICAgICAgIDwvZz4KICAgICAgICA8ZyBjbGFzcz0ieC1heGlzLWhvdmVyIj48L2c+CiAgICAgICAgPGcgY2xhc3M9InktYXhpcy1ob3ZlciI+PC9nPgogICAgICAgIDxnIGNsYXNzPSJ5LXNsaWNlLWF4aXMtaG92ZXIiPjwvZz4KICAgICAgPC9nPgogICAgPC9zdmc+CgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgY29sb3I6ICNhYWE7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgLS12ei1oaXN0b2dyYW0tdGltZXNlcmllcy1ob3Zlci1iZy1jb2xvcjogI2ZmZjsKICAgICAgICAtLXZ6LWhpc3RvZ3JhbS10aW1lc2VyaWVzLW91dGxpbmUtY29sb3I6ICNmZmY7CiAgICAgICAgLS12ei1oaXN0b2dyYW0tdGltZXNlcmllcy1ob3Zlci1vdXRsaW5lLWNvbG9yOiAjMDAwOwogICAgICB9CgogICAgICA6aG9zdCguZGFyay1tb2RlKSB7CiAgICAgICAgLS12ei1oaXN0b2dyYW0tdGltZXNlcmllcy1ob3Zlci1iZy1jb2xvcjogdmFyKAogICAgICAgICAgLS1wcmltYXJ5LWJhY2tncm91bmQtY29sb3IKICAgICAgICApOwogICAgICAgIC0tdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMtb3V0bGluZS1jb2xvcjogdmFyKC0tcGFwZXItZ3JleS02MDApOwogICAgICAgIC0tdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMtaG92ZXItb3V0bGluZS1jb2xvcjogI2ZmZjsKICAgICAgfQoKICAgICAgc3ZnIHsKICAgICAgICBmb250LWZhbWlseTogcm9ib3RvLCBzYW5zLXNlcmlmOwogICAgICAgIG92ZXJmbG93OiB2aXNpYmxlOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgfQoKICAgICAgdGV4dCB7CiAgICAgICAgZmlsbDogY3VycmVudENvbG9yOwogICAgICB9CgogICAgICAjdG9vbHRpcCB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICB9CgogICAgICAuYmFja2dyb3VuZCB7CiAgICAgICAgZmlsbC1vcGFjaXR5OiAwOwogICAgICAgIGZpbGw6IHJlZDsKICAgICAgfQoKICAgICAgLmhpc3RvZ3JhbSB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5ob3ZlciB7CiAgICAgICAgZm9udC1zaXplOiA5cHg7CiAgICAgICAgZG9taW5hbnQtYmFzZWxpbmU6IG1pZGRsZTsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICB9CgogICAgICAuaG92ZXIgY2lyY2xlIHsKICAgICAgICBzdHJva2U6IHdoaXRlOwogICAgICAgIHN0cm9rZS1vcGFjaXR5OiAwLjU7CiAgICAgICAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgICAgIH0KCiAgICAgIC5ob3ZlciB0ZXh0IHsKICAgICAgICBmaWxsOiBibGFjazsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICB9CgogICAgICAuaG92ZXIuaG92ZXItY2xvc2VzdCBjaXJjbGUgewogICAgICAgIGZpbGw6IHZhcigtLXZ6LWhpc3RvZ3JhbS10aW1lc2VyaWVzLWhvdmVyLW91dGxpbmUtY29sb3IpICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIC5ob3Zlci5ob3Zlci1jbG9zZXN0IHRleHQgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgIH0KCiAgICAgIC5iYXNlbGluZSB7CiAgICAgICAgc3Ryb2tlOiBibGFjazsKICAgICAgICBzdHJva2Utb3BhY2l0eTogMC4xOwogICAgICB9CgogICAgICAub3V0bGluZSB7CiAgICAgICAgZmlsbDogbm9uZTsKICAgICAgICBzdHJva2U6IHZhcigtLXZ6LWhpc3RvZ3JhbS10aW1lc2VyaWVzLW91dGxpbmUtY29sb3IpOwogICAgICAgIHN0cm9rZS1vcGFjaXR5OiAwLjU7CiAgICAgIH0KCiAgICAgIC5vdXRsaW5lLm91dGxpbmUtaG92ZXIgewogICAgICAgIHN0cm9rZTogdmFyKC0tdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMtaG92ZXItb3V0bGluZS1jb2xvcikgIWltcG9ydGFudDsKICAgICAgICBzdHJva2Utb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLngtYXhpcy1ob3ZlciwKICAgICAgLnktYXhpcy1ob3ZlciwKICAgICAgLnktc2xpY2UtYXhpcy1ob3ZlciB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIC54LWF4aXMtaG92ZXIgLmxhYmVsLAogICAgICAueS1heGlzLWhvdmVyIC5sYWJlbCwKICAgICAgLnktc2xpY2UtYXhpcy1ob3ZlciAubGFiZWwgewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIHRleHQtYW5jaG9yOiBlbmQ7CiAgICAgIH0KCiAgICAgIC54LWF4aXMtaG92ZXIgdGV4dCB7CiAgICAgICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAgICAgfQoKICAgICAgLnktYXhpcy1ob3ZlciB0ZXh0LAogICAgICAueS1zbGljZS1heGlzLWhvdmVyIHRleHQgewogICAgICAgIHRleHQtYW5jaG9yOiBzdGFydDsKICAgICAgfQoKICAgICAgLngtYXhpcy1ob3ZlciBsaW5lLAogICAgICAueS1heGlzLWhvdmVyIGxpbmUsCiAgICAgIC55LXNsaWNlLWF4aXMtaG92ZXIgbGluZSB7CiAgICAgICAgc3Ryb2tlOiBjdXJyZW50Q29sb3I7CiAgICAgIH0KCiAgICAgIC54LWF4aXMtaG92ZXIgcmVjdCwKICAgICAgLnktYXhpcy1ob3ZlciByZWN0LAogICAgICAueS1zbGljZS1heGlzLWhvdmVyIHJlY3QgewogICAgICAgIGZpbGw6IHZhcigtLXZ6LWhpc3RvZ3JhbS10aW1lc2VyaWVzLWhvdmVyLWJnLWNvbG9yKTsKICAgICAgfQoKICAgICAgI3Rvb2x0aXAsCiAgICAgIC54LWF4aXMtaG92ZXIgdGV4dCwKICAgICAgLnktYXhpcy1ob3ZlciB0ZXh0LAogICAgICAueS1zbGljZS1heGlzLWhvdmVyIHRleHQgewogICAgICAgIGNvbG9yOiB2YXIoLS12ei1oaXN0b2dyYW0tdGltZXNlcmllcy1ob3Zlci1vdXRsaW5lLWNvbG9yKTsKICAgICAgfQoKICAgICAgLmF4aXMgewogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgfQoKICAgICAgLmF4aXMgcGF0aC5kb21haW4gewogICAgICAgIGZpbGw6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5heGlzIC50aWNrIGxpbmUgewogICAgICAgIHN0cm9rZTogI2RkZDsKICAgICAgfQoKICAgICAgLmF4aXMuc2xpY2UgewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgIH0KCiAgICAgIC5heGlzLnNsaWNlIC50aWNrIGxpbmUgewogICAgICAgIHN0cm9rZS1kYXNoYXJyYXk6IDI7CiAgICAgIH0KCiAgICAgIC5zbWFsbCAuYXhpcyB0ZXh0IHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CiAgICAgIC5zbWFsbCAuYXhpcyAudGljazpmaXJzdC1vZi10eXBlIHRleHQgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICAgIC5zbWFsbCAuYXhpcyAudGljazpsYXN0LW9mLXR5cGUgdGV4dCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KICAgICAgLm1lZGl1bSAuYXhpcyB0ZXh0IHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CiAgICAgIC5tZWRpdW0gLmF4aXMgLnRpY2s6bnRoLWNoaWxkKDJuICsgMSkgdGV4dCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KICAgICAgLmxhcmdlIC5heGlzIHRleHQgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KICAgICAgLmxhcmdlIC5heGlzIC50aWNrOm50aC1jaGlsZCgybiArIDEpIHRleHQgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICA8L3N0eWxlPgogIGAsdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0scUx0LnByb3RvdHlwZSwibW9kZSIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxxTHQucHJvdG90eXBlLCJ0aW1lUHJvcGVydHkiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0scUx0LnByb3RvdHlwZSwiYmlucyIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxxTHQucHJvdG90eXBlLCJ4Iix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLHFMdC5wcm90b3R5cGUsImR4Iix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLHFMdC5wcm90b3R5cGUsInkiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0scUx0LnByb3RvdHlwZSwiY29sb3JTY2FsZSIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxxTHQucHJvdG90eXBlLCJtb2RlVHJhbnNpdGlvbkR1cmF0aW9uIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0scUx0LnByb3RvdHlwZSwiX2F0dGFjaGVkIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLHFMdC5wcm90b3R5cGUsIl9uYW1lIix2b2lkIDApLHQoW28oe3R5cGU6QXJyYXl9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSxxTHQucHJvdG90eXBlLCJfZGF0YSIsdm9pZCAwKSx0KFthKCJ0aW1lUHJvcGVydHkiLCJjb2xvclNjYWxlIiwiX2F0dGFjaGVkIiksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pLGUoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxxTHQucHJvdG90eXBlLCJfcmVkcmF3T25DaGFuZ2UiLG51bGwpLHQoW2EoIm1vZGUiKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLHFMdC5wcm90b3R5cGUsIl9tb2RlUmVkcmF3IixudWxsKSxxTHQ9dChbaSgidnotaGlzdG9ncmFtLXRpbWVzZXJpZXMiKV0scUx0KTtsZXQgJEx0PWNsYXNzIGV4dGVuZHMocF90KHRyKHllKSkpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmdldERhdGFMb2FkTmFtZT0oe3J1bjp0fSk9PnQsdGhpcy5yZXF1ZXN0RGF0YT0odCxlLG4pPT57Y29uc3QgaT1ncigpLnBsdWdpblJvdXRlKCJoaXN0b2dyYW1zIiwiL2hpc3RvZ3JhbXMiKTtQcm9taXNlLmFsbCh0Lm1hcCgodD0+e2NvbnN0IG49Vk8oaSx7dGFnOnQudGFnLHJ1bjp0LnJ1bn0pO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QobikudGhlbigobj0+e2Uoe2l0ZW06dCxkYXRhOm59KX0pKX0pKSkuZmluYWxseSgoKCk9PntuKCl9KSl9LHRoaXMubG9hZERhdGFDYWxsYmFjaz0odCxlLG4pPT57Y29uc3QgaT0oZnVuY3Rpb24gcih0KXtjb25zdCBlPXQubWFwKFlMdCksbj1xbChlLCh0PT50Lm1pbikpLGk9R2woZSwodD0+dC5tYXgpKTtyZXR1cm4gZS5tYXAoKHQ9Pih7d2FsbF90aW1lOnQud2FsbF90aW1lLHN0ZXA6dC5zdGVwLGJpbnM6WEx0KHQsbixpKX0pKSl9KShuKSxvPXRoaXMuZ2V0RGF0YUxvYWROYW1lKGUpO3RoaXMuJC5jaGFydC5zZXRTZXJpZXNEYXRhKG8saSl9LHRoaXMuX2NvbG9yU2NhbGVGdW5jdGlvbj1BTyx0aGlzLl9leHBhbmRlZD0hMX1fcmVsb2FkT25SdW5UYWdSZXF1ZXN0TWFuYWdlckNoYW5nZSgpe3RoaXMucmVsb2FkKCl9X3VwZGF0ZURhdGFUb0xvYWQoKXt0aGlzLmRhdGFUb0xvYWQ9W3tydW46dGhpcy5ydW4sdGFnOnRoaXMudGFnfV19Z2V0IF9ydW5Db2xvcigpe3JldHVybiB0aGlzLl9jb2xvclNjYWxlRnVuY3Rpb24odGhpcy5ydW4pfXJlZHJhdygpe3RoaXMuJC5jaGFydC5yZWRyYXcoKX1fdG9nZ2xlRXhwYW5kZWQodCl7dGhpcy5zZXQoIl9leHBhbmRlZCIsIXRoaXMuX2V4cGFuZGVkKSx0aGlzLnJlZHJhdygpfX07JEx0LnRlbXBsYXRlPV9lYAogICAgPHRmLWNhcmQtaGVhZGluZwogICAgICB0YWc9IltbdGFnXV0iCiAgICAgIHJ1bj0iW1tydW5dXSIKICAgICAgZGlzcGxheS1uYW1lPSJbW3RhZ01ldGFkYXRhLmRpc3BsYXlOYW1lXV0iCiAgICAgIGRlc2NyaXB0aW9uPSJbW3RhZ01ldGFkYXRhLmRlc2NyaXB0aW9uXV0iCiAgICAgIGNvbG9yPSJbW19ydW5Db2xvcl1dIgogICAgPjwvdGYtY2FyZC1oZWFkaW5nPgogICAgPCEtLQogICAgICBUaGUgbWFpbiBoaXN0b2dyYW0gdGhhdCB3ZSByZW5kZXIuIERhdGEgaXMgc2V0IGRpcmVjdGx5IHdpdGgKICAgICAgXGBzZXRTZXJpZXNEYXRhXGAsIG5vdCB3aXRoIGEgYm91bmQgcHJvcGVydHkuCiAgICAtLT4KICAgIDx2ei1oaXN0b2dyYW0tdGltZXNlcmllcwogICAgICBpZD0iY2hhcnQiCiAgICAgIHRpbWUtcHJvcGVydHk9IltbdGltZVByb3BlcnR5XV0iCiAgICAgIG1vZGU9IltbaGlzdG9ncmFtTW9kZV1dIgogICAgICBjb2xvci1zY2FsZT0iW1tfY29sb3JTY2FsZUZ1bmN0aW9uXV0iCiAgICA+PC92ei1oaXN0b2dyYW0tdGltZXNlcmllcz4KICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiByb3c7Ij4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgc2VsZWN0ZWQkPSJbW19leHBhbmRlZF1dIgogICAgICAgIGljb249ImZ1bGxzY3JlZW4iCiAgICAgICAgb24tdGFwPSJfdG9nZ2xlRXhwYW5kZWQiCiAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgd2lkdGg6IDMzMHB4OwogICAgICAgIGhlaWdodDogMjM1cHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7CiAgICAgIH0KICAgICAgOmhvc3QoW19leHBhbmRlZF0pIHsKICAgICAgICB3aWR0aDogNzAwcHg7CiAgICAgICAgaGVpZ2h0OiA1MDBweDsKICAgICAgfQoKICAgICAgdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMgewogICAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICB9CgogICAgICBwYXBlci1pY29uLWJ1dHRvbiB7CiAgICAgICAgY29sb3I6ICMyMTk2ZjM7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTAwJTsKICAgICAgICB3aWR0aDogMzJweDsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgcGFkZGluZzogNHB4OwogICAgICB9CgogICAgICBwYXBlci1pY29uLWJ1dHRvbltzZWxlY3RlZF0gewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXRiLXVpLWxpZ2h0LWFjY2VudCk7CiAgICAgIH0KCiAgICAgIHRmLWNhcmQtaGVhZGluZyB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgICAgICB3aWR0aDogOTAlOwogICAgICB9CiAgICA8L3N0eWxlPgogIGAsdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sJEx0LnByb3RvdHlwZSwicnVuIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLCRMdC5wcm90b3R5cGUsInRhZyIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSwkTHQucHJvdG90eXBlLCJnZXREYXRhTG9hZE5hbWUiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsaHIpXSwkTHQucHJvdG90eXBlLCJyZXF1ZXN0TWFuYWdlciIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSwkTHQucHJvdG90eXBlLCJsb2FkRGF0YUNhbGxiYWNrIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLCRMdC5wcm90b3R5cGUsInRhZ01ldGFkYXRhIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLCRMdC5wcm90b3R5cGUsInRpbWVQcm9wZXJ0eSIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSwkTHQucHJvdG90eXBlLCJoaXN0b2dyYW1Nb2RlIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sJEx0LnByb3RvdHlwZSwiX2NvbG9yU2NhbGVGdW5jdGlvbiIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwfSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSwkTHQucHJvdG90eXBlLCJfZXhwYW5kZWQiLHZvaWQgMCksdChbYSgicnVuIiwidGFnIiwicmVxdWVzdE1hbmFnZXIiKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLCRMdC5wcm90b3R5cGUsIl9yZWxvYWRPblJ1blRhZ1JlcXVlc3RNYW5hZ2VyQ2hhbmdlIixudWxsKSx0KFthKCJydW4iLCJ0YWciKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLCRMdC5wcm90b3R5cGUsIl91cGRhdGVEYXRhVG9Mb2FkIixudWxsKSx0KFtzKCJydW4iKSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSwkTHQucHJvdG90eXBlLCJfcnVuQ29sb3IiLG51bGwpLCRMdD10KFtpKCJ0Zi1oaXN0b2dyYW0tbG9hZGVyIildLCRMdCk7bGV0IEtMdD1jbGFzcyBleHRlbmRzKHRyKHllKSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMucmVsb2FkT25SZWFkeT0hMCx0aGlzLl9oaXN0b2dyYW1Nb2RlPSJvZmZzZXQiLHRoaXMuX3RpbWVQcm9wZXJ0eT0ic3RlcCIsdGhpcy5fcmVzdGFtcD0hMSx0aGlzLl9yZXF1ZXN0TWFuYWdlcj1uZXcgaHJ9X3JlZHJhd0NhdGVnb3J5UGFuZSh0LGUpe2UmJnQudGFyZ2V0LnF1ZXJ5U2VsZWN0b3JBbGwoInRmLWhpc3RvZ3JhbS1sb2FkZXIiKS5mb3JFYWNoKCh0PT50LnJlZHJhdygpKSl9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMucmVsb2FkT25SZWFkeSYmdGhpcy5yZWxvYWQoKX1yZWxvYWQoKXt0aGlzLl9mZXRjaFRhZ3MoKS50aGVuKCgoKT0+e3RoaXMuX3JlbG9hZEhpc3RvZ3JhbXMoKX0pKX1fZmV0Y2hUYWdzKCl7Y29uc3QgdD1ncigpLnBsdWdpblJvdXRlKCJoaXN0b2dyYW1zIiwiL3RhZ3MiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKCh0PT57aWYod2UuaXNFcXVhbCh0LHRoaXMuX3J1blRvVGFnSW5mbykpcmV0dXJuO2NvbnN0IGU9d2UubWFwVmFsdWVzKHQsKHQ9Pk9iamVjdC5rZXlzKHQpKSksbj1vcihlKTt0aGlzLnNldCgiX2RhdGFOb3RGb3VuZCIsMD09PW4ubGVuZ3RoKSx0aGlzLnNldCgiX3J1blRvVGFnIixlKSx0aGlzLnNldCgiX3J1blRvVGFnSW5mbyIsdCksdGhpcy5hc3luYygoKCk9Pnt0aGlzLnNldCgiX2NhdGVnb3JpZXNEb21SZWFkeSIsITApfSkpfSkpfV9yZWxvYWRIaXN0b2dyYW1zKCl7dGhpcy5yb290LnF1ZXJ5U2VsZWN0b3JBbGwoInRmLWhpc3RvZ3JhbS1sb2FkZXIiKS5mb3JFYWNoKCh0PT57dC5yZWxvYWQoKX0pKX1fc2hvdWxkT3Blbih0KXtyZXR1cm4gdDw9Mn1nZXQgX2NhdGVnb3JpZXMoKXtyZXR1cm4gU3IodGhpcy5fcnVuVG9UYWcsdGhpcy5fc2VsZWN0ZWRSdW5zLHRoaXMuX3RhZ0ZpbHRlcil9X3RhZ01ldGFkYXRhKHQsZSxuKXtyZXR1cm4gdFtlXVtuXX19O2Z1bmN0aW9uIFpMdCh0KXtyZXR1cm4iIiE9PXQuZGlzcGxheU5hbWUmJnZvaWQgMCE9PXQuZGlzcGxheU5hbWU/dC5kaXNwbGF5TmFtZTp0Lm5hbWV9ZnVuY3Rpb24gSkx0KHQpe2lmKCIiIT09dC5kaXNwbGF5TmFtZSYmdm9pZCAwIT09dC5kaXNwbGF5TmFtZSlyZXR1cm4gdC5kaXNwbGF5TmFtZTtsZXQgZT10Lm5hbWUuZ3JvdXAsbj10Lm5hbWUudGFnO3JldHVybiB2b2lkIDA9PT1lJiYoZT0iIiksdm9pZCAwPT09biYmKG49IiIpLCIiPT09ZT9uOmUrIi4iK259ZnVuY3Rpb24gUUx0KHQsZSl7cmV0dXJuIGU8dC5ocGFyYW1Db2x1bW5zLmxlbmd0aD9aTHQodC5ocGFyYW1Db2x1bW5zW2VdLmhwYXJhbUluZm8pOkpMdCh0Lm1ldHJpY0NvbHVtbnNbZS10LmhwYXJhbUNvbHVtbnMubGVuZ3RoXS5tZXRyaWNJbmZvKX1mdW5jdGlvbiB0UHQodCl7cmV0dXJuIHQuaHBhcmFtQ29sdW1ucy5sZW5ndGh9ZnVuY3Rpb24gZVB0KHQpe3JldHVybiB0Lm1ldHJpY0NvbHVtbnMubGVuZ3RofWZ1bmN0aW9uIG5QdCh0KXtyZXR1cm4gdFB0KHQpK2VQdCh0KX1mdW5jdGlvbiBpUHQodCxlKXtyZXR1cm4gdFtlXX1mdW5jdGlvbiByUHQodCxlKXtyZXR1cm4gdC5maW5kKCh0PT53ZS5pc0VxdWFsKHQubmFtZSxlKSkpfWZ1bmN0aW9uIG9QdCh0LGUsbil7cmV0dXJuIGUuaHBhcmFtc1t0LmhwYXJhbUNvbHVtbnNbbl0uaHBhcmFtSW5mby5uYW1lXX1mdW5jdGlvbiBhUHQodCxlLG4pe2NvbnN0IGk9clB0KGUubWV0cmljVmFsdWVzLHQubWV0cmljQ29sdW1uc1tuXS5tZXRyaWNJbmZvLm5hbWUpO3JldHVybiB2b2lkIDA9PT1pP3ZvaWQgMDppLnZhbHVlfWZ1bmN0aW9uIHNQdCh0LGUsbil7cmV0dXJuIG48dC5ocGFyYW1Db2x1bW5zLmxlbmd0aD9vUHQodCxlLG4pOmFQdCh0LGUsbi10LmhwYXJhbUNvbHVtbnMubGVuZ3RoKX1mdW5jdGlvbiBsUHQodCxlLG4pe3JldHVybiBrbChlLChlPT5zUHQodCxlLG4pKSl9ZnVuY3Rpb24gY1B0KHQsZSxuKXtsZXQgaTtpZihuPGUuaHBhcmFtSW5mb3MubGVuZ3RoKWk9dC5ocGFyYW1Db2x1bW5zLmZpbmRJbmRleCgodD0+dC5ocGFyYW1JbmZvLm5hbWU9PT1lLmhwYXJhbUluZm9zW25dLm5hbWUpKTtlbHNle2NvbnN0IHI9ZS5tZXRyaWNJbmZvc1tuLWUuaHBhcmFtSW5mb3MubGVuZ3RoXS5uYW1lO2k9dC5ocGFyYW1Db2x1bW5zLmxlbmd0aCt0Lm1ldHJpY0NvbHVtbnMuZmluZEluZGV4KCh0PT50Lm1ldHJpY0luZm8ubmFtZT09PXIpKX1yZXR1cm4gY29uc29sZS5hc3NlcnQoLTEhPT1pKSxpfWZ1bmN0aW9uIHVQdCh0KXtyZXR1cm4gdC5ocGFyYW1JbmZvcy5sZW5ndGh9ZnVuY3Rpb24gaFB0KHQpe3JldHVybiB0Lm1ldHJpY0luZm9zLmxlbmd0aH1mdW5jdGlvbiBkUHQodCxlLG4pe3JldHVybiBrbChlLChlPT5nUHQodCxlLG4pKSl9ZnVuY3Rpb24gcFB0KHQsZSl7cmV0dXJuIHQuZmluZCgodD0+dC5uYW1lPT09ZSkpfWZ1bmN0aW9uIGZQdCh0LGUsbil7cmV0dXJuIGUuaHBhcmFtc1t0LmhwYXJhbUluZm9zW25dLm5hbWVdfWZ1bmN0aW9uIG1QdCh0LGUsbil7Y29uc3QgaT1yUHQoZS5tZXRyaWNWYWx1ZXMsdC5tZXRyaWNJbmZvc1tuXS5uYW1lKTtyZXR1cm4gdm9pZCAwPT09aT92b2lkIDA6aS52YWx1ZX1mdW5jdGlvbiBnUHQodCxlLG4pe3JldHVybiBuPHQuaHBhcmFtSW5mb3MubGVuZ3RoP2ZQdCh0LGUsbik6bVB0KHQsZSxuLXQuaHBhcmFtSW5mb3MubGVuZ3RoKX1mdW5jdGlvbiBfUHQodCl7cmV0dXJuIHdlLmlzTnVtYmVyKHQpP3QudG9QcmVjaXNpb24oNSk6dm9pZCAwPT09dD8iIjp0LnRvU3RyaW5nKCl9ZnVuY3Rpb24geVB0KHQsZSl7cmV0dXJuIHQqdCtlKmV9ZnVuY3Rpb24gdlB0KHQsZSxuLGkpe3JldHVybiBNYXRoLnNxcnQoeVB0KHQtbixlLWkpKX1mdW5jdGlvbiBiUHQodCxlLG4saSxyLG8pe2lmKHQ8biYmZTxpKXJldHVybiB2UHQodCxlLG4saSk7aWYobjw9dCYmdDxyJiZlPGkpcmV0dXJuIGktZTtpZihyPD10JiZlPGkpcmV0dXJuIHZQdCh0LGUscixpKTtpZih0PG4mJmk8PWUmJmU8bylyZXR1cm4gbi10O2lmKG48PXQmJnQ8ciYmaTw9ZSYmZTxvKXJldHVybiAwO2lmKHI8PXQmJmk8PWUmJmU8bylyZXR1cm4gdC1yO2lmKHQ8biYmbzw9ZSlyZXR1cm4gdlB0KHQsZSxuLG8pO2lmKG48PXQmJnQ8ciYmbzw9ZSlyZXR1cm4gZS1vO2lmKHI8PXQmJm88PWUpcmV0dXJuIHZQdCh0LGUscixvKTt0aHJvdyJQb2ludCAoeCx5KSBtdXN0IGJlIGluIG9uZSBvZiB0aGUgcmVnaW9ucyBkZWZpbmVkIGFib3ZlLiJ9ZnVuY3Rpb24geFB0KHQsZSl7cmV0dXJuIHZvaWQgMD09PWU/InRyYW5zbGF0ZSgiK3QrIikiOiJ0cmFuc2xhdGUoIit0KyIsIitlKyIpIn1mdW5jdGlvbiB3UHQodCxlLG4pe2NvbnN0IGk9dC5nZXQoZSx0KTtBcnJheS5pc0FycmF5KGkpP3Quc3BsaWNlLmFwcGx5KHQsW2UsMCxpLmxlbmd0aF0uY29uY2F0KG4pKTp0LnNldChlLG4pfWZ1bmN0aW9uIFNQdCh0KXtsZXQgZT0wO2ZvcihsZXQgbj0wO248dC5sZW5ndGg7KytuKWU9MzEqZSt0LmNoYXJDb2RlQXQobikmNDI5NDk2NzI5NTtyZXR1cm4gZStNYXRoLnBvdygyLDMxKX1LTHQudGVtcGxhdGU9X2VgCiAgICA8dGYtZGFzaGJvYXJkLWxheW91dD4KICAgICAgPGRpdiBzbG90PSJzaWRlYmFyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZXR0aW5ncyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgICA8dGYtb3B0aW9uLXNlbGVjdG9yCiAgICAgICAgICAgICAgaWQ9Imhpc3RvZ3JhbU1vZGVTZWxlY3RvciIKICAgICAgICAgICAgICBuYW1lPSJIaXN0b2dyYW0gbW9kZSIKICAgICAgICAgICAgICBzZWxlY3RlZC1pZD0ie3tfaGlzdG9ncmFtTW9kZX19IgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBpZD0ib3ZlcmxheSI+b3ZlcmxheTwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9Im9mZnNldCI+b2Zmc2V0PC9wYXBlci1idXR0b24+CiAgICAgICAgICAgIDwvdGYtb3B0aW9uLXNlbGVjdG9yPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgICA8dGYtb3B0aW9uLXNlbGVjdG9yCiAgICAgICAgICAgICAgaWQ9InRpbWVQcm9wZXJ0eVNlbGVjdG9yIgogICAgICAgICAgICAgIG5hbWU9Ik9mZnNldCB0aW1lIGF4aXMiCiAgICAgICAgICAgICAgc2VsZWN0ZWQtaWQ9Int7X3RpbWVQcm9wZXJ0eX19IgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBpZD0ic3RlcCI+c3RlcDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9InJlbGF0aXZlIj5yZWxhdGl2ZTwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9IndhbGxfdGltZSI+d2FsbDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICA8L3RmLW9wdGlvbi1zZWxlY3Rvcj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiBydW5zLXNlbGVjdG9yIj4KICAgICAgICAgIDx0Zi1ydW5zLXNlbGVjdG9yIHNlbGVjdGVkLXJ1bnM9Int7X3NlbGVjdGVkUnVuc319Ij4KICAgICAgICAgIDwvdGYtcnVucy1zZWxlY3Rvcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgc2xvdD0iY2VudGVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtd2FybmluZyI+CiAgICAgICAgICAgIDxoMz5ObyBoaXN0b2dyYW0gZGF0YSB3YXMgZm91bmQuPC9oMz4KICAgICAgICAgICAgPHA+UHJvYmFibGUgY2F1c2VzOjwvcD4KICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgIFlvdSBoYXZlbuKAmXQgd3JpdHRlbiBhbnkgaGlzdG9ncmFtIGRhdGEgdG8geW91ciBldmVudCBmaWxlcy4KICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgIDxsaT5UZW5zb3JCb2FyZCBjYW7igJl0IGZpbmQgeW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICA8L3VsPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW914oCZcmUgbmV3IHRvIHVzaW5nIFRlbnNvckJvYXJkLCBhbmQgd2FudCB0byBmaW5kIG91dCBob3cgdG8KICAgICAgICAgICAgICBhZGQgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIgogICAgICAgICAgICAgICAgPlJFQURNRTwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgcGVyaGFwcyB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCIKICAgICAgICAgICAgICAgID5UZW5zb3JCb2FyZCB0dXRvcmlhbDwvYQogICAgICAgICAgICAgID4uCiAgICAgICAgICAgIDwvcD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciCiAgICAgICAgICAgICAgICA+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgY29uc2lkZXIgZmlsaW5nIGFuIGlzc3VlIG9uIEdpdEh1Yi4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8dGYtdGFnLWZpbHRlcmVyIHRhZy1maWx0ZXI9Int7X3RhZ0ZpbHRlcn19Ij48L3RmLXRhZy1maWx0ZXJlcj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3CiAgICAgICAgICAgICAgY2F0ZWdvcnk9IltbY2F0ZWdvcnldXSIKICAgICAgICAgICAgICBpbml0aWFsLW9wZW5lZD0iW1tfc2hvdWxkT3BlbihpbmRleCldXSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0Zi1oaXN0b2dyYW0tbG9hZGVyCiAgICAgICAgICAgICAgICAgIHJ1bj0iW1tpdGVtLnJ1bl1dIgogICAgICAgICAgICAgICAgICB0YWc9IltbaXRlbS50YWddXSIKICAgICAgICAgICAgICAgICAgYWN0aXZlPSJbW2FjdGl2ZV1dIgogICAgICAgICAgICAgICAgICB0YWctbWV0YWRhdGE9IltbX3RhZ01ldGFkYXRhKF9ydW5Ub1RhZ0luZm8sIGl0ZW0ucnVuLCBpdGVtLnRhZyldXSIKICAgICAgICAgICAgICAgICAgdGltZS1wcm9wZXJ0eT0iW1tfdGltZVByb3BlcnR5XV0iCiAgICAgICAgICAgICAgICAgIGhpc3RvZ3JhbS1tb2RlPSJbW19oaXN0b2dyYW1Nb2RlXV0iCiAgICAgICAgICAgICAgICAgIHJlcXVlc3QtbWFuYWdlcj0iW1tfcmVxdWVzdE1hbmFnZXJdXSIKICAgICAgICAgICAgICAgID48L3RmLWhpc3RvZ3JhbS1sb2FkZXI+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldz4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICA8L3RmLWRhc2hib2FyZC1sYXlvdXQ+CgogICAgPHN0eWxlIGluY2x1ZGU9ImRhc2hib2FyZC1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgLm5vLWRhdGEtd2FybmluZyB7CiAgICAgICAgbWF4LXdpZHRoOiA1NDBweDsKICAgICAgICBtYXJnaW46IDgwcHggYXV0byAwIGF1dG87CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYCx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEtMdC5wcm90b3R5cGUsInJlbG9hZE9uUmVhZHkiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sS0x0LnByb3RvdHlwZSwiX2hpc3RvZ3JhbU1vZGUiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sS0x0LnByb3RvdHlwZSwiX3RpbWVQcm9wZXJ0eSIsdm9pZCAwKSx0KFtvKHt0eXBlOkFycmF5fSksZSgiZGVzaWduOnR5cGUiLEFycmF5KV0sS0x0LnByb3RvdHlwZSwiX3NlbGVjdGVkUnVucyIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxLTHQucHJvdG90eXBlLCJfcnVuVG9UYWciLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sS0x0LnByb3RvdHlwZSwiX3J1blRvVGFnSW5mbyIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEtMdC5wcm90b3R5cGUsIl9kYXRhTm90Rm91bmQiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sS0x0LnByb3RvdHlwZSwiX3RhZ0ZpbHRlciIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEtMdC5wcm90b3R5cGUsIl9yZXN0YW1wIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sS0x0LnByb3RvdHlwZSwiX2NhdGVnb3JpZXNEb21SZWFkeSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixocildLEtMdC5wcm90b3R5cGUsIl9yZXF1ZXN0TWFuYWdlciIsdm9pZCAwKSx0KFtzKCJfcnVuVG9UYWciLCJfc2VsZWN0ZWRSdW5zIiwiX3RhZ0ZpbHRlciIsIl9jYXRlZ29yaWVzRG9tUmVhZHkiKSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLEtMdC5wcm90b3R5cGUsIl9jYXRlZ29yaWVzIixudWxsKSxLTHQ9dChbaSgidGYtaGlzdG9ncmFtLWRhc2hib2FyZCIpXSxLTHQpO3ZhciBNUHQ9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsaHBhcmFtTmFtZTpaTHQsbWV0cmljTmFtZTpKTHQsc2NoZW1hQ29sdW1uTmFtZTpRTHQsbnVtSFBhcmFtczp0UHQsbnVtTWV0cmljczplUHQsbnVtQ29sdW1uczpuUHQsaHBhcmFtVmFsdWVCeU5hbWU6aVB0LG1ldHJpY1ZhbHVlQnlOYW1lOnJQdCxocGFyYW1WYWx1ZUJ5SW5kZXg6b1B0LG1ldHJpY1ZhbHVlQnlJbmRleDphUHQsY29sdW1uVmFsdWVCeUluZGV4OnNQdCxudW1lcmljQ29sdW1uRXh0ZW50OmxQdCxnZXRBYnNvbHV0ZUNvbHVtbkluZGV4OmNQdCxzY2hlbWFWaXNpYmxlQ29sdW1uTmFtZTpmdW5jdGlvbiBFUHQodCxlKXtyZXR1cm4gZTx0LmhwYXJhbUluZm9zLmxlbmd0aD9aTHQodC5ocGFyYW1JbmZvc1tlXSk6Skx0KHQubWV0cmljSW5mb3NbZS10LmhwYXJhbUluZm9zLmxlbmd0aF0pfSxudW1WaXNpYmxlSFBhcmFtczp1UHQsbnVtVmlzaWJsZU1ldHJpY3M6aFB0LG51bVZpc2libGVDb2x1bW5zOmZ1bmN0aW9uIFRQdCh0KXtyZXR1cm4gdVB0KHQpK2hQdCh0KX0sdmlzaWJsZU51bWVyaWNDb2x1bW5FeHRlbnQ6ZFB0LHByZXR0eVByaW50SFBhcmFtVmFsdWVCeU5hbWU6ZnVuY3Rpb24gQ1B0KHQsZSl7cmV0dXJuIF9QdChpUHQodCxlKSl9LHByZXR0eVByaW50TWV0cmljVmFsdWVCeU5hbWU6ZnVuY3Rpb24gQVB0KHQsZSl7cmV0dXJuIF9QdChyUHQodCxlKSl9LHNlc3Npb25Hcm91cFdpdGhOYW1lOnBQdCxocGFyYW1WYWx1ZUJ5VmlzaWJsZUluZGV4OmZQdCxtZXRyaWNWYWx1ZUJ5VmlzaWJsZUluZGV4Om1QdCxjb2x1bW5WYWx1ZUJ5VmlzaWJsZUluZGV4OmdQdCxwcmV0dHlQcmludDpfUHQsbDJOb3JtU3F1YXJlZDp5UHQsZXVjbGlkZWFuRGlzdDp2UHQscG9pbnRUb1JlY3RhbmdsZURpc3Q6YlB0LHRyYW5zbGF0ZVN0cjp4UHQscm90YXRlU3RyOmZ1bmN0aW9uIGtQdCh0LGUsbil7bGV0IGk9InJvdGF0ZSgiK3Q7cmV0dXJuIHZvaWQgMCE9PWUmJnZvaWQgMCE9PW4mJihpPWkrIiwiK2UrIiwiK24pLGkrPSIpIixpfSxpc051bGxPclVuZGVmaW5lZDpmdW5jdGlvbiBMUHQodCl7cmV0dXJuIG51bGw9PXR9LHF1YWRUcmVlVmlzaXRQb2ludHNJblJlY3Q6ZnVuY3Rpb24gUFB0KHQsZSxuLGkscixvKXt0LnZpc2l0KCgoYSxzLGwsYyx1KT0+e2lmKHZvaWQgMD09PWEubGVuZ3RoKXtkb3tjb25zdCBzPXQueCgpKGEuZGF0YSksbD10LnkoKShhLmRhdGEpO2U8PXMmJnM8aSYmbjw9bCYmbDxyJiZvKGEuZGF0YSl9d2hpbGUoYT1hLm5leHQpO3JldHVybiEwfXJldHVybiBzPj1pfHxjPD1lfHxsPj1yfHx1PD1ufSkpfSxxdWFkVHJlZVZpc2l0UG9pbnRzSW5EaXNrOmZ1bmN0aW9uIE5QdCh0LGUsbixpLHIpe3QudmlzaXQoKChvLGEscyxsLGMpPT57aWYodm9pZCAwPT09by5sZW5ndGgpe2Rve2NvbnN0IGE9dC54KCkoby5kYXRhKSxzPXQueSgpKG8uZGF0YSksbD12UHQoZSxuLGEscyk7bDw9aSYmcihvLmRhdGEsbCl9d2hpbGUobz1vLm5leHQpO3JldHVybiEwfXJldHVybiBiUHQoZSxuLGEscyxsLGMpPml9KSl9LGZpbHRlclNldDpmdW5jdGlvbiBJUHQodCxlKXtjb25zdCBuPW5ldyBTZXQ7cmV0dXJuIHQuZm9yRWFjaCgodD0+e2UodCkmJm4uYWRkKHQpfSkpLG59LHNldEFycmF5T2JzZXJ2YWJseTp3UHQsaGFzaE9mU3RyaW5nOlNQdH0pO2xldCBPUHQ9Y2xhc3MgZXh0ZW5kcyB5ZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5vcmllbnRhdGlvbj0iaG9yaXpvbnRhbCJ9fTtPUHQudGVtcGxhdGU9X2VgCiAgICA8c2xvdCBuYW1lPSJjb250ZW50Ij48L3Nsb3Q+CgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIDpob3N0IHNsb3QgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICA6aG9zdCA6OnNsb3R0ZWQoKikgewogICAgICAgIGZsZXg6IDAgMCBhdXRvOwogICAgICB9CgogICAgICA6aG9zdChbb3JpZW50YXRpb249J2hvcml6b250YWwnXSkgc2xvdCB7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBvdmVyZmxvdy14OiBhdXRvOwogICAgICB9CgogICAgICA6aG9zdChbb3JpZW50YXRpb249J3ZlcnRpY2FsJ10pIHNsb3QgewogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgfQoKICAgICAgOmhvc3QgOjpzbG90dGVkKCo6bm90KDpsYXN0LWNoaWxkKSkgewogICAgICAgIGJvcmRlcjogMCBzb2xpZCB2YXIoLS1kaXZpZGVyLWNvbG9yLCAjY2NjKTsKICAgICAgfQoKICAgICAgOmhvc3QoW29yaWVudGF0aW9uPSd2ZXJ0aWNhbCddKSA6OnNsb3R0ZWQoKjpub3QoOmxhc3QtY2hpbGQpKSB7CiAgICAgICAgYm9yZGVyLWJvdHRvbS13aWR0aDogNXB4OwogICAgICB9CgogICAgICA6aG9zdChbb3JpZW50YXRpb249J2hvcml6b250YWwnXSkgOjpzbG90dGVkKCo6bm90KDpsYXN0LWNoaWxkKSkgewogICAgICAgIGJvcmRlci1yaWdodC13aWR0aDogNXB4OwogICAgICB9CiAgICA8L3N0eWxlPgogIGAsdChbbyh7dHlwZTpTdHJpbmcscmVmbGVjdFRvQXR0cmlidXRlOiEwfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLE9QdC5wcm90b3R5cGUsIm9yaWVudGF0aW9uIix2b2lkIDApLE9QdD10KFtpKCJocGFyYW1zLXNwbGl0LWxheW91dCIpXSxPUHQpO2xldCBSUHQ9Y2xhc3MgZXh0ZW5kcyh0cih5ZSkpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvbmZpZ3VyYXRpb249e3NjaGVtYTp7aHBhcmFtQ29sdW1uczpbXSxtZXRyaWNDb2x1bW5zOltdfSxjb2x1bW5zVmlzaWJpbGl0eTpbXSx2aXNpYmxlU2NoZW1hOntocGFyYW1JbmZvczpbXSxtZXRyaWNJbmZvczpbXX19LHRoaXMuc2Vzc2lvbkdyb3Vwcz1bXSx0aGlzLmRhdGFMb2FkZWRXaXRoTm9uRW1wdHlIcGFyYW1zPSExLHRoaXMuZGF0YUxvYWRlZFdpdGhFbXB0eUhwYXJhbXM9ITEsdGhpcy5fc3RhdHVzZXM9W3t2YWx1ZToiU1RBVFVTX1VOS05PV04iLGRpc3BsYXlOYW1lOiJVbmtub3duIixhbGxvd2VkOiEwfSx7dmFsdWU6IlNUQVRVU19TVUNDRVNTIixkaXNwbGF5TmFtZToiU3VjY2VzcyIsYWxsb3dlZDohMH0se3ZhbHVlOiJTVEFUVVNfRkFJTFVSRSIsZGlzcGxheU5hbWU6IkZhaWx1cmUiLGFsbG93ZWQ6ITB9LHt2YWx1ZToiU1RBVFVTX1JVTk5JTkciLGRpc3BsYXlOYW1lOiJSdW5uaW5nIixhbGxvd2VkOiEwfV0sdGhpcy5fZ2V0RXhwZXJpbWVudFJlc29sdmVkPW5ldyBQcm9taXNlKCh0PT57dGhpcy5fcmVzb2x2ZUdldEV4cGVyaW1lbnQ9dH0pKSx0aGlzLl9saXN0U2Vzc2lvbkdyb3Vwc0NhbmNlbGxlcj1uZXcgTk8sdGhpcy5fcGFnZVNpemVJbnB1dD17dmFsdWU6IjEwMCIsaW52YWxpZDohMX0sdGhpcy5fcGFnZU51bWJlcklucHV0PXt2YWx1ZToiMSIsaW52YWxpZDohMX0sdGhpcy5fcGFnZUNvdW50U3RyPSI/Iix0aGlzLl9ocGFyYW1OYW1lPVpMdCx0aGlzLl9tZXRyaWNOYW1lPUpMdCx0aGlzLl9wcmV0dHlQcmludD1fUHR9cmVsb2FkKCl7dGhpcy5fcXVlcnlTZXJ2ZXIoKX1fY3N2VXJsKHQsZSl7cmV0dXJuIHRoaXMuX2Rvd25sb2FkRGF0YVVybCh0LGUsImNzdiIpfV9qc29uVXJsKHQsZSl7cmV0dXJuIHRoaXMuX2Rvd25sb2FkRGF0YVVybCh0LGUsImpzb24iKX1fbGF0ZXhVcmwodCxlKXtyZXR1cm4gdGhpcy5fZG93bmxvYWREYXRhVXJsKHQsZSwibGF0ZXgiKX1fZG93bmxvYWREYXRhVXJsKHQsZSxuKXtyZXR1cm4gdGhpcy5iYWNrZW5kLmdldERvd25sb2FkVXJsKG4sdCxlLmNvbHVtbnNWaXNpYmlsaXR5KX1fY29tcHV0ZUV4cGVyaW1lbnRBbmRSZWxhdGVkUHJvcHMoKXtjb25zdCB0PU1QdDt0LmlzTnVsbE9yVW5kZWZpbmVkKHRoaXMuYmFja2VuZCl8fHQuaXNOdWxsT3JVbmRlZmluZWQodGhpcy5leHBlcmltZW50TmFtZSl8fHRoaXMuYmFja2VuZC5nZXRFeHBlcmltZW50KHtleHBlcmltZW50TmFtZTp0aGlzLmV4cGVyaW1lbnROYW1lfSkudGhlbigodD0+e3dlLmlzRXF1YWwodCx0aGlzLl9leHBlcmltZW50KXx8KHRoaXMuc2V0KCJfZXhwZXJpbWVudCIsdCksdGhpcy5fY29tcHV0ZUhQYXJhbXMoKSx0aGlzLl9jb21wdXRlTWV0cmljcygpLHRoaXMuX3F1ZXJ5U2VydmVyKCksdGhpcy5fcmVzb2x2ZUdldEV4cGVyaW1lbnQoKSl9KSkuZmluYWxseSgoKCk9Pnt0aGlzLl9jb21wdXRlRGF0YUZvdW5kKCl9KSl9X2NvbXB1dGVEYXRhRm91bmQoKXtjb25zdCB0PUJvb2xlYW4odGhpcy5fZXhwZXJpbWVudCYmdGhpcy5fZXhwZXJpbWVudC5ocGFyYW1JbmZvcyYmdGhpcy5fZXhwZXJpbWVudC5ocGFyYW1JbmZvcy5sZW5ndGg+MCYmdGhpcy5fZXhwZXJpbWVudC5tZXRyaWNJbmZvcyYmdGhpcy5fZXhwZXJpbWVudC5tZXRyaWNJbmZvcy5sZW5ndGg+MCk7dGhpcy5zZXQoImRhdGFMb2FkZWRXaXRoTm9uRW1wdHlIcGFyYW1zIix0KSx0aGlzLnNldCgiZGF0YUxvYWRlZFdpdGhFbXB0eUhwYXJhbXMiLCF0KX1fY29tcHV0ZUhQYXJhbXMoKXtjb25zdCB0PVtdO3RoaXMuX2V4cGVyaW1lbnQuaHBhcmFtSW5mb3MuZm9yRWFjaCgoKGUsbik9Pntjb25zdCBpPXtpbmZvOmUsZGlzcGxheWVkOm48NSxmaWx0ZXI6e319O2kuaW5mby5oYXNPd25Qcm9wZXJ0eSgiZG9tYWluRGlzY3JldGUiKT8oaS5maWx0ZXIuZG9tYWluRGlzY3JldGU9W10saS5pbmZvLmRvbWFpbkRpc2NyZXRlLmZvckVhY2goKHQ9PntpLmZpbHRlci5kb21haW5EaXNjcmV0ZS5wdXNoKHt2YWx1ZTp0LGNoZWNrZWQ6ITB9KX0pKSk6IkRBVEFfVFlQRV9CT09MIj09PWkuaW5mby50eXBlP2kuZmlsdGVyLmRvbWFpbkRpc2NyZXRlPVt7dmFsdWU6ITEsY2hlY2tlZDohMH0se3ZhbHVlOiEwLGNoZWNrZWQ6ITB9XToiREFUQV9UWVBFX0ZMT0FUNjQiPT09aS5pbmZvLnR5cGU/aS5maWx0ZXIuaW50ZXJ2YWw9e21pbjp7dmFsdWU6IiIsaW52YWxpZDohMX0sbWF4Ont2YWx1ZToiIixpbnZhbGlkOiExfX06IkRBVEFfVFlQRV9TVFJJTkciPT09aS5pbmZvLnR5cGU/aS5maWx0ZXIucmVnZXhwPSIiOmNvbnNvbGUud2FybigidW5rbm93biBocGFyYW0uaW5mby50eXBlOiAlcyIsaS5pbmZvLnR5cGUpLHQucHVzaChpKX0pKSx0aGlzLnNldCgiX2hwYXJhbXMiLHQpfV9jb21wdXRlTWV0cmljcygpe2NvbnN0IHQ9W107dGhpcy5fZXhwZXJpbWVudC5tZXRyaWNJbmZvcy5mb3JFYWNoKCgoZSxuKT0+e3QucHVzaCh7aW5mbzplLGZpbHRlcjp7aW50ZXJ2YWw6e21pbjp7dmFsdWU6IiIsaW52YWxpZDohMX0sbWF4Ont2YWx1ZToiIixpbnZhbGlkOiExfX19LGRpc3BsYXllZDpuPDV9KX0pKSx0aGlzLnNldCgiX21ldHJpY3MiLHQpfV9jb21wdXRlU2NoZW1hKCl7cmV0dXJuIHRoaXMuX2hwYXJhbXMmJnRoaXMuX21ldHJpY3M/e2hwYXJhbUNvbHVtbnM6dGhpcy5faHBhcmFtcy5tYXAoKHQ9Pih7aHBhcmFtSW5mbzp0LmluZm99KSkpLG1ldHJpY0NvbHVtbnM6dGhpcy5fbWV0cmljcy5tYXAoKHQ9Pih7bWV0cmljSW5mbzp0LmluZm99KSkpfTp7aHBhcmFtQ29sdW1uczpbXSxtZXRyaWNDb2x1bW5zOltdfX1fdXBkYXRlQ29uZmlndXJhdGlvbigpe3RoaXMuZGVib3VuY2UoIl91cGRhdGVDb25maWd1cmF0aW9uIiwoKCk9Pnt0aGlzLmNvbmZpZ3VyYXRpb249e3NjaGVtYTp0aGlzLl9jb21wdXRlU2NoZW1hKCksY29sdW1uc1Zpc2liaWxpdHk6dGhpcy5fY29tcHV0ZUNvbHVtbnNWaXNpYmlsaXR5KCksdmlzaWJsZVNjaGVtYTp0aGlzLl9jb21wdXRlVmlzaWJsZVNjaGVtYSgpfX0pKX1fY29tcHV0ZUNvbHVtbnNWaXNpYmlsaXR5KCl7cmV0dXJuIHRoaXMuX2hwYXJhbXMmJnRoaXMuX21ldHJpY3M/dGhpcy5faHBhcmFtcy5tYXAoKHQ9PnQuZGlzcGxheWVkKSkuY29uY2F0KHRoaXMuX21ldHJpY3MubWFwKCh0PT50LmRpc3BsYXllZCkpKTpbXX1fY29tcHV0ZVZpc2libGVTY2hlbWEoKXtyZXR1cm4gdGhpcy5faHBhcmFtcyYmdGhpcy5fbWV0cmljcz97aHBhcmFtSW5mb3M6dGhpcy5faHBhcmFtcy5maWx0ZXIoKHQ9PnQuZGlzcGxheWVkKSkubWFwKCh0PT50LmluZm8pKSxtZXRyaWNJbmZvczp0aGlzLl9tZXRyaWNzLmZpbHRlcigodD0+dC5kaXNwbGF5ZWQpKS5tYXAoKHQ9PnQuaW5mbykpfTp7aHBhcmFtSW5mb3M6W10sbWV0cmljSW5mb3M6W119fV9xdWVyeVNlcnZlcigpe3RoaXMuZGVib3VuY2UoInF1ZXJ5U2VydmVyIiwoKCk9PnRoaXMuX3F1ZXJ5U2VydmVyTm9EZWJvdW5jZSgpKSwxMDApfV9xdWVyeVNlcnZlck5vRGVib3VuY2UoKXtpZih0aGlzLl9ocGFyYW1zJiZ0aGlzLl9tZXRyaWNzKXJldHVybiB0aGlzLl9zZW5kTGlzdFNlc3Npb25Hcm91cHNSZXF1ZXN0KCkudGhlbih0aGlzLl9saXN0U2Vzc2lvbkdyb3Vwc0NhbmNlbGxlci5jYW5jZWxsYWJsZSgoKHt2YWx1ZTp0LGNhbmNlbGxlZDplfSk9PntlfHwodC50b3RhbFNpemU+PTA/KHRoaXMuc2V0KCJfcGFnZUNvdW50U3RyIixTdHJpbmcoTWF0aC5jZWlsKHQudG90YWxTaXplLyt0aGlzLl9wYWdlU2l6ZUlucHV0LnZhbHVlKSkpLHRoaXMuc2V0KCJfdG90YWxTZXNzaW9uR3JvdXBzQ291bnRTdHIiLHQudG90YWxTaXplKSk6KHRoaXMuc2V0KCJfcGFnZUNvdW50U3RyIiwiPyIpLHRoaXMuc2V0KCJfdG90YWxTZXNzaW9uR3JvdXBzQ291bnRTdHIiLCJVbmtub3duIikpLHdQdCh0aGlzLCJzZXNzaW9uR3JvdXBzIix0LnNlc3Npb25Hcm91cHMpKX0pKSl9X3NlbmRMaXN0U2Vzc2lvbkdyb3Vwc1JlcXVlc3QoKXtjb25zdCB0PXRoaXMuX2J1aWxkTGlzdFNlc3Npb25Hcm91cHNSZXF1ZXN0KCk7aWYobnVsbCE9PXQpcmV0dXJuIHRoaXMuc2V0KCJfc2Vzc2lvbkdyb3Vwc1JlcXVlc3QiLHQpLHRoaXMuX2xpc3RTZXNzaW9uR3JvdXBzQ2FuY2VsbGVyLmNhbmNlbEFsbCgpLHRoaXMuYmFja2VuZC5saXN0U2Vzc2lvbkdyb3Vwcyh0KX1fYnVpbGRMaXN0U2Vzc2lvbkdyb3Vwc1JlcXVlc3QoKXtjb25zdCB0PXRoaXM7bGV0IGU9ITA7ZnVuY3Rpb24gbihuKXtjb25zdCBpPXQuZ2V0KG4rIi5taW4udmFsdWUiKTtjb25zb2xlLmFzc2VydCh2b2lkIDAhPT1pKTtjb25zdCByPSIiPT09aT8iLUluZmluaXR5IjoraTt0LnNldChuKyIubWluLmludmFsaWQiLGlzTmFOKHIpKSxlPWUmJiFpc05hTihyKTtjb25zdCBvPXQuZ2V0KG4rIi5tYXgudmFsdWUiKTtjb25zb2xlLmFzc2VydCh2b2lkIDAhPT1vKTtjb25zdCBhPSIiPT09bz8iSW5maW5pdHkiOitvO3JldHVybiB0LnNldChuKyIubWF4LmludmFsaWQiLGlzTmFOKGEpKSxlPWUmJiFpc05hTihhKSxpc05hTihyKXx8aXNOYU4oYSk/bnVsbDp7bWluVmFsdWU6cixtYXhWYWx1ZTphfX1mdW5jdGlvbiBpKG4pe2NvbnN0IGk9dC5nZXQobisiLnZhbHVlIik7Y29uc29sZS5hc3NlcnQodm9pZCAwIT09aSk7Y29uc3Qgcj0raSxvPU51bWJlci5pc0ludGVnZXIocikmJnI+MDtyZXR1cm4gdC5zZXQobisiLmludmFsaWQiLCFvKSxlPWUmJm8sbz9yOm51bGx9Y29uc3Qgcj10aGlzLl9zdGF0dXNlcy5maWx0ZXIoKHQ9PnQuYWxsb3dlZCkpLm1hcCgodD0+dC52YWx1ZSkpO2xldCBvPVtdO2lmKHRoaXMuX2hwYXJhbXMuZm9yRWFjaCgoKHQsZSk9PntsZXQgaT17aHBhcmFtOnQuaW5mby5uYW1lfTtpZih0LmZpbHRlci5kb21haW5EaXNjcmV0ZSlpLmZpbHRlckRpc2NyZXRlPVtdLHQuZmlsdGVyLmRvbWFpbkRpc2NyZXRlLmZvckVhY2goKHQ9Pnt0LmNoZWNrZWQmJmkuZmlsdGVyRGlzY3JldGUucHVzaCh0LnZhbHVlKX0pKTtlbHNlIGlmKHQuZmlsdGVyLmludGVydmFsKWkuZmlsdGVySW50ZXJ2YWw9bigiX2hwYXJhbXMuIitlKyIuZmlsdGVyLmludGVydmFsIik7ZWxzZXtpZighdC5maWx0ZXIucmVnZXhwKXJldHVybiBjb25zb2xlLmVycm9yKCJocGFyYW0uZmlsdGVyIHdpdGggbm8gZG9tYWluRGlzY3JldGUsIGludGVydmFsIG9yIHJlZ2V4cCBwcm9wZXJ0aWVzIHNldDogJXMiLHQpLG51bGw7aS5maWx0ZXJSZWdleHA9dC5maWx0ZXIucmVnZXhwfW8ucHVzaChpKX0pKSx0aGlzLl9tZXRyaWNzLmZvckVhY2goKCh0LGUpPT57bGV0IGk9e21ldHJpYzp0LmluZm8ubmFtZSxmaWx0ZXJJbnRlcnZhbDpuKCJfbWV0cmljcy4iK2UrIi5maWx0ZXIuaW50ZXJ2YWwiKX07by5wdXNoKGkpfSkpLHZvaWQgMCE9PXRoaXMuX3NvcnRCeUluZGV4JiZ2b2lkIDAhPT10aGlzLl9zb3J0RGlyZWN0aW9uKXtpZighKHRoaXMuX3NvcnRCeUluZGV4IGluIG8pKXJldHVybiBjb25zb2xlLmVycm9yKCJObyBjb2x1bW4gaW4gY29sUGFyYW1zIHdpdGggaW5kZXggc29ydEJ5SW5kZXg6ICVzIix0aGlzLl9zb3J0QnlJbmRleCksbnVsbDtvW3RoaXMuX3NvcnRCeUluZGV4XS5vcmRlcj0wPT09dGhpcy5fc29ydERpcmVjdGlvbj8iT1JERVJfQVNDIjoiT1JERVJfREVTQyJ9Y29uc3QgYT1pKCJfcGFnZU51bWJlcklucHV0Iikscz1pKCJfcGFnZVNpemVJbnB1dCIpO3JldHVybiBlP3tleHBlcmltZW50TmFtZTp0aGlzLmV4cGVyaW1lbnROYW1lLGFsbG93ZWRTdGF0dXNlczpyLGNvbFBhcmFtczpvLHN0YXJ0SW5kZXg6cyooYS0xKSxzbGljZVNpemU6c306bnVsbH1fbWV0cmljU29ydEJ5SW5kZXgodCl7cmV0dXJuIHQrdGhpcy5faHBhcmFtcy5sZW5ndGh9fTtSUHQudGVtcGxhdGU9X2VgCiAgICA8aHBhcmFtcy1zcGxpdC1sYXlvdXQgb3JpZW50YXRpb249InZlcnRpY2FsIj4KICAgICAgPGRpdiBzbG90PSJjb250ZW50IiBjbGFzcz0ic2VjdGlvbiBoeXBlcnBhcmFtZXRlcnMiPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPkh5cGVycGFyYW1ldGVyczwvZGl2PgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9Int7X2hwYXJhbXN9fSIgYXM9ImhwYXJhbSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJocGFyYW0iPgogICAgICAgICAgICA8cGFwZXItY2hlY2tib3gKICAgICAgICAgICAgICBjaGVja2VkPSJ7e2hwYXJhbS5kaXNwbGF5ZWR9fSIKICAgICAgICAgICAgICBjbGFzcz0iaHBhcmFtLWNoZWNrYm94IgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgW1tfaHBhcmFtTmFtZShocGFyYW0uaW5mbyldXQogICAgICAgICAgICA8L3BhcGVyLWNoZWNrYm94PgogICAgICAgICAgICA8IS0tIFByZWNpc2VseSBvbmUgb2YgdGhlIHRlbXBsYXRlcyBiZWxvdyB3aWxsIGJlIHN0YW1wZWQuLS0+CiAgICAgICAgICAgIDwhLS0gMS4gQSBsaXN0IG9mIGNoZWNrYm94ZXMgLS0+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tocGFyYW0uZmlsdGVyLmRvbWFpbkRpc2NyZXRlXV0iPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZQogICAgICAgICAgICAgICAgaXM9ImRvbS1yZXBlYXQiCiAgICAgICAgICAgICAgICBpdGVtcz0iW1tocGFyYW0uZmlsdGVyLmRvbWFpbkRpc2NyZXRlXV0iCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94CiAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9Int7aXRlbS5jaGVja2VkfX0iCiAgICAgICAgICAgICAgICAgIGNsYXNzPSJkaXNjcmV0ZS12YWx1ZS1jaGVja2JveCIKICAgICAgICAgICAgICAgICAgb24tY2hhbmdlPSJfcXVlcnlTZXJ2ZXIiCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIFtbX3ByZXR0eVByaW50KGl0ZW0udmFsdWUpXV0KICAgICAgICAgICAgICAgIDwvcGFwZXItY2hlY2tib3g+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPCEtLSAyLiBBIG51bWVyaWMgaW50ZXJ2YWwgLS0+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tocGFyYW0uZmlsdGVyLmludGVydmFsXV0iPgogICAgICAgICAgICAgIDxwYXBlci1pbnB1dAogICAgICAgICAgICAgICAgbGFiZWw9Ik1pbiIKICAgICAgICAgICAgICAgIHZhbHVlPSJ7e2hwYXJhbS5maWx0ZXIuaW50ZXJ2YWwubWluLnZhbHVlfX0iCiAgICAgICAgICAgICAgICBhbGxvd2VkX3BhdHRlcm49IlswLTkuZVxcLV0iCiAgICAgICAgICAgICAgICBvbi12YWx1ZS1jaGFuZ2VkPSJfcXVlcnlTZXJ2ZXIiCiAgICAgICAgICAgICAgICBlcnJvci1tZXNzYWdlPSJJbnZhbGlkIGlucHV0IgogICAgICAgICAgICAgICAgaW52YWxpZD0iW1tocGFyYW0uZmlsdGVyLmludGVydmFsLm1pbi5pbnZhbGlkXV0iCiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0iLWluZmluaXR5IgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICA8L3BhcGVyLWlucHV0PgogICAgICAgICAgICAgIDxwYXBlci1pbnB1dAogICAgICAgICAgICAgICAgbGFiZWw9Ik1heCIKICAgICAgICAgICAgICAgIHZhbHVlPSJ7e2hwYXJhbS5maWx0ZXIuaW50ZXJ2YWwubWF4LnZhbHVlfX0iCiAgICAgICAgICAgICAgICBhbGxvd2VkX3BhdHRlcm49IlswLTkuZVxcLV0iCiAgICAgICAgICAgICAgICBvbi12YWx1ZS1jaGFuZ2VkPSJfcXVlcnlTZXJ2ZXIiCiAgICAgICAgICAgICAgICBlcnJvci1tZXNzYWdlPSJJbnZhbGlkIGlucHV0IgogICAgICAgICAgICAgICAgaW52YWxpZD0iW1tocGFyYW0uZmlsdGVyLmludGVydmFsLm1heC5pbnZhbGlkXV0iCiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0iK2luZmluaXR5IgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICA8L3BhcGVyLWlucHV0PgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8IS0tIDMuIEEgcmVnZXhwIC0tPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbaHBhcmFtLmZpbHRlci5yZWdleHBdXSI+CiAgICAgICAgICAgICAgPHBhcGVyLWlucHV0CiAgICAgICAgICAgICAgICBsYWJlbD0iUmVndWxhciBleHByZXNzaW9uIgogICAgICAgICAgICAgICAgdmFsdWU9Int7aHBhcmFtLmZpbHRlci5yZWdleHB9fSIKICAgICAgICAgICAgICAgIG9uLXZhbHVlLWNoYW5nZWQ9Il9xdWVyeVNlcnZlciIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IHNsb3Q9ImNvbnRlbnQiIGNsYXNzPSJzZWN0aW9uIG1ldHJpY3MiPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPk1ldHJpY3M8L2Rpdj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJ7e19tZXRyaWNzfX0iIGFzPSJtZXRyaWMiPgogICAgICAgICAgPGRpdiBjbGFzcz0ibWV0cmljIj4KICAgICAgICAgICAgPCEtLSBUT0RPKGVyZXopOiBNYWtlIGl0IGVhc2llciB0byBoYW5kbGUgYSBsYXJnZSBudW1iZXIgb2YKICAgICAgICAgICAgICAgICAgbWV0cmljczoKICAgICAgICAgICAgICAgICAgMS4gQWRkIGFuICdpc29sYXRvcicgcmFkaW8tYnV0dG9uIHRvIHNlbGVjdCBqdXN0IG9uZQogICAgICAgICAgICAgICAgICBtZXRyaWMgYW5kCiAgICAgICAgICAgICAgICAgIGhpZGUgYWxsIHRoZSByZXN0CiAgICAgICAgICAgICAgICAgIDIuIEFkZCBhICd0b2dnbGUtYWxsJyBidXR0b24gdGhhdCB3aWxsIGhpZGUvdW5oaWRlCiAgICAgICAgICAgICAgICAgICAgYWxsIHRoZQogICAgICAgICAgICAgICAgICBtZXRyaWNzLgogICAgICAgICAgICAgICAgICBVc2Ugc2ltaWxhciBsb2dpYy9hcHBlYXJhbmNlIHRvIHRoZSBydW4tc2VsZWN0b3Igb2YKICAgICAgICAgICAgICAgICAgc2NhbGFycy4tLT4KICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94CiAgICAgICAgICAgICAgY2hlY2tlZD0ie3ttZXRyaWMuZGlzcGxheWVkfX0iCiAgICAgICAgICAgICAgY2xhc3M9Im1ldHJpYy1jaGVja2JveCIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIFtbX21ldHJpY05hbWUobWV0cmljLmluZm8pXV0KICAgICAgICAgICAgPC9wYXBlci1jaGVja2JveD4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5saW5lLWVsZW1lbnQiPgogICAgICAgICAgICAgIDxwYXBlci1pbnB1dAogICAgICAgICAgICAgICAgbGFiZWw9Ik1pbiIKICAgICAgICAgICAgICAgIHZhbHVlPSJ7e21ldHJpYy5maWx0ZXIuaW50ZXJ2YWwubWluLnZhbHVlfX0iCiAgICAgICAgICAgICAgICBhbGxvd2VkLXBhdHRlcm49IlswLTkuZVxcLV0iCiAgICAgICAgICAgICAgICBvbi12YWx1ZS1jaGFuZ2VkPSJfcXVlcnlTZXJ2ZXIiCiAgICAgICAgICAgICAgICBlcnJvci1tZXNzYWdlPSJJbnZhbGlkIGlucHV0IgogICAgICAgICAgICAgICAgaW52YWxpZD0ie3ttZXRyaWMuZmlsdGVyLmludGVydmFsLm1pbi5pbnZhbGlkfX0iCiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0iLWluZmluaXR5IgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICA8L3BhcGVyLWlucHV0PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5saW5lLWVsZW1lbnQiPgogICAgICAgICAgICAgIDxwYXBlci1pbnB1dAogICAgICAgICAgICAgICAgbGFiZWw9Ik1heCIKICAgICAgICAgICAgICAgIGFsbG93ZWQtcGF0dGVybj0iWzAtOS5lXFwtXSIKICAgICAgICAgICAgICAgIHZhbHVlPSJ7e21ldHJpYy5maWx0ZXIuaW50ZXJ2YWwubWF4LnZhbHVlfX0iCiAgICAgICAgICAgICAgICBvbi12YWx1ZS1jaGFuZ2VkPSJfcXVlcnlTZXJ2ZXIiCiAgICAgICAgICAgICAgICBlcnJvci1tZXNzYWdlPSJJbnZhbGlkIGlucHV0IgogICAgICAgICAgICAgICAgaW52YWxpZD0ie3ttZXRyaWMuZmlsdGVyLmludGVydmFsLm1heC5pbnZhbGlkfX0iCiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0iK2luZmluaXR5IgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICA8L3BhcGVyLWlucHV0PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IHNsb3Q9ImNvbnRlbnQiIGNsYXNzPSJzZWN0aW9uIHN0YXR1cyI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+U3RhdHVzPC9kaXY+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfc3RhdHVzZXNdXSIgYXM9InN0YXR1cyI+CiAgICAgICAgICA8cGFwZXItY2hlY2tib3ggY2hlY2tlZD0ie3tzdGF0dXMuYWxsb3dlZH19IiBvbi1jaGFuZ2U9Il9xdWVyeVNlcnZlciI+CiAgICAgICAgICAgIFtbc3RhdHVzLmRpc3BsYXlOYW1lXV0KICAgICAgICAgIDwvcGFwZXItY2hlY2tib3g+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgc2xvdD0iY29udGVudCIgY2xhc3M9InNlY3Rpb24gc29ydGluZyI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+U29ydGluZzwvZGl2PgogICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51CiAgICAgICAgICBsYWJlbD0iU29ydCBieSIKICAgICAgICAgIG9uLXNlbGVjdGVkLWl0ZW0tY2hhbmdlZD0iX3F1ZXJ5U2VydmVyIgogICAgICAgICAgaG9yaXpvbnRhbC1hbGlnbj0ibGVmdCIKICAgICAgICA+CiAgICAgICAgICA8cGFwZXItbGlzdGJveAogICAgICAgICAgICBjbGFzcz0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgICAgc2xvdD0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgICAgc2VsZWN0ZWQ9Int7X3NvcnRCeUluZGV4fX0iCiAgICAgICAgICAgIG9uLXNlbGVjdGVkLWl0ZW0tY2hhbmdlZD0iX3F1ZXJ5U2VydmVyIgogICAgICAgICAgPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19ocGFyYW1zXV0iIGFzPSJocGFyYW0iPgogICAgICAgICAgICAgIDxwYXBlci1pdGVtPiBbW19ocGFyYW1OYW1lKGhwYXJhbS5pbmZvKV1dIDwvcGFwZXItaXRlbT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfbWV0cmljc11dIiBhcz0ibWV0cmljIj4KICAgICAgICAgICAgICA8cGFwZXItaXRlbT4gW1tfbWV0cmljTmFtZShtZXRyaWMuaW5mbyldXSA8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgogICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51CiAgICAgICAgICBsYWJlbD0iRGlyZWN0aW9uIgogICAgICAgICAgb24tc2VsZWN0ZWQtaXRlbS1jaGFuZ2VkPSJfcXVlcnlTZXJ2ZXIiCiAgICAgICAgICBob3Jpem9udGFsLWFsaWduPSJsZWZ0IgogICAgICAgID4KICAgICAgICAgIDxwYXBlci1saXN0Ym94CiAgICAgICAgICAgIGNsYXNzPSJkcm9wZG93bi1jb250ZW50IgogICAgICAgICAgICBzbG90PSJkcm9wZG93bi1jb250ZW50IgogICAgICAgICAgICBzZWxlY3RlZD0ie3tfc29ydERpcmVjdGlvbn19IgogICAgICAgICAgPgogICAgICAgICAgICA8cGFwZXItaXRlbT5Bc2NlbmRpbmc8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgIDxwYXBlci1pdGVtPkRlc2NlbmRpbmc8L3BhcGVyLWl0ZW0+CiAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBzbG90PSJjb250ZW50IiBjbGFzcz0ic2VjdGlvbiBwYWdpbmciPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPlBhZ2luZzwvZGl2PgogICAgICAgIDxkaXY+CiAgICAgICAgICBOdW1iZXIgb2YgbWF0Y2hpbmcgc2Vzc2lvbiBncm91cHM6IFtbX3RvdGFsU2Vzc2lvbkdyb3Vwc0NvdW50U3RyXV0KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJpbmxpbmUtZWxlbWVudCBwYWdlLW51bWJlci1pbnB1dCI+CiAgICAgICAgICA8cGFwZXItaW5wdXQKICAgICAgICAgICAgbGFiZWw9IlBhZ2UgIyIKICAgICAgICAgICAgdmFsdWU9Int7X3BhZ2VOdW1iZXJJbnB1dC52YWx1ZX19IgogICAgICAgICAgICBhbGxvd2VkLXBhdHRlcm49IlswLTldIgogICAgICAgICAgICBlcnJvci1tZXNzYWdlPSJJbnZhbGlkIGlucHV0IgogICAgICAgICAgICBpbnZhbGlkPSJbW19wYWdlTnVtYmVySW5wdXQuaW52YWxpZF1dIgogICAgICAgICAgICBvbi12YWx1ZS1jaGFuZ2VkPSJfcXVlcnlTZXJ2ZXIiCiAgICAgICAgICA+CiAgICAgICAgICAgIDxkaXYgc2xvdD0ic3VmZml4IiBjbGFzcz0icGFnZS1zdWZmaXgiPi8gW1tfcGFnZUNvdW50U3RyXV08L2Rpdj4KICAgICAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iaW5saW5lLWVsZW1lbnQgcGFnZS1zaXplLWlucHV0Ij4KICAgICAgICAgIDxwYXBlci1pbnB1dAogICAgICAgICAgICBsYWJlbD0iTWF4ICMgb2Ygc2Vzc2lvbiBncm91cHMgcGVyIHBhZ2U6IgogICAgICAgICAgICB2YWx1ZT0ie3tfcGFnZVNpemVJbnB1dC52YWx1ZX19IgogICAgICAgICAgICBhbGxvd2VkLXBhdHRlcm49IlswLTldIgogICAgICAgICAgICBlcnJvci1tZXNzYWdlPSJJbnZhbGlkIGlucHV0IgogICAgICAgICAgICBpbnZhbGlkPSJbW19wYWdlU2l6ZUlucHV0LmludmFsaWRdXSIKICAgICAgICAgICAgb24tdmFsdWUtY2hhbmdlZD0iX3F1ZXJ5U2VydmVyIgogICAgICAgICAgPgogICAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgc2xvdD0iY29udGVudCIgY2xhc3M9InNlY3Rpb24gZG93bmxvYWQiPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfc2Vzc2lvbkdyb3Vwc1JlcXVlc3RdXSI+CiAgICAgICAgICBEb3dubG9hZCBkYXRhIGFzCiAgICAgICAgICA8c3Bhbj4KICAgICAgICAgICAgPGEKICAgICAgICAgICAgICBpZD0iY3N2TGluayIKICAgICAgICAgICAgICBkb3dubG9hZD0iaHBhcmFtc190YWJsZS5jc3YiCiAgICAgICAgICAgICAgaHJlZj0iW1tfY3N2VXJsKF9zZXNzaW9uR3JvdXBzUmVxdWVzdCwgY29uZmlndXJhdGlvbildXSIKICAgICAgICAgICAgICA+Q1NWPC9hCiAgICAgICAgICAgID4KICAgICAgICAgICAgPGEKICAgICAgICAgICAgICBpZD0ianNvbkxpbmsiCiAgICAgICAgICAgICAgZG93bmxvYWQ9ImhwYXJhbXNfdGFibGUuanNvbiIKICAgICAgICAgICAgICBocmVmPSJbW19qc29uVXJsKF9zZXNzaW9uR3JvdXBzUmVxdWVzdCwgY29uZmlndXJhdGlvbildXSIKICAgICAgICAgICAgICA+SlNPTjwvYQogICAgICAgICAgICA+CiAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgaWQ9ImxhdGV4TGluayIKICAgICAgICAgICAgICBkb3dubG9hZD0iaHBhcmFtc190YWJsZS50ZXgiCiAgICAgICAgICAgICAgaHJlZj0iW1tfbGF0ZXhVcmwoX3Nlc3Npb25Hcm91cHNSZXF1ZXN0LCBjb25maWd1cmF0aW9uKV1dIgogICAgICAgICAgICAgID5MYVRlWDwvYQogICAgICAgICAgICA+CiAgICAgICAgICA8L3NwYW4+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICA8L2hwYXJhbXMtc3BsaXQtbGF5b3V0PgogICAgPHN0eWxlPgogICAgICAuc2VjdGlvbiB7CiAgICAgICAgcGFkZGluZzogMTBweDsKICAgICAgfQogICAgICAuc2VjdGlvbi10aXRsZSB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogN3B4OwogICAgICB9CiAgICAgIC5kaXNjcmV0ZS12YWx1ZS1jaGVja2JveCwKICAgICAgLm1ldHJpYy1jaGVja2JveCwKICAgICAgLmhwYXJhbS1jaGVja2JveCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KICAgICAgLmRpc2NyZXRlLXZhbHVlLWNoZWNrYm94IHsKICAgICAgICBtYXJnaW4tbGVmdDogMjBweDsKICAgICAgfQogICAgICAuaHBhcmFtLAogICAgICAubWV0cmljIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgICAuaW5saW5lLWVsZW1lbnQgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB3aWR0aDogNDAlOwogICAgICAgIG1hcmdpbi1sZWZ0OiAxMHB4OwogICAgICB9CiAgICAgIC5wYWdlLW51bWJlci1pbnB1dCB7CiAgICAgICAgd2lkdGg6IDIwJTsKICAgICAgfQogICAgICAucGFnZS1zaXplLWlucHV0IHsKICAgICAgICB3aWR0aDogNjAlOwogICAgICB9CiAgICAgIHZhYWRpbi1zcGxpdC1sYXlvdXQgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQogICAgICBwYXBlci1saXN0Ym94IHsKICAgICAgICBtYXgtaGVpZ2h0OiAxNWVtOwogICAgICB9CiAgICAgIC5wYWdlLXN1ZmZpeCB7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgfQogICAgPC9zdHlsZT4KICBgLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLFJQdC5wcm90b3R5cGUsImV4cGVyaW1lbnROYW1lIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxSUHQucHJvdG90eXBlLCJjb25maWd1cmF0aW9uIix2b2lkIDApLHQoW28oe3R5cGU6QXJyYXksbm90aWZ5OiEwfSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLFJQdC5wcm90b3R5cGUsInNlc3Npb25Hcm91cHMiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFuLG5vdGlmeTohMH0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sUlB0LnByb3RvdHlwZSwiZGF0YUxvYWRlZFdpdGhOb25FbXB0eUhwYXJhbXMiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFuLG5vdGlmeTohMH0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sUlB0LnByb3RvdHlwZSwiZGF0YUxvYWRlZFdpdGhFbXB0eUhwYXJhbXMiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUlB0LnByb3RvdHlwZSwiX2V4cGVyaW1lbnQiLHZvaWQgMCksdChbbyh7dHlwZTpBcnJheX0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLFJQdC5wcm90b3R5cGUsIl9ocGFyYW1zIix2b2lkIDApLHQoW28oe3R5cGU6QXJyYXl9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSxSUHQucHJvdG90eXBlLCJfbWV0cmljcyIsdm9pZCAwKSx0KFtvKHt0eXBlOkFycmF5fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLFJQdC5wcm90b3R5cGUsIl9zdGF0dXNlcyIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxSUHQucHJvdG90eXBlLCJfZ2V0RXhwZXJpbWVudFJlc29sdmVkIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sUlB0LnByb3RvdHlwZSwiX3Jlc29sdmVHZXRFeHBlcmltZW50Iix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLFJQdC5wcm90b3R5cGUsIl9saXN0U2Vzc2lvbkdyb3Vwc0NhbmNlbGxlciIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxSUHQucHJvdG90eXBlLCJfc29ydEJ5SW5kZXgiLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXJ9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sUlB0LnByb3RvdHlwZSwiX3NvcnREaXJlY3Rpb24iLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUlB0LnByb3RvdHlwZSwiX3BhZ2VTaXplSW5wdXQiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUlB0LnByb3RvdHlwZSwiX3BhZ2VOdW1iZXJJbnB1dCIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxSUHQucHJvdG90eXBlLCJfcGFnZUNvdW50U3RyIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLFJQdC5wcm90b3R5cGUsIl90b3RhbFNlc3Npb25Hcm91cHNDb3VudFN0ciIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxSUHQucHJvdG90eXBlLCJfc2Vzc2lvbkdyb3Vwc1JlcXVlc3QiLHZvaWQgMCksdChbYSgiYmFja2VuZCIsImV4cGVyaW1lbnROYW1lIiksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pLGUoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxSUHQucHJvdG90eXBlLCJfY29tcHV0ZUV4cGVyaW1lbnRBbmRSZWxhdGVkUHJvcHMiLG51bGwpLHQoW2EoIl9ocGFyYW1zLioiLCJfbWV0cmljcy4qIiksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pLGUoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxSUHQucHJvdG90eXBlLCJfdXBkYXRlQ29uZmlndXJhdGlvbiIsbnVsbCksUlB0PXQoW2koInRmLWhwYXJhbXMtcXVlcnktcGFuZSIpXSxSUHQpO2xldCB6UHQ9Y2xhc3MgZXh0ZW5kcyB5ZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5vcHRpb25zPW51bGx9X2NvbmZpZ3VyYXRpb25DaGFuZ2VkKCl7Y29uc3QgdD10aGlzLmNvbmZpZ3VyYXRpb24udmlzaWJsZVNjaGVtYSxlPXRoaXMuY29uZmlndXJhdGlvbi5zY2hlbWEsbj17Y29sdW1uczp0LmhwYXJhbUluZm9zLm1hcCgoKG4saSk9Pih7bmFtZTpaTHQobiksaW5kZXg6aSxhYnNvbHV0ZUluZGV4OmNQdChlLHQsaSksc2NhbGU6dGhpcy5faXNOdW1lcmljQ29sdW1uKGkpPyJMSU5FQVIiOiJOT05fTlVNRVJJQyJ9KSkpLmNvbmNhdCh0Lm1ldHJpY0luZm9zLm1hcCgoKG4saSk9Pntjb25zdCByPWkrdC5ocGFyYW1JbmZvcy5sZW5ndGg7cmV0dXJue3NjYWxlOiJMSU5FQVIiLG5hbWU6Skx0KG4pLGluZGV4OnIsYWJzb2x1dGVJbmRleDpjUHQoZSx0LHIpfX0pKSksbWluQ29sb3I6IiMwMDAwRkYiLG1heENvbG9yOiIjRkYwMDAwIixjb25maWd1cmF0aW9uOnRoaXMuY29uZmlndXJhdGlvbn07dGhpcy5zZXQoIm9wdGlvbnMiLG4pLHppKCksdGhpcy5zZXQoIm9wdGlvbnMuY29sb3JCeUNvbHVtbkluZGV4Iix0aGlzLl9kZWZhdWx0Q29sb3JCeUNvbHVtbkluZGV4KCkpfV91bnNlbGVjdERpc2FibGVkTG9nU2NhbGVzKCl7bnVsbCE9PXRoaXMub3B0aW9ucyYmdGhpcy5vcHRpb25zLmNvbHVtbnMuZm9yRWFjaCgodD0+e2NvbnN0IGU9Im9wdGlvbnMuY29sdW1ucy4iK3QuaW5kZXg7dGhpcy5fYWxsb3dMb2dTY2FsZSh0KXx8IkxPRyIhPT10LnNjYWxlfHx0aGlzLnNldChlKyIuc2NhbGUiLCJMSU5FQVIiKX0pKX1fYWxsb3dMb2dTY2FsZSh0KXtpZighdGhpcy5faXNOdW1lcmljQ29sdW1uKHQuaW5kZXgpfHwhdGhpcy5zZXNzaW9uR3JvdXBzKXJldHVybiExO2NvbnN0W2Usbl09ZFB0KHRoaXMuY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hLHRoaXMuc2Vzc2lvbkdyb3Vwcyx0LmluZGV4KTtyZXR1cm4gZT4wfHxuPDB9X2lzTnVtZXJpY0NvbHVtbih0KXtyZXR1cm4gdD49dGhpcy5jb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWEuaHBhcmFtSW5mb3MubGVuZ3RofHwiREFUQV9UWVBFX0ZMT0FUNjQiPT09dGhpcy5jb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWEuaHBhcmFtSW5mb3NbdF0udHlwZX1fZGVmYXVsdENvbG9yQnlDb2x1bW5JbmRleCgpe2lmKHRoaXMuY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hLm1ldHJpY0luZm9zLmxlbmd0aD4wKXJldHVybiB0aGlzLmNvbmZpZ3VyYXRpb24udmlzaWJsZVNjaGVtYS5ocGFyYW1JbmZvcy5sZW5ndGg7Y29uc3QgdD10aGlzLmNvbmZpZ3VyYXRpb24udmlzaWJsZVNjaGVtYS5ocGFyYW1JbmZvcy5maW5kSW5kZXgoKHQ9PiJEQVRBX1RZUEVfRkxPQVQ2NCI9PT10LnR5cGUpKTtyZXR1cm4tMSE9PXQ/dDp2b2lkIDB9fTt6UHQudGVtcGxhdGU9X2VgCiAgICA8ZGl2IGNsYXNzPSJjb250cm9sLXBhbmVsIj4KICAgICAgPCEtLSAnQ29sb3IgYnknIGRyb3AgZG93biBtZW51IC0tPgogICAgICA8cGFwZXItZHJvcGRvd24tbWVudQogICAgICAgIGxhYmVsPSJDb2xvciBieSIKICAgICAgICBpZD0iY29sb3JCeURyb3BEb3duTWVudSIKICAgICAgICBob3Jpem9udGFsLWFsaWduPSJsZWZ0IgogICAgICA+CiAgICAgICAgPHBhcGVyLWxpc3Rib3gKICAgICAgICAgIGNsYXNzPSJkcm9wZG93bi1jb250ZW50IgogICAgICAgICAgc2xvdD0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgIHNlbGVjdGVkPSJ7e29wdGlvbnMuY29sb3JCeUNvbHVtbkluZGV4fX0iCiAgICAgICAgICBpZD0iY29sb3JCeUxpc3RCb3giCiAgICAgICAgPgogICAgICAgICAgPHRlbXBsYXRlCiAgICAgICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgICAgICBpdGVtcz0iW1tvcHRpb25zLmNvbHVtbnNdXSIKICAgICAgICAgICAgYXM9ImNvbHVtbiIKICAgICAgICAgICAgaWQ9ImNvbG9yQnlDb2x1bW5UZW1wbGF0ZSIKICAgICAgICAgID4KICAgICAgICAgICAgPHBhcGVyLWl0ZW0gZGlzYWJsZWQ9IltbIV9pc051bWVyaWNDb2x1bW4oY29sdW1uLmluZGV4KV1dIj4KICAgICAgICAgICAgICBbW2NvbHVtbi5uYW1lXV0KICAgICAgICAgICAgPC9wYXBlci1pdGVtPgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KCiAgICAgIDwhLS0gQ29sdW1ucyBzY2FsZXMgLS0+CiAgICAgIDxkaXYgY2xhc3M9ImNvbHVtbnMtY29udGFpbmVyIj4KICAgICAgICA8IS0tIFNjYWxlIG9wdGlvbnMgZm9yIGVhY2ggbnVtZXJpYyBmZWF0dXJlIC0tPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9Int7b3B0aW9ucy5jb2x1bW5zfX0iIGFzPSJjb2x1bW4iPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc051bWVyaWNDb2x1bW4oY29sdW1uLmluZGV4KV1dIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sdW1uIj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2x1bW4tdGl0bGUiPltbY29sdW1uLm5hbWVdXTwvZGl2PgogICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICA8cGFwZXItcmFkaW8tZ3JvdXAKICAgICAgICAgICAgICAgICAgY2xhc3M9InNjYWxlLXJhZGlvLWdyb3VwIgogICAgICAgICAgICAgICAgICBzZWxlY3RlZD0ie3tjb2x1bW4uc2NhbGV9fSIKICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBuYW1lPSJMSU5FQVIiPgogICAgICAgICAgICAgICAgICAgIExpbmVhcgogICAgICAgICAgICAgICAgICA8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgPCEtLSBUaGUgaWQgaGVyZSBpcyB1c2VkIHRvIGFjY2VzcyB0aGlzIGJ1dHRvbiBpbiB1bml0CiAgICAgICAgICAgICAgICAgICAgICAgdGVzdHMuLS0+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24KICAgICAgICAgICAgICAgICAgICBpZD0ibG9nU2NhbGVCdXR0b25fW1tjb2x1bW4ubmFtZV1dIgogICAgICAgICAgICAgICAgICAgIG5hbWU9IkxPRyIKICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD0iW1shX2FsbG93TG9nU2NhbGUoY29sdW1uLCBzZXNzaW9uR3JvdXBzLiopXV0iCiAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICBMb2dhcml0aG1pYwogICAgICAgICAgICAgICAgICA8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBuYW1lPSJRVUFOVElMRSI+CiAgICAgICAgICAgICAgICAgICAgUXVhbnRpbGUKICAgICAgICAgICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICAgICAgICA8L3BhcGVyLXJhZGlvLWdyb3VwPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgICAuY29udHJvbC1wYW5lbCB7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgIH0KICAgICAgLmNvbHVtbiB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIG1hcmdpbi1yaWdodDogNXB4OwogICAgICAgIGJvcmRlcjogc29saWQgMXB4IGRhcmtncmF5OwogICAgICAgIHBhZGRpbmc6IDNweDsKICAgICAgfQogICAgICAuY29sdW1uLXRpdGxlIHsKICAgICAgICAvKiBGaXQgZXZlcnkgdGl0bGUgaW4gb25lIGxpbmUgc28gdGhlIHJhZGlvIGJveGVzIGFsaWduIHZlcnRpY2FsbHkuICovCiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgICAgfQogICAgICAuY29sdW1ucy1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgfQogICAgICAuc2NhbGUtcmFkaW8tZ3JvdXAgcGFwZXItcmFkaW8tYnV0dG9uIHsKICAgICAgICBwYWRkaW5nOiAycHg7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KICAgICAgcGFwZXItbGlzdGJveCB7CiAgICAgICAgbWF4LWhlaWdodDogMTVlbTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLHpQdC5wcm90b3R5cGUsImNvbmZpZ3VyYXRpb24iLHZvaWQgMCksdChbbyh7dHlwZTpBcnJheX0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLHpQdC5wcm90b3R5cGUsInNlc3Npb25Hcm91cHMiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLHpQdC5wcm90b3R5cGUsIm9wdGlvbnMiLHZvaWQgMCksdChbYSgiY29uZmlndXJhdGlvbi4qIiksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pLGUoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSx6UHQucHJvdG90eXBlLCJfY29uZmlndXJhdGlvbkNoYW5nZWQiLG51bGwpLHQoW2EoInNlc3Npb25Hcm91cHMuKiIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0selB0LnByb3RvdHlwZSwiX3Vuc2VsZWN0RGlzYWJsZWRMb2dTY2FsZXMiLG51bGwpLHpQdD10KFtpKCJ0Zi1ocGFyYW1zLXNjYWxlLWFuZC1jb2xvci1jb250cm9scyIpXSx6UHQpO2NsYXNzIERQdCBleHRlbmRzIEhUTUxFbGVtZW50e3N0YXRpYyBnZXQgdmVyc2lvbigpe3JldHVybiIxLjYuMSJ9fWN1c3RvbUVsZW1lbnRzLmRlZmluZSgidmFhZGluLWx1bW8tc3R5bGVzIixEUHQpO2NvbnN0IEJQdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO0JQdC5pbm5lckhUTUw9JzxjdXN0b20tc3R5bGU+XG4gIDxzdHlsZT5cbiAgICBodG1sIHtcbiAgICAgIC8qIEJhc2UgKGJhY2tncm91bmQpICovXG4gICAgICAtLWx1bW8tYmFzZS1jb2xvcjogI0ZGRjtcblxuICAgICAgLyogVGludCAqL1xuICAgICAgLS1sdW1vLXRpbnQtNXBjdDogaHNsYSgwLCAwJSwgMTAwJSwgMC4zKTtcbiAgICAgIC0tbHVtby10aW50LTEwcGN0OiBoc2xhKDAsIDAlLCAxMDAlLCAwLjM3KTtcbiAgICAgIC0tbHVtby10aW50LTIwcGN0OiBoc2xhKDAsIDAlLCAxMDAlLCAwLjQ0KTtcbiAgICAgIC0tbHVtby10aW50LTMwcGN0OiBoc2xhKDAsIDAlLCAxMDAlLCAwLjUpO1xuICAgICAgLS1sdW1vLXRpbnQtNDBwY3Q6IGhzbGEoMCwgMCUsIDEwMCUsIDAuNTcpO1xuICAgICAgLS1sdW1vLXRpbnQtNTBwY3Q6IGhzbGEoMCwgMCUsIDEwMCUsIDAuNjQpO1xuICAgICAgLS1sdW1vLXRpbnQtNjBwY3Q6IGhzbGEoMCwgMCUsIDEwMCUsIDAuNyk7XG4gICAgICAtLWx1bW8tdGludC03MHBjdDogaHNsYSgwLCAwJSwgMTAwJSwgMC43Nyk7XG4gICAgICAtLWx1bW8tdGludC04MHBjdDogaHNsYSgwLCAwJSwgMTAwJSwgMC44NCk7XG4gICAgICAtLWx1bW8tdGludC05MHBjdDogaHNsYSgwLCAwJSwgMTAwJSwgMC45KTtcbiAgICAgIC0tbHVtby10aW50OiAjRkZGO1xuXG4gICAgICAvKiBTaGFkZSAqL1xuICAgICAgLS1sdW1vLXNoYWRlLTVwY3Q6IGhzbGEoMjE0LCA2MSUsIDI1JSwgMC4wNSk7XG4gICAgICAtLWx1bW8tc2hhZGUtMTBwY3Q6IGhzbGEoMjE0LCA1NyUsIDI0JSwgMC4xKTtcbiAgICAgIC0tbHVtby1zaGFkZS0yMHBjdDogaHNsYSgyMTQsIDUzJSwgMjMlLCAwLjE2KTtcbiAgICAgIC0tbHVtby1zaGFkZS0zMHBjdDogaHNsYSgyMTQsIDUwJSwgMjIlLCAwLjI2KTtcbiAgICAgIC0tbHVtby1zaGFkZS00MHBjdDogaHNsYSgyMTQsIDQ3JSwgMjElLCAwLjM4KTtcbiAgICAgIC0tbHVtby1zaGFkZS01MHBjdDogaHNsYSgyMTQsIDQ1JSwgMjAlLCAwLjUpO1xuICAgICAgLS1sdW1vLXNoYWRlLTYwcGN0OiBoc2xhKDIxNCwgNDMlLCAxOSUsIDAuNjEpO1xuICAgICAgLS1sdW1vLXNoYWRlLTcwcGN0OiBoc2xhKDIxNCwgNDIlLCAxOCUsIDAuNzIpO1xuICAgICAgLS1sdW1vLXNoYWRlLTgwcGN0OiBoc2xhKDIxNCwgNDElLCAxNyUsIDAuODMpO1xuICAgICAgLS1sdW1vLXNoYWRlLTkwcGN0OiBoc2xhKDIxNCwgNDAlLCAxNiUsIDAuOTQpO1xuICAgICAgLS1sdW1vLXNoYWRlOiBoc2woMjE0LCAzNSUsIDE1JSk7XG5cbiAgICAgIC8qIENvbnRyYXN0ICovXG4gICAgICAtLWx1bW8tY29udHJhc3QtNXBjdDogdmFyKC0tbHVtby1zaGFkZS01cGN0KTtcbiAgICAgIC0tbHVtby1jb250cmFzdC0xMHBjdDogdmFyKC0tbHVtby1zaGFkZS0xMHBjdCk7XG4gICAgICAtLWx1bW8tY29udHJhc3QtMjBwY3Q6IHZhcigtLWx1bW8tc2hhZGUtMjBwY3QpO1xuICAgICAgLS1sdW1vLWNvbnRyYXN0LTMwcGN0OiB2YXIoLS1sdW1vLXNoYWRlLTMwcGN0KTtcbiAgICAgIC0tbHVtby1jb250cmFzdC00MHBjdDogdmFyKC0tbHVtby1zaGFkZS00MHBjdCk7XG4gICAgICAtLWx1bW8tY29udHJhc3QtNTBwY3Q6IHZhcigtLWx1bW8tc2hhZGUtNTBwY3QpO1xuICAgICAgLS1sdW1vLWNvbnRyYXN0LTYwcGN0OiB2YXIoLS1sdW1vLXNoYWRlLTYwcGN0KTtcbiAgICAgIC0tbHVtby1jb250cmFzdC03MHBjdDogdmFyKC0tbHVtby1zaGFkZS03MHBjdCk7XG4gICAgICAtLWx1bW8tY29udHJhc3QtODBwY3Q6IHZhcigtLWx1bW8tc2hhZGUtODBwY3QpO1xuICAgICAgLS1sdW1vLWNvbnRyYXN0LTkwcGN0OiB2YXIoLS1sdW1vLXNoYWRlLTkwcGN0KTtcbiAgICAgIC0tbHVtby1jb250cmFzdDogdmFyKC0tbHVtby1zaGFkZSk7XG5cbiAgICAgIC8qIFRleHQgKi9cbiAgICAgIC0tbHVtby1oZWFkZXItdGV4dC1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdCk7XG4gICAgICAtLWx1bW8tYm9keS10ZXh0LWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTkwcGN0KTtcbiAgICAgIC0tbHVtby1zZWNvbmRhcnktdGV4dC1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdC03MHBjdCk7XG4gICAgICAtLWx1bW8tdGVydGlhcnktdGV4dC1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdC01MHBjdCk7XG4gICAgICAtLWx1bW8tZGlzYWJsZWQtdGV4dC1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdC0zMHBjdCk7XG5cbiAgICAgIC8qIFByaW1hcnkgKi9cbiAgICAgIC0tbHVtby1wcmltYXJ5LWNvbG9yOiBoc2woMjE0LCA5MCUsIDUyJSk7XG4gICAgICAtLWx1bW8tcHJpbWFyeS1jb2xvci01MHBjdDogaHNsYSgyMTQsIDkwJSwgNTIlLCAwLjUpO1xuICAgICAgLS1sdW1vLXByaW1hcnktY29sb3ItMTBwY3Q6IGhzbGEoMjE0LCA5MCUsIDUyJSwgMC4xKTtcbiAgICAgIC0tbHVtby1wcmltYXJ5LXRleHQtY29sb3I6IHZhcigtLWx1bW8tcHJpbWFyeS1jb2xvcik7XG4gICAgICAtLWx1bW8tcHJpbWFyeS1jb250cmFzdC1jb2xvcjogI0ZGRjtcblxuICAgICAgLyogRXJyb3IgKi9cbiAgICAgIC0tbHVtby1lcnJvci1jb2xvcjogaHNsKDMsIDEwMCUsIDYxJSk7XG4gICAgICAtLWx1bW8tZXJyb3ItY29sb3ItNTBwY3Q6IGhzbGEoMywgMTAwJSwgNjAlLCAwLjUpO1xuICAgICAgLS1sdW1vLWVycm9yLWNvbG9yLTEwcGN0OiBoc2xhKDMsIDEwMCUsIDYwJSwgMC4xKTtcbiAgICAgIC0tbHVtby1lcnJvci10ZXh0LWNvbG9yOiBoc2woMywgOTIlLCA1MyUpO1xuICAgICAgLS1sdW1vLWVycm9yLWNvbnRyYXN0LWNvbG9yOiAjRkZGO1xuXG4gICAgICAvKiBTdWNjZXNzICovXG4gICAgICAtLWx1bW8tc3VjY2Vzcy1jb2xvcjogaHNsKDE0NSwgODAlLCA0MiUpOyAvKiBoc2woMTQ0LDgyJSwzNyUpOyAqL1xuICAgICAgLS1sdW1vLXN1Y2Nlc3MtY29sb3ItNTBwY3Q6IGhzbGEoMTQ1LCA3NiUsIDQ0JSwgMC41NSk7XG4gICAgICAtLWx1bW8tc3VjY2Vzcy1jb2xvci0xMHBjdDogaHNsYSgxNDUsIDc2JSwgNDQlLCAwLjEyKTtcbiAgICAgIC0tbHVtby1zdWNjZXNzLXRleHQtY29sb3I6IGhzbCgxNDUsIDEwMCUsIDMyJSk7XG4gICAgICAtLWx1bW8tc3VjY2Vzcy1jb250cmFzdC1jb2xvcjogI0ZGRjtcbiAgICB9XG4gIDwvc3R5bGU+XG48L2N1c3RvbS1zdHlsZT48ZG9tLW1vZHVsZSBpZD0ibHVtby1jb2xvciI+XG4gIDx0ZW1wbGF0ZT5cbiAgICA8c3R5bGU+XG4gICAgICBbdGhlbWV+PSJkYXJrIl0ge1xuICAgICAgICAvKiBCYXNlIChiYWNrZ3JvdW5kKSAqL1xuICAgICAgICAtLWx1bW8tYmFzZS1jb2xvcjogaHNsKDIxNCwgMzUlLCAyMSUpO1xuXG4gICAgICAgIC8qIFRpbnQgKi9cbiAgICAgICAgLS1sdW1vLXRpbnQtNXBjdDogaHNsYSgyMTQsIDY1JSwgODUlLCAwLjA2KTtcbiAgICAgICAgLS1sdW1vLXRpbnQtMTBwY3Q6IGhzbGEoMjE0LCA2MCUsIDgwJSwgMC4xNCk7XG4gICAgICAgIC0tbHVtby10aW50LTIwcGN0OiBoc2xhKDIxNCwgNjQlLCA4MiUsIDAuMjMpO1xuICAgICAgICAtLWx1bW8tdGludC0zMHBjdDogaHNsYSgyMTQsIDY5JSwgODQlLCAwLjMyKTtcbiAgICAgICAgLS1sdW1vLXRpbnQtNDBwY3Q6IGhzbGEoMjE0LCA3MyUsIDg2JSwgMC40MSk7XG4gICAgICAgIC0tbHVtby10aW50LTUwcGN0OiBoc2xhKDIxNCwgNzglLCA4OCUsIDAuNSk7XG4gICAgICAgIC0tbHVtby10aW50LTYwcGN0OiBoc2xhKDIxNCwgODIlLCA5MCUsIDAuNik7XG4gICAgICAgIC0tbHVtby10aW50LTcwcGN0OiBoc2xhKDIxNCwgODclLCA5MiUsIDAuNyk7XG4gICAgICAgIC0tbHVtby10aW50LTgwcGN0OiBoc2xhKDIxNCwgOTElLCA5NCUsIDAuOCk7XG4gICAgICAgIC0tbHVtby10aW50LTkwcGN0OiBoc2xhKDIxNCwgOTYlLCA5NiUsIDAuOSk7XG4gICAgICAgIC0tbHVtby10aW50OiBoc2woMjE0LCAxMDAlLCA5OCUpO1xuXG4gICAgICAgIC8qIFNoYWRlICovXG4gICAgICAgIC0tbHVtby1zaGFkZS01cGN0OiBoc2xhKDIxNCwgMCUsIDAlLCAwLjA3KTtcbiAgICAgICAgLS1sdW1vLXNoYWRlLTEwcGN0OiBoc2xhKDIxNCwgNCUsIDIlLCAwLjE1KTtcbiAgICAgICAgLS1sdW1vLXNoYWRlLTIwcGN0OiBoc2xhKDIxNCwgOCUsIDQlLCAwLjIzKTtcbiAgICAgICAgLS1sdW1vLXNoYWRlLTMwcGN0OiBoc2xhKDIxNCwgMTIlLCA2JSwgMC4zMik7XG4gICAgICAgIC0tbHVtby1zaGFkZS00MHBjdDogaHNsYSgyMTQsIDE2JSwgOCUsIDAuNDEpO1xuICAgICAgICAtLWx1bW8tc2hhZGUtNTBwY3Q6IGhzbGEoMjE0LCAyMCUsIDEwJSwgMC41KTtcbiAgICAgICAgLS1sdW1vLXNoYWRlLTYwcGN0OiBoc2xhKDIxNCwgMjQlLCAxMiUsIDAuNik7XG4gICAgICAgIC0tbHVtby1zaGFkZS03MHBjdDogaHNsYSgyMTQsIDI4JSwgMTMlLCAwLjcpO1xuICAgICAgICAtLWx1bW8tc2hhZGUtODBwY3Q6IGhzbGEoMjE0LCAzMiUsIDEzJSwgMC44KTtcbiAgICAgICAgLS1sdW1vLXNoYWRlLTkwcGN0OiBoc2xhKDIxNCwgMzMlLCAxMyUsIDAuOSk7XG4gICAgICAgIC0tbHVtby1zaGFkZTogaHNsKDIxNCwgMzMlLCAxMyUpO1xuXG4gICAgICAgIC8qIENvbnRyYXN0ICovXG4gICAgICAgIC0tbHVtby1jb250cmFzdC01cGN0OiB2YXIoLS1sdW1vLXRpbnQtNXBjdCk7XG4gICAgICAgIC0tbHVtby1jb250cmFzdC0xMHBjdDogdmFyKC0tbHVtby10aW50LTEwcGN0KTtcbiAgICAgICAgLS1sdW1vLWNvbnRyYXN0LTIwcGN0OiB2YXIoLS1sdW1vLXRpbnQtMjBwY3QpO1xuICAgICAgICAtLWx1bW8tY29udHJhc3QtMzBwY3Q6IHZhcigtLWx1bW8tdGludC0zMHBjdCk7XG4gICAgICAgIC0tbHVtby1jb250cmFzdC00MHBjdDogdmFyKC0tbHVtby10aW50LTQwcGN0KTtcbiAgICAgICAgLS1sdW1vLWNvbnRyYXN0LTUwcGN0OiB2YXIoLS1sdW1vLXRpbnQtNTBwY3QpO1xuICAgICAgICAtLWx1bW8tY29udHJhc3QtNjBwY3Q6IHZhcigtLWx1bW8tdGludC02MHBjdCk7XG4gICAgICAgIC0tbHVtby1jb250cmFzdC03MHBjdDogdmFyKC0tbHVtby10aW50LTcwcGN0KTtcbiAgICAgICAgLS1sdW1vLWNvbnRyYXN0LTgwcGN0OiB2YXIoLS1sdW1vLXRpbnQtODBwY3QpO1xuICAgICAgICAtLWx1bW8tY29udHJhc3QtOTBwY3Q6IHZhcigtLWx1bW8tdGludC05MHBjdCk7XG4gICAgICAgIC0tbHVtby1jb250cmFzdDogdmFyKC0tbHVtby10aW50KTtcblxuICAgICAgICAvKiBUZXh0ICovXG4gICAgICAgIC0tbHVtby1oZWFkZXItdGV4dC1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdCk7XG4gICAgICAgIC0tbHVtby1ib2R5LXRleHQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtOTBwY3QpO1xuICAgICAgICAtLWx1bW8tc2Vjb25kYXJ5LXRleHQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtNzBwY3QpO1xuICAgICAgICAtLWx1bW8tdGVydGlhcnktdGV4dC1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdC01MHBjdCk7XG4gICAgICAgIC0tbHVtby1kaXNhYmxlZC10ZXh0LWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTMwcGN0KTtcblxuICAgICAgICAvKiBQcmltYXJ5ICovXG4gICAgICAgIC0tbHVtby1wcmltYXJ5LWNvbG9yOiBoc2woMjE0LCA4NiUsIDU1JSk7XG4gICAgICAgIC0tbHVtby1wcmltYXJ5LWNvbG9yLTUwcGN0OiBoc2xhKDIxNCwgODYlLCA1NSUsIDAuNSk7XG4gICAgICAgIC0tbHVtby1wcmltYXJ5LWNvbG9yLTEwcGN0OiBoc2xhKDIxNCwgOTAlLCA2MyUsIDAuMSk7XG4gICAgICAgIC0tbHVtby1wcmltYXJ5LXRleHQtY29sb3I6IGhzbCgyMTQsIDEwMCUsIDcwJSk7XG4gICAgICAgIC0tbHVtby1wcmltYXJ5LWNvbnRyYXN0LWNvbG9yOiAjRkZGO1xuXG4gICAgICAgIC8qIEVycm9yICovXG4gICAgICAgIC0tbHVtby1lcnJvci1jb2xvcjogaHNsKDMsIDkwJSwgNjMlKTtcbiAgICAgICAgLS1sdW1vLWVycm9yLWNvbG9yLTUwcGN0OiBoc2xhKDMsIDkwJSwgNjMlLCAwLjUpO1xuICAgICAgICAtLWx1bW8tZXJyb3ItY29sb3ItMTBwY3Q6IGhzbGEoMywgOTAlLCA2MyUsIDAuMSk7XG4gICAgICAgIC0tbHVtby1lcnJvci10ZXh0LWNvbG9yOiBoc2woMywgMTAwJSwgNjclKTtcblxuICAgICAgICAvKiBTdWNjZXNzICovXG4gICAgICAgIC0tbHVtby1zdWNjZXNzLWNvbG9yOiBoc2woMTQ1LCA2NSUsIDQyJSk7XG4gICAgICAgIC0tbHVtby1zdWNjZXNzLWNvbG9yLTUwcGN0OiBoc2xhKDE0NSwgNjUlLCA0MiUsIDAuNSk7XG4gICAgICAgIC0tbHVtby1zdWNjZXNzLWNvbG9yLTEwcGN0OiBoc2xhKDE0NSwgNjUlLCA0MiUsIDAuMSk7XG4gICAgICAgIC0tbHVtby1zdWNjZXNzLXRleHQtY29sb3I6IGhzbCgxNDUsIDg1JSwgNDclKTtcbiAgICAgIH1cblxuICAgICAgaHRtbCB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1sdW1vLWJvZHktdGV4dC1jb2xvcik7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tYmFzZS1jb2xvcik7XG4gICAgICB9XG5cbiAgICAgIFt0aGVtZX49ImRhcmsiXSB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1sdW1vLWJvZHktdGV4dC1jb2xvcik7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tYmFzZS1jb2xvcik7XG4gICAgICB9XG5cbiAgICAgIGgxLFxuICAgICAgaDIsXG4gICAgICBoMyxcbiAgICAgIGg0LFxuICAgICAgaDUsXG4gICAgICBoNiB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1sdW1vLWhlYWRlci10ZXh0LWNvbG9yKTtcbiAgICAgIH1cblxuICAgICAgYSB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1sdW1vLXByaW1hcnktdGV4dC1jb2xvcik7XG4gICAgICB9XG5cbiAgICAgIGJsb2NrcXVvdGUge1xuICAgICAgICBjb2xvcjogdmFyKC0tbHVtby1zZWNvbmRhcnktdGV4dC1jb2xvcik7XG4gICAgICB9XG5cbiAgICAgIGNvZGUsXG4gICAgICBwcmUge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTEwcGN0KTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbHVtby1ib3JkZXItcmFkaXVzLW0pO1xuICAgICAgfVxuICAgIDwvc3R5bGU+XG4gIDwvdGVtcGxhdGU+XG48L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9Imx1bW8tY29sb3ItbGVnYWN5Ij5cbiAgPHRlbXBsYXRlPlxuICAgIDxzdHlsZSBpbmNsdWRlPSJsdW1vLWNvbG9yIj5cbiAgICAgIDpob3N0IHtcbiAgICAgICAgY29sb3I6IHZhcigtLWx1bW8tYm9keS10ZXh0LWNvbG9yKSAhaW1wb3J0YW50O1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLWJhc2UtY29sb3IpICFpbXBvcnRhbnQ7XG4gICAgICB9XG4gICAgPC9zdHlsZT5cbiAgPC90ZW1wbGF0ZT5cbjwvZG9tLW1vZHVsZT4nLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoQlB0LmNvbnRlbnQpO2NvbnN0IEhQdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO0hQdC5pbm5lckhUTUw9JzxjdXN0b20tc3R5bGU+XG4gIDxzdHlsZT5cbiAgICBAZm9udC1mYWNlIHtcbiAgICAgIGZvbnQtZmFtaWx5OiBcJ2x1bW8taWNvbnNcJztcbiAgICAgIHNyYzogdXJsKGRhdGE6YXBwbGljYXRpb24vZm9udC13b2ZmO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdSZ0FCQUFBQUFCRWNBQXNBQUFBQUlpd0FBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCSFUxVkNBQUFCQ0FBQUFEc0FBQUJVSUlzbGVrOVRMeklBQUFGRUFBQUFRd0FBQUZaQUlVdUtZMjFoY0FBQUFZZ0FBQUQ0QUFBRHJzQ1U4ZDVuYkhsbUFBQUNnQUFBQzJNQUFCZDRoOVRvMldobFlXUUFBQTNrQUFBQU1BQUFBRFphLzZTc2FHaGxZUUFBRGhRQUFBQWRBQUFBSkFicEEzNW9iWFI0QUFBT05BQUFBQkFBQUFDc3BCQUFBR3h2WTJFQUFBNUVBQUFBV0FBQUFGaDU1SUFzYldGNGNBQUFEcHdBQUFBZkFBQUFJQUZLQVhCdVlXMWxBQUFPdkFBQUFURUFBQUl1VVVKWkNIQnZjM1FBQUEvd0FBQUJLd0FBQWVsbThTelZlSnhqWUdSZ1lPQmlNR0N3WTJCeWNmTUpZZURMU1N6Slk1QmlZR0dBQUpBOE1wc3hKek05a1lFRHhnUEtzWUJwRGlCbWc0Z0NBQ1k3QlVnQWVKeGpZR1MreURpQmdaV0JnYW1LYVE4REEwTVBoR1o4d0dESXlBUVVaV0JsWnNBS0F0SmNVeGdjWGpHKzBtSU8rcC9GRU1VY3hEQU5LTXdJa2dNQUJuOE1MUUI0bk8zU1dXNkRNQUJGMFV0d0NFbklQTS96aExLOExxaGZYUnliU1AxNFhVWXRIVjloR1lRd1FCTklvM2NVSVBraFFlTTdyaWIxZWtxblhnOTgxWHVDMXF2eTg0bHpvamxlaDNwdXhMMGhQakdqUlU0NzN0ZWxvRWVmQVVOR2pKa3daY2FjQlV0V3JObXdaY2VlQTBkT25MbHc1Y2FkQjA5ZWxQR2hHZitqME5USS82NUtmWGVyVDZKaHFLbnBSS3RnT3B1cWFUcnRLalBVbHFIbWh0bzIxSTdwTDZpNmhscVkzcTdxR1dyZlVBZUdPalRVa2FHT0RYVmlxRk5EblJucTNGQVhocm8wMUpXaHJnMTFZNmhiUTkwWjZ0NVFENFo2Tk5TVG9aNE45V0tvVjBPOUdlcmRVQitHK2pUVWw2R1dSdmtMMjRCa0VYaWN0Vmg5YkZ2VkZiL254dmJ6KzdSZi9ONnpIY2QyYkNmUCtXZ2MxWjlOMGpwTm5FTDZrYlJWUzZIQTJoUVlHaDlUR1IxQ2JDcWEyclhyV09rUUUvc0hOSmdtdFp2b1ZOWnFFMUIxRE5IeHpUUXhDZWhVVFlpSlRReUVOdWkwcVNMZXpyM1BkdXlRZmdtUldPZmRlOCs5NTUxejdybm4vTzRqTG9KL2JSUDBVYUtRTUxGSmpwQkF2cGhMWkMzRGswb2s3V0J6UjIvdXBKczdSeXcvbmZGYmxuL3V1Ti9hcEN2d3JLTHJTdlVxUnVmYm01cG4wZnMwdzRnWXhuR1ZQNnFIbk80YldpRFFHUWd3dFM2bG0zbEIzUW9YMU0ydndFbXV6aXJGMzl5K0VzMitESjhkMXBreXFCSXFvemUzRDErWno0RHJGb2F6eEk4ZFd3TXJEbFoyRE1xUUFSOUFST3NKVSsyY21sVFBhelRjbzUyRjF4VGEyYTIrSzh2dnE5MmRWSG10TG9QZVFYL0FaUFJZR3RoRFlPZVpqQmpLb0ZzVkd1bFIzbFdVOTVXZUNLNDRxSFU3TWhXVUdVS1pEVDNvS1VjRzJHV3VoK0VERGZVWUEvamhBaGwwVE9zSk5ZU0V1N21RbWkzVXpmWHdaS0E0QnNWc0hMWFFZR2dSVzk1dUV0cEoxVmZuOVhpTHJpUkJsRkVxeHNEakEwOXlDTlVvUXh4d2Q3S1dTVHQyeTNHVEtpZmxxSFJTb1daYzNtMTFXYS9mSmRGZ1hENHNTWWZsZUpCS2Q4R016N0o4ZFpuL2NHUkNjS0dEbkEyR2UzZkt6Y3ZsblRETnRoR1dMWHpYL1dhWHRVQW1SZ2VMbEhTcjMwcjBHOVVUWE1iMEF0bXd6T295NzNma1NsSFprZHV3L1RZdVU5Y0FENFl1dFBveFRUc0EzNzk3d1ZyNFovMU5DNXpBUkhyNHZ0eEpqeElmaVpNaE1rYldrKzE0Qm5KWkt3cUdad0Rmc3dMeXhXRFNnMTFyRkxKRjdOb3B4amQxaDEvUU9UK29lemdmdTNZcStIaytkdWY1eCs0MG8xR1RrYUlnaWtLL0lFbkM2YVl4Q1VCYVpKU040WFRZRmpVL1lNTklLcUp3aERHT0NDSThGRFhuWG1YanRHaEdKeVNocWpBT25CT2tXMkpHOVM3R2dZZU1XQVU1SnpobldtQk9hT00rQ0tFUG9xU2ZGREMyVW5xK0RMbFVnVVZVRkZMWkdKZzZqdGxvanNkc2E4a1BPYlB1SmRpNWRuQmRCc0xKTUdUV0RhNHQySnZ0d3VQbzlzK1k4NnN1di9XMzNRRzFyQWFPQVVWK3Z4NEs2ZjJEMDRQVktsQzdXTFNyWnpBaTQ1WlY2bElDN1dvWHFtUnl2VXFvVndyelVvVnNJamVUWFdRditSSDVHVGxCWGlCL0luOGxuMEliQkNBRk9hakFKcmdaWXlPSFdxT2ZVZS9hSGpJMTJSNk9RbzFqQ2d0MjE1bCs0ZjZYUGIrME1Ob3UwVis0M24yRjc3dFNmUmIyNGQ3eml0Z25LbXZZSHM2OXp1Z2FQdkJ3djZpb1hrYjJMZEw2NUF0dzUxdUxrWGx1MWJoTU1SY1hTUGNZb3FLSVJsaDM0bFFQOC81SmJ1VUZ5ZTR2eEQ2LzZNeEZGMTFDMHVWTHI5VWxndzQ0dFMzcE1WaU5MVUV4YnljRmdMSWN0K1FETWliUmlteDF5ZFV6OEZYWml1T0lEQk9NVlgyblVaYytodU5FNVhVSjgxdWlKb2lhYndxYVZGMHVhY0tiYXUvcGw0UjJWVzBYWGxKcmE2Ym9WcllHNjQ2VEY1Tll6d3k0dmpFTlZyRGxjTnBaUGw4REg2WFg4WFdDeDBtdldWWlk2S0ZMcnZzWTY2L3pQaWN0NUZueGFOVVIvanV2WkNNM1R2RDYwRTJXMXRaaXpiWFRQRHVhYmNtMG5iYnpwV0twbUExYXlCUThnaWVkTFVNK0Ewa05qQmpRam11WXo3WXJnSVhZdm1GNjNaTEJ3U1hycG45VGI5d3dkZC9VMUgwUE1RSzNYY084dWwzV1Q3UHlQUGRweTBUZW1LeE5SY0pOYXVpWEpublVEcFVwcFFXczRTblVJeTBFRVNHWXFKWVFMR0h4emFHV3dWSWFTNlk3bVFGTThaallEUTNheGpmNjFTV2pVMzNKd09aQTFwd2FHMUw5bXpmNzFhSFJkWDFKSHc2RnAwYVhoTndicXllR05nNE5iZHpHQ0J4b3o0WlhqeTROdTY5WnI2c0RZNnZNckxVNW5BMVA4SmtiZFdYSjZFUmZNcnl2TmgxSmZROStUNGRJaEd2Szl3M2R4akJCemF0c1EvTWxPSFZJRG5ZcER6Nm9kQVhsUTAxdDJQYTVJYWZkOE1NcHhBZURLUDBDNkNqZ1ZMVDVvc0I2aWNVeDAxbFdqWHh6VC9HeVJGMndlbEVNNVovN2pHM1ZqUTFTck5uNUlieXpPRzVkb2JCMy9RSHh5WnZzWGNvejhJb0V3UzdwbENnK3p4SFFrNDI0cTlCZkVwa0VTSmJGSFF1c0RCU1dGa3VCa29QTzBrTEt3UlZZanhHWGxIVGNURFFNSi9INlRYOWFma083bW5yYVRPMWZlVG5aQVhMdTRjcDdIQVhNbU5HMXllRms5VGdTL05IaFpSLzRRb0JUci9aQis2aENneWwxNU5xMVViTjZuRTEvWm5QMVUyY2l6Q0JwdnM4Y0pRWko0TGtZeDVOL3laUEFVWk5RUTBWNGYzQlFsbFdySzNZUnpsMzBkT1Q2UlZuMnVwTnVyNndvU2E4Q3FwZFQvYUtuQk00bzNqTnVyOWQ5eHF0VVQ2dmVCRXQ5Q2E5YXQrRVJ6RUVoVWtSOHNhNW1RNGFWdkpvVmVFQTh6STRlaTVtVUxYRkd5VTd6LzZUQWVZTFZjcHpTV1pZOFBZWUY1eXJUVjYwc1QwK1hWMTQxdlgrK1dmMTZWMmJGZUdWUFpYeEZwa3Z5ZUtUV0xsemZXMG1uS3hzWTZZMzI5NC8wOTk4U0NmWDFibG01cGJjdkZHbHEvcjA3TVJBTWhZSURpVzVKRktXVzN2ZHJFcENzWlNKRytvbTdadS9QU1NjWkpoTmtMYm1XNVdzcjEycFdxVzV6S3Rsd1JTNGJGT3hVdzE3bUN6eTZsc2tDRGwxV1lPR1dEWXJBRHJNQTdCRER3ZVdXTmQ1a29pSm5SMWR6K3l0TFAycTBTcVBCMWxuSzJjY0I3UlllNEZTb1BrczNpQjN0NHR4VFNIY3RiMnN5MWl2azBwdkh1Q05tNncxZjZ3eHYzK09DZ043OExxZFFuVVZoN1Iwb1RBcDB6T2YycmJXNzcwVnU1QzJkSXlHZFRuSG84elNqaTdkcHBqMFVTb1ZDeitsaFJNVGg1M1RlcTlWYkdmYmp1U2JBb29TZFhheVk0UFlIZzM3NEM2ZjdnbDFCL0RYdUo0L1FYeE9CZEpGSnNwRnNJM2VncG9XVVVDamxUSUZuTllObCtaeVpLbUJlWUtHSGtEMVF5RGxoYUtiS3dLY0lKcUo0VExKMk9tZFkvSldYYWU0RGRHQnc4SFo3ZVhjZ0ZGMnpyMlNvYWxEcnk1aUtxb2EwUHVoZTNoUFEyczNlbFRZTStNSStuM3JLMEtnTDcvTGEzR2VNTHQ2bTd1OTEydkdudnRPUmlJYTBxQm1ocVZpK1hXOVhOQm1xYjhlVmdLeklIZkdJNWJOb0c3WDBVQ3plSVNtcUljTy9uWThGSDdVOGF2WDlmeC9TVCtoeDBzZXpQdzlReThNdW0zR1dmMk40VXkveUlZR1ZCWGJKSFdJWnA3ZGZUY3B0ZE1UcjlRbXE3RGFpSy91a3FDTDRrdDRSVWZTNVhQbk10bVQyMi9tUUZxRjdlbVNxdHJsdThTVkVseERSSnJaT0RrcHV3ZTBWZlRmamRFcDFmN0E3ditmb3pOQlhVSi82V1R1SzJUdEZscEZWWkFaM0xjRnZVaTFaMnAyWVQrRU1Ba0dKVlN0T3pMVEFQZzRJcVdJQWx6UlNqT0JrbDJ6eGozVEt5Y3B6VC9NbnZYM3VhU01XTStnVTBya1hqb2hoZWZWUk1hcHMzL2tMTVNLdjIzbFQyM3V4UXJrUWp5T0psZU1Ec2RoQW5ENlpHRWxXWjVNakNYekNFL2hrV1grV0Y0a256R2hWT3lLMmVRWmVrVjNleW8wekw4a3VZV0NuREN2ampoQWtjVFBPQkRYVmRvYXYzSFZjRm5Rakx2dFY5UzJwMHpBNkplZ1B3TVF4dCt5RmIzbGw5ekdscS81ZFJLYjNjRXlRWW9hTllwaGFySjd4Q0I3QVd4c0xZM2pqWlhZMFhzWmowV2p3YzlJNlBQL2RLQUJuQ1phcUhwYVpFQUN4azRaZUxaU0tOZ1pBQmwrbFlRWDFzSlFPU1gzbjZyNDEwZXZjb3VkNUplQUdVWFZQOUgxdFpPS2VqVHE0T25vMHowZXJybzFGcm5PcG9odmExZC9oVGR0VnNRZEtONVc5UmxUM05qRDBuem55S05UZ0tBTWZXTldjeW9kVjBJR0xQSUhPRjBvNEp5cXVmYUs0ejZXSUl6dUdoM2Q4Yzhjd1FnOEVSK09WeHlyamRtOHZOdWh0czRMb09paEd4SU11VWRnendpWU43eGhoMStvWm5KTnVURzdnUVp2dTRYV1o5R0FaWmpHRXVid2VQcVlodEtEVEgrOVZRa2wxNy9pR3lic25KKzgrc0t0eVByY2xsOXR5NjVac2RzdC85aXFwRUtoN001VmRCeGgzY3NPZE5jNnRXM0kxdXlNMVB6T1hlZ1NPckxGc0ZOSTJPMjdNK1RGMkFwbk45TVV2NXVkNkxqeEl2RVFuSFJ6eEl1NElzQTlNTEZrSm4ydGNab1o3T043ZFhlN3VqcmM4SHJ1c1BLYW1scVh3ZDc3bFFVdUxwaWxhdTRQVU1hcHVlQmI3aXJVNFJvVVhFWVh1VnVJR2xSR21PcCsybE5rYVJQVnppT3FtbGFadmFxRzRkRmdTajBqeEVKV3J2MTJJVVdudG13K3JmUWFyUkUwQXBoNG9jSTZubFVsR3FzK3UzLytUL2V0aFc2MlBwSHAyZUhiWnN0bmgvd09POTV5REFIaWNZMkJrWUdBQTRwbUo2UUh4L0RaZkdiaVpYd0JGR0dwVU56UWk2UCt2bWFjeTNRSnlPUmlZUUtJQU5vVUxWWGljWTJCa1lHQU8rcDhGSkY4d0FBSHpWQVpHQmxTZ0RRQlc5Z052QUFBQWVKeGpZR0JnWUg0eE5EQUF6d1FtandBQUFBQUFUZ0NhQU9nQkNnRXNBVTRCY0FHYUFjUUI3Z0lhQXB3QzZBU2FCTHdFMWdUeUJRNEZLZ1Y2QmRBRi9nWkVCbVlHdGdjWUI1QUlHQWhTQ0dvSS9nbEdDYjRKMmdvRUNqd0tnZ3E0Q3ZBTFVBdVdDN3g0bkdOZ1pHQmcwR1pNWVJCbEFBRW1JT1lDUWdhRy8yQStBd0FZbEFHOEFIaWNiWkU5VHNNd0dJYmY5QS9SU2dnRVltSHhBZ3RxK2pOMlpHajNEdDNUMUdsVE9YSGt1Qlc5QXlmZ0VCeUNnVE53Q0E3QlcvTkpsVkJ0eWQvangrOFhLd21BYTN3aHduRkU2SWIxT0JxNDRPNlBtNlFiNFJiNVFiaU5IaDZGTy9SRDRTNmVNUkh1NFJhYVQ0aGFselIzZUJWdTRBcHZ3azM2ZCtFVytVTzRqWHQ4Q25mb3Y0VzdXT0JIdUllbjZNWHNDdHZQVTF2V2M3M2VtY1NkeElrVzJ0VzVMZFVvSHA3a1RKZmFKVjZ2MVBLZzZ2MTY3SDJtTW1jTE5iV2wxOFpZVlRtNzFhbVBOOTVYazhFZ0V4K250b0RCRGdVcytzaVJzcGFvTWVmN3J1a05Fcml6aVhOdXdTN0htb2U5d2dneHYrZTU1SXpKTXFRVGVOWVYwMHNjdU5iWTgrWXhyVWZHZmNhTVpiL0NOUFFlMDRiVDBsVGhiRXVUMHNmWWhLNksvMjNBbWYzTHgrSDI0aGNqNEdTY0FBQUFlSnh0anRsdWd6QVFSYmtKVUVKSXV1Lzd2cVI4bEdOUEFjV3gwWUFiNWUvTGtsUjk2RWdlblN1ZkdZMDM4UHFLdmY5cmhnR0c4QkVneEE0aWpCQmpqQVFUVExHTFBlempBSWM0d2pGT2NJb3puT01DbDdqQ05XNXdpenZjNHdHUGVNSXpYdkNLTjd6akF6Tjhlb25RUldaU1NhWW1qdnVnNmFzZTk4aEZsdGV4TUptbVZObVYyV0J2ZE5nWlVjK3VqQVd6WFczVURudTF3NDNhc1N0SGM4R3B6QVhYL3B5MGpxVFFaSlRna2N4SkxwYUNGMGxEMzJ4TnQrNDN0QXNuMjlEZnQwMnVES1MyY2pHVU5nc2syNnFLMmxGdGhZb1UyN0lOUHFtaURxZzVnb2UwcHFSNXFTb3FNZGVrL0NVWkZ5d0w0NnJFc2lJbWxlcWlxb015dDRiYVhsdS8xR0xkTkZmNXpiY05tZHIxWVVXQ1plNDdvK3pVbWIvRG9TdGJ3M2NWc2VmOUFMamppUFFBKSBmb3JtYXQoXCd3b2ZmXCcpO1xuICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICB9XG5cbiAgICBodG1sIHtcbiAgICAgIC0tbHVtby1pY29ucy1hbGlnbi1jZW50ZXI6ICJcXGVhMDEiO1xuICAgICAgLS1sdW1vLWljb25zLWFsaWduLWxlZnQ6ICJcXGVhMDIiO1xuICAgICAgLS1sdW1vLWljb25zLWFsaWduLXJpZ2h0OiAiXFxlYTAzIjtcbiAgICAgIC0tbHVtby1pY29ucy1hbmdsZS1kb3duOiAiXFxlYTA0IjtcbiAgICAgIC0tbHVtby1pY29ucy1hbmdsZS1sZWZ0OiAiXFxlYTA1IjtcbiAgICAgIC0tbHVtby1pY29ucy1hbmdsZS1yaWdodDogIlxcZWEwNiI7XG4gICAgICAtLWx1bW8taWNvbnMtYW5nbGUtdXA6ICJcXGVhMDciO1xuICAgICAgLS1sdW1vLWljb25zLWFycm93LWRvd246ICJcXGVhMDgiO1xuICAgICAgLS1sdW1vLWljb25zLWFycm93LWxlZnQ6ICJcXGVhMDkiO1xuICAgICAgLS1sdW1vLWljb25zLWFycm93LXJpZ2h0OiAiXFxlYTBhIjtcbiAgICAgIC0tbHVtby1pY29ucy1hcnJvdy11cDogIlxcZWEwYiI7XG4gICAgICAtLWx1bW8taWNvbnMtYmFyLWNoYXJ0OiAiXFxlYTBjIjtcbiAgICAgIC0tbHVtby1pY29ucy1iZWxsOiAiXFxlYTBkIjtcbiAgICAgIC0tbHVtby1pY29ucy1jYWxlbmRhcjogIlxcZWEwZSI7XG4gICAgICAtLWx1bW8taWNvbnMtY2hlY2ttYXJrOiAiXFxlYTBmIjtcbiAgICAgIC0tbHVtby1pY29ucy1jaGV2cm9uLWRvd246ICJcXGVhMTAiO1xuICAgICAgLS1sdW1vLWljb25zLWNoZXZyb24tbGVmdDogIlxcZWExMSI7XG4gICAgICAtLWx1bW8taWNvbnMtY2hldnJvbi1yaWdodDogIlxcZWExMiI7XG4gICAgICAtLWx1bW8taWNvbnMtY2hldnJvbi11cDogIlxcZWExMyI7XG4gICAgICAtLWx1bW8taWNvbnMtY2xvY2s6ICJcXGVhMTQiO1xuICAgICAgLS1sdW1vLWljb25zLWNvZzogIlxcZWExNSI7XG4gICAgICAtLWx1bW8taWNvbnMtY3Jvc3M6ICJcXGVhMTYiO1xuICAgICAgLS1sdW1vLWljb25zLWRvd25sb2FkOiAiXFxlYTE3IjtcbiAgICAgIC0tbHVtby1pY29ucy1kcm9wZG93bjogIlxcZWExOCI7XG4gICAgICAtLWx1bW8taWNvbnMtZWRpdDogIlxcZWExOSI7XG4gICAgICAtLWx1bW8taWNvbnMtZXJyb3I6ICJcXGVhMWEiO1xuICAgICAgLS1sdW1vLWljb25zLWV5ZTogIlxcZWExYiI7XG4gICAgICAtLWx1bW8taWNvbnMtZXllLWRpc2FibGVkOiAiXFxlYTFjIjtcbiAgICAgIC0tbHVtby1pY29ucy1tZW51OiAiXFxlYTFkIjtcbiAgICAgIC0tbHVtby1pY29ucy1taW51czogIlxcZWExZSI7XG4gICAgICAtLWx1bW8taWNvbnMtb3JkZXJlZC1saXN0OiAiXFxlYTFmIjtcbiAgICAgIC0tbHVtby1pY29ucy1waG9uZTogIlxcZWEyMCI7XG4gICAgICAtLWx1bW8taWNvbnMtcGhvdG86ICJcXGVhMjEiO1xuICAgICAgLS1sdW1vLWljb25zLXBsYXk6ICJcXGVhMjIiO1xuICAgICAgLS1sdW1vLWljb25zLXBsdXM6ICJcXGVhMjMiO1xuICAgICAgLS1sdW1vLWljb25zLXJlZG86ICJcXGVhMjQiO1xuICAgICAgLS1sdW1vLWljb25zLXJlbG9hZDogIlxcZWEyNSI7XG4gICAgICAtLWx1bW8taWNvbnMtc2VhcmNoOiAiXFxlYTI2IjtcbiAgICAgIC0tbHVtby1pY29ucy11bmRvOiAiXFxlYTI3IjtcbiAgICAgIC0tbHVtby1pY29ucy11bm9yZGVyZWQtbGlzdDogIlxcZWEyOCI7XG4gICAgICAtLWx1bW8taWNvbnMtdXBsb2FkOiAiXFxlYTI5IjtcbiAgICAgIC0tbHVtby1pY29ucy11c2VyOiAiXFxlYTJhIjtcbiAgICB9XG4gIDwvc3R5bGU+XG48L2N1c3RvbS1zdHlsZT4nLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoSFB0LmNvbnRlbnQpO2NvbnN0IEZQdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO0ZQdC5pbm5lckhUTUw9IjxjdXN0b20tc3R5bGU+XG4gIDxzdHlsZT5cbiAgICBodG1sIHtcbiAgICAgIC0tbHVtby1zaXplLXhzOiAxLjYyNXJlbTtcbiAgICAgIC0tbHVtby1zaXplLXM6IDEuODc1cmVtO1xuICAgICAgLS1sdW1vLXNpemUtbTogMi4yNXJlbTtcbiAgICAgIC0tbHVtby1zaXplLWw6IDIuNzVyZW07XG4gICAgICAtLWx1bW8tc2l6ZS14bDogMy41cmVtO1xuXG4gICAgICAvKiBJY29ucyAqL1xuICAgICAgLS1sdW1vLWljb24tc2l6ZS1zOiAxLjI1ZW07XG4gICAgICAtLWx1bW8taWNvbi1zaXplLW06IDEuNWVtO1xuICAgICAgLS1sdW1vLWljb24tc2l6ZS1sOiAyLjI1ZW07XG4gICAgICAvKiBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgKi9cbiAgICAgIC0tbHVtby1pY29uLXNpemU6IHZhcigtLWx1bW8taWNvbi1zaXplLW0pO1xuICAgIH1cbiAgPC9zdHlsZT5cbjwvY3VzdG9tLXN0eWxlPiIsZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChGUHQuY29udGVudCk7Y29uc3QgVlB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7VlB0LmlubmVySFRNTD0iPGN1c3RvbS1zdHlsZT5cbiAgPHN0eWxlPlxuICAgIGh0bWwge1xuICAgICAgLyogU3F1YXJlICovXG4gICAgICAtLWx1bW8tc3BhY2UteHM6IDAuMjVyZW07XG4gICAgICAtLWx1bW8tc3BhY2UtczogMC41cmVtO1xuICAgICAgLS1sdW1vLXNwYWNlLW06IDFyZW07XG4gICAgICAtLWx1bW8tc3BhY2UtbDogMS41cmVtO1xuICAgICAgLS1sdW1vLXNwYWNlLXhsOiAyLjVyZW07XG5cbiAgICAgIC8qIFdpZGUgKi9cbiAgICAgIC0tbHVtby1zcGFjZS13aWRlLXhzOiBjYWxjKHZhcigtLWx1bW8tc3BhY2UteHMpIC8gMikgdmFyKC0tbHVtby1zcGFjZS14cyk7XG4gICAgICAtLWx1bW8tc3BhY2Utd2lkZS1zOiBjYWxjKHZhcigtLWx1bW8tc3BhY2UtcykgLyAyKSB2YXIoLS1sdW1vLXNwYWNlLXMpO1xuICAgICAgLS1sdW1vLXNwYWNlLXdpZGUtbTogY2FsYyh2YXIoLS1sdW1vLXNwYWNlLW0pIC8gMikgdmFyKC0tbHVtby1zcGFjZS1tKTtcbiAgICAgIC0tbHVtby1zcGFjZS13aWRlLWw6IGNhbGModmFyKC0tbHVtby1zcGFjZS1sKSAvIDIpIHZhcigtLWx1bW8tc3BhY2UtbCk7XG4gICAgICAtLWx1bW8tc3BhY2Utd2lkZS14bDogY2FsYyh2YXIoLS1sdW1vLXNwYWNlLXhsKSAvIDIpIHZhcigtLWx1bW8tc3BhY2UteGwpO1xuXG4gICAgICAvKiBUYWxsICovXG4gICAgICAtLWx1bW8tc3BhY2UtdGFsbC14czogdmFyKC0tbHVtby1zcGFjZS14cykgY2FsYyh2YXIoLS1sdW1vLXNwYWNlLXhzKSAvIDIpO1xuICAgICAgLS1sdW1vLXNwYWNlLXRhbGwtczogdmFyKC0tbHVtby1zcGFjZS1zKSBjYWxjKHZhcigtLWx1bW8tc3BhY2UtcykgLyAyKTtcbiAgICAgIC0tbHVtby1zcGFjZS10YWxsLW06IHZhcigtLWx1bW8tc3BhY2UtbSkgY2FsYyh2YXIoLS1sdW1vLXNwYWNlLW0pIC8gMik7XG4gICAgICAtLWx1bW8tc3BhY2UtdGFsbC1sOiB2YXIoLS1sdW1vLXNwYWNlLWwpIGNhbGModmFyKC0tbHVtby1zcGFjZS1sKSAvIDIpO1xuICAgICAgLS1sdW1vLXNwYWNlLXRhbGwteGw6IHZhcigtLWx1bW8tc3BhY2UteGwpIGNhbGModmFyKC0tbHVtby1zcGFjZS14bCkgLyAyKTtcbiAgICB9XG4gIDwvc3R5bGU+XG48L2N1c3RvbS1zdHlsZT4iLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoVlB0LmNvbnRlbnQpO2NvbnN0IFVQdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO1VQdC5pbm5lckhUTUw9IjxjdXN0b20tc3R5bGU+XG4gIDxzdHlsZT5cbiAgICBodG1sIHtcbiAgICAgIC8qIEJvcmRlciByYWRpdXMgKi9cbiAgICAgIC0tbHVtby1ib3JkZXItcmFkaXVzLXM6IDAuMjVlbTsgLyogQ2hlY2tib3gsIGJhZGdlLCBkYXRlLXBpY2tlciB5ZWFyIGluZGljYXRvciwgZXRjICovXG4gICAgICAtLWx1bW8tYm9yZGVyLXJhZGl1cy1tOiB2YXIoLS1sdW1vLWJvcmRlci1yYWRpdXMsIDAuMjVlbSk7IC8qIEJ1dHRvbiwgdGV4dCBmaWVsZCwgbWVudSBvdmVybGF5LCBldGMgKi9cbiAgICAgIC0tbHVtby1ib3JkZXItcmFkaXVzLWw6IDAuNWVtOyAvKiBEaWFsb2csIG5vdGlmaWNhdGlvbiwgZXRjICovXG4gICAgICAtLWx1bW8tYm9yZGVyLXJhZGl1czogMC4yNWVtOyAvKiBEZXByZWNhdGVkICovXG5cbiAgICAgIC8qIFNoYWRvdyAqL1xuICAgICAgLS1sdW1vLWJveC1zaGFkb3cteHM6IDAgMXB4IDRweCAtMXB4IHZhcigtLWx1bW8tc2hhZGUtNTBwY3QpO1xuICAgICAgLS1sdW1vLWJveC1zaGFkb3ctczogMCAycHggNHB4IC0xcHggdmFyKC0tbHVtby1zaGFkZS0yMHBjdCksIDAgM3B4IDEycHggLTFweCB2YXIoLS1sdW1vLXNoYWRlLTMwcGN0KTtcbiAgICAgIC0tbHVtby1ib3gtc2hhZG93LW06IDAgMnB4IDZweCAtMXB4IHZhcigtLWx1bW8tc2hhZGUtMjBwY3QpLCAwIDhweCAyNHB4IC00cHggdmFyKC0tbHVtby1zaGFkZS00MHBjdCk7XG4gICAgICAtLWx1bW8tYm94LXNoYWRvdy1sOiAwIDNweCAxOHB4IC0ycHggdmFyKC0tbHVtby1zaGFkZS0yMHBjdCksIDAgMTJweCA0OHB4IC02cHggdmFyKC0tbHVtby1zaGFkZS00MHBjdCk7XG4gICAgICAtLWx1bW8tYm94LXNoYWRvdy14bDogMCA0cHggMjRweCAtM3B4IHZhcigtLWx1bW8tc2hhZGUtMjBwY3QpLCAwIDE4cHggNjRweCAtOHB4IHZhcigtLWx1bW8tc2hhZGUtNDBwY3QpO1xuXG4gICAgICAvKiBDbGlja2FibGUgZWxlbWVudCBjdXJzb3IgKi9cbiAgICAgIC0tbHVtby1jbGlja2FibGUtY3Vyc29yOiBkZWZhdWx0O1xuICAgIH1cbiAgPC9zdHlsZT5cbjwvY3VzdG9tLXN0eWxlPiIsZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChVUHQuY29udGVudCk7Y29uc3QgalB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7alB0LmlubmVySFRNTD0nPGN1c3RvbS1zdHlsZT5cbiAgPHN0eWxlPlxuICAgIGh0bWwge1xuICAgICAgLyogRm9udCBmYW1pbGllcyAqL1xuICAgICAgLS1sdW1vLWZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICJSb2JvdG8iLCAiU2Vnb2UgVUkiLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmLCAiQXBwbGUgQ29sb3IgRW1vamkiLCAiU2Vnb2UgVUkgRW1vamkiLCAiU2Vnb2UgVUkgU3ltYm9sIjtcblxuICAgICAgLyogRm9udCBzaXplcyAqL1xuICAgICAgLS1sdW1vLWZvbnQtc2l6ZS14eHM6IC43NXJlbTtcbiAgICAgIC0tbHVtby1mb250LXNpemUteHM6IC44MTI1cmVtO1xuICAgICAgLS1sdW1vLWZvbnQtc2l6ZS1zOiAuODc1cmVtO1xuICAgICAgLS1sdW1vLWZvbnQtc2l6ZS1tOiAxcmVtO1xuICAgICAgLS1sdW1vLWZvbnQtc2l6ZS1sOiAxLjEyNXJlbTtcbiAgICAgIC0tbHVtby1mb250LXNpemUteGw6IDEuMzc1cmVtO1xuICAgICAgLS1sdW1vLWZvbnQtc2l6ZS14eGw6IDEuNzVyZW07XG4gICAgICAtLWx1bW8tZm9udC1zaXplLXh4eGw6IDIuNXJlbTtcblxuICAgICAgLyogTGluZSBoZWlnaHRzICovXG4gICAgICAtLWx1bW8tbGluZS1oZWlnaHQteHM6IDEuMjU7XG4gICAgICAtLWx1bW8tbGluZS1oZWlnaHQtczogMS4zNzU7XG4gICAgICAtLWx1bW8tbGluZS1oZWlnaHQtbTogMS42MjU7XG4gICAgfVxuXG4gIDwvc3R5bGU+XG48L2N1c3RvbS1zdHlsZT48ZG9tLW1vZHVsZSBpZD0ibHVtby10eXBvZ3JhcGh5Ij5cbiAgPHRlbXBsYXRlPlxuICAgIDxzdHlsZT5cbiAgICAgIGh0bWwge1xuICAgICAgICBmb250LWZhbWlseTogdmFyKC0tbHVtby1mb250LWZhbWlseSk7XG4gICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tbHVtby1mb250LXNpemUsIHZhcigtLWx1bW8tZm9udC1zaXplLW0pKTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IHZhcigtLWx1bW8tbGluZS1oZWlnaHQtbSk7XG4gICAgICAgIC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTtcbiAgICAgICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gICAgICAgIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XG4gICAgICB9XG5cbiAgICAgIC8qIENhbuKAmXQgY29tYmluZSB3aXRoIHRoZSBhYm92ZSBzZWxlY3RvciBiZWNhdXNlIHRoYXQgZG9lc27igJl0IHdvcmsgaW4gYnJvd3NlcnMgd2l0aG91dCBuYXRpdmUgc2hhZG93IGRvbSAqL1xuICAgICAgOmhvc3Qge1xuICAgICAgICBmb250LWZhbWlseTogdmFyKC0tbHVtby1mb250LWZhbWlseSk7XG4gICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tbHVtby1mb250LXNpemUsIHZhcigtLWx1bW8tZm9udC1zaXplLW0pKTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IHZhcigtLWx1bW8tbGluZS1oZWlnaHQtbSk7XG4gICAgICAgIC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTtcbiAgICAgICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gICAgICAgIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XG4gICAgICB9XG5cbiAgICAgIHNtYWxsLFxuICAgICAgW3RoZW1lfj0iZm9udC1zaXplLXMiXSB7XG4gICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tbHVtby1mb250LXNpemUtcyk7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1sdW1vLWxpbmUtaGVpZ2h0LXMpO1xuICAgICAgfVxuXG4gICAgICBbdGhlbWV+PSJmb250LXNpemUteHMiXSB7XG4gICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tbHVtby1mb250LXNpemUteHMpO1xuICAgICAgICBsaW5lLWhlaWdodDogdmFyKC0tbHVtby1saW5lLWhlaWdodC14cyk7XG4gICAgICB9XG5cbiAgICAgIGgxLFxuICAgICAgaDIsXG4gICAgICBoMyxcbiAgICAgIGg0LFxuICAgICAgaDUsXG4gICAgICBoNiB7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1sdW1vLWxpbmUtaGVpZ2h0LXhzKTtcbiAgICAgICAgbWFyZ2luLXRvcDogMS4yNWVtO1xuICAgICAgfVxuXG4gICAgICBoMSB7XG4gICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tbHVtby1mb250LXNpemUteHh4bCk7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDAuNzVlbTtcbiAgICAgIH1cblxuICAgICAgaDIge1xuICAgICAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLXh4bCk7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDAuNWVtO1xuICAgICAgfVxuXG4gICAgICBoMyB7XG4gICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tbHVtby1mb250LXNpemUteGwpO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAwLjVlbTtcbiAgICAgIH1cblxuICAgICAgaDQge1xuICAgICAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLWwpO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAwLjVlbTtcbiAgICAgIH1cblxuICAgICAgaDUge1xuICAgICAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLW0pO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAwLjI1ZW07XG4gICAgICB9XG5cbiAgICAgIGg2IHtcbiAgICAgICAgZm9udC1zaXplOiB2YXIoLS1sdW1vLWZvbnQtc2l6ZS14cyk7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjAzZW07XG4gICAgICB9XG5cbiAgICAgIHAsXG4gICAgICBibG9ja3F1b3RlIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMC41ZW07XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDAuNzVlbTtcbiAgICAgIH1cblxuICAgICAgYSB7XG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICAgIH1cblxuICAgICAgYTpob3ZlciB7XG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICAgICAgfVxuXG4gICAgICBociB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBhbGlnbi1zZWxmOiBzdHJldGNoO1xuICAgICAgICBoZWlnaHQ6IDFweDtcbiAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICBtYXJnaW46IHZhcigtLWx1bW8tc3BhY2UtcykgY2FsYyh2YXIoLS1sdW1vLWJvcmRlci1yYWRpdXMtbSkgLyAyKTtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdC0xMHBjdCk7XG4gICAgICB9XG5cbiAgICAgIGJsb2NrcXVvdGUge1xuICAgICAgICBib3JkZXItbGVmdDogMnB4IHNvbGlkIHZhcigtLWx1bW8tY29udHJhc3QtMzBwY3QpO1xuICAgICAgfVxuXG4gICAgICBiLFxuICAgICAgc3Ryb25nIHtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIH1cblxuICAgICAgLyogUlRMIHNwZWNpZmljIHN0eWxlcyAqL1xuXG4gICAgICBibG9ja3F1b3RlW2Rpcj0icnRsIl0ge1xuICAgICAgICBib3JkZXItbGVmdDogbm9uZTtcbiAgICAgICAgYm9yZGVyLXJpZ2h0OiAycHggc29saWQgdmFyKC0tbHVtby1jb250cmFzdC0zMHBjdCk7XG4gICAgICB9XG5cbiAgICA8L3N0eWxlPlxuICA8L3RlbXBsYXRlPlxuPC9kb20tbW9kdWxlPicsZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChqUHQuY29udGVudCk7Y29uc3QgR1B0PV9lYDxkb20tbW9kdWxlIGlkPSJsdW1vLWNoZWNrYm94IiB0aGVtZS1mb3I9InZhYWRpbi1jaGVja2JveCI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlIGluY2x1ZGU9Imx1bW8tY2hlY2tib3gtc3R5bGUgbHVtby1jaGVja2JveC1lZmZlY3RzIj4KICAgICAgLyogSUUxMSBvbmx5ICovCiAgICAgIDo6LW1zLWJhY2tkcm9wLAogICAgICBbcGFydD0iY2hlY2tib3giXSB7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJsdW1vLWNoZWNrYm94LXN0eWxlIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50OwogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIH0KCiAgICAgIFtwYXJ0PSJsYWJlbCJdOm5vdChbZW1wdHldKSB7CiAgICAgICAgbWFyZ2luOiAwLjE4NzVlbSAwLjg3NWVtIDAuMTg3NWVtIDAuMzc1ZW07CiAgICAgIH0KCiAgICAgIFtwYXJ0PSJjaGVja2JveCJdIHsKICAgICAgICB3aWR0aDogY2FsYygxZW0gKyAycHgpOwogICAgICAgIGhlaWdodDogY2FsYygxZW0gKyAycHgpOwogICAgICAgIG1hcmdpbjogMC4xODc1ZW07CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWx1bW8tYm9yZGVyLXJhZGl1cy1zKTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTIwcGN0KTsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4ycyBjdWJpYy1iZXppZXIoLjEyLCAuMzIsIC41NCwgMiksIGJhY2tncm91bmQtY29sb3IgMC4xNXM7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjsKICAgICAgfQoKICAgICAgOmhvc3QoW2luZGV0ZXJtaW5hdGVdKSBbcGFydD0iY2hlY2tib3giXSwKICAgICAgOmhvc3QoW2NoZWNrZWRdKSBbcGFydD0iY2hlY2tib3giXSB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1wcmltYXJ5LWNvbG9yKTsKICAgICAgfQoKICAgICAgLyogTmVlZGVkIHRvIGFsaWduIHRoZSBjaGVja2JveCBuaWNlbHkgb24gdGhlIGJhc2VsaW5lICovCiAgICAgIFtwYXJ0PSJjaGVja2JveCJdOjpiZWZvcmUgewogICAgICAgIGNvbnRlbnQ6ICJcXDIwMDMiOwogICAgICB9CgogICAgICAvKiBDaGVja21hcmsgKi8KICAgICAgW3BhcnQ9ImNoZWNrYm94Il06OmFmdGVyIHsKICAgICAgICBjb250ZW50OiAiIjsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgd2lkdGg6IDA7CiAgICAgICAgaGVpZ2h0OiAwOwogICAgICAgIGJvcmRlcjogMCBzb2xpZCB2YXIoLS1sdW1vLXByaW1hcnktY29udHJhc3QtY29sb3IpOwogICAgICAgIGJvcmRlci13aWR0aDogMC4xODc1ZW0gMCAwIDAuMTg3NWVtOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogMCAwOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDAuODEyNWVtOwogICAgICAgIGxlZnQ6IDAuNWVtOwogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC41NSkgcm90YXRlKC0xMzVkZWcpOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjaGVja2VkXSkgW3BhcnQ9ImNoZWNrYm94Il06OmFmdGVyIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgIHdpZHRoOiAwLjYyNWVtOwogICAgICAgIGhlaWdodDogMS4wNjI1ZW07CiAgICAgIH0KCiAgICAgIC8qIEluZGV0ZXJtaW5hdGUgY2hlY2ttYXJrICovCgogICAgICA6aG9zdChbaW5kZXRlcm1pbmF0ZV0pIFtwYXJ0PSJjaGVja2JveCJdOjphZnRlciB7CiAgICAgICAgdHJhbnNmb3JtOiBub25lOwogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgdG9wOiA0NSU7CiAgICAgICAgaGVpZ2h0OiAxMCU7CiAgICAgICAgbGVmdDogMjIlOwogICAgICAgIHJpZ2h0OiAyMiU7CiAgICAgICAgd2lkdGg6IGF1dG87CiAgICAgICAgYm9yZGVyOiAwOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tcHJpbWFyeS1jb250cmFzdC1jb2xvcik7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjI1czsKICAgICAgfQoKICAgICAgLyogRm9jdXMgcmluZyAqLwoKICAgICAgOmhvc3QoW2ZvY3VzLXJpbmddKSBbcGFydD0iY2hlY2tib3giXSB7CiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgM3B4IHZhcigtLWx1bW8tcHJpbWFyeS1jb2xvci01MHBjdCk7CiAgICAgIH0KCiAgICAgIC8qIERpc2FibGVkICovCgogICAgICA6aG9zdChbZGlzYWJsZWRdKSB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgY29sb3I6IHZhcigtLWx1bW8tZGlzYWJsZWQtdGV4dC1jb2xvcik7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIFtwYXJ0PSJsYWJlbCJdIDo6c2xvdHRlZCgqKSB7CiAgICAgICAgY29sb3I6IGluaGVyaXQ7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIFtwYXJ0PSJjaGVja2JveCJdIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTEwcGN0KTsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgW3BhcnQ9ImNoZWNrYm94Il06OmFmdGVyIHsKICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtMzBwY3QpOwogICAgICB9CgogICAgICA6aG9zdChbaW5kZXRlcm1pbmF0ZV1bZGlzYWJsZWRdKSBbcGFydD0iY2hlY2tib3giXTo6YWZ0ZXIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtMzBwY3QpOwogICAgICB9CgogICAgICAvKiBSVEwgc3BlY2lmaWMgc3R5bGVzICovCgogICAgICA6aG9zdChbZGlyPSJydGwiXSkgW3BhcnQ9ImxhYmVsIl06bm90KFtlbXB0eV0pIHsKICAgICAgICBtYXJnaW46IDAuMTg3NWVtIDAuMzc1ZW0gMC4xODc1ZW0gMC44NzVlbTsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9Imx1bW8tY2hlY2tib3gtZWZmZWN0cyI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICAvKiBUcmFuc2l0aW9uIHRoZSBjaGVja21hcmsgaWYgYWN0aXZhdGVkIHdpdGggdGhlIG1vdXNlIChkaXNhYmxlZCBmb3IgZ3JpZCBzZWxlY3QtYWxsIHRoaXMgd2F5KSAqLwogICAgICA6aG9zdCg6aG92ZXIpIFtwYXJ0PSJjaGVja2JveCJdOjphZnRlciB7CiAgICAgICAgdHJhbnNpdGlvbjogd2lkdGggMC4xcywgaGVpZ2h0IDAuMjVzOwogICAgICB9CgogICAgICAvKiBVc2VkIGZvciBhY3RpdmF0aW9uICJoYWxvIiAqLwogICAgICBbcGFydD0iY2hlY2tib3giXTo6YmVmb3JlIHsKICAgICAgICBjb2xvcjogdHJhbnNwYXJlbnQ7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBib3JkZXItcmFkaXVzOiBpbmhlcml0OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IGluaGVyaXQ7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjQpOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMXMsIG9wYWNpdHkgMC44czsKICAgICAgfQoKICAgICAgLyogSG92ZXIgKi8KCiAgICAgIDpob3N0KDpub3QoW2NoZWNrZWRdKTpub3QoW2luZGV0ZXJtaW5hdGVdKTpub3QoW2Rpc2FibGVkXSk6aG92ZXIpIFtwYXJ0PSJjaGVja2JveCJdIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTMwcGN0KTsKICAgICAgfQoKICAgICAgLyogRGlzYWJsZSBob3ZlciBmb3IgdG91Y2ggZGV2aWNlcyAqLwogICAgICBAbWVkaWEgKHBvaW50ZXI6IGNvYXJzZSkgewogICAgICAgIDpob3N0KDpub3QoW2NoZWNrZWRdKTpub3QoW2luZGV0ZXJtaW5hdGVdKTpub3QoW2Rpc2FibGVkXSk6aG92ZXIpIFtwYXJ0PSJjaGVja2JveCJdIHsKICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtMjBwY3QpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLyogQWN0aXZlICovCgogICAgICA6aG9zdChbYWN0aXZlXSkgW3BhcnQ9ImNoZWNrYm94Il0gewogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC45KTsKICAgICAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjA1czsKICAgICAgfQoKICAgICAgOmhvc3QoW2FjdGl2ZV1bY2hlY2tlZF0pIFtwYXJ0PSJjaGVja2JveCJdIHsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMSk7CiAgICAgIH0KCiAgICAgIDpob3N0KFthY3RpdmVdOm5vdChbY2hlY2tlZF0pKSBbcGFydD0iY2hlY2tib3giXTo6YmVmb3JlIHsKICAgICAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjAxcywgMC4wMXM7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwKTsKICAgICAgICBvcGFjaXR5OiAwLjQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChHUHQuY29udGVudCk7Y29uc3QgV1B0PXQ9PmNsYXNzIGV4dGVuZHMgdHtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57dGhlbWU6e3R5cGU6U3RyaW5nLHJlYWRPbmx5OiEwfX19YXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHQsZSxuKXtzdXBlci5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sodCxlLG4pLCJ0aGVtZSI9PT10JiZ0aGlzLl9zZXRUaGVtZShuKX19LHFQdD10PT5jbGFzcyBleHRlbmRzKFdQdCh0KSl7c3RhdGljIGZpbmFsaXplKCl7c3VwZXIuZmluYWxpemUoKTtjb25zdCB0PXRoaXMucHJvdG90eXBlLl90ZW1wbGF0ZSxlPXRoaXMudGVtcGxhdGUmJnRoaXMudGVtcGxhdGUucGFyZW50RWxlbWVudCYmdGhpcy50ZW1wbGF0ZS5wYXJlbnRFbGVtZW50LmlkPT09dGhpcy5pcyxuPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzLnByb3RvdHlwZSkuX3RlbXBsYXRlO24mJiFlJiZBcnJheS5mcm9tKG4uY29udGVudC5xdWVyeVNlbGVjdG9yQWxsKCJzdHlsZVtpbmNsdWRlXSIpKS5mb3JFYWNoKChlPT57dGhpcy5faW5jbHVkZVN0eWxlKGUuZ2V0QXR0cmlidXRlKCJpbmNsdWRlIiksdCl9KSksdGhpcy5faW5jbHVkZU1hdGNoaW5nVGhlbWVzKHQpfXN0YXRpYyBfaW5jbHVkZU1hdGNoaW5nVGhlbWVzKHQpe2NvbnN0IGU9Qi5wcm90b3R5cGUubW9kdWxlcztsZXQgbj0hMTtjb25zdCBpPXRoaXMuaXMrIi1kZWZhdWx0LXRoZW1lIjtPYmplY3Qua2V5cyhlKS5zb3J0KCgodCxlKT0+e2NvbnN0IG49MD09PXQuaW5kZXhPZigidmFhZGluLSIpLGk9MD09PWUuaW5kZXhPZigidmFhZGluLSIpLHI9WyJsdW1vLSIsIm1hdGVyaWFsLSJdLG89ci5maWx0ZXIoKGU9PjA9PT10LmluZGV4T2YoZSkpKS5sZW5ndGg+MCxhPXIuZmlsdGVyKCh0PT4wPT09ZS5pbmRleE9mKHQpKSkubGVuZ3RoPjA7cmV0dXJuIG4hPT1pP24/LTE6MTpvIT09YT9vPy0xOjE6MH0pKS5mb3JFYWNoKChyPT57aWYociE9PWkpe2NvbnN0IGk9ZVtyXS5nZXRBdHRyaWJ1dGUoInRoZW1lLWZvciIpO2kmJmkuc3BsaXQoIiAiKS5mb3JFYWNoKChlPT57bmV3IFJlZ0V4cCgiXiIrZS5zcGxpdCgiKiIpLmpvaW4oIi4qIikrIiQiKS50ZXN0KHRoaXMuaXMpJiYobj0hMCx0aGlzLl9pbmNsdWRlU3R5bGUocix0KSl9KSl9fSkpLCFuJiZlW2ldJiZ0aGlzLl9pbmNsdWRlU3R5bGUoaSx0KX1zdGF0aWMgX2luY2x1ZGVTdHlsZSh0LGUpe2lmKGUmJiFlLmNvbnRlbnQucXVlcnlTZWxlY3Rvcihgc3R5bGVbaW5jbHVkZT0iJHt0fSJdYCkpe2NvbnN0IG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtuLnNldEF0dHJpYnV0ZSgiaW5jbHVkZSIsdCksZS5jb250ZW50LmFwcGVuZENoaWxkKG4pfX19Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBWYWFkaW4gTHRkLgogICAgVGhpcyBwcm9ncmFtIGlzIGF2YWlsYWJsZSB1bmRlciBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCwgYXZhaWxhYmxlIGF0IGh0dHBzOi8vdmFhZGluLmNvbS9saWNlbnNlLwogICAgKi87bGV0IFlQdD0hMTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsKCgpPT57WVB0PSEwfSkse2NhcHR1cmU6ITB9KSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwoKCk9PntZUHQ9ITF9KSx7Y2FwdHVyZTohMH0pO2NvbnN0IFhQdD10PT5jbGFzcyBleHRlbmRzKCh0PT5jbGFzcyBleHRlbmRzIHR7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7dmFyIHQ9e3RhYmluZGV4Ont0eXBlOk51bWJlcix2YWx1ZTowLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCxvYnNlcnZlcjoiX3RhYmluZGV4Q2hhbmdlZCJ9fTtyZXR1cm4gd2luZG93LlNoYWR5RE9NJiYodC50YWJJbmRleD10LnRhYmluZGV4KSx0fX0pKHQpKXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57YXV0b2ZvY3VzOnt0eXBlOkJvb2xlYW59LF9wcmV2aW91c1RhYkluZGV4Ont0eXBlOk51bWJlcn0sZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbixvYnNlcnZlcjoiX2Rpc2FibGVkQ2hhbmdlZCIscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxfaXNTaGlmdFRhYmJpbmc6e3R5cGU6Qm9vbGVhbn19fXJlYWR5KCl7dGhpcy5hZGRFdmVudExpc3RlbmVyKCJmb2N1c2luIiwodD0+e3QuY29tcG9zZWRQYXRoKClbMF09PT10aGlzP3RoaXMuY29udGFpbnModC5yZWxhdGVkVGFyZ2V0KXx8dGhpcy5fZm9jdXMoKTotMT09PXQuY29tcG9zZWRQYXRoKCkuaW5kZXhPZih0aGlzLmZvY3VzRWxlbWVudCl8fHRoaXMuZGlzYWJsZWR8fHRoaXMuX3NldEZvY3VzZWQoITApfSkpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNvdXQiLCh0PT50aGlzLl9zZXRGb2N1c2VkKCExKSkpLHN1cGVyLnJlYWR5KCk7Y29uc3QgdD10PT57dC5jb21wb3NlZHx8dC50YXJnZXQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQodC50eXBlLHtidWJibGVzOiEwLGNvbXBvc2VkOiEwLGNhbmNlbGFibGU6ITF9KSl9O3RoaXMuc2hhZG93Um9vdC5hZGRFdmVudExpc3RlbmVyKCJmb2N1c2luIix0KSx0aGlzLnNoYWRvd1Jvb3QuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNvdXQiLHQpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsKHQ9PntpZighdC5kZWZhdWx0UHJldmVudGVkJiY5PT09dC5rZXlDb2RlKWlmKHQuc2hpZnRLZXkpdGhpcy5faXNTaGlmdFRhYmJpbmc9ITAsSFRNTEVsZW1lbnQucHJvdG90eXBlLmZvY3VzLmFwcGx5KHRoaXMpLHRoaXMuX3NldEZvY3VzZWQoITEpLHNldFRpbWVvdXQoKCgpPT50aGlzLl9pc1NoaWZ0VGFiYmluZz0hMSksMCk7ZWxzZXtjb25zdCB0PXdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9GaXJlZm94XC8oXGRcZFwuXGQpLyk7aWYodCYmcGFyc2VGbG9hdCh0WzFdKT49NjMmJnBhcnNlRmxvYXQodFsxXSk8NjYmJnRoaXMucGFyZW50Tm9kZSYmdGhpcy5uZXh0U2libGluZyl7Y29uc3QgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO3Quc3R5bGUucG9zaXRpb249ImFic29sdXRlIix0LnN0eWxlLm9wYWNpdHk9IjAiLHQudGFiSW5kZXg9dGhpcy50YWJJbmRleCx0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHQsdGhpcy5uZXh0U2libGluZyksdC5mb2N1cygpLHQuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNvdXQiLCgoKT0+dGhpcy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpKSl9fX0pKSx0aGlzLmF1dG9mb2N1cyYmIXRoaXMuZGlzYWJsZWQmJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCgpPT57dGhpcy5fZm9jdXMoKSx0aGlzLl9zZXRGb2N1c2VkKCEwKSx0aGlzLnNldEF0dHJpYnV0ZSgiZm9jdXMtcmluZyIsIiIpfSkpfWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLmhhc0F0dHJpYnV0ZSgiZm9jdXNlZCIpJiZ0aGlzLl9zZXRGb2N1c2VkKCExKX1fc2V0Rm9jdXNlZCh0KXt0P3RoaXMuc2V0QXR0cmlidXRlKCJmb2N1c2VkIiwiIik6dGhpcy5yZW1vdmVBdHRyaWJ1dGUoImZvY3VzZWQiKSx0JiZZUHQ/dGhpcy5zZXRBdHRyaWJ1dGUoImZvY3VzLXJpbmciLCIiKTp0aGlzLnJlbW92ZUF0dHJpYnV0ZSgiZm9jdXMtcmluZyIpfWdldCBmb2N1c0VsZW1lbnQoKXtyZXR1cm4gd2luZG93LmNvbnNvbGUud2FybihgUGxlYXNlIGltcGxlbWVudCB0aGUgJ2ZvY3VzRWxlbWVudCcgcHJvcGVydHkgaW4gPCR7dGhpcy5sb2NhbE5hbWV9PmApLHRoaXN9X2ZvY3VzKCl7dGhpcy5mb2N1c0VsZW1lbnQmJiF0aGlzLl9pc1NoaWZ0VGFiYmluZyYmKHRoaXMuZm9jdXNFbGVtZW50LmZvY3VzKCksdGhpcy5fc2V0Rm9jdXNlZCghMCkpfWZvY3VzKCl7dGhpcy5mb2N1c0VsZW1lbnQmJiF0aGlzLmRpc2FibGVkJiYodGhpcy5mb2N1c0VsZW1lbnQuZm9jdXMoKSx0aGlzLl9zZXRGb2N1c2VkKCEwKSl9Ymx1cigpe3RoaXMuZm9jdXNFbGVtZW50JiYodGhpcy5mb2N1c0VsZW1lbnQuYmx1cigpLHRoaXMuX3NldEZvY3VzZWQoITEpKX1fZGlzYWJsZWRDaGFuZ2VkKHQpe3RoaXMuZm9jdXNFbGVtZW50LmRpc2FibGVkPXQsdD8odGhpcy5ibHVyKCksdGhpcy5fcHJldmlvdXNUYWJJbmRleD10aGlzLnRhYmluZGV4LHRoaXMudGFiaW5kZXg9LTEsdGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtZGlzYWJsZWQiLCJ0cnVlIikpOih2b2lkIDAhPT10aGlzLl9wcmV2aW91c1RhYkluZGV4JiYodGhpcy50YWJpbmRleD10aGlzLl9wcmV2aW91c1RhYkluZGV4KSx0aGlzLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1kaXNhYmxlZCIpKX1fdGFiaW5kZXhDaGFuZ2VkKHQpe3ZvaWQgMCE9PXQmJih0aGlzLmZvY3VzRWxlbWVudC50YWJJbmRleD10KSx0aGlzLmRpc2FibGVkJiZ0aGlzLnRhYmluZGV4JiYoLTEhPT10aGlzLnRhYmluZGV4JiYodGhpcy5fcHJldmlvdXNUYWJJbmRleD10aGlzLnRhYmluZGV4KSx0aGlzLnRhYmluZGV4PXQ9dm9pZCAwKSx3aW5kb3cuU2hhZHlET00mJnRoaXMuc2V0UHJvcGVydGllcyh7dGFiSW5kZXg6dCx0YWJpbmRleDp0fSl9Y2xpY2soKXt0aGlzLmRpc2FibGVkfHxzdXBlci5jbGljaygpfX0KLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDIwIFZhYWRpbiBMdGQuCiAgICBUaGlzIHByb2dyYW0gaXMgYXZhaWxhYmxlIHVuZGVyIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wLCBhdmFpbGFibGUgYXQgaHR0cHM6Ly92YWFkaW4uY29tL2xpY2Vuc2UvCiAgICAqLztjbGFzcyAkUHR7c3RhdGljIGRldGVjdFNjcm9sbFR5cGUoKXtjb25zdCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3QudGV4dENvbnRlbnQ9IkFCQ0QiLHQuZGlyPSJydGwiLHQuc3R5bGUuZm9udFNpemU9IjE0cHgiLHQuc3R5bGUud2lkdGg9IjRweCIsdC5zdHlsZS5oZWlnaHQ9IjFweCIsdC5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHQuc3R5bGUudG9wPSItMTAwMHB4Iix0LnN0eWxlLm92ZXJmbG93PSJzY3JvbGwiLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodCk7bGV0IGU9InJldmVyc2UiO3JldHVybiB0LnNjcm9sbExlZnQ+MD9lPSJkZWZhdWx0IjoodC5zY3JvbGxMZWZ0PTIsdC5zY3JvbGxMZWZ0PDImJihlPSJuZWdhdGl2ZSIpKSxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHQpLGV9c3RhdGljIGdldE5vcm1hbGl6ZWRTY3JvbGxMZWZ0KHQsZSxuKXtjb25zdHtzY3JvbGxMZWZ0Oml9PW47aWYoInJ0bCIhPT1lfHwhdClyZXR1cm4gaTtzd2l0Y2godCl7Y2FzZSJuZWdhdGl2ZSI6cmV0dXJuIG4uc2Nyb2xsV2lkdGgtbi5jbGllbnRXaWR0aCtpO2Nhc2UicmV2ZXJzZSI6cmV0dXJuIG4uc2Nyb2xsV2lkdGgtbi5jbGllbnRXaWR0aC1pfXJldHVybiBpfXN0YXRpYyBzZXROb3JtYWxpemVkU2Nyb2xsTGVmdCh0LGUsbixpKXtpZigicnRsIj09PWUmJnQpc3dpdGNoKHQpe2Nhc2UibmVnYXRpdmUiOm4uc2Nyb2xsTGVmdD1uLmNsaWVudFdpZHRoLW4uc2Nyb2xsV2lkdGgraTticmVhaztjYXNlInJldmVyc2UiOm4uc2Nyb2xsTGVmdD1uLnNjcm9sbFdpZHRoLW4uY2xpZW50V2lkdGgtaTticmVhaztkZWZhdWx0Om4uc2Nyb2xsTGVmdD1pfWVsc2Ugbi5zY3JvbGxMZWZ0PWl9fWNvbnN0IEtQdD1bXTtsZXQgWlB0O25ldyBNdXRhdGlvbk9ic2VydmVyKChmdW5jdGlvbigpe2NvbnN0IHQ9UVB0KCk7S1B0LmZvckVhY2goKGU9PntKUHQoZSx0KX0pKX0pKS5vYnNlcnZlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCx7YXR0cmlidXRlczohMCxhdHRyaWJ1dGVGaWx0ZXI6WyJkaXIiXX0pO2NvbnN0IEpQdD1mdW5jdGlvbih0LGUpe2U/dC5zZXRBdHRyaWJ1dGUoImRpciIsZSk6dC5yZW1vdmVBdHRyaWJ1dGUoImRpciIpfSxRUHQ9ZnVuY3Rpb24oKXtyZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgiZGlyIil9LHROdD10PT5jbGFzcyBleHRlbmRzIHR7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue2Rpcjp7dHlwZTpTdHJpbmcscmVhZE9ubHk6ITB9fX1zdGF0aWMgZmluYWxpemUoKXtzdXBlci5maW5hbGl6ZSgpLFpQdHx8KFpQdD0kUHQuZGV0ZWN0U2Nyb2xsVHlwZSgpKX1jb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5oYXNBdHRyaWJ1dGUoImRpciIpfHwodGhpcy5fX3N1YnNjcmliZSgpLEpQdCh0aGlzLFFQdCgpKSl9YXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHQsZSxuKXtpZihzdXBlci5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sodCxlLG4pLCJkaXIiIT09dClyZXR1cm47Y29uc3QgaT1uPT09UVB0KCkmJi0xPT09S1B0LmluZGV4T2YodGhpcykscj0hbiYmZSYmLTE9PT1LUHQuaW5kZXhPZih0aGlzKSxvPW4hPT1RUHQoKSYmZT09PVFQdCgpO2l8fHI/KHRoaXMuX19zdWJzY3JpYmUoKSxKUHQodGhpcyxRUHQoKSkpOm8mJnRoaXMuX19zdWJzY3JpYmUoITEpfWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLl9fc3Vic2NyaWJlKCExKSx0aGlzLnJlbW92ZUF0dHJpYnV0ZSgiZGlyIil9X19zdWJzY3JpYmUodD0hMCl7dD8tMT09PUtQdC5pbmRleE9mKHRoaXMpJiZLUHQucHVzaCh0aGlzKTpLUHQuaW5kZXhPZih0aGlzKT4tMSYmS1B0LnNwbGljZShLUHQuaW5kZXhPZih0aGlzKSwxKX1fX2dldE5vcm1hbGl6ZWRTY3JvbGxMZWZ0KHQpe3JldHVybiAkUHQuZ2V0Tm9ybWFsaXplZFNjcm9sbExlZnQoWlB0LHRoaXMuZ2V0QXR0cmlidXRlKCJkaXIiKXx8Imx0ciIsdCl9X19zZXROb3JtYWxpemVkU2Nyb2xsTGVmdCh0LGUpe3JldHVybiAkUHQuc2V0Tm9ybWFsaXplZFNjcm9sbExlZnQoWlB0LHRoaXMuZ2V0QXR0cmlidXRlKCJkaXIiKXx8Imx0ciIsdCxlKX19LGVOdD0vXC9cKlwqXHMrdmFhZGluLWRldi1tb2RlOnN0YXJ0KFtcc1xTXSopdmFhZGluLWRldi1tb2RlOmVuZFxzK1wqXCpcLy9pLG5OdD13aW5kb3cuVmFhZGluJiZ3aW5kb3cuVmFhZGluLkZsb3cmJndpbmRvdy5WYWFkaW4uRmxvdy5jbGllbnRzO2Z1bmN0aW9uIGlOdCh0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXJldHVybjtjb25zdCBuPWVOdC5leGVjKHQudG9TdHJpbmcoKSk7aWYobil0cnl7dD1uZXcgRnVuY3Rpb24oblsxXSl9Y2F0Y2godCl7Y29uc29sZS5sb2coInZhYWRpbi1kZXZlbG9wbWVudC1tb2RlLWRldGVjdG9yOiB1bmNvbW1lbnRBbmRSdW4oKSBmYWlsZWQiLHQpfXJldHVybiB0KGUpfWZ1bmN0aW9uIHJOdCgpe313aW5kb3cuVmFhZGluPXdpbmRvdy5WYWFkaW58fHt9LHZvaWQgMD09PXdpbmRvdy5WYWFkaW4uZGV2ZWxvcG1lbnRNb2RlJiYod2luZG93LlZhYWRpbi5kZXZlbG9wbWVudE1vZGU9KGZ1bmN0aW9uIG9OdCgpe3RyeXtyZXR1cm4hIShmdW5jdGlvbiB0KCl7cmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ2YWFkaW4uZGV2ZWxvcG1lbnRtb2RlLmZvcmNlIil9KSgpfHwhIShmdW5jdGlvbiBlKCl7cmV0dXJuWyJsb2NhbGhvc3QiLCIxMjcuMC4wLjEiXS5pbmRleE9mKHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSk+PTB9KSgpJiYobk50PyEoZnVuY3Rpb24gbigpe3JldHVybiEhKG5OdCYmT2JqZWN0LmtleXMobk50KS5tYXAoKHQ9Pm5OdFt0XSkpLmZpbHRlcigodD0+dC5wcm9kdWN0aW9uTW9kZSkpLmxlbmd0aD4wKX0pKCk6IShmdW5jdGlvbiBpKCl7cmV0dXJuIGlOdCgoZnVuY3Rpb24gdCgpe3JldHVybiEwfSkpfSkoKSl9Y2F0Y2godCl7cmV0dXJuITF9fSkoKSk7Y29uc3QgYU50PWZ1bmN0aW9uKCl7cmV0dXJuKGZ1bmN0aW9uKHQsZSl7aWYod2luZG93LlZhYWRpbi5kZXZlbG9wbWVudE1vZGUpcmV0dXJuIGlOdCh0LHZvaWQgMCl9KShyTnQpfTtsZXQgc050O3dpbmRvdy5WYWFkaW58fCh3aW5kb3cuVmFhZGluPXt9KSx3aW5kb3cuVmFhZGluLnJlZ2lzdHJhdGlvbnM9d2luZG93LlZhYWRpbi5yZWdpc3RyYXRpb25zfHxbXSx3aW5kb3cuVmFhZGluLmRldmVsb3BtZW50TW9kZUNhbGxiYWNrPXdpbmRvdy5WYWFkaW4uZGV2ZWxvcG1lbnRNb2RlQ2FsbGJhY2t8fHt9LHdpbmRvdy5WYWFkaW4uZGV2ZWxvcG1lbnRNb2RlQ2FsbGJhY2tbInZhYWRpbi11c2FnZS1zdGF0aXN0aWNzIl09ZnVuY3Rpb24oKXthTnQmJmFOdCgpfTtjb25zdCBsTnQ9bmV3IFNldCxjTnQ9dD0+Y2xhc3MgZXh0ZW5kcyh0TnQodCkpe3N0YXRpYyBmaW5hbGl6ZSgpe3N1cGVyLmZpbmFsaXplKCk7Y29uc3R7aXM6dH09dGhpczt0JiYhbE50Lmhhcyh0KSYmKHdpbmRvdy5WYWFkaW4ucmVnaXN0cmF0aW9ucy5wdXNoKHRoaXMpLGxOdC5hZGQodCksd2luZG93LlZhYWRpbi5kZXZlbG9wbWVudE1vZGVDYWxsYmFjayYmKHNOdD1Fbi5kZWJvdW5jZShzTnQseXQsKCgpPT57d2luZG93LlZhYWRpbi5kZXZlbG9wbWVudE1vZGVDYWxsYmFja1sidmFhZGluLXVzYWdlLXN0YXRpc3RpY3MiXSgpfSkpLENuKHNOdCkpKX1jb25zdHJ1Y3Rvcigpe3N1cGVyKCksbnVsbD09PWRvY3VtZW50LmRvY3R5cGUmJmNvbnNvbGUud2FybignVmFhZGluIGNvbXBvbmVudHMgcmVxdWlyZSB0aGUgInN0YW5kYXJkcyBtb2RlIiBkZWNsYXJhdGlvbi4gUGxlYXNlIGFkZCA8IURPQ1RZUEUgaHRtbD4gdG8gdGhlIEhUTUwgZG9jdW1lbnQuJyl9fQovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTcgVmFhZGluIEx0ZC4KICAgIFRoaXMgcHJvZ3JhbSBpcyBhdmFpbGFibGUgdW5kZXIgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAsIGF2YWlsYWJsZSBhdCBodHRwczovL3ZhYWRpbi5jb20vbGljZW5zZS8KICAgICovO2NsYXNzIHVOdCBleHRlbmRzKGNOdChYUHQocVB0KGRpKHllKSkpKSl7c3RhdGljIGdldCB0ZW1wbGF0ZSgpe3JldHVybiBfZWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgfQoKICAgICAgOmhvc3QoW2hpZGRlbl0pIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIGxhYmVsIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogYmFzZWxpbmU7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgfQoKICAgICAgW3BhcnQ9ImNoZWNrYm94Il0gewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgZmxleDogbm9uZTsKICAgICAgfQoKICAgICAgaW5wdXRbdHlwZT0iY2hlY2tib3giXSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIGN1cnNvcjogaW5oZXJpdDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIHsKICAgICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50OwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxsYWJlbD4KICAgICAgPHNwYW4gcGFydD0iY2hlY2tib3giPgogICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgY2hlY2tlZD0ie3tjaGVja2VkOjpjaGFuZ2V9fSIgZGlzYWJsZWRcJD0iW1tkaXNhYmxlZF1dIiBpbmRldGVybWluYXRlPSJ7e2luZGV0ZXJtaW5hdGU6OmNoYW5nZX19IiByb2xlPSJwcmVzZW50YXRpb24iIHRhYmluZGV4PSItMSI+CiAgICAgIDwvc3Bhbj4KCiAgICAgIDxzcGFuIHBhcnQ9ImxhYmVsIj4KICAgICAgICA8c2xvdD48L3Nsb3Q+CiAgICAgIDwvc3Bhbj4KICAgIDwvbGFiZWw+CmB9c3RhdGljIGdldCBpcygpe3JldHVybiJ2YWFkaW4tY2hlY2tib3gifXN0YXRpYyBnZXQgdmVyc2lvbigpe3JldHVybiIyLjUuMCJ9c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue2NoZWNrZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9jaGVja2VkQ2hhbmdlZCIscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxpbmRldGVybWluYXRlOnt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwLG9ic2VydmVyOiJfaW5kZXRlcm1pbmF0ZUNoYW5nZWQiLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCx2YWx1ZTohMX0sdmFsdWU6e3R5cGU6U3RyaW5nLHZhbHVlOiJvbiJ9LF9uYXRpdmVDaGVja2JveDp7dHlwZTpPYmplY3R9fX1jb25zdHJ1Y3Rvcigpe3N1cGVyKCl9Z2V0IG5hbWUoKXtyZXR1cm4gdGhpcy5jaGVja2VkP3RoaXMuX3N0b3JlZE5hbWU6IiJ9c2V0IG5hbWUodCl7dGhpcy5fc3RvcmVkTmFtZT10fXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLnNldEF0dHJpYnV0ZSgicm9sZSIsImNoZWNrYm94IiksdGhpcy5fbmF0aXZlQ2hlY2tib3g9dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3R5cGU9ImNoZWNrYm94Il0nKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLl9oYW5kbGVDbGljay5iaW5kKHRoaXMpKSx0aGlzLl9hZGRBY3RpdmVMaXN0ZW5lcnMoKTtjb25zdCB0PXRoaXMuZ2V0QXR0cmlidXRlKCJuYW1lIik7dCYmKHRoaXMubmFtZT10KSx0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignW3BhcnR+PSJsYWJlbCJdJykucXVlcnlTZWxlY3Rvcigic2xvdCIpLmFkZEV2ZW50TGlzdGVuZXIoInNsb3RjaGFuZ2UiLHRoaXMuX3VwZGF0ZUxhYmVsQXR0cmlidXRlLmJpbmQodGhpcykpLHRoaXMuX3VwZGF0ZUxhYmVsQXR0cmlidXRlKCl9X3VwZGF0ZUxhYmVsQXR0cmlidXRlKCl7Y29uc3QgdD10aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignW3BhcnR+PSJsYWJlbCJdJyksZT10LmZpcnN0RWxlbWVudENoaWxkLmFzc2lnbmVkTm9kZXMoKTt0aGlzLl9pc0Fzc2lnbmVkTm9kZXNFbXB0eShlKT90LnNldEF0dHJpYnV0ZSgiZW1wdHkiLCIiKTp0LnJlbW92ZUF0dHJpYnV0ZSgiZW1wdHkiKX1faXNBc3NpZ25lZE5vZGVzRW1wdHkodCl7cmV0dXJuIDA9PT10Lmxlbmd0aHx8MT09dC5sZW5ndGgmJnRbMF0ubm9kZVR5cGU9PU5vZGUuVEVYVF9OT0RFJiYiIj09PXRbMF0udGV4dENvbnRlbnQudHJpbSgpfV9jaGVja2VkQ2hhbmdlZCh0KXt0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1jaGVja2VkIix0aGlzLmluZGV0ZXJtaW5hdGU/Im1peGVkIjpCb29sZWFuKHQpKX1faW5kZXRlcm1pbmF0ZUNoYW5nZWQodCl7dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtY2hlY2tlZCIsdD8ibWl4ZWQiOnRoaXMuY2hlY2tlZCl9X2FkZEFjdGl2ZUxpc3RlbmVycygpe3RoaXMuX2FkZEV2ZW50TGlzdGVuZXJUb05vZGUodGhpcywiZG93biIsKHQ9Pnt0aGlzLl9faW50ZXJhY3Rpb25zQWxsb3dlZCh0KSYmdGhpcy5zZXRBdHRyaWJ1dGUoImFjdGl2ZSIsIiIpfSkpLHRoaXMuX2FkZEV2ZW50TGlzdGVuZXJUb05vZGUodGhpcywidXAiLCgoKT0+dGhpcy5yZW1vdmVBdHRyaWJ1dGUoImFjdGl2ZSIpKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwodD0+e3RoaXMuX19pbnRlcmFjdGlvbnNBbGxvd2VkKHQpJiYzMj09PXQua2V5Q29kZSYmKHQucHJldmVudERlZmF1bHQoKSx0aGlzLnNldEF0dHJpYnV0ZSgiYWN0aXZlIiwiIikpfSkpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLCh0PT57dGhpcy5fX2ludGVyYWN0aW9uc0FsbG93ZWQodCkmJjMyPT09dC5rZXlDb2RlJiYodC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX3RvZ2dsZUNoZWNrZWQoKSx0aGlzLnJlbW92ZUF0dHJpYnV0ZSgiYWN0aXZlIiksdGhpcy5pbmRldGVybWluYXRlJiYodGhpcy5pbmRldGVybWluYXRlPSExKSl9KSl9Z2V0IGZvY3VzRWxlbWVudCgpe3JldHVybiB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiaW5wdXQiKX1fX2ludGVyYWN0aW9uc0FsbG93ZWQodCl7cmV0dXJuIXRoaXMuZGlzYWJsZWQmJiJhIiE9PXQudGFyZ2V0LmxvY2FsTmFtZX1faGFuZGxlQ2xpY2sodCl7dGhpcy5fX2ludGVyYWN0aW9uc0FsbG93ZWQodCkmJih0aGlzLmluZGV0ZXJtaW5hdGU/KHRoaXMuaW5kZXRlcm1pbmF0ZT0hMSx0LnByZXZlbnREZWZhdWx0KCksdGhpcy5fdG9nZ2xlQ2hlY2tlZCgpKTp0LmNvbXBvc2VkUGF0aCgpWzBdIT09dGhpcy5fbmF0aXZlQ2hlY2tib3gmJih0LnByZXZlbnREZWZhdWx0KCksdGhpcy5fdG9nZ2xlQ2hlY2tlZCgpKSl9X3RvZ2dsZUNoZWNrZWQoKXt0aGlzLmNoZWNrZWQ9IXRoaXMuY2hlY2tlZCx0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJjaGFuZ2UiLHtjb21wb3NlZDohMSxidWJibGVzOiEwfSkpfX1jdXN0b21FbGVtZW50cy5kZWZpbmUodU50LmlzLHVOdCk7Y29uc3QgaE50PV9lYDxkb20tbW9kdWxlIGlkPSJsdW1vLWdyaWQiIHRoZW1lLWZvcj0idmFhZGluLWdyaWQiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1sdW1vLWZvbnQtZmFtaWx5KTsKICAgICAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLW0pOwogICAgICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1sdW1vLWxpbmUtaGVpZ2h0LXMpOwogICAgICAgIGNvbG9yOiB2YXIoLS1sdW1vLWJvZHktdGV4dC1jb2xvcik7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1iYXNlLWNvbG9yKTsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsKICAgICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50OwogICAgICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOwogICAgICAgIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7CgogICAgICAgIC8qIEZvciBpbnRlcm5hbCB1c2Ugb25seSAqLwogICAgICAgIC0tX2x1bW8tZ3JpZC1ib3JkZXItY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtMjBwY3QpOwogICAgICAgIC0tX2x1bW8tZ3JpZC1zZWNvbmRhcnktYm9yZGVyLWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTEwcGN0KTsKICAgICAgICAtLV9sdW1vLWdyaWQtYm9yZGVyLXdpZHRoOiAxcHg7CiAgICAgICAgLS1fbHVtby1ncmlkLXNlbGVjdGVkLXJvdy1jb2xvcjogdmFyKC0tbHVtby1wcmltYXJ5LWNvbG9yLTEwcGN0KTsKICAgICAgfQoKICAgICAgLyogTm8gKG91dGVyKSBib3JkZXIgKi8KCiAgICAgIDpob3N0KDpub3QoW3RoZW1lfj0ibm8tYm9yZGVyIl0pKSB7CiAgICAgICAgYm9yZGVyOiB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItY29sb3IpOwogICAgICB9CgogICAgICAvKiBDZWxsIHN0eWxlcyAqLwoKICAgICAgW3BhcnR+PSJjZWxsIl0gewogICAgICAgIG1pbi1oZWlnaHQ6IHZhcigtLWx1bW8tc2l6ZS1tKTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLWJhc2UtY29sb3IpOwogICAgICB9CgogICAgICBbcGFydH49ImNlbGwiXSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICAgIHBhZGRpbmc6IHZhcigtLWx1bW8tc3BhY2UteHMpIHZhcigtLWx1bW8tc3BhY2UtbSk7CiAgICAgIH0KCiAgICAgIC8qIEFwcGx5IHJvdyBib3JkZXJzIGJ5IGRlZmF1bHQgYW5kIGludHJvZHVjZSB0aGUgIm5vLXJvdy1ib3JkZXJzIiB2YXJpYW50ICovCiAgICAgIDpob3N0KDpub3QoW3RoZW1lfj0ibm8tcm93LWJvcmRlcnMiXSkpIFtwYXJ0fj0iY2VsbCJdOm5vdChbcGFydH49ImRldGFpbHMtY2VsbCJdKSB7CiAgICAgICAgYm9yZGVyLXRvcDogdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLV9sdW1vLWdyaWQtc2Vjb25kYXJ5LWJvcmRlci1jb2xvcik7CiAgICAgIH0KCiAgICAgIC8qIEhpZGUgZmlyc3QgYm9keSByb3cgdG9wIGJvcmRlciAqLwogICAgICA6aG9zdCg6bm90KFt0aGVtZX49Im5vLXJvdy1ib3JkZXJzIl0pKSBbcGFydD0icm93Il1bZmlyc3RdIFtwYXJ0fj0iY2VsbCJdOm5vdChbcGFydH49ImRldGFpbHMtY2VsbCJdKSB7CiAgICAgICAgYm9yZGVyLXRvcDogMDsKICAgICAgICBtaW4taGVpZ2h0OiBjYWxjKHZhcigtLWx1bW8tc2l6ZS1tKSAtIHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLXdpZHRoKSk7CiAgICAgIH0KCiAgICAgIC8qIEZvY3VzLXJpbmcgKi8KCiAgICAgIFtwYXJ0fj0iY2VsbCJdOmZvY3VzIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICB9CgogICAgICA6aG9zdChbbmF2aWdhdGluZ10pIFtwYXJ0fj0iY2VsbCJdOmZvY3VzOjpiZWZvcmUgewogICAgICAgIGNvbnRlbnQ6ICIiOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgMnB4IHZhcigtLWx1bW8tcHJpbWFyeS1jb2xvci01MHBjdCk7CiAgICAgIH0KCiAgICAgIC8qIERyYWcgYW5kIERyb3Agc3R5bGVzICovCiAgICAgIDpob3N0KFtkcmFnb3Zlcl0pOjphZnRlciB7CiAgICAgICAgY29udGVudDogIiI7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHotaW5kZXg6IDEwMDsKICAgICAgICB0b3A6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgMnB4IHZhcigtLWx1bW8tcHJpbWFyeS1jb2xvci01MHBjdCk7CiAgICAgIH0KCiAgICAgIFtwYXJ0fj0icm93Il1bZHJhZ292ZXJdIHsKICAgICAgICB6LWluZGV4OiAxMDAgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgW3BhcnR+PSJyb3ciXVtkcmFnb3Zlcl0gW3BhcnR+PSJjZWxsIl0gewogICAgICAgIG92ZXJmbG93OiB2aXNpYmxlOwogICAgICB9CgogICAgICBbcGFydH49InJvdyJdW2RyYWdvdmVyXSBbcGFydH49ImNlbGwiXTo6YWZ0ZXIgewogICAgICAgIGNvbnRlbnQ6ICIiOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgaGVpZ2h0OiBjYWxjKHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLXdpZHRoKSArIDJweCk7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tbHVtby1wcmltYXJ5LWNvbG9yLTUwcGN0KTsKICAgICAgfQoKICAgICAgOmhvc3QoW3RoZW1lfj0ibm8tcm93LWJvcmRlcnMiXSkgW2RyYWdvdmVyXSBbcGFydH49ImNlbGwiXTo6YWZ0ZXIgewogICAgICAgIGhlaWdodDogMnB4OwogICAgICB9CgogICAgICBbcGFydH49InJvdyJdW2RyYWdvdmVyPSJiZWxvdyJdIFtwYXJ0fj0iY2VsbCJdOjphZnRlciB7CiAgICAgICAgdG9wOiAxMDAlOwogICAgICAgIGJvdHRvbTogYXV0bzsKICAgICAgICBtYXJnaW4tdG9wOiAtMXB4OwogICAgICB9CgogICAgICBbcGFydH49InJvdyJdW2RyYWdvdmVyPSJhYm92ZSJdIFtwYXJ0fj0iY2VsbCJdOjphZnRlciB7CiAgICAgICAgdG9wOiBhdXRvOwogICAgICAgIGJvdHRvbTogMTAwJTsKICAgICAgICBtYXJnaW4tYm90dG9tOiAtMXB4OwogICAgICB9CgogICAgICBbcGFydH49InJvdyJdW2RldGFpbHMtb3BlbmVkXVtkcmFnb3Zlcj0iYmVsb3ciXSBbcGFydH49ImNlbGwiXTpub3QoW3BhcnR+PSJkZXRhaWxzLWNlbGwiXSk6OmFmdGVyLAogICAgICBbcGFydH49InJvdyJdW2RldGFpbHMtb3BlbmVkXVtkcmFnb3Zlcj0iYWJvdmUiXSBbcGFydH49ImRldGFpbHMtY2VsbCJdOjphZnRlciB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgW3BhcnR+PSJyb3ciXVtkcmFnb3Zlcl1bZHJhZ292ZXI9Im9uLXRvcCJdIFtwYXJ0fj0iY2VsbCJdOjphZnRlciB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICBbcGFydH49InJvdyJdW2RyYWdzdGFydF0gewogICAgICAgIC8qIEFkZCBib3R0b20tc3BhY2UgdG8gdGhlIHJvdyBzbyB0aGUgZHJhZyBudW1iZXIgZG9lc24ndCBnZXQgY2xpcHBlZC4gTmVlZGVkIGZvciBJRS9FZGdlICovCiAgICAgICAgYm9yZGVyLWJvdHRvbTogMTAwcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgICAgei1pbmRleDogMTAwICFpbXBvcnRhbnQ7CiAgICAgICAgb3BhY2l0eTogMC45OwogICAgICB9CgogICAgICBbcGFydH49InJvdyJdW2RyYWdzdGFydF0gW3BhcnR+PSJjZWxsIl0gewogICAgICAgIGJvcmRlcjogbm9uZSAhaW1wb3J0YW50OwogICAgICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgW3BhcnR+PSJyb3ciXVtkcmFnc3RhcnRdIFtwYXJ0fj0iY2VsbCJdW2xhc3QtY29sdW1uXSB7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMCB2YXIoLS1sdW1vLWJvcmRlci1yYWRpdXMtcykgdmFyKC0tbHVtby1ib3JkZXItcmFkaXVzLXMpIDA7CiAgICAgIH0KCiAgICAgIFtwYXJ0fj0icm93Il1bZHJhZ3N0YXJ0XSBbcGFydH49ImNlbGwiXVtmaXJzdC1jb2x1bW5dIHsKICAgICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1sdW1vLWJvcmRlci1yYWRpdXMtcykgMCAwIHZhcigtLWx1bW8tYm9yZGVyLXJhZGl1cy1zKTsKICAgICAgfQoKICAgICAgW2lvc10gW3BhcnR+PSJyb3ciXVtkcmFnc3RhcnRdIFtwYXJ0fj0iY2VsbCJdIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1sdW1vLXByaW1hcnktY29sb3ItNTBwY3QpOwogICAgICB9CgogICAgICAjc2Nyb2xsZXI6bm90KFtpb3NdKSBbcGFydH49InJvdyJdW2RyYWdzdGFydF06bm90KFtkcmFnc3RhcnQ9IiJdKTo6YWZ0ZXIgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiB2YXIoLS1fZ3JpZC1kcmFnLXN0YXJ0LXgpOwogICAgICAgIHRvcDogdmFyKC0tX2dyaWQtZHJhZy1zdGFydC15KTsKICAgICAgICB6LWluZGV4OiAxMDA7CiAgICAgICAgY29udGVudDogYXR0cihkcmFnc3RhcnQpOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBwYWRkaW5nOiBjYWxjKHZhcigtLWx1bW8tc3BhY2UteHMpICogMC44KTsKICAgICAgICBjb2xvcjogdmFyKC0tbHVtby1lcnJvci1jb250cmFzdC1jb2xvcik7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1lcnJvci1jb2xvcik7CiAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbHVtby1ib3JkZXItcmFkaXVzLW0pOwogICAgICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1sdW1vLWZvbnQtZmFtaWx5KTsKICAgICAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLXh4cyk7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogaW5pdGlhbDsKICAgICAgICBsZXR0ZXItc3BhY2luZzogaW5pdGlhbDsKICAgICAgICBtaW4td2lkdGg6IGNhbGModmFyKC0tbHVtby1zaXplLXMpICogMC43KTsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC8qIEhlYWRlcnMgYW5kIGZvb3RlcnMgKi8KCiAgICAgIFtwYXJ0fj0iaGVhZGVyLWNlbGwiXSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSwKICAgICAgW3BhcnR+PSJmb290ZXItY2VsbCJdIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpLAogICAgICBbcGFydH49InJlb3JkZXItZ2hvc3QiXSB7CiAgICAgICAgZm9udC1zaXplOiB2YXIoLS1sdW1vLWZvbnQtc2l6ZS1zKTsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICB9CgogICAgICBbcGFydH49ImZvb3Rlci1jZWxsIl0gOjpzbG90dGVkKHZhYWRpbi1ncmlkLWNlbGwtY29udGVudCkgewogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgIH0KCiAgICAgIFtwYXJ0PSJyb3ciXTpvbmx5LWNoaWxkIFtwYXJ0fj0iaGVhZGVyLWNlbGwiXSB7CiAgICAgICAgbWluLWhlaWdodDogdmFyKC0tbHVtby1zaXplLXhsKTsKICAgICAgfQoKICAgICAgLyogSGVhZGVyIGJvcmRlcnMgKi8KCiAgICAgIC8qIEhpZGUgZmlyc3QgaGVhZGVyIHJvdyB0b3AgYm9yZGVyICovCiAgICAgIDpob3N0KDpub3QoW3RoZW1lfj0ibm8tcm93LWJvcmRlcnMiXSkpIFtwYXJ0PSJyb3ciXTpmaXJzdC1jaGlsZCBbcGFydH49ImhlYWRlci1jZWxsIl0gewogICAgICAgIGJvcmRlci10b3A6IDA7CiAgICAgIH0KCiAgICAgIFtwYXJ0PSJyb3ciXTpsYXN0LWNoaWxkIFtwYXJ0fj0iaGVhZGVyLWNlbGwiXSB7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItd2lkdGgpIHNvbGlkIHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICA6aG9zdCg6bm90KFt0aGVtZX49Im5vLXJvdy1ib3JkZXJzIl0pKSBbcGFydD0icm93Il06bGFzdC1jaGlsZCBbcGFydH49ImhlYWRlci1jZWxsIl0gewogICAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6IHZhcigtLV9sdW1vLWdyaWQtc2Vjb25kYXJ5LWJvcmRlci1jb2xvcik7CiAgICAgIH0KCiAgICAgIC8qIE92ZXJmbG93IHVzZXMgYSBzdHJvbmdlciBib3JkZXIgY29sb3IgKi8KICAgICAgOmhvc3QoW292ZXJmbG93fj0idG9wIl0pIFtwYXJ0PSJyb3ciXTpsYXN0LWNoaWxkIFtwYXJ0fj0iaGVhZGVyLWNlbGwiXSB7CiAgICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItY29sb3IpOwogICAgICB9CgogICAgICAvKiBGb290ZXIgYm9yZGVycyAqLwoKICAgICAgW3BhcnQ9InJvdyJdOmZpcnN0LWNoaWxkIFtwYXJ0fj0iZm9vdGVyLWNlbGwiXSB7CiAgICAgICAgYm9yZGVyLXRvcDogdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItd2lkdGgpIHNvbGlkIHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICA6aG9zdCg6bm90KFt0aGVtZX49Im5vLXJvdy1ib3JkZXJzIl0pKSBbcGFydD0icm93Il06Zmlyc3QtY2hpbGQgW3BhcnR+PSJmb290ZXItY2VsbCJdIHsKICAgICAgICBib3JkZXItdG9wLWNvbG9yOiB2YXIoLS1fbHVtby1ncmlkLXNlY29uZGFyeS1ib3JkZXItY29sb3IpOwogICAgICB9CgogICAgICAvKiBPdmVyZmxvdyB1c2VzIGEgc3Ryb25nZXIgYm9yZGVyIGNvbG9yICovCiAgICAgIDpob3N0KFtvdmVyZmxvd349ImJvdHRvbSJdKSBbcGFydD0icm93Il06Zmlyc3QtY2hpbGQgW3BhcnR+PSJmb290ZXItY2VsbCJdIHsKICAgICAgICBib3JkZXItdG9wLWNvbG9yOiB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci1jb2xvcik7CiAgICAgIH0KCiAgICAgIC8qIENvbHVtbiByZW9yZGVyaW5nICovCgogICAgICA6aG9zdChbcmVvcmRlcmluZ10pIFtwYXJ0fj0iY2VsbCJdIHsKICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodmFyKC0tbHVtby1zaGFkZS0yMHBjdCksIHZhcigtLWx1bW8tc2hhZGUtMjBwY3QpKSB2YXIoLS1sdW1vLWJhc2UtY29sb3IpOwogICAgICB9CgogICAgICA6aG9zdChbcmVvcmRlcmluZ10pIFtwYXJ0fj0iY2VsbCJdW3Jlb3JkZXItc3RhdHVzPSJhbGxvd2VkIl0gewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWx1bW8tYmFzZS1jb2xvcik7CiAgICAgIH0KCiAgICAgIDpob3N0KFtyZW9yZGVyaW5nXSkgW3BhcnR+PSJjZWxsIl1bcmVvcmRlci1zdGF0dXM9ImRyYWdnaW5nIl0gewogICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh2YXIoLS1sdW1vLWNvbnRyYXN0LTVwY3QpLCB2YXIoLS1sdW1vLWNvbnRyYXN0LTVwY3QpKSB2YXIoLS1sdW1vLWJhc2UtY29sb3IpOwogICAgICB9CgogICAgICBbcGFydH49InJlb3JkZXItZ2hvc3QiXSB7CiAgICAgICAgb3BhY2l0eTogMC44NTsKICAgICAgICBib3gtc2hhZG93OiB2YXIoLS1sdW1vLWJveC1zaGFkb3ctcyk7CiAgICAgICAgLyogVE9ETyBVc2UgdGhlIHNhbWUgc3R5bGVzIGFzIGZvciB0aGUgY2VsbCBlbGVtZW50IChyZW9yZGVyLWdob3N0IGNvcGllcyBzdHlsZXMgZnJvbSB0aGUgY2VsbCBlbGVtZW50KSAqLwogICAgICAgIHBhZGRpbmc6IHZhcigtLWx1bW8tc3BhY2UtcykgdmFyKC0tbHVtby1zcGFjZS1tKSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAvKiBDb2x1bW4gcmVzaXppbmcgKi8KCiAgICAgIFtwYXJ0PSJyZXNpemUtaGFuZGxlIl0gewogICAgICAgIHdpZHRoOiAzcHg7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1wcmltYXJ5LWNvbG9yLTUwcGN0KTsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4yczsKICAgICAgfQoKICAgICAgOmhvc3QoOm5vdChbcmVvcmRlcmluZ10pKSAqOm5vdChbY29sdW1uLXJlc2l6aW5nXSkgW3BhcnR+PSJjZWxsIl06aG92ZXIgW3BhcnQ9InJlc2l6ZS1oYW5kbGUiXSwKICAgICAgW3BhcnQ9InJlc2l6ZS1oYW5kbGUiXTphY3RpdmUgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgdHJhbnNpdGlvbi1kZWxheTogMC4xNXM7CiAgICAgIH0KCiAgICAgIC8qIENvbHVtbiBib3JkZXJzICovCgogICAgICA6aG9zdChbdGhlbWV+PSJjb2x1bW4tYm9yZGVycyJdKSBbcGFydH49ImNlbGwiXTpub3QoW2xhc3QtY29sdW1uXSk6bm90KFtwYXJ0fj0iZGV0YWlscy1jZWxsIl0pIHsKICAgICAgICBib3JkZXItcmlnaHQ6IHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1fbHVtby1ncmlkLXNlY29uZGFyeS1ib3JkZXItY29sb3IpOwogICAgICB9CgogICAgICAvKiBGcm96ZW4gY29sdW1ucyAqLwoKICAgICAgW2xhc3QtZnJvemVuXSB7CiAgICAgICAgYm9yZGVyLXJpZ2h0OiB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci13aWR0aCkgc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgOmhvc3QoW292ZXJmbG93fj0ibGVmdCJdKSBbcGFydH49ImNlbGwiXVtsYXN0LWZyb3plbl06bm90KFtwYXJ0fj0iZGV0YWlscy1jZWxsIl0pIHsKICAgICAgICBib3JkZXItcmlnaHQtY29sb3I6IHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLWNvbG9yKTsKICAgICAgfQoKICAgICAgLyogUm93IHN0cmlwZXMgKi8KCiAgICAgIDpob3N0KFt0aGVtZX49InJvdy1zdHJpcGVzIl0pIFtwYXJ0fj0icm93Il06bm90KFtvZGRdKSBbcGFydH49ImJvZHktY2VsbCJdLAogICAgICA6aG9zdChbdGhlbWV+PSJyb3ctc3RyaXBlcyJdKSBbcGFydH49InJvdyJdOm5vdChbb2RkXSkgW3BhcnR+PSJkZXRhaWxzLWNlbGwiXSB7CiAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHZhcigtLWx1bW8tY29udHJhc3QtNXBjdCksIHZhcigtLWx1bW8tY29udHJhc3QtNXBjdCkpOwogICAgICAgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKICAgICAgfQoKICAgICAgLyogU2VsZWN0ZWQgcm93ICovCgogICAgICAvKiBSYWlzZSB0aGUgc2VsZWN0ZWQgcm93cyBhYm92ZSB1bnNlbGVjdGVkIHJvd3MgKHNvIHRoYXQgYm94LXNoYWRvdyBjYW4gY292ZXIgdW5zZWxlY3RlZCByb3dzKSAqLwogICAgICA6aG9zdCg6bm90KFtyZW9yZGVyaW5nXSkpIFtwYXJ0fj0icm93Il1bc2VsZWN0ZWRdIHsKICAgICAgICB6LWluZGV4OiAxOwogICAgICB9CgogICAgICA6aG9zdCg6bm90KFtyZW9yZGVyaW5nXSkpIFtwYXJ0fj0icm93Il1bc2VsZWN0ZWRdIFtwYXJ0fj0iYm9keS1jZWxsIl06bm90KFtwYXJ0fj0iZGV0YWlscy1jZWxsIl0pIHsKICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodmFyKC0tX2x1bW8tZ3JpZC1zZWxlY3RlZC1yb3ctY29sb3IpLCB2YXIoLS1fbHVtby1ncmlkLXNlbGVjdGVkLXJvdy1jb2xvcikpOwogICAgICAgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQ7CiAgICAgIH0KCiAgICAgIC8qIENvdmVyIHRoZSBib3JkZXIgb2YgYW4gdW5zZWxlY3RlZCByb3cgKi8KICAgICAgOmhvc3QoOm5vdChbdGhlbWV+PSJuby1yb3ctYm9yZGVycyJdKSkgW3BhcnR+PSJyb3ciXVtzZWxlY3RlZF0gW3BhcnR+PSJjZWxsIl06bm90KFtwYXJ0fj0iZGV0YWlscy1jZWxsIl0pIHsKICAgICAgICBib3gtc2hhZG93OiAwIHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLXdpZHRoKSAwIDAgdmFyKC0tX2x1bW8tZ3JpZC1zZWxlY3RlZC1yb3ctY29sb3IpOwogICAgICB9CgogICAgICAvKiBDb21wYWN0ICovCgogICAgICA6aG9zdChbdGhlbWV+PSJjb21wYWN0Il0pIFtwYXJ0PSJyb3ciXTpvbmx5LWNoaWxkIFtwYXJ0fj0iaGVhZGVyLWNlbGwiXSB7CiAgICAgICAgbWluLWhlaWdodDogdmFyKC0tbHVtby1zaXplLW0pOwogICAgICB9CgogICAgICA6aG9zdChbdGhlbWV+PSJjb21wYWN0Il0pIFtwYXJ0fj0iY2VsbCJdIHsKICAgICAgICBtaW4taGVpZ2h0OiB2YXIoLS1sdW1vLXNpemUtcyk7CiAgICAgIH0KCiAgICAgIDpob3N0KFt0aGVtZX49ImNvbXBhY3QiXSkgW3BhcnQ9InJvdyJdW2ZpcnN0XSBbcGFydH49ImNlbGwiXTpub3QoW3BhcnR+PSJkZXRhaWxzLWNlbGwiXSkgewogICAgICAgIG1pbi1oZWlnaHQ6IGNhbGModmFyKC0tbHVtby1zaXplLXMpIC0gdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItd2lkdGgpKTsKICAgICAgfQoKICAgICAgOmhvc3QoW3RoZW1lfj0iY29tcGFjdCJdKSBbcGFydH49ImNlbGwiXSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgICAgcGFkZGluZzogdmFyKC0tbHVtby1zcGFjZS14cykgdmFyKC0tbHVtby1zcGFjZS1zKTsKICAgICAgfQoKICAgICAgLyogV3JhcCBjZWxsIGNvbnRlbnRzICovCgogICAgICA6aG9zdChbdGhlbWV+PSJ3cmFwLWNlbGwtY29udGVudCJdKSBbcGFydH49ImNlbGwiXSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsKICAgICAgfQoKICAgICAgLyogUlRMIHNwZWNpZmljIHN0eWxlcyAqLwoKICAgICAgOmhvc3QoW2Rpcj0icnRsIl0pIFtwYXJ0fj0icm93Il1bZHJhZ3N0YXJ0XSBbcGFydH49ImNlbGwiXVtsYXN0LWNvbHVtbl0gewogICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWx1bW8tYm9yZGVyLXJhZGl1cy1zKSAwIDAgdmFyKC0tbHVtby1ib3JkZXItcmFkaXVzLXMpOwogICAgICB9CgogICAgICA6aG9zdChbZGlyPSJydGwiXSkgW3BhcnR+PSJyb3ciXVtkcmFnc3RhcnRdIFtwYXJ0fj0iY2VsbCJdW2ZpcnN0LWNvbHVtbl0gewogICAgICAgIGJvcmRlci1yYWRpdXM6IDAgdmFyKC0tbHVtby1ib3JkZXItcmFkaXVzLXMpIHZhcigtLWx1bW8tYm9yZGVyLXJhZGl1cy1zKSAwOwogICAgICB9CgogICAgICA6aG9zdChbZGlyPSJydGwiXVt0aGVtZX49ImNvbHVtbi1ib3JkZXJzIl0pIFtwYXJ0fj0iY2VsbCJdOm5vdChbbGFzdC1jb2x1bW5dKTpub3QoW3BhcnR+PSJkZXRhaWxzLWNlbGwiXSkgewogICAgICAgIGJvcmRlci1yaWdodDogbm9uZTsKICAgICAgICBib3JkZXItbGVmdDogdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLV9sdW1vLWdyaWQtc2Vjb25kYXJ5LWJvcmRlci1jb2xvcik7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXI9InJ0bCJdKSBbbGFzdC1mcm96ZW5dIHsKICAgICAgICBib3JkZXItcmlnaHQ6IG5vbmU7CiAgICAgICAgYm9yZGVyLWxlZnQ6IHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLXdpZHRoKSBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpcj0icnRsIl1bb3ZlcmZsb3d+PSJyaWdodCJdKSBbcGFydH49ImNlbGwiXVtsYXN0LWZyb3plbl06bm90KFtwYXJ0fj0iZGV0YWlscy1jZWxsIl0pIHsKICAgICAgICBib3JkZXItbGVmdC1jb2xvcjogdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItY29sb3IpOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSB0aGVtZS1mb3I9InZhYWRpbi1jaGVja2JveCIgaWQ9InZhYWRpbi1ncmlkLXNlbGVjdC1hbGwtY2hlY2tib3gtbHVtbyI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCgudmFhZGluLWdyaWQtc2VsZWN0LWFsbC1jaGVja2JveCkgewogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tbHVtby1mb250LXNpemUtbSk7CiAgICAgIH0KICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+YDtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGhOdC5jb250ZW50KTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE2IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KdmFyIGROdD1uYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUCg/OmhvbmV8YWQ7KD86IFU7KT8gQ1BVKSBPUyAoXGQrKS8pLHBOdD1kTnQmJmROdFsxXT49OCxmTnQ9X3QsbU50PXl0LGdOdD12dDtjb25zdCBfTnQ9TnIoe2JlaGF2aW9yczpbbW8sem9dLF9yYXRpbzouNSxfc2Nyb2xsZXJQYWRkaW5nVG9wOjAsX3Njcm9sbFBvc2l0aW9uOjAsX3BoeXNpY2FsU2l6ZTowLF9waHlzaWNhbEF2ZXJhZ2U6MCxfcGh5c2ljYWxBdmVyYWdlQ291bnQ6MCxfcGh5c2ljYWxUb3A6MCxfdmlydHVhbENvdW50OjAsX2VzdFNjcm9sbEhlaWdodDowLF9zY3JvbGxIZWlnaHQ6MCxfdmlld3BvcnRIZWlnaHQ6MCxfdmlld3BvcnRXaWR0aDowLF9waHlzaWNhbEl0ZW1zOm51bGwsX3BoeXNpY2FsU2l6ZXM6bnVsbCxfZmlyc3RWaXNpYmxlSW5kZXhWYWw6bnVsbCxfY29sbGVjdGlvbjpudWxsLF9sYXN0VmlzaWJsZUluZGV4VmFsOm51bGwsX21heFBhZ2VzOjIsX2ZvY3VzZWRWaXJ0dWFsSW5kZXg6LTEsX2l0ZW1zUGVyUm93OjEsX3Jvd0hlaWdodDowLF90ZW1wbGF0ZUNvc3Q6MCxnZXQgX3BoeXNpY2FsQm90dG9tKCl7cmV0dXJuIHRoaXMuX3BoeXNpY2FsVG9wK3RoaXMuX3BoeXNpY2FsU2l6ZX0sZ2V0IF9zY3JvbGxCb3R0b20oKXtyZXR1cm4gdGhpcy5fc2Nyb2xsUG9zaXRpb24rdGhpcy5fdmlld3BvcnRIZWlnaHR9LGdldCBfdmlydHVhbEVuZCgpe3JldHVybiB0aGlzLl92aXJ0dWFsU3RhcnQrdGhpcy5fcGh5c2ljYWxDb3VudC0xfSxnZXQgX2hpZGRlbkNvbnRlbnRTaXplKCl7cmV0dXJuKHRoaXMuZ3JpZD90aGlzLl9waHlzaWNhbFJvd3MqdGhpcy5fcm93SGVpZ2h0OnRoaXMuX3BoeXNpY2FsU2l6ZSktdGhpcy5fdmlld3BvcnRIZWlnaHR9LGdldCBfbWF4U2Nyb2xsVG9wKCl7cmV0dXJuIHRoaXMuX2VzdFNjcm9sbEhlaWdodC10aGlzLl92aWV3cG9ydEhlaWdodCt0aGlzLl9zY3JvbGxPZmZzZXR9LGdldCBfbWF4VmlydHVhbFN0YXJ0KCl7dmFyIHQ9dGhpcy5fY29udmVydEluZGV4VG9Db21wbGV0ZVJvdyh0aGlzLl92aXJ0dWFsQ291bnQpO3JldHVybiBNYXRoLm1heCgwLHQtdGhpcy5fcGh5c2ljYWxDb3VudCl9LHNldCBfdmlydHVhbFN0YXJ0KHQpe3Q9dGhpcy5fY2xhbXAodCwwLHRoaXMuX21heFZpcnR1YWxTdGFydCksdGhpcy5ncmlkJiYodC09dCV0aGlzLl9pdGVtc1BlclJvdyksdGhpcy5fdmlydHVhbFN0YXJ0VmFsPXR9LGdldCBfdmlydHVhbFN0YXJ0KCl7cmV0dXJuIHRoaXMuX3ZpcnR1YWxTdGFydFZhbHx8MH0sc2V0IF9waHlzaWNhbFN0YXJ0KHQpeyh0JT10aGlzLl9waHlzaWNhbENvdW50KTwwJiYodD10aGlzLl9waHlzaWNhbENvdW50K3QpLHRoaXMuZ3JpZCYmKHQtPXQldGhpcy5faXRlbXNQZXJSb3cpLHRoaXMuX3BoeXNpY2FsU3RhcnRWYWw9dH0sZ2V0IF9waHlzaWNhbFN0YXJ0KCl7cmV0dXJuIHRoaXMuX3BoeXNpY2FsU3RhcnRWYWx8fDB9LGdldCBfcGh5c2ljYWxFbmQoKXtyZXR1cm4odGhpcy5fcGh5c2ljYWxTdGFydCt0aGlzLl9waHlzaWNhbENvdW50LTEpJXRoaXMuX3BoeXNpY2FsQ291bnR9LHNldCBfcGh5c2ljYWxDb3VudCh0KXt0aGlzLl9waHlzaWNhbENvdW50VmFsPXR9LGdldCBfcGh5c2ljYWxDb3VudCgpe3JldHVybiB0aGlzLl9waHlzaWNhbENvdW50VmFsfHwwfSxnZXQgX29wdFBoeXNpY2FsU2l6ZSgpe3JldHVybiAwPT09dGhpcy5fdmlld3BvcnRIZWlnaHQ/MS8wOnRoaXMuX3ZpZXdwb3J0SGVpZ2h0KnRoaXMuX21heFBhZ2VzfSxnZXQgX2lzVmlzaWJsZSgpe3JldHVybiBCb29sZWFuKHRoaXMub2Zmc2V0V2lkdGh8fHRoaXMub2Zmc2V0SGVpZ2h0KX0sZ2V0IGZpcnN0VmlzaWJsZUluZGV4KCl7dmFyIHQ9dGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw7aWYobnVsbD09dCl7dmFyIGU9dGhpcy5fcGh5c2ljYWxUb3ArdGhpcy5fc2Nyb2xsT2Zmc2V0O3Q9dGhpcy5faXRlcmF0ZUl0ZW1zKChmdW5jdGlvbih0LG4pe3JldHVybihlKz10aGlzLl9nZXRQaHlzaWNhbFNpemVJbmNyZW1lbnQodCkpPnRoaXMuX3Njcm9sbFBvc2l0aW9uP3RoaXMuZ3JpZD9uLW4ldGhpcy5faXRlbXNQZXJSb3c6bjp0aGlzLmdyaWQmJnRoaXMuX3ZpcnR1YWxDb3VudC0xPT09bj9uLW4ldGhpcy5faXRlbXNQZXJSb3c6dm9pZCAwfSkpfHwwLHRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsPXR9cmV0dXJuIHR9LGdldCBsYXN0VmlzaWJsZUluZGV4KCl7dmFyIHQ9dGhpcy5fbGFzdFZpc2libGVJbmRleFZhbDtpZihudWxsPT10KXtpZih0aGlzLmdyaWQpdD1NYXRoLm1pbih0aGlzLl92aXJ0dWFsQ291bnQsdGhpcy5maXJzdFZpc2libGVJbmRleCt0aGlzLl9lc3RSb3dzSW5WaWV3KnRoaXMuX2l0ZW1zUGVyUm93LTEpO2Vsc2V7dmFyIGU9dGhpcy5fcGh5c2ljYWxUb3ArdGhpcy5fc2Nyb2xsT2Zmc2V0O3RoaXMuX2l0ZXJhdGVJdGVtcygoZnVuY3Rpb24obixpKXtlPHRoaXMuX3Njcm9sbEJvdHRvbSYmKHQ9aSksZSs9dGhpcy5fZ2V0UGh5c2ljYWxTaXplSW5jcmVtZW50KG4pfSkpfXRoaXMuX2xhc3RWaXNpYmxlSW5kZXhWYWw9dH1yZXR1cm4gdH0sZ2V0IF9zY3JvbGxPZmZzZXQoKXtyZXR1cm4gdGhpcy5fc2Nyb2xsZXJQYWRkaW5nVG9wfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX2RlYm91bmNlKCJfcmVuZGVyIix0aGlzLl9yZW5kZXIsZk50KSx0aGlzLmxpc3Rlbih0aGlzLCJpcm9uLXJlc2l6ZSIsIl9yZXNpemVIYW5kbGVyIil9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy51bmxpc3Rlbih0aGlzLCJpcm9uLXJlc2l6ZSIsIl9yZXNpemVIYW5kbGVyIil9LHVwZGF0ZVZpZXdwb3J0Qm91bmRhcmllczpmdW5jdGlvbigpe3ZhciB0PXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMpO3RoaXMuX3Njcm9sbGVyUGFkZGluZ1RvcD10aGlzLnNjcm9sbFRhcmdldD09PXRoaXM/MDpwYXJzZUludCh0WyJwYWRkaW5nLXRvcCJdLDEwKSx0aGlzLl9pc1JUTD1Cb29sZWFuKCJydGwiPT09dC5kaXJlY3Rpb24pLHRoaXMuX3ZpZXdwb3J0V2lkdGg9dGhpcy4kLml0ZW1zLm9mZnNldFdpZHRoLHRoaXMuX3ZpZXdwb3J0SGVpZ2h0PXRoaXMuX3Njcm9sbFRhcmdldEhlaWdodCx0aGlzLmdyaWQmJnRoaXMuX3VwZGF0ZUdyaWRNZXRyaWNzKCl9LF9zY3JvbGxIYW5kbGVyOmZ1bmN0aW9uKCl7dmFyIHQ9TWF0aC5tYXgoMCxNYXRoLm1pbih0aGlzLl9tYXhTY3JvbGxUb3AsdGhpcy5fc2Nyb2xsVG9wKSksZT10LXRoaXMuX3Njcm9sbFBvc2l0aW9uLG49ZT49MDtpZih0aGlzLl9zY3JvbGxQb3NpdGlvbj10LHRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsPW51bGwsdGhpcy5fbGFzdFZpc2libGVJbmRleFZhbD1udWxsLE1hdGguYWJzKGUpPnRoaXMuX3BoeXNpY2FsU2l6ZSYmdGhpcy5fcGh5c2ljYWxTaXplPjApe2UtPXRoaXMuX3Njcm9sbE9mZnNldDt2YXIgaT1NYXRoLnJvdW5kKGUvdGhpcy5fcGh5c2ljYWxBdmVyYWdlKSp0aGlzLl9pdGVtc1BlclJvdzt0aGlzLl92aXJ0dWFsU3RhcnQ9dGhpcy5fdmlydHVhbFN0YXJ0K2ksdGhpcy5fcGh5c2ljYWxTdGFydD10aGlzLl9waHlzaWNhbFN0YXJ0K2ksdGhpcy5fcGh5c2ljYWxUb3A9TWF0aC5mbG9vcih0aGlzLl92aXJ0dWFsU3RhcnQvdGhpcy5faXRlbXNQZXJSb3cpKnRoaXMuX3BoeXNpY2FsQXZlcmFnZSx0aGlzLl91cGRhdGUoKX1lbHNlIGlmKHRoaXMuX3BoeXNpY2FsQ291bnQ+MCl7dmFyIHI9dGhpcy5fZ2V0UmV1c2FibGVzKG4pO24/KHRoaXMuX3BoeXNpY2FsVG9wPXIucGh5c2ljYWxUb3AsdGhpcy5fdmlydHVhbFN0YXJ0PXRoaXMuX3ZpcnR1YWxTdGFydCtyLmluZGV4ZXMubGVuZ3RoLHRoaXMuX3BoeXNpY2FsU3RhcnQ9dGhpcy5fcGh5c2ljYWxTdGFydCtyLmluZGV4ZXMubGVuZ3RoKToodGhpcy5fdmlydHVhbFN0YXJ0PXRoaXMuX3ZpcnR1YWxTdGFydC1yLmluZGV4ZXMubGVuZ3RoLHRoaXMuX3BoeXNpY2FsU3RhcnQ9dGhpcy5fcGh5c2ljYWxTdGFydC1yLmluZGV4ZXMubGVuZ3RoKSx0aGlzLl91cGRhdGUoci5pbmRleGVzLG4/bnVsbDpyLmluZGV4ZXMpLHRoaXMuX2RlYm91bmNlKCJfaW5jcmVhc2VQb29sSWZOZWVkZWQiLHRoaXMuX2luY3JlYXNlUG9vbElmTmVlZGVkLmJpbmQodGhpcywwKSxnTnQpfX0sX2dldFJldXNhYmxlczpmdW5jdGlvbih0KXt2YXIgZSxuLGkscj1bXSxvPXRoaXMuX2hpZGRlbkNvbnRlbnRTaXplKnRoaXMuX3JhdGlvLGE9dGhpcy5fdmlydHVhbFN0YXJ0LHM9dGhpcy5fdmlydHVhbEVuZCxsPXRoaXMuX3BoeXNpY2FsQ291bnQsYz10aGlzLl9waHlzaWNhbFRvcCt0aGlzLl9zY3JvbGxPZmZzZXQsdT10aGlzLl9zY3JvbGxUb3AsaD10aGlzLl9zY3JvbGxCb3R0b207Zm9yKHQ/KGU9dGhpcy5fcGh5c2ljYWxTdGFydCxuPXUtYyk6KGU9dGhpcy5fcGh5c2ljYWxFbmQsbj10aGlzLl9waHlzaWNhbEJvdHRvbSt0aGlzLl9zY3JvbGxPZmZzZXQtaCk7bi09aT10aGlzLl9nZXRQaHlzaWNhbFNpemVJbmNyZW1lbnQoZSksIShyLmxlbmd0aD49bHx8bjw9byk7KWlmKHQpe2lmKHMrci5sZW5ndGgrMT49dGhpcy5fdmlydHVhbENvdW50KWJyZWFrO2lmKGMraT49dS10aGlzLl9zY3JvbGxPZmZzZXQpYnJlYWs7ci5wdXNoKGUpLGMrPWksZT0oZSsxKSVsfWVsc2V7aWYoYS1yLmxlbmd0aDw9MClicmVhaztpZihjK3RoaXMuX3BoeXNpY2FsU2l6ZS1pPD1oKWJyZWFrO3IucHVzaChlKSxjLT1pLGU9MD09PWU/bC0xOmUtMX1yZXR1cm57aW5kZXhlczpyLHBoeXNpY2FsVG9wOmMtdGhpcy5fc2Nyb2xsT2Zmc2V0fX0sX3VwZGF0ZTpmdW5jdGlvbih0LGUpe2lmKCEodCYmMD09PXQubGVuZ3RofHwwPT09dGhpcy5fcGh5c2ljYWxDb3VudCkpe2lmKHRoaXMuX21hbmFnZUZvY3VzKCksdGhpcy5fYXNzaWduTW9kZWxzKHQpLHRoaXMuX3VwZGF0ZU1ldHJpY3ModCksZSlmb3IoO2UubGVuZ3RoOyl7dmFyIG49ZS5wb3AoKTt0aGlzLl9waHlzaWNhbFRvcC09dGhpcy5fZ2V0UGh5c2ljYWxTaXplSW5jcmVtZW50KG4pfXRoaXMuX3Bvc2l0aW9uSXRlbXMoKSx0aGlzLl91cGRhdGVTY3JvbGxlclNpemUoKX19LF9pc0NsaWVudEZ1bGw6ZnVuY3Rpb24oKXtyZXR1cm4gMCE9dGhpcy5fc2Nyb2xsQm90dG9tJiZ0aGlzLl9waHlzaWNhbEJvdHRvbS0xPj10aGlzLl9zY3JvbGxCb3R0b20mJnRoaXMuX3BoeXNpY2FsVG9wPD10aGlzLl9zY3JvbGxQb3NpdGlvbn0sX2luY3JlYXNlUG9vbElmTmVlZGVkOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2NsYW1wKHRoaXMuX3BoeXNpY2FsQ291bnQrdCwzLHRoaXMuX3ZpcnR1YWxDb3VudC10aGlzLl92aXJ0dWFsU3RhcnQpLG49KGU9dGhpcy5fY29udmVydEluZGV4VG9Db21wbGV0ZVJvdyhlKSktdGhpcy5fcGh5c2ljYWxDb3VudCxpPU1hdGgucm91bmQoLjUqdGhpcy5fcGh5c2ljYWxDb3VudCk7aWYoIShuPDApKXtpZihuPjApe3ZhciByPXdpbmRvdy5wZXJmb3JtYW5jZS5ub3coKTtbXS5wdXNoLmFwcGx5KHRoaXMuX3BoeXNpY2FsSXRlbXMsdGhpcy5fY3JlYXRlUG9vbChuKSk7Zm9yKHZhciBvPTA7bzxuO28rKyl0aGlzLl9waHlzaWNhbFNpemVzLnB1c2goMCk7dGhpcy5fcGh5c2ljYWxDb3VudD10aGlzLl9waHlzaWNhbENvdW50K24sdGhpcy5fcGh5c2ljYWxTdGFydD50aGlzLl9waHlzaWNhbEVuZCYmdGhpcy5faXNJbmRleFJlbmRlcmVkKHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXgpJiZ0aGlzLl9nZXRQaHlzaWNhbEluZGV4KHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXgpPHRoaXMuX3BoeXNpY2FsRW5kJiYodGhpcy5fcGh5c2ljYWxTdGFydD10aGlzLl9waHlzaWNhbFN0YXJ0K24pLHRoaXMuX3VwZGF0ZSgpLHRoaXMuX3RlbXBsYXRlQ29zdD0od2luZG93LnBlcmZvcm1hbmNlLm5vdygpLXIpL24saT1NYXRoLnJvdW5kKC41KnRoaXMuX3BoeXNpY2FsQ291bnQpfXRoaXMuX3ZpcnR1YWxFbmQ+PXRoaXMuX3ZpcnR1YWxDb3VudC0xfHwwPT09aXx8KHRoaXMuX2lzQ2xpZW50RnVsbCgpP3RoaXMuX3BoeXNpY2FsU2l6ZTx0aGlzLl9vcHRQaHlzaWNhbFNpemUmJnRoaXMuX2RlYm91bmNlKCJfaW5jcmVhc2VQb29sSWZOZWVkZWQiLHRoaXMuX2luY3JlYXNlUG9vbElmTmVlZGVkLmJpbmQodGhpcyx0aGlzLl9jbGFtcChNYXRoLnJvdW5kKDUwL3RoaXMuX3RlbXBsYXRlQ29zdCksMSxpKSksbU50KTp0aGlzLl9kZWJvdW5jZSgiX2luY3JlYXNlUG9vbElmTmVlZGVkIix0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZC5iaW5kKHRoaXMsaSksZ050KSl9fSxfcmVuZGVyOmZ1bmN0aW9uKCl7aWYodGhpcy5pc0F0dGFjaGVkJiZ0aGlzLl9pc1Zpc2libGUpaWYoMCE9PXRoaXMuX3BoeXNpY2FsQ291bnQpe3ZhciB0PXRoaXMuX2dldFJldXNhYmxlcyghMCk7dGhpcy5fcGh5c2ljYWxUb3A9dC5waHlzaWNhbFRvcCx0aGlzLl92aXJ0dWFsU3RhcnQ9dGhpcy5fdmlydHVhbFN0YXJ0K3QuaW5kZXhlcy5sZW5ndGgsdGhpcy5fcGh5c2ljYWxTdGFydD10aGlzLl9waHlzaWNhbFN0YXJ0K3QuaW5kZXhlcy5sZW5ndGgsdGhpcy5fdXBkYXRlKHQuaW5kZXhlcyksdGhpcy5fdXBkYXRlKCksdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQoMCl9ZWxzZSB0aGlzLl92aXJ0dWFsQ291bnQ+MCYmKHRoaXMudXBkYXRlVmlld3BvcnRCb3VuZGFyaWVzKCksdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQoMykpfSxfaXRlbXNDaGFuZ2VkOmZ1bmN0aW9uKHQpeyJpdGVtcyI9PT10LnBhdGgmJih0aGlzLl92aXJ0dWFsU3RhcnQ9MCx0aGlzLl9waHlzaWNhbFRvcD0wLHRoaXMuX3ZpcnR1YWxDb3VudD10aGlzLml0ZW1zP3RoaXMuaXRlbXMubGVuZ3RoOjAsdGhpcy5fY29sbGVjdGlvbj1udWxsLHRoaXMuX3BoeXNpY2FsSW5kZXhGb3JLZXk9e30sdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGwsdGhpcy5fcGh5c2ljYWxDb3VudD10aGlzLl9waHlzaWNhbENvdW50fHwwLHRoaXMuX3BoeXNpY2FsSXRlbXM9dGhpcy5fcGh5c2ljYWxJdGVtc3x8W10sdGhpcy5fcGh5c2ljYWxTaXplcz10aGlzLl9waHlzaWNhbFNpemVzfHxbXSx0aGlzLl9waHlzaWNhbFN0YXJ0PTAsdGhpcy5fc2Nyb2xsVG9wPnRoaXMuX3Njcm9sbE9mZnNldCYmdGhpcy5fcmVzZXRTY3JvbGxQb3NpdGlvbigwKSx0aGlzLl9yZW1vdmVGb2N1c2VkSXRlbSgpLHRoaXMuX2RlYm91bmNlKCJfcmVuZGVyIix0aGlzLl9yZW5kZXIsZk50KSl9LF9pdGVyYXRlSXRlbXM6ZnVuY3Rpb24odCxlKXt2YXIgbixpLHIsbztpZigyPT09YXJndW1lbnRzLmxlbmd0aCYmZSl7Zm9yKG89MDtvPGUubGVuZ3RoO28rKylpZihpPXRoaXMuX2NvbXB1dGVWaWR4KG49ZVtvXSksbnVsbCE9KHI9dC5jYWxsKHRoaXMsbixpKSkpcmV0dXJuIHJ9ZWxzZXtmb3Iobj10aGlzLl9waHlzaWNhbFN0YXJ0LGk9dGhpcy5fdmlydHVhbFN0YXJ0O248dGhpcy5fcGh5c2ljYWxDb3VudDtuKyssaSsrKWlmKG51bGwhPShyPXQuY2FsbCh0aGlzLG4saSkpKXJldHVybiByO2ZvcihuPTA7bjx0aGlzLl9waHlzaWNhbFN0YXJ0O24rKyxpKyspaWYobnVsbCE9KHI9dC5jYWxsKHRoaXMsbixpKSkpcmV0dXJuIHJ9fSxfY29tcHV0ZVZpZHg6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PXRoaXMuX3BoeXNpY2FsU3RhcnQ/dGhpcy5fdmlydHVhbFN0YXJ0Kyh0LXRoaXMuX3BoeXNpY2FsU3RhcnQpOnRoaXMuX3ZpcnR1YWxTdGFydCsodGhpcy5fcGh5c2ljYWxDb3VudC10aGlzLl9waHlzaWNhbFN0YXJ0KSt0fSxfdXBkYXRlTWV0cmljczpmdW5jdGlvbih0KXt6aSgpO3ZhciBlPTAsbj0wLGk9dGhpcy5fcGh5c2ljYWxBdmVyYWdlQ291bnQscj10aGlzLl9waHlzaWNhbEF2ZXJhZ2U7dGhpcy5faXRlcmF0ZUl0ZW1zKChmdW5jdGlvbih0LGkpe24rPXRoaXMuX3BoeXNpY2FsU2l6ZXNbdF0sdGhpcy5fcGh5c2ljYWxTaXplc1t0XT10aGlzLl9waHlzaWNhbEl0ZW1zW3RdLm9mZnNldEhlaWdodCxlKz10aGlzLl9waHlzaWNhbFNpemVzW3RdLHRoaXMuX3BoeXNpY2FsQXZlcmFnZUNvdW50Kz10aGlzLl9waHlzaWNhbFNpemVzW3RdPzE6MH0pLHQpLHRoaXMuZ3JpZD8odGhpcy5fdXBkYXRlR3JpZE1ldHJpY3MoKSx0aGlzLl9waHlzaWNhbFNpemU9TWF0aC5jZWlsKHRoaXMuX3BoeXNpY2FsQ291bnQvdGhpcy5faXRlbXNQZXJSb3cpKnRoaXMuX3Jvd0hlaWdodCk6KG49MT09PXRoaXMuX2l0ZW1zUGVyUm93P246TWF0aC5jZWlsKHRoaXMuX3BoeXNpY2FsQ291bnQvdGhpcy5faXRlbXNQZXJSb3cpKnRoaXMuX3Jvd0hlaWdodCx0aGlzLl9waHlzaWNhbFNpemU9dGhpcy5fcGh5c2ljYWxTaXplK2Utbix0aGlzLl9pdGVtc1BlclJvdz0xKSx0aGlzLl9waHlzaWNhbEF2ZXJhZ2VDb3VudCE9PWkmJih0aGlzLl9waHlzaWNhbEF2ZXJhZ2U9TWF0aC5yb3VuZCgocippK2UpL3RoaXMuX3BoeXNpY2FsQXZlcmFnZUNvdW50KSl9LF9wb3NpdGlvbkl0ZW1zOmZ1bmN0aW9uKCl7dGhpcy5fYWRqdXN0U2Nyb2xsUG9zaXRpb24oKTt2YXIgdD10aGlzLl9waHlzaWNhbFRvcDt0aGlzLl9pdGVyYXRlSXRlbXMoKGZ1bmN0aW9uKGUsbil7dGhpcy50cmFuc2xhdGUzZCgwLHQrInB4IiwwLHRoaXMuX3BoeXNpY2FsSXRlbXNbZV0pLHQrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbZV19KSl9LF9nZXRQaHlzaWNhbFNpemVJbmNyZW1lbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZ3JpZD90aGlzLl9jb21wdXRlVmlkeCh0KSV0aGlzLl9pdGVtc1BlclJvdyE9dGhpcy5faXRlbXNQZXJSb3ctMT8wOnRoaXMuX3Jvd0hlaWdodDp0aGlzLl9waHlzaWNhbFNpemVzW3RdfSxfYWRqdXN0U2Nyb2xsUG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgdD0wPT09dGhpcy5fdmlydHVhbFN0YXJ0P3RoaXMuX3BoeXNpY2FsVG9wOk1hdGgubWluKHRoaXMuX3Njcm9sbFBvc2l0aW9uK3RoaXMuX3BoeXNpY2FsVG9wLDApO2lmKDAhPT10KXt0aGlzLl9waHlzaWNhbFRvcD10aGlzLl9waHlzaWNhbFRvcC10O3ZhciBlPXRoaXMuX3Njcm9sbFRvcDshcE50JiZlPjAmJnRoaXMuX3Jlc2V0U2Nyb2xsUG9zaXRpb24oZS10KX19LF9yZXNldFNjcm9sbFBvc2l0aW9uOmZ1bmN0aW9uKHQpe3RoaXMuc2Nyb2xsVGFyZ2V0JiZ0Pj0wJiYodGhpcy5fc2Nyb2xsVG9wPXQsdGhpcy5fc2Nyb2xsUG9zaXRpb249dGhpcy5fc2Nyb2xsVG9wKX0sX3VwZGF0ZVNjcm9sbGVyU2l6ZTpmdW5jdGlvbih0KXt0aGlzLl9lc3RTY3JvbGxIZWlnaHQ9dGhpcy5ncmlkP3RoaXMuX3ZpcnR1YWxSb3dDb3VudCp0aGlzLl9yb3dIZWlnaHQ6dGhpcy5fcGh5c2ljYWxCb3R0b20rTWF0aC5tYXgodGhpcy5fdmlydHVhbENvdW50LXRoaXMuX3BoeXNpY2FsQ291bnQtdGhpcy5fdmlydHVhbFN0YXJ0LDApKnRoaXMuX3BoeXNpY2FsQXZlcmFnZSwoKHQ9KHQ9KHQ9dHx8MD09PXRoaXMuX3Njcm9sbEhlaWdodCl8fHRoaXMuX3Njcm9sbFBvc2l0aW9uPj10aGlzLl9lc3RTY3JvbGxIZWlnaHQtdGhpcy5fcGh5c2ljYWxTaXplKXx8dGhpcy5ncmlkJiZ0aGlzLiQuaXRlbXMuc3R5bGUuaGVpZ2h0PHRoaXMuX2VzdFNjcm9sbEhlaWdodCl8fE1hdGguYWJzKHRoaXMuX2VzdFNjcm9sbEhlaWdodC10aGlzLl9zY3JvbGxIZWlnaHQpPj10aGlzLl92aWV3cG9ydEhlaWdodCkmJih0aGlzLiQuaXRlbXMuc3R5bGUuaGVpZ2h0PXRoaXMuX2VzdFNjcm9sbEhlaWdodCsicHgiLHRoaXMuX3Njcm9sbEhlaWdodD10aGlzLl9lc3RTY3JvbGxIZWlnaHQpfSxzY3JvbGxUb0luZGV4OmZ1bmN0aW9uKHQpe2lmKCEoIm51bWJlciIhPXR5cGVvZiB0fHx0PDB8fHQ+dGhpcy5pdGVtcy5sZW5ndGgtMSkmJih6aSgpLDAhPT10aGlzLl9waHlzaWNhbENvdW50KSl7dD10aGlzLl9jbGFtcCh0LDAsdGhpcy5fdmlydHVhbENvdW50LTEpLCghdGhpcy5faXNJbmRleFJlbmRlcmVkKHQpfHx0Pj10aGlzLl9tYXhWaXJ0dWFsU3RhcnQpJiYodGhpcy5fdmlydHVhbFN0YXJ0PXRoaXMuZ3JpZD90LTIqdGhpcy5faXRlbXNQZXJSb3c6dC0xKSx0aGlzLl9tYW5hZ2VGb2N1cygpLHRoaXMuX2Fzc2lnbk1vZGVscygpLHRoaXMuX3VwZGF0ZU1ldHJpY3MoKSx0aGlzLl9waHlzaWNhbFRvcD1NYXRoLmZsb29yKHRoaXMuX3ZpcnR1YWxTdGFydC90aGlzLl9pdGVtc1BlclJvdykqdGhpcy5fcGh5c2ljYWxBdmVyYWdlO2Zvcih2YXIgZT10aGlzLl9waHlzaWNhbFN0YXJ0LG49dGhpcy5fdmlydHVhbFN0YXJ0LGk9MCxyPXRoaXMuX2hpZGRlbkNvbnRlbnRTaXplO248dCYmaTw9cjspaSs9dGhpcy5fZ2V0UGh5c2ljYWxTaXplSW5jcmVtZW50KGUpLGU9KGUrMSkldGhpcy5fcGh5c2ljYWxDb3VudCxuKys7dGhpcy5fdXBkYXRlU2Nyb2xsZXJTaXplKCEwKSx0aGlzLl9wb3NpdGlvbkl0ZW1zKCksdGhpcy5fcmVzZXRTY3JvbGxQb3NpdGlvbih0aGlzLl9waHlzaWNhbFRvcCt0aGlzLl9zY3JvbGxPZmZzZXQraSksdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQoMCksdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGx9fSxfcmVzZXRBdmVyYWdlOmZ1bmN0aW9uKCl7dGhpcy5fcGh5c2ljYWxBdmVyYWdlPTAsdGhpcy5fcGh5c2ljYWxBdmVyYWdlQ291bnQ9MH0sX3Jlc2l6ZUhhbmRsZXI6ZnVuY3Rpb24oKXt0aGlzLl9kZWJvdW5jZSgiX3JlbmRlciIsKGZ1bmN0aW9uKCl7dGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGwsdGhpcy51cGRhdGVWaWV3cG9ydEJvdW5kYXJpZXMoKSx0aGlzLl9pc1Zpc2libGU/KHRoaXMudG9nZ2xlU2Nyb2xsTGlzdGVuZXIoITApLHRoaXMuX3Jlc2V0QXZlcmFnZSgpLHRoaXMuX3JlbmRlcigpKTp0aGlzLnRvZ2dsZVNjcm9sbExpc3RlbmVyKCExKX0pLGZOdCl9LF9jb252ZXJ0SW5kZXhUb0NvbXBsZXRlUm93OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9pdGVtc1BlclJvdz10aGlzLl9pdGVtc1BlclJvd3x8MSx0aGlzLmdyaWQ/TWF0aC5jZWlsKHQvdGhpcy5faXRlbXNQZXJSb3cpKnRoaXMuX2l0ZW1zUGVyUm93OnR9LF9pc0luZGV4UmVuZGVyZWQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PXRoaXMuX3ZpcnR1YWxTdGFydCYmdDw9dGhpcy5fdmlydHVhbEVuZH0sX2dldFBoeXNpY2FsSW5kZXg6ZnVuY3Rpb24odCl7cmV0dXJuKHRoaXMuX3BoeXNpY2FsU3RhcnQrKHQtdGhpcy5fdmlydHVhbFN0YXJ0KSkldGhpcy5fcGh5c2ljYWxDb3VudH0sX2NsYW1wOmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gTWF0aC5taW4obixNYXRoLm1heChlLHQpKX0sX2RlYm91bmNlOmZ1bmN0aW9uKHQsZSxuKXt0aGlzLl9kZWJvdW5jZXJzPXRoaXMuX2RlYm91bmNlcnN8fHt9LHRoaXMuX2RlYm91bmNlcnNbdF09RW4uZGVib3VuY2UodGhpcy5fZGVib3VuY2Vyc1t0XSxuLGUuYmluZCh0aGlzKSksQ24odGhpcy5fZGVib3VuY2Vyc1t0XSl9fSk7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBWYWFkaW4gTHRkLgogICAgVGhpcyBwcm9ncmFtIGlzIGF2YWlsYWJsZSB1bmRlciBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCwgYXZhaWxhYmxlIGF0IGh0dHBzOi8vdmFhZGluLmNvbS9saWNlbnNlLwogICAgKi9jbGFzcyB5TnQgZXh0ZW5kcyBfTnR7c3RhdGljIGdldCBpcygpe3JldHVybiJ2YWFkaW4tZ3JpZC1zY3JvbGxlciJ9c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue3NpemU6e3R5cGU6TnVtYmVyLG5vdGlmeTohMH0sX3ZpZHhPZmZzZXQ6e3ZhbHVlOjB9fX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX2VmZmVjdGl2ZVNpemVDaGFuZ2VkKF9lZmZlY3RpdmVTaXplKSJdfWNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLl9zY3JvbGxIYW5kbGVyKCl9X3VwZGF0ZVNjcm9sbGVySXRlbSh0LGUpe31fYWZ0ZXJTY3JvbGwoKXt9X2dldFJvd1RhcmdldCgpe31fY3JlYXRlU2Nyb2xsZXJSb3dzKCl7fV9jYW5Qb3B1bGF0ZSgpe31zY3JvbGxUb0luZGV4KHQpe3RoaXMuX3dhcm5Qcml2YXRlQVBJQWNjZXNzKCJzY3JvbGxUb0luZGV4IiksdGhpcy5fc2Nyb2xsaW5nVG9JbmRleD0hMCx0PU1hdGgubWluKE1hdGgubWF4KHQsMCksdGhpcy5fZWZmZWN0aXZlU2l6ZS0xKSx0aGlzLiQudGFibGUuc2Nyb2xsVG9wPXQvdGhpcy5fZWZmZWN0aXZlU2l6ZSoodGhpcy4kLnRhYmxlLnNjcm9sbEhlaWdodC10aGlzLiQudGFibGUub2Zmc2V0SGVpZ2h0KSx0aGlzLl9zY3JvbGxIYW5kbGVyKCksdGhpcy5fYWNjZXNzSXJvbkxpc3RBUEkoKCgpPT50aGlzLl9tYXhTY3JvbGxUb3ApKSYmdGhpcy5fdmlydHVhbENvdW50PHRoaXMuX2VmZmVjdGl2ZVNpemUmJnRoaXMuX2FkanVzdFZpcnR1YWxJbmRleE9mZnNldCgxZTYpLHRoaXMuX2FjY2Vzc0lyb25MaXN0QVBJKCgoKT0+c3VwZXIuc2Nyb2xsVG9JbmRleCh0LXRoaXMuX3ZpZHhPZmZzZXQpKSksdGhpcy5fc2Nyb2xsSGFuZGxlcigpO2NvbnN0IGU9QXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZpbHRlcigoZT0+ZS5pbmRleD09PXQpKVswXTtpZihlKXtjb25zdCB0PWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wLXRoaXMuJC5oZWFkZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tO01hdGguYWJzKHQpPjEmJih0aGlzLiQudGFibGUuc2Nyb2xsVG9wKz10LHRoaXMuX3Njcm9sbEhhbmRsZXIoKSl9dGhpcy5fc2Nyb2xsaW5nVG9JbmRleD0hMX1fZWZmZWN0aXZlU2l6ZUNoYW5nZWQodCl7bGV0IGUsbj0wO3RoaXMuX2l0ZXJhdGVJdGVtcygoKHQsaSk9PntpZihpPT09dGhpcy5fZmlyc3RWaXNpYmxlSW5kZXgpe2NvbnN0IGk9dGhpcy5fcGh5c2ljYWxJdGVtc1t0XTtlPWkuaW5kZXgsbj1pLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcH19KSksdGhpcy5pdGVtcyYmdDx0aGlzLml0ZW1zLmxlbmd0aCYmKHRoaXMuX3Njcm9sbFRvcD0wKSxBcnJheS5pc0FycmF5KHRoaXMuaXRlbXMpfHwodGhpcy5pdGVtcz17bGVuZ3RoOk1hdGgubWluKHQsdGhpcy5fZWRnZXx8dGhpcy5faWU/M2U0OjFlNSl9KSx0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSSgoKCk9PnN1cGVyLl9pdGVtc0NoYW5nZWQoe3BhdGg6Iml0ZW1zIn0pKSksdGhpcy5fdmlydHVhbENvdW50PU1hdGgubWluKHRoaXMuaXRlbXMubGVuZ3RoLHQpfHwwLDA9PT10aGlzLl9zY3JvbGxUb3AmJih0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSSgoKCk9PnRoaXMuX3Njcm9sbFRvSW5kZXgoTWF0aC5taW4odC0xLGUpKSkpLHRoaXMuX2l0ZXJhdGVJdGVtcygoKHQsaSk9Pntjb25zdCByPXRoaXMuX3BoeXNpY2FsSXRlbXNbdF07aWYoci5pbmRleD09PWUmJih0aGlzLiQudGFibGUuc2Nyb2xsVG9wKz1NYXRoLnJvdW5kKHIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wLW4pKSxyLmluZGV4PT09dGhpcy5fZm9jdXNlZEl0ZW1JbmRleCYmdGhpcy5faXRlbXNGb2N1c2FibGUmJnRoaXMuJC5pdGVtcy5jb250YWlucyh0aGlzLnNoYWRvd1Jvb3QuYWN0aXZlRWxlbWVudCkpe2NvbnN0IHQ9QXJyYXkuZnJvbSh0aGlzLl9pdGVtc0ZvY3VzYWJsZS5wYXJlbnRFbGVtZW50LmNoaWxkcmVuKS5pbmRleE9mKHRoaXMuX2l0ZW1zRm9jdXNhYmxlKTtyLmNoaWxkcmVuW3RdLmZvY3VzKCl9fSkpKSx0aGlzLl9hc3NpZ25Nb2RlbHMoKSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCgpPT50aGlzLl91cGRhdGUoKSkpLHRoaXMuX191cGRhdGVGb290ZXJQb3NpdGlvbmluZygpLHRoaXMuX2llJiYodGhpcy4kLnRhYmxlLnN0eWxlLmRpc3BsYXk9ImJsb2NrIixzZXRUaW1lb3V0KCgoKT0+e3RoaXMuJC50YWJsZS5zdHlsZS5kaXNwbGF5PSJmbGV4Iix0aGlzLl90cmFuc2xhdGVTdGF0aW9uYXJ5RWxlbWVudHMoKX0pKSl9X3Bvc2l0aW9uSXRlbXMoKXtsZXQgdDt0aGlzLl9hZGp1c3RTY3JvbGxQb3NpdGlvbigpLGlzTmFOKHRoaXMuX3BoeXNpY2FsVG9wKSYmKHQ9ITAsdGhpcy5fcGh5c2ljYWxUb3A9MCk7bGV0IGU9dGhpcy5fcGh5c2ljYWxUb3A7dGhpcy5faXRlcmF0ZUl0ZW1zKCgodCxuKT0+e3RoaXMuX3BoeXNpY2FsSXRlbXNbdF0uc3R5bGUudHJhbnNmb3JtPWB0cmFuc2xhdGVZKCR7ZX1weClgLGUrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbdF19KSksdCYmdGhpcy5fc2Nyb2xsVG9JbmRleCgwKX1faW5jcmVhc2VQb29sSWZOZWVkZWQodCl7MD09PXQmJnRoaXMuX3Njcm9sbGluZ1RvSW5kZXh8fCF0aGlzLl9jYW5Qb3B1bGF0ZSgpfHwhdGhpcy5fZWZmZWN0aXZlU2l6ZXx8KHRoaXMuX2luaXRpYWxQb29sQ3JlYXRlZD90aGlzLl9vcHRQaHlzaWNhbFNpemUhPT0xLzAmJih0aGlzLl9kZWJvdW5jZUluY3JlYXNlUG9vbD1Fbi5kZWJvdW5jZSh0aGlzLl9kZWJvdW5jZUluY3JlYXNlUG9vbCxfdCwoKCk9Pnt0aGlzLl91cGRhdGVNZXRyaWNzKCk7bGV0IHQ9TWF0aC5jZWlsKCh0aGlzLl9vcHRQaHlzaWNhbFNpemUtdGhpcy5fcGh5c2ljYWxTaXplKS90aGlzLl9waHlzaWNhbEF2ZXJhZ2UpO3RoaXMuX3BoeXNpY2FsQ291bnQrdD50aGlzLl9lZmZlY3RpdmVTaXplJiYodD1NYXRoLm1heCgwLHRoaXMuX2VmZmVjdGl2ZVNpemUtdGhpcy5fcGh5c2ljYWxDb3VudCkpLHRoaXMuX3BoeXNpY2FsU2l6ZSYmdD4wJiZ0aGlzLl9vcHRQaHlzaWNhbFNpemUhPT0xLzAmJihzdXBlci5faW5jcmVhc2VQb29sSWZOZWVkZWQodCksdGhpcy5fX3Jlb3JkZXJDaGlsZE5vZGVzKCkpfSkpKToodGhpcy5faW5pdGlhbFBvb2xDcmVhdGVkPSEwLHN1cGVyLl9pbmNyZWFzZVBvb2xJZk5lZWRlZCgyNSkpKX1fX3Jlb3JkZXJDaGlsZE5vZGVzKCl7Y29uc3QgdD1BcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZE5vZGVzKTt0LnJlZHVjZSgoKHQsZSxuLGkpPT57aWYoMD09PW58fGlbbi0xXS5pbmRleD09PWUuaW5kZXgtMSlyZXR1cm4gdH0pLCEwKXx8dC5zb3J0KCgodCxlKT0+dC5pbmRleC1lLmluZGV4KSkuZm9yRWFjaCgodD0+dGhpcy4kLml0ZW1zLmFwcGVuZENoaWxkKHQpKSl9X2NyZWF0ZVBvb2wodCl7Y29uc3QgZT1kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksbj10aGlzLl9jcmVhdGVTY3JvbGxlclJvd3ModCk7bi5mb3JFYWNoKCh0PT5lLmFwcGVuZENoaWxkKHQpKSksdGhpcy5fZ2V0Um93VGFyZ2V0KCkuYXBwZW5kQ2hpbGQoZSk7Y29uc3QgaT10aGlzLnF1ZXJ5U2VsZWN0b3IoIltzbG90XSIpO2lmKGkpe2NvbnN0IHQ9aS5nZXRBdHRyaWJ1dGUoInNsb3QiKTtpLnNldEF0dHJpYnV0ZSgic2xvdCIsImZvby1iYXIiKSxpLnNldEF0dHJpYnV0ZSgic2xvdCIsdCl9cmV0dXJuIGtpKHRoaXMsKCgpPT50aGlzLm5vdGlmeVJlc2l6ZSgpKSksbn1fYXNzaWduTW9kZWxzKHQpe3RoaXMuX2l0ZXJhdGVJdGVtcygoKHQsZSk9Pntjb25zdCBuPXRoaXMuX3BoeXNpY2FsSXRlbXNbdF07dGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJoaWRkZW4iLGU+PXRoaXMuX2VmZmVjdGl2ZVNpemUsbiksdGhpcy5fdXBkYXRlU2Nyb2xsZXJJdGVtKG4sZSsodGhpcy5fdmlkeE9mZnNldHx8MCkpfSksdCl9X3Njcm9sbEhhbmRsZXIoKXtjb25zdCB0PXRoaXMuJC50YWJsZS5zY3JvbGxUb3AtdGhpcy5fc2Nyb2xsUG9zaXRpb247dGhpcy5fYWNjZXNzSXJvbkxpc3RBUEkoc3VwZXIuX3Njcm9sbEhhbmRsZXIpO2NvbnN0IGU9dGhpcy5fdmlkeE9mZnNldDt0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSSgoKCk9PnRoaXMuX21heFNjcm9sbFRvcCkpJiZ0aGlzLl92aXJ0dWFsQ291bnQ8dGhpcy5fZWZmZWN0aXZlU2l6ZT90aGlzLl9hZGp1c3RWaXJ0dWFsSW5kZXhPZmZzZXQodCk6dGhpcy5fdmlkeE9mZnNldD0wLHRoaXMuX3ZpZHhPZmZzZXQhPT1lJiZ0aGlzLl91cGRhdGUoKSx0aGlzLl9hZnRlclNjcm9sbCgpfV9hZGp1c3RWaXJ0dWFsSW5kZXhPZmZzZXQodCl7aWYoTWF0aC5hYnModCk+MWU0KXtpZih0aGlzLl9ub1NjYWxlKXJldHVybiB2b2lkKHRoaXMuX25vU2NhbGU9ITEpO2NvbnN0IHQ9dGhpcy4kLnRhYmxlLnNjcm9sbFRvcC8odGhpcy4kLnRhYmxlLnNjcm9sbEhlaWdodC10aGlzLiQudGFibGUub2Zmc2V0SGVpZ2h0KTt0aGlzLl92aWR4T2Zmc2V0PU1hdGgucm91bmQodCp0aGlzLl9lZmZlY3RpdmVTaXplLXQqdGhpcy5fdmlydHVhbENvdW50KX1lbHNle2NvbnN0IHQ9dGhpcy5fdmlkeE9mZnNldHx8MCxlPTFlMyxuPTEwMDswPT09dGhpcy5fc2Nyb2xsVG9wPyh0aGlzLl92aWR4T2Zmc2V0PTAsdCE9PXRoaXMuX3ZpZHhPZmZzZXQmJnN1cGVyLnNjcm9sbFRvSW5kZXgoMCkpOnRoaXMuZmlyc3RWaXNpYmxlSW5kZXg8ZSYmdGhpcy5fdmlkeE9mZnNldD4wJiYodGhpcy5fdmlkeE9mZnNldC09TWF0aC5taW4odGhpcy5fdmlkeE9mZnNldCxuKSx0IT09dGhpcy5fdmlkeE9mZnNldCYmc3VwZXIuc2Nyb2xsVG9JbmRleCh0aGlzLmZpcnN0VmlzaWJsZUluZGV4Kyh0LXRoaXMuX3ZpZHhPZmZzZXQpKSx0aGlzLl9ub1NjYWxlPSEwKTtjb25zdCBpPXRoaXMuX2VmZmVjdGl2ZVNpemUtdGhpcy5fdmlydHVhbENvdW50O3RoaXMuX3Njcm9sbFRvcD49dGhpcy5fbWF4U2Nyb2xsVG9wJiZ0aGlzLl9tYXhTY3JvbGxUb3A+MD8odGhpcy5fdmlkeE9mZnNldD1pLHQhPT10aGlzLl92aWR4T2Zmc2V0JiZzdXBlci5zY3JvbGxUb0luZGV4KHRoaXMuX3ZpcnR1YWxDb3VudCkpOnRoaXMuZmlyc3RWaXNpYmxlSW5kZXg+dGhpcy5fdmlydHVhbENvdW50LWUmJnRoaXMuX3ZpZHhPZmZzZXQ8aSYmKHRoaXMuX3ZpZHhPZmZzZXQrPU1hdGgubWluKGktdGhpcy5fdmlkeE9mZnNldCxuKSx0IT09dGhpcy5fdmlkeE9mZnNldCYmc3VwZXIuc2Nyb2xsVG9JbmRleCh0aGlzLmZpcnN0VmlzaWJsZUluZGV4LSh0aGlzLl92aWR4T2Zmc2V0LXQpKSx0aGlzLl9ub1NjYWxlPSEwKX19X2FjY2Vzc0lyb25MaXN0QVBJKHQpe3RoaXMuX3dhcm5Qcml2YXRlQVBJQWNjZXNzQXN5bmNFbmFibGVkPSExO2NvbnN0IGU9dC5hcHBseSh0aGlzKTtyZXR1cm4gdGhpcy5fZGVib3VuY2VyV2FyblByaXZhdGVBUElBY2Nlc3M9RW4uZGVib3VuY2UodGhpcy5fZGVib3VuY2VyV2FyblByaXZhdGVBUElBY2Nlc3MsX3QsKCgpPT50aGlzLl93YXJuUHJpdmF0ZUFQSUFjY2Vzc0FzeW5jRW5hYmxlZD0hMCkpLGV9X2RlYm91bmNlUmVuZGVyKHQsZSl7c3VwZXIuX2RlYm91bmNlUmVuZGVyKCgoKT0+dGhpcy5fYWNjZXNzSXJvbkxpc3RBUEkodCkpLGUpfV93YXJuUHJpdmF0ZUFQSUFjY2Vzcyh0KXt0aGlzLl93YXJuUHJpdmF0ZUFQSUFjY2Vzc0FzeW5jRW5hYmxlZCYmY29uc29sZS53YXJuKGBBY2Nlc3NpbmcgcHJpdmF0ZSBBUEkgKCR7dH0pIWApfV9yZW5kZXIoKXt0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSShzdXBlci5fcmVuZGVyKX1fY3JlYXRlRm9jdXNCYWNrZmlsbEl0ZW0oKXt9X211bHRpU2VsZWN0aW9uQ2hhbmdlZCgpe31jbGVhclNlbGVjdGlvbigpe31faXRlbXNDaGFuZ2VkKCl7fV9tYW5hZ2VGb2N1cygpe31fcmVtb3ZlRm9jdXNlZEl0ZW0oKXt9Z2V0IF9maXJzdFZpc2libGVJbmRleCgpe3JldHVybiB0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSSgoKCk9PnN1cGVyLmZpcnN0VmlzaWJsZUluZGV4KSl9Z2V0IF9sYXN0VmlzaWJsZUluZGV4KCl7cmV0dXJuIHRoaXMuX2FjY2Vzc0lyb25MaXN0QVBJKCgoKT0+c3VwZXIubGFzdFZpc2libGVJbmRleCkpfV9zY3JvbGxUb0luZGV4KHQpe3RoaXMuX2FjY2Vzc0lyb25MaXN0QVBJKCgoKT0+dGhpcy5zY3JvbGxUb0luZGV4KHQpKSl9Z2V0IGZpcnN0VmlzaWJsZUluZGV4KCl7cmV0dXJuIHRoaXMuX3dhcm5Qcml2YXRlQVBJQWNjZXNzKCJmaXJzdFZpc2libGVJbmRleCIpLHN1cGVyLmZpcnN0VmlzaWJsZUluZGV4fXNldCBmaXJzdFZpc2libGVJbmRleCh0KXt0aGlzLl93YXJuUHJpdmF0ZUFQSUFjY2VzcygiZmlyc3RWaXNpYmxlSW5kZXgiKSxzdXBlci5maXJzdFZpc2libGVJbmRleD10fWdldCBsYXN0VmlzaWJsZUluZGV4KCl7cmV0dXJuIHRoaXMuX3dhcm5Qcml2YXRlQVBJQWNjZXNzKCJsYXN0VmlzaWJsZUluZGV4Iiksc3VwZXIubGFzdFZpc2libGVJbmRleH1zZXQgbGFzdFZpc2libGVJbmRleCh0KXt0aGlzLl93YXJuUHJpdmF0ZUFQSUFjY2VzcygibGFzdFZpc2libGVJbmRleCIpLHN1cGVyLmxhc3RWaXNpYmxlSW5kZXg9dH11cGRhdGVWaWV3cG9ydEJvdW5kYXJpZXMoKXt0aGlzLl93YXJuUHJpdmF0ZUFQSUFjY2VzcygidXBkYXRlVmlld3BvcnRCb3VuZGFyaWVzIiksc3VwZXIudXBkYXRlVmlld3BvcnRCb3VuZGFyaWVzLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1fcmVzaXplSGFuZGxlcigpe3N1cGVyLl9yZXNpemVIYW5kbGVyKCksemkoKX19Y3VzdG9tRWxlbWVudHMuZGVmaW5lKHlOdC5pcyx5TnQpOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTcgVmFhZGluIEx0ZC4KICAgIFRoaXMgcHJvZ3JhbSBpcyBhdmFpbGFibGUgdW5kZXIgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAsIGF2YWlsYWJsZSBhdCBodHRwczovL3ZhYWRpbi5jb20vbGljZW5zZS8KICAgICovCmNvbnN0IHZOdD10PT5jbGFzcyBleHRlbmRzIHR7c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl9hMTF5VXBkYXRlR3JpZFNpemUoc2l6ZSwgX2NvbHVtblRyZWUsIF9jb2x1bW5UcmVlLiopIl19X2ExMXlHZXRIZWFkZXJSb3dDb3VudCh0KXtyZXR1cm4gdC5maWx0ZXIoKHQ9PnQuc29tZSgodD0+dC5faGVhZGVyVGVtcGxhdGV8fHQuaGVhZGVyUmVuZGVyZXJ8fHQucGF0aHx8dC5oZWFkZXIpKSkpLmxlbmd0aH1fYTExeUdldEZvb3RlclJvd0NvdW50KHQpe3JldHVybiB0LmZpbHRlcigodD0+dC5zb21lKCh0PT50Ll9oZWFkZXJUZW1wbGF0ZXx8dC5oZWFkZXJSZW5kZXJlcikpKSkubGVuZ3RofV9hMTF5VXBkYXRlR3JpZFNpemUodCxlKXtpZih2b2lkIDA9PT10fHx2b2lkIDA9PT1lKXJldHVybjtjb25zdCBuPWVbZS5sZW5ndGgtMV07dGhpcy4kLnRhYmxlLnNldEF0dHJpYnV0ZSgiYXJpYS1yb3djb3VudCIsdCt0aGlzLl9hMTF5R2V0SGVhZGVyUm93Q291bnQoZSkrdGhpcy5fYTExeUdldEZvb3RlclJvd0NvdW50KGUpKSx0aGlzLiQudGFibGUuc2V0QXR0cmlidXRlKCJhcmlhLWNvbGNvdW50IixuJiZuLmxlbmd0aHx8MCksdGhpcy5fYTExeVVwZGF0ZUhlYWRlclJvd3MoKSx0aGlzLl9hMTF5VXBkYXRlRm9vdGVyUm93cygpfV9hMTF5VXBkYXRlSGVhZGVyUm93cygpe0FycmF5LmZyb20odGhpcy4kLmhlYWRlci5jaGlsZHJlbikuZm9yRWFjaCgoKHQsZSk9PnQuc2V0QXR0cmlidXRlKCJhcmlhLXJvd2luZGV4IixlKzEpKSl9X2ExMXlVcGRhdGVGb290ZXJSb3dzKCl7QXJyYXkuZnJvbSh0aGlzLiQuZm9vdGVyLmNoaWxkcmVuKS5mb3JFYWNoKCgodCxlKT0+dC5zZXRBdHRyaWJ1dGUoImFyaWEtcm93aW5kZXgiLHRoaXMuX2ExMXlHZXRIZWFkZXJSb3dDb3VudCh0aGlzLl9jb2x1bW5UcmVlKSt0aGlzLnNpemUrZSsxKSkpfV9hMTF5VXBkYXRlUm93Um93aW5kZXgodCxlKXt0LnNldEF0dHJpYnV0ZSgiYXJpYS1yb3dpbmRleCIsZSt0aGlzLl9hMTF5R2V0SGVhZGVyUm93Q291bnQodGhpcy5fY29sdW1uVHJlZSkrMSl9X2ExMXlVcGRhdGVSb3dTZWxlY3RlZCh0LGUpe3Quc2V0QXR0cmlidXRlKCJhcmlhLXNlbGVjdGVkIixCb29sZWFuKGUpKSxBcnJheS5mcm9tKHQuY2hpbGRyZW4pLmZvckVhY2goKHQ9PnQuc2V0QXR0cmlidXRlKCJhcmlhLXNlbGVjdGVkIixCb29sZWFuKGUpKSkpfV9hMTF5VXBkYXRlUm93TGV2ZWwodCxlKXt0LnNldEF0dHJpYnV0ZSgiYXJpYS1sZXZlbCIsZSsxKX1fYTExeVVwZGF0ZVJvd0RldGFpbHNPcGVuZWQodCxlKXtBcnJheS5mcm9tKHQuY2hpbGRyZW4pLmZvckVhY2goKHQ9PnsiYm9vbGVhbiI9PXR5cGVvZiBlP3Quc2V0QXR0cmlidXRlKCJhcmlhLWV4cGFuZGVkIixlKTp0Lmhhc0F0dHJpYnV0ZSgiYXJpYS1leHBhbmRlZCIpJiZ0LnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1leHBhbmRlZCIpfSkpfV9hMTF5U2V0Um93RGV0YWlsc0NlbGwodCxlKXtBcnJheS5mcm9tKHQuY2hpbGRyZW4pLmZvckVhY2goKHQ9Pnt0IT09ZSYmdC5zZXRBdHRyaWJ1dGUoImFyaWEtY29udHJvbHMiLGUuaWQpfSkpfV9hMTF5VXBkYXRlQ2VsbENvbHNwYW4odCxlKXt0LnNldEF0dHJpYnV0ZSgiYXJpYS1jb2xzcGFuIixOdW1iZXIoZSkpfV9hMTF5VXBkYXRlU29ydGVycygpe0FycmF5LmZyb20odGhpcy5xdWVyeVNlbGVjdG9yQWxsKCJ2YWFkaW4tZ3JpZC1zb3J0ZXIiKSkuZm9yRWFjaCgodD0+e2xldCBlPXQucGFyZW50Tm9kZTtmb3IoO2UmJiJ2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQiIT09ZS5sb2NhbE5hbWU7KWU9ZS5wYXJlbnROb2RlO2UmJmUuYXNzaWduZWRTbG90JiZlLmFzc2lnbmVkU2xvdC5wYXJlbnROb2RlLnNldEF0dHJpYnV0ZSgiYXJpYS1zb3J0Iix7YXNjOiJhc2NlbmRpbmciLGRlc2M6ImRlc2NlbmRpbmcifVtTdHJpbmcodC5kaXJlY3Rpb24pXXx8Im5vbmUiKX0pKX19Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBWYWFkaW4gTHRkLgogICAgVGhpcyBwcm9ncmFtIGlzIGF2YWlsYWJsZSB1bmRlciBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCwgYXZhaWxhYmxlIGF0IGh0dHBzOi8vdmFhZGluLmNvbS9saWNlbnNlLwogICAgKi8sYk50PXQ9PmNsYXNzIGV4dGVuZHMgdHtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57YWN0aXZlSXRlbTp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwLHZhbHVlOm51bGx9fX1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy4kLnNjcm9sbGVyLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLl9vbkNsaWNrLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiY2VsbC1hY3RpdmF0ZSIsdGhpcy5fYWN0aXZhdGVJdGVtLmJpbmQodGhpcykpfV9hY3RpdmF0ZUl0ZW0odCl7Y29uc3QgZT10LmRldGFpbC5tb2RlbCxuPWU/ZS5pdGVtOm51bGw7biYmKHRoaXMuYWN0aXZlSXRlbT10aGlzLl9pdGVtc0VxdWFsKHRoaXMuYWN0aXZlSXRlbSxuKT9udWxsOm4pfV9vbkNsaWNrKHQpe2lmKHQuZGVmYXVsdFByZXZlbnRlZClyZXR1cm47Y29uc3QgZT10LmNvbXBvc2VkUGF0aCgpLG49ZVtlLmluZGV4T2YodGhpcy4kLnRhYmxlKS0zXTtpZighbnx8bi5nZXRBdHRyaWJ1dGUoInBhcnQiKS5pbmRleE9mKCJkZXRhaWxzLWNlbGwiKT4tMSlyZXR1cm47Y29uc3QgaT1uLl9jb250ZW50LHI9dGhpcy5nZXRSb290Tm9kZSgpLmFjdGl2ZUVsZW1lbnQ7aS5jb250YWlucyhyKSYmKCF0aGlzLl9pZXx8dGhpcy5faXNGb2N1c2FibGUocikpfHx0aGlzLl9pc0ZvY3VzYWJsZSh0LnRhcmdldCl8fHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNlbGwtYWN0aXZhdGUiLHtkZXRhaWw6e21vZGVsOnRoaXMuX19nZXRSb3dNb2RlbChuLnBhcmVudEVsZW1lbnQpfX0pKX1faXNGb2N1c2FibGUodCl7cmV0dXJuIHhOdCh0KX19LHhOdD10PT57aWYoIXQucGFyZW50Tm9kZSlyZXR1cm4hMTtjb25zdCBlPS0xIT09QXJyYXkuZnJvbSh0LnBhcmVudE5vZGUucXVlcnlTZWxlY3RvckFsbCgiW3RhYmluZGV4XSwgYnV0dG9uLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgb2JqZWN0LCBpZnJhbWUsIGxhYmVsLCBhW2hyZWZdLCBhcmVhW2hyZWZdIikpLmZpbHRlcigodD0+ImNlbGwgYm9keS1jZWxsIiE9PXQuZ2V0QXR0cmlidXRlKCJwYXJ0IikpKS5pbmRleE9mKHQpO3JldHVybiF0LmRpc2FibGVkJiZlfSx3TnQ9dD0+Y2xhc3MgZXh0ZW5kcyB0e3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntpdGVtczpBcnJheX19c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl9pdGVtc0NoYW5nZWQoaXRlbXMsIGl0ZW1zLiosIGlzQXR0YWNoZWQpIl19X2l0ZW1zQ2hhbmdlZCh0LGUsbil7aWYobil7aWYoIUFycmF5LmlzQXJyYXkodCkpcmV0dXJuIG51bGw9PXQmJih0aGlzLnNpemU9MCksdm9pZCh0aGlzLmRhdGFQcm92aWRlcj09PXRoaXMuX2FycmF5RGF0YVByb3ZpZGVyJiYodGhpcy5kYXRhUHJvdmlkZXI9dm9pZCAwKSk7dGhpcy5zaXplPXQubGVuZ3RoLHRoaXMuZGF0YVByb3ZpZGVyPXRoaXMuZGF0YVByb3ZpZGVyfHx0aGlzLl9hcnJheURhdGFQcm92aWRlcix0aGlzLmNsZWFyQ2FjaGUoKSx0aGlzLl9lbnN1cmVGaXJzdFBhZ2VMb2FkZWQoKX19X2FycmF5RGF0YVByb3ZpZGVyKHQsZSl7bGV0IG49KEFycmF5LmlzQXJyYXkodGhpcy5pdGVtcyk/dGhpcy5pdGVtczpbXSkuc2xpY2UoMCk7dGhpcy5fZmlsdGVycyYmdGhpcy5fY2hlY2tQYXRocyh0aGlzLl9maWx0ZXJzLCJmaWx0ZXJpbmciLG4pJiYobj10aGlzLl9maWx0ZXIobikpLHRoaXMuc2l6ZT1uLmxlbmd0aCx0LnNvcnRPcmRlcnMubGVuZ3RoJiZ0aGlzLl9jaGVja1BhdGhzKHRoaXMuX3NvcnRlcnMsInNvcnRpbmciLG4pJiYobj1uLnNvcnQodGhpcy5fbXVsdGlTb3J0LmJpbmQodGhpcykpKTtjb25zdCBpPXQucGFnZSp0LnBhZ2VTaXplO2Uobi5zbGljZShpLGkrdC5wYWdlU2l6ZSksbi5sZW5ndGgpfV9jaGVja1BhdGhzKHQsZSxuKXtpZighbi5sZW5ndGgpcmV0dXJuITE7bGV0IGk9ITA7Zm9yKHZhciByIGluIHQpe2NvbnN0IG89dFtyXS5wYXRoO2lmKCFvfHwtMT09PW8uaW5kZXhPZigiLiIpKWNvbnRpbnVlO2NvbnN0IGE9by5yZXBsYWNlKC9cLlteXC5dKiQvLCIiKTt2b2lkIDA9PT1wby5nZXQoYSxuWzBdKSYmKGNvbnNvbGUud2FybihgUGF0aCAiJHtvfSIgdXNlZCBmb3IgJHtlfSBkb2VzIG5vdCBleGlzdCBpbiBhbGwgb2YgdGhlIGl0ZW1zLCAke2V9IGlzIGRpc2FibGVkLmApLGk9ITEpfXJldHVybiBpfV9tdWx0aVNvcnQodCxlKXtyZXR1cm4gdGhpcy5fc29ydGVycy5tYXAoKG49PiJhc2MiPT09bi5kaXJlY3Rpb24/dGhpcy5fY29tcGFyZShwby5nZXQobi5wYXRoLHQpLHBvLmdldChuLnBhdGgsZSkpOiJkZXNjIj09PW4uZGlyZWN0aW9uP3RoaXMuX2NvbXBhcmUocG8uZ2V0KG4ucGF0aCxlKSxwby5nZXQobi5wYXRoLHQpKTowKSkucmVkdWNlKCgodCxlKT0+dHx8ZSksMCl9X25vcm1hbGl6ZUVtcHR5VmFsdWUodCl7cmV0dXJuW3ZvaWQgMCxudWxsXS5pbmRleE9mKHQpPj0wPyIiOmlzTmFOKHQpP3QudG9TdHJpbmcoKTp0fV9jb21wYXJlKHQsZSl7cmV0dXJuKHQ9dGhpcy5fbm9ybWFsaXplRW1wdHlWYWx1ZSh0KSk8KGU9dGhpcy5fbm9ybWFsaXplRW1wdHlWYWx1ZShlKSk/LTE6dD5lPzE6MH1fZmlsdGVyKHQpe3JldHVybiB0LmZpbHRlcigoKHQsZSk9PjA9PT10aGlzLl9maWx0ZXJzLmZpbHRlcigoZT0+e2NvbnN0IG49dGhpcy5fbm9ybWFsaXplRW1wdHlWYWx1ZShwby5nZXQoZS5wYXRoLHQpKSxpPXRoaXMuX25vcm1hbGl6ZUVtcHR5VmFsdWUoZS52YWx1ZSkudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpO3JldHVybi0xPT09bi50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihpKX0pKS5sZW5ndGgpKX19Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBWYWFkaW4gTHRkLgogICAgVGhpcyBwcm9ncmFtIGlzIGF2YWlsYWJsZSB1bmRlciBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCwgYXZhaWxhYmxlIGF0IGh0dHBzOi8vdmFhZGluLmNvbS9saWNlbnNlLwogICAgKi8sU050PXQ9PmNsYXNzIGV4dGVuZHMoZGkodCkpe3JlYWR5KCl7c3VwZXIucmVhZHkoKTtjb25zdCB0PXRoaXMuJC5zY3JvbGxlcjtuaSh0LCJ0cmFjayIsdGhpcy5fb25IZWFkZXJUcmFjay5iaW5kKHRoaXMpKSx0LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsKGU9PnQuaGFzQXR0cmlidXRlKCJjb2x1bW4tcmVzaXppbmciKSYmZS5wcmV2ZW50RGVmYXVsdCgpKSksdC5hZGRFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsKHQ9PiJyZXNpemUtaGFuZGxlIj09dC50YXJnZXQuZ2V0QXR0cmlidXRlKCJwYXJ0IikmJnQucHJldmVudERlZmF1bHQoKSkpLHQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwodD0+InJlc2l6ZS1oYW5kbGUiPT09dC50YXJnZXQuZ2V0QXR0cmlidXRlKCJwYXJ0IikmJnQucHJldmVudERlZmF1bHQoKSkpfV9vbkhlYWRlclRyYWNrKHQpe2NvbnN0IGU9dC50YXJnZXQ7aWYoInJlc2l6ZS1oYW5kbGUiPT09ZS5nZXRBdHRyaWJ1dGUoInBhcnQiKSl7bGV0IG89ZS5wYXJlbnRFbGVtZW50Ll9jb2x1bW47Zm9yKHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgiY29sdW1uLXJlc2l6aW5nIiwhMCx0aGlzLiQuc2Nyb2xsZXIpOyJ2YWFkaW4tZ3JpZC1jb2x1bW4tZ3JvdXAiPT09by5sb2NhbE5hbWU7KW89QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoby5fY2hpbGRDb2x1bW5zLDApLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuX29yZGVyLWUuX29yZGVyfSkpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIXQuaGlkZGVufSkpLnBvcCgpO2NvbnN0IGE9QXJyYXkuZnJvbSh0aGlzLiQuaGVhZGVyLnF1ZXJ5U2VsZWN0b3JBbGwoJ1twYXJ0fj0icm93Il06bGFzdC1jaGlsZCBbcGFydH49ImNlbGwiXScpKTt2YXIgbj1hLmZpbHRlcigodD0+dC5fY29sdW1uPT09bykpWzBdO2lmKG4ub2Zmc2V0V2lkdGgpe3ZhciBpPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKG4pLHI9MTArcGFyc2VJbnQoaS5wYWRkaW5nTGVmdCkrcGFyc2VJbnQoaS5wYWRkaW5nUmlnaHQpK3BhcnNlSW50KGkuYm9yZGVyTGVmdFdpZHRoKStwYXJzZUludChpLmJvcmRlclJpZ2h0V2lkdGgpK3BhcnNlSW50KGkubWFyZ2luTGVmdCkrcGFyc2VJbnQoaS5tYXJnaW5SaWdodCk7Y29uc3QgZT1uLm9mZnNldFdpZHRoKyh0aGlzLl9faXNSVEw/bi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0LXQuZGV0YWlsLng6dC5kZXRhaWwueC1uLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnJpZ2h0KTtvLndpZHRoPU1hdGgubWF4KHIsZSkrInB4IixvLmZsZXhHcm93PTB9YS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0Ll9jb2x1bW4uX29yZGVyLWUuX2NvbHVtbi5fb3JkZXJ9KSkuZm9yRWFjaCgoZnVuY3Rpb24odCxlLGkpe2U8aS5pbmRleE9mKG4pJiYodC5fY29sdW1uLndpZHRoPXQub2Zmc2V0V2lkdGgrInB4Iix0Ll9jb2x1bW4uZmxleEdyb3c9MCl9KSksImVuZCI9PT10LmRldGFpbC5zdGF0ZSYmKHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgiY29sdW1uLXJlc2l6aW5nIiwhMSx0aGlzLiQuc2Nyb2xsZXIpLHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNvbHVtbi1yZXNpemUiLHtkZXRhaWw6e3Jlc2l6ZWRDb2x1bW46b319KSkpLHRoaXMuX3Jlc2l6ZUhhbmRsZXIoKX19fQovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTcgVmFhZGluIEx0ZC4KICAgIFRoaXMgcHJvZ3JhbSBpcyBhdmFpbGFibGUgdW5kZXIgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAsIGF2YWlsYWJsZSBhdCBodHRwczovL3ZhYWRpbi5jb20vbGljZW5zZS8KICAgICovLE1OdD1jbGFzcyB0e2NvbnN0cnVjdG9yKHQsZSxuKXt0aGlzLmdyaWQ9dCx0aGlzLnBhcmVudENhY2hlPWUsdGhpcy5wYXJlbnRJdGVtPW4sdGhpcy5pdGVtQ2FjaGVzPXt9LHRoaXMuaXRlbXM9e30sdGhpcy5lZmZlY3RpdmVTaXplPTAsdGhpcy5zaXplPTAsdGhpcy5wZW5kaW5nUmVxdWVzdHM9e319aXNMb2FkaW5nKCl7cmV0dXJuIEJvb2xlYW4oT2JqZWN0LmtleXModGhpcy5wZW5kaW5nUmVxdWVzdHMpLmxlbmd0aHx8T2JqZWN0LmtleXModGhpcy5pdGVtQ2FjaGVzKS5maWx0ZXIoKHQ9PnRoaXMuaXRlbUNhY2hlc1t0XS5pc0xvYWRpbmcoKSkpWzBdKX1nZXRJdGVtRm9ySW5kZXgodCl7Y29uc3R7Y2FjaGU6ZSxzY2FsZWRJbmRleDpufT10aGlzLmdldENhY2hlQW5kSW5kZXgodCk7cmV0dXJuIGUuaXRlbXNbbl19dXBkYXRlU2l6ZSgpe3RoaXMuZWZmZWN0aXZlU2l6ZT0hdGhpcy5wYXJlbnRJdGVtfHx0aGlzLmdyaWQuX2lzRXhwYW5kZWQodGhpcy5wYXJlbnRJdGVtKT90aGlzLnNpemUrT2JqZWN0LmtleXModGhpcy5pdGVtQ2FjaGVzKS5yZWR1Y2UoKCh0LGUpPT57Y29uc3Qgbj10aGlzLml0ZW1DYWNoZXNbZV07cmV0dXJuIG4udXBkYXRlU2l6ZSgpLHQrbi5lZmZlY3RpdmVTaXplfSksMCk6MH1lbnN1cmVTdWJDYWNoZUZvclNjYWxlZEluZGV4KGUpe2lmKCF0aGlzLml0ZW1DYWNoZXNbZV0pe2NvbnN0IG49bmV3IHQodGhpcy5ncmlkLHRoaXMsdGhpcy5pdGVtc1tlXSk7dGhpcy5pdGVtQ2FjaGVzW2VdPW4sdGhpcy5ncmlkLl9sb2FkUGFnZSgwLG4pfX1nZXRDYWNoZUFuZEluZGV4KHQpe2xldCBlPXQ7Y29uc3Qgbj1PYmplY3Qua2V5cyh0aGlzLml0ZW1DYWNoZXMpO2Zvcih2YXIgaT0wO2k8bi5sZW5ndGg7aSsrKXtjb25zdCB0PU51bWJlcihuW2ldKSxyPXRoaXMuaXRlbUNhY2hlc1t0XTtpZihlPD10KXJldHVybntjYWNoZTp0aGlzLHNjYWxlZEluZGV4OmV9O2lmKGU8PXQrci5lZmZlY3RpdmVTaXplKXJldHVybiByLmdldENhY2hlQW5kSW5kZXgoZS10LTEpO2UtPXIuZWZmZWN0aXZlU2l6ZX1yZXR1cm57Y2FjaGU6dGhpcyxzY2FsZWRJbmRleDplfX19LEVOdD10PT5jbGFzcyBleHRlbmRzIHR7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue3BhZ2VTaXplOnt0eXBlOk51bWJlcix2YWx1ZTo1MCxvYnNlcnZlcjoiX3BhZ2VTaXplQ2hhbmdlZCJ9LGRhdGFQcm92aWRlcjp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwLG9ic2VydmVyOiJfZGF0YVByb3ZpZGVyQ2hhbmdlZCJ9LGxvYWRpbmc6e3R5cGU6Qm9vbGVhbixub3RpZnk6ITAscmVhZE9ubHk6ITAscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxfY2FjaGU6e3R5cGU6T2JqZWN0LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBNTnQodGhpcyl9fSxpdGVtSWRQYXRoOnt0eXBlOlN0cmluZyx2YWx1ZTpudWxsfSxleHBhbmRlZEl0ZW1zOnt0eXBlOk9iamVjdCxub3RpZnk6ITAsdmFsdWU6KCk9PltdfX19c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl9zaXplQ2hhbmdlZChzaXplKSIsIl9pdGVtSWRQYXRoQ2hhbmdlZChpdGVtSWRQYXRoKSIsIl9leHBhbmRlZEl0ZW1zQ2hhbmdlZChleHBhbmRlZEl0ZW1zLiopIl19X3NpemVDaGFuZ2VkKHQpe2NvbnN0IGU9dC10aGlzLl9jYWNoZS5zaXplO3RoaXMuX2NhY2hlLnNpemUrPWUsdGhpcy5fY2FjaGUuZWZmZWN0aXZlU2l6ZSs9ZSx0aGlzLl9lZmZlY3RpdmVTaXplPXRoaXMuX2NhY2hlLmVmZmVjdGl2ZVNpemUsdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQoMCksdGhpcy5fZGVib3VuY2VJbmNyZWFzZVBvb2wmJnRoaXMuX2RlYm91bmNlSW5jcmVhc2VQb29sLmZsdXNoKCl9X2dldEl0ZW0odCxlKXtpZih0Pj10aGlzLl9lZmZlY3RpdmVTaXplKXJldHVybjtlLmluZGV4PXQ7Y29uc3R7Y2FjaGU6bixzY2FsZWRJbmRleDppfT10aGlzLl9jYWNoZS5nZXRDYWNoZUFuZEluZGV4KHQpLHI9bi5pdGVtc1tpXTtyPyh0aGlzLl90b2dnbGVBdHRyaWJ1dGUoImxvYWRpbmciLCExLGUpLHRoaXMuX3VwZGF0ZUl0ZW0oZSxyKSx0aGlzLl9pc0V4cGFuZGVkKHIpJiZuLmVuc3VyZVN1YkNhY2hlRm9yU2NhbGVkSW5kZXgoaSkpOih0aGlzLl90b2dnbGVBdHRyaWJ1dGUoImxvYWRpbmciLCEwLGUpLHRoaXMuX2xvYWRQYWdlKHRoaXMuX2dldFBhZ2VGb3JJbmRleChpKSxuKSl9X2V4cGFuZGVkSW5zdGFuY2VDaGFuZ2VkQ2FsbGJhY2sodCxlKXt2b2lkIDAhPT10Lml0ZW0mJihlP3RoaXMuZXhwYW5kSXRlbSh0Lml0ZW0pOnRoaXMuY29sbGFwc2VJdGVtKHQuaXRlbSkpfWdldEl0ZW1JZCh0KXtyZXR1cm4gdGhpcy5pdGVtSWRQYXRoP3RoaXMuZ2V0KHRoaXMuaXRlbUlkUGF0aCx0KTp0fV9pc0V4cGFuZGVkKHQpe3JldHVybiB0aGlzLl9fZXhwYW5kZWRLZXlzLmhhcyh0aGlzLmdldEl0ZW1JZCh0KSl9X2V4cGFuZGVkSXRlbXNDaGFuZ2VkKHQpe3RoaXMuX19jYWNoZUV4cGFuZGVkS2V5cygpLHRoaXMuX2NhY2hlLnVwZGF0ZVNpemUoKSx0aGlzLl9lZmZlY3RpdmVTaXplPXRoaXMuX2NhY2hlLmVmZmVjdGl2ZVNpemUsdGhpcy5fYXNzaWduTW9kZWxzKCl9X2l0ZW1JZFBhdGhDaGFuZ2VkKHQpe3RoaXMuX19jYWNoZUV4cGFuZGVkS2V5cygpfV9fY2FjaGVFeHBhbmRlZEtleXMoKXt0aGlzLmV4cGFuZGVkSXRlbXMmJih0aGlzLl9fZXhwYW5kZWRLZXlzPW5ldyBTZXQsdGhpcy5leHBhbmRlZEl0ZW1zLmZvckVhY2goKHQ9Pnt0aGlzLl9fZXhwYW5kZWRLZXlzLmFkZCh0aGlzLmdldEl0ZW1JZCh0KSl9KSkpfWV4cGFuZEl0ZW0odCl7dGhpcy5faXNFeHBhbmRlZCh0KXx8dGhpcy5wdXNoKCJleHBhbmRlZEl0ZW1zIix0KX1jb2xsYXBzZUl0ZW0odCl7dGhpcy5faXNFeHBhbmRlZCh0KSYmdGhpcy5zcGxpY2UoImV4cGFuZGVkSXRlbXMiLHRoaXMuX2dldEl0ZW1JbmRleEluQXJyYXkodCx0aGlzLmV4cGFuZGVkSXRlbXMpLDEpfV9nZXRJbmRleExldmVsKHQpe2xldHtjYWNoZTplfT10aGlzLl9jYWNoZS5nZXRDYWNoZUFuZEluZGV4KHQpLG49MDtmb3IoO2UucGFyZW50Q2FjaGU7KWU9ZS5wYXJlbnRDYWNoZSxuKys7cmV0dXJuIG59X2NhblBvcHVsYXRlKCl7cmV0dXJuIEJvb2xlYW4odGhpcy5faGFzRGF0YSYmdGhpcy5fY29sdW1uVHJlZSl9X2xvYWRQYWdlKHQsZSl7aWYoIWUucGVuZGluZ1JlcXVlc3RzW3RdJiZ0aGlzLmRhdGFQcm92aWRlcil7dGhpcy5fc2V0TG9hZGluZyghMCksZS5wZW5kaW5nUmVxdWVzdHNbdF09ITA7Y29uc3Qgbj17cGFnZTp0LHBhZ2VTaXplOnRoaXMucGFnZVNpemUsc29ydE9yZGVyczp0aGlzLl9tYXBTb3J0ZXJzKCksZmlsdGVyczp0aGlzLl9tYXBGaWx0ZXJzKCkscGFyZW50SXRlbTplLnBhcmVudEl0ZW19O3RoaXMuX2RlYm91bmNlSW5jcmVhc2VQb29sJiZ0aGlzLl9kZWJvdW5jZUluY3JlYXNlUG9vbC5mbHVzaCgpLHRoaXMuZGF0YVByb3ZpZGVyKG4sKChpLHIpPT57dm9pZCAwIT09cj9lLnNpemU9cjpuLnBhcmVudEl0ZW0mJihlLnNpemU9aS5sZW5ndGgpO2NvbnN0IG89QXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLm1hcCgodD0+dC5faXRlbSkpO2kuZm9yRWFjaCgoKG4saSk9Pntjb25zdCByPXQqdGhpcy5wYWdlU2l6ZStpO2UuaXRlbXNbcl09bix0aGlzLl9pc0V4cGFuZGVkKG4pJiZvLmluZGV4T2Yobik+LTEmJmUuZW5zdXJlU3ViQ2FjaGVGb3JTY2FsZWRJbmRleChyKX0pKSx0aGlzLl9oYXNEYXRhPSEwLGRlbGV0ZSBlLnBlbmRpbmdSZXF1ZXN0c1t0XSx0aGlzLl9kZWJvdW5jZXJBcHBseUNhY2hlZERhdGE9RW4uZGVib3VuY2UodGhpcy5fZGVib3VuY2VyQXBwbHlDYWNoZWREYXRhLGd0LmFmdGVyKDApLCgoKT0+e3RoaXMuX3NldExvYWRpbmcoITEpLHRoaXMuX2NhY2hlLnVwZGF0ZVNpemUoKSx0aGlzLl9lZmZlY3RpdmVTaXplPXRoaXMuX2NhY2hlLmVmZmVjdGl2ZVNpemUsQXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZpbHRlcigodD0+IXQuaGlkZGVuKSkuZm9yRWFjaCgodD0+e3RoaXMuX2NhY2hlLmdldEl0ZW1Gb3JJbmRleCh0LmluZGV4KSYmdGhpcy5fZ2V0SXRlbSh0LmluZGV4LHQpfSkpLHRoaXMuX2luY3JlYXNlUG9vbElmTmVlZGVkKDApLHRoaXMuX19zY3JvbGxUb1BlbmRpbmdJbmRleCgpfSkpLHRoaXMuX2NhY2hlLmlzTG9hZGluZygpfHx0aGlzLl9kZWJvdW5jZXJBcHBseUNhY2hlZERhdGEuZmx1c2goKSx0aGlzLl9faXRlbXNSZWNlaXZlZCgpfSkpfX1fZ2V0UGFnZUZvckluZGV4KHQpe3JldHVybiBNYXRoLmZsb29yKHQvdGhpcy5wYWdlU2l6ZSl9Y2xlYXJDYWNoZSgpe3RoaXMuX2NhY2hlPW5ldyBNTnQodGhpcyksQXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZvckVhY2goKHQ9PntBcnJheS5mcm9tKHQuY2hpbGRyZW4pLmZvckVhY2goKHQ9Pnt0Ll9pbnN0YW5jZSYmdC5faW5zdGFuY2UuX3NldFBlbmRpbmdQcm9wZXJ0eSgiaXRlbSIse30sITEpfSkpfSkpLHRoaXMuX2NhY2hlLnNpemU9dGhpcy5zaXplfHwwLHRoaXMuX2NhY2hlLnVwZGF0ZVNpemUoKSx0aGlzLl9oYXNEYXRhPSExLHRoaXMuX2Fzc2lnbk1vZGVscygpLHRoaXMuX2VmZmVjdGl2ZVNpemUmJnRoaXMuX2luaXRpYWxQb29sQ3JlYXRlZHx8dGhpcy5fbG9hZFBhZ2UoMCx0aGlzLl9jYWNoZSl9X3BhZ2VTaXplQ2hhbmdlZCh0LGUpe3ZvaWQgMCE9PWUmJnQhPT1lJiZ0aGlzLmNsZWFyQ2FjaGUoKX1fY2hlY2tTaXplKCl7dm9pZCAwPT09dGhpcy5zaXplJiYwPT09dGhpcy5fZWZmZWN0aXZlU2l6ZSYmY29uc29sZS53YXJuKCJUaGUgPHZhYWRpbi1ncmlkPiBuZWVkcyB0aGUgdG90YWwgbnVtYmVyIG9mIGl0ZW1zIGluIG9yZGVyIHRvIGRpc3BsYXkgcm93cy4gU2V0IHRoZSB0b3RhbCBudW1iZXIgb2YgaXRlbXMgdG8gdGhlIGBzaXplYCBwcm9wZXJ0eSwgb3IgcHJvdmlkZSB0aGUgdG90YWwgbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBzZWNvbmQgYXJndW1lbnQgb2YgdGhlIGBkYXRhUHJvdmlkZXJg4oCZcyBgY2FsbGJhY2tgIGNhbGwuIil9X2RhdGFQcm92aWRlckNoYW5nZWQodCxlKXt2b2lkIDAhPT1lJiZ0aGlzLmNsZWFyQ2FjaGUoKSx0JiZ0aGlzLml0ZW1zJiZ0aGlzLml0ZW1zLmxlbmd0aCYmdGhpcy5fc2Nyb2xsVG9JbmRleCh0aGlzLl9maXJzdFZpc2libGVJbmRleCksdGhpcy5fZW5zdXJlRmlyc3RQYWdlTG9hZGVkKCksdGhpcy5fZGVib3VuY2VyQ2hlY2tTaXplPUVuLmRlYm91bmNlKHRoaXMuX2RlYm91bmNlckNoZWNrU2l6ZSxndC5hZnRlcigyZTMpLHRoaXMuX2NoZWNrU2l6ZS5iaW5kKHRoaXMpKSx0aGlzLl9zY3JvbGxIYW5kbGVyKCl9X2Vuc3VyZUZpcnN0UGFnZUxvYWRlZCgpe3RoaXMuX2hhc0RhdGF8fHRoaXMuX2xvYWRQYWdlKDAsdGhpcy5fY2FjaGUpfV9pdGVtc0VxdWFsKHQsZSl7cmV0dXJuIHRoaXMuZ2V0SXRlbUlkKHQpPT09dGhpcy5nZXRJdGVtSWQoZSl9X2dldEl0ZW1JbmRleEluQXJyYXkodCxlKXtsZXQgbj0tMTtyZXR1cm4gZS5mb3JFYWNoKCgoZSxpKT0+e3RoaXMuX2l0ZW1zRXF1YWwoZSx0KSYmKG49aSl9KSksbn1zY3JvbGxUb0luZGV4KHQpe3N1cGVyLnNjcm9sbFRvSW5kZXgodCksaXNOYU4odCl8fCF0aGlzLl9jYWNoZS5pc0xvYWRpbmcoKSYmdGhpcy5jbGllbnRIZWlnaHR8fCh0aGlzLl9fcGVuZGluZ1Njcm9sbFRvSW5kZXg9dCl9X19zY3JvbGxUb1BlbmRpbmdJbmRleCgpe2lmKHRoaXMuX19wZW5kaW5nU2Nyb2xsVG9JbmRleCYmdGhpcy4kLml0ZW1zLmNoaWxkcmVuLmxlbmd0aCl7Y29uc3QgdD10aGlzLl9fcGVuZGluZ1Njcm9sbFRvSW5kZXg7ZGVsZXRlIHRoaXMuX19wZW5kaW5nU2Nyb2xsVG9JbmRleCx0aGlzLl9kZWJvdW5jZUluY3JlYXNlUG9vbCYmdGhpcy5fZGVib3VuY2VJbmNyZWFzZVBvb2wuZmx1c2goKSx0aGlzLnNjcm9sbFRvSW5kZXgodCl9fX0KLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE3IFZhYWRpbiBMdGQuCiAgICBUaGlzIHByb2dyYW0gaXMgYXZhaWxhYmxlIHVuZGVyIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wLCBhdmFpbGFibGUgYXQgaHR0cHM6Ly92YWFkaW4uY29tL2xpY2Vuc2UvCiAgICAqLyxUTnQ9dD0+Y2xhc3MgZXh0ZW5kcyB0e3JlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLl9hZGROb2RlT2JzZXJ2ZXIoKX1faGFzQ29sdW1uR3JvdXBzKHQpe2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKWlmKCJ2YWFkaW4tZ3JpZC1jb2x1bW4tZ3JvdXAiPT09dFtlXS5sb2NhbE5hbWUpcmV0dXJuITA7cmV0dXJuITF9X2dldENoaWxkQ29sdW1ucyh0KXtyZXR1cm4gUmkuZ2V0RmxhdHRlbmVkTm9kZXModCkuZmlsdGVyKHRoaXMuX2lzQ29sdW1uRWxlbWVudCl9X2ZsYXR0ZW5Db2x1bW5Hcm91cHModCl7cmV0dXJuIHQubWFwKCh0PT4idmFhZGluLWdyaWQtY29sdW1uLWdyb3VwIj09PXQubG9jYWxOYW1lP3RoaXMuX2dldENoaWxkQ29sdW1ucyh0KTpbdF0pKS5yZWR1Y2UoKCh0LGUpPT50LmNvbmNhdChlKSksW10pfV9nZXRDb2x1bW5UcmVlKCl7Zm9yKHZhciB0PVtdLGU9UmkuZ2V0RmxhdHRlbmVkTm9kZXModGhpcykuZmlsdGVyKHRoaXMuX2lzQ29sdW1uRWxlbWVudCk7dC5wdXNoKGUpLHRoaXMuX2hhc0NvbHVtbkdyb3VwcyhlKTspZT10aGlzLl9mbGF0dGVuQ29sdW1uR3JvdXBzKGUpO3JldHVybiB0fV91cGRhdGVDb2x1bW5UcmVlKCl7dmFyIHQ9dGhpcy5fZ2V0Q29sdW1uVHJlZSgpO3RoaXMuX2FycmF5RXF1YWxzKHQsdGhpcy5fY29sdW1uVHJlZSl8fCh0aGlzLl9jb2x1bW5UcmVlPXQpfV9hZGROb2RlT2JzZXJ2ZXIoKXt0aGlzLl9vYnNlcnZlcj1uZXcgUmkodGhpcywodD0+e2NvbnN0IGU9dC5hZGRlZE5vZGVzLmZpbHRlcigodD0+InRlbXBsYXRlIj09PXQubG9jYWxOYW1lJiZ0LmNsYXNzTGlzdC5jb250YWlucygicm93LWRldGFpbHMiKSkpWzBdO2UmJnRoaXMuX3Jvd0RldGFpbHNUZW1wbGF0ZSE9PWUmJih0aGlzLl9yb3dEZXRhaWxzVGVtcGxhdGU9ZSk7Y29uc3Qgbj10PT50LmZpbHRlcih0aGlzLl9pc0NvbHVtbkVsZW1lbnQpLmxlbmd0aD4wO2lmKG4odC5hZGRlZE5vZGVzKXx8bih0LnJlbW92ZWROb2Rlcykpe2NvbnN0IGU9dC5yZW1vdmVkTm9kZXMucmVkdWNlKCgodCxlKT0+dC5jb25jYXQoZS5fYWxsQ2VsbHMpKSxbXSksbj10PT5lLmZpbHRlcigoZT0+ZS5fY29udGVudC5jb250YWlucyh0KSkpLmxlbmd0aDt0aGlzLl9fcmVtb3ZlU29ydGVycyh0aGlzLl9zb3J0ZXJzLmZpbHRlcihuKSksdGhpcy5fX3JlbW92ZUZpbHRlcnModGhpcy5fZmlsdGVycy5maWx0ZXIobikpLHRoaXMuX3VwZGF0ZUNvbHVtblRyZWUoKX10aGlzLl9kZWJvdW5jZXJDaGVja0ltcG9ydHM9RW4uZGVib3VuY2UodGhpcy5fZGVib3VuY2VyQ2hlY2tJbXBvcnRzLGd0LmFmdGVyKDJlMyksdGhpcy5fY2hlY2tJbXBvcnRzLmJpbmQodGhpcykpLHRoaXMuX2Vuc3VyZUZpcnN0UGFnZUxvYWRlZCgpfSkpfV9hcnJheUVxdWFscyh0LGUpe2lmKCF0fHwhZXx8dC5sZW5ndGghPWUubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgbj0wLGk9dC5sZW5ndGg7bjxpO24rKylpZih0W25daW5zdGFuY2VvZiBBcnJheSYmZVtuXWluc3RhbmNlb2YgQXJyYXkpe2lmKCF0aGlzLl9hcnJheUVxdWFscyh0W25dLGVbbl0pKXJldHVybiExfWVsc2UgaWYodFtuXSE9ZVtuXSlyZXR1cm4hMTtyZXR1cm4hMH1fY2hlY2tJbXBvcnRzKCl7WyJ2YWFkaW4tZ3JpZC1jb2x1bW4tZ3JvdXAiLCJ2YWFkaW4tZ3JpZC1maWx0ZXIiLCJ2YWFkaW4tZ3JpZC1maWx0ZXItY29sdW1uIiwidmFhZGluLWdyaWQtdHJlZS10b2dnbGUiLCJ2YWFkaW4tZ3JpZC1zZWxlY3Rpb24tY29sdW1uIiwidmFhZGluLWdyaWQtc29ydC1jb2x1bW4iLCJ2YWFkaW4tZ3JpZC1zb3J0ZXIiXS5mb3JFYWNoKCh0PT57dmFyIGU9dGhpcy5xdWVyeVNlbGVjdG9yKHQpOyFlfHxlIGluc3RhbmNlb2YgeWV8fGNvbnNvbGUud2FybihgTWFrZSBzdXJlIHlvdSBoYXZlIGltcG9ydGVkIHRoZSByZXF1aXJlZCBtb2R1bGUgZm9yIDwke3R9PiBlbGVtZW50LmApfSkpfV91cGRhdGVGaXJzdEFuZExhc3RDb2x1bW4oKXtBcnJheS5mcm9tKHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCJ0ciIpKS5mb3JFYWNoKCh0PT50aGlzLl91cGRhdGVGaXJzdEFuZExhc3RDb2x1bW5Gb3JSb3codCkpKX1fdXBkYXRlRmlyc3RBbmRMYXN0Q29sdW1uRm9yUm93KHQpe0FycmF5LmZyb20odC5xdWVyeVNlbGVjdG9yQWxsKCdbcGFydH49ImNlbGwiXTpub3QoW3BhcnR+PSJkZXRhaWxzLWNlbGwiXSknKSkuc29ydCgoKHQsZSk9PnQuX2NvbHVtbi5fb3JkZXItZS5fY29sdW1uLl9vcmRlcikpLmZvckVhY2goKCh0LGUsbik9Pnt0aGlzLl90b2dnbGVBdHRyaWJ1dGUoImZpcnN0LWNvbHVtbiIsMD09PWUsdCksdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJsYXN0LWNvbHVtbiIsZT09PW4ubGVuZ3RoLTEsdCl9KSl9X2lzQ29sdW1uRWxlbWVudCh0KXtyZXR1cm4gdC5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFJiYvXGJjb2x1bW5cYi8udGVzdCh0LmxvY2FsTmFtZSl9fQovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTggVmFhZGluIEx0ZC4KICAgIFRoaXMgcHJvZ3JhbSBpcyBhdmFpbGFibGUgdW5kZXIgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAsIGF2YWlsYWJsZSBhdCBodHRwczovL3ZhYWRpbi5jb20vbGljZW5zZS8KICAgICovLENOdD10PT5jbGFzcyBleHRlbmRzIHR7Z2V0RXZlbnRDb250ZXh0KHQpe2NvbnN0IGU9e30sbj10LmNvbXBvc2VkUGF0aCgpLGk9bltuLmluZGV4T2YodGhpcy4kLnRhYmxlKS0zXTtyZXR1cm4gaT8oZS5zZWN0aW9uPVsiYm9keSIsImhlYWRlciIsImZvb3RlciIsImRldGFpbHMiXS5maWx0ZXIoKHQ9PmkuZ2V0QXR0cmlidXRlKCJwYXJ0IikuaW5kZXhPZih0KT4tMSkpWzBdLGkuX2NvbHVtbiYmKGUuY29sdW1uPWkuX2NvbHVtbiksImJvZHkiIT09ZS5zZWN0aW9uJiYiZGV0YWlscyIhPT1lLnNlY3Rpb258fE9iamVjdC5hc3NpZ24oZSx0aGlzLl9fZ2V0Um93TW9kZWwoaS5wYXJlbnRFbGVtZW50KSksZSk6ZX19Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBWYWFkaW4gTHRkLgogICAgVGhpcyBwcm9ncmFtIGlzIGF2YWlsYWJsZSB1bmRlciBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCwgYXZhaWxhYmxlIGF0IGh0dHBzOi8vdmFhZGluLmNvbS9saWNlbnNlLwogICAgKi8sQU50PXQ9PmNsYXNzIGV4dGVuZHMgdHtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57X2ZpbHRlcnM6e3R5cGU6QXJyYXksdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19fX1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJmaWx0ZXItY2hhbmdlZCIsdGhpcy5fZmlsdGVyQ2hhbmdlZC5iaW5kKHRoaXMpKX1fZmlsdGVyQ2hhbmdlZCh0KXt0LnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuX19hZGRGaWx0ZXIodC50YXJnZXQpLHRoaXMuX19hcHBseUZpbHRlcnMoKX1fX3JlbW92ZUZpbHRlcnModCl7MCE9dC5sZW5ndGgmJih0aGlzLl9maWx0ZXJzPXRoaXMuX2ZpbHRlcnMuZmlsdGVyKChlPT50LmluZGV4T2YoZSk8MCkpLHRoaXMuX19hcHBseUZpbHRlcnMoKSl9X19hZGRGaWx0ZXIodCl7LTE9PT10aGlzLl9maWx0ZXJzLmluZGV4T2YodCkmJnRoaXMuX2ZpbHRlcnMucHVzaCh0KX1fX2FwcGx5RmlsdGVycygpe3RoaXMuZGF0YVByb3ZpZGVyJiZ0aGlzLmlzQXR0YWNoZWQmJnRoaXMuY2xlYXJDYWNoZSgpfV9tYXBGaWx0ZXJzKCl7cmV0dXJuIHRoaXMuX2ZpbHRlcnMubWFwKCh0PT4oe3BhdGg6dC5wYXRoLHZhbHVlOnQudmFsdWV9KSkpfX0KLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE3IFZhYWRpbiBMdGQuCiAgICBUaGlzIHByb2dyYW0gaXMgYXZhaWxhYmxlIHVuZGVyIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wLCBhdmFpbGFibGUgYXQgaHR0cHM6Ly92YWFkaW4uY29tL2xpY2Vuc2UvCiAgICAqLztjbGFzcyBrTnQgZXh0ZW5kcyBjbGFzcyBleHRlbmRzIHlle317c3RhdGljIGdldCBpcygpe3JldHVybiJ2YWFkaW4tZ3JpZC10ZW1wbGF0aXplciJ9c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue2RhdGFIb3N0Ok9iamVjdCx0ZW1wbGF0ZTpPYmplY3QsX3RlbXBsYXRlSW5zdGFuY2VzOnt0eXBlOkFycmF5LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuW119fSxfcGFyZW50UGF0aFZhbHVlczp7dmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm57fX19LF9ncmlkOk9iamVjdH19c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl90ZW1wbGF0ZUluc3RhbmNlc0NoYW5nZWQoX3RlbXBsYXRlSW5zdGFuY2VzLiosIF9wYXJlbnRQYXRoVmFsdWVzLiopIl19Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX2luc3RhbmNlUHJvcHM9e2RldGFpbHNPcGVuZWQ6ITAsaW5kZXg6ITAsaXRlbTohMCxzZWxlY3RlZDohMCxleHBhbmRlZDohMCxsZXZlbDohMH19Y3JlYXRlSW5zdGFuY2UoKXt0aGlzLl9lbnN1cmVUZW1wbGF0aXplZCgpO2NvbnN0IHQ9bmV3IHRoaXMuX1RlbXBsYXRlQ2xhc3Moe30pO3JldHVybiB0aGlzLmFkZEluc3RhbmNlKHQpLHR9YWRkSW5zdGFuY2UodCl7LTE9PT10aGlzLl90ZW1wbGF0ZUluc3RhbmNlcy5pbmRleE9mKHQpJiYodGhpcy5fdGVtcGxhdGVJbnN0YW5jZXMucHVzaCh0KSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCgpPT50aGlzLm5vdGlmeVBhdGgoIl90ZW1wbGF0ZUluc3RhbmNlcy4qIix0aGlzLl90ZW1wbGF0ZUluc3RhbmNlcykpKSl9cmVtb3ZlSW5zdGFuY2UodCl7Y29uc3QgZT10aGlzLl90ZW1wbGF0ZUluc3RhbmNlcy5pbmRleE9mKHQpO3RoaXMuc3BsaWNlKCJfdGVtcGxhdGVJbnN0YW5jZXMiLGUsMSl9X2Vuc3VyZVRlbXBsYXRpemVkKCl7dGhpcy5fVGVtcGxhdGVDbGFzc3x8KHRoaXMuX1RlbXBsYXRlQ2xhc3M9WHIodGhpcy50ZW1wbGF0ZSx0aGlzLHtpbnN0YW5jZVByb3BzOnRoaXMuX2luc3RhbmNlUHJvcHMscGFyZW50TW9kZWw6ITAsZm9yd2FyZEhvc3RQcm9wOmZ1bmN0aW9uKHQsZSl7dGhpcy5fZm9yd2FyZFBhcmVudFByb3AodCxlKSx0aGlzLl90ZW1wbGF0ZUluc3RhbmNlcyYmdGhpcy5fdGVtcGxhdGVJbnN0YW5jZXMuZm9yRWFjaCgobj0+bi5ub3RpZnlQYXRoKHQsZSkpKX0sbm90aWZ5SW5zdGFuY2VQcm9wOmZ1bmN0aW9uKHQsZSxuKXtpZigiaW5kZXgiPT09ZXx8Iml0ZW0iPT09ZSlyZXR1cm47Y29uc3QgaT1gX18ke2V9X19gO2lmKHRbaV09PT1uKXJldHVybjt0W2ldPW47Y29uc3Qgcj1BcnJheS5mcm9tKHRoaXMuX2dyaWQuJC5pdGVtcy5jaGlsZHJlbikuZmlsdGVyKChlPT50aGlzLl9ncmlkLl9pdGVtc0VxdWFsKGUuX2l0ZW0sdC5pdGVtKSkpWzBdO3ImJkFycmF5LmZyb20oci5jaGlsZHJlbikuZm9yRWFjaCgodD0+e3QuX2luc3RhbmNlJiYodC5faW5zdGFuY2VbaV09bix0Ll9pbnN0YW5jZS5ub3RpZnlQYXRoKGUsbikpfSkpO2NvbnN0IG89Iml0ZW0uIjtpZihBcnJheS5pc0FycmF5KHRoaXMuX2dyaWQuaXRlbXMpJiYwPT09ZS5pbmRleE9mKG8pKXtjb25zdCBpPXRoaXMuX2dyaWQuaXRlbXMuaW5kZXhPZih0Lml0ZW0pLHI9ZS5zbGljZShvLmxlbmd0aCk7dGhpcy5fZ3JpZC5ub3RpZnlQYXRoKGBpdGVtcy4ke2l9LiR7cn1gLG4pfWNvbnN0IGE9YF8ke2V9SW5zdGFuY2VDaGFuZ2VkQ2FsbGJhY2tgO3RoaXMuX2dyaWQmJnRoaXMuX2dyaWRbYV0mJnRoaXMuX2dyaWRbYV0odCxuKX19KSl9X2ZvcndhcmRQYXJlbnRQcm9wKHQsZSl7dGhpcy5fcGFyZW50UGF0aFZhbHVlc1t0XT1lLHRoaXMuX3RlbXBsYXRlSW5zdGFuY2VzLmZvckVhY2goKG49Pm4ubm90aWZ5UGF0aCh0LGUpKSl9X3RlbXBsYXRlSW5zdGFuY2VzQ2hhbmdlZCh0LGUpe2xldCBuLGk7aWYoIl90ZW1wbGF0ZUluc3RhbmNlcyI9PT10LnBhdGgpbj0wLGk9dGhpcy5fdGVtcGxhdGVJbnN0YW5jZXMubGVuZ3RoO2Vsc2V7aWYoIl90ZW1wbGF0ZUluc3RhbmNlcy5zcGxpY2VzIiE9PXQucGF0aClyZXR1cm47bj10LnZhbHVlLmluZGV4LGk9dC52YWx1ZS5hZGRlZENvdW50fU9iamVjdC5rZXlzKHRoaXMuX3BhcmVudFBhdGhWYWx1ZXN8fHt9KS5mb3JFYWNoKCh0PT57Zm9yKHZhciBlPW47ZTxuK2k7ZSsrKXRoaXMuX3RlbXBsYXRlSW5zdGFuY2VzW2VdLnNldCh0LHRoaXMuX3BhcmVudFBhdGhWYWx1ZXNbdF0pfSkpfX1jdXN0b21FbGVtZW50cy5kZWZpbmUoa050LmlzLGtOdCk7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBWYWFkaW4gTHRkLgogICAgVGhpcyBwcm9ncmFtIGlzIGF2YWlsYWJsZSB1bmRlciBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCwgYXZhaWxhYmxlIGF0IGh0dHBzOi8vdmFhZGluLmNvbS9saWNlbnNlLwogICAgKi8KY29uc3QgTE50PXQ9PmNsYXNzIGV4dGVuZHMgdHtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57ZGV0YWlsc09wZW5lZEl0ZW1zOnt0eXBlOkFycmF5LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuW119fSxfcm93RGV0YWlsc1RlbXBsYXRlOk9iamVjdCxyb3dEZXRhaWxzUmVuZGVyZXI6RnVuY3Rpb24sX2RldGFpbHNDZWxsczp7dHlwZTpBcnJheX19fXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfZGV0YWlsc09wZW5lZEl0ZW1zQ2hhbmdlZChkZXRhaWxzT3BlbmVkSXRlbXMuKiwgX3Jvd0RldGFpbHNUZW1wbGF0ZSwgcm93RGV0YWlsc1JlbmRlcmVyKSIsIl9yb3dEZXRhaWxzVGVtcGxhdGVPclJlbmRlcmVyQ2hhbmdlZChfcm93RGV0YWlsc1RlbXBsYXRlLCByb3dEZXRhaWxzUmVuZGVyZXIpIl19X3Jvd0RldGFpbHNUZW1wbGF0ZU9yUmVuZGVyZXJDaGFuZ2VkKHQsZSl7aWYodCYmZSl0aHJvdyBuZXcgRXJyb3IoIllvdSBzaG91bGQgb25seSB1c2UgZWl0aGVyIGEgcmVuZGVyZXIgb3IgYSB0ZW1wbGF0ZSBmb3Igcm93IGRldGFpbHMiKTtpZih0fHxlKXtpZih0JiYhdC50ZW1wbGF0aXplcil7dmFyIG49bmV3IGtOdDtuLl9ncmlkPXRoaXMsbi5kYXRhSG9zdD10aGlzLmRhdGFIb3N0LG4udGVtcGxhdGU9dCx0LnRlbXBsYXRpemVyPW59dGhpcy5fY29sdW1uVHJlZSYmQXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZvckVhY2goKHQ9Pnt0LnF1ZXJ5U2VsZWN0b3IoIltwYXJ0fj1kZXRhaWxzLWNlbGxdIil8fCh0aGlzLl91cGRhdGVSb3codCx0aGlzLl9jb2x1bW5UcmVlW3RoaXMuX2NvbHVtblRyZWUubGVuZ3RoLTFdKSx0aGlzLl9hMTF5VXBkYXRlUm93RGV0YWlsc09wZW5lZCh0LCExKSksZGVsZXRlIHQucXVlcnlTZWxlY3RvcigiW3BhcnR+PWRldGFpbHMtY2VsbF0iKS5faW5zdGFuY2V9KSksdGhpcy5kZXRhaWxzT3BlbmVkSXRlbXMubGVuZ3RoJiYoQXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZvckVhY2godGhpcy5fdG9nZ2xlRGV0YWlsc0NlbGwsdGhpcyksdGhpcy5fdXBkYXRlKCkpfX1fZGV0YWlsc09wZW5lZEl0ZW1zQ2hhbmdlZCh0LGUsbil7ImRldGFpbHNPcGVuZWRJdGVtcy5sZW5ndGgiIT09dC5wYXRoJiZ0LnZhbHVlJiZBcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZm9yRWFjaCgodD0+e3RoaXMuX3RvZ2dsZURldGFpbHNDZWxsKHQsdC5faXRlbSksdGhpcy5fYTExeVVwZGF0ZVJvd0RldGFpbHNPcGVuZWQodCx0aGlzLl9pc0RldGFpbHNPcGVuZWQodC5faXRlbSkpLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgiZGV0YWlscy1vcGVuZWQiLHRoaXMuX2lzRGV0YWlsc09wZW5lZCh0Ll9pdGVtKSx0KX0pKX1fY29uZmlndXJlRGV0YWlsc0NlbGwodCl7dC5zZXRBdHRyaWJ1dGUoInBhcnQiLCJjZWxsIGRldGFpbHMtY2VsbCIpLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgiZnJvemVuIiwhMCx0KX1fdG9nZ2xlRGV0YWlsc0NlbGwodCxlKXtjb25zdCBuPXQucXVlcnlTZWxlY3RvcignW3BhcnR+PSJkZXRhaWxzLWNlbGwiXScpO2lmKCFuKXJldHVybjtjb25zdCBpPSF0aGlzLl9pc0RldGFpbHNPcGVuZWQoZSkscj0hIW4uaGlkZGVuIT09aTsobi5faW5zdGFuY2V8fG4uX3JlbmRlcmVyKSYmbi5oaWRkZW49PT1pfHwobi5oaWRkZW49aSxpP3Quc3R5bGUucmVtb3ZlUHJvcGVydHkoInBhZGRpbmctYm90dG9tIik6KHRoaXMucm93RGV0YWlsc1JlbmRlcmVyPyhuLl9yZW5kZXJlcj10aGlzLnJvd0RldGFpbHNSZW5kZXJlcixuLl9yZW5kZXJlci5jYWxsKHRoaXMsbi5fY29udGVudCx0aGlzLHtpbmRleDp0LmluZGV4LGl0ZW06ZX0pKTp0aGlzLl9yb3dEZXRhaWxzVGVtcGxhdGUmJiFuLl9pbnN0YW5jZSYmKG4uX2luc3RhbmNlPXRoaXMuX3Jvd0RldGFpbHNUZW1wbGF0ZS50ZW1wbGF0aXplci5jcmVhdGVJbnN0YW5jZSgpLG4uX2NvbnRlbnQuaW5uZXJIVE1MPSIiLG4uX2NvbnRlbnQuYXBwZW5kQ2hpbGQobi5faW5zdGFuY2Uucm9vdCksdGhpcy5fdXBkYXRlSXRlbSh0LGUpKSx6aSgpLHQuc3R5bGUuc2V0UHJvcGVydHkoInBhZGRpbmctYm90dG9tIixgJHtuLm9mZnNldEhlaWdodH1weGApLHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKCk9PnRoaXMubm90aWZ5UmVzaXplKCkpKSkpLHImJih0aGlzLl91cGRhdGVNZXRyaWNzKCksdGhpcy5fcG9zaXRpb25JdGVtcygpKX1fdXBkYXRlRGV0YWlsc0NlbGxIZWlnaHRzKCl7QXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMucXVlcnlTZWxlY3RvckFsbCgnW3BhcnR+PSJkZXRhaWxzLWNlbGwiXTpub3QoW2hpZGRlbl0pJykpLmZvckVhY2goKHQ9Pnt0LnBhcmVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoInBhZGRpbmctYm90dG9tIixgJHt0Lm9mZnNldEhlaWdodH1weGApfSkpfV9pc0RldGFpbHNPcGVuZWQodCl7cmV0dXJuIHRoaXMuZGV0YWlsc09wZW5lZEl0ZW1zJiYtMSE9PXRoaXMuX2dldEl0ZW1JbmRleEluQXJyYXkodCx0aGlzLmRldGFpbHNPcGVuZWRJdGVtcyl9b3Blbkl0ZW1EZXRhaWxzKHQpe3RoaXMuX2lzRGV0YWlsc09wZW5lZCh0KXx8dGhpcy5wdXNoKCJkZXRhaWxzT3BlbmVkSXRlbXMiLHQpfWNsb3NlSXRlbURldGFpbHModCl7dGhpcy5faXNEZXRhaWxzT3BlbmVkKHQpJiZ0aGlzLnNwbGljZSgiZGV0YWlsc09wZW5lZEl0ZW1zIix0aGlzLl9nZXRJdGVtSW5kZXhJbkFycmF5KHQsdGhpcy5kZXRhaWxzT3BlbmVkSXRlbXMpLDEpfV9kZXRhaWxzT3BlbmVkSW5zdGFuY2VDaGFuZ2VkQ2FsbGJhY2sodCxlKXtzdXBlci5fZGV0YWlsc09wZW5lZEluc3RhbmNlQ2hhbmdlZENhbGxiYWNrJiZzdXBlci5fZGV0YWlsc09wZW5lZEluc3RhbmNlQ2hhbmdlZENhbGxiYWNrKHQsZSksZT90aGlzLm9wZW5JdGVtRGV0YWlscyh0Lml0ZW0pOnRoaXMuY2xvc2VJdGVtRGV0YWlscyh0Lml0ZW0pfX0KLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE3IFZhYWRpbiBMdGQuCiAgICBUaGlzIHByb2dyYW0gaXMgYXZhaWxhYmxlIHVuZGVyIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wLCBhdmFpbGFibGUgYXQgaHR0cHM6Ly92YWFkaW4uY29tL2xpY2Vuc2UvCiAgICAqLyxQTnQ9dD0+Y2xhc3MgZXh0ZW5kcyB0e2dldCBfdGltZW91dHMoKXtyZXR1cm57U0NST0xMSU5HOjUwMCxJR05PUkVfV0hFRUw6NTAwfX1zdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57X2Zyb3plbkNlbGxzOnt0eXBlOkFycmF5LHZhbHVlOigpPT5bXX0sX3Jvd1dpdGhGb2N1c2VkRWxlbWVudDpFbGVtZW50LF9kZWx0YVlBY2M6e3R5cGU6TnVtYmVyLHZhbHVlOjB9LF91c2VTdGlja3k6e3R5cGU6Qm9vbGVhbix2YWx1ZTp3aW5kb3cuQ1NTJiZ3aW5kb3cuQ1NTLnN1cHBvcnRzJiYod2luZG93LkNTUy5zdXBwb3J0cygicG9zaXRpb24iLCJzdGlja3kiKXx8d2luZG93LkNTUy5zdXBwb3J0cygicG9zaXRpb24iLCItd2Via2l0LXN0aWNreSIpKX19fXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfc2Nyb2xsVmlld3BvcnRIZWlnaHRVcGRhdGVkKF92aWV3cG9ydEhlaWdodCkiXX1zZXQgX3Njcm9sbFRvcCh0KXt0aGlzLiQudGFibGUuc2Nyb2xsVG9wPXR9Z2V0IF9zY3JvbGxUb3AoKXtyZXR1cm4gdGhpcy4kLnRhYmxlLnNjcm9sbFRvcH1jb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fc2Nyb2xsTGluZUhlaWdodD10aGlzLl9nZXRTY3JvbGxMaW5lSGVpZ2h0KCl9X2dldFNjcm9sbExpbmVIZWlnaHQoKXtjb25zdCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3Quc3R5bGUuZm9udFNpemU9ImluaXRpYWwiLHQuc3R5bGUuZGlzcGxheT0ibm9uZSIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0KTtjb25zdCBlPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQpLmZvbnRTaXplO3JldHVybiBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHQpLGU/d2luZG93LnBhcnNlSW50KGUpOnZvaWQgMH1fc2Nyb2xsVmlld3BvcnRIZWlnaHRVcGRhdGVkKHQpe3RoaXMuX3Njcm9sbFBhZ2VIZWlnaHQ9dC10aGlzLiQuaGVhZGVyLmNsaWVudEhlaWdodC10aGlzLiQuZm9vdGVyLmNsaWVudEhlaWdodC10aGlzLl9zY3JvbGxMaW5lSGVpZ2h0fXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLiQub3V0ZXJzY3JvbGxlcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLnNjcm9sbFRhcmdldD10aGlzLiQudGFibGUsdGhpcy5hZGRFdmVudExpc3RlbmVyKCJ3aGVlbCIsdGhpcy5fb25XaGVlbCksdGhpcy4kLml0ZW1zLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzaW4iLCh0PT57Y29uc3QgZT10LmNvbXBvc2VkUGF0aCgpLmluZGV4T2YodGhpcy4kLml0ZW1zKTt0aGlzLl9yb3dXaXRoRm9jdXNlZEVsZW1lbnQ9dC5jb21wb3NlZFBhdGgoKVtlLTFdfSkpLHRoaXMuJC5pdGVtcy5hZGRFdmVudExpc3RlbmVyKCJmb2N1c291dCIsKCgpPT50aGlzLl9yb3dXaXRoRm9jdXNlZEVsZW1lbnQ9dm9pZCAwKSksdGhpcy5zY3JvbGxUYXJnZXQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwoKCk9PnRoaXMuX19tb3VzZURvd249ITApKSx0aGlzLnNjcm9sbFRhcmdldC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIiwoKCk9Pnt0aGlzLl9fbW91c2VEb3duPSExLHRoaXMuX19wZW5kaW5nUmVvcmRlciYmKHRoaXMuX19wZW5kaW5nUmVvcmRlcj0hMSxzZXRUaW1lb3V0KCgoKT0+dGhpcy5fcmVvcmRlclJvd3MoKSksdGhpcy5fdGltZW91dHMuU0NST0xMSU5HKSl9KSl9c2Nyb2xsVG9JbmRleCh0KXt0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSSgoKCk9PnN1cGVyLnNjcm9sbFRvSW5kZXgodCkpKX1fb25XaGVlbCh0KXtpZih0LmN0cmxLZXl8fHRoaXMuX2hhc1Njcm9sbGVkQW5jZXN0b3IodC50YXJnZXQsdC5kZWx0YVgsdC5kZWx0YVkpKXJldHVybjtjb25zdCBlPXRoaXMuJC50YWJsZTtsZXQgbj10LmRlbHRhWTtpZih0LmRlbHRhTW9kZT09PVdoZWVsRXZlbnQuRE9NX0RFTFRBX0xJTkU/bio9dGhpcy5fc2Nyb2xsTGluZUhlaWdodDp0LmRlbHRhTW9kZT09PVdoZWVsRXZlbnQuRE9NX0RFTFRBX1BBR0UmJihuKj10aGlzLl9zY3JvbGxQYWdlSGVpZ2h0KSx0aGlzLl93aGVlbEFuaW1hdGlvbkZyYW1lKXJldHVybiB0aGlzLl9kZWx0YVlBY2MrPW4sdm9pZCB0LnByZXZlbnREZWZhdWx0KCk7bis9dGhpcy5fZGVsdGFZQWNjLHRoaXMuX2RlbHRhWUFjYz0wLHRoaXMuX3doZWVsQW5pbWF0aW9uRnJhbWU9ITAsdGhpcy5fZGVib3VuY2VyV2hlZWxBbmltYXRpb25GcmFtZT1Fbi5kZWJvdW5jZSh0aGlzLl9kZWJvdW5jZXJXaGVlbEFuaW1hdGlvbkZyYW1lLF90LCgoKT0+dGhpcy5fd2hlZWxBbmltYXRpb25GcmFtZT0hMSkpO3ZhciBpPU1hdGguYWJzKHQuZGVsdGFYKStNYXRoLmFicyhuKTt0aGlzLl9jYW5TY3JvbGwoZSx0LmRlbHRhWCxuKT8odC5wcmV2ZW50RGVmYXVsdCgpLGUuc2Nyb2xsVG9wKz1uLGUuc2Nyb2xsTGVmdCs9dC5kZWx0YVgsdGhpcy5fc2Nyb2xsSGFuZGxlcigpLHRoaXMuX2hhc1Jlc2lkdWFsTW9tZW50dW09ITAsdGhpcy5faWdub3JlTmV3V2hlZWw9ITAsdGhpcy5fZGVib3VuY2VySWdub3JlTmV3V2hlZWw9RW4uZGVib3VuY2UodGhpcy5fZGVib3VuY2VySWdub3JlTmV3V2hlZWwsZ3QuYWZ0ZXIodGhpcy5fdGltZW91dHMuSUdOT1JFX1dIRUVMKSwoKCk9PnRoaXMuX2lnbm9yZU5ld1doZWVsPSExKSkpOnRoaXMuX2hhc1Jlc2lkdWFsTW9tZW50dW0mJmk8PXRoaXMuX3ByZXZpb3VzTW9tZW50dW18fHRoaXMuX2lnbm9yZU5ld1doZWVsP3QucHJldmVudERlZmF1bHQoKTppPnRoaXMuX3ByZXZpb3VzTW9tZW50dW0mJih0aGlzLl9oYXNSZXNpZHVhbE1vbWVudHVtPSExKSx0aGlzLl9wcmV2aW91c01vbWVudHVtPWl9X2hhc1Njcm9sbGVkQW5jZXN0b3IodCxlLG4pe3JldHVybiJ2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQiIT09dC5sb2NhbE5hbWUmJighKCF0aGlzLl9jYW5TY3JvbGwodCxlLG4pfHwtMT09PVsiYXV0byIsInNjcm9sbCJdLmluZGV4T2YoZ2V0Q29tcHV0ZWRTdHlsZSh0KS5vdmVyZmxvdykpfHwodCE9PXRoaXMmJnQucGFyZW50RWxlbWVudD90aGlzLl9oYXNTY3JvbGxlZEFuY2VzdG9yKHQucGFyZW50RWxlbWVudCxlLG4pOnZvaWQgMCkpfV9jYW5TY3JvbGwodCxlLG4pe3JldHVybiBuPjAmJnQuc2Nyb2xsVG9wPHQuc2Nyb2xsSGVpZ2h0LXQub2Zmc2V0SGVpZ2h0fHxuPDAmJnQuc2Nyb2xsVG9wPjB8fGU+MCYmdC5zY3JvbGxMZWZ0PHQuc2Nyb2xsV2lkdGgtdC5vZmZzZXRXaWR0aHx8ZTwwJiZ0LnNjcm9sbExlZnQ+MH1fc2NoZWR1bGVTY3JvbGxpbmcoKXt0aGlzLl9zY3JvbGxpbmdGcmFtZXx8KHRoaXMuX3Njcm9sbGluZ0ZyYW1lPXJlcXVlc3RBbmltYXRpb25GcmFtZSgoKCk9PnRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgic2Nyb2xsaW5nIiwhMCx0aGlzLiQuc2Nyb2xsZXIpKSkpLHRoaXMuX2RlYm91bmNlU2Nyb2xsaW5nPUVuLmRlYm91bmNlKHRoaXMuX2RlYm91bmNlU2Nyb2xsaW5nLGd0LmFmdGVyKHRoaXMuX3RpbWVvdXRzLlNDUk9MTElORyksKCgpPT57Y2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fc2Nyb2xsaW5nRnJhbWUpLGRlbGV0ZSB0aGlzLl9zY3JvbGxpbmdGcmFtZSx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoInNjcm9sbGluZyIsITEsdGhpcy4kLnNjcm9sbGVyKSx0aGlzLl9yZW9yZGVyUm93cygpfSkpfV9hZnRlclNjcm9sbCgpe3RoaXMuX3RyYW5zbGF0ZVN0YXRpb25hcnlFbGVtZW50cygpLHRoaXMuaGFzQXR0cmlidXRlKCJyZW9yZGVyaW5nIil8fHRoaXMuX3NjaGVkdWxlU2Nyb2xsaW5nKCksdGhpcy5fdXBkYXRlT3ZlcmZsb3coKX1fdXBkYXRlT3ZlcmZsb3coKXtsZXQgdD0iIjtjb25zdCBlPXRoaXMuJC50YWJsZTtlLnNjcm9sbFRvcDxlLnNjcm9sbEhlaWdodC1lLmNsaWVudEhlaWdodCYmKHQrPSIgYm90dG9tIiksZS5zY3JvbGxUb3A+MCYmKHQrPSIgdG9wIiksZS5zY3JvbGxMZWZ0PGUuc2Nyb2xsV2lkdGgtZS5jbGllbnRXaWR0aCYmKHQrPSIgcmlnaHQiKSxlLnNjcm9sbExlZnQ+MCYmKHQrPSIgbGVmdCIpLHRoaXMuX2RlYm91bmNlT3ZlcmZsb3c9RW4uZGVib3VuY2UodGhpcy5fZGVib3VuY2VPdmVyZmxvdyxfdCwoKCk9Pntjb25zdCBlPXQudHJpbSgpO2UubGVuZ3RoPjAmJnRoaXMuZ2V0QXR0cmlidXRlKCJvdmVyZmxvdyIpIT09ZT90aGlzLnNldEF0dHJpYnV0ZSgib3ZlcmZsb3ciLGUpOjA9PWUubGVuZ3RoJiZ0aGlzLmhhc0F0dHJpYnV0ZSgib3ZlcmZsb3ciKSYmdGhpcy5yZW1vdmVBdHRyaWJ1dGUoIm92ZXJmbG93Iil9KSl9X3Jlb3JkZXJSb3dzKCl7aWYodGhpcy5fX21vdXNlRG93bilyZXR1cm4gdm9pZCh0aGlzLl9fcGVuZGluZ1Jlb3JkZXI9ITApO2NvbnN0IHQ9dGhpcy4kLml0ZW1zLGU9dC5xdWVyeVNlbGVjdG9yQWxsKCJ0ciIpO2lmKCFlLmxlbmd0aClyZXR1cm47Y29uc3Qgbj10aGlzLl92aXJ0dWFsU3RhcnQrdGhpcy5fdmlkeE9mZnNldCxpPXRoaXMuX3Jvd1dpdGhGb2N1c2VkRWxlbWVudHx8QXJyYXkuZnJvbShlKS5maWx0ZXIoKHQ9PiF0LmhpZGRlbikpWzBdO2lmKCFpKXJldHVybjtjb25zdCByPWkuaW5kZXgtbixvPUFycmF5LmZyb20oZSkuaW5kZXhPZihpKS1yO2lmKG8+MClmb3IobGV0IG49MDtuPG87bisrKXQuYXBwZW5kQ2hpbGQoZVtuXSk7ZWxzZSBpZihvPDApZm9yKGxldCBuPWUubGVuZ3RoK287bjxlLmxlbmd0aDtuKyspdC5pbnNlcnRCZWZvcmUoZVtuXSxlWzBdKTtpZih0aGlzLl9zYWZhcmkpe2NvbnN0e3RyYW5zZm9ybTp0fT10aGlzLiQuaGVhZGVyLnN0eWxlO3RoaXMuJC5oZWFkZXIuc3R5bGUudHJhbnNmb3JtPSIiLHNldFRpbWVvdXQoKCgpPT50aGlzLiQuaGVhZGVyLnN0eWxlLnRyYW5zZm9ybT10KSl9fV9mcm96ZW5DZWxsc0NoYW5nZWQoKXt0aGlzLl9kZWJvdW5jZXJDYWNoZUVsZW1lbnRzPUVuLmRlYm91bmNlKHRoaXMuX2RlYm91bmNlckNhY2hlRWxlbWVudHMsdnQsKCgpPT57QXJyYXkuZnJvbSh0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgnW3BhcnR+PSJjZWxsIl0nKSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5zdHlsZS50cmFuc2Zvcm09IiJ9KSksdGhpcy5fZnJvemVuQ2VsbHM9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy4kLnRhYmxlLnF1ZXJ5U2VsZWN0b3JBbGwoIltmcm96ZW5dIikpLHRoaXMuX3VwZGF0ZVNjcm9sbGVyTWVhc3VyZW1lbnRzKCksdGhpcy5fdHJhbnNsYXRlU3RhdGlvbmFyeUVsZW1lbnRzKCl9KSksdGhpcy5fdXBkYXRlTGFzdEZyb3plbigpfV91cGRhdGVTY3JvbGxlck1lYXN1cmVtZW50cygpe3RoaXMuX2Zyb3plbkNlbGxzLmxlbmd0aD4wJiZ0aGlzLl9faXNSVEwmJih0aGlzLl9fc2Nyb2xsZXJNZXRyaWNzPXtzY3JvbGxXaWR0aDp0aGlzLiQudGFibGUuc2Nyb2xsV2lkdGgsY2xpZW50V2lkdGg6dGhpcy4kLnRhYmxlLmNsaWVudFdpZHRofSl9X3VwZGF0ZUxhc3RGcm96ZW4oKXtpZighdGhpcy5fY29sdW1uVHJlZSlyZXR1cm47Y29uc3QgdD10aGlzLl9jb2x1bW5UcmVlW3RoaXMuX2NvbHVtblRyZWUubGVuZ3RoLTFdLnNsaWNlKDApO3Quc29ydCgoKHQsZSk9PnQuX29yZGVyLWUuX29yZGVyKSk7Y29uc3QgZT10LnJlZHVjZSgoKHQsZSxuKT0+KGUuX2xhc3RGcm96ZW49ITEsZS5mcm96ZW4mJiFlLmhpZGRlbj9uOnQpKSx2b2lkIDApO3ZvaWQgMCE9PWUmJih0W2VdLl9sYXN0RnJvemVuPSEwKX1fdHJhbnNsYXRlU3RhdGlvbmFyeUVsZW1lbnRzKCl7Y29uc3QgdD1NYXRoLm1heCgwLHRoaXMuX3Njcm9sbExlZnQpLGU9TWF0aC5tYXgoMCx0aGlzLl9zY3JvbGxUb3ApO2xldCBuPTAsaT0wLHI9MDtpZih0aGlzLl91c2VTdGlja3l8fChuPXQsaT1lLHI9dGhpcy4kLnRhYmxlLmNsaWVudEhlaWdodC10aGlzLiQuZm9vdGVyLm9mZnNldEhlaWdodC10aGlzLiQuZm9vdGVyLm9mZnNldFRvcCksdGhpcy4kLmhlYWRlci5zdHlsZS50cmFuc2Zvcm09dGhpcy5fZ2V0VHJhbnNsYXRlKC10K24saSksdGhpcy4kLmZvb3Rlci5zdHlsZS50cmFuc2Zvcm09dGhpcy5fZ2V0VHJhbnNsYXRlKC10K24saStyKSx0aGlzLiQuaXRlbXMuc3R5bGUudHJhbnNmb3JtPXRoaXMuX2dldFRyYW5zbGF0ZSgtdCtuLDApLHRoaXMuX2Zyb3plbkNlbGxzLmxlbmd0aD4wKXtjb25zdCB0PXRoaXMuX19pc1JUTD90aGlzLl9fZ2V0Tm9ybWFsaXplZFNjcm9sbExlZnQodGhpcy4kLnRhYmxlKSt0aGlzLl9fc2Nyb2xsZXJNZXRyaWNzLmNsaWVudFdpZHRoLXRoaXMuX19zY3JvbGxlck1ldHJpY3Muc2Nyb2xsV2lkdGg6dGhpcy5fc2Nyb2xsTGVmdDtmb3IodmFyIG89dGhpcy5fZ2V0VHJhbnNsYXRlKHQsMCksYT0wO2E8dGhpcy5fZnJvemVuQ2VsbHMubGVuZ3RoO2ErKyl0aGlzLl9mcm96ZW5DZWxsc1thXS5zdHlsZS50cmFuc2Zvcm09b319X2dldFRyYW5zbGF0ZSh0LGUpe3JldHVybmB0cmFuc2xhdGUoJHt0fXB4LCAke2V9cHgpYH19Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBWYWFkaW4gTHRkLgogICAgVGhpcyBwcm9ncmFtIGlzIGF2YWlsYWJsZSB1bmRlciBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCwgYXZhaWxhYmxlIGF0IGh0dHBzOi8vdmFhZGluLmNvbS9saWNlbnNlLwogICAgKi8sTk50PXQ9PmNsYXNzIGV4dGVuZHMgdHtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57c2VsZWN0ZWRJdGVtczp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwLHZhbHVlOigpPT5bXX19fXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfc2VsZWN0ZWRJdGVtc0NoYW5nZWQoc2VsZWN0ZWRJdGVtcy4qKSJdfV9pc1NlbGVjdGVkKHQpe3JldHVybiB0aGlzLnNlbGVjdGVkSXRlbXMmJnRoaXMuX2dldEl0ZW1JbmRleEluQXJyYXkodCx0aGlzLnNlbGVjdGVkSXRlbXMpPi0xfXNlbGVjdEl0ZW0odCl7dGhpcy5faXNTZWxlY3RlZCh0KXx8dGhpcy5wdXNoKCJzZWxlY3RlZEl0ZW1zIix0KX1kZXNlbGVjdEl0ZW0odCl7Y29uc3QgZT10aGlzLl9nZXRJdGVtSW5kZXhJbkFycmF5KHQsdGhpcy5zZWxlY3RlZEl0ZW1zKTtlPi0xJiZ0aGlzLnNwbGljZSgic2VsZWN0ZWRJdGVtcyIsZSwxKX1fdG9nZ2xlSXRlbSh0KXstMT09PXRoaXMuX2dldEl0ZW1JbmRleEluQXJyYXkodCx0aGlzLnNlbGVjdGVkSXRlbXMpP3RoaXMuc2VsZWN0SXRlbSh0KTp0aGlzLmRlc2VsZWN0SXRlbSh0KX1fc2VsZWN0ZWRJdGVtc0NoYW5nZWQodCl7IXRoaXMuJC5pdGVtcy5jaGlsZHJlbi5sZW5ndGh8fCJzZWxlY3RlZEl0ZW1zIiE9PXQucGF0aCYmInNlbGVjdGVkSXRlbXMuc3BsaWNlcyIhPT10LnBhdGh8fEFycmF5LmZyb20odGhpcy4kLml0ZW1zLmNoaWxkcmVuKS5mb3JFYWNoKCh0PT57dGhpcy5fdXBkYXRlSXRlbSh0LHQuX2l0ZW0pfSkpfV9zZWxlY3RlZEluc3RhbmNlQ2hhbmdlZENhbGxiYWNrKHQsZSl7c3VwZXIuX3NlbGVjdGVkSW5zdGFuY2VDaGFuZ2VkQ2FsbGJhY2smJnN1cGVyLl9zZWxlY3RlZEluc3RhbmNlQ2hhbmdlZENhbGxiYWNrKHQsZSksZT90aGlzLnNlbGVjdEl0ZW0odC5pdGVtKTp0aGlzLmRlc2VsZWN0SXRlbSh0Lml0ZW0pfX0KLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE3IFZhYWRpbiBMdGQuCiAgICBUaGlzIHByb2dyYW0gaXMgYXZhaWxhYmxlIHVuZGVyIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wLCBhdmFpbGFibGUgYXQgaHR0cHM6Ly92YWFkaW4uY29tL2xpY2Vuc2UvCiAgICAqLyxJTnQ9dD0+Y2xhc3MgZXh0ZW5kcyB0e3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybnttdWx0aVNvcnQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX3NvcnRlcnM6e3R5cGU6QXJyYXksdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19LF9wcmV2aW91c1NvcnRlcnM6e3R5cGU6QXJyYXksdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19fX1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJzb3J0ZXItY2hhbmdlZCIsdGhpcy5fb25Tb3J0ZXJDaGFuZ2VkKSx3aW5kb3cuU2hhZHlET00mJnZ0LnJ1bigoKCk9Pntjb25zdCB0PXRoaXMucXVlcnlTZWxlY3RvckFsbCgidmFhZGluLWdyaWQtc29ydGVyIik7QXJyYXkuZnJvbSh0KS5mb3JFYWNoKCh0PT57dCBpbnN0YW5jZW9mIHllJiZ0LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJzb3J0ZXItY2hhbmdlZCIse2J1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSl9KSl9KSl9X29uU29ydGVyQ2hhbmdlZCh0KXtjb25zdCBlPXQudGFyZ2V0O3Quc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5fX3VwZGF0ZVNvcnRlcihlKSx0aGlzLl9fYXBwbHlTb3J0ZXJzKCl9X19yZW1vdmVTb3J0ZXJzKHQpezAhPXQubGVuZ3RoJiYodGhpcy5fc29ydGVycz10aGlzLl9zb3J0ZXJzLmZpbHRlcigoZT0+dC5pbmRleE9mKGUpPDApKSx0aGlzLm11bHRpU29ydCYmdGhpcy5fX3VwZGF0ZVNvcnRPcmRlcnMoKSx0aGlzLl9fYXBwbHlTb3J0ZXJzKCkpfV9fdXBkYXRlU29ydE9yZGVycygpe3RoaXMuX3NvcnRlcnMuZm9yRWFjaCgoKHQsZSk9PnQuX29yZGVyPXRoaXMuX3NvcnRlcnMubGVuZ3RoPjE/ZTpudWxsKSx0aGlzKX1fX3VwZGF0ZVNvcnRlcih0KXtpZih0LmRpcmVjdGlvbnx8LTEhPT10aGlzLl9zb3J0ZXJzLmluZGV4T2YodCkpaWYodC5fb3JkZXI9bnVsbCx0aGlzLm11bHRpU29ydCl0aGlzLl9yZW1vdmVBcnJheUl0ZW0odGhpcy5fc29ydGVycyx0KSx0LmRpcmVjdGlvbiYmdGhpcy5fc29ydGVycy51bnNoaWZ0KHQpLHRoaXMuX191cGRhdGVTb3J0T3JkZXJzKCksdGhpcy5fc29ydGVycy5mb3JFYWNoKCgodCxlKT0+dC5fb3JkZXI9dGhpcy5fc29ydGVycy5sZW5ndGg+MT9lOm51bGwpLHRoaXMpO2Vsc2UgaWYodC5kaXJlY3Rpb24pe2NvbnN0IGU9dGhpcy5fc29ydGVycy5maWx0ZXIoKGU9PmUhPXQpKTt0aGlzLl9zb3J0ZXJzPVt0XSxlLmZvckVhY2goKHQ9Pnt0Ll9vcmRlcj1udWxsLHQuZGlyZWN0aW9uPW51bGx9KSl9fV9fYXBwbHlTb3J0ZXJzKCl7dGhpcy5kYXRhUHJvdmlkZXImJnRoaXMuaXNBdHRhY2hlZCYmSlNPTi5zdHJpbmdpZnkodGhpcy5fcHJldmlvdXNTb3J0ZXJzKSE9PUpTT04uc3RyaW5naWZ5KHRoaXMuX21hcFNvcnRlcnMoKSkmJnRoaXMuY2xlYXJDYWNoZSgpLHRoaXMuX2ExMXlVcGRhdGVTb3J0ZXJzKCksdGhpcy5fcHJldmlvdXNTb3J0ZXJzPXRoaXMuX21hcFNvcnRlcnMoKX1fbWFwU29ydGVycygpe3JldHVybiB0aGlzLl9zb3J0ZXJzLm1hcCgodD0+KHtwYXRoOnQucGF0aCxkaXJlY3Rpb246dC5kaXJlY3Rpb259KSkpfV9yZW1vdmVBcnJheUl0ZW0odCxlKXtjb25zdCBuPXQuaW5kZXhPZihlKTtuPi0xJiZ0LnNwbGljZShuLDEpfX0KLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE4IFZhYWRpbiBMdGQuCiAgICBUaGlzIHByb2dyYW0gaXMgYXZhaWxhYmxlIHVuZGVyIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wLCBhdmFpbGFibGUgYXQgaHR0cHM6Ly92YWFkaW4uY29tL2xpY2Vuc2UvCiAgICAqLyxPTnQ9dD0+Y2xhc3MgZXh0ZW5kcyB0e3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntjZWxsQ2xhc3NOYW1lR2VuZXJhdG9yOkZ1bmN0aW9ufX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX19jZWxsQ2xhc3NOYW1lR2VuZXJhdG9yQ2hhbmdlZChjZWxsQ2xhc3NOYW1lR2VuZXJhdG9yKSJdfV9fY2VsbENsYXNzTmFtZUdlbmVyYXRvckNoYW5nZWQodCl7dGhpcy5nZW5lcmF0ZUNlbGxDbGFzc05hbWVzKCl9Z2VuZXJhdGVDZWxsQ2xhc3NOYW1lcygpe0FycmF5LmZyb20odGhpcy4kLml0ZW1zLmNoaWxkcmVuKS5maWx0ZXIoKHQ9PiF0LmhpZGRlbikpLmZvckVhY2goKHQ9PnRoaXMuX2dlbmVyYXRlQ2VsbENsYXNzTmFtZXModCx0aGlzLl9fZ2V0Um93TW9kZWwodCkpKSl9X2dlbmVyYXRlQ2VsbENsYXNzTmFtZXModCxlKXtBcnJheS5mcm9tKHQuY2hpbGRyZW4pLmZvckVhY2goKHQ9PntpZih0Ll9fZ2VuZXJhdGVkQ2xhc3NlcyYmdC5fX2dlbmVyYXRlZENsYXNzZXMuZm9yRWFjaCgoZT0+dC5jbGFzc0xpc3QucmVtb3ZlKGUpKSksdGhpcy5jZWxsQ2xhc3NOYW1lR2VuZXJhdG9yKXtjb25zdCBuPXRoaXMuY2VsbENsYXNzTmFtZUdlbmVyYXRvcih0Ll9jb2x1bW4sZSk7dC5fX2dlbmVyYXRlZENsYXNzZXM9biYmbi5zcGxpdCgiICIpLmZpbHRlcigodD0+dC5sZW5ndGg+MCkpLHQuX19nZW5lcmF0ZWRDbGFzc2VzJiZ0Ll9fZ2VuZXJhdGVkQ2xhc3Nlcy5mb3JFYWNoKChlPT50LmNsYXNzTGlzdC5hZGQoZSkpKX19KSl9fQovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTkgVmFhZGluIEx0ZC4KICAgIFRoaXMgcHJvZ3JhbSBpcyBhdmFpbGFibGUgdW5kZXIgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAsIGF2YWlsYWJsZSBhdCBodHRwczovL3ZhYWRpbi5jb20vbGljZW5zZS8KICAgICovLFJOdD0iYmV0d2VlbiIsek50PSJvbi10b3Atb3ItYmV0d2VlbiIsRE50PSJhYm92ZSIsQk50PSJiZWxvdyIsSE50PSJlbXB0eSIsRk50PXQ9PmNsYXNzIGV4dGVuZHMgdHtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57ZHJvcE1vZGU6U3RyaW5nLHJvd3NEcmFnZ2FibGU6Qm9vbGVhbixkcmFnRmlsdGVyOkZ1bmN0aW9uLGRyb3BGaWx0ZXI6RnVuY3Rpb24sX19kbmRBdXRvU2Nyb2xsVGhyZXNob2xkOnt2YWx1ZTo1MH19fXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfZHJhZ0Ryb3BBY2Nlc3NDaGFuZ2VkKHJvd3NEcmFnZ2FibGUsIGRyb3BNb2RlLCBkcmFnRmlsdGVyLCBkcm9wRmlsdGVyKSJdfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLiQudGFibGUuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ3N0YXJ0Iix0aGlzLl9vbkRyYWdTdGFydC5iaW5kKHRoaXMpKSx0aGlzLiQudGFibGUuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ2VuZCIsdGhpcy5fb25EcmFnRW5kLmJpbmQodGhpcykpLHRoaXMuJC50YWJsZS5hZGRFdmVudExpc3RlbmVyKCJkcmFnb3ZlciIsdGhpcy5fb25EcmFnT3Zlci5iaW5kKHRoaXMpKSx0aGlzLiQudGFibGUuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ2xlYXZlIix0aGlzLl9vbkRyYWdMZWF2ZS5iaW5kKHRoaXMpKSx0aGlzLiQudGFibGUuYWRkRXZlbnRMaXN0ZW5lcigiZHJvcCIsdGhpcy5fb25Ecm9wLmJpbmQodGhpcykpLHRoaXMuJC50YWJsZS5hZGRFdmVudExpc3RlbmVyKCJkcmFnZW50ZXIiLCh0PT57dGhpcy5kcm9wTW9kZSYmKHQucHJldmVudERlZmF1bHQoKSx0LnN0b3BQcm9wYWdhdGlvbigpKX0pKX1fb25EcmFnU3RhcnQodCl7aWYodGhpcy5yb3dzRHJhZ2dhYmxlKXtsZXQgZT10LnRhcmdldDtpZigidmFhZGluLWdyaWQtY2VsbC1jb250ZW50Ij09PWUubG9jYWxOYW1lJiYoZT1lLmFzc2lnbmVkU2xvdC5wYXJlbnROb2RlLnBhcmVudE5vZGUpLGUucGFyZW50Tm9kZSE9PXRoaXMuJC5pdGVtcylyZXR1cm47aWYodC5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoImRyYWdnaW5nLXJvd3MiLCEwLHRoaXMpLHRoaXMuX3NhZmFyaSl7Y29uc3QgdD1lLnN0eWxlLnRyYW5zZm9ybTtlLnN0eWxlLnRvcD0vdHJhbnNsYXRlWVwoKC4qKVwpLy5leGVjKHQpWzFdLGUuc3R5bGUudHJhbnNmb3JtPSJub25lIixyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCgpPT57ZS5zdHlsZS50b3A9IiIsZS5zdHlsZS50cmFuc2Zvcm09dH0pKX1jb25zdCBuPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7d2luZG93LlNoYWR5RE9NfHwodGhpcy5faW9zP3QuZGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZShlKTp0LmRhdGFUcmFuc2Zlci5zZXREcmFnSW1hZ2UoZSx0LmNsaWVudFgtbi5sZWZ0LHQuY2xpZW50WS1uLnRvcCkpO2xldCBpPVtlXTt0aGlzLl9pc1NlbGVjdGVkKGUuX2l0ZW0pJiYoaT10aGlzLl9fZ2V0Vmlld3BvcnRSb3dzKCkuZmlsdGVyKCh0PT50aGlzLl9pc1NlbGVjdGVkKHQuX2l0ZW0pKSkuZmlsdGVyKCh0PT4hdGhpcy5kcmFnRmlsdGVyfHx0aGlzLmRyYWdGaWx0ZXIodGhpcy5fX2dldFJvd01vZGVsKHQpKSkpKSx0LmRhdGFUcmFuc2Zlci5zZXREYXRhKCJ0ZXh0Iix0aGlzLl9fZm9ybWF0RGVmYXVsdFRyYW5zZmVyRGF0YShpKSksZS5zZXRBdHRyaWJ1dGUoImRyYWdzdGFydCIsaS5sZW5ndGg+MT9pLmxlbmd0aDoiIiksdGhpcy51cGRhdGVTdHlsZXMoeyItLV9ncmlkLWRyYWctc3RhcnQteCI6dC5jbGllbnRYLW4ubGVmdCsyMCsicHgiLCItLV9ncmlkLWRyYWctc3RhcnQteSI6dC5jbGllbnRZLW4udG9wKzEwKyJweCJ9KSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCgpPT57ZS5yZW1vdmVBdHRyaWJ1dGUoImRyYWdzdGFydCIpLHRoaXMudXBkYXRlU3R5bGVzKHsiLS1fZ3JpZC1kcmFnLXN0YXJ0LXgiOiIiLCItLV9ncmlkLWRyYWctc3RhcnQteSI6IiJ9KX0pKTtjb25zdCByPW5ldyBDdXN0b21FdmVudCgiZ3JpZC1kcmFnc3RhcnQiLHtkZXRhaWw6e2RyYWdnZWRJdGVtczppLm1hcCgodD0+dC5faXRlbSkpLHNldERyYWdEYXRhOihlLG4pPT50LmRhdGFUcmFuc2Zlci5zZXREYXRhKGUsbiksc2V0RHJhZ2dlZEl0ZW1zQ291bnQ6dD0+ZS5zZXRBdHRyaWJ1dGUoImRyYWdzdGFydCIsdCl9fSk7ci5vcmlnaW5hbEV2ZW50PXQsdGhpcy5kaXNwYXRjaEV2ZW50KHIpfX1fb25EcmFnRW5kKHQpe3RoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgiZHJhZ2dpbmctcm93cyIsITEsdGhpcyksdC5zdG9wUHJvcGFnYXRpb24oKTtjb25zdCBlPW5ldyBDdXN0b21FdmVudCgiZ3JpZC1kcmFnZW5kIik7ZS5vcmlnaW5hbEV2ZW50PXQsdGhpcy5kaXNwYXRjaEV2ZW50KGUpfV9vbkRyYWdMZWF2ZSh0KXt0LnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuX2NsZWFyRHJhZ1N0eWxlcygpfV9vbkRyYWdPdmVyKHQpe2lmKHRoaXMuZHJvcE1vZGUpe2lmKHRoaXMuX2Ryb3BMb2NhdGlvbj12b2lkIDAsdGhpcy5fZHJhZ092ZXJJdGVtPXZvaWQgMCx0aGlzLl9fZG5kQXV0b1Njcm9sbCh0LmNsaWVudFkpKXJldHVybiB2b2lkIHRoaXMuX2NsZWFyRHJhZ1N0eWxlcygpO2xldCBlPXQuY29tcG9zZWRQYXRoKCkuZmlsdGVyKCh0PT4idHIiPT09dC5sb2NhbE5hbWUpKVswXTtpZih0aGlzLl9lZmZlY3RpdmVTaXplJiYib24tZ3JpZCIhPT10aGlzLmRyb3BNb2RlKWlmKGUmJmUucGFyZW50Tm9kZT09PXRoaXMuJC5pdGVtcyl7Y29uc3Qgbj1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3RoaXMuX2Ryb3BMb2NhdGlvbj0ib24tdG9wIix0aGlzLmRyb3BNb2RlPT09Uk50P3RoaXMuX2Ryb3BMb2NhdGlvbj10LmNsaWVudFktbi50b3A8bi5ib3R0b20tdC5jbGllbnRZP0ROdDpCTnQ6dGhpcy5kcm9wTW9kZT09PXpOdCYmKHQuY2xpZW50WS1uLnRvcDxuLmhlaWdodC8zP3RoaXMuX2Ryb3BMb2NhdGlvbj1ETnQ6dC5jbGllbnRZLW4udG9wPm4uaGVpZ2h0LzMqMiYmKHRoaXMuX2Ryb3BMb2NhdGlvbj1CTnQpKX1lbHNle2lmKGUpcmV0dXJuO2lmKHRoaXMuZHJvcE1vZGUhPT1STnQmJnRoaXMuZHJvcE1vZGUhPT16TnQpcmV0dXJuO2U9QXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZpbHRlcigodD0+IXQuaGlkZGVuKSkucG9wKCksdGhpcy5fZHJvcExvY2F0aW9uPUJOdH1lbHNlIHRoaXMuX2Ryb3BMb2NhdGlvbj1ITnQ7aWYoZSYmZS5oYXNBdHRyaWJ1dGUoImRyb3AtZGlzYWJsZWQiKSlyZXR1cm4gdm9pZCh0aGlzLl9kcm9wTG9jYXRpb249dm9pZCAwKTt0LnN0b3BQcm9wYWdhdGlvbigpLHQucHJldmVudERlZmF1bHQoKSx0aGlzLl9kcm9wTG9jYXRpb249PT1ITnQ/dGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJkcmFnb3ZlciIsITAsdGhpcyk6ZT8odGhpcy5fZHJhZ092ZXJJdGVtPWUuX2l0ZW0sZS5nZXRBdHRyaWJ1dGUoImRyYWdvdmVyIikhPT10aGlzLl9kcm9wTG9jYXRpb24mJmUuc2V0QXR0cmlidXRlKCJkcmFnb3ZlciIsdGhpcy5fZHJvcExvY2F0aW9uKSk6dGhpcy5fY2xlYXJEcmFnU3R5bGVzKCl9fV9fZG5kQXV0b1Njcm9sbCh0KXtpZih0aGlzLl9fZG5kQXV0b1Njcm9sbGluZylyZXR1cm4hMDtjb25zdCBlPXRoaXMuJC5oZWFkZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tLG49dGhpcy4kLmZvb3Rlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AsaT1lLXQrdGhpcy5fX2RuZEF1dG9TY3JvbGxUaHJlc2hvbGQscj10LW4rdGhpcy5fX2RuZEF1dG9TY3JvbGxUaHJlc2hvbGQ7bGV0IG89MDtpZihyPjA/bz0yKnI6aT4wJiYobz0yKi1pKSxvKXtjb25zdCB0PXRoaXMuJC50YWJsZS5zY3JvbGxUb3A7aWYodGhpcy4kLnRhYmxlLnNjcm9sbFRvcCs9byx0IT09dGhpcy4kLnRhYmxlLnNjcm9sbFRvcClyZXR1cm4gdGhpcy5fX2RuZEF1dG9TY3JvbGxpbmc9ITAsc2V0VGltZW91dCgoKCk9PnRoaXMuX19kbmRBdXRvU2Nyb2xsaW5nPSExKSwyMCksdGhpcy5fc2Nyb2xsSGFuZGxlcigpLCEwfX1fX2dldFZpZXdwb3J0Um93cygpe2NvbnN0IHQ9dGhpcy4kLmhlYWRlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5ib3R0b20sZT10aGlzLiQuZm9vdGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZpbHRlcigobj0+e2NvbnN0IGk9bi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gaS5ib3R0b20+dCYmaS50b3A8ZX0pKX1fY2xlYXJEcmFnU3R5bGVzKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoImRyYWdvdmVyIiksQXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZvckVhY2goKHQ9PnQucmVtb3ZlQXR0cmlidXRlKCJkcmFnb3ZlciIpKSl9X29uRHJvcCh0KXtpZih0aGlzLmRyb3BNb2RlKXt0LnN0b3BQcm9wYWdhdGlvbigpLHQucHJldmVudERlZmF1bHQoKTtjb25zdCBlPXQuZGF0YVRyYW5zZmVyLnR5cGVzJiZBcnJheS5mcm9tKHQuZGF0YVRyYW5zZmVyLnR5cGVzKS5tYXAoKGU9Pih7dHlwZTplLGRhdGE6dC5kYXRhVHJhbnNmZXIuZ2V0RGF0YShlKX0pKSk7dGhpcy5fY2xlYXJEcmFnU3R5bGVzKCk7Y29uc3Qgbj1uZXcgQ3VzdG9tRXZlbnQoImdyaWQtZHJvcCIse2J1YmJsZXM6dC5idWJibGVzLGNhbmNlbGFibGU6dC5jYW5jZWxhYmxlLGRldGFpbDp7ZHJvcFRhcmdldEl0ZW06dGhpcy5fZHJhZ092ZXJJdGVtLGRyb3BMb2NhdGlvbjp0aGlzLl9kcm9wTG9jYXRpb24sZHJhZ0RhdGE6ZX19KTtuLm9yaWdpbmFsRXZlbnQ9dCx0aGlzLmRpc3BhdGNoRXZlbnQobil9fV9fZm9ybWF0RGVmYXVsdFRyYW5zZmVyRGF0YSh0KXtyZXR1cm4gdC5tYXAoKHQ9PkFycmF5LmZyb20odC5jaGlsZHJlbikuZmlsdGVyKCh0PT4hdC5oaWRkZW4mJi0xPT09dC5nZXRBdHRyaWJ1dGUoInBhcnQiKS5pbmRleE9mKCJkZXRhaWxzLWNlbGwiKSkpLnNvcnQoKCh0LGUpPT50Ll9jb2x1bW4uX29yZGVyPmUuX2NvbHVtbi5fb3JkZXI/MTotMSkpLm1hcCgodD0+dC5fY29udGVudC50ZXh0Q29udGVudC50cmltKCkpKS5maWx0ZXIoKHQ9PnQpKS5qb2luKCJcdCIpKSkuam9pbigiXG4iKX1fZHJhZ0Ryb3BBY2Nlc3NDaGFuZ2VkKHQsZSxuLGkpe3RoaXMuZmlsdGVyRHJhZ0FuZERyb3AoKX1maWx0ZXJEcmFnQW5kRHJvcCgpe0FycmF5LmZyb20odGhpcy4kLml0ZW1zLmNoaWxkcmVuKS5maWx0ZXIoKHQ9PiF0LmhpZGRlbikpLmZvckVhY2goKHQ9Pnt0aGlzLl9maWx0ZXJEcmFnQW5kRHJvcCh0LHRoaXMuX19nZXRSb3dNb2RlbCh0KSl9KSl9X2ZpbHRlckRyYWdBbmREcm9wKHQsZSl7Y29uc3Qgbj0hdGhpcy5yb3dzRHJhZ2dhYmxlfHx0aGlzLmRyYWdGaWx0ZXImJiF0aGlzLmRyYWdGaWx0ZXIoZSksaT0hdGhpcy5kcm9wTW9kZXx8dGhpcy5kcm9wRmlsdGVyJiYhdGhpcy5kcm9wRmlsdGVyKGUpOyh3aW5kb3cuU2hhZHlET00/W3RdOkFycmF5LmZyb20odC5jaGlsZHJlbikubWFwKCh0PT50Ll9jb250ZW50KSkpLmZvckVhY2goKHQ9PntuP3QucmVtb3ZlQXR0cmlidXRlKCJkcmFnZ2FibGUiKTp0LnNldEF0dHJpYnV0ZSgiZHJhZ2dhYmxlIiwhMCl9KSksdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJkcmFnLWRpc2FibGVkIixuLHQpLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgiZHJvcC1kaXNhYmxlZCIsaSx0KX19Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBWYWFkaW4gTHRkLgogICAgVGhpcyBwcm9ncmFtIGlzIGF2YWlsYWJsZSB1bmRlciBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCwgYXZhaWxhYmxlIGF0IGh0dHBzOi8vdmFhZGluLmNvbS9saWNlbnNlLwogICAgKi8sVk50PXQ9PmNsYXNzIGV4dGVuZHMgdHtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57X2hlYWRlckZvY3VzYWJsZTp7dHlwZTpPYmplY3Qsb2JzZXJ2ZXI6Il9mb2N1c2FibGVDaGFuZ2VkIn0sX2l0ZW1zRm9jdXNhYmxlOnt0eXBlOk9iamVjdCxvYnNlcnZlcjoiX2ZvY3VzYWJsZUNoYW5nZWQifSxfZm9vdGVyRm9jdXNhYmxlOnt0eXBlOk9iamVjdCxvYnNlcnZlcjoiX2ZvY3VzYWJsZUNoYW5nZWQifSxfbmF2aWdhdGluZ0lzSGlkZGVuOkJvb2xlYW4sX2ZvY3VzZWRJdGVtSW5kZXg6e3R5cGU6TnVtYmVyLHZhbHVlOjB9LF9mb2N1c2VkQ29sdW1uT3JkZXI6TnVtYmVyfX1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5faW9zfHx0aGlzLl9hbmRyb2lkfHwodGhpcy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLl9vbktleURvd24pLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLHRoaXMuX29uS2V5VXApLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNpbiIsdGhpcy5fb25Gb2N1c0luKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImZvY3Vzb3V0Iix0aGlzLl9vbkZvY3VzT3V0KSx0aGlzLiQudGFibGUuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNpbiIsdGhpcy5fb25DZWxsRm9jdXNJbi5iaW5kKHRoaXMpKSx0aGlzLiQudGFibGUuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNvdXQiLHRoaXMuX29uQ2VsbEZvY3VzT3V0LmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwoKCk9Pnt0aGlzLl90b2dnbGVBdHRyaWJ1dGUoIm5hdmlnYXRpbmciLCExLHRoaXMpLHRoaXMuX2lzTW91c2Vkb3duPSEwfSkpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsKCgpPT50aGlzLl9pc01vdXNlZG93bj0hMSkpKX1fZm9jdXNhYmxlQ2hhbmdlZCh0LGUpe2UmJmUuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIi0xIiksdCYmdC5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiMCIpfV9vbktleURvd24odCl7bGV0IGUsbj10LmtleTtzd2l0Y2goIlVwIiE9PW4mJiJEb3duIiE9PW4mJiJMZWZ0IiE9PW4mJiJSaWdodCIhPT1ufHwobj0iQXJyb3ciK24pLCJFc2MiPT09biYmKG49IkVzY2FwZSIpLCJTcGFjZWJhciI9PT1uJiYobj0iICIpLG4pe2Nhc2UiQXJyb3dVcCI6Y2FzZSJBcnJvd0Rvd24iOmNhc2UiQXJyb3dMZWZ0IjpjYXNlIkFycm93UmlnaHQiOmNhc2UiUGFnZVVwIjpjYXNlIlBhZ2VEb3duIjpjYXNlIkhvbWUiOmNhc2UiRW5kIjplPSJOYXZpZ2F0aW9uIjticmVhaztjYXNlIkVudGVyIjpjYXNlIkVzY2FwZSI6Y2FzZSJGMiI6ZT0iSW50ZXJhY3Rpb24iO2JyZWFrO2Nhc2UiVGFiIjplPSJUYWIiO2JyZWFrO2Nhc2UiICI6ZT0iU3BhY2UifXRoaXMuX2RldGVjdEludGVyYWN0aW5nKHQpLHRoaXMuaGFzQXR0cmlidXRlKCJpbnRlcmFjdGluZyIpJiYiSW50ZXJhY3Rpb24iIT09ZSYmKGU9dm9pZCAwKSxlJiZ0aGlzW2Bfb24ke2V9S2V5RG93bmBdKHQsbil9X2Vuc3VyZVNjcm9sbGVkVG9JbmRleCh0KXtBcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZmlsdGVyKChlPT5lLmluZGV4PT09dCkpWzBdfHx0aGlzLl9zY3JvbGxUb0luZGV4KHQpfV9vbk5hdmlnYXRpb25LZXlEb3duKHQsZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbCh0LnBhcmVudE5vZGUuY2hpbGRyZW4sdCl9dGhpcy5fc2Nyb2xsSGFuZGxlcigpLHQucHJldmVudERlZmF1bHQoKTtjb25zdCBpPXRoaXMuX2xhc3RWaXNpYmxlSW5kZXgtdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXgtMTtsZXQgcj0wLG89MDtzd2l0Y2goZSl7Y2FzZSJBcnJvd1JpZ2h0IjpyPXRoaXMuX19pc1JUTD8tMToxO2JyZWFrO2Nhc2UiQXJyb3dMZWZ0IjpyPXRoaXMuX19pc1JUTD8xOi0xO2JyZWFrO2Nhc2UiSG9tZSI6cj0tMS8wLHQuY3RybEtleSYmKG89LTEvMCk7YnJlYWs7Y2FzZSJFbmQiOnI9MS8wLHQuY3RybEtleSYmKG89MS8wKTticmVhaztjYXNlIkFycm93RG93biI6bz0xO2JyZWFrO2Nhc2UiQXJyb3dVcCI6bz0tMTticmVhaztjYXNlIlBhZ2VEb3duIjpvPWk7YnJlYWs7Y2FzZSJQYWdlVXAiOm89LWl9Y29uc3QgYT10LmNvbXBvc2VkUGF0aCgpWzBdLHM9bihhKSxsPXRoaXMuX2VsZW1lbnRNYXRjaGVzKGEsJ1twYXJ0fj0iZGV0YWlscy1jZWxsIl0nKSxjPWEucGFyZW50Tm9kZSx1PWMucGFyZW50Tm9kZSxoPSh1PT09dGhpcy4kLml0ZW1zP3RoaXMuX2VmZmVjdGl2ZVNpemU6dS5jaGlsZHJlbi5sZW5ndGgpLTEsZD11PT09dGhpcy4kLml0ZW1zP3ZvaWQgMCE9PXRoaXMuX2ZvY3VzZWRJdGVtSW5kZXg/dGhpcy5fZm9jdXNlZEl0ZW1JbmRleDpjLmluZGV4Om4oYyk7bGV0IHA9TWF0aC5tYXgoMCxNYXRoLm1pbihkK28saCkpLGY9ITE7aWYodT09PXRoaXMuJC5pdGVtcyl7Y29uc3QgdD1jLl9pdGVtLGU9dGhpcy5fY2FjaGUuZ2V0SXRlbUZvckluZGV4KHApO2Y9bD8wPT09bzoxPT09byYmdGhpcy5faXNEZXRhaWxzT3BlbmVkKHQpfHwtMT09PW8mJnAhPT1kJiZ0aGlzLl9pc0RldGFpbHNPcGVuZWQoZSksZiE9PWwmJigxPT09byYmZnx8LTE9PT1vJiYhZikmJihwPWQpfWlmKHUhPT10aGlzLiQuaXRlbXMpaWYocD5kKWZvcig7cDxoJiZ1LmNoaWxkcmVuW3BdLmhpZGRlbjspcCsrO2Vsc2UgaWYocDxkKWZvcig7cD4wJiZ1LmNoaWxkcmVuW3BdLmhpZGRlbjspcC0tO3ZvaWQgMD09PXRoaXMuX2ZvY3VzZWRDb2x1bW5PcmRlciYmKHRoaXMuX2ZvY3VzZWRDb2x1bW5PcmRlcj1sPzA6dGhpcy5fZ2V0Q29sdW1ucyh1LGQpLmZpbHRlcigodD0+IXQuaGlkZGVuKSlbc10uX29yZGVyKTtjb25zdCBtPXRoaXMuX2dldENvbHVtbnModSxwKS5maWx0ZXIoKHQ9PiF0LmhpZGRlbikpLGc9bS5tYXAoKHQ9PnQuX29yZGVyKSkuc29ydCgoKHQsZSk9PnQtZSkpLF89Zy5sZW5ndGgtMSx5PWcuaW5kZXhPZihnLnNsaWNlKDApLnNvcnQoKCh0LGUpPT5NYXRoLmFicyh0LXRoaXMuX2ZvY3VzZWRDb2x1bW5PcmRlciktTWF0aC5hYnMoZS10aGlzLl9mb2N1c2VkQ29sdW1uT3JkZXIpKSlbMF0pLHY9MD09PW8mJmw/eTpNYXRoLm1heCgwLE1hdGgubWluKHkrcixfKSk7diE9PXkmJih0aGlzLl9mb2N1c2VkQ29sdW1uT3JkZXI9dm9pZCAwKSx1PT09dGhpcy4kLml0ZW1zJiZ0aGlzLl9lbnN1cmVTY3JvbGxlZFRvSW5kZXgocCksdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJuYXZpZ2F0aW5nIiwhMCx0aGlzKTtjb25zdCBiPW0ucmVkdWNlKCgodCxlLG4pPT4odFtlLl9vcmRlcl09bix0KSkse30pW2dbdl1dLHg9dT09PXRoaXMuJC5pdGVtcz9BcnJheS5mcm9tKHUuY2hpbGRyZW4pLmZpbHRlcigodD0+dC5pbmRleD09PXApKVswXTp1LmNoaWxkcmVuW3BdO2lmKCF4KXJldHVybjtjb25zdCB3PWY/QXJyYXkuZnJvbSh4LmNoaWxkcmVuKS5maWx0ZXIoKHQ9PnRoaXMuX2VsZW1lbnRNYXRjaGVzKHQsJ1twYXJ0fj0iZGV0YWlscy1jZWxsIl0nKSkpWzBdOnguY2hpbGRyZW5bYl07aWYodGhpcy5fc2Nyb2xsSG9yaXpvbnRhbGx5VG9DZWxsKHcpLHU9PT10aGlzLiQuaXRlbXMmJih0aGlzLl9mb2N1c2VkSXRlbUluZGV4PXApLHU9PT10aGlzLiQuaXRlbXMpe2NvbnN0IHQ9dy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxlPXRoaXMuJC5mb290ZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wLG49dGhpcy4kLmhlYWRlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5ib3R0b207dC5ib3R0b20+ZT8odGhpcy4kLnRhYmxlLnNjcm9sbFRvcCs9dC5ib3R0b20tZSx0aGlzLl9zY3JvbGxIYW5kbGVyKCkpOnQudG9wPG4mJih0aGlzLiQudGFibGUuc2Nyb2xsVG9wLT1uLXQudG9wLHRoaXMuX3Njcm9sbEhhbmRsZXIoKSl9dy5mb2N1cygpfV9wYXJzZUV2ZW50UGF0aCh0KXtjb25zdCBlPXQuaW5kZXhPZih0aGlzLiQudGFibGUpO3JldHVybntyb3dHcm91cDp0W2UtMV0scm93OnRbZS0yXSxjZWxsOnRbZS0zXX19X29uSW50ZXJhY3Rpb25LZXlEb3duKHQsZSl7Y29uc3Qgbj10LmNvbXBvc2VkUGF0aCgpWzBdLGk9ImlucHV0Ij09PW4ubG9jYWxOYW1lJiYhL14oYnV0dG9ufGNoZWNrYm94fGNvbG9yfGZpbGV8aW1hZ2V8cmFkaW98cmFuZ2V8cmVzZXR8c3VibWl0KSQvaS50ZXN0KG4udHlwZSk7bGV0IHI7c3dpdGNoKGUpe2Nhc2UiRW50ZXIiOnI9IXRoaXMuaGFzQXR0cmlidXRlKCJpbnRlcmFjdGluZyIpfHwhaTticmVhaztjYXNlIkVzY2FwZSI6cj0hMTticmVhaztjYXNlIkYyIjpyPSF0aGlzLmhhc0F0dHJpYnV0ZSgiaW50ZXJhY3RpbmciKX1jb25zdHtjZWxsOm99PXRoaXMuX3BhcnNlRXZlbnRQYXRoKHQuY29tcG9zZWRQYXRoKCkpO2lmKHRoaXMuaGFzQXR0cmlidXRlKCJpbnRlcmFjdGluZyIpIT09cilpZihyKXtjb25zdCBlPW8uX2NvbnRlbnQucXVlcnlTZWxlY3RvcigiW2ZvY3VzLXRhcmdldF0iKXx8by5fY29udGVudC5maXJzdEVsZW1lbnRDaGlsZDtlJiYodC5wcmV2ZW50RGVmYXVsdCgpLGUuZm9jdXMoKSx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoImludGVyYWN0aW5nIiwhMCx0aGlzKSx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoIm5hdmlnYXRpbmciLCExLHRoaXMpKX1lbHNlIHQucHJldmVudERlZmF1bHQoKSx0aGlzLl9mb2N1c2VkQ29sdW1uT3JkZXI9dm9pZCAwLG8uZm9jdXMoKSx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoImludGVyYWN0aW5nIiwhMSx0aGlzKSx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoIm5hdmlnYXRpbmciLCEwLHRoaXMpfV9wcmVkaWN0Rm9jdXNTdGVwVGFyZ2V0KHQsZSl7Y29uc3Qgbj1bdGhpcy4kLnRhYmxlLHRoaXMuX2hlYWRlckZvY3VzYWJsZSx0aGlzLl9pdGVtc0ZvY3VzYWJsZSx0aGlzLl9mb290ZXJGb2N1c2FibGUsdGhpcy4kLmZvY3VzZXhpdF07bGV0IGk9bi5pbmRleE9mKHQpO2ZvcihpKz1lO2k+PTAmJmk8PW4ubGVuZ3RoLTEmJighbltpXXx8bltpXS5wYXJlbnROb2RlLmhpZGRlbik7KWkrPWU7cmV0dXJuIG5baV19X29uVGFiS2V5RG93bih0KXtjb25zdCBlPXRoaXMuX3ByZWRpY3RGb2N1c1N0ZXBUYXJnZXQodC5jb21wb3NlZFBhdGgoKVswXSx0LnNoaWZ0S2V5Py0xOjEpO2lmKGU9PT10aGlzLiQudGFibGUpdGhpcy4kLnRhYmxlLmZvY3VzKCk7ZWxzZSBpZihlPT09dGhpcy4kLmZvY3VzZXhpdCl0aGlzLiQuZm9jdXNleGl0LmZvY3VzKCk7ZWxzZSBpZihlPT09dGhpcy5faXRlbXNGb2N1c2FibGUpe2xldCBuPWU7Y29uc3QgaT10aGlzLl9pdGVtc0ZvY3VzYWJsZS5wYXJlbnROb2RlO2lmKHRoaXMuX2Vuc3VyZVNjcm9sbGVkVG9JbmRleCh0aGlzLl9mb2N1c2VkSXRlbUluZGV4KSxpLmluZGV4IT09dGhpcy5fZm9jdXNlZEl0ZW1JbmRleCl7Y29uc3QgdD1BcnJheS5mcm9tKGkuY2hpbGRyZW4pLmluZGV4T2YodGhpcy5faXRlbXNGb2N1c2FibGUpLGU9QXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZpbHRlcigodD0+dC5pbmRleD09PXRoaXMuX2ZvY3VzZWRJdGVtSW5kZXgpKVswXTtlJiYobj1lLmNoaWxkcmVuW3RdKX10LnByZXZlbnREZWZhdWx0KCksbi5mb2N1cygpfWVsc2UgdC5wcmV2ZW50RGVmYXVsdCgpLGUuZm9jdXMoKTt0aGlzLl90b2dnbGVBdHRyaWJ1dGUoIm5hdmlnYXRpbmciLCEwLHRoaXMpfV9vblNwYWNlS2V5RG93bih0KXt0LnByZXZlbnREZWZhdWx0KCk7Y29uc3QgZT10LmNvbXBvc2VkUGF0aCgpWzBdO2UuX2NvbnRlbnQmJmUuX2NvbnRlbnQuZmlyc3RFbGVtZW50Q2hpbGR8fHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNlbGwtYWN0aXZhdGUiLHtkZXRhaWw6e21vZGVsOnRoaXMuX19nZXRSb3dNb2RlbChlLnBhcmVudEVsZW1lbnQpfX0pKX1fb25LZXlVcCh0KXtpZighL14oIHxTcGFjZUJhcikkLy50ZXN0KHQua2V5KSlyZXR1cm47dC5wcmV2ZW50RGVmYXVsdCgpO2NvbnN0IGU9dC5jb21wb3NlZFBhdGgoKVswXTtpZihlLl9jb250ZW50JiZlLl9jb250ZW50LmZpcnN0RWxlbWVudENoaWxkKXtjb25zdCB0PXRoaXMuaGFzQXR0cmlidXRlKCJuYXZpZ2F0aW5nIik7ZS5fY29udGVudC5maXJzdEVsZW1lbnRDaGlsZC5jbGljaygpLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibmF2aWdhdGluZyIsdCx0aGlzKX19X29uRm9jdXNJbih0KXt0aGlzLl9pc01vdXNlZG93bnx8dGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJuYXZpZ2F0aW5nIiwhMCx0aGlzKTtjb25zdCBlPXQuY29tcG9zZWRQYXRoKClbMF07ZT09PXRoaXMuJC50YWJsZXx8ZT09PXRoaXMuJC5mb2N1c2V4aXQ/KHRoaXMuX3ByZWRpY3RGb2N1c1N0ZXBUYXJnZXQoZSxlPT09dGhpcy4kLnRhYmxlPzE6LTEpLmZvY3VzKCksdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJpbnRlcmFjdGluZyIsITEsdGhpcykpOnRoaXMuX2RldGVjdEludGVyYWN0aW5nKHQpfV9vbkZvY3VzT3V0KHQpe3RoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibmF2aWdhdGluZyIsITEsdGhpcyksdGhpcy5fZGV0ZWN0SW50ZXJhY3RpbmcodCl9X29uQ2VsbEZvY3VzSW4odCl7aWYodGhpcy5fZGV0ZWN0SW50ZXJhY3RpbmcodCksMz09PXQuY29tcG9zZWRQYXRoKCkuaW5kZXhPZih0aGlzLiQudGFibGUpKXtjb25zdCBlPXQuY29tcG9zZWRQYXRoKClbMF07dGhpcy5fYWN0aXZlUm93R3JvdXA9ZS5wYXJlbnROb2RlLnBhcmVudE5vZGUsdGhpcy5fYWN0aXZlUm93R3JvdXA9PT10aGlzLiQuaGVhZGVyP3RoaXMuX2hlYWRlckZvY3VzYWJsZT1lOnRoaXMuX2FjdGl2ZVJvd0dyb3VwPT09dGhpcy4kLml0ZW1zP3RoaXMuX2l0ZW1zRm9jdXNhYmxlPWU6dGhpcy5fYWN0aXZlUm93R3JvdXA9PT10aGlzLiQuZm9vdGVyJiYodGhpcy5fZm9vdGVyRm9jdXNhYmxlPWUpLGUuX2NvbnRlbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNlbGwtZm9jdXNpbiIse2J1YmJsZXM6ITF9KSl9dGhpcy5fZGV0ZWN0Rm9jdXNlZEl0ZW1JbmRleCh0KX1fb25DZWxsRm9jdXNPdXQodCl7Mz09PXQuY29tcG9zZWRQYXRoKCkuaW5kZXhPZih0aGlzLiQudGFibGUpJiZ0LmNvbXBvc2VkUGF0aCgpWzBdLl9jb250ZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJjZWxsLWZvY3Vzb3V0Iix7YnViYmxlczohMX0pKX1fZGV0ZWN0SW50ZXJhY3RpbmcodCl7dGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJpbnRlcmFjdGluZyIsdC5jb21wb3NlZFBhdGgoKS5zb21lKCh0PT4idmFhZGluLWdyaWQtY2VsbC1jb250ZW50Ij09PXQubG9jYWxOYW1lKSksdGhpcyl9X2RldGVjdEZvY3VzZWRJdGVtSW5kZXgodCl7Y29uc3R7cm93R3JvdXA6ZSxyb3c6bn09dGhpcy5fcGFyc2VFdmVudFBhdGgodC5jb21wb3NlZFBhdGgoKSk7ZT09PXRoaXMuJC5pdGVtcyYmKHRoaXMuX2ZvY3VzZWRJdGVtSW5kZXg9bi5pbmRleCl9X3ByZXZlbnRTY3JvbGxlclJvdGF0aW5nQ2VsbEZvY3VzKHQsZSl7dC5pbmRleD09PXRoaXMuX2ZvY3VzZWRJdGVtSW5kZXgmJnRoaXMuaGFzQXR0cmlidXRlKCJuYXZpZ2F0aW5nIikmJnRoaXMuX2FjdGl2ZVJvd0dyb3VwPT09dGhpcy4kLml0ZW1zJiYodGhpcy5fbmF2aWdhdGluZ0lzSGlkZGVuPSEwLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibmF2aWdhdGluZyIsITEsdGhpcykpLGU9PT10aGlzLl9mb2N1c2VkSXRlbUluZGV4JiZ0aGlzLl9uYXZpZ2F0aW5nSXNIaWRkZW4mJih0aGlzLl9uYXZpZ2F0aW5nSXNIaWRkZW49ITEsdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJuYXZpZ2F0aW5nIiwhMCx0aGlzKSl9X2dldENvbHVtbnModCxlKXtsZXQgbj10aGlzLl9jb2x1bW5UcmVlLmxlbmd0aC0xO3JldHVybiB0PT09dGhpcy4kLmhlYWRlcj9uPWU6dD09PXRoaXMuJC5mb290ZXImJihuPXRoaXMuX2NvbHVtblRyZWUubGVuZ3RoLTEtZSksdGhpcy5fY29sdW1uVHJlZVtuXX1fcmVzZXRLZXlib2FyZE5hdmlnYXRpb24oKXtpZih0aGlzLiQuaGVhZGVyLmZpcnN0RWxlbWVudENoaWxkJiYodGhpcy5faGVhZGVyRm9jdXNhYmxlPUFycmF5LmZyb20odGhpcy4kLmhlYWRlci5maXJzdEVsZW1lbnRDaGlsZC5jaGlsZHJlbikuZmlsdGVyKCh0PT4hdC5oaWRkZW4pKVswXSksdGhpcy4kLml0ZW1zLmZpcnN0RWxlbWVudENoaWxkKXtjb25zdCB0PXRoaXMuX2l0ZXJhdGVJdGVtcygoKHQsZSk9PntpZih0aGlzLl9maXJzdFZpc2libGVJbmRleD09PWUpcmV0dXJuIHRoaXMuJC5pdGVtcy5jaGlsZHJlblt0XX0pKTt0JiYodGhpcy5faXRlbXNGb2N1c2FibGU9QXJyYXkuZnJvbSh0LmNoaWxkcmVuKS5maWx0ZXIoKHQ9PiF0LmhpZGRlbikpWzBdKX10aGlzLiQuZm9vdGVyLmZpcnN0RWxlbWVudENoaWxkJiYodGhpcy5fZm9vdGVyRm9jdXNhYmxlPUFycmF5LmZyb20odGhpcy4kLmZvb3Rlci5maXJzdEVsZW1lbnRDaGlsZC5jaGlsZHJlbikuZmlsdGVyKCh0PT4hdC5oaWRkZW4pKVswXSl9X3Njcm9sbEhvcml6b250YWxseVRvQ2VsbCh0KXtpZih0Lmhhc0F0dHJpYnV0ZSgiZnJvemVuIil8fHRoaXMuX2VsZW1lbnRNYXRjaGVzKHQsJ1twYXJ0fj0iZGV0YWlscy1jZWxsIl0nKSlyZXR1cm47Y29uc3QgZT10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49dC5wYXJlbnROb2RlLGk9QXJyYXkuZnJvbShuLmNoaWxkcmVuKS5pbmRleE9mKHQpLHI9dGhpcy4kLnRhYmxlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2xldCBvPXIubGVmdCxhPXIucmlnaHQ7Zm9yKGxldCB0PWktMTt0Pj0wO3QtLSl7Y29uc3QgZT1uLmNoaWxkcmVuW3RdO2lmKCFlLmhhc0F0dHJpYnV0ZSgiaGlkZGVuIikmJiF0aGlzLl9lbGVtZW50TWF0Y2hlcyhlLCdbcGFydH49ImRldGFpbHMtY2VsbCJdJykmJmUuaGFzQXR0cmlidXRlKCJmcm96ZW4iKSl7bz1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnJpZ2h0O2JyZWFrfX1mb3IobGV0IHQ9aSsxO3Q8bi5jaGlsZHJlbi5sZW5ndGg7dCsrKXtjb25zdCBlPW4uY2hpbGRyZW5bdF07aWYoIWUuaGFzQXR0cmlidXRlKCJoaWRkZW4iKSYmIXRoaXMuX2VsZW1lbnRNYXRjaGVzKGUsJ1twYXJ0fj0iZGV0YWlscy1jZWxsIl0nKSYmZS5oYXNBdHRyaWJ1dGUoImZyb3plbiIpKXthPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDticmVha319ZS5sZWZ0PG8mJih0aGlzLiQudGFibGUuc2Nyb2xsTGVmdCs9TWF0aC5yb3VuZChlLmxlZnQtbykpLGUucmlnaHQ+YSYmKHRoaXMuJC50YWJsZS5zY3JvbGxMZWZ0Kz1NYXRoLnJvdW5kKGUucmlnaHQtYSkpfV9lbGVtZW50TWF0Y2hlcyh0LGUpe3JldHVybiB0Lm1hdGNoZXM/dC5tYXRjaGVzKGUpOi0xIT09QXJyYXkuZnJvbSh0LnBhcmVudE5vZGUucXVlcnlTZWxlY3RvckFsbChlKSkuaW5kZXhPZih0KX19Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBWYWFkaW4gTHRkLgogICAgVGhpcyBwcm9ncmFtIGlzIGF2YWlsYWJsZSB1bmRlciBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCwgYXZhaWxhYmxlIGF0IGh0dHBzOi8vdmFhZGluLmNvbS9saWNlbnNlLwogICAgKi8sVU50PXQ9PmNsYXNzIGV4dGVuZHMoZGkodCkpe3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntjb2x1bW5SZW9yZGVyaW5nQWxsb3dlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfb3JkZXJCYXNlU2NvcGU6e3R5cGU6TnVtYmVyLHZhbHVlOjFlN319fXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfdXBkYXRlT3JkZXJzKF9jb2x1bW5UcmVlLCBfY29sdW1uVHJlZS4qKSJdfXJlYWR5KCl7c3VwZXIucmVhZHkoKSxuaSh0aGlzLCJ0cmFjayIsdGhpcy5fb25UcmFja0V2ZW50KSx0aGlzLl9yZW9yZGVyR2hvc3Q9dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJ1twYXJ0PSJyZW9yZGVyLWdob3N0Il0nKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMuX29uVG91Y2hTdGFydC5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsdGhpcy5fb25Ub3VjaE1vdmUuYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsdGhpcy5fb25Ub3VjaEVuZC5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51Iix0aGlzLl9vbkNvbnRleHRNZW51LmJpbmQodGhpcykpfV9vbkNvbnRleHRNZW51KHQpe3RoaXMuaGFzQXR0cmlidXRlKCJyZW9yZGVyaW5nIikmJnQucHJldmVudERlZmF1bHQoKX1fb25Ub3VjaFN0YXJ0KHQpe3RoaXMuX3N0YXJ0VG91Y2hSZW9yZGVyVGltZW91dD1zZXRUaW1lb3V0KCgoKT0+e3RoaXMuX29uVHJhY2tTdGFydCh7ZGV0YWlsOnt4OnQudG91Y2hlc1swXS5jbGllbnRYLHk6dC50b3VjaGVzWzBdLmNsaWVudFl9fSl9KSwxMDApfV9vblRvdWNoTW92ZSh0KXt0aGlzLl9kcmFnZ2VkQ29sdW1uJiZ0LnByZXZlbnREZWZhdWx0KCksY2xlYXJUaW1lb3V0KHRoaXMuX3N0YXJ0VG91Y2hSZW9yZGVyVGltZW91dCl9X29uVG91Y2hFbmQoKXtjbGVhclRpbWVvdXQodGhpcy5fc3RhcnRUb3VjaFJlb3JkZXJUaW1lb3V0KSx0aGlzLl9vblRyYWNrRW5kKCl9X29uVHJhY2tFdmVudCh0KXtpZigic3RhcnQiPT09dC5kZXRhaWwuc3RhdGUpe2NvbnN0IGU9dC5jb21wb3NlZFBhdGgoKSxuPWVbZS5pbmRleE9mKHRoaXMuJC5oZWFkZXIpLTJdO2lmKCFufHwhbi5fY29udGVudClyZXR1cm47Y29uc3QgaT10aGlzLmdldFJvb3ROb2RlKCkuYWN0aXZlRWxlbWVudDtpZihuLl9jb250ZW50LmNvbnRhaW5zKHRoaXMuZ2V0Um9vdE5vZGUoKS5hY3RpdmVFbGVtZW50KSYmKCF0aGlzLl9pZXx8IXRoaXMuX2lzRm9jdXNhYmxlKGkpKSlyZXR1cm47aWYodGhpcy4kLnNjcm9sbGVyLmhhc0F0dHJpYnV0ZSgiY29sdW1uLXJlc2l6aW5nIikpcmV0dXJuO3RoaXMuX3RvdWNoRGV2aWNlfHx0aGlzLl9vblRyYWNrU3RhcnQodCl9ZWxzZSJ0cmFjayI9PT10LmRldGFpbC5zdGF0ZT90aGlzLl9vblRyYWNrKHQpOiJlbmQiPT09dC5kZXRhaWwuc3RhdGUmJnRoaXMuX29uVHJhY2tFbmQodCl9X29uVHJhY2tTdGFydCh0KXtpZighdGhpcy5jb2x1bW5SZW9yZGVyaW5nQWxsb3dlZClyZXR1cm47Y29uc3QgZT10LnBhdGh8fHFpKHQpLnBhdGg7aWYoZSYmZS5maWx0ZXIoKHQ9PnQuaGFzQXR0cmlidXRlJiZ0Lmhhc0F0dHJpYnV0ZSgiZHJhZ2dhYmxlIikpKVswXSlyZXR1cm47Y29uc3Qgbj10aGlzLl9jZWxsRnJvbVBvaW50KHQuZGV0YWlsLngsdC5kZXRhaWwueSk7aWYobiYmLTEhPT1uLmdldEF0dHJpYnV0ZSgicGFydCIpLmluZGV4T2YoImhlYWRlci1jZWxsIikpe2Zvcih0aGlzLl90b2dnbGVBdHRyaWJ1dGUoInJlb3JkZXJpbmciLCEwLHRoaXMpLHRoaXMuX2RyYWdnZWRDb2x1bW49bi5fY29sdW1uOzE9PT10aGlzLl9kcmFnZ2VkQ29sdW1uLnBhcmVudEVsZW1lbnQuY2hpbGRFbGVtZW50Q291bnQ7KXRoaXMuX2RyYWdnZWRDb2x1bW49dGhpcy5fZHJhZ2dlZENvbHVtbi5wYXJlbnRFbGVtZW50O3RoaXMuX3NldFNpYmxpbmdzUmVvcmRlclN0YXR1cyh0aGlzLl9kcmFnZ2VkQ29sdW1uLCJhbGxvd2VkIiksdGhpcy5fZHJhZ2dlZENvbHVtbi5fcmVvcmRlclN0YXR1cz0iZHJhZ2dpbmciLHRoaXMuX3VwZGF0ZUdob3N0KG4pLHRoaXMuX3Jlb3JkZXJHaG9zdC5zdHlsZS52aXNpYmlsaXR5PSJ2aXNpYmxlIix0aGlzLl91cGRhdGVHaG9zdFBvc2l0aW9uKHQuZGV0YWlsLngsdGhpcy5fdG91Y2hEZXZpY2U/dC5kZXRhaWwueS01MDp0LmRldGFpbC55KSx0aGlzLl9hdXRvU2Nyb2xsZXIoKX19X29uVHJhY2sodCl7aWYoIXRoaXMuX2RyYWdnZWRDb2x1bW4pcmV0dXJuO2NvbnN0IGU9dGhpcy5fY2VsbEZyb21Qb2ludCh0LmRldGFpbC54LHQuZGV0YWlsLnkpO2lmKCFlKXJldHVybjtjb25zdCBuPXRoaXMuX2dldFRhcmdldENvbHVtbihlLHRoaXMuX2RyYWdnZWRDb2x1bW4pO3RoaXMuX2lzU3dhcEFsbG93ZWQodGhpcy5fZHJhZ2dlZENvbHVtbixuKSYmdGhpcy5faXNTd2FwcGFibGVCeVBvc2l0aW9uKG4sdC5kZXRhaWwueCkmJnRoaXMuX3N3YXBDb2x1bW5PcmRlcnModGhpcy5fZHJhZ2dlZENvbHVtbixuKSx0aGlzLl91cGRhdGVHaG9zdFBvc2l0aW9uKHQuZGV0YWlsLngsdGhpcy5fdG91Y2hEZXZpY2U/dC5kZXRhaWwueS01MDp0LmRldGFpbC55KSx0aGlzLl9sYXN0RHJhZ0NsaWVudFg9dC5kZXRhaWwueH1fb25UcmFja0VuZCgpe3RoaXMuX2RyYWdnZWRDb2x1bW4mJih0aGlzLl90b2dnbGVBdHRyaWJ1dGUoInJlb3JkZXJpbmciLCExLHRoaXMpLHRoaXMuX2RyYWdnZWRDb2x1bW4uX3Jlb3JkZXJTdGF0dXM9IiIsdGhpcy5fc2V0U2libGluZ3NSZW9yZGVyU3RhdHVzKHRoaXMuX2RyYWdnZWRDb2x1bW4sIiIpLHRoaXMuX2RyYWdnZWRDb2x1bW49bnVsbCx0aGlzLl9sYXN0RHJhZ0NsaWVudFg9bnVsbCx0aGlzLl9yZW9yZGVyR2hvc3Quc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIix0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJjb2x1bW4tcmVvcmRlciIse2RldGFpbDp7Y29sdW1uczp0aGlzLl9nZXRDb2x1bW5zSW5PcmRlcigpfX0pKSl9X2dldENvbHVtbnNJbk9yZGVyKCl7cmV0dXJuIHRoaXMuX2NvbHVtblRyZWUuc2xpY2UoMCkucG9wKCkuZmlsdGVyKCh0PT4hdC5oaWRkZW4pKS5zb3J0KCgodCxlKT0+dC5fb3JkZXItZS5fb3JkZXIpKX1fY2VsbEZyb21Qb2ludCh0LGUpe2xldCBuO2lmKHQ9dHx8MCxlPWV8fDAsdGhpcy5fZHJhZ2dlZENvbHVtbnx8dGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJuby1jb250ZW50LXBvaW50ZXItZXZlbnRzIiwhMCx0aGlzLiQuc2Nyb2xsZXIpLG0/bj10aGlzLnNoYWRvd1Jvb3QuZWxlbWVudEZyb21Qb2ludCh0LGUpOihuPWRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQodCxlKSwidmFhZGluLWdyaWQtY2VsbC1jb250ZW50Ij09PW4ubG9jYWxOYW1lJiYobj1uLmFzc2lnbmVkU2xvdC5wYXJlbnROb2RlKSksdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJuby1jb250ZW50LXBvaW50ZXItZXZlbnRzIiwhMSx0aGlzLiQuc2Nyb2xsZXIpLG4mJm4uX2NvbHVtbilyZXR1cm4gbn1fdXBkYXRlR2hvc3RQb3NpdGlvbih0LGUpe2NvbnN0IG49dGhpcy5fcmVvcmRlckdob3N0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGk9dC1uLndpZHRoLzIscj1lLW4uaGVpZ2h0LzIsbz1wYXJzZUludCh0aGlzLl9yZW9yZGVyR2hvc3QuX2xlZnR8fDApLGE9cGFyc2VJbnQodGhpcy5fcmVvcmRlckdob3N0Ll90b3B8fDApO3RoaXMuX3Jlb3JkZXJHaG9zdC5fbGVmdD1vLShuLmxlZnQtaSksdGhpcy5fcmVvcmRlckdob3N0Ll90b3A9YS0obi50b3AtciksdGhpcy5fcmVvcmRlckdob3N0LnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlKCR7dGhpcy5fcmVvcmRlckdob3N0Ll9sZWZ0fXB4LCAke3RoaXMuX3Jlb3JkZXJHaG9zdC5fdG9wfXB4KWB9X2dldElubmVyVGV4dCh0KXtyZXR1cm4gdC5sb2NhbE5hbWU/Im5vbmUiPT09Z2V0Q29tcHV0ZWRTdHlsZSh0KS5kaXNwbGF5PyIiOkFycmF5LmZyb20odC5jaGlsZE5vZGVzKS5tYXAoKHQ9PnRoaXMuX2dldElubmVyVGV4dCh0KSkpLmpvaW4oIiIpOnQudGV4dENvbnRlbnR9X3VwZGF0ZUdob3N0KHQpe2NvbnN0IGU9dGhpcy5fcmVvcmRlckdob3N0O2UudGV4dENvbnRlbnQ9dGhpcy5fZ2V0SW5uZXJUZXh0KHQuX2NvbnRlbnQpO2NvbnN0IG49d2luZG93LmdldENvbXB1dGVkU3R5bGUodCk7cmV0dXJuWyJib3hTaXppbmciLCJkaXNwbGF5Iiwid2lkdGgiLCJoZWlnaHQiLCJiYWNrZ3JvdW5kIiwiYWxpZ25JdGVtcyIsInBhZGRpbmciLCJib3JkZXIiLCJmbGV4LWRpcmVjdGlvbiIsIm92ZXJmbG93Il0uZm9yRWFjaCgodD0+ZS5zdHlsZVt0XT1uW3RdKSksZX1fdXBkYXRlT3JkZXJzKHQsZSl7dm9pZCAwIT09dCYmdm9pZCAwIT09ZSYmKHRbMF0uZm9yRWFjaCgoKHQsZSk9PnQuX29yZGVyPTApKSx0WzBdLmZvckVhY2goKCh0LGUpPT50Ll9vcmRlcj0oZSsxKSp0aGlzLl9vcmRlckJhc2VTY29wZSkpKX1fc2V0U2libGluZ3NSZW9yZGVyU3RhdHVzKHQsZSl7QXJyYXkuZnJvbSh0LnBhcmVudE5vZGUuY2hpbGRyZW4pLmZpbHRlcigoZT0+L2NvbHVtbi8udGVzdChlLmxvY2FsTmFtZSkmJnRoaXMuX2lzU3dhcEFsbG93ZWQoZSx0KSkpLmZvckVhY2goKHQ9PnQuX3Jlb3JkZXJTdGF0dXM9ZSkpfV9hdXRvU2Nyb2xsZXIoKXtpZih0aGlzLl9sYXN0RHJhZ0NsaWVudFgpe2NvbnN0IHQ9dGhpcy5fbGFzdERyYWdDbGllbnRYLXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQrNTAsZT10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQtdGhpcy5fbGFzdERyYWdDbGllbnRYKzUwO3Q+MD90aGlzLiQudGFibGUuc2Nyb2xsTGVmdCs9dC8xMDplPjAmJih0aGlzLiQudGFibGUuc2Nyb2xsTGVmdC09ZS8xMCksdGhpcy5fc2Nyb2xsSGFuZGxlcigpfXRoaXMuX2RyYWdnZWRDb2x1bW4mJnRoaXMuYXN5bmModGhpcy5fYXV0b1Njcm9sbGVyLDEwKX1faXNTd2FwQWxsb3dlZCh0LGUpe2lmKHQmJmUpe2NvbnN0IG49dC5wYXJlbnRFbGVtZW50PT09ZS5wYXJlbnRFbGVtZW50LGk9dC5mcm96ZW49PT1lLmZyb3plbjtyZXR1cm4gdCE9PWUmJm4mJml9fV9pc1N3YXBwYWJsZUJ5UG9zaXRpb24odCxlKXtjb25zdCBuPUFycmF5LmZyb20odGhpcy4kLmhlYWRlci5xdWVyeVNlbGVjdG9yQWxsKCd0cjpub3QoW2hpZGRlbl0pIFtwYXJ0fj0iY2VsbCJdJykpLmZpbHRlcigoZT0+dC5jb250YWlucyhlLl9jb2x1bW4pKSlbMF0saT10aGlzLiQuaGVhZGVyLnF1ZXJ5U2VsZWN0b3IoInRyOm5vdChbaGlkZGVuXSkgW3Jlb3JkZXItc3RhdHVzPWRyYWdnaW5nXSIpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHI9bi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gci5sZWZ0PmkubGVmdD9lPnIucmlnaHQtaS53aWR0aDplPHIubGVmdCtpLndpZHRofV9zd2FwQ29sdW1uT3JkZXJzKHQsZSl7Y29uc3Qgbj10Ll9vcmRlcjt0Ll9vcmRlcj1lLl9vcmRlcixlLl9vcmRlcj1uLHRoaXMuX3VwZGF0ZUxhc3RGcm96ZW4oKSx0aGlzLl91cGRhdGVGaXJzdEFuZExhc3RDb2x1bW4oKX1fZ2V0VGFyZ2V0Q29sdW1uKHQsZSl7aWYodCYmZSl7bGV0IG49dC5fY29sdW1uO2Zvcig7bi5wYXJlbnRFbGVtZW50IT09ZS5wYXJlbnRFbGVtZW50JiZuIT09dGhpczspbj1uLnBhcmVudEVsZW1lbnQ7cmV0dXJuIG4ucGFyZW50RWxlbWVudD09PWUucGFyZW50RWxlbWVudD9uOnQuX2NvbHVtbn19fQovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTggVmFhZGluIEx0ZC4KICAgIFRoaXMgcHJvZ3JhbSBpcyBhdmFpbGFibGUgdW5kZXIgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAsIGF2YWlsYWJsZSBhdCBodHRwczovL3ZhYWRpbi5jb20vbGljZW5zZS8KICAgICovLGpOdD10PT5jbGFzcyBleHRlbmRzIHR7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue3Jlc2l6YWJsZTp7dHlwZTpCb29sZWFuLHZhbHVlOmZ1bmN0aW9uKCl7aWYoInZhYWRpbi1ncmlkLWNvbHVtbi1ncm91cCI9PT10aGlzLmxvY2FsTmFtZSlyZXR1cm47Y29uc3QgdD10aGlzLnBhcmVudE5vZGU7cmV0dXJuIHQmJiJ2YWFkaW4tZ3JpZC1jb2x1bW4tZ3JvdXAiPT09dC5sb2NhbE5hbWUmJnQucmVzaXphYmxlfHwhMX19LF9oZWFkZXJUZW1wbGF0ZTp7dHlwZTpPYmplY3R9LF9mb290ZXJUZW1wbGF0ZTp7dHlwZTpPYmplY3R9LGZyb3plbjp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxoaWRkZW46e3R5cGU6Qm9vbGVhbn0saGVhZGVyOnt0eXBlOlN0cmluZ30sdGV4dEFsaWduOnt0eXBlOlN0cmluZ30sX2xhc3RGcm96ZW46e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX29yZGVyOk51bWJlcixfcmVvcmRlclN0YXR1czpCb29sZWFuLF9lbXB0eUNlbGxzOkFycmF5LF9oZWFkZXJDZWxsOk9iamVjdCxfZm9vdGVyQ2VsbDpPYmplY3QsX2dyaWQ6T2JqZWN0LGhlYWRlclJlbmRlcmVyOkZ1bmN0aW9uLGZvb3RlclJlbmRlcmVyOkZ1bmN0aW9ufX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX3dpZHRoQ2hhbmdlZCh3aWR0aCwgX2hlYWRlckNlbGwsIF9mb290ZXJDZWxsLCBfY2VsbHMuKikiLCJfZnJvemVuQ2hhbmdlZChmcm96ZW4sIF9oZWFkZXJDZWxsLCBfZm9vdGVyQ2VsbCwgX2NlbGxzLiopIiwiX2ZsZXhHcm93Q2hhbmdlZChmbGV4R3JvdywgX2hlYWRlckNlbGwsIF9mb290ZXJDZWxsLCBfY2VsbHMuKikiLCJfcGF0aE9ySGVhZGVyQ2hhbmdlZChwYXRoLCBoZWFkZXIsIF9oZWFkZXJDZWxsLCBfZm9vdGVyQ2VsbCwgX2NlbGxzLiosIHJlbmRlcmVyLCBoZWFkZXJSZW5kZXJlciwgX2JvZHlUZW1wbGF0ZSwgX2hlYWRlclRlbXBsYXRlKSIsIl90ZXh0QWxpZ25DaGFuZ2VkKHRleHRBbGlnbiwgX2NlbGxzLiosIF9oZWFkZXJDZWxsLCBfZm9vdGVyQ2VsbCkiLCJfb3JkZXJDaGFuZ2VkKF9vcmRlciwgX2hlYWRlckNlbGwsIF9mb290ZXJDZWxsLCBfY2VsbHMuKikiLCJfbGFzdEZyb3plbkNoYW5nZWQoX2xhc3RGcm96ZW4pIiwiX3NldEJvZHlUZW1wbGF0ZU9yUmVuZGVyZXIoX2JvZHlUZW1wbGF0ZSwgcmVuZGVyZXIsIF9jZWxscywgX2NlbGxzLiopIiwiX3NldEhlYWRlclRlbXBsYXRlT3JSZW5kZXJlcihfaGVhZGVyVGVtcGxhdGUsIGhlYWRlclJlbmRlcmVyLCBfaGVhZGVyQ2VsbCkiLCJfc2V0Rm9vdGVyVGVtcGxhdGVPclJlbmRlcmVyKF9mb290ZXJUZW1wbGF0ZSwgZm9vdGVyUmVuZGVyZXIsIF9mb290ZXJDZWxsKSIsIl9yZXNpemFibGVDaGFuZ2VkKHJlc2l6YWJsZSwgX2hlYWRlckNlbGwpIiwiX3Jlb3JkZXJTdGF0dXNDaGFuZ2VkKF9yZW9yZGVyU3RhdHVzLCBfaGVhZGVyQ2VsbCwgX2Zvb3RlckNlbGwsIF9jZWxscy4qKSIsIl9oaWRkZW5DaGFuZ2VkKGhpZGRlbiwgX2hlYWRlckNlbGwsIF9mb290ZXJDZWxsLCBfY2VsbHMuKikiXX1jb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5fYm9keVRlbXBsYXRlJiYodGhpcy5fYm9keVRlbXBsYXRlLnRlbXBsYXRpemVyLl9ncmlkPXRoaXMuX2dyaWQpLHRoaXMuX2hlYWRlclRlbXBsYXRlJiYodGhpcy5faGVhZGVyVGVtcGxhdGUudGVtcGxhdGl6ZXIuX2dyaWQ9dGhpcy5fZ3JpZCksdGhpcy5fZm9vdGVyVGVtcGxhdGUmJih0aGlzLl9mb290ZXJUZW1wbGF0ZS50ZW1wbGF0aXplci5fZ3JpZD10aGlzLl9ncmlkKSx0aGlzLl90ZW1wbGF0ZU9ic2VydmVyLmZsdXNoKCksdGhpcy5fYm9keVRlbXBsYXRlfHx0aGlzLl90ZW1wbGF0ZU9ic2VydmVyLmNhbGxiYWNrKCkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgoKT0+e3RoaXMuX2FsbENlbGxzLmZvckVhY2goKHQ9Pnt0Ll9jb250ZW50LnBhcmVudE5vZGV8fHRoaXMuX2dyaWQmJnRoaXMuX2dyaWQuYXBwZW5kQ2hpbGQodC5fY29udGVudCl9KSl9KSl9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKCk9Pnt0aGlzLl9maW5kSG9zdEdyaWQoKXx8dGhpcy5fYWxsQ2VsbHMuZm9yRWFjaCgodD0+e3QuX2NvbnRlbnQucGFyZW50Tm9kZSYmdC5fY29udGVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQuX2NvbnRlbnQpfSkpfSkpLHRoaXMuX2dyaWRWYWx1ZT12b2lkIDB9X2ZpbmRIb3N0R3JpZCgpe2xldCB0PXRoaXM7Zm9yKDt0JiYhL152YWFkaW4uKmdyaWQoLXBybyk/JC8udGVzdCh0LmxvY2FsTmFtZSk7KXQ9dC5hc3NpZ25lZFNsb3Q/dC5hc3NpZ25lZFNsb3QucGFyZW50Tm9kZTp0LnBhcmVudE5vZGU7cmV0dXJuIHR8fHZvaWQgMH1nZXQgX2dyaWQoKXtyZXR1cm4gdGhpcy5fZ3JpZFZhbHVlfHwodGhpcy5fZ3JpZFZhbHVlPXRoaXMuX2ZpbmRIb3N0R3JpZCgpKSx0aGlzLl9ncmlkVmFsdWV9Z2V0IF9hbGxDZWxscygpe3JldHVybltdLmNvbmNhdCh0aGlzLl9jZWxsc3x8W10pLmNvbmNhdCh0aGlzLl9lbXB0eUNlbGxzfHxbXSkuY29uY2F0KHRoaXMuX2hlYWRlckNlbGwpLmNvbmNhdCh0aGlzLl9mb290ZXJDZWxsKS5maWx0ZXIoKHQ9PnQpKX1jb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fdGVtcGxhdGVPYnNlcnZlcj1uZXcgUmkodGhpcywodD0+e3RoaXMuX2hlYWRlclRlbXBsYXRlPXRoaXMuX3ByZXBhcmVIZWFkZXJUZW1wbGF0ZSgpLHRoaXMuX2Zvb3RlclRlbXBsYXRlPXRoaXMuX3ByZXBhcmVGb290ZXJUZW1wbGF0ZSgpLHRoaXMuX2JvZHlUZW1wbGF0ZT10aGlzLl9wcmVwYXJlQm9keVRlbXBsYXRlKCl9KSl9X3ByZXBhcmVIZWFkZXJUZW1wbGF0ZSgpe3JldHVybiB0aGlzLl9wcmVwYXJlVGVtcGxhdGl6ZXIodGhpcy5fZmluZFRlbXBsYXRlKCEwKXx8bnVsbCx7fSl9X3ByZXBhcmVGb290ZXJUZW1wbGF0ZSgpe3JldHVybiB0aGlzLl9wcmVwYXJlVGVtcGxhdGl6ZXIodGhpcy5fZmluZFRlbXBsYXRlKCExLCEwKXx8bnVsbCx7fSl9X3ByZXBhcmVCb2R5VGVtcGxhdGUoKXtyZXR1cm4gdGhpcy5fcHJlcGFyZVRlbXBsYXRpemVyKHRoaXMuX2ZpbmRUZW1wbGF0ZSgpfHxudWxsKX1fcHJlcGFyZVRlbXBsYXRpemVyKHQsZSl7aWYodCYmIXQudGVtcGxhdGl6ZXIpe2NvbnN0IG49bmV3IGtOdDtuLl9ncmlkPXRoaXMuX2dyaWQsbi5kYXRhSG9zdD10aGlzLmRhdGFIb3N0LG4uX2luc3RhbmNlUHJvcHM9ZXx8bi5faW5zdGFuY2VQcm9wcyxuLnRlbXBsYXRlPXQsdC50ZW1wbGF0aXplcj1ufXJldHVybiB0fV9yZW5kZXJIZWFkZXJBbmRGb290ZXIoKXt0aGlzLmhlYWRlclJlbmRlcmVyJiZ0aGlzLl9oZWFkZXJDZWxsJiZ0aGlzLl9fcnVuUmVuZGVyZXIodGhpcy5oZWFkZXJSZW5kZXJlcix0aGlzLl9oZWFkZXJDZWxsKSx0aGlzLmZvb3RlclJlbmRlcmVyJiZ0aGlzLl9mb290ZXJDZWxsJiZ0aGlzLl9fcnVuUmVuZGVyZXIodGhpcy5mb290ZXJSZW5kZXJlcix0aGlzLl9mb290ZXJDZWxsKX1fX3J1blJlbmRlcmVyKHQsZSxuKXtjb25zdCBpPVtlLl9jb250ZW50LHRoaXNdO24mJm4uaXRlbSYmaS5wdXNoKG4pLHQuYXBwbHkodGhpcyxpKX1fX3NldENvbHVtblRlbXBsYXRlT3JSZW5kZXJlcih0LGUsbil7aWYoIXRoaXMuaGlkZGVuKXtpZih0JiZlKXRocm93IG5ldyBFcnJvcigiWW91IHNob3VsZCBvbmx5IHVzZSBlaXRoZXIgYSByZW5kZXJlciBvciBhIHRlbXBsYXRlIik7bi5mb3JFYWNoKChuPT57Y29uc3QgaT10aGlzLl9ncmlkLl9fZ2V0Um93TW9kZWwobi5wYXJlbnRFbGVtZW50KTtpZihlKW4uX3JlbmRlcmVyPWUsKGkuaXRlbXx8ZT09PXRoaXMuaGVhZGVyUmVuZGVyZXJ8fGU9PT10aGlzLmZvb3RlclJlbmRlcmVyKSYmdGhpcy5fX3J1blJlbmRlcmVyKGUsbixpKTtlbHNlIGlmKG4uX3RlbXBsYXRlIT09dCl7bi5fdGVtcGxhdGU9dCxuLl9jb250ZW50LmlubmVySFRNTD0iIix0LnRlbXBsYXRpemVyLl9ncmlkPXQudGVtcGxhdGl6ZXIuX2dyaWR8fHRoaXMuX2dyaWQ7Y29uc3QgZT10LnRlbXBsYXRpemVyLmNyZWF0ZUluc3RhbmNlKCk7bi5fY29udGVudC5hcHBlbmRDaGlsZChlLnJvb3QpLG4uX2luc3RhbmNlPWUsaS5pdGVtJiZuLl9pbnN0YW5jZS5zZXRQcm9wZXJ0aWVzKGkpfX0pKX19X3NldEJvZHlUZW1wbGF0ZU9yUmVuZGVyZXIodCxlLG4saSl7KHR8fGUpJiZuJiZ0aGlzLl9fc2V0Q29sdW1uVGVtcGxhdGVPclJlbmRlcmVyKHQsZSxuKX1fc2V0SGVhZGVyVGVtcGxhdGVPclJlbmRlcmVyKHQsZSxuKXsodHx8ZSkmJm4mJnRoaXMuX19zZXRDb2x1bW5UZW1wbGF0ZU9yUmVuZGVyZXIodCxlLFtuXSl9X3NldEZvb3RlclRlbXBsYXRlT3JSZW5kZXJlcih0LGUsbil7KHR8fGUpJiZuJiYodGhpcy5fX3NldENvbHVtblRlbXBsYXRlT3JSZW5kZXJlcih0LGUsW25dKSx0aGlzLl9ncmlkLl9fdXBkYXRlSGVhZGVyRm9vdGVyUm93VmlzaWJpbGl0eShuLnBhcmVudEVsZW1lbnQpKX1fc2VsZWN0Rmlyc3RUZW1wbGF0ZSh0PSExLGU9ITEpe3JldHVybiBSaS5nZXRGbGF0dGVuZWROb2Rlcyh0aGlzKS5maWx0ZXIoKG49PiJ0ZW1wbGF0ZSI9PT1uLmxvY2FsTmFtZSYmbi5jbGFzc0xpc3QuY29udGFpbnMoImhlYWRlciIpPT09dCYmbi5jbGFzc0xpc3QuY29udGFpbnMoImZvb3RlciIpPT09ZSkpWzBdfV9maW5kVGVtcGxhdGUodCxlKXtjb25zdCBuPXRoaXMuX3NlbGVjdEZpcnN0VGVtcGxhdGUodCxlKTtyZXR1cm4gbiYmdGhpcy5kYXRhSG9zdCYmKG4uX3Jvb3REYXRhSG9zdD10aGlzLmRhdGFIb3N0Ll9yb290RGF0YUhvc3R8fHRoaXMuZGF0YUhvc3QpLG59X2ZsZXhHcm93Q2hhbmdlZCh0LGUsbixpKXt0aGlzLnBhcmVudEVsZW1lbnQmJnRoaXMucGFyZW50RWxlbWVudC5fY29sdW1uUHJvcENoYW5nZWQmJnRoaXMucGFyZW50RWxlbWVudC5fY29sdW1uUHJvcENoYW5nZWQoImZsZXhHcm93IiksdGhpcy5fYWxsQ2VsbHMuZm9yRWFjaCgoZT0+ZS5zdHlsZS5mbGV4R3Jvdz10KSl9X29yZGVyQ2hhbmdlZCh0LGUsbixpKXt0aGlzLl9hbGxDZWxscy5mb3JFYWNoKChlPT5lLnN0eWxlLm9yZGVyPXQpKX1fd2lkdGhDaGFuZ2VkKHQsZSxuLGkpe3RoaXMucGFyZW50RWxlbWVudCYmdGhpcy5wYXJlbnRFbGVtZW50Ll9jb2x1bW5Qcm9wQ2hhbmdlZCYmdGhpcy5wYXJlbnRFbGVtZW50Ll9jb2x1bW5Qcm9wQ2hhbmdlZCgid2lkdGgiKSx0aGlzLl9hbGxDZWxscy5mb3JFYWNoKChlPT5lLnN0eWxlLndpZHRoPXQpKSx0aGlzLl9ncmlkJiZ0aGlzLl9ncmlkLl9fZm9yY2VSZWZsb3cmJnRoaXMuX2dyaWQuX19mb3JjZVJlZmxvdygpfV9mcm96ZW5DaGFuZ2VkKHQsZSxuLGkpe3RoaXMucGFyZW50RWxlbWVudCYmdGhpcy5wYXJlbnRFbGVtZW50Ll9jb2x1bW5Qcm9wQ2hhbmdlZCYmdGhpcy5wYXJlbnRFbGVtZW50Ll9jb2x1bW5Qcm9wQ2hhbmdlZCgiZnJvemVuIix0KSx0aGlzLl9hbGxDZWxscy5mb3JFYWNoKChlPT50aGlzLl90b2dnbGVBdHRyaWJ1dGUoImZyb3plbiIsdCxlKSkpLHRoaXMuX2dyaWQmJnRoaXMuX2dyaWQuX2Zyb3plbkNlbGxzQ2hhbmdlZCYmdGhpcy5fZ3JpZC5fZnJvemVuQ2VsbHNDaGFuZ2VkKCl9X2xhc3RGcm96ZW5DaGFuZ2VkKHQpe3RoaXMuX2FsbENlbGxzLmZvckVhY2goKGU9PnRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibGFzdC1mcm96ZW4iLHQsZSkpKSx0aGlzLnBhcmVudEVsZW1lbnQmJnRoaXMucGFyZW50RWxlbWVudC5fY29sdW1uUHJvcENoYW5nZWQmJih0aGlzLnBhcmVudEVsZW1lbnQuX2xhc3RGcm96ZW49dCl9X3BhdGhPckhlYWRlckNoYW5nZWQodCxlLG4saSxyLG8sYSxzLGwpe2NvbnN0IGM9dm9pZCAwIT09ZTshYSYmIWwmJmMmJm4mJnRoaXMuX19zZXRUZXh0Q29udGVudChuLl9jb250ZW50LGUpLHQmJnIudmFsdWUmJihvfHxzfHx0aGlzLl9fc2V0Q29sdW1uVGVtcGxhdGVPclJlbmRlcmVyKHZvaWQgMCwoKGUsbix7aXRlbTppfSk9PnRoaXMuX19zZXRUZXh0Q29udGVudChlLHRoaXMuZ2V0KHQsaSkpKSxyLnZhbHVlKSxhfHxsfHxjfHwhbnx8bnVsbD09PWV8fHRoaXMuX19zZXRUZXh0Q29udGVudChuLl9jb250ZW50LHRoaXMuX2dlbmVyYXRlSGVhZGVyKHQpKSksbiYmdGhpcy5fZ3JpZC5fX3VwZGF0ZUhlYWRlckZvb3RlclJvd1Zpc2liaWxpdHkobi5wYXJlbnRFbGVtZW50KX1fX3NldFRleHRDb250ZW50KHQsZSl7dC50ZXh0Q29udGVudCE9PWUmJih0LnRleHRDb250ZW50PWUpfV9nZW5lcmF0ZUhlYWRlcih0KXtyZXR1cm4gdC5zdWJzdHIodC5sYXN0SW5kZXhPZigiLiIpKzEpLnJlcGxhY2UoLyhbQS1aXSkvZywiLSQxIikudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8tL2csIiAiKS5yZXBsYWNlKC9eLi8sKHQ9PnQudG9VcHBlckNhc2UoKSkpfV90b2dnbGVBdHRyaWJ1dGUodCxlLG4pe24uaGFzQXR0cmlidXRlKHQpPT09IWUmJihlP24uc2V0QXR0cmlidXRlKHQsIiIpOm4ucmVtb3ZlQXR0cmlidXRlKHQpKX1fcmVvcmRlclN0YXR1c0NoYW5nZWQodCxlLG4saSl7dGhpcy5fYWxsQ2VsbHMuZm9yRWFjaCgoZT0+ZS5zZXRBdHRyaWJ1dGUoInJlb3JkZXItc3RhdHVzIix0KSkpfV9yZXNpemFibGVDaGFuZ2VkKHQsZSl7dm9pZCAwIT09dCYmdm9pZCAwIT09ZSYmZSYmW2VdLmNvbmNhdCh0aGlzLl9lbXB0eUNlbGxzKS5mb3JFYWNoKChlPT57aWYoZSl7Y29uc3Qgbj1lLnF1ZXJ5U2VsZWN0b3IoJ1twYXJ0fj0icmVzaXplLWhhbmRsZSJdJyk7aWYobiYmZS5yZW1vdmVDaGlsZChuKSx0KXtjb25zdCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3Quc2V0QXR0cmlidXRlKCJwYXJ0IiwicmVzaXplLWhhbmRsZSIpLGUuYXBwZW5kQ2hpbGQodCl9fX0pKX1fdGV4dEFsaWduQ2hhbmdlZCh0LGUsbixpKXtpZih2b2lkIDA9PT10KXJldHVybjtpZigtMT09PVsic3RhcnQiLCJlbmQiLCJjZW50ZXIiXS5pbmRleE9mKHQpKXJldHVybiB2b2lkIGNvbnNvbGUud2FybigndGV4dEFsaWduIGNhbiBvbmx5IGJlIHNldCBhcyAic3RhcnQiLCAiZW5kIiBvciAiY2VudGVyIicpO2xldCByOyJsdHIiPT09Z2V0Q29tcHV0ZWRTdHlsZSh0aGlzLl9ncmlkKS5kaXJlY3Rpb24/InN0YXJ0Ij09PXQ/cj0ibGVmdCI6ImVuZCI9PT10JiYocj0icmlnaHQiKToic3RhcnQiPT09dD9yPSJyaWdodCI6ImVuZCI9PT10JiYocj0ibGVmdCIpLHRoaXMuX2FsbENlbGxzLmZvckVhY2goKGU9PntlLl9jb250ZW50LnN0eWxlLnRleHRBbGlnbj10LGdldENvbXB1dGVkU3R5bGUoZS5fY29udGVudCkudGV4dEFsaWduIT09dCYmKGUuX2NvbnRlbnQuc3R5bGUudGV4dEFsaWduPXIpfSkpfV9oaWRkZW5DaGFuZ2VkKHQsZSxuLGkpe3RoaXMucGFyZW50RWxlbWVudCYmdGhpcy5wYXJlbnRFbGVtZW50Ll9jb2x1bW5Qcm9wQ2hhbmdlZCYmdGhpcy5wYXJlbnRFbGVtZW50Ll9jb2x1bW5Qcm9wQ2hhbmdlZCgiaGlkZGVuIix0KSwhIXQhPSEhdGhpcy5fcHJldmlvdXNIaWRkZW4mJnRoaXMuX2dyaWQmJighMD09PXQmJnRoaXMuX2FsbENlbGxzLmZvckVhY2goKHQ9Pnt0Ll9jb250ZW50LnBhcmVudE5vZGUmJnQuX2NvbnRlbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0Ll9jb250ZW50KX0pKSx0aGlzLl9ncmlkLl9kZWJvdW5jZXJIaWRkZW5DaGFuZ2VkPUVuLmRlYm91bmNlKHRoaXMuX2dyaWQuX2RlYm91bmNlckhpZGRlbkNoYW5nZWQsX3QsKCgpPT57dGhpcy5fZ3JpZCYmdGhpcy5fZ3JpZC5fcmVuZGVyQ29sdW1uVHJlZSYmdGhpcy5fZ3JpZC5fcmVuZGVyQ29sdW1uVHJlZSh0aGlzLl9ncmlkLl9jb2x1bW5UcmVlKX0pKSx0aGlzLl9ncmlkLl91cGRhdGVMYXN0RnJvemVuJiZ0aGlzLl9ncmlkLl91cGRhdGVMYXN0RnJvemVuKCksdGhpcy5fZ3JpZC5ub3RpZnlSZXNpemUmJnRoaXMuX2dyaWQubm90aWZ5UmVzaXplKCksdGhpcy5fZ3JpZC5fcmVzZXRLZXlib2FyZE5hdmlnYXRpb24mJnRoaXMuX2dyaWQuX3Jlc2V0S2V5Ym9hcmROYXZpZ2F0aW9uKCkpLHRoaXMuX3ByZXZpb3VzSGlkZGVuPXR9fTtjbGFzcyBHTnQgZXh0ZW5kcyhqTnQodE50KHllKSkpe3N0YXRpYyBnZXQgaXMoKXtyZXR1cm4idmFhZGluLWdyaWQtY29sdW1uIn1zdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57d2lkdGg6e3R5cGU6U3RyaW5nLHZhbHVlOiIxMDBweCJ9LGZsZXhHcm93Ont0eXBlOk51bWJlcix2YWx1ZToxfSxyZW5kZXJlcjpGdW5jdGlvbixwYXRoOnt0eXBlOlN0cmluZ30sYXV0b1dpZHRoOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9ib2R5VGVtcGxhdGU6e3R5cGU6T2JqZWN0fSxfY2VsbHM6QXJyYXl9fX1jdXN0b21FbGVtZW50cy5kZWZpbmUoR050LmlzLEdOdCk7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBWYWFkaW4gTHRkLgogICAgVGhpcyBwcm9ncmFtIGlzIGF2YWlsYWJsZSB1bmRlciBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCwgYXZhaWxhYmxlIGF0IGh0dHBzOi8vdmFhZGluLmNvbS9saWNlbnNlLwogICAgKi8KY29uc3QgV050PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRvbS1tb2R1bGUiKTtXTnQuYXBwZW5kQ2hpbGQoX2VgCiAgPHN0eWxlPgogICAgQGtleWZyYW1lcyB2YWFkaW4tZ3JpZC1hcHBlYXIgewogICAgICB0byB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQogICAgfQoKICAgIDpob3N0IHsKICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIGFuaW1hdGlvbjogMW1zIHZhYWRpbi1ncmlkLWFwcGVhcjsKICAgICAgaGVpZ2h0OiA0MDBweDsKICAgICAgZmxleDogMSAxIGF1dG87CiAgICAgIGFsaWduLXNlbGY6IHN0cmV0Y2g7CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIH0KCiAgICA6aG9zdChbaGlkZGVuXSkgewogICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICB9CgogICAgI3Njcm9sbGVyIHsKICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsKICAgICAgd2lkdGg6IGF1dG87CiAgICAgIGhlaWdodDogYXV0bzsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB0b3A6IDA7CiAgICAgIHJpZ2h0OiAwOwogICAgICBib3R0b206IDA7CiAgICAgIGxlZnQ6IDA7CiAgICB9CgogICAgOmhvc3QoW2hlaWdodC1ieS1yb3dzXSkgewogICAgICBoZWlnaHQ6IGF1dG87CiAgICAgIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7CiAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgd2lkdGg6IDEwMCU7CiAgICB9CgogICAgOmhvc3QoW2hlaWdodC1ieS1yb3dzXSkgI3Njcm9sbGVyIHsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIGhlaWdodDogMTAwJTsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgfQoKICAgICN0YWJsZSB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIC8qIFdvcmthcm91bmQgZm9yIGEgRGVza3RvcCBTYWZhcmkgYnVnOiBuZXcgc3RhY2tpbmcgY29udGV4dCBoZXJlIHByZXZlbnRzIHRoZSBzY3JvbGxiYXIgZnJvbSBnZXR0aW5nIGhpZGRlbiAqLwogICAgICB6LWluZGV4OiAwOwogICAgfQoKICAgICNoZWFkZXIsCiAgICAjZm9vdGVyIHsKICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIHBvc2l0aW9uOiAtd2Via2l0LXN0aWNreTsKICAgICAgcG9zaXRpb246IHN0aWNreTsKICAgICAgbGVmdDogMDsKICAgICAgb3ZlcmZsb3c6IHZpc2libGU7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICB6LWluZGV4OiAxOwogICAgfQoKICAgICNoZWFkZXIgewogICAgICB0b3A6IDA7CiAgICB9CgogICAgdGggewogICAgICB0ZXh0LWFsaWduOiBpbmhlcml0OwogICAgfQoKICAgIC8qIFNhZmFyaSBkb2Vzbid0IHdvcmsgd2l0aCAiaW5oZXJpdCIgKi8KICAgIFtzYWZhcmldIHRoIHsKICAgICAgdGV4dC1hbGlnbjogaW5pdGlhbDsKICAgIH0KCiAgICAjZm9vdGVyIHsKICAgICAgYm90dG9tOiAwOwogICAgfQoKICAgICNpdGVtcyB7CiAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICBwb3NpdGlvbjogLXdlYmtpdC1zdGlja3k7CiAgICAgIHBvc2l0aW9uOiBzdGlja3k7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBsZWZ0OiAwOwogICAgICBvdmVyZmxvdzogdmlzaWJsZTsKICAgIH0KCiAgICBbcGFydH49InJvdyJdIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIG1hcmdpbjogMDsKICAgIH0KCiAgICBbcGFydH49InJvdyJdW2xvYWRpbmddIFtwYXJ0fj0iYm9keS1jZWxsIl0gOjpzbG90dGVkKHZhYWRpbi1ncmlkLWNlbGwtY29udGVudCkgewogICAgICBvcGFjaXR5OiAwOwogICAgfQoKICAgICNpdGVtcyBbcGFydH49InJvdyJdIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgfQoKICAgICNpdGVtcyBbcGFydH49InJvdyJdOmVtcHR5IHsKICAgICAgaGVpZ2h0OiAxZW07CiAgICB9CgogICAgW3BhcnR+PSJjZWxsIl06bm90KFtwYXJ0fj0iZGV0YWlscy1jZWxsIl0pIHsKICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgcGFkZGluZzogMDsKICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIH0KCiAgICBbcGFydH49ImRldGFpbHMtY2VsbCJdIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICBib3R0b206IDA7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICBwYWRkaW5nOiAwOwogICAgfQoKICAgIFtwYXJ0fj0iY2VsbCJdIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpIHsKICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIH0KCiAgICBbaGlkZGVuXSB7CiAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgIH0KCiAgICBbZnJvemVuXSB7CiAgICAgIHotaW5kZXg6IDI7CiAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICB9CgogICAgW25vLXNjcm9sbGJhcnNdW3NhZmFyaV0gI3RhYmxlLAogICAgW25vLXNjcm9sbGJhcnNdW2ZpcmVmb3hdICN0YWJsZSB7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB9CgogICAgLyogUmVvcmRlcmluZyBzdHlsZXMgKi8KICAgIDpob3N0KFtyZW9yZGVyaW5nXSkgW3BhcnR+PSJjZWxsIl0gOjpzbG90dGVkKHZhYWRpbi1ncmlkLWNlbGwtY29udGVudCksCiAgICA6aG9zdChbcmVvcmRlcmluZ10pIFtwYXJ0fj0icmVzaXplLWhhbmRsZSJdLAogICAgI3Njcm9sbGVyW25vLWNvbnRlbnQtcG9pbnRlci1ldmVudHNdIFtwYXJ0fj0iY2VsbCJdIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpIHsKICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICB9CgogICAgW3BhcnR+PSJyZW9yZGVyLWdob3N0Il0gewogICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIG9wYWNpdHk6IDAuNTsKCiAgICAgIC8qIFByZXZlbnQgb3ZlcmZsb3dpbmcgdGhlIGdyaWQgaW4gRmlyZWZveCAqLwogICAgICB0b3A6IDA7CiAgICAgIGxlZnQ6IDA7CiAgICB9CgogICAgOmhvc3QoW3Jlb3JkZXJpbmddKSB7CiAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgfQoKICAgICNzY3JvbGxlcltpZV1bY29sdW1uLXJlb3JkZXJpbmctYWxsb3dlZF0gW3BhcnR+PSJoZWFkZXItY2VsbCJdIHsKICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lOwogICAgfQoKICAgIC8qIFJlc2l6aW5nIHN0eWxlcyAqLwogICAgW3BhcnR+PSJyZXNpemUtaGFuZGxlIl0gewogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIHRvcDogMDsKICAgICAgcmlnaHQ6IDA7CiAgICAgIGhlaWdodDogMTAwJTsKICAgICAgY3Vyc29yOiBjb2wtcmVzaXplOwogICAgICB6LWluZGV4OiAxOwogICAgfQoKICAgIFtwYXJ0fj0icmVzaXplLWhhbmRsZSJdOjpiZWZvcmUgewogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIGNvbnRlbnQ6ICIiOwogICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIHdpZHRoOiAzNXB4OwogICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7CiAgICB9CgogICAgW2xhc3QtY29sdW1uXSBbcGFydH49InJlc2l6ZS1oYW5kbGUiXTo6YmVmb3JlLAogICAgW2xhc3QtZnJvemVuXSBbcGFydH49InJlc2l6ZS1oYW5kbGUiXTo6YmVmb3JlIHsKICAgICAgd2lkdGg6IDE4cHg7CiAgICAgIHRyYW5zZm9ybTogbm9uZTsKICAgICAgcmlnaHQ6IDA7CiAgICB9CgogICAgI3Njcm9sbGVyW2NvbHVtbi1yZXNpemluZ10gewogICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgfQoKICAgIC8qIFNpemVyIHN0eWxlcyAqLwogICAgI3NpemVyIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICB9CgogICAgI3NpemVyIFtwYXJ0fj0iZGV0YWlscy1jZWxsIl0gewogICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICB9CgogICAgI3NpemVyIFtwYXJ0fj0iY2VsbCJdW2hpZGRlbl0gewogICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICB9CgogICAgI3NpemVyIFtwYXJ0fj0iY2VsbCJdIHsKICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICBsaW5lLWhlaWdodDogMDsKICAgICAgaGVpZ2h0OiAwICFpbXBvcnRhbnQ7CiAgICAgIG1pbi1oZWlnaHQ6IDAgIWltcG9ydGFudDsKICAgICAgbWF4LWhlaWdodDogMCAhaW1wb3J0YW50OwogICAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7CiAgICAgIGJvcmRlcjogbm9uZSAhaW1wb3J0YW50OwogICAgfQoKICAgICNzaXplciBbcGFydH49ImNlbGwiXTo6YmVmb3JlIHsKICAgICAgY29udGVudDogIi0iOwogICAgfQoKICAgICNzaXplciBbcGFydH49ImNlbGwiXSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgIH0KCiAgICAvKiBSVEwgc3BlY2lmaWMgc3R5bGVzICovCgogICAgOmhvc3QoW2Rpcj0icnRsIl0pICNpdGVtcywKICAgIDpob3N0KFtkaXI9InJ0bCJdKSAjaGVhZGVyLAogICAgOmhvc3QoW2Rpcj0icnRsIl0pICNmb290ZXIgewogICAgICBsZWZ0OiBhdXRvOwogICAgfQoKICAgIDpob3N0KFtkaXI9InJ0bCJdKSBbcGFydH49InJlb3JkZXItZ2hvc3QiXSB7CiAgICAgIGxlZnQ6IGF1dG87CiAgICAgIHJpZ2h0OiAwOwogICAgfQoKICAgIDpob3N0KFtkaXI9InJ0bCJdKSBbcGFydH49InJlc2l6ZS1oYW5kbGUiXSB7CiAgICAgIGxlZnQ6IDA7CiAgICAgIHJpZ2h0OiBhdXRvOwogICAgfQoKICAgIDpob3N0KFtkaXI9InJ0bCJdKSBbcGFydH49InJlc2l6ZS1oYW5kbGUiXTo6YmVmb3JlIHsKICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDUwJSk7CiAgICB9CgogICAgOmhvc3QoW2Rpcj0icnRsIl0pIFtsYXN0LWNvbHVtbl0gW3BhcnR+PSJyZXNpemUtaGFuZGxlIl06OmJlZm9yZSwKICAgIDpob3N0KFtkaXI9InJ0bCJdKSBbbGFzdC1mcm96ZW5dIFtwYXJ0fj0icmVzaXplLWhhbmRsZSJdOjpiZWZvcmUgewogICAgICBsZWZ0OiAwOwogICAgICByaWdodDogYXV0bzsKICAgIH0KICA8L3N0eWxlPgpgKSxXTnQucmVnaXN0ZXIoInZhYWRpbi1ncmlkLXN0eWxlcyIpOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTcgVmFhZGluIEx0ZC4KICAgIFRoaXMgcHJvZ3JhbSBpcyBhdmFpbGFibGUgdW5kZXIgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAsIGF2YWlsYWJsZSBhdCBodHRwczovL3ZhYWRpbi5jb20vbGljZW5zZS8KICAgICovCmNvbnN0IHFOdD0oKCk9Pnt0cnl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUV2ZW50KCJUb3VjaEV2ZW50IiksITB9Y2F0Y2godCl7cmV0dXJuITF9fSkoKTtjbGFzcyBZTnQgZXh0ZW5kcyhjTnQocVB0KEVOdCh3TnQoVE50KGJOdChQTnQoTk50KElOdChMTnQoVk50KHZOdChBTnQoVU50KFNOdChDTnQoRk50KE9OdCh5TnQpKSkpKSkpKSkpKSkpKSkpKSkpe3N0YXRpYyBnZXQgdGVtcGxhdGUoKXtyZXR1cm4gX2VgCiAgICA8c3R5bGUgaW5jbHVkZT0idmFhZGluLWdyaWQtc3R5bGVzIj48L3N0eWxlPgoKICAgIDxkaXYgaWQ9InNjcm9sbGVyIiBzYWZhcmlcJD0iW1tfc2FmYXJpXV0iIGlvc1wkPSJbW19pb3NdXSIgaWVcJD0iW1tfaWVdXSIgbG9hZGluZ1wkPSJbW2xvYWRpbmddXSIgY29sdW1uLXJlb3JkZXJpbmctYWxsb3dlZFwkPSJbW2NvbHVtblJlb3JkZXJpbmdBbGxvd2VkXV0iPgoKICAgICAgPHRhYmxlIGlkPSJ0YWJsZSIgcm9sZT0iZ3JpZCIgYXJpYS1tdWx0aXNlbGVjdGFibGU9InRydWUiIHRhYmluZGV4PSIwIj4KICAgICAgICA8Y2FwdGlvbiBpZD0ic2l6ZXIiIHBhcnQ9InJvdyI+PC9jYXB0aW9uPgogICAgICAgIDx0aGVhZCBpZD0iaGVhZGVyIiByb2xlPSJyb3dncm91cCI+PC90aGVhZD4KICAgICAgICA8dGJvZHkgaWQ9Iml0ZW1zIiByb2xlPSJyb3dncm91cCI+PC90Ym9keT4KICAgICAgICA8dGZvb3QgaWQ9ImZvb3RlciIgcm9sZT0icm93Z3JvdXAiPjwvdGZvb3Q+CiAgICAgIDwvdGFibGU+CgogICAgICA8ZGl2IHBhcnQ9InJlb3JkZXItZ2hvc3QiPjwvZGl2PgogICAgPC9kaXY+CgogICAgPCEtLSBUaGUgdGVtcGxhdGUgbmVlZHMgYXQgbGVhc3Qgb25lIHNsb3Qgb3IgZWxzZSBzaGFkeSBkb2Vzbid0IGRpc3RyaWJ1dGUgLS0+CiAgICA8c2xvdCBuYW1lPSJub2Rpc3RyaWJ1dGUiPjwvc2xvdD4KCiAgICA8ZGl2IGlkPSJmb2N1c2V4aXQiIHRhYmluZGV4PSIwIj48L2Rpdj4KYH1zdGF0aWMgZ2V0IGlzKCl7cmV0dXJuInZhYWRpbi1ncmlkIn1zdGF0aWMgZ2V0IHZlcnNpb24oKXtyZXR1cm4iNS43LjEzIn1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX2NvbHVtblRyZWVDaGFuZ2VkKF9jb2x1bW5UcmVlLCBfY29sdW1uVHJlZS4qKSJdfXN0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntfc2FmYXJpOnt0eXBlOkJvb2xlYW4sdmFsdWU6L14oKD8hY2hyb21lfGFuZHJvaWQpLikqc2FmYXJpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KX0sX2lvczp7dHlwZTpCb29sZWFuLHZhbHVlOi9pUGFkfGlQaG9uZXxpUG9kLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYhd2luZG93Lk1TU3RyZWFtfHwiTWFjSW50ZWwiPT09bmF2aWdhdG9yLnBsYXRmb3JtJiZuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHM+MX0sX2VkZ2U6e3R5cGU6Qm9vbGVhbix2YWx1ZToidW5kZWZpbmVkIiE9dHlwZW9mIENTUyYmQ1NTLnN1cHBvcnRzKCIoLW1zLWltZS1hbGlnbjphdXRvKSIpfSxfaWU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohKCFuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9UcmlkZW50Lyl8fG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL01TSUUvKSl9LF9maXJlZm94Ont0eXBlOkJvb2xlYW4sdmFsdWU6bmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoImZpcmVmb3giKT4tMX0sX2FuZHJvaWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTovYW5kcm9pZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCl9LF90b3VjaERldmljZTp7dHlwZTpCb29sZWFuLHZhbHVlOnFOdH0saGVpZ2h0QnlSb3dzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVmbGVjdFRvQXR0cmlidXRlOiEwLG9ic2VydmVyOiJfaGVpZ2h0QnlSb3dzQ2hhbmdlZCJ9LF9yZWNhbGN1bGF0ZUNvbHVtbldpZHRoT25jZUxvYWRpbmdGaW5pc2hlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiEwfX19Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiYW5pbWF0aW9uZW5kIix0aGlzLl9vbkFuaW1hdGlvbkVuZCl9Y29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMucmVjYWxjdWxhdGVDb2x1bW5XaWR0aHMoKX1hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sodCxlLG4pe3N1cGVyLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayh0LGUsbiksImRpciI9PT10JiYodGhpcy5fX2lzUlRMPSJydGwiPT09bix0aGlzLl91cGRhdGVTY3JvbGxlck1lYXN1cmVtZW50cygpKX1fX2hhc1Jvd3NXaXRoQ2xpZW50SGVpZ2h0KCl7cmV0dXJuISFBcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZmlsdGVyKCh0PT50LmNsaWVudEhlaWdodCkpLmxlbmd0aH1fX2l0ZW1zUmVjZWl2ZWQoKXt0aGlzLl9yZWNhbGN1bGF0ZUNvbHVtbldpZHRoT25jZUxvYWRpbmdGaW5pc2hlZCYmIXRoaXMuX2NhY2hlLmlzTG9hZGluZygpJiZ0aGlzLl9faGFzUm93c1dpdGhDbGllbnRIZWlnaHQoKSYmKHRoaXMuX3JlY2FsY3VsYXRlQ29sdW1uV2lkdGhPbmNlTG9hZGluZ0ZpbmlzaGVkPSExLHRoaXMucmVjYWxjdWxhdGVDb2x1bW5XaWR0aHMoKSl9X3JlY2FsY3VsYXRlQ29sdW1uV2lkdGhzKHQpe3QuZm9yRWFjaCgodD0+e3Qud2lkdGg9ImF1dG8iLHQuX29yaWdGbGV4R3Jvdz10LmZsZXhHcm93LHQuZmxleEdyb3c9MH0pKSx0LmZvckVhY2goKHQ9Pnt0Ll9jdXJyZW50V2lkdGg9MCx0Ll9hbGxDZWxscy5mb3JFYWNoKChlPT57dC5fY3VycmVudFdpZHRoPU1hdGgubWF4KHQuX2N1cnJlbnRXaWR0aCxlLm9mZnNldFdpZHRoKzEpfSkpfSkpLHQuZm9yRWFjaCgodD0+e3Qud2lkdGg9YCR7dC5fY3VycmVudFdpZHRofXB4YCx0LmZsZXhHcm93PXQuX29yaWdGbGV4R3Jvdyx0Ll9jdXJyZW50V2lkdGg9dm9pZCAwLHQuX29yaWdGbGV4R3Jvdz12b2lkIDB9KSl9cmVjYWxjdWxhdGVDb2x1bW5XaWR0aHMoKXtpZih0aGlzLl9jb2x1bW5UcmVlKWlmKHRoaXMuX2NhY2hlLmlzTG9hZGluZygpKXRoaXMuX3JlY2FsY3VsYXRlQ29sdW1uV2lkdGhPbmNlTG9hZGluZ0ZpbmlzaGVkPSEwO2Vsc2V7Y29uc3QgdD10aGlzLl9nZXRDb2x1bW5zKCkuZmlsdGVyKCh0PT4hdC5oaWRkZW4mJnQuYXV0b1dpZHRoKSk7dGhpcy5fcmVjYWxjdWxhdGVDb2x1bW5XaWR0aHModCl9fV9jcmVhdGVTY3JvbGxlclJvd3ModCl7Y29uc3QgZT1bXTtmb3IodmFyIG49MDtuPHQ7bisrKXtjb25zdCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIik7dC5zZXRBdHRyaWJ1dGUoInBhcnQiLCJyb3ciKSx0LnNldEF0dHJpYnV0ZSgicm9sZSIsInJvdyIpLHRoaXMuX2NvbHVtblRyZWUmJnRoaXMuX3VwZGF0ZVJvdyh0LHRoaXMuX2NvbHVtblRyZWVbdGhpcy5fY29sdW1uVHJlZS5sZW5ndGgtMV0sImJvZHkiLCExLCEwKSxlLnB1c2godCl9cmV0dXJuIHRoaXMuX2NvbHVtblRyZWUmJnRoaXMuX2NvbHVtblRyZWVbdGhpcy5fY29sdW1uVHJlZS5sZW5ndGgtMV0uZm9yRWFjaCgodD0+dC5pc0Nvbm5lY3RlZCYmdC5ub3RpZnlQYXRoJiZ0Lm5vdGlmeVBhdGgoIl9jZWxscy4qIix0Ll9jZWxscykpKSwoZnVuY3Rpb24gaSh0LGUsbil7TWl8fENpKCksRWkucHVzaChbdCxlLG5dKX0pKHRoaXMsKCgpPT57dGhpcy5fdXBkYXRlRmlyc3RBbmRMYXN0Q29sdW1uKCksdGhpcy5fcmVzZXRLZXlib2FyZE5hdmlnYXRpb24oKX0pKSxlfV9nZXRSb3dUYXJnZXQoKXtyZXR1cm4gdGhpcy4kLml0ZW1zfV9jcmVhdGVDZWxsKHQpe2NvbnN0IGU9InZhYWRpbi1ncmlkLWNlbGwtY29udGVudC0iKyh0aGlzLl9jb250ZW50SW5kZXg9dGhpcy5fY29udGVudEluZGV4KzF8fDApLG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidmFhZGluLWdyaWQtY2VsbC1jb250ZW50Iik7bi5zZXRBdHRyaWJ1dGUoInNsb3QiLGUpO2NvbnN0IGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0KTtpLmlkPWUucmVwbGFjZSgiLWNvbnRlbnQtIiwiLSIpLGkuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIi0xIiksaS5zZXRBdHRyaWJ1dGUoInJvbGUiLCJ0ZCI9PT10PyJncmlkY2VsbCI6ImNvbHVtbmhlYWRlciIpO2NvbnN0IHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2xvdCIpO3JldHVybiByLnNldEF0dHJpYnV0ZSgibmFtZSIsZSksaS5hcHBlbmRDaGlsZChyKSxpLl9jb250ZW50PW4sbi5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCgoKT0+e2lmKHdpbmRvdy5jaHJvbWUpe2NvbnN0IHQ9KCk9PntuLmNvbnRhaW5zKHRoaXMuZ2V0Um9vdE5vZGUoKS5hY3RpdmVFbGVtZW50KXx8aS5mb2N1cygpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHQsITApfTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIix0LCEwKX1lbHNlIHNldFRpbWVvdXQoKCgpPT57bi5jb250YWlucyh0aGlzLmdldFJvb3ROb2RlKCkuYWN0aXZlRWxlbWVudCl8fGkuZm9jdXMoKX0pKX0pKSxpfV91cGRhdGVSb3codCxlLG4saSxyKXtuPW58fCJib2R5Ijtjb25zdCBvPWRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtBcnJheS5mcm9tKHQuY2hpbGRyZW4pLmZvckVhY2goKHQ9PnQuX3ZhY2FudD0hMCkpLHQuaW5uZXJIVE1MPSIiLCJzaXplciIhPT10LmlkJiYodC5oaWRkZW49ITApLGUuZmlsdGVyKCh0PT4hdC5oaWRkZW4pKS5mb3JFYWNoKCgoZSxhLHMpPT57bGV0IGw7aWYoImJvZHkiPT09bil7aWYoZS5fY2VsbHM9ZS5fY2VsbHN8fFtdLGw9ZS5fY2VsbHMuZmlsdGVyKCh0PT50Ll92YWNhbnQpKVswXSxsfHwobD10aGlzLl9jcmVhdGVDZWxsKCJ0ZCIpLGUuX2NlbGxzLnB1c2gobCkpLGwuc2V0QXR0cmlidXRlKCJwYXJ0IiwiY2VsbCBib2R5LWNlbGwiKSx0LmFwcGVuZENoaWxkKGwpLGE9PT1zLmxlbmd0aC0xJiYodGhpcy5fcm93RGV0YWlsc1RlbXBsYXRlfHx0aGlzLnJvd0RldGFpbHNSZW5kZXJlcikpe3RoaXMuX2RldGFpbHNDZWxscz10aGlzLl9kZXRhaWxzQ2VsbHN8fFtdO2NvbnN0IGU9dGhpcy5fZGV0YWlsc0NlbGxzLmZpbHRlcigodD0+dC5fdmFjYW50KSlbMF18fHRoaXMuX2NyZWF0ZUNlbGwoInRkIik7LTE9PT10aGlzLl9kZXRhaWxzQ2VsbHMuaW5kZXhPZihlKSYmdGhpcy5fZGV0YWlsc0NlbGxzLnB1c2goZSksZS5fY29udGVudC5wYXJlbnRFbGVtZW50fHxvLmFwcGVuZENoaWxkKGUuX2NvbnRlbnQpLHRoaXMuX2NvbmZpZ3VyZURldGFpbHNDZWxsKGUpLHQuYXBwZW5kQ2hpbGQoZSksdGhpcy5fYTExeVNldFJvd0RldGFpbHNDZWxsKHQsZSksZS5fdmFjYW50PSExfWUubm90aWZ5UGF0aCYmIXImJmUubm90aWZ5UGF0aCgiX2NlbGxzLioiLGUuX2NlbGxzKX1lbHNle2NvbnN0IHI9ImhlYWRlciI9PT1uPyJ0aCI6InRkIjtpfHwidmFhZGluLWdyaWQtY29sdW1uLWdyb3VwIj09PWUubG9jYWxOYW1lPyhsPWVbYF8ke259Q2VsbGBdfHx0aGlzLl9jcmVhdGVDZWxsKHIpLGwuX2NvbHVtbj1lLHQuYXBwZW5kQ2hpbGQobCksZVtgXyR7bn1DZWxsYF09bCk6KGUuX2VtcHR5Q2VsbHM9ZS5fZW1wdHlDZWxsc3x8W10sbD1lLl9lbXB0eUNlbGxzLmZpbHRlcigodD0+dC5fdmFjYW50KSlbMF18fHRoaXMuX2NyZWF0ZUNlbGwociksbC5fY29sdW1uPWUsdC5hcHBlbmRDaGlsZChsKSwtMT09PWUuX2VtcHR5Q2VsbHMuaW5kZXhPZihsKSYmZS5fZW1wdHlDZWxscy5wdXNoKGwpKSxsLnNldEF0dHJpYnV0ZSgicGFydCIsYGNlbGwgJHtufS1jZWxsYCksdGhpcy5fX3VwZGF0ZUhlYWRlckZvb3RlclJvd1Zpc2liaWxpdHkodCl9bC5fY29udGVudC5wYXJlbnRFbGVtZW50fHxvLmFwcGVuZENoaWxkKGwuX2NvbnRlbnQpLGwuX3ZhY2FudD0hMSxsLl9jb2x1bW49ZX0pKSx0aGlzLmFwcGVuZENoaWxkKG8pLHRoaXMuX2Zyb3plbkNlbGxzQ2hhbmdlZCgpLHRoaXMuX3VwZGF0ZUZpcnN0QW5kTGFzdENvbHVtbkZvclJvdyh0KX1fX3VwZGF0ZUhlYWRlckZvb3RlclJvd1Zpc2liaWxpdHkodCl7aWYoIXQpcmV0dXJuO2NvbnN0IGU9QXJyYXkuZnJvbSh0LmNoaWxkcmVuKS5maWx0ZXIoKGU9Pntjb25zdCBuPWUuX2NvbHVtbjtpZihuLl9lbXB0eUNlbGxzJiZuLl9lbXB0eUNlbGxzLmluZGV4T2YoZSk+LTEpcmV0dXJuITE7aWYodC5wYXJlbnRFbGVtZW50PT09dGhpcy4kLmhlYWRlcil7aWYobi5oZWFkZXJSZW5kZXJlcnx8bi5faGVhZGVyVGVtcGxhdGUpcmV0dXJuITA7aWYobnVsbD09PW4uaGVhZGVyKXJldHVybiExO2lmKG4ucGF0aHx8dm9pZCAwIT09bi5oZWFkZXIpcmV0dXJuITB9ZWxzZSBpZihuLmZvb3RlclJlbmRlcmVyfHxuLl9mb290ZXJUZW1wbGF0ZSlyZXR1cm4hMH0pKTt0LmhpZGRlbiE9PSFlLmxlbmd0aCYmKHQuaGlkZGVuPSFlLmxlbmd0aCx0aGlzLm5vdGlmeVJlc2l6ZSgpKX1fdXBkYXRlU2Nyb2xsZXJJdGVtKHQsZSl7dGhpcy5fcHJldmVudFNjcm9sbGVyUm90YXRpbmdDZWxsRm9jdXModCxlKSx0aGlzLl9jb2x1bW5UcmVlJiYodGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJmaXJzdCIsMD09PWUsdCksdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJvZGQiLGUlMix0KSx0aGlzLl9hMTF5VXBkYXRlUm93Um93aW5kZXgodCxlKSx0aGlzLl9nZXRJdGVtKGUsdCkpfV9jb2x1bW5UcmVlQ2hhbmdlZCh0LGUpe3RoaXMuX3JlbmRlckNvbHVtblRyZWUodCksdGhpcy5yZWNhbGN1bGF0ZUNvbHVtbldpZHRocygpfV9yZW5kZXJDb2x1bW5UcmVlKHQpe2ZvcihBcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZm9yRWFjaCgoZT0+dGhpcy5fdXBkYXRlUm93KGUsdFt0Lmxlbmd0aC0xXSxudWxsLCExLCEwKSkpO3RoaXMuJC5oZWFkZXIuY2hpbGRyZW4ubGVuZ3RoPHQubGVuZ3RoOyl7Y29uc3QgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpO3Quc2V0QXR0cmlidXRlKCJwYXJ0Iiwicm93IiksdC5zZXRBdHRyaWJ1dGUoInJvbGUiLCJyb3ciKSx0aGlzLiQuaGVhZGVyLmFwcGVuZENoaWxkKHQpO2NvbnN0IGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTtlLnNldEF0dHJpYnV0ZSgicGFydCIsInJvdyIpLGUuc2V0QXR0cmlidXRlKCJyb2xlIiwicm93IiksdGhpcy4kLmZvb3Rlci5hcHBlbmRDaGlsZChlKX1mb3IoO3RoaXMuJC5oZWFkZXIuY2hpbGRyZW4ubGVuZ3RoPnQubGVuZ3RoOyl0aGlzLiQuaGVhZGVyLnJlbW92ZUNoaWxkKHRoaXMuJC5oZWFkZXIuZmlyc3RFbGVtZW50Q2hpbGQpLHRoaXMuJC5mb290ZXIucmVtb3ZlQ2hpbGQodGhpcy4kLmZvb3Rlci5maXJzdEVsZW1lbnRDaGlsZCk7QXJyYXkuZnJvbSh0aGlzLiQuaGVhZGVyLmNoaWxkcmVuKS5mb3JFYWNoKCgoZSxuKT0+dGhpcy5fdXBkYXRlUm93KGUsdFtuXSwiaGVhZGVyIixuPT09dC5sZW5ndGgtMSkpKSxBcnJheS5mcm9tKHRoaXMuJC5mb290ZXIuY2hpbGRyZW4pLmZvckVhY2goKChlLG4pPT50aGlzLl91cGRhdGVSb3coZSx0W3QubGVuZ3RoLTEtbl0sImZvb3RlciIsMD09PW4pKSksdGhpcy5fdXBkYXRlUm93KHRoaXMuJC5zaXplcix0W3QubGVuZ3RoLTFdKSx0aGlzLl9yZXNpemVIYW5kbGVyKCksdGhpcy5fZnJvemVuQ2VsbHNDaGFuZ2VkKCksdGhpcy5fdXBkYXRlRmlyc3RBbmRMYXN0Q29sdW1uKCksdGhpcy5fcmVzZXRLZXlib2FyZE5hdmlnYXRpb24oKSx0aGlzLl9hMTF5VXBkYXRlSGVhZGVyUm93cygpLHRoaXMuX2ExMXlVcGRhdGVGb290ZXJSb3dzKCksdGhpcy5fX3VwZGF0ZUZvb3RlclBvc2l0aW9uaW5nKCl9X191cGRhdGVGb290ZXJQb3NpdGlvbmluZygpe3RoaXMuX2ZpcmVmb3gmJih0aGlzLiQuaXRlbXMuc3R5bGUucGFkZGluZ0JvdHRvbT0wLHRoaXMuaGVpZ2h0QnlSb3dzfHwodGhpcy4kLml0ZW1zLnN0eWxlLnBhZGRpbmdCb3R0b209YCR7dGhpcy4kLmZvb3Rlci5vZmZzZXRIZWlnaHR9cHhgKSksdGhpcy5faW9zJiYhd2luZG93LkNTUy5zdXBwb3J0cygicG9zaXRpb24iLCJzdGlja3kiKSYmKHRoaXMuJC50YWJsZS5zdHlsZS5oZWlnaHQ9IiIsdGhpcy4kLnRhYmxlLnN0eWxlLm1pbkhlaWdodD0iMTAwJSIsdGhpcy4kLnRhYmxlLnN0eWxlLm1heEhlaWdodD0iMTAwJSIsc2V0VGltZW91dCgoKCk9PnRoaXMuJC50YWJsZS5zdHlsZS5oZWlnaHQ9YCR7dGhpcy4kLnNjcm9sbGVyLm9mZnNldEhlaWdodH1weGApKSl9X3VwZGF0ZUl0ZW0odCxlKXt0Ll9pdGVtPWU7Y29uc3Qgbj10aGlzLl9fZ2V0Um93TW9kZWwodCk7dGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJzZWxlY3RlZCIsbi5zZWxlY3RlZCx0KSx0aGlzLl9hMTF5VXBkYXRlUm93U2VsZWN0ZWQodCxuLnNlbGVjdGVkKSx0aGlzLl9hMTF5VXBkYXRlUm93TGV2ZWwodCxuLmxldmVsKSx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoImV4cGFuZGVkIixuLmV4cGFuZGVkLHQpLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgiZGV0YWlscy1vcGVuZWQiLHRoaXMuX2lzRGV0YWlsc09wZW5lZChlKSx0KSwodGhpcy5fcm93RGV0YWlsc1RlbXBsYXRlfHx0aGlzLnJvd0RldGFpbHNSZW5kZXJlcikmJnRoaXMuX3RvZ2dsZURldGFpbHNDZWxsKHQsZSksdGhpcy5fZ2VuZXJhdGVDZWxsQ2xhc3NOYW1lcyh0LG4pLHRoaXMuX2ZpbHRlckRyYWdBbmREcm9wKHQsbiksQXJyYXkuZnJvbSh0LmNoaWxkcmVuKS5mb3JFYWNoKCh0PT57aWYodC5fcmVuZGVyZXIpe2NvbnN0IGU9dC5fY29sdW1ufHx0aGlzO3QuX3JlbmRlcmVyLmNhbGwoZSx0Ll9jb250ZW50LGUsbil9ZWxzZSB0Ll9pbnN0YW5jZSYmKHQuX2luc3RhbmNlLl9fZGV0YWlsc09wZW5lZF9fPW4uZGV0YWlsc09wZW5lZCx0Ll9pbnN0YW5jZS5fX3NlbGVjdGVkX189bi5zZWxlY3RlZCx0Ll9pbnN0YW5jZS5fX2xldmVsX189bi5sZXZlbCx0Ll9pbnN0YW5jZS5fX2V4cGFuZGVkX189bi5leHBhbmRlZCx0Ll9pbnN0YW5jZS5zZXRQcm9wZXJ0aWVzKG4pKX0pKSx0aGlzLl9kZWJvdW5jZXJVcGRhdGVIZWlnaHRzPUVuLmRlYm91bmNlKHRoaXMuX2RlYm91bmNlclVwZGF0ZUhlaWdodHMsZ3QuYWZ0ZXIoMSksKCgpPT57dGhpcy5fdXBkYXRlTWV0cmljcygpLHRoaXMuX3Bvc2l0aW9uSXRlbXMoKSx0aGlzLl91cGRhdGVTY3JvbGxlclNpemUoKX0pKX1fcmVzaXplSGFuZGxlcigpe3RoaXMuX3VwZGF0ZURldGFpbHNDZWxsSGVpZ2h0cygpLHRoaXMuX2FjY2Vzc0lyb25MaXN0QVBJKHN1cGVyLl9yZXNpemVIYW5kbGVyLCEwKSx0aGlzLl91cGRhdGVTY3JvbGxlck1lYXN1cmVtZW50cygpLHRoaXMuX191cGRhdGVGb290ZXJQb3NpdGlvbmluZygpfV9vbkFuaW1hdGlvbkVuZCh0KXswPT09dC5hbmltYXRpb25OYW1lLmluZGV4T2YoInZhYWRpbi1ncmlkLWFwcGVhciIpJiYodGhpcy5fcmVuZGVyKCksdC5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLm5vdGlmeVJlc2l6ZSgpLHRoaXMuX19pdGVtc1JlY2VpdmVkKCkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgoKT0+e3RoaXMuX19zY3JvbGxUb1BlbmRpbmdJbmRleCgpLHRoaXMuJC50YWJsZS5zdHlsZS53ZWJraXRPdmVyZmxvd1Njcm9sbGluZz0idG91Y2gifSkpKX1fdG9nZ2xlQXR0cmlidXRlKHQsZSxuKXtuLmhhc0F0dHJpYnV0ZSh0KT09PSFlJiYoZT9uLnNldEF0dHJpYnV0ZSh0LCIiKTpuLnJlbW92ZUF0dHJpYnV0ZSh0KSl9X19nZXRSb3dNb2RlbCh0KXtyZXR1cm57aW5kZXg6dC5pbmRleCxpdGVtOnQuX2l0ZW0sbGV2ZWw6dGhpcy5fZ2V0SW5kZXhMZXZlbCh0LmluZGV4KSxleHBhbmRlZDp0aGlzLl9pc0V4cGFuZGVkKHQuX2l0ZW0pLHNlbGVjdGVkOnRoaXMuX2lzU2VsZWN0ZWQodC5faXRlbSksZGV0YWlsc09wZW5lZDohKCF0aGlzLl9yb3dEZXRhaWxzVGVtcGxhdGUmJiF0aGlzLnJvd0RldGFpbHNSZW5kZXJlcikmJnRoaXMuX2lzRGV0YWlsc09wZW5lZCh0Ll9pdGVtKX19cmVuZGVyKCl7dGhpcy5fY29sdW1uVHJlZSYmKHRoaXMuX2NvbHVtblRyZWUuZm9yRWFjaCgodD0+e3QuZm9yRWFjaCgodD0+dC5fcmVuZGVySGVhZGVyQW5kRm9vdGVyKCkpKX0pKSx0aGlzLl91cGRhdGUoKSl9bm90aWZ5UmVzaXplKCl7c3VwZXIubm90aWZ5UmVzaXplKCl9X2hlaWdodEJ5Um93c0NoYW5nZWQodCxlKXsodHx8ZSkmJnRoaXMubm90aWZ5UmVzaXplKCl9X19mb3JjZVJlZmxvdygpe3RoaXMuX2RlYm91bmNlckZvcmNlUmVmbG93PUVuLmRlYm91bmNlKHRoaXMuX2RlYm91bmNlckZvcmNlUmVmbG93LF90LCgoKT0+e3RoaXMuJC5zY3JvbGxlci5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIixzZXRUaW1lb3V0KCgoKT0+dGhpcy4kLnNjcm9sbGVyLnN0eWxlLm92ZXJmbG93PSIiKSl9KSl9fWN1c3RvbUVsZW1lbnRzLmRlZmluZShZTnQuaXMsWU50KTtsZXQgWE50PWNsYXNzIGV4dGVuZHMgeWV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3J1bj0iIn1fY3N2VXJsKHQsZSxuKXtyZXR1cm4gZT9WTyhuKHQsZSkse2Zvcm1hdDoiY3N2In0pOiIifV9qc29uVXJsKHQsZSxuKXtyZXR1cm4gZT9uKHQsZSk6IiJ9X2Nzdk5hbWUodCxlKXtyZXR1cm4gZT9gcnVuLSR7ZX0tdGFnLSR7dH0uY3N2YDoiIn1fanNvbk5hbWUodCxlKXtyZXR1cm4gZT9gcnVuLSR7ZX0tdGFnLSR7dH0uanNvbmA6IiJ9fTtYTnQudGVtcGxhdGU9X2VgCiAgICA8cGFwZXItZHJvcGRvd24tbWVudQogICAgICBuby1sYWJlbC1mbG9hdD0idHJ1ZSIKICAgICAgbGFiZWw9InJ1biB0byBkb3dubG9hZCIKICAgICAgc2VsZWN0ZWQtaXRlbS1sYWJlbD0ie3tfcnVufX0iCiAgICA+CiAgICAgIDxwYXBlci1saXN0Ym94IHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbcnVuc11dIj4KICAgICAgICAgIDxwYXBlci1pdGVtIG5vLWxhYmVsLWZsb2F0PSJ0cnVlIj5bW2l0ZW1dXTwvcGFwZXItaXRlbT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3J1bl1dIj4KICAgICAgPGEgZG93bmxvYWQ9IltbX2Nzdk5hbWUodGFnLCBfcnVuKV1dIiBocmVmPSJbW19jc3ZVcmwodGFnLCBfcnVuLCB1cmxGbildXSIKICAgICAgICA+Q1NWPC9hCiAgICAgID48IS0tCiAgICAgIC0tPjxhCiAgICAgICAgZG93bmxvYWQ9IltbX2pzb25OYW1lKHRhZywgX3J1bildXSIKICAgICAgICBocmVmPSJbW19qc29uVXJsKHRhZywgX3J1biwgdXJsRm4pXV0iCiAgICAgICAgPkpTT048L2EKICAgICAgPgogICAgPC90ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgIH0KICAgICAgcGFwZXItZHJvcGRvd24tbWVudSB7CiAgICAgICAgd2lkdGg6IDEwMHB4OwogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsOiB7CiAgICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgfQogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0OiB7CiAgICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgfQogICAgICB9CiAgICAgIGEgewogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICBtYXJnaW46IDAgMC4yZW07CiAgICAgIH0KICAgICAgcGFwZXItaW5wdXQgewogICAgICAgIGZvbnQtc2l6ZTogMjJweDsKICAgICAgfQogICAgPC9zdHlsZT4KICBgLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLFhOdC5wcm90b3R5cGUsIl9ydW4iLHZvaWQgMCksdChbbyh7dHlwZTpBcnJheX0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLFhOdC5wcm90b3R5cGUsInJ1bnMiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sWE50LnByb3RvdHlwZSwidGFnIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLFhOdC5wcm90b3R5cGUsInVybEZuIix2b2lkIDApLFhOdD10KFtpKCJ0Zi1kb3dubG9hZGVyIildLFhOdCksbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtsZXQgJE50PWNsYXNzIGV4dGVuZHMgeWV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29sb3JTY2FsZT1udWxsLHRoaXMuX2xvYWREYXRhQ2FsbGJhY2s9KHQsZSxuKT0+e2lmKG51bGw9PW4pcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiRmFpbGVkIHRvIGxvYWQgZGF0YSBmb3I6IixlKTtjb25zdCBpPW4ubWFwKCh0PT4oe3dhbGxfdGltZTpuZXcgRGF0ZSgxZTMqdFswXSksc3RlcDp0WzFdLHNjYWxhcjp0WzJdfSkpKSxyPXRoaXMuX2dldFNlcmllc05hbWVGcm9tRGF0dW0oZSk7dC5zZXRTZXJpZXNNZXRhZGF0YShyLGUpLHQuc2V0U2VyaWVzRGF0YShyLGkpfSx0aGlzLmdldERhdGFMb2FkVXJsPSh7dGFnOnQscnVuOmV9KT0+Z3IoKS5wbHVnaW5Sb3V0ZSgic2NhbGFycyIsIi9zY2FsYXJzIixuZXcgVVJMU2VhcmNoUGFyYW1zKHt0YWc6dCxydW46ZX0pKSx0aGlzLl9kb3dubG9hZFVybEZuPSh0LGUpPT50aGlzLmdldERhdGFMb2FkVXJsKHt0YWc6dCxydW46ZX0pLHRoaXMucmVxdWVzdERhdGE9KHQsZSxuKT0+dGhpcy5pbkNvbGFiP3RoaXMuX3JlcXVlc3REYXRhR2V0KHQsZSxuKTp0aGlzLl9yZXF1ZXN0RGF0YVBvc3QodCxlLG4pLHRoaXMuX3JlcXVlc3REYXRhR2V0PSh0LGUsbik9Pntjb25zdCBpPWdyKCkucGx1Z2luUm91dGUoInNjYWxhcnMiLCIvc2NhbGFycyIpO1Byb21pc2UuYWxsKHQubWFwKCh0PT57Y29uc3Qgbj1WTyhpLHt0YWc6dC50YWcscnVuOnQucnVufSk7cmV0dXJuIHRoaXMucmVxdWVzdE1hbmFnZXIucmVxdWVzdChuKS50aGVuKChuPT57ZSh7aXRlbTp0LGRhdGE6bn0pfSkpfSkpKS5maW5hbGx5KCgoKT0+e24oKX0pKX0sdGhpcy5fcmVxdWVzdERhdGFQb3N0PSh0LGUsbik9Pnt2YXIgaTtjb25zdCByPWdyKCkucGx1Z2luUm91dGUoInNjYWxhcnMiLCIvc2NhbGFyc19tdWx0aXJ1biIpLG89bmV3IE1hcDtmb3IoY29uc3R7dGFnOmUscnVuOm59b2YgdCl7bGV0IHQ9by5nZXQoZSk7bnVsbD09dCYmby5zZXQoZSx0PVtdKSx0LnB1c2gobil9Y29uc3QgYT1udWxsIT09KGk9dGhpcy5iYXRjaFNpemUpJiZ2b2lkIDAhPT1pP2k6NjQscz1bXTtmb3IoY29uc3RbdCxlXW9mIG8pZm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKz1hKXMucHVzaCh7dGFnOnQscnVuczplLnNsaWNlKG4sbithKX0pO1Byb21pc2UuYWxsKHMubWFwKCgoe3RhZzp0LHJ1bnM6bn0pPT50aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3Qocix7dGFnOnQscnVuczpufSkudGhlbigoaT0+e2Zvcihjb25zdCByIG9mIG4pe2NvbnN0IG49e3RhZzp0LHJ1bjpyfTtPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaSxyKT9lKHtpdGVtOm4sZGF0YTppW3JdfSk6ZSh7aXRlbTpuLGRhdGE6bnVsbH0pfX0pKSkpKS5maW5hbGx5KCgoKT0+e24oKX0pKX0sdGhpcy5fZ2V0RGF0YUxvYWROYW1lPXQ9PnRoaXMuX2dldFNlcmllc05hbWVGcm9tRGF0dW0odCksdGhpcy5fZXhwYW5kZWQ9ITEsdGhpcy5fdG9vbHRpcENvbHVtbnM9KCgpPT57Y29uc3QgdD1LX3Quc2xpY2UoKSxlPXQuZmluZEluZGV4KCh0PT4iTmFtZSI9PXQudGl0bGUpKTtyZXR1cm4gdC5zcGxpY2UoZSwxLHt0aXRsZToiTmFtZSIsZXZhbHVhdGU6dD0+e2NvbnN0IGU9dC5kYXRhc2V0Lm1ldGFkYXRhKCkubWV0YTtyZXR1cm4gdGhpcy5fZ2V0U2VyaWVzRGlzcGxheU5hbWVGcm9tRGF0dW0oZSl9fSksdH0pKCl9X2dldENoYXJ0RGF0YUxvYWRlcigpe3JldHVybiB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigidGYtbGluZS1jaGFydC1kYXRhLWxvYWRlciIpfXJlbG9hZCgpe3RoaXMuX2dldENoYXJ0RGF0YUxvYWRlcigpLnJlbG9hZCgpfXJlZHJhdygpe3RoaXMuX2dldENoYXJ0RGF0YUxvYWRlcigpLnJlZHJhdygpfV90b2dnbGVFeHBhbmRlZCh0KXt0aGlzLnNldCgiX2V4cGFuZGVkIiwhdGhpcy5fZXhwYW5kZWQpLHRoaXMucmVkcmF3KCl9X3RvZ2dsZUxvZ1NjYWxlKCl7dGhpcy5zZXQoIl9sb2dTY2FsZUFjdGl2ZSIsIXRoaXMuX2xvZ1NjYWxlQWN0aXZlKX1fcmVzZXREb21haW4oKXtjb25zdCB0PXRoaXMuX2dldENoYXJ0RGF0YUxvYWRlcigpO3QmJnQucmVzZXREb21haW4oKX1fdXBkYXRlRG93bmxvYWRMaW5rKCl7Y29uc3QgdD10aGlzLl9nZXRDaGFydERhdGFMb2FkZXIoKS5leHBvcnRBc1N2Z1N0cmluZygpO3RoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIjc3ZnTGluayIpLmhyZWY9YGRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsJHtidG9hKHQpfWB9X3J1bnNGcm9tRGF0YSh0KXtyZXR1cm4gdC5tYXAoKHQ9PnQucnVuKSl9X2dldERhdGFTZXJpZXMoKXtyZXR1cm4gdGhpcy5kYXRhVG9Mb2FkLm1hcCgodD0+dGhpcy5fZ2V0U2VyaWVzTmFtZUZyb21EYXR1bSh0KSkpfV9nZXRTZXJpZXNOYW1lRnJvbURhdHVtKHtydW46dCxleHBlcmltZW50OmU9e25hbWU6Il9kZWZhdWx0In19KXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoW2UubmFtZSx0XSl9X2dldFNlcmllc0Rpc3BsYXlOYW1lRnJvbURhdHVtKHQpe3JldHVybiB0LnJ1bn1fZ2V0Q29sb3JTY2FsZSgpe3JldHVybiBudWxsIT09dGhpcy5jb2xvclNjYWxlP3RoaXMuY29sb3JTY2FsZTp7c2NhbGU6dD0+e2NvbnN0WyxlXT1KU09OLnBhcnNlKHQpO3JldHVybiBBTyhlKX19fX07JE50LnRlbXBsYXRlPV9lYAogICAgPHRmLWNhcmQtaGVhZGluZwogICAgICB0YWc9IltbdGFnXV0iCiAgICAgIGRpc3BsYXktbmFtZT0iW1t0YWdNZXRhZGF0YS5kaXNwbGF5TmFtZV1dIgogICAgICBkZXNjcmlwdGlvbj0iW1t0YWdNZXRhZGF0YS5kZXNjcmlwdGlvbl1dIgogICAgPjwvdGYtY2FyZC1oZWFkaW5nPgogICAgPGRpdiBpZD0idGYtbGluZS1jaGFydC1kYXRhLWxvYWRlci1jb250YWluZXIiPgogICAgICA8dGYtbGluZS1jaGFydC1kYXRhLWxvYWRlcgogICAgICAgIGFjdGl2ZT0iW1thY3RpdmVdXSIKICAgICAgICBjb2xvci1zY2FsZT0iW1tfZ2V0Q29sb3JTY2FsZShjb2xvclNjYWxlKV1dIgogICAgICAgIGRhdGEtc2VyaWVzPSJbW19nZXREYXRhU2VyaWVzKGRhdGFUb0xvYWQuKildXSIKICAgICAgICBkYXRhLXRvLWxvYWQ9IltbZGF0YVRvTG9hZF1dIgogICAgICAgIGdldC1kYXRhLWxvYWQtbmFtZT0iW1tfZ2V0RGF0YUxvYWROYW1lXV0iCiAgICAgICAgZ2V0LWRhdGEtbG9hZC11cmw9IltbZ2V0RGF0YUxvYWRVcmxdXSIKICAgICAgICByZXF1ZXN0LWRhdGE9IltbcmVxdWVzdERhdGFdXSIKICAgICAgICBpZ25vcmUteS1vdXRsaWVycz0iW1tpZ25vcmVZT3V0bGllcnNdXSIKICAgICAgICBsb2FkLWRhdGEtY2FsbGJhY2s9IltbX2xvYWREYXRhQ2FsbGJhY2tdXSIKICAgICAgICBsb2FkLWtleT0iW1t0YWddXSIKICAgICAgICBsb2ctc2NhbGUtYWN0aXZlPSJbW19sb2dTY2FsZUFjdGl2ZV1dIgogICAgICAgIHJlcXVlc3QtbWFuYWdlcj0iW1tyZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgIHNtb290aGluZy1lbmFibGVkPSJbW3Ntb290aGluZ0VuYWJsZWRdXSIKICAgICAgICBzbW9vdGhpbmctd2VpZ2h0PSJbW3Ntb290aGluZ1dlaWdodF1dIgogICAgICAgIHRhZy1tZXRhZGF0YT0iW1t0YWdNZXRhZGF0YV1dIgogICAgICAgIHRvb2x0aXAtY29sdW1ucz0iW1tfdG9vbHRpcENvbHVtbnNdXSIKICAgICAgICB0b29sdGlwLXBvc2l0aW9uPSJhdXRvIgogICAgICAgIHRvb2x0aXAtc29ydGluZy1tZXRob2Q9IltbdG9vbHRpcFNvcnRpbmdNZXRob2RdXSIKICAgICAgICB4LXR5cGU9IltbeFR5cGVdXSIKICAgICAgPgogICAgICA8L3RmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXI+CiAgICA8L2Rpdj4KICAgIDxkaXYgaWQ9ImJ1dHRvbnMiPgogICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICBzZWxlY3RlZCQ9IltbX2V4cGFuZGVkXV0iCiAgICAgICAgaWNvbj0iZnVsbHNjcmVlbiIKICAgICAgICBvbi10YXA9Il90b2dnbGVFeHBhbmRlZCIKICAgICAgPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIHNlbGVjdGVkJD0iW1tfbG9nU2NhbGVBY3RpdmVdXSIKICAgICAgICBpY29uPSJsaW5lLXdlaWdodCIKICAgICAgICBvbi10YXA9Il90b2dnbGVMb2dTY2FsZSIKICAgICAgICB0aXRsZT0iVG9nZ2xlIHktYXhpcyBsb2cgc2NhbGUiCiAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICBpY29uPSJzZXR0aW5ncy1vdmVyc2NhbiIKICAgICAgICBvbi10YXA9Il9yZXNldERvbWFpbiIKICAgICAgICB0aXRsZT0iRml0IGRvbWFpbiB0byBkYXRhIgogICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3Nob3dEb3dubG9hZExpbmtzXV0iPgogICAgICAgIDxwYXBlci1tZW51LWJ1dHRvbiBvbi1wYXBlci1kcm9wZG93bi1vcGVuPSJfdXBkYXRlRG93bmxvYWRMaW5rIj4KICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgICAgICBjbGFzcz0iZHJvcGRvd24tdHJpZ2dlciIKICAgICAgICAgICAgc2xvdD0iZHJvcGRvd24tdHJpZ2dlciIKICAgICAgICAgICAgaWNvbj0iZmlsZS1kb3dubG9hZCIKICAgICAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgPHBhcGVyLWxpc3Rib3ggY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiPgogICAgICAgICAgICA8cGFwZXItaXRlbT4KICAgICAgICAgICAgICA8YSBpZD0ic3ZnTGluayIgZG93bmxvYWQ9IltbdGFnXV0uc3ZnIj4KICAgICAgICAgICAgICAgIERvd25sb2FkIEN1cnJlbnQgQ2hhcnQgYXMgU1ZHCiAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICA8L3BhcGVyLWl0ZW0+CiAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgPC9wYXBlci1tZW51LWJ1dHRvbj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHNwYW4gc3R5bGU9ImZsZXgtZ3JvdzogMSI+PC9zcGFuPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Iltbc2hvd0Rvd25sb2FkTGlua3NdXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iZG93bmxvYWQtbGlua3MiPgogICAgICAgICAgPHRmLWRvd25sb2FkZXIKICAgICAgICAgICAgcnVucz0iW1tfcnVuc0Zyb21EYXRhKGRhdGFUb0xvYWQpXV0iCiAgICAgICAgICAgIHRhZz0iW1t0YWddXSIKICAgICAgICAgICAgdXJsLWZuPSJbW19kb3dubG9hZFVybEZuXV0iCiAgICAgICAgICA+PC90Zi1kb3dubG9hZGVyPgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBtYXJnaW46IDVweDsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMzMwcHg7CiAgICAgIH0KCiAgICAgIDpob3N0KFtfZXhwYW5kZWRdKSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtfZXhwYW5kZWRdKSAjdGYtbGluZS1jaGFydC1kYXRhLWxvYWRlci1jb250YWluZXIgewogICAgICAgIGhlaWdodDogNDAwcHg7CiAgICAgIH0KCiAgICAgICN0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyLWNvbnRhaW5lciB7CiAgICAgICAgaGVpZ2h0OiAyMDBweDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgdGYtY2FyZC1oZWFkaW5nIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4OwogICAgICB9CgogICAgICAjYnV0dG9ucyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICB9CgogICAgICBwYXBlci1pY29uLWJ1dHRvbiB7CiAgICAgICAgY29sb3I6ICMyMTk2ZjM7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTAwJTsKICAgICAgICB3aWR0aDogMzJweDsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgcGFkZGluZzogNHB4OwogICAgICB9CgogICAgICBwYXBlci1pY29uLWJ1dHRvbltzZWxlY3RlZF0gewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXRiLXVpLWxpZ2h0LWFjY2VudCk7CiAgICAgIH0KCiAgICAgIC5kb3dubG9hZC1saW5rcyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgIH0KCiAgICAgIC5kb3dubG9hZC1saW5rcyBhIHsKICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIG1hcmdpbjogMnB4OwogICAgICB9CgogICAgICAuZG93bmxvYWQtbGlua3MgcGFwZXItZHJvcGRvd24tbWVudSB7CiAgICAgICAgd2lkdGg6IDEwMHB4OwogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsOiB7CiAgICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgfQogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0OiB7CiAgICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgfQogICAgICB9CgogICAgICBwYXBlci1tZW51LWJ1dHRvbiB7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQogICAgICBwYXBlci1pdGVtIGEgewogICAgICAgIGNvbG9yOiBpbmhlcml0OwogICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CiAgICA8L3N0eWxlPgogIGAsdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sJE50LnByb3RvdHlwZSwidGFnIix2b2lkIDApLHQoW28oe3R5cGU6QXJyYXl9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSwkTnQucHJvdG90eXBlLCJkYXRhVG9Mb2FkIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLCROdC5wcm90b3R5cGUsInhUeXBlIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sJE50LnByb3RvdHlwZSwiYWN0aXZlIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sJE50LnByb3RvdHlwZSwiaWdub3JlWU91dGxpZXJzIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLGhyKV0sJE50LnByb3RvdHlwZSwicmVxdWVzdE1hbmFnZXIiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSwkTnQucHJvdG90eXBlLCJzaG93RG93bkxpbmtzIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sJE50LnByb3RvdHlwZSwic21vb3RoaW5nRW5hYmxlZCIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSwkTnQucHJvdG90eXBlLCJzbW9vdGhpbmdXZWlnaHQiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sJE50LnByb3RvdHlwZSwidGFnTWV0YWRhdGEiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sJE50LnByb3RvdHlwZSwiY29sb3JTY2FsZSIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSwkTnQucHJvdG90eXBlLCJ0b29sdGlwU29ydGluZ01ldGhvZCIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSwkTnQucHJvdG90eXBlLCJiYXRjaFNpemUiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLCROdC5wcm90b3R5cGUsImluQ29sYWIiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sJE50LnByb3RvdHlwZSwiX2xvYWREYXRhQ2FsbGJhY2siLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pXSwkTnQucHJvdG90eXBlLCJnZXREYXRhTG9hZFVybCIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSwkTnQucHJvdG90eXBlLCJfZG93bmxvYWRVcmxGbiIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLCROdC5wcm90b3R5cGUsInJlcXVlc3REYXRhIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLCROdC5wcm90b3R5cGUsIl9nZXREYXRhTG9hZE5hbWUiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFuLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sJE50LnByb3RvdHlwZSwiX2V4cGFuZGVkIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sJE50LnByb3RvdHlwZSwiX2xvZ1NjYWxlQWN0aXZlIix2b2lkIDApLHQoW28oe3R5cGU6QXJyYXl9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSwkTnQucHJvdG90eXBlLCJfdG9vbHRpcENvbHVtbnMiLHZvaWQgMCksJE50PXQoW2koInRmLXNjYWxhci1jYXJkIildLCROdCk7bGV0IEtOdD1jbGFzcyBleHRlbmRzKChmdW5jdGlvbiB0KGUsbil7cmV0dXJuIFByKHt9LHRyKG4pLGUpfSkoW2dvXSx5ZSkpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnNlc3Npb25Hcm91cD1udWxsLHRoaXMuX3hUeXBlPXJfdC5TVEVQLHRoaXMuX25vTXVsdGlFeHBlcmltZW50cz0hMSx0aGlzLl9yZXF1ZXN0RGF0YT0odCxlLG4pPT57UHJvbWlzZS5hbGwodC5tYXAoKHQ9PnRoaXMuYmFja2VuZC5saXN0TWV0cmljRXZhbHMoe2V4cGVyaW1lbnROYW1lOnRoaXMuZXhwZXJpbWVudE5hbWUsc2Vzc2lvbk5hbWU6dC5ydW4sbWV0cmljTmFtZTp0LnRhZ30pLnRoZW4oKG49PntlKHtpdGVtOnQsZGF0YTpufSl9KSkpKSkuZmluYWxseSgoKCk9PntuKCl9KSl9LHRoaXMuX2NvbG9yU2NhbGU9e3NjYWxlOnQ9Pntjb25zdCBlPUpTT04ucGFyc2UodClbMV0sbj10aGlzLl9pbmRleE9mU2Vzc2lvbi5nZXQoZSk7cmV0dXJuIFNPWyh0aGlzLl9zZXNzaW9uR3JvdXBOYW1lSGFzaCtuKSVTTy5sZW5ndGhdfX19Y29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiaXJvbi1yZXNpemUiLHRoaXMucmVkcmF3LmJpbmQodGhpcykpfXJlZHJhdygpe3RoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCJ0Zi1zY2FsYXItY2FyZCIpLmZvckVhY2goKHQ9PnQucmVkcmF3KCkpKX1fc2Vzc2lvbkdyb3VwQ2hhbmdlZCgpe3RoaXMuc2Vzc2lvbkdyb3VwJiYwIT1PYmplY3Qua2V5cyh0aGlzLnNlc3Npb25Hcm91cCkubGVuZ3RoPyh0aGlzLl9pbmRleE9mU2Vzc2lvbj1uZXcgTWFwKHRoaXMuc2Vzc2lvbkdyb3VwLnNlc3Npb25zLm1hcCgoKHQsZSk9Plt0Lm5hbWUsZV0pKSksdGhpcy5fc2Vzc2lvbkdyb3VwTmFtZUhhc2g9U1B0KHRoaXMuc2Vzc2lvbkdyb3VwLm5hbWUpKToodGhpcy5faW5kZXhPZlNlc3Npb249bmV3IE1hcCx0aGlzLl9zZXNzaW9uR3JvdXBOYW1lSGFzaD0wKSx0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgidGYtc2NhbGFyLWNhcmQiKS5mb3JFYWNoKCh0PT57Y29uc3QgZT10LG49ZS5nZXQoInRhZyIpO2Uuc2V0KCJ0YWciLCIiKSxlLnNldCgidGFnIixuKX0pKX1faGF2ZU1ldHJpY3MoKXtyZXR1cm4gdGhpcy52aXNpYmxlU2NoZW1hJiZBcnJheS5pc0FycmF5KHRoaXMudmlzaWJsZVNjaGVtYS5tZXRyaWNJbmZvcykmJnRoaXMudmlzaWJsZVNjaGVtYS5tZXRyaWNJbmZvcy5sZW5ndGg+MH1faGF2ZU1ldHJpY3NBbmRTZXNzaW9uR3JvdXAoKXtyZXR1cm4gdGhpcy5zZXNzaW9uR3JvdXAmJnRoaXMuX2hhdmVNZXRyaWNzKCl9X2NvbXB1dGVTZXJpZXNGb3JTZXNzaW9uR3JvdXBNZXRyaWModCxlKXtyZXR1cm4gbnVsbD09PXR8fDA9PU9iamVjdC5rZXlzKHQpLmxlbmd0aHx8bnVsbD09PWU/W106dC5zZXNzaW9ucy5maWx0ZXIoKHQ9PnZvaWQgMCE9PXJQdCh0Lm1ldHJpY1ZhbHVlcyxlLm5hbWUpKSkubWFwKCh0PT4oe3RhZzplLm5hbWUscnVuOnQubmFtZX0pKSl9X2NvbXB1dGVUYWdNZXRhZGF0YSh0KXtyZXR1cm57ZGlzcGxheU5hbWU6Skx0KHQpLGRlc2NyaXB0aW9uOnQuZGVzY3JpcHRpb258fCIifX19O0tOdC50ZW1wbGF0ZT1fZWAKICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shc2Vzc2lvbkdyb3VwXV0iPgogICAgICA8ZGl2PgogICAgICAgIDxoMz5ObyBzZXNzaW9uIGdyb3VwIHNlbGVjdGVkPC9oMz4KICAgICAgICA8cD5QbGVhc2Ugc2VsZWN0IGEgc2Vzc2lvbiBncm91cCB0byBzZWUgaXRzIG1ldHJpYy1ncmFwaHMgaGVyZS48L3A+CiAgICAgIDwvZGl2PgogICAgPC90ZW1wbGF0ZT4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2hhdmVNZXRyaWNzKHZpc2libGVTY2hlbWEuKildXSI+CiAgICAgIDxkaXY+CiAgICAgICAgPGgzPk5vIG1ldHJpY3MgYXJlIGVuYWJsZWQ8L2gzPgogICAgICAgIDxwPlBsZWFzZSBlbmFibGUgc29tZSBtZXRyaWNzIHRvIHNlZSBjb250ZW50IGhlcmUuPC9wPgogICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CiAgICA8ZGl2IGNsYXNzPSJsYXlvdXQgaG9yaXpvbnRhbCB3cmFwIHNlc3Npb24tZ3JvdXAtZGV0YWlscyI+CiAgICAgIDx0ZW1wbGF0ZQogICAgICAgIGlzPSJkb20taWYiCiAgICAgICAgaWY9IltbX2hhdmVNZXRyaWNzQW5kU2Vzc2lvbkdyb3VwKHZpc2libGVTY2hlbWEuKiwgc2Vzc2lvbkdyb3VwKV1dIgogICAgICA+CiAgICAgICAgPHRlbXBsYXRlCiAgICAgICAgICBpcz0iZG9tLXJlcGVhdCIKICAgICAgICAgIGl0ZW1zPSJbW3Zpc2libGVTY2hlbWEubWV0cmljSW5mb3NdXSIKICAgICAgICAgIGFzPSJtZXRyaWNJbmZvIgogICAgICAgID4KICAgICAgICAgIDwhLS0gTm90ZSB0aGF0IHdlIGRvIG5vdCBwcm92aWRlIGEgcmVxdWVzdC1tYW5hZ2VyIGF0dHJpYnV0ZSBzaW5jZQogICAgICAgICAgICAgICB3ZSBwcm92aWRlIGEgZnVuY3Rpb24gaW4gcmVxdWVzdC1kYXRhIGZvciBjYWxsaW5nIHRoZSBiYWNrZW5kCiAgICAgICAgICAgICAgIHRvIGdldCB0aGUgbWV0cmljcyBkYXRhLgogICAgICAgICAgICAtLT4KICAgICAgICAgIDx0Zi1zY2FsYXItY2FyZAogICAgICAgICAgICBjbGFzcz0ic2NhbGFyLWNhcmQiCiAgICAgICAgICAgIGNvbG9yLXNjYWxlPSJbW19jb2xvclNjYWxlXV0iCiAgICAgICAgICAgIGRhdGEtdG8tbG9hZD0iW1tfY29tcHV0ZVNlcmllc0ZvclNlc3Npb25Hcm91cE1ldHJpYyhzZXNzaW9uR3JvdXAsIG1ldHJpY0luZm8pXV0iCiAgICAgICAgICAgIHRhZz0iW1ttZXRyaWNJbmZvLm5hbWUudGFnXV0iCiAgICAgICAgICAgIHRhZy1tZXRhZGF0YT0iW1tfY29tcHV0ZVRhZ01ldGFkYXRhKG1ldHJpY0luZm8pXV0iCiAgICAgICAgICAgIHgtdHlwZT0iW1tfeFR5cGVdXSIKICAgICAgICAgICAgbXVsdGktZXhwZXJpbWVudHM9IltbX25vTXVsdGlFeHBlcmltZW50c11dIgogICAgICAgICAgICByZXF1ZXN0LWRhdGE9IltbX3JlcXVlc3REYXRhXV0iCiAgICAgICAgICAgIGFjdGl2ZQogICAgICAgICAgPgogICAgICAgICAgPC90Zi1zY2FsYXItY2FyZD4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CiAgICA8IS0tICJpcm9uLWZsZXgiIGlzIG5lZWRlZCB0byB1c2UgdGhlIGxheW91dCBjbGFzc2VzIGluIHRoZSBkaXYgYWJvdmUgLS0+CiAgICA8c3R5bGUgaW5jbHVkZT0iaXJvbi1mbGV4Ij4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICA8L3N0eWxlPgogIGAsdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sS050LnByb3RvdHlwZSwiYmFja2VuZCIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxLTnQucHJvdG90eXBlLCJleHBlcmltZW50TmFtZSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxLTnQucHJvdG90eXBlLCJ2aXNpYmxlU2NoZW1hIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLEtOdC5wcm90b3R5cGUsInNlc3Npb25Hcm91cCIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxLTnQucHJvdG90eXBlLCJfeFR5cGUiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxLTnQucHJvdG90eXBlLCJfbm9NdWx0aUV4cGVyaW1lbnRzIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLEtOdC5wcm90b3R5cGUsIl9pbmRleE9mU2Vzc2lvbiIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxLTnQucHJvdG90eXBlLCJfc2Vzc2lvbkdyb3VwTmFtZUhhc2giLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pXSxLTnQucHJvdG90eXBlLCJfcmVxdWVzdERhdGEiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sS050LnByb3RvdHlwZSwiX2NvbG9yU2NhbGUiLHZvaWQgMCksdChbYSgic2Vzc2lvbkdyb3VwLioiKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEtOdC5wcm90b3R5cGUsIl9zZXNzaW9uR3JvdXBDaGFuZ2VkIixudWxsKSxLTnQ9dChbaSgidGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLWRldGFpbHMiKV0sS050KTtsZXQgWk50PWNsYXNzIGV4dGVuZHModHIobmwoeWUpKSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2hwYXJhbU5hbWU9Wkx0LHRoaXMuX21ldHJpY05hbWU9Skx0fV92aXNpYmxlU2NoZW1hT3JTZXNzaW9uR3JvdXBzQ2hhbmdlZCgpe2NvbnN0IHQ9dGhpcy4kLnNlc3Npb25Hcm91cHNUYWJsZS5nZXQoImRldGFpbHNPcGVuZWRJdGVtcyIpO3RoaXMuJC5zZXNzaW9uR3JvdXBzVGFibGUuc2V0KCJkZXRhaWxzT3BlbmVkSXRlbXMiLFtdKSx6aSgpO2NvbnN0IGU9bmV3IE1hcDt0aGlzLnNlc3Npb25Hcm91cHMuZm9yRWFjaCgodD0+e2Uuc2V0KHQubmFtZSx0KX0pKSx0aGlzLiQuc2Vzc2lvbkdyb3Vwc1RhYmxlLnNldCgiZGV0YWlsc09wZW5lZEl0ZW1zIix0Lm1hcCgodD0+ZS5nZXQodC5uYW1lKSkpLmZpbHRlcihCb29sZWFuKSl9X3Nlc3Npb25Hcm91cEhQYXJhbSh0LGUpe3JldHVybiBudWxsIT10JiYwIT1PYmplY3Qua2V5cyh0KS5sZW5ndGgmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LmhwYXJhbXMsZSk/X1B0KHQuaHBhcmFtc1tlXSk6IiJ9X3Nlc3Npb25Hcm91cE1ldHJpYyh0LGUpe2lmKG51bGw9PXR8fDA9PU9iamVjdC5rZXlzKHQpLmxlbmd0aClyZXR1cm4iIjtmb3IobGV0IG49MDtuPHQubWV0cmljVmFsdWVzLmxlbmd0aDsrK24pe2xldCBpPXQubWV0cmljVmFsdWVzW25dO2lmKGkubmFtZS5ncm91cD09PWUuZ3JvdXAmJmkubmFtZS50YWc9PWUudGFnKXJldHVybiBfUHQoaS52YWx1ZSl9cmV0dXJuIiJ9X3Jvd051bWJlcih0KXtyZXR1cm4gdCsxfX07Wk50LnRlbXBsYXRlPV9lYAogICAgPHZhYWRpbi1ncmlkCiAgICAgIGNsYXNzPSJzZXNzaW9uLWdyb3VwLXRhYmxlIgogICAgICBpZD0ic2Vzc2lvbkdyb3Vwc1RhYmxlIgogICAgICBjb2x1bW4tcmVvcmRlcmluZy1hbGxvd2VkPSIiCiAgICAgIGl0ZW1zPSJbW3Nlc3Npb25Hcm91cHNdXSIKICAgID4KICAgICAgPHZhYWRpbi1ncmlkLWNvbHVtbiBmbGV4LWdyb3c9IjAiIHdpZHRoPSIxMGVtIiByZXNpemFibGU9IiI+CiAgICAgICAgPHRlbXBsYXRlIGNsYXNzPSJoZWFkZXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0idGFibGUtaGVhZGVyIHRhYmxlLWNlbGwiPlRyaWFsIElEPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1jZWxsIj5bW2l0ZW0ubmFtZV1dPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC92YWFkaW4tZ3JpZC1jb2x1bW4+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tlbmFibGVTaG93TWV0cmljc11dIj4KICAgICAgICA8dmFhZGluLWdyaWQtY29sdW1uIGZsZXgtZ3Jvdz0iMCIgYXV0b1dpZHRoPSIiIHJlc2l6YWJsZT0iIj4KICAgICAgICAgIDx0ZW1wbGF0ZSBjbGFzcz0iaGVhZGVyIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idGFibGUtaGVhZGVyIHRhYmxlLWNlbGwiPlNob3cgTWV0cmljczwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94IGNsYXNzPSJ0YWJsZS1jZWxsIiBjaGVja2VkPSJ7e2RldGFpbHNPcGVuZWR9fSI+CiAgICAgICAgICAgIDwvcGFwZXItY2hlY2tib3g+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvdmFhZGluLWdyaWQtY29sdW1uPgogICAgICA8L3RlbXBsYXRlPgogICAgICA8dGVtcGxhdGUKICAgICAgICBpcz0iZG9tLXJlcGVhdCIKICAgICAgICBpdGVtcz0iW1t2aXNpYmxlU2NoZW1hLmhwYXJhbUluZm9zXV0iCiAgICAgICAgYXM9ImhwYXJhbUluZm8iCiAgICAgICAgaW5kZXgtYXM9ImhwYXJhbUluZGV4IgogICAgICA+CiAgICAgICAgPHZhYWRpbi1ncmlkLWNvbHVtbiBmbGV4LWdyb3c9IjIiIHdpZHRoPSIxMGVtIiByZXNpemFibGU9IiI+CiAgICAgICAgICA8dGVtcGxhdGUgY2xhc3M9ImhlYWRlciI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhYmxlLWhlYWRlciB0YWJsZS1jZWxsIj4KICAgICAgICAgICAgICBbW19ocGFyYW1OYW1lKGhwYXJhbUluZm8pXV0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1jZWxsIj4KICAgICAgICAgICAgICBbW19zZXNzaW9uR3JvdXBIUGFyYW0oaXRlbSwgaHBhcmFtSW5mby5uYW1lKV1dCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3ZhYWRpbi1ncmlkLWNvbHVtbj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHRlbXBsYXRlCiAgICAgICAgaXM9ImRvbS1yZXBlYXQiCiAgICAgICAgaXRlbXM9Int7dmlzaWJsZVNjaGVtYS5tZXRyaWNJbmZvc319IgogICAgICAgIGFzPSJtZXRyaWNJbmZvIgogICAgICAgIGluZGV4LWFzPSJtZXRyaWNJbmRleCIKICAgICAgPgogICAgICAgIDx2YWFkaW4tZ3JpZC1jb2x1bW4gZmxleC1ncm93PSIyIiB3aWR0aD0iMTBlbSIgcmVzaXphYmxlPSIiPgogICAgICAgICAgPHRlbXBsYXRlIGNsYXNzPSJoZWFkZXIiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1oZWFkZXIgdGFibGUtY2VsbCI+CiAgICAgICAgICAgICAgW1tfbWV0cmljTmFtZShtZXRyaWNJbmZvKV1dCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idGFibGUtY2VsbCI+CiAgICAgICAgICAgICAgW1tfc2Vzc2lvbkdyb3VwTWV0cmljKGl0ZW0sIG1ldHJpY0luZm8ubmFtZSldXQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC92YWFkaW4tZ3JpZC1jb2x1bW4+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZSBjbGFzcz0icm93LWRldGFpbHMiPgogICAgICAgIDx0Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtZGV0YWlscwogICAgICAgICAgYmFja2VuZD0iW1tiYWNrZW5kXV0iCiAgICAgICAgICBleHBlcmltZW50LW5hbWU9IltbZXhwZXJpbWVudE5hbWVdXSIKICAgICAgICAgIHNlc3Npb24tZ3JvdXA9IltbaXRlbV1dIgogICAgICAgICAgdmlzaWJsZS1zY2hlbWE9IltbdmlzaWJsZVNjaGVtYV1dIgogICAgICAgICAgY2xhc3M9InNlc3Npb24tZ3JvdXAtZGV0YWlscyIKICAgICAgICA+CiAgICAgICAgPC90Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtZGV0YWlscz4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvdmFhZGluLWdyaWQ+CgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lOwogICAgICB9CgogICAgICA6aG9zdCguZGFyay1tb2RlKSB7CiAgICAgICAgLS1sdW1vLWJhc2UtY29sb3I6ICMzMDMwMzA7CiAgICAgICAgLS1sdW1vLWJvZHktdGV4dC1jb2xvcjogI2ZmZjsKICAgICAgfQoKICAgICAgOmhvc3QoLmRhcmstbW9kZSkgdmFhZGluLWdyaWQgewogICAgICAgIC0tX2x1bW8tZ3JpZC1zZWNvbmRhcnktYm9yZGVyLWNvbG9yOiAjNTA1MDUwOwogICAgICB9CgogICAgICAudGFibGUtY2VsbCB7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CiAgICAgIC50YWJsZS1oZWFkZXIgewogICAgICAgIC8qIGxpbmUtYnJlYWsgb3ZlcmZsb3dpbmcgY29sdW1uIGhlYWRlcnMgKi8KICAgICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOwogICAgICAgIG92ZXJmbG93LXdyYXA6IGJyZWFrLXdvcmQ7CiAgICAgIH0KICAgICAgLnNlc3Npb24tZ3JvdXAtdGFibGUgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQogICAgICAuc2Vzc2lvbi1ncm91cC1kZXRhaWxzIHsKICAgICAgICBoZWlnaHQ6IDM2MHB4OwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYCx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxaTnQucHJvdG90eXBlLCJ2aXNpYmxlU2NoZW1hIix2b2lkIDApLHQoW28oe3R5cGU6QXJyYXl9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSxaTnQucHJvdG90eXBlLCJzZXNzaW9uR3JvdXBzIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sWk50LnByb3RvdHlwZSwiZW5hYmxlU2hvd01ldHJpY3MiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sWk50LnByb3RvdHlwZSwiYmFja2VuZCIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxaTnQucHJvdG90eXBlLCJleHBlcmltZW50TmFtZSIsdm9pZCAwKSx0KFthKCJ2aXNpYmxlU2NoZW1hLioiLCJzZXNzaW9uR3JvdXBzLioiKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFpOdC5wcm90b3R5cGUsIl92aXNpYmxlU2NoZW1hT3JTZXNzaW9uR3JvdXBzQ2hhbmdlZCIsbnVsbCksWk50PXQoW2koInRmLWhwYXJhbXMtdGFibGUtdmlldyIpXSxaTnQpO2xldCBKTnQ9Y2xhc3MgZXh0ZW5kcyB5ZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5zZXNzaW9uR3JvdXA9bnVsbCx0aGlzLnZpc2libGVTY2hlbWE9bnVsbH1fcHJvcGVydGllc0FyZVBvcHVsYXRlZCh0LGUpe3JldHVybiBudWxsIT10JiZudWxsIT1lfV9zaW5nbGV0b25TZXNzaW9uR3JvdXBzKHQpe3JldHVybiBudWxsPT10P1tdOlt0XX19O2Z1bmN0aW9uIFFOdCh0LGUsbil7ZnVuY3Rpb24gaSgpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm5bMSwyXTtjb25zdFtlLG5dPWtsKHQpO3JldHVybiBlIT09bj9bZSxuXTplPjA/Wy41KmUsMS41KmVdOmU8MD9bMS41KmUsLjUqZV06Wy0xLDFdfWlmKCJMSU5FQVIiPT09bilyZXR1cm4gRE0oKS5kb21haW4oaSgpKS5yYW5nZShbZSwwXSk7aWYoIkxPRyI9PT1uKXtjb25zdCBuPWkoKTtyZXR1cm4gblswXTw9MCYmblsxXT49MD9RTnQodCxlLCJMSU5FQVIiKTpxTSgpLmRvbWFpbihuKS5yYW5nZShbZSwwXSl9aWYoIlFVQU5USUxFIj09PW4pe2NvbnN0IG49MjAsaT1SbChuKS5tYXAoKHQ9PmUtdCplLyhuLTEpKSk7cmV0dXJuIDA9PT10Lmxlbmd0aCYmKHQ9WzFdKSxlRSgpLmRvbWFpbih3ZS51bmlxKHQpKS5yYW5nZShpKX1pZigiTk9OX05VTUVSSUMiPT09bilyZXR1cm4gTU0oKS5kb21haW4od2UudW5pcSh0LnNvcnQoKSkpLnJhbmdlKFtlLDBdKS5wYWRkaW5nKC4xKTt0aHJvdyBSYW5nZUVycm9yKCJVbmtub3duIHNjYWxlOiAiK24pfXZhciB0SXQsZUl0O0pOdC50ZW1wbGF0ZT1fZWAKICAgIDwhLS0gSWYgc2Vzc2lvbkdyb3VwIG9yIHZpc2libGVTY2hlbWEgYXJlIG5vdCBwb3B1bGF0ZWQsIGRvIG5vdCBkaXNwbGF5CiAgICAgICAgIGFueXRoaW5nLgogICAgICAtLT4KICAgIDx0ZW1wbGF0ZQogICAgICBpcz0iZG9tLWlmIgogICAgICBpZj0iW1tfcHJvcGVydGllc0FyZVBvcHVsYXRlZCh2aXNpYmxlU2NoZW1hLCBzZXNzaW9uR3JvdXApXV0iCiAgICA+CiAgICAgIDwhLS0gRGlzcGxheSBvbmUgcm93IHdpdGhvdXQgYSAic2hvdy1tZXRyaWNzIiBjb2x1bW4gLS0+CiAgICAgIDx0Zi1ocGFyYW1zLXRhYmxlLXZpZXcKICAgICAgICB2aXNpYmxlLXNjaGVtYT0iW1t2aXNpYmxlU2NoZW1hXV0iCiAgICAgICAgc2Vzc2lvbi1ncm91cHM9IltbX3NpbmdsZXRvblNlc3Npb25Hcm91cHMoc2Vzc2lvbkdyb3VwKV1dIgogICAgICA+CiAgICAgIDwvdGYtaHBhcmFtcy10YWJsZS12aWV3PgogICAgPC90ZW1wbGF0ZT4KICAgIDx0ZW1wbGF0ZQogICAgICBpcz0iZG9tLWlmIgogICAgICBpZj0iW1shX3Byb3BlcnRpZXNBcmVQb3B1bGF0ZWQodmlzaWJsZVNjaGVtYSwgc2Vzc2lvbkdyb3VwKV1dIgogICAgPgogICAgICA8ZGl2PkNsaWNrIG9yIGhvdmVyIG92ZXIgYSBzZXNzaW9uIGdyb3VwIHRvIGRpc3BsYXkgaXRzIHZhbHVlcyBoZXJlLjwvZGl2PgogICAgPC90ZW1wbGF0ZT4KCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgPC9zdHlsZT4KICBgLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLEpOdC5wcm90b3R5cGUsInNlc3Npb25Hcm91cCIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxKTnQucHJvdG90eXBlLCJ2aXNpYmxlU2NoZW1hIix2b2lkIDApLEpOdD10KFtpKCJ0Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtdmFsdWVzIildLEpOdCksKGZ1bmN0aW9uKHQpe3QuTElORUFSPSJMSU5FQVIiLHQuTE9HPSJMT0ciLHQuUVVBTlRJTEU9IlFVQU5USUxFIix0Lk5PTl9OVU1FUklDPSJOT05fTlVNRVJJQyJ9KSh0SXR8fCh0SXQ9e30pKTtjbGFzcyBuSXR7aXNQYXNzaW5nKHQpe3JldHVybiEwfX1jbGFzcyBpSXR7Y29uc3RydWN0b3IodCxlLG4saSl7dGhpcy5fbG93ZXI9dCx0aGlzLl91cHBlcj1lLHRoaXMuX2xvd2VyT3Blbj1uLHRoaXMuX3VwcGVyT3Blbj1pfWlzUGFzc2luZyh0KXtjb25zdCBlPXQ7cmV0dXJuIHRoaXMuX2JlZm9yZSh0aGlzLl9sb3dlcixlLCF0aGlzLl9sb3dlck9wZW4pJiZ0aGlzLl9iZWZvcmUoZSx0aGlzLl91cHBlciwhdGhpcy5fdXBwZXJPcGVuKX1fYmVmb3JlKHQsZSxuKXtyZXR1cm4gbj90PD1lOnQ8ZX19Y2xhc3Mgckl0e2NvbnN0cnVjdG9yKHQpe3RoaXMuX2RvbWFpblNldD10fWlzUGFzc2luZyh0KXtyZXR1cm4tMSE9PXRoaXMuX2RvbWFpblNldC5maW5kSW5kZXgoKGU9PmU9PT10KSl9fWNsYXNzIG9JdHtjb25zdHJ1Y3Rvcih0LGUsbixpKXt0aGlzLl9zdmdQcm9wcz10LHRoaXMuX3NjaGVtYT1lLHRoaXMuX2ludGVyYWN0aW9uTWFuYWdlcj1uLHRoaXMuX2NvbEluZGV4PWksdGhpcy5faXNEaXNwbGF5ZWQ9ITEsdGhpcy5feVNjYWxlPW51bGwsdGhpcy5fc2NhbGVUeXBlPW51bGwsdGhpcy5zZXRCcnVzaFNlbGVjdGlvbihudWxsKX1jb2xJbmRleCgpe3JldHVybiB0aGlzLl9jb2xJbmRleH15U2NhbGUoKXtyZXR1cm4gdGhpcy5feVNjYWxlfXNjYWxlVHlwZSgpe3JldHVybiB0aGlzLl9zY2FsZVR5cGV9YnJ1c2hTZWxlY3Rpb24oKXtyZXR1cm4gdGhpcy5fYnJ1c2hTZWxlY3Rpb259aXNEaXNwbGF5ZWQoKXtyZXR1cm4gdGhpcy5faXNEaXNwbGF5ZWR9c2V0QnJ1c2hTZWxlY3Rpb24odCl7dGhpcy5fYnJ1c2hTZWxlY3Rpb249dCx0aGlzLl9icnVzaEZpbHRlcj10aGlzLl9idWlsZEJydXNoRmlsdGVyKHRoaXMuYnJ1c2hTZWxlY3Rpb24oKSx0aGlzLnNjYWxlVHlwZSgpLHRoaXMueVNjYWxlKCkpfXNldERvbWFpbkFuZFNjYWxlKHQsZSl7dGhpcy5fc2NhbGVUeXBlPWUsdGhpcy5feVNjYWxlPVFOdCh0LnNsaWNlKCksdGhpcy5fc3ZnUHJvcHMuaGVpZ2h0LHRoaXMuc2NhbGVUeXBlKCkpLHRoaXMuX2JydXNoRmlsdGVyPXRoaXMuX2J1aWxkQnJ1c2hGaWx0ZXIodGhpcy5icnVzaFNlbGVjdGlvbigpLHRoaXMuc2NhbGVUeXBlKCksdGhpcy55U2NhbGUoKSl9YnJ1c2hGaWx0ZXIoKXtyZXR1cm4gdGhpcy5fYnJ1c2hGaWx0ZXJ9dXBkYXRlRE9NKHQpe2xldCBlPW9jKHRoaXMueVNjYWxlKCkpO3RoaXMuc2NhbGVUeXBlKCk9PT10SXQuUVVBTlRJTEUmJihlPWUudGlja1ZhbHVlcyh0aGlzLnlTY2FsZSgpLnF1YW50aWxlcygpKS50aWNrRm9ybWF0KGZ5KCItLjZnIikpKTtjb25zdCBuPXd1KHQpO24uc2VsZWN0QWxsKCJnIikucmVtb3ZlKCksbi5hcHBlbmQoImciKS5jbGFzc2VkKCJheGlzIiwhMCkuY2FsbChlKS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKCJheGlzLXRpdGxlIiwhMCkuc3R5bGUoImN1cnNvciIsIm1vdmUiKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJ5IiwtOSkudGV4dCgodD0+UUx0KHRoaXMuX3NjaGVtYSx0KSkpLG4uY2FsbCh5aCgpLm9uKCJzdGFydCIsKCgpPT57dC5zZXRBdHRyaWJ1dGUoImlzLWRyYWdnaW5nIiwiIiksdGhpcy5faW50ZXJhY3Rpb25NYW5hZ2VyLm9uRHJhZ1N0YXJ0KHRoaXMuY29sSW5kZXgoKSl9KSkub24oImRyYWciLCgoKT0+dGhpcy5faW50ZXJhY3Rpb25NYW5hZ2VyLm9uRHJhZyhjdS54KSkpLm9uKCJlbmQiLCgoKT0+e3RoaXMuX2ludGVyYWN0aW9uTWFuYWdlci5vbkRyYWdFbmQoKSx0LnJlbW92ZUF0dHJpYnV0ZSgiaXMtZHJhZ2dpbmciKX0pKSk7Y29uc3QgaT1LbSgpLmV4dGVudChbWy04LDBdLFs4LHRoaXMuX3N2Z1Byb3BzLmhlaWdodCsxXV0pLm9uKCJzdGFydCIsKCgpPT57c0l0KGN1KSYmKHQuc2V0QXR0cmlidXRlKCJpcy1icnVzaGluZyIsIiIpLHRoaXMuX2ludGVyYWN0aW9uTWFuYWdlci5vbkJydXNoQ2hhbmdlZCh0aGlzLmNvbEluZGV4KCksY3Uuc2VsZWN0aW9uKSl9KSkub24oImJydXNoIiwoKCk9PntzSXQoY3UpJiZ0aGlzLl9pbnRlcmFjdGlvbk1hbmFnZXIub25CcnVzaENoYW5nZWQodGhpcy5jb2xJbmRleCgpLGN1LnNlbGVjdGlvbil9KSkub24oImVuZCIsKCgpPT57c0l0KGN1KSYmKHRoaXMuX2ludGVyYWN0aW9uTWFuYWdlci5vbkJydXNoQ2hhbmdlZCh0aGlzLmNvbEluZGV4KCksY3Uuc2VsZWN0aW9uKSx0LnJlbW92ZUF0dHJpYnV0ZSgiaXMtYnJ1c2hpbmciKSl9KSkscj13dSh0KS5hcHBlbmQoImciKS5jbGFzc2VkKCJicnVzaCIsITApO3IuY2FsbChpKSxpLm1vdmUocix0aGlzLmJydXNoU2VsZWN0aW9uKCkpfXNldERpc3BsYXllZCh0KXt0aGlzLl9pc0Rpc3BsYXllZD10fV9idWlsZEJydXNoRmlsdGVyKHQsZSxuKXtpZihudWxsPT09dClyZXR1cm4gbmV3IG5JdDtpZihudWxsPT09ZSlyZXR1cm4gY29uc29sZS5lcnJvcigiU2NhbGUgdHlwZSBpcyBudWxsLCBidXQgYnJ1c2hTZWxlY3Rpb24gaXNuJ3Q6ICIsdCksbmV3IG5JdDtzd2l0Y2goZSl7Y2FzZSB0SXQuTElORUFSOmNhc2UgdEl0LkxPRzp7Y29uc3RbZSxpXT0oZnVuY3Rpb24gaSh0LGUsbil7cmV0dXJuW3QuaW52ZXJ0KGUpLHQuaW52ZXJ0KG4pXS5zb3J0KCgodCxlKT0+dC1lKSl9KShuLHRbMF0sdFsxXSk7cmV0dXJuIG5ldyBpSXQoZSxpLCExLCExKX1jYXNlIHRJdC5RVUFOVElMRTp7Y29uc3RbZSxpXT0oZnVuY3Rpb24gcih0LGUsbil7Y29uc3QgaT10LnJhbmdlKCkscj1pLmZpbHRlcigodD0+ZTw9dCYmdDw9bikpLm1hcCgoZT0+e2NvbnN0IG49dC5pbnZlcnRFeHRlbnQoZSk7cmV0dXJuIGU9PT1pW2kubGVuZ3RoLTFdP1tuWzBdLG5bMV0rMV06bn0pKTtyZXR1cm4gMD09ci5sZW5ndGg/WzAsMF06a2woV2wocikpfSkobix0WzBdLHRbMV0pO3JldHVybiBuZXcgaUl0KGUsaSwhMSwhMCl9Y2FzZSB0SXQuTk9OX05VTUVSSUM6cmV0dXJuIG5ldyBySXQoKGZ1bmN0aW9uIG8odCxlLG4pe3JldHVybiB0LmRvbWFpbigpLmZpbHRlcigoaT0+e2NvbnN0IHI9dChpKTtyZXR1cm4gZTw9ciYmcjw9bn0pKX0pKG4sdFswXSx0WzFdKSl9cmV0dXJuIGNvbnNvbGUuZXJyb3IoIlVua25vd24gc2NhbGUgdHlwZTogIixlKSxuZXcgbkl0fX1jbGFzcyBhSXR7Y29uc3RydWN0b3IodCxlLG4pe3RoaXMuX3N2Z1Byb3BzPXQsdGhpcy5fc2NoZW1hPWUsdGhpcy5fYXhlcz10aGlzLl9jcmVhdGVBeGVzKG4pLHRoaXMuX3N0YXRpb25hcnlBeGVzUG9zaXRpb25zPU1NKCkucmFuZ2UoWzEsdGhpcy5fc3ZnUHJvcHMud2lkdGgtMV0pLnBhZGRpbmcoLjUpLHRoaXMuX2RyYWdnZWRBeGlzPW51bGwsdGhpcy5fc3ZnUHJvcHMuc3ZnRy5zZWxlY3RBbGwoImcuYXhpcy1wYXJlbnQiKS5yZW1vdmUoKSx0aGlzLl9wYXJlbnRzU2VsPXRoaXMuX3N2Z1Byb3BzLnN2Z0cuc2VsZWN0QWxsKCIuYXhpcy1wYXJlbnQiKX11cGRhdGVBeGVzKHQsZSl7Y29uc29sZS5hc3NlcnQoIXRoaXMuaXNBeGlzRHJhZ2dpbmcoKSk7Y29uc3Qgbj1uZXcgU2V0O3QuY29sdW1ucy5mb3JFYWNoKCh0PT57Y29uc3QgaT10LmFic29sdXRlSW5kZXg7bGV0IHI9dGhpcy5fYXhlc1tpXTtyLnNldERpc3BsYXllZCghMCk7Y29uc3Qgbz1lLm1hcCgodD0+c1B0KHRoaXMuX3NjaGVtYSx0LGkpKSk7ci5zZXREb21haW5BbmRTY2FsZShvLHQuc2NhbGUpLG4uYWRkKGkpfSkpLHRoaXMuX2F4ZXMuZm9yRWFjaCgodD0+e24uaGFzKHQuY29sSW5kZXgoKSl8fHQuc2V0RGlzcGxheWVkKCExKX0pKSx0aGlzLl91cGRhdGVTdGF0aW9uYXJ5QXhlc1Bvc2l0aW9ucyhuKSx0aGlzLl9wYXJlbnRzU2VsPXRoaXMuX3BhcmVudHNTZWwuZGF0YShBcnJheS5mcm9tKG4pLCh0PT50KSksdGhpcy5fcGFyZW50c1NlbC5leGl0KCkucmVtb3ZlKCksdGhpcy5fcGFyZW50c1NlbD10aGlzLl9wYXJlbnRzU2VsLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiYXhpcy1wYXJlbnQiLCEwKS5tZXJnZSh0aGlzLl9wYXJlbnRzU2VsKTtjb25zdCBpPXRoaXM7dGhpcy5fcGFyZW50c1NlbC5jYWxsKCh0PT50aGlzLl91cGRhdGVBeGVzUG9zaXRpb25zSW5ET00odCkpKS5lYWNoKChmdW5jdGlvbih0KXtpLl9heGVzW3RdLnVwZGF0ZURPTSh0aGlzKX0pKX1tYXBWaXNpYmxlQXhlcyh0KXtyZXR1cm4gdGhpcy5fc3RhdGlvbmFyeUF4ZXNQb3NpdGlvbnMuZG9tYWluKCkubWFwKChlPT50KHRoaXMuZ2V0QXhpc1Bvc2l0aW9uKGUpLHRoaXMuX2F4ZXNbZV0pKSl9YWxsVmlzaWJsZUF4ZXNTYXRpc2Z5KHQpe3JldHVybiB0aGlzLl9zdGF0aW9uYXJ5QXhlc1Bvc2l0aW9ucy5kb21haW4oKS5ldmVyeSgoZT0+dCh0aGlzLmdldEF4aXNQb3NpdGlvbihlKSx0aGlzLl9heGVzW2VdKSkpfWdldEF4aXNGb3JDb2xJbmRleCh0KXtyZXR1cm4gdGhpcy5fYXhlc1t0XX1kcmFnU3RhcnQodCl7Y29uc29sZS5hc3NlcnQoIXRoaXMuaXNBeGlzRHJhZ2dpbmcoKSksY29uc29sZS5hc3NlcnQodGhpcy5fYXhlc1t0XS5pc0Rpc3BsYXllZCgpKSx0aGlzLl9kcmFnZ2VkQXhpcz10aGlzLl9heGVzW3RdLHRoaXMuX2RyYWdnZWRBeGlzUG9zaXRpb249dGhpcy5fc3RhdGlvbmFyeUF4ZXNQb3NpdGlvbnModCl9ZHJhZyh0KXt0PU1hdGgubWluKE1hdGgubWF4KHQsMCksdGhpcy5fc3ZnUHJvcHMud2lkdGgpLHRoaXMuX2RyYWdnZWRBeGlzUG9zaXRpb249dDtsZXQgZT10aGlzLl9zdGF0aW9uYXJ5QXhlc1Bvc2l0aW9ucy5kb21haW4oKTtlLnNvcnQoKCh0LGUpPT50aGlzLmdldEF4aXNQb3NpdGlvbih0KS10aGlzLmdldEF4aXNQb3NpdGlvbihlKSkpLHRoaXMuX3N0YXRpb25hcnlBeGVzUG9zaXRpb25zLmRvbWFpbihlKSx0aGlzLl91cGRhdGVBeGVzUG9zaXRpb25zSW5ET00odGhpcy5fcGFyZW50c1NlbCl9ZHJhZ0VuZCh0KXtjb25zb2xlLmFzc2VydCh0aGlzLmlzQXhpc0RyYWdnaW5nKCkpLHRoaXMuX2RyYWdnZWRBeGlzUG9zaXRpb249bnVsbCx0aGlzLl9kcmFnZ2VkQXhpcz1udWxsLHRoaXMuX3VwZGF0ZUF4ZXNQb3NpdGlvbnNJbkRPTSh0aGlzLl9wYXJlbnRzU2VsLnRyYW5zaXRpb24oKS5kdXJhdGlvbih0KSl9aXNBeGlzRHJhZ2dpbmcoKXtyZXR1cm4gbnVsbCE9PXRoaXMuX2RyYWdnZWRBeGlzfWdldEF4aXNQb3NpdGlvbih0KXtyZXR1cm4gbnVsbCE9PXRoaXMuX2RyYWdnZWRBeGlzJiZ0aGlzLl9kcmFnZ2VkQXhpcy5jb2xJbmRleCgpPT09dD90aGlzLl9kcmFnZ2VkQXhpc1Bvc2l0aW9uOnRoaXMuX3N0YXRpb25hcnlBeGVzUG9zaXRpb25zKHQpfV91cGRhdGVTdGF0aW9uYXJ5QXhlc1Bvc2l0aW9ucyh0KXtjb25zdCBlPXRoaXMuX3N0YXRpb25hcnlBeGVzUG9zaXRpb25zLmRvbWFpbigpLmZpbHRlcigoZT0+dC5oYXMoZSkpKSxuPUFycmF5LmZyb20obmV3IFNldChbLi4uZSwuLi5BcnJheS5mcm9tKHQpXSkpO3RoaXMuX3N0YXRpb25hcnlBeGVzUG9zaXRpb25zLmRvbWFpbihuKX1fdXBkYXRlQXhlc1Bvc2l0aW9uc0luRE9NKHQpe3QuYXR0cigidHJhbnNmb3JtIiwodD0+eFB0KHRoaXMuZ2V0QXhpc1Bvc2l0aW9uKHQpKSkpfV9jcmVhdGVBeGVzKHQpe3JldHVybiBSbChuUHQodGhpcy5fc2NoZW1hKSkubWFwKChlPT5uZXcgb0l0KHRoaXMuX3N2Z1Byb3BzLHRoaXMuX3NjaGVtYSx0LGUpKSl9fWZ1bmN0aW9uIHNJdCh0KXtyZXR1cm4gbnVsbCE9PXQuc291cmNlRXZlbnR9IShmdW5jdGlvbih0KXt0W3QuRk9SRUdST1VORD0wXT0iRk9SRUdST1VORCIsdFt0LkJBQ0tHUk9VTkQ9MV09IkJBQ0tHUk9VTkQifSkoZUl0fHwoZUl0PXt9KSk7Y2xhc3MgbEl0e2NvbnN0cnVjdG9yKHQpe3ZvaWQgMD09PXQmJih0PWFoKG51bGwpKSxjb25zb2xlLmFzc2VydCh0LnNpemUoKTw9MSksdGhpcy5fc2Vzc2lvbkdyb3VwU2VsPXR9c2Vzc2lvbkdyb3VwKCl7cmV0dXJuIDE9PT10aGlzLl9zZXNzaW9uR3JvdXBTZWwuc2l6ZSgpP3RoaXMuX3Nlc3Npb25Hcm91cFNlbC5kYXR1bSgpOm51bGx9aXNOdWxsKCl7cmV0dXJuIG51bGw9PT10aGlzLnNlc3Npb25Hcm91cCgpfXNlbGVjdGlvbigpe3JldHVybiB0aGlzLl9zZXNzaW9uR3JvdXBTZWx9ZXF1YWxzVG8odCl7cmV0dXJuIHRoaXMuaXNOdWxsKCk/dC5pc051bGwoKTohdC5pc051bGwoKSYmdC5zZXNzaW9uR3JvdXAoKS5uYW1lPT10aGlzLnNlc3Npb25Hcm91cCgpLm5hbWV9fWNsYXNzIGNJdHtjb25zdHJ1Y3Rvcih0LGUsbil7dGhpcy5fc3ZnUHJvcHM9dCx0aGlzLl9zY2hlbWE9ZSx0aGlzLl9heGVzQ29sbGVjdGlvbj1uLHRoaXMuX3Nlc3Npb25Hcm91cHM9W10sdGhpcy5fc3ZnUHJvcHMuc3ZnRy5zZWxlY3RBbGwoImcuYmFja2dyb3VuZCIpLnJlbW92ZSgpLHRoaXMuX3N2Z1Byb3BzLnN2Z0cuc2VsZWN0QWxsKCJnLmZvcmVncm91bmQiKS5yZW1vdmUoKSx0aGlzLl9iZ1BhdGhzU2VsPXRoaXMuX3N2Z1Byb3BzLnN2Z0cuYXBwZW5kKCJnIikuY2xhc3NlZCgiYmFja2dyb3VuZCIsITApLnNlbGVjdEFsbCgicGF0aCIpLHRoaXMuX2ZnUGF0aHNTZWw9dGhpcy5fc3ZnUHJvcHMuc3ZnRy5hcHBlbmQoImciKS5jbGFzc2VkKCJmb3JlZ3JvdW5kIiwhMCkuc2VsZWN0QWxsKCJwYXRoIiksdGhpcy5fdXBkYXRlVmlzaWJsZUZnUGF0aHNTZWwoKSx0aGlzLl9wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGU9bmV3IGxJdCx0aGlzLl9zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZT1uZXcgbEl0LHRoaXMuX2QzbGluZT1YaygpLmN1cnZlKFdrKX1nZXRTZXNzaW9uR3JvdXBIYW5kbGUodCl7cmV0dXJuIG51bGw9PXQ/bmV3IGxJdDpuZXcgbEl0KHRoaXMuX2ZnUGF0aHNTZWwuZmlsdGVyKChlPT5lLm5hbWU9PT10Lm5hbWUpKSl9aGlkZUJhY2tncm91bmRMaW5lcygpe3RoaXMuX2JnUGF0aHNTZWwuYXR0cigidmlzaWJpbGl0eSIsImhpZGRlbiIpfXNob3dCYWNrZ3JvdW5kTGluZXMoKXt0aGlzLl9iZ1BhdGhzU2VsLmF0dHIoInZpc2liaWxpdHkiLG51bGwpfXBlYWtlZFNlc3Npb25Hcm91cEhhbmRsZSgpe3JldHVybiB0aGlzLl9wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGV9c2VsZWN0ZWRTZXNzaW9uR3JvdXBIYW5kbGUoKXtyZXR1cm4gdGhpcy5fc2VsZWN0ZWRTZXNzaW9uR3JvdXBIYW5kbGV9cmVjb21wdXRlQ29udHJvbFBvaW50cyh0LGU9MCl7KHQ9PT1lSXQuRk9SRUdST1VORD90aGlzLl9mZ1BhdGhzU2VsOnRoaXMuX2JnUGF0aHNTZWwpLnRyYW5zaXRpb24oKS5kdXJhdGlvbihlKS5hdHRyKCJkIiwodD0+dGhpcy5fcGF0aERBdHRyaWJ1dGUodCkpKSx0PT09ZUl0LkZPUkVHUk9VTkQmJndpbmRvdy5zZXRUaW1lb3V0KCgoKT0+e2NvbnN0IHQ9dGhpczt0aGlzLl9mZ1BhdGhzU2VsLmVhY2goKGZ1bmN0aW9uKGUpe3QuX3NldENvbnRyb2xQb2ludHNQcm9wZXJ0eSh0aGlzLGUpfSkpfSkpfXJlY29tcHV0ZUZvcmVncm91bmRMaW5lc1Zpc2liaWxpdHkoKXt0aGlzLl9mZ1BhdGhzU2VsLmNsYXNzZWQoImludmlzaWJsZS1wYXRoIiwodD0+IXRoaXMuX2F4ZXNDb2xsZWN0aW9uLmFsbFZpc2libGVBeGVzU2F0aXNmeSgoKGUsbik9Pm4uYnJ1c2hGaWx0ZXIoKS5pc1Bhc3Npbmcoc1B0KHRoaXMuX3NjaGVtYSx0LG4uY29sSW5kZXgoKSkpKSkpKSx0aGlzLl91cGRhdGVWaXNpYmxlRmdQYXRoc1NlbCgpfXNldEZvcmVncm91bmRMaW5lc0NvbG9yKHQsZSxuKXtjb25zdCBpPXRoaXMuX2NyZWF0ZUxpbmVDb2xvckZ1bmN0aW9uKHQsZSxuKTt0aGlzLl9mZ1BhdGhzU2VsLmF0dHIoInN0cm9rZSIsaSl9cmVkcmF3KHQsZSxuLGkpe2NvbnN0IHI9dGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlLnNlc3Npb25Hcm91cCgpLG89dGhpcy5fc2VsZWN0ZWRTZXNzaW9uR3JvdXBIYW5kbGUuc2Vzc2lvbkdyb3VwKCk7dGhpcy5fc2Vzc2lvbkdyb3Vwcz10LHRoaXMuX2ZnUGF0aHNTZWw9dGhpcy5fcmVjb21wdXRlUGF0aFNlbGVjdGlvbih0aGlzLl9mZ1BhdGhzU2VsKSx0aGlzLl9iZ1BhdGhzU2VsPXRoaXMuX3JlY29tcHV0ZVBhdGhTZWxlY3Rpb24odGhpcy5fYmdQYXRoc1NlbCksdGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlPXRoaXMuZ2V0U2Vzc2lvbkdyb3VwSGFuZGxlKHIpLHRoaXMuX3NlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlPXRoaXMuZ2V0U2Vzc2lvbkdyb3VwSGFuZGxlKG8pLHRoaXMucmVjb21wdXRlQ29udHJvbFBvaW50cyhlSXQuRk9SRUdST1VORCksdGhpcy5yZWNvbXB1dGVDb250cm9sUG9pbnRzKGVJdC5CQUNLR1JPVU5EKSx0aGlzLnJlY29tcHV0ZUZvcmVncm91bmRMaW5lc1Zpc2liaWxpdHkoKSx0aGlzLnNldEZvcmVncm91bmRMaW5lc0NvbG9yKGUsbixpKX11cGRhdGVQZWFrZWRTZXNzaW9uR3JvdXAodCl7dGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlLnNlbGVjdGlvbigpLmNsYXNzZWQoInBlYWtlZC1wYXRoIiwhMSksdGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlPXQsdGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlLnNlbGVjdGlvbigpLmNsYXNzZWQoInBlYWtlZC1wYXRoIiwhMCl9Y2xlYXJQZWFrZWRTZXNzaW9uR3JvdXAoKXt0aGlzLnVwZGF0ZVBlYWtlZFNlc3Npb25Hcm91cChuZXcgbEl0KX11cGRhdGVTZWxlY3RlZFNlc3Npb25Hcm91cCh0KXt0aGlzLl9zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZS5zZWxlY3Rpb24oKS5jbGFzc2VkKCJzZWxlY3RlZC1wYXRoIiwhMSksdGhpcy5fc2VsZWN0ZWRTZXNzaW9uR3JvdXBIYW5kbGU9dCx0aGlzLl9zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZS5zZWxlY3Rpb24oKS5jbGFzc2VkKCJzZWxlY3RlZC1wYXRoIiwhMCl9ZmluZENsb3Nlc3RTZXNzaW9uR3JvdXAodCxlKXtjb25zdCBuPXRoaXMuX2F4ZXNDb2xsZWN0aW9uLm1hcFZpc2libGVBeGVzKCgodCxlKT0+dCkpLGk9KGZ1bmN0aW9uIHIodCxlLG4saSl7aWYoZS5sZW5ndGg8MilyZXR1cm4gY29uc29sZS5lcnJvcigiTGVzcyB0aGFuIHR3byBheGVzIGluIHBhcmFsbGVsIGNvb3JkaW5hdGVzIHBsb3QuIiksbnVsbDtjb25zdCByPW5bMF0sbz1uWzFdO2lmKHI8PWVbMF18fHI+PWVbZS5sZW5ndGgtMV0pcmV0dXJuIG51bGw7Y29uc3QgYT13ZS5zb3J0ZWRJbmRleChlLHIpO2NvbnNvbGUuYXNzZXJ0KGE+MCksY29uc29sZS5hc3NlcnQoYTxlLmxlbmd0aCk7Y29uc3Qgcz1hLTE7bGV0IGw9bnVsbCxjPW51bGw7cmV0dXJuIHQuZm9yRWFjaCgodD0+e2NvbnN0IGU9KGZ1bmN0aW9uIG4odCxlLGksYSl7Y29uc3Qgcz10LWksbD1lLWEsYz1yLWksdT1vLWEsaD0ocypjK2wqdSkvKHMqcytsKmwpO3JldHVybiBoPD0wP3lQdChjLHUpOmg+PTE/eVB0KHQtcixlLW8pOnlQdChjLWgqcyx1LWgqbCl9KSh0LmNvbnRyb2xQb2ludHNbc11bMF0sdC5jb250cm9sUG9pbnRzW3NdWzFdLHQuY29udHJvbFBvaW50c1thXVswXSx0LmNvbnRyb2xQb2ludHNbYV1bMV0pO2U+aXx8KG51bGw9PT1sfHxlPGwpJiYobD1lLGM9dCl9KSksY30pKHRoaXMuX3Zpc2libGVGZ1BhdGhzU2VsLm5vZGVzKCksbixbdCxlXSwxMDApO3JldHVybiBudWxsPT09aT9uZXcgbEl0Om5ldyBsSXQod3UoaSkpfV9jcmVhdGVMaW5lQ29sb3JGdW5jdGlvbih0LGUsbil7aWYobnVsbD09PXQpcmV0dXJuKCk9PiJyZWQiO2NvbnN0IGk9RE0oKS5kb21haW4obFB0KHRoaXMuX3NjaGVtYSx0aGlzLl9zZXNzaW9uR3JvdXBzLHQpKS5yYW5nZShbZSxuXSkuaW50ZXJwb2xhdGUobHApO3JldHVybiBlPT5pKHNQdCh0aGlzLl9zY2hlbWEsZSx0KSl9X3JlY29tcHV0ZVBhdGhTZWxlY3Rpb24odCl7cmV0dXJuKHQ9dC5kYXRhKHRoaXMuX3Nlc3Npb25Hcm91cHMsKHQ9PnQubmFtZSkpKS5leGl0KCkucmVtb3ZlKCksdC5lbnRlcigpLmFwcGVuZCgicGF0aCIpLm1lcmdlKHQpfV9zZXRDb250cm9sUG9pbnRzUHJvcGVydHkodCxlKXt0LmNvbnRyb2xQb2ludHM9dGhpcy5fY29tcHV0ZUNvbnRyb2xQb2ludHMoZSl9X2NvbXB1dGVDb250cm9sUG9pbnRzKHQpe3JldHVybiB0aGlzLl9heGVzQ29sbGVjdGlvbi5tYXBWaXNpYmxlQXhlcygoKGUsbik9PltlLG4ueVNjYWxlKCkoc1B0KHRoaXMuX3NjaGVtYSx0LG4uY29sSW5kZXgoKSkpXSkpfV9wYXRoREF0dHJpYnV0ZSh0KXtyZXR1cm4gdGhpcy5fZDNsaW5lKHRoaXMuX2NvbXB1dGVDb250cm9sUG9pbnRzKHQpKX1fdXBkYXRlVmlzaWJsZUZnUGF0aHNTZWwoKXt0aGlzLl92aXNpYmxlRmdQYXRoc1NlbD10aGlzLl9mZ1BhdGhzU2VsLmZpbHRlcigiOm5vdCguaW52aXNpYmxlLXBhdGgpIil9fWNsYXNzIHVJdHtjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuc3ZnPXd1KHQpO2NvbnN0IG49MTAwKmUrMTArMTA7dGhpcy5zdmcuYXR0cigidmlld0JveCIsYDAgMCAke259IDI0MGApLHRoaXMuc3ZnLmF0dHIoInByZXNlcnZlQXNwZWN0UmF0aW8iLCJ4TWlkWU1pZCIpLHRoaXMuc3ZnLnN0eWxlKCJtaW4td2lkdGgiLG4rInB4IiksdGhpcy5zdmcuc3R5bGUoIm1pbi1oZWlnaHQiLCIyNDBweCIpLHRoaXMud2lkdGg9bi0xMC0xMCx0aGlzLmhlaWdodD0yMDAsdGhpcy5zdmdHPXRoaXMuc3ZnLmFwcGVuZCgiZyIpLmF0dHIoInRyYW5zZm9ybSIseFB0KDEwLDMwKSl9fWNsYXNzIGhJdHtjb25zdHJ1Y3Rvcih0LGUsbixpKXt0aGlzLl9zdmdQcm9wcz10LHRoaXMuX3NjaGVtYT1lLHRoaXMuX3BlYWtlZFNlc3Npb25Hcm91cENoYW5nZWRDQj1uLHRoaXMuX3NlbGVjdGVkU2Vzc2lvbkdyb3VwQ2hhbmdlZENCPWksdGhpcy5fYXhlc0NvbGxlY3Rpb249bmV3IGFJdCh0LGUsdGhpcyksdGhpcy5fbGluZXNDb2xsZWN0aW9uPW5ldyBjSXQodCxlLHRoaXMuX2F4ZXNDb2xsZWN0aW9uKSx0aGlzLl9zdmdQcm9wcy5zdmcub24oImNsaWNrIiwoKCk9PnRoaXMub25DbGljaygpKSkub24oIm1vdXNlbW92ZSBtb3VzZWVudGVyIiwoKCk9Pntjb25zdFt0LGVdPW9oKHRoaXMuX3N2Z1Byb3BzLnN2Z0cubm9kZSgpKTt0aGlzLm9uTW91c2VNb3ZlZCh0LGUpfSkpLm9uKCJtb3VzZWxlYXZlIiwoKCk9PnRoaXMub25Nb3VzZUxlYXZlKCkpKX1vbkRyYWdTdGFydCh0KXt0aGlzLl9heGVzQ29sbGVjdGlvbi5kcmFnU3RhcnQodCksdGhpcy5fbGluZXNDb2xsZWN0aW9uLmhpZGVCYWNrZ3JvdW5kTGluZXMoKX1vbkRyYWcodCl7dGhpcy5fYXhlc0NvbGxlY3Rpb24uZHJhZyh0KSx0aGlzLl9saW5lc0NvbGxlY3Rpb24ucmVjb21wdXRlQ29udHJvbFBvaW50cyhlSXQuRk9SRUdST1VORCl9b25EcmFnRW5kKCl7dGhpcy5fYXhlc0NvbGxlY3Rpb24uZHJhZ0VuZCg1MDApLHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5yZWNvbXB1dGVDb250cm9sUG9pbnRzKGVJdC5GT1JFR1JPVU5ELDUwMCksd2luZG93LnNldFRpbWVvdXQoKCgpPT57dGhpcy5fbGluZXNDb2xsZWN0aW9uLnJlY29tcHV0ZUNvbnRyb2xQb2ludHMoZUl0LkJBQ0tHUk9VTkQpLHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5zaG93QmFja2dyb3VuZExpbmVzKCl9KSw1MDApfW9uQnJ1c2hDaGFuZ2VkKHQsZSl7dGhpcy5fYXhlc0NvbGxlY3Rpb24uZ2V0QXhpc0ZvckNvbEluZGV4KHQpLnNldEJydXNoU2VsZWN0aW9uKGUpLHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5yZWNvbXB1dGVGb3JlZ3JvdW5kTGluZXNWaXNpYmlsaXR5KCl9b25Nb3VzZU1vdmVkKHQsZSl7dGhpcy5fbGluZXNDb2xsZWN0aW9uLnVwZGF0ZVBlYWtlZFNlc3Npb25Hcm91cCh0aGlzLl9saW5lc0NvbGxlY3Rpb24uZmluZENsb3Nlc3RTZXNzaW9uR3JvdXAodCxlKSksdGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwQ2hhbmdlZENCKHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGUoKS5zZXNzaW9uR3JvdXAoKSl9b25Nb3VzZUxlYXZlKCl7dGhpcy5fbGluZXNDb2xsZWN0aW9uLnBlYWtlZFNlc3Npb25Hcm91cEhhbmRsZSgpLmlzTnVsbCgpfHwodGhpcy5fbGluZXNDb2xsZWN0aW9uLmNsZWFyUGVha2VkU2Vzc2lvbkdyb3VwKCksdGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwQ2hhbmdlZENCKG51bGwpKX1vbkNsaWNrKCl7dGhpcy5fbGluZXNDb2xsZWN0aW9uLnBlYWtlZFNlc3Npb25Hcm91cEhhbmRsZSgpLnNlc3Npb25Hcm91cCgpPT09dGhpcy5fbGluZXNDb2xsZWN0aW9uLnNlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlKCkuc2Vzc2lvbkdyb3VwKCk/dGhpcy5fbGluZXNDb2xsZWN0aW9uLnVwZGF0ZVNlbGVjdGVkU2Vzc2lvbkdyb3VwKG5ldyBsSXQpOnRoaXMuX2xpbmVzQ29sbGVjdGlvbi51cGRhdGVTZWxlY3RlZFNlc3Npb25Hcm91cCh0aGlzLl9saW5lc0NvbGxlY3Rpb24ucGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlKCkpLHRoaXMuX3NlbGVjdGVkU2Vzc2lvbkdyb3VwQ2hhbmdlZENCKHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZSgpLnNlc3Npb25Hcm91cCgpKX1vbk9wdGlvbnNPclNlc3Npb25Hcm91cHNDaGFuZ2VkKHQsZSl7dGhpcy5fYXhlc0NvbGxlY3Rpb24udXBkYXRlQXhlcyh0LGUpO2NvbnN0IG49dGhpcy5fbGluZXNDb2xsZWN0aW9uLnBlYWtlZFNlc3Npb25Hcm91cEhhbmRsZSgpLGk9dGhpcy5fbGluZXNDb2xsZWN0aW9uLnNlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlKCk7dGhpcy5fbGluZXNDb2xsZWN0aW9uLnJlZHJhdyhlLHZvaWQgMCE9PXQuY29sb3JCeUNvbHVtbkluZGV4P3QuY29sdW1uc1t0LmNvbG9yQnlDb2x1bW5JbmRleF0uYWJzb2x1dGVJbmRleDpudWxsLHQubWluQ29sb3IsdC5tYXhDb2xvciksbi5lcXVhbHNUbyh0aGlzLl9saW5lc0NvbGxlY3Rpb24ucGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlKCkpfHx0aGlzLl9wZWFrZWRTZXNzaW9uR3JvdXBDaGFuZ2VkQ0IodGhpcy5fbGluZXNDb2xsZWN0aW9uLnBlYWtlZFNlc3Npb25Hcm91cEhhbmRsZSgpLnNlc3Npb25Hcm91cCgpKSxpLmVxdWFsc1RvKHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZSgpKXx8dGhpcy5fc2VsZWN0ZWRTZXNzaW9uR3JvdXBDaGFuZ2VkQ0IodGhpcy5fbGluZXNDb2xsZWN0aW9uLnNlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlKCkuc2Vzc2lvbkdyb3VwKCkpfXNjaGVtYSgpe3JldHVybiB0aGlzLl9zY2hlbWF9fWxldCBkSXQ9Y2xhc3MgZXh0ZW5kcyh0cihubCh5ZSkpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5zZWxlY3RlZFNlc3Npb25Hcm91cD1udWxsLHRoaXMuY2xvc2VzdFNlc3Npb25Hcm91cD1udWxsLHRoaXMucmVkcmF3Q291bnQ9MH1fb3B0aW9uc09yU2Vzc2lvbkdyb3Vwc0NoYW5nZWQoKXt2YXIgdDtpZighdGhpcy5vcHRpb25zKXJldHVybjtjb25zdHtjb25maWd1cmF0aW9uOmV9PW51bGwhPT0odD10aGlzLl9wcmV2T3B0aW9ucykmJnZvaWQgMCE9PXQ/dDp7fSx7Y29uZmlndXJhdGlvbjpufT10aGlzLm9wdGlvbnM7aWYodm9pZCAwPT09dGhpcy5faW50ZXJhY3Rpb25NYW5hZ2VyfHwhd2UuaXNFcXVhbChlLnNjaGVtYSxuLnNjaGVtYSl8fCF3ZS5pc0VxdWFsKGUuY29sdW1uc1Zpc2liaWxpdHksbi5jb2x1bW5zVmlzaWJpbGl0eSkpe3d1KHRoaXMuJC5zdmcpLnNlbGVjdEFsbCgiKiIpLnJlbW92ZSgpO2NvbnN0IHQ9bmV3IHVJdCh0aGlzLiQuc3ZnLG4uY29sdW1uc1Zpc2liaWxpdHkuZmlsdGVyKEJvb2xlYW4pLmxlbmd0aCk7dGhpcy5zY29wZVN1YnRyZWUodGhpcy4kLnN2ZywhMCksdGhpcy5faW50ZXJhY3Rpb25NYW5hZ2VyPW5ldyBoSXQodCxuLnNjaGVtYSwodD0+dGhpcy5jbG9zZXN0U2Vzc2lvbkdyb3VwQ2hhbmdlZCh0KSksKHQ9PnRoaXMuc2VsZWN0ZWRTZXNzaW9uR3JvdXBDaGFuZ2VkKHQpKSl9dGhpcy5fY29tcHV0ZVZhbGlkU2Vzc2lvbkdyb3VwcygpLHRoaXMuX2ludGVyYWN0aW9uTWFuYWdlci5vbk9wdGlvbnNPclNlc3Npb25Hcm91cHNDaGFuZ2VkKHRoaXMub3B0aW9ucyx0aGlzLl92YWxpZFNlc3Npb25Hcm91cHMpLHRoaXMucmVkcmF3Q291bnQrKyx0aGlzLl9wcmV2T3B0aW9ucz10aGlzLm9wdGlvbnN9Y2xvc2VzdFNlc3Npb25Hcm91cENoYW5nZWQodCl7dGhpcy5jbG9zZXN0U2Vzc2lvbkdyb3VwPXR9c2VsZWN0ZWRTZXNzaW9uR3JvdXBDaGFuZ2VkKHQpe3RoaXMuc2VsZWN0ZWRTZXNzaW9uR3JvdXA9dH1fY29tcHV0ZVZhbGlkU2Vzc2lvbkdyb3Vwcygpe2NvbnN0IHQ9TVB0O2lmKHZvaWQgMD09PXRoaXMuc2Vzc2lvbkdyb3VwcylyZXR1cm4gdm9pZCh0aGlzLl92YWxpZFNlc3Npb25Hcm91cHM9dm9pZCAwKTtjb25zdCBlPXRoaXMub3B0aW9ucy5jb25maWd1cmF0aW9uLnNjaGVtYTt0aGlzLl92YWxpZFNlc3Npb25Hcm91cHM9dGhpcy5zZXNzaW9uR3JvdXBzLmZpbHRlcigobj0+e2ZvcihsZXQgaT0wO2k8dC5udW1Db2x1bW5zKGUpOysraSlpZih0aGlzLm9wdGlvbnMuY29uZmlndXJhdGlvbi5jb2x1bW5zVmlzaWJpbGl0eVtpXSYmdm9pZCAwPT09dC5jb2x1bW5WYWx1ZUJ5SW5kZXgoZSxuLGkpKXJldHVybiExO3JldHVybiEwfSkpfX07ZEl0LnRlbXBsYXRlPV9lYAogICAgPGRpdiBpZD0iY29udGFpbmVyIj4KICAgICAgPHN2ZyBpZD0ic3ZnIj48L3N2Zz4KICAgIDwvZGl2PgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgLS10Zi1ocGFyYW1zLXBhcmFsbGVsLWNvb3Jkcy1wbG90LWF4aXMtc2hhZG93OiAwIDFweCAwICNmZmYsCiAgICAgICAgICAxcHggMCAwICNmZmYsIDAgLTFweCAwICNmZmYsIC0xcHggMCAwICNmZmY7CiAgICAgIH0KICAgICAgOmhvc3QoLmRhcmstbW9kZSkgewogICAgICAgIC0tdGYtaHBhcmFtcy1wYXJhbGxlbC1jb29yZHMtcGxvdC1heGlzLXNoYWRvdzogMCAxcHggMCAjMDAwLAogICAgICAgICAgMXB4IDAgMCAjMDAwLCAwIC0xcHggMCAjMDAwLCAtMXB4IDAgMCAjMDAwOwogICAgICB9CiAgICAgIHN2ZyB7CiAgICAgICAgZm9udDogMTBweCBzYW5zLXNlcmlmOwogICAgICB9CgogICAgICAuYmFja2dyb3VuZCBwYXRoIHsKICAgICAgICBmaWxsOiBub25lOwogICAgICAgIHN0cm9rZTogI2RkZDsKICAgICAgICBzaGFwZS1yZW5kZXJpbmc6IGNyaXNwRWRnZXM7CiAgICAgIH0KCiAgICAgIC5mb3JlZ3JvdW5kIHBhdGggewogICAgICAgIGZpbGw6IG5vbmU7CiAgICAgICAgc3Ryb2tlLW9wYWNpdHk6IDAuNzsKICAgICAgICBzdHJva2Utd2lkdGg6IDE7CiAgICAgIH0KCiAgICAgIC8qIFdpbGwgYmUgc2V0IG9uIGZvcmVncm91bmQgcGF0aHMgdGhhdCBhcmUgbm90ICJjb250YWluZWQiIGluIHRoZSBjdXJyZW50CiAgICAgICAgIGF4ZXMgYnJ1c2hlcy4gSWYgbm8gYnJ1c2hlcyBhcmUgc2V0LCBubyBwYXRoIHdpbGwgaGF2ZSB0aGlzIGNsYXNzLiAqLwogICAgICAuZm9yZWdyb3VuZCAuaW52aXNpYmxlLXBhdGggewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC8qIFN0eWxlIGZvciB0aGUgcGF0aCBjbG9zZXN0IHRvIHRoZSBtb3VzZSBwb2ludGVyICh0eXBpY2FsbHkgd2lsbCBiZWNvbWUKICAgICAgdGhlIHNlbGVjdGVkIHBhdGggd2hlbiB0aGUgdXNlciBjbGlja3MpLiAqLwogICAgICAuZm9yZWdyb3VuZCAucGVha2VkLXBhdGggewogICAgICAgIHN0cm9rZS13aWR0aDogMzsKICAgICAgfQoKICAgICAgLyogVGhlIGN1cnJlbnRseSBzZWxlY3RlZCBwYXRoIGNsYXNzLiBXZSB1c2UgIWltcG9ydGFudCB0byBvdmVycmlkZSB0aGUKICAgICAgICAgaW5saW5lIHN0eWxlIHRoYXQgc2V0cyB0aGUgcmVndWxhciBjb2xvciBvZiBhIHBhdGguICovCiAgICAgIC5mb3JlZ3JvdW5kIC5zZWxlY3RlZC1wYXRoIHsKICAgICAgICBzdHJva2Utd2lkdGg6IDMgIWltcG9ydGFudDsKICAgICAgICBzdHJva2U6ICMwZjAgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgI2NvbnRhaW5lciB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICBzdmcgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQoKICAgICAgLmF4aXMgdGV4dCB7CiAgICAgICAgdGV4dC1zaGFkb3c6IHZhcigtLXRmLWhwYXJhbXMtcGFyYWxsZWwtY29vcmRzLXBsb3QtYXhpcy1zaGFkb3cpOwogICAgICAgIGZpbGw6IGN1cnJlbnRDb2xvcjsKICAgICAgICBjdXJzb3I6IG1vdmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYCx0KFtvKHt0eXBlOkFycmF5fSksZSgiZGVzaWduOnR5cGUiLEFycmF5KV0sZEl0LnByb3RvdHlwZSwic2Vzc2lvbkdyb3VwcyIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxkSXQucHJvdG90eXBlLCJvcHRpb25zIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxkSXQucHJvdG90eXBlLCJzZWxlY3RlZFNlc3Npb25Hcm91cCIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdCxub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZEl0LnByb3RvdHlwZSwiY2xvc2VzdFNlc3Npb25Hcm91cCIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxkSXQucHJvdG90eXBlLCJyZWRyYXdDb3VudCIsdm9pZCAwKSx0KFtvKHt0eXBlOkFycmF5fSksZSgiZGVzaWduOnR5cGUiLEFycmF5KV0sZEl0LnByb3RvdHlwZSwiX3ZhbGlkU2Vzc2lvbkdyb3VwcyIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxkSXQucHJvdG90eXBlLCJfaW50ZXJhY3Rpb25NYW5hZ2VyIix2b2lkIDApLHQoW2EoIm9wdGlvbnMuKiIsInNlc3Npb25Hcm91cHMuKiIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sZEl0LnByb3RvdHlwZSwiX29wdGlvbnNPclNlc3Npb25Hcm91cHNDaGFuZ2VkIixudWxsKSxkSXQ9dChbaSgidGYtaHBhcmFtcy1wYXJhbGxlbC1jb29yZHMtcGxvdCIpXSxkSXQpO2xldCBwSXQ9Y2xhc3MgZXh0ZW5kcyB5ZXtfY2xvc2VzdE9yU2VsZWN0ZWQodCxlKXtyZXR1cm4gbnVsbCE9PXQ/dDplfX07cEl0LnRlbXBsYXRlPV9lYAogICAgPCEtLSBDb250cm9scyBiZWhhdmlvciBvZiBwYXJhbGxlbCBjb29yZGluYXRlcyBwbG90CiAgICAgICAgIG91dHB1dHMgc2V0IG9wdGlvbnMgdG8gdGhlIF9vcHRpb25zIHByb3BlcnR5LgogICAgICAtLT4KICAgIDxocGFyYW1zLXNwbGl0LWxheW91dCBvcmllbnRhdGlvbj0idmVydGljYWwiPgogICAgICA8IS0tIFRoZSBzY2FsZSBhbmQgY29sb3IgY29udHJvbHMuIC0tPgogICAgICA8dGYtaHBhcmFtcy1zY2FsZS1hbmQtY29sb3ItY29udHJvbHMKICAgICAgICBpZD0iY29udHJvbHMiCiAgICAgICAgc2xvdD0iY29udGVudCIKICAgICAgICBjbGFzcz0ic2VjdGlvbiIKICAgICAgICBjb25maWd1cmF0aW9uPSJbW2NvbmZpZ3VyYXRpb25dXSIKICAgICAgICBzZXNzaW9uLWdyb3Vwcz0iW1tzZXNzaW9uR3JvdXBzXV0iCiAgICAgICAgb3B0aW9ucz0ie3tfb3B0aW9uc319IgogICAgICA+CiAgICAgIDwvdGYtaHBhcmFtcy1zY2FsZS1hbmQtY29sb3ItY29udHJvbHM+CiAgICAgIDwhLS0gVGhlIGFjdHVhbCBwYXJhbGxlbCBjb29yZGluYXRlcyBwbG90IC0tPgogICAgICA8dGYtaHBhcmFtcy1wYXJhbGxlbC1jb29yZHMtcGxvdAogICAgICAgIGlkPSJwbG90IgogICAgICAgIHNsb3Q9ImNvbnRlbnQiCiAgICAgICAgY2xhc3M9InNlY3Rpb24iCiAgICAgICAgc2Vzc2lvbi1ncm91cHM9Iltbc2Vzc2lvbkdyb3Vwc11dIgogICAgICAgIHNlbGVjdGVkLXNlc3Npb24tZ3JvdXA9Int7X3NlbGVjdGVkR3JvdXB9fSIKICAgICAgICBjbG9zZXN0LXNlc3Npb24tZ3JvdXA9Int7X2Nsb3Nlc3RHcm91cH19IgogICAgICAgIG9wdGlvbnM9IltbX29wdGlvbnNdXSIKICAgICAgPgogICAgICA8L3RmLWhwYXJhbXMtcGFyYWxsZWwtY29vcmRzLXBsb3Q+CiAgICAgIDx0Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtdmFsdWVzCiAgICAgICAgaWQ9InZhbHVlcyIKICAgICAgICBzbG90PSJjb250ZW50IgogICAgICAgIGNsYXNzPSJzZWN0aW9uIgogICAgICAgIHZpc2libGUtc2NoZW1hPSJbW2NvbmZpZ3VyYXRpb24udmlzaWJsZVNjaGVtYV1dIgogICAgICAgIHNlc3Npb24tZ3JvdXA9IltbX2Nsb3Nlc3RPclNlbGVjdGVkKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbG9zZXN0R3JvdXAsIF9zZWxlY3RlZEdyb3VwKV1dIgogICAgICA+CiAgICAgIDwvdGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLXZhbHVlcz4KICAgICAgPHRmLWhwYXJhbXMtc2Vzc2lvbi1ncm91cC1kZXRhaWxzCiAgICAgICAgaWQ9ImRldGFpbHMiCiAgICAgICAgc2xvdD0iY29udGVudCIKICAgICAgICBjbGFzcz0ic2VjdGlvbiIKICAgICAgICBiYWNrZW5kPSJbW2JhY2tlbmRdXSIKICAgICAgICBleHBlcmltZW50LW5hbWU9IltbZXhwZXJpbWVudE5hbWVdXSIKICAgICAgICBzZXNzaW9uLWdyb3VwPSJbW19zZWxlY3RlZEdyb3VwXV0iCiAgICAgICAgdmlzaWJsZS1zY2hlbWE9IltbY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hXV0iCiAgICAgID4KICAgICAgPC90Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtZGV0YWlscz4KICAgIDwvaHBhcmFtcy1zcGxpdC1sYXlvdXQ+CgogICAgPHN0eWxlPgogICAgICAuc2VjdGlvbiB7CiAgICAgICAgcGFkZGluZzogMTBweDsKICAgICAgfQogICAgICAjdmFsdWVzIHsKICAgICAgICBoZWlnaHQ6IDExNXB4OwogICAgICB9CiAgICAgICNkZXRhaWxzIHsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgbWF4LWhlaWdodDogZml0LWNvbnRlbnQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYCx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxwSXQucHJvdG90eXBlLCJiYWNrZW5kIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLHBJdC5wcm90b3R5cGUsImV4cGVyaW1lbnROYW1lIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLHBJdC5wcm90b3R5cGUsImNvbmZpZ3VyYXRpb24iLHZvaWQgMCksdChbbyh7dHlwZTpBcnJheX0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLHBJdC5wcm90b3R5cGUsInNlc3Npb25Hcm91cHMiLHZvaWQgMCkscEl0PXQoW2koInRmLWhwYXJhbXMtcGFyYWxsZWwtY29vcmRzLXZpZXciKV0scEl0KTtsZXQgZkl0PWNsYXNzIGV4dGVuZHModHIoeWUpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5zZWxlY3RlZFNlc3Npb25Hcm91cD1udWxsLHRoaXMuY2xvc2VzdFNlc3Npb25Hcm91cD1udWxsLHRoaXMuX2NvbnRhaW5lcj1udWxsLHRoaXMuX3N2Zz1udWxsLHRoaXMud2lkdGg9MCx0aGlzLmhlaWdodD0wLHRoaXMuX2JydXNoZWRDZWxsSW5kZXg9bnVsbCx0aGlzLl9icnVzaFNlbGVjdGlvbj1udWxsfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLl9jb250YWluZXI9dGhpcy4kLmNvbnRhaW5lcix0aGlzLl9zdmc9d3UodGhpcy4kLnN2ZyksdGhpcy5fcmVkcmF3KCl9X3Nlc3Npb25Hcm91cHNDaGFuZ2VkKCl7bnVsbCE9PXRoaXMuc2VsZWN0ZWRTZXNzaW9uR3JvdXAmJih0aGlzLnNlbGVjdGVkU2Vzc2lvbkdyb3VwPXBQdCh0aGlzLnNlc3Npb25Hcm91cHMsdGhpcy5zZWxlY3RlZFNlc3Npb25Hcm91cC5uYW1lKXx8bnVsbCksdGhpcy5fcmVkcmF3KCl9X3Zpc2libGVTY2hlbWFDaGFuZ2VkKCl7dGhpcy5fYnJ1c2hlZENlbGxJbmRleD1udWxsLHRoaXMuX2JydXNoU2VsZWN0aW9uPW51bGwsdGhpcy5fcmVkcmF3KCl9X3JlZHJhdygpe3RoaXMuZGVib3VuY2UoIl9yZWRyYXciLCgoKT0+e2NvbnN0IHQ9TVB0O3RoaXMud2lkdGg9TWF0aC5tYXgoMTUwKnQubnVtVmlzaWJsZUNvbHVtbnModGhpcy52aXNpYmxlU2NoZW1hKSwxMjAwKSx0aGlzLmhlaWdodD1NYXRoLm1heCgxMTIuNSp0Lm51bVZpc2libGVNZXRyaWNzKHRoaXMudmlzaWJsZVNjaGVtYSksNDgwKSx0aGlzLl9jb250YWluZXIuc3R5bGUud2lkdGg9dGhpcy53aWR0aCsicHgiLHRoaXMuX2NvbnRhaW5lci5zdHlsZS5oZWlnaHQ9dGhpcy5oZWlnaHQrInB4Iix0aGlzLl9zdmcuYXR0cigid2lkdGgiLHRoaXMud2lkdGgpLmF0dHIoImhlaWdodCIsdGhpcy5oZWlnaHQpLHRoaXMuX3N2Zy5zZWxlY3RBbGwoImciKS5yZW1vdmUoKSx0aGlzLl9kcmF3KCl9KSwxMDApfV9kcmF3KCl7Y29uc3QgdD1NUHQsZT10aGlzO2lmKCF0aGlzLnNlc3Npb25Hcm91cHN8fDA9PXRoaXMuc2Vzc2lvbkdyb3Vwcy5sZW5ndGh8fCF0aGlzLnZpc2libGVTY2hlbWF8fDA9PXRoaXMudmlzaWJsZVNjaGVtYS5tZXRyaWNJbmZvcy5sZW5ndGgpcmV0dXJuO2NvbnN0IG49UmwodC5udW1WaXNpYmxlQ29sdW1ucyhlLnZpc2libGVTY2hlbWEpKSxpPVJsKHQubnVtVmlzaWJsZU1ldHJpY3MoZS52aXNpYmxlU2NoZW1hKSkscj13TSgpLmRvbWFpbihuKS5yYW5nZShbODUsdGhpcy53aWR0aC0xLTVdKS5wYWRkaW5nSW5uZXIoLjEpLG89d00oKS5kb21haW4oaSkucmFuZ2UoW3RoaXMuaGVpZ2h0LTEtNS01MCw1XSkucGFkZGluZ0lubmVyKC4xKSxhPXIuYmFuZHdpZHRoKCkscz1vLmJhbmR3aWR0aCgpLGw9bi5tYXAoKHQ9PmUuX2NlbGxTY2FsZSh0LFswLGEtMV0pKSksYz1pLm1hcCgobj0+ZS5fY2VsbFNjYWxlKG4rdC5udW1WaXNpYmxlSFBhcmFtcyhlLnZpc2libGVTY2hlbWEpLFtzLTEsMF0pKSksdT10aGlzLl9zdmcuc2VsZWN0QWxsKCIueC1heGlzIikuZGF0YShuKS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoIngtYXhpcyIsITApLmF0dHIoInRyYW5zZm9ybSIsKGU9PnQudHJhbnNsYXRlU3RyKHIoZSksMCkpKTtmdW5jdGlvbiBoKHQpe3JldHVybiJ4LWF4aXMtY2xpcC1wYXRoLSIrdH1mdW5jdGlvbiBkKHQpe3JldHVybiJ4LWxhYmVsLWNsaXAtcGF0aC0iK3R9dS5hcHBlbmQoImNsaXBQYXRoIikuYXR0cigiaWQiLGgpLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLC01KS5hdHRyKCJ5IiwwKS5hdHRyKCJ3aWR0aCIsYSsxMCkuYXR0cigiaGVpZ2h0IixlLmhlaWdodC0yNSksdS5hcHBlbmQoImNsaXBQYXRoIikuYXR0cigiaWQiLGQpLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLDApLmF0dHIoInkiLGUuaGVpZ2h0LTI1KS5hdHRyKCJ3aWR0aCIsYSkuYXR0cigiaGVpZ2h0IiwyNSksdS5hcHBlbmQoImciKS5hdHRyKCJjbGlwLXBhdGgiLCh0PT4idXJsKCMiK2godCkrIikiKSkuZWFjaCgoZnVuY3Rpb24odCl7d3UodGhpcykuY2FsbChnLHJjKGxbdF0pLnRpY2tTaXplKGUuaGVpZ2h0LTUwKSxhLDQwLGUub3B0aW9ucy5jb2x1bW5zW3RdLnNjYWxlKX0pKSx1LmFwcGVuZCgiZyIpLmNsYXNzZWQoIngtYXhpcy1sYWJlbCIsITApLmF0dHIoImNsaXAtcGF0aCIsKHQ9PiJ1cmwoIyIrZCh0KSsiKSIpKS5hcHBlbmQoInRleHQiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoIngiLGEvMikuYXR0cigieSIsZS5oZWlnaHQtMS0xMi41KS50ZXh0KChuPT50LnNjaGVtYVZpc2libGVDb2x1bW5OYW1lKGUudmlzaWJsZVNjaGVtYSxuKSkpLmFwcGVuZCgidGl0bGUiKS50ZXh0KChuPT50LnNjaGVtYVZpc2libGVDb2x1bW5OYW1lKGUudmlzaWJsZVNjaGVtYSxuKSkpO2NvbnN0IHA9dGhpcy5fc3ZnLnNlbGVjdEFsbCgiLnktYXhpcyIpLmRhdGEoaSkuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJ5LWF4aXMiLCEwKS5hdHRyKCJ0cmFuc2Zvcm0iLChuPT50LnRyYW5zbGF0ZVN0cihlLndpZHRoLTEsbyhuKSkpKTtmdW5jdGlvbiBmKHQpe3JldHVybiJ5LWF4aXMtY2xpcC1wYXRoLSIrdH1mdW5jdGlvbiBtKHQpe3JldHVybiJ5LWxhYmVsLWNsaXAtcGF0aC0iK3R9ZnVuY3Rpb24gZyh0LGUsbixpLHIpe2NvbnN0IG89TWF0aC5mbG9vcihuL2kpLGE9ZS5zY2FsZSgpO2lmKCJRVUFOVElMRSI9PT1yKXtsZXQgdD1hLnF1YW50aWxlcygpO2NvbnN0IG49TWF0aC5jZWlsKHQubGVuZ3RoL28pO3Q9UmwoMCx0Lmxlbmd0aCxuKS5tYXAoKGU9PnRbZV0pKSxlLnRpY2tWYWx1ZXModCkudGlja0Zvcm1hdChmeSgiLS4yZyIpKX0iTElORUFSIiE9PXImJiJMT0ciIT09cnx8ZS50aWNrcyhvKSx0LmNhbGwoZSksdC5zZWxlY3RBbGwoIi5kb21haW4iKS5yZW1vdmUoKSx0LnNlbGVjdEFsbCgiLnRpY2sgbGluZSIpLmF0dHIoInN0cm9rZSIsIiNkZGQiKX1wLmFwcGVuZCgiY2xpcFBhdGgiKS5hdHRyKCJpZCIsZikuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsLShlLndpZHRoLTQwLTEpKS5hdHRyKCJ5IiwtNSkuYXR0cigid2lkdGgiLGUud2lkdGgtNDApLmF0dHIoImhlaWdodCIscysxMCkscC5hcHBlbmQoImNsaXBQYXRoIikuYXR0cigiaWQiLG0pLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLC0oZS53aWR0aC0xKSkuYXR0cigieSIsMCkuYXR0cigid2lkdGgiLDQwKS5hdHRyKCJoZWlnaHQiLHMpLHAuYXBwZW5kKCJnIikuYXR0cigiY2xpcC1wYXRoIiwodD0+InVybCgjIitmKHQpKyIpIikpLmVhY2goKGZ1bmN0aW9uKG4pe3d1KHRoaXMpLmNhbGwoZyxvYyhjW25dKS50aWNrU2l6ZShlLndpZHRoLTgwKSxzLDIwLGUub3B0aW9ucy5jb2x1bW5zW24rdC5udW1WaXNpYmxlSFBhcmFtcyhlLnZpc2libGVTY2hlbWEpXS5zY2FsZSl9KSkscC5hcHBlbmQoImciKS5jbGFzc2VkKCJ5LWF4aXMtbGFiZWwiLCEwKS5hdHRyKCJjbGlwLXBhdGgiLCh0PT4idXJsKCMiK20odCkrIikiKSkuYXBwZW5kKCJ0ZXh0IikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJ4IiwtKGUud2lkdGgtMjAtMSkpLmF0dHIoInkiLHMvMikuYXR0cigidHJhbnNmb3JtIix0LnJvdGF0ZVN0cig5MCwtKGUud2lkdGgtMjAtMSkscy8yKSkudGV4dCgobj0+dC5tZXRyaWNOYW1lKGUudmlzaWJsZVNjaGVtYS5tZXRyaWNJbmZvc1tuXSkpKS5hcHBlbmQoInRpdGxlIikudGV4dCgobj0+dC5tZXRyaWNOYW1lKGUudmlzaWJsZVNjaGVtYS5tZXRyaWNJbmZvc1tuXSkpKTtjb25zdCBfPXRoaXMuX3N2Zy5zZWxlY3RBbGwoIi5jZWxsIikuZGF0YShFbChuLGkpKS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImNlbGwiLCEwKS5hdHRyKCJ0cmFuc2Zvcm0iLCgoW2Usbl0pPT50LnRyYW5zbGF0ZVN0cihyKGUpLG8obikpKSk7Xy5hcHBlbmQoImciKS5jbGFzc2VkKCJmcmFtZSIsITApLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLC01KS5hdHRyKCJ5IiwtNSkuYXR0cigid2lkdGgiLGErMTApLmF0dHIoImhlaWdodCIscysxMCkuYXR0cigic3Ryb2tlIiwiIzAwMCIpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigic2hhcGUtcmVuZGVyaW5nIiwiY3Jpc3BFZGdlcyIpO2xldCB5PW51bGw7dm9pZCAwIT09ZS5vcHRpb25zLmNvbG9yQnlDb2x1bW5JbmRleCYmKHk9RE0oKS5kb21haW4odGhpcy5fY29sRXh0ZW50KHRoaXMub3B0aW9ucy5jb2xvckJ5Q29sdW1uSW5kZXgpKS5yYW5nZShbdGhpcy5vcHRpb25zLm1pbkNvbG9yLHRoaXMub3B0aW9ucy5tYXhDb2xvcl0pLmludGVycG9sYXRlKGxwKSk7Y29uc3Qgdj12b2lkIDA9PT1lLm9wdGlvbnMuY29sb3JCeUNvbHVtbkluZGV4PygpPT4icmVkIjooe3Nlc3Npb25Hcm91cDp0fSk9PnkodGhpcy5fY29sVmFsdWUodCxlLm9wdGlvbnMuY29sb3JCeUNvbHVtbkluZGV4KSk7ZnVuY3Rpb24gYih0LG4pe3JldHVybiBsW25dKGUuX2NvbFZhbHVlKHQsbikpfWZ1bmN0aW9uIHgodCxuKXtyZXR1cm4gY1tuXShlLl9tZXRyaWNWYWx1ZSh0LG4pKX1jb25zdFt3LFMsTV09KGZ1bmN0aW9uIEUodCxyKXtjb25zdCBvPXQuc2VsZWN0QWxsKCIuZGF0YS1tYXJrZXIiKS5kYXRhKCgoW3Qsbl0pPT5lLnNlc3Npb25Hcm91cHMuZmlsdGVyKChpPT52b2lkIDAhPT1lLl9jb2xWYWx1ZShpLHQpJiZ2b2lkIDAhPT1lLl9tZXRyaWNWYWx1ZShpLG4pKSkubWFwKChlPT4oe2NvbDp0LG1ldHJpYzpuLHNlc3Npb25Hcm91cDplLHg6YihlLHQpLHk6eChlLG4pLHNlc3Npb25Hcm91cE1hcmtlcnM6bnVsbH0pKSkpKS5lbnRlcigpLmFwcGVuZCgiY2lyY2xlIikuY2xhc3NlZCgiZGF0YS1tYXJrZXIiLCEwKS5hdHRyKCJjeCIsKCh7eDp0fSk9PnQpKS5hdHRyKCJjeSIsKCh7eTp0fSk9PnQpKS5hdHRyKCJyIiwyKS5hdHRyKCJmaWxsIixyKSxhPW5ldyBNYXA7ZS5zZXNzaW9uR3JvdXBzLmZvckVhY2goKHQ9PnthLnNldCh0LFtdKX0pKSxvLmVhY2goKGZ1bmN0aW9uKHQpe2EuZ2V0KHQuc2Vzc2lvbkdyb3VwKS5wdXNoKHRoaXMpfSkpLG8uZWFjaCgodD0+e2NvbnN0IGU9YS5nZXQodC5zZXNzaW9uR3JvdXApO3Quc2Vzc2lvbkdyb3VwTWFya2Vycz1uZXcgU2V0KGUpfSkpO2NvbnN0IHM9bi5tYXAoKHQ9PmkubWFwKChlPT5vLmZpbHRlcigobj0+bi5jb2w9PXQmJm4ubWV0cmljPT1lKSkpKSkpO3JldHVybltvLHMsYV19KShfLmFwcGVuZCgiZyIpLHYpLFQ9bi5tYXAoKHQ9PmkubWFwKChlPT4oZnVuY3Rpb24gbih0LGUpe2NvbnN0IG49W107cmV0dXJuIFNbdF1bZV0uZWFjaCgoZnVuY3Rpb24oKXtuLnB1c2godGhpcyl9KSksUF8oKS54KCh0PT53dSh0KS5kYXR1bSgpLngpKS55KCh0PT53dSh0KS5kYXR1bSgpLnkpKS5hZGRBbGwobil9KSh0LGUpKSkpKTtsZXQgQz1udWxsO04oKSYmKEM9Xy5maWx0ZXIoKHQ9PndlLmlzRXF1YWwodCxlLl9icnVzaGVkQ2VsbEluZGV4KSkpLGNvbnNvbGUuYXNzZXJ0KDE9PUMuc2l6ZSgpLEMpKTtsZXQgQT1uZXcgU2V0KHcubm9kZXMoKSk7ZnVuY3Rpb24gaygpe2xldCBuPW5ldyBTZXQody5ub2RlcygpKTsoZnVuY3Rpb24gaSgpe3JldHVybiFOKCl8fGUuX2JydXNoU2VsZWN0aW9uWzBdWzBdPT09ZS5fYnJ1c2hTZWxlY3Rpb25bMV1bMF18fGUuX2JydXNoU2VsZWN0aW9uWzBdWzFdPT09ZS5fYnJ1c2hTZWxlY3Rpb25bMV1bMV19KSgpfHwobj0oZnVuY3Rpb24gcihlLG4pe2NvbnNvbGUuYXNzZXJ0KG51bGwhPT1lKSxjb25zb2xlLmFzc2VydChudWxsIT09bik7Y29uc3RbaSxyXT1lLG89bmV3IFNldDtyZXR1cm4gdC5xdWFkVHJlZVZpc2l0UG9pbnRzSW5SZWN0KFRbaV1bcl0sblswXVswXSxuWzBdWzFdLG5bMV1bMF0sblsxXVsxXSwodD0+e3d1KHQpLmRhdHVtKCkuc2Vzc2lvbkdyb3VwTWFya2Vycy5mb3JFYWNoKCh0PT57by5hZGQodCl9KSl9KSksb30pKGUuX2JydXNoZWRDZWxsSW5kZXgsZS5fYnJ1c2hTZWxlY3Rpb24pKSxhaChBcnJheS5mcm9tKHQuZmlsdGVyU2V0KG4sKHQ9PiFBLmhhcyh0KSkpKSkuYXR0cigiZmlsbCIsdiksYWgoQXJyYXkuZnJvbSh0LmZpbHRlclNldChBLCh0PT4hbi5oYXModCkpKSkpLmF0dHIoImZpbGwiLCIjZGRkIiksQT1ufWsoKTtjb25zdCBMPVptKCkuZXh0ZW50KFtbLTQsLTRdLFthLTErNS0xLHMtMSs1LTFdXSkub24oInN0YXJ0IiwoZnVuY3Rpb24oKXtOKCkmJkMubm9kZSgpIT10aGlzJiZMLm1vdmUoQyxudWxsKSxQKHRoaXMpfSkpLm9uKCJicnVzaCIsKGZ1bmN0aW9uKCl7UCh0aGlzKX0pKS5vbigiZW5kIiwoZnVuY3Rpb24oKXtQKHRoaXMpfSkpO2Z1bmN0aW9uIFAodCl7Y29uc3Qgbj0kbSh0KTshTigpJiZudWxsPT09bnx8TigpJiZ0PT09Qy5ub2RlKCkmJndlLmlzRXF1YWwobixlLl9icnVzaFNlbGVjdGlvbil8fChlLl9icnVzaFNlbGVjdGlvbj1uLG51bGwhPT1uPyhDPXd1KHQpLGUuX2JydXNoZWRDZWxsSW5kZXg9Qy5kYXR1bSgpKTooQz1udWxsLGUuX2JydXNoZWRDZWxsSW5kZXg9bnVsbCksaygpKX1mdW5jdGlvbiBOKCl7cmV0dXJuIG51bGwhPT1lLl9icnVzaGVkQ2VsbEluZGV4JiZudWxsIT09ZS5fYnJ1c2hTZWxlY3Rpb259Xy5jYWxsKEwpLE4oKSYmTC5tb3ZlKEMsZS5fYnJ1c2hTZWxlY3Rpb24pO2xldCBJPW51bGwsTz1udWxsO251bGwhPT10aGlzLnNlbGVjdGVkU2Vzc2lvbkdyb3VwJiYoTz1haChNLmdldCh0aGlzLnNlbGVjdGVkU2Vzc2lvbkdyb3VwKSkuY2xhc3NlZCgic2VsZWN0ZWQtbWFya2VyIiwhMCkpLF8ub24oImNsaWNrIiwoZnVuY3Rpb24oKXtjb25zdCB0PUk9PT1PP251bGw6STtpZih0PT09TylyZXR1cm47bnVsbCE9PU8mJk8uY2xhc3NlZCgic2VsZWN0ZWQtbWFya2VyIiwhMSksTz10LG51bGwhPT1PJiZPLmNsYXNzZWQoInNlbGVjdGVkLW1hcmtlciIsITApO2NvbnN0IG49bnVsbD09PU8/bnVsbDpPLmRhdHVtKCkuc2Vzc2lvbkdyb3VwO2Uuc2VsZWN0ZWRTZXNzaW9uR3JvdXA9bn0pKS5vbigibW91c2Vtb3ZlIG1vdXNlZW50ZXIiLChmdW5jdGlvbihbbixpXSl7Y29uc3RbcixvXT1vaCh0aGlzKSxhPShmdW5jdGlvbiBzKGUsbixpLHIsbyl7bGV0IGE9MS8wLHM9bnVsbDtyZXR1cm4gdC5xdWFkVHJlZVZpc2l0UG9pbnRzSW5EaXNrKFRbZV1bbl0saSxyLG8sKCh0LGUpPT57aWYoQS5oYXModCkmJmU8YSl7Y29uc3Qgbj13dSh0KS5kYXR1bSgpO2E9ZSxzPW4uc2Vzc2lvbkdyb3VwfX0pKSxudWxsPT09cz9udWxsOmFoKE0uZ2V0KHMpKX0pKG4saSxyLG8sMjApO0khPT1hJiYobnVsbCE9PUkmJkkuY2xhc3NlZCgiY2xvc2VzdC1tYXJrZXIiLCExKSxJPWEsbnVsbCE9PUk/KEkuY2xhc3NlZCgiY2xvc2VzdC1tYXJrZXIiLCEwKSxlLmNsb3Nlc3RTZXNzaW9uR3JvdXA9SS5kYXR1bSgpLnNlc3Npb25Hcm91cCk6ZS5jbG9zZXN0U2Vzc2lvbkdyb3VwPW51bGwpfSkpLm9uKCJtb3VzZWxlYXZlIiwoZnVuY3Rpb24oW3Qsbl0pe251bGwhPT1JJiYoSS5jbGFzc2VkKCJjbG9zZXN0LW1hcmtlciIsITEpLEk9bnVsbCxlLmNsb3Nlc3RTZXNzaW9uR3JvdXA9bnVsbCl9KSksdGhpcy5fc3ZnLnNlbGVjdEFsbCgiKiIpLmNsYXNzZWQoInRmLWhwYXJhbXMtc2NhdHRlci1wbG90LW1hdHJpeC1wbG90IiwhMCl9X2NlbGxTY2FsZSh0LGUpe2NvbnN0IG49dGhpcy5fY29sRXh0ZW50KHQpLGk9RE0oKS5kb21haW4obikucmFuZ2UoZSk7aWYoIkxJTkVBUiI9PT10aGlzLm9wdGlvbnMuY29sdW1uc1t0XS5zY2FsZSlyZXR1cm4gaTtpZigiTE9HIj09PXRoaXMub3B0aW9ucy5jb2x1bW5zW3RdLnNjYWxlKXJldHVybiBuWzBdPD0wJiZuWzFdPj0wP2k6cU0oKS5kb21haW4obikucmFuZ2UoZSk7aWYoIlFVQU5USUxFIj09PXRoaXMub3B0aW9ucy5jb2x1bW5zW3RdLnNjYWxlKXtjb25zdCBuPShlWzFdLWVbMF0pLzE5LGk9UmwoMjApLm1hcCgodD0+ZVswXStuKnQpKTtyZXR1cm4gZUUoKS5kb21haW4od2UudW5pcSh0aGlzLnNlc3Npb25Hcm91cHMubWFwKChlPT50aGlzLl9jb2xWYWx1ZShlLHQpKSkpKS5yYW5nZShpKX1pZigiTk9OX05VTUVSSUMiPT09dGhpcy5vcHRpb25zLmNvbHVtbnNbdF0uc2NhbGUpcmV0dXJuIE1NKCkuZG9tYWluKHdlLnVuaXEodGhpcy5zZXNzaW9uR3JvdXBzLm1hcCgoZT0+dGhpcy5fY29sVmFsdWUoZSx0KSkpLnNvcnQoKSkpLnJhbmdlKGUpLnBhZGRpbmcoLjEpO3Rocm93IlVua25vd24gc2NhbGUgZm9yIGNvbHVtbjogIit0KyIuIG9wdGlvbnM6ICIrdGhpcy5vcHRpb25zfV9jb2xWYWx1ZSh0LGUpe3JldHVybiBnUHQodGhpcy52aXNpYmxlU2NoZW1hLHQsZSl9X21ldHJpY1ZhbHVlKHQsZSl7cmV0dXJuIG1QdCh0aGlzLnZpc2libGVTY2hlbWEsdCxlKX1fY29sRXh0ZW50KHQpe3JldHVybiBkUHQodGhpcy52aXNpYmxlU2NoZW1hLHRoaXMuc2Vzc2lvbkdyb3Vwcyx0KX19O2ZJdC50ZW1wbGF0ZT1fZWAKICAgIDxkaXYgaWQ9ImNvbnRhaW5lciI+CiAgICAgIDxzdmcgaWQ9InN2ZyI+PC9zdmc+CiAgICA8L2Rpdj4KCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgICBzdmcgewogICAgICAgIGZvbnQ6IDEwcHggc2Fucy1zZXJpZjsKICAgICAgfQoKICAgICAgdGV4dCB7CiAgICAgICAgZmlsbDogY3VycmVudENvbG9yOwogICAgICB9CgogICAgICAuZnJhbWUgcmVjdCB7CiAgICAgICAgc3Ryb2tlOiBjdXJyZW50Q29sb3I7CiAgICAgIH0KCiAgICAgIC8qIFRoZSBjbG9zZXN0IGRhdGEgcG9pbnQgbWFya2VyIHRvIHRoZSBtb3VzZSBwb2ludGVyLiBXZSB1c2UgIWltcG9ydGFudAogICAgICAgICB0byBvdmVycmlkZSB0aGUgaW5saW5lIHN0eWxlIHRoYXQgc2V0cyB0aGUgcmVndWxhciBzdHlsZSBvZiBhIG1hcmtlci4KICAgICAgKi8KICAgICAgLmNsb3Nlc3QtbWFya2VyIHsKICAgICAgICByOiA2ICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIC8qIFRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZGF0YSBwb2ludCBtYXJrZXIuIFdlIHVzZSAhaW1wb3J0YW50IHRvCiAgICAgICAgIG92ZXJyaWRlIHRoZSBpbmxpbmUgc3R5bGUgdGhhdCBzZXRzIHRoZSByZWd1bGFyIHN0eWxlIG9mIGEgbWFya2VyLiAqLwogICAgICAuc2VsZWN0ZWQtbWFya2VyIHsKICAgICAgICByOiA2ICFpbXBvcnRhbnQ7CiAgICAgICAgZmlsbDogIzBmMCAhaW1wb3J0YW50OwogICAgICB9CiAgICA8L3N0eWxlPgogIGAsdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZkl0LnByb3RvdHlwZSwidmlzaWJsZVNjaGVtYSIsdm9pZCAwKSx0KFtvKHt0eXBlOkFycmF5fSksZSgiZGVzaWduOnR5cGUiLEFycmF5KV0sZkl0LnByb3RvdHlwZSwic2Vzc2lvbkdyb3VwcyIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxmSXQucHJvdG90eXBlLCJvcHRpb25zIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxmSXQucHJvdG90eXBlLCJzZWxlY3RlZFNlc3Npb25Hcm91cCIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdCxub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZkl0LnByb3RvdHlwZSwiY2xvc2VzdFNlc3Npb25Hcm91cCIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixIVE1MRWxlbWVudCldLGZJdC5wcm90b3R5cGUsIl9jb250YWluZXIiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZkl0LnByb3RvdHlwZSwiX3N2ZyIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxmSXQucHJvdG90eXBlLCJ3aWR0aCIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxmSXQucHJvdG90eXBlLCJoZWlnaHQiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZkl0LnByb3RvdHlwZSwiX2JydXNoZWRDZWxsSW5kZXgiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZkl0LnByb3RvdHlwZSwiX2JydXNoU2VsZWN0aW9uIix2b2lkIDApLHQoW2EoInNlc3Npb25Hcm91cHMuKiIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sZkl0LnByb3RvdHlwZSwiX3Nlc3Npb25Hcm91cHNDaGFuZ2VkIixudWxsKSx0KFthKCJ2aXNpYmxlU2NoZW1hLioiKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLGZJdC5wcm90b3R5cGUsIl92aXNpYmxlU2NoZW1hQ2hhbmdlZCIsbnVsbCksdChbYSgib3B0aW9ucy4qIiksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pLGUoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxmSXQucHJvdG90eXBlLCJfcmVkcmF3IixudWxsKSxmSXQ9dChbaSgidGYtaHBhcmFtcy1zY2F0dGVyLXBsb3QtbWF0cml4LXBsb3QiKV0sZkl0KTtsZXQgbUl0PWNsYXNzIGV4dGVuZHMgeWV7X2Nsb3Nlc3RPclNlbGVjdGVkKHQsZSl7cmV0dXJuIG51bGwhPT10P3Q6ZX19O21JdC50ZW1wbGF0ZT1fZWAKICAgIDxocGFyYW1zLXNwbGl0LWxheW91dCBvcmllbnRhdGlvbj0idmVydGljYWwiPgogICAgICA8IS0tIENvbnRyb2xzIGJlaGF2aW9yIG9mIHRoZSBzY2F0dGVyIHBsb3QgbWF0cml4CiAgICAgICAgICAgICBvdXRwdXRzIHRoZSBjb25maWd1cmVkIG9wdGlvbnMgdG8gdGhlIF9vcHRpb25zIHByb3BlcnR5LiAtLT4KICAgICAgPHRmLWhwYXJhbXMtc2NhbGUtYW5kLWNvbG9yLWNvbnRyb2xzCiAgICAgICAgc2xvdD0iY29udGVudCIKICAgICAgICBjbGFzcz0ic2VjdGlvbiIKICAgICAgICBpZD0iY29udHJvbHMiCiAgICAgICAgY29uZmlndXJhdGlvbj0iW1tjb25maWd1cmF0aW9uXV0iCiAgICAgICAgc2Vzc2lvbi1ncm91cHM9Iltbc2Vzc2lvbkdyb3Vwc11dIgogICAgICAgIG9wdGlvbnM9Int7X29wdGlvbnN9fSIKICAgICAgPgogICAgICA8L3RmLWhwYXJhbXMtc2NhbGUtYW5kLWNvbG9yLWNvbnRyb2xzPgogICAgICA8IS0tIFRoZSBhY3R1YWwgc2NhdHRlciBwbG90IG1hdHJpeCAtLT4KICAgICAgPHRmLWhwYXJhbXMtc2NhdHRlci1wbG90LW1hdHJpeC1wbG90CiAgICAgICAgc2xvdD0iY29udGVudCIKICAgICAgICBjbGFzcz0ic2VjdGlvbiIKICAgICAgICBpZD0icGxvdCIKICAgICAgICB2aXNpYmxlLXNjaGVtYT0iW1tjb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWFdXSIKICAgICAgICBzZXNzaW9uLWdyb3Vwcz0iW1tzZXNzaW9uR3JvdXBzXV0iCiAgICAgICAgc2VsZWN0ZWQtc2Vzc2lvbi1ncm91cD0ie3tfc2VsZWN0ZWRHcm91cH19IgogICAgICAgIGNsb3Nlc3Qtc2Vzc2lvbi1ncm91cD0ie3tfY2xvc2VzdEdyb3VwfX0iCiAgICAgICAgb3B0aW9ucz0iW1tfb3B0aW9uc11dIgogICAgICA+CiAgICAgIDwvdGYtaHBhcmFtcy1zY2F0dGVyLXBsb3QtbWF0cml4LXBsb3Q+CiAgICAgIDx0Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtdmFsdWVzCiAgICAgICAgc2xvdD0iY29udGVudCIKICAgICAgICBjbGFzcz0ic2VjdGlvbiIKICAgICAgICBpZD0idmFsdWVzIgogICAgICAgIHZpc2libGUtc2NoZW1hPSJbW2NvbmZpZ3VyYXRpb24udmlzaWJsZVNjaGVtYV1dIgogICAgICAgIHNlc3Npb24tZ3JvdXA9IltbX2Nsb3Nlc3RPclNlbGVjdGVkKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xvc2VzdEdyb3VwLCBfc2VsZWN0ZWRHcm91cCldXSIKICAgICAgPgogICAgICA8L3RmLWhwYXJhbXMtc2Vzc2lvbi1ncm91cC12YWx1ZXM+CiAgICAgIDwhLS0gU2hvd3Mgc2Vzc2lvbiBncm91cCBkZXRhaWxzIGZvciB0aGUgY2xpY2tlZCBtYXJrZXIuIC0tPgogICAgICA8dGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLWRldGFpbHMKICAgICAgICBzbG90PSJjb250ZW50IgogICAgICAgIGNsYXNzPSJzZWN0aW9uIgogICAgICAgIGlkPSJkZXRhaWxzIgogICAgICAgIGJhY2tlbmQ9IltbYmFja2VuZF1dIgogICAgICAgIGV4cGVyaW1lbnQtbmFtZT0iW1tleHBlcmltZW50TmFtZV1dIgogICAgICAgIHNlc3Npb24tZ3JvdXA9IltbX3NlbGVjdGVkR3JvdXBdXSIKICAgICAgICB2aXNpYmxlLXNjaGVtYT0iW1tjb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWFdXSIKICAgICAgPgogICAgICA8L3RmLWhwYXJhbXMtc2Vzc2lvbi1ncm91cC1kZXRhaWxzPgogICAgPC9ocGFyYW1zLXNwbGl0LWxheW91dD4KICAgIDxzdHlsZT4KICAgICAgLnNlY3Rpb24gewogICAgICAgIHBhZGRpbmc6IDEwcHg7CiAgICAgIH0KICAgICAgI2NvbnRyb2xzIHsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgZmxleC1iYXNpczogYXV0bzsKICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBtYXgtaGVpZ2h0OiBmaXQtY29udGVudDsKICAgICAgfQogICAgICAjcGxvdCB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIGZsZXgtYmFzaXM6IGF1dG87CiAgICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgbWF4LWhlaWdodDogZml0LWNvbnRlbnQ7CiAgICAgIH0KICAgICAgI3ZhbHVlcyB7CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIGZsZXgtYmFzaXM6IGF1dG87CiAgICAgICAgaGVpZ2h0OiAxMTVweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIG1heC1oZWlnaHQ6IGZpdC1jb250ZW50OwogICAgICB9CiAgICAgICNkZXRhaWxzIHsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgZmxleC1iYXNpczogYXV0bzsKICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBtYXgtaGVpZ2h0OiBmaXQtY29udGVudDsKICAgICAgfQogICAgICB2YWFkaW4tc3BsaXQtbGF5b3V0IHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYCx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxtSXQucHJvdG90eXBlLCJiYWNrZW5kIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLG1JdC5wcm90b3R5cGUsImV4cGVyaW1lbnROYW1lIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLG1JdC5wcm90b3R5cGUsImNvbmZpZ3VyYXRpb24iLHZvaWQgMCksdChbbyh7dHlwZTpBcnJheX0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLG1JdC5wcm90b3R5cGUsInNlc3Npb25Hcm91cHMiLHZvaWQgMCksbUl0PXQoW2koInRmLWhwYXJhbXMtc2NhdHRlci1wbG90LW1hdHJpeC12aWV3IildLG1JdCk7bGV0IGdJdD1jbGFzcyBleHRlbmRzIHlle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9zZWxlY3RlZFRhYj0wfX07Z0l0LnRlbXBsYXRlPV9lYAogICAgPHBhcGVyLWhlYWRlci1wYW5lbD4KICAgICAgPHBhcGVyLXRvb2xiYXIgc2xvdD0iaGVhZGVyIiBjbGFzcz0idGFiLWJhciI+CiAgICAgICAgPHBhcGVyLXRhYnMgc2VsZWN0ZWQ9Int7X3NlbGVjdGVkVGFifX0iIHNsb3Q9InRvcCI+CiAgICAgICAgICA8IS0tIHZpZXctaWQgY2FuIGJlIHVzZWQgYnkgaW50ZWdyYXRpb24gdGVzdHMgdG8gbG9jYXRlIGEgdGFiLgogICAgICAgICAgICAgICBJdCBzaG91bGQgYmUgdGhlIG5hbWUgb2YgdGhlIHJvb3QgZWxlbWVudCBpbXBsZW1lbnRpbmcgdGhlIHZpZXcKICAgICAgICAgICAgICAgd2l0aG91dCB0aGUgJ3RmLWhwYXJhbXMtJyBwcmVmaXguIC0tPgogICAgICAgICAgPHBhcGVyLXRhYiB2aWV3LWlkPSJ0YWJsZS12aWV3Ij4gVEFCTEUgVklFVyA8L3BhcGVyLXRhYj4KICAgICAgICAgIDxwYXBlci10YWIgdmlldy1pZD0icGFyYWxsZWwtY29vcmRzLXZpZXciPgogICAgICAgICAgICBQQVJBTExFTCBDT09SRElOQVRFUyBWSUVXCiAgICAgICAgICA8L3BhcGVyLXRhYj4KICAgICAgICAgIDxwYXBlci10YWIgdmlldy1pZD0ic2NhdHRlci1wbG90LW1hdHJpeC12aWV3Ij4KICAgICAgICAgICAgU0NBVFRFUiBQTE9UIE1BVFJJWCBWSUVXCiAgICAgICAgICA8L3BhcGVyLXRhYj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImhlbHAtYW5kLWZlZWRiYWNrIj4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2J1Z1JlcG9ydFVybF1dIj4KICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZiQ9IltbYnVnUmVwb3J0VXJsXV0iCiAgICAgICAgICAgICAgICB0YXJnZXQ9Il9ibGFuayIKICAgICAgICAgICAgICAgIHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgICAgIGlkPSJidWctcmVwb3J0IgogICAgICAgICAgICAgICAgICByYWlzZWQKICAgICAgICAgICAgICAgICAgdGl0bGU9IlNlbmQgYSBidWcgcmVwb3J0IG9yIGZlYXR1cmUgcmVxdWVzdCIKICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgQnVnIFJlcG9ydCAvIEZlYXR1cmUgUmVxdWVzdAogICAgICAgICAgICAgICAgPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbaGVscFVybF1dIj4KICAgICAgICAgICAgICA8YSBocmVmJD0iW1toZWxwVXJsXV0iIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIG5vcmVmZXJyZXIiPgogICAgICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgICAgICAgICAgIGljb249ImhlbHAtb3V0bGluZSIKICAgICAgICAgICAgICAgICAgdGl0bGU9IlZpZXcgZG9jdW1lbnRhdGlvbiIKICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9wYXBlci10YWJzPgogICAgICA8L3BhcGVyLXRvb2xiYXI+CiAgICAgIDxpcm9uLXBhZ2VzIHNlbGVjdGVkPSJbW19zZWxlY3RlZFRhYl1dIiBjbGFzcz0iZml0IHRhYi12aWV3Ij4KICAgICAgICA8ZGl2IGlkPSIwIiBjbGFzcz0idGFiIj4KICAgICAgICAgIDx0Zi1ocGFyYW1zLXRhYmxlLXZpZXcKICAgICAgICAgICAgYmFja2VuZD0iW1tiYWNrZW5kXV0iCiAgICAgICAgICAgIGV4cGVyaW1lbnQtbmFtZT0iW1tleHBlcmltZW50TmFtZV1dIgogICAgICAgICAgICB2aXNpYmxlLXNjaGVtYT0iW1tjb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWFdXSIKICAgICAgICAgICAgc2Vzc2lvbi1ncm91cHM9Iltbc2Vzc2lvbkdyb3Vwc11dIgogICAgICAgICAgICBlbmFibGUtc2hvdy1tZXRyaWNzCiAgICAgICAgICA+CiAgICAgICAgICA8L3RmLWhwYXJhbXMtdGFibGUtdmlldz4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGlkPSIxIiBjbGFzcz0idGFiIj4KICAgICAgICAgIDx0Zi1ocGFyYW1zLXBhcmFsbGVsLWNvb3Jkcy12aWV3CiAgICAgICAgICAgIGJhY2tlbmQ9IltbYmFja2VuZF1dIgogICAgICAgICAgICBleHBlcmltZW50LW5hbWU9IltbZXhwZXJpbWVudE5hbWVdXSIKICAgICAgICAgICAgY29uZmlndXJhdGlvbj0iW1tjb25maWd1cmF0aW9uXV0iCiAgICAgICAgICAgIHNlc3Npb24tZ3JvdXBzPSJbW3Nlc3Npb25Hcm91cHNdXSIKICAgICAgICAgID4KICAgICAgICAgIDwvdGYtaHBhcmFtcy1wYXJhbGxlbC1jb29yZHMtdmlldz4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGlkPSIyIiBjbGFzcz0idGFiIj4KICAgICAgICAgIDx0Zi1ocGFyYW1zLXNjYXR0ZXItcGxvdC1tYXRyaXgtdmlldwogICAgICAgICAgICBiYWNrZW5kPSJbW2JhY2tlbmRdXSIKICAgICAgICAgICAgZXhwZXJpbWVudC1uYW1lPSJbW2V4cGVyaW1lbnROYW1lXV0iCiAgICAgICAgICAgIGNvbmZpZ3VyYXRpb249IltbY29uZmlndXJhdGlvbl1dIgogICAgICAgICAgICBzZXNzaW9uLWdyb3Vwcz0iW1tzZXNzaW9uR3JvdXBzXV0iCiAgICAgICAgICA+CiAgICAgICAgICA8L3RmLWhwYXJhbXMtc2NhdHRlci1wbG90LW1hdHJpeC12aWV3PgogICAgICAgIDwvZGl2PgogICAgICA8L2lyb24tcGFnZXM+CiAgICA8L3BhcGVyLWhlYWRlci1wYW5lbD4KCiAgICA8c3R5bGU+CiAgICAgIC50YWItdmlldyB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CiAgICAgIC50YWItYmFyIHsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoCiAgICAgICAgICAtLXRiLXRvb2xiYXItYmFja2dyb3VuZC1jb2xvciwKICAgICAgICAgIHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpCiAgICAgICAgKTsKICAgICAgfQogICAgICAudGFiIHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KICAgICAgcGFwZXItdGFicyB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICAtLXBhcGVyLXRhYnMtc2VsZWN0aW9uLWJhci1jb2xvcjogd2hpdGU7CiAgICAgICAgLS1wYXBlci10YWJzLWNvbnRlbnQ6IHsKICAgICAgICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOwogICAgICAgIH0KICAgICAgfQogICAgICB0Zi1ocGFyYW1zLXRhYmxlLXZpZXcgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQogICAgICAuaGVscC1hbmQtZmVlZGJhY2sgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OyAvKiBFbnN1cmUgdGhhdCBpY29ucyBzdGF5IGFsaWduZWQgKi8KICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICB9CiAgICAgICNidWctcmVwb3J0IHsKICAgICAgICBib3JkZXI6IHNvbGlkIGJsYWNrOwogICAgICAgIGJhY2tncm91bmQ6IHJlZDsKICAgICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOwogICAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmRzOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBtYXgtd2lkdGg6IDE1MHB4OwogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgIH0KICAgICAgLmhlbHAtYW5kLWZlZWRiYWNrIGEgewogICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYCx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxnSXQucHJvdG90eXBlLCJiYWNrZW5kIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLGdJdC5wcm90b3R5cGUsImhlbHBVcmwiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sZ0l0LnByb3RvdHlwZSwiYnVnUmVwb3J0VXJsIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLGdJdC5wcm90b3R5cGUsImV4cGVyaW1lbnROYW1lIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLGdJdC5wcm90b3R5cGUsImNvbmZpZ3VyYXRpb24iLHZvaWQgMCksdChbbyh7dHlwZTpBcnJheX0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLGdJdC5wcm90b3R5cGUsInNlc3Npb25Hcm91cHMiLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXJ9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sZ0l0LnByb3RvdHlwZSwiX3NlbGVjdGVkVGFiIix2b2lkIDApLGdJdD10KFtpKCJ0Zi1ocGFyYW1zLXNlc3Npb25zLXBhbmUiKV0sZ0l0KTtjbGFzcyBfSXR7Y29uc3RydWN0b3IodCxlLG49ITApe3RoaXMuX2FwaVVybD10LHRoaXMuX3JlcXVlc3RNYW5hZ2VyPWUsdGhpcy5fdXNlSHR0cEdldD1ufWdldEV4cGVyaW1lbnQodCl7cmV0dXJuIHRoaXMuX3NlbmRSZXF1ZXN0KCJleHBlcmltZW50Iix0KX1nZXREb3dubG9hZFVybCh0LGUsbil7cmV0dXJuIHRoaXMuX2FwaVVybCsiL2Rvd25sb2FkX2RhdGE/IituZXcgVVJMU2VhcmNoUGFyYW1zKHtmb3JtYXQ6dCxjb2x1bW5zVmlzaWJpbGl0eTpKU09OLnN0cmluZ2lmeShuKSxyZXF1ZXN0OkpTT04uc3RyaW5naWZ5KGUpfSl9bGlzdFNlc3Npb25Hcm91cHModCl7cmV0dXJuIHRoaXMuX3NlbmRSZXF1ZXN0KCJzZXNzaW9uX2dyb3VwcyIsdCl9bGlzdE1ldHJpY0V2YWxzKHQpe3JldHVybiB0aGlzLl9zZW5kUmVxdWVzdCgibWV0cmljX2V2YWxzIix0KX1fc2VuZFJlcXVlc3QodCxlKXtpZih0aGlzLl91c2VIdHRwR2V0KXtjb25zdCBuPWVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShlKSk7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodGhpcy5fYXBpVXJsKyIvIit0KyI/cmVxdWVzdD0iK24pfWNvbnN0IG49bmV3IHVyO3JldHVybiBuLndpdGhDcmVkZW50aWFscz0hMCxuLm1ldGhvZFR5cGU9Y3IuUE9TVCxuLmNvbnRlbnRUeXBlPSJ0ZXh0L3BsYWluIixuLmJvZHk9SlNPTi5zdHJpbmdpZnkoZSksdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdFdpdGhPcHRpb25zKHRoaXMuX2FwaVVybCsiLyIrdCxuKX19bGV0IHlJdD1jbGFzcyBleHRlbmRzKHRyKHllKSl7cmVsb2FkKCl7dGhpcy4kWyJxdWVyeS1wYW5lIl0ucmVsb2FkKCl9fTt5SXQudGVtcGxhdGU9X2VgCiAgICA8aHBhcmFtcy1zcGxpdC1sYXlvdXQ+CiAgICAgIDxkaXYgc2xvdD0iY29udGVudCIgY2xhc3M9InNpZGViYXIiPgogICAgICAgIDx0Zi1ocGFyYW1zLXF1ZXJ5LXBhbmUKICAgICAgICAgIGlkPSJxdWVyeS1wYW5lIgogICAgICAgICAgYmFja2VuZD0iW1tiYWNrZW5kXV0iCiAgICAgICAgICBleHBlcmltZW50LW5hbWU9IltbZXhwZXJpbWVudE5hbWVdXSIKICAgICAgICAgIGNvbmZpZ3VyYXRpb249Int7X2NvbmZpZ3VyYXRpb259fSIKICAgICAgICAgIHNlc3Npb24tZ3JvdXBzPSJ7e19zZXNzaW9uR3JvdXBzfX0iCiAgICAgICAgICBkYXRhLWxvYWRlZC13aXRoLW5vbi1lbXB0eS1ocGFyYW1zPSJ7e19kYXRhTG9hZGVkV2l0aE5vbkVtcHR5SHBhcmFtc319IgogICAgICAgICAgZGF0YS1sb2FkZWQtd2l0aC1lbXB0eS1ocGFyYW1zPSJ7e19kYXRhTG9hZGVkV2l0aEVtcHR5SHBhcmFtc319IgogICAgICAgID4KICAgICAgICA8L3RmLWhwYXJhbXMtcXVlcnktcGFuZT4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgc2xvdD0iY29udGVudCIgY2xhc3M9ImNlbnRlciI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTG9hZGVkV2l0aEVtcHR5SHBhcmFtc11dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtd2FybmluZyI+CiAgICAgICAgICAgIDxoMz5ObyBocGFyYW1zIGRhdGEgd2FzIGZvdW5kLjwvaDM+CiAgICAgICAgICAgIDxwPlByb2JhYmxlIGNhdXNlczo8L3A+CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICA8bGk+WW91IGhhdmVu4oCZdCB3cml0dGVuIGFueSBocGFyYW1zIGRhdGEgdG8geW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgIEV2ZW50IGZpbGVzIGFyZSBzdGlsbCBiZWluZyBsb2FkZWQgKHRyeSByZWxvYWRpbmcgdGhpcyBwYWdlKS4KICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgIDxsaT5UZW5zb3JCb2FyZCBjYW7igJl0IGZpbmQgeW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICA8L3VsPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW914oCZcmUgbmV3IHRvIHVzaW5nIFRlbnNvckJvYXJkLCBhbmQgd2FudCB0byBmaW5kIG91dCBob3cgdG8KICAgICAgICAgICAgICBhZGQgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIgogICAgICAgICAgICAgICAgPlJFQURNRTwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgcGVyaGFwcyB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCIKICAgICAgICAgICAgICAgID5UZW5zb3JCb2FyZCB0dXRvcmlhbDwvYQogICAgICAgICAgICAgID4uCiAgICAgICAgICAgIDwvcD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciCiAgICAgICAgICAgICAgICA+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgY29uc2lkZXIgZmlsaW5nIGFuIGlzc3VlIG9uIEdpdEh1Yi4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTG9hZGVkV2l0aE5vbkVtcHR5SHBhcmFtc11dIj4KICAgICAgICAgIDx0Zi1ocGFyYW1zLXNlc3Npb25zLXBhbmUKICAgICAgICAgICAgaWQ9InNlc3Npb25zLXBhbmUiCiAgICAgICAgICAgIGJhY2tlbmQ9IltbYmFja2VuZF1dIgogICAgICAgICAgICBoZWxwLXVybD0iW1toZWxwVXJsXV0iCiAgICAgICAgICAgIGJ1Zy1yZXBvcnQtdXJsPSJbW2J1Z1JlcG9ydFVybF1dIgogICAgICAgICAgICBleHBlcmltZW50LW5hbWU9IltbZXhwZXJpbWVudE5hbWVdXSIKICAgICAgICAgICAgY29uZmlndXJhdGlvbj0iW1tfY29uZmlndXJhdGlvbl1dIgogICAgICAgICAgICBzZXNzaW9uLWdyb3Vwcz0iW1tfc2Vzc2lvbkdyb3Vwc11dIgogICAgICAgICAgPgogICAgICAgICAgPC90Zi1ocGFyYW1zLXNlc3Npb25zLXBhbmU+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICA8L2hwYXJhbXMtc3BsaXQtbGF5b3V0PgogICAgPHN0eWxlPgogICAgICBocGFyYW1zLXNwbGl0LWxheW91dCB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5zaWRlYmFyIHsKICAgICAgICB3aWR0aDogMjAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgbWluLXdpZHRoOiAxMCU7CiAgICAgIH0KCiAgICAgIC5jZW50ZXIgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICB3aWR0aDogODAlOwogICAgICB9CgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgLm5vLWRhdGEtd2FybmluZyB7CiAgICAgICAgbWF4LXdpZHRoOiA1NDBweDsKICAgICAgICBtYXJnaW46IDgwcHggYXV0byAwIGF1dG87CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYCx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixfSXQpXSx5SXQucHJvdG90eXBlLCJiYWNrZW5kIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLHlJdC5wcm90b3R5cGUsImV4cGVyaW1lbnROYW1lIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLHlJdC5wcm90b3R5cGUsImhlbHBVcmwiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0seUl0LnByb3RvdHlwZSwiYnVnUmVwb3J0VXJsIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLHlJdC5wcm90b3R5cGUsIl9jb25maWd1cmF0aW9uIix2b2lkIDApLHQoW28oe3R5cGU6QXJyYXl9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSx5SXQucHJvdG90eXBlLCJfc2Vzc2lvbkdyb3VwcyIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHlJdC5wcm90b3R5cGUsIl9kYXRhTG9hZGVkV2l0aE5vbkVtcHR5SHBhcmFtcyIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHlJdC5wcm90b3R5cGUsIl9kYXRhTG9hZGVkV2l0aEVtcHR5SHBhcmFtcyIsdm9pZCAwKSx5SXQ9dChbaSgidGYtaHBhcmFtcy1tYWluIildLHlJdCk7Y29uc3Qgdkl0PSJ0cnVlIj09PW5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCkuZ2V0KCJ0ZW5zb3Jib2FyZENvbGFiIik7bGV0IGJJdD1jbGFzcyBleHRlbmRzKHRyKHllKSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2JhY2tlbmQ9bmV3IF9JdChncigpLnBsdWdpblJvdXRlKCJocGFyYW1zIiwiIiksbmV3IGhyLHZJdCl9cmVsb2FkKCl7dGhpcy4kWyJocGFyYW1zLW1haW4iXS5yZWxvYWQoKX19O2JJdC50ZW1wbGF0ZT1fZWAKICAgIDwhLS0gVGVuc29yQm9hcmQgZG9lcyBub3Qgc3BlY2lmeSBhbiBleHBlcmltZW50TmFtZS4gQ3VycmVudGx5IGl0IG9ubHkKICAgICAgICAgc3VwcG9ydHMgb25lIGV4cGVyaW1lbnQgcGVyIGludm9jYXRpb24uIC0tPgogICAgPHRmLWhwYXJhbXMtbWFpbgogICAgICBpZD0iaHBhcmFtcy1tYWluIgogICAgICBiYWNrZW5kPSJbW19iYWNrZW5kXV0iCiAgICAgIGV4cGVyaW1lbnQtbmFtZT0iIgogICAgPgogICAgPC90Zi1ocGFyYW1zLW1haW4+CiAgYCx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxiSXQucHJvdG90eXBlLCJfYmFja2VuZCIsdm9pZCAwKSxiSXQ9dChbaSgidGYtaHBhcmFtcy1kYXNoYm9hcmQiKV0sYkl0KTtsZXQgeEl0PWNsYXNzIGV4dGVuZHModHIoeWUpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5hY3R1YWxTaXplPSExLHRoaXMuYnJpZ2h0bmVzc0FkanVzdG1lbnQ9LjUsdGhpcy5jb250cmFzdFBlcmNlbnRhZ2U9MCx0aGlzLl9tZXRhZGF0YUNhbmNlbGxlcj1uZXcgTk8sdGhpcy5faW1hZ2VDYW5jZWxsZXI9bmV3IE5PLHRoaXMuX3N0ZXBzPVtdLHRoaXMuX2lzSW1hZ2VMb2FkaW5nPSExfWdldCBfcnVuQ29sb3IoKXtyZXR1cm4gQU8odGhpcy5ydW4pfWdldCBfaGFzQXRMZWFzdE9uZVN0ZXAoKXt2YXIgdD10aGlzLl9zdGVwcztyZXR1cm4hIXQmJnQubGVuZ3RoPjB9Z2V0IF9oYXNNdWx0aXBsZVN0ZXBzKCl7dmFyIHQ9dGhpcy5fc3RlcHM7cmV0dXJuISF0JiZ0Lmxlbmd0aD4xfWdldCBfY3VycmVudFN0ZXAoKXtyZXR1cm4gdGhpcy5fc3RlcHNbdGhpcy5fc3RlcEluZGV4XXx8bnVsbH1nZXQgX3N0ZXBWYWx1ZSgpe3ZhciB0PXRoaXMuX2N1cnJlbnRTdGVwO3JldHVybiB0P3Quc3RlcDowfWdldCBfY3VycmVudFdhbGxUaW1lKCl7dmFyIHQ9dGhpcy5fY3VycmVudFN0ZXA7cmV0dXJuIHQ/T08odC53YWxsX3RpbWUpOiIifWdldCBfbWF4U3RlcEluZGV4KCl7cmV0dXJuIHRoaXMuX3N0ZXBzLmxlbmd0aC0xfWdldCBfc2FtcGxlVGV4dCgpe3JldHVybmAke3RoaXMuc2FtcGxlKzF9YH1nZXQgX2hhc011bHRpcGxlU2FtcGxlcygpe3JldHVybiB0aGlzLm9mU2FtcGxlcz4xfV9nZXRBcmlhRXhwYW5kZWQoKXtyZXR1cm4gdGhpcy5hY3R1YWxTaXplPyJ0cnVlIjoiZmFsc2UifWF0dGFjaGVkKCl7dGhpcy5yZWxvYWQoKX1yZWxvYWQoKXtpZighdGhpcy5pc0F0dGFjaGVkKXJldHVybjt0aGlzLl9tZXRhZGF0YUNhbmNlbGxlci5jYW5jZWxBbGwoKTtjb25zdCB0PVZPKGdyKCkucGx1Z2luUm91dGUoImltYWdlcyIsIi9pbWFnZXMiKSx7dGFnOnRoaXMudGFnLHJ1bjp0aGlzLnJ1bixzYW1wbGU6dGhpcy5zYW1wbGV9KSxlPXRoaXMuX21ldGFkYXRhQ2FuY2VsbGVyLmNhbmNlbGxhYmxlKCh0PT57aWYodC5jYW5jZWxsZWQpcmV0dXJuO2NvbnN0IGU9dC52YWx1ZS5tYXAodGhpcy5fY3JlYXRlU3RlcERhdHVtLmJpbmQodGhpcykpO3RoaXMuc2V0KCJfc3RlcHMiLGUpLHRoaXMuc2V0KCJfc3RlcEluZGV4IixlLmxlbmd0aC0xKX0pKTt0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbihlKX1fY3JlYXRlU3RlcERhdHVtKHQpe2xldCBlPWdyKCkucGx1Z2luUm91dGUoImltYWdlcyIsIi9pbmRpdmlkdWFsSW1hZ2UiKTtyZXR1cm4gZT1WTyhlLHt0czp0LndhbGxfdGltZX0pLGUrPSImIit0LnF1ZXJ5LHt3YWxsX3RpbWU6bmV3IERhdGUoMWUzKnQud2FsbF90aW1lKSxzdGVwOnQuc3RlcCx1cmw6ZX19X3VwZGF0ZUltYWdlVXJsKCl7dmFyIHQ9dGhpcy5fY3VycmVudFN0ZXAsZT10aGlzLmJyaWdodG5lc3NBZGp1c3RtZW50LG49dGhpcy5jb250cmFzdFBlcmNlbnRhZ2U7aWYoIXQpcmV0dXJuO2NvbnN0IGk9bmV3IEltYWdlO3RoaXMuX2ltYWdlQ2FuY2VsbGVyLmNhbmNlbEFsbCgpLGkub25sb2FkPWkub25lcnJvcj10aGlzLl9pbWFnZUNhbmNlbGxlci5jYW5jZWxsYWJsZSgodD0+e2lmKHQuY2FuY2VsbGVkKXJldHVybjtjb25zdCBlPXRoaXMuJCQoIiNtYWluLWltYWdlLWNvbnRhaW5lciIpO2UudGV4dENvbnRlbnQ9IiIscWkoZSkuYXBwZW5kQ2hpbGQoaSksdGhpcy5zZXQoIl9pc0ltYWdlTG9hZGluZyIsITEpfSkpLmJpbmQodGhpcyksaS5zdHlsZS5maWx0ZXI9YGNvbnRyYXN0KCR7bn0lKSBgLGkuc3R5bGUuZmlsdGVyKz1gYnJpZ2h0bmVzcygke2V9KWAsdGhpcy5zZXQoIl9pc0ltYWdlTG9hZGluZyIsITApLGkuc3JjPXQudXJsfV9oYW5kbGVUYXAodCl7dGhpcy5zZXQoImFjdHVhbFNpemUiLCF0aGlzLmFjdHVhbFNpemUpfV90b0xvY2FsZVN0cmluZyh0KXtyZXR1cm4gdC50b0xvY2FsZVN0cmluZygpfX07eEl0LnRlbXBsYXRlPV9lYAogICAgPHRmLWNhcmQtaGVhZGluZwogICAgICB0YWc9IltbdGFnXV0iCiAgICAgIHJ1bj0iW1tydW5dXSIKICAgICAgZGlzcGxheS1uYW1lPSJbW3RhZ01ldGFkYXRhLmRpc3BsYXlOYW1lXV0iCiAgICAgIGRlc2NyaXB0aW9uPSJbW3RhZ01ldGFkYXRhLmRlc2NyaXB0aW9uXV0iCiAgICAgIGNvbG9yPSJbW19ydW5Db2xvcl1dIgogICAgPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc011bHRpcGxlU2FtcGxlc11dIj4KICAgICAgICA8ZGl2PnNhbXBsZTogW1tfc2FtcGxlVGV4dF1dIG9mIFtbb2ZTYW1wbGVzXV08L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNBdExlYXN0T25lU3RlcF1dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLXJvdyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIj4KICAgICAgICAgICAgc3RlcAogICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQiCiAgICAgICAgICAgICAgPltbX3RvTG9jYWxlU3RyaW5nKF9zdGVwVmFsdWUpXV08L3NwYW4KICAgICAgICAgICAgPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIGhlYWRpbmctcmlnaHQgZGF0ZXRpbWUiPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2N1cnJlbnRXYWxsVGltZV1dIj4KICAgICAgICAgICAgICBbW19jdXJyZW50V2FsbFRpbWVdXQogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJsYWJlbCByaWdodCI+CiAgICAgICAgICAgIDxwYXBlci1zcGlubmVyLWxpdGUgYWN0aXZlIGhpZGRlbiQ9IltbIV9pc0ltYWdlTG9hZGluZ11dIj4KICAgICAgICAgICAgPC9wYXBlci1zcGlubmVyLWxpdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNNdWx0aXBsZVN0ZXBzXV0iPgogICAgICAgIDxkaXY+CiAgICAgICAgICA8cGFwZXItc2xpZGVyCiAgICAgICAgICAgIGlkPSJzdGVwcyIKICAgICAgICAgICAgaW1tZWRpYXRlLXZhbHVlPSJ7e19zdGVwSW5kZXh9fSIKICAgICAgICAgICAgbWF4PSJbW19tYXhTdGVwSW5kZXhdXSIKICAgICAgICAgICAgbWF4LW1hcmtlcnM9IltbX21heFN0ZXBJbmRleF1dIgogICAgICAgICAgICBzbmFwcwogICAgICAgICAgICBzdGVwPSIxIgogICAgICAgICAgICB2YWx1ZT0ie3tfc3RlcEluZGV4fX0iCiAgICAgICAgICA+PC9wYXBlci1zbGlkZXI+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L3RmLWNhcmQtaGVhZGluZz4KCiAgICA8IS0tIFNlbWFudGljYWxseSBhIGJ1dHRvbiBidXQgPGltZz4gaW5zaWRlIGEgPGJ1dHRvbj4gZGlzYWxsb3dzIHVzZXIgdG8gZG8KICAgIGFuIGludGVyZXN0aW5nIG9wZXJhdGlvbiBsaWtlICJDb3B5IEltYWdlIiBpbiBub24tQ2hyb21pdW0gYnJvd3NlcnMuIC0tPgogICAgPGEKICAgICAgaWQ9Im1haW4taW1hZ2UtY29udGFpbmVyIgogICAgICByb2xlPSJidXR0b24iCiAgICAgIGFyaWEtbGFiZWw9IlRvZ2dsZSBhY3R1YWwgc2l6ZSIKICAgICAgYXJpYS1leHBhbmRlZCQ9IltbX2dldEFyaWFFeHBhbmRlZChhY3R1YWxTaXplKV1dIgogICAgICBvbi10YXA9Il9oYW5kbGVUYXAiCiAgICA+PC9hPgoKICAgIDxzdHlsZSBpbmNsdWRlPSJ0Zi1jYXJkLWhlYWRpbmctc3R5bGUiPgogICAgICAvKiogTWFrZSBidXR0b24gYSBkaXYuICovCiAgICAgIGJ1dHRvbiB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgYmFja2dyb3VuZDogbm9uZTsKICAgICAgICBib3JkZXI6IDA7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQoKICAgICAgLyoqIEZpcmVmb3g6IEdldCByaWQgb2YgZG90dGVkIGxpbmUgaW5zaWRlIGJ1dHRvbi4gKi8KICAgICAgYnV0dG9uOjotbW96LWZvY3VzLWlubmVyIHsKICAgICAgICBib3JkZXI6IDA7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQoKICAgICAgLyoqIEZpcmVmb3g6IFNpbXVsYXRlIENocm9tZSdzIG91dGVyIGdsb3cgb24gYnV0dG9uIHdoZW4gZm9jdXNlZC4gKi8KICAgICAgYnV0dG9uOi1tb3otZm9jdXNyaW5nIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJveC1zaGFkb3c6IDBweCAwcHggMXB4IDJweCBIaWdobGlnaHQ7CiAgICAgIH0KCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMzUwcHg7CiAgICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtYXJnaW46IDAgMTVweCA0MHB4IDA7CiAgICAgICAgb3ZlcmZsb3cteDogYXV0bzsKICAgICAgfQoKICAgICAgLyoqIFdoZW4gYWN0dWFsIHNpemUgc2hvd24gaXMgb24sIHVzZSB0aGUgYWN0dWFsIGltYWdlIHdpZHRoLiAqLwogICAgICA6aG9zdChbYWN0dWFsLXNpemVdKSB7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICAgIHdpZHRoOiBhdXRvOwogICAgICB9CgogICAgICA6aG9zdChbYWN0dWFsLXNpemVdKSAjbWFpbi1pbWFnZS1jb250YWluZXIgewogICAgICAgIG1heC1oZWlnaHQ6IG5vbmU7CiAgICAgICAgd2lkdGg6IGF1dG87CiAgICAgIH0KCiAgICAgIDpob3N0KFthY3R1YWwtc2l6ZV0pICNtYWluLWltYWdlLWNvbnRhaW5lciBpbWcgewogICAgICAgIHdpZHRoOiBhdXRvOwogICAgICB9CgogICAgICBwYXBlci1zcGlubmVyLWxpdGUgewogICAgICAgIHdpZHRoOiAxNHB4OwogICAgICAgIGhlaWdodDogMTRweDsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdGV4dC1ib3R0b207CiAgICAgICAgLS1wYXBlci1zcGlubmVyLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgfQoKICAgICAgI3N0ZXBzIHsKICAgICAgICBoZWlnaHQ6IDE1cHg7CiAgICAgICAgbWFyZ2luOiAwIDAgMCAtMTVweDsKICAgICAgICAvKgogICAgICAgICAqIDMxIGNvbWVzIGZyb20gYWRkaW5nIGEgcGFkZGluZyBvZiAxNXB4IGZyb20gYm90aCBzaWRlcyBvZiB0aGUKICAgICAgICAgKiBwYXBlci1zbGlkZXIsIHN1YnRyYWN0aW5nIDFweCBzbyB0aGF0IHRoZSBzbGlkZXIgd2lkdGggYWxpZ25zCiAgICAgICAgICogd2l0aCB0aGUgaW1hZ2UgKHRoZSBsYXN0IHNsaWRlciBtYXJrZXIgdGFrZXMgdXAgMXB4KSwgYW5kCiAgICAgICAgICogYWRkaW5nIDJweCB0byBhY2NvdW50IGZvciBhIGJvcmRlciBvZiAxcHggb24gYm90aCBzaWRlcyBvZgogICAgICAgICAqIHRoZSBpbWFnZS4gMzAgLSAxICsgMi4KICAgICAgICAgKi8KICAgICAgICB3aWR0aDogY2FsYygxMDAlICsgMzFweCk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItYWN0aXZlLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLXN0YXJ0LWJvcmRlci1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItbWFya2Vycy1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItcGluLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1waW4tc3RhcnQtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICB9CgogICAgICAjbWFpbi1pbWFnZS1jb250YWluZXIgewogICAgICAgIG1heC1oZWlnaHQ6IDEwMjRweDsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgfQoKICAgICAgI21haW4taW1hZ2UtY29udGFpbmVyIGltZyB7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGltYWdlLXJlbmRlcmluZzogLW1vei1jcmlzcC1lZGdlczsKICAgICAgICBpbWFnZS1yZW5kZXJpbmc6IHBpeGVsYXRlZDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgIH0KCiAgICAgIHBhcGVyLWljb24tYnV0dG9uIHsKICAgICAgICBjb2xvcjogIzIxOTZmMzsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMDAlOwogICAgICAgIHdpZHRoOiAzMnB4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBwYWRkaW5nOiA0cHg7CiAgICAgIH0KICAgICAgcGFwZXItaWNvbi1idXR0b25bc2VsZWN0ZWRdIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10Yi11aS1saWdodC1hY2NlbnQpOwogICAgICB9CiAgICAgIFtoaWRkZW5dIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgogIGAsdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0seEl0LnByb3RvdHlwZSwicnVuIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLHhJdC5wcm90b3R5cGUsInRhZyIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSx4SXQucHJvdG90eXBlLCJzYW1wbGUiLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXJ9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0seEl0LnByb3RvdHlwZSwib2ZTYW1wbGVzIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLHhJdC5wcm90b3R5cGUsInRhZ01ldGFkYXRhIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHhJdC5wcm90b3R5cGUsImFjdHVhbFNpemUiLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXJ9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0seEl0LnByb3RvdHlwZSwiYnJpZ2h0bmVzc0FkanVzdG1lbnQiLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXJ9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0seEl0LnByb3RvdHlwZSwiY29udHJhc3RQZXJjZW50YWdlIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLGhyKV0seEl0LnByb3RvdHlwZSwicmVxdWVzdE1hbmFnZXIiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0seEl0LnByb3RvdHlwZSwiX21ldGFkYXRhQ2FuY2VsbGVyIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLHhJdC5wcm90b3R5cGUsIl9pbWFnZUNhbmNlbGxlciIsdm9pZCAwKSx0KFtvKHt0eXBlOkFycmF5LG5vdGlmeTohMH0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLHhJdC5wcm90b3R5cGUsIl9zdGVwcyIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcixub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0seEl0LnByb3RvdHlwZSwiX3N0ZXBJbmRleCIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHhJdC5wcm90b3R5cGUsIl9pc0ltYWdlTG9hZGluZyIsdm9pZCAwKSx0KFtzKCJydW4iKSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSx4SXQucHJvdG90eXBlLCJfcnVuQ29sb3IiLG51bGwpLHQoW3MoIl9zdGVwcyIpLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSx4SXQucHJvdG90eXBlLCJfaGFzQXRMZWFzdE9uZVN0ZXAiLG51bGwpLHQoW3MoIl9zdGVwcyIpLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSx4SXQucHJvdG90eXBlLCJfaGFzTXVsdGlwbGVTdGVwcyIsbnVsbCksdChbcygiX3N0ZXBzIiwiX3N0ZXBJbmRleCIpLGUoImRlc2lnbjp0eXBlIixPYmplY3QpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLHhJdC5wcm90b3R5cGUsIl9jdXJyZW50U3RlcCIsbnVsbCksdChbcygiX2N1cnJlbnRTdGVwIiksZSgiZGVzaWduOnR5cGUiLE51bWJlciksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0seEl0LnByb3RvdHlwZSwiX3N0ZXBWYWx1ZSIsbnVsbCksdChbcygiX2N1cnJlbnRTdGVwIiksZSgiZGVzaWduOnR5cGUiLFN0cmluZyksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0seEl0LnByb3RvdHlwZSwiX2N1cnJlbnRXYWxsVGltZSIsbnVsbCksdChbcygiX3N0ZXBzIiksZSgiZGVzaWduOnR5cGUiLE51bWJlciksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0seEl0LnByb3RvdHlwZSwiX21heFN0ZXBJbmRleCIsbnVsbCksdChbcygic2FtcGxlIiksZSgiZGVzaWduOnR5cGUiLFN0cmluZyksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0seEl0LnByb3RvdHlwZSwiX3NhbXBsZVRleHQiLG51bGwpLHQoW3MoIm9mU2FtcGxlcyIpLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSx4SXQucHJvdG90eXBlLCJfaGFzTXVsdGlwbGVTYW1wbGVzIixudWxsKSx0KFthKCJydW4iLCJ0YWciKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLHhJdC5wcm90b3R5cGUsInJlbG9hZCIsbnVsbCksdChbYSgiX2N1cnJlbnRTdGVwIiwiYnJpZ2h0bmVzc0FkanVzdG1lbnQiLCJjb250cmFzdFBlcmNlbnRhZ2UiKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLHhJdC5wcm90b3R5cGUsIl91cGRhdGVJbWFnZVVybCIsbnVsbCkseEl0PXQoW2koInRmLWltYWdlLWxvYWRlciIpXSx4SXQpO2xldCB3SXQ9Y2xhc3MgZXh0ZW5kcyh0cih5ZSkpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnJlbG9hZE9uUmVhZHk9ITAsdGhpcy5fZGVmYXVsdEJyaWdodG5lc3NBZGp1c3RtZW50PTEsdGhpcy5fZGVmYXVsdENvbnRyYXN0UGVyY2VudGFnZT0xMDAsdGhpcy5fYnJpZ2h0bmVzc0FkanVzdG1lbnQ9MSx0aGlzLl9jb250cmFzdFBlcmNlbnRhZ2U9MTAwLHRoaXMuX3JlcXVlc3RNYW5hZ2VyPW5ldyBocn1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5yZWxvYWRPblJlYWR5JiZ0aGlzLnJlbG9hZCgpfXJlbG9hZCgpe3RoaXMuX2ZldGNoVGFncygpLnRoZW4oKCgpPT57dGhpcy5fcmVsb2FkSW1hZ2VzKCl9KSl9X2ZldGNoVGFncygpe2NvbnN0IHQ9Z3IoKS5wbHVnaW5Sb3V0ZSgiaW1hZ2VzIiwiL3RhZ3MiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKCh0PT57aWYod2UuaXNFcXVhbCh0LHRoaXMuX3J1blRvVGFnSW5mbykpcmV0dXJuO2NvbnN0IGU9b3Iod2UubWFwVmFsdWVzKHQsKHQ9Pk9iamVjdC5rZXlzKHQpKSkpO3RoaXMuc2V0KCJfZGF0YU5vdEZvdW5kIiwwPT09ZS5sZW5ndGgpLHRoaXMuc2V0KCJfcnVuVG9UYWdJbmZvIix0KSx0aGlzLmFzeW5jKCgoKT0+e3RoaXMuc2V0KCJfY2F0ZWdvcmllc0RvbVJlYWR5IiwhMCl9KSl9KSl9X3JlbG9hZEltYWdlcygpe3RoaXMucm9vdC5xdWVyeVNlbGVjdG9yQWxsKCJ0Zi1pbWFnZS1sb2FkZXIiKS5mb3JFYWNoKCh0PT57dC5yZWxvYWQoKX0pKX1fc2hvdWxkT3Blbih0KXtyZXR1cm4gdDw9Mn1fcmVzZXRCcmlnaHRuZXNzKCl7dGhpcy5fYnJpZ2h0bmVzc0FkanVzdG1lbnQ9dGhpcy5fZGVmYXVsdEJyaWdodG5lc3NBZGp1c3RtZW50fV9yZXNldENvbnRyYXN0KCl7dGhpcy5fY29udHJhc3RQZXJjZW50YWdlPXRoaXMuX2RlZmF1bHRDb250cmFzdFBlcmNlbnRhZ2V9Z2V0IF9icmlnaHRuZXNzSXNEZWZhdWx0KCl7cmV0dXJuIHRoaXMuX2JyaWdodG5lc3NBZGp1c3RtZW50PT09dGhpcy5fZGVmYXVsdEJyaWdodG5lc3NBZGp1c3RtZW50fWdldCBfY29udHJhc3RJc0RlZmF1bHQoKXtyZXR1cm4gdGhpcy5fY29udHJhc3RQZXJjZW50YWdlPT09dGhpcy5fZGVmYXVsdENvbnRyYXN0UGVyY2VudGFnZX1nZXQgX2NhdGVnb3JpZXMoKXt2YXIgdD10aGlzLl9ydW5Ub1RhZ0luZm8sZT10aGlzLl9zZWxlY3RlZFJ1bnMsbj10aGlzLl90YWdGaWx0ZXI7ZnVuY3Rpb24gaShlKXtjb25zdCBuPXRbZS5ydW5dW2UudGFnXS5zYW1wbGVzO3JldHVybiB3ZS5yYW5nZShuKS5tYXAoKHQ9Pk9iamVjdC5hc3NpZ24oe30sZSx7c2FtcGxlOnQsb2ZTYW1wbGVzOm59KSkpfXJldHVybiBTcih3ZS5tYXBWYWx1ZXModCwodD0+T2JqZWN0LmtleXModCkpKSxlLG4pLm1hcCgodD0+T2JqZWN0LmFzc2lnbih7fSx0LHtpdGVtczpbXS5jb25jYXQuYXBwbHkoW10sdC5pdGVtcy5tYXAoaSkpfSkpKX1fdGFnTWV0YWRhdGEodCxlLG4pe3JldHVybiB0W2VdW25dfX07dmFyIFNJdCxNSXQsRUl0O3dJdC50ZW1wbGF0ZT1fZWAKICAgIDx0Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyIiBzbG90PSJzaWRlYmFyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZXR0aW5ncyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJsaW5lLWl0ZW0iPgogICAgICAgICAgICAgIDxwYXBlci1jaGVja2JveCBjaGVja2VkPSJ7e19hY3R1YWxTaXplfX0iCiAgICAgICAgICAgICAgICA+U2hvdyBhY3R1YWwgaW1hZ2Ugc2l6ZTwvcGFwZXItY2hlY2tib3gKICAgICAgICAgICAgICA+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgICA8aDMgY2xhc3M9InRvb2x0aXAtY29udGFpbmVyIj5CcmlnaHRuZXNzIGFkanVzdG1lbnQ8L2gzPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJyZXNldHRhYmxlLXNsaWRlci1jb250YWluZXIiPgogICAgICAgICAgICAgIDxwYXBlci1zbGlkZXIKICAgICAgICAgICAgICAgIG1pbj0iMCIKICAgICAgICAgICAgICAgIG1heD0iMiIKICAgICAgICAgICAgICAgIHNuYXBzCiAgICAgICAgICAgICAgICBwaW4KICAgICAgICAgICAgICAgIHN0ZXA9IjAuMDEiCiAgICAgICAgICAgICAgICB2YWx1ZT0ie3tfYnJpZ2h0bmVzc0FkanVzdG1lbnR9fSIKICAgICAgICAgICAgICAgIGltbWVkaWF0ZS12YWx1ZT0ie3tfYnJpZ2h0bmVzc0FkanVzdG1lbnR9fSIKICAgICAgICAgICAgICA+PC9wYXBlci1zbGlkZXI+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgICAgICAgY2xhc3M9IngtYnV0dG9uIgogICAgICAgICAgICAgICAgb24tdGFwPSJfcmVzZXRCcmlnaHRuZXNzIgogICAgICAgICAgICAgICAgZGlzYWJsZWQ9IltbX2JyaWdodG5lc3NJc0RlZmF1bHRdXSIKICAgICAgICAgICAgICAgID5SZXNldDwvcGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgICAgPGgzIGNsYXNzPSJ0b29sdGlwLWNvbnRhaW5lciI+Q29udHJhc3QgYWRqdXN0bWVudDwvaDM+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InJlc2V0dGFibGUtc2xpZGVyLWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgPHBhcGVyLXNsaWRlcgogICAgICAgICAgICAgICAgbWluPSIwIgogICAgICAgICAgICAgICAgbWF4PSI1MDAiCiAgICAgICAgICAgICAgICBzbmFwcwogICAgICAgICAgICAgICAgcGluCiAgICAgICAgICAgICAgICBzdGVwPSIxIgogICAgICAgICAgICAgICAgdmFsdWU9Int7X2NvbnRyYXN0UGVyY2VudGFnZX19IgogICAgICAgICAgICAgICAgaW1tZWRpYXRlLXZhbHVlPSJ7e19jb250cmFzdFBlcmNlbnRhZ2V9fSIKICAgICAgICAgICAgICA+PC9wYXBlci1zbGlkZXI+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgICAgICAgY2xhc3M9IngtYnV0dG9uIgogICAgICAgICAgICAgICAgb24tdGFwPSJfcmVzZXRDb250cmFzdCIKICAgICAgICAgICAgICAgIGRpc2FibGVkPSJbW19jb250cmFzdElzRGVmYXVsdF1dIgogICAgICAgICAgICAgICAgPlJlc2V0PC9wYXBlci1idXR0b24KICAgICAgICAgICAgICA+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIHJ1bnMtc2VsZWN0b3IiPgogICAgICAgICAgPHRmLXJ1bnMtc2VsZWN0b3IKICAgICAgICAgICAgaWQ9InJ1bnMtc2VsZWN0b3IiCiAgICAgICAgICAgIHNlbGVjdGVkLXJ1bnM9Int7X3NlbGVjdGVkUnVuc319IgogICAgICAgICAgPjwvdGYtcnVucy1zZWxlY3Rvcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNlbnRlciIgc2xvdD0iY2VudGVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtd2FybmluZyI+CiAgICAgICAgICAgIDxoMz5ObyBpbWFnZSBkYXRhIHdhcyBmb3VuZC48L2gzPgogICAgICAgICAgICA8cD5Qcm9iYWJsZSBjYXVzZXM6PC9wPgogICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgPGxpPllvdSBoYXZlbuKAmXQgd3JpdHRlbiBhbnkgaW1hZ2UgZGF0YSB0byB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgICAgPGxpPlRlbnNvckJvYXJkIGNhbuKAmXQgZmluZCB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgIDwvdWw+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3XigJlyZSBuZXcgdG8gdXNpbmcgVGVuc29yQm9hcmQsIGFuZCB3YW50IHRvIGZpbmQgb3V0IGhvdyB0bwogICAgICAgICAgICAgIGFkZCBkYXRhIGFuZCBzZXQgdXAgeW91ciBldmVudCBmaWxlcywgY2hlY2sgb3V0IHRoZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQiCiAgICAgICAgICAgICAgICA+UkVBRE1FPC9hCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIGFuZCBwZXJoYXBzIHRoZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9nZXRfc3RhcnRlZC9zdW1tYXJpZXNfYW5kX3RlbnNvcmJvYXJkIgogICAgICAgICAgICAgICAgPlRlbnNvckJvYXJkIHR1dG9yaWFsPC9hCiAgICAgICAgICAgICAgPi4KICAgICAgICAgICAgPC9wPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW91IHRoaW5rIFRlbnNvckJvYXJkIGlzIGNvbmZpZ3VyZWQgcHJvcGVybHksIHBsZWFzZSBzZWUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI215LXRlbnNvcmJvYXJkLWlzbnQtc2hvd2luZy1hbnktZGF0YS13aGF0cy13cm9uZyIKICAgICAgICAgICAgICAgID50aGUgc2VjdGlvbiBvZiB0aGUgUkVBRE1FIGRldm90ZWQgdG8gbWlzc2luZyBkYXRhIHByb2JsZW1zPC9hCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIGFuZCBjb25zaWRlciBmaWxpbmcgYW4gaXNzdWUgb24gR2l0SHViLgogICAgICAgICAgICA8L3A+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDx0Zi10YWctZmlsdGVyZXIgdGFnLWZpbHRlcj0ie3tfdGFnRmlsdGVyfX0iPjwvdGYtdGFnLWZpbHRlcmVyPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfY2F0ZWdvcmllc11dIiBhcz0iY2F0ZWdvcnkiPgogICAgICAgICAgICA8dGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXcKICAgICAgICAgICAgICBjYXRlZ29yeT0iW1tjYXRlZ29yeV1dIgogICAgICAgICAgICAgIGluaXRpYWwtb3BlbmVkPSJbW19zaG91bGRPcGVuKGluZGV4KV1dIgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICAgICAgPHRmLWltYWdlLWxvYWRlcgogICAgICAgICAgICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgICAgICAgICAgIHJ1bj0iW1tpdGVtLnJ1bl1dIgogICAgICAgICAgICAgICAgICB0YWc9IltbaXRlbS50YWddXSIKICAgICAgICAgICAgICAgICAgc2FtcGxlPSJbW2l0ZW0uc2FtcGxlXV0iCiAgICAgICAgICAgICAgICAgIG9mLXNhbXBsZXM9IltbaXRlbS5vZlNhbXBsZXNdXSIKICAgICAgICAgICAgICAgICAgdGFnLW1ldGFkYXRhPSJbW190YWdNZXRhZGF0YShfcnVuVG9UYWdJbmZvLCBpdGVtLnJ1biwgaXRlbS50YWcpXV0iCiAgICAgICAgICAgICAgICAgIHJlcXVlc3QtbWFuYWdlcj0iW1tfcmVxdWVzdE1hbmFnZXJdXSIKICAgICAgICAgICAgICAgICAgYWN0dWFsLXNpemU9IltbX2FjdHVhbFNpemVdXSIKICAgICAgICAgICAgICAgICAgYnJpZ2h0bmVzcy1hZGp1c3RtZW50PSJbW19icmlnaHRuZXNzQWRqdXN0bWVudF1dIgogICAgICAgICAgICAgICAgICBjb250cmFzdC1wZXJjZW50YWdlPSJbW19jb250cmFzdFBlcmNlbnRhZ2VdXSIKICAgICAgICAgICAgICAgID48L3RmLWltYWdlLWxvYWRlcj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3RmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGYtZGFzaGJvYXJkLWxheW91dD4KICAgIDxzdHlsZSBpbmNsdWRlPSJkYXNoYm9hcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIC5yZXNldHRhYmxlLXNsaWRlci1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KICAgICAgLnJlc2V0dGFibGUtc2xpZGVyLWNvbnRhaW5lciBwYXBlci1zbGlkZXIgewogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgfQogICAgICAucmVzZXR0YWJsZS1zbGlkZXItY29udGFpbmVyIHBhcGVyLWJ1dHRvbiB7CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICB9CiAgICAgIC5yZXNldHRhYmxlLXNsaWRlci1jb250YWluZXIgcGFwZXItYnV0dG9uW2Rpc2FibGVkXSB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdW5zZXQ7CiAgICAgIH0KICAgICAgLngtYnV0dG9uIHsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tdGItdWktbGlnaHQtYWNjZW50KTsKICAgICAgICBjb2xvcjogdmFyKC0tdGItdWktZGFyay1hY2NlbnQpOwogICAgICB9CiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CiAgICAgIHBhcGVyLXNsaWRlciB7CiAgICAgICAgLS1wYXBlci1zbGlkZXItYWN0aXZlLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLXN0YXJ0LWJvcmRlci1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItbWFya2Vycy1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItcGluLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1waW4tc3RhcnQtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICB9CiAgICA8L3N0eWxlPgogIGAsdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSx3SXQucHJvdG90eXBlLCJyZWxvYWRPblJlYWR5Iix2b2lkIDApLHQoW28oe3R5cGU6QXJyYXl9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSx3SXQucHJvdG90eXBlLCJfc2VsZWN0ZWRSdW5zIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLHdJdC5wcm90b3R5cGUsIl9ydW5Ub1RhZ0luZm8iLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSx3SXQucHJvdG90eXBlLCJfZGF0YU5vdEZvdW5kIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sd0l0LnByb3RvdHlwZSwiX2FjdHVhbFNpemUiLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXJ9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sd0l0LnByb3RvdHlwZSwiX2RlZmF1bHRCcmlnaHRuZXNzQWRqdXN0bWVudCIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSx3SXQucHJvdG90eXBlLCJfZGVmYXVsdENvbnRyYXN0UGVyY2VudGFnZSIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSx3SXQucHJvdG90eXBlLCJfYnJpZ2h0bmVzc0FkanVzdG1lbnQiLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXJ9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sd0l0LnByb3RvdHlwZSwiX2NvbnRyYXN0UGVyY2VudGFnZSIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx3SXQucHJvdG90eXBlLCJfdGFnRmlsdGVyIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sd0l0LnByb3RvdHlwZSwiX2NhdGVnb3JpZXNEb21SZWFkeSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSx3SXQucHJvdG90eXBlLCJfcmVxdWVzdE1hbmFnZXIiLHZvaWQgMCksdChbcygiX2JyaWdodG5lc3NBZGp1c3RtZW50IiksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLHdJdC5wcm90b3R5cGUsIl9icmlnaHRuZXNzSXNEZWZhdWx0IixudWxsKSx0KFtzKCJfY29udHJhc3RQZXJjZW50YWdlIiksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLHdJdC5wcm90b3R5cGUsIl9jb250cmFzdElzRGVmYXVsdCIsbnVsbCksdChbcygiX3J1blRvVGFnSW5mbyIsIl9zZWxlY3RlZFJ1bnMiLCJfdGFnRmlsdGVyIiwiX2NhdGVnb3JpZXNEb21SZWFkeSIpLGUoImRlc2lnbjp0eXBlIixBcnJheSksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sd0l0LnByb3RvdHlwZSwiX2NhdGVnb3JpZXMiLG51bGwpLHdJdD10KFtpKCJ0Zi1pbWFnZS1kYXNoYm9hcmQiKV0sd0l0KSwoZnVuY3Rpb24odCl7dFt0LkNBTkNFTExFRD0xXT0iQ0FOQ0VMTEVEIn0pKFNJdHx8KFNJdD17fSkpLChmdW5jdGlvbih0KXt0W3QuVkVSVEVYPTFdPSJWRVJURVgiLHRbdC5GQUNFPTJdPSJGQUNFIix0W3QuQ09MT1I9M109IkNPTE9SIn0pKE1JdHx8KE1JdD17fSkpLChmdW5jdGlvbih0KXt0LlZFUlRFWD0iZmxvYXQzMiIsdC5GQUNFPSJpbnQzMiIsdC5DT0xPUj0idWludDgifSkoRUl0fHwoRUl0PXt9KSk7Y2xhc3MgVEl0e2NvbnN0cnVjdG9yKHQpe3RoaXMuX2NhbmNlbGxlcj1uZXcgTk8sdGhpcy5fcmVxdWVzdE1hbmFnZXI9dH1yZWxvYWQodCxlLG4pe3JldHVybiB0aGlzLl9jYW5jZWxsZXIuY2FuY2VsQWxsKCksdGhpcy5fZmV0Y2hNZXRhZGF0YSh0LGUsbil9X2ZldGNoRGF0YUJ5U3RlcCh0LGUsbixpLHIsbyl7Y29uc3QgYT1ncigpLnBsdWdpblJvdXRlKCJtZXNoIiwiL2RhdGEiLG5ldyBVUkxTZWFyY2hQYXJhbXMoe3RhZzplLHJ1bjp0LGNvbnRlbnRfdHlwZTpuLHNhbXBsZTpTdHJpbmcoaSksc3RlcDpTdHJpbmcocil9KSkscz1mdW5jdGlvbih0KXtsZXQgZT1bXTtmb3IobGV0IG49MDtuPHQubGVuZ3RoLzM7bisrKXtsZXQgaT1bXTtmb3IobGV0IGU9MDtlPDM7ZSsrKWkucHVzaCh0WzMqbitlXSk7ZS5wdXNoKGkpfXJldHVybiBlfSxsPXRoaXMuX2NhbmNlbGxlci5jYW5jZWxsYWJsZSgodD0+e2lmKHQuY2FuY2VsbGVkKXJldHVybiBQcm9taXNlLnJlamVjdCh7Y29kZTpTSXQuQ0FOQ0VMTEVELG1lc3NhZ2U6IlJlc3BvbnNlIHdhcyBpbnZhbGlkYXRlZC4ifSk7bGV0IGU9dC52YWx1ZTtzd2l0Y2gobil7Y2FzZSJWRVJURVgiOm8udmVydGljZXM9cyhuZXcgRmxvYXQzMkFycmF5KGUpKTticmVhaztjYXNlIkZBQ0UiOm8uZmFjZXM9cyhuZXcgSW50MzJBcnJheShlKSk7YnJlYWs7Y2FzZSJDT0xPUiI6by5jb2xvcnM9cyhuZXcgVWludDhBcnJheShlKSl9cmV0dXJuIG99KSk7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLmZldGNoKGEse21ldGhvZDoiR0VUIixoZWFkZXJzOntyZXNwb25zZVR5cGU6ImFycmF5YnVmZmVyIixjb250ZW50VHlwZTpFSXRbbl19fSkudGhlbigodD0+dC5hcnJheUJ1ZmZlcigpKSkudGhlbihsKX1mZXRjaERhdGEodCxlLG4saSl7bGV0IHI9W10sbz1uZXcgTWFwO3JldHVybiBPYmplY3Qua2V5cyhNSXQpLmZvckVhY2goKGE9Pnt0LmNvbXBvbmVudHMmMTw8TUl0W2FdJiZyLnB1c2godGhpcy5fZmV0Y2hEYXRhQnlTdGVwKGUsbixhLGksdC5zdGVwLG8pKX0pKSxQcm9taXNlLmFsbChyKX1fZmV0Y2hNZXRhZGF0YSh0LGUsbil7dGhpcy5fY2FuY2VsbGVyLmNhbmNlbEFsbCgpO2NvbnN0IGk9Z3IoKS5wbHVnaW5Sb3V0ZSgibWVzaCIsIi9tZXNoZXMiLG5ldyBVUkxTZWFyY2hQYXJhbXMoe3RhZzplLHJ1bjp0LHNhbXBsZTpufSkpLHI9dGhpcy5fY2FuY2VsbGVyLmNhbmNlbGxhYmxlKCh0PT50LmNhbmNlbGxlZD9Qcm9taXNlLnJlamVjdCh7Y29kZTpTSXQuQ0FOQ0VMTEVELG1lc3NhZ2U6IlJlc3BvbnNlIHdhcyBpbnZhbGlkYXRlZC4ifSk6dC52YWx1ZSkpO3JldHVybiB0aGlzLl9yZXF1ZXN0TWFuYWdlci5mZXRjaChpKS50aGVuKCh0PT50Lmpzb24oKSkpLnRoZW4ocikudGhlbih0aGlzLl9wcm9jZXNzTWV0YWRhdGEuYmluZCh0aGlzKSl9X3Byb2Nlc3NNZXRhZGF0YSh0KXtpZighdClyZXR1cm47Y29uc3QgZT1uZXcgTWFwO2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKXtsZXQgaT10W25dO2UuaGFzKGkuc3RlcCl8fGUuc2V0KGkuc3RlcCxbXSksZS5nZXQoaS5zdGVwKS5wdXNoKGkpfWxldCBuPVtdO3JldHVybiBlLmZvckVhY2goKHQ9PntsZXQgZT10aGlzLl9jcmVhdGVTdGVwRGF0dW0odFswXSk7bi5wdXNoKGUpfSkpLG59X2NyZWF0ZVN0ZXBEYXR1bSh0KXtyZXR1cm57d2FsbF90aW1lOm5ldyBEYXRlKDFlMyp0LndhbGxfdGltZSksc3RlcDp0LnN0ZXAsY29uZmlnOnQuY29uZmlnLGNvbnRlbnRfdHlwZTp0LmNvbnRlbnRfdHlwZSxjb21wb25lbnRzOnQuY29tcG9uZW50c319fWNvbnN0IENJdD0iMTI1IixBSXQ9e0xFRlQ6MCxNSURETEU6MSxSSUdIVDoyLFJPVEFURTowLERPTExZOjEsUEFOOjJ9LGtJdD17Uk9UQVRFOjAsUEFOOjEsRE9MTFlfUEFOOjIsRE9MTFlfUk9UQVRFOjN9LExJdD0xMDAsUEl0PTMwMCxOSXQ9MzAxLElJdD0zMDIsT0l0PTMwMyxSSXQ9MzA0LHpJdD0zMDYsREl0PTMwNyxCSXQ9MWUzLEhJdD0xMDAxLEZJdD0xMDAyLFZJdD0xMDAzLFVJdD0xMDA0LGpJdD0xMDA1LEdJdD0xMDA2LFdJdD0xMDA3LHFJdD0xMDA4LFlJdD0xMDA5LFhJdD0xMDEyLCRJdD0xMDE0LEtJdD0xMDE1LFpJdD0xMDE2LEpJdD0xMDIwLFFJdD0xMDIyLHRPdD0xMDIzLGVPdD0xMDI2LG5PdD0xMDI3LGlPdD0zMzc3NixyT3Q9MzM3Nzcsb090PTMzNzc4LGFPdD0zMzc3OSxzT3Q9MzU4NDAsbE90PTM1ODQxLGNPdD0zNTg0Mix1T3Q9MzU4NDMsaE90PTM3NDkyLGRPdD0zNzQ5NixwT3Q9MjMwMCxmT3Q9MjMwMSxtT3Q9MjMwMixnT3Q9MjQwMCxfT3Q9MjQwMSx5T3Q9MjQwMix2T3Q9MjUwMCxiT3Q9MjUwMSx4T3Q9M2UzLHdPdD0zMDAxLFNPdD0zMDA3LE1PdD0zMDAyLEVPdD0zMDA0LFRPdD0zMDA1LENPdD0zMDA2LEFPdD03NjgwLGtPdD0zNTA0NCxMT3Q9MzUwNDgsUE90PSIzMDAgZXMiO2Z1bmN0aW9uIE5PdCgpe31PYmplY3QuYXNzaWduKE5PdC5wcm90b3R5cGUse2FkZEV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT10aGlzLl9saXN0ZW5lcnMmJih0aGlzLl9saXN0ZW5lcnM9e30pO2NvbnN0IG49dGhpcy5fbGlzdGVuZXJzO3ZvaWQgMD09PW5bdF0mJihuW3RdPVtdKSwtMT09PW5bdF0uaW5kZXhPZihlKSYmblt0XS5wdXNoKGUpfSxoYXNFdmVudExpc3RlbmVyOmZ1bmN0aW9uKHQsZSl7aWYodm9pZCAwPT09dGhpcy5fbGlzdGVuZXJzKXJldHVybiExO2NvbnN0IG49dGhpcy5fbGlzdGVuZXJzO3JldHVybiB2b2lkIDAhPT1uW3RdJiYtMSE9PW5bdF0uaW5kZXhPZihlKX0scmVtb3ZlRXZlbnRMaXN0ZW5lcjpmdW5jdGlvbih0LGUpe2lmKHZvaWQgMD09PXRoaXMuX2xpc3RlbmVycylyZXR1cm47Y29uc3Qgbj10aGlzLl9saXN0ZW5lcnNbdF07aWYodm9pZCAwIT09bil7Y29uc3QgdD1uLmluZGV4T2YoZSk7LTEhPT10JiZuLnNwbGljZSh0LDEpfX0sZGlzcGF0Y2hFdmVudDpmdW5jdGlvbih0KXtpZih2b2lkIDA9PT10aGlzLl9saXN0ZW5lcnMpcmV0dXJuO2NvbnN0IGU9dGhpcy5fbGlzdGVuZXJzW3QudHlwZV07aWYodm9pZCAwIT09ZSl7dC50YXJnZXQ9dGhpcztjb25zdCBuPWUuc2xpY2UoMCk7Zm9yKGxldCBlPTAsaT1uLmxlbmd0aDtlPGk7ZSsrKW5bZV0uY2FsbCh0aGlzLHQpfX19KTtjb25zdCBJT3Q9W107Zm9yKGxldCB0PTA7dDwyNTY7dCsrKUlPdFt0XT0odDwxNj8iMCI6IiIpK3QudG9TdHJpbmcoMTYpO2xldCBPT3Q9MTIzNDU2Nztjb25zdCBST3Q9e0RFRzJSQUQ6TWF0aC5QSS8xODAsUkFEMkRFRzoxODAvTWF0aC5QSSxnZW5lcmF0ZVVVSUQ6ZnVuY3Rpb24oKXtjb25zdCB0PTQyOTQ5NjcyOTUqTWF0aC5yYW5kb20oKXwwLGU9NDI5NDk2NzI5NSpNYXRoLnJhbmRvbSgpfDAsbj00Mjk0OTY3Mjk1Kk1hdGgucmFuZG9tKCl8MCxpPTQyOTQ5NjcyOTUqTWF0aC5yYW5kb20oKXwwO3JldHVybihJT3RbMjU1JnRdK0lPdFt0Pj44JjI1NV0rSU90W3Q+PjE2JjI1NV0rSU90W3Q+PjI0JjI1NV0rIi0iK0lPdFsyNTUmZV0rSU90W2U+PjgmMjU1XSsiLSIrSU90W2U+PjE2JjE1fDY0XStJT3RbZT4+MjQmMjU1XSsiLSIrSU90WzYzJm58MTI4XStJT3Rbbj4+OCYyNTVdKyItIitJT3Rbbj4+MTYmMjU1XStJT3Rbbj4+MjQmMjU1XStJT3RbMjU1JmldK0lPdFtpPj44JjI1NV0rSU90W2k+PjE2JjI1NV0rSU90W2k+PjI0JjI1NV0pLnRvVXBwZXJDYXNlKCl9LGNsYW1wOmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gTWF0aC5tYXgoZSxNYXRoLm1pbihuLHQpKX0sZXVjbGlkZWFuTW9kdWxvOmZ1bmN0aW9uKHQsZSl7cmV0dXJuKHQlZStlKSVlfSxtYXBMaW5lYXI6ZnVuY3Rpb24odCxlLG4saSxyKXtyZXR1cm4gaSsodC1lKSooci1pKS8obi1lKX0sbGVycDpmdW5jdGlvbih0LGUsbil7cmV0dXJuKDEtbikqdCtuKmV9LGRhbXA6ZnVuY3Rpb24odCxlLG4saSl7cmV0dXJuIFJPdC5sZXJwKHQsZSwxLU1hdGguZXhwKC1uKmkpKX0scGluZ3Bvbmc6ZnVuY3Rpb24odCxlPTEpe3JldHVybiBlLU1hdGguYWJzKFJPdC5ldWNsaWRlYW5Nb2R1bG8odCwyKmUpLWUpfSxzbW9vdGhzdGVwOmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdDw9ZT8wOnQ+PW4/MToodD0odC1lKS8obi1lKSkqdCooMy0yKnQpfSxzbW9vdGhlcnN0ZXA6ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0PD1lPzA6dD49bj8xOih0PSh0LWUpLyhuLWUpKSp0KnQqKHQqKDYqdC0xNSkrMTApfSxyYW5kSW50OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKihlLXQrMSkpfSxyYW5kRmxvYXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtNYXRoLnJhbmRvbSgpKihlLXQpfSxyYW5kRmxvYXRTcHJlYWQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQqKC41LU1hdGgucmFuZG9tKCkpfSxzZWVkZWRSYW5kb206ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMCE9PXQmJihPT3Q9dCUyMTQ3NDgzNjQ3KSxPT3Q9MTY4MDcqT090JTIxNDc0ODM2NDcsKE9PdC0xKS8yMTQ3NDgzNjQ2fSxkZWdUb1JhZDpmdW5jdGlvbih0KXtyZXR1cm4gdCpST3QuREVHMlJBRH0scmFkVG9EZWc6ZnVuY3Rpb24odCl7cmV0dXJuIHQqUk90LlJBRDJERUd9LGlzUG93ZXJPZlR3bzpmdW5jdGlvbih0KXtyZXR1cm4gMD09KHQmdC0xKSYmMCE9PXR9LGNlaWxQb3dlck9mVHdvOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnBvdygyLE1hdGguY2VpbChNYXRoLmxvZyh0KS9NYXRoLkxOMikpfSxmbG9vclBvd2VyT2ZUd286ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucG93KDIsTWF0aC5mbG9vcihNYXRoLmxvZyh0KS9NYXRoLkxOMikpfSxzZXRRdWF0ZXJuaW9uRnJvbVByb3BlckV1bGVyOmZ1bmN0aW9uKHQsZSxuLGkscil7Y29uc3Qgbz1NYXRoLmNvcyxhPU1hdGguc2luLHM9byhuLzIpLGw9YShuLzIpLGM9bygoZStpKS8yKSx1PWEoKGUraSkvMiksaD1vKChlLWkpLzIpLGQ9YSgoZS1pKS8yKSxwPW8oKGktZSkvMiksZj1hKChpLWUpLzIpO3N3aXRjaChyKXtjYXNlIlhZWCI6dC5zZXQocyp1LGwqaCxsKmQscypjKTticmVhaztjYXNlIllaWSI6dC5zZXQobCpkLHMqdSxsKmgscypjKTticmVhaztjYXNlIlpYWiI6dC5zZXQobCpoLGwqZCxzKnUscypjKTticmVhaztjYXNlIlhaWCI6dC5zZXQocyp1LGwqZixsKnAscypjKTticmVhaztjYXNlIllYWSI6dC5zZXQobCpwLHMqdSxsKmYscypjKTticmVhaztjYXNlIlpZWiI6dC5zZXQobCpmLGwqcCxzKnUscypjKTticmVhaztkZWZhdWx0OmNvbnNvbGUud2FybigiVEhSRUUuTWF0aFV0aWxzOiAuc2V0UXVhdGVybmlvbkZyb21Qcm9wZXJFdWxlcigpIGVuY291bnRlcmVkIGFuIHVua25vd24gb3JkZXI6ICIrcil9fX07Y2xhc3Mgek90e2NvbnN0cnVjdG9yKHQ9MCxlPTApe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpc1ZlY3RvcjIiLHt2YWx1ZTohMH0pLHRoaXMueD10LHRoaXMueT1lfWdldCB3aWR0aCgpe3JldHVybiB0aGlzLnh9c2V0IHdpZHRoKHQpe3RoaXMueD10fWdldCBoZWlnaHQoKXtyZXR1cm4gdGhpcy55fXNldCBoZWlnaHQodCl7dGhpcy55PXR9c2V0KHQsZSl7cmV0dXJuIHRoaXMueD10LHRoaXMueT1lLHRoaXN9c2V0U2NhbGFyKHQpe3JldHVybiB0aGlzLng9dCx0aGlzLnk9dCx0aGlzfXNldFgodCl7cmV0dXJuIHRoaXMueD10LHRoaXN9c2V0WSh0KXtyZXR1cm4gdGhpcy55PXQsdGhpc31zZXRDb21wb25lbnQodCxlKXtzd2l0Y2godCl7Y2FzZSAwOnRoaXMueD1lO2JyZWFrO2Nhc2UgMTp0aGlzLnk9ZTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK3QpfXJldHVybiB0aGlzfWdldENvbXBvbmVudCh0KXtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiB0aGlzLng7Y2FzZSAxOnJldHVybiB0aGlzLnk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX19Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy54LHRoaXMueSl9Y29weSh0KXtyZXR1cm4gdGhpcy54PXQueCx0aGlzLnk9dC55LHRoaXN9YWRkKHQsZSl7cmV0dXJuIHZvaWQgMCE9PWU/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLmFkZCgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLmFkZFZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuYWRkVmVjdG9ycyh0LGUpKToodGhpcy54Kz10LngsdGhpcy55Kz10LnksdGhpcyl9YWRkU2NhbGFyKHQpe3JldHVybiB0aGlzLngrPXQsdGhpcy55Kz10LHRoaXN9YWRkVmVjdG9ycyh0LGUpe3JldHVybiB0aGlzLng9dC54K2UueCx0aGlzLnk9dC55K2UueSx0aGlzfWFkZFNjYWxlZFZlY3Rvcih0LGUpe3JldHVybiB0aGlzLngrPXQueCplLHRoaXMueSs9dC55KmUsdGhpc31zdWIodCxlKXtyZXR1cm4gdm9pZCAwIT09ZT8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiAuc3ViKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuc3ViVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5zdWJWZWN0b3JzKHQsZSkpOih0aGlzLngtPXQueCx0aGlzLnktPXQueSx0aGlzKX1zdWJTY2FsYXIodCl7cmV0dXJuIHRoaXMueC09dCx0aGlzLnktPXQsdGhpc31zdWJWZWN0b3JzKHQsZSl7cmV0dXJuIHRoaXMueD10LngtZS54LHRoaXMueT10LnktZS55LHRoaXN9bXVsdGlwbHkodCl7cmV0dXJuIHRoaXMueCo9dC54LHRoaXMueSo9dC55LHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7cmV0dXJuIHRoaXMueCo9dCx0aGlzLnkqPXQsdGhpc31kaXZpZGUodCl7cmV0dXJuIHRoaXMueC89dC54LHRoaXMueS89dC55LHRoaXN9ZGl2aWRlU2NhbGFyKHQpe3JldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKDEvdCl9YXBwbHlNYXRyaXgzKHQpe2NvbnN0IGU9dGhpcy54LG49dGhpcy55LGk9dC5lbGVtZW50cztyZXR1cm4gdGhpcy54PWlbMF0qZStpWzNdKm4raVs2XSx0aGlzLnk9aVsxXSplK2lbNF0qbitpWzddLHRoaXN9bWluKHQpe3JldHVybiB0aGlzLng9TWF0aC5taW4odGhpcy54LHQueCksdGhpcy55PU1hdGgubWluKHRoaXMueSx0LnkpLHRoaXN9bWF4KHQpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodGhpcy54LHQueCksdGhpcy55PU1hdGgubWF4KHRoaXMueSx0LnkpLHRoaXN9Y2xhbXAodCxlKXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHQueCxNYXRoLm1pbihlLngsdGhpcy54KSksdGhpcy55PU1hdGgubWF4KHQueSxNYXRoLm1pbihlLnksdGhpcy55KSksdGhpc31jbGFtcFNjYWxhcih0LGUpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMueCkpLHRoaXMueT1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy55KSksdGhpc31jbGFtcExlbmd0aCh0LGUpe2NvbnN0IG49dGhpcy5sZW5ndGgoKTtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIobnx8MSkubXVsdGlwbHlTY2FsYXIoTWF0aC5tYXgodCxNYXRoLm1pbihlLG4pKSl9Zmxvb3IoKXtyZXR1cm4gdGhpcy54PU1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9TWF0aC5mbG9vcih0aGlzLnkpLHRoaXN9Y2VpbCgpe3JldHVybiB0aGlzLng9TWF0aC5jZWlsKHRoaXMueCksdGhpcy55PU1hdGguY2VpbCh0aGlzLnkpLHRoaXN9cm91bmQoKXtyZXR1cm4gdGhpcy54PU1hdGgucm91bmQodGhpcy54KSx0aGlzLnk9TWF0aC5yb3VuZCh0aGlzLnkpLHRoaXN9cm91bmRUb1plcm8oKXtyZXR1cm4gdGhpcy54PXRoaXMueDwwP01hdGguY2VpbCh0aGlzLngpOk1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9dGhpcy55PDA/TWF0aC5jZWlsKHRoaXMueSk6TWF0aC5mbG9vcih0aGlzLnkpLHRoaXN9bmVnYXRlKCl7cmV0dXJuIHRoaXMueD0tdGhpcy54LHRoaXMueT0tdGhpcy55LHRoaXN9ZG90KHQpe3JldHVybiB0aGlzLngqdC54K3RoaXMueSp0Lnl9Y3Jvc3ModCl7cmV0dXJuIHRoaXMueCp0LnktdGhpcy55KnQueH1sZW5ndGhTcSgpe3JldHVybiB0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnl9bGVuZ3RoKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkpfW1hbmhhdHRhbkxlbmd0aCgpe3JldHVybiBNYXRoLmFicyh0aGlzLngpK01hdGguYWJzKHRoaXMueSl9bm9ybWFsaXplKCl7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKHRoaXMubGVuZ3RoKCl8fDEpfWFuZ2xlKCl7cmV0dXJuIE1hdGguYXRhbjIoLXRoaXMueSwtdGhpcy54KStNYXRoLlBJfWRpc3RhbmNlVG8odCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLmRpc3RhbmNlVG9TcXVhcmVkKHQpKX1kaXN0YW5jZVRvU3F1YXJlZCh0KXtjb25zdCBlPXRoaXMueC10Lngsbj10aGlzLnktdC55O3JldHVybiBlKmUrbipufW1hbmhhdHRhbkRpc3RhbmNlVG8odCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueC10LngpK01hdGguYWJzKHRoaXMueS10LnkpfXNldExlbmd0aCh0KXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0KX1sZXJwKHQsZSl7cmV0dXJuIHRoaXMueCs9KHQueC10aGlzLngpKmUsdGhpcy55Kz0odC55LXRoaXMueSkqZSx0aGlzfWxlcnBWZWN0b3JzKHQsZSxuKXtyZXR1cm4gdGhpcy54PXQueCsoZS54LXQueCkqbix0aGlzLnk9dC55KyhlLnktdC55KSpuLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lng9PT10aGlzLngmJnQueT09PXRoaXMueX1mcm9tQXJyYXkodCxlPTApe3JldHVybiB0aGlzLng9dFtlXSx0aGlzLnk9dFtlKzFdLHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7cmV0dXJuIHRbZV09dGhpcy54LHRbZSsxXT10aGlzLnksdH1mcm9tQnVmZmVyQXR0cmlidXRlKHQsZSxuKXtyZXR1cm4gdm9pZCAwIT09biYmY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiBvZmZzZXQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy54PXQuZ2V0WChlKSx0aGlzLnk9dC5nZXRZKGUpLHRoaXN9cm90YXRlQXJvdW5kKHQsZSl7Y29uc3Qgbj1NYXRoLmNvcyhlKSxpPU1hdGguc2luKGUpLHI9dGhpcy54LXQueCxvPXRoaXMueS10Lnk7cmV0dXJuIHRoaXMueD1yKm4tbyppK3QueCx0aGlzLnk9cippK28qbit0LnksdGhpc31yYW5kb20oKXtyZXR1cm4gdGhpcy54PU1hdGgucmFuZG9tKCksdGhpcy55PU1hdGgucmFuZG9tKCksdGhpc319Y2xhc3MgRE90e2NvbnN0cnVjdG9yKCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlzTWF0cml4MyIse3ZhbHVlOiEwfSksdGhpcy5lbGVtZW50cz1bMSwwLDAsMCwxLDAsMCwwLDFdLGFyZ3VtZW50cy5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4MzogdGhlIGNvbnN0cnVjdG9yIG5vIGxvbmdlciByZWFkcyBhcmd1bWVudHMuIHVzZSAuc2V0KCkgaW5zdGVhZC4iKX1zZXQodCxlLG4saSxyLG8sYSxzLGwpe2NvbnN0IGM9dGhpcy5lbGVtZW50cztyZXR1cm4gY1swXT10LGNbMV09aSxjWzJdPWEsY1szXT1lLGNbNF09cixjWzVdPXMsY1s2XT1uLGNbN109byxjWzhdPWwsdGhpc31pZGVudGl0eSgpe3JldHVybiB0aGlzLnNldCgxLDAsMCwwLDEsMCwwLDAsMSksdGhpc31jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuZnJvbUFycmF5KHRoaXMuZWxlbWVudHMpfWNvcHkodCl7Y29uc3QgZT10aGlzLmVsZW1lbnRzLG49dC5lbGVtZW50cztyZXR1cm4gZVswXT1uWzBdLGVbMV09blsxXSxlWzJdPW5bMl0sZVszXT1uWzNdLGVbNF09bls0XSxlWzVdPW5bNV0sZVs2XT1uWzZdLGVbN109bls3XSxlWzhdPW5bOF0sdGhpc31leHRyYWN0QmFzaXModCxlLG4pe3JldHVybiB0LnNldEZyb21NYXRyaXgzQ29sdW1uKHRoaXMsMCksZS5zZXRGcm9tTWF0cml4M0NvbHVtbih0aGlzLDEpLG4uc2V0RnJvbU1hdHJpeDNDb2x1bW4odGhpcywyKSx0aGlzfXNldEZyb21NYXRyaXg0KHQpe2NvbnN0IGU9dC5lbGVtZW50cztyZXR1cm4gdGhpcy5zZXQoZVswXSxlWzRdLGVbOF0sZVsxXSxlWzVdLGVbOV0sZVsyXSxlWzZdLGVbMTBdKSx0aGlzfW11bHRpcGx5KHQpe3JldHVybiB0aGlzLm11bHRpcGx5TWF0cmljZXModGhpcyx0KX1wcmVtdWx0aXBseSh0KXtyZXR1cm4gdGhpcy5tdWx0aXBseU1hdHJpY2VzKHQsdGhpcyl9bXVsdGlwbHlNYXRyaWNlcyh0LGUpe2NvbnN0IG49dC5lbGVtZW50cyxpPWUuZWxlbWVudHMscj10aGlzLmVsZW1lbnRzLG89blswXSxhPW5bM10scz1uWzZdLGw9blsxXSxjPW5bNF0sdT1uWzddLGg9blsyXSxkPW5bNV0scD1uWzhdLGY9aVswXSxtPWlbM10sZz1pWzZdLF89aVsxXSx5PWlbNF0sdj1pWzddLGI9aVsyXSx4PWlbNV0sdz1pWzhdO3JldHVybiByWzBdPW8qZithKl8rcypiLHJbM109byptK2EqeStzKngscls2XT1vKmcrYSp2K3MqdyxyWzFdPWwqZitjKl8rdSpiLHJbNF09bCptK2MqeSt1Kngscls3XT1sKmcrYyp2K3UqdyxyWzJdPWgqZitkKl8rcCpiLHJbNV09aCptK2QqeStwKngscls4XT1oKmcrZCp2K3Aqdyx0aGlzfW11bHRpcGx5U2NhbGFyKHQpe2NvbnN0IGU9dGhpcy5lbGVtZW50cztyZXR1cm4gZVswXSo9dCxlWzNdKj10LGVbNl0qPXQsZVsxXSo9dCxlWzRdKj10LGVbN10qPXQsZVsyXSo9dCxlWzVdKj10LGVbOF0qPXQsdGhpc31kZXRlcm1pbmFudCgpe2NvbnN0IHQ9dGhpcy5lbGVtZW50cyxlPXRbMF0sbj10WzFdLGk9dFsyXSxyPXRbM10sbz10WzRdLGE9dFs1XSxzPXRbNl0sbD10WzddLGM9dFs4XTtyZXR1cm4gZSpvKmMtZSphKmwtbipyKmMrbiphKnMraSpyKmwtaSpvKnN9aW52ZXJ0KCl7Y29uc3QgdD10aGlzLmVsZW1lbnRzLGU9dFswXSxuPXRbMV0saT10WzJdLHI9dFszXSxvPXRbNF0sYT10WzVdLHM9dFs2XSxsPXRbN10sYz10WzhdLHU9YypvLWEqbCxoPWEqcy1jKnIsZD1sKnItbypzLHA9ZSp1K24qaCtpKmQ7aWYoMD09PXApcmV0dXJuIHRoaXMuc2V0KDAsMCwwLDAsMCwwLDAsMCwwKTtjb25zdCBmPTEvcDtyZXR1cm4gdFswXT11KmYsdFsxXT0oaSpsLWMqbikqZix0WzJdPShhKm4taSpvKSpmLHRbM109aCpmLHRbNF09KGMqZS1pKnMpKmYsdFs1XT0oaSpyLWEqZSkqZix0WzZdPWQqZix0WzddPShuKnMtbCplKSpmLHRbOF09KG8qZS1uKnIpKmYsdGhpc310cmFuc3Bvc2UoKXtsZXQgdDtjb25zdCBlPXRoaXMuZWxlbWVudHM7cmV0dXJuIHQ9ZVsxXSxlWzFdPWVbM10sZVszXT10LHQ9ZVsyXSxlWzJdPWVbNl0sZVs2XT10LHQ9ZVs1XSxlWzVdPWVbN10sZVs3XT10LHRoaXN9Z2V0Tm9ybWFsTWF0cml4KHQpe3JldHVybiB0aGlzLnNldEZyb21NYXRyaXg0KHQpLmNvcHkodGhpcykuaW52ZXJ0KCkudHJhbnNwb3NlKCl9dHJhbnNwb3NlSW50b0FycmF5KHQpe2NvbnN0IGU9dGhpcy5lbGVtZW50cztyZXR1cm4gdFswXT1lWzBdLHRbMV09ZVszXSx0WzJdPWVbNl0sdFszXT1lWzFdLHRbNF09ZVs0XSx0WzVdPWVbN10sdFs2XT1lWzJdLHRbN109ZVs1XSx0WzhdPWVbOF0sdGhpc31zZXRVdlRyYW5zZm9ybSh0LGUsbixpLHIsbyxhKXtjb25zdCBzPU1hdGguY29zKHIpLGw9TWF0aC5zaW4ocik7cmV0dXJuIHRoaXMuc2V0KG4qcyxuKmwsLW4qKHMqbytsKmEpK28rdCwtaSpsLGkqcywtaSooLWwqbytzKmEpK2ErZSwwLDAsMSksdGhpc31zY2FsZSh0LGUpe2NvbnN0IG49dGhpcy5lbGVtZW50cztyZXR1cm4gblswXSo9dCxuWzNdKj10LG5bNl0qPXQsblsxXSo9ZSxuWzRdKj1lLG5bN10qPWUsdGhpc31yb3RhdGUodCl7Y29uc3QgZT1NYXRoLmNvcyh0KSxuPU1hdGguc2luKHQpLGk9dGhpcy5lbGVtZW50cyxyPWlbMF0sbz1pWzNdLGE9aVs2XSxzPWlbMV0sbD1pWzRdLGM9aVs3XTtyZXR1cm4gaVswXT1lKnIrbipzLGlbM109ZSpvK24qbCxpWzZdPWUqYStuKmMsaVsxXT0tbipyK2UqcyxpWzRdPS1uKm8rZSpsLGlbN109LW4qYStlKmMsdGhpc310cmFuc2xhdGUodCxlKXtjb25zdCBuPXRoaXMuZWxlbWVudHM7cmV0dXJuIG5bMF0rPXQqblsyXSxuWzNdKz10Km5bNV0sbls2XSs9dCpuWzhdLG5bMV0rPWUqblsyXSxuWzRdKz1lKm5bNV0sbls3XSs9ZSpuWzhdLHRoaXN9ZXF1YWxzKHQpe2NvbnN0IGU9dGhpcy5lbGVtZW50cyxuPXQuZWxlbWVudHM7Zm9yKGxldCB0PTA7dDw5O3QrKylpZihlW3RdIT09blt0XSlyZXR1cm4hMTtyZXR1cm4hMH1mcm9tQXJyYXkodCxlPTApe2ZvcihsZXQgbj0wO248OTtuKyspdGhpcy5lbGVtZW50c1tuXT10W24rZV07cmV0dXJuIHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7Y29uc3Qgbj10aGlzLmVsZW1lbnRzO3JldHVybiB0W2VdPW5bMF0sdFtlKzFdPW5bMV0sdFtlKzJdPW5bMl0sdFtlKzNdPW5bM10sdFtlKzRdPW5bNF0sdFtlKzVdPW5bNV0sdFtlKzZdPW5bNl0sdFtlKzddPW5bN10sdFtlKzhdPW5bOF0sdH19bGV0IEJPdDtjb25zdCBIT3Q9e2dldERhdGFVUkw6ZnVuY3Rpb24odCl7aWYoL15kYXRhOi9pLnRlc3QodC5zcmMpKXJldHVybiB0LnNyYztpZigidW5kZWZpbmVkIj09dHlwZW9mIEhUTUxDYW52YXNFbGVtZW50KXJldHVybiB0LnNyYztsZXQgZTtpZih0IGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQpZT10O2Vsc2V7dm9pZCAwPT09Qk90JiYoQk90PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsImNhbnZhcyIpKSxCT3Qud2lkdGg9dC53aWR0aCxCT3QuaGVpZ2h0PXQuaGVpZ2h0O2NvbnN0IG49Qk90LmdldENvbnRleHQoIjJkIik7dCBpbnN0YW5jZW9mIEltYWdlRGF0YT9uLnB1dEltYWdlRGF0YSh0LDAsMCk6bi5kcmF3SW1hZ2UodCwwLDAsdC53aWR0aCx0LmhlaWdodCksZT1CT3R9cmV0dXJuIGUud2lkdGg+MjA0OHx8ZS5oZWlnaHQ+MjA0OD9lLnRvRGF0YVVSTCgiaW1hZ2UvanBlZyIsLjYpOmUudG9EYXRhVVJMKCJpbWFnZS9wbmciKX19O2xldCBGT3Q9MDtmdW5jdGlvbiBWT3QodD1WT3QuREVGQVVMVF9JTUFHRSxlPVZPdC5ERUZBVUxUX01BUFBJTkcsbj0xMDAxLGk9MTAwMSxyPTEwMDYsbz0xMDA4LGE9MTAyMyxzPTEwMDksbD0xLGM9M2UzKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTpGT3QrK30pLHRoaXMudXVpZD1ST3QuZ2VuZXJhdGVVVUlEKCksdGhpcy5uYW1lPSIiLHRoaXMuaW1hZ2U9dCx0aGlzLm1pcG1hcHM9W10sdGhpcy5tYXBwaW5nPWUsdGhpcy53cmFwUz1uLHRoaXMud3JhcFQ9aSx0aGlzLm1hZ0ZpbHRlcj1yLHRoaXMubWluRmlsdGVyPW8sdGhpcy5hbmlzb3Ryb3B5PWwsdGhpcy5mb3JtYXQ9YSx0aGlzLmludGVybmFsRm9ybWF0PW51bGwsdGhpcy50eXBlPXMsdGhpcy5vZmZzZXQ9bmV3IHpPdCgwLDApLHRoaXMucmVwZWF0PW5ldyB6T3QoMSwxKSx0aGlzLmNlbnRlcj1uZXcgek90KDAsMCksdGhpcy5yb3RhdGlvbj0wLHRoaXMubWF0cml4QXV0b1VwZGF0ZT0hMCx0aGlzLm1hdHJpeD1uZXcgRE90LHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSEwLHRoaXMucHJlbXVsdGlwbHlBbHBoYT0hMSx0aGlzLmZsaXBZPSEwLHRoaXMudW5wYWNrQWxpZ25tZW50PTQsdGhpcy5lbmNvZGluZz1jLHRoaXMudmVyc2lvbj0wLHRoaXMub25VcGRhdGU9bnVsbH1mdW5jdGlvbiBVT3QodCl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBIVE1MSW1hZ2VFbGVtZW50JiZ0IGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudHx8InVuZGVmaW5lZCIhPXR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudCYmdCBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50fHwidW5kZWZpbmVkIiE9dHlwZW9mIEltYWdlQml0bWFwJiZ0IGluc3RhbmNlb2YgSW1hZ2VCaXRtYXA/SE90LmdldERhdGFVUkwodCk6dC5kYXRhP3tkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQuZGF0YSksd2lkdGg6dC53aWR0aCxoZWlnaHQ6dC5oZWlnaHQsdHlwZTp0LmRhdGEuY29uc3RydWN0b3IubmFtZX06KGNvbnNvbGUud2FybigiVEhSRUUuVGV4dHVyZTogVW5hYmxlIHRvIHNlcmlhbGl6ZSBUZXh0dXJlLiIpLHt9KX1WT3QuREVGQVVMVF9JTUFHRT12b2lkIDAsVk90LkRFRkFVTFRfTUFQUElORz1QSXQsVk90LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoTk90LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOlZPdCxpc1RleHR1cmU6ITAsdXBkYXRlTWF0cml4OmZ1bmN0aW9uKCl7dGhpcy5tYXRyaXguc2V0VXZUcmFuc2Zvcm0odGhpcy5vZmZzZXQueCx0aGlzLm9mZnNldC55LHRoaXMucmVwZWF0LngsdGhpcy5yZXBlYXQueSx0aGlzLnJvdGF0aW9uLHRoaXMuY2VudGVyLngsdGhpcy5jZW50ZXIueSl9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfSxjb3B5OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm5hbWU9dC5uYW1lLHRoaXMuaW1hZ2U9dC5pbWFnZSx0aGlzLm1pcG1hcHM9dC5taXBtYXBzLnNsaWNlKDApLHRoaXMubWFwcGluZz10Lm1hcHBpbmcsdGhpcy53cmFwUz10LndyYXBTLHRoaXMud3JhcFQ9dC53cmFwVCx0aGlzLm1hZ0ZpbHRlcj10Lm1hZ0ZpbHRlcix0aGlzLm1pbkZpbHRlcj10Lm1pbkZpbHRlcix0aGlzLmFuaXNvdHJvcHk9dC5hbmlzb3Ryb3B5LHRoaXMuZm9ybWF0PXQuZm9ybWF0LHRoaXMuaW50ZXJuYWxGb3JtYXQ9dC5pbnRlcm5hbEZvcm1hdCx0aGlzLnR5cGU9dC50eXBlLHRoaXMub2Zmc2V0LmNvcHkodC5vZmZzZXQpLHRoaXMucmVwZWF0LmNvcHkodC5yZXBlYXQpLHRoaXMuY2VudGVyLmNvcHkodC5jZW50ZXIpLHRoaXMucm90YXRpb249dC5yb3RhdGlvbix0aGlzLm1hdHJpeEF1dG9VcGRhdGU9dC5tYXRyaXhBdXRvVXBkYXRlLHRoaXMubWF0cml4LmNvcHkodC5tYXRyaXgpLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPXQuZ2VuZXJhdGVNaXBtYXBzLHRoaXMucHJlbXVsdGlwbHlBbHBoYT10LnByZW11bHRpcGx5QWxwaGEsdGhpcy5mbGlwWT10LmZsaXBZLHRoaXMudW5wYWNrQWxpZ25tZW50PXQudW5wYWNrQWxpZ25tZW50LHRoaXMuZW5jb2Rpbmc9dC5lbmNvZGluZyx0aGlzfSx0b0pTT046ZnVuY3Rpb24odCl7Y29uc3QgZT12b2lkIDA9PT10fHwic3RyaW5nIj09dHlwZW9mIHQ7aWYoIWUmJnZvaWQgMCE9PXQudGV4dHVyZXNbdGhpcy51dWlkXSlyZXR1cm4gdC50ZXh0dXJlc1t0aGlzLnV1aWRdO2NvbnN0IG49e21ldGFkYXRhOnt2ZXJzaW9uOjQuNSx0eXBlOiJUZXh0dXJlIixnZW5lcmF0b3I6IlRleHR1cmUudG9KU09OIn0sdXVpZDp0aGlzLnV1aWQsbmFtZTp0aGlzLm5hbWUsbWFwcGluZzp0aGlzLm1hcHBpbmcscmVwZWF0Olt0aGlzLnJlcGVhdC54LHRoaXMucmVwZWF0LnldLG9mZnNldDpbdGhpcy5vZmZzZXQueCx0aGlzLm9mZnNldC55XSxjZW50ZXI6W3RoaXMuY2VudGVyLngsdGhpcy5jZW50ZXIueV0scm90YXRpb246dGhpcy5yb3RhdGlvbix3cmFwOlt0aGlzLndyYXBTLHRoaXMud3JhcFRdLGZvcm1hdDp0aGlzLmZvcm1hdCx0eXBlOnRoaXMudHlwZSxlbmNvZGluZzp0aGlzLmVuY29kaW5nLG1pbkZpbHRlcjp0aGlzLm1pbkZpbHRlcixtYWdGaWx0ZXI6dGhpcy5tYWdGaWx0ZXIsYW5pc290cm9weTp0aGlzLmFuaXNvdHJvcHksZmxpcFk6dGhpcy5mbGlwWSxwcmVtdWx0aXBseUFscGhhOnRoaXMucHJlbXVsdGlwbHlBbHBoYSx1bnBhY2tBbGlnbm1lbnQ6dGhpcy51bnBhY2tBbGlnbm1lbnR9O2lmKHZvaWQgMCE9PXRoaXMuaW1hZ2Upe2NvbnN0IGk9dGhpcy5pbWFnZTtpZih2b2lkIDA9PT1pLnV1aWQmJihpLnV1aWQ9Uk90LmdlbmVyYXRlVVVJRCgpKSwhZSYmdm9pZCAwPT09dC5pbWFnZXNbaS51dWlkXSl7bGV0IGU7aWYoQXJyYXkuaXNBcnJheShpKSl7ZT1bXTtmb3IobGV0IHQ9MCxuPWkubGVuZ3RoO3Q8bjt0KyspZS5wdXNoKFVPdChpW3RdLmlzRGF0YVRleHR1cmU/aVt0XS5pbWFnZTppW3RdKSl9ZWxzZSBlPVVPdChpKTt0LmltYWdlc1tpLnV1aWRdPXt1dWlkOmkudXVpZCx1cmw6ZX19bi5pbWFnZT1pLnV1aWR9cmV0dXJuIGV8fCh0LnRleHR1cmVzW3RoaXMudXVpZF09biksbn0sZGlzcG9zZTpmdW5jdGlvbigpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX0sdHJhbnNmb3JtVXY6ZnVuY3Rpb24odCl7aWYodGhpcy5tYXBwaW5nIT09UEl0KXJldHVybiB0O2lmKHQuYXBwbHlNYXRyaXgzKHRoaXMubWF0cml4KSx0Lng8MHx8dC54PjEpc3dpdGNoKHRoaXMud3JhcFMpe2Nhc2UgQkl0OnQueD10LngtTWF0aC5mbG9vcih0LngpO2JyZWFrO2Nhc2UgSEl0OnQueD10Lng8MD8wOjE7YnJlYWs7Y2FzZSBGSXQ6dC54PTE9PT1NYXRoLmFicyhNYXRoLmZsb29yKHQueCklMik/TWF0aC5jZWlsKHQueCktdC54OnQueC1NYXRoLmZsb29yKHQueCl9aWYodC55PDB8fHQueT4xKXN3aXRjaCh0aGlzLndyYXBUKXtjYXNlIEJJdDp0Lnk9dC55LU1hdGguZmxvb3IodC55KTticmVhaztjYXNlIEhJdDp0Lnk9dC55PDA/MDoxO2JyZWFrO2Nhc2UgRkl0OnQueT0xPT09TWF0aC5hYnMoTWF0aC5mbG9vcih0LnkpJTIpP01hdGguY2VpbCh0LnkpLXQueTp0LnktTWF0aC5mbG9vcih0LnkpfXJldHVybiB0aGlzLmZsaXBZJiYodC55PTEtdC55KSx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWT3QucHJvdG90eXBlLCJuZWVkc1VwZGF0ZSIse3NldDpmdW5jdGlvbih0KXshMD09PXQmJnRoaXMudmVyc2lvbisrfX0pO2NsYXNzIGpPdHtjb25zdHJ1Y3Rvcih0PTAsZT0wLG49MCxpPTEpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpc1ZlY3RvcjQiLHt2YWx1ZTohMH0pLHRoaXMueD10LHRoaXMueT1lLHRoaXMuej1uLHRoaXMudz1pfWdldCB3aWR0aCgpe3JldHVybiB0aGlzLnp9c2V0IHdpZHRoKHQpe3RoaXMuej10fWdldCBoZWlnaHQoKXtyZXR1cm4gdGhpcy53fXNldCBoZWlnaHQodCl7dGhpcy53PXR9c2V0KHQsZSxuLGkpe3JldHVybiB0aGlzLng9dCx0aGlzLnk9ZSx0aGlzLno9bix0aGlzLnc9aSx0aGlzfXNldFNjYWxhcih0KXtyZXR1cm4gdGhpcy54PXQsdGhpcy55PXQsdGhpcy56PXQsdGhpcy53PXQsdGhpc31zZXRYKHQpe3JldHVybiB0aGlzLng9dCx0aGlzfXNldFkodCl7cmV0dXJuIHRoaXMueT10LHRoaXN9c2V0Wih0KXtyZXR1cm4gdGhpcy56PXQsdGhpc31zZXRXKHQpe3JldHVybiB0aGlzLnc9dCx0aGlzfXNldENvbXBvbmVudCh0LGUpe3N3aXRjaCh0KXtjYXNlIDA6dGhpcy54PWU7YnJlYWs7Y2FzZSAxOnRoaXMueT1lO2JyZWFrO2Nhc2UgMjp0aGlzLno9ZTticmVhaztjYXNlIDM6dGhpcy53PWU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX1yZXR1cm4gdGhpc31nZXRDb21wb25lbnQodCl7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gdGhpcy54O2Nhc2UgMTpyZXR1cm4gdGhpcy55O2Nhc2UgMjpyZXR1cm4gdGhpcy56O2Nhc2UgMzpyZXR1cm4gdGhpcy53O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrdCl9fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMueCx0aGlzLnksdGhpcy56LHRoaXMudyl9Y29weSh0KXtyZXR1cm4gdGhpcy54PXQueCx0aGlzLnk9dC55LHRoaXMuej10LnosdGhpcy53PXZvaWQgMCE9PXQudz90Lnc6MSx0aGlzfWFkZCh0LGUpe3JldHVybiB2b2lkIDAhPT1lPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IC5hZGQoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5hZGRWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmFkZFZlY3RvcnModCxlKSk6KHRoaXMueCs9dC54LHRoaXMueSs9dC55LHRoaXMueis9dC56LHRoaXMudys9dC53LHRoaXMpfWFkZFNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kz10LHRoaXMueSs9dCx0aGlzLnorPXQsdGhpcy53Kz10LHRoaXN9YWRkVmVjdG9ycyh0LGUpe3JldHVybiB0aGlzLng9dC54K2UueCx0aGlzLnk9dC55K2UueSx0aGlzLno9dC56K2Uueix0aGlzLnc9dC53K2Uudyx0aGlzfWFkZFNjYWxlZFZlY3Rvcih0LGUpe3JldHVybiB0aGlzLngrPXQueCplLHRoaXMueSs9dC55KmUsdGhpcy56Kz10LnoqZSx0aGlzLncrPXQudyplLHRoaXN9c3ViKHQsZSl7cmV0dXJuIHZvaWQgMCE9PWU/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogLnN1YigpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLnN1YlZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuc3ViVmVjdG9ycyh0LGUpKToodGhpcy54LT10LngsdGhpcy55LT10LnksdGhpcy56LT10LnosdGhpcy53LT10LncsdGhpcyl9c3ViU2NhbGFyKHQpe3JldHVybiB0aGlzLngtPXQsdGhpcy55LT10LHRoaXMuei09dCx0aGlzLnctPXQsdGhpc31zdWJWZWN0b3JzKHQsZSl7cmV0dXJuIHRoaXMueD10LngtZS54LHRoaXMueT10LnktZS55LHRoaXMuej10LnotZS56LHRoaXMudz10LnctZS53LHRoaXN9bXVsdGlwbHkodCl7cmV0dXJuIHRoaXMueCo9dC54LHRoaXMueSo9dC55LHRoaXMueio9dC56LHRoaXMudyo9dC53LHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7cmV0dXJuIHRoaXMueCo9dCx0aGlzLnkqPXQsdGhpcy56Kj10LHRoaXMudyo9dCx0aGlzfWFwcGx5TWF0cml4NCh0KXtjb25zdCBlPXRoaXMueCxuPXRoaXMueSxpPXRoaXMueixyPXRoaXMudyxvPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMueD1vWzBdKmUrb1s0XSpuK29bOF0qaStvWzEyXSpyLHRoaXMueT1vWzFdKmUrb1s1XSpuK29bOV0qaStvWzEzXSpyLHRoaXMuej1vWzJdKmUrb1s2XSpuK29bMTBdKmkrb1sxNF0qcix0aGlzLnc9b1szXSplK29bN10qbitvWzExXSppK29bMTVdKnIsdGhpc31kaXZpZGVTY2FsYXIodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlTY2FsYXIoMS90KX1zZXRBeGlzQW5nbGVGcm9tUXVhdGVybmlvbih0KXt0aGlzLnc9MipNYXRoLmFjb3ModC53KTtjb25zdCBlPU1hdGguc3FydCgxLXQudyp0LncpO3JldHVybiBlPDFlLTQ/KHRoaXMueD0xLHRoaXMueT0wLHRoaXMuej0wKToodGhpcy54PXQueC9lLHRoaXMueT10LnkvZSx0aGlzLno9dC56L2UpLHRoaXN9c2V0QXhpc0FuZ2xlRnJvbVJvdGF0aW9uTWF0cml4KHQpe2xldCBlLG4saSxyO2NvbnN0IG89LjAxLGE9LjEscz10LmVsZW1lbnRzLGw9c1swXSxjPXNbNF0sdT1zWzhdLGg9c1sxXSxkPXNbNV0scD1zWzldLGY9c1syXSxtPXNbNl0sZz1zWzEwXTtpZihNYXRoLmFicyhjLWgpPG8mJk1hdGguYWJzKHUtZik8byYmTWF0aC5hYnMocC1tKTxvKXtpZihNYXRoLmFicyhjK2gpPGEmJk1hdGguYWJzKHUrZik8YSYmTWF0aC5hYnMocCttKTxhJiZNYXRoLmFicyhsK2QrZy0zKTxhKXJldHVybiB0aGlzLnNldCgxLDAsMCwwKSx0aGlzO2U9TWF0aC5QSTtjb25zdCB0PShsKzEpLzIscz0oZCsxKS8yLF89KGcrMSkvMix5PShjK2gpLzQsdj0odStmKS80LGI9KHArbSkvNDtyZXR1cm4gdD5zJiZ0Pl8/dDxvPyhuPTAsaT0uNzA3MTA2NzgxLHI9LjcwNzEwNjc4MSk6KG49TWF0aC5zcXJ0KHQpLGk9eS9uLHI9di9uKTpzPl8/czxvPyhuPS43MDcxMDY3ODEsaT0wLHI9LjcwNzEwNjc4MSk6KGk9TWF0aC5zcXJ0KHMpLG49eS9pLHI9Yi9pKTpfPG8/KG49LjcwNzEwNjc4MSxpPS43MDcxMDY3ODEscj0wKToocj1NYXRoLnNxcnQoXyksbj12L3IsaT1iL3IpLHRoaXMuc2V0KG4saSxyLGUpLHRoaXN9bGV0IF89TWF0aC5zcXJ0KChtLXApKihtLXApKyh1LWYpKih1LWYpKyhoLWMpKihoLWMpKTtyZXR1cm4gTWF0aC5hYnMoXyk8LjAwMSYmKF89MSksdGhpcy54PShtLXApL18sdGhpcy55PSh1LWYpL18sdGhpcy56PShoLWMpL18sdGhpcy53PU1hdGguYWNvcygobCtkK2ctMSkvMiksdGhpc31taW4odCl7cmV0dXJuIHRoaXMueD1NYXRoLm1pbih0aGlzLngsdC54KSx0aGlzLnk9TWF0aC5taW4odGhpcy55LHQueSksdGhpcy56PU1hdGgubWluKHRoaXMueix0LnopLHRoaXMudz1NYXRoLm1pbih0aGlzLncsdC53KSx0aGlzfW1heCh0KXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1heCh0aGlzLnksdC55KSx0aGlzLno9TWF0aC5tYXgodGhpcy56LHQueiksdGhpcy53PU1hdGgubWF4KHRoaXMudyx0LncpLHRoaXN9Y2xhbXAodCxlKXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHQueCxNYXRoLm1pbihlLngsdGhpcy54KSksdGhpcy55PU1hdGgubWF4KHQueSxNYXRoLm1pbihlLnksdGhpcy55KSksdGhpcy56PU1hdGgubWF4KHQueixNYXRoLm1pbihlLnosdGhpcy56KSksdGhpcy53PU1hdGgubWF4KHQudyxNYXRoLm1pbihlLncsdGhpcy53KSksdGhpc31jbGFtcFNjYWxhcih0LGUpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMueCkpLHRoaXMueT1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy55KSksdGhpcy56PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLnopKSx0aGlzLnc9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMudykpLHRoaXN9Y2xhbXBMZW5ndGgodCxlKXtjb25zdCBuPXRoaXMubGVuZ3RoKCk7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKG58fDEpLm11bHRpcGx5U2NhbGFyKE1hdGgubWF4KHQsTWF0aC5taW4oZSxuKSkpfWZsb29yKCl7cmV0dXJuIHRoaXMueD1NYXRoLmZsb29yKHRoaXMueCksdGhpcy55PU1hdGguZmxvb3IodGhpcy55KSx0aGlzLno9TWF0aC5mbG9vcih0aGlzLnopLHRoaXMudz1NYXRoLmZsb29yKHRoaXMudyksdGhpc31jZWlsKCl7cmV0dXJuIHRoaXMueD1NYXRoLmNlaWwodGhpcy54KSx0aGlzLnk9TWF0aC5jZWlsKHRoaXMueSksdGhpcy56PU1hdGguY2VpbCh0aGlzLnopLHRoaXMudz1NYXRoLmNlaWwodGhpcy53KSx0aGlzfXJvdW5kKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJvdW5kKHRoaXMueCksdGhpcy55PU1hdGgucm91bmQodGhpcy55KSx0aGlzLno9TWF0aC5yb3VuZCh0aGlzLnopLHRoaXMudz1NYXRoLnJvdW5kKHRoaXMudyksdGhpc31yb3VuZFRvWmVybygpe3JldHVybiB0aGlzLng9dGhpcy54PDA/TWF0aC5jZWlsKHRoaXMueCk6TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT10aGlzLnk8MD9NYXRoLmNlaWwodGhpcy55KTpNYXRoLmZsb29yKHRoaXMueSksdGhpcy56PXRoaXMuejwwP01hdGguY2VpbCh0aGlzLnopOk1hdGguZmxvb3IodGhpcy56KSx0aGlzLnc9dGhpcy53PDA/TWF0aC5jZWlsKHRoaXMudyk6TWF0aC5mbG9vcih0aGlzLncpLHRoaXN9bmVnYXRlKCl7cmV0dXJuIHRoaXMueD0tdGhpcy54LHRoaXMueT0tdGhpcy55LHRoaXMuej0tdGhpcy56LHRoaXMudz0tdGhpcy53LHRoaXN9ZG90KHQpe3JldHVybiB0aGlzLngqdC54K3RoaXMueSp0LnkrdGhpcy56KnQueit0aGlzLncqdC53fWxlbmd0aFNxKCl7cmV0dXJuIHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSt0aGlzLnoqdGhpcy56K3RoaXMudyp0aGlzLnd9bGVuZ3RoKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkrdGhpcy56KnRoaXMueit0aGlzLncqdGhpcy53KX1tYW5oYXR0YW5MZW5ndGgoKXtyZXR1cm4gTWF0aC5hYnModGhpcy54KStNYXRoLmFicyh0aGlzLnkpK01hdGguYWJzKHRoaXMueikrTWF0aC5hYnModGhpcy53KX1ub3JtYWxpemUoKXtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIodGhpcy5sZW5ndGgoKXx8MSl9c2V0TGVuZ3RoKHQpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKHQpfWxlcnAodCxlKXtyZXR1cm4gdGhpcy54Kz0odC54LXRoaXMueCkqZSx0aGlzLnkrPSh0LnktdGhpcy55KSplLHRoaXMueis9KHQuei10aGlzLnopKmUsdGhpcy53Kz0odC53LXRoaXMudykqZSx0aGlzfWxlcnBWZWN0b3JzKHQsZSxuKXtyZXR1cm4gdGhpcy54PXQueCsoZS54LXQueCkqbix0aGlzLnk9dC55KyhlLnktdC55KSpuLHRoaXMuej10LnorKGUuei10LnopKm4sdGhpcy53PXQudysoZS53LXQudykqbix0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC54PT09dGhpcy54JiZ0Lnk9PT10aGlzLnkmJnQuej09PXRoaXMueiYmdC53PT09dGhpcy53fWZyb21BcnJheSh0LGU9MCl7cmV0dXJuIHRoaXMueD10W2VdLHRoaXMueT10W2UrMV0sdGhpcy56PXRbZSsyXSx0aGlzLnc9dFtlKzNdLHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7cmV0dXJuIHRbZV09dGhpcy54LHRbZSsxXT10aGlzLnksdFtlKzJdPXRoaXMueix0W2UrM109dGhpcy53LHR9ZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUsbil7cmV0dXJuIHZvaWQgMCE9PW4mJmNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogb2Zmc2V0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMueD10LmdldFgoZSksdGhpcy55PXQuZ2V0WShlKSx0aGlzLno9dC5nZXRaKGUpLHRoaXMudz10LmdldFcoZSksdGhpc31yYW5kb20oKXtyZXR1cm4gdGhpcy54PU1hdGgucmFuZG9tKCksdGhpcy55PU1hdGgucmFuZG9tKCksdGhpcy56PU1hdGgucmFuZG9tKCksdGhpcy53PU1hdGgucmFuZG9tKCksdGhpc319Y2xhc3MgR090IGV4dGVuZHMgTk90e2NvbnN0cnVjdG9yKHQsZSxuKXtzdXBlcigpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpc1dlYkdMUmVuZGVyVGFyZ2V0Iix7dmFsdWU6ITB9KSx0aGlzLndpZHRoPXQsdGhpcy5oZWlnaHQ9ZSx0aGlzLnNjaXNzb3I9bmV3IGpPdCgwLDAsdCxlKSx0aGlzLnNjaXNzb3JUZXN0PSExLHRoaXMudmlld3BvcnQ9bmV3IGpPdCgwLDAsdCxlKSx0aGlzLnRleHR1cmU9bmV3IFZPdCh2b2lkIDAsKG49bnx8e30pLm1hcHBpbmcsbi53cmFwUyxuLndyYXBULG4ubWFnRmlsdGVyLG4ubWluRmlsdGVyLG4uZm9ybWF0LG4udHlwZSxuLmFuaXNvdHJvcHksbi5lbmNvZGluZyksdGhpcy50ZXh0dXJlLmltYWdlPXt9LHRoaXMudGV4dHVyZS5pbWFnZS53aWR0aD10LHRoaXMudGV4dHVyZS5pbWFnZS5oZWlnaHQ9ZSx0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzPXZvaWQgMCE9PW4uZ2VuZXJhdGVNaXBtYXBzJiZuLmdlbmVyYXRlTWlwbWFwcyx0aGlzLnRleHR1cmUubWluRmlsdGVyPXZvaWQgMCE9PW4ubWluRmlsdGVyP24ubWluRmlsdGVyOkdJdCx0aGlzLmRlcHRoQnVmZmVyPXZvaWQgMD09PW4uZGVwdGhCdWZmZXJ8fG4uZGVwdGhCdWZmZXIsdGhpcy5zdGVuY2lsQnVmZmVyPXZvaWQgMCE9PW4uc3RlbmNpbEJ1ZmZlciYmbi5zdGVuY2lsQnVmZmVyLHRoaXMuZGVwdGhUZXh0dXJlPXZvaWQgMCE9PW4uZGVwdGhUZXh0dXJlP24uZGVwdGhUZXh0dXJlOm51bGx9c2V0U2l6ZSh0LGUpe3RoaXMud2lkdGg9PT10JiZ0aGlzLmhlaWdodD09PWV8fCh0aGlzLndpZHRoPXQsdGhpcy5oZWlnaHQ9ZSx0aGlzLnRleHR1cmUuaW1hZ2Uud2lkdGg9dCx0aGlzLnRleHR1cmUuaW1hZ2UuaGVpZ2h0PWUsdGhpcy5kaXNwb3NlKCkpLHRoaXMudmlld3BvcnQuc2V0KDAsMCx0LGUpLHRoaXMuc2Npc3Nvci5zZXQoMCwwLHQsZSl9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9Y29weSh0KXtyZXR1cm4gdGhpcy53aWR0aD10LndpZHRoLHRoaXMuaGVpZ2h0PXQuaGVpZ2h0LHRoaXMudmlld3BvcnQuY29weSh0LnZpZXdwb3J0KSx0aGlzLnRleHR1cmU9dC50ZXh0dXJlLmNsb25lKCksdGhpcy5kZXB0aEJ1ZmZlcj10LmRlcHRoQnVmZmVyLHRoaXMuc3RlbmNpbEJ1ZmZlcj10LnN0ZW5jaWxCdWZmZXIsdGhpcy5kZXB0aFRleHR1cmU9dC5kZXB0aFRleHR1cmUsdGhpc31kaXNwb3NlKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfX1jbGFzcyBXT3R7Y29uc3RydWN0b3IodD0wLGU9MCxuPTAsaT0xKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaXNRdWF0ZXJuaW9uIix7dmFsdWU6ITB9KSx0aGlzLl94PXQsdGhpcy5feT1lLHRoaXMuX3o9bix0aGlzLl93PWl9c3RhdGljIHNsZXJwKHQsZSxuLGkpe3JldHVybiBuLmNvcHkodCkuc2xlcnAoZSxpKX1zdGF0aWMgc2xlcnBGbGF0KHQsZSxuLGkscixvLGEpe2xldCBzPW5baSswXSxsPW5baSsxXSxjPW5baSsyXSx1PW5baSszXTtjb25zdCBoPXJbbyswXSxkPXJbbysxXSxwPXJbbysyXSxmPXJbbyszXTtpZih1IT09Znx8cyE9PWh8fGwhPT1kfHxjIT09cCl7bGV0IHQ9MS1hO2NvbnN0IGU9cypoK2wqZCtjKnArdSpmLG49ZT49MD8xOi0xLGk9MS1lKmU7aWYoaT5OdW1iZXIuRVBTSUxPTil7Y29uc3Qgcj1NYXRoLnNxcnQoaSksbz1NYXRoLmF0YW4yKHIsZSpuKTt0PU1hdGguc2luKHQqbykvcixhPU1hdGguc2luKGEqbykvcn1jb25zdCByPWEqbjtpZihzPXMqdCtoKnIsbD1sKnQrZCpyLGM9Yyp0K3Aqcix1PXUqdCtmKnIsdD09PTEtYSl7Y29uc3QgdD0xL01hdGguc3FydChzKnMrbCpsK2MqYyt1KnUpO3MqPXQsbCo9dCxjKj10LHUqPXR9fXRbZV09cyx0W2UrMV09bCx0W2UrMl09Yyx0W2UrM109dX1zdGF0aWMgbXVsdGlwbHlRdWF0ZXJuaW9uc0ZsYXQodCxlLG4saSxyLG8pe2NvbnN0IGE9bltpXSxzPW5baSsxXSxsPW5baSsyXSxjPW5baSszXSx1PXJbb10saD1yW28rMV0sZD1yW28rMl0scD1yW28rM107cmV0dXJuIHRbZV09YSpwK2MqdStzKmQtbCpoLHRbZSsxXT1zKnArYypoK2wqdS1hKmQsdFtlKzJdPWwqcCtjKmQrYSpoLXMqdSx0W2UrM109YypwLWEqdS1zKmgtbCpkLHR9Z2V0IHgoKXtyZXR1cm4gdGhpcy5feH1zZXQgeCh0KXt0aGlzLl94PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCB5KCl7cmV0dXJuIHRoaXMuX3l9c2V0IHkodCl7dGhpcy5feT10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgeigpe3JldHVybiB0aGlzLl96fXNldCB6KHQpe3RoaXMuX3o9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IHcoKXtyZXR1cm4gdGhpcy5fd31zZXQgdyh0KXt0aGlzLl93PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfXNldCh0LGUsbixpKXtyZXR1cm4gdGhpcy5feD10LHRoaXMuX3k9ZSx0aGlzLl96PW4sdGhpcy5fdz1pLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMuX3gsdGhpcy5feSx0aGlzLl96LHRoaXMuX3cpfWNvcHkodCl7cmV0dXJuIHRoaXMuX3g9dC54LHRoaXMuX3k9dC55LHRoaXMuX3o9dC56LHRoaXMuX3c9dC53LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21FdWxlcih0LGUpe2lmKCF0fHwhdC5pc0V1bGVyKXRocm93IG5ldyBFcnJvcigiVEhSRUUuUXVhdGVybmlvbjogLnNldEZyb21FdWxlcigpIG5vdyBleHBlY3RzIGFuIEV1bGVyIHJvdGF0aW9uIHJhdGhlciB0aGFuIGEgVmVjdG9yMyBhbmQgb3JkZXIuIik7Y29uc3Qgbj10Ll94LGk9dC5feSxyPXQuX3osbz10Ll9vcmRlcixhPU1hdGguY29zLHM9TWF0aC5zaW4sbD1hKG4vMiksYz1hKGkvMiksdT1hKHIvMiksaD1zKG4vMiksZD1zKGkvMikscD1zKHIvMik7c3dpdGNoKG8pe2Nhc2UiWFlaIjp0aGlzLl94PWgqYyp1K2wqZCpwLHRoaXMuX3k9bCpkKnUtaCpjKnAsdGhpcy5fej1sKmMqcCtoKmQqdSx0aGlzLl93PWwqYyp1LWgqZCpwO2JyZWFrO2Nhc2UiWVhaIjp0aGlzLl94PWgqYyp1K2wqZCpwLHRoaXMuX3k9bCpkKnUtaCpjKnAsdGhpcy5fej1sKmMqcC1oKmQqdSx0aGlzLl93PWwqYyp1K2gqZCpwO2JyZWFrO2Nhc2UiWlhZIjp0aGlzLl94PWgqYyp1LWwqZCpwLHRoaXMuX3k9bCpkKnUraCpjKnAsdGhpcy5fej1sKmMqcCtoKmQqdSx0aGlzLl93PWwqYyp1LWgqZCpwO2JyZWFrO2Nhc2UiWllYIjp0aGlzLl94PWgqYyp1LWwqZCpwLHRoaXMuX3k9bCpkKnUraCpjKnAsdGhpcy5fej1sKmMqcC1oKmQqdSx0aGlzLl93PWwqYyp1K2gqZCpwO2JyZWFrO2Nhc2UiWVpYIjp0aGlzLl94PWgqYyp1K2wqZCpwLHRoaXMuX3k9bCpkKnUraCpjKnAsdGhpcy5fej1sKmMqcC1oKmQqdSx0aGlzLl93PWwqYyp1LWgqZCpwO2JyZWFrO2Nhc2UiWFpZIjp0aGlzLl94PWgqYyp1LWwqZCpwLHRoaXMuX3k9bCpkKnUtaCpjKnAsdGhpcy5fej1sKmMqcCtoKmQqdSx0aGlzLl93PWwqYyp1K2gqZCpwO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiAuc2V0RnJvbUV1bGVyKCkgZW5jb3VudGVyZWQgYW4gdW5rbm93biBvcmRlcjogIitvKX1yZXR1cm4hMSE9PWUmJnRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21BeGlzQW5nbGUodCxlKXtjb25zdCBuPWUvMixpPU1hdGguc2luKG4pO3JldHVybiB0aGlzLl94PXQueCppLHRoaXMuX3k9dC55KmksdGhpcy5fej10LnoqaSx0aGlzLl93PU1hdGguY29zKG4pLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21Sb3RhdGlvbk1hdHJpeCh0KXtjb25zdCBlPXQuZWxlbWVudHMsbj1lWzBdLGk9ZVs0XSxyPWVbOF0sbz1lWzFdLGE9ZVs1XSxzPWVbOV0sbD1lWzJdLGM9ZVs2XSx1PWVbMTBdLGg9bithK3U7aWYoaD4wKXtjb25zdCB0PS41L01hdGguc3FydChoKzEpO3RoaXMuX3c9LjI1L3QsdGhpcy5feD0oYy1zKSp0LHRoaXMuX3k9KHItbCkqdCx0aGlzLl96PShvLWkpKnR9ZWxzZSBpZihuPmEmJm4+dSl7Y29uc3QgdD0yKk1hdGguc3FydCgxK24tYS11KTt0aGlzLl93PShjLXMpL3QsdGhpcy5feD0uMjUqdCx0aGlzLl95PShpK28pL3QsdGhpcy5fej0ocitsKS90fWVsc2UgaWYoYT51KXtjb25zdCB0PTIqTWF0aC5zcXJ0KDErYS1uLXUpO3RoaXMuX3c9KHItbCkvdCx0aGlzLl94PShpK28pL3QsdGhpcy5feT0uMjUqdCx0aGlzLl96PShzK2MpL3R9ZWxzZXtjb25zdCB0PTIqTWF0aC5zcXJ0KDErdS1uLWEpO3RoaXMuX3c9KG8taSkvdCx0aGlzLl94PShyK2wpL3QsdGhpcy5feT0ocytjKS90LHRoaXMuX3o9LjI1KnR9cmV0dXJuIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21Vbml0VmVjdG9ycyh0LGUpe2xldCBuPXQuZG90KGUpKzE7cmV0dXJuIG48MWUtNj8obj0wLE1hdGguYWJzKHQueCk+TWF0aC5hYnModC56KT8odGhpcy5feD0tdC55LHRoaXMuX3k9dC54LHRoaXMuX3o9MCx0aGlzLl93PW4pOih0aGlzLl94PTAsdGhpcy5feT0tdC56LHRoaXMuX3o9dC55LHRoaXMuX3c9bikpOih0aGlzLl94PXQueSplLnotdC56KmUueSx0aGlzLl95PXQueiplLngtdC54KmUueix0aGlzLl96PXQueCplLnktdC55KmUueCx0aGlzLl93PW4pLHRoaXMubm9ybWFsaXplKCl9YW5nbGVUbyh0KXtyZXR1cm4gMipNYXRoLmFjb3MoTWF0aC5hYnMoUk90LmNsYW1wKHRoaXMuZG90KHQpLC0xLDEpKSl9cm90YXRlVG93YXJkcyh0LGUpe2NvbnN0IG49dGhpcy5hbmdsZVRvKHQpO2lmKDA9PT1uKXJldHVybiB0aGlzO2NvbnN0IGk9TWF0aC5taW4oMSxlL24pO3JldHVybiB0aGlzLnNsZXJwKHQsaSksdGhpc31pZGVudGl0eSgpe3JldHVybiB0aGlzLnNldCgwLDAsMCwxKX1pbnZlcnQoKXtyZXR1cm4gdGhpcy5jb25qdWdhdGUoKX1jb25qdWdhdGUoKXtyZXR1cm4gdGhpcy5feCo9LTEsdGhpcy5feSo9LTEsdGhpcy5feio9LTEsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9ZG90KHQpe3JldHVybiB0aGlzLl94KnQuX3grdGhpcy5feSp0Ll95K3RoaXMuX3oqdC5feit0aGlzLl93KnQuX3d9bGVuZ3RoU3EoKXtyZXR1cm4gdGhpcy5feCp0aGlzLl94K3RoaXMuX3kqdGhpcy5feSt0aGlzLl96KnRoaXMuX3ordGhpcy5fdyp0aGlzLl93fWxlbmd0aCgpe3JldHVybiBNYXRoLnNxcnQodGhpcy5feCp0aGlzLl94K3RoaXMuX3kqdGhpcy5feSt0aGlzLl96KnRoaXMuX3ordGhpcy5fdyp0aGlzLl93KX1ub3JtYWxpemUoKXtsZXQgdD10aGlzLmxlbmd0aCgpO3JldHVybiAwPT09dD8odGhpcy5feD0wLHRoaXMuX3k9MCx0aGlzLl96PTAsdGhpcy5fdz0xKToodD0xL3QsdGhpcy5feD10aGlzLl94KnQsdGhpcy5feT10aGlzLl95KnQsdGhpcy5fej10aGlzLl96KnQsdGhpcy5fdz10aGlzLl93KnQpLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfW11bHRpcGx5KHQsZSl7cmV0dXJuIHZvaWQgMCE9PWU/KGNvbnNvbGUud2FybigiVEhSRUUuUXVhdGVybmlvbjogLm11bHRpcGx5KCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAubXVsdGlwbHlRdWF0ZXJuaW9ucyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5tdWx0aXBseVF1YXRlcm5pb25zKHQsZSkpOnRoaXMubXVsdGlwbHlRdWF0ZXJuaW9ucyh0aGlzLHQpfXByZW11bHRpcGx5KHQpe3JldHVybiB0aGlzLm11bHRpcGx5UXVhdGVybmlvbnModCx0aGlzKX1tdWx0aXBseVF1YXRlcm5pb25zKHQsZSl7Y29uc3Qgbj10Ll94LGk9dC5feSxyPXQuX3osbz10Ll93LGE9ZS5feCxzPWUuX3ksbD1lLl96LGM9ZS5fdztyZXR1cm4gdGhpcy5feD1uKmMrbyphK2kqbC1yKnMsdGhpcy5feT1pKmMrbypzK3IqYS1uKmwsdGhpcy5fej1yKmMrbypsK24qcy1pKmEsdGhpcy5fdz1vKmMtbiphLWkqcy1yKmwsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2xlcnAodCxlKXtpZigwPT09ZSlyZXR1cm4gdGhpcztpZigxPT09ZSlyZXR1cm4gdGhpcy5jb3B5KHQpO2NvbnN0IG49dGhpcy5feCxpPXRoaXMuX3kscj10aGlzLl96LG89dGhpcy5fdztsZXQgYT1vKnQuX3crbip0Ll94K2kqdC5feStyKnQuX3o7aWYoYTwwPyh0aGlzLl93PS10Ll93LHRoaXMuX3g9LXQuX3gsdGhpcy5feT0tdC5feSx0aGlzLl96PS10Ll96LGE9LWEpOnRoaXMuY29weSh0KSxhPj0xKXJldHVybiB0aGlzLl93PW8sdGhpcy5feD1uLHRoaXMuX3k9aSx0aGlzLl96PXIsdGhpcztjb25zdCBzPTEtYSphO2lmKHM8PU51bWJlci5FUFNJTE9OKXtjb25zdCB0PTEtZTtyZXR1cm4gdGhpcy5fdz10Km8rZSp0aGlzLl93LHRoaXMuX3g9dCpuK2UqdGhpcy5feCx0aGlzLl95PXQqaStlKnRoaXMuX3ksdGhpcy5fej10KnIrZSp0aGlzLl96LHRoaXMubm9ybWFsaXplKCksdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9Y29uc3QgbD1NYXRoLnNxcnQocyksYz1NYXRoLmF0YW4yKGwsYSksdT1NYXRoLnNpbigoMS1lKSpjKS9sLGg9TWF0aC5zaW4oZSpjKS9sO3JldHVybiB0aGlzLl93PW8qdSt0aGlzLl93KmgsdGhpcy5feD1uKnUrdGhpcy5feCpoLHRoaXMuX3k9aSp1K3RoaXMuX3kqaCx0aGlzLl96PXIqdSt0aGlzLl96KmgsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Ll94PT09dGhpcy5feCYmdC5feT09PXRoaXMuX3kmJnQuX3o9PT10aGlzLl96JiZ0Ll93PT09dGhpcy5fd31mcm9tQXJyYXkodCxlPTApe3JldHVybiB0aGlzLl94PXRbZV0sdGhpcy5feT10W2UrMV0sdGhpcy5fej10W2UrMl0sdGhpcy5fdz10W2UrM10sdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7cmV0dXJuIHRbZV09dGhpcy5feCx0W2UrMV09dGhpcy5feSx0W2UrMl09dGhpcy5feix0W2UrM109dGhpcy5fdyx0fWZyb21CdWZmZXJBdHRyaWJ1dGUodCxlKXtyZXR1cm4gdGhpcy5feD10LmdldFgoZSksdGhpcy5feT10LmdldFkoZSksdGhpcy5fej10LmdldFooZSksdGhpcy5fdz10LmdldFcoZSksdGhpc31fb25DaGFuZ2UodCl7cmV0dXJuIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2s9dCx0aGlzfV9vbkNoYW5nZUNhbGxiYWNrKCl7fX1jbGFzcyBxT3R7Y29uc3RydWN0b3IodD0wLGU9MCxuPTApe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpc1ZlY3RvcjMiLHt2YWx1ZTohMH0pLHRoaXMueD10LHRoaXMueT1lLHRoaXMuej1ufXNldCh0LGUsbil7cmV0dXJuIHZvaWQgMD09PW4mJihuPXRoaXMueiksdGhpcy54PXQsdGhpcy55PWUsdGhpcy56PW4sdGhpc31zZXRTY2FsYXIodCl7cmV0dXJuIHRoaXMueD10LHRoaXMueT10LHRoaXMuej10LHRoaXN9c2V0WCh0KXtyZXR1cm4gdGhpcy54PXQsdGhpc31zZXRZKHQpe3JldHVybiB0aGlzLnk9dCx0aGlzfXNldFoodCl7cmV0dXJuIHRoaXMuej10LHRoaXN9c2V0Q29tcG9uZW50KHQsZSl7c3dpdGNoKHQpe2Nhc2UgMDp0aGlzLng9ZTticmVhaztjYXNlIDE6dGhpcy55PWU7YnJlYWs7Y2FzZSAyOnRoaXMuej1lO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrdCl9cmV0dXJuIHRoaXN9Z2V0Q29tcG9uZW50KHQpe3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIHRoaXMueDtjYXNlIDE6cmV0dXJuIHRoaXMueTtjYXNlIDI6cmV0dXJuIHRoaXMuejtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK3QpfX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLngsdGhpcy55LHRoaXMueil9Y29weSh0KXtyZXR1cm4gdGhpcy54PXQueCx0aGlzLnk9dC55LHRoaXMuej10LnosdGhpc31hZGQodCxlKXtyZXR1cm4gdm9pZCAwIT09ZT8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuYWRkKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuYWRkVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5hZGRWZWN0b3JzKHQsZSkpOih0aGlzLngrPXQueCx0aGlzLnkrPXQueSx0aGlzLnorPXQueix0aGlzKX1hZGRTY2FsYXIodCl7cmV0dXJuIHRoaXMueCs9dCx0aGlzLnkrPXQsdGhpcy56Kz10LHRoaXN9YWRkVmVjdG9ycyh0LGUpe3JldHVybiB0aGlzLng9dC54K2UueCx0aGlzLnk9dC55K2UueSx0aGlzLno9dC56K2Uueix0aGlzfWFkZFNjYWxlZFZlY3Rvcih0LGUpe3JldHVybiB0aGlzLngrPXQueCplLHRoaXMueSs9dC55KmUsdGhpcy56Kz10LnoqZSx0aGlzfXN1Yih0LGUpe3JldHVybiB2b2lkIDAhPT1lPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5zdWIoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5zdWJWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLnN1YlZlY3RvcnModCxlKSk6KHRoaXMueC09dC54LHRoaXMueS09dC55LHRoaXMuei09dC56LHRoaXMpfXN1YlNjYWxhcih0KXtyZXR1cm4gdGhpcy54LT10LHRoaXMueS09dCx0aGlzLnotPXQsdGhpc31zdWJWZWN0b3JzKHQsZSl7cmV0dXJuIHRoaXMueD10LngtZS54LHRoaXMueT10LnktZS55LHRoaXMuej10LnotZS56LHRoaXN9bXVsdGlwbHkodCxlKXtyZXR1cm4gdm9pZCAwIT09ZT8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAubXVsdGlwbHkoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5tdWx0aXBseVZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMubXVsdGlwbHlWZWN0b3JzKHQsZSkpOih0aGlzLngqPXQueCx0aGlzLnkqPXQueSx0aGlzLnoqPXQueix0aGlzKX1tdWx0aXBseVNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kj10LHRoaXMueSo9dCx0aGlzLnoqPXQsdGhpc31tdWx0aXBseVZlY3RvcnModCxlKXtyZXR1cm4gdGhpcy54PXQueCplLngsdGhpcy55PXQueSplLnksdGhpcy56PXQueiplLnosdGhpc31hcHBseUV1bGVyKHQpe3JldHVybiB0JiZ0LmlzRXVsZXJ8fGNvbnNvbGUuZXJyb3IoIlRIUkVFLlZlY3RvcjM6IC5hcHBseUV1bGVyKCkgbm93IGV4cGVjdHMgYW4gRXVsZXIgcm90YXRpb24gcmF0aGVyIHRoYW4gYSBWZWN0b3IzIGFuZCBvcmRlci4iKSx0aGlzLmFwcGx5UXVhdGVybmlvbihYT3Quc2V0RnJvbUV1bGVyKHQpKX1hcHBseUF4aXNBbmdsZSh0LGUpe3JldHVybiB0aGlzLmFwcGx5UXVhdGVybmlvbihYT3Quc2V0RnJvbUF4aXNBbmdsZSh0LGUpKX1hcHBseU1hdHJpeDModCl7Y29uc3QgZT10aGlzLngsbj10aGlzLnksaT10aGlzLnoscj10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9clswXSplK3JbM10qbityWzZdKmksdGhpcy55PXJbMV0qZStyWzRdKm4rcls3XSppLHRoaXMuej1yWzJdKmUrcls1XSpuK3JbOF0qaSx0aGlzfWFwcGx5Tm9ybWFsTWF0cml4KHQpe3JldHVybiB0aGlzLmFwcGx5TWF0cml4Myh0KS5ub3JtYWxpemUoKX1hcHBseU1hdHJpeDQodCl7Y29uc3QgZT10aGlzLngsbj10aGlzLnksaT10aGlzLnoscj10LmVsZW1lbnRzLG89MS8oclszXSplK3JbN10qbityWzExXSppK3JbMTVdKTtyZXR1cm4gdGhpcy54PShyWzBdKmUrcls0XSpuK3JbOF0qaStyWzEyXSkqbyx0aGlzLnk9KHJbMV0qZStyWzVdKm4rcls5XSppK3JbMTNdKSpvLHRoaXMuej0oclsyXSplK3JbNl0qbityWzEwXSppK3JbMTRdKSpvLHRoaXN9YXBwbHlRdWF0ZXJuaW9uKHQpe2NvbnN0IGU9dGhpcy54LG49dGhpcy55LGk9dGhpcy56LHI9dC54LG89dC55LGE9dC56LHM9dC53LGw9cyplK28qaS1hKm4sYz1zKm4rYSplLXIqaSx1PXMqaStyKm4tbyplLGg9LXIqZS1vKm4tYSppO3JldHVybiB0aGlzLng9bCpzK2gqLXIrYyotYS11Ki1vLHRoaXMueT1jKnMraCotbyt1Ki1yLWwqLWEsdGhpcy56PXUqcytoKi1hK2wqLW8tYyotcix0aGlzfXByb2plY3QodCl7cmV0dXJuIHRoaXMuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGRJbnZlcnNlKS5hcHBseU1hdHJpeDQodC5wcm9qZWN0aW9uTWF0cml4KX11bnByb2plY3QodCl7cmV0dXJuIHRoaXMuYXBwbHlNYXRyaXg0KHQucHJvamVjdGlvbk1hdHJpeEludmVyc2UpLmFwcGx5TWF0cml4NCh0Lm1hdHJpeFdvcmxkKX10cmFuc2Zvcm1EaXJlY3Rpb24odCl7Y29uc3QgZT10aGlzLngsbj10aGlzLnksaT10aGlzLnoscj10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9clswXSplK3JbNF0qbityWzhdKmksdGhpcy55PXJbMV0qZStyWzVdKm4rcls5XSppLHRoaXMuej1yWzJdKmUrcls2XSpuK3JbMTBdKmksdGhpcy5ub3JtYWxpemUoKX1kaXZpZGUodCl7cmV0dXJuIHRoaXMueC89dC54LHRoaXMueS89dC55LHRoaXMuei89dC56LHRoaXN9ZGl2aWRlU2NhbGFyKHQpe3JldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKDEvdCl9bWluKHQpe3JldHVybiB0aGlzLng9TWF0aC5taW4odGhpcy54LHQueCksdGhpcy55PU1hdGgubWluKHRoaXMueSx0LnkpLHRoaXMuej1NYXRoLm1pbih0aGlzLnosdC56KSx0aGlzfW1heCh0KXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1heCh0aGlzLnksdC55KSx0aGlzLno9TWF0aC5tYXgodGhpcy56LHQueiksdGhpc31jbGFtcCh0LGUpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodC54LE1hdGgubWluKGUueCx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodC55LE1hdGgubWluKGUueSx0aGlzLnkpKSx0aGlzLno9TWF0aC5tYXgodC56LE1hdGgubWluKGUueix0aGlzLnopKSx0aGlzfWNsYW1wU2NhbGFyKHQsZSl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy54KSksdGhpcy55PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLnkpKSx0aGlzLno9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMueikpLHRoaXN9Y2xhbXBMZW5ndGgodCxlKXtjb25zdCBuPXRoaXMubGVuZ3RoKCk7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKG58fDEpLm11bHRpcGx5U2NhbGFyKE1hdGgubWF4KHQsTWF0aC5taW4oZSxuKSkpfWZsb29yKCl7cmV0dXJuIHRoaXMueD1NYXRoLmZsb29yKHRoaXMueCksdGhpcy55PU1hdGguZmxvb3IodGhpcy55KSx0aGlzLno9TWF0aC5mbG9vcih0aGlzLnopLHRoaXN9Y2VpbCgpe3JldHVybiB0aGlzLng9TWF0aC5jZWlsKHRoaXMueCksdGhpcy55PU1hdGguY2VpbCh0aGlzLnkpLHRoaXMuej1NYXRoLmNlaWwodGhpcy56KSx0aGlzfXJvdW5kKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJvdW5kKHRoaXMueCksdGhpcy55PU1hdGgucm91bmQodGhpcy55KSx0aGlzLno9TWF0aC5yb3VuZCh0aGlzLnopLHRoaXN9cm91bmRUb1plcm8oKXtyZXR1cm4gdGhpcy54PXRoaXMueDwwP01hdGguY2VpbCh0aGlzLngpOk1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9dGhpcy55PDA/TWF0aC5jZWlsKHRoaXMueSk6TWF0aC5mbG9vcih0aGlzLnkpLHRoaXMuej10aGlzLno8MD9NYXRoLmNlaWwodGhpcy56KTpNYXRoLmZsb29yKHRoaXMueiksdGhpc31uZWdhdGUoKXtyZXR1cm4gdGhpcy54PS10aGlzLngsdGhpcy55PS10aGlzLnksdGhpcy56PS10aGlzLnosdGhpc31kb3QodCl7cmV0dXJuIHRoaXMueCp0LngrdGhpcy55KnQueSt0aGlzLnoqdC56fWxlbmd0aFNxKCl7cmV0dXJuIHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSt0aGlzLnoqdGhpcy56fWxlbmd0aCgpe3JldHVybiBNYXRoLnNxcnQodGhpcy54KnRoaXMueCt0aGlzLnkqdGhpcy55K3RoaXMueip0aGlzLnopfW1hbmhhdHRhbkxlbmd0aCgpe3JldHVybiBNYXRoLmFicyh0aGlzLngpK01hdGguYWJzKHRoaXMueSkrTWF0aC5hYnModGhpcy56KX1ub3JtYWxpemUoKXtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIodGhpcy5sZW5ndGgoKXx8MSl9c2V0TGVuZ3RoKHQpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKHQpfWxlcnAodCxlKXtyZXR1cm4gdGhpcy54Kz0odC54LXRoaXMueCkqZSx0aGlzLnkrPSh0LnktdGhpcy55KSplLHRoaXMueis9KHQuei10aGlzLnopKmUsdGhpc31sZXJwVmVjdG9ycyh0LGUsbil7cmV0dXJuIHRoaXMueD10LngrKGUueC10LngpKm4sdGhpcy55PXQueSsoZS55LXQueSkqbix0aGlzLno9dC56KyhlLnotdC56KSpuLHRoaXN9Y3Jvc3ModCxlKXtyZXR1cm4gdm9pZCAwIT09ZT8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuY3Jvc3MoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5jcm9zc1ZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuY3Jvc3NWZWN0b3JzKHQsZSkpOnRoaXMuY3Jvc3NWZWN0b3JzKHRoaXMsdCl9Y3Jvc3NWZWN0b3JzKHQsZSl7Y29uc3Qgbj10LngsaT10Lnkscj10Lnosbz1lLngsYT1lLnkscz1lLno7cmV0dXJuIHRoaXMueD1pKnMtciphLHRoaXMueT1yKm8tbipzLHRoaXMuej1uKmEtaSpvLHRoaXN9cHJvamVjdE9uVmVjdG9yKHQpe2NvbnN0IGU9dC5sZW5ndGhTcSgpO2lmKDA9PT1lKXJldHVybiB0aGlzLnNldCgwLDAsMCk7Y29uc3Qgbj10LmRvdCh0aGlzKS9lO3JldHVybiB0aGlzLmNvcHkodCkubXVsdGlwbHlTY2FsYXIobil9cHJvamVjdE9uUGxhbmUodCl7cmV0dXJuIFlPdC5jb3B5KHRoaXMpLnByb2plY3RPblZlY3Rvcih0KSx0aGlzLnN1YihZT3QpfXJlZmxlY3QodCl7cmV0dXJuIHRoaXMuc3ViKFlPdC5jb3B5KHQpLm11bHRpcGx5U2NhbGFyKDIqdGhpcy5kb3QodCkpKX1hbmdsZVRvKHQpe2NvbnN0IGU9TWF0aC5zcXJ0KHRoaXMubGVuZ3RoU3EoKSp0Lmxlbmd0aFNxKCkpO2lmKDA9PT1lKXJldHVybiBNYXRoLlBJLzI7Y29uc3Qgbj10aGlzLmRvdCh0KS9lO3JldHVybiBNYXRoLmFjb3MoUk90LmNsYW1wKG4sLTEsMSkpfWRpc3RhbmNlVG8odCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLmRpc3RhbmNlVG9TcXVhcmVkKHQpKX1kaXN0YW5jZVRvU3F1YXJlZCh0KXtjb25zdCBlPXRoaXMueC10Lngsbj10aGlzLnktdC55LGk9dGhpcy56LXQuejtyZXR1cm4gZSplK24qbitpKml9bWFuaGF0dGFuRGlzdGFuY2VUbyh0KXtyZXR1cm4gTWF0aC5hYnModGhpcy54LXQueCkrTWF0aC5hYnModGhpcy55LXQueSkrTWF0aC5hYnModGhpcy56LXQueil9c2V0RnJvbVNwaGVyaWNhbCh0KXtyZXR1cm4gdGhpcy5zZXRGcm9tU3BoZXJpY2FsQ29vcmRzKHQucmFkaXVzLHQucGhpLHQudGhldGEpfXNldEZyb21TcGhlcmljYWxDb29yZHModCxlLG4pe2NvbnN0IGk9TWF0aC5zaW4oZSkqdDtyZXR1cm4gdGhpcy54PWkqTWF0aC5zaW4obiksdGhpcy55PU1hdGguY29zKGUpKnQsdGhpcy56PWkqTWF0aC5jb3MobiksdGhpc31zZXRGcm9tQ3lsaW5kcmljYWwodCl7cmV0dXJuIHRoaXMuc2V0RnJvbUN5bGluZHJpY2FsQ29vcmRzKHQucmFkaXVzLHQudGhldGEsdC55KX1zZXRGcm9tQ3lsaW5kcmljYWxDb29yZHModCxlLG4pe3JldHVybiB0aGlzLng9dCpNYXRoLnNpbihlKSx0aGlzLnk9bix0aGlzLno9dCpNYXRoLmNvcyhlKSx0aGlzfXNldEZyb21NYXRyaXhQb3NpdGlvbih0KXtjb25zdCBlPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMueD1lWzEyXSx0aGlzLnk9ZVsxM10sdGhpcy56PWVbMTRdLHRoaXN9c2V0RnJvbU1hdHJpeFNjYWxlKHQpe2NvbnN0IGU9dGhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKHQsMCkubGVuZ3RoKCksbj10aGlzLnNldEZyb21NYXRyaXhDb2x1bW4odCwxKS5sZW5ndGgoKSxpPXRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbih0LDIpLmxlbmd0aCgpO3JldHVybiB0aGlzLng9ZSx0aGlzLnk9bix0aGlzLno9aSx0aGlzfXNldEZyb21NYXRyaXhDb2x1bW4odCxlKXtyZXR1cm4gdGhpcy5mcm9tQXJyYXkodC5lbGVtZW50cyw0KmUpfXNldEZyb21NYXRyaXgzQ29sdW1uKHQsZSl7cmV0dXJuIHRoaXMuZnJvbUFycmF5KHQuZWxlbWVudHMsMyplKX1lcXVhbHModCl7cmV0dXJuIHQueD09PXRoaXMueCYmdC55PT09dGhpcy55JiZ0Lno9PT10aGlzLnp9ZnJvbUFycmF5KHQsZT0wKXtyZXR1cm4gdGhpcy54PXRbZV0sdGhpcy55PXRbZSsxXSx0aGlzLno9dFtlKzJdLHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7cmV0dXJuIHRbZV09dGhpcy54LHRbZSsxXT10aGlzLnksdFtlKzJdPXRoaXMueix0fWZyb21CdWZmZXJBdHRyaWJ1dGUodCxlLG4pe3JldHVybiB2b2lkIDAhPT1uJiZjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IG9mZnNldCBoYXMgYmVlbiByZW1vdmVkIGZyb20gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKSx0aGlzLng9dC5nZXRYKGUpLHRoaXMueT10LmdldFkoZSksdGhpcy56PXQuZ2V0WihlKSx0aGlzfXJhbmRvbSgpe3JldHVybiB0aGlzLng9TWF0aC5yYW5kb20oKSx0aGlzLnk9TWF0aC5yYW5kb20oKSx0aGlzLno9TWF0aC5yYW5kb20oKSx0aGlzfX1jb25zdCBZT3Q9bmV3IHFPdCxYT3Q9bmV3IFdPdDtjbGFzcyAkT3R7Y29uc3RydWN0b3IodCxlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaXNCb3gzIix7dmFsdWU6ITB9KSx0aGlzLm1pbj12b2lkIDAhPT10P3Q6bmV3IHFPdCgxLzAsMS8wLDEvMCksdGhpcy5tYXg9dm9pZCAwIT09ZT9lOm5ldyBxT3QoLTEvMCwtMS8wLC0xLzApfXNldCh0LGUpe3JldHVybiB0aGlzLm1pbi5jb3B5KHQpLHRoaXMubWF4LmNvcHkoZSksdGhpc31zZXRGcm9tQXJyYXkodCl7bGV0IGU9MS8wLG49MS8wLGk9MS8wLHI9LTEvMCxvPS0xLzAsYT0tMS8wO2ZvcihsZXQgcz0wLGw9dC5sZW5ndGg7czxsO3MrPTMpe2NvbnN0IGw9dFtzXSxjPXRbcysxXSx1PXRbcysyXTtsPGUmJihlPWwpLGM8biYmKG49YyksdTxpJiYoaT11KSxsPnImJihyPWwpLGM+byYmKG89YyksdT5hJiYoYT11KX1yZXR1cm4gdGhpcy5taW4uc2V0KGUsbixpKSx0aGlzLm1heC5zZXQocixvLGEpLHRoaXN9c2V0RnJvbUJ1ZmZlckF0dHJpYnV0ZSh0KXtsZXQgZT0xLzAsbj0xLzAsaT0xLzAscj0tMS8wLG89LTEvMCxhPS0xLzA7Zm9yKGxldCBzPTAsbD10LmNvdW50O3M8bDtzKyspe2NvbnN0IGw9dC5nZXRYKHMpLGM9dC5nZXRZKHMpLHU9dC5nZXRaKHMpO2w8ZSYmKGU9bCksYzxuJiYobj1jKSx1PGkmJihpPXUpLGw+ciYmKHI9bCksYz5vJiYobz1jKSx1PmEmJihhPXUpfXJldHVybiB0aGlzLm1pbi5zZXQoZSxuLGkpLHRoaXMubWF4LnNldChyLG8sYSksdGhpc31zZXRGcm9tUG9pbnRzKHQpe3RoaXMubWFrZUVtcHR5KCk7Zm9yKGxldCBlPTAsbj10Lmxlbmd0aDtlPG47ZSsrKXRoaXMuZXhwYW5kQnlQb2ludCh0W2VdKTtyZXR1cm4gdGhpc31zZXRGcm9tQ2VudGVyQW5kU2l6ZSh0LGUpe2NvbnN0IG49Sk90LmNvcHkoZSkubXVsdGlwbHlTY2FsYXIoLjUpO3JldHVybiB0aGlzLm1pbi5jb3B5KHQpLnN1YihuKSx0aGlzLm1heC5jb3B5KHQpLmFkZChuKSx0aGlzfXNldEZyb21PYmplY3QodCl7cmV0dXJuIHRoaXMubWFrZUVtcHR5KCksdGhpcy5leHBhbmRCeU9iamVjdCh0KX1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLm1pbi5jb3B5KHQubWluKSx0aGlzLm1heC5jb3B5KHQubWF4KSx0aGlzfW1ha2VFbXB0eSgpe3JldHVybiB0aGlzLm1pbi54PXRoaXMubWluLnk9dGhpcy5taW4uej0xLzAsdGhpcy5tYXgueD10aGlzLm1heC55PXRoaXMubWF4Lno9LTEvMCx0aGlzfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5tYXgueDx0aGlzLm1pbi54fHx0aGlzLm1heC55PHRoaXMubWluLnl8fHRoaXMubWF4Lno8dGhpcy5taW4uen1nZXRDZW50ZXIodCl7cmV0dXJuIHZvaWQgMD09PXQmJihjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5nZXRDZW50ZXIoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIiksdD1uZXcgcU90KSx0aGlzLmlzRW1wdHkoKT90LnNldCgwLDAsMCk6dC5hZGRWZWN0b3JzKHRoaXMubWluLHRoaXMubWF4KS5tdWx0aXBseVNjYWxhciguNSl9Z2V0U2l6ZSh0KXtyZXR1cm4gdm9pZCAwPT09dCYmKGNvbnNvbGUud2FybigiVEhSRUUuQm94MzogLmdldFNpemUoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIiksdD1uZXcgcU90KSx0aGlzLmlzRW1wdHkoKT90LnNldCgwLDAsMCk6dC5zdWJWZWN0b3JzKHRoaXMubWF4LHRoaXMubWluKX1leHBhbmRCeVBvaW50KHQpe3JldHVybiB0aGlzLm1pbi5taW4odCksdGhpcy5tYXgubWF4KHQpLHRoaXN9ZXhwYW5kQnlWZWN0b3IodCl7cmV0dXJuIHRoaXMubWluLnN1Yih0KSx0aGlzLm1heC5hZGQodCksdGhpc31leHBhbmRCeVNjYWxhcih0KXtyZXR1cm4gdGhpcy5taW4uYWRkU2NhbGFyKC10KSx0aGlzLm1heC5hZGRTY2FsYXIodCksdGhpc31leHBhbmRCeU9iamVjdCh0KXt0LnVwZGF0ZVdvcmxkTWF0cml4KCExLCExKTtjb25zdCBlPXQuZ2VvbWV0cnk7dm9pZCAwIT09ZSYmKG51bGw9PT1lLmJvdW5kaW5nQm94JiZlLmNvbXB1dGVCb3VuZGluZ0JveCgpLFFPdC5jb3B5KGUuYm91bmRpbmdCb3gpLFFPdC5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZCksdGhpcy51bmlvbihRT3QpKTtjb25zdCBuPXQuY2hpbGRyZW47Zm9yKGxldCB0PTAsZT1uLmxlbmd0aDt0PGU7dCsrKXRoaXMuZXhwYW5kQnlPYmplY3Qoblt0XSk7cmV0dXJuIHRoaXN9Y29udGFpbnNQb2ludCh0KXtyZXR1cm4hKHQueDx0aGlzLm1pbi54fHx0Lng+dGhpcy5tYXgueHx8dC55PHRoaXMubWluLnl8fHQueT50aGlzLm1heC55fHx0Lno8dGhpcy5taW4uenx8dC56PnRoaXMubWF4LnopfWNvbnRhaW5zQm94KHQpe3JldHVybiB0aGlzLm1pbi54PD10Lm1pbi54JiZ0Lm1heC54PD10aGlzLm1heC54JiZ0aGlzLm1pbi55PD10Lm1pbi55JiZ0Lm1heC55PD10aGlzLm1heC55JiZ0aGlzLm1pbi56PD10Lm1pbi56JiZ0Lm1heC56PD10aGlzLm1heC56fWdldFBhcmFtZXRlcih0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuZ2V0UGFyYW1ldGVyKCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLGU9bmV3IHFPdCksZS5zZXQoKHQueC10aGlzLm1pbi54KS8odGhpcy5tYXgueC10aGlzLm1pbi54KSwodC55LXRoaXMubWluLnkpLyh0aGlzLm1heC55LXRoaXMubWluLnkpLCh0LnotdGhpcy5taW4ueikvKHRoaXMubWF4LnotdGhpcy5taW4ueikpfWludGVyc2VjdHNCb3godCl7cmV0dXJuISh0Lm1heC54PHRoaXMubWluLnh8fHQubWluLng+dGhpcy5tYXgueHx8dC5tYXgueTx0aGlzLm1pbi55fHx0Lm1pbi55PnRoaXMubWF4Lnl8fHQubWF4Lno8dGhpcy5taW4uenx8dC5taW4uej50aGlzLm1heC56KX1pbnRlcnNlY3RzU3BoZXJlKHQpe3JldHVybiB0aGlzLmNsYW1wUG9pbnQodC5jZW50ZXIsSk90KSxKT3QuZGlzdGFuY2VUb1NxdWFyZWQodC5jZW50ZXIpPD10LnJhZGl1cyp0LnJhZGl1c31pbnRlcnNlY3RzUGxhbmUodCl7bGV0IGUsbjtyZXR1cm4gdC5ub3JtYWwueD4wPyhlPXQubm9ybWFsLngqdGhpcy5taW4ueCxuPXQubm9ybWFsLngqdGhpcy5tYXgueCk6KGU9dC5ub3JtYWwueCp0aGlzLm1heC54LG49dC5ub3JtYWwueCp0aGlzLm1pbi54KSx0Lm5vcm1hbC55PjA/KGUrPXQubm9ybWFsLnkqdGhpcy5taW4ueSxuKz10Lm5vcm1hbC55KnRoaXMubWF4LnkpOihlKz10Lm5vcm1hbC55KnRoaXMubWF4Lnksbis9dC5ub3JtYWwueSp0aGlzLm1pbi55KSx0Lm5vcm1hbC56PjA/KGUrPXQubm9ybWFsLnoqdGhpcy5taW4ueixuKz10Lm5vcm1hbC56KnRoaXMubWF4LnopOihlKz10Lm5vcm1hbC56KnRoaXMubWF4Lnosbis9dC5ub3JtYWwueip0aGlzLm1pbi56KSxlPD0tdC5jb25zdGFudCYmbj49LXQuY29uc3RhbnR9aW50ZXJzZWN0c1RyaWFuZ2xlKHQpe2lmKHRoaXMuaXNFbXB0eSgpKXJldHVybiExO3RoaXMuZ2V0Q2VudGVyKGFSdCksc1J0LnN1YlZlY3RvcnModGhpcy5tYXgsYVJ0KSx0UnQuc3ViVmVjdG9ycyh0LmEsYVJ0KSxlUnQuc3ViVmVjdG9ycyh0LmIsYVJ0KSxuUnQuc3ViVmVjdG9ycyh0LmMsYVJ0KSxpUnQuc3ViVmVjdG9ycyhlUnQsdFJ0KSxyUnQuc3ViVmVjdG9ycyhuUnQsZVJ0KSxvUnQuc3ViVmVjdG9ycyh0UnQsblJ0KTtsZXQgZT1bMCwtaVJ0LnosaVJ0LnksMCwtclJ0LnosclJ0LnksMCwtb1J0Lnosb1J0LnksaVJ0LnosMCwtaVJ0LngsclJ0LnosMCwtclJ0Lngsb1J0LnosMCwtb1J0LngsLWlSdC55LGlSdC54LDAsLXJSdC55LHJSdC54LDAsLW9SdC55LG9SdC54LDBdO3JldHVybiEhS090KGUsdFJ0LGVSdCxuUnQsc1J0KSYmKGU9WzEsMCwwLDAsMSwwLDAsMCwxXSwhIUtPdChlLHRSdCxlUnQsblJ0LHNSdCkmJihsUnQuY3Jvc3NWZWN0b3JzKGlSdCxyUnQpLGU9W2xSdC54LGxSdC55LGxSdC56XSxLT3QoZSx0UnQsZVJ0LG5SdCxzUnQpKSl9Y2xhbXBQb2ludCh0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuY2xhbXBQb2ludCgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSxlPW5ldyBxT3QpLGUuY29weSh0KS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCl9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiBKT3QuY29weSh0KS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCkuc3ViKHQpLmxlbmd0aCgpfWdldEJvdW5kaW5nU3BoZXJlKHQpe3JldHVybiB2b2lkIDA9PT10JiZjb25zb2xlLmVycm9yKCJUSFJFRS5Cb3gzOiAuZ2V0Qm91bmRpbmdTcGhlcmUoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIiksdGhpcy5nZXRDZW50ZXIodC5jZW50ZXIpLHQucmFkaXVzPS41KnRoaXMuZ2V0U2l6ZShKT3QpLmxlbmd0aCgpLHR9aW50ZXJzZWN0KHQpe3JldHVybiB0aGlzLm1pbi5tYXgodC5taW4pLHRoaXMubWF4Lm1pbih0Lm1heCksdGhpcy5pc0VtcHR5KCkmJnRoaXMubWFrZUVtcHR5KCksdGhpc311bmlvbih0KXtyZXR1cm4gdGhpcy5taW4ubWluKHQubWluKSx0aGlzLm1heC5tYXgodC5tYXgpLHRoaXN9YXBwbHlNYXRyaXg0KHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKXx8KFpPdFswXS5zZXQodGhpcy5taW4ueCx0aGlzLm1pbi55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxaT3RbMV0uc2V0KHRoaXMubWluLngsdGhpcy5taW4ueSx0aGlzLm1heC56KS5hcHBseU1hdHJpeDQodCksWk90WzJdLnNldCh0aGlzLm1pbi54LHRoaXMubWF4LnksdGhpcy5taW4ueikuYXBwbHlNYXRyaXg0KHQpLFpPdFszXS5zZXQodGhpcy5taW4ueCx0aGlzLm1heC55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSxaT3RbNF0uc2V0KHRoaXMubWF4LngsdGhpcy5taW4ueSx0aGlzLm1pbi56KS5hcHBseU1hdHJpeDQodCksWk90WzVdLnNldCh0aGlzLm1heC54LHRoaXMubWluLnksdGhpcy5tYXgueikuYXBwbHlNYXRyaXg0KHQpLFpPdFs2XS5zZXQodGhpcy5tYXgueCx0aGlzLm1heC55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxaT3RbN10uc2V0KHRoaXMubWF4LngsdGhpcy5tYXgueSx0aGlzLm1heC56KS5hcHBseU1hdHJpeDQodCksdGhpcy5zZXRGcm9tUG9pbnRzKFpPdCkpLHRoaXN9dHJhbnNsYXRlKHQpe3JldHVybiB0aGlzLm1pbi5hZGQodCksdGhpcy5tYXguYWRkKHQpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lm1pbi5lcXVhbHModGhpcy5taW4pJiZ0Lm1heC5lcXVhbHModGhpcy5tYXgpfX1mdW5jdGlvbiBLT3QodCxlLG4saSxyKXtmb3IobGV0IG89MCxhPXQubGVuZ3RoLTM7bzw9YTtvKz0zKXtjUnQuZnJvbUFycmF5KHQsbyk7Y29uc3QgYT1yLngqTWF0aC5hYnMoY1J0LngpK3IueSpNYXRoLmFicyhjUnQueSkrci56Kk1hdGguYWJzKGNSdC56KSxzPWUuZG90KGNSdCksbD1uLmRvdChjUnQpLGM9aS5kb3QoY1J0KTtpZihNYXRoLm1heCgtTWF0aC5tYXgocyxsLGMpLE1hdGgubWluKHMsbCxjKSk+YSlyZXR1cm4hMX1yZXR1cm4hMH1jb25zdCBaT3Q9W25ldyBxT3QsbmV3IHFPdCxuZXcgcU90LG5ldyBxT3QsbmV3IHFPdCxuZXcgcU90LG5ldyBxT3QsbmV3IHFPdF0sSk90PW5ldyBxT3QsUU90PW5ldyAkT3QsdFJ0PW5ldyBxT3QsZVJ0PW5ldyBxT3QsblJ0PW5ldyBxT3QsaVJ0PW5ldyBxT3QsclJ0PW5ldyBxT3Qsb1J0PW5ldyBxT3QsYVJ0PW5ldyBxT3Qsc1J0PW5ldyBxT3QsbFJ0PW5ldyBxT3QsY1J0PW5ldyBxT3QsdVJ0PW5ldyAkT3Q7Y2xhc3MgaFJ0e2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5jZW50ZXI9dm9pZCAwIT09dD90Om5ldyBxT3QsdGhpcy5yYWRpdXM9dm9pZCAwIT09ZT9lOi0xfXNldCh0LGUpe3JldHVybiB0aGlzLmNlbnRlci5jb3B5KHQpLHRoaXMucmFkaXVzPWUsdGhpc31zZXRGcm9tUG9pbnRzKHQsZSl7Y29uc3Qgbj10aGlzLmNlbnRlcjt2b2lkIDAhPT1lP24uY29weShlKTp1UnQuc2V0RnJvbVBvaW50cyh0KS5nZXRDZW50ZXIobik7bGV0IGk9MDtmb3IobGV0IGU9MCxyPXQubGVuZ3RoO2U8cjtlKyspaT1NYXRoLm1heChpLG4uZGlzdGFuY2VUb1NxdWFyZWQodFtlXSkpO3JldHVybiB0aGlzLnJhZGl1cz1NYXRoLnNxcnQoaSksdGhpc31jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLmNlbnRlci5jb3B5KHQuY2VudGVyKSx0aGlzLnJhZGl1cz10LnJhZGl1cyx0aGlzfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5yYWRpdXM8MH1tYWtlRW1wdHkoKXtyZXR1cm4gdGhpcy5jZW50ZXIuc2V0KDAsMCwwKSx0aGlzLnJhZGl1cz0tMSx0aGlzfWNvbnRhaW5zUG9pbnQodCl7cmV0dXJuIHQuZGlzdGFuY2VUb1NxdWFyZWQodGhpcy5jZW50ZXIpPD10aGlzLnJhZGl1cyp0aGlzLnJhZGl1c31kaXN0YW5jZVRvUG9pbnQodCl7cmV0dXJuIHQuZGlzdGFuY2VUbyh0aGlzLmNlbnRlciktdGhpcy5yYWRpdXN9aW50ZXJzZWN0c1NwaGVyZSh0KXtjb25zdCBlPXRoaXMucmFkaXVzK3QucmFkaXVzO3JldHVybiB0LmNlbnRlci5kaXN0YW5jZVRvU3F1YXJlZCh0aGlzLmNlbnRlcik8PWUqZX1pbnRlcnNlY3RzQm94KHQpe3JldHVybiB0LmludGVyc2VjdHNTcGhlcmUodGhpcyl9aW50ZXJzZWN0c1BsYW5lKHQpe3JldHVybiBNYXRoLmFicyh0LmRpc3RhbmNlVG9Qb2ludCh0aGlzLmNlbnRlcikpPD10aGlzLnJhZGl1c31jbGFtcFBvaW50KHQsZSl7Y29uc3Qgbj10aGlzLmNlbnRlci5kaXN0YW5jZVRvU3F1YXJlZCh0KTtyZXR1cm4gdm9pZCAwPT09ZSYmKGNvbnNvbGUud2FybigiVEhSRUUuU3BoZXJlOiAuY2xhbXBQb2ludCgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSxlPW5ldyBxT3QpLGUuY29weSh0KSxuPnRoaXMucmFkaXVzKnRoaXMucmFkaXVzJiYoZS5zdWIodGhpcy5jZW50ZXIpLm5vcm1hbGl6ZSgpLGUubXVsdGlwbHlTY2FsYXIodGhpcy5yYWRpdXMpLmFkZCh0aGlzLmNlbnRlcikpLGV9Z2V0Qm91bmRpbmdCb3godCl7cmV0dXJuIHZvaWQgMD09PXQmJihjb25zb2xlLndhcm4oIlRIUkVFLlNwaGVyZTogLmdldEJvdW5kaW5nQm94KCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLHQ9bmV3ICRPdCksdGhpcy5pc0VtcHR5KCk/KHQubWFrZUVtcHR5KCksdCk6KHQuc2V0KHRoaXMuY2VudGVyLHRoaXMuY2VudGVyKSx0LmV4cGFuZEJ5U2NhbGFyKHRoaXMucmFkaXVzKSx0KX1hcHBseU1hdHJpeDQodCl7cmV0dXJuIHRoaXMuY2VudGVyLmFwcGx5TWF0cml4NCh0KSx0aGlzLnJhZGl1cz10aGlzLnJhZGl1cyp0LmdldE1heFNjYWxlT25BeGlzKCksdGhpc310cmFuc2xhdGUodCl7cmV0dXJuIHRoaXMuY2VudGVyLmFkZCh0KSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5jZW50ZXIuZXF1YWxzKHRoaXMuY2VudGVyKSYmdC5yYWRpdXM9PT10aGlzLnJhZGl1c319Y29uc3QgZFJ0PW5ldyBxT3QscFJ0PW5ldyBxT3QsZlJ0PW5ldyBxT3QsbVJ0PW5ldyBxT3QsZ1J0PW5ldyBxT3QsX1J0PW5ldyBxT3QseVJ0PW5ldyBxT3Q7Y2xhc3MgdlJ0e2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5vcmlnaW49dm9pZCAwIT09dD90Om5ldyBxT3QsdGhpcy5kaXJlY3Rpb249dm9pZCAwIT09ZT9lOm5ldyBxT3QoMCwwLC0xKX1zZXQodCxlKXtyZXR1cm4gdGhpcy5vcmlnaW4uY29weSh0KSx0aGlzLmRpcmVjdGlvbi5jb3B5KGUpLHRoaXN9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9Y29weSh0KXtyZXR1cm4gdGhpcy5vcmlnaW4uY29weSh0Lm9yaWdpbiksdGhpcy5kaXJlY3Rpb24uY29weSh0LmRpcmVjdGlvbiksdGhpc31hdCh0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoY29uc29sZS53YXJuKCJUSFJFRS5SYXk6IC5hdCgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSxlPW5ldyBxT3QpLGUuY29weSh0aGlzLmRpcmVjdGlvbikubXVsdGlwbHlTY2FsYXIodCkuYWRkKHRoaXMub3JpZ2luKX1sb29rQXQodCl7cmV0dXJuIHRoaXMuZGlyZWN0aW9uLmNvcHkodCkuc3ViKHRoaXMub3JpZ2luKS5ub3JtYWxpemUoKSx0aGlzfXJlY2FzdCh0KXtyZXR1cm4gdGhpcy5vcmlnaW4uY29weSh0aGlzLmF0KHQsZFJ0KSksdGhpc31jbG9zZXN0UG9pbnRUb1BvaW50KHQsZSl7dm9pZCAwPT09ZSYmKGNvbnNvbGUud2FybigiVEhSRUUuUmF5OiAuY2xvc2VzdFBvaW50VG9Qb2ludCgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSxlPW5ldyBxT3QpLGUuc3ViVmVjdG9ycyh0LHRoaXMub3JpZ2luKTtjb25zdCBuPWUuZG90KHRoaXMuZGlyZWN0aW9uKTtyZXR1cm4gbjwwP2UuY29weSh0aGlzLm9yaWdpbik6ZS5jb3B5KHRoaXMuZGlyZWN0aW9uKS5tdWx0aXBseVNjYWxhcihuKS5hZGQodGhpcy5vcmlnaW4pfWRpc3RhbmNlVG9Qb2ludCh0KXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdGFuY2VTcVRvUG9pbnQodCkpfWRpc3RhbmNlU3FUb1BvaW50KHQpe2NvbnN0IGU9ZFJ0LnN1YlZlY3RvcnModCx0aGlzLm9yaWdpbikuZG90KHRoaXMuZGlyZWN0aW9uKTtyZXR1cm4gZTwwP3RoaXMub3JpZ2luLmRpc3RhbmNlVG9TcXVhcmVkKHQpOihkUnQuY29weSh0aGlzLmRpcmVjdGlvbikubXVsdGlwbHlTY2FsYXIoZSkuYWRkKHRoaXMub3JpZ2luKSxkUnQuZGlzdGFuY2VUb1NxdWFyZWQodCkpfWRpc3RhbmNlU3FUb1NlZ21lbnQodCxlLG4saSl7cFJ0LmNvcHkodCkuYWRkKGUpLm11bHRpcGx5U2NhbGFyKC41KSxmUnQuY29weShlKS5zdWIodCkubm9ybWFsaXplKCksbVJ0LmNvcHkodGhpcy5vcmlnaW4pLnN1YihwUnQpO2NvbnN0IHI9LjUqdC5kaXN0YW5jZVRvKGUpLG89LXRoaXMuZGlyZWN0aW9uLmRvdChmUnQpLGE9bVJ0LmRvdCh0aGlzLmRpcmVjdGlvbikscz0tbVJ0LmRvdChmUnQpLGw9bVJ0Lmxlbmd0aFNxKCksYz1NYXRoLmFicygxLW8qbyk7bGV0IHUsaCxkLHA7aWYoYz4wKWlmKHU9bypzLWEsaD1vKmEtcyxwPXIqYyx1Pj0wKWlmKGg+PS1wKWlmKGg8PXApe2NvbnN0IHQ9MS9jO3UqPXQsaCo9dCxkPXUqKHUrbypoKzIqYSkraCoobyp1K2grMipzKStsfWVsc2UgaD1yLHU9TWF0aC5tYXgoMCwtKG8qaCthKSksZD0tdSp1K2gqKGgrMipzKStsO2Vsc2UgaD0tcix1PU1hdGgubWF4KDAsLShvKmgrYSkpLGQ9LXUqdStoKihoKzIqcykrbDtlbHNlIGg8PS1wPyh1PU1hdGgubWF4KDAsLSgtbypyK2EpKSxoPXU+MD8tcjpNYXRoLm1pbihNYXRoLm1heCgtciwtcyksciksZD0tdSp1K2gqKGgrMipzKStsKTpoPD1wPyh1PTAsaD1NYXRoLm1pbihNYXRoLm1heCgtciwtcyksciksZD1oKihoKzIqcykrbCk6KHU9TWF0aC5tYXgoMCwtKG8qcithKSksaD11PjA/cjpNYXRoLm1pbihNYXRoLm1heCgtciwtcyksciksZD0tdSp1K2gqKGgrMipzKStsKTtlbHNlIGg9bz4wPy1yOnIsdT1NYXRoLm1heCgwLC0obypoK2EpKSxkPS11KnUraCooaCsyKnMpK2w7cmV0dXJuIG4mJm4uY29weSh0aGlzLmRpcmVjdGlvbikubXVsdGlwbHlTY2FsYXIodSkuYWRkKHRoaXMub3JpZ2luKSxpJiZpLmNvcHkoZlJ0KS5tdWx0aXBseVNjYWxhcihoKS5hZGQocFJ0KSxkfWludGVyc2VjdFNwaGVyZSh0LGUpe2RSdC5zdWJWZWN0b3JzKHQuY2VudGVyLHRoaXMub3JpZ2luKTtjb25zdCBuPWRSdC5kb3QodGhpcy5kaXJlY3Rpb24pLGk9ZFJ0LmRvdChkUnQpLW4qbixyPXQucmFkaXVzKnQucmFkaXVzO2lmKGk+cilyZXR1cm4gbnVsbDtjb25zdCBvPU1hdGguc3FydChyLWkpLGE9bi1vLHM9bitvO3JldHVybiBhPDAmJnM8MD9udWxsOnRoaXMuYXQoYTwwP3M6YSxlKX1pbnRlcnNlY3RzU3BoZXJlKHQpe3JldHVybiB0aGlzLmRpc3RhbmNlU3FUb1BvaW50KHQuY2VudGVyKTw9dC5yYWRpdXMqdC5yYWRpdXN9ZGlzdGFuY2VUb1BsYW5lKHQpe2NvbnN0IGU9dC5ub3JtYWwuZG90KHRoaXMuZGlyZWN0aW9uKTtpZigwPT09ZSlyZXR1cm4gMD09PXQuZGlzdGFuY2VUb1BvaW50KHRoaXMub3JpZ2luKT8wOm51bGw7Y29uc3Qgbj0tKHRoaXMub3JpZ2luLmRvdCh0Lm5vcm1hbCkrdC5jb25zdGFudCkvZTtyZXR1cm4gbj49MD9uOm51bGx9aW50ZXJzZWN0UGxhbmUodCxlKXtjb25zdCBuPXRoaXMuZGlzdGFuY2VUb1BsYW5lKHQpO3JldHVybiBudWxsPT09bj9udWxsOnRoaXMuYXQobixlKX1pbnRlcnNlY3RzUGxhbmUodCl7Y29uc3QgZT10LmRpc3RhbmNlVG9Qb2ludCh0aGlzLm9yaWdpbik7cmV0dXJuIDA9PT1lfHx0Lm5vcm1hbC5kb3QodGhpcy5kaXJlY3Rpb24pKmU8MH1pbnRlcnNlY3RCb3godCxlKXtsZXQgbixpLHIsbyxhLHM7Y29uc3QgbD0xL3RoaXMuZGlyZWN0aW9uLngsYz0xL3RoaXMuZGlyZWN0aW9uLnksdT0xL3RoaXMuZGlyZWN0aW9uLnosaD10aGlzLm9yaWdpbjtyZXR1cm4gbD49MD8obj0odC5taW4ueC1oLngpKmwsaT0odC5tYXgueC1oLngpKmwpOihuPSh0Lm1heC54LWgueCkqbCxpPSh0Lm1pbi54LWgueCkqbCksYz49MD8ocj0odC5taW4ueS1oLnkpKmMsbz0odC5tYXgueS1oLnkpKmMpOihyPSh0Lm1heC55LWgueSkqYyxvPSh0Lm1pbi55LWgueSkqYyksbj5vfHxyPmk/bnVsbDooKHI+bnx8biE9bikmJihuPXIpLChvPGl8fGkhPWkpJiYoaT1vKSx1Pj0wPyhhPSh0Lm1pbi56LWgueikqdSxzPSh0Lm1heC56LWgueikqdSk6KGE9KHQubWF4LnotaC56KSp1LHM9KHQubWluLnotaC56KSp1KSxuPnN8fGE+aT9udWxsOigoYT5ufHxuIT1uKSYmKG49YSksKHM8aXx8aSE9aSkmJihpPXMpLGk8MD9udWxsOnRoaXMuYXQobj49MD9uOmksZSkpKX1pbnRlcnNlY3RzQm94KHQpe3JldHVybiBudWxsIT09dGhpcy5pbnRlcnNlY3RCb3godCxkUnQpfWludGVyc2VjdFRyaWFuZ2xlKHQsZSxuLGkscil7Z1J0LnN1YlZlY3RvcnMoZSx0KSxfUnQuc3ViVmVjdG9ycyhuLHQpLHlSdC5jcm9zc1ZlY3RvcnMoZ1J0LF9SdCk7bGV0IG8sYT10aGlzLmRpcmVjdGlvbi5kb3QoeVJ0KTtpZihhPjApe2lmKGkpcmV0dXJuIG51bGw7bz0xfWVsc2V7aWYoIShhPDApKXJldHVybiBudWxsO289LTEsYT0tYX1tUnQuc3ViVmVjdG9ycyh0aGlzLm9yaWdpbix0KTtjb25zdCBzPW8qdGhpcy5kaXJlY3Rpb24uZG90KF9SdC5jcm9zc1ZlY3RvcnMobVJ0LF9SdCkpO2lmKHM8MClyZXR1cm4gbnVsbDtjb25zdCBsPW8qdGhpcy5kaXJlY3Rpb24uZG90KGdSdC5jcm9zcyhtUnQpKTtpZihsPDApcmV0dXJuIG51bGw7aWYocytsPmEpcmV0dXJuIG51bGw7Y29uc3QgYz0tbyptUnQuZG90KHlSdCk7cmV0dXJuIGM8MD9udWxsOnRoaXMuYXQoYy9hLHIpfWFwcGx5TWF0cml4NCh0KXtyZXR1cm4gdGhpcy5vcmlnaW4uYXBwbHlNYXRyaXg0KHQpLHRoaXMuZGlyZWN0aW9uLnRyYW5zZm9ybURpcmVjdGlvbih0KSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5vcmlnaW4uZXF1YWxzKHRoaXMub3JpZ2luKSYmdC5kaXJlY3Rpb24uZXF1YWxzKHRoaXMuZGlyZWN0aW9uKX19Y2xhc3MgYlJ0e2NvbnN0cnVjdG9yKCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlzTWF0cml4NCIse3ZhbHVlOiEwfSksdGhpcy5lbGVtZW50cz1bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV0sYXJndW1lbnRzLmxlbmd0aD4wJiZjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiB0aGUgY29uc3RydWN0b3Igbm8gbG9uZ2VyIHJlYWRzIGFyZ3VtZW50cy4gdXNlIC5zZXQoKSBpbnN0ZWFkLiIpfXNldCh0LGUsbixpLHIsbyxhLHMsbCxjLHUsaCxkLHAsZixtKXtjb25zdCBnPXRoaXMuZWxlbWVudHM7cmV0dXJuIGdbMF09dCxnWzRdPWUsZ1s4XT1uLGdbMTJdPWksZ1sxXT1yLGdbNV09byxnWzldPWEsZ1sxM109cyxnWzJdPWwsZ1s2XT1jLGdbMTBdPXUsZ1sxNF09aCxnWzNdPWQsZ1s3XT1wLGdbMTFdPWYsZ1sxNV09bSx0aGlzfWlkZW50aXR5KCl7cmV0dXJuIHRoaXMuc2V0KDEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDEpLHRoaXN9Y2xvbmUoKXtyZXR1cm4obmV3IGJSdCkuZnJvbUFycmF5KHRoaXMuZWxlbWVudHMpfWNvcHkodCl7Y29uc3QgZT10aGlzLmVsZW1lbnRzLG49dC5lbGVtZW50cztyZXR1cm4gZVswXT1uWzBdLGVbMV09blsxXSxlWzJdPW5bMl0sZVszXT1uWzNdLGVbNF09bls0XSxlWzVdPW5bNV0sZVs2XT1uWzZdLGVbN109bls3XSxlWzhdPW5bOF0sZVs5XT1uWzldLGVbMTBdPW5bMTBdLGVbMTFdPW5bMTFdLGVbMTJdPW5bMTJdLGVbMTNdPW5bMTNdLGVbMTRdPW5bMTRdLGVbMTVdPW5bMTVdLHRoaXN9Y29weVBvc2l0aW9uKHQpe2NvbnN0IGU9dGhpcy5lbGVtZW50cyxuPXQuZWxlbWVudHM7cmV0dXJuIGVbMTJdPW5bMTJdLGVbMTNdPW5bMTNdLGVbMTRdPW5bMTRdLHRoaXN9c2V0RnJvbU1hdHJpeDModCl7Y29uc3QgZT10LmVsZW1lbnRzO3JldHVybiB0aGlzLnNldChlWzBdLGVbM10sZVs2XSwwLGVbMV0sZVs0XSxlWzddLDAsZVsyXSxlWzVdLGVbOF0sMCwwLDAsMCwxKSx0aGlzfWV4dHJhY3RCYXNpcyh0LGUsbil7cmV0dXJuIHQuc2V0RnJvbU1hdHJpeENvbHVtbih0aGlzLDApLGUuc2V0RnJvbU1hdHJpeENvbHVtbih0aGlzLDEpLG4uc2V0RnJvbU1hdHJpeENvbHVtbih0aGlzLDIpLHRoaXN9bWFrZUJhc2lzKHQsZSxuKXtyZXR1cm4gdGhpcy5zZXQodC54LGUueCxuLngsMCx0LnksZS55LG4ueSwwLHQueixlLnosbi56LDAsMCwwLDAsMSksdGhpc31leHRyYWN0Um90YXRpb24odCl7Y29uc3QgZT10aGlzLmVsZW1lbnRzLG49dC5lbGVtZW50cyxpPTEveFJ0LnNldEZyb21NYXRyaXhDb2x1bW4odCwwKS5sZW5ndGgoKSxyPTEveFJ0LnNldEZyb21NYXRyaXhDb2x1bW4odCwxKS5sZW5ndGgoKSxvPTEveFJ0LnNldEZyb21NYXRyaXhDb2x1bW4odCwyKS5sZW5ndGgoKTtyZXR1cm4gZVswXT1uWzBdKmksZVsxXT1uWzFdKmksZVsyXT1uWzJdKmksZVszXT0wLGVbNF09bls0XSpyLGVbNV09bls1XSpyLGVbNl09bls2XSpyLGVbN109MCxlWzhdPW5bOF0qbyxlWzldPW5bOV0qbyxlWzEwXT1uWzEwXSpvLGVbMTFdPTAsZVsxMl09MCxlWzEzXT0wLGVbMTRdPTAsZVsxNV09MSx0aGlzfW1ha2VSb3RhdGlvbkZyb21FdWxlcih0KXt0JiZ0LmlzRXVsZXJ8fGNvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5tYWtlUm90YXRpb25Gcm9tRXVsZXIoKSBub3cgZXhwZWN0cyBhIEV1bGVyIHJvdGF0aW9uIHJhdGhlciB0aGFuIGEgVmVjdG9yMyBhbmQgb3JkZXIuIik7Y29uc3QgZT10aGlzLmVsZW1lbnRzLG49dC54LGk9dC55LHI9dC56LG89TWF0aC5jb3MobiksYT1NYXRoLnNpbihuKSxzPU1hdGguY29zKGkpLGw9TWF0aC5zaW4oaSksYz1NYXRoLmNvcyhyKSx1PU1hdGguc2luKHIpO2lmKCJYWVoiPT09dC5vcmRlcil7Y29uc3QgdD1vKmMsbj1vKnUsaT1hKmMscj1hKnU7ZVswXT1zKmMsZVs0XT0tcyp1LGVbOF09bCxlWzFdPW4raSpsLGVbNV09dC1yKmwsZVs5XT0tYSpzLGVbMl09ci10KmwsZVs2XT1pK24qbCxlWzEwXT1vKnN9ZWxzZSBpZigiWVhaIj09PXQub3JkZXIpe2NvbnN0IHQ9cypjLG49cyp1LGk9bCpjLHI9bCp1O2VbMF09dCtyKmEsZVs0XT1pKmEtbixlWzhdPW8qbCxlWzFdPW8qdSxlWzVdPW8qYyxlWzldPS1hLGVbMl09biphLWksZVs2XT1yK3QqYSxlWzEwXT1vKnN9ZWxzZSBpZigiWlhZIj09PXQub3JkZXIpe2NvbnN0IHQ9cypjLG49cyp1LGk9bCpjLHI9bCp1O2VbMF09dC1yKmEsZVs0XT0tbyp1LGVbOF09aStuKmEsZVsxXT1uK2kqYSxlWzVdPW8qYyxlWzldPXItdCphLGVbMl09LW8qbCxlWzZdPWEsZVsxMF09bypzfWVsc2UgaWYoIlpZWCI9PT10Lm9yZGVyKXtjb25zdCB0PW8qYyxuPW8qdSxpPWEqYyxyPWEqdTtlWzBdPXMqYyxlWzRdPWkqbC1uLGVbOF09dCpsK3IsZVsxXT1zKnUsZVs1XT1yKmwrdCxlWzldPW4qbC1pLGVbMl09LWwsZVs2XT1hKnMsZVsxMF09bypzfWVsc2UgaWYoIllaWCI9PT10Lm9yZGVyKXtjb25zdCB0PW8qcyxuPW8qbCxpPWEqcyxyPWEqbDtlWzBdPXMqYyxlWzRdPXItdCp1LGVbOF09aSp1K24sZVsxXT11LGVbNV09bypjLGVbOV09LWEqYyxlWzJdPS1sKmMsZVs2XT1uKnUraSxlWzEwXT10LXIqdX1lbHNlIGlmKCJYWlkiPT09dC5vcmRlcil7Y29uc3QgdD1vKnMsbj1vKmwsaT1hKnMscj1hKmw7ZVswXT1zKmMsZVs0XT0tdSxlWzhdPWwqYyxlWzFdPXQqdStyLGVbNV09bypjLGVbOV09bip1LWksZVsyXT1pKnUtbixlWzZdPWEqYyxlWzEwXT1yKnUrdH1yZXR1cm4gZVszXT0wLGVbN109MCxlWzExXT0wLGVbMTJdPTAsZVsxM109MCxlWzE0XT0wLGVbMTVdPTEsdGhpc31tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbih0KXtyZXR1cm4gdGhpcy5jb21wb3NlKFNSdCx0LE1SdCl9bG9va0F0KHQsZSxuKXtjb25zdCBpPXRoaXMuZWxlbWVudHM7cmV0dXJuIENSdC5zdWJWZWN0b3JzKHQsZSksMD09PUNSdC5sZW5ndGhTcSgpJiYoQ1J0Lno9MSksQ1J0Lm5vcm1hbGl6ZSgpLEVSdC5jcm9zc1ZlY3RvcnMobixDUnQpLDA9PT1FUnQubGVuZ3RoU3EoKSYmKDE9PT1NYXRoLmFicyhuLnopP0NSdC54Kz0xZS00OkNSdC56Kz0xZS00LENSdC5ub3JtYWxpemUoKSxFUnQuY3Jvc3NWZWN0b3JzKG4sQ1J0KSksRVJ0Lm5vcm1hbGl6ZSgpLFRSdC5jcm9zc1ZlY3RvcnMoQ1J0LEVSdCksaVswXT1FUnQueCxpWzRdPVRSdC54LGlbOF09Q1J0LngsaVsxXT1FUnQueSxpWzVdPVRSdC55LGlbOV09Q1J0LnksaVsyXT1FUnQueixpWzZdPVRSdC56LGlbMTBdPUNSdC56LHRoaXN9bXVsdGlwbHkodCxlKXtyZXR1cm4gdm9pZCAwIT09ZT8oY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHkoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5tdWx0aXBseU1hdHJpY2VzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLm11bHRpcGx5TWF0cmljZXModCxlKSk6dGhpcy5tdWx0aXBseU1hdHJpY2VzKHRoaXMsdCl9cHJlbXVsdGlwbHkodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlNYXRyaWNlcyh0LHRoaXMpfW11bHRpcGx5TWF0cmljZXModCxlKXtjb25zdCBuPXQuZWxlbWVudHMsaT1lLmVsZW1lbnRzLHI9dGhpcy5lbGVtZW50cyxvPW5bMF0sYT1uWzRdLHM9bls4XSxsPW5bMTJdLGM9blsxXSx1PW5bNV0saD1uWzldLGQ9blsxM10scD1uWzJdLGY9bls2XSxtPW5bMTBdLGc9blsxNF0sXz1uWzNdLHk9bls3XSx2PW5bMTFdLGI9blsxNV0seD1pWzBdLHc9aVs0XSxTPWlbOF0sTT1pWzEyXSxFPWlbMV0sVD1pWzVdLEM9aVs5XSxBPWlbMTNdLGs9aVsyXSxMPWlbNl0sUD1pWzEwXSxOPWlbMTRdLEk9aVszXSxPPWlbN10sUj1pWzExXSx6PWlbMTVdO3JldHVybiByWzBdPW8qeCthKkUrcyprK2wqSSxyWzRdPW8qdythKlQrcypMK2wqTyxyWzhdPW8qUythKkMrcypQK2wqUixyWzEyXT1vKk0rYSpBK3MqTitsKnosclsxXT1jKngrdSpFK2gqaytkKkkscls1XT1jKncrdSpUK2gqTCtkKk8scls5XT1jKlMrdSpDK2gqUCtkKlIsclsxM109YypNK3UqQStoKk4rZCp6LHJbMl09cCp4K2YqRSttKmsrZypJLHJbNl09cCp3K2YqVCttKkwrZypPLHJbMTBdPXAqUytmKkMrbSpQK2cqUixyWzE0XT1wKk0rZipBK20qTitnKnosclszXT1fKngreSpFK3YqaytiKkkscls3XT1fKncreSpUK3YqTCtiKk8sclsxMV09XypTK3kqQyt2KlArYipSLHJbMTVdPV8qTSt5KkErdipOK2Iqeix0aGlzfW11bHRpcGx5U2NhbGFyKHQpe2NvbnN0IGU9dGhpcy5lbGVtZW50cztyZXR1cm4gZVswXSo9dCxlWzRdKj10LGVbOF0qPXQsZVsxMl0qPXQsZVsxXSo9dCxlWzVdKj10LGVbOV0qPXQsZVsxM10qPXQsZVsyXSo9dCxlWzZdKj10LGVbMTBdKj10LGVbMTRdKj10LGVbM10qPXQsZVs3XSo9dCxlWzExXSo9dCxlWzE1XSo9dCx0aGlzfWRldGVybWluYW50KCl7Y29uc3QgdD10aGlzLmVsZW1lbnRzLGU9dFswXSxuPXRbNF0saT10WzhdLHI9dFsxMl0sbz10WzFdLGE9dFs1XSxzPXRbOV0sbD10WzEzXSxjPXRbMl0sdT10WzZdLGg9dFsxMF0sZD10WzE0XTtyZXR1cm4gdFszXSooK3Iqcyp1LWkqbCp1LXIqYSpoK24qbCpoK2kqYSpkLW4qcypkKSt0WzddKigrZSpzKmQtZSpsKmgrcipvKmgtaSpvKmQraSpsKmMtcipzKmMpK3RbMTFdKigrZSpsKnUtZSphKmQtcipvKnUrbipvKmQrciphKmMtbipsKmMpK3RbMTVdKigtaSphKmMtZSpzKnUrZSphKmgraSpvKnUtbipvKmgrbipzKmMpfXRyYW5zcG9zZSgpe2NvbnN0IHQ9dGhpcy5lbGVtZW50cztsZXQgZTtyZXR1cm4gZT10WzFdLHRbMV09dFs0XSx0WzRdPWUsZT10WzJdLHRbMl09dFs4XSx0WzhdPWUsZT10WzZdLHRbNl09dFs5XSx0WzldPWUsZT10WzNdLHRbM109dFsxMl0sdFsxMl09ZSxlPXRbN10sdFs3XT10WzEzXSx0WzEzXT1lLGU9dFsxMV0sdFsxMV09dFsxNF0sdFsxNF09ZSx0aGlzfXNldFBvc2l0aW9uKHQsZSxuKXtjb25zdCBpPXRoaXMuZWxlbWVudHM7cmV0dXJuIHQuaXNWZWN0b3IzPyhpWzEyXT10LngsaVsxM109dC55LGlbMTRdPXQueik6KGlbMTJdPXQsaVsxM109ZSxpWzE0XT1uKSx0aGlzfWludmVydCgpe2NvbnN0IHQ9dGhpcy5lbGVtZW50cyxlPXRbMF0sbj10WzFdLGk9dFsyXSxyPXRbM10sbz10WzRdLGE9dFs1XSxzPXRbNl0sbD10WzddLGM9dFs4XSx1PXRbOV0saD10WzEwXSxkPXRbMTFdLHA9dFsxMl0sZj10WzEzXSxtPXRbMTRdLGc9dFsxNV0sXz11Km0qbC1mKmgqbCtmKnMqZC1hKm0qZC11KnMqZythKmgqZyx5PXAqaCpsLWMqbSpsLXAqcypkK28qbSpkK2MqcypnLW8qaCpnLHY9YypmKmwtcCp1KmwrcCphKmQtbypmKmQtYyphKmcrbyp1KmcsYj1wKnUqcy1jKmYqcy1wKmEqaCtvKmYqaCtjKmEqbS1vKnUqbSx4PWUqXytuKnkraSp2K3IqYjtpZigwPT09eClyZXR1cm4gdGhpcy5zZXQoMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCk7Y29uc3Qgdz0xL3g7cmV0dXJuIHRbMF09Xyp3LHRbMV09KGYqaCpyLXUqbSpyLWYqaSpkK24qbSpkK3UqaSpnLW4qaCpnKSp3LHRbMl09KGEqbSpyLWYqcypyK2YqaSpsLW4qbSpsLWEqaSpnK24qcypnKSp3LHRbM109KHUqcypyLWEqaCpyLXUqaSpsK24qaCpsK2EqaSpkLW4qcypkKSp3LHRbNF09eSp3LHRbNV09KGMqbSpyLXAqaCpyK3AqaSpkLWUqbSpkLWMqaSpnK2UqaCpnKSp3LHRbNl09KHAqcypyLW8qbSpyLXAqaSpsK2UqbSpsK28qaSpnLWUqcypnKSp3LHRbN109KG8qaCpyLWMqcypyK2MqaSpsLWUqaCpsLW8qaSpkK2UqcypkKSp3LHRbOF09dip3LHRbOV09KHAqdSpyLWMqZipyLXAqbipkK2UqZipkK2MqbipnLWUqdSpnKSp3LHRbMTBdPShvKmYqci1wKmEqcitwKm4qbC1lKmYqbC1vKm4qZytlKmEqZykqdyx0WzExXT0oYyphKnItbyp1KnItYypuKmwrZSp1KmwrbypuKmQtZSphKmQpKncsdFsxMl09Yip3LHRbMTNdPShjKmYqaS1wKnUqaStwKm4qaC1lKmYqaC1jKm4qbStlKnUqbSkqdyx0WzE0XT0ocCphKmktbypmKmktcCpuKnMrZSpmKnMrbypuKm0tZSphKm0pKncsdFsxNV09KG8qdSppLWMqYSppK2MqbipzLWUqdSpzLW8qbipoK2UqYSpoKSp3LHRoaXN9c2NhbGUodCl7Y29uc3QgZT10aGlzLmVsZW1lbnRzLG49dC54LGk9dC55LHI9dC56O3JldHVybiBlWzBdKj1uLGVbNF0qPWksZVs4XSo9cixlWzFdKj1uLGVbNV0qPWksZVs5XSo9cixlWzJdKj1uLGVbNl0qPWksZVsxMF0qPXIsZVszXSo9bixlWzddKj1pLGVbMTFdKj1yLHRoaXN9Z2V0TWF4U2NhbGVPbkF4aXMoKXtjb25zdCB0PXRoaXMuZWxlbWVudHM7cmV0dXJuIE1hdGguc3FydChNYXRoLm1heCh0WzBdKnRbMF0rdFsxXSp0WzFdK3RbMl0qdFsyXSx0WzRdKnRbNF0rdFs1XSp0WzVdK3RbNl0qdFs2XSx0WzhdKnRbOF0rdFs5XSp0WzldK3RbMTBdKnRbMTBdKSl9bWFrZVRyYW5zbGF0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5zZXQoMSwwLDAsdCwwLDEsMCxlLDAsMCwxLG4sMCwwLDAsMSksdGhpc31tYWtlUm90YXRpb25YKHQpe2NvbnN0IGU9TWF0aC5jb3ModCksbj1NYXRoLnNpbih0KTtyZXR1cm4gdGhpcy5zZXQoMSwwLDAsMCwwLGUsLW4sMCwwLG4sZSwwLDAsMCwwLDEpLHRoaXN9bWFrZVJvdGF0aW9uWSh0KXtjb25zdCBlPU1hdGguY29zKHQpLG49TWF0aC5zaW4odCk7cmV0dXJuIHRoaXMuc2V0KGUsMCxuLDAsMCwxLDAsMCwtbiwwLGUsMCwwLDAsMCwxKSx0aGlzfW1ha2VSb3RhdGlvbloodCl7Y29uc3QgZT1NYXRoLmNvcyh0KSxuPU1hdGguc2luKHQpO3JldHVybiB0aGlzLnNldChlLC1uLDAsMCxuLGUsMCwwLDAsMCwxLDAsMCwwLDAsMSksdGhpc31tYWtlUm90YXRpb25BeGlzKHQsZSl7Y29uc3Qgbj1NYXRoLmNvcyhlKSxpPU1hdGguc2luKGUpLHI9MS1uLG89dC54LGE9dC55LHM9dC56LGw9cipvLGM9ciphO3JldHVybiB0aGlzLnNldChsKm8rbixsKmEtaSpzLGwqcytpKmEsMCxsKmEraSpzLGMqYStuLGMqcy1pKm8sMCxsKnMtaSphLGMqcytpKm8scipzKnMrbiwwLDAsMCwwLDEpLHRoaXN9bWFrZVNjYWxlKHQsZSxuKXtyZXR1cm4gdGhpcy5zZXQodCwwLDAsMCwwLGUsMCwwLDAsMCxuLDAsMCwwLDAsMSksdGhpc31tYWtlU2hlYXIodCxlLG4pe3JldHVybiB0aGlzLnNldCgxLGUsbiwwLHQsMSxuLDAsdCxlLDEsMCwwLDAsMCwxKSx0aGlzfWNvbXBvc2UodCxlLG4pe2NvbnN0IGk9dGhpcy5lbGVtZW50cyxyPWUuX3gsbz1lLl95LGE9ZS5feixzPWUuX3csbD1yK3IsYz1vK28sdT1hK2EsaD1yKmwsZD1yKmMscD1yKnUsZj1vKmMsbT1vKnUsZz1hKnUsXz1zKmwseT1zKmMsdj1zKnUsYj1uLngseD1uLnksdz1uLno7cmV0dXJuIGlbMF09KDEtKGYrZykpKmIsaVsxXT0oZCt2KSpiLGlbMl09KHAteSkqYixpWzNdPTAsaVs0XT0oZC12KSp4LGlbNV09KDEtKGgrZykpKngsaVs2XT0obStfKSp4LGlbN109MCxpWzhdPShwK3kpKncsaVs5XT0obS1fKSp3LGlbMTBdPSgxLShoK2YpKSp3LGlbMTFdPTAsaVsxMl09dC54LGlbMTNdPXQueSxpWzE0XT10LnosaVsxNV09MSx0aGlzfWRlY29tcG9zZSh0LGUsbil7Y29uc3QgaT10aGlzLmVsZW1lbnRzO2xldCByPXhSdC5zZXQoaVswXSxpWzFdLGlbMl0pLmxlbmd0aCgpO2NvbnN0IG89eFJ0LnNldChpWzRdLGlbNV0saVs2XSkubGVuZ3RoKCksYT14UnQuc2V0KGlbOF0saVs5XSxpWzEwXSkubGVuZ3RoKCk7dGhpcy5kZXRlcm1pbmFudCgpPDAmJihyPS1yKSx0Lng9aVsxMl0sdC55PWlbMTNdLHQuej1pWzE0XSx3UnQuY29weSh0aGlzKTtjb25zdCBzPTEvcixsPTEvbyxjPTEvYTtyZXR1cm4gd1J0LmVsZW1lbnRzWzBdKj1zLHdSdC5lbGVtZW50c1sxXSo9cyx3UnQuZWxlbWVudHNbMl0qPXMsd1J0LmVsZW1lbnRzWzRdKj1sLHdSdC5lbGVtZW50c1s1XSo9bCx3UnQuZWxlbWVudHNbNl0qPWwsd1J0LmVsZW1lbnRzWzhdKj1jLHdSdC5lbGVtZW50c1s5XSo9Yyx3UnQuZWxlbWVudHNbMTBdKj1jLGUuc2V0RnJvbVJvdGF0aW9uTWF0cml4KHdSdCksbi54PXIsbi55PW8sbi56PWEsdGhpc31tYWtlUGVyc3BlY3RpdmUodCxlLG4saSxyLG8pe3ZvaWQgMD09PW8mJmNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm1ha2VQZXJzcGVjdGl2ZSgpIGhhcyBiZWVuIHJlZGVmaW5lZCBhbmQgaGFzIGEgbmV3IHNpZ25hdHVyZS4gUGxlYXNlIGNoZWNrIHRoZSBkb2NzLiIpO2NvbnN0IGE9dGhpcy5lbGVtZW50cyxzPTIqci8obi1pKSxsPShlK3QpLyhlLXQpLGM9KG4raSkvKG4taSksdT0tKG8rcikvKG8tciksaD0tMipvKnIvKG8tcik7cmV0dXJuIGFbMF09MipyLyhlLXQpLGFbNF09MCxhWzhdPWwsYVsxMl09MCxhWzFdPTAsYVs1XT1zLGFbOV09YyxhWzEzXT0wLGFbMl09MCxhWzZdPTAsYVsxMF09dSxhWzE0XT1oLGFbM109MCxhWzddPTAsYVsxMV09LTEsYVsxNV09MCx0aGlzfW1ha2VPcnRob2dyYXBoaWModCxlLG4saSxyLG8pe2NvbnN0IGE9dGhpcy5lbGVtZW50cyxzPTEvKGUtdCksbD0xLyhuLWkpLGM9MS8oby1yKSx1PShlK3QpKnMsaD0obitpKSpsLGQ9KG8rcikqYztyZXR1cm4gYVswXT0yKnMsYVs0XT0wLGFbOF09MCxhWzEyXT0tdSxhWzFdPTAsYVs1XT0yKmwsYVs5XT0wLGFbMTNdPS1oLGFbMl09MCxhWzZdPTAsYVsxMF09LTIqYyxhWzE0XT0tZCxhWzNdPTAsYVs3XT0wLGFbMTFdPTAsYVsxNV09MSx0aGlzfWVxdWFscyh0KXtjb25zdCBlPXRoaXMuZWxlbWVudHMsbj10LmVsZW1lbnRzO2ZvcihsZXQgdD0wO3Q8MTY7dCsrKWlmKGVbdF0hPT1uW3RdKXJldHVybiExO3JldHVybiEwfWZyb21BcnJheSh0LGU9MCl7Zm9yKGxldCBuPTA7bjwxNjtuKyspdGhpcy5lbGVtZW50c1tuXT10W24rZV07cmV0dXJuIHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7Y29uc3Qgbj10aGlzLmVsZW1lbnRzO3JldHVybiB0W2VdPW5bMF0sdFtlKzFdPW5bMV0sdFtlKzJdPW5bMl0sdFtlKzNdPW5bM10sdFtlKzRdPW5bNF0sdFtlKzVdPW5bNV0sdFtlKzZdPW5bNl0sdFtlKzddPW5bN10sdFtlKzhdPW5bOF0sdFtlKzldPW5bOV0sdFtlKzEwXT1uWzEwXSx0W2UrMTFdPW5bMTFdLHRbZSsxMl09blsxMl0sdFtlKzEzXT1uWzEzXSx0W2UrMTRdPW5bMTRdLHRbZSsxNV09blsxNV0sdH19Y29uc3QgeFJ0PW5ldyBxT3Qsd1J0PW5ldyBiUnQsU1J0PW5ldyBxT3QoMCwwLDApLE1SdD1uZXcgcU90KDEsMSwxKSxFUnQ9bmV3IHFPdCxUUnQ9bmV3IHFPdCxDUnQ9bmV3IHFPdDtjbGFzcyBBUnR7Y29uc3RydWN0b3IodD0wLGU9MCxuPTAsaT1BUnQuRGVmYXVsdE9yZGVyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaXNFdWxlciIse3ZhbHVlOiEwfSksdGhpcy5feD10LHRoaXMuX3k9ZSx0aGlzLl96PW4sdGhpcy5fb3JkZXI9aX1nZXQgeCgpe3JldHVybiB0aGlzLl94fXNldCB4KHQpe3RoaXMuX3g9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IHkoKXtyZXR1cm4gdGhpcy5feX1zZXQgeSh0KXt0aGlzLl95PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCB6KCl7cmV0dXJuIHRoaXMuX3p9c2V0IHoodCl7dGhpcy5fej10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgb3JkZXIoKXtyZXR1cm4gdGhpcy5fb3JkZXJ9c2V0IG9yZGVyKHQpe3RoaXMuX29yZGVyPXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfXNldCh0LGUsbixpKXtyZXR1cm4gdGhpcy5feD10LHRoaXMuX3k9ZSx0aGlzLl96PW4sdGhpcy5fb3JkZXI9aXx8dGhpcy5fb3JkZXIsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5feCx0aGlzLl95LHRoaXMuX3osdGhpcy5fb3JkZXIpfWNvcHkodCl7cmV0dXJuIHRoaXMuX3g9dC5feCx0aGlzLl95PXQuX3ksdGhpcy5fej10Ll96LHRoaXMuX29yZGVyPXQuX29yZGVyLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21Sb3RhdGlvbk1hdHJpeCh0LGUsbil7Y29uc3QgaT1ST3QuY2xhbXAscj10LmVsZW1lbnRzLG89clswXSxhPXJbNF0scz1yWzhdLGw9clsxXSxjPXJbNV0sdT1yWzldLGg9clsyXSxkPXJbNl0scD1yWzEwXTtzd2l0Y2goZT1lfHx0aGlzLl9vcmRlcil7Y2FzZSJYWVoiOnRoaXMuX3k9TWF0aC5hc2luKGkocywtMSwxKSksTWF0aC5hYnMocyk8Ljk5OTk5OTk/KHRoaXMuX3g9TWF0aC5hdGFuMigtdSxwKSx0aGlzLl96PU1hdGguYXRhbjIoLWEsbykpOih0aGlzLl94PU1hdGguYXRhbjIoZCxjKSx0aGlzLl96PTApO2JyZWFrO2Nhc2UiWVhaIjp0aGlzLl94PU1hdGguYXNpbigtaSh1LC0xLDEpKSxNYXRoLmFicyh1KTwuOTk5OTk5OT8odGhpcy5feT1NYXRoLmF0YW4yKHMscCksdGhpcy5fej1NYXRoLmF0YW4yKGwsYykpOih0aGlzLl95PU1hdGguYXRhbjIoLWgsbyksdGhpcy5fej0wKTticmVhaztjYXNlIlpYWSI6dGhpcy5feD1NYXRoLmFzaW4oaShkLC0xLDEpKSxNYXRoLmFicyhkKTwuOTk5OTk5OT8odGhpcy5feT1NYXRoLmF0YW4yKC1oLHApLHRoaXMuX3o9TWF0aC5hdGFuMigtYSxjKSk6KHRoaXMuX3k9MCx0aGlzLl96PU1hdGguYXRhbjIobCxvKSk7YnJlYWs7Y2FzZSJaWVgiOnRoaXMuX3k9TWF0aC5hc2luKC1pKGgsLTEsMSkpLE1hdGguYWJzKGgpPC45OTk5OTk5Pyh0aGlzLl94PU1hdGguYXRhbjIoZCxwKSx0aGlzLl96PU1hdGguYXRhbjIobCxvKSk6KHRoaXMuX3g9MCx0aGlzLl96PU1hdGguYXRhbjIoLWEsYykpO2JyZWFrO2Nhc2UiWVpYIjp0aGlzLl96PU1hdGguYXNpbihpKGwsLTEsMSkpLE1hdGguYWJzKGwpPC45OTk5OTk5Pyh0aGlzLl94PU1hdGguYXRhbjIoLXUsYyksdGhpcy5feT1NYXRoLmF0YW4yKC1oLG8pKToodGhpcy5feD0wLHRoaXMuX3k9TWF0aC5hdGFuMihzLHApKTticmVhaztjYXNlIlhaWSI6dGhpcy5fej1NYXRoLmFzaW4oLWkoYSwtMSwxKSksTWF0aC5hYnMoYSk8Ljk5OTk5OTk/KHRoaXMuX3g9TWF0aC5hdGFuMihkLGMpLHRoaXMuX3k9TWF0aC5hdGFuMihzLG8pKToodGhpcy5feD1NYXRoLmF0YW4yKC11LHApLHRoaXMuX3k9MCk7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLndhcm4oIlRIUkVFLkV1bGVyOiAuc2V0RnJvbVJvdGF0aW9uTWF0cml4KCkgZW5jb3VudGVyZWQgYW4gdW5rbm93biBvcmRlcjogIitlKX1yZXR1cm4gdGhpcy5fb3JkZXI9ZSwhMSE9PW4mJnRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21RdWF0ZXJuaW9uKHQsZSxuKXtyZXR1cm4ga1J0Lm1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKHQpLHRoaXMuc2V0RnJvbVJvdGF0aW9uTWF0cml4KGtSdCxlLG4pfXNldEZyb21WZWN0b3IzKHQsZSl7cmV0dXJuIHRoaXMuc2V0KHQueCx0LnksdC56LGV8fHRoaXMuX29yZGVyKX1yZW9yZGVyKHQpe3JldHVybiBMUnQuc2V0RnJvbUV1bGVyKHRoaXMpLHRoaXMuc2V0RnJvbVF1YXRlcm5pb24oTFJ0LHQpfWVxdWFscyh0KXtyZXR1cm4gdC5feD09PXRoaXMuX3gmJnQuX3k9PT10aGlzLl95JiZ0Ll96PT09dGhpcy5feiYmdC5fb3JkZXI9PT10aGlzLl9vcmRlcn1mcm9tQXJyYXkodCl7cmV0dXJuIHRoaXMuX3g9dFswXSx0aGlzLl95PXRbMV0sdGhpcy5fej10WzJdLHZvaWQgMCE9PXRbM10mJih0aGlzLl9vcmRlcj10WzNdKSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc310b0FycmF5KHQ9W10sZT0wKXtyZXR1cm4gdFtlXT10aGlzLl94LHRbZSsxXT10aGlzLl95LHRbZSsyXT10aGlzLl96LHRbZSszXT10aGlzLl9vcmRlcix0fXRvVmVjdG9yMyh0KXtyZXR1cm4gdD90LnNldCh0aGlzLl94LHRoaXMuX3ksdGhpcy5feik6bmV3IHFPdCh0aGlzLl94LHRoaXMuX3ksdGhpcy5feil9X29uQ2hhbmdlKHQpe3JldHVybiB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrPXQsdGhpc31fb25DaGFuZ2VDYWxsYmFjaygpe319QVJ0LkRlZmF1bHRPcmRlcj0iWFlaIixBUnQuUm90YXRpb25PcmRlcnM9WyJYWVoiLCJZWlgiLCJaWFkiLCJYWlkiLCJZWFoiLCJaWVgiXTtjb25zdCBrUnQ9bmV3IGJSdCxMUnQ9bmV3IFdPdDtjbGFzcyBQUnR7Y29uc3RydWN0b3IoKXt0aGlzLm1hc2s9MX1zZXQodCl7dGhpcy5tYXNrPTE8PHR8MH1lbmFibGUodCl7dGhpcy5tYXNrfD0xPDx0fDB9ZW5hYmxlQWxsKCl7dGhpcy5tYXNrPS0xfXRvZ2dsZSh0KXt0aGlzLm1hc2tePTE8PHR8MH1kaXNhYmxlKHQpe3RoaXMubWFzayY9figxPDx0fDApfWRpc2FibGVBbGwoKXt0aGlzLm1hc2s9MH10ZXN0KHQpe3JldHVybiAwIT0odGhpcy5tYXNrJnQubWFzayl9fWxldCBOUnQ9MDtjb25zdCBJUnQ9bmV3IHFPdCxPUnQ9bmV3IFdPdCxSUnQ9bmV3IGJSdCx6UnQ9bmV3IHFPdCxEUnQ9bmV3IHFPdCxCUnQ9bmV3IHFPdCxIUnQ9bmV3IFdPdCxGUnQ9bmV3IHFPdCgxLDAsMCksVlJ0PW5ldyBxT3QoMCwxLDApLFVSdD1uZXcgcU90KDAsMCwxKSxqUnQ9e3R5cGU6ImFkZGVkIn0sR1J0PXt0eXBlOiJyZW1vdmVkIn07ZnVuY3Rpb24gV1J0KCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlkIix7dmFsdWU6TlJ0Kyt9KSx0aGlzLnV1aWQ9Uk90LmdlbmVyYXRlVVVJRCgpLHRoaXMubmFtZT0iIix0aGlzLnR5cGU9Ik9iamVjdDNEIix0aGlzLnBhcmVudD1udWxsLHRoaXMuY2hpbGRyZW49W10sdGhpcy51cD1XUnQuRGVmYXVsdFVwLmNsb25lKCk7Y29uc3QgdD1uZXcgcU90LGU9bmV3IEFSdCxuPW5ldyBXT3QsaT1uZXcgcU90KDEsMSwxKTtlLl9vbkNoYW5nZSgoZnVuY3Rpb24gcigpe24uc2V0RnJvbUV1bGVyKGUsITEpfSkpLG4uX29uQ2hhbmdlKChmdW5jdGlvbiBvKCl7ZS5zZXRGcm9tUXVhdGVybmlvbihuLHZvaWQgMCwhMSl9KSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7cG9zaXRpb246e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOnR9LHJvdGF0aW9uOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTplfSxxdWF0ZXJuaW9uOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpufSxzY2FsZTp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6aX0sbW9kZWxWaWV3TWF0cml4Ont2YWx1ZTpuZXcgYlJ0fSxub3JtYWxNYXRyaXg6e3ZhbHVlOm5ldyBET3R9fSksdGhpcy5tYXRyaXg9bmV3IGJSdCx0aGlzLm1hdHJpeFdvcmxkPW5ldyBiUnQsdGhpcy5tYXRyaXhBdXRvVXBkYXRlPVdSdC5EZWZhdWx0TWF0cml4QXV0b1VwZGF0ZSx0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITEsdGhpcy5sYXllcnM9bmV3IFBSdCx0aGlzLnZpc2libGU9ITAsdGhpcy5jYXN0U2hhZG93PSExLHRoaXMucmVjZWl2ZVNoYWRvdz0hMSx0aGlzLmZydXN0dW1DdWxsZWQ9ITAsdGhpcy5yZW5kZXJPcmRlcj0wLHRoaXMuYW5pbWF0aW9ucz1bXSx0aGlzLnVzZXJEYXRhPXt9fVdSdC5EZWZhdWx0VXA9bmV3IHFPdCgwLDEsMCksV1J0LkRlZmF1bHRNYXRyaXhBdXRvVXBkYXRlPSEwLFdSdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKE5PdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpXUnQsaXNPYmplY3QzRDohMCxvbkJlZm9yZVJlbmRlcjpmdW5jdGlvbigpe30sb25BZnRlclJlbmRlcjpmdW5jdGlvbigpe30sYXBwbHlNYXRyaXg0OmZ1bmN0aW9uKHQpe3RoaXMubWF0cml4QXV0b1VwZGF0ZSYmdGhpcy51cGRhdGVNYXRyaXgoKSx0aGlzLm1hdHJpeC5wcmVtdWx0aXBseSh0KSx0aGlzLm1hdHJpeC5kZWNvbXBvc2UodGhpcy5wb3NpdGlvbix0aGlzLnF1YXRlcm5pb24sdGhpcy5zY2FsZSl9LGFwcGx5UXVhdGVybmlvbjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5xdWF0ZXJuaW9uLnByZW11bHRpcGx5KHQpLHRoaXN9LHNldFJvdGF0aW9uRnJvbUF4aXNBbmdsZTpmdW5jdGlvbih0LGUpe3RoaXMucXVhdGVybmlvbi5zZXRGcm9tQXhpc0FuZ2xlKHQsZSl9LHNldFJvdGF0aW9uRnJvbUV1bGVyOmZ1bmN0aW9uKHQpe3RoaXMucXVhdGVybmlvbi5zZXRGcm9tRXVsZXIodCwhMCl9LHNldFJvdGF0aW9uRnJvbU1hdHJpeDpmdW5jdGlvbih0KXt0aGlzLnF1YXRlcm5pb24uc2V0RnJvbVJvdGF0aW9uTWF0cml4KHQpfSxzZXRSb3RhdGlvbkZyb21RdWF0ZXJuaW9uOmZ1bmN0aW9uKHQpe3RoaXMucXVhdGVybmlvbi5jb3B5KHQpfSxyb3RhdGVPbkF4aXM6ZnVuY3Rpb24odCxlKXtyZXR1cm4gT1J0LnNldEZyb21BeGlzQW5nbGUodCxlKSx0aGlzLnF1YXRlcm5pb24ubXVsdGlwbHkoT1J0KSx0aGlzfSxyb3RhdGVPbldvcmxkQXhpczpmdW5jdGlvbih0LGUpe3JldHVybiBPUnQuc2V0RnJvbUF4aXNBbmdsZSh0LGUpLHRoaXMucXVhdGVybmlvbi5wcmVtdWx0aXBseShPUnQpLHRoaXN9LHJvdGF0ZVg6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucm90YXRlT25BeGlzKEZSdCx0KX0scm90YXRlWTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5yb3RhdGVPbkF4aXMoVlJ0LHQpfSxyb3RhdGVaOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnJvdGF0ZU9uQXhpcyhVUnQsdCl9LHRyYW5zbGF0ZU9uQXhpczpmdW5jdGlvbih0LGUpe3JldHVybiBJUnQuY29weSh0KS5hcHBseVF1YXRlcm5pb24odGhpcy5xdWF0ZXJuaW9uKSx0aGlzLnBvc2l0aW9uLmFkZChJUnQubXVsdGlwbHlTY2FsYXIoZSkpLHRoaXN9LHRyYW5zbGF0ZVg6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudHJhbnNsYXRlT25BeGlzKEZSdCx0KX0sdHJhbnNsYXRlWTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50cmFuc2xhdGVPbkF4aXMoVlJ0LHQpfSx0cmFuc2xhdGVaOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRyYW5zbGF0ZU9uQXhpcyhVUnQsdCl9LGxvY2FsVG9Xb3JsZDpmdW5jdGlvbih0KXtyZXR1cm4gdC5hcHBseU1hdHJpeDQodGhpcy5tYXRyaXhXb3JsZCl9LHdvcmxkVG9Mb2NhbDpmdW5jdGlvbih0KXtyZXR1cm4gdC5hcHBseU1hdHJpeDQoUlJ0LmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCkpfSxsb29rQXQ6ZnVuY3Rpb24odCxlLG4pe3QuaXNWZWN0b3IzP3pSdC5jb3B5KHQpOnpSdC5zZXQodCxlLG4pO2NvbnN0IGk9dGhpcy5wYXJlbnQ7dGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksRFJ0LnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1hdHJpeFdvcmxkKSx0aGlzLmlzQ2FtZXJhfHx0aGlzLmlzTGlnaHQ/UlJ0Lmxvb2tBdChEUnQselJ0LHRoaXMudXApOlJSdC5sb29rQXQoelJ0LERSdCx0aGlzLnVwKSx0aGlzLnF1YXRlcm5pb24uc2V0RnJvbVJvdGF0aW9uTWF0cml4KFJSdCksaSYmKFJSdC5leHRyYWN0Um90YXRpb24oaS5tYXRyaXhXb3JsZCksT1J0LnNldEZyb21Sb3RhdGlvbk1hdHJpeChSUnQpLHRoaXMucXVhdGVybmlvbi5wcmVtdWx0aXBseShPUnQuaW52ZXJ0KCkpKX0sYWRkOmZ1bmN0aW9uKHQpe2lmKGFyZ3VtZW50cy5sZW5ndGg+MSl7Zm9yKGxldCB0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl0aGlzLmFkZChhcmd1bWVudHNbdF0pO3JldHVybiB0aGlzfXJldHVybiB0PT09dGhpcz8oY29uc29sZS5lcnJvcigiVEhSRUUuT2JqZWN0M0QuYWRkOiBvYmplY3QgY2FuJ3QgYmUgYWRkZWQgYXMgYSBjaGlsZCBvZiBpdHNlbGYuIix0KSx0aGlzKToodCYmdC5pc09iamVjdDNEPyhudWxsIT09dC5wYXJlbnQmJnQucGFyZW50LnJlbW92ZSh0KSx0LnBhcmVudD10aGlzLHRoaXMuY2hpbGRyZW4ucHVzaCh0KSx0LmRpc3BhdGNoRXZlbnQoalJ0KSk6Y29uc29sZS5lcnJvcigiVEhSRUUuT2JqZWN0M0QuYWRkOiBvYmplY3Qgbm90IGFuIGluc3RhbmNlIG9mIFRIUkVFLk9iamVjdDNELiIsdCksdGhpcyl9LHJlbW92ZTpmdW5jdGlvbih0KXtpZihhcmd1bWVudHMubGVuZ3RoPjEpe2ZvcihsZXQgdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspdGhpcy5yZW1vdmUoYXJndW1lbnRzW3RdKTtyZXR1cm4gdGhpc31jb25zdCBlPXRoaXMuY2hpbGRyZW4uaW5kZXhPZih0KTtyZXR1cm4tMSE9PWUmJih0LnBhcmVudD1udWxsLHRoaXMuY2hpbGRyZW4uc3BsaWNlKGUsMSksdC5kaXNwYXRjaEV2ZW50KEdSdCkpLHRoaXN9LGNsZWFyOmZ1bmN0aW9uKCl7Zm9yKGxldCB0PTA7dDx0aGlzLmNoaWxkcmVuLmxlbmd0aDt0Kyspe2NvbnN0IGU9dGhpcy5jaGlsZHJlblt0XTtlLnBhcmVudD1udWxsLGUuZGlzcGF0Y2hFdmVudChHUnQpfXJldHVybiB0aGlzLmNoaWxkcmVuLmxlbmd0aD0wLHRoaXN9LGF0dGFjaDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksUlJ0LmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCksbnVsbCE9PXQucGFyZW50JiYodC5wYXJlbnQudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLFJSdC5tdWx0aXBseSh0LnBhcmVudC5tYXRyaXhXb3JsZCkpLHQuYXBwbHlNYXRyaXg0KFJSdCksdC51cGRhdGVXb3JsZE1hdHJpeCghMSwhMSksdGhpcy5hZGQodCksdGhpc30sZ2V0T2JqZWN0QnlJZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5nZXRPYmplY3RCeVByb3BlcnR5KCJpZCIsdCl9LGdldE9iamVjdEJ5TmFtZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5nZXRPYmplY3RCeVByb3BlcnR5KCJuYW1lIix0KX0sZ2V0T2JqZWN0QnlQcm9wZXJ0eTpmdW5jdGlvbih0LGUpe2lmKHRoaXNbdF09PT1lKXJldHVybiB0aGlzO2ZvcihsZXQgbj0wLGk9dGhpcy5jaGlsZHJlbi5sZW5ndGg7bjxpO24rKyl7Y29uc3QgaT10aGlzLmNoaWxkcmVuW25dLmdldE9iamVjdEJ5UHJvcGVydHkodCxlKTtpZih2b2lkIDAhPT1pKXJldHVybiBpfX0sZ2V0V29ybGRQb3NpdGlvbjpmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKGNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5nZXRXb3JsZFBvc2l0aW9uKCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLHQ9bmV3IHFPdCksdGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksdC5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5tYXRyaXhXb3JsZCl9LGdldFdvcmxkUXVhdGVybmlvbjpmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKGNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5nZXRXb3JsZFF1YXRlcm5pb24oKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIiksdD1uZXcgV090KSx0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSx0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZShEUnQsdCxCUnQpLHR9LGdldFdvcmxkU2NhbGU6ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJihjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAuZ2V0V29ybGRTY2FsZSgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSx0PW5ldyBxT3QpLHRoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLHRoaXMubWF0cml4V29ybGQuZGVjb21wb3NlKERSdCxIUnQsdCksdH0sZ2V0V29ybGREaXJlY3Rpb246ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKGNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5nZXRXb3JsZERpcmVjdGlvbigpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSx0PW5ldyBxT3QpLHRoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpO2NvbnN0IGU9dGhpcy5tYXRyaXhXb3JsZC5lbGVtZW50cztyZXR1cm4gdC5zZXQoZVs4XSxlWzldLGVbMTBdKS5ub3JtYWxpemUoKX0scmF5Y2FzdDpmdW5jdGlvbigpe30sdHJhdmVyc2U6ZnVuY3Rpb24odCl7dCh0aGlzKTtjb25zdCBlPXRoaXMuY2hpbGRyZW47Zm9yKGxldCBuPTAsaT1lLmxlbmd0aDtuPGk7bisrKWVbbl0udHJhdmVyc2UodCl9LHRyYXZlcnNlVmlzaWJsZTpmdW5jdGlvbih0KXtpZighMT09PXRoaXMudmlzaWJsZSlyZXR1cm47dCh0aGlzKTtjb25zdCBlPXRoaXMuY2hpbGRyZW47Zm9yKGxldCBuPTAsaT1lLmxlbmd0aDtuPGk7bisrKWVbbl0udHJhdmVyc2VWaXNpYmxlKHQpfSx0cmF2ZXJzZUFuY2VzdG9yczpmdW5jdGlvbih0KXtjb25zdCBlPXRoaXMucGFyZW50O251bGwhPT1lJiYodChlKSxlLnRyYXZlcnNlQW5jZXN0b3JzKHQpKX0sdXBkYXRlTWF0cml4OmZ1bmN0aW9uKCl7dGhpcy5tYXRyaXguY29tcG9zZSh0aGlzLnBvc2l0aW9uLHRoaXMucXVhdGVybmlvbix0aGlzLnNjYWxlKSx0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9LHVwZGF0ZU1hdHJpeFdvcmxkOmZ1bmN0aW9uKHQpe3RoaXMubWF0cml4QXV0b1VwZGF0ZSYmdGhpcy51cGRhdGVNYXRyaXgoKSwodGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlfHx0KSYmKG51bGw9PT10aGlzLnBhcmVudD90aGlzLm1hdHJpeFdvcmxkLmNvcHkodGhpcy5tYXRyaXgpOnRoaXMubWF0cml4V29ybGQubXVsdGlwbHlNYXRyaWNlcyh0aGlzLnBhcmVudC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeCksdGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSExLHQ9ITApO2NvbnN0IGU9dGhpcy5jaGlsZHJlbjtmb3IobGV0IG49MCxpPWUubGVuZ3RoO248aTtuKyspZVtuXS51cGRhdGVNYXRyaXhXb3JsZCh0KX0sdXBkYXRlV29ybGRNYXRyaXg6ZnVuY3Rpb24odCxlKXtjb25zdCBuPXRoaXMucGFyZW50O2lmKCEwPT09dCYmbnVsbCE9PW4mJm4udXBkYXRlV29ybGRNYXRyaXgoITAsITEpLHRoaXMubWF0cml4QXV0b1VwZGF0ZSYmdGhpcy51cGRhdGVNYXRyaXgoKSxudWxsPT09dGhpcy5wYXJlbnQ/dGhpcy5tYXRyaXhXb3JsZC5jb3B5KHRoaXMubWF0cml4KTp0aGlzLm1hdHJpeFdvcmxkLm11bHRpcGx5TWF0cmljZXModGhpcy5wYXJlbnQubWF0cml4V29ybGQsdGhpcy5tYXRyaXgpLCEwPT09ZSl7Y29uc3QgdD10aGlzLmNoaWxkcmVuO2ZvcihsZXQgZT0wLG49dC5sZW5ndGg7ZTxuO2UrKyl0W2VdLnVwZGF0ZVdvcmxkTWF0cml4KCExLCEwKX19LHRvSlNPTjpmdW5jdGlvbih0KXtjb25zdCBlPXZvaWQgMD09PXR8fCJzdHJpbmciPT10eXBlb2YgdCxuPXt9O2UmJih0PXtnZW9tZXRyaWVzOnt9LG1hdGVyaWFsczp7fSx0ZXh0dXJlczp7fSxpbWFnZXM6e30sc2hhcGVzOnt9LHNrZWxldG9uczp7fSxhbmltYXRpb25zOnt9fSxuLm1ldGFkYXRhPXt2ZXJzaW9uOjQuNSx0eXBlOiJPYmplY3QiLGdlbmVyYXRvcjoiT2JqZWN0M0QudG9KU09OIn0pO2NvbnN0IGk9e307ZnVuY3Rpb24gcihlLG4pe3JldHVybiB2b2lkIDA9PT1lW24udXVpZF0mJihlW24udXVpZF09bi50b0pTT04odCkpLG4udXVpZH1pZihpLnV1aWQ9dGhpcy51dWlkLGkudHlwZT10aGlzLnR5cGUsIiIhPT10aGlzLm5hbWUmJihpLm5hbWU9dGhpcy5uYW1lKSwhMD09PXRoaXMuY2FzdFNoYWRvdyYmKGkuY2FzdFNoYWRvdz0hMCksITA9PT10aGlzLnJlY2VpdmVTaGFkb3cmJihpLnJlY2VpdmVTaGFkb3c9ITApLCExPT09dGhpcy52aXNpYmxlJiYoaS52aXNpYmxlPSExKSwhMT09PXRoaXMuZnJ1c3R1bUN1bGxlZCYmKGkuZnJ1c3R1bUN1bGxlZD0hMSksMCE9PXRoaXMucmVuZGVyT3JkZXImJihpLnJlbmRlck9yZGVyPXRoaXMucmVuZGVyT3JkZXIpLCJ7fSIhPT1KU09OLnN0cmluZ2lmeSh0aGlzLnVzZXJEYXRhKSYmKGkudXNlckRhdGE9dGhpcy51c2VyRGF0YSksaS5sYXllcnM9dGhpcy5sYXllcnMubWFzayxpLm1hdHJpeD10aGlzLm1hdHJpeC50b0FycmF5KCksITE9PT10aGlzLm1hdHJpeEF1dG9VcGRhdGUmJihpLm1hdHJpeEF1dG9VcGRhdGU9ITEpLHRoaXMuaXNJbnN0YW5jZWRNZXNoJiYoaS50eXBlPSJJbnN0YW5jZWRNZXNoIixpLmNvdW50PXRoaXMuY291bnQsaS5pbnN0YW5jZU1hdHJpeD10aGlzLmluc3RhbmNlTWF0cml4LnRvSlNPTigpKSx0aGlzLmlzTWVzaHx8dGhpcy5pc0xpbmV8fHRoaXMuaXNQb2ludHMpe2kuZ2VvbWV0cnk9cih0Lmdlb21ldHJpZXMsdGhpcy5nZW9tZXRyeSk7Y29uc3QgZT10aGlzLmdlb21ldHJ5LnBhcmFtZXRlcnM7aWYodm9pZCAwIT09ZSYmdm9pZCAwIT09ZS5zaGFwZXMpe2NvbnN0IG49ZS5zaGFwZXM7aWYoQXJyYXkuaXNBcnJheShuKSlmb3IobGV0IGU9MCxpPW4ubGVuZ3RoO2U8aTtlKyspcih0LnNoYXBlcyxuW2VdKTtlbHNlIHIodC5zaGFwZXMsbil9fWlmKHRoaXMuaXNTa2lubmVkTWVzaCYmKGkuYmluZE1vZGU9dGhpcy5iaW5kTW9kZSxpLmJpbmRNYXRyaXg9dGhpcy5iaW5kTWF0cml4LnRvQXJyYXkoKSx2b2lkIDAhPT10aGlzLnNrZWxldG9uJiYocih0LnNrZWxldG9ucyx0aGlzLnNrZWxldG9uKSxpLnNrZWxldG9uPXRoaXMuc2tlbGV0b24udXVpZCkpLHZvaWQgMCE9PXRoaXMubWF0ZXJpYWwpaWYoQXJyYXkuaXNBcnJheSh0aGlzLm1hdGVyaWFsKSl7Y29uc3QgZT1bXTtmb3IobGV0IG49MCxpPXRoaXMubWF0ZXJpYWwubGVuZ3RoO248aTtuKyspZS5wdXNoKHIodC5tYXRlcmlhbHMsdGhpcy5tYXRlcmlhbFtuXSkpO2kubWF0ZXJpYWw9ZX1lbHNlIGkubWF0ZXJpYWw9cih0Lm1hdGVyaWFscyx0aGlzLm1hdGVyaWFsKTtpZih0aGlzLmNoaWxkcmVuLmxlbmd0aD4wKXtpLmNoaWxkcmVuPVtdO2ZvcihsZXQgZT0wO2U8dGhpcy5jaGlsZHJlbi5sZW5ndGg7ZSsrKWkuY2hpbGRyZW4ucHVzaCh0aGlzLmNoaWxkcmVuW2VdLnRvSlNPTih0KS5vYmplY3QpfWlmKHRoaXMuYW5pbWF0aW9ucy5sZW5ndGg+MCl7aS5hbmltYXRpb25zPVtdO2ZvcihsZXQgZT0wO2U8dGhpcy5hbmltYXRpb25zLmxlbmd0aDtlKyspaS5hbmltYXRpb25zLnB1c2gocih0LmFuaW1hdGlvbnMsdGhpcy5hbmltYXRpb25zW2VdKSl9aWYoZSl7Y29uc3QgZT1vKHQuZ2VvbWV0cmllcyksaT1vKHQubWF0ZXJpYWxzKSxyPW8odC50ZXh0dXJlcyksYT1vKHQuaW1hZ2VzKSxzPW8odC5zaGFwZXMpLGw9byh0LnNrZWxldG9ucyksYz1vKHQuYW5pbWF0aW9ucyk7ZS5sZW5ndGg+MCYmKG4uZ2VvbWV0cmllcz1lKSxpLmxlbmd0aD4wJiYobi5tYXRlcmlhbHM9aSksci5sZW5ndGg+MCYmKG4udGV4dHVyZXM9ciksYS5sZW5ndGg+MCYmKG4uaW1hZ2VzPWEpLHMubGVuZ3RoPjAmJihuLnNoYXBlcz1zKSxsLmxlbmd0aD4wJiYobi5za2VsZXRvbnM9bCksYy5sZW5ndGg+MCYmKG4uYW5pbWF0aW9ucz1jKX1yZXR1cm4gbi5vYmplY3Q9aSxuO2Z1bmN0aW9uIG8odCl7Y29uc3QgZT1bXTtmb3IoY29uc3QgbiBpbiB0KXtjb25zdCBpPXRbbl07ZGVsZXRlIGkubWV0YWRhdGEsZS5wdXNoKGkpfXJldHVybiBlfX0sY2xvbmU6ZnVuY3Rpb24odCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMsdCl9LGNvcHk6ZnVuY3Rpb24odCxlPSEwKXtpZih0aGlzLm5hbWU9dC5uYW1lLHRoaXMudXAuY29weSh0LnVwKSx0aGlzLnBvc2l0aW9uLmNvcHkodC5wb3NpdGlvbiksdGhpcy5yb3RhdGlvbi5vcmRlcj10LnJvdGF0aW9uLm9yZGVyLHRoaXMucXVhdGVybmlvbi5jb3B5KHQucXVhdGVybmlvbiksdGhpcy5zY2FsZS5jb3B5KHQuc2NhbGUpLHRoaXMubWF0cml4LmNvcHkodC5tYXRyaXgpLHRoaXMubWF0cml4V29ybGQuY29weSh0Lm1hdHJpeFdvcmxkKSx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9dC5tYXRyaXhBdXRvVXBkYXRlLHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZT10Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGUsdGhpcy5sYXllcnMubWFzaz10LmxheWVycy5tYXNrLHRoaXMudmlzaWJsZT10LnZpc2libGUsdGhpcy5jYXN0U2hhZG93PXQuY2FzdFNoYWRvdyx0aGlzLnJlY2VpdmVTaGFkb3c9dC5yZWNlaXZlU2hhZG93LHRoaXMuZnJ1c3R1bUN1bGxlZD10LmZydXN0dW1DdWxsZWQsdGhpcy5yZW5kZXJPcmRlcj10LnJlbmRlck9yZGVyLHRoaXMudXNlckRhdGE9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0LnVzZXJEYXRhKSksITA9PT1lKWZvcihsZXQgZT0wO2U8dC5jaGlsZHJlbi5sZW5ndGg7ZSsrKXRoaXMuYWRkKHQuY2hpbGRyZW5bZV0uY2xvbmUoKSk7cmV0dXJuIHRoaXN9fSk7Y29uc3QgcVJ0PW5ldyBxT3QsWVJ0PW5ldyBxT3QsWFJ0PW5ldyBET3Q7Y2xhc3MgJFJ0e2NvbnN0cnVjdG9yKHQsZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlzUGxhbmUiLHt2YWx1ZTohMH0pLHRoaXMubm9ybWFsPXZvaWQgMCE9PXQ/dDpuZXcgcU90KDEsMCwwKSx0aGlzLmNvbnN0YW50PXZvaWQgMCE9PWU/ZTowfXNldCh0LGUpe3JldHVybiB0aGlzLm5vcm1hbC5jb3B5KHQpLHRoaXMuY29uc3RhbnQ9ZSx0aGlzfXNldENvbXBvbmVudHModCxlLG4saSl7cmV0dXJuIHRoaXMubm9ybWFsLnNldCh0LGUsbiksdGhpcy5jb25zdGFudD1pLHRoaXN9c2V0RnJvbU5vcm1hbEFuZENvcGxhbmFyUG9pbnQodCxlKXtyZXR1cm4gdGhpcy5ub3JtYWwuY29weSh0KSx0aGlzLmNvbnN0YW50PS1lLmRvdCh0aGlzLm5vcm1hbCksdGhpc31zZXRGcm9tQ29wbGFuYXJQb2ludHModCxlLG4pe2NvbnN0IGk9cVJ0LnN1YlZlY3RvcnMobixlKS5jcm9zcyhZUnQuc3ViVmVjdG9ycyh0LGUpKS5ub3JtYWxpemUoKTtyZXR1cm4gdGhpcy5zZXRGcm9tTm9ybWFsQW5kQ29wbGFuYXJQb2ludChpLHQpLHRoaXN9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9Y29weSh0KXtyZXR1cm4gdGhpcy5ub3JtYWwuY29weSh0Lm5vcm1hbCksdGhpcy5jb25zdGFudD10LmNvbnN0YW50LHRoaXN9bm9ybWFsaXplKCl7Y29uc3QgdD0xL3RoaXMubm9ybWFsLmxlbmd0aCgpO3JldHVybiB0aGlzLm5vcm1hbC5tdWx0aXBseVNjYWxhcih0KSx0aGlzLmNvbnN0YW50Kj10LHRoaXN9bmVnYXRlKCl7cmV0dXJuIHRoaXMuY29uc3RhbnQqPS0xLHRoaXMubm9ybWFsLm5lZ2F0ZSgpLHRoaXN9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiB0aGlzLm5vcm1hbC5kb3QodCkrdGhpcy5jb25zdGFudH1kaXN0YW5jZVRvU3BoZXJlKHQpe3JldHVybiB0aGlzLmRpc3RhbmNlVG9Qb2ludCh0LmNlbnRlciktdC5yYWRpdXN9cHJvamVjdFBvaW50KHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihjb25zb2xlLndhcm4oIlRIUkVFLlBsYW5lOiAucHJvamVjdFBvaW50KCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLGU9bmV3IHFPdCksZS5jb3B5KHRoaXMubm9ybWFsKS5tdWx0aXBseVNjYWxhcigtdGhpcy5kaXN0YW5jZVRvUG9pbnQodCkpLmFkZCh0KX1pbnRlcnNlY3RMaW5lKHQsZSl7dm9pZCAwPT09ZSYmKGNvbnNvbGUud2FybigiVEhSRUUuUGxhbmU6IC5pbnRlcnNlY3RMaW5lKCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLGU9bmV3IHFPdCk7Y29uc3Qgbj10LmRlbHRhKHFSdCksaT10aGlzLm5vcm1hbC5kb3Qobik7aWYoMD09PWkpcmV0dXJuIDA9PT10aGlzLmRpc3RhbmNlVG9Qb2ludCh0LnN0YXJ0KT9lLmNvcHkodC5zdGFydCk6dm9pZCAwO2NvbnN0IHI9LSh0LnN0YXJ0LmRvdCh0aGlzLm5vcm1hbCkrdGhpcy5jb25zdGFudCkvaTtyZXR1cm4gcjwwfHxyPjE/dm9pZCAwOmUuY29weShuKS5tdWx0aXBseVNjYWxhcihyKS5hZGQodC5zdGFydCl9aW50ZXJzZWN0c0xpbmUodCl7Y29uc3QgZT10aGlzLmRpc3RhbmNlVG9Qb2ludCh0LnN0YXJ0KSxuPXRoaXMuZGlzdGFuY2VUb1BvaW50KHQuZW5kKTtyZXR1cm4gZTwwJiZuPjB8fG48MCYmZT4wfWludGVyc2VjdHNCb3godCl7cmV0dXJuIHQuaW50ZXJzZWN0c1BsYW5lKHRoaXMpfWludGVyc2VjdHNTcGhlcmUodCl7cmV0dXJuIHQuaW50ZXJzZWN0c1BsYW5lKHRoaXMpfWNvcGxhbmFyUG9pbnQodCl7cmV0dXJuIHZvaWQgMD09PXQmJihjb25zb2xlLndhcm4oIlRIUkVFLlBsYW5lOiAuY29wbGFuYXJQb2ludCgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSx0PW5ldyBxT3QpLHQuY29weSh0aGlzLm5vcm1hbCkubXVsdGlwbHlTY2FsYXIoLXRoaXMuY29uc3RhbnQpfWFwcGx5TWF0cml4NCh0LGUpe2NvbnN0IG49ZXx8WFJ0LmdldE5vcm1hbE1hdHJpeCh0KSxpPXRoaXMuY29wbGFuYXJQb2ludChxUnQpLmFwcGx5TWF0cml4NCh0KSxyPXRoaXMubm9ybWFsLmFwcGx5TWF0cml4MyhuKS5ub3JtYWxpemUoKTtyZXR1cm4gdGhpcy5jb25zdGFudD0taS5kb3QociksdGhpc310cmFuc2xhdGUodCl7cmV0dXJuIHRoaXMuY29uc3RhbnQtPXQuZG90KHRoaXMubm9ybWFsKSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5ub3JtYWwuZXF1YWxzKHRoaXMubm9ybWFsKSYmdC5jb25zdGFudD09PXRoaXMuY29uc3RhbnR9fWNvbnN0IEtSdD1uZXcgcU90LFpSdD1uZXcgcU90LEpSdD1uZXcgcU90LFFSdD1uZXcgcU90LHR6dD1uZXcgcU90LGV6dD1uZXcgcU90LG56dD1uZXcgcU90LGl6dD1uZXcgcU90LHJ6dD1uZXcgcU90LG96dD1uZXcgcU90O2NsYXNzIGF6dHtjb25zdHJ1Y3Rvcih0LGUsbil7dGhpcy5hPXZvaWQgMCE9PXQ/dDpuZXcgcU90LHRoaXMuYj12b2lkIDAhPT1lP2U6bmV3IHFPdCx0aGlzLmM9dm9pZCAwIT09bj9uOm5ldyBxT3R9c3RhdGljIGdldE5vcm1hbCh0LGUsbixpKXt2b2lkIDA9PT1pJiYoY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLmdldE5vcm1hbCgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSxpPW5ldyBxT3QpLGkuc3ViVmVjdG9ycyhuLGUpLEtSdC5zdWJWZWN0b3JzKHQsZSksaS5jcm9zcyhLUnQpO2NvbnN0IHI9aS5sZW5ndGhTcSgpO3JldHVybiByPjA/aS5tdWx0aXBseVNjYWxhcigxL01hdGguc3FydChyKSk6aS5zZXQoMCwwLDApfXN0YXRpYyBnZXRCYXJ5Y29vcmQodCxlLG4saSxyKXtLUnQuc3ViVmVjdG9ycyhpLGUpLFpSdC5zdWJWZWN0b3JzKG4sZSksSlJ0LnN1YlZlY3RvcnModCxlKTtjb25zdCBvPUtSdC5kb3QoS1J0KSxhPUtSdC5kb3QoWlJ0KSxzPUtSdC5kb3QoSlJ0KSxsPVpSdC5kb3QoWlJ0KSxjPVpSdC5kb3QoSlJ0KSx1PW8qbC1hKmE7aWYodm9pZCAwPT09ciYmKGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5nZXRCYXJ5Y29vcmQoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIikscj1uZXcgcU90KSwwPT09dSlyZXR1cm4gci5zZXQoLTIsLTEsLTEpO2NvbnN0IGg9MS91LGQ9KGwqcy1hKmMpKmgscD0obypjLWEqcykqaDtyZXR1cm4gci5zZXQoMS1kLXAscCxkKX1zdGF0aWMgY29udGFpbnNQb2ludCh0LGUsbixpKXtyZXR1cm4gdGhpcy5nZXRCYXJ5Y29vcmQodCxlLG4saSxRUnQpLFFSdC54Pj0wJiZRUnQueT49MCYmUVJ0LngrUVJ0Lnk8PTF9c3RhdGljIGdldFVWKHQsZSxuLGkscixvLGEscyl7cmV0dXJuIHRoaXMuZ2V0QmFyeWNvb3JkKHQsZSxuLGksUVJ0KSxzLnNldCgwLDApLHMuYWRkU2NhbGVkVmVjdG9yKHIsUVJ0LngpLHMuYWRkU2NhbGVkVmVjdG9yKG8sUVJ0LnkpLHMuYWRkU2NhbGVkVmVjdG9yKGEsUVJ0LnopLHN9c3RhdGljIGlzRnJvbnRGYWNpbmcodCxlLG4saSl7cmV0dXJuIEtSdC5zdWJWZWN0b3JzKG4sZSksWlJ0LnN1YlZlY3RvcnModCxlKSxLUnQuY3Jvc3MoWlJ0KS5kb3QoaSk8MH1zZXQodCxlLG4pe3JldHVybiB0aGlzLmEuY29weSh0KSx0aGlzLmIuY29weShlKSx0aGlzLmMuY29weShuKSx0aGlzfXNldEZyb21Qb2ludHNBbmRJbmRpY2VzKHQsZSxuLGkpe3JldHVybiB0aGlzLmEuY29weSh0W2VdKSx0aGlzLmIuY29weSh0W25dKSx0aGlzLmMuY29weSh0W2ldKSx0aGlzfWNsb25lKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMuYS5jb3B5KHQuYSksdGhpcy5iLmNvcHkodC5iKSx0aGlzLmMuY29weSh0LmMpLHRoaXN9Z2V0QXJlYSgpe3JldHVybiBLUnQuc3ViVmVjdG9ycyh0aGlzLmMsdGhpcy5iKSxaUnQuc3ViVmVjdG9ycyh0aGlzLmEsdGhpcy5iKSwuNSpLUnQuY3Jvc3MoWlJ0KS5sZW5ndGgoKX1nZXRNaWRwb2ludCh0KXtyZXR1cm4gdm9pZCAwPT09dCYmKGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5nZXRNaWRwb2ludCgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSx0PW5ldyBxT3QpLHQuYWRkVmVjdG9ycyh0aGlzLmEsdGhpcy5iKS5hZGQodGhpcy5jKS5tdWx0aXBseVNjYWxhcigxLzMpfWdldE5vcm1hbCh0KXtyZXR1cm4gYXp0LmdldE5vcm1hbCh0aGlzLmEsdGhpcy5iLHRoaXMuYyx0KX1nZXRQbGFuZSh0KXtyZXR1cm4gdm9pZCAwPT09dCYmKGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5nZXRQbGFuZSgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSx0PW5ldyAkUnQpLHQuc2V0RnJvbUNvcGxhbmFyUG9pbnRzKHRoaXMuYSx0aGlzLmIsdGhpcy5jKX1nZXRCYXJ5Y29vcmQodCxlKXtyZXR1cm4gYXp0LmdldEJhcnljb29yZCh0LHRoaXMuYSx0aGlzLmIsdGhpcy5jLGUpfWdldFVWKHQsZSxuLGkscil7cmV0dXJuIGF6dC5nZXRVVih0LHRoaXMuYSx0aGlzLmIsdGhpcy5jLGUsbixpLHIpfWNvbnRhaW5zUG9pbnQodCl7cmV0dXJuIGF6dC5jb250YWluc1BvaW50KHQsdGhpcy5hLHRoaXMuYix0aGlzLmMpfWlzRnJvbnRGYWNpbmcodCl7cmV0dXJuIGF6dC5pc0Zyb250RmFjaW5nKHRoaXMuYSx0aGlzLmIsdGhpcy5jLHQpfWludGVyc2VjdHNCb3godCl7cmV0dXJuIHQuaW50ZXJzZWN0c1RyaWFuZ2xlKHRoaXMpfWNsb3Nlc3RQb2ludFRvUG9pbnQodCxlKXt2b2lkIDA9PT1lJiYoY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLmNsb3Nlc3RQb2ludFRvUG9pbnQoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIiksZT1uZXcgcU90KTtjb25zdCBuPXRoaXMuYSxpPXRoaXMuYixyPXRoaXMuYztsZXQgbyxhO3R6dC5zdWJWZWN0b3JzKGksbiksZXp0LnN1YlZlY3RvcnMocixuKSxpenQuc3ViVmVjdG9ycyh0LG4pO2NvbnN0IHM9dHp0LmRvdChpenQpLGw9ZXp0LmRvdChpenQpO2lmKHM8PTAmJmw8PTApcmV0dXJuIGUuY29weShuKTtyenQuc3ViVmVjdG9ycyh0LGkpO2NvbnN0IGM9dHp0LmRvdChyenQpLHU9ZXp0LmRvdChyenQpO2lmKGM+PTAmJnU8PWMpcmV0dXJuIGUuY29weShpKTtjb25zdCBoPXMqdS1jKmw7aWYoaDw9MCYmcz49MCYmYzw9MClyZXR1cm4gbz1zLyhzLWMpLGUuY29weShuKS5hZGRTY2FsZWRWZWN0b3IodHp0LG8pO296dC5zdWJWZWN0b3JzKHQscik7Y29uc3QgZD10enQuZG90KG96dCkscD1lenQuZG90KG96dCk7aWYocD49MCYmZDw9cClyZXR1cm4gZS5jb3B5KHIpO2NvbnN0IGY9ZCpsLXMqcDtpZihmPD0wJiZsPj0wJiZwPD0wKXJldHVybiBhPWwvKGwtcCksZS5jb3B5KG4pLmFkZFNjYWxlZFZlY3RvcihlenQsYSk7Y29uc3QgbT1jKnAtZCp1O2lmKG08PTAmJnUtYz49MCYmZC1wPj0wKXJldHVybiBuenQuc3ViVmVjdG9ycyhyLGkpLGE9KHUtYykvKHUtYysoZC1wKSksZS5jb3B5KGkpLmFkZFNjYWxlZFZlY3RvcihuenQsYSk7Y29uc3QgZz0xLyhtK2YraCk7cmV0dXJuIG89ZipnLGE9aCpnLGUuY29weShuKS5hZGRTY2FsZWRWZWN0b3IodHp0LG8pLmFkZFNjYWxlZFZlY3RvcihlenQsYSl9ZXF1YWxzKHQpe3JldHVybiB0LmEuZXF1YWxzKHRoaXMuYSkmJnQuYi5lcXVhbHModGhpcy5iKSYmdC5jLmVxdWFscyh0aGlzLmMpfX1jb25zdCBzenQ9e2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH0sbHp0PXtoOjAsczowLGw6MH0sY3p0PXtoOjAsczowLGw6MH07ZnVuY3Rpb24gdXp0KHQsZSxuKXtyZXR1cm4gbjwwJiYobis9MSksbj4xJiYobi09MSksbjwxLzY/dCs2KihlLXQpKm46bjwuNT9lOm48Mi8zP3QrNiooZS10KSooMi8zLW4pOnR9ZnVuY3Rpb24gaHp0KHQpe3JldHVybiB0PC4wNDA0NT8uMDc3Mzk5MzgwOCp0Ok1hdGgucG93KC45NDc4NjcyOTg2KnQrLjA1MjEzMjcwMTQsMi40KX1mdW5jdGlvbiBkenQodCl7cmV0dXJuIHQ8LjAwMzEzMDg/MTIuOTIqdDoxLjA1NSpNYXRoLnBvdyh0LC40MTY2NiktLjA1NX1jbGFzcyBwenR7Y29uc3RydWN0b3IodCxlLG4pe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaXNDb2xvciIse3ZhbHVlOiEwfSksdm9pZCAwPT09ZSYmdm9pZCAwPT09bj90aGlzLnNldCh0KTp0aGlzLnNldFJHQih0LGUsbil9c2V0KHQpe3JldHVybiB0JiZ0LmlzQ29sb3I/dGhpcy5jb3B5KHQpOiJudW1iZXIiPT10eXBlb2YgdD90aGlzLnNldEhleCh0KToic3RyaW5nIj09dHlwZW9mIHQmJnRoaXMuc2V0U3R5bGUodCksdGhpc31zZXRTY2FsYXIodCl7cmV0dXJuIHRoaXMucj10LHRoaXMuZz10LHRoaXMuYj10LHRoaXN9c2V0SGV4KHQpe3JldHVybiB0PU1hdGguZmxvb3IodCksdGhpcy5yPSh0Pj4xNiYyNTUpLzI1NSx0aGlzLmc9KHQ+PjgmMjU1KS8yNTUsdGhpcy5iPSgyNTUmdCkvMjU1LHRoaXN9c2V0UkdCKHQsZSxuKXtyZXR1cm4gdGhpcy5yPXQsdGhpcy5nPWUsdGhpcy5iPW4sdGhpc31zZXRIU0wodCxlLG4pe2lmKHQ9Uk90LmV1Y2xpZGVhbk1vZHVsbyh0LDEpLGU9Uk90LmNsYW1wKGUsMCwxKSxuPVJPdC5jbGFtcChuLDAsMSksMD09PWUpdGhpcy5yPXRoaXMuZz10aGlzLmI9bjtlbHNle2NvbnN0IGk9bjw9LjU/biooMStlKTpuK2UtbiplLHI9MipuLWk7dGhpcy5yPXV6dChyLGksdCsxLzMpLHRoaXMuZz11enQocixpLHQpLHRoaXMuYj11enQocixpLHQtMS8zKX1yZXR1cm4gdGhpc31zZXRTdHlsZSh0KXtmdW5jdGlvbiBlKGUpe3ZvaWQgMCE9PWUmJnBhcnNlRmxvYXQoZSk8MSYmY29uc29sZS53YXJuKCJUSFJFRS5Db2xvcjogQWxwaGEgY29tcG9uZW50IG9mICIrdCsiIHdpbGwgYmUgaWdub3JlZC4iKX1sZXQgbjtpZihuPS9eKCg/OnJnYnxoc2wpYT8pXCgoW15cKV0qKVwpLy5leGVjKHQpKXtsZXQgdDtjb25zdCBpPW5bMl07c3dpdGNoKG5bMV0pe2Nhc2UicmdiIjpjYXNlInJnYmEiOmlmKHQ9L15ccyooXGQrKVxzKixccyooXGQrKVxzKixccyooXGQrKVxzKig/OixccyooXGQqXC4/XGQrKVxzKik/JC8uZXhlYyhpKSlyZXR1cm4gdGhpcy5yPU1hdGgubWluKDI1NSxwYXJzZUludCh0WzFdLDEwKSkvMjU1LHRoaXMuZz1NYXRoLm1pbigyNTUscGFyc2VJbnQodFsyXSwxMCkpLzI1NSx0aGlzLmI9TWF0aC5taW4oMjU1LHBhcnNlSW50KHRbM10sMTApKS8yNTUsZSh0WzRdKSx0aGlzO2lmKHQ9L15ccyooXGQrKVwlXHMqLFxzKihcZCspXCVccyosXHMqKFxkKylcJVxzKig/OixccyooXGQqXC4/XGQrKVxzKik/JC8uZXhlYyhpKSlyZXR1cm4gdGhpcy5yPU1hdGgubWluKDEwMCxwYXJzZUludCh0WzFdLDEwKSkvMTAwLHRoaXMuZz1NYXRoLm1pbigxMDAscGFyc2VJbnQodFsyXSwxMCkpLzEwMCx0aGlzLmI9TWF0aC5taW4oMTAwLHBhcnNlSW50KHRbM10sMTApKS8xMDAsZSh0WzRdKSx0aGlzO2JyZWFrO2Nhc2UiaHNsIjpjYXNlImhzbGEiOmlmKHQ9L15ccyooXGQqXC4/XGQrKVxzKixccyooXGQrKVwlXHMqLFxzKihcZCspXCVccyooPzosXHMqKFxkKlwuP1xkKylccyopPyQvLmV4ZWMoaSkpe2NvbnN0IG49cGFyc2VGbG9hdCh0WzFdKS8zNjAsaT1wYXJzZUludCh0WzJdLDEwKS8xMDAscj1wYXJzZUludCh0WzNdLDEwKS8xMDA7cmV0dXJuIGUodFs0XSksdGhpcy5zZXRIU0wobixpLHIpfX19ZWxzZSBpZihuPS9eXCMoW0EtRmEtZlxkXSspJC8uZXhlYyh0KSl7Y29uc3QgdD1uWzFdLGU9dC5sZW5ndGg7aWYoMz09PWUpcmV0dXJuIHRoaXMucj1wYXJzZUludCh0LmNoYXJBdCgwKSt0LmNoYXJBdCgwKSwxNikvMjU1LHRoaXMuZz1wYXJzZUludCh0LmNoYXJBdCgxKSt0LmNoYXJBdCgxKSwxNikvMjU1LHRoaXMuYj1wYXJzZUludCh0LmNoYXJBdCgyKSt0LmNoYXJBdCgyKSwxNikvMjU1LHRoaXM7aWYoNj09PWUpcmV0dXJuIHRoaXMucj1wYXJzZUludCh0LmNoYXJBdCgwKSt0LmNoYXJBdCgxKSwxNikvMjU1LHRoaXMuZz1wYXJzZUludCh0LmNoYXJBdCgyKSt0LmNoYXJBdCgzKSwxNikvMjU1LHRoaXMuYj1wYXJzZUludCh0LmNoYXJBdCg0KSt0LmNoYXJBdCg1KSwxNikvMjU1LHRoaXN9cmV0dXJuIHQmJnQubGVuZ3RoPjA/dGhpcy5zZXRDb2xvck5hbWUodCk6dGhpc31zZXRDb2xvck5hbWUodCl7Y29uc3QgZT1zenRbdF07cmV0dXJuIHZvaWQgMCE9PWU/dGhpcy5zZXRIZXgoZSk6Y29uc29sZS53YXJuKCJUSFJFRS5Db2xvcjogVW5rbm93biBjb2xvciAiK3QpLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5yLHRoaXMuZyx0aGlzLmIpfWNvcHkodCl7cmV0dXJuIHRoaXMucj10LnIsdGhpcy5nPXQuZyx0aGlzLmI9dC5iLHRoaXN9Y29weUdhbW1hVG9MaW5lYXIodCxlPTIpe3JldHVybiB0aGlzLnI9TWF0aC5wb3codC5yLGUpLHRoaXMuZz1NYXRoLnBvdyh0LmcsZSksdGhpcy5iPU1hdGgucG93KHQuYixlKSx0aGlzfWNvcHlMaW5lYXJUb0dhbW1hKHQsZT0yKXtjb25zdCBuPWU+MD8xL2U6MTtyZXR1cm4gdGhpcy5yPU1hdGgucG93KHQucixuKSx0aGlzLmc9TWF0aC5wb3codC5nLG4pLHRoaXMuYj1NYXRoLnBvdyh0LmIsbiksdGhpc31jb252ZXJ0R2FtbWFUb0xpbmVhcih0KXtyZXR1cm4gdGhpcy5jb3B5R2FtbWFUb0xpbmVhcih0aGlzLHQpLHRoaXN9Y29udmVydExpbmVhclRvR2FtbWEodCl7cmV0dXJuIHRoaXMuY29weUxpbmVhclRvR2FtbWEodGhpcyx0KSx0aGlzfWNvcHlTUkdCVG9MaW5lYXIodCl7cmV0dXJuIHRoaXMucj1oenQodC5yKSx0aGlzLmc9aHp0KHQuZyksdGhpcy5iPWh6dCh0LmIpLHRoaXN9Y29weUxpbmVhclRvU1JHQih0KXtyZXR1cm4gdGhpcy5yPWR6dCh0LnIpLHRoaXMuZz1kenQodC5nKSx0aGlzLmI9ZHp0KHQuYiksdGhpc31jb252ZXJ0U1JHQlRvTGluZWFyKCl7cmV0dXJuIHRoaXMuY29weVNSR0JUb0xpbmVhcih0aGlzKSx0aGlzfWNvbnZlcnRMaW5lYXJUb1NSR0IoKXtyZXR1cm4gdGhpcy5jb3B5TGluZWFyVG9TUkdCKHRoaXMpLHRoaXN9Z2V0SGV4KCl7cmV0dXJuIDI1NSp0aGlzLnI8PDE2XjI1NSp0aGlzLmc8PDheMjU1KnRoaXMuYjw8MH1nZXRIZXhTdHJpbmcoKXtyZXR1cm4oIjAwMDAwMCIrdGhpcy5nZXRIZXgoKS50b1N0cmluZygxNikpLnNsaWNlKC02KX1nZXRIU0wodCl7dm9pZCAwPT09dCYmKGNvbnNvbGUud2FybigiVEhSRUUuQ29sb3I6IC5nZXRIU0woKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIiksdD17aDowLHM6MCxsOjB9KTtjb25zdCBlPXRoaXMucixuPXRoaXMuZyxpPXRoaXMuYixyPU1hdGgubWF4KGUsbixpKSxvPU1hdGgubWluKGUsbixpKTtsZXQgYSxzO2NvbnN0IGw9KG8rcikvMjtpZihvPT09cilhPTAscz0wO2Vsc2V7Y29uc3QgdD1yLW87c3dpdGNoKHM9bDw9LjU/dC8ocitvKTp0LygyLXItbykscil7Y2FzZSBlOmE9KG4taSkvdCsobjxpPzY6MCk7YnJlYWs7Y2FzZSBuOmE9KGktZSkvdCsyO2JyZWFrO2Nhc2UgaTphPShlLW4pL3QrNH1hLz02fXJldHVybiB0Lmg9YSx0LnM9cyx0Lmw9bCx0fWdldFN0eWxlKCl7cmV0dXJuInJnYigiKygyNTUqdGhpcy5yfDApKyIsIisoMjU1KnRoaXMuZ3wwKSsiLCIrKDI1NSp0aGlzLmJ8MCkrIikifW9mZnNldEhTTCh0LGUsbil7cmV0dXJuIHRoaXMuZ2V0SFNMKGx6dCksbHp0LmgrPXQsbHp0LnMrPWUsbHp0LmwrPW4sdGhpcy5zZXRIU0wobHp0LmgsbHp0LnMsbHp0LmwpLHRoaXN9YWRkKHQpe3JldHVybiB0aGlzLnIrPXQucix0aGlzLmcrPXQuZyx0aGlzLmIrPXQuYix0aGlzfWFkZENvbG9ycyh0LGUpe3JldHVybiB0aGlzLnI9dC5yK2Uucix0aGlzLmc9dC5nK2UuZyx0aGlzLmI9dC5iK2UuYix0aGlzfWFkZFNjYWxhcih0KXtyZXR1cm4gdGhpcy5yKz10LHRoaXMuZys9dCx0aGlzLmIrPXQsdGhpc31zdWIodCl7cmV0dXJuIHRoaXMucj1NYXRoLm1heCgwLHRoaXMuci10LnIpLHRoaXMuZz1NYXRoLm1heCgwLHRoaXMuZy10LmcpLHRoaXMuYj1NYXRoLm1heCgwLHRoaXMuYi10LmIpLHRoaXN9bXVsdGlwbHkodCl7cmV0dXJuIHRoaXMucio9dC5yLHRoaXMuZyo9dC5nLHRoaXMuYio9dC5iLHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7cmV0dXJuIHRoaXMucio9dCx0aGlzLmcqPXQsdGhpcy5iKj10LHRoaXN9bGVycCh0LGUpe3JldHVybiB0aGlzLnIrPSh0LnItdGhpcy5yKSplLHRoaXMuZys9KHQuZy10aGlzLmcpKmUsdGhpcy5iKz0odC5iLXRoaXMuYikqZSx0aGlzfWxlcnBDb2xvcnModCxlLG4pe3JldHVybiB0aGlzLnI9dC5yKyhlLnItdC5yKSpuLHRoaXMuZz10LmcrKGUuZy10LmcpKm4sdGhpcy5iPXQuYisoZS5iLXQuYikqbix0aGlzfWxlcnBIU0wodCxlKXt0aGlzLmdldEhTTChsenQpLHQuZ2V0SFNMKGN6dCk7Y29uc3Qgbj1ST3QubGVycChsenQuaCxjenQuaCxlKSxpPVJPdC5sZXJwKGx6dC5zLGN6dC5zLGUpLHI9Uk90LmxlcnAobHp0LmwsY3p0LmwsZSk7cmV0dXJuIHRoaXMuc2V0SFNMKG4saSxyKSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5yPT09dGhpcy5yJiZ0Lmc9PT10aGlzLmcmJnQuYj09PXRoaXMuYn1mcm9tQXJyYXkodCxlPTApe3JldHVybiB0aGlzLnI9dFtlXSx0aGlzLmc9dFtlKzFdLHRoaXMuYj10W2UrMl0sdGhpc310b0FycmF5KHQ9W10sZT0wKXtyZXR1cm4gdFtlXT10aGlzLnIsdFtlKzFdPXRoaXMuZyx0W2UrMl09dGhpcy5iLHR9ZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUpe3JldHVybiB0aGlzLnI9dC5nZXRYKGUpLHRoaXMuZz10LmdldFkoZSksdGhpcy5iPXQuZ2V0WihlKSwhMD09PXQubm9ybWFsaXplZCYmKHRoaXMuci89MjU1LHRoaXMuZy89MjU1LHRoaXMuYi89MjU1KSx0aGlzfXRvSlNPTigpe3JldHVybiB0aGlzLmdldEhleCgpfX1wenQuTkFNRVM9c3p0LHB6dC5wcm90b3R5cGUucj0xLHB6dC5wcm90b3R5cGUuZz0xLHB6dC5wcm90b3R5cGUuYj0xO2NsYXNzIGZ6dHtjb25zdHJ1Y3Rvcih0LGUsbixpLHIsbz0wKXt0aGlzLmE9dCx0aGlzLmI9ZSx0aGlzLmM9bix0aGlzLm5vcm1hbD1pJiZpLmlzVmVjdG9yMz9pOm5ldyBxT3QsdGhpcy52ZXJ0ZXhOb3JtYWxzPUFycmF5LmlzQXJyYXkoaSk/aTpbXSx0aGlzLmNvbG9yPXImJnIuaXNDb2xvcj9yOm5ldyBwenQsdGhpcy52ZXJ0ZXhDb2xvcnM9QXJyYXkuaXNBcnJheShyKT9yOltdLHRoaXMubWF0ZXJpYWxJbmRleD1vfWNsb25lKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfWNvcHkodCl7dGhpcy5hPXQuYSx0aGlzLmI9dC5iLHRoaXMuYz10LmMsdGhpcy5ub3JtYWwuY29weSh0Lm5vcm1hbCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubWF0ZXJpYWxJbmRleD10Lm1hdGVyaWFsSW5kZXg7Zm9yKGxldCBlPTAsbj10LnZlcnRleE5vcm1hbHMubGVuZ3RoO2U8bjtlKyspdGhpcy52ZXJ0ZXhOb3JtYWxzW2VdPXQudmVydGV4Tm9ybWFsc1tlXS5jbG9uZSgpO2ZvcihsZXQgZT0wLG49dC52ZXJ0ZXhDb2xvcnMubGVuZ3RoO2U8bjtlKyspdGhpcy52ZXJ0ZXhDb2xvcnNbZV09dC52ZXJ0ZXhDb2xvcnNbZV0uY2xvbmUoKTtyZXR1cm4gdGhpc319bGV0IG16dD0wO2Z1bmN0aW9uIGd6dCgpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpZCIse3ZhbHVlOm16dCsrfSksdGhpcy51dWlkPVJPdC5nZW5lcmF0ZVVVSUQoKSx0aGlzLm5hbWU9IiIsdGhpcy50eXBlPSJNYXRlcmlhbCIsdGhpcy5mb2c9ITAsdGhpcy5ibGVuZGluZz0xLHRoaXMuc2lkZT0wLHRoaXMuZmxhdFNoYWRpbmc9ITEsdGhpcy52ZXJ0ZXhDb2xvcnM9ITEsdGhpcy5vcGFjaXR5PTEsdGhpcy50cmFuc3BhcmVudD0hMSx0aGlzLmJsZW5kU3JjPTIwNCx0aGlzLmJsZW5kRHN0PTIwNSx0aGlzLmJsZW5kRXF1YXRpb249TEl0LHRoaXMuYmxlbmRTcmNBbHBoYT1udWxsLHRoaXMuYmxlbmREc3RBbHBoYT1udWxsLHRoaXMuYmxlbmRFcXVhdGlvbkFscGhhPW51bGwsdGhpcy5kZXB0aEZ1bmM9Myx0aGlzLmRlcHRoVGVzdD0hMCx0aGlzLmRlcHRoV3JpdGU9ITAsdGhpcy5zdGVuY2lsV3JpdGVNYXNrPTI1NSx0aGlzLnN0ZW5jaWxGdW5jPTUxOSx0aGlzLnN0ZW5jaWxSZWY9MCx0aGlzLnN0ZW5jaWxGdW5jTWFzaz0yNTUsdGhpcy5zdGVuY2lsRmFpbD1BT3QsdGhpcy5zdGVuY2lsWkZhaWw9QU90LHRoaXMuc3RlbmNpbFpQYXNzPUFPdCx0aGlzLnN0ZW5jaWxXcml0ZT0hMSx0aGlzLmNsaXBwaW5nUGxhbmVzPW51bGwsdGhpcy5jbGlwSW50ZXJzZWN0aW9uPSExLHRoaXMuY2xpcFNoYWRvd3M9ITEsdGhpcy5zaGFkb3dTaWRlPW51bGwsdGhpcy5jb2xvcldyaXRlPSEwLHRoaXMucHJlY2lzaW9uPW51bGwsdGhpcy5wb2x5Z29uT2Zmc2V0PSExLHRoaXMucG9seWdvbk9mZnNldEZhY3Rvcj0wLHRoaXMucG9seWdvbk9mZnNldFVuaXRzPTAsdGhpcy5kaXRoZXJpbmc9ITEsdGhpcy5hbHBoYVRlc3Q9MCx0aGlzLnByZW11bHRpcGxpZWRBbHBoYT0hMSx0aGlzLnZpc2libGU9ITAsdGhpcy50b25lTWFwcGVkPSEwLHRoaXMudXNlckRhdGE9e30sdGhpcy52ZXJzaW9uPTB9ZnVuY3Rpb24gX3p0KHQpe2d6dC5jYWxsKHRoaXMpLHRoaXMudHlwZT0iTWVzaEJhc2ljTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IHB6dCgxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmxpZ2h0TWFwPW51bGwsdGhpcy5saWdodE1hcEludGVuc2l0eT0xLHRoaXMuYW9NYXA9bnVsbCx0aGlzLmFvTWFwSW50ZW5zaXR5PTEsdGhpcy5zcGVjdWxhck1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmVudk1hcD1udWxsLHRoaXMuY29tYmluZT0wLHRoaXMucmVmbGVjdGl2aXR5PTEsdGhpcy5yZWZyYWN0aW9uUmF0aW89Ljk4LHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy53aXJlZnJhbWVMaW5lY2FwPSJyb3VuZCIsdGhpcy53aXJlZnJhbWVMaW5lam9pbj0icm91bmQiLHRoaXMuc2tpbm5pbmc9ITEsdGhpcy5tb3JwaFRhcmdldHM9ITEsdGhpcy5zZXRWYWx1ZXModCl9Z3p0LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoTk90LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOmd6dCxpc01hdGVyaWFsOiEwLG9uQmVmb3JlQ29tcGlsZTpmdW5jdGlvbigpe30sY3VzdG9tUHJvZ3JhbUNhY2hlS2V5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub25CZWZvcmVDb21waWxlLnRvU3RyaW5nKCl9LHNldFZhbHVlczpmdW5jdGlvbih0KXtpZih2b2lkIDAhPT10KWZvcihjb25zdCBlIGluIHQpe2NvbnN0IG49dFtlXTtpZih2b2lkIDA9PT1uKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAnIitlKyInIHBhcmFtZXRlciBpcyB1bmRlZmluZWQuIik7Y29udGludWV9aWYoInNoYWRpbmciPT09ZSl7Y29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAuc2hhZGluZyBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdGhlIGJvb2xlYW4gLmZsYXRTaGFkaW5nIGluc3RlYWQuIiksdGhpcy5mbGF0U2hhZGluZz0xPT09bjtjb250aW51ZX1jb25zdCBpPXRoaXNbZV07dm9pZCAwIT09aT9pJiZpLmlzQ29sb3I/aS5zZXQobik6aSYmaS5pc1ZlY3RvcjMmJm4mJm4uaXNWZWN0b3IzP2kuY29weShuKTp0aGlzW2VdPW46Y29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAnIitlKyInIGlzIG5vdCBhIHByb3BlcnR5IG9mIHRoaXMgbWF0ZXJpYWwuIil9fSx0b0pTT046ZnVuY3Rpb24odCl7Y29uc3QgZT12b2lkIDA9PT10fHwic3RyaW5nIj09dHlwZW9mIHQ7ZSYmKHQ9e3RleHR1cmVzOnt9LGltYWdlczp7fX0pO2NvbnN0IG49e21ldGFkYXRhOnt2ZXJzaW9uOjQuNSx0eXBlOiJNYXRlcmlhbCIsZ2VuZXJhdG9yOiJNYXRlcmlhbC50b0pTT04ifX07ZnVuY3Rpb24gaSh0KXtjb25zdCBlPVtdO2Zvcihjb25zdCBuIGluIHQpe2NvbnN0IGk9dFtuXTtkZWxldGUgaS5tZXRhZGF0YSxlLnB1c2goaSl9cmV0dXJuIGV9aWYobi51dWlkPXRoaXMudXVpZCxuLnR5cGU9dGhpcy50eXBlLCIiIT09dGhpcy5uYW1lJiYobi5uYW1lPXRoaXMubmFtZSksdGhpcy5jb2xvciYmdGhpcy5jb2xvci5pc0NvbG9yJiYobi5jb2xvcj10aGlzLmNvbG9yLmdldEhleCgpKSx2b2lkIDAhPT10aGlzLnJvdWdobmVzcyYmKG4ucm91Z2huZXNzPXRoaXMucm91Z2huZXNzKSx2b2lkIDAhPT10aGlzLm1ldGFsbmVzcyYmKG4ubWV0YWxuZXNzPXRoaXMubWV0YWxuZXNzKSx0aGlzLnNoZWVuJiZ0aGlzLnNoZWVuLmlzQ29sb3ImJihuLnNoZWVuPXRoaXMuc2hlZW4uZ2V0SGV4KCkpLHRoaXMuZW1pc3NpdmUmJnRoaXMuZW1pc3NpdmUuaXNDb2xvciYmKG4uZW1pc3NpdmU9dGhpcy5lbWlzc2l2ZS5nZXRIZXgoKSksdGhpcy5lbWlzc2l2ZUludGVuc2l0eSYmMSE9PXRoaXMuZW1pc3NpdmVJbnRlbnNpdHkmJihuLmVtaXNzaXZlSW50ZW5zaXR5PXRoaXMuZW1pc3NpdmVJbnRlbnNpdHkpLHRoaXMuc3BlY3VsYXImJnRoaXMuc3BlY3VsYXIuaXNDb2xvciYmKG4uc3BlY3VsYXI9dGhpcy5zcGVjdWxhci5nZXRIZXgoKSksdm9pZCAwIT09dGhpcy5zaGluaW5lc3MmJihuLnNoaW5pbmVzcz10aGlzLnNoaW5pbmVzcyksdm9pZCAwIT09dGhpcy5jbGVhcmNvYXQmJihuLmNsZWFyY29hdD10aGlzLmNsZWFyY29hdCksdm9pZCAwIT09dGhpcy5jbGVhcmNvYXRSb3VnaG5lc3MmJihuLmNsZWFyY29hdFJvdWdobmVzcz10aGlzLmNsZWFyY29hdFJvdWdobmVzcyksdGhpcy5jbGVhcmNvYXRNYXAmJnRoaXMuY2xlYXJjb2F0TWFwLmlzVGV4dHVyZSYmKG4uY2xlYXJjb2F0TWFwPXRoaXMuY2xlYXJjb2F0TWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcCYmdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3NNYXAuaXNUZXh0dXJlJiYobi5jbGVhcmNvYXRSb3VnaG5lc3NNYXA9dGhpcy5jbGVhcmNvYXRSb3VnaG5lc3NNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuY2xlYXJjb2F0Tm9ybWFsTWFwJiZ0aGlzLmNsZWFyY29hdE5vcm1hbE1hcC5pc1RleHR1cmUmJihuLmNsZWFyY29hdE5vcm1hbE1hcD10aGlzLmNsZWFyY29hdE5vcm1hbE1hcC50b0pTT04odCkudXVpZCxuLmNsZWFyY29hdE5vcm1hbFNjYWxlPXRoaXMuY2xlYXJjb2F0Tm9ybWFsU2NhbGUudG9BcnJheSgpKSx0aGlzLm1hcCYmdGhpcy5tYXAuaXNUZXh0dXJlJiYobi5tYXA9dGhpcy5tYXAudG9KU09OKHQpLnV1aWQpLHRoaXMubWF0Y2FwJiZ0aGlzLm1hdGNhcC5pc1RleHR1cmUmJihuLm1hdGNhcD10aGlzLm1hdGNhcC50b0pTT04odCkudXVpZCksdGhpcy5hbHBoYU1hcCYmdGhpcy5hbHBoYU1hcC5pc1RleHR1cmUmJihuLmFscGhhTWFwPXRoaXMuYWxwaGFNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMubGlnaHRNYXAmJnRoaXMubGlnaHRNYXAuaXNUZXh0dXJlJiYobi5saWdodE1hcD10aGlzLmxpZ2h0TWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmFvTWFwJiZ0aGlzLmFvTWFwLmlzVGV4dHVyZSYmKG4uYW9NYXA9dGhpcy5hb01hcC50b0pTT04odCkudXVpZCxuLmFvTWFwSW50ZW5zaXR5PXRoaXMuYW9NYXBJbnRlbnNpdHkpLHRoaXMuYnVtcE1hcCYmdGhpcy5idW1wTWFwLmlzVGV4dHVyZSYmKG4uYnVtcE1hcD10aGlzLmJ1bXBNYXAudG9KU09OKHQpLnV1aWQsbi5idW1wU2NhbGU9dGhpcy5idW1wU2NhbGUpLHRoaXMubm9ybWFsTWFwJiZ0aGlzLm5vcm1hbE1hcC5pc1RleHR1cmUmJihuLm5vcm1hbE1hcD10aGlzLm5vcm1hbE1hcC50b0pTT04odCkudXVpZCxuLm5vcm1hbE1hcFR5cGU9dGhpcy5ub3JtYWxNYXBUeXBlLG4ubm9ybWFsU2NhbGU9dGhpcy5ub3JtYWxTY2FsZS50b0FycmF5KCkpLHRoaXMuZGlzcGxhY2VtZW50TWFwJiZ0aGlzLmRpc3BsYWNlbWVudE1hcC5pc1RleHR1cmUmJihuLmRpc3BsYWNlbWVudE1hcD10aGlzLmRpc3BsYWNlbWVudE1hcC50b0pTT04odCkudXVpZCxuLmRpc3BsYWNlbWVudFNjYWxlPXRoaXMuZGlzcGxhY2VtZW50U2NhbGUsbi5kaXNwbGFjZW1lbnRCaWFzPXRoaXMuZGlzcGxhY2VtZW50QmlhcyksdGhpcy5yb3VnaG5lc3NNYXAmJnRoaXMucm91Z2huZXNzTWFwLmlzVGV4dHVyZSYmKG4ucm91Z2huZXNzTWFwPXRoaXMucm91Z2huZXNzTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLm1ldGFsbmVzc01hcCYmdGhpcy5tZXRhbG5lc3NNYXAuaXNUZXh0dXJlJiYobi5tZXRhbG5lc3NNYXA9dGhpcy5tZXRhbG5lc3NNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuZW1pc3NpdmVNYXAmJnRoaXMuZW1pc3NpdmVNYXAuaXNUZXh0dXJlJiYobi5lbWlzc2l2ZU1hcD10aGlzLmVtaXNzaXZlTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLnNwZWN1bGFyTWFwJiZ0aGlzLnNwZWN1bGFyTWFwLmlzVGV4dHVyZSYmKG4uc3BlY3VsYXJNYXA9dGhpcy5zcGVjdWxhck1hcC50b0pTT04odCkudXVpZCksdGhpcy5lbnZNYXAmJnRoaXMuZW52TWFwLmlzVGV4dHVyZSYmKG4uZW52TWFwPXRoaXMuZW52TWFwLnRvSlNPTih0KS51dWlkLG4ucmVmbGVjdGl2aXR5PXRoaXMucmVmbGVjdGl2aXR5LG4ucmVmcmFjdGlvblJhdGlvPXRoaXMucmVmcmFjdGlvblJhdGlvLHZvaWQgMCE9PXRoaXMuY29tYmluZSYmKG4uY29tYmluZT10aGlzLmNvbWJpbmUpLHZvaWQgMCE9PXRoaXMuZW52TWFwSW50ZW5zaXR5JiYobi5lbnZNYXBJbnRlbnNpdHk9dGhpcy5lbnZNYXBJbnRlbnNpdHkpKSx0aGlzLmdyYWRpZW50TWFwJiZ0aGlzLmdyYWRpZW50TWFwLmlzVGV4dHVyZSYmKG4uZ3JhZGllbnRNYXA9dGhpcy5ncmFkaWVudE1hcC50b0pTT04odCkudXVpZCksdm9pZCAwIT09dGhpcy5zaXplJiYobi5zaXplPXRoaXMuc2l6ZSksdm9pZCAwIT09dGhpcy5zaXplQXR0ZW51YXRpb24mJihuLnNpemVBdHRlbnVhdGlvbj10aGlzLnNpemVBdHRlbnVhdGlvbiksMSE9PXRoaXMuYmxlbmRpbmcmJihuLmJsZW5kaW5nPXRoaXMuYmxlbmRpbmcpLCEwPT09dGhpcy5mbGF0U2hhZGluZyYmKG4uZmxhdFNoYWRpbmc9dGhpcy5mbGF0U2hhZGluZyksMCE9PXRoaXMuc2lkZSYmKG4uc2lkZT10aGlzLnNpZGUpLHRoaXMudmVydGV4Q29sb3JzJiYobi52ZXJ0ZXhDb2xvcnM9ITApLHRoaXMub3BhY2l0eTwxJiYobi5vcGFjaXR5PXRoaXMub3BhY2l0eSksITA9PT10aGlzLnRyYW5zcGFyZW50JiYobi50cmFuc3BhcmVudD10aGlzLnRyYW5zcGFyZW50KSxuLmRlcHRoRnVuYz10aGlzLmRlcHRoRnVuYyxuLmRlcHRoVGVzdD10aGlzLmRlcHRoVGVzdCxuLmRlcHRoV3JpdGU9dGhpcy5kZXB0aFdyaXRlLG4uc3RlbmNpbFdyaXRlPXRoaXMuc3RlbmNpbFdyaXRlLG4uc3RlbmNpbFdyaXRlTWFzaz10aGlzLnN0ZW5jaWxXcml0ZU1hc2ssbi5zdGVuY2lsRnVuYz10aGlzLnN0ZW5jaWxGdW5jLG4uc3RlbmNpbFJlZj10aGlzLnN0ZW5jaWxSZWYsbi5zdGVuY2lsRnVuY01hc2s9dGhpcy5zdGVuY2lsRnVuY01hc2ssbi5zdGVuY2lsRmFpbD10aGlzLnN0ZW5jaWxGYWlsLG4uc3RlbmNpbFpGYWlsPXRoaXMuc3RlbmNpbFpGYWlsLG4uc3RlbmNpbFpQYXNzPXRoaXMuc3RlbmNpbFpQYXNzLHRoaXMucm90YXRpb24mJjAhPT10aGlzLnJvdGF0aW9uJiYobi5yb3RhdGlvbj10aGlzLnJvdGF0aW9uKSwhMD09PXRoaXMucG9seWdvbk9mZnNldCYmKG4ucG9seWdvbk9mZnNldD0hMCksMCE9PXRoaXMucG9seWdvbk9mZnNldEZhY3RvciYmKG4ucG9seWdvbk9mZnNldEZhY3Rvcj10aGlzLnBvbHlnb25PZmZzZXRGYWN0b3IpLDAhPT10aGlzLnBvbHlnb25PZmZzZXRVbml0cyYmKG4ucG9seWdvbk9mZnNldFVuaXRzPXRoaXMucG9seWdvbk9mZnNldFVuaXRzKSx0aGlzLmxpbmV3aWR0aCYmMSE9PXRoaXMubGluZXdpZHRoJiYobi5saW5ld2lkdGg9dGhpcy5saW5ld2lkdGgpLHZvaWQgMCE9PXRoaXMuZGFzaFNpemUmJihuLmRhc2hTaXplPXRoaXMuZGFzaFNpemUpLHZvaWQgMCE9PXRoaXMuZ2FwU2l6ZSYmKG4uZ2FwU2l6ZT10aGlzLmdhcFNpemUpLHZvaWQgMCE9PXRoaXMuc2NhbGUmJihuLnNjYWxlPXRoaXMuc2NhbGUpLCEwPT09dGhpcy5kaXRoZXJpbmcmJihuLmRpdGhlcmluZz0hMCksdGhpcy5hbHBoYVRlc3Q+MCYmKG4uYWxwaGFUZXN0PXRoaXMuYWxwaGFUZXN0KSwhMD09PXRoaXMucHJlbXVsdGlwbGllZEFscGhhJiYobi5wcmVtdWx0aXBsaWVkQWxwaGE9dGhpcy5wcmVtdWx0aXBsaWVkQWxwaGEpLCEwPT09dGhpcy53aXJlZnJhbWUmJihuLndpcmVmcmFtZT10aGlzLndpcmVmcmFtZSksdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg+MSYmKG4ud2lyZWZyYW1lTGluZXdpZHRoPXRoaXMud2lyZWZyYW1lTGluZXdpZHRoKSwicm91bmQiIT09dGhpcy53aXJlZnJhbWVMaW5lY2FwJiYobi53aXJlZnJhbWVMaW5lY2FwPXRoaXMud2lyZWZyYW1lTGluZWNhcCksInJvdW5kIiE9PXRoaXMud2lyZWZyYW1lTGluZWpvaW4mJihuLndpcmVmcmFtZUxpbmVqb2luPXRoaXMud2lyZWZyYW1lTGluZWpvaW4pLCEwPT09dGhpcy5tb3JwaFRhcmdldHMmJihuLm1vcnBoVGFyZ2V0cz0hMCksITA9PT10aGlzLm1vcnBoTm9ybWFscyYmKG4ubW9ycGhOb3JtYWxzPSEwKSwhMD09PXRoaXMuc2tpbm5pbmcmJihuLnNraW5uaW5nPSEwKSwhMT09PXRoaXMudmlzaWJsZSYmKG4udmlzaWJsZT0hMSksITE9PT10aGlzLnRvbmVNYXBwZWQmJihuLnRvbmVNYXBwZWQ9ITEpLCJ7fSIhPT1KU09OLnN0cmluZ2lmeSh0aGlzLnVzZXJEYXRhKSYmKG4udXNlckRhdGE9dGhpcy51c2VyRGF0YSksZSl7Y29uc3QgZT1pKHQudGV4dHVyZXMpLHI9aSh0LmltYWdlcyk7ZS5sZW5ndGg+MCYmKG4udGV4dHVyZXM9ZSksci5sZW5ndGg+MCYmKG4uaW1hZ2VzPXIpfXJldHVybiBufSxjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX0sY29weTpmdW5jdGlvbih0KXt0aGlzLm5hbWU9dC5uYW1lLHRoaXMuZm9nPXQuZm9nLHRoaXMuYmxlbmRpbmc9dC5ibGVuZGluZyx0aGlzLnNpZGU9dC5zaWRlLHRoaXMuZmxhdFNoYWRpbmc9dC5mbGF0U2hhZGluZyx0aGlzLnZlcnRleENvbG9ycz10LnZlcnRleENvbG9ycyx0aGlzLm9wYWNpdHk9dC5vcGFjaXR5LHRoaXMudHJhbnNwYXJlbnQ9dC50cmFuc3BhcmVudCx0aGlzLmJsZW5kU3JjPXQuYmxlbmRTcmMsdGhpcy5ibGVuZERzdD10LmJsZW5kRHN0LHRoaXMuYmxlbmRFcXVhdGlvbj10LmJsZW5kRXF1YXRpb24sdGhpcy5ibGVuZFNyY0FscGhhPXQuYmxlbmRTcmNBbHBoYSx0aGlzLmJsZW5kRHN0QWxwaGE9dC5ibGVuZERzdEFscGhhLHRoaXMuYmxlbmRFcXVhdGlvbkFscGhhPXQuYmxlbmRFcXVhdGlvbkFscGhhLHRoaXMuZGVwdGhGdW5jPXQuZGVwdGhGdW5jLHRoaXMuZGVwdGhUZXN0PXQuZGVwdGhUZXN0LHRoaXMuZGVwdGhXcml0ZT10LmRlcHRoV3JpdGUsdGhpcy5zdGVuY2lsV3JpdGVNYXNrPXQuc3RlbmNpbFdyaXRlTWFzayx0aGlzLnN0ZW5jaWxGdW5jPXQuc3RlbmNpbEZ1bmMsdGhpcy5zdGVuY2lsUmVmPXQuc3RlbmNpbFJlZix0aGlzLnN0ZW5jaWxGdW5jTWFzaz10LnN0ZW5jaWxGdW5jTWFzayx0aGlzLnN0ZW5jaWxGYWlsPXQuc3RlbmNpbEZhaWwsdGhpcy5zdGVuY2lsWkZhaWw9dC5zdGVuY2lsWkZhaWwsdGhpcy5zdGVuY2lsWlBhc3M9dC5zdGVuY2lsWlBhc3MsdGhpcy5zdGVuY2lsV3JpdGU9dC5zdGVuY2lsV3JpdGU7Y29uc3QgZT10LmNsaXBwaW5nUGxhbmVzO2xldCBuPW51bGw7aWYobnVsbCE9PWUpe2NvbnN0IHQ9ZS5sZW5ndGg7bj1uZXcgQXJyYXkodCk7Zm9yKGxldCBpPTA7aSE9PXQ7KytpKW5baV09ZVtpXS5jbG9uZSgpfXJldHVybiB0aGlzLmNsaXBwaW5nUGxhbmVzPW4sdGhpcy5jbGlwSW50ZXJzZWN0aW9uPXQuY2xpcEludGVyc2VjdGlvbix0aGlzLmNsaXBTaGFkb3dzPXQuY2xpcFNoYWRvd3MsdGhpcy5zaGFkb3dTaWRlPXQuc2hhZG93U2lkZSx0aGlzLmNvbG9yV3JpdGU9dC5jb2xvcldyaXRlLHRoaXMucHJlY2lzaW9uPXQucHJlY2lzaW9uLHRoaXMucG9seWdvbk9mZnNldD10LnBvbHlnb25PZmZzZXQsdGhpcy5wb2x5Z29uT2Zmc2V0RmFjdG9yPXQucG9seWdvbk9mZnNldEZhY3Rvcix0aGlzLnBvbHlnb25PZmZzZXRVbml0cz10LnBvbHlnb25PZmZzZXRVbml0cyx0aGlzLmRpdGhlcmluZz10LmRpdGhlcmluZyx0aGlzLmFscGhhVGVzdD10LmFscGhhVGVzdCx0aGlzLnByZW11bHRpcGxpZWRBbHBoYT10LnByZW11bHRpcGxpZWRBbHBoYSx0aGlzLnZpc2libGU9dC52aXNpYmxlLHRoaXMudG9uZU1hcHBlZD10LnRvbmVNYXBwZWQsdGhpcy51c2VyRGF0YT1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQudXNlckRhdGEpKSx0aGlzfSxkaXNwb3NlOmZ1bmN0aW9uKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnenQucHJvdG90eXBlLCJuZWVkc1VwZGF0ZSIse3NldDpmdW5jdGlvbih0KXshMD09PXQmJnRoaXMudmVyc2lvbisrfX0pLChfenQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZ3p0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPV96dCxfenQucHJvdG90eXBlLmlzTWVzaEJhc2ljTWF0ZXJpYWw9ITAsX3p0LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHQpe3JldHVybiBnenQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hcD10Lm1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5zcGVjdWxhck1hcD10LnNwZWN1bGFyTWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmVudk1hcD10LmVudk1hcCx0aGlzLmNvbWJpbmU9dC5jb21iaW5lLHRoaXMucmVmbGVjdGl2aXR5PXQucmVmbGVjdGl2aXR5LHRoaXMucmVmcmFjdGlvblJhdGlvPXQucmVmcmFjdGlvblJhdGlvLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMud2lyZWZyYW1lTGluZWNhcD10LndpcmVmcmFtZUxpbmVjYXAsdGhpcy53aXJlZnJhbWVMaW5lam9pbj10LndpcmVmcmFtZUxpbmVqb2luLHRoaXMuc2tpbm5pbmc9dC5za2lubmluZyx0aGlzLm1vcnBoVGFyZ2V0cz10Lm1vcnBoVGFyZ2V0cyx0aGlzfTtjb25zdCB5enQ9bmV3IHFPdCx2enQ9bmV3IHpPdDtmdW5jdGlvbiBienQodCxlLG4pe2lmKEFycmF5LmlzQXJyYXkodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiBhcnJheSBzaG91bGQgYmUgYSBUeXBlZCBBcnJheS4iKTt0aGlzLm5hbWU9IiIsdGhpcy5hcnJheT10LHRoaXMuaXRlbVNpemU9ZSx0aGlzLmNvdW50PXZvaWQgMCE9PXQ/dC5sZW5ndGgvZTowLHRoaXMubm9ybWFsaXplZD0hMD09PW4sdGhpcy51c2FnZT1rT3QsdGhpcy51cGRhdGVSYW5nZT17b2Zmc2V0OjAsY291bnQ6LTF9LHRoaXMudmVyc2lvbj0wfWZ1bmN0aW9uIHh6dCh0LGUsbil7Ynp0LmNhbGwodGhpcyxuZXcgSW50OEFycmF5KHQpLGUsbil9ZnVuY3Rpb24gd3p0KHQsZSxuKXtienQuY2FsbCh0aGlzLG5ldyBVaW50OEFycmF5KHQpLGUsbil9ZnVuY3Rpb24gU3p0KHQsZSxuKXtienQuY2FsbCh0aGlzLG5ldyBVaW50OENsYW1wZWRBcnJheSh0KSxlLG4pfWZ1bmN0aW9uIE16dCh0LGUsbil7Ynp0LmNhbGwodGhpcyxuZXcgSW50MTZBcnJheSh0KSxlLG4pfWZ1bmN0aW9uIEV6dCh0LGUsbil7Ynp0LmNhbGwodGhpcyxuZXcgVWludDE2QXJyYXkodCksZSxuKX1mdW5jdGlvbiBUenQodCxlLG4pe2J6dC5jYWxsKHRoaXMsbmV3IEludDMyQXJyYXkodCksZSxuKX1mdW5jdGlvbiBDenQodCxlLG4pe2J6dC5jYWxsKHRoaXMsbmV3IFVpbnQzMkFycmF5KHQpLGUsbil9ZnVuY3Rpb24gQXp0KHQsZSxuKXtienQuY2FsbCh0aGlzLG5ldyBVaW50MTZBcnJheSh0KSxlLG4pfWZ1bmN0aW9uIGt6dCh0LGUsbil7Ynp0LmNhbGwodGhpcyxuZXcgRmxvYXQzMkFycmF5KHQpLGUsbil9ZnVuY3Rpb24gTHp0KHQsZSxuKXtienQuY2FsbCh0aGlzLG5ldyBGbG9hdDY0QXJyYXkodCksZSxuKX1mdW5jdGlvbiBQenQodCl7aWYoMD09PXQubGVuZ3RoKXJldHVybi0xLzA7bGV0IGU9dFswXTtmb3IobGV0IG49MSxpPXQubGVuZ3RoO248aTsrK24pdFtuXT5lJiYoZT10W25dKTtyZXR1cm4gZX1PYmplY3QuZGVmaW5lUHJvcGVydHkoYnp0LnByb3RvdHlwZSwibmVlZHNVcGRhdGUiLHtzZXQ6ZnVuY3Rpb24odCl7ITA9PT10JiZ0aGlzLnZlcnNpb24rK319KSxPYmplY3QuYXNzaWduKGJ6dC5wcm90b3R5cGUse2lzQnVmZmVyQXR0cmlidXRlOiEwLG9uVXBsb2FkQ2FsbGJhY2s6ZnVuY3Rpb24oKXt9LHNldFVzYWdlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnVzYWdlPXQsdGhpc30sY29weTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5uYW1lPXQubmFtZSx0aGlzLmFycmF5PW5ldyB0LmFycmF5LmNvbnN0cnVjdG9yKHQuYXJyYXkpLHRoaXMuaXRlbVNpemU9dC5pdGVtU2l6ZSx0aGlzLmNvdW50PXQuY291bnQsdGhpcy5ub3JtYWxpemVkPXQubm9ybWFsaXplZCx0aGlzLnVzYWdlPXQudXNhZ2UsdGhpc30sY29weUF0OmZ1bmN0aW9uKHQsZSxuKXt0Kj10aGlzLml0ZW1TaXplLG4qPWUuaXRlbVNpemU7Zm9yKGxldCBpPTAscj10aGlzLml0ZW1TaXplO2k8cjtpKyspdGhpcy5hcnJheVt0K2ldPWUuYXJyYXlbbitpXTtyZXR1cm4gdGhpc30sY29weUFycmF5OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmFycmF5LnNldCh0KSx0aGlzfSxjb3B5Q29sb3JzQXJyYXk6ZnVuY3Rpb24odCl7Y29uc3QgZT10aGlzLmFycmF5O2xldCBuPTA7Zm9yKGxldCBpPTAscj10Lmxlbmd0aDtpPHI7aSsrKXtsZXQgcj10W2ldO3ZvaWQgMD09PXImJihjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZS5jb3B5Q29sb3JzQXJyYXkoKTogY29sb3IgaXMgdW5kZWZpbmVkIixpKSxyPW5ldyBwenQpLGVbbisrXT1yLnIsZVtuKytdPXIuZyxlW24rK109ci5ifXJldHVybiB0aGlzfSxjb3B5VmVjdG9yMnNBcnJheTpmdW5jdGlvbih0KXtjb25zdCBlPXRoaXMuYXJyYXk7bGV0IG49MDtmb3IobGV0IGk9MCxyPXQubGVuZ3RoO2k8cjtpKyspe2xldCByPXRbaV07dm9pZCAwPT09ciYmKGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlWZWN0b3Iyc0FycmF5KCk6IHZlY3RvciBpcyB1bmRlZmluZWQiLGkpLHI9bmV3IHpPdCksZVtuKytdPXIueCxlW24rK109ci55fXJldHVybiB0aGlzfSxjb3B5VmVjdG9yM3NBcnJheTpmdW5jdGlvbih0KXtjb25zdCBlPXRoaXMuYXJyYXk7bGV0IG49MDtmb3IobGV0IGk9MCxyPXQubGVuZ3RoO2k8cjtpKyspe2xldCByPXRbaV07dm9pZCAwPT09ciYmKGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlWZWN0b3Izc0FycmF5KCk6IHZlY3RvciBpcyB1bmRlZmluZWQiLGkpLHI9bmV3IHFPdCksZVtuKytdPXIueCxlW24rK109ci55LGVbbisrXT1yLnp9cmV0dXJuIHRoaXN9LGNvcHlWZWN0b3I0c0FycmF5OmZ1bmN0aW9uKHQpe2NvbnN0IGU9dGhpcy5hcnJheTtsZXQgbj0wO2ZvcihsZXQgaT0wLHI9dC5sZW5ndGg7aTxyO2krKyl7bGV0IHI9dFtpXTt2b2lkIDA9PT1yJiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weVZlY3RvcjRzQXJyYXkoKTogdmVjdG9yIGlzIHVuZGVmaW5lZCIsaSkscj1uZXcgak90KSxlW24rK109ci54LGVbbisrXT1yLnksZVtuKytdPXIueixlW24rK109ci53fXJldHVybiB0aGlzfSxhcHBseU1hdHJpeDM6ZnVuY3Rpb24odCl7aWYoMj09PXRoaXMuaXRlbVNpemUpZm9yKGxldCBlPTAsbj10aGlzLmNvdW50O2U8bjtlKyspdnp0LmZyb21CdWZmZXJBdHRyaWJ1dGUodGhpcyxlKSx2enQuYXBwbHlNYXRyaXgzKHQpLHRoaXMuc2V0WFkoZSx2enQueCx2enQueSk7ZWxzZSBpZigzPT09dGhpcy5pdGVtU2l6ZSlmb3IobGV0IGU9MCxuPXRoaXMuY291bnQ7ZTxuO2UrKyl5enQuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0aGlzLGUpLHl6dC5hcHBseU1hdHJpeDModCksdGhpcy5zZXRYWVooZSx5enQueCx5enQueSx5enQueik7cmV0dXJuIHRoaXN9LGFwcGx5TWF0cml4NDpmdW5jdGlvbih0KXtmb3IobGV0IGU9MCxuPXRoaXMuY291bnQ7ZTxuO2UrKyl5enQueD10aGlzLmdldFgoZSkseXp0Lnk9dGhpcy5nZXRZKGUpLHl6dC56PXRoaXMuZ2V0WihlKSx5enQuYXBwbHlNYXRyaXg0KHQpLHRoaXMuc2V0WFlaKGUseXp0LngseXp0LnkseXp0LnopO3JldHVybiB0aGlzfSxhcHBseU5vcm1hbE1hdHJpeDpmdW5jdGlvbih0KXtmb3IobGV0IGU9MCxuPXRoaXMuY291bnQ7ZTxuO2UrKyl5enQueD10aGlzLmdldFgoZSkseXp0Lnk9dGhpcy5nZXRZKGUpLHl6dC56PXRoaXMuZ2V0WihlKSx5enQuYXBwbHlOb3JtYWxNYXRyaXgodCksdGhpcy5zZXRYWVooZSx5enQueCx5enQueSx5enQueik7cmV0dXJuIHRoaXN9LHRyYW5zZm9ybURpcmVjdGlvbjpmdW5jdGlvbih0KXtmb3IobGV0IGU9MCxuPXRoaXMuY291bnQ7ZTxuO2UrKyl5enQueD10aGlzLmdldFgoZSkseXp0Lnk9dGhpcy5nZXRZKGUpLHl6dC56PXRoaXMuZ2V0WihlKSx5enQudHJhbnNmb3JtRGlyZWN0aW9uKHQpLHRoaXMuc2V0WFlaKGUseXp0LngseXp0LnkseXp0LnopO3JldHVybiB0aGlzfSxzZXQ6ZnVuY3Rpb24odCxlPTApe3JldHVybiB0aGlzLmFycmF5LnNldCh0LGUpLHRoaXN9LGdldFg6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplXX0sc2V0WDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZV09ZSx0aGlzfSxnZXRZOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSsxXX0sc2V0WTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSsxXT1lLHRoaXN9LGdldFo6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzJdfSxzZXRaOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzJdPWUsdGhpc30sZ2V0VzpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemUrM119LHNldFc6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemUrM109ZSx0aGlzfSxzZXRYWTpmdW5jdGlvbih0LGUsbil7cmV0dXJuIHRoaXMuYXJyYXlbMCsodCo9dGhpcy5pdGVtU2l6ZSldPWUsdGhpcy5hcnJheVt0KzFdPW4sdGhpc30sc2V0WFlaOmZ1bmN0aW9uKHQsZSxuLGkpe3JldHVybiB0aGlzLmFycmF5WzArKHQqPXRoaXMuaXRlbVNpemUpXT1lLHRoaXMuYXJyYXlbdCsxXT1uLHRoaXMuYXJyYXlbdCsyXT1pLHRoaXN9LHNldFhZWlc6ZnVuY3Rpb24odCxlLG4saSxyKXtyZXR1cm4gdGhpcy5hcnJheVswKyh0Kj10aGlzLml0ZW1TaXplKV09ZSx0aGlzLmFycmF5W3QrMV09bix0aGlzLmFycmF5W3QrMl09aSx0aGlzLmFycmF5W3QrM109cix0aGlzfSxvblVwbG9hZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vblVwbG9hZENhbGxiYWNrPXQsdGhpc30sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5hcnJheSx0aGlzLml0ZW1TaXplKS5jb3B5KHRoaXMpfSx0b0pTT046ZnVuY3Rpb24oKXtyZXR1cm57aXRlbVNpemU6dGhpcy5pdGVtU2l6ZSx0eXBlOnRoaXMuYXJyYXkuY29uc3RydWN0b3IubmFtZSxhcnJheTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLmFycmF5KSxub3JtYWxpemVkOnRoaXMubm9ybWFsaXplZH19fSksKHh6dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShienQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9eHp0LCh3enQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYnp0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPXd6dCwoU3p0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGJ6dC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1TenQsKE16dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShienQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9TXp0LChFenQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYnp0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPUV6dCwoVHp0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGJ6dC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1UenQsKEN6dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShienQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9Q3p0LChBenQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYnp0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPUF6dCxBenQucHJvdG90eXBlLmlzRmxvYXQxNkJ1ZmZlckF0dHJpYnV0ZT0hMCwoa3p0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGJ6dC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1renQsKEx6dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShienQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9THp0O2NvbnN0IE56dD17SW50OEFycmF5OkludDhBcnJheSxVaW50OEFycmF5OlVpbnQ4QXJyYXksVWludDhDbGFtcGVkQXJyYXk6InVuZGVmaW5lZCIhPXR5cGVvZiBVaW50OENsYW1wZWRBcnJheT9VaW50OENsYW1wZWRBcnJheTpVaW50OEFycmF5LEludDE2QXJyYXk6SW50MTZBcnJheSxVaW50MTZBcnJheTpVaW50MTZBcnJheSxJbnQzMkFycmF5OkludDMyQXJyYXksVWludDMyQXJyYXk6VWludDMyQXJyYXksRmxvYXQzMkFycmF5OkZsb2F0MzJBcnJheSxGbG9hdDY0QXJyYXk6RmxvYXQ2NEFycmF5fTtmdW5jdGlvbiBJenQodCxlKXtyZXR1cm4gbmV3IE56dFt0XShlKX1sZXQgT3p0PTA7Y29uc3QgUnp0PW5ldyBiUnQsenp0PW5ldyBXUnQsRHp0PW5ldyBxT3QsQnp0PW5ldyAkT3QsSHp0PW5ldyAkT3QsRnp0PW5ldyBxT3Q7ZnVuY3Rpb24gVnp0KCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlkIix7dmFsdWU6T3p0Kyt9KSx0aGlzLnV1aWQ9Uk90LmdlbmVyYXRlVVVJRCgpLHRoaXMubmFtZT0iIix0aGlzLnR5cGU9IkJ1ZmZlckdlb21ldHJ5Iix0aGlzLmluZGV4PW51bGwsdGhpcy5hdHRyaWJ1dGVzPXt9LHRoaXMubW9ycGhBdHRyaWJ1dGVzPXt9LHRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU9ITEsdGhpcy5ncm91cHM9W10sdGhpcy5ib3VuZGluZ0JveD1udWxsLHRoaXMuYm91bmRpbmdTcGhlcmU9bnVsbCx0aGlzLmRyYXdSYW5nZT17c3RhcnQ6MCxjb3VudDoxLzB9LHRoaXMudXNlckRhdGE9e319Vnp0LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoTk90LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOlZ6dCxpc0J1ZmZlckdlb21ldHJ5OiEwLGdldEluZGV4OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5kZXh9LHNldEluZGV4OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmluZGV4PUFycmF5LmlzQXJyYXkodCk/bmV3KFB6dCh0KT42NTUzNT9DenQ6RXp0KSh0LDEpOnQsdGhpc30sZ2V0QXR0cmlidXRlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmF0dHJpYnV0ZXNbdF19LHNldEF0dHJpYnV0ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmF0dHJpYnV0ZXNbdF09ZSx0aGlzfSxkZWxldGVBdHRyaWJ1dGU6ZnVuY3Rpb24odCl7cmV0dXJuIGRlbGV0ZSB0aGlzLmF0dHJpYnV0ZXNbdF0sdGhpc30saGFzQXR0cmlidXRlOmZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDAhPT10aGlzLmF0dHJpYnV0ZXNbdF19LGFkZEdyb3VwOmZ1bmN0aW9uKHQsZSxuPTApe3RoaXMuZ3JvdXBzLnB1c2goe3N0YXJ0OnQsY291bnQ6ZSxtYXRlcmlhbEluZGV4Om59KX0sY2xlYXJHcm91cHM6ZnVuY3Rpb24oKXt0aGlzLmdyb3Vwcz1bXX0sc2V0RHJhd1JhbmdlOmZ1bmN0aW9uKHQsZSl7dGhpcy5kcmF3UmFuZ2Uuc3RhcnQ9dCx0aGlzLmRyYXdSYW5nZS5jb3VudD1lfSxhcHBseU1hdHJpeDQ6ZnVuY3Rpb24odCl7Y29uc3QgZT10aGlzLmF0dHJpYnV0ZXMucG9zaXRpb247dm9pZCAwIT09ZSYmKGUuYXBwbHlNYXRyaXg0KHQpLGUubmVlZHNVcGRhdGU9ITApO2NvbnN0IG49dGhpcy5hdHRyaWJ1dGVzLm5vcm1hbDtpZih2b2lkIDAhPT1uKXtjb25zdCBlPShuZXcgRE90KS5nZXROb3JtYWxNYXRyaXgodCk7bi5hcHBseU5vcm1hbE1hdHJpeChlKSxuLm5lZWRzVXBkYXRlPSEwfWNvbnN0IGk9dGhpcy5hdHRyaWJ1dGVzLnRhbmdlbnQ7cmV0dXJuIHZvaWQgMCE9PWkmJihpLnRyYW5zZm9ybURpcmVjdGlvbih0KSxpLm5lZWRzVXBkYXRlPSEwKSxudWxsIT09dGhpcy5ib3VuZGluZ0JveCYmdGhpcy5jb21wdXRlQm91bmRpbmdCb3goKSxudWxsIT09dGhpcy5ib3VuZGluZ1NwaGVyZSYmdGhpcy5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSx0aGlzfSxyb3RhdGVYOmZ1bmN0aW9uKHQpe3JldHVybiBSenQubWFrZVJvdGF0aW9uWCh0KSx0aGlzLmFwcGx5TWF0cml4NChSenQpLHRoaXN9LHJvdGF0ZVk6ZnVuY3Rpb24odCl7cmV0dXJuIFJ6dC5tYWtlUm90YXRpb25ZKHQpLHRoaXMuYXBwbHlNYXRyaXg0KFJ6dCksdGhpc30scm90YXRlWjpmdW5jdGlvbih0KXtyZXR1cm4gUnp0Lm1ha2VSb3RhdGlvbloodCksdGhpcy5hcHBseU1hdHJpeDQoUnp0KSx0aGlzfSx0cmFuc2xhdGU6ZnVuY3Rpb24odCxlLG4pe3JldHVybiBSenQubWFrZVRyYW5zbGF0aW9uKHQsZSxuKSx0aGlzLmFwcGx5TWF0cml4NChSenQpLHRoaXN9LHNjYWxlOmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gUnp0Lm1ha2VTY2FsZSh0LGUsbiksdGhpcy5hcHBseU1hdHJpeDQoUnp0KSx0aGlzfSxsb29rQXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHp6dC5sb29rQXQodCksenp0LnVwZGF0ZU1hdHJpeCgpLHRoaXMuYXBwbHlNYXRyaXg0KHp6dC5tYXRyaXgpLHRoaXN9LGNlbnRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbXB1dGVCb3VuZGluZ0JveCgpLHRoaXMuYm91bmRpbmdCb3guZ2V0Q2VudGVyKER6dCkubmVnYXRlKCksdGhpcy50cmFuc2xhdGUoRHp0LngsRHp0LnksRHp0LnopLHRoaXN9LHNldEZyb21Qb2ludHM6ZnVuY3Rpb24odCl7Y29uc3QgZT1bXTtmb3IobGV0IG49MCxpPXQubGVuZ3RoO248aTtuKyspe2NvbnN0IGk9dFtuXTtlLnB1c2goaS54LGkueSxpLnp8fDApfXJldHVybiB0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBrenQoZSwzKSksdGhpc30sY29tcHV0ZUJvdW5kaW5nQm94OmZ1bmN0aW9uKCl7bnVsbD09PXRoaXMuYm91bmRpbmdCb3gmJih0aGlzLmJvdW5kaW5nQm94PW5ldyAkT3QpO2NvbnN0IHQ9dGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uLGU9dGhpcy5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb247aWYodCYmdC5pc0dMQnVmZmVyQXR0cmlidXRlKXJldHVybiBjb25zb2xlLmVycm9yKCdUSFJFRS5CdWZmZXJHZW9tZXRyeS5jb21wdXRlQm91bmRpbmdCb3goKTogR0xCdWZmZXJBdHRyaWJ1dGUgcmVxdWlyZXMgYSBtYW51YWwgYm91bmRpbmcgYm94LiBBbHRlcm5hdGl2ZWx5IHNldCAibWVzaC5mcnVzdHVtQ3VsbGVkIiB0byAiZmFsc2UiLicsdGhpcyksdm9pZCB0aGlzLmJvdW5kaW5nQm94LnNldChuZXcgcU90KC0xLzAsLTEvMCwtMS8wKSxuZXcgcU90KDEvMCwxLzAsMS8wKSk7aWYodm9pZCAwIT09dCl7aWYodGhpcy5ib3VuZGluZ0JveC5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKHQpLGUpZm9yKGxldCB0PTAsbj1lLmxlbmd0aDt0PG47dCsrKUJ6dC5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKGVbdF0pLHRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU/KEZ6dC5hZGRWZWN0b3JzKHRoaXMuYm91bmRpbmdCb3gubWluLEJ6dC5taW4pLHRoaXMuYm91bmRpbmdCb3guZXhwYW5kQnlQb2ludChGenQpLEZ6dC5hZGRWZWN0b3JzKHRoaXMuYm91bmRpbmdCb3gubWF4LEJ6dC5tYXgpLHRoaXMuYm91bmRpbmdCb3guZXhwYW5kQnlQb2ludChGenQpKToodGhpcy5ib3VuZGluZ0JveC5leHBhbmRCeVBvaW50KEJ6dC5taW4pLHRoaXMuYm91bmRpbmdCb3guZXhwYW5kQnlQb2ludChCenQubWF4KSl9ZWxzZSB0aGlzLmJvdW5kaW5nQm94Lm1ha2VFbXB0eSgpOyhpc05hTih0aGlzLmJvdW5kaW5nQm94Lm1pbi54KXx8aXNOYU4odGhpcy5ib3VuZGluZ0JveC5taW4ueSl8fGlzTmFOKHRoaXMuYm91bmRpbmdCb3gubWluLnopKSYmY29uc29sZS5lcnJvcignVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nQm94KCk6IENvbXB1dGVkIG1pbi9tYXggaGF2ZSBOYU4gdmFsdWVzLiBUaGUgInBvc2l0aW9uIiBhdHRyaWJ1dGUgaXMgbGlrZWx5IHRvIGhhdmUgTmFOIHZhbHVlcy4nLHRoaXMpfSxjb21wdXRlQm91bmRpbmdTcGhlcmU6ZnVuY3Rpb24oKXtudWxsPT09dGhpcy5ib3VuZGluZ1NwaGVyZSYmKHRoaXMuYm91bmRpbmdTcGhlcmU9bmV3IGhSdCk7Y29uc3QgdD10aGlzLmF0dHJpYnV0ZXMucG9zaXRpb24sZT10aGlzLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbjtpZih0JiZ0LmlzR0xCdWZmZXJBdHRyaWJ1dGUpcmV0dXJuIGNvbnNvbGUuZXJyb3IoJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpOiBHTEJ1ZmZlckF0dHJpYnV0ZSByZXF1aXJlcyBhIG1hbnVhbCBib3VuZGluZyBzcGhlcmUuIEFsdGVybmF0aXZlbHkgc2V0ICJtZXNoLmZydXN0dW1DdWxsZWQiIHRvICJmYWxzZSIuJyx0aGlzKSx2b2lkIHRoaXMuYm91bmRpbmdTcGhlcmUuc2V0KG5ldyBxT3QsMS8wKTtpZih0KXtjb25zdCBuPXRoaXMuYm91bmRpbmdTcGhlcmUuY2VudGVyO2lmKEJ6dC5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKHQpLGUpZm9yKGxldCB0PTAsbj1lLmxlbmd0aDt0PG47dCsrKUh6dC5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKGVbdF0pLHRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU/KEZ6dC5hZGRWZWN0b3JzKEJ6dC5taW4sSHp0Lm1pbiksQnp0LmV4cGFuZEJ5UG9pbnQoRnp0KSxGenQuYWRkVmVjdG9ycyhCenQubWF4LEh6dC5tYXgpLEJ6dC5leHBhbmRCeVBvaW50KEZ6dCkpOihCenQuZXhwYW5kQnlQb2ludChIenQubWluKSxCenQuZXhwYW5kQnlQb2ludChIenQubWF4KSk7Qnp0LmdldENlbnRlcihuKTtsZXQgaT0wO2ZvcihsZXQgZT0wLHI9dC5jb3VudDtlPHI7ZSsrKUZ6dC5mcm9tQnVmZmVyQXR0cmlidXRlKHQsZSksaT1NYXRoLm1heChpLG4uZGlzdGFuY2VUb1NxdWFyZWQoRnp0KSk7aWYoZSlmb3IobGV0IHI9MCxvPWUubGVuZ3RoO3I8bztyKyspe2NvbnN0IG89ZVtyXSxhPXRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU7Zm9yKGxldCBlPTAscj1vLmNvdW50O2U8cjtlKyspRnp0LmZyb21CdWZmZXJBdHRyaWJ1dGUobyxlKSxhJiYoRHp0LmZyb21CdWZmZXJBdHRyaWJ1dGUodCxlKSxGenQuYWRkKER6dCkpLGk9TWF0aC5tYXgoaSxuLmRpc3RhbmNlVG9TcXVhcmVkKEZ6dCkpfXRoaXMuYm91bmRpbmdTcGhlcmUucmFkaXVzPU1hdGguc3FydChpKSxpc05hTih0aGlzLmJvdW5kaW5nU3BoZXJlLnJhZGl1cykmJmNvbnNvbGUuZXJyb3IoJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpOiBDb21wdXRlZCByYWRpdXMgaXMgTmFOLiBUaGUgInBvc2l0aW9uIiBhdHRyaWJ1dGUgaXMgbGlrZWx5IHRvIGhhdmUgTmFOIHZhbHVlcy4nLHRoaXMpfX0sY29tcHV0ZUZhY2VOb3JtYWxzOmZ1bmN0aW9uKCl7fSxjb21wdXRlVGFuZ2VudHM6ZnVuY3Rpb24oKXtjb25zdCB0PXRoaXMuaW5kZXgsZT10aGlzLmF0dHJpYnV0ZXM7aWYobnVsbD09PXR8fHZvaWQgMD09PWUucG9zaXRpb258fHZvaWQgMD09PWUubm9ybWFsfHx2b2lkIDA9PT1lLnV2KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuY29tcHV0ZVRhbmdlbnRzKCkgZmFpbGVkLiBNaXNzaW5nIHJlcXVpcmVkIGF0dHJpYnV0ZXMgKGluZGV4LCBwb3NpdGlvbiwgbm9ybWFsIG9yIHV2KSIpO2NvbnN0IG49dC5hcnJheSxpPWUucG9zaXRpb24uYXJyYXkscj1lLm5vcm1hbC5hcnJheSxvPWUudXYuYXJyYXksYT1pLmxlbmd0aC8zO3ZvaWQgMD09PWUudGFuZ2VudCYmdGhpcy5zZXRBdHRyaWJ1dGUoInRhbmdlbnQiLG5ldyBienQobmV3IEZsb2F0MzJBcnJheSg0KmEpLDQpKTtjb25zdCBzPWUudGFuZ2VudC5hcnJheSxsPVtdLGM9W107Zm9yKGxldCB0PTA7dDxhO3QrKylsW3RdPW5ldyBxT3QsY1t0XT1uZXcgcU90O2NvbnN0IHU9bmV3IHFPdCxoPW5ldyBxT3QsZD1uZXcgcU90LHA9bmV3IHpPdCxmPW5ldyB6T3QsbT1uZXcgek90LGc9bmV3IHFPdCxfPW5ldyBxT3Q7ZnVuY3Rpb24geSh0LGUsbil7dS5mcm9tQXJyYXkoaSwzKnQpLGguZnJvbUFycmF5KGksMyplKSxkLmZyb21BcnJheShpLDMqbikscC5mcm9tQXJyYXkobywyKnQpLGYuZnJvbUFycmF5KG8sMiplKSxtLmZyb21BcnJheShvLDIqbiksaC5zdWIodSksZC5zdWIodSksZi5zdWIocCksbS5zdWIocCk7Y29uc3Qgcj0xLyhmLngqbS55LW0ueCpmLnkpO2lzRmluaXRlKHIpJiYoZy5jb3B5KGgpLm11bHRpcGx5U2NhbGFyKG0ueSkuYWRkU2NhbGVkVmVjdG9yKGQsLWYueSkubXVsdGlwbHlTY2FsYXIociksXy5jb3B5KGQpLm11bHRpcGx5U2NhbGFyKGYueCkuYWRkU2NhbGVkVmVjdG9yKGgsLW0ueCkubXVsdGlwbHlTY2FsYXIociksbFt0XS5hZGQoZyksbFtlXS5hZGQoZyksbFtuXS5hZGQoZyksY1t0XS5hZGQoXyksY1tlXS5hZGQoXyksY1tuXS5hZGQoXykpfWxldCB2PXRoaXMuZ3JvdXBzOzA9PT12Lmxlbmd0aCYmKHY9W3tzdGFydDowLGNvdW50Om4ubGVuZ3RofV0pO2ZvcihsZXQgdD0wLGU9di5sZW5ndGg7dDxlOysrdCl7Y29uc3QgZT12W3RdLGk9ZS5zdGFydDtmb3IobGV0IHQ9aSxyPWkrZS5jb3VudDt0PHI7dCs9Myl5KG5bdCswXSxuW3QrMV0sblt0KzJdKX1jb25zdCBiPW5ldyBxT3QseD1uZXcgcU90LHc9bmV3IHFPdCxTPW5ldyBxT3Q7ZnVuY3Rpb24gTSh0KXt3LmZyb21BcnJheShyLDMqdCksUy5jb3B5KHcpO2NvbnN0IGU9bFt0XTtiLmNvcHkoZSksYi5zdWIody5tdWx0aXBseVNjYWxhcih3LmRvdChlKSkpLm5vcm1hbGl6ZSgpLHguY3Jvc3NWZWN0b3JzKFMsZSk7Y29uc3Qgbj14LmRvdChjW3RdKTwwPy0xOjE7c1s0KnRdPWIueCxzWzQqdCsxXT1iLnksc1s0KnQrMl09Yi56LHNbNCp0KzNdPW59Zm9yKGxldCB0PTAsZT12Lmxlbmd0aDt0PGU7Kyt0KXtjb25zdCBlPXZbdF0saT1lLnN0YXJ0O2ZvcihsZXQgdD1pLHI9aStlLmNvdW50O3Q8cjt0Kz0zKU0oblt0KzBdKSxNKG5bdCsxXSksTShuW3QrMl0pfX0sY29tcHV0ZVZlcnRleE5vcm1hbHM6ZnVuY3Rpb24oKXtjb25zdCB0PXRoaXMuaW5kZXgsZT10aGlzLmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKTtpZih2b2lkIDAhPT1lKXtsZXQgbj10aGlzLmdldEF0dHJpYnV0ZSgibm9ybWFsIik7aWYodm9pZCAwPT09biluPW5ldyBienQobmV3IEZsb2F0MzJBcnJheSgzKmUuY291bnQpLDMpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG4pO2Vsc2UgZm9yKGxldCB0PTAsZT1uLmNvdW50O3Q8ZTt0Kyspbi5zZXRYWVoodCwwLDAsMCk7Y29uc3QgaT1uZXcgcU90LHI9bmV3IHFPdCxvPW5ldyBxT3QsYT1uZXcgcU90LHM9bmV3IHFPdCxsPW5ldyBxT3QsYz1uZXcgcU90LHU9bmV3IHFPdDtpZih0KWZvcihsZXQgaD0wLGQ9dC5jb3VudDtoPGQ7aCs9Myl7Y29uc3QgZD10LmdldFgoaCswKSxwPXQuZ2V0WChoKzEpLGY9dC5nZXRYKGgrMik7aS5mcm9tQnVmZmVyQXR0cmlidXRlKGUsZCksci5mcm9tQnVmZmVyQXR0cmlidXRlKGUscCksby5mcm9tQnVmZmVyQXR0cmlidXRlKGUsZiksYy5zdWJWZWN0b3JzKG8sciksdS5zdWJWZWN0b3JzKGksciksYy5jcm9zcyh1KSxhLmZyb21CdWZmZXJBdHRyaWJ1dGUobixkKSxzLmZyb21CdWZmZXJBdHRyaWJ1dGUobixwKSxsLmZyb21CdWZmZXJBdHRyaWJ1dGUobixmKSxhLmFkZChjKSxzLmFkZChjKSxsLmFkZChjKSxuLnNldFhZWihkLGEueCxhLnksYS56KSxuLnNldFhZWihwLHMueCxzLnkscy56KSxuLnNldFhZWihmLGwueCxsLnksbC56KX1lbHNlIGZvcihsZXQgdD0wLGE9ZS5jb3VudDt0PGE7dCs9MylpLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSx0KzApLHIuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLHQrMSksby5mcm9tQnVmZmVyQXR0cmlidXRlKGUsdCsyKSxjLnN1YlZlY3RvcnMobyxyKSx1LnN1YlZlY3RvcnMoaSxyKSxjLmNyb3NzKHUpLG4uc2V0WFlaKHQrMCxjLngsYy55LGMueiksbi5zZXRYWVoodCsxLGMueCxjLnksYy56KSxuLnNldFhZWih0KzIsYy54LGMueSxjLnopO3RoaXMubm9ybWFsaXplTm9ybWFscygpLG4ubmVlZHNVcGRhdGU9ITB9fSxtZXJnZTpmdW5jdGlvbih0LGUpe2lmKCF0fHwhdC5pc0J1ZmZlckdlb21ldHJ5KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLkJ1ZmZlckdlb21ldHJ5Lm1lcmdlKCk6IGdlb21ldHJ5IG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5CdWZmZXJHZW9tZXRyeS4iLHQpO3ZvaWQgMD09PWUmJihlPTAsY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeS5tZXJnZSgpOiBPdmVyd3JpdGluZyBvcmlnaW5hbCBnZW9tZXRyeSwgc3RhcnRpbmcgYXQgb2Zmc2V0PTAuIFVzZSBCdWZmZXJHZW9tZXRyeVV0aWxzLm1lcmdlQnVmZmVyR2VvbWV0cmllcygpIGZvciBsb3NzbGVzcyBtZXJnZS4iKSk7Y29uc3Qgbj10aGlzLmF0dHJpYnV0ZXM7Zm9yKGNvbnN0IGkgaW4gbil7aWYodm9pZCAwPT09dC5hdHRyaWJ1dGVzW2ldKWNvbnRpbnVlO2NvbnN0IHI9bltpXS5hcnJheSxvPXQuYXR0cmlidXRlc1tpXSxhPW8uYXJyYXkscz1vLml0ZW1TaXplKmUsbD1NYXRoLm1pbihhLmxlbmd0aCxyLmxlbmd0aC1zKTtmb3IobGV0IHQ9MCxlPXM7dDxsO3QrKyxlKyspcltlXT1hW3RdfXJldHVybiB0aGlzfSxub3JtYWxpemVOb3JtYWxzOmZ1bmN0aW9uKCl7Y29uc3QgdD10aGlzLmF0dHJpYnV0ZXMubm9ybWFsO2ZvcihsZXQgZT0wLG49dC5jb3VudDtlPG47ZSsrKUZ6dC5mcm9tQnVmZmVyQXR0cmlidXRlKHQsZSksRnp0Lm5vcm1hbGl6ZSgpLHQuc2V0WFlaKGUsRnp0LngsRnp0LnksRnp0LnopfSx0b05vbkluZGV4ZWQ6ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7Y29uc3Qgbj10LmFycmF5LGk9dC5pdGVtU2l6ZSxyPXQubm9ybWFsaXplZCxvPW5ldyBuLmNvbnN0cnVjdG9yKGUubGVuZ3RoKmkpO2xldCBhPTAscz0wO2ZvcihsZXQgdD0wLHI9ZS5sZW5ndGg7dDxyO3QrKyl7YT1lW3RdKmk7Zm9yKGxldCB0PTA7dDxpO3QrKylvW3MrK109blthKytdfXJldHVybiBuZXcgYnp0KG8saSxyKX1pZihudWxsPT09dGhpcy5pbmRleClyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeS50b05vbkluZGV4ZWQoKTogQnVmZmVyR2VvbWV0cnkgaXMgYWxyZWFkeSBub24taW5kZXhlZC4iKSx0aGlzO2NvbnN0IGU9bmV3IFZ6dCxuPXRoaXMuaW5kZXguYXJyYXksaT10aGlzLmF0dHJpYnV0ZXM7Zm9yKGNvbnN0IHIgaW4gaSl7Y29uc3Qgbz10KGlbcl0sbik7ZS5zZXRBdHRyaWJ1dGUocixvKX1jb25zdCByPXRoaXMubW9ycGhBdHRyaWJ1dGVzO2Zvcihjb25zdCBpIGluIHIpe2NvbnN0IG89W10sYT1yW2ldO2ZvcihsZXQgZT0wLGk9YS5sZW5ndGg7ZTxpO2UrKyl7Y29uc3QgaT10KGFbZV0sbik7by5wdXNoKGkpfWUubW9ycGhBdHRyaWJ1dGVzW2ldPW99ZS5tb3JwaFRhcmdldHNSZWxhdGl2ZT10aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlO2NvbnN0IG89dGhpcy5ncm91cHM7Zm9yKGxldCB0PTAsbj1vLmxlbmd0aDt0PG47dCsrKXtjb25zdCBuPW9bdF07ZS5hZGRHcm91cChuLnN0YXJ0LG4uY291bnQsbi5tYXRlcmlhbEluZGV4KX1yZXR1cm4gZX0sdG9KU09OOmZ1bmN0aW9uKCl7Y29uc3QgdD17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6IkJ1ZmZlckdlb21ldHJ5IixnZW5lcmF0b3I6IkJ1ZmZlckdlb21ldHJ5LnRvSlNPTiJ9fTtpZih0LnV1aWQ9dGhpcy51dWlkLHQudHlwZT10aGlzLnR5cGUsIiIhPT10aGlzLm5hbWUmJih0Lm5hbWU9dGhpcy5uYW1lKSxPYmplY3Qua2V5cyh0aGlzLnVzZXJEYXRhKS5sZW5ndGg+MCYmKHQudXNlckRhdGE9dGhpcy51c2VyRGF0YSksdm9pZCAwIT09dGhpcy5wYXJhbWV0ZXJzKXtjb25zdCBlPXRoaXMucGFyYW1ldGVycztmb3IoY29uc3QgbiBpbiBlKXZvaWQgMCE9PWVbbl0mJih0W25dPWVbbl0pO3JldHVybiB0fXQuZGF0YT17YXR0cmlidXRlczp7fX07Y29uc3QgZT10aGlzLmluZGV4O251bGwhPT1lJiYodC5kYXRhLmluZGV4PXt0eXBlOmUuYXJyYXkuY29uc3RydWN0b3IubmFtZSxhcnJheTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlLmFycmF5KX0pO2NvbnN0IG49dGhpcy5hdHRyaWJ1dGVzO2Zvcihjb25zdCBlIGluIG4pe2NvbnN0IGk9bltlXSxyPWkudG9KU09OKHQuZGF0YSk7IiIhPT1pLm5hbWUmJihyLm5hbWU9aS5uYW1lKSx0LmRhdGEuYXR0cmlidXRlc1tlXT1yfWNvbnN0IGk9e307bGV0IHI9ITE7Zm9yKGNvbnN0IGUgaW4gdGhpcy5tb3JwaEF0dHJpYnV0ZXMpe2NvbnN0IG49dGhpcy5tb3JwaEF0dHJpYnV0ZXNbZV0sbz1bXTtmb3IobGV0IGU9MCxpPW4ubGVuZ3RoO2U8aTtlKyspe2NvbnN0IGk9bltlXSxyPWkudG9KU09OKHQuZGF0YSk7IiIhPT1pLm5hbWUmJihyLm5hbWU9aS5uYW1lKSxvLnB1c2gocil9by5sZW5ndGg+MCYmKGlbZV09byxyPSEwKX1yJiYodC5kYXRhLm1vcnBoQXR0cmlidXRlcz1pLHQuZGF0YS5tb3JwaFRhcmdldHNSZWxhdGl2ZT10aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlKTtjb25zdCBvPXRoaXMuZ3JvdXBzO28ubGVuZ3RoPjAmJih0LmRhdGEuZ3JvdXBzPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkobykpKTtjb25zdCBhPXRoaXMuYm91bmRpbmdTcGhlcmU7cmV0dXJuIG51bGwhPT1hJiYodC5kYXRhLmJvdW5kaW5nU3BoZXJlPXtjZW50ZXI6YS5jZW50ZXIudG9BcnJheSgpLHJhZGl1czphLnJhZGl1c30pLHR9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBWenQpLmNvcHkodGhpcyl9LGNvcHk6ZnVuY3Rpb24odCl7dGhpcy5pbmRleD1udWxsLHRoaXMuYXR0cmlidXRlcz17fSx0aGlzLm1vcnBoQXR0cmlidXRlcz17fSx0aGlzLmdyb3Vwcz1bXSx0aGlzLmJvdW5kaW5nQm94PW51bGwsdGhpcy5ib3VuZGluZ1NwaGVyZT1udWxsO2NvbnN0IGU9e307dGhpcy5uYW1lPXQubmFtZTtjb25zdCBuPXQuaW5kZXg7bnVsbCE9PW4mJnRoaXMuc2V0SW5kZXgobi5jbG9uZShlKSk7Y29uc3QgaT10LmF0dHJpYnV0ZXM7Zm9yKGNvbnN0IHQgaW4gaSl0aGlzLnNldEF0dHJpYnV0ZSh0LGlbdF0uY2xvbmUoZSkpO2NvbnN0IHI9dC5tb3JwaEF0dHJpYnV0ZXM7Zm9yKGNvbnN0IHQgaW4gcil7Y29uc3Qgbj1bXSxpPXJbdF07Zm9yKGxldCB0PTAscj1pLmxlbmd0aDt0PHI7dCsrKW4ucHVzaChpW3RdLmNsb25lKGUpKTt0aGlzLm1vcnBoQXR0cmlidXRlc1t0XT1ufXRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU9dC5tb3JwaFRhcmdldHNSZWxhdGl2ZTtjb25zdCBvPXQuZ3JvdXBzO2ZvcihsZXQgdD0wLGU9by5sZW5ndGg7dDxlO3QrKyl7Y29uc3QgZT1vW3RdO3RoaXMuYWRkR3JvdXAoZS5zdGFydCxlLmNvdW50LGUubWF0ZXJpYWxJbmRleCl9Y29uc3QgYT10LmJvdW5kaW5nQm94O251bGwhPT1hJiYodGhpcy5ib3VuZGluZ0JveD1hLmNsb25lKCkpO2NvbnN0IHM9dC5ib3VuZGluZ1NwaGVyZTtyZXR1cm4gbnVsbCE9PXMmJih0aGlzLmJvdW5kaW5nU3BoZXJlPXMuY2xvbmUoKSksdGhpcy5kcmF3UmFuZ2Uuc3RhcnQ9dC5kcmF3UmFuZ2Uuc3RhcnQsdGhpcy5kcmF3UmFuZ2UuY291bnQ9dC5kcmF3UmFuZ2UuY291bnQsdGhpcy51c2VyRGF0YT10LnVzZXJEYXRhLHRoaXN9LGRpc3Bvc2U6ZnVuY3Rpb24oKXt0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc3Bvc2UifSl9fSk7Y29uc3QgVXp0PW5ldyBiUnQsanp0PW5ldyB2UnQsR3p0PW5ldyBoUnQsV3p0PW5ldyBxT3QscXp0PW5ldyBxT3QsWXp0PW5ldyBxT3QsWHp0PW5ldyBxT3QsJHp0PW5ldyBxT3QsS3p0PW5ldyBxT3QsWnp0PW5ldyBxT3QsSnp0PW5ldyBxT3QsUXp0PW5ldyBxT3QsdER0PW5ldyB6T3QsZUR0PW5ldyB6T3QsbkR0PW5ldyB6T3QsaUR0PW5ldyBxT3QsckR0PW5ldyBxT3Q7ZnVuY3Rpb24gb0R0KHQ9bmV3IFZ6dCxlPW5ldyBfenQpe1dSdC5jYWxsKHRoaXMpLHRoaXMudHlwZT0iTWVzaCIsdGhpcy5nZW9tZXRyeT10LHRoaXMubWF0ZXJpYWw9ZSx0aGlzLnVwZGF0ZU1vcnBoVGFyZ2V0cygpfWZ1bmN0aW9uIGFEdCh0LGUsbixpLHIsbyxhLHMsbCxjLHUsaCl7V3p0LmZyb21CdWZmZXJBdHRyaWJ1dGUocixjKSxxenQuZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLHUpLFl6dC5mcm9tQnVmZmVyQXR0cmlidXRlKHIsaCk7Y29uc3QgZD10Lm1vcnBoVGFyZ2V0SW5mbHVlbmNlcztpZihlLm1vcnBoVGFyZ2V0cyYmbyYmZCl7Wnp0LnNldCgwLDAsMCksSnp0LnNldCgwLDAsMCksUXp0LnNldCgwLDAsMCk7Zm9yKGxldCB0PTAsZT1vLmxlbmd0aDt0PGU7dCsrKXtjb25zdCBlPWRbdF0sbj1vW3RdOzAhPT1lJiYoWHp0LmZyb21CdWZmZXJBdHRyaWJ1dGUobixjKSwkenQuZnJvbUJ1ZmZlckF0dHJpYnV0ZShuLHUpLEt6dC5mcm9tQnVmZmVyQXR0cmlidXRlKG4saCksYT8oWnp0LmFkZFNjYWxlZFZlY3RvcihYenQsZSksSnp0LmFkZFNjYWxlZFZlY3RvcigkenQsZSksUXp0LmFkZFNjYWxlZFZlY3RvcihLenQsZSkpOihaenQuYWRkU2NhbGVkVmVjdG9yKFh6dC5zdWIoV3p0KSxlKSxKenQuYWRkU2NhbGVkVmVjdG9yKCR6dC5zdWIocXp0KSxlKSxRenQuYWRkU2NhbGVkVmVjdG9yKEt6dC5zdWIoWXp0KSxlKSkpfVd6dC5hZGQoWnp0KSxxenQuYWRkKEp6dCksWXp0LmFkZChRenQpfXQuaXNTa2lubmVkTWVzaCYmKHQuYm9uZVRyYW5zZm9ybShjLFd6dCksdC5ib25lVHJhbnNmb3JtKHUscXp0KSx0LmJvbmVUcmFuc2Zvcm0oaCxZenQpKTtjb25zdCBwPShmdW5jdGlvbiBmKHQsZSxuLGkscixvLGEscyl7bGV0IGw7aWYobD0xPT09ZS5zaWRlP2kuaW50ZXJzZWN0VHJpYW5nbGUoYSxvLHIsITAscyk6aS5pbnRlcnNlY3RUcmlhbmdsZShyLG8sYSwyIT09ZS5zaWRlLHMpLG51bGw9PT1sKXJldHVybiBudWxsO3JEdC5jb3B5KHMpLHJEdC5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZCk7Y29uc3QgYz1uLnJheS5vcmlnaW4uZGlzdGFuY2VUbyhyRHQpO3JldHVybiBjPG4ubmVhcnx8Yz5uLmZhcj9udWxsOntkaXN0YW5jZTpjLHBvaW50OnJEdC5jbG9uZSgpLG9iamVjdDp0fX0pKHQsZSxuLGksV3p0LHF6dCxZenQsaUR0KTtpZihwKXtzJiYodER0LmZyb21CdWZmZXJBdHRyaWJ1dGUocyxjKSxlRHQuZnJvbUJ1ZmZlckF0dHJpYnV0ZShzLHUpLG5EdC5mcm9tQnVmZmVyQXR0cmlidXRlKHMsaCkscC51dj1henQuZ2V0VVYoaUR0LFd6dCxxenQsWXp0LHREdCxlRHQsbkR0LG5ldyB6T3QpKSxsJiYodER0LmZyb21CdWZmZXJBdHRyaWJ1dGUobCxjKSxlRHQuZnJvbUJ1ZmZlckF0dHJpYnV0ZShsLHUpLG5EdC5mcm9tQnVmZmVyQXR0cmlidXRlKGwsaCkscC51djI9YXp0LmdldFVWKGlEdCxXenQscXp0LFl6dCx0RHQsZUR0LG5EdCxuZXcgek90KSk7Y29uc3QgdD1uZXcgZnp0KGMsdSxoKTthenQuZ2V0Tm9ybWFsKFd6dCxxenQsWXp0LHQubm9ybWFsKSxwLmZhY2U9dH1yZXR1cm4gcH1vRHQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShXUnQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6b0R0LGlzTWVzaDohMCxjb3B5OmZ1bmN0aW9uKHQpe3JldHVybiBXUnQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHZvaWQgMCE9PXQubW9ycGhUYXJnZXRJbmZsdWVuY2VzJiYodGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXM9dC5tb3JwaFRhcmdldEluZmx1ZW5jZXMuc2xpY2UoKSksdm9pZCAwIT09dC5tb3JwaFRhcmdldERpY3Rpb25hcnkmJih0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeT1PYmplY3QuYXNzaWduKHt9LHQubW9ycGhUYXJnZXREaWN0aW9uYXJ5KSksdGhpcy5tYXRlcmlhbD10Lm1hdGVyaWFsLHRoaXMuZ2VvbWV0cnk9dC5nZW9tZXRyeSx0aGlzfSx1cGRhdGVNb3JwaFRhcmdldHM6ZnVuY3Rpb24oKXtjb25zdCB0PXRoaXMuZ2VvbWV0cnk7aWYodC5pc0J1ZmZlckdlb21ldHJ5KXtjb25zdCBlPXQubW9ycGhBdHRyaWJ1dGVzLG49T2JqZWN0LmtleXMoZSk7aWYobi5sZW5ndGg+MCl7Y29uc3QgdD1lW25bMF1dO2lmKHZvaWQgMCE9PXQpe3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzPVtdLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5PXt9O2ZvcihsZXQgZT0wLG49dC5sZW5ndGg7ZTxuO2UrKyl7Y29uc3Qgbj10W2VdLm5hbWV8fFN0cmluZyhlKTt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcy5wdXNoKDApLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5W25dPWV9fX19ZWxzZXtjb25zdCBlPXQubW9ycGhUYXJnZXRzO3ZvaWQgMCE9PWUmJmUubGVuZ3RoPjAmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLk1lc2gudXBkYXRlTW9ycGhUYXJnZXRzKCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX19LHJheWNhc3Q6ZnVuY3Rpb24odCxlKXtjb25zdCBuPXRoaXMuZ2VvbWV0cnksaT10aGlzLm1hdGVyaWFsLHI9dGhpcy5tYXRyaXhXb3JsZDtpZih2b2lkIDA9PT1pKXJldHVybjtpZihudWxsPT09bi5ib3VuZGluZ1NwaGVyZSYmbi5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSxHenQuY29weShuLmJvdW5kaW5nU3BoZXJlKSxHenQuYXBwbHlNYXRyaXg0KHIpLCExPT09dC5yYXkuaW50ZXJzZWN0c1NwaGVyZShHenQpKXJldHVybjtpZihVenQuY29weShyKS5pbnZlcnQoKSxqenQuY29weSh0LnJheSkuYXBwbHlNYXRyaXg0KFV6dCksbnVsbCE9PW4uYm91bmRpbmdCb3gmJiExPT09anp0LmludGVyc2VjdHNCb3gobi5ib3VuZGluZ0JveCkpcmV0dXJuO2xldCBvO2lmKG4uaXNCdWZmZXJHZW9tZXRyeSl7Y29uc3Qgcj1uLmluZGV4LGE9bi5hdHRyaWJ1dGVzLnBvc2l0aW9uLHM9bi5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24sbD1uLm1vcnBoVGFyZ2V0c1JlbGF0aXZlLGM9bi5hdHRyaWJ1dGVzLnV2LHU9bi5hdHRyaWJ1dGVzLnV2MixoPW4uZ3JvdXBzLGQ9bi5kcmF3UmFuZ2U7aWYobnVsbCE9PXIpaWYoQXJyYXkuaXNBcnJheShpKSlmb3IobGV0IG49MCxwPWgubGVuZ3RoO248cDtuKyspe2NvbnN0IHA9aFtuXSxmPWlbcC5tYXRlcmlhbEluZGV4XTtmb3IobGV0IG49TWF0aC5tYXgocC5zdGFydCxkLnN0YXJ0KSxpPU1hdGgubWluKHAuc3RhcnQrcC5jb3VudCxkLnN0YXJ0K2QuY291bnQpO248aTtuKz0zKXtjb25zdCBpPXIuZ2V0WChuKSxoPXIuZ2V0WChuKzEpLGQ9ci5nZXRYKG4rMik7bz1hRHQodGhpcyxmLHQsanp0LGEscyxsLGMsdSxpLGgsZCksbyYmKG8uZmFjZUluZGV4PU1hdGguZmxvb3Iobi8zKSxvLmZhY2UubWF0ZXJpYWxJbmRleD1wLm1hdGVyaWFsSW5kZXgsZS5wdXNoKG8pKX19ZWxzZSBmb3IobGV0IG49TWF0aC5tYXgoMCxkLnN0YXJ0KSxoPU1hdGgubWluKHIuY291bnQsZC5zdGFydCtkLmNvdW50KTtuPGg7bis9Myl7Y29uc3QgaD1yLmdldFgobiksZD1yLmdldFgobisxKSxwPXIuZ2V0WChuKzIpO289YUR0KHRoaXMsaSx0LGp6dCxhLHMsbCxjLHUsaCxkLHApLG8mJihvLmZhY2VJbmRleD1NYXRoLmZsb29yKG4vMyksZS5wdXNoKG8pKX1lbHNlIGlmKHZvaWQgMCE9PWEpaWYoQXJyYXkuaXNBcnJheShpKSlmb3IobGV0IG49MCxyPWgubGVuZ3RoO248cjtuKyspe2NvbnN0IHI9aFtuXSxwPWlbci5tYXRlcmlhbEluZGV4XTtmb3IobGV0IG49TWF0aC5tYXgoci5zdGFydCxkLnN0YXJ0KSxpPU1hdGgubWluKHIuc3RhcnQrci5jb3VudCxkLnN0YXJ0K2QuY291bnQpO248aTtuKz0zKW89YUR0KHRoaXMscCx0LGp6dCxhLHMsbCxjLHUsbixuKzEsbisyKSxvJiYoby5mYWNlSW5kZXg9TWF0aC5mbG9vcihuLzMpLG8uZmFjZS5tYXRlcmlhbEluZGV4PXIubWF0ZXJpYWxJbmRleCxlLnB1c2gobykpfWVsc2UgZm9yKGxldCBuPU1hdGgubWF4KDAsZC5zdGFydCkscj1NYXRoLm1pbihhLmNvdW50LGQuc3RhcnQrZC5jb3VudCk7bjxyO24rPTMpbz1hRHQodGhpcyxpLHQsanp0LGEscyxsLGMsdSxuLG4rMSxuKzIpLG8mJihvLmZhY2VJbmRleD1NYXRoLmZsb29yKG4vMyksZS5wdXNoKG8pKX1lbHNlIG4uaXNHZW9tZXRyeSYmY29uc29sZS5lcnJvcigiVEhSRUUuTWVzaC5yYXljYXN0KCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX19KTtjbGFzcyBzRHQgZXh0ZW5kcyBWenR7Y29uc3RydWN0b3IodD0xLGU9MSxuPTEsaT0xLHI9MSxvPTEpe3N1cGVyKCksdGhpcy50eXBlPSJCb3hHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXt3aWR0aDp0LGhlaWdodDplLGRlcHRoOm4sd2lkdGhTZWdtZW50czppLGhlaWdodFNlZ21lbnRzOnIsZGVwdGhTZWdtZW50czpvfTtjb25zdCBhPXRoaXM7aT1NYXRoLmZsb29yKGkpLHI9TWF0aC5mbG9vcihyKSxvPU1hdGguZmxvb3Iobyk7Y29uc3Qgcz1bXSxsPVtdLGM9W10sdT1bXTtsZXQgaD0wLGQ9MDtmdW5jdGlvbiBwKHQsZSxuLGkscixvLHAsZixtLGcsXyl7Y29uc3QgeT1vL20sdj1wL2csYj1vLzIseD1wLzIsdz1mLzIsUz1tKzEsTT1nKzE7bGV0IEU9MCxUPTA7Y29uc3QgQz1uZXcgcU90O2ZvcihsZXQgbz0wO288TTtvKyspe2NvbnN0IGE9byp2LXg7Zm9yKGxldCBzPTA7czxTO3MrKylDW3RdPShzKnktYikqaSxDW2VdPWEqcixDW25dPXcsbC5wdXNoKEMueCxDLnksQy56KSxDW3RdPTAsQ1tlXT0wLENbbl09Zj4wPzE6LTEsYy5wdXNoKEMueCxDLnksQy56KSx1LnB1c2gocy9tKSx1LnB1c2goMS1vL2cpLEUrPTF9Zm9yKGxldCB0PTA7dDxnO3QrKylmb3IobGV0IGU9MDtlPG07ZSsrKXtjb25zdCBuPWgrZStTKih0KzEpLGk9aCsoZSsxKStTKih0KzEpLHI9aCsoZSsxKStTKnQ7cy5wdXNoKGgrZStTKnQsbixyKSxzLnB1c2gobixpLHIpLFQrPTZ9YS5hZGRHcm91cChkLFQsXyksZCs9VCxoKz1FfXAoInoiLCJ5IiwieCIsLTEsLTEsbixlLHQsbyxyLDApLHAoInoiLCJ5IiwieCIsMSwtMSxuLGUsLXQsbyxyLDEpLHAoIngiLCJ6IiwieSIsMSwxLHQsbixlLGksbywyKSxwKCJ4IiwieiIsInkiLDEsLTEsdCxuLC1lLGksbywzKSxwKCJ4IiwieSIsInoiLDEsLTEsdCxlLG4saSxyLDQpLHAoIngiLCJ5IiwieiIsLTEsLTEsdCxlLC1uLGksciw1KSx0aGlzLnNldEluZGV4KHMpLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGt6dChsLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcga3p0KGMsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IGt6dCh1LDIpKX19ZnVuY3Rpb24gbER0KHQpe2NvbnN0IGU9e307Zm9yKGNvbnN0IG4gaW4gdCl7ZVtuXT17fTtmb3IoY29uc3QgaSBpbiB0W25dKXtjb25zdCByPXRbbl1baV07ZVtuXVtpXT1yJiYoci5pc0NvbG9yfHxyLmlzTWF0cml4M3x8ci5pc01hdHJpeDR8fHIuaXNWZWN0b3IyfHxyLmlzVmVjdG9yM3x8ci5pc1ZlY3RvcjR8fHIuaXNUZXh0dXJlKT9yLmNsb25lKCk6QXJyYXkuaXNBcnJheShyKT9yLnNsaWNlKCk6cn19cmV0dXJuIGV9ZnVuY3Rpb24gY0R0KHQpe2NvbnN0IGU9e307Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspe2NvbnN0IGk9bER0KHRbbl0pO2Zvcihjb25zdCB0IGluIGkpZVt0XT1pW3RdfXJldHVybiBlfWNvbnN0IHVEdD17Y2xvbmU6bER0LG1lcmdlOmNEdH07ZnVuY3Rpb24gaER0KHQpe2d6dC5jYWxsKHRoaXMpLHRoaXMudHlwZT0iU2hhZGVyTWF0ZXJpYWwiLHRoaXMuZGVmaW5lcz17fSx0aGlzLnVuaWZvcm1zPXt9LHRoaXMudmVydGV4U2hhZGVyPSJ2b2lkIG1haW4oKSB7XG5cdGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIG1vZGVsVmlld01hdHJpeCAqIHZlYzQoIHBvc2l0aW9uLCAxLjAgKTtcbn0iLHRoaXMuZnJhZ21lbnRTaGFkZXI9InZvaWQgbWFpbigpIHtcblx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggMS4wLCAwLjAsIDAuMCwgMS4wICk7XG59Iix0aGlzLmxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy5mb2c9ITEsdGhpcy5saWdodHM9ITEsdGhpcy5jbGlwcGluZz0hMSx0aGlzLnNraW5uaW5nPSExLHRoaXMubW9ycGhUYXJnZXRzPSExLHRoaXMubW9ycGhOb3JtYWxzPSExLHRoaXMuZXh0ZW5zaW9ucz17ZGVyaXZhdGl2ZXM6ITEsZnJhZ0RlcHRoOiExLGRyYXdCdWZmZXJzOiExLHNoYWRlclRleHR1cmVMT0Q6ITF9LHRoaXMuZGVmYXVsdEF0dHJpYnV0ZVZhbHVlcz17Y29sb3I6WzEsMSwxXSx1djpbMCwwXSx1djI6WzAsMF19LHRoaXMuaW5kZXgwQXR0cmlidXRlTmFtZT12b2lkIDAsdGhpcy51bmlmb3Jtc05lZWRVcGRhdGU9ITEsdGhpcy5nbHNsVmVyc2lvbj1udWxsLHZvaWQgMCE9PXQmJih2b2lkIDAhPT10LmF0dHJpYnV0ZXMmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLlNoYWRlck1hdGVyaWFsOiBhdHRyaWJ1dGVzIHNob3VsZCBub3cgYmUgZGVmaW5lZCBpbiBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpLHRoaXMuc2V0VmFsdWVzKHQpKX1mdW5jdGlvbiBkRHQoKXtXUnQuY2FsbCh0aGlzKSx0aGlzLnR5cGU9IkNhbWVyYSIsdGhpcy5tYXRyaXhXb3JsZEludmVyc2U9bmV3IGJSdCx0aGlzLnByb2plY3Rpb25NYXRyaXg9bmV3IGJSdCx0aGlzLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlPW5ldyBiUnR9ZnVuY3Rpb24gcER0KHQ9NTAsZT0xLG49LjEsaT0yZTMpe2REdC5jYWxsKHRoaXMpLHRoaXMudHlwZT0iUGVyc3BlY3RpdmVDYW1lcmEiLHRoaXMuZm92PXQsdGhpcy56b29tPTEsdGhpcy5uZWFyPW4sdGhpcy5mYXI9aSx0aGlzLmZvY3VzPTEwLHRoaXMuYXNwZWN0PWUsdGhpcy52aWV3PW51bGwsdGhpcy5maWxtR2F1Z2U9MzUsdGhpcy5maWxtT2Zmc2V0PTAsdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9KGhEdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShnenQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9aER0LGhEdC5wcm90b3R5cGUuaXNTaGFkZXJNYXRlcmlhbD0hMCxoRHQucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24odCl7cmV0dXJuIGd6dC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy5mcmFnbWVudFNoYWRlcj10LmZyYWdtZW50U2hhZGVyLHRoaXMudmVydGV4U2hhZGVyPXQudmVydGV4U2hhZGVyLHRoaXMudW5pZm9ybXM9bER0KHQudW5pZm9ybXMpLHRoaXMuZGVmaW5lcz1PYmplY3QuYXNzaWduKHt9LHQuZGVmaW5lcyksdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy5saWdodHM9dC5saWdodHMsdGhpcy5jbGlwcGluZz10LmNsaXBwaW5nLHRoaXMuc2tpbm5pbmc9dC5za2lubmluZyx0aGlzLm1vcnBoVGFyZ2V0cz10Lm1vcnBoVGFyZ2V0cyx0aGlzLm1vcnBoTm9ybWFscz10Lm1vcnBoTm9ybWFscyx0aGlzLmV4dGVuc2lvbnM9T2JqZWN0LmFzc2lnbih7fSx0LmV4dGVuc2lvbnMpLHRoaXMuZ2xzbFZlcnNpb249dC5nbHNsVmVyc2lvbix0aGlzfSxoRHQucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbih0KXtjb25zdCBlPWd6dC5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyx0KTtlLmdsc2xWZXJzaW9uPXRoaXMuZ2xzbFZlcnNpb24sZS51bmlmb3Jtcz17fTtmb3IoY29uc3QgbiBpbiB0aGlzLnVuaWZvcm1zKXtjb25zdCBpPXRoaXMudW5pZm9ybXNbbl0udmFsdWU7ZS51bmlmb3Jtc1tuXT1pJiZpLmlzVGV4dHVyZT97dHlwZToidCIsdmFsdWU6aS50b0pTT04odCkudXVpZH06aSYmaS5pc0NvbG9yP3t0eXBlOiJjIix2YWx1ZTppLmdldEhleCgpfTppJiZpLmlzVmVjdG9yMj97dHlwZToidjIiLHZhbHVlOmkudG9BcnJheSgpfTppJiZpLmlzVmVjdG9yMz97dHlwZToidjMiLHZhbHVlOmkudG9BcnJheSgpfTppJiZpLmlzVmVjdG9yND97dHlwZToidjQiLHZhbHVlOmkudG9BcnJheSgpfTppJiZpLmlzTWF0cml4Mz97dHlwZToibTMiLHZhbHVlOmkudG9BcnJheSgpfTppJiZpLmlzTWF0cml4ND97dHlwZToibTQiLHZhbHVlOmkudG9BcnJheSgpfTp7dmFsdWU6aX19T2JqZWN0LmtleXModGhpcy5kZWZpbmVzKS5sZW5ndGg+MCYmKGUuZGVmaW5lcz10aGlzLmRlZmluZXMpLGUudmVydGV4U2hhZGVyPXRoaXMudmVydGV4U2hhZGVyLGUuZnJhZ21lbnRTaGFkZXI9dGhpcy5mcmFnbWVudFNoYWRlcjtjb25zdCBuPXt9O2Zvcihjb25zdCB0IGluIHRoaXMuZXh0ZW5zaW9ucykhMD09PXRoaXMuZXh0ZW5zaW9uc1t0XSYmKG5bdF09ITApO3JldHVybiBPYmplY3Qua2V5cyhuKS5sZW5ndGg+MCYmKGUuZXh0ZW5zaW9ucz1uKSxlfSxkRHQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShXUnQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6ZER0LGlzQ2FtZXJhOiEwLGNvcHk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gV1J0LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0LGUpLHRoaXMubWF0cml4V29ybGRJbnZlcnNlLmNvcHkodC5tYXRyaXhXb3JsZEludmVyc2UpLHRoaXMucHJvamVjdGlvbk1hdHJpeC5jb3B5KHQucHJvamVjdGlvbk1hdHJpeCksdGhpcy5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZS5jb3B5KHQucHJvamVjdGlvbk1hdHJpeEludmVyc2UpLHRoaXN9LGdldFdvcmxkRGlyZWN0aW9uOmZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJihjb25zb2xlLndhcm4oIlRIUkVFLkNhbWVyYTogLmdldFdvcmxkRGlyZWN0aW9uKCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLHQ9bmV3IHFPdCksdGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSk7Y29uc3QgZT10aGlzLm1hdHJpeFdvcmxkLmVsZW1lbnRzO3JldHVybiB0LnNldCgtZVs4XSwtZVs5XSwtZVsxMF0pLm5vcm1hbGl6ZSgpfSx1cGRhdGVNYXRyaXhXb3JsZDpmdW5jdGlvbih0KXtXUnQucHJvdG90eXBlLnVwZGF0ZU1hdHJpeFdvcmxkLmNhbGwodGhpcyx0KSx0aGlzLm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KHRoaXMubWF0cml4V29ybGQpLmludmVydCgpfSx1cGRhdGVXb3JsZE1hdHJpeDpmdW5jdGlvbih0LGUpe1dSdC5wcm90b3R5cGUudXBkYXRlV29ybGRNYXRyaXguY2FsbCh0aGlzLHQsZSksdGhpcy5tYXRyaXhXb3JsZEludmVyc2UuY29weSh0aGlzLm1hdHJpeFdvcmxkKS5pbnZlcnQoKX0sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9fSkscER0LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoZER0LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOnBEdCxpc1BlcnNwZWN0aXZlQ2FtZXJhOiEwLGNvcHk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZER0LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0LGUpLHRoaXMuZm92PXQuZm92LHRoaXMuem9vbT10Lnpvb20sdGhpcy5uZWFyPXQubmVhcix0aGlzLmZhcj10LmZhcix0aGlzLmZvY3VzPXQuZm9jdXMsdGhpcy5hc3BlY3Q9dC5hc3BlY3QsdGhpcy52aWV3PW51bGw9PT10LnZpZXc/bnVsbDpPYmplY3QuYXNzaWduKHt9LHQudmlldyksdGhpcy5maWxtR2F1Z2U9dC5maWxtR2F1Z2UsdGhpcy5maWxtT2Zmc2V0PXQuZmlsbU9mZnNldCx0aGlzfSxzZXRGb2NhbExlbmd0aDpmdW5jdGlvbih0KXtjb25zdCBlPS41KnRoaXMuZ2V0RmlsbUhlaWdodCgpL3Q7dGhpcy5mb3Y9MipST3QuUkFEMkRFRypNYXRoLmF0YW4oZSksdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9LGdldEZvY2FsTGVuZ3RoOmZ1bmN0aW9uKCl7Y29uc3QgdD1NYXRoLnRhbiguNSpST3QuREVHMlJBRCp0aGlzLmZvdik7cmV0dXJuLjUqdGhpcy5nZXRGaWxtSGVpZ2h0KCkvdH0sZ2V0RWZmZWN0aXZlRk9WOmZ1bmN0aW9uKCl7cmV0dXJuIDIqUk90LlJBRDJERUcqTWF0aC5hdGFuKE1hdGgudGFuKC41KlJPdC5ERUcyUkFEKnRoaXMuZm92KS90aGlzLnpvb20pfSxnZXRGaWxtV2lkdGg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWxtR2F1Z2UqTWF0aC5taW4odGhpcy5hc3BlY3QsMSl9LGdldEZpbG1IZWlnaHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWxtR2F1Z2UvTWF0aC5tYXgodGhpcy5hc3BlY3QsMSl9LHNldFZpZXdPZmZzZXQ6ZnVuY3Rpb24odCxlLG4saSxyLG8pe3RoaXMuYXNwZWN0PXQvZSxudWxsPT09dGhpcy52aWV3JiYodGhpcy52aWV3PXtlbmFibGVkOiEwLGZ1bGxXaWR0aDoxLGZ1bGxIZWlnaHQ6MSxvZmZzZXRYOjAsb2Zmc2V0WTowLHdpZHRoOjEsaGVpZ2h0OjF9KSx0aGlzLnZpZXcuZW5hYmxlZD0hMCx0aGlzLnZpZXcuZnVsbFdpZHRoPXQsdGhpcy52aWV3LmZ1bGxIZWlnaHQ9ZSx0aGlzLnZpZXcub2Zmc2V0WD1uLHRoaXMudmlldy5vZmZzZXRZPWksdGhpcy52aWV3LndpZHRoPXIsdGhpcy52aWV3LmhlaWdodD1vLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfSxjbGVhclZpZXdPZmZzZXQ6ZnVuY3Rpb24oKXtudWxsIT09dGhpcy52aWV3JiYodGhpcy52aWV3LmVuYWJsZWQ9ITEpLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfSx1cGRhdGVQcm9qZWN0aW9uTWF0cml4OmZ1bmN0aW9uKCl7Y29uc3QgdD10aGlzLm5lYXI7bGV0IGU9dCpNYXRoLnRhbiguNSpST3QuREVHMlJBRCp0aGlzLmZvdikvdGhpcy56b29tLG49MiplLGk9dGhpcy5hc3BlY3QqbixyPS0uNSppO2NvbnN0IG89dGhpcy52aWV3O2lmKG51bGwhPT10aGlzLnZpZXcmJnRoaXMudmlldy5lbmFibGVkKXtjb25zdCB0PW8uZnVsbFdpZHRoLGE9by5mdWxsSGVpZ2h0O3IrPW8ub2Zmc2V0WCppL3QsZS09by5vZmZzZXRZKm4vYSxpKj1vLndpZHRoL3Qsbio9by5oZWlnaHQvYX1jb25zdCBhPXRoaXMuZmlsbU9mZnNldDswIT09YSYmKHIrPXQqYS90aGlzLmdldEZpbG1XaWR0aCgpKSx0aGlzLnByb2plY3Rpb25NYXRyaXgubWFrZVBlcnNwZWN0aXZlKHIscitpLGUsZS1uLHQsdGhpcy5mYXIpLHRoaXMucHJvamVjdGlvbk1hdHJpeEludmVyc2UuY29weSh0aGlzLnByb2plY3Rpb25NYXRyaXgpLmludmVydCgpfSx0b0pTT046ZnVuY3Rpb24odCl7Y29uc3QgZT1XUnQucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMsdCk7cmV0dXJuIGUub2JqZWN0LmZvdj10aGlzLmZvdixlLm9iamVjdC56b29tPXRoaXMuem9vbSxlLm9iamVjdC5uZWFyPXRoaXMubmVhcixlLm9iamVjdC5mYXI9dGhpcy5mYXIsZS5vYmplY3QuZm9jdXM9dGhpcy5mb2N1cyxlLm9iamVjdC5hc3BlY3Q9dGhpcy5hc3BlY3QsbnVsbCE9PXRoaXMudmlldyYmKGUub2JqZWN0LnZpZXc9T2JqZWN0LmFzc2lnbih7fSx0aGlzLnZpZXcpKSxlLm9iamVjdC5maWxtR2F1Z2U9dGhpcy5maWxtR2F1Z2UsZS5vYmplY3QuZmlsbU9mZnNldD10aGlzLmZpbG1PZmZzZXQsZX19KTtjb25zdCBmRHQ9OTA7ZnVuY3Rpb24gbUR0KHQsZSxuKXtpZihXUnQuY2FsbCh0aGlzKSx0aGlzLnR5cGU9IkN1YmVDYW1lcmEiLCEwIT09bi5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldClyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5DdWJlQ2FtZXJhOiBUaGUgY29uc3RydWN0b3Igbm93IGV4cGVjdHMgYW4gaW5zdGFuY2Ugb2YgV2ViR0xDdWJlUmVuZGVyVGFyZ2V0IGFzIHRoaXJkIHBhcmFtZXRlci4iKTt0aGlzLnJlbmRlclRhcmdldD1uO2NvbnN0IGk9bmV3IHBEdChmRHQsMSx0LGUpO2kubGF5ZXJzPXRoaXMubGF5ZXJzLGkudXAuc2V0KDAsLTEsMCksaS5sb29rQXQobmV3IHFPdCgxLDAsMCkpLHRoaXMuYWRkKGkpO2NvbnN0IHI9bmV3IHBEdChmRHQsMSx0LGUpO3IubGF5ZXJzPXRoaXMubGF5ZXJzLHIudXAuc2V0KDAsLTEsMCksci5sb29rQXQobmV3IHFPdCgtMSwwLDApKSx0aGlzLmFkZChyKTtjb25zdCBvPW5ldyBwRHQoZkR0LDEsdCxlKTtvLmxheWVycz10aGlzLmxheWVycyxvLnVwLnNldCgwLDAsMSksby5sb29rQXQobmV3IHFPdCgwLDEsMCkpLHRoaXMuYWRkKG8pO2NvbnN0IGE9bmV3IHBEdChmRHQsMSx0LGUpO2EubGF5ZXJzPXRoaXMubGF5ZXJzLGEudXAuc2V0KDAsMCwtMSksYS5sb29rQXQobmV3IHFPdCgwLC0xLDApKSx0aGlzLmFkZChhKTtjb25zdCBzPW5ldyBwRHQoZkR0LDEsdCxlKTtzLmxheWVycz10aGlzLmxheWVycyxzLnVwLnNldCgwLC0xLDApLHMubG9va0F0KG5ldyBxT3QoMCwwLDEpKSx0aGlzLmFkZChzKTtjb25zdCBsPW5ldyBwRHQoZkR0LDEsdCxlKTtsLmxheWVycz10aGlzLmxheWVycyxsLnVwLnNldCgwLC0xLDApLGwubG9va0F0KG5ldyBxT3QoMCwwLC0xKSksdGhpcy5hZGQobCksdGhpcy51cGRhdGU9ZnVuY3Rpb24odCxlKXtudWxsPT09dGhpcy5wYXJlbnQmJnRoaXMudXBkYXRlTWF0cml4V29ybGQoKTtjb25zdCBjPXQueHIuZW5hYmxlZCx1PXQuZ2V0UmVuZGVyVGFyZ2V0KCk7dC54ci5lbmFibGVkPSExO2NvbnN0IGg9bi50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcztuLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzPSExLHQuc2V0UmVuZGVyVGFyZ2V0KG4sMCksdC5yZW5kZXIoZSxpKSx0LnNldFJlbmRlclRhcmdldChuLDEpLHQucmVuZGVyKGUsciksdC5zZXRSZW5kZXJUYXJnZXQobiwyKSx0LnJlbmRlcihlLG8pLHQuc2V0UmVuZGVyVGFyZ2V0KG4sMyksdC5yZW5kZXIoZSxhKSx0LnNldFJlbmRlclRhcmdldChuLDQpLHQucmVuZGVyKGUscyksbi50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz1oLHQuc2V0UmVuZGVyVGFyZ2V0KG4sNSksdC5yZW5kZXIoZSxsKSx0LnNldFJlbmRlclRhcmdldCh1KSx0LnhyLmVuYWJsZWQ9Y319ZnVuY3Rpb24gZ0R0KHQsZSxuLGkscixvLGEscyxsLGMpe1ZPdC5jYWxsKHRoaXMsdD12b2lkIDAhPT10P3Q6W10sZT12b2lkIDAhPT1lP2U6Tkl0LG4saSxyLG8sYT12b2lkIDAhPT1hP2E6UUl0LHMsbCxjKSx0aGlzLmZsaXBZPSExLHRoaXMuX25lZWRzRmxpcEVudk1hcD0hMH0obUR0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFdSdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1tRHQsKGdEdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShWT3QucHJvdG90eXBlKSkuY29uc3RydWN0b3I9Z0R0LGdEdC5wcm90b3R5cGUuaXNDdWJlVGV4dHVyZT0hMCxPYmplY3QuZGVmaW5lUHJvcGVydHkoZ0R0LnByb3RvdHlwZSwiaW1hZ2VzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW1hZ2V9LHNldDpmdW5jdGlvbih0KXt0aGlzLmltYWdlPXR9fSk7Y2xhc3MgX0R0IGV4dGVuZHMgR090e2NvbnN0cnVjdG9yKHQsZSxuKXtOdW1iZXIuaXNJbnRlZ2VyKGUpJiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTEN1YmVSZW5kZXJUYXJnZXQ6IGNvbnN0cnVjdG9yIHNpZ25hdHVyZSBpcyBub3cgV2ViR0xDdWJlUmVuZGVyVGFyZ2V0KCBzaXplLCBvcHRpb25zICkiKSxlPW4pLHN1cGVyKHQsdCxlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQiLHt2YWx1ZTohMH0pLHRoaXMudGV4dHVyZT1uZXcgZ0R0KHZvaWQgMCwoZT1lfHx7fSkubWFwcGluZyxlLndyYXBTLGUud3JhcFQsZS5tYWdGaWx0ZXIsZS5taW5GaWx0ZXIsZS5mb3JtYXQsZS50eXBlLGUuYW5pc290cm9weSxlLmVuY29kaW5nKSx0aGlzLnRleHR1cmUuX25lZWRzRmxpcEVudk1hcD0hMX1mcm9tRXF1aXJlY3Rhbmd1bGFyVGV4dHVyZSh0LGUpe3RoaXMudGV4dHVyZS50eXBlPWUudHlwZSx0aGlzLnRleHR1cmUuZm9ybWF0PXRPdCx0aGlzLnRleHR1cmUuZW5jb2Rpbmc9ZS5lbmNvZGluZyx0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzPWUuZ2VuZXJhdGVNaXBtYXBzLHRoaXMudGV4dHVyZS5taW5GaWx0ZXI9ZS5taW5GaWx0ZXIsdGhpcy50ZXh0dXJlLm1hZ0ZpbHRlcj1lLm1hZ0ZpbHRlcjtjb25zdCBuPW5ldyBzRHQoNSw1LDUpLGk9bmV3IGhEdCh7bmFtZToiQ3ViZW1hcEZyb21FcXVpcmVjdCIsdW5pZm9ybXM6bER0KHt0RXF1aXJlY3Q6e3ZhbHVlOm51bGx9fSksdmVydGV4U2hhZGVyOiJcblxuXHRcdFx0XHR2YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uO1xuXG5cdFx0XHRcdHZlYzMgdHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7XG5cblx0XHRcdFx0XHRyZXR1cm4gbm9ybWFsaXplKCAoIG1hdHJpeCAqIHZlYzQoIGRpciwgMC4wICkgKS54eXogKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0dm9pZCBtYWluKCkge1xuXG5cdFx0XHRcdFx0dldvcmxkRGlyZWN0aW9uID0gdHJhbnNmb3JtRGlyZWN0aW9uKCBwb3NpdGlvbiwgbW9kZWxNYXRyaXggKTtcblxuXHRcdFx0XHRcdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdFx0XHRcdFx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXG5cdFx0XHRcdH1cblx0XHRcdCIsZnJhZ21lbnRTaGFkZXI6IlxuXG5cdFx0XHRcdHVuaWZvcm0gc2FtcGxlcjJEIHRFcXVpcmVjdDtcblxuXHRcdFx0XHR2YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uO1xuXG5cdFx0XHRcdCNpbmNsdWRlIDxjb21tb24+XG5cblx0XHRcdFx0dm9pZCBtYWluKCkge1xuXG5cdFx0XHRcdFx0dmVjMyBkaXJlY3Rpb24gPSBub3JtYWxpemUoIHZXb3JsZERpcmVjdGlvbiApO1xuXG5cdFx0XHRcdFx0dmVjMiBzYW1wbGVVViA9IGVxdWlyZWN0VXYoIGRpcmVjdGlvbiApO1xuXG5cdFx0XHRcdFx0Z2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKCB0RXF1aXJlY3QsIHNhbXBsZVVWICk7XG5cblx0XHRcdFx0fVxuXHRcdFx0IixzaWRlOjEsYmxlbmRpbmc6MH0pO2kudW5pZm9ybXMudEVxdWlyZWN0LnZhbHVlPWU7Y29uc3Qgcj1uZXcgb0R0KG4saSksbz1lLm1pbkZpbHRlcjtyZXR1cm4gZS5taW5GaWx0ZXI9PT1xSXQmJihlLm1pbkZpbHRlcj1HSXQpLG5ldyBtRHQoMSwxMCx0aGlzKS51cGRhdGUodCxyKSxlLm1pbkZpbHRlcj1vLHIuZ2VvbWV0cnkuZGlzcG9zZSgpLHIubWF0ZXJpYWwuZGlzcG9zZSgpLHRoaXN9Y2xlYXIodCxlLG4saSl7Y29uc3Qgcj10LmdldFJlbmRlclRhcmdldCgpO2ZvcihsZXQgcj0wO3I8NjtyKyspdC5zZXRSZW5kZXJUYXJnZXQodGhpcyxyKSx0LmNsZWFyKGUsbixpKTt0LnNldFJlbmRlclRhcmdldChyKX19ZnVuY3Rpb24geUR0KHQsZSxuLGkscixvLGEscyxsLGMsdSxoKXtWT3QuY2FsbCh0aGlzLG51bGwsbyxhLHMsbCxjLGkscix1LGgpLHRoaXMuaW1hZ2U9e2RhdGE6dHx8bnVsbCx3aWR0aDplfHwxLGhlaWdodDpufHwxfSx0aGlzLm1hZ0ZpbHRlcj12b2lkIDAhPT1sP2w6Vkl0LHRoaXMubWluRmlsdGVyPXZvaWQgMCE9PWM/YzpWSXQsdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITEsdGhpcy5mbGlwWT0hMSx0aGlzLnVucGFja0FsaWdubWVudD0xLHRoaXMubmVlZHNVcGRhdGU9ITB9KHlEdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShWT3QucHJvdG90eXBlKSkuY29uc3RydWN0b3I9eUR0LHlEdC5wcm90b3R5cGUuaXNEYXRhVGV4dHVyZT0hMDtjb25zdCB2RHQ9bmV3IGhSdCxiRHQ9bmV3IHFPdDtjbGFzcyB4RHR7Y29uc3RydWN0b3IodCxlLG4saSxyLG8pe3RoaXMucGxhbmVzPVt2b2lkIDAhPT10P3Q6bmV3ICRSdCx2b2lkIDAhPT1lP2U6bmV3ICRSdCx2b2lkIDAhPT1uP246bmV3ICRSdCx2b2lkIDAhPT1pP2k6bmV3ICRSdCx2b2lkIDAhPT1yP3I6bmV3ICRSdCx2b2lkIDAhPT1vP286bmV3ICRSdF19c2V0KHQsZSxuLGkscixvKXtjb25zdCBhPXRoaXMucGxhbmVzO3JldHVybiBhWzBdLmNvcHkodCksYVsxXS5jb3B5KGUpLGFbMl0uY29weShuKSxhWzNdLmNvcHkoaSksYVs0XS5jb3B5KHIpLGFbNV0uY29weShvKSx0aGlzfWNsb25lKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfWNvcHkodCl7Y29uc3QgZT10aGlzLnBsYW5lcztmb3IobGV0IG49MDtuPDY7bisrKWVbbl0uY29weSh0LnBsYW5lc1tuXSk7cmV0dXJuIHRoaXN9c2V0RnJvbVByb2plY3Rpb25NYXRyaXgodCl7Y29uc3QgZT10aGlzLnBsYW5lcyxuPXQuZWxlbWVudHMsaT1uWzBdLHI9blsxXSxvPW5bMl0sYT1uWzNdLHM9bls0XSxsPW5bNV0sYz1uWzZdLHU9bls3XSxoPW5bOF0sZD1uWzldLHA9blsxMF0sZj1uWzExXSxtPW5bMTJdLGc9blsxM10sXz1uWzE0XSx5PW5bMTVdO3JldHVybiBlWzBdLnNldENvbXBvbmVudHMoYS1pLHUtcyxmLWgseS1tKS5ub3JtYWxpemUoKSxlWzFdLnNldENvbXBvbmVudHMoYStpLHUrcyxmK2gseSttKS5ub3JtYWxpemUoKSxlWzJdLnNldENvbXBvbmVudHMoYStyLHUrbCxmK2QseStnKS5ub3JtYWxpemUoKSxlWzNdLnNldENvbXBvbmVudHMoYS1yLHUtbCxmLWQseS1nKS5ub3JtYWxpemUoKSxlWzRdLnNldENvbXBvbmVudHMoYS1vLHUtYyxmLXAseS1fKS5ub3JtYWxpemUoKSxlWzVdLnNldENvbXBvbmVudHMoYStvLHUrYyxmK3AseStfKS5ub3JtYWxpemUoKSx0aGlzfWludGVyc2VjdHNPYmplY3QodCl7Y29uc3QgZT10Lmdlb21ldHJ5O3JldHVybiBudWxsPT09ZS5ib3VuZGluZ1NwaGVyZSYmZS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSx2RHQuY29weShlLmJvdW5kaW5nU3BoZXJlKS5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZCksdGhpcy5pbnRlcnNlY3RzU3BoZXJlKHZEdCl9aW50ZXJzZWN0c1Nwcml0ZSh0KXtyZXR1cm4gdkR0LmNlbnRlci5zZXQoMCwwLDApLHZEdC5yYWRpdXM9LjcwNzEwNjc4MTE4NjU0NzYsdkR0LmFwcGx5TWF0cml4NCh0Lm1hdHJpeFdvcmxkKSx0aGlzLmludGVyc2VjdHNTcGhlcmUodkR0KX1pbnRlcnNlY3RzU3BoZXJlKHQpe2NvbnN0IGU9dGhpcy5wbGFuZXMsbj10LmNlbnRlcixpPS10LnJhZGl1cztmb3IobGV0IHQ9MDt0PDY7dCsrKWlmKGVbdF0uZGlzdGFuY2VUb1BvaW50KG4pPGkpcmV0dXJuITE7cmV0dXJuITB9aW50ZXJzZWN0c0JveCh0KXtjb25zdCBlPXRoaXMucGxhbmVzO2ZvcihsZXQgbj0wO248NjtuKyspe2NvbnN0IGk9ZVtuXTtpZihiRHQueD1pLm5vcm1hbC54PjA/dC5tYXgueDp0Lm1pbi54LGJEdC55PWkubm9ybWFsLnk+MD90Lm1heC55OnQubWluLnksYkR0Lno9aS5ub3JtYWwuej4wP3QubWF4Lno6dC5taW4ueixpLmRpc3RhbmNlVG9Qb2ludChiRHQpPDApcmV0dXJuITF9cmV0dXJuITB9Y29udGFpbnNQb2ludCh0KXtjb25zdCBlPXRoaXMucGxhbmVzO2ZvcihsZXQgbj0wO248NjtuKyspaWYoZVtuXS5kaXN0YW5jZVRvUG9pbnQodCk8MClyZXR1cm4hMTtyZXR1cm4hMH19ZnVuY3Rpb24gd0R0KCl7bGV0IHQ9bnVsbCxlPSExLG49bnVsbCxpPW51bGw7ZnVuY3Rpb24gcihlLG8pe24oZSxvKSxpPXQucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHIpfXJldHVybntzdGFydDpmdW5jdGlvbigpeyEwIT09ZSYmbnVsbCE9PW4mJihpPXQucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHIpLGU9ITApfSxzdG9wOmZ1bmN0aW9uKCl7dC5jYW5jZWxBbmltYXRpb25GcmFtZShpKSxlPSExfSxzZXRBbmltYXRpb25Mb29wOmZ1bmN0aW9uKHQpe249dH0sc2V0Q29udGV4dDpmdW5jdGlvbihlKXt0PWV9fX1mdW5jdGlvbiBTRHQodCxlKXtjb25zdCBuPWUuaXNXZWJHTDIsaT1uZXcgV2Vha01hcDtyZXR1cm57Z2V0OmZ1bmN0aW9uIHIodCl7cmV0dXJuIHQuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSYmKHQ9dC5kYXRhKSxpLmdldCh0KX0scmVtb3ZlOmZ1bmN0aW9uIG8oZSl7ZS5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlJiYoZT1lLmRhdGEpO2NvbnN0IG49aS5nZXQoZSk7biYmKHQuZGVsZXRlQnVmZmVyKG4uYnVmZmVyKSxpLmRlbGV0ZShlKSl9LHVwZGF0ZTpmdW5jdGlvbiBhKGUscil7aWYoZS5pc0dMQnVmZmVyQXR0cmlidXRlKXtjb25zdCB0PWkuZ2V0KGUpO3JldHVybiB2b2lkKCghdHx8dC52ZXJzaW9uPGUudmVyc2lvbikmJmkuc2V0KGUse2J1ZmZlcjplLmJ1ZmZlcix0eXBlOmUudHlwZSxieXRlc1BlckVsZW1lbnQ6ZS5lbGVtZW50U2l6ZSx2ZXJzaW9uOmUudmVyc2lvbn0pKX1lLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUmJihlPWUuZGF0YSk7Y29uc3Qgbz1pLmdldChlKTt2b2lkIDA9PT1vP2kuc2V0KGUsKGZ1bmN0aW9uIGEoZSxpKXtjb25zdCByPWUuYXJyYXksbz1lLnVzYWdlLGE9dC5jcmVhdGVCdWZmZXIoKTt0LmJpbmRCdWZmZXIoaSxhKSx0LmJ1ZmZlckRhdGEoaSxyLG8pLGUub25VcGxvYWRDYWxsYmFjaygpO2xldCBzPTUxMjY7cmV0dXJuIHIgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXk/cz01MTI2OnIgaW5zdGFuY2VvZiBGbG9hdDY0QXJyYXk/Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTEF0dHJpYnV0ZXM6IFVuc3VwcG9ydGVkIGRhdGEgYnVmZmVyIGZvcm1hdDogRmxvYXQ2NEFycmF5LiIpOnIgaW5zdGFuY2VvZiBVaW50MTZBcnJheT9lLmlzRmxvYXQxNkJ1ZmZlckF0dHJpYnV0ZT9uP3M9NTEzMTpjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMQXR0cmlidXRlczogVXNhZ2Ugb2YgRmxvYXQxNkJ1ZmZlckF0dHJpYnV0ZSByZXF1aXJlcyBXZWJHTDIuIik6cz01MTIzOnIgaW5zdGFuY2VvZiBJbnQxNkFycmF5P3M9NTEyMjpyIGluc3RhbmNlb2YgVWludDMyQXJyYXk/cz01MTI1OnIgaW5zdGFuY2VvZiBJbnQzMkFycmF5P3M9NTEyNDpyIGluc3RhbmNlb2YgSW50OEFycmF5P3M9NTEyMDpyIGluc3RhbmNlb2YgVWludDhBcnJheSYmKHM9NTEyMSkse2J1ZmZlcjphLHR5cGU6cyxieXRlc1BlckVsZW1lbnQ6ci5CWVRFU19QRVJfRUxFTUVOVCx2ZXJzaW9uOmUudmVyc2lvbn19KShlLHIpKTpvLnZlcnNpb248ZS52ZXJzaW9uJiYoKGZ1bmN0aW9uIHMoZSxpLHIpe2NvbnN0IG89aS5hcnJheSxhPWkudXBkYXRlUmFuZ2U7dC5iaW5kQnVmZmVyKHIsZSksLTE9PT1hLmNvdW50P3QuYnVmZmVyU3ViRGF0YShyLDAsbyk6KG4/dC5idWZmZXJTdWJEYXRhKHIsYS5vZmZzZXQqby5CWVRFU19QRVJfRUxFTUVOVCxvLGEub2Zmc2V0LGEuY291bnQpOnQuYnVmZmVyU3ViRGF0YShyLGEub2Zmc2V0Km8uQllURVNfUEVSX0VMRU1FTlQsby5zdWJhcnJheShhLm9mZnNldCxhLm9mZnNldCthLmNvdW50KSksYS5jb3VudD0tMSl9KShvLmJ1ZmZlcixlLHIpLG8udmVyc2lvbj1lLnZlcnNpb24pfX19Y2xhc3MgTUR0IGV4dGVuZHMgVnp0e2NvbnN0cnVjdG9yKHQ9MSxlPTEsbj0xLGk9MSl7c3VwZXIoKSx0aGlzLnR5cGU9IlBsYW5lR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17d2lkdGg6dCxoZWlnaHQ6ZSx3aWR0aFNlZ21lbnRzOm4saGVpZ2h0U2VnbWVudHM6aX07Y29uc3Qgcj10LzIsbz1lLzIsYT1NYXRoLmZsb29yKG4pLHM9TWF0aC5mbG9vcihpKSxsPWErMSxjPXMrMSx1PXQvYSxoPWUvcyxkPVtdLHA9W10sZj1bXSxtPVtdO2ZvcihsZXQgdD0wO3Q8Yzt0Kyspe2NvbnN0IGU9dCpoLW87Zm9yKGxldCBuPTA7bjxsO24rKylwLnB1c2gobip1LXIsLWUsMCksZi5wdXNoKDAsMCwxKSxtLnB1c2gobi9hKSxtLnB1c2goMS10L3MpfWZvcihsZXQgdD0wO3Q8czt0KyspZm9yKGxldCBlPTA7ZTxhO2UrKyl7Y29uc3Qgbj1lK2wqKHQrMSksaT1lKzErbCoodCsxKSxyPWUrMStsKnQ7ZC5wdXNoKGUrbCp0LG4sciksZC5wdXNoKG4saSxyKX10aGlzLnNldEluZGV4KGQpLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGt6dChwLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcga3p0KGYsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IGt6dChtLDIpKX19Y29uc3QgRUR0PXthbHBoYW1hcF9mcmFnbWVudDoiI2lmZGVmIFVTRV9BTFBIQU1BUFxuXHRkaWZmdXNlQ29sb3IuYSAqPSB0ZXh0dXJlMkQoIGFscGhhTWFwLCB2VXYgKS5nO1xuI2VuZGlmIixhbHBoYW1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0FMUEhBTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGFscGhhTWFwO1xuI2VuZGlmIixhbHBoYXRlc3RfZnJhZ21lbnQ6IiNpZmRlZiBBTFBIQVRFU1Rcblx0aWYgKCBkaWZmdXNlQ29sb3IuYSA8IEFMUEhBVEVTVCApIGRpc2NhcmQ7XG4jZW5kaWYiLGFvbWFwX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0FPTUFQXG5cdGZsb2F0IGFtYmllbnRPY2NsdXNpb24gPSAoIHRleHR1cmUyRCggYW9NYXAsIHZVdjIgKS5yIC0gMS4wICkgKiBhb01hcEludGVuc2l0eSArIDEuMDtcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICo9IGFtYmllbnRPY2NsdXNpb247XG5cdCNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgJiYgZGVmaW5lZCggU1RBTkRBUkQgKVxuXHRcdGZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyICkgKTtcblx0XHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICo9IGNvbXB1dGVTcGVjdWxhck9jY2x1c2lvbiggZG90TlYsIGFtYmllbnRPY2NsdXNpb24sIG1hdGVyaWFsLnNwZWN1bGFyUm91Z2huZXNzICk7XG5cdCNlbmRpZlxuI2VuZGlmIixhb21hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0FPTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGFvTWFwO1xuXHR1bmlmb3JtIGZsb2F0IGFvTWFwSW50ZW5zaXR5O1xuI2VuZGlmIixiZWdpbl92ZXJ0ZXg6InZlYzMgdHJhbnNmb3JtZWQgPSB2ZWMzKCBwb3NpdGlvbiApOyIsYmVnaW5ub3JtYWxfdmVydGV4OiJ2ZWMzIG9iamVjdE5vcm1hbCA9IHZlYzMoIG5vcm1hbCApO1xuI2lmZGVmIFVTRV9UQU5HRU5UXG5cdHZlYzMgb2JqZWN0VGFuZ2VudCA9IHZlYzMoIHRhbmdlbnQueHl6ICk7XG4jZW5kaWYiLGJzZGZzOiJ2ZWMyIGludGVncmF0ZVNwZWN1bGFyQlJERiggY29uc3QgaW4gZmxvYXQgZG90TlYsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHtcblx0Y29uc3QgdmVjNCBjMCA9IHZlYzQoIC0gMSwgLSAwLjAyNzUsIC0gMC41NzIsIDAuMDIyICk7XG5cdGNvbnN0IHZlYzQgYzEgPSB2ZWM0KCAxLCAwLjA0MjUsIDEuMDQsIC0gMC4wNCApO1xuXHR2ZWM0IHIgPSByb3VnaG5lc3MgKiBjMCArIGMxO1xuXHRmbG9hdCBhMDA0ID0gbWluKCByLnggKiByLngsIGV4cDIoIC0gOS4yOCAqIGRvdE5WICkgKSAqIHIueCArIHIueTtcblx0cmV0dXJuIHZlYzIoIC0xLjA0LCAxLjA0ICkgKiBhMDA0ICsgci56dztcbn1cbmZsb2F0IHB1bmN0dWFsTGlnaHRJbnRlbnNpdHlUb0lycmFkaWFuY2VGYWN0b3IoIGNvbnN0IGluIGZsb2F0IGxpZ2h0RGlzdGFuY2UsIGNvbnN0IGluIGZsb2F0IGN1dG9mZkRpc3RhbmNlLCBjb25zdCBpbiBmbG9hdCBkZWNheUV4cG9uZW50ICkge1xuI2lmIGRlZmluZWQgKCBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTIClcblx0ZmxvYXQgZGlzdGFuY2VGYWxsb2ZmID0gMS4wIC8gbWF4KCBwb3coIGxpZ2h0RGlzdGFuY2UsIGRlY2F5RXhwb25lbnQgKSwgMC4wMSApO1xuXHRpZiggY3V0b2ZmRGlzdGFuY2UgPiAwLjAgKSB7XG5cdFx0ZGlzdGFuY2VGYWxsb2ZmICo9IHBvdzIoIHNhdHVyYXRlKCAxLjAgLSBwb3c0KCBsaWdodERpc3RhbmNlIC8gY3V0b2ZmRGlzdGFuY2UgKSApICk7XG5cdH1cblx0cmV0dXJuIGRpc3RhbmNlRmFsbG9mZjtcbiNlbHNlXG5cdGlmKCBjdXRvZmZEaXN0YW5jZSA+IDAuMCAmJiBkZWNheUV4cG9uZW50ID4gMC4wICkge1xuXHRcdHJldHVybiBwb3coIHNhdHVyYXRlKCAtbGlnaHREaXN0YW5jZSAvIGN1dG9mZkRpc3RhbmNlICsgMS4wICksIGRlY2F5RXhwb25lbnQgKTtcblx0fVxuXHRyZXR1cm4gMS4wO1xuI2VuZGlmXG59XG52ZWMzIEJSREZfRGlmZnVzZV9MYW1iZXJ0KCBjb25zdCBpbiB2ZWMzIGRpZmZ1c2VDb2xvciApIHtcblx0cmV0dXJuIFJFQ0lQUk9DQUxfUEkgKiBkaWZmdXNlQ29sb3I7XG59XG52ZWMzIEZfU2NobGljayggY29uc3QgaW4gdmVjMyBzcGVjdWxhckNvbG9yLCBjb25zdCBpbiBmbG9hdCBkb3RMSCApIHtcblx0ZmxvYXQgZnJlc25lbCA9IGV4cDIoICggLTUuNTU0NzMgKiBkb3RMSCAtIDYuOTgzMTYgKSAqIGRvdExIICk7XG5cdHJldHVybiAoIDEuMCAtIHNwZWN1bGFyQ29sb3IgKSAqIGZyZXNuZWwgKyBzcGVjdWxhckNvbG9yO1xufVxudmVjMyBGX1NjaGxpY2tfUm91Z2huZXNzRGVwZW5kZW50KCBjb25zdCBpbiB2ZWMzIEYwLCBjb25zdCBpbiBmbG9hdCBkb3ROViwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkge1xuXHRmbG9hdCBmcmVzbmVsID0gZXhwMiggKCAtNS41NTQ3MyAqIGRvdE5WIC0gNi45ODMxNiApICogZG90TlYgKTtcblx0dmVjMyBGciA9IG1heCggdmVjMyggMS4wIC0gcm91Z2huZXNzICksIEYwICkgLSBGMDtcblx0cmV0dXJuIEZyICogZnJlc25lbCArIEYwO1xufVxuZmxvYXQgR19HR1hfU21pdGgoIGNvbnN0IGluIGZsb2F0IGFscGhhLCBjb25zdCBpbiBmbG9hdCBkb3ROTCwgY29uc3QgaW4gZmxvYXQgZG90TlYgKSB7XG5cdGZsb2F0IGEyID0gcG93MiggYWxwaGEgKTtcblx0ZmxvYXQgZ2wgPSBkb3ROTCArIHNxcnQoIGEyICsgKCAxLjAgLSBhMiApICogcG93MiggZG90TkwgKSApO1xuXHRmbG9hdCBndiA9IGRvdE5WICsgc3FydCggYTIgKyAoIDEuMCAtIGEyICkgKiBwb3cyKCBkb3ROViApICk7XG5cdHJldHVybiAxLjAgLyAoIGdsICogZ3YgKTtcbn1cbmZsb2F0IEdfR0dYX1NtaXRoQ29ycmVsYXRlZCggY29uc3QgaW4gZmxvYXQgYWxwaGEsIGNvbnN0IGluIGZsb2F0IGRvdE5MLCBjb25zdCBpbiBmbG9hdCBkb3ROViApIHtcblx0ZmxvYXQgYTIgPSBwb3cyKCBhbHBoYSApO1xuXHRmbG9hdCBndiA9IGRvdE5MICogc3FydCggYTIgKyAoIDEuMCAtIGEyICkgKiBwb3cyKCBkb3ROViApICk7XG5cdGZsb2F0IGdsID0gZG90TlYgKiBzcXJ0KCBhMiArICggMS4wIC0gYTIgKSAqIHBvdzIoIGRvdE5MICkgKTtcblx0cmV0dXJuIDAuNSAvIG1heCggZ3YgKyBnbCwgRVBTSUxPTiApO1xufVxuZmxvYXQgRF9HR1goIGNvbnN0IGluIGZsb2F0IGFscGhhLCBjb25zdCBpbiBmbG9hdCBkb3ROSCApIHtcblx0ZmxvYXQgYTIgPSBwb3cyKCBhbHBoYSApO1xuXHRmbG9hdCBkZW5vbSA9IHBvdzIoIGRvdE5IICkgKiAoIGEyIC0gMS4wICkgKyAxLjA7XG5cdHJldHVybiBSRUNJUFJPQ0FMX1BJICogYTIgLyBwb3cyKCBkZW5vbSApO1xufVxudmVjMyBCUkRGX1NwZWN1bGFyX0dHWCggY29uc3QgaW4gSW5jaWRlbnRMaWdodCBpbmNpZGVudExpZ2h0LCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHtcblx0ZmxvYXQgYWxwaGEgPSBwb3cyKCByb3VnaG5lc3MgKTtcblx0dmVjMyBoYWxmRGlyID0gbm9ybWFsaXplKCBpbmNpZGVudExpZ2h0LmRpcmVjdGlvbiArIHZpZXdEaXIgKTtcblx0ZmxvYXQgZG90TkwgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIGluY2lkZW50TGlnaHQuZGlyZWN0aW9uICkgKTtcblx0ZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIHZpZXdEaXIgKSApO1xuXHRmbG9hdCBkb3ROSCA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgaGFsZkRpciApICk7XG5cdGZsb2F0IGRvdExIID0gc2F0dXJhdGUoIGRvdCggaW5jaWRlbnRMaWdodC5kaXJlY3Rpb24sIGhhbGZEaXIgKSApO1xuXHR2ZWMzIEYgPSBGX1NjaGxpY2soIHNwZWN1bGFyQ29sb3IsIGRvdExIICk7XG5cdGZsb2F0IEcgPSBHX0dHWF9TbWl0aENvcnJlbGF0ZWQoIGFscGhhLCBkb3ROTCwgZG90TlYgKTtcblx0ZmxvYXQgRCA9IERfR0dYKCBhbHBoYSwgZG90TkggKTtcblx0cmV0dXJuIEYgKiAoIEcgKiBEICk7XG59XG52ZWMyIExUQ19VdiggY29uc3QgaW4gdmVjMyBOLCBjb25zdCBpbiB2ZWMzIFYsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHtcblx0Y29uc3QgZmxvYXQgTFVUX1NJWkUgPSA2NC4wO1xuXHRjb25zdCBmbG9hdCBMVVRfU0NBTEUgPSAoIExVVF9TSVpFIC0gMS4wICkgLyBMVVRfU0laRTtcblx0Y29uc3QgZmxvYXQgTFVUX0JJQVMgPSAwLjUgLyBMVVRfU0laRTtcblx0ZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBOLCBWICkgKTtcblx0dmVjMiB1diA9IHZlYzIoIHJvdWdobmVzcywgc3FydCggMS4wIC0gZG90TlYgKSApO1xuXHR1diA9IHV2ICogTFVUX1NDQUxFICsgTFVUX0JJQVM7XG5cdHJldHVybiB1djtcbn1cbmZsb2F0IExUQ19DbGlwcGVkU3BoZXJlRm9ybUZhY3RvciggY29uc3QgaW4gdmVjMyBmICkge1xuXHRmbG9hdCBsID0gbGVuZ3RoKCBmICk7XG5cdHJldHVybiBtYXgoICggbCAqIGwgKyBmLnogKSAvICggbCArIDEuMCApLCAwLjAgKTtcbn1cbnZlYzMgTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb25zdCBpbiB2ZWMzIHYxLCBjb25zdCBpbiB2ZWMzIHYyICkge1xuXHRmbG9hdCB4ID0gZG90KCB2MSwgdjIgKTtcblx0ZmxvYXQgeSA9IGFicyggeCApO1xuXHRmbG9hdCBhID0gMC44NTQzOTg1ICsgKCAwLjQ5NjUxNTUgKyAwLjAxNDUyMDYgKiB5ICkgKiB5O1xuXHRmbG9hdCBiID0gMy40MTc1OTQwICsgKCA0LjE2MTY3MjQgKyB5ICkgKiB5O1xuXHRmbG9hdCB2ID0gYSAvIGI7XG5cdGZsb2F0IHRoZXRhX3NpbnRoZXRhID0gKCB4ID4gMC4wICkgPyB2IDogMC41ICogaW52ZXJzZXNxcnQoIG1heCggMS4wIC0geCAqIHgsIDFlLTcgKSApIC0gdjtcblx0cmV0dXJuIGNyb3NzKCB2MSwgdjIgKSAqIHRoZXRhX3NpbnRoZXRhO1xufVxudmVjMyBMVENfRXZhbHVhdGUoIGNvbnN0IGluIHZlYzMgTiwgY29uc3QgaW4gdmVjMyBWLCBjb25zdCBpbiB2ZWMzIFAsIGNvbnN0IGluIG1hdDMgbUludiwgY29uc3QgaW4gdmVjMyByZWN0Q29vcmRzWyA0IF0gKSB7XG5cdHZlYzMgdjEgPSByZWN0Q29vcmRzWyAxIF0gLSByZWN0Q29vcmRzWyAwIF07XG5cdHZlYzMgdjIgPSByZWN0Q29vcmRzWyAzIF0gLSByZWN0Q29vcmRzWyAwIF07XG5cdHZlYzMgbGlnaHROb3JtYWwgPSBjcm9zcyggdjEsIHYyICk7XG5cdGlmKCBkb3QoIGxpZ2h0Tm9ybWFsLCBQIC0gcmVjdENvb3Jkc1sgMCBdICkgPCAwLjAgKSByZXR1cm4gdmVjMyggMC4wICk7XG5cdHZlYzMgVDEsIFQyO1xuXHRUMSA9IG5vcm1hbGl6ZSggViAtIE4gKiBkb3QoIFYsIE4gKSApO1xuXHRUMiA9IC0gY3Jvc3MoIE4sIFQxICk7XG5cdG1hdDMgbWF0ID0gbUludiAqIHRyYW5zcG9zZU1hdDMoIG1hdDMoIFQxLCBUMiwgTiApICk7XG5cdHZlYzMgY29vcmRzWyA0IF07XG5cdGNvb3Jkc1sgMCBdID0gbWF0ICogKCByZWN0Q29vcmRzWyAwIF0gLSBQICk7XG5cdGNvb3Jkc1sgMSBdID0gbWF0ICogKCByZWN0Q29vcmRzWyAxIF0gLSBQICk7XG5cdGNvb3Jkc1sgMiBdID0gbWF0ICogKCByZWN0Q29vcmRzWyAyIF0gLSBQICk7XG5cdGNvb3Jkc1sgMyBdID0gbWF0ICogKCByZWN0Q29vcmRzWyAzIF0gLSBQICk7XG5cdGNvb3Jkc1sgMCBdID0gbm9ybWFsaXplKCBjb29yZHNbIDAgXSApO1xuXHRjb29yZHNbIDEgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAxIF0gKTtcblx0Y29vcmRzWyAyIF0gPSBub3JtYWxpemUoIGNvb3Jkc1sgMiBdICk7XG5cdGNvb3Jkc1sgMyBdID0gbm9ybWFsaXplKCBjb29yZHNbIDMgXSApO1xuXHR2ZWMzIHZlY3RvckZvcm1GYWN0b3IgPSB2ZWMzKCAwLjAgKTtcblx0dmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMCBdLCBjb29yZHNbIDEgXSApO1xuXHR2ZWN0b3JGb3JtRmFjdG9yICs9IExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29vcmRzWyAxIF0sIGNvb3Jkc1sgMiBdICk7XG5cdHZlY3RvckZvcm1GYWN0b3IgKz0gTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb29yZHNbIDIgXSwgY29vcmRzWyAzIF0gKTtcblx0dmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMyBdLCBjb29yZHNbIDAgXSApO1xuXHRmbG9hdCByZXN1bHQgPSBMVENfQ2xpcHBlZFNwaGVyZUZvcm1GYWN0b3IoIHZlY3RvckZvcm1GYWN0b3IgKTtcblx0cmV0dXJuIHZlYzMoIHJlc3VsdCApO1xufVxudmVjMyBCUkRGX1NwZWN1bGFyX0dHWF9FbnZpcm9ubWVudCggY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyBzcGVjdWxhckNvbG9yLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7XG5cdGZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCB2aWV3RGlyICkgKTtcblx0dmVjMiBicmRmID0gaW50ZWdyYXRlU3BlY3VsYXJCUkRGKCBkb3ROViwgcm91Z2huZXNzICk7XG5cdHJldHVybiBzcGVjdWxhckNvbG9yICogYnJkZi54ICsgYnJkZi55O1xufVxudm9pZCBCUkRGX1NwZWN1bGFyX011bHRpc2NhdHRlcmluZ19FbnZpcm9ubWVudCggY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gdmVjMyBzcGVjdWxhckNvbG9yLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGlub3V0IHZlYzMgc2luZ2xlU2NhdHRlciwgaW5vdXQgdmVjMyBtdWx0aVNjYXR0ZXIgKSB7XG5cdGZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyICkgKTtcblx0dmVjMyBGID0gRl9TY2hsaWNrX1JvdWdobmVzc0RlcGVuZGVudCggc3BlY3VsYXJDb2xvciwgZG90TlYsIHJvdWdobmVzcyApO1xuXHR2ZWMyIGJyZGYgPSBpbnRlZ3JhdGVTcGVjdWxhckJSREYoIGRvdE5WLCByb3VnaG5lc3MgKTtcblx0dmVjMyBGc3NFc3MgPSBGICogYnJkZi54ICsgYnJkZi55O1xuXHRmbG9hdCBFc3MgPSBicmRmLnggKyBicmRmLnk7XG5cdGZsb2F0IEVtcyA9IDEuMCAtIEVzcztcblx0dmVjMyBGYXZnID0gc3BlY3VsYXJDb2xvciArICggMS4wIC0gc3BlY3VsYXJDb2xvciApICogMC4wNDc2MTk7XHR2ZWMzIEZtcyA9IEZzc0VzcyAqIEZhdmcgLyAoIDEuMCAtIEVtcyAqIEZhdmcgKTtcblx0c2luZ2xlU2NhdHRlciArPSBGc3NFc3M7XG5cdG11bHRpU2NhdHRlciArPSBGbXMgKiBFbXM7XG59XG5mbG9hdCBHX0JsaW5uUGhvbmdfSW1wbGljaXQoICkge1xuXHRyZXR1cm4gMC4yNTtcbn1cbmZsb2F0IERfQmxpbm5QaG9uZyggY29uc3QgaW4gZmxvYXQgc2hpbmluZXNzLCBjb25zdCBpbiBmbG9hdCBkb3ROSCApIHtcblx0cmV0dXJuIFJFQ0lQUk9DQUxfUEkgKiAoIHNoaW5pbmVzcyAqIDAuNSArIDEuMCApICogcG93KCBkb3ROSCwgc2hpbmluZXNzICk7XG59XG52ZWMzIEJSREZfU3BlY3VsYXJfQmxpbm5QaG9uZyggY29uc3QgaW4gSW5jaWRlbnRMaWdodCBpbmNpZGVudExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNoaW5pbmVzcyApIHtcblx0dmVjMyBoYWxmRGlyID0gbm9ybWFsaXplKCBpbmNpZGVudExpZ2h0LmRpcmVjdGlvbiArIGdlb21ldHJ5LnZpZXdEaXIgKTtcblx0ZmxvYXQgZG90TkggPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGhhbGZEaXIgKSApO1xuXHRmbG9hdCBkb3RMSCA9IHNhdHVyYXRlKCBkb3QoIGluY2lkZW50TGlnaHQuZGlyZWN0aW9uLCBoYWxmRGlyICkgKTtcblx0dmVjMyBGID0gRl9TY2hsaWNrKCBzcGVjdWxhckNvbG9yLCBkb3RMSCApO1xuXHRmbG9hdCBHID0gR19CbGlublBob25nX0ltcGxpY2l0KCApO1xuXHRmbG9hdCBEID0gRF9CbGlublBob25nKCBzaGluaW5lc3MsIGRvdE5IICk7XG5cdHJldHVybiBGICogKCBHICogRCApO1xufVxuZmxvYXQgR0dYUm91Z2huZXNzVG9CbGlubkV4cG9uZW50KCBjb25zdCBpbiBmbG9hdCBnZ3hSb3VnaG5lc3MgKSB7XG5cdHJldHVybiAoIDIuMCAvIHBvdzIoIGdneFJvdWdobmVzcyArIDAuMDAwMSApIC0gMi4wICk7XG59XG5mbG9hdCBCbGlubkV4cG9uZW50VG9HR1hSb3VnaG5lc3MoIGNvbnN0IGluIGZsb2F0IGJsaW5uRXhwb25lbnQgKSB7XG5cdHJldHVybiBzcXJ0KCAyLjAgLyAoIGJsaW5uRXhwb25lbnQgKyAyLjAgKSApO1xufVxuI2lmIGRlZmluZWQoIFVTRV9TSEVFTiApXG5mbG9hdCBEX0NoYXJsaWUoZmxvYXQgcm91Z2huZXNzLCBmbG9hdCBOb0gpIHtcblx0ZmxvYXQgaW52QWxwaGEgPSAxLjAgLyByb3VnaG5lc3M7XG5cdGZsb2F0IGNvczJoID0gTm9IICogTm9IO1xuXHRmbG9hdCBzaW4yaCA9IG1heCgxLjAgLSBjb3MyaCwgMC4wMDc4MTI1KTtcdHJldHVybiAoMi4wICsgaW52QWxwaGEpICogcG93KHNpbjJoLCBpbnZBbHBoYSAqIDAuNSkgLyAoMi4wICogUEkpO1xufVxuZmxvYXQgVl9OZXViZWx0KGZsb2F0IE5vViwgZmxvYXQgTm9MKSB7XG5cdHJldHVybiBzYXR1cmF0ZSgxLjAgLyAoNC4wICogKE5vTCArIE5vViAtIE5vTCAqIE5vVikpKTtcbn1cbnZlYzMgQlJERl9TcGVjdWxhcl9TaGVlbiggY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzLCBjb25zdCBpbiB2ZWMzIEwsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIHZlYzMgc3BlY3VsYXJDb2xvciApIHtcblx0dmVjMyBOID0gZ2VvbWV0cnkubm9ybWFsO1xuXHR2ZWMzIFYgPSBnZW9tZXRyeS52aWV3RGlyO1xuXHR2ZWMzIEggPSBub3JtYWxpemUoIFYgKyBMICk7XG5cdGZsb2F0IGRvdE5IID0gc2F0dXJhdGUoIGRvdCggTiwgSCApICk7XG5cdHJldHVybiBzcGVjdWxhckNvbG9yICogRF9DaGFybGllKCByb3VnaG5lc3MsIGRvdE5IICkgKiBWX05ldWJlbHQoIGRvdChOLCBWKSwgZG90KE4sIEwpICk7XG59XG4jZW5kaWYiLGJ1bXBtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9CVU1QTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGJ1bXBNYXA7XG5cdHVuaWZvcm0gZmxvYXQgYnVtcFNjYWxlO1xuXHR2ZWMyIGRIZHh5X2Z3ZCgpIHtcblx0XHR2ZWMyIGRTVGR4ID0gZEZkeCggdlV2ICk7XG5cdFx0dmVjMiBkU1RkeSA9IGRGZHkoIHZVdiApO1xuXHRcdGZsb2F0IEhsbCA9IGJ1bXBTY2FsZSAqIHRleHR1cmUyRCggYnVtcE1hcCwgdlV2ICkueDtcblx0XHRmbG9hdCBkQnggPSBidW1wU2NhbGUgKiB0ZXh0dXJlMkQoIGJ1bXBNYXAsIHZVdiArIGRTVGR4ICkueCAtIEhsbDtcblx0XHRmbG9hdCBkQnkgPSBidW1wU2NhbGUgKiB0ZXh0dXJlMkQoIGJ1bXBNYXAsIHZVdiArIGRTVGR5ICkueCAtIEhsbDtcblx0XHRyZXR1cm4gdmVjMiggZEJ4LCBkQnkgKTtcblx0fVxuXHR2ZWMzIHBlcnR1cmJOb3JtYWxBcmIoIHZlYzMgc3VyZl9wb3MsIHZlYzMgc3VyZl9ub3JtLCB2ZWMyIGRIZHh5ICkge1xuXHRcdHZlYzMgdlNpZ21hWCA9IHZlYzMoIGRGZHgoIHN1cmZfcG9zLnggKSwgZEZkeCggc3VyZl9wb3MueSApLCBkRmR4KCBzdXJmX3Bvcy56ICkgKTtcblx0XHR2ZWMzIHZTaWdtYVkgPSB2ZWMzKCBkRmR5KCBzdXJmX3Bvcy54ICksIGRGZHkoIHN1cmZfcG9zLnkgKSwgZEZkeSggc3VyZl9wb3MueiApICk7XG5cdFx0dmVjMyB2TiA9IHN1cmZfbm9ybTtcblx0XHR2ZWMzIFIxID0gY3Jvc3MoIHZTaWdtYVksIHZOICk7XG5cdFx0dmVjMyBSMiA9IGNyb3NzKCB2TiwgdlNpZ21hWCApO1xuXHRcdGZsb2F0IGZEZXQgPSBkb3QoIHZTaWdtYVgsIFIxICk7XG5cdFx0ZkRldCAqPSAoIGZsb2F0KCBnbF9Gcm9udEZhY2luZyApICogMi4wIC0gMS4wICk7XG5cdFx0dmVjMyB2R3JhZCA9IHNpZ24oIGZEZXQgKSAqICggZEhkeHkueCAqIFIxICsgZEhkeHkueSAqIFIyICk7XG5cdFx0cmV0dXJuIG5vcm1hbGl6ZSggYWJzKCBmRGV0ICkgKiBzdXJmX25vcm0gLSB2R3JhZCApO1xuXHR9XG4jZW5kaWYiLGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudDoiI2lmIE5VTV9DTElQUElOR19QTEFORVMgPiAwXG5cdHZlYzQgcGxhbmU7XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgVU5JT05fQ0xJUFBJTkdfUExBTkVTOyBpICsrICkge1xuXHRcdHBsYW5lID0gY2xpcHBpbmdQbGFuZXNbIGkgXTtcblx0XHRpZiAoIGRvdCggdkNsaXBQb3NpdGlvbiwgcGxhbmUueHl6ICkgPiBwbGFuZS53ICkgZGlzY2FyZDtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuXHQjaWYgVU5JT05fQ0xJUFBJTkdfUExBTkVTIDwgTlVNX0NMSVBQSU5HX1BMQU5FU1xuXHRcdGJvb2wgY2xpcHBlZCA9IHRydWU7XG5cdFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRcdGZvciAoIGludCBpID0gVU5JT05fQ0xJUFBJTkdfUExBTkVTOyBpIDwgTlVNX0NMSVBQSU5HX1BMQU5FUzsgaSArKyApIHtcblx0XHRcdHBsYW5lID0gY2xpcHBpbmdQbGFuZXNbIGkgXTtcblx0XHRcdGNsaXBwZWQgPSAoIGRvdCggdkNsaXBQb3NpdGlvbiwgcGxhbmUueHl6ICkgPiBwbGFuZS53ICkgJiYgY2xpcHBlZDtcblx0XHR9XG5cdFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcblx0XHRpZiAoIGNsaXBwZWQgKSBkaXNjYXJkO1xuXHQjZW5kaWZcbiNlbmRpZiIsY2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ6IiNpZiBOVU1fQ0xJUFBJTkdfUExBTkVTID4gMFxuXHR2YXJ5aW5nIHZlYzMgdkNsaXBQb3NpdGlvbjtcblx0dW5pZm9ybSB2ZWM0IGNsaXBwaW5nUGxhbmVzWyBOVU1fQ0xJUFBJTkdfUExBTkVTIF07XG4jZW5kaWYiLGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleDoiI2lmIE5VTV9DTElQUElOR19QTEFORVMgPiAwXG5cdHZhcnlpbmcgdmVjMyB2Q2xpcFBvc2l0aW9uO1xuI2VuZGlmIixjbGlwcGluZ19wbGFuZXNfdmVydGV4OiIjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyA+IDBcblx0dkNsaXBQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7XG4jZW5kaWYiLGNvbG9yX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0NPTE9SXG5cdGRpZmZ1c2VDb2xvci5yZ2IgKj0gdkNvbG9yO1xuI2VuZGlmIixjb2xvcl9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0NPTE9SXG5cdHZhcnlpbmcgdmVjMyB2Q29sb3I7XG4jZW5kaWYiLGNvbG9yX3BhcnNfdmVydGV4OiIjaWYgZGVmaW5lZCggVVNFX0NPTE9SICkgfHwgZGVmaW5lZCggVVNFX0lOU1RBTkNJTkdfQ09MT1IgKVxuXHR2YXJ5aW5nIHZlYzMgdkNvbG9yO1xuI2VuZGlmIixjb2xvcl92ZXJ0ZXg6IiNpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKSB8fCBkZWZpbmVkKCBVU0VfSU5TVEFOQ0lOR19DT0xPUiApXG5cdHZDb2xvciA9IHZlYzMoIDEuMCApO1xuI2VuZGlmXG4jaWZkZWYgVVNFX0NPTE9SXG5cdHZDb2xvci54eXogKj0gY29sb3IueHl6O1xuI2VuZGlmXG4jaWZkZWYgVVNFX0lOU1RBTkNJTkdfQ09MT1Jcblx0dkNvbG9yLnh5eiAqPSBpbnN0YW5jZUNvbG9yLnh5ejtcbiNlbmRpZiIsY29tbW9uOiIjZGVmaW5lIFBJIDMuMTQxNTkyNjUzNTg5NzkzXG4jZGVmaW5lIFBJMiA2LjI4MzE4NTMwNzE3OTU4NlxuI2RlZmluZSBQSV9IQUxGIDEuNTcwNzk2MzI2Nzk0ODk2NlxuI2RlZmluZSBSRUNJUFJPQ0FMX1BJIDAuMzE4MzA5ODg2MTgzNzkwN1xuI2RlZmluZSBSRUNJUFJPQ0FMX1BJMiAwLjE1OTE1NDk0MzA5MTg5NTM1XG4jZGVmaW5lIEVQU0lMT04gMWUtNlxuI2lmbmRlZiBzYXR1cmF0ZVxuI2RlZmluZSBzYXR1cmF0ZShhKSBjbGFtcCggYSwgMC4wLCAxLjAgKVxuI2VuZGlmXG4jZGVmaW5lIHdoaXRlQ29tcGxlbWVudChhKSAoIDEuMCAtIHNhdHVyYXRlKCBhICkgKVxuZmxvYXQgcG93MiggY29uc3QgaW4gZmxvYXQgeCApIHsgcmV0dXJuIHgqeDsgfVxuZmxvYXQgcG93MyggY29uc3QgaW4gZmxvYXQgeCApIHsgcmV0dXJuIHgqeCp4OyB9XG5mbG9hdCBwb3c0KCBjb25zdCBpbiBmbG9hdCB4ICkgeyBmbG9hdCB4MiA9IHgqeDsgcmV0dXJuIHgyKngyOyB9XG5mbG9hdCBhdmVyYWdlKCBjb25zdCBpbiB2ZWMzIGNvbG9yICkgeyByZXR1cm4gZG90KCBjb2xvciwgdmVjMyggMC4zMzMzICkgKTsgfVxuaGlnaHAgZmxvYXQgcmFuZCggY29uc3QgaW4gdmVjMiB1diApIHtcblx0Y29uc3QgaGlnaHAgZmxvYXQgYSA9IDEyLjk4OTgsIGIgPSA3OC4yMzMsIGMgPSA0Mzc1OC41NDUzO1xuXHRoaWdocCBmbG9hdCBkdCA9IGRvdCggdXYueHksIHZlYzIoIGEsYiApICksIHNuID0gbW9kKCBkdCwgUEkgKTtcblx0cmV0dXJuIGZyYWN0KHNpbihzbikgKiBjKTtcbn1cbiNpZmRlZiBISUdIX1BSRUNJU0lPTlxuXHRmbG9hdCBwcmVjaXNpb25TYWZlTGVuZ3RoKCB2ZWMzIHYgKSB7IHJldHVybiBsZW5ndGgoIHYgKTsgfVxuI2Vsc2Vcblx0ZmxvYXQgbWF4MyggdmVjMyB2ICkgeyByZXR1cm4gbWF4KCBtYXgoIHYueCwgdi55ICksIHYueiApOyB9XG5cdGZsb2F0IHByZWNpc2lvblNhZmVMZW5ndGgoIHZlYzMgdiApIHtcblx0XHRmbG9hdCBtYXhDb21wb25lbnQgPSBtYXgzKCBhYnMoIHYgKSApO1xuXHRcdHJldHVybiBsZW5ndGgoIHYgLyBtYXhDb21wb25lbnQgKSAqIG1heENvbXBvbmVudDtcblx0fVxuI2VuZGlmXG5zdHJ1Y3QgSW5jaWRlbnRMaWdodCB7XG5cdHZlYzMgY29sb3I7XG5cdHZlYzMgZGlyZWN0aW9uO1xuXHRib29sIHZpc2libGU7XG59O1xuc3RydWN0IFJlZmxlY3RlZExpZ2h0IHtcblx0dmVjMyBkaXJlY3REaWZmdXNlO1xuXHR2ZWMzIGRpcmVjdFNwZWN1bGFyO1xuXHR2ZWMzIGluZGlyZWN0RGlmZnVzZTtcblx0dmVjMyBpbmRpcmVjdFNwZWN1bGFyO1xufTtcbnN0cnVjdCBHZW9tZXRyaWNDb250ZXh0IHtcblx0dmVjMyBwb3NpdGlvbjtcblx0dmVjMyBub3JtYWw7XG5cdHZlYzMgdmlld0RpcjtcbiNpZmRlZiBDTEVBUkNPQVRcblx0dmVjMyBjbGVhcmNvYXROb3JtYWw7XG4jZW5kaWZcbn07XG52ZWMzIHRyYW5zZm9ybURpcmVjdGlvbiggaW4gdmVjMyBkaXIsIGluIG1hdDQgbWF0cml4ICkge1xuXHRyZXR1cm4gbm9ybWFsaXplKCAoIG1hdHJpeCAqIHZlYzQoIGRpciwgMC4wICkgKS54eXogKTtcbn1cbnZlYzMgaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggaW4gdmVjMyBkaXIsIGluIG1hdDQgbWF0cml4ICkge1xuXHRyZXR1cm4gbm9ybWFsaXplKCAoIHZlYzQoIGRpciwgMC4wICkgKiBtYXRyaXggKS54eXogKTtcbn1cbnZlYzMgcHJvamVjdE9uUGxhbmUoaW4gdmVjMyBwb2ludCwgaW4gdmVjMyBwb2ludE9uUGxhbmUsIGluIHZlYzMgcGxhbmVOb3JtYWwgKSB7XG5cdGZsb2F0IGRpc3RhbmNlID0gZG90KCBwbGFuZU5vcm1hbCwgcG9pbnQgLSBwb2ludE9uUGxhbmUgKTtcblx0cmV0dXJuIC0gZGlzdGFuY2UgKiBwbGFuZU5vcm1hbCArIHBvaW50O1xufVxuZmxvYXQgc2lkZU9mUGxhbmUoIGluIHZlYzMgcG9pbnQsIGluIHZlYzMgcG9pbnRPblBsYW5lLCBpbiB2ZWMzIHBsYW5lTm9ybWFsICkge1xuXHRyZXR1cm4gc2lnbiggZG90KCBwb2ludCAtIHBvaW50T25QbGFuZSwgcGxhbmVOb3JtYWwgKSApO1xufVxudmVjMyBsaW5lUGxhbmVJbnRlcnNlY3QoIGluIHZlYzMgcG9pbnRPbkxpbmUsIGluIHZlYzMgbGluZURpcmVjdGlvbiwgaW4gdmVjMyBwb2ludE9uUGxhbmUsIGluIHZlYzMgcGxhbmVOb3JtYWwgKSB7XG5cdHJldHVybiBsaW5lRGlyZWN0aW9uICogKCBkb3QoIHBsYW5lTm9ybWFsLCBwb2ludE9uUGxhbmUgLSBwb2ludE9uTGluZSApIC8gZG90KCBwbGFuZU5vcm1hbCwgbGluZURpcmVjdGlvbiApICkgKyBwb2ludE9uTGluZTtcbn1cbm1hdDMgdHJhbnNwb3NlTWF0MyggY29uc3QgaW4gbWF0MyBtICkge1xuXHRtYXQzIHRtcDtcblx0dG1wWyAwIF0gPSB2ZWMzKCBtWyAwIF0ueCwgbVsgMSBdLngsIG1bIDIgXS54ICk7XG5cdHRtcFsgMSBdID0gdmVjMyggbVsgMCBdLnksIG1bIDEgXS55LCBtWyAyIF0ueSApO1xuXHR0bXBbIDIgXSA9IHZlYzMoIG1bIDAgXS56LCBtWyAxIF0ueiwgbVsgMiBdLnogKTtcblx0cmV0dXJuIHRtcDtcbn1cbmZsb2F0IGxpbmVhclRvUmVsYXRpdmVMdW1pbmFuY2UoIGNvbnN0IGluIHZlYzMgY29sb3IgKSB7XG5cdHZlYzMgd2VpZ2h0cyA9IHZlYzMoIDAuMjEyNiwgMC43MTUyLCAwLjA3MjIgKTtcblx0cmV0dXJuIGRvdCggd2VpZ2h0cywgY29sb3IucmdiICk7XG59XG5ib29sIGlzUGVyc3BlY3RpdmVNYXRyaXgoIG1hdDQgbSApIHtcblx0cmV0dXJuIG1bIDIgXVsgMyBdID09IC0gMS4wO1xufVxudmVjMiBlcXVpcmVjdFV2KCBpbiB2ZWMzIGRpciApIHtcblx0ZmxvYXQgdSA9IGF0YW4oIGRpci56LCBkaXIueCApICogUkVDSVBST0NBTF9QSTIgKyAwLjU7XG5cdGZsb2F0IHYgPSBhc2luKCBjbGFtcCggZGlyLnksIC0gMS4wLCAxLjAgKSApICogUkVDSVBST0NBTF9QSSArIDAuNTtcblx0cmV0dXJuIHZlYzIoIHUsIHYgKTtcbn0iLGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudDoiI2lmZGVmIEVOVk1BUF9UWVBFX0NVQkVfVVZcblx0I2RlZmluZSBjdWJlVVZfbWF4TWlwTGV2ZWwgOC4wXG5cdCNkZWZpbmUgY3ViZVVWX21pbk1pcExldmVsIDQuMFxuXHQjZGVmaW5lIGN1YmVVVl9tYXhUaWxlU2l6ZSAyNTYuMFxuXHQjZGVmaW5lIGN1YmVVVl9taW5UaWxlU2l6ZSAxNi4wXG5cdGZsb2F0IGdldEZhY2UoIHZlYzMgZGlyZWN0aW9uICkge1xuXHRcdHZlYzMgYWJzRGlyZWN0aW9uID0gYWJzKCBkaXJlY3Rpb24gKTtcblx0XHRmbG9hdCBmYWNlID0gLSAxLjA7XG5cdFx0aWYgKCBhYnNEaXJlY3Rpb24ueCA+IGFic0RpcmVjdGlvbi56ICkge1xuXHRcdFx0aWYgKCBhYnNEaXJlY3Rpb24ueCA+IGFic0RpcmVjdGlvbi55IClcblx0XHRcdFx0ZmFjZSA9IGRpcmVjdGlvbi54ID4gMC4wID8gMC4wIDogMy4wO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRmYWNlID0gZGlyZWN0aW9uLnkgPiAwLjAgPyAxLjAgOiA0LjA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICggYWJzRGlyZWN0aW9uLnogPiBhYnNEaXJlY3Rpb24ueSApXG5cdFx0XHRcdGZhY2UgPSBkaXJlY3Rpb24ueiA+IDAuMCA/IDIuMCA6IDUuMDtcblx0XHRcdGVsc2Vcblx0XHRcdFx0ZmFjZSA9IGRpcmVjdGlvbi55ID4gMC4wID8gMS4wIDogNC4wO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFjZTtcblx0fVxuXHR2ZWMyIGdldFVWKCB2ZWMzIGRpcmVjdGlvbiwgZmxvYXQgZmFjZSApIHtcblx0XHR2ZWMyIHV2O1xuXHRcdGlmICggZmFjZSA9PSAwLjAgKSB7XG5cdFx0XHR1diA9IHZlYzIoIGRpcmVjdGlvbi56LCBkaXJlY3Rpb24ueSApIC8gYWJzKCBkaXJlY3Rpb24ueCApO1xuXHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gMS4wICkge1xuXHRcdFx0dXYgPSB2ZWMyKCAtIGRpcmVjdGlvbi54LCAtIGRpcmVjdGlvbi56ICkgLyBhYnMoIGRpcmVjdGlvbi55ICk7XG5cdFx0fSBlbHNlIGlmICggZmFjZSA9PSAyLjAgKSB7XG5cdFx0XHR1diA9IHZlYzIoIC0gZGlyZWN0aW9uLngsIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi56ICk7XG5cdFx0fSBlbHNlIGlmICggZmFjZSA9PSAzLjAgKSB7XG5cdFx0XHR1diA9IHZlYzIoIC0gZGlyZWN0aW9uLnosIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi54ICk7XG5cdFx0fSBlbHNlIGlmICggZmFjZSA9PSA0LjAgKSB7XG5cdFx0XHR1diA9IHZlYzIoIC0gZGlyZWN0aW9uLngsIGRpcmVjdGlvbi56ICkgLyBhYnMoIGRpcmVjdGlvbi55ICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHV2ID0gdmVjMiggZGlyZWN0aW9uLngsIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi56ICk7XG5cdFx0fVxuXHRcdHJldHVybiAwLjUgKiAoIHV2ICsgMS4wICk7XG5cdH1cblx0dmVjMyBiaWxpbmVhckN1YmVVViggc2FtcGxlcjJEIGVudk1hcCwgdmVjMyBkaXJlY3Rpb24sIGZsb2F0IG1pcEludCApIHtcblx0XHRmbG9hdCBmYWNlID0gZ2V0RmFjZSggZGlyZWN0aW9uICk7XG5cdFx0ZmxvYXQgZmlsdGVySW50ID0gbWF4KCBjdWJlVVZfbWluTWlwTGV2ZWwgLSBtaXBJbnQsIDAuMCApO1xuXHRcdG1pcEludCA9IG1heCggbWlwSW50LCBjdWJlVVZfbWluTWlwTGV2ZWwgKTtcblx0XHRmbG9hdCBmYWNlU2l6ZSA9IGV4cDIoIG1pcEludCApO1xuXHRcdGZsb2F0IHRleGVsU2l6ZSA9IDEuMCAvICggMy4wICogY3ViZVVWX21heFRpbGVTaXplICk7XG5cdFx0dmVjMiB1diA9IGdldFVWKCBkaXJlY3Rpb24sIGZhY2UgKSAqICggZmFjZVNpemUgLSAxLjAgKTtcblx0XHR2ZWMyIGYgPSBmcmFjdCggdXYgKTtcblx0XHR1diArPSAwLjUgLSBmO1xuXHRcdGlmICggZmFjZSA+IDIuMCApIHtcblx0XHRcdHV2LnkgKz0gZmFjZVNpemU7XG5cdFx0XHRmYWNlIC09IDMuMDtcblx0XHR9XG5cdFx0dXYueCArPSBmYWNlICogZmFjZVNpemU7XG5cdFx0aWYgKCBtaXBJbnQgPCBjdWJlVVZfbWF4TWlwTGV2ZWwgKSB7XG5cdFx0XHR1di55ICs9IDIuMCAqIGN1YmVVVl9tYXhUaWxlU2l6ZTtcblx0XHR9XG5cdFx0dXYueSArPSBmaWx0ZXJJbnQgKiAyLjAgKiBjdWJlVVZfbWluVGlsZVNpemU7XG5cdFx0dXYueCArPSAzLjAgKiBtYXgoIDAuMCwgY3ViZVVWX21heFRpbGVTaXplIC0gMi4wICogZmFjZVNpemUgKTtcblx0XHR1diAqPSB0ZXhlbFNpemU7XG5cdFx0dmVjMyB0bCA9IGVudk1hcFRleGVsVG9MaW5lYXIoIHRleHR1cmUyRCggZW52TWFwLCB1diApICkucmdiO1xuXHRcdHV2LnggKz0gdGV4ZWxTaXplO1xuXHRcdHZlYzMgdHIgPSBlbnZNYXBUZXhlbFRvTGluZWFyKCB0ZXh0dXJlMkQoIGVudk1hcCwgdXYgKSApLnJnYjtcblx0XHR1di55ICs9IHRleGVsU2l6ZTtcblx0XHR2ZWMzIGJyID0gZW52TWFwVGV4ZWxUb0xpbmVhciggdGV4dHVyZTJEKCBlbnZNYXAsIHV2ICkgKS5yZ2I7XG5cdFx0dXYueCAtPSB0ZXhlbFNpemU7XG5cdFx0dmVjMyBibCA9IGVudk1hcFRleGVsVG9MaW5lYXIoIHRleHR1cmUyRCggZW52TWFwLCB1diApICkucmdiO1xuXHRcdHZlYzMgdG0gPSBtaXgoIHRsLCB0ciwgZi54ICk7XG5cdFx0dmVjMyBibSA9IG1peCggYmwsIGJyLCBmLnggKTtcblx0XHRyZXR1cm4gbWl4KCB0bSwgYm0sIGYueSApO1xuXHR9XG5cdCNkZWZpbmUgcjAgMS4wXG5cdCNkZWZpbmUgdjAgMC4zMzlcblx0I2RlZmluZSBtMCAtIDIuMFxuXHQjZGVmaW5lIHIxIDAuOFxuXHQjZGVmaW5lIHYxIDAuMjc2XG5cdCNkZWZpbmUgbTEgLSAxLjBcblx0I2RlZmluZSByNCAwLjRcblx0I2RlZmluZSB2NCAwLjA0NlxuXHQjZGVmaW5lIG00IDIuMFxuXHQjZGVmaW5lIHI1IDAuMzA1XG5cdCNkZWZpbmUgdjUgMC4wMTZcblx0I2RlZmluZSBtNSAzLjBcblx0I2RlZmluZSByNiAwLjIxXG5cdCNkZWZpbmUgdjYgMC4wMDM4XG5cdCNkZWZpbmUgbTYgNC4wXG5cdGZsb2F0IHJvdWdobmVzc1RvTWlwKCBmbG9hdCByb3VnaG5lc3MgKSB7XG5cdFx0ZmxvYXQgbWlwID0gMC4wO1xuXHRcdGlmICggcm91Z2huZXNzID49IHIxICkge1xuXHRcdFx0bWlwID0gKCByMCAtIHJvdWdobmVzcyApICogKCBtMSAtIG0wICkgLyAoIHIwIC0gcjEgKSArIG0wO1xuXHRcdH0gZWxzZSBpZiAoIHJvdWdobmVzcyA+PSByNCApIHtcblx0XHRcdG1pcCA9ICggcjEgLSByb3VnaG5lc3MgKSAqICggbTQgLSBtMSApIC8gKCByMSAtIHI0ICkgKyBtMTtcblx0XHR9IGVsc2UgaWYgKCByb3VnaG5lc3MgPj0gcjUgKSB7XG5cdFx0XHRtaXAgPSAoIHI0IC0gcm91Z2huZXNzICkgKiAoIG01IC0gbTQgKSAvICggcjQgLSByNSApICsgbTQ7XG5cdFx0fSBlbHNlIGlmICggcm91Z2huZXNzID49IHI2ICkge1xuXHRcdFx0bWlwID0gKCByNSAtIHJvdWdobmVzcyApICogKCBtNiAtIG01ICkgLyAoIHI1IC0gcjYgKSArIG01O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRtaXAgPSAtIDIuMCAqIGxvZzIoIDEuMTYgKiByb3VnaG5lc3MgKTtcdFx0fVxuXHRcdHJldHVybiBtaXA7XG5cdH1cblx0dmVjNCB0ZXh0dXJlQ3ViZVVWKCBzYW1wbGVyMkQgZW52TWFwLCB2ZWMzIHNhbXBsZURpciwgZmxvYXQgcm91Z2huZXNzICkge1xuXHRcdGZsb2F0IG1pcCA9IGNsYW1wKCByb3VnaG5lc3NUb01pcCggcm91Z2huZXNzICksIG0wLCBjdWJlVVZfbWF4TWlwTGV2ZWwgKTtcblx0XHRmbG9hdCBtaXBGID0gZnJhY3QoIG1pcCApO1xuXHRcdGZsb2F0IG1pcEludCA9IGZsb29yKCBtaXAgKTtcblx0XHR2ZWMzIGNvbG9yMCA9IGJpbGluZWFyQ3ViZVVWKCBlbnZNYXAsIHNhbXBsZURpciwgbWlwSW50ICk7XG5cdFx0aWYgKCBtaXBGID09IDAuMCApIHtcblx0XHRcdHJldHVybiB2ZWM0KCBjb2xvcjAsIDEuMCApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR2ZWMzIGNvbG9yMSA9IGJpbGluZWFyQ3ViZVVWKCBlbnZNYXAsIHNhbXBsZURpciwgbWlwSW50ICsgMS4wICk7XG5cdFx0XHRyZXR1cm4gdmVjNCggbWl4KCBjb2xvcjAsIGNvbG9yMSwgbWlwRiApLCAxLjAgKTtcblx0XHR9XG5cdH1cbiNlbmRpZiIsZGVmYXVsdG5vcm1hbF92ZXJ0ZXg6InZlYzMgdHJhbnNmb3JtZWROb3JtYWwgPSBvYmplY3ROb3JtYWw7XG4jaWZkZWYgVVNFX0lOU1RBTkNJTkdcblx0bWF0MyBtID0gbWF0MyggaW5zdGFuY2VNYXRyaXggKTtcblx0dHJhbnNmb3JtZWROb3JtYWwgLz0gdmVjMyggZG90KCBtWyAwIF0sIG1bIDAgXSApLCBkb3QoIG1bIDEgXSwgbVsgMSBdICksIGRvdCggbVsgMiBdLCBtWyAyIF0gKSApO1xuXHR0cmFuc2Zvcm1lZE5vcm1hbCA9IG0gKiB0cmFuc2Zvcm1lZE5vcm1hbDtcbiNlbmRpZlxudHJhbnNmb3JtZWROb3JtYWwgPSBub3JtYWxNYXRyaXggKiB0cmFuc2Zvcm1lZE5vcm1hbDtcbiNpZmRlZiBGTElQX1NJREVEXG5cdHRyYW5zZm9ybWVkTm9ybWFsID0gLSB0cmFuc2Zvcm1lZE5vcm1hbDtcbiNlbmRpZlxuI2lmZGVmIFVTRV9UQU5HRU5UXG5cdHZlYzMgdHJhbnNmb3JtZWRUYW5nZW50ID0gKCBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KCBvYmplY3RUYW5nZW50LCAwLjAgKSApLnh5ejtcblx0I2lmZGVmIEZMSVBfU0lERURcblx0XHR0cmFuc2Zvcm1lZFRhbmdlbnQgPSAtIHRyYW5zZm9ybWVkVGFuZ2VudDtcblx0I2VuZGlmXG4jZW5kaWYiLGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleDoiI2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgZGlzcGxhY2VtZW50TWFwO1xuXHR1bmlmb3JtIGZsb2F0IGRpc3BsYWNlbWVudFNjYWxlO1xuXHR1bmlmb3JtIGZsb2F0IGRpc3BsYWNlbWVudEJpYXM7XG4jZW5kaWYiLGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg6IiNpZmRlZiBVU0VfRElTUExBQ0VNRU5UTUFQXG5cdHRyYW5zZm9ybWVkICs9IG5vcm1hbGl6ZSggb2JqZWN0Tm9ybWFsICkgKiAoIHRleHR1cmUyRCggZGlzcGxhY2VtZW50TWFwLCB2VXYgKS54ICogZGlzcGxhY2VtZW50U2NhbGUgKyBkaXNwbGFjZW1lbnRCaWFzICk7XG4jZW5kaWYiLGVtaXNzaXZlbWFwX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0VNSVNTSVZFTUFQXG5cdHZlYzQgZW1pc3NpdmVDb2xvciA9IHRleHR1cmUyRCggZW1pc3NpdmVNYXAsIHZVdiApO1xuXHRlbWlzc2l2ZUNvbG9yLnJnYiA9IGVtaXNzaXZlTWFwVGV4ZWxUb0xpbmVhciggZW1pc3NpdmVDb2xvciApLnJnYjtcblx0dG90YWxFbWlzc2l2ZVJhZGlhbmNlICo9IGVtaXNzaXZlQ29sb3IucmdiO1xuI2VuZGlmIixlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0VNSVNTSVZFTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGVtaXNzaXZlTWFwO1xuI2VuZGlmIixlbmNvZGluZ3NfZnJhZ21lbnQ6ImdsX0ZyYWdDb2xvciA9IGxpbmVhclRvT3V0cHV0VGV4ZWwoIGdsX0ZyYWdDb2xvciApOyIsZW5jb2RpbmdzX3BhcnNfZnJhZ21lbnQ6IlxudmVjNCBMaW5lYXJUb0xpbmVhciggaW4gdmVjNCB2YWx1ZSApIHtcblx0cmV0dXJuIHZhbHVlO1xufVxudmVjNCBHYW1tYVRvTGluZWFyKCBpbiB2ZWM0IHZhbHVlLCBpbiBmbG9hdCBnYW1tYUZhY3RvciApIHtcblx0cmV0dXJuIHZlYzQoIHBvdyggdmFsdWUucmdiLCB2ZWMzKCBnYW1tYUZhY3RvciApICksIHZhbHVlLmEgKTtcbn1cbnZlYzQgTGluZWFyVG9HYW1tYSggaW4gdmVjNCB2YWx1ZSwgaW4gZmxvYXQgZ2FtbWFGYWN0b3IgKSB7XG5cdHJldHVybiB2ZWM0KCBwb3coIHZhbHVlLnJnYiwgdmVjMyggMS4wIC8gZ2FtbWFGYWN0b3IgKSApLCB2YWx1ZS5hICk7XG59XG52ZWM0IHNSR0JUb0xpbmVhciggaW4gdmVjNCB2YWx1ZSApIHtcblx0cmV0dXJuIHZlYzQoIG1peCggcG93KCB2YWx1ZS5yZ2IgKiAwLjk0Nzg2NzI5ODYgKyB2ZWMzKCAwLjA1MjEzMjcwMTQgKSwgdmVjMyggMi40ICkgKSwgdmFsdWUucmdiICogMC4wNzczOTkzODA4LCB2ZWMzKCBsZXNzVGhhbkVxdWFsKCB2YWx1ZS5yZ2IsIHZlYzMoIDAuMDQwNDUgKSApICkgKSwgdmFsdWUuYSApO1xufVxudmVjNCBMaW5lYXJUb3NSR0IoIGluIHZlYzQgdmFsdWUgKSB7XG5cdHJldHVybiB2ZWM0KCBtaXgoIHBvdyggdmFsdWUucmdiLCB2ZWMzKCAwLjQxNjY2ICkgKSAqIDEuMDU1IC0gdmVjMyggMC4wNTUgKSwgdmFsdWUucmdiICogMTIuOTIsIHZlYzMoIGxlc3NUaGFuRXF1YWwoIHZhbHVlLnJnYiwgdmVjMyggMC4wMDMxMzA4ICkgKSApICksIHZhbHVlLmEgKTtcbn1cbnZlYzQgUkdCRVRvTGluZWFyKCBpbiB2ZWM0IHZhbHVlICkge1xuXHRyZXR1cm4gdmVjNCggdmFsdWUucmdiICogZXhwMiggdmFsdWUuYSAqIDI1NS4wIC0gMTI4LjAgKSwgMS4wICk7XG59XG52ZWM0IExpbmVhclRvUkdCRSggaW4gdmVjNCB2YWx1ZSApIHtcblx0ZmxvYXQgbWF4Q29tcG9uZW50ID0gbWF4KCBtYXgoIHZhbHVlLnIsIHZhbHVlLmcgKSwgdmFsdWUuYiApO1xuXHRmbG9hdCBmRXhwID0gY2xhbXAoIGNlaWwoIGxvZzIoIG1heENvbXBvbmVudCApICksIC0xMjguMCwgMTI3LjAgKTtcblx0cmV0dXJuIHZlYzQoIHZhbHVlLnJnYiAvIGV4cDIoIGZFeHAgKSwgKCBmRXhwICsgMTI4LjAgKSAvIDI1NS4wICk7XG59XG52ZWM0IFJHQk1Ub0xpbmVhciggaW4gdmVjNCB2YWx1ZSwgaW4gZmxvYXQgbWF4UmFuZ2UgKSB7XG5cdHJldHVybiB2ZWM0KCB2YWx1ZS5yZ2IgKiB2YWx1ZS5hICogbWF4UmFuZ2UsIDEuMCApO1xufVxudmVjNCBMaW5lYXJUb1JHQk0oIGluIHZlYzQgdmFsdWUsIGluIGZsb2F0IG1heFJhbmdlICkge1xuXHRmbG9hdCBtYXhSR0IgPSBtYXgoIHZhbHVlLnIsIG1heCggdmFsdWUuZywgdmFsdWUuYiApICk7XG5cdGZsb2F0IE0gPSBjbGFtcCggbWF4UkdCIC8gbWF4UmFuZ2UsIDAuMCwgMS4wICk7XG5cdE0gPSBjZWlsKCBNICogMjU1LjAgKSAvIDI1NS4wO1xuXHRyZXR1cm4gdmVjNCggdmFsdWUucmdiIC8gKCBNICogbWF4UmFuZ2UgKSwgTSApO1xufVxudmVjNCBSR0JEVG9MaW5lYXIoIGluIHZlYzQgdmFsdWUsIGluIGZsb2F0IG1heFJhbmdlICkge1xuXHRyZXR1cm4gdmVjNCggdmFsdWUucmdiICogKCAoIG1heFJhbmdlIC8gMjU1LjAgKSAvIHZhbHVlLmEgKSwgMS4wICk7XG59XG52ZWM0IExpbmVhclRvUkdCRCggaW4gdmVjNCB2YWx1ZSwgaW4gZmxvYXQgbWF4UmFuZ2UgKSB7XG5cdGZsb2F0IG1heFJHQiA9IG1heCggdmFsdWUuciwgbWF4KCB2YWx1ZS5nLCB2YWx1ZS5iICkgKTtcblx0ZmxvYXQgRCA9IG1heCggbWF4UmFuZ2UgLyBtYXhSR0IsIDEuMCApO1xuXHREID0gY2xhbXAoIGZsb29yKCBEICkgLyAyNTUuMCwgMC4wLCAxLjAgKTtcblx0cmV0dXJuIHZlYzQoIHZhbHVlLnJnYiAqICggRCAqICggMjU1LjAgLyBtYXhSYW5nZSApICksIEQgKTtcbn1cbmNvbnN0IG1hdDMgY0xvZ0x1dk0gPSBtYXQzKCAwLjIyMDksIDAuMzM5MCwgMC40MTg0LCAwLjExMzgsIDAuNjc4MCwgMC43MzE5LCAwLjAxMDIsIDAuMTEzMCwgMC4yOTY5ICk7XG52ZWM0IExpbmVhclRvTG9nTHV2KCBpbiB2ZWM0IHZhbHVlICkge1xuXHR2ZWMzIFhwX1lfWFlacCA9IGNMb2dMdXZNICogdmFsdWUucmdiO1xuXHRYcF9ZX1hZWnAgPSBtYXgoIFhwX1lfWFlacCwgdmVjMyggMWUtNiwgMWUtNiwgMWUtNiApICk7XG5cdHZlYzQgdlJlc3VsdDtcblx0dlJlc3VsdC54eSA9IFhwX1lfWFlacC54eSAvIFhwX1lfWFlacC56O1xuXHRmbG9hdCBMZSA9IDIuMCAqIGxvZzIoWHBfWV9YWVpwLnkpICsgMTI3LjA7XG5cdHZSZXN1bHQudyA9IGZyYWN0KCBMZSApO1xuXHR2UmVzdWx0LnogPSAoIExlIC0gKCBmbG9vciggdlJlc3VsdC53ICogMjU1LjAgKSApIC8gMjU1LjAgKSAvIDI1NS4wO1xuXHRyZXR1cm4gdlJlc3VsdDtcbn1cbmNvbnN0IG1hdDMgY0xvZ0x1dkludmVyc2VNID0gbWF0MyggNi4wMDE0LCAtMi43MDA4LCAtMS43OTk2LCAtMS4zMzIwLCAzLjEwMjksIC01Ljc3MjEsIDAuMzAwOCwgLTEuMDg4MiwgNS42MjY4ICk7XG52ZWM0IExvZ0x1dlRvTGluZWFyKCBpbiB2ZWM0IHZhbHVlICkge1xuXHRmbG9hdCBMZSA9IHZhbHVlLnogKiAyNTUuMCArIHZhbHVlLnc7XG5cdHZlYzMgWHBfWV9YWVpwO1xuXHRYcF9ZX1hZWnAueSA9IGV4cDIoICggTGUgLSAxMjcuMCApIC8gMi4wICk7XG5cdFhwX1lfWFlacC56ID0gWHBfWV9YWVpwLnkgLyB2YWx1ZS55O1xuXHRYcF9ZX1hZWnAueCA9IHZhbHVlLnggKiBYcF9ZX1hZWnAuejtcblx0dmVjMyB2UkdCID0gY0xvZ0x1dkludmVyc2VNICogWHBfWV9YWVpwLnJnYjtcblx0cmV0dXJuIHZlYzQoIG1heCggdlJHQiwgMC4wICksIDEuMCApO1xufSIsZW52bWFwX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0VOVk1BUFxuXHQjaWZkZWYgRU5WX1dPUkxEUE9TXG5cdFx0dmVjMyBjYW1lcmFUb0ZyYWc7XG5cdFx0aWYgKCBpc09ydGhvZ3JhcGhpYyApIHtcblx0XHRcdGNhbWVyYVRvRnJhZyA9IG5vcm1hbGl6ZSggdmVjMyggLSB2aWV3TWF0cml4WyAwIF1bIDIgXSwgLSB2aWV3TWF0cml4WyAxIF1bIDIgXSwgLSB2aWV3TWF0cml4WyAyIF1bIDIgXSApICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNhbWVyYVRvRnJhZyA9IG5vcm1hbGl6ZSggdldvcmxkUG9zaXRpb24gLSBjYW1lcmFQb3NpdGlvbiApO1xuXHRcdH1cblx0XHR2ZWMzIHdvcmxkTm9ybWFsID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggbm9ybWFsLCB2aWV3TWF0cml4ICk7XG5cdFx0I2lmZGVmIEVOVk1BUF9NT0RFX1JFRkxFQ1RJT05cblx0XHRcdHZlYzMgcmVmbGVjdFZlYyA9IHJlZmxlY3QoIGNhbWVyYVRvRnJhZywgd29ybGROb3JtYWwgKTtcblx0XHQjZWxzZVxuXHRcdFx0dmVjMyByZWZsZWN0VmVjID0gcmVmcmFjdCggY2FtZXJhVG9GcmFnLCB3b3JsZE5vcm1hbCwgcmVmcmFjdGlvblJhdGlvICk7XG5cdFx0I2VuZGlmXG5cdCNlbHNlXG5cdFx0dmVjMyByZWZsZWN0VmVjID0gdlJlZmxlY3Q7XG5cdCNlbmRpZlxuXHQjaWZkZWYgRU5WTUFQX1RZUEVfQ1VCRVxuXHRcdHZlYzQgZW52Q29sb3IgPSB0ZXh0dXJlQ3ViZSggZW52TWFwLCB2ZWMzKCBmbGlwRW52TWFwICogcmVmbGVjdFZlYy54LCByZWZsZWN0VmVjLnl6ICkgKTtcblx0I2VsaWYgZGVmaW5lZCggRU5WTUFQX1RZUEVfQ1VCRV9VViApXG5cdFx0dmVjNCBlbnZDb2xvciA9IHRleHR1cmVDdWJlVVYoIGVudk1hcCwgcmVmbGVjdFZlYywgMC4wICk7XG5cdCNlbHNlXG5cdFx0dmVjNCBlbnZDb2xvciA9IHZlYzQoIDAuMCApO1xuXHQjZW5kaWZcblx0I2lmbmRlZiBFTlZNQVBfVFlQRV9DVUJFX1VWXG5cdFx0ZW52Q29sb3IgPSBlbnZNYXBUZXhlbFRvTGluZWFyKCBlbnZDb2xvciApO1xuXHQjZW5kaWZcblx0I2lmZGVmIEVOVk1BUF9CTEVORElOR19NVUxUSVBMWVxuXHRcdG91dGdvaW5nTGlnaHQgPSBtaXgoIG91dGdvaW5nTGlnaHQsIG91dGdvaW5nTGlnaHQgKiBlbnZDb2xvci54eXosIHNwZWN1bGFyU3RyZW5ndGggKiByZWZsZWN0aXZpdHkgKTtcblx0I2VsaWYgZGVmaW5lZCggRU5WTUFQX0JMRU5ESU5HX01JWCApXG5cdFx0b3V0Z29pbmdMaWdodCA9IG1peCggb3V0Z29pbmdMaWdodCwgZW52Q29sb3IueHl6LCBzcGVjdWxhclN0cmVuZ3RoICogcmVmbGVjdGl2aXR5ICk7XG5cdCNlbGlmIGRlZmluZWQoIEVOVk1BUF9CTEVORElOR19BREQgKVxuXHRcdG91dGdvaW5nTGlnaHQgKz0gZW52Q29sb3IueHl6ICogc3BlY3VsYXJTdHJlbmd0aCAqIHJlZmxlY3Rpdml0eTtcblx0I2VuZGlmXG4jZW5kaWYiLGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9FTlZNQVBcblx0dW5pZm9ybSBmbG9hdCBlbnZNYXBJbnRlbnNpdHk7XG5cdHVuaWZvcm0gZmxvYXQgZmxpcEVudk1hcDtcblx0dW5pZm9ybSBpbnQgbWF4TWlwTGV2ZWw7XG5cdCNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFXG5cdFx0dW5pZm9ybSBzYW1wbGVyQ3ViZSBlbnZNYXA7XG5cdCNlbHNlXG5cdFx0dW5pZm9ybSBzYW1wbGVyMkQgZW52TWFwO1xuXHQjZW5kaWZcblx0XG4jZW5kaWYiLGVudm1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0VOVk1BUFxuXHR1bmlmb3JtIGZsb2F0IHJlZmxlY3Rpdml0eTtcblx0I2lmIGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVVNFX05PUk1BTE1BUCApIHx8IGRlZmluZWQoIFBIT05HIClcblx0XHQjZGVmaW5lIEVOVl9XT1JMRFBPU1xuXHQjZW5kaWZcblx0I2lmZGVmIEVOVl9XT1JMRFBPU1xuXHRcdHZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjtcblx0XHR1bmlmb3JtIGZsb2F0IHJlZnJhY3Rpb25SYXRpbztcblx0I2Vsc2Vcblx0XHR2YXJ5aW5nIHZlYzMgdlJlZmxlY3Q7XG5cdCNlbmRpZlxuI2VuZGlmIixlbnZtYXBfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfRU5WTUFQXG5cdCNpZiBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFVTRV9OT1JNQUxNQVAgKSB8fGRlZmluZWQoIFBIT05HIClcblx0XHQjZGVmaW5lIEVOVl9XT1JMRFBPU1xuXHQjZW5kaWZcblx0I2lmZGVmIEVOVl9XT1JMRFBPU1xuXHRcdFxuXHRcdHZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjtcblx0I2Vsc2Vcblx0XHR2YXJ5aW5nIHZlYzMgdlJlZmxlY3Q7XG5cdFx0dW5pZm9ybSBmbG9hdCByZWZyYWN0aW9uUmF0aW87XG5cdCNlbmRpZlxuI2VuZGlmIixlbnZtYXBfcGh5c2ljYWxfcGFyc19mcmFnbWVudDoiI2lmIGRlZmluZWQoIFVTRV9FTlZNQVAgKVxuXHQjaWZkZWYgRU5WTUFQX01PREVfUkVGUkFDVElPTlxuXHRcdHVuaWZvcm0gZmxvYXQgcmVmcmFjdGlvblJhdGlvO1xuXHQjZW5kaWZcblx0dmVjMyBnZXRMaWdodFByb2JlSW5kaXJlY3RJcnJhZGlhbmNlKCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBpbnQgbWF4TUlQTGV2ZWwgKSB7XG5cdFx0dmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIGdlb21ldHJ5Lm5vcm1hbCwgdmlld01hdHJpeCApO1xuXHRcdCNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFXG5cdFx0XHR2ZWMzIHF1ZXJ5VmVjID0gdmVjMyggZmxpcEVudk1hcCAqIHdvcmxkTm9ybWFsLngsIHdvcmxkTm9ybWFsLnl6ICk7XG5cdFx0XHQjaWZkZWYgVEVYVFVSRV9MT0RfRVhUXG5cdFx0XHRcdHZlYzQgZW52TWFwQ29sb3IgPSB0ZXh0dXJlQ3ViZUxvZEVYVCggZW52TWFwLCBxdWVyeVZlYywgZmxvYXQoIG1heE1JUExldmVsICkgKTtcblx0XHRcdCNlbHNlXG5cdFx0XHRcdHZlYzQgZW52TWFwQ29sb3IgPSB0ZXh0dXJlQ3ViZSggZW52TWFwLCBxdWVyeVZlYywgZmxvYXQoIG1heE1JUExldmVsICkgKTtcblx0XHRcdCNlbmRpZlxuXHRcdFx0ZW52TWFwQ29sb3IucmdiID0gZW52TWFwVGV4ZWxUb0xpbmVhciggZW52TWFwQ29sb3IgKS5yZ2I7XG5cdFx0I2VsaWYgZGVmaW5lZCggRU5WTUFQX1RZUEVfQ1VCRV9VViApXG5cdFx0XHR2ZWM0IGVudk1hcENvbG9yID0gdGV4dHVyZUN1YmVVViggZW52TWFwLCB3b3JsZE5vcm1hbCwgMS4wICk7XG5cdFx0I2Vsc2Vcblx0XHRcdHZlYzQgZW52TWFwQ29sb3IgPSB2ZWM0KCAwLjAgKTtcblx0XHQjZW5kaWZcblx0XHRyZXR1cm4gUEkgKiBlbnZNYXBDb2xvci5yZ2IgKiBlbnZNYXBJbnRlbnNpdHk7XG5cdH1cblx0ZmxvYXQgZ2V0U3BlY3VsYXJNSVBMZXZlbCggY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzLCBjb25zdCBpbiBpbnQgbWF4TUlQTGV2ZWwgKSB7XG5cdFx0ZmxvYXQgbWF4TUlQTGV2ZWxTY2FsYXIgPSBmbG9hdCggbWF4TUlQTGV2ZWwgKTtcblx0XHRmbG9hdCBzaWdtYSA9IFBJICogcm91Z2huZXNzICogcm91Z2huZXNzIC8gKCAxLjAgKyByb3VnaG5lc3MgKTtcblx0XHRmbG9hdCBkZXNpcmVkTUlQTGV2ZWwgPSBtYXhNSVBMZXZlbFNjYWxhciArIGxvZzIoIHNpZ21hICk7XG5cdFx0cmV0dXJuIGNsYW1wKCBkZXNpcmVkTUlQTGV2ZWwsIDAuMCwgbWF4TUlQTGV2ZWxTY2FsYXIgKTtcblx0fVxuXHR2ZWMzIGdldExpZ2h0UHJvYmVJbmRpcmVjdFJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGNvbnN0IGluIGludCBtYXhNSVBMZXZlbCApIHtcblx0XHQjaWZkZWYgRU5WTUFQX01PREVfUkVGTEVDVElPTlxuXHRcdFx0dmVjMyByZWZsZWN0VmVjID0gcmVmbGVjdCggLXZpZXdEaXIsIG5vcm1hbCApO1xuXHRcdFx0cmVmbGVjdFZlYyA9IG5vcm1hbGl6ZSggbWl4KCByZWZsZWN0VmVjLCBub3JtYWwsIHJvdWdobmVzcyAqIHJvdWdobmVzcykgKTtcblx0XHQjZWxzZVxuXHRcdFx0dmVjMyByZWZsZWN0VmVjID0gcmVmcmFjdCggLXZpZXdEaXIsIG5vcm1hbCwgcmVmcmFjdGlvblJhdGlvICk7XG5cdFx0I2VuZGlmXG5cdFx0cmVmbGVjdFZlYyA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIHJlZmxlY3RWZWMsIHZpZXdNYXRyaXggKTtcblx0XHRmbG9hdCBzcGVjdWxhck1JUExldmVsID0gZ2V0U3BlY3VsYXJNSVBMZXZlbCggcm91Z2huZXNzLCBtYXhNSVBMZXZlbCApO1xuXHRcdCNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFXG5cdFx0XHR2ZWMzIHF1ZXJ5UmVmbGVjdFZlYyA9IHZlYzMoIGZsaXBFbnZNYXAgKiByZWZsZWN0VmVjLngsIHJlZmxlY3RWZWMueXogKTtcblx0XHRcdCNpZmRlZiBURVhUVVJFX0xPRF9FWFRcblx0XHRcdFx0dmVjNCBlbnZNYXBDb2xvciA9IHRleHR1cmVDdWJlTG9kRVhUKCBlbnZNYXAsIHF1ZXJ5UmVmbGVjdFZlYywgc3BlY3VsYXJNSVBMZXZlbCApO1xuXHRcdFx0I2Vsc2Vcblx0XHRcdFx0dmVjNCBlbnZNYXBDb2xvciA9IHRleHR1cmVDdWJlKCBlbnZNYXAsIHF1ZXJ5UmVmbGVjdFZlYywgc3BlY3VsYXJNSVBMZXZlbCApO1xuXHRcdFx0I2VuZGlmXG5cdFx0XHRlbnZNYXBDb2xvci5yZ2IgPSBlbnZNYXBUZXhlbFRvTGluZWFyKCBlbnZNYXBDb2xvciApLnJnYjtcblx0XHQjZWxpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWIClcblx0XHRcdHZlYzQgZW52TWFwQ29sb3IgPSB0ZXh0dXJlQ3ViZVVWKCBlbnZNYXAsIHJlZmxlY3RWZWMsIHJvdWdobmVzcyApO1xuXHRcdCNlbmRpZlxuXHRcdHJldHVybiBlbnZNYXBDb2xvci5yZ2IgKiBlbnZNYXBJbnRlbnNpdHk7XG5cdH1cbiNlbmRpZiIsZW52bWFwX3ZlcnRleDoiI2lmZGVmIFVTRV9FTlZNQVBcblx0I2lmZGVmIEVOVl9XT1JMRFBPU1xuXHRcdHZXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbi54eXo7XG5cdCNlbHNlXG5cdFx0dmVjMyBjYW1lcmFUb1ZlcnRleDtcblx0XHRpZiAoIGlzT3J0aG9ncmFwaGljICkge1xuXHRcdFx0Y2FtZXJhVG9WZXJ0ZXggPSBub3JtYWxpemUoIHZlYzMoIC0gdmlld01hdHJpeFsgMCBdWyAyIF0sIC0gdmlld01hdHJpeFsgMSBdWyAyIF0sIC0gdmlld01hdHJpeFsgMiBdWyAyIF0gKSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjYW1lcmFUb1ZlcnRleCA9IG5vcm1hbGl6ZSggd29ybGRQb3NpdGlvbi54eXogLSBjYW1lcmFQb3NpdGlvbiApO1xuXHRcdH1cblx0XHR2ZWMzIHdvcmxkTm9ybWFsID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggdHJhbnNmb3JtZWROb3JtYWwsIHZpZXdNYXRyaXggKTtcblx0XHQjaWZkZWYgRU5WTUFQX01PREVfUkVGTEVDVElPTlxuXHRcdFx0dlJlZmxlY3QgPSByZWZsZWN0KCBjYW1lcmFUb1ZlcnRleCwgd29ybGROb3JtYWwgKTtcblx0XHQjZWxzZVxuXHRcdFx0dlJlZmxlY3QgPSByZWZyYWN0KCBjYW1lcmFUb1ZlcnRleCwgd29ybGROb3JtYWwsIHJlZnJhY3Rpb25SYXRpbyApO1xuXHRcdCNlbmRpZlxuXHQjZW5kaWZcbiNlbmRpZiIsZm9nX3ZlcnRleDoiI2lmZGVmIFVTRV9GT0dcblx0Zm9nRGVwdGggPSAtIG12UG9zaXRpb24uejtcbiNlbmRpZiIsZm9nX3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX0ZPR1xuXHR2YXJ5aW5nIGZsb2F0IGZvZ0RlcHRoO1xuI2VuZGlmIixmb2dfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfRk9HXG5cdCNpZmRlZiBGT0dfRVhQMlxuXHRcdGZsb2F0IGZvZ0ZhY3RvciA9IDEuMCAtIGV4cCggLSBmb2dEZW5zaXR5ICogZm9nRGVuc2l0eSAqIGZvZ0RlcHRoICogZm9nRGVwdGggKTtcblx0I2Vsc2Vcblx0XHRmbG9hdCBmb2dGYWN0b3IgPSBzbW9vdGhzdGVwKCBmb2dOZWFyLCBmb2dGYXIsIGZvZ0RlcHRoICk7XG5cdCNlbmRpZlxuXHRnbF9GcmFnQ29sb3IucmdiID0gbWl4KCBnbF9GcmFnQ29sb3IucmdiLCBmb2dDb2xvciwgZm9nRmFjdG9yICk7XG4jZW5kaWYiLGZvZ19wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0ZPR1xuXHR1bmlmb3JtIHZlYzMgZm9nQ29sb3I7XG5cdHZhcnlpbmcgZmxvYXQgZm9nRGVwdGg7XG5cdCNpZmRlZiBGT0dfRVhQMlxuXHRcdHVuaWZvcm0gZmxvYXQgZm9nRGVuc2l0eTtcblx0I2Vsc2Vcblx0XHR1bmlmb3JtIGZsb2F0IGZvZ05lYXI7XG5cdFx0dW5pZm9ybSBmbG9hdCBmb2dGYXI7XG5cdCNlbmRpZlxuI2VuZGlmIixncmFkaWVudG1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0dSQURJRU5UTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGdyYWRpZW50TWFwO1xuI2VuZGlmXG52ZWMzIGdldEdyYWRpZW50SXJyYWRpYW5jZSggdmVjMyBub3JtYWwsIHZlYzMgbGlnaHREaXJlY3Rpb24gKSB7XG5cdGZsb2F0IGRvdE5MID0gZG90KCBub3JtYWwsIGxpZ2h0RGlyZWN0aW9uICk7XG5cdHZlYzIgY29vcmQgPSB2ZWMyKCBkb3ROTCAqIDAuNSArIDAuNSwgMC4wICk7XG5cdCNpZmRlZiBVU0VfR1JBRElFTlRNQVBcblx0XHRyZXR1cm4gdGV4dHVyZTJEKCBncmFkaWVudE1hcCwgY29vcmQgKS5yZ2I7XG5cdCNlbHNlXG5cdFx0cmV0dXJuICggY29vcmQueCA8IDAuNyApID8gdmVjMyggMC43ICkgOiB2ZWMzKCAxLjAgKTtcblx0I2VuZGlmXG59IixsaWdodG1hcF9mcmFnbWVudDoiI2lmZGVmIFVTRV9MSUdIVE1BUFxuXHR2ZWM0IGxpZ2h0TWFwVGV4ZWw9IHRleHR1cmUyRCggbGlnaHRNYXAsIHZVdjIgKTtcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IFBJICogbGlnaHRNYXBUZXhlbFRvTGluZWFyKCBsaWdodE1hcFRleGVsICkucmdiICogbGlnaHRNYXBJbnRlbnNpdHk7XG4jZW5kaWYiLGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfTElHSFRNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgbGlnaHRNYXA7XG5cdHVuaWZvcm0gZmxvYXQgbGlnaHRNYXBJbnRlbnNpdHk7XG4jZW5kaWYiLGxpZ2h0c19sYW1iZXJ0X3ZlcnRleDoidmVjMyBkaWZmdXNlID0gdmVjMyggMS4wICk7XG5HZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5O1xuZ2VvbWV0cnkucG9zaXRpb24gPSBtdlBvc2l0aW9uLnh5ejtcbmdlb21ldHJ5Lm5vcm1hbCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWROb3JtYWwgKTtcbmdlb21ldHJ5LnZpZXdEaXIgPSAoIGlzT3J0aG9ncmFwaGljICkgPyB2ZWMzKCAwLCAwLCAxICkgOiBub3JtYWxpemUoIC1tdlBvc2l0aW9uLnh5eiApO1xuR2VvbWV0cmljQ29udGV4dCBiYWNrR2VvbWV0cnk7XG5iYWNrR2VvbWV0cnkucG9zaXRpb24gPSBnZW9tZXRyeS5wb3NpdGlvbjtcbmJhY2tHZW9tZXRyeS5ub3JtYWwgPSAtZ2VvbWV0cnkubm9ybWFsO1xuYmFja0dlb21ldHJ5LnZpZXdEaXIgPSBnZW9tZXRyeS52aWV3RGlyO1xudkxpZ2h0RnJvbnQgPSB2ZWMzKCAwLjAgKTtcbnZJbmRpcmVjdEZyb250ID0gdmVjMyggMC4wICk7XG4jaWZkZWYgRE9VQkxFX1NJREVEXG5cdHZMaWdodEJhY2sgPSB2ZWMzKCAwLjAgKTtcblx0dkluZGlyZWN0QmFjayA9IHZlYzMoIDAuMCApO1xuI2VuZGlmXG5JbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0O1xuZmxvYXQgZG90Tkw7XG52ZWMzIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcbnZJbmRpcmVjdEZyb250ICs9IGdldEFtYmllbnRMaWdodElycmFkaWFuY2UoIGFtYmllbnRMaWdodENvbG9yICk7XG52SW5kaXJlY3RGcm9udCArPSBnZXRMaWdodFByb2JlSXJyYWRpYW5jZSggbGlnaHRQcm9iZSwgZ2VvbWV0cnkgKTtcbiNpZmRlZiBET1VCTEVfU0lERURcblx0dkluZGlyZWN0QmFjayArPSBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBhbWJpZW50TGlnaHRDb2xvciApO1xuXHR2SW5kaXJlY3RCYWNrICs9IGdldExpZ2h0UHJvYmVJcnJhZGlhbmNlKCBsaWdodFByb2JlLCBiYWNrR2VvbWV0cnkgKTtcbiNlbmRpZlxuI2lmIE5VTV9QT0lOVF9MSUdIVFMgPiAwXG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUUzsgaSArKyApIHtcblx0XHRnZXRQb2ludERpcmVjdExpZ2h0SXJyYWRpYW5jZSggcG9pbnRMaWdodHNbIGkgXSwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7XG5cdFx0ZG90TkwgPSBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICk7XG5cdFx0ZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlID0gUEkgKiBkaXJlY3RMaWdodC5jb2xvcjtcblx0XHR2TGlnaHRGcm9udCArPSBzYXR1cmF0ZSggZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR2TGlnaHRCYWNrICs9IHNhdHVyYXRlKCAtZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcblx0XHQjZW5kaWZcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuI2VuZGlmXG4jaWYgTlVNX1NQT1RfTElHSFRTID4gMFxuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9TUE9UX0xJR0hUUzsgaSArKyApIHtcblx0XHRnZXRTcG90RGlyZWN0TGlnaHRJcnJhZGlhbmNlKCBzcG90TGlnaHRzWyBpIF0sIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApO1xuXHRcdGRvdE5MID0gZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApO1xuXHRcdGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZSA9IFBJICogZGlyZWN0TGlnaHQuY29sb3I7XG5cdFx0dkxpZ2h0RnJvbnQgKz0gc2F0dXJhdGUoIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG5cdFx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdFx0dkxpZ2h0QmFjayArPSBzYXR1cmF0ZSggLWRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG5cdFx0I2VuZGlmXG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcbiNlbmRpZlxuI2lmIE5VTV9ESVJfTElHSFRTID4gMFxuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9ESVJfTElHSFRTOyBpICsrICkge1xuXHRcdGdldERpcmVjdGlvbmFsRGlyZWN0TGlnaHRJcnJhZGlhbmNlKCBkaXJlY3Rpb25hbExpZ2h0c1sgaSBdLCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcblx0XHRkb3ROTCA9IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKTtcblx0XHRkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2UgPSBQSSAqIGRpcmVjdExpZ2h0LmNvbG9yO1xuXHRcdHZMaWdodEZyb250ICs9IHNhdHVyYXRlKCBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlO1xuXHRcdCNpZmRlZiBET1VCTEVfU0lERURcblx0XHRcdHZMaWdodEJhY2sgKz0gc2F0dXJhdGUoIC1kb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlO1xuXHRcdCNlbmRpZlxuXHR9XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG4jZW5kaWZcbiNpZiBOVU1fSEVNSV9MSUdIVFMgPiAwXG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0hFTUlfTElHSFRTOyBpICsrICkge1xuXHRcdHZJbmRpcmVjdEZyb250ICs9IGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgZ2VvbWV0cnkgKTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR2SW5kaXJlY3RCYWNrICs9IGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgYmFja0dlb21ldHJ5ICk7XG5cdFx0I2VuZGlmXG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcbiNlbmRpZiIsbGlnaHRzX3BhcnNfYmVnaW46InVuaWZvcm0gYm9vbCByZWNlaXZlU2hhZG93O1xudW5pZm9ybSB2ZWMzIGFtYmllbnRMaWdodENvbG9yO1xudW5pZm9ybSB2ZWMzIGxpZ2h0UHJvYmVbIDkgXTtcbnZlYzMgc2hHZXRJcnJhZGlhbmNlQXQoIGluIHZlYzMgbm9ybWFsLCBpbiB2ZWMzIHNoQ29lZmZpY2llbnRzWyA5IF0gKSB7XG5cdGZsb2F0IHggPSBub3JtYWwueCwgeSA9IG5vcm1hbC55LCB6ID0gbm9ybWFsLno7XG5cdHZlYzMgcmVzdWx0ID0gc2hDb2VmZmljaWVudHNbIDAgXSAqIDAuODg2MjI3O1xuXHRyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDEgXSAqIDIuMCAqIDAuNTExNjY0ICogeTtcblx0cmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyAyIF0gKiAyLjAgKiAwLjUxMTY2NCAqIHo7XG5cdHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgMyBdICogMi4wICogMC41MTE2NjQgKiB4O1xuXHRyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDQgXSAqIDIuMCAqIDAuNDI5MDQzICogeCAqIHk7XG5cdHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgNSBdICogMi4wICogMC40MjkwNDMgKiB5ICogejtcblx0cmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA2IF0gKiAoIDAuNzQzMTI1ICogeiAqIHogLSAwLjI0NzcwOCApO1xuXHRyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDcgXSAqIDIuMCAqIDAuNDI5MDQzICogeCAqIHo7XG5cdHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgOCBdICogMC40MjkwNDMgKiAoIHggKiB4IC0geSAqIHkgKTtcblx0cmV0dXJuIHJlc3VsdDtcbn1cbnZlYzMgZ2V0TGlnaHRQcm9iZUlycmFkaWFuY2UoIGNvbnN0IGluIHZlYzMgbGlnaHRQcm9iZVsgOSBdLCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5ICkge1xuXHR2ZWMzIHdvcmxkTm9ybWFsID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggZ2VvbWV0cnkubm9ybWFsLCB2aWV3TWF0cml4ICk7XG5cdHZlYzMgaXJyYWRpYW5jZSA9IHNoR2V0SXJyYWRpYW5jZUF0KCB3b3JsZE5vcm1hbCwgbGlnaHRQcm9iZSApO1xuXHRyZXR1cm4gaXJyYWRpYW5jZTtcbn1cbnZlYzMgZ2V0QW1iaWVudExpZ2h0SXJyYWRpYW5jZSggY29uc3QgaW4gdmVjMyBhbWJpZW50TGlnaHRDb2xvciApIHtcblx0dmVjMyBpcnJhZGlhbmNlID0gYW1iaWVudExpZ2h0Q29sb3I7XG5cdCNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUU1xuXHRcdGlycmFkaWFuY2UgKj0gUEk7XG5cdCNlbmRpZlxuXHRyZXR1cm4gaXJyYWRpYW5jZTtcbn1cbiNpZiBOVU1fRElSX0xJR0hUUyA+IDBcblx0c3RydWN0IERpcmVjdGlvbmFsTGlnaHQge1xuXHRcdHZlYzMgZGlyZWN0aW9uO1xuXHRcdHZlYzMgY29sb3I7XG5cdH07XG5cdHVuaWZvcm0gRGlyZWN0aW9uYWxMaWdodCBkaXJlY3Rpb25hbExpZ2h0c1sgTlVNX0RJUl9MSUdIVFMgXTtcblx0dm9pZCBnZXREaXJlY3Rpb25hbERpcmVjdExpZ2h0SXJyYWRpYW5jZSggY29uc3QgaW4gRGlyZWN0aW9uYWxMaWdodCBkaXJlY3Rpb25hbExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBvdXQgSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodCApIHtcblx0XHRkaXJlY3RMaWdodC5jb2xvciA9IGRpcmVjdGlvbmFsTGlnaHQuY29sb3I7XG5cdFx0ZGlyZWN0TGlnaHQuZGlyZWN0aW9uID0gZGlyZWN0aW9uYWxMaWdodC5kaXJlY3Rpb247XG5cdFx0ZGlyZWN0TGlnaHQudmlzaWJsZSA9IHRydWU7XG5cdH1cbiNlbmRpZlxuI2lmIE5VTV9QT0lOVF9MSUdIVFMgPiAwXG5cdHN0cnVjdCBQb2ludExpZ2h0IHtcblx0XHR2ZWMzIHBvc2l0aW9uO1xuXHRcdHZlYzMgY29sb3I7XG5cdFx0ZmxvYXQgZGlzdGFuY2U7XG5cdFx0ZmxvYXQgZGVjYXk7XG5cdH07XG5cdHVuaWZvcm0gUG9pbnRMaWdodCBwb2ludExpZ2h0c1sgTlVNX1BPSU5UX0xJR0hUUyBdO1xuXHR2b2lkIGdldFBvaW50RGlyZWN0TGlnaHRJcnJhZGlhbmNlKCBjb25zdCBpbiBQb2ludExpZ2h0IHBvaW50TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIG91dCBJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0ICkge1xuXHRcdHZlYzMgbFZlY3RvciA9IHBvaW50TGlnaHQucG9zaXRpb24gLSBnZW9tZXRyeS5wb3NpdGlvbjtcblx0XHRkaXJlY3RMaWdodC5kaXJlY3Rpb24gPSBub3JtYWxpemUoIGxWZWN0b3IgKTtcblx0XHRmbG9hdCBsaWdodERpc3RhbmNlID0gbGVuZ3RoKCBsVmVjdG9yICk7XG5cdFx0ZGlyZWN0TGlnaHQuY29sb3IgPSBwb2ludExpZ2h0LmNvbG9yO1xuXHRcdGRpcmVjdExpZ2h0LmNvbG9yICo9IHB1bmN0dWFsTGlnaHRJbnRlbnNpdHlUb0lycmFkaWFuY2VGYWN0b3IoIGxpZ2h0RGlzdGFuY2UsIHBvaW50TGlnaHQuZGlzdGFuY2UsIHBvaW50TGlnaHQuZGVjYXkgKTtcblx0XHRkaXJlY3RMaWdodC52aXNpYmxlID0gKCBkaXJlY3RMaWdodC5jb2xvciAhPSB2ZWMzKCAwLjAgKSApO1xuXHR9XG4jZW5kaWZcbiNpZiBOVU1fU1BPVF9MSUdIVFMgPiAwXG5cdHN0cnVjdCBTcG90TGlnaHQge1xuXHRcdHZlYzMgcG9zaXRpb247XG5cdFx0dmVjMyBkaXJlY3Rpb247XG5cdFx0dmVjMyBjb2xvcjtcblx0XHRmbG9hdCBkaXN0YW5jZTtcblx0XHRmbG9hdCBkZWNheTtcblx0XHRmbG9hdCBjb25lQ29zO1xuXHRcdGZsb2F0IHBlbnVtYnJhQ29zO1xuXHR9O1xuXHR1bmlmb3JtIFNwb3RMaWdodCBzcG90TGlnaHRzWyBOVU1fU1BPVF9MSUdIVFMgXTtcblx0dm9pZCBnZXRTcG90RGlyZWN0TGlnaHRJcnJhZGlhbmNlKCBjb25zdCBpbiBTcG90TGlnaHQgc3BvdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBvdXQgSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodCApIHtcblx0XHR2ZWMzIGxWZWN0b3IgPSBzcG90TGlnaHQucG9zaXRpb24gLSBnZW9tZXRyeS5wb3NpdGlvbjtcblx0XHRkaXJlY3RMaWdodC5kaXJlY3Rpb24gPSBub3JtYWxpemUoIGxWZWN0b3IgKTtcblx0XHRmbG9hdCBsaWdodERpc3RhbmNlID0gbGVuZ3RoKCBsVmVjdG9yICk7XG5cdFx0ZmxvYXQgYW5nbGVDb3MgPSBkb3QoIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiwgc3BvdExpZ2h0LmRpcmVjdGlvbiApO1xuXHRcdGlmICggYW5nbGVDb3MgPiBzcG90TGlnaHQuY29uZUNvcyApIHtcblx0XHRcdGZsb2F0IHNwb3RFZmZlY3QgPSBzbW9vdGhzdGVwKCBzcG90TGlnaHQuY29uZUNvcywgc3BvdExpZ2h0LnBlbnVtYnJhQ29zLCBhbmdsZUNvcyApO1xuXHRcdFx0ZGlyZWN0TGlnaHQuY29sb3IgPSBzcG90TGlnaHQuY29sb3I7XG5cdFx0XHRkaXJlY3RMaWdodC5jb2xvciAqPSBzcG90RWZmZWN0ICogcHVuY3R1YWxMaWdodEludGVuc2l0eVRvSXJyYWRpYW5jZUZhY3RvciggbGlnaHREaXN0YW5jZSwgc3BvdExpZ2h0LmRpc3RhbmNlLCBzcG90TGlnaHQuZGVjYXkgKTtcblx0XHRcdGRpcmVjdExpZ2h0LnZpc2libGUgPSB0cnVlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkaXJlY3RMaWdodC5jb2xvciA9IHZlYzMoIDAuMCApO1xuXHRcdFx0ZGlyZWN0TGlnaHQudmlzaWJsZSA9IGZhbHNlO1xuXHRcdH1cblx0fVxuI2VuZGlmXG4jaWYgTlVNX1JFQ1RfQVJFQV9MSUdIVFMgPiAwXG5cdHN0cnVjdCBSZWN0QXJlYUxpZ2h0IHtcblx0XHR2ZWMzIGNvbG9yO1xuXHRcdHZlYzMgcG9zaXRpb247XG5cdFx0dmVjMyBoYWxmV2lkdGg7XG5cdFx0dmVjMyBoYWxmSGVpZ2h0O1xuXHR9O1xuXHR1bmlmb3JtIHNhbXBsZXIyRCBsdGNfMTtcdHVuaWZvcm0gc2FtcGxlcjJEIGx0Y18yO1xuXHR1bmlmb3JtIFJlY3RBcmVhTGlnaHQgcmVjdEFyZWFMaWdodHNbIE5VTV9SRUNUX0FSRUFfTElHSFRTIF07XG4jZW5kaWZcbiNpZiBOVU1fSEVNSV9MSUdIVFMgPiAwXG5cdHN0cnVjdCBIZW1pc3BoZXJlTGlnaHQge1xuXHRcdHZlYzMgZGlyZWN0aW9uO1xuXHRcdHZlYzMgc2t5Q29sb3I7XG5cdFx0dmVjMyBncm91bmRDb2xvcjtcblx0fTtcblx0dW5pZm9ybSBIZW1pc3BoZXJlTGlnaHQgaGVtaXNwaGVyZUxpZ2h0c1sgTlVNX0hFTUlfTElHSFRTIF07XG5cdHZlYzMgZ2V0SGVtaXNwaGVyZUxpZ2h0SXJyYWRpYW5jZSggY29uc3QgaW4gSGVtaXNwaGVyZUxpZ2h0IGhlbWlMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSApIHtcblx0XHRmbG9hdCBkb3ROTCA9IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBoZW1pTGlnaHQuZGlyZWN0aW9uICk7XG5cdFx0ZmxvYXQgaGVtaURpZmZ1c2VXZWlnaHQgPSAwLjUgKiBkb3ROTCArIDAuNTtcblx0XHR2ZWMzIGlycmFkaWFuY2UgPSBtaXgoIGhlbWlMaWdodC5ncm91bmRDb2xvciwgaGVtaUxpZ2h0LnNreUNvbG9yLCBoZW1pRGlmZnVzZVdlaWdodCApO1xuXHRcdCNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUU1xuXHRcdFx0aXJyYWRpYW5jZSAqPSBQSTtcblx0XHQjZW5kaWZcblx0XHRyZXR1cm4gaXJyYWRpYW5jZTtcblx0fVxuI2VuZGlmIixsaWdodHNfdG9vbl9mcmFnbWVudDoiVG9vbk1hdGVyaWFsIG1hdGVyaWFsO1xubWF0ZXJpYWwuZGlmZnVzZUNvbG9yID0gZGlmZnVzZUNvbG9yLnJnYjsiLGxpZ2h0c190b29uX3BhcnNfZnJhZ21lbnQ6InZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcbiNlbmRpZlxuc3RydWN0IFRvb25NYXRlcmlhbCB7XG5cdHZlYzMgZGlmZnVzZUNvbG9yO1xufTtcbnZvaWQgUkVfRGlyZWN0X1Rvb24oIGNvbnN0IGluIEluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFRvb25NYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7XG5cdHZlYzMgaXJyYWRpYW5jZSA9IGdldEdyYWRpZW50SXJyYWRpYW5jZSggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSAqIGRpcmVjdExpZ2h0LmNvbG9yO1xuXHQjaWZuZGVmIFBIWVNJQ0FMTFlfQ09SUkVDVF9MSUdIVFNcblx0XHRpcnJhZGlhbmNlICo9IFBJO1xuXHQjZW5kaWZcblx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9EaWZmdXNlX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xufVxudm9pZCBSRV9JbmRpcmVjdERpZmZ1c2VfVG9vbiggY29uc3QgaW4gdmVjMyBpcnJhZGlhbmNlLCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBUb29uTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfRGlmZnVzZV9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTtcbn1cbiNkZWZpbmUgUkVfRGlyZWN0XHRcdFx0XHRSRV9EaXJlY3RfVG9vblxuI2RlZmluZSBSRV9JbmRpcmVjdERpZmZ1c2VcdFx0UkVfSW5kaXJlY3REaWZmdXNlX1Rvb25cbiNkZWZpbmUgTWF0ZXJpYWxfTGlnaHRQcm9iZUxPRCggbWF0ZXJpYWwgKVx0KDApIixsaWdodHNfcGhvbmdfZnJhZ21lbnQ6IkJsaW5uUGhvbmdNYXRlcmlhbCBtYXRlcmlhbDtcbm1hdGVyaWFsLmRpZmZ1c2VDb2xvciA9IGRpZmZ1c2VDb2xvci5yZ2I7XG5tYXRlcmlhbC5zcGVjdWxhckNvbG9yID0gc3BlY3VsYXI7XG5tYXRlcmlhbC5zcGVjdWxhclNoaW5pbmVzcyA9IHNoaW5pbmVzcztcbm1hdGVyaWFsLnNwZWN1bGFyU3RyZW5ndGggPSBzcGVjdWxhclN0cmVuZ3RoOyIsbGlnaHRzX3Bob25nX3BhcnNfZnJhZ21lbnQ6InZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcbiNlbmRpZlxuc3RydWN0IEJsaW5uUGhvbmdNYXRlcmlhbCB7XG5cdHZlYzMgZGlmZnVzZUNvbG9yO1xuXHR2ZWMzIHNwZWN1bGFyQ29sb3I7XG5cdGZsb2F0IHNwZWN1bGFyU2hpbmluZXNzO1xuXHRmbG9hdCBzcGVjdWxhclN0cmVuZ3RoO1xufTtcbnZvaWQgUkVfRGlyZWN0X0JsaW5uUGhvbmcoIGNvbnN0IGluIEluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIEJsaW5uUGhvbmdNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7XG5cdGZsb2F0IGRvdE5MID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSApO1xuXHR2ZWMzIGlycmFkaWFuY2UgPSBkb3ROTCAqIGRpcmVjdExpZ2h0LmNvbG9yO1xuXHQjaWZuZGVmIFBIWVNJQ0FMTFlfQ09SUkVDVF9MSUdIVFNcblx0XHRpcnJhZGlhbmNlICo9IFBJO1xuXHQjZW5kaWZcblx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9EaWZmdXNlX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xuXHRyZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArPSBpcnJhZGlhbmNlICogQlJERl9TcGVjdWxhcl9CbGlublBob25nKCBkaXJlY3RMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyU2hpbmluZXNzICkgKiBtYXRlcmlhbC5zcGVjdWxhclN0cmVuZ3RoO1xufVxudm9pZCBSRV9JbmRpcmVjdERpZmZ1c2VfQmxpbm5QaG9uZyggY29uc3QgaW4gdmVjMyBpcnJhZGlhbmNlLCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBCbGlublBob25nTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfRGlmZnVzZV9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTtcbn1cbiNkZWZpbmUgUkVfRGlyZWN0XHRcdFx0XHRSRV9EaXJlY3RfQmxpbm5QaG9uZ1xuI2RlZmluZSBSRV9JbmRpcmVjdERpZmZ1c2VcdFx0UkVfSW5kaXJlY3REaWZmdXNlX0JsaW5uUGhvbmdcbiNkZWZpbmUgTWF0ZXJpYWxfTGlnaHRQcm9iZUxPRCggbWF0ZXJpYWwgKVx0KDApIixsaWdodHNfcGh5c2ljYWxfZnJhZ21lbnQ6IlBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWw7XG5tYXRlcmlhbC5kaWZmdXNlQ29sb3IgPSBkaWZmdXNlQ29sb3IucmdiICogKCAxLjAgLSBtZXRhbG5lc3NGYWN0b3IgKTtcbnZlYzMgZHh5ID0gbWF4KCBhYnMoIGRGZHgoIGdlb21ldHJ5Tm9ybWFsICkgKSwgYWJzKCBkRmR5KCBnZW9tZXRyeU5vcm1hbCApICkgKTtcbmZsb2F0IGdlb21ldHJ5Um91Z2huZXNzID0gbWF4KCBtYXgoIGR4eS54LCBkeHkueSApLCBkeHkueiApO1xubWF0ZXJpYWwuc3BlY3VsYXJSb3VnaG5lc3MgPSBtYXgoIHJvdWdobmVzc0ZhY3RvciwgMC4wNTI1ICk7bWF0ZXJpYWwuc3BlY3VsYXJSb3VnaG5lc3MgKz0gZ2VvbWV0cnlSb3VnaG5lc3M7XG5tYXRlcmlhbC5zcGVjdWxhclJvdWdobmVzcyA9IG1pbiggbWF0ZXJpYWwuc3BlY3VsYXJSb3VnaG5lc3MsIDEuMCApO1xuI2lmZGVmIFJFRkxFQ1RJVklUWVxuXHRtYXRlcmlhbC5zcGVjdWxhckNvbG9yID0gbWl4KCB2ZWMzKCBNQVhJTVVNX1NQRUNVTEFSX0NPRUZGSUNJRU5UICogcG93MiggcmVmbGVjdGl2aXR5ICkgKSwgZGlmZnVzZUNvbG9yLnJnYiwgbWV0YWxuZXNzRmFjdG9yICk7XG4jZWxzZVxuXHRtYXRlcmlhbC5zcGVjdWxhckNvbG9yID0gbWl4KCB2ZWMzKCBERUZBVUxUX1NQRUNVTEFSX0NPRUZGSUNJRU5UICksIGRpZmZ1c2VDb2xvci5yZ2IsIG1ldGFsbmVzc0ZhY3RvciApO1xuI2VuZGlmXG4jaWZkZWYgQ0xFQVJDT0FUXG5cdG1hdGVyaWFsLmNsZWFyY29hdCA9IGNsZWFyY29hdDtcblx0bWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzID0gY2xlYXJjb2F0Um91Z2huZXNzO1xuXHQjaWZkZWYgVVNFX0NMRUFSQ09BVE1BUFxuXHRcdG1hdGVyaWFsLmNsZWFyY29hdCAqPSB0ZXh0dXJlMkQoIGNsZWFyY29hdE1hcCwgdlV2ICkueDtcblx0I2VuZGlmXG5cdCNpZmRlZiBVU0VfQ0xFQVJDT0FUX1JPVUdITkVTU01BUFxuXHRcdG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyAqPSB0ZXh0dXJlMkQoIGNsZWFyY29hdFJvdWdobmVzc01hcCwgdlV2ICkueTtcblx0I2VuZGlmXG5cdG1hdGVyaWFsLmNsZWFyY29hdCA9IHNhdHVyYXRlKCBtYXRlcmlhbC5jbGVhcmNvYXQgKTtcdG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyA9IG1heCggbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzLCAwLjA1MjUgKTtcblx0bWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzICs9IGdlb21ldHJ5Um91Z2huZXNzO1xuXHRtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgPSBtaW4oIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcywgMS4wICk7XG4jZW5kaWZcbiNpZmRlZiBVU0VfU0hFRU5cblx0bWF0ZXJpYWwuc2hlZW5Db2xvciA9IHNoZWVuO1xuI2VuZGlmIixsaWdodHNfcGh5c2ljYWxfcGFyc19mcmFnbWVudDoic3RydWN0IFBoeXNpY2FsTWF0ZXJpYWwge1xuXHR2ZWMzIGRpZmZ1c2VDb2xvcjtcblx0ZmxvYXQgc3BlY3VsYXJSb3VnaG5lc3M7XG5cdHZlYzMgc3BlY3VsYXJDb2xvcjtcbiNpZmRlZiBDTEVBUkNPQVRcblx0ZmxvYXQgY2xlYXJjb2F0O1xuXHRmbG9hdCBjbGVhcmNvYXRSb3VnaG5lc3M7XG4jZW5kaWZcbiNpZmRlZiBVU0VfU0hFRU5cblx0dmVjMyBzaGVlbkNvbG9yO1xuI2VuZGlmXG59O1xuI2RlZmluZSBNQVhJTVVNX1NQRUNVTEFSX0NPRUZGSUNJRU5UIDAuMTZcbiNkZWZpbmUgREVGQVVMVF9TUEVDVUxBUl9DT0VGRklDSUVOVCAwLjA0XG5mbG9hdCBjbGVhcmNvYXRESFJBcHByb3goIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcywgY29uc3QgaW4gZmxvYXQgZG90TkwgKSB7XG5cdHJldHVybiBERUZBVUxUX1NQRUNVTEFSX0NPRUZGSUNJRU5UICsgKCAxLjAgLSBERUZBVUxUX1NQRUNVTEFSX0NPRUZGSUNJRU5UICkgKiAoIHBvdyggMS4wIC0gZG90TkwsIDUuMCApICogcG93KCAxLjAgLSByb3VnaG5lc3MsIDIuMCApICk7XG59XG4jaWYgTlVNX1JFQ1RfQVJFQV9MSUdIVFMgPiAwXG5cdHZvaWQgUkVfRGlyZWN0X1JlY3RBcmVhX1BoeXNpY2FsKCBjb25zdCBpbiBSZWN0QXJlYUxpZ2h0IHJlY3RBcmVhTGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xuXHRcdHZlYzMgbm9ybWFsID0gZ2VvbWV0cnkubm9ybWFsO1xuXHRcdHZlYzMgdmlld0RpciA9IGdlb21ldHJ5LnZpZXdEaXI7XG5cdFx0dmVjMyBwb3NpdGlvbiA9IGdlb21ldHJ5LnBvc2l0aW9uO1xuXHRcdHZlYzMgbGlnaHRQb3MgPSByZWN0QXJlYUxpZ2h0LnBvc2l0aW9uO1xuXHRcdHZlYzMgaGFsZldpZHRoID0gcmVjdEFyZWFMaWdodC5oYWxmV2lkdGg7XG5cdFx0dmVjMyBoYWxmSGVpZ2h0ID0gcmVjdEFyZWFMaWdodC5oYWxmSGVpZ2h0O1xuXHRcdHZlYzMgbGlnaHRDb2xvciA9IHJlY3RBcmVhTGlnaHQuY29sb3I7XG5cdFx0ZmxvYXQgcm91Z2huZXNzID0gbWF0ZXJpYWwuc3BlY3VsYXJSb3VnaG5lc3M7XG5cdFx0dmVjMyByZWN0Q29vcmRzWyA0IF07XG5cdFx0cmVjdENvb3Jkc1sgMCBdID0gbGlnaHRQb3MgKyBoYWxmV2lkdGggLSBoYWxmSGVpZ2h0O1x0XHRyZWN0Q29vcmRzWyAxIF0gPSBsaWdodFBvcyAtIGhhbGZXaWR0aCAtIGhhbGZIZWlnaHQ7XG5cdFx0cmVjdENvb3Jkc1sgMiBdID0gbGlnaHRQb3MgLSBoYWxmV2lkdGggKyBoYWxmSGVpZ2h0O1xuXHRcdHJlY3RDb29yZHNbIDMgXSA9IGxpZ2h0UG9zICsgaGFsZldpZHRoICsgaGFsZkhlaWdodDtcblx0XHR2ZWMyIHV2ID0gTFRDX1V2KCBub3JtYWwsIHZpZXdEaXIsIHJvdWdobmVzcyApO1xuXHRcdHZlYzQgdDEgPSB0ZXh0dXJlMkQoIGx0Y18xLCB1diApO1xuXHRcdHZlYzQgdDIgPSB0ZXh0dXJlMkQoIGx0Y18yLCB1diApO1xuXHRcdG1hdDMgbUludiA9IG1hdDMoXG5cdFx0XHR2ZWMzKCB0MS54LCAwLCB0MS55ICksXG5cdFx0XHR2ZWMzKCAgICAwLCAxLCAgICAwICksXG5cdFx0XHR2ZWMzKCB0MS56LCAwLCB0MS53IClcblx0XHQpO1xuXHRcdHZlYzMgZnJlc25lbCA9ICggbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciAqIHQyLnggKyAoIHZlYzMoIDEuMCApIC0gbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciApICogdDIueSApO1xuXHRcdHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICs9IGxpZ2h0Q29sb3IgKiBmcmVzbmVsICogTFRDX0V2YWx1YXRlKCBub3JtYWwsIHZpZXdEaXIsIHBvc2l0aW9uLCBtSW52LCByZWN0Q29vcmRzICk7XG5cdFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArPSBsaWdodENvbG9yICogbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICogTFRDX0V2YWx1YXRlKCBub3JtYWwsIHZpZXdEaXIsIHBvc2l0aW9uLCBtYXQzKCAxLjAgKSwgcmVjdENvb3JkcyApO1xuXHR9XG4jZW5kaWZcbnZvaWQgUkVfRGlyZWN0X1BoeXNpY2FsKCBjb25zdCBpbiBJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0ZmxvYXQgZG90TkwgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApICk7XG5cdHZlYzMgaXJyYWRpYW5jZSA9IGRvdE5MICogZGlyZWN0TGlnaHQuY29sb3I7XG5cdCNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUU1xuXHRcdGlycmFkaWFuY2UgKj0gUEk7XG5cdCNlbmRpZlxuXHQjaWZkZWYgQ0xFQVJDT0FUXG5cdFx0ZmxvYXQgY2NEb3ROTCA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5LmNsZWFyY29hdE5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICkgKTtcblx0XHR2ZWMzIGNjSXJyYWRpYW5jZSA9IGNjRG90TkwgKiBkaXJlY3RMaWdodC5jb2xvcjtcblx0XHQjaWZuZGVmIFBIWVNJQ0FMTFlfQ09SUkVDVF9MSUdIVFNcblx0XHRcdGNjSXJyYWRpYW5jZSAqPSBQSTtcblx0XHQjZW5kaWZcblx0XHRmbG9hdCBjbGVhcmNvYXRESFIgPSBtYXRlcmlhbC5jbGVhcmNvYXQgKiBjbGVhcmNvYXRESFJBcHByb3goIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcywgY2NEb3ROTCApO1xuXHRcdHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICs9IGNjSXJyYWRpYW5jZSAqIG1hdGVyaWFsLmNsZWFyY29hdCAqIEJSREZfU3BlY3VsYXJfR0dYKCBkaXJlY3RMaWdodCwgZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCB2ZWMzKCBERUZBVUxUX1NQRUNVTEFSX0NPRUZGSUNJRU5UICksIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyApO1xuXHQjZWxzZVxuXHRcdGZsb2F0IGNsZWFyY29hdERIUiA9IDAuMDtcblx0I2VuZGlmXG5cdCNpZmRlZiBVU0VfU0hFRU5cblx0XHRyZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArPSAoIDEuMCAtIGNsZWFyY29hdERIUiApICogaXJyYWRpYW5jZSAqIEJSREZfU3BlY3VsYXJfU2hlZW4oXG5cdFx0XHRtYXRlcmlhbC5zcGVjdWxhclJvdWdobmVzcyxcblx0XHRcdGRpcmVjdExpZ2h0LmRpcmVjdGlvbixcblx0XHRcdGdlb21ldHJ5LFxuXHRcdFx0bWF0ZXJpYWwuc2hlZW5Db2xvclxuXHRcdCk7XG5cdCNlbHNlXG5cdFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKz0gKCAxLjAgLSBjbGVhcmNvYXRESFIgKSAqIGlycmFkaWFuY2UgKiBCUkRGX1NwZWN1bGFyX0dHWCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5Lm5vcm1hbCwgbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciwgbWF0ZXJpYWwuc3BlY3VsYXJSb3VnaG5lc3MpO1xuXHQjZW5kaWZcblx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArPSAoIDEuMCAtIGNsZWFyY29hdERIUiApICogaXJyYWRpYW5jZSAqIEJSREZfRGlmZnVzZV9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTtcbn1cbnZvaWQgUkVfSW5kaXJlY3REaWZmdXNlX1BoeXNpY2FsKCBjb25zdCBpbiB2ZWMzIGlycmFkaWFuY2UsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfRGlmZnVzZV9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTtcbn1cbnZvaWQgUkVfSW5kaXJlY3RTcGVjdWxhcl9QaHlzaWNhbCggY29uc3QgaW4gdmVjMyByYWRpYW5jZSwgY29uc3QgaW4gdmVjMyBpcnJhZGlhbmNlLCBjb25zdCBpbiB2ZWMzIGNsZWFyY29hdFJhZGlhbmNlLCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCkge1xuXHQjaWZkZWYgQ0xFQVJDT0FUXG5cdFx0ZmxvYXQgY2NEb3ROViA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5LmNsZWFyY29hdE5vcm1hbCwgZ2VvbWV0cnkudmlld0RpciApICk7XG5cdFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArPSBjbGVhcmNvYXRSYWRpYW5jZSAqIG1hdGVyaWFsLmNsZWFyY29hdCAqIEJSREZfU3BlY3VsYXJfR0dYX0Vudmlyb25tZW50KCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIHZlYzMoIERFRkFVTFRfU1BFQ1VMQVJfQ09FRkZJQ0lFTlQgKSwgbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzICk7XG5cdFx0ZmxvYXQgY2NEb3ROTCA9IGNjRG90TlY7XG5cdFx0ZmxvYXQgY2xlYXJjb2F0REhSID0gbWF0ZXJpYWwuY2xlYXJjb2F0ICogY2xlYXJjb2F0REhSQXBwcm94KCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MsIGNjRG90TkwgKTtcblx0I2Vsc2Vcblx0XHRmbG9hdCBjbGVhcmNvYXRESFIgPSAwLjA7XG5cdCNlbmRpZlxuXHRmbG9hdCBjbGVhcmNvYXRJbnYgPSAxLjAgLSBjbGVhcmNvYXRESFI7XG5cdHZlYzMgc2luZ2xlU2NhdHRlcmluZyA9IHZlYzMoIDAuMCApO1xuXHR2ZWMzIG11bHRpU2NhdHRlcmluZyA9IHZlYzMoIDAuMCApO1xuXHR2ZWMzIGNvc2luZVdlaWdodGVkSXJyYWRpYW5jZSA9IGlycmFkaWFuY2UgKiBSRUNJUFJPQ0FMX1BJO1xuXHRCUkRGX1NwZWN1bGFyX011bHRpc2NhdHRlcmluZ19FbnZpcm9ubWVudCggZ2VvbWV0cnksIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyUm91Z2huZXNzLCBzaW5nbGVTY2F0dGVyaW5nLCBtdWx0aVNjYXR0ZXJpbmcgKTtcblx0dmVjMyBkaWZmdXNlID0gbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICogKCAxLjAgLSAoIHNpbmdsZVNjYXR0ZXJpbmcgKyBtdWx0aVNjYXR0ZXJpbmcgKSApO1xuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICs9IGNsZWFyY29hdEludiAqIHJhZGlhbmNlICogc2luZ2xlU2NhdHRlcmluZztcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArPSBtdWx0aVNjYXR0ZXJpbmcgKiBjb3NpbmVXZWlnaHRlZElycmFkaWFuY2U7XG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBkaWZmdXNlICogY29zaW5lV2VpZ2h0ZWRJcnJhZGlhbmNlO1xufVxuI2RlZmluZSBSRV9EaXJlY3RcdFx0XHRcdFJFX0RpcmVjdF9QaHlzaWNhbFxuI2RlZmluZSBSRV9EaXJlY3RfUmVjdEFyZWFcdFx0UkVfRGlyZWN0X1JlY3RBcmVhX1BoeXNpY2FsXG4jZGVmaW5lIFJFX0luZGlyZWN0RGlmZnVzZVx0XHRSRV9JbmRpcmVjdERpZmZ1c2VfUGh5c2ljYWxcbiNkZWZpbmUgUkVfSW5kaXJlY3RTcGVjdWxhclx0XHRSRV9JbmRpcmVjdFNwZWN1bGFyX1BoeXNpY2FsXG5mbG9hdCBjb21wdXRlU3BlY3VsYXJPY2NsdXNpb24oIGNvbnN0IGluIGZsb2F0IGRvdE5WLCBjb25zdCBpbiBmbG9hdCBhbWJpZW50T2NjbHVzaW9uLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7XG5cdHJldHVybiBzYXR1cmF0ZSggcG93KCBkb3ROViArIGFtYmllbnRPY2NsdXNpb24sIGV4cDIoIC0gMTYuMCAqIHJvdWdobmVzcyAtIDEuMCApICkgLSAxLjAgKyBhbWJpZW50T2NjbHVzaW9uICk7XG59IixsaWdodHNfZnJhZ21lbnRfYmVnaW46IlxuR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeTtcbmdlb21ldHJ5LnBvc2l0aW9uID0gLSB2Vmlld1Bvc2l0aW9uO1xuZ2VvbWV0cnkubm9ybWFsID0gbm9ybWFsO1xuZ2VvbWV0cnkudmlld0RpciA9ICggaXNPcnRob2dyYXBoaWMgKSA/IHZlYzMoIDAsIDAsIDEgKSA6IG5vcm1hbGl6ZSggdlZpZXdQb3NpdGlvbiApO1xuI2lmZGVmIENMRUFSQ09BVFxuXHRnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwgPSBjbGVhcmNvYXROb3JtYWw7XG4jZW5kaWZcbkluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQ7XG4jaWYgKCBOVU1fUE9JTlRfTElHSFRTID4gMCApICYmIGRlZmluZWQoIFJFX0RpcmVjdCApXG5cdFBvaW50TGlnaHQgcG9pbnRMaWdodDtcblx0I2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDBcblx0UG9pbnRMaWdodFNoYWRvdyBwb2ludExpZ2h0U2hhZG93O1xuXHQjZW5kaWZcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fUE9JTlRfTElHSFRTOyBpICsrICkge1xuXHRcdHBvaW50TGlnaHQgPSBwb2ludExpZ2h0c1sgaSBdO1xuXHRcdGdldFBvaW50RGlyZWN0TGlnaHRJcnJhZGlhbmNlKCBwb2ludExpZ2h0LCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcblx0XHQjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmICggVU5ST0xMRURfTE9PUF9JTkRFWCA8IE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIClcblx0XHRwb2ludExpZ2h0U2hhZG93ID0gcG9pbnRMaWdodFNoYWRvd3NbIGkgXTtcblx0XHRkaXJlY3RMaWdodC5jb2xvciAqPSBhbGwoIGJ2ZWMyKCBkaXJlY3RMaWdodC52aXNpYmxlLCByZWNlaXZlU2hhZG93ICkgKSA/IGdldFBvaW50U2hhZG93KCBwb2ludFNoYWRvd01hcFsgaSBdLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd01hcFNpemUsIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93QmlhcywgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dSYWRpdXMsIHZQb2ludFNoYWRvd0Nvb3JkWyBpIF0sIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93Q2FtZXJhTmVhciwgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dDYW1lcmFGYXIgKSA6IDEuMDtcblx0XHQjZW5kaWZcblx0XHRSRV9EaXJlY3QoIGRpcmVjdExpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7XG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcbiNlbmRpZlxuI2lmICggTlVNX1NQT1RfTElHSFRTID4gMCApICYmIGRlZmluZWQoIFJFX0RpcmVjdCApXG5cdFNwb3RMaWdodCBzcG90TGlnaHQ7XG5cdCNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDBcblx0U3BvdExpZ2h0U2hhZG93IHNwb3RMaWdodFNoYWRvdztcblx0I2VuZGlmXG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRTOyBpICsrICkge1xuXHRcdHNwb3RMaWdodCA9IHNwb3RMaWdodHNbIGkgXTtcblx0XHRnZXRTcG90RGlyZWN0TGlnaHRJcnJhZGlhbmNlKCBzcG90TGlnaHQsIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApO1xuXHRcdCNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgKCBVTlJPTExFRF9MT09QX0lOREVYIDwgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyApXG5cdFx0c3BvdExpZ2h0U2hhZG93ID0gc3BvdExpZ2h0U2hhZG93c1sgaSBdO1xuXHRcdGRpcmVjdExpZ2h0LmNvbG9yICo9IGFsbCggYnZlYzIoIGRpcmVjdExpZ2h0LnZpc2libGUsIHJlY2VpdmVTaGFkb3cgKSApID8gZ2V0U2hhZG93KCBzcG90U2hhZG93TWFwWyBpIF0sIHNwb3RMaWdodFNoYWRvdy5zaGFkb3dNYXBTaXplLCBzcG90TGlnaHRTaGFkb3cuc2hhZG93Qmlhcywgc3BvdExpZ2h0U2hhZG93LnNoYWRvd1JhZGl1cywgdlNwb3RTaGFkb3dDb29yZFsgaSBdICkgOiAxLjA7XG5cdFx0I2VuZGlmXG5cdFx0UkVfRGlyZWN0KCBkaXJlY3RMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApO1xuXHR9XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG4jZW5kaWZcbiNpZiAoIE5VTV9ESVJfTElHSFRTID4gMCApICYmIGRlZmluZWQoIFJFX0RpcmVjdCApXG5cdERpcmVjdGlvbmFsTGlnaHQgZGlyZWN0aW9uYWxMaWdodDtcblx0I2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwXG5cdERpcmVjdGlvbmFsTGlnaHRTaGFkb3cgZGlyZWN0aW9uYWxMaWdodFNoYWRvdztcblx0I2VuZGlmXG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0RJUl9MSUdIVFM7IGkgKysgKSB7XG5cdFx0ZGlyZWN0aW9uYWxMaWdodCA9IGRpcmVjdGlvbmFsTGlnaHRzWyBpIF07XG5cdFx0Z2V0RGlyZWN0aW9uYWxEaXJlY3RMaWdodElycmFkaWFuY2UoIGRpcmVjdGlvbmFsTGlnaHQsIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApO1xuXHRcdCNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgKCBVTlJPTExFRF9MT09QX0lOREVYIDwgTlVNX0RJUl9MSUdIVF9TSEFET1dTIClcblx0XHRkaXJlY3Rpb25hbExpZ2h0U2hhZG93ID0gZGlyZWN0aW9uYWxMaWdodFNoYWRvd3NbIGkgXTtcblx0XHRkaXJlY3RMaWdodC5jb2xvciAqPSBhbGwoIGJ2ZWMyKCBkaXJlY3RMaWdodC52aXNpYmxlLCByZWNlaXZlU2hhZG93ICkgKSA/IGdldFNoYWRvdyggZGlyZWN0aW9uYWxTaGFkb3dNYXBbIGkgXSwgZGlyZWN0aW9uYWxMaWdodFNoYWRvdy5zaGFkb3dNYXBTaXplLCBkaXJlY3Rpb25hbExpZ2h0U2hhZG93LnNoYWRvd0JpYXMsIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3cuc2hhZG93UmFkaXVzLCB2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgaSBdICkgOiAxLjA7XG5cdFx0I2VuZGlmXG5cdFx0UkVfRGlyZWN0KCBkaXJlY3RMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApO1xuXHR9XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG4jZW5kaWZcbiNpZiAoIE5VTV9SRUNUX0FSRUFfTElHSFRTID4gMCApICYmIGRlZmluZWQoIFJFX0RpcmVjdF9SZWN0QXJlYSApXG5cdFJlY3RBcmVhTGlnaHQgcmVjdEFyZWFMaWdodDtcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fUkVDVF9BUkVBX0xJR0hUUzsgaSArKyApIHtcblx0XHRyZWN0QXJlYUxpZ2h0ID0gcmVjdEFyZWFMaWdodHNbIGkgXTtcblx0XHRSRV9EaXJlY3RfUmVjdEFyZWEoIHJlY3RBcmVhTGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuI2VuZGlmXG4jaWYgZGVmaW5lZCggUkVfSW5kaXJlY3REaWZmdXNlIClcblx0dmVjMyBpYmxJcnJhZGlhbmNlID0gdmVjMyggMC4wICk7XG5cdHZlYzMgaXJyYWRpYW5jZSA9IGdldEFtYmllbnRMaWdodElycmFkaWFuY2UoIGFtYmllbnRMaWdodENvbG9yICk7XG5cdGlycmFkaWFuY2UgKz0gZ2V0TGlnaHRQcm9iZUlycmFkaWFuY2UoIGxpZ2h0UHJvYmUsIGdlb21ldHJ5ICk7XG5cdCNpZiAoIE5VTV9IRU1JX0xJR0hUUyA+IDAgKVxuXHRcdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0XHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fSEVNSV9MSUdIVFM7IGkgKysgKSB7XG5cdFx0XHRpcnJhZGlhbmNlICs9IGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgZ2VvbWV0cnkgKTtcblx0XHR9XG5cdFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcblx0I2VuZGlmXG4jZW5kaWZcbiNpZiBkZWZpbmVkKCBSRV9JbmRpcmVjdFNwZWN1bGFyIClcblx0dmVjMyByYWRpYW5jZSA9IHZlYzMoIDAuMCApO1xuXHR2ZWMzIGNsZWFyY29hdFJhZGlhbmNlID0gdmVjMyggMC4wICk7XG4jZW5kaWYiLGxpZ2h0c19mcmFnbWVudF9tYXBzOiIjaWYgZGVmaW5lZCggUkVfSW5kaXJlY3REaWZmdXNlIClcblx0I2lmZGVmIFVTRV9MSUdIVE1BUFxuXHRcdHZlYzQgbGlnaHRNYXBUZXhlbD0gdGV4dHVyZTJEKCBsaWdodE1hcCwgdlV2MiApO1xuXHRcdHZlYzMgbGlnaHRNYXBJcnJhZGlhbmNlID0gbGlnaHRNYXBUZXhlbFRvTGluZWFyKCBsaWdodE1hcFRleGVsICkucmdiICogbGlnaHRNYXBJbnRlbnNpdHk7XG5cdFx0I2lmbmRlZiBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTXG5cdFx0XHRsaWdodE1hcElycmFkaWFuY2UgKj0gUEk7XG5cdFx0I2VuZGlmXG5cdFx0aXJyYWRpYW5jZSArPSBsaWdodE1hcElycmFkaWFuY2U7XG5cdCNlbmRpZlxuXHQjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApICYmIGRlZmluZWQoIFNUQU5EQVJEICkgJiYgZGVmaW5lZCggRU5WTUFQX1RZUEVfQ1VCRV9VViApXG5cdFx0aWJsSXJyYWRpYW5jZSArPSBnZXRMaWdodFByb2JlSW5kaXJlY3RJcnJhZGlhbmNlKCBnZW9tZXRyeSwgbWF4TWlwTGV2ZWwgKTtcblx0I2VuZGlmXG4jZW5kaWZcbiNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgJiYgZGVmaW5lZCggUkVfSW5kaXJlY3RTcGVjdWxhciApXG5cdHJhZGlhbmNlICs9IGdldExpZ2h0UHJvYmVJbmRpcmVjdFJhZGlhbmNlKCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnNwZWN1bGFyUm91Z2huZXNzLCBtYXhNaXBMZXZlbCApO1xuXHQjaWZkZWYgQ0xFQVJDT0FUXG5cdFx0Y2xlYXJjb2F0UmFkaWFuY2UgKz0gZ2V0TGlnaHRQcm9iZUluZGlyZWN0UmFkaWFuY2UoIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5LmNsZWFyY29hdE5vcm1hbCwgbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzLCBtYXhNaXBMZXZlbCApO1xuXHQjZW5kaWZcbiNlbmRpZiIsbGlnaHRzX2ZyYWdtZW50X2VuZDoiI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0RGlmZnVzZSApXG5cdFJFX0luZGlyZWN0RGlmZnVzZSggaXJyYWRpYW5jZSwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApO1xuI2VuZGlmXG4jaWYgZGVmaW5lZCggUkVfSW5kaXJlY3RTcGVjdWxhciApXG5cdFJFX0luZGlyZWN0U3BlY3VsYXIoIHJhZGlhbmNlLCBpYmxJcnJhZGlhbmNlLCBjbGVhcmNvYXRSYWRpYW5jZSwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApO1xuI2VuZGlmIixsb2dkZXB0aGJ1Zl9mcmFnbWVudDoiI2lmIGRlZmluZWQoIFVTRV9MT0dERVBUSEJVRiApICYmIGRlZmluZWQoIFVTRV9MT0dERVBUSEJVRl9FWFQgKVxuXHRnbF9GcmFnRGVwdGhFWFQgPSB2SXNQZXJzcGVjdGl2ZSA9PSAwLjAgPyBnbF9GcmFnQ29vcmQueiA6IGxvZzIoIHZGcmFnRGVwdGggKSAqIGxvZ0RlcHRoQnVmRkMgKiAwLjU7XG4jZW5kaWYiLGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ6IiNpZiBkZWZpbmVkKCBVU0VfTE9HREVQVEhCVUYgKSAmJiBkZWZpbmVkKCBVU0VfTE9HREVQVEhCVUZfRVhUIClcblx0dW5pZm9ybSBmbG9hdCBsb2dEZXB0aEJ1ZkZDO1xuXHR2YXJ5aW5nIGZsb2F0IHZGcmFnRGVwdGg7XG5cdHZhcnlpbmcgZmxvYXQgdklzUGVyc3BlY3RpdmU7XG4jZW5kaWYiLGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX0xPR0RFUFRIQlVGXG5cdCNpZmRlZiBVU0VfTE9HREVQVEhCVUZfRVhUXG5cdFx0dmFyeWluZyBmbG9hdCB2RnJhZ0RlcHRoO1xuXHRcdHZhcnlpbmcgZmxvYXQgdklzUGVyc3BlY3RpdmU7XG5cdCNlbHNlXG5cdFx0dW5pZm9ybSBmbG9hdCBsb2dEZXB0aEJ1ZkZDO1xuXHQjZW5kaWZcbiNlbmRpZiIsbG9nZGVwdGhidWZfdmVydGV4OiIjaWZkZWYgVVNFX0xPR0RFUFRIQlVGXG5cdCNpZmRlZiBVU0VfTE9HREVQVEhCVUZfRVhUXG5cdFx0dkZyYWdEZXB0aCA9IDEuMCArIGdsX1Bvc2l0aW9uLnc7XG5cdFx0dklzUGVyc3BlY3RpdmUgPSBmbG9hdCggaXNQZXJzcGVjdGl2ZU1hdHJpeCggcHJvamVjdGlvbk1hdHJpeCApICk7XG5cdCNlbHNlXG5cdFx0aWYgKCBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICkgKSB7XG5cdFx0XHRnbF9Qb3NpdGlvbi56ID0gbG9nMiggbWF4KCBFUFNJTE9OLCBnbF9Qb3NpdGlvbi53ICsgMS4wICkgKSAqIGxvZ0RlcHRoQnVmRkMgLSAxLjA7XG5cdFx0XHRnbF9Qb3NpdGlvbi56ICo9IGdsX1Bvc2l0aW9uLnc7XG5cdFx0fVxuXHQjZW5kaWZcbiNlbmRpZiIsbWFwX2ZyYWdtZW50OiIjaWZkZWYgVVNFX01BUFxuXHR2ZWM0IHRleGVsQ29sb3IgPSB0ZXh0dXJlMkQoIG1hcCwgdlV2ICk7XG5cdHRleGVsQ29sb3IgPSBtYXBUZXhlbFRvTGluZWFyKCB0ZXhlbENvbG9yICk7XG5cdGRpZmZ1c2VDb2xvciAqPSB0ZXhlbENvbG9yO1xuI2VuZGlmIixtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9NQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgbWFwO1xuI2VuZGlmIixtYXBfcGFydGljbGVfZnJhZ21lbnQ6IiNpZiBkZWZpbmVkKCBVU0VfTUFQICkgfHwgZGVmaW5lZCggVVNFX0FMUEhBTUFQIClcblx0dmVjMiB1diA9ICggdXZUcmFuc2Zvcm0gKiB2ZWMzKCBnbF9Qb2ludENvb3JkLngsIDEuMCAtIGdsX1BvaW50Q29vcmQueSwgMSApICkueHk7XG4jZW5kaWZcbiNpZmRlZiBVU0VfTUFQXG5cdHZlYzQgbWFwVGV4ZWwgPSB0ZXh0dXJlMkQoIG1hcCwgdXYgKTtcblx0ZGlmZnVzZUNvbG9yICo9IG1hcFRleGVsVG9MaW5lYXIoIG1hcFRleGVsICk7XG4jZW5kaWZcbiNpZmRlZiBVU0VfQUxQSEFNQVBcblx0ZGlmZnVzZUNvbG9yLmEgKj0gdGV4dHVyZTJEKCBhbHBoYU1hcCwgdXYgKS5nO1xuI2VuZGlmIixtYXBfcGFydGljbGVfcGFyc19mcmFnbWVudDoiI2lmIGRlZmluZWQoIFVTRV9NQVAgKSB8fCBkZWZpbmVkKCBVU0VfQUxQSEFNQVAgKVxuXHR1bmlmb3JtIG1hdDMgdXZUcmFuc2Zvcm07XG4jZW5kaWZcbiNpZmRlZiBVU0VfTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIG1hcDtcbiNlbmRpZlxuI2lmZGVmIFVTRV9BTFBIQU1BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBhbHBoYU1hcDtcbiNlbmRpZiIsbWV0YWxuZXNzbWFwX2ZyYWdtZW50OiJmbG9hdCBtZXRhbG5lc3NGYWN0b3IgPSBtZXRhbG5lc3M7XG4jaWZkZWYgVVNFX01FVEFMTkVTU01BUFxuXHR2ZWM0IHRleGVsTWV0YWxuZXNzID0gdGV4dHVyZTJEKCBtZXRhbG5lc3NNYXAsIHZVdiApO1xuXHRtZXRhbG5lc3NGYWN0b3IgKj0gdGV4ZWxNZXRhbG5lc3MuYjtcbiNlbmRpZiIsbWV0YWxuZXNzbWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfTUVUQUxORVNTTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIG1ldGFsbmVzc01hcDtcbiNlbmRpZiIsbW9ycGhub3JtYWxfdmVydGV4OiIjaWZkZWYgVVNFX01PUlBITk9STUFMU1xuXHRvYmplY3ROb3JtYWwgKj0gbW9ycGhUYXJnZXRCYXNlSW5mbHVlbmNlO1xuXHRvYmplY3ROb3JtYWwgKz0gbW9ycGhOb3JtYWwwICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAwIF07XG5cdG9iamVjdE5vcm1hbCArPSBtb3JwaE5vcm1hbDEgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDEgXTtcblx0b2JqZWN0Tm9ybWFsICs9IG1vcnBoTm9ybWFsMiAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMiBdO1xuXHRvYmplY3ROb3JtYWwgKz0gbW9ycGhOb3JtYWwzICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAzIF07XG4jZW5kaWYiLG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX01PUlBIVEFSR0VUU1xuXHR1bmlmb3JtIGZsb2F0IG1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZTtcblx0I2lmbmRlZiBVU0VfTU9SUEhOT1JNQUxTXG5cdFx0dW5pZm9ybSBmbG9hdCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDggXTtcblx0I2Vsc2Vcblx0XHR1bmlmb3JtIGZsb2F0IG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNCBdO1xuXHQjZW5kaWZcbiNlbmRpZiIsbW9ycGh0YXJnZXRfdmVydGV4OiIjaWZkZWYgVVNFX01PUlBIVEFSR0VUU1xuXHR0cmFuc2Zvcm1lZCAqPSBtb3JwaFRhcmdldEJhc2VJbmZsdWVuY2U7XG5cdHRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0MCAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMCBdO1xuXHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDEgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDEgXTtcblx0dHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQyICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAyIF07XG5cdHRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0MyAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMyBdO1xuXHQjaWZuZGVmIFVTRV9NT1JQSE5PUk1BTFNcblx0XHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDQgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDQgXTtcblx0XHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDUgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDUgXTtcblx0XHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDYgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDYgXTtcblx0XHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDcgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDcgXTtcblx0I2VuZGlmXG4jZW5kaWYiLG5vcm1hbF9mcmFnbWVudF9iZWdpbjoiI2lmZGVmIEZMQVRfU0hBREVEXG5cdHZlYzMgZmR4ID0gdmVjMyggZEZkeCggdlZpZXdQb3NpdGlvbi54ICksIGRGZHgoIHZWaWV3UG9zaXRpb24ueSApLCBkRmR4KCB2Vmlld1Bvc2l0aW9uLnogKSApO1xuXHR2ZWMzIGZkeSA9IHZlYzMoIGRGZHkoIHZWaWV3UG9zaXRpb24ueCApLCBkRmR5KCB2Vmlld1Bvc2l0aW9uLnkgKSwgZEZkeSggdlZpZXdQb3NpdGlvbi56ICkgKTtcblx0dmVjMyBub3JtYWwgPSBub3JtYWxpemUoIGNyb3NzKCBmZHgsIGZkeSApICk7XG4jZWxzZVxuXHR2ZWMzIG5vcm1hbCA9IG5vcm1hbGl6ZSggdk5vcm1hbCApO1xuXHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0bm9ybWFsID0gbm9ybWFsICogKCBmbG9hdCggZ2xfRnJvbnRGYWNpbmcgKSAqIDIuMCAtIDEuMCApO1xuXHQjZW5kaWZcblx0I2lmZGVmIFVTRV9UQU5HRU5UXG5cdFx0dmVjMyB0YW5nZW50ID0gbm9ybWFsaXplKCB2VGFuZ2VudCApO1xuXHRcdHZlYzMgYml0YW5nZW50ID0gbm9ybWFsaXplKCB2Qml0YW5nZW50ICk7XG5cdFx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdFx0dGFuZ2VudCA9IHRhbmdlbnQgKiAoIGZsb2F0KCBnbF9Gcm9udEZhY2luZyApICogMi4wIC0gMS4wICk7XG5cdFx0XHRiaXRhbmdlbnQgPSBiaXRhbmdlbnQgKiAoIGZsb2F0KCBnbF9Gcm9udEZhY2luZyApICogMi4wIC0gMS4wICk7XG5cdFx0I2VuZGlmXG5cdFx0I2lmIGRlZmluZWQoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQ0xFQVJDT0FUX05PUk1BTE1BUCApXG5cdFx0XHRtYXQzIHZUQk4gPSBtYXQzKCB0YW5nZW50LCBiaXRhbmdlbnQsIG5vcm1hbCApO1xuXHRcdCNlbmRpZlxuXHQjZW5kaWZcbiNlbmRpZlxudmVjMyBnZW9tZXRyeU5vcm1hbCA9IG5vcm1hbDsiLG5vcm1hbF9mcmFnbWVudF9tYXBzOiIjaWZkZWYgT0JKRUNUU1BBQ0VfTk9STUFMTUFQXG5cdG5vcm1hbCA9IHRleHR1cmUyRCggbm9ybWFsTWFwLCB2VXYgKS54eXogKiAyLjAgLSAxLjA7XG5cdCNpZmRlZiBGTElQX1NJREVEXG5cdFx0bm9ybWFsID0gLSBub3JtYWw7XG5cdCNlbmRpZlxuXHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0bm9ybWFsID0gbm9ybWFsICogKCBmbG9hdCggZ2xfRnJvbnRGYWNpbmcgKSAqIDIuMCAtIDEuMCApO1xuXHQjZW5kaWZcblx0bm9ybWFsID0gbm9ybWFsaXplKCBub3JtYWxNYXRyaXggKiBub3JtYWwgKTtcbiNlbGlmIGRlZmluZWQoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKVxuXHR2ZWMzIG1hcE4gPSB0ZXh0dXJlMkQoIG5vcm1hbE1hcCwgdlV2ICkueHl6ICogMi4wIC0gMS4wO1xuXHRtYXBOLnh5ICo9IG5vcm1hbFNjYWxlO1xuXHQjaWZkZWYgVVNFX1RBTkdFTlRcblx0XHRub3JtYWwgPSBub3JtYWxpemUoIHZUQk4gKiBtYXBOICk7XG5cdCNlbHNlXG5cdFx0bm9ybWFsID0gcGVydHVyYk5vcm1hbDJBcmIoIC12Vmlld1Bvc2l0aW9uLCBub3JtYWwsIG1hcE4gKTtcblx0I2VuZGlmXG4jZWxpZiBkZWZpbmVkKCBVU0VfQlVNUE1BUCApXG5cdG5vcm1hbCA9IHBlcnR1cmJOb3JtYWxBcmIoIC12Vmlld1Bvc2l0aW9uLCBub3JtYWwsIGRIZHh5X2Z3ZCgpICk7XG4jZW5kaWYiLG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX05PUk1BTE1BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBub3JtYWxNYXA7XG5cdHVuaWZvcm0gdmVjMiBub3JtYWxTY2FsZTtcbiNlbmRpZlxuI2lmZGVmIE9CSkVDVFNQQUNFX05PUk1BTE1BUFxuXHR1bmlmb3JtIG1hdDMgbm9ybWFsTWF0cml4O1xuI2VuZGlmXG4jaWYgISBkZWZpbmVkICggVVNFX1RBTkdFTlQgKSAmJiAoIGRlZmluZWQgKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCAoIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQICkgKVxuXHR2ZWMzIHBlcnR1cmJOb3JtYWwyQXJiKCB2ZWMzIGV5ZV9wb3MsIHZlYzMgc3VyZl9ub3JtLCB2ZWMzIG1hcE4gKSB7XG5cdFx0dmVjMyBxMCA9IHZlYzMoIGRGZHgoIGV5ZV9wb3MueCApLCBkRmR4KCBleWVfcG9zLnkgKSwgZEZkeCggZXllX3Bvcy56ICkgKTtcblx0XHR2ZWMzIHExID0gdmVjMyggZEZkeSggZXllX3Bvcy54ICksIGRGZHkoIGV5ZV9wb3MueSApLCBkRmR5KCBleWVfcG9zLnogKSApO1xuXHRcdHZlYzIgc3QwID0gZEZkeCggdlV2LnN0ICk7XG5cdFx0dmVjMiBzdDEgPSBkRmR5KCB2VXYuc3QgKTtcblx0XHRmbG9hdCBzY2FsZSA9IHNpZ24oIHN0MS50ICogc3QwLnMgLSBzdDAudCAqIHN0MS5zICk7XG5cdFx0dmVjMyBTID0gbm9ybWFsaXplKCAoIHEwICogc3QxLnQgLSBxMSAqIHN0MC50ICkgKiBzY2FsZSApO1xuXHRcdHZlYzMgVCA9IG5vcm1hbGl6ZSggKCAtIHEwICogc3QxLnMgKyBxMSAqIHN0MC5zICkgKiBzY2FsZSApO1xuXHRcdHZlYzMgTiA9IG5vcm1hbGl6ZSggc3VyZl9ub3JtICk7XG5cdFx0bWF0MyB0c24gPSBtYXQzKCBTLCBULCBOICk7XG5cdFx0bWFwTi54eSAqPSAoIGZsb2F0KCBnbF9Gcm9udEZhY2luZyApICogMi4wIC0gMS4wICk7XG5cdFx0cmV0dXJuIG5vcm1hbGl6ZSggdHNuICogbWFwTiApO1xuXHR9XG4jZW5kaWYiLGNsZWFyY29hdF9ub3JtYWxfZnJhZ21lbnRfYmVnaW46IiNpZmRlZiBDTEVBUkNPQVRcblx0dmVjMyBjbGVhcmNvYXROb3JtYWwgPSBnZW9tZXRyeU5vcm1hbDtcbiNlbmRpZiIsY2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9tYXBzOiIjaWZkZWYgVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVBcblx0dmVjMyBjbGVhcmNvYXRNYXBOID0gdGV4dHVyZTJEKCBjbGVhcmNvYXROb3JtYWxNYXAsIHZVdiApLnh5eiAqIDIuMCAtIDEuMDtcblx0Y2xlYXJjb2F0TWFwTi54eSAqPSBjbGVhcmNvYXROb3JtYWxTY2FsZTtcblx0I2lmZGVmIFVTRV9UQU5HRU5UXG5cdFx0Y2xlYXJjb2F0Tm9ybWFsID0gbm9ybWFsaXplKCB2VEJOICogY2xlYXJjb2F0TWFwTiApO1xuXHQjZWxzZVxuXHRcdGNsZWFyY29hdE5vcm1hbCA9IHBlcnR1cmJOb3JtYWwyQXJiKCAtIHZWaWV3UG9zaXRpb24sIGNsZWFyY29hdE5vcm1hbCwgY2xlYXJjb2F0TWFwTiApO1xuXHQjZW5kaWZcbiNlbmRpZiIsY2xlYXJjb2F0X3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfQ0xFQVJDT0FUTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGNsZWFyY29hdE1hcDtcbiNlbmRpZlxuI2lmZGVmIFVTRV9DTEVBUkNPQVRfUk9VR0hORVNTTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGNsZWFyY29hdFJvdWdobmVzc01hcDtcbiNlbmRpZlxuI2lmZGVmIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGNsZWFyY29hdE5vcm1hbE1hcDtcblx0dW5pZm9ybSB2ZWMyIGNsZWFyY29hdE5vcm1hbFNjYWxlO1xuI2VuZGlmIixwYWNraW5nOiJ2ZWMzIHBhY2tOb3JtYWxUb1JHQiggY29uc3QgaW4gdmVjMyBub3JtYWwgKSB7XG5cdHJldHVybiBub3JtYWxpemUoIG5vcm1hbCApICogMC41ICsgMC41O1xufVxudmVjMyB1bnBhY2tSR0JUb05vcm1hbCggY29uc3QgaW4gdmVjMyByZ2IgKSB7XG5cdHJldHVybiAyLjAgKiByZ2IueHl6IC0gMS4wO1xufVxuY29uc3QgZmxvYXQgUGFja1Vwc2NhbGUgPSAyNTYuIC8gMjU1Ljtjb25zdCBmbG9hdCBVbnBhY2tEb3duc2NhbGUgPSAyNTUuIC8gMjU2LjtcbmNvbnN0IHZlYzMgUGFja0ZhY3RvcnMgPSB2ZWMzKCAyNTYuICogMjU2LiAqIDI1Ni4sIDI1Ni4gKiAyNTYuLCAyNTYuICk7XG5jb25zdCB2ZWM0IFVucGFja0ZhY3RvcnMgPSBVbnBhY2tEb3duc2NhbGUgLyB2ZWM0KCBQYWNrRmFjdG9ycywgMS4gKTtcbmNvbnN0IGZsb2F0IFNoaWZ0UmlnaHQ4ID0gMS4gLyAyNTYuO1xudmVjNCBwYWNrRGVwdGhUb1JHQkEoIGNvbnN0IGluIGZsb2F0IHYgKSB7XG5cdHZlYzQgciA9IHZlYzQoIGZyYWN0KCB2ICogUGFja0ZhY3RvcnMgKSwgdiApO1xuXHRyLnl6dyAtPSByLnh5eiAqIFNoaWZ0UmlnaHQ4O1x0cmV0dXJuIHIgKiBQYWNrVXBzY2FsZTtcbn1cbmZsb2F0IHVucGFja1JHQkFUb0RlcHRoKCBjb25zdCBpbiB2ZWM0IHYgKSB7XG5cdHJldHVybiBkb3QoIHYsIFVucGFja0ZhY3RvcnMgKTtcbn1cbnZlYzQgcGFjazJIYWxmVG9SR0JBKCB2ZWMyIHYgKSB7XG5cdHZlYzQgciA9IHZlYzQoIHYueCwgZnJhY3QoIHYueCAqIDI1NS4wICksIHYueSwgZnJhY3QoIHYueSAqIDI1NS4wICkpO1xuXHRyZXR1cm4gdmVjNCggci54IC0gci55IC8gMjU1LjAsIHIueSwgci56IC0gci53IC8gMjU1LjAsIHIudyk7XG59XG52ZWMyIHVucGFja1JHQkFUbzJIYWxmKCB2ZWM0IHYgKSB7XG5cdHJldHVybiB2ZWMyKCB2LnggKyAoIHYueSAvIDI1NS4wICksIHYueiArICggdi53IC8gMjU1LjAgKSApO1xufVxuZmxvYXQgdmlld1pUb09ydGhvZ3JhcGhpY0RlcHRoKCBjb25zdCBpbiBmbG9hdCB2aWV3WiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkge1xuXHRyZXR1cm4gKCB2aWV3WiArIG5lYXIgKSAvICggbmVhciAtIGZhciApO1xufVxuZmxvYXQgb3J0aG9ncmFwaGljRGVwdGhUb1ZpZXdaKCBjb25zdCBpbiBmbG9hdCBsaW5lYXJDbGlwWiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkge1xuXHRyZXR1cm4gbGluZWFyQ2xpcFogKiAoIG5lYXIgLSBmYXIgKSAtIG5lYXI7XG59XG5mbG9hdCB2aWV3WlRvUGVyc3BlY3RpdmVEZXB0aCggY29uc3QgaW4gZmxvYXQgdmlld1osIGNvbnN0IGluIGZsb2F0IG5lYXIsIGNvbnN0IGluIGZsb2F0IGZhciApIHtcblx0cmV0dXJuICgoIG5lYXIgKyB2aWV3WiApICogZmFyICkgLyAoKCBmYXIgLSBuZWFyICkgKiB2aWV3WiApO1xufVxuZmxvYXQgcGVyc3BlY3RpdmVEZXB0aFRvVmlld1ooIGNvbnN0IGluIGZsb2F0IGludkNsaXBaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7XG5cdHJldHVybiAoIG5lYXIgKiBmYXIgKSAvICggKCBmYXIgLSBuZWFyICkgKiBpbnZDbGlwWiAtIGZhciApO1xufSIscHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudDoiI2lmZGVmIFBSRU1VTFRJUExJRURfQUxQSEFcblx0Z2xfRnJhZ0NvbG9yLnJnYiAqPSBnbF9GcmFnQ29sb3IuYTtcbiNlbmRpZiIscHJvamVjdF92ZXJ0ZXg6InZlYzQgbXZQb3NpdGlvbiA9IHZlYzQoIHRyYW5zZm9ybWVkLCAxLjAgKTtcbiNpZmRlZiBVU0VfSU5TVEFOQ0lOR1xuXHRtdlBvc2l0aW9uID0gaW5zdGFuY2VNYXRyaXggKiBtdlBvc2l0aW9uO1xuI2VuZGlmXG5tdlBvc2l0aW9uID0gbW9kZWxWaWV3TWF0cml4ICogbXZQb3NpdGlvbjtcbmdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIG12UG9zaXRpb247IixkaXRoZXJpbmdfZnJhZ21lbnQ6IiNpZmRlZiBESVRIRVJJTkdcblx0Z2xfRnJhZ0NvbG9yLnJnYiA9IGRpdGhlcmluZyggZ2xfRnJhZ0NvbG9yLnJnYiApO1xuI2VuZGlmIixkaXRoZXJpbmdfcGFyc19mcmFnbWVudDoiI2lmZGVmIERJVEhFUklOR1xuXHR2ZWMzIGRpdGhlcmluZyggdmVjMyBjb2xvciApIHtcblx0XHRmbG9hdCBncmlkX3Bvc2l0aW9uID0gcmFuZCggZ2xfRnJhZ0Nvb3JkLnh5ICk7XG5cdFx0dmVjMyBkaXRoZXJfc2hpZnRfUkdCID0gdmVjMyggMC4yNSAvIDI1NS4wLCAtMC4yNSAvIDI1NS4wLCAwLjI1IC8gMjU1LjAgKTtcblx0XHRkaXRoZXJfc2hpZnRfUkdCID0gbWl4KCAyLjAgKiBkaXRoZXJfc2hpZnRfUkdCLCAtMi4wICogZGl0aGVyX3NoaWZ0X1JHQiwgZ3JpZF9wb3NpdGlvbiApO1xuXHRcdHJldHVybiBjb2xvciArIGRpdGhlcl9zaGlmdF9SR0I7XG5cdH1cbiNlbmRpZiIscm91Z2huZXNzbWFwX2ZyYWdtZW50OiJmbG9hdCByb3VnaG5lc3NGYWN0b3IgPSByb3VnaG5lc3M7XG4jaWZkZWYgVVNFX1JPVUdITkVTU01BUFxuXHR2ZWM0IHRleGVsUm91Z2huZXNzID0gdGV4dHVyZTJEKCByb3VnaG5lc3NNYXAsIHZVdiApO1xuXHRyb3VnaG5lc3NGYWN0b3IgKj0gdGV4ZWxSb3VnaG5lc3MuZztcbiNlbmRpZiIscm91Z2huZXNzbWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfUk9VR0hORVNTTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIHJvdWdobmVzc01hcDtcbiNlbmRpZiIsc2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfU0hBRE9XTUFQXG5cdCNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwXG5cdFx0dW5pZm9ybSBzYW1wbGVyMkQgZGlyZWN0aW9uYWxTaGFkb3dNYXBbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHZhcnlpbmcgdmVjNCB2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07XG5cdFx0c3RydWN0IERpcmVjdGlvbmFsTGlnaHRTaGFkb3cge1xuXHRcdFx0ZmxvYXQgc2hhZG93Qmlhcztcblx0XHRcdGZsb2F0IHNoYWRvd05vcm1hbEJpYXM7XG5cdFx0XHRmbG9hdCBzaGFkb3dSYWRpdXM7XG5cdFx0XHR2ZWMyIHNoYWRvd01hcFNpemU7XG5cdFx0fTtcblx0XHR1bmlmb3JtIERpcmVjdGlvbmFsTGlnaHRTaGFkb3cgZGlyZWN0aW9uYWxMaWdodFNoYWRvd3NbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdO1xuXHQjZW5kaWZcblx0I2lmIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwXG5cdFx0dW5pZm9ybSBzYW1wbGVyMkQgc3BvdFNoYWRvd01hcFsgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHZhcnlpbmcgdmVjNCB2U3BvdFNoYWRvd0Nvb3JkWyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07XG5cdFx0c3RydWN0IFNwb3RMaWdodFNoYWRvdyB7XG5cdFx0XHRmbG9hdCBzaGFkb3dCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93Tm9ybWFsQmlhcztcblx0XHRcdGZsb2F0IHNoYWRvd1JhZGl1cztcblx0XHRcdHZlYzIgc2hhZG93TWFwU2l6ZTtcblx0XHR9O1xuXHRcdHVuaWZvcm0gU3BvdExpZ2h0U2hhZG93IHNwb3RMaWdodFNoYWRvd3NbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTtcblx0I2VuZGlmXG5cdCNpZiBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDBcblx0XHR1bmlmb3JtIHNhbXBsZXIyRCBwb2ludFNoYWRvd01hcFsgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTtcblx0XHR2YXJ5aW5nIHZlYzQgdlBvaW50U2hhZG93Q29vcmRbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07XG5cdFx0c3RydWN0IFBvaW50TGlnaHRTaGFkb3cge1xuXHRcdFx0ZmxvYXQgc2hhZG93Qmlhcztcblx0XHRcdGZsb2F0IHNoYWRvd05vcm1hbEJpYXM7XG5cdFx0XHRmbG9hdCBzaGFkb3dSYWRpdXM7XG5cdFx0XHR2ZWMyIHNoYWRvd01hcFNpemU7XG5cdFx0XHRmbG9hdCBzaGFkb3dDYW1lcmFOZWFyO1xuXHRcdFx0ZmxvYXQgc2hhZG93Q2FtZXJhRmFyO1xuXHRcdH07XG5cdFx0dW5pZm9ybSBQb2ludExpZ2h0U2hhZG93IHBvaW50TGlnaHRTaGFkb3dzWyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdO1xuXHQjZW5kaWZcblx0ZmxvYXQgdGV4dHVyZTJEQ29tcGFyZSggc2FtcGxlcjJEIGRlcHRocywgdmVjMiB1diwgZmxvYXQgY29tcGFyZSApIHtcblx0XHRyZXR1cm4gc3RlcCggY29tcGFyZSwgdW5wYWNrUkdCQVRvRGVwdGgoIHRleHR1cmUyRCggZGVwdGhzLCB1diApICkgKTtcblx0fVxuXHR2ZWMyIHRleHR1cmUyRERpc3RyaWJ1dGlvbiggc2FtcGxlcjJEIHNoYWRvdywgdmVjMiB1diApIHtcblx0XHRyZXR1cm4gdW5wYWNrUkdCQVRvMkhhbGYoIHRleHR1cmUyRCggc2hhZG93LCB1diApICk7XG5cdH1cblx0ZmxvYXQgVlNNU2hhZG93IChzYW1wbGVyMkQgc2hhZG93LCB2ZWMyIHV2LCBmbG9hdCBjb21wYXJlICl7XG5cdFx0ZmxvYXQgb2NjbHVzaW9uID0gMS4wO1xuXHRcdHZlYzIgZGlzdHJpYnV0aW9uID0gdGV4dHVyZTJERGlzdHJpYnV0aW9uKCBzaGFkb3csIHV2ICk7XG5cdFx0ZmxvYXQgaGFyZF9zaGFkb3cgPSBzdGVwKCBjb21wYXJlICwgZGlzdHJpYnV0aW9uLnggKTtcblx0XHRpZiAoaGFyZF9zaGFkb3cgIT0gMS4wICkge1xuXHRcdFx0ZmxvYXQgZGlzdGFuY2UgPSBjb21wYXJlIC0gZGlzdHJpYnV0aW9uLnggO1xuXHRcdFx0ZmxvYXQgdmFyaWFuY2UgPSBtYXgoIDAuMDAwMDAsIGRpc3RyaWJ1dGlvbi55ICogZGlzdHJpYnV0aW9uLnkgKTtcblx0XHRcdGZsb2F0IHNvZnRuZXNzX3Byb2JhYmlsaXR5ID0gdmFyaWFuY2UgLyAodmFyaWFuY2UgKyBkaXN0YW5jZSAqIGRpc3RhbmNlICk7XHRcdFx0c29mdG5lc3NfcHJvYmFiaWxpdHkgPSBjbGFtcCggKCBzb2Z0bmVzc19wcm9iYWJpbGl0eSAtIDAuMyApIC8gKCAwLjk1IC0gMC4zICksIDAuMCwgMS4wICk7XHRcdFx0b2NjbHVzaW9uID0gY2xhbXAoIG1heCggaGFyZF9zaGFkb3csIHNvZnRuZXNzX3Byb2JhYmlsaXR5ICksIDAuMCwgMS4wICk7XG5cdFx0fVxuXHRcdHJldHVybiBvY2NsdXNpb247XG5cdH1cblx0ZmxvYXQgZ2V0U2hhZG93KCBzYW1wbGVyMkQgc2hhZG93TWFwLCB2ZWMyIHNoYWRvd01hcFNpemUsIGZsb2F0IHNoYWRvd0JpYXMsIGZsb2F0IHNoYWRvd1JhZGl1cywgdmVjNCBzaGFkb3dDb29yZCApIHtcblx0XHRmbG9hdCBzaGFkb3cgPSAxLjA7XG5cdFx0c2hhZG93Q29vcmQueHl6IC89IHNoYWRvd0Nvb3JkLnc7XG5cdFx0c2hhZG93Q29vcmQueiArPSBzaGFkb3dCaWFzO1xuXHRcdGJ2ZWM0IGluRnJ1c3R1bVZlYyA9IGJ2ZWM0ICggc2hhZG93Q29vcmQueCA+PSAwLjAsIHNoYWRvd0Nvb3JkLnggPD0gMS4wLCBzaGFkb3dDb29yZC55ID49IDAuMCwgc2hhZG93Q29vcmQueSA8PSAxLjAgKTtcblx0XHRib29sIGluRnJ1c3R1bSA9IGFsbCggaW5GcnVzdHVtVmVjICk7XG5cdFx0YnZlYzIgZnJ1c3R1bVRlc3RWZWMgPSBidmVjMiggaW5GcnVzdHVtLCBzaGFkb3dDb29yZC56IDw9IDEuMCApO1xuXHRcdGJvb2wgZnJ1c3R1bVRlc3QgPSBhbGwoIGZydXN0dW1UZXN0VmVjICk7XG5cdFx0aWYgKCBmcnVzdHVtVGVzdCApIHtcblx0XHQjaWYgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfUENGIClcblx0XHRcdHZlYzIgdGV4ZWxTaXplID0gdmVjMiggMS4wICkgLyBzaGFkb3dNYXBTaXplO1xuXHRcdFx0ZmxvYXQgZHgwID0gLSB0ZXhlbFNpemUueCAqIHNoYWRvd1JhZGl1cztcblx0XHRcdGZsb2F0IGR5MCA9IC0gdGV4ZWxTaXplLnkgKiBzaGFkb3dSYWRpdXM7XG5cdFx0XHRmbG9hdCBkeDEgPSArIHRleGVsU2l6ZS54ICogc2hhZG93UmFkaXVzO1xuXHRcdFx0ZmxvYXQgZHkxID0gKyB0ZXhlbFNpemUueSAqIHNoYWRvd1JhZGl1cztcblx0XHRcdGZsb2F0IGR4MiA9IGR4MCAvIDIuMDtcblx0XHRcdGZsb2F0IGR5MiA9IGR5MCAvIDIuMDtcblx0XHRcdGZsb2F0IGR4MyA9IGR4MSAvIDIuMDtcblx0XHRcdGZsb2F0IGR5MyA9IGR5MSAvIDIuMDtcblx0XHRcdHNoYWRvdyA9IChcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MCwgZHkwICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCAwLjAsIGR5MCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgxLCBkeTAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MiwgZHkyICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCAwLjAsIGR5MiApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgzLCBkeTIgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MCwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDIsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5LCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgzLCAwLjAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MSwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDIsIGR5MyApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggMC4wLCBkeTMgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MywgZHkzICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDAsIGR5MSApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggMC4wLCBkeTEgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MSwgZHkxICksIHNoYWRvd0Nvb3JkLnogKVxuXHRcdFx0KSAqICggMS4wIC8gMTcuMCApO1xuXHRcdCNlbGlmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRl9TT0ZUIClcblx0XHRcdHZlYzIgdGV4ZWxTaXplID0gdmVjMiggMS4wICkgLyBzaGFkb3dNYXBTaXplO1xuXHRcdFx0ZmxvYXQgZHggPSB0ZXhlbFNpemUueDtcblx0XHRcdGZsb2F0IGR5ID0gdGV4ZWxTaXplLnk7XG5cdFx0XHR2ZWMyIHV2ID0gc2hhZG93Q29vcmQueHk7XG5cdFx0XHR2ZWMyIGYgPSBmcmFjdCggdXYgKiBzaGFkb3dNYXBTaXplICsgMC41ICk7XG5cdFx0XHR1diAtPSBmICogdGV4ZWxTaXplO1xuXHRcdFx0c2hhZG93ID0gKFxuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2LCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggZHgsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMC4wLCBkeSApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdGV4ZWxTaXplLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHRtaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAtZHgsIDAuMCApLCBzaGFkb3dDb29yZC56ICksIFxuXHRcdFx0XHRcdCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMi4wICogZHgsIDAuMCApLCBzaGFkb3dDb29yZC56ICksXG5cdFx0XHRcdFx0IGYueCApICtcblx0XHRcdFx0bWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggLWR4LCBkeSApLCBzaGFkb3dDb29yZC56ICksIFxuXHRcdFx0XHRcdCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMi4wICogZHgsIGR5ICksIHNoYWRvd0Nvb3JkLnogKSxcblx0XHRcdFx0XHQgZi54ICkgK1xuXHRcdFx0XHRtaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAwLjAsIC1keSApLCBzaGFkb3dDb29yZC56ICksIFxuXHRcdFx0XHRcdCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMC4wLCAyLjAgKiBkeSApLCBzaGFkb3dDb29yZC56ICksXG5cdFx0XHRcdFx0IGYueSApICtcblx0XHRcdFx0bWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggZHgsIC1keSApLCBzaGFkb3dDb29yZC56ICksIFxuXHRcdFx0XHRcdCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggZHgsIDIuMCAqIGR5ICksIHNoYWRvd0Nvb3JkLnogKSxcblx0XHRcdFx0XHQgZi55ICkgK1xuXHRcdFx0XHRtaXgoIG1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIC1keCwgLWR5ICksIHNoYWRvd0Nvb3JkLnogKSwgXG5cdFx0XHRcdFx0XHQgIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAyLjAgKiBkeCwgLWR5ICksIHNoYWRvd0Nvb3JkLnogKSxcblx0XHRcdFx0XHRcdCAgZi54ICksXG5cdFx0XHRcdFx0IG1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIC1keCwgMi4wICogZHkgKSwgc2hhZG93Q29vcmQueiApLCBcblx0XHRcdFx0XHRcdCAgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDIuMCAqIGR4LCAyLjAgKiBkeSApLCBzaGFkb3dDb29yZC56ICksXG5cdFx0XHRcdFx0XHQgIGYueCApLFxuXHRcdFx0XHRcdCBmLnkgKVxuXHRcdFx0KSAqICggMS4wIC8gOS4wICk7XG5cdFx0I2VsaWYgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfVlNNIClcblx0XHRcdHNoYWRvdyA9IFZTTVNoYWRvdyggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSwgc2hhZG93Q29vcmQueiApO1xuXHRcdCNlbHNlXG5cdFx0XHRzaGFkb3cgPSB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5LCBzaGFkb3dDb29yZC56ICk7XG5cdFx0I2VuZGlmXG5cdFx0fVxuXHRcdHJldHVybiBzaGFkb3c7XG5cdH1cblx0dmVjMiBjdWJlVG9VViggdmVjMyB2LCBmbG9hdCB0ZXhlbFNpemVZICkge1xuXHRcdHZlYzMgYWJzViA9IGFicyggdiApO1xuXHRcdGZsb2F0IHNjYWxlVG9DdWJlID0gMS4wIC8gbWF4KCBhYnNWLngsIG1heCggYWJzVi55LCBhYnNWLnogKSApO1xuXHRcdGFic1YgKj0gc2NhbGVUb0N1YmU7XG5cdFx0diAqPSBzY2FsZVRvQ3ViZSAqICggMS4wIC0gMi4wICogdGV4ZWxTaXplWSApO1xuXHRcdHZlYzIgcGxhbmFyID0gdi54eTtcblx0XHRmbG9hdCBhbG1vc3RBVGV4ZWwgPSAxLjUgKiB0ZXhlbFNpemVZO1xuXHRcdGZsb2F0IGFsbW9zdE9uZSA9IDEuMCAtIGFsbW9zdEFUZXhlbDtcblx0XHRpZiAoIGFic1YueiA+PSBhbG1vc3RPbmUgKSB7XG5cdFx0XHRpZiAoIHYueiA+IDAuMCApXG5cdFx0XHRcdHBsYW5hci54ID0gNC4wIC0gdi54O1xuXHRcdH0gZWxzZSBpZiAoIGFic1YueCA+PSBhbG1vc3RPbmUgKSB7XG5cdFx0XHRmbG9hdCBzaWduWCA9IHNpZ24oIHYueCApO1xuXHRcdFx0cGxhbmFyLnggPSB2LnogKiBzaWduWCArIDIuMCAqIHNpZ25YO1xuXHRcdH0gZWxzZSBpZiAoIGFic1YueSA+PSBhbG1vc3RPbmUgKSB7XG5cdFx0XHRmbG9hdCBzaWduWSA9IHNpZ24oIHYueSApO1xuXHRcdFx0cGxhbmFyLnggPSB2LnggKyAyLjAgKiBzaWduWSArIDIuMDtcblx0XHRcdHBsYW5hci55ID0gdi56ICogc2lnblkgLSAyLjA7XG5cdFx0fVxuXHRcdHJldHVybiB2ZWMyKCAwLjEyNSwgMC4yNSApICogcGxhbmFyICsgdmVjMiggMC4zNzUsIDAuNzUgKTtcblx0fVxuXHRmbG9hdCBnZXRQb2ludFNoYWRvdyggc2FtcGxlcjJEIHNoYWRvd01hcCwgdmVjMiBzaGFkb3dNYXBTaXplLCBmbG9hdCBzaGFkb3dCaWFzLCBmbG9hdCBzaGFkb3dSYWRpdXMsIHZlYzQgc2hhZG93Q29vcmQsIGZsb2F0IHNoYWRvd0NhbWVyYU5lYXIsIGZsb2F0IHNoYWRvd0NhbWVyYUZhciApIHtcblx0XHR2ZWMyIHRleGVsU2l6ZSA9IHZlYzIoIDEuMCApIC8gKCBzaGFkb3dNYXBTaXplICogdmVjMiggNC4wLCAyLjAgKSApO1xuXHRcdHZlYzMgbGlnaHRUb1Bvc2l0aW9uID0gc2hhZG93Q29vcmQueHl6O1xuXHRcdGZsb2F0IGRwID0gKCBsZW5ndGgoIGxpZ2h0VG9Qb3NpdGlvbiApIC0gc2hhZG93Q2FtZXJhTmVhciApIC8gKCBzaGFkb3dDYW1lcmFGYXIgLSBzaGFkb3dDYW1lcmFOZWFyICk7XHRcdGRwICs9IHNoYWRvd0JpYXM7XG5cdFx0dmVjMyBiZDNEID0gbm9ybWFsaXplKCBsaWdodFRvUG9zaXRpb24gKTtcblx0XHQjaWYgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfUENGICkgfHwgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfUENGX1NPRlQgKSB8fCBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9WU00gKVxuXHRcdFx0dmVjMiBvZmZzZXQgPSB2ZWMyKCAtIDEsIDEgKSAqIHNoYWRvd1JhZGl1cyAqIHRleGVsU2l6ZS55O1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC54eXksIHRleGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnl5eSwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHl4LCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eXgsIHRleGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNELCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC54eHksIHRleGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnl4eSwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHh4LCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eHgsIHRleGVsU2l6ZS55ICksIGRwIClcblx0XHRcdCkgKiAoIDEuMCAvIDkuMCApO1xuXHRcdCNlbHNlXG5cdFx0XHRyZXR1cm4gdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCwgdGV4ZWxTaXplLnkgKSwgZHAgKTtcblx0XHQjZW5kaWZcblx0fVxuI2VuZGlmIixzaGFkb3dtYXBfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfU0hBRE9XTUFQXG5cdCNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwXG5cdFx0dW5pZm9ybSBtYXQ0IGRpcmVjdGlvbmFsU2hhZG93TWF0cml4WyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTtcblx0XHR2YXJ5aW5nIHZlYzQgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHN0cnVjdCBEaXJlY3Rpb25hbExpZ2h0U2hhZG93IHtcblx0XHRcdGZsb2F0IHNoYWRvd0JpYXM7XG5cdFx0XHRmbG9hdCBzaGFkb3dOb3JtYWxCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93UmFkaXVzO1xuXHRcdFx0dmVjMiBzaGFkb3dNYXBTaXplO1xuXHRcdH07XG5cdFx0dW5pZm9ybSBEaXJlY3Rpb25hbExpZ2h0U2hhZG93IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTtcblx0I2VuZGlmXG5cdCNpZiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMFxuXHRcdHVuaWZvcm0gbWF0NCBzcG90U2hhZG93TWF0cml4WyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07XG5cdFx0dmFyeWluZyB2ZWM0IHZTcG90U2hhZG93Q29vcmRbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTtcblx0XHRzdHJ1Y3QgU3BvdExpZ2h0U2hhZG93IHtcblx0XHRcdGZsb2F0IHNoYWRvd0JpYXM7XG5cdFx0XHRmbG9hdCBzaGFkb3dOb3JtYWxCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93UmFkaXVzO1xuXHRcdFx0dmVjMiBzaGFkb3dNYXBTaXplO1xuXHRcdH07XG5cdFx0dW5pZm9ybSBTcG90TGlnaHRTaGFkb3cgc3BvdExpZ2h0U2hhZG93c1sgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdO1xuXHQjZW5kaWZcblx0I2lmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMFxuXHRcdHVuaWZvcm0gbWF0NCBwb2ludFNoYWRvd01hdHJpeFsgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTtcblx0XHR2YXJ5aW5nIHZlYzQgdlBvaW50U2hhZG93Q29vcmRbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07XG5cdFx0c3RydWN0IFBvaW50TGlnaHRTaGFkb3cge1xuXHRcdFx0ZmxvYXQgc2hhZG93Qmlhcztcblx0XHRcdGZsb2F0IHNoYWRvd05vcm1hbEJpYXM7XG5cdFx0XHRmbG9hdCBzaGFkb3dSYWRpdXM7XG5cdFx0XHR2ZWMyIHNoYWRvd01hcFNpemU7XG5cdFx0XHRmbG9hdCBzaGFkb3dDYW1lcmFOZWFyO1xuXHRcdFx0ZmxvYXQgc2hhZG93Q2FtZXJhRmFyO1xuXHRcdH07XG5cdFx0dW5pZm9ybSBQb2ludExpZ2h0U2hhZG93IHBvaW50TGlnaHRTaGFkb3dzWyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdO1xuXHQjZW5kaWZcbiNlbmRpZiIsc2hhZG93bWFwX3ZlcnRleDoiI2lmZGVmIFVTRV9TSEFET1dNQVBcblx0I2lmIE5VTV9ESVJfTElHSFRfU0hBRE9XUyA+IDAgfHwgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDAgfHwgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwXG5cdFx0dmVjMyBzaGFkb3dXb3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIHRyYW5zZm9ybWVkTm9ybWFsLCB2aWV3TWF0cml4ICk7XG5cdFx0dmVjNCBzaGFkb3dXb3JsZFBvc2l0aW9uO1xuXHQjZW5kaWZcblx0I2lmIE5VTV9ESVJfTElHSFRfU0hBRE9XUyA+IDBcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fRElSX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7XG5cdFx0c2hhZG93V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24gKyB2ZWM0KCBzaGFkb3dXb3JsZE5vcm1hbCAqIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBpIF0uc2hhZG93Tm9ybWFsQmlhcywgMCApO1xuXHRcdHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBpIF0gPSBkaXJlY3Rpb25hbFNoYWRvd01hdHJpeFsgaSBdICogc2hhZG93V29ybGRQb3NpdGlvbjtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuXHQjZW5kaWZcblx0I2lmIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwXG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRfU0hBRE9XUzsgaSArKyApIHtcblx0XHRzaGFkb3dXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbiArIHZlYzQoIHNoYWRvd1dvcmxkTm9ybWFsICogc3BvdExpZ2h0U2hhZG93c1sgaSBdLnNoYWRvd05vcm1hbEJpYXMsIDAgKTtcblx0XHR2U3BvdFNoYWRvd0Nvb3JkWyBpIF0gPSBzcG90U2hhZG93TWF0cml4WyBpIF0gKiBzaGFkb3dXb3JsZFBvc2l0aW9uO1xuXHR9XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG5cdCNlbmRpZlxuXHQjaWYgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwXG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7XG5cdFx0c2hhZG93V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24gKyB2ZWM0KCBzaGFkb3dXb3JsZE5vcm1hbCAqIHBvaW50TGlnaHRTaGFkb3dzWyBpIF0uc2hhZG93Tm9ybWFsQmlhcywgMCApO1xuXHRcdHZQb2ludFNoYWRvd0Nvb3JkWyBpIF0gPSBwb2ludFNoYWRvd01hdHJpeFsgaSBdICogc2hhZG93V29ybGRQb3NpdGlvbjtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuXHQjZW5kaWZcbiNlbmRpZiIsc2hhZG93bWFza19wYXJzX2ZyYWdtZW50OiJmbG9hdCBnZXRTaGFkb3dNYXNrKCkge1xuXHRmbG9hdCBzaGFkb3cgPSAxLjA7XG5cdCNpZmRlZiBVU0VfU0hBRE9XTUFQXG5cdCNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwXG5cdERpcmVjdGlvbmFsTGlnaHRTaGFkb3cgZGlyZWN0aW9uYWxMaWdodDtcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fRElSX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7XG5cdFx0ZGlyZWN0aW9uYWxMaWdodCA9IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBpIF07XG5cdFx0c2hhZG93ICo9IHJlY2VpdmVTaGFkb3cgPyBnZXRTaGFkb3coIGRpcmVjdGlvbmFsU2hhZG93TWFwWyBpIF0sIGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93TWFwU2l6ZSwgZGlyZWN0aW9uYWxMaWdodC5zaGFkb3dCaWFzLCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvd1JhZGl1cywgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIGkgXSApIDogMS4wO1xuXHR9XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG5cdCNlbmRpZlxuXHQjaWYgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDBcblx0U3BvdExpZ2h0U2hhZG93IHNwb3RMaWdodDtcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fU1BPVF9MSUdIVF9TSEFET1dTOyBpICsrICkge1xuXHRcdHNwb3RMaWdodCA9IHNwb3RMaWdodFNoYWRvd3NbIGkgXTtcblx0XHRzaGFkb3cgKj0gcmVjZWl2ZVNoYWRvdyA/IGdldFNoYWRvdyggc3BvdFNoYWRvd01hcFsgaSBdLCBzcG90TGlnaHQuc2hhZG93TWFwU2l6ZSwgc3BvdExpZ2h0LnNoYWRvd0JpYXMsIHNwb3RMaWdodC5zaGFkb3dSYWRpdXMsIHZTcG90U2hhZG93Q29vcmRbIGkgXSApIDogMS4wO1xuXHR9XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG5cdCNlbmRpZlxuXHQjaWYgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwXG5cdFBvaW50TGlnaHRTaGFkb3cgcG9pbnRMaWdodDtcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUzsgaSArKyApIHtcblx0XHRwb2ludExpZ2h0ID0gcG9pbnRMaWdodFNoYWRvd3NbIGkgXTtcblx0XHRzaGFkb3cgKj0gcmVjZWl2ZVNoYWRvdyA/IGdldFBvaW50U2hhZG93KCBwb2ludFNoYWRvd01hcFsgaSBdLCBwb2ludExpZ2h0LnNoYWRvd01hcFNpemUsIHBvaW50TGlnaHQuc2hhZG93QmlhcywgcG9pbnRMaWdodC5zaGFkb3dSYWRpdXMsIHZQb2ludFNoYWRvd0Nvb3JkWyBpIF0sIHBvaW50TGlnaHQuc2hhZG93Q2FtZXJhTmVhciwgcG9pbnRMaWdodC5zaGFkb3dDYW1lcmFGYXIgKSA6IDEuMDtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuXHQjZW5kaWZcblx0I2VuZGlmXG5cdHJldHVybiBzaGFkb3c7XG59Iixza2luYmFzZV92ZXJ0ZXg6IiNpZmRlZiBVU0VfU0tJTk5JTkdcblx0bWF0NCBib25lTWF0WCA9IGdldEJvbmVNYXRyaXgoIHNraW5JbmRleC54ICk7XG5cdG1hdDQgYm9uZU1hdFkgPSBnZXRCb25lTWF0cml4KCBza2luSW5kZXgueSApO1xuXHRtYXQ0IGJvbmVNYXRaID0gZ2V0Qm9uZU1hdHJpeCggc2tpbkluZGV4LnogKTtcblx0bWF0NCBib25lTWF0VyA9IGdldEJvbmVNYXRyaXgoIHNraW5JbmRleC53ICk7XG4jZW5kaWYiLHNraW5uaW5nX3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX1NLSU5OSU5HXG5cdHVuaWZvcm0gbWF0NCBiaW5kTWF0cml4O1xuXHR1bmlmb3JtIG1hdDQgYmluZE1hdHJpeEludmVyc2U7XG5cdCNpZmRlZiBCT05FX1RFWFRVUkVcblx0XHR1bmlmb3JtIGhpZ2hwIHNhbXBsZXIyRCBib25lVGV4dHVyZTtcblx0XHR1bmlmb3JtIGludCBib25lVGV4dHVyZVNpemU7XG5cdFx0bWF0NCBnZXRCb25lTWF0cml4KCBjb25zdCBpbiBmbG9hdCBpICkge1xuXHRcdFx0ZmxvYXQgaiA9IGkgKiA0LjA7XG5cdFx0XHRmbG9hdCB4ID0gbW9kKCBqLCBmbG9hdCggYm9uZVRleHR1cmVTaXplICkgKTtcblx0XHRcdGZsb2F0IHkgPSBmbG9vciggaiAvIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKSApO1xuXHRcdFx0ZmxvYXQgZHggPSAxLjAgLyBmbG9hdCggYm9uZVRleHR1cmVTaXplICk7XG5cdFx0XHRmbG9hdCBkeSA9IDEuMCAvIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKTtcblx0XHRcdHkgPSBkeSAqICggeSArIDAuNSApO1xuXHRcdFx0dmVjNCB2MSA9IHRleHR1cmUyRCggYm9uZVRleHR1cmUsIHZlYzIoIGR4ICogKCB4ICsgMC41ICksIHkgKSApO1xuXHRcdFx0dmVjNCB2MiA9IHRleHR1cmUyRCggYm9uZVRleHR1cmUsIHZlYzIoIGR4ICogKCB4ICsgMS41ICksIHkgKSApO1xuXHRcdFx0dmVjNCB2MyA9IHRleHR1cmUyRCggYm9uZVRleHR1cmUsIHZlYzIoIGR4ICogKCB4ICsgMi41ICksIHkgKSApO1xuXHRcdFx0dmVjNCB2NCA9IHRleHR1cmUyRCggYm9uZVRleHR1cmUsIHZlYzIoIGR4ICogKCB4ICsgMy41ICksIHkgKSApO1xuXHRcdFx0bWF0NCBib25lID0gbWF0NCggdjEsIHYyLCB2MywgdjQgKTtcblx0XHRcdHJldHVybiBib25lO1xuXHRcdH1cblx0I2Vsc2Vcblx0XHR1bmlmb3JtIG1hdDQgYm9uZU1hdHJpY2VzWyBNQVhfQk9ORVMgXTtcblx0XHRtYXQ0IGdldEJvbmVNYXRyaXgoIGNvbnN0IGluIGZsb2F0IGkgKSB7XG5cdFx0XHRtYXQ0IGJvbmUgPSBib25lTWF0cmljZXNbIGludChpKSBdO1xuXHRcdFx0cmV0dXJuIGJvbmU7XG5cdFx0fVxuXHQjZW5kaWZcbiNlbmRpZiIsc2tpbm5pbmdfdmVydGV4OiIjaWZkZWYgVVNFX1NLSU5OSU5HXG5cdHZlYzQgc2tpblZlcnRleCA9IGJpbmRNYXRyaXggKiB2ZWM0KCB0cmFuc2Zvcm1lZCwgMS4wICk7XG5cdHZlYzQgc2tpbm5lZCA9IHZlYzQoIDAuMCApO1xuXHRza2lubmVkICs9IGJvbmVNYXRYICogc2tpblZlcnRleCAqIHNraW5XZWlnaHQueDtcblx0c2tpbm5lZCArPSBib25lTWF0WSAqIHNraW5WZXJ0ZXggKiBza2luV2VpZ2h0Lnk7XG5cdHNraW5uZWQgKz0gYm9uZU1hdFogKiBza2luVmVydGV4ICogc2tpbldlaWdodC56O1xuXHRza2lubmVkICs9IGJvbmVNYXRXICogc2tpblZlcnRleCAqIHNraW5XZWlnaHQudztcblx0dHJhbnNmb3JtZWQgPSAoIGJpbmRNYXRyaXhJbnZlcnNlICogc2tpbm5lZCApLnh5ejtcbiNlbmRpZiIsc2tpbm5vcm1hbF92ZXJ0ZXg6IiNpZmRlZiBVU0VfU0tJTk5JTkdcblx0bWF0NCBza2luTWF0cml4ID0gbWF0NCggMC4wICk7XG5cdHNraW5NYXRyaXggKz0gc2tpbldlaWdodC54ICogYm9uZU1hdFg7XG5cdHNraW5NYXRyaXggKz0gc2tpbldlaWdodC55ICogYm9uZU1hdFk7XG5cdHNraW5NYXRyaXggKz0gc2tpbldlaWdodC56ICogYm9uZU1hdFo7XG5cdHNraW5NYXRyaXggKz0gc2tpbldlaWdodC53ICogYm9uZU1hdFc7XG5cdHNraW5NYXRyaXggPSBiaW5kTWF0cml4SW52ZXJzZSAqIHNraW5NYXRyaXggKiBiaW5kTWF0cml4O1xuXHRvYmplY3ROb3JtYWwgPSB2ZWM0KCBza2luTWF0cml4ICogdmVjNCggb2JqZWN0Tm9ybWFsLCAwLjAgKSApLnh5ejtcblx0I2lmZGVmIFVTRV9UQU5HRU5UXG5cdFx0b2JqZWN0VGFuZ2VudCA9IHZlYzQoIHNraW5NYXRyaXggKiB2ZWM0KCBvYmplY3RUYW5nZW50LCAwLjAgKSApLnh5ejtcblx0I2VuZGlmXG4jZW5kaWYiLHNwZWN1bGFybWFwX2ZyYWdtZW50OiJmbG9hdCBzcGVjdWxhclN0cmVuZ3RoO1xuI2lmZGVmIFVTRV9TUEVDVUxBUk1BUFxuXHR2ZWM0IHRleGVsU3BlY3VsYXIgPSB0ZXh0dXJlMkQoIHNwZWN1bGFyTWFwLCB2VXYgKTtcblx0c3BlY3VsYXJTdHJlbmd0aCA9IHRleGVsU3BlY3VsYXIucjtcbiNlbHNlXG5cdHNwZWN1bGFyU3RyZW5ndGggPSAxLjA7XG4jZW5kaWYiLHNwZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfU1BFQ1VMQVJNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgc3BlY3VsYXJNYXA7XG4jZW5kaWYiLHRvbmVtYXBwaW5nX2ZyYWdtZW50OiIjaWYgZGVmaW5lZCggVE9ORV9NQVBQSU5HIClcblx0Z2xfRnJhZ0NvbG9yLnJnYiA9IHRvbmVNYXBwaW5nKCBnbF9GcmFnQ29sb3IucmdiICk7XG4jZW5kaWYiLHRvbmVtYXBwaW5nX3BhcnNfZnJhZ21lbnQ6IiNpZm5kZWYgc2F0dXJhdGVcbiNkZWZpbmUgc2F0dXJhdGUoYSkgY2xhbXAoIGEsIDAuMCwgMS4wIClcbiNlbmRpZlxudW5pZm9ybSBmbG9hdCB0b25lTWFwcGluZ0V4cG9zdXJlO1xudmVjMyBMaW5lYXJUb25lTWFwcGluZyggdmVjMyBjb2xvciApIHtcblx0cmV0dXJuIHRvbmVNYXBwaW5nRXhwb3N1cmUgKiBjb2xvcjtcbn1cbnZlYzMgUmVpbmhhcmRUb25lTWFwcGluZyggdmVjMyBjb2xvciApIHtcblx0Y29sb3IgKj0gdG9uZU1hcHBpbmdFeHBvc3VyZTtcblx0cmV0dXJuIHNhdHVyYXRlKCBjb2xvciAvICggdmVjMyggMS4wICkgKyBjb2xvciApICk7XG59XG52ZWMzIE9wdGltaXplZENpbmVvblRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkge1xuXHRjb2xvciAqPSB0b25lTWFwcGluZ0V4cG9zdXJlO1xuXHRjb2xvciA9IG1heCggdmVjMyggMC4wICksIGNvbG9yIC0gMC4wMDQgKTtcblx0cmV0dXJuIHBvdyggKCBjb2xvciAqICggNi4yICogY29sb3IgKyAwLjUgKSApIC8gKCBjb2xvciAqICggNi4yICogY29sb3IgKyAxLjcgKSArIDAuMDYgKSwgdmVjMyggMi4yICkgKTtcbn1cbnZlYzMgUlJUQW5kT0RURml0KCB2ZWMzIHYgKSB7XG5cdHZlYzMgYSA9IHYgKiAoIHYgKyAwLjAyNDU3ODYgKSAtIDAuMDAwMDkwNTM3O1xuXHR2ZWMzIGIgPSB2ICogKCAwLjk4MzcyOSAqIHYgKyAwLjQzMjk1MTAgKSArIDAuMjM4MDgxO1xuXHRyZXR1cm4gYSAvIGI7XG59XG52ZWMzIEFDRVNGaWxtaWNUb25lTWFwcGluZyggdmVjMyBjb2xvciApIHtcblx0Y29uc3QgbWF0MyBBQ0VTSW5wdXRNYXQgPSBtYXQzKFxuXHRcdHZlYzMoIDAuNTk3MTksIDAuMDc2MDAsIDAuMDI4NDAgKSxcdFx0dmVjMyggMC4zNTQ1OCwgMC45MDgzNCwgMC4xMzM4MyApLFxuXHRcdHZlYzMoIDAuMDQ4MjMsIDAuMDE1NjYsIDAuODM3NzcgKVxuXHQpO1xuXHRjb25zdCBtYXQzIEFDRVNPdXRwdXRNYXQgPSBtYXQzKFxuXHRcdHZlYzMoICAxLjYwNDc1LCAtMC4xMDIwOCwgLTAuMDAzMjcgKSxcdFx0dmVjMyggLTAuNTMxMDgsICAxLjEwODEzLCAtMC4wNzI3NiApLFxuXHRcdHZlYzMoIC0wLjA3MzY3LCAtMC4wMDYwNSwgIDEuMDc2MDIgKVxuXHQpO1xuXHRjb2xvciAqPSB0b25lTWFwcGluZ0V4cG9zdXJlIC8gMC42O1xuXHRjb2xvciA9IEFDRVNJbnB1dE1hdCAqIGNvbG9yO1xuXHRjb2xvciA9IFJSVEFuZE9EVEZpdCggY29sb3IgKTtcblx0Y29sb3IgPSBBQ0VTT3V0cHV0TWF0ICogY29sb3I7XG5cdHJldHVybiBzYXR1cmF0ZSggY29sb3IgKTtcbn1cbnZlYzMgQ3VzdG9tVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7IHJldHVybiBjb2xvcjsgfSIsdHJhbnNtaXNzaW9ubWFwX2ZyYWdtZW50OiIjaWZkZWYgVVNFX1RSQU5TTUlTU0lPTk1BUFxuXHR0b3RhbFRyYW5zbWlzc2lvbiAqPSB0ZXh0dXJlMkQoIHRyYW5zbWlzc2lvbk1hcCwgdlV2ICkucjtcbiNlbmRpZiIsdHJhbnNtaXNzaW9ubWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIHRyYW5zbWlzc2lvbk1hcDtcbiNlbmRpZiIsdXZfcGFyc19mcmFnbWVudDoiI2lmICggZGVmaW5lZCggVVNFX1VWICkgJiYgISBkZWZpbmVkKCBVVlNfVkVSVEVYX09OTFkgKSApXG5cdHZhcnlpbmcgdmVjMiB2VXY7XG4jZW5kaWYiLHV2X3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX1VWXG5cdCNpZmRlZiBVVlNfVkVSVEVYX09OTFlcblx0XHR2ZWMyIHZVdjtcblx0I2Vsc2Vcblx0XHR2YXJ5aW5nIHZlYzIgdlV2O1xuXHQjZW5kaWZcblx0dW5pZm9ybSBtYXQzIHV2VHJhbnNmb3JtO1xuI2VuZGlmIix1dl92ZXJ0ZXg6IiNpZmRlZiBVU0VfVVZcblx0dlV2ID0gKCB1dlRyYW5zZm9ybSAqIHZlYzMoIHV2LCAxICkgKS54eTtcbiNlbmRpZiIsdXYyX3BhcnNfZnJhZ21lbnQ6IiNpZiBkZWZpbmVkKCBVU0VfTElHSFRNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQU9NQVAgKVxuXHR2YXJ5aW5nIHZlYzIgdlV2MjtcbiNlbmRpZiIsdXYyX3BhcnNfdmVydGV4OiIjaWYgZGVmaW5lZCggVVNFX0xJR0hUTUFQICkgfHwgZGVmaW5lZCggVVNFX0FPTUFQIClcblx0YXR0cmlidXRlIHZlYzIgdXYyO1xuXHR2YXJ5aW5nIHZlYzIgdlV2Mjtcblx0dW5pZm9ybSBtYXQzIHV2MlRyYW5zZm9ybTtcbiNlbmRpZiIsdXYyX3ZlcnRleDoiI2lmIGRlZmluZWQoIFVTRV9MSUdIVE1BUCApIHx8IGRlZmluZWQoIFVTRV9BT01BUCApXG5cdHZVdjIgPSAoIHV2MlRyYW5zZm9ybSAqIHZlYzMoIHV2MiwgMSApICkueHk7XG4jZW5kaWYiLHdvcmxkcG9zX3ZlcnRleDoiI2lmIGRlZmluZWQoIFVTRV9FTlZNQVAgKSB8fCBkZWZpbmVkKCBESVNUQU5DRSApIHx8IGRlZmluZWQgKCBVU0VfU0hBRE9XTUFQIClcblx0dmVjNCB3b3JsZFBvc2l0aW9uID0gdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApO1xuXHQjaWZkZWYgVVNFX0lOU1RBTkNJTkdcblx0XHR3b3JsZFBvc2l0aW9uID0gaW5zdGFuY2VNYXRyaXggKiB3b3JsZFBvc2l0aW9uO1xuXHQjZW5kaWZcblx0d29ybGRQb3NpdGlvbiA9IG1vZGVsTWF0cml4ICogd29ybGRQb3NpdGlvbjtcbiNlbmRpZiIsYmFja2dyb3VuZF9mcmFnOiJ1bmlmb3JtIHNhbXBsZXIyRCB0MkQ7XG52YXJ5aW5nIHZlYzIgdlV2O1xudm9pZCBtYWluKCkge1xuXHR2ZWM0IHRleENvbG9yID0gdGV4dHVyZTJEKCB0MkQsIHZVdiApO1xuXHRnbF9GcmFnQ29sb3IgPSBtYXBUZXhlbFRvTGluZWFyKCB0ZXhDb2xvciApO1xuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG59IixiYWNrZ3JvdW5kX3ZlcnQ6InZhcnlpbmcgdmVjMiB2VXY7XG51bmlmb3JtIG1hdDMgdXZUcmFuc2Zvcm07XG52b2lkIG1haW4oKSB7XG5cdHZVdiA9ICggdXZUcmFuc2Zvcm0gKiB2ZWMzKCB1diwgMSApICkueHk7XG5cdGdsX1Bvc2l0aW9uID0gdmVjNCggcG9zaXRpb24ueHksIDEuMCwgMS4wICk7XG59IixjdWJlX2ZyYWc6IiNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG52YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uO1xuI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD5cbnZvaWQgbWFpbigpIHtcblx0dmVjMyB2UmVmbGVjdCA9IHZXb3JsZERpcmVjdGlvbjtcblx0I2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD5cblx0Z2xfRnJhZ0NvbG9yID0gZW52Q29sb3I7XG5cdGdsX0ZyYWdDb2xvci5hICo9IG9wYWNpdHk7XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cbn0iLGN1YmVfdmVydDoidmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjtcbiNpbmNsdWRlIDxjb21tb24+XG52b2lkIG1haW4oKSB7XG5cdHZXb3JsZERpcmVjdGlvbiA9IHRyYW5zZm9ybURpcmVjdGlvbiggcG9zaXRpb24sIG1vZGVsTWF0cml4ICk7XG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0Z2xfUG9zaXRpb24ueiA9IGdsX1Bvc2l0aW9uLnc7XG59IixkZXB0aF9mcmFnOiIjaWYgREVQVEhfUEFDS0lORyA9PSAzMjAwXG5cdHVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNlbmRpZlxuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxwYWNraW5nPlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50PlxudmFyeWluZyB2ZWMyIHZIaWdoUHJlY2lzaW9uWlc7XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggMS4wICk7XG5cdCNpZiBERVBUSF9QQUNLSU5HID09IDMyMDBcblx0XHRkaWZmdXNlQ29sb3IuYSA9IG9wYWNpdHk7XG5cdCNlbmRpZlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0ZmxvYXQgZnJhZ0Nvb3JkWiA9IDAuNSAqIHZIaWdoUHJlY2lzaW9uWldbMF0gLyB2SGlnaFByZWNpc2lvblpXWzFdICsgMC41O1xuXHQjaWYgREVQVEhfUEFDS0lORyA9PSAzMjAwXG5cdFx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggdmVjMyggMS4wIC0gZnJhZ0Nvb3JkWiApLCBvcGFjaXR5ICk7XG5cdCNlbGlmIERFUFRIX1BBQ0tJTkcgPT0gMzIwMVxuXHRcdGdsX0ZyYWdDb2xvciA9IHBhY2tEZXB0aFRvUkdCQSggZnJhZ0Nvb3JkWiApO1xuXHQjZW5kaWZcbn0iLGRlcHRoX3ZlcnQ6IiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cbnZhcnlpbmcgdmVjMiB2SGlnaFByZWNpc2lvblpXO1xudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaWZkZWYgVVNFX0RJU1BMQUNFTUVOVE1BUFxuXHRcdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdFx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0XHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNlbmRpZlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0dkhpZ2hQcmVjaXNpb25aVyA9IGdsX1Bvc2l0aW9uLnp3O1xufSIsZGlzdGFuY2VSR0JBX2ZyYWc6IiNkZWZpbmUgRElTVEFOQ0VcbnVuaWZvcm0gdmVjMyByZWZlcmVuY2VQb3NpdGlvbjtcbnVuaWZvcm0gZmxvYXQgbmVhckRpc3RhbmNlO1xudW5pZm9ybSBmbG9hdCBmYXJEaXN0YW5jZTtcbnZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjtcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4gKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIDEuMCApO1xuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XG5cdGZsb2F0IGRpc3QgPSBsZW5ndGgoIHZXb3JsZFBvc2l0aW9uIC0gcmVmZXJlbmNlUG9zaXRpb24gKTtcblx0ZGlzdCA9ICggZGlzdCAtIG5lYXJEaXN0YW5jZSApIC8gKCBmYXJEaXN0YW5jZSAtIG5lYXJEaXN0YW5jZSApO1xuXHRkaXN0ID0gc2F0dXJhdGUoIGRpc3QgKTtcblx0Z2xfRnJhZ0NvbG9yID0gcGFja0RlcHRoVG9SR0JBKCBkaXN0ICk7XG59IixkaXN0YW5jZVJHQkFfdmVydDoiI2RlZmluZSBESVNUQU5DRVxudmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaWZkZWYgVVNFX0RJU1BMQUNFTUVOVE1BUFxuXHRcdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdFx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0XHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNlbmRpZlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0dldvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uLnh5ejtcbn0iLGVxdWlyZWN0X2ZyYWc6InVuaWZvcm0gc2FtcGxlcjJEIHRFcXVpcmVjdDtcbnZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247XG4jaW5jbHVkZSA8Y29tbW9uPlxudm9pZCBtYWluKCkge1xuXHR2ZWMzIGRpcmVjdGlvbiA9IG5vcm1hbGl6ZSggdldvcmxkRGlyZWN0aW9uICk7XG5cdHZlYzIgc2FtcGxlVVYgPSBlcXVpcmVjdFV2KCBkaXJlY3Rpb24gKTtcblx0dmVjNCB0ZXhDb2xvciA9IHRleHR1cmUyRCggdEVxdWlyZWN0LCBzYW1wbGVVViApO1xuXHRnbF9GcmFnQ29sb3IgPSBtYXBUZXhlbFRvTGluZWFyKCB0ZXhDb2xvciApO1xuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG59IixlcXVpcmVjdF92ZXJ0OiJ2YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uO1xuI2luY2x1ZGUgPGNvbW1vbj5cbnZvaWQgbWFpbigpIHtcblx0dldvcmxkRGlyZWN0aW9uID0gdHJhbnNmb3JtRGlyZWN0aW9uKCBwb3NpdGlvbiwgbW9kZWxNYXRyaXggKTtcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxufSIsbGluZWRhc2hlZF9mcmFnOiJ1bmlmb3JtIHZlYzMgZGlmZnVzZTtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbnVuaWZvcm0gZmxvYXQgZGFzaFNpemU7XG51bmlmb3JtIGZsb2F0IHRvdGFsU2l6ZTtcbnZhcnlpbmcgZmxvYXQgdkxpbmVEaXN0YW5jZTtcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHRpZiAoIG1vZCggdkxpbmVEaXN0YW5jZSwgdG90YWxTaXplICkgPiBkYXNoU2l6ZSApIHtcblx0XHRkaXNjYXJkO1xuXHR9XG5cdHZlYzMgb3V0Z29pbmdMaWdodCA9IHZlYzMoIDAuMCApO1xuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdG91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiO1xuXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCBvdXRnb2luZ0xpZ2h0LCBkaWZmdXNlQ29sb3IuYSApO1xuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxufSIsbGluZWRhc2hlZF92ZXJ0OiJ1bmlmb3JtIGZsb2F0IHNjYWxlO1xuYXR0cmlidXRlIGZsb2F0IGxpbmVEaXN0YW5jZTtcbnZhcnlpbmcgZmxvYXQgdkxpbmVEaXN0YW5jZTtcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0dkxpbmVEaXN0YW5jZSA9IHNjYWxlICogbGluZURpc3RhbmNlO1xuXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbn0iLG1lc2hiYXNpY19mcmFnOiJ1bmlmb3JtIHZlYzMgZGlmZnVzZTtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dmFyeWluZyB2ZWMzIHZOb3JtYWw7XG4jZW5kaWZcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YW9tYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxlbnZtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8c3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPHNwZWN1bGFybWFwX2ZyYWdtZW50PlxuXHRSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApO1xuXHQjaWZkZWYgVVNFX0xJR0hUTUFQXG5cdFxuXHRcdHZlYzQgbGlnaHRNYXBUZXhlbD0gdGV4dHVyZTJEKCBsaWdodE1hcCwgdlV2MiApO1xuXHRcdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBsaWdodE1hcFRleGVsVG9MaW5lYXIoIGxpZ2h0TWFwVGV4ZWwgKS5yZ2IgKiBsaWdodE1hcEludGVuc2l0eTtcblx0I2Vsc2Vcblx0XHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gdmVjMyggMS4wICk7XG5cdCNlbmRpZlxuXHQjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+XG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSAqPSBkaWZmdXNlQ29sb3IucmdiO1xuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2U7XG5cdCNpbmNsdWRlIDxlbnZtYXBfZnJhZ21lbnQ+XG5cdGdsX0ZyYWdDb2xvciA9IHZlYzQoIG91dGdvaW5nTGlnaHQsIGRpZmZ1c2VDb2xvci5hICk7XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+XG59IixtZXNoYmFzaWNfdmVydDoiI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZW52bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx1djJfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaWZkZWYgVVNFX0VOVk1BUFxuXHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD5cblx0I2VuZGlmXG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxlbnZtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbn0iLG1lc2hsYW1iZXJ0X2ZyYWc6InVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSB2ZWMzIGVtaXNzaXZlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xudmFyeWluZyB2ZWMzIHZMaWdodEZyb250O1xudmFyeWluZyB2ZWMzIHZJbmRpcmVjdEZyb250O1xuI2lmZGVmIERPVUJMRV9TSURFRFxuXHR2YXJ5aW5nIHZlYzMgdkxpZ2h0QmFjaztcblx0dmFyeWluZyB2ZWMzIHZJbmRpcmVjdEJhY2s7XG4jZW5kaWZcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW52bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJzZGZzPlxuI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHNoYWRvd21hc2tfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xuXHRSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApO1xuXHR2ZWMzIHRvdGFsRW1pc3NpdmVSYWRpYW5jZSA9IGVtaXNzaXZlO1xuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8c3BlY3VsYXJtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9mcmFnbWVudD5cblx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSAoIGdsX0Zyb250RmFjaW5nICkgPyB2SW5kaXJlY3RGcm9udCA6IHZJbmRpcmVjdEJhY2s7XG5cdCNlbHNlXG5cdFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IHZJbmRpcmVjdEZyb250O1xuXHQjZW5kaWZcblx0I2luY2x1ZGUgPGxpZ2h0bWFwX2ZyYWdtZW50PlxuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKj0gQlJERl9EaWZmdXNlX0xhbWJlcnQoIGRpZmZ1c2VDb2xvci5yZ2IgKTtcblx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgPSAoIGdsX0Zyb250RmFjaW5nICkgPyB2TGlnaHRGcm9udCA6IHZMaWdodEJhY2s7XG5cdCNlbHNlXG5cdFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSA9IHZMaWdodEZyb250O1xuXHQjZW5kaWZcblx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSAqPSBCUkRGX0RpZmZ1c2VfTGFtYmVydCggZGlmZnVzZUNvbG9yLnJnYiApICogZ2V0U2hhZG93TWFzaygpO1xuXHQjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+XG5cdHZlYzMgb3V0Z29pbmdMaWdodCA9IHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKyB0b3RhbEVtaXNzaXZlUmFkaWFuY2U7XG5cdCNpbmNsdWRlIDxlbnZtYXBfZnJhZ21lbnQ+XG5cdGdsX0ZyYWdDb2xvciA9IHZlYzQoIG91dGdvaW5nTGlnaHQsIGRpZmZ1c2VDb2xvci5hICk7XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+XG59IixtZXNobGFtYmVydF92ZXJ0OiIjZGVmaW5lIExBTUJFUlRcbnZhcnlpbmcgdmVjMyB2TGlnaHRGcm9udDtcbnZhcnlpbmcgdmVjMyB2SW5kaXJlY3RGcm9udDtcbiNpZmRlZiBET1VCTEVfU0lERURcblx0dmFyeWluZyB2ZWMzIHZMaWdodEJhY2s7XG5cdHZhcnlpbmcgdmVjMyB2SW5kaXJlY3RCYWNrO1xuI2VuZGlmXG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxlbnZtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8YnNkZnM+XG4jaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx1djJfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0I2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD5cblx0I2luY2x1ZGUgPGVudm1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxsaWdodHNfbGFtYmVydF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbn0iLG1lc2htYXRjYXBfZnJhZzoiI2RlZmluZSBNQVRDQVBcbnVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xudW5pZm9ybSBzYW1wbGVyMkQgbWF0Y2FwO1xudmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xuI2VuZGlmXG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPlxuXHR2ZWMzIHZpZXdEaXIgPSBub3JtYWxpemUoIHZWaWV3UG9zaXRpb24gKTtcblx0dmVjMyB4ID0gbm9ybWFsaXplKCB2ZWMzKCB2aWV3RGlyLnosIDAuMCwgLSB2aWV3RGlyLnggKSApO1xuXHR2ZWMzIHkgPSBjcm9zcyggdmlld0RpciwgeCApO1xuXHR2ZWMyIHV2ID0gdmVjMiggZG90KCB4LCBub3JtYWwgKSwgZG90KCB5LCBub3JtYWwgKSApICogMC40OTUgKyAwLjU7XG5cdCNpZmRlZiBVU0VfTUFUQ0FQXG5cdFx0dmVjNCBtYXRjYXBDb2xvciA9IHRleHR1cmUyRCggbWF0Y2FwLCB1diApO1xuXHRcdG1hdGNhcENvbG9yID0gbWF0Y2FwVGV4ZWxUb0xpbmVhciggbWF0Y2FwQ29sb3IgKTtcblx0I2Vsc2Vcblx0XHR2ZWM0IG1hdGNhcENvbG9yID0gdmVjNCggMS4wICk7XG5cdCNlbmRpZlxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiICogbWF0Y2FwQ29sb3IucmdiO1xuXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCBvdXRnb2luZ0xpZ2h0LCBkaWZmdXNlQ29sb3IuYSApO1xuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50PlxufSIsbWVzaG1hdGNhcF92ZXJ0OiIjZGVmaW5lIE1BVENBUFxudmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xuI2VuZGlmXG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD5cblx0I2lmbmRlZiBGTEFUX1NIQURFRFxuXHRcdHZOb3JtYWwgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkTm9ybWFsICk7XG5cdCNlbmRpZlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0I2luY2x1ZGUgPGZvZ192ZXJ0ZXg+XG5cdHZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6O1xufSIsbWVzaHRvb25fZnJhZzoiI2RlZmluZSBUT09OXG51bmlmb3JtIHZlYzMgZGlmZnVzZTtcbnVuaWZvcm0gdmVjMyBlbWlzc2l2ZTtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxncmFkaWVudG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJzZGZzPlxuI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPlxuI2luY2x1ZGUgPGxpZ2h0c190b29uX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xuXHRSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApO1xuXHR2ZWMzIHRvdGFsRW1pc3NpdmVSYWRpYW5jZSA9IGVtaXNzaXZlO1xuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X2JlZ2luPlxuXHQjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+XG5cdCNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGxpZ2h0c190b29uX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2JlZ2luPlxuXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X21hcHM+XG5cdCNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfZW5kPlxuXHQjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+XG5cdHZlYzMgb3V0Z29pbmdMaWdodCA9IHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKyB0b3RhbEVtaXNzaXZlUmFkaWFuY2U7XG5cdGdsX0ZyYWdDb2xvciA9IHZlYzQoIG91dGdvaW5nTGlnaHQsIGRpZmZ1c2VDb2xvci5hICk7XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+XG59IixtZXNodG9vbl92ZXJ0OiIjZGVmaW5lIFRPT05cbnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcbiNlbmRpZlxuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8dXYyX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+XG4jaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZOb3JtYWwgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkTm9ybWFsICk7XG4jZW5kaWZcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdHZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6O1xuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPGZvZ192ZXJ0ZXg+XG59IixtZXNocGhvbmdfZnJhZzoiI2RlZmluZSBQSE9OR1xudW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XG51bmlmb3JtIHZlYzMgZW1pc3NpdmU7XG51bmlmb3JtIHZlYzMgc3BlY3VsYXI7XG51bmlmb3JtIGZsb2F0IHNoaW5pbmVzcztcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW52bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJzZGZzPlxuI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPlxuI2luY2x1ZGUgPGxpZ2h0c19waG9uZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xuXHRSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApO1xuXHR2ZWMzIHRvdGFsRW1pc3NpdmVSYWRpYW5jZSA9IGVtaXNzaXZlO1xuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8c3BlY3VsYXJtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+XG5cdCNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz5cblx0I2luY2x1ZGUgPGVtaXNzaXZlbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bGlnaHRzX3Bob25nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2JlZ2luPlxuXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X21hcHM+XG5cdCNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfZW5kPlxuXHQjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+XG5cdHZlYzMgb3V0Z29pbmdMaWdodCA9IHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKyByZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3BlY3VsYXIgKyB0b3RhbEVtaXNzaXZlUmFkaWFuY2U7XG5cdCNpbmNsdWRlIDxlbnZtYXBfZnJhZ21lbnQ+XG5cdGdsX0ZyYWdDb2xvciA9IHZlYzQoIG91dGdvaW5nTGlnaHQsIGRpZmZ1c2VDb2xvci5hICk7XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+XG59IixtZXNocGhvbmdfdmVydDoiI2RlZmluZSBQSE9OR1xudmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xuI2VuZGlmXG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZW52bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8dXYyX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+XG4jaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZOb3JtYWwgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkTm9ybWFsICk7XG4jZW5kaWZcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdHZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6O1xuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZW52bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNoYWRvd21hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufSIsbWVzaHBoeXNpY2FsX2ZyYWc6IiNkZWZpbmUgU1RBTkRBUkRcbiNpZmRlZiBQSFlTSUNBTFxuXHQjZGVmaW5lIFJFRkxFQ1RJVklUWVxuXHQjZGVmaW5lIENMRUFSQ09BVFxuXHQjZGVmaW5lIFRSQU5TTUlTU0lPTlxuI2VuZGlmXG51bmlmb3JtIHZlYzMgZGlmZnVzZTtcbnVuaWZvcm0gdmVjMyBlbWlzc2l2ZTtcbnVuaWZvcm0gZmxvYXQgcm91Z2huZXNzO1xudW5pZm9ybSBmbG9hdCBtZXRhbG5lc3M7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jaWZkZWYgVFJBTlNNSVNTSU9OXG5cdHVuaWZvcm0gZmxvYXQgdHJhbnNtaXNzaW9uO1xuI2VuZGlmXG4jaWZkZWYgUkVGTEVDVElWSVRZXG5cdHVuaWZvcm0gZmxvYXQgcmVmbGVjdGl2aXR5O1xuI2VuZGlmXG4jaWZkZWYgQ0xFQVJDT0FUXG5cdHVuaWZvcm0gZmxvYXQgY2xlYXJjb2F0O1xuXHR1bmlmb3JtIGZsb2F0IGNsZWFyY29hdFJvdWdobmVzcztcbiNlbmRpZlxuI2lmZGVmIFVTRV9TSEVFTlxuXHR1bmlmb3JtIHZlYzMgc2hlZW47XG4jZW5kaWZcbnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcblx0I2lmZGVmIFVTRV9UQU5HRU5UXG5cdFx0dmFyeWluZyB2ZWMzIHZUYW5nZW50O1xuXHRcdHZhcnlpbmcgdmVjMyB2Qml0YW5nZW50O1xuXHQjZW5kaWZcbiNlbmRpZlxuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxwYWNraW5nPlxuI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1djJfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFvbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHRyYW5zbWlzc2lvbm1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJzZGZzPlxuI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD5cbiNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW52bWFwX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+XG4jaW5jbHVkZSA8bGlnaHRzX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsZWFyY29hdF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHJvdWdobmVzc21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1ldGFsbmVzc21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xuXHRSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApO1xuXHR2ZWMzIHRvdGFsRW1pc3NpdmVSYWRpYW5jZSA9IGVtaXNzaXZlO1xuXHQjaWZkZWYgVFJBTlNNSVNTSU9OXG5cdFx0ZmxvYXQgdG90YWxUcmFuc21pc3Npb24gPSB0cmFuc21pc3Npb247XG5cdCNlbmRpZlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8cm91Z2huZXNzbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWV0YWxuZXNzbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X2JlZ2luPlxuXHQjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+XG5cdCNpbmNsdWRlIDxjbGVhcmNvYXRfbm9ybWFsX2ZyYWdtZW50X2JlZ2luPlxuXHQjaW5jbHVkZSA8Y2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9tYXBzPlxuXHQjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDx0cmFuc21pc3Npb25tYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxsaWdodHNfcGh5c2ljYWxfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfYmVnaW4+XG5cdCNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfbWFwcz5cblx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9lbmQ+XG5cdCNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD5cblx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTtcblx0I2lmZGVmIFRSQU5TTUlTU0lPTlxuXHRcdGRpZmZ1c2VDb2xvci5hICo9IG1peCggc2F0dXJhdGUoIDEuIC0gdG90YWxUcmFuc21pc3Npb24gKyBsaW5lYXJUb1JlbGF0aXZlTHVtaW5hbmNlKCByZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3BlY3VsYXIgKSApLCAxLjAsIG1ldGFsbmVzcyApO1xuXHQjZW5kaWZcblx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggb3V0Z29pbmdMaWdodCwgZGlmZnVzZUNvbG9yLmEgKTtcblx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD5cbn0iLG1lc2hwaHlzaWNhbF92ZXJ0OiIjZGVmaW5lIFNUQU5EQVJEXG52YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dmFyeWluZyB2ZWMzIHZOb3JtYWw7XG5cdCNpZmRlZiBVU0VfVEFOR0VOVFxuXHRcdHZhcnlpbmcgdmVjMyB2VGFuZ2VudDtcblx0XHR2YXJ5aW5nIHZlYzMgdkJpdGFuZ2VudDtcblx0I2VuZGlmXG4jZW5kaWZcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8dXYyX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cblx0I2luY2x1ZGUgPHV2Ml92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2Tm9ybWFsID0gbm9ybWFsaXplKCB0cmFuc2Zvcm1lZE5vcm1hbCApO1xuXHQjaWZkZWYgVVNFX1RBTkdFTlRcblx0XHR2VGFuZ2VudCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWRUYW5nZW50ICk7XG5cdFx0dkJpdGFuZ2VudCA9IG5vcm1hbGl6ZSggY3Jvc3MoIHZOb3JtYWwsIHZUYW5nZW50ICkgKiB0YW5nZW50LncgKTtcblx0I2VuZGlmXG4jZW5kaWZcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdHZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6O1xuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPGZvZ192ZXJ0ZXg+XG59Iixub3JtYWxfZnJhZzoiI2RlZmluZSBOT1JNQUxcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNpZiBkZWZpbmVkKCBGTEFUX1NIQURFRCApIHx8IGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApXG5cdHZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2VuZGlmXG4jaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xuXHQjaWZkZWYgVVNFX1RBTkdFTlRcblx0XHR2YXJ5aW5nIHZlYzMgdlRhbmdlbnQ7XG5cdFx0dmFyeWluZyB2ZWMzIHZCaXRhbmdlbnQ7XG5cdCNlbmRpZlxuI2VuZGlmXG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+XG5cdCNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz5cblx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggcGFja05vcm1hbFRvUkdCKCBub3JtYWwgKSwgb3BhY2l0eSApO1xufSIsbm9ybWFsX3ZlcnQ6IiNkZWZpbmUgTk9STUFMXG4jaWYgZGVmaW5lZCggRkxBVF9TSEFERUQgKSB8fCBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKVxuXHR2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbiNlbmRpZlxuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcblx0I2lmZGVmIFVTRV9UQU5HRU5UXG5cdFx0dmFyeWluZyB2ZWMzIHZUYW5nZW50O1xuXHRcdHZhcnlpbmcgdmVjMyB2Qml0YW5nZW50O1xuXHQjZW5kaWZcbiNlbmRpZlxuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD5cbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dk5vcm1hbCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWROb3JtYWwgKTtcblx0I2lmZGVmIFVTRV9UQU5HRU5UXG5cdFx0dlRhbmdlbnQgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkVGFuZ2VudCApO1xuXHRcdHZCaXRhbmdlbnQgPSBub3JtYWxpemUoIGNyb3NzKCB2Tm9ybWFsLCB2VGFuZ2VudCApICogdGFuZ2VudC53ICk7XG5cdCNlbmRpZlxuI2VuZGlmXG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PlxuI2lmIGRlZmluZWQoIEZMQVRfU0hBREVEICkgfHwgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQIClcblx0dlZpZXdQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7XG4jZW5kaWZcbn0iLHBvaW50c19mcmFnOiJ1bmlmb3JtIHZlYzMgZGlmZnVzZTtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFydGljbGVfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSB2ZWMzKCAwLjAgKTtcblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG1hcF9wYXJ0aWNsZV9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHRvdXRnb2luZ0xpZ2h0ID0gZGlmZnVzZUNvbG9yLnJnYjtcblx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggb3V0Z29pbmdMaWdodCwgZGlmZnVzZUNvbG9yLmEgKTtcblx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cbn0iLHBvaW50c192ZXJ0OiJ1bmlmb3JtIGZsb2F0IHNpemU7XG51bmlmb3JtIGZsb2F0IHNjYWxlO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG5cdGdsX1BvaW50U2l6ZSA9IHNpemU7XG5cdCNpZmRlZiBVU0VfU0laRUFUVEVOVUFUSU9OXG5cdFx0Ym9vbCBpc1BlcnNwZWN0aXZlID0gaXNQZXJzcGVjdGl2ZU1hdHJpeCggcHJvamVjdGlvbk1hdHJpeCApO1xuXHRcdGlmICggaXNQZXJzcGVjdGl2ZSApIGdsX1BvaW50U2l6ZSAqPSAoIHNjYWxlIC8gLSBtdlBvc2l0aW9uLnogKTtcblx0I2VuZGlmXG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PlxuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbn0iLHNoYWRvd19mcmFnOiJ1bmlmb3JtIHZlYzMgY29sb3I7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YnNkZnM+XG4jaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+XG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8c2hhZG93bWFza19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCBjb2xvciwgb3BhY2l0eSAqICggMS4wIC0gZ2V0U2hhZG93TWFzaygpICkgKTtcblx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxufSIsc2hhZG93X3ZlcnQ6IiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNoYWRvd21hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufSIsc3ByaXRlX2ZyYWc6InVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cblx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gdmVjMyggMC4wICk7XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cblx0b3V0Z29pbmdMaWdodCA9IGRpZmZ1c2VDb2xvci5yZ2I7XG5cdGdsX0ZyYWdDb2xvciA9IHZlYzQoIG91dGdvaW5nTGlnaHQsIGRpZmZ1c2VDb2xvci5hICk7XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cbn0iLHNwcml0ZV92ZXJ0OiJ1bmlmb3JtIGZsb2F0IHJvdGF0aW9uO1xudW5pZm9ybSB2ZWMyIGNlbnRlcjtcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cblx0dmVjNCBtdlBvc2l0aW9uID0gbW9kZWxWaWV3TWF0cml4ICogdmVjNCggMC4wLCAwLjAsIDAuMCwgMS4wICk7XG5cdHZlYzIgc2NhbGU7XG5cdHNjYWxlLnggPSBsZW5ndGgoIHZlYzMoIG1vZGVsTWF0cml4WyAwIF0ueCwgbW9kZWxNYXRyaXhbIDAgXS55LCBtb2RlbE1hdHJpeFsgMCBdLnogKSApO1xuXHRzY2FsZS55ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMSBdLngsIG1vZGVsTWF0cml4WyAxIF0ueSwgbW9kZWxNYXRyaXhbIDEgXS56ICkgKTtcblx0I2lmbmRlZiBVU0VfU0laRUFUVEVOVUFUSU9OXG5cdFx0Ym9vbCBpc1BlcnNwZWN0aXZlID0gaXNQZXJzcGVjdGl2ZU1hdHJpeCggcHJvamVjdGlvbk1hdHJpeCApO1xuXHRcdGlmICggaXNQZXJzcGVjdGl2ZSApIHNjYWxlICo9IC0gbXZQb3NpdGlvbi56O1xuXHQjZW5kaWZcblx0dmVjMiBhbGlnbmVkUG9zaXRpb24gPSAoIHBvc2l0aW9uLnh5IC0gKCBjZW50ZXIgLSB2ZWMyKCAwLjUgKSApICkgKiBzY2FsZTtcblx0dmVjMiByb3RhdGVkUG9zaXRpb247XG5cdHJvdGF0ZWRQb3NpdGlvbi54ID0gY29zKCByb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnggLSBzaW4oIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueTtcblx0cm90YXRlZFBvc2l0aW9uLnkgPSBzaW4oIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueCArIGNvcyggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi55O1xuXHRtdlBvc2l0aW9uLnh5ICs9IHJvdGF0ZWRQb3NpdGlvbjtcblx0Z2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbXZQb3NpdGlvbjtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufSJ9LFREdD17Y29tbW9uOntkaWZmdXNlOnt2YWx1ZTpuZXcgcHp0KDE1NjU4NzM0KX0sb3BhY2l0eTp7dmFsdWU6MX0sbWFwOnt2YWx1ZTpudWxsfSx1dlRyYW5zZm9ybTp7dmFsdWU6bmV3IERPdH0sdXYyVHJhbnNmb3JtOnt2YWx1ZTpuZXcgRE90fSxhbHBoYU1hcDp7dmFsdWU6bnVsbH19LHNwZWN1bGFybWFwOntzcGVjdWxhck1hcDp7dmFsdWU6bnVsbH19LGVudm1hcDp7ZW52TWFwOnt2YWx1ZTpudWxsfSxmbGlwRW52TWFwOnt2YWx1ZTotMX0scmVmbGVjdGl2aXR5Ont2YWx1ZToxfSxyZWZyYWN0aW9uUmF0aW86e3ZhbHVlOi45OH0sbWF4TWlwTGV2ZWw6e3ZhbHVlOjB9fSxhb21hcDp7YW9NYXA6e3ZhbHVlOm51bGx9LGFvTWFwSW50ZW5zaXR5Ont2YWx1ZToxfX0sbGlnaHRtYXA6e2xpZ2h0TWFwOnt2YWx1ZTpudWxsfSxsaWdodE1hcEludGVuc2l0eTp7dmFsdWU6MX19LGVtaXNzaXZlbWFwOntlbWlzc2l2ZU1hcDp7dmFsdWU6bnVsbH19LGJ1bXBtYXA6e2J1bXBNYXA6e3ZhbHVlOm51bGx9LGJ1bXBTY2FsZTp7dmFsdWU6MX19LG5vcm1hbG1hcDp7bm9ybWFsTWFwOnt2YWx1ZTpudWxsfSxub3JtYWxTY2FsZTp7dmFsdWU6bmV3IHpPdCgxLDEpfX0sZGlzcGxhY2VtZW50bWFwOntkaXNwbGFjZW1lbnRNYXA6e3ZhbHVlOm51bGx9LGRpc3BsYWNlbWVudFNjYWxlOnt2YWx1ZToxfSxkaXNwbGFjZW1lbnRCaWFzOnt2YWx1ZTowfX0scm91Z2huZXNzbWFwOntyb3VnaG5lc3NNYXA6e3ZhbHVlOm51bGx9fSxtZXRhbG5lc3NtYXA6e21ldGFsbmVzc01hcDp7dmFsdWU6bnVsbH19LGdyYWRpZW50bWFwOntncmFkaWVudE1hcDp7dmFsdWU6bnVsbH19LGZvZzp7Zm9nRGVuc2l0eTp7dmFsdWU6MjVlLTV9LGZvZ05lYXI6e3ZhbHVlOjF9LGZvZ0Zhcjp7dmFsdWU6MmUzfSxmb2dDb2xvcjp7dmFsdWU6bmV3IHB6dCgxNjc3NzIxNSl9fSxsaWdodHM6e2FtYmllbnRMaWdodENvbG9yOnt2YWx1ZTpbXX0sbGlnaHRQcm9iZTp7dmFsdWU6W119LGRpcmVjdGlvbmFsTGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntkaXJlY3Rpb246e30sY29sb3I6e319fSxkaXJlY3Rpb25hbExpZ2h0U2hhZG93czp7dmFsdWU6W10scHJvcGVydGllczp7c2hhZG93Qmlhczp7fSxzaGFkb3dOb3JtYWxCaWFzOnt9LHNoYWRvd1JhZGl1czp7fSxzaGFkb3dNYXBTaXplOnt9fX0sZGlyZWN0aW9uYWxTaGFkb3dNYXA6e3ZhbHVlOltdfSxkaXJlY3Rpb25hbFNoYWRvd01hdHJpeDp7dmFsdWU6W119LHNwb3RMaWdodHM6e3ZhbHVlOltdLHByb3BlcnRpZXM6e2NvbG9yOnt9LHBvc2l0aW9uOnt9LGRpcmVjdGlvbjp7fSxkaXN0YW5jZTp7fSxjb25lQ29zOnt9LHBlbnVtYnJhQ29zOnt9LGRlY2F5Ont9fX0sc3BvdExpZ2h0U2hhZG93czp7dmFsdWU6W10scHJvcGVydGllczp7c2hhZG93Qmlhczp7fSxzaGFkb3dOb3JtYWxCaWFzOnt9LHNoYWRvd1JhZGl1czp7fSxzaGFkb3dNYXBTaXplOnt9fX0sc3BvdFNoYWRvd01hcDp7dmFsdWU6W119LHNwb3RTaGFkb3dNYXRyaXg6e3ZhbHVlOltdfSxwb2ludExpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7Y29sb3I6e30scG9zaXRpb246e30sZGVjYXk6e30sZGlzdGFuY2U6e319fSxwb2ludExpZ2h0U2hhZG93czp7dmFsdWU6W10scHJvcGVydGllczp7c2hhZG93Qmlhczp7fSxzaGFkb3dOb3JtYWxCaWFzOnt9LHNoYWRvd1JhZGl1czp7fSxzaGFkb3dNYXBTaXplOnt9LHNoYWRvd0NhbWVyYU5lYXI6e30sc2hhZG93Q2FtZXJhRmFyOnt9fX0scG9pbnRTaGFkb3dNYXA6e3ZhbHVlOltdfSxwb2ludFNoYWRvd01hdHJpeDp7dmFsdWU6W119LGhlbWlzcGhlcmVMaWdodHM6e3ZhbHVlOltdLHByb3BlcnRpZXM6e2RpcmVjdGlvbjp7fSxza3lDb2xvcjp7fSxncm91bmRDb2xvcjp7fX19LHJlY3RBcmVhTGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntjb2xvcjp7fSxwb3NpdGlvbjp7fSx3aWR0aDp7fSxoZWlnaHQ6e319fSxsdGNfMTp7dmFsdWU6bnVsbH0sbHRjXzI6e3ZhbHVlOm51bGx9fSxwb2ludHM6e2RpZmZ1c2U6e3ZhbHVlOm5ldyBwenQoMTU2NTg3MzQpfSxvcGFjaXR5Ont2YWx1ZToxfSxzaXplOnt2YWx1ZToxfSxzY2FsZTp7dmFsdWU6MX0sbWFwOnt2YWx1ZTpudWxsfSxhbHBoYU1hcDp7dmFsdWU6bnVsbH0sdXZUcmFuc2Zvcm06e3ZhbHVlOm5ldyBET3R9fSxzcHJpdGU6e2RpZmZ1c2U6e3ZhbHVlOm5ldyBwenQoMTU2NTg3MzQpfSxvcGFjaXR5Ont2YWx1ZToxfSxjZW50ZXI6e3ZhbHVlOm5ldyB6T3QoLjUsLjUpfSxyb3RhdGlvbjp7dmFsdWU6MH0sbWFwOnt2YWx1ZTpudWxsfSxhbHBoYU1hcDp7dmFsdWU6bnVsbH0sdXZUcmFuc2Zvcm06e3ZhbHVlOm5ldyBET3R9fX0sQ0R0PXtiYXNpYzp7dW5pZm9ybXM6Y0R0KFtURHQuY29tbW9uLFREdC5zcGVjdWxhcm1hcCxURHQuZW52bWFwLFREdC5hb21hcCxURHQubGlnaHRtYXAsVER0LmZvZ10pLHZlcnRleFNoYWRlcjpFRHQubWVzaGJhc2ljX3ZlcnQsZnJhZ21lbnRTaGFkZXI6RUR0Lm1lc2hiYXNpY19mcmFnfSxsYW1iZXJ0Ont1bmlmb3JtczpjRHQoW1REdC5jb21tb24sVER0LnNwZWN1bGFybWFwLFREdC5lbnZtYXAsVER0LmFvbWFwLFREdC5saWdodG1hcCxURHQuZW1pc3NpdmVtYXAsVER0LmZvZyxURHQubGlnaHRzLHtlbWlzc2l2ZTp7dmFsdWU6bmV3IHB6dCgwKX19XSksdmVydGV4U2hhZGVyOkVEdC5tZXNobGFtYmVydF92ZXJ0LGZyYWdtZW50U2hhZGVyOkVEdC5tZXNobGFtYmVydF9mcmFnfSxwaG9uZzp7dW5pZm9ybXM6Y0R0KFtURHQuY29tbW9uLFREdC5zcGVjdWxhcm1hcCxURHQuZW52bWFwLFREdC5hb21hcCxURHQubGlnaHRtYXAsVER0LmVtaXNzaXZlbWFwLFREdC5idW1wbWFwLFREdC5ub3JtYWxtYXAsVER0LmRpc3BsYWNlbWVudG1hcCxURHQuZm9nLFREdC5saWdodHMse2VtaXNzaXZlOnt2YWx1ZTpuZXcgcHp0KDApfSxzcGVjdWxhcjp7dmFsdWU6bmV3IHB6dCgxMTE4NDgxKX0sc2hpbmluZXNzOnt2YWx1ZTozMH19XSksdmVydGV4U2hhZGVyOkVEdC5tZXNocGhvbmdfdmVydCxmcmFnbWVudFNoYWRlcjpFRHQubWVzaHBob25nX2ZyYWd9LHN0YW5kYXJkOnt1bmlmb3JtczpjRHQoW1REdC5jb21tb24sVER0LmVudm1hcCxURHQuYW9tYXAsVER0LmxpZ2h0bWFwLFREdC5lbWlzc2l2ZW1hcCxURHQuYnVtcG1hcCxURHQubm9ybWFsbWFwLFREdC5kaXNwbGFjZW1lbnRtYXAsVER0LnJvdWdobmVzc21hcCxURHQubWV0YWxuZXNzbWFwLFREdC5mb2csVER0LmxpZ2h0cyx7ZW1pc3NpdmU6e3ZhbHVlOm5ldyBwenQoMCl9LHJvdWdobmVzczp7dmFsdWU6MX0sbWV0YWxuZXNzOnt2YWx1ZTowfSxlbnZNYXBJbnRlbnNpdHk6e3ZhbHVlOjF9fV0pLHZlcnRleFNoYWRlcjpFRHQubWVzaHBoeXNpY2FsX3ZlcnQsZnJhZ21lbnRTaGFkZXI6RUR0Lm1lc2hwaHlzaWNhbF9mcmFnfSx0b29uOnt1bmlmb3JtczpjRHQoW1REdC5jb21tb24sVER0LmFvbWFwLFREdC5saWdodG1hcCxURHQuZW1pc3NpdmVtYXAsVER0LmJ1bXBtYXAsVER0Lm5vcm1hbG1hcCxURHQuZGlzcGxhY2VtZW50bWFwLFREdC5ncmFkaWVudG1hcCxURHQuZm9nLFREdC5saWdodHMse2VtaXNzaXZlOnt2YWx1ZTpuZXcgcHp0KDApfX1dKSx2ZXJ0ZXhTaGFkZXI6RUR0Lm1lc2h0b29uX3ZlcnQsZnJhZ21lbnRTaGFkZXI6RUR0Lm1lc2h0b29uX2ZyYWd9LG1hdGNhcDp7dW5pZm9ybXM6Y0R0KFtURHQuY29tbW9uLFREdC5idW1wbWFwLFREdC5ub3JtYWxtYXAsVER0LmRpc3BsYWNlbWVudG1hcCxURHQuZm9nLHttYXRjYXA6e3ZhbHVlOm51bGx9fV0pLHZlcnRleFNoYWRlcjpFRHQubWVzaG1hdGNhcF92ZXJ0LGZyYWdtZW50U2hhZGVyOkVEdC5tZXNobWF0Y2FwX2ZyYWd9LHBvaW50czp7dW5pZm9ybXM6Y0R0KFtURHQucG9pbnRzLFREdC5mb2ddKSx2ZXJ0ZXhTaGFkZXI6RUR0LnBvaW50c192ZXJ0LGZyYWdtZW50U2hhZGVyOkVEdC5wb2ludHNfZnJhZ30sZGFzaGVkOnt1bmlmb3JtczpjRHQoW1REdC5jb21tb24sVER0LmZvZyx7c2NhbGU6e3ZhbHVlOjF9LGRhc2hTaXplOnt2YWx1ZToxfSx0b3RhbFNpemU6e3ZhbHVlOjJ9fV0pLHZlcnRleFNoYWRlcjpFRHQubGluZWRhc2hlZF92ZXJ0LGZyYWdtZW50U2hhZGVyOkVEdC5saW5lZGFzaGVkX2ZyYWd9LGRlcHRoOnt1bmlmb3JtczpjRHQoW1REdC5jb21tb24sVER0LmRpc3BsYWNlbWVudG1hcF0pLHZlcnRleFNoYWRlcjpFRHQuZGVwdGhfdmVydCxmcmFnbWVudFNoYWRlcjpFRHQuZGVwdGhfZnJhZ30sbm9ybWFsOnt1bmlmb3JtczpjRHQoW1REdC5jb21tb24sVER0LmJ1bXBtYXAsVER0Lm5vcm1hbG1hcCxURHQuZGlzcGxhY2VtZW50bWFwLHtvcGFjaXR5Ont2YWx1ZToxfX1dKSx2ZXJ0ZXhTaGFkZXI6RUR0Lm5vcm1hbF92ZXJ0LGZyYWdtZW50U2hhZGVyOkVEdC5ub3JtYWxfZnJhZ30sc3ByaXRlOnt1bmlmb3JtczpjRHQoW1REdC5zcHJpdGUsVER0LmZvZ10pLHZlcnRleFNoYWRlcjpFRHQuc3ByaXRlX3ZlcnQsZnJhZ21lbnRTaGFkZXI6RUR0LnNwcml0ZV9mcmFnfSxiYWNrZ3JvdW5kOnt1bmlmb3Jtczp7dXZUcmFuc2Zvcm06e3ZhbHVlOm5ldyBET3R9LHQyRDp7dmFsdWU6bnVsbH19LHZlcnRleFNoYWRlcjpFRHQuYmFja2dyb3VuZF92ZXJ0LGZyYWdtZW50U2hhZGVyOkVEdC5iYWNrZ3JvdW5kX2ZyYWd9LGN1YmU6e3VuaWZvcm1zOmNEdChbVER0LmVudm1hcCx7b3BhY2l0eTp7dmFsdWU6MX19XSksdmVydGV4U2hhZGVyOkVEdC5jdWJlX3ZlcnQsZnJhZ21lbnRTaGFkZXI6RUR0LmN1YmVfZnJhZ30sZXF1aXJlY3Q6e3VuaWZvcm1zOnt0RXF1aXJlY3Q6e3ZhbHVlOm51bGx9fSx2ZXJ0ZXhTaGFkZXI6RUR0LmVxdWlyZWN0X3ZlcnQsZnJhZ21lbnRTaGFkZXI6RUR0LmVxdWlyZWN0X2ZyYWd9LGRpc3RhbmNlUkdCQTp7dW5pZm9ybXM6Y0R0KFtURHQuY29tbW9uLFREdC5kaXNwbGFjZW1lbnRtYXAse3JlZmVyZW5jZVBvc2l0aW9uOnt2YWx1ZTpuZXcgcU90fSxuZWFyRGlzdGFuY2U6e3ZhbHVlOjF9LGZhckRpc3RhbmNlOnt2YWx1ZToxZTN9fV0pLHZlcnRleFNoYWRlcjpFRHQuZGlzdGFuY2VSR0JBX3ZlcnQsZnJhZ21lbnRTaGFkZXI6RUR0LmRpc3RhbmNlUkdCQV9mcmFnfSxzaGFkb3c6e3VuaWZvcm1zOmNEdChbVER0LmxpZ2h0cyxURHQuZm9nLHtjb2xvcjp7dmFsdWU6bmV3IHB6dCgwKX0sb3BhY2l0eTp7dmFsdWU6MX19XSksdmVydGV4U2hhZGVyOkVEdC5zaGFkb3dfdmVydCxmcmFnbWVudFNoYWRlcjpFRHQuc2hhZG93X2ZyYWd9fTtmdW5jdGlvbiBBRHQodCxlLG4saSxyKXtjb25zdCBvPW5ldyBwenQoMCk7bGV0IGEscyxsPTAsYz1udWxsLHU9MCxoPW51bGw7ZnVuY3Rpb24gZCh0LGUpe24uYnVmZmVycy5jb2xvci5zZXRDbGVhcih0LnIsdC5nLHQuYixlLHIpfXJldHVybntnZXRDbGVhckNvbG9yOmZ1bmN0aW9uKCl7cmV0dXJuIG99LHNldENsZWFyQ29sb3I6ZnVuY3Rpb24odCxlPTEpe28uc2V0KHQpLGw9ZSxkKG8sbCl9LGdldENsZWFyQWxwaGE6ZnVuY3Rpb24oKXtyZXR1cm4gbH0sc2V0Q2xlYXJBbHBoYTpmdW5jdGlvbih0KXtsPXQsZChvLGwpfSxyZW5kZXI6ZnVuY3Rpb24gcChuLHIsZixtKXtsZXQgZz0hMD09PXIuaXNTY2VuZT9yLmJhY2tncm91bmQ6bnVsbDtnJiZnLmlzVGV4dHVyZSYmKGc9ZS5nZXQoZykpO2NvbnN0IF89dC54cix5PV8uZ2V0U2Vzc2lvbiYmXy5nZXRTZXNzaW9uKCk7eSYmImFkZGl0aXZlIj09PXkuZW52aXJvbm1lbnRCbGVuZE1vZGUmJihnPW51bGwpLG51bGw9PT1nP2QobyxsKTpnJiZnLmlzQ29sb3ImJihkKGcsMSksbT0hMCksKHQuYXV0b0NsZWFyfHxtKSYmdC5jbGVhcih0LmF1dG9DbGVhckNvbG9yLHQuYXV0b0NsZWFyRGVwdGgsdC5hdXRvQ2xlYXJTdGVuY2lsKSxnJiYoZy5pc0N1YmVUZXh0dXJlfHxnLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0fHxnLm1hcHBpbmc9PT16SXQpPyh2b2lkIDA9PT1zJiYocz1uZXcgb0R0KG5ldyBzRHQoMSwxLDEpLG5ldyBoRHQoe25hbWU6IkJhY2tncm91bmRDdWJlTWF0ZXJpYWwiLHVuaWZvcm1zOmxEdChDRHQuY3ViZS51bmlmb3JtcyksdmVydGV4U2hhZGVyOkNEdC5jdWJlLnZlcnRleFNoYWRlcixmcmFnbWVudFNoYWRlcjpDRHQuY3ViZS5mcmFnbWVudFNoYWRlcixzaWRlOjEsZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITEsZm9nOiExfSkpLHMuZ2VvbWV0cnkuZGVsZXRlQXR0cmlidXRlKCJub3JtYWwiKSxzLmdlb21ldHJ5LmRlbGV0ZUF0dHJpYnV0ZSgidXYiKSxzLm9uQmVmb3JlUmVuZGVyPWZ1bmN0aW9uKHQsZSxuKXt0aGlzLm1hdHJpeFdvcmxkLmNvcHlQb3NpdGlvbihuLm1hdHJpeFdvcmxkKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHMubWF0ZXJpYWwsImVudk1hcCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnVuaWZvcm1zLmVudk1hcC52YWx1ZX19KSxpLnVwZGF0ZShzKSksZy5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldCYmKGc9Zy50ZXh0dXJlKSxzLm1hdGVyaWFsLnVuaWZvcm1zLmVudk1hcC52YWx1ZT1nLHMubWF0ZXJpYWwudW5pZm9ybXMuZmxpcEVudk1hcC52YWx1ZT1nLmlzQ3ViZVRleHR1cmUmJmcuX25lZWRzRmxpcEVudk1hcD8tMToxLGM9PT1nJiZ1PT09Zy52ZXJzaW9uJiZoPT09dC50b25lTWFwcGluZ3x8KHMubWF0ZXJpYWwubmVlZHNVcGRhdGU9ITAsYz1nLHU9Zy52ZXJzaW9uLGg9dC50b25lTWFwcGluZyksbi51bnNoaWZ0KHMscy5nZW9tZXRyeSxzLm1hdGVyaWFsLDAsMCxudWxsKSk6ZyYmZy5pc1RleHR1cmUmJih2b2lkIDA9PT1hJiYoYT1uZXcgb0R0KG5ldyBNRHQoMiwyKSxuZXcgaER0KHtuYW1lOiJCYWNrZ3JvdW5kTWF0ZXJpYWwiLHVuaWZvcm1zOmxEdChDRHQuYmFja2dyb3VuZC51bmlmb3JtcyksdmVydGV4U2hhZGVyOkNEdC5iYWNrZ3JvdW5kLnZlcnRleFNoYWRlcixmcmFnbWVudFNoYWRlcjpDRHQuYmFja2dyb3VuZC5mcmFnbWVudFNoYWRlcixzaWRlOjAsZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITEsZm9nOiExfSkpLGEuZ2VvbWV0cnkuZGVsZXRlQXR0cmlidXRlKCJub3JtYWwiKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYS5tYXRlcmlhbCwibWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudW5pZm9ybXMudDJELnZhbHVlfX0pLGkudXBkYXRlKGEpKSxhLm1hdGVyaWFsLnVuaWZvcm1zLnQyRC52YWx1ZT1nLCEwPT09Zy5tYXRyaXhBdXRvVXBkYXRlJiZnLnVwZGF0ZU1hdHJpeCgpLGEubWF0ZXJpYWwudW5pZm9ybXMudXZUcmFuc2Zvcm0udmFsdWUuY29weShnLm1hdHJpeCksYz09PWcmJnU9PT1nLnZlcnNpb24mJmg9PT10LnRvbmVNYXBwaW5nfHwoYS5tYXRlcmlhbC5uZWVkc1VwZGF0ZT0hMCxjPWcsdT1nLnZlcnNpb24saD10LnRvbmVNYXBwaW5nKSxuLnVuc2hpZnQoYSxhLmdlb21ldHJ5LGEubWF0ZXJpYWwsMCwwLG51bGwpKX19fWZ1bmN0aW9uIGtEdCh0LGUsbixpKXtjb25zdCByPXQuZ2V0UGFyYW1ldGVyKDM0OTIxKSxvPWkuaXNXZWJHTDI/bnVsbDplLmdldCgiT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKSxhPWkuaXNXZWJHTDJ8fG51bGwhPT1vLHM9e30sbD1kKG51bGwpO2xldCBjPWw7ZnVuY3Rpb24gdShlKXtyZXR1cm4gaS5pc1dlYkdMMj90LmJpbmRWZXJ0ZXhBcnJheShlKTpvLmJpbmRWZXJ0ZXhBcnJheU9FUyhlKX1mdW5jdGlvbiBoKGUpe3JldHVybiBpLmlzV2ViR0wyP3QuZGVsZXRlVmVydGV4QXJyYXkoZSk6by5kZWxldGVWZXJ0ZXhBcnJheU9FUyhlKX1mdW5jdGlvbiBkKHQpe2NvbnN0IGU9W10sbj1bXSxpPVtdO2ZvcihsZXQgdD0wO3Q8cjt0KyspZVt0XT0wLG5bdF09MCxpW3RdPTA7cmV0dXJue2dlb21ldHJ5Om51bGwscHJvZ3JhbTpudWxsLHdpcmVmcmFtZTohMSxuZXdBdHRyaWJ1dGVzOmUsZW5hYmxlZEF0dHJpYnV0ZXM6bixhdHRyaWJ1dGVEaXZpc29yczppLG9iamVjdDp0LGF0dHJpYnV0ZXM6e30saW5kZXg6bnVsbH19ZnVuY3Rpb24gcCgpe2NvbnN0IHQ9Yy5uZXdBdHRyaWJ1dGVzO2ZvcihsZXQgZT0wLG49dC5sZW5ndGg7ZTxuO2UrKyl0W2VdPTB9ZnVuY3Rpb24gZih0KXttKHQsMCl9ZnVuY3Rpb24gbShuLHIpe2NvbnN0IG89Yy5lbmFibGVkQXR0cmlidXRlcyxhPWMuYXR0cmlidXRlRGl2aXNvcnM7Yy5uZXdBdHRyaWJ1dGVzW25dPTEsMD09PW9bbl0mJih0LmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KG4pLG9bbl09MSksYVtuXSE9PXImJigoaS5pc1dlYkdMMj90OmUuZ2V0KCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIikpW2kuaXNXZWJHTDI/InZlcnRleEF0dHJpYkRpdmlzb3IiOiJ2ZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUiXShuLHIpLGFbbl09cil9ZnVuY3Rpb24gZygpe2NvbnN0IGU9Yy5uZXdBdHRyaWJ1dGVzLG49Yy5lbmFibGVkQXR0cmlidXRlcztmb3IobGV0IGk9MCxyPW4ubGVuZ3RoO2k8cjtpKyspbltpXSE9PWVbaV0mJih0LmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpKSxuW2ldPTApfWZ1bmN0aW9uIF8oZSxuLHIsbyxhLHMpeyEwIT09aS5pc1dlYkdMMnx8NTEyNCE9PXImJjUxMjUhPT1yP3QudmVydGV4QXR0cmliUG9pbnRlcihlLG4scixvLGEscyk6dC52ZXJ0ZXhBdHRyaWJJUG9pbnRlcihlLG4scixhLHMpfWZ1bmN0aW9uIHkoKXt2KCksYyE9PWwmJihjPWwsdShjLm9iamVjdCkpfWZ1bmN0aW9uIHYoKXtsLmdlb21ldHJ5PW51bGwsbC5wcm9ncmFtPW51bGwsbC53aXJlZnJhbWU9ITF9cmV0dXJue3NldHVwOmZ1bmN0aW9uIGIocixsLGgseSx2KXtsZXQgYj0hMTtpZihhKXtjb25zdCBlPShmdW5jdGlvbiB4KGUsbixyKXtjb25zdCBhPSEwPT09ci53aXJlZnJhbWU7bGV0IGw9c1tlLmlkXTt2b2lkIDA9PT1sJiYobD17fSxzW2UuaWRdPWwpO2xldCBjPWxbbi5pZF07dm9pZCAwPT09YyYmKGM9e30sbFtuLmlkXT1jKTtsZXQgdT1jW2FdO3JldHVybiB2b2lkIDA9PT11JiYodT1kKChmdW5jdGlvbiBoKCl7cmV0dXJuIGkuaXNXZWJHTDI/dC5jcmVhdGVWZXJ0ZXhBcnJheSgpOm8uY3JlYXRlVmVydGV4QXJyYXlPRVMoKX0pKCkpLGNbYV09dSksdX0pKHksaCxsKTtjIT09ZSYmKGM9ZSx1KGMub2JqZWN0KSksYj0oZnVuY3Rpb24gdyh0LGUpe2NvbnN0IG49Yy5hdHRyaWJ1dGVzLGk9dC5hdHRyaWJ1dGVzO2xldCByPTA7Zm9yKGNvbnN0IHQgaW4gaSl7Y29uc3QgZT1uW3RdLG89aVt0XTtpZih2b2lkIDA9PT1lKXJldHVybiEwO2lmKGUuYXR0cmlidXRlIT09bylyZXR1cm4hMDtpZihlLmRhdGEhPT1vLmRhdGEpcmV0dXJuITA7cisrfXJldHVybiBjLmF0dHJpYnV0ZXNOdW0hPT1yfHxjLmluZGV4IT09ZX0pKHksdiksYiYmKGZ1bmN0aW9uIFModCxlKXtjb25zdCBuPXt9LGk9dC5hdHRyaWJ1dGVzO2xldCByPTA7Zm9yKGNvbnN0IHQgaW4gaSl7Y29uc3QgZT1pW3RdLG89e307by5hdHRyaWJ1dGU9ZSxlLmRhdGEmJihvLmRhdGE9ZS5kYXRhKSxuW3RdPW8scisrfWMuYXR0cmlidXRlcz1uLGMuYXR0cmlidXRlc051bT1yLGMuaW5kZXg9ZX0pKHksdil9ZWxzZXtjb25zdCB0PSEwPT09bC53aXJlZnJhbWU7Yy5nZW9tZXRyeT09PXkuaWQmJmMucHJvZ3JhbT09PWguaWQmJmMud2lyZWZyYW1lPT09dHx8KGMuZ2VvbWV0cnk9eS5pZCxjLnByb2dyYW09aC5pZCxjLndpcmVmcmFtZT10LGI9ITApfSEwPT09ci5pc0luc3RhbmNlZE1lc2gmJihiPSEwKSxudWxsIT09diYmbi51cGRhdGUodiwzNDk2MyksYiYmKChmdW5jdGlvbiBNKHIsbyxhLHMpe2lmKCExPT09aS5pc1dlYkdMMiYmKHIuaXNJbnN0YW5jZWRNZXNofHxzLmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkpJiZudWxsPT09ZS5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSlyZXR1cm47cCgpO2NvbnN0IGw9cy5hdHRyaWJ1dGVzLGM9YS5nZXRBdHRyaWJ1dGVzKCksdT1vLmRlZmF1bHRBdHRyaWJ1dGVWYWx1ZXM7Zm9yKGNvbnN0IGUgaW4gYyl7Y29uc3QgaT1jW2VdO2lmKGk+PTApe2NvbnN0IG89bFtlXTtpZih2b2lkIDAhPT1vKXtjb25zdCBlPW8ubm9ybWFsaXplZCxyPW8uaXRlbVNpemUsYT1uLmdldChvKTtpZih2b2lkIDA9PT1hKWNvbnRpbnVlO2NvbnN0IGw9YS5idWZmZXIsYz1hLnR5cGUsdT1hLmJ5dGVzUGVyRWxlbWVudDtpZihvLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUpe2NvbnN0IG49by5kYXRhLGE9bi5zdHJpZGUsaD1vLm9mZnNldDtuJiZuLmlzSW5zdGFuY2VkSW50ZXJsZWF2ZWRCdWZmZXI/KG0oaSxuLm1lc2hQZXJBdHRyaWJ1dGUpLHZvaWQgMD09PXMuX21heEluc3RhbmNlQ291bnQmJihzLl9tYXhJbnN0YW5jZUNvdW50PW4ubWVzaFBlckF0dHJpYnV0ZSpuLmNvdW50KSk6ZihpKSx0LmJpbmRCdWZmZXIoMzQ5NjIsbCksXyhpLHIsYyxlLGEqdSxoKnUpfWVsc2Ugby5pc0luc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZT8obShpLG8ubWVzaFBlckF0dHJpYnV0ZSksdm9pZCAwPT09cy5fbWF4SW5zdGFuY2VDb3VudCYmKHMuX21heEluc3RhbmNlQ291bnQ9by5tZXNoUGVyQXR0cmlidXRlKm8uY291bnQpKTpmKGkpLHQuYmluZEJ1ZmZlcigzNDk2MixsKSxfKGkscixjLGUsMCwwKX1lbHNlIGlmKCJpbnN0YW5jZU1hdHJpeCI9PT1lKXtjb25zdCBlPW4uZ2V0KHIuaW5zdGFuY2VNYXRyaXgpO2lmKHZvaWQgMD09PWUpY29udGludWU7Y29uc3Qgbz1lLmJ1ZmZlcixhPWUudHlwZTttKGkrMCwxKSxtKGkrMSwxKSxtKGkrMiwxKSxtKGkrMywxKSx0LmJpbmRCdWZmZXIoMzQ5NjIsbyksdC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGkrMCw0LGEsITEsNjQsMCksdC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGkrMSw0LGEsITEsNjQsMTYpLHQudmVydGV4QXR0cmliUG9pbnRlcihpKzIsNCxhLCExLDY0LDMyKSx0LnZlcnRleEF0dHJpYlBvaW50ZXIoaSszLDQsYSwhMSw2NCw0OCl9ZWxzZSBpZigiaW5zdGFuY2VDb2xvciI9PT1lKXtjb25zdCBlPW4uZ2V0KHIuaW5zdGFuY2VDb2xvcik7aWYodm9pZCAwPT09ZSljb250aW51ZTtjb25zdCBvPWUuYnVmZmVyLGE9ZS50eXBlO20oaSwxKSx0LmJpbmRCdWZmZXIoMzQ5NjIsbyksdC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGksMyxhLCExLDEyLDApfWVsc2UgaWYodm9pZCAwIT09dSl7Y29uc3Qgbj11W2VdO2lmKHZvaWQgMCE9PW4pc3dpdGNoKG4ubGVuZ3RoKXtjYXNlIDI6dC52ZXJ0ZXhBdHRyaWIyZnYoaSxuKTticmVhaztjYXNlIDM6dC52ZXJ0ZXhBdHRyaWIzZnYoaSxuKTticmVhaztjYXNlIDQ6dC52ZXJ0ZXhBdHRyaWI0ZnYoaSxuKTticmVhaztkZWZhdWx0OnQudmVydGV4QXR0cmliMWZ2KGksbil9fX19ZygpfSkocixsLGgseSksbnVsbCE9PXYmJnQuYmluZEJ1ZmZlcigzNDk2MyxuLmdldCh2KS5idWZmZXIpKX0scmVzZXQ6eSxyZXNldERlZmF1bHRTdGF0ZTp2LGRpc3Bvc2U6ZnVuY3Rpb24geCgpe3koKTtmb3IoY29uc3QgdCBpbiBzKXtjb25zdCBlPXNbdF07Zm9yKGNvbnN0IHQgaW4gZSl7Y29uc3Qgbj1lW3RdO2Zvcihjb25zdCB0IGluIG4paChuW3RdLm9iamVjdCksZGVsZXRlIG5bdF07ZGVsZXRlIGVbdF19ZGVsZXRlIHNbdF19fSxyZWxlYXNlU3RhdGVzT2ZHZW9tZXRyeTpmdW5jdGlvbiB3KHQpe2lmKHZvaWQgMD09PXNbdC5pZF0pcmV0dXJuO2NvbnN0IGU9c1t0LmlkXTtmb3IoY29uc3QgdCBpbiBlKXtjb25zdCBuPWVbdF07Zm9yKGNvbnN0IHQgaW4gbiloKG5bdF0ub2JqZWN0KSxkZWxldGUgblt0XTtkZWxldGUgZVt0XX1kZWxldGUgc1t0LmlkXX0scmVsZWFzZVN0YXRlc09mUHJvZ3JhbTpmdW5jdGlvbiBTKHQpe2Zvcihjb25zdCBlIGluIHMpe2NvbnN0IG49c1tlXTtpZih2b2lkIDA9PT1uW3QuaWRdKWNvbnRpbnVlO2NvbnN0IGk9blt0LmlkXTtmb3IoY29uc3QgdCBpbiBpKWgoaVt0XS5vYmplY3QpLGRlbGV0ZSBpW3RdO2RlbGV0ZSBuW3QuaWRdfX0saW5pdEF0dHJpYnV0ZXM6cCxlbmFibGVBdHRyaWJ1dGU6ZixkaXNhYmxlVW51c2VkQXR0cmlidXRlczpnfX1mdW5jdGlvbiBMRHQodCxlLG4saSl7Y29uc3Qgcj1pLmlzV2ViR0wyO2xldCBvO3RoaXMuc2V0TW9kZT1mdW5jdGlvbiBhKHQpe289dH0sdGhpcy5yZW5kZXI9ZnVuY3Rpb24gcyhlLGkpe3QuZHJhd0FycmF5cyhvLGUsaSksbi51cGRhdGUoaSxvLDEpfSx0aGlzLnJlbmRlckluc3RhbmNlcz1mdW5jdGlvbiBsKGksYSxzKXtpZigwPT09cylyZXR1cm47bGV0IGwsYztpZihyKWw9dCxjPSJkcmF3QXJyYXlzSW5zdGFuY2VkIjtlbHNlIGlmKGw9ZS5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSxjPSJkcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUiLG51bGw9PT1sKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMQnVmZmVyUmVuZGVyZXI6IHVzaW5nIFRIUkVFLkluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5IGJ1dCBoYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0IGV4dGVuc2lvbiBBTkdMRV9pbnN0YW5jZWRfYXJyYXlzLiIpO2xbY10obyxpLGEscyksbi51cGRhdGUoYSxvLHMpfX1mdW5jdGlvbiBQRHQodCxlLG4pe2xldCBpO2Z1bmN0aW9uIHIoZSl7aWYoImhpZ2hwIj09PWUpe2lmKHQuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KDM1NjMzLDM2MzM4KS5wcmVjaXNpb24+MCYmdC5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoMzU2MzIsMzYzMzgpLnByZWNpc2lvbj4wKXJldHVybiJoaWdocCI7ZT0ibWVkaXVtcCJ9cmV0dXJuIm1lZGl1bXAiPT09ZSYmdC5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoMzU2MzMsMzYzMzcpLnByZWNpc2lvbj4wJiZ0LmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgzNTYzMiwzNjMzNykucHJlY2lzaW9uPjA/Im1lZGl1bXAiOiJsb3dwIn1jb25zdCBvPSJ1bmRlZmluZWQiIT10eXBlb2YgV2ViR0wyUmVuZGVyaW5nQ29udGV4dCYmdCBpbnN0YW5jZW9mIFdlYkdMMlJlbmRlcmluZ0NvbnRleHR8fCJ1bmRlZmluZWQiIT10eXBlb2YgV2ViR0wyQ29tcHV0ZVJlbmRlcmluZ0NvbnRleHQmJnQgaW5zdGFuY2VvZiBXZWJHTDJDb21wdXRlUmVuZGVyaW5nQ29udGV4dDtsZXQgYT12b2lkIDAhPT1uLnByZWNpc2lvbj9uLnByZWNpc2lvbjoiaGlnaHAiO2NvbnN0IHM9cihhKTtzIT09YSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjoiLGEsIm5vdCBzdXBwb3J0ZWQsIHVzaW5nIixzLCJpbnN0ZWFkLiIpLGE9cyk7Y29uc3QgbD0hMD09PW4ubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcixjPXQuZ2V0UGFyYW1ldGVyKDM0OTMwKSx1PXQuZ2V0UGFyYW1ldGVyKDM1NjYwKSxoPXQuZ2V0UGFyYW1ldGVyKDMzNzkpLGQ9dC5nZXRQYXJhbWV0ZXIoMzQwNzYpLHA9dC5nZXRQYXJhbWV0ZXIoMzQ5MjEpLGY9dC5nZXRQYXJhbWV0ZXIoMzYzNDcpLG09dC5nZXRQYXJhbWV0ZXIoMzYzNDgpLGc9dC5nZXRQYXJhbWV0ZXIoMzYzNDkpLF89dT4wLHk9b3x8ISFlLmdldCgiT0VTX3RleHR1cmVfZmxvYXQiKTtyZXR1cm57aXNXZWJHTDI6byxnZXRNYXhBbmlzb3Ryb3B5OmZ1bmN0aW9uIHYoKXtpZih2b2lkIDAhPT1pKXJldHVybiBpO2NvbnN0IG49ZS5nZXQoIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpO3JldHVybiBpPW51bGwhPT1uP3QuZ2V0UGFyYW1ldGVyKG4uTUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUKTowLGl9LGdldE1heFByZWNpc2lvbjpyLHByZWNpc2lvbjphLGxvZ2FyaXRobWljRGVwdGhCdWZmZXI6bCxtYXhUZXh0dXJlczpjLG1heFZlcnRleFRleHR1cmVzOnUsbWF4VGV4dHVyZVNpemU6aCxtYXhDdWJlbWFwU2l6ZTpkLG1heEF0dHJpYnV0ZXM6cCxtYXhWZXJ0ZXhVbmlmb3JtczpmLG1heFZhcnlpbmdzOm0sbWF4RnJhZ21lbnRVbmlmb3JtczpnLHZlcnRleFRleHR1cmVzOl8sZmxvYXRGcmFnbWVudFRleHR1cmVzOnksZmxvYXRWZXJ0ZXhUZXh0dXJlczpfJiZ5LG1heFNhbXBsZXM6bz90LmdldFBhcmFtZXRlcigzNjE4Myk6MH19ZnVuY3Rpb24gTkR0KHQpe2NvbnN0IGU9dGhpcztsZXQgbj1udWxsLGk9MCxyPSExLG89ITE7Y29uc3QgYT1uZXcgJFJ0LHM9bmV3IERPdCxsPXt2YWx1ZTpudWxsLG5lZWRzVXBkYXRlOiExfTtmdW5jdGlvbiBjKCl7bC52YWx1ZSE9PW4mJihsLnZhbHVlPW4sbC5uZWVkc1VwZGF0ZT1pPjApLGUubnVtUGxhbmVzPWksZS5udW1JbnRlcnNlY3Rpb249MH1mdW5jdGlvbiB1KHQsbixpLHIpe2NvbnN0IG89bnVsbCE9PXQ/dC5sZW5ndGg6MDtsZXQgYz1udWxsO2lmKDAhPT1vKXtpZihjPWwudmFsdWUsITAhPT1yfHxudWxsPT09Yyl7Y29uc3QgZT1pKzQqbyxyPW4ubWF0cml4V29ybGRJbnZlcnNlO3MuZ2V0Tm9ybWFsTWF0cml4KHIpLChudWxsPT09Y3x8Yy5sZW5ndGg8ZSkmJihjPW5ldyBGbG9hdDMyQXJyYXkoZSkpO2ZvcihsZXQgZT0wLG49aTtlIT09bzsrK2Usbis9NClhLmNvcHkodFtlXSkuYXBwbHlNYXRyaXg0KHIscyksYS5ub3JtYWwudG9BcnJheShjLG4pLGNbbiszXT1hLmNvbnN0YW50fWwudmFsdWU9YyxsLm5lZWRzVXBkYXRlPSEwfXJldHVybiBlLm51bVBsYW5lcz1vLGUubnVtSW50ZXJzZWN0aW9uPTAsY310aGlzLnVuaWZvcm09bCx0aGlzLm51bVBsYW5lcz0wLHRoaXMubnVtSW50ZXJzZWN0aW9uPTAsdGhpcy5pbml0PWZ1bmN0aW9uKHQsZSxvKXtjb25zdCBhPTAhPT10Lmxlbmd0aHx8ZXx8MCE9PWl8fHI7cmV0dXJuIHI9ZSxuPXUodCxvLDApLGk9dC5sZW5ndGgsYX0sdGhpcy5iZWdpblNoYWRvd3M9ZnVuY3Rpb24oKXtvPSEwLHUobnVsbCl9LHRoaXMuZW5kU2hhZG93cz1mdW5jdGlvbigpe289ITEsYygpfSx0aGlzLnNldFN0YXRlPWZ1bmN0aW9uKGUsYSxzKXtjb25zdCBoPWUuY2xpcHBpbmdQbGFuZXMsZD1lLmNsaXBJbnRlcnNlY3Rpb24scD1lLmNsaXBTaGFkb3dzLGY9dC5nZXQoZSk7aWYoIXJ8fG51bGw9PT1ofHwwPT09aC5sZW5ndGh8fG8mJiFwKW8/dShudWxsKTpjKCk7ZWxzZXtjb25zdCB0PW8/MDppLGU9NCp0O2xldCByPWYuY2xpcHBpbmdTdGF0ZXx8bnVsbDtsLnZhbHVlPXIscj11KGgsYSxlLHMpO2ZvcihsZXQgdD0wO3QhPT1lOysrdClyW3RdPW5bdF07Zi5jbGlwcGluZ1N0YXRlPXIsdGhpcy5udW1JbnRlcnNlY3Rpb249ZD90aGlzLm51bVBsYW5lczowLHRoaXMubnVtUGxhbmVzKz10fX19ZnVuY3Rpb24gSUR0KHQpe2xldCBlPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIG4odCxlKXtyZXR1cm4gZT09PU9JdD90Lm1hcHBpbmc9Tkl0OmU9PT1SSXQmJih0Lm1hcHBpbmc9SUl0KSx0fWZ1bmN0aW9uIGkodCl7Y29uc3Qgbj10LnRhcmdldDtuLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGkpO2NvbnN0IHI9ZS5nZXQobik7dm9pZCAwIT09ciYmKGUuZGVsZXRlKG4pLHIuZGlzcG9zZSgpKX1yZXR1cm57Z2V0OmZ1bmN0aW9uIHIobyl7aWYobyYmby5pc1RleHR1cmUpe2NvbnN0IHI9by5tYXBwaW5nO2lmKHI9PT1PSXR8fHI9PT1SSXQpe2lmKGUuaGFzKG8pKXJldHVybiBuKGUuZ2V0KG8pLnRleHR1cmUsby5tYXBwaW5nKTt7Y29uc3Qgcj1vLmltYWdlO2lmKHImJnIuaGVpZ2h0PjApe2NvbnN0IGE9dC5nZXRSZW5kZXJMaXN0KCkscz10LmdldFJlbmRlclRhcmdldCgpLGw9bmV3IF9EdChyLmhlaWdodC8yKTtyZXR1cm4gbC5mcm9tRXF1aXJlY3Rhbmd1bGFyVGV4dHVyZSh0LG8pLGUuc2V0KG8sbCksdC5zZXRSZW5kZXJUYXJnZXQocyksdC5zZXRSZW5kZXJMaXN0KGEpLG8uYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsaSksbihsLnRleHR1cmUsby5tYXBwaW5nKX1yZXR1cm4gbnVsbH19fXJldHVybiBvfSxkaXNwb3NlOmZ1bmN0aW9uIG8oKXtlPW5ldyBXZWFrTWFwfX19ZnVuY3Rpb24gT0R0KHQpe2NvbnN0IGU9e307ZnVuY3Rpb24gbihuKXtpZih2b2lkIDAhPT1lW25dKXJldHVybiBlW25dO2xldCBpO3N3aXRjaChuKXtjYXNlIldFQkdMX2RlcHRoX3RleHR1cmUiOmk9dC5nZXRFeHRlbnNpb24oIldFQkdMX2RlcHRoX3RleHR1cmUiKXx8dC5nZXRFeHRlbnNpb24oIk1PWl9XRUJHTF9kZXB0aF90ZXh0dXJlIil8fHQuZ2V0RXh0ZW5zaW9uKCJXRUJLSVRfV0VCR0xfZGVwdGhfdGV4dHVyZSIpO2JyZWFrO2Nhc2UiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIjppPXQuZ2V0RXh0ZW5zaW9uKCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKXx8dC5nZXRFeHRlbnNpb24oIk1PWl9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKXx8dC5nZXRFeHRlbnNpb24oIldFQktJVF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKTticmVhaztjYXNlIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIjppPXQuZ2V0RXh0ZW5zaW9uKCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpfHx0LmdldEV4dGVuc2lvbigiTU9aX1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIil8fHQuZ2V0RXh0ZW5zaW9uKCJXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKTticmVhaztjYXNlIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyI6aT10LmdldEV4dGVuc2lvbigiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIil8fHQuZ2V0RXh0ZW5zaW9uKCJXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIik7YnJlYWs7ZGVmYXVsdDppPXQuZ2V0RXh0ZW5zaW9uKG4pfXJldHVybiBlW25dPWksaX1yZXR1cm57aGFzOmZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT09bih0KX0saW5pdDpmdW5jdGlvbih0KXt0LmlzV2ViR0wyP24oIkVYVF9jb2xvcl9idWZmZXJfZmxvYXQiKToobigiV0VCR0xfZGVwdGhfdGV4dHVyZSIpLG4oIk9FU190ZXh0dXJlX2Zsb2F0IiksbigiT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpLG4oIk9FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIiksbigiT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIiksbigiT0VTX2VsZW1lbnRfaW5kZXhfdWludCIpLG4oIk9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IiksbigiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpKSxuKCJPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKSxuKCJFWFRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQiKX0sZ2V0OmZ1bmN0aW9uKHQpe2NvbnN0IGU9bih0KTtyZXR1cm4gbnVsbD09PWUmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogIit0KyIgZXh0ZW5zaW9uIG5vdCBzdXBwb3J0ZWQuIiksZX19fWZ1bmN0aW9uIFJEdCh0LGUsbixpKXtjb25zdCByPXt9LG89bmV3IFdlYWtNYXA7ZnVuY3Rpb24gYSh0KXtjb25zdCBzPXQudGFyZ2V0O251bGwhPT1zLmluZGV4JiZlLnJlbW92ZShzLmluZGV4KTtmb3IoY29uc3QgdCBpbiBzLmF0dHJpYnV0ZXMpZS5yZW1vdmUocy5hdHRyaWJ1dGVzW3RdKTtzLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGEpLGRlbGV0ZSByW3MuaWRdO2NvbnN0IGw9by5nZXQocyk7bCYmKGUucmVtb3ZlKGwpLG8uZGVsZXRlKHMpKSxpLnJlbGVhc2VTdGF0ZXNPZkdlb21ldHJ5KHMpLCEwPT09cy5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5JiZkZWxldGUgcy5fbWF4SW5zdGFuY2VDb3VudCxuLm1lbW9yeS5nZW9tZXRyaWVzLS19ZnVuY3Rpb24gcyh0KXtjb25zdCBuPVtdLGk9dC5pbmRleCxyPXQuYXR0cmlidXRlcy5wb3NpdGlvbjtsZXQgYT0wO2lmKG51bGwhPT1pKXtjb25zdCB0PWkuYXJyYXk7YT1pLnZlcnNpb247Zm9yKGxldCBlPTAsaT10Lmxlbmd0aDtlPGk7ZSs9Myl7Y29uc3QgaT10W2UrMF0scj10W2UrMV0sbz10W2UrMl07bi5wdXNoKGkscixyLG8sbyxpKX19ZWxzZXthPXIudmVyc2lvbjtmb3IobGV0IHQ9MCxlPXIuYXJyYXkubGVuZ3RoLzMtMTt0PGU7dCs9Myl7Y29uc3QgZT10KzAsaT10KzEscj10KzI7bi5wdXNoKGUsaSxpLHIscixlKX19Y29uc3Qgcz1uZXcoUHp0KG4pPjY1NTM1P0N6dDpFenQpKG4sMSk7cy52ZXJzaW9uPWE7Y29uc3QgbD1vLmdldCh0KTtsJiZlLnJlbW92ZShsKSxvLnNldCh0LHMpfXJldHVybntnZXQ6ZnVuY3Rpb24gbCh0LGUpe3JldHVybiEwPT09cltlLmlkXXx8KGUuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsYSkscltlLmlkXT0hMCxuLm1lbW9yeS5nZW9tZXRyaWVzKyspLGV9LHVwZGF0ZTpmdW5jdGlvbiBjKHQpe2NvbnN0IG49dC5hdHRyaWJ1dGVzO2Zvcihjb25zdCB0IGluIG4pZS51cGRhdGUoblt0XSwzNDk2Mik7Y29uc3QgaT10Lm1vcnBoQXR0cmlidXRlcztmb3IoY29uc3QgdCBpbiBpKXtjb25zdCBuPWlbdF07Zm9yKGxldCB0PTAsaT1uLmxlbmd0aDt0PGk7dCsrKWUudXBkYXRlKG5bdF0sMzQ5NjIpfX0sZ2V0V2lyZWZyYW1lQXR0cmlidXRlOmZ1bmN0aW9uIHUodCl7Y29uc3QgZT1vLmdldCh0KTtpZihlKXtjb25zdCBuPXQuaW5kZXg7bnVsbCE9PW4mJmUudmVyc2lvbjxuLnZlcnNpb24mJnModCl9ZWxzZSBzKHQpO3JldHVybiBvLmdldCh0KX19fWZ1bmN0aW9uIHpEdCh0LGUsbixpKXtjb25zdCByPWkuaXNXZWJHTDI7bGV0IG8sYSxzO3RoaXMuc2V0TW9kZT1mdW5jdGlvbiBsKHQpe289dH0sdGhpcy5zZXRJbmRleD1mdW5jdGlvbiBjKHQpe2E9dC50eXBlLHM9dC5ieXRlc1BlckVsZW1lbnR9LHRoaXMucmVuZGVyPWZ1bmN0aW9uIHUoZSxpKXt0LmRyYXdFbGVtZW50cyhvLGksYSxlKnMpLG4udXBkYXRlKGksbywxKX0sdGhpcy5yZW5kZXJJbnN0YW5jZXM9ZnVuY3Rpb24gaChpLGwsYyl7aWYoMD09PWMpcmV0dXJuO2xldCB1LGg7aWYocil1PXQsaD0iZHJhd0VsZW1lbnRzSW5zdGFuY2VkIjtlbHNlIGlmKHU9ZS5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSxoPSJkcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRSIsbnVsbD09PXUpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xJbmRleGVkQnVmZmVyUmVuZGVyZXI6IHVzaW5nIFRIUkVFLkluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5IGJ1dCBoYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0IGV4dGVuc2lvbiBBTkdMRV9pbnN0YW5jZWRfYXJyYXlzLiIpO3VbaF0obyxsLGEsaSpzLGMpLG4udXBkYXRlKGwsbyxjKX19ZnVuY3Rpb24gRER0KHQpe2NvbnN0IGU9e2ZyYW1lOjAsY2FsbHM6MCx0cmlhbmdsZXM6MCxwb2ludHM6MCxsaW5lczowfTtyZXR1cm57bWVtb3J5OntnZW9tZXRyaWVzOjAsdGV4dHVyZXM6MH0scmVuZGVyOmUscHJvZ3JhbXM6bnVsbCxhdXRvUmVzZXQ6ITAscmVzZXQ6ZnVuY3Rpb24gbigpe2UuZnJhbWUrKyxlLmNhbGxzPTAsZS50cmlhbmdsZXM9MCxlLnBvaW50cz0wLGUubGluZXM9MH0sdXBkYXRlOmZ1bmN0aW9uIGkodCxuLHIpe3N3aXRjaChlLmNhbGxzKyssbil7Y2FzZSA0OmUudHJpYW5nbGVzKz1yKih0LzMpO2JyZWFrO2Nhc2UgMTplLmxpbmVzKz1yKih0LzIpO2JyZWFrO2Nhc2UgMzplLmxpbmVzKz1yKih0LTEpO2JyZWFrO2Nhc2UgMjplLmxpbmVzKz1yKnQ7YnJlYWs7Y2FzZSAwOmUucG9pbnRzKz1yKnQ7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTEluZm86IFVua25vd24gZHJhdyBtb2RlOiIsbil9fX19ZnVuY3Rpb24gQkR0KHQsZSl7cmV0dXJuIHRbMF0tZVswXX1mdW5jdGlvbiBIRHQodCxlKXtyZXR1cm4gTWF0aC5hYnMoZVsxXSktTWF0aC5hYnModFsxXSl9ZnVuY3Rpb24gRkR0KHQpe2NvbnN0IGU9e30sbj1uZXcgRmxvYXQzMkFycmF5KDgpLGk9W107Zm9yKGxldCB0PTA7dDw4O3QrKylpW3RdPVt0LDBdO3JldHVybnt1cGRhdGU6ZnVuY3Rpb24gcihvLGEscyxsKXtjb25zdCBjPW8ubW9ycGhUYXJnZXRJbmZsdWVuY2VzLHU9dm9pZCAwPT09Yz8wOmMubGVuZ3RoO2xldCBoPWVbYS5pZF07aWYodm9pZCAwPT09aCl7aD1bXTtmb3IobGV0IHQ9MDt0PHU7dCsrKWhbdF09W3QsMF07ZVthLmlkXT1ofWZvcihsZXQgdD0wO3Q8dTt0Kyspe2NvbnN0IGU9aFt0XTtlWzBdPXQsZVsxXT1jW3RdfWguc29ydChIRHQpO2ZvcihsZXQgdD0wO3Q8ODt0KyspdDx1JiZoW3RdWzFdPyhpW3RdWzBdPWhbdF1bMF0saVt0XVsxXT1oW3RdWzFdKTooaVt0XVswXT1OdW1iZXIuTUFYX1NBRkVfSU5URUdFUixpW3RdWzFdPTApO2kuc29ydChCRHQpO2NvbnN0IGQ9cy5tb3JwaFRhcmdldHMmJmEubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLHA9cy5tb3JwaE5vcm1hbHMmJmEubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbDtsZXQgZj0wO2ZvcihsZXQgdD0wO3Q8ODt0Kyspe2NvbnN0IGU9aVt0XSxyPWVbMF0sbz1lWzFdO3IhPT1OdW1iZXIuTUFYX1NBRkVfSU5URUdFUiYmbz8oZCYmYS5nZXRBdHRyaWJ1dGUoIm1vcnBoVGFyZ2V0Iit0KSE9PWRbcl0mJmEuc2V0QXR0cmlidXRlKCJtb3JwaFRhcmdldCIrdCxkW3JdKSxwJiZhLmdldEF0dHJpYnV0ZSgibW9ycGhOb3JtYWwiK3QpIT09cFtyXSYmYS5zZXRBdHRyaWJ1dGUoIm1vcnBoTm9ybWFsIit0LHBbcl0pLG5bdF09byxmKz1vKTooZCYmITA9PT1hLmhhc0F0dHJpYnV0ZSgibW9ycGhUYXJnZXQiK3QpJiZhLmRlbGV0ZUF0dHJpYnV0ZSgibW9ycGhUYXJnZXQiK3QpLHAmJiEwPT09YS5oYXNBdHRyaWJ1dGUoIm1vcnBoTm9ybWFsIit0KSYmYS5kZWxldGVBdHRyaWJ1dGUoIm1vcnBoTm9ybWFsIit0KSxuW3RdPTApfWNvbnN0IG09YS5tb3JwaFRhcmdldHNSZWxhdGl2ZT8xOjEtZjtsLmdldFVuaWZvcm1zKCkuc2V0VmFsdWUodCwibW9ycGhUYXJnZXRCYXNlSW5mbHVlbmNlIixtKSxsLmdldFVuaWZvcm1zKCkuc2V0VmFsdWUodCwibW9ycGhUYXJnZXRJbmZsdWVuY2VzIixuKX19fWZ1bmN0aW9uIFZEdCh0LGUsbixpKXtsZXQgcj1uZXcgV2Vha01hcDtmdW5jdGlvbiBvKHQpe2NvbnN0IGU9dC50YXJnZXQ7ZS5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixvKSxuLnJlbW92ZShlLmluc3RhbmNlTWF0cml4KSxudWxsIT09ZS5pbnN0YW5jZUNvbG9yJiZuLnJlbW92ZShlLmluc3RhbmNlQ29sb3IpfXJldHVybnt1cGRhdGU6ZnVuY3Rpb24gYSh0KXtjb25zdCBhPWkucmVuZGVyLmZyYW1lLHM9ZS5nZXQodCx0Lmdlb21ldHJ5KTtyZXR1cm4gci5nZXQocykhPT1hJiYoZS51cGRhdGUocyksci5zZXQocyxhKSksdC5pc0luc3RhbmNlZE1lc2gmJighMT09PXQuaGFzRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsbykmJnQuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsbyksbi51cGRhdGUodC5pbnN0YW5jZU1hdHJpeCwzNDk2MiksbnVsbCE9PXQuaW5zdGFuY2VDb2xvciYmbi51cGRhdGUodC5pbnN0YW5jZUNvbG9yLDM0OTYyKSksc30sZGlzcG9zZTpmdW5jdGlvbiBzKCl7cj1uZXcgV2Vha01hcH19fWZ1bmN0aW9uIFVEdCh0PW51bGwsZT0xLG49MSxpPTEpe1ZPdC5jYWxsKHRoaXMsbnVsbCksdGhpcy5pbWFnZT17ZGF0YTp0LHdpZHRoOmUsaGVpZ2h0Om4sZGVwdGg6aX0sdGhpcy5tYWdGaWx0ZXI9Vkl0LHRoaXMubWluRmlsdGVyPVZJdCx0aGlzLndyYXBSPUhJdCx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMSx0aGlzLmZsaXBZPSExLHRoaXMubmVlZHNVcGRhdGU9ITB9ZnVuY3Rpb24gakR0KHQ9bnVsbCxlPTEsbj0xLGk9MSl7Vk90LmNhbGwodGhpcyxudWxsKSx0aGlzLmltYWdlPXtkYXRhOnQsd2lkdGg6ZSxoZWlnaHQ6bixkZXB0aDppfSx0aGlzLm1hZ0ZpbHRlcj1WSXQsdGhpcy5taW5GaWx0ZXI9Vkl0LHRoaXMud3JhcFI9SEl0LHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExLHRoaXMuZmxpcFk9ITEsdGhpcy5uZWVkc1VwZGF0ZT0hMH1DRHQucGh5c2ljYWw9e3VuaWZvcm1zOmNEdChbQ0R0LnN0YW5kYXJkLnVuaWZvcm1zLHtjbGVhcmNvYXQ6e3ZhbHVlOjB9LGNsZWFyY29hdE1hcDp7dmFsdWU6bnVsbH0sY2xlYXJjb2F0Um91Z2huZXNzOnt2YWx1ZTowfSxjbGVhcmNvYXRSb3VnaG5lc3NNYXA6e3ZhbHVlOm51bGx9LGNsZWFyY29hdE5vcm1hbFNjYWxlOnt2YWx1ZTpuZXcgek90KDEsMSl9LGNsZWFyY29hdE5vcm1hbE1hcDp7dmFsdWU6bnVsbH0sc2hlZW46e3ZhbHVlOm5ldyBwenQoMCl9LHRyYW5zbWlzc2lvbjp7dmFsdWU6MH0sdHJhbnNtaXNzaW9uTWFwOnt2YWx1ZTpudWxsfX1dKSx2ZXJ0ZXhTaGFkZXI6RUR0Lm1lc2hwaHlzaWNhbF92ZXJ0LGZyYWdtZW50U2hhZGVyOkVEdC5tZXNocGh5c2ljYWxfZnJhZ30sKFVEdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShWT3QucHJvdG90eXBlKSkuY29uc3RydWN0b3I9VUR0LFVEdC5wcm90b3R5cGUuaXNEYXRhVGV4dHVyZTJEQXJyYXk9ITAsKGpEdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShWT3QucHJvdG90eXBlKSkuY29uc3RydWN0b3I9akR0LGpEdC5wcm90b3R5cGUuaXNEYXRhVGV4dHVyZTNEPSEwO2NvbnN0IEdEdD1uZXcgVk90LFdEdD1uZXcgVUR0LHFEdD1uZXcgakR0LFlEdD1uZXcgZ0R0LFhEdD1bXSwkRHQ9W10sS0R0PW5ldyBGbG9hdDMyQXJyYXkoMTYpLFpEdD1uZXcgRmxvYXQzMkFycmF5KDkpLEpEdD1uZXcgRmxvYXQzMkFycmF5KDQpO2Z1bmN0aW9uIFFEdCh0LGUsbil7Y29uc3QgaT10WzBdO2lmKGk8PTB8fGk+MClyZXR1cm4gdDtjb25zdCByPWUqbjtsZXQgbz1YRHRbcl07aWYodm9pZCAwPT09byYmKG89bmV3IEZsb2F0MzJBcnJheShyKSxYRHRbcl09byksMCE9PWUpe2kudG9BcnJheShvLDApO2ZvcihsZXQgaT0xLHI9MDtpIT09ZTsrK2kpcis9bix0W2ldLnRvQXJyYXkobyxyKX1yZXR1cm4gb31mdW5jdGlvbiB0QnQodCxlKXtpZih0Lmxlbmd0aCE9PWUubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgbj0wLGk9dC5sZW5ndGg7bjxpO24rKylpZih0W25dIT09ZVtuXSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBlQnQodCxlKXtmb3IobGV0IG49MCxpPWUubGVuZ3RoO248aTtuKyspdFtuXT1lW25dfWZ1bmN0aW9uIG5CdCh0LGUpe2xldCBuPSREdFtlXTt2b2lkIDA9PT1uJiYobj1uZXcgSW50MzJBcnJheShlKSwkRHRbZV09bik7Zm9yKGxldCBpPTA7aSE9PWU7KytpKW5baV09dC5hbGxvY2F0ZVRleHR1cmVVbml0KCk7cmV0dXJuIG59ZnVuY3Rpb24gaUJ0KHQsZSl7Y29uc3Qgbj10aGlzLmNhY2hlO25bMF0hPT1lJiYodC51bmlmb3JtMWYodGhpcy5hZGRyLGUpLG5bMF09ZSl9ZnVuY3Rpb24gckJ0KHQsZSl7Y29uc3Qgbj10aGlzLmNhY2hlO2lmKHZvaWQgMCE9PWUueCluWzBdPT09ZS54JiZuWzFdPT09ZS55fHwodC51bmlmb3JtMmYodGhpcy5hZGRyLGUueCxlLnkpLG5bMF09ZS54LG5bMV09ZS55KTtlbHNle2lmKHRCdChuLGUpKXJldHVybjt0LnVuaWZvcm0yZnYodGhpcy5hZGRyLGUpLGVCdChuLGUpfX1mdW5jdGlvbiBvQnQodCxlKXtjb25zdCBuPXRoaXMuY2FjaGU7aWYodm9pZCAwIT09ZS54KW5bMF09PT1lLngmJm5bMV09PT1lLnkmJm5bMl09PT1lLnp8fCh0LnVuaWZvcm0zZih0aGlzLmFkZHIsZS54LGUueSxlLnopLG5bMF09ZS54LG5bMV09ZS55LG5bMl09ZS56KTtlbHNlIGlmKHZvaWQgMCE9PWUuciluWzBdPT09ZS5yJiZuWzFdPT09ZS5nJiZuWzJdPT09ZS5ifHwodC51bmlmb3JtM2YodGhpcy5hZGRyLGUucixlLmcsZS5iKSxuWzBdPWUucixuWzFdPWUuZyxuWzJdPWUuYik7ZWxzZXtpZih0QnQobixlKSlyZXR1cm47dC51bmlmb3JtM2Z2KHRoaXMuYWRkcixlKSxlQnQobixlKX19ZnVuY3Rpb24gYUJ0KHQsZSl7Y29uc3Qgbj10aGlzLmNhY2hlO2lmKHZvaWQgMCE9PWUueCluWzBdPT09ZS54JiZuWzFdPT09ZS55JiZuWzJdPT09ZS56JiZuWzNdPT09ZS53fHwodC51bmlmb3JtNGYodGhpcy5hZGRyLGUueCxlLnksZS56LGUudyksblswXT1lLngsblsxXT1lLnksblsyXT1lLnosblszXT1lLncpO2Vsc2V7aWYodEJ0KG4sZSkpcmV0dXJuO3QudW5pZm9ybTRmdih0aGlzLmFkZHIsZSksZUJ0KG4sZSl9fWZ1bmN0aW9uIHNCdCh0LGUpe2NvbnN0IG49dGhpcy5jYWNoZSxpPWUuZWxlbWVudHM7aWYodm9pZCAwPT09aSl7aWYodEJ0KG4sZSkpcmV0dXJuO3QudW5pZm9ybU1hdHJpeDJmdih0aGlzLmFkZHIsITEsZSksZUJ0KG4sZSl9ZWxzZXtpZih0QnQobixpKSlyZXR1cm47SkR0LnNldChpKSx0LnVuaWZvcm1NYXRyaXgyZnYodGhpcy5hZGRyLCExLEpEdCksZUJ0KG4saSl9fWZ1bmN0aW9uIGxCdCh0LGUpe2NvbnN0IG49dGhpcy5jYWNoZSxpPWUuZWxlbWVudHM7aWYodm9pZCAwPT09aSl7aWYodEJ0KG4sZSkpcmV0dXJuO3QudW5pZm9ybU1hdHJpeDNmdih0aGlzLmFkZHIsITEsZSksZUJ0KG4sZSl9ZWxzZXtpZih0QnQobixpKSlyZXR1cm47WkR0LnNldChpKSx0LnVuaWZvcm1NYXRyaXgzZnYodGhpcy5hZGRyLCExLFpEdCksZUJ0KG4saSl9fWZ1bmN0aW9uIGNCdCh0LGUpe2NvbnN0IG49dGhpcy5jYWNoZSxpPWUuZWxlbWVudHM7aWYodm9pZCAwPT09aSl7aWYodEJ0KG4sZSkpcmV0dXJuO3QudW5pZm9ybU1hdHJpeDRmdih0aGlzLmFkZHIsITEsZSksZUJ0KG4sZSl9ZWxzZXtpZih0QnQobixpKSlyZXR1cm47S0R0LnNldChpKSx0LnVuaWZvcm1NYXRyaXg0ZnYodGhpcy5hZGRyLCExLEtEdCksZUJ0KG4saSl9fWZ1bmN0aW9uIHVCdCh0LGUsbil7Y29uc3QgaT10aGlzLmNhY2hlLHI9bi5hbGxvY2F0ZVRleHR1cmVVbml0KCk7aVswXSE9PXImJih0LnVuaWZvcm0xaSh0aGlzLmFkZHIsciksaVswXT1yKSxuLnNhZmVTZXRUZXh0dXJlMkQoZXx8R0R0LHIpfWZ1bmN0aW9uIGhCdCh0LGUsbil7Y29uc3QgaT10aGlzLmNhY2hlLHI9bi5hbGxvY2F0ZVRleHR1cmVVbml0KCk7aVswXSE9PXImJih0LnVuaWZvcm0xaSh0aGlzLmFkZHIsciksaVswXT1yKSxuLnNldFRleHR1cmUyREFycmF5KGV8fFdEdCxyKX1mdW5jdGlvbiBkQnQodCxlLG4pe2NvbnN0IGk9dGhpcy5jYWNoZSxyPW4uYWxsb2NhdGVUZXh0dXJlVW5pdCgpO2lbMF0hPT1yJiYodC51bmlmb3JtMWkodGhpcy5hZGRyLHIpLGlbMF09ciksbi5zZXRUZXh0dXJlM0QoZXx8cUR0LHIpfWZ1bmN0aW9uIHBCdCh0LGUsbil7Y29uc3QgaT10aGlzLmNhY2hlLHI9bi5hbGxvY2F0ZVRleHR1cmVVbml0KCk7aVswXSE9PXImJih0LnVuaWZvcm0xaSh0aGlzLmFkZHIsciksaVswXT1yKSxuLnNhZmVTZXRUZXh0dXJlQ3ViZShlfHxZRHQscil9ZnVuY3Rpb24gZkJ0KHQsZSl7Y29uc3Qgbj10aGlzLmNhY2hlO25bMF0hPT1lJiYodC51bmlmb3JtMWkodGhpcy5hZGRyLGUpLG5bMF09ZSl9ZnVuY3Rpb24gbUJ0KHQsZSl7Y29uc3Qgbj10aGlzLmNhY2hlO3RCdChuLGUpfHwodC51bmlmb3JtMml2KHRoaXMuYWRkcixlKSxlQnQobixlKSl9ZnVuY3Rpb24gZ0J0KHQsZSl7Y29uc3Qgbj10aGlzLmNhY2hlO3RCdChuLGUpfHwodC51bmlmb3JtM2l2KHRoaXMuYWRkcixlKSxlQnQobixlKSl9ZnVuY3Rpb24gX0J0KHQsZSl7Y29uc3Qgbj10aGlzLmNhY2hlO3RCdChuLGUpfHwodC51bmlmb3JtNGl2KHRoaXMuYWRkcixlKSxlQnQobixlKSl9ZnVuY3Rpb24geUJ0KHQsZSl7Y29uc3Qgbj10aGlzLmNhY2hlO25bMF0hPT1lJiYodC51bmlmb3JtMXVpKHRoaXMuYWRkcixlKSxuWzBdPWUpfWZ1bmN0aW9uIHZCdCh0LGUpe3QudW5pZm9ybTFmdih0aGlzLmFkZHIsZSl9ZnVuY3Rpb24gYkJ0KHQsZSl7dC51bmlmb3JtMWl2KHRoaXMuYWRkcixlKX1mdW5jdGlvbiB4QnQodCxlKXt0LnVuaWZvcm0yaXYodGhpcy5hZGRyLGUpfWZ1bmN0aW9uIHdCdCh0LGUpe3QudW5pZm9ybTNpdih0aGlzLmFkZHIsZSl9ZnVuY3Rpb24gU0J0KHQsZSl7dC51bmlmb3JtNGl2KHRoaXMuYWRkcixlKX1mdW5jdGlvbiBNQnQodCxlKXtjb25zdCBuPVFEdChlLHRoaXMuc2l6ZSwyKTt0LnVuaWZvcm0yZnYodGhpcy5hZGRyLG4pfWZ1bmN0aW9uIEVCdCh0LGUpe2NvbnN0IG49UUR0KGUsdGhpcy5zaXplLDMpO3QudW5pZm9ybTNmdih0aGlzLmFkZHIsbil9ZnVuY3Rpb24gVEJ0KHQsZSl7Y29uc3Qgbj1RRHQoZSx0aGlzLnNpemUsNCk7dC51bmlmb3JtNGZ2KHRoaXMuYWRkcixuKX1mdW5jdGlvbiBDQnQodCxlKXtjb25zdCBuPVFEdChlLHRoaXMuc2l6ZSw0KTt0LnVuaWZvcm1NYXRyaXgyZnYodGhpcy5hZGRyLCExLG4pfWZ1bmN0aW9uIEFCdCh0LGUpe2NvbnN0IG49UUR0KGUsdGhpcy5zaXplLDkpO3QudW5pZm9ybU1hdHJpeDNmdih0aGlzLmFkZHIsITEsbil9ZnVuY3Rpb24ga0J0KHQsZSl7Y29uc3Qgbj1RRHQoZSx0aGlzLnNpemUsMTYpO3QudW5pZm9ybU1hdHJpeDRmdih0aGlzLmFkZHIsITEsbil9ZnVuY3Rpb24gTEJ0KHQsZSxuKXtjb25zdCBpPWUubGVuZ3RoLHI9bkJ0KG4saSk7dC51bmlmb3JtMWl2KHRoaXMuYWRkcixyKTtmb3IobGV0IHQ9MDt0IT09aTsrK3Qpbi5zYWZlU2V0VGV4dHVyZTJEKGVbdF18fEdEdCxyW3RdKX1mdW5jdGlvbiBQQnQodCxlLG4pe2NvbnN0IGk9ZS5sZW5ndGgscj1uQnQobixpKTt0LnVuaWZvcm0xaXYodGhpcy5hZGRyLHIpO2ZvcihsZXQgdD0wO3QhPT1pOysrdCluLnNhZmVTZXRUZXh0dXJlQ3ViZShlW3RdfHxZRHQsclt0XSl9ZnVuY3Rpb24gTkJ0KHQsZSxuKXt0aGlzLmlkPXQsdGhpcy5hZGRyPW4sdGhpcy5jYWNoZT1bXSx0aGlzLnNldFZhbHVlPShmdW5jdGlvbiBpKHQpe3N3aXRjaCh0KXtjYXNlIDUxMjY6cmV0dXJuIGlCdDtjYXNlIDM1NjY0OnJldHVybiByQnQ7Y2FzZSAzNTY2NTpyZXR1cm4gb0J0O2Nhc2UgMzU2NjY6cmV0dXJuIGFCdDtjYXNlIDM1Njc0OnJldHVybiBzQnQ7Y2FzZSAzNTY3NTpyZXR1cm4gbEJ0O2Nhc2UgMzU2NzY6cmV0dXJuIGNCdDtjYXNlIDUxMjQ6Y2FzZSAzNTY3MDpyZXR1cm4gZkJ0O2Nhc2UgMzU2Njc6Y2FzZSAzNTY3MTpyZXR1cm4gbUJ0O2Nhc2UgMzU2Njg6Y2FzZSAzNTY3MjpyZXR1cm4gZ0J0O2Nhc2UgMzU2Njk6Y2FzZSAzNTY3MzpyZXR1cm4gX0J0O2Nhc2UgNTEyNTpyZXR1cm4geUJ0O2Nhc2UgMzU2Nzg6Y2FzZSAzNjE5ODpjYXNlIDM2Mjk4OmNhc2UgMzYzMDY6Y2FzZSAzNTY4MjpyZXR1cm4gdUJ0O2Nhc2UgMzU2Nzk6Y2FzZSAzNjI5OTpjYXNlIDM2MzA3OnJldHVybiBkQnQ7Y2FzZSAzNTY4MDpjYXNlIDM2MzAwOmNhc2UgMzYzMDg6Y2FzZSAzNjI5MzpyZXR1cm4gcEJ0O2Nhc2UgMzYyODk6Y2FzZSAzNjMwMzpjYXNlIDM2MzExOmNhc2UgMzYyOTI6cmV0dXJuIGhCdH19KShlLnR5cGUpfWZ1bmN0aW9uIElCdCh0LGUsbil7dGhpcy5pZD10LHRoaXMuYWRkcj1uLHRoaXMuY2FjaGU9W10sdGhpcy5zaXplPWUuc2l6ZSx0aGlzLnNldFZhbHVlPShmdW5jdGlvbiBpKHQpe3N3aXRjaCh0KXtjYXNlIDUxMjY6cmV0dXJuIHZCdDtjYXNlIDM1NjY0OnJldHVybiBNQnQ7Y2FzZSAzNTY2NTpyZXR1cm4gRUJ0O2Nhc2UgMzU2NjY6cmV0dXJuIFRCdDtjYXNlIDM1Njc0OnJldHVybiBDQnQ7Y2FzZSAzNTY3NTpyZXR1cm4gQUJ0O2Nhc2UgMzU2NzY6cmV0dXJuIGtCdDtjYXNlIDUxMjQ6Y2FzZSAzNTY3MDpyZXR1cm4gYkJ0O2Nhc2UgMzU2Njc6Y2FzZSAzNTY3MTpyZXR1cm4geEJ0O2Nhc2UgMzU2Njg6Y2FzZSAzNTY3MjpyZXR1cm4gd0J0O2Nhc2UgMzU2Njk6Y2FzZSAzNTY3MzpyZXR1cm4gU0J0O2Nhc2UgMzU2Nzg6Y2FzZSAzNjE5ODpjYXNlIDM2Mjk4OmNhc2UgMzYzMDY6Y2FzZSAzNTY4MjpyZXR1cm4gTEJ0O2Nhc2UgMzU2ODA6Y2FzZSAzNjMwMDpjYXNlIDM2MzA4OmNhc2UgMzYyOTM6cmV0dXJuIFBCdH19KShlLnR5cGUpfWZ1bmN0aW9uIE9CdCh0KXt0aGlzLmlkPXQsdGhpcy5zZXE9W10sdGhpcy5tYXA9e319SUJ0LnByb3RvdHlwZS51cGRhdGVDYWNoZT1mdW5jdGlvbih0KXtjb25zdCBlPXRoaXMuY2FjaGU7dCBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSYmZS5sZW5ndGghPT10Lmxlbmd0aCYmKHRoaXMuY2FjaGU9bmV3IEZsb2F0MzJBcnJheSh0Lmxlbmd0aCkpLGVCdChlLHQpfSxPQnQucHJvdG90eXBlLnNldFZhbHVlPWZ1bmN0aW9uKHQsZSxuKXtjb25zdCBpPXRoaXMuc2VxO2ZvcihsZXQgcj0wLG89aS5sZW5ndGg7ciE9PW87KytyKXtjb25zdCBvPWlbcl07by5zZXRWYWx1ZSh0LGVbby5pZF0sbil9fTtjb25zdCBSQnQ9LyhcdyspKFxdKT8oXFt8XC4pPy9nO2Z1bmN0aW9uIHpCdCh0LGUpe3Quc2VxLnB1c2goZSksdC5tYXBbZS5pZF09ZX1mdW5jdGlvbiBEQnQodCxlLG4pe2NvbnN0IGk9dC5uYW1lLHI9aS5sZW5ndGg7Zm9yKFJCdC5sYXN0SW5kZXg9MDs7KXtjb25zdCBvPVJCdC5leGVjKGkpLGE9UkJ0Lmxhc3RJbmRleDtsZXQgcz1vWzFdO2NvbnN0IGw9b1szXTtpZigiXSI9PT1vWzJdJiYoc3w9MCksdm9pZCAwPT09bHx8IlsiPT09bCYmYSsyPT09cil7ekJ0KG4sdm9pZCAwPT09bD9uZXcgTkJ0KHMsdCxlKTpuZXcgSUJ0KHMsdCxlKSk7YnJlYWt9e2xldCB0PW4ubWFwW3NdO3ZvaWQgMD09PXQmJih0PW5ldyBPQnQocyksekJ0KG4sdCkpLG49dH19fWZ1bmN0aW9uIEJCdCh0LGUpe3RoaXMuc2VxPVtdLHRoaXMubWFwPXt9O2NvbnN0IG49dC5nZXRQcm9ncmFtUGFyYW1ldGVyKGUsMzU3MTgpO2ZvcihsZXQgaT0wO2k8bjsrK2kpe2NvbnN0IG49dC5nZXRBY3RpdmVVbmlmb3JtKGUsaSk7REJ0KG4sdC5nZXRVbmlmb3JtTG9jYXRpb24oZSxuLm5hbWUpLHRoaXMpfX1mdW5jdGlvbiBIQnQodCxlLG4pe2NvbnN0IGk9dC5jcmVhdGVTaGFkZXIoZSk7cmV0dXJuIHQuc2hhZGVyU291cmNlKGksbiksdC5jb21waWxlU2hhZGVyKGkpLGl9QkJ0LnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbih0LGUsbixpKXtjb25zdCByPXRoaXMubWFwW2VdO3ZvaWQgMCE9PXImJnIuc2V0VmFsdWUodCxuLGkpfSxCQnQucHJvdG90eXBlLnNldE9wdGlvbmFsPWZ1bmN0aW9uKHQsZSxuKXtjb25zdCBpPWVbbl07dm9pZCAwIT09aSYmdGhpcy5zZXRWYWx1ZSh0LG4saSl9LEJCdC51cGxvYWQ9ZnVuY3Rpb24odCxlLG4saSl7Zm9yKGxldCByPTAsbz1lLmxlbmd0aDtyIT09bzsrK3Ipe2NvbnN0IG89ZVtyXSxhPW5bby5pZF07ITEhPT1hLm5lZWRzVXBkYXRlJiZvLnNldFZhbHVlKHQsYS52YWx1ZSxpKX19LEJCdC5zZXFXaXRoVmFsdWU9ZnVuY3Rpb24odCxlKXtjb25zdCBuPVtdO2ZvcihsZXQgaT0wLHI9dC5sZW5ndGg7aSE9PXI7KytpKXtjb25zdCByPXRbaV07ci5pZCBpbiBlJiZuLnB1c2gocil9cmV0dXJuIG59O2xldCBGQnQ9MDtmdW5jdGlvbiBWQnQodCl7c3dpdGNoKHQpe2Nhc2UgeE90OnJldHVyblsiTGluZWFyIiwiKCB2YWx1ZSApIl07Y2FzZSB3T3Q6cmV0dXJuWyJzUkdCIiwiKCB2YWx1ZSApIl07Y2FzZSBNT3Q6cmV0dXJuWyJSR0JFIiwiKCB2YWx1ZSApIl07Y2FzZSBFT3Q6cmV0dXJuWyJSR0JNIiwiKCB2YWx1ZSwgNy4wICkiXTtjYXNlIFRPdDpyZXR1cm5bIlJHQk0iLCIoIHZhbHVlLCAxNi4wICkiXTtjYXNlIENPdDpyZXR1cm5bIlJHQkQiLCIoIHZhbHVlLCAyNTYuMCApIl07Y2FzZSBTT3Q6cmV0dXJuWyJHYW1tYSIsIiggdmFsdWUsIGZsb2F0KCBHQU1NQV9GQUNUT1IgKSApIl07Y2FzZSAzMDAzOnJldHVyblsiTG9nTHV2IiwiKCB2YWx1ZSApIl07ZGVmYXVsdDpyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW06IFVuc3VwcG9ydGVkIGVuY29kaW5nOiIsdCksWyJMaW5lYXIiLCIoIHZhbHVlICkiXX19ZnVuY3Rpb24gVUJ0KHQsZSxuKXtjb25zdCBpPXQuZ2V0U2hhZGVyUGFyYW1ldGVyKGUsMzU3MTMpLHI9dC5nZXRTaGFkZXJJbmZvTG9nKGUpLnRyaW0oKTtyZXR1cm4gaSYmIiI9PT1yPyIiOiJUSFJFRS5XZWJHTFNoYWRlcjogZ2wuZ2V0U2hhZGVySW5mb0xvZygpICIrbisiXG4iK3IrKGZ1bmN0aW9uIG8odCl7Y29uc3QgZT10LnNwbGl0KCJcbiIpO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKWVbdF09dCsxKyI6ICIrZVt0XTtyZXR1cm4gZS5qb2luKCJcbiIpfSkodC5nZXRTaGFkZXJTb3VyY2UoZSkpfWZ1bmN0aW9uIGpCdCh0LGUpe2NvbnN0IG49VkJ0KGUpO3JldHVybiJ2ZWM0ICIrdCsiKCB2ZWM0IHZhbHVlICkgeyByZXR1cm4gIituWzBdKyJUb0xpbmVhciIrblsxXSsiOyB9In1mdW5jdGlvbiBHQnQodCxlKXtjb25zdCBuPVZCdChlKTtyZXR1cm4idmVjNCAiK3QrIiggdmVjNCB2YWx1ZSApIHsgcmV0dXJuIExpbmVhclRvIituWzBdK25bMV0rIjsgfSJ9ZnVuY3Rpb24gV0J0KHQsZSl7bGV0IG47c3dpdGNoKGUpe2Nhc2UgMTpuPSJMaW5lYXIiO2JyZWFrO2Nhc2UgMjpuPSJSZWluaGFyZCI7YnJlYWs7Y2FzZSAzOm49Ik9wdGltaXplZENpbmVvbiI7YnJlYWs7Y2FzZSA0Om49IkFDRVNGaWxtaWMiO2JyZWFrO2Nhc2UgNTpuPSJDdXN0b20iO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW06IFVuc3VwcG9ydGVkIHRvbmVNYXBwaW5nOiIsZSksbj0iTGluZWFyIn1yZXR1cm4idmVjMyAiK3QrIiggdmVjMyBjb2xvciApIHsgcmV0dXJuICIrbisiVG9uZU1hcHBpbmcoIGNvbG9yICk7IH0ifWZ1bmN0aW9uIHFCdCh0KXtyZXR1cm4iIiE9PXR9ZnVuY3Rpb24gWUJ0KHQsZSl7cmV0dXJuIHQucmVwbGFjZSgvTlVNX0RJUl9MSUdIVFMvZyxlLm51bURpckxpZ2h0cykucmVwbGFjZSgvTlVNX1NQT1RfTElHSFRTL2csZS5udW1TcG90TGlnaHRzKS5yZXBsYWNlKC9OVU1fUkVDVF9BUkVBX0xJR0hUUy9nLGUubnVtUmVjdEFyZWFMaWdodHMpLnJlcGxhY2UoL05VTV9QT0lOVF9MSUdIVFMvZyxlLm51bVBvaW50TGlnaHRzKS5yZXBsYWNlKC9OVU1fSEVNSV9MSUdIVFMvZyxlLm51bUhlbWlMaWdodHMpLnJlcGxhY2UoL05VTV9ESVJfTElHSFRfU0hBRE9XUy9nLGUubnVtRGlyTGlnaHRTaGFkb3dzKS5yZXBsYWNlKC9OVU1fU1BPVF9MSUdIVF9TSEFET1dTL2csZS5udW1TcG90TGlnaHRTaGFkb3dzKS5yZXBsYWNlKC9OVU1fUE9JTlRfTElHSFRfU0hBRE9XUy9nLGUubnVtUG9pbnRMaWdodFNoYWRvd3MpfWZ1bmN0aW9uIFhCdCh0LGUpe3JldHVybiB0LnJlcGxhY2UoL05VTV9DTElQUElOR19QTEFORVMvZyxlLm51bUNsaXBwaW5nUGxhbmVzKS5yZXBsYWNlKC9VTklPTl9DTElQUElOR19QTEFORVMvZyxlLm51bUNsaXBwaW5nUGxhbmVzLWUubnVtQ2xpcEludGVyc2VjdGlvbil9Y29uc3QgJEJ0PS9eWyBcdF0qI2luY2x1ZGUgKzwoW1x3XGQuL10rKT4vZ207ZnVuY3Rpb24gS0J0KHQpe3JldHVybiB0LnJlcGxhY2UoJEJ0LFpCdCl9ZnVuY3Rpb24gWkJ0KHQsZSl7Y29uc3Qgbj1FRHRbZV07aWYodm9pZCAwPT09bil0aHJvdyBuZXcgRXJyb3IoIkNhbiBub3QgcmVzb2x2ZSAjaW5jbHVkZSA8IitlKyI+Iik7cmV0dXJuIEtCdChuKX1jb25zdCBKQnQ9LyNwcmFnbWEgdW5yb2xsX2xvb3BbXHNdKz9mb3IgXCggaW50IGkgXD0gKFxkKylcOyBpIDwgKFxkKylcOyBpIFwrXCsgXCkgXHsoW1xzXFNdKz8pKD89XH0pXH0vZyxRQnQ9LyNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRccytmb3JccypcKFxzKmludFxzK2lccyo9XHMqKFxkKylccyo7XHMqaVxzKjxccyooXGQrKVxzKjtccyppXHMqXCtcK1xzKlwpXHMqeyhbXHNcU10rPyl9XHMrI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQvZztmdW5jdGlvbiB0SHQodCl7cmV0dXJuIHQucmVwbGFjZShRQnQsbkh0KS5yZXBsYWNlKEpCdCxlSHQpfWZ1bmN0aW9uIGVIdCh0LGUsbixpKXtyZXR1cm4gY29uc29sZS53YXJuKCJXZWJHTFByb2dyYW06ICNwcmFnbWEgdW5yb2xsX2xvb3Agc2hhZGVyIHN5bnRheCBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlICNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQgc3ludGF4IGluc3RlYWQuIiksbkh0KDAsZSxuLGkpfWZ1bmN0aW9uIG5IdCh0LGUsbixpKXtsZXQgcj0iIjtmb3IobGV0IHQ9cGFyc2VJbnQoZSk7dDxwYXJzZUludChuKTt0Kyspcis9aS5yZXBsYWNlKC9cW1xzKmlccypcXS9nLCJbICIrdCsiIF0iKS5yZXBsYWNlKC9VTlJPTExFRF9MT09QX0lOREVYL2csdCk7cmV0dXJuIHJ9ZnVuY3Rpb24gaUh0KHQpe2xldCBlPSJwcmVjaXNpb24gIit0LnByZWNpc2lvbisiIGZsb2F0O1xucHJlY2lzaW9uICIrdC5wcmVjaXNpb24rIiBpbnQ7IjtyZXR1cm4iaGlnaHAiPT09dC5wcmVjaXNpb24/ZSs9IlxuI2RlZmluZSBISUdIX1BSRUNJU0lPTiI6Im1lZGl1bXAiPT09dC5wcmVjaXNpb24/ZSs9IlxuI2RlZmluZSBNRURJVU1fUFJFQ0lTSU9OIjoibG93cCI9PT10LnByZWNpc2lvbiYmKGUrPSJcbiNkZWZpbmUgTE9XX1BSRUNJU0lPTiIpLGV9ZnVuY3Rpb24gckh0KHQsZSxuLGkpe2NvbnN0IHI9dC5nZXRDb250ZXh0KCksbz1uLmRlZmluZXM7bGV0IGE9bi52ZXJ0ZXhTaGFkZXIscz1uLmZyYWdtZW50U2hhZGVyO2NvbnN0IGw9KGZ1bmN0aW9uIGModCl7bGV0IGU9IlNIQURPV01BUF9UWVBFX0JBU0lDIjtyZXR1cm4gMT09PXQuc2hhZG93TWFwVHlwZT9lPSJTSEFET1dNQVBfVFlQRV9QQ0YiOjI9PT10LnNoYWRvd01hcFR5cGU/ZT0iU0hBRE9XTUFQX1RZUEVfUENGX1NPRlQiOjM9PT10LnNoYWRvd01hcFR5cGUmJihlPSJTSEFET1dNQVBfVFlQRV9WU00iKSxlfSkobiksdT0oZnVuY3Rpb24gaCh0KXtsZXQgZT0iRU5WTUFQX1RZUEVfQ1VCRSI7aWYodC5lbnZNYXApc3dpdGNoKHQuZW52TWFwTW9kZSl7Y2FzZSBOSXQ6Y2FzZSBJSXQ6ZT0iRU5WTUFQX1RZUEVfQ1VCRSI7YnJlYWs7Y2FzZSB6SXQ6Y2FzZSBESXQ6ZT0iRU5WTUFQX1RZUEVfQ1VCRV9VViJ9cmV0dXJuIGV9KShuKSxkPShmdW5jdGlvbiBwKHQpe2xldCBlPSJFTlZNQVBfTU9ERV9SRUZMRUNUSU9OIjtpZih0LmVudk1hcClzd2l0Y2godC5lbnZNYXBNb2RlKXtjYXNlIElJdDpjYXNlIERJdDplPSJFTlZNQVBfTU9ERV9SRUZSQUNUSU9OIn1yZXR1cm4gZX0pKG4pLGY9KGZ1bmN0aW9uIG0odCl7bGV0IGU9IkVOVk1BUF9CTEVORElOR19OT05FIjtpZih0LmVudk1hcClzd2l0Y2godC5jb21iaW5lKXtjYXNlIDA6ZT0iRU5WTUFQX0JMRU5ESU5HX01VTFRJUExZIjticmVhaztjYXNlIDE6ZT0iRU5WTUFQX0JMRU5ESU5HX01JWCI7YnJlYWs7Y2FzZSAyOmU9IkVOVk1BUF9CTEVORElOR19BREQifXJldHVybiBlfSkobiksZz10LmdhbW1hRmFjdG9yPjA/dC5nYW1tYUZhY3RvcjoxLF89bi5pc1dlYkdMMj8iIjooZnVuY3Rpb24geSh0KXtyZXR1cm5bdC5leHRlbnNpb25EZXJpdmF0aXZlc3x8dC5lbnZNYXBDdWJlVVZ8fHQuYnVtcE1hcHx8dC50YW5nZW50U3BhY2VOb3JtYWxNYXB8fHQuY2xlYXJjb2F0Tm9ybWFsTWFwfHx0LmZsYXRTaGFkaW5nfHwicGh5c2ljYWwiPT09dC5zaGFkZXJJRD8iI2V4dGVuc2lvbiBHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgOiBlbmFibGUiOiIiLCh0LmV4dGVuc2lvbkZyYWdEZXB0aHx8dC5sb2dhcml0aG1pY0RlcHRoQnVmZmVyKSYmdC5yZW5kZXJlckV4dGVuc2lvbkZyYWdEZXB0aD8iI2V4dGVuc2lvbiBHTF9FWFRfZnJhZ19kZXB0aCA6IGVuYWJsZSI6IiIsdC5leHRlbnNpb25EcmF3QnVmZmVycyYmdC5yZW5kZXJlckV4dGVuc2lvbkRyYXdCdWZmZXJzPyIjZXh0ZW5zaW9uIEdMX0VYVF9kcmF3X2J1ZmZlcnMgOiByZXF1aXJlIjoiIiwodC5leHRlbnNpb25TaGFkZXJUZXh0dXJlTE9EfHx0LmVudk1hcCkmJnQucmVuZGVyZXJFeHRlbnNpb25TaGFkZXJUZXh0dXJlTG9kPyIjZXh0ZW5zaW9uIEdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QgOiBlbmFibGUiOiIiXS5maWx0ZXIocUJ0KS5qb2luKCJcbiIpfSkobiksdj0oZnVuY3Rpb24gYih0KXtjb25zdCBlPVtdO2Zvcihjb25zdCBuIGluIHQpe2NvbnN0IGk9dFtuXTshMSE9PWkmJmUucHVzaCgiI2RlZmluZSAiK24rIiAiK2kpfXJldHVybiBlLmpvaW4oIlxuIil9KShvKSx4PXIuY3JlYXRlUHJvZ3JhbSgpO2xldCB3LFMsTT1uLmdsc2xWZXJzaW9uPyIjdmVyc2lvbiAiK24uZ2xzbFZlcnNpb24rIlxuIjoiIjtuLmlzUmF3U2hhZGVyTWF0ZXJpYWw/KHc9W3ZdLmZpbHRlcihxQnQpLmpvaW4oIlxuIiksdy5sZW5ndGg+MCYmKHcrPSJcbiIpLFM9W18sdl0uZmlsdGVyKHFCdCkuam9pbigiXG4iKSxTLmxlbmd0aD4wJiYoUys9IlxuIikpOih3PVtpSHQobiksIiNkZWZpbmUgU0hBREVSX05BTUUgIituLnNoYWRlck5hbWUsdixuLmluc3RhbmNpbmc/IiNkZWZpbmUgVVNFX0lOU1RBTkNJTkciOiIiLG4uaW5zdGFuY2luZ0NvbG9yPyIjZGVmaW5lIFVTRV9JTlNUQU5DSU5HX0NPTE9SIjoiIixuLnN1cHBvcnRzVmVydGV4VGV4dHVyZXM/IiNkZWZpbmUgVkVSVEVYX1RFWFRVUkVTIjoiIiwiI2RlZmluZSBHQU1NQV9GQUNUT1IgIitnLCIjZGVmaW5lIE1BWF9CT05FUyAiK24ubWF4Qm9uZXMsbi51c2VGb2cmJm4uZm9nPyIjZGVmaW5lIFVTRV9GT0ciOiIiLG4udXNlRm9nJiZuLmZvZ0V4cDI/IiNkZWZpbmUgRk9HX0VYUDIiOiIiLG4ubWFwPyIjZGVmaW5lIFVTRV9NQVAiOiIiLG4uZW52TWFwPyIjZGVmaW5lIFVTRV9FTlZNQVAiOiIiLG4uZW52TWFwPyIjZGVmaW5lICIrZDoiIixuLmxpZ2h0TWFwPyIjZGVmaW5lIFVTRV9MSUdIVE1BUCI6IiIsbi5hb01hcD8iI2RlZmluZSBVU0VfQU9NQVAiOiIiLG4uZW1pc3NpdmVNYXA/IiNkZWZpbmUgVVNFX0VNSVNTSVZFTUFQIjoiIixuLmJ1bXBNYXA/IiNkZWZpbmUgVVNFX0JVTVBNQVAiOiIiLG4ubm9ybWFsTWFwPyIjZGVmaW5lIFVTRV9OT1JNQUxNQVAiOiIiLG4ubm9ybWFsTWFwJiZuLm9iamVjdFNwYWNlTm9ybWFsTWFwPyIjZGVmaW5lIE9CSkVDVFNQQUNFX05PUk1BTE1BUCI6IiIsbi5ub3JtYWxNYXAmJm4udGFuZ2VudFNwYWNlTm9ybWFsTWFwPyIjZGVmaW5lIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAiOiIiLG4uY2xlYXJjb2F0TWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRNQVAiOiIiLG4uY2xlYXJjb2F0Um91Z2huZXNzTWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRfUk9VR0hORVNTTUFQIjoiIixuLmNsZWFyY29hdE5vcm1hbE1hcD8iI2RlZmluZSBVU0VfQ0xFQVJDT0FUX05PUk1BTE1BUCI6IiIsbi5kaXNwbGFjZW1lbnRNYXAmJm4uc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcz8iI2RlZmluZSBVU0VfRElTUExBQ0VNRU5UTUFQIjoiIixuLnNwZWN1bGFyTWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUk1BUCI6IiIsbi5yb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX1JPVUdITkVTU01BUCI6IiIsbi5tZXRhbG5lc3NNYXA/IiNkZWZpbmUgVVNFX01FVEFMTkVTU01BUCI6IiIsbi5hbHBoYU1hcD8iI2RlZmluZSBVU0VfQUxQSEFNQVAiOiIiLG4udHJhbnNtaXNzaW9uTWFwPyIjZGVmaW5lIFVTRV9UUkFOU01JU1NJT05NQVAiOiIiLG4udmVydGV4VGFuZ2VudHM/IiNkZWZpbmUgVVNFX1RBTkdFTlQiOiIiLG4udmVydGV4Q29sb3JzPyIjZGVmaW5lIFVTRV9DT0xPUiI6IiIsbi52ZXJ0ZXhVdnM/IiNkZWZpbmUgVVNFX1VWIjoiIixuLnV2c1ZlcnRleE9ubHk/IiNkZWZpbmUgVVZTX1ZFUlRFWF9PTkxZIjoiIixuLmZsYXRTaGFkaW5nPyIjZGVmaW5lIEZMQVRfU0hBREVEIjoiIixuLnNraW5uaW5nPyIjZGVmaW5lIFVTRV9TS0lOTklORyI6IiIsbi51c2VWZXJ0ZXhUZXh0dXJlPyIjZGVmaW5lIEJPTkVfVEVYVFVSRSI6IiIsbi5tb3JwaFRhcmdldHM/IiNkZWZpbmUgVVNFX01PUlBIVEFSR0VUUyI6IiIsbi5tb3JwaE5vcm1hbHMmJiExPT09bi5mbGF0U2hhZGluZz8iI2RlZmluZSBVU0VfTU9SUEhOT1JNQUxTIjoiIixuLmRvdWJsZVNpZGVkPyIjZGVmaW5lIERPVUJMRV9TSURFRCI6IiIsbi5mbGlwU2lkZWQ/IiNkZWZpbmUgRkxJUF9TSURFRCI6IiIsbi5zaGFkb3dNYXBFbmFibGVkPyIjZGVmaW5lIFVTRV9TSEFET1dNQVAiOiIiLG4uc2hhZG93TWFwRW5hYmxlZD8iI2RlZmluZSAiK2w6IiIsbi5zaXplQXR0ZW51YXRpb24/IiNkZWZpbmUgVVNFX1NJWkVBVFRFTlVBVElPTiI6IiIsbi5sb2dhcml0aG1pY0RlcHRoQnVmZmVyPyIjZGVmaW5lIFVTRV9MT0dERVBUSEJVRiI6IiIsbi5sb2dhcml0aG1pY0RlcHRoQnVmZmVyJiZuLnJlbmRlcmVyRXh0ZW5zaW9uRnJhZ0RlcHRoPyIjZGVmaW5lIFVTRV9MT0dERVBUSEJVRl9FWFQiOiIiLCJ1bmlmb3JtIG1hdDQgbW9kZWxNYXRyaXg7IiwidW5pZm9ybSBtYXQ0IG1vZGVsVmlld01hdHJpeDsiLCJ1bmlmb3JtIG1hdDQgcHJvamVjdGlvbk1hdHJpeDsiLCJ1bmlmb3JtIG1hdDQgdmlld01hdHJpeDsiLCJ1bmlmb3JtIG1hdDMgbm9ybWFsTWF0cml4OyIsInVuaWZvcm0gdmVjMyBjYW1lcmFQb3NpdGlvbjsiLCJ1bmlmb3JtIGJvb2wgaXNPcnRob2dyYXBoaWM7IiwiI2lmZGVmIFVTRV9JTlNUQU5DSU5HIiwiXHRhdHRyaWJ1dGUgbWF0NCBpbnN0YW5jZU1hdHJpeDsiLCIjZW5kaWYiLCIjaWZkZWYgVVNFX0lOU1RBTkNJTkdfQ09MT1IiLCJcdGF0dHJpYnV0ZSB2ZWMzIGluc3RhbmNlQ29sb3I7IiwiI2VuZGlmIiwiYXR0cmlidXRlIHZlYzMgcG9zaXRpb247IiwiYXR0cmlidXRlIHZlYzMgbm9ybWFsOyIsImF0dHJpYnV0ZSB2ZWMyIHV2OyIsIiNpZmRlZiBVU0VfVEFOR0VOVCIsIlx0YXR0cmlidXRlIHZlYzQgdGFuZ2VudDsiLCIjZW5kaWYiLCIjaWZkZWYgVVNFX0NPTE9SIiwiXHRhdHRyaWJ1dGUgdmVjMyBjb2xvcjsiLCIjZW5kaWYiLCIjaWZkZWYgVVNFX01PUlBIVEFSR0VUUyIsIlx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQwOyIsIlx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQxOyIsIlx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQyOyIsIlx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQzOyIsIlx0I2lmZGVmIFVTRV9NT1JQSE5PUk1BTFMiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwwOyIsIlx0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaE5vcm1hbDE7IiwiXHRcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoTm9ybWFsMjsiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwzOyIsIlx0I2Vsc2UiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQ0OyIsIlx0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDU7IiwiXHRcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0NjsiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQ3OyIsIlx0I2VuZGlmIiwiI2VuZGlmIiwiI2lmZGVmIFVTRV9TS0lOTklORyIsIlx0YXR0cmlidXRlIHZlYzQgc2tpbkluZGV4OyIsIlx0YXR0cmlidXRlIHZlYzQgc2tpbldlaWdodDsiLCIjZW5kaWYiLCJcbiJdLmZpbHRlcihxQnQpLmpvaW4oIlxuIiksUz1bXyxpSHQobiksIiNkZWZpbmUgU0hBREVSX05BTUUgIituLnNoYWRlck5hbWUsdixuLmFscGhhVGVzdD8iI2RlZmluZSBBTFBIQVRFU1QgIituLmFscGhhVGVzdCsobi5hbHBoYVRlc3QlMT8iIjoiLjAiKToiIiwiI2RlZmluZSBHQU1NQV9GQUNUT1IgIitnLG4udXNlRm9nJiZuLmZvZz8iI2RlZmluZSBVU0VfRk9HIjoiIixuLnVzZUZvZyYmbi5mb2dFeHAyPyIjZGVmaW5lIEZPR19FWFAyIjoiIixuLm1hcD8iI2RlZmluZSBVU0VfTUFQIjoiIixuLm1hdGNhcD8iI2RlZmluZSBVU0VfTUFUQ0FQIjoiIixuLmVudk1hcD8iI2RlZmluZSBVU0VfRU5WTUFQIjoiIixuLmVudk1hcD8iI2RlZmluZSAiK3U6IiIsbi5lbnZNYXA/IiNkZWZpbmUgIitkOiIiLG4uZW52TWFwPyIjZGVmaW5lICIrZjoiIixuLmxpZ2h0TWFwPyIjZGVmaW5lIFVTRV9MSUdIVE1BUCI6IiIsbi5hb01hcD8iI2RlZmluZSBVU0VfQU9NQVAiOiIiLG4uZW1pc3NpdmVNYXA/IiNkZWZpbmUgVVNFX0VNSVNTSVZFTUFQIjoiIixuLmJ1bXBNYXA/IiNkZWZpbmUgVVNFX0JVTVBNQVAiOiIiLG4ubm9ybWFsTWFwPyIjZGVmaW5lIFVTRV9OT1JNQUxNQVAiOiIiLG4ubm9ybWFsTWFwJiZuLm9iamVjdFNwYWNlTm9ybWFsTWFwPyIjZGVmaW5lIE9CSkVDVFNQQUNFX05PUk1BTE1BUCI6IiIsbi5ub3JtYWxNYXAmJm4udGFuZ2VudFNwYWNlTm9ybWFsTWFwPyIjZGVmaW5lIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAiOiIiLG4uY2xlYXJjb2F0TWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRNQVAiOiIiLG4uY2xlYXJjb2F0Um91Z2huZXNzTWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRfUk9VR0hORVNTTUFQIjoiIixuLmNsZWFyY29hdE5vcm1hbE1hcD8iI2RlZmluZSBVU0VfQ0xFQVJDT0FUX05PUk1BTE1BUCI6IiIsbi5zcGVjdWxhck1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJNQVAiOiIiLG4ucm91Z2huZXNzTWFwPyIjZGVmaW5lIFVTRV9ST1VHSE5FU1NNQVAiOiIiLG4ubWV0YWxuZXNzTWFwPyIjZGVmaW5lIFVTRV9NRVRBTE5FU1NNQVAiOiIiLG4uYWxwaGFNYXA/IiNkZWZpbmUgVVNFX0FMUEhBTUFQIjoiIixuLnNoZWVuPyIjZGVmaW5lIFVTRV9TSEVFTiI6IiIsbi50cmFuc21pc3Npb25NYXA/IiNkZWZpbmUgVVNFX1RSQU5TTUlTU0lPTk1BUCI6IiIsbi52ZXJ0ZXhUYW5nZW50cz8iI2RlZmluZSBVU0VfVEFOR0VOVCI6IiIsbi52ZXJ0ZXhDb2xvcnN8fG4uaW5zdGFuY2luZ0NvbG9yPyIjZGVmaW5lIFVTRV9DT0xPUiI6IiIsbi52ZXJ0ZXhVdnM/IiNkZWZpbmUgVVNFX1VWIjoiIixuLnV2c1ZlcnRleE9ubHk/IiNkZWZpbmUgVVZTX1ZFUlRFWF9PTkxZIjoiIixuLmdyYWRpZW50TWFwPyIjZGVmaW5lIFVTRV9HUkFESUVOVE1BUCI6IiIsbi5mbGF0U2hhZGluZz8iI2RlZmluZSBGTEFUX1NIQURFRCI6IiIsbi5kb3VibGVTaWRlZD8iI2RlZmluZSBET1VCTEVfU0lERUQiOiIiLG4uZmxpcFNpZGVkPyIjZGVmaW5lIEZMSVBfU0lERUQiOiIiLG4uc2hhZG93TWFwRW5hYmxlZD8iI2RlZmluZSBVU0VfU0hBRE9XTUFQIjoiIixuLnNoYWRvd01hcEVuYWJsZWQ/IiNkZWZpbmUgIitsOiIiLG4ucHJlbXVsdGlwbGllZEFscGhhPyIjZGVmaW5lIFBSRU1VTFRJUExJRURfQUxQSEEiOiIiLG4ucGh5c2ljYWxseUNvcnJlY3RMaWdodHM/IiNkZWZpbmUgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUUyI6IiIsbi5sb2dhcml0aG1pY0RlcHRoQnVmZmVyPyIjZGVmaW5lIFVTRV9MT0dERVBUSEJVRiI6IiIsbi5sb2dhcml0aG1pY0RlcHRoQnVmZmVyJiZuLnJlbmRlcmVyRXh0ZW5zaW9uRnJhZ0RlcHRoPyIjZGVmaW5lIFVTRV9MT0dERVBUSEJVRl9FWFQiOiIiLChuLmV4dGVuc2lvblNoYWRlclRleHR1cmVMT0R8fG4uZW52TWFwKSYmbi5yZW5kZXJlckV4dGVuc2lvblNoYWRlclRleHR1cmVMb2Q/IiNkZWZpbmUgVEVYVFVSRV9MT0RfRVhUIjoiIiwidW5pZm9ybSBtYXQ0IHZpZXdNYXRyaXg7IiwidW5pZm9ybSB2ZWMzIGNhbWVyYVBvc2l0aW9uOyIsInVuaWZvcm0gYm9vbCBpc09ydGhvZ3JhcGhpYzsiLDAhPT1uLnRvbmVNYXBwaW5nPyIjZGVmaW5lIFRPTkVfTUFQUElORyI6IiIsMCE9PW4udG9uZU1hcHBpbmc/RUR0LnRvbmVtYXBwaW5nX3BhcnNfZnJhZ21lbnQ6IiIsMCE9PW4udG9uZU1hcHBpbmc/V0J0KCJ0b25lTWFwcGluZyIsbi50b25lTWFwcGluZyk6IiIsbi5kaXRoZXJpbmc/IiNkZWZpbmUgRElUSEVSSU5HIjoiIixFRHQuZW5jb2RpbmdzX3BhcnNfZnJhZ21lbnQsbi5tYXA/akJ0KCJtYXBUZXhlbFRvTGluZWFyIixuLm1hcEVuY29kaW5nKToiIixuLm1hdGNhcD9qQnQoIm1hdGNhcFRleGVsVG9MaW5lYXIiLG4ubWF0Y2FwRW5jb2RpbmcpOiIiLG4uZW52TWFwP2pCdCgiZW52TWFwVGV4ZWxUb0xpbmVhciIsbi5lbnZNYXBFbmNvZGluZyk6IiIsbi5lbWlzc2l2ZU1hcD9qQnQoImVtaXNzaXZlTWFwVGV4ZWxUb0xpbmVhciIsbi5lbWlzc2l2ZU1hcEVuY29kaW5nKToiIixuLmxpZ2h0TWFwP2pCdCgibGlnaHRNYXBUZXhlbFRvTGluZWFyIixuLmxpZ2h0TWFwRW5jb2RpbmcpOiIiLEdCdCgibGluZWFyVG9PdXRwdXRUZXhlbCIsbi5vdXRwdXRFbmNvZGluZyksbi5kZXB0aFBhY2tpbmc/IiNkZWZpbmUgREVQVEhfUEFDS0lORyAiK24uZGVwdGhQYWNraW5nOiIiLCJcbiJdLmZpbHRlcihxQnQpLmpvaW4oIlxuIikpLGE9S0J0KGEpLGE9WUJ0KGEsbiksYT1YQnQoYSxuKSxzPUtCdChzKSxzPVlCdChzLG4pLHM9WEJ0KHMsbiksYT10SHQoYSkscz10SHQocyksbi5pc1dlYkdMMiYmITAhPT1uLmlzUmF3U2hhZGVyTWF0ZXJpYWwmJihNPSIjdmVyc2lvbiAzMDAgZXNcbiIsdz1bIiNkZWZpbmUgYXR0cmlidXRlIGluIiwiI2RlZmluZSB2YXJ5aW5nIG91dCIsIiNkZWZpbmUgdGV4dHVyZTJEIHRleHR1cmUiXS5qb2luKCJcbiIpKyJcbiIrdyxTPVsiI2RlZmluZSB2YXJ5aW5nIGluIixuLmdsc2xWZXJzaW9uPT09UE90PyIiOiJvdXQgaGlnaHAgdmVjNCBwY19mcmFnQ29sb3I7IixuLmdsc2xWZXJzaW9uPT09UE90PyIiOiIjZGVmaW5lIGdsX0ZyYWdDb2xvciBwY19mcmFnQ29sb3IiLCIjZGVmaW5lIGdsX0ZyYWdEZXB0aEVYVCBnbF9GcmFnRGVwdGgiLCIjZGVmaW5lIHRleHR1cmUyRCB0ZXh0dXJlIiwiI2RlZmluZSB0ZXh0dXJlQ3ViZSB0ZXh0dXJlIiwiI2RlZmluZSB0ZXh0dXJlMkRQcm9qIHRleHR1cmVQcm9qIiwiI2RlZmluZSB0ZXh0dXJlMkRMb2RFWFQgdGV4dHVyZUxvZCIsIiNkZWZpbmUgdGV4dHVyZTJEUHJvakxvZEVYVCB0ZXh0dXJlUHJvakxvZCIsIiNkZWZpbmUgdGV4dHVyZUN1YmVMb2RFWFQgdGV4dHVyZUxvZCIsIiNkZWZpbmUgdGV4dHVyZTJER3JhZEVYVCB0ZXh0dXJlR3JhZCIsIiNkZWZpbmUgdGV4dHVyZTJEUHJvakdyYWRFWFQgdGV4dHVyZVByb2pHcmFkIiwiI2RlZmluZSB0ZXh0dXJlQ3ViZUdyYWRFWFQgdGV4dHVyZUdyYWQiXS5qb2luKCJcbiIpKyJcbiIrUyk7Y29uc3QgRT1NK1MrcyxUPUhCdChyLDM1NjMzLE0rdythKSxDPUhCdChyLDM1NjMyLEUpO2lmKHIuYXR0YWNoU2hhZGVyKHgsVCksci5hdHRhY2hTaGFkZXIoeCxDKSx2b2lkIDAhPT1uLmluZGV4MEF0dHJpYnV0ZU5hbWU/ci5iaW5kQXR0cmliTG9jYXRpb24oeCwwLG4uaW5kZXgwQXR0cmlidXRlTmFtZSk6ITA9PT1uLm1vcnBoVGFyZ2V0cyYmci5iaW5kQXR0cmliTG9jYXRpb24oeCwwLCJwb3NpdGlvbiIpLHIubGlua1Byb2dyYW0oeCksdC5kZWJ1Zy5jaGVja1NoYWRlckVycm9ycyl7Y29uc3QgdD1yLmdldFByb2dyYW1JbmZvTG9nKHgpLnRyaW0oKSxlPXIuZ2V0U2hhZGVySW5mb0xvZyhUKS50cmltKCksbj1yLmdldFNoYWRlckluZm9Mb2coQykudHJpbSgpO2xldCBpPSEwLG89ITA7aWYoITE9PT1yLmdldFByb2dyYW1QYXJhbWV0ZXIoeCwzNTcxNCkpe2k9ITE7Y29uc3QgZT1VQnQocixULCJ2ZXJ0ZXgiKSxuPVVCdChyLEMsImZyYWdtZW50Iik7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xQcm9ncmFtOiBzaGFkZXIgZXJyb3I6ICIsci5nZXRFcnJvcigpLCIzNTcxNSIsci5nZXRQcm9ncmFtUGFyYW1ldGVyKHgsMzU3MTUpLCJnbC5nZXRQcm9ncmFtSW5mb0xvZyIsdCxlLG4pfWVsc2UiIiE9PXQ/Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW06IGdsLmdldFByb2dyYW1JbmZvTG9nKCkiLHQpOiIiIT09ZSYmIiIhPT1ufHwobz0hMSk7byYmKHRoaXMuZGlhZ25vc3RpY3M9e3J1bm5hYmxlOmkscHJvZ3JhbUxvZzp0LHZlcnRleFNoYWRlcjp7bG9nOmUscHJlZml4Ond9LGZyYWdtZW50U2hhZGVyOntsb2c6bixwcmVmaXg6U319KX1sZXQgQSxrO3JldHVybiByLmRlbGV0ZVNoYWRlcihUKSxyLmRlbGV0ZVNoYWRlcihDKSx0aGlzLmdldFVuaWZvcm1zPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PUEmJihBPW5ldyBCQnQocix4KSksQX0sdGhpcy5nZXRBdHRyaWJ1dGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PWsmJihrPShmdW5jdGlvbiB0KGUsbil7Y29uc3QgaT17fSxyPWUuZ2V0UHJvZ3JhbVBhcmFtZXRlcihuLDM1NzIxKTtmb3IobGV0IHQ9MDt0PHI7dCsrKXtjb25zdCByPWUuZ2V0QWN0aXZlQXR0cmliKG4sdCkubmFtZTtpW3JdPWUuZ2V0QXR0cmliTG9jYXRpb24obixyKX1yZXR1cm4gaX0pKHIseCkpLGt9LHRoaXMuZGVzdHJveT1mdW5jdGlvbigpe2kucmVsZWFzZVN0YXRlc09mUHJvZ3JhbSh0aGlzKSxyLmRlbGV0ZVByb2dyYW0oeCksdGhpcy5wcm9ncmFtPXZvaWQgMH0sdGhpcy5uYW1lPW4uc2hhZGVyTmFtZSx0aGlzLmlkPUZCdCsrLHRoaXMuY2FjaGVLZXk9ZSx0aGlzLnVzZWRUaW1lcz0xLHRoaXMucHJvZ3JhbT14LHRoaXMudmVydGV4U2hhZGVyPVQsdGhpcy5mcmFnbWVudFNoYWRlcj1DLHRoaXN9ZnVuY3Rpb24gb0h0KHQsZSxuLGkscixvKXtjb25zdCBhPVtdLHM9aS5pc1dlYkdMMixsPWkubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcixjPWkuZmxvYXRWZXJ0ZXhUZXh0dXJlcyx1PWkubWF4VmVydGV4VW5pZm9ybXMsaD1pLnZlcnRleFRleHR1cmVzO2xldCBkPWkucHJlY2lzaW9uO2NvbnN0IHA9e01lc2hEZXB0aE1hdGVyaWFsOiJkZXB0aCIsTWVzaERpc3RhbmNlTWF0ZXJpYWw6ImRpc3RhbmNlUkdCQSIsTWVzaE5vcm1hbE1hdGVyaWFsOiJub3JtYWwiLE1lc2hCYXNpY01hdGVyaWFsOiJiYXNpYyIsTWVzaExhbWJlcnRNYXRlcmlhbDoibGFtYmVydCIsTWVzaFBob25nTWF0ZXJpYWw6InBob25nIixNZXNoVG9vbk1hdGVyaWFsOiJ0b29uIixNZXNoU3RhbmRhcmRNYXRlcmlhbDoicGh5c2ljYWwiLE1lc2hQaHlzaWNhbE1hdGVyaWFsOiJwaHlzaWNhbCIsTWVzaE1hdGNhcE1hdGVyaWFsOiJtYXRjYXAiLExpbmVCYXNpY01hdGVyaWFsOiJiYXNpYyIsTGluZURhc2hlZE1hdGVyaWFsOiJkYXNoZWQiLFBvaW50c01hdGVyaWFsOiJwb2ludHMiLFNoYWRvd01hdGVyaWFsOiJzaGFkb3ciLFNwcml0ZU1hdGVyaWFsOiJzcHJpdGUifSxmPVsicHJlY2lzaW9uIiwiaXNXZWJHTDIiLCJzdXBwb3J0c1ZlcnRleFRleHR1cmVzIiwib3V0cHV0RW5jb2RpbmciLCJpbnN0YW5jaW5nIiwiaW5zdGFuY2luZ0NvbG9yIiwibWFwIiwibWFwRW5jb2RpbmciLCJtYXRjYXAiLCJtYXRjYXBFbmNvZGluZyIsImVudk1hcCIsImVudk1hcE1vZGUiLCJlbnZNYXBFbmNvZGluZyIsImVudk1hcEN1YmVVViIsImxpZ2h0TWFwIiwibGlnaHRNYXBFbmNvZGluZyIsImFvTWFwIiwiZW1pc3NpdmVNYXAiLCJlbWlzc2l2ZU1hcEVuY29kaW5nIiwiYnVtcE1hcCIsIm5vcm1hbE1hcCIsIm9iamVjdFNwYWNlTm9ybWFsTWFwIiwidGFuZ2VudFNwYWNlTm9ybWFsTWFwIiwiY2xlYXJjb2F0TWFwIiwiY2xlYXJjb2F0Um91Z2huZXNzTWFwIiwiY2xlYXJjb2F0Tm9ybWFsTWFwIiwiZGlzcGxhY2VtZW50TWFwIiwic3BlY3VsYXJNYXAiLCJyb3VnaG5lc3NNYXAiLCJtZXRhbG5lc3NNYXAiLCJncmFkaWVudE1hcCIsImFscGhhTWFwIiwiY29tYmluZSIsInZlcnRleENvbG9ycyIsInZlcnRleFRhbmdlbnRzIiwidmVydGV4VXZzIiwidXZzVmVydGV4T25seSIsImZvZyIsInVzZUZvZyIsImZvZ0V4cDIiLCJmbGF0U2hhZGluZyIsInNpemVBdHRlbnVhdGlvbiIsImxvZ2FyaXRobWljRGVwdGhCdWZmZXIiLCJza2lubmluZyIsIm1heEJvbmVzIiwidXNlVmVydGV4VGV4dHVyZSIsIm1vcnBoVGFyZ2V0cyIsIm1vcnBoTm9ybWFscyIsIm1heE1vcnBoVGFyZ2V0cyIsIm1heE1vcnBoTm9ybWFscyIsInByZW11bHRpcGxpZWRBbHBoYSIsIm51bURpckxpZ2h0cyIsIm51bVBvaW50TGlnaHRzIiwibnVtU3BvdExpZ2h0cyIsIm51bUhlbWlMaWdodHMiLCJudW1SZWN0QXJlYUxpZ2h0cyIsIm51bURpckxpZ2h0U2hhZG93cyIsIm51bVBvaW50TGlnaHRTaGFkb3dzIiwibnVtU3BvdExpZ2h0U2hhZG93cyIsInNoYWRvd01hcEVuYWJsZWQiLCJzaGFkb3dNYXBUeXBlIiwidG9uZU1hcHBpbmciLCJwaHlzaWNhbGx5Q29ycmVjdExpZ2h0cyIsImFscGhhVGVzdCIsImRvdWJsZVNpZGVkIiwiZmxpcFNpZGVkIiwibnVtQ2xpcHBpbmdQbGFuZXMiLCJudW1DbGlwSW50ZXJzZWN0aW9uIiwiZGVwdGhQYWNraW5nIiwiZGl0aGVyaW5nIiwic2hlZW4iLCJ0cmFuc21pc3Npb25NYXAiXTtmdW5jdGlvbiBtKHQpe2xldCBlO3JldHVybiB0JiZ0LmlzVGV4dHVyZT9lPXQuZW5jb2Rpbmc6dCYmdC5pc1dlYkdMUmVuZGVyVGFyZ2V0Pyhjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUHJvZ3JhbXMuZ2V0VGV4dHVyZUVuY29kaW5nRnJvbU1hcDogZG9uJ3QgdXNlIHJlbmRlciB0YXJnZXRzIGFzIHRleHR1cmVzLiBVc2UgdGhlaXIgLnRleHR1cmUgcHJvcGVydHkgaW5zdGVhZC4iKSxlPXQudGV4dHVyZS5lbmNvZGluZyk6ZT14T3QsZX1yZXR1cm57Z2V0UGFyYW1ldGVyczpmdW5jdGlvbiBnKHIsYSxmLF8seSl7Y29uc3Qgdj1fLmZvZyxiPWUuZ2V0KHIuZW52TWFwfHwoci5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP18uZW52aXJvbm1lbnQ6bnVsbCkpLHg9cFtyLnR5cGVdLHc9eS5pc1NraW5uZWRNZXNoPyhmdW5jdGlvbiBTKHQpe2NvbnN0IGU9dC5za2VsZXRvbi5ib25lcztpZihjKXJldHVybiAxMDI0O3tjb25zdCB0PU1hdGguZmxvb3IoKHUtMjApLzQpLG49TWF0aC5taW4odCxlLmxlbmd0aCk7cmV0dXJuIG48ZS5sZW5ndGg/KGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogU2tlbGV0b24gaGFzICIrZS5sZW5ndGgrIiBib25lcy4gVGhpcyBHUFUgc3VwcG9ydHMgIituKyIuIiksMCk6bn19KSh5KTowO2xldCBNLEU7aWYobnVsbCE9PXIucHJlY2lzaW9uJiYoZD1pLmdldE1heFByZWNpc2lvbihyLnByZWNpc2lvbiksZCE9PXIucHJlY2lzaW9uJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUHJvZ3JhbS5nZXRQYXJhbWV0ZXJzOiIsci5wcmVjaXNpb24sIm5vdCBzdXBwb3J0ZWQsIHVzaW5nIixkLCJpbnN0ZWFkLiIpKSx4KXtjb25zdCB0PUNEdFt4XTtNPXQudmVydGV4U2hhZGVyLEU9dC5mcmFnbWVudFNoYWRlcn1lbHNlIE09ci52ZXJ0ZXhTaGFkZXIsRT1yLmZyYWdtZW50U2hhZGVyO2NvbnN0IFQ9dC5nZXRSZW5kZXJUYXJnZXQoKTtyZXR1cm57aXNXZWJHTDI6cyxzaGFkZXJJRDp4LHNoYWRlck5hbWU6ci50eXBlLHZlcnRleFNoYWRlcjpNLGZyYWdtZW50U2hhZGVyOkUsZGVmaW5lczpyLmRlZmluZXMsaXNSYXdTaGFkZXJNYXRlcmlhbDohMD09PXIuaXNSYXdTaGFkZXJNYXRlcmlhbCxnbHNsVmVyc2lvbjpyLmdsc2xWZXJzaW9uLHByZWNpc2lvbjpkLGluc3RhbmNpbmc6ITA9PT15LmlzSW5zdGFuY2VkTWVzaCxpbnN0YW5jaW5nQ29sb3I6ITA9PT15LmlzSW5zdGFuY2VkTWVzaCYmbnVsbCE9PXkuaW5zdGFuY2VDb2xvcixzdXBwb3J0c1ZlcnRleFRleHR1cmVzOmgsb3V0cHV0RW5jb2Rpbmc6bnVsbCE9PVQ/bShULnRleHR1cmUpOnQub3V0cHV0RW5jb2RpbmcsbWFwOiEhci5tYXAsbWFwRW5jb2Rpbmc6bShyLm1hcCksbWF0Y2FwOiEhci5tYXRjYXAsbWF0Y2FwRW5jb2Rpbmc6bShyLm1hdGNhcCksZW52TWFwOiEhYixlbnZNYXBNb2RlOmImJmIubWFwcGluZyxlbnZNYXBFbmNvZGluZzptKGIpLGVudk1hcEN1YmVVVjohIWImJihiLm1hcHBpbmc9PT16SXR8fGIubWFwcGluZz09PURJdCksbGlnaHRNYXA6ISFyLmxpZ2h0TWFwLGxpZ2h0TWFwRW5jb2Rpbmc6bShyLmxpZ2h0TWFwKSxhb01hcDohIXIuYW9NYXAsZW1pc3NpdmVNYXA6ISFyLmVtaXNzaXZlTWFwLGVtaXNzaXZlTWFwRW5jb2Rpbmc6bShyLmVtaXNzaXZlTWFwKSxidW1wTWFwOiEhci5idW1wTWFwLG5vcm1hbE1hcDohIXIubm9ybWFsTWFwLG9iamVjdFNwYWNlTm9ybWFsTWFwOjE9PT1yLm5vcm1hbE1hcFR5cGUsdGFuZ2VudFNwYWNlTm9ybWFsTWFwOjA9PT1yLm5vcm1hbE1hcFR5cGUsY2xlYXJjb2F0TWFwOiEhci5jbGVhcmNvYXRNYXAsY2xlYXJjb2F0Um91Z2huZXNzTWFwOiEhci5jbGVhcmNvYXRSb3VnaG5lc3NNYXAsY2xlYXJjb2F0Tm9ybWFsTWFwOiEhci5jbGVhcmNvYXROb3JtYWxNYXAsZGlzcGxhY2VtZW50TWFwOiEhci5kaXNwbGFjZW1lbnRNYXAscm91Z2huZXNzTWFwOiEhci5yb3VnaG5lc3NNYXAsbWV0YWxuZXNzTWFwOiEhci5tZXRhbG5lc3NNYXAsc3BlY3VsYXJNYXA6ISFyLnNwZWN1bGFyTWFwLGFscGhhTWFwOiEhci5hbHBoYU1hcCxncmFkaWVudE1hcDohIXIuZ3JhZGllbnRNYXAsc2hlZW46ISFyLnNoZWVuLHRyYW5zbWlzc2lvbk1hcDohIXIudHJhbnNtaXNzaW9uTWFwLGNvbWJpbmU6ci5jb21iaW5lLHZlcnRleFRhbmdlbnRzOnIubm9ybWFsTWFwJiZyLnZlcnRleFRhbmdlbnRzLHZlcnRleENvbG9yczpyLnZlcnRleENvbG9ycyx2ZXJ0ZXhVdnM6ISEoci5tYXB8fHIuYnVtcE1hcHx8ci5ub3JtYWxNYXB8fHIuc3BlY3VsYXJNYXB8fHIuYWxwaGFNYXB8fHIuZW1pc3NpdmVNYXB8fHIucm91Z2huZXNzTWFwfHxyLm1ldGFsbmVzc01hcHx8ci5jbGVhcmNvYXRNYXB8fHIuY2xlYXJjb2F0Um91Z2huZXNzTWFwfHxyLmNsZWFyY29hdE5vcm1hbE1hcHx8ci5kaXNwbGFjZW1lbnRNYXB8fHIudHJhbnNtaXNzaW9uTWFwKSx1dnNWZXJ0ZXhPbmx5OiEoci5tYXB8fHIuYnVtcE1hcHx8ci5ub3JtYWxNYXB8fHIuc3BlY3VsYXJNYXB8fHIuYWxwaGFNYXB8fHIuZW1pc3NpdmVNYXB8fHIucm91Z2huZXNzTWFwfHxyLm1ldGFsbmVzc01hcHx8ci5jbGVhcmNvYXROb3JtYWxNYXB8fHIudHJhbnNtaXNzaW9uTWFwfHwhci5kaXNwbGFjZW1lbnRNYXApLGZvZzohIXYsdXNlRm9nOnIuZm9nLGZvZ0V4cDI6diYmdi5pc0ZvZ0V4cDIsZmxhdFNoYWRpbmc6ci5mbGF0U2hhZGluZyxzaXplQXR0ZW51YXRpb246ci5zaXplQXR0ZW51YXRpb24sbG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcjpsLHNraW5uaW5nOnIuc2tpbm5pbmcmJnc+MCxtYXhCb25lczp3LHVzZVZlcnRleFRleHR1cmU6Yyxtb3JwaFRhcmdldHM6ci5tb3JwaFRhcmdldHMsbW9ycGhOb3JtYWxzOnIubW9ycGhOb3JtYWxzLG1heE1vcnBoVGFyZ2V0czp0Lm1heE1vcnBoVGFyZ2V0cyxtYXhNb3JwaE5vcm1hbHM6dC5tYXhNb3JwaE5vcm1hbHMsbnVtRGlyTGlnaHRzOmEuZGlyZWN0aW9uYWwubGVuZ3RoLG51bVBvaW50TGlnaHRzOmEucG9pbnQubGVuZ3RoLG51bVNwb3RMaWdodHM6YS5zcG90Lmxlbmd0aCxudW1SZWN0QXJlYUxpZ2h0czphLnJlY3RBcmVhLmxlbmd0aCxudW1IZW1pTGlnaHRzOmEuaGVtaS5sZW5ndGgsbnVtRGlyTGlnaHRTaGFkb3dzOmEuZGlyZWN0aW9uYWxTaGFkb3dNYXAubGVuZ3RoLG51bVBvaW50TGlnaHRTaGFkb3dzOmEucG9pbnRTaGFkb3dNYXAubGVuZ3RoLG51bVNwb3RMaWdodFNoYWRvd3M6YS5zcG90U2hhZG93TWFwLmxlbmd0aCxudW1DbGlwcGluZ1BsYW5lczpvLm51bVBsYW5lcyxudW1DbGlwSW50ZXJzZWN0aW9uOm8ubnVtSW50ZXJzZWN0aW9uLGRpdGhlcmluZzpyLmRpdGhlcmluZyxzaGFkb3dNYXBFbmFibGVkOnQuc2hhZG93TWFwLmVuYWJsZWQmJmYubGVuZ3RoPjAsc2hhZG93TWFwVHlwZTp0LnNoYWRvd01hcC50eXBlLHRvbmVNYXBwaW5nOnIudG9uZU1hcHBlZD90LnRvbmVNYXBwaW5nOjAscGh5c2ljYWxseUNvcnJlY3RMaWdodHM6dC5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cyxwcmVtdWx0aXBsaWVkQWxwaGE6ci5wcmVtdWx0aXBsaWVkQWxwaGEsYWxwaGFUZXN0OnIuYWxwaGFUZXN0LGRvdWJsZVNpZGVkOjI9PT1yLnNpZGUsZmxpcFNpZGVkOjE9PT1yLnNpZGUsZGVwdGhQYWNraW5nOnZvaWQgMCE9PXIuZGVwdGhQYWNraW5nJiZyLmRlcHRoUGFja2luZyxpbmRleDBBdHRyaWJ1dGVOYW1lOnIuaW5kZXgwQXR0cmlidXRlTmFtZSxleHRlbnNpb25EZXJpdmF0aXZlczpyLmV4dGVuc2lvbnMmJnIuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlcyxleHRlbnNpb25GcmFnRGVwdGg6ci5leHRlbnNpb25zJiZyLmV4dGVuc2lvbnMuZnJhZ0RlcHRoLGV4dGVuc2lvbkRyYXdCdWZmZXJzOnIuZXh0ZW5zaW9ucyYmci5leHRlbnNpb25zLmRyYXdCdWZmZXJzLGV4dGVuc2lvblNoYWRlclRleHR1cmVMT0Q6ci5leHRlbnNpb25zJiZyLmV4dGVuc2lvbnMuc2hhZGVyVGV4dHVyZUxPRCxyZW5kZXJlckV4dGVuc2lvbkZyYWdEZXB0aDpzfHxuLmhhcygiRVhUX2ZyYWdfZGVwdGgiKSxyZW5kZXJlckV4dGVuc2lvbkRyYXdCdWZmZXJzOnN8fG4uaGFzKCJXRUJHTF9kcmF3X2J1ZmZlcnMiKSxyZW5kZXJlckV4dGVuc2lvblNoYWRlclRleHR1cmVMb2Q6c3x8bi5oYXMoIkVYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKSxjdXN0b21Qcm9ncmFtQ2FjaGVLZXk6ci5jdXN0b21Qcm9ncmFtQ2FjaGVLZXkoKX19LGdldFByb2dyYW1DYWNoZUtleTpmdW5jdGlvbiBfKGUpe2NvbnN0IG49W107aWYoZS5zaGFkZXJJRD9uLnB1c2goZS5zaGFkZXJJRCk6KG4ucHVzaChlLmZyYWdtZW50U2hhZGVyKSxuLnB1c2goZS52ZXJ0ZXhTaGFkZXIpKSx2b2lkIDAhPT1lLmRlZmluZXMpZm9yKGNvbnN0IHQgaW4gZS5kZWZpbmVzKW4ucHVzaCh0KSxuLnB1c2goZS5kZWZpbmVzW3RdKTtpZighMT09PWUuaXNSYXdTaGFkZXJNYXRlcmlhbCl7Zm9yKGxldCB0PTA7dDxmLmxlbmd0aDt0Kyspbi5wdXNoKGVbZlt0XV0pO24ucHVzaCh0Lm91dHB1dEVuY29kaW5nKSxuLnB1c2godC5nYW1tYUZhY3Rvcil9cmV0dXJuIG4ucHVzaChlLmN1c3RvbVByb2dyYW1DYWNoZUtleSksbi5qb2luKCl9LGdldFVuaWZvcm1zOmZ1bmN0aW9uIHkodCl7Y29uc3QgZT1wW3QudHlwZV07bGV0IG47cmV0dXJuIG49ZT91RHQuY2xvbmUoQ0R0W2VdLnVuaWZvcm1zKTp0LnVuaWZvcm1zLG59LGFjcXVpcmVQcm9ncmFtOmZ1bmN0aW9uIHYoZSxuKXtsZXQgaTtmb3IobGV0IHQ9MCxlPWEubGVuZ3RoO3Q8ZTt0Kyspe2NvbnN0IGU9YVt0XTtpZihlLmNhY2hlS2V5PT09bil7aT1lLCsraS51c2VkVGltZXM7YnJlYWt9fXJldHVybiB2b2lkIDA9PT1pJiYoaT1uZXcgckh0KHQsbixlLHIpLGEucHVzaChpKSksaX0scmVsZWFzZVByb2dyYW06ZnVuY3Rpb24gYih0KXtpZigwPT0tLXQudXNlZFRpbWVzKXtjb25zdCBlPWEuaW5kZXhPZih0KTthW2VdPWFbYS5sZW5ndGgtMV0sYS5wb3AoKSx0LmRlc3Ryb3koKX19LHByb2dyYW1zOmF9fWZ1bmN0aW9uIGFIdCgpe2xldCB0PW5ldyBXZWFrTWFwO3JldHVybntnZXQ6ZnVuY3Rpb24gZShuKXtsZXQgaT10LmdldChuKTtyZXR1cm4gdm9pZCAwPT09aSYmKGk9e30sdC5zZXQobixpKSksaX0scmVtb3ZlOmZ1bmN0aW9uIG4oZSl7dC5kZWxldGUoZSl9LHVwZGF0ZTpmdW5jdGlvbiBpKGUsbixyKXt0LmdldChlKVtuXT1yfSxkaXNwb3NlOmZ1bmN0aW9uIHIoKXt0PW5ldyBXZWFrTWFwfX19ZnVuY3Rpb24gc0h0KHQsZSl7cmV0dXJuIHQuZ3JvdXBPcmRlciE9PWUuZ3JvdXBPcmRlcj90Lmdyb3VwT3JkZXItZS5ncm91cE9yZGVyOnQucmVuZGVyT3JkZXIhPT1lLnJlbmRlck9yZGVyP3QucmVuZGVyT3JkZXItZS5yZW5kZXJPcmRlcjp0LnByb2dyYW0hPT1lLnByb2dyYW0/dC5wcm9ncmFtLmlkLWUucHJvZ3JhbS5pZDp0Lm1hdGVyaWFsLmlkIT09ZS5tYXRlcmlhbC5pZD90Lm1hdGVyaWFsLmlkLWUubWF0ZXJpYWwuaWQ6dC56IT09ZS56P3Quei1lLno6dC5pZC1lLmlkfWZ1bmN0aW9uIGxIdCh0LGUpe3JldHVybiB0Lmdyb3VwT3JkZXIhPT1lLmdyb3VwT3JkZXI/dC5ncm91cE9yZGVyLWUuZ3JvdXBPcmRlcjp0LnJlbmRlck9yZGVyIT09ZS5yZW5kZXJPcmRlcj90LnJlbmRlck9yZGVyLWUucmVuZGVyT3JkZXI6dC56IT09ZS56P2Uuei10Lno6dC5pZC1lLmlkfWZ1bmN0aW9uIGNIdCh0KXtjb25zdCBlPVtdO2xldCBuPTA7Y29uc3QgaT1bXSxyPVtdLG89e2lkOi0xfTtmdW5jdGlvbiBhKGkscixhLHMsbCxjKXtsZXQgdT1lW25dO2NvbnN0IGg9dC5nZXQoYSk7cmV0dXJuIHZvaWQgMD09PXU/KHU9e2lkOmkuaWQsb2JqZWN0OmksZ2VvbWV0cnk6cixtYXRlcmlhbDphLHByb2dyYW06aC5wcm9ncmFtfHxvLGdyb3VwT3JkZXI6cyxyZW5kZXJPcmRlcjppLnJlbmRlck9yZGVyLHo6bCxncm91cDpjfSxlW25dPXUpOih1LmlkPWkuaWQsdS5vYmplY3Q9aSx1Lmdlb21ldHJ5PXIsdS5tYXRlcmlhbD1hLHUucHJvZ3JhbT1oLnByb2dyYW18fG8sdS5ncm91cE9yZGVyPXMsdS5yZW5kZXJPcmRlcj1pLnJlbmRlck9yZGVyLHUuej1sLHUuZ3JvdXA9YyksbisrLHV9cmV0dXJue29wYXF1ZTppLHRyYW5zcGFyZW50OnIsaW5pdDpmdW5jdGlvbiBzKCl7bj0wLGkubGVuZ3RoPTAsci5sZW5ndGg9MH0scHVzaDpmdW5jdGlvbiBsKHQsZSxuLG8scyxjKXtjb25zdCB1PWEodCxlLG4sbyxzLGMpOyghMD09PW4udHJhbnNwYXJlbnQ/cjppKS5wdXNoKHUpfSx1bnNoaWZ0OmZ1bmN0aW9uIGModCxlLG4sbyxzLGwpe2NvbnN0IGM9YSh0LGUsbixvLHMsbCk7KCEwPT09bi50cmFuc3BhcmVudD9yOmkpLnVuc2hpZnQoYyl9LGZpbmlzaDpmdW5jdGlvbiB1KCl7Zm9yKGxldCB0PW4saT1lLmxlbmd0aDt0PGk7dCsrKXtjb25zdCBuPWVbdF07aWYobnVsbD09PW4uaWQpYnJlYWs7bi5pZD1udWxsLG4ub2JqZWN0PW51bGwsbi5nZW9tZXRyeT1udWxsLG4ubWF0ZXJpYWw9bnVsbCxuLnByb2dyYW09bnVsbCxuLmdyb3VwPW51bGx9fSxzb3J0OmZ1bmN0aW9uIGgodCxlKXtpLmxlbmd0aD4xJiZpLnNvcnQodHx8c0h0KSxyLmxlbmd0aD4xJiZyLnNvcnQoZXx8bEh0KX19fWZ1bmN0aW9uIHVIdCh0KXtsZXQgZT1uZXcgV2Vha01hcDtyZXR1cm57Z2V0OmZ1bmN0aW9uIG4oaSxyKXtjb25zdCBvPWUuZ2V0KGkpO2xldCBhO3JldHVybiB2b2lkIDA9PT1vPyhhPW5ldyBjSHQodCksZS5zZXQoaSxuZXcgV2Vha01hcCksZS5nZXQoaSkuc2V0KHIsYSkpOihhPW8uZ2V0KHIpLHZvaWQgMD09PWEmJihhPW5ldyBjSHQodCksby5zZXQocixhKSkpLGF9LGRpc3Bvc2U6ZnVuY3Rpb24gaSgpe2U9bmV3IFdlYWtNYXB9fX1mdW5jdGlvbiBoSHQoKXtjb25zdCB0PXt9O3JldHVybntnZXQ6ZnVuY3Rpb24oZSl7aWYodm9pZCAwIT09dFtlLmlkXSlyZXR1cm4gdFtlLmlkXTtsZXQgbjtzd2l0Y2goZS50eXBlKXtjYXNlIkRpcmVjdGlvbmFsTGlnaHQiOm49e2RpcmVjdGlvbjpuZXcgcU90LGNvbG9yOm5ldyBwenR9O2JyZWFrO2Nhc2UiU3BvdExpZ2h0IjpuPXtwb3NpdGlvbjpuZXcgcU90LGRpcmVjdGlvbjpuZXcgcU90LGNvbG9yOm5ldyBwenQsZGlzdGFuY2U6MCxjb25lQ29zOjAscGVudW1icmFDb3M6MCxkZWNheTowfTticmVhaztjYXNlIlBvaW50TGlnaHQiOm49e3Bvc2l0aW9uOm5ldyBxT3QsY29sb3I6bmV3IHB6dCxkaXN0YW5jZTowLGRlY2F5OjB9O2JyZWFrO2Nhc2UiSGVtaXNwaGVyZUxpZ2h0IjpuPXtkaXJlY3Rpb246bmV3IHFPdCxza3lDb2xvcjpuZXcgcHp0LGdyb3VuZENvbG9yOm5ldyBwenR9O2JyZWFrO2Nhc2UiUmVjdEFyZWFMaWdodCI6bj17Y29sb3I6bmV3IHB6dCxwb3NpdGlvbjpuZXcgcU90LGhhbGZXaWR0aDpuZXcgcU90LGhhbGZIZWlnaHQ6bmV3IHFPdH19cmV0dXJuIHRbZS5pZF09bixufX19bGV0IGRIdD0wO2Z1bmN0aW9uIHBIdCh0LGUpe3JldHVybihlLmNhc3RTaGFkb3c/MTowKS0odC5jYXN0U2hhZG93PzE6MCl9ZnVuY3Rpb24gZkh0KHQsZSl7Y29uc3Qgbj1uZXcgaEh0LGk9KGZ1bmN0aW9uIHIoKXtjb25zdCB0PXt9O3JldHVybntnZXQ6ZnVuY3Rpb24oZSl7aWYodm9pZCAwIT09dFtlLmlkXSlyZXR1cm4gdFtlLmlkXTtsZXQgbjtzd2l0Y2goZS50eXBlKXtjYXNlIkRpcmVjdGlvbmFsTGlnaHQiOmNhc2UiU3BvdExpZ2h0IjpuPXtzaGFkb3dCaWFzOjAsc2hhZG93Tm9ybWFsQmlhczowLHNoYWRvd1JhZGl1czoxLHNoYWRvd01hcFNpemU6bmV3IHpPdH07YnJlYWs7Y2FzZSJQb2ludExpZ2h0IjpuPXtzaGFkb3dCaWFzOjAsc2hhZG93Tm9ybWFsQmlhczowLHNoYWRvd1JhZGl1czoxLHNoYWRvd01hcFNpemU6bmV3IHpPdCxzaGFkb3dDYW1lcmFOZWFyOjEsc2hhZG93Q2FtZXJhRmFyOjFlM319cmV0dXJuIHRbZS5pZF09bixufX19KSgpLG89e3ZlcnNpb246MCxoYXNoOntkaXJlY3Rpb25hbExlbmd0aDotMSxwb2ludExlbmd0aDotMSxzcG90TGVuZ3RoOi0xLHJlY3RBcmVhTGVuZ3RoOi0xLGhlbWlMZW5ndGg6LTEsbnVtRGlyZWN0aW9uYWxTaGFkb3dzOi0xLG51bVBvaW50U2hhZG93czotMSxudW1TcG90U2hhZG93czotMX0sYW1iaWVudDpbMCwwLDBdLHByb2JlOltdLGRpcmVjdGlvbmFsOltdLGRpcmVjdGlvbmFsU2hhZG93OltdLGRpcmVjdGlvbmFsU2hhZG93TWFwOltdLGRpcmVjdGlvbmFsU2hhZG93TWF0cml4OltdLHNwb3Q6W10sc3BvdFNoYWRvdzpbXSxzcG90U2hhZG93TWFwOltdLHNwb3RTaGFkb3dNYXRyaXg6W10scmVjdEFyZWE6W10scmVjdEFyZWFMVEMxOm51bGwscmVjdEFyZWFMVEMyOm51bGwscG9pbnQ6W10scG9pbnRTaGFkb3c6W10scG9pbnRTaGFkb3dNYXA6W10scG9pbnRTaGFkb3dNYXRyaXg6W10saGVtaTpbXX07Zm9yKGxldCB0PTA7dDw5O3QrKylvLnByb2JlLnB1c2gobmV3IHFPdCk7Y29uc3QgYT1uZXcgcU90LHM9bmV3IGJSdCxsPW5ldyBiUnQ7cmV0dXJue3NldHVwOmZ1bmN0aW9uIGMocil7bGV0IGE9MCxzPTAsbD0wO2ZvcihsZXQgdD0wO3Q8OTt0Kyspby5wcm9iZVt0XS5zZXQoMCwwLDApO2xldCBjPTAsdT0wLGg9MCxkPTAscD0wLGY9MCxtPTAsZz0wO3Iuc29ydChwSHQpO2ZvcihsZXQgdD0wLGU9ci5sZW5ndGg7dDxlO3QrKyl7Y29uc3QgZT1yW3RdLF89ZS5jb2xvcix5PWUuaW50ZW5zaXR5LHY9ZS5kaXN0YW5jZSxiPWUuc2hhZG93JiZlLnNoYWRvdy5tYXA/ZS5zaGFkb3cubWFwLnRleHR1cmU6bnVsbDtpZihlLmlzQW1iaWVudExpZ2h0KWErPV8ucip5LHMrPV8uZyp5LGwrPV8uYip5O2Vsc2UgaWYoZS5pc0xpZ2h0UHJvYmUpZm9yKGxldCB0PTA7dDw5O3QrKylvLnByb2JlW3RdLmFkZFNjYWxlZFZlY3RvcihlLnNoLmNvZWZmaWNpZW50c1t0XSx5KTtlbHNlIGlmKGUuaXNEaXJlY3Rpb25hbExpZ2h0KXtjb25zdCB0PW4uZ2V0KGUpO2lmKHQuY29sb3IuY29weShlLmNvbG9yKS5tdWx0aXBseVNjYWxhcihlLmludGVuc2l0eSksZS5jYXN0U2hhZG93KXtjb25zdCB0PWUuc2hhZG93LG49aS5nZXQoZSk7bi5zaGFkb3dCaWFzPXQuYmlhcyxuLnNoYWRvd05vcm1hbEJpYXM9dC5ub3JtYWxCaWFzLG4uc2hhZG93UmFkaXVzPXQucmFkaXVzLG4uc2hhZG93TWFwU2l6ZT10Lm1hcFNpemUsby5kaXJlY3Rpb25hbFNoYWRvd1tjXT1uLG8uZGlyZWN0aW9uYWxTaGFkb3dNYXBbY109YixvLmRpcmVjdGlvbmFsU2hhZG93TWF0cml4W2NdPWUuc2hhZG93Lm1hdHJpeCxmKyt9by5kaXJlY3Rpb25hbFtjXT10LGMrK31lbHNlIGlmKGUuaXNTcG90TGlnaHQpe2NvbnN0IHQ9bi5nZXQoZSk7aWYodC5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oZS5tYXRyaXhXb3JsZCksdC5jb2xvci5jb3B5KF8pLm11bHRpcGx5U2NhbGFyKHkpLHQuZGlzdGFuY2U9dix0LmNvbmVDb3M9TWF0aC5jb3MoZS5hbmdsZSksdC5wZW51bWJyYUNvcz1NYXRoLmNvcyhlLmFuZ2xlKigxLWUucGVudW1icmEpKSx0LmRlY2F5PWUuZGVjYXksZS5jYXN0U2hhZG93KXtjb25zdCB0PWUuc2hhZG93LG49aS5nZXQoZSk7bi5zaGFkb3dCaWFzPXQuYmlhcyxuLnNoYWRvd05vcm1hbEJpYXM9dC5ub3JtYWxCaWFzLG4uc2hhZG93UmFkaXVzPXQucmFkaXVzLG4uc2hhZG93TWFwU2l6ZT10Lm1hcFNpemUsby5zcG90U2hhZG93W2hdPW4sby5zcG90U2hhZG93TWFwW2hdPWIsby5zcG90U2hhZG93TWF0cml4W2hdPWUuc2hhZG93Lm1hdHJpeCxnKyt9by5zcG90W2hdPXQsaCsrfWVsc2UgaWYoZS5pc1JlY3RBcmVhTGlnaHQpe2NvbnN0IHQ9bi5nZXQoZSk7dC5jb2xvci5jb3B5KF8pLm11bHRpcGx5U2NhbGFyKHkpLHQuaGFsZldpZHRoLnNldCguNSplLndpZHRoLDAsMCksdC5oYWxmSGVpZ2h0LnNldCgwLC41KmUuaGVpZ2h0LDApLG8ucmVjdEFyZWFbZF09dCxkKyt9ZWxzZSBpZihlLmlzUG9pbnRMaWdodCl7Y29uc3QgdD1uLmdldChlKTtpZih0LmNvbG9yLmNvcHkoZS5jb2xvcikubXVsdGlwbHlTY2FsYXIoZS5pbnRlbnNpdHkpLHQuZGlzdGFuY2U9ZS5kaXN0YW5jZSx0LmRlY2F5PWUuZGVjYXksZS5jYXN0U2hhZG93KXtjb25zdCB0PWUuc2hhZG93LG49aS5nZXQoZSk7bi5zaGFkb3dCaWFzPXQuYmlhcyxuLnNoYWRvd05vcm1hbEJpYXM9dC5ub3JtYWxCaWFzLG4uc2hhZG93UmFkaXVzPXQucmFkaXVzLG4uc2hhZG93TWFwU2l6ZT10Lm1hcFNpemUsbi5zaGFkb3dDYW1lcmFOZWFyPXQuY2FtZXJhLm5lYXIsbi5zaGFkb3dDYW1lcmFGYXI9dC5jYW1lcmEuZmFyLG8ucG9pbnRTaGFkb3dbdV09bixvLnBvaW50U2hhZG93TWFwW3VdPWIsby5wb2ludFNoYWRvd01hdHJpeFt1XT1lLnNoYWRvdy5tYXRyaXgsbSsrfW8ucG9pbnRbdV09dCx1Kyt9ZWxzZSBpZihlLmlzSGVtaXNwaGVyZUxpZ2h0KXtjb25zdCB0PW4uZ2V0KGUpO3Quc2t5Q29sb3IuY29weShlLmNvbG9yKS5tdWx0aXBseVNjYWxhcih5KSx0Lmdyb3VuZENvbG9yLmNvcHkoZS5ncm91bmRDb2xvcikubXVsdGlwbHlTY2FsYXIoeSksby5oZW1pW3BdPXQscCsrfX1kPjAmJihlLmlzV2ViR0wyfHwhMD09PXQuaGFzKCJPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKT8oby5yZWN0QXJlYUxUQzE9VER0LkxUQ19GTE9BVF8xLG8ucmVjdEFyZWFMVEMyPVREdC5MVENfRkxPQVRfMik6ITA9PT10LmhhcygiT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIiKT8oby5yZWN0QXJlYUxUQzE9VER0LkxUQ19IQUxGXzEsby5yZWN0QXJlYUxUQzI9VER0LkxUQ19IQUxGXzIpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXI6IFVuYWJsZSB0byB1c2UgUmVjdEFyZWFMaWdodC4gTWlzc2luZyBXZWJHTCBleHRlbnNpb25zLiIpKSxvLmFtYmllbnRbMF09YSxvLmFtYmllbnRbMV09cyxvLmFtYmllbnRbMl09bDtjb25zdCBfPW8uaGFzaDtfLmRpcmVjdGlvbmFsTGVuZ3RoPT09YyYmXy5wb2ludExlbmd0aD09PXUmJl8uc3BvdExlbmd0aD09PWgmJl8ucmVjdEFyZWFMZW5ndGg9PT1kJiZfLmhlbWlMZW5ndGg9PT1wJiZfLm51bURpcmVjdGlvbmFsU2hhZG93cz09PWYmJl8ubnVtUG9pbnRTaGFkb3dzPT09bSYmXy5udW1TcG90U2hhZG93cz09PWd8fChvLmRpcmVjdGlvbmFsLmxlbmd0aD1jLG8uc3BvdC5sZW5ndGg9aCxvLnJlY3RBcmVhLmxlbmd0aD1kLG8ucG9pbnQubGVuZ3RoPXUsby5oZW1pLmxlbmd0aD1wLG8uZGlyZWN0aW9uYWxTaGFkb3cubGVuZ3RoPWYsby5kaXJlY3Rpb25hbFNoYWRvd01hcC5sZW5ndGg9ZixvLnBvaW50U2hhZG93Lmxlbmd0aD1tLG8ucG9pbnRTaGFkb3dNYXAubGVuZ3RoPW0sby5zcG90U2hhZG93Lmxlbmd0aD1nLG8uc3BvdFNoYWRvd01hcC5sZW5ndGg9ZyxvLmRpcmVjdGlvbmFsU2hhZG93TWF0cml4Lmxlbmd0aD1mLG8ucG9pbnRTaGFkb3dNYXRyaXgubGVuZ3RoPW0sby5zcG90U2hhZG93TWF0cml4Lmxlbmd0aD1nLF8uZGlyZWN0aW9uYWxMZW5ndGg9YyxfLnBvaW50TGVuZ3RoPXUsXy5zcG90TGVuZ3RoPWgsXy5yZWN0QXJlYUxlbmd0aD1kLF8uaGVtaUxlbmd0aD1wLF8ubnVtRGlyZWN0aW9uYWxTaGFkb3dzPWYsXy5udW1Qb2ludFNoYWRvd3M9bSxfLm51bVNwb3RTaGFkb3dzPWcsby52ZXJzaW9uPWRIdCsrKX0sc2V0dXBWaWV3OmZ1bmN0aW9uIHUodCxlKXtsZXQgbj0wLGk9MCxyPTAsYz0wLHU9MDtjb25zdCBoPWUubWF0cml4V29ybGRJbnZlcnNlO2ZvcihsZXQgZT0wLGQ9dC5sZW5ndGg7ZTxkO2UrKyl7Y29uc3QgZD10W2VdO2lmKGQuaXNEaXJlY3Rpb25hbExpZ2h0KXtjb25zdCB0PW8uZGlyZWN0aW9uYWxbbl07dC5kaXJlY3Rpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGQubWF0cml4V29ybGQpLGEuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGQudGFyZ2V0Lm1hdHJpeFdvcmxkKSx0LmRpcmVjdGlvbi5zdWIoYSksdC5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKGgpLG4rK31lbHNlIGlmKGQuaXNTcG90TGlnaHQpe2NvbnN0IHQ9by5zcG90W3JdO3QucG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGQubWF0cml4V29ybGQpLHQucG9zaXRpb24uYXBwbHlNYXRyaXg0KGgpLHQuZGlyZWN0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihkLm1hdHJpeFdvcmxkKSxhLnNldEZyb21NYXRyaXhQb3NpdGlvbihkLnRhcmdldC5tYXRyaXhXb3JsZCksdC5kaXJlY3Rpb24uc3ViKGEpLHQuZGlyZWN0aW9uLnRyYW5zZm9ybURpcmVjdGlvbihoKSxyKyt9ZWxzZSBpZihkLmlzUmVjdEFyZWFMaWdodCl7Y29uc3QgdD1vLnJlY3RBcmVhW2NdO3QucG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGQubWF0cml4V29ybGQpLHQucG9zaXRpb24uYXBwbHlNYXRyaXg0KGgpLGwuaWRlbnRpdHkoKSxzLmNvcHkoZC5tYXRyaXhXb3JsZCkscy5wcmVtdWx0aXBseShoKSxsLmV4dHJhY3RSb3RhdGlvbihzKSx0LmhhbGZXaWR0aC5zZXQoLjUqZC53aWR0aCwwLDApLHQuaGFsZkhlaWdodC5zZXQoMCwuNSpkLmhlaWdodCwwKSx0LmhhbGZXaWR0aC5hcHBseU1hdHJpeDQobCksdC5oYWxmSGVpZ2h0LmFwcGx5TWF0cml4NChsKSxjKyt9ZWxzZSBpZihkLmlzUG9pbnRMaWdodCl7Y29uc3QgdD1vLnBvaW50W2ldO3QucG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGQubWF0cml4V29ybGQpLHQucG9zaXRpb24uYXBwbHlNYXRyaXg0KGgpLGkrK31lbHNlIGlmKGQuaXNIZW1pc3BoZXJlTGlnaHQpe2NvbnN0IHQ9by5oZW1pW3VdO3QuZGlyZWN0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihkLm1hdHJpeFdvcmxkKSx0LmRpcmVjdGlvbi50cmFuc2Zvcm1EaXJlY3Rpb24oaCksdC5kaXJlY3Rpb24ubm9ybWFsaXplKCksdSsrfX19LHN0YXRlOm99fWZ1bmN0aW9uIG1IdCh0LGUpe2NvbnN0IG49bmV3IGZIdCh0LGUpLGk9W10scj1bXTtyZXR1cm57aW5pdDpmdW5jdGlvbiBvKCl7aS5sZW5ndGg9MCxyLmxlbmd0aD0wfSxzdGF0ZTp7bGlnaHRzQXJyYXk6aSxzaGFkb3dzQXJyYXk6cixsaWdodHM6bn0sc2V0dXBMaWdodHM6ZnVuY3Rpb24gYSgpe24uc2V0dXAoaSl9LHNldHVwTGlnaHRzVmlldzpmdW5jdGlvbiBzKHQpe24uc2V0dXBWaWV3KGksdCl9LHB1c2hMaWdodDpmdW5jdGlvbiBsKHQpe2kucHVzaCh0KX0scHVzaFNoYWRvdzpmdW5jdGlvbiBjKHQpe3IucHVzaCh0KX19fWZ1bmN0aW9uIGdIdCh0LGUpe2xldCBuPW5ldyBXZWFrTWFwO3JldHVybntnZXQ6ZnVuY3Rpb24gaShyLG89MCl7bGV0IGE7cmV0dXJuITE9PT1uLmhhcyhyKT8oYT1uZXcgbUh0KHQsZSksbi5zZXQocixbXSksbi5nZXQocikucHVzaChhKSk6bz49bi5nZXQocikubGVuZ3RoPyhhPW5ldyBtSHQodCxlKSxuLmdldChyKS5wdXNoKGEpKTphPW4uZ2V0KHIpW29dLGF9LGRpc3Bvc2U6ZnVuY3Rpb24gcigpe249bmV3IFdlYWtNYXB9fX1mdW5jdGlvbiBfSHQodCl7Z3p0LmNhbGwodGhpcyksdGhpcy50eXBlPSJNZXNoRGVwdGhNYXRlcmlhbCIsdGhpcy5kZXB0aFBhY2tpbmc9MzIwMCx0aGlzLnNraW5uaW5nPSExLHRoaXMubW9ycGhUYXJnZXRzPSExLHRoaXMubWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy5mb2c9ITEsdGhpcy5zZXRWYWx1ZXModCl9ZnVuY3Rpb24geUh0KHQpe2d6dC5jYWxsKHRoaXMpLHRoaXMudHlwZT0iTWVzaERpc3RhbmNlTWF0ZXJpYWwiLHRoaXMucmVmZXJlbmNlUG9zaXRpb249bmV3IHFPdCx0aGlzLm5lYXJEaXN0YW5jZT0xLHRoaXMuZmFyRGlzdGFuY2U9MWUzLHRoaXMuc2tpbm5pbmc9ITEsdGhpcy5tb3JwaFRhcmdldHM9ITEsdGhpcy5tYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy5mb2c9ITEsdGhpcy5zZXRWYWx1ZXModCl9ZnVuY3Rpb24gdkh0KHQsZSxuKXtsZXQgaT1uZXcgeER0O2NvbnN0IHI9bmV3IHpPdCxvPW5ldyB6T3QsYT1uZXcgak90LHM9W10sbD1bXSxjPXt9LHU9ezA6MSwxOjAsMjoyfSxoPW5ldyBoRHQoe2RlZmluZXM6e1NBTVBMRV9SQVRFOjIvOCxIQUxGX1NBTVBMRV9SQVRFOjEvOH0sdW5pZm9ybXM6e3NoYWRvd19wYXNzOnt2YWx1ZTpudWxsfSxyZXNvbHV0aW9uOnt2YWx1ZTpuZXcgek90fSxyYWRpdXM6e3ZhbHVlOjR9fSx2ZXJ0ZXhTaGFkZXI6InZvaWQgbWFpbigpIHtcblx0Z2xfUG9zaXRpb24gPSB2ZWM0KCBwb3NpdGlvbiwgMS4wICk7XG59IixmcmFnbWVudFNoYWRlcjoidW5pZm9ybSBzYW1wbGVyMkQgc2hhZG93X3Bhc3M7XG51bmlmb3JtIHZlYzIgcmVzb2x1dGlvbjtcbnVuaWZvcm0gZmxvYXQgcmFkaXVzO1xuI2luY2x1ZGUgPHBhY2tpbmc+XG52b2lkIG1haW4oKSB7XG5cdGZsb2F0IG1lYW4gPSAwLjA7XG5cdGZsb2F0IHNxdWFyZWRfbWVhbiA9IDAuMDtcblx0ZmxvYXQgZGVwdGggPSB1bnBhY2tSR0JBVG9EZXB0aCggdGV4dHVyZTJEKCBzaGFkb3dfcGFzcywgKCBnbF9GcmFnQ29vcmQueHkgKSAvIHJlc29sdXRpb24gKSApO1xuXHRmb3IgKCBmbG9hdCBpID0gLTEuMDsgaSA8IDEuMCA7IGkgKz0gU0FNUExFX1JBVEUpIHtcblx0XHQjaWZkZWYgSE9SSVpPTlRBTF9QQVNTXG5cdFx0XHR2ZWMyIGRpc3RyaWJ1dGlvbiA9IHVucGFja1JHQkFUbzJIYWxmKCB0ZXh0dXJlMkQoIHNoYWRvd19wYXNzLCAoIGdsX0ZyYWdDb29yZC54eSArIHZlYzIoIGksIDAuMCApICogcmFkaXVzICkgLyByZXNvbHV0aW9uICkgKTtcblx0XHRcdG1lYW4gKz0gZGlzdHJpYnV0aW9uLng7XG5cdFx0XHRzcXVhcmVkX21lYW4gKz0gZGlzdHJpYnV0aW9uLnkgKiBkaXN0cmlidXRpb24ueSArIGRpc3RyaWJ1dGlvbi54ICogZGlzdHJpYnV0aW9uLng7XG5cdFx0I2Vsc2Vcblx0XHRcdGZsb2F0IGRlcHRoID0gdW5wYWNrUkdCQVRvRGVwdGgoIHRleHR1cmUyRCggc2hhZG93X3Bhc3MsICggZ2xfRnJhZ0Nvb3JkLnh5ICsgdmVjMiggMC4wLCBpICkgKiByYWRpdXMgKSAvIHJlc29sdXRpb24gKSApO1xuXHRcdFx0bWVhbiArPSBkZXB0aDtcblx0XHRcdHNxdWFyZWRfbWVhbiArPSBkZXB0aCAqIGRlcHRoO1xuXHRcdCNlbmRpZlxuXHR9XG5cdG1lYW4gPSBtZWFuICogSEFMRl9TQU1QTEVfUkFURTtcblx0c3F1YXJlZF9tZWFuID0gc3F1YXJlZF9tZWFuICogSEFMRl9TQU1QTEVfUkFURTtcblx0ZmxvYXQgc3RkX2RldiA9IHNxcnQoIHNxdWFyZWRfbWVhbiAtIG1lYW4gKiBtZWFuICk7XG5cdGdsX0ZyYWdDb2xvciA9IHBhY2sySGFsZlRvUkdCQSggdmVjMiggbWVhbiwgc3RkX2RldiApICk7XG59In0pLGQ9aC5jbG9uZSgpO2QuZGVmaW5lcy5IT1JJWk9OVEFMX1BBU1M9MTtjb25zdCBwPW5ldyBWenQ7cC5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgYnp0KG5ldyBGbG9hdDMyQXJyYXkoWy0xLC0xLC41LDMsLTEsLjUsLTEsMywuNV0pLDMpKTtjb25zdCBmPW5ldyBvRHQocCxoKSxtPXRoaXM7ZnVuY3Rpb24gZyhuLGkpe2NvbnN0IHI9ZS51cGRhdGUoZik7aC51bmlmb3Jtcy5zaGFkb3dfcGFzcy52YWx1ZT1uLm1hcC50ZXh0dXJlLGgudW5pZm9ybXMucmVzb2x1dGlvbi52YWx1ZT1uLm1hcFNpemUsaC51bmlmb3Jtcy5yYWRpdXMudmFsdWU9bi5yYWRpdXMsdC5zZXRSZW5kZXJUYXJnZXQobi5tYXBQYXNzKSx0LmNsZWFyKCksdC5yZW5kZXJCdWZmZXJEaXJlY3QoaSxudWxsLHIsaCxmLG51bGwpLGQudW5pZm9ybXMuc2hhZG93X3Bhc3MudmFsdWU9bi5tYXBQYXNzLnRleHR1cmUsZC51bmlmb3Jtcy5yZXNvbHV0aW9uLnZhbHVlPW4ubWFwU2l6ZSxkLnVuaWZvcm1zLnJhZGl1cy52YWx1ZT1uLnJhZGl1cyx0LnNldFJlbmRlclRhcmdldChuLm1hcCksdC5jbGVhcigpLHQucmVuZGVyQnVmZmVyRGlyZWN0KGksbnVsbCxyLGQsZixudWxsKX1mdW5jdGlvbiBfKHQsZSxuKXtjb25zdCBpPXQ8PDB8ZTw8MXxuPDwyO2xldCByPXNbaV07cmV0dXJuIHZvaWQgMD09PXImJihyPW5ldyBfSHQoe2RlcHRoUGFja2luZzozMjAxLG1vcnBoVGFyZ2V0czp0LHNraW5uaW5nOmV9KSxzW2ldPXIpLHJ9ZnVuY3Rpb24geSh0LGUsbil7Y29uc3QgaT10PDwwfGU8PDF8bjw8MjtsZXQgcj1sW2ldO3JldHVybiB2b2lkIDA9PT1yJiYocj1uZXcgeUh0KHttb3JwaFRhcmdldHM6dCxza2lubmluZzplfSksbFtpXT1yKSxyfWZ1bmN0aW9uIHYoZSxuLGkscixvLGEscyl7bGV0IGw9bnVsbCxoPV8sZD1lLmN1c3RvbURlcHRoTWF0ZXJpYWw7aWYoITA9PT1yLmlzUG9pbnRMaWdodCYmKGg9eSxkPWUuY3VzdG9tRGlzdGFuY2VNYXRlcmlhbCksdm9pZCAwPT09ZCl7bGV0IHQ9ITE7ITA9PT1pLm1vcnBoVGFyZ2V0cyYmKHQ9bi5tb3JwaEF0dHJpYnV0ZXMmJm4ubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uJiZuLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbi5sZW5ndGg+MCk7bGV0IHI9ITE7ITA9PT1lLmlzU2tpbm5lZE1lc2gmJighMD09PWkuc2tpbm5pbmc/cj0hMDpjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMU2hhZG93TWFwOiBUSFJFRS5Ta2lubmVkTWVzaCB3aXRoIG1hdGVyaWFsLnNraW5uaW5nIHNldCB0byBmYWxzZToiLGUpKSxsPWgodCxyLCEwPT09ZS5pc0luc3RhbmNlZE1lc2gpfWVsc2UgbD1kO2lmKHQubG9jYWxDbGlwcGluZ0VuYWJsZWQmJiEwPT09aS5jbGlwU2hhZG93cyYmMCE9PWkuY2xpcHBpbmdQbGFuZXMubGVuZ3RoKXtjb25zdCB0PWwudXVpZCxlPWkudXVpZDtsZXQgbj1jW3RdO3ZvaWQgMD09PW4mJihuPXt9LGNbdF09bik7bGV0IHI9bltlXTt2b2lkIDA9PT1yJiYocj1sLmNsb25lKCksbltlXT1yKSxsPXJ9cmV0dXJuIGwudmlzaWJsZT1pLnZpc2libGUsbC53aXJlZnJhbWU9aS53aXJlZnJhbWUsbC5zaWRlPTM9PT1zP251bGwhPT1pLnNoYWRvd1NpZGU/aS5zaGFkb3dTaWRlOmkuc2lkZTpudWxsIT09aS5zaGFkb3dTaWRlP2kuc2hhZG93U2lkZTp1W2kuc2lkZV0sbC5jbGlwU2hhZG93cz1pLmNsaXBTaGFkb3dzLGwuY2xpcHBpbmdQbGFuZXM9aS5jbGlwcGluZ1BsYW5lcyxsLmNsaXBJbnRlcnNlY3Rpb249aS5jbGlwSW50ZXJzZWN0aW9uLGwud2lyZWZyYW1lTGluZXdpZHRoPWkud2lyZWZyYW1lTGluZXdpZHRoLGwubGluZXdpZHRoPWkubGluZXdpZHRoLCEwPT09ci5pc1BvaW50TGlnaHQmJiEwPT09bC5pc01lc2hEaXN0YW5jZU1hdGVyaWFsJiYobC5yZWZlcmVuY2VQb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oci5tYXRyaXhXb3JsZCksbC5uZWFyRGlzdGFuY2U9byxsLmZhckRpc3RhbmNlPWEpLGx9ZnVuY3Rpb24gYihuLHIsbyxhLHMpe2lmKCExPT09bi52aXNpYmxlKXJldHVybjtpZihuLmxheWVycy50ZXN0KHIubGF5ZXJzKSYmKG4uaXNNZXNofHxuLmlzTGluZXx8bi5pc1BvaW50cykmJihuLmNhc3RTaGFkb3d8fG4ucmVjZWl2ZVNoYWRvdyYmMz09PXMpJiYoIW4uZnJ1c3R1bUN1bGxlZHx8aS5pbnRlcnNlY3RzT2JqZWN0KG4pKSl7bi5tb2RlbFZpZXdNYXRyaXgubXVsdGlwbHlNYXRyaWNlcyhvLm1hdHJpeFdvcmxkSW52ZXJzZSxuLm1hdHJpeFdvcmxkKTtjb25zdCBpPWUudXBkYXRlKG4pLHI9bi5tYXRlcmlhbDtpZihBcnJheS5pc0FycmF5KHIpKXtjb25zdCBlPWkuZ3JvdXBzO2ZvcihsZXQgbD0wLGM9ZS5sZW5ndGg7bDxjO2wrKyl7Y29uc3QgYz1lW2xdLHU9cltjLm1hdGVyaWFsSW5kZXhdO2lmKHUmJnUudmlzaWJsZSl7Y29uc3QgZT12KG4saSx1LGEsby5uZWFyLG8uZmFyLHMpO3QucmVuZGVyQnVmZmVyRGlyZWN0KG8sbnVsbCxpLGUsbixjKX19fWVsc2UgaWYoci52aXNpYmxlKXtjb25zdCBlPXYobixpLHIsYSxvLm5lYXIsby5mYXIscyk7dC5yZW5kZXJCdWZmZXJEaXJlY3QobyxudWxsLGksZSxuLG51bGwpfX1jb25zdCBsPW4uY2hpbGRyZW47Zm9yKGxldCB0PTAsZT1sLmxlbmd0aDt0PGU7dCsrKWIobFt0XSxyLG8sYSxzKX10aGlzLmVuYWJsZWQ9ITEsdGhpcy5hdXRvVXBkYXRlPSEwLHRoaXMubmVlZHNVcGRhdGU9ITEsdGhpcy50eXBlPTEsdGhpcy5yZW5kZXI9ZnVuY3Rpb24oZSxzLGwpe2lmKCExPT09bS5lbmFibGVkKXJldHVybjtpZighMT09PW0uYXV0b1VwZGF0ZSYmITE9PT1tLm5lZWRzVXBkYXRlKXJldHVybjtpZigwPT09ZS5sZW5ndGgpcmV0dXJuO2NvbnN0IGM9dC5nZXRSZW5kZXJUYXJnZXQoKSx1PXQuZ2V0QWN0aXZlQ3ViZUZhY2UoKSxoPXQuZ2V0QWN0aXZlTWlwbWFwTGV2ZWwoKSxkPXQuc3RhdGU7ZC5zZXRCbGVuZGluZygwKSxkLmJ1ZmZlcnMuY29sb3Iuc2V0Q2xlYXIoMSwxLDEsMSksZC5idWZmZXJzLmRlcHRoLnNldFRlc3QoITApLGQuc2V0U2Npc3NvclRlc3QoITEpO2ZvcihsZXQgYz0wLHU9ZS5sZW5ndGg7Yzx1O2MrKyl7Y29uc3QgdT1lW2NdLGg9dS5zaGFkb3c7aWYodm9pZCAwPT09aCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFNoYWRvd01hcDoiLHUsImhhcyBubyBzaGFkb3cuIik7Y29udGludWV9aWYoITE9PT1oLmF1dG9VcGRhdGUmJiExPT09aC5uZWVkc1VwZGF0ZSljb250aW51ZTtyLmNvcHkoaC5tYXBTaXplKTtjb25zdCBwPWguZ2V0RnJhbWVFeHRlbnRzKCk7aWYoci5tdWx0aXBseShwKSxvLmNvcHkoaC5tYXBTaXplKSwoci54Pm58fHIueT5uKSYmKHIueD5uJiYoby54PU1hdGguZmxvb3Iobi9wLngpLHIueD1vLngqcC54LGgubWFwU2l6ZS54PW8ueCksci55Pm4mJihvLnk9TWF0aC5mbG9vcihuL3AueSksci55PW8ueSpwLnksaC5tYXBTaXplLnk9by55KSksbnVsbD09PWgubWFwJiYhaC5pc1BvaW50TGlnaHRTaGFkb3cmJjM9PT10aGlzLnR5cGUpe2NvbnN0IHQ9e21pbkZpbHRlcjpHSXQsbWFnRmlsdGVyOkdJdCxmb3JtYXQ6dE90fTtoLm1hcD1uZXcgR090KHIueCxyLnksdCksaC5tYXAudGV4dHVyZS5uYW1lPXUubmFtZSsiLnNoYWRvd01hcCIsaC5tYXBQYXNzPW5ldyBHT3Qoci54LHIueSx0KSxoLmNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9bnVsbD09PWgubWFwJiYoaC5tYXA9bmV3IEdPdChyLngsci55LHttaW5GaWx0ZXI6Vkl0LG1hZ0ZpbHRlcjpWSXQsZm9ybWF0OnRPdH0pLGgubWFwLnRleHR1cmUubmFtZT11Lm5hbWUrIi5zaGFkb3dNYXAiLGguY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKSksdC5zZXRSZW5kZXJUYXJnZXQoaC5tYXApLHQuY2xlYXIoKTtjb25zdCBmPWguZ2V0Vmlld3BvcnRDb3VudCgpO2ZvcihsZXQgdD0wO3Q8Zjt0Kyspe2NvbnN0IGU9aC5nZXRWaWV3cG9ydCh0KTthLnNldChvLngqZS54LG8ueSplLnksby54KmUueixvLnkqZS53KSxkLnZpZXdwb3J0KGEpLGgudXBkYXRlTWF0cmljZXModSx0KSxpPWguZ2V0RnJ1c3R1bSgpLGIocyxsLGguY2FtZXJhLHUsdGhpcy50eXBlKX1oLmlzUG9pbnRMaWdodFNoYWRvd3x8MyE9PXRoaXMudHlwZXx8ZyhoLGwpLGgubmVlZHNVcGRhdGU9ITF9bS5uZWVkc1VwZGF0ZT0hMSx0LnNldFJlbmRlclRhcmdldChjLHUsaCl9fWZ1bmN0aW9uIGJIdCh0LGUsbil7Y29uc3QgaT1uLmlzV2ViR0wyLHI9bmV3KGZ1bmN0aW9uIG8oKXtsZXQgZT0hMTtjb25zdCBuPW5ldyBqT3Q7bGV0IGk9bnVsbDtjb25zdCByPW5ldyBqT3QoMCwwLDAsMCk7cmV0dXJue3NldE1hc2s6ZnVuY3Rpb24obil7aT09PW58fGV8fCh0LmNvbG9yTWFzayhuLG4sbixuKSxpPW4pfSxzZXRMb2NrZWQ6ZnVuY3Rpb24odCl7ZT10fSxzZXRDbGVhcjpmdW5jdGlvbihlLGksbyxhLHMpeyEwPT09cyYmKGUqPWEsaSo9YSxvKj1hKSxuLnNldChlLGksbyxhKSwhMT09PXIuZXF1YWxzKG4pJiYodC5jbGVhckNvbG9yKGUsaSxvLGEpLHIuY29weShuKSl9LHJlc2V0OmZ1bmN0aW9uKCl7ZT0hMSxpPW51bGwsci5zZXQoLTEsMCwwLDApfX19KSxhPW5ldyhmdW5jdGlvbiBzKCl7bGV0IGU9ITEsbj1udWxsLGk9bnVsbCxyPW51bGw7cmV0dXJue3NldFRlc3Q6ZnVuY3Rpb24odCl7dD96KDI5MjkpOkQoMjkyOSl9LHNldE1hc2s6ZnVuY3Rpb24oaSl7bj09PWl8fGV8fCh0LmRlcHRoTWFzayhpKSxuPWkpfSxzZXRGdW5jOmZ1bmN0aW9uKGUpe2lmKGkhPT1lKXtpZihlKXN3aXRjaChlKXtjYXNlIDA6dC5kZXB0aEZ1bmMoNTEyKTticmVhaztjYXNlIDE6dC5kZXB0aEZ1bmMoNTE5KTticmVhaztjYXNlIDI6dC5kZXB0aEZ1bmMoNTEzKTticmVhaztjYXNlIDM6dC5kZXB0aEZ1bmMoNTE1KTticmVhaztjYXNlIDQ6dC5kZXB0aEZ1bmMoNTE0KTticmVhaztjYXNlIDU6dC5kZXB0aEZ1bmMoNTE4KTticmVhaztjYXNlIDY6dC5kZXB0aEZ1bmMoNTE2KTticmVhaztjYXNlIDc6dC5kZXB0aEZ1bmMoNTE3KTticmVhaztkZWZhdWx0OnQuZGVwdGhGdW5jKDUxNSl9ZWxzZSB0LmRlcHRoRnVuYyg1MTUpO2k9ZX19LHNldExvY2tlZDpmdW5jdGlvbih0KXtlPXR9LHNldENsZWFyOmZ1bmN0aW9uKGUpe3IhPT1lJiYodC5jbGVhckRlcHRoKGUpLHI9ZSl9LHJlc2V0OmZ1bmN0aW9uKCl7ZT0hMSxuPW51bGwsaT1udWxsLHI9bnVsbH19fSksbD1uZXcoZnVuY3Rpb24gYygpe2xldCBlPSExLG49bnVsbCxpPW51bGwscj1udWxsLG89bnVsbCxhPW51bGwscz1udWxsLGw9bnVsbCxjPW51bGw7cmV0dXJue3NldFRlc3Q6ZnVuY3Rpb24odCl7ZXx8KHQ/eigyOTYwKTpEKDI5NjApKX0sc2V0TWFzazpmdW5jdGlvbihpKXtuPT09aXx8ZXx8KHQuc3RlbmNpbE1hc2soaSksbj1pKX0sc2V0RnVuYzpmdW5jdGlvbihlLG4sYSl7aT09PWUmJnI9PT1uJiZvPT09YXx8KHQuc3RlbmNpbEZ1bmMoZSxuLGEpLGk9ZSxyPW4sbz1hKX0sc2V0T3A6ZnVuY3Rpb24oZSxuLGkpe2E9PT1lJiZzPT09biYmbD09PWl8fCh0LnN0ZW5jaWxPcChlLG4saSksYT1lLHM9bixsPWkpfSxzZXRMb2NrZWQ6ZnVuY3Rpb24odCl7ZT10fSxzZXRDbGVhcjpmdW5jdGlvbihlKXtjIT09ZSYmKHQuY2xlYXJTdGVuY2lsKGUpLGM9ZSl9LHJlc2V0OmZ1bmN0aW9uKCl7ZT0hMSxuPW51bGwsaT1udWxsLHI9bnVsbCxvPW51bGwsYT1udWxsLHM9bnVsbCxsPW51bGwsYz1udWxsfX19KTtsZXQgdT17fSxoPW51bGwsZD1udWxsLHA9bnVsbCxmPW51bGwsbT1udWxsLGc9bnVsbCxfPW51bGwseT1udWxsLHY9bnVsbCxiPSExLHg9bnVsbCx3PW51bGwsUz1udWxsLE09bnVsbCxFPW51bGw7Y29uc3QgVD10LmdldFBhcmFtZXRlcigzNTY2MSk7bGV0IEM9ITEsQT0wO2NvbnN0IGs9dC5nZXRQYXJhbWV0ZXIoNzkzOCk7LTEhPT1rLmluZGV4T2YoIldlYkdMIik/KEE9cGFyc2VGbG9hdCgvXldlYkdMIChcZCkvLmV4ZWMoaylbMV0pLEM9QT49MSk6LTEhPT1rLmluZGV4T2YoIk9wZW5HTCBFUyIpJiYoQT1wYXJzZUZsb2F0KC9eT3BlbkdMIEVTIChcZCkvLmV4ZWMoaylbMV0pLEM9QT49Mik7bGV0IEw9bnVsbCxQPXt9O2NvbnN0IE49bmV3IGpPdCxJPW5ldyBqT3Q7ZnVuY3Rpb24gTyhlLG4saSl7Y29uc3Qgcj1uZXcgVWludDhBcnJheSg0KSxvPXQuY3JlYXRlVGV4dHVyZSgpO3QuYmluZFRleHR1cmUoZSxvKSx0LnRleFBhcmFtZXRlcmkoZSwxMDI0MSw5NzI4KSx0LnRleFBhcmFtZXRlcmkoZSwxMDI0MCw5NzI4KTtmb3IobGV0IGU9MDtlPGk7ZSsrKXQudGV4SW1hZ2UyRChuK2UsMCw2NDA4LDEsMSwwLDY0MDgsNTEyMSxyKTtyZXR1cm4gb31jb25zdCBSPXt9O2Z1bmN0aW9uIHooZSl7ITAhPT11W2VdJiYodC5lbmFibGUoZSksdVtlXT0hMCl9ZnVuY3Rpb24gRChlKXshMSE9PXVbZV0mJih0LmRpc2FibGUoZSksdVtlXT0hMSl9UlszNTUzXT1PKDM1NTMsMzU1MywxKSxSWzM0MDY3XT1PKDM0MDY3LDM0MDY5LDYpLHIuc2V0Q2xlYXIoMCwwLDAsMSksYS5zZXRDbGVhcigxKSxsLnNldENsZWFyKDApLHooMjkyOSksYS5zZXRGdW5jKDMpLFYoITEpLFUoMSkseigyODg0KSxGKDApO2NvbnN0IEI9e1tMSXRdOjMyNzc0LDEwMTozMjc3OCwxMDI6MzI3Nzl9O2lmKGkpQlsxMDNdPTMyNzc1LEJbMTA0XT0zMjc3NjtlbHNle2NvbnN0IHQ9ZS5nZXQoIkVYVF9ibGVuZF9taW5tYXgiKTtudWxsIT09dCYmKEJbMTAzXT10Lk1JTl9FWFQsQlsxMDRdPXQuTUFYX0VYVCl9Y29uc3QgSD17MjAwOjAsMjAxOjEsMjAyOjc2OCwyMDQ6NzcwLDIxMDo3NzYsMjA4Ojc3NCwyMDY6NzcyLDIwMzo3NjksMjA1Ojc3MSwyMDk6Nzc1LDIwNzo3NzN9O2Z1bmN0aW9uIEYoZSxuLGkscixvLGEscyxsKXtpZigwIT09ZSl7aWYoZHx8KHooMzA0MiksZD0hMCksNT09PWUpbz1vfHxuLGE9YXx8aSxzPXN8fHIsbj09PWYmJm89PT1ffHwodC5ibGVuZEVxdWF0aW9uU2VwYXJhdGUoQltuXSxCW29dKSxmPW4sXz1vKSxpPT09bSYmcj09PWcmJmE9PT15JiZzPT09dnx8KHQuYmxlbmRGdW5jU2VwYXJhdGUoSFtpXSxIW3JdLEhbYV0sSFtzXSksbT1pLGc9cix5PWEsdj1zKSxwPWUsYj1udWxsO2Vsc2UgaWYoZSE9PXB8fGwhPT1iKXtpZihmPT09TEl0JiZfPT09TEl0fHwodC5ibGVuZEVxdWF0aW9uKDMyNzc0KSxmPUxJdCxfPUxJdCksbClzd2l0Y2goZSl7Y2FzZSAxOnQuYmxlbmRGdW5jU2VwYXJhdGUoMSw3NzEsMSw3NzEpO2JyZWFrO2Nhc2UgMjp0LmJsZW5kRnVuYygxLDEpO2JyZWFrO2Nhc2UgMzp0LmJsZW5kRnVuY1NlcGFyYXRlKDAsMCw3NjksNzcxKTticmVhaztjYXNlIDQ6dC5ibGVuZEZ1bmNTZXBhcmF0ZSgwLDc2OCwwLDc3MCk7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiBJbnZhbGlkIGJsZW5kaW5nOiAiLGUpfWVsc2Ugc3dpdGNoKGUpe2Nhc2UgMTp0LmJsZW5kRnVuY1NlcGFyYXRlKDc3MCw3NzEsMSw3NzEpO2JyZWFrO2Nhc2UgMjp0LmJsZW5kRnVuYyg3NzAsMSk7YnJlYWs7Y2FzZSAzOnQuYmxlbmRGdW5jKDAsNzY5KTticmVhaztjYXNlIDQ6dC5ibGVuZEZ1bmMoMCw3NjgpO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZTogSW52YWxpZCBibGVuZGluZzogIixlKX1tPW51bGwsZz1udWxsLHk9bnVsbCx2PW51bGwscD1lLGI9bH19ZWxzZSBkJiYoRCgzMDQyKSxkPSExKX1mdW5jdGlvbiBWKGUpe3ghPT1lJiYodC5mcm9udEZhY2UoZT8yMzA0OjIzMDUpLHg9ZSl9ZnVuY3Rpb24gVShlKXswIT09ZT8oeigyODg0KSxlIT09dyYmdC5jdWxsRmFjZSgxPT09ZT8xMDI5OjI9PT1lPzEwMjg6MTAzMikpOkQoMjg4NCksdz1lfWZ1bmN0aW9uIGooZSxuLGkpe2U/KHooMzI4MjMpLE09PT1uJiZFPT09aXx8KHQucG9seWdvbk9mZnNldChuLGkpLE09bixFPWkpKTpEKDMyODIzKX1mdW5jdGlvbiBHKGUpe3ZvaWQgMD09PWUmJihlPTMzOTg0K1QtMSksTCE9PWUmJih0LmFjdGl2ZVRleHR1cmUoZSksTD1lKX1yZXR1cm57YnVmZmVyczp7Y29sb3I6cixkZXB0aDphLHN0ZW5jaWw6bH0sZW5hYmxlOnosZGlzYWJsZTpELHVzZVByb2dyYW06ZnVuY3Rpb24gVyhlKXtyZXR1cm4gaCE9PWUmJih0LnVzZVByb2dyYW0oZSksaD1lLCEwKX0sc2V0QmxlbmRpbmc6RixzZXRNYXRlcmlhbDpmdW5jdGlvbiBxKHQsZSl7Mj09PXQuc2lkZT9EKDI4ODQpOnooMjg4NCk7bGV0IG49MT09PXQuc2lkZTtlJiYobj0hbiksVihuKSwxPT09dC5ibGVuZGluZyYmITE9PT10LnRyYW5zcGFyZW50P0YoMCk6Rih0LmJsZW5kaW5nLHQuYmxlbmRFcXVhdGlvbix0LmJsZW5kU3JjLHQuYmxlbmREc3QsdC5ibGVuZEVxdWF0aW9uQWxwaGEsdC5ibGVuZFNyY0FscGhhLHQuYmxlbmREc3RBbHBoYSx0LnByZW11bHRpcGxpZWRBbHBoYSksYS5zZXRGdW5jKHQuZGVwdGhGdW5jKSxhLnNldFRlc3QodC5kZXB0aFRlc3QpLGEuc2V0TWFzayh0LmRlcHRoV3JpdGUpLHIuc2V0TWFzayh0LmNvbG9yV3JpdGUpO2NvbnN0IGk9dC5zdGVuY2lsV3JpdGU7bC5zZXRUZXN0KGkpLGkmJihsLnNldE1hc2sodC5zdGVuY2lsV3JpdGVNYXNrKSxsLnNldEZ1bmModC5zdGVuY2lsRnVuYyx0LnN0ZW5jaWxSZWYsdC5zdGVuY2lsRnVuY01hc2spLGwuc2V0T3AodC5zdGVuY2lsRmFpbCx0LnN0ZW5jaWxaRmFpbCx0LnN0ZW5jaWxaUGFzcykpLGoodC5wb2x5Z29uT2Zmc2V0LHQucG9seWdvbk9mZnNldEZhY3Rvcix0LnBvbHlnb25PZmZzZXRVbml0cyl9LHNldEZsaXBTaWRlZDpWLHNldEN1bGxGYWNlOlUsc2V0TGluZVdpZHRoOmZ1bmN0aW9uIFkoZSl7ZSE9PVMmJihDJiZ0LmxpbmVXaWR0aChlKSxTPWUpfSxzZXRQb2x5Z29uT2Zmc2V0Omosc2V0U2Npc3NvclRlc3Q6ZnVuY3Rpb24gWCh0KXt0P3ooMzA4OSk6RCgzMDg5KX0sYWN0aXZlVGV4dHVyZTpHLGJpbmRUZXh0dXJlOmZ1bmN0aW9uICQoZSxuKXtudWxsPT09TCYmRygpO2xldCBpPVBbTF07dm9pZCAwPT09aSYmKGk9e3R5cGU6dm9pZCAwLHRleHR1cmU6dm9pZCAwfSxQW0xdPWkpLGkudHlwZT09PWUmJmkudGV4dHVyZT09PW58fCh0LmJpbmRUZXh0dXJlKGUsbnx8UltlXSksaS50eXBlPWUsaS50ZXh0dXJlPW4pfSx1bmJpbmRUZXh0dXJlOmZ1bmN0aW9uIEsoKXtjb25zdCBlPVBbTF07dm9pZCAwIT09ZSYmdm9pZCAwIT09ZS50eXBlJiYodC5iaW5kVGV4dHVyZShlLnR5cGUsbnVsbCksZS50eXBlPXZvaWQgMCxlLnRleHR1cmU9dm9pZCAwKX0sY29tcHJlc3NlZFRleEltYWdlMkQ6ZnVuY3Rpb24gWigpe3RyeXt0LmNvbXByZXNzZWRUZXhJbWFnZTJELmFwcGx5KHQsYXJndW1lbnRzKX1jYXRjaCh0KXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsdCl9fSx0ZXhJbWFnZTJEOmZ1bmN0aW9uIEooKXt0cnl7dC50ZXhJbWFnZTJELmFwcGx5KHQsYXJndW1lbnRzKX1jYXRjaCh0KXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsdCl9fSx0ZXhJbWFnZTNEOmZ1bmN0aW9uIFEoKXt0cnl7dC50ZXhJbWFnZTNELmFwcGx5KHQsYXJndW1lbnRzKX1jYXRjaCh0KXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsdCl9fSxzY2lzc29yOmZ1bmN0aW9uIHR0KGUpeyExPT09Ti5lcXVhbHMoZSkmJih0LnNjaXNzb3IoZS54LGUueSxlLnosZS53KSxOLmNvcHkoZSkpfSx2aWV3cG9ydDpmdW5jdGlvbiBldChlKXshMT09PUkuZXF1YWxzKGUpJiYodC52aWV3cG9ydChlLngsZS55LGUueixlLncpLEkuY29weShlKSl9LHJlc2V0OmZ1bmN0aW9uIG50KCl7dT17fSxMPW51bGwsUD17fSxoPW51bGwsZD1udWxsLHA9bnVsbCxmPW51bGwsbT1udWxsLGc9bnVsbCxfPW51bGwseT1udWxsLHY9bnVsbCxiPSExLHg9bnVsbCx3PW51bGwsUz1udWxsLE09bnVsbCxFPW51bGwsci5yZXNldCgpLGEucmVzZXQoKSxsLnJlc2V0KCl9fX1mdW5jdGlvbiB4SHQodCxlLG4saSxyLG8sYSl7Y29uc3Qgcz1yLmlzV2ViR0wyLGw9ci5tYXhUZXh0dXJlcyxjPXIubWF4Q3ViZW1hcFNpemUsdT1yLm1heFRleHR1cmVTaXplLGg9ci5tYXhTYW1wbGVzLGQ9bmV3IFdlYWtNYXA7bGV0IHAsZj0hMTt0cnl7Zj0idW5kZWZpbmVkIiE9dHlwZW9mIE9mZnNjcmVlbkNhbnZhcyYmbnVsbCE9PW5ldyBPZmZzY3JlZW5DYW52YXMoMSwxKS5nZXRDb250ZXh0KCIyZCIpfWNhdGNoKHQpe31mdW5jdGlvbiBtKHQsZSl7cmV0dXJuIGY/bmV3IE9mZnNjcmVlbkNhbnZhcyh0LGUpOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsImNhbnZhcyIpfWZ1bmN0aW9uIGcodCxlLG4saSl7bGV0IHI9MTtpZigodC53aWR0aD5pfHx0LmhlaWdodD5pKSYmKHI9aS9NYXRoLm1heCh0LndpZHRoLHQuaGVpZ2h0KSkscjwxfHwhMD09PWUpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgSFRNTEltYWdlRWxlbWVudCYmdCBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnR8fCJ1bmRlZmluZWQiIT10eXBlb2YgSFRNTENhbnZhc0VsZW1lbnQmJnQgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudHx8InVuZGVmaW5lZCIhPXR5cGVvZiBJbWFnZUJpdG1hcCYmdCBpbnN0YW5jZW9mIEltYWdlQml0bWFwKXtjb25zdCBpPWU/Uk90LmZsb29yUG93ZXJPZlR3bzpNYXRoLmZsb29yLG89aShyKnQud2lkdGgpLGE9aShyKnQuaGVpZ2h0KTt2b2lkIDA9PT1wJiYocD1tKG8sYSkpO2NvbnN0IHM9bj9tKG8sYSk6cDtyZXR1cm4gcy53aWR0aD1vLHMuaGVpZ2h0PWEscy5nZXRDb250ZXh0KCIyZCIpLmRyYXdJbWFnZSh0LDAsMCxvLGEpLGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVGV4dHVyZSBoYXMgYmVlbiByZXNpemVkIGZyb20gKCIrdC53aWR0aCsieCIrdC5oZWlnaHQrIikgdG8gKCIrbysieCIrYSsiKS4iKSxzfXJldHVybiJkYXRhImluIHQmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogSW1hZ2UgaW4gRGF0YVRleHR1cmUgaXMgdG9vIGJpZyAoIit0LndpZHRoKyJ4Iit0LmhlaWdodCsiKS4iKSx0fXJldHVybiB0fWZ1bmN0aW9uIF8odCl7cmV0dXJuIFJPdC5pc1Bvd2VyT2ZUd28odC53aWR0aCkmJlJPdC5pc1Bvd2VyT2ZUd28odC5oZWlnaHQpfWZ1bmN0aW9uIHkodCxlKXtyZXR1cm4gdC5nZW5lcmF0ZU1pcG1hcHMmJmUmJnQubWluRmlsdGVyIT09Vkl0JiZ0Lm1pbkZpbHRlciE9PUdJdH1mdW5jdGlvbiB2KGUsbixyLG8pe3QuZ2VuZXJhdGVNaXBtYXAoZSksaS5nZXQobikuX19tYXhNaXBMZXZlbD1NYXRoLmxvZyhNYXRoLm1heChyLG8pKSpNYXRoLkxPRzJFfWZ1bmN0aW9uIGIobixpLHIpe2lmKCExPT09cylyZXR1cm4gaTtpZihudWxsIT09bil7aWYodm9pZCAwIT09dFtuXSlyZXR1cm4gdFtuXTtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IEF0dGVtcHQgdG8gdXNlIG5vbi1leGlzdGluZyBXZWJHTCBpbnRlcm5hbCBmb3JtYXQgJyIrbisiJyIpfWxldCBvPWk7cmV0dXJuIDY0MDM9PT1pJiYoNTEyNj09PXImJihvPTMzMzI2KSw1MTMxPT09ciYmKG89MzMzMjUpLDUxMjE9PT1yJiYobz0zMzMyMSkpLDY0MDc9PT1pJiYoNTEyNj09PXImJihvPTM0ODM3KSw1MTMxPT09ciYmKG89MzQ4NDMpLDUxMjE9PT1yJiYobz0zMjg0OSkpLDY0MDg9PT1pJiYoNTEyNj09PXImJihvPTM0ODM2KSw1MTMxPT09ciYmKG89MzQ4NDIpLDUxMjE9PT1yJiYobz0zMjg1NikpLDMzMzI1IT09byYmMzMzMjYhPT1vJiYzNDg0MiE9PW8mJjM0ODM2IT09b3x8ZS5nZXQoIkVYVF9jb2xvcl9idWZmZXJfZmxvYXQiKSxvfWZ1bmN0aW9uIHgodCl7cmV0dXJuIHQ9PT1WSXR8fHQ9PT1VSXR8fHQ9PT1qSXQ/OTcyODo5NzI5fWZ1bmN0aW9uIHcoZSl7Y29uc3Qgbj1lLnRhcmdldDtuLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLHcpLChmdW5jdGlvbiByKGUpe2NvbnN0IG49aS5nZXQoZSk7dm9pZCAwIT09bi5fX3dlYmdsSW5pdCYmKHQuZGVsZXRlVGV4dHVyZShuLl9fd2ViZ2xUZXh0dXJlKSxpLnJlbW92ZShlKSl9KShuKSxuLmlzVmlkZW9UZXh0dXJlJiZkLmRlbGV0ZShuKSxhLm1lbW9yeS50ZXh0dXJlcy0tfWZ1bmN0aW9uIFMoZSl7Y29uc3Qgbj1lLnRhcmdldDtuLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLFMpLChmdW5jdGlvbiByKGUpe2NvbnN0IG49aS5nZXQoZSkscj1pLmdldChlLnRleHR1cmUpO2lmKGUpe2lmKHZvaWQgMCE9PXIuX193ZWJnbFRleHR1cmUmJnQuZGVsZXRlVGV4dHVyZShyLl9fd2ViZ2xUZXh0dXJlKSxlLmRlcHRoVGV4dHVyZSYmZS5kZXB0aFRleHR1cmUuZGlzcG9zZSgpLGUuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQpZm9yKGxldCBlPTA7ZTw2O2UrKyl0LmRlbGV0ZUZyYW1lYnVmZmVyKG4uX193ZWJnbEZyYW1lYnVmZmVyW2VdKSxuLl9fd2ViZ2xEZXB0aGJ1ZmZlciYmdC5kZWxldGVSZW5kZXJidWZmZXIobi5fX3dlYmdsRGVwdGhidWZmZXJbZV0pO2Vsc2UgdC5kZWxldGVGcmFtZWJ1ZmZlcihuLl9fd2ViZ2xGcmFtZWJ1ZmZlciksbi5fX3dlYmdsRGVwdGhidWZmZXImJnQuZGVsZXRlUmVuZGVyYnVmZmVyKG4uX193ZWJnbERlcHRoYnVmZmVyKSxuLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlciYmdC5kZWxldGVGcmFtZWJ1ZmZlcihuLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlciksbi5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXImJnQuZGVsZXRlUmVuZGVyYnVmZmVyKG4uX193ZWJnbENvbG9yUmVuZGVyYnVmZmVyKSxuLl9fd2ViZ2xEZXB0aFJlbmRlcmJ1ZmZlciYmdC5kZWxldGVSZW5kZXJidWZmZXIobi5fX3dlYmdsRGVwdGhSZW5kZXJidWZmZXIpO2kucmVtb3ZlKGUudGV4dHVyZSksaS5yZW1vdmUoZSl9fSkobiksYS5tZW1vcnkudGV4dHVyZXMtLX1sZXQgTT0wO2Z1bmN0aW9uIEUodCxlKXtjb25zdCByPWkuZ2V0KHQpO2lmKHQuaXNWaWRlb1RleHR1cmUmJihmdW5jdGlvbiBvKHQpe2NvbnN0IGU9YS5yZW5kZXIuZnJhbWU7ZC5nZXQodCkhPT1lJiYoZC5zZXQodCxlKSx0LnVwZGF0ZSgpKX0pKHQpLHQudmVyc2lvbj4wJiZyLl9fdmVyc2lvbiE9PXQudmVyc2lvbil7Y29uc3Qgbj10LmltYWdlO2lmKHZvaWQgMD09PW4pY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIG1hcmtlZCBmb3IgdXBkYXRlIGJ1dCBpbWFnZSBpcyB1bmRlZmluZWQiKTtlbHNle2lmKCExIT09bi5jb21wbGV0ZSlyZXR1cm4gdm9pZCBQKHIsdCxlKTtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgbWFya2VkIGZvciB1cGRhdGUgYnV0IGltYWdlIGlzIGluY29tcGxldGUiKX19bi5hY3RpdmVUZXh0dXJlKDMzOTg0K2UpLG4uYmluZFRleHR1cmUoMzU1MyxyLl9fd2ViZ2xUZXh0dXJlKX1mdW5jdGlvbiBUKGUscil7Y29uc3QgYT1pLmdldChlKTtlLnZlcnNpb24+MCYmYS5fX3ZlcnNpb24hPT1lLnZlcnNpb24/KGZ1bmN0aW9uIGwoZSxpLHIpe2lmKDYhPT1pLmltYWdlLmxlbmd0aClyZXR1cm47TChlLGkpLG4uYWN0aXZlVGV4dHVyZSgzMzk4NCtyKSxuLmJpbmRUZXh0dXJlKDM0MDY3LGUuX193ZWJnbFRleHR1cmUpLHQucGl4ZWxTdG9yZWkoMzc0NDAsaS5mbGlwWSksdC5waXhlbFN0b3JlaSgzNzQ0MSxpLnByZW11bHRpcGx5QWxwaGEpLHQucGl4ZWxTdG9yZWkoMzMxNyxpLnVucGFja0FsaWdubWVudCk7Y29uc3QgYT1pJiYoaS5pc0NvbXByZXNzZWRUZXh0dXJlfHxpLmltYWdlWzBdLmlzQ29tcHJlc3NlZFRleHR1cmUpLGw9aS5pbWFnZVswXSYmaS5pbWFnZVswXS5pc0RhdGFUZXh0dXJlLHU9W107Zm9yKGxldCB0PTA7dDw2O3QrKyl1W3RdPWF8fGw/bD9pLmltYWdlW3RdLmltYWdlOmkuaW1hZ2VbdF06ZyhpLmltYWdlW3RdLCExLCEwLGMpO2NvbnN0IGg9dVswXSxkPV8oaCl8fHMscD1vLmNvbnZlcnQoaS5mb3JtYXQpLGY9by5jb252ZXJ0KGkudHlwZSksbT1iKGkuaW50ZXJuYWxGb3JtYXQscCxmKTtsZXQgeDtpZihrKDM0MDY3LGksZCksYSl7Zm9yKGxldCB0PTA7dDw2O3QrKyl7eD11W3RdLm1pcG1hcHM7Zm9yKGxldCBlPTA7ZTx4Lmxlbmd0aDtlKyspe2NvbnN0IHI9eFtlXTtpLmZvcm1hdCE9PXRPdCYmaS5mb3JtYXQhPT1RSXQ/bnVsbCE9PXA/bi5jb21wcmVzc2VkVGV4SW1hZ2UyRCgzNDA2OSt0LGUsbSxyLndpZHRoLHIuaGVpZ2h0LDAsci5kYXRhKTpjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IEF0dGVtcHQgdG8gbG9hZCB1bnN1cHBvcnRlZCBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0IGluIC5zZXRUZXh0dXJlQ3ViZSgpIik6bi50ZXhJbWFnZTJEKDM0MDY5K3QsZSxtLHIud2lkdGgsci5oZWlnaHQsMCxwLGYsci5kYXRhKX19ZS5fX21heE1pcExldmVsPXgubGVuZ3RoLTF9ZWxzZXt4PWkubWlwbWFwcztmb3IobGV0IHQ9MDt0PDY7dCsrKWlmKGwpe24udGV4SW1hZ2UyRCgzNDA2OSt0LDAsbSx1W3RdLndpZHRoLHVbdF0uaGVpZ2h0LDAscCxmLHVbdF0uZGF0YSk7Zm9yKGxldCBlPTA7ZTx4Lmxlbmd0aDtlKyspe2NvbnN0IGk9eFtlXS5pbWFnZVt0XS5pbWFnZTtuLnRleEltYWdlMkQoMzQwNjkrdCxlKzEsbSxpLndpZHRoLGkuaGVpZ2h0LDAscCxmLGkuZGF0YSl9fWVsc2V7bi50ZXhJbWFnZTJEKDM0MDY5K3QsMCxtLHAsZix1W3RdKTtmb3IobGV0IGU9MDtlPHgubGVuZ3RoO2UrKyluLnRleEltYWdlMkQoMzQwNjkrdCxlKzEsbSxwLGYseFtlXS5pbWFnZVt0XSl9ZS5fX21heE1pcExldmVsPXgubGVuZ3RofXkoaSxkKSYmdigzNDA2NyxpLGgud2lkdGgsaC5oZWlnaHQpLGUuX192ZXJzaW9uPWkudmVyc2lvbixpLm9uVXBkYXRlJiZpLm9uVXBkYXRlKGkpfSkoYSxlLHIpOihuLmFjdGl2ZVRleHR1cmUoMzM5ODQrciksbi5iaW5kVGV4dHVyZSgzNDA2NyxhLl9fd2ViZ2xUZXh0dXJlKSl9Y29uc3QgQz17W0JJdF06MTA0OTcsW0hJdF06MzMwNzEsW0ZJdF06MzM2NDh9LEE9e1tWSXRdOjk3MjgsW1VJdF06OTk4NCxbakl0XTo5OTg2LFtHSXRdOjk3MjksW1dJdF06OTk4NSxbcUl0XTo5OTg3fTtmdW5jdGlvbiBrKG4sbyxhKXthPyh0LnRleFBhcmFtZXRlcmkobiwxMDI0MixDW28ud3JhcFNdKSx0LnRleFBhcmFtZXRlcmkobiwxMDI0MyxDW28ud3JhcFRdKSwzMjg3OSE9PW4mJjM1ODY2IT09bnx8dC50ZXhQYXJhbWV0ZXJpKG4sMzI4ODIsQ1tvLndyYXBSXSksdC50ZXhQYXJhbWV0ZXJpKG4sMTAyNDAsQVtvLm1hZ0ZpbHRlcl0pLHQudGV4UGFyYW1ldGVyaShuLDEwMjQxLEFbby5taW5GaWx0ZXJdKSk6KHQudGV4UGFyYW1ldGVyaShuLDEwMjQyLDMzMDcxKSx0LnRleFBhcmFtZXRlcmkobiwxMDI0MywzMzA3MSksMzI4NzkhPT1uJiYzNTg2NiE9PW58fHQudGV4UGFyYW1ldGVyaShuLDMyODgyLDMzMDcxKSxvLndyYXBTPT09SEl0JiZvLndyYXBUPT09SEl0fHxjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgaXMgbm90IHBvd2VyIG9mIHR3by4gVGV4dHVyZS53cmFwUyBhbmQgVGV4dHVyZS53cmFwVCBzaG91bGQgYmUgc2V0IHRvIFRIUkVFLkNsYW1wVG9FZGdlV3JhcHBpbmcuIiksdC50ZXhQYXJhbWV0ZXJpKG4sMTAyNDAseChvLm1hZ0ZpbHRlcikpLHQudGV4UGFyYW1ldGVyaShuLDEwMjQxLHgoby5taW5GaWx0ZXIpKSxvLm1pbkZpbHRlciE9PVZJdCYmby5taW5GaWx0ZXIhPT1HSXQmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVGV4dHVyZSBpcyBub3QgcG93ZXIgb2YgdHdvLiBUZXh0dXJlLm1pbkZpbHRlciBzaG91bGQgYmUgc2V0IHRvIFRIUkVFLk5lYXJlc3RGaWx0ZXIgb3IgVEhSRUUuTGluZWFyRmlsdGVyLiIpKTtjb25zdCBsPWUuZ2V0KCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKTtpZihsKXtpZihvLnR5cGU9PT1LSXQmJm51bGw9PT1lLmdldCgiT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIikpcmV0dXJuO2lmKG8udHlwZT09PVpJdCYmbnVsbD09PShzfHxlLmdldCgiT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIiKSkpcmV0dXJuOyhvLmFuaXNvdHJvcHk+MXx8aS5nZXQobykuX19jdXJyZW50QW5pc290cm9weSkmJih0LnRleFBhcmFtZXRlcmYobixsLlRFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhULE1hdGgubWluKG8uYW5pc290cm9weSxyLmdldE1heEFuaXNvdHJvcHkoKSkpLGkuZ2V0KG8pLl9fY3VycmVudEFuaXNvdHJvcHk9by5hbmlzb3Ryb3B5KX19ZnVuY3Rpb24gTChlLG4pe3ZvaWQgMD09PWUuX193ZWJnbEluaXQmJihlLl9fd2ViZ2xJbml0PSEwLG4uYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsdyksZS5fX3dlYmdsVGV4dHVyZT10LmNyZWF0ZVRleHR1cmUoKSxhLm1lbW9yeS50ZXh0dXJlcysrKX1mdW5jdGlvbiBQKGUsaSxyKXtsZXQgYT0zNTUzO2kuaXNEYXRhVGV4dHVyZTJEQXJyYXkmJihhPTM1ODY2KSxpLmlzRGF0YVRleHR1cmUzRCYmKGE9MzI4NzkpLEwoZSxpKSxuLmFjdGl2ZVRleHR1cmUoMzM5ODQrciksbi5iaW5kVGV4dHVyZShhLGUuX193ZWJnbFRleHR1cmUpLHQucGl4ZWxTdG9yZWkoMzc0NDAsaS5mbGlwWSksdC5waXhlbFN0b3JlaSgzNzQ0MSxpLnByZW11bHRpcGx5QWxwaGEpLHQucGl4ZWxTdG9yZWkoMzMxNyxpLnVucGFja0FsaWdubWVudCk7Y29uc3QgbD0oZnVuY3Rpb24gYyh0KXtyZXR1cm4hcyYmKHQud3JhcFMhPT1ISXR8fHQud3JhcFQhPT1ISXR8fHQubWluRmlsdGVyIT09Vkl0JiZ0Lm1pbkZpbHRlciE9PUdJdCl9KShpKSYmITE9PT1fKGkuaW1hZ2UpLGg9ZyhpLmltYWdlLGwsITEsdSksZD1fKGgpfHxzLHA9by5jb252ZXJ0KGkuZm9ybWF0KTtsZXQgZixtPW8uY29udmVydChpLnR5cGUpLHg9YihpLmludGVybmFsRm9ybWF0LHAsbSk7ayhhLGksZCk7Y29uc3Qgdz1pLm1pcG1hcHM7aWYoaS5pc0RlcHRoVGV4dHVyZSl4PTY0MDIscz94PWkudHlwZT09PUtJdD8zNjAxMjppLnR5cGU9PT0kSXQ/MzMxOTA6aS50eXBlPT09Skl0PzM1MDU2OjMzMTg5OmkudHlwZT09PUtJdCYmY29uc29sZS5lcnJvcigiV2ViR0xSZW5kZXJlcjogRmxvYXRpbmcgcG9pbnQgZGVwdGggdGV4dHVyZSByZXF1aXJlcyBXZWJHTDIuIiksaS5mb3JtYXQ9PT1lT3QmJjY0MDI9PT14JiZpLnR5cGUhPT1YSXQmJmkudHlwZSE9PSRJdCYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVXNlIFVuc2lnbmVkU2hvcnRUeXBlIG9yIFVuc2lnbmVkSW50VHlwZSBmb3IgRGVwdGhGb3JtYXQgRGVwdGhUZXh0dXJlLiIpLGkudHlwZT1YSXQsbT1vLmNvbnZlcnQoaS50eXBlKSksaS5mb3JtYXQ9PT1uT3QmJjY0MDI9PT14JiYoeD0zNDA0MSxpLnR5cGUhPT1KSXQmJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFVzZSBVbnNpZ25lZEludDI0OFR5cGUgZm9yIERlcHRoU3RlbmNpbEZvcm1hdCBEZXB0aFRleHR1cmUuIiksaS50eXBlPUpJdCxtPW8uY29udmVydChpLnR5cGUpKSksbi50ZXhJbWFnZTJEKDM1NTMsMCx4LGgud2lkdGgsaC5oZWlnaHQsMCxwLG0sbnVsbCk7ZWxzZSBpZihpLmlzRGF0YVRleHR1cmUpaWYody5sZW5ndGg+MCYmZCl7Zm9yKGxldCB0PTAsZT13Lmxlbmd0aDt0PGU7dCsrKWY9d1t0XSxuLnRleEltYWdlMkQoMzU1Myx0LHgsZi53aWR0aCxmLmhlaWdodCwwLHAsbSxmLmRhdGEpO2kuZ2VuZXJhdGVNaXBtYXBzPSExLGUuX19tYXhNaXBMZXZlbD13Lmxlbmd0aC0xfWVsc2Ugbi50ZXhJbWFnZTJEKDM1NTMsMCx4LGgud2lkdGgsaC5oZWlnaHQsMCxwLG0saC5kYXRhKSxlLl9fbWF4TWlwTGV2ZWw9MDtlbHNlIGlmKGkuaXNDb21wcmVzc2VkVGV4dHVyZSl7Zm9yKGxldCB0PTAsZT13Lmxlbmd0aDt0PGU7dCsrKWY9d1t0XSxpLmZvcm1hdCE9PXRPdCYmaS5mb3JtYXQhPT1RSXQ/bnVsbCE9PXA/bi5jb21wcmVzc2VkVGV4SW1hZ2UyRCgzNTUzLHQseCxmLndpZHRoLGYuaGVpZ2h0LDAsZi5kYXRhKTpjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IEF0dGVtcHQgdG8gbG9hZCB1bnN1cHBvcnRlZCBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0IGluIC51cGxvYWRUZXh0dXJlKCkiKTpuLnRleEltYWdlMkQoMzU1Myx0LHgsZi53aWR0aCxmLmhlaWdodCwwLHAsbSxmLmRhdGEpO2UuX19tYXhNaXBMZXZlbD13Lmxlbmd0aC0xfWVsc2UgaWYoaS5pc0RhdGFUZXh0dXJlMkRBcnJheSluLnRleEltYWdlM0QoMzU4NjYsMCx4LGgud2lkdGgsaC5oZWlnaHQsaC5kZXB0aCwwLHAsbSxoLmRhdGEpLGUuX19tYXhNaXBMZXZlbD0wO2Vsc2UgaWYoaS5pc0RhdGFUZXh0dXJlM0Qpbi50ZXhJbWFnZTNEKDMyODc5LDAseCxoLndpZHRoLGguaGVpZ2h0LGguZGVwdGgsMCxwLG0saC5kYXRhKSxlLl9fbWF4TWlwTGV2ZWw9MDtlbHNlIGlmKHcubGVuZ3RoPjAmJmQpe2ZvcihsZXQgdD0wLGU9dy5sZW5ndGg7dDxlO3QrKylmPXdbdF0sbi50ZXhJbWFnZTJEKDM1NTMsdCx4LHAsbSxmKTtpLmdlbmVyYXRlTWlwbWFwcz0hMSxlLl9fbWF4TWlwTGV2ZWw9dy5sZW5ndGgtMX1lbHNlIG4udGV4SW1hZ2UyRCgzNTUzLDAseCxwLG0saCksZS5fX21heE1pcExldmVsPTA7eShpLGQpJiZ2KGEsaSxoLndpZHRoLGguaGVpZ2h0KSxlLl9fdmVyc2lvbj1pLnZlcnNpb24saS5vblVwZGF0ZSYmaS5vblVwZGF0ZShpKX1mdW5jdGlvbiBOKGUscixhLHMpe2NvbnN0IGw9by5jb252ZXJ0KHIudGV4dHVyZS5mb3JtYXQpLGM9by5jb252ZXJ0KHIudGV4dHVyZS50eXBlKSx1PWIoci50ZXh0dXJlLmludGVybmFsRm9ybWF0LGwsYyk7bi50ZXhJbWFnZTJEKHMsMCx1LHIud2lkdGgsci5oZWlnaHQsMCxsLGMsbnVsbCksdC5iaW5kRnJhbWVidWZmZXIoMzYxNjAsZSksdC5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCxhLHMsaS5nZXQoci50ZXh0dXJlKS5fX3dlYmdsVGV4dHVyZSwwKSx0LmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxudWxsKX1mdW5jdGlvbiBJKGUsbixpKXtpZih0LmJpbmRSZW5kZXJidWZmZXIoMzYxNjEsZSksbi5kZXB0aEJ1ZmZlciYmIW4uc3RlbmNpbEJ1ZmZlcil7bGV0IHI9MzMxODk7aWYoaSl7Y29uc3QgZT1uLmRlcHRoVGV4dHVyZTtlJiZlLmlzRGVwdGhUZXh0dXJlJiYoZS50eXBlPT09S0l0P3I9MzYwMTI6ZS50eXBlPT09JEl0JiYocj0zMzE5MCkpO2NvbnN0IGk9TyhuKTt0LnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSgzNjE2MSxpLHIsbi53aWR0aCxuLmhlaWdodCl9ZWxzZSB0LnJlbmRlcmJ1ZmZlclN0b3JhZ2UoMzYxNjEscixuLndpZHRoLG4uaGVpZ2h0KTt0LmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKDM2MTYwLDM2MDk2LDM2MTYxLGUpfWVsc2UgaWYobi5kZXB0aEJ1ZmZlciYmbi5zdGVuY2lsQnVmZmVyKXtpZihpKXtjb25zdCBlPU8obik7dC5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoMzYxNjEsZSwzNTA1NixuLndpZHRoLG4uaGVpZ2h0KX1lbHNlIHQucmVuZGVyYnVmZmVyU3RvcmFnZSgzNjE2MSwzNDA0MSxuLndpZHRoLG4uaGVpZ2h0KTt0LmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKDM2MTYwLDMzMzA2LDM2MTYxLGUpfWVsc2V7Y29uc3QgZT1vLmNvbnZlcnQobi50ZXh0dXJlLmZvcm1hdCkscj1vLmNvbnZlcnQobi50ZXh0dXJlLnR5cGUpLGE9YihuLnRleHR1cmUuaW50ZXJuYWxGb3JtYXQsZSxyKTtpZihpKXtjb25zdCBlPU8obik7dC5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoMzYxNjEsZSxhLG4ud2lkdGgsbi5oZWlnaHQpfWVsc2UgdC5yZW5kZXJidWZmZXJTdG9yYWdlKDM2MTYxLGEsbi53aWR0aCxuLmhlaWdodCl9dC5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLG51bGwpfWZ1bmN0aW9uIE8odCl7cmV0dXJuIHMmJnQuaXNXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0P01hdGgubWluKGgsdC5zYW1wbGVzKTowfWxldCBSPSExLHo9ITE7dGhpcy5hbGxvY2F0ZVRleHR1cmVVbml0PWZ1bmN0aW9uIEQoKXtjb25zdCB0PU07cmV0dXJuIHQ+PWwmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xUZXh0dXJlczogVHJ5aW5nIHRvIHVzZSAiK3QrIiB0ZXh0dXJlIHVuaXRzIHdoaWxlIHRoaXMgR1BVIHN1cHBvcnRzIG9ubHkgIitsKSxNKz0xLHR9LHRoaXMucmVzZXRUZXh0dXJlVW5pdHM9ZnVuY3Rpb24gQigpe009MH0sdGhpcy5zZXRUZXh0dXJlMkQ9RSx0aGlzLnNldFRleHR1cmUyREFycmF5PWZ1bmN0aW9uIEgodCxlKXtjb25zdCByPWkuZ2V0KHQpO3QudmVyc2lvbj4wJiZyLl9fdmVyc2lvbiE9PXQudmVyc2lvbj9QKHIsdCxlKToobi5hY3RpdmVUZXh0dXJlKDMzOTg0K2UpLG4uYmluZFRleHR1cmUoMzU4NjYsci5fX3dlYmdsVGV4dHVyZSkpfSx0aGlzLnNldFRleHR1cmUzRD1mdW5jdGlvbiBGKHQsZSl7Y29uc3Qgcj1pLmdldCh0KTt0LnZlcnNpb24+MCYmci5fX3ZlcnNpb24hPT10LnZlcnNpb24/UChyLHQsZSk6KG4uYWN0aXZlVGV4dHVyZSgzMzk4NCtlKSxuLmJpbmRUZXh0dXJlKDMyODc5LHIuX193ZWJnbFRleHR1cmUpKX0sdGhpcy5zZXRUZXh0dXJlQ3ViZT1ULHRoaXMuc2V0dXBSZW5kZXJUYXJnZXQ9ZnVuY3Rpb24gVihlKXtjb25zdCByPWkuZ2V0KGUpLGw9aS5nZXQoZS50ZXh0dXJlKTtlLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLFMpLGwuX193ZWJnbFRleHR1cmU9dC5jcmVhdGVUZXh0dXJlKCksYS5tZW1vcnkudGV4dHVyZXMrKztjb25zdCBjPSEwPT09ZS5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldCx1PSEwPT09ZS5pc1dlYkdMTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQsaD1fKGUpfHxzO2lmKCFzfHxlLnRleHR1cmUuZm9ybWF0IT09UUl0fHxlLnRleHR1cmUudHlwZSE9PUtJdCYmZS50ZXh0dXJlLnR5cGUhPT1aSXR8fChlLnRleHR1cmUuZm9ybWF0PXRPdCxjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFJlbmRlcmluZyB0byB0ZXh0dXJlcyB3aXRoIFJHQiBmb3JtYXQgaXMgbm90IHN1cHBvcnRlZC4gVXNpbmcgUkdCQSBmb3JtYXQgaW5zdGVhZC4iKSksYyl7ci5fX3dlYmdsRnJhbWVidWZmZXI9W107Zm9yKGxldCBlPTA7ZTw2O2UrKylyLl9fd2ViZ2xGcmFtZWJ1ZmZlcltlXT10LmNyZWF0ZUZyYW1lYnVmZmVyKCl9ZWxzZSBpZihyLl9fd2ViZ2xGcmFtZWJ1ZmZlcj10LmNyZWF0ZUZyYW1lYnVmZmVyKCksdSlpZihzKXtyLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlcj10LmNyZWF0ZUZyYW1lYnVmZmVyKCksci5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXI9dC5jcmVhdGVSZW5kZXJidWZmZXIoKSx0LmJpbmRSZW5kZXJidWZmZXIoMzYxNjEsci5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXIpO2NvbnN0IG49by5jb252ZXJ0KGUudGV4dHVyZS5mb3JtYXQpLGk9by5jb252ZXJ0KGUudGV4dHVyZS50eXBlKSxhPWIoZS50ZXh0dXJlLmludGVybmFsRm9ybWF0LG4saSkscz1PKGUpO3QucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKDM2MTYxLHMsYSxlLndpZHRoLGUuaGVpZ2h0KSx0LmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxyLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlciksdC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcigzNjE2MCwzNjA2NCwzNjE2MSxyLl9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlciksdC5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLG51bGwpLGUuZGVwdGhCdWZmZXImJihyLl9fd2ViZ2xEZXB0aFJlbmRlcmJ1ZmZlcj10LmNyZWF0ZVJlbmRlcmJ1ZmZlcigpLEkoci5fX3dlYmdsRGVwdGhSZW5kZXJidWZmZXIsZSwhMCkpLHQuYmluZEZyYW1lYnVmZmVyKDM2MTYwLG51bGwpfWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBXZWJHTDIuIik7aWYoYyl7bi5iaW5kVGV4dHVyZSgzNDA2NyxsLl9fd2ViZ2xUZXh0dXJlKSxrKDM0MDY3LGUudGV4dHVyZSxoKTtmb3IobGV0IHQ9MDt0PDY7dCsrKU4oci5fX3dlYmdsRnJhbWVidWZmZXJbdF0sZSwzNjA2NCwzNDA2OSt0KTt5KGUudGV4dHVyZSxoKSYmdigzNDA2NyxlLnRleHR1cmUsZS53aWR0aCxlLmhlaWdodCksbi5iaW5kVGV4dHVyZSgzNDA2NyxudWxsKX1lbHNlIG4uYmluZFRleHR1cmUoMzU1MyxsLl9fd2ViZ2xUZXh0dXJlKSxrKDM1NTMsZS50ZXh0dXJlLGgpLE4oci5fX3dlYmdsRnJhbWVidWZmZXIsZSwzNjA2NCwzNTUzKSx5KGUudGV4dHVyZSxoKSYmdigzNTUzLGUudGV4dHVyZSxlLndpZHRoLGUuaGVpZ2h0KSxuLmJpbmRUZXh0dXJlKDM1NTMsbnVsbCk7ZS5kZXB0aEJ1ZmZlciYmKGZ1bmN0aW9uIGQoZSl7Y29uc3Qgbj1pLmdldChlKSxyPSEwPT09ZS5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldDtpZihlLmRlcHRoVGV4dHVyZSl7aWYocil0aHJvdyBuZXcgRXJyb3IoInRhcmdldC5kZXB0aFRleHR1cmUgbm90IHN1cHBvcnRlZCBpbiBDdWJlIHJlbmRlciB0YXJnZXRzIik7IShmdW5jdGlvbiBvKGUsbil7aWYobiYmbi5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldCl0aHJvdyBuZXcgRXJyb3IoIkRlcHRoIFRleHR1cmUgd2l0aCBjdWJlIHJlbmRlciB0YXJnZXRzIGlzIG5vdCBzdXBwb3J0ZWQiKTtpZih0LmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxlKSwhbi5kZXB0aFRleHR1cmV8fCFuLmRlcHRoVGV4dHVyZS5pc0RlcHRoVGV4dHVyZSl0aHJvdyBuZXcgRXJyb3IoInJlbmRlclRhcmdldC5kZXB0aFRleHR1cmUgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBUSFJFRS5EZXB0aFRleHR1cmUiKTtpLmdldChuLmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmUmJm4uZGVwdGhUZXh0dXJlLmltYWdlLndpZHRoPT09bi53aWR0aCYmbi5kZXB0aFRleHR1cmUuaW1hZ2UuaGVpZ2h0PT09bi5oZWlnaHR8fChuLmRlcHRoVGV4dHVyZS5pbWFnZS53aWR0aD1uLndpZHRoLG4uZGVwdGhUZXh0dXJlLmltYWdlLmhlaWdodD1uLmhlaWdodCxuLmRlcHRoVGV4dHVyZS5uZWVkc1VwZGF0ZT0hMCksRShuLmRlcHRoVGV4dHVyZSwwKTtjb25zdCByPWkuZ2V0KG4uZGVwdGhUZXh0dXJlKS5fX3dlYmdsVGV4dHVyZTtpZihuLmRlcHRoVGV4dHVyZS5mb3JtYXQ9PT1lT3QpdC5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzNjA5NiwzNTUzLHIsMCk7ZWxzZXtpZihuLmRlcHRoVGV4dHVyZS5mb3JtYXQhPT1uT3QpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGRlcHRoVGV4dHVyZSBmb3JtYXQiKTt0LmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLDMzMzA2LDM1NTMsciwwKX19KShuLl9fd2ViZ2xGcmFtZWJ1ZmZlcixlKX1lbHNlIGlmKHIpe24uX193ZWJnbERlcHRoYnVmZmVyPVtdO2ZvcihsZXQgaT0wO2k8NjtpKyspdC5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbi5fX3dlYmdsRnJhbWVidWZmZXJbaV0pLG4uX193ZWJnbERlcHRoYnVmZmVyW2ldPXQuY3JlYXRlUmVuZGVyYnVmZmVyKCksSShuLl9fd2ViZ2xEZXB0aGJ1ZmZlcltpXSxlLCExKX1lbHNlIHQuYmluZEZyYW1lYnVmZmVyKDM2MTYwLG4uX193ZWJnbEZyYW1lYnVmZmVyKSxuLl9fd2ViZ2xEZXB0aGJ1ZmZlcj10LmNyZWF0ZVJlbmRlcmJ1ZmZlcigpLEkobi5fX3dlYmdsRGVwdGhidWZmZXIsZSwhMSk7dC5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCl9KShlKX0sdGhpcy51cGRhdGVSZW5kZXJUYXJnZXRNaXBtYXA9ZnVuY3Rpb24gVSh0KXtjb25zdCBlPXQudGV4dHVyZTtpZih5KGUsXyh0KXx8cykpe2NvbnN0IHI9dC5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldD8zNDA2NzozNTUzLG89aS5nZXQoZSkuX193ZWJnbFRleHR1cmU7bi5iaW5kVGV4dHVyZShyLG8pLHYocixlLHQud2lkdGgsdC5oZWlnaHQpLG4uYmluZFRleHR1cmUocixudWxsKX19LHRoaXMudXBkYXRlTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQ9ZnVuY3Rpb24gaihlKXtpZihlLmlzV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldClpZihzKXtjb25zdCBuPWkuZ2V0KGUpO3QuYmluZEZyYW1lYnVmZmVyKDM2MDA4LG4uX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyKSx0LmJpbmRGcmFtZWJ1ZmZlcigzNjAwOSxuLl9fd2ViZ2xGcmFtZWJ1ZmZlcik7Y29uc3Qgcj1lLndpZHRoLG89ZS5oZWlnaHQ7bGV0IGE9MTYzODQ7ZS5kZXB0aEJ1ZmZlciYmKGF8PTI1NiksZS5zdGVuY2lsQnVmZmVyJiYoYXw9MTAyNCksdC5ibGl0RnJhbWVidWZmZXIoMCwwLHIsbywwLDAscixvLGEsOTcyOCksdC5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbi5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXIpfWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBXZWJHTDIuIil9LHRoaXMuc2FmZVNldFRleHR1cmUyRD1mdW5jdGlvbiBHKHQsZSl7dCYmdC5pc1dlYkdMUmVuZGVyVGFyZ2V0JiYoITE9PT1SJiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFRleHR1cmVzLnNhZmVTZXRUZXh0dXJlMkQ6IGRvbid0IHVzZSByZW5kZXIgdGFyZ2V0cyBhcyB0ZXh0dXJlcy4gVXNlIHRoZWlyIC50ZXh0dXJlIHByb3BlcnR5IGluc3RlYWQuIiksUj0hMCksdD10LnRleHR1cmUpLEUodCxlKX0sdGhpcy5zYWZlU2V0VGV4dHVyZUN1YmU9ZnVuY3Rpb24gVyh0LGUpe3QmJnQuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQmJighMT09PXomJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMVGV4dHVyZXMuc2FmZVNldFRleHR1cmVDdWJlOiBkb24ndCB1c2UgY3ViZSByZW5kZXIgdGFyZ2V0cyBhcyB0ZXh0dXJlcy4gVXNlIHRoZWlyIC50ZXh0dXJlIHByb3BlcnR5IGluc3RlYWQuIiksej0hMCksdD10LnRleHR1cmUpLFQodCxlKX19ZnVuY3Rpb24gd0h0KHQsZSxuKXtjb25zdCBpPW4uaXNXZWJHTDI7cmV0dXJue2NvbnZlcnQ6ZnVuY3Rpb24gcih0KXtsZXQgbjtpZih0PT09WUl0KXJldHVybiA1MTIxO2lmKDEwMTc9PT10KXJldHVybiAzMjgxOTtpZigxMDE4PT09dClyZXR1cm4gMzI4MjA7aWYoMTAxOT09PXQpcmV0dXJuIDMzNjM1O2lmKDEwMTA9PT10KXJldHVybiA1MTIwO2lmKDEwMTE9PT10KXJldHVybiA1MTIyO2lmKHQ9PT1YSXQpcmV0dXJuIDUxMjM7aWYoMTAxMz09PXQpcmV0dXJuIDUxMjQ7aWYodD09PSRJdClyZXR1cm4gNTEyNTtpZih0PT09S0l0KXJldHVybiA1MTI2O2lmKHQ9PT1aSXQpcmV0dXJuIGk/NTEzMToobj1lLmdldCgiT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpLG51bGwhPT1uP24uSEFMRl9GTE9BVF9PRVM6bnVsbCk7aWYoMTAyMT09PXQpcmV0dXJuIDY0MDY7aWYodD09PVFJdClyZXR1cm4gNjQwNztpZih0PT09dE90KXJldHVybiA2NDA4O2lmKDEwMjQ9PT10KXJldHVybiA2NDA5O2lmKDEwMjU9PT10KXJldHVybiA2NDEwO2lmKHQ9PT1lT3QpcmV0dXJuIDY0MDI7aWYodD09PW5PdClyZXR1cm4gMzQwNDE7aWYoMTAyOD09PXQpcmV0dXJuIDY0MDM7aWYoMTAyOT09PXQpcmV0dXJuIDM2MjQ0O2lmKDEwMzA9PT10KXJldHVybiAzMzMxOTtpZigxMDMxPT09dClyZXR1cm4gMzMzMjA7aWYoMTAzMj09PXQpcmV0dXJuIDM2MjQ4O2lmKDEwMzM9PT10KXJldHVybiAzNjI0OTtpZih0PT09aU90fHx0PT09ck90fHx0PT09b090fHx0PT09YU90KXtpZihuPWUuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpLG51bGw9PT1uKXJldHVybiBudWxsO2lmKHQ9PT1pT3QpcmV0dXJuIG4uQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDtpZih0PT09ck90KXJldHVybiBuLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUO2lmKHQ9PT1vT3QpcmV0dXJuIG4uQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19FWFQ7aWYodD09PWFPdClyZXR1cm4gbi5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVH1pZih0PT09c090fHx0PT09bE90fHx0PT09Y090fHx0PT09dU90KXtpZihuPWUuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKSxudWxsPT09bilyZXR1cm4gbnVsbDtpZih0PT09c090KXJldHVybiBuLkNPTVBSRVNTRURfUkdCX1BWUlRDXzRCUFBWMV9JTUc7aWYodD09PWxPdClyZXR1cm4gbi5DT01QUkVTU0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1HO2lmKHQ9PT1jT3QpcmV0dXJuIG4uQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzRCUFBWMV9JTUc7aWYodD09PXVPdClyZXR1cm4gbi5DT01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNR31pZigzNjE5Nj09PXQpcmV0dXJuIG49ZS5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9ldGMxIiksbnVsbCE9PW4/bi5DT01QUkVTU0VEX1JHQl9FVEMxX1dFQkdMOm51bGw7aWYoKHQ9PT1oT3R8fHQ9PT1kT3QpJiYobj1lLmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2V0YyIpLG51bGwhPT1uKSl7aWYodD09PWhPdClyZXR1cm4gbi5DT01QUkVTU0VEX1JHQjhfRVRDMjtpZih0PT09ZE90KXJldHVybiBuLkNPTVBSRVNTRURfUkdCQThfRVRDMl9FQUN9cmV0dXJuIDM3ODA4PT09dHx8Mzc4MDk9PT10fHwzNzgxMD09PXR8fDM3ODExPT09dHx8Mzc4MTI9PT10fHwzNzgxMz09PXR8fDM3ODE0PT09dHx8Mzc4MTU9PT10fHwzNzgxNj09PXR8fDM3ODE3PT09dHx8Mzc4MTg9PT10fHwzNzgxOT09PXR8fDM3ODIwPT09dHx8Mzc4MjE9PT10fHwzNzg0MD09PXR8fDM3ODQxPT09dHx8Mzc4NDI9PT10fHwzNzg0Mz09PXR8fDM3ODQ0PT09dHx8Mzc4NDU9PT10fHwzNzg0Nj09PXR8fDM3ODQ3PT09dHx8Mzc4NDg9PT10fHwzNzg0OT09PXR8fDM3ODUwPT09dHx8Mzc4NTE9PT10fHwzNzg1Mj09PXR8fDM3ODUzPT09dD8obj1lLmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2FzdGMiKSxudWxsIT09bj90Om51bGwpOjM2NDkyPT09dD8obj1lLmdldCgiRVhUX3RleHR1cmVfY29tcHJlc3Npb25fYnB0YyIpLG51bGwhPT1uP3Q6bnVsbCk6dD09PUpJdD9pPzM0MDQyOihuPWUuZ2V0KCJXRUJHTF9kZXB0aF90ZXh0dXJlIiksbnVsbCE9PW4/bi5VTlNJR05FRF9JTlRfMjRfOF9XRUJHTDpudWxsKTp2b2lkIDB9fX1mdW5jdGlvbiBTSHQodD1bXSl7cER0LmNhbGwodGhpcyksdGhpcy5jYW1lcmFzPXR9ZnVuY3Rpb24gTUh0KCl7V1J0LmNhbGwodGhpcyksdGhpcy50eXBlPSJHcm91cCJ9ZnVuY3Rpb24gRUh0KCl7dGhpcy5fdGFyZ2V0UmF5PW51bGwsdGhpcy5fZ3JpcD1udWxsLHRoaXMuX2hhbmQ9bnVsbH1mdW5jdGlvbiBUSHQodCxlKXtjb25zdCBuPXRoaXM7bGV0IGk9bnVsbCxyPTEsbz1udWxsLGE9ImxvY2FsLWZsb29yIixzPW51bGw7Y29uc3QgbD1bXSxjPW5ldyBNYXAsdT1uZXcgcER0O3UubGF5ZXJzLmVuYWJsZSgxKSx1LnZpZXdwb3J0PW5ldyBqT3Q7Y29uc3QgaD1uZXcgcER0O2gubGF5ZXJzLmVuYWJsZSgyKSxoLnZpZXdwb3J0PW5ldyBqT3Q7Y29uc3QgZD1bdSxoXSxwPW5ldyBTSHQ7cC5sYXllcnMuZW5hYmxlKDEpLHAubGF5ZXJzLmVuYWJsZSgyKTtsZXQgZj1udWxsLG09bnVsbDtmdW5jdGlvbiBnKHQpe2NvbnN0IGU9Yy5nZXQodC5pbnB1dFNvdXJjZSk7ZSYmZS5kaXNwYXRjaEV2ZW50KHt0eXBlOnQudHlwZSxkYXRhOnQuaW5wdXRTb3VyY2V9KX1mdW5jdGlvbiBfKCl7Yy5mb3JFYWNoKChmdW5jdGlvbih0LGUpe3QuZGlzY29ubmVjdChlKX0pKSxjLmNsZWFyKCksZj1udWxsLG09bnVsbCx0LnNldEZyYW1lYnVmZmVyKG51bGwpLHQuc2V0UmVuZGVyVGFyZ2V0KHQuZ2V0UmVuZGVyVGFyZ2V0KCkpLFMuc3RvcCgpLG4uaXNQcmVzZW50aW5nPSExLG4uZGlzcGF0Y2hFdmVudCh7dHlwZToic2Vzc2lvbmVuZCJ9KX1mdW5jdGlvbiB5KHQpe2NvbnN0IGU9aS5pbnB1dFNvdXJjZXM7Zm9yKGxldCB0PTA7dDxsLmxlbmd0aDt0KyspYy5zZXQoZVt0XSxsW3RdKTtmb3IobGV0IGU9MDtlPHQucmVtb3ZlZC5sZW5ndGg7ZSsrKXtjb25zdCBuPXQucmVtb3ZlZFtlXSxpPWMuZ2V0KG4pO2kmJihpLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc2Nvbm5lY3RlZCIsZGF0YTpufSksYy5kZWxldGUobikpfWZvcihsZXQgZT0wO2U8dC5hZGRlZC5sZW5ndGg7ZSsrKXtjb25zdCBuPXQuYWRkZWRbZV0saT1jLmdldChuKTtpJiZpLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImNvbm5lY3RlZCIsZGF0YTpufSl9fXRoaXMuZW5hYmxlZD0hMSx0aGlzLmlzUHJlc2VudGluZz0hMSx0aGlzLmdldENvbnRyb2xsZXI9ZnVuY3Rpb24odCl7bGV0IGU9bFt0XTtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9bmV3IEVIdCxsW3RdPWUpLGUuZ2V0VGFyZ2V0UmF5U3BhY2UoKX0sdGhpcy5nZXRDb250cm9sbGVyR3JpcD1mdW5jdGlvbih0KXtsZXQgZT1sW3RdO3JldHVybiB2b2lkIDA9PT1lJiYoZT1uZXcgRUh0LGxbdF09ZSksZS5nZXRHcmlwU3BhY2UoKX0sdGhpcy5nZXRIYW5kPWZ1bmN0aW9uKHQpe2xldCBlPWxbdF07cmV0dXJuIHZvaWQgMD09PWUmJihlPW5ldyBFSHQsbFt0XT1lKSxlLmdldEhhbmRTcGFjZSgpfSx0aGlzLnNldEZyYW1lYnVmZmVyU2NhbGVGYWN0b3I9ZnVuY3Rpb24odCl7cj10LCEwPT09bi5pc1ByZXNlbnRpbmcmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViWFJNYW5hZ2VyOiBDYW5ub3QgY2hhbmdlIGZyYW1lYnVmZmVyIHNjYWxlIHdoaWxlIHByZXNlbnRpbmcuIil9LHRoaXMuc2V0UmVmZXJlbmNlU3BhY2VUeXBlPWZ1bmN0aW9uKHQpe2E9dCwhMD09PW4uaXNQcmVzZW50aW5nJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYlhSTWFuYWdlcjogQ2Fubm90IGNoYW5nZSByZWZlcmVuY2Ugc3BhY2UgdHlwZSB3aGlsZSBwcmVzZW50aW5nLiIpfSx0aGlzLmdldFJlZmVyZW5jZVNwYWNlPWZ1bmN0aW9uKCl7cmV0dXJuIG99LHRoaXMuZ2V0U2Vzc2lvbj1mdW5jdGlvbigpe3JldHVybiBpfSx0aGlzLnNldFNlc3Npb249YXN5bmMgZnVuY3Rpb24odCl7aWYoaT10LG51bGwhPT1pKXtpLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdCIsZyksaS5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3RzdGFydCIsZyksaS5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3RlbmQiLGcpLGkuYWRkRXZlbnRMaXN0ZW5lcigic3F1ZWV6ZSIsZyksaS5hZGRFdmVudExpc3RlbmVyKCJzcXVlZXplc3RhcnQiLGcpLGkuYWRkRXZlbnRMaXN0ZW5lcigic3F1ZWV6ZWVuZCIsZyksaS5hZGRFdmVudExpc3RlbmVyKCJlbmQiLF8pLGkuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXRzb3VyY2VzY2hhbmdlIix5KTtjb25zdCB0PWUuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKTshMCE9PXQueHJDb21wYXRpYmxlJiZhd2FpdCBlLm1ha2VYUkNvbXBhdGlibGUoKTtjb25zdCBzPW5ldyBYUldlYkdMTGF5ZXIoaSxlLHthbnRpYWxpYXM6dC5hbnRpYWxpYXMsYWxwaGE6dC5hbHBoYSxkZXB0aDp0LmRlcHRoLHN0ZW5jaWw6dC5zdGVuY2lsLGZyYW1lYnVmZmVyU2NhbGVGYWN0b3I6cn0pO2kudXBkYXRlUmVuZGVyU3RhdGUoe2Jhc2VMYXllcjpzfSksbz1hd2FpdCBpLnJlcXVlc3RSZWZlcmVuY2VTcGFjZShhKSxTLnNldENvbnRleHQoaSksUy5zdGFydCgpLG4uaXNQcmVzZW50aW5nPSEwLG4uZGlzcGF0Y2hFdmVudCh7dHlwZToic2Vzc2lvbnN0YXJ0In0pfX07Y29uc3Qgdj1uZXcgcU90LGI9bmV3IHFPdDtmdW5jdGlvbiB4KHQsZSl7bnVsbD09PWU/dC5tYXRyaXhXb3JsZC5jb3B5KHQubWF0cml4KTp0Lm1hdHJpeFdvcmxkLm11bHRpcGx5TWF0cmljZXMoZS5tYXRyaXhXb3JsZCx0Lm1hdHJpeCksdC5tYXRyaXhXb3JsZEludmVyc2UuY29weSh0Lm1hdHJpeFdvcmxkKS5pbnZlcnQoKX10aGlzLmdldENhbWVyYT1mdW5jdGlvbih0KXtwLm5lYXI9aC5uZWFyPXUubmVhcj10Lm5lYXIscC5mYXI9aC5mYXI9dS5mYXI9dC5mYXIsZj09PXAubmVhciYmbT09PXAuZmFyfHwoaS51cGRhdGVSZW5kZXJTdGF0ZSh7ZGVwdGhOZWFyOnAubmVhcixkZXB0aEZhcjpwLmZhcn0pLGY9cC5uZWFyLG09cC5mYXIpO2NvbnN0IGU9dC5wYXJlbnQsbj1wLmNhbWVyYXM7eChwLGUpO2ZvcihsZXQgdD0wO3Q8bi5sZW5ndGg7dCsrKXgoblt0XSxlKTt0Lm1hdHJpeFdvcmxkLmNvcHkocC5tYXRyaXhXb3JsZCksdC5tYXRyaXguY29weShwLm1hdHJpeCksdC5tYXRyaXguZGVjb21wb3NlKHQucG9zaXRpb24sdC5xdWF0ZXJuaW9uLHQuc2NhbGUpO2NvbnN0IHI9dC5jaGlsZHJlbjtmb3IobGV0IHQ9MCxlPXIubGVuZ3RoO3Q8ZTt0Kyspclt0XS51cGRhdGVNYXRyaXhXb3JsZCghMCk7cmV0dXJuIDI9PT1uLmxlbmd0aD8oZnVuY3Rpb24gbyh0LGUsbil7di5zZXRGcm9tTWF0cml4UG9zaXRpb24oZS5tYXRyaXhXb3JsZCksYi5zZXRGcm9tTWF0cml4UG9zaXRpb24obi5tYXRyaXhXb3JsZCk7Y29uc3QgaT12LmRpc3RhbmNlVG8oYikscj1lLnByb2plY3Rpb25NYXRyaXguZWxlbWVudHMsbz1uLnByb2plY3Rpb25NYXRyaXguZWxlbWVudHMsYT1yWzE0XS8oclsxMF0tMSkscz1yWzE0XS8oclsxMF0rMSksbD0ocls5XSsxKS9yWzVdLGM9KHJbOV0tMSkvcls1XSx1PShyWzhdLTEpL3JbMF0saD0ob1s4XSsxKS9vWzBdLGQ9YSp1LHA9YSpoLGY9aS8oLXUraCksbT1mKi11O2UubWF0cml4V29ybGQuZGVjb21wb3NlKHQucG9zaXRpb24sdC5xdWF0ZXJuaW9uLHQuc2NhbGUpLHQudHJhbnNsYXRlWChtKSx0LnRyYW5zbGF0ZVooZiksdC5tYXRyaXhXb3JsZC5jb21wb3NlKHQucG9zaXRpb24sdC5xdWF0ZXJuaW9uLHQuc2NhbGUpLHQubWF0cml4V29ybGRJbnZlcnNlLmNvcHkodC5tYXRyaXhXb3JsZCkuaW52ZXJ0KCk7Y29uc3QgZz1hK2YsXz1zK2Y7dC5wcm9qZWN0aW9uTWF0cml4Lm1ha2VQZXJzcGVjdGl2ZShkLW0scCsoaS1tKSxsKnMvXypnLGMqcy9fKmcsZyxfKX0pKHAsdSxoKTpwLnByb2plY3Rpb25NYXRyaXguY29weSh1LnByb2plY3Rpb25NYXRyaXgpLHB9O2xldCB3PW51bGw7Y29uc3QgUz1uZXcgd0R0O1Muc2V0QW5pbWF0aW9uTG9vcCgoZnVuY3Rpb24gTShlLG4pe2lmKHM9bi5nZXRWaWV3ZXJQb3NlKG8pLG51bGwhPT1zKXtjb25zdCBlPXMudmlld3Msbj1pLnJlbmRlclN0YXRlLmJhc2VMYXllcjt0LnNldEZyYW1lYnVmZmVyKG4uZnJhbWVidWZmZXIpO2xldCByPSExO2UubGVuZ3RoIT09cC5jYW1lcmFzLmxlbmd0aCYmKHAuY2FtZXJhcy5sZW5ndGg9MCxyPSEwKTtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyl7Y29uc3QgaT1lW3RdLG89bi5nZXRWaWV3cG9ydChpKSxhPWRbdF07YS5tYXRyaXguZnJvbUFycmF5KGkudHJhbnNmb3JtLm1hdHJpeCksYS5wcm9qZWN0aW9uTWF0cml4LmZyb21BcnJheShpLnByb2plY3Rpb25NYXRyaXgpLGEudmlld3BvcnQuc2V0KG8ueCxvLnksby53aWR0aCxvLmhlaWdodCksMD09PXQmJnAubWF0cml4LmNvcHkoYS5tYXRyaXgpLCEwPT09ciYmcC5jYW1lcmFzLnB1c2goYSl9fWNvbnN0IHI9aS5pbnB1dFNvdXJjZXM7Zm9yKGxldCB0PTA7dDxsLmxlbmd0aDt0KyspbFt0XS51cGRhdGUoclt0XSxuLG8pO3cmJncoZSxuKX0pKSx0aGlzLnNldEFuaW1hdGlvbkxvb3A9ZnVuY3Rpb24odCl7dz10fSx0aGlzLmRpc3Bvc2U9ZnVuY3Rpb24oKXt9fWZ1bmN0aW9uIENIdCh0KXtmdW5jdGlvbiBlKGUsbil7ZS5vcGFjaXR5LnZhbHVlPW4ub3BhY2l0eSxuLmNvbG9yJiZlLmRpZmZ1c2UudmFsdWUuY29weShuLmNvbG9yKSxuLmVtaXNzaXZlJiZlLmVtaXNzaXZlLnZhbHVlLmNvcHkobi5lbWlzc2l2ZSkubXVsdGlwbHlTY2FsYXIobi5lbWlzc2l2ZUludGVuc2l0eSksbi5tYXAmJihlLm1hcC52YWx1ZT1uLm1hcCksbi5hbHBoYU1hcCYmKGUuYWxwaGFNYXAudmFsdWU9bi5hbHBoYU1hcCksbi5zcGVjdWxhck1hcCYmKGUuc3BlY3VsYXJNYXAudmFsdWU9bi5zcGVjdWxhck1hcCk7Y29uc3QgaT10LmdldChuKS5lbnZNYXA7aWYoaSl7ZS5lbnZNYXAudmFsdWU9aSxlLmZsaXBFbnZNYXAudmFsdWU9aS5pc0N1YmVUZXh0dXJlJiZpLl9uZWVkc0ZsaXBFbnZNYXA/LTE6MSxlLnJlZmxlY3Rpdml0eS52YWx1ZT1uLnJlZmxlY3Rpdml0eSxlLnJlZnJhY3Rpb25SYXRpby52YWx1ZT1uLnJlZnJhY3Rpb25SYXRpbztjb25zdCByPXQuZ2V0KGkpLl9fbWF4TWlwTGV2ZWw7dm9pZCAwIT09ciYmKGUubWF4TWlwTGV2ZWwudmFsdWU9cil9bGV0IHIsbztuLmxpZ2h0TWFwJiYoZS5saWdodE1hcC52YWx1ZT1uLmxpZ2h0TWFwLGUubGlnaHRNYXBJbnRlbnNpdHkudmFsdWU9bi5saWdodE1hcEludGVuc2l0eSksbi5hb01hcCYmKGUuYW9NYXAudmFsdWU9bi5hb01hcCxlLmFvTWFwSW50ZW5zaXR5LnZhbHVlPW4uYW9NYXBJbnRlbnNpdHkpLG4ubWFwP3I9bi5tYXA6bi5zcGVjdWxhck1hcD9yPW4uc3BlY3VsYXJNYXA6bi5kaXNwbGFjZW1lbnRNYXA/cj1uLmRpc3BsYWNlbWVudE1hcDpuLm5vcm1hbE1hcD9yPW4ubm9ybWFsTWFwOm4uYnVtcE1hcD9yPW4uYnVtcE1hcDpuLnJvdWdobmVzc01hcD9yPW4ucm91Z2huZXNzTWFwOm4ubWV0YWxuZXNzTWFwP3I9bi5tZXRhbG5lc3NNYXA6bi5hbHBoYU1hcD9yPW4uYWxwaGFNYXA6bi5lbWlzc2l2ZU1hcD9yPW4uZW1pc3NpdmVNYXA6bi5jbGVhcmNvYXRNYXA/cj1uLmNsZWFyY29hdE1hcDpuLmNsZWFyY29hdE5vcm1hbE1hcD9yPW4uY2xlYXJjb2F0Tm9ybWFsTWFwOm4uY2xlYXJjb2F0Um91Z2huZXNzTWFwJiYocj1uLmNsZWFyY29hdFJvdWdobmVzc01hcCksdm9pZCAwIT09ciYmKHIuaXNXZWJHTFJlbmRlclRhcmdldCYmKHI9ci50ZXh0dXJlKSwhMD09PXIubWF0cml4QXV0b1VwZGF0ZSYmci51cGRhdGVNYXRyaXgoKSxlLnV2VHJhbnNmb3JtLnZhbHVlLmNvcHkoci5tYXRyaXgpKSxuLmFvTWFwP289bi5hb01hcDpuLmxpZ2h0TWFwJiYobz1uLmxpZ2h0TWFwKSx2b2lkIDAhPT1vJiYoby5pc1dlYkdMUmVuZGVyVGFyZ2V0JiYobz1vLnRleHR1cmUpLCEwPT09by5tYXRyaXhBdXRvVXBkYXRlJiZvLnVwZGF0ZU1hdHJpeCgpLGUudXYyVHJhbnNmb3JtLnZhbHVlLmNvcHkoby5tYXRyaXgpKX1mdW5jdGlvbiBuKGUsbil7ZS5yb3VnaG5lc3MudmFsdWU9bi5yb3VnaG5lc3MsZS5tZXRhbG5lc3MudmFsdWU9bi5tZXRhbG5lc3Msbi5yb3VnaG5lc3NNYXAmJihlLnJvdWdobmVzc01hcC52YWx1ZT1uLnJvdWdobmVzc01hcCksbi5tZXRhbG5lc3NNYXAmJihlLm1ldGFsbmVzc01hcC52YWx1ZT1uLm1ldGFsbmVzc01hcCksbi5lbWlzc2l2ZU1hcCYmKGUuZW1pc3NpdmVNYXAudmFsdWU9bi5lbWlzc2l2ZU1hcCksbi5idW1wTWFwJiYoZS5idW1wTWFwLnZhbHVlPW4uYnVtcE1hcCxlLmJ1bXBTY2FsZS52YWx1ZT1uLmJ1bXBTY2FsZSwxPT09bi5zaWRlJiYoZS5idW1wU2NhbGUudmFsdWUqPS0xKSksbi5ub3JtYWxNYXAmJihlLm5vcm1hbE1hcC52YWx1ZT1uLm5vcm1hbE1hcCxlLm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkobi5ub3JtYWxTY2FsZSksMT09PW4uc2lkZSYmZS5ub3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKSksbi5kaXNwbGFjZW1lbnRNYXAmJihlLmRpc3BsYWNlbWVudE1hcC52YWx1ZT1uLmRpc3BsYWNlbWVudE1hcCxlLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPW4uZGlzcGxhY2VtZW50U2NhbGUsZS5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPW4uZGlzcGxhY2VtZW50QmlhcyksdC5nZXQobikuZW52TWFwJiYoZS5lbnZNYXBJbnRlbnNpdHkudmFsdWU9bi5lbnZNYXBJbnRlbnNpdHkpfXJldHVybntyZWZyZXNoRm9nVW5pZm9ybXM6ZnVuY3Rpb24gaSh0LGUpe3QuZm9nQ29sb3IudmFsdWUuY29weShlLmNvbG9yKSxlLmlzRm9nPyh0LmZvZ05lYXIudmFsdWU9ZS5uZWFyLHQuZm9nRmFyLnZhbHVlPWUuZmFyKTplLmlzRm9nRXhwMiYmKHQuZm9nRGVuc2l0eS52YWx1ZT1lLmRlbnNpdHkpfSxyZWZyZXNoTWF0ZXJpYWxVbmlmb3JtczpmdW5jdGlvbiByKHQsaSxvLGEpe2kuaXNNZXNoQmFzaWNNYXRlcmlhbD9lKHQsaSk6aS5pc01lc2hMYW1iZXJ0TWF0ZXJpYWw/KGUodCxpKSwoZnVuY3Rpb24gcyh0LGUpe2UuZW1pc3NpdmVNYXAmJih0LmVtaXNzaXZlTWFwLnZhbHVlPWUuZW1pc3NpdmVNYXApfSkodCxpKSk6aS5pc01lc2hUb29uTWF0ZXJpYWw/KGUodCxpKSwoZnVuY3Rpb24gbCh0LGUpe2UuZ3JhZGllbnRNYXAmJih0LmdyYWRpZW50TWFwLnZhbHVlPWUuZ3JhZGllbnRNYXApLGUuZW1pc3NpdmVNYXAmJih0LmVtaXNzaXZlTWFwLnZhbHVlPWUuZW1pc3NpdmVNYXApLGUuYnVtcE1hcCYmKHQuYnVtcE1hcC52YWx1ZT1lLmJ1bXBNYXAsdC5idW1wU2NhbGUudmFsdWU9ZS5idW1wU2NhbGUsMT09PWUuc2lkZSYmKHQuYnVtcFNjYWxlLnZhbHVlKj0tMSkpLGUubm9ybWFsTWFwJiYodC5ub3JtYWxNYXAudmFsdWU9ZS5ub3JtYWxNYXAsdC5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KGUubm9ybWFsU2NhbGUpLDE9PT1lLnNpZGUmJnQubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLGUuZGlzcGxhY2VtZW50TWFwJiYodC5kaXNwbGFjZW1lbnRNYXAudmFsdWU9ZS5kaXNwbGFjZW1lbnRNYXAsdC5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT1lLmRpc3BsYWNlbWVudFNjYWxlLHQuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT1lLmRpc3BsYWNlbWVudEJpYXMpfSkodCxpKSk6aS5pc01lc2hQaG9uZ01hdGVyaWFsPyhlKHQsaSksKGZ1bmN0aW9uIGModCxlKXt0LnNwZWN1bGFyLnZhbHVlLmNvcHkoZS5zcGVjdWxhciksdC5zaGluaW5lc3MudmFsdWU9TWF0aC5tYXgoZS5zaGluaW5lc3MsMWUtNCksZS5lbWlzc2l2ZU1hcCYmKHQuZW1pc3NpdmVNYXAudmFsdWU9ZS5lbWlzc2l2ZU1hcCksZS5idW1wTWFwJiYodC5idW1wTWFwLnZhbHVlPWUuYnVtcE1hcCx0LmJ1bXBTY2FsZS52YWx1ZT1lLmJ1bXBTY2FsZSwxPT09ZS5zaWRlJiYodC5idW1wU2NhbGUudmFsdWUqPS0xKSksZS5ub3JtYWxNYXAmJih0Lm5vcm1hbE1hcC52YWx1ZT1lLm5vcm1hbE1hcCx0Lm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoZS5ub3JtYWxTY2FsZSksMT09PWUuc2lkZSYmdC5ub3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKSksZS5kaXNwbGFjZW1lbnRNYXAmJih0LmRpc3BsYWNlbWVudE1hcC52YWx1ZT1lLmRpc3BsYWNlbWVudE1hcCx0LmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPWUuZGlzcGxhY2VtZW50U2NhbGUsdC5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPWUuZGlzcGxhY2VtZW50Qmlhcyl9KSh0LGkpKTppLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/KGUodCxpKSxpLmlzTWVzaFBoeXNpY2FsTWF0ZXJpYWw/KGZ1bmN0aW9uIHUodCxlKXtuKHQsZSksdC5yZWZsZWN0aXZpdHkudmFsdWU9ZS5yZWZsZWN0aXZpdHksdC5jbGVhcmNvYXQudmFsdWU9ZS5jbGVhcmNvYXQsdC5jbGVhcmNvYXRSb3VnaG5lc3MudmFsdWU9ZS5jbGVhcmNvYXRSb3VnaG5lc3MsZS5zaGVlbiYmdC5zaGVlbi52YWx1ZS5jb3B5KGUuc2hlZW4pLGUuY2xlYXJjb2F0TWFwJiYodC5jbGVhcmNvYXRNYXAudmFsdWU9ZS5jbGVhcmNvYXRNYXApLGUuY2xlYXJjb2F0Um91Z2huZXNzTWFwJiYodC5jbGVhcmNvYXRSb3VnaG5lc3NNYXAudmFsdWU9ZS5jbGVhcmNvYXRSb3VnaG5lc3NNYXApLGUuY2xlYXJjb2F0Tm9ybWFsTWFwJiYodC5jbGVhcmNvYXROb3JtYWxTY2FsZS52YWx1ZS5jb3B5KGUuY2xlYXJjb2F0Tm9ybWFsU2NhbGUpLHQuY2xlYXJjb2F0Tm9ybWFsTWFwLnZhbHVlPWUuY2xlYXJjb2F0Tm9ybWFsTWFwLDE9PT1lLnNpZGUmJnQuY2xlYXJjb2F0Tm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLHQudHJhbnNtaXNzaW9uLnZhbHVlPWUudHJhbnNtaXNzaW9uLGUudHJhbnNtaXNzaW9uTWFwJiYodC50cmFuc21pc3Npb25NYXAudmFsdWU9ZS50cmFuc21pc3Npb25NYXApfSkodCxpKTpuKHQsaSkpOmkuaXNNZXNoTWF0Y2FwTWF0ZXJpYWw/KGUodCxpKSwoZnVuY3Rpb24gaCh0LGUpe2UubWF0Y2FwJiYodC5tYXRjYXAudmFsdWU9ZS5tYXRjYXApLGUuYnVtcE1hcCYmKHQuYnVtcE1hcC52YWx1ZT1lLmJ1bXBNYXAsdC5idW1wU2NhbGUudmFsdWU9ZS5idW1wU2NhbGUsMT09PWUuc2lkZSYmKHQuYnVtcFNjYWxlLnZhbHVlKj0tMSkpLGUubm9ybWFsTWFwJiYodC5ub3JtYWxNYXAudmFsdWU9ZS5ub3JtYWxNYXAsdC5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KGUubm9ybWFsU2NhbGUpLDE9PT1lLnNpZGUmJnQubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLGUuZGlzcGxhY2VtZW50TWFwJiYodC5kaXNwbGFjZW1lbnRNYXAudmFsdWU9ZS5kaXNwbGFjZW1lbnRNYXAsdC5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT1lLmRpc3BsYWNlbWVudFNjYWxlLHQuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT1lLmRpc3BsYWNlbWVudEJpYXMpfSkodCxpKSk6aS5pc01lc2hEZXB0aE1hdGVyaWFsPyhlKHQsaSksKGZ1bmN0aW9uIGQodCxlKXtlLmRpc3BsYWNlbWVudE1hcCYmKHQuZGlzcGxhY2VtZW50TWFwLnZhbHVlPWUuZGlzcGxhY2VtZW50TWFwLHQuZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9ZS5kaXNwbGFjZW1lbnRTY2FsZSx0LmRpc3BsYWNlbWVudEJpYXMudmFsdWU9ZS5kaXNwbGFjZW1lbnRCaWFzKX0pKHQsaSkpOmkuaXNNZXNoRGlzdGFuY2VNYXRlcmlhbD8oZSh0LGkpLChmdW5jdGlvbiBwKHQsZSl7ZS5kaXNwbGFjZW1lbnRNYXAmJih0LmRpc3BsYWNlbWVudE1hcC52YWx1ZT1lLmRpc3BsYWNlbWVudE1hcCx0LmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPWUuZGlzcGxhY2VtZW50U2NhbGUsdC5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPWUuZGlzcGxhY2VtZW50QmlhcyksdC5yZWZlcmVuY2VQb3NpdGlvbi52YWx1ZS5jb3B5KGUucmVmZXJlbmNlUG9zaXRpb24pLHQubmVhckRpc3RhbmNlLnZhbHVlPWUubmVhckRpc3RhbmNlLHQuZmFyRGlzdGFuY2UudmFsdWU9ZS5mYXJEaXN0YW5jZX0pKHQsaSkpOmkuaXNNZXNoTm9ybWFsTWF0ZXJpYWw/KGUodCxpKSwoZnVuY3Rpb24gZih0LGUpe2UuYnVtcE1hcCYmKHQuYnVtcE1hcC52YWx1ZT1lLmJ1bXBNYXAsdC5idW1wU2NhbGUudmFsdWU9ZS5idW1wU2NhbGUsMT09PWUuc2lkZSYmKHQuYnVtcFNjYWxlLnZhbHVlKj0tMSkpLGUubm9ybWFsTWFwJiYodC5ub3JtYWxNYXAudmFsdWU9ZS5ub3JtYWxNYXAsdC5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KGUubm9ybWFsU2NhbGUpLDE9PT1lLnNpZGUmJnQubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLGUuZGlzcGxhY2VtZW50TWFwJiYodC5kaXNwbGFjZW1lbnRNYXAudmFsdWU9ZS5kaXNwbGFjZW1lbnRNYXAsdC5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT1lLmRpc3BsYWNlbWVudFNjYWxlLHQuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT1lLmRpc3BsYWNlbWVudEJpYXMpfSkodCxpKSk6aS5pc0xpbmVCYXNpY01hdGVyaWFsPygoZnVuY3Rpb24gbSh0LGUpe3QuZGlmZnVzZS52YWx1ZS5jb3B5KGUuY29sb3IpLHQub3BhY2l0eS52YWx1ZT1lLm9wYWNpdHl9KSh0LGkpLGkuaXNMaW5lRGFzaGVkTWF0ZXJpYWwmJihmdW5jdGlvbiBnKHQsZSl7dC5kYXNoU2l6ZS52YWx1ZT1lLmRhc2hTaXplLHQudG90YWxTaXplLnZhbHVlPWUuZGFzaFNpemUrZS5nYXBTaXplLHQuc2NhbGUudmFsdWU9ZS5zY2FsZX0pKHQsaSkpOmkuaXNQb2ludHNNYXRlcmlhbD8oZnVuY3Rpb24gXyh0LGUsbixpKXtsZXQgcjt0LmRpZmZ1c2UudmFsdWUuY29weShlLmNvbG9yKSx0Lm9wYWNpdHkudmFsdWU9ZS5vcGFjaXR5LHQuc2l6ZS52YWx1ZT1lLnNpemUqbix0LnNjYWxlLnZhbHVlPS41KmksZS5tYXAmJih0Lm1hcC52YWx1ZT1lLm1hcCksZS5hbHBoYU1hcCYmKHQuYWxwaGFNYXAudmFsdWU9ZS5hbHBoYU1hcCksZS5tYXA/cj1lLm1hcDplLmFscGhhTWFwJiYocj1lLmFscGhhTWFwKSx2b2lkIDAhPT1yJiYoITA9PT1yLm1hdHJpeEF1dG9VcGRhdGUmJnIudXBkYXRlTWF0cml4KCksdC51dlRyYW5zZm9ybS52YWx1ZS5jb3B5KHIubWF0cml4KSl9KSh0LGksbyxhKTppLmlzU3ByaXRlTWF0ZXJpYWw/KGZ1bmN0aW9uIHkodCxlKXtsZXQgbjt0LmRpZmZ1c2UudmFsdWUuY29weShlLmNvbG9yKSx0Lm9wYWNpdHkudmFsdWU9ZS5vcGFjaXR5LHQucm90YXRpb24udmFsdWU9ZS5yb3RhdGlvbixlLm1hcCYmKHQubWFwLnZhbHVlPWUubWFwKSxlLmFscGhhTWFwJiYodC5hbHBoYU1hcC52YWx1ZT1lLmFscGhhTWFwKSxlLm1hcD9uPWUubWFwOmUuYWxwaGFNYXAmJihuPWUuYWxwaGFNYXApLHZvaWQgMCE9PW4mJighMD09PW4ubWF0cml4QXV0b1VwZGF0ZSYmbi51cGRhdGVNYXRyaXgoKSx0LnV2VHJhbnNmb3JtLnZhbHVlLmNvcHkobi5tYXRyaXgpKX0pKHQsaSk6aS5pc1NoYWRvd01hdGVyaWFsPyh0LmNvbG9yLnZhbHVlLmNvcHkoaS5jb2xvciksdC5vcGFjaXR5LnZhbHVlPWkub3BhY2l0eSk6aS5pc1NoYWRlck1hdGVyaWFsJiYoaS51bmlmb3Jtc05lZWRVcGRhdGU9ITEpfX19ZnVuY3Rpb24gQUh0KHQpe2NvbnN0IGU9dm9pZCAwIT09KHQ9dHx8e30pLmNhbnZhcz90LmNhbnZhczooZnVuY3Rpb24gbigpe2NvbnN0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiY2FudmFzIik7cmV0dXJuIHQuc3R5bGUuZGlzcGxheT0iYmxvY2siLHR9KSgpLGk9dm9pZCAwIT09dC5jb250ZXh0P3QuY29udGV4dDpudWxsLHI9dm9pZCAwIT09dC5hbHBoYSYmdC5hbHBoYSxvPXZvaWQgMD09PXQuZGVwdGh8fHQuZGVwdGgsYT12b2lkIDA9PT10LnN0ZW5jaWx8fHQuc3RlbmNpbCxzPXZvaWQgMCE9PXQuYW50aWFsaWFzJiZ0LmFudGlhbGlhcyxsPXZvaWQgMD09PXQucHJlbXVsdGlwbGllZEFscGhhfHx0LnByZW11bHRpcGxpZWRBbHBoYSxjPXZvaWQgMCE9PXQucHJlc2VydmVEcmF3aW5nQnVmZmVyJiZ0LnByZXNlcnZlRHJhd2luZ0J1ZmZlcix1PXZvaWQgMCE9PXQucG93ZXJQcmVmZXJlbmNlP3QucG93ZXJQcmVmZXJlbmNlOiJkZWZhdWx0IixoPXZvaWQgMCE9PXQuZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdCYmdC5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0O2xldCBkPW51bGwscD1udWxsO2NvbnN0IGY9W107dGhpcy5kb21FbGVtZW50PWUsdGhpcy5kZWJ1Zz17Y2hlY2tTaGFkZXJFcnJvcnM6ITB9LHRoaXMuYXV0b0NsZWFyPSEwLHRoaXMuYXV0b0NsZWFyQ29sb3I9ITAsdGhpcy5hdXRvQ2xlYXJEZXB0aD0hMCx0aGlzLmF1dG9DbGVhclN0ZW5jaWw9ITAsdGhpcy5zb3J0T2JqZWN0cz0hMCx0aGlzLmNsaXBwaW5nUGxhbmVzPVtdLHRoaXMubG9jYWxDbGlwcGluZ0VuYWJsZWQ9ITEsdGhpcy5nYW1tYUZhY3Rvcj0yLHRoaXMub3V0cHV0RW5jb2Rpbmc9eE90LHRoaXMucGh5c2ljYWxseUNvcnJlY3RMaWdodHM9ITEsdGhpcy50b25lTWFwcGluZz0wLHRoaXMudG9uZU1hcHBpbmdFeHBvc3VyZT0xLHRoaXMubWF4TW9ycGhUYXJnZXRzPTgsdGhpcy5tYXhNb3JwaE5vcm1hbHM9NDtjb25zdCBtPXRoaXM7bGV0IGc9ITEsXz1udWxsLHk9MCx2PTAsYj1udWxsLHg9bnVsbCx3PS0xLFM9bnVsbDtjb25zdCBNPW5ldyBqT3QsRT1uZXcgak90O2xldCBUPW51bGwsQz1lLndpZHRoLEE9ZS5oZWlnaHQsaz0xLEw9bnVsbCxQPW51bGw7Y29uc3QgTj1uZXcgak90KDAsMCxDLEEpLEk9bmV3IGpPdCgwLDAsQyxBKTtsZXQgTz0hMTtjb25zdCBSPW5ldyB4RHQ7bGV0IHo9ITEsRD0hMTtjb25zdCBCPW5ldyBiUnQsSD1uZXcgcU90LEY9e2JhY2tncm91bmQ6bnVsbCxmb2c6bnVsbCxlbnZpcm9ubWVudDpudWxsLG92ZXJyaWRlTWF0ZXJpYWw6bnVsbCxpc1NjZW5lOiEwfTtmdW5jdGlvbiBWKCl7cmV0dXJuIG51bGw9PT1iP2s6MX1sZXQgVSxqLEcsVyxxLFksWCwkLEssWixKLFEsdHQsZXQsbnQsaXQscnQsb3QsYXQsc3QsbHQsY3Q9aTtmdW5jdGlvbiB1dCh0LG4pe2ZvcihsZXQgaT0wO2k8dC5sZW5ndGg7aSsrKXtjb25zdCByPWUuZ2V0Q29udGV4dCh0W2ldLG4pO2lmKG51bGwhPT1yKXJldHVybiByfXJldHVybiBudWxsfXRyeXtjb25zdCB0PXthbHBoYTpyLGRlcHRoOm8sc3RlbmNpbDphLGFudGlhbGlhczpzLHByZW11bHRpcGxpZWRBbHBoYTpsLHByZXNlcnZlRHJhd2luZ0J1ZmZlcjpjLHBvd2VyUHJlZmVyZW5jZTp1LGZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQ6aH07aWYoZS5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IixmdCwhMSksZS5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRyZXN0b3JlZCIsbXQsITEpLG51bGw9PT1jdCl7Y29uc3QgZT1bIndlYmdsMiIsIndlYmdsIiwiZXhwZXJpbWVudGFsLXdlYmdsIl07aWYoITA9PT1tLmlzV2ViR0wxUmVuZGVyZXImJmUuc2hpZnQoKSxjdD11dChlLHQpLG51bGw9PT1jdCl0aHJvdyB1dChlKT9uZXcgRXJyb3IoIkVycm9yIGNyZWF0aW5nIFdlYkdMIGNvbnRleHQgd2l0aCB5b3VyIHNlbGVjdGVkIGF0dHJpYnV0ZXMuIik6bmV3IEVycm9yKCJFcnJvciBjcmVhdGluZyBXZWJHTCBjb250ZXh0LiIpfXZvaWQgMD09PWN0LmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCYmKGN0LmdldFNoYWRlclByZWNpc2lvbkZvcm1hdD1mdW5jdGlvbigpe3JldHVybntyYW5nZU1pbjoxLHJhbmdlTWF4OjEscHJlY2lzaW9uOjF9fSl9Y2F0Y2godCl7dGhyb3cgY29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlcjogIit0Lm1lc3NhZ2UpLHR9ZnVuY3Rpb24gaHQoKXtVPW5ldyBPRHQoY3QpLGo9bmV3IFBEdChjdCxVLHQpLFUuaW5pdChqKSxzdD1uZXcgd0h0KGN0LFUsaiksRz1uZXcgYkh0KGN0LFUsaiksRy5zY2lzc29yKEUuY29weShJKS5tdWx0aXBseVNjYWxhcihrKS5mbG9vcigpKSxHLnZpZXdwb3J0KE0uY29weShOKS5tdWx0aXBseVNjYWxhcihrKS5mbG9vcigpKSxXPW5ldyBERHQoY3QpLHE9bmV3IGFIdCxZPW5ldyB4SHQoY3QsVSxHLHEsaixzdCxXKSxYPW5ldyBJRHQobSksJD1uZXcgU0R0KGN0LGopLGx0PW5ldyBrRHQoY3QsVSwkLGopLEs9bmV3IFJEdChjdCwkLFcsbHQpLFo9bmV3IFZEdChjdCxLLCQsVykscnQ9bmV3IEZEdChjdCksbnQ9bmV3IE5EdChxKSxKPW5ldyBvSHQobSxYLFUsaixsdCxudCksUT1uZXcgQ0h0KHEpLHR0PW5ldyB1SHQocSksZXQ9bmV3IGdIdChVLGopLGl0PW5ldyBBRHQobSxYLEcsWixsKSxvdD1uZXcgTER0KGN0LFUsVyxqKSxhdD1uZXcgekR0KGN0LFUsVyxqKSxXLnByb2dyYW1zPUoucHJvZ3JhbXMsbS5jYXBhYmlsaXRpZXM9aixtLmV4dGVuc2lvbnM9VSxtLnByb3BlcnRpZXM9cSxtLnJlbmRlckxpc3RzPXR0LG0uc3RhdGU9RyxtLmluZm89V31odCgpO2NvbnN0IGR0PW5ldyBUSHQobSxjdCk7dGhpcy54cj1kdDtjb25zdCBwdD1uZXcgdkh0KG0sWixqLm1heFRleHR1cmVTaXplKTtmdW5jdGlvbiBmdCh0KXt0LnByZXZlbnREZWZhdWx0KCksY29uc29sZS5sb2coIlRIUkVFLldlYkdMUmVuZGVyZXI6IENvbnRleHQgTG9zdC4iKSxnPSEwfWZ1bmN0aW9uIG10KCl7Y29uc29sZS5sb2coIlRIUkVFLldlYkdMUmVuZGVyZXI6IENvbnRleHQgUmVzdG9yZWQuIiksZz0hMSxodCgpfWZ1bmN0aW9uIGd0KHQpe2NvbnN0IGU9dC50YXJnZXQ7ZS5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixndCksKGZ1bmN0aW9uIG4odCl7X3QodCkscS5yZW1vdmUodCl9KShlKX1mdW5jdGlvbiBfdCh0KXtjb25zdCBlPXEuZ2V0KHQpLnByb2dyYW07dm9pZCAwIT09ZSYmSi5yZWxlYXNlUHJvZ3JhbShlKX10aGlzLnNoYWRvd01hcD1wdCx0aGlzLmdldENvbnRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4gY3R9LHRoaXMuZ2V0Q29udGV4dEF0dHJpYnV0ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gY3QuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKX0sdGhpcy5mb3JjZUNvbnRleHRMb3NzPWZ1bmN0aW9uKCl7Y29uc3QgdD1VLmdldCgiV0VCR0xfbG9zZV9jb250ZXh0Iik7dCYmdC5sb3NlQ29udGV4dCgpfSx0aGlzLmZvcmNlQ29udGV4dFJlc3RvcmU9ZnVuY3Rpb24oKXtjb25zdCB0PVUuZ2V0KCJXRUJHTF9sb3NlX2NvbnRleHQiKTt0JiZ0LnJlc3RvcmVDb250ZXh0KCl9LHRoaXMuZ2V0UGl4ZWxSYXRpbz1mdW5jdGlvbigpe3JldHVybiBrfSx0aGlzLnNldFBpeGVsUmF0aW89ZnVuY3Rpb24odCl7dm9pZCAwIT09dCYmKGs9dCx0aGlzLnNldFNpemUoQyxBLCExKSl9LHRoaXMuZ2V0U2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKGNvbnNvbGUud2FybigiV2ViR0xSZW5kZXJlcjogLmdldHNpemUoKSBub3cgcmVxdWlyZXMgYSBWZWN0b3IyIGFzIGFuIGFyZ3VtZW50IiksdD1uZXcgek90KSx0LnNldChDLEEpfSx0aGlzLnNldFNpemU9ZnVuY3Rpb24odCxuLGkpe2R0LmlzUHJlc2VudGluZz9jb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IENhbid0IGNoYW5nZSBzaXplIHdoaWxlIFZSIGRldmljZSBpcyBwcmVzZW50aW5nLiIpOihDPXQsQT1uLGUud2lkdGg9TWF0aC5mbG9vcih0KmspLGUuaGVpZ2h0PU1hdGguZmxvb3IobiprKSwhMSE9PWkmJihlLnN0eWxlLndpZHRoPXQrInB4IixlLnN0eWxlLmhlaWdodD1uKyJweCIpLHRoaXMuc2V0Vmlld3BvcnQoMCwwLHQsbikpfSx0aGlzLmdldERyYXdpbmdCdWZmZXJTaXplPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYoY29uc29sZS53YXJuKCJXZWJHTFJlbmRlcmVyOiAuZ2V0ZHJhd2luZ0J1ZmZlclNpemUoKSBub3cgcmVxdWlyZXMgYSBWZWN0b3IyIGFzIGFuIGFyZ3VtZW50IiksdD1uZXcgek90KSx0LnNldChDKmssQSprKS5mbG9vcigpfSx0aGlzLnNldERyYXdpbmdCdWZmZXJTaXplPWZ1bmN0aW9uKHQsbixpKXtDPXQsQT1uLGs9aSxlLndpZHRoPU1hdGguZmxvb3IodCppKSxlLmhlaWdodD1NYXRoLmZsb29yKG4qaSksdGhpcy5zZXRWaWV3cG9ydCgwLDAsdCxuKX0sdGhpcy5nZXRDdXJyZW50Vmlld3BvcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJihjb25zb2xlLndhcm4oIldlYkdMUmVuZGVyZXI6IC5nZXRDdXJyZW50Vmlld3BvcnQoKSBub3cgcmVxdWlyZXMgYSBWZWN0b3I0IGFzIGFuIGFyZ3VtZW50IiksdD1uZXcgak90KSx0LmNvcHkoTSl9LHRoaXMuZ2V0Vmlld3BvcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQuY29weShOKX0sdGhpcy5zZXRWaWV3cG9ydD1mdW5jdGlvbih0LGUsbixpKXt0LmlzVmVjdG9yND9OLnNldCh0LngsdC55LHQueix0LncpOk4uc2V0KHQsZSxuLGkpLEcudmlld3BvcnQoTS5jb3B5KE4pLm11bHRpcGx5U2NhbGFyKGspLmZsb29yKCkpfSx0aGlzLmdldFNjaXNzb3I9ZnVuY3Rpb24odCl7cmV0dXJuIHQuY29weShJKX0sdGhpcy5zZXRTY2lzc29yPWZ1bmN0aW9uKHQsZSxuLGkpe3QuaXNWZWN0b3I0P0kuc2V0KHQueCx0LnksdC56LHQudyk6SS5zZXQodCxlLG4saSksRy5zY2lzc29yKEUuY29weShJKS5tdWx0aXBseVNjYWxhcihrKS5mbG9vcigpKX0sdGhpcy5nZXRTY2lzc29yVGVzdD1mdW5jdGlvbigpe3JldHVybiBPfSx0aGlzLnNldFNjaXNzb3JUZXN0PWZ1bmN0aW9uKHQpe0cuc2V0U2Npc3NvclRlc3QoTz10KX0sdGhpcy5zZXRPcGFxdWVTb3J0PWZ1bmN0aW9uKHQpe0w9dH0sdGhpcy5zZXRUcmFuc3BhcmVudFNvcnQ9ZnVuY3Rpb24odCl7UD10fSx0aGlzLmdldENsZWFyQ29sb3I9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJihjb25zb2xlLndhcm4oIldlYkdMUmVuZGVyZXI6IC5nZXRDbGVhckNvbG9yKCkgbm93IHJlcXVpcmVzIGEgQ29sb3IgYXMgYW4gYXJndW1lbnQiKSx0PW5ldyBwenQpLHQuY29weShpdC5nZXRDbGVhckNvbG9yKCkpfSx0aGlzLnNldENsZWFyQ29sb3I9ZnVuY3Rpb24oKXtpdC5zZXRDbGVhckNvbG9yLmFwcGx5KGl0LGFyZ3VtZW50cyl9LHRoaXMuZ2V0Q2xlYXJBbHBoYT1mdW5jdGlvbigpe3JldHVybiBpdC5nZXRDbGVhckFscGhhKCl9LHRoaXMuc2V0Q2xlYXJBbHBoYT1mdW5jdGlvbigpe2l0LnNldENsZWFyQWxwaGEuYXBwbHkoaXQsYXJndW1lbnRzKX0sdGhpcy5jbGVhcj1mdW5jdGlvbih0LGUsbil7bGV0IGk9MDsodm9pZCAwPT09dHx8dCkmJihpfD0xNjM4NCksKHZvaWQgMD09PWV8fGUpJiYoaXw9MjU2KSwodm9pZCAwPT09bnx8bikmJihpfD0xMDI0KSxjdC5jbGVhcihpKX0sdGhpcy5jbGVhckNvbG9yPWZ1bmN0aW9uKCl7dGhpcy5jbGVhcighMCwhMSwhMSl9LHRoaXMuY2xlYXJEZXB0aD1mdW5jdGlvbigpe3RoaXMuY2xlYXIoITEsITAsITEpfSx0aGlzLmNsZWFyU3RlbmNpbD1mdW5jdGlvbigpe3RoaXMuY2xlYXIoITEsITEsITApfSx0aGlzLmRpc3Bvc2U9ZnVuY3Rpb24oKXtlLnJlbW92ZUV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLGZ0LCExKSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dHJlc3RvcmVkIixtdCwhMSksdHQuZGlzcG9zZSgpLGV0LmRpc3Bvc2UoKSxxLmRpc3Bvc2UoKSxYLmRpc3Bvc2UoKSxaLmRpc3Bvc2UoKSxsdC5kaXNwb3NlKCksZHQuZGlzcG9zZSgpLHZ0LnN0b3AoKX0sdGhpcy5yZW5kZXJCdWZmZXJJbW1lZGlhdGU9ZnVuY3Rpb24odCxlKXtsdC5pbml0QXR0cmlidXRlcygpO2NvbnN0IG49cS5nZXQodCk7dC5oYXNQb3NpdGlvbnMmJiFuLnBvc2l0aW9uJiYobi5wb3NpdGlvbj1jdC5jcmVhdGVCdWZmZXIoKSksdC5oYXNOb3JtYWxzJiYhbi5ub3JtYWwmJihuLm5vcm1hbD1jdC5jcmVhdGVCdWZmZXIoKSksdC5oYXNVdnMmJiFuLnV2JiYobi51dj1jdC5jcmVhdGVCdWZmZXIoKSksdC5oYXNDb2xvcnMmJiFuLmNvbG9yJiYobi5jb2xvcj1jdC5jcmVhdGVCdWZmZXIoKSk7Y29uc3QgaT1lLmdldEF0dHJpYnV0ZXMoKTt0Lmhhc1Bvc2l0aW9ucyYmKGN0LmJpbmRCdWZmZXIoMzQ5NjIsbi5wb3NpdGlvbiksY3QuYnVmZmVyRGF0YSgzNDk2Mix0LnBvc2l0aW9uQXJyYXksMzUwNDgpLGx0LmVuYWJsZUF0dHJpYnV0ZShpLnBvc2l0aW9uKSxjdC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGkucG9zaXRpb24sMyw1MTI2LCExLDAsMCkpLHQuaGFzTm9ybWFscyYmKGN0LmJpbmRCdWZmZXIoMzQ5NjIsbi5ub3JtYWwpLGN0LmJ1ZmZlckRhdGEoMzQ5NjIsdC5ub3JtYWxBcnJheSwzNTA0OCksbHQuZW5hYmxlQXR0cmlidXRlKGkubm9ybWFsKSxjdC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGkubm9ybWFsLDMsNTEyNiwhMSwwLDApKSx0Lmhhc1V2cyYmKGN0LmJpbmRCdWZmZXIoMzQ5NjIsbi51diksY3QuYnVmZmVyRGF0YSgzNDk2Mix0LnV2QXJyYXksMzUwNDgpLGx0LmVuYWJsZUF0dHJpYnV0ZShpLnV2KSxjdC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGkudXYsMiw1MTI2LCExLDAsMCkpLHQuaGFzQ29sb3JzJiYoY3QuYmluZEJ1ZmZlcigzNDk2MixuLmNvbG9yKSxjdC5idWZmZXJEYXRhKDM0OTYyLHQuY29sb3JBcnJheSwzNTA0OCksbHQuZW5hYmxlQXR0cmlidXRlKGkuY29sb3IpLGN0LnZlcnRleEF0dHJpYlBvaW50ZXIoaS5jb2xvciwzLDUxMjYsITEsMCwwKSksbHQuZGlzYWJsZVVudXNlZEF0dHJpYnV0ZXMoKSxjdC5kcmF3QXJyYXlzKDQsMCx0LmNvdW50KSx0LmNvdW50PTB9LHRoaXMucmVuZGVyQnVmZmVyRGlyZWN0PWZ1bmN0aW9uKHQsZSxuLGkscixvKXtudWxsPT09ZSYmKGU9Rik7Y29uc3QgYT1yLmlzTWVzaCYmci5tYXRyaXhXb3JsZC5kZXRlcm1pbmFudCgpPDAscz1NdCh0LGUsaSxyKTtHLnNldE1hdGVyaWFsKGksYSk7bGV0IGw9bi5pbmRleDtjb25zdCBjPW4uYXR0cmlidXRlcy5wb3NpdGlvbjtpZihudWxsPT09bCl7aWYodm9pZCAwPT09Y3x8MD09PWMuY291bnQpcmV0dXJufWVsc2UgaWYoMD09PWwuY291bnQpcmV0dXJuO2xldCB1LGg9MTshMD09PWkud2lyZWZyYW1lJiYobD1LLmdldFdpcmVmcmFtZUF0dHJpYnV0ZShuKSxoPTIpLChpLm1vcnBoVGFyZ2V0c3x8aS5tb3JwaE5vcm1hbHMpJiZydC51cGRhdGUocixuLGkscyksbHQuc2V0dXAocixpLHMsbixsKTtsZXQgZD1vdDtudWxsIT09bCYmKHU9JC5nZXQobCksZD1hdCxkLnNldEluZGV4KHUpKTtjb25zdCBwPW51bGwhPT1sP2wuY291bnQ6Yy5jb3VudCxmPW4uZHJhd1JhbmdlLnN0YXJ0KmgsbT1uLmRyYXdSYW5nZS5jb3VudCpoLGc9bnVsbCE9PW8/by5zdGFydCpoOjAsXz1udWxsIT09bz9vLmNvdW50Kmg6MS8wLHk9TWF0aC5tYXgoZixnKSx2PU1hdGgubWluKHAsZittLGcrXyktMSxiPU1hdGgubWF4KDAsdi15KzEpO2lmKDAhPT1iKXtpZihyLmlzTWVzaCkhMD09PWkud2lyZWZyYW1lPyhHLnNldExpbmVXaWR0aChpLndpcmVmcmFtZUxpbmV3aWR0aCpWKCkpLGQuc2V0TW9kZSgxKSk6ZC5zZXRNb2RlKDQpO2Vsc2UgaWYoci5pc0xpbmUpe2xldCB0PWkubGluZXdpZHRoO3ZvaWQgMD09PXQmJih0PTEpLEcuc2V0TGluZVdpZHRoKHQqVigpKSxkLnNldE1vZGUoci5pc0xpbmVTZWdtZW50cz8xOnIuaXNMaW5lTG9vcD8yOjMpfWVsc2Ugci5pc1BvaW50cz9kLnNldE1vZGUoMCk6ci5pc1Nwcml0ZSYmZC5zZXRNb2RlKDQpO2lmKHIuaXNJbnN0YW5jZWRNZXNoKWQucmVuZGVySW5zdGFuY2VzKHksYixyLmNvdW50KTtlbHNlIGlmKG4uaXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSl7Y29uc3QgdD1NYXRoLm1pbihuLmluc3RhbmNlQ291bnQsbi5fbWF4SW5zdGFuY2VDb3VudCk7ZC5yZW5kZXJJbnN0YW5jZXMoeSxiLHQpfWVsc2UgZC5yZW5kZXIoeSxiKX19LHRoaXMuY29tcGlsZT1mdW5jdGlvbih0LGUpe3A9ZXQuZ2V0KHQpLHAuaW5pdCgpLHQudHJhdmVyc2VWaXNpYmxlKChmdW5jdGlvbih0KXt0LmlzTGlnaHQmJnQubGF5ZXJzLnRlc3QoZS5sYXllcnMpJiYocC5wdXNoTGlnaHQodCksdC5jYXN0U2hhZG93JiZwLnB1c2hTaGFkb3codCkpfSkpLHAuc2V0dXBMaWdodHMoKTtjb25zdCBuPW5ldyBXZWFrTWFwO3QudHJhdmVyc2UoKGZ1bmN0aW9uKGUpe2NvbnN0IGk9ZS5tYXRlcmlhbDtpZihpKWlmKEFycmF5LmlzQXJyYXkoaSkpZm9yKGxldCByPTA7cjxpLmxlbmd0aDtyKyspe2NvbnN0IG89aVtyXTshMT09PW4uaGFzKG8pJiYoU3Qobyx0LGUpLG4uc2V0KG8pKX1lbHNlITE9PT1uLmhhcyhpKSYmKFN0KGksdCxlKSxuLnNldChpKSl9KSl9O2xldCB5dD1udWxsO2NvbnN0IHZ0PW5ldyB3RHQ7ZnVuY3Rpb24gYnQodCxlLG4saSl7aWYoITE9PT10LnZpc2libGUpcmV0dXJuO2lmKHQubGF5ZXJzLnRlc3QoZS5sYXllcnMpKWlmKHQuaXNHcm91cCluPXQucmVuZGVyT3JkZXI7ZWxzZSBpZih0LmlzTE9EKSEwPT09dC5hdXRvVXBkYXRlJiZ0LnVwZGF0ZShlKTtlbHNlIGlmKHQuaXNMaWdodClwLnB1c2hMaWdodCh0KSx0LmNhc3RTaGFkb3cmJnAucHVzaFNoYWRvdyh0KTtlbHNlIGlmKHQuaXNTcHJpdGUpe2lmKCF0LmZydXN0dW1DdWxsZWR8fFIuaW50ZXJzZWN0c1Nwcml0ZSh0KSl7aSYmSC5zZXRGcm9tTWF0cml4UG9zaXRpb24odC5tYXRyaXhXb3JsZCkuYXBwbHlNYXRyaXg0KEIpO2NvbnN0IGU9Wi51cGRhdGUodCkscj10Lm1hdGVyaWFsO3IudmlzaWJsZSYmZC5wdXNoKHQsZSxyLG4sSC56LG51bGwpfX1lbHNlIGlmKHQuaXNJbW1lZGlhdGVSZW5kZXJPYmplY3QpaSYmSC5zZXRGcm9tTWF0cml4UG9zaXRpb24odC5tYXRyaXhXb3JsZCkuYXBwbHlNYXRyaXg0KEIpLGQucHVzaCh0LG51bGwsdC5tYXRlcmlhbCxuLEgueixudWxsKTtlbHNlIGlmKCh0LmlzTWVzaHx8dC5pc0xpbmV8fHQuaXNQb2ludHMpJiYodC5pc1NraW5uZWRNZXNoJiZ0LnNrZWxldG9uLmZyYW1lIT09Vy5yZW5kZXIuZnJhbWUmJih0LnNrZWxldG9uLnVwZGF0ZSgpLHQuc2tlbGV0b24uZnJhbWU9Vy5yZW5kZXIuZnJhbWUpLCF0LmZydXN0dW1DdWxsZWR8fFIuaW50ZXJzZWN0c09iamVjdCh0KSkpe2kmJkguc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHQubWF0cml4V29ybGQpLmFwcGx5TWF0cml4NChCKTtjb25zdCBlPVoudXBkYXRlKHQpLHI9dC5tYXRlcmlhbDtpZihBcnJheS5pc0FycmF5KHIpKXtjb25zdCBpPWUuZ3JvdXBzO2ZvcihsZXQgbz0wLGE9aS5sZW5ndGg7bzxhO28rKyl7Y29uc3QgYT1pW29dLHM9clthLm1hdGVyaWFsSW5kZXhdO3MmJnMudmlzaWJsZSYmZC5wdXNoKHQsZSxzLG4sSC56LGEpfX1lbHNlIHIudmlzaWJsZSYmZC5wdXNoKHQsZSxyLG4sSC56LG51bGwpfWNvbnN0IHI9dC5jaGlsZHJlbjtmb3IobGV0IHQ9MCxvPXIubGVuZ3RoO3Q8bzt0KyspYnQoclt0XSxlLG4saSl9ZnVuY3Rpb24geHQodCxlLG4pe2NvbnN0IGk9ITA9PT1lLmlzU2NlbmU/ZS5vdmVycmlkZU1hdGVyaWFsOm51bGw7Zm9yKGxldCByPTAsbz10Lmxlbmd0aDtyPG87cisrKXtjb25zdCBvPXRbcl0sYT1vLm9iamVjdCxzPW8uZ2VvbWV0cnksbD1udWxsPT09aT9vLm1hdGVyaWFsOmksYz1vLmdyb3VwO2lmKG4uaXNBcnJheUNhbWVyYSl7Y29uc3QgdD1uLmNhbWVyYXM7Zm9yKGxldCBuPTAsaT10Lmxlbmd0aDtuPGk7bisrKXtjb25zdCBpPXRbbl07YS5sYXllcnMudGVzdChpLmxheWVycykmJihHLnZpZXdwb3J0KE0uY29weShpLnZpZXdwb3J0KSkscC5zZXR1cExpZ2h0c1ZpZXcoaSksd3QoYSxlLGkscyxsLGMpKX19ZWxzZSB3dChhLGUsbixzLGwsYyl9fWZ1bmN0aW9uIHd0KHQsZSxuLGkscixvKXtpZih0Lm9uQmVmb3JlUmVuZGVyKG0sZSxuLGkscixvKSx0Lm1vZGVsVmlld01hdHJpeC5tdWx0aXBseU1hdHJpY2VzKG4ubWF0cml4V29ybGRJbnZlcnNlLHQubWF0cml4V29ybGQpLHQubm9ybWFsTWF0cml4LmdldE5vcm1hbE1hdHJpeCh0Lm1vZGVsVmlld01hdHJpeCksdC5pc0ltbWVkaWF0ZVJlbmRlck9iamVjdCl7Y29uc3QgaT1NdChuLGUscix0KTtHLnNldE1hdGVyaWFsKHIpLGx0LnJlc2V0KCksKGZ1bmN0aW9uIGEodCxlKXt0LnJlbmRlcigoZnVuY3Rpb24odCl7bS5yZW5kZXJCdWZmZXJJbW1lZGlhdGUodCxlKX0pKX0pKHQsaSl9ZWxzZSBtLnJlbmRlckJ1ZmZlckRpcmVjdChuLGUsaSxyLHQsbyk7dC5vbkFmdGVyUmVuZGVyKG0sZSxuLGkscixvKX1mdW5jdGlvbiBTdCh0LGUsbil7ITAhPT1lLmlzU2NlbmUmJihlPUYpO2NvbnN0IGk9cS5nZXQodCkscj1wLnN0YXRlLmxpZ2h0cyxvPXIuc3RhdGUudmVyc2lvbixhPUouZ2V0UGFyYW1ldGVycyh0LHIuc3RhdGUscC5zdGF0ZS5zaGFkb3dzQXJyYXksZSxuKSxzPUouZ2V0UHJvZ3JhbUNhY2hlS2V5KGEpO2xldCBsPWkucHJvZ3JhbSxjPSEwO2lmKGkuZW52aXJvbm1lbnQ9dC5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP2UuZW52aXJvbm1lbnQ6bnVsbCxpLmZvZz1lLmZvZyxpLmVudk1hcD1YLmdldCh0LmVudk1hcHx8aS5lbnZpcm9ubWVudCksdm9pZCAwPT09bCl0LmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGd0KTtlbHNlIGlmKGwuY2FjaGVLZXkhPT1zKV90KHQpO2Vsc2UgaWYoaS5saWdodHNTdGF0ZVZlcnNpb24hPT1vKWM9ITE7ZWxzZXtpZih2b2lkIDAhPT1hLnNoYWRlcklEKXJldHVybjtjPSExfWMmJihhLnVuaWZvcm1zPUouZ2V0VW5pZm9ybXModCksdC5vbkJlZm9yZUNvbXBpbGUoYSxtKSxsPUouYWNxdWlyZVByb2dyYW0oYSxzKSxpLnByb2dyYW09bCxpLnVuaWZvcm1zPWEudW5pZm9ybXMsaS5vdXRwdXRFbmNvZGluZz1hLm91dHB1dEVuY29kaW5nKTtjb25zdCB1PWkudW5pZm9ybXM7KHQuaXNTaGFkZXJNYXRlcmlhbHx8dC5pc1Jhd1NoYWRlck1hdGVyaWFsKSYmITAhPT10LmNsaXBwaW5nfHwoaS5udW1DbGlwcGluZ1BsYW5lcz1udC5udW1QbGFuZXMsaS5udW1JbnRlcnNlY3Rpb249bnQubnVtSW50ZXJzZWN0aW9uLHUuY2xpcHBpbmdQbGFuZXM9bnQudW5pZm9ybSksaS5uZWVkc0xpZ2h0cz0oZnVuY3Rpb24gaCh0KXtyZXR1cm4gdC5pc01lc2hMYW1iZXJ0TWF0ZXJpYWx8fHQuaXNNZXNoVG9vbk1hdGVyaWFsfHx0LmlzTWVzaFBob25nTWF0ZXJpYWx8fHQuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbHx8dC5pc1NoYWRvd01hdGVyaWFsfHx0LmlzU2hhZGVyTWF0ZXJpYWwmJiEwPT09dC5saWdodHN9KSh0KSxpLmxpZ2h0c1N0YXRlVmVyc2lvbj1vLGkubmVlZHNMaWdodHMmJih1LmFtYmllbnRMaWdodENvbG9yLnZhbHVlPXIuc3RhdGUuYW1iaWVudCx1LmxpZ2h0UHJvYmUudmFsdWU9ci5zdGF0ZS5wcm9iZSx1LmRpcmVjdGlvbmFsTGlnaHRzLnZhbHVlPXIuc3RhdGUuZGlyZWN0aW9uYWwsdS5kaXJlY3Rpb25hbExpZ2h0U2hhZG93cy52YWx1ZT1yLnN0YXRlLmRpcmVjdGlvbmFsU2hhZG93LHUuc3BvdExpZ2h0cy52YWx1ZT1yLnN0YXRlLnNwb3QsdS5zcG90TGlnaHRTaGFkb3dzLnZhbHVlPXIuc3RhdGUuc3BvdFNoYWRvdyx1LnJlY3RBcmVhTGlnaHRzLnZhbHVlPXIuc3RhdGUucmVjdEFyZWEsdS5sdGNfMS52YWx1ZT1yLnN0YXRlLnJlY3RBcmVhTFRDMSx1Lmx0Y18yLnZhbHVlPXIuc3RhdGUucmVjdEFyZWFMVEMyLHUucG9pbnRMaWdodHMudmFsdWU9ci5zdGF0ZS5wb2ludCx1LnBvaW50TGlnaHRTaGFkb3dzLnZhbHVlPXIuc3RhdGUucG9pbnRTaGFkb3csdS5oZW1pc3BoZXJlTGlnaHRzLnZhbHVlPXIuc3RhdGUuaGVtaSx1LmRpcmVjdGlvbmFsU2hhZG93TWFwLnZhbHVlPXIuc3RhdGUuZGlyZWN0aW9uYWxTaGFkb3dNYXAsdS5kaXJlY3Rpb25hbFNoYWRvd01hdHJpeC52YWx1ZT1yLnN0YXRlLmRpcmVjdGlvbmFsU2hhZG93TWF0cml4LHUuc3BvdFNoYWRvd01hcC52YWx1ZT1yLnN0YXRlLnNwb3RTaGFkb3dNYXAsdS5zcG90U2hhZG93TWF0cml4LnZhbHVlPXIuc3RhdGUuc3BvdFNoYWRvd01hdHJpeCx1LnBvaW50U2hhZG93TWFwLnZhbHVlPXIuc3RhdGUucG9pbnRTaGFkb3dNYXAsdS5wb2ludFNoYWRvd01hdHJpeC52YWx1ZT1yLnN0YXRlLnBvaW50U2hhZG93TWF0cml4KTtjb25zdCBkPWkucHJvZ3JhbS5nZXRVbmlmb3JtcygpLGY9QkJ0LnNlcVdpdGhWYWx1ZShkLnNlcSx1KTtpLnVuaWZvcm1zTGlzdD1mfWZ1bmN0aW9uIE10KHQsZSxuLGkpeyEwIT09ZS5pc1NjZW5lJiYoZT1GKSxZLnJlc2V0VGV4dHVyZVVuaXRzKCk7Y29uc3Qgcj1lLmZvZyxvPW4uaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD9lLmVudmlyb25tZW50Om51bGwsYT1udWxsPT09Yj9tLm91dHB1dEVuY29kaW5nOmIudGV4dHVyZS5lbmNvZGluZyxzPVguZ2V0KG4uZW52TWFwfHxvKSxsPXEuZ2V0KG4pLGM9cC5zdGF0ZS5saWdodHM7ITAhPT16fHwhMCE9PUQmJnQ9PT1TfHxudC5zZXRTdGF0ZShuLHQsdD09PVMmJm4uaWQ9PT13KSxuLnZlcnNpb249PT1sLl9fdmVyc2lvbj9uLmZvZyYmbC5mb2chPT1yfHxsLmVudmlyb25tZW50IT09b3x8bC5uZWVkc0xpZ2h0cyYmbC5saWdodHNTdGF0ZVZlcnNpb24hPT1jLnN0YXRlLnZlcnNpb24/U3QobixlLGkpOnZvaWQgMD09PWwubnVtQ2xpcHBpbmdQbGFuZXN8fGwubnVtQ2xpcHBpbmdQbGFuZXM9PT1udC5udW1QbGFuZXMmJmwubnVtSW50ZXJzZWN0aW9uPT09bnQubnVtSW50ZXJzZWN0aW9uPyhsLm91dHB1dEVuY29kaW5nIT09YXx8bC5lbnZNYXAhPT1zKSYmU3QobixlLGkpOlN0KG4sZSxpKTooU3QobixlLGkpLGwuX192ZXJzaW9uPW4udmVyc2lvbik7bGV0IHU9ITEsaD0hMSxkPSExO2NvbnN0IGY9bC5wcm9ncmFtLGc9Zi5nZXRVbmlmb3JtcygpLF89bC51bmlmb3JtcztpZihHLnVzZVByb2dyYW0oZi5wcm9ncmFtKSYmKHU9ITAsaD0hMCxkPSEwKSxuLmlkIT09dyYmKHc9bi5pZCxoPSEwKSx1fHxTIT09dCl7aWYoZy5zZXRWYWx1ZShjdCwicHJvamVjdGlvbk1hdHJpeCIsdC5wcm9qZWN0aW9uTWF0cml4KSxqLmxvZ2FyaXRobWljRGVwdGhCdWZmZXImJmcuc2V0VmFsdWUoY3QsImxvZ0RlcHRoQnVmRkMiLDIvKE1hdGgubG9nKHQuZmFyKzEpL01hdGguTE4yKSksUyE9PXQmJihTPXQsaD0hMCxkPSEwKSxuLmlzU2hhZGVyTWF0ZXJpYWx8fG4uaXNNZXNoUGhvbmdNYXRlcmlhbHx8bi5pc01lc2hUb29uTWF0ZXJpYWx8fG4uaXNNZXNoU3RhbmRhcmRNYXRlcmlhbHx8bi5lbnZNYXApe2NvbnN0IGU9Zy5tYXAuY2FtZXJhUG9zaXRpb247dm9pZCAwIT09ZSYmZS5zZXRWYWx1ZShjdCxILnNldEZyb21NYXRyaXhQb3NpdGlvbih0Lm1hdHJpeFdvcmxkKSl9KG4uaXNNZXNoUGhvbmdNYXRlcmlhbHx8bi5pc01lc2hUb29uTWF0ZXJpYWx8fG4uaXNNZXNoTGFtYmVydE1hdGVyaWFsfHxuLmlzTWVzaEJhc2ljTWF0ZXJpYWx8fG4uaXNNZXNoU3RhbmRhcmRNYXRlcmlhbHx8bi5pc1NoYWRlck1hdGVyaWFsKSYmZy5zZXRWYWx1ZShjdCwiaXNPcnRob2dyYXBoaWMiLCEwPT09dC5pc09ydGhvZ3JhcGhpY0NhbWVyYSksKG4uaXNNZXNoUGhvbmdNYXRlcmlhbHx8bi5pc01lc2hUb29uTWF0ZXJpYWx8fG4uaXNNZXNoTGFtYmVydE1hdGVyaWFsfHxuLmlzTWVzaEJhc2ljTWF0ZXJpYWx8fG4uaXNNZXNoU3RhbmRhcmRNYXRlcmlhbHx8bi5pc1NoYWRlck1hdGVyaWFsfHxuLmlzU2hhZG93TWF0ZXJpYWx8fG4uc2tpbm5pbmcpJiZnLnNldFZhbHVlKGN0LCJ2aWV3TWF0cml4Iix0Lm1hdHJpeFdvcmxkSW52ZXJzZSl9aWYobi5za2lubmluZyl7Zy5zZXRPcHRpb25hbChjdCxpLCJiaW5kTWF0cml4IiksZy5zZXRPcHRpb25hbChjdCxpLCJiaW5kTWF0cml4SW52ZXJzZSIpO2NvbnN0IHQ9aS5za2VsZXRvbjtpZih0KXtjb25zdCBlPXQuYm9uZXM7aWYoai5mbG9hdFZlcnRleFRleHR1cmVzKXtpZihudWxsPT09dC5ib25lVGV4dHVyZSl7bGV0IG49TWF0aC5zcXJ0KDQqZS5sZW5ndGgpO249Uk90LmNlaWxQb3dlck9mVHdvKG4pLG49TWF0aC5tYXgobiw0KTtjb25zdCBpPW5ldyBGbG9hdDMyQXJyYXkobipuKjQpO2kuc2V0KHQuYm9uZU1hdHJpY2VzKTtjb25zdCByPW5ldyB5RHQoaSxuLG4sdE90LEtJdCk7dC5ib25lTWF0cmljZXM9aSx0LmJvbmVUZXh0dXJlPXIsdC5ib25lVGV4dHVyZVNpemU9bn1nLnNldFZhbHVlKGN0LCJib25lVGV4dHVyZSIsdC5ib25lVGV4dHVyZSxZKSxnLnNldFZhbHVlKGN0LCJib25lVGV4dHVyZVNpemUiLHQuYm9uZVRleHR1cmVTaXplKX1lbHNlIGcuc2V0T3B0aW9uYWwoY3QsdCwiYm9uZU1hdHJpY2VzIil9fXJldHVybihofHxsLnJlY2VpdmVTaGFkb3chPT1pLnJlY2VpdmVTaGFkb3cpJiYobC5yZWNlaXZlU2hhZG93PWkucmVjZWl2ZVNoYWRvdyxnLnNldFZhbHVlKGN0LCJyZWNlaXZlU2hhZG93IixpLnJlY2VpdmVTaGFkb3cpKSxoJiYoZy5zZXRWYWx1ZShjdCwidG9uZU1hcHBpbmdFeHBvc3VyZSIsbS50b25lTWFwcGluZ0V4cG9zdXJlKSxsLm5lZWRzTGlnaHRzJiYoZnVuY3Rpb24geSh0LGUpe3QuYW1iaWVudExpZ2h0Q29sb3IubmVlZHNVcGRhdGU9ZSx0LmxpZ2h0UHJvYmUubmVlZHNVcGRhdGU9ZSx0LmRpcmVjdGlvbmFsTGlnaHRzLm5lZWRzVXBkYXRlPWUsdC5kaXJlY3Rpb25hbExpZ2h0U2hhZG93cy5uZWVkc1VwZGF0ZT1lLHQucG9pbnRMaWdodHMubmVlZHNVcGRhdGU9ZSx0LnBvaW50TGlnaHRTaGFkb3dzLm5lZWRzVXBkYXRlPWUsdC5zcG90TGlnaHRzLm5lZWRzVXBkYXRlPWUsdC5zcG90TGlnaHRTaGFkb3dzLm5lZWRzVXBkYXRlPWUsdC5yZWN0QXJlYUxpZ2h0cy5uZWVkc1VwZGF0ZT1lLHQuaGVtaXNwaGVyZUxpZ2h0cy5uZWVkc1VwZGF0ZT1lfSkoXyxkKSxyJiZuLmZvZyYmUS5yZWZyZXNoRm9nVW5pZm9ybXMoXyxyKSxRLnJlZnJlc2hNYXRlcmlhbFVuaWZvcm1zKF8sbixrLEEpLEJCdC51cGxvYWQoY3QsbC51bmlmb3Jtc0xpc3QsXyxZKSksbi5pc1NoYWRlck1hdGVyaWFsJiYhMD09PW4udW5pZm9ybXNOZWVkVXBkYXRlJiYoQkJ0LnVwbG9hZChjdCxsLnVuaWZvcm1zTGlzdCxfLFkpLG4udW5pZm9ybXNOZWVkVXBkYXRlPSExKSxuLmlzU3ByaXRlTWF0ZXJpYWwmJmcuc2V0VmFsdWUoY3QsImNlbnRlciIsaS5jZW50ZXIpLGcuc2V0VmFsdWUoY3QsIm1vZGVsVmlld01hdHJpeCIsaS5tb2RlbFZpZXdNYXRyaXgpLGcuc2V0VmFsdWUoY3QsIm5vcm1hbE1hdHJpeCIsaS5ub3JtYWxNYXRyaXgpLGcuc2V0VmFsdWUoY3QsIm1vZGVsTWF0cml4IixpLm1hdHJpeFdvcmxkKSxmfXZ0LnNldEFuaW1hdGlvbkxvb3AoKGZ1bmN0aW9uIEV0KHQpe2R0LmlzUHJlc2VudGluZ3x8eXQmJnl0KHQpfSkpLCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZ2dC5zZXRDb250ZXh0KHdpbmRvdyksdGhpcy5zZXRBbmltYXRpb25Mb29wPWZ1bmN0aW9uKHQpe3l0PXQsZHQuc2V0QW5pbWF0aW9uTG9vcCh0KSxudWxsPT09dD92dC5zdG9wKCk6dnQuc3RhcnQoKX0sdGhpcy5yZW5kZXI9ZnVuY3Rpb24odCxlKXtsZXQgbixpO2lmKHZvaWQgMCE9PWFyZ3VtZW50c1syXSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZW5kZXIoKTogdGhlIHJlbmRlclRhcmdldCBhcmd1bWVudCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnNldFJlbmRlclRhcmdldCgpIGluc3RlYWQuIiksbj1hcmd1bWVudHNbMl0pLHZvaWQgMCE9PWFyZ3VtZW50c1szXSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZW5kZXIoKTogdGhlIGZvcmNlQ2xlYXIgYXJndW1lbnQgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5jbGVhcigpIGluc3RlYWQuIiksaT1hcmd1bWVudHNbM10pLHZvaWQgMCE9PWUmJiEwIT09ZS5pc0NhbWVyYSlyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlbmRlcjogY2FtZXJhIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5DYW1lcmEuIik7aWYoITA9PT1nKXJldHVybjtsdC5yZXNldERlZmF1bHRTdGF0ZSgpLHc9LTEsUz1udWxsLCEwPT09dC5hdXRvVXBkYXRlJiZ0LnVwZGF0ZU1hdHJpeFdvcmxkKCksbnVsbD09PWUucGFyZW50JiZlLnVwZGF0ZU1hdHJpeFdvcmxkKCksITA9PT1kdC5lbmFibGVkJiYhMD09PWR0LmlzUHJlc2VudGluZyYmKGU9ZHQuZ2V0Q2FtZXJhKGUpKSwhMD09PXQuaXNTY2VuZSYmdC5vbkJlZm9yZVJlbmRlcihtLHQsZSxufHxiKSxwPWV0LmdldCh0LGYubGVuZ3RoKSxwLmluaXQoKSxmLnB1c2gocCksQi5tdWx0aXBseU1hdHJpY2VzKGUucHJvamVjdGlvbk1hdHJpeCxlLm1hdHJpeFdvcmxkSW52ZXJzZSksUi5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeChCKSxEPXRoaXMubG9jYWxDbGlwcGluZ0VuYWJsZWQsej1udC5pbml0KHRoaXMuY2xpcHBpbmdQbGFuZXMsRCxlKSxkPXR0LmdldCh0LGUpLGQuaW5pdCgpLGJ0KHQsZSwwLG0uc29ydE9iamVjdHMpLGQuZmluaXNoKCksITA9PT1tLnNvcnRPYmplY3RzJiZkLnNvcnQoTCxQKSwhMD09PXomJm50LmJlZ2luU2hhZG93cygpO2NvbnN0IHI9cC5zdGF0ZS5zaGFkb3dzQXJyYXk7cHQucmVuZGVyKHIsdCxlKSxwLnNldHVwTGlnaHRzKCkscC5zZXR1cExpZ2h0c1ZpZXcoZSksITA9PT16JiZudC5lbmRTaGFkb3dzKCksITA9PT10aGlzLmluZm8uYXV0b1Jlc2V0JiZ0aGlzLmluZm8ucmVzZXQoKSx2b2lkIDAhPT1uJiZ0aGlzLnNldFJlbmRlclRhcmdldChuKSxpdC5yZW5kZXIoZCx0LGUsaSk7Y29uc3Qgbz1kLm9wYXF1ZSxhPWQudHJhbnNwYXJlbnQ7by5sZW5ndGg+MCYmeHQobyx0LGUpLGEubGVuZ3RoPjAmJnh0KGEsdCxlKSwhMD09PXQuaXNTY2VuZSYmdC5vbkFmdGVyUmVuZGVyKG0sdCxlKSxudWxsIT09YiYmKFkudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwKGIpLFkudXBkYXRlTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQoYikpLEcuYnVmZmVycy5kZXB0aC5zZXRUZXN0KCEwKSxHLmJ1ZmZlcnMuZGVwdGguc2V0TWFzayghMCksRy5idWZmZXJzLmNvbG9yLnNldE1hc2soITApLEcuc2V0UG9seWdvbk9mZnNldCghMSksZi5wb3AoKSxwPWYubGVuZ3RoPjA/ZltmLmxlbmd0aC0xXTpudWxsLGQ9bnVsbH0sdGhpcy5zZXRGcmFtZWJ1ZmZlcj1mdW5jdGlvbih0KXtfIT09dCYmbnVsbD09PWImJmN0LmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCx0KSxfPXR9LHRoaXMuZ2V0QWN0aXZlQ3ViZUZhY2U9ZnVuY3Rpb24oKXtyZXR1cm4geX0sdGhpcy5nZXRBY3RpdmVNaXBtYXBMZXZlbD1mdW5jdGlvbigpe3JldHVybiB2fSx0aGlzLmdldFJlbmRlckxpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gZH0sdGhpcy5zZXRSZW5kZXJMaXN0PWZ1bmN0aW9uKHQpe2Q9dH0sdGhpcy5nZXRSZW5kZXJUYXJnZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gYn0sdGhpcy5zZXRSZW5kZXJUYXJnZXQ9ZnVuY3Rpb24odCxlPTAsbj0wKXtiPXQseT1lLHY9bix0JiZ2b2lkIDA9PT1xLmdldCh0KS5fX3dlYmdsRnJhbWVidWZmZXImJlkuc2V0dXBSZW5kZXJUYXJnZXQodCk7bGV0IGk9XyxyPSExO2lmKHQpe2NvbnN0IG49cS5nZXQodCkuX193ZWJnbEZyYW1lYnVmZmVyO3QuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQ/KGk9bltlXSxyPSEwKTppPXQuaXNXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0P3EuZ2V0KHQpLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlcjpuLE0uY29weSh0LnZpZXdwb3J0KSxFLmNvcHkodC5zY2lzc29yKSxUPXQuc2Npc3NvclRlc3R9ZWxzZSBNLmNvcHkoTikubXVsdGlwbHlTY2FsYXIoaykuZmxvb3IoKSxFLmNvcHkoSSkubXVsdGlwbHlTY2FsYXIoaykuZmxvb3IoKSxUPU87aWYoeCE9PWkmJihjdC5iaW5kRnJhbWVidWZmZXIoMzYxNjAsaSkseD1pKSxHLnZpZXdwb3J0KE0pLEcuc2Npc3NvcihFKSxHLnNldFNjaXNzb3JUZXN0KFQpLHIpe2NvbnN0IGk9cS5nZXQodC50ZXh0dXJlKTtjdC5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzNjA2NCwzNDA2OStlLGkuX193ZWJnbFRleHR1cmUsbil9fSx0aGlzLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM9ZnVuY3Rpb24odCxlLG4saSxyLG8sYSl7aWYoIXR8fCF0LmlzV2ViR0xSZW5kZXJUYXJnZXQpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZW5kZXJUYXJnZXQgaXMgbm90IFRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0LiIpO2xldCBzPXEuZ2V0KHQpLl9fd2ViZ2xGcmFtZWJ1ZmZlcjtpZih0LmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0JiZ2b2lkIDAhPT1hJiYocz1zW2FdKSxzKXtsZXQgYT0hMTtzIT09eCYmKGN0LmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxzKSxhPSEwKTt0cnl7Y29uc3Qgcz10LnRleHR1cmUsbD1zLmZvcm1hdCxjPXMudHlwZTtpZihsIT09dE90JiZzdC5jb252ZXJ0KGwpIT09Y3QuZ2V0UGFyYW1ldGVyKDM1NzM5KSlyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM6IHJlbmRlclRhcmdldCBpcyBub3QgaW4gUkdCQSBvciBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkIGZvcm1hdC4iKTtjb25zdCB1PWM9PT1aSXQmJihVLmhhcygiRVhUX2NvbG9yX2J1ZmZlcl9oYWxmX2Zsb2F0Iil8fGouaXNXZWJHTDImJlUuaGFzKCJFWFRfY29sb3JfYnVmZmVyX2Zsb2F0IikpO2lmKCEoYz09PVlJdHx8c3QuY29udmVydChjKT09PWN0LmdldFBhcmFtZXRlcigzNTczOCl8fGM9PT1LSXQmJihqLmlzV2ViR0wyfHxVLmhhcygiT0VTX3RleHR1cmVfZmxvYXQiKXx8VS5oYXMoIldFQkdMX2NvbG9yX2J1ZmZlcl9mbG9hdCIpKXx8dSkpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZW5kZXJUYXJnZXQgaXMgbm90IGluIFVuc2lnbmVkQnl0ZVR5cGUgb3IgaW1wbGVtZW50YXRpb24gZGVmaW5lZCB0eXBlLiIpOzM2MDUzPT09Y3QuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cygzNjE2MCk/ZT49MCYmZTw9dC53aWR0aC1pJiZuPj0wJiZuPD10LmhlaWdodC1yJiZjdC5yZWFkUGl4ZWxzKGUsbixpLHIsc3QuY29udmVydChsKSxzdC5jb252ZXJ0KGMpLG8pOmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXIucmVhZFJlbmRlclRhcmdldFBpeGVsczogcmVhZFBpeGVscyBmcm9tIHJlbmRlclRhcmdldCBmYWlsZWQuIEZyYW1lYnVmZmVyIG5vdCBjb21wbGV0ZS4iKX1maW5hbGx5e2EmJmN0LmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCx4KX19fSx0aGlzLmNvcHlGcmFtZWJ1ZmZlclRvVGV4dHVyZT1mdW5jdGlvbih0LGUsbj0wKXtjb25zdCBpPU1hdGgucG93KDIsLW4pLHI9TWF0aC5mbG9vcihlLmltYWdlLndpZHRoKmkpLG89TWF0aC5mbG9vcihlLmltYWdlLmhlaWdodCppKSxhPXN0LmNvbnZlcnQoZS5mb3JtYXQpO1kuc2V0VGV4dHVyZTJEKGUsMCksY3QuY29weVRleEltYWdlMkQoMzU1MyxuLGEsdC54LHQueSxyLG8sMCksRy51bmJpbmRUZXh0dXJlKCl9LHRoaXMuY29weVRleHR1cmVUb1RleHR1cmU9ZnVuY3Rpb24odCxlLG4saT0wKXtjb25zdCByPWUuaW1hZ2Uud2lkdGgsbz1lLmltYWdlLmhlaWdodCxhPXN0LmNvbnZlcnQobi5mb3JtYXQpLHM9c3QuY29udmVydChuLnR5cGUpO1kuc2V0VGV4dHVyZTJEKG4sMCksY3QucGl4ZWxTdG9yZWkoMzc0NDAsbi5mbGlwWSksY3QucGl4ZWxTdG9yZWkoMzc0NDEsbi5wcmVtdWx0aXBseUFscGhhKSxjdC5waXhlbFN0b3JlaSgzMzE3LG4udW5wYWNrQWxpZ25tZW50KSxlLmlzRGF0YVRleHR1cmU/Y3QudGV4U3ViSW1hZ2UyRCgzNTUzLGksdC54LHQueSxyLG8sYSxzLGUuaW1hZ2UuZGF0YSk6ZS5pc0NvbXByZXNzZWRUZXh0dXJlP2N0LmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKDM1NTMsaSx0LngsdC55LGUubWlwbWFwc1swXS53aWR0aCxlLm1pcG1hcHNbMF0uaGVpZ2h0LGEsZS5taXBtYXBzWzBdLmRhdGEpOmN0LnRleFN1YkltYWdlMkQoMzU1MyxpLHQueCx0LnksYSxzLGUuaW1hZ2UpLDA9PT1pJiZuLmdlbmVyYXRlTWlwbWFwcyYmY3QuZ2VuZXJhdGVNaXBtYXAoMzU1MyksRy51bmJpbmRUZXh0dXJlKCl9LHRoaXMuaW5pdFRleHR1cmU9ZnVuY3Rpb24odCl7WS5zZXRUZXh0dXJlMkQodCwwKSxHLnVuYmluZFRleHR1cmUoKX0sdGhpcy5yZXNldFN0YXRlPWZ1bmN0aW9uKCl7Ry5yZXNldCgpLGx0LnJlc2V0KCl9LCJ1bmRlZmluZWQiIT10eXBlb2YgX19USFJFRV9ERVZUT09MU19fJiZfX1RIUkVFX0RFVlRPT0xTX18uZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoIm9ic2VydmUiLHtkZXRhaWw6dGhpc30pKX1mdW5jdGlvbiBrSHQodCl7QUh0LmNhbGwodGhpcyx0KX0oX0h0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGd6dC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1fSHQsX0h0LnByb3RvdHlwZS5pc01lc2hEZXB0aE1hdGVyaWFsPSEwLF9IdC5wcm90b3R5cGUuY29weT1mdW5jdGlvbih0KXtyZXR1cm4gZ3p0LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLmRlcHRoUGFja2luZz10LmRlcHRoUGFja2luZyx0aGlzLnNraW5uaW5nPXQuc2tpbm5pbmcsdGhpcy5tb3JwaFRhcmdldHM9dC5tb3JwaFRhcmdldHMsdGhpcy5tYXA9dC5tYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXN9LCh5SHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZ3p0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPXlIdCx5SHQucHJvdG90eXBlLmlzTWVzaERpc3RhbmNlTWF0ZXJpYWw9ITAseUh0LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHQpe3JldHVybiBnenQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMucmVmZXJlbmNlUG9zaXRpb24uY29weSh0LnJlZmVyZW5jZVBvc2l0aW9uKSx0aGlzLm5lYXJEaXN0YW5jZT10Lm5lYXJEaXN0YW5jZSx0aGlzLmZhckRpc3RhbmNlPXQuZmFyRGlzdGFuY2UsdGhpcy5za2lubmluZz10LnNraW5uaW5nLHRoaXMubW9ycGhUYXJnZXRzPXQubW9ycGhUYXJnZXRzLHRoaXMubWFwPXQubWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzfSxTSHQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShwRHQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6U0h0LGlzQXJyYXlDYW1lcmE6ITB9KSxNSHQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShXUnQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6TUh0LGlzR3JvdXA6ITB9KSxPYmplY3QuYXNzaWduKEVIdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOkVIdCxnZXRIYW5kU3BhY2U6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09PXRoaXMuX2hhbmQmJih0aGlzLl9oYW5kPW5ldyBNSHQsdGhpcy5faGFuZC5tYXRyaXhBdXRvVXBkYXRlPSExLHRoaXMuX2hhbmQudmlzaWJsZT0hMSx0aGlzLl9oYW5kLmpvaW50cz17fSx0aGlzLl9oYW5kLmlucHV0U3RhdGU9e3BpbmNoaW5nOiExfSksdGhpcy5faGFuZH0sZ2V0VGFyZ2V0UmF5U3BhY2U6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09PXRoaXMuX3RhcmdldFJheSYmKHRoaXMuX3RhcmdldFJheT1uZXcgTUh0LHRoaXMuX3RhcmdldFJheS5tYXRyaXhBdXRvVXBkYXRlPSExLHRoaXMuX3RhcmdldFJheS52aXNpYmxlPSExKSx0aGlzLl90YXJnZXRSYXl9LGdldEdyaXBTcGFjZTpmdW5jdGlvbigpe3JldHVybiBudWxsPT09dGhpcy5fZ3JpcCYmKHRoaXMuX2dyaXA9bmV3IE1IdCx0aGlzLl9ncmlwLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5fZ3JpcC52aXNpYmxlPSExKSx0aGlzLl9ncmlwfSxkaXNwYXRjaEV2ZW50OmZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT09dGhpcy5fdGFyZ2V0UmF5JiZ0aGlzLl90YXJnZXRSYXkuZGlzcGF0Y2hFdmVudCh0KSxudWxsIT09dGhpcy5fZ3JpcCYmdGhpcy5fZ3JpcC5kaXNwYXRjaEV2ZW50KHQpLG51bGwhPT10aGlzLl9oYW5kJiZ0aGlzLl9oYW5kLmRpc3BhdGNoRXZlbnQodCksdGhpc30sZGlzY29ubmVjdDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNjb25uZWN0ZWQiLGRhdGE6dH0pLG51bGwhPT10aGlzLl90YXJnZXRSYXkmJih0aGlzLl90YXJnZXRSYXkudmlzaWJsZT0hMSksbnVsbCE9PXRoaXMuX2dyaXAmJih0aGlzLl9ncmlwLnZpc2libGU9ITEpLG51bGwhPT10aGlzLl9oYW5kJiYodGhpcy5faGFuZC52aXNpYmxlPSExKSx0aGlzfSx1cGRhdGU6ZnVuY3Rpb24odCxlLG4pe2xldCBpPW51bGwscj1udWxsLG89bnVsbDtjb25zdCBhPXRoaXMuX3RhcmdldFJheSxzPXRoaXMuX2dyaXAsbD10aGlzLl9oYW5kO2lmKHQmJiJ2aXNpYmxlLWJsdXJyZWQiIT09ZS5zZXNzaW9uLnZpc2liaWxpdHlTdGF0ZSlpZihsJiZ0LmhhbmQpe289ITA7Zm9yKGNvbnN0IGkgb2YgdC5oYW5kLnZhbHVlcygpKXtjb25zdCB0PWUuZ2V0Sm9pbnRQb3NlKGksbik7aWYodm9pZCAwPT09bC5qb2ludHNbaS5qb2ludE5hbWVdKXtjb25zdCB0PW5ldyBNSHQ7dC5tYXRyaXhBdXRvVXBkYXRlPSExLHQudmlzaWJsZT0hMSxsLmpvaW50c1tpLmpvaW50TmFtZV09dCxsLmFkZCh0KX1jb25zdCByPWwuam9pbnRzW2kuam9pbnROYW1lXTtudWxsIT09dCYmKHIubWF0cml4LmZyb21BcnJheSh0LnRyYW5zZm9ybS5tYXRyaXgpLHIubWF0cml4LmRlY29tcG9zZShyLnBvc2l0aW9uLHIucm90YXRpb24sci5zY2FsZSksci5qb2ludFJhZGl1cz10LnJhZGl1cyksci52aXNpYmxlPW51bGwhPT10fWNvbnN0IGk9bC5qb2ludHNbImluZGV4LWZpbmdlci10aXAiXS5wb3NpdGlvbi5kaXN0YW5jZVRvKGwuam9pbnRzWyJ0aHVtYi10aXAiXS5wb3NpdGlvbikscj0uMDIsYT0uMDA1O2wuaW5wdXRTdGF0ZS5waW5jaGluZyYmaT5yK2E/KGwuaW5wdXRTdGF0ZS5waW5jaGluZz0hMSx0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6InBpbmNoZW5kIixoYW5kZWRuZXNzOnQuaGFuZGVkbmVzcyx0YXJnZXQ6dGhpc30pKTohbC5pbnB1dFN0YXRlLnBpbmNoaW5nJiZpPD1yLWEmJihsLmlucHV0U3RhdGUucGluY2hpbmc9ITAsdGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJwaW5jaHN0YXJ0IixoYW5kZWRuZXNzOnQuaGFuZGVkbmVzcyx0YXJnZXQ6dGhpc30pKX1lbHNlIG51bGwhPT1hJiYoaT1lLmdldFBvc2UodC50YXJnZXRSYXlTcGFjZSxuKSxudWxsIT09aSYmKGEubWF0cml4LmZyb21BcnJheShpLnRyYW5zZm9ybS5tYXRyaXgpLGEubWF0cml4LmRlY29tcG9zZShhLnBvc2l0aW9uLGEucm90YXRpb24sYS5zY2FsZSkpKSxudWxsIT09cyYmdC5ncmlwU3BhY2UmJihyPWUuZ2V0UG9zZSh0LmdyaXBTcGFjZSxuKSxudWxsIT09ciYmKHMubWF0cml4LmZyb21BcnJheShyLnRyYW5zZm9ybS5tYXRyaXgpLHMubWF0cml4LmRlY29tcG9zZShzLnBvc2l0aW9uLHMucm90YXRpb24scy5zY2FsZSkpKTtyZXR1cm4gbnVsbCE9PWEmJihhLnZpc2libGU9bnVsbCE9PWkpLG51bGwhPT1zJiYocy52aXNpYmxlPW51bGwhPT1yKSxudWxsIT09bCYmKGwudmlzaWJsZT1udWxsIT09byksdGhpc319KSxPYmplY3QuYXNzaWduKFRIdC5wcm90b3R5cGUsTk90LnByb3RvdHlwZSksa0h0LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoQUh0LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOmtIdCxpc1dlYkdMMVJlbmRlcmVyOiEwfSk7Y2xhc3MgTEh0e2NvbnN0cnVjdG9yKHQsZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlzRm9nRXhwMiIse3ZhbHVlOiEwfSksdGhpcy5uYW1lPSIiLHRoaXMuY29sb3I9bmV3IHB6dCh0KSx0aGlzLmRlbnNpdHk9dm9pZCAwIT09ZT9lOjI1ZS01fWNsb25lKCl7cmV0dXJuIG5ldyBMSHQodGhpcy5jb2xvcix0aGlzLmRlbnNpdHkpfXRvSlNPTigpe3JldHVybnt0eXBlOiJGb2dFeHAyIixjb2xvcjp0aGlzLmNvbG9yLmdldEhleCgpLGRlbnNpdHk6dGhpcy5kZW5zaXR5fX19Y2xhc3MgUEh0e2NvbnN0cnVjdG9yKHQsZSxuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaXNGb2ciLHt2YWx1ZTohMH0pLHRoaXMubmFtZT0iIix0aGlzLmNvbG9yPW5ldyBwenQodCksdGhpcy5uZWFyPXZvaWQgMCE9PWU/ZToxLHRoaXMuZmFyPXZvaWQgMCE9PW4/bjoxZTN9Y2xvbmUoKXtyZXR1cm4gbmV3IFBIdCh0aGlzLmNvbG9yLHRoaXMubmVhcix0aGlzLmZhcil9dG9KU09OKCl7cmV0dXJue3R5cGU6IkZvZyIsY29sb3I6dGhpcy5jb2xvci5nZXRIZXgoKSxuZWFyOnRoaXMubmVhcixmYXI6dGhpcy5mYXJ9fX1jbGFzcyBOSHQgZXh0ZW5kcyBXUnR7Y29uc3RydWN0b3IoKXtzdXBlcigpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpc1NjZW5lIix7dmFsdWU6ITB9KSx0aGlzLnR5cGU9IlNjZW5lIix0aGlzLmJhY2tncm91bmQ9bnVsbCx0aGlzLmVudmlyb25tZW50PW51bGwsdGhpcy5mb2c9bnVsbCx0aGlzLm92ZXJyaWRlTWF0ZXJpYWw9bnVsbCx0aGlzLmF1dG9VcGRhdGU9ITAsInVuZGVmaW5lZCIhPXR5cGVvZiBfX1RIUkVFX0RFVlRPT0xTX18mJl9fVEhSRUVfREVWVE9PTFNfXy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgib2JzZXJ2ZSIse2RldGFpbDp0aGlzfSkpfWNvcHkodCxlKXtyZXR1cm4gc3VwZXIuY29weSh0LGUpLG51bGwhPT10LmJhY2tncm91bmQmJih0aGlzLmJhY2tncm91bmQ9dC5iYWNrZ3JvdW5kLmNsb25lKCkpLG51bGwhPT10LmVudmlyb25tZW50JiYodGhpcy5lbnZpcm9ubWVudD10LmVudmlyb25tZW50LmNsb25lKCkpLG51bGwhPT10LmZvZyYmKHRoaXMuZm9nPXQuZm9nLmNsb25lKCkpLG51bGwhPT10Lm92ZXJyaWRlTWF0ZXJpYWwmJih0aGlzLm92ZXJyaWRlTWF0ZXJpYWw9dC5vdmVycmlkZU1hdGVyaWFsLmNsb25lKCkpLHRoaXMuYXV0b1VwZGF0ZT10LmF1dG9VcGRhdGUsdGhpcy5tYXRyaXhBdXRvVXBkYXRlPXQubWF0cml4QXV0b1VwZGF0ZSx0aGlzfXRvSlNPTih0KXtjb25zdCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gbnVsbCE9PXRoaXMuYmFja2dyb3VuZCYmKGUub2JqZWN0LmJhY2tncm91bmQ9dGhpcy5iYWNrZ3JvdW5kLnRvSlNPTih0KSksbnVsbCE9PXRoaXMuZW52aXJvbm1lbnQmJihlLm9iamVjdC5lbnZpcm9ubWVudD10aGlzLmVudmlyb25tZW50LnRvSlNPTih0KSksbnVsbCE9PXRoaXMuZm9nJiYoZS5vYmplY3QuZm9nPXRoaXMuZm9nLnRvSlNPTigpKSxlfX1mdW5jdGlvbiBJSHQodCxlKXt0aGlzLmFycmF5PXQsdGhpcy5zdHJpZGU9ZSx0aGlzLmNvdW50PXZvaWQgMCE9PXQ/dC5sZW5ndGgvZTowLHRoaXMudXNhZ2U9a090LHRoaXMudXBkYXRlUmFuZ2U9e29mZnNldDowLGNvdW50Oi0xfSx0aGlzLnZlcnNpb249MCx0aGlzLnV1aWQ9Uk90LmdlbmVyYXRlVVVJRCgpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShJSHQucHJvdG90eXBlLCJuZWVkc1VwZGF0ZSIse3NldDpmdW5jdGlvbih0KXshMD09PXQmJnRoaXMudmVyc2lvbisrfX0pLE9iamVjdC5hc3NpZ24oSUh0LnByb3RvdHlwZSx7aXNJbnRlcmxlYXZlZEJ1ZmZlcjohMCxvblVwbG9hZENhbGxiYWNrOmZ1bmN0aW9uKCl7fSxzZXRVc2FnZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy51c2FnZT10LHRoaXN9LGNvcHk6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYXJyYXk9bmV3IHQuYXJyYXkuY29uc3RydWN0b3IodC5hcnJheSksdGhpcy5jb3VudD10LmNvdW50LHRoaXMuc3RyaWRlPXQuc3RyaWRlLHRoaXMudXNhZ2U9dC51c2FnZSx0aGlzfSxjb3B5QXQ6ZnVuY3Rpb24odCxlLG4pe3QqPXRoaXMuc3RyaWRlLG4qPWUuc3RyaWRlO2ZvcihsZXQgaT0wLHI9dGhpcy5zdHJpZGU7aTxyO2krKyl0aGlzLmFycmF5W3QraV09ZS5hcnJheVtuK2ldO3JldHVybiB0aGlzfSxzZXQ6ZnVuY3Rpb24odCxlPTApe3JldHVybiB0aGlzLmFycmF5LnNldCh0LGUpLHRoaXN9LGNsb25lOmZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQuYXJyYXlCdWZmZXJzJiYodC5hcnJheUJ1ZmZlcnM9e30pLHZvaWQgMD09PXRoaXMuYXJyYXkuYnVmZmVyLl91dWlkJiYodGhpcy5hcnJheS5idWZmZXIuX3V1aWQ9Uk90LmdlbmVyYXRlVVVJRCgpKSx2b2lkIDA9PT10LmFycmF5QnVmZmVyc1t0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZF0mJih0LmFycmF5QnVmZmVyc1t0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZF09dGhpcy5hcnJheS5zbGljZSgwKS5idWZmZXIpO2NvbnN0IGU9bmV3IElIdChuZXcgdGhpcy5hcnJheS5jb25zdHJ1Y3Rvcih0LmFycmF5QnVmZmVyc1t0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZF0pLHRoaXMuc3RyaWRlKTtyZXR1cm4gZS5zZXRVc2FnZSh0aGlzLnVzYWdlKSxlfSxvblVwbG9hZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vblVwbG9hZENhbGxiYWNrPXQsdGhpc30sdG9KU09OOmZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10LmFycmF5QnVmZmVycyYmKHQuYXJyYXlCdWZmZXJzPXt9KSx2b2lkIDA9PT10aGlzLmFycmF5LmJ1ZmZlci5fdXVpZCYmKHRoaXMuYXJyYXkuYnVmZmVyLl91dWlkPVJPdC5nZW5lcmF0ZVVVSUQoKSksdm9pZCAwPT09dC5hcnJheUJ1ZmZlcnNbdGhpcy5hcnJheS5idWZmZXIuX3V1aWRdJiYodC5hcnJheUJ1ZmZlcnNbdGhpcy5hcnJheS5idWZmZXIuX3V1aWRdPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG5ldyBVaW50MzJBcnJheSh0aGlzLmFycmF5LmJ1ZmZlcikpKSx7dXVpZDp0aGlzLnV1aWQsYnVmZmVyOnRoaXMuYXJyYXkuYnVmZmVyLl91dWlkLHR5cGU6dGhpcy5hcnJheS5jb25zdHJ1Y3Rvci5uYW1lLHN0cmlkZTp0aGlzLnN0cmlkZX19fSk7Y29uc3QgT0h0PW5ldyBxT3Q7ZnVuY3Rpb24gUkh0KHQsZSxuLGkpe3RoaXMubmFtZT0iIix0aGlzLmRhdGE9dCx0aGlzLml0ZW1TaXplPWUsdGhpcy5vZmZzZXQ9bix0aGlzLm5vcm1hbGl6ZWQ9ITA9PT1pfWZ1bmN0aW9uIHpIdCh0KXtnenQuY2FsbCh0aGlzKSx0aGlzLnR5cGU9IlNwcml0ZU1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBwenQoMTY3NzcyMTUpLHRoaXMubWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMucm90YXRpb249MCx0aGlzLnNpemVBdHRlbnVhdGlvbj0hMCx0aGlzLnRyYW5zcGFyZW50PSEwLHRoaXMuc2V0VmFsdWVzKHQpfWxldCBESHQ7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUkh0LnByb3RvdHlwZSx7Y291bnQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGEuY291bnR9fSxhcnJheTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheX19LG5lZWRzVXBkYXRlOntzZXQ6ZnVuY3Rpb24odCl7dGhpcy5kYXRhLm5lZWRzVXBkYXRlPXR9fX0pLE9iamVjdC5hc3NpZ24oUkh0LnByb3RvdHlwZSx7aXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZTohMCxhcHBseU1hdHJpeDQ6ZnVuY3Rpb24odCl7Zm9yKGxldCBlPTAsbj10aGlzLmRhdGEuY291bnQ7ZTxuO2UrKylPSHQueD10aGlzLmdldFgoZSksT0h0Lnk9dGhpcy5nZXRZKGUpLE9IdC56PXRoaXMuZ2V0WihlKSxPSHQuYXBwbHlNYXRyaXg0KHQpLHRoaXMuc2V0WFlaKGUsT0h0LngsT0h0LnksT0h0LnopO3JldHVybiB0aGlzfSxzZXRYOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXRdPWUsdGhpc30sc2V0WTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzFdPWUsdGhpc30sc2V0WjpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzJdPWUsdGhpc30sc2V0VzpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzNdPWUsdGhpc30sZ2V0WDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldF19LGdldFk6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrMV19LGdldFo6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrMl19LGdldFc6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrM119LHNldFhZOmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5Wyh0PXQqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCkrMF09ZSx0aGlzLmRhdGEuYXJyYXlbdCsxXT1uLHRoaXN9LHNldFhZWjpmdW5jdGlvbih0LGUsbixpKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5Wyh0PXQqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCkrMF09ZSx0aGlzLmRhdGEuYXJyYXlbdCsxXT1uLHRoaXMuZGF0YS5hcnJheVt0KzJdPWksdGhpc30sc2V0WFlaVzpmdW5jdGlvbih0LGUsbixpLHIpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbKHQ9dCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KSswXT1lLHRoaXMuZGF0YS5hcnJheVt0KzFdPW4sdGhpcy5kYXRhLmFycmF5W3QrMl09aSx0aGlzLmRhdGEuYXJyYXlbdCszXT1yLHRoaXN9LGNsb25lOmZ1bmN0aW9uKHQpe2lmKHZvaWQgMD09PXQpe2NvbnNvbGUubG9nKCJUSFJFRS5JbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZS5jbG9uZSgpOiBDbG9uaW5nIGFuIGludGVybGF2ZWQgYnVmZmVyIGF0dHJpYnV0ZSB3aWxsIGRlaW50ZXJsZWF2ZSBidWZmZXIgZGF0YS4iKTtjb25zdCB0PVtdO2ZvcihsZXQgZT0wO2U8dGhpcy5jb3VudDtlKyspe2NvbnN0IG49ZSp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0O2ZvcihsZXQgZT0wO2U8dGhpcy5pdGVtU2l6ZTtlKyspdC5wdXNoKHRoaXMuZGF0YS5hcnJheVtuK2VdKX1yZXR1cm4gbmV3IGJ6dChuZXcgdGhpcy5hcnJheS5jb25zdHJ1Y3Rvcih0KSx0aGlzLml0ZW1TaXplLHRoaXMubm9ybWFsaXplZCl9cmV0dXJuIHZvaWQgMD09PXQuaW50ZXJsZWF2ZWRCdWZmZXJzJiYodC5pbnRlcmxlYXZlZEJ1ZmZlcnM9e30pLHZvaWQgMD09PXQuaW50ZXJsZWF2ZWRCdWZmZXJzW3RoaXMuZGF0YS51dWlkXSYmKHQuaW50ZXJsZWF2ZWRCdWZmZXJzW3RoaXMuZGF0YS51dWlkXT10aGlzLmRhdGEuY2xvbmUodCkpLG5ldyBSSHQodC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdLHRoaXMuaXRlbVNpemUsdGhpcy5vZmZzZXQsdGhpcy5ub3JtYWxpemVkKX0sdG9KU09OOmZ1bmN0aW9uKHQpe2lmKHZvaWQgMD09PXQpe2NvbnNvbGUubG9nKCJUSFJFRS5JbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZS50b0pTT04oKTogU2VyaWFsaXppbmcgYW4gaW50ZXJsYXZlZCBidWZmZXIgYXR0cmlidXRlIHdpbGwgZGVpbnRlcmxlYXZlIGJ1ZmZlciBkYXRhLiIpO2NvbnN0IHQ9W107Zm9yKGxldCBlPTA7ZTx0aGlzLmNvdW50O2UrKyl7Y29uc3Qgbj1lKnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQ7Zm9yKGxldCBlPTA7ZTx0aGlzLml0ZW1TaXplO2UrKyl0LnB1c2godGhpcy5kYXRhLmFycmF5W24rZV0pfXJldHVybntpdGVtU2l6ZTp0aGlzLml0ZW1TaXplLHR5cGU6dGhpcy5hcnJheS5jb25zdHJ1Y3Rvci5uYW1lLGFycmF5OnQsbm9ybWFsaXplZDp0aGlzLm5vcm1hbGl6ZWR9fXJldHVybiB2b2lkIDA9PT10LmludGVybGVhdmVkQnVmZmVycyYmKHQuaW50ZXJsZWF2ZWRCdWZmZXJzPXt9KSx2b2lkIDA9PT10LmludGVybGVhdmVkQnVmZmVyc1t0aGlzLmRhdGEudXVpZF0mJih0LmludGVybGVhdmVkQnVmZmVyc1t0aGlzLmRhdGEudXVpZF09dGhpcy5kYXRhLnRvSlNPTih0KSkse2lzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU6ITAsaXRlbVNpemU6dGhpcy5pdGVtU2l6ZSxkYXRhOnRoaXMuZGF0YS51dWlkLG9mZnNldDp0aGlzLm9mZnNldCxub3JtYWxpemVkOnRoaXMubm9ybWFsaXplZH19fSksKHpIdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShnenQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ekh0LHpIdC5wcm90b3R5cGUuaXNTcHJpdGVNYXRlcmlhbD0hMCx6SHQucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24odCl7cmV0dXJuIGd6dC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubWFwPXQubWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLnJvdGF0aW9uPXQucm90YXRpb24sdGhpcy5zaXplQXR0ZW51YXRpb249dC5zaXplQXR0ZW51YXRpb24sdGhpc307Y29uc3QgQkh0PW5ldyBxT3QsSEh0PW5ldyBxT3QsRkh0PW5ldyBxT3QsVkh0PW5ldyB6T3QsVUh0PW5ldyB6T3Qsakh0PW5ldyBiUnQsR0h0PW5ldyBxT3QsV0h0PW5ldyBxT3QscUh0PW5ldyBxT3QsWUh0PW5ldyB6T3QsWEh0PW5ldyB6T3QsJEh0PW5ldyB6T3Q7ZnVuY3Rpb24gS0h0KHQpe2lmKFdSdC5jYWxsKHRoaXMpLHRoaXMudHlwZT0iU3ByaXRlIix2b2lkIDA9PT1ESHQpe0RIdD1uZXcgVnp0O2NvbnN0IHQ9bmV3IElIdChuZXcgRmxvYXQzMkFycmF5KFstLjUsLS41LDAsMCwwLC41LC0uNSwwLDEsMCwuNSwuNSwwLDEsMSwtLjUsLjUsMCwwLDFdKSw1KTtESHQuc2V0SW5kZXgoWzAsMSwyLDAsMiwzXSksREh0LnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBSSHQodCwzLDAsITEpKSxESHQuc2V0QXR0cmlidXRlKCJ1diIsbmV3IFJIdCh0LDIsMywhMSkpfXRoaXMuZ2VvbWV0cnk9REh0LHRoaXMubWF0ZXJpYWw9dm9pZCAwIT09dD90Om5ldyB6SHQsdGhpcy5jZW50ZXI9bmV3IHpPdCguNSwuNSl9ZnVuY3Rpb24gWkh0KHQsZSxuLGkscixvKXtWSHQuc3ViVmVjdG9ycyh0LG4pLmFkZFNjYWxhciguNSkubXVsdGlwbHkoaSksdm9pZCAwIT09cj8oVUh0Lng9bypWSHQueC1yKlZIdC55LFVIdC55PXIqVkh0LngrbypWSHQueSk6VUh0LmNvcHkoVkh0KSx0LmNvcHkoZSksdC54Kz1VSHQueCx0LnkrPVVIdC55LHQuYXBwbHlNYXRyaXg0KGpIdCl9S0h0LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoV1J0LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOktIdCxpc1Nwcml0ZTohMCxyYXljYXN0OmZ1bmN0aW9uKHQsZSl7bnVsbD09PXQuY2FtZXJhJiZjb25zb2xlLmVycm9yKCdUSFJFRS5TcHJpdGU6ICJSYXljYXN0ZXIuY2FtZXJhIiBuZWVkcyB0byBiZSBzZXQgaW4gb3JkZXIgdG8gcmF5Y2FzdCBhZ2FpbnN0IHNwcml0ZXMuJyksSEh0LnNldEZyb21NYXRyaXhTY2FsZSh0aGlzLm1hdHJpeFdvcmxkKSxqSHQuY29weSh0LmNhbWVyYS5tYXRyaXhXb3JsZCksdGhpcy5tb2RlbFZpZXdNYXRyaXgubXVsdGlwbHlNYXRyaWNlcyh0LmNhbWVyYS5tYXRyaXhXb3JsZEludmVyc2UsdGhpcy5tYXRyaXhXb3JsZCksRkh0LnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1vZGVsVmlld01hdHJpeCksdC5jYW1lcmEuaXNQZXJzcGVjdGl2ZUNhbWVyYSYmITE9PT10aGlzLm1hdGVyaWFsLnNpemVBdHRlbnVhdGlvbiYmSEh0Lm11bHRpcGx5U2NhbGFyKC1GSHQueik7Y29uc3Qgbj10aGlzLm1hdGVyaWFsLnJvdGF0aW9uO2xldCBpLHI7MCE9PW4mJihyPU1hdGguY29zKG4pLGk9TWF0aC5zaW4obikpO2NvbnN0IG89dGhpcy5jZW50ZXI7Wkh0KEdIdC5zZXQoLS41LC0uNSwwKSxGSHQsbyxISHQsaSxyKSxaSHQoV0h0LnNldCguNSwtLjUsMCksRkh0LG8sSEh0LGksciksWkh0KHFIdC5zZXQoLjUsLjUsMCksRkh0LG8sSEh0LGksciksWUh0LnNldCgwLDApLFhIdC5zZXQoMSwwKSwkSHQuc2V0KDEsMSk7bGV0IGE9dC5yYXkuaW50ZXJzZWN0VHJpYW5nbGUoR0h0LFdIdCxxSHQsITEsQkh0KTtpZihudWxsPT09YSYmKFpIdChXSHQuc2V0KC0uNSwuNSwwKSxGSHQsbyxISHQsaSxyKSxYSHQuc2V0KDAsMSksYT10LnJheS5pbnRlcnNlY3RUcmlhbmdsZShHSHQscUh0LFdIdCwhMSxCSHQpLG51bGw9PT1hKSlyZXR1cm47Y29uc3Qgcz10LnJheS5vcmlnaW4uZGlzdGFuY2VUbyhCSHQpO3M8dC5uZWFyfHxzPnQuZmFyfHxlLnB1c2goe2Rpc3RhbmNlOnMscG9pbnQ6Qkh0LmNsb25lKCksdXY6YXp0LmdldFVWKEJIdCxHSHQsV0h0LHFIdCxZSHQsWEh0LCRIdCxuZXcgek90KSxmYWNlOm51bGwsb2JqZWN0OnRoaXN9KX0sY29weTpmdW5jdGlvbih0KXtyZXR1cm4gV1J0LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx2b2lkIDAhPT10LmNlbnRlciYmdGhpcy5jZW50ZXIuY29weSh0LmNlbnRlciksdGhpcy5tYXRlcmlhbD10Lm1hdGVyaWFsLHRoaXN9fSk7Y29uc3QgSkh0PW5ldyBxT3QsUUh0PW5ldyBxT3Q7ZnVuY3Rpb24gdEZ0KCl7V1J0LmNhbGwodGhpcyksdGhpcy5fY3VycmVudExldmVsPTAsdGhpcy50eXBlPSJMT0QiLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMse2xldmVsczp7ZW51bWVyYWJsZTohMCx2YWx1ZTpbXX19KSx0aGlzLmF1dG9VcGRhdGU9ITB9dEZ0LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoV1J0LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOnRGdCxpc0xPRDohMCxjb3B5OmZ1bmN0aW9uKHQpe1dSdC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCwhMSk7Y29uc3QgZT10LmxldmVscztmb3IobGV0IHQ9MCxuPWUubGVuZ3RoO3Q8bjt0Kyspe2NvbnN0IG49ZVt0XTt0aGlzLmFkZExldmVsKG4ub2JqZWN0LmNsb25lKCksbi5kaXN0YW5jZSl9cmV0dXJuIHRoaXMuYXV0b1VwZGF0ZT10LmF1dG9VcGRhdGUsdGhpc30sYWRkTGV2ZWw6ZnVuY3Rpb24odCxlPTApe2U9TWF0aC5hYnMoZSk7Y29uc3Qgbj10aGlzLmxldmVscztsZXQgaTtmb3IoaT0wO2k8bi5sZW5ndGgmJiEoZTxuW2ldLmRpc3RhbmNlKTtpKyspO3JldHVybiBuLnNwbGljZShpLDAse2Rpc3RhbmNlOmUsb2JqZWN0OnR9KSx0aGlzLmFkZCh0KSx0aGlzfSxnZXRDdXJyZW50TGV2ZWw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY3VycmVudExldmVsfSxnZXRPYmplY3RGb3JEaXN0YW5jZTpmdW5jdGlvbih0KXtjb25zdCBlPXRoaXMubGV2ZWxzO2lmKGUubGVuZ3RoPjApe2xldCBuLGk7Zm9yKG49MSxpPWUubGVuZ3RoO248aSYmISh0PGVbbl0uZGlzdGFuY2UpO24rKyk7cmV0dXJuIGVbbi0xXS5vYmplY3R9cmV0dXJuIG51bGx9LHJheWNhc3Q6ZnVuY3Rpb24odCxlKXtpZih0aGlzLmxldmVscy5sZW5ndGg+MCl7Skh0LnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1hdHJpeFdvcmxkKTtjb25zdCBuPXQucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKEpIdCk7dGhpcy5nZXRPYmplY3RGb3JEaXN0YW5jZShuKS5yYXljYXN0KHQsZSl9fSx1cGRhdGU6ZnVuY3Rpb24odCl7Y29uc3QgZT10aGlzLmxldmVscztpZihlLmxlbmd0aD4xKXtKSHQuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHQubWF0cml4V29ybGQpLFFIdC5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5tYXRyaXhXb3JsZCk7Y29uc3Qgbj1KSHQuZGlzdGFuY2VUbyhRSHQpL3Quem9vbTtsZXQgaSxyO2ZvcihlWzBdLm9iamVjdC52aXNpYmxlPSEwLGk9MSxyPWUubGVuZ3RoO2k8ciYmbj49ZVtpXS5kaXN0YW5jZTtpKyspZVtpLTFdLm9iamVjdC52aXNpYmxlPSExLGVbaV0ub2JqZWN0LnZpc2libGU9ITA7Zm9yKHRoaXMuX2N1cnJlbnRMZXZlbD1pLTE7aTxyO2krKyllW2ldLm9iamVjdC52aXNpYmxlPSExfX0sdG9KU09OOmZ1bmN0aW9uKHQpe2NvbnN0IGU9V1J0LnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzLHQpOyExPT09dGhpcy5hdXRvVXBkYXRlJiYoZS5vYmplY3QuYXV0b1VwZGF0ZT0hMSksZS5vYmplY3QubGV2ZWxzPVtdO2NvbnN0IG49dGhpcy5sZXZlbHM7Zm9yKGxldCB0PTAsaT1uLmxlbmd0aDt0PGk7dCsrKXtjb25zdCBpPW5bdF07ZS5vYmplY3QubGV2ZWxzLnB1c2goe29iamVjdDppLm9iamVjdC51dWlkLGRpc3RhbmNlOmkuZGlzdGFuY2V9KX1yZXR1cm4gZX19KTtjb25zdCBlRnQ9bmV3IHFPdCxuRnQ9bmV3IGpPdCxpRnQ9bmV3IGpPdCxyRnQ9bmV3IHFPdCxvRnQ9bmV3IGJSdDtmdW5jdGlvbiBhRnQodCxlKXt0JiZ0LmlzR2VvbWV0cnkmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLlNraW5uZWRNZXNoIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIiksb0R0LmNhbGwodGhpcyx0LGUpLHRoaXMudHlwZT0iU2tpbm5lZE1lc2giLHRoaXMuYmluZE1vZGU9ImF0dGFjaGVkIix0aGlzLmJpbmRNYXRyaXg9bmV3IGJSdCx0aGlzLmJpbmRNYXRyaXhJbnZlcnNlPW5ldyBiUnR9ZnVuY3Rpb24gc0Z0KCl7V1J0LmNhbGwodGhpcyksdGhpcy50eXBlPSJCb25lIn1hRnQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShvRHQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6YUZ0LGlzU2tpbm5lZE1lc2g6ITAsY29weTpmdW5jdGlvbih0KXtyZXR1cm4gb0R0LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLmJpbmRNb2RlPXQuYmluZE1vZGUsdGhpcy5iaW5kTWF0cml4LmNvcHkodC5iaW5kTWF0cml4KSx0aGlzLmJpbmRNYXRyaXhJbnZlcnNlLmNvcHkodC5iaW5kTWF0cml4SW52ZXJzZSksdGhpcy5za2VsZXRvbj10LnNrZWxldG9uLHRoaXN9LGJpbmQ6ZnVuY3Rpb24odCxlKXt0aGlzLnNrZWxldG9uPXQsdm9pZCAwPT09ZSYmKHRoaXMudXBkYXRlTWF0cml4V29ybGQoITApLHRoaXMuc2tlbGV0b24uY2FsY3VsYXRlSW52ZXJzZXMoKSxlPXRoaXMubWF0cml4V29ybGQpLHRoaXMuYmluZE1hdHJpeC5jb3B5KGUpLHRoaXMuYmluZE1hdHJpeEludmVyc2UuY29weShlKS5pbnZlcnQoKX0scG9zZTpmdW5jdGlvbigpe3RoaXMuc2tlbGV0b24ucG9zZSgpfSxub3JtYWxpemVTa2luV2VpZ2h0czpmdW5jdGlvbigpe2NvbnN0IHQ9bmV3IGpPdCxlPXRoaXMuZ2VvbWV0cnkuYXR0cmlidXRlcy5za2luV2VpZ2h0O2ZvcihsZXQgbj0wLGk9ZS5jb3VudDtuPGk7bisrKXt0Lng9ZS5nZXRYKG4pLHQueT1lLmdldFkobiksdC56PWUuZ2V0WihuKSx0Lnc9ZS5nZXRXKG4pO2NvbnN0IGk9MS90Lm1hbmhhdHRhbkxlbmd0aCgpO2khPT0xLzA/dC5tdWx0aXBseVNjYWxhcihpKTp0LnNldCgxLDAsMCwwKSxlLnNldFhZWlcobix0LngsdC55LHQueix0LncpfX0sdXBkYXRlTWF0cml4V29ybGQ6ZnVuY3Rpb24odCl7b0R0LnByb3RvdHlwZS51cGRhdGVNYXRyaXhXb3JsZC5jYWxsKHRoaXMsdCksImF0dGFjaGVkIj09PXRoaXMuYmluZE1vZGU/dGhpcy5iaW5kTWF0cml4SW52ZXJzZS5jb3B5KHRoaXMubWF0cml4V29ybGQpLmludmVydCgpOiJkZXRhY2hlZCI9PT10aGlzLmJpbmRNb2RlP3RoaXMuYmluZE1hdHJpeEludmVyc2UuY29weSh0aGlzLmJpbmRNYXRyaXgpLmludmVydCgpOmNvbnNvbGUud2FybigiVEhSRUUuU2tpbm5lZE1lc2g6IFVucmVjb2duaXplZCBiaW5kTW9kZTogIit0aGlzLmJpbmRNb2RlKX0sYm9uZVRyYW5zZm9ybTpmdW5jdGlvbih0LGUpe2NvbnN0IG49dGhpcy5za2VsZXRvbixpPXRoaXMuZ2VvbWV0cnk7bkZ0LmZyb21CdWZmZXJBdHRyaWJ1dGUoaS5hdHRyaWJ1dGVzLnNraW5JbmRleCx0KSxpRnQuZnJvbUJ1ZmZlckF0dHJpYnV0ZShpLmF0dHJpYnV0ZXMuc2tpbldlaWdodCx0KSxlRnQuZnJvbUJ1ZmZlckF0dHJpYnV0ZShpLmF0dHJpYnV0ZXMucG9zaXRpb24sdCkuYXBwbHlNYXRyaXg0KHRoaXMuYmluZE1hdHJpeCksZS5zZXQoMCwwLDApO2ZvcihsZXQgdD0wO3Q8NDt0Kyspe2NvbnN0IGk9aUZ0LmdldENvbXBvbmVudCh0KTtpZigwIT09aSl7Y29uc3Qgcj1uRnQuZ2V0Q29tcG9uZW50KHQpO29GdC5tdWx0aXBseU1hdHJpY2VzKG4uYm9uZXNbcl0ubWF0cml4V29ybGQsbi5ib25lSW52ZXJzZXNbcl0pLGUuYWRkU2NhbGVkVmVjdG9yKHJGdC5jb3B5KGVGdCkuYXBwbHlNYXRyaXg0KG9GdCksaSl9fXJldHVybiBlLmFwcGx5TWF0cml4NCh0aGlzLmJpbmRNYXRyaXhJbnZlcnNlKX19KSxzRnQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShXUnQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6c0Z0LGlzQm9uZTohMH0pO2NvbnN0IGxGdD1uZXcgYlJ0LGNGdD1uZXcgYlJ0O2Z1bmN0aW9uIHVGdCh0PVtdLGU9W10pe3RoaXMudXVpZD1ST3QuZ2VuZXJhdGVVVUlEKCksdGhpcy5ib25lcz10LnNsaWNlKDApLHRoaXMuYm9uZUludmVyc2VzPWUsdGhpcy5ib25lTWF0cmljZXM9bnVsbCx0aGlzLmJvbmVUZXh0dXJlPW51bGwsdGhpcy5ib25lVGV4dHVyZVNpemU9MCx0aGlzLmZyYW1lPS0xLHRoaXMuaW5pdCgpfU9iamVjdC5hc3NpZ24odUZ0LnByb3RvdHlwZSx7aW5pdDpmdW5jdGlvbigpe2NvbnN0IHQ9dGhpcy5ib25lcyxlPXRoaXMuYm9uZUludmVyc2VzO2lmKHRoaXMuYm9uZU1hdHJpY2VzPW5ldyBGbG9hdDMyQXJyYXkoMTYqdC5sZW5ndGgpLDA9PT1lLmxlbmd0aCl0aGlzLmNhbGN1bGF0ZUludmVyc2VzKCk7ZWxzZSBpZih0Lmxlbmd0aCE9PWUubGVuZ3RoKXtjb25zb2xlLndhcm4oIlRIUkVFLlNrZWxldG9uOiBOdW1iZXIgb2YgaW52ZXJzZSBib25lIG1hdHJpY2VzIGRvZXMgbm90IG1hdGNoIGFtb3VudCBvZiBib25lcy4iKSx0aGlzLmJvbmVJbnZlcnNlcz1bXTtmb3IobGV0IHQ9MCxlPXRoaXMuYm9uZXMubGVuZ3RoO3Q8ZTt0KyspdGhpcy5ib25lSW52ZXJzZXMucHVzaChuZXcgYlJ0KX19LGNhbGN1bGF0ZUludmVyc2VzOmZ1bmN0aW9uKCl7dGhpcy5ib25lSW52ZXJzZXMubGVuZ3RoPTA7Zm9yKGxldCB0PTAsZT10aGlzLmJvbmVzLmxlbmd0aDt0PGU7dCsrKXtjb25zdCBlPW5ldyBiUnQ7dGhpcy5ib25lc1t0XSYmZS5jb3B5KHRoaXMuYm9uZXNbdF0ubWF0cml4V29ybGQpLmludmVydCgpLHRoaXMuYm9uZUludmVyc2VzLnB1c2goZSl9fSxwb3NlOmZ1bmN0aW9uKCl7Zm9yKGxldCB0PTAsZT10aGlzLmJvbmVzLmxlbmd0aDt0PGU7dCsrKXtjb25zdCBlPXRoaXMuYm9uZXNbdF07ZSYmZS5tYXRyaXhXb3JsZC5jb3B5KHRoaXMuYm9uZUludmVyc2VzW3RdKS5pbnZlcnQoKX1mb3IobGV0IHQ9MCxlPXRoaXMuYm9uZXMubGVuZ3RoO3Q8ZTt0Kyspe2NvbnN0IGU9dGhpcy5ib25lc1t0XTtlJiYoZS5wYXJlbnQmJmUucGFyZW50LmlzQm9uZT8oZS5tYXRyaXguY29weShlLnBhcmVudC5tYXRyaXhXb3JsZCkuaW52ZXJ0KCksZS5tYXRyaXgubXVsdGlwbHkoZS5tYXRyaXhXb3JsZCkpOmUubWF0cml4LmNvcHkoZS5tYXRyaXhXb3JsZCksZS5tYXRyaXguZGVjb21wb3NlKGUucG9zaXRpb24sZS5xdWF0ZXJuaW9uLGUuc2NhbGUpKX19LHVwZGF0ZTpmdW5jdGlvbigpe2NvbnN0IHQ9dGhpcy5ib25lcyxlPXRoaXMuYm9uZUludmVyc2VzLG49dGhpcy5ib25lTWF0cmljZXMsaT10aGlzLmJvbmVUZXh0dXJlO2ZvcihsZXQgaT0wLHI9dC5sZW5ndGg7aTxyO2krKylsRnQubXVsdGlwbHlNYXRyaWNlcyh0W2ldP3RbaV0ubWF0cml4V29ybGQ6Y0Z0LGVbaV0pLGxGdC50b0FycmF5KG4sMTYqaSk7bnVsbCE9PWkmJihpLm5lZWRzVXBkYXRlPSEwKX0sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHVGdCh0aGlzLmJvbmVzLHRoaXMuYm9uZUludmVyc2VzKX0sZ2V0Qm9uZUJ5TmFtZTpmdW5jdGlvbih0KXtmb3IobGV0IGU9MCxuPXRoaXMuYm9uZXMubGVuZ3RoO2U8bjtlKyspe2NvbnN0IG49dGhpcy5ib25lc1tlXTtpZihuLm5hbWU9PT10KXJldHVybiBufX0sZGlzcG9zZTpmdW5jdGlvbigpe251bGwhPT10aGlzLmJvbmVUZXh0dXJlJiYodGhpcy5ib25lVGV4dHVyZS5kaXNwb3NlKCksdGhpcy5ib25lVGV4dHVyZT1udWxsKX0sZnJvbUpTT046ZnVuY3Rpb24odCxlKXt0aGlzLnV1aWQ9dC51dWlkO2ZvcihsZXQgbj0wLGk9dC5ib25lcy5sZW5ndGg7bjxpO24rKyl7Y29uc3QgaT10LmJvbmVzW25dO2xldCByPWVbaV07dm9pZCAwPT09ciYmKGNvbnNvbGUud2FybigiVEhSRUUuU2tlbGV0b246IE5vIGJvbmUgZm91bmQgd2l0aCBVVUlEOiIsaSkscj1uZXcgc0Z0KSx0aGlzLmJvbmVzLnB1c2gociksdGhpcy5ib25lSW52ZXJzZXMucHVzaCgobmV3IGJSdCkuZnJvbUFycmF5KHQuYm9uZUludmVyc2VzW25dKSl9cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXN9LHRvSlNPTjpmdW5jdGlvbigpe2NvbnN0IHQ9e21ldGFkYXRhOnt2ZXJzaW9uOjQuNSx0eXBlOiJTa2VsZXRvbiIsZ2VuZXJhdG9yOiJTa2VsZXRvbi50b0pTT04ifSxib25lczpbXSxib25lSW52ZXJzZXM6W119O3QudXVpZD10aGlzLnV1aWQ7Y29uc3QgZT10aGlzLmJvbmVzLG49dGhpcy5ib25lSW52ZXJzZXM7Zm9yKGxldCBpPTAscj1lLmxlbmd0aDtpPHI7aSsrKXQuYm9uZXMucHVzaChlW2ldLnV1aWQpLHQuYm9uZUludmVyc2VzLnB1c2gobltpXS50b0FycmF5KCkpO3JldHVybiB0fX0pO2NvbnN0IGhGdD1uZXcgYlJ0LGRGdD1uZXcgYlJ0LHBGdD1bXSxmRnQ9bmV3IG9EdDtmdW5jdGlvbiBtRnQodCxlLG4pe29EdC5jYWxsKHRoaXMsdCxlKSx0aGlzLmluc3RhbmNlTWF0cml4PW5ldyBienQobmV3IEZsb2F0MzJBcnJheSgxNipuKSwxNiksdGhpcy5pbnN0YW5jZUNvbG9yPW51bGwsdGhpcy5jb3VudD1uLHRoaXMuZnJ1c3R1bUN1bGxlZD0hMX1mdW5jdGlvbiBnRnQodCl7Z3p0LmNhbGwodGhpcyksdGhpcy50eXBlPSJMaW5lQmFzaWNNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgcHp0KDE2Nzc3MjE1KSx0aGlzLmxpbmV3aWR0aD0xLHRoaXMubGluZWNhcD0icm91bmQiLHRoaXMubGluZWpvaW49InJvdW5kIix0aGlzLm1vcnBoVGFyZ2V0cz0hMSx0aGlzLnNldFZhbHVlcyh0KX1tRnQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShvRHQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6bUZ0LGlzSW5zdGFuY2VkTWVzaDohMCxjb3B5OmZ1bmN0aW9uKHQpe3JldHVybiBvRHQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMuaW5zdGFuY2VNYXRyaXguY29weSh0Lmluc3RhbmNlTWF0cml4KSxudWxsIT09dC5pbnN0YW5jZUNvbG9yJiYodGhpcy5pbnN0YW5jZUNvbG9yPXQuaW5zdGFuY2VDb2xvci5jbG9uZSgpKSx0aGlzLmNvdW50PXQuY291bnQsdGhpc30sZ2V0Q29sb3JBdDpmdW5jdGlvbih0LGUpe2UuZnJvbUFycmF5KHRoaXMuaW5zdGFuY2VDb2xvci5hcnJheSwzKnQpfSxnZXRNYXRyaXhBdDpmdW5jdGlvbih0LGUpe2UuZnJvbUFycmF5KHRoaXMuaW5zdGFuY2VNYXRyaXguYXJyYXksMTYqdCl9LHJheWNhc3Q6ZnVuY3Rpb24odCxlKXtjb25zdCBuPXRoaXMubWF0cml4V29ybGQsaT10aGlzLmNvdW50O2lmKGZGdC5nZW9tZXRyeT10aGlzLmdlb21ldHJ5LGZGdC5tYXRlcmlhbD10aGlzLm1hdGVyaWFsLHZvaWQgMCE9PWZGdC5tYXRlcmlhbClmb3IobGV0IHI9MDtyPGk7cisrKXt0aGlzLmdldE1hdHJpeEF0KHIsaEZ0KSxkRnQubXVsdGlwbHlNYXRyaWNlcyhuLGhGdCksZkZ0Lm1hdHJpeFdvcmxkPWRGdCxmRnQucmF5Y2FzdCh0LHBGdCk7Zm9yKGxldCB0PTAsbj1wRnQubGVuZ3RoO3Q8bjt0Kyspe2NvbnN0IG49cEZ0W3RdO24uaW5zdGFuY2VJZD1yLG4ub2JqZWN0PXRoaXMsZS5wdXNoKG4pfXBGdC5sZW5ndGg9MH19LHNldENvbG9yQXQ6ZnVuY3Rpb24odCxlKXtudWxsPT09dGhpcy5pbnN0YW5jZUNvbG9yJiYodGhpcy5pbnN0YW5jZUNvbG9yPW5ldyBienQobmV3IEZsb2F0MzJBcnJheSgzKnRoaXMuY291bnQpLDMpKSxlLnRvQXJyYXkodGhpcy5pbnN0YW5jZUNvbG9yLmFycmF5LDMqdCl9LHNldE1hdHJpeEF0OmZ1bmN0aW9uKHQsZSl7ZS50b0FycmF5KHRoaXMuaW5zdGFuY2VNYXRyaXguYXJyYXksMTYqdCl9LHVwZGF0ZU1vcnBoVGFyZ2V0czpmdW5jdGlvbigpe30sZGlzcG9zZTpmdW5jdGlvbigpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX19KSwoZ0Z0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGd6dC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1nRnQsZ0Z0LnByb3RvdHlwZS5pc0xpbmVCYXNpY01hdGVyaWFsPSEwLGdGdC5wcm90b3R5cGUuY29weT1mdW5jdGlvbih0KXtyZXR1cm4gZ3p0LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5saW5ld2lkdGg9dC5saW5ld2lkdGgsdGhpcy5saW5lY2FwPXQubGluZWNhcCx0aGlzLmxpbmVqb2luPXQubGluZWpvaW4sdGhpcy5tb3JwaFRhcmdldHM9dC5tb3JwaFRhcmdldHMsdGhpc307Y29uc3QgX0Z0PW5ldyBxT3QseUZ0PW5ldyBxT3QsdkZ0PW5ldyBiUnQsYkZ0PW5ldyB2UnQseEZ0PW5ldyBoUnQ7ZnVuY3Rpb24gd0Z0KHQ9bmV3IFZ6dCxlPW5ldyBnRnQpe1dSdC5jYWxsKHRoaXMpLHRoaXMudHlwZT0iTGluZSIsdGhpcy5nZW9tZXRyeT10LHRoaXMubWF0ZXJpYWw9ZSx0aGlzLnVwZGF0ZU1vcnBoVGFyZ2V0cygpfXdGdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKFdSdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3Rvcjp3RnQsaXNMaW5lOiEwLGNvcHk6ZnVuY3Rpb24odCl7cmV0dXJuIFdSdC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy5tYXRlcmlhbD10Lm1hdGVyaWFsLHRoaXMuZ2VvbWV0cnk9dC5nZW9tZXRyeSx0aGlzfSxjb21wdXRlTGluZURpc3RhbmNlczpmdW5jdGlvbigpe2NvbnN0IHQ9dGhpcy5nZW9tZXRyeTtpZih0LmlzQnVmZmVyR2VvbWV0cnkpaWYobnVsbD09PXQuaW5kZXgpe2NvbnN0IGU9dC5hdHRyaWJ1dGVzLnBvc2l0aW9uLG49WzBdO2ZvcihsZXQgdD0xLGk9ZS5jb3VudDt0PGk7dCsrKV9GdC5mcm9tQnVmZmVyQXR0cmlidXRlKGUsdC0xKSx5RnQuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLHQpLG5bdF09blt0LTFdLG5bdF0rPV9GdC5kaXN0YW5jZVRvKHlGdCk7dC5zZXRBdHRyaWJ1dGUoImxpbmVEaXN0YW5jZSIsbmV3IGt6dChuLDEpKX1lbHNlIGNvbnNvbGUud2FybigiVEhSRUUuTGluZS5jb21wdXRlTGluZURpc3RhbmNlcygpOiBDb21wdXRhdGlvbiBvbmx5IHBvc3NpYmxlIHdpdGggbm9uLWluZGV4ZWQgQnVmZmVyR2VvbWV0cnkuIik7ZWxzZSB0LmlzR2VvbWV0cnkmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLkxpbmUuY29tcHV0ZUxpbmVEaXN0YW5jZXMoKSBubyBsb25nZXIgc3VwcG9ydHMgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpO3JldHVybiB0aGlzfSxyYXljYXN0OmZ1bmN0aW9uKHQsZSl7Y29uc3Qgbj10aGlzLmdlb21ldHJ5LGk9dGhpcy5tYXRyaXhXb3JsZCxyPXQucGFyYW1zLkxpbmUudGhyZXNob2xkO2lmKG51bGw9PT1uLmJvdW5kaW5nU3BoZXJlJiZuLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLHhGdC5jb3B5KG4uYm91bmRpbmdTcGhlcmUpLHhGdC5hcHBseU1hdHJpeDQoaSkseEZ0LnJhZGl1cys9ciwhMT09PXQucmF5LmludGVyc2VjdHNTcGhlcmUoeEZ0KSlyZXR1cm47dkZ0LmNvcHkoaSkuaW52ZXJ0KCksYkZ0LmNvcHkodC5yYXkpLmFwcGx5TWF0cml4NCh2RnQpO2NvbnN0IG89ci8oKHRoaXMuc2NhbGUueCt0aGlzLnNjYWxlLnkrdGhpcy5zY2FsZS56KS8zKSxhPW8qbyxzPW5ldyBxT3QsbD1uZXcgcU90LGM9bmV3IHFPdCx1PW5ldyBxT3QsaD10aGlzLmlzTGluZVNlZ21lbnRzPzI6MTtpZihuLmlzQnVmZmVyR2VvbWV0cnkpe2NvbnN0IGk9bi5pbmRleCxyPW4uYXR0cmlidXRlcy5wb3NpdGlvbjtpZihudWxsIT09aSl7Y29uc3Qgbj1pLmFycmF5O2ZvcihsZXQgaT0wLG89bi5sZW5ndGgtMTtpPG87aSs9aCl7Y29uc3Qgbz1uW2krMV07aWYocy5mcm9tQnVmZmVyQXR0cmlidXRlKHIsbltpXSksbC5mcm9tQnVmZmVyQXR0cmlidXRlKHIsbyksYkZ0LmRpc3RhbmNlU3FUb1NlZ21lbnQocyxsLHUsYyk+YSljb250aW51ZTt1LmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKTtjb25zdCBoPXQucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKHUpO2g8dC5uZWFyfHxoPnQuZmFyfHxlLnB1c2goe2Rpc3RhbmNlOmgscG9pbnQ6Yy5jbG9uZSgpLmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKSxpbmRleDppLGZhY2U6bnVsbCxmYWNlSW5kZXg6bnVsbCxvYmplY3Q6dGhpc30pfX1lbHNlIGZvcihsZXQgbj0wLGk9ci5jb3VudC0xO248aTtuKz1oKXtpZihzLmZyb21CdWZmZXJBdHRyaWJ1dGUocixuKSxsLmZyb21CdWZmZXJBdHRyaWJ1dGUocixuKzEpLGJGdC5kaXN0YW5jZVNxVG9TZWdtZW50KHMsbCx1LGMpPmEpY29udGludWU7dS5hcHBseU1hdHJpeDQodGhpcy5tYXRyaXhXb3JsZCk7Y29uc3QgaT10LnJheS5vcmlnaW4uZGlzdGFuY2VUbyh1KTtpPHQubmVhcnx8aT50LmZhcnx8ZS5wdXNoKHtkaXN0YW5jZTppLHBvaW50OmMuY2xvbmUoKS5hcHBseU1hdHJpeDQodGhpcy5tYXRyaXhXb3JsZCksaW5kZXg6bixmYWNlOm51bGwsZmFjZUluZGV4Om51bGwsb2JqZWN0OnRoaXN9KX19ZWxzZSBuLmlzR2VvbWV0cnkmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLkxpbmUucmF5Y2FzdCgpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9LHVwZGF0ZU1vcnBoVGFyZ2V0czpmdW5jdGlvbigpe2NvbnN0IHQ9dGhpcy5nZW9tZXRyeTtpZih0LmlzQnVmZmVyR2VvbWV0cnkpe2NvbnN0IGU9dC5tb3JwaEF0dHJpYnV0ZXMsbj1PYmplY3Qua2V5cyhlKTtpZihuLmxlbmd0aD4wKXtjb25zdCB0PWVbblswXV07aWYodm9pZCAwIT09dCl7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXM9W10sdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnk9e307Zm9yKGxldCBlPTAsbj10Lmxlbmd0aDtlPG47ZSsrKXtjb25zdCBuPXRbZV0ubmFtZXx8U3RyaW5nKGUpO3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzLnB1c2goMCksdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnlbbl09ZX19fX1lbHNle2NvbnN0IGU9dC5tb3JwaFRhcmdldHM7dm9pZCAwIT09ZSYmZS5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuTGluZS51cGRhdGVNb3JwaFRhcmdldHMoKSBkb2VzIG5vdCBzdXBwb3J0IFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX19fSk7Y29uc3QgU0Z0PW5ldyBxT3QsTUZ0PW5ldyBxT3Q7ZnVuY3Rpb24gRUZ0KHQsZSl7d0Z0LmNhbGwodGhpcyx0LGUpLHRoaXMudHlwZT0iTGluZVNlZ21lbnRzIn1mdW5jdGlvbiBURnQodCxlKXt3RnQuY2FsbCh0aGlzLHQsZSksdGhpcy50eXBlPSJMaW5lTG9vcCJ9ZnVuY3Rpb24gQ0Z0KHQpe2d6dC5jYWxsKHRoaXMpLHRoaXMudHlwZT0iUG9pbnRzTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IHB6dCgxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5zaXplPTEsdGhpcy5zaXplQXR0ZW51YXRpb249ITAsdGhpcy5tb3JwaFRhcmdldHM9ITEsdGhpcy5zZXRWYWx1ZXModCl9RUZ0LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUod0Z0LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOkVGdCxpc0xpbmVTZWdtZW50czohMCxjb21wdXRlTGluZURpc3RhbmNlczpmdW5jdGlvbigpe2NvbnN0IHQ9dGhpcy5nZW9tZXRyeTtpZih0LmlzQnVmZmVyR2VvbWV0cnkpaWYobnVsbD09PXQuaW5kZXgpe2NvbnN0IGU9dC5hdHRyaWJ1dGVzLnBvc2l0aW9uLG49W107Zm9yKGxldCB0PTAsaT1lLmNvdW50O3Q8aTt0Kz0yKVNGdC5mcm9tQnVmZmVyQXR0cmlidXRlKGUsdCksTUZ0LmZyb21CdWZmZXJBdHRyaWJ1dGUoZSx0KzEpLG5bdF09MD09PXQ/MDpuW3QtMV0sblt0KzFdPW5bdF0rU0Z0LmRpc3RhbmNlVG8oTUZ0KTt0LnNldEF0dHJpYnV0ZSgibGluZURpc3RhbmNlIixuZXcga3p0KG4sMSkpfWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5MaW5lU2VnbWVudHMuY29tcHV0ZUxpbmVEaXN0YW5jZXMoKTogQ29tcHV0YXRpb24gb25seSBwb3NzaWJsZSB3aXRoIG5vbi1pbmRleGVkIEJ1ZmZlckdlb21ldHJ5LiIpO2Vsc2UgdC5pc0dlb21ldHJ5JiZjb25zb2xlLmVycm9yKCJUSFJFRS5MaW5lU2VnbWVudHMuY29tcHV0ZUxpbmVEaXN0YW5jZXMoKSBubyBsb25nZXIgc3VwcG9ydHMgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpO3JldHVybiB0aGlzfX0pLFRGdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKHdGdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpURnQsaXNMaW5lTG9vcDohMH0pLChDRnQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZ3p0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPUNGdCxDRnQucHJvdG90eXBlLmlzUG9pbnRzTWF0ZXJpYWw9ITAsQ0Z0LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHQpe3JldHVybiBnenQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hcD10Lm1hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5zaXplPXQuc2l6ZSx0aGlzLnNpemVBdHRlbnVhdGlvbj10LnNpemVBdHRlbnVhdGlvbix0aGlzLm1vcnBoVGFyZ2V0cz10Lm1vcnBoVGFyZ2V0cyx0aGlzfTtjb25zdCBBRnQ9bmV3IGJSdCxrRnQ9bmV3IHZSdCxMRnQ9bmV3IGhSdCxQRnQ9bmV3IHFPdDtmdW5jdGlvbiBORnQodD1uZXcgVnp0LGU9bmV3IENGdCl7V1J0LmNhbGwodGhpcyksdGhpcy50eXBlPSJQb2ludHMiLHRoaXMuZ2VvbWV0cnk9dCx0aGlzLm1hdGVyaWFsPWUsdGhpcy51cGRhdGVNb3JwaFRhcmdldHMoKX1mdW5jdGlvbiBJRnQodCxlLG4saSxyLG8sYSl7Y29uc3Qgcz1rRnQuZGlzdGFuY2VTcVRvUG9pbnQodCk7aWYoczxuKXtjb25zdCBuPW5ldyBxT3Q7a0Z0LmNsb3Nlc3RQb2ludFRvUG9pbnQodCxuKSxuLmFwcGx5TWF0cml4NChpKTtjb25zdCBsPXIucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKG4pO2lmKGw8ci5uZWFyfHxsPnIuZmFyKXJldHVybjtvLnB1c2goe2Rpc3RhbmNlOmwsZGlzdGFuY2VUb1JheTpNYXRoLnNxcnQocykscG9pbnQ6bixpbmRleDplLGZhY2U6bnVsbCxvYmplY3Q6YX0pfX1mdW5jdGlvbiBPRnQodCxlLG4saSxyLG8sYSxzLGwpe1ZPdC5jYWxsKHRoaXMsdCxlLG4saSxyLG8sYSxzLGwpLHRoaXMuZm9ybWF0PXZvaWQgMCE9PWE/YTpRSXQsdGhpcy5taW5GaWx0ZXI9dm9pZCAwIT09bz9vOkdJdCx0aGlzLm1hZ0ZpbHRlcj12b2lkIDAhPT1yP3I6R0l0LHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExO2NvbnN0IGM9dGhpczsicmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayJpbiB0JiZ0LnJlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2soKGZ1bmN0aW9uIGUoKXtjLm5lZWRzVXBkYXRlPSEwLHQucmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayhlKX0pKX1mdW5jdGlvbiBSRnQodCxlLG4saSxyLG8sYSxzLGwsYyx1LGgpe1ZPdC5jYWxsKHRoaXMsbnVsbCxvLGEscyxsLGMsaSxyLHUsaCksdGhpcy5pbWFnZT17d2lkdGg6ZSxoZWlnaHQ6bn0sdGhpcy5taXBtYXBzPXQsdGhpcy5mbGlwWT0hMSx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMX1mdW5jdGlvbiB6RnQodCxlLG4saSxyLG8sYSxzLGwpe1ZPdC5jYWxsKHRoaXMsdCxlLG4saSxyLG8sYSxzLGwpLHRoaXMubmVlZHNVcGRhdGU9ITB9ZnVuY3Rpb24gREZ0KHQsZSxuLGkscixvLGEscyxsLGMpe2lmKChjPXZvaWQgMCE9PWM/YzplT3QpIT09ZU90JiZjIT09bk90KXRocm93IG5ldyBFcnJvcigiRGVwdGhUZXh0dXJlIGZvcm1hdCBtdXN0IGJlIGVpdGhlciBUSFJFRS5EZXB0aEZvcm1hdCBvciBUSFJFRS5EZXB0aFN0ZW5jaWxGb3JtYXQiKTt2b2lkIDA9PT1uJiZjPT09ZU90JiYobj1YSXQpLHZvaWQgMD09PW4mJmM9PT1uT3QmJihuPUpJdCksVk90LmNhbGwodGhpcyxudWxsLGkscixvLGEscyxjLG4sbCksdGhpcy5pbWFnZT17d2lkdGg6dCxoZWlnaHQ6ZX0sdGhpcy5tYWdGaWx0ZXI9dm9pZCAwIT09YT9hOlZJdCx0aGlzLm1pbkZpbHRlcj12b2lkIDAhPT1zP3M6Vkl0LHRoaXMuZmxpcFk9ITEsdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITF9TkZ0LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoV1J0LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOk5GdCxpc1BvaW50czohMCxjb3B5OmZ1bmN0aW9uKHQpe3JldHVybiBXUnQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMubWF0ZXJpYWw9dC5tYXRlcmlhbCx0aGlzLmdlb21ldHJ5PXQuZ2VvbWV0cnksdGhpc30scmF5Y2FzdDpmdW5jdGlvbih0LGUpe2NvbnN0IG49dGhpcy5nZW9tZXRyeSxpPXRoaXMubWF0cml4V29ybGQscj10LnBhcmFtcy5Qb2ludHMudGhyZXNob2xkO2lmKG51bGw9PT1uLmJvdW5kaW5nU3BoZXJlJiZuLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLExGdC5jb3B5KG4uYm91bmRpbmdTcGhlcmUpLExGdC5hcHBseU1hdHJpeDQoaSksTEZ0LnJhZGl1cys9ciwhMT09PXQucmF5LmludGVyc2VjdHNTcGhlcmUoTEZ0KSlyZXR1cm47QUZ0LmNvcHkoaSkuaW52ZXJ0KCksa0Z0LmNvcHkodC5yYXkpLmFwcGx5TWF0cml4NChBRnQpO2NvbnN0IG89ci8oKHRoaXMuc2NhbGUueCt0aGlzLnNjYWxlLnkrdGhpcy5zY2FsZS56KS8zKSxhPW8qbztpZihuLmlzQnVmZmVyR2VvbWV0cnkpe2NvbnN0IHI9bi5pbmRleCxvPW4uYXR0cmlidXRlcy5wb3NpdGlvbjtpZihudWxsIT09cil7Y29uc3Qgbj1yLmFycmF5O2ZvcihsZXQgcj0wLHM9bi5sZW5ndGg7cjxzO3IrKyl7Y29uc3Qgcz1uW3JdO1BGdC5mcm9tQnVmZmVyQXR0cmlidXRlKG8scyksSUZ0KFBGdCxzLGEsaSx0LGUsdGhpcyl9fWVsc2UgZm9yKGxldCBuPTAscj1vLmNvdW50O248cjtuKyspUEZ0LmZyb21CdWZmZXJBdHRyaWJ1dGUobyxuKSxJRnQoUEZ0LG4sYSxpLHQsZSx0aGlzKX1lbHNlIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlBvaW50cy5yYXljYXN0KCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX0sdXBkYXRlTW9ycGhUYXJnZXRzOmZ1bmN0aW9uKCl7Y29uc3QgdD10aGlzLmdlb21ldHJ5O2lmKHQuaXNCdWZmZXJHZW9tZXRyeSl7Y29uc3QgZT10Lm1vcnBoQXR0cmlidXRlcyxuPU9iamVjdC5rZXlzKGUpO2lmKG4ubGVuZ3RoPjApe2NvbnN0IHQ9ZVtuWzBdXTtpZih2b2lkIDAhPT10KXt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcz1bXSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeT17fTtmb3IobGV0IGU9MCxuPXQubGVuZ3RoO2U8bjtlKyspe2NvbnN0IG49dFtlXS5uYW1lfHxTdHJpbmcoZSk7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXMucHVzaCgwKSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeVtuXT1lfX19fWVsc2V7Y29uc3QgZT10Lm1vcnBoVGFyZ2V0czt2b2lkIDAhPT1lJiZlLmxlbmd0aD4wJiZjb25zb2xlLmVycm9yKCJUSFJFRS5Qb2ludHMudXBkYXRlTW9ycGhUYXJnZXRzKCkgZG9lcyBub3Qgc3VwcG9ydCBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9fX0pLE9GdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKFZPdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpPRnQsY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5pbWFnZSkuY29weSh0aGlzKX0saXNWaWRlb1RleHR1cmU6ITAsdXBkYXRlOmZ1bmN0aW9uKCl7Y29uc3QgdD10aGlzLmltYWdlOzA9PSJyZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrImluIHQmJnQucmVhZHlTdGF0ZT49dC5IQVZFX0NVUlJFTlRfREFUQSYmKHRoaXMubmVlZHNVcGRhdGU9ITApfX0pLChSRnQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoVk90LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPVJGdCxSRnQucHJvdG90eXBlLmlzQ29tcHJlc3NlZFRleHR1cmU9ITAsKHpGdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShWT3QucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ekZ0LHpGdC5wcm90b3R5cGUuaXNDYW52YXNUZXh0dXJlPSEwLChERnQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoVk90LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPURGdCxERnQucHJvdG90eXBlLmlzRGVwdGhUZXh0dXJlPSEwO2NsYXNzIEJGdCBleHRlbmRzIFZ6dHtjb25zdHJ1Y3Rvcih0PTEsZT04LG49MCxpPTIqTWF0aC5QSSl7c3VwZXIoKSx0aGlzLnR5cGU9IkNpcmNsZUdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czp0LHNlZ21lbnRzOmUsdGhldGFTdGFydDpuLHRoZXRhTGVuZ3RoOml9LGU9TWF0aC5tYXgoMyxlKTtjb25zdCByPVtdLG89W10sYT1bXSxzPVtdLGw9bmV3IHFPdCxjPW5ldyB6T3Q7by5wdXNoKDAsMCwwKSxhLnB1c2goMCwwLDEpLHMucHVzaCguNSwuNSk7Zm9yKGxldCByPTAsdT0zO3I8PWU7cisrLHUrPTMpe2NvbnN0IGg9bityL2UqaTtsLng9dCpNYXRoLmNvcyhoKSxsLnk9dCpNYXRoLnNpbihoKSxvLnB1c2gobC54LGwueSxsLnopLGEucHVzaCgwLDAsMSksYy54PShvW3VdL3QrMSkvMixjLnk9KG9bdSsxXS90KzEpLzIscy5wdXNoKGMueCxjLnkpfWZvcihsZXQgdD0xO3Q8PWU7dCsrKXIucHVzaCh0LHQrMSwwKTt0aGlzLnNldEluZGV4KHIpLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGt6dChvLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcga3p0KGEsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IGt6dChzLDIpKX19Y2xhc3MgSEZ0IGV4dGVuZHMgVnp0e2NvbnN0cnVjdG9yKHQ9MSxlPTEsbj0xLGk9OCxyPTEsbz0hMSxhPTAscz0yKk1hdGguUEkpe3N1cGVyKCksdGhpcy50eXBlPSJDeWxpbmRlckdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3JhZGl1c1RvcDp0LHJhZGl1c0JvdHRvbTplLGhlaWdodDpuLHJhZGlhbFNlZ21lbnRzOmksaGVpZ2h0U2VnbWVudHM6cixvcGVuRW5kZWQ6byx0aGV0YVN0YXJ0OmEsdGhldGFMZW5ndGg6c307Y29uc3QgbD10aGlzO2k9TWF0aC5mbG9vcihpKSxyPU1hdGguZmxvb3Iocik7Y29uc3QgYz1bXSx1PVtdLGg9W10sZD1bXTtsZXQgcD0wO2NvbnN0IGY9W10sbT1uLzI7bGV0IGc9MDtmdW5jdGlvbiBfKG4pe2NvbnN0IHI9cCxvPW5ldyB6T3QsZj1uZXcgcU90O2xldCBfPTA7Y29uc3QgeT0hMD09PW4/dDplLHY9ITA9PT1uPzE6LTE7Zm9yKGxldCB0PTE7dDw9aTt0KyspdS5wdXNoKDAsbSp2LDApLGgucHVzaCgwLHYsMCksZC5wdXNoKC41LC41KSxwKys7Y29uc3QgYj1wO2ZvcihsZXQgdD0wO3Q8PWk7dCsrKXtjb25zdCBlPXQvaSpzK2Esbj1NYXRoLmNvcyhlKSxyPU1hdGguc2luKGUpO2YueD15KnIsZi55PW0qdixmLno9eSpuLHUucHVzaChmLngsZi55LGYueiksaC5wdXNoKDAsdiwwKSxvLng9LjUqbisuNSxvLnk9LjUqcip2Ky41LGQucHVzaChvLngsby55KSxwKyt9Zm9yKGxldCB0PTA7dDxpO3QrKyl7Y29uc3QgZT1yK3QsaT1iK3Q7ITA9PT1uP2MucHVzaChpLGkrMSxlKTpjLnB1c2goaSsxLGksZSksXys9M31sLmFkZEdyb3VwKGcsXywhMD09PW4/MToyKSxnKz1ffSEoZnVuY3Rpb24geSgpe2NvbnN0IG89bmV3IHFPdCxfPW5ldyBxT3Q7bGV0IHk9MDtjb25zdCB2PShlLXQpL247Zm9yKGxldCBsPTA7bDw9cjtsKyspe2NvbnN0IGM9W10sZz1sL3IseT1nKihlLXQpK3Q7Zm9yKGxldCB0PTA7dDw9aTt0Kyspe2NvbnN0IGU9dC9pLHI9ZSpzK2EsbD1NYXRoLnNpbihyKSxmPU1hdGguY29zKHIpO18ueD15KmwsXy55PS1nKm4rbSxfLno9eSpmLHUucHVzaChfLngsXy55LF8ueiksby5zZXQobCx2LGYpLm5vcm1hbGl6ZSgpLGgucHVzaChvLngsby55LG8ueiksZC5wdXNoKGUsMS1nKSxjLnB1c2gocCsrKX1mLnB1c2goYyl9Zm9yKGxldCB0PTA7dDxpO3QrKylmb3IobGV0IGU9MDtlPHI7ZSsrKXtjb25zdCBuPWZbZSsxXVt0XSxpPWZbZSsxXVt0KzFdLHI9ZltlXVt0KzFdO2MucHVzaChmW2VdW3RdLG4sciksYy5wdXNoKG4saSxyKSx5Kz02fWwuYWRkR3JvdXAoZyx5LDApLGcrPXl9KSgpLCExPT09byYmKHQ+MCYmXyghMCksZT4wJiZfKCExKSksdGhpcy5zZXRJbmRleChjKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBrenQodSwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IGt6dChoLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyBrenQoZCwyKSl9fWNsYXNzIEZGdCBleHRlbmRzIEhGdHtjb25zdHJ1Y3Rvcih0PTEsZT0xLG49OCxpPTEscj0hMSxvPTAsYT0yKk1hdGguUEkpe3N1cGVyKDAsdCxlLG4saSxyLG8sYSksdGhpcy50eXBlPSJDb25lR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cmFkaXVzOnQsaGVpZ2h0OmUscmFkaWFsU2VnbWVudHM6bixoZWlnaHRTZWdtZW50czppLG9wZW5FbmRlZDpyLHRoZXRhU3RhcnQ6byx0aGV0YUxlbmd0aDphfX19Y2xhc3MgVkZ0IGV4dGVuZHMgVnp0e2NvbnN0cnVjdG9yKHQsZSxuPTEsaT0wKXtzdXBlcigpLHRoaXMudHlwZT0iUG9seWhlZHJvbkdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3ZlcnRpY2VzOnQsaW5kaWNlczplLHJhZGl1czpuLGRldGFpbDppfTtjb25zdCByPVtdLG89W107ZnVuY3Rpb24gYSh0LGUsbixpKXtjb25zdCByPWkrMSxvPVtdO2ZvcihsZXQgaT0wO2k8PXI7aSsrKXtvW2ldPVtdO2NvbnN0IGE9dC5jbG9uZSgpLmxlcnAobixpL3IpLHM9ZS5jbG9uZSgpLmxlcnAobixpL3IpLGw9ci1pO2ZvcihsZXQgdD0wO3Q8PWw7dCsrKW9baV1bdF09MD09PXQmJmk9PT1yP2E6YS5jbG9uZSgpLmxlcnAocyx0L2wpfWZvcihsZXQgdD0wO3Q8cjt0KyspZm9yKGxldCBlPTA7ZTwyKihyLXQpLTE7ZSsrKXtjb25zdCBuPU1hdGguZmxvb3IoZS8yKTtlJTI9PTA/KHMob1t0XVtuKzFdKSxzKG9bdCsxXVtuXSkscyhvW3RdW25dKSk6KHMob1t0XVtuKzFdKSxzKG9bdCsxXVtuKzFdKSxzKG9bdCsxXVtuXSkpfX1mdW5jdGlvbiBzKHQpe3IucHVzaCh0LngsdC55LHQueil9ZnVuY3Rpb24gbChlLG4pe2NvbnN0IGk9MyplO24ueD10W2krMF0sbi55PXRbaSsxXSxuLno9dFtpKzJdfWZ1bmN0aW9uIGModCxlLG4saSl7aTwwJiYxPT09dC54JiYob1tlXT10LngtMSksMD09PW4ueCYmMD09PW4ueiYmKG9bZV09aS8yL01hdGguUEkrLjUpfWZ1bmN0aW9uIHUodCl7cmV0dXJuIE1hdGguYXRhbjIodC56LC10LngpfSEoZnVuY3Rpb24gaCh0KXtjb25zdCBuPW5ldyBxT3QsaT1uZXcgcU90LHI9bmV3IHFPdDtmb3IobGV0IG89MDtvPGUubGVuZ3RoO28rPTMpbChlW28rMF0sbiksbChlW28rMV0saSksbChlW28rMl0sciksYShuLGkscix0KX0pKGkpLChmdW5jdGlvbiBkKHQpe2NvbnN0IGU9bmV3IHFPdDtmb3IobGV0IG49MDtuPHIubGVuZ3RoO24rPTMpZS54PXJbbiswXSxlLnk9cltuKzFdLGUuej1yW24rMl0sZS5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0KSxyW24rMF09ZS54LHJbbisxXT1lLnkscltuKzJdPWUuen0pKG4pLChmdW5jdGlvbiBwKCl7Y29uc3QgdD1uZXcgcU90O2ZvcihsZXQgbj0wO248ci5sZW5ndGg7bis9Myl7dC54PXJbbiswXSx0Lnk9cltuKzFdLHQuej1yW24rMl07Y29uc3QgaT11KHQpLzIvTWF0aC5QSSsuNSxhPShlPXQsTWF0aC5hdGFuMigtZS55LE1hdGguc3FydChlLngqZS54K2UueiplLnopKS9NYXRoLlBJKy41KTtvLnB1c2goaSwxLWEpfXZhciBlOyhmdW5jdGlvbiBuKCl7Y29uc3QgdD1uZXcgcU90LGU9bmV3IHFPdCxuPW5ldyBxT3QsaT1uZXcgcU90LGE9bmV3IHpPdCxzPW5ldyB6T3QsbD1uZXcgek90O2ZvcihsZXQgaD0wLGQ9MDtoPHIubGVuZ3RoO2grPTksZCs9Nil7dC5zZXQocltoKzBdLHJbaCsxXSxyW2grMl0pLGUuc2V0KHJbaCszXSxyW2grNF0scltoKzVdKSxuLnNldChyW2grNl0scltoKzddLHJbaCs4XSksYS5zZXQob1tkKzBdLG9bZCsxXSkscy5zZXQob1tkKzJdLG9bZCszXSksbC5zZXQob1tkKzRdLG9bZCs1XSksaS5jb3B5KHQpLmFkZChlKS5hZGQobikuZGl2aWRlU2NhbGFyKDMpO2NvbnN0IHA9dShpKTtjKGEsZCswLHQscCksYyhzLGQrMixlLHApLGMobCxkKzQsbixwKX19KSgpLChmdW5jdGlvbiBpKCl7Zm9yKGxldCB0PTA7dDxvLmxlbmd0aDt0Kz02KXtjb25zdCBlPW9bdCswXSxuPW9bdCsyXSxpPW9bdCs0XSxyPU1hdGgubWF4KGUsbixpKSxhPU1hdGgubWluKGUsbixpKTtyPi45JiZhPC4xJiYoZTwuMiYmKG9bdCswXSs9MSksbjwuMiYmKG9bdCsyXSs9MSksaTwuMiYmKG9bdCs0XSs9MSkpfX0pKCl9KSgpLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGt6dChyLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcga3p0KHIuc2xpY2UoKSwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcga3p0KG8sMikpLDA9PT1pP3RoaXMuY29tcHV0ZVZlcnRleE5vcm1hbHMoKTp0aGlzLm5vcm1hbGl6ZU5vcm1hbHMoKX19Y2xhc3MgVUZ0IGV4dGVuZHMgVkZ0e2NvbnN0cnVjdG9yKHQ9MSxlPTApe2NvbnN0IG49KDErTWF0aC5zcXJ0KDUpKS8yLGk9MS9uO3N1cGVyKFstMSwtMSwtMSwtMSwtMSwxLC0xLDEsLTEsLTEsMSwxLDEsLTEsLTEsMSwtMSwxLDEsMSwtMSwxLDEsMSwwLC1pLC1uLDAsLWksbiwwLGksLW4sMCxpLG4sLWksLW4sMCwtaSxuLDAsaSwtbiwwLGksbiwwLC1uLDAsLWksbiwwLC1pLC1uLDAsaSxuLDAsaV0sWzMsMTEsNywzLDcsMTUsMywxNSwxMyw3LDE5LDE3LDcsMTcsNiw3LDYsMTUsMTcsNCw4LDE3LDgsMTAsMTcsMTAsNiw4LDAsMTYsOCwxNiwyLDgsMiwxMCwwLDEyLDEsMCwxLDE4LDAsMTgsMTYsNiwxMCwyLDYsMiwxMyw2LDEzLDE1LDIsMTYsMTgsMiwxOCwzLDIsMywxMywxOCwxLDksMTgsOSwxMSwxOCwxMSwzLDQsMTQsMTIsNCwxMiwwLDQsMCw4LDExLDksNSwxMSw1LDE5LDExLDE5LDcsMTksNSwxNCwxOSwxNCw0LDE5LDQsMTcsMSwxMiwxNCwxLDE0LDUsMSw1LDldLHQsZSksdGhpcy50eXBlPSJEb2RlY2FoZWRyb25HZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6dCxkZXRhaWw6ZX19fWNvbnN0IGpGdD1uZXcgcU90LEdGdD1uZXcgcU90LFdGdD1uZXcgcU90LHFGdD1uZXcgYXp0O2NsYXNzIFlGdCBleHRlbmRzIFZ6dHtjb25zdHJ1Y3Rvcih0LGUpe2lmKHN1cGVyKCksdGhpcy50eXBlPSJFZGdlc0dlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3RocmVzaG9sZEFuZ2xlOmV9LGU9dm9pZCAwIT09ZT9lOjEsITA9PT10LmlzR2VvbWV0cnkpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuRWRnZXNHZW9tZXRyeSBubyBsb25nZXIgc3VwcG9ydHMgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpO2NvbnN0IG49TWF0aC5wb3coMTAsNCksaT1NYXRoLmNvcyhST3QuREVHMlJBRCplKSxyPXQuZ2V0SW5kZXgoKSxvPXQuZ2V0QXR0cmlidXRlKCJwb3NpdGlvbiIpLGE9cj9yLmNvdW50Om8uY291bnQscz1bMCwwLDBdLGw9WyJhIiwiYiIsImMiXSxjPW5ldyBBcnJheSgzKSx1PXt9LGg9W107Zm9yKGxldCB0PTA7dDxhO3QrPTMpe3I/KHNbMF09ci5nZXRYKHQpLHNbMV09ci5nZXRYKHQrMSksc1syXT1yLmdldFgodCsyKSk6KHNbMF09dCxzWzFdPXQrMSxzWzJdPXQrMik7Y29uc3R7YTplLGI6YSxjOmR9PXFGdDtpZihlLmZyb21CdWZmZXJBdHRyaWJ1dGUobyxzWzBdKSxhLmZyb21CdWZmZXJBdHRyaWJ1dGUobyxzWzFdKSxkLmZyb21CdWZmZXJBdHRyaWJ1dGUobyxzWzJdKSxxRnQuZ2V0Tm9ybWFsKFdGdCksY1swXT1gJHtNYXRoLnJvdW5kKGUueCpuKX0sJHtNYXRoLnJvdW5kKGUueSpuKX0sJHtNYXRoLnJvdW5kKGUueipuKX1gLGNbMV09YCR7TWF0aC5yb3VuZChhLngqbil9LCR7TWF0aC5yb3VuZChhLnkqbil9LCR7TWF0aC5yb3VuZChhLnoqbil9YCxjWzJdPWAke01hdGgucm91bmQoZC54Km4pfSwke01hdGgucm91bmQoZC55Km4pfSwke01hdGgucm91bmQoZC56Km4pfWAsY1swXSE9PWNbMV0mJmNbMV0hPT1jWzJdJiZjWzJdIT09Y1swXSlmb3IobGV0IHQ9MDt0PDM7dCsrKXtjb25zdCBlPSh0KzEpJTMsbj1jW3RdLHI9Y1tlXSxvPXFGdFtsW3RdXSxhPXFGdFtsW2VdXSxkPWAke259XyR7cn1gLHA9YCR7cn1fJHtufWA7cCBpbiB1JiZ1W3BdPyhXRnQuZG90KHVbcF0ubm9ybWFsKTw9aSYmKGgucHVzaChvLngsby55LG8ueiksaC5wdXNoKGEueCxhLnksYS56KSksdVtwXT1udWxsKTpkIGluIHV8fCh1W2RdPXtpbmRleDA6c1t0XSxpbmRleDE6c1tlXSxub3JtYWw6V0Z0LmNsb25lKCl9KX19Zm9yKGNvbnN0IHQgaW4gdSlpZih1W3RdKXtjb25zdHtpbmRleDA6ZSxpbmRleDE6bn09dVt0XTtqRnQuZnJvbUJ1ZmZlckF0dHJpYnV0ZShvLGUpLEdGdC5mcm9tQnVmZmVyQXR0cmlidXRlKG8sbiksaC5wdXNoKGpGdC54LGpGdC55LGpGdC56KSxoLnB1c2goR0Z0LngsR0Z0LnksR0Z0LnopfXRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGt6dChoLDMpKX19ZnVuY3Rpb24gWEZ0KHQsZSxuLGkscil7bGV0IG8sYTtpZihyPT09KGZ1bmN0aW9uIHModCxlLG4saSl7bGV0IHI9MDtmb3IobGV0IG89ZSxhPW4taTtvPG47bys9aSlyKz0odFthXS10W29dKSoodFtvKzFdK3RbYSsxXSksYT1vO3JldHVybiByfSkodCxlLG4saSk+MClmb3Iobz1lO288bjtvKz1pKWE9bVZ0KG8sdFtvXSx0W28rMV0sYSk7ZWxzZSBmb3Iobz1uLWk7bz49ZTtvLT1pKWE9bVZ0KG8sdFtvXSx0W28rMV0sYSk7cmV0dXJuIGEmJmNWdChhLGEubmV4dCkmJihnVnQoYSksYT1hLm5leHQpLGF9ZnVuY3Rpb24gJEZ0KHQsZSl7aWYoIXQpcmV0dXJuIHQ7ZXx8KGU9dCk7bGV0IG4saT10O2Rve2lmKG49ITEsaS5zdGVpbmVyfHwhY1Z0KGksaS5uZXh0KSYmMCE9PWxWdChpLnByZXYsaSxpLm5leHQpKWk9aS5uZXh0O2Vsc2V7aWYoZ1Z0KGkpLGk9ZT1pLnByZXYsaT09PWkubmV4dClicmVhaztuPSEwfX13aGlsZShufHxpIT09ZSk7cmV0dXJuIGV9ZnVuY3Rpb24gS0Z0KHQsZSxuLGkscixvLGEpe2lmKCF0KXJldHVybjshYSYmbyYmKGZ1bmN0aW9uIHModCxlLG4saSl7bGV0IHI9dDtkb3tudWxsPT09ci56JiYoci56PXJWdChyLngsci55LGUsbixpKSksci5wcmV2Wj1yLnByZXYsci5uZXh0Wj1yLm5leHQscj1yLm5leHR9d2hpbGUociE9PXQpO3IucHJldloubmV4dFo9bnVsbCxyLnByZXZaPW51bGwsKGZ1bmN0aW9uIG8odCl7bGV0IGUsbixpLHIsbyxhLHMsbCxjPTE7ZG97Zm9yKG49dCx0PW51bGwsbz1udWxsLGE9MDtuOyl7Zm9yKGErKyxpPW4scz0wLGU9MDtlPGMmJihzKyssaT1pLm5leHRaLGkpO2UrKyk7Zm9yKGw9YztzPjB8fGw+MCYmaTspMCE9PXMmJigwPT09bHx8IWl8fG4uejw9aS56KT8ocj1uLG49bi5uZXh0WixzLS0pOihyPWksaT1pLm5leHRaLGwtLSksbz9vLm5leHRaPXI6dD1yLHIucHJldlo9byxvPXI7bj1pfW8ubmV4dFo9bnVsbCxjKj0yfXdoaWxlKGE+MSl9KShyKX0pKHQsaSxyLG8pO2xldCBsLGMsdT10O2Zvcig7dC5wcmV2IT09dC5uZXh0OylpZihsPXQucHJldixjPXQubmV4dCxvP0pGdCh0LGkscixvKTpaRnQodCkpZS5wdXNoKGwuaS9uKSxlLnB1c2godC5pL24pLGUucHVzaChjLmkvbiksZ1Z0KHQpLHQ9Yy5uZXh0LHU9Yy5uZXh0O2Vsc2UgaWYoKHQ9Yyk9PT11KXthPzE9PT1hP0tGdCh0PVFGdCgkRnQodCksZSxuKSxlLG4saSxyLG8sMik6Mj09PWEmJnRWdCh0LGUsbixpLHIsbyk6S0Z0KCRGdCh0KSxlLG4saSxyLG8sMSk7YnJlYWt9fWZ1bmN0aW9uIFpGdCh0KXtjb25zdCBlPXQucHJldixuPXQsaT10Lm5leHQ7aWYobFZ0KGUsbixpKT49MClyZXR1cm4hMTtsZXQgcj10Lm5leHQubmV4dDtmb3IoO3IhPT10LnByZXY7KXtpZihhVnQoZS54LGUueSxuLngsbi55LGkueCxpLnksci54LHIueSkmJmxWdChyLnByZXYscixyLm5leHQpPj0wKXJldHVybiExO3I9ci5uZXh0fXJldHVybiEwfWZ1bmN0aW9uIEpGdCh0LGUsbixpKXtjb25zdCByPXQucHJldixvPXQsYT10Lm5leHQ7aWYobFZ0KHIsbyxhKT49MClyZXR1cm4hMTtjb25zdCBzPXIueD5vLng/ci54PmEueD9yLng6YS54Om8ueD5hLng/by54OmEueCxsPXIueT5vLnk/ci55PmEueT9yLnk6YS55Om8ueT5hLnk/by55OmEueSxjPXJWdChyLng8by54P3IueDxhLng/ci54OmEueDpvLng8YS54P28ueDphLngsci55PG8ueT9yLnk8YS55P3IueTphLnk6by55PGEueT9vLnk6YS55LGUsbixpKSx1PXJWdChzLGwsZSxuLGkpO2xldCBoPXQucHJldlosZD10Lm5leHRaO2Zvcig7aCYmaC56Pj1jJiZkJiZkLno8PXU7KXtpZihoIT09dC5wcmV2JiZoIT09dC5uZXh0JiZhVnQoci54LHIueSxvLngsby55LGEueCxhLnksaC54LGgueSkmJmxWdChoLnByZXYsaCxoLm5leHQpPj0wKXJldHVybiExO2lmKGg9aC5wcmV2WixkIT09dC5wcmV2JiZkIT09dC5uZXh0JiZhVnQoci54LHIueSxvLngsby55LGEueCxhLnksZC54LGQueSkmJmxWdChkLnByZXYsZCxkLm5leHQpPj0wKXJldHVybiExO2Q9ZC5uZXh0Wn1mb3IoO2gmJmguej49Yzspe2lmKGghPT10LnByZXYmJmghPT10Lm5leHQmJmFWdChyLngsci55LG8ueCxvLnksYS54LGEueSxoLngsaC55KSYmbFZ0KGgucHJldixoLGgubmV4dCk+PTApcmV0dXJuITE7aD1oLnByZXZafWZvcig7ZCYmZC56PD11Oyl7aWYoZCE9PXQucHJldiYmZCE9PXQubmV4dCYmYVZ0KHIueCxyLnksby54LG8ueSxhLngsYS55LGQueCxkLnkpJiZsVnQoZC5wcmV2LGQsZC5uZXh0KT49MClyZXR1cm4hMTtkPWQubmV4dFp9cmV0dXJuITB9ZnVuY3Rpb24gUUZ0KHQsZSxuKXtsZXQgaT10O2Rve2NvbnN0IHI9aS5wcmV2LG89aS5uZXh0Lm5leHQ7IWNWdChyLG8pJiZ1VnQocixpLGkubmV4dCxvKSYmcFZ0KHIsbykmJnBWdChvLHIpJiYoZS5wdXNoKHIuaS9uKSxlLnB1c2goaS5pL24pLGUucHVzaChvLmkvbiksZ1Z0KGkpLGdWdChpLm5leHQpLGk9dD1vKSxpPWkubmV4dH13aGlsZShpIT09dCk7cmV0dXJuICRGdChpKX1mdW5jdGlvbiB0VnQodCxlLG4saSxyLG8pe2xldCBhPXQ7ZG97bGV0IHQ9YS5uZXh0Lm5leHQ7Zm9yKDt0IT09YS5wcmV2Oyl7aWYoYS5pIT09dC5pJiZzVnQoYSx0KSl7bGV0IHM9ZlZ0KGEsdCk7cmV0dXJuIGE9JEZ0KGEsYS5uZXh0KSxzPSRGdChzLHMubmV4dCksS0Z0KGEsZSxuLGkscixvKSx2b2lkIEtGdChzLGUsbixpLHIsbyl9dD10Lm5leHR9YT1hLm5leHR9d2hpbGUoYSE9PXQpfWZ1bmN0aW9uIGVWdCh0LGUpe3JldHVybiB0LngtZS54fWZ1bmN0aW9uIG5WdCh0LGUpe2lmKGU9KGZ1bmN0aW9uIG4odCxlKXtsZXQgbj1lO2NvbnN0IGk9dC54LHI9dC55O2xldCBvLGE9LTEvMDtkb3tpZihyPD1uLnkmJnI+PW4ubmV4dC55JiZuLm5leHQueSE9PW4ueSl7Y29uc3QgdD1uLngrKHItbi55KSoobi5uZXh0Lngtbi54KS8obi5uZXh0Lnktbi55KTtpZih0PD1pJiZ0PmEpe2lmKGE9dCx0PT09aSl7aWYocj09PW4ueSlyZXR1cm4gbjtpZihyPT09bi5uZXh0LnkpcmV0dXJuIG4ubmV4dH1vPW4ueDxuLm5leHQueD9uOm4ubmV4dH19bj1uLm5leHR9d2hpbGUobiE9PWUpO2lmKCFvKXJldHVybiBudWxsO2lmKGk9PT1hKXJldHVybiBvO2NvbnN0IHM9byxsPW8ueCxjPW8ueTtsZXQgdSxoPTEvMDtuPW87ZG97aT49bi54JiZuLng+PWwmJmkhPT1uLngmJmFWdChyPGM/aTphLHIsbCxjLHI8Yz9hOmkscixuLngsbi55KSYmKHU9TWF0aC5hYnMoci1uLnkpLyhpLW4ueCkscFZ0KG4sdCkmJih1PGh8fHU9PT1oJiYobi54Pm8ueHx8bi54PT09by54JiZpVnQobyxuKSkpJiYobz1uLGg9dSkpLG49bi5uZXh0fXdoaWxlKG4hPT1zKTtyZXR1cm4gb30pKHQsZSkpe2NvbnN0IG49ZlZ0KGUsdCk7JEZ0KGUsZS5uZXh0KSwkRnQobixuLm5leHQpfX1mdW5jdGlvbiBpVnQodCxlKXtyZXR1cm4gbFZ0KHQucHJldix0LGUucHJldik8MCYmbFZ0KGUubmV4dCx0LHQubmV4dCk8MH1mdW5jdGlvbiByVnQodCxlLG4saSxyKXtyZXR1cm4odD0xNDMxNjU1NzY1JigodD04NTg5OTM0NTkmKCh0PTI1MjY0NTEzNSYoKHQ9MTY3MTE5MzUmKCh0PTMyNzY3Kih0LW4pKnIpfHQ8PDgpKXx0PDw0KSl8dDw8MikpfHQ8PDEpKXwoZT0xNDMxNjU1NzY1JigoZT04NTg5OTM0NTkmKChlPTI1MjY0NTEzNSYoKGU9MTY3MTE5MzUmKChlPTMyNzY3KihlLWkpKnIpfGU8PDgpKXxlPDw0KSl8ZTw8MikpfGU8PDEpKTw8MX1mdW5jdGlvbiBvVnQodCl7bGV0IGU9dCxuPXQ7ZG97KGUueDxuLnh8fGUueD09PW4ueCYmZS55PG4ueSkmJihuPWUpLGU9ZS5uZXh0fXdoaWxlKGUhPT10KTtyZXR1cm4gbn1mdW5jdGlvbiBhVnQodCxlLG4saSxyLG8sYSxzKXtyZXR1cm4oci1hKSooZS1zKS0odC1hKSooby1zKT49MCYmKHQtYSkqKGktcyktKG4tYSkqKGUtcyk+PTAmJihuLWEpKihvLXMpLShyLWEpKihpLXMpPj0wfWZ1bmN0aW9uIHNWdCh0LGUpe3JldHVybiB0Lm5leHQuaSE9PWUuaSYmdC5wcmV2LmkhPT1lLmkmJiEoZnVuY3Rpb24gbih0LGUpe2xldCBuPXQ7ZG97aWYobi5pIT09dC5pJiZuLm5leHQuaSE9PXQuaSYmbi5pIT09ZS5pJiZuLm5leHQuaSE9PWUuaSYmdVZ0KG4sbi5uZXh0LHQsZSkpcmV0dXJuITA7bj1uLm5leHR9d2hpbGUobiE9PXQpO3JldHVybiExfSkodCxlKSYmKHBWdCh0LGUpJiZwVnQoZSx0KSYmKGZ1bmN0aW9uIGkodCxlKXtsZXQgbj10LGk9ITE7Y29uc3Qgcj0odC54K2UueCkvMixvPSh0LnkrZS55KS8yO2Rve24ueT5vIT1uLm5leHQueT5vJiZuLm5leHQueSE9PW4ueSYmcjwobi5uZXh0Lngtbi54KSooby1uLnkpLyhuLm5leHQueS1uLnkpK24ueCYmKGk9IWkpLG49bi5uZXh0fXdoaWxlKG4hPT10KTtyZXR1cm4gaX0pKHQsZSkmJihsVnQodC5wcmV2LHQsZS5wcmV2KXx8bFZ0KHQsZS5wcmV2LGUpKXx8Y1Z0KHQsZSkmJmxWdCh0LnByZXYsdCx0Lm5leHQpPjAmJmxWdChlLnByZXYsZSxlLm5leHQpPjApfWZ1bmN0aW9uIGxWdCh0LGUsbil7cmV0dXJuKGUueS10LnkpKihuLngtZS54KS0oZS54LXQueCkqKG4ueS1lLnkpfWZ1bmN0aW9uIGNWdCh0LGUpe3JldHVybiB0Lng9PT1lLngmJnQueT09PWUueX1mdW5jdGlvbiB1VnQodCxlLG4saSl7Y29uc3Qgcj1kVnQobFZ0KHQsZSxuKSksbz1kVnQobFZ0KHQsZSxpKSksYT1kVnQobFZ0KG4saSx0KSkscz1kVnQobFZ0KG4saSxlKSk7cmV0dXJuIHIhPT1vJiZhIT09c3x8ISgwIT09cnx8IWhWdCh0LG4sZSkpfHwhKDAhPT1vfHwhaFZ0KHQsaSxlKSl8fCEoMCE9PWF8fCFoVnQobix0LGkpKXx8ISgwIT09c3x8IWhWdChuLGUsaSkpfWZ1bmN0aW9uIGhWdCh0LGUsbil7cmV0dXJuIGUueDw9TWF0aC5tYXgodC54LG4ueCkmJmUueD49TWF0aC5taW4odC54LG4ueCkmJmUueTw9TWF0aC5tYXgodC55LG4ueSkmJmUueT49TWF0aC5taW4odC55LG4ueSl9ZnVuY3Rpb24gZFZ0KHQpe3JldHVybiB0PjA/MTp0PDA/LTE6MH1mdW5jdGlvbiBwVnQodCxlKXtyZXR1cm4gbFZ0KHQucHJldix0LHQubmV4dCk8MD9sVnQodCxlLHQubmV4dCk+PTAmJmxWdCh0LHQucHJldixlKT49MDpsVnQodCxlLHQucHJldik8MHx8bFZ0KHQsdC5uZXh0LGUpPDB9ZnVuY3Rpb24gZlZ0KHQsZSl7Y29uc3Qgbj1uZXcgX1Z0KHQuaSx0LngsdC55KSxpPW5ldyBfVnQoZS5pLGUueCxlLnkpLHI9dC5uZXh0LG89ZS5wcmV2O3JldHVybiB0Lm5leHQ9ZSxlLnByZXY9dCxuLm5leHQ9cixyLnByZXY9bixpLm5leHQ9bixuLnByZXY9aSxvLm5leHQ9aSxpLnByZXY9byxpfWZ1bmN0aW9uIG1WdCh0LGUsbixpKXtjb25zdCByPW5ldyBfVnQodCxlLG4pO3JldHVybiBpPyhyLm5leHQ9aS5uZXh0LHIucHJldj1pLGkubmV4dC5wcmV2PXIsaS5uZXh0PXIpOihyLnByZXY9cixyLm5leHQ9cikscn1mdW5jdGlvbiBnVnQodCl7dC5uZXh0LnByZXY9dC5wcmV2LHQucHJldi5uZXh0PXQubmV4dCx0LnByZXZaJiYodC5wcmV2Wi5uZXh0Wj10Lm5leHRaKSx0Lm5leHRaJiYodC5uZXh0Wi5wcmV2Wj10LnByZXZaKX1mdW5jdGlvbiBfVnQodCxlLG4pe3RoaXMuaT10LHRoaXMueD1lLHRoaXMueT1uLHRoaXMucHJldj1udWxsLHRoaXMubmV4dD1udWxsLHRoaXMuej1udWxsLHRoaXMucHJldlo9bnVsbCx0aGlzLm5leHRaPW51bGwsdGhpcy5zdGVpbmVyPSExfWNvbnN0IHlWdD17YXJlYTpmdW5jdGlvbih0KXtjb25zdCBlPXQubGVuZ3RoO2xldCBuPTA7Zm9yKGxldCBpPWUtMSxyPTA7cjxlO2k9cisrKW4rPXRbaV0ueCp0W3JdLnktdFtyXS54KnRbaV0ueTtyZXR1cm4uNSpufSxpc0Nsb2NrV2lzZTpmdW5jdGlvbih0KXtyZXR1cm4geVZ0LmFyZWEodCk8MH0sdHJpYW5ndWxhdGVTaGFwZTpmdW5jdGlvbih0LGUpe2NvbnN0IG49W10saT1bXSxyPVtdO3ZWdCh0KSxiVnQobix0KTtsZXQgbz10Lmxlbmd0aDtlLmZvckVhY2godlZ0KTtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKylpLnB1c2gobyksbys9ZVt0XS5sZW5ndGgsYlZ0KG4sZVt0XSk7Y29uc3QgYT0oZnVuY3Rpb24odCxlLG4pe249bnx8Mjtjb25zdCBpPWUmJmUubGVuZ3RoLHI9aT9lWzBdKm46dC5sZW5ndGg7bGV0IG89WEZ0KHQsMCxyLG4sITApO2NvbnN0IGE9W107aWYoIW98fG8ubmV4dD09PW8ucHJldilyZXR1cm4gYTtsZXQgcyxsLGMsdSxoLGQscDtpZihpJiYobz0oZnVuY3Rpb24gZih0LGUsbixpKXtjb25zdCByPVtdO2xldCBvLGEscyxsLGM7Zm9yKG89MCxhPWUubGVuZ3RoO288YTtvKyspcz1lW29dKmksbD1vPGEtMT9lW28rMV0qaTp0Lmxlbmd0aCxjPVhGdCh0LHMsbCxpLCExKSxjPT09Yy5uZXh0JiYoYy5zdGVpbmVyPSEwKSxyLnB1c2gob1Z0KGMpKTtmb3Ioci5zb3J0KGVWdCksbz0wO288ci5sZW5ndGg7bysrKW5WdChyW29dLG4pLG49JEZ0KG4sbi5uZXh0KTtyZXR1cm4gbn0pKHQsZSxvLG4pKSx0Lmxlbmd0aD44MCpuKXtzPWM9dFswXSxsPXU9dFsxXTtmb3IobGV0IGU9bjtlPHI7ZSs9biloPXRbZV0sZD10W2UrMV0saDxzJiYocz1oKSxkPGwmJihsPWQpLGg+YyYmKGM9aCksZD51JiYodT1kKTtwPU1hdGgubWF4KGMtcyx1LWwpLHA9MCE9PXA/MS9wOjB9cmV0dXJuIEtGdChvLGEsbixzLGwscCksYX0pKG4saSk7Zm9yKGxldCB0PTA7dDxhLmxlbmd0aDt0Kz0zKXIucHVzaChhLnNsaWNlKHQsdCszKSk7cmV0dXJuIHJ9fTtmdW5jdGlvbiB2VnQodCl7Y29uc3QgZT10Lmxlbmd0aDtlPjImJnRbZS0xXS5lcXVhbHModFswXSkmJnQucG9wKCl9ZnVuY3Rpb24gYlZ0KHQsZSl7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspdC5wdXNoKGVbbl0ueCksdC5wdXNoKGVbbl0ueSl9Y2xhc3MgeFZ0IGV4dGVuZHMgVnp0e2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIoKSx0aGlzLnR5cGU9IkV4dHJ1ZGVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtzaGFwZXM6dCxvcHRpb25zOmV9LHQ9QXJyYXkuaXNBcnJheSh0KT90Olt0XTtjb25zdCBuPXRoaXMsaT1bXSxyPVtdO2ZvcihsZXQgZT0wLG49dC5sZW5ndGg7ZTxuO2UrKylvKHRbZV0pO2Z1bmN0aW9uIG8odCl7Y29uc3Qgbz1bXSxhPXZvaWQgMCE9PWUuY3VydmVTZWdtZW50cz9lLmN1cnZlU2VnbWVudHM6MTIscz12b2lkIDAhPT1lLnN0ZXBzP2Uuc3RlcHM6MTtsZXQgbD12b2lkIDAhPT1lLmRlcHRoP2UuZGVwdGg6MTAwLGM9dm9pZCAwPT09ZS5iZXZlbEVuYWJsZWR8fGUuYmV2ZWxFbmFibGVkLHU9dm9pZCAwIT09ZS5iZXZlbFRoaWNrbmVzcz9lLmJldmVsVGhpY2tuZXNzOjYsaD12b2lkIDAhPT1lLmJldmVsU2l6ZT9lLmJldmVsU2l6ZTp1LTIsZD12b2lkIDAhPT1lLmJldmVsT2Zmc2V0P2UuYmV2ZWxPZmZzZXQ6MCxwPXZvaWQgMCE9PWUuYmV2ZWxTZWdtZW50cz9lLmJldmVsU2VnbWVudHM6Mztjb25zdCBmPWUuZXh0cnVkZVBhdGgsbT12b2lkIDAhPT1lLlVWR2VuZXJhdG9yP2UuVVZHZW5lcmF0b3I6d1Z0O3ZvaWQgMCE9PWUuYW1vdW50JiYoY29uc29sZS53YXJuKCJUSFJFRS5FeHRydWRlQnVmZmVyR2VvbWV0cnk6IGFtb3VudCBoYXMgYmVlbiByZW5hbWVkIHRvIGRlcHRoLiIpLGw9ZS5hbW91bnQpO2xldCBnLF8seSx2LGIseD0hMTtmJiYoZz1mLmdldFNwYWNlZFBvaW50cyhzKSx4PSEwLGM9ITEsXz1mLmNvbXB1dGVGcmVuZXRGcmFtZXMocywhMSkseT1uZXcgcU90LHY9bmV3IHFPdCxiPW5ldyBxT3QpLGN8fChwPTAsdT0wLGg9MCxkPTApO2NvbnN0IHc9dC5leHRyYWN0UG9pbnRzKGEpO2xldCBTPXcuc2hhcGU7Y29uc3QgTT13LmhvbGVzO2lmKCF5VnQuaXNDbG9ja1dpc2UoUykpe1M9Uy5yZXZlcnNlKCk7Zm9yKGxldCB0PTAsZT1NLmxlbmd0aDt0PGU7dCsrKXtjb25zdCBlPU1bdF07eVZ0LmlzQ2xvY2tXaXNlKGUpJiYoTVt0XT1lLnJldmVyc2UoKSl9fWNvbnN0IEU9eVZ0LnRyaWFuZ3VsYXRlU2hhcGUoUyxNKSxUPVM7Zm9yKGxldCB0PTAsZT1NLmxlbmd0aDt0PGU7dCsrKVM9Uy5jb25jYXQoTVt0XSk7ZnVuY3Rpb24gQyh0LGUsbil7cmV0dXJuIGV8fGNvbnNvbGUuZXJyb3IoIlRIUkVFLkV4dHJ1ZGVHZW9tZXRyeTogdmVjIGRvZXMgbm90IGV4aXN0IiksZS5jbG9uZSgpLm11bHRpcGx5U2NhbGFyKG4pLmFkZCh0KX1jb25zdCBBPVMubGVuZ3RoLGs9RS5sZW5ndGg7ZnVuY3Rpb24gTCh0LGUsbil7bGV0IGkscixvO2NvbnN0IGE9dC54LWUueCxzPXQueS1lLnksbD1uLngtdC54LGM9bi55LXQueSx1PWEqYStzKnM7aWYoTWF0aC5hYnMoYSpjLXMqbCk+TnVtYmVyLkVQU0lMT04pe2NvbnN0IGg9TWF0aC5zcXJ0KHUpLGQ9TWF0aC5zcXJ0KGwqbCtjKmMpLHA9ZS54LXMvaCxmPWUueSthL2gsbT0oKG4ueC1jL2QtcCkqYy0obi55K2wvZC1mKSpsKS8oYSpjLXMqbCk7aT1wK2EqbS10Lngscj1mK3MqbS10Lnk7Y29uc3QgZz1pKmkrcipyO2lmKGc8PTIpcmV0dXJuIG5ldyB6T3QoaSxyKTtvPU1hdGguc3FydChnLzIpfWVsc2V7bGV0IHQ9ITE7YT5OdW1iZXIuRVBTSUxPTj9sPk51bWJlci5FUFNJTE9OJiYodD0hMCk6YTwtTnVtYmVyLkVQU0lMT04/bDwtTnVtYmVyLkVQU0lMT04mJih0PSEwKTpNYXRoLnNpZ24ocyk9PT1NYXRoLnNpZ24oYykmJih0PSEwKSx0PyhpPS1zLHI9YSxvPU1hdGguc3FydCh1KSk6KGk9YSxyPXMsbz1NYXRoLnNxcnQodS8yKSl9cmV0dXJuIG5ldyB6T3QoaS9vLHIvbyl9Y29uc3QgUD1bXTtmb3IobGV0IHQ9MCxlPVQubGVuZ3RoLG49ZS0xLGk9dCsxO3Q8ZTt0KyssbisrLGkrKyluPT09ZSYmKG49MCksaT09PWUmJihpPTApLFBbdF09TChUW3RdLFRbbl0sVFtpXSk7Y29uc3QgTj1bXTtsZXQgSSxPPVAuY29uY2F0KCk7Zm9yKGxldCB0PTAsZT1NLmxlbmd0aDt0PGU7dCsrKXtjb25zdCBlPU1bdF07ST1bXTtmb3IobGV0IHQ9MCxuPWUubGVuZ3RoLGk9bi0xLHI9dCsxO3Q8bjt0KyssaSsrLHIrKylpPT09biYmKGk9MCkscj09PW4mJihyPTApLElbdF09TChlW3RdLGVbaV0sZVtyXSk7Ti5wdXNoKEkpLE89Ty5jb25jYXQoSSl9Zm9yKGxldCB0PTA7dDxwO3QrKyl7Y29uc3QgZT10L3Asbj11Kk1hdGguY29zKGUqTWF0aC5QSS8yKSxpPWgqTWF0aC5zaW4oZSpNYXRoLlBJLzIpK2Q7Zm9yKGxldCB0PTAsZT1ULmxlbmd0aDt0PGU7dCsrKXtjb25zdCBlPUMoVFt0XSxQW3RdLGkpO0QoZS54LGUueSwtbil9Zm9yKGxldCB0PTAsZT1NLmxlbmd0aDt0PGU7dCsrKXtjb25zdCBlPU1bdF07ST1OW3RdO2ZvcihsZXQgdD0wLHI9ZS5sZW5ndGg7dDxyO3QrKyl7Y29uc3Qgcj1DKGVbdF0sSVt0XSxpKTtEKHIueCxyLnksLW4pfX19Y29uc3QgUj1oK2Q7Zm9yKGxldCB0PTA7dDxBO3QrKyl7Y29uc3QgZT1jP0MoU1t0XSxPW3RdLFIpOlNbdF07eD8odi5jb3B5KF8ubm9ybWFsc1swXSkubXVsdGlwbHlTY2FsYXIoZS54KSx5LmNvcHkoXy5iaW5vcm1hbHNbMF0pLm11bHRpcGx5U2NhbGFyKGUueSksYi5jb3B5KGdbMF0pLmFkZCh2KS5hZGQoeSksRChiLngsYi55LGIueikpOkQoZS54LGUueSwwKX1mb3IobGV0IHQ9MTt0PD1zO3QrKylmb3IobGV0IGU9MDtlPEE7ZSsrKXtjb25zdCBuPWM/QyhTW2VdLE9bZV0sUik6U1tlXTt4Pyh2LmNvcHkoXy5ub3JtYWxzW3RdKS5tdWx0aXBseVNjYWxhcihuLngpLHkuY29weShfLmJpbm9ybWFsc1t0XSkubXVsdGlwbHlTY2FsYXIobi55KSxiLmNvcHkoZ1t0XSkuYWRkKHYpLmFkZCh5KSxEKGIueCxiLnksYi56KSk6RChuLngsbi55LGwvcyp0KX1mb3IobGV0IHQ9cC0xO3Q+PTA7dC0tKXtjb25zdCBlPXQvcCxuPXUqTWF0aC5jb3MoZSpNYXRoLlBJLzIpLGk9aCpNYXRoLnNpbihlKk1hdGguUEkvMikrZDtmb3IobGV0IHQ9MCxlPVQubGVuZ3RoO3Q8ZTt0Kyspe2NvbnN0IGU9QyhUW3RdLFBbdF0saSk7RChlLngsZS55LGwrbil9Zm9yKGxldCB0PTAsZT1NLmxlbmd0aDt0PGU7dCsrKXtjb25zdCBlPU1bdF07ST1OW3RdO2ZvcihsZXQgdD0wLHI9ZS5sZW5ndGg7dDxyO3QrKyl7Y29uc3Qgcj1DKGVbdF0sSVt0XSxpKTt4P0Qoci54LHIueStnW3MtMV0ueSxnW3MtMV0ueCtuKTpEKHIueCxyLnksbCtuKX19fWZ1bmN0aW9uIHoodCxlKXtsZXQgbj10Lmxlbmd0aDtmb3IoOy0tbj49MDspe2NvbnN0IGk9bjtsZXQgcj1uLTE7cjwwJiYocj10Lmxlbmd0aC0xKTtmb3IobGV0IHQ9MCxuPXMrMipwO3Q8bjt0Kyspe2NvbnN0IG49QSp0LG89QSoodCsxKTtIKGUraStuLGUrcituLGUrcitvLGUraStvKX19fWZ1bmN0aW9uIEQodCxlLG4pe28ucHVzaCh0KSxvLnB1c2goZSksby5wdXNoKG4pfWZ1bmN0aW9uIEIodCxlLHIpe0YodCksRihlKSxGKHIpO2NvbnN0IG89aS5sZW5ndGgvMyxhPW0uZ2VuZXJhdGVUb3BVVihuLGksby0zLG8tMixvLTEpO1YoYVswXSksVihhWzFdKSxWKGFbMl0pfWZ1bmN0aW9uIEgodCxlLHIsbyl7Rih0KSxGKGUpLEYobyksRihlKSxGKHIpLEYobyk7Y29uc3QgYT1pLmxlbmd0aC8zLHM9bS5nZW5lcmF0ZVNpZGVXYWxsVVYobixpLGEtNixhLTMsYS0yLGEtMSk7VihzWzBdKSxWKHNbMV0pLFYoc1szXSksVihzWzFdKSxWKHNbMl0pLFYoc1szXSl9ZnVuY3Rpb24gRih0KXtpLnB1c2gob1szKnQrMF0pLGkucHVzaChvWzMqdCsxXSksaS5wdXNoKG9bMyp0KzJdKX1mdW5jdGlvbiBWKHQpe3IucHVzaCh0LngpLHIucHVzaCh0LnkpfSEoZnVuY3Rpb24gVSgpe2NvbnN0IHQ9aS5sZW5ndGgvMztpZihjKXtsZXQgdD0wLGU9QSp0O2ZvcihsZXQgdD0wO3Q8azt0Kyspe2NvbnN0IG49RVt0XTtCKG5bMl0rZSxuWzFdK2UsblswXStlKX10PXMrMipwLGU9QSp0O2ZvcihsZXQgdD0wO3Q8azt0Kyspe2NvbnN0IG49RVt0XTtCKG5bMF0rZSxuWzFdK2UsblsyXStlKX19ZWxzZXtmb3IobGV0IHQ9MDt0PGs7dCsrKXtjb25zdCBlPUVbdF07QihlWzJdLGVbMV0sZVswXSl9Zm9yKGxldCB0PTA7dDxrO3QrKyl7Y29uc3QgZT1FW3RdO0IoZVswXStBKnMsZVsxXStBKnMsZVsyXStBKnMpfX1uLmFkZEdyb3VwKHQsaS5sZW5ndGgvMy10LDApfSkoKSwoZnVuY3Rpb24gaigpe2NvbnN0IHQ9aS5sZW5ndGgvMztsZXQgZT0wO3ooVCxlKSxlKz1ULmxlbmd0aDtmb3IobGV0IHQ9MCxuPU0ubGVuZ3RoO3Q8bjt0Kyspe2NvbnN0IG49TVt0XTt6KG4sZSksZSs9bi5sZW5ndGh9bi5hZGRHcm91cCh0LGkubGVuZ3RoLzMtdCwxKX0pKCl9dGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcga3p0KGksMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IGt6dChyLDIpKSx0aGlzLmNvbXB1dGVWZXJ0ZXhOb3JtYWxzKCl9dG9KU09OKCl7Y29uc3QgdD1WenQucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMpO3JldHVybihmdW5jdGlvbiBlKHQsbixpKXtpZihpLnNoYXBlcz1bXSxBcnJheS5pc0FycmF5KHQpKWZvcihsZXQgZT0wLG49dC5sZW5ndGg7ZTxuO2UrKylpLnNoYXBlcy5wdXNoKHRbZV0udXVpZCk7ZWxzZSBpLnNoYXBlcy5wdXNoKHQudXVpZCk7cmV0dXJuIHZvaWQgMCE9PW4uZXh0cnVkZVBhdGgmJihpLm9wdGlvbnMuZXh0cnVkZVBhdGg9bi5leHRydWRlUGF0aC50b0pTT04oKSksaX0pKHRoaXMucGFyYW1ldGVycy5zaGFwZXMsdGhpcy5wYXJhbWV0ZXJzLm9wdGlvbnMsdCl9fWNvbnN0IHdWdD17Z2VuZXJhdGVUb3BVVjpmdW5jdGlvbih0LGUsbixpLHIpe2NvbnN0IG89ZVszKmldLGE9ZVszKmkrMV0scz1lWzMqcl0sbD1lWzMqcisxXTtyZXR1cm5bbmV3IHpPdChlWzMqbl0sZVszKm4rMV0pLG5ldyB6T3QobyxhKSxuZXcgek90KHMsbCldfSxnZW5lcmF0ZVNpZGVXYWxsVVY6ZnVuY3Rpb24odCxlLG4saSxyLG8pe2NvbnN0IGE9ZVszKm5dLHM9ZVszKm4rMV0sbD1lWzMqbisyXSxjPWVbMyppXSx1PWVbMyppKzFdLGg9ZVszKmkrMl0sZD1lWzMqcl0scD1lWzMqcisxXSxmPWVbMypyKzJdLG09ZVszKm9dLGc9ZVszKm8rMV0sXz1lWzMqbysyXTtyZXR1cm4gTWF0aC5hYnMocy11KTwuMDE/W25ldyB6T3QoYSwxLWwpLG5ldyB6T3QoYywxLWgpLG5ldyB6T3QoZCwxLWYpLG5ldyB6T3QobSwxLV8pXTpbbmV3IHpPdChzLDEtbCksbmV3IHpPdCh1LDEtaCksbmV3IHpPdChwLDEtZiksbmV3IHpPdChnLDEtXyldfX07Y2xhc3MgU1Z0IGV4dGVuZHMgVkZ0e2NvbnN0cnVjdG9yKHQ9MSxlPTApe2NvbnN0IG49KDErTWF0aC5zcXJ0KDUpKS8yO3N1cGVyKFstMSxuLDAsMSxuLDAsLTEsLW4sMCwxLC1uLDAsMCwtMSxuLDAsMSxuLDAsLTEsLW4sMCwxLC1uLG4sMCwtMSxuLDAsMSwtbiwwLC0xLC1uLDAsMV0sWzAsMTEsNSwwLDUsMSwwLDEsNywwLDcsMTAsMCwxMCwxMSwxLDUsOSw1LDExLDQsMTEsMTAsMiwxMCw3LDYsNywxLDgsMyw5LDQsMyw0LDIsMywyLDYsMyw2LDgsMyw4LDksNCw5LDUsMiw0LDExLDYsMiwxMCw4LDYsNyw5LDgsMV0sdCxlKSx0aGlzLnR5cGU9Ikljb3NhaGVkcm9uR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cmFkaXVzOnQsZGV0YWlsOmV9fX1jbGFzcyBNVnQgZXh0ZW5kcyBWenR7Y29uc3RydWN0b3IodCxlPTEyLG49MCxpPTIqTWF0aC5QSSl7c3VwZXIoKSx0aGlzLnR5cGU9IkxhdGhlR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cG9pbnRzOnQsc2VnbWVudHM6ZSxwaGlTdGFydDpuLHBoaUxlbmd0aDppfSxlPU1hdGguZmxvb3IoZSksaT1ST3QuY2xhbXAoaSwwLDIqTWF0aC5QSSk7Y29uc3Qgcj1bXSxvPVtdLGE9W10scz0xL2UsbD1uZXcgcU90LGM9bmV3IHpPdDtmb3IobGV0IHI9MDtyPD1lO3IrKyl7Y29uc3QgdT1uK3IqcyppLGg9TWF0aC5zaW4odSksZD1NYXRoLmNvcyh1KTtmb3IobGV0IG49MDtuPD10Lmxlbmd0aC0xO24rKylsLng9dFtuXS54KmgsbC55PXRbbl0ueSxsLno9dFtuXS54KmQsby5wdXNoKGwueCxsLnksbC56KSxjLng9ci9lLGMueT1uLyh0Lmxlbmd0aC0xKSxhLnB1c2goYy54LGMueSl9Zm9yKGxldCBuPTA7bjxlO24rKylmb3IobGV0IGU9MDtlPHQubGVuZ3RoLTE7ZSsrKXtjb25zdCBpPWUrbip0Lmxlbmd0aCxvPWkrdC5sZW5ndGgsYT1pK3QubGVuZ3RoKzEscz1pKzE7ci5wdXNoKGksbyxzKSxyLnB1c2gobyxhLHMpfWlmKHRoaXMuc2V0SW5kZXgociksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcga3p0KG8sMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IGt6dChhLDIpKSx0aGlzLmNvbXB1dGVWZXJ0ZXhOb3JtYWxzKCksaT09PTIqTWF0aC5QSSl7Y29uc3Qgbj10aGlzLmF0dHJpYnV0ZXMubm9ybWFsLmFycmF5LGk9bmV3IHFPdCxyPW5ldyBxT3Qsbz1uZXcgcU90LGE9ZSp0Lmxlbmd0aCozO2ZvcihsZXQgZT0wLHM9MDtlPHQubGVuZ3RoO2UrKyxzKz0zKWkueD1uW3MrMF0saS55PW5bcysxXSxpLno9bltzKzJdLHIueD1uW2ErcyswXSxyLnk9blthK3MrMV0sci56PW5bYStzKzJdLG8uYWRkVmVjdG9ycyhpLHIpLm5vcm1hbGl6ZSgpLG5bcyswXT1uW2ErcyswXT1vLngsbltzKzFdPW5bYStzKzFdPW8ueSxuW3MrMl09blthK3MrMl09by56fX19Y2xhc3MgRVZ0IGV4dGVuZHMgVkZ0e2NvbnN0cnVjdG9yKHQ9MSxlPTApe3N1cGVyKFsxLDAsMCwtMSwwLDAsMCwxLDAsMCwtMSwwLDAsMCwxLDAsMCwtMV0sWzAsMiw0LDAsNCwzLDAsMyw1LDAsNSwyLDEsMiw1LDEsNSwzLDEsMyw0LDEsNCwyXSx0LGUpLHRoaXMudHlwZT0iT2N0YWhlZHJvbkdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czp0LGRldGFpbDplfX19ZnVuY3Rpb24gVFZ0KHQsZSxuKXtWenQuY2FsbCh0aGlzKSx0aGlzLnR5cGU9IlBhcmFtZXRyaWNHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtmdW5jOnQsc2xpY2VzOmUsc3RhY2tzOm59O2NvbnN0IGk9W10scj1bXSxvPVtdLGE9W10scz0xZS01LGw9bmV3IHFPdCxjPW5ldyBxT3QsdT1uZXcgcU90LGg9bmV3IHFPdCxkPW5ldyBxT3Q7dC5sZW5ndGg8MyYmY29uc29sZS5lcnJvcigiVEhSRUUuUGFyYW1ldHJpY0dlb21ldHJ5OiBGdW5jdGlvbiBtdXN0IG5vdyBtb2RpZnkgYSBWZWN0b3IzIGFzIHRoaXJkIHBhcmFtZXRlci4iKTtjb25zdCBwPWUrMTtmb3IobGV0IGk9MDtpPD1uO2krKyl7Y29uc3QgcD1pL247Zm9yKGxldCBuPTA7bjw9ZTtuKyspe2NvbnN0IGk9bi9lO3QoaSxwLGMpLHIucHVzaChjLngsYy55LGMueiksaS1zPj0wPyh0KGktcyxwLHUpLGguc3ViVmVjdG9ycyhjLHUpKToodChpK3MscCx1KSxoLnN1YlZlY3RvcnModSxjKSkscC1zPj0wPyh0KGkscC1zLHUpLGQuc3ViVmVjdG9ycyhjLHUpKToodChpLHArcyx1KSxkLnN1YlZlY3RvcnModSxjKSksbC5jcm9zc1ZlY3RvcnMoaCxkKS5ub3JtYWxpemUoKSxvLnB1c2gobC54LGwueSxsLnopLGEucHVzaChpLHApfX1mb3IobGV0IHQ9MDt0PG47dCsrKWZvcihsZXQgbj0wO248ZTtuKyspe2NvbnN0IGU9dCpwK24rMSxyPSh0KzEpKnArbisxLG89KHQrMSkqcCtuO2kucHVzaCh0KnArbixlLG8pLGkucHVzaChlLHIsbyl9dGhpcy5zZXRJbmRleChpKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBrenQociwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IGt6dChvLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyBrenQoYSwyKSl9KFRWdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShWenQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9VFZ0O2NsYXNzIENWdCBleHRlbmRzIFZ6dHtjb25zdHJ1Y3Rvcih0PS41LGU9MSxuPTgsaT0xLHI9MCxvPTIqTWF0aC5QSSl7c3VwZXIoKSx0aGlzLnR5cGU9IlJpbmdHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtpbm5lclJhZGl1czp0LG91dGVyUmFkaXVzOmUsdGhldGFTZWdtZW50czpuLHBoaVNlZ21lbnRzOmksdGhldGFTdGFydDpyLHRoZXRhTGVuZ3RoOm99LG49TWF0aC5tYXgoMyxuKTtjb25zdCBhPVtdLHM9W10sbD1bXSxjPVtdO2xldCB1PXQ7Y29uc3QgaD0oZS10KS8oaT1NYXRoLm1heCgxLGkpKSxkPW5ldyBxT3QscD1uZXcgek90O2ZvcihsZXQgdD0wO3Q8PWk7dCsrKXtmb3IobGV0IHQ9MDt0PD1uO3QrKyl7Y29uc3QgaT1yK3QvbipvO2QueD11Kk1hdGguY29zKGkpLGQueT11Kk1hdGguc2luKGkpLHMucHVzaChkLngsZC55LGQueiksbC5wdXNoKDAsMCwxKSxwLng9KGQueC9lKzEpLzIscC55PShkLnkvZSsxKS8yLGMucHVzaChwLngscC55KX11Kz1ofWZvcihsZXQgdD0wO3Q8aTt0Kyspe2NvbnN0IGU9dCoobisxKTtmb3IobGV0IHQ9MDt0PG47dCsrKXtjb25zdCBpPXQrZSxyPWkrbisxLG89aStuKzIscz1pKzE7YS5wdXNoKGkscixzKSxhLnB1c2gocixvLHMpfX10aGlzLnNldEluZGV4KGEpLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGt6dChzLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcga3p0KGwsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IGt6dChjLDIpKX19Y2xhc3MgQVZ0IGV4dGVuZHMgVnp0e2NvbnN0cnVjdG9yKHQsZT0xMil7c3VwZXIoKSx0aGlzLnR5cGU9IlNoYXBlR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17c2hhcGVzOnQsY3VydmVTZWdtZW50czplfTtjb25zdCBuPVtdLGk9W10scj1bXSxvPVtdO2xldCBhPTAscz0wO2lmKCExPT09QXJyYXkuaXNBcnJheSh0KSlsKHQpO2Vsc2UgZm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspbCh0W2VdKSx0aGlzLmFkZEdyb3VwKGEscyxlKSxhKz1zLHM9MDtmdW5jdGlvbiBsKHQpe2NvbnN0IGE9aS5sZW5ndGgvMyxsPXQuZXh0cmFjdFBvaW50cyhlKTtsZXQgYz1sLnNoYXBlO2NvbnN0IHU9bC5ob2xlczshMT09PXlWdC5pc0Nsb2NrV2lzZShjKSYmKGM9Yy5yZXZlcnNlKCkpO2ZvcihsZXQgdD0wLGU9dS5sZW5ndGg7dDxlO3QrKyl7Y29uc3QgZT11W3RdOyEwPT09eVZ0LmlzQ2xvY2tXaXNlKGUpJiYodVt0XT1lLnJldmVyc2UoKSl9Y29uc3QgaD15VnQudHJpYW5ndWxhdGVTaGFwZShjLHUpO2ZvcihsZXQgdD0wLGU9dS5sZW5ndGg7dDxlO3QrKyljPWMuY29uY2F0KHVbdF0pO2ZvcihsZXQgdD0wLGU9Yy5sZW5ndGg7dDxlO3QrKyl7Y29uc3QgZT1jW3RdO2kucHVzaChlLngsZS55LDApLHIucHVzaCgwLDAsMSksby5wdXNoKGUueCxlLnkpfWZvcihsZXQgdD0wLGU9aC5sZW5ndGg7dDxlO3QrKyl7Y29uc3QgZT1oW3RdO24ucHVzaChlWzBdK2EsZVsxXSthLGVbMl0rYSkscys9M319dGhpcy5zZXRJbmRleChuKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBrenQoaSwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IGt6dChyLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyBrenQobywyKSl9dG9KU09OKCl7Y29uc3QgdD1WenQucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMpO3JldHVybihmdW5jdGlvbiBlKHQsbil7aWYobi5zaGFwZXM9W10sQXJyYXkuaXNBcnJheSh0KSlmb3IobGV0IGU9MCxpPXQubGVuZ3RoO2U8aTtlKyspbi5zaGFwZXMucHVzaCh0W2VdLnV1aWQpO2Vsc2Ugbi5zaGFwZXMucHVzaCh0LnV1aWQpO3JldHVybiBufSkodGhpcy5wYXJhbWV0ZXJzLnNoYXBlcyx0KX19Y2xhc3Mga1Z0IGV4dGVuZHMgVnp0e2NvbnN0cnVjdG9yKHQ9MSxlPTgsbj02LGk9MCxyPTIqTWF0aC5QSSxvPTAsYT1NYXRoLlBJKXtzdXBlcigpLHRoaXMudHlwZT0iU3BoZXJlR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cmFkaXVzOnQsd2lkdGhTZWdtZW50czplLGhlaWdodFNlZ21lbnRzOm4scGhpU3RhcnQ6aSxwaGlMZW5ndGg6cix0aGV0YVN0YXJ0Om8sdGhldGFMZW5ndGg6YX0sZT1NYXRoLm1heCgzLE1hdGguZmxvb3IoZSkpLG49TWF0aC5tYXgoMixNYXRoLmZsb29yKG4pKTtjb25zdCBzPU1hdGgubWluKG8rYSxNYXRoLlBJKTtsZXQgbD0wO2NvbnN0IGM9W10sdT1uZXcgcU90LGg9bmV3IHFPdCxkPVtdLHA9W10sZj1bXSxtPVtdO2ZvcihsZXQgZD0wO2Q8PW47ZCsrKXtjb25zdCBnPVtdLF89ZC9uO2xldCB5PTA7MD09ZCYmMD09bz95PS41L2U6ZD09biYmcz09TWF0aC5QSSYmKHk9LS41L2UpO2ZvcihsZXQgbj0wO248PWU7bisrKXtjb25zdCBzPW4vZTt1Lng9LXQqTWF0aC5jb3MoaStzKnIpKk1hdGguc2luKG8rXyphKSx1Lnk9dCpNYXRoLmNvcyhvK18qYSksdS56PXQqTWF0aC5zaW4oaStzKnIpKk1hdGguc2luKG8rXyphKSxwLnB1c2godS54LHUueSx1LnopLGguY29weSh1KS5ub3JtYWxpemUoKSxmLnB1c2goaC54LGgueSxoLnopLG0ucHVzaChzK3ksMS1fKSxnLnB1c2gobCsrKX1jLnB1c2goZyl9Zm9yKGxldCB0PTA7dDxuO3QrKylmb3IobGV0IGk9MDtpPGU7aSsrKXtjb25zdCBlPWNbdF1baSsxXSxyPWNbdF1baV0sYT1jW3QrMV1baV0sbD1jW3QrMV1baSsxXTsoMCE9PXR8fG8+MCkmJmQucHVzaChlLHIsbCksKHQhPT1uLTF8fHM8TWF0aC5QSSkmJmQucHVzaChyLGEsbCl9dGhpcy5zZXRJbmRleChkKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBrenQocCwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IGt6dChmLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyBrenQobSwyKSl9fWNsYXNzIExWdCBleHRlbmRzIFZGdHtjb25zdHJ1Y3Rvcih0PTEsZT0wKXtzdXBlcihbMSwxLDEsLTEsLTEsMSwtMSwxLC0xLDEsLTEsLTFdLFsyLDEsMCwwLDMsMiwxLDMsMCwyLDMsMV0sdCxlKSx0aGlzLnR5cGU9IlRldHJhaGVkcm9uR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cmFkaXVzOnQsZGV0YWlsOmV9fX1jbGFzcyBQVnQgZXh0ZW5kcyB4VnR7Y29uc3RydWN0b3IodCxlPXt9KXtjb25zdCBuPWUuZm9udDtpZighbnx8IW4uaXNGb250KXJldHVybiBjb25zb2xlLmVycm9yKCJUSFJFRS5UZXh0R2VvbWV0cnk6IGZvbnQgcGFyYW1ldGVyIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5Gb250LiIpLG5ldyBWenQ7Y29uc3QgaT1uLmdlbmVyYXRlU2hhcGVzKHQsZS5zaXplKTtlLmRlcHRoPXZvaWQgMCE9PWUuaGVpZ2h0P2UuaGVpZ2h0OjUwLHZvaWQgMD09PWUuYmV2ZWxUaGlja25lc3MmJihlLmJldmVsVGhpY2tuZXNzPTEwKSx2b2lkIDA9PT1lLmJldmVsU2l6ZSYmKGUuYmV2ZWxTaXplPTgpLHZvaWQgMD09PWUuYmV2ZWxFbmFibGVkJiYoZS5iZXZlbEVuYWJsZWQ9ITEpLHN1cGVyKGksZSksdGhpcy50eXBlPSJUZXh0R2VvbWV0cnkifX1jbGFzcyBOVnQgZXh0ZW5kcyBWenR7Y29uc3RydWN0b3IodD0xLGU9LjQsbj04LGk9NixyPTIqTWF0aC5QSSl7c3VwZXIoKSx0aGlzLnR5cGU9IlRvcnVzR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cmFkaXVzOnQsdHViZTplLHJhZGlhbFNlZ21lbnRzOm4sdHVidWxhclNlZ21lbnRzOmksYXJjOnJ9LG49TWF0aC5mbG9vcihuKSxpPU1hdGguZmxvb3IoaSk7Y29uc3Qgbz1bXSxhPVtdLHM9W10sbD1bXSxjPW5ldyBxT3QsdT1uZXcgcU90LGg9bmV3IHFPdDtmb3IobGV0IG89MDtvPD1uO28rKylmb3IobGV0IGQ9MDtkPD1pO2QrKyl7Y29uc3QgcD1kL2kqcixmPW8vbipNYXRoLlBJKjI7dS54PSh0K2UqTWF0aC5jb3MoZikpKk1hdGguY29zKHApLHUueT0odCtlKk1hdGguY29zKGYpKSpNYXRoLnNpbihwKSx1Lno9ZSpNYXRoLnNpbihmKSxhLnB1c2godS54LHUueSx1LnopLGMueD10Kk1hdGguY29zKHApLGMueT10Kk1hdGguc2luKHApLGguc3ViVmVjdG9ycyh1LGMpLm5vcm1hbGl6ZSgpLHMucHVzaChoLngsaC55LGgueiksbC5wdXNoKGQvaSksbC5wdXNoKG8vbil9Zm9yKGxldCB0PTE7dDw9bjt0KyspZm9yKGxldCBlPTE7ZTw9aTtlKyspe2NvbnN0IG49KGkrMSkqKHQtMSkrZS0xLHI9KGkrMSkqKHQtMSkrZSxhPShpKzEpKnQrZTtvLnB1c2goKGkrMSkqdCtlLTEsbixhKSxvLnB1c2gobixyLGEpfXRoaXMuc2V0SW5kZXgobyksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcga3p0KGEsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyBrenQocywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcga3p0KGwsMikpfX1jbGFzcyBJVnQgZXh0ZW5kcyBWenR7Y29uc3RydWN0b3IodD0xLGU9LjQsbj02NCxpPTgscj0yLG89Myl7c3VwZXIoKSx0aGlzLnR5cGU9IlRvcnVzS25vdEdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czp0LHR1YmU6ZSx0dWJ1bGFyU2VnbWVudHM6bixyYWRpYWxTZWdtZW50czppLHA6cixxOm99LG49TWF0aC5mbG9vcihuKSxpPU1hdGguZmxvb3IoaSk7Y29uc3QgYT1bXSxzPVtdLGw9W10sYz1bXSx1PW5ldyBxT3QsaD1uZXcgcU90LGQ9bmV3IHFPdCxwPW5ldyBxT3QsZj1uZXcgcU90LG09bmV3IHFPdCxnPW5ldyBxT3Q7Zm9yKGxldCBhPTA7YTw9bjsrK2Epe2NvbnN0IHk9YS9uKnIqTWF0aC5QSSoyO18oeSxyLG8sdCxkKSxfKHkrLjAxLHIsbyx0LHApLG0uc3ViVmVjdG9ycyhwLGQpLGcuYWRkVmVjdG9ycyhwLGQpLGYuY3Jvc3NWZWN0b3JzKG0sZyksZy5jcm9zc1ZlY3RvcnMoZixtKSxmLm5vcm1hbGl6ZSgpLGcubm9ybWFsaXplKCk7Zm9yKGxldCB0PTA7dDw9aTsrK3Qpe2NvbnN0IHI9dC9pKk1hdGguUEkqMixvPS1lKk1hdGguY29zKHIpLHA9ZSpNYXRoLnNpbihyKTt1Lng9ZC54KyhvKmcueCtwKmYueCksdS55PWQueSsobypnLnkrcCpmLnkpLHUuej1kLnorKG8qZy56K3AqZi56KSxzLnB1c2godS54LHUueSx1LnopLGguc3ViVmVjdG9ycyh1LGQpLm5vcm1hbGl6ZSgpLGwucHVzaChoLngsaC55LGgueiksYy5wdXNoKGEvbiksYy5wdXNoKHQvaSl9fWZvcihsZXQgdD0xO3Q8PW47dCsrKWZvcihsZXQgZT0xO2U8PWk7ZSsrKXtjb25zdCBuPShpKzEpKnQrKGUtMSkscj0oaSsxKSp0K2Usbz0oaSsxKSoodC0xKStlO2EucHVzaCgoaSsxKSoodC0xKSsoZS0xKSxuLG8pLGEucHVzaChuLHIsbyl9ZnVuY3Rpb24gXyh0LGUsbixpLHIpe2NvbnN0IG89TWF0aC5jb3ModCksYT1NYXRoLnNpbih0KSxzPW4vZSp0LGw9TWF0aC5jb3Mocyk7ci54PWkqKDIrbCkqLjUqbyxyLnk9aSooMitsKSphKi41LHIuej1pKk1hdGguc2luKHMpKi41fXRoaXMuc2V0SW5kZXgoYSksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcga3p0KHMsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyBrenQobCwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcga3p0KGMsMikpfX1jbGFzcyBPVnQgZXh0ZW5kcyBWenR7Y29uc3RydWN0b3IodCxlPTY0LG49MSxpPTgscj0hMSl7c3VwZXIoKSx0aGlzLnR5cGU9IlR1YmVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtwYXRoOnQsdHVidWxhclNlZ21lbnRzOmUscmFkaXVzOm4scmFkaWFsU2VnbWVudHM6aSxjbG9zZWQ6cn07Y29uc3Qgbz10LmNvbXB1dGVGcmVuZXRGcmFtZXMoZSxyKTt0aGlzLnRhbmdlbnRzPW8udGFuZ2VudHMsdGhpcy5ub3JtYWxzPW8ubm9ybWFscyx0aGlzLmJpbm9ybWFscz1vLmJpbm9ybWFscztjb25zdCBhPW5ldyBxT3Qscz1uZXcgcU90LGw9bmV3IHpPdDtsZXQgYz1uZXcgcU90O2NvbnN0IHU9W10saD1bXSxkPVtdLHA9W107ZnVuY3Rpb24gZihyKXtjPXQuZ2V0UG9pbnRBdChyL2UsYyk7Y29uc3QgbD1vLm5vcm1hbHNbcl0sZD1vLmJpbm9ybWFsc1tyXTtmb3IobGV0IHQ9MDt0PD1pO3QrKyl7Y29uc3QgZT10L2kqTWF0aC5QSSoyLHI9TWF0aC5zaW4oZSksbz0tTWF0aC5jb3MoZSk7cy54PW8qbC54K3IqZC54LHMueT1vKmwueStyKmQueSxzLno9bypsLnorcipkLnoscy5ub3JtYWxpemUoKSxoLnB1c2gocy54LHMueSxzLnopLGEueD1jLngrbipzLngsYS55PWMueStuKnMueSxhLno9Yy56K24qcy56LHUucHVzaChhLngsYS55LGEueil9fSEoZnVuY3Rpb24gbSgpe2ZvcihsZXQgdD0wO3Q8ZTt0KyspZih0KTtmKCExPT09cj9lOjApLChmdW5jdGlvbiB0KCl7Zm9yKGxldCB0PTA7dDw9ZTt0KyspZm9yKGxldCBuPTA7bjw9aTtuKyspbC54PXQvZSxsLnk9bi9pLGQucHVzaChsLngsbC55KX0pKCksKGZ1bmN0aW9uIG4oKXtmb3IobGV0IHQ9MTt0PD1lO3QrKylmb3IobGV0IGU9MTtlPD1pO2UrKyl7Y29uc3Qgbj0oaSsxKSp0KyhlLTEpLHI9KGkrMSkqdCtlLG89KGkrMSkqKHQtMSkrZTtwLnB1c2goKGkrMSkqKHQtMSkrKGUtMSksbixvKSxwLnB1c2gobixyLG8pfX0pKCl9KSgpLHRoaXMuc2V0SW5kZXgocCksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcga3p0KHUsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyBrenQoaCwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcga3p0KGQsMikpfXRvSlNPTigpe2NvbnN0IHQ9Vnp0LnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzKTtyZXR1cm4gdC5wYXRoPXRoaXMucGFyYW1ldGVycy5wYXRoLnRvSlNPTigpLHR9fWNsYXNzIFJWdCBleHRlbmRzIFZ6dHtjb25zdHJ1Y3Rvcih0KXtpZihzdXBlcigpLHRoaXMudHlwZT0iV2lyZWZyYW1lR2VvbWV0cnkiLCEwPT09dC5pc0dlb21ldHJ5KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLldpcmVmcmFtZUdlb21ldHJ5IG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIik7Y29uc3QgZT1bXSxuPVswLDBdLGk9e30scj1uZXcgcU90O2lmKG51bGwhPT10LmluZGV4KXtjb25zdCBvPXQuYXR0cmlidXRlcy5wb3NpdGlvbixhPXQuaW5kZXg7bGV0IHM9dC5ncm91cHM7MD09PXMubGVuZ3RoJiYocz1be3N0YXJ0OjAsY291bnQ6YS5jb3VudCxtYXRlcmlhbEluZGV4OjB9XSk7Zm9yKGxldCB0PTAsZT1zLmxlbmd0aDt0PGU7Kyt0KXtjb25zdCBlPXNbdF0scj1lLnN0YXJ0O2ZvcihsZXQgdD1yLG89citlLmNvdW50O3Q8bzt0Kz0zKWZvcihsZXQgZT0wO2U8MztlKyspe2NvbnN0IHI9YS5nZXRYKHQrZSksbz1hLmdldFgodCsoZSsxKSUzKTtuWzBdPU1hdGgubWluKHIsbyksblsxXT1NYXRoLm1heChyLG8pO2NvbnN0IHM9blswXSsiLCIrblsxXTt2b2lkIDA9PT1pW3NdJiYoaVtzXT17aW5kZXgxOm5bMF0saW5kZXgyOm5bMV19KX19Zm9yKGNvbnN0IHQgaW4gaSl7Y29uc3Qgbj1pW3RdO3IuZnJvbUJ1ZmZlckF0dHJpYnV0ZShvLG4uaW5kZXgxKSxlLnB1c2goci54LHIueSxyLnopLHIuZnJvbUJ1ZmZlckF0dHJpYnV0ZShvLG4uaW5kZXgyKSxlLnB1c2goci54LHIueSxyLnopfX1lbHNle2NvbnN0IG49dC5hdHRyaWJ1dGVzLnBvc2l0aW9uO2ZvcihsZXQgdD0wLGk9bi5jb3VudC8zO3Q8aTt0KyspZm9yKGxldCBpPTA7aTwzO2krKylyLmZyb21CdWZmZXJBdHRyaWJ1dGUobiwzKnQraSksZS5wdXNoKHIueCxyLnksci56KSxyLmZyb21CdWZmZXJBdHRyaWJ1dGUobiwzKnQrKGkrMSklMyksZS5wdXNoKHIueCxyLnksci56KX10aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBrenQoZSwzKSl9fXZhciB6VnQ9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsQm94R2VvbWV0cnk6c0R0LEJveEJ1ZmZlckdlb21ldHJ5OnNEdCxDaXJjbGVHZW9tZXRyeTpCRnQsQ2lyY2xlQnVmZmVyR2VvbWV0cnk6QkZ0LENvbmVHZW9tZXRyeTpGRnQsQ29uZUJ1ZmZlckdlb21ldHJ5OkZGdCxDeWxpbmRlckdlb21ldHJ5OkhGdCxDeWxpbmRlckJ1ZmZlckdlb21ldHJ5OkhGdCxEb2RlY2FoZWRyb25HZW9tZXRyeTpVRnQsRG9kZWNhaGVkcm9uQnVmZmVyR2VvbWV0cnk6VUZ0LEVkZ2VzR2VvbWV0cnk6WUZ0LEV4dHJ1ZGVHZW9tZXRyeTp4VnQsRXh0cnVkZUJ1ZmZlckdlb21ldHJ5OnhWdCxJY29zYWhlZHJvbkdlb21ldHJ5OlNWdCxJY29zYWhlZHJvbkJ1ZmZlckdlb21ldHJ5OlNWdCxMYXRoZUdlb21ldHJ5Ok1WdCxMYXRoZUJ1ZmZlckdlb21ldHJ5Ok1WdCxPY3RhaGVkcm9uR2VvbWV0cnk6RVZ0LE9jdGFoZWRyb25CdWZmZXJHZW9tZXRyeTpFVnQsUGFyYW1ldHJpY0dlb21ldHJ5OlRWdCxQYXJhbWV0cmljQnVmZmVyR2VvbWV0cnk6VFZ0LFBsYW5lR2VvbWV0cnk6TUR0LFBsYW5lQnVmZmVyR2VvbWV0cnk6TUR0LFBvbHloZWRyb25HZW9tZXRyeTpWRnQsUG9seWhlZHJvbkJ1ZmZlckdlb21ldHJ5OlZGdCxSaW5nR2VvbWV0cnk6Q1Z0LFJpbmdCdWZmZXJHZW9tZXRyeTpDVnQsU2hhcGVHZW9tZXRyeTpBVnQsU2hhcGVCdWZmZXJHZW9tZXRyeTpBVnQsU3BoZXJlR2VvbWV0cnk6a1Z0LFNwaGVyZUJ1ZmZlckdlb21ldHJ5OmtWdCxUZXRyYWhlZHJvbkdlb21ldHJ5OkxWdCxUZXRyYWhlZHJvbkJ1ZmZlckdlb21ldHJ5OkxWdCxUZXh0R2VvbWV0cnk6UFZ0LFRleHRCdWZmZXJHZW9tZXRyeTpQVnQsVG9ydXNHZW9tZXRyeTpOVnQsVG9ydXNCdWZmZXJHZW9tZXRyeTpOVnQsVG9ydXNLbm90R2VvbWV0cnk6SVZ0LFRvcnVzS25vdEJ1ZmZlckdlb21ldHJ5OklWdCxUdWJlR2VvbWV0cnk6T1Z0LFR1YmVCdWZmZXJHZW9tZXRyeTpPVnQsV2lyZWZyYW1lR2VvbWV0cnk6UlZ0fSk7ZnVuY3Rpb24gRFZ0KHQpe2d6dC5jYWxsKHRoaXMpLHRoaXMudHlwZT0iU2hhZG93TWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IHB6dCgwKSx0aGlzLnRyYW5zcGFyZW50PSEwLHRoaXMuc2V0VmFsdWVzKHQpfWZ1bmN0aW9uIEJWdCh0KXtoRHQuY2FsbCh0aGlzLHQpLHRoaXMudHlwZT0iUmF3U2hhZGVyTWF0ZXJpYWwifWZ1bmN0aW9uIEhWdCh0KXtnenQuY2FsbCh0aGlzKSx0aGlzLmRlZmluZXM9e1NUQU5EQVJEOiIifSx0aGlzLnR5cGU9Ik1lc2hTdGFuZGFyZE1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBwenQoMTY3NzcyMTUpLHRoaXMucm91Z2huZXNzPTEsdGhpcy5tZXRhbG5lc3M9MCx0aGlzLm1hcD1udWxsLHRoaXMubGlnaHRNYXA9bnVsbCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTEsdGhpcy5hb01hcD1udWxsLHRoaXMuYW9NYXBJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlPW5ldyBwenQoMCksdGhpcy5lbWlzc2l2ZUludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmVNYXA9bnVsbCx0aGlzLmJ1bXBNYXA9bnVsbCx0aGlzLmJ1bXBTY2FsZT0xLHRoaXMubm9ybWFsTWFwPW51bGwsdGhpcy5ub3JtYWxNYXBUeXBlPTAsdGhpcy5ub3JtYWxTY2FsZT1uZXcgek90KDEsMSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy5yb3VnaG5lc3NNYXA9bnVsbCx0aGlzLm1ldGFsbmVzc01hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmVudk1hcD1udWxsLHRoaXMuZW52TWFwSW50ZW5zaXR5PTEsdGhpcy5yZWZyYWN0aW9uUmF0aW89Ljk4LHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy53aXJlZnJhbWVMaW5lY2FwPSJyb3VuZCIsdGhpcy53aXJlZnJhbWVMaW5lam9pbj0icm91bmQiLHRoaXMuc2tpbm5pbmc9ITEsdGhpcy5tb3JwaFRhcmdldHM9ITEsdGhpcy5tb3JwaE5vcm1hbHM9ITEsdGhpcy52ZXJ0ZXhUYW5nZW50cz0hMSx0aGlzLnNldFZhbHVlcyh0KX1mdW5jdGlvbiBGVnQodCl7SFZ0LmNhbGwodGhpcyksdGhpcy5kZWZpbmVzPXtTVEFOREFSRDoiIixQSFlTSUNBTDoiIn0sdGhpcy50eXBlPSJNZXNoUGh5c2ljYWxNYXRlcmlhbCIsdGhpcy5jbGVhcmNvYXQ9MCx0aGlzLmNsZWFyY29hdE1hcD1udWxsLHRoaXMuY2xlYXJjb2F0Um91Z2huZXNzPTAsdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3NNYXA9bnVsbCx0aGlzLmNsZWFyY29hdE5vcm1hbFNjYWxlPW5ldyB6T3QoMSwxKSx0aGlzLmNsZWFyY29hdE5vcm1hbE1hcD1udWxsLHRoaXMucmVmbGVjdGl2aXR5PS41LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpb3IiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMSsuNCp0aGlzLnJlZmxlY3Rpdml0eSkvKDEtLjQqdGhpcy5yZWZsZWN0aXZpdHkpfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5yZWZsZWN0aXZpdHk9Uk90LmNsYW1wKDIuNSoodC0xKS8odCsxKSwwLDEpfX0pLHRoaXMuc2hlZW49bnVsbCx0aGlzLnRyYW5zbWlzc2lvbj0wLHRoaXMudHJhbnNtaXNzaW9uTWFwPW51bGwsdGhpcy5zZXRWYWx1ZXModCl9ZnVuY3Rpb24gVlZ0KHQpe2d6dC5jYWxsKHRoaXMpLHRoaXMudHlwZT0iTWVzaFBob25nTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IHB6dCgxNjc3NzIxNSksdGhpcy5zcGVjdWxhcj1uZXcgcHp0KDExMTg0ODEpLHRoaXMuc2hpbmluZXNzPTMwLHRoaXMubWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmU9bmV3IHB6dCgwKSx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZU1hcD1udWxsLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9MCx0aGlzLm5vcm1hbFNjYWxlPW5ldyB6T3QoMSwxKSx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLnNwZWN1bGFyTWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZW52TWFwPW51bGwsdGhpcy5jb21iaW5lPTAsdGhpcy5yZWZsZWN0aXZpdHk9MSx0aGlzLnJlZnJhY3Rpb25SYXRpbz0uOTgsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZUxpbmVjYXA9InJvdW5kIix0aGlzLndpcmVmcmFtZUxpbmVqb2luPSJyb3VuZCIsdGhpcy5za2lubmluZz0hMSx0aGlzLm1vcnBoVGFyZ2V0cz0hMSx0aGlzLm1vcnBoTm9ybWFscz0hMSx0aGlzLnNldFZhbHVlcyh0KX1mdW5jdGlvbiBVVnQodCl7Z3p0LmNhbGwodGhpcyksdGhpcy5kZWZpbmVzPXtUT09OOiIifSx0aGlzLnR5cGU9Ik1lc2hUb29uTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IHB6dCgxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmdyYWRpZW50TWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmU9bmV3IHB6dCgwKSx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZU1hcD1udWxsLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9MCx0aGlzLm5vcm1hbFNjYWxlPW5ldyB6T3QoMSwxKSx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZUxpbmVjYXA9InJvdW5kIix0aGlzLndpcmVmcmFtZUxpbmVqb2luPSJyb3VuZCIsdGhpcy5za2lubmluZz0hMSx0aGlzLm1vcnBoVGFyZ2V0cz0hMSx0aGlzLm1vcnBoTm9ybWFscz0hMSx0aGlzLnNldFZhbHVlcyh0KX1mdW5jdGlvbiBqVnQodCl7Z3p0LmNhbGwodGhpcyksdGhpcy50eXBlPSJNZXNoTm9ybWFsTWF0ZXJpYWwiLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9MCx0aGlzLm5vcm1hbFNjYWxlPW5ldyB6T3QoMSwxKSx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMuZm9nPSExLHRoaXMuc2tpbm5pbmc9ITEsdGhpcy5tb3JwaFRhcmdldHM9ITEsdGhpcy5tb3JwaE5vcm1hbHM9ITEsdGhpcy5zZXRWYWx1ZXModCl9ZnVuY3Rpb24gR1Z0KHQpe2d6dC5jYWxsKHRoaXMpLHRoaXMudHlwZT0iTWVzaExhbWJlcnRNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgcHp0KDE2Nzc3MjE1KSx0aGlzLm1hcD1udWxsLHRoaXMubGlnaHRNYXA9bnVsbCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTEsdGhpcy5hb01hcD1udWxsLHRoaXMuYW9NYXBJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlPW5ldyBwenQoMCksdGhpcy5lbWlzc2l2ZUludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmVNYXA9bnVsbCx0aGlzLnNwZWN1bGFyTWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZW52TWFwPW51bGwsdGhpcy5jb21iaW5lPTAsdGhpcy5yZWZsZWN0aXZpdHk9MSx0aGlzLnJlZnJhY3Rpb25SYXRpbz0uOTgsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZUxpbmVjYXA9InJvdW5kIix0aGlzLndpcmVmcmFtZUxpbmVqb2luPSJyb3VuZCIsdGhpcy5za2lubmluZz0hMSx0aGlzLm1vcnBoVGFyZ2V0cz0hMSx0aGlzLm1vcnBoTm9ybWFscz0hMSx0aGlzLnNldFZhbHVlcyh0KX1mdW5jdGlvbiBXVnQodCl7Z3p0LmNhbGwodGhpcyksdGhpcy5kZWZpbmVzPXtNQVRDQVA6IiJ9LHRoaXMudHlwZT0iTWVzaE1hdGNhcE1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBwenQoMTY3NzcyMTUpLHRoaXMubWF0Y2FwPW51bGwsdGhpcy5tYXA9bnVsbCx0aGlzLmJ1bXBNYXA9bnVsbCx0aGlzLmJ1bXBTY2FsZT0xLHRoaXMubm9ybWFsTWFwPW51bGwsdGhpcy5ub3JtYWxNYXBUeXBlPTAsdGhpcy5ub3JtYWxTY2FsZT1uZXcgek90KDEsMSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuc2tpbm5pbmc9ITEsdGhpcy5tb3JwaFRhcmdldHM9ITEsdGhpcy5tb3JwaE5vcm1hbHM9ITEsdGhpcy5zZXRWYWx1ZXModCl9ZnVuY3Rpb24gcVZ0KHQpe2dGdC5jYWxsKHRoaXMpLHRoaXMudHlwZT0iTGluZURhc2hlZE1hdGVyaWFsIix0aGlzLnNjYWxlPTEsdGhpcy5kYXNoU2l6ZT0zLHRoaXMuZ2FwU2l6ZT0xLHRoaXMuc2V0VmFsdWVzKHQpfShEVnQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZ3p0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPURWdCxEVnQucHJvdG90eXBlLmlzU2hhZG93TWF0ZXJpYWw9ITAsRFZ0LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHQpe3JldHVybiBnenQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzfSwoQlZ0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGhEdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1CVnQsQlZ0LnByb3RvdHlwZS5pc1Jhd1NoYWRlck1hdGVyaWFsPSEwLChIVnQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZ3p0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPUhWdCxIVnQucHJvdG90eXBlLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw9ITAsSFZ0LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHQpe3JldHVybiBnenQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMuZGVmaW5lcz17U1RBTkRBUkQ6IiJ9LHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLnJvdWdobmVzcz10LnJvdWdobmVzcyx0aGlzLm1ldGFsbmVzcz10Lm1ldGFsbmVzcyx0aGlzLm1hcD10Lm1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5lbWlzc2l2ZS5jb3B5KHQuZW1pc3NpdmUpLHRoaXMuZW1pc3NpdmVNYXA9dC5lbWlzc2l2ZU1hcCx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PXQuZW1pc3NpdmVJbnRlbnNpdHksdGhpcy5idW1wTWFwPXQuYnVtcE1hcCx0aGlzLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSx0aGlzLm5vcm1hbE1hcD10Lm5vcm1hbE1hcCx0aGlzLm5vcm1hbE1hcFR5cGU9dC5ub3JtYWxNYXBUeXBlLHRoaXMubm9ybWFsU2NhbGUuY29weSh0Lm5vcm1hbFNjYWxlKSx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLnJvdWdobmVzc01hcD10LnJvdWdobmVzc01hcCx0aGlzLm1ldGFsbmVzc01hcD10Lm1ldGFsbmVzc01hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5lbnZNYXA9dC5lbnZNYXAsdGhpcy5lbnZNYXBJbnRlbnNpdHk9dC5lbnZNYXBJbnRlbnNpdHksdGhpcy5yZWZyYWN0aW9uUmF0aW89dC5yZWZyYWN0aW9uUmF0aW8sdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpcy5za2lubmluZz10LnNraW5uaW5nLHRoaXMubW9ycGhUYXJnZXRzPXQubW9ycGhUYXJnZXRzLHRoaXMubW9ycGhOb3JtYWxzPXQubW9ycGhOb3JtYWxzLHRoaXMudmVydGV4VGFuZ2VudHM9dC52ZXJ0ZXhUYW5nZW50cyx0aGlzfSwoRlZ0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEhWdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1GVnQsRlZ0LnByb3RvdHlwZS5pc01lc2hQaHlzaWNhbE1hdGVyaWFsPSEwLEZWdC5wcm90b3R5cGUuY29weT1mdW5jdGlvbih0KXtyZXR1cm4gSFZ0LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLmRlZmluZXM9e1NUQU5EQVJEOiIiLFBIWVNJQ0FMOiIifSx0aGlzLmNsZWFyY29hdD10LmNsZWFyY29hdCx0aGlzLmNsZWFyY29hdE1hcD10LmNsZWFyY29hdE1hcCx0aGlzLmNsZWFyY29hdFJvdWdobmVzcz10LmNsZWFyY29hdFJvdWdobmVzcyx0aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcD10LmNsZWFyY29hdFJvdWdobmVzc01hcCx0aGlzLmNsZWFyY29hdE5vcm1hbE1hcD10LmNsZWFyY29hdE5vcm1hbE1hcCx0aGlzLmNsZWFyY29hdE5vcm1hbFNjYWxlLmNvcHkodC5jbGVhcmNvYXROb3JtYWxTY2FsZSksdGhpcy5yZWZsZWN0aXZpdHk9dC5yZWZsZWN0aXZpdHksdGhpcy5zaGVlbj10LnNoZWVuPyh0aGlzLnNoZWVufHxuZXcgcHp0KS5jb3B5KHQuc2hlZW4pOm51bGwsdGhpcy50cmFuc21pc3Npb249dC50cmFuc21pc3Npb24sdGhpcy50cmFuc21pc3Npb25NYXA9dC50cmFuc21pc3Npb25NYXAsdGhpc30sKFZWdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShnenQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9VlZ0LFZWdC5wcm90b3R5cGUuaXNNZXNoUGhvbmdNYXRlcmlhbD0hMCxWVnQucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24odCl7cmV0dXJuIGd6dC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMuc3BlY3VsYXIuY29weSh0LnNwZWN1bGFyKSx0aGlzLnNoaW5pbmVzcz10LnNoaW5pbmVzcyx0aGlzLm1hcD10Lm1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5lbWlzc2l2ZS5jb3B5KHQuZW1pc3NpdmUpLHRoaXMuZW1pc3NpdmVNYXA9dC5lbWlzc2l2ZU1hcCx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PXQuZW1pc3NpdmVJbnRlbnNpdHksdGhpcy5idW1wTWFwPXQuYnVtcE1hcCx0aGlzLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSx0aGlzLm5vcm1hbE1hcD10Lm5vcm1hbE1hcCx0aGlzLm5vcm1hbE1hcFR5cGU9dC5ub3JtYWxNYXBUeXBlLHRoaXMubm9ybWFsU2NhbGUuY29weSh0Lm5vcm1hbFNjYWxlKSx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLnNwZWN1bGFyTWFwPXQuc3BlY3VsYXJNYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZW52TWFwPXQuZW52TWFwLHRoaXMuY29tYmluZT10LmNvbWJpbmUsdGhpcy5yZWZsZWN0aXZpdHk9dC5yZWZsZWN0aXZpdHksdGhpcy5yZWZyYWN0aW9uUmF0aW89dC5yZWZyYWN0aW9uUmF0aW8sdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpcy5za2lubmluZz10LnNraW5uaW5nLHRoaXMubW9ycGhUYXJnZXRzPXQubW9ycGhUYXJnZXRzLHRoaXMubW9ycGhOb3JtYWxzPXQubW9ycGhOb3JtYWxzLHRoaXN9LChVVnQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZ3p0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPVVWdCxVVnQucHJvdG90eXBlLmlzTWVzaFRvb25NYXRlcmlhbD0hMCxVVnQucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24odCl7cmV0dXJuIGd6dC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubWFwPXQubWFwLHRoaXMuZ3JhZGllbnRNYXA9dC5ncmFkaWVudE1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5lbWlzc2l2ZS5jb3B5KHQuZW1pc3NpdmUpLHRoaXMuZW1pc3NpdmVNYXA9dC5lbWlzc2l2ZU1hcCx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PXQuZW1pc3NpdmVJbnRlbnNpdHksdGhpcy5idW1wTWFwPXQuYnVtcE1hcCx0aGlzLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSx0aGlzLm5vcm1hbE1hcD10Lm5vcm1hbE1hcCx0aGlzLm5vcm1hbE1hcFR5cGU9dC5ub3JtYWxNYXBUeXBlLHRoaXMubm9ybWFsU2NhbGUuY29weSh0Lm5vcm1hbFNjYWxlKSx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpcy5za2lubmluZz10LnNraW5uaW5nLHRoaXMubW9ycGhUYXJnZXRzPXQubW9ycGhUYXJnZXRzLHRoaXMubW9ycGhOb3JtYWxzPXQubW9ycGhOb3JtYWxzLHRoaXN9LChqVnQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZ3p0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWpWdCxqVnQucHJvdG90eXBlLmlzTWVzaE5vcm1hbE1hdGVyaWFsPSEwLGpWdC5wcm90b3R5cGUuY29weT1mdW5jdGlvbih0KXtyZXR1cm4gZ3p0LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMuc2tpbm5pbmc9dC5za2lubmluZyx0aGlzLm1vcnBoVGFyZ2V0cz10Lm1vcnBoVGFyZ2V0cyx0aGlzLm1vcnBoTm9ybWFscz10Lm1vcnBoTm9ybWFscyx0aGlzfSwoR1Z0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGd6dC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1HVnQsR1Z0LnByb3RvdHlwZS5pc01lc2hMYW1iZXJ0TWF0ZXJpYWw9ITAsR1Z0LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHQpe3JldHVybiBnenQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hcD10Lm1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5lbWlzc2l2ZS5jb3B5KHQuZW1pc3NpdmUpLHRoaXMuZW1pc3NpdmVNYXA9dC5lbWlzc2l2ZU1hcCx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PXQuZW1pc3NpdmVJbnRlbnNpdHksdGhpcy5zcGVjdWxhck1hcD10LnNwZWN1bGFyTWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmVudk1hcD10LmVudk1hcCx0aGlzLmNvbWJpbmU9dC5jb21iaW5lLHRoaXMucmVmbGVjdGl2aXR5PXQucmVmbGVjdGl2aXR5LHRoaXMucmVmcmFjdGlvblJhdGlvPXQucmVmcmFjdGlvblJhdGlvLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMud2lyZWZyYW1lTGluZWNhcD10LndpcmVmcmFtZUxpbmVjYXAsdGhpcy53aXJlZnJhbWVMaW5lam9pbj10LndpcmVmcmFtZUxpbmVqb2luLHRoaXMuc2tpbm5pbmc9dC5za2lubmluZyx0aGlzLm1vcnBoVGFyZ2V0cz10Lm1vcnBoVGFyZ2V0cyx0aGlzLm1vcnBoTm9ybWFscz10Lm1vcnBoTm9ybWFscyx0aGlzfSwoV1Z0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGd6dC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1XVnQsV1Z0LnByb3RvdHlwZS5pc01lc2hNYXRjYXBNYXRlcmlhbD0hMCxXVnQucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24odCl7cmV0dXJuIGd6dC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy5kZWZpbmVzPXtNQVRDQVA6IiJ9LHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hdGNhcD10Lm1hdGNhcCx0aGlzLm1hcD10Lm1hcCx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLnNraW5uaW5nPXQuc2tpbm5pbmcsdGhpcy5tb3JwaFRhcmdldHM9dC5tb3JwaFRhcmdldHMsdGhpcy5tb3JwaE5vcm1hbHM9dC5tb3JwaE5vcm1hbHMsdGhpc30sKHFWdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShnRnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9cVZ0LHFWdC5wcm90b3R5cGUuaXNMaW5lRGFzaGVkTWF0ZXJpYWw9ITAscVZ0LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHQpe3JldHVybiBnRnQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMuc2NhbGU9dC5zY2FsZSx0aGlzLmRhc2hTaXplPXQuZGFzaFNpemUsdGhpcy5nYXBTaXplPXQuZ2FwU2l6ZSx0aGlzfTt2YXIgWVZ0PU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLFNoYWRvd01hdGVyaWFsOkRWdCxTcHJpdGVNYXRlcmlhbDp6SHQsUmF3U2hhZGVyTWF0ZXJpYWw6QlZ0LFNoYWRlck1hdGVyaWFsOmhEdCxQb2ludHNNYXRlcmlhbDpDRnQsTWVzaFBoeXNpY2FsTWF0ZXJpYWw6RlZ0LE1lc2hTdGFuZGFyZE1hdGVyaWFsOkhWdCxNZXNoUGhvbmdNYXRlcmlhbDpWVnQsTWVzaFRvb25NYXRlcmlhbDpVVnQsTWVzaE5vcm1hbE1hdGVyaWFsOmpWdCxNZXNoTGFtYmVydE1hdGVyaWFsOkdWdCxNZXNoRGVwdGhNYXRlcmlhbDpfSHQsTWVzaERpc3RhbmNlTWF0ZXJpYWw6eUh0LE1lc2hCYXNpY01hdGVyaWFsOl96dCxNZXNoTWF0Y2FwTWF0ZXJpYWw6V1Z0LExpbmVEYXNoZWRNYXRlcmlhbDpxVnQsTGluZUJhc2ljTWF0ZXJpYWw6Z0Z0LE1hdGVyaWFsOmd6dH0pO2NvbnN0IFhWdD17YXJyYXlTbGljZTpmdW5jdGlvbih0LGUsbil7cmV0dXJuIFhWdC5pc1R5cGVkQXJyYXkodCk/bmV3IHQuY29uc3RydWN0b3IodC5zdWJhcnJheShlLHZvaWQgMCE9PW4/bjp0Lmxlbmd0aCkpOnQuc2xpY2UoZSxuKX0sY29udmVydEFycmF5OmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4hdHx8IW4mJnQuY29uc3RydWN0b3I9PT1lP3Q6Im51bWJlciI9PXR5cGVvZiBlLkJZVEVTX1BFUl9FTEVNRU5UP25ldyBlKHQpOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpfSxpc1R5cGVkQXJyYXk6ZnVuY3Rpb24odCl7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyh0KSYmISh0IGluc3RhbmNlb2YgRGF0YVZpZXcpfSxnZXRLZXlmcmFtZU9yZGVyOmZ1bmN0aW9uKHQpe2NvbnN0IGU9dC5sZW5ndGgsbj1uZXcgQXJyYXkoZSk7Zm9yKGxldCB0PTA7dCE9PWU7Kyt0KW5bdF09dDtyZXR1cm4gbi5zb3J0KChmdW5jdGlvbiBpKGUsbil7cmV0dXJuIHRbZV0tdFtuXX0pKSxufSxzb3J0ZWRBcnJheTpmdW5jdGlvbih0LGUsbil7Y29uc3QgaT10Lmxlbmd0aCxyPW5ldyB0LmNvbnN0cnVjdG9yKGkpO2ZvcihsZXQgbz0wLGE9MDthIT09aTsrK28pe2NvbnN0IGk9bltvXSplO2ZvcihsZXQgbj0wO24hPT1lOysrbilyW2ErK109dFtpK25dfXJldHVybiByfSxmbGF0dGVuSlNPTjpmdW5jdGlvbih0LGUsbixpKXtsZXQgcj0xLG89dFswXTtmb3IoO3ZvaWQgMCE9PW8mJnZvaWQgMD09PW9baV07KW89dFtyKytdO2lmKHZvaWQgMD09PW8pcmV0dXJuO2xldCBhPW9baV07aWYodm9pZCAwIT09YSlpZihBcnJheS5pc0FycmF5KGEpKWRve2E9b1tpXSx2b2lkIDAhPT1hJiYoZS5wdXNoKG8udGltZSksbi5wdXNoLmFwcGx5KG4sYSkpLG89dFtyKytdfXdoaWxlKHZvaWQgMCE9PW8pO2Vsc2UgaWYodm9pZCAwIT09YS50b0FycmF5KWRve2E9b1tpXSx2b2lkIDAhPT1hJiYoZS5wdXNoKG8udGltZSksYS50b0FycmF5KG4sbi5sZW5ndGgpKSxvPXRbcisrXX13aGlsZSh2b2lkIDAhPT1vKTtlbHNlIGRve2E9b1tpXSx2b2lkIDAhPT1hJiYoZS5wdXNoKG8udGltZSksbi5wdXNoKGEpKSxvPXRbcisrXX13aGlsZSh2b2lkIDAhPT1vKX0sc3ViY2xpcDpmdW5jdGlvbih0LGUsbixpLHI9MzApe2NvbnN0IG89dC5jbG9uZSgpO28ubmFtZT1lO2NvbnN0IGE9W107Zm9yKGxldCB0PTA7dDxvLnRyYWNrcy5sZW5ndGg7Kyt0KXtjb25zdCBlPW8udHJhY2tzW3RdLHM9ZS5nZXRWYWx1ZVNpemUoKSxsPVtdLGM9W107Zm9yKGxldCB0PTA7dDxlLnRpbWVzLmxlbmd0aDsrK3Qpe2NvbnN0IG89ZS50aW1lc1t0XSpyO2lmKCEobzxufHxvPj1pKSl7bC5wdXNoKGUudGltZXNbdF0pO2ZvcihsZXQgbj0wO248czsrK24pYy5wdXNoKGUudmFsdWVzW3QqcytuXSl9fTAhPT1sLmxlbmd0aCYmKGUudGltZXM9WFZ0LmNvbnZlcnRBcnJheShsLGUudGltZXMuY29uc3RydWN0b3IpLGUudmFsdWVzPVhWdC5jb252ZXJ0QXJyYXkoYyxlLnZhbHVlcy5jb25zdHJ1Y3RvciksYS5wdXNoKGUpKX1vLnRyYWNrcz1hO2xldCBzPTEvMDtmb3IobGV0IHQ9MDt0PG8udHJhY2tzLmxlbmd0aDsrK3Qpcz5vLnRyYWNrc1t0XS50aW1lc1swXSYmKHM9by50cmFja3NbdF0udGltZXNbMF0pO2ZvcihsZXQgdD0wO3Q8by50cmFja3MubGVuZ3RoOysrdClvLnRyYWNrc1t0XS5zaGlmdCgtMSpzKTtyZXR1cm4gby5yZXNldER1cmF0aW9uKCksb30sbWFrZUNsaXBBZGRpdGl2ZTpmdW5jdGlvbih0LGU9MCxuPXQsaT0zMCl7aTw9MCYmKGk9MzApO2NvbnN0IHI9bi50cmFja3MubGVuZ3RoLG89ZS9pO2ZvcihsZXQgZT0wO2U8cjsrK2Upe2NvbnN0IGk9bi50cmFja3NbZV0scj1pLlZhbHVlVHlwZU5hbWU7aWYoImJvb2wiPT09cnx8InN0cmluZyI9PT1yKWNvbnRpbnVlO2NvbnN0IGE9dC50cmFja3MuZmluZCgoZnVuY3Rpb24odCl7cmV0dXJuIHQubmFtZT09PWkubmFtZSYmdC5WYWx1ZVR5cGVOYW1lPT09cn0pKTtpZih2b2lkIDA9PT1hKWNvbnRpbnVlO2xldCBzPTA7Y29uc3QgbD1pLmdldFZhbHVlU2l6ZSgpO2kuY3JlYXRlSW50ZXJwb2xhbnQuaXNJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RHTFRGQ3ViaWNTcGxpbmUmJihzPWwvMyk7bGV0IGM9MDtjb25zdCB1PWEuZ2V0VmFsdWVTaXplKCk7YS5jcmVhdGVJbnRlcnBvbGFudC5pc0ludGVycG9sYW50RmFjdG9yeU1ldGhvZEdMVEZDdWJpY1NwbGluZSYmKGM9dS8zKTtjb25zdCBoPWkudGltZXMubGVuZ3RoLTE7bGV0IGQ7aWYobzw9aS50aW1lc1swXSlkPVhWdC5hcnJheVNsaWNlKGkudmFsdWVzLHMsbC1zKTtlbHNlIGlmKG8+PWkudGltZXNbaF0pe2NvbnN0IHQ9aCpsK3M7ZD1YVnQuYXJyYXlTbGljZShpLnZhbHVlcyx0LHQrbC1zKX1lbHNle2NvbnN0IHQ9aS5jcmVhdGVJbnRlcnBvbGFudCgpLGU9cyxuPWwtczt0LmV2YWx1YXRlKG8pLGQ9WFZ0LmFycmF5U2xpY2UodC5yZXN1bHRCdWZmZXIsZSxuKX0icXVhdGVybmlvbiI9PT1yJiYobmV3IFdPdCkuZnJvbUFycmF5KGQpLm5vcm1hbGl6ZSgpLmNvbmp1Z2F0ZSgpLnRvQXJyYXkoZCk7Y29uc3QgcD1hLnRpbWVzLmxlbmd0aDtmb3IobGV0IHQ9MDt0PHA7Kyt0KXtjb25zdCBlPXQqdStjO2lmKCJxdWF0ZXJuaW9uIj09PXIpV090Lm11bHRpcGx5UXVhdGVybmlvbnNGbGF0KGEudmFsdWVzLGUsZCwwLGEudmFsdWVzLGUpO2Vsc2V7Y29uc3QgdD11LTIqYztmb3IobGV0IG49MDtuPHQ7KytuKWEudmFsdWVzW2Urbl0tPWRbbl19fX1yZXR1cm4gdC5ibGVuZE1vZGU9Yk90LHR9fTtmdW5jdGlvbiAkVnQodCxlLG4saSl7dGhpcy5wYXJhbWV0ZXJQb3NpdGlvbnM9dCx0aGlzLl9jYWNoZWRJbmRleD0wLHRoaXMucmVzdWx0QnVmZmVyPXZvaWQgMCE9PWk/aTpuZXcgZS5jb25zdHJ1Y3RvcihuKSx0aGlzLnNhbXBsZVZhbHVlcz1lLHRoaXMudmFsdWVTaXplPW59ZnVuY3Rpb24gS1Z0KHQsZSxuLGkpeyRWdC5jYWxsKHRoaXMsdCxlLG4saSksdGhpcy5fd2VpZ2h0UHJldj0tMCx0aGlzLl9vZmZzZXRQcmV2PS0wLHRoaXMuX3dlaWdodE5leHQ9LTAsdGhpcy5fb2Zmc2V0TmV4dD0tMH1mdW5jdGlvbiBaVnQodCxlLG4saSl7JFZ0LmNhbGwodGhpcyx0LGUsbixpKX1mdW5jdGlvbiBKVnQodCxlLG4saSl7JFZ0LmNhbGwodGhpcyx0LGUsbixpKX1mdW5jdGlvbiBRVnQodCxlLG4saSl7aWYodm9pZCAwPT09dCl0aHJvdyBuZXcgRXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IHRyYWNrIG5hbWUgaXMgdW5kZWZpbmVkIik7aWYodm9pZCAwPT09ZXx8MD09PWUubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogbm8ga2V5ZnJhbWVzIGluIHRyYWNrIG5hbWVkICIrdCk7dGhpcy5uYW1lPXQsdGhpcy50aW1lcz1YVnQuY29udmVydEFycmF5KGUsdGhpcy5UaW1lQnVmZmVyVHlwZSksdGhpcy52YWx1ZXM9WFZ0LmNvbnZlcnRBcnJheShuLHRoaXMuVmFsdWVCdWZmZXJUeXBlKSx0aGlzLnNldEludGVycG9sYXRpb24oaXx8dGhpcy5EZWZhdWx0SW50ZXJwb2xhdGlvbil9ZnVuY3Rpb24gdFV0KHQsZSxuKXtRVnQuY2FsbCh0aGlzLHQsZSxuKX1mdW5jdGlvbiBlVXQodCxlLG4saSl7UVZ0LmNhbGwodGhpcyx0LGUsbixpKX1mdW5jdGlvbiBuVXQodCxlLG4saSl7UVZ0LmNhbGwodGhpcyx0LGUsbixpKX1mdW5jdGlvbiBpVXQodCxlLG4saSl7JFZ0LmNhbGwodGhpcyx0LGUsbixpKX1mdW5jdGlvbiByVXQodCxlLG4saSl7UVZ0LmNhbGwodGhpcyx0LGUsbixpKX1mdW5jdGlvbiBvVXQodCxlLG4saSl7UVZ0LmNhbGwodGhpcyx0LGUsbixpKX1mdW5jdGlvbiBhVXQodCxlLG4saSl7UVZ0LmNhbGwodGhpcyx0LGUsbixpKX1mdW5jdGlvbiBzVXQodCxlPS0xLG4saT0yNTAwKXt0aGlzLm5hbWU9dCx0aGlzLnRyYWNrcz1uLHRoaXMuZHVyYXRpb249ZSx0aGlzLmJsZW5kTW9kZT1pLHRoaXMudXVpZD1ST3QuZ2VuZXJhdGVVVUlEKCksdGhpcy5kdXJhdGlvbjwwJiZ0aGlzLnJlc2V0RHVyYXRpb24oKX1mdW5jdGlvbiBsVXQodCl7aWYodm9pZCAwPT09dC50eXBlKXRocm93IG5ldyBFcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogdHJhY2sgdHlwZSB1bmRlZmluZWQsIGNhbiBub3QgcGFyc2UiKTtjb25zdCBlPShmdW5jdGlvbiBuKHQpe3N3aXRjaCh0LnRvTG93ZXJDYXNlKCkpe2Nhc2Uic2NhbGFyIjpjYXNlImRvdWJsZSI6Y2FzZSJmbG9hdCI6Y2FzZSJudW1iZXIiOmNhc2UiaW50ZWdlciI6cmV0dXJuIG5VdDtjYXNlInZlY3RvciI6Y2FzZSJ2ZWN0b3IyIjpjYXNlInZlY3RvcjMiOmNhc2UidmVjdG9yNCI6cmV0dXJuIGFVdDtjYXNlImNvbG9yIjpyZXR1cm4gZVV0O2Nhc2UicXVhdGVybmlvbiI6cmV0dXJuIHJVdDtjYXNlImJvb2wiOmNhc2UiYm9vbGVhbiI6cmV0dXJuIHRVdDtjYXNlInN0cmluZyI6cmV0dXJuIG9VdH10aHJvdyBuZXcgRXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IFVuc3VwcG9ydGVkIHR5cGVOYW1lOiAiK3QpfSkodC50eXBlKTtpZih2b2lkIDA9PT10LnRpbWVzKXtjb25zdCBlPVtdLG49W107WFZ0LmZsYXR0ZW5KU09OKHQua2V5cyxlLG4sInZhbHVlIiksdC50aW1lcz1lLHQudmFsdWVzPW59cmV0dXJuIHZvaWQgMCE9PWUucGFyc2U/ZS5wYXJzZSh0KTpuZXcgZSh0Lm5hbWUsdC50aW1lcyx0LnZhbHVlcyx0LmludGVycG9sYXRpb24pfU9iamVjdC5hc3NpZ24oJFZ0LnByb3RvdHlwZSx7ZXZhbHVhdGU6ZnVuY3Rpb24odCl7Y29uc3QgZT10aGlzLnBhcmFtZXRlclBvc2l0aW9ucztsZXQgbj10aGlzLl9jYWNoZWRJbmRleCxpPWVbbl0scj1lW24tMV07dDp7ZTp7bGV0IG87bjp7aTppZighKHQ8aSkpe2ZvcihsZXQgbz1uKzI7Oyl7aWYodm9pZCAwPT09aSl7aWYodDxyKWJyZWFrIGk7cmV0dXJuIG49ZS5sZW5ndGgsdGhpcy5fY2FjaGVkSW5kZXg9bix0aGlzLmFmdGVyRW5kXyhuLTEsdCxyKX1pZihuPT09bylicmVhaztpZihyPWksaT1lWysrbl0sdDxpKWJyZWFrIGV9bz1lLmxlbmd0aDticmVhayBufWlmKHQ+PXIpYnJlYWsgdDt7Y29uc3QgYT1lWzFdO3Q8YSYmKG49MixyPWEpO2ZvcihsZXQgbz1uLTI7Oyl7aWYodm9pZCAwPT09cilyZXR1cm4gdGhpcy5fY2FjaGVkSW5kZXg9MCx0aGlzLmJlZm9yZVN0YXJ0XygwLHQsaSk7aWYobj09PW8pYnJlYWs7aWYoaT1yLHI9ZVstLW4tMV0sdD49cilicmVhayBlfW89bixuPTB9fWZvcig7bjxvOyl7Y29uc3QgaT1uK28+Pj4xO3Q8ZVtpXT9vPWk6bj1pKzF9aWYoaT1lW25dLHI9ZVtuLTFdLHZvaWQgMD09PXIpcmV0dXJuIHRoaXMuX2NhY2hlZEluZGV4PTAsdGhpcy5iZWZvcmVTdGFydF8oMCx0LGkpO2lmKHZvaWQgMD09PWkpcmV0dXJuIG49ZS5sZW5ndGgsdGhpcy5fY2FjaGVkSW5kZXg9bix0aGlzLmFmdGVyRW5kXyhuLTEscix0KX10aGlzLl9jYWNoZWRJbmRleD1uLHRoaXMuaW50ZXJ2YWxDaGFuZ2VkXyhuLHIsaSl9cmV0dXJuIHRoaXMuaW50ZXJwb2xhdGVfKG4scix0LGkpfSxzZXR0aW5nczpudWxsLERlZmF1bHRTZXR0aW5nc186e30sZ2V0U2V0dGluZ3NfOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0dGluZ3N8fHRoaXMuRGVmYXVsdFNldHRpbmdzX30sY29weVNhbXBsZVZhbHVlXzpmdW5jdGlvbih0KXtjb25zdCBlPXRoaXMucmVzdWx0QnVmZmVyLG49dGhpcy5zYW1wbGVWYWx1ZXMsaT10aGlzLnZhbHVlU2l6ZSxyPXQqaTtmb3IobGV0IHQ9MDt0IT09aTsrK3QpZVt0XT1uW3IrdF07cmV0dXJuIGV9LGludGVycG9sYXRlXzpmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiY2FsbCB0byBhYnN0cmFjdCBtZXRob2QiKX0saW50ZXJ2YWxDaGFuZ2VkXzpmdW5jdGlvbigpe319KSxPYmplY3QuYXNzaWduKCRWdC5wcm90b3R5cGUse2JlZm9yZVN0YXJ0XzokVnQucHJvdG90eXBlLmNvcHlTYW1wbGVWYWx1ZV8sYWZ0ZXJFbmRfOiRWdC5wcm90b3R5cGUuY29weVNhbXBsZVZhbHVlX30pLEtWdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKCRWdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpLVnQsRGVmYXVsdFNldHRpbmdzXzp7ZW5kaW5nU3RhcnQ6Z090LGVuZGluZ0VuZDpnT3R9LGludGVydmFsQ2hhbmdlZF86ZnVuY3Rpb24odCxlLG4pe2NvbnN0IGk9dGhpcy5wYXJhbWV0ZXJQb3NpdGlvbnM7bGV0IHI9dC0yLG89dCsxLGE9aVtyXSxzPWlbb107aWYodm9pZCAwPT09YSlzd2l0Y2godGhpcy5nZXRTZXR0aW5nc18oKS5lbmRpbmdTdGFydCl7Y2FzZSBfT3Q6cj10LGE9MiplLW47YnJlYWs7Y2FzZSB5T3Q6cj1pLmxlbmd0aC0yLGE9ZStpW3JdLWlbcisxXTticmVhaztkZWZhdWx0OnI9dCxhPW59aWYodm9pZCAwPT09cylzd2l0Y2godGhpcy5nZXRTZXR0aW5nc18oKS5lbmRpbmdFbmQpe2Nhc2UgX090Om89dCxzPTIqbi1lO2JyZWFrO2Nhc2UgeU90Om89MSxzPW4raVsxXS1pWzBdO2JyZWFrO2RlZmF1bHQ6bz10LTEscz1lfWNvbnN0IGw9LjUqKG4tZSksYz10aGlzLnZhbHVlU2l6ZTt0aGlzLl93ZWlnaHRQcmV2PWwvKGUtYSksdGhpcy5fd2VpZ2h0TmV4dD1sLyhzLW4pLHRoaXMuX29mZnNldFByZXY9cipjLHRoaXMuX29mZnNldE5leHQ9bypjfSxpbnRlcnBvbGF0ZV86ZnVuY3Rpb24odCxlLG4saSl7Y29uc3Qgcj10aGlzLnJlc3VsdEJ1ZmZlcixvPXRoaXMuc2FtcGxlVmFsdWVzLGE9dGhpcy52YWx1ZVNpemUscz10KmEsbD1zLWEsYz10aGlzLl9vZmZzZXRQcmV2LHU9dGhpcy5fb2Zmc2V0TmV4dCxoPXRoaXMuX3dlaWdodFByZXYsZD10aGlzLl93ZWlnaHROZXh0LHA9KG4tZSkvKGktZSksZj1wKnAsbT1mKnAsZz0taCptKzIqaCpmLWgqcCxfPSgxK2gpKm0rKC0xLjUtMipoKSpmKygtLjUraCkqcCsxLHk9KC0xLWQpKm0rKDEuNStkKSpmKy41KnAsdj1kKm0tZCpmO2ZvcihsZXQgdD0wO3QhPT1hOysrdClyW3RdPWcqb1tjK3RdK18qb1tsK3RdK3kqb1tzK3RdK3Yqb1t1K3RdO3JldHVybiByfX0pLFpWdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKCRWdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpaVnQsaW50ZXJwb2xhdGVfOmZ1bmN0aW9uKHQsZSxuLGkpe2NvbnN0IHI9dGhpcy5yZXN1bHRCdWZmZXIsbz10aGlzLnNhbXBsZVZhbHVlcyxhPXRoaXMudmFsdWVTaXplLHM9dCphLGw9cy1hLGM9KG4tZSkvKGktZSksdT0xLWM7Zm9yKGxldCB0PTA7dCE9PWE7Kyt0KXJbdF09b1tsK3RdKnUrb1tzK3RdKmM7cmV0dXJuIHJ9fSksSlZ0LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoJFZ0LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOkpWdCxpbnRlcnBvbGF0ZV86ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY29weVNhbXBsZVZhbHVlXyh0LTEpfX0pLE9iamVjdC5hc3NpZ24oUVZ0LHt0b0pTT046ZnVuY3Rpb24odCl7Y29uc3QgZT10LmNvbnN0cnVjdG9yO2xldCBuO2lmKHZvaWQgMCE9PWUudG9KU09OKW49ZS50b0pTT04odCk7ZWxzZXtuPXtuYW1lOnQubmFtZSx0aW1lczpYVnQuY29udmVydEFycmF5KHQudGltZXMsQXJyYXkpLHZhbHVlczpYVnQuY29udmVydEFycmF5KHQudmFsdWVzLEFycmF5KX07Y29uc3QgZT10LmdldEludGVycG9sYXRpb24oKTtlIT09dC5EZWZhdWx0SW50ZXJwb2xhdGlvbiYmKG4uaW50ZXJwb2xhdGlvbj1lKX1yZXR1cm4gbi50eXBlPXQuVmFsdWVUeXBlTmFtZSxufX0pLE9iamVjdC5hc3NpZ24oUVZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6UVZ0LFRpbWVCdWZmZXJUeXBlOkZsb2F0MzJBcnJheSxWYWx1ZUJ1ZmZlclR5cGU6RmxvYXQzMkFycmF5LERlZmF1bHRJbnRlcnBvbGF0aW9uOmZPdCxJbnRlcnBvbGFudEZhY3RvcnlNZXRob2REaXNjcmV0ZTpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IEpWdCh0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksdCl9LEludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IFpWdCh0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksdCl9LEludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aDpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IEtWdCh0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksdCl9LHNldEludGVycG9sYXRpb246ZnVuY3Rpb24odCl7bGV0IGU7c3dpdGNoKHQpe2Nhc2UgcE90OmU9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2REaXNjcmV0ZTticmVhaztjYXNlIGZPdDplPXRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyO2JyZWFrO2Nhc2UgbU90OmU9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGh9aWYodm9pZCAwPT09ZSl7Y29uc3QgZT0idW5zdXBwb3J0ZWQgaW50ZXJwb2xhdGlvbiBmb3IgIit0aGlzLlZhbHVlVHlwZU5hbWUrIiBrZXlmcmFtZSB0cmFjayBuYW1lZCAiK3RoaXMubmFtZTtpZih2b2lkIDA9PT10aGlzLmNyZWF0ZUludGVycG9sYW50KXtpZih0PT09dGhpcy5EZWZhdWx0SW50ZXJwb2xhdGlvbil0aHJvdyBuZXcgRXJyb3IoZSk7dGhpcy5zZXRJbnRlcnBvbGF0aW9uKHRoaXMuRGVmYXVsdEludGVycG9sYXRpb24pfXJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLktleWZyYW1lVHJhY2s6IixlKSx0aGlzfXJldHVybiB0aGlzLmNyZWF0ZUludGVycG9sYW50PWUsdGhpc30sZ2V0SW50ZXJwb2xhdGlvbjpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmNyZWF0ZUludGVycG9sYW50KXtjYXNlIHRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kRGlzY3JldGU6cmV0dXJuIHBPdDtjYXNlIHRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyOnJldHVybiBmT3Q7Y2FzZSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aDpyZXR1cm4gbU90fX0sZ2V0VmFsdWVTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmFsdWVzLmxlbmd0aC90aGlzLnRpbWVzLmxlbmd0aH0sc2hpZnQ6ZnVuY3Rpb24odCl7aWYoMCE9PXQpe2NvbnN0IGU9dGhpcy50aW1lcztmb3IobGV0IG49MCxpPWUubGVuZ3RoO24hPT1pOysrbillW25dKz10fXJldHVybiB0aGlzfSxzY2FsZTpmdW5jdGlvbih0KXtpZigxIT09dCl7Y29uc3QgZT10aGlzLnRpbWVzO2ZvcihsZXQgbj0wLGk9ZS5sZW5ndGg7biE9PWk7KytuKWVbbl0qPXR9cmV0dXJuIHRoaXN9LHRyaW06ZnVuY3Rpb24odCxlKXtjb25zdCBuPXRoaXMudGltZXMsaT1uLmxlbmd0aDtsZXQgcj0wLG89aS0xO2Zvcig7ciE9PWkmJm5bcl08dDspKytyO2Zvcig7LTEhPT1vJiZuW29dPmU7KS0tbztpZigrK28sMCE9PXJ8fG8hPT1pKXtyPj1vJiYobz1NYXRoLm1heChvLDEpLHI9by0xKTtjb25zdCB0PXRoaXMuZ2V0VmFsdWVTaXplKCk7dGhpcy50aW1lcz1YVnQuYXJyYXlTbGljZShuLHIsbyksdGhpcy52YWx1ZXM9WFZ0LmFycmF5U2xpY2UodGhpcy52YWx1ZXMscip0LG8qdCl9cmV0dXJuIHRoaXN9LHZhbGlkYXRlOmZ1bmN0aW9uKCl7bGV0IHQ9ITA7Y29uc3QgZT10aGlzLmdldFZhbHVlU2l6ZSgpO2UtTWF0aC5mbG9vcihlKSE9MCYmKGNvbnNvbGUuZXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IEludmFsaWQgdmFsdWUgc2l6ZSBpbiB0cmFjay4iLHRoaXMpLHQ9ITEpO2NvbnN0IG49dGhpcy50aW1lcyxpPXRoaXMudmFsdWVzLHI9bi5sZW5ndGg7MD09PXImJihjb25zb2xlLmVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBUcmFjayBpcyBlbXB0eS4iLHRoaXMpLHQ9ITEpO2xldCBvPW51bGw7Zm9yKGxldCBlPTA7ZSE9PXI7ZSsrKXtjb25zdCBpPW5bZV07aWYoIm51bWJlciI9PXR5cGVvZiBpJiZpc05hTihpKSl7Y29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogVGltZSBpcyBub3QgYSB2YWxpZCBudW1iZXIuIix0aGlzLGUsaSksdD0hMTticmVha31pZihudWxsIT09byYmbz5pKXtjb25zb2xlLmVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBPdXQgb2Ygb3JkZXIga2V5cy4iLHRoaXMsZSxpLG8pLHQ9ITE7YnJlYWt9bz1pfWlmKHZvaWQgMCE9PWkmJlhWdC5pc1R5cGVkQXJyYXkoaSkpZm9yKGxldCBlPTAsbj1pLmxlbmd0aDtlIT09bjsrK2Upe2NvbnN0IG49aVtlXTtpZihpc05hTihuKSl7Y29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogVmFsdWUgaXMgbm90IGEgdmFsaWQgbnVtYmVyLiIsdGhpcyxlLG4pLHQ9ITE7YnJlYWt9fXJldHVybiB0fSxvcHRpbWl6ZTpmdW5jdGlvbigpe2NvbnN0IHQ9WFZ0LmFycmF5U2xpY2UodGhpcy50aW1lcyksZT1YVnQuYXJyYXlTbGljZSh0aGlzLnZhbHVlcyksbj10aGlzLmdldFZhbHVlU2l6ZSgpLGk9dGhpcy5nZXRJbnRlcnBvbGF0aW9uKCk9PT1tT3Qscj10Lmxlbmd0aC0xO2xldCBvPTE7Zm9yKGxldCBhPTE7YTxyOysrYSl7bGV0IHI9ITE7Y29uc3Qgcz10W2FdO2lmKHMhPT10W2ErMV0mJigxIT09YXx8cyE9PXRbMF0pKWlmKGkpcj0hMDtlbHNle2NvbnN0IHQ9YSpuLGk9dC1uLG89dCtuO2ZvcihsZXQgYT0wO2EhPT1uOysrYSl7Y29uc3Qgbj1lW3QrYV07aWYobiE9PWVbaSthXXx8biE9PWVbbythXSl7cj0hMDticmVha319fWlmKHIpe2lmKGEhPT1vKXt0W29dPXRbYV07Y29uc3QgaT1hKm4scj1vKm47Zm9yKGxldCB0PTA7dCE9PW47Kyt0KWVbcit0XT1lW2krdF19KytvfX1pZihyPjApe3Rbb109dFtyXTtmb3IobGV0IHQ9cipuLGk9bypuLGE9MDthIT09bjsrK2EpZVtpK2FdPWVbdCthXTsrK299cmV0dXJuIG8hPT10Lmxlbmd0aD8odGhpcy50aW1lcz1YVnQuYXJyYXlTbGljZSh0LDAsbyksdGhpcy52YWx1ZXM9WFZ0LmFycmF5U2xpY2UoZSwwLG8qbikpOih0aGlzLnRpbWVzPXQsdGhpcy52YWx1ZXM9ZSksdGhpc30sY2xvbmU6ZnVuY3Rpb24oKXtjb25zdCB0PVhWdC5hcnJheVNsaWNlKHRoaXMudGltZXMsMCksZT1YVnQuYXJyYXlTbGljZSh0aGlzLnZhbHVlcywwKSxuPW5ldygwLHRoaXMuY29uc3RydWN0b3IpKHRoaXMubmFtZSx0LGUpO3JldHVybiBuLmNyZWF0ZUludGVycG9sYW50PXRoaXMuY3JlYXRlSW50ZXJwb2xhbnQsbn19KSx0VXQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShRVnQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6dFV0LFZhbHVlVHlwZU5hbWU6ImJvb2wiLFZhbHVlQnVmZmVyVHlwZTpBcnJheSxEZWZhdWx0SW50ZXJwb2xhdGlvbjpwT3QsSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyOnZvaWQgMCxJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGg6dm9pZCAwfSksZVV0LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoUVZ0LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOmVVdCxWYWx1ZVR5cGVOYW1lOiJjb2xvciJ9KSxuVXQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShRVnQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6blV0LFZhbHVlVHlwZU5hbWU6Im51bWJlciJ9KSxpVXQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZSgkVnQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6aVV0LGludGVycG9sYXRlXzpmdW5jdGlvbih0LGUsbixpKXtjb25zdCByPXRoaXMucmVzdWx0QnVmZmVyLG89dGhpcy5zYW1wbGVWYWx1ZXMsYT10aGlzLnZhbHVlU2l6ZSxzPShuLWUpLyhpLWUpO2xldCBsPXQqYTtmb3IobGV0IHQ9bCthO2whPT10O2wrPTQpV090LnNsZXJwRmxhdChyLDAsbyxsLWEsbyxsLHMpO3JldHVybiByfX0pLHJVdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKFFWdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpyVXQsVmFsdWVUeXBlTmFtZToicXVhdGVybmlvbiIsRGVmYXVsdEludGVycG9sYXRpb246Zk90LEludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGlVdCh0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksdCl9LEludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aDp2b2lkIDB9KSxvVXQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShRVnQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6b1V0LFZhbHVlVHlwZU5hbWU6InN0cmluZyIsVmFsdWVCdWZmZXJUeXBlOkFycmF5LERlZmF1bHRJbnRlcnBvbGF0aW9uOnBPdCxJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI6dm9pZCAwLEludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aDp2b2lkIDB9KSxhVXQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShRVnQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6YVV0LFZhbHVlVHlwZU5hbWU6InZlY3RvciJ9KSxPYmplY3QuYXNzaWduKHNVdCx7cGFyc2U6ZnVuY3Rpb24odCl7Y29uc3QgZT1bXSxuPXQudHJhY2tzLGk9MS8odC5mcHN8fDEpO2ZvcihsZXQgdD0wLHI9bi5sZW5ndGg7dCE9PXI7Kyt0KWUucHVzaChsVXQoblt0XSkuc2NhbGUoaSkpO2NvbnN0IHI9bmV3IHNVdCh0Lm5hbWUsdC5kdXJhdGlvbixlLHQuYmxlbmRNb2RlKTtyZXR1cm4gci51dWlkPXQudXVpZCxyfSx0b0pTT046ZnVuY3Rpb24odCl7Y29uc3QgZT1bXSxuPXQudHJhY2tzLGk9e25hbWU6dC5uYW1lLGR1cmF0aW9uOnQuZHVyYXRpb24sdHJhY2tzOmUsdXVpZDp0LnV1aWQsYmxlbmRNb2RlOnQuYmxlbmRNb2RlfTtmb3IobGV0IHQ9MCxpPW4ubGVuZ3RoO3QhPT1pOysrdCllLnB1c2goUVZ0LnRvSlNPTihuW3RdKSk7cmV0dXJuIGl9LENyZWF0ZUZyb21Nb3JwaFRhcmdldFNlcXVlbmNlOmZ1bmN0aW9uKHQsZSxuLGkpe2NvbnN0IHI9ZS5sZW5ndGgsbz1bXTtmb3IobGV0IHQ9MDt0PHI7dCsrKXtsZXQgYT1bXSxzPVtdO2EucHVzaCgodCtyLTEpJXIsdCwodCsxKSVyKSxzLnB1c2goMCwxLDApO2NvbnN0IGw9WFZ0LmdldEtleWZyYW1lT3JkZXIoYSk7YT1YVnQuc29ydGVkQXJyYXkoYSwxLGwpLHM9WFZ0LnNvcnRlZEFycmF5KHMsMSxsKSxpfHwwIT09YVswXXx8KGEucHVzaChyKSxzLnB1c2goc1swXSkpLG8ucHVzaChuZXcgblV0KCIubW9ycGhUYXJnZXRJbmZsdWVuY2VzWyIrZVt0XS5uYW1lKyJdIixhLHMpLnNjYWxlKDEvbikpfXJldHVybiBuZXcgc1V0KHQsLTEsbyl9LGZpbmRCeU5hbWU6ZnVuY3Rpb24odCxlKXtsZXQgbj10O2lmKCFBcnJheS5pc0FycmF5KHQpKXtjb25zdCBlPXQ7bj1lLmdlb21ldHJ5JiZlLmdlb21ldHJ5LmFuaW1hdGlvbnN8fGUuYW5pbWF0aW9uc31mb3IobGV0IHQ9MDt0PG4ubGVuZ3RoO3QrKylpZihuW3RdLm5hbWU9PT1lKXJldHVybiBuW3RdO3JldHVybiBudWxsfSxDcmVhdGVDbGlwc0Zyb21Nb3JwaFRhcmdldFNlcXVlbmNlczpmdW5jdGlvbih0LGUsbil7Y29uc3QgaT17fSxyPS9eKFtcdy1dKj8pKFtcZF0rKSQvO2ZvcihsZXQgZT0wLG49dC5sZW5ndGg7ZTxuO2UrKyl7Y29uc3Qgbj10W2VdLG89bi5uYW1lLm1hdGNoKHIpO2lmKG8mJm8ubGVuZ3RoPjEpe2NvbnN0IHQ9b1sxXTtsZXQgZT1pW3RdO2V8fChpW3RdPWU9W10pLGUucHVzaChuKX19Y29uc3Qgbz1bXTtmb3IoY29uc3QgdCBpbiBpKW8ucHVzaChzVXQuQ3JlYXRlRnJvbU1vcnBoVGFyZ2V0U2VxdWVuY2UodCxpW3RdLGUsbikpO3JldHVybiBvfSxwYXJzZUFuaW1hdGlvbjpmdW5jdGlvbih0LGUpe2lmKCF0KXJldHVybiBjb25zb2xlLmVycm9yKCJUSFJFRS5BbmltYXRpb25DbGlwOiBObyBhbmltYXRpb24gaW4gSlNPTkxvYWRlciBkYXRhLiIpLG51bGw7Y29uc3Qgbj1mdW5jdGlvbih0LGUsbixpLHIpe2lmKDAhPT1uLmxlbmd0aCl7Y29uc3Qgbz1bXSxhPVtdO1hWdC5mbGF0dGVuSlNPTihuLG8sYSxpKSwwIT09by5sZW5ndGgmJnIucHVzaChuZXcgdChlLG8sYSkpfX0saT1bXSxyPXQubmFtZXx8ImRlZmF1bHQiLG89dC5mcHN8fDMwLGE9dC5ibGVuZE1vZGU7bGV0IHM9dC5sZW5ndGh8fC0xO2NvbnN0IGw9dC5oaWVyYXJjaHl8fFtdO2ZvcihsZXQgdD0wO3Q8bC5sZW5ndGg7dCsrKXtjb25zdCByPWxbdF0ua2V5cztpZihyJiYwIT09ci5sZW5ndGgpaWYoclswXS5tb3JwaFRhcmdldHMpe2NvbnN0IHQ9e307bGV0IGU7Zm9yKGU9MDtlPHIubGVuZ3RoO2UrKylpZihyW2VdLm1vcnBoVGFyZ2V0cylmb3IobGV0IG49MDtuPHJbZV0ubW9ycGhUYXJnZXRzLmxlbmd0aDtuKyspdFtyW2VdLm1vcnBoVGFyZ2V0c1tuXV09LTE7Zm9yKGNvbnN0IG4gaW4gdCl7Y29uc3QgdD1bXSxvPVtdO2ZvcihsZXQgaT0wO2khPT1yW2VdLm1vcnBoVGFyZ2V0cy5sZW5ndGg7KytpKXtjb25zdCBpPXJbZV07dC5wdXNoKGkudGltZSksby5wdXNoKGkubW9ycGhUYXJnZXQ9PT1uPzE6MCl9aS5wdXNoKG5ldyBuVXQoIi5tb3JwaFRhcmdldEluZmx1ZW5jZVsiK24rIl0iLHQsbykpfXM9dC5sZW5ndGgqKG98fDEpfWVsc2V7Y29uc3Qgbz0iLmJvbmVzWyIrZVt0XS5uYW1lKyJdIjtuKGFVdCxvKyIucG9zaXRpb24iLHIsInBvcyIsaSksbihyVXQsbysiLnF1YXRlcm5pb24iLHIsInJvdCIsaSksbihhVXQsbysiLnNjYWxlIixyLCJzY2wiLGkpfX1yZXR1cm4gMD09PWkubGVuZ3RoP251bGw6bmV3IHNVdChyLHMsaSxhKX19KSxPYmplY3QuYXNzaWduKHNVdC5wcm90b3R5cGUse3Jlc2V0RHVyYXRpb246ZnVuY3Rpb24oKXtsZXQgdD0wO2ZvcihsZXQgZT0wLG49dGhpcy50cmFja3MubGVuZ3RoO2UhPT1uOysrZSl7Y29uc3Qgbj10aGlzLnRyYWNrc1tlXTt0PU1hdGgubWF4KHQsbi50aW1lc1tuLnRpbWVzLmxlbmd0aC0xXSl9cmV0dXJuIHRoaXMuZHVyYXRpb249dCx0aGlzfSx0cmltOmZ1bmN0aW9uKCl7Zm9yKGxldCB0PTA7dDx0aGlzLnRyYWNrcy5sZW5ndGg7dCsrKXRoaXMudHJhY2tzW3RdLnRyaW0oMCx0aGlzLmR1cmF0aW9uKTtyZXR1cm4gdGhpc30sdmFsaWRhdGU6ZnVuY3Rpb24oKXtsZXQgdD0hMDtmb3IobGV0IGU9MDtlPHRoaXMudHJhY2tzLmxlbmd0aDtlKyspdD10JiZ0aGlzLnRyYWNrc1tlXS52YWxpZGF0ZSgpO3JldHVybiB0fSxvcHRpbWl6ZTpmdW5jdGlvbigpe2ZvcihsZXQgdD0wO3Q8dGhpcy50cmFja3MubGVuZ3RoO3QrKyl0aGlzLnRyYWNrc1t0XS5vcHRpbWl6ZSgpO3JldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbigpe2NvbnN0IHQ9W107Zm9yKGxldCBlPTA7ZTx0aGlzLnRyYWNrcy5sZW5ndGg7ZSsrKXQucHVzaCh0aGlzLnRyYWNrc1tlXS5jbG9uZSgpKTtyZXR1cm4gbmV3IHNVdCh0aGlzLm5hbWUsdGhpcy5kdXJhdGlvbix0LHRoaXMuYmxlbmRNb2RlKX0sdG9KU09OOmZ1bmN0aW9uKCl7cmV0dXJuIHNVdC50b0pTT04odGhpcyl9fSk7Y29uc3QgY1V0PXtlbmFibGVkOiExLGZpbGVzOnt9LGFkZDpmdW5jdGlvbih0LGUpeyExIT09dGhpcy5lbmFibGVkJiYodGhpcy5maWxlc1t0XT1lKX0sZ2V0OmZ1bmN0aW9uKHQpe2lmKCExIT09dGhpcy5lbmFibGVkKXJldHVybiB0aGlzLmZpbGVzW3RdfSxyZW1vdmU6ZnVuY3Rpb24odCl7ZGVsZXRlIHRoaXMuZmlsZXNbdF19LGNsZWFyOmZ1bmN0aW9uKCl7dGhpcy5maWxlcz17fX19O2Z1bmN0aW9uIHVVdCh0LGUsbil7Y29uc3QgaT10aGlzO2xldCByLG89ITEsYT0wLHM9MDtjb25zdCBsPVtdO3RoaXMub25TdGFydD12b2lkIDAsdGhpcy5vbkxvYWQ9dCx0aGlzLm9uUHJvZ3Jlc3M9ZSx0aGlzLm9uRXJyb3I9bix0aGlzLml0ZW1TdGFydD1mdW5jdGlvbih0KXtzKyssITE9PT1vJiZ2b2lkIDAhPT1pLm9uU3RhcnQmJmkub25TdGFydCh0LGEscyksbz0hMH0sdGhpcy5pdGVtRW5kPWZ1bmN0aW9uKHQpe2ErKyx2b2lkIDAhPT1pLm9uUHJvZ3Jlc3MmJmkub25Qcm9ncmVzcyh0LGEscyksYT09PXMmJihvPSExLHZvaWQgMCE9PWkub25Mb2FkJiZpLm9uTG9hZCgpKX0sdGhpcy5pdGVtRXJyb3I9ZnVuY3Rpb24odCl7dm9pZCAwIT09aS5vbkVycm9yJiZpLm9uRXJyb3IodCl9LHRoaXMucmVzb2x2ZVVSTD1mdW5jdGlvbih0KXtyZXR1cm4gcj9yKHQpOnR9LHRoaXMuc2V0VVJMTW9kaWZpZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHI9dCx0aGlzfSx0aGlzLmFkZEhhbmRsZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbC5wdXNoKHQsZSksdGhpc30sdGhpcy5yZW1vdmVIYW5kbGVyPWZ1bmN0aW9uKHQpe2NvbnN0IGU9bC5pbmRleE9mKHQpO3JldHVybi0xIT09ZSYmbC5zcGxpY2UoZSwyKSx0aGlzfSx0aGlzLmdldEhhbmRsZXI9ZnVuY3Rpb24odCl7Zm9yKGxldCBlPTAsbj1sLmxlbmd0aDtlPG47ZSs9Mil7Y29uc3Qgbj1sW2VdLGk9bFtlKzFdO2lmKG4uZ2xvYmFsJiYobi5sYXN0SW5kZXg9MCksbi50ZXN0KHQpKXJldHVybiBpfXJldHVybiBudWxsfX1jb25zdCBoVXQ9bmV3IHVVdDtmdW5jdGlvbiBkVXQodCl7dGhpcy5tYW5hZ2VyPXZvaWQgMCE9PXQ/dDpoVXQsdGhpcy5jcm9zc09yaWdpbj0iYW5vbnltb3VzIix0aGlzLndpdGhDcmVkZW50aWFscz0hMSx0aGlzLnBhdGg9IiIsdGhpcy5yZXNvdXJjZVBhdGg9IiIsdGhpcy5yZXF1ZXN0SGVhZGVyPXt9fU9iamVjdC5hc3NpZ24oZFV0LnByb3RvdHlwZSx7bG9hZDpmdW5jdGlvbigpe30sbG9hZEFzeW5jOmZ1bmN0aW9uKHQsZSl7Y29uc3Qgbj10aGlzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24oaSxyKXtuLmxvYWQodCxpLGUscil9KSl9LHBhcnNlOmZ1bmN0aW9uKCl7fSxzZXRDcm9zc09yaWdpbjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jcm9zc09yaWdpbj10LHRoaXN9LHNldFdpdGhDcmVkZW50aWFsczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy53aXRoQ3JlZGVudGlhbHM9dCx0aGlzfSxzZXRQYXRoOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnBhdGg9dCx0aGlzfSxzZXRSZXNvdXJjZVBhdGg6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucmVzb3VyY2VQYXRoPXQsdGhpc30sc2V0UmVxdWVzdEhlYWRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5yZXF1ZXN0SGVhZGVyPXQsdGhpc319KTtjb25zdCBwVXQ9e307ZnVuY3Rpb24gZlV0KHQpe2RVdC5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gbVV0KHQpe2RVdC5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gZ1V0KHQpe2RVdC5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gX1V0KHQpe2RVdC5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24geVV0KHQpe2RVdC5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gdlV0KHQpe2RVdC5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gYlV0KHQpe2RVdC5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24geFV0KCl7dGhpcy50eXBlPSJDdXJ2ZSIsdGhpcy5hcmNMZW5ndGhEaXZpc2lvbnM9MjAwfWZ1bmN0aW9uIHdVdCh0LGUsbixpLHIsbyxhLHMpe3hVdC5jYWxsKHRoaXMpLHRoaXMudHlwZT0iRWxsaXBzZUN1cnZlIix0aGlzLmFYPXR8fDAsdGhpcy5hWT1lfHwwLHRoaXMueFJhZGl1cz1ufHwxLHRoaXMueVJhZGl1cz1pfHwxLHRoaXMuYVN0YXJ0QW5nbGU9cnx8MCx0aGlzLmFFbmRBbmdsZT1vfHwyKk1hdGguUEksdGhpcy5hQ2xvY2t3aXNlPWF8fCExLHRoaXMuYVJvdGF0aW9uPXN8fDB9ZnVuY3Rpb24gU1V0KHQsZSxuLGkscixvKXt3VXQuY2FsbCh0aGlzLHQsZSxuLG4saSxyLG8pLHRoaXMudHlwZT0iQXJjQ3VydmUifWZ1bmN0aW9uIE1VdCgpe2xldCB0PTAsZT0wLG49MCxpPTA7ZnVuY3Rpb24gcihyLG8sYSxzKXt0PXIsZT1hLG49LTMqciszKm8tMiphLXMsaT0yKnItMipvK2Erc31yZXR1cm57aW5pdENhdG11bGxSb206ZnVuY3Rpb24odCxlLG4saSxvKXtyKGUsbixvKihuLXQpLG8qKGktZSkpfSxpbml0Tm9udW5pZm9ybUNhdG11bGxSb206ZnVuY3Rpb24odCxlLG4saSxvLGEscyl7bGV0IGw9KGUtdCkvby0obi10KS8obythKSsobi1lKS9hLGM9KG4tZSkvYS0oaS1lKS8oYStzKSsoaS1uKS9zO2wqPWEsYyo9YSxyKGUsbixsLGMpfSxjYWxjOmZ1bmN0aW9uKHIpe2NvbnN0IG89cipyO3JldHVybiB0K2UqcituKm8raSoobypyKX19fWZVdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKGRVdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpmVXQsbG9hZDpmdW5jdGlvbih0LGUsbixpKXt2b2lkIDA9PT10JiYodD0iIiksdm9pZCAwIT09dGhpcy5wYXRoJiYodD10aGlzLnBhdGgrdCksdD10aGlzLm1hbmFnZXIucmVzb2x2ZVVSTCh0KTtjb25zdCByPXRoaXMsbz1jVXQuZ2V0KHQpO2lmKHZvaWQgMCE9PW8pcmV0dXJuIHIubWFuYWdlci5pdGVtU3RhcnQodCksc2V0VGltZW91dCgoZnVuY3Rpb24oKXtlJiZlKG8pLHIubWFuYWdlci5pdGVtRW5kKHQpfSksMCksbztpZih2b2lkIDAhPT1wVXRbdF0pcmV0dXJuIHZvaWQgcFV0W3RdLnB1c2goe29uTG9hZDplLG9uUHJvZ3Jlc3M6bixvbkVycm9yOml9KTtjb25zdCBhPXQubWF0Y2goL15kYXRhOiguKj8pKDtiYXNlNjQpPywoLiopJC8pO2xldCBzO2lmKGEpe2NvbnN0IG49YVsxXSxvPSEhYVsyXTtsZXQgcz1hWzNdO3M9ZGVjb2RlVVJJQ29tcG9uZW50KHMpLG8mJihzPWF0b2IocykpO3RyeXtsZXQgaTtjb25zdCBvPSh0aGlzLnJlc3BvbnNlVHlwZXx8IiIpLnRvTG93ZXJDYXNlKCk7c3dpdGNoKG8pe2Nhc2UiYXJyYXlidWZmZXIiOmNhc2UiYmxvYiI6Y29uc3QgdD1uZXcgVWludDhBcnJheShzLmxlbmd0aCk7Zm9yKGxldCBlPTA7ZTxzLmxlbmd0aDtlKyspdFtlXT1zLmNoYXJDb2RlQXQoZSk7aT0iYmxvYiI9PT1vP25ldyBCbG9iKFt0LmJ1ZmZlcl0se3R5cGU6bn0pOnQuYnVmZmVyO2JyZWFrO2Nhc2UiZG9jdW1lbnQiOmNvbnN0IGU9bmV3IERPTVBhcnNlcjtpPWUucGFyc2VGcm9tU3RyaW5nKHMsbik7YnJlYWs7Y2FzZSJqc29uIjppPUpTT04ucGFyc2Uocyk7YnJlYWs7ZGVmYXVsdDppPXN9c2V0VGltZW91dCgoZnVuY3Rpb24oKXtlJiZlKGkpLHIubWFuYWdlci5pdGVtRW5kKHQpfSksMCl9Y2F0Y2goZSl7c2V0VGltZW91dCgoZnVuY3Rpb24oKXtpJiZpKGUpLHIubWFuYWdlci5pdGVtRXJyb3IodCksci5tYW5hZ2VyLml0ZW1FbmQodCl9KSwwKX19ZWxzZXtwVXRbdF09W10scFV0W3RdLnB1c2goe29uTG9hZDplLG9uUHJvZ3Jlc3M6bixvbkVycm9yOml9KSxzPW5ldyBYTUxIdHRwUmVxdWVzdCxzLm9wZW4oIkdFVCIsdCwhMCkscy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwoZnVuY3Rpb24oZSl7Y29uc3Qgbj10aGlzLnJlc3BvbnNlLGk9cFV0W3RdO2lmKGRlbGV0ZSBwVXRbdF0sMjAwPT09dGhpcy5zdGF0dXN8fDA9PT10aGlzLnN0YXR1cyl7MD09PXRoaXMuc3RhdHVzJiZjb25zb2xlLndhcm4oIlRIUkVFLkZpbGVMb2FkZXI6IEhUVFAgU3RhdHVzIDAgcmVjZWl2ZWQuIiksY1V0LmFkZCh0LG4pO2ZvcihsZXQgdD0wLGU9aS5sZW5ndGg7dDxlO3QrKyl7Y29uc3QgZT1pW3RdO2Uub25Mb2FkJiZlLm9uTG9hZChuKX1yLm1hbmFnZXIuaXRlbUVuZCh0KX1lbHNle2ZvcihsZXQgdD0wLG49aS5sZW5ndGg7dDxuO3QrKyl7Y29uc3Qgbj1pW3RdO24ub25FcnJvciYmbi5vbkVycm9yKGUpfXIubWFuYWdlci5pdGVtRXJyb3IodCksci5tYW5hZ2VyLml0ZW1FbmQodCl9fSksITEpLHMuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLChmdW5jdGlvbihlKXtjb25zdCBuPXBVdFt0XTtmb3IobGV0IHQ9MCxpPW4ubGVuZ3RoO3Q8aTt0Kyspe2NvbnN0IGk9blt0XTtpLm9uUHJvZ3Jlc3MmJmkub25Qcm9ncmVzcyhlKX19KSwhMSkscy5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsKGZ1bmN0aW9uKGUpe2NvbnN0IG49cFV0W3RdO2RlbGV0ZSBwVXRbdF07Zm9yKGxldCB0PTAsaT1uLmxlbmd0aDt0PGk7dCsrKXtjb25zdCBpPW5bdF07aS5vbkVycm9yJiZpLm9uRXJyb3IoZSl9ci5tYW5hZ2VyLml0ZW1FcnJvcih0KSxyLm1hbmFnZXIuaXRlbUVuZCh0KX0pLCExKSxzLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IiwoZnVuY3Rpb24oZSl7Y29uc3Qgbj1wVXRbdF07ZGVsZXRlIHBVdFt0XTtmb3IobGV0IHQ9MCxpPW4ubGVuZ3RoO3Q8aTt0Kyspe2NvbnN0IGk9blt0XTtpLm9uRXJyb3ImJmkub25FcnJvcihlKX1yLm1hbmFnZXIuaXRlbUVycm9yKHQpLHIubWFuYWdlci5pdGVtRW5kKHQpfSksITEpLHZvaWQgMCE9PXRoaXMucmVzcG9uc2VUeXBlJiYocy5yZXNwb25zZVR5cGU9dGhpcy5yZXNwb25zZVR5cGUpLHZvaWQgMCE9PXRoaXMud2l0aENyZWRlbnRpYWxzJiYocy53aXRoQ3JlZGVudGlhbHM9dGhpcy53aXRoQ3JlZGVudGlhbHMpLHMub3ZlcnJpZGVNaW1lVHlwZSYmcy5vdmVycmlkZU1pbWVUeXBlKHZvaWQgMCE9PXRoaXMubWltZVR5cGU/dGhpcy5taW1lVHlwZToidGV4dC9wbGFpbiIpO2Zvcihjb25zdCB0IGluIHRoaXMucmVxdWVzdEhlYWRlcilzLnNldFJlcXVlc3RIZWFkZXIodCx0aGlzLnJlcXVlc3RIZWFkZXJbdF0pO3Muc2VuZChudWxsKX1yZXR1cm4gci5tYW5hZ2VyLml0ZW1TdGFydCh0KSxzfSxzZXRSZXNwb25zZVR5cGU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucmVzcG9uc2VUeXBlPXQsdGhpc30sc2V0TWltZVR5cGU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubWltZVR5cGU9dCx0aGlzfX0pLG1VdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKGRVdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjptVXQsbG9hZDpmdW5jdGlvbih0LGUsbixpKXtjb25zdCByPXRoaXMsbz1uZXcgZlV0KHIubWFuYWdlcik7by5zZXRQYXRoKHIucGF0aCksby5zZXRSZXF1ZXN0SGVhZGVyKHIucmVxdWVzdEhlYWRlciksby5zZXRXaXRoQ3JlZGVudGlhbHMoci53aXRoQ3JlZGVudGlhbHMpLG8ubG9hZCh0LChmdW5jdGlvbihuKXt0cnl7ZShyLnBhcnNlKEpTT04ucGFyc2UobikpKX1jYXRjaChlKXtpP2koZSk6Y29uc29sZS5lcnJvcihlKSxyLm1hbmFnZXIuaXRlbUVycm9yKHQpfX0pLG4saSl9LHBhcnNlOmZ1bmN0aW9uKHQpe2NvbnN0IGU9W107Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspe2NvbnN0IGk9c1V0LnBhcnNlKHRbbl0pO2UucHVzaChpKX1yZXR1cm4gZX19KSxnVXQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShkVXQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6Z1V0LGxvYWQ6ZnVuY3Rpb24odCxlLG4saSl7Y29uc3Qgcj10aGlzLG89W10sYT1uZXcgUkZ0LHM9bmV3IGZVdCh0aGlzLm1hbmFnZXIpO3Muc2V0UGF0aCh0aGlzLnBhdGgpLHMuc2V0UmVzcG9uc2VUeXBlKCJhcnJheWJ1ZmZlciIpLHMuc2V0UmVxdWVzdEhlYWRlcih0aGlzLnJlcXVlc3RIZWFkZXIpLHMuc2V0V2l0aENyZWRlbnRpYWxzKHIud2l0aENyZWRlbnRpYWxzKTtsZXQgbD0wO2Z1bmN0aW9uIGMoYyl7cy5sb2FkKHRbY10sKGZ1bmN0aW9uKHQpe2NvbnN0IG49ci5wYXJzZSh0LCEwKTtvW2NdPXt3aWR0aDpuLndpZHRoLGhlaWdodDpuLmhlaWdodCxmb3JtYXQ6bi5mb3JtYXQsbWlwbWFwczpuLm1pcG1hcHN9LGwrPTEsNj09PWwmJigxPT09bi5taXBtYXBDb3VudCYmKGEubWluRmlsdGVyPUdJdCksYS5pbWFnZT1vLGEuZm9ybWF0PW4uZm9ybWF0LGEubmVlZHNVcGRhdGU9ITAsZSYmZShhKSl9KSxuLGkpfWlmKEFycmF5LmlzQXJyYXkodCkpZm9yKGxldCBlPTAsbj10Lmxlbmd0aDtlPG47KytlKWMoZSk7ZWxzZSBzLmxvYWQodCwoZnVuY3Rpb24odCl7Y29uc3Qgbj1yLnBhcnNlKHQsITApO2lmKG4uaXNDdWJlbWFwKXtjb25zdCB0PW4ubWlwbWFwcy5sZW5ndGgvbi5taXBtYXBDb3VudDtmb3IobGV0IGU9MDtlPHQ7ZSsrKXtvW2VdPXttaXBtYXBzOltdfTtmb3IobGV0IHQ9MDt0PG4ubWlwbWFwQ291bnQ7dCsrKW9bZV0ubWlwbWFwcy5wdXNoKG4ubWlwbWFwc1tlKm4ubWlwbWFwQ291bnQrdF0pLG9bZV0uZm9ybWF0PW4uZm9ybWF0LG9bZV0ud2lkdGg9bi53aWR0aCxvW2VdLmhlaWdodD1uLmhlaWdodH1hLmltYWdlPW99ZWxzZSBhLmltYWdlLndpZHRoPW4ud2lkdGgsYS5pbWFnZS5oZWlnaHQ9bi5oZWlnaHQsYS5taXBtYXBzPW4ubWlwbWFwczsxPT09bi5taXBtYXBDb3VudCYmKGEubWluRmlsdGVyPUdJdCksYS5mb3JtYXQ9bi5mb3JtYXQsYS5uZWVkc1VwZGF0ZT0hMCxlJiZlKGEpfSksbixpKTtyZXR1cm4gYX19KSxfVXQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShkVXQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6X1V0LGxvYWQ6ZnVuY3Rpb24odCxlLG4saSl7dm9pZCAwIT09dGhpcy5wYXRoJiYodD10aGlzLnBhdGgrdCksdD10aGlzLm1hbmFnZXIucmVzb2x2ZVVSTCh0KTtjb25zdCByPXRoaXMsbz1jVXQuZ2V0KHQpO2lmKHZvaWQgMCE9PW8pcmV0dXJuIHIubWFuYWdlci5pdGVtU3RhcnQodCksc2V0VGltZW91dCgoZnVuY3Rpb24oKXtlJiZlKG8pLHIubWFuYWdlci5pdGVtRW5kKHQpfSksMCksbztjb25zdCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsImltZyIpO2Z1bmN0aW9uIHMoKXthLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLHMsITEpLGEucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGwsITEpLGNVdC5hZGQodCx0aGlzKSxlJiZlKHRoaXMpLHIubWFuYWdlci5pdGVtRW5kKHQpfWZ1bmN0aW9uIGwoZSl7YS5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixzLCExKSxhLnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIixsLCExKSxpJiZpKGUpLHIubWFuYWdlci5pdGVtRXJyb3IodCksci5tYW5hZ2VyLml0ZW1FbmQodCl9cmV0dXJuIGEuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIscywhMSksYS5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsbCwhMSksImRhdGE6IiE9PXQuc3Vic3RyKDAsNSkmJnZvaWQgMCE9PXRoaXMuY3Jvc3NPcmlnaW4mJihhLmNyb3NzT3JpZ2luPXRoaXMuY3Jvc3NPcmlnaW4pLHIubWFuYWdlci5pdGVtU3RhcnQodCksYS5zcmM9dCxhfX0pLHlVdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKGRVdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3Rvcjp5VXQsbG9hZDpmdW5jdGlvbih0LGUsbixpKXtjb25zdCByPW5ldyBnRHQsbz1uZXcgX1V0KHRoaXMubWFuYWdlcik7by5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKSxvLnNldFBhdGgodGhpcy5wYXRoKTtsZXQgYT0wO2Z1bmN0aW9uIHMobil7by5sb2FkKHRbbl0sKGZ1bmN0aW9uKHQpe3IuaW1hZ2VzW25dPXQsYSsrLDY9PT1hJiYoci5uZWVkc1VwZGF0ZT0hMCxlJiZlKHIpKX0pLHZvaWQgMCxpKX1mb3IobGV0IGU9MDtlPHQubGVuZ3RoOysrZSlzKGUpO3JldHVybiByfX0pLHZVdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKGRVdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3Rvcjp2VXQsbG9hZDpmdW5jdGlvbih0LGUsbixpKXtjb25zdCByPXRoaXMsbz1uZXcgeUR0LGE9bmV3IGZVdCh0aGlzLm1hbmFnZXIpO3JldHVybiBhLnNldFJlc3BvbnNlVHlwZSgiYXJyYXlidWZmZXIiKSxhLnNldFJlcXVlc3RIZWFkZXIodGhpcy5yZXF1ZXN0SGVhZGVyKSxhLnNldFBhdGgodGhpcy5wYXRoKSxhLnNldFdpdGhDcmVkZW50aWFscyhyLndpdGhDcmVkZW50aWFscyksYS5sb2FkKHQsKGZ1bmN0aW9uKHQpe2NvbnN0IG49ci5wYXJzZSh0KTtuJiYodm9pZCAwIT09bi5pbWFnZT9vLmltYWdlPW4uaW1hZ2U6dm9pZCAwIT09bi5kYXRhJiYoby5pbWFnZS53aWR0aD1uLndpZHRoLG8uaW1hZ2UuaGVpZ2h0PW4uaGVpZ2h0LG8uaW1hZ2UuZGF0YT1uLmRhdGEpLG8ud3JhcFM9dm9pZCAwIT09bi53cmFwUz9uLndyYXBTOkhJdCxvLndyYXBUPXZvaWQgMCE9PW4ud3JhcFQ/bi53cmFwVDpISXQsby5tYWdGaWx0ZXI9dm9pZCAwIT09bi5tYWdGaWx0ZXI/bi5tYWdGaWx0ZXI6R0l0LG8ubWluRmlsdGVyPXZvaWQgMCE9PW4ubWluRmlsdGVyP24ubWluRmlsdGVyOkdJdCxvLmFuaXNvdHJvcHk9dm9pZCAwIT09bi5hbmlzb3Ryb3B5P24uYW5pc290cm9weToxLHZvaWQgMCE9PW4uZW5jb2RpbmcmJihvLmVuY29kaW5nPW4uZW5jb2RpbmcpLHZvaWQgMCE9PW4uZmxpcFkmJihvLmZsaXBZPW4uZmxpcFkpLHZvaWQgMCE9PW4uZm9ybWF0JiYoby5mb3JtYXQ9bi5mb3JtYXQpLHZvaWQgMCE9PW4udHlwZSYmKG8udHlwZT1uLnR5cGUpLHZvaWQgMCE9PW4ubWlwbWFwcyYmKG8ubWlwbWFwcz1uLm1pcG1hcHMsby5taW5GaWx0ZXI9cUl0KSwxPT09bi5taXBtYXBDb3VudCYmKG8ubWluRmlsdGVyPUdJdCksby5uZWVkc1VwZGF0ZT0hMCxlJiZlKG8sbikpfSksbixpKSxvfX0pLGJVdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKGRVdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpiVXQsbG9hZDpmdW5jdGlvbih0LGUsbixpKXtjb25zdCByPW5ldyBWT3Qsbz1uZXcgX1V0KHRoaXMubWFuYWdlcik7cmV0dXJuIG8uc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbiksby5zZXRQYXRoKHRoaXMucGF0aCksby5sb2FkKHQsKGZ1bmN0aW9uKG4pe3IuaW1hZ2U9bjtjb25zdCBpPXQuc2VhcmNoKC9cLmpwZT9nKCR8XD8pL2kpPjB8fDA9PT10LnNlYXJjaCgvXmRhdGFcOmltYWdlXC9qcGVnLyk7ci5mb3JtYXQ9aT9RSXQ6dE90LHIubmVlZHNVcGRhdGU9ITAsdm9pZCAwIT09ZSYmZShyKX0pLG4saSkscn19KSxPYmplY3QuYXNzaWduKHhVdC5wcm90b3R5cGUse2dldFBvaW50OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQ3VydmU6IC5nZXRQb2ludCgpIG5vdCBpbXBsZW1lbnRlZC4iKSxudWxsfSxnZXRQb2ludEF0OmZ1bmN0aW9uKHQsZSl7Y29uc3Qgbj10aGlzLmdldFV0b1RtYXBwaW5nKHQpO3JldHVybiB0aGlzLmdldFBvaW50KG4sZSl9LGdldFBvaW50czpmdW5jdGlvbih0PTUpe2NvbnN0IGU9W107Zm9yKGxldCBuPTA7bjw9dDtuKyspZS5wdXNoKHRoaXMuZ2V0UG9pbnQobi90KSk7cmV0dXJuIGV9LGdldFNwYWNlZFBvaW50czpmdW5jdGlvbih0PTUpe2NvbnN0IGU9W107Zm9yKGxldCBuPTA7bjw9dDtuKyspZS5wdXNoKHRoaXMuZ2V0UG9pbnRBdChuL3QpKTtyZXR1cm4gZX0sZ2V0TGVuZ3RoOmZ1bmN0aW9uKCl7Y29uc3QgdD10aGlzLmdldExlbmd0aHMoKTtyZXR1cm4gdFt0Lmxlbmd0aC0xXX0sZ2V0TGVuZ3RoczpmdW5jdGlvbih0KXtpZih2b2lkIDA9PT10JiYodD10aGlzLmFyY0xlbmd0aERpdmlzaW9ucyksdGhpcy5jYWNoZUFyY0xlbmd0aHMmJnRoaXMuY2FjaGVBcmNMZW5ndGhzLmxlbmd0aD09PXQrMSYmIXRoaXMubmVlZHNVcGRhdGUpcmV0dXJuIHRoaXMuY2FjaGVBcmNMZW5ndGhzO3RoaXMubmVlZHNVcGRhdGU9ITE7Y29uc3QgZT1bXTtsZXQgbixpPXRoaXMuZ2V0UG9pbnQoMCkscj0wO2UucHVzaCgwKTtmb3IobGV0IG89MTtvPD10O28rKyluPXRoaXMuZ2V0UG9pbnQoby90KSxyKz1uLmRpc3RhbmNlVG8oaSksZS5wdXNoKHIpLGk9bjtyZXR1cm4gdGhpcy5jYWNoZUFyY0xlbmd0aHM9ZSxlfSx1cGRhdGVBcmNMZW5ndGhzOmZ1bmN0aW9uKCl7dGhpcy5uZWVkc1VwZGF0ZT0hMCx0aGlzLmdldExlbmd0aHMoKX0sZ2V0VXRvVG1hcHBpbmc6ZnVuY3Rpb24odCxlKXtjb25zdCBuPXRoaXMuZ2V0TGVuZ3RocygpO2xldCBpPTA7Y29uc3Qgcj1uLmxlbmd0aDtsZXQgbztvPWV8fHQqbltyLTFdO2xldCBhLHM9MCxsPXItMTtmb3IoO3M8PWw7KWlmKGk9TWF0aC5mbG9vcihzKyhsLXMpLzIpLGE9bltpXS1vLGE8MClzPWkrMTtlbHNle2lmKCEoYT4wKSl7bD1pO2JyZWFrfWw9aS0xfWlmKGk9bCxuW2ldPT09bylyZXR1cm4gaS8oci0xKTtjb25zdCBjPW5baV07cmV0dXJuKGkrKG8tYykvKG5baSsxXS1jKSkvKHItMSl9LGdldFRhbmdlbnQ6ZnVuY3Rpb24odCxlKXtjb25zdCBuPTFlLTQ7bGV0IGk9dC1uLHI9dCtuO2k8MCYmKGk9MCkscj4xJiYocj0xKTtjb25zdCBvPXRoaXMuZ2V0UG9pbnQoaSksYT10aGlzLmdldFBvaW50KHIpLHM9ZXx8KG8uaXNWZWN0b3IyP25ldyB6T3Q6bmV3IHFPdCk7cmV0dXJuIHMuY29weShhKS5zdWIobykubm9ybWFsaXplKCksc30sZ2V0VGFuZ2VudEF0OmZ1bmN0aW9uKHQsZSl7Y29uc3Qgbj10aGlzLmdldFV0b1RtYXBwaW5nKHQpO3JldHVybiB0aGlzLmdldFRhbmdlbnQobixlKX0sY29tcHV0ZUZyZW5ldEZyYW1lczpmdW5jdGlvbih0LGUpe2NvbnN0IG49bmV3IHFPdCxpPVtdLHI9W10sbz1bXSxhPW5ldyBxT3Qscz1uZXcgYlJ0O2ZvcihsZXQgZT0wO2U8PXQ7ZSsrKWlbZV09dGhpcy5nZXRUYW5nZW50QXQoZS90LG5ldyBxT3QpLGlbZV0ubm9ybWFsaXplKCk7clswXT1uZXcgcU90LG9bMF09bmV3IHFPdDtsZXQgbD1OdW1iZXIuTUFYX1ZBTFVFO2NvbnN0IGM9TWF0aC5hYnMoaVswXS54KSx1PU1hdGguYWJzKGlbMF0ueSksaD1NYXRoLmFicyhpWzBdLnopO2M8PWwmJihsPWMsbi5zZXQoMSwwLDApKSx1PD1sJiYobD11LG4uc2V0KDAsMSwwKSksaDw9bCYmbi5zZXQoMCwwLDEpLGEuY3Jvc3NWZWN0b3JzKGlbMF0sbikubm9ybWFsaXplKCksclswXS5jcm9zc1ZlY3RvcnMoaVswXSxhKSxvWzBdLmNyb3NzVmVjdG9ycyhpWzBdLHJbMF0pO2ZvcihsZXQgZT0xO2U8PXQ7ZSsrKXtpZihyW2VdPXJbZS0xXS5jbG9uZSgpLG9bZV09b1tlLTFdLmNsb25lKCksYS5jcm9zc1ZlY3RvcnMoaVtlLTFdLGlbZV0pLGEubGVuZ3RoKCk+TnVtYmVyLkVQU0lMT04pe2Eubm9ybWFsaXplKCk7Y29uc3QgdD1NYXRoLmFjb3MoUk90LmNsYW1wKGlbZS0xXS5kb3QoaVtlXSksLTEsMSkpO3JbZV0uYXBwbHlNYXRyaXg0KHMubWFrZVJvdGF0aW9uQXhpcyhhLHQpKX1vW2VdLmNyb3NzVmVjdG9ycyhpW2VdLHJbZV0pfWlmKCEwPT09ZSl7bGV0IGU9TWF0aC5hY29zKFJPdC5jbGFtcChyWzBdLmRvdChyW3RdKSwtMSwxKSk7ZS89dCxpWzBdLmRvdChhLmNyb3NzVmVjdG9ycyhyWzBdLHJbdF0pKT4wJiYoZT0tZSk7Zm9yKGxldCBuPTE7bjw9dDtuKyspcltuXS5hcHBseU1hdHJpeDQocy5tYWtlUm90YXRpb25BeGlzKGlbbl0sZSpuKSksb1tuXS5jcm9zc1ZlY3RvcnMoaVtuXSxyW25dKX1yZXR1cm57dGFuZ2VudHM6aSxub3JtYWxzOnIsYmlub3JtYWxzOm99fSxjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX0sY29weTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hcmNMZW5ndGhEaXZpc2lvbnM9dC5hcmNMZW5ndGhEaXZpc2lvbnMsdGhpc30sdG9KU09OOmZ1bmN0aW9uKCl7Y29uc3QgdD17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6IkN1cnZlIixnZW5lcmF0b3I6IkN1cnZlLnRvSlNPTiJ9fTtyZXR1cm4gdC5hcmNMZW5ndGhEaXZpc2lvbnM9dGhpcy5hcmNMZW5ndGhEaXZpc2lvbnMsdC50eXBlPXRoaXMudHlwZSx0fSxmcm9tSlNPTjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hcmNMZW5ndGhEaXZpc2lvbnM9dC5hcmNMZW5ndGhEaXZpc2lvbnMsdGhpc319KSwod1V0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHhVdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj13VXQsd1V0LnByb3RvdHlwZS5pc0VsbGlwc2VDdXJ2ZT0hMCx3VXQucHJvdG90eXBlLmdldFBvaW50PWZ1bmN0aW9uKHQsZSl7Y29uc3Qgbj1lfHxuZXcgek90LGk9MipNYXRoLlBJO2xldCByPXRoaXMuYUVuZEFuZ2xlLXRoaXMuYVN0YXJ0QW5nbGU7Y29uc3Qgbz1NYXRoLmFicyhyKTxOdW1iZXIuRVBTSUxPTjtmb3IoO3I8MDspcis9aTtmb3IoO3I+aTspci09aTtyPE51bWJlci5FUFNJTE9OJiYocj1vPzA6aSksITAhPT10aGlzLmFDbG9ja3dpc2V8fG98fChyPT09aT9yPS1pOnItPWkpO2NvbnN0IGE9dGhpcy5hU3RhcnRBbmdsZSt0KnI7bGV0IHM9dGhpcy5hWCt0aGlzLnhSYWRpdXMqTWF0aC5jb3MoYSksbD10aGlzLmFZK3RoaXMueVJhZGl1cypNYXRoLnNpbihhKTtpZigwIT09dGhpcy5hUm90YXRpb24pe2NvbnN0IHQ9TWF0aC5jb3ModGhpcy5hUm90YXRpb24pLGU9TWF0aC5zaW4odGhpcy5hUm90YXRpb24pLG49cy10aGlzLmFYLGk9bC10aGlzLmFZO3M9bip0LWkqZSt0aGlzLmFYLGw9biplK2kqdCt0aGlzLmFZfXJldHVybiBuLnNldChzLGwpfSx3VXQucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24odCl7cmV0dXJuIHhVdC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy5hWD10LmFYLHRoaXMuYVk9dC5hWSx0aGlzLnhSYWRpdXM9dC54UmFkaXVzLHRoaXMueVJhZGl1cz10LnlSYWRpdXMsdGhpcy5hU3RhcnRBbmdsZT10LmFTdGFydEFuZ2xlLHRoaXMuYUVuZEFuZ2xlPXQuYUVuZEFuZ2xlLHRoaXMuYUNsb2Nrd2lzZT10LmFDbG9ja3dpc2UsdGhpcy5hUm90YXRpb249dC5hUm90YXRpb24sdGhpc30sd1V0LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtjb25zdCB0PXhVdC5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyk7cmV0dXJuIHQuYVg9dGhpcy5hWCx0LmFZPXRoaXMuYVksdC54UmFkaXVzPXRoaXMueFJhZGl1cyx0LnlSYWRpdXM9dGhpcy55UmFkaXVzLHQuYVN0YXJ0QW5nbGU9dGhpcy5hU3RhcnRBbmdsZSx0LmFFbmRBbmdsZT10aGlzLmFFbmRBbmdsZSx0LmFDbG9ja3dpc2U9dGhpcy5hQ2xvY2t3aXNlLHQuYVJvdGF0aW9uPXRoaXMuYVJvdGF0aW9uLHR9LHdVdC5wcm90b3R5cGUuZnJvbUpTT049ZnVuY3Rpb24odCl7cmV0dXJuIHhVdC5wcm90b3R5cGUuZnJvbUpTT04uY2FsbCh0aGlzLHQpLHRoaXMuYVg9dC5hWCx0aGlzLmFZPXQuYVksdGhpcy54UmFkaXVzPXQueFJhZGl1cyx0aGlzLnlSYWRpdXM9dC55UmFkaXVzLHRoaXMuYVN0YXJ0QW5nbGU9dC5hU3RhcnRBbmdsZSx0aGlzLmFFbmRBbmdsZT10LmFFbmRBbmdsZSx0aGlzLmFDbG9ja3dpc2U9dC5hQ2xvY2t3aXNlLHRoaXMuYVJvdGF0aW9uPXQuYVJvdGF0aW9uLHRoaXN9LChTVXQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUod1V0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPVNVdCxTVXQucHJvdG90eXBlLmlzQXJjQ3VydmU9ITA7Y29uc3QgRVV0PW5ldyBxT3QsVFV0PW5ldyBNVXQsQ1V0PW5ldyBNVXQsQVV0PW5ldyBNVXQ7ZnVuY3Rpb24ga1V0KHQ9W10sZT0hMSxuPSJjZW50cmlwZXRhbCIsaT0uNSl7eFV0LmNhbGwodGhpcyksdGhpcy50eXBlPSJDYXRtdWxsUm9tQ3VydmUzIix0aGlzLnBvaW50cz10LHRoaXMuY2xvc2VkPWUsdGhpcy5jdXJ2ZVR5cGU9bix0aGlzLnRlbnNpb249aX1mdW5jdGlvbiBMVXQodCxlLG4saSxyKXtjb25zdCBvPS41KihpLWUpLGE9LjUqKHItbikscz10KnQ7cmV0dXJuKDIqbi0yKmkrbythKSoodCpzKSsoLTMqbiszKmktMipvLWEpKnMrbyp0K259ZnVuY3Rpb24gUFV0KHQsZSxuLGkpe3JldHVybihmdW5jdGlvbiByKHQsZSl7Y29uc3Qgbj0xLXQ7cmV0dXJuIG4qbiplfSkodCxlKSsoZnVuY3Rpb24gbyh0LGUpe3JldHVybiAyKigxLXQpKnQqZX0pKHQsbikrKGZ1bmN0aW9uIGEodCxlKXtyZXR1cm4gdCp0KmV9KSh0LGkpfWZ1bmN0aW9uIE5VdCh0LGUsbixpLHIpe3JldHVybihmdW5jdGlvbiBvKHQsZSl7Y29uc3Qgbj0xLXQ7cmV0dXJuIG4qbipuKmV9KSh0LGUpKyhmdW5jdGlvbiBhKHQsZSl7Y29uc3Qgbj0xLXQ7cmV0dXJuIDMqbipuKnQqZX0pKHQsbikrKGZ1bmN0aW9uIHModCxlKXtyZXR1cm4gMyooMS10KSp0KnQqZX0pKHQsaSkrKGZ1bmN0aW9uIGwodCxlKXtyZXR1cm4gdCp0KnQqZX0pKHQscil9ZnVuY3Rpb24gSVV0KHQ9bmV3IHpPdCxlPW5ldyB6T3Qsbj1uZXcgek90LGk9bmV3IHpPdCl7eFV0LmNhbGwodGhpcyksdGhpcy50eXBlPSJDdWJpY0JlemllckN1cnZlIix0aGlzLnYwPXQsdGhpcy52MT1lLHRoaXMudjI9bix0aGlzLnYzPWl9ZnVuY3Rpb24gT1V0KHQ9bmV3IHFPdCxlPW5ldyBxT3Qsbj1uZXcgcU90LGk9bmV3IHFPdCl7eFV0LmNhbGwodGhpcyksdGhpcy50eXBlPSJDdWJpY0JlemllckN1cnZlMyIsdGhpcy52MD10LHRoaXMudjE9ZSx0aGlzLnYyPW4sdGhpcy52Mz1pfWZ1bmN0aW9uIFJVdCh0PW5ldyB6T3QsZT1uZXcgek90KXt4VXQuY2FsbCh0aGlzKSx0aGlzLnR5cGU9IkxpbmVDdXJ2ZSIsdGhpcy52MT10LHRoaXMudjI9ZX1mdW5jdGlvbiB6VXQodD1uZXcgcU90LGU9bmV3IHFPdCl7eFV0LmNhbGwodGhpcyksdGhpcy50eXBlPSJMaW5lQ3VydmUzIix0aGlzLnYxPXQsdGhpcy52Mj1lfWZ1bmN0aW9uIERVdCh0PW5ldyB6T3QsZT1uZXcgek90LG49bmV3IHpPdCl7eFV0LmNhbGwodGhpcyksdGhpcy50eXBlPSJRdWFkcmF0aWNCZXppZXJDdXJ2ZSIsdGhpcy52MD10LHRoaXMudjE9ZSx0aGlzLnYyPW59ZnVuY3Rpb24gQlV0KHQ9bmV3IHFPdCxlPW5ldyBxT3Qsbj1uZXcgcU90KXt4VXQuY2FsbCh0aGlzKSx0aGlzLnR5cGU9IlF1YWRyYXRpY0JlemllckN1cnZlMyIsdGhpcy52MD10LHRoaXMudjE9ZSx0aGlzLnYyPW59ZnVuY3Rpb24gSFV0KHQ9W10pe3hVdC5jYWxsKHRoaXMpLHRoaXMudHlwZT0iU3BsaW5lQ3VydmUiLHRoaXMucG9pbnRzPXR9KGtVdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh4VXQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9a1V0LGtVdC5wcm90b3R5cGUuaXNDYXRtdWxsUm9tQ3VydmUzPSEwLGtVdC5wcm90b3R5cGUuZ2V0UG9pbnQ9ZnVuY3Rpb24odCxlPW5ldyBxT3Qpe2NvbnN0IG49ZSxpPXRoaXMucG9pbnRzLHI9aS5sZW5ndGgsbz0oci0odGhpcy5jbG9zZWQ/MDoxKSkqdDtsZXQgYSxzLGw9TWF0aC5mbG9vcihvKSxjPW8tbDt0aGlzLmNsb3NlZD9sKz1sPjA/MDooTWF0aC5mbG9vcihNYXRoLmFicyhsKS9yKSsxKSpyOjA9PT1jJiZsPT09ci0xJiYobD1yLTIsYz0xKSx0aGlzLmNsb3NlZHx8bD4wP2E9aVsobC0xKSVyXTooRVV0LnN1YlZlY3RvcnMoaVswXSxpWzFdKS5hZGQoaVswXSksYT1FVXQpO2NvbnN0IHU9aVtsJXJdLGg9aVsobCsxKSVyXTtpZih0aGlzLmNsb3NlZHx8bCsyPHI/cz1pWyhsKzIpJXJdOihFVXQuc3ViVmVjdG9ycyhpW3ItMV0saVtyLTJdKS5hZGQoaVtyLTFdKSxzPUVVdCksImNlbnRyaXBldGFsIj09PXRoaXMuY3VydmVUeXBlfHwiY2hvcmRhbCI9PT10aGlzLmN1cnZlVHlwZSl7Y29uc3QgdD0iY2hvcmRhbCI9PT10aGlzLmN1cnZlVHlwZT8uNTouMjU7bGV0IGU9TWF0aC5wb3coYS5kaXN0YW5jZVRvU3F1YXJlZCh1KSx0KSxuPU1hdGgucG93KHUuZGlzdGFuY2VUb1NxdWFyZWQoaCksdCksaT1NYXRoLnBvdyhoLmRpc3RhbmNlVG9TcXVhcmVkKHMpLHQpO248MWUtNCYmKG49MSksZTwxZS00JiYoZT1uKSxpPDFlLTQmJihpPW4pLFRVdC5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20oYS54LHUueCxoLngscy54LGUsbixpKSxDVXQuaW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tKGEueSx1LnksaC55LHMueSxlLG4saSksQVV0LmluaXROb251bmlmb3JtQ2F0bXVsbFJvbShhLnosdS56LGgueixzLnosZSxuLGkpfWVsc2UiY2F0bXVsbHJvbSI9PT10aGlzLmN1cnZlVHlwZSYmKFRVdC5pbml0Q2F0bXVsbFJvbShhLngsdS54LGgueCxzLngsdGhpcy50ZW5zaW9uKSxDVXQuaW5pdENhdG11bGxSb20oYS55LHUueSxoLnkscy55LHRoaXMudGVuc2lvbiksQVV0LmluaXRDYXRtdWxsUm9tKGEueix1LnosaC56LHMueix0aGlzLnRlbnNpb24pKTtyZXR1cm4gbi5zZXQoVFV0LmNhbGMoYyksQ1V0LmNhbGMoYyksQVV0LmNhbGMoYykpLG59LGtVdC5wcm90b3R5cGUuY29weT1mdW5jdGlvbih0KXt4VXQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMucG9pbnRzPVtdO2ZvcihsZXQgZT0wLG49dC5wb2ludHMubGVuZ3RoO2U8bjtlKyspdGhpcy5wb2ludHMucHVzaCh0LnBvaW50c1tlXS5jbG9uZSgpKTtyZXR1cm4gdGhpcy5jbG9zZWQ9dC5jbG9zZWQsdGhpcy5jdXJ2ZVR5cGU9dC5jdXJ2ZVR5cGUsdGhpcy50ZW5zaW9uPXQudGVuc2lvbix0aGlzfSxrVXQucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe2NvbnN0IHQ9eFV0LnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzKTt0LnBvaW50cz1bXTtmb3IobGV0IGU9MCxuPXRoaXMucG9pbnRzLmxlbmd0aDtlPG47ZSsrKXQucG9pbnRzLnB1c2godGhpcy5wb2ludHNbZV0udG9BcnJheSgpKTtyZXR1cm4gdC5jbG9zZWQ9dGhpcy5jbG9zZWQsdC5jdXJ2ZVR5cGU9dGhpcy5jdXJ2ZVR5cGUsdC50ZW5zaW9uPXRoaXMudGVuc2lvbix0fSxrVXQucHJvdG90eXBlLmZyb21KU09OPWZ1bmN0aW9uKHQpe3hVdC5wcm90b3R5cGUuZnJvbUpTT04uY2FsbCh0aGlzLHQpLHRoaXMucG9pbnRzPVtdO2ZvcihsZXQgZT0wLG49dC5wb2ludHMubGVuZ3RoO2U8bjtlKyspe2NvbnN0IG49dC5wb2ludHNbZV07dGhpcy5wb2ludHMucHVzaCgobmV3IHFPdCkuZnJvbUFycmF5KG4pKX1yZXR1cm4gdGhpcy5jbG9zZWQ9dC5jbG9zZWQsdGhpcy5jdXJ2ZVR5cGU9dC5jdXJ2ZVR5cGUsdGhpcy50ZW5zaW9uPXQudGVuc2lvbix0aGlzfSwoSVV0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHhVdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1JVXQsSVV0LnByb3RvdHlwZS5pc0N1YmljQmV6aWVyQ3VydmU9ITAsSVV0LnByb3RvdHlwZS5nZXRQb2ludD1mdW5jdGlvbih0LGU9bmV3IHpPdCl7Y29uc3Qgbj1lLGk9dGhpcy52MCxyPXRoaXMudjEsbz10aGlzLnYyLGE9dGhpcy52MztyZXR1cm4gbi5zZXQoTlV0KHQsaS54LHIueCxvLngsYS54KSxOVXQodCxpLnksci55LG8ueSxhLnkpKSxufSxJVXQucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24odCl7cmV0dXJuIHhVdC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy52MC5jb3B5KHQudjApLHRoaXMudjEuY29weSh0LnYxKSx0aGlzLnYyLmNvcHkodC52MiksdGhpcy52My5jb3B5KHQudjMpLHRoaXN9LElVdC5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7Y29uc3QgdD14VXQucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMpO3JldHVybiB0LnYwPXRoaXMudjAudG9BcnJheSgpLHQudjE9dGhpcy52MS50b0FycmF5KCksdC52Mj10aGlzLnYyLnRvQXJyYXkoKSx0LnYzPXRoaXMudjMudG9BcnJheSgpLHR9LElVdC5wcm90b3R5cGUuZnJvbUpTT049ZnVuY3Rpb24odCl7cmV0dXJuIHhVdC5wcm90b3R5cGUuZnJvbUpTT04uY2FsbCh0aGlzLHQpLHRoaXMudjAuZnJvbUFycmF5KHQudjApLHRoaXMudjEuZnJvbUFycmF5KHQudjEpLHRoaXMudjIuZnJvbUFycmF5KHQudjIpLHRoaXMudjMuZnJvbUFycmF5KHQudjMpLHRoaXN9LChPVXQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeFV0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPU9VdCxPVXQucHJvdG90eXBlLmlzQ3ViaWNCZXppZXJDdXJ2ZTM9ITAsT1V0LnByb3RvdHlwZS5nZXRQb2ludD1mdW5jdGlvbih0LGU9bmV3IHFPdCl7Y29uc3Qgbj1lLGk9dGhpcy52MCxyPXRoaXMudjEsbz10aGlzLnYyLGE9dGhpcy52MztyZXR1cm4gbi5zZXQoTlV0KHQsaS54LHIueCxvLngsYS54KSxOVXQodCxpLnksci55LG8ueSxhLnkpLE5VdCh0LGkueixyLnosby56LGEueikpLG59LE9VdC5wcm90b3R5cGUuY29weT1mdW5jdGlvbih0KXtyZXR1cm4geFV0LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLnYwLmNvcHkodC52MCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzLnYzLmNvcHkodC52MyksdGhpc30sT1V0LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtjb25zdCB0PXhVdC5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyk7cmV0dXJuIHQudjA9dGhpcy52MC50b0FycmF5KCksdC52MT10aGlzLnYxLnRvQXJyYXkoKSx0LnYyPXRoaXMudjIudG9BcnJheSgpLHQudjM9dGhpcy52My50b0FycmF5KCksdH0sT1V0LnByb3RvdHlwZS5mcm9tSlNPTj1mdW5jdGlvbih0KXtyZXR1cm4geFV0LnByb3RvdHlwZS5mcm9tSlNPTi5jYWxsKHRoaXMsdCksdGhpcy52MC5mcm9tQXJyYXkodC52MCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpcy52My5mcm9tQXJyYXkodC52MyksdGhpc30sKFJVdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh4VXQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9UlV0LFJVdC5wcm90b3R5cGUuaXNMaW5lQ3VydmU9ITAsUlV0LnByb3RvdHlwZS5nZXRQb2ludD1mdW5jdGlvbih0LGU9bmV3IHpPdCl7Y29uc3Qgbj1lO3JldHVybiAxPT09dD9uLmNvcHkodGhpcy52Mik6KG4uY29weSh0aGlzLnYyKS5zdWIodGhpcy52MSksbi5tdWx0aXBseVNjYWxhcih0KS5hZGQodGhpcy52MSkpLG59LFJVdC5wcm90b3R5cGUuZ2V0UG9pbnRBdD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmdldFBvaW50KHQsZSl9LFJVdC5wcm90b3R5cGUuZ2V0VGFuZ2VudD1mdW5jdGlvbih0LGUpe2NvbnN0IG49ZXx8bmV3IHpPdDtyZXR1cm4gbi5jb3B5KHRoaXMudjIpLnN1Yih0aGlzLnYxKS5ub3JtYWxpemUoKSxufSxSVXQucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24odCl7cmV0dXJuIHhVdC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzfSxSVXQucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe2NvbnN0IHQ9eFV0LnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzKTtyZXR1cm4gdC52MT10aGlzLnYxLnRvQXJyYXkoKSx0LnYyPXRoaXMudjIudG9BcnJheSgpLHR9LFJVdC5wcm90b3R5cGUuZnJvbUpTT049ZnVuY3Rpb24odCl7cmV0dXJuIHhVdC5wcm90b3R5cGUuZnJvbUpTT04uY2FsbCh0aGlzLHQpLHRoaXMudjEuZnJvbUFycmF5KHQudjEpLHRoaXMudjIuZnJvbUFycmF5KHQudjIpLHRoaXN9LCh6VXQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeFV0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPXpVdCx6VXQucHJvdG90eXBlLmlzTGluZUN1cnZlMz0hMCx6VXQucHJvdG90eXBlLmdldFBvaW50PWZ1bmN0aW9uKHQsZT1uZXcgcU90KXtjb25zdCBuPWU7cmV0dXJuIDE9PT10P24uY29weSh0aGlzLnYyKToobi5jb3B5KHRoaXMudjIpLnN1Yih0aGlzLnYxKSxuLm11bHRpcGx5U2NhbGFyKHQpLmFkZCh0aGlzLnYxKSksbn0selV0LnByb3RvdHlwZS5nZXRQb2ludEF0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZ2V0UG9pbnQodCxlKX0selV0LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHQpe3JldHVybiB4VXQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMudjEuY29weSh0LnYxKSx0aGlzLnYyLmNvcHkodC52MiksdGhpc30selV0LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtjb25zdCB0PXhVdC5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyk7cmV0dXJuIHQudjE9dGhpcy52MS50b0FycmF5KCksdC52Mj10aGlzLnYyLnRvQXJyYXkoKSx0fSx6VXQucHJvdG90eXBlLmZyb21KU09OPWZ1bmN0aW9uKHQpe3JldHVybiB4VXQucHJvdG90eXBlLmZyb21KU09OLmNhbGwodGhpcyx0KSx0aGlzLnYxLmZyb21BcnJheSh0LnYxKSx0aGlzLnYyLmZyb21BcnJheSh0LnYyKSx0aGlzfSwoRFV0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHhVdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1EVXQsRFV0LnByb3RvdHlwZS5pc1F1YWRyYXRpY0JlemllckN1cnZlPSEwLERVdC5wcm90b3R5cGUuZ2V0UG9pbnQ9ZnVuY3Rpb24odCxlPW5ldyB6T3Qpe2NvbnN0IG49ZSxpPXRoaXMudjAscj10aGlzLnYxLG89dGhpcy52MjtyZXR1cm4gbi5zZXQoUFV0KHQsaS54LHIueCxvLngpLFBVdCh0LGkueSxyLnksby55KSksbn0sRFV0LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHQpe3JldHVybiB4VXQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMudjAuY29weSh0LnYwKSx0aGlzLnYxLmNvcHkodC52MSksdGhpcy52Mi5jb3B5KHQudjIpLHRoaXN9LERVdC5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7Y29uc3QgdD14VXQucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMpO3JldHVybiB0LnYwPXRoaXMudjAudG9BcnJheSgpLHQudjE9dGhpcy52MS50b0FycmF5KCksdC52Mj10aGlzLnYyLnRvQXJyYXkoKSx0fSxEVXQucHJvdG90eXBlLmZyb21KU09OPWZ1bmN0aW9uKHQpe3JldHVybiB4VXQucHJvdG90eXBlLmZyb21KU09OLmNhbGwodGhpcyx0KSx0aGlzLnYwLmZyb21BcnJheSh0LnYwKSx0aGlzLnYxLmZyb21BcnJheSh0LnYxKSx0aGlzLnYyLmZyb21BcnJheSh0LnYyKSx0aGlzfSwoQlV0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHhVdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1CVXQsQlV0LnByb3RvdHlwZS5pc1F1YWRyYXRpY0JlemllckN1cnZlMz0hMCxCVXQucHJvdG90eXBlLmdldFBvaW50PWZ1bmN0aW9uKHQsZT1uZXcgcU90KXtjb25zdCBuPWUsaT10aGlzLnYwLHI9dGhpcy52MSxvPXRoaXMudjI7cmV0dXJuIG4uc2V0KFBVdCh0LGkueCxyLngsby54KSxQVXQodCxpLnksci55LG8ueSksUFV0KHQsaS56LHIueixvLnopKSxufSxCVXQucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24odCl7cmV0dXJuIHhVdC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy52MC5jb3B5KHQudjApLHRoaXMudjEuY29weSh0LnYxKSx0aGlzLnYyLmNvcHkodC52MiksdGhpc30sQlV0LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtjb25zdCB0PXhVdC5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyk7cmV0dXJuIHQudjA9dGhpcy52MC50b0FycmF5KCksdC52MT10aGlzLnYxLnRvQXJyYXkoKSx0LnYyPXRoaXMudjIudG9BcnJheSgpLHR9LEJVdC5wcm90b3R5cGUuZnJvbUpTT049ZnVuY3Rpb24odCl7cmV0dXJuIHhVdC5wcm90b3R5cGUuZnJvbUpTT04uY2FsbCh0aGlzLHQpLHRoaXMudjAuZnJvbUFycmF5KHQudjApLHRoaXMudjEuZnJvbUFycmF5KHQudjEpLHRoaXMudjIuZnJvbUFycmF5KHQudjIpLHRoaXN9LChIVXQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeFV0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPUhVdCxIVXQucHJvdG90eXBlLmlzU3BsaW5lQ3VydmU9ITAsSFV0LnByb3RvdHlwZS5nZXRQb2ludD1mdW5jdGlvbih0LGU9bmV3IHpPdCl7Y29uc3Qgbj1lLGk9dGhpcy5wb2ludHMscj0oaS5sZW5ndGgtMSkqdCxvPU1hdGguZmxvb3IociksYT1yLW8scz1pWzA9PT1vP286by0xXSxsPWlbb10sYz1pW28+aS5sZW5ndGgtMj9pLmxlbmd0aC0xOm8rMV0sdT1pW28+aS5sZW5ndGgtMz9pLmxlbmd0aC0xOm8rMl07cmV0dXJuIG4uc2V0KExVdChhLHMueCxsLngsYy54LHUueCksTFV0KGEscy55LGwueSxjLnksdS55KSksbn0sSFV0LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHQpe3hVdC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy5wb2ludHM9W107Zm9yKGxldCBlPTAsbj10LnBvaW50cy5sZW5ndGg7ZTxuO2UrKyl0aGlzLnBvaW50cy5wdXNoKHQucG9pbnRzW2VdLmNsb25lKCkpO3JldHVybiB0aGlzfSxIVXQucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe2NvbnN0IHQ9eFV0LnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzKTt0LnBvaW50cz1bXTtmb3IobGV0IGU9MCxuPXRoaXMucG9pbnRzLmxlbmd0aDtlPG47ZSsrKXQucG9pbnRzLnB1c2godGhpcy5wb2ludHNbZV0udG9BcnJheSgpKTtyZXR1cm4gdH0sSFV0LnByb3RvdHlwZS5mcm9tSlNPTj1mdW5jdGlvbih0KXt4VXQucHJvdG90eXBlLmZyb21KU09OLmNhbGwodGhpcyx0KSx0aGlzLnBvaW50cz1bXTtmb3IobGV0IGU9MCxuPXQucG9pbnRzLmxlbmd0aDtlPG47ZSsrKXtjb25zdCBuPXQucG9pbnRzW2VdO3RoaXMucG9pbnRzLnB1c2goKG5ldyB6T3QpLmZyb21BcnJheShuKSl9cmV0dXJuIHRoaXN9O3ZhciBGVXQ9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsQXJjQ3VydmU6U1V0LENhdG11bGxSb21DdXJ2ZTM6a1V0LEN1YmljQmV6aWVyQ3VydmU6SVV0LEN1YmljQmV6aWVyQ3VydmUzOk9VdCxFbGxpcHNlQ3VydmU6d1V0LExpbmVDdXJ2ZTpSVXQsTGluZUN1cnZlMzp6VXQsUXVhZHJhdGljQmV6aWVyQ3VydmU6RFV0LFF1YWRyYXRpY0JlemllckN1cnZlMzpCVXQsU3BsaW5lQ3VydmU6SFV0fSk7ZnVuY3Rpb24gVlV0KCl7eFV0LmNhbGwodGhpcyksdGhpcy50eXBlPSJDdXJ2ZVBhdGgiLHRoaXMuY3VydmVzPVtdLHRoaXMuYXV0b0Nsb3NlPSExfWZ1bmN0aW9uIFVVdCh0KXtWVXQuY2FsbCh0aGlzKSx0aGlzLnR5cGU9IlBhdGgiLHRoaXMuY3VycmVudFBvaW50PW5ldyB6T3QsdCYmdGhpcy5zZXRGcm9tUG9pbnRzKHQpfWZ1bmN0aW9uIGpVdCh0KXtVVXQuY2FsbCh0aGlzLHQpLHRoaXMudXVpZD1ST3QuZ2VuZXJhdGVVVUlEKCksdGhpcy50eXBlPSJTaGFwZSIsdGhpcy5ob2xlcz1bXX1mdW5jdGlvbiBHVXQodCxlPTEpe1dSdC5jYWxsKHRoaXMpLHRoaXMudHlwZT0iTGlnaHQiLHRoaXMuY29sb3I9bmV3IHB6dCh0KSx0aGlzLmludGVuc2l0eT1lfWZ1bmN0aW9uIFdVdCh0LGUsbil7R1V0LmNhbGwodGhpcyx0LG4pLHRoaXMudHlwZT0iSGVtaXNwaGVyZUxpZ2h0Iix0aGlzLnBvc2l0aW9uLmNvcHkoV1J0LkRlZmF1bHRVcCksdGhpcy51cGRhdGVNYXRyaXgoKSx0aGlzLmdyb3VuZENvbG9yPW5ldyBwenQoZSl9ZnVuY3Rpb24gcVV0KHQpe3RoaXMuY2FtZXJhPXQsdGhpcy5iaWFzPTAsdGhpcy5ub3JtYWxCaWFzPTAsdGhpcy5yYWRpdXM9MSx0aGlzLm1hcFNpemU9bmV3IHpPdCg1MTIsNTEyKSx0aGlzLm1hcD1udWxsLHRoaXMubWFwUGFzcz1udWxsLHRoaXMubWF0cml4PW5ldyBiUnQsdGhpcy5hdXRvVXBkYXRlPSEwLHRoaXMubmVlZHNVcGRhdGU9ITEsdGhpcy5fZnJ1c3R1bT1uZXcgeER0LHRoaXMuX2ZyYW1lRXh0ZW50cz1uZXcgek90KDEsMSksdGhpcy5fdmlld3BvcnRDb3VudD0xLHRoaXMuX3ZpZXdwb3J0cz1bbmV3IGpPdCgwLDAsMSwxKV19ZnVuY3Rpb24gWVV0KCl7cVV0LmNhbGwodGhpcyxuZXcgcER0KDUwLDEsLjUsNTAwKSksdGhpcy5mb2N1cz0xfWZ1bmN0aW9uIFhVdCh0LGUsbixpLHIsbyl7R1V0LmNhbGwodGhpcyx0LGUpLHRoaXMudHlwZT0iU3BvdExpZ2h0Iix0aGlzLnBvc2l0aW9uLmNvcHkoV1J0LkRlZmF1bHRVcCksdGhpcy51cGRhdGVNYXRyaXgoKSx0aGlzLnRhcmdldD1uZXcgV1J0LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJwb3dlciIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmludGVuc2l0eSpNYXRoLlBJfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5pbnRlbnNpdHk9dC9NYXRoLlBJfX0pLHRoaXMuZGlzdGFuY2U9dm9pZCAwIT09bj9uOjAsdGhpcy5hbmdsZT12b2lkIDAhPT1pP2k6TWF0aC5QSS8zLHRoaXMucGVudW1icmE9dm9pZCAwIT09cj9yOjAsdGhpcy5kZWNheT12b2lkIDAhPT1vP286MSx0aGlzLnNoYWRvdz1uZXcgWVV0fWZ1bmN0aW9uICRVdCgpe3FVdC5jYWxsKHRoaXMsbmV3IHBEdCg5MCwxLC41LDUwMCkpLHRoaXMuX2ZyYW1lRXh0ZW50cz1uZXcgek90KDQsMiksdGhpcy5fdmlld3BvcnRDb3VudD02LHRoaXMuX3ZpZXdwb3J0cz1bbmV3IGpPdCgyLDEsMSwxKSxuZXcgak90KDAsMSwxLDEpLG5ldyBqT3QoMywxLDEsMSksbmV3IGpPdCgxLDEsMSwxKSxuZXcgak90KDMsMCwxLDEpLG5ldyBqT3QoMSwwLDEsMSldLHRoaXMuX2N1YmVEaXJlY3Rpb25zPVtuZXcgcU90KDEsMCwwKSxuZXcgcU90KC0xLDAsMCksbmV3IHFPdCgwLDAsMSksbmV3IHFPdCgwLDAsLTEpLG5ldyBxT3QoMCwxLDApLG5ldyBxT3QoMCwtMSwwKV0sdGhpcy5fY3ViZVVwcz1bbmV3IHFPdCgwLDEsMCksbmV3IHFPdCgwLDEsMCksbmV3IHFPdCgwLDEsMCksbmV3IHFPdCgwLDEsMCksbmV3IHFPdCgwLDAsMSksbmV3IHFPdCgwLDAsLTEpXX1mdW5jdGlvbiBLVXQodCxlLG4saSl7R1V0LmNhbGwodGhpcyx0LGUpLHRoaXMudHlwZT0iUG9pbnRMaWdodCIsT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsInBvd2VyIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDQqdGhpcy5pbnRlbnNpdHkqTWF0aC5QSX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuaW50ZW5zaXR5PXQvKDQqTWF0aC5QSSl9fSksdGhpcy5kaXN0YW5jZT12b2lkIDAhPT1uP246MCx0aGlzLmRlY2F5PXZvaWQgMCE9PWk/aToxLHRoaXMuc2hhZG93PW5ldyAkVXR9ZnVuY3Rpb24gWlV0KHQ9LTEsZT0xLG49MSxpPS0xLHI9LjEsbz0yZTMpe2REdC5jYWxsKHRoaXMpLHRoaXMudHlwZT0iT3J0aG9ncmFwaGljQ2FtZXJhIix0aGlzLnpvb209MSx0aGlzLnZpZXc9bnVsbCx0aGlzLmxlZnQ9dCx0aGlzLnJpZ2h0PWUsdGhpcy50b3A9bix0aGlzLmJvdHRvbT1pLHRoaXMubmVhcj1yLHRoaXMuZmFyPW8sdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9ZnVuY3Rpb24gSlV0KCl7cVV0LmNhbGwodGhpcyxuZXcgWlV0KC01LDUsNSwtNSwuNSw1MDApKX1mdW5jdGlvbiBRVXQodCxlKXtHVXQuY2FsbCh0aGlzLHQsZSksdGhpcy50eXBlPSJEaXJlY3Rpb25hbExpZ2h0Iix0aGlzLnBvc2l0aW9uLmNvcHkoV1J0LkRlZmF1bHRVcCksdGhpcy51cGRhdGVNYXRyaXgoKSx0aGlzLnRhcmdldD1uZXcgV1J0LHRoaXMuc2hhZG93PW5ldyBKVXR9ZnVuY3Rpb24gdGp0KHQsZSl7R1V0LmNhbGwodGhpcyx0LGUpLHRoaXMudHlwZT0iQW1iaWVudExpZ2h0In1mdW5jdGlvbiBlanQodCxlLG4saSl7R1V0LmNhbGwodGhpcyx0LGUpLHRoaXMudHlwZT0iUmVjdEFyZWFMaWdodCIsdGhpcy53aWR0aD12b2lkIDAhPT1uP246MTAsdGhpcy5oZWlnaHQ9dm9pZCAwIT09aT9pOjEwfVZVdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKHhVdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpWVXQsYWRkOmZ1bmN0aW9uKHQpe3RoaXMuY3VydmVzLnB1c2godCl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe2NvbnN0IHQ9dGhpcy5jdXJ2ZXNbMF0uZ2V0UG9pbnQoMCksZT10aGlzLmN1cnZlc1t0aGlzLmN1cnZlcy5sZW5ndGgtMV0uZ2V0UG9pbnQoMSk7dC5lcXVhbHMoZSl8fHRoaXMuY3VydmVzLnB1c2gobmV3IFJVdChlLHQpKX0sZ2V0UG9pbnQ6ZnVuY3Rpb24odCl7Y29uc3QgZT10KnRoaXMuZ2V0TGVuZ3RoKCksbj10aGlzLmdldEN1cnZlTGVuZ3RocygpO2xldCBpPTA7Zm9yKDtpPG4ubGVuZ3RoOyl7aWYobltpXT49ZSl7Y29uc3QgdD1uW2ldLWUscj10aGlzLmN1cnZlc1tpXSxvPXIuZ2V0TGVuZ3RoKCk7cmV0dXJuIHIuZ2V0UG9pbnRBdCgwPT09bz8wOjEtdC9vKX1pKyt9cmV0dXJuIG51bGx9LGdldExlbmd0aDpmdW5jdGlvbigpe2NvbnN0IHQ9dGhpcy5nZXRDdXJ2ZUxlbmd0aHMoKTtyZXR1cm4gdFt0Lmxlbmd0aC0xXX0sdXBkYXRlQXJjTGVuZ3RoczpmdW5jdGlvbigpe3RoaXMubmVlZHNVcGRhdGU9ITAsdGhpcy5jYWNoZUxlbmd0aHM9bnVsbCx0aGlzLmdldEN1cnZlTGVuZ3RocygpfSxnZXRDdXJ2ZUxlbmd0aHM6ZnVuY3Rpb24oKXtpZih0aGlzLmNhY2hlTGVuZ3RocyYmdGhpcy5jYWNoZUxlbmd0aHMubGVuZ3RoPT09dGhpcy5jdXJ2ZXMubGVuZ3RoKXJldHVybiB0aGlzLmNhY2hlTGVuZ3Rocztjb25zdCB0PVtdO2xldCBlPTA7Zm9yKGxldCBuPTAsaT10aGlzLmN1cnZlcy5sZW5ndGg7bjxpO24rKyllKz10aGlzLmN1cnZlc1tuXS5nZXRMZW5ndGgoKSx0LnB1c2goZSk7cmV0dXJuIHRoaXMuY2FjaGVMZW5ndGhzPXQsdH0sZ2V0U3BhY2VkUG9pbnRzOmZ1bmN0aW9uKHQ9NDApe2NvbnN0IGU9W107Zm9yKGxldCBuPTA7bjw9dDtuKyspZS5wdXNoKHRoaXMuZ2V0UG9pbnQobi90KSk7cmV0dXJuIHRoaXMuYXV0b0Nsb3NlJiZlLnB1c2goZVswXSksZX0sZ2V0UG9pbnRzOmZ1bmN0aW9uKHQ9MTIpe2NvbnN0IGU9W107bGV0IG47Zm9yKGxldCBpPTAscj10aGlzLmN1cnZlcztpPHIubGVuZ3RoO2krKyl7Y29uc3Qgbz1yW2ldLGE9by5nZXRQb2ludHMobyYmby5pc0VsbGlwc2VDdXJ2ZT8yKnQ6byYmKG8uaXNMaW5lQ3VydmV8fG8uaXNMaW5lQ3VydmUzKT8xOm8mJm8uaXNTcGxpbmVDdXJ2ZT90Km8ucG9pbnRzLmxlbmd0aDp0KTtmb3IobGV0IHQ9MDt0PGEubGVuZ3RoO3QrKyl7Y29uc3QgaT1hW3RdO24mJm4uZXF1YWxzKGkpfHwoZS5wdXNoKGkpLG49aSl9fXJldHVybiB0aGlzLmF1dG9DbG9zZSYmZS5sZW5ndGg+MSYmIWVbZS5sZW5ndGgtMV0uZXF1YWxzKGVbMF0pJiZlLnB1c2goZVswXSksZX0sY29weTpmdW5jdGlvbih0KXt4VXQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMuY3VydmVzPVtdO2ZvcihsZXQgZT0wLG49dC5jdXJ2ZXMubGVuZ3RoO2U8bjtlKyspdGhpcy5jdXJ2ZXMucHVzaCh0LmN1cnZlc1tlXS5jbG9uZSgpKTtyZXR1cm4gdGhpcy5hdXRvQ2xvc2U9dC5hdXRvQ2xvc2UsdGhpc30sdG9KU09OOmZ1bmN0aW9uKCl7Y29uc3QgdD14VXQucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMpO3QuYXV0b0Nsb3NlPXRoaXMuYXV0b0Nsb3NlLHQuY3VydmVzPVtdO2ZvcihsZXQgZT0wLG49dGhpcy5jdXJ2ZXMubGVuZ3RoO2U8bjtlKyspdC5jdXJ2ZXMucHVzaCh0aGlzLmN1cnZlc1tlXS50b0pTT04oKSk7cmV0dXJuIHR9LGZyb21KU09OOmZ1bmN0aW9uKHQpe3hVdC5wcm90b3R5cGUuZnJvbUpTT04uY2FsbCh0aGlzLHQpLHRoaXMuYXV0b0Nsb3NlPXQuYXV0b0Nsb3NlLHRoaXMuY3VydmVzPVtdO2ZvcihsZXQgZT0wLG49dC5jdXJ2ZXMubGVuZ3RoO2U8bjtlKyspe2NvbnN0IG49dC5jdXJ2ZXNbZV07dGhpcy5jdXJ2ZXMucHVzaCgobmV3IEZVdFtuLnR5cGVdKS5mcm9tSlNPTihuKSl9cmV0dXJuIHRoaXN9fSksVVV0LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoVlV0LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOlVVdCxzZXRGcm9tUG9pbnRzOmZ1bmN0aW9uKHQpe3RoaXMubW92ZVRvKHRbMF0ueCx0WzBdLnkpO2ZvcihsZXQgZT0xLG49dC5sZW5ndGg7ZTxuO2UrKyl0aGlzLmxpbmVUbyh0W2VdLngsdFtlXS55KTtyZXR1cm4gdGhpc30sbW92ZVRvOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuY3VycmVudFBvaW50LnNldCh0LGUpLHRoaXN9LGxpbmVUbzpmdW5jdGlvbih0LGUpe2NvbnN0IG49bmV3IFJVdCh0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpLG5ldyB6T3QodCxlKSk7cmV0dXJuIHRoaXMuY3VydmVzLnB1c2gobiksdGhpcy5jdXJyZW50UG9pbnQuc2V0KHQsZSksdGhpc30scXVhZHJhdGljQ3VydmVUbzpmdW5jdGlvbih0LGUsbixpKXtjb25zdCByPW5ldyBEVXQodGhpcy5jdXJyZW50UG9pbnQuY2xvbmUoKSxuZXcgek90KHQsZSksbmV3IHpPdChuLGkpKTtyZXR1cm4gdGhpcy5jdXJ2ZXMucHVzaChyKSx0aGlzLmN1cnJlbnRQb2ludC5zZXQobixpKSx0aGlzfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKHQsZSxuLGkscixvKXtjb25zdCBhPW5ldyBJVXQodGhpcy5jdXJyZW50UG9pbnQuY2xvbmUoKSxuZXcgek90KHQsZSksbmV3IHpPdChuLGkpLG5ldyB6T3QocixvKSk7cmV0dXJuIHRoaXMuY3VydmVzLnB1c2goYSksdGhpcy5jdXJyZW50UG9pbnQuc2V0KHIsbyksdGhpc30sc3BsaW5lVGhydTpmdW5jdGlvbih0KXtjb25zdCBlPW5ldyBIVXQoW3RoaXMuY3VycmVudFBvaW50LmNsb25lKCldLmNvbmNhdCh0KSk7cmV0dXJuIHRoaXMuY3VydmVzLnB1c2goZSksdGhpcy5jdXJyZW50UG9pbnQuY29weSh0W3QubGVuZ3RoLTFdKSx0aGlzfSxhcmM6ZnVuY3Rpb24odCxlLG4saSxyLG8pe3JldHVybiB0aGlzLmFic2FyYyh0K3RoaXMuY3VycmVudFBvaW50LngsZSt0aGlzLmN1cnJlbnRQb2ludC55LG4saSxyLG8pLHRoaXN9LGFic2FyYzpmdW5jdGlvbih0LGUsbixpLHIsbyl7cmV0dXJuIHRoaXMuYWJzZWxsaXBzZSh0LGUsbixuLGkscixvKSx0aGlzfSxlbGxpcHNlOmZ1bmN0aW9uKHQsZSxuLGkscixvLGEscyl7cmV0dXJuIHRoaXMuYWJzZWxsaXBzZSh0K3RoaXMuY3VycmVudFBvaW50LngsZSt0aGlzLmN1cnJlbnRQb2ludC55LG4saSxyLG8sYSxzKSx0aGlzfSxhYnNlbGxpcHNlOmZ1bmN0aW9uKHQsZSxuLGkscixvLGEscyl7Y29uc3QgbD1uZXcgd1V0KHQsZSxuLGkscixvLGEscyk7aWYodGhpcy5jdXJ2ZXMubGVuZ3RoPjApe2NvbnN0IHQ9bC5nZXRQb2ludCgwKTt0LmVxdWFscyh0aGlzLmN1cnJlbnRQb2ludCl8fHRoaXMubGluZVRvKHQueCx0LnkpfXRoaXMuY3VydmVzLnB1c2gobCk7Y29uc3QgYz1sLmdldFBvaW50KDEpO3JldHVybiB0aGlzLmN1cnJlbnRQb2ludC5jb3B5KGMpLHRoaXN9LGNvcHk6ZnVuY3Rpb24odCl7cmV0dXJuIFZVdC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy5jdXJyZW50UG9pbnQuY29weSh0LmN1cnJlbnRQb2ludCksdGhpc30sdG9KU09OOmZ1bmN0aW9uKCl7Y29uc3QgdD1WVXQucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMpO3JldHVybiB0LmN1cnJlbnRQb2ludD10aGlzLmN1cnJlbnRQb2ludC50b0FycmF5KCksdH0sZnJvbUpTT046ZnVuY3Rpb24odCl7cmV0dXJuIFZVdC5wcm90b3R5cGUuZnJvbUpTT04uY2FsbCh0aGlzLHQpLHRoaXMuY3VycmVudFBvaW50LmZyb21BcnJheSh0LmN1cnJlbnRQb2ludCksdGhpc319KSxqVXQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShVVXQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6alV0LGdldFBvaW50c0hvbGVzOmZ1bmN0aW9uKHQpe2NvbnN0IGU9W107Zm9yKGxldCBuPTAsaT10aGlzLmhvbGVzLmxlbmd0aDtuPGk7bisrKWVbbl09dGhpcy5ob2xlc1tuXS5nZXRQb2ludHModCk7cmV0dXJuIGV9LGV4dHJhY3RQb2ludHM6ZnVuY3Rpb24odCl7cmV0dXJue3NoYXBlOnRoaXMuZ2V0UG9pbnRzKHQpLGhvbGVzOnRoaXMuZ2V0UG9pbnRzSG9sZXModCl9fSxjb3B5OmZ1bmN0aW9uKHQpe1VVdC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy5ob2xlcz1bXTtmb3IobGV0IGU9MCxuPXQuaG9sZXMubGVuZ3RoO2U8bjtlKyspdGhpcy5ob2xlcy5wdXNoKHQuaG9sZXNbZV0uY2xvbmUoKSk7cmV0dXJuIHRoaXN9LHRvSlNPTjpmdW5jdGlvbigpe2NvbnN0IHQ9VVV0LnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzKTt0LnV1aWQ9dGhpcy51dWlkLHQuaG9sZXM9W107Zm9yKGxldCBlPTAsbj10aGlzLmhvbGVzLmxlbmd0aDtlPG47ZSsrKXQuaG9sZXMucHVzaCh0aGlzLmhvbGVzW2VdLnRvSlNPTigpKTtyZXR1cm4gdH0sZnJvbUpTT046ZnVuY3Rpb24odCl7VVV0LnByb3RvdHlwZS5mcm9tSlNPTi5jYWxsKHRoaXMsdCksdGhpcy51dWlkPXQudXVpZCx0aGlzLmhvbGVzPVtdO2ZvcihsZXQgZT0wLG49dC5ob2xlcy5sZW5ndGg7ZTxuO2UrKyl7Y29uc3Qgbj10LmhvbGVzW2VdO3RoaXMuaG9sZXMucHVzaCgobmV3IFVVdCkuZnJvbUpTT04obikpfXJldHVybiB0aGlzfX0pLEdVdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKFdSdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpHVXQsaXNMaWdodDohMCxjb3B5OmZ1bmN0aW9uKHQpe3JldHVybiBXUnQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLmludGVuc2l0eT10LmludGVuc2l0eSx0aGlzfSx0b0pTT046ZnVuY3Rpb24odCl7Y29uc3QgZT1XUnQucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMsdCk7cmV0dXJuIGUub2JqZWN0LmNvbG9yPXRoaXMuY29sb3IuZ2V0SGV4KCksZS5vYmplY3QuaW50ZW5zaXR5PXRoaXMuaW50ZW5zaXR5LHZvaWQgMCE9PXRoaXMuZ3JvdW5kQ29sb3ImJihlLm9iamVjdC5ncm91bmRDb2xvcj10aGlzLmdyb3VuZENvbG9yLmdldEhleCgpKSx2b2lkIDAhPT10aGlzLmRpc3RhbmNlJiYoZS5vYmplY3QuZGlzdGFuY2U9dGhpcy5kaXN0YW5jZSksdm9pZCAwIT09dGhpcy5hbmdsZSYmKGUub2JqZWN0LmFuZ2xlPXRoaXMuYW5nbGUpLHZvaWQgMCE9PXRoaXMuZGVjYXkmJihlLm9iamVjdC5kZWNheT10aGlzLmRlY2F5KSx2b2lkIDAhPT10aGlzLnBlbnVtYnJhJiYoZS5vYmplY3QucGVudW1icmE9dGhpcy5wZW51bWJyYSksdm9pZCAwIT09dGhpcy5zaGFkb3cmJihlLm9iamVjdC5zaGFkb3c9dGhpcy5zaGFkb3cudG9KU09OKCkpLGV9fSksV1V0LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoR1V0LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOldVdCxpc0hlbWlzcGhlcmVMaWdodDohMCxjb3B5OmZ1bmN0aW9uKHQpe3JldHVybiBHVXQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMuZ3JvdW5kQ29sb3IuY29weSh0Lmdyb3VuZENvbG9yKSx0aGlzfX0pLE9iamVjdC5hc3NpZ24ocVV0LnByb3RvdHlwZSx7X3Byb2pTY3JlZW5NYXRyaXg6bmV3IGJSdCxfbGlnaHRQb3NpdGlvbldvcmxkOm5ldyBxT3QsX2xvb2tUYXJnZXQ6bmV3IHFPdCxnZXRWaWV3cG9ydENvdW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ZpZXdwb3J0Q291bnR9LGdldEZydXN0dW06ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZnJ1c3R1bX0sdXBkYXRlTWF0cmljZXM6ZnVuY3Rpb24odCl7Y29uc3QgZT10aGlzLmNhbWVyYSxuPXRoaXMubWF0cml4LGk9dGhpcy5fcHJvalNjcmVlbk1hdHJpeCxyPXRoaXMuX2xvb2tUYXJnZXQsbz10aGlzLl9saWdodFBvc2l0aW9uV29ybGQ7by5zZXRGcm9tTWF0cml4UG9zaXRpb24odC5tYXRyaXhXb3JsZCksZS5wb3NpdGlvbi5jb3B5KG8pLHIuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHQudGFyZ2V0Lm1hdHJpeFdvcmxkKSxlLmxvb2tBdChyKSxlLnVwZGF0ZU1hdHJpeFdvcmxkKCksaS5tdWx0aXBseU1hdHJpY2VzKGUucHJvamVjdGlvbk1hdHJpeCxlLm1hdHJpeFdvcmxkSW52ZXJzZSksdGhpcy5fZnJ1c3R1bS5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeChpKSxuLnNldCguNSwwLDAsLjUsMCwuNSwwLC41LDAsMCwuNSwuNSwwLDAsMCwxKSxuLm11bHRpcGx5KGUucHJvamVjdGlvbk1hdHJpeCksbi5tdWx0aXBseShlLm1hdHJpeFdvcmxkSW52ZXJzZSl9LGdldFZpZXdwb3J0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92aWV3cG9ydHNbdF19LGdldEZyYW1lRXh0ZW50czpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9mcmFtZUV4dGVudHN9LGNvcHk6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2FtZXJhPXQuY2FtZXJhLmNsb25lKCksdGhpcy5iaWFzPXQuYmlhcyx0aGlzLnJhZGl1cz10LnJhZGl1cyx0aGlzLm1hcFNpemUuY29weSh0Lm1hcFNpemUpLHRoaXN9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfSx0b0pTT046ZnVuY3Rpb24oKXtjb25zdCB0PXt9O3JldHVybiAwIT09dGhpcy5iaWFzJiYodC5iaWFzPXRoaXMuYmlhcyksMCE9PXRoaXMubm9ybWFsQmlhcyYmKHQubm9ybWFsQmlhcz10aGlzLm5vcm1hbEJpYXMpLDEhPT10aGlzLnJhZGl1cyYmKHQucmFkaXVzPXRoaXMucmFkaXVzKSw1MTI9PT10aGlzLm1hcFNpemUueCYmNTEyPT09dGhpcy5tYXBTaXplLnl8fCh0Lm1hcFNpemU9dGhpcy5tYXBTaXplLnRvQXJyYXkoKSksdC5jYW1lcmE9dGhpcy5jYW1lcmEudG9KU09OKCExKS5vYmplY3QsZGVsZXRlIHQuY2FtZXJhLm1hdHJpeCx0fX0pLFlVdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKHFVdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpZVXQsaXNTcG90TGlnaHRTaGFkb3c6ITAsdXBkYXRlTWF0cmljZXM6ZnVuY3Rpb24odCl7Y29uc3QgZT10aGlzLmNhbWVyYSxuPTIqUk90LlJBRDJERUcqdC5hbmdsZSp0aGlzLmZvY3VzLGk9dGhpcy5tYXBTaXplLndpZHRoL3RoaXMubWFwU2l6ZS5oZWlnaHQscj10LmRpc3RhbmNlfHxlLmZhcjtuPT09ZS5mb3YmJmk9PT1lLmFzcGVjdCYmcj09PWUuZmFyfHwoZS5mb3Y9bixlLmFzcGVjdD1pLGUuZmFyPXIsZS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCkpLHFVdC5wcm90b3R5cGUudXBkYXRlTWF0cmljZXMuY2FsbCh0aGlzLHQpfX0pLFhVdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKEdVdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpYVXQsaXNTcG90TGlnaHQ6ITAsY29weTpmdW5jdGlvbih0KXtyZXR1cm4gR1V0LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLmRpc3RhbmNlPXQuZGlzdGFuY2UsdGhpcy5hbmdsZT10LmFuZ2xlLHRoaXMucGVudW1icmE9dC5wZW51bWJyYSx0aGlzLmRlY2F5PXQuZGVjYXksdGhpcy50YXJnZXQ9dC50YXJnZXQuY2xvbmUoKSx0aGlzLnNoYWRvdz10LnNoYWRvdy5jbG9uZSgpLHRoaXN9fSksJFV0LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUocVV0LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOiRVdCxpc1BvaW50TGlnaHRTaGFkb3c6ITAsdXBkYXRlTWF0cmljZXM6ZnVuY3Rpb24odCxlPTApe2NvbnN0IG49dGhpcy5jYW1lcmEsaT10aGlzLm1hdHJpeCxyPXRoaXMuX2xpZ2h0UG9zaXRpb25Xb3JsZCxvPXRoaXMuX2xvb2tUYXJnZXQsYT10aGlzLl9wcm9qU2NyZWVuTWF0cml4O3Iuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHQubWF0cml4V29ybGQpLG4ucG9zaXRpb24uY29weShyKSxvLmNvcHkobi5wb3NpdGlvbiksby5hZGQodGhpcy5fY3ViZURpcmVjdGlvbnNbZV0pLG4udXAuY29weSh0aGlzLl9jdWJlVXBzW2VdKSxuLmxvb2tBdChvKSxuLnVwZGF0ZU1hdHJpeFdvcmxkKCksaS5tYWtlVHJhbnNsYXRpb24oLXIueCwtci55LC1yLnopLGEubXVsdGlwbHlNYXRyaWNlcyhuLnByb2plY3Rpb25NYXRyaXgsbi5tYXRyaXhXb3JsZEludmVyc2UpLHRoaXMuX2ZydXN0dW0uc2V0RnJvbVByb2plY3Rpb25NYXRyaXgoYSl9fSksS1V0LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoR1V0LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOktVdCxpc1BvaW50TGlnaHQ6ITAsY29weTpmdW5jdGlvbih0KXtyZXR1cm4gR1V0LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLmRpc3RhbmNlPXQuZGlzdGFuY2UsdGhpcy5kZWNheT10LmRlY2F5LHRoaXMuc2hhZG93PXQuc2hhZG93LmNsb25lKCksdGhpc319KSxaVXQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShkRHQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6WlV0LGlzT3J0aG9ncmFwaGljQ2FtZXJhOiEwLGNvcHk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZER0LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0LGUpLHRoaXMubGVmdD10LmxlZnQsdGhpcy5yaWdodD10LnJpZ2h0LHRoaXMudG9wPXQudG9wLHRoaXMuYm90dG9tPXQuYm90dG9tLHRoaXMubmVhcj10Lm5lYXIsdGhpcy5mYXI9dC5mYXIsdGhpcy56b29tPXQuem9vbSx0aGlzLnZpZXc9bnVsbD09PXQudmlldz9udWxsOk9iamVjdC5hc3NpZ24oe30sdC52aWV3KSx0aGlzfSxzZXRWaWV3T2Zmc2V0OmZ1bmN0aW9uKHQsZSxuLGkscixvKXtudWxsPT09dGhpcy52aWV3JiYodGhpcy52aWV3PXtlbmFibGVkOiEwLGZ1bGxXaWR0aDoxLGZ1bGxIZWlnaHQ6MSxvZmZzZXRYOjAsb2Zmc2V0WTowLHdpZHRoOjEsaGVpZ2h0OjF9KSx0aGlzLnZpZXcuZW5hYmxlZD0hMCx0aGlzLnZpZXcuZnVsbFdpZHRoPXQsdGhpcy52aWV3LmZ1bGxIZWlnaHQ9ZSx0aGlzLnZpZXcub2Zmc2V0WD1uLHRoaXMudmlldy5vZmZzZXRZPWksdGhpcy52aWV3LndpZHRoPXIsdGhpcy52aWV3LmhlaWdodD1vLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfSxjbGVhclZpZXdPZmZzZXQ6ZnVuY3Rpb24oKXtudWxsIT09dGhpcy52aWV3JiYodGhpcy52aWV3LmVuYWJsZWQ9ITEpLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfSx1cGRhdGVQcm9qZWN0aW9uTWF0cml4OmZ1bmN0aW9uKCl7Y29uc3QgdD0odGhpcy5yaWdodC10aGlzLmxlZnQpLygyKnRoaXMuem9vbSksZT0odGhpcy50b3AtdGhpcy5ib3R0b20pLygyKnRoaXMuem9vbSksbj0odGhpcy5yaWdodCt0aGlzLmxlZnQpLzIsaT0odGhpcy50b3ArdGhpcy5ib3R0b20pLzI7bGV0IHI9bi10LG89bit0LGE9aStlLHM9aS1lO2lmKG51bGwhPT10aGlzLnZpZXcmJnRoaXMudmlldy5lbmFibGVkKXtjb25zdCB0PSh0aGlzLnJpZ2h0LXRoaXMubGVmdCkvdGhpcy52aWV3LmZ1bGxXaWR0aC90aGlzLnpvb20sZT0odGhpcy50b3AtdGhpcy5ib3R0b20pL3RoaXMudmlldy5mdWxsSGVpZ2h0L3RoaXMuem9vbTtyKz10KnRoaXMudmlldy5vZmZzZXRYLG89cit0KnRoaXMudmlldy53aWR0aCxhLT1lKnRoaXMudmlldy5vZmZzZXRZLHM9YS1lKnRoaXMudmlldy5oZWlnaHR9dGhpcy5wcm9qZWN0aW9uTWF0cml4Lm1ha2VPcnRob2dyYXBoaWMocixvLGEscyx0aGlzLm5lYXIsdGhpcy5mYXIpLHRoaXMucHJvamVjdGlvbk1hdHJpeEludmVyc2UuY29weSh0aGlzLnByb2plY3Rpb25NYXRyaXgpLmludmVydCgpfSx0b0pTT046ZnVuY3Rpb24odCl7Y29uc3QgZT1XUnQucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMsdCk7cmV0dXJuIGUub2JqZWN0Lnpvb209dGhpcy56b29tLGUub2JqZWN0LmxlZnQ9dGhpcy5sZWZ0LGUub2JqZWN0LnJpZ2h0PXRoaXMucmlnaHQsZS5vYmplY3QudG9wPXRoaXMudG9wLGUub2JqZWN0LmJvdHRvbT10aGlzLmJvdHRvbSxlLm9iamVjdC5uZWFyPXRoaXMubmVhcixlLm9iamVjdC5mYXI9dGhpcy5mYXIsbnVsbCE9PXRoaXMudmlldyYmKGUub2JqZWN0LnZpZXc9T2JqZWN0LmFzc2lnbih7fSx0aGlzLnZpZXcpKSxlfX0pLEpVdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKHFVdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpKVXQsaXNEaXJlY3Rpb25hbExpZ2h0U2hhZG93OiEwLHVwZGF0ZU1hdHJpY2VzOmZ1bmN0aW9uKHQpe3FVdC5wcm90b3R5cGUudXBkYXRlTWF0cmljZXMuY2FsbCh0aGlzLHQpfX0pLFFVdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKEdVdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpRVXQsaXNEaXJlY3Rpb25hbExpZ2h0OiEwLGNvcHk6ZnVuY3Rpb24odCl7cmV0dXJuIEdVdC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy50YXJnZXQ9dC50YXJnZXQuY2xvbmUoKSx0aGlzLnNoYWRvdz10LnNoYWRvdy5jbG9uZSgpLHRoaXN9fSksdGp0LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoR1V0LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOnRqdCxpc0FtYmllbnRMaWdodDohMH0pLGVqdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKEdVdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjplanQsaXNSZWN0QXJlYUxpZ2h0OiEwLGNvcHk6ZnVuY3Rpb24odCl7cmV0dXJuIEdVdC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy53aWR0aD10LndpZHRoLHRoaXMuaGVpZ2h0PXQuaGVpZ2h0LHRoaXN9LHRvSlNPTjpmdW5jdGlvbih0KXtjb25zdCBlPUdVdC5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyx0KTtyZXR1cm4gZS5vYmplY3Qud2lkdGg9dGhpcy53aWR0aCxlLm9iamVjdC5oZWlnaHQ9dGhpcy5oZWlnaHQsZX19KTtjbGFzcyBuanR7Y29uc3RydWN0b3IoKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaXNTcGhlcmljYWxIYXJtb25pY3MzIix7dmFsdWU6ITB9KSx0aGlzLmNvZWZmaWNpZW50cz1bXTtmb3IobGV0IHQ9MDt0PDk7dCsrKXRoaXMuY29lZmZpY2llbnRzLnB1c2gobmV3IHFPdCl9c2V0KHQpe2ZvcihsZXQgZT0wO2U8OTtlKyspdGhpcy5jb2VmZmljaWVudHNbZV0uY29weSh0W2VdKTtyZXR1cm4gdGhpc316ZXJvKCl7Zm9yKGxldCB0PTA7dDw5O3QrKyl0aGlzLmNvZWZmaWNpZW50c1t0XS5zZXQoMCwwLDApO3JldHVybiB0aGlzfWdldEF0KHQsZSl7Y29uc3Qgbj10LngsaT10Lnkscj10Lnosbz10aGlzLmNvZWZmaWNpZW50cztyZXR1cm4gZS5jb3B5KG9bMF0pLm11bHRpcGx5U2NhbGFyKC4yODIwOTUpLGUuYWRkU2NhbGVkVmVjdG9yKG9bMV0sLjQ4ODYwMyppKSxlLmFkZFNjYWxlZFZlY3RvcihvWzJdLC40ODg2MDMqciksZS5hZGRTY2FsZWRWZWN0b3Iob1szXSwuNDg4NjAzKm4pLGUuYWRkU2NhbGVkVmVjdG9yKG9bNF0sbippKjEuMDkyNTQ4KSxlLmFkZFNjYWxlZFZlY3RvcihvWzVdLGkqcioxLjA5MjU0OCksZS5hZGRTY2FsZWRWZWN0b3Iob1s2XSwuMzE1MzkyKigzKnIqci0xKSksZS5hZGRTY2FsZWRWZWN0b3Iob1s3XSxuKnIqMS4wOTI1NDgpLGUuYWRkU2NhbGVkVmVjdG9yKG9bOF0sLjU0NjI3NCoobipuLWkqaSkpLGV9Z2V0SXJyYWRpYW5jZUF0KHQsZSl7Y29uc3Qgbj10LngsaT10Lnkscj10Lnosbz10aGlzLmNvZWZmaWNpZW50cztyZXR1cm4gZS5jb3B5KG9bMF0pLm11bHRpcGx5U2NhbGFyKC44ODYyMjcpLGUuYWRkU2NhbGVkVmVjdG9yKG9bMV0sMS4wMjMzMjgqaSksZS5hZGRTY2FsZWRWZWN0b3Iob1syXSwxLjAyMzMyOCpyKSxlLmFkZFNjYWxlZFZlY3RvcihvWzNdLDEuMDIzMzI4Km4pLGUuYWRkU2NhbGVkVmVjdG9yKG9bNF0sLjg1ODA4NipuKmkpLGUuYWRkU2NhbGVkVmVjdG9yKG9bNV0sLjg1ODA4NippKnIpLGUuYWRkU2NhbGVkVmVjdG9yKG9bNl0sLjc0MzEyNSpyKnItLjI0NzcwOCksZS5hZGRTY2FsZWRWZWN0b3Iob1s3XSwuODU4MDg2Km4qciksZS5hZGRTY2FsZWRWZWN0b3Iob1s4XSwuNDI5MDQzKihuKm4taSppKSksZX1hZGQodCl7Zm9yKGxldCBlPTA7ZTw5O2UrKyl0aGlzLmNvZWZmaWNpZW50c1tlXS5hZGQodC5jb2VmZmljaWVudHNbZV0pO3JldHVybiB0aGlzfWFkZFNjYWxlZFNIKHQsZSl7Zm9yKGxldCBuPTA7bjw5O24rKyl0aGlzLmNvZWZmaWNpZW50c1tuXS5hZGRTY2FsZWRWZWN0b3IodC5jb2VmZmljaWVudHNbbl0sZSk7cmV0dXJuIHRoaXN9c2NhbGUodCl7Zm9yKGxldCBlPTA7ZTw5O2UrKyl0aGlzLmNvZWZmaWNpZW50c1tlXS5tdWx0aXBseVNjYWxhcih0KTtyZXR1cm4gdGhpc31sZXJwKHQsZSl7Zm9yKGxldCBuPTA7bjw5O24rKyl0aGlzLmNvZWZmaWNpZW50c1tuXS5sZXJwKHQuY29lZmZpY2llbnRzW25dLGUpO3JldHVybiB0aGlzfWVxdWFscyh0KXtmb3IobGV0IGU9MDtlPDk7ZSsrKWlmKCF0aGlzLmNvZWZmaWNpZW50c1tlXS5lcXVhbHModC5jb2VmZmljaWVudHNbZV0pKXJldHVybiExO3JldHVybiEwfWNvcHkodCl7cmV0dXJuIHRoaXMuc2V0KHQuY29lZmZpY2llbnRzKX1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX1mcm9tQXJyYXkodCxlPTApe2NvbnN0IG49dGhpcy5jb2VmZmljaWVudHM7Zm9yKGxldCBpPTA7aTw5O2krKyluW2ldLmZyb21BcnJheSh0LGUrMyppKTtyZXR1cm4gdGhpc310b0FycmF5KHQ9W10sZT0wKXtjb25zdCBuPXRoaXMuY29lZmZpY2llbnRzO2ZvcihsZXQgaT0wO2k8OTtpKyspbltpXS50b0FycmF5KHQsZSszKmkpO3JldHVybiB0fXN0YXRpYyBnZXRCYXNpc0F0KHQsZSl7Y29uc3Qgbj10LngsaT10Lnkscj10Lno7ZVswXT0uMjgyMDk1LGVbMV09LjQ4ODYwMyppLGVbMl09LjQ4ODYwMypyLGVbM109LjQ4ODYwMypuLGVbNF09MS4wOTI1NDgqbippLGVbNV09MS4wOTI1NDgqaSpyLGVbNl09LjMxNTM5MiooMypyKnItMSksZVs3XT0xLjA5MjU0OCpuKnIsZVs4XT0uNTQ2Mjc0KihuKm4taSppKX19ZnVuY3Rpb24gaWp0KHQsZSl7R1V0LmNhbGwodGhpcyx2b2lkIDAsZSksdGhpcy50eXBlPSJMaWdodFByb2JlIix0aGlzLnNoPXZvaWQgMCE9PXQ/dDpuZXcgbmp0fWZ1bmN0aW9uIHJqdCh0KXtkVXQuY2FsbCh0aGlzLHQpLHRoaXMudGV4dHVyZXM9e319aWp0LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoR1V0LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOmlqdCxpc0xpZ2h0UHJvYmU6ITAsY29weTpmdW5jdGlvbih0KXtyZXR1cm4gR1V0LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLnNoLmNvcHkodC5zaCksdGhpc30sZnJvbUpTT046ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5PXQuaW50ZW5zaXR5LHRoaXMuc2guZnJvbUFycmF5KHQuc2gpLHRoaXN9LHRvSlNPTjpmdW5jdGlvbih0KXtjb25zdCBlPUdVdC5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyx0KTtyZXR1cm4gZS5vYmplY3Quc2g9dGhpcy5zaC50b0FycmF5KCksZX19KSxyanQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShkVXQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6cmp0LGxvYWQ6ZnVuY3Rpb24odCxlLG4saSl7Y29uc3Qgcj10aGlzLG89bmV3IGZVdChyLm1hbmFnZXIpO28uc2V0UGF0aChyLnBhdGgpLG8uc2V0UmVxdWVzdEhlYWRlcihyLnJlcXVlc3RIZWFkZXIpLG8uc2V0V2l0aENyZWRlbnRpYWxzKHIud2l0aENyZWRlbnRpYWxzKSxvLmxvYWQodCwoZnVuY3Rpb24obil7dHJ5e2Uoci5wYXJzZShKU09OLnBhcnNlKG4pKSl9Y2F0Y2goZSl7aT9pKGUpOmNvbnNvbGUuZXJyb3IoZSksci5tYW5hZ2VyLml0ZW1FcnJvcih0KX19KSxuLGkpfSxwYXJzZTpmdW5jdGlvbih0KXtjb25zdCBlPXRoaXMudGV4dHVyZXM7ZnVuY3Rpb24gbih0KXtyZXR1cm4gdm9pZCAwPT09ZVt0XSYmY29uc29sZS53YXJuKCJUSFJFRS5NYXRlcmlhbExvYWRlcjogVW5kZWZpbmVkIHRleHR1cmUiLHQpLGVbdF19Y29uc3QgaT1uZXcgWVZ0W3QudHlwZV07aWYodm9pZCAwIT09dC51dWlkJiYoaS51dWlkPXQudXVpZCksdm9pZCAwIT09dC5uYW1lJiYoaS5uYW1lPXQubmFtZSksdm9pZCAwIT09dC5jb2xvciYmdm9pZCAwIT09aS5jb2xvciYmaS5jb2xvci5zZXRIZXgodC5jb2xvciksdm9pZCAwIT09dC5yb3VnaG5lc3MmJihpLnJvdWdobmVzcz10LnJvdWdobmVzcyksdm9pZCAwIT09dC5tZXRhbG5lc3MmJihpLm1ldGFsbmVzcz10Lm1ldGFsbmVzcyksdm9pZCAwIT09dC5zaGVlbiYmKGkuc2hlZW49KG5ldyBwenQpLnNldEhleCh0LnNoZWVuKSksdm9pZCAwIT09dC5lbWlzc2l2ZSYmdm9pZCAwIT09aS5lbWlzc2l2ZSYmaS5lbWlzc2l2ZS5zZXRIZXgodC5lbWlzc2l2ZSksdm9pZCAwIT09dC5zcGVjdWxhciYmdm9pZCAwIT09aS5zcGVjdWxhciYmaS5zcGVjdWxhci5zZXRIZXgodC5zcGVjdWxhciksdm9pZCAwIT09dC5zaGluaW5lc3MmJihpLnNoaW5pbmVzcz10LnNoaW5pbmVzcyksdm9pZCAwIT09dC5jbGVhcmNvYXQmJihpLmNsZWFyY29hdD10LmNsZWFyY29hdCksdm9pZCAwIT09dC5jbGVhcmNvYXRSb3VnaG5lc3MmJihpLmNsZWFyY29hdFJvdWdobmVzcz10LmNsZWFyY29hdFJvdWdobmVzcyksdm9pZCAwIT09dC5mb2cmJihpLmZvZz10LmZvZyksdm9pZCAwIT09dC5mbGF0U2hhZGluZyYmKGkuZmxhdFNoYWRpbmc9dC5mbGF0U2hhZGluZyksdm9pZCAwIT09dC5ibGVuZGluZyYmKGkuYmxlbmRpbmc9dC5ibGVuZGluZyksdm9pZCAwIT09dC5jb21iaW5lJiYoaS5jb21iaW5lPXQuY29tYmluZSksdm9pZCAwIT09dC5zaWRlJiYoaS5zaWRlPXQuc2lkZSksdm9pZCAwIT09dC5vcGFjaXR5JiYoaS5vcGFjaXR5PXQub3BhY2l0eSksdm9pZCAwIT09dC50cmFuc3BhcmVudCYmKGkudHJhbnNwYXJlbnQ9dC50cmFuc3BhcmVudCksdm9pZCAwIT09dC5hbHBoYVRlc3QmJihpLmFscGhhVGVzdD10LmFscGhhVGVzdCksdm9pZCAwIT09dC5kZXB0aFRlc3QmJihpLmRlcHRoVGVzdD10LmRlcHRoVGVzdCksdm9pZCAwIT09dC5kZXB0aFdyaXRlJiYoaS5kZXB0aFdyaXRlPXQuZGVwdGhXcml0ZSksdm9pZCAwIT09dC5jb2xvcldyaXRlJiYoaS5jb2xvcldyaXRlPXQuY29sb3JXcml0ZSksdm9pZCAwIT09dC5zdGVuY2lsV3JpdGUmJihpLnN0ZW5jaWxXcml0ZT10LnN0ZW5jaWxXcml0ZSksdm9pZCAwIT09dC5zdGVuY2lsV3JpdGVNYXNrJiYoaS5zdGVuY2lsV3JpdGVNYXNrPXQuc3RlbmNpbFdyaXRlTWFzayksdm9pZCAwIT09dC5zdGVuY2lsRnVuYyYmKGkuc3RlbmNpbEZ1bmM9dC5zdGVuY2lsRnVuYyksdm9pZCAwIT09dC5zdGVuY2lsUmVmJiYoaS5zdGVuY2lsUmVmPXQuc3RlbmNpbFJlZiksdm9pZCAwIT09dC5zdGVuY2lsRnVuY01hc2smJihpLnN0ZW5jaWxGdW5jTWFzaz10LnN0ZW5jaWxGdW5jTWFzayksdm9pZCAwIT09dC5zdGVuY2lsRmFpbCYmKGkuc3RlbmNpbEZhaWw9dC5zdGVuY2lsRmFpbCksdm9pZCAwIT09dC5zdGVuY2lsWkZhaWwmJihpLnN0ZW5jaWxaRmFpbD10LnN0ZW5jaWxaRmFpbCksdm9pZCAwIT09dC5zdGVuY2lsWlBhc3MmJihpLnN0ZW5jaWxaUGFzcz10LnN0ZW5jaWxaUGFzcyksdm9pZCAwIT09dC53aXJlZnJhbWUmJihpLndpcmVmcmFtZT10LndpcmVmcmFtZSksdm9pZCAwIT09dC53aXJlZnJhbWVMaW5ld2lkdGgmJihpLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCksdm9pZCAwIT09dC53aXJlZnJhbWVMaW5lY2FwJiYoaS53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCksdm9pZCAwIT09dC53aXJlZnJhbWVMaW5lam9pbiYmKGkud2lyZWZyYW1lTGluZWpvaW49dC53aXJlZnJhbWVMaW5lam9pbiksdm9pZCAwIT09dC5yb3RhdGlvbiYmKGkucm90YXRpb249dC5yb3RhdGlvbiksMSE9PXQubGluZXdpZHRoJiYoaS5saW5ld2lkdGg9dC5saW5ld2lkdGgpLHZvaWQgMCE9PXQuZGFzaFNpemUmJihpLmRhc2hTaXplPXQuZGFzaFNpemUpLHZvaWQgMCE9PXQuZ2FwU2l6ZSYmKGkuZ2FwU2l6ZT10LmdhcFNpemUpLHZvaWQgMCE9PXQuc2NhbGUmJihpLnNjYWxlPXQuc2NhbGUpLHZvaWQgMCE9PXQucG9seWdvbk9mZnNldCYmKGkucG9seWdvbk9mZnNldD10LnBvbHlnb25PZmZzZXQpLHZvaWQgMCE9PXQucG9seWdvbk9mZnNldEZhY3RvciYmKGkucG9seWdvbk9mZnNldEZhY3Rvcj10LnBvbHlnb25PZmZzZXRGYWN0b3IpLHZvaWQgMCE9PXQucG9seWdvbk9mZnNldFVuaXRzJiYoaS5wb2x5Z29uT2Zmc2V0VW5pdHM9dC5wb2x5Z29uT2Zmc2V0VW5pdHMpLHZvaWQgMCE9PXQuc2tpbm5pbmcmJihpLnNraW5uaW5nPXQuc2tpbm5pbmcpLHZvaWQgMCE9PXQubW9ycGhUYXJnZXRzJiYoaS5tb3JwaFRhcmdldHM9dC5tb3JwaFRhcmdldHMpLHZvaWQgMCE9PXQubW9ycGhOb3JtYWxzJiYoaS5tb3JwaE5vcm1hbHM9dC5tb3JwaE5vcm1hbHMpLHZvaWQgMCE9PXQuZGl0aGVyaW5nJiYoaS5kaXRoZXJpbmc9dC5kaXRoZXJpbmcpLHZvaWQgMCE9PXQudmVydGV4VGFuZ2VudHMmJihpLnZlcnRleFRhbmdlbnRzPXQudmVydGV4VGFuZ2VudHMpLHZvaWQgMCE9PXQudmlzaWJsZSYmKGkudmlzaWJsZT10LnZpc2libGUpLHZvaWQgMCE9PXQudG9uZU1hcHBlZCYmKGkudG9uZU1hcHBlZD10LnRvbmVNYXBwZWQpLHZvaWQgMCE9PXQudXNlckRhdGEmJihpLnVzZXJEYXRhPXQudXNlckRhdGEpLHZvaWQgMCE9PXQudmVydGV4Q29sb3JzJiYoaS52ZXJ0ZXhDb2xvcnM9Im51bWJlciI9PXR5cGVvZiB0LnZlcnRleENvbG9ycz90LnZlcnRleENvbG9ycz4wOnQudmVydGV4Q29sb3JzKSx2b2lkIDAhPT10LnVuaWZvcm1zKWZvcihjb25zdCBlIGluIHQudW5pZm9ybXMpe2NvbnN0IHI9dC51bmlmb3Jtc1tlXTtzd2l0Y2goaS51bmlmb3Jtc1tlXT17fSxyLnR5cGUpe2Nhc2UidCI6aS51bmlmb3Jtc1tlXS52YWx1ZT1uKHIudmFsdWUpO2JyZWFrO2Nhc2UiYyI6aS51bmlmb3Jtc1tlXS52YWx1ZT0obmV3IHB6dCkuc2V0SGV4KHIudmFsdWUpO2JyZWFrO2Nhc2UidjIiOmkudW5pZm9ybXNbZV0udmFsdWU9KG5ldyB6T3QpLmZyb21BcnJheShyLnZhbHVlKTticmVhaztjYXNlInYzIjppLnVuaWZvcm1zW2VdLnZhbHVlPShuZXcgcU90KS5mcm9tQXJyYXkoci52YWx1ZSk7YnJlYWs7Y2FzZSJ2NCI6aS51bmlmb3Jtc1tlXS52YWx1ZT0obmV3IGpPdCkuZnJvbUFycmF5KHIudmFsdWUpO2JyZWFrO2Nhc2UibTMiOmkudW5pZm9ybXNbZV0udmFsdWU9KG5ldyBET3QpLmZyb21BcnJheShyLnZhbHVlKTticmVhaztjYXNlIm00IjppLnVuaWZvcm1zW2VdLnZhbHVlPShuZXcgYlJ0KS5mcm9tQXJyYXkoci52YWx1ZSk7YnJlYWs7ZGVmYXVsdDppLnVuaWZvcm1zW2VdLnZhbHVlPXIudmFsdWV9fWlmKHZvaWQgMCE9PXQuZGVmaW5lcyYmKGkuZGVmaW5lcz10LmRlZmluZXMpLHZvaWQgMCE9PXQudmVydGV4U2hhZGVyJiYoaS52ZXJ0ZXhTaGFkZXI9dC52ZXJ0ZXhTaGFkZXIpLHZvaWQgMCE9PXQuZnJhZ21lbnRTaGFkZXImJihpLmZyYWdtZW50U2hhZGVyPXQuZnJhZ21lbnRTaGFkZXIpLHZvaWQgMCE9PXQuZXh0ZW5zaW9ucylmb3IoY29uc3QgZSBpbiB0LmV4dGVuc2lvbnMpaS5leHRlbnNpb25zW2VdPXQuZXh0ZW5zaW9uc1tlXTtpZih2b2lkIDAhPT10LnNoYWRpbmcmJihpLmZsYXRTaGFkaW5nPTE9PT10LnNoYWRpbmcpLHZvaWQgMCE9PXQuc2l6ZSYmKGkuc2l6ZT10LnNpemUpLHZvaWQgMCE9PXQuc2l6ZUF0dGVudWF0aW9uJiYoaS5zaXplQXR0ZW51YXRpb249dC5zaXplQXR0ZW51YXRpb24pLHZvaWQgMCE9PXQubWFwJiYoaS5tYXA9bih0Lm1hcCkpLHZvaWQgMCE9PXQubWF0Y2FwJiYoaS5tYXRjYXA9bih0Lm1hdGNhcCkpLHZvaWQgMCE9PXQuYWxwaGFNYXAmJihpLmFscGhhTWFwPW4odC5hbHBoYU1hcCkpLHZvaWQgMCE9PXQuYnVtcE1hcCYmKGkuYnVtcE1hcD1uKHQuYnVtcE1hcCkpLHZvaWQgMCE9PXQuYnVtcFNjYWxlJiYoaS5idW1wU2NhbGU9dC5idW1wU2NhbGUpLHZvaWQgMCE9PXQubm9ybWFsTWFwJiYoaS5ub3JtYWxNYXA9bih0Lm5vcm1hbE1hcCkpLHZvaWQgMCE9PXQubm9ybWFsTWFwVHlwZSYmKGkubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUpLHZvaWQgMCE9PXQubm9ybWFsU2NhbGUpe2xldCBlPXQubm9ybWFsU2NhbGU7ITE9PT1BcnJheS5pc0FycmF5KGUpJiYoZT1bZSxlXSksaS5ub3JtYWxTY2FsZT0obmV3IHpPdCkuZnJvbUFycmF5KGUpfXJldHVybiB2b2lkIDAhPT10LmRpc3BsYWNlbWVudE1hcCYmKGkuZGlzcGxhY2VtZW50TWFwPW4odC5kaXNwbGFjZW1lbnRNYXApKSx2b2lkIDAhPT10LmRpc3BsYWNlbWVudFNjYWxlJiYoaS5kaXNwbGFjZW1lbnRTY2FsZT10LmRpc3BsYWNlbWVudFNjYWxlKSx2b2lkIDAhPT10LmRpc3BsYWNlbWVudEJpYXMmJihpLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzKSx2b2lkIDAhPT10LnJvdWdobmVzc01hcCYmKGkucm91Z2huZXNzTWFwPW4odC5yb3VnaG5lc3NNYXApKSx2b2lkIDAhPT10Lm1ldGFsbmVzc01hcCYmKGkubWV0YWxuZXNzTWFwPW4odC5tZXRhbG5lc3NNYXApKSx2b2lkIDAhPT10LmVtaXNzaXZlTWFwJiYoaS5lbWlzc2l2ZU1hcD1uKHQuZW1pc3NpdmVNYXApKSx2b2lkIDAhPT10LmVtaXNzaXZlSW50ZW5zaXR5JiYoaS5lbWlzc2l2ZUludGVuc2l0eT10LmVtaXNzaXZlSW50ZW5zaXR5KSx2b2lkIDAhPT10LnNwZWN1bGFyTWFwJiYoaS5zcGVjdWxhck1hcD1uKHQuc3BlY3VsYXJNYXApKSx2b2lkIDAhPT10LmVudk1hcCYmKGkuZW52TWFwPW4odC5lbnZNYXApKSx2b2lkIDAhPT10LmVudk1hcEludGVuc2l0eSYmKGkuZW52TWFwSW50ZW5zaXR5PXQuZW52TWFwSW50ZW5zaXR5KSx2b2lkIDAhPT10LnJlZmxlY3Rpdml0eSYmKGkucmVmbGVjdGl2aXR5PXQucmVmbGVjdGl2aXR5KSx2b2lkIDAhPT10LnJlZnJhY3Rpb25SYXRpbyYmKGkucmVmcmFjdGlvblJhdGlvPXQucmVmcmFjdGlvblJhdGlvKSx2b2lkIDAhPT10LmxpZ2h0TWFwJiYoaS5saWdodE1hcD1uKHQubGlnaHRNYXApKSx2b2lkIDAhPT10LmxpZ2h0TWFwSW50ZW5zaXR5JiYoaS5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5KSx2b2lkIDAhPT10LmFvTWFwJiYoaS5hb01hcD1uKHQuYW9NYXApKSx2b2lkIDAhPT10LmFvTWFwSW50ZW5zaXR5JiYoaS5hb01hcEludGVuc2l0eT10LmFvTWFwSW50ZW5zaXR5KSx2b2lkIDAhPT10LmdyYWRpZW50TWFwJiYoaS5ncmFkaWVudE1hcD1uKHQuZ3JhZGllbnRNYXApKSx2b2lkIDAhPT10LmNsZWFyY29hdE1hcCYmKGkuY2xlYXJjb2F0TWFwPW4odC5jbGVhcmNvYXRNYXApKSx2b2lkIDAhPT10LmNsZWFyY29hdFJvdWdobmVzc01hcCYmKGkuY2xlYXJjb2F0Um91Z2huZXNzTWFwPW4odC5jbGVhcmNvYXRSb3VnaG5lc3NNYXApKSx2b2lkIDAhPT10LmNsZWFyY29hdE5vcm1hbE1hcCYmKGkuY2xlYXJjb2F0Tm9ybWFsTWFwPW4odC5jbGVhcmNvYXROb3JtYWxNYXApKSx2b2lkIDAhPT10LmNsZWFyY29hdE5vcm1hbFNjYWxlJiYoaS5jbGVhcmNvYXROb3JtYWxTY2FsZT0obmV3IHpPdCkuZnJvbUFycmF5KHQuY2xlYXJjb2F0Tm9ybWFsU2NhbGUpKSx2b2lkIDAhPT10LnRyYW5zbWlzc2lvbiYmKGkudHJhbnNtaXNzaW9uPXQudHJhbnNtaXNzaW9uKSx2b2lkIDAhPT10LnRyYW5zbWlzc2lvbk1hcCYmKGkudHJhbnNtaXNzaW9uTWFwPW4odC50cmFuc21pc3Npb25NYXApKSxpfSxzZXRUZXh0dXJlczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50ZXh0dXJlcz10LHRoaXN9fSk7Y29uc3Qgb2p0PXtkZWNvZGVUZXh0OmZ1bmN0aW9uKHQpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgVGV4dERlY29kZXIpcmV0dXJuKG5ldyBUZXh0RGVjb2RlcikuZGVjb2RlKHQpO2xldCBlPSIiO2ZvcihsZXQgbj0wLGk9dC5sZW5ndGg7bjxpO24rKyllKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHRbbl0pO3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZShlKSl9Y2F0Y2godCl7cmV0dXJuIGV9fSxleHRyYWN0VXJsQmFzZTpmdW5jdGlvbih0KXtjb25zdCBlPXQubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4tMT09PWU/Ii4vIjp0LnN1YnN0cigwLGUrMSl9fTtmdW5jdGlvbiBhanQoKXtWenQuY2FsbCh0aGlzKSx0aGlzLnR5cGU9Ikluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5Iix0aGlzLmluc3RhbmNlQ291bnQ9MS8wfWZ1bmN0aW9uIHNqdCh0LGUsbixpKXsibnVtYmVyIj09dHlwZW9mIG4mJihpPW4sbj0hMSxjb25zb2xlLmVycm9yKCJUSFJFRS5JbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGU6IFRoZSBjb25zdHJ1Y3RvciBub3cgZXhwZWN0cyBub3JtYWxpemVkIGFzIHRoZSB0aGlyZCBhcmd1bWVudC4iKSksYnp0LmNhbGwodGhpcyx0LGUsbiksdGhpcy5tZXNoUGVyQXR0cmlidXRlPWl8fDF9ZnVuY3Rpb24gbGp0KHQpe2RVdC5jYWxsKHRoaXMsdCl9YWp0LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoVnp0LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOmFqdCxpc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5OiEwLGNvcHk6ZnVuY3Rpb24odCl7cmV0dXJuIFZ6dC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy5pbnN0YW5jZUNvdW50PXQuaW5zdGFuY2VDb3VudCx0aGlzfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX0sdG9KU09OOmZ1bmN0aW9uKCl7Y29uc3QgdD1WenQucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMpO3JldHVybiB0Lmluc3RhbmNlQ291bnQ9dGhpcy5pbnN0YW5jZUNvdW50LHQuaXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeT0hMCx0fX0pLHNqdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKGJ6dC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpzanQsaXNJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGU6ITAsY29weTpmdW5jdGlvbih0KXtyZXR1cm4gYnp0LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLm1lc2hQZXJBdHRyaWJ1dGU9dC5tZXNoUGVyQXR0cmlidXRlLHRoaXN9LHRvSlNPTjpmdW5jdGlvbigpe2NvbnN0IHQ9Ynp0LnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzKTtyZXR1cm4gdC5tZXNoUGVyQXR0cmlidXRlPXRoaXMubWVzaFBlckF0dHJpYnV0ZSx0LmlzSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlPSEwLHR9fSksbGp0LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoZFV0LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOmxqdCxsb2FkOmZ1bmN0aW9uKHQsZSxuLGkpe2NvbnN0IHI9dGhpcyxvPW5ldyBmVXQoci5tYW5hZ2VyKTtvLnNldFBhdGgoci5wYXRoKSxvLnNldFJlcXVlc3RIZWFkZXIoci5yZXF1ZXN0SGVhZGVyKSxvLnNldFdpdGhDcmVkZW50aWFscyhyLndpdGhDcmVkZW50aWFscyksby5sb2FkKHQsKGZ1bmN0aW9uKG4pe3RyeXtlKHIucGFyc2UoSlNPTi5wYXJzZShuKSkpfWNhdGNoKGUpe2k/aShlKTpjb25zb2xlLmVycm9yKGUpLHIubWFuYWdlci5pdGVtRXJyb3IodCl9fSksbixpKX0scGFyc2U6ZnVuY3Rpb24odCl7Y29uc3QgZT17fSxuPXt9O2Z1bmN0aW9uIGkodCxpKXtpZih2b2lkIDAhPT1lW2ldKXJldHVybiBlW2ldO2NvbnN0IHI9dC5pbnRlcmxlYXZlZEJ1ZmZlcnNbaV0sbz0oZnVuY3Rpb24gYSh0LGUpe2lmKHZvaWQgMCE9PW5bZV0pcmV0dXJuIG5bZV07Y29uc3QgaT1uZXcgVWludDMyQXJyYXkodC5hcnJheUJ1ZmZlcnNbZV0pLmJ1ZmZlcjtyZXR1cm4gbltlXT1pLGl9KSh0LHIuYnVmZmVyKSxzPW5ldyBJSHQoSXp0KHIudHlwZSxvKSxyLnN0cmlkZSk7cmV0dXJuIHMudXVpZD1yLnV1aWQsZVtpXT1zLHN9Y29uc3Qgcj10LmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnk/bmV3IGFqdDpuZXcgVnp0LG89dC5kYXRhLmluZGV4O2lmKHZvaWQgMCE9PW8pe2NvbnN0IHQ9SXp0KG8udHlwZSxvLmFycmF5KTtyLnNldEluZGV4KG5ldyBienQodCwxKSl9Y29uc3QgYT10LmRhdGEuYXR0cmlidXRlcztmb3IoY29uc3QgZSBpbiBhKXtjb25zdCBuPWFbZV07bGV0IG87aWYobi5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlKW89bmV3IFJIdChpKHQuZGF0YSxuLmRhdGEpLG4uaXRlbVNpemUsbi5vZmZzZXQsbi5ub3JtYWxpemVkKTtlbHNle2NvbnN0IHQ9SXp0KG4udHlwZSxuLmFycmF5KTtvPW5ldyhuLmlzSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlP3NqdDpienQpKHQsbi5pdGVtU2l6ZSxuLm5vcm1hbGl6ZWQpfXZvaWQgMCE9PW4ubmFtZSYmKG8ubmFtZT1uLm5hbWUpLHIuc2V0QXR0cmlidXRlKGUsbyl9Y29uc3Qgcz10LmRhdGEubW9ycGhBdHRyaWJ1dGVzO2lmKHMpZm9yKGNvbnN0IGUgaW4gcyl7Y29uc3Qgbj1zW2VdLG89W107Zm9yKGxldCBlPTAscj1uLmxlbmd0aDtlPHI7ZSsrKXtjb25zdCByPW5bZV07bGV0IGE7YT1yLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU/bmV3IFJIdChpKHQuZGF0YSxyLmRhdGEpLHIuaXRlbVNpemUsci5vZmZzZXQsci5ub3JtYWxpemVkKTpuZXcgYnp0KEl6dChyLnR5cGUsci5hcnJheSksci5pdGVtU2l6ZSxyLm5vcm1hbGl6ZWQpLHZvaWQgMCE9PXIubmFtZSYmKGEubmFtZT1yLm5hbWUpLG8ucHVzaChhKX1yLm1vcnBoQXR0cmlidXRlc1tlXT1vfXQuZGF0YS5tb3JwaFRhcmdldHNSZWxhdGl2ZSYmKHIubW9ycGhUYXJnZXRzUmVsYXRpdmU9ITApO2NvbnN0IGw9dC5kYXRhLmdyb3Vwc3x8dC5kYXRhLmRyYXdjYWxsc3x8dC5kYXRhLm9mZnNldHM7aWYodm9pZCAwIT09bClmb3IobGV0IHQ9MCxlPWwubGVuZ3RoO3QhPT1lOysrdCl7Y29uc3QgZT1sW3RdO3IuYWRkR3JvdXAoZS5zdGFydCxlLmNvdW50LGUubWF0ZXJpYWxJbmRleCl9Y29uc3QgYz10LmRhdGEuYm91bmRpbmdTcGhlcmU7aWYodm9pZCAwIT09Yyl7Y29uc3QgdD1uZXcgcU90O3ZvaWQgMCE9PWMuY2VudGVyJiZ0LmZyb21BcnJheShjLmNlbnRlciksci5ib3VuZGluZ1NwaGVyZT1uZXcgaFJ0KHQsYy5yYWRpdXMpfXJldHVybiB0Lm5hbWUmJihyLm5hbWU9dC5uYW1lKSx0LnVzZXJEYXRhJiYoci51c2VyRGF0YT10LnVzZXJEYXRhKSxyfX0pO2NvbnN0IGNqdD17VVZNYXBwaW5nOlBJdCxDdWJlUmVmbGVjdGlvbk1hcHBpbmc6Tkl0LEN1YmVSZWZyYWN0aW9uTWFwcGluZzpJSXQsRXF1aXJlY3Rhbmd1bGFyUmVmbGVjdGlvbk1hcHBpbmc6T0l0LEVxdWlyZWN0YW5ndWxhclJlZnJhY3Rpb25NYXBwaW5nOlJJdCxDdWJlVVZSZWZsZWN0aW9uTWFwcGluZzp6SXQsQ3ViZVVWUmVmcmFjdGlvbk1hcHBpbmc6REl0fSx1anQ9e1JlcGVhdFdyYXBwaW5nOkJJdCxDbGFtcFRvRWRnZVdyYXBwaW5nOkhJdCxNaXJyb3JlZFJlcGVhdFdyYXBwaW5nOkZJdH0saGp0PXtOZWFyZXN0RmlsdGVyOlZJdCxOZWFyZXN0TWlwbWFwTmVhcmVzdEZpbHRlcjpVSXQsTmVhcmVzdE1pcG1hcExpbmVhckZpbHRlcjpqSXQsTGluZWFyRmlsdGVyOkdJdCxMaW5lYXJNaXBtYXBOZWFyZXN0RmlsdGVyOldJdCxMaW5lYXJNaXBtYXBMaW5lYXJGaWx0ZXI6cUl0fTtmdW5jdGlvbiBkanQodCl7InVuZGVmaW5lZCI9PXR5cGVvZiBjcmVhdGVJbWFnZUJpdG1hcCYmY29uc29sZS53YXJuKCJUSFJFRS5JbWFnZUJpdG1hcExvYWRlcjogY3JlYXRlSW1hZ2VCaXRtYXAoKSBub3Qgc3VwcG9ydGVkLiIpLCJ1bmRlZmluZWQiPT10eXBlb2YgZmV0Y2gmJmNvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VCaXRtYXBMb2FkZXI6IGZldGNoKCkgbm90IHN1cHBvcnRlZC4iKSxkVXQuY2FsbCh0aGlzLHQpLHRoaXMub3B0aW9ucz17cHJlbXVsdGlwbHlBbHBoYToibm9uZSJ9fWZ1bmN0aW9uIHBqdCgpe3RoaXMudHlwZT0iU2hhcGVQYXRoIix0aGlzLmNvbG9yPW5ldyBwenQsdGhpcy5zdWJQYXRocz1bXSx0aGlzLmN1cnJlbnRQYXRoPW51bGx9ZGp0LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoZFV0LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOmRqdCxpc0ltYWdlQml0bWFwTG9hZGVyOiEwLHNldE9wdGlvbnM6ZnVuY3Rpb24gdChlKXtyZXR1cm4gdGhpcy5vcHRpb25zPWUsdGhpc30sbG9hZDpmdW5jdGlvbih0LGUsbixpKXt2b2lkIDA9PT10JiYodD0iIiksdm9pZCAwIT09dGhpcy5wYXRoJiYodD10aGlzLnBhdGgrdCksdD10aGlzLm1hbmFnZXIucmVzb2x2ZVVSTCh0KTtjb25zdCByPXRoaXMsbz1jVXQuZ2V0KHQpO2lmKHZvaWQgMCE9PW8pcmV0dXJuIHIubWFuYWdlci5pdGVtU3RhcnQodCksc2V0VGltZW91dCgoZnVuY3Rpb24oKXtlJiZlKG8pLHIubWFuYWdlci5pdGVtRW5kKHQpfSksMCksbztjb25zdCBhPXt9O2EuY3JlZGVudGlhbHM9ImFub255bW91cyI9PT10aGlzLmNyb3NzT3JpZ2luPyJzYW1lLW9yaWdpbiI6ImluY2x1ZGUiLGZldGNoKHQsYSkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIHQuYmxvYigpfSkpLnRoZW4oKGZ1bmN0aW9uKHQpe3JldHVybiBjcmVhdGVJbWFnZUJpdG1hcCh0LHIub3B0aW9ucyl9KSkudGhlbigoZnVuY3Rpb24obil7Y1V0LmFkZCh0LG4pLGUmJmUobiksci5tYW5hZ2VyLml0ZW1FbmQodCl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe2kmJmkoZSksci5tYW5hZ2VyLml0ZW1FcnJvcih0KSxyLm1hbmFnZXIuaXRlbUVuZCh0KX0pKSxyLm1hbmFnZXIuaXRlbVN0YXJ0KHQpfX0pLE9iamVjdC5hc3NpZ24ocGp0LnByb3RvdHlwZSx7bW92ZVRvOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuY3VycmVudFBhdGg9bmV3IFVVdCx0aGlzLnN1YlBhdGhzLnB1c2godGhpcy5jdXJyZW50UGF0aCksdGhpcy5jdXJyZW50UGF0aC5tb3ZlVG8odCxlKSx0aGlzfSxsaW5lVG86ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5jdXJyZW50UGF0aC5saW5lVG8odCxlKSx0aGlzfSxxdWFkcmF0aWNDdXJ2ZVRvOmZ1bmN0aW9uKHQsZSxuLGkpe3JldHVybiB0aGlzLmN1cnJlbnRQYXRoLnF1YWRyYXRpY0N1cnZlVG8odCxlLG4saSksdGhpc30sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbih0LGUsbixpLHIsbyl7cmV0dXJuIHRoaXMuY3VycmVudFBhdGguYmV6aWVyQ3VydmVUbyh0LGUsbixpLHIsbyksdGhpc30sc3BsaW5lVGhydTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jdXJyZW50UGF0aC5zcGxpbmVUaHJ1KHQpLHRoaXN9LHRvU2hhcGVzOmZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gbih0KXtjb25zdCBlPVtdO2ZvcihsZXQgbj0wLGk9dC5sZW5ndGg7bjxpO24rKyl7Y29uc3QgaT10W25dLHI9bmV3IGpVdDtyLmN1cnZlcz1pLmN1cnZlcyxlLnB1c2gocil9cmV0dXJuIGV9ZnVuY3Rpb24gaSh0LGUpe2NvbnN0IG49ZS5sZW5ndGg7bGV0IGk9ITE7Zm9yKGxldCByPW4tMSxvPTA7bzxuO3I9bysrKXtsZXQgbj1lW3JdLGE9ZVtvXSxzPWEueC1uLngsbD1hLnktbi55O2lmKE1hdGguYWJzKGwpPk51bWJlci5FUFNJTE9OKXtpZihsPDAmJihuPWVbb10scz0tcyxhPWVbcl0sbD0tbCksdC55PG4ueXx8dC55PmEueSljb250aW51ZTtpZih0Lnk9PT1uLnkpe2lmKHQueD09PW4ueClyZXR1cm4hMH1lbHNle2NvbnN0IGU9bCoodC54LW4ueCktcyoodC55LW4ueSk7aWYoMD09PWUpcmV0dXJuITA7aWYoZTwwKWNvbnRpbnVlO2k9IWl9fWVsc2V7aWYodC55IT09bi55KWNvbnRpbnVlO2lmKGEueDw9dC54JiZ0Lng8PW4ueHx8bi54PD10LngmJnQueDw9YS54KXJldHVybiEwfX1yZXR1cm4gaX1jb25zdCByPXlWdC5pc0Nsb2NrV2lzZSxvPXRoaXMuc3ViUGF0aHM7aWYoMD09PW8ubGVuZ3RoKXJldHVybltdO2lmKCEwPT09ZSlyZXR1cm4gbihvKTtsZXQgYSxzLGw7Y29uc3QgYz1bXTtpZigxPT09by5sZW5ndGgpcmV0dXJuIHM9b1swXSxsPW5ldyBqVXQsbC5jdXJ2ZXM9cy5jdXJ2ZXMsYy5wdXNoKGwpLGM7bGV0IHU9IXIob1swXS5nZXRQb2ludHMoKSk7dT10PyF1OnU7Y29uc3QgaD1bXSxkPVtdO2xldCBwLGYsbT1bXSxnPTA7ZFtnXT12b2lkIDAsbVtnXT1bXTtmb3IobGV0IGU9MCxuPW8ubGVuZ3RoO2U8bjtlKyspcz1vW2VdLHA9cy5nZXRQb2ludHMoKSxhPXIocCksYT10PyFhOmEsYT8oIXUmJmRbZ10mJmcrKyxkW2ddPXtzOm5ldyBqVXQscDpwfSxkW2ddLnMuY3VydmVzPXMuY3VydmVzLHUmJmcrKyxtW2ddPVtdKTptW2ddLnB1c2goe2g6cyxwOnBbMF19KTtpZighZFswXSlyZXR1cm4gbihvKTtpZihkLmxlbmd0aD4xKXtsZXQgdD0hMTtjb25zdCBlPVtdO2ZvcihsZXQgdD0wLGU9ZC5sZW5ndGg7dDxlO3QrKyloW3RdPVtdO2ZvcihsZXQgbj0wLHI9ZC5sZW5ndGg7bjxyO24rKyl7Y29uc3Qgcj1tW25dO2ZvcihsZXQgbz0wO288ci5sZW5ndGg7bysrKXtjb25zdCBhPXJbb107bGV0IHM9ITA7Zm9yKGxldCByPTA7cjxkLmxlbmd0aDtyKyspaShhLnAsZFtyXS5wKSYmKG4hPT1yJiZlLnB1c2goe2Zyb21zOm4sdG9zOnIsaG9sZTpvfSkscz8ocz0hMSxoW3JdLnB1c2goYSkpOnQ9ITApO3MmJmhbbl0ucHVzaChhKX19ZS5sZW5ndGg+MCYmKHR8fChtPWgpKX1mb3IobGV0IHQ9MCxlPWQubGVuZ3RoO3Q8ZTt0Kyspe2w9ZFt0XS5zLGMucHVzaChsKSxmPW1bdF07Zm9yKGxldCB0PTAsZT1mLmxlbmd0aDt0PGU7dCsrKWwuaG9sZXMucHVzaChmW3RdLmgpfXJldHVybiBjfX0pO2NsYXNzIGZqdHtjb25zdHJ1Y3Rvcih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaXNGb250Iix7dmFsdWU6ITB9KSx0aGlzLnR5cGU9IkZvbnQiLHRoaXMuZGF0YT10fWdlbmVyYXRlU2hhcGVzKHQsZT0xMDApe2NvbnN0IG49W10saT0oZnVuY3Rpb24gcih0LGUsbil7Y29uc3QgaT1BcnJheS5mcm9tP0FycmF5LmZyb20odCk6U3RyaW5nKHQpLnNwbGl0KCIiKSxyPWUvbi5yZXNvbHV0aW9uLG89KG4uYm91bmRpbmdCb3gueU1heC1uLmJvdW5kaW5nQm94LnlNaW4rbi51bmRlcmxpbmVUaGlja25lc3MpKnIsYT1bXTtsZXQgcz0wLGw9MDtmb3IobGV0IHQ9MDt0PGkubGVuZ3RoO3QrKyl7Y29uc3QgZT1pW3RdO2lmKCJcbiI9PT1lKXM9MCxsLT1vO2Vsc2V7Y29uc3QgdD1tanQoZSxyLHMsbCxuKTtzKz10Lm9mZnNldFgsYS5wdXNoKHQucGF0aCl9fXJldHVybiBhfSkodCxlLHRoaXMuZGF0YSk7Zm9yKGxldCB0PTAsZT1pLmxlbmd0aDt0PGU7dCsrKUFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KG4saVt0XS50b1NoYXBlcygpKTtyZXR1cm4gbn19ZnVuY3Rpb24gbWp0KHQsZSxuLGkscil7Y29uc3Qgbz1yLmdseXBoc1t0XXx8ci5nbHlwaHNbIj8iXTtpZighbylyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCdUSFJFRS5Gb250OiBjaGFyYWN0ZXIgIicrdCsnIiBkb2VzIG5vdCBleGlzdHMgaW4gZm9udCBmYW1pbHkgJytyLmZhbWlseU5hbWUrIi4iKTtjb25zdCBhPW5ldyBwanQ7bGV0IHMsbCxjLHUsaCxkLHAsZjtpZihvLm8pe2NvbnN0IHQ9by5fY2FjaGVkT3V0bGluZXx8KG8uX2NhY2hlZE91dGxpbmU9by5vLnNwbGl0KCIgIikpO2ZvcihsZXQgcj0wLG89dC5sZW5ndGg7cjxvOylzd2l0Y2godFtyKytdKXtjYXNlIm0iOnM9dFtyKytdKmUrbixsPXRbcisrXSplK2ksYS5tb3ZlVG8ocyxsKTticmVhaztjYXNlImwiOnM9dFtyKytdKmUrbixsPXRbcisrXSplK2ksYS5saW5lVG8ocyxsKTticmVhaztjYXNlInEiOmM9dFtyKytdKmUrbix1PXRbcisrXSplK2ksaD10W3IrK10qZStuLGQ9dFtyKytdKmUraSxhLnF1YWRyYXRpY0N1cnZlVG8oaCxkLGMsdSk7YnJlYWs7Y2FzZSJiIjpjPXRbcisrXSplK24sdT10W3IrK10qZStpLGg9dFtyKytdKmUrbixkPXRbcisrXSplK2kscD10W3IrK10qZStuLGY9dFtyKytdKmUraSxhLmJlemllckN1cnZlVG8oaCxkLHAsZixjLHUpfX1yZXR1cm57b2Zmc2V0WDpvLmhhKmUscGF0aDphfX1mdW5jdGlvbiBnanQodCl7ZFV0LmNhbGwodGhpcyx0KX1sZXQgX2p0O2dqdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKGRVdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpnanQsbG9hZDpmdW5jdGlvbih0LGUsbixpKXtjb25zdCByPXRoaXMsbz1uZXcgZlV0KHRoaXMubWFuYWdlcik7by5zZXRQYXRoKHRoaXMucGF0aCksby5zZXRSZXF1ZXN0SGVhZGVyKHRoaXMucmVxdWVzdEhlYWRlciksby5zZXRXaXRoQ3JlZGVudGlhbHMoci53aXRoQ3JlZGVudGlhbHMpLG8ubG9hZCh0LChmdW5jdGlvbih0KXtsZXQgbjt0cnl7bj1KU09OLnBhcnNlKHQpfWNhdGNoKGUpe2NvbnNvbGUud2FybigiVEhSRUUuRm9udExvYWRlcjogdHlwZWZhY2UuanMgc3VwcG9ydCBpcyBiZWluZyBkZXByZWNhdGVkLiBVc2UgdHlwZWZhY2UuanNvbiBpbnN0ZWFkLiIpLG49SlNPTi5wYXJzZSh0LnN1YnN0cmluZyg2NSx0Lmxlbmd0aC0yKSl9Y29uc3QgaT1yLnBhcnNlKG4pO2UmJmUoaSl9KSxuLGkpfSxwYXJzZTpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGZqdCh0KX19KTtjb25zdCB5anQ9e2dldENvbnRleHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09X2p0JiYoX2p0PW5ldyh3aW5kb3cuQXVkaW9Db250ZXh0fHx3aW5kb3cud2Via2l0QXVkaW9Db250ZXh0KSksX2p0fSxzZXRDb250ZXh0OmZ1bmN0aW9uKHQpe19qdD10fX07ZnVuY3Rpb24gdmp0KHQpe2RVdC5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gYmp0KHQsZSxuKXtpanQuY2FsbCh0aGlzLHZvaWQgMCxuKTtjb25zdCBpPShuZXcgcHp0KS5zZXQodCkscj0obmV3IHB6dCkuc2V0KGUpLG89bmV3IHFPdChpLnIsaS5nLGkuYiksYT1uZXcgcU90KHIucixyLmcsci5iKSxzPU1hdGguc3FydChNYXRoLlBJKSxsPXMqTWF0aC5zcXJ0KC43NSk7dGhpcy5zaC5jb2VmZmljaWVudHNbMF0uY29weShvKS5hZGQoYSkubXVsdGlwbHlTY2FsYXIocyksdGhpcy5zaC5jb2VmZmljaWVudHNbMV0uY29weShvKS5zdWIoYSkubXVsdGlwbHlTY2FsYXIobCl9ZnVuY3Rpb24geGp0KHQsZSl7aWp0LmNhbGwodGhpcyx2b2lkIDAsZSk7Y29uc3Qgbj0obmV3IHB6dCkuc2V0KHQpO3RoaXMuc2guY29lZmZpY2llbnRzWzBdLnNldChuLnIsbi5nLG4uYikubXVsdGlwbHlTY2FsYXIoMipNYXRoLnNxcnQoTWF0aC5QSSkpfXZqdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKGRVdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3Rvcjp2anQsbG9hZDpmdW5jdGlvbih0LGUsbixpKXtjb25zdCByPXRoaXMsbz1uZXcgZlV0KHIubWFuYWdlcik7by5zZXRSZXNwb25zZVR5cGUoImFycmF5YnVmZmVyIiksby5zZXRQYXRoKHIucGF0aCksby5zZXRSZXF1ZXN0SGVhZGVyKHIucmVxdWVzdEhlYWRlciksby5zZXRXaXRoQ3JlZGVudGlhbHMoci53aXRoQ3JlZGVudGlhbHMpLG8ubG9hZCh0LChmdW5jdGlvbihuKXt0cnl7Y29uc3QgdD1uLnNsaWNlKDApO3lqdC5nZXRDb250ZXh0KCkuZGVjb2RlQXVkaW9EYXRhKHQsKGZ1bmN0aW9uKHQpe2UodCl9KSl9Y2F0Y2goZSl7aT9pKGUpOmNvbnNvbGUuZXJyb3IoZSksci5tYW5hZ2VyLml0ZW1FcnJvcih0KX19KSxuLGkpfX0pLGJqdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKGlqdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpianQsaXNIZW1pc3BoZXJlTGlnaHRQcm9iZTohMCxjb3B5OmZ1bmN0aW9uKHQpe3JldHVybiBpanQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXN9LHRvSlNPTjpmdW5jdGlvbih0KXtyZXR1cm4gaWp0LnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzLHQpfX0pLHhqdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKGlqdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3Rvcjp4anQsaXNBbWJpZW50TGlnaHRQcm9iZTohMCxjb3B5OmZ1bmN0aW9uKHQpe3JldHVybiBpanQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXN9LHRvSlNPTjpmdW5jdGlvbih0KXtyZXR1cm4gaWp0LnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzLHQpfX0pO2NvbnN0IHdqdD1uZXcgYlJ0LFNqdD1uZXcgYlJ0O2Z1bmN0aW9uIE1qdCgpe3RoaXMudHlwZT0iU3RlcmVvQ2FtZXJhIix0aGlzLmFzcGVjdD0xLHRoaXMuZXllU2VwPS4wNjQsdGhpcy5jYW1lcmFMPW5ldyBwRHQsdGhpcy5jYW1lcmFMLmxheWVycy5lbmFibGUoMSksdGhpcy5jYW1lcmFMLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5jYW1lcmFSPW5ldyBwRHQsdGhpcy5jYW1lcmFSLmxheWVycy5lbmFibGUoMiksdGhpcy5jYW1lcmFSLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5fY2FjaGU9e2ZvY3VzOm51bGwsZm92Om51bGwsYXNwZWN0Om51bGwsbmVhcjpudWxsLGZhcjpudWxsLHpvb206bnVsbCxleWVTZXA6bnVsbH19T2JqZWN0LmFzc2lnbihNanQucHJvdG90eXBlLHt1cGRhdGU6ZnVuY3Rpb24odCl7Y29uc3QgZT10aGlzLl9jYWNoZTtpZihlLmZvY3VzIT09dC5mb2N1c3x8ZS5mb3YhPT10LmZvdnx8ZS5hc3BlY3QhPT10LmFzcGVjdCp0aGlzLmFzcGVjdHx8ZS5uZWFyIT09dC5uZWFyfHxlLmZhciE9PXQuZmFyfHxlLnpvb20hPT10Lnpvb218fGUuZXllU2VwIT09dGhpcy5leWVTZXApe2UuZm9jdXM9dC5mb2N1cyxlLmZvdj10LmZvdixlLmFzcGVjdD10LmFzcGVjdCp0aGlzLmFzcGVjdCxlLm5lYXI9dC5uZWFyLGUuZmFyPXQuZmFyLGUuem9vbT10Lnpvb20sZS5leWVTZXA9dGhpcy5leWVTZXA7Y29uc3Qgbj10LnByb2plY3Rpb25NYXRyaXguY2xvbmUoKSxpPWUuZXllU2VwLzIscj1pKmUubmVhci9lLmZvY3VzLG89ZS5uZWFyKk1hdGgudGFuKFJPdC5ERUcyUkFEKmUuZm92Ki41KS9lLnpvb207bGV0IGEscztTanQuZWxlbWVudHNbMTJdPS1pLHdqdC5lbGVtZW50c1sxMl09aSxhPS1vKmUuYXNwZWN0K3Iscz1vKmUuYXNwZWN0K3Isbi5lbGVtZW50c1swXT0yKmUubmVhci8ocy1hKSxuLmVsZW1lbnRzWzhdPShzK2EpLyhzLWEpLHRoaXMuY2FtZXJhTC5wcm9qZWN0aW9uTWF0cml4LmNvcHkobiksYT0tbyplLmFzcGVjdC1yLHM9byplLmFzcGVjdC1yLG4uZWxlbWVudHNbMF09MiplLm5lYXIvKHMtYSksbi5lbGVtZW50c1s4XT0ocythKS8ocy1hKSx0aGlzLmNhbWVyYVIucHJvamVjdGlvbk1hdHJpeC5jb3B5KG4pfXRoaXMuY2FtZXJhTC5tYXRyaXhXb3JsZC5jb3B5KHQubWF0cml4V29ybGQpLm11bHRpcGx5KFNqdCksdGhpcy5jYW1lcmFSLm1hdHJpeFdvcmxkLmNvcHkodC5tYXRyaXhXb3JsZCkubXVsdGlwbHkod2p0KX19KTtjbGFzcyBFanR7Y29uc3RydWN0b3IodCl7dGhpcy5hdXRvU3RhcnQ9dm9pZCAwPT09dHx8dCx0aGlzLnN0YXJ0VGltZT0wLHRoaXMub2xkVGltZT0wLHRoaXMuZWxhcHNlZFRpbWU9MCx0aGlzLnJ1bm5pbmc9ITF9c3RhcnQoKXt0aGlzLnN0YXJ0VGltZT1UanQoKSx0aGlzLm9sZFRpbWU9dGhpcy5zdGFydFRpbWUsdGhpcy5lbGFwc2VkVGltZT0wLHRoaXMucnVubmluZz0hMH1zdG9wKCl7dGhpcy5nZXRFbGFwc2VkVGltZSgpLHRoaXMucnVubmluZz0hMSx0aGlzLmF1dG9TdGFydD0hMX1nZXRFbGFwc2VkVGltZSgpe3JldHVybiB0aGlzLmdldERlbHRhKCksdGhpcy5lbGFwc2VkVGltZX1nZXREZWx0YSgpe2xldCB0PTA7aWYodGhpcy5hdXRvU3RhcnQmJiF0aGlzLnJ1bm5pbmcpcmV0dXJuIHRoaXMuc3RhcnQoKSwwO2lmKHRoaXMucnVubmluZyl7Y29uc3QgZT1UanQoKTt0PShlLXRoaXMub2xkVGltZSkvMWUzLHRoaXMub2xkVGltZT1lLHRoaXMuZWxhcHNlZFRpbWUrPXR9cmV0dXJuIHR9fWZ1bmN0aW9uIFRqdCgpe3JldHVybigidW5kZWZpbmVkIj09dHlwZW9mIHBlcmZvcm1hbmNlP0RhdGU6cGVyZm9ybWFuY2UpLm5vdygpfWNvbnN0IENqdD1uZXcgcU90LEFqdD1uZXcgV090LGtqdD1uZXcgcU90LExqdD1uZXcgcU90O2NsYXNzIFBqdCBleHRlbmRzIFdSdHtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iQXVkaW8iLHRoaXMubGlzdGVuZXI9dCx0aGlzLmNvbnRleHQ9dC5jb250ZXh0LHRoaXMuZ2Fpbj10aGlzLmNvbnRleHQuY3JlYXRlR2FpbigpLHRoaXMuZ2Fpbi5jb25uZWN0KHQuZ2V0SW5wdXQoKSksdGhpcy5hdXRvcGxheT0hMSx0aGlzLmJ1ZmZlcj1udWxsLHRoaXMuZGV0dW5lPTAsdGhpcy5sb29wPSExLHRoaXMubG9vcFN0YXJ0PTAsdGhpcy5sb29wRW5kPTAsdGhpcy5vZmZzZXQ9MCx0aGlzLmR1cmF0aW9uPXZvaWQgMCx0aGlzLnBsYXliYWNrUmF0ZT0xLHRoaXMuaXNQbGF5aW5nPSExLHRoaXMuaGFzUGxheWJhY2tDb250cm9sPSEwLHRoaXMuc291cmNlPW51bGwsdGhpcy5zb3VyY2VUeXBlPSJlbXB0eSIsdGhpcy5fc3RhcnRlZEF0PTAsdGhpcy5fcHJvZ3Jlc3M9MCx0aGlzLl9jb25uZWN0ZWQ9ITEsdGhpcy5maWx0ZXJzPVtdfWdldE91dHB1dCgpe3JldHVybiB0aGlzLmdhaW59c2V0Tm9kZVNvdXJjZSh0KXtyZXR1cm4gdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9ITEsdGhpcy5zb3VyY2VUeXBlPSJhdWRpb05vZGUiLHRoaXMuc291cmNlPXQsdGhpcy5jb25uZWN0KCksdGhpc31zZXRNZWRpYUVsZW1lbnRTb3VyY2UodCl7cmV0dXJuIHRoaXMuaGFzUGxheWJhY2tDb250cm9sPSExLHRoaXMuc291cmNlVHlwZT0ibWVkaWFOb2RlIix0aGlzLnNvdXJjZT10aGlzLmNvbnRleHQuY3JlYXRlTWVkaWFFbGVtZW50U291cmNlKHQpLHRoaXMuY29ubmVjdCgpLHRoaXN9c2V0TWVkaWFTdHJlYW1Tb3VyY2UodCl7cmV0dXJuIHRoaXMuaGFzUGxheWJhY2tDb250cm9sPSExLHRoaXMuc291cmNlVHlwZT0ibWVkaWFTdHJlYW1Ob2RlIix0aGlzLnNvdXJjZT10aGlzLmNvbnRleHQuY3JlYXRlTWVkaWFTdHJlYW1Tb3VyY2UodCksdGhpcy5jb25uZWN0KCksdGhpc31zZXRCdWZmZXIodCl7cmV0dXJuIHRoaXMuYnVmZmVyPXQsdGhpcy5zb3VyY2VUeXBlPSJidWZmZXIiLHRoaXMuYXV0b3BsYXkmJnRoaXMucGxheSgpLHRoaXN9cGxheSh0PTApe2lmKCEwPT09dGhpcy5pc1BsYXlpbmcpcmV0dXJuIHZvaWQgY29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogQXVkaW8gaXMgYWxyZWFkeSBwbGF5aW5nLiIpO2lmKCExPT09dGhpcy5oYXNQbGF5YmFja0NvbnRyb2wpcmV0dXJuIHZvaWQgY29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKTt0aGlzLl9zdGFydGVkQXQ9dGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lK3Q7Y29uc3QgZT10aGlzLmNvbnRleHQuY3JlYXRlQnVmZmVyU291cmNlKCk7cmV0dXJuIGUuYnVmZmVyPXRoaXMuYnVmZmVyLGUubG9vcD10aGlzLmxvb3AsZS5sb29wU3RhcnQ9dGhpcy5sb29wU3RhcnQsZS5sb29wRW5kPXRoaXMubG9vcEVuZCxlLm9uZW5kZWQ9dGhpcy5vbkVuZGVkLmJpbmQodGhpcyksZS5zdGFydCh0aGlzLl9zdGFydGVkQXQsdGhpcy5fcHJvZ3Jlc3MrdGhpcy5vZmZzZXQsdGhpcy5kdXJhdGlvbiksdGhpcy5pc1BsYXlpbmc9ITAsdGhpcy5zb3VyY2U9ZSx0aGlzLnNldERldHVuZSh0aGlzLmRldHVuZSksdGhpcy5zZXRQbGF5YmFja1JhdGUodGhpcy5wbGF5YmFja1JhdGUpLHRoaXMuY29ubmVjdCgpfXBhdXNlKCl7aWYoITEhPT10aGlzLmhhc1BsYXliYWNrQ29udHJvbClyZXR1cm4hMD09PXRoaXMuaXNQbGF5aW5nJiYodGhpcy5fcHJvZ3Jlc3MrPU1hdGgubWF4KHRoaXMuY29udGV4dC5jdXJyZW50VGltZS10aGlzLl9zdGFydGVkQXQsMCkqdGhpcy5wbGF5YmFja1JhdGUsITA9PT10aGlzLmxvb3AmJih0aGlzLl9wcm9ncmVzcz10aGlzLl9wcm9ncmVzcyUodGhpcy5kdXJhdGlvbnx8dGhpcy5idWZmZXIuZHVyYXRpb24pKSx0aGlzLnNvdXJjZS5zdG9wKCksdGhpcy5zb3VyY2Uub25lbmRlZD1udWxsLHRoaXMuaXNQbGF5aW5nPSExKSx0aGlzO2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIil9c3RvcCgpe2lmKCExIT09dGhpcy5oYXNQbGF5YmFja0NvbnRyb2wpcmV0dXJuIHRoaXMuX3Byb2dyZXNzPTAsdGhpcy5zb3VyY2Uuc3RvcCgpLHRoaXMuc291cmNlLm9uZW5kZWQ9bnVsbCx0aGlzLmlzUGxheWluZz0hMSx0aGlzO2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIil9Y29ubmVjdCgpe2lmKHRoaXMuZmlsdGVycy5sZW5ndGg+MCl7dGhpcy5zb3VyY2UuY29ubmVjdCh0aGlzLmZpbHRlcnNbMF0pO2ZvcihsZXQgdD0xLGU9dGhpcy5maWx0ZXJzLmxlbmd0aDt0PGU7dCsrKXRoaXMuZmlsdGVyc1t0LTFdLmNvbm5lY3QodGhpcy5maWx0ZXJzW3RdKTt0aGlzLmZpbHRlcnNbdGhpcy5maWx0ZXJzLmxlbmd0aC0xXS5jb25uZWN0KHRoaXMuZ2V0T3V0cHV0KCkpfWVsc2UgdGhpcy5zb3VyY2UuY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKTtyZXR1cm4gdGhpcy5fY29ubmVjdGVkPSEwLHRoaXN9ZGlzY29ubmVjdCgpe2lmKHRoaXMuZmlsdGVycy5sZW5ndGg+MCl7dGhpcy5zb3VyY2UuZGlzY29ubmVjdCh0aGlzLmZpbHRlcnNbMF0pO2ZvcihsZXQgdD0xLGU9dGhpcy5maWx0ZXJzLmxlbmd0aDt0PGU7dCsrKXRoaXMuZmlsdGVyc1t0LTFdLmRpc2Nvbm5lY3QodGhpcy5maWx0ZXJzW3RdKTt0aGlzLmZpbHRlcnNbdGhpcy5maWx0ZXJzLmxlbmd0aC0xXS5kaXNjb25uZWN0KHRoaXMuZ2V0T3V0cHV0KCkpfWVsc2UgdGhpcy5zb3VyY2UuZGlzY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKTtyZXR1cm4gdGhpcy5fY29ubmVjdGVkPSExLHRoaXN9Z2V0RmlsdGVycygpe3JldHVybiB0aGlzLmZpbHRlcnN9c2V0RmlsdGVycyh0KXtyZXR1cm4gdHx8KHQ9W10pLCEwPT09dGhpcy5fY29ubmVjdGVkPyh0aGlzLmRpc2Nvbm5lY3QoKSx0aGlzLmZpbHRlcnM9dC5zbGljZSgpLHRoaXMuY29ubmVjdCgpKTp0aGlzLmZpbHRlcnM9dC5zbGljZSgpLHRoaXN9c2V0RGV0dW5lKHQpe2lmKHRoaXMuZGV0dW5lPXQsdm9pZCAwIT09dGhpcy5zb3VyY2UuZGV0dW5lKXJldHVybiEwPT09dGhpcy5pc1BsYXlpbmcmJnRoaXMuc291cmNlLmRldHVuZS5zZXRUYXJnZXRBdFRpbWUodGhpcy5kZXR1bmUsdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lLC4wMSksdGhpc31nZXREZXR1bmUoKXtyZXR1cm4gdGhpcy5kZXR1bmV9Z2V0RmlsdGVyKCl7cmV0dXJuIHRoaXMuZ2V0RmlsdGVycygpWzBdfXNldEZpbHRlcih0KXtyZXR1cm4gdGhpcy5zZXRGaWx0ZXJzKHQ/W3RdOltdKX1zZXRQbGF5YmFja1JhdGUodCl7aWYoITEhPT10aGlzLmhhc1BsYXliYWNrQ29udHJvbClyZXR1cm4gdGhpcy5wbGF5YmFja1JhdGU9dCwhMD09PXRoaXMuaXNQbGF5aW5nJiZ0aGlzLnNvdXJjZS5wbGF5YmFja1JhdGUuc2V0VGFyZ2V0QXRUaW1lKHRoaXMucGxheWJhY2tSYXRlLHRoaXMuY29udGV4dC5jdXJyZW50VGltZSwuMDEpLHRoaXM7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKX1nZXRQbGF5YmFja1JhdGUoKXtyZXR1cm4gdGhpcy5wbGF5YmFja1JhdGV9b25FbmRlZCgpe3RoaXMuaXNQbGF5aW5nPSExfWdldExvb3AoKXtyZXR1cm4hMT09PXRoaXMuaGFzUGxheWJhY2tDb250cm9sPyhjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpLCExKTp0aGlzLmxvb3B9c2V0TG9vcCh0KXtpZighMSE9PXRoaXMuaGFzUGxheWJhY2tDb250cm9sKXJldHVybiB0aGlzLmxvb3A9dCwhMD09PXRoaXMuaXNQbGF5aW5nJiYodGhpcy5zb3VyY2UubG9vcD10aGlzLmxvb3ApLHRoaXM7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKX1zZXRMb29wU3RhcnQodCl7cmV0dXJuIHRoaXMubG9vcFN0YXJ0PXQsdGhpc31zZXRMb29wRW5kKHQpe3JldHVybiB0aGlzLmxvb3BFbmQ9dCx0aGlzfWdldFZvbHVtZSgpe3JldHVybiB0aGlzLmdhaW4uZ2Fpbi52YWx1ZX1zZXRWb2x1bWUodCl7cmV0dXJuIHRoaXMuZ2Fpbi5nYWluLnNldFRhcmdldEF0VGltZSh0LHRoaXMuY29udGV4dC5jdXJyZW50VGltZSwuMDEpLHRoaXN9fWNvbnN0IE5qdD1uZXcgcU90LElqdD1uZXcgV090LE9qdD1uZXcgcU90LFJqdD1uZXcgcU90O2NsYXNzIHpqdHtjb25zdHJ1Y3Rvcih0LGU9MjA0OCl7dGhpcy5hbmFseXNlcj10LmNvbnRleHQuY3JlYXRlQW5hbHlzZXIoKSx0aGlzLmFuYWx5c2VyLmZmdFNpemU9ZSx0aGlzLmRhdGE9bmV3IFVpbnQ4QXJyYXkodGhpcy5hbmFseXNlci5mcmVxdWVuY3lCaW5Db3VudCksdC5nZXRPdXRwdXQoKS5jb25uZWN0KHRoaXMuYW5hbHlzZXIpfWdldEZyZXF1ZW5jeURhdGEoKXtyZXR1cm4gdGhpcy5hbmFseXNlci5nZXRCeXRlRnJlcXVlbmN5RGF0YSh0aGlzLmRhdGEpLHRoaXMuZGF0YX1nZXRBdmVyYWdlRnJlcXVlbmN5KCl7bGV0IHQ9MDtjb25zdCBlPXRoaXMuZ2V0RnJlcXVlbmN5RGF0YSgpO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXQrPWVbbl07cmV0dXJuIHQvZS5sZW5ndGh9fWZ1bmN0aW9uIERqdCh0LGUsbil7bGV0IGkscixvO3N3aXRjaCh0aGlzLmJpbmRpbmc9dCx0aGlzLnZhbHVlU2l6ZT1uLGUpe2Nhc2UicXVhdGVybmlvbiI6aT10aGlzLl9zbGVycCxyPXRoaXMuX3NsZXJwQWRkaXRpdmUsbz10aGlzLl9zZXRBZGRpdGl2ZUlkZW50aXR5UXVhdGVybmlvbix0aGlzLmJ1ZmZlcj1uZXcgRmxvYXQ2NEFycmF5KDYqbiksdGhpcy5fd29ya0luZGV4PTU7YnJlYWs7Y2FzZSJzdHJpbmciOmNhc2UiYm9vbCI6aT10aGlzLl9zZWxlY3Qscj10aGlzLl9zZWxlY3Qsbz10aGlzLl9zZXRBZGRpdGl2ZUlkZW50aXR5T3RoZXIsdGhpcy5idWZmZXI9bmV3IEFycmF5KDUqbik7YnJlYWs7ZGVmYXVsdDppPXRoaXMuX2xlcnAscj10aGlzLl9sZXJwQWRkaXRpdmUsbz10aGlzLl9zZXRBZGRpdGl2ZUlkZW50aXR5TnVtZXJpYyx0aGlzLmJ1ZmZlcj1uZXcgRmxvYXQ2NEFycmF5KDUqbil9dGhpcy5fbWl4QnVmZmVyUmVnaW9uPWksdGhpcy5fbWl4QnVmZmVyUmVnaW9uQWRkaXRpdmU9cix0aGlzLl9zZXRJZGVudGl0eT1vLHRoaXMuX29yaWdJbmRleD0zLHRoaXMuX2FkZEluZGV4PTQsdGhpcy5jdW11bGF0aXZlV2VpZ2h0PTAsdGhpcy5jdW11bGF0aXZlV2VpZ2h0QWRkaXRpdmU9MCx0aGlzLnVzZUNvdW50PTAsdGhpcy5yZWZlcmVuY2VDb3VudD0wfU9iamVjdC5hc3NpZ24oRGp0LnByb3RvdHlwZSx7YWNjdW11bGF0ZTpmdW5jdGlvbih0LGUpe2NvbnN0IG49dGhpcy5idWZmZXIsaT10aGlzLnZhbHVlU2l6ZSxyPXQqaStpO2xldCBvPXRoaXMuY3VtdWxhdGl2ZVdlaWdodDtpZigwPT09byl7Zm9yKGxldCB0PTA7dCE9PWk7Kyt0KW5bcit0XT1uW3RdO289ZX1lbHNlIG8rPWUsdGhpcy5fbWl4QnVmZmVyUmVnaW9uKG4sciwwLGUvbyxpKTt0aGlzLmN1bXVsYXRpdmVXZWlnaHQ9b30sYWNjdW11bGF0ZUFkZGl0aXZlOmZ1bmN0aW9uKHQpe2NvbnN0IGU9dGhpcy5idWZmZXIsbj10aGlzLnZhbHVlU2l6ZSxpPW4qdGhpcy5fYWRkSW5kZXg7MD09PXRoaXMuY3VtdWxhdGl2ZVdlaWdodEFkZGl0aXZlJiZ0aGlzLl9zZXRJZGVudGl0eSgpLHRoaXMuX21peEJ1ZmZlclJlZ2lvbkFkZGl0aXZlKGUsaSwwLHQsbiksdGhpcy5jdW11bGF0aXZlV2VpZ2h0QWRkaXRpdmUrPXR9LGFwcGx5OmZ1bmN0aW9uKHQpe2NvbnN0IGU9dGhpcy52YWx1ZVNpemUsbj10aGlzLmJ1ZmZlcixpPXQqZStlLHI9dGhpcy5jdW11bGF0aXZlV2VpZ2h0LG89dGhpcy5jdW11bGF0aXZlV2VpZ2h0QWRkaXRpdmUsYT10aGlzLmJpbmRpbmc7dGhpcy5jdW11bGF0aXZlV2VpZ2h0PTAsdGhpcy5jdW11bGF0aXZlV2VpZ2h0QWRkaXRpdmU9MCxyPDEmJnRoaXMuX21peEJ1ZmZlclJlZ2lvbihuLGksZSp0aGlzLl9vcmlnSW5kZXgsMS1yLGUpLG8+MCYmdGhpcy5fbWl4QnVmZmVyUmVnaW9uQWRkaXRpdmUobixpLHRoaXMuX2FkZEluZGV4KmUsMSxlKTtmb3IobGV0IHQ9ZSxyPWUrZTt0IT09cjsrK3QpaWYoblt0XSE9PW5bdCtlXSl7YS5zZXRWYWx1ZShuLGkpO2JyZWFrfX0sc2F2ZU9yaWdpbmFsU3RhdGU6ZnVuY3Rpb24oKXtjb25zdCB0PXRoaXMuYnVmZmVyLGU9dGhpcy52YWx1ZVNpemUsbj1lKnRoaXMuX29yaWdJbmRleDt0aGlzLmJpbmRpbmcuZ2V0VmFsdWUodCxuKTtmb3IobGV0IGk9ZSxyPW47aSE9PXI7KytpKXRbaV09dFtuK2klZV07dGhpcy5fc2V0SWRlbnRpdHkoKSx0aGlzLmN1bXVsYXRpdmVXZWlnaHQ9MCx0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZT0wfSxyZXN0b3JlT3JpZ2luYWxTdGF0ZTpmdW5jdGlvbigpe3RoaXMuYmluZGluZy5zZXRWYWx1ZSh0aGlzLmJ1ZmZlciwzKnRoaXMudmFsdWVTaXplKX0sX3NldEFkZGl0aXZlSWRlbnRpdHlOdW1lcmljOmZ1bmN0aW9uKCl7Y29uc3QgdD10aGlzLl9hZGRJbmRleCp0aGlzLnZhbHVlU2l6ZSxlPXQrdGhpcy52YWx1ZVNpemU7Zm9yKGxldCBuPXQ7bjxlO24rKyl0aGlzLmJ1ZmZlcltuXT0wfSxfc2V0QWRkaXRpdmVJZGVudGl0eVF1YXRlcm5pb246ZnVuY3Rpb24oKXt0aGlzLl9zZXRBZGRpdGl2ZUlkZW50aXR5TnVtZXJpYygpLHRoaXMuYnVmZmVyW3RoaXMuX2FkZEluZGV4KnRoaXMudmFsdWVTaXplKzNdPTF9LF9zZXRBZGRpdGl2ZUlkZW50aXR5T3RoZXI6ZnVuY3Rpb24oKXtjb25zdCB0PXRoaXMuX29yaWdJbmRleCp0aGlzLnZhbHVlU2l6ZSxlPXRoaXMuX2FkZEluZGV4KnRoaXMudmFsdWVTaXplO2ZvcihsZXQgbj0wO248dGhpcy52YWx1ZVNpemU7bisrKXRoaXMuYnVmZmVyW2Urbl09dGhpcy5idWZmZXJbdCtuXX0sX3NlbGVjdDpmdW5jdGlvbih0LGUsbixpLHIpe2lmKGk+PS41KWZvcihsZXQgaT0wO2khPT1yOysraSl0W2UraV09dFtuK2ldfSxfc2xlcnA6ZnVuY3Rpb24odCxlLG4saSl7V090LnNsZXJwRmxhdCh0LGUsdCxlLHQsbixpKX0sX3NsZXJwQWRkaXRpdmU6ZnVuY3Rpb24odCxlLG4saSxyKXtjb25zdCBvPXRoaXMuX3dvcmtJbmRleCpyO1dPdC5tdWx0aXBseVF1YXRlcm5pb25zRmxhdCh0LG8sdCxlLHQsbiksV090LnNsZXJwRmxhdCh0LGUsdCxlLHQsbyxpKX0sX2xlcnA6ZnVuY3Rpb24odCxlLG4saSxyKXtjb25zdCBvPTEtaTtmb3IobGV0IGE9MDthIT09cjsrK2Epe2NvbnN0IHI9ZSthO3Rbcl09dFtyXSpvK3RbbithXSppfX0sX2xlcnBBZGRpdGl2ZTpmdW5jdGlvbih0LGUsbixpLHIpe2ZvcihsZXQgbz0wO28hPT1yOysrbyl7Y29uc3Qgcj1lK287dFtyXT10W3JdK3RbbitvXSppfX19KTtjb25zdCBCanQ9bmV3IFJlZ0V4cCgiW1xcW1xcXVxcLjpcXC9dIiwiZyIpLEhqdD0iW15cXFtcXF1cXC46XFwvXSIsRmp0PSJbXiIrIlxcW1xcXVxcLjpcXC8iLnJlcGxhY2UoIlxcLiIsIiIpKyJdIixWanQ9LygoPzpXQytbXC86XSkqKS8uc291cmNlLnJlcGxhY2UoIldDIixIanQpLFVqdD0vKFdDT0QrKT8vLnNvdXJjZS5yZXBsYWNlKCJXQ09EIixGanQpLGpqdD0vKD86XC4oV0MrKSg/OlxbKC4rKVxdKT8pPy8uc291cmNlLnJlcGxhY2UoIldDIixIanQpLEdqdD0vXC4oV0MrKSg/OlxbKC4rKVxdKT8vLnNvdXJjZS5yZXBsYWNlKCJXQyIsSGp0KSxXanQ9bmV3IFJlZ0V4cCgiXiIrVmp0K1VqdCtqanQrR2p0KyIkIikscWp0PVsibWF0ZXJpYWwiLCJtYXRlcmlhbHMiLCJib25lcyJdO2Z1bmN0aW9uIFlqdCh0LGUsbil7Y29uc3QgaT1ufHxYanQucGFyc2VUcmFja05hbWUoZSk7dGhpcy5fdGFyZ2V0R3JvdXA9dCx0aGlzLl9iaW5kaW5ncz10LnN1YnNjcmliZV8oZSxpKX1mdW5jdGlvbiBYanQodCxlLG4pe3RoaXMucGF0aD1lLHRoaXMucGFyc2VkUGF0aD1ufHxYanQucGFyc2VUcmFja05hbWUoZSksdGhpcy5ub2RlPVhqdC5maW5kTm9kZSh0LHRoaXMucGFyc2VkUGF0aC5ub2RlTmFtZSl8fHQsdGhpcy5yb290Tm9kZT10fWZ1bmN0aW9uICRqdCgpe3RoaXMudXVpZD1ST3QuZ2VuZXJhdGVVVUlEKCksdGhpcy5fb2JqZWN0cz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpLHRoaXMubkNhY2hlZE9iamVjdHNfPTA7Y29uc3QgdD17fTt0aGlzLl9pbmRpY2VzQnlVVUlEPXQ7Zm9yKGxldCBlPTAsbj1hcmd1bWVudHMubGVuZ3RoO2UhPT1uOysrZSl0W2FyZ3VtZW50c1tlXS51dWlkXT1lO3RoaXMuX3BhdGhzPVtdLHRoaXMuX3BhcnNlZFBhdGhzPVtdLHRoaXMuX2JpbmRpbmdzPVtdLHRoaXMuX2JpbmRpbmdzSW5kaWNlc0J5UGF0aD17fTtjb25zdCBlPXRoaXM7dGhpcy5zdGF0cz17b2JqZWN0czp7Z2V0IHRvdGFsKCl7cmV0dXJuIGUuX29iamVjdHMubGVuZ3RofSxnZXQgaW5Vc2UoKXtyZXR1cm4gdGhpcy50b3RhbC1lLm5DYWNoZWRPYmplY3RzX319LGdldCBiaW5kaW5nc1Blck9iamVjdCgpe3JldHVybiBlLl9iaW5kaW5ncy5sZW5ndGh9fX1PYmplY3QuYXNzaWduKFlqdC5wcm90b3R5cGUse2dldFZhbHVlOmZ1bmN0aW9uKHQsZSl7dGhpcy5iaW5kKCk7Y29uc3Qgbj10aGlzLl9iaW5kaW5nc1t0aGlzLl90YXJnZXRHcm91cC5uQ2FjaGVkT2JqZWN0c19dO3ZvaWQgMCE9PW4mJm4uZ2V0VmFsdWUodCxlKX0sc2V0VmFsdWU6ZnVuY3Rpb24odCxlKXtjb25zdCBuPXRoaXMuX2JpbmRpbmdzO2ZvcihsZXQgaT10aGlzLl90YXJnZXRHcm91cC5uQ2FjaGVkT2JqZWN0c18scj1uLmxlbmd0aDtpIT09cjsrK2kpbltpXS5zZXRWYWx1ZSh0LGUpfSxiaW5kOmZ1bmN0aW9uKCl7Y29uc3QgdD10aGlzLl9iaW5kaW5ncztmb3IobGV0IGU9dGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfLG49dC5sZW5ndGg7ZSE9PW47KytlKXRbZV0uYmluZCgpfSx1bmJpbmQ6ZnVuY3Rpb24oKXtjb25zdCB0PXRoaXMuX2JpbmRpbmdzO2ZvcihsZXQgZT10aGlzLl90YXJnZXRHcm91cC5uQ2FjaGVkT2JqZWN0c18sbj10Lmxlbmd0aDtlIT09bjsrK2UpdFtlXS51bmJpbmQoKX19KSxPYmplY3QuYXNzaWduKFhqdCx7Q29tcG9zaXRlOllqdCxjcmVhdGU6ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0JiZ0LmlzQW5pbWF0aW9uT2JqZWN0R3JvdXA/bmV3IFhqdC5Db21wb3NpdGUodCxlLG4pOm5ldyBYanQodCxlLG4pfSxzYW5pdGl6ZU5vZGVOYW1lOmZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UoL1xzL2csIl8iKS5yZXBsYWNlKEJqdCwiIil9LHBhcnNlVHJhY2tOYW1lOmZ1bmN0aW9uKHQpe2NvbnN0IGU9V2p0LmV4ZWModCk7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCJQcm9wZXJ0eUJpbmRpbmc6IENhbm5vdCBwYXJzZSB0cmFja05hbWU6ICIrdCk7Y29uc3Qgbj17bm9kZU5hbWU6ZVsyXSxvYmplY3ROYW1lOmVbM10sb2JqZWN0SW5kZXg6ZVs0XSxwcm9wZXJ0eU5hbWU6ZVs1XSxwcm9wZXJ0eUluZGV4OmVbNl19LGk9bi5ub2RlTmFtZSYmbi5ub2RlTmFtZS5sYXN0SW5kZXhPZigiLiIpO2lmKHZvaWQgMCE9PWkmJi0xIT09aSl7Y29uc3QgdD1uLm5vZGVOYW1lLnN1YnN0cmluZyhpKzEpOy0xIT09cWp0LmluZGV4T2YodCkmJihuLm5vZGVOYW1lPW4ubm9kZU5hbWUuc3Vic3RyaW5nKDAsaSksbi5vYmplY3ROYW1lPXQpfWlmKG51bGw9PT1uLnByb3BlcnR5TmFtZXx8MD09PW4ucHJvcGVydHlOYW1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlByb3BlcnR5QmluZGluZzogY2FuIG5vdCBwYXJzZSBwcm9wZXJ0eU5hbWUgZnJvbSB0cmFja05hbWU6ICIrdCk7cmV0dXJuIG59LGZpbmROb2RlOmZ1bmN0aW9uKHQsZSl7aWYoIWV8fCIiPT09ZXx8Ii4iPT09ZXx8LTE9PT1lfHxlPT09dC5uYW1lfHxlPT09dC51dWlkKXJldHVybiB0O2lmKHQuc2tlbGV0b24pe2NvbnN0IG49dC5za2VsZXRvbi5nZXRCb25lQnlOYW1lKGUpO2lmKHZvaWQgMCE9PW4pcmV0dXJuIG59aWYodC5jaGlsZHJlbil7Y29uc3Qgbj1mdW5jdGlvbih0KXtmb3IobGV0IGk9MDtpPHQubGVuZ3RoO2krKyl7Y29uc3Qgcj10W2ldO2lmKHIubmFtZT09PWV8fHIudXVpZD09PWUpcmV0dXJuIHI7Y29uc3Qgbz1uKHIuY2hpbGRyZW4pO2lmKG8pcmV0dXJuIG99cmV0dXJuIG51bGx9LGk9bih0LmNoaWxkcmVuKTtpZihpKXJldHVybiBpfXJldHVybiBudWxsfX0pLE9iamVjdC5hc3NpZ24oWGp0LnByb3RvdHlwZSx7X2dldFZhbHVlX3VuYXZhaWxhYmxlOmZ1bmN0aW9uKCl7fSxfc2V0VmFsdWVfdW5hdmFpbGFibGU6ZnVuY3Rpb24oKXt9LEJpbmRpbmdUeXBlOntEaXJlY3Q6MCxFbnRpcmVBcnJheToxLEFycmF5RWxlbWVudDoyLEhhc0Zyb21Ub0FycmF5OjN9LFZlcnNpb25pbmc6e05vbmU6MCxOZWVkc1VwZGF0ZToxLE1hdHJpeFdvcmxkTmVlZHNVcGRhdGU6Mn0sR2V0dGVyQnlCaW5kaW5nVHlwZTpbZnVuY3Rpb24gdChlLG4pe2Vbbl09dGhpcy5ub2RlW3RoaXMucHJvcGVydHlOYW1lXX0sZnVuY3Rpb24gdChlLG4pe2NvbnN0IGk9dGhpcy5yZXNvbHZlZFByb3BlcnR5O2ZvcihsZXQgdD0wLHI9aS5sZW5ndGg7dCE9PXI7Kyt0KWVbbisrXT1pW3RdfSxmdW5jdGlvbiB0KGUsbil7ZVtuXT10aGlzLnJlc29sdmVkUHJvcGVydHlbdGhpcy5wcm9wZXJ0eUluZGV4XX0sZnVuY3Rpb24gdChlLG4pe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eS50b0FycmF5KGUsbil9XSxTZXR0ZXJCeUJpbmRpbmdUeXBlQW5kVmVyc2lvbmluZzpbW2Z1bmN0aW9uIHQoZSxuKXt0aGlzLnRhcmdldE9iamVjdFt0aGlzLnByb3BlcnR5TmFtZV09ZVtuXX0sZnVuY3Rpb24gdChlLG4pe3RoaXMudGFyZ2V0T2JqZWN0W3RoaXMucHJvcGVydHlOYW1lXT1lW25dLHRoaXMudGFyZ2V0T2JqZWN0Lm5lZWRzVXBkYXRlPSEwfSxmdW5jdGlvbiB0KGUsbil7dGhpcy50YXJnZXRPYmplY3RbdGhpcy5wcm9wZXJ0eU5hbWVdPWVbbl0sdGhpcy50YXJnZXRPYmplY3QubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH1dLFtmdW5jdGlvbiB0KGUsbil7Y29uc3QgaT10aGlzLnJlc29sdmVkUHJvcGVydHk7Zm9yKGxldCB0PTAscj1pLmxlbmd0aDt0IT09cjsrK3QpaVt0XT1lW24rK119LGZ1bmN0aW9uIHQoZSxuKXtjb25zdCBpPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eTtmb3IobGV0IHQ9MCxyPWkubGVuZ3RoO3QhPT1yOysrdClpW3RdPWVbbisrXTt0aGlzLnRhcmdldE9iamVjdC5uZWVkc1VwZGF0ZT0hMH0sZnVuY3Rpb24gdChlLG4pe2NvbnN0IGk9dGhpcy5yZXNvbHZlZFByb3BlcnR5O2ZvcihsZXQgdD0wLHI9aS5sZW5ndGg7dCE9PXI7Kyt0KWlbdF09ZVtuKytdO3RoaXMudGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9XSxbZnVuY3Rpb24gdChlLG4pe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eVt0aGlzLnByb3BlcnR5SW5kZXhdPWVbbl19LGZ1bmN0aW9uIHQoZSxuKXt0aGlzLnJlc29sdmVkUHJvcGVydHlbdGhpcy5wcm9wZXJ0eUluZGV4XT1lW25dLHRoaXMudGFyZ2V0T2JqZWN0Lm5lZWRzVXBkYXRlPSEwfSxmdW5jdGlvbiB0KGUsbil7dGhpcy5yZXNvbHZlZFByb3BlcnR5W3RoaXMucHJvcGVydHlJbmRleF09ZVtuXSx0aGlzLnRhcmdldE9iamVjdC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSEwfV0sW2Z1bmN0aW9uIHQoZSxuKXt0aGlzLnJlc29sdmVkUHJvcGVydHkuZnJvbUFycmF5KGUsbil9LGZ1bmN0aW9uIHQoZSxuKXt0aGlzLnJlc29sdmVkUHJvcGVydHkuZnJvbUFycmF5KGUsbiksdGhpcy50YXJnZXRPYmplY3QubmVlZHNVcGRhdGU9ITB9LGZ1bmN0aW9uIHQoZSxuKXt0aGlzLnJlc29sdmVkUHJvcGVydHkuZnJvbUFycmF5KGUsbiksdGhpcy50YXJnZXRPYmplY3QubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH1dXSxnZXRWYWx1ZTpmdW5jdGlvbiB0KGUsbil7dGhpcy5iaW5kKCksdGhpcy5nZXRWYWx1ZShlLG4pfSxzZXRWYWx1ZTpmdW5jdGlvbiB0KGUsbil7dGhpcy5iaW5kKCksdGhpcy5zZXRWYWx1ZShlLG4pfSxiaW5kOmZ1bmN0aW9uKCl7bGV0IHQ9dGhpcy5ub2RlO2NvbnN0IGU9dGhpcy5wYXJzZWRQYXRoLG49ZS5vYmplY3ROYW1lLGk9ZS5wcm9wZXJ0eU5hbWU7bGV0IHI9ZS5wcm9wZXJ0eUluZGV4O2lmKHR8fCh0PVhqdC5maW5kTm9kZSh0aGlzLnJvb3ROb2RlLGUubm9kZU5hbWUpfHx0aGlzLnJvb3ROb2RlLHRoaXMubm9kZT10KSx0aGlzLmdldFZhbHVlPXRoaXMuX2dldFZhbHVlX3VuYXZhaWxhYmxlLHRoaXMuc2V0VmFsdWU9dGhpcy5fc2V0VmFsdWVfdW5hdmFpbGFibGUsIXQpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBUcnlpbmcgdG8gdXBkYXRlIG5vZGUgZm9yIHRyYWNrOiAiK3RoaXMucGF0aCsiIGJ1dCBpdCB3YXNuJ3QgZm91bmQuIik7aWYobil7bGV0IGk9ZS5vYmplY3RJbmRleDtzd2l0Y2gobil7Y2FzZSJtYXRlcmlhbHMiOmlmKCF0Lm1hdGVyaWFsKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG1hdGVyaWFsIGFzIG5vZGUgZG9lcyBub3QgaGF2ZSBhIG1hdGVyaWFsLiIsdGhpcyk7aWYoIXQubWF0ZXJpYWwubWF0ZXJpYWxzKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG1hdGVyaWFsLm1hdGVyaWFscyBhcyBub2RlLm1hdGVyaWFsIGRvZXMgbm90IGhhdmUgYSBtYXRlcmlhbHMgYXJyYXkuIix0aGlzKTt0PXQubWF0ZXJpYWwubWF0ZXJpYWxzO2JyZWFrO2Nhc2UiYm9uZXMiOmlmKCF0LnNrZWxldG9uKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIGJvbmVzIGFzIG5vZGUgZG9lcyBub3QgaGF2ZSBhIHNrZWxldG9uLiIsdGhpcyk7dD10LnNrZWxldG9uLmJvbmVzO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKWlmKHRbZV0ubmFtZT09PWkpe2k9ZTticmVha31icmVhaztkZWZhdWx0OmlmKHZvaWQgMD09PXRbbl0pcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gb2JqZWN0TmFtZSBvZiBub2RlIHVuZGVmaW5lZC4iLHRoaXMpO3Q9dFtuXX1pZih2b2lkIDAhPT1pKXtpZih2b2lkIDA9PT10W2ldKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogVHJ5aW5nIHRvIGJpbmQgdG8gb2JqZWN0SW5kZXggb2Ygb2JqZWN0TmFtZSwgYnV0IGlzIHVuZGVmaW5lZC4iLHRoaXMsdCk7dD10W2ldfX1jb25zdCBvPXRbaV07aWYodm9pZCAwPT09bylyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IFRyeWluZyB0byB1cGRhdGUgcHJvcGVydHkgZm9yIHRyYWNrOiAiK2Uubm9kZU5hbWUrIi4iK2krIiBidXQgaXQgd2Fzbid0IGZvdW5kLiIsdCk7bGV0IGE9dGhpcy5WZXJzaW9uaW5nLk5vbmU7dGhpcy50YXJnZXRPYmplY3Q9dCx2b2lkIDAhPT10Lm5lZWRzVXBkYXRlP2E9dGhpcy5WZXJzaW9uaW5nLk5lZWRzVXBkYXRlOnZvaWQgMCE9PXQubWF0cml4V29ybGROZWVkc1VwZGF0ZSYmKGE9dGhpcy5WZXJzaW9uaW5nLk1hdHJpeFdvcmxkTmVlZHNVcGRhdGUpO2xldCBzPXRoaXMuQmluZGluZ1R5cGUuRGlyZWN0O2lmKHZvaWQgMCE9PXIpe2lmKCJtb3JwaFRhcmdldEluZmx1ZW5jZXMiPT09aSl7aWYoIXQuZ2VvbWV0cnkpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gbW9ycGhUYXJnZXRJbmZsdWVuY2VzIGJlY2F1c2Ugbm9kZSBkb2VzIG5vdCBoYXZlIGEgZ2VvbWV0cnkuIix0aGlzKTtpZighdC5nZW9tZXRyeS5pc0J1ZmZlckdlb21ldHJ5KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG1vcnBoVGFyZ2V0SW5mbHVlbmNlcyBvbiBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIix0aGlzKTtpZighdC5nZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gbW9ycGhUYXJnZXRJbmZsdWVuY2VzIGJlY2F1c2Ugbm9kZSBkb2VzIG5vdCBoYXZlIGEgZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLiIsdGhpcyk7dm9pZCAwIT09dC5tb3JwaFRhcmdldERpY3Rpb25hcnlbcl0mJihyPXQubW9ycGhUYXJnZXREaWN0aW9uYXJ5W3JdKX1zPXRoaXMuQmluZGluZ1R5cGUuQXJyYXlFbGVtZW50LHRoaXMucmVzb2x2ZWRQcm9wZXJ0eT1vLHRoaXMucHJvcGVydHlJbmRleD1yfWVsc2Ugdm9pZCAwIT09by5mcm9tQXJyYXkmJnZvaWQgMCE9PW8udG9BcnJheT8ocz10aGlzLkJpbmRpbmdUeXBlLkhhc0Zyb21Ub0FycmF5LHRoaXMucmVzb2x2ZWRQcm9wZXJ0eT1vKTpBcnJheS5pc0FycmF5KG8pPyhzPXRoaXMuQmluZGluZ1R5cGUuRW50aXJlQXJyYXksdGhpcy5yZXNvbHZlZFByb3BlcnR5PW8pOnRoaXMucHJvcGVydHlOYW1lPWk7dGhpcy5nZXRWYWx1ZT10aGlzLkdldHRlckJ5QmluZGluZ1R5cGVbc10sdGhpcy5zZXRWYWx1ZT10aGlzLlNldHRlckJ5QmluZGluZ1R5cGVBbmRWZXJzaW9uaW5nW3NdW2FdfSx1bmJpbmQ6ZnVuY3Rpb24oKXt0aGlzLm5vZGU9bnVsbCx0aGlzLmdldFZhbHVlPXRoaXMuX2dldFZhbHVlX3VuYm91bmQsdGhpcy5zZXRWYWx1ZT10aGlzLl9zZXRWYWx1ZV91bmJvdW5kfX0pLE9iamVjdC5hc3NpZ24oWGp0LnByb3RvdHlwZSx7X2dldFZhbHVlX3VuYm91bmQ6WGp0LnByb3RvdHlwZS5nZXRWYWx1ZSxfc2V0VmFsdWVfdW5ib3VuZDpYanQucHJvdG90eXBlLnNldFZhbHVlfSksT2JqZWN0LmFzc2lnbigkanQucHJvdG90eXBlLHtpc0FuaW1hdGlvbk9iamVjdEdyb3VwOiEwLGFkZDpmdW5jdGlvbigpe2NvbnN0IHQ9dGhpcy5fb2JqZWN0cyxlPXRoaXMuX2luZGljZXNCeVVVSUQsbj10aGlzLl9wYXRocyxpPXRoaXMuX3BhcnNlZFBhdGhzLHI9dGhpcy5fYmluZGluZ3Msbz1yLmxlbmd0aDtsZXQgYSxzPXQubGVuZ3RoLGw9dGhpcy5uQ2FjaGVkT2JqZWN0c187Zm9yKGxldCBjPTAsdT1hcmd1bWVudHMubGVuZ3RoO2MhPT11OysrYyl7Y29uc3QgdT1hcmd1bWVudHNbY10saD11LnV1aWQ7bGV0IGQ9ZVtoXTtpZih2b2lkIDA9PT1kKXtkPXMrKyxlW2hdPWQsdC5wdXNoKHUpO2ZvcihsZXQgdD0wLGU9bzt0IT09ZTsrK3Qpclt0XS5wdXNoKG5ldyBYanQodSxuW3RdLGlbdF0pKX1lbHNlIGlmKGQ8bCl7YT10W2RdO2NvbnN0IHM9LS1sLGM9dFtzXTtlW2MudXVpZF09ZCx0W2RdPWMsZVtoXT1zLHRbc109dTtmb3IobGV0IHQ9MCxlPW87dCE9PWU7Kyt0KXtjb25zdCBlPXJbdF07bGV0IG89ZVtkXTtlW2RdPWVbc10sdm9pZCAwPT09byYmKG89bmV3IFhqdCh1LG5bdF0saVt0XSkpLGVbc109b319ZWxzZSB0W2RdIT09YSYmY29uc29sZS5lcnJvcigiVEhSRUUuQW5pbWF0aW9uT2JqZWN0R3JvdXA6IERpZmZlcmVudCBvYmplY3RzIHdpdGggdGhlIHNhbWUgVVVJRCBkZXRlY3RlZC4gQ2xlYW4gdGhlIGNhY2hlcyBvciByZWNyZWF0ZSB5b3VyIGluZnJhc3RydWN0dXJlIHdoZW4gcmVsb2FkaW5nIHNjZW5lcy4iKX10aGlzLm5DYWNoZWRPYmplY3RzXz1sfSxyZW1vdmU6ZnVuY3Rpb24oKXtjb25zdCB0PXRoaXMuX29iamVjdHMsZT10aGlzLl9pbmRpY2VzQnlVVUlELG49dGhpcy5fYmluZGluZ3MsaT1uLmxlbmd0aDtsZXQgcj10aGlzLm5DYWNoZWRPYmplY3RzXztmb3IobGV0IG89MCxhPWFyZ3VtZW50cy5sZW5ndGg7byE9PWE7KytvKXtjb25zdCBhPWFyZ3VtZW50c1tvXSxzPWEudXVpZCxsPWVbc107aWYodm9pZCAwIT09bCYmbD49cil7Y29uc3Qgbz1yKyssYz10W29dO2VbYy51dWlkXT1sLHRbbF09YyxlW3NdPW8sdFtvXT1hO2ZvcihsZXQgdD0wLGU9aTt0IT09ZTsrK3Qpe2NvbnN0IGU9blt0XSxpPWVbbF07ZVtsXT1lW29dLGVbb109aX19fXRoaXMubkNhY2hlZE9iamVjdHNfPXJ9LHVuY2FjaGU6ZnVuY3Rpb24oKXtjb25zdCB0PXRoaXMuX29iamVjdHMsZT10aGlzLl9pbmRpY2VzQnlVVUlELG49dGhpcy5fYmluZGluZ3MsaT1uLmxlbmd0aDtsZXQgcj10aGlzLm5DYWNoZWRPYmplY3RzXyxvPXQubGVuZ3RoO2ZvcihsZXQgYT0wLHM9YXJndW1lbnRzLmxlbmd0aDthIT09czsrK2Epe2NvbnN0IHM9YXJndW1lbnRzW2FdLnV1aWQsbD1lW3NdO2lmKHZvaWQgMCE9PWwpaWYoZGVsZXRlIGVbc10sbDxyKXtjb25zdCBhPS0tcixzPXRbYV0sYz0tLW8sdT10W2NdO2Vbcy51dWlkXT1sLHRbbF09cyxlW3UudXVpZF09YSx0W2FdPXUsdC5wb3AoKTtmb3IobGV0IHQ9MCxlPWk7dCE9PWU7Kyt0KXtjb25zdCBlPW5bdF0saT1lW2NdO2VbbF09ZVthXSxlW2FdPWksZS5wb3AoKX19ZWxzZXtjb25zdCByPS0tbyxhPXRbcl07cj4wJiYoZVthLnV1aWRdPWwpLHRbbF09YSx0LnBvcCgpO2ZvcihsZXQgdD0wLGU9aTt0IT09ZTsrK3Qpe2NvbnN0IGU9blt0XTtlW2xdPWVbcl0sZS5wb3AoKX19fXRoaXMubkNhY2hlZE9iamVjdHNfPXJ9LHN1YnNjcmliZV86ZnVuY3Rpb24odCxlKXtjb25zdCBuPXRoaXMuX2JpbmRpbmdzSW5kaWNlc0J5UGF0aDtsZXQgaT1uW3RdO2NvbnN0IHI9dGhpcy5fYmluZGluZ3M7aWYodm9pZCAwIT09aSlyZXR1cm4gcltpXTtjb25zdCBvPXRoaXMuX3BhdGhzLGE9dGhpcy5fcGFyc2VkUGF0aHMscz10aGlzLl9vYmplY3RzLGw9dGhpcy5uQ2FjaGVkT2JqZWN0c18sYz1uZXcgQXJyYXkocy5sZW5ndGgpO2k9ci5sZW5ndGgsblt0XT1pLG8ucHVzaCh0KSxhLnB1c2goZSksci5wdXNoKGMpO2ZvcihsZXQgbj1sLGk9cy5sZW5ndGg7biE9PWk7KytuKWNbbl09bmV3IFhqdChzW25dLHQsZSk7cmV0dXJuIGN9LHVuc3Vic2NyaWJlXzpmdW5jdGlvbih0KXtjb25zdCBlPXRoaXMuX2JpbmRpbmdzSW5kaWNlc0J5UGF0aCxuPWVbdF07aWYodm9pZCAwIT09bil7Y29uc3QgaT10aGlzLl9wYXRocyxyPXRoaXMuX3BhcnNlZFBhdGhzLG89dGhpcy5fYmluZGluZ3MsYT1vLmxlbmd0aC0xLHM9b1thXTtlW3RbYV1dPW4sb1tuXT1zLG8ucG9wKCkscltuXT1yW2FdLHIucG9wKCksaVtuXT1pW2FdLGkucG9wKCl9fX0pO2NsYXNzIEtqdHtjb25zdHJ1Y3Rvcih0LGUsbj1udWxsLGk9ZS5ibGVuZE1vZGUpe3RoaXMuX21peGVyPXQsdGhpcy5fY2xpcD1lLHRoaXMuX2xvY2FsUm9vdD1uLHRoaXMuYmxlbmRNb2RlPWk7Y29uc3Qgcj1lLnRyYWNrcyxvPXIubGVuZ3RoLGE9bmV3IEFycmF5KG8pLHM9e2VuZGluZ1N0YXJ0OmdPdCxlbmRpbmdFbmQ6Z090fTtmb3IobGV0IHQ9MDt0IT09bzsrK3Qpe2NvbnN0IGU9clt0XS5jcmVhdGVJbnRlcnBvbGFudChudWxsKTthW3RdPWUsZS5zZXR0aW5ncz1zfXRoaXMuX2ludGVycG9sYW50U2V0dGluZ3M9cyx0aGlzLl9pbnRlcnBvbGFudHM9YSx0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzPW5ldyBBcnJheShvKSx0aGlzLl9jYWNoZUluZGV4PW51bGwsdGhpcy5fYnlDbGlwQ2FjaGVJbmRleD1udWxsLHRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50PW51bGwsdGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ9bnVsbCx0aGlzLmxvb3A9MjIwMSx0aGlzLl9sb29wQ291bnQ9LTEsdGhpcy5fc3RhcnRUaW1lPW51bGwsdGhpcy50aW1lPTAsdGhpcy50aW1lU2NhbGU9MSx0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGU9MSx0aGlzLndlaWdodD0xLHRoaXMuX2VmZmVjdGl2ZVdlaWdodD0xLHRoaXMucmVwZXRpdGlvbnM9MS8wLHRoaXMucGF1c2VkPSExLHRoaXMuZW5hYmxlZD0hMCx0aGlzLmNsYW1wV2hlbkZpbmlzaGVkPSExLHRoaXMuemVyb1Nsb3BlQXRTdGFydD0hMCx0aGlzLnplcm9TbG9wZUF0RW5kPSEwfXBsYXkoKXtyZXR1cm4gdGhpcy5fbWl4ZXIuX2FjdGl2YXRlQWN0aW9uKHRoaXMpLHRoaXN9c3RvcCgpe3JldHVybiB0aGlzLl9taXhlci5fZGVhY3RpdmF0ZUFjdGlvbih0aGlzKSx0aGlzLnJlc2V0KCl9cmVzZXQoKXtyZXR1cm4gdGhpcy5wYXVzZWQ9ITEsdGhpcy5lbmFibGVkPSEwLHRoaXMudGltZT0wLHRoaXMuX2xvb3BDb3VudD0tMSx0aGlzLl9zdGFydFRpbWU9bnVsbCx0aGlzLnN0b3BGYWRpbmcoKS5zdG9wV2FycGluZygpfWlzUnVubmluZygpe3JldHVybiB0aGlzLmVuYWJsZWQmJiF0aGlzLnBhdXNlZCYmMCE9PXRoaXMudGltZVNjYWxlJiZudWxsPT09dGhpcy5fc3RhcnRUaW1lJiZ0aGlzLl9taXhlci5faXNBY3RpdmVBY3Rpb24odGhpcyl9aXNTY2hlZHVsZWQoKXtyZXR1cm4gdGhpcy5fbWl4ZXIuX2lzQWN0aXZlQWN0aW9uKHRoaXMpfXN0YXJ0QXQodCl7cmV0dXJuIHRoaXMuX3N0YXJ0VGltZT10LHRoaXN9c2V0TG9vcCh0LGUpe3JldHVybiB0aGlzLmxvb3A9dCx0aGlzLnJlcGV0aXRpb25zPWUsdGhpc31zZXRFZmZlY3RpdmVXZWlnaHQodCl7cmV0dXJuIHRoaXMud2VpZ2h0PXQsdGhpcy5fZWZmZWN0aXZlV2VpZ2h0PXRoaXMuZW5hYmxlZD90OjAsdGhpcy5zdG9wRmFkaW5nKCl9Z2V0RWZmZWN0aXZlV2VpZ2h0KCl7cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVdlaWdodH1mYWRlSW4odCl7cmV0dXJuIHRoaXMuX3NjaGVkdWxlRmFkaW5nKHQsMCwxKX1mYWRlT3V0KHQpe3JldHVybiB0aGlzLl9zY2hlZHVsZUZhZGluZyh0LDEsMCl9Y3Jvc3NGYWRlRnJvbSh0LGUsbil7aWYodC5mYWRlT3V0KGUpLHRoaXMuZmFkZUluKGUpLG4pe2NvbnN0IG49dGhpcy5fY2xpcC5kdXJhdGlvbixpPXQuX2NsaXAuZHVyYXRpb24scj1uL2k7dC53YXJwKDEsaS9uLGUpLHRoaXMud2FycChyLDEsZSl9cmV0dXJuIHRoaXN9Y3Jvc3NGYWRlVG8odCxlLG4pe3JldHVybiB0LmNyb3NzRmFkZUZyb20odGhpcyxlLG4pfXN0b3BGYWRpbmcoKXtjb25zdCB0PXRoaXMuX3dlaWdodEludGVycG9sYW50O3JldHVybiBudWxsIT09dCYmKHRoaXMuX3dlaWdodEludGVycG9sYW50PW51bGwsdGhpcy5fbWl4ZXIuX3Rha2VCYWNrQ29udHJvbEludGVycG9sYW50KHQpKSx0aGlzfXNldEVmZmVjdGl2ZVRpbWVTY2FsZSh0KXtyZXR1cm4gdGhpcy50aW1lU2NhbGU9dCx0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGU9dGhpcy5wYXVzZWQ/MDp0LHRoaXMuc3RvcFdhcnBpbmcoKX1nZXRFZmZlY3RpdmVUaW1lU2NhbGUoKXtyZXR1cm4gdGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlfXNldER1cmF0aW9uKHQpe3JldHVybiB0aGlzLnRpbWVTY2FsZT10aGlzLl9jbGlwLmR1cmF0aW9uL3QsdGhpcy5zdG9wV2FycGluZygpfXN5bmNXaXRoKHQpe3JldHVybiB0aGlzLnRpbWU9dC50aW1lLHRoaXMudGltZVNjYWxlPXQudGltZVNjYWxlLHRoaXMuc3RvcFdhcnBpbmcoKX1oYWx0KHQpe3JldHVybiB0aGlzLndhcnAodGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlLDAsdCl9d2FycCh0LGUsbil7Y29uc3QgaT10aGlzLl9taXhlcixyPWkudGltZSxvPXRoaXMudGltZVNjYWxlO2xldCBhPXRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50O251bGw9PT1hJiYoYT1pLl9sZW5kQ29udHJvbEludGVycG9sYW50KCksdGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ9YSk7Y29uc3Qgcz1hLnBhcmFtZXRlclBvc2l0aW9ucyxsPWEuc2FtcGxlVmFsdWVzO3JldHVybiBzWzBdPXIsc1sxXT1yK24sbFswXT10L28sbFsxXT1lL28sdGhpc31zdG9wV2FycGluZygpe2NvbnN0IHQ9dGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ7cmV0dXJuIG51bGwhPT10JiYodGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ9bnVsbCx0aGlzLl9taXhlci5fdGFrZUJhY2tDb250cm9sSW50ZXJwb2xhbnQodCkpLHRoaXN9Z2V0TWl4ZXIoKXtyZXR1cm4gdGhpcy5fbWl4ZXJ9Z2V0Q2xpcCgpe3JldHVybiB0aGlzLl9jbGlwfWdldFJvb3QoKXtyZXR1cm4gdGhpcy5fbG9jYWxSb290fHx0aGlzLl9taXhlci5fcm9vdH1fdXBkYXRlKHQsZSxuLGkpe2lmKCF0aGlzLmVuYWJsZWQpcmV0dXJuIHZvaWQgdGhpcy5fdXBkYXRlV2VpZ2h0KHQpO2NvbnN0IHI9dGhpcy5fc3RhcnRUaW1lO2lmKG51bGwhPT1yKXtjb25zdCBpPSh0LXIpKm47aWYoaTwwfHwwPT09bilyZXR1cm47dGhpcy5fc3RhcnRUaW1lPW51bGwsZT1uKml9ZSo9dGhpcy5fdXBkYXRlVGltZVNjYWxlKHQpO2NvbnN0IG89dGhpcy5fdXBkYXRlVGltZShlKSxhPXRoaXMuX3VwZGF0ZVdlaWdodCh0KTtpZihhPjApe2NvbnN0IHQ9dGhpcy5faW50ZXJwb2xhbnRzLGU9dGhpcy5fcHJvcGVydHlCaW5kaW5ncztzd2l0Y2godGhpcy5ibGVuZE1vZGUpe2Nhc2UgYk90OmZvcihsZXQgbj0wLGk9dC5sZW5ndGg7biE9PWk7KytuKXRbbl0uZXZhbHVhdGUobyksZVtuXS5hY2N1bXVsYXRlQWRkaXRpdmUoYSk7YnJlYWs7Y2FzZSB2T3Q6ZGVmYXVsdDpmb3IobGV0IG49MCxyPXQubGVuZ3RoO24hPT1yOysrbil0W25dLmV2YWx1YXRlKG8pLGVbbl0uYWNjdW11bGF0ZShpLGEpfX19X3VwZGF0ZVdlaWdodCh0KXtsZXQgZT0wO2lmKHRoaXMuZW5hYmxlZCl7ZT10aGlzLndlaWdodDtjb25zdCBuPXRoaXMuX3dlaWdodEludGVycG9sYW50O2lmKG51bGwhPT1uKXtjb25zdCBpPW4uZXZhbHVhdGUodClbMF07ZSo9aSx0Pm4ucGFyYW1ldGVyUG9zaXRpb25zWzFdJiYodGhpcy5zdG9wRmFkaW5nKCksMD09PWkmJih0aGlzLmVuYWJsZWQ9ITEpKX19cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVdlaWdodD1lLGV9X3VwZGF0ZVRpbWVTY2FsZSh0KXtsZXQgZT0wO2lmKCF0aGlzLnBhdXNlZCl7ZT10aGlzLnRpbWVTY2FsZTtjb25zdCBuPXRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50O251bGwhPT1uJiYoZSo9bi5ldmFsdWF0ZSh0KVswXSx0Pm4ucGFyYW1ldGVyUG9zaXRpb25zWzFdJiYodGhpcy5zdG9wV2FycGluZygpLDA9PT1lP3RoaXMucGF1c2VkPSEwOnRoaXMudGltZVNjYWxlPWUpKX1yZXR1cm4gdGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlPWUsZX1fdXBkYXRlVGltZSh0KXtjb25zdCBlPXRoaXMuX2NsaXAuZHVyYXRpb24sbj10aGlzLmxvb3A7bGV0IGk9dGhpcy50aW1lK3Qscj10aGlzLl9sb29wQ291bnQ7Y29uc3Qgbz0yMjAyPT09bjtpZigwPT09dClyZXR1cm4tMT09PXI/aTpvJiYxPT0oMSZyKT9lLWk6aTtpZigyMjAwPT09bil7LTE9PT1yJiYodGhpcy5fbG9vcENvdW50PTAsdGhpcy5fc2V0RW5kaW5ncyghMCwhMCwhMSkpO3Q6e2lmKGk+PWUpaT1lO2Vsc2V7aWYoIShpPDApKXt0aGlzLnRpbWU9aTticmVhayB0fWk9MH10aGlzLmNsYW1wV2hlbkZpbmlzaGVkP3RoaXMucGF1c2VkPSEwOnRoaXMuZW5hYmxlZD0hMSx0aGlzLnRpbWU9aSx0aGlzLl9taXhlci5kaXNwYXRjaEV2ZW50KHt0eXBlOiJmaW5pc2hlZCIsYWN0aW9uOnRoaXMsZGlyZWN0aW9uOnQ8MD8tMToxfSl9fWVsc2V7aWYoLTE9PT1yJiYodD49MD8ocj0wLHRoaXMuX3NldEVuZGluZ3MoITAsMD09PXRoaXMucmVwZXRpdGlvbnMsbykpOnRoaXMuX3NldEVuZGluZ3MoMD09PXRoaXMucmVwZXRpdGlvbnMsITAsbykpLGk+PWV8fGk8MCl7Y29uc3Qgbj1NYXRoLmZsb29yKGkvZSk7aS09ZSpuLHIrPU1hdGguYWJzKG4pO2NvbnN0IGE9dGhpcy5yZXBldGl0aW9ucy1yO2lmKGE8PTApdGhpcy5jbGFtcFdoZW5GaW5pc2hlZD90aGlzLnBhdXNlZD0hMDp0aGlzLmVuYWJsZWQ9ITEsaT10PjA/ZTowLHRoaXMudGltZT1pLHRoaXMuX21peGVyLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImZpbmlzaGVkIixhY3Rpb246dGhpcyxkaXJlY3Rpb246dD4wPzE6LTF9KTtlbHNle2lmKDE9PT1hKXtjb25zdCBlPXQ8MDt0aGlzLl9zZXRFbmRpbmdzKGUsIWUsbyl9ZWxzZSB0aGlzLl9zZXRFbmRpbmdzKCExLCExLG8pO3RoaXMuX2xvb3BDb3VudD1yLHRoaXMudGltZT1pLHRoaXMuX21peGVyLmRpc3BhdGNoRXZlbnQoe3R5cGU6Imxvb3AiLGFjdGlvbjp0aGlzLGxvb3BEZWx0YTpufSl9fWVsc2UgdGhpcy50aW1lPWk7aWYobyYmMT09KDEmcikpcmV0dXJuIGUtaX1yZXR1cm4gaX1fc2V0RW5kaW5ncyh0LGUsbil7Y29uc3QgaT10aGlzLl9pbnRlcnBvbGFudFNldHRpbmdzO24/KGkuZW5kaW5nU3RhcnQ9X090LGkuZW5kaW5nRW5kPV9PdCk6KGkuZW5kaW5nU3RhcnQ9dD90aGlzLnplcm9TbG9wZUF0U3RhcnQ/X090OmdPdDp5T3QsaS5lbmRpbmdFbmQ9ZT90aGlzLnplcm9TbG9wZUF0RW5kP19PdDpnT3Q6eU90KX1fc2NoZWR1bGVGYWRpbmcodCxlLG4pe2NvbnN0IGk9dGhpcy5fbWl4ZXIscj1pLnRpbWU7bGV0IG89dGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ7bnVsbD09PW8mJihvPWkuX2xlbmRDb250cm9sSW50ZXJwb2xhbnQoKSx0aGlzLl93ZWlnaHRJbnRlcnBvbGFudD1vKTtjb25zdCBhPW8ucGFyYW1ldGVyUG9zaXRpb25zLHM9by5zYW1wbGVWYWx1ZXM7cmV0dXJuIGFbMF09cixzWzBdPWUsYVsxXT1yK3Qsc1sxXT1uLHRoaXN9fWZ1bmN0aW9uIFpqdCh0KXt0aGlzLl9yb290PXQsdGhpcy5faW5pdE1lbW9yeU1hbmFnZXIoKSx0aGlzLl9hY2N1SW5kZXg9MCx0aGlzLnRpbWU9MCx0aGlzLnRpbWVTY2FsZT0xfVpqdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKE5PdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpaanQsX2JpbmRBY3Rpb246ZnVuY3Rpb24odCxlKXtjb25zdCBuPXQuX2xvY2FsUm9vdHx8dGhpcy5fcm9vdCxpPXQuX2NsaXAudHJhY2tzLHI9aS5sZW5ndGgsbz10Ll9wcm9wZXJ0eUJpbmRpbmdzLGE9dC5faW50ZXJwb2xhbnRzLHM9bi51dWlkLGw9dGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lO2xldCBjPWxbc107dm9pZCAwPT09YyYmKGM9e30sbFtzXT1jKTtmb3IobGV0IHQ9MDt0IT09cjsrK3Qpe2NvbnN0IHI9aVt0XSxsPXIubmFtZTtsZXQgdT1jW2xdO2lmKHZvaWQgMCE9PXUpb1t0XT11O2Vsc2V7aWYodT1vW3RdLHZvaWQgMCE9PXUpe251bGw9PT11Ll9jYWNoZUluZGV4JiYoKyt1LnJlZmVyZW5jZUNvdW50LHRoaXMuX2FkZEluYWN0aXZlQmluZGluZyh1LHMsbCkpO2NvbnRpbnVlfXU9bmV3IERqdChYanQuY3JlYXRlKG4sbCxlJiZlLl9wcm9wZXJ0eUJpbmRpbmdzW3RdLmJpbmRpbmcucGFyc2VkUGF0aCksci5WYWx1ZVR5cGVOYW1lLHIuZ2V0VmFsdWVTaXplKCkpLCsrdS5yZWZlcmVuY2VDb3VudCx0aGlzLl9hZGRJbmFjdGl2ZUJpbmRpbmcodSxzLGwpLG9bdF09dX1hW3RdLnJlc3VsdEJ1ZmZlcj11LmJ1ZmZlcn19LF9hY3RpdmF0ZUFjdGlvbjpmdW5jdGlvbih0KXtpZighdGhpcy5faXNBY3RpdmVBY3Rpb24odCkpe2lmKG51bGw9PT10Ll9jYWNoZUluZGV4KXtjb25zdCBlPSh0Ll9sb2NhbFJvb3R8fHRoaXMuX3Jvb3QpLnV1aWQsbj10Ll9jbGlwLnV1aWQsaT10aGlzLl9hY3Rpb25zQnlDbGlwW25dO3RoaXMuX2JpbmRBY3Rpb24odCxpJiZpLmtub3duQWN0aW9uc1swXSksdGhpcy5fYWRkSW5hY3RpdmVBY3Rpb24odCxuLGUpfWNvbnN0IGU9dC5fcHJvcGVydHlCaW5kaW5ncztmb3IobGV0IHQ9MCxuPWUubGVuZ3RoO3QhPT1uOysrdCl7Y29uc3Qgbj1lW3RdOzA9PW4udXNlQ291bnQrKyYmKHRoaXMuX2xlbmRCaW5kaW5nKG4pLG4uc2F2ZU9yaWdpbmFsU3RhdGUoKSl9dGhpcy5fbGVuZEFjdGlvbih0KX19LF9kZWFjdGl2YXRlQWN0aW9uOmZ1bmN0aW9uKHQpe2lmKHRoaXMuX2lzQWN0aXZlQWN0aW9uKHQpKXtjb25zdCBlPXQuX3Byb3BlcnR5QmluZGluZ3M7Zm9yKGxldCB0PTAsbj1lLmxlbmd0aDt0IT09bjsrK3Qpe2NvbnN0IG49ZVt0XTswPT0tLW4udXNlQ291bnQmJihuLnJlc3RvcmVPcmlnaW5hbFN0YXRlKCksdGhpcy5fdGFrZUJhY2tCaW5kaW5nKG4pKX10aGlzLl90YWtlQmFja0FjdGlvbih0KX19LF9pbml0TWVtb3J5TWFuYWdlcjpmdW5jdGlvbigpe3RoaXMuX2FjdGlvbnM9W10sdGhpcy5fbkFjdGl2ZUFjdGlvbnM9MCx0aGlzLl9hY3Rpb25zQnlDbGlwPXt9LHRoaXMuX2JpbmRpbmdzPVtdLHRoaXMuX25BY3RpdmVCaW5kaW5ncz0wLHRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZT17fSx0aGlzLl9jb250cm9sSW50ZXJwb2xhbnRzPVtdLHRoaXMuX25BY3RpdmVDb250cm9sSW50ZXJwb2xhbnRzPTA7Y29uc3QgdD10aGlzO3RoaXMuc3RhdHM9e2FjdGlvbnM6e2dldCB0b3RhbCgpe3JldHVybiB0Ll9hY3Rpb25zLmxlbmd0aH0sZ2V0IGluVXNlKCl7cmV0dXJuIHQuX25BY3RpdmVBY3Rpb25zfX0sYmluZGluZ3M6e2dldCB0b3RhbCgpe3JldHVybiB0Ll9iaW5kaW5ncy5sZW5ndGh9LGdldCBpblVzZSgpe3JldHVybiB0Ll9uQWN0aXZlQmluZGluZ3N9fSxjb250cm9sSW50ZXJwb2xhbnRzOntnZXQgdG90YWwoKXtyZXR1cm4gdC5fY29udHJvbEludGVycG9sYW50cy5sZW5ndGh9LGdldCBpblVzZSgpe3JldHVybiB0Ll9uQWN0aXZlQ29udHJvbEludGVycG9sYW50c319fX0sX2lzQWN0aXZlQWN0aW9uOmZ1bmN0aW9uKHQpe2NvbnN0IGU9dC5fY2FjaGVJbmRleDtyZXR1cm4gbnVsbCE9PWUmJmU8dGhpcy5fbkFjdGl2ZUFjdGlvbnN9LF9hZGRJbmFjdGl2ZUFjdGlvbjpmdW5jdGlvbih0LGUsbil7Y29uc3QgaT10aGlzLl9hY3Rpb25zLHI9dGhpcy5fYWN0aW9uc0J5Q2xpcDtsZXQgbz1yW2VdO2lmKHZvaWQgMD09PW8pbz17a25vd25BY3Rpb25zOlt0XSxhY3Rpb25CeVJvb3Q6e319LHQuX2J5Q2xpcENhY2hlSW5kZXg9MCxyW2VdPW87ZWxzZXtjb25zdCBlPW8ua25vd25BY3Rpb25zO3QuX2J5Q2xpcENhY2hlSW5kZXg9ZS5sZW5ndGgsZS5wdXNoKHQpfXQuX2NhY2hlSW5kZXg9aS5sZW5ndGgsaS5wdXNoKHQpLG8uYWN0aW9uQnlSb290W25dPXR9LF9yZW1vdmVJbmFjdGl2ZUFjdGlvbjpmdW5jdGlvbih0KXtjb25zdCBlPXRoaXMuX2FjdGlvbnMsbj1lW2UubGVuZ3RoLTFdLGk9dC5fY2FjaGVJbmRleDtuLl9jYWNoZUluZGV4PWksZVtpXT1uLGUucG9wKCksdC5fY2FjaGVJbmRleD1udWxsO2NvbnN0IHI9dC5fY2xpcC51dWlkLG89dGhpcy5fYWN0aW9uc0J5Q2xpcCxhPW9bcl0scz1hLmtub3duQWN0aW9ucyxsPXNbcy5sZW5ndGgtMV0sYz10Ll9ieUNsaXBDYWNoZUluZGV4O2wuX2J5Q2xpcENhY2hlSW5kZXg9YyxzW2NdPWwscy5wb3AoKSx0Ll9ieUNsaXBDYWNoZUluZGV4PW51bGwsZGVsZXRlIGEuYWN0aW9uQnlSb290Wyh0Ll9sb2NhbFJvb3R8fHRoaXMuX3Jvb3QpLnV1aWRdLDA9PT1zLmxlbmd0aCYmZGVsZXRlIG9bcl0sdGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nc0ZvckFjdGlvbih0KX0sX3JlbW92ZUluYWN0aXZlQmluZGluZ3NGb3JBY3Rpb246ZnVuY3Rpb24odCl7Y29uc3QgZT10Ll9wcm9wZXJ0eUJpbmRpbmdzO2ZvcihsZXQgdD0wLG49ZS5sZW5ndGg7dCE9PW47Kyt0KXtjb25zdCBuPWVbdF07MD09LS1uLnJlZmVyZW5jZUNvdW50JiZ0aGlzLl9yZW1vdmVJbmFjdGl2ZUJpbmRpbmcobil9fSxfbGVuZEFjdGlvbjpmdW5jdGlvbih0KXtjb25zdCBlPXRoaXMuX2FjdGlvbnMsbj10Ll9jYWNoZUluZGV4LGk9dGhpcy5fbkFjdGl2ZUFjdGlvbnMrKyxyPWVbaV07dC5fY2FjaGVJbmRleD1pLGVbaV09dCxyLl9jYWNoZUluZGV4PW4sZVtuXT1yfSxfdGFrZUJhY2tBY3Rpb246ZnVuY3Rpb24odCl7Y29uc3QgZT10aGlzLl9hY3Rpb25zLG49dC5fY2FjaGVJbmRleCxpPS0tdGhpcy5fbkFjdGl2ZUFjdGlvbnMscj1lW2ldO3QuX2NhY2hlSW5kZXg9aSxlW2ldPXQsci5fY2FjaGVJbmRleD1uLGVbbl09cn0sX2FkZEluYWN0aXZlQmluZGluZzpmdW5jdGlvbih0LGUsbil7Y29uc3QgaT10aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWUscj10aGlzLl9iaW5kaW5ncztsZXQgbz1pW2VdO3ZvaWQgMD09PW8mJihvPXt9LGlbZV09byksb1tuXT10LHQuX2NhY2hlSW5kZXg9ci5sZW5ndGgsci5wdXNoKHQpfSxfcmVtb3ZlSW5hY3RpdmVCaW5kaW5nOmZ1bmN0aW9uKHQpe2NvbnN0IGU9dGhpcy5fYmluZGluZ3Msbj10LmJpbmRpbmcsaT1uLnJvb3ROb2RlLnV1aWQscj1uLnBhdGgsbz10aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWUsYT1vW2ldLHM9ZVtlLmxlbmd0aC0xXSxsPXQuX2NhY2hlSW5kZXg7cy5fY2FjaGVJbmRleD1sLGVbbF09cyxlLnBvcCgpLGRlbGV0ZSBhW3JdLDA9PT1PYmplY3Qua2V5cyhhKS5sZW5ndGgmJmRlbGV0ZSBvW2ldfSxfbGVuZEJpbmRpbmc6ZnVuY3Rpb24odCl7Y29uc3QgZT10aGlzLl9iaW5kaW5ncyxuPXQuX2NhY2hlSW5kZXgsaT10aGlzLl9uQWN0aXZlQmluZGluZ3MrKyxyPWVbaV07dC5fY2FjaGVJbmRleD1pLGVbaV09dCxyLl9jYWNoZUluZGV4PW4sZVtuXT1yfSxfdGFrZUJhY2tCaW5kaW5nOmZ1bmN0aW9uKHQpe2NvbnN0IGU9dGhpcy5fYmluZGluZ3Msbj10Ll9jYWNoZUluZGV4LGk9LS10aGlzLl9uQWN0aXZlQmluZGluZ3Mscj1lW2ldO3QuX2NhY2hlSW5kZXg9aSxlW2ldPXQsci5fY2FjaGVJbmRleD1uLGVbbl09cn0sX2xlbmRDb250cm9sSW50ZXJwb2xhbnQ6ZnVuY3Rpb24oKXtjb25zdCB0PXRoaXMuX2NvbnRyb2xJbnRlcnBvbGFudHMsZT10aGlzLl9uQWN0aXZlQ29udHJvbEludGVycG9sYW50cysrO2xldCBuPXRbZV07cmV0dXJuIHZvaWQgMD09PW4mJihuPW5ldyBaVnQobmV3IEZsb2F0MzJBcnJheSgyKSxuZXcgRmxvYXQzMkFycmF5KDIpLDEsdGhpcy5fY29udHJvbEludGVycG9sYW50c1Jlc3VsdEJ1ZmZlciksbi5fX2NhY2hlSW5kZXg9ZSx0W2VdPW4pLG59LF90YWtlQmFja0NvbnRyb2xJbnRlcnBvbGFudDpmdW5jdGlvbih0KXtjb25zdCBlPXRoaXMuX2NvbnRyb2xJbnRlcnBvbGFudHMsbj10Ll9fY2FjaGVJbmRleCxpPS0tdGhpcy5fbkFjdGl2ZUNvbnRyb2xJbnRlcnBvbGFudHMscj1lW2ldO3QuX19jYWNoZUluZGV4PWksZVtpXT10LHIuX19jYWNoZUluZGV4PW4sZVtuXT1yfSxfY29udHJvbEludGVycG9sYW50c1Jlc3VsdEJ1ZmZlcjpuZXcgRmxvYXQzMkFycmF5KDEpLGNsaXBBY3Rpb246ZnVuY3Rpb24odCxlLG4pe2NvbnN0IGk9ZXx8dGhpcy5fcm9vdCxyPWkudXVpZDtsZXQgbz0ic3RyaW5nIj09dHlwZW9mIHQ/c1V0LmZpbmRCeU5hbWUoaSx0KTp0O2NvbnN0IGE9bnVsbCE9PW8/by51dWlkOnQscz10aGlzLl9hY3Rpb25zQnlDbGlwW2FdO2xldCBsPW51bGw7aWYodm9pZCAwPT09biYmKG49bnVsbCE9PW8/by5ibGVuZE1vZGU6dk90KSx2b2lkIDAhPT1zKXtjb25zdCB0PXMuYWN0aW9uQnlSb290W3JdO2lmKHZvaWQgMCE9PXQmJnQuYmxlbmRNb2RlPT09bilyZXR1cm4gdDtsPXMua25vd25BY3Rpb25zWzBdLG51bGw9PT1vJiYobz1sLl9jbGlwKX1pZihudWxsPT09bylyZXR1cm4gbnVsbDtjb25zdCBjPW5ldyBLanQodGhpcyxvLGUsbik7cmV0dXJuIHRoaXMuX2JpbmRBY3Rpb24oYyxsKSx0aGlzLl9hZGRJbmFjdGl2ZUFjdGlvbihjLGEsciksY30sZXhpc3RpbmdBY3Rpb246ZnVuY3Rpb24odCxlKXtjb25zdCBuPWV8fHRoaXMuX3Jvb3QsaT1uLnV1aWQscj0ic3RyaW5nIj09dHlwZW9mIHQ/c1V0LmZpbmRCeU5hbWUobix0KTp0LG89dGhpcy5fYWN0aW9uc0J5Q2xpcFtyP3IudXVpZDp0XTtyZXR1cm4gdm9pZCAwIT09byYmby5hY3Rpb25CeVJvb3RbaV18fG51bGx9LHN0b3BBbGxBY3Rpb246ZnVuY3Rpb24oKXtjb25zdCB0PXRoaXMuX2FjdGlvbnM7Zm9yKGxldCBlPXRoaXMuX25BY3RpdmVBY3Rpb25zLTE7ZT49MDstLWUpdFtlXS5zdG9wKCk7cmV0dXJuIHRoaXN9LHVwZGF0ZTpmdW5jdGlvbih0KXtjb25zdCBlPXRoaXMuX2FjdGlvbnMsbj10aGlzLl9uQWN0aXZlQWN0aW9ucyxpPXRoaXMudGltZSs9dCo9dGhpcy50aW1lU2NhbGUscj1NYXRoLnNpZ24odCksbz10aGlzLl9hY2N1SW5kZXhePTE7Zm9yKGxldCBhPTA7YSE9PW47KythKWVbYV0uX3VwZGF0ZShpLHQscixvKTtjb25zdCBhPXRoaXMuX2JpbmRpbmdzLHM9dGhpcy5fbkFjdGl2ZUJpbmRpbmdzO2ZvcihsZXQgdD0wO3QhPT1zOysrdClhW3RdLmFwcGx5KG8pO3JldHVybiB0aGlzfSxzZXRUaW1lOmZ1bmN0aW9uKHQpe3RoaXMudGltZT0wO2ZvcihsZXQgdD0wO3Q8dGhpcy5fYWN0aW9ucy5sZW5ndGg7dCsrKXRoaXMuX2FjdGlvbnNbdF0udGltZT0wO3JldHVybiB0aGlzLnVwZGF0ZSh0KX0sZ2V0Um9vdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb290fSx1bmNhY2hlQ2xpcDpmdW5jdGlvbih0KXtjb25zdCBlPXRoaXMuX2FjdGlvbnMsbj10LnV1aWQsaT10aGlzLl9hY3Rpb25zQnlDbGlwLHI9aVtuXTtpZih2b2lkIDAhPT1yKXtjb25zdCB0PXIua25vd25BY3Rpb25zO2ZvcihsZXQgbj0wLGk9dC5sZW5ndGg7biE9PWk7KytuKXtjb25zdCBpPXRbbl07dGhpcy5fZGVhY3RpdmF0ZUFjdGlvbihpKTtjb25zdCByPWkuX2NhY2hlSW5kZXgsbz1lW2UubGVuZ3RoLTFdO2kuX2NhY2hlSW5kZXg9bnVsbCxpLl9ieUNsaXBDYWNoZUluZGV4PW51bGwsby5fY2FjaGVJbmRleD1yLGVbcl09byxlLnBvcCgpLHRoaXMuX3JlbW92ZUluYWN0aXZlQmluZGluZ3NGb3JBY3Rpb24oaSl9ZGVsZXRlIGlbbl19fSx1bmNhY2hlUm9vdDpmdW5jdGlvbih0KXtjb25zdCBlPXQudXVpZCxuPXRoaXMuX2FjdGlvbnNCeUNsaXA7Zm9yKGNvbnN0IHQgaW4gbil7Y29uc3QgaT1uW3RdLmFjdGlvbkJ5Um9vdFtlXTt2b2lkIDAhPT1pJiYodGhpcy5fZGVhY3RpdmF0ZUFjdGlvbihpKSx0aGlzLl9yZW1vdmVJbmFjdGl2ZUFjdGlvbihpKSl9Y29uc3QgaT10aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWVbZV07aWYodm9pZCAwIT09aSlmb3IoY29uc3QgdCBpbiBpKXtjb25zdCBlPWlbdF07ZS5yZXN0b3JlT3JpZ2luYWxTdGF0ZSgpLHRoaXMuX3JlbW92ZUluYWN0aXZlQmluZGluZyhlKX19LHVuY2FjaGVBY3Rpb246ZnVuY3Rpb24odCxlKXtjb25zdCBuPXRoaXMuZXhpc3RpbmdBY3Rpb24odCxlKTtudWxsIT09biYmKHRoaXMuX2RlYWN0aXZhdGVBY3Rpb24obiksdGhpcy5fcmVtb3ZlSW5hY3RpdmVBY3Rpb24obikpfX0pO2NsYXNzIEpqdHtjb25zdHJ1Y3Rvcih0KXsic3RyaW5nIj09dHlwZW9mIHQmJihjb25zb2xlLndhcm4oIlRIUkVFLlVuaWZvcm06IFR5cGUgcGFyYW1ldGVyIGlzIG5vIGxvbmdlciBuZWVkZWQuIiksdD1hcmd1bWVudHNbMV0pLHRoaXMudmFsdWU9dH1jbG9uZSgpe3JldHVybiBuZXcgSmp0KHZvaWQgMD09PXRoaXMudmFsdWUuY2xvbmU/dGhpcy52YWx1ZTp0aGlzLnZhbHVlLmNsb25lKCkpfX1mdW5jdGlvbiBRanQodCxlLG4pe0lIdC5jYWxsKHRoaXMsdCxlKSx0aGlzLm1lc2hQZXJBdHRyaWJ1dGU9bnx8MX1mdW5jdGlvbiB0R3QodCxlLG4saSxyKXt0aGlzLmJ1ZmZlcj10LHRoaXMudHlwZT1lLHRoaXMuaXRlbVNpemU9bix0aGlzLmVsZW1lbnRTaXplPWksdGhpcy5jb3VudD1yLHRoaXMudmVyc2lvbj0wfWZ1bmN0aW9uIGVHdCh0LGUsbixpKXt0aGlzLnJheT1uZXcgdlJ0KHQsZSksdGhpcy5uZWFyPW58fDAsdGhpcy5mYXI9aXx8MS8wLHRoaXMuY2FtZXJhPW51bGwsdGhpcy5sYXllcnM9bmV3IFBSdCx0aGlzLnBhcmFtcz17TWVzaDp7fSxMaW5lOnt0aHJlc2hvbGQ6MX0sTE9EOnt9LFBvaW50czp7dGhyZXNob2xkOjF9LFNwcml0ZTp7fX0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcy5wYXJhbXMse1BvaW50Q2xvdWQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlJheWNhc3RlcjogcGFyYW1zLlBvaW50Q2xvdWQgaGFzIGJlZW4gcmVuYW1lZCB0byBwYXJhbXMuUG9pbnRzLiIpLHRoaXMuUG9pbnRzfX19KX1mdW5jdGlvbiBuR3QodCxlKXtyZXR1cm4gdC5kaXN0YW5jZS1lLmRpc3RhbmNlfWZ1bmN0aW9uIGlHdCh0LGUsbixpKXtpZih0LmxheWVycy50ZXN0KGUubGF5ZXJzKSYmdC5yYXljYXN0KGUsbiksITA9PT1pKXtjb25zdCBpPXQuY2hpbGRyZW47Zm9yKGxldCB0PTAscj1pLmxlbmd0aDt0PHI7dCsrKWlHdChpW3RdLGUsbiwhMCl9fVFqdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKElIdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpRanQsaXNJbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlcjohMCxjb3B5OmZ1bmN0aW9uKHQpe3JldHVybiBJSHQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMubWVzaFBlckF0dHJpYnV0ZT10Lm1lc2hQZXJBdHRyaWJ1dGUsdGhpc30sY2xvbmU6ZnVuY3Rpb24odCl7Y29uc3QgZT1JSHQucHJvdG90eXBlLmNsb25lLmNhbGwodGhpcyx0KTtyZXR1cm4gZS5tZXNoUGVyQXR0cmlidXRlPXRoaXMubWVzaFBlckF0dHJpYnV0ZSxlfSx0b0pTT046ZnVuY3Rpb24odCl7Y29uc3QgZT1JSHQucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMsdCk7cmV0dXJuIGUuaXNJbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlcj0hMCxlLm1lc2hQZXJBdHRyaWJ1dGU9dGhpcy5tZXNoUGVyQXR0cmlidXRlLGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRHdC5wcm90b3R5cGUsIm5lZWRzVXBkYXRlIix7c2V0OmZ1bmN0aW9uKHQpeyEwPT09dCYmdGhpcy52ZXJzaW9uKyt9fSksT2JqZWN0LmFzc2lnbih0R3QucHJvdG90eXBlLHtpc0dMQnVmZmVyQXR0cmlidXRlOiEwLHNldEJ1ZmZlcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5idWZmZXI9dCx0aGlzfSxzZXRUeXBlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMudHlwZT10LHRoaXMuZWxlbWVudFNpemU9ZSx0aGlzfSxzZXRJdGVtU2l6ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pdGVtU2l6ZT10LHRoaXN9LHNldENvdW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNvdW50PXQsdGhpc319KSxPYmplY3QuYXNzaWduKGVHdC5wcm90b3R5cGUse3NldDpmdW5jdGlvbih0LGUpe3RoaXMucmF5LnNldCh0LGUpfSxzZXRGcm9tQ2FtZXJhOmZ1bmN0aW9uKHQsZSl7ZSYmZS5pc1BlcnNwZWN0aXZlQ2FtZXJhPyh0aGlzLnJheS5vcmlnaW4uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGUubWF0cml4V29ybGQpLHRoaXMucmF5LmRpcmVjdGlvbi5zZXQodC54LHQueSwuNSkudW5wcm9qZWN0KGUpLnN1Yih0aGlzLnJheS5vcmlnaW4pLm5vcm1hbGl6ZSgpLHRoaXMuY2FtZXJhPWUpOmUmJmUuaXNPcnRob2dyYXBoaWNDYW1lcmE/KHRoaXMucmF5Lm9yaWdpbi5zZXQodC54LHQueSwoZS5uZWFyK2UuZmFyKS8oZS5uZWFyLWUuZmFyKSkudW5wcm9qZWN0KGUpLHRoaXMucmF5LmRpcmVjdGlvbi5zZXQoMCwwLC0xKS50cmFuc2Zvcm1EaXJlY3Rpb24oZS5tYXRyaXhXb3JsZCksdGhpcy5jYW1lcmE9ZSk6Y29uc29sZS5lcnJvcigiVEhSRUUuUmF5Y2FzdGVyOiBVbnN1cHBvcnRlZCBjYW1lcmEgdHlwZTogIitlLnR5cGUpfSxpbnRlcnNlY3RPYmplY3Q6ZnVuY3Rpb24odCxlLG4pe2NvbnN0IGk9bnx8W107cmV0dXJuIGlHdCh0LHRoaXMsaSxlKSxpLnNvcnQobkd0KSxpfSxpbnRlcnNlY3RPYmplY3RzOmZ1bmN0aW9uKHQsZSxuKXtjb25zdCBpPW58fFtdO2lmKCExPT09QXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5SYXljYXN0ZXIuaW50ZXJzZWN0T2JqZWN0czogb2JqZWN0cyBpcyBub3QgYW4gQXJyYXkuIiksaTtmb3IobGV0IG49MCxyPXQubGVuZ3RoO248cjtuKyspaUd0KHRbbl0sdGhpcyxpLGUpO3JldHVybiBpLnNvcnQobkd0KSxpfX0pO2NsYXNzIHJHdHtjb25zdHJ1Y3Rvcih0PTEsZT0wLG49MCl7cmV0dXJuIHRoaXMucmFkaXVzPXQsdGhpcy5waGk9ZSx0aGlzLnRoZXRhPW4sdGhpc31zZXQodCxlLG4pe3JldHVybiB0aGlzLnJhZGl1cz10LHRoaXMucGhpPWUsdGhpcy50aGV0YT1uLHRoaXN9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9Y29weSh0KXtyZXR1cm4gdGhpcy5yYWRpdXM9dC5yYWRpdXMsdGhpcy5waGk9dC5waGksdGhpcy50aGV0YT10LnRoZXRhLHRoaXN9bWFrZVNhZmUoKXtjb25zdCB0PTFlLTY7cmV0dXJuIHRoaXMucGhpPU1hdGgubWF4KHQsTWF0aC5taW4oTWF0aC5QSS10LHRoaXMucGhpKSksdGhpc31zZXRGcm9tVmVjdG9yMyh0KXtyZXR1cm4gdGhpcy5zZXRGcm9tQ2FydGVzaWFuQ29vcmRzKHQueCx0LnksdC56KX1zZXRGcm9tQ2FydGVzaWFuQ29vcmRzKHQsZSxuKXtyZXR1cm4gdGhpcy5yYWRpdXM9TWF0aC5zcXJ0KHQqdCtlKmUrbipuKSwwPT09dGhpcy5yYWRpdXM/KHRoaXMudGhldGE9MCx0aGlzLnBoaT0wKToodGhpcy50aGV0YT1NYXRoLmF0YW4yKHQsbiksdGhpcy5waGk9TWF0aC5hY29zKFJPdC5jbGFtcChlL3RoaXMucmFkaXVzLC0xLDEpKSksdGhpc319Y29uc3Qgb0d0PW5ldyB6T3Q7Y2xhc3MgYUd0e2NvbnN0cnVjdG9yKHQsZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlzQm94MiIse3ZhbHVlOiEwfSksdGhpcy5taW49dm9pZCAwIT09dD90Om5ldyB6T3QoMS8wLDEvMCksdGhpcy5tYXg9dm9pZCAwIT09ZT9lOm5ldyB6T3QoLTEvMCwtMS8wKX1zZXQodCxlKXtyZXR1cm4gdGhpcy5taW4uY29weSh0KSx0aGlzLm1heC5jb3B5KGUpLHRoaXN9c2V0RnJvbVBvaW50cyh0KXt0aGlzLm1ha2VFbXB0eSgpO2ZvcihsZXQgZT0wLG49dC5sZW5ndGg7ZTxuO2UrKyl0aGlzLmV4cGFuZEJ5UG9pbnQodFtlXSk7cmV0dXJuIHRoaXN9c2V0RnJvbUNlbnRlckFuZFNpemUodCxlKXtjb25zdCBuPW9HdC5jb3B5KGUpLm11bHRpcGx5U2NhbGFyKC41KTtyZXR1cm4gdGhpcy5taW4uY29weSh0KS5zdWIobiksdGhpcy5tYXguY29weSh0KS5hZGQobiksdGhpc31jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLm1pbi5jb3B5KHQubWluKSx0aGlzLm1heC5jb3B5KHQubWF4KSx0aGlzfW1ha2VFbXB0eSgpe3JldHVybiB0aGlzLm1pbi54PXRoaXMubWluLnk9MS8wLHRoaXMubWF4Lng9dGhpcy5tYXgueT0tMS8wLHRoaXN9aXNFbXB0eSgpe3JldHVybiB0aGlzLm1heC54PHRoaXMubWluLnh8fHRoaXMubWF4Lnk8dGhpcy5taW4ueX1nZXRDZW50ZXIodCl7cmV0dXJuIHZvaWQgMD09PXQmJihjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5nZXRDZW50ZXIoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIiksdD1uZXcgek90KSx0aGlzLmlzRW1wdHkoKT90LnNldCgwLDApOnQuYWRkVmVjdG9ycyh0aGlzLm1pbix0aGlzLm1heCkubXVsdGlwbHlTY2FsYXIoLjUpfWdldFNpemUodCl7cmV0dXJuIHZvaWQgMD09PXQmJihjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5nZXRTaXplKCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLHQ9bmV3IHpPdCksdGhpcy5pc0VtcHR5KCk/dC5zZXQoMCwwKTp0LnN1YlZlY3RvcnModGhpcy5tYXgsdGhpcy5taW4pfWV4cGFuZEJ5UG9pbnQodCl7cmV0dXJuIHRoaXMubWluLm1pbih0KSx0aGlzLm1heC5tYXgodCksdGhpc31leHBhbmRCeVZlY3Rvcih0KXtyZXR1cm4gdGhpcy5taW4uc3ViKHQpLHRoaXMubWF4LmFkZCh0KSx0aGlzfWV4cGFuZEJ5U2NhbGFyKHQpe3JldHVybiB0aGlzLm1pbi5hZGRTY2FsYXIoLXQpLHRoaXMubWF4LmFkZFNjYWxhcih0KSx0aGlzfWNvbnRhaW5zUG9pbnQodCl7cmV0dXJuISh0Lng8dGhpcy5taW4ueHx8dC54PnRoaXMubWF4Lnh8fHQueTx0aGlzLm1pbi55fHx0Lnk+dGhpcy5tYXgueSl9Y29udGFpbnNCb3godCl7cmV0dXJuIHRoaXMubWluLng8PXQubWluLngmJnQubWF4Lng8PXRoaXMubWF4LngmJnRoaXMubWluLnk8PXQubWluLnkmJnQubWF4Lnk8PXRoaXMubWF4Lnl9Z2V0UGFyYW1ldGVyKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5nZXRQYXJhbWV0ZXIoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIiksZT1uZXcgek90KSxlLnNldCgodC54LXRoaXMubWluLngpLyh0aGlzLm1heC54LXRoaXMubWluLngpLCh0LnktdGhpcy5taW4ueSkvKHRoaXMubWF4LnktdGhpcy5taW4ueSkpfWludGVyc2VjdHNCb3godCl7cmV0dXJuISh0Lm1heC54PHRoaXMubWluLnh8fHQubWluLng+dGhpcy5tYXgueHx8dC5tYXgueTx0aGlzLm1pbi55fHx0Lm1pbi55PnRoaXMubWF4LnkpfWNsYW1wUG9pbnQodCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGNvbnNvbGUud2FybigiVEhSRUUuQm94MjogLmNsYW1wUG9pbnQoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIiksZT1uZXcgek90KSxlLmNvcHkodCkuY2xhbXAodGhpcy5taW4sdGhpcy5tYXgpfWRpc3RhbmNlVG9Qb2ludCh0KXtyZXR1cm4gb0d0LmNvcHkodCkuY2xhbXAodGhpcy5taW4sdGhpcy5tYXgpLnN1Yih0KS5sZW5ndGgoKX1pbnRlcnNlY3QodCl7cmV0dXJuIHRoaXMubWluLm1heCh0Lm1pbiksdGhpcy5tYXgubWluKHQubWF4KSx0aGlzfXVuaW9uKHQpe3JldHVybiB0aGlzLm1pbi5taW4odC5taW4pLHRoaXMubWF4Lm1heCh0Lm1heCksdGhpc310cmFuc2xhdGUodCl7cmV0dXJuIHRoaXMubWluLmFkZCh0KSx0aGlzLm1heC5hZGQodCksdGhpc31lcXVhbHModCl7cmV0dXJuIHQubWluLmVxdWFscyh0aGlzLm1pbikmJnQubWF4LmVxdWFscyh0aGlzLm1heCl9fWNvbnN0IHNHdD1uZXcgcU90LGxHdD1uZXcgcU90O2NsYXNzIGNHdHtjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuc3RhcnQ9dm9pZCAwIT09dD90Om5ldyBxT3QsdGhpcy5lbmQ9dm9pZCAwIT09ZT9lOm5ldyBxT3R9c2V0KHQsZSl7cmV0dXJuIHRoaXMuc3RhcnQuY29weSh0KSx0aGlzLmVuZC5jb3B5KGUpLHRoaXN9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9Y29weSh0KXtyZXR1cm4gdGhpcy5zdGFydC5jb3B5KHQuc3RhcnQpLHRoaXMuZW5kLmNvcHkodC5lbmQpLHRoaXN9Z2V0Q2VudGVyKHQpe3JldHVybiB2b2lkIDA9PT10JiYoY29uc29sZS53YXJuKCJUSFJFRS5MaW5lMzogLmdldENlbnRlcigpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSx0PW5ldyBxT3QpLHQuYWRkVmVjdG9ycyh0aGlzLnN0YXJ0LHRoaXMuZW5kKS5tdWx0aXBseVNjYWxhciguNSl9ZGVsdGEodCl7cmV0dXJuIHZvaWQgMD09PXQmJihjb25zb2xlLndhcm4oIlRIUkVFLkxpbmUzOiAuZGVsdGEoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIiksdD1uZXcgcU90KSx0LnN1YlZlY3RvcnModGhpcy5lbmQsdGhpcy5zdGFydCl9ZGlzdGFuY2VTcSgpe3JldHVybiB0aGlzLnN0YXJ0LmRpc3RhbmNlVG9TcXVhcmVkKHRoaXMuZW5kKX1kaXN0YW5jZSgpe3JldHVybiB0aGlzLnN0YXJ0LmRpc3RhbmNlVG8odGhpcy5lbmQpfWF0KHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihjb25zb2xlLndhcm4oIlRIUkVFLkxpbmUzOiAuYXQoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIiksZT1uZXcgcU90KSx0aGlzLmRlbHRhKGUpLm11bHRpcGx5U2NhbGFyKHQpLmFkZCh0aGlzLnN0YXJ0KX1jbG9zZXN0UG9pbnRUb1BvaW50UGFyYW1ldGVyKHQsZSl7c0d0LnN1YlZlY3RvcnModCx0aGlzLnN0YXJ0KSxsR3Quc3ViVmVjdG9ycyh0aGlzLmVuZCx0aGlzLnN0YXJ0KTtjb25zdCBuPWxHdC5kb3QobEd0KTtsZXQgaT1sR3QuZG90KHNHdCkvbjtyZXR1cm4gZSYmKGk9Uk90LmNsYW1wKGksMCwxKSksaX1jbG9zZXN0UG9pbnRUb1BvaW50KHQsZSxuKXtjb25zdCBpPXRoaXMuY2xvc2VzdFBvaW50VG9Qb2ludFBhcmFtZXRlcih0LGUpO3JldHVybiB2b2lkIDA9PT1uJiYoY29uc29sZS53YXJuKCJUSFJFRS5MaW5lMzogLmNsb3Nlc3RQb2ludFRvUG9pbnQoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIiksbj1uZXcgcU90KSx0aGlzLmRlbHRhKG4pLm11bHRpcGx5U2NhbGFyKGkpLmFkZCh0aGlzLnN0YXJ0KX1hcHBseU1hdHJpeDQodCl7cmV0dXJuIHRoaXMuc3RhcnQuYXBwbHlNYXRyaXg0KHQpLHRoaXMuZW5kLmFwcGx5TWF0cml4NCh0KSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5zdGFydC5lcXVhbHModGhpcy5zdGFydCkmJnQuZW5kLmVxdWFscyh0aGlzLmVuZCl9fWZ1bmN0aW9uIHVHdCh0KXtXUnQuY2FsbCh0aGlzKSx0aGlzLm1hdGVyaWFsPXQsdGhpcy5yZW5kZXI9ZnVuY3Rpb24oKXt9LHRoaXMuaGFzUG9zaXRpb25zPSExLHRoaXMuaGFzTm9ybWFscz0hMSx0aGlzLmhhc0NvbG9ycz0hMSx0aGlzLmhhc1V2cz0hMSx0aGlzLnBvc2l0aW9uQXJyYXk9bnVsbCx0aGlzLm5vcm1hbEFycmF5PW51bGwsdGhpcy5jb2xvckFycmF5PW51bGwsdGhpcy51dkFycmF5PW51bGwsdGhpcy5jb3VudD0wfSh1R3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoV1J0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPXVHdCx1R3QucHJvdG90eXBlLmlzSW1tZWRpYXRlUmVuZGVyT2JqZWN0PSEwO2NvbnN0IGhHdD1uZXcgcU90LGRHdD1uZXcgcU90LHBHdD1uZXcgYlJ0LGZHdD1uZXcgYlJ0O2NsYXNzIG1HdCBleHRlbmRzIEVGdHtjb25zdHJ1Y3Rvcih0KXtjb25zdCBlPWdHdCh0KSxuPW5ldyBWenQsaT1bXSxyPVtdLG89bmV3IHB6dCgwLDAsMSksYT1uZXcgcHp0KDAsMSwwKTtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyl7Y29uc3Qgbj1lW3RdO24ucGFyZW50JiZuLnBhcmVudC5pc0JvbmUmJihpLnB1c2goMCwwLDApLGkucHVzaCgwLDAsMCksci5wdXNoKG8ucixvLmcsby5iKSxyLnB1c2goYS5yLGEuZyxhLmIpKX1uLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBrenQoaSwzKSksbi5zZXRBdHRyaWJ1dGUoImNvbG9yIixuZXcga3p0KHIsMykpLHN1cGVyKG4sbmV3IGdGdCh7dmVydGV4Q29sb3JzOiEwLGRlcHRoVGVzdDohMSxkZXB0aFdyaXRlOiExLHRvbmVNYXBwZWQ6ITEsdHJhbnNwYXJlbnQ6ITB9KSksdGhpcy50eXBlPSJTa2VsZXRvbkhlbHBlciIsdGhpcy5pc1NrZWxldG9uSGVscGVyPSEwLHRoaXMucm9vdD10LHRoaXMuYm9uZXM9ZSx0aGlzLm1hdHJpeD10Lm1hdHJpeFdvcmxkLHRoaXMubWF0cml4QXV0b1VwZGF0ZT0hMX11cGRhdGVNYXRyaXhXb3JsZCh0KXtjb25zdCBlPXRoaXMuYm9uZXMsbj10aGlzLmdlb21ldHJ5LGk9bi5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIik7Zkd0LmNvcHkodGhpcy5yb290Lm1hdHJpeFdvcmxkKS5pbnZlcnQoKTtmb3IobGV0IHQ9MCxuPTA7dDxlLmxlbmd0aDt0Kyspe2NvbnN0IHI9ZVt0XTtyLnBhcmVudCYmci5wYXJlbnQuaXNCb25lJiYocEd0Lm11bHRpcGx5TWF0cmljZXMoZkd0LHIubWF0cml4V29ybGQpLGRHdC5zZXRGcm9tTWF0cml4UG9zaXRpb24ocEd0KSxpLnNldFhZWihuLGRHdC54LGRHdC55LGRHdC56KSxwR3QubXVsdGlwbHlNYXRyaWNlcyhmR3Qsci5wYXJlbnQubWF0cml4V29ybGQpLGRHdC5zZXRGcm9tTWF0cml4UG9zaXRpb24ocEd0KSxpLnNldFhZWihuKzEsZEd0LngsZEd0LnksZEd0LnopLG4rPTIpfW4uZ2V0QXR0cmlidXRlKCJwb3NpdGlvbiIpLm5lZWRzVXBkYXRlPSEwLHN1cGVyLnVwZGF0ZU1hdHJpeFdvcmxkKHQpfX1mdW5jdGlvbiBnR3QodCl7Y29uc3QgZT1bXTt0JiZ0LmlzQm9uZSYmZS5wdXNoKHQpO2ZvcihsZXQgbj0wO248dC5jaGlsZHJlbi5sZW5ndGg7bisrKWUucHVzaC5hcHBseShlLGdHdCh0LmNoaWxkcmVuW25dKSk7cmV0dXJuIGV9Y29uc3QgX0d0PW5ldyBxT3QseUd0PW5ldyBwenQsdkd0PW5ldyBwenQ7Y2xhc3MgYkd0IGV4dGVuZHMgRUZ0e2NvbnN0cnVjdG9yKHQ9MTAsZT0xMCxuPTQ0NzM5MjQsaT04OTQ3ODQ4KXtuPW5ldyBwenQobiksaT1uZXcgcHp0KGkpO2NvbnN0IHI9ZS8yLG89dC9lLGE9dC8yLHM9W10sbD1bXTtmb3IobGV0IHQ9MCxjPTAsdT0tYTt0PD1lO3QrKyx1Kz1vKXtzLnB1c2goLWEsMCx1LGEsMCx1KSxzLnB1c2godSwwLC1hLHUsMCxhKTtjb25zdCBlPXQ9PT1yP246aTtlLnRvQXJyYXkobCxjKSxjKz0zLGUudG9BcnJheShsLGMpLGMrPTMsZS50b0FycmF5KGwsYyksYys9MyxlLnRvQXJyYXkobCxjKSxjKz0zfWNvbnN0IGM9bmV3IFZ6dDtjLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBrenQocywzKSksYy5zZXRBdHRyaWJ1dGUoImNvbG9yIixuZXcga3p0KGwsMykpLHN1cGVyKGMsbmV3IGdGdCh7dmVydGV4Q29sb3JzOiEwLHRvbmVNYXBwZWQ6ITF9KSksdGhpcy50eXBlPSJHcmlkSGVscGVyIn19Y29uc3QgeEd0PW5ldyBxT3Qsd0d0PW5ldyBxT3QsU0d0PW5ldyBxT3QsTUd0PW5ldyBxT3QsRUd0PW5ldyBkRHQ7ZnVuY3Rpb24gVEd0KHQsZSxuLGkscixvLGEpe01HdC5zZXQocixvLGEpLnVucHJvamVjdChpKTtjb25zdCBzPWVbdF07aWYodm9pZCAwIT09cyl7Y29uc3QgdD1uLmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKTtmb3IobGV0IGU9MCxuPXMubGVuZ3RoO2U8bjtlKyspdC5zZXRYWVooc1tlXSxNR3QueCxNR3QueSxNR3Queil9fWNvbnN0IENHdD1uZXcgJE90O2NsYXNzIEFHdCBleHRlbmRzIEVGdHtjb25zdHJ1Y3Rvcih0LGU9MTY3NzY5NjApe2NvbnN0IG49bmV3IFVpbnQxNkFycmF5KFswLDEsMSwyLDIsMywzLDAsNCw1LDUsNiw2LDcsNyw0LDAsNCwxLDUsMiw2LDMsN10pLGk9bmV3IEZsb2F0MzJBcnJheSgyNCkscj1uZXcgVnp0O3Iuc2V0SW5kZXgobmV3IGJ6dChuLDEpKSxyLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBienQoaSwzKSksc3VwZXIocixuZXcgZ0Z0KHtjb2xvcjplLHRvbmVNYXBwZWQ6ITF9KSksdGhpcy5vYmplY3Q9dCx0aGlzLnR5cGU9IkJveEhlbHBlciIsdGhpcy5tYXRyaXhBdXRvVXBkYXRlPSExLHRoaXMudXBkYXRlKCl9dXBkYXRlKHQpe2lmKHZvaWQgMCE9PXQmJmNvbnNvbGUud2FybigiVEhSRUUuQm94SGVscGVyOiAudXBkYXRlKCkgaGFzIG5vIGxvbmdlciBhcmd1bWVudHMuIiksdm9pZCAwIT09dGhpcy5vYmplY3QmJkNHdC5zZXRGcm9tT2JqZWN0KHRoaXMub2JqZWN0KSxDR3QuaXNFbXB0eSgpKXJldHVybjtjb25zdCBlPUNHdC5taW4sbj1DR3QubWF4LGk9dGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLHI9aS5hcnJheTtyWzBdPW4ueCxyWzFdPW4ueSxyWzJdPW4ueixyWzNdPWUueCxyWzRdPW4ueSxyWzVdPW4ueixyWzZdPWUueCxyWzddPWUueSxyWzhdPW4ueixyWzldPW4ueCxyWzEwXT1lLnksclsxMV09bi56LHJbMTJdPW4ueCxyWzEzXT1uLnksclsxNF09ZS56LHJbMTVdPWUueCxyWzE2XT1uLnksclsxN109ZS56LHJbMThdPWUueCxyWzE5XT1lLnksclsyMF09ZS56LHJbMjFdPW4ueCxyWzIyXT1lLnksclsyM109ZS56LGkubmVlZHNVcGRhdGU9ITAsdGhpcy5nZW9tZXRyeS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKX1zZXRGcm9tT2JqZWN0KHQpe3JldHVybiB0aGlzLm9iamVjdD10LHRoaXMudXBkYXRlKCksdGhpc31jb3B5KHQpe3JldHVybiBFRnQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMub2JqZWN0PXQub2JqZWN0LHRoaXN9fWNvbnN0IGtHdD1uZXcgcU90O2xldCBMR3QsUEd0O2NsYXNzIE5HdCBleHRlbmRzIEVGdHtjb25zdHJ1Y3Rvcih0PTEpe2NvbnN0IGU9WzAsMCwwLHQsMCwwLDAsMCwwLDAsdCwwLDAsMCwwLDAsMCx0XSxuPW5ldyBWenQ7bi5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcga3p0KGUsMykpLG4uc2V0QXR0cmlidXRlKCJjb2xvciIsbmV3IGt6dChbMSwwLDAsMSwuNiwwLDAsMSwwLC42LDEsMCwwLDAsMSwwLC42LDFdLDMpKSxzdXBlcihuLG5ldyBnRnQoe3ZlcnRleENvbG9yczohMCx0b25lTWFwcGVkOiExfSkpLHRoaXMudHlwZT0iQXhlc0hlbHBlciJ9fWNvbnN0IElHdD1uZXcgRmxvYXQzMkFycmF5KDEpLE9HdD1uZXcgSW50MzJBcnJheShJR3QuYnVmZmVyKSxSR3Q9e3RvSGFsZkZsb2F0OmZ1bmN0aW9uKHQpe0lHdFswXT10O2NvbnN0IGU9T0d0WzBdO2xldCBuPWU+PjE2JjMyNzY4LGk9ZT4+MTImMjA0Nztjb25zdCByPWU+PjIzJjI1NTtyZXR1cm4gcjwxMDM/bjpyPjE0Mj8obnw9MzE3NDQsbnw9KDI1NT09cj8wOjEpJiY4Mzg4NjA3JmUsbik6cjwxMTM/KGl8PTIwNDgsbnw9KGk+PjExNC1yKSsoaT4+MTEzLXImMSksbik6KG58PXItMTEyPDwxMHxpPj4xLG4rPTEmaSxuKX19LHpHdD1NYXRoLnBvdygyLDgpLERHdD1bLjEyNSwuMjE1LC4zNSwuNDQ2LC41MjYsLjU4Ml0sQkd0PTUrREd0Lmxlbmd0aCxIR3Q9e1t4T3RdOjAsW3dPdF06MSxbTU90XToyLFtFT3RdOjMsW1RPdF06NCxbQ090XTo1LFtTT3RdOjZ9LEZHdD1uZXcgX3p0KHtzaWRlOjEsZGVwdGhXcml0ZTohMSxkZXB0aFRlc3Q6ITF9KSxWR3Q9bmV3IG9EdChuZXcgc0R0LEZHdCksVUd0PW5ldyBaVXQse19sb2RQbGFuZXM6akd0LF9zaXplTG9kczpHR3QsX3NpZ21hczpXR3R9PVFHdCgpLHFHdD1uZXcgcHp0O2xldCBZR3Q9bnVsbDtjb25zdCBYR3Q9KDErTWF0aC5zcXJ0KDUpKS8yLCRHdD0xL1hHdCxLR3Q9W25ldyBxT3QoMSwxLDEpLG5ldyBxT3QoLTEsMSwxKSxuZXcgcU90KDEsMSwtMSksbmV3IHFPdCgtMSwxLC0xKSxuZXcgcU90KDAsWEd0LCRHdCksbmV3IHFPdCgwLFhHdCwtJEd0KSxuZXcgcU90KCRHdCwwLFhHdCksbmV3IHFPdCgtJEd0LDAsWEd0KSxuZXcgcU90KFhHdCwkR3QsMCksbmV3IHFPdCgtWEd0LCRHdCwwKV07ZnVuY3Rpb24gWkd0KHQpe2NvbnN0IGU9TWF0aC5tYXgodC5yLHQuZyx0LmIpLG49TWF0aC5taW4oTWF0aC5tYXgoTWF0aC5jZWlsKE1hdGgubG9nMihlKSksLTEyOCksMTI3KTtyZXR1cm4gdC5tdWx0aXBseVNjYWxhcihNYXRoLnBvdygyLC1uKSksKG4rMTI4KS8yNTV9ZnVuY3Rpb24gSkd0KHQpe3JldHVybiB2b2lkIDAhPT10JiZ0LnR5cGU9PT1ZSXQmJih0LmVuY29kaW5nPT09eE90fHx0LmVuY29kaW5nPT09d090fHx0LmVuY29kaW5nPT09U090KX1mdW5jdGlvbiBRR3QoKXtjb25zdCB0PVtdLGU9W10sbj1bXTtsZXQgaT04O2ZvcihsZXQgcj0wO3I8Qkd0O3IrKyl7Y29uc3Qgbz1NYXRoLnBvdygyLGkpO2UucHVzaChvKTtsZXQgYT0xL287cj40P2E9REd0W3ItOCs0LTFdOjA9PXImJihhPTApLG4ucHVzaChhKTtjb25zdCBzPTEvKG8tMSksbD0tcy8yLGM9MStzLzIsdT1bbCxsLGMsbCxjLGMsbCxsLGMsYyxsLGNdLGg9NixkPTYscD0zLGY9MixtPTEsZz1uZXcgRmxvYXQzMkFycmF5KHAqZCpoKSxfPW5ldyBGbG9hdDMyQXJyYXkoZipkKmgpLHk9bmV3IEZsb2F0MzJBcnJheShtKmQqaCk7Zm9yKGxldCB0PTA7dDxoO3QrKyl7Y29uc3QgZT10JTMqMi8zLTEsbj10PjI/MDotMTtnLnNldChbZSxuLDAsZSsyLzMsbiwwLGUrMi8zLG4rMSwwLGUsbiwwLGUrMi8zLG4rMSwwLGUsbisxLDBdLHAqZCp0KSxfLnNldCh1LGYqZCp0KSx5LnNldChbdCx0LHQsdCx0LHRdLG0qZCp0KX1jb25zdCB2PW5ldyBWenQ7di5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgYnp0KGcscCkpLHYuc2V0QXR0cmlidXRlKCJ1diIsbmV3IGJ6dChfLGYpKSx2LnNldEF0dHJpYnV0ZSgiZmFjZUluZGV4IixuZXcgYnp0KHksbSkpLHQucHVzaCh2KSxpPjQmJmktLX1yZXR1cm57X2xvZFBsYW5lczp0LF9zaXplTG9kczplLF9zaWdtYXM6bn19ZnVuY3Rpb24gdFd0KHQpe2NvbnN0IGU9bmV3IEdPdCgzKnpHdCwzKnpHdCx0KTtyZXR1cm4gZS50ZXh0dXJlLm1hcHBpbmc9ekl0LGUudGV4dHVyZS5uYW1lPSJQTVJFTS5jdWJlVXYiLGUuc2Npc3NvclRlc3Q9ITAsZX1mdW5jdGlvbiBlV3QodCxlLG4saSxyKXt0LnZpZXdwb3J0LnNldChlLG4saSxyKSx0LnNjaXNzb3Iuc2V0KGUsbixpLHIpfWZ1bmN0aW9uIG5XdCgpe3JldHVybiBuZXcgQlZ0KHtuYW1lOiJFcXVpcmVjdGFuZ3VsYXJUb0N1YmVVViIsdW5pZm9ybXM6e2Vudk1hcDp7dmFsdWU6bnVsbH0sdGV4ZWxTaXplOnt2YWx1ZTpuZXcgek90KDEsMSl9LGlucHV0RW5jb2Rpbmc6e3ZhbHVlOkhHdFszZTNdfSxvdXRwdXRFbmNvZGluZzp7dmFsdWU6SEd0WzNlM119fSx2ZXJ0ZXhTaGFkZXI6IlxuXG5cdFx0cHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG5cdFx0cHJlY2lzaW9uIG1lZGl1bXAgaW50O1xuXG5cdFx0YXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG5cdFx0YXR0cmlidXRlIHZlYzIgdXY7XG5cdFx0YXR0cmlidXRlIGZsb2F0IGZhY2VJbmRleDtcblxuXHRcdHZhcnlpbmcgdmVjMyB2T3V0cHV0RGlyZWN0aW9uO1xuXG5cdFx0Ly8gUkggY29vcmRpbmF0ZSBzeXN0ZW07IFBNUkVNIGZhY2UtaW5kZXhpbmcgY29udmVudGlvblxuXHRcdHZlYzMgZ2V0RGlyZWN0aW9uKCB2ZWMyIHV2LCBmbG9hdCBmYWNlICkge1xuXG5cdFx0XHR1diA9IDIuMCAqIHV2IC0gMS4wO1xuXG5cdFx0XHR2ZWMzIGRpcmVjdGlvbiA9IHZlYzMoIHV2LCAxLjAgKTtcblxuXHRcdFx0aWYgKCBmYWNlID09IDAuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24gPSBkaXJlY3Rpb24uenl4OyAvLyAoIDEsIHYsIHUgKSBwb3MgeFxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDEuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24gPSBkaXJlY3Rpb24ueHp5O1xuXHRcdFx0XHRkaXJlY3Rpb24ueHogKj0gLTEuMDsgLy8gKCAtdSwgMSwgLXYgKSBwb3MgeVxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDIuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24ueCAqPSAtMS4wOyAvLyAoIC11LCB2LCAxICkgcG9zIHpcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSAzLjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uID0gZGlyZWN0aW9uLnp5eDtcblx0XHRcdFx0ZGlyZWN0aW9uLnh6ICo9IC0xLjA7IC8vICggLTEsIHYsIC11ICkgbmVnIHhcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSA0LjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uID0gZGlyZWN0aW9uLnh6eTtcblx0XHRcdFx0ZGlyZWN0aW9uLnh5ICo9IC0xLjA7IC8vICggLXUsIC0xLCB2ICkgbmVnIHlcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSA1LjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uLnogKj0gLTEuMDsgLy8gKCB1LCB2LCAtMSApIG5lZyB6XG5cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGRpcmVjdGlvbjtcblxuXHRcdH1cblxuXHRcdHZvaWQgbWFpbigpIHtcblxuXHRcdFx0dk91dHB1dERpcmVjdGlvbiA9IGdldERpcmVjdGlvbiggdXYsIGZhY2VJbmRleCApO1xuXHRcdFx0Z2xfUG9zaXRpb24gPSB2ZWM0KCBwb3NpdGlvbiwgMS4wICk7XG5cblx0XHR9XG5cdCIsZnJhZ21lbnRTaGFkZXI6IlxuXG5cdFx0XHRwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcblx0XHRcdHByZWNpc2lvbiBtZWRpdW1wIGludDtcblxuXHRcdFx0dmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247XG5cblx0XHRcdHVuaWZvcm0gc2FtcGxlcjJEIGVudk1hcDtcblx0XHRcdHVuaWZvcm0gdmVjMiB0ZXhlbFNpemU7XG5cblx0XHRcdFxuXG5cdFx0dW5pZm9ybSBpbnQgaW5wdXRFbmNvZGluZztcblx0XHR1bmlmb3JtIGludCBvdXRwdXRFbmNvZGluZztcblxuXHRcdCNpbmNsdWRlIDxlbmNvZGluZ3NfcGFyc19mcmFnbWVudD5cblxuXHRcdHZlYzQgaW5wdXRUZXhlbFRvTGluZWFyKCB2ZWM0IHZhbHVlICkge1xuXG5cdFx0XHRpZiAoIGlucHV0RW5jb2RpbmcgPT0gMCApIHtcblxuXHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cblx0XHRcdH0gZWxzZSBpZiAoIGlucHV0RW5jb2RpbmcgPT0gMSApIHtcblxuXHRcdFx0XHRyZXR1cm4gc1JHQlRvTGluZWFyKCB2YWx1ZSApO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBpbnB1dEVuY29kaW5nID09IDIgKSB7XG5cblx0XHRcdFx0cmV0dXJuIFJHQkVUb0xpbmVhciggdmFsdWUgKTtcblxuXHRcdFx0fSBlbHNlIGlmICggaW5wdXRFbmNvZGluZyA9PSAzICkge1xuXG5cdFx0XHRcdHJldHVybiBSR0JNVG9MaW5lYXIoIHZhbHVlLCA3LjAgKTtcblxuXHRcdFx0fSBlbHNlIGlmICggaW5wdXRFbmNvZGluZyA9PSA0ICkge1xuXG5cdFx0XHRcdHJldHVybiBSR0JNVG9MaW5lYXIoIHZhbHVlLCAxNi4wICk7XG5cblx0XHRcdH0gZWxzZSBpZiAoIGlucHV0RW5jb2RpbmcgPT0gNSApIHtcblxuXHRcdFx0XHRyZXR1cm4gUkdCRFRvTGluZWFyKCB2YWx1ZSwgMjU2LjAgKTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRyZXR1cm4gR2FtbWFUb0xpbmVhciggdmFsdWUsIDIuMiApO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHR2ZWM0IGxpbmVhclRvT3V0cHV0VGV4ZWwoIHZlYzQgdmFsdWUgKSB7XG5cblx0XHRcdGlmICggb3V0cHV0RW5jb2RpbmcgPT0gMCApIHtcblxuXHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cblx0XHRcdH0gZWxzZSBpZiAoIG91dHB1dEVuY29kaW5nID09IDEgKSB7XG5cblx0XHRcdFx0cmV0dXJuIExpbmVhclRvc1JHQiggdmFsdWUgKTtcblxuXHRcdFx0fSBlbHNlIGlmICggb3V0cHV0RW5jb2RpbmcgPT0gMiApIHtcblxuXHRcdFx0XHRyZXR1cm4gTGluZWFyVG9SR0JFKCB2YWx1ZSApO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBvdXRwdXRFbmNvZGluZyA9PSAzICkge1xuXG5cdFx0XHRcdHJldHVybiBMaW5lYXJUb1JHQk0oIHZhbHVlLCA3LjAgKTtcblxuXHRcdFx0fSBlbHNlIGlmICggb3V0cHV0RW5jb2RpbmcgPT0gNCApIHtcblxuXHRcdFx0XHRyZXR1cm4gTGluZWFyVG9SR0JNKCB2YWx1ZSwgMTYuMCApO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBvdXRwdXRFbmNvZGluZyA9PSA1ICkge1xuXG5cdFx0XHRcdHJldHVybiBMaW5lYXJUb1JHQkQoIHZhbHVlLCAyNTYuMCApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdHJldHVybiBMaW5lYXJUb0dhbW1hKCB2YWx1ZSwgMi4yICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdHZlYzQgZW52TWFwVGV4ZWxUb0xpbmVhciggdmVjNCBjb2xvciApIHtcblxuXHRcdFx0cmV0dXJuIGlucHV0VGV4ZWxUb0xpbmVhciggY29sb3IgKTtcblxuXHRcdH1cblx0XG5cblx0XHRcdCNpbmNsdWRlIDxjb21tb24+XG5cblx0XHRcdHZvaWQgbWFpbigpIHtcblxuXHRcdFx0XHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCAwLjAsIDAuMCwgMC4wLCAxLjAgKTtcblxuXHRcdFx0XHR2ZWMzIG91dHB1dERpcmVjdGlvbiA9IG5vcm1hbGl6ZSggdk91dHB1dERpcmVjdGlvbiApO1xuXHRcdFx0XHR2ZWMyIHV2ID0gZXF1aXJlY3RVdiggb3V0cHV0RGlyZWN0aW9uICk7XG5cblx0XHRcdFx0dmVjMiBmID0gZnJhY3QoIHV2IC8gdGV4ZWxTaXplIC0gMC41ICk7XG5cdFx0XHRcdHV2IC09IGYgKiB0ZXhlbFNpemU7XG5cdFx0XHRcdHZlYzMgdGwgPSBlbnZNYXBUZXhlbFRvTGluZWFyKCB0ZXh0dXJlMkQgKCBlbnZNYXAsIHV2ICkgKS5yZ2I7XG5cdFx0XHRcdHV2LnggKz0gdGV4ZWxTaXplLng7XG5cdFx0XHRcdHZlYzMgdHIgPSBlbnZNYXBUZXhlbFRvTGluZWFyKCB0ZXh0dXJlMkQgKCBlbnZNYXAsIHV2ICkgKS5yZ2I7XG5cdFx0XHRcdHV2LnkgKz0gdGV4ZWxTaXplLnk7XG5cdFx0XHRcdHZlYzMgYnIgPSBlbnZNYXBUZXhlbFRvTGluZWFyKCB0ZXh0dXJlMkQgKCBlbnZNYXAsIHV2ICkgKS5yZ2I7XG5cdFx0XHRcdHV2LnggLT0gdGV4ZWxTaXplLng7XG5cdFx0XHRcdHZlYzMgYmwgPSBlbnZNYXBUZXhlbFRvTGluZWFyKCB0ZXh0dXJlMkQgKCBlbnZNYXAsIHV2ICkgKS5yZ2I7XG5cblx0XHRcdFx0dmVjMyB0bSA9IG1peCggdGwsIHRyLCBmLnggKTtcblx0XHRcdFx0dmVjMyBibSA9IG1peCggYmwsIGJyLCBmLnggKTtcblx0XHRcdFx0Z2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggdG0sIGJtLCBmLnkgKTtcblxuXHRcdFx0XHRnbF9GcmFnQ29sb3IgPSBsaW5lYXJUb091dHB1dFRleGVsKCBnbF9GcmFnQ29sb3IgKTtcblxuXHRcdFx0fVxuXHRcdCIsYmxlbmRpbmc6MCxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMX0pfWZ1bmN0aW9uIGlXdCgpe3JldHVybiBuZXcgQlZ0KHtuYW1lOiJDdWJlbWFwVG9DdWJlVVYiLHVuaWZvcm1zOntlbnZNYXA6e3ZhbHVlOm51bGx9LGlucHV0RW5jb2Rpbmc6e3ZhbHVlOkhHdFszZTNdfSxvdXRwdXRFbmNvZGluZzp7dmFsdWU6SEd0WzNlM119fSx2ZXJ0ZXhTaGFkZXI6IlxuXG5cdFx0cHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG5cdFx0cHJlY2lzaW9uIG1lZGl1bXAgaW50O1xuXG5cdFx0YXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG5cdFx0YXR0cmlidXRlIHZlYzIgdXY7XG5cdFx0YXR0cmlidXRlIGZsb2F0IGZhY2VJbmRleDtcblxuXHRcdHZhcnlpbmcgdmVjMyB2T3V0cHV0RGlyZWN0aW9uO1xuXG5cdFx0Ly8gUkggY29vcmRpbmF0ZSBzeXN0ZW07IFBNUkVNIGZhY2UtaW5kZXhpbmcgY29udmVudGlvblxuXHRcdHZlYzMgZ2V0RGlyZWN0aW9uKCB2ZWMyIHV2LCBmbG9hdCBmYWNlICkge1xuXG5cdFx0XHR1diA9IDIuMCAqIHV2IC0gMS4wO1xuXG5cdFx0XHR2ZWMzIGRpcmVjdGlvbiA9IHZlYzMoIHV2LCAxLjAgKTtcblxuXHRcdFx0aWYgKCBmYWNlID09IDAuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24gPSBkaXJlY3Rpb24uenl4OyAvLyAoIDEsIHYsIHUgKSBwb3MgeFxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDEuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24gPSBkaXJlY3Rpb24ueHp5O1xuXHRcdFx0XHRkaXJlY3Rpb24ueHogKj0gLTEuMDsgLy8gKCAtdSwgMSwgLXYgKSBwb3MgeVxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDIuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24ueCAqPSAtMS4wOyAvLyAoIC11LCB2LCAxICkgcG9zIHpcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSAzLjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uID0gZGlyZWN0aW9uLnp5eDtcblx0XHRcdFx0ZGlyZWN0aW9uLnh6ICo9IC0xLjA7IC8vICggLTEsIHYsIC11ICkgbmVnIHhcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSA0LjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uID0gZGlyZWN0aW9uLnh6eTtcblx0XHRcdFx0ZGlyZWN0aW9uLnh5ICo9IC0xLjA7IC8vICggLXUsIC0xLCB2ICkgbmVnIHlcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSA1LjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uLnogKj0gLTEuMDsgLy8gKCB1LCB2LCAtMSApIG5lZyB6XG5cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGRpcmVjdGlvbjtcblxuXHRcdH1cblxuXHRcdHZvaWQgbWFpbigpIHtcblxuXHRcdFx0dk91dHB1dERpcmVjdGlvbiA9IGdldERpcmVjdGlvbiggdXYsIGZhY2VJbmRleCApO1xuXHRcdFx0Z2xfUG9zaXRpb24gPSB2ZWM0KCBwb3NpdGlvbiwgMS4wICk7XG5cblx0XHR9XG5cdCIsZnJhZ21lbnRTaGFkZXI6IlxuXG5cdFx0XHRwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcblx0XHRcdHByZWNpc2lvbiBtZWRpdW1wIGludDtcblxuXHRcdFx0dmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247XG5cblx0XHRcdHVuaWZvcm0gc2FtcGxlckN1YmUgZW52TWFwO1xuXG5cdFx0XHRcblxuXHRcdHVuaWZvcm0gaW50IGlucHV0RW5jb2Rpbmc7XG5cdFx0dW5pZm9ybSBpbnQgb3V0cHV0RW5jb2Rpbmc7XG5cblx0XHQjaW5jbHVkZSA8ZW5jb2RpbmdzX3BhcnNfZnJhZ21lbnQ+XG5cblx0XHR2ZWM0IGlucHV0VGV4ZWxUb0xpbmVhciggdmVjNCB2YWx1ZSApIHtcblxuXHRcdFx0aWYgKCBpbnB1dEVuY29kaW5nID09IDAgKSB7XG5cblx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBpbnB1dEVuY29kaW5nID09IDEgKSB7XG5cblx0XHRcdFx0cmV0dXJuIHNSR0JUb0xpbmVhciggdmFsdWUgKTtcblxuXHRcdFx0fSBlbHNlIGlmICggaW5wdXRFbmNvZGluZyA9PSAyICkge1xuXG5cdFx0XHRcdHJldHVybiBSR0JFVG9MaW5lYXIoIHZhbHVlICk7XG5cblx0XHRcdH0gZWxzZSBpZiAoIGlucHV0RW5jb2RpbmcgPT0gMyApIHtcblxuXHRcdFx0XHRyZXR1cm4gUkdCTVRvTGluZWFyKCB2YWx1ZSwgNy4wICk7XG5cblx0XHRcdH0gZWxzZSBpZiAoIGlucHV0RW5jb2RpbmcgPT0gNCApIHtcblxuXHRcdFx0XHRyZXR1cm4gUkdCTVRvTGluZWFyKCB2YWx1ZSwgMTYuMCApO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBpbnB1dEVuY29kaW5nID09IDUgKSB7XG5cblx0XHRcdFx0cmV0dXJuIFJHQkRUb0xpbmVhciggdmFsdWUsIDI1Ni4wICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0cmV0dXJuIEdhbW1hVG9MaW5lYXIoIHZhbHVlLCAyLjIgKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0dmVjNCBsaW5lYXJUb091dHB1dFRleGVsKCB2ZWM0IHZhbHVlICkge1xuXG5cdFx0XHRpZiAoIG91dHB1dEVuY29kaW5nID09IDAgKSB7XG5cblx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBvdXRwdXRFbmNvZGluZyA9PSAxICkge1xuXG5cdFx0XHRcdHJldHVybiBMaW5lYXJUb3NSR0IoIHZhbHVlICk7XG5cblx0XHRcdH0gZWxzZSBpZiAoIG91dHB1dEVuY29kaW5nID09IDIgKSB7XG5cblx0XHRcdFx0cmV0dXJuIExpbmVhclRvUkdCRSggdmFsdWUgKTtcblxuXHRcdFx0fSBlbHNlIGlmICggb3V0cHV0RW5jb2RpbmcgPT0gMyApIHtcblxuXHRcdFx0XHRyZXR1cm4gTGluZWFyVG9SR0JNKCB2YWx1ZSwgNy4wICk7XG5cblx0XHRcdH0gZWxzZSBpZiAoIG91dHB1dEVuY29kaW5nID09IDQgKSB7XG5cblx0XHRcdFx0cmV0dXJuIExpbmVhclRvUkdCTSggdmFsdWUsIDE2LjAgKTtcblxuXHRcdFx0fSBlbHNlIGlmICggb3V0cHV0RW5jb2RpbmcgPT0gNSApIHtcblxuXHRcdFx0XHRyZXR1cm4gTGluZWFyVG9SR0JEKCB2YWx1ZSwgMjU2LjAgKTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRyZXR1cm4gTGluZWFyVG9HYW1tYSggdmFsdWUsIDIuMiApO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHR2ZWM0IGVudk1hcFRleGVsVG9MaW5lYXIoIHZlYzQgY29sb3IgKSB7XG5cblx0XHRcdHJldHVybiBpbnB1dFRleGVsVG9MaW5lYXIoIGNvbG9yICk7XG5cblx0XHR9XG5cdFxuXG5cdFx0XHR2b2lkIG1haW4oKSB7XG5cblx0XHRcdFx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggMC4wLCAwLjAsIDAuMCwgMS4wICk7XG5cdFx0XHRcdGdsX0ZyYWdDb2xvci5yZ2IgPSBlbnZNYXBUZXhlbFRvTGluZWFyKCB0ZXh0dXJlQ3ViZSggZW52TWFwLCB2ZWMzKCAtIHZPdXRwdXREaXJlY3Rpb24ueCwgdk91dHB1dERpcmVjdGlvbi55eiApICkgKS5yZ2I7XG5cdFx0XHRcdGdsX0ZyYWdDb2xvciA9IGxpbmVhclRvT3V0cHV0VGV4ZWwoIGdsX0ZyYWdDb2xvciApO1xuXG5cdFx0XHR9XG5cdFx0IixibGVuZGluZzowLGRlcHRoVGVzdDohMSxkZXB0aFdyaXRlOiExfSl9ZnVuY3Rpb24gcld0KHQpe2NvbnNvbGUud2FybigiVEhSRUUuQ2xvc2VkU3BsaW5lQ3VydmUzIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSBUSFJFRS5DYXRtdWxsUm9tQ3VydmUzIGluc3RlYWQuIiksa1V0LmNhbGwodGhpcyx0KSx0aGlzLnR5cGU9ImNhdG11bGxyb20iLHRoaXMuY2xvc2VkPSEwfWZ1bmN0aW9uIG9XdCh0KXtjb25zb2xlLndhcm4oIlRIUkVFLlNwbGluZUN1cnZlMyBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuQ2F0bXVsbFJvbUN1cnZlMyBpbnN0ZWFkLiIpLGtVdC5jYWxsKHRoaXMsdCksdGhpcy50eXBlPSJjYXRtdWxscm9tIn1mdW5jdGlvbiBhV3QodCl7Y29uc29sZS53YXJuKCJUSFJFRS5TcGxpbmUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLkNhdG11bGxSb21DdXJ2ZTMgaW5zdGVhZC4iKSxrVXQuY2FsbCh0aGlzLHQpLHRoaXMudHlwZT0iY2F0bXVsbHJvbSJ9eFV0LmNyZWF0ZT1mdW5jdGlvbih0LGUpe3JldHVybiBjb25zb2xlLmxvZygiVEhSRUUuQ3VydmUuY3JlYXRlKCkgaGFzIGJlZW4gZGVwcmVjYXRlZCIpLHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeFV0LnByb3RvdHlwZSksdC5wcm90b3R5cGUuY29uc3RydWN0b3I9dCx0LnByb3RvdHlwZS5nZXRQb2ludD1lLHR9LE9iamVjdC5hc3NpZ24oVVV0LnByb3RvdHlwZSx7ZnJvbVBvaW50czpmdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5QYXRoOiAuZnJvbVBvaW50cygpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEZyb21Qb2ludHMoKS4iKSx0aGlzLnNldEZyb21Qb2ludHModCl9fSkscld0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGtVdC5wcm90b3R5cGUpLG9XdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShrVXQucHJvdG90eXBlKSxhV3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoa1V0LnByb3RvdHlwZSksT2JqZWN0LmFzc2lnbihhV3QucHJvdG90eXBlLHtpbml0RnJvbUFycmF5OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuU3BsaW5lOiAuaW5pdEZyb21BcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LGdldENvbnRyb2xQb2ludHNBcnJheTpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNwbGluZTogLmdldENvbnRyb2xQb2ludHNBcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LHJlcGFyYW1ldHJpemVCeUFyY0xlbmd0aDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNwbGluZTogLnJlcGFyYW1ldHJpemVCeUFyY0xlbmd0aCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9fSksYkd0LnByb3RvdHlwZS5zZXRDb2xvcnM9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5HcmlkSGVscGVyOiBzZXRDb2xvcnMoKSBoYXMgYmVlbiBkZXByZWNhdGVkLCBwYXNzIHRoZW0gaW4gdGhlIGNvbnN0cnVjdG9yIGluc3RlYWQuIil9LG1HdC5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuU2tlbGV0b25IZWxwZXI6IHVwZGF0ZSgpIG5vIGxvbmdlciBuZWVkcyB0byBiZSBjYWxsZWQuIil9LE9iamVjdC5hc3NpZ24oZFV0LnByb3RvdHlwZSx7ZXh0cmFjdFVybEJhc2U6ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTG9hZGVyOiAuZXh0cmFjdFVybEJhc2UoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuTG9hZGVyVXRpbHMuZXh0cmFjdFVybEJhc2UoKSBpbnN0ZWFkLiIpLG9qdC5leHRyYWN0VXJsQmFzZSh0KX19KSxkVXQuSGFuZGxlcnM9e2FkZDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkxvYWRlcjogSGFuZGxlcnMuYWRkKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIExvYWRpbmdNYW5hZ2VyLmFkZEhhbmRsZXIoKSBpbnN0ZWFkLiIpfSxnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Mb2FkZXI6IEhhbmRsZXJzLmdldCgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBMb2FkaW5nTWFuYWdlci5nZXRIYW5kbGVyKCkgaW5zdGVhZC4iKX19LE9iamVjdC5hc3NpZ24oYUd0LnByb3RvdHlwZSx7Y2VudGVyOmZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5jZW50ZXIoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRDZW50ZXIoKS4iKSx0aGlzLmdldENlbnRlcih0KX0sZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gyOiAuZW1wdHkoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pc0VtcHR5KCkuIiksdGhpcy5pc0VtcHR5KCl9LGlzSW50ZXJzZWN0aW9uQm94OmZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5pc0ludGVyc2VjdGlvbkJveCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNCb3goKS4iKSx0aGlzLmludGVyc2VjdHNCb3godCl9LHNpemU6ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MjogLnNpemUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRTaXplKCkuIiksdGhpcy5nZXRTaXplKHQpfX0pLE9iamVjdC5hc3NpZ24oJE90LnByb3RvdHlwZSx7Y2VudGVyOmZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5jZW50ZXIoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRDZW50ZXIoKS4iKSx0aGlzLmdldENlbnRlcih0KX0sZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuZW1wdHkoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pc0VtcHR5KCkuIiksdGhpcy5pc0VtcHR5KCl9LGlzSW50ZXJzZWN0aW9uQm94OmZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5pc0ludGVyc2VjdGlvbkJveCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNCb3goKS4iKSx0aGlzLmludGVyc2VjdHNCb3godCl9LGlzSW50ZXJzZWN0aW9uU3BoZXJlOmZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5pc0ludGVyc2VjdGlvblNwaGVyZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNTcGhlcmUoKS4iKSx0aGlzLmludGVyc2VjdHNTcGhlcmUodCl9LHNpemU6ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MzogLnNpemUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRTaXplKCkuIiksdGhpcy5nZXRTaXplKHQpfX0pLE9iamVjdC5hc3NpZ24oaFJ0LnByb3RvdHlwZSx7ZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5TcGhlcmU6IC5lbXB0eSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmlzRW1wdHkoKS4iKSx0aGlzLmlzRW1wdHkoKX19KSx4RHQucHJvdG90eXBlLnNldEZyb21NYXRyaXg9ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuRnJ1c3R1bTogLnNldEZyb21NYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeCgpLiIpLHRoaXMuc2V0RnJvbVByb2plY3Rpb25NYXRyaXgodCl9LGNHdC5wcm90b3R5cGUuY2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkxpbmUzOiAuY2VudGVyKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Q2VudGVyKCkuIiksdGhpcy5nZXRDZW50ZXIodCl9LE9iamVjdC5hc3NpZ24oUk90LHtyYW5kb20xNjpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdGg6IC5yYW5kb20xNigpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSBNYXRoLnJhbmRvbSgpIGluc3RlYWQuIiksTWF0aC5yYW5kb20oKX0sbmVhcmVzdFBvd2VyT2ZUd286ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0aDogLm5lYXJlc3RQb3dlck9mVHdvKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZmxvb3JQb3dlck9mVHdvKCkuIiksUk90LmZsb29yUG93ZXJPZlR3byh0KX0sbmV4dFBvd2VyT2ZUd286ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0aDogLm5leHRQb3dlck9mVHdvKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuY2VpbFBvd2VyT2ZUd28oKS4iKSxST3QuY2VpbFBvd2VyT2ZUd28odCl9fSksT2JqZWN0LmFzc2lnbihET3QucHJvdG90eXBlLHtmbGF0dGVuVG9BcnJheU9mZnNldDpmdW5jdGlvbih0LGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDM6IC5mbGF0dGVuVG9BcnJheU9mZnNldCgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudG9BcnJheSgpIGluc3RlYWQuIiksdGhpcy50b0FycmF5KHQsZSl9LG11bHRpcGx5VmVjdG9yMzpmdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXgzOiAubXVsdGlwbHlWZWN0b3IzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHZlY3Rvci5hcHBseU1hdHJpeDMoIG1hdHJpeCApIGluc3RlYWQuIiksdC5hcHBseU1hdHJpeDModGhpcyl9LG11bHRpcGx5VmVjdG9yM0FycmF5OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4MzogLm11bHRpcGx5VmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZTpmdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXgzOiAuYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBhdHRyaWJ1dGUuYXBwbHlNYXRyaXgzKCBtYXRyaXggKSBpbnN0ZWFkLiIpLHQuYXBwbHlNYXRyaXgzKHRoaXMpfSxhcHBseVRvVmVjdG9yM0FycmF5OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4MzogLmFwcGx5VG9WZWN0b3IzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxnZXRJbnZlcnNlOmZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDM6IC5nZXRJbnZlcnNlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG1hdHJpeEludi5jb3B5KCBtYXRyaXggKS5pbnZlcnQoKTsgaW5zdGVhZC4iKSx0aGlzLmNvcHkodCkuaW52ZXJ0KCl9fSksT2JqZWN0LmFzc2lnbihiUnQucHJvdG90eXBlLHtleHRyYWN0UG9zaXRpb246ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmV4dHJhY3RQb3NpdGlvbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmNvcHlQb3NpdGlvbigpLiIpLHRoaXMuY29weVBvc2l0aW9uKHQpfSxmbGF0dGVuVG9BcnJheU9mZnNldDpmdW5jdGlvbih0LGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5mbGF0dGVuVG9BcnJheU9mZnNldCgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudG9BcnJheSgpIGluc3RlYWQuIiksdGhpcy50b0FycmF5KHQsZSl9LGdldFBvc2l0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmdldFBvc2l0aW9uKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFZlY3RvcjMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCBtYXRyaXggKSBpbnN0ZWFkLiIpLChuZXcgcU90KS5zZXRGcm9tTWF0cml4Q29sdW1uKHRoaXMsMyl9LHNldFJvdGF0aW9uRnJvbVF1YXRlcm5pb246ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLnNldFJvdGF0aW9uRnJvbVF1YXRlcm5pb24oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbigpLiIpLHRoaXMubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24odCl9LG11bHRpcGx5VG9BcnJheTpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VG9BcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LG11bHRpcGx5VmVjdG9yMzpmdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHlWZWN0b3IzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHZlY3Rvci5hcHBseU1hdHJpeDQoIG1hdHJpeCApIGluc3RlYWQuIiksdC5hcHBseU1hdHJpeDQodGhpcyl9LG11bHRpcGx5VmVjdG9yNDpmdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHlWZWN0b3I0KCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHZlY3Rvci5hcHBseU1hdHJpeDQoIG1hdHJpeCApIGluc3RlYWQuIiksdC5hcHBseU1hdHJpeDQodGhpcyl9LG11bHRpcGx5VmVjdG9yM0FycmF5OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0scm90YXRlQXhpczpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVBeGlzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFZlY3RvcjMudHJhbnNmb3JtRGlyZWN0aW9uKCBtYXRyaXggKSBpbnN0ZWFkLiIpLHQudHJhbnNmb3JtRGlyZWN0aW9uKHRoaXMpfSxjcm9zc1ZlY3RvcjpmdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuY3Jvc3NWZWN0b3IoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4NCggbWF0cml4ICkgaW5zdGVhZC4iKSx0LmFwcGx5TWF0cml4NCh0aGlzKX0sdHJhbnNsYXRlOmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnRyYW5zbGF0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LHJvdGF0ZVg6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlWCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LHJvdGF0ZVk6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlWSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LHJvdGF0ZVo6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlWigpIGhhcyBiZWVuIHJlbW92ZWQuIil9LHJvdGF0ZUJ5QXhpczpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVCeUF4aXMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxhcHBseVRvQnVmZmVyQXR0cmlidXRlOmZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5hcHBseVRvQnVmZmVyQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGF0dHJpYnV0ZS5hcHBseU1hdHJpeDQoIG1hdHJpeCApIGluc3RlYWQuIiksdC5hcHBseU1hdHJpeDQodGhpcyl9LGFwcGx5VG9WZWN0b3IzQXJyYXk6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAuYXBwbHlUb1ZlY3RvcjNBcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LG1ha2VGcnVzdHVtOmZ1bmN0aW9uKHQsZSxuLGkscixvKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubWFrZUZydXN0dW0oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLm1ha2VQZXJzcGVjdGl2ZSggbGVmdCwgcmlnaHQsIHRvcCwgYm90dG9tLCBuZWFyLCBmYXIgKSBpbnN0ZWFkLiIpLHRoaXMubWFrZVBlcnNwZWN0aXZlKHQsZSxpLG4scixvKX0sZ2V0SW52ZXJzZTpmdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuZ2V0SW52ZXJzZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBtYXRyaXhJbnYuY29weSggbWF0cml4ICkuaW52ZXJ0KCk7IGluc3RlYWQuIiksdGhpcy5jb3B5KHQpLmludmVydCgpfX0pLCRSdC5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25MaW5lPWZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlBsYW5lOiAuaXNJbnRlcnNlY3Rpb25MaW5lKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c0xpbmUoKS4iKSx0aGlzLmludGVyc2VjdHNMaW5lKHQpfSxPYmplY3QuYXNzaWduKFdPdC5wcm90b3R5cGUse211bHRpcGx5VmVjdG9yMzpmdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiAubXVsdGlwbHlWZWN0b3IzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGlzIG5vdyB2ZWN0b3IuYXBwbHlRdWF0ZXJuaW9uKCBxdWF0ZXJuaW9uICkgaW5zdGVhZC4iKSx0LmFwcGx5UXVhdGVybmlvbih0aGlzKX0saW52ZXJzZTpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlF1YXRlcm5pb246IC5pbnZlcnNlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byBpbnZlcnQoKS4iKSx0aGlzLmludmVydCgpfX0pLE9iamVjdC5hc3NpZ24odlJ0LnByb3RvdHlwZSx7aXNJbnRlcnNlY3Rpb25Cb3g6ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUmF5OiAuaXNJbnRlcnNlY3Rpb25Cb3goKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzQm94KCkuIiksdGhpcy5pbnRlcnNlY3RzQm94KHQpfSxpc0ludGVyc2VjdGlvblBsYW5lOmZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlJheTogLmlzSW50ZXJzZWN0aW9uUGxhbmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzUGxhbmUoKS4iKSx0aGlzLmludGVyc2VjdHNQbGFuZSh0KX0saXNJbnRlcnNlY3Rpb25TcGhlcmU6ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUmF5OiAuaXNJbnRlcnNlY3Rpb25TcGhlcmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzU3BoZXJlKCkuIiksdGhpcy5pbnRlcnNlY3RzU3BoZXJlKHQpfX0pLE9iamVjdC5hc3NpZ24oYXp0LnByb3RvdHlwZSx7YXJlYTpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAuYXJlYSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldEFyZWEoKS4iKSx0aGlzLmdldEFyZWEoKX0sYmFyeWNvb3JkRnJvbVBvaW50OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5iYXJ5Y29vcmRGcm9tUG9pbnQoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRCYXJ5Y29vcmQoKS4iKSx0aGlzLmdldEJhcnljb29yZCh0LGUpfSxtaWRwb2ludDpmdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLm1pZHBvaW50KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0TWlkcG9pbnQoKS4iKSx0aGlzLmdldE1pZHBvaW50KHQpfSxub3JtYWw6ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5ub3JtYWwoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXROb3JtYWwoKS4iKSx0aGlzLmdldE5vcm1hbCh0KX0scGxhbmU6ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5wbGFuZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldFBsYW5lKCkuIiksdGhpcy5nZXRQbGFuZSh0KX19KSxPYmplY3QuYXNzaWduKGF6dCx7YmFyeWNvb3JkRnJvbVBvaW50OmZ1bmN0aW9uKHQsZSxuLGkscil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5iYXJ5Y29vcmRGcm9tUG9pbnQoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRCYXJ5Y29vcmQoKS4iKSxhenQuZ2V0QmFyeWNvb3JkKHQsZSxuLGkscil9LG5vcm1hbDpmdW5jdGlvbih0LGUsbixpKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLm5vcm1hbCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldE5vcm1hbCgpLiIpLGF6dC5nZXROb3JtYWwodCxlLG4saSl9fSksT2JqZWN0LmFzc2lnbihqVXQucHJvdG90eXBlLHtleHRyYWN0QWxsUG9pbnRzOmZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlNoYXBlOiAuZXh0cmFjdEFsbFBvaW50cygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuZXh0cmFjdFBvaW50cygpIGluc3RlYWQuIiksdGhpcy5leHRyYWN0UG9pbnRzKHQpfSxleHRydWRlOmZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlNoYXBlOiAuZXh0cnVkZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBFeHRydWRlR2VvbWV0cnkoKSBpbnN0ZWFkLiIpLG5ldyB4VnQodGhpcyx0KX0sbWFrZUdlb21ldHJ5OmZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlNoYXBlOiAubWFrZUdlb21ldHJ5KCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFNoYXBlR2VvbWV0cnkoKSBpbnN0ZWFkLiIpLG5ldyBBVnQodGhpcyx0KX19KSxPYmplY3QuYXNzaWduKHpPdC5wcm90b3R5cGUse2Zyb21BdHRyaWJ1dGU6ZnVuY3Rpb24odCxlLG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjI6IC5mcm9tQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUsbil9LGRpc3RhbmNlVG9NYW5oYXR0YW46ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLmRpc3RhbmNlVG9NYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5EaXN0YW5jZVRvKCkuIiksdGhpcy5tYW5oYXR0YW5EaXN0YW5jZVRvKHQpfSxsZW5ndGhNYW5oYXR0YW46ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiAubGVuZ3RoTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuTGVuZ3RoKCkuIiksdGhpcy5tYW5oYXR0YW5MZW5ndGgoKX19KSxPYmplY3QuYXNzaWduKHFPdC5wcm90b3R5cGUse3NldEV1bGVyRnJvbVJvdGF0aW9uTWF0cml4OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuVmVjdG9yMzogLnNldEV1bGVyRnJvbVJvdGF0aW9uTWF0cml4KCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEV1bGVyLnNldEZyb21Sb3RhdGlvbk1hdHJpeCgpIGluc3RlYWQuIil9LHNldEV1bGVyRnJvbVF1YXRlcm5pb246ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5WZWN0b3IzOiAuc2V0RXVsZXJGcm9tUXVhdGVybmlvbigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBFdWxlci5zZXRGcm9tUXVhdGVybmlvbigpIGluc3RlYWQuIil9LGdldFBvc2l0aW9uRnJvbU1hdHJpeDpmdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZ2V0UG9zaXRpb25Gcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCkuIiksdGhpcy5zZXRGcm9tTWF0cml4UG9zaXRpb24odCl9LGdldFNjYWxlRnJvbU1hdHJpeDpmdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZ2V0U2NhbGVGcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbU1hdHJpeFNjYWxlKCkuIiksdGhpcy5zZXRGcm9tTWF0cml4U2NhbGUodCl9LGdldENvbHVtbkZyb21NYXRyaXg6ZnVuY3Rpb24odCxlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZ2V0Q29sdW1uRnJvbU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEZyb21NYXRyaXhDb2x1bW4oKS4iKSx0aGlzLnNldEZyb21NYXRyaXhDb2x1bW4oZSx0KX0sYXBwbHlQcm9qZWN0aW9uOmZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5hcHBseVByb2plY3Rpb24oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLmFwcGx5TWF0cml4NCggbSApIGluc3RlYWQuIiksdGhpcy5hcHBseU1hdHJpeDQodCl9LGZyb21BdHRyaWJ1dGU6ZnVuY3Rpb24odCxlLG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5mcm9tQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUsbil9LGRpc3RhbmNlVG9NYW5oYXR0YW46ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmRpc3RhbmNlVG9NYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5EaXN0YW5jZVRvKCkuIiksdGhpcy5tYW5oYXR0YW5EaXN0YW5jZVRvKHQpfSxsZW5ndGhNYW5oYXR0YW46ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAubGVuZ3RoTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuTGVuZ3RoKCkuIiksdGhpcy5tYW5oYXR0YW5MZW5ndGgoKX19KSxPYmplY3QuYXNzaWduKGpPdC5wcm90b3R5cGUse2Zyb21BdHRyaWJ1dGU6ZnVuY3Rpb24odCxlLG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IC5mcm9tQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUsbil9LGxlbmd0aE1hbmhhdHRhbjpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IC5sZW5ndGhNYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5MZW5ndGgoKS4iKSx0aGlzLm1hbmhhdHRhbkxlbmd0aCgpfX0pLE9iamVjdC5hc3NpZ24oV1J0LnByb3RvdHlwZSx7Z2V0Q2hpbGRCeU5hbWU6ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5nZXRDaGlsZEJ5TmFtZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldE9iamVjdEJ5TmFtZSgpLiIpLHRoaXMuZ2V0T2JqZWN0QnlOYW1lKHQpfSxyZW5kZXJEZXB0aDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5yZW5kZXJEZXB0aCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnJlbmRlck9yZGVyLCBpbnN0ZWFkLiIpfSx0cmFuc2xhdGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLnRyYW5zbGF0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAudHJhbnNsYXRlT25BeGlzKCBheGlzLCBkaXN0YW5jZSApIGluc3RlYWQuIiksdGhpcy50cmFuc2xhdGVPbkF4aXMoZSx0KX0sZ2V0V29ybGRSb3RhdGlvbjpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk9iamVjdDNEOiAuZ2V0V29ybGRSb3RhdGlvbigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5PYmplY3QzRC5nZXRXb3JsZFF1YXRlcm5pb24oIHRhcmdldCApIGluc3RlYWQuIil9LGFwcGx5TWF0cml4OmZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAuYXBwbHlNYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5hcHBseU1hdHJpeDQoKS4iKSx0aGlzLmFwcGx5TWF0cml4NCh0KX19KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhXUnQucHJvdG90eXBlLHtldWxlck9yZGVyOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLmV1bGVyT3JkZXIgaXMgbm93IC5yb3RhdGlvbi5vcmRlci4iKSx0aGlzLnJvdGF0aW9uLm9yZGVyfSxzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLmV1bGVyT3JkZXIgaXMgbm93IC5yb3RhdGlvbi5vcmRlci4iKSx0aGlzLnJvdGF0aW9uLm9yZGVyPXR9fSx1c2VRdWF0ZXJuaW9uOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAudXNlUXVhdGVybmlvbiBoYXMgYmVlbiByZW1vdmVkLiBUaGUgbGlicmFyeSBub3cgdXNlcyBxdWF0ZXJuaW9ucyBieSBkZWZhdWx0LiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAudXNlUXVhdGVybmlvbiBoYXMgYmVlbiByZW1vdmVkLiBUaGUgbGlicmFyeSBub3cgdXNlcyBxdWF0ZXJuaW9ucyBieSBkZWZhdWx0LiIpfX19KSxPYmplY3QuYXNzaWduKG9EdC5wcm90b3R5cGUse3NldERyYXdNb2RlOmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWVzaDogLnNldERyYXdNb2RlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIHJlbmRlcmVyIG5vdyBhbHdheXMgYXNzdW1lcyBUSFJFRS5UcmlhbmdsZXNEcmF3TW9kZS4gVHJhbnNmb3JtIHlvdXIgZ2VvbWV0cnkgdmlhIEJ1ZmZlckdlb21ldHJ5VXRpbHMudG9UcmlhbmdsZXNEcmF3TW9kZSgpIGlmIG5lY2Vzc2FyeS4iKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhvRHQucHJvdG90eXBlLHtkcmF3TW9kZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUuZXJyb3IoIlRIUkVFLk1lc2g6IC5kcmF3TW9kZSBoYXMgYmVlbiByZW1vdmVkLiBUaGUgcmVuZGVyZXIgbm93IGFsd2F5cyBhc3N1bWVzIFRIUkVFLlRyaWFuZ2xlc0RyYXdNb2RlLiIpLDB9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1lc2g6IC5kcmF3TW9kZSBoYXMgYmVlbiByZW1vdmVkLiBUaGUgcmVuZGVyZXIgbm93IGFsd2F5cyBhc3N1bWVzIFRIUkVFLlRyaWFuZ2xlc0RyYXdNb2RlLiBUcmFuc2Zvcm0geW91ciBnZW9tZXRyeSB2aWEgQnVmZmVyR2VvbWV0cnlVdGlscy50b1RyaWFuZ2xlc0RyYXdNb2RlKCkgaWYgbmVjZXNzYXJ5LiIpfX19KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0RnQucHJvdG90eXBlLHtvYmplY3RzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5MT0Q6IC5vYmplY3RzIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmxldmVscy4iKSx0aGlzLmxldmVsc319fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHVGdC5wcm90b3R5cGUsInVzZVZlcnRleFRleHR1cmUiLHtnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLlNrZWxldG9uOiB1c2VWZXJ0ZXhUZXh0dXJlIGhhcyBiZWVuIHJlbW92ZWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuU2tlbGV0b246IHVzZVZlcnRleFRleHR1cmUgaGFzIGJlZW4gcmVtb3ZlZC4iKX19KSxhRnQucHJvdG90eXBlLmluaXRCb25lcz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNraW5uZWRNZXNoOiBpbml0Qm9uZXMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeFV0LnByb3RvdHlwZSwiX19hcmNMZW5ndGhEaXZpc2lvbnMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5DdXJ2ZTogLl9fYXJjTGVuZ3RoRGl2aXNpb25zIGlzIG5vdyAuYXJjTGVuZ3RoRGl2aXNpb25zLiIpLHRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zfSxzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5DdXJ2ZTogLl9fYXJjTGVuZ3RoRGl2aXNpb25zIGlzIG5vdyAuYXJjTGVuZ3RoRGl2aXNpb25zLiIpLHRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zPXR9fSkscER0LnByb3RvdHlwZS5zZXRMZW5zPWZ1bmN0aW9uKHQsZSl7Y29uc29sZS53YXJuKCJUSFJFRS5QZXJzcGVjdGl2ZUNhbWVyYS5zZXRMZW5zIGlzIGRlcHJlY2F0ZWQuIFVzZSAuc2V0Rm9jYWxMZW5ndGggYW5kIC5maWxtR2F1Z2UgZm9yIGEgcGhvdG9ncmFwaGljIHNldHVwLiIpLHZvaWQgMCE9PWUmJih0aGlzLmZpbG1HYXVnZT1lKSx0aGlzLnNldEZvY2FsTGVuZ3RoKHQpfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhHVXQucHJvdG90eXBlLHtvbmx5U2hhZG93OntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAub25seVNoYWRvdyBoYXMgYmVlbiByZW1vdmVkLiIpfX0sc2hhZG93Q2FtZXJhRm92OntzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYUZvdiBpcyBub3cgLnNoYWRvdy5jYW1lcmEuZm92LiIpLHRoaXMuc2hhZG93LmNhbWVyYS5mb3Y9dH19LHNoYWRvd0NhbWVyYUxlZnQ6e3NldDpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhTGVmdCBpcyBub3cgLnNoYWRvdy5jYW1lcmEubGVmdC4iKSx0aGlzLnNoYWRvdy5jYW1lcmEubGVmdD10fX0sc2hhZG93Q2FtZXJhUmlnaHQ6e3NldDpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhUmlnaHQgaXMgbm93IC5zaGFkb3cuY2FtZXJhLnJpZ2h0LiIpLHRoaXMuc2hhZG93LmNhbWVyYS5yaWdodD10fX0sc2hhZG93Q2FtZXJhVG9wOntzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYVRvcCBpcyBub3cgLnNoYWRvdy5jYW1lcmEudG9wLiIpLHRoaXMuc2hhZG93LmNhbWVyYS50b3A9dH19LHNoYWRvd0NhbWVyYUJvdHRvbTp7c2V0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFCb3R0b20gaXMgbm93IC5zaGFkb3cuY2FtZXJhLmJvdHRvbS4iKSx0aGlzLnNoYWRvdy5jYW1lcmEuYm90dG9tPXR9fSxzaGFkb3dDYW1lcmFOZWFyOntzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYU5lYXIgaXMgbm93IC5zaGFkb3cuY2FtZXJhLm5lYXIuIiksdGhpcy5zaGFkb3cuY2FtZXJhLm5lYXI9dH19LHNoYWRvd0NhbWVyYUZhcjp7c2V0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFGYXIgaXMgbm93IC5zaGFkb3cuY2FtZXJhLmZhci4iKSx0aGlzLnNoYWRvdy5jYW1lcmEuZmFyPXR9fSxzaGFkb3dDYW1lcmFWaXNpYmxlOntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhVmlzaWJsZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkNhbWVyYUhlbHBlciggbGlnaHQuc2hhZG93LmNhbWVyYSApIGluc3RlYWQuIil9fSxzaGFkb3dCaWFzOntzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0JpYXMgaXMgbm93IC5zaGFkb3cuYmlhcy4iKSx0aGlzLnNoYWRvdy5iaWFzPXR9fSxzaGFkb3dEYXJrbmVzczp7c2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0RhcmtuZXNzIGhhcyBiZWVuIHJlbW92ZWQuIil9fSxzaGFkb3dNYXBXaWR0aDp7c2V0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dNYXBXaWR0aCBpcyBub3cgLnNoYWRvdy5tYXBTaXplLndpZHRoLiIpLHRoaXMuc2hhZG93Lm1hcFNpemUud2lkdGg9dH19LHNoYWRvd01hcEhlaWdodDp7c2V0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dNYXBIZWlnaHQgaXMgbm93IC5zaGFkb3cubWFwU2l6ZS5oZWlnaHQuIiksdGhpcy5zaGFkb3cubWFwU2l6ZS5oZWlnaHQ9dH19fSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoYnp0LnByb3RvdHlwZSx7bGVuZ3RoOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5sZW5ndGggaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5jb3VudCBpbnN0ZWFkLiIpLHRoaXMuYXJyYXkubGVuZ3RofX0sZHluYW1pYzp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuZHluYW1pYyBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnVzYWdlIGluc3RlYWQuIiksdGhpcy51c2FnZT09PUxPdH0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5keW5hbWljIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudXNhZ2UgaW5zdGVhZC4iKSx0aGlzLnNldFVzYWdlKExPdCl9fX0pLE9iamVjdC5hc3NpZ24oYnp0LnByb3RvdHlwZSx7c2V0RHluYW1pYzpmdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5zZXREeW5hbWljKCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5zZXRVc2FnZSgpIGluc3RlYWQuIiksdGhpcy5zZXRVc2FnZSghMD09PXQ/TE90OmtPdCksdGhpc30sY29weUluZGljZXNBcnJheTpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLmNvcHlJbmRpY2VzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXRBcnJheTpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLnNldEFycmF5IGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBCdWZmZXJHZW9tZXRyeSAuc2V0QXR0cmlidXRlIHRvIHJlcGxhY2UvcmVzaXplIGF0dHJpYnV0ZSBidWZmZXJzIil9fSksT2JqZWN0LmFzc2lnbihWenQucHJvdG90eXBlLHthZGRJbmRleDpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkSW5kZXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRJbmRleCgpLiIpLHRoaXMuc2V0SW5kZXgodCl9LGFkZEF0dHJpYnV0ZTpmdW5jdGlvbih0LGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0QXR0cmlidXRlKCkuIiksZSYmZS5pc0J1ZmZlckF0dHJpYnV0ZXx8ZSYmZS5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlPyJpbmRleCI9PT10Pyhjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5LmFkZEF0dHJpYnV0ZTogVXNlIC5zZXRJbmRleCgpIGZvciBpbmRleCBhdHRyaWJ1dGUuIiksdGhpcy5zZXRJbmRleChlKSx0aGlzKTp0aGlzLnNldEF0dHJpYnV0ZSh0LGUpOihjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkQXR0cmlidXRlKCkgbm93IGV4cGVjdHMgKCBuYW1lLCBhdHRyaWJ1dGUgKS4iKSx0aGlzLnNldEF0dHJpYnV0ZSh0LG5ldyBienQoYXJndW1lbnRzWzFdLGFyZ3VtZW50c1syXSkpKX0sYWRkRHJhd0NhbGw6ZnVuY3Rpb24odCxlLG4pe3ZvaWQgMCE9PW4mJmNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGREcmF3Q2FsbCgpIG5vIGxvbmdlciBzdXBwb3J0cyBpbmRleE9mZnNldC4iKSxjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkRHJhd0NhbGwoKSBpcyBub3cgLmFkZEdyb3VwKCkuIiksdGhpcy5hZGRHcm91cCh0LGUpfSxjbGVhckRyYXdDYWxsczpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5jbGVhckRyYXdDYWxscygpIGlzIG5vdyAuY2xlYXJHcm91cHMoKS4iKSx0aGlzLmNsZWFyR3JvdXBzKCl9LGNvbXB1dGVPZmZzZXRzOmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmNvbXB1dGVPZmZzZXRzKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0scmVtb3ZlQXR0cmlidXRlOmZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAucmVtb3ZlQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZGVsZXRlQXR0cmlidXRlKCkuIiksdGhpcy5kZWxldGVBdHRyaWJ1dGUodCl9LGFwcGx5TWF0cml4OmZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYXBwbHlNYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5hcHBseU1hdHJpeDQoKS4iKSx0aGlzLmFwcGx5TWF0cml4NCh0KX19KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhWenQucHJvdG90eXBlLHtkcmF3Y2FsbHM6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLmVycm9yKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmRyYXdjYWxscyBoYXMgYmVlbiByZW5hbWVkIHRvIC5ncm91cHMuIiksdGhpcy5ncm91cHN9fSxvZmZzZXRzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLm9mZnNldHMgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ3JvdXBzLiIpLHRoaXMuZ3JvdXBzfX19KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhhanQucHJvdG90eXBlLHttYXhJbnN0YW5jZWRDb3VudDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnk6IC5tYXhJbnN0YW5jZWRDb3VudCBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnN0YW5jZUNvdW50LiIpLHRoaXMuaW5zdGFuY2VDb3VudH0sc2V0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnk6IC5tYXhJbnN0YW5jZWRDb3VudCBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnN0YW5jZUNvdW50LiIpLHRoaXMuaW5zdGFuY2VDb3VudD10fX19KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlR3QucHJvdG90eXBlLHtsaW5lUHJlY2lzaW9uOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5SYXljYXN0ZXI6IC5saW5lUHJlY2lzaW9uIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAucGFyYW1zLkxpbmUudGhyZXNob2xkIGluc3RlYWQuIiksdGhpcy5wYXJhbXMuTGluZS50aHJlc2hvbGR9LHNldDpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLlJheWNhc3RlcjogLmxpbmVQcmVjaXNpb24gaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5wYXJhbXMuTGluZS50aHJlc2hvbGQgaW5zdGVhZC4iKSx0aGlzLnBhcmFtcy5MaW5lLnRocmVzaG9sZD10fX19KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhJSHQucHJvdG90eXBlLHtkeW5hbWljOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5JbnRlcmxlYXZlZEJ1ZmZlcjogLmxlbmd0aCBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnVzYWdlIGluc3RlYWQuIiksdGhpcy51c2FnZT09PUxPdH0sc2V0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuSW50ZXJsZWF2ZWRCdWZmZXI6IC5sZW5ndGggaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC51c2FnZSBpbnN0ZWFkLiIpLHRoaXMuc2V0VXNhZ2UodCl9fX0pLE9iamVjdC5hc3NpZ24oSUh0LnByb3RvdHlwZSx7c2V0RHluYW1pYzpmdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5JbnRlcmxlYXZlZEJ1ZmZlcjogLnNldER5bmFtaWMoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnNldFVzYWdlKCkgaW5zdGVhZC4iKSx0aGlzLnNldFVzYWdlKCEwPT09dD9MT3Q6a090KSx0aGlzfSxzZXRBcnJheTpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkludGVybGVhdmVkQnVmZmVyOiAuc2V0QXJyYXkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEJ1ZmZlckdlb21ldHJ5IC5zZXRBdHRyaWJ1dGUgdG8gcmVwbGFjZS9yZXNpemUgYXR0cmlidXRlIGJ1ZmZlcnMiKX19KSxPYmplY3QuYXNzaWduKHhWdC5wcm90b3R5cGUse2dldEFycmF5czpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkV4dHJ1ZGVHZW9tZXRyeTogLmdldEFycmF5cygpIGhhcyBiZWVuIHJlbW92ZWQuIil9LGFkZFNoYXBlTGlzdDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkV4dHJ1ZGVHZW9tZXRyeTogLmFkZFNoYXBlTGlzdCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LGFkZFNoYXBlOmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuRXh0cnVkZUdlb21ldHJ5OiAuYWRkU2hhcGUoKSBoYXMgYmVlbiByZW1vdmVkLiIpfX0pLE9iamVjdC5hc3NpZ24oTkh0LnByb3RvdHlwZSx7ZGlzcG9zZTpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNjZW5lOiAuZGlzcG9zZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9fSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoSmp0LnByb3RvdHlwZSx7ZHluYW1pYzp7c2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5Vbmlmb3JtOiAuZHluYW1pYyBoYXMgYmVlbiByZW1vdmVkLiBVc2Ugb2JqZWN0Lm9uQmVmb3JlUmVuZGVyKCkgaW5zdGVhZC4iKX19LG9uVXBkYXRlOnt2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlVuaWZvcm06IC5vblVwZGF0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBvYmplY3Qub25CZWZvcmVSZW5kZXIoKSBpbnN0ZWFkLiIpLHRoaXN9fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGd6dC5wcm90b3R5cGUse3dyYXBBcm91bmQ6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC53cmFwQXJvdW5kIGhhcyBiZWVuIHJlbW92ZWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC53cmFwQXJvdW5kIGhhcyBiZWVuIHJlbW92ZWQuIil9fSxvdmVyZHJhdzp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRlcmlhbDogLm92ZXJkcmF3IGhhcyBiZWVuIHJlbW92ZWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC5vdmVyZHJhdyBoYXMgYmVlbiByZW1vdmVkLiIpfX0sd3JhcFJHQjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC53cmFwUkdCIGhhcyBiZWVuIHJlbW92ZWQuIiksbmV3IHB6dH19LHNoYWRpbmc6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zaGFkaW5nIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB0aGUgYm9vbGVhbiAuZmxhdFNoYWRpbmcgaW5zdGVhZC4iKX0sc2V0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnNoYWRpbmcgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHRoZSBib29sZWFuIC5mbGF0U2hhZGluZyBpbnN0ZWFkLiIpLHRoaXMuZmxhdFNoYWRpbmc9MT09PXR9fSxzdGVuY2lsTWFzazp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnN0ZW5jaWxNYXNrIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuc3RlbmNpbEZ1bmNNYXNrIGluc3RlYWQuIiksdGhpcy5zdGVuY2lsRnVuY01hc2t9LHNldDpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zdGVuY2lsTWFzayBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnN0ZW5jaWxGdW5jTWFzayBpbnN0ZWFkLiIpLHRoaXMuc3RlbmNpbEZ1bmNNYXNrPXR9fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFZWdC5wcm90b3R5cGUse21ldGFsOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NZXNoUGhvbmdNYXRlcmlhbDogLm1ldGFsIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5NZXNoU3RhbmRhcmRNYXRlcmlhbCBpbnN0ZWFkLiIpLCExfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1lc2hQaG9uZ01hdGVyaWFsOiAubWV0YWwgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLk1lc2hTdGFuZGFyZE1hdGVyaWFsIGluc3RlYWQiKX19fSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRlZ0LnByb3RvdHlwZSx7dHJhbnNwYXJlbmN5OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NZXNoUGh5c2ljYWxNYXRlcmlhbDogLnRyYW5zcGFyZW5jeSBoYXMgYmVlbiByZW5hbWVkIHRvIC50cmFuc21pc3Npb24uIiksdGhpcy50cmFuc21pc3Npb259LHNldDpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLk1lc2hQaHlzaWNhbE1hdGVyaWFsOiAudHJhbnNwYXJlbmN5IGhhcyBiZWVuIHJlbmFtZWQgdG8gLnRyYW5zbWlzc2lvbi4iKSx0aGlzLnRyYW5zbWlzc2lvbj10fX19KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhoRHQucHJvdG90eXBlLHtkZXJpdmF0aXZlczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuU2hhZGVyTWF0ZXJpYWw6IC5kZXJpdmF0aXZlcyBoYXMgYmVlbiBtb3ZlZCB0byAuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlcy4iKSx0aGlzLmV4dGVuc2lvbnMuZGVyaXZhdGl2ZXN9LHNldDpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLiBTaGFkZXJNYXRlcmlhbDogLmRlcml2YXRpdmVzIGhhcyBiZWVuIG1vdmVkIHRvIC5leHRlbnNpb25zLmRlcml2YXRpdmVzLiIpLHRoaXMuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlcz10fX19KSxPYmplY3QuYXNzaWduKEFIdC5wcm90b3R5cGUse2NsZWFyVGFyZ2V0OmZ1bmN0aW9uKHQsZSxuLGkpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmNsZWFyVGFyZ2V0KCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5zZXRSZW5kZXJUYXJnZXQoKSBhbmQgLmNsZWFyKCkgaW5zdGVhZC4iKSx0aGlzLnNldFJlbmRlclRhcmdldCh0KSx0aGlzLmNsZWFyKGUsbixpKX0sYW5pbWF0ZTpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5hbmltYXRlKCkgaXMgbm93IC5zZXRBbmltYXRpb25Mb29wKCkuIiksdGhpcy5zZXRBbmltYXRpb25Mb29wKHQpfSxnZXRDdXJyZW50UmVuZGVyVGFyZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdldEN1cnJlbnRSZW5kZXJUYXJnZXQoKSBpcyBub3cgLmdldFJlbmRlclRhcmdldCgpLiIpLHRoaXMuZ2V0UmVuZGVyVGFyZ2V0KCl9LGdldE1heEFuaXNvdHJvcHk6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2V0TWF4QW5pc290cm9weSgpIGlzIG5vdyAuY2FwYWJpbGl0aWVzLmdldE1heEFuaXNvdHJvcHkoKS4iKSx0aGlzLmNhcGFiaWxpdGllcy5nZXRNYXhBbmlzb3Ryb3B5KCl9LGdldFByZWNpc2lvbjpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRQcmVjaXNpb24oKSBpcyBub3cgLmNhcGFiaWxpdGllcy5wcmVjaXNpb24uIiksdGhpcy5jYXBhYmlsaXRpZXMucHJlY2lzaW9ufSxyZXNldEdMU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAucmVzZXRHTFN0YXRlKCkgaXMgbm93IC5zdGF0ZS5yZXNldCgpLiIpLHRoaXMuc3RhdGUucmVzZXQoKX0sc3VwcG9ydHNGbG9hdFRleHR1cmVzOmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzRmxvYXRUZXh0dXJlcygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdPRVNfdGV4dHVyZV9mbG9hdCcgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJPRVNfdGV4dHVyZV9mbG9hdCIpfSxzdXBwb3J0c0hhbGZGbG9hdFRleHR1cmVzOmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzSGFsZkZsb2F0VGV4dHVyZXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnT0VTX3RleHR1cmVfaGFsZl9mbG9hdCcgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0Iil9LHN1cHBvcnRzU3RhbmRhcmREZXJpdmF0aXZlczpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c1N0YW5kYXJkRGVyaXZhdGl2ZXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzJyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpfSxzdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlUzNUQzpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlUzNUQygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YycgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpfSxzdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlUFZSVEM6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZVBWUlRDKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YycgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKX0sc3VwcG9ydHNCbGVuZE1pbk1heDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0JsZW5kTWluTWF4KCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ0VYVF9ibGVuZF9taW5tYXgnICkuIiksdGhpcy5leHRlbnNpb25zLmdldCgiRVhUX2JsZW5kX21pbm1heCIpfSxzdXBwb3J0c1ZlcnRleFRleHR1cmVzOmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzVmVydGV4VGV4dHVyZXMoKSBpcyBub3cgLmNhcGFiaWxpdGllcy52ZXJ0ZXhUZXh0dXJlcy4iKSx0aGlzLmNhcGFiaWxpdGllcy52ZXJ0ZXhUZXh0dXJlc30sc3VwcG9ydHNJbnN0YW5jZWRBcnJheXM6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNJbnN0YW5jZWRBcnJheXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnQU5HTEVfaW5zdGFuY2VkX2FycmF5cycgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIil9LGVuYWJsZVNjaXNzb3JUZXN0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmVuYWJsZVNjaXNzb3JUZXN0KCkgaXMgbm93IC5zZXRTY2lzc29yVGVzdCgpLiIpLHRoaXMuc2V0U2Npc3NvclRlc3QodCl9LGluaXRNYXRlcmlhbDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmluaXRNYXRlcmlhbCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LGFkZFByZVBsdWdpbjpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmFkZFByZVBsdWdpbigpIGhhcyBiZWVuIHJlbW92ZWQuIil9LGFkZFBvc3RQbHVnaW46ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5hZGRQb3N0UGx1Z2luKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sdXBkYXRlU2hhZG93TWFwOmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAudXBkYXRlU2hhZG93TWFwKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sc2V0RmFjZUN1bGxpbmc6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRGYWNlQ3VsbGluZygpIGhhcyBiZWVuIHJlbW92ZWQuIil9LGFsbG9jVGV4dHVyZVVuaXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5hbGxvY1RleHR1cmVVbml0KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sc2V0VGV4dHVyZTpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNldFRleHR1cmUoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXRUZXh0dXJlMkQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRUZXh0dXJlMkQoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXRUZXh0dXJlQ3ViZTpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNldFRleHR1cmVDdWJlKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sZ2V0QWN0aXZlTWlwTWFwTGV2ZWw6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2V0QWN0aXZlTWlwTWFwTGV2ZWwoKSBpcyBub3cgLmdldEFjdGl2ZU1pcG1hcExldmVsKCkuIiksdGhpcy5nZXRBY3RpdmVNaXBtYXBMZXZlbCgpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEFIdC5wcm90b3R5cGUse3NoYWRvd01hcEVuYWJsZWQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNoYWRvd01hcC5lbmFibGVkfSxzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwRW5hYmxlZCBpcyBub3cgLnNoYWRvd01hcC5lbmFibGVkLiIpLHRoaXMuc2hhZG93TWFwLmVuYWJsZWQ9dH19LHNoYWRvd01hcFR5cGU6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNoYWRvd01hcC50eXBlfSxzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwVHlwZSBpcyBub3cgLnNoYWRvd01hcC50eXBlLiIpLHRoaXMuc2hhZG93TWFwLnR5cGU9dH19LHNoYWRvd01hcEN1bGxGYWNlOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBDdWxsRmFjZSBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBDdWxsRmFjZSBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfX0sY29udGV4dDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmNvbnRleHQgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5nZXRDb250ZXh0KCkgaW5zdGVhZC4iKSx0aGlzLmdldENvbnRleHQoKX19LHZyOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAudnIgaGFzIGJlZW4gcmVuYW1lZCB0byAueHIiKSx0aGlzLnhyfX0sZ2FtbWFJbnB1dDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hSW5wdXQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IHRoZSBlbmNvZGluZyBmb3IgdGV4dHVyZXMgdmlhIFRleHR1cmUuZW5jb2RpbmcgaW5zdGVhZC4iKSwhMX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFJbnB1dCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgdGhlIGVuY29kaW5nIGZvciB0ZXh0dXJlcyB2aWEgVGV4dHVyZS5lbmNvZGluZyBpbnN0ZWFkLiIpfX0sZ2FtbWFPdXRwdXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYU91dHB1dCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgV2ViR0xSZW5kZXJlci5vdXRwdXRFbmNvZGluZyBpbnN0ZWFkLiIpLCExfSxzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFPdXRwdXQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IFdlYkdMUmVuZGVyZXIub3V0cHV0RW5jb2RpbmcgaW5zdGVhZC4iKSx0aGlzLm91dHB1dEVuY29kaW5nPSEwPT09dD93T3Q6eE90fX0sdG9uZU1hcHBpbmdXaGl0ZVBvaW50OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAudG9uZU1hcHBpbmdXaGl0ZVBvaW50IGhhcyBiZWVuIHJlbW92ZWQuIiksMX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAudG9uZU1hcHBpbmdXaGl0ZVBvaW50IGhhcyBiZWVuIHJlbW92ZWQuIil9fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHZIdC5wcm90b3R5cGUse2N1bGxGYWNlOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAuY3VsbEZhY2UgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLmN1bGxGYWNlIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9fSxyZW5kZXJSZXZlcnNlU2lkZWQ6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5yZW5kZXJSZXZlcnNlU2lkZWQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLnJlbmRlclJldmVyc2VTaWRlZCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfX0scmVuZGVyU2luZ2xlU2lkZWQ6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5yZW5kZXJTaW5nbGVTaWRlZCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAucmVuZGVyU2luZ2xlU2lkZWQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX19fSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoR090LnByb3RvdHlwZSx7d3JhcFM6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFMgaXMgbm93IC50ZXh0dXJlLndyYXBTLiIpLHRoaXMudGV4dHVyZS53cmFwU30sc2V0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwUyBpcyBub3cgLnRleHR1cmUud3JhcFMuIiksdGhpcy50ZXh0dXJlLndyYXBTPXR9fSx3cmFwVDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwVCBpcyBub3cgLnRleHR1cmUud3JhcFQuIiksdGhpcy50ZXh0dXJlLndyYXBUfSxzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLndyYXBUIGlzIG5vdyAudGV4dHVyZS53cmFwVC4iKSx0aGlzLnRleHR1cmUud3JhcFQ9dH19LG1hZ0ZpbHRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5tYWdGaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1hZ0ZpbHRlci4iKSx0aGlzLnRleHR1cmUubWFnRmlsdGVyfSxzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm1hZ0ZpbHRlciBpcyBub3cgLnRleHR1cmUubWFnRmlsdGVyLiIpLHRoaXMudGV4dHVyZS5tYWdGaWx0ZXI9dH19LG1pbkZpbHRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5taW5GaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1pbkZpbHRlci4iKSx0aGlzLnRleHR1cmUubWluRmlsdGVyfSxzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm1pbkZpbHRlciBpcyBub3cgLnRleHR1cmUubWluRmlsdGVyLiIpLHRoaXMudGV4dHVyZS5taW5GaWx0ZXI9dH19LGFuaXNvdHJvcHk6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuYW5pc290cm9weSBpcyBub3cgLnRleHR1cmUuYW5pc290cm9weS4iKSx0aGlzLnRleHR1cmUuYW5pc290cm9weX0sc2V0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5hbmlzb3Ryb3B5IGlzIG5vdyAudGV4dHVyZS5hbmlzb3Ryb3B5LiIpLHRoaXMudGV4dHVyZS5hbmlzb3Ryb3B5PXR9fSxvZmZzZXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAub2Zmc2V0IGlzIG5vdyAudGV4dHVyZS5vZmZzZXQuIiksdGhpcy50ZXh0dXJlLm9mZnNldH0sc2V0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5vZmZzZXQgaXMgbm93IC50ZXh0dXJlLm9mZnNldC4iKSx0aGlzLnRleHR1cmUub2Zmc2V0PXR9fSxyZXBlYXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAucmVwZWF0IGlzIG5vdyAudGV4dHVyZS5yZXBlYXQuIiksdGhpcy50ZXh0dXJlLnJlcGVhdH0sc2V0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5yZXBlYXQgaXMgbm93IC50ZXh0dXJlLnJlcGVhdC4iKSx0aGlzLnRleHR1cmUucmVwZWF0PXR9fSxmb3JtYXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuZm9ybWF0IGlzIG5vdyAudGV4dHVyZS5mb3JtYXQuIiksdGhpcy50ZXh0dXJlLmZvcm1hdH0sc2V0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5mb3JtYXQgaXMgbm93IC50ZXh0dXJlLmZvcm1hdC4iKSx0aGlzLnRleHR1cmUuZm9ybWF0PXR9fSx0eXBlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnR5cGUgaXMgbm93IC50ZXh0dXJlLnR5cGUuIiksdGhpcy50ZXh0dXJlLnR5cGV9LHNldDpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAudHlwZSBpcyBub3cgLnRleHR1cmUudHlwZS4iKSx0aGlzLnRleHR1cmUudHlwZT10fX0sZ2VuZXJhdGVNaXBtYXBzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmdlbmVyYXRlTWlwbWFwcyBpcyBub3cgLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzLiIpLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHN9LHNldDpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuZ2VuZXJhdGVNaXBtYXBzIGlzIG5vdyAudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHMuIiksdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz10fX19KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhQanQucHJvdG90eXBlLHtsb2FkOnt2YWx1ZTpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiAubG9hZCBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuQXVkaW9Mb2FkZXIgaW5zdGVhZC4iKTtjb25zdCBlPXRoaXM7cmV0dXJuKG5ldyB2anQpLmxvYWQodCwoZnVuY3Rpb24odCl7ZS5zZXRCdWZmZXIodCl9KSksdGhpc319LHN0YXJ0VGltZTp7c2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogLnN0YXJ0VGltZSBpcyBub3cgLnBsYXkoIGRlbGF5ICkuIil9fX0pLHpqdC5wcm90b3R5cGUuZ2V0RGF0YT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvQW5hbHlzZXI6IC5nZXREYXRhKCkgaXMgbm93IC5nZXRGcmVxdWVuY3lEYXRhKCkuIiksdGhpcy5nZXRGcmVxdWVuY3lEYXRhKCl9LG1EdC5wcm90b3R5cGUudXBkYXRlQ3ViZU1hcD1mdW5jdGlvbih0LGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkN1YmVDYW1lcmE6IC51cGRhdGVDdWJlTWFwKCkgaXMgbm93IC51cGRhdGUoKS4iKSx0aGlzLnVwZGF0ZSh0LGUpfSxtRHQucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKHQsZSxuLGkpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkN1YmVDYW1lcmE6IC5jbGVhcigpIGlzIG5vdyAucmVuZGVyVGFyZ2V0LmNsZWFyKCkuIiksdGhpcy5yZW5kZXJUYXJnZXQuY2xlYXIodCxlLG4saSl9O2NvbnN0IHNXdD17bWVyZ2U6ZnVuY3Rpb24odCxlLG4pe2xldCBpO2NvbnNvbGUud2FybigiVEhSRUUuR2VvbWV0cnlVdGlsczogLm1lcmdlKCkgaGFzIGJlZW4gbW92ZWQgdG8gR2VvbWV0cnkuIFVzZSBnZW9tZXRyeS5tZXJnZSggZ2VvbWV0cnkyLCBtYXRyaXgsIG1hdGVyaWFsSW5kZXhPZmZzZXQgKSBpbnN0ZWFkLiIpLGUuaXNNZXNoJiYoZS5tYXRyaXhBdXRvVXBkYXRlJiZlLnVwZGF0ZU1hdHJpeCgpLGk9ZS5tYXRyaXgsZT1lLmdlb21ldHJ5KSx0Lm1lcmdlKGUsaSxuKX0sY2VudGVyOmZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkdlb21ldHJ5VXRpbHM6IC5jZW50ZXIoKSBoYXMgYmVlbiBtb3ZlZCB0byBHZW9tZXRyeS4gVXNlIGdlb21ldHJ5LmNlbnRlcigpIGluc3RlYWQuIiksdC5jZW50ZXIoKX19O0hPdC5jcm9zc09yaWdpbj12b2lkIDAsSE90LmxvYWRUZXh0dXJlPWZ1bmN0aW9uKHQsZSxuLGkpe2NvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5sb2FkVGV4dHVyZSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuVGV4dHVyZUxvYWRlcigpIGluc3RlYWQuIik7Y29uc3Qgcj1uZXcgYlV0O3Iuc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbik7Y29uc3Qgbz1yLmxvYWQodCxuLHZvaWQgMCxpKTtyZXR1cm4gZSYmKG8ubWFwcGluZz1lKSxvfSxIT3QubG9hZFRleHR1cmVDdWJlPWZ1bmN0aW9uKHQsZSxuLGkpe2NvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5sb2FkVGV4dHVyZUN1YmUgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLkN1YmVUZXh0dXJlTG9hZGVyKCkgaW5zdGVhZC4iKTtjb25zdCByPW5ldyB5VXQ7ci5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKTtjb25zdCBvPXIubG9hZCh0LG4sdm9pZCAwLGkpO3JldHVybiBlJiYoby5tYXBwaW5nPWUpLG99LEhPdC5sb2FkQ29tcHJlc3NlZFRleHR1cmU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRDb21wcmVzc2VkVGV4dHVyZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuRERTTG9hZGVyIGluc3RlYWQuIil9LEhPdC5sb2FkQ29tcHJlc3NlZFRleHR1cmVDdWJlPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuSW1hZ2VVdGlscy5sb2FkQ29tcHJlc3NlZFRleHR1cmVDdWJlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5ERFNMb2FkZXIgaW5zdGVhZC4iKX07Y29uc3QgbFd0PXtjcmVhdGVNdWx0aU1hdGVyaWFsT2JqZWN0OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuU2NlbmVVdGlscyBoYXMgYmVlbiBtb3ZlZCB0byAvZXhhbXBsZXMvanNtL3V0aWxzL1NjZW5lVXRpbHMuanMiKX0sZGV0YWNoOmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuU2NlbmVVdGlscyBoYXMgYmVlbiBtb3ZlZCB0byAvZXhhbXBsZXMvanNtL3V0aWxzL1NjZW5lVXRpbHMuanMiKX0sYXR0YWNoOmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuU2NlbmVVdGlscyBoYXMgYmVlbiBtb3ZlZCB0byAvZXhhbXBsZXMvanNtL3V0aWxzL1NjZW5lVXRpbHMuanMiKX19OyJ1bmRlZmluZWQiIT10eXBlb2YgX19USFJFRV9ERVZUT09MU19fJiZfX1RIUkVFX0RFVlRPT0xTX18uZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInJlZ2lzdGVyIix7ZGV0YWlsOntyZXZpc2lvbjpDSXR9fSkpLCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiYod2luZG93Ll9fVEhSRUVfXz9jb25zb2xlLndhcm4oIldBUk5JTkc6IE11bHRpcGxlIGluc3RhbmNlcyBvZiBUaHJlZS5qcyBiZWluZyBpbXBvcnRlZC4iKTp3aW5kb3cuX19USFJFRV9fPUNJdCk7dmFyIGNXdD1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxBQ0VTRmlsbWljVG9uZU1hcHBpbmc6NCxBZGRFcXVhdGlvbjpMSXQsQWRkT3BlcmF0aW9uOjIsQWRkaXRpdmVBbmltYXRpb25CbGVuZE1vZGU6Yk90LEFkZGl0aXZlQmxlbmRpbmc6MixBbHBoYUZvcm1hdDoxMDIxLEFsd2F5c0RlcHRoOjEsQWx3YXlzU3RlbmNpbEZ1bmM6NTE5LEFtYmllbnRMaWdodDp0anQsQW1iaWVudExpZ2h0UHJvYmU6eGp0LEFuaW1hdGlvbkNsaXA6c1V0LEFuaW1hdGlvbkxvYWRlcjptVXQsQW5pbWF0aW9uTWl4ZXI6Wmp0LEFuaW1hdGlvbk9iamVjdEdyb3VwOiRqdCxBbmltYXRpb25VdGlsczpYVnQsQXJjQ3VydmU6U1V0LEFycmF5Q2FtZXJhOlNIdCxBcnJvd0hlbHBlcjpjbGFzcyBleHRlbmRzIFdSdHtjb25zdHJ1Y3Rvcih0LGUsbixpLHIsbyl7c3VwZXIoKSx0aGlzLnR5cGU9IkFycm93SGVscGVyIix2b2lkIDA9PT10JiYodD1uZXcgcU90KDAsMCwxKSksdm9pZCAwPT09ZSYmKGU9bmV3IHFPdCgwLDAsMCkpLHZvaWQgMD09PW4mJihuPTEpLHZvaWQgMD09PWkmJihpPTE2Nzc2OTYwKSx2b2lkIDA9PT1yJiYocj0uMipuKSx2b2lkIDA9PT1vJiYobz0uMipyKSx2b2lkIDA9PT1MR3QmJihMR3Q9bmV3IFZ6dCxMR3Quc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGt6dChbMCwwLDAsMCwxLDBdLDMpKSxQR3Q9bmV3IEhGdCgwLC41LDEsNSwxKSxQR3QudHJhbnNsYXRlKDAsLS41LDApKSx0aGlzLnBvc2l0aW9uLmNvcHkoZSksdGhpcy5saW5lPW5ldyB3RnQoTEd0LG5ldyBnRnQoe2NvbG9yOmksdG9uZU1hcHBlZDohMX0pKSx0aGlzLmxpbmUubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLmFkZCh0aGlzLmxpbmUpLHRoaXMuY29uZT1uZXcgb0R0KFBHdCxuZXcgX3p0KHtjb2xvcjppLHRvbmVNYXBwZWQ6ITF9KSksdGhpcy5jb25lLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5hZGQodGhpcy5jb25lKSx0aGlzLnNldERpcmVjdGlvbih0KSx0aGlzLnNldExlbmd0aChuLHIsbyl9c2V0RGlyZWN0aW9uKHQpe2lmKHQueT4uOTk5OTkpdGhpcy5xdWF0ZXJuaW9uLnNldCgwLDAsMCwxKTtlbHNlIGlmKHQueTwtLjk5OTk5KXRoaXMucXVhdGVybmlvbi5zZXQoMSwwLDAsMCk7ZWxzZXtrR3Quc2V0KHQueiwwLC10LngpLm5vcm1hbGl6ZSgpO2NvbnN0IGU9TWF0aC5hY29zKHQueSk7dGhpcy5xdWF0ZXJuaW9uLnNldEZyb21BeGlzQW5nbGUoa0d0LGUpfX1zZXRMZW5ndGgodCxlLG4pe3ZvaWQgMD09PWUmJihlPS4yKnQpLHZvaWQgMD09PW4mJihuPS4yKmUpLHRoaXMubGluZS5zY2FsZS5zZXQoMSxNYXRoLm1heCgxZS00LHQtZSksMSksdGhpcy5saW5lLnVwZGF0ZU1hdHJpeCgpLHRoaXMuY29uZS5zY2FsZS5zZXQobixlLG4pLHRoaXMuY29uZS5wb3NpdGlvbi55PXQsdGhpcy5jb25lLnVwZGF0ZU1hdHJpeCgpfXNldENvbG9yKHQpe3RoaXMubGluZS5tYXRlcmlhbC5jb2xvci5zZXQodCksdGhpcy5jb25lLm1hdGVyaWFsLmNvbG9yLnNldCh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQsITEpLHRoaXMubGluZS5jb3B5KHQubGluZSksdGhpcy5jb25lLmNvcHkodC5jb25lKSx0aGlzfX0sQXVkaW86UGp0LEF1ZGlvQW5hbHlzZXI6emp0LEF1ZGlvQ29udGV4dDp5anQsQXVkaW9MaXN0ZW5lcjpjbGFzcyBleHRlbmRzIFdSdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy50eXBlPSJBdWRpb0xpc3RlbmVyIix0aGlzLmNvbnRleHQ9eWp0LmdldENvbnRleHQoKSx0aGlzLmdhaW49dGhpcy5jb250ZXh0LmNyZWF0ZUdhaW4oKSx0aGlzLmdhaW4uY29ubmVjdCh0aGlzLmNvbnRleHQuZGVzdGluYXRpb24pLHRoaXMuZmlsdGVyPW51bGwsdGhpcy50aW1lRGVsdGE9MCx0aGlzLl9jbG9jaz1uZXcgRWp0fWdldElucHV0KCl7cmV0dXJuIHRoaXMuZ2Fpbn1yZW1vdmVGaWx0ZXIoKXtyZXR1cm4gbnVsbCE9PXRoaXMuZmlsdGVyJiYodGhpcy5nYWluLmRpc2Nvbm5lY3QodGhpcy5maWx0ZXIpLHRoaXMuZmlsdGVyLmRpc2Nvbm5lY3QodGhpcy5jb250ZXh0LmRlc3RpbmF0aW9uKSx0aGlzLmdhaW4uY29ubmVjdCh0aGlzLmNvbnRleHQuZGVzdGluYXRpb24pLHRoaXMuZmlsdGVyPW51bGwpLHRoaXN9Z2V0RmlsdGVyKCl7cmV0dXJuIHRoaXMuZmlsdGVyfXNldEZpbHRlcih0KXtyZXR1cm4gbnVsbCE9PXRoaXMuZmlsdGVyPyh0aGlzLmdhaW4uZGlzY29ubmVjdCh0aGlzLmZpbHRlciksdGhpcy5maWx0ZXIuZGlzY29ubmVjdCh0aGlzLmNvbnRleHQuZGVzdGluYXRpb24pKTp0aGlzLmdhaW4uZGlzY29ubmVjdCh0aGlzLmNvbnRleHQuZGVzdGluYXRpb24pLHRoaXMuZmlsdGVyPXQsdGhpcy5nYWluLmNvbm5lY3QodGhpcy5maWx0ZXIpLHRoaXMuZmlsdGVyLmNvbm5lY3QodGhpcy5jb250ZXh0LmRlc3RpbmF0aW9uKSx0aGlzfWdldE1hc3RlclZvbHVtZSgpe3JldHVybiB0aGlzLmdhaW4uZ2Fpbi52YWx1ZX1zZXRNYXN0ZXJWb2x1bWUodCl7cmV0dXJuIHRoaXMuZ2Fpbi5nYWluLnNldFRhcmdldEF0VGltZSh0LHRoaXMuY29udGV4dC5jdXJyZW50VGltZSwuMDEpLHRoaXN9dXBkYXRlTWF0cml4V29ybGQodCl7c3VwZXIudXBkYXRlTWF0cml4V29ybGQodCk7Y29uc3QgZT10aGlzLmNvbnRleHQubGlzdGVuZXIsbj10aGlzLnVwO2lmKHRoaXMudGltZURlbHRhPXRoaXMuX2Nsb2NrLmdldERlbHRhKCksdGhpcy5tYXRyaXhXb3JsZC5kZWNvbXBvc2UoQ2p0LEFqdCxranQpLExqdC5zZXQoMCwwLC0xKS5hcHBseVF1YXRlcm5pb24oQWp0KSxlLnBvc2l0aW9uWCl7Y29uc3QgdD10aGlzLmNvbnRleHQuY3VycmVudFRpbWUrdGhpcy50aW1lRGVsdGE7ZS5wb3NpdGlvblgubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoQ2p0LngsdCksZS5wb3NpdGlvblkubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoQ2p0LnksdCksZS5wb3NpdGlvbloubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoQ2p0LnosdCksZS5mb3J3YXJkWC5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZShManQueCx0KSxlLmZvcndhcmRZLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKExqdC55LHQpLGUuZm9yd2FyZFoubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoTGp0LnosdCksZS51cFgubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUobi54LHQpLGUudXBZLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKG4ueSx0KSxlLnVwWi5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZShuLnosdCl9ZWxzZSBlLnNldFBvc2l0aW9uKENqdC54LENqdC55LENqdC56KSxlLnNldE9yaWVudGF0aW9uKExqdC54LExqdC55LExqdC56LG4ueCxuLnksbi56KX19LEF1ZGlvTG9hZGVyOnZqdCxBeGVzSGVscGVyOk5HdCxBeGlzSGVscGVyOmZ1bmN0aW9uIHVXdCh0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5BeGlzSGVscGVyIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuQXhlc0hlbHBlci4iKSxuZXcgTkd0KHQpfSxCYWNrU2lkZToxLEJhc2ljRGVwdGhQYWNraW5nOjMyMDAsQmFzaWNTaGFkb3dNYXA6MCxCaW5hcnlUZXh0dXJlTG9hZGVyOmZ1bmN0aW9uIGhXdCh0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CaW5hcnlUZXh0dXJlTG9hZGVyIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuRGF0YVRleHR1cmVMb2FkZXIuIiksbmV3IHZVdCh0KX0sQm9uZTpzRnQsQm9vbGVhbktleWZyYW1lVHJhY2s6dFV0LEJvdW5kaW5nQm94SGVscGVyOmZ1bmN0aW9uIGRXdCh0LGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJvdW5kaW5nQm94SGVscGVyIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIENyZWF0aW5nIGEgVEhSRUUuQm94SGVscGVyIGluc3RlYWQuIiksbmV3IEFHdCh0LGUpfSxCb3gyOmFHdCxCb3gzOiRPdCxCb3gzSGVscGVyOmNsYXNzIGV4dGVuZHMgRUZ0e2NvbnN0cnVjdG9yKHQsZT0xNjc3Njk2MCl7Y29uc3Qgbj1uZXcgVWludDE2QXJyYXkoWzAsMSwxLDIsMiwzLDMsMCw0LDUsNSw2LDYsNyw3LDQsMCw0LDEsNSwyLDYsMyw3XSksaT1uZXcgVnp0O2kuc2V0SW5kZXgobmV3IGJ6dChuLDEpKSxpLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBrenQoWzEsMSwxLC0xLDEsMSwtMSwtMSwxLDEsLTEsMSwxLDEsLTEsLTEsMSwtMSwtMSwtMSwtMSwxLC0xLC0xXSwzKSksc3VwZXIoaSxuZXcgZ0Z0KHtjb2xvcjplLHRvbmVNYXBwZWQ6ITF9KSksdGhpcy5ib3g9dCx0aGlzLnR5cGU9IkJveDNIZWxwZXIiLHRoaXMuZ2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCl9dXBkYXRlTWF0cml4V29ybGQodCl7Y29uc3QgZT10aGlzLmJveDtlLmlzRW1wdHkoKXx8KGUuZ2V0Q2VudGVyKHRoaXMucG9zaXRpb24pLGUuZ2V0U2l6ZSh0aGlzLnNjYWxlKSx0aGlzLnNjYWxlLm11bHRpcGx5U2NhbGFyKC41KSxzdXBlci51cGRhdGVNYXRyaXhXb3JsZCh0KSl9fSxCb3hCdWZmZXJHZW9tZXRyeTpzRHQsQm94R2VvbWV0cnk6c0R0LEJveEhlbHBlcjpBR3QsQnVmZmVyQXR0cmlidXRlOmJ6dCxCdWZmZXJHZW9tZXRyeTpWenQsQnVmZmVyR2VvbWV0cnlMb2FkZXI6bGp0LEJ5dGVUeXBlOjEwMTAsQ2FjaGU6Y1V0LENhbWVyYTpkRHQsQ2FtZXJhSGVscGVyOmNsYXNzIGV4dGVuZHMgRUZ0e2NvbnN0cnVjdG9yKHQpe2NvbnN0IGU9bmV3IFZ6dCxuPW5ldyBnRnQoe2NvbG9yOjE2Nzc3MjE1LHZlcnRleENvbG9yczohMCx0b25lTWFwcGVkOiExfSksaT1bXSxyPVtdLG89e30sYT1uZXcgcHp0KDE2NzU1MjAwKSxzPW5ldyBwenQoMTY3MTE2ODApLGw9bmV3IHB6dCg0Mzc3NSksYz1uZXcgcHp0KDE2Nzc3MjE1KSx1PW5ldyBwenQoMzM1NTQ0Myk7ZnVuY3Rpb24gaCh0LGUsbil7ZCh0LG4pLGQoZSxuKX1mdW5jdGlvbiBkKHQsZSl7aS5wdXNoKDAsMCwwKSxyLnB1c2goZS5yLGUuZyxlLmIpLHZvaWQgMD09PW9bdF0mJihvW3RdPVtdKSxvW3RdLnB1c2goaS5sZW5ndGgvMy0xKX1oKCJuMSIsIm4yIixhKSxoKCJuMiIsIm40IixhKSxoKCJuNCIsIm4zIixhKSxoKCJuMyIsIm4xIixhKSxoKCJmMSIsImYyIixhKSxoKCJmMiIsImY0IixhKSxoKCJmNCIsImYzIixhKSxoKCJmMyIsImYxIixhKSxoKCJuMSIsImYxIixhKSxoKCJuMiIsImYyIixhKSxoKCJuMyIsImYzIixhKSxoKCJuNCIsImY0IixhKSxoKCJwIiwibjEiLHMpLGgoInAiLCJuMiIscyksaCgicCIsIm4zIixzKSxoKCJwIiwibjQiLHMpLGgoInUxIiwidTIiLGwpLGgoInUyIiwidTMiLGwpLGgoInUzIiwidTEiLGwpLGgoImMiLCJ0IixjKSxoKCJwIiwiYyIsdSksaCgiY24xIiwiY24yIix1KSxoKCJjbjMiLCJjbjQiLHUpLGgoImNmMSIsImNmMiIsdSksaCgiY2YzIiwiY2Y0Iix1KSxlLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBrenQoaSwzKSksZS5zZXRBdHRyaWJ1dGUoImNvbG9yIixuZXcga3p0KHIsMykpLHN1cGVyKGUsbiksdGhpcy50eXBlPSJDYW1lcmFIZWxwZXIiLHRoaXMuY2FtZXJhPXQsdGhpcy5jYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCYmdGhpcy5jYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpLHRoaXMubWF0cml4PXQubWF0cml4V29ybGQsdGhpcy5tYXRyaXhBdXRvVXBkYXRlPSExLHRoaXMucG9pbnRNYXA9byx0aGlzLnVwZGF0ZSgpfXVwZGF0ZSgpe2NvbnN0IHQ9dGhpcy5nZW9tZXRyeSxlPXRoaXMucG9pbnRNYXA7RUd0LnByb2plY3Rpb25NYXRyaXhJbnZlcnNlLmNvcHkodGhpcy5jYW1lcmEucHJvamVjdGlvbk1hdHJpeEludmVyc2UpLFRHdCgiYyIsZSx0LEVHdCwwLDAsLTEpLFRHdCgidCIsZSx0LEVHdCwwLDAsMSksVEd0KCJuMSIsZSx0LEVHdCwtMSwtMSwtMSksVEd0KCJuMiIsZSx0LEVHdCwxLC0xLC0xKSxUR3QoIm4zIixlLHQsRUd0LC0xLDEsLTEpLFRHdCgibjQiLGUsdCxFR3QsMSwxLC0xKSxUR3QoImYxIixlLHQsRUd0LC0xLC0xLDEpLFRHdCgiZjIiLGUsdCxFR3QsMSwtMSwxKSxUR3QoImYzIixlLHQsRUd0LC0xLDEsMSksVEd0KCJmNCIsZSx0LEVHdCwxLDEsMSksVEd0KCJ1MSIsZSx0LEVHdCwuNywxLjEsLTEpLFRHdCgidTIiLGUsdCxFR3QsLS43LDEuMSwtMSksVEd0KCJ1MyIsZSx0LEVHdCwwLDIsLTEpLFRHdCgiY2YxIixlLHQsRUd0LC0xLDAsMSksVEd0KCJjZjIiLGUsdCxFR3QsMSwwLDEpLFRHdCgiY2YzIixlLHQsRUd0LDAsLTEsMSksVEd0KCJjZjQiLGUsdCxFR3QsMCwxLDEpLFRHdCgiY24xIixlLHQsRUd0LC0xLDAsLTEpLFRHdCgiY24yIixlLHQsRUd0LDEsMCwtMSksVEd0KCJjbjMiLGUsdCxFR3QsMCwtMSwtMSksVEd0KCJjbjQiLGUsdCxFR3QsMCwxLC0xKSx0LmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKS5uZWVkc1VwZGF0ZT0hMH19LENhbnZhc1JlbmRlcmVyOmZ1bmN0aW9uIHBXdCgpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkNhbnZhc1JlbmRlcmVyIGhhcyBiZWVuIHJlbW92ZWQiKX0sQ2FudmFzVGV4dHVyZTp6RnQsQ2F0bXVsbFJvbUN1cnZlMzprVXQsQ2luZW9uVG9uZU1hcHBpbmc6MyxDaXJjbGVCdWZmZXJHZW9tZXRyeTpCRnQsQ2lyY2xlR2VvbWV0cnk6QkZ0LENsYW1wVG9FZGdlV3JhcHBpbmc6SEl0LENsb2NrOkVqdCxDbG9zZWRTcGxpbmVDdXJ2ZTM6cld0LENvbG9yOnB6dCxDb2xvcktleWZyYW1lVHJhY2s6ZVV0LENvbXByZXNzZWRUZXh0dXJlOlJGdCxDb21wcmVzc2VkVGV4dHVyZUxvYWRlcjpnVXQsQ29uZUJ1ZmZlckdlb21ldHJ5OkZGdCxDb25lR2VvbWV0cnk6RkZ0LEN1YmVDYW1lcmE6bUR0LEN1YmVSZWZsZWN0aW9uTWFwcGluZzpOSXQsQ3ViZVJlZnJhY3Rpb25NYXBwaW5nOklJdCxDdWJlVGV4dHVyZTpnRHQsQ3ViZVRleHR1cmVMb2FkZXI6eVV0LEN1YmVVVlJlZmxlY3Rpb25NYXBwaW5nOnpJdCxDdWJlVVZSZWZyYWN0aW9uTWFwcGluZzpESXQsQ3ViaWNCZXppZXJDdXJ2ZTpJVXQsQ3ViaWNCZXppZXJDdXJ2ZTM6T1V0LEN1YmljSW50ZXJwb2xhbnQ6S1Z0LEN1bGxGYWNlQmFjazoxLEN1bGxGYWNlRnJvbnQ6MixDdWxsRmFjZUZyb250QmFjazozLEN1bGxGYWNlTm9uZTowLEN1cnZlOnhVdCxDdXJ2ZVBhdGg6VlV0LEN1c3RvbUJsZW5kaW5nOjUsQ3VzdG9tVG9uZU1hcHBpbmc6NSxDeWxpbmRlckJ1ZmZlckdlb21ldHJ5OkhGdCxDeWxpbmRlckdlb21ldHJ5OkhGdCxDeWxpbmRyaWNhbDpjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsbil7cmV0dXJuIHRoaXMucmFkaXVzPXZvaWQgMCE9PXQ/dDoxLHRoaXMudGhldGE9dm9pZCAwIT09ZT9lOjAsdGhpcy55PXZvaWQgMCE9PW4/bjowLHRoaXN9c2V0KHQsZSxuKXtyZXR1cm4gdGhpcy5yYWRpdXM9dCx0aGlzLnRoZXRhPWUsdGhpcy55PW4sdGhpc31jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLnJhZGl1cz10LnJhZGl1cyx0aGlzLnRoZXRhPXQudGhldGEsdGhpcy55PXQueSx0aGlzfXNldEZyb21WZWN0b3IzKHQpe3JldHVybiB0aGlzLnNldEZyb21DYXJ0ZXNpYW5Db29yZHModC54LHQueSx0LnopfXNldEZyb21DYXJ0ZXNpYW5Db29yZHModCxlLG4pe3JldHVybiB0aGlzLnJhZGl1cz1NYXRoLnNxcnQodCp0K24qbiksdGhpcy50aGV0YT1NYXRoLmF0YW4yKHQsbiksdGhpcy55PWUsdGhpc319LERhdGFUZXh0dXJlOnlEdCxEYXRhVGV4dHVyZTJEQXJyYXk6VUR0LERhdGFUZXh0dXJlM0Q6akR0LERhdGFUZXh0dXJlTG9hZGVyOnZVdCxEYXRhVXRpbHM6Ukd0LERlY3JlbWVudFN0ZW5jaWxPcDo3NjgzLERlY3JlbWVudFdyYXBTdGVuY2lsT3A6MzQwNTYsRGVmYXVsdExvYWRpbmdNYW5hZ2VyOmhVdCxEZXB0aEZvcm1hdDplT3QsRGVwdGhTdGVuY2lsRm9ybWF0Om5PdCxEZXB0aFRleHR1cmU6REZ0LERpcmVjdGlvbmFsTGlnaHQ6UVV0LERpcmVjdGlvbmFsTGlnaHRIZWxwZXI6Y2xhc3MgZXh0ZW5kcyBXUnR7Y29uc3RydWN0b3IodCxlLG4pe3N1cGVyKCksdGhpcy5saWdodD10LHRoaXMubGlnaHQudXBkYXRlTWF0cml4V29ybGQoKSx0aGlzLm1hdHJpeD10Lm1hdHJpeFdvcmxkLHRoaXMubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLmNvbG9yPW4sdm9pZCAwPT09ZSYmKGU9MSk7bGV0IGk9bmV3IFZ6dDtpLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBrenQoWy1lLGUsMCxlLGUsMCxlLC1lLDAsLWUsLWUsMCwtZSxlLDBdLDMpKTtjb25zdCByPW5ldyBnRnQoe2ZvZzohMSx0b25lTWFwcGVkOiExfSk7dGhpcy5saWdodFBsYW5lPW5ldyB3RnQoaSxyKSx0aGlzLmFkZCh0aGlzLmxpZ2h0UGxhbmUpLGk9bmV3IFZ6dCxpLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBrenQoWzAsMCwwLDAsMCwxXSwzKSksdGhpcy50YXJnZXRMaW5lPW5ldyB3RnQoaSxyKSx0aGlzLmFkZCh0aGlzLnRhcmdldExpbmUpLHRoaXMudXBkYXRlKCl9ZGlzcG9zZSgpe3RoaXMubGlnaHRQbGFuZS5nZW9tZXRyeS5kaXNwb3NlKCksdGhpcy5saWdodFBsYW5lLm1hdGVyaWFsLmRpc3Bvc2UoKSx0aGlzLnRhcmdldExpbmUuZ2VvbWV0cnkuZGlzcG9zZSgpLHRoaXMudGFyZ2V0TGluZS5tYXRlcmlhbC5kaXNwb3NlKCl9dXBkYXRlKCl7eEd0LnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLmxpZ2h0Lm1hdHJpeFdvcmxkKSx3R3Quc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubGlnaHQudGFyZ2V0Lm1hdHJpeFdvcmxkKSxTR3Quc3ViVmVjdG9ycyh3R3QseEd0KSx0aGlzLmxpZ2h0UGxhbmUubG9va0F0KHdHdCksdm9pZCAwIT09dGhpcy5jb2xvcj8odGhpcy5saWdodFBsYW5lLm1hdGVyaWFsLmNvbG9yLnNldCh0aGlzLmNvbG9yKSx0aGlzLnRhcmdldExpbmUubWF0ZXJpYWwuY29sb3Iuc2V0KHRoaXMuY29sb3IpKToodGhpcy5saWdodFBsYW5lLm1hdGVyaWFsLmNvbG9yLmNvcHkodGhpcy5saWdodC5jb2xvciksdGhpcy50YXJnZXRMaW5lLm1hdGVyaWFsLmNvbG9yLmNvcHkodGhpcy5saWdodC5jb2xvcikpLHRoaXMudGFyZ2V0TGluZS5sb29rQXQod0d0KSx0aGlzLnRhcmdldExpbmUuc2NhbGUuej1TR3QubGVuZ3RoKCl9fSxEaXNjcmV0ZUludGVycG9sYW50OkpWdCxEb2RlY2FoZWRyb25CdWZmZXJHZW9tZXRyeTpVRnQsRG9kZWNhaGVkcm9uR2VvbWV0cnk6VUZ0LERvdWJsZVNpZGU6MixEc3RBbHBoYUZhY3RvcjoyMDYsRHN0Q29sb3JGYWN0b3I6MjA4LER5bmFtaWNCdWZmZXJBdHRyaWJ1dGU6ZnVuY3Rpb24gZld0KHQsZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuRHluYW1pY0J1ZmZlckF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkJ1ZmZlckF0dHJpYnV0ZSgpLnNldFVzYWdlKCBUSFJFRS5EeW5hbWljRHJhd1VzYWdlICkgaW5zdGVhZC4iKSxuZXcgYnp0KHQsZSkuc2V0VXNhZ2UoTE90KX0sRHluYW1pY0NvcHlVc2FnZTozNTA1MCxEeW5hbWljRHJhd1VzYWdlOkxPdCxEeW5hbWljUmVhZFVzYWdlOjM1MDQ5LEVkZ2VzR2VvbWV0cnk6WUZ0LEVkZ2VzSGVscGVyOmZ1bmN0aW9uIG1XdCh0LGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkVkZ2VzSGVscGVyIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5FZGdlc0dlb21ldHJ5IGluc3RlYWQuIiksbmV3IEVGdChuZXcgWUZ0KHQuZ2VvbWV0cnkpLG5ldyBnRnQoe2NvbG9yOnZvaWQgMCE9PWU/ZToxNjc3NzIxNX0pKX0sRWxsaXBzZUN1cnZlOndVdCxFcXVhbERlcHRoOjQsRXF1YWxTdGVuY2lsRnVuYzo1MTQsRXF1aXJlY3Rhbmd1bGFyUmVmbGVjdGlvbk1hcHBpbmc6T0l0LEVxdWlyZWN0YW5ndWxhclJlZnJhY3Rpb25NYXBwaW5nOlJJdCxFdWxlcjpBUnQsRXZlbnREaXNwYXRjaGVyOk5PdCxFeHRydWRlQnVmZmVyR2VvbWV0cnk6eFZ0LEV4dHJ1ZGVHZW9tZXRyeTp4VnQsRmFjZTM6Znp0LEZhY2U0OmZ1bmN0aW9uIGdXdCh0LGUsbixpLHIsbyxhKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5GYWNlNCBoYXMgYmVlbiByZW1vdmVkLiBBIFRIUkVFLkZhY2UzIHdpbGwgYmUgY3JlYXRlZCBpbnN0ZWFkLiIpLG5ldyBmenQodCxlLG4scixvLGEpfSxGYWNlQ29sb3JzOjEsRmlsZUxvYWRlcjpmVXQsRmxhdFNoYWRpbmc6MSxGbG9hdDE2QnVmZmVyQXR0cmlidXRlOkF6dCxGbG9hdDMyQXR0cmlidXRlOmZ1bmN0aW9uIF9XdCh0LGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkZsb2F0MzJBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5GbG9hdDMyQnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4iKSxuZXcga3p0KHQsZSl9LEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGU6a3p0LEZsb2F0NjRBdHRyaWJ1dGU6ZnVuY3Rpb24geVd0KHQsZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuRmxvYXQ2NEF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkZsb2F0NjRCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLiIpLG5ldyBMenQodCxlKX0sRmxvYXQ2NEJ1ZmZlckF0dHJpYnV0ZTpMenQsRmxvYXRUeXBlOktJdCxGb2c6UEh0LEZvZ0V4cDI6TEh0LEZvbnQ6Zmp0LEZvbnRMb2FkZXI6Z2p0LEZyb250U2lkZTowLEZydXN0dW06eER0LEdMQnVmZmVyQXR0cmlidXRlOnRHdCxHTFNMMToiMTAwIixHTFNMMzpQT3QsR2FtbWFFbmNvZGluZzpTT3QsR2VvbWV0cnlVdGlsczpzV3QsR3JlYXRlckRlcHRoOjYsR3JlYXRlckVxdWFsRGVwdGg6NSxHcmVhdGVyRXF1YWxTdGVuY2lsRnVuYzo1MTgsR3JlYXRlclN0ZW5jaWxGdW5jOjUxNixHcmlkSGVscGVyOmJHdCxHcm91cDpNSHQsSGFsZkZsb2F0VHlwZTpaSXQsSGVtaXNwaGVyZUxpZ2h0OldVdCxIZW1pc3BoZXJlTGlnaHRIZWxwZXI6Y2xhc3MgZXh0ZW5kcyBXUnR7Y29uc3RydWN0b3IodCxlLG4pe3N1cGVyKCksdGhpcy5saWdodD10LHRoaXMubGlnaHQudXBkYXRlTWF0cml4V29ybGQoKSx0aGlzLm1hdHJpeD10Lm1hdHJpeFdvcmxkLHRoaXMubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLmNvbG9yPW47Y29uc3QgaT1uZXcgRVZ0KGUpO2kucm90YXRlWSguNSpNYXRoLlBJKSx0aGlzLm1hdGVyaWFsPW5ldyBfenQoe3dpcmVmcmFtZTohMCxmb2c6ITEsdG9uZU1hcHBlZDohMX0pLHZvaWQgMD09PXRoaXMuY29sb3ImJih0aGlzLm1hdGVyaWFsLnZlcnRleENvbG9ycz0hMCk7Y29uc3Qgcj1pLmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKSxvPW5ldyBGbG9hdDMyQXJyYXkoMypyLmNvdW50KTtpLnNldEF0dHJpYnV0ZSgiY29sb3IiLG5ldyBienQobywzKSksdGhpcy5hZGQobmV3IG9EdChpLHRoaXMubWF0ZXJpYWwpKSx0aGlzLnVwZGF0ZSgpfWRpc3Bvc2UoKXt0aGlzLmNoaWxkcmVuWzBdLmdlb21ldHJ5LmRpc3Bvc2UoKSx0aGlzLmNoaWxkcmVuWzBdLm1hdGVyaWFsLmRpc3Bvc2UoKX11cGRhdGUoKXtjb25zdCB0PXRoaXMuY2hpbGRyZW5bMF07aWYodm9pZCAwIT09dGhpcy5jb2xvcil0aGlzLm1hdGVyaWFsLmNvbG9yLnNldCh0aGlzLmNvbG9yKTtlbHNle2NvbnN0IGU9dC5nZW9tZXRyeS5nZXRBdHRyaWJ1dGUoImNvbG9yIik7eUd0LmNvcHkodGhpcy5saWdodC5jb2xvciksdkd0LmNvcHkodGhpcy5saWdodC5ncm91bmRDb2xvcik7Zm9yKGxldCB0PTAsbj1lLmNvdW50O3Q8bjt0Kyspe2NvbnN0IGk9dDxuLzI/eUd0OnZHdDtlLnNldFhZWih0LGkucixpLmcsaS5iKX1lLm5lZWRzVXBkYXRlPSEwfXQubG9va0F0KF9HdC5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5saWdodC5tYXRyaXhXb3JsZCkubmVnYXRlKCkpfX0sSGVtaXNwaGVyZUxpZ2h0UHJvYmU6Ymp0LEljb3NhaGVkcm9uQnVmZmVyR2VvbWV0cnk6U1Z0LEljb3NhaGVkcm9uR2VvbWV0cnk6U1Z0LEltYWdlQml0bWFwTG9hZGVyOmRqdCxJbWFnZUxvYWRlcjpfVXQsSW1hZ2VVdGlsczpIT3QsSW1tZWRpYXRlUmVuZGVyT2JqZWN0OnVHdCxJbmNyZW1lbnRTdGVuY2lsT3A6NzY4MixJbmNyZW1lbnRXcmFwU3RlbmNpbE9wOjM0MDU1LEluc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZTpzanQsSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnk6YWp0LEluc3RhbmNlZEludGVybGVhdmVkQnVmZmVyOlFqdCxJbnN0YW5jZWRNZXNoOm1GdCxJbnQxNkF0dHJpYnV0ZTpmdW5jdGlvbiB2V3QodCxlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5JbnQxNkF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkludDE2QnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4iKSxuZXcgTXp0KHQsZSl9LEludDE2QnVmZmVyQXR0cmlidXRlOk16dCxJbnQzMkF0dHJpYnV0ZTpmdW5jdGlvbiBiV3QodCxlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5JbnQzMkF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkludDMyQnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4iKSxuZXcgVHp0KHQsZSl9LEludDMyQnVmZmVyQXR0cmlidXRlOlR6dCxJbnQ4QXR0cmlidXRlOmZ1bmN0aW9uIHhXdCh0LGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkludDhBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5JbnQ4QnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4iKSxuZXcgeHp0KHQsZSl9LEludDhCdWZmZXJBdHRyaWJ1dGU6eHp0LEludFR5cGU6MTAxMyxJbnRlcmxlYXZlZEJ1ZmZlcjpJSHQsSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU6Ukh0LEludGVycG9sYW50OiRWdCxJbnRlcnBvbGF0ZURpc2NyZXRlOnBPdCxJbnRlcnBvbGF0ZUxpbmVhcjpmT3QsSW50ZXJwb2xhdGVTbW9vdGg6bU90LEludmVydFN0ZW5jaWxPcDo1Mzg2LEpTT05Mb2FkZXI6ZnVuY3Rpb24gd1d0KCl7Y29uc29sZS5lcnJvcigiVEhSRUUuSlNPTkxvYWRlciBoYXMgYmVlbiByZW1vdmVkLiIpfSxLZWVwU3RlbmNpbE9wOkFPdCxLZXlmcmFtZVRyYWNrOlFWdCxMT0Q6dEZ0LExhdGhlQnVmZmVyR2VvbWV0cnk6TVZ0LExhdGhlR2VvbWV0cnk6TVZ0LExheWVyczpQUnQsTGVuc0ZsYXJlOmZ1bmN0aW9uIFNXdCgpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkxlbnNGbGFyZSBoYXMgYmVlbiBtb3ZlZCB0byAvZXhhbXBsZXMvanNtL29iamVjdHMvTGVuc2ZsYXJlLmpzIil9LExlc3NEZXB0aDoyLExlc3NFcXVhbERlcHRoOjMsTGVzc0VxdWFsU3RlbmNpbEZ1bmM6NTE1LExlc3NTdGVuY2lsRnVuYzo1MTMsTGlnaHQ6R1V0LExpZ2h0UHJvYmU6aWp0LExpbmU6d0Z0LExpbmUzOmNHdCxMaW5lQmFzaWNNYXRlcmlhbDpnRnQsTGluZUN1cnZlOlJVdCxMaW5lQ3VydmUzOnpVdCxMaW5lRGFzaGVkTWF0ZXJpYWw6cVZ0LExpbmVMb29wOlRGdCxMaW5lUGllY2VzOjEsTGluZVNlZ21lbnRzOkVGdCxMaW5lU3RyaXA6MCxMaW5lYXJFbmNvZGluZzp4T3QsTGluZWFyRmlsdGVyOkdJdCxMaW5lYXJJbnRlcnBvbGFudDpaVnQsTGluZWFyTWlwTWFwTGluZWFyRmlsdGVyOjEwMDgsTGluZWFyTWlwTWFwTmVhcmVzdEZpbHRlcjoxMDA3LExpbmVhck1pcG1hcExpbmVhckZpbHRlcjpxSXQsTGluZWFyTWlwbWFwTmVhcmVzdEZpbHRlcjpXSXQsTGluZWFyVG9uZU1hcHBpbmc6MSxMb2FkZXI6ZFV0LExvYWRlclV0aWxzOm9qdCxMb2FkaW5nTWFuYWdlcjp1VXQsTG9nTHV2RW5jb2Rpbmc6MzAwMyxMb29wT25jZToyMjAwLExvb3BQaW5nUG9uZzoyMjAyLExvb3BSZXBlYXQ6MjIwMSxMdW1pbmFuY2VBbHBoYUZvcm1hdDoxMDI1LEx1bWluYW5jZUZvcm1hdDoxMDI0LE1PVVNFOkFJdCxNYXRlcmlhbDpnenQsTWF0ZXJpYWxMb2FkZXI6cmp0LE1hdGg6Uk90LE1hdGhVdGlsczpST3QsTWF0cml4MzpET3QsTWF0cml4NDpiUnQsTWF4RXF1YXRpb246MTA0LE1lc2g6b0R0LE1lc2hCYXNpY01hdGVyaWFsOl96dCxNZXNoRGVwdGhNYXRlcmlhbDpfSHQsTWVzaERpc3RhbmNlTWF0ZXJpYWw6eUh0LE1lc2hGYWNlTWF0ZXJpYWw6ZnVuY3Rpb24gTVd0KHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1lc2hGYWNlTWF0ZXJpYWwgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGFuIEFycmF5IGluc3RlYWQuIiksdH0sTWVzaExhbWJlcnRNYXRlcmlhbDpHVnQsTWVzaE1hdGNhcE1hdGVyaWFsOldWdCxNZXNoTm9ybWFsTWF0ZXJpYWw6alZ0LE1lc2hQaG9uZ01hdGVyaWFsOlZWdCxNZXNoUGh5c2ljYWxNYXRlcmlhbDpGVnQsTWVzaFN0YW5kYXJkTWF0ZXJpYWw6SFZ0LE1lc2hUb29uTWF0ZXJpYWw6VVZ0LE1pbkVxdWF0aW9uOjEwMyxNaXJyb3JlZFJlcGVhdFdyYXBwaW5nOkZJdCxNaXhPcGVyYXRpb246MSxNdWx0aU1hdGVyaWFsOmZ1bmN0aW9uIEVXdCh0PVtdKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NdWx0aU1hdGVyaWFsIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBhbiBBcnJheSBpbnN0ZWFkLiIpLHQuaXNNdWx0aU1hdGVyaWFsPSEwLHQubWF0ZXJpYWxzPXQsdC5jbG9uZT1mdW5jdGlvbigpe3JldHVybiB0LnNsaWNlKCl9LHR9LE11bHRpcGx5QmxlbmRpbmc6NCxNdWx0aXBseU9wZXJhdGlvbjowLE5lYXJlc3RGaWx0ZXI6Vkl0LE5lYXJlc3RNaXBNYXBMaW5lYXJGaWx0ZXI6MTAwNSxOZWFyZXN0TWlwTWFwTmVhcmVzdEZpbHRlcjoxMDA0LE5lYXJlc3RNaXBtYXBMaW5lYXJGaWx0ZXI6akl0LE5lYXJlc3RNaXBtYXBOZWFyZXN0RmlsdGVyOlVJdCxOZXZlckRlcHRoOjAsTmV2ZXJTdGVuY2lsRnVuYzo1MTIsTm9CbGVuZGluZzowLE5vQ29sb3JzOjAsTm9Ub25lTWFwcGluZzowLE5vcm1hbEFuaW1hdGlvbkJsZW5kTW9kZTp2T3QsTm9ybWFsQmxlbmRpbmc6MSxOb3RFcXVhbERlcHRoOjcsTm90RXF1YWxTdGVuY2lsRnVuYzo1MTcsTnVtYmVyS2V5ZnJhbWVUcmFjazpuVXQsT2JqZWN0M0Q6V1J0LE9iamVjdExvYWRlcjpjbGFzcyBleHRlbmRzIGRVdHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQsZSxuLGkpe2NvbnN0IHI9dGhpcyxvPSIiPT09dGhpcy5wYXRoP29qdC5leHRyYWN0VXJsQmFzZSh0KTp0aGlzLnBhdGg7dGhpcy5yZXNvdXJjZVBhdGg9dGhpcy5yZXNvdXJjZVBhdGh8fG87Y29uc3QgYT1uZXcgZlV0KHRoaXMubWFuYWdlcik7YS5zZXRQYXRoKHRoaXMucGF0aCksYS5zZXRSZXF1ZXN0SGVhZGVyKHRoaXMucmVxdWVzdEhlYWRlciksYS5zZXRXaXRoQ3JlZGVudGlhbHModGhpcy53aXRoQ3JlZGVudGlhbHMpLGEubG9hZCh0LChmdW5jdGlvbihuKXtsZXQgbz1udWxsO3RyeXtvPUpTT04ucGFyc2Uobil9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgMCE9PWkmJmkoZSksdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRTpPYmplY3RMb2FkZXI6IENhbid0IHBhcnNlICIrdCsiLiIsZS5tZXNzYWdlKX1jb25zdCBhPW8ubWV0YWRhdGE7dm9pZCAwIT09YSYmdm9pZCAwIT09YS50eXBlJiYiZ2VvbWV0cnkiIT09YS50eXBlLnRvTG93ZXJDYXNlKCk/ci5wYXJzZShvLGUpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLk9iamVjdExvYWRlcjogQ2FuJ3QgbG9hZCAiK3QpfSksbixpKX1wYXJzZSh0LGUpe2NvbnN0IG49dGhpcy5wYXJzZUFuaW1hdGlvbnModC5hbmltYXRpb25zKSxpPXRoaXMucGFyc2VTaGFwZXModC5zaGFwZXMpLHI9dGhpcy5wYXJzZUdlb21ldHJpZXModC5nZW9tZXRyaWVzLGkpLG89dGhpcy5wYXJzZUltYWdlcyh0LmltYWdlcywoZnVuY3Rpb24oKXt2b2lkIDAhPT1lJiZlKGwpfSkpLGE9dGhpcy5wYXJzZVRleHR1cmVzKHQudGV4dHVyZXMsbykscz10aGlzLnBhcnNlTWF0ZXJpYWxzKHQubWF0ZXJpYWxzLGEpLGw9dGhpcy5wYXJzZU9iamVjdCh0Lm9iamVjdCxyLHMsbiksYz10aGlzLnBhcnNlU2tlbGV0b25zKHQuc2tlbGV0b25zLGwpO2lmKHRoaXMuYmluZFNrZWxldG9ucyhsLGMpLHZvaWQgMCE9PWUpe2xldCB0PSExO2Zvcihjb25zdCBlIGluIG8paWYob1tlXWluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudCl7dD0hMDticmVha30hMT09PXQmJmUobCl9cmV0dXJuIGx9cGFyc2VTaGFwZXModCl7Y29uc3QgZT17fTtpZih2b2lkIDAhPT10KWZvcihsZXQgbj0wLGk9dC5sZW5ndGg7bjxpO24rKyl7Y29uc3QgaT0obmV3IGpVdCkuZnJvbUpTT04odFtuXSk7ZVtpLnV1aWRdPWl9cmV0dXJuIGV9cGFyc2VTa2VsZXRvbnModCxlKXtjb25zdCBuPXt9LGk9e307aWYoZS50cmF2ZXJzZSgoZnVuY3Rpb24odCl7dC5pc0JvbmUmJihpW3QudXVpZF09dCl9KSksdm9pZCAwIT09dClmb3IobGV0IGU9MCxyPXQubGVuZ3RoO2U8cjtlKyspe2NvbnN0IHI9KG5ldyB1RnQpLmZyb21KU09OKHRbZV0saSk7bltyLnV1aWRdPXJ9cmV0dXJuIG59cGFyc2VHZW9tZXRyaWVzKHQsZSl7Y29uc3Qgbj17fTtsZXQgaTtpZih2b2lkIDAhPT10KXtjb25zdCByPW5ldyBsanQ7Zm9yKGxldCBvPTAsYT10Lmxlbmd0aDtvPGE7bysrKXtsZXQgYTtjb25zdCBzPXRbb107c3dpdGNoKHMudHlwZSl7Y2FzZSJQbGFuZUdlb21ldHJ5IjpjYXNlIlBsYW5lQnVmZmVyR2VvbWV0cnkiOmE9bmV3IHpWdFtzLnR5cGVdKHMud2lkdGgscy5oZWlnaHQscy53aWR0aFNlZ21lbnRzLHMuaGVpZ2h0U2VnbWVudHMpO2JyZWFrO2Nhc2UiQm94R2VvbWV0cnkiOmNhc2UiQm94QnVmZmVyR2VvbWV0cnkiOmE9bmV3IHpWdFtzLnR5cGVdKHMud2lkdGgscy5oZWlnaHQscy5kZXB0aCxzLndpZHRoU2VnbWVudHMscy5oZWlnaHRTZWdtZW50cyxzLmRlcHRoU2VnbWVudHMpO2JyZWFrO2Nhc2UiQ2lyY2xlR2VvbWV0cnkiOmNhc2UiQ2lyY2xlQnVmZmVyR2VvbWV0cnkiOmE9bmV3IHpWdFtzLnR5cGVdKHMucmFkaXVzLHMuc2VnbWVudHMscy50aGV0YVN0YXJ0LHMudGhldGFMZW5ndGgpO2JyZWFrO2Nhc2UiQ3lsaW5kZXJHZW9tZXRyeSI6Y2FzZSJDeWxpbmRlckJ1ZmZlckdlb21ldHJ5IjphPW5ldyB6VnRbcy50eXBlXShzLnJhZGl1c1RvcCxzLnJhZGl1c0JvdHRvbSxzLmhlaWdodCxzLnJhZGlhbFNlZ21lbnRzLHMuaGVpZ2h0U2VnbWVudHMscy5vcGVuRW5kZWQscy50aGV0YVN0YXJ0LHMudGhldGFMZW5ndGgpO2JyZWFrO2Nhc2UiQ29uZUdlb21ldHJ5IjpjYXNlIkNvbmVCdWZmZXJHZW9tZXRyeSI6YT1uZXcgelZ0W3MudHlwZV0ocy5yYWRpdXMscy5oZWlnaHQscy5yYWRpYWxTZWdtZW50cyxzLmhlaWdodFNlZ21lbnRzLHMub3BlbkVuZGVkLHMudGhldGFTdGFydCxzLnRoZXRhTGVuZ3RoKTticmVhaztjYXNlIlNwaGVyZUdlb21ldHJ5IjpjYXNlIlNwaGVyZUJ1ZmZlckdlb21ldHJ5IjphPW5ldyB6VnRbcy50eXBlXShzLnJhZGl1cyxzLndpZHRoU2VnbWVudHMscy5oZWlnaHRTZWdtZW50cyxzLnBoaVN0YXJ0LHMucGhpTGVuZ3RoLHMudGhldGFTdGFydCxzLnRoZXRhTGVuZ3RoKTticmVhaztjYXNlIkRvZGVjYWhlZHJvbkdlb21ldHJ5IjpjYXNlIkRvZGVjYWhlZHJvbkJ1ZmZlckdlb21ldHJ5IjpjYXNlIkljb3NhaGVkcm9uR2VvbWV0cnkiOmNhc2UiSWNvc2FoZWRyb25CdWZmZXJHZW9tZXRyeSI6Y2FzZSJPY3RhaGVkcm9uR2VvbWV0cnkiOmNhc2UiT2N0YWhlZHJvbkJ1ZmZlckdlb21ldHJ5IjpjYXNlIlRldHJhaGVkcm9uR2VvbWV0cnkiOmNhc2UiVGV0cmFoZWRyb25CdWZmZXJHZW9tZXRyeSI6YT1uZXcgelZ0W3MudHlwZV0ocy5yYWRpdXMscy5kZXRhaWwpO2JyZWFrO2Nhc2UiUmluZ0dlb21ldHJ5IjpjYXNlIlJpbmdCdWZmZXJHZW9tZXRyeSI6YT1uZXcgelZ0W3MudHlwZV0ocy5pbm5lclJhZGl1cyxzLm91dGVyUmFkaXVzLHMudGhldGFTZWdtZW50cyxzLnBoaVNlZ21lbnRzLHMudGhldGFTdGFydCxzLnRoZXRhTGVuZ3RoKTticmVhaztjYXNlIlRvcnVzR2VvbWV0cnkiOmNhc2UiVG9ydXNCdWZmZXJHZW9tZXRyeSI6YT1uZXcgelZ0W3MudHlwZV0ocy5yYWRpdXMscy50dWJlLHMucmFkaWFsU2VnbWVudHMscy50dWJ1bGFyU2VnbWVudHMscy5hcmMpO2JyZWFrO2Nhc2UiVG9ydXNLbm90R2VvbWV0cnkiOmNhc2UiVG9ydXNLbm90QnVmZmVyR2VvbWV0cnkiOmE9bmV3IHpWdFtzLnR5cGVdKHMucmFkaXVzLHMudHViZSxzLnR1YnVsYXJTZWdtZW50cyxzLnJhZGlhbFNlZ21lbnRzLHMucCxzLnEpO2JyZWFrO2Nhc2UiVHViZUdlb21ldHJ5IjpjYXNlIlR1YmVCdWZmZXJHZW9tZXRyeSI6YT1uZXcgelZ0W3MudHlwZV0oKG5ldyBGVXRbcy5wYXRoLnR5cGVdKS5mcm9tSlNPTihzLnBhdGgpLHMudHVidWxhclNlZ21lbnRzLHMucmFkaXVzLHMucmFkaWFsU2VnbWVudHMscy5jbG9zZWQpO2JyZWFrO2Nhc2UiTGF0aGVHZW9tZXRyeSI6Y2FzZSJMYXRoZUJ1ZmZlckdlb21ldHJ5IjphPW5ldyB6VnRbcy50eXBlXShzLnBvaW50cyxzLnNlZ21lbnRzLHMucGhpU3RhcnQscy5waGlMZW5ndGgpO2JyZWFrO2Nhc2UiUG9seWhlZHJvbkdlb21ldHJ5IjpjYXNlIlBvbHloZWRyb25CdWZmZXJHZW9tZXRyeSI6YT1uZXcgelZ0W3MudHlwZV0ocy52ZXJ0aWNlcyxzLmluZGljZXMscy5yYWRpdXMscy5kZXRhaWxzKTticmVhaztjYXNlIlNoYXBlR2VvbWV0cnkiOmNhc2UiU2hhcGVCdWZmZXJHZW9tZXRyeSI6aT1bXTtmb3IobGV0IHQ9MCxuPXMuc2hhcGVzLmxlbmd0aDt0PG47dCsrKWkucHVzaChlW3Muc2hhcGVzW3RdXSk7YT1uZXcgelZ0W3MudHlwZV0oaSxzLmN1cnZlU2VnbWVudHMpO2JyZWFrO2Nhc2UiRXh0cnVkZUdlb21ldHJ5IjpjYXNlIkV4dHJ1ZGVCdWZmZXJHZW9tZXRyeSI6aT1bXTtmb3IobGV0IHQ9MCxuPXMuc2hhcGVzLmxlbmd0aDt0PG47dCsrKWkucHVzaChlW3Muc2hhcGVzW3RdXSk7Y29uc3QgdD1zLm9wdGlvbnMuZXh0cnVkZVBhdGg7dm9pZCAwIT09dCYmKHMub3B0aW9ucy5leHRydWRlUGF0aD0obmV3IEZVdFt0LnR5cGVdKS5mcm9tSlNPTih0KSksYT1uZXcgelZ0W3MudHlwZV0oaSxzLm9wdGlvbnMpO2JyZWFrO2Nhc2UiQnVmZmVyR2VvbWV0cnkiOmNhc2UiSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkiOmE9ci5wYXJzZShzKTticmVhaztjYXNlIkdlb21ldHJ5Ijpjb25zb2xlLmVycm9yKCdUSFJFRS5PYmplY3RMb2FkZXI6IExvYWRpbmcgIkdlb21ldHJ5IiBpcyBub3Qgc3VwcG9ydGVkIGFueW1vcmUuJyk7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLndhcm4oJ1RIUkVFLk9iamVjdExvYWRlcjogVW5zdXBwb3J0ZWQgZ2VvbWV0cnkgdHlwZSAiJytzLnR5cGUrJyInKTtjb250aW51ZX1hLnV1aWQ9cy51dWlkLHZvaWQgMCE9PXMubmFtZSYmKGEubmFtZT1zLm5hbWUpLCEwPT09YS5pc0J1ZmZlckdlb21ldHJ5JiZ2b2lkIDAhPT1zLnVzZXJEYXRhJiYoYS51c2VyRGF0YT1zLnVzZXJEYXRhKSxuW3MudXVpZF09YX19cmV0dXJuIG59cGFyc2VNYXRlcmlhbHModCxlKXtjb25zdCBuPXt9LGk9e307aWYodm9pZCAwIT09dCl7Y29uc3Qgcj1uZXcgcmp0O3Iuc2V0VGV4dHVyZXMoZSk7Zm9yKGxldCBlPTAsbz10Lmxlbmd0aDtlPG87ZSsrKXtjb25zdCBvPXRbZV07aWYoIk11bHRpTWF0ZXJpYWwiPT09by50eXBlKXtjb25zdCB0PVtdO2ZvcihsZXQgZT0wO2U8by5tYXRlcmlhbHMubGVuZ3RoO2UrKyl7Y29uc3QgaT1vLm1hdGVyaWFsc1tlXTt2b2lkIDA9PT1uW2kudXVpZF0mJihuW2kudXVpZF09ci5wYXJzZShpKSksdC5wdXNoKG5baS51dWlkXSl9aVtvLnV1aWRdPXR9ZWxzZSB2b2lkIDA9PT1uW28udXVpZF0mJihuW28udXVpZF09ci5wYXJzZShvKSksaVtvLnV1aWRdPW5bby51dWlkXX19cmV0dXJuIGl9cGFyc2VBbmltYXRpb25zKHQpe2NvbnN0IGU9e307aWYodm9pZCAwIT09dClmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKyl7Y29uc3QgaT1zVXQucGFyc2UodFtuXSk7ZVtpLnV1aWRdPWl9cmV0dXJuIGV9cGFyc2VJbWFnZXModCxlKXtjb25zdCBuPXRoaXMsaT17fTtsZXQgcjtmdW5jdGlvbiBvKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdCl7Y29uc3QgZT10O3JldHVybihmdW5jdGlvbiBlKHQpe3JldHVybiBuLm1hbmFnZXIuaXRlbVN0YXJ0KHQpLHIubG9hZCh0LChmdW5jdGlvbigpe24ubWFuYWdlci5pdGVtRW5kKHQpfSksdm9pZCAwLChmdW5jdGlvbigpe24ubWFuYWdlci5pdGVtRXJyb3IodCksbi5tYW5hZ2VyLml0ZW1FbmQodCl9KSl9KSgvXihcL1wvKXwoW2Etel0rOihcL1wvKT8pL2kudGVzdChlKT9lOm4ucmVzb3VyY2VQYXRoK2UpfXJldHVybiB0LmRhdGE/e2RhdGE6SXp0KHQudHlwZSx0LmRhdGEpLHdpZHRoOnQud2lkdGgsaGVpZ2h0OnQuaGVpZ2h0fTpudWxsfWlmKHZvaWQgMCE9PXQmJnQubGVuZ3RoPjApe2NvbnN0IG49bmV3IHVVdChlKTtyPW5ldyBfVXQobiksci5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKTtmb3IobGV0IGU9MCxuPXQubGVuZ3RoO2U8bjtlKyspe2NvbnN0IG49dFtlXSxyPW4udXJsO2lmKEFycmF5LmlzQXJyYXkocikpe2lbbi51dWlkXT1bXTtmb3IobGV0IHQ9MCxlPXIubGVuZ3RoO3Q8ZTt0Kyspe2NvbnN0IGU9byhyW3RdKTtudWxsIT09ZSYmKGUgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50P2lbbi51dWlkXS5wdXNoKGUpOmlbbi51dWlkXS5wdXNoKG5ldyB5RHQoZS5kYXRhLGUud2lkdGgsZS5oZWlnaHQpKSl9fWVsc2V7Y29uc3QgdD1vKG4udXJsKTtudWxsIT09dCYmKGlbbi51dWlkXT10KX19fXJldHVybiBpfXBhcnNlVGV4dHVyZXModCxlKXtmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0P3Q6KGNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0TG9hZGVyLnBhcnNlVGV4dHVyZTogQ29uc3RhbnQgc2hvdWxkIGJlIGluIG51bWVyaWMgZm9ybS4iLHQpLGVbdF0pfWNvbnN0IGk9e307aWYodm9pZCAwIT09dClmb3IobGV0IHI9MCxvPXQubGVuZ3RoO3I8bztyKyspe2NvbnN0IG89dFtyXTtsZXQgYTt2b2lkIDA9PT1vLmltYWdlJiZjb25zb2xlLndhcm4oJ1RIUkVFLk9iamVjdExvYWRlcjogTm8gImltYWdlIiBzcGVjaWZpZWQgZm9yJyxvLnV1aWQpLHZvaWQgMD09PWVbby5pbWFnZV0mJmNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0TG9hZGVyOiBVbmRlZmluZWQgaW1hZ2UiLG8uaW1hZ2UpO2NvbnN0IHM9ZVtvLmltYWdlXTtBcnJheS5pc0FycmF5KHMpPyhhPW5ldyBnRHQocyksNj09PXMubGVuZ3RoJiYoYS5uZWVkc1VwZGF0ZT0hMCkpOihhPXMmJnMuZGF0YT9uZXcgeUR0KHMuZGF0YSxzLndpZHRoLHMuaGVpZ2h0KTpuZXcgVk90KHMpLHMmJihhLm5lZWRzVXBkYXRlPSEwKSksYS51dWlkPW8udXVpZCx2b2lkIDAhPT1vLm5hbWUmJihhLm5hbWU9by5uYW1lKSx2b2lkIDAhPT1vLm1hcHBpbmcmJihhLm1hcHBpbmc9bihvLm1hcHBpbmcsY2p0KSksdm9pZCAwIT09by5vZmZzZXQmJmEub2Zmc2V0LmZyb21BcnJheShvLm9mZnNldCksdm9pZCAwIT09by5yZXBlYXQmJmEucmVwZWF0LmZyb21BcnJheShvLnJlcGVhdCksdm9pZCAwIT09by5jZW50ZXImJmEuY2VudGVyLmZyb21BcnJheShvLmNlbnRlciksdm9pZCAwIT09by5yb3RhdGlvbiYmKGEucm90YXRpb249by5yb3RhdGlvbiksdm9pZCAwIT09by53cmFwJiYoYS53cmFwUz1uKG8ud3JhcFswXSx1anQpLGEud3JhcFQ9bihvLndyYXBbMV0sdWp0KSksdm9pZCAwIT09by5mb3JtYXQmJihhLmZvcm1hdD1vLmZvcm1hdCksdm9pZCAwIT09by50eXBlJiYoYS50eXBlPW8udHlwZSksdm9pZCAwIT09by5lbmNvZGluZyYmKGEuZW5jb2Rpbmc9by5lbmNvZGluZyksdm9pZCAwIT09by5taW5GaWx0ZXImJihhLm1pbkZpbHRlcj1uKG8ubWluRmlsdGVyLGhqdCkpLHZvaWQgMCE9PW8ubWFnRmlsdGVyJiYoYS5tYWdGaWx0ZXI9bihvLm1hZ0ZpbHRlcixoanQpKSx2b2lkIDAhPT1vLmFuaXNvdHJvcHkmJihhLmFuaXNvdHJvcHk9by5hbmlzb3Ryb3B5KSx2b2lkIDAhPT1vLmZsaXBZJiYoYS5mbGlwWT1vLmZsaXBZKSx2b2lkIDAhPT1vLnByZW11bHRpcGx5QWxwaGEmJihhLnByZW11bHRpcGx5QWxwaGE9by5wcmVtdWx0aXBseUFscGhhKSx2b2lkIDAhPT1vLnVucGFja0FsaWdubWVudCYmKGEudW5wYWNrQWxpZ25tZW50PW8udW5wYWNrQWxpZ25tZW50KSxpW28udXVpZF09YX1yZXR1cm4gaX1wYXJzZU9iamVjdCh0LGUsbixpKXtsZXQgcixvLGE7ZnVuY3Rpb24gcyh0KXtyZXR1cm4gdm9pZCAwPT09ZVt0XSYmY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3RMb2FkZXI6IFVuZGVmaW5lZCBnZW9tZXRyeSIsdCksZVt0XX1mdW5jdGlvbiBsKHQpe2lmKHZvaWQgMCE9PXQpe2lmKEFycmF5LmlzQXJyYXkodCkpe2NvbnN0IGU9W107Zm9yKGxldCBpPTAscj10Lmxlbmd0aDtpPHI7aSsrKXtjb25zdCByPXRbaV07dm9pZCAwPT09bltyXSYmY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3RMb2FkZXI6IFVuZGVmaW5lZCBtYXRlcmlhbCIsciksZS5wdXNoKG5bcl0pfXJldHVybiBlfXJldHVybiB2b2lkIDA9PT1uW3RdJiZjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdExvYWRlcjogVW5kZWZpbmVkIG1hdGVyaWFsIix0KSxuW3RdfX1zd2l0Y2godC50eXBlKXtjYXNlIlNjZW5lIjpyPW5ldyBOSHQsdm9pZCAwIT09dC5iYWNrZ3JvdW5kJiZOdW1iZXIuaXNJbnRlZ2VyKHQuYmFja2dyb3VuZCkmJihyLmJhY2tncm91bmQ9bmV3IHB6dCh0LmJhY2tncm91bmQpKSx2b2lkIDAhPT10LmZvZyYmKCJGb2ciPT09dC5mb2cudHlwZT9yLmZvZz1uZXcgUEh0KHQuZm9nLmNvbG9yLHQuZm9nLm5lYXIsdC5mb2cuZmFyKToiRm9nRXhwMiI9PT10LmZvZy50eXBlJiYoci5mb2c9bmV3IExIdCh0LmZvZy5jb2xvcix0LmZvZy5kZW5zaXR5KSkpO2JyZWFrO2Nhc2UiUGVyc3BlY3RpdmVDYW1lcmEiOnI9bmV3IHBEdCh0LmZvdix0LmFzcGVjdCx0Lm5lYXIsdC5mYXIpLHZvaWQgMCE9PXQuZm9jdXMmJihyLmZvY3VzPXQuZm9jdXMpLHZvaWQgMCE9PXQuem9vbSYmKHIuem9vbT10Lnpvb20pLHZvaWQgMCE9PXQuZmlsbUdhdWdlJiYoci5maWxtR2F1Z2U9dC5maWxtR2F1Z2UpLHZvaWQgMCE9PXQuZmlsbU9mZnNldCYmKHIuZmlsbU9mZnNldD10LmZpbG1PZmZzZXQpLHZvaWQgMCE9PXQudmlldyYmKHIudmlldz1PYmplY3QuYXNzaWduKHt9LHQudmlldykpO2JyZWFrO2Nhc2UiT3J0aG9ncmFwaGljQ2FtZXJhIjpyPW5ldyBaVXQodC5sZWZ0LHQucmlnaHQsdC50b3AsdC5ib3R0b20sdC5uZWFyLHQuZmFyKSx2b2lkIDAhPT10Lnpvb20mJihyLnpvb209dC56b29tKSx2b2lkIDAhPT10LnZpZXcmJihyLnZpZXc9T2JqZWN0LmFzc2lnbih7fSx0LnZpZXcpKTticmVhaztjYXNlIkFtYmllbnRMaWdodCI6cj1uZXcgdGp0KHQuY29sb3IsdC5pbnRlbnNpdHkpO2JyZWFrO2Nhc2UiRGlyZWN0aW9uYWxMaWdodCI6cj1uZXcgUVV0KHQuY29sb3IsdC5pbnRlbnNpdHkpO2JyZWFrO2Nhc2UiUG9pbnRMaWdodCI6cj1uZXcgS1V0KHQuY29sb3IsdC5pbnRlbnNpdHksdC5kaXN0YW5jZSx0LmRlY2F5KTticmVhaztjYXNlIlJlY3RBcmVhTGlnaHQiOnI9bmV3IGVqdCh0LmNvbG9yLHQuaW50ZW5zaXR5LHQud2lkdGgsdC5oZWlnaHQpO2JyZWFrO2Nhc2UiU3BvdExpZ2h0IjpyPW5ldyBYVXQodC5jb2xvcix0LmludGVuc2l0eSx0LmRpc3RhbmNlLHQuYW5nbGUsdC5wZW51bWJyYSx0LmRlY2F5KTticmVhaztjYXNlIkhlbWlzcGhlcmVMaWdodCI6cj1uZXcgV1V0KHQuY29sb3IsdC5ncm91bmRDb2xvcix0LmludGVuc2l0eSk7YnJlYWs7Y2FzZSJMaWdodFByb2JlIjpyPShuZXcgaWp0KS5mcm9tSlNPTih0KTticmVhaztjYXNlIlNraW5uZWRNZXNoIjpvPXModC5nZW9tZXRyeSksYT1sKHQubWF0ZXJpYWwpLHI9bmV3IGFGdChvLGEpLHZvaWQgMCE9PXQuYmluZE1vZGUmJihyLmJpbmRNb2RlPXQuYmluZE1vZGUpLHZvaWQgMCE9PXQuYmluZE1hdHJpeCYmci5iaW5kTWF0cml4LmZyb21BcnJheSh0LmJpbmRNYXRyaXgpLHZvaWQgMCE9PXQuc2tlbGV0b24mJihyLnNrZWxldG9uPXQuc2tlbGV0b24pO2JyZWFrO2Nhc2UiTWVzaCI6bz1zKHQuZ2VvbWV0cnkpLGE9bCh0Lm1hdGVyaWFsKSxyPW5ldyBvRHQobyxhKTticmVhaztjYXNlIkluc3RhbmNlZE1lc2giOm89cyh0Lmdlb21ldHJ5KSxhPWwodC5tYXRlcmlhbCk7Y29uc3QgZT10Lmluc3RhbmNlTWF0cml4O3I9bmV3IG1GdChvLGEsdC5jb3VudCksci5pbnN0YW5jZU1hdHJpeD1uZXcgYnp0KG5ldyBGbG9hdDMyQXJyYXkoZS5hcnJheSksMTYpO2JyZWFrO2Nhc2UiTE9EIjpyPW5ldyB0RnQ7YnJlYWs7Y2FzZSJMaW5lIjpyPW5ldyB3RnQocyh0Lmdlb21ldHJ5KSxsKHQubWF0ZXJpYWwpKTticmVhaztjYXNlIkxpbmVMb29wIjpyPW5ldyBURnQocyh0Lmdlb21ldHJ5KSxsKHQubWF0ZXJpYWwpKTticmVhaztjYXNlIkxpbmVTZWdtZW50cyI6cj1uZXcgRUZ0KHModC5nZW9tZXRyeSksbCh0Lm1hdGVyaWFsKSk7YnJlYWs7Y2FzZSJQb2ludENsb3VkIjpjYXNlIlBvaW50cyI6cj1uZXcgTkZ0KHModC5nZW9tZXRyeSksbCh0Lm1hdGVyaWFsKSk7YnJlYWs7Y2FzZSJTcHJpdGUiOnI9bmV3IEtIdChsKHQubWF0ZXJpYWwpKTticmVhaztjYXNlIkdyb3VwIjpyPW5ldyBNSHQ7YnJlYWs7Y2FzZSJCb25lIjpyPW5ldyBzRnQ7YnJlYWs7ZGVmYXVsdDpyPW5ldyBXUnR9aWYoci51dWlkPXQudXVpZCx2b2lkIDAhPT10Lm5hbWUmJihyLm5hbWU9dC5uYW1lKSx2b2lkIDAhPT10Lm1hdHJpeD8oci5tYXRyaXguZnJvbUFycmF5KHQubWF0cml4KSx2b2lkIDAhPT10Lm1hdHJpeEF1dG9VcGRhdGUmJihyLm1hdHJpeEF1dG9VcGRhdGU9dC5tYXRyaXhBdXRvVXBkYXRlKSxyLm1hdHJpeEF1dG9VcGRhdGUmJnIubWF0cml4LmRlY29tcG9zZShyLnBvc2l0aW9uLHIucXVhdGVybmlvbixyLnNjYWxlKSk6KHZvaWQgMCE9PXQucG9zaXRpb24mJnIucG9zaXRpb24uZnJvbUFycmF5KHQucG9zaXRpb24pLHZvaWQgMCE9PXQucm90YXRpb24mJnIucm90YXRpb24uZnJvbUFycmF5KHQucm90YXRpb24pLHZvaWQgMCE9PXQucXVhdGVybmlvbiYmci5xdWF0ZXJuaW9uLmZyb21BcnJheSh0LnF1YXRlcm5pb24pLHZvaWQgMCE9PXQuc2NhbGUmJnIuc2NhbGUuZnJvbUFycmF5KHQuc2NhbGUpKSx2b2lkIDAhPT10LmNhc3RTaGFkb3cmJihyLmNhc3RTaGFkb3c9dC5jYXN0U2hhZG93KSx2b2lkIDAhPT10LnJlY2VpdmVTaGFkb3cmJihyLnJlY2VpdmVTaGFkb3c9dC5yZWNlaXZlU2hhZG93KSx0LnNoYWRvdyYmKHZvaWQgMCE9PXQuc2hhZG93LmJpYXMmJihyLnNoYWRvdy5iaWFzPXQuc2hhZG93LmJpYXMpLHZvaWQgMCE9PXQuc2hhZG93Lm5vcm1hbEJpYXMmJihyLnNoYWRvdy5ub3JtYWxCaWFzPXQuc2hhZG93Lm5vcm1hbEJpYXMpLHZvaWQgMCE9PXQuc2hhZG93LnJhZGl1cyYmKHIuc2hhZG93LnJhZGl1cz10LnNoYWRvdy5yYWRpdXMpLHZvaWQgMCE9PXQuc2hhZG93Lm1hcFNpemUmJnIuc2hhZG93Lm1hcFNpemUuZnJvbUFycmF5KHQuc2hhZG93Lm1hcFNpemUpLHZvaWQgMCE9PXQuc2hhZG93LmNhbWVyYSYmKHIuc2hhZG93LmNhbWVyYT10aGlzLnBhcnNlT2JqZWN0KHQuc2hhZG93LmNhbWVyYSkpKSx2b2lkIDAhPT10LnZpc2libGUmJihyLnZpc2libGU9dC52aXNpYmxlKSx2b2lkIDAhPT10LmZydXN0dW1DdWxsZWQmJihyLmZydXN0dW1DdWxsZWQ9dC5mcnVzdHVtQ3VsbGVkKSx2b2lkIDAhPT10LnJlbmRlck9yZGVyJiYoci5yZW5kZXJPcmRlcj10LnJlbmRlck9yZGVyKSx2b2lkIDAhPT10LnVzZXJEYXRhJiYoci51c2VyRGF0YT10LnVzZXJEYXRhKSx2b2lkIDAhPT10LmxheWVycyYmKHIubGF5ZXJzLm1hc2s9dC5sYXllcnMpLHZvaWQgMCE9PXQuY2hpbGRyZW4pe2NvbnN0IG89dC5jaGlsZHJlbjtmb3IobGV0IHQ9MDt0PG8ubGVuZ3RoO3QrKylyLmFkZCh0aGlzLnBhcnNlT2JqZWN0KG9bdF0sZSxuLGkpKX1pZih2b2lkIDAhPT10LmFuaW1hdGlvbnMpe2NvbnN0IGU9dC5hbmltYXRpb25zO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKXIuYW5pbWF0aW9ucy5wdXNoKGlbZVt0XV0pfWlmKCJMT0QiPT09dC50eXBlKXt2b2lkIDAhPT10LmF1dG9VcGRhdGUmJihyLmF1dG9VcGRhdGU9dC5hdXRvVXBkYXRlKTtjb25zdCBlPXQubGV2ZWxzO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKXtjb25zdCBuPWVbdF0saT1yLmdldE9iamVjdEJ5UHJvcGVydHkoInV1aWQiLG4ub2JqZWN0KTt2b2lkIDAhPT1pJiZyLmFkZExldmVsKGksbi5kaXN0YW5jZSl9fXJldHVybiByfWJpbmRTa2VsZXRvbnModCxlKXswIT09T2JqZWN0LmtleXMoZSkubGVuZ3RoJiZ0LnRyYXZlcnNlKChmdW5jdGlvbih0KXtpZighMD09PXQuaXNTa2lubmVkTWVzaCYmdm9pZCAwIT09dC5za2VsZXRvbil7Y29uc3Qgbj1lW3Quc2tlbGV0b25dO3ZvaWQgMD09PW4/Y29uc29sZS53YXJuKCJUSFJFRS5PYmplY3RMb2FkZXI6IE5vIHNrZWxldG9uIGZvdW5kIHdpdGggVVVJRDoiLHQuc2tlbGV0b24pOnQuYmluZChuLHQuYmluZE1hdHJpeCl9fSkpfXNldFRleHR1cmVQYXRoKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdExvYWRlcjogLnNldFRleHR1cmVQYXRoKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0UmVzb3VyY2VQYXRoKCkuIiksdGhpcy5zZXRSZXNvdXJjZVBhdGgodCl9fSxPYmplY3RTcGFjZU5vcm1hbE1hcDoxLE9jdGFoZWRyb25CdWZmZXJHZW9tZXRyeTpFVnQsT2N0YWhlZHJvbkdlb21ldHJ5OkVWdCxPbmVGYWN0b3I6MjAxLE9uZU1pbnVzRHN0QWxwaGFGYWN0b3I6MjA3LE9uZU1pbnVzRHN0Q29sb3JGYWN0b3I6MjA5LE9uZU1pbnVzU3JjQWxwaGFGYWN0b3I6MjA1LE9uZU1pbnVzU3JjQ29sb3JGYWN0b3I6MjAzLE9ydGhvZ3JhcGhpY0NhbWVyYTpaVXQsUENGU2hhZG93TWFwOjEsUENGU29mdFNoYWRvd01hcDoyLFBNUkVNR2VuZXJhdG9yOmNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuX3JlbmRlcmVyPXQsdGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQ9bnVsbCx0aGlzLl9ibHVyTWF0ZXJpYWw9KGZ1bmN0aW9uIGUodCl7cmV0dXJuIG5ldyBCVnQoe25hbWU6IlNwaGVyaWNhbEdhdXNzaWFuQmx1ciIsZGVmaW5lczp7bjp0fSx1bmlmb3Jtczp7ZW52TWFwOnt2YWx1ZTpudWxsfSxzYW1wbGVzOnt2YWx1ZToxfSx3ZWlnaHRzOnt2YWx1ZTpuZXcgRmxvYXQzMkFycmF5KHQpfSxsYXRpdHVkaW5hbDp7dmFsdWU6ITF9LGRUaGV0YTp7dmFsdWU6MH0sbWlwSW50Ont2YWx1ZTowfSxwb2xlQXhpczp7dmFsdWU6bmV3IHFPdCgwLDEsMCl9LGlucHV0RW5jb2Rpbmc6e3ZhbHVlOkhHdFszZTNdfSxvdXRwdXRFbmNvZGluZzp7dmFsdWU6SEd0WzNlM119fSx2ZXJ0ZXhTaGFkZXI6IlxuXG5cdFx0cHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG5cdFx0cHJlY2lzaW9uIG1lZGl1bXAgaW50O1xuXG5cdFx0YXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG5cdFx0YXR0cmlidXRlIHZlYzIgdXY7XG5cdFx0YXR0cmlidXRlIGZsb2F0IGZhY2VJbmRleDtcblxuXHRcdHZhcnlpbmcgdmVjMyB2T3V0cHV0RGlyZWN0aW9uO1xuXG5cdFx0Ly8gUkggY29vcmRpbmF0ZSBzeXN0ZW07IFBNUkVNIGZhY2UtaW5kZXhpbmcgY29udmVudGlvblxuXHRcdHZlYzMgZ2V0RGlyZWN0aW9uKCB2ZWMyIHV2LCBmbG9hdCBmYWNlICkge1xuXG5cdFx0XHR1diA9IDIuMCAqIHV2IC0gMS4wO1xuXG5cdFx0XHR2ZWMzIGRpcmVjdGlvbiA9IHZlYzMoIHV2LCAxLjAgKTtcblxuXHRcdFx0aWYgKCBmYWNlID09IDAuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24gPSBkaXJlY3Rpb24uenl4OyAvLyAoIDEsIHYsIHUgKSBwb3MgeFxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDEuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24gPSBkaXJlY3Rpb24ueHp5O1xuXHRcdFx0XHRkaXJlY3Rpb24ueHogKj0gLTEuMDsgLy8gKCAtdSwgMSwgLXYgKSBwb3MgeVxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDIuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24ueCAqPSAtMS4wOyAvLyAoIC11LCB2LCAxICkgcG9zIHpcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSAzLjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uID0gZGlyZWN0aW9uLnp5eDtcblx0XHRcdFx0ZGlyZWN0aW9uLnh6ICo9IC0xLjA7IC8vICggLTEsIHYsIC11ICkgbmVnIHhcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSA0LjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uID0gZGlyZWN0aW9uLnh6eTtcblx0XHRcdFx0ZGlyZWN0aW9uLnh5ICo9IC0xLjA7IC8vICggLXUsIC0xLCB2ICkgbmVnIHlcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSA1LjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uLnogKj0gLTEuMDsgLy8gKCB1LCB2LCAtMSApIG5lZyB6XG5cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGRpcmVjdGlvbjtcblxuXHRcdH1cblxuXHRcdHZvaWQgbWFpbigpIHtcblxuXHRcdFx0dk91dHB1dERpcmVjdGlvbiA9IGdldERpcmVjdGlvbiggdXYsIGZhY2VJbmRleCApO1xuXHRcdFx0Z2xfUG9zaXRpb24gPSB2ZWM0KCBwb3NpdGlvbiwgMS4wICk7XG5cblx0XHR9XG5cdCIsZnJhZ21lbnRTaGFkZXI6IlxuXG5cdFx0XHRwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcblx0XHRcdHByZWNpc2lvbiBtZWRpdW1wIGludDtcblxuXHRcdFx0dmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247XG5cblx0XHRcdHVuaWZvcm0gc2FtcGxlcjJEIGVudk1hcDtcblx0XHRcdHVuaWZvcm0gaW50IHNhbXBsZXM7XG5cdFx0XHR1bmlmb3JtIGZsb2F0IHdlaWdodHNbIG4gXTtcblx0XHRcdHVuaWZvcm0gYm9vbCBsYXRpdHVkaW5hbDtcblx0XHRcdHVuaWZvcm0gZmxvYXQgZFRoZXRhO1xuXHRcdFx0dW5pZm9ybSBmbG9hdCBtaXBJbnQ7XG5cdFx0XHR1bmlmb3JtIHZlYzMgcG9sZUF4aXM7XG5cblx0XHRcdFxuXG5cdFx0dW5pZm9ybSBpbnQgaW5wdXRFbmNvZGluZztcblx0XHR1bmlmb3JtIGludCBvdXRwdXRFbmNvZGluZztcblxuXHRcdCNpbmNsdWRlIDxlbmNvZGluZ3NfcGFyc19mcmFnbWVudD5cblxuXHRcdHZlYzQgaW5wdXRUZXhlbFRvTGluZWFyKCB2ZWM0IHZhbHVlICkge1xuXG5cdFx0XHRpZiAoIGlucHV0RW5jb2RpbmcgPT0gMCApIHtcblxuXHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cblx0XHRcdH0gZWxzZSBpZiAoIGlucHV0RW5jb2RpbmcgPT0gMSApIHtcblxuXHRcdFx0XHRyZXR1cm4gc1JHQlRvTGluZWFyKCB2YWx1ZSApO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBpbnB1dEVuY29kaW5nID09IDIgKSB7XG5cblx0XHRcdFx0cmV0dXJuIFJHQkVUb0xpbmVhciggdmFsdWUgKTtcblxuXHRcdFx0fSBlbHNlIGlmICggaW5wdXRFbmNvZGluZyA9PSAzICkge1xuXG5cdFx0XHRcdHJldHVybiBSR0JNVG9MaW5lYXIoIHZhbHVlLCA3LjAgKTtcblxuXHRcdFx0fSBlbHNlIGlmICggaW5wdXRFbmNvZGluZyA9PSA0ICkge1xuXG5cdFx0XHRcdHJldHVybiBSR0JNVG9MaW5lYXIoIHZhbHVlLCAxNi4wICk7XG5cblx0XHRcdH0gZWxzZSBpZiAoIGlucHV0RW5jb2RpbmcgPT0gNSApIHtcblxuXHRcdFx0XHRyZXR1cm4gUkdCRFRvTGluZWFyKCB2YWx1ZSwgMjU2LjAgKTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRyZXR1cm4gR2FtbWFUb0xpbmVhciggdmFsdWUsIDIuMiApO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHR2ZWM0IGxpbmVhclRvT3V0cHV0VGV4ZWwoIHZlYzQgdmFsdWUgKSB7XG5cblx0XHRcdGlmICggb3V0cHV0RW5jb2RpbmcgPT0gMCApIHtcblxuXHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cblx0XHRcdH0gZWxzZSBpZiAoIG91dHB1dEVuY29kaW5nID09IDEgKSB7XG5cblx0XHRcdFx0cmV0dXJuIExpbmVhclRvc1JHQiggdmFsdWUgKTtcblxuXHRcdFx0fSBlbHNlIGlmICggb3V0cHV0RW5jb2RpbmcgPT0gMiApIHtcblxuXHRcdFx0XHRyZXR1cm4gTGluZWFyVG9SR0JFKCB2YWx1ZSApO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBvdXRwdXRFbmNvZGluZyA9PSAzICkge1xuXG5cdFx0XHRcdHJldHVybiBMaW5lYXJUb1JHQk0oIHZhbHVlLCA3LjAgKTtcblxuXHRcdFx0fSBlbHNlIGlmICggb3V0cHV0RW5jb2RpbmcgPT0gNCApIHtcblxuXHRcdFx0XHRyZXR1cm4gTGluZWFyVG9SR0JNKCB2YWx1ZSwgMTYuMCApO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBvdXRwdXRFbmNvZGluZyA9PSA1ICkge1xuXG5cdFx0XHRcdHJldHVybiBMaW5lYXJUb1JHQkQoIHZhbHVlLCAyNTYuMCApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdHJldHVybiBMaW5lYXJUb0dhbW1hKCB2YWx1ZSwgMi4yICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdHZlYzQgZW52TWFwVGV4ZWxUb0xpbmVhciggdmVjNCBjb2xvciApIHtcblxuXHRcdFx0cmV0dXJuIGlucHV0VGV4ZWxUb0xpbmVhciggY29sb3IgKTtcblxuXHRcdH1cblx0XG5cblx0XHRcdCNkZWZpbmUgRU5WTUFQX1RZUEVfQ1VCRV9VVlxuXHRcdFx0I2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD5cblxuXHRcdFx0dmVjMyBnZXRTYW1wbGUoIGZsb2F0IHRoZXRhLCB2ZWMzIGF4aXMgKSB7XG5cblx0XHRcdFx0ZmxvYXQgY29zVGhldGEgPSBjb3MoIHRoZXRhICk7XG5cdFx0XHRcdC8vIFJvZHJpZ3VlcycgYXhpcy1hbmdsZSByb3RhdGlvblxuXHRcdFx0XHR2ZWMzIHNhbXBsZURpcmVjdGlvbiA9IHZPdXRwdXREaXJlY3Rpb24gKiBjb3NUaGV0YVxuXHRcdFx0XHRcdCsgY3Jvc3MoIGF4aXMsIHZPdXRwdXREaXJlY3Rpb24gKSAqIHNpbiggdGhldGEgKVxuXHRcdFx0XHRcdCsgYXhpcyAqIGRvdCggYXhpcywgdk91dHB1dERpcmVjdGlvbiApICogKCAxLjAgLSBjb3NUaGV0YSApO1xuXG5cdFx0XHRcdHJldHVybiBiaWxpbmVhckN1YmVVViggZW52TWFwLCBzYW1wbGVEaXJlY3Rpb24sIG1pcEludCApO1xuXG5cdFx0XHR9XG5cblx0XHRcdHZvaWQgbWFpbigpIHtcblxuXHRcdFx0XHR2ZWMzIGF4aXMgPSBsYXRpdHVkaW5hbCA/IHBvbGVBeGlzIDogY3Jvc3MoIHBvbGVBeGlzLCB2T3V0cHV0RGlyZWN0aW9uICk7XG5cblx0XHRcdFx0aWYgKCBhbGwoIGVxdWFsKCBheGlzLCB2ZWMzKCAwLjAgKSApICkgKSB7XG5cblx0XHRcdFx0XHRheGlzID0gdmVjMyggdk91dHB1dERpcmVjdGlvbi56LCAwLjAsIC0gdk91dHB1dERpcmVjdGlvbi54ICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGF4aXMgPSBub3JtYWxpemUoIGF4aXMgKTtcblxuXHRcdFx0XHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCAwLjAsIDAuMCwgMC4wLCAxLjAgKTtcblx0XHRcdFx0Z2xfRnJhZ0NvbG9yLnJnYiArPSB3ZWlnaHRzWyAwIF0gKiBnZXRTYW1wbGUoIDAuMCwgYXhpcyApO1xuXG5cdFx0XHRcdGZvciAoIGludCBpID0gMTsgaSA8IG47IGkrKyApIHtcblxuXHRcdFx0XHRcdGlmICggaSA+PSBzYW1wbGVzICkge1xuXG5cdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGZsb2F0IHRoZXRhID0gZFRoZXRhICogZmxvYXQoIGkgKTtcblx0XHRcdFx0XHRnbF9GcmFnQ29sb3IucmdiICs9IHdlaWdodHNbIGkgXSAqIGdldFNhbXBsZSggLTEuMCAqIHRoZXRhLCBheGlzICk7XG5cdFx0XHRcdFx0Z2xfRnJhZ0NvbG9yLnJnYiArPSB3ZWlnaHRzWyBpIF0gKiBnZXRTYW1wbGUoIHRoZXRhLCBheGlzICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGdsX0ZyYWdDb2xvciA9IGxpbmVhclRvT3V0cHV0VGV4ZWwoIGdsX0ZyYWdDb2xvciApO1xuXG5cdFx0XHR9XG5cdFx0IixibGVuZGluZzowLGRlcHRoVGVzdDohMSxkZXB0aFdyaXRlOiExfSl9KSgyMCksdGhpcy5fZXF1aXJlY3RTaGFkZXI9bnVsbCx0aGlzLl9jdWJlbWFwU2hhZGVyPW51bGwsdGhpcy5fY29tcGlsZU1hdGVyaWFsKHRoaXMuX2JsdXJNYXRlcmlhbCl9ZnJvbVNjZW5lKHQsZT0wLG49LjEsaT0xMDApe1lHdD10aGlzLl9yZW5kZXJlci5nZXRSZW5kZXJUYXJnZXQoKTtjb25zdCByPXRoaXMuX2FsbG9jYXRlVGFyZ2V0cygpO3JldHVybiB0aGlzLl9zY2VuZVRvQ3ViZVVWKHQsbixpLHIpLGU+MCYmdGhpcy5fYmx1cihyLDAsMCxlKSx0aGlzLl9hcHBseVBNUkVNKHIpLHRoaXMuX2NsZWFudXAocikscn1mcm9tRXF1aXJlY3Rhbmd1bGFyKHQpe3JldHVybiB0aGlzLl9mcm9tVGV4dHVyZSh0KX1mcm9tQ3ViZW1hcCh0KXtyZXR1cm4gdGhpcy5fZnJvbVRleHR1cmUodCl9Y29tcGlsZUN1YmVtYXBTaGFkZXIoKXtudWxsPT09dGhpcy5fY3ViZW1hcFNoYWRlciYmKHRoaXMuX2N1YmVtYXBTaGFkZXI9aVd0KCksdGhpcy5fY29tcGlsZU1hdGVyaWFsKHRoaXMuX2N1YmVtYXBTaGFkZXIpKX1jb21waWxlRXF1aXJlY3Rhbmd1bGFyU2hhZGVyKCl7bnVsbD09PXRoaXMuX2VxdWlyZWN0U2hhZGVyJiYodGhpcy5fZXF1aXJlY3RTaGFkZXI9bld0KCksdGhpcy5fY29tcGlsZU1hdGVyaWFsKHRoaXMuX2VxdWlyZWN0U2hhZGVyKSl9ZGlzcG9zZSgpe3RoaXMuX2JsdXJNYXRlcmlhbC5kaXNwb3NlKCksbnVsbCE9PXRoaXMuX2N1YmVtYXBTaGFkZXImJnRoaXMuX2N1YmVtYXBTaGFkZXIuZGlzcG9zZSgpLG51bGwhPT10aGlzLl9lcXVpcmVjdFNoYWRlciYmdGhpcy5fZXF1aXJlY3RTaGFkZXIuZGlzcG9zZSgpO2ZvcihsZXQgdD0wO3Q8akd0Lmxlbmd0aDt0Kyspakd0W3RdLmRpc3Bvc2UoKX1fY2xlYW51cCh0KXt0aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldC5kaXNwb3NlKCksdGhpcy5fcmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KFlHdCksdC5zY2lzc29yVGVzdD0hMSxlV3QodCwwLDAsdC53aWR0aCx0LmhlaWdodCl9X2Zyb21UZXh0dXJlKHQpe1lHdD10aGlzLl9yZW5kZXJlci5nZXRSZW5kZXJUYXJnZXQoKTtjb25zdCBlPXRoaXMuX2FsbG9jYXRlVGFyZ2V0cyh0KTtyZXR1cm4gdGhpcy5fdGV4dHVyZVRvQ3ViZVVWKHQsZSksdGhpcy5fYXBwbHlQTVJFTShlKSx0aGlzLl9jbGVhbnVwKGUpLGV9X2FsbG9jYXRlVGFyZ2V0cyh0KXtjb25zdCBlPXttYWdGaWx0ZXI6Vkl0LG1pbkZpbHRlcjpWSXQsZ2VuZXJhdGVNaXBtYXBzOiExLHR5cGU6WUl0LGZvcm1hdDoxMDIzLGVuY29kaW5nOkpHdCh0KT90LmVuY29kaW5nOk1PdCxkZXB0aEJ1ZmZlcjohMX0sbj10V3QoZSk7cmV0dXJuIG4uZGVwdGhCdWZmZXI9IXQsdGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQ9dFd0KGUpLG59X2NvbXBpbGVNYXRlcmlhbCh0KXtjb25zdCBlPW5ldyBvRHQoakd0WzBdLHQpO3RoaXMuX3JlbmRlcmVyLmNvbXBpbGUoZSxVR3QpfV9zY2VuZVRvQ3ViZVVWKHQsZSxuLGkpe2NvbnN0IHI9bmV3IHBEdCg5MCwxLGUsbiksbz1bMSwtMSwxLDEsMSwxXSxhPVsxLDEsMSwtMSwtMSwtMV0scz10aGlzLl9yZW5kZXJlcixsPXMuYXV0b0NsZWFyLGM9cy5vdXRwdXRFbmNvZGluZyx1PXMudG9uZU1hcHBpbmc7cy5nZXRDbGVhckNvbG9yKHFHdCkscy50b25lTWFwcGluZz0wLHMub3V0cHV0RW5jb2Rpbmc9eE90LHMuYXV0b0NsZWFyPSExO2xldCBoPSExO2NvbnN0IGQ9dC5iYWNrZ3JvdW5kO2lmKGQpe2lmKGQuaXNDb2xvcil7Rkd0LmNvbG9yLmNvcHkoZCkuY29udmVydFNSR0JUb0xpbmVhcigpLHQuYmFja2dyb3VuZD1udWxsO2NvbnN0IGU9Wkd0KEZHdC5jb2xvcik7Rkd0Lm9wYWNpdHk9ZSxoPSEwfX1lbHNle0ZHdC5jb2xvci5jb3B5KHFHdCkuY29udmVydFNSR0JUb0xpbmVhcigpO2NvbnN0IHQ9Wkd0KEZHdC5jb2xvcik7Rkd0Lm9wYWNpdHk9dCxoPSEwfWZvcihsZXQgZT0wO2U8NjtlKyspe2NvbnN0IG49ZSUzOzA9PW4/KHIudXAuc2V0KDAsb1tlXSwwKSxyLmxvb2tBdChhW2VdLDAsMCkpOjE9PW4/KHIudXAuc2V0KDAsMCxvW2VdKSxyLmxvb2tBdCgwLGFbZV0sMCkpOihyLnVwLnNldCgwLG9bZV0sMCksci5sb29rQXQoMCwwLGFbZV0pKSxlV3QoaSxuKnpHdCxlPjI/ekd0OjAsekd0LHpHdCkscy5zZXRSZW5kZXJUYXJnZXQoaSksaCYmcy5yZW5kZXIoVkd0LHIpLHMucmVuZGVyKHQscil9cy50b25lTWFwcGluZz11LHMub3V0cHV0RW5jb2Rpbmc9YyxzLmF1dG9DbGVhcj1sfV90ZXh0dXJlVG9DdWJlVVYodCxlKXtjb25zdCBuPXRoaXMuX3JlbmRlcmVyO3QuaXNDdWJlVGV4dHVyZT9udWxsPT10aGlzLl9jdWJlbWFwU2hhZGVyJiYodGhpcy5fY3ViZW1hcFNoYWRlcj1pV3QoKSk6bnVsbD09dGhpcy5fZXF1aXJlY3RTaGFkZXImJih0aGlzLl9lcXVpcmVjdFNoYWRlcj1uV3QoKSk7Y29uc3QgaT10LmlzQ3ViZVRleHR1cmU/dGhpcy5fY3ViZW1hcFNoYWRlcjp0aGlzLl9lcXVpcmVjdFNoYWRlcixyPW5ldyBvRHQoakd0WzBdLGkpLG89aS51bmlmb3JtcztvLmVudk1hcC52YWx1ZT10LHQuaXNDdWJlVGV4dHVyZXx8by50ZXhlbFNpemUudmFsdWUuc2V0KDEvdC5pbWFnZS53aWR0aCwxL3QuaW1hZ2UuaGVpZ2h0KSxvLmlucHV0RW5jb2RpbmcudmFsdWU9SEd0W3QuZW5jb2RpbmddLG8ub3V0cHV0RW5jb2RpbmcudmFsdWU9SEd0W2UudGV4dHVyZS5lbmNvZGluZ10sZVd0KGUsMCwwLDMqekd0LDIqekd0KSxuLnNldFJlbmRlclRhcmdldChlKSxuLnJlbmRlcihyLFVHdCl9X2FwcGx5UE1SRU0odCl7Y29uc3QgZT10aGlzLl9yZW5kZXJlcixuPWUuYXV0b0NsZWFyO2UuYXV0b0NsZWFyPSExO2ZvcihsZXQgZT0xO2U8Qkd0O2UrKyl7Y29uc3Qgbj1NYXRoLnNxcnQoV0d0W2VdKldHdFtlXS1XR3RbZS0xXSpXR3RbZS0xXSk7dGhpcy5fYmx1cih0LGUtMSxlLG4sS0d0WyhlLTEpJUtHdC5sZW5ndGhdKX1lLmF1dG9DbGVhcj1ufV9ibHVyKHQsZSxuLGkscil7Y29uc3Qgbz10aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldDt0aGlzLl9oYWxmQmx1cih0LG8sZSxuLGksImxhdGl0dWRpbmFsIixyKSx0aGlzLl9oYWxmQmx1cihvLHQsbixuLGksImxvbmdpdHVkaW5hbCIscil9X2hhbGZCbHVyKHQsZSxuLGkscixvLGEpe2NvbnN0IHM9dGhpcy5fcmVuZGVyZXIsbD10aGlzLl9ibHVyTWF0ZXJpYWw7ImxhdGl0dWRpbmFsIiE9PW8mJiJsb25naXR1ZGluYWwiIT09byYmY29uc29sZS5lcnJvcigiYmx1ciBkaXJlY3Rpb24gbXVzdCBiZSBlaXRoZXIgbGF0aXR1ZGluYWwgb3IgbG9uZ2l0dWRpbmFsISIpO2NvbnN0IGM9bmV3IG9EdChqR3RbaV0sbCksdT1sLnVuaWZvcm1zLGg9R0d0W25dLTEsZD1pc0Zpbml0ZShyKT9NYXRoLlBJLygyKmgpOjIqTWF0aC5QSS8zOSxwPXIvZCxmPWlzRmluaXRlKHIpPzErTWF0aC5mbG9vcigzKnApOjIwO2Y+MjAmJmNvbnNvbGUud2Fybihgc2lnbWFSYWRpYW5zLCAke3J9LCBpcyB0b28gbGFyZ2UgYW5kIHdpbGwgY2xpcCwgYXMgaXQgcmVxdWVzdGVkICR7Zn0gc2FtcGxlcyB3aGVuIHRoZSBtYXhpbXVtIGlzIHNldCB0byAyMGApO2NvbnN0IG09W107bGV0IGc9MDtmb3IobGV0IHQ9MDt0PDIwOysrdCl7Y29uc3QgZT10L3Asbj1NYXRoLmV4cCgtZSplLzIpO20ucHVzaChuKSwwPT10P2crPW46dDxmJiYoZys9MipuKX1mb3IobGV0IHQ9MDt0PG0ubGVuZ3RoO3QrKyltW3RdPW1bdF0vZzt1LmVudk1hcC52YWx1ZT10LnRleHR1cmUsdS5zYW1wbGVzLnZhbHVlPWYsdS53ZWlnaHRzLnZhbHVlPW0sdS5sYXRpdHVkaW5hbC52YWx1ZT0ibGF0aXR1ZGluYWwiPT09byxhJiYodS5wb2xlQXhpcy52YWx1ZT1hKSx1LmRUaGV0YS52YWx1ZT1kLHUubWlwSW50LnZhbHVlPTgtbix1LmlucHV0RW5jb2RpbmcudmFsdWU9SEd0W3QudGV4dHVyZS5lbmNvZGluZ10sdS5vdXRwdXRFbmNvZGluZy52YWx1ZT1IR3RbdC50ZXh0dXJlLmVuY29kaW5nXTtjb25zdCBfPUdHdFtpXTtlV3QoZSwzKk1hdGgubWF4KDAsekd0LTIqXyksKDA9PT1pPzA6Mip6R3QpKzIqXyooaT40P2ktOCs0OjApLDMqXywyKl8pLHMuc2V0UmVuZGVyVGFyZ2V0KGUpLHMucmVuZGVyKGMsVUd0KX19LFBhcmFtZXRyaWNCdWZmZXJHZW9tZXRyeTpUVnQsUGFyYW1ldHJpY0dlb21ldHJ5OlRWdCxQYXJ0aWNsZTpmdW5jdGlvbiBUV3QodCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUGFydGljbGUgaGFzIGJlZW4gcmVuYW1lZCB0byBUSFJFRS5TcHJpdGUuIiksbmV3IEtIdCh0KX0sUGFydGljbGVCYXNpY01hdGVyaWFsOmZ1bmN0aW9uIENXdCh0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5QYXJ0aWNsZUJhc2ljTWF0ZXJpYWwgaGFzIGJlZW4gcmVuYW1lZCB0byBUSFJFRS5Qb2ludHNNYXRlcmlhbC4iKSxuZXcgQ0Z0KHQpfSxQYXJ0aWNsZVN5c3RlbTpmdW5jdGlvbiBBV3QodCxlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5QYXJ0aWNsZVN5c3RlbSBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLlBvaW50cy4iKSxuZXcgTkZ0KHQsZSl9LFBhcnRpY2xlU3lzdGVtTWF0ZXJpYWw6ZnVuY3Rpb24ga1d0KHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlBhcnRpY2xlU3lzdGVtTWF0ZXJpYWwgaGFzIGJlZW4gcmVuYW1lZCB0byBUSFJFRS5Qb2ludHNNYXRlcmlhbC4iKSxuZXcgQ0Z0KHQpfSxQYXRoOlVVdCxQZXJzcGVjdGl2ZUNhbWVyYTpwRHQsUGxhbmU6JFJ0LFBsYW5lQnVmZmVyR2VvbWV0cnk6TUR0LFBsYW5lR2VvbWV0cnk6TUR0LFBsYW5lSGVscGVyOmNsYXNzIGV4dGVuZHMgd0Z0e2NvbnN0cnVjdG9yKHQsZT0xLG49MTY3NzY5NjApe2NvbnN0IGk9bixyPW5ldyBWenQ7ci5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcga3p0KFsxLC0xLDEsLTEsMSwxLC0xLC0xLDEsMSwxLDEsLTEsMSwxLC0xLC0xLDEsMSwtMSwxLDEsMSwxLDAsMCwxLDAsMCwwXSwzKSksci5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSxzdXBlcihyLG5ldyBnRnQoe2NvbG9yOmksdG9uZU1hcHBlZDohMX0pKSx0aGlzLnR5cGU9IlBsYW5lSGVscGVyIix0aGlzLnBsYW5lPXQsdGhpcy5zaXplPWU7Y29uc3Qgbz1uZXcgVnp0O28uc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGt6dChbMSwxLDEsLTEsMSwxLC0xLC0xLDEsMSwxLDEsLTEsLTEsMSwxLC0xLDFdLDMpKSxvLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLHRoaXMuYWRkKG5ldyBvRHQobyxuZXcgX3p0KHtjb2xvcjppLG9wYWNpdHk6LjIsdHJhbnNwYXJlbnQ6ITAsZGVwdGhXcml0ZTohMSx0b25lTWFwcGVkOiExfSkpKX11cGRhdGVNYXRyaXhXb3JsZCh0KXtsZXQgZT0tdGhpcy5wbGFuZS5jb25zdGFudDtNYXRoLmFicyhlKTwxZS04JiYoZT0xZS04KSx0aGlzLnNjYWxlLnNldCguNSp0aGlzLnNpemUsLjUqdGhpcy5zaXplLGUpLHRoaXMuY2hpbGRyZW5bMF0ubWF0ZXJpYWwuc2lkZT1lPDA/MTowLHRoaXMubG9va0F0KHRoaXMucGxhbmUubm9ybWFsKSxzdXBlci51cGRhdGVNYXRyaXhXb3JsZCh0KX19LFBvaW50Q2xvdWQ6ZnVuY3Rpb24gTFd0KHQsZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUG9pbnRDbG91ZCBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLlBvaW50cy4iKSxuZXcgTkZ0KHQsZSl9LFBvaW50Q2xvdWRNYXRlcmlhbDpmdW5jdGlvbiBQV3QodCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUG9pbnRDbG91ZE1hdGVyaWFsIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuUG9pbnRzTWF0ZXJpYWwuIiksbmV3IENGdCh0KX0sUG9pbnRMaWdodDpLVXQsUG9pbnRMaWdodEhlbHBlcjpjbGFzcyBleHRlbmRzIG9EdHtjb25zdHJ1Y3Rvcih0LGUsbil7c3VwZXIobmV3IGtWdChlLDQsMiksbmV3IF96dCh7d2lyZWZyYW1lOiEwLGZvZzohMSx0b25lTWFwcGVkOiExfSkpLHRoaXMubGlnaHQ9dCx0aGlzLmxpZ2h0LnVwZGF0ZU1hdHJpeFdvcmxkKCksdGhpcy5jb2xvcj1uLHRoaXMudHlwZT0iUG9pbnRMaWdodEhlbHBlciIsdGhpcy5tYXRyaXg9dGhpcy5saWdodC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy51cGRhdGUoKX1kaXNwb3NlKCl7dGhpcy5nZW9tZXRyeS5kaXNwb3NlKCksdGhpcy5tYXRlcmlhbC5kaXNwb3NlKCl9dXBkYXRlKCl7dm9pZCAwIT09dGhpcy5jb2xvcj90aGlzLm1hdGVyaWFsLmNvbG9yLnNldCh0aGlzLmNvbG9yKTp0aGlzLm1hdGVyaWFsLmNvbG9yLmNvcHkodGhpcy5saWdodC5jb2xvcil9fSxQb2ludHM6TkZ0LFBvaW50c01hdGVyaWFsOkNGdCxQb2xhckdyaWRIZWxwZXI6Y2xhc3MgZXh0ZW5kcyBFRnR7Y29uc3RydWN0b3IodD0xMCxlPTE2LG49OCxpPTY0LHI9NDQ3MzkyNCxvPTg5NDc4NDgpe3I9bmV3IHB6dChyKSxvPW5ldyBwenQobyk7Y29uc3QgYT1bXSxzPVtdO2ZvcihsZXQgbj0wO248PWU7bisrKXtjb25zdCBpPW4vZSooMipNYXRoLlBJKSxsPU1hdGguc2luKGkpKnQsYz1NYXRoLmNvcyhpKSp0O2EucHVzaCgwLDAsMCksYS5wdXNoKGwsMCxjKTtjb25zdCB1PTEmbj9yOm87cy5wdXNoKHUucix1LmcsdS5iKSxzLnB1c2godS5yLHUuZyx1LmIpfWZvcihsZXQgZT0wO2U8PW47ZSsrKXtjb25zdCBsPTEmZT9yOm8sYz10LXQvbiplO2ZvcihsZXQgdD0wO3Q8aTt0Kyspe2xldCBlPXQvaSooMipNYXRoLlBJKSxuPU1hdGguc2luKGUpKmMscj1NYXRoLmNvcyhlKSpjO2EucHVzaChuLDAscikscy5wdXNoKGwucixsLmcsbC5iKSxlPSh0KzEpL2kqKDIqTWF0aC5QSSksbj1NYXRoLnNpbihlKSpjLHI9TWF0aC5jb3MoZSkqYyxhLnB1c2gobiwwLHIpLHMucHVzaChsLnIsbC5nLGwuYil9fWNvbnN0IGw9bmV3IFZ6dDtsLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBrenQoYSwzKSksbC5zZXRBdHRyaWJ1dGUoImNvbG9yIixuZXcga3p0KHMsMykpLHN1cGVyKGwsbmV3IGdGdCh7dmVydGV4Q29sb3JzOiEwLHRvbmVNYXBwZWQ6ITF9KSksdGhpcy50eXBlPSJQb2xhckdyaWRIZWxwZXIifX0sUG9seWhlZHJvbkJ1ZmZlckdlb21ldHJ5OlZGdCxQb2x5aGVkcm9uR2VvbWV0cnk6VkZ0LFBvc2l0aW9uYWxBdWRpbzpjbGFzcyBleHRlbmRzIFBqdHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLnBhbm5lcj10aGlzLmNvbnRleHQuY3JlYXRlUGFubmVyKCksdGhpcy5wYW5uZXIucGFubmluZ01vZGVsPSJIUlRGIix0aGlzLnBhbm5lci5jb25uZWN0KHRoaXMuZ2Fpbil9Z2V0T3V0cHV0KCl7cmV0dXJuIHRoaXMucGFubmVyfWdldFJlZkRpc3RhbmNlKCl7cmV0dXJuIHRoaXMucGFubmVyLnJlZkRpc3RhbmNlfXNldFJlZkRpc3RhbmNlKHQpe3JldHVybiB0aGlzLnBhbm5lci5yZWZEaXN0YW5jZT10LHRoaXN9Z2V0Um9sbG9mZkZhY3Rvcigpe3JldHVybiB0aGlzLnBhbm5lci5yb2xsb2ZmRmFjdG9yfXNldFJvbGxvZmZGYWN0b3IodCl7cmV0dXJuIHRoaXMucGFubmVyLnJvbGxvZmZGYWN0b3I9dCx0aGlzfWdldERpc3RhbmNlTW9kZWwoKXtyZXR1cm4gdGhpcy5wYW5uZXIuZGlzdGFuY2VNb2RlbH1zZXREaXN0YW5jZU1vZGVsKHQpe3JldHVybiB0aGlzLnBhbm5lci5kaXN0YW5jZU1vZGVsPXQsdGhpc31nZXRNYXhEaXN0YW5jZSgpe3JldHVybiB0aGlzLnBhbm5lci5tYXhEaXN0YW5jZX1zZXRNYXhEaXN0YW5jZSh0KXtyZXR1cm4gdGhpcy5wYW5uZXIubWF4RGlzdGFuY2U9dCx0aGlzfXNldERpcmVjdGlvbmFsQ29uZSh0LGUsbil7cmV0dXJuIHRoaXMucGFubmVyLmNvbmVJbm5lckFuZ2xlPXQsdGhpcy5wYW5uZXIuY29uZU91dGVyQW5nbGU9ZSx0aGlzLnBhbm5lci5jb25lT3V0ZXJHYWluPW4sdGhpc311cGRhdGVNYXRyaXhXb3JsZCh0KXtpZihzdXBlci51cGRhdGVNYXRyaXhXb3JsZCh0KSwhMD09PXRoaXMuaGFzUGxheWJhY2tDb250cm9sJiYhMT09PXRoaXMuaXNQbGF5aW5nKXJldHVybjt0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZShOanQsSWp0LE9qdCksUmp0LnNldCgwLDAsMSkuYXBwbHlRdWF0ZXJuaW9uKElqdCk7Y29uc3QgZT10aGlzLnBhbm5lcjtpZihlLnBvc2l0aW9uWCl7Y29uc3QgdD10aGlzLmNvbnRleHQuY3VycmVudFRpbWUrdGhpcy5saXN0ZW5lci50aW1lRGVsdGE7ZS5wb3NpdGlvblgubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoTmp0LngsdCksZS5wb3NpdGlvblkubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoTmp0LnksdCksZS5wb3NpdGlvbloubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoTmp0LnosdCksZS5vcmllbnRhdGlvblgubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoUmp0LngsdCksZS5vcmllbnRhdGlvblkubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoUmp0LnksdCksZS5vcmllbnRhdGlvbloubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoUmp0LnosdCl9ZWxzZSBlLnNldFBvc2l0aW9uKE5qdC54LE5qdC55LE5qdC56KSxlLnNldE9yaWVudGF0aW9uKFJqdC54LFJqdC55LFJqdC56KX19LFByb3BlcnR5QmluZGluZzpYanQsUHJvcGVydHlNaXhlcjpEanQsUXVhZHJhdGljQmV6aWVyQ3VydmU6RFV0LFF1YWRyYXRpY0JlemllckN1cnZlMzpCVXQsUXVhdGVybmlvbjpXT3QsUXVhdGVybmlvbktleWZyYW1lVHJhY2s6clV0LFF1YXRlcm5pb25MaW5lYXJJbnRlcnBvbGFudDppVXQsUkVWSVNJT046Q0l0LFJHQkFEZXB0aFBhY2tpbmc6MzIwMSxSR0JBRm9ybWF0OnRPdCxSR0JBSW50ZWdlckZvcm1hdDoxMDMzLFJHQkFfQVNUQ18xMHgxMF9Gb3JtYXQ6Mzc4MTksUkdCQV9BU1RDXzEweDVfRm9ybWF0OjM3ODE2LFJHQkFfQVNUQ18xMHg2X0Zvcm1hdDozNzgxNyxSR0JBX0FTVENfMTB4OF9Gb3JtYXQ6Mzc4MTgsUkdCQV9BU1RDXzEyeDEwX0Zvcm1hdDozNzgyMCxSR0JBX0FTVENfMTJ4MTJfRm9ybWF0OjM3ODIxLFJHQkFfQVNUQ180eDRfRm9ybWF0OjM3ODA4LFJHQkFfQVNUQ181eDRfRm9ybWF0OjM3ODA5LFJHQkFfQVNUQ181eDVfRm9ybWF0OjM3ODEwLFJHQkFfQVNUQ182eDVfRm9ybWF0OjM3ODExLFJHQkFfQVNUQ182eDZfRm9ybWF0OjM3ODEyLFJHQkFfQVNUQ184eDVfRm9ybWF0OjM3ODEzLFJHQkFfQVNUQ184eDZfRm9ybWF0OjM3ODE0LFJHQkFfQVNUQ184eDhfRm9ybWF0OjM3ODE1LFJHQkFfQlBUQ19Gb3JtYXQ6MzY0OTIsUkdCQV9FVEMyX0VBQ19Gb3JtYXQ6ZE90LFJHQkFfUFZSVENfMkJQUFYxX0Zvcm1hdDp1T3QsUkdCQV9QVlJUQ180QlBQVjFfRm9ybWF0OmNPdCxSR0JBX1MzVENfRFhUMV9Gb3JtYXQ6ck90LFJHQkFfUzNUQ19EWFQzX0Zvcm1hdDpvT3QsUkdCQV9TM1RDX0RYVDVfRm9ybWF0OmFPdCxSR0JERW5jb2Rpbmc6Q090LFJHQkVFbmNvZGluZzpNT3QsUkdCRUZvcm1hdDoxMDIzLFJHQkZvcm1hdDpRSXQsUkdCSW50ZWdlckZvcm1hdDoxMDMyLFJHQk0xNkVuY29kaW5nOlRPdCxSR0JNN0VuY29kaW5nOkVPdCxSR0JfRVRDMV9Gb3JtYXQ6MzYxOTYsUkdCX0VUQzJfRm9ybWF0OmhPdCxSR0JfUFZSVENfMkJQUFYxX0Zvcm1hdDpsT3QsUkdCX1BWUlRDXzRCUFBWMV9Gb3JtYXQ6c090LFJHQl9TM1RDX0RYVDFfRm9ybWF0OmlPdCxSR0Zvcm1hdDoxMDMwLFJHSW50ZWdlckZvcm1hdDoxMDMxLFJhd1NoYWRlck1hdGVyaWFsOkJWdCxSYXk6dlJ0LFJheWNhc3RlcjplR3QsUmVjdEFyZWFMaWdodDplanQsUmVkRm9ybWF0OjEwMjgsUmVkSW50ZWdlckZvcm1hdDoxMDI5LFJlaW5oYXJkVG9uZU1hcHBpbmc6MixSZXBlYXRXcmFwcGluZzpCSXQsUmVwbGFjZVN0ZW5jaWxPcDo3NjgxLFJldmVyc2VTdWJ0cmFjdEVxdWF0aW9uOjEwMixSaW5nQnVmZmVyR2VvbWV0cnk6Q1Z0LFJpbmdHZW9tZXRyeTpDVnQsU1JHQjhfQUxQSEE4X0FTVENfMTB4MTBfRm9ybWF0OjM3ODUxLFNSR0I4X0FMUEhBOF9BU1RDXzEweDVfRm9ybWF0OjM3ODQ4LFNSR0I4X0FMUEhBOF9BU1RDXzEweDZfRm9ybWF0OjM3ODQ5LFNSR0I4X0FMUEhBOF9BU1RDXzEweDhfRm9ybWF0OjM3ODUwLFNSR0I4X0FMUEhBOF9BU1RDXzEyeDEwX0Zvcm1hdDozNzg1MixTUkdCOF9BTFBIQThfQVNUQ18xMngxMl9Gb3JtYXQ6Mzc4NTMsU1JHQjhfQUxQSEE4X0FTVENfNHg0X0Zvcm1hdDozNzg0MCxTUkdCOF9BTFBIQThfQVNUQ181eDRfRm9ybWF0OjM3ODQxLFNSR0I4X0FMUEhBOF9BU1RDXzV4NV9Gb3JtYXQ6Mzc4NDIsU1JHQjhfQUxQSEE4X0FTVENfNng1X0Zvcm1hdDozNzg0MyxTUkdCOF9BTFBIQThfQVNUQ182eDZfRm9ybWF0OjM3ODQ0LFNSR0I4X0FMUEhBOF9BU1RDXzh4NV9Gb3JtYXQ6Mzc4NDUsU1JHQjhfQUxQSEE4X0FTVENfOHg2X0Zvcm1hdDozNzg0NixTUkdCOF9BTFBIQThfQVNUQ184eDhfRm9ybWF0OjM3ODQ3LFNjZW5lOk5IdCxTY2VuZVV0aWxzOmxXdCxTaGFkZXJDaHVuazpFRHQsU2hhZGVyTGliOkNEdCxTaGFkZXJNYXRlcmlhbDpoRHQsU2hhZG93TWF0ZXJpYWw6RFZ0LFNoYXBlOmpVdCxTaGFwZUJ1ZmZlckdlb21ldHJ5OkFWdCxTaGFwZUdlb21ldHJ5OkFWdCxTaGFwZVBhdGg6cGp0LFNoYXBlVXRpbHM6eVZ0LFNob3J0VHlwZToxMDExLFNrZWxldG9uOnVGdCxTa2VsZXRvbkhlbHBlcjptR3QsU2tpbm5lZE1lc2g6YUZ0LFNtb290aFNoYWRpbmc6MixTcGhlcmU6aFJ0LFNwaGVyZUJ1ZmZlckdlb21ldHJ5OmtWdCxTcGhlcmVHZW9tZXRyeTprVnQsU3BoZXJpY2FsOnJHdCxTcGhlcmljYWxIYXJtb25pY3MzOm5qdCxTcGxpbmU6YVd0LFNwbGluZUN1cnZlOkhVdCxTcGxpbmVDdXJ2ZTM6b1d0LFNwb3RMaWdodDpYVXQsU3BvdExpZ2h0SGVscGVyOmNsYXNzIGV4dGVuZHMgV1J0e2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIoKSx0aGlzLmxpZ2h0PXQsdGhpcy5saWdodC51cGRhdGVNYXRyaXhXb3JsZCgpLHRoaXMubWF0cml4PXQubWF0cml4V29ybGQsdGhpcy5tYXRyaXhBdXRvVXBkYXRlPSExLHRoaXMuY29sb3I9ZTtjb25zdCBuPW5ldyBWenQsaT1bMCwwLDAsMCwwLDEsMCwwLDAsMSwwLDEsMCwwLDAsLTEsMCwxLDAsMCwwLDAsMSwxLDAsMCwwLDAsLTEsMV07Zm9yKGxldCB0PTAsZT0xLG49MzI7dDxuO3QrKyxlKyspe2NvbnN0IHI9dC9uKk1hdGguUEkqMixvPWUvbipNYXRoLlBJKjI7aS5wdXNoKE1hdGguY29zKHIpLE1hdGguc2luKHIpLDEsTWF0aC5jb3MobyksTWF0aC5zaW4obyksMSl9bi5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcga3p0KGksMykpO2NvbnN0IHI9bmV3IGdGdCh7Zm9nOiExLHRvbmVNYXBwZWQ6ITF9KTt0aGlzLmNvbmU9bmV3IEVGdChuLHIpLHRoaXMuYWRkKHRoaXMuY29uZSksdGhpcy51cGRhdGUoKX1kaXNwb3NlKCl7dGhpcy5jb25lLmdlb21ldHJ5LmRpc3Bvc2UoKSx0aGlzLmNvbmUubWF0ZXJpYWwuZGlzcG9zZSgpfXVwZGF0ZSgpe3RoaXMubGlnaHQudXBkYXRlTWF0cml4V29ybGQoKTtjb25zdCB0PXRoaXMubGlnaHQuZGlzdGFuY2U/dGhpcy5saWdodC5kaXN0YW5jZToxZTMsZT10Kk1hdGgudGFuKHRoaXMubGlnaHQuYW5nbGUpO3RoaXMuY29uZS5zY2FsZS5zZXQoZSxlLHQpLGhHdC5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5saWdodC50YXJnZXQubWF0cml4V29ybGQpLHRoaXMuY29uZS5sb29rQXQoaEd0KSx2b2lkIDAhPT10aGlzLmNvbG9yP3RoaXMuY29uZS5tYXRlcmlhbC5jb2xvci5zZXQodGhpcy5jb2xvcik6dGhpcy5jb25lLm1hdGVyaWFsLmNvbG9yLmNvcHkodGhpcy5saWdodC5jb2xvcil9fSxTcHJpdGU6S0h0LFNwcml0ZU1hdGVyaWFsOnpIdCxTcmNBbHBoYUZhY3RvcjoyMDQsU3JjQWxwaGFTYXR1cmF0ZUZhY3RvcjoyMTAsU3JjQ29sb3JGYWN0b3I6MjAyLFN0YXRpY0NvcHlVc2FnZTozNTA0NixTdGF0aWNEcmF3VXNhZ2U6a090LFN0YXRpY1JlYWRVc2FnZTozNTA0NSxTdGVyZW9DYW1lcmE6TWp0LFN0cmVhbUNvcHlVc2FnZTozNTA0MixTdHJlYW1EcmF3VXNhZ2U6MzUwNDAsU3RyZWFtUmVhZFVzYWdlOjM1MDQxLFN0cmluZ0tleWZyYW1lVHJhY2s6b1V0LFN1YnRyYWN0RXF1YXRpb246MTAxLFN1YnRyYWN0aXZlQmxlbmRpbmc6MyxUT1VDSDprSXQsVGFuZ2VudFNwYWNlTm9ybWFsTWFwOjAsVGV0cmFoZWRyb25CdWZmZXJHZW9tZXRyeTpMVnQsVGV0cmFoZWRyb25HZW9tZXRyeTpMVnQsVGV4dEJ1ZmZlckdlb21ldHJ5OlBWdCxUZXh0R2VvbWV0cnk6UFZ0LFRleHR1cmU6Vk90LFRleHR1cmVMb2FkZXI6YlV0LFRvcnVzQnVmZmVyR2VvbWV0cnk6TlZ0LFRvcnVzR2VvbWV0cnk6TlZ0LFRvcnVzS25vdEJ1ZmZlckdlb21ldHJ5OklWdCxUb3J1c0tub3RHZW9tZXRyeTpJVnQsVHJpYW5nbGU6YXp0LFRyaWFuZ2xlRmFuRHJhd01vZGU6MixUcmlhbmdsZVN0cmlwRHJhd01vZGU6MSxUcmlhbmdsZXNEcmF3TW9kZTowLFR1YmVCdWZmZXJHZW9tZXRyeTpPVnQsVHViZUdlb21ldHJ5Ok9WdCxVVk1hcHBpbmc6UEl0LFVpbnQxNkF0dHJpYnV0ZTpmdW5jdGlvbiBOV3QodCxlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5VaW50MTZBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5VaW50MTZCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLiIpLG5ldyBFenQodCxlKX0sVWludDE2QnVmZmVyQXR0cmlidXRlOkV6dCxVaW50MzJBdHRyaWJ1dGU6ZnVuY3Rpb24gSVd0KHQsZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVWludDMyQXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuVWludDMyQnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4iKSxuZXcgQ3p0KHQsZSl9LFVpbnQzMkJ1ZmZlckF0dHJpYnV0ZTpDenQsVWludDhBdHRyaWJ1dGU6ZnVuY3Rpb24gT1d0KHQsZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVWludDhBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5VaW50OEJ1ZmZlckF0dHJpYnV0ZSgpIGluc3RlYWQuIiksbmV3IHd6dCh0LGUpfSxVaW50OEJ1ZmZlckF0dHJpYnV0ZTp3enQsVWludDhDbGFtcGVkQXR0cmlidXRlOmZ1bmN0aW9uIFJXdCh0LGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlVpbnQ4Q2xhbXBlZEF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLlVpbnQ4Q2xhbXBlZEJ1ZmZlckF0dHJpYnV0ZSgpIGluc3RlYWQuIiksbmV3IFN6dCh0LGUpfSxVaW50OENsYW1wZWRCdWZmZXJBdHRyaWJ1dGU6U3p0LFVuaWZvcm06Smp0LFVuaWZvcm1zTGliOlREdCxVbmlmb3Jtc1V0aWxzOnVEdCxVbnNpZ25lZEJ5dGVUeXBlOllJdCxVbnNpZ25lZEludDI0OFR5cGU6Skl0LFVuc2lnbmVkSW50VHlwZTokSXQsVW5zaWduZWRTaG9ydDQ0NDRUeXBlOjEwMTcsVW5zaWduZWRTaG9ydDU1NTFUeXBlOjEwMTgsVW5zaWduZWRTaG9ydDU2NVR5cGU6MTAxOSxVbnNpZ25lZFNob3J0VHlwZTpYSXQsVlNNU2hhZG93TWFwOjMsVmVjdG9yMjp6T3QsVmVjdG9yMzpxT3QsVmVjdG9yNDpqT3QsVmVjdG9yS2V5ZnJhbWVUcmFjazphVXQsVmVydGV4OmZ1bmN0aW9uIHpXdCh0LGUsbil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVydGV4IGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5WZWN0b3IzIGluc3RlYWQuIiksbmV3IHFPdCh0LGUsbil9LFZlcnRleENvbG9yczoyLFZpZGVvVGV4dHVyZTpPRnQsV2ViR0wxUmVuZGVyZXI6a0h0LFdlYkdMQ3ViZVJlbmRlclRhcmdldDpfRHQsV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldDpjbGFzcyBleHRlbmRzIEdPdHtjb25zdHJ1Y3Rvcih0LGUsbil7c3VwZXIodCxlLG4pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpc1dlYkdMTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQiLHt2YWx1ZTohMH0pLHRoaXMuc2FtcGxlcz00fWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMuc2FtcGxlcz10LnNhbXBsZXMsdGhpc319LFdlYkdMUmVuZGVyVGFyZ2V0OkdPdCxXZWJHTFJlbmRlclRhcmdldEN1YmU6ZnVuY3Rpb24gRFd0KHQsZSxuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldEN1YmUoIHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMgKSBpcyBub3cgV2ViR0xDdWJlUmVuZGVyVGFyZ2V0KCBzaXplLCBvcHRpb25zICkuIiksbmV3IF9EdCh0LG4pfSxXZWJHTFJlbmRlcmVyOkFIdCxXZWJHTFV0aWxzOndIdCxXaXJlZnJhbWVHZW9tZXRyeTpSVnQsV2lyZWZyYW1lSGVscGVyOmZ1bmN0aW9uIEJXdCh0LGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldpcmVmcmFtZUhlbHBlciBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuV2lyZWZyYW1lR2VvbWV0cnkgaW5zdGVhZC4iKSxuZXcgRUZ0KG5ldyBSVnQodC5nZW9tZXRyeSksbmV3IGdGdCh7Y29sb3I6dm9pZCAwIT09ZT9lOjE2Nzc3MjE1fSkpfSxXcmFwQXJvdW5kRW5kaW5nOnlPdCxYSFJMb2FkZXI6ZnVuY3Rpb24gSFd0KHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlhIUkxvYWRlciBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLkZpbGVMb2FkZXIuIiksbmV3IGZVdCh0KX0sWmVyb0N1cnZhdHVyZUVuZGluZzpnT3QsWmVyb0ZhY3RvcjoyMDAsWmVyb1Nsb3BlRW5kaW5nOl9PdCxaZXJvU3RlbmNpbE9wOjAsc1JHQkVuY29kaW5nOndPdH0pLEZXdD1mdW5jdGlvbih0LGUpe3ZhciBuLGkscixvLGEsczt2b2lkIDA9PT1lJiZjb25zb2xlLndhcm4oJ1RIUkVFLk9yYml0Q29udHJvbHM6IFRoZSBzZWNvbmQgcGFyYW1ldGVyICJkb21FbGVtZW50IiBpcyBub3cgbWFuZGF0b3J5LicpLGU9PT1kb2N1bWVudCYmY29uc29sZS5lcnJvcignVEhSRUUuT3JiaXRDb250cm9sczogImRvY3VtZW50IiBzaG91bGQgbm90IGJlIHVzZWQgYXMgdGhlIHRhcmdldCAiZG9tRWxlbWVudCIuIFBsZWFzZSB1c2UgInJlbmRlcmVyLmRvbUVsZW1lbnQiIGluc3RlYWQuJyksdGhpcy5vYmplY3Q9dCx0aGlzLmRvbUVsZW1lbnQ9ZSx0aGlzLmVuYWJsZWQ9ITAsdGhpcy50YXJnZXQ9bmV3IHFPdCx0aGlzLm1pbkRpc3RhbmNlPTAsdGhpcy5tYXhEaXN0YW5jZT0xLzAsdGhpcy5taW5ab29tPTAsdGhpcy5tYXhab29tPTEvMCx0aGlzLm1pblBvbGFyQW5nbGU9MCx0aGlzLm1heFBvbGFyQW5nbGU9TWF0aC5QSSx0aGlzLm1pbkF6aW11dGhBbmdsZT0tMS8wLHRoaXMubWF4QXppbXV0aEFuZ2xlPTEvMCx0aGlzLmVuYWJsZURhbXBpbmc9ITEsdGhpcy5kYW1waW5nRmFjdG9yPS4wNSx0aGlzLmVuYWJsZVpvb209ITAsdGhpcy56b29tU3BlZWQ9MSx0aGlzLmVuYWJsZVJvdGF0ZT0hMCx0aGlzLnJvdGF0ZVNwZWVkPTEsdGhpcy5lbmFibGVQYW49ITAsdGhpcy5wYW5TcGVlZD0xLHRoaXMuc2NyZWVuU3BhY2VQYW5uaW5nPSEwLHRoaXMua2V5UGFuU3BlZWQ9Nyx0aGlzLmF1dG9Sb3RhdGU9ITEsdGhpcy5hdXRvUm90YXRlU3BlZWQ9Mix0aGlzLmtleXM9e0xFRlQ6MzcsVVA6MzgsUklHSFQ6MzksQk9UVE9NOjQwfSx0aGlzLm1vdXNlQnV0dG9ucz17TEVGVDpBSXQuUk9UQVRFLE1JRERMRTpBSXQuRE9MTFksUklHSFQ6QUl0LlBBTn0sdGhpcy50b3VjaGVzPXtPTkU6a0l0LlJPVEFURSxUV086a0l0LkRPTExZX1BBTn0sdGhpcy50YXJnZXQwPXRoaXMudGFyZ2V0LmNsb25lKCksdGhpcy5wb3NpdGlvbjA9dGhpcy5vYmplY3QucG9zaXRpb24uY2xvbmUoKSx0aGlzLnpvb20wPXRoaXMub2JqZWN0Lnpvb20sdGhpcy5fZG9tRWxlbWVudEtleUV2ZW50cz1udWxsLHRoaXMuZ2V0UG9sYXJBbmdsZT1mdW5jdGlvbigpe3JldHVybiBtLnBoaX0sdGhpcy5nZXRBemltdXRoYWxBbmdsZT1mdW5jdGlvbigpe3JldHVybiBtLnRoZXRhfSx0aGlzLmxpc3RlblRvS2V5RXZlbnRzPWZ1bmN0aW9uKHQpe3QuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsSyksdGhpcy5fZG9tRWxlbWVudEtleUV2ZW50cz10fSx0aGlzLnNhdmVTdGF0ZT1mdW5jdGlvbigpe2wudGFyZ2V0MC5jb3B5KGwudGFyZ2V0KSxsLnBvc2l0aW9uMC5jb3B5KGwub2JqZWN0LnBvc2l0aW9uKSxsLnpvb20wPWwub2JqZWN0Lnpvb219LHRoaXMucmVzZXQ9ZnVuY3Rpb24oKXtsLnRhcmdldC5jb3B5KGwudGFyZ2V0MCksbC5vYmplY3QucG9zaXRpb24uY29weShsLnBvc2l0aW9uMCksbC5vYmplY3Quem9vbT1sLnpvb20wLGwub2JqZWN0LnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKSxsLmRpc3BhdGNoRXZlbnQoYyksbC51cGRhdGUoKSxwPWQuTk9ORX0sdGhpcy51cGRhdGU9KG49bmV3IHFPdCxpPShuZXcgV090KS5zZXRGcm9tVW5pdFZlY3RvcnModC51cCxuZXcgcU90KDAsMSwwKSkscj1pLmNsb25lKCkuaW52ZXJ0KCksbz1uZXcgcU90LGE9bmV3IFdPdCxzPTIqTWF0aC5QSSxmdW5jdGlvbiB0KCl7dmFyIGU9bC5vYmplY3QucG9zaXRpb247bi5jb3B5KGUpLnN1YihsLnRhcmdldCksbi5hcHBseVF1YXRlcm5pb24oaSksbS5zZXRGcm9tVmVjdG9yMyhuKSxsLmF1dG9Sb3RhdGUmJnA9PT1kLk5PTkUmJkwoKGZ1bmN0aW9uIHUoKXtyZXR1cm4gMipNYXRoLlBJLzYwLzYwKmwuYXV0b1JvdGF0ZVNwZWVkfSkoKSksbC5lbmFibGVEYW1waW5nPyhtLnRoZXRhKz1nLnRoZXRhKmwuZGFtcGluZ0ZhY3RvcixtLnBoaSs9Zy5waGkqbC5kYW1waW5nRmFjdG9yKToobS50aGV0YSs9Zy50aGV0YSxtLnBoaSs9Zy5waGkpO3ZhciBoPWwubWluQXppbXV0aEFuZ2xlLGI9bC5tYXhBemltdXRoQW5nbGU7cmV0dXJuIGlzRmluaXRlKGgpJiZpc0Zpbml0ZShiKSYmKGg8LU1hdGguUEk/aCs9czpoPk1hdGguUEkmJihoLT1zKSxiPC1NYXRoLlBJP2IrPXM6Yj5NYXRoLlBJJiYoYi09cyksbS50aGV0YT1oPD1iP01hdGgubWF4KGgsTWF0aC5taW4oYixtLnRoZXRhKSk6bS50aGV0YT4oaCtiKS8yP01hdGgubWF4KGgsbS50aGV0YSk6TWF0aC5taW4oYixtLnRoZXRhKSksbS5waGk9TWF0aC5tYXgobC5taW5Qb2xhckFuZ2xlLE1hdGgubWluKGwubWF4UG9sYXJBbmdsZSxtLnBoaSkpLG0ubWFrZVNhZmUoKSxtLnJhZGl1cyo9XyxtLnJhZGl1cz1NYXRoLm1heChsLm1pbkRpc3RhbmNlLE1hdGgubWluKGwubWF4RGlzdGFuY2UsbS5yYWRpdXMpKSwhMD09PWwuZW5hYmxlRGFtcGluZz9sLnRhcmdldC5hZGRTY2FsZWRWZWN0b3IoeSxsLmRhbXBpbmdGYWN0b3IpOmwudGFyZ2V0LmFkZCh5KSxuLnNldEZyb21TcGhlcmljYWwobSksbi5hcHBseVF1YXRlcm5pb24ociksZS5jb3B5KGwudGFyZ2V0KS5hZGQobiksbC5vYmplY3QubG9va0F0KGwudGFyZ2V0KSwhMD09PWwuZW5hYmxlRGFtcGluZz8oZy50aGV0YSo9MS1sLmRhbXBpbmdGYWN0b3IsZy5waGkqPTEtbC5kYW1waW5nRmFjdG9yLHkubXVsdGlwbHlTY2FsYXIoMS1sLmRhbXBpbmdGYWN0b3IpKTooZy5zZXQoMCwwLDApLHkuc2V0KDAsMCwwKSksXz0xLCEhKHZ8fG8uZGlzdGFuY2VUb1NxdWFyZWQobC5vYmplY3QucG9zaXRpb24pPmZ8fDgqKDEtYS5kb3QobC5vYmplY3QucXVhdGVybmlvbikpPmYpJiYobC5kaXNwYXRjaEV2ZW50KGMpLG8uY29weShsLm9iamVjdC5wb3NpdGlvbiksYS5jb3B5KGwub2JqZWN0LnF1YXRlcm5pb24pLHY9ITEsITApfSksdGhpcy5kaXNwb3NlPWZ1bmN0aW9uKCl7bC5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51Iix0dCksbC5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIixxKSxsLmRvbUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2hlZWwiLCQpLGwuZG9tRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0IixaKSxsLmRvbUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLFEpLGwuZG9tRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLEopLGwuZG9tRWxlbWVudC5vd25lckRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIixZKSxsLmRvbUVsZW1lbnQub3duZXJEb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLFgpLG51bGwhPT1sLl9kb21FbGVtZW50S2V5RXZlbnRzJiZsLl9kb21FbGVtZW50S2V5RXZlbnRzLnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLEspfTt2YXIgbD10aGlzLGM9e3R5cGU6ImNoYW5nZSJ9LHU9e3R5cGU6InN0YXJ0In0saD17dHlwZToiZW5kIn0sZD17Tk9ORTotMSxST1RBVEU6MCxET0xMWToxLFBBTjoyLFRPVUNIX1JPVEFURTozLFRPVUNIX1BBTjo0LFRPVUNIX0RPTExZX1BBTjo1LFRPVUNIX0RPTExZX1JPVEFURTo2fSxwPWQuTk9ORSxmPTFlLTYsbT1uZXcgckd0LGc9bmV3IHJHdCxfPTEseT1uZXcgcU90LHY9ITEsYj1uZXcgek90LHg9bmV3IHpPdCx3PW5ldyB6T3QsUz1uZXcgek90LE09bmV3IHpPdCxFPW5ldyB6T3QsVD1uZXcgek90LEM9bmV3IHpPdCxBPW5ldyB6T3Q7ZnVuY3Rpb24gaygpe3JldHVybiBNYXRoLnBvdyguOTUsbC56b29tU3BlZWQpfWZ1bmN0aW9uIEwodCl7Zy50aGV0YS09dH1mdW5jdGlvbiBQKHQpe2cucGhpLT10fXZhciBOLEk9KE49bmV3IHFPdCxmdW5jdGlvbiB0KGUsbil7Ti5zZXRGcm9tTWF0cml4Q29sdW1uKG4sMCksTi5tdWx0aXBseVNjYWxhcigtZSkseS5hZGQoTil9KSxPPShmdW5jdGlvbigpe3ZhciB0PW5ldyBxT3Q7cmV0dXJuIGZ1bmN0aW9uIGUobixpKXshMD09PWwuc2NyZWVuU3BhY2VQYW5uaW5nP3Quc2V0RnJvbU1hdHJpeENvbHVtbihpLDEpOih0LnNldEZyb21NYXRyaXhDb2x1bW4oaSwwKSx0LmNyb3NzVmVjdG9ycyhsLm9iamVjdC51cCx0KSksdC5tdWx0aXBseVNjYWxhcihuKSx5LmFkZCh0KX19KSgpLFI9KGZ1bmN0aW9uKCl7dmFyIHQ9bmV3IHFPdDtyZXR1cm4gZnVuY3Rpb24gZShuLGkpe3ZhciByPWwuZG9tRWxlbWVudDtpZihsLm9iamVjdC5pc1BlcnNwZWN0aXZlQ2FtZXJhKXt0LmNvcHkobC5vYmplY3QucG9zaXRpb24pLnN1YihsLnRhcmdldCk7dmFyIG89dC5sZW5ndGgoKTtvKj1NYXRoLnRhbihsLm9iamVjdC5mb3YvMipNYXRoLlBJLzE4MCksSSgyKm4qby9yLmNsaWVudEhlaWdodCxsLm9iamVjdC5tYXRyaXgpLE8oMippKm8vci5jbGllbnRIZWlnaHQsbC5vYmplY3QubWF0cml4KX1lbHNlIGwub2JqZWN0LmlzT3J0aG9ncmFwaGljQ2FtZXJhPyhJKG4qKGwub2JqZWN0LnJpZ2h0LWwub2JqZWN0LmxlZnQpL2wub2JqZWN0Lnpvb20vci5jbGllbnRXaWR0aCxsLm9iamVjdC5tYXRyaXgpLE8oaSoobC5vYmplY3QudG9wLWwub2JqZWN0LmJvdHRvbSkvbC5vYmplY3Quem9vbS9yLmNsaWVudEhlaWdodCxsLm9iamVjdC5tYXRyaXgpKTooY29uc29sZS53YXJuKCJXQVJOSU5HOiBPcmJpdENvbnRyb2xzLmpzIGVuY291bnRlcmVkIGFuIHVua25vd24gY2FtZXJhIHR5cGUgLSBwYW4gZGlzYWJsZWQuIiksbC5lbmFibGVQYW49ITEpfX0pKCk7ZnVuY3Rpb24geih0KXtsLm9iamVjdC5pc1BlcnNwZWN0aXZlQ2FtZXJhP18vPXQ6bC5vYmplY3QuaXNPcnRob2dyYXBoaWNDYW1lcmE/KGwub2JqZWN0Lnpvb209TWF0aC5tYXgobC5taW5ab29tLE1hdGgubWluKGwubWF4Wm9vbSxsLm9iamVjdC56b29tKnQpKSxsLm9iamVjdC51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCksdj0hMCk6KGNvbnNvbGUud2FybigiV0FSTklORzogT3JiaXRDb250cm9scy5qcyBlbmNvdW50ZXJlZCBhbiB1bmtub3duIGNhbWVyYSB0eXBlIC0gZG9sbHkvem9vbSBkaXNhYmxlZC4iKSxsLmVuYWJsZVpvb209ITEpfWZ1bmN0aW9uIEQodCl7bC5vYmplY3QuaXNQZXJzcGVjdGl2ZUNhbWVyYT9fKj10Omwub2JqZWN0LmlzT3J0aG9ncmFwaGljQ2FtZXJhPyhsLm9iamVjdC56b29tPU1hdGgubWF4KGwubWluWm9vbSxNYXRoLm1pbihsLm1heFpvb20sbC5vYmplY3Quem9vbS90KSksbC5vYmplY3QudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpLHY9ITApOihjb25zb2xlLndhcm4oIldBUk5JTkc6IE9yYml0Q29udHJvbHMuanMgZW5jb3VudGVyZWQgYW4gdW5rbm93biBjYW1lcmEgdHlwZSAtIGRvbGx5L3pvb20gZGlzYWJsZWQuIiksbC5lbmFibGVab29tPSExKX1mdW5jdGlvbiBCKHQpe2Iuc2V0KHQuY2xpZW50WCx0LmNsaWVudFkpfWZ1bmN0aW9uIEgodCl7Uy5zZXQodC5jbGllbnRYLHQuY2xpZW50WSl9ZnVuY3Rpb24gRih0KXsxPT10LnRvdWNoZXMubGVuZ3RoP2Iuc2V0KHQudG91Y2hlc1swXS5wYWdlWCx0LnRvdWNoZXNbMF0ucGFnZVkpOmIuc2V0KC41Kih0LnRvdWNoZXNbMF0ucGFnZVgrdC50b3VjaGVzWzFdLnBhZ2VYKSwuNSoodC50b3VjaGVzWzBdLnBhZ2VZK3QudG91Y2hlc1sxXS5wYWdlWSkpfWZ1bmN0aW9uIFYodCl7MT09dC50b3VjaGVzLmxlbmd0aD9TLnNldCh0LnRvdWNoZXNbMF0ucGFnZVgsdC50b3VjaGVzWzBdLnBhZ2VZKTpTLnNldCguNSoodC50b3VjaGVzWzBdLnBhZ2VYK3QudG91Y2hlc1sxXS5wYWdlWCksLjUqKHQudG91Y2hlc1swXS5wYWdlWSt0LnRvdWNoZXNbMV0ucGFnZVkpKX1mdW5jdGlvbiBVKHQpe3ZhciBlPXQudG91Y2hlc1swXS5wYWdlWC10LnRvdWNoZXNbMV0ucGFnZVgsbj10LnRvdWNoZXNbMF0ucGFnZVktdC50b3VjaGVzWzFdLnBhZ2VZLGk9TWF0aC5zcXJ0KGUqZStuKm4pO1Quc2V0KDAsaSl9ZnVuY3Rpb24gaih0KXsxPT10LnRvdWNoZXMubGVuZ3RoP3guc2V0KHQudG91Y2hlc1swXS5wYWdlWCx0LnRvdWNoZXNbMF0ucGFnZVkpOnguc2V0KC41Kih0LnRvdWNoZXNbMF0ucGFnZVgrdC50b3VjaGVzWzFdLnBhZ2VYKSwuNSoodC50b3VjaGVzWzBdLnBhZ2VZK3QudG91Y2hlc1sxXS5wYWdlWSkpLHcuc3ViVmVjdG9ycyh4LGIpLm11bHRpcGx5U2NhbGFyKGwucm90YXRlU3BlZWQpO3ZhciBlPWwuZG9tRWxlbWVudDtMKDIqTWF0aC5QSSp3LngvZS5jbGllbnRIZWlnaHQpLFAoMipNYXRoLlBJKncueS9lLmNsaWVudEhlaWdodCksYi5jb3B5KHgpfWZ1bmN0aW9uIEcodCl7MT09dC50b3VjaGVzLmxlbmd0aD9NLnNldCh0LnRvdWNoZXNbMF0ucGFnZVgsdC50b3VjaGVzWzBdLnBhZ2VZKTpNLnNldCguNSoodC50b3VjaGVzWzBdLnBhZ2VYK3QudG91Y2hlc1sxXS5wYWdlWCksLjUqKHQudG91Y2hlc1swXS5wYWdlWSt0LnRvdWNoZXNbMV0ucGFnZVkpKSxFLnN1YlZlY3RvcnMoTSxTKS5tdWx0aXBseVNjYWxhcihsLnBhblNwZWVkKSxSKEUueCxFLnkpLFMuY29weShNKX1mdW5jdGlvbiBXKHQpe3ZhciBlPXQudG91Y2hlc1swXS5wYWdlWC10LnRvdWNoZXNbMV0ucGFnZVgsbj10LnRvdWNoZXNbMF0ucGFnZVktdC50b3VjaGVzWzFdLnBhZ2VZLGk9TWF0aC5zcXJ0KGUqZStuKm4pO0Muc2V0KDAsaSksQS5zZXQoMCxNYXRoLnBvdyhDLnkvVC55LGwuem9vbVNwZWVkKSkseihBLnkpLFQuY29weShDKX1mdW5jdGlvbiBxKHQpe2lmKCExIT09bC5lbmFibGVkKXN3aXRjaCh0LnBvaW50ZXJUeXBlKXtjYXNlIm1vdXNlIjpjYXNlInBlbiI6IShmdW5jdGlvbiBlKHQpe3ZhciBlO3N3aXRjaCh0LnByZXZlbnREZWZhdWx0KCksbC5kb21FbGVtZW50LmZvY3VzP2wuZG9tRWxlbWVudC5mb2N1cygpOndpbmRvdy5mb2N1cygpLHQuYnV0dG9uKXtjYXNlIDA6ZT1sLm1vdXNlQnV0dG9ucy5MRUZUO2JyZWFrO2Nhc2UgMTplPWwubW91c2VCdXR0b25zLk1JRERMRTticmVhaztjYXNlIDI6ZT1sLm1vdXNlQnV0dG9ucy5SSUdIVDticmVhaztkZWZhdWx0OmU9LTF9c3dpdGNoKGUpe2Nhc2UgQUl0LkRPTExZOmlmKCExPT09bC5lbmFibGVab29tKXJldHVybjshKGZ1bmN0aW9uIG4odCl7VC5zZXQodC5jbGllbnRYLHQuY2xpZW50WSl9KSh0KSxwPWQuRE9MTFk7YnJlYWs7Y2FzZSBBSXQuUk9UQVRFOmlmKHQuY3RybEtleXx8dC5tZXRhS2V5fHx0LnNoaWZ0S2V5KXtpZighMT09PWwuZW5hYmxlUGFuKXJldHVybjtIKHQpLHA9ZC5QQU59ZWxzZXtpZighMT09PWwuZW5hYmxlUm90YXRlKXJldHVybjtCKHQpLHA9ZC5ST1RBVEV9YnJlYWs7Y2FzZSBBSXQuUEFOOmlmKHQuY3RybEtleXx8dC5tZXRhS2V5fHx0LnNoaWZ0S2V5KXtpZighMT09PWwuZW5hYmxlUm90YXRlKXJldHVybjtCKHQpLHA9ZC5ST1RBVEV9ZWxzZXtpZighMT09PWwuZW5hYmxlUGFuKXJldHVybjtIKHQpLHA9ZC5QQU59YnJlYWs7ZGVmYXVsdDpwPWQuTk9ORX1wIT09ZC5OT05FJiYobC5kb21FbGVtZW50Lm93bmVyRG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLFkpLGwuZG9tRWxlbWVudC5vd25lckRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsWCksbC5kaXNwYXRjaEV2ZW50KHUpKX0pKHQpfX1mdW5jdGlvbiBZKHQpe2lmKCExIT09bC5lbmFibGVkKXN3aXRjaCh0LnBvaW50ZXJUeXBlKXtjYXNlIm1vdXNlIjpjYXNlInBlbiI6IShmdW5jdGlvbiBlKHQpe2lmKCExIT09bC5lbmFibGVkKXN3aXRjaCh0LnByZXZlbnREZWZhdWx0KCkscCl7Y2FzZSBkLlJPVEFURTppZighMT09PWwuZW5hYmxlUm90YXRlKXJldHVybjshKGZ1bmN0aW9uIGUodCl7eC5zZXQodC5jbGllbnRYLHQuY2xpZW50WSksdy5zdWJWZWN0b3JzKHgsYikubXVsdGlwbHlTY2FsYXIobC5yb3RhdGVTcGVlZCk7dmFyIGU9bC5kb21FbGVtZW50O0woMipNYXRoLlBJKncueC9lLmNsaWVudEhlaWdodCksUCgyKk1hdGguUEkqdy55L2UuY2xpZW50SGVpZ2h0KSxiLmNvcHkoeCksbC51cGRhdGUoKX0pKHQpO2JyZWFrO2Nhc2UgZC5ET0xMWTppZighMT09PWwuZW5hYmxlWm9vbSlyZXR1cm47IShmdW5jdGlvbiBuKHQpe0Muc2V0KHQuY2xpZW50WCx0LmNsaWVudFkpLEEuc3ViVmVjdG9ycyhDLFQpLEEueT4wP3ooaygpKTpBLnk8MCYmRChrKCkpLFQuY29weShDKSxsLnVwZGF0ZSgpfSkodCk7YnJlYWs7Y2FzZSBkLlBBTjppZighMT09PWwuZW5hYmxlUGFuKXJldHVybjshKGZ1bmN0aW9uIGkodCl7TS5zZXQodC5jbGllbnRYLHQuY2xpZW50WSksRS5zdWJWZWN0b3JzKE0sUykubXVsdGlwbHlTY2FsYXIobC5wYW5TcGVlZCksUihFLngsRS55KSxTLmNvcHkoTSksbC51cGRhdGUoKX0pKHQpfX0pKHQpfX1mdW5jdGlvbiBYKHQpe3N3aXRjaCh0LnBvaW50ZXJUeXBlKXtjYXNlIm1vdXNlIjpjYXNlInBlbiI6IShmdW5jdGlvbiBlKHQpe2wuZG9tRWxlbWVudC5vd25lckRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIixZKSxsLmRvbUVsZW1lbnQub3duZXJEb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLFgpLCExIT09bC5lbmFibGVkJiYobC5kaXNwYXRjaEV2ZW50KGgpLHA9ZC5OT05FKX0pKCl9fWZ1bmN0aW9uICQodCl7ITE9PT1sLmVuYWJsZWR8fCExPT09bC5lbmFibGVab29tfHxwIT09ZC5OT05FJiZwIT09ZC5ST1RBVEV8fCh0LnByZXZlbnREZWZhdWx0KCksdC5zdG9wUHJvcGFnYXRpb24oKSxsLmRpc3BhdGNoRXZlbnQodSksKGZ1bmN0aW9uIGUodCl7dC5kZWx0YVk8MD9EKGsoKSk6dC5kZWx0YVk+MCYmeihrKCkpLGwudXBkYXRlKCl9KSh0KSxsLmRpc3BhdGNoRXZlbnQoaCkpfWZ1bmN0aW9uIEsodCl7ITEhPT1sLmVuYWJsZWQmJiExIT09bC5lbmFibGVQYW4mJihmdW5jdGlvbiBlKHQpe3ZhciBlPSExO3N3aXRjaCh0LmtleUNvZGUpe2Nhc2UgbC5rZXlzLlVQOlIoMCxsLmtleVBhblNwZWVkKSxlPSEwO2JyZWFrO2Nhc2UgbC5rZXlzLkJPVFRPTTpSKDAsLWwua2V5UGFuU3BlZWQpLGU9ITA7YnJlYWs7Y2FzZSBsLmtleXMuTEVGVDpSKGwua2V5UGFuU3BlZWQsMCksZT0hMDticmVhaztjYXNlIGwua2V5cy5SSUdIVDpSKC1sLmtleVBhblNwZWVkLDApLGU9ITB9ZSYmKHQucHJldmVudERlZmF1bHQoKSxsLnVwZGF0ZSgpKX0pKHQpfWZ1bmN0aW9uIFoodCl7aWYoITEhPT1sLmVuYWJsZWQpe3N3aXRjaCh0LnByZXZlbnREZWZhdWx0KCksdC50b3VjaGVzLmxlbmd0aCl7Y2FzZSAxOnN3aXRjaChsLnRvdWNoZXMuT05FKXtjYXNlIGtJdC5ST1RBVEU6aWYoITE9PT1sLmVuYWJsZVJvdGF0ZSlyZXR1cm47Rih0KSxwPWQuVE9VQ0hfUk9UQVRFO2JyZWFrO2Nhc2Uga0l0LlBBTjppZighMT09PWwuZW5hYmxlUGFuKXJldHVybjtWKHQpLHA9ZC5UT1VDSF9QQU47YnJlYWs7ZGVmYXVsdDpwPWQuTk9ORX1icmVhaztjYXNlIDI6c3dpdGNoKGwudG91Y2hlcy5UV08pe2Nhc2Uga0l0LkRPTExZX1BBTjppZighMT09PWwuZW5hYmxlWm9vbSYmITE9PT1sLmVuYWJsZVBhbilyZXR1cm47IShmdW5jdGlvbiBlKHQpe2wuZW5hYmxlWm9vbSYmVSh0KSxsLmVuYWJsZVBhbiYmVih0KX0pKHQpLHA9ZC5UT1VDSF9ET0xMWV9QQU47YnJlYWs7Y2FzZSBrSXQuRE9MTFlfUk9UQVRFOmlmKCExPT09bC5lbmFibGVab29tJiYhMT09PWwuZW5hYmxlUm90YXRlKXJldHVybjshKGZ1bmN0aW9uIG4odCl7bC5lbmFibGVab29tJiZVKHQpLGwuZW5hYmxlUm90YXRlJiZGKHQpfSkodCkscD1kLlRPVUNIX0RPTExZX1JPVEFURTticmVhaztkZWZhdWx0OnA9ZC5OT05FfWJyZWFrO2RlZmF1bHQ6cD1kLk5PTkV9cCE9PWQuTk9ORSYmbC5kaXNwYXRjaEV2ZW50KHUpfX1mdW5jdGlvbiBKKHQpe2lmKCExIT09bC5lbmFibGVkKXN3aXRjaCh0LnByZXZlbnREZWZhdWx0KCksdC5zdG9wUHJvcGFnYXRpb24oKSxwKXtjYXNlIGQuVE9VQ0hfUk9UQVRFOmlmKCExPT09bC5lbmFibGVSb3RhdGUpcmV0dXJuO2oodCksbC51cGRhdGUoKTticmVhaztjYXNlIGQuVE9VQ0hfUEFOOmlmKCExPT09bC5lbmFibGVQYW4pcmV0dXJuO0codCksbC51cGRhdGUoKTticmVhaztjYXNlIGQuVE9VQ0hfRE9MTFlfUEFOOmlmKCExPT09bC5lbmFibGVab29tJiYhMT09PWwuZW5hYmxlUGFuKXJldHVybjshKGZ1bmN0aW9uIGUodCl7bC5lbmFibGVab29tJiZXKHQpLGwuZW5hYmxlUGFuJiZHKHQpfSkodCksbC51cGRhdGUoKTticmVhaztjYXNlIGQuVE9VQ0hfRE9MTFlfUk9UQVRFOmlmKCExPT09bC5lbmFibGVab29tJiYhMT09PWwuZW5hYmxlUm90YXRlKXJldHVybjshKGZ1bmN0aW9uIG4odCl7bC5lbmFibGVab29tJiZXKHQpLGwuZW5hYmxlUm90YXRlJiZqKHQpfSkodCksbC51cGRhdGUoKTticmVhaztkZWZhdWx0OnA9ZC5OT05FfX1mdW5jdGlvbiBRKHQpeyExIT09bC5lbmFibGVkJiYobC5kaXNwYXRjaEV2ZW50KGgpLHA9ZC5OT05FKX1mdW5jdGlvbiB0dCh0KXshMSE9PWwuZW5hYmxlZCYmdC5wcmV2ZW50RGVmYXVsdCgpfWwuZG9tRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsdHQpLGwuZG9tRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyZG93biIscSksbC5kb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIndoZWVsIiwkKSxsLmRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsWiksbC5kb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIixRKSxsLmRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIixKKSx0aGlzLnVwZGF0ZSgpfTsoRld0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE5PdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1GV3Q7dmFyIFZXdD1mdW5jdGlvbih0LGUpe0ZXdC5jYWxsKHRoaXMsdCxlKSx0aGlzLnNjcmVlblNwYWNlUGFubmluZz0hMSx0aGlzLm1vdXNlQnV0dG9ucy5MRUZUPUFJdC5QQU4sdGhpcy5tb3VzZUJ1dHRvbnMuUklHSFQ9QUl0LlJPVEFURSx0aGlzLnRvdWNoZXMuT05FPWtJdC5QQU4sdGhpcy50b3VjaGVzLlRXTz1rSXQuRE9MTFlfUk9UQVRFfTsoVld0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE5PdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1WV3Q7Y2xhc3MgVVd0IGV4dGVuZHMgTk90e2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5fbGFzdE1lc2g9bnVsbCx0aGlzLl9jbG9jaz1uZXcgRWp0LHRoaXMuX2NhbnZhc1NpemU9bnVsbCx0aGlzLl9sYXllcnNDb25maWc9bnVsbCx0aGlzLl9ydW5Db2xvcj10fV9pc09iamVjdCh0KXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHQmJm51bGwhPXQmJiFBcnJheS5pc0FycmF5KHQpfV9hcHBseURlZmF1bHRzKHQsZSl7bGV0IG49e307Y29uc3QgaT1bdCxlXTtmb3IobGV0IHQ9MDt0PGkubGVuZ3RoO3QrKyl7Y29uc3QgZT1pW3RdO2ZvcihsZXQgdCBpbiBlKXtjb25zdCBpPXQgaW4gbjt0aGlzLl9pc09iamVjdChlW3RdKT9uW3RdPXRoaXMuX2FwcGx5RGVmYXVsdHMoblt0XXx8e30sZVt0XSk6aXx8KG5bdF09ZVt0XSl9fXJldHVybiBufV9jcmVhdGVMYXllcnMoKXtpZih0aGlzLl9sYXllcnNDb25maWcmJnRoaXMuX3NjZW5lJiZ0aGlzLl9sYXN0TWVzaCl7aWYodGhpcy5fbGF5ZXJzQ29uZmlnLnNob3dCb3VuZGluZ0JveCl7dmFyIHQ9bmV3IEFHdCh0aGlzLl9sYXN0TWVzaCxuZXcgcHp0KCJyZ2IoMCwgMCwgMjU1KSIpKTt0aGlzLl9zY2VuZS5hZGQodCl9aWYodGhpcy5fbGF5ZXJzQ29uZmlnLnNob3dBeGVzKXt2YXIgZT1uZXcgTkd0KDUpO3RoaXMuX3NjZW5lLmFkZChlKX19fXNldExheWVyc0NvbmZpZyh0KXt0aGlzLl9sYXllcnNDb25maWc9dGhpcy5fYXBwbHlEZWZhdWx0cyh0LHRoaXMuX2xheWVyc0NvbmZpZ3x8e30pfV9jcmVhdGVXb3JsZCh0LGUpe2lmKHRoaXMuaXNSZWFkeSgpKXJldHVybjt0aGlzLl9zY2VuZT1uZXcgTkh0O3ZhciBuPW5ldyBjV3RbdC5jYW1lcmEuY2xzXSh0LmNhbWVyYS5mb3YsdGhpcy5fY2FudmFzU2l6ZS53aWR0aC90aGlzLl9jYW52YXNTaXplLmhlaWdodCx0LmNhbWVyYS5uZWFyLHQuY2FtZXJhLmZhcik7dGhpcy5fY2FtZXJhPW47dmFyIGk9bmV3IEZXdChuLGUpO2NvbnN0IHI9aTtyLmxvb2tTcGVlZD0uNCxyLm1vdmVtZW50U3BlZWQ9MjAsci5ub0ZseT0hMCxyLmxvb2tWZXJ0aWNhbD0hMCxyLmNvbnN0cmFpblZlcnRpY2FsPSEwLHIudmVydGljYWxNaW49MSxyLnZlcnRpY2FsTWF4PTIsci5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLHRoaXMuX29uQ2FtZXJhUG9zaXRpb25DaGFuZ2UuYmluZCh0aGlzKSksdGhpcy5fY2FtZXJhQ29udHJvbHM9aSx0aGlzLl9yZW5kZXJlcj1uZXcgQUh0KHthbnRpYWxpYXM6ITB9KSx0aGlzLl9yZW5kZXJlci5zZXRQaXhlbFJhdGlvKHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvKSx0aGlzLl9yZW5kZXJlci5zZXRTaXplKHRoaXMuX2NhbnZhc1NpemUud2lkdGgsdGhpcy5fY2FudmFzU2l6ZS5oZWlnaHQpLHRoaXMuX3JlbmRlcmVyLnNldENsZWFyQ29sb3IoMTY3NzcyMTUsMSl9X2NsZWFyU2NlbmUoKXtmb3IoO3RoaXMuX3NjZW5lLmNoaWxkcmVuLmxlbmd0aD4wOyl0aGlzLl9zY2VuZS5yZW1vdmUodGhpcy5fc2NlbmUuY2hpbGRyZW5bMF0pfWdldFJlbmRlcmVyKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyfWdldENhbWVyYUNvbnRyb2xzKCl7cmV0dXJuIHRoaXMuX2NhbWVyYUNvbnRyb2xzfWlzUmVhZHkoKXtyZXR1cm4hIXRoaXMuX2NhbWVyYSYmISF0aGlzLl9jYW1lcmFDb250cm9sc31nZXRDYW1lcmFQb3NpdGlvbigpe3JldHVybntmYXI6dGhpcy5fY2FtZXJhLmZhcixwb3NpdGlvbjp0aGlzLl9jYW1lcmEucG9zaXRpb24uY2xvbmUoKSx0YXJnZXQ6dGhpcy5fY2FtZXJhQ29udHJvbHMudGFyZ2V0LmNsb25lKCl9fXNldENhbnZhc1NpemUodCl7dGhpcy5fY2FudmFzU2l6ZT10fWRyYXcoKXt0aGlzLl9hbmltYXRpb25GcmFtZUluZGV4JiZjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9hbmltYXRpb25GcmFtZUluZGV4KSx0aGlzLl9jYW1lcmEuYXNwZWN0PXRoaXMuX2NhbnZhc1NpemUud2lkdGgvdGhpcy5fY2FudmFzU2l6ZS5oZWlnaHQsdGhpcy5fY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKSx0aGlzLl9yZW5kZXJlci5zZXRTaXplKHRoaXMuX2NhbnZhc1NpemUud2lkdGgsdGhpcy5fY2FudmFzU2l6ZS5oZWlnaHQpO2NvbnN0IHQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9jbG9jay5nZXREZWx0YSgpO3RoaXMuX2NhbWVyYUNvbnRyb2xzLnVwZGF0ZShlKSx0aGlzLl9hbmltYXRpb25GcmFtZUluZGV4PXJlcXVlc3RBbmltYXRpb25GcmFtZSh0KSx0aGlzLl9yZW5kZXJlci5yZW5kZXIodGhpcy5fc2NlbmUsdGhpcy5fY2FtZXJhKX0uYmluZCh0aGlzKTt0KCl9dXBkYXRlU2NlbmUodCxlKXtsZXQgbj17fTsiY29uZmlnImluIHQmJnQuY29uZmlnJiYobj1KU09OLnBhcnNlKHQuY29uZmlnKSksdGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJiZWZvcmVVcGRhdGVTY2VuZSJ9KSxuPXRoaXMuX2FwcGx5RGVmYXVsdHMobix7Y2FtZXJhOntjbHM6IlBlcnNwZWN0aXZlQ2FtZXJhIixmb3Y6NzUsbmVhcjouMSxmYXI6MWUzfSxsaWdodHM6W3tjbHM6IkFtYmllbnRMaWdodCIsY29sb3I6IiNmZmZmZmYiLGludGVuc2l0eTouNzV9LHtjbHM6IkRpcmVjdGlvbmFsTGlnaHQiLGNvbG9yOiIjZmZmZmZmIixpbnRlbnNpdHk6Ljc1LHBvc2l0aW9uOlswLC0xLDJdfV19KSx0aGlzLl9jcmVhdGVXb3JsZChuLGUpLHRoaXMuX2NsZWFyU2NlbmUoKSx0aGlzLl9jcmVhdGVMaWdodHModGhpcy5fc2NlbmUsbiksdGhpcy5fY3JlYXRlR2VvbWV0cnkodCxuKSx0aGlzLl9jcmVhdGVMYXllcnMoKSx0aGlzLmRyYXcoKX1yZXNldFZpZXcodCl7aWYoIXRoaXMuaXNSZWFkeSgpKXJldHVybjtsZXQgZTt0aGlzLl9jYW1lcmFDb250cm9scy5yZXNldCgpLCF0JiZ0aGlzLl9sYXN0TWVzaCYmKGU9dGhpcy5fbGFzdE1lc2gpLGUmJih0aGlzLl9maXRPYmplY3RUb1ZpZXdwb3J0KGUpLHRoaXMuX2xhc3RNZXNoPWUpLHRoaXMuX2NhbWVyYUNvbnRyb2xzLnVwZGF0ZSgpfV9jcmVhdGVHZW9tZXRyeSh0LGUpe2NvbnN0IG49dC5tZXNoO24udmVydGljZXMmJm4uZmFjZXMmJm4uZmFjZXMubGVuZ3RoP3RoaXMuX2NyZWF0ZU1lc2gobixlKTp0aGlzLl9jcmVhdGVQb2ludENsb3VkKG4sZSl9X2NyZWF0ZVBvaW50Q2xvdWQodCxlKXtjb25zdCBuPXQudmVydGljZXMsaT10LmNvbG9ycztsZXQgcj17bWF0ZXJpYWw6e2NsczoiUG9pbnRzTWF0ZXJpYWwiLHNpemU6LjAwNX19O2kmJmkubGVuZ3RoPT1uLmxlbmd0aD9yLm1hdGVyaWFsLnZlcnRleENvbG9ycz0hMDpyLm1hdGVyaWFsLmNvbG9yPXRoaXMuX3J1bkNvbG9yO2NvbnN0IG89dGhpcy5fYXBwbHlEZWZhdWx0cyhlLHIpLGE9bmV3IFZ6dCxzPW5ldyBGbG9hdDMyQXJyYXkobi5mbGF0KCkpO2lmKGEuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGJ6dChzLDMpKSxpJiZpLmxlbmd0aD09bi5sZW5ndGgpe2NvbnN0IHQ9bmV3IEZsb2F0MzJBcnJheShpLmZsYXQoKSk7Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXT10W2VdLzI1NTthLnNldEF0dHJpYnV0ZSgiY29sb3IiLG5ldyBienQodCwzKSl9dmFyIGw9bmV3IE5GdChhLG5ldyBjV3Rbby5tYXRlcmlhbC5jbHNdKG8ubWF0ZXJpYWwpKTt0aGlzLl9zY2VuZS5hZGQobCksdGhpcy5fbGFzdE1lc2g9bH1zZXRDYW1lcmFWaWV3cG9pbnQodCxlLG4pe3RoaXMuX3NpbGVudD0hMCx0aGlzLl9jYW1lcmEuZmFyPWUsdGhpcy5fY2FtZXJhLnBvc2l0aW9uLnNldCh0LngsdC55LHQueiksdGhpcy5fY2FtZXJhLmxvb2tBdChuLmNsb25lKCkpLHRoaXMuX2NhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCksdGhpcy5fY2FtZXJhQ29udHJvbHMudGFyZ2V0PW4uY2xvbmUoKSx0aGlzLl9jYW1lcmFDb250cm9scy51cGRhdGUoKSx0aGlzLl9zaWxlbnQ9ITF9X29uQ2FtZXJhUG9zaXRpb25DaGFuZ2UodCl7dGhpcy5fc2lsZW50fHx0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImNhbWVyYVBvc2l0aW9uQ2hhbmdlIixldmVudDp0fSl9X2ZpdE9iamVjdFRvVmlld3BvcnQodCl7Y29uc3QgZT1uZXcgJE90LG49bmV3IHFPdCxpPW5ldyBxT3Q7ZS5zZXRGcm9tT2JqZWN0KHQpLGUuZ2V0Q2VudGVyKG4pLGUuZ2V0U2l6ZShpKTtjb25zdCByPU1hdGgubWF4KGkueCxpLnksaS56KSxvPXRoaXMuX2NhbWVyYS5mb3YqKE1hdGguUEkvMTgwKTtsZXQgYT0xLjI1Kk1hdGguYWJzKHIvKDIqTWF0aC50YW4oby8yKSkpO2NvbnN0IHM9ZS5taW4uejt0aGlzLnNldENhbWVyYVZpZXdwb2ludCh7eDpuLngseTpuLnksejphfSwzKihzPDA/LXMrYTphLXMpLG4pfV9jcmVhdGVNZXNoKHQsZSl7Y29uc3Qgbj10LnZlcnRpY2VzLGk9dC5mYWNlcyxyPXQuY29sb3JzLG89dGhpcy5fYXBwbHlEZWZhdWx0cyhlLHttYXRlcmlhbDp7Y2xzOiJNZXNoU3RhbmRhcmRNYXRlcmlhbCIsY29sb3I6IiNhMGEwYTAiLHJvdWdobmVzczoxLG1ldGFsbmVzczowfX0pLGE9bmV3IFZ6dCxzPW5ldyBGbG9hdDMyQXJyYXkobi5mbGF0KCkpO2Euc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGJ6dChzLDMpKTtjb25zdCBsPW5ldyBVaW50MTZBcnJheShpLmZsYXQoKSk7aWYociYmci5sZW5ndGgpe2NvbnN0IHQ9ci5mbGF0KCk7Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXT10W2VdLzI1NTthLnNldEF0dHJpYnV0ZSgiY29sb3IiLG5ldyBienQobmV3IEZsb2F0MzJBcnJheSh0KSwzKSksby5tYXRlcmlhbD1vLm1hdGVyaWFsfHx7fSxvLm1hdGVyaWFsLnZlcnRleENvbG9ycz0hMH1hLmNlbnRlcigpLGEuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCksYS5zZXRJbmRleChuZXcgYnp0KGwsMSkpLGEuY29tcHV0ZVZlcnRleE5vcm1hbHMoKTtsZXQgYz1uZXcgb0R0KGEsbmV3IGNXdFtvLm1hdGVyaWFsLmNsc10oby5tYXRlcmlhbCkpO2MuY2FzdFNoYWRvdz0hMCxjLnJlY2VpdmVTaGFkb3c9ITAsdGhpcy5fc2NlbmUuYWRkKGMpLHRoaXMuX2xhc3RNZXNoPWN9X2NyZWF0ZUxpZ2h0cyh0LGUpe2ZvcihsZXQgbj0wO248ZS5saWdodHMubGVuZ3RoO24rKyl7Y29uc3QgaT1lLmxpZ2h0c1tuXTtsZXQgcj1uZXcgY1d0W2kuY2xzXShpLmNvbG9yLGkuaW50ZW5zaXR5KTtpLnBvc2l0aW9uJiZyLnBvc2l0aW9uLnNldChpLnBvc2l0aW9uWzBdLGkucG9zaXRpb25bMV0saS5wb3NpdGlvblsyXSksdC5hZGQocil9fX1sZXQgald0PWNsYXNzIGV4dGVuZHModHIoeWUpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5zZWxlY3RlZFZpZXc9ImFsbCIsdGhpcy5hY3RpdmU9ITEsdGhpcy5fY29sb3JTY2FsZUZ1bmN0aW9uPUFPLHRoaXMuX3N0ZXBzPVtdLHRoaXMuX21lc2hWaWV3ZXJBdHRhY2hlZD0hMSx0aGlzLl9jYW1lcmFQb3NpdGlvbkluaXRpYWxpemVkPSExLHRoaXMuX2lzTWVzaExvYWRpbmc9ITF9Z2V0IF9ydW5Db2xvcigpe3JldHVybiB0aGlzLl9jb2xvclNjYWxlRnVuY3Rpb24odGhpcy5ydW4pfWNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLl9kYXRhUHJvdmlkZXI9bmV3IFRJdCh0aGlzLnJlcXVlc3RNYW5hZ2VyKTtjb25zdCB0PW5ldyBVV3QodGhpcy5fcnVuQ29sb3IpO3QuYWRkRXZlbnRMaXN0ZW5lcigiYmVmb3JlVXBkYXRlU2NlbmUiLHRoaXMuX3VwZGF0ZUNhbnZhc1NpemUuYmluZCh0aGlzKSksdC5hZGRFdmVudExpc3RlbmVyKCJjYW1lcmFQb3NpdGlvbkNoYW5nZSIsdGhpcy5fb25DYW1lcmFQb3NpdGlvbkNoYW5nZS5iaW5kKHRoaXMpKSx0aGlzLl9tZXNoVmlld2VyPXR9cmVsb2FkKCl7dGhpcy5hY3RpdmUmJnRoaXMuX2RhdGFQcm92aWRlciYmKHRoaXMuX2lzTWVzaExvYWRpbmc9ITAsdGhpcy5fZGF0YVByb3ZpZGVyLnJlbG9hZCh0aGlzLnJ1bix0aGlzLnRhZyx0aGlzLnNhbXBsZSkudGhlbigodD0+e3QmJih0aGlzLl9zdGVwcz10LHRoaXMuX3N0ZXBJbmRleD10Lmxlbmd0aC0xKX0pKS5jYXRjaCgodD0+e2lmKCF0fHwhdC5jb2RlfHx0LmNvZGUhPVNJdC5DQU5DRUxMRUQpdGhyb3cgdD10fHwiUmVzcG9uc2UgcHJvY2Vzc2luZyBmYWlsZWQuIixuZXcgRXJyb3IodCl9KSkpfV91cGRhdGVTY2VuZSgpe2NvbnN0IHQ9dGhpcy5fY3VycmVudFN0ZXA7dCYmdC5tZXNoJiYodGhpcy5fbWVzaFZpZXdlci51cGRhdGVTY2VuZSh0LHRoaXMpLHRoaXMuX2NhbWVyYVBvc2l0aW9uSW5pdGlhbGl6ZWR8fCh0aGlzLl9tZXNoVmlld2VyLnJlc2V0VmlldygpLHRoaXMuX2NhbWVyYVBvc2l0aW9uSW5pdGlhbGl6ZWQ9ITApLHRoaXMuX21lc2hWaWV3ZXJBdHRhY2hlZHx8KHRoaXMuc2hhZG93Um9vdC5hcHBlbmRDaGlsZCh0aGlzLl9tZXNoVmlld2VyLmdldFJlbmRlcmVyKCkuZG9tRWxlbWVudCksdGhpcy5fbWVzaFZpZXdlckF0dGFjaGVkPSEwKSl9X2RlYm91bmNlZEZldGNoTWVzaCgpe3RoaXMuZGVib3VuY2UoImZldGNoTWVzaCIsKCgpPT50aGlzLl9tYXliZUZldGNoTWVzaCgpKSwxMDApfV9tYXliZUZldGNoTWVzaCgpe3JldHVybiBuKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD10aGlzLl9jdXJyZW50U3RlcDtpZih0JiYhdC5tZXNoJiYhdC5tZXNoRmV0Y2hpbmcpe3QubWVzaEZldGNoaW5nPSEwLHRoaXMuX2lzTWVzaExvYWRpbmc9ITA7dHJ5e2NvbnN0IGU9eWllbGQgdGhpcy5fZGF0YVByb3ZpZGVyLmZldGNoRGF0YSh0LHRoaXMucnVuLHRoaXMudGFnLHRoaXMuc2FtcGxlKTt0Lm1lc2g9ZVswXSx0aGlzLm5vdGlmeVBhdGgoIl9jdXJyZW50U3RlcC5tZXNoIil9Y2F0Y2godCl7aWYoIXR8fCF0LmNvZGV8fHQuY29kZSE9U0l0LkNBTkNFTExFRCl0aHJvdyB0PXR8fCJSZXNwb25zZSBwcm9jZXNzaW5nIGZhaWxlZC4iLG5ldyBFcnJvcih0KX1maW5hbGx5e3RoaXMuX2lzTWVzaExvYWRpbmc9ITEsdC5tZXNoRmV0Y2hpbmc9ITF9fX0pKX1fb25DYW1lcmFQb3NpdGlvbkNoYW5nZSgpe2lmKCF0aGlzLl9tZXNoVmlld2VyLmlzUmVhZHkoKSlyZXR1cm47Y29uc3QgdD1uZXcgQ3VzdG9tRXZlbnQoImNhbWVyYS1wb3NpdGlvbi1jaGFuZ2UiLHtkZXRhaWw6dGhpcy5fbWVzaFZpZXdlci5nZXRDYW1lcmFQb3NpdGlvbigpfSk7dGhpcy5kaXNwYXRjaEV2ZW50KHQpfXNldENhbWVyYVZpZXdwb2ludCh0LGUsbil7dGhpcy5fbWVzaFZpZXdlci5zZXRDYW1lcmFWaWV3cG9pbnQodCxlLG4pfV91cGRhdGVDYW52YXNTaXplKCl7Y29uc3QgdD10aGlzLm9mZnNldFdpZHRoLGU9dCxuPXRoaXMuJCQoIi50Zi1tZXNoLWxvYWRlci1oZWFkZXIiKS5vZmZzZXRIZWlnaHQ7dGhpcy5fbWVzaFZpZXdlci5zZXRDYW52YXNTaXplKHt3aWR0aDp0LGhlaWdodDplLW59KX1yZWRyYXcoKXt0aGlzLl91cGRhdGVDYW52YXNTaXplKCksdGhpcy5pc0Nvbm5lY3RlZCYmdGhpcy5fbWVzaFZpZXdlci5kcmF3KCl9X2hhc0F0TGVhc3RPbmVTdGVwKHQpe3JldHVybiEhdCYmdC5sZW5ndGg+MH1faGFzTXVsdGlwbGVTdGVwcyh0KXtyZXR1cm4hIXQmJnQubGVuZ3RoPjF9Z2V0IF9jdXJyZW50U3RlcCgpe3JldHVybiB0aGlzLl9zdGVwc1t0aGlzLl9zdGVwSW5kZXhdfHxudWxsfWdldCBfc3RlcFZhbHVlKCl7Y29uc3QgdD10aGlzLl9jdXJyZW50U3RlcDtyZXR1cm4gdD90LnN0ZXA6MH1nZXQgX2N1cnJlbnRXYWxsVGltZSgpe2NvbnN0IHQ9dGhpcy5fY3VycmVudFN0ZXA7cmV0dXJuIHQ/T08odC53YWxsX3RpbWUpOiIifV9nZXRNYXhTdGVwSW5kZXgodCl7cmV0dXJuIHQubGVuZ3RoLTF9X2dldFNhbXBsZVRleHQodCl7cmV0dXJuIFN0cmluZyh0KzEpfV9oYXNNdWx0aXBsZVNhbXBsZXModCl7cmV0dXJuIHQ+MX1fdXBkYXRlVmlldygpe3RoaXMuX21lc2hWaWV3ZXImJiJhbGwiPT10aGlzLnNlbGVjdGVkVmlldyYmdGhpcy5fbWVzaFZpZXdlci5yZXNldFZpZXcoKX10b0xvY2FsZVN0cmluZ18odCl7cmV0dXJuIHQudG9Mb2NhbGVTdHJpbmcoKX19O2pXdC50ZW1wbGF0ZT1fZWAKICAgIDx0Zi1jYXJkLWhlYWRpbmcgY29sb3I9IltbX3J1bkNvbG9yXV0iIGNsYXNzPSJ0Zi1tZXNoLWxvYWRlci1oZWFkZXIiPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc011bHRpcGxlU2FtcGxlcyhvZlNhbXBsZXMpXV0iPgogICAgICAgIDxkaXY+c2FtcGxlOiBbW19nZXRTYW1wbGVUZXh0KHNhbXBsZSldXSBvZiBbW29mU2FtcGxlc11dPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaGFzQXRMZWFzdE9uZVN0ZXAoX3N0ZXBzKV1dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLXJvdyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIj4KICAgICAgICAgICAgc3RlcAogICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQiCiAgICAgICAgICAgICAgPltbdG9Mb2NhbGVTdHJpbmdfKF9zdGVwVmFsdWUpXV08L3NwYW4KICAgICAgICAgICAgPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIGhlYWRpbmctcmlnaHQiPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2N1cnJlbnRXYWxsVGltZV1dIj4KICAgICAgICAgICAgICBbW19jdXJyZW50V2FsbFRpbWVdXQogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJsYWJlbCByaWdodCI+CiAgICAgICAgICAgIDxwYXBlci1zcGlubmVyLWxpdGUgYWN0aXZlIGhpZGRlbiQ9IltbIV9pc01lc2hMb2FkaW5nXV0iPgogICAgICAgICAgICA8L3BhcGVyLXNwaW5uZXItbGl0ZT4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc011bHRpcGxlU3RlcHMoX3N0ZXBzKV1dIj4KICAgICAgICA8ZGl2PgogICAgICAgICAgPHBhcGVyLXNsaWRlcgogICAgICAgICAgICBpZD0ic3RlcHMiCiAgICAgICAgICAgIGltbWVkaWF0ZS12YWx1ZT0ie3tfc3RlcEluZGV4fX0iCiAgICAgICAgICAgIG1heD0iW1tfZ2V0TWF4U3RlcEluZGV4KF9zdGVwcyldXSIKICAgICAgICAgICAgbWF4LW1hcmtlcnM9IltbX2dldE1heFN0ZXBJbmRleChfc3RlcHMpXV0iCiAgICAgICAgICAgIHNuYXBzCiAgICAgICAgICAgIHN0ZXA9IjEiCiAgICAgICAgICAgIHZhbHVlPSJ7e19zdGVwSW5kZXh9fSIKICAgICAgICAgID48L3BhcGVyLXNsaWRlcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvdGYtY2FyZC1oZWFkaW5nPgogICAgPHN0eWxlPgogICAgICBwYXBlci1zbGlkZXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIG1hcmdpbi1sZWZ0OiAxcHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxcHg7CiAgICAgIH0KICAgICAgLnRmLW1lc2gtbG9hZGVyLWhlYWRlciB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgaGVpZ2h0OiAxMDVweDsKICAgICAgfQogICAgICBbaGlkZGVuXSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLGpXdC5wcm90b3R5cGUsInJ1biIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxqV3QucHJvdG90eXBlLCJ0YWciLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXJ9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sald0LnByb3RvdHlwZSwic2FtcGxlIix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLGpXdC5wcm90b3R5cGUsIm9mU2FtcGxlcyIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxqV3QucHJvdG90eXBlLCJzZWxlY3RlZFZpZXciLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxqV3QucHJvdG90eXBlLCJhY3RpdmUiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsaHIpXSxqV3QucHJvdG90eXBlLCJyZXF1ZXN0TWFuYWdlciIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixVV3QpXSxqV3QucHJvdG90eXBlLCJfbWVzaFZpZXdlciIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixUSXQpXSxqV3QucHJvdG90eXBlLCJfZGF0YVByb3ZpZGVyIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLGpXdC5wcm90b3R5cGUsIl9jb2xvclNjYWxlRnVuY3Rpb24iLHZvaWQgMCksdChbbyh7dHlwZTpBcnJheSxub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSxqV3QucHJvdG90eXBlLCJfc3RlcHMiLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXIsbm90aWZ5OiEwfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLGpXdC5wcm90b3R5cGUsIl9zdGVwSW5kZXgiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxqV3QucHJvdG90eXBlLCJfbWVzaFZpZXdlckF0dGFjaGVkIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sald0LnByb3RvdHlwZSwiX2NhbWVyYVBvc2l0aW9uSW5pdGlhbGl6ZWQiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxqV3QucHJvdG90eXBlLCJfaXNNZXNoTG9hZGluZyIsdm9pZCAwKSx0KFtzKCJydW4iKSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxqV3QucHJvdG90eXBlLCJfcnVuQ29sb3IiLG51bGwpLHQoW2EoInJ1biIsInRhZyIsImFjdGl2ZSIsIl9kYXRhUHJvdmlkZXIiLCJfbWVzaFZpZXdlciIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sald0LnByb3RvdHlwZSwicmVsb2FkIixudWxsKSx0KFthKCJfY3VycmVudFN0ZXAuKiIsIl9tZXNoVmlld2VyIiksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pLGUoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxqV3QucHJvdG90eXBlLCJfdXBkYXRlU2NlbmUiLG51bGwpLHQoW2EoIl9jdXJyZW50U3RlcCIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sald0LnByb3RvdHlwZSwiX2RlYm91bmNlZEZldGNoTWVzaCIsbnVsbCksdChbcygiX3N0ZXBzIiwiX3N0ZXBJbmRleCIpLGUoImRlc2lnbjp0eXBlIixPYmplY3QpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGpXdC5wcm90b3R5cGUsIl9jdXJyZW50U3RlcCIsbnVsbCksdChbcygiX2N1cnJlbnRTdGVwIiksZSgiZGVzaWduOnR5cGUiLE51bWJlciksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sald0LnByb3RvdHlwZSwiX3N0ZXBWYWx1ZSIsbnVsbCksdChbcygiX2N1cnJlbnRTdGVwIiksZSgiZGVzaWduOnR5cGUiLFN0cmluZyksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sald0LnByb3RvdHlwZSwiX2N1cnJlbnRXYWxsVGltZSIsbnVsbCksdChbYSgic2VsZWN0ZWRWaWV3IiksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pLGUoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxqV3QucHJvdG90eXBlLCJfdXBkYXRlVmlldyIsbnVsbCksald0PXQoW2koInRmLW1lc2gtbG9hZGVyIildLGpXdCk7bGV0IEdXdD1jbGFzcyBleHRlbmRzIHlle2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnJlbG9hZE9uUmVhZHk9ITAsdGhpcy5fdGFnRmlsdGVyPSIuKiIsdGhpcy5fc2VsZWN0ZWRWaWV3PSJhbGwiLHRoaXMuX3JlcXVlc3RNYW5hZ2VyPW5ldyBocix3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIiwoKCk9Pnt0aGlzLl9oYW5kbGVXaW5kb3dSZXNpemUoKX0pLCExKSx0aGlzLnJlbG9hZE9uUmVhZHkmJnRoaXMucmVsb2FkKCl9X2dldEFsbENoaWxkcmVuKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoInRmLW1lc2gtbG9hZGVyIikpfV9vbkNhbWVyYVBvc2l0aW9uQ2hhbmdlZCh0KXsic2hhcmUiPT10aGlzLl9zZWxlY3RlZFZpZXcmJnRoaXMuX2dldEFsbENoaWxkcmVuKCkuZm9yRWFjaCgoZT0+e3QudGFyZ2V0IT1lJiZlLnNldENhbWVyYVZpZXdwb2ludCh0LmRldGFpbC5wb3NpdGlvbix0LmRldGFpbC5mYXIsdC5kZXRhaWwudGFyZ2V0KX0pKX1fc2hvdWxkT3Blbih0KXtyZXR1cm4gdDw9Mn1yZWxvYWQoKXt0aGlzLl9mZXRjaFRhZ3MoKS50aGVuKHRoaXMuX3JlbG9hZE1lc2hlcy5iaW5kKHRoaXMpKX1faGFuZGxlV2luZG93UmVzaXplKCl7dGhpcy5fZ2V0QWxsQ2hpbGRyZW4oKS5mb3JFYWNoKCh0PT57dC5yZWRyYXcoKX0pKX1fZmV0Y2hUYWdzKCl7Y29uc3QgdD1ncigpLnBsdWdpblJvdXRlKCJtZXNoIiwiL3RhZ3MiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKCh0PT57aWYod2UuaXNFcXVhbCh0LHRoaXMuX3J1blRvVGFnSW5mbykpcmV0dXJuO2NvbnN0IGU9b3Iod2UubWFwVmFsdWVzKHQsKHQ9Pk9iamVjdC5rZXlzKHQpKSkpO3RoaXMuX2RhdGFOb3RGb3VuZD0wPT09ZS5sZW5ndGgsdGhpcy5fcnVuVG9UYWdJbmZvPXR9KSl9X3JlbG9hZE1lc2hlcygpe3RoaXMuX2dldEFsbENoaWxkcmVuKCkuZm9yRWFjaCgodD0+e3QucmVsb2FkKCl9KSl9Z2V0IF9jYXRlZ29yaWVzKCl7dmFyIHQ9dGhpcy5fcnVuVG9UYWdJbmZvLGU9dGhpcy5fc2VsZWN0ZWRSdW5zLG49dGhpcy5fdGFnRmlsdGVyO2Z1bmN0aW9uIGkoZSl7Y29uc3Qgbj10W2UucnVuXVtlLnRhZ10uc2FtcGxlcztyZXR1cm4gd2UucmFuZ2UobikubWFwKCh0PT5PYmplY3QuYXNzaWduKHt9LGUse3NhbXBsZTp0LG9mU2FtcGxlczpufSkpKX1yZXR1cm4gU3Iod2UubWFwVmFsdWVzKHQsKHQ9Pk9iamVjdC5rZXlzKHQpKSksZSxuKS5tYXAoKHQ9Pk9iamVjdC5hc3NpZ24oe30sdCx7aXRlbXM6W10uY29uY2F0LmFwcGx5KFtdLHQuaXRlbXMubWFwKGkpKX0pKSl9fTtHV3QudGVtcGxhdGU9X2VgCiAgICA8dGYtZGFzaGJvYXJkLWxheW91dD4KICAgICAgPGRpdiBzbG90PSJzaWRlYmFyIiBjbGFzcz0iYWxsLWNvbnRyb2xzIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZXR0aW5ncyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24gdmlldy1jb250cm9sIj4KICAgICAgICAgICAgPGgzIGNsYXNzPSJ0aXRsZSI+UG9pbnQgb2YgdmlldzwvaDM+CiAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWdyb3VwCiAgICAgICAgICAgICAgICBpZD0idmlldy1yYWRpby1ncm91cCIKICAgICAgICAgICAgICAgIHNlbGVjdGVkPSJ7e19zZWxlY3RlZFZpZXd9fSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIGlkPSJhbGwtcmFkaW8tYnV0dG9uIiBuYW1lPSJhbGwiPgogICAgICAgICAgICAgICAgICBEaXNwbGF5IGFsbCBwb2ludHMKICAgICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgICAgICAgPHBhcGVyLXRvb2x0aXAKICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICBmb3I9ImFsbC1yYWRpby1idXR0b24iCiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uPSJyaWdodCIKICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICBab29tIGFuZCBjZW50ZXIgY2FtZXJhIHRvIGRpc3BsYXkgYWxsIHBvaW50cyBhdCBvbmNlLiBOb3RlLAogICAgICAgICAgICAgICAgICB0aGF0IHNvbWUgcG9pbnRzIGNvdWxkIGJlIHRvbyBmYXIgKGkuZS4gdG9vIHNtYWxsKSB0byBiZQogICAgICAgICAgICAgICAgICB2aXNpYmxlLgogICAgICAgICAgICAgICAgPC9wYXBlci10b29sdGlwPgogICAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBpZD0idXNlci1yYWRpby1idXR0b24iIG5hbWU9InVzZXIiPgogICAgICAgICAgICAgICAgICBDdXJyZW50IHZpZXcKICAgICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgICAgICAgPHBhcGVyLXRvb2x0aXAKICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICBmb3I9InVzZXItcmFkaW8tYnV0dG9uIgogICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgS2VlcCBjdXJyZW50IGNhbWVyYSBwb3NpdGlvbiBhbmQgem9vbSBsZXZlbC4KICAgICAgICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24gaWQ9InNoYXJlLXJhZGlvLWJ1dHRvbiIgbmFtZT0ic2hhcmUiPgogICAgICAgICAgICAgICAgICBTaGFyZSB2aWV3cG9pbnQKICAgICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgICAgICAgPHBhcGVyLXRvb2x0aXAKICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICBmb3I9InNoYXJlLXJhZGlvLWJ1dHRvbiIKICAgICAgICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIFNoYXJlIHZpZXdwb2ludCBhbW9uZyBhbGwgY2FtZXJhcy4KICAgICAgICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgICA8L3BhcGVyLXJhZGlvLWdyb3VwPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiBydW5zLXNlbGVjdG9yIj4KICAgICAgICAgIDx0Zi1ydW5zLXNlbGVjdG9yIHNlbGVjdGVkLXJ1bnM9Int7X3NlbGVjdGVkUnVuc319Ij4KICAgICAgICAgIDwvdGYtcnVucy1zZWxlY3Rvcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgc2xvdD0iY2VudGVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtd2FybmluZyI+CiAgICAgICAgICAgIDxoMz5ObyBwb2ludCBjbG91ZCBkYXRhIHdhcyBmb3VuZC48L2gzPgogICAgICAgICAgICA8cD5Qcm9iYWJsZSBjYXVzZXM6PC9wPgogICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgWW91IGhhdmVu4oCZdCB3cml0dGVuIGFueSBwb2ludCBjbG91ZCBkYXRhIHRvIHlvdXIgZXZlbnQgZmlsZXMuCiAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICA8bGk+VGVuc29yQm9hcmQgY2Fu4oCZdCBmaW5kIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgPC91bD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvCiAgICAgICAgICAgICAgYWRkIGRhdGEgYW5kIHNldCB1cCB5b3VyIGV2ZW50IGZpbGVzLCBjaGVjayBvdXQgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCIKICAgICAgICAgICAgICAgID5SRUFETUU8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiCiAgICAgICAgICAgICAgICA+VGVuc29yQm9hcmQgdHV0b3JpYWw8L2EKICAgICAgICAgICAgICA+LgogICAgICAgICAgICA8L3A+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3UgdGhpbmsgVGVuc29yQm9hcmQgaXMgY29uZmlndXJlZCBwcm9wZXJseSwgcGxlYXNlIHNlZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQjbXktdGVuc29yYm9hcmQtaXNudC1zaG93aW5nLWFueS1kYXRhLXdoYXRzLXdyb25nIgogICAgICAgICAgICAgICAgPnRoZSBzZWN0aW9uIG9mIHRoZSBSRUFETUUgZGV2b3RlZCB0byBtaXNzaW5nIGRhdGEgcHJvYmxlbXM8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuCiAgICAgICAgICAgIDwvcD4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPHRmLXRhZy1maWx0ZXJlciB0YWctZmlsdGVyPSJ7e190YWdGaWx0ZXJ9fSI+PC90Zi10YWctZmlsdGVyZXI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jYXRlZ29yaWVzXV0iIGFzPSJjYXRlZ29yeSI+CiAgICAgICAgICAgIDx0Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldwogICAgICAgICAgICAgIGNhdGVnb3J5PSJbW2NhdGVnb3J5XV0iCiAgICAgICAgICAgICAgaW5pdGlhbC1vcGVuZWQ9IltbX3Nob3VsZE9wZW4oaW5kZXgpXV0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGYtbWVzaC1sb2FkZXIKICAgICAgICAgICAgICAgICAgYWN0aXZlPSJbW2FjdGl2ZV1dIgogICAgICAgICAgICAgICAgICBzZWxlY3RlZC12aWV3PSJbW19zZWxlY3RlZFZpZXddXSIKICAgICAgICAgICAgICAgICAgcnVuPSJbW2l0ZW0ucnVuXV0iCiAgICAgICAgICAgICAgICAgIHRhZz0iW1tpdGVtLnRhZ11dIgogICAgICAgICAgICAgICAgICBzYW1wbGU9IltbaXRlbS5zYW1wbGVdXSIKICAgICAgICAgICAgICAgICAgb2Ytc2FtcGxlcz0iW1tpdGVtLm9mU2FtcGxlc11dIgogICAgICAgICAgICAgICAgICByZXF1ZXN0LW1hbmFnZXI9IltbX3JlcXVlc3RNYW5hZ2VyXV0iCiAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Zi1tZXNoLWxvYWRlci1jb250YWluZXIiCiAgICAgICAgICAgICAgICAgIG9uLWNhbWVyYS1wb3NpdGlvbi1jaGFuZ2U9Il9vbkNhbWVyYVBvc2l0aW9uQ2hhbmdlZCIKICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDwvdGYtbWVzaC1sb2FkZXI+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldz4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICA8L3RmLWRhc2hib2FyZC1sYXlvdXQ+CgogICAgPHN0eWxlIGluY2x1ZGU9ImRhc2hib2FyZC1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgLm5vLWRhdGEtd2FybmluZyB7CiAgICAgICAgbWF4LXdpZHRoOiA1NDBweDsKICAgICAgICBtYXJnaW46IDgwcHggYXV0byAwIGF1dG87CiAgICAgIH0KICAgICAgcGFwZXItcmFkaW8tYnV0dG9uIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwYWRkaW5nOiA1cHg7CiAgICAgIH0KICAgICAgLnNpZGViYXItc2VjdGlvbiBoMyB7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDVweDsKICAgICAgfQoKICAgICAgLnJ1bnMtc2VsZWN0b3IgewogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgfQoKICAgICAgdGYtcnVucy1zZWxlY3RvciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgfQoKICAgICAgLnZpZXctY29udHJvbCB7CiAgICAgICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgLnZpZXctY29udHJvbCBoMy50aXRsZSB7CiAgICAgICAgcGFkZGluZy10b3A6IDE2cHg7CiAgICAgICAgcGFkZGluZy1ib3R0b206IDE2cHg7CiAgICAgIH0KCiAgICAgIC5hbGxjb250cm9scyAudmlldy1jb250cm9sIHBhcGVyLXJhZGlvLWdyb3VwIHsKICAgICAgICBtYXJnaW4tdG9wOiA1cHg7CiAgICAgIH0KICAgICAgLyogTGF5b3V0IG11c3QgYmUgaG9yaXpvbnRhbCwgaS5lLiBpdGVtcyBhcnJhbmdlZCBpbiBhIHJvdy4gSWYgaXRlbXMgY2Fubm90IGZpdCBpbiBhIHJvdywKICAgICAgICogdGhleSBzaG91bGQgYmUgbW92ZWQgdG8gbmV4dCBsaW5lLiBBbGwgaXRlbXMgbXVzdCBiZSBzcXVhcmUgYXQgYWxsIHRpbWVzLiBNaW5pbXVtIHNpemUgb2YKICAgICAgICogdGhlIGl0ZW0gaXMgNDgwcHguIFRoaXMgbWVhbnMgdGhhdCBtYXhpbXVtIHNpemUgb2YgdGhlIGl0ZW0gbXVzdCBiZSA0ODBweCArIDQ3OXB4ID0gOTU5cHguCiAgICAgICAqICovCiAgICAgIC5ob3Jpem9udGFsIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICB9CiAgICAgIHRmLW1lc2gtbG9hZGVyIHsKICAgICAgICB3aWR0aDogNDgwcHg7CiAgICAgICAgZmxleC1iYXNpczogNDgwcHg7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICA8L3N0eWxlPgogIGAsdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxHV3QucHJvdG90eXBlLCJyZWxvYWRPblJlYWR5Iix2b2lkIDApLHQoW28oe3R5cGU6QXJyYXl9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSxHV3QucHJvdG90eXBlLCJfc2VsZWN0ZWRSdW5zIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLEdXdC5wcm90b3R5cGUsIl9ydW5Ub1RhZ0luZm8iLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxHV3QucHJvdG90eXBlLCJfZGF0YU5vdEZvdW5kIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLEdXdC5wcm90b3R5cGUsIl90YWdGaWx0ZXIiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLEdXdC5wcm90b3R5cGUsIl9zZWxlY3RlZFZpZXciLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sR1d0LnByb3RvdHlwZSwiX3JlcXVlc3RNYW5hZ2VyIix2b2lkIDApLHQoW3MoIl9ydW5Ub1RhZ0luZm8iLCJfc2VsZWN0ZWRSdW5zIiwiX3RhZ0ZpbHRlciIpLGUoImRlc2lnbjp0eXBlIixBcnJheSksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sR1d0LnByb3RvdHlwZSwiX2NhdGVnb3JpZXMiLG51bGwpLEdXdD10KFtpKCJtZXNoLWRhc2hib2FyZCIpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLEdXdCk7bGV0IFdXdD1jbGFzcyBleHRlbmRzIHlle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9leHBhbmRlZD0hMSx0aGlzLl9ydW5Ub1ByQ3VydmVFbnRyeT17fSx0aGlzLl9wcmV2aW91c1J1blRvUHJDdXJ2ZUVudHJ5PXt9LHRoaXMuX2NvbG9yU2NhbGVGdW5jdGlvbj17c2NhbGU6QU99LHRoaXMuX2NhbmNlbGxlcj1uZXcgTk8sdGhpcy5feENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZD0oKT0+e2NvbnN0IHQ9bmV3IG5fdC5TY2FsZXMuTGluZWFyO3JldHVybntzY2FsZTp0LGF4aXM6bmV3IG5fdC5BeGVzLk51bWVyaWModCwiYm90dG9tIiksYWNjZXNzb3I6dD0+dC5yZWNhbGx9fSx0aGlzLl95VmFsdWVBY2Nlc3Nvcj10PT50LnByZWNpc2lvbix0aGlzLl90b29sdGlwQ29sdW1ucz0oKCk9Pntjb25zdCB0PW9fdCg0KSxlPWU9PmlzTmFOKGUpPyJOYU4iOnQoZSk7cmV0dXJuW3t0aXRsZToiUnVuIixldmFsdWF0ZTp0PT50LmRhdGFzZXQubWV0YWRhdGEoKS5uYW1lfSx7dGl0bGU6IlRocmVzaG9sZCIsZXZhbHVhdGU6dD0+ZSh0LmRhdHVtLnRocmVzaG9sZHMpfSx7dGl0bGU6IlByZWNpc2lvbiIsZXZhbHVhdGU6dD0+ZSh0LmRhdHVtLnByZWNpc2lvbil9LHt0aXRsZToiUmVjYWxsIixldmFsdWF0ZTp0PT5lKHQuZGF0dW0ucmVjYWxsKX0se3RpdGxlOiJUUCIsZXZhbHVhdGU6dD0+dC5kYXR1bS50cnVlX3Bvc2l0aXZlc30se3RpdGxlOiJGUCIsZXZhbHVhdGU6dD0+dC5kYXR1bS5mYWxzZV9wb3NpdGl2ZXN9LHt0aXRsZToiVE4iLGV2YWx1YXRlOnQ9PnQuZGF0dW0udHJ1ZV9uZWdhdGl2ZXN9LHt0aXRsZToiRk4iLGV2YWx1YXRlOnQ9PnQuZGF0dW0uZmFsc2VfbmVnYXRpdmVzfV19KSgpLHRoaXMuX3Nlcmllc0RhdGFGaWVsZHM9WyJ0aHJlc2hvbGRzIiwicHJlY2lzaW9uIiwicmVjYWxsIiwidHJ1ZV9wb3NpdGl2ZXMiLCJmYWxzZV9wb3NpdGl2ZXMiLCJ0cnVlX25lZ2F0aXZlcyIsImZhbHNlX25lZ2F0aXZlcyJdLHRoaXMuX2RlZmF1bHRYUmFuZ2U9Wy0uMDUsMS4wNV0sdGhpcy5fZGVmYXVsdFlSYW5nZT1bLS4wNSwxLjA1XSx0aGlzLl9yZXF1ZXN0RGF0YT0odCxlLG4pPT57Y29uc3QgaT1ncigpLnBsdWdpblJvdXRlKCJwcl9jdXJ2ZXMiLCIvcHJfY3VydmVzIik7UHJvbWlzZS5hbGwodC5tYXAoKHQ9Pntjb25zdCBuPVZPKGkse3RhZzp0aGlzLnRhZyxydW46dH0pO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QobikudGhlbigobj0+e2Uoe2l0ZW06dCxkYXRhOm59KX0pKX0pKSkuZmluYWxseSgoKCk9PntuKCl9KSl9LHRoaXMuX3Ntb290aGluZ0VuYWJsZWQ9ITF9X2NyZWF0ZVByb2Nlc3NEYXRhRnVuY3Rpb24oKXtyZXR1cm4odCxlLG4pPT57dGhpcy5zZXQoIl9ydW5Ub0RhdGFPdmVyVGltZSIsT2JqZWN0LmFzc2lnbih7fSx0aGlzLl9ydW5Ub0RhdGFPdmVyVGltZSxuKSl9fV9jb21wdXRlUnVuQ29sb3IodCl7cmV0dXJuIEFPKHQpfWNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLl9hdHRhY2hlZD0hMCx0aGlzLnJlbG9hZCgpfV9nZXRDaGFydERhdGFMb2FkZXIoKXtyZXR1cm4gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoInRmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXIiKX1yZWxvYWQoKXt0aGlzLl9hdHRhY2hlZCYmKDAhPT10aGlzLnJ1bnMubGVuZ3RoP3RoaXMuX2dldENoYXJ0RGF0YUxvYWRlcigpLnJlbG9hZCgpOnRoaXMuc2V0KCJfcnVuVG9EYXRhT3ZlclRpbWUiLHt9KSl9X3NldENoYXJ0RGF0YSgpe3ZhciB0PXRoaXMuX3J1blRvUHJDdXJ2ZUVudHJ5LGU9dGhpcy5fcHJldmlvdXNSdW5Ub1ByQ3VydmVFbnRyeSxuPXRoaXMuX3NldE9mUmVsZXZhbnRSdW5zO3dlLmZvck93bih0LCgoaSxyKT0+e2NvbnN0IG89ZVtyXTtvJiZ0W3JdLnN0ZXA9PT1vLnN0ZXB8fChuW3JdP3RoaXMuX3VwZGF0ZVNlcmllc0RhdGFGb3JSdW4ocixpKTp0aGlzLl9jbGVhclNlcmllc0RhdGEocikpfSkpfV91cGRhdGVTZXJpZXNEYXRhRm9yUnVuKHQsZSl7Y29uc3Qgbj13ZS5yZWR1Y2UodGhpcy5fc2VyaWVzRGF0YUZpZWxkcywoKHQsbik9Pih0W25dPWVbbl0uc2xpY2UoKS5yZXZlcnNlKCksdCkpLHt9KSxpPW5ldyBBcnJheShuW3RoaXMuX3Nlcmllc0RhdGFGaWVsZHNbMF1dLmxlbmd0aCk7Zm9yKGxldCB0PTA7dDxpLmxlbmd0aDt0KyspaVt0XT13ZS5tYXBWYWx1ZXMobiwoZT0+ZVt0XSkpO2NvbnN0IHI9dGhpcy5fZ2V0Q2hhcnREYXRhTG9hZGVyKCk7ci5zZXRTZXJpZXNEYXRhKHQsaSksci5jb21taXRDaGFuZ2VzKCl9X2NsZWFyU2VyaWVzRGF0YSh0KXtjb25zdCBlPXRoaXMuX2dldENoYXJ0RGF0YUxvYWRlcigpO2Uuc2V0U2VyaWVzRGF0YSh0LFtdKSxlLmNvbW1pdENoYW5nZXMoKX1fdXBkYXRlUnVuVG9QckN1cnZlRW50cnkoKXt2YXIgdD10aGlzLnJ1blRvU3RlcENhcDtjb25zdCBlPXt9O3dlLmZvck93bih0aGlzLl9ydW5Ub0RhdGFPdmVyVGltZSwoKG4saSk9PntuJiZuLmxlbmd0aCYmKGVbaV09dGhpcy5fY29tcHV0ZUVudHJ5Q2xvc2VzdE9yRXF1YWxUb1N0ZXBDYXAodFtpXSxuKSl9KSksdGhpcy5zZXQoIl9wcmV2aW91c1J1blRvUHJDdXJ2ZUVudHJ5Iix0aGlzLl9ydW5Ub1ByQ3VydmVFbnRyeSksdGhpcy5zZXQoIl9ydW5Ub1ByQ3VydmVFbnRyeSIsZSl9X25vdGlmeURhdGFDaGFuZ2UoKXt0aGlzLm9uRGF0YUNoYW5nZSYmdGhpcy5vbkRhdGFDaGFuZ2UodGhpcy5fcnVuVG9EYXRhT3ZlclRpbWUpfV9jb21wdXRlRW50cnlDbG9zZXN0T3JFcXVhbFRvU3RlcENhcCh0LGUpe2NvbnN0IG49TWF0aC5taW4od2Uuc29ydGVkSW5kZXgoZS5tYXAoKHQ9PnQuc3RlcCkpLHQpLGUubGVuZ3RoLTEpO3JldHVybiBlW25dfWdldCBfcnVuc1dpdGhTdGVwQXZhaWxhYmxlKCl7dmFyIHQ9dGhpcy5fcnVuVG9QckN1cnZlRW50cnk7cmV0dXJuIHdlLmZpbHRlcih0aGlzLnJ1bnMsKGU9PnRbZV0pKS5zb3J0KCl9Z2V0IF9zZXRPZlJlbGV2YW50UnVucygpe2NvbnN0IHQ9e307cmV0dXJuIHdlLmZvckVhY2godGhpcy5fcnVuc1dpdGhTdGVwQXZhaWxhYmxlLChlPT57dFtlXT0hMH0pKSx0fV9jb21wdXRlQ3VycmVudFN0ZXBGb3JSdW4odCxlKXtjb25zdCBuPXRbZV07cmV0dXJuIG4/bi5zdGVwOm51bGx9X2NvbXB1dGVDdXJyZW50V2FsbFRpbWVGb3JSdW4odCxlKXtjb25zdCBuPXRbZV07cmV0dXJuIG4/bmV3IERhdGUoMWUzKm4ud2FsbF90aW1lKS50b1N0cmluZygpOm51bGx9X3RvZ2dsZUV4cGFuZGVkKHQpe3RoaXMuc2V0KCJfZXhwYW5kZWQiLCF0aGlzLl9leHBhbmRlZCksdGhpcy5yZWRyYXcoKX1fcmVzZXREb21haW4oKXt0aGlzLl9nZXRDaGFydERhdGFMb2FkZXIoKS5yZXNldERvbWFpbigpfXJlZHJhdygpe3RoaXMuX2dldENoYXJ0RGF0YUxvYWRlcigpLnJlZHJhdygpfX07V1d0LnRlbXBsYXRlPV9lYAogICAgPHRmLWNhcmQtaGVhZGluZwogICAgICB0YWc9IltbdGFnXV0iCiAgICAgIGRpc3BsYXktbmFtZT0iW1t0YWdNZXRhZGF0YS5kaXNwbGF5TmFtZV1dIgogICAgICBkZXNjcmlwdGlvbj0iW1t0YWdNZXRhZGF0YS5kZXNjcmlwdGlvbl1dIgogICAgPjwvdGYtY2FyZC1oZWFkaW5nPgoKICAgIDx0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyCiAgICAgIHgtY29tcG9uZW50cy1jcmVhdGlvbi1tZXRob2Q9IltbX3hDb21wb25lbnRzQ3JlYXRpb25NZXRob2RdXSIKICAgICAgeS12YWx1ZS1hY2Nlc3Nvcj0iW1tfeVZhbHVlQWNjZXNzb3JdXSIKICAgICAgdG9vbHRpcC1jb2x1bW5zPSJbW190b29sdGlwQ29sdW1uc11dIgogICAgICBjb2xvci1zY2FsZT0iW1tfY29sb3JTY2FsZUZ1bmN0aW9uXV0iCiAgICAgIGRlZmF1bHQteC1yYW5nZT0iW1tfZGVmYXVsdFhSYW5nZV1dIgogICAgICBkZWZhdWx0LXktcmFuZ2U9IltbX2RlZmF1bHRZUmFuZ2VdXSIKICAgICAgc21vb3RoaW5nLWVuYWJsZWQ9IltbX3Ntb290aGluZ0VuYWJsZWRdXSIKICAgICAgcmVxdWVzdC1tYW5hZ2VyPSJbW3JlcXVlc3RNYW5hZ2VyXV0iCiAgICAgIGRhdGEtdG8tbG9hZD0iW1tydW5zXV0iCiAgICAgIGRhdGEtc2VyaWVzPSJbW3J1bnNdXSIKICAgICAgbG9hZC1rZXk9IltbdGFnXV0iCiAgICAgIHJlcXVlc3QtZGF0YT0iW1tfcmVxdWVzdERhdGFdXSIKICAgICAgbG9hZC1kYXRhLWNhbGxiYWNrPSJbW19jcmVhdGVQcm9jZXNzRGF0YUZ1bmN0aW9uKCldXSIKICAgICAgYWN0aXZlPSJbW2FjdGl2ZV1dIgogICAgPjwvdGYtbGluZS1jaGFydC1kYXRhLWxvYWRlcj4KCiAgICA8ZGl2IGlkPSJidXR0b25zLXJvdyI+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIHNlbGVjdGVkJD0iW1tfZXhwYW5kZWRdXSIKICAgICAgICBpY29uPSJmdWxsc2NyZWVuIgogICAgICAgIG9uLXRhcD0iX3RvZ2dsZUV4cGFuZGVkIgogICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgaWNvbj0ic2V0dGluZ3Mtb3ZlcnNjYW4iCiAgICAgICAgb24tdGFwPSJfcmVzZXREb21haW4iCiAgICAgICAgdGl0bGU9IlJlc2V0IGF4ZXMgdG8gWzAsIDFdLiIKICAgICAgPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGlkPSJzdGVwLWxlZ2VuZCI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX3J1bnNXaXRoU3RlcEF2YWlsYWJsZV1dIiBhcz0icnVuIj4KICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtcm93Ij4KICAgICAgICAgIDxkaXYKICAgICAgICAgICAgY2xhc3M9ImNvbG9yLWJveCIKICAgICAgICAgICAgc3R5bGU9ImJhY2tncm91bmQ6IFtbX2NvbXB1dGVSdW5Db2xvcihydW4pXV07IgogICAgICAgICAgPjwvZGl2PgogICAgICAgICAgW1tydW5dXSBpcyBhdAogICAgICAgICAgPHNwYW4gY2xhc3M9InN0ZXAtbGFiZWwtdGV4dCI+CiAgICAgICAgICAgIHN0ZXAgW1tfY29tcHV0ZUN1cnJlbnRTdGVwRm9yUnVuKF9ydW5Ub1ByQ3VydmVFbnRyeSwgcnVuKV1dIDwvc3BhbgogICAgICAgICAgPjxiciAvPgogICAgICAgICAgPHNwYW4gY2xhc3M9IndhbGwtdGltZS1sYWJlbC10ZXh0Ij4KICAgICAgICAgICAgKFtbX2NvbXB1dGVDdXJyZW50V2FsbFRpbWVGb3JSdW4oX3J1blRvUHJDdXJ2ZUVudHJ5LCBydW4pXV0pCiAgICAgICAgICA8L3NwYW4+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L2Rpdj4KCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgd2lkdGg6IDUwMHB4OwogICAgICAgIG1hcmdpbi1yaWdodDogMTBweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyNXB4OwogICAgICB9CiAgICAgIDpob3N0KFtfZXhwYW5kZWRdKSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KICAgICAgdGYtbGluZS1jaGFydC1kYXRhLWxvYWRlciB7CiAgICAgICAgaGVpZ2h0OiAzMDBweDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KICAgICAgOmhvc3QoW19leHBhbmRlZF0pIHRmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXIgewogICAgICAgIGhlaWdodDogNjAwcHg7CiAgICAgIH0KICAgICAgI2J1dHRvbnMtcm93IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgIH0KICAgICAgI2J1dHRvbnMtcm93IHBhcGVyLWljb24tYnV0dG9uIHsKICAgICAgICBjb2xvcjogIzIxOTZmMzsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMDAlOwogICAgICAgIHdpZHRoOiAzMnB4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBwYWRkaW5nOiA0cHg7CiAgICAgIH0KICAgICAgI2J1dHRvbnMtcm93IHBhcGVyLWljb24tYnV0dG9uW3NlbGVjdGVkXSB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tdGItdWktbGlnaHQtYWNjZW50KTsKICAgICAgfQogICAgICAjc3RlcC1sZWdlbmQgewogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgZm9udC1zaXplOiAwLjhlbTsKICAgICAgICBtYXgtaGVpZ2h0OiAyMDBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIHBhZGRpbmc6IDAgMCAwIDEwcHg7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KICAgICAgLmxlZ2VuZC1yb3cgewogICAgICAgIG1hcmdpbjogNXB4IDAgNXB4IDA7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KICAgICAgLmNvbG9yLWJveCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDFweDsKICAgICAgICB3aWR0aDogMTBweDsKICAgICAgICBoZWlnaHQ6IDEwcHg7CiAgICAgIH0KICAgICAgLnN0ZXAtbGFiZWwtdGV4dCB7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgIH0KICAgICAgLndhbGwtdGltZS1sYWJlbC10ZXh0IHsKICAgICAgICBjb2xvcjogIzg4ODsKICAgICAgICBmb250LXNpemU6IDAuOGVtOwogICAgICB9CiAgICA8L3N0eWxlPgogIGAsdChbbyh7dHlwZTpBcnJheX0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLFdXdC5wcm90b3R5cGUsInJ1bnMiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sV1d0LnByb3RvdHlwZSwidGFnIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLFdXdC5wcm90b3R5cGUsInRhZ01ldGFkYXRhIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLFdXdC5wcm90b3R5cGUsInJ1blRvU3RlcENhcCIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixocildLFdXdC5wcm90b3R5cGUsInJlcXVlc3RNYW5hZ2VyIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sV1d0LnByb3RvdHlwZSwiYWN0aXZlIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFdXdC5wcm90b3R5cGUsIl9leHBhbmRlZCIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxXV3QucHJvdG90eXBlLCJfcnVuVG9QckN1cnZlRW50cnkiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sV1d0LnByb3RvdHlwZSwiX3ByZXZpb3VzUnVuVG9QckN1cnZlRW50cnkiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sV1d0LnByb3RvdHlwZSwiX3J1blRvRGF0YU92ZXJUaW1lIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sV1d0LnByb3RvdHlwZSwib25EYXRhQ2hhbmdlIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLFdXdC5wcm90b3R5cGUsIl9jb2xvclNjYWxlRnVuY3Rpb24iLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsTk8pXSxXV3QucHJvdG90eXBlLCJfY2FuY2VsbGVyIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sV1d0LnByb3RvdHlwZSwiX2F0dGFjaGVkIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLFdXdC5wcm90b3R5cGUsIl94Q29tcG9uZW50c0NyZWF0aW9uTWV0aG9kIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLFdXdC5wcm90b3R5cGUsIl95VmFsdWVBY2Nlc3NvciIsdm9pZCAwKSx0KFtvKHt0eXBlOkFycmF5fSksZSgiZGVzaWduOnR5cGUiLEFycmF5KV0sV1d0LnByb3RvdHlwZSwiX3Rvb2x0aXBDb2x1bW5zIix2b2lkIDApLHQoW28oe3R5cGU6QXJyYXl9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSxXV3QucHJvdG90eXBlLCJfc2VyaWVzRGF0YUZpZWxkcyIsdm9pZCAwKSx0KFtvKHt0eXBlOkFycmF5fSksZSgiZGVzaWduOnR5cGUiLEFycmF5KV0sV1d0LnByb3RvdHlwZSwiX2RlZmF1bHRYUmFuZ2UiLHZvaWQgMCksdChbbyh7dHlwZTpBcnJheX0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLFdXdC5wcm90b3R5cGUsIl9kZWZhdWx0WVJhbmdlIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sV1d0LnByb3RvdHlwZSwiX3JlcXVlc3REYXRhIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sV1d0LnByb3RvdHlwZSwiX3Ntb290aGluZ0VuYWJsZWQiLHZvaWQgMCksdChbYSgicnVucyIsInRhZyIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sV1d0LnByb3RvdHlwZSwicmVsb2FkIixudWxsKSx0KFthKCJfcnVuVG9QckN1cnZlRW50cnkiLCJfcHJldmlvdXNSdW5Ub1ByQ3VydmVFbnRyeSIsIl9zZXRPZlJlbGV2YW50UnVucyIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sV1d0LnByb3RvdHlwZSwiX3NldENoYXJ0RGF0YSIsbnVsbCksdChbYSgiX3J1blRvRGF0YU92ZXJUaW1lIiwicnVuVG9TdGVwQ2FwIiksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pLGUoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxXV3QucHJvdG90eXBlLCJfdXBkYXRlUnVuVG9QckN1cnZlRW50cnkiLG51bGwpLHQoW2EoIl9ydW5Ub0RhdGFPdmVyVGltZSIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sV1d0LnByb3RvdHlwZSwiX25vdGlmeURhdGFDaGFuZ2UiLG51bGwpLHQoW3MoInJ1bnMiLCJfcnVuVG9QckN1cnZlRW50cnkiKSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFdXdC5wcm90b3R5cGUsIl9ydW5zV2l0aFN0ZXBBdmFpbGFibGUiLG51bGwpLHQoW3MoIl9ydW5zV2l0aFN0ZXBBdmFpbGFibGUiKSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxXV3QucHJvdG90eXBlLCJfc2V0T2ZSZWxldmFudFJ1bnMiLG51bGwpLFdXdD10KFtpKCJ0Zi1wci1jdXJ2ZS1jYXJkIildLFdXdCk7bGV0IHFXdD1jbGFzcyBleHRlbmRzIHlle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9ydW5Ub1N0ZXBJbmRleD17fX1fY29tcHV0ZUNvbG9yRm9yUnVuKHQpe3JldHVybiBBTyh0KX1fY29tcHV0ZVRpbWVUZXh0Rm9yUnVuKHQsZSxuLGkpe2NvbnN0IHI9ZVtuXTtpZighd2UuaXNOdW1iZXIocikpcmV0dXJuIiI7Y29uc3Qgbz10W25dO2lmKCFvKXJldHVybiIiO2NvbnN0IGE9b1tyXVtpXTtpZigic3RlcCI9PT1pKXJldHVybmBzdGVwICR7YX1gO2lmKCJyZWxhdGl2ZSI9PT1pKXJldHVybiBhPDE/YCR7KDFlMyphKS50b0ZpeGVkKDIpfSBtc2A6YCR7YS50b0ZpeGVkKDIpfSBzYDtpZigid2FsbF90aW1lIj09PWkpcmV0dXJuIG5ldyBEYXRlKDFlMyphKS50b1N0cmluZygpO3Rocm93IG5ldyBFcnJvcihgVGhlIGRpc3BsYXkgdHlwZSBvZiAke2l9IGlzIG5vdCByZWNvZ25pemVkLmApfV9zbGlkZXJWYWx1ZUNoYW5nZWQodCl7Y29uc3QgZT10LnRhcmdldC5kYXRhc2V0LnJ1bixuPXQudGFyZ2V0LmltbWVkaWF0ZVZhbHVlLGk9T2JqZWN0LmFzc2lnbih7fSx0aGlzLl9ydW5Ub1N0ZXBJbmRleCk7aXNOYU4obik/ZGVsZXRlIGlbZV06aVtlXT10LnRhcmdldC5pbW1lZGlhdGVWYWx1ZSx0aGlzLl9ydW5Ub1N0ZXBJbmRleD1pfV9jb21wdXRlTWF4U3RlcEluZGV4Rm9yUnVuKHQsZSl7Y29uc3Qgbj10W2VdO3JldHVybiBuJiZuLmxlbmd0aD9uLmxlbmd0aC0xOjB9X3VwZGF0ZVN0ZXBzRm9yTmV3UnVucygpe3ZhciB0PXRoaXMucnVuVG9BdmFpbGFibGVUaW1lRW50cmllcztjb25zdCBlPU9iamVjdC5hc3NpZ24oe30sdGhpcy5fcnVuVG9TdGVwSW5kZXgpO3dlLmZvck93bih0LCgodCxuKT0+e3dlLmlzTnVtYmVyKGVbbl0pfHwoZVtuXT10Lmxlbmd0aC0xKX0pKSx0aGlzLl9ydW5Ub1N0ZXBJbmRleD1lfV9nZXRTdGVwKHQsZSl7cmV0dXJuIHRoaXMuX3J1blRvU3RlcEluZGV4P3RoaXMuX3J1blRvU3RlcEluZGV4W2VdOjB9X2NvbXB1dGVSdW5Ub1N0ZXAodCxlKXtjb25zdCBuPXt9O3JldHVybiB3ZS5mb3JPd24oZSwoKGUsaSk9Pntjb25zdCByPXRbaV07ciYmKG5baV09cltlXS5zdGVwKX0pKSxufWdldCBfcnVuc1dpdGhTbGlkZXJzKCl7dmFyIHQ9dGhpcy5ydW5Ub0F2YWlsYWJsZVRpbWVFbnRyaWVzO3JldHVybiB0aGlzLnJ1bnMuZmlsdGVyKChlPT50W2VdKSl9fTtxV3QudGVtcGxhdGU9X2VgCiAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19ydW5zV2l0aFNsaWRlcnNdXSIgYXM9InJ1biI+CiAgICAgIDxkaXYgY2xhc3M9InJ1bi13aWRnZXQiPgogICAgICAgIDxkaXYgY2xhc3M9InJ1bi1kaXNwbGF5LWNvbnRhaW5lciI+CiAgICAgICAgICA8ZGl2CiAgICAgICAgICAgIGNsYXNzPSJydW4tY29sb3ItYm94IgogICAgICAgICAgICBzdHlsZT0iYmFja2dyb3VuZDpbW19jb21wdXRlQ29sb3JGb3JSdW4ocnVuKV1dOyIKICAgICAgICAgID48L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InJ1bi10ZXh0Ij5bW3J1bl1dPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic3RlcC1kaXNwbGF5LWNvbnRhaW5lciI+CiAgICAgICAgICBbW19jb21wdXRlVGltZVRleHRGb3JSdW4ocnVuVG9BdmFpbGFibGVUaW1lRW50cmllcywgX3J1blRvU3RlcEluZGV4LAogICAgICAgICAgcnVuLCB0aW1lRGlzcGxheVR5cGUpXV0KICAgICAgICA8L2Rpdj4KICAgICAgICA8cGFwZXItc2xpZGVyCiAgICAgICAgICBkYXRhLXJ1biQ9IltbcnVuXV0iCiAgICAgICAgICBzdGVwPSIxIgogICAgICAgICAgdHlwZT0ibnVtYmVyIgogICAgICAgICAgbWluPSIwIgogICAgICAgICAgbWF4PSJbW19jb21wdXRlTWF4U3RlcEluZGV4Rm9yUnVuKHJ1blRvQXZhaWxhYmxlVGltZUVudHJpZXMsIHJ1bildXSIKICAgICAgICAgIHZhbHVlPSJbW19nZXRTdGVwKF9ydW5Ub1N0ZXBJbmRleCwgcnVuKV1dIgogICAgICAgICAgb24taW1tZWRpYXRlLXZhbHVlLWNoYW5nZWQ9Il9zbGlkZXJWYWx1ZUNoYW5nZWQiCiAgICAgICAgPjwvcGFwZXItc2xpZGVyPgogICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIC5ydW4td2lkZ2V0IHsKICAgICAgICBtYXJnaW46IDEwcHggMCAwIDA7CiAgICAgIH0KICAgICAgcGFwZXItc2xpZGVyIHsKICAgICAgICBtYXJnaW46IC04cHggMCAwIC0xNXB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICAgIC5zdGVwLWRpc3BsYXktY29udGFpbmVyIHsKICAgICAgICBmb250LXNpemU6IDAuOWVtOwogICAgICAgIG1hcmdpbjogMCAxNXB4IDAgMDsKICAgICAgfQogICAgICAucnVuLXRleHQgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgfQogICAgICAucnVuLWNvbG9yLWJveCB7CiAgICAgICAgd2lkdGg6IDEycHg7CiAgICAgICAgaGVpZ2h0OiAxMnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYCx0KFtvKHt0eXBlOkFycmF5fSksZSgiZGVzaWduOnR5cGUiLEFycmF5KV0scVd0LnByb3RvdHlwZSwicnVucyIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxxV3QucHJvdG90eXBlLCJydW5Ub0F2YWlsYWJsZVRpbWVFbnRyaWVzIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0LG5vdGlmeTohMCxjb21wdXRlZDoiX2NvbXB1dGVSdW5Ub1N0ZXAocnVuVG9BdmFpbGFibGVUaW1lRW50cmllcywgX3J1blRvU3RlcEluZGV4KSJ9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0scVd0LnByb3RvdHlwZSwicnVuVG9TdGVwIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLHFXdC5wcm90b3R5cGUsInRpbWVEaXNwbGF5VHlwZSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxxV3QucHJvdG90eXBlLCJfcnVuVG9TdGVwSW5kZXgiLHZvaWQgMCksdChbYSgicnVuVG9BdmFpbGFibGVUaW1lRW50cmllcyIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0scVd0LnByb3RvdHlwZSwiX3VwZGF0ZVN0ZXBzRm9yTmV3UnVucyIsbnVsbCksdChbcygicnVucyIsInJ1blRvQXZhaWxhYmxlVGltZUVudHJpZXMiKSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLHFXdC5wcm90b3R5cGUsIl9ydW5zV2l0aFNsaWRlcnMiLG51bGwpLHFXdD10KFtpKCJ0Zi1wci1jdXJ2ZS1zdGVwcy1zZWxlY3RvciIpXSxxV3QpO2xldCBZV3Q9Y2xhc3MgZXh0ZW5kcyh0cih5ZSkpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnJlbG9hZE9uUmVhZHk9ITAsdGhpcy5fdGltZURpc3BsYXlUeXBlPSJzdGVwIix0aGlzLl9zZWxlY3RlZFJ1bnM9W10sdGhpcy5fcnVuVG9UYWdJbmZvPXt9LHRoaXMuX3RhZ1RvUnVuVG9EYXRhPXt9LHRoaXMuX2dldENhdGVnb3J5SXRlbUtleT10PT50LnRhZyx0aGlzLl9yZXF1ZXN0TWFuYWdlcj1uZXcgaHIsdGhpcy5fc3RlcD0wfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLnJlbG9hZE9uUmVhZHkmJnRoaXMucmVsb2FkKCl9cmVsb2FkKCl7UHJvbWlzZS5hbGwoW3RoaXMuX2ZldGNoVGFncygpXSkudGhlbigoKCk9Pnt0aGlzLl9yZWxvYWRDYXJkcygpfSkpfV9zaG91bGRPcGVuKHQpe3JldHVybiB0PD0yfV9mZXRjaFRhZ3MoKXtjb25zdCB0PWdyKCkucGx1Z2luUm91dGUoInByX2N1cnZlcyIsIi90YWdzIik7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbigodD0+e2lmKHdlLmlzRXF1YWwodCx0aGlzLl9ydW5Ub1RhZ0luZm8pKXJldHVybjtjb25zdCBlPW9yKHdlLm1hcFZhbHVlcyh0LCh0PT53ZS5rZXlzKHQpKSkpO3RoaXMuc2V0KCJfZGF0YU5vdEZvdW5kIiwwPT09ZS5sZW5ndGgpLHRoaXMuc2V0KCJfcnVuVG9UYWdJbmZvIix0KSx0aGlzLmFzeW5jKCgoKT0+e3RoaXMuc2V0KCJfY2F0ZWdvcmllc0RvbVJlYWR5IiwhMCl9KSl9KSl9X3JlbG9hZENhcmRzKCl7d2UuZm9yRWFjaCh0aGlzLnJvb3QucXVlcnlTZWxlY3RvckFsbCgidGYtcHItY3VydmUtY2FyZCIpLCh0PT57dC5yZWxvYWQoKX0pKX1nZXQgX2NhdGVnb3JpZXMoKXt2YXIgdD10aGlzLl9zZWxlY3RlZFJ1bnMsZT10aGlzLl90YWdGaWx0ZXI7cmV0dXJuIHhyKHdlLm1hcFZhbHVlcyh0aGlzLl9ydW5Ub1RhZ0luZm8sKHQ9Pk9iamVjdC5rZXlzKHQpKSksdCxlKX1nZXQgX3JlbGV2YW50U2VsZWN0ZWRSdW5zKCl7dmFyIHQ9dGhpcy5fcnVuVG9UYWdJbmZvO3JldHVybiB0aGlzLl9zZWxlY3RlZFJ1bnMuZmlsdGVyKChlPT50W2VdKSl9X3RhZ01ldGFkYXRhKHQsZSxuKXtjb25zdCBpPXt9O2UuZm9yRWFjaCgoZT0+e2lbZV09dFtlXVtuXX0pKTtjb25zdCByPW4ucmVwbGFjZSgvXC9wcl9jdXJ2ZXMkLywiIik7cmV0dXJuIEhPKGkscil9X2NyZWF0ZURhdGFDaGFuZ2VDYWxsYmFjayh0KXtyZXR1cm4gZT0+e3RoaXMuc2V0KCJfdGFnVG9SdW5Ub0RhdGEiLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0aGlzLl90YWdUb1J1blRvRGF0YSkse1t0XTplfSkpfX1nZXQgX3J1blRvQXZhaWxhYmxlVGltZUVudHJpZXMoKXt2YXIgdD10aGlzLl90YWdUb1J1blRvRGF0YTtjb25zdCBlPXt9O2Zvcihjb25zdFtuLGldb2YgT2JqZWN0LmVudHJpZXModCkpZm9yKGNvbnN0W3Rdb2YgT2JqZWN0LmVudHJpZXMoaSkpKG51bGw9PWVbdF18fG48ZVt0XSkmJihlW3RdPW4pO2NvbnN0IG49e307Zm9yKGNvbnN0W2kscl1vZiBPYmplY3QuZW50cmllcyhlKSl7Y29uc3QgZT10W3JdW2ldO25baV09ZS5tYXAoKHQ9Pih7c3RlcDp0LnN0ZXAsd2FsbF90aW1lOnQud2FsbF90aW1lLHJlbGF0aXZlOnQud2FsbF90aW1lLWVbMF0ud2FsbF90aW1lfSkpKX1yZXR1cm4gbn19O1lXdC50ZW1wbGF0ZT1fZWAKICAgIDx0Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyIiBzbG90PSJzaWRlYmFyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZXR0aW5ncyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgICA8dGYtb3B0aW9uLXNlbGVjdG9yCiAgICAgICAgICAgICAgaWQ9InRpbWUtdHlwZS1zZWxlY3RvciIKICAgICAgICAgICAgICBuYW1lPSJUaW1lIERpc3BsYXkgVHlwZSIKICAgICAgICAgICAgICBzZWxlY3RlZC1pZD0ie3tfdGltZURpc3BsYXlUeXBlfX0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJzdGVwIj5zdGVwPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgICAgPCEtLQogICAgICAgICAgICAtLT4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJyZWxhdGl2ZSI+cmVsYXRpdmU8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICA8IS0tCiAgICAgICAgICAgIC0tPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9IndhbGxfdGltZSI+d2FsbDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICA8L3RmLW9wdGlvbi1zZWxlY3Rvcj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19ydW5Ub0F2YWlsYWJsZVRpbWVFbnRyaWVzXV0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iIGlkPSJzdGVwcy1zZWxlY3Rvci1jb250YWluZXIiPgogICAgICAgICAgICAgIDx0Zi1wci1jdXJ2ZS1zdGVwcy1zZWxlY3RvcgogICAgICAgICAgICAgICAgcnVucz0iW1tfcmVsZXZhbnRTZWxlY3RlZFJ1bnNdXSIKICAgICAgICAgICAgICAgIHJ1bi10by1zdGVwPSJ7e19ydW5Ub1N0ZXB9fSIKICAgICAgICAgICAgICAgIHJ1bi10by1hdmFpbGFibGUtdGltZS1lbnRyaWVzPSJbW19ydW5Ub0F2YWlsYWJsZVRpbWVFbnRyaWVzXV0iCiAgICAgICAgICAgICAgICB0aW1lLWRpc3BsYXktdHlwZT0iW1tfdGltZURpc3BsYXlUeXBlXV0iCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIDwvdGYtcHItY3VydmUtc3RlcHMtc2VsZWN0b3I+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24gcnVucy1zZWxlY3RvciI+CiAgICAgICAgICA8dGYtcnVucy1zZWxlY3RvciBzZWxlY3RlZC1ydW5zPSJ7e19zZWxlY3RlZFJ1bnN9fSI+CiAgICAgICAgICA8L3RmLXJ1bnMtc2VsZWN0b3I+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjZW50ZXIiIHNsb3Q9ImNlbnRlciI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLXdhcm5pbmciPgogICAgICAgICAgICA8aDM+Tm8gcHJlY2lzaW9u4oCTcmVjYWxsIGN1cnZlIGRhdGEgd2FzIGZvdW5kLjwvaDM+CiAgICAgICAgICAgIDxwPlByb2JhYmxlIGNhdXNlczo8L3A+CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICBZb3UgaGF2ZW7igJl0IHdyaXR0ZW4gYW55IHByZWNpc2lvbuKAk3JlY2FsbCBkYXRhIHRvIHlvdXIgZXZlbnQKICAgICAgICAgICAgICAgIGZpbGVzLgogICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgPGxpPlRlbnNvckJvYXJkIGNhbuKAmXQgZmluZCB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvCiAgICAgICAgICAgICAgYWRkIGRhdGEgYW5kIHNldCB1cCB5b3VyIGV2ZW50IGZpbGVzLCBjaGVjayBvdXQgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCIKICAgICAgICAgICAgICAgID5SRUFETUU8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiCiAgICAgICAgICAgICAgICA+VGVuc29yQm9hcmQgdHV0b3JpYWw8L2EKICAgICAgICAgICAgICA+LgogICAgICAgICAgICA8L3A+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3UgdGhpbmsgVGVuc29yQm9hcmQgaXMgY29uZmlndXJlZCBwcm9wZXJseSwgcGxlYXNlIHNlZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQjbXktdGVuc29yYm9hcmQtaXNudC1zaG93aW5nLWFueS1kYXRhLXdoYXRzLXdyb25nIgogICAgICAgICAgICAgICAgPnRoZSBzZWN0aW9uIG9mIHRoZSBSRUFETUUgZGV2b3RlZCB0byBtaXNzaW5nIGRhdGEgcHJvYmxlbXM8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuCiAgICAgICAgICAgIDwvcD4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPHRmLXRhZy1maWx0ZXJlciB0YWctZmlsdGVyPSJ7e190YWdGaWx0ZXJ9fSI+PC90Zi10YWctZmlsdGVyZXI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jYXRlZ29yaWVzXV0iIGFzPSJjYXRlZ29yeSI+CiAgICAgICAgICAgIDx0Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldwogICAgICAgICAgICAgIGNhdGVnb3J5PSJbW2NhdGVnb3J5XV0iCiAgICAgICAgICAgICAgaW5pdGlhbC1vcGVuZWQ9IltbX3Nob3VsZE9wZW4oaW5kZXgpXV0iCiAgICAgICAgICAgICAgZ2V0LWNhdGVnb3J5LWl0ZW0ta2V5PSJbW19nZXRDYXRlZ29yeUl0ZW1LZXldXSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0Zi1wci1jdXJ2ZS1jYXJkCiAgICAgICAgICAgICAgICAgIGFjdGl2ZT0iW1thY3RpdmVdXSIKICAgICAgICAgICAgICAgICAgcnVucz0iW1tpdGVtLnJ1bnNdXSIKICAgICAgICAgICAgICAgICAgdGFnPSJbW2l0ZW0udGFnXV0iCiAgICAgICAgICAgICAgICAgIHRhZy1tZXRhZGF0YT0iW1tfdGFnTWV0YWRhdGEoX3J1blRvVGFnSW5mbywgaXRlbS5ydW5zLCBpdGVtLnRhZyldXSIKICAgICAgICAgICAgICAgICAgcmVxdWVzdC1tYW5hZ2VyPSJbW19yZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgICAgICAgICAgICBydW4tdG8tc3RlcC1jYXA9IltbX3J1blRvU3RlcF1dIgogICAgICAgICAgICAgICAgICBvbi1kYXRhLWNoYW5nZT0iW1tfY3JlYXRlRGF0YUNoYW5nZUNhbGxiYWNrKGl0ZW0udGFnKV1dIgogICAgICAgICAgICAgICAgPjwvdGYtcHItY3VydmUtY2FyZD4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3RmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGYtZGFzaGJvYXJkLWxheW91dD4KCiAgICA8c3R5bGUgaW5jbHVkZT0iZGFzaGJvYXJkLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAubm8tZGF0YS13YXJuaW5nIHsKICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OwogICAgICAgIG1hcmdpbjogODBweCBhdXRvIDAgYXV0bzsKICAgICAgfQoKICAgICAgLyoqIERvIG5vdCBsZXQgdGhlIHN0ZXBzIHNlbGVjdG9yIG9jY2x1ZGUgdGhlIHJ1biBzZWxlY3Rvci4gKi8KICAgICAgI3N0ZXBzLXNlbGVjdG9yLWNvbnRhaW5lciB7CiAgICAgICAgbWF4LWhlaWdodDogNjAlOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYCx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFlXdC5wcm90b3R5cGUsInJlbG9hZE9uUmVhZHkiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sWVd0LnByb3RvdHlwZSwiX3RpbWVEaXNwbGF5VHlwZSIsdm9pZCAwKSx0KFtvKHt0eXBlOkFycmF5fSksZSgiZGVzaWduOnR5cGUiLEFycmF5KV0sWVd0LnByb3RvdHlwZSwiX3NlbGVjdGVkUnVucyIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxZV3QucHJvdG90eXBlLCJfcnVuVG9UYWdJbmZvIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLFlXdC5wcm90b3R5cGUsIl90YWdUb1J1blRvRGF0YSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdCxub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sWVd0LnByb3RvdHlwZSwiX3J1blRvU3RlcCIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFlXdC5wcm90b3R5cGUsIl9kYXRhTm90Rm91bmQiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sWVd0LnByb3RvdHlwZSwiX3RhZ0ZpbHRlciIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFlXdC5wcm90b3R5cGUsIl9jYXRlZ29yaWVzRG9tUmVhZHkiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sWVd0LnByb3RvdHlwZSwiX2dldENhdGVnb3J5SXRlbUtleSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixocildLFlXdC5wcm90b3R5cGUsIl9yZXF1ZXN0TWFuYWdlciIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcixub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sWVd0LnByb3RvdHlwZSwiX3N0ZXAiLHZvaWQgMCksdChbcygiX3J1blRvVGFnSW5mbyIsIl9zZWxlY3RlZFJ1bnMiLCJfdGFnRmlsdGVyIiwiX2NhdGVnb3JpZXNEb21SZWFkeSIpLGUoImRlc2lnbjp0eXBlIixBcnJheSksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sWVd0LnByb3RvdHlwZSwiX2NhdGVnb3JpZXMiLG51bGwpLHQoW3MoIl9zZWxlY3RlZFJ1bnMiLCJfcnVuVG9UYWdJbmZvIiksZSgiZGVzaWduOnR5cGUiLEFycmF5KSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxZV3QucHJvdG90eXBlLCJfcmVsZXZhbnRTZWxlY3RlZFJ1bnMiLG51bGwpLHQoW3MoIl90YWdUb1J1blRvRGF0YSIpLGUoImRlc2lnbjp0eXBlIixPYmplY3QpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFlXdC5wcm90b3R5cGUsIl9ydW5Ub0F2YWlsYWJsZVRpbWVFbnRyaWVzIixudWxsKSxZV3Q9dChbaSgidGYtcHItY3VydmUtZGFzaGJvYXJkIildLFlXdCk7bGV0IFhXdD1jbGFzcyBleHRlbmRzKHRyKHllKSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2luc3RhbGxDb21tYW5kPSJwaXAgaW5zdGFsbCAtVSB0ZW5zb3Jib2FyZC1wbHVnaW4tcHJvZmlsZSJ9X2NvcHlJbnN0YWxsQ29tbWFuZCgpe3JldHVybiBuKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD0oKT0+bih0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuJC5jb21tYW5kVGV4dGFyZWEuc2VsZWN0KCk7dHJ5e3lpZWxkIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRoaXMuX2luc3RhbGxDb21tYW5kKX1jYXRjaCh0KXtpZighZG9jdW1lbnQuZXhlY0NvbW1hbmQoImNvcHkiKSlyZXR1cm4gUHJvbWlzZS5yZWplY3QoKX19KSksZT10aGlzLiQuY29waWVkTWVzc2FnZTt0cnl7eWllbGQgdCgpLGUuaW5uZXJUZXh0PSJDb3BpZWQuIn1jYXRjaCh0KXtlLmlubmVyVGV4dD0iRmFpbGVkIHRvIGNvcHkgdG8gY2xpcGJvYXJkLiJ9fSkpfV9yZW1vdmVDb3BpZWRNZXNzYWdlKCl7dGhpcy4kLmNvcGllZE1lc3NhZ2UuaW5uZXJUZXh0PSIifX07WFd0LnRlbXBsYXRlPV9lYAogICAgPGRpdiBjbGFzcz0ibWVzc2FnZSI+CiAgICAgIDxoMz5UaGUgcHJvZmlsZSBwbHVnaW4gaGFzIG1vdmVkLjwvaDM+CiAgICAgIDxwPgogICAgICAgIFBsZWFzZSBpbnN0YWxsIHRoZSBuZXcgdmVyc2lvbiBvZiB0aGUgcHJvZmlsZSBwbHVnaW4gZnJvbSBQeVBJIGJ5CiAgICAgICAgcnVubmluZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQgZnJvbSB0aGUgbWFjaGluZSBydW5uaW5nIFRlbnNvckJvYXJkOgogICAgICA8L3A+CiAgICAgIDx0ZXh0YXJlYQogICAgICAgIGlkPSJjb21tYW5kVGV4dGFyZWEiCiAgICAgICAgcmVhZG9ubHk9IiIKICAgICAgICByb3dzPSIxIgogICAgICAgIG9uLWJsdXI9Il9yZW1vdmVDb3BpZWRNZXNzYWdlIgogICAgICA+CltbX2luc3RhbGxDb21tYW5kXV08L3RleHRhcmVhCiAgICAgID4KICAgICAgPGRpdiBpZD0iY29weUNvbnRhaW5lciI+CiAgICAgICAgPHNwYW4gaWQ9ImNvcGllZE1lc3NhZ2UiPjwvc3Bhbj4KICAgICAgICA8cGFwZXItYnV0dG9uIHJhaXNlZD0iIiBvbi10YXA9Il9jb3B5SW5zdGFsbENvbW1hbmQiCiAgICAgICAgICA+Q29weSB0byBjbGlwYm9hcmQ8L3BhcGVyLWJ1dHRvbgogICAgICAgID4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICB9CgogICAgICAubWVzc2FnZSB7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgIH0KICAgICAgI2NvbW1hbmRUZXh0YXJlYSB7CiAgICAgICAgbWFyZ2luLXRvcDogMWV4OwogICAgICAgIHBhZGRpbmc6IDFleCAxZW07CiAgICAgICAgcmVzaXplOiB2ZXJ0aWNhbDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQogICAgICAjY29weUNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgfQogICAgICAjY29waWVkTWVzc2FnZSB7CiAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyOwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgICAgcGFkZGluZy1yaWdodDogMWVtOwogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICB9CiAgICA8L3N0eWxlPgogIGAsdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sWFd0LnByb3RvdHlwZSwiX2luc3RhbGxDb21tYW5kIix2b2lkIDApLFhXdD10KFtpKCJ0Zi1wcm9maWxlLXJlZGlyZWN0LWRhc2hib2FyZCIpXSxYV3QpO2xldCAkV3Q9Y2xhc3MgZXh0ZW5kcyh0cih1bCkpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnJlbG9hZE9uUmVhZHk9ITAsdGhpcy5fc2hvd0Rvd25sb2FkTGlua3M9QnMoIl9zaG93RG93bmxvYWRMaW5rcyIse2RlZmF1bHRWYWx1ZTohMSx1c2VMb2NhbFN0b3JhZ2U6ITB9KS5jYWxsKHRoaXMpLHRoaXMuX3Ntb290aGluZ1dlaWdodD1qcygiX3Ntb290aGluZ1dlaWdodCIse2RlZmF1bHRWYWx1ZTouNn0pLmNhbGwodGhpcyksdGhpcy5faWdub3JlWU91dGxpZXJzPUJzKCJfaWdub3JlWU91dGxpZXJzIix7ZGVmYXVsdFZhbHVlOiEwLHVzZUxvY2FsU3RvcmFnZTohMH0pLmNhbGwodGhpcyksdGhpcy5feFR5cGU9cl90LlNURVAsdGhpcy5fc2VsZWN0ZWRSdW5zPVtdLHRoaXMuX3RhZ0ZpbHRlcj0iIix0aGlzLl9jYXRlZ29yaWVzPVtdLHRoaXMuX2dldENhdGVnb3J5SXRlbUtleT10PT50LnRhZyx0aGlzLl9yZXF1ZXN0TWFuYWdlcj1uZXcgaHIoNTApLHRoaXMuX3Nob3dEb3dubG9hZExpbmtzT2JzZXJ2ZXI9SHMoIl9zaG93RG93bmxvYWRMaW5rcyIse2RlZmF1bHRWYWx1ZTohMSx1c2VMb2NhbFN0b3JhZ2U6ITB9KSx0aGlzLl9zbW9vdGhpbmdXZWlnaHRPYnNlcnZlcj1HcygiX3Ntb290aGluZ1dlaWdodCIse2RlZmF1bHRWYWx1ZTouNn0pLHRoaXMuX2lnbm9yZVlPdXRsaWVyc09ic2VydmVyPUhzKCJfaWdub3JlWU91dGxpZXJzIix7ZGVmYXVsdFZhbHVlOiEwLHVzZUxvY2FsU3RvcmFnZTohMH0pfWdldCBfc21vb3RoaW5nRW5hYmxlZCgpe3JldHVybiB0aGlzLl9zbW9vdGhpbmdXZWlnaHQ+MH1fZ2V0Q2F0ZWdvcnlLZXkodCl7cmV0dXJuIHQubWV0YWRhdGEudHlwZT09dnIuU0VBUkNIX1JFU1VMVFM/IiI6dC5uYW1lfV9zaG91bGRPcGVuKHQpe3JldHVybiB0PD0yfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLnJlbG9hZE9uUmVhZHkmJnRoaXMucmVsb2FkKCl9cmVsb2FkKCl7dGhpcy5fZmV0Y2hUYWdzKCkudGhlbigoKCk9Pnt0aGlzLl9yZWxvYWRDaGFydHMoKX0pKX1fZmV0Y2hUYWdzKCl7Y29uc3QgdD1ncigpLnBsdWdpblJvdXRlKCJzY2FsYXJzIiwiL3RhZ3MiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKCh0PT57aWYod2UuaXNFcXVhbCh0LHRoaXMuX3J1blRvVGFnSW5mbykpcmV0dXJuO2NvbnN0IGU9b3Iod2UubWFwVmFsdWVzKHQsKHQ9Pk9iamVjdC5rZXlzKHQpKSkpO3RoaXMuc2V0KCJfZGF0YU5vdEZvdW5kIiwwPT09ZS5sZW5ndGgpLHRoaXMuc2V0KCJfcnVuVG9UYWdJbmZvIix0KSx0aGlzLmFzeW5jKCgoKT0+e3RoaXMuc2V0KCJfY2F0ZWdvcmllc0RvbVJlYWR5IiwhMCl9KSl9KSl9X3JlbG9hZENoYXJ0cygpe3RoaXMucm9vdC5xdWVyeVNlbGVjdG9yQWxsKCJ0Zi1zY2FsYXItY2FyZCIpLmZvckVhY2goKHQ9Pnt0LnJlbG9hZCgpfSkpfV91cGRhdGVDYXRlZ29yaWVzKCl7dmFyIHQ9dGhpcy5fc2VsZWN0ZWRSdW5zO2xldCBlLG49dGhpcy5fdGFnRmlsdGVyO2U9eHIod2UubWFwVmFsdWVzKHRoaXMuX3J1blRvVGFnSW5mbywodD0+T2JqZWN0LmtleXModCkpKSx0LG4pLGUuZm9yRWFjaCgodD0+e3QuaXRlbXM9dC5pdGVtcy5tYXAoKHQ9Pih7dGFnOnQudGFnLHNlcmllczp0LnJ1bnMubWFwKChlPT4oe3J1bjplLHRhZzp0LnRhZ30pKSl9KSkpfSkpLHRoaXMudXBkYXRlQXJyYXlQcm9wKCJfY2F0ZWdvcmllcyIsZSx0aGlzLl9nZXRDYXRlZ29yeUtleSl9X3RhZ01ldGFkYXRhKHQsZSxuKXtjb25zdCBpPXQubmFtZSxyPW4udGFnLG89e307bi5zZXJpZXMuZm9yRWFjaCgoKHtydW46dH0pPT57b1t0XT1lW3RdW3JdfSkpO2NvbnN0IGE9ci5yZXBsYWNlKC9cL3NjYWxhcl9zdW1tYXJ5JC8sIiIpO2xldHtkZXNjcmlwdGlvbjpzLGRpc3BsYXlOYW1lOmx9PUhPKG8sYSk7cmV0dXJuIHQubWV0YWRhdGEudHlwZT09dnIuUFJFRklYX0dST1VQJiZsLnN0YXJ0c1dpdGgoaSsiLyIpJiYobD1sLnNsaWNlKGkubGVuZ3RoKzEpKSx7ZGVzY3JpcHRpb246cyxkaXNwbGF5TmFtZTpsfX19OyRXdC50ZW1wbGF0ZT1fZWAKICAgIDx0Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyIiBzbG90PSJzaWRlYmFyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZXR0aW5ncyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJsaW5lLWl0ZW0iPgogICAgICAgICAgICAgIDxwYXBlci1jaGVja2JveAogICAgICAgICAgICAgICAgaWQ9InNob3ctZG93bmxvYWQtbGlua3MiCiAgICAgICAgICAgICAgICBjaGVja2VkPSJ7e19zaG93RG93bmxvYWRMaW5rc319IgogICAgICAgICAgICAgICAgPlNob3cgZGF0YSBkb3dubG9hZCBsaW5rczwvcGFwZXItY2hlY2tib3gKICAgICAgICAgICAgICA+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJsaW5lLWl0ZW0iPgogICAgICAgICAgICAgIDxwYXBlci1jaGVja2JveAogICAgICAgICAgICAgICAgaWQ9Imlnbm9yZS15LW91dGxpZXIiCiAgICAgICAgICAgICAgICBjaGVja2VkPSJ7e19pZ25vcmVZT3V0bGllcnN9fSIKICAgICAgICAgICAgICAgID5JZ25vcmUgb3V0bGllcnMgaW4gY2hhcnQgc2NhbGluZzwvcGFwZXItY2hlY2tib3gKICAgICAgICAgICAgICA+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGlkPSJ0b29sdGlwLXNvcnRpbmciPgogICAgICAgICAgICAgIDxkaXY+VG9vbHRpcCBzb3J0aW5nIG1ldGhvZDo8L2Rpdj4KICAgICAgICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudQogICAgICAgICAgICAgICAgbm8tbGFiZWwtZmxvYXQKICAgICAgICAgICAgICAgIHNlbGVjdGVkLWl0ZW0tbGFiZWw9Int7X3Rvb2x0aXBTb3J0aW5nTWV0aG9kfX0iCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPHBhcGVyLWxpc3Rib3gKICAgICAgICAgICAgICAgICAgY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiCiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkPSIwIgogICAgICAgICAgICAgICAgICBzbG90PSJkcm9wZG93bi1jb250ZW50IgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICA8cGFwZXItaXRlbT5kZWZhdWx0PC9wYXBlci1pdGVtPgogICAgICAgICAgICAgICAgICA8cGFwZXItaXRlbT5kZXNjZW5kaW5nPC9wYXBlci1pdGVtPgogICAgICAgICAgICAgICAgICA8cGFwZXItaXRlbT5hc2NlbmRpbmc8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPm5lYXJlc3Q8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgICAgICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgICAgPHRmLXNtb290aGluZy1pbnB1dAogICAgICAgICAgICAgIHdlaWdodD0ie3tfc21vb3RoaW5nV2VpZ2h0fX0iCiAgICAgICAgICAgICAgc3RlcD0iMC4wMDEiCiAgICAgICAgICAgICAgbWluPSIwIgogICAgICAgICAgICAgIG1heD0iMC45OTkiCiAgICAgICAgICAgID48L3RmLXNtb290aGluZy1pbnB1dD4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgICAgPHRmLW9wdGlvbi1zZWxlY3RvcgogICAgICAgICAgICAgIGlkPSJ4LXR5cGUtc2VsZWN0b3IiCiAgICAgICAgICAgICAgbmFtZT0iSG9yaXpvbnRhbCBBeGlzIgogICAgICAgICAgICAgIHNlbGVjdGVkLWlkPSJ7e194VHlwZX19IgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBpZD0ic3RlcCI+c3RlcDwvcGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgPjwhLS0KICAgICAgICAgICAgLS0+PHBhcGVyLWJ1dHRvbiBpZD0icmVsYXRpdmUiPnJlbGF0aXZlPC9wYXBlci1idXR0b24KICAgICAgICAgICAgICA+PCEtLQogICAgICAgICAgICAtLT48cGFwZXItYnV0dG9uIGlkPSJ3YWxsX3RpbWUiPndhbGw8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgPC90Zi1vcHRpb24tc2VsZWN0b3I+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24gcnVucy1zZWxlY3RvciI+CiAgICAgICAgICA8dGYtcnVucy1zZWxlY3RvciBzZWxlY3RlZC1ydW5zPSJ7e19zZWxlY3RlZFJ1bnN9fSI+CiAgICAgICAgICA8L3RmLXJ1bnMtc2VsZWN0b3I+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjZW50ZXIiIHNsb3Q9ImNlbnRlciI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLXdhcm5pbmciPgogICAgICAgICAgICA8aDM+Tm8gc2NhbGFyIGRhdGEgd2FzIGZvdW5kLjwvaDM+CiAgICAgICAgICAgIDxwPlByb2JhYmxlIGNhdXNlczo8L3A+CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICA8bGk+WW91IGhhdmVu4oCZdCB3cml0dGVuIGFueSBzY2FsYXIgZGF0YSB0byB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgICAgPGxpPlRlbnNvckJvYXJkIGNhbuKAmXQgZmluZCB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgIDwvdWw+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3XigJlyZSBuZXcgdG8gdXNpbmcgVGVuc29yQm9hcmQsIGFuZCB3YW50IHRvIGZpbmQgb3V0IGhvdyB0bwogICAgICAgICAgICAgIGFkZCBkYXRhIGFuZCBzZXQgdXAgeW91ciBldmVudCBmaWxlcywgY2hlY2sgb3V0IHRoZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQiCiAgICAgICAgICAgICAgICA+UkVBRE1FPC9hCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIGFuZCBwZXJoYXBzIHRoZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9nZXRfc3RhcnRlZC9zdW1tYXJpZXNfYW5kX3RlbnNvcmJvYXJkIgogICAgICAgICAgICAgICAgPlRlbnNvckJvYXJkIHR1dG9yaWFsPC9hCiAgICAgICAgICAgICAgPi4KICAgICAgICAgICAgPC9wPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW91IHRoaW5rIFRlbnNvckJvYXJkIGlzIGNvbmZpZ3VyZWQgcHJvcGVybHksIHBsZWFzZSBzZWUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI215LXRlbnNvcmJvYXJkLWlzbnQtc2hvd2luZy1hbnktZGF0YS13aGF0cy13cm9uZyIKICAgICAgICAgICAgICAgID50aGUgc2VjdGlvbiBvZiB0aGUgUkVBRE1FIGRldm90ZWQgdG8gbWlzc2luZyBkYXRhIHByb2JsZW1zPC9hCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIGFuZCBjb25zaWRlciBmaWxpbmcgYW4gaXNzdWUgb24gR2l0SHViLgogICAgICAgICAgICA8L3A+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDx0Zi10YWctZmlsdGVyZXIgdGFnLWZpbHRlcj0ie3tfdGFnRmlsdGVyfX0iPjwvdGYtdGFnLWZpbHRlcmVyPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfY2F0ZWdvcmllc11dIiBhcz0iY2F0ZWdvcnkiPgogICAgICAgICAgICA8dGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXcKICAgICAgICAgICAgICBjYXRlZ29yeT0iW1tjYXRlZ29yeV1dIgogICAgICAgICAgICAgIGluaXRpYWwtb3BlbmVkPSJbW19zaG91bGRPcGVuKGluZGV4KV1dIgogICAgICAgICAgICAgIGdldC1jYXRlZ29yeS1pdGVtLWtleT0iW1tfZ2V0Q2F0ZWdvcnlJdGVtS2V5XV0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGYtc2NhbGFyLWNhcmQKICAgICAgICAgICAgICAgICAgYWN0aXZlPSJbW2FjdGl2ZV1dIgogICAgICAgICAgICAgICAgICBkYXRhLXRvLWxvYWQ9IltbaXRlbS5zZXJpZXNdXSIKICAgICAgICAgICAgICAgICAgaWdub3JlLXktb3V0bGllcnM9IltbX2lnbm9yZVlPdXRsaWVyc11dIgogICAgICAgICAgICAgICAgICBtdWx0aS1leHBlcmltZW50cz0iW1tfZ2V0TXVsdGlFeHBlcmltZW50cyhkYXRhU2VsZWN0aW9uKV1dIgogICAgICAgICAgICAgICAgICByZXF1ZXN0LW1hbmFnZXI9IltbX3JlcXVlc3RNYW5hZ2VyXV0iCiAgICAgICAgICAgICAgICAgIHNob3ctZG93bmxvYWQtbGlua3M9IltbX3Nob3dEb3dubG9hZExpbmtzXV0iCiAgICAgICAgICAgICAgICAgIHNtb290aGluZy1lbmFibGVkPSJbW19zbW9vdGhpbmdFbmFibGVkXV0iCiAgICAgICAgICAgICAgICAgIHNtb290aGluZy13ZWlnaHQ9IltbX3Ntb290aGluZ1dlaWdodF1dIgogICAgICAgICAgICAgICAgICB0YWctbWV0YWRhdGE9IltbX3RhZ01ldGFkYXRhKGNhdGVnb3J5LCBfcnVuVG9UYWdJbmZvLCBpdGVtKV1dIgogICAgICAgICAgICAgICAgICB0YWc9IltbaXRlbS50YWddXSIKICAgICAgICAgICAgICAgICAgdG9vbHRpcC1zb3J0aW5nLW1ldGhvZD0iW1tfdG9vbHRpcFNvcnRpbmdNZXRob2RdXSIKICAgICAgICAgICAgICAgICAgeC10eXBlPSJbW194VHlwZV1dIgogICAgICAgICAgICAgICAgICBiYXRjaC1zaXplPSJbW2ZlYXR1cmVGbGFncy5zY2FsYXJzQmF0Y2hTaXplXV0iCiAgICAgICAgICAgICAgICAgIGluLWNvbGFiPSJbW2ZlYXR1cmVGbGFncy5pbkNvbGFiXV0iCiAgICAgICAgICAgICAgICA+PC90Zi1zY2FsYXItY2FyZD4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3RmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGYtZGFzaGJvYXJkLWxheW91dD4KCiAgICA8c3R5bGUgaW5jbHVkZT0iZGFzaGJvYXJkLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAjdG9vbHRpcC1zb3J0aW5nIHsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIG1hcmdpbi10b3A6IDE1cHg7CiAgICAgIH0KCiAgICAgICN0b29sdGlwLXNvcnRpbmcgcGFwZXItZHJvcGRvd24tbWVudSB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDEwcHg7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItZm9jdXMtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIHdpZHRoOiAxMDVweDsKICAgICAgfQoKICAgICAgLmxpbmUtaXRlbSB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcGFkZGluZy10b3A6IDVweDsKICAgICAgfQogICAgICAubm8tZGF0YS13YXJuaW5nIHsKICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OwogICAgICAgIG1hcmdpbjogODBweCBhdXRvIDAgYXV0bzsKICAgICAgfQogICAgICAuY2VudGVyIHsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYCx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLCRXdC5wcm90b3R5cGUsInJlbG9hZE9uUmVhZHkiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sJFd0LnByb3RvdHlwZSwiZmVhdHVyZUZsYWdzIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbixub3RpZnk6ITAsb2JzZXJ2ZXI6Il9zaG93RG93bmxvYWRMaW5rc09ic2VydmVyIn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sJFd0LnByb3RvdHlwZSwiX3Nob3dEb3dubG9hZExpbmtzIix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyLG5vdGlmeTohMCxvYnNlcnZlcjoiX3Ntb290aGluZ1dlaWdodE9ic2VydmVyIn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSwkV3QucHJvdG90eXBlLCJfc21vb3RoaW5nV2VpZ2h0Iix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbixvYnNlcnZlcjoiX2lnbm9yZVlPdXRsaWVyc09ic2VydmVyIn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sJFd0LnByb3RvdHlwZSwiX2lnbm9yZVlPdXRsaWVycyIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSwkV3QucHJvdG90eXBlLCJfeFR5cGUiLHZvaWQgMCksdChbbyh7dHlwZTpBcnJheX0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLCRXdC5wcm90b3R5cGUsIl9zZWxlY3RlZFJ1bnMiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sJFd0LnByb3RvdHlwZSwiX3J1blRvVGFnSW5mbyIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLCRXdC5wcm90b3R5cGUsIl9kYXRhTm90Rm91bmQiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sJFd0LnByb3RvdHlwZSwiX3RhZ0ZpbHRlciIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLCRXdC5wcm90b3R5cGUsIl9jYXRlZ29yaWVzRG9tUmVhZHkiLHZvaWQgMCksdChbbyh7dHlwZTpBcnJheX0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLCRXdC5wcm90b3R5cGUsIl9jYXRlZ29yaWVzIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLCRXdC5wcm90b3R5cGUsIl9nZXRDYXRlZ29yeUl0ZW1LZXkiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsaHIpXSwkV3QucHJvdG90eXBlLCJfcmVxdWVzdE1hbmFnZXIiLHZvaWQgMCksdChbcygiX3Ntb290aGluZ1dlaWdodCIpLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSwkV3QucHJvdG90eXBlLCJfc21vb3RoaW5nRW5hYmxlZCIsbnVsbCksdChbYSgiX3J1blRvVGFnSW5mbyIsIl9zZWxlY3RlZFJ1bnMiLCJfdGFnRmlsdGVyIiwiX2NhdGVnb3JpZXNEb21SZWFkeSIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sJFd0LnByb3RvdHlwZSwiX3VwZGF0ZUNhdGVnb3JpZXMiLG51bGwpLCRXdD10KFtpKCJ0Zi1zY2FsYXItZGFzaGJvYXJkIildLCRXdCk7bGV0IEtXdD1jbGFzcyBleHRlbmRzKHRyKHllKSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3RleHRzPVtdLHRoaXMuX2NhbmNlbGxlcj1uZXcgTk99Z2V0IF9ydW5Db2xvcigpe3JldHVybiBBTyh0aGlzLnJ1bil9X2NoYW5nZVJ1bkNvbG9yKCl7dGhpcy51cGRhdGVTdHlsZXMoeyItLXRiLXRleHQtbG9hZGVyLW91dGxpbmUiOnRoaXMuX3J1bkNvbG9yfSl9YXR0YWNoZWQoKXt0aGlzLnJlbG9hZCgpfXJlbG9hZCgpe2lmKCF0aGlzLmlzQXR0YWNoZWQpcmV0dXJuO3RoaXMuX2NhbmNlbGxlci5jYW5jZWxBbGwoKTtjb25zdCB0PVZPKGdyKCkucGx1Z2luUm91dGUoInRleHQiLCIvdGV4dCIpLHt0YWc6dGhpcy50YWcscnVuOnRoaXMucnVufSksZT10aGlzLl9jYW5jZWxsZXIuY2FuY2VsbGFibGUoKHQ9PntpZih0LmNhbmNlbGxlZClyZXR1cm47Y29uc3QgZT10LnZhbHVlLm1hcCgodD0+KHt3YWxsX3RpbWU6bmV3IERhdGUoMWUzKnQud2FsbF90aW1lKSxzdGVwOnQuc3RlcCx0ZXh0OnQudGV4dH0pKSk7dGhpcy5zZXQoIl90ZXh0cyIsZS5zbGljZSgpLnJldmVyc2UoKSl9KSk7dGhpcy5yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KHQpLnRoZW4oZSl9X2Zvcm1hdFN0ZXAodCl7cmV0dXJuIGZ5KCIsIikodCl9fTtLV3QudGVtcGxhdGU9X2VgCiAgICA8dGYtY2FyZC1oZWFkaW5nIHJ1bj0iW1tydW5dXSIgdGFnPSJbW3RhZ11dIiBjb2xvcj0iW1tfcnVuQ29sb3JdXSI+CiAgICA8L3RmLWNhcmQtaGVhZGluZz4KICAgIDxwYXBlci1tYXRlcmlhbAogICAgICBlbGV2YXRpb249IjEiCiAgICAgIGlkPSJzdGVwcy1jb250YWluZXIiCiAgICAgIGNsYXNzPSJjb250YWluZXIgc2Nyb2xsYmFyIgogICAgPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW190ZXh0c11dIj4KICAgICAgICA8cGFwZXItbWF0ZXJpYWwgZWxldmF0aW9uPSIxIiBjbGFzcz0ic3RlcC1jb250YWluZXIiPgogICAgICAgICAgc3RlcCA8c3BhbiBjbGFzcz0ic3RlcC12YWx1ZSI+W1tfZm9ybWF0U3RlcChpdGVtLnN0ZXApXV08L3NwYW4+CiAgICAgICAgPC9wYXBlci1tYXRlcmlhbD4KICAgICAgICA8cGFwZXItbWF0ZXJpYWwgZWxldmF0aW9uPSIxIiBjbGFzcz0idGV4dCI+CiAgICAgICAgICA8dGYtbWFya2Rvd24tdmlldyBodG1sPSJbW2l0ZW0udGV4dF1dIj48L3RmLW1hcmtkb3duLXZpZXc+CiAgICAgICAgPC9wYXBlci1tYXRlcmlhbD4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvcGFwZXItbWF0ZXJpYWw+CiAgICA8c3R5bGUgaW5jbHVkZT0ic2Nyb2xsYmFyLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogYXV0bzsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTVweDsKICAgICAgfQogICAgICAuc2Nyb2xsYmFyIHsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICB9CiAgICAgICNzdGVwcy1jb250YWluZXIgewogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgICBib3JkZXI6IDJweCBzb2xpZCAvKiBjb2xvciBjb21wdXRlZCBhbmQgc2V0IGFzIGlubGluZSBzdHlsZSAqLzsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBtYXgtaGVpZ2h0OiA1MDBweDsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgICBwYWRkaW5nOiAxMHB4OwogICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tdGItdGV4dC1sb2FkZXItb3V0bGluZSk7CiAgICAgIH0KICAgICAgLnRleHQgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IGluaGVyaXQ7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMCAzcHggM3B4IDNweDsKICAgICAgICBwYWRkaW5nOiA1cHg7CiAgICAgICAgd29yZC1icmVhazogYnJlYWstd29yZDsKICAgICAgfQogICAgICAuc3RlcC1jb250YWluZXIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXRiLXVpLWxpZ2h0LWFjY2VudCk7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogbm9uZTsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHggM3B4IDAgMDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS10Yi11aS1ib3JkZXIpOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC1zdHlsZTogaXRhbGljOwogICAgICAgIG1hcmdpbi1sZWZ0OiAtMXB4OyAvKiB0byBjb3JyZWN0IGZvciBib3JkZXIgKi8KICAgICAgICBwYWRkaW5nOiAzcHg7CiAgICAgIH0KICAgICAgLnN0ZXAtY29udGFpbmVyOm5vdCg6Zmlyc3QtY2hpbGQpIHsKICAgICAgICBtYXJnaW4tdG9wOiAxNXB4OwogICAgICB9CgogICAgICB0Zi1jYXJkLWhlYWRpbmcgewogICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYCx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxLV3QucHJvdG90eXBlLCJydW4iLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sS1d0LnByb3RvdHlwZSwidGFnIix2b2lkIDApLHQoW28oe3R5cGU6QXJyYXl9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSxLV3QucHJvdG90eXBlLCJfdGV4dHMiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsaHIpXSxLV3QucHJvdG90eXBlLCJyZXF1ZXN0TWFuYWdlciIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixOTyldLEtXdC5wcm90b3R5cGUsIl9jYW5jZWxsZXIiLHZvaWQgMCksdChbcygicnVuIiksZSgiZGVzaWduOnR5cGUiLFN0cmluZyksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sS1d0LnByb3RvdHlwZSwiX3J1bkNvbG9yIixudWxsKSx0KFthKCJfcnVuQ29sb3IiKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEtXdC5wcm90b3R5cGUsIl9jaGFuZ2VSdW5Db2xvciIsbnVsbCksS1d0PXQoW2koInRmLXRleHQtbG9hZGVyIildLEtXdCk7bGV0IFpXdD1jbGFzcyBleHRlbmRzKHRyKHllKSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMucmVsb2FkT25SZWFkeT0hMCx0aGlzLl9yZXF1ZXN0TWFuYWdlcj1uZXcgaHJ9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMucmVsb2FkT25SZWFkeSYmdGhpcy5yZWxvYWQoKX1yZWxvYWQoKXt0aGlzLl9mZXRjaFRhZ3MoKS50aGVuKCgoKT0+e3RoaXMuX3JlbG9hZFRleHRzKCl9KSl9X3Nob3VsZE9wZW4odCl7cmV0dXJuIHQ8PTJ9X2ZldGNoVGFncygpe2NvbnN0IHQ9Z3IoKS5wbHVnaW5Sb3V0ZSgidGV4dCIsIi90YWdzIik7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbigodD0+e2lmKHdlLmlzRXF1YWwodCx0aGlzLl9ydW5Ub1RhZykpcmV0dXJuO2NvbnN0IGU9b3IodCk7dGhpcy5zZXQoIl9kYXRhTm90Rm91bmQiLDA9PT1lLmxlbmd0aCksdGhpcy5zZXQoIl9ydW5Ub1RhZyIsdCksdGhpcy5hc3luYygoKCk9Pnt0aGlzLnNldCgiX2NhdGVnb3JpZXNEb21SZWFkeSIsITApfSkpfSkpfV9yZWxvYWRUZXh0cygpe3RoaXMucm9vdC5xdWVyeVNlbGVjdG9yQWxsKCJ0Zi10ZXh0LWxvYWRlciIpLmZvckVhY2goKHQ9Pnt0LnJlbG9hZCgpfSkpfWdldCBfY2F0ZWdvcmllcygpe3JldHVybiBTcih0aGlzLl9ydW5Ub1RhZyx0aGlzLl9zZWxlY3RlZFJ1bnMsdGhpcy5fdGFnRmlsdGVyKX19O1pXdC50ZW1wbGF0ZT1fZWAKICAgIDx0Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyIiBzbG90PSJzaWRlYmFyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24gcnVucy1zZWxlY3RvciI+CiAgICAgICAgICA8dGYtcnVucy1zZWxlY3RvciBzZWxlY3RlZC1ydW5zPSJ7e19zZWxlY3RlZFJ1bnN9fSI+CiAgICAgICAgICA8L3RmLXJ1bnMtc2VsZWN0b3I+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjZW50ZXIiIHNsb3Q9ImNlbnRlciI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLXdhcm5pbmciPgogICAgICAgICAgICA8aDM+Tm8gdGV4dCBkYXRhIHdhcyBmb3VuZC48L2gzPgogICAgICAgICAgICA8cD5Qcm9iYWJsZSBjYXVzZXM6PC9wPgogICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgPGxpPllvdSBoYXZlbuKAmXQgd3JpdHRlbiBhbnkgdGV4dCBkYXRhIHRvIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgICA8bGk+VGVuc29yQm9hcmQgY2Fu4oCZdCBmaW5kIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgPC91bD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvCiAgICAgICAgICAgICAgYWRkIGRhdGEgYW5kIHNldCB1cCB5b3VyIGV2ZW50IGZpbGVzLCBjaGVjayBvdXQgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCIKICAgICAgICAgICAgICAgID5SRUFETUU8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiCiAgICAgICAgICAgICAgICA+VGVuc29yQm9hcmQgdHV0b3JpYWw8L2EKICAgICAgICAgICAgICA+LgogICAgICAgICAgICA8L3A+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3UgdGhpbmsgVGVuc29yQm9hcmQgaXMgY29uZmlndXJlZCBwcm9wZXJseSwgcGxlYXNlIHNlZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQjbXktdGVuc29yYm9hcmQtaXNudC1zaG93aW5nLWFueS1kYXRhLXdoYXRzLXdyb25nIgogICAgICAgICAgICAgICAgPnRoZSBzZWN0aW9uIG9mIHRoZSBSRUFETUUgZGV2b3RlZCB0byBtaXNzaW5nIGRhdGEgcHJvYmxlbXM8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuCiAgICAgICAgICAgIDwvcD4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPHRmLXRhZy1maWx0ZXJlciB0YWctZmlsdGVyPSJ7e190YWdGaWx0ZXJ9fSI+PC90Zi10YWctZmlsdGVyZXI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jYXRlZ29yaWVzXV0iIGFzPSJjYXRlZ29yeSI+CiAgICAgICAgICAgIDx0Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldwogICAgICAgICAgICAgIGNhdGVnb3J5PSJbW2NhdGVnb3J5XV0iCiAgICAgICAgICAgICAgaW5pdGlhbC1vcGVuZWQ9IltbX3Nob3VsZE9wZW4oaW5kZXgpXV0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGYtdGV4dC1sb2FkZXIKICAgICAgICAgICAgICAgICAgYWN0aXZlPSJbW2FjdGl2ZV1dIgogICAgICAgICAgICAgICAgICB0YWc9IltbaXRlbS50YWddXSIKICAgICAgICAgICAgICAgICAgcnVuPSJbW2l0ZW0ucnVuXV0iCiAgICAgICAgICAgICAgICAgIHJlcXVlc3QtbWFuYWdlcj0iW1tfcmVxdWVzdE1hbmFnZXJdXSIKICAgICAgICAgICAgICAgID48L3RmLXRleHQtbG9hZGVyPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvdGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXc+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC90Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgPHN0eWxlIGluY2x1ZGU9ImRhc2hib2FyZC1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgLm5vLWRhdGEtd2FybmluZyB7CiAgICAgICAgbWF4LXdpZHRoOiA1NDBweDsKICAgICAgICBtYXJnaW46IDgwcHggYXV0byAwIGF1dG87CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYCx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFpXdC5wcm90b3R5cGUsInJlbG9hZE9uUmVhZHkiLHZvaWQgMCksdChbbyh7dHlwZTpBcnJheX0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLFpXdC5wcm90b3R5cGUsIl9zZWxlY3RlZFJ1bnMiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sWld0LnByb3RvdHlwZSwiX3J1blRvVGFnIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sWld0LnByb3RvdHlwZSwiX2RhdGFOb3RGb3VuZCIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxaV3QucHJvdG90eXBlLCJfdGFnRmlsdGVyIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sWld0LnByb3RvdHlwZSwiX2NhdGVnb3JpZXNEb21SZWFkeSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxaV3QucHJvdG90eXBlLCJfcmVxdWVzdE1hbmFnZXIiLHZvaWQgMCksdChbcygiX3J1blRvVGFnIiwiX3NlbGVjdGVkUnVucyIsIl90YWdGaWx0ZXIiLCJfY2F0ZWdvcmllc0RvbVJlYWR5IiksZSgiZGVzaWduOnR5cGUiLEFycmF5KSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxaV3QucHJvdG90eXBlLCJfY2F0ZWdvcmllcyIsbnVsbCksWld0PXQoW2koInRmLXRleHQtZGFzaGJvYXJkIildLFpXdCk7bGV0IEpXdD1jbGFzcyBleHRlbmRzIHlle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl90ZW1wbGF0ZT1udWxsLHRoaXMudGZfYmFja2VuZD1heXR9fTtKV3Q9dChbaSgidGYtYmFja2VuZCIpXSxKV3QpO2xldCBRV3Q9Y2xhc3MgZXh0ZW5kcyB5ZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fdGVtcGxhdGU9bnVsbCx0aGlzLnRmX2dsb2JhbHM9TXN9fTtRV3Q9dChbaSgidGYtZ2xvYmFscyIpXSxRV3QpO2xldCB0cXQ9Y2xhc3MgZXh0ZW5kcyB5ZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fdGVtcGxhdGU9bnVsbCx0aGlzLnRmX3N0b3JhZ2U9Z3l0fX07dHF0PXQoW2koInRmLXN0b3JhZ2UiKV0sdHF0KTt2YXIgZXF0PU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLGFkZExpbWl0TGlzdGVuZXI6c2wscmVtb3ZlTGltaXRMaXN0ZW5lcjpsbCxnZXRMaW1pdDpjbCxzZXRMaW1pdDpmdW5jdGlvbiBucXQodCl7aWYodCE9PU1hdGguZmxvb3IodCkpdGhyb3cgbmV3IEVycm9yKGBsaW1pdCBtdXN0IGJlIGFuIGludGVnZXIsIGJ1dCBnb3Q6ICR7dH1gKTtpZih0PD0wKXRocm93IG5ldyBFcnJvcihgbGltaXQgbXVzdCBiZSBwb3NpdGl2ZSwgYnV0IGdvdDogJHt0fWApO3QhPT1vbCYmKG9sPXQsVXMocmwsb2wse3VzZUxvY2FsU3RvcmFnZTohMH0pLGFsLmZvckVhY2goKHQ9Pnt0KCl9KSkpfSxUZkRvbVJlcGVhdDpobH0pO2xldCBpcXQ9Y2xhc3MgZXh0ZW5kcyB5ZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fdGVtcGxhdGU9bnVsbCx0aGlzLnRmX3BhZ2luYXRlZF92aWV3PWVxdH19O2lxdD10KFtpKCJ0Zi1wYWdpbmF0ZWQtdmlldy1zdG9yZSIpXSxpcXQpO2xldCBycXQ9Y2xhc3MgZXh0ZW5kcyB5ZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fdGVtcGxhdGU9bnVsbCx0aGlzLnJ1bnNDb2xvclNjYWxlPUFPfX07cnF0PXQoW2koInRmLWNvbG9yLXNjYWxlIildLHJxdCl9KSgpOwoKIShmdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHR9bGV0IGU9ITE7Y29uc3Qgbj17UHJvbWlzZTp2b2lkIDAsc2V0IHVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcodCl7aWYodCl7Y29uc3QgdD1uZXcgRXJyb3I7Y29uc29sZS53YXJuKCJERVBSRUNBVEVEISBSeEpTIHdhcyBzZXQgdG8gdXNlIGRlcHJlY2F0ZWQgc3luY2hyb25vdXMgZXJyb3IgaGFuZGxpbmcgYmVoYXZpb3IgYnkgY29kZSBhdDogXG4iK3Quc3RhY2spfWVsc2UgZSYmY29uc29sZS5sb2coIlJ4SlM6IEJhY2sgdG8gYSBiZXR0ZXIgZXJyb3IgYmVoYXZpb3IuIFRoYW5rIHlvdS4gPDMiKTtlPXR9LGdldCB1c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nKCl7cmV0dXJuIGV9fTtmdW5jdGlvbiBvKHQpe3NldFRpbWVvdXQoKCgpPT57dGhyb3cgdH0pLDApfWNvbnN0IGk9e2Nsb3NlZDohMCxuZXh0KHQpe30sZXJyb3IodCl7aWYobi51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nKXRocm93IHQ7byh0KX0sY29tcGxldGUoKXt9fSxhPUFycmF5LmlzQXJyYXl8fCh0PT50JiYibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RoKTtmdW5jdGlvbiByKHQpe3JldHVybiBudWxsIT09dCYmIm9iamVjdCI9PXR5cGVvZiB0fWNvbnN0IHM9KCgpPT57ZnVuY3Rpb24gdCh0KXtyZXR1cm4gRXJyb3IuY2FsbCh0aGlzKSx0aGlzLm1lc3NhZ2U9dD9gJHt0Lmxlbmd0aH0gZXJyb3JzIG9jY3VycmVkIGR1cmluZyB1bnN1YnNjcmlwdGlvbjpcbiR7dC5tYXAoKCh0LGUpPT5gJHtlKzF9KSAke3QudG9TdHJpbmcoKX1gKSkuam9pbigiXG4gICIpfWA6IiIsdGhpcy5uYW1lPSJVbnN1YnNjcmlwdGlvbkVycm9yIix0aGlzLmVycm9ycz10LHRoaXN9cmV0dXJuIHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKSx0fSkoKTtjbGFzcyBse2NvbnN0cnVjdG9yKHQpe3RoaXMuY2xvc2VkPSExLHRoaXMuX3BhcmVudE9yUGFyZW50cz1udWxsLHRoaXMuX3N1YnNjcmlwdGlvbnM9bnVsbCx0JiYodGhpcy5fdW5zdWJzY3JpYmU9dCl9dW5zdWJzY3JpYmUoKXtsZXQgZTtpZih0aGlzLmNsb3NlZClyZXR1cm47bGV0e19wYXJlbnRPclBhcmVudHM6bixfdW5zdWJzY3JpYmU6byxfc3Vic2NyaXB0aW9uczppfT10aGlzO2lmKHRoaXMuY2xvc2VkPSEwLHRoaXMuX3BhcmVudE9yUGFyZW50cz1udWxsLHRoaXMuX3N1YnNjcmlwdGlvbnM9bnVsbCxuIGluc3RhbmNlb2YgbCluLnJlbW92ZSh0aGlzKTtlbHNlIGlmKG51bGwhPT1uKWZvcihsZXQgdD0wO3Q8bi5sZW5ndGg7Kyt0KW5bdF0ucmVtb3ZlKHRoaXMpO2lmKHQobykpdHJ5e28uY2FsbCh0aGlzKX1jYXRjaCh0KXtlPXQgaW5zdGFuY2VvZiBzP2ModC5lcnJvcnMpOlt0XX1pZihhKGkpKXtsZXQgdD0tMSxuPWkubGVuZ3RoO2Zvcig7Kyt0PG47KXtjb25zdCBuPWlbdF07aWYocihuKSl0cnl7bi51bnN1YnNjcmliZSgpfWNhdGNoKHQpe2U9ZXx8W10sdCBpbnN0YW5jZW9mIHM/ZT1lLmNvbmNhdChjKHQuZXJyb3JzKSk6ZS5wdXNoKHQpfX19aWYoZSl0aHJvdyBuZXcgcyhlKX1hZGQodCl7bGV0IGU9dDtpZighdClyZXR1cm4gbC5FTVBUWTtzd2l0Y2godHlwZW9mIHQpe2Nhc2UiZnVuY3Rpb24iOmU9bmV3IGwodCk7Y2FzZSJvYmplY3QiOmlmKGU9PT10aGlzfHxlLmNsb3NlZHx8ImZ1bmN0aW9uIiE9dHlwZW9mIGUudW5zdWJzY3JpYmUpcmV0dXJuIGU7aWYodGhpcy5jbG9zZWQpcmV0dXJuIGUudW5zdWJzY3JpYmUoKSxlO2lmKCEoZSBpbnN0YW5jZW9mIGwpKXtjb25zdCB0PWU7ZT1uZXcgbCxlLl9zdWJzY3JpcHRpb25zPVt0XX1icmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkIHRlYXJkb3duICIrdCsiIGFkZGVkIHRvIFN1YnNjcmlwdGlvbi4iKX1sZXR7X3BhcmVudE9yUGFyZW50czpufT1lO2lmKG51bGw9PT1uKWUuX3BhcmVudE9yUGFyZW50cz10aGlzO2Vsc2UgaWYobiBpbnN0YW5jZW9mIGwpe2lmKG49PT10aGlzKXJldHVybiBlO2UuX3BhcmVudE9yUGFyZW50cz1bbix0aGlzXX1lbHNle2lmKC0xIT09bi5pbmRleE9mKHRoaXMpKXJldHVybiBlO24ucHVzaCh0aGlzKX1jb25zdCBvPXRoaXMuX3N1YnNjcmlwdGlvbnM7cmV0dXJuIG51bGw9PT1vP3RoaXMuX3N1YnNjcmlwdGlvbnM9W2VdOm8ucHVzaChlKSxlfXJlbW92ZSh0KXtjb25zdCBlPXRoaXMuX3N1YnNjcmlwdGlvbnM7aWYoZSl7Y29uc3Qgbj1lLmluZGV4T2YodCk7LTEhPT1uJiZlLnNwbGljZShuLDEpfX19ZnVuY3Rpb24gYyh0KXtyZXR1cm4gdC5yZWR1Y2UoKCh0LGUpPT50LmNvbmNhdChlIGluc3RhbmNlb2Ygcz9lLmVycm9yczplKSksW10pfWwuRU1QVFk9KGZ1bmN0aW9uKHQpe3JldHVybiB0LmNsb3NlZD0hMCx0fSkobmV3IGwpO2NvbnN0IGQ9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9TeW1ib2woInJ4U3Vic2NyaWJlciIpOiJAQHJ4U3Vic2NyaWJlcl8iK01hdGgucmFuZG9tKCk7Y2xhc3MgcCBleHRlbmRzIGx7Y29uc3RydWN0b3IodCxlLG4pe3N3aXRjaChzdXBlcigpLHRoaXMuc3luY0Vycm9yVmFsdWU9bnVsbCx0aGlzLnN5bmNFcnJvclRocm93bj0hMSx0aGlzLnN5bmNFcnJvclRocm93YWJsZT0hMSx0aGlzLmlzU3RvcHBlZD0hMSxhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6dGhpcy5kZXN0aW5hdGlvbj1pO2JyZWFrO2Nhc2UgMTppZighdCl7dGhpcy5kZXN0aW5hdGlvbj1pO2JyZWFrfWlmKCJvYmplY3QiPT10eXBlb2YgdCl7dCBpbnN0YW5jZW9mIHA/KHRoaXMuc3luY0Vycm9yVGhyb3dhYmxlPXQuc3luY0Vycm9yVGhyb3dhYmxlLHRoaXMuZGVzdGluYXRpb249dCx0LmFkZCh0aGlzKSk6KHRoaXMuc3luY0Vycm9yVGhyb3dhYmxlPSEwLHRoaXMuZGVzdGluYXRpb249bmV3IG0odGhpcyx0KSk7YnJlYWt9ZGVmYXVsdDp0aGlzLnN5bmNFcnJvclRocm93YWJsZT0hMCx0aGlzLmRlc3RpbmF0aW9uPW5ldyBtKHRoaXMsdCxlLG4pfX1bZF0oKXtyZXR1cm4gdGhpc31zdGF0aWMgY3JlYXRlKHQsZSxuKXtjb25zdCBvPW5ldyBwKHQsZSxuKTtyZXR1cm4gby5zeW5jRXJyb3JUaHJvd2FibGU9ITEsb31uZXh0KHQpe3RoaXMuaXNTdG9wcGVkfHx0aGlzLl9uZXh0KHQpfWVycm9yKHQpe3RoaXMuaXNTdG9wcGVkfHwodGhpcy5pc1N0b3BwZWQ9ITAsdGhpcy5fZXJyb3IodCkpfWNvbXBsZXRlKCl7dGhpcy5pc1N0b3BwZWR8fCh0aGlzLmlzU3RvcHBlZD0hMCx0aGlzLl9jb21wbGV0ZSgpKX11bnN1YnNjcmliZSgpe3RoaXMuY2xvc2VkfHwodGhpcy5pc1N0b3BwZWQ9ITAsc3VwZXIudW5zdWJzY3JpYmUoKSl9X25leHQodCl7dGhpcy5kZXN0aW5hdGlvbi5uZXh0KHQpfV9lcnJvcih0KXt0aGlzLmRlc3RpbmF0aW9uLmVycm9yKHQpLHRoaXMudW5zdWJzY3JpYmUoKX1fY29tcGxldGUoKXt0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCksdGhpcy51bnN1YnNjcmliZSgpfV91bnN1YnNjcmliZUFuZFJlY3ljbGUoKXtjb25zdHtfcGFyZW50T3JQYXJlbnRzOnR9PXRoaXM7cmV0dXJuIHRoaXMuX3BhcmVudE9yUGFyZW50cz1udWxsLHRoaXMudW5zdWJzY3JpYmUoKSx0aGlzLmNsb3NlZD0hMSx0aGlzLmlzU3RvcHBlZD0hMSx0aGlzLl9wYXJlbnRPclBhcmVudHM9dCx0aGlzfX1jbGFzcyBtIGV4dGVuZHMgcHtjb25zdHJ1Y3RvcihlLG4sbyxhKXtsZXQgcjtzdXBlcigpLHRoaXMuX3BhcmVudFN1YnNjcmliZXI9ZTtsZXQgcz10aGlzO3Qobik/cj1uOm4mJihyPW4ubmV4dCxvPW4uZXJyb3IsYT1uLmNvbXBsZXRlLG4hPT1pJiYocz1PYmplY3QuY3JlYXRlKG4pLHQocy51bnN1YnNjcmliZSkmJnRoaXMuYWRkKHMudW5zdWJzY3JpYmUuYmluZChzKSkscy51bnN1YnNjcmliZT10aGlzLnVuc3Vic2NyaWJlLmJpbmQodGhpcykpKSx0aGlzLl9jb250ZXh0PXMsdGhpcy5fbmV4dD1yLHRoaXMuX2Vycm9yPW8sdGhpcy5fY29tcGxldGU9YX1uZXh0KHQpe2lmKCF0aGlzLmlzU3RvcHBlZCYmdGhpcy5fbmV4dCl7Y29uc3R7X3BhcmVudFN1YnNjcmliZXI6ZX09dGhpcztuLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcmJmUuc3luY0Vycm9yVGhyb3dhYmxlP3RoaXMuX190cnlPclNldEVycm9yKGUsdGhpcy5fbmV4dCx0KSYmdGhpcy51bnN1YnNjcmliZSgpOnRoaXMuX190cnlPclVuc3ViKHRoaXMuX25leHQsdCl9fWVycm9yKHQpe2lmKCF0aGlzLmlzU3RvcHBlZCl7Y29uc3R7X3BhcmVudFN1YnNjcmliZXI6ZX09dGhpcyx7dXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZzppfT1uO2lmKHRoaXMuX2Vycm9yKWkmJmUuc3luY0Vycm9yVGhyb3dhYmxlPyh0aGlzLl9fdHJ5T3JTZXRFcnJvcihlLHRoaXMuX2Vycm9yLHQpLHRoaXMudW5zdWJzY3JpYmUoKSk6KHRoaXMuX190cnlPclVuc3ViKHRoaXMuX2Vycm9yLHQpLHRoaXMudW5zdWJzY3JpYmUoKSk7ZWxzZSBpZihlLnN5bmNFcnJvclRocm93YWJsZSlpPyhlLnN5bmNFcnJvclZhbHVlPXQsZS5zeW5jRXJyb3JUaHJvd249ITApOm8odCksdGhpcy51bnN1YnNjcmliZSgpO2Vsc2V7aWYodGhpcy51bnN1YnNjcmliZSgpLGkpdGhyb3cgdDtvKHQpfX19Y29tcGxldGUoKXtpZighdGhpcy5pc1N0b3BwZWQpe2NvbnN0e19wYXJlbnRTdWJzY3JpYmVyOnR9PXRoaXM7aWYodGhpcy5fY29tcGxldGUpe2NvbnN0IGU9KCk9PnRoaXMuX2NvbXBsZXRlLmNhbGwodGhpcy5fY29udGV4dCk7bi51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nJiZ0LnN5bmNFcnJvclRocm93YWJsZT8odGhpcy5fX3RyeU9yU2V0RXJyb3IodCxlKSx0aGlzLnVuc3Vic2NyaWJlKCkpOih0aGlzLl9fdHJ5T3JVbnN1YihlKSx0aGlzLnVuc3Vic2NyaWJlKCkpfWVsc2UgdGhpcy51bnN1YnNjcmliZSgpfX1fX3RyeU9yVW5zdWIodCxlKXt0cnl7dC5jYWxsKHRoaXMuX2NvbnRleHQsZSl9Y2F0Y2godCl7aWYodGhpcy51bnN1YnNjcmliZSgpLG4udXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyl0aHJvdyB0O28odCl9fV9fdHJ5T3JTZXRFcnJvcih0LGUsaSl7aWYoIW4udXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyl0aHJvdyBuZXcgRXJyb3IoImJhZCBjYWxsIik7dHJ5e2UuY2FsbCh0aGlzLl9jb250ZXh0LGkpfWNhdGNoKGUpe3JldHVybiBuLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmc/KHQuc3luY0Vycm9yVmFsdWU9ZSx0LnN5bmNFcnJvclRocm93bj0hMCwhMCk6KG8oZSksITApfXJldHVybiExfV91bnN1YnNjcmliZSgpe2NvbnN0e19wYXJlbnRTdWJzY3JpYmVyOnR9PXRoaXM7dGhpcy5fY29udGV4dD1udWxsLHRoaXMuX3BhcmVudFN1YnNjcmliZXI9bnVsbCx0LnVuc3Vic2NyaWJlKCl9fWNvbnN0IHU9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLm9ic2VydmFibGV8fCJAQG9ic2VydmFibGUiO2Z1bmN0aW9uIGYodCl7cmV0dXJuIHR9ZnVuY3Rpb24gZyh0KXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGc/KHRoaXMudj10LHRoaXMpOm5ldyBnKHQpfWZ1bmN0aW9uIGgodCxlLG4pe2lmKCFTeW1ib2wuYXN5bmNJdGVyYXRvcil0aHJvdyBuZXcgVHlwZUVycm9yKCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC4iKTt2YXIgbyxpPW4uYXBwbHkodCxlfHxbXSksYT1bXTtyZXR1cm4gbz17fSxyKCJuZXh0IikscigidGhyb3ciKSxyKCJyZXR1cm4iKSxvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxvO2Z1bmN0aW9uIHIodCl7aVt0XSYmKG9bdF09ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLG8pe2EucHVzaChbdCxlLG4sb10pPjF8fHModCxlKX0pKX0pfWZ1bmN0aW9uIHModCxlKXt0cnl7IShmdW5jdGlvbiBuKHQpe3QudmFsdWUgaW5zdGFuY2VvZiBnP1Byb21pc2UucmVzb2x2ZSh0LnZhbHVlLnYpLnRoZW4obCxjKTpkKGFbMF1bMl0sdCl9KShpW3RdKGUpKX1jYXRjaCh0KXtkKGFbMF1bM10sdCl9fWZ1bmN0aW9uIGwodCl7cygibmV4dCIsdCl9ZnVuY3Rpb24gYyh0KXtzKCJ0aHJvdyIsdCl9ZnVuY3Rpb24gZCh0LGUpe3QoZSksYS5zaGlmdCgpLGEubGVuZ3RoJiZzKGFbMF1bMF0sYVswXVsxXSl9fWNsYXNzIGJ7Y29uc3RydWN0b3IoKXt0aGlzLnJlc29sdmU9bnVsbCx0aGlzLnJlamVjdD1udWxsLHRoaXMucHJvbWlzZT1uZXcgUHJvbWlzZSgoKHQsZSk9Pnt0aGlzLnJlc29sdmU9dCx0aGlzLnJlamVjdD1lfSkpfX1jbGFzcyB5e2NvbnN0cnVjdG9yKHQpe3RoaXMuX2lzU2NhbGFyPSExLHQmJih0aGlzLl9zdWJzY3JpYmU9dCl9bGlmdCh0KXtjb25zdCBlPW5ldyB5O3JldHVybiBlLnNvdXJjZT10aGlzLGUub3BlcmF0b3I9dCxlfXN1YnNjcmliZSh0LGUsbyl7Y29uc3R7b3BlcmF0b3I6YX09dGhpcyxyPShmdW5jdGlvbiBzKHQsZSxuKXtpZih0KXtpZih0IGluc3RhbmNlb2YgcClyZXR1cm4gdDtpZih0W2RdKXJldHVybiB0W2RdKCl9cmV0dXJuIHR8fGV8fG4/bmV3IHAodCxlLG4pOm5ldyBwKGkpfSkodCxlLG8pO2lmKHIuYWRkKGE/YS5jYWxsKHIsdGhpcy5zb3VyY2UpOnRoaXMuc291cmNlfHxuLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcmJiFyLnN5bmNFcnJvclRocm93YWJsZT90aGlzLl9zdWJzY3JpYmUocik6dGhpcy5fdHJ5U3Vic2NyaWJlKHIpKSxuLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcmJnIuc3luY0Vycm9yVGhyb3dhYmxlJiYoci5zeW5jRXJyb3JUaHJvd2FibGU9ITEsci5zeW5jRXJyb3JUaHJvd24pKXRocm93IHIuc3luY0Vycm9yVmFsdWU7cmV0dXJuIHJ9X3RyeVN1YnNjcmliZSh0KXt0cnl7cmV0dXJuIHRoaXMuX3N1YnNjcmliZSh0KX1jYXRjaChlKXtuLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcmJih0LnN5bmNFcnJvclRocm93bj0hMCx0LnN5bmNFcnJvclZhbHVlPWUpLChmdW5jdGlvbiBlKHQpe2Zvcig7dDspe2NvbnN0e2Nsb3NlZDplLGRlc3RpbmF0aW9uOm4saXNTdG9wcGVkOm99PXQ7aWYoZXx8bylyZXR1cm4hMTt0PW4mJm4gaW5zdGFuY2VvZiBwP246bnVsbH1yZXR1cm4hMH0pKHQpP3QuZXJyb3IoZSk6Y29uc29sZS53YXJuKGUpfX1mb3JFYWNoKHQsZSl7cmV0dXJuIG5ldyhlPV8oZSkpKCgoZSxuKT0+e2xldCBvO289dGhpcy5zdWJzY3JpYmUoKGU9Pnt0cnl7dChlKX1jYXRjaCh0KXtuKHQpLG8mJm8udW5zdWJzY3JpYmUoKX19KSxuLGUpfSkpfV9zdWJzY3JpYmUodCl7Y29uc3R7c291cmNlOmV9PXRoaXM7cmV0dXJuIGUmJmUuc3Vic2NyaWJlKHQpfVt1XSgpe3JldHVybiB0aGlzfXBpcGUoLi4udCl7cmV0dXJuIDA9PT10Lmxlbmd0aD90aGlzOihmdW5jdGlvbiBlKHQpe3JldHVybiAwPT09dC5sZW5ndGg/ZjoxPT09dC5sZW5ndGg/dFswXTpmdW5jdGlvbiBlKG4pe3JldHVybiB0LnJlZHVjZSgoKHQsZSk9PmUodCkpLG4pfX0KLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4KCiAgICBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKICAgIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC4KCiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSAogICAgUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZCiAgICBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsCiAgICBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00KICAgIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SCiAgICBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SCiAgICBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgogICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8pKHQpKHRoaXMpfXRvUHJvbWlzZSh0KXtyZXR1cm4gbmV3KHQ9Xyh0KSkoKCh0LGUpPT57bGV0IG47dGhpcy5zdWJzY3JpYmUoKHQ9Pm49dCksKHQ9PmUodCkpLCgoKT0+dChuKSkpfSkpfX1mdW5jdGlvbiBfKHQpe2lmKHR8fCh0PVByb21pc2UpLCF0KXRocm93IG5ldyBFcnJvcigibm8gUHJvbWlzZSBpbXBsIGZvdW5kIik7cmV0dXJuIHR9eS5jcmVhdGU9dD0+bmV3IHkodCksU3ltYm9sJiZTeW1ib2wuYXN5bmNJdGVyYXRvciYmKHkucHJvdG90eXBlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybihmdW5jdGlvbiB0KGUpe3JldHVybihmdW5jdGlvbiBuKHQpe3JldHVybiBoKHRoaXMsYXJndW1lbnRzLChmdW5jdGlvbiplKCl7Y29uc3Qgbj1bXSxvPVtdO2xldCBpPSExLGE9bnVsbCxyPSExO2NvbnN0IHM9dC5zdWJzY3JpYmUoe25leHQ6dD0+e24ubGVuZ3RoPjA/bi5zaGlmdCgpLnJlc29sdmUoe3ZhbHVlOnQsZG9uZTohMX0pOm8ucHVzaCh0KX0sZXJyb3I6dD0+e2ZvcihpPSEwLGE9dDtuLmxlbmd0aD4wOyluLnNoaWZ0KCkucmVqZWN0KHQpfSxjb21wbGV0ZTooKT0+e2ZvcihyPSEwO24ubGVuZ3RoPjA7KW4uc2hpZnQoKS5yZXNvbHZlKHt2YWx1ZTp2b2lkIDAsZG9uZTohMH0pfX0pO3RyeXtmb3IoOzspaWYoby5sZW5ndGg+MCl5aWVsZCB5aWVsZCBnKG8uc2hpZnQoKSk7ZWxzZXtpZihyKXJldHVybiB5aWVsZCBnKHZvaWQgMCk7aWYoaSl0aHJvdyBhO3tjb25zdCB0PW5ldyBiO24ucHVzaCh0KTtjb25zdCBlPXlpZWxkIGcodC5wcm9taXNlKTtpZihlLmRvbmUpcmV0dXJuIHlpZWxkIGcodm9pZCAwKTt5aWVsZCB5aWVsZCBnKGUudmFsdWUpfX19Y2F0Y2godCl7dGhyb3cgdH1maW5hbGx5e3MudW5zdWJzY3JpYmUoKX19KSl9KShlKX0pKHRoaXMpfSk7Y29uc3QgQz0oKCk9PntmdW5jdGlvbiB0KCl7cmV0dXJuIEVycm9yLmNhbGwodGhpcyksdGhpcy5tZXNzYWdlPSJvYmplY3QgdW5zdWJzY3JpYmVkIix0aGlzLm5hbWU9Ik9iamVjdFVuc3Vic2NyaWJlZEVycm9yIix0aGlzfXJldHVybiB0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSksdH0pKCk7Y2xhc3MgTSBleHRlbmRzIGx7Y29uc3RydWN0b3IodCxlKXtzdXBlcigpLHRoaXMuc3ViamVjdD10LHRoaXMuc3Vic2NyaWJlcj1lLHRoaXMuY2xvc2VkPSExfXVuc3Vic2NyaWJlKCl7aWYodGhpcy5jbG9zZWQpcmV0dXJuO3RoaXMuY2xvc2VkPSEwO2NvbnN0IHQ9dGhpcy5zdWJqZWN0LGU9dC5vYnNlcnZlcnM7aWYodGhpcy5zdWJqZWN0PW51bGwsIWV8fDA9PT1lLmxlbmd0aHx8dC5pc1N0b3BwZWR8fHQuY2xvc2VkKXJldHVybjtjb25zdCBuPWUuaW5kZXhPZih0aGlzLnN1YnNjcmliZXIpOy0xIT09biYmZS5zcGxpY2UobiwxKX19Y2xhc3MgdiBleHRlbmRzIHB7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy5kZXN0aW5hdGlvbj10fX1jbGFzcyB4IGV4dGVuZHMgeXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5vYnNlcnZlcnM9W10sdGhpcy5jbG9zZWQ9ITEsdGhpcy5pc1N0b3BwZWQ9ITEsdGhpcy5oYXNFcnJvcj0hMSx0aGlzLnRocm93bkVycm9yPW51bGx9W2RdKCl7cmV0dXJuIG5ldyB2KHRoaXMpfWxpZnQodCl7Y29uc3QgZT1uZXcgTyh0aGlzLHRoaXMpO3JldHVybiBlLm9wZXJhdG9yPXQsZX1uZXh0KHQpe2lmKHRoaXMuY2xvc2VkKXRocm93IG5ldyBDO2lmKCF0aGlzLmlzU3RvcHBlZCl7Y29uc3R7b2JzZXJ2ZXJzOmV9PXRoaXMsbj1lLmxlbmd0aCxvPWUuc2xpY2UoKTtmb3IobGV0IGU9MDtlPG47ZSsrKW9bZV0ubmV4dCh0KX19ZXJyb3IodCl7aWYodGhpcy5jbG9zZWQpdGhyb3cgbmV3IEM7dGhpcy5oYXNFcnJvcj0hMCx0aGlzLnRocm93bkVycm9yPXQsdGhpcy5pc1N0b3BwZWQ9ITA7Y29uc3R7b2JzZXJ2ZXJzOmV9PXRoaXMsbj1lLmxlbmd0aCxvPWUuc2xpY2UoKTtmb3IobGV0IGU9MDtlPG47ZSsrKW9bZV0uZXJyb3IodCk7dGhpcy5vYnNlcnZlcnMubGVuZ3RoPTB9Y29tcGxldGUoKXtpZih0aGlzLmNsb3NlZCl0aHJvdyBuZXcgQzt0aGlzLmlzU3RvcHBlZD0hMDtjb25zdHtvYnNlcnZlcnM6dH09dGhpcyxlPXQubGVuZ3RoLG49dC5zbGljZSgpO2ZvcihsZXQgdD0wO3Q8ZTt0Kyspblt0XS5jb21wbGV0ZSgpO3RoaXMub2JzZXJ2ZXJzLmxlbmd0aD0wfXVuc3Vic2NyaWJlKCl7dGhpcy5pc1N0b3BwZWQ9ITAsdGhpcy5jbG9zZWQ9ITAsdGhpcy5vYnNlcnZlcnM9bnVsbH1fdHJ5U3Vic2NyaWJlKHQpe2lmKHRoaXMuY2xvc2VkKXRocm93IG5ldyBDO3JldHVybiBzdXBlci5fdHJ5U3Vic2NyaWJlKHQpfV9zdWJzY3JpYmUodCl7aWYodGhpcy5jbG9zZWQpdGhyb3cgbmV3IEM7cmV0dXJuIHRoaXMuaGFzRXJyb3I/KHQuZXJyb3IodGhpcy50aHJvd25FcnJvciksbC5FTVBUWSk6dGhpcy5pc1N0b3BwZWQ/KHQuY29tcGxldGUoKSxsLkVNUFRZKToodGhpcy5vYnNlcnZlcnMucHVzaCh0KSxuZXcgTSh0aGlzLHQpKX1hc09ic2VydmFibGUoKXtjb25zdCB0PW5ldyB5O3JldHVybiB0LnNvdXJjZT10aGlzLHR9fXguY3JlYXRlPSh0LGUpPT5uZXcgTyh0LGUpO2NsYXNzIE8gZXh0ZW5kcyB4e2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIoKSx0aGlzLmRlc3RpbmF0aW9uPXQsdGhpcy5zb3VyY2U9ZX1uZXh0KHQpe2NvbnN0e2Rlc3RpbmF0aW9uOmV9PXRoaXM7ZSYmZS5uZXh0JiZlLm5leHQodCl9ZXJyb3IodCl7Y29uc3R7ZGVzdGluYXRpb246ZX09dGhpcztlJiZlLmVycm9yJiZ0aGlzLmRlc3RpbmF0aW9uLmVycm9yKHQpfWNvbXBsZXRlKCl7Y29uc3R7ZGVzdGluYXRpb246dH09dGhpczt0JiZ0LmNvbXBsZXRlJiZ0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCl9X3N1YnNjcmliZSh0KXtjb25zdHtzb3VyY2U6ZX09dGhpcztyZXR1cm4gZT90aGlzLnNvdXJjZS5zdWJzY3JpYmUodCk6bC5FTVBUWX19ZnVuY3Rpb24gUCgpe3JldHVybiBmdW5jdGlvbiB0KGUpe3JldHVybiBlLmxpZnQobmV3IHcoZSkpfX1jbGFzcyB3e2NvbnN0cnVjdG9yKHQpe3RoaXMuY29ubmVjdGFibGU9dH1jYWxsKHQsZSl7Y29uc3R7Y29ubmVjdGFibGU6bn09dGhpcztuLl9yZWZDb3VudCsrO2NvbnN0IG89bmV3IGsodCxuKSxpPWUuc3Vic2NyaWJlKG8pO3JldHVybiBvLmNsb3NlZHx8KG8uY29ubmVjdGlvbj1uLmNvbm5lY3QoKSksaX19Y2xhc3MgayBleHRlbmRzIHB7Y29uc3RydWN0b3IodCxlKXtzdXBlcih0KSx0aGlzLmNvbm5lY3RhYmxlPWUsdGhpcy5jb25uZWN0aW9uPW51bGx9X3Vuc3Vic2NyaWJlKCl7Y29uc3R7Y29ubmVjdGFibGU6dH09dGhpcztpZighdClyZXR1cm4gdm9pZCh0aGlzLmNvbm5lY3Rpb249bnVsbCk7dGhpcy5jb25uZWN0YWJsZT1udWxsO2NvbnN0IGU9dC5fcmVmQ291bnQ7aWYoZTw9MClyZXR1cm4gdm9pZCh0aGlzLmNvbm5lY3Rpb249bnVsbCk7aWYodC5fcmVmQ291bnQ9ZS0xLGU+MSlyZXR1cm4gdm9pZCh0aGlzLmNvbm5lY3Rpb249bnVsbCk7Y29uc3R7Y29ubmVjdGlvbjpufT10aGlzLG89dC5fY29ubmVjdGlvbjt0aGlzLmNvbm5lY3Rpb249bnVsbCwhb3x8biYmbyE9PW58fG8udW5zdWJzY3JpYmUoKX19Y2xhc3MgUyBleHRlbmRzIHl7Y29uc3RydWN0b3IodCxlKXtzdXBlcigpLHRoaXMuc291cmNlPXQsdGhpcy5zdWJqZWN0RmFjdG9yeT1lLHRoaXMuX3JlZkNvdW50PTAsdGhpcy5faXNDb21wbGV0ZT0hMX1fc3Vic2NyaWJlKHQpe3JldHVybiB0aGlzLmdldFN1YmplY3QoKS5zdWJzY3JpYmUodCl9Z2V0U3ViamVjdCgpe2NvbnN0IHQ9dGhpcy5fc3ViamVjdDtyZXR1cm4gdCYmIXQuaXNTdG9wcGVkfHwodGhpcy5fc3ViamVjdD10aGlzLnN1YmplY3RGYWN0b3J5KCkpLHRoaXMuX3N1YmplY3R9Y29ubmVjdCgpe2xldCB0PXRoaXMuX2Nvbm5lY3Rpb247cmV0dXJuIHR8fCh0aGlzLl9pc0NvbXBsZXRlPSExLHQ9dGhpcy5fY29ubmVjdGlvbj1uZXcgbCx0LmFkZCh0aGlzLnNvdXJjZS5zdWJzY3JpYmUobmV3IEUodGhpcy5nZXRTdWJqZWN0KCksdGhpcykpKSx0LmNsb3NlZCYmKHRoaXMuX2Nvbm5lY3Rpb249bnVsbCx0PWwuRU1QVFkpKSx0fXJlZkNvdW50KCl7cmV0dXJuIFAoKSh0aGlzKX19Y29uc3QgRD0oKCk9Pntjb25zdCB0PVMucHJvdG90eXBlO3JldHVybntvcGVyYXRvcjp7dmFsdWU6bnVsbH0sX3JlZkNvdW50Ont2YWx1ZTowLHdyaXRhYmxlOiEwfSxfc3ViamVjdDp7dmFsdWU6bnVsbCx3cml0YWJsZTohMH0sX2Nvbm5lY3Rpb246e3ZhbHVlOm51bGwsd3JpdGFibGU6ITB9LF9zdWJzY3JpYmU6e3ZhbHVlOnQuX3N1YnNjcmliZX0sX2lzQ29tcGxldGU6e3ZhbHVlOnQuX2lzQ29tcGxldGUsd3JpdGFibGU6ITB9LGdldFN1YmplY3Q6e3ZhbHVlOnQuZ2V0U3ViamVjdH0sY29ubmVjdDp7dmFsdWU6dC5jb25uZWN0fSxyZWZDb3VudDp7dmFsdWU6dC5yZWZDb3VudH19fSkoKTtjbGFzcyBFIGV4dGVuZHMgdntjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQpLHRoaXMuY29ubmVjdGFibGU9ZX1fZXJyb3IodCl7dGhpcy5fdW5zdWJzY3JpYmUoKSxzdXBlci5fZXJyb3IodCl9X2NvbXBsZXRlKCl7dGhpcy5jb25uZWN0YWJsZS5faXNDb21wbGV0ZT0hMCx0aGlzLl91bnN1YnNjcmliZSgpLHN1cGVyLl9jb21wbGV0ZSgpfV91bnN1YnNjcmliZSgpe2NvbnN0IHQ9dGhpcy5jb25uZWN0YWJsZTtpZih0KXt0aGlzLmNvbm5lY3RhYmxlPW51bGw7Y29uc3QgZT10Ll9jb25uZWN0aW9uO3QuX3JlZkNvdW50PTAsdC5fc3ViamVjdD1udWxsLHQuX2Nvbm5lY3Rpb249bnVsbCxlJiZlLnVuc3Vic2NyaWJlKCl9fX1mdW5jdGlvbiBBKHQsZSxuLG8pe3JldHVybiBpPT5pLmxpZnQobmV3IFIodCxlLG4sbykpfWNsYXNzIFJ7Y29uc3RydWN0b3IodCxlLG4sbyl7dGhpcy5rZXlTZWxlY3Rvcj10LHRoaXMuZWxlbWVudFNlbGVjdG9yPWUsdGhpcy5kdXJhdGlvblNlbGVjdG9yPW4sdGhpcy5zdWJqZWN0U2VsZWN0b3I9b31jYWxsKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyBUKHQsdGhpcy5rZXlTZWxlY3Rvcix0aGlzLmVsZW1lbnRTZWxlY3Rvcix0aGlzLmR1cmF0aW9uU2VsZWN0b3IsdGhpcy5zdWJqZWN0U2VsZWN0b3IpKX19Y2xhc3MgVCBleHRlbmRzIHB7Y29uc3RydWN0b3IodCxlLG4sbyxpKXtzdXBlcih0KSx0aGlzLmtleVNlbGVjdG9yPWUsdGhpcy5lbGVtZW50U2VsZWN0b3I9bix0aGlzLmR1cmF0aW9uU2VsZWN0b3I9byx0aGlzLnN1YmplY3RTZWxlY3Rvcj1pLHRoaXMuZ3JvdXBzPW51bGwsdGhpcy5hdHRlbXB0ZWRUb1Vuc3Vic2NyaWJlPSExLHRoaXMuY291bnQ9MH1fbmV4dCh0KXtsZXQgZTt0cnl7ZT10aGlzLmtleVNlbGVjdG9yKHQpfWNhdGNoKHQpe3JldHVybiB2b2lkIHRoaXMuZXJyb3IodCl9dGhpcy5fZ3JvdXAodCxlKX1fZ3JvdXAodCxlKXtsZXQgbj10aGlzLmdyb3VwcztufHwobj10aGlzLmdyb3Vwcz1uZXcgTWFwKTtsZXQgbyxpPW4uZ2V0KGUpO2lmKHRoaXMuZWxlbWVudFNlbGVjdG9yKXRyeXtvPXRoaXMuZWxlbWVudFNlbGVjdG9yKHQpfWNhdGNoKHQpe3RoaXMuZXJyb3IodCl9ZWxzZSBvPXQ7aWYoIWkpe2k9dGhpcy5zdWJqZWN0U2VsZWN0b3I/dGhpcy5zdWJqZWN0U2VsZWN0b3IoKTpuZXcgeCxuLnNldChlLGkpO2NvbnN0IHQ9bmV3IEkoZSxpLHRoaXMpO2lmKHRoaXMuZGVzdGluYXRpb24ubmV4dCh0KSx0aGlzLmR1cmF0aW9uU2VsZWN0b3Ipe2xldCB0O3RyeXt0PXRoaXMuZHVyYXRpb25TZWxlY3RvcihuZXcgSShlLGkpKX1jYXRjaCh0KXtyZXR1cm4gdm9pZCB0aGlzLmVycm9yKHQpfXRoaXMuYWRkKHQuc3Vic2NyaWJlKG5ldyBOKGUsaSx0aGlzKSkpfX1pLmNsb3NlZHx8aS5uZXh0KG8pfV9lcnJvcih0KXtjb25zdCBlPXRoaXMuZ3JvdXBzO2UmJihlLmZvckVhY2goKChlLG4pPT57ZS5lcnJvcih0KX0pKSxlLmNsZWFyKCkpLHRoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9X2NvbXBsZXRlKCl7Y29uc3QgdD10aGlzLmdyb3Vwczt0JiYodC5mb3JFYWNoKCgodCxlKT0+e3QuY29tcGxldGUoKX0pKSx0LmNsZWFyKCkpLHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKX1yZW1vdmVHcm91cCh0KXt0aGlzLmdyb3Vwcy5kZWxldGUodCl9dW5zdWJzY3JpYmUoKXt0aGlzLmNsb3NlZHx8KHRoaXMuYXR0ZW1wdGVkVG9VbnN1YnNjcmliZT0hMCwwPT09dGhpcy5jb3VudCYmc3VwZXIudW5zdWJzY3JpYmUoKSl9fWNsYXNzIE4gZXh0ZW5kcyBwe2NvbnN0cnVjdG9yKHQsZSxuKXtzdXBlcihlKSx0aGlzLmtleT10LHRoaXMuZ3JvdXA9ZSx0aGlzLnBhcmVudD1ufV9uZXh0KHQpe3RoaXMuY29tcGxldGUoKX1fdW5zdWJzY3JpYmUoKXtjb25zdHtwYXJlbnQ6dCxrZXk6ZX09dGhpczt0aGlzLmtleT10aGlzLnBhcmVudD1udWxsLHQmJnQucmVtb3ZlR3JvdXAoZSl9fWNsYXNzIEkgZXh0ZW5kcyB5e2NvbnN0cnVjdG9yKHQsZSxuKXtzdXBlcigpLHRoaXMua2V5PXQsdGhpcy5ncm91cFN1YmplY3Q9ZSx0aGlzLnJlZkNvdW50U3Vic2NyaXB0aW9uPW59X3N1YnNjcmliZSh0KXtjb25zdCBlPW5ldyBsLHtyZWZDb3VudFN1YnNjcmlwdGlvbjpuLGdyb3VwU3ViamVjdDpvfT10aGlzO3JldHVybiBuJiYhbi5jbG9zZWQmJmUuYWRkKG5ldyB6KG4pKSxlLmFkZChvLnN1YnNjcmliZSh0KSksZX19Y2xhc3MgeiBleHRlbmRzIGx7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnBhcmVudD10LHQuY291bnQrK311bnN1YnNjcmliZSgpe2NvbnN0IHQ9dGhpcy5wYXJlbnQ7dC5jbG9zZWR8fHRoaXMuY2xvc2VkfHwoc3VwZXIudW5zdWJzY3JpYmUoKSx0LmNvdW50LT0xLDA9PT10LmNvdW50JiZ0LmF0dGVtcHRlZFRvVW5zdWJzY3JpYmUmJnQudW5zdWJzY3JpYmUoKSl9fWNsYXNzIEggZXh0ZW5kcyB4e2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5fdmFsdWU9dH1nZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5nZXRWYWx1ZSgpfV9zdWJzY3JpYmUodCl7Y29uc3QgZT1zdXBlci5fc3Vic2NyaWJlKHQpO3JldHVybiBlJiYhZS5jbG9zZWQmJnQubmV4dCh0aGlzLl92YWx1ZSksZX1nZXRWYWx1ZSgpe2lmKHRoaXMuaGFzRXJyb3IpdGhyb3cgdGhpcy50aHJvd25FcnJvcjtpZih0aGlzLmNsb3NlZCl0aHJvdyBuZXcgQztyZXR1cm4gdGhpcy5fdmFsdWV9bmV4dCh0KXtzdXBlci5uZXh0KHRoaXMuX3ZhbHVlPXQpfX1jbGFzcyBGIGV4dGVuZHMgbHtjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKCl9c2NoZWR1bGUodCxlPTApe3JldHVybiB0aGlzfX1jbGFzcyBMIGV4dGVuZHMgRntjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQsZSksdGhpcy5zY2hlZHVsZXI9dCx0aGlzLndvcms9ZSx0aGlzLnBlbmRpbmc9ITF9c2NoZWR1bGUodCxlPTApe2lmKHRoaXMuY2xvc2VkKXJldHVybiB0aGlzO3RoaXMuc3RhdGU9dDtjb25zdCBuPXRoaXMuaWQsbz10aGlzLnNjaGVkdWxlcjtyZXR1cm4gbnVsbCE9biYmKHRoaXMuaWQ9dGhpcy5yZWN5Y2xlQXN5bmNJZChvLG4sZSkpLHRoaXMucGVuZGluZz0hMCx0aGlzLmRlbGF5PWUsdGhpcy5pZD10aGlzLmlkfHx0aGlzLnJlcXVlc3RBc3luY0lkKG8sdGhpcy5pZCxlKSx0aGlzfXJlcXVlc3RBc3luY0lkKHQsZSxuPTApe3JldHVybiBzZXRJbnRlcnZhbCh0LmZsdXNoLmJpbmQodCx0aGlzKSxuKX1yZWN5Y2xlQXN5bmNJZCh0LGUsbj0wKXtpZihudWxsIT09biYmdGhpcy5kZWxheT09PW4mJiExPT09dGhpcy5wZW5kaW5nKXJldHVybiBlO2NsZWFySW50ZXJ2YWwoZSl9ZXhlY3V0ZSh0LGUpe2lmKHRoaXMuY2xvc2VkKXJldHVybiBuZXcgRXJyb3IoImV4ZWN1dGluZyBhIGNhbmNlbGxlZCBhY3Rpb24iKTt0aGlzLnBlbmRpbmc9ITE7Y29uc3Qgbj10aGlzLl9leGVjdXRlKHQsZSk7aWYobilyZXR1cm4gbjshMT09PXRoaXMucGVuZGluZyYmbnVsbCE9dGhpcy5pZCYmKHRoaXMuaWQ9dGhpcy5yZWN5Y2xlQXN5bmNJZCh0aGlzLnNjaGVkdWxlcix0aGlzLmlkLG51bGwpKX1fZXhlY3V0ZSh0LGUpe2xldCBuLG89ITE7dHJ5e3RoaXMud29yayh0KX1jYXRjaCh0KXtvPSEwLG49ISF0JiZ0fHxuZXcgRXJyb3IodCl9aWYobylyZXR1cm4gdGhpcy51bnN1YnNjcmliZSgpLG59X3Vuc3Vic2NyaWJlKCl7Y29uc3QgdD10aGlzLmlkLGU9dGhpcy5zY2hlZHVsZXIsbj1lLmFjdGlvbnMsbz1uLmluZGV4T2YodGhpcyk7dGhpcy53b3JrPW51bGwsdGhpcy5zdGF0ZT1udWxsLHRoaXMucGVuZGluZz0hMSx0aGlzLnNjaGVkdWxlcj1udWxsLC0xIT09byYmbi5zcGxpY2UobywxKSxudWxsIT10JiYodGhpcy5pZD10aGlzLnJlY3ljbGVBc3luY0lkKGUsdCxudWxsKSksdGhpcy5kZWxheT1udWxsfX1jbGFzcyBCe2NvbnN0cnVjdG9yKHQsZT1CLm5vdyl7dGhpcy5TY2hlZHVsZXJBY3Rpb249dCx0aGlzLm5vdz1lfXNjaGVkdWxlKHQsZT0wLG4pe3JldHVybiBuZXcgdGhpcy5TY2hlZHVsZXJBY3Rpb24odGhpcyx0KS5zY2hlZHVsZShuLGUpfX1CLm5vdz0oKT0+RGF0ZS5ub3coKTtjbGFzcyBWIGV4dGVuZHMgQntjb25zdHJ1Y3Rvcih0LGU9Qi5ub3cpe3N1cGVyKHQsKCgpPT5WLmRlbGVnYXRlJiZWLmRlbGVnYXRlIT09dGhpcz9WLmRlbGVnYXRlLm5vdygpOmUoKSkpLHRoaXMuYWN0aW9ucz1bXSx0aGlzLmFjdGl2ZT0hMSx0aGlzLnNjaGVkdWxlZD12b2lkIDB9c2NoZWR1bGUodCxlPTAsbil7cmV0dXJuIFYuZGVsZWdhdGUmJlYuZGVsZWdhdGUhPT10aGlzP1YuZGVsZWdhdGUuc2NoZWR1bGUodCxlLG4pOnN1cGVyLnNjaGVkdWxlKHQsZSxuKX1mbHVzaCh0KXtjb25zdHthY3Rpb25zOmV9PXRoaXM7aWYodGhpcy5hY3RpdmUpcmV0dXJuIHZvaWQgZS5wdXNoKHQpO2xldCBuO3RoaXMuYWN0aXZlPSEwO2Rve2lmKG49dC5leGVjdXRlKHQuc3RhdGUsdC5kZWxheSkpYnJlYWt9d2hpbGUodD1lLnNoaWZ0KCkpO2lmKHRoaXMuYWN0aXZlPSExLG4pe2Zvcig7dD1lLnNoaWZ0KCk7KXQudW5zdWJzY3JpYmUoKTt0aHJvdyBufX19Y29uc3Qgaj1uZXcgY2xhc3MgZXh0ZW5kcyBWe30oY2xhc3MgZXh0ZW5kcyBMe2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCxlKSx0aGlzLnNjaGVkdWxlcj10LHRoaXMud29yaz1lfXNjaGVkdWxlKHQsZT0wKXtyZXR1cm4gZT4wP3N1cGVyLnNjaGVkdWxlKHQsZSk6KHRoaXMuZGVsYXk9ZSx0aGlzLnN0YXRlPXQsdGhpcy5zY2hlZHVsZXIuZmx1c2godGhpcyksdGhpcyl9ZXhlY3V0ZSh0LGUpe3JldHVybiBlPjB8fHRoaXMuY2xvc2VkP3N1cGVyLmV4ZWN1dGUodCxlKTp0aGlzLl9leGVjdXRlKHQsZSl9cmVxdWVzdEFzeW5jSWQodCxlLG49MCl7cmV0dXJuIG51bGwhPT1uJiZuPjB8fG51bGw9PT1uJiZ0aGlzLmRlbGF5PjA/c3VwZXIucmVxdWVzdEFzeW5jSWQodCxlLG4pOnQuZmx1c2godGhpcyl9fSksVT1uZXcgeSgodD0+dC5jb21wbGV0ZSgpKSk7ZnVuY3Rpb24gVyh0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIHQuc2NoZWR1bGV9Y29uc3QgRz10PT5lPT57Zm9yKGxldCBuPTAsbz10Lmxlbmd0aDtuPG8mJiFlLmNsb3NlZDtuKyspZS5uZXh0KHRbbl0pO2UuY29tcGxldGUoKX07ZnVuY3Rpb24gWSh0LGUpe3JldHVybiBuZXcgeSgobj0+e2NvbnN0IG89bmV3IGw7bGV0IGk9MDtyZXR1cm4gby5hZGQoZS5zY2hlZHVsZSgoZnVuY3Rpb24oKXtpIT09dC5sZW5ndGg/KG4ubmV4dCh0W2krK10pLG4uY2xvc2VkfHxvLmFkZCh0aGlzLnNjaGVkdWxlKCkpKTpuLmNvbXBsZXRlKCl9KSkpLG99KSl9ZnVuY3Rpb24gcSh0LGUpe3JldHVybiBlP1kodCxlKTpuZXcgeShHKHQpKX1mdW5jdGlvbiBaKC4uLnQpe2xldCBlPXRbdC5sZW5ndGgtMV07cmV0dXJuIFcoZSk/KHQucG9wKCksWSh0LGUpKTpxKHQpfWZ1bmN0aW9uIFgodCxlKXtyZXR1cm4gbmV3IHkoZT9uPT5lLnNjaGVkdWxlKEssMCx7ZXJyb3I6dCxzdWJzY3JpYmVyOm59KTplPT5lLmVycm9yKHQpKX1mdW5jdGlvbiBLKHtlcnJvcjp0LHN1YnNjcmliZXI6ZX0pe2UuZXJyb3IodCl9dmFyIEo7IShmdW5jdGlvbih0KXt0Lk5FWFQ9Ik4iLHQuRVJST1I9IkUiLHQuQ09NUExFVEU9IkMifSkoSnx8KEo9e30pKTtjbGFzcyBRe2NvbnN0cnVjdG9yKHQsZSxuKXt0aGlzLmtpbmQ9dCx0aGlzLnZhbHVlPWUsdGhpcy5lcnJvcj1uLHRoaXMuaGFzVmFsdWU9Ik4iPT09dH1vYnNlcnZlKHQpe3N3aXRjaCh0aGlzLmtpbmQpe2Nhc2UiTiI6cmV0dXJuIHQubmV4dCYmdC5uZXh0KHRoaXMudmFsdWUpO2Nhc2UiRSI6cmV0dXJuIHQuZXJyb3ImJnQuZXJyb3IodGhpcy5lcnJvcik7Y2FzZSJDIjpyZXR1cm4gdC5jb21wbGV0ZSYmdC5jb21wbGV0ZSgpfX1kbyh0LGUsbil7c3dpdGNoKHRoaXMua2luZCl7Y2FzZSJOIjpyZXR1cm4gdCYmdCh0aGlzLnZhbHVlKTtjYXNlIkUiOnJldHVybiBlJiZlKHRoaXMuZXJyb3IpO2Nhc2UiQyI6cmV0dXJuIG4mJm4oKX19YWNjZXB0KHQsZSxuKXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIHQubmV4dD90aGlzLm9ic2VydmUodCk6dGhpcy5kbyh0LGUsbil9dG9PYnNlcnZhYmxlKCl7c3dpdGNoKHRoaXMua2luZCl7Y2FzZSJOIjpyZXR1cm4gWih0aGlzLnZhbHVlKTtjYXNlIkUiOnJldHVybiBYKHRoaXMuZXJyb3IpO2Nhc2UiQyI6cmV0dXJuIFV9dGhyb3cgbmV3IEVycm9yKCJ1bmV4cGVjdGVkIG5vdGlmaWNhdGlvbiBraW5kIHZhbHVlIil9c3RhdGljIGNyZWF0ZU5leHQodCl7cmV0dXJuIHZvaWQgMCE9PXQ/bmV3IFEoIk4iLHQpOlEudW5kZWZpbmVkVmFsdWVOb3RpZmljYXRpb259c3RhdGljIGNyZWF0ZUVycm9yKHQpe3JldHVybiBuZXcgUSgiRSIsdm9pZCAwLHQpfXN0YXRpYyBjcmVhdGVDb21wbGV0ZSgpe3JldHVybiBRLmNvbXBsZXRlTm90aWZpY2F0aW9ufX1RLmNvbXBsZXRlTm90aWZpY2F0aW9uPW5ldyBRKCJDIiksUS51bmRlZmluZWRWYWx1ZU5vdGlmaWNhdGlvbj1uZXcgUSgiTiIsdm9pZCAwKTtjbGFzcyAke2NvbnN0cnVjdG9yKHQsZT0wKXt0aGlzLnNjaGVkdWxlcj10LHRoaXMuZGVsYXk9ZX1jYWxsKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyB0dCh0LHRoaXMuc2NoZWR1bGVyLHRoaXMuZGVsYXkpKX19Y2xhc3MgdHQgZXh0ZW5kcyBwe2NvbnN0cnVjdG9yKHQsZSxuPTApe3N1cGVyKHQpLHRoaXMuc2NoZWR1bGVyPWUsdGhpcy5kZWxheT1ufXN0YXRpYyBkaXNwYXRjaCh0KXtjb25zdHtub3RpZmljYXRpb246ZSxkZXN0aW5hdGlvbjpufT10O2Uub2JzZXJ2ZShuKSx0aGlzLnVuc3Vic2NyaWJlKCl9c2NoZWR1bGVNZXNzYWdlKHQpe3RoaXMuZGVzdGluYXRpb24uYWRkKHRoaXMuc2NoZWR1bGVyLnNjaGVkdWxlKHR0LmRpc3BhdGNoLHRoaXMuZGVsYXksbmV3IGV0KHQsdGhpcy5kZXN0aW5hdGlvbikpKX1fbmV4dCh0KXt0aGlzLnNjaGVkdWxlTWVzc2FnZShRLmNyZWF0ZU5leHQodCkpfV9lcnJvcih0KXt0aGlzLnNjaGVkdWxlTWVzc2FnZShRLmNyZWF0ZUVycm9yKHQpKSx0aGlzLnVuc3Vic2NyaWJlKCl9X2NvbXBsZXRlKCl7dGhpcy5zY2hlZHVsZU1lc3NhZ2UoUS5jcmVhdGVDb21wbGV0ZSgpKSx0aGlzLnVuc3Vic2NyaWJlKCl9fWNsYXNzIGV0e2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5ub3RpZmljYXRpb249dCx0aGlzLmRlc3RpbmF0aW9uPWV9fWNsYXNzIG50IGV4dGVuZHMgeHtjb25zdHJ1Y3Rvcih0PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxlPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxuKXtzdXBlcigpLHRoaXMuc2NoZWR1bGVyPW4sdGhpcy5fZXZlbnRzPVtdLHRoaXMuX2luZmluaXRlVGltZVdpbmRvdz0hMSx0aGlzLl9idWZmZXJTaXplPXQ8MT8xOnQsdGhpcy5fd2luZG93VGltZT1lPDE/MTplLGU9PT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk/KHRoaXMuX2luZmluaXRlVGltZVdpbmRvdz0hMCx0aGlzLm5leHQ9dGhpcy5uZXh0SW5maW5pdGVUaW1lV2luZG93KTp0aGlzLm5leHQ9dGhpcy5uZXh0VGltZVdpbmRvd31uZXh0SW5maW5pdGVUaW1lV2luZG93KHQpe2NvbnN0IGU9dGhpcy5fZXZlbnRzO2UucHVzaCh0KSxlLmxlbmd0aD50aGlzLl9idWZmZXJTaXplJiZlLnNoaWZ0KCksc3VwZXIubmV4dCh0KX1uZXh0VGltZVdpbmRvdyh0KXt0aGlzLl9ldmVudHMucHVzaChuZXcgb3QodGhpcy5fZ2V0Tm93KCksdCkpLHRoaXMuX3RyaW1CdWZmZXJUaGVuR2V0RXZlbnRzKCksc3VwZXIubmV4dCh0KX1fc3Vic2NyaWJlKHQpe2NvbnN0IGU9dGhpcy5faW5maW5pdGVUaW1lV2luZG93LG49ZT90aGlzLl9ldmVudHM6dGhpcy5fdHJpbUJ1ZmZlclRoZW5HZXRFdmVudHMoKSxvPXRoaXMuc2NoZWR1bGVyLGk9bi5sZW5ndGg7bGV0IGE7aWYodGhpcy5jbG9zZWQpdGhyb3cgbmV3IEM7aWYodGhpcy5pc1N0b3BwZWR8fHRoaXMuaGFzRXJyb3I/YT1sLkVNUFRZOih0aGlzLm9ic2VydmVycy5wdXNoKHQpLGE9bmV3IE0odGhpcyx0KSksbyYmdC5hZGQodD1uZXcgdHQodCxvKSksZSlmb3IobGV0IGU9MDtlPGkmJiF0LmNsb3NlZDtlKyspdC5uZXh0KG5bZV0pO2Vsc2UgZm9yKGxldCBlPTA7ZTxpJiYhdC5jbG9zZWQ7ZSsrKXQubmV4dChuW2VdLnZhbHVlKTtyZXR1cm4gdGhpcy5oYXNFcnJvcj90LmVycm9yKHRoaXMudGhyb3duRXJyb3IpOnRoaXMuaXNTdG9wcGVkJiZ0LmNvbXBsZXRlKCksYX1fZ2V0Tm93KCl7cmV0dXJuKHRoaXMuc2NoZWR1bGVyfHxqKS5ub3coKX1fdHJpbUJ1ZmZlclRoZW5HZXRFdmVudHMoKXtjb25zdCB0PXRoaXMuX2dldE5vdygpLGU9dGhpcy5fYnVmZmVyU2l6ZSxuPXRoaXMuX3dpbmRvd1RpbWUsbz10aGlzLl9ldmVudHMsaT1vLmxlbmd0aDtsZXQgYT0wO2Zvcig7YTxpJiYhKHQtb1thXS50aW1lPG4pOylhKys7cmV0dXJuIGk+ZSYmKGE9TWF0aC5tYXgoYSxpLWUpKSxhPjAmJm8uc3BsaWNlKDAsYSksb319Y2xhc3Mgb3R7Y29uc3RydWN0b3IodCxlKXt0aGlzLnRpbWU9dCx0aGlzLnZhbHVlPWV9fWxldCBpdCxhdD0xO2NvbnN0IHJ0PXt9O2Z1bmN0aW9uIHN0KHQpe3JldHVybiB0IGluIHJ0JiYoZGVsZXRlIHJ0W3RdLCEwKX1jb25zdCBsdD17c2V0SW1tZWRpYXRlKHQpe2NvbnN0IGU9YXQrKztyZXR1cm4gcnRbZV09ITAsaXR8fChpdD1Qcm9taXNlLnJlc29sdmUoKSksaXQudGhlbigoKCk9PnN0KGUpJiZ0KCkpKSxlfSxjbGVhckltbWVkaWF0ZSh0KXtzdCh0KX19LGN0PW5ldyBjbGFzcyBleHRlbmRzIFZ7Zmx1c2godCl7dGhpcy5hY3RpdmU9ITAsdGhpcy5zY2hlZHVsZWQ9dm9pZCAwO2NvbnN0e2FjdGlvbnM6ZX09dGhpcztsZXQgbixvPS0xLGk9ZS5sZW5ndGg7dD10fHxlLnNoaWZ0KCk7ZG97aWYobj10LmV4ZWN1dGUodC5zdGF0ZSx0LmRlbGF5KSlicmVha313aGlsZSgrK288aSYmKHQ9ZS5zaGlmdCgpKSk7aWYodGhpcy5hY3RpdmU9ITEsbil7Zm9yKDsrK288aSYmKHQ9ZS5zaGlmdCgpKTspdC51bnN1YnNjcmliZSgpO3Rocm93IG59fX0oY2xhc3MgZXh0ZW5kcyBMe2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCxlKSx0aGlzLnNjaGVkdWxlcj10LHRoaXMud29yaz1lfXJlcXVlc3RBc3luY0lkKHQsZSxuPTApe3JldHVybiBudWxsIT09biYmbj4wP3N1cGVyLnJlcXVlc3RBc3luY0lkKHQsZSxuKToodC5hY3Rpb25zLnB1c2godGhpcyksdC5zY2hlZHVsZWR8fCh0LnNjaGVkdWxlZD1sdC5zZXRJbW1lZGlhdGUodC5mbHVzaC5iaW5kKHQsdm9pZCAwKSkpKX1yZWN5Y2xlQXN5bmNJZCh0LGUsbj0wKXtpZihudWxsIT09biYmbj4wfHxudWxsPT09biYmdGhpcy5kZWxheT4wKXJldHVybiBzdXBlci5yZWN5Y2xlQXN5bmNJZCh0LGUsbik7MD09PXQuYWN0aW9ucy5sZW5ndGgmJihsdC5jbGVhckltbWVkaWF0ZShlKSx0LnNjaGVkdWxlZD12b2lkIDApfX0pLGR0PW5ldyBWKEwpLHB0PW5ldyBjbGFzcyBleHRlbmRzIFZ7Zmx1c2godCl7dGhpcy5hY3RpdmU9ITAsdGhpcy5zY2hlZHVsZWQ9dm9pZCAwO2NvbnN0e2FjdGlvbnM6ZX09dGhpcztsZXQgbixvPS0xLGk9ZS5sZW5ndGg7dD10fHxlLnNoaWZ0KCk7ZG97aWYobj10LmV4ZWN1dGUodC5zdGF0ZSx0LmRlbGF5KSlicmVha313aGlsZSgrK288aSYmKHQ9ZS5zaGlmdCgpKSk7aWYodGhpcy5hY3RpdmU9ITEsbil7Zm9yKDsrK288aSYmKHQ9ZS5zaGlmdCgpKTspdC51bnN1YnNjcmliZSgpO3Rocm93IG59fX0oY2xhc3MgZXh0ZW5kcyBMe2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCxlKSx0aGlzLnNjaGVkdWxlcj10LHRoaXMud29yaz1lfXJlcXVlc3RBc3luY0lkKHQsZSxuPTApe3JldHVybiBudWxsIT09biYmbj4wP3N1cGVyLnJlcXVlc3RBc3luY0lkKHQsZSxuKToodC5hY3Rpb25zLnB1c2godGhpcyksdC5zY2hlZHVsZWR8fCh0LnNjaGVkdWxlZD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCgpPT50LmZsdXNoKHZvaWQgMCkpKSkpfXJlY3ljbGVBc3luY0lkKHQsZSxuPTApe2lmKG51bGwhPT1uJiZuPjB8fG51bGw9PT1uJiZ0aGlzLmRlbGF5PjApcmV0dXJuIHN1cGVyLnJlY3ljbGVBc3luY0lkKHQsZSxuKTswPT09dC5hY3Rpb25zLmxlbmd0aCYmKGNhbmNlbEFuaW1hdGlvbkZyYW1lKGUpLHQuc2NoZWR1bGVkPXZvaWQgMCl9fSk7ZnVuY3Rpb24gbXQoKXt9ZnVuY3Rpb24gdXQodCl7cmV0dXJuISF0JiYodCBpbnN0YW5jZW9mIHl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0LmxpZnQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LnN1YnNjcmliZSl9Y29uc3QgZnQ9KCgpPT57ZnVuY3Rpb24gdCgpe3JldHVybiBFcnJvci5jYWxsKHRoaXMpLHRoaXMubWVzc2FnZT0ibm8gZWxlbWVudHMgaW4gc2VxdWVuY2UiLHRoaXMubmFtZT0iRW1wdHlFcnJvciIsdGhpc31yZXR1cm4gdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpLHR9KSgpLGd0PSgoKT0+e2Z1bmN0aW9uIHQoKXtyZXR1cm4gRXJyb3IuY2FsbCh0aGlzKSx0aGlzLm1lc3NhZ2U9ImFyZ3VtZW50IG91dCBvZiByYW5nZSIsdGhpcy5uYW1lPSJBcmd1bWVudE91dE9mUmFuZ2VFcnJvciIsdGhpc31yZXR1cm4gdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpLHR9KSgpO2Z1bmN0aW9uIGh0KHQsZSl7cmV0dXJuIGZ1bmN0aW9uIG4obyl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXJndW1lbnQgaXMgbm90IGEgZnVuY3Rpb24uIEFyZSB5b3UgbG9va2luZyBmb3IgYG1hcFRvKClgPyIpO3JldHVybiBvLmxpZnQobmV3IGJ0KHQsZSkpfX1jbGFzcyBidHtjb25zdHJ1Y3Rvcih0LGUpe3RoaXMucHJvamVjdD10LHRoaXMudGhpc0FyZz1lfWNhbGwodCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IHl0KHQsdGhpcy5wcm9qZWN0LHRoaXMudGhpc0FyZykpfX1jbGFzcyB5dCBleHRlbmRzIHB7Y29uc3RydWN0b3IodCxlLG4pe3N1cGVyKHQpLHRoaXMucHJvamVjdD1lLHRoaXMuY291bnQ9MCx0aGlzLnRoaXNBcmc9bnx8dGhpc31fbmV4dCh0KXtsZXQgZTt0cnl7ZT10aGlzLnByb2plY3QuY2FsbCh0aGlzLnRoaXNBcmcsdCx0aGlzLmNvdW50KyspfWNhdGNoKHQpe3JldHVybiB2b2lkIHRoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9dGhpcy5kZXN0aW5hdGlvbi5uZXh0KGUpfX1jbGFzcyBfdCBleHRlbmRzIHB7bm90aWZ5TmV4dCh0LGUsbixvLGkpe3RoaXMuZGVzdGluYXRpb24ubmV4dChlKX1ub3RpZnlFcnJvcih0LGUpe3RoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9bm90aWZ5Q29tcGxldGUodCl7dGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpfX1jbGFzcyBDdCBleHRlbmRzIHB7Y29uc3RydWN0b3IodCxlLG4pe3N1cGVyKCksdGhpcy5wYXJlbnQ9dCx0aGlzLm91dGVyVmFsdWU9ZSx0aGlzLm91dGVySW5kZXg9bix0aGlzLmluZGV4PTB9X25leHQodCl7dGhpcy5wYXJlbnQubm90aWZ5TmV4dCh0aGlzLm91dGVyVmFsdWUsdCx0aGlzLm91dGVySW5kZXgsdGhpcy5pbmRleCsrLHRoaXMpfV9lcnJvcih0KXt0aGlzLnBhcmVudC5ub3RpZnlFcnJvcih0LHRoaXMpLHRoaXMudW5zdWJzY3JpYmUoKX1fY29tcGxldGUoKXt0aGlzLnBhcmVudC5ub3RpZnlDb21wbGV0ZSh0aGlzKSx0aGlzLnVuc3Vic2NyaWJlKCl9fWNvbnN0IE10PShmdW5jdGlvbiB2dCgpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvcj9TeW1ib2wuaXRlcmF0b3I6IkBAaXRlcmF0b3IifSkoKSx4dD10PT50JiYibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RoJiYiZnVuY3Rpb24iIT10eXBlb2YgdDtmdW5jdGlvbiBPdCh0KXtyZXR1cm4hIXQmJiJmdW5jdGlvbiIhPXR5cGVvZiB0LnN1YnNjcmliZSYmImZ1bmN0aW9uIj09dHlwZW9mIHQudGhlbn1mdW5jdGlvbiBQdCh0KXtyZXR1cm4gZT0+eyhmdW5jdGlvbiBuKHQsZSl7dmFyIG4sbyxpLGE7cmV0dXJuKGZ1bmN0aW9uIHIodCxlLG4sbyl7cmV0dXJuIG5ldyhufHwobj1Qcm9taXNlKSkoKGZ1bmN0aW9uKGksYSl7ZnVuY3Rpb24gcih0KXt0cnl7bChvLm5leHQodCkpfWNhdGNoKHQpe2EodCl9fWZ1bmN0aW9uIHModCl7dHJ5e2woby50aHJvdyh0KSl9Y2F0Y2godCl7YSh0KX19ZnVuY3Rpb24gbCh0KXt0LmRvbmU/aSh0LnZhbHVlKTooZnVuY3Rpb24gZSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIG4/dDpuZXcgbigoZnVuY3Rpb24oZSl7ZSh0KX0pKX0pKHQudmFsdWUpLnRoZW4ocixzKX1sKChvPW8uYXBwbHkodCxlfHxbXSkpLm5leHQoKSl9KSl9KSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RyeXtmb3Iobj0oZnVuY3Rpb24gcih0KXtpZighU3ltYm9sLmFzeW5jSXRlcmF0b3IpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIik7dmFyIGUsbj10W1N5bWJvbC5hc3luY0l0ZXJhdG9yXTtyZXR1cm4gbj9uLmNhbGwodCk6KHQ9KGZ1bmN0aW9uIG8odCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yLG49ZSYmdFtlXSxvPTA7aWYobilyZXR1cm4gbi5jYWxsKHQpO2lmKHQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgpcmV0dXJue25leHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdCYmbz49dC5sZW5ndGgmJih0PXZvaWQgMCkse3ZhbHVlOnQmJnRbbysrXSxkb25lOiF0fX19O3Rocm93IG5ldyBUeXBlRXJyb3IoZT8iT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS4iOiJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIil9KSh0KSxlPXt9LGkoIm5leHQiKSxpKCJ0aHJvdyIpLGkoInJldHVybiIpLGVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGUpO2Z1bmN0aW9uIGkobil7ZVtuXT10W25dJiZmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKG8saSl7IShmdW5jdGlvbiBhKHQsZSxuLG8pe1Byb21pc2UucmVzb2x2ZShvKS50aGVuKChmdW5jdGlvbihlKXt0KHt2YWx1ZTplLGRvbmU6bn0pfSksZSl9KShvLGksKGU9dFtuXShlKSkuZG9uZSxlLnZhbHVlKX0pKX19fSkodCk7IShvPXlpZWxkIG4ubmV4dCgpKS5kb25lOyllLm5leHQoby52YWx1ZSl9Y2F0Y2godCl7aT17ZXJyb3I6dH19ZmluYWxseXt0cnl7byYmIW8uZG9uZSYmKGE9bi5yZXR1cm4pJiYoeWllbGQgYS5jYWxsKG4pKX1maW5hbGx5e2lmKGkpdGhyb3cgaS5lcnJvcn19ZS5jb21wbGV0ZSgpfSkpfSkodCxlKS5jYXRjaCgodD0+ZS5lcnJvcih0KSkpfX1jb25zdCB3dD10PT57aWYodCYmImZ1bmN0aW9uIj09dHlwZW9mIHRbdV0pcmV0dXJuIG49dCx0PT57Y29uc3QgZT1uW3VdKCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUuc3Vic2NyaWJlKXRocm93IG5ldyBUeXBlRXJyb3IoIlByb3ZpZGVkIG9iamVjdCBkb2VzIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50IFN5bWJvbC5vYnNlcnZhYmxlIik7cmV0dXJuIGUuc3Vic2NyaWJlKHQpfTtpZih4dCh0KSlyZXR1cm4gRyh0KTtpZihPdCh0KSlyZXR1cm4odD0+ZT0+KHQudGhlbigodD0+e2UuY2xvc2VkfHwoZS5uZXh0KHQpLGUuY29tcGxldGUoKSl9KSwodD0+ZS5lcnJvcih0KSkpLnRoZW4obnVsbCxvKSxlKSkodCk7aWYodCYmImZ1bmN0aW9uIj09dHlwZW9mIHRbTXRdKXJldHVybiBlPXQsdD0+e2NvbnN0IG49ZVtNdF0oKTtmb3IoOzspe2NvbnN0IGU9bi5uZXh0KCk7aWYoZS5kb25lKXt0LmNvbXBsZXRlKCk7YnJlYWt9aWYodC5uZXh0KGUudmFsdWUpLHQuY2xvc2VkKWJyZWFrfXJldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBuLnJldHVybiYmdC5hZGQoKCgpPT57bi5yZXR1cm4mJm4ucmV0dXJuKCl9KSksdH07aWYoU3ltYm9sJiZTeW1ib2wuYXN5bmNJdGVyYXRvciYmdCYmImZ1bmN0aW9uIj09dHlwZW9mIHRbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKXJldHVybiBQdCh0KTt7Y29uc3QgZT1yKHQpPyJhbiBpbnZhbGlkIG9iamVjdCI6YCcke3R9J2A7dGhyb3cgbmV3IFR5cGVFcnJvcihgWW91IHByb3ZpZGVkICR7ZX0gd2hlcmUgYSBzdHJlYW0gd2FzIGV4cGVjdGVkLiBZb3UgY2FuIHByb3ZpZGUgYW4gT2JzZXJ2YWJsZSwgUHJvbWlzZSwgQXJyYXksIG9yIEl0ZXJhYmxlLmApfXZhciBlLG59O2Z1bmN0aW9uIGt0KHQsZSxuLG8saT1uZXcgQ3QodCxuLG8pKXtpZighaS5jbG9zZWQpcmV0dXJuIGUgaW5zdGFuY2VvZiB5P2Uuc3Vic2NyaWJlKGkpOnd0KGUpKGkpfWNvbnN0IFN0PXt9O2Z1bmN0aW9uIER0KC4uLnQpe2xldCBlLG47cmV0dXJuIFcodFt0Lmxlbmd0aC0xXSkmJihuPXQucG9wKCkpLCJmdW5jdGlvbiI9PXR5cGVvZiB0W3QubGVuZ3RoLTFdJiYoZT10LnBvcCgpKSwxPT09dC5sZW5ndGgmJmEodFswXSkmJih0PXRbMF0pLHEodCxuKS5saWZ0KG5ldyBFdChlKSl9Y2xhc3MgRXR7Y29uc3RydWN0b3IodCl7dGhpcy5yZXN1bHRTZWxlY3Rvcj10fWNhbGwodCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IEF0KHQsdGhpcy5yZXN1bHRTZWxlY3RvcikpfX1jbGFzcyBBdCBleHRlbmRzIF90e2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCksdGhpcy5yZXN1bHRTZWxlY3Rvcj1lLHRoaXMuYWN0aXZlPTAsdGhpcy52YWx1ZXM9W10sdGhpcy5vYnNlcnZhYmxlcz1bXX1fbmV4dCh0KXt0aGlzLnZhbHVlcy5wdXNoKFN0KSx0aGlzLm9ic2VydmFibGVzLnB1c2godCl9X2NvbXBsZXRlKCl7Y29uc3QgdD10aGlzLm9ic2VydmFibGVzLGU9dC5sZW5ndGg7aWYoMD09PWUpdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpO2Vsc2V7dGhpcy5hY3RpdmU9ZSx0aGlzLnRvUmVzcG9uZD1lO2ZvcihsZXQgbj0wO248ZTtuKyspe2NvbnN0IGU9dFtuXTt0aGlzLmFkZChrdCh0aGlzLGUsZSxuKSl9fX1ub3RpZnlDb21wbGV0ZSh0KXswPT0odGhpcy5hY3RpdmUtPTEpJiZ0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCl9bm90aWZ5TmV4dCh0LGUsbixvLGkpe2NvbnN0IGE9dGhpcy52YWx1ZXMscj10aGlzLnRvUmVzcG9uZD9hW25dPT09U3Q/LS10aGlzLnRvUmVzcG9uZDp0aGlzLnRvUmVzcG9uZDowO2Fbbl09ZSwwPT09ciYmKHRoaXMucmVzdWx0U2VsZWN0b3I/dGhpcy5fdHJ5UmVzdWx0U2VsZWN0b3IoYSk6dGhpcy5kZXN0aW5hdGlvbi5uZXh0KGEuc2xpY2UoKSkpfV90cnlSZXN1bHRTZWxlY3Rvcih0KXtsZXQgZTt0cnl7ZT10aGlzLnJlc3VsdFNlbGVjdG9yLmFwcGx5KHRoaXMsdCl9Y2F0Y2godCl7cmV0dXJuIHZvaWQgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX10aGlzLmRlc3RpbmF0aW9uLm5leHQoZSl9fWZ1bmN0aW9uIFJ0KHQsZSl7cmV0dXJuIGU/KGZ1bmN0aW9uIG4odCxlKXtpZihudWxsIT10KXtpZigoZnVuY3Rpb24gbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIHRbdV19KSh0KSlyZXR1cm4oZnVuY3Rpb24gbyh0LGUpe3JldHVybiBuZXcgeSgobj0+e2NvbnN0IG89bmV3IGw7cmV0dXJuIG8uYWRkKGUuc2NoZWR1bGUoKCgpPT57Y29uc3QgaT10W3VdKCk7by5hZGQoaS5zdWJzY3JpYmUoe25leHQodCl7by5hZGQoZS5zY2hlZHVsZSgoKCk9Pm4ubmV4dCh0KSkpKX0sZXJyb3IodCl7by5hZGQoZS5zY2hlZHVsZSgoKCk9Pm4uZXJyb3IodCkpKSl9LGNvbXBsZXRlKCl7by5hZGQoZS5zY2hlZHVsZSgoKCk9Pm4uY29tcGxldGUoKSkpKX19KSl9KSkpLG99KSl9KSh0LGUpO2lmKE90KHQpKXJldHVybihmdW5jdGlvbiBpKHQsZSl7cmV0dXJuIG5ldyB5KChuPT57Y29uc3Qgbz1uZXcgbDtyZXR1cm4gby5hZGQoZS5zY2hlZHVsZSgoKCk9PnQudGhlbigodD0+e28uYWRkKGUuc2NoZWR1bGUoKCgpPT57bi5uZXh0KHQpLG8uYWRkKGUuc2NoZWR1bGUoKCgpPT5uLmNvbXBsZXRlKCkpKSl9KSkpfSksKHQ9PntvLmFkZChlLnNjaGVkdWxlKCgoKT0+bi5lcnJvcih0KSkpKX0pKSkpKSxvfSkpfSkodCxlKTtpZih4dCh0KSlyZXR1cm4gWSh0LGUpO2lmKChmdW5jdGlvbiBhKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgdFtNdF19KSh0KXx8InN0cmluZyI9PXR5cGVvZiB0KXJldHVybihmdW5jdGlvbiByKHQsZSl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKCJJdGVyYWJsZSBjYW5ub3QgYmUgbnVsbCIpO3JldHVybiBuZXcgeSgobj0+e2NvbnN0IG89bmV3IGw7bGV0IGk7cmV0dXJuIG8uYWRkKCgoKT0+e2kmJiJmdW5jdGlvbiI9PXR5cGVvZiBpLnJldHVybiYmaS5yZXR1cm4oKX0pKSxvLmFkZChlLnNjaGVkdWxlKCgoKT0+e2k9dFtNdF0oKSxvLmFkZChlLnNjaGVkdWxlKChmdW5jdGlvbigpe2lmKG4uY2xvc2VkKXJldHVybjtsZXQgdCxlO3RyeXtjb25zdCBuPWkubmV4dCgpO3Q9bi52YWx1ZSxlPW4uZG9uZX1jYXRjaCh0KXtyZXR1cm4gdm9pZCBuLmVycm9yKHQpfWU/bi5jb21wbGV0ZSgpOihuLm5leHQodCksdGhpcy5zY2hlZHVsZSgpKX0pKSl9KSkpLG99KSl9KSh0LGUpO2lmKFN5bWJvbCYmU3ltYm9sLmFzeW5jSXRlcmF0b3ImJiJmdW5jdGlvbiI9PXR5cGVvZiB0W1N5bWJvbC5hc3luY0l0ZXJhdG9yXSlyZXR1cm4oZnVuY3Rpb24gcyh0LGUpe2lmKCF0KXRocm93IG5ldyBFcnJvcigiSXRlcmFibGUgY2Fubm90IGJlIG51bGwiKTtyZXR1cm4gbmV3IHkoKG49Pntjb25zdCBvPW5ldyBsO3JldHVybiBvLmFkZChlLnNjaGVkdWxlKCgoKT0+e2NvbnN0IGk9dFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKTtvLmFkZChlLnNjaGVkdWxlKChmdW5jdGlvbigpe2kubmV4dCgpLnRoZW4oKHQ9Pnt0LmRvbmU/bi5jb21wbGV0ZSgpOihuLm5leHQodC52YWx1ZSksdGhpcy5zY2hlZHVsZSgpKX0pKX0pKSl9KSkpLG99KSl9KSh0LGUpfXRocm93IG5ldyBUeXBlRXJyb3IoKG51bGwhPT10JiZ0eXBlb2YgdHx8dCkrIiBpcyBub3Qgb2JzZXJ2YWJsZSIpfSkodCxlKTp0IGluc3RhbmNlb2YgeT90Om5ldyB5KHd0KHQpKX1mdW5jdGlvbiBUdCh0LGUsbj1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlP289Pm8ucGlwZShUdCgoKG4sbyk9PlJ0KHQobixvKSkucGlwZShodCgoKHQsaSk9PmUobix0LG8saSkpKSkpLG4pKTooIm51bWJlciI9PXR5cGVvZiBlJiYobj1lKSxlPT5lLmxpZnQobmV3IE50KHQsbikpKX1jbGFzcyBOdHtjb25zdHJ1Y3Rvcih0LGU9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKXt0aGlzLnByb2plY3Q9dCx0aGlzLmNvbmN1cnJlbnQ9ZX1jYWxsKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyBJdCh0LHRoaXMucHJvamVjdCx0aGlzLmNvbmN1cnJlbnQpKX19Y2xhc3MgSXQgZXh0ZW5kcyBfdHtjb25zdHJ1Y3Rvcih0LGUsbj1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpe3N1cGVyKHQpLHRoaXMucHJvamVjdD1lLHRoaXMuY29uY3VycmVudD1uLHRoaXMuaGFzQ29tcGxldGVkPSExLHRoaXMuYnVmZmVyPVtdLHRoaXMuYWN0aXZlPTAsdGhpcy5pbmRleD0wfV9uZXh0KHQpe3RoaXMuYWN0aXZlPHRoaXMuY29uY3VycmVudD90aGlzLl90cnlOZXh0KHQpOnRoaXMuYnVmZmVyLnB1c2godCl9X3RyeU5leHQodCl7bGV0IGU7Y29uc3Qgbj10aGlzLmluZGV4Kys7dHJ5e2U9dGhpcy5wcm9qZWN0KHQsbil9Y2F0Y2godCl7cmV0dXJuIHZvaWQgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX10aGlzLmFjdGl2ZSsrLHRoaXMuX2lubmVyU3ViKGUsdCxuKX1faW5uZXJTdWIodCxlLG4pe2NvbnN0IG89bmV3IEN0KHRoaXMsZSxuKSxpPXRoaXMuZGVzdGluYXRpb247aS5hZGQobyk7Y29uc3QgYT1rdCh0aGlzLHQsdm9pZCAwLHZvaWQgMCxvKTthIT09byYmaS5hZGQoYSl9X2NvbXBsZXRlKCl7dGhpcy5oYXNDb21wbGV0ZWQ9ITAsMD09PXRoaXMuYWN0aXZlJiYwPT09dGhpcy5idWZmZXIubGVuZ3RoJiZ0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCksdGhpcy51bnN1YnNjcmliZSgpfW5vdGlmeU5leHQodCxlLG4sbyxpKXt0aGlzLmRlc3RpbmF0aW9uLm5leHQoZSl9bm90aWZ5Q29tcGxldGUodCl7Y29uc3QgZT10aGlzLmJ1ZmZlcjt0aGlzLnJlbW92ZSh0KSx0aGlzLmFjdGl2ZS0tLGUubGVuZ3RoPjA/dGhpcy5fbmV4dChlLnNoaWZ0KCkpOjA9PT10aGlzLmFjdGl2ZSYmdGhpcy5oYXNDb21wbGV0ZWQmJnRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKX19ZnVuY3Rpb24genQodD1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpe3JldHVybiBUdChmLHQpfWZ1bmN0aW9uIEh0KC4uLnQpe3JldHVybihmdW5jdGlvbiBlKCl7cmV0dXJuIHp0KDEpfSkoKShaKC4uLnQpKX1mdW5jdGlvbiBGdCh0KXtyZXR1cm4gbmV3IHkoKGU9PntsZXQgbjt0cnl7bj10KCl9Y2F0Y2godCl7cmV0dXJuIHZvaWQgZS5lcnJvcih0KX1yZXR1cm4obj9SdChuKTpVKS5zdWJzY3JpYmUoZSl9KSl9ZnVuY3Rpb24gTHQoLi4udCl7aWYoMT09PXQubGVuZ3RoKXtjb25zdCBlPXRbMF07aWYoYShlKSlyZXR1cm4gQnQoZSxudWxsKTtpZihyKGUpJiZPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk9PT1PYmplY3QucHJvdG90eXBlKXtjb25zdCB0PU9iamVjdC5rZXlzKGUpO3JldHVybiBCdCh0Lm1hcCgodD0+ZVt0XSkpLHQpfX1pZigiZnVuY3Rpb24iPT10eXBlb2YgdFt0Lmxlbmd0aC0xXSl7Y29uc3QgZT10LnBvcCgpO3JldHVybiBCdCh0PTE9PT10Lmxlbmd0aCYmYSh0WzBdKT90WzBdOnQsbnVsbCkucGlwZShodCgodD0+ZSguLi50KSkpKX1yZXR1cm4gQnQodCxudWxsKX1mdW5jdGlvbiBCdCh0LGUpe3JldHVybiBuZXcgeSgobj0+e2NvbnN0IG89dC5sZW5ndGg7aWYoMD09PW8pcmV0dXJuIHZvaWQgbi5jb21wbGV0ZSgpO2NvbnN0IGk9bmV3IEFycmF5KG8pO2xldCBhPTAscj0wO2ZvcihsZXQgcz0wO3M8bztzKyspe2NvbnN0IGw9UnQodFtzXSk7bGV0IGM9ITE7bi5hZGQobC5zdWJzY3JpYmUoe25leHQ6dD0+e2N8fChjPSEwLHIrKyksaVtzXT10fSxlcnJvcjp0PT5uLmVycm9yKHQpLGNvbXBsZXRlOigpPT57YSsrLGEhPT1vJiZjfHwocj09PW8mJm4ubmV4dChlP2UucmVkdWNlKCgodCxlLG4pPT4odFtlXT1pW25dLHQpKSx7fSk6aSksbi5jb21wbGV0ZSgpKX19KSl9fSkpfWZ1bmN0aW9uIFZ0KGUsbixvLGkpe3JldHVybiB0KG8pJiYoaT1vLG89dm9pZCAwKSxpP1Z0KGUsbixvKS5waXBlKGh0KCh0PT5hKHQpP2koLi4udCk6aSh0KSkpKTpuZXcgeSgodD0+e2p0KGUsbiwoZnVuY3Rpb24gaShlKXt0Lm5leHQoYXJndW1lbnRzLmxlbmd0aD4xP0FycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk6ZSl9KSx0LG8pfSkpfWZ1bmN0aW9uIGp0KHQsZSxuLG8saSl7bGV0IGE7aWYoKGZ1bmN0aW9uIHIodCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LmFkZEV2ZW50TGlzdGVuZXImJiJmdW5jdGlvbiI9PXR5cGVvZiB0LnJlbW92ZUV2ZW50TGlzdGVuZXJ9KSh0KSl7Y29uc3Qgbz10O3QuYWRkRXZlbnRMaXN0ZW5lcihlLG4saSksYT0oKT0+by5yZW1vdmVFdmVudExpc3RlbmVyKGUsbixpKX1lbHNlIGlmKChmdW5jdGlvbiBzKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgdC5vbiYmImZ1bmN0aW9uIj09dHlwZW9mIHQub2ZmfSkodCkpe2NvbnN0IG89dDt0Lm9uKGUsbiksYT0oKT0+by5vZmYoZSxuKX1lbHNlIGlmKChmdW5jdGlvbiBsKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgdC5hZGRMaXN0ZW5lciYmImZ1bmN0aW9uIj09dHlwZW9mIHQucmVtb3ZlTGlzdGVuZXJ9KSh0KSl7Y29uc3Qgbz10O3QuYWRkTGlzdGVuZXIoZSxuKSxhPSgpPT5vLnJlbW92ZUxpc3RlbmVyKGUsbil9ZWxzZXtpZighdHx8IXQubGVuZ3RoKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgZXZlbnQgdGFyZ2V0Iik7Zm9yKGxldCBhPTAscj10Lmxlbmd0aDthPHI7YSsrKWp0KHRbYV0sZSxuLG8saSl9by5hZGQoYSl9ZnVuY3Rpb24gVXQodCl7cmV0dXJuIWEodCkmJnQtcGFyc2VGbG9hdCh0KSsxPj0wfWZ1bmN0aW9uIFd0KC4uLnQpe2xldCBlLG49TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLG89dFt0Lmxlbmd0aC0xXTtyZXR1cm4gVyhvKT8oZT10LnBvcCgpLHQubGVuZ3RoPjEmJiJudW1iZXIiPT10eXBlb2YgdFt0Lmxlbmd0aC0xXSYmKG49dC5wb3AoKSkpOiJudW1iZXIiPT10eXBlb2YgbyYmKG49dC5wb3AoKSksIWUmJjE9PT10Lmxlbmd0aCYmdFswXWluc3RhbmNlb2YgeT90WzBdOnp0KG4pKHEodCxlKSl9ZnVuY3Rpb24gR3QodCxlKXtyZXR1cm4gZnVuY3Rpb24gbihvKXtyZXR1cm4gby5saWZ0KG5ldyBZdCh0LGUpKX19Y2xhc3MgWXR7Y29uc3RydWN0b3IodCxlKXt0aGlzLnByZWRpY2F0ZT10LHRoaXMudGhpc0FyZz1lfWNhbGwodCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IHF0KHQsdGhpcy5wcmVkaWNhdGUsdGhpcy50aGlzQXJnKSl9fWNsYXNzIHF0IGV4dGVuZHMgcHtjb25zdHJ1Y3Rvcih0LGUsbil7c3VwZXIodCksdGhpcy5wcmVkaWNhdGU9ZSx0aGlzLnRoaXNBcmc9bix0aGlzLmNvdW50PTB9X25leHQodCl7bGV0IGU7dHJ5e2U9dGhpcy5wcmVkaWNhdGUuY2FsbCh0aGlzLnRoaXNBcmcsdCx0aGlzLmNvdW50KyspfWNhdGNoKHQpe3JldHVybiB2b2lkIHRoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9ZSYmdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHQpfX1mdW5jdGlvbiBadCh0PTAsZSxuKXtsZXQgbz0tMTtyZXR1cm4gVXQoZSk/bz1OdW1iZXIoZSk8MT8xOk51bWJlcihlKTpXKGUpJiYobj1lKSxXKG4pfHwobj1kdCksbmV3IHkoKGU9Pntjb25zdCBpPVV0KHQpP3Q6K3Qtbi5ub3coKTtyZXR1cm4gbi5zY2hlZHVsZShYdCxpLHtpbmRleDowLHBlcmlvZDpvLHN1YnNjcmliZXI6ZX0pfSkpfWZ1bmN0aW9uIFh0KHQpe2NvbnN0e2luZGV4OmUscGVyaW9kOm4sc3Vic2NyaWJlcjpvfT10O2lmKG8ubmV4dChlKSwhby5jbG9zZWQpe2lmKC0xPT09bilyZXR1cm4gby5jb21wbGV0ZSgpO3QuaW5kZXg9ZSsxLHRoaXMuc2NoZWR1bGUodCxuKX19Y2xhc3MgS3R7Y29uc3RydWN0b3IodCl7dGhpcy5yZXN1bHRTZWxlY3Rvcj10fWNhbGwodCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IEp0KHQsdGhpcy5yZXN1bHRTZWxlY3RvcikpfX1jbGFzcyBKdCBleHRlbmRzIHB7Y29uc3RydWN0b3IodCxlLG49T2JqZWN0LmNyZWF0ZShudWxsKSl7c3VwZXIodCksdGhpcy5pdGVyYXRvcnM9W10sdGhpcy5hY3RpdmU9MCx0aGlzLnJlc3VsdFNlbGVjdG9yPWUsdGhpcy52YWx1ZXM9bn1fbmV4dCh0KXtjb25zdCBlPXRoaXMuaXRlcmF0b3JzO2EodCk/ZS5wdXNoKG5ldyAkdCh0KSk6ZS5wdXNoKCJmdW5jdGlvbiI9PXR5cGVvZiB0W010XT9uZXcgUXQodFtNdF0oKSk6bmV3IHRlKHRoaXMuZGVzdGluYXRpb24sdGhpcyx0KSl9X2NvbXBsZXRlKCl7Y29uc3QgdD10aGlzLml0ZXJhdG9ycyxlPXQubGVuZ3RoO2lmKHRoaXMudW5zdWJzY3JpYmUoKSwwIT09ZSl7dGhpcy5hY3RpdmU9ZTtmb3IobGV0IG49MDtuPGU7bisrKXtsZXQgZT10W25dO2Uuc3RpbGxVbnN1YnNjcmliZWQ/dGhpcy5kZXN0aW5hdGlvbi5hZGQoZS5zdWJzY3JpYmUoZSxuKSk6dGhpcy5hY3RpdmUtLX19ZWxzZSB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCl9bm90aWZ5SW5hY3RpdmUoKXt0aGlzLmFjdGl2ZS0tLDA9PT10aGlzLmFjdGl2ZSYmdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpfWNoZWNrSXRlcmF0b3JzKCl7Y29uc3QgdD10aGlzLml0ZXJhdG9ycyxlPXQubGVuZ3RoLG49dGhpcy5kZXN0aW5hdGlvbjtmb3IobGV0IG49MDtuPGU7bisrKXtsZXQgZT10W25dO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlLmhhc1ZhbHVlJiYhZS5oYXNWYWx1ZSgpKXJldHVybn1sZXQgbz0hMTtjb25zdCBpPVtdO2ZvcihsZXQgYT0wO2E8ZTthKyspe2xldCBlPXRbYV0scj1lLm5leHQoKTtpZihlLmhhc0NvbXBsZXRlZCgpJiYobz0hMCksci5kb25lKXJldHVybiB2b2lkIG4uY29tcGxldGUoKTtpLnB1c2goci52YWx1ZSl9dGhpcy5yZXN1bHRTZWxlY3Rvcj90aGlzLl90cnlyZXN1bHRTZWxlY3RvcihpKTpuLm5leHQoaSksbyYmbi5jb21wbGV0ZSgpfV90cnlyZXN1bHRTZWxlY3Rvcih0KXtsZXQgZTt0cnl7ZT10aGlzLnJlc3VsdFNlbGVjdG9yLmFwcGx5KHRoaXMsdCl9Y2F0Y2godCl7cmV0dXJuIHZvaWQgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX10aGlzLmRlc3RpbmF0aW9uLm5leHQoZSl9fWNsYXNzIFF0e2NvbnN0cnVjdG9yKHQpe3RoaXMuaXRlcmF0b3I9dCx0aGlzLm5leHRSZXN1bHQ9dC5uZXh0KCl9aGFzVmFsdWUoKXtyZXR1cm4hMH1uZXh0KCl7Y29uc3QgdD10aGlzLm5leHRSZXN1bHQ7cmV0dXJuIHRoaXMubmV4dFJlc3VsdD10aGlzLml0ZXJhdG9yLm5leHQoKSx0fWhhc0NvbXBsZXRlZCgpe2NvbnN0IHQ9dGhpcy5uZXh0UmVzdWx0O3JldHVybiB0JiYhIXQuZG9uZX19Y2xhc3MgJHR7Y29uc3RydWN0b3IodCl7dGhpcy5hcnJheT10LHRoaXMuaW5kZXg9MCx0aGlzLmxlbmd0aD0wLHRoaXMubGVuZ3RoPXQubGVuZ3RofVtNdF0oKXtyZXR1cm4gdGhpc31uZXh0KHQpe2NvbnN0IGU9dGhpcy5pbmRleCsrO3JldHVybiBlPHRoaXMubGVuZ3RoP3t2YWx1ZTp0aGlzLmFycmF5W2VdLGRvbmU6ITF9Ont2YWx1ZTpudWxsLGRvbmU6ITB9fWhhc1ZhbHVlKCl7cmV0dXJuIHRoaXMuYXJyYXkubGVuZ3RoPnRoaXMuaW5kZXh9aGFzQ29tcGxldGVkKCl7cmV0dXJuIHRoaXMuYXJyYXkubGVuZ3RoPT09dGhpcy5pbmRleH19Y2xhc3MgdGUgZXh0ZW5kcyBfdHtjb25zdHJ1Y3Rvcih0LGUsbil7c3VwZXIodCksdGhpcy5wYXJlbnQ9ZSx0aGlzLm9ic2VydmFibGU9bix0aGlzLnN0aWxsVW5zdWJzY3JpYmVkPSEwLHRoaXMuYnVmZmVyPVtdLHRoaXMuaXNDb21wbGV0ZT0hMX1bTXRdKCl7cmV0dXJuIHRoaXN9bmV4dCgpe2NvbnN0IHQ9dGhpcy5idWZmZXI7cmV0dXJuIDA9PT10Lmxlbmd0aCYmdGhpcy5pc0NvbXBsZXRlP3t2YWx1ZTpudWxsLGRvbmU6ITB9Ont2YWx1ZTp0LnNoaWZ0KCksZG9uZTohMX19aGFzVmFsdWUoKXtyZXR1cm4gdGhpcy5idWZmZXIubGVuZ3RoPjB9aGFzQ29tcGxldGVkKCl7cmV0dXJuIDA9PT10aGlzLmJ1ZmZlci5sZW5ndGgmJnRoaXMuaXNDb21wbGV0ZX1ub3RpZnlDb21wbGV0ZSgpe3RoaXMuYnVmZmVyLmxlbmd0aD4wPyh0aGlzLmlzQ29tcGxldGU9ITAsdGhpcy5wYXJlbnQubm90aWZ5SW5hY3RpdmUoKSk6dGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpfW5vdGlmeU5leHQodCxlLG4sbyxpKXt0aGlzLmJ1ZmZlci5wdXNoKGUpLHRoaXMucGFyZW50LmNoZWNrSXRlcmF0b3JzKCl9c3Vic2NyaWJlKHQsZSl7cmV0dXJuIGt0KHRoaXMsdGhpcy5vYnNlcnZhYmxlLHRoaXMsZSl9fWNsYXNzIGVle2NvbnN0cnVjdG9yKHQpe3RoaXMuZHVyYXRpb25TZWxlY3Rvcj10fWNhbGwodCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IG5lKHQsdGhpcy5kdXJhdGlvblNlbGVjdG9yKSl9fWNsYXNzIG5lIGV4dGVuZHMgX3R7Y29uc3RydWN0b3IodCxlKXtzdXBlcih0KSx0aGlzLmR1cmF0aW9uU2VsZWN0b3I9ZSx0aGlzLnZhbHVlPW51bGwsdGhpcy5oYXNWYWx1ZT0hMSx0aGlzLnRocm90dGxlZD1udWxsfV9uZXh0KHQpe2lmKHRoaXMudmFsdWU9dCx0aGlzLmhhc1ZhbHVlPSEwLCF0aGlzLnRocm90dGxlZCl7bGV0IGU7dHJ5e2NvbnN0e2R1cmF0aW9uU2VsZWN0b3I6bn09dGhpcztlPW4odCl9Y2F0Y2godCl7cmV0dXJuIHRoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9Y29uc3Qgbj1rdCh0aGlzLGUpOyFufHxuLmNsb3NlZD90aGlzLmNsZWFyVGhyb3R0bGUoKTp0aGlzLmFkZCh0aGlzLnRocm90dGxlZD1uKX19Y2xlYXJUaHJvdHRsZSgpe2NvbnN0e3ZhbHVlOnQsaGFzVmFsdWU6ZSx0aHJvdHRsZWQ6bn09dGhpcztuJiYodGhpcy5yZW1vdmUobiksdGhpcy50aHJvdHRsZWQ9bnVsbCxuLnVuc3Vic2NyaWJlKCkpLGUmJih0aGlzLnZhbHVlPW51bGwsdGhpcy5oYXNWYWx1ZT0hMSx0aGlzLmRlc3RpbmF0aW9uLm5leHQodCkpfW5vdGlmeU5leHQodCxlLG4sbyl7dGhpcy5jbGVhclRocm90dGxlKCl9bm90aWZ5Q29tcGxldGUoKXt0aGlzLmNsZWFyVGhyb3R0bGUoKX19ZnVuY3Rpb24gb2UodCxlPWR0KXtyZXR1cm4oZnVuY3Rpb24gbih0KXtyZXR1cm4gZnVuY3Rpb24gZShuKXtyZXR1cm4gbi5saWZ0KG5ldyBlZSh0KSl9fSkoKCgpPT5adCh0LGUpKSl9Y2xhc3MgaWV7Y29uc3RydWN0b3IodCl7dGhpcy5jbG9zaW5nTm90aWZpZXI9dH1jYWxsKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyBhZSh0LHRoaXMuY2xvc2luZ05vdGlmaWVyKSl9fWNsYXNzIGFlIGV4dGVuZHMgX3R7Y29uc3RydWN0b3IodCxlKXtzdXBlcih0KSx0aGlzLmJ1ZmZlcj1bXSx0aGlzLmFkZChrdCh0aGlzLGUpKX1fbmV4dCh0KXt0aGlzLmJ1ZmZlci5wdXNoKHQpfW5vdGlmeU5leHQodCxlLG4sbyxpKXtjb25zdCBhPXRoaXMuYnVmZmVyO3RoaXMuYnVmZmVyPVtdLHRoaXMuZGVzdGluYXRpb24ubmV4dChhKX19ZnVuY3Rpb24gcmUodCl7cmV0dXJuIGZ1bmN0aW9uIGUobil7Y29uc3Qgbz1uZXcgc2UodCksaT1uLmxpZnQobyk7cmV0dXJuIG8uY2F1Z2h0PWl9fWNsYXNzIHNle2NvbnN0cnVjdG9yKHQpe3RoaXMuc2VsZWN0b3I9dH1jYWxsKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyBsZSh0LHRoaXMuc2VsZWN0b3IsdGhpcy5jYXVnaHQpKX19Y2xhc3MgbGUgZXh0ZW5kcyBfdHtjb25zdHJ1Y3Rvcih0LGUsbil7c3VwZXIodCksdGhpcy5zZWxlY3Rvcj1lLHRoaXMuY2F1Z2h0PW59ZXJyb3IodCl7aWYoIXRoaXMuaXNTdG9wcGVkKXtsZXQgZTt0cnl7ZT10aGlzLnNlbGVjdG9yKHQsdGhpcy5jYXVnaHQpfWNhdGNoKHQpe3JldHVybiB2b2lkIHN1cGVyLmVycm9yKHQpfXRoaXMuX3Vuc3Vic2NyaWJlQW5kUmVjeWNsZSgpO2NvbnN0IG49bmV3IEN0KHRoaXMsdm9pZCAwLHZvaWQgMCk7dGhpcy5hZGQobik7Y29uc3Qgbz1rdCh0aGlzLGUsdm9pZCAwLHZvaWQgMCxuKTtvIT09biYmdGhpcy5hZGQobyl9fX1mdW5jdGlvbiBjZSguLi50KXtyZXR1cm4oZnVuY3Rpb24gZSguLi50KXtsZXQgZTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdFt0Lmxlbmd0aC0xXSYmKGU9dC5wb3AoKSksMT09PXQubGVuZ3RoJiZhKHRbMF0pJiYodD10WzBdLnNsaWNlKCkpLG49Pm4ubGlmdC5jYWxsKFJ0KFtuLC4uLnRdKSxuZXcgRXQoZSkpfSkoLi4udCl9ZnVuY3Rpb24gZGUodCxlPWR0KXtyZXR1cm4gbj0+bi5saWZ0KG5ldyBwZSh0LGUpKX1jbGFzcyBwZXtjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuZHVlVGltZT10LHRoaXMuc2NoZWR1bGVyPWV9Y2FsbCh0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgbWUodCx0aGlzLmR1ZVRpbWUsdGhpcy5zY2hlZHVsZXIpKX19Y2xhc3MgbWUgZXh0ZW5kcyBwe2NvbnN0cnVjdG9yKHQsZSxuKXtzdXBlcih0KSx0aGlzLmR1ZVRpbWU9ZSx0aGlzLnNjaGVkdWxlcj1uLHRoaXMuZGVib3VuY2VkU3Vic2NyaXB0aW9uPW51bGwsdGhpcy5sYXN0VmFsdWU9bnVsbCx0aGlzLmhhc1ZhbHVlPSExfV9uZXh0KHQpe3RoaXMuY2xlYXJEZWJvdW5jZSgpLHRoaXMubGFzdFZhbHVlPXQsdGhpcy5oYXNWYWx1ZT0hMCx0aGlzLmFkZCh0aGlzLmRlYm91bmNlZFN1YnNjcmlwdGlvbj10aGlzLnNjaGVkdWxlci5zY2hlZHVsZSh1ZSx0aGlzLmR1ZVRpbWUsdGhpcykpfV9jb21wbGV0ZSgpe3RoaXMuZGVib3VuY2VkTmV4dCgpLHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKX1kZWJvdW5jZWROZXh0KCl7aWYodGhpcy5jbGVhckRlYm91bmNlKCksdGhpcy5oYXNWYWx1ZSl7Y29uc3R7bGFzdFZhbHVlOnR9PXRoaXM7dGhpcy5sYXN0VmFsdWU9bnVsbCx0aGlzLmhhc1ZhbHVlPSExLHRoaXMuZGVzdGluYXRpb24ubmV4dCh0KX19Y2xlYXJEZWJvdW5jZSgpe2NvbnN0IHQ9dGhpcy5kZWJvdW5jZWRTdWJzY3JpcHRpb247bnVsbCE9PXQmJih0aGlzLnJlbW92ZSh0KSx0LnVuc3Vic2NyaWJlKCksdGhpcy5kZWJvdW5jZWRTdWJzY3JpcHRpb249bnVsbCl9fWZ1bmN0aW9uIHVlKHQpe3QuZGVib3VuY2VkTmV4dCgpfWZ1bmN0aW9uIGZlKHQ9bnVsbCl7cmV0dXJuIGU9PmUubGlmdChuZXcgZ2UodCkpfWNsYXNzIGdle2NvbnN0cnVjdG9yKHQpe3RoaXMuZGVmYXVsdFZhbHVlPXR9Y2FsbCh0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgaGUodCx0aGlzLmRlZmF1bHRWYWx1ZSkpfX1jbGFzcyBoZSBleHRlbmRzIHB7Y29uc3RydWN0b3IodCxlKXtzdXBlcih0KSx0aGlzLmRlZmF1bHRWYWx1ZT1lLHRoaXMuaXNFbXB0eT0hMH1fbmV4dCh0KXt0aGlzLmlzRW1wdHk9ITEsdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHQpfV9jb21wbGV0ZSgpe3RoaXMuaXNFbXB0eSYmdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHRoaXMuZGVmYXVsdFZhbHVlKSx0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCl9fWZ1bmN0aW9uIGJlKHQsZT1kdCl7Y29uc3Qgbj0oZnVuY3Rpb24gbyh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIERhdGUmJiFpc05hTigrdCl9KSh0KT8rdC1lLm5vdygpOk1hdGguYWJzKHQpO3JldHVybiB0PT50LmxpZnQobmV3IHllKG4sZSkpfWNsYXNzIHlle2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5kZWxheT10LHRoaXMuc2NoZWR1bGVyPWV9Y2FsbCh0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgX2UodCx0aGlzLmRlbGF5LHRoaXMuc2NoZWR1bGVyKSl9fWNsYXNzIF9lIGV4dGVuZHMgcHtjb25zdHJ1Y3Rvcih0LGUsbil7c3VwZXIodCksdGhpcy5kZWxheT1lLHRoaXMuc2NoZWR1bGVyPW4sdGhpcy5xdWV1ZT1bXSx0aGlzLmFjdGl2ZT0hMSx0aGlzLmVycm9yZWQ9ITF9c3RhdGljIGRpc3BhdGNoKHQpe2NvbnN0IGU9dC5zb3VyY2Usbj1lLnF1ZXVlLG89dC5zY2hlZHVsZXIsaT10LmRlc3RpbmF0aW9uO2Zvcig7bi5sZW5ndGg+MCYmblswXS50aW1lLW8ubm93KCk8PTA7KW4uc2hpZnQoKS5ub3RpZmljYXRpb24ub2JzZXJ2ZShpKTtpZihuLmxlbmd0aD4wKXtjb25zdCBlPU1hdGgubWF4KDAsblswXS50aW1lLW8ubm93KCkpO3RoaXMuc2NoZWR1bGUodCxlKX1lbHNlIGUuaXNTdG9wcGVkPyhlLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCksZS5hY3RpdmU9ITEpOih0aGlzLnVuc3Vic2NyaWJlKCksZS5hY3RpdmU9ITEpfV9zY2hlZHVsZSh0KXt0aGlzLmFjdGl2ZT0hMCx0aGlzLmRlc3RpbmF0aW9uLmFkZCh0LnNjaGVkdWxlKF9lLmRpc3BhdGNoLHRoaXMuZGVsYXkse3NvdXJjZTp0aGlzLGRlc3RpbmF0aW9uOnRoaXMuZGVzdGluYXRpb24sc2NoZWR1bGVyOnR9KSl9c2NoZWR1bGVOb3RpZmljYXRpb24odCl7aWYoITA9PT10aGlzLmVycm9yZWQpcmV0dXJuO2NvbnN0IGU9dGhpcy5zY2hlZHVsZXIsbj1uZXcgQ2UoZS5ub3coKSt0aGlzLmRlbGF5LHQpO3RoaXMucXVldWUucHVzaChuKSwhMT09PXRoaXMuYWN0aXZlJiZ0aGlzLl9zY2hlZHVsZShlKX1fbmV4dCh0KXt0aGlzLnNjaGVkdWxlTm90aWZpY2F0aW9uKFEuY3JlYXRlTmV4dCh0KSl9X2Vycm9yKHQpe3RoaXMuZXJyb3JlZD0hMCx0aGlzLnF1ZXVlPVtdLHRoaXMuZGVzdGluYXRpb24uZXJyb3IodCksdGhpcy51bnN1YnNjcmliZSgpfV9jb21wbGV0ZSgpezA9PT10aGlzLnF1ZXVlLmxlbmd0aCYmdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpLHRoaXMudW5zdWJzY3JpYmUoKX19Y2xhc3MgQ2V7Y29uc3RydWN0b3IodCxlKXt0aGlzLnRpbWU9dCx0aGlzLm5vdGlmaWNhdGlvbj1lfX1jbGFzcyBNZXtjb25zdHJ1Y3Rvcih0KXt0aGlzLmRlbGF5RHVyYXRpb25TZWxlY3Rvcj10fWNhbGwodCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IHZlKHQsdGhpcy5kZWxheUR1cmF0aW9uU2VsZWN0b3IpKX19Y2xhc3MgdmUgZXh0ZW5kcyBfdHtjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQpLHRoaXMuZGVsYXlEdXJhdGlvblNlbGVjdG9yPWUsdGhpcy5jb21wbGV0ZWQ9ITEsdGhpcy5kZWxheU5vdGlmaWVyU3Vic2NyaXB0aW9ucz1bXSx0aGlzLmluZGV4PTB9bm90aWZ5TmV4dCh0LGUsbixvLGkpe3RoaXMuZGVzdGluYXRpb24ubmV4dCh0KSx0aGlzLnJlbW92ZVN1YnNjcmlwdGlvbihpKSx0aGlzLnRyeUNvbXBsZXRlKCl9bm90aWZ5RXJyb3IodCxlKXt0aGlzLl9lcnJvcih0KX1ub3RpZnlDb21wbGV0ZSh0KXtjb25zdCBlPXRoaXMucmVtb3ZlU3Vic2NyaXB0aW9uKHQpO2UmJnRoaXMuZGVzdGluYXRpb24ubmV4dChlKSx0aGlzLnRyeUNvbXBsZXRlKCl9X25leHQodCl7Y29uc3QgZT10aGlzLmluZGV4Kys7dHJ5e2NvbnN0IG49dGhpcy5kZWxheUR1cmF0aW9uU2VsZWN0b3IodCxlKTtuJiZ0aGlzLnRyeURlbGF5KG4sdCl9Y2F0Y2godCl7dGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX19X2NvbXBsZXRlKCl7dGhpcy5jb21wbGV0ZWQ9ITAsdGhpcy50cnlDb21wbGV0ZSgpLHRoaXMudW5zdWJzY3JpYmUoKX1yZW1vdmVTdWJzY3JpcHRpb24odCl7dC51bnN1YnNjcmliZSgpO2NvbnN0IGU9dGhpcy5kZWxheU5vdGlmaWVyU3Vic2NyaXB0aW9ucy5pbmRleE9mKHQpO3JldHVybi0xIT09ZSYmdGhpcy5kZWxheU5vdGlmaWVyU3Vic2NyaXB0aW9ucy5zcGxpY2UoZSwxKSx0Lm91dGVyVmFsdWV9dHJ5RGVsYXkodCxlKXtjb25zdCBuPWt0KHRoaXMsdCxlKTtuJiYhbi5jbG9zZWQmJih0aGlzLmRlc3RpbmF0aW9uLmFkZChuKSx0aGlzLmRlbGF5Tm90aWZpZXJTdWJzY3JpcHRpb25zLnB1c2gobikpfXRyeUNvbXBsZXRlKCl7dGhpcy5jb21wbGV0ZWQmJjA9PT10aGlzLmRlbGF5Tm90aWZpZXJTdWJzY3JpcHRpb25zLmxlbmd0aCYmdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpfX1jbGFzcyB4ZSBleHRlbmRzIHl7Y29uc3RydWN0b3IodCxlKXtzdXBlcigpLHRoaXMuc291cmNlPXQsdGhpcy5zdWJzY3JpcHRpb25EZWxheT1lfV9zdWJzY3JpYmUodCl7dGhpcy5zdWJzY3JpcHRpb25EZWxheS5zdWJzY3JpYmUobmV3IE9lKHQsdGhpcy5zb3VyY2UpKX19Y2xhc3MgT2UgZXh0ZW5kcyBwe2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIoKSx0aGlzLnBhcmVudD10LHRoaXMuc291cmNlPWUsdGhpcy5zb3VyY2VTdWJzY3JpYmVkPSExfV9uZXh0KHQpe3RoaXMuc3Vic2NyaWJlVG9Tb3VyY2UoKX1fZXJyb3IodCl7dGhpcy51bnN1YnNjcmliZSgpLHRoaXMucGFyZW50LmVycm9yKHQpfV9jb21wbGV0ZSgpe3RoaXMudW5zdWJzY3JpYmUoKSx0aGlzLnN1YnNjcmliZVRvU291cmNlKCl9c3Vic2NyaWJlVG9Tb3VyY2UoKXt0aGlzLnNvdXJjZVN1YnNjcmliZWR8fCh0aGlzLnNvdXJjZVN1YnNjcmliZWQ9ITAsdGhpcy51bnN1YnNjcmliZSgpLHRoaXMuc291cmNlLnN1YnNjcmliZSh0aGlzLnBhcmVudCkpfX1jbGFzcyBQZXtjYWxsKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyB3ZSh0KSl9fWNsYXNzIHdlIGV4dGVuZHMgcHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1fbmV4dCh0KXt0Lm9ic2VydmUodGhpcy5kZXN0aW5hdGlvbil9fWZ1bmN0aW9uIGtlKHQsZSl7cmV0dXJuIG49Pm4ubGlmdChuZXcgU2UodCxlKSl9Y2xhc3MgU2V7Y29uc3RydWN0b3IodCxlKXt0aGlzLmNvbXBhcmU9dCx0aGlzLmtleVNlbGVjdG9yPWV9Y2FsbCh0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgRGUodCx0aGlzLmNvbXBhcmUsdGhpcy5rZXlTZWxlY3RvcikpfX1jbGFzcyBEZSBleHRlbmRzIHB7Y29uc3RydWN0b3IodCxlLG4pe3N1cGVyKHQpLHRoaXMua2V5U2VsZWN0b3I9bix0aGlzLmhhc0tleT0hMSwiZnVuY3Rpb24iPT10eXBlb2YgZSYmKHRoaXMuY29tcGFyZT1lKX1jb21wYXJlKHQsZSl7cmV0dXJuIHQ9PT1lfV9uZXh0KHQpe2xldCBlO3RyeXtjb25zdHtrZXlTZWxlY3RvcjpufT10aGlzO2U9bj9uKHQpOnR9Y2F0Y2godCl7cmV0dXJuIHRoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9bGV0IG49ITE7aWYodGhpcy5oYXNLZXkpdHJ5e2NvbnN0e2NvbXBhcmU6dH09dGhpcztuPXQodGhpcy5rZXksZSl9Y2F0Y2godCl7cmV0dXJuIHRoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9ZWxzZSB0aGlzLmhhc0tleT0hMDtufHwodGhpcy5rZXk9ZSx0aGlzLmRlc3RpbmF0aW9uLm5leHQodCkpfX1mdW5jdGlvbiBFZSh0PVRlKXtyZXR1cm4gZT0+ZS5saWZ0KG5ldyBBZSh0KSl9Y2xhc3MgQWV7Y29uc3RydWN0b3IodCl7dGhpcy5lcnJvckZhY3Rvcnk9dH1jYWxsKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyBSZSh0LHRoaXMuZXJyb3JGYWN0b3J5KSl9fWNsYXNzIFJlIGV4dGVuZHMgcHtjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQpLHRoaXMuZXJyb3JGYWN0b3J5PWUsdGhpcy5oYXNWYWx1ZT0hMX1fbmV4dCh0KXt0aGlzLmhhc1ZhbHVlPSEwLHRoaXMuZGVzdGluYXRpb24ubmV4dCh0KX1fY29tcGxldGUoKXtpZih0aGlzLmhhc1ZhbHVlKXJldHVybiB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7e2xldCB0O3RyeXt0PXRoaXMuZXJyb3JGYWN0b3J5KCl9Y2F0Y2goZSl7dD1lfXRoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9fX1mdW5jdGlvbiBUZSgpe3JldHVybiBuZXcgZnR9ZnVuY3Rpb24gTmUodCl7cmV0dXJuIGU9PjA9PT10P1U6ZS5saWZ0KG5ldyBJZSh0KSl9Y2xhc3MgSWV7Y29uc3RydWN0b3IodCl7aWYodGhpcy50b3RhbD10LHRoaXMudG90YWw8MCl0aHJvdyBuZXcgZ3R9Y2FsbCh0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgemUodCx0aGlzLnRvdGFsKSl9fWNsYXNzIHplIGV4dGVuZHMgcHtjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQpLHRoaXMudG90YWw9ZSx0aGlzLmNvdW50PTB9X25leHQodCl7Y29uc3QgZT10aGlzLnRvdGFsLG49Kyt0aGlzLmNvdW50O248PWUmJih0aGlzLmRlc3RpbmF0aW9uLm5leHQodCksbj09PWUmJih0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCksdGhpcy51bnN1YnNjcmliZSgpKSl9fWZ1bmN0aW9uIEhlKHQsZSl7cmV0dXJuIGU/bj0+bi5waXBlKEhlKCgobixvKT0+UnQodChuLG8pKS5waXBlKGh0KCgodCxpKT0+ZShuLHQsbyxpKSkpKSkpKTplPT5lLmxpZnQobmV3IEZlKHQpKX1jbGFzcyBGZXtjb25zdHJ1Y3Rvcih0KXt0aGlzLnByb2plY3Q9dH1jYWxsKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyBMZSh0LHRoaXMucHJvamVjdCkpfX1jbGFzcyBMZSBleHRlbmRzIF90e2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCksdGhpcy5wcm9qZWN0PWUsdGhpcy5oYXNTdWJzY3JpcHRpb249ITEsdGhpcy5oYXNDb21wbGV0ZWQ9ITEsdGhpcy5pbmRleD0wfV9uZXh0KHQpe3RoaXMuaGFzU3Vic2NyaXB0aW9ufHx0aGlzLnRyeU5leHQodCl9dHJ5TmV4dCh0KXtsZXQgZTtjb25zdCBuPXRoaXMuaW5kZXgrKzt0cnl7ZT10aGlzLnByb2plY3QodCxuKX1jYXRjaCh0KXtyZXR1cm4gdm9pZCB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKHQpfXRoaXMuaGFzU3Vic2NyaXB0aW9uPSEwLHRoaXMuX2lubmVyU3ViKGUsdCxuKX1faW5uZXJTdWIodCxlLG4pe2NvbnN0IG89bmV3IEN0KHRoaXMsZSxuKSxpPXRoaXMuZGVzdGluYXRpb247aS5hZGQobyk7Y29uc3QgYT1rdCh0aGlzLHQsdm9pZCAwLHZvaWQgMCxvKTthIT09byYmaS5hZGQoYSl9X2NvbXBsZXRlKCl7dGhpcy5oYXNDb21wbGV0ZWQ9ITAsdGhpcy5oYXNTdWJzY3JpcHRpb258fHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKSx0aGlzLnVuc3Vic2NyaWJlKCl9bm90aWZ5TmV4dCh0LGUsbixvLGkpe3RoaXMuZGVzdGluYXRpb24ubmV4dChlKX1ub3RpZnlFcnJvcih0KXt0aGlzLmRlc3RpbmF0aW9uLmVycm9yKHQpfW5vdGlmeUNvbXBsZXRlKHQpe3RoaXMuZGVzdGluYXRpb24ucmVtb3ZlKHQpLHRoaXMuaGFzU3Vic2NyaXB0aW9uPSExLHRoaXMuaGFzQ29tcGxldGVkJiZ0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCl9fWNsYXNzIEJle2NvbnN0cnVjdG9yKHQpe3RoaXMuY2FsbGJhY2s9dH1jYWxsKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyBWZSh0LHRoaXMuY2FsbGJhY2spKX19Y2xhc3MgVmUgZXh0ZW5kcyBwe2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCksdGhpcy5hZGQobmV3IGwoZSkpfX1jbGFzcyBqZXtjYWxsKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyBVZSh0KSl9fWNsYXNzIFVlIGV4dGVuZHMgcHtfbmV4dCh0KXt9fWZ1bmN0aW9uIFdlKHQpe3JldHVybiBmdW5jdGlvbiBlKG4pe3JldHVybiAwPT09dD9VOm4ubGlmdChuZXcgR2UodCkpfX1jbGFzcyBHZXtjb25zdHJ1Y3Rvcih0KXtpZih0aGlzLnRvdGFsPXQsdGhpcy50b3RhbDwwKXRocm93IG5ldyBndH1jYWxsKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyBZZSh0LHRoaXMudG90YWwpKX19Y2xhc3MgWWUgZXh0ZW5kcyBwe2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCksdGhpcy50b3RhbD1lLHRoaXMucmluZz1uZXcgQXJyYXksdGhpcy5jb3VudD0wfV9uZXh0KHQpe2NvbnN0IGU9dGhpcy5yaW5nLG49dGhpcy50b3RhbCxvPXRoaXMuY291bnQrKztlLmxlbmd0aDxuP2UucHVzaCh0KTplW28lbl09dH1fY29tcGxldGUoKXtjb25zdCB0PXRoaXMuZGVzdGluYXRpb247bGV0IGU9dGhpcy5jb3VudDtpZihlPjApe2NvbnN0IG49dGhpcy5jb3VudD49dGhpcy50b3RhbD90aGlzLnRvdGFsOnRoaXMuY291bnQsbz10aGlzLnJpbmc7Zm9yKGxldCBpPTA7aTxuO2krKyl7Y29uc3QgaT1lKyslbjt0Lm5leHQob1tpXSl9fXQuY29tcGxldGUoKX19Y2xhc3MgcWV7Y2FsbCh0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgWmUodCkpfX1jbGFzcyBaZSBleHRlbmRzIHB7Y29uc3RydWN0b3IodCl7c3VwZXIodCl9X25leHQodCl7dGhpcy5kZXN0aW5hdGlvbi5uZXh0KFEuY3JlYXRlTmV4dCh0KSl9X2Vycm9yKHQpe2NvbnN0IGU9dGhpcy5kZXN0aW5hdGlvbjtlLm5leHQoUS5jcmVhdGVFcnJvcih0KSksZS5jb21wbGV0ZSgpfV9jb21wbGV0ZSgpe2NvbnN0IHQ9dGhpcy5kZXN0aW5hdGlvbjt0Lm5leHQoUS5jcmVhdGVDb21wbGV0ZSgpKSx0LmNvbXBsZXRlKCl9fWNsYXNzIFhle2NvbnN0cnVjdG9yKHQsZSxuPSExKXt0aGlzLmFjY3VtdWxhdG9yPXQsdGhpcy5zZWVkPWUsdGhpcy5oYXNTZWVkPW59Y2FsbCh0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgS2UodCx0aGlzLmFjY3VtdWxhdG9yLHRoaXMuc2VlZCx0aGlzLmhhc1NlZWQpKX19Y2xhc3MgS2UgZXh0ZW5kcyBwe2NvbnN0cnVjdG9yKHQsZSxuLG8pe3N1cGVyKHQpLHRoaXMuYWNjdW11bGF0b3I9ZSx0aGlzLl9zdGF0ZT1uLHRoaXMuX2hhc1N0YXRlPW8sdGhpcy5pbmRleD0wfV9uZXh0KHQpe2NvbnN0e2Rlc3RpbmF0aW9uOmV9PXRoaXM7aWYodGhpcy5faGFzU3RhdGUpe2NvbnN0IG49dGhpcy5pbmRleCsrO2xldCBvO3RyeXtvPXRoaXMuYWNjdW11bGF0b3IodGhpcy5fc3RhdGUsdCxuKX1jYXRjaCh0KXtyZXR1cm4gdm9pZCBlLmVycm9yKHQpfXRoaXMuX3N0YXRlPW8sZS5uZXh0KG8pfWVsc2UgdGhpcy5fc3RhdGU9dCx0aGlzLl9oYXNTdGF0ZT0hMCxlLm5leHQodCl9fWNsYXNzIEple2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5zdWJqZWN0RmFjdG9yeT10LHRoaXMuc2VsZWN0b3I9ZX1jYWxsKHQsZSl7Y29uc3R7c2VsZWN0b3I6bn09dGhpcyxvPXRoaXMuc3ViamVjdEZhY3RvcnkoKSxpPW4obykuc3Vic2NyaWJlKHQpO3JldHVybiBpLmFkZChlLnN1YnNjcmliZShvKSksaX19Y2xhc3MgUWV7Y2FsbCh0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgJGUodCkpfX1jbGFzcyAkZSBleHRlbmRzIHB7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy5oYXNQcmV2PSExfV9uZXh0KHQpe2xldCBlO3RoaXMuaGFzUHJldj9lPVt0aGlzLnByZXYsdF06dGhpcy5oYXNQcmV2PSEwLHRoaXMucHJldj10LGUmJnRoaXMuZGVzdGluYXRpb24ubmV4dChlKX19Y2xhc3MgdG57Y29uc3RydWN0b3IodCl7dGhpcy5ub3RpZmllcj10fWNhbGwodCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IGVuKHQsdGhpcy5ub3RpZmllcixlKSl9fWNsYXNzIGVuIGV4dGVuZHMgX3R7Y29uc3RydWN0b3IodCxlLG4pe3N1cGVyKHQpLHRoaXMubm90aWZpZXI9ZSx0aGlzLnNvdXJjZT1uLHRoaXMubm90aWZpY2F0aW9ucz1udWxsLHRoaXMucmV0cmllcz1udWxsLHRoaXMucmV0cmllc1N1YnNjcmlwdGlvbj1udWxsLHRoaXMuc291cmNlSXNCZWluZ1N1YnNjcmliZWRUbz0hMH1ub3RpZnlOZXh0KHQsZSxuLG8saSl7dGhpcy5zb3VyY2VJc0JlaW5nU3Vic2NyaWJlZFRvPSEwLHRoaXMuc291cmNlLnN1YnNjcmliZSh0aGlzKX1ub3RpZnlDb21wbGV0ZSh0KXtpZighMT09PXRoaXMuc291cmNlSXNCZWluZ1N1YnNjcmliZWRUbylyZXR1cm4gc3VwZXIuY29tcGxldGUoKX1jb21wbGV0ZSgpe2lmKHRoaXMuc291cmNlSXNCZWluZ1N1YnNjcmliZWRUbz0hMSwhdGhpcy5pc1N0b3BwZWQpe2lmKHRoaXMucmV0cmllc3x8dGhpcy5zdWJzY3JpYmVUb1JldHJpZXMoKSwhdGhpcy5yZXRyaWVzU3Vic2NyaXB0aW9ufHx0aGlzLnJldHJpZXNTdWJzY3JpcHRpb24uY2xvc2VkKXJldHVybiBzdXBlci5jb21wbGV0ZSgpO3RoaXMuX3Vuc3Vic2NyaWJlQW5kUmVjeWNsZSgpLHRoaXMubm90aWZpY2F0aW9ucy5uZXh0KCl9fV91bnN1YnNjcmliZSgpe2NvbnN0e25vdGlmaWNhdGlvbnM6dCxyZXRyaWVzU3Vic2NyaXB0aW9uOmV9PXRoaXM7dCYmKHQudW5zdWJzY3JpYmUoKSx0aGlzLm5vdGlmaWNhdGlvbnM9bnVsbCksZSYmKGUudW5zdWJzY3JpYmUoKSx0aGlzLnJldHJpZXNTdWJzY3JpcHRpb249bnVsbCksdGhpcy5yZXRyaWVzPW51bGx9X3Vuc3Vic2NyaWJlQW5kUmVjeWNsZSgpe2NvbnN0e191bnN1YnNjcmliZTp0fT10aGlzO3JldHVybiB0aGlzLl91bnN1YnNjcmliZT1udWxsLHN1cGVyLl91bnN1YnNjcmliZUFuZFJlY3ljbGUoKSx0aGlzLl91bnN1YnNjcmliZT10LHRoaXN9c3Vic2NyaWJlVG9SZXRyaWVzKCl7bGV0IHQ7dGhpcy5ub3RpZmljYXRpb25zPW5ldyB4O3RyeXtjb25zdHtub3RpZmllcjplfT10aGlzO3Q9ZSh0aGlzLm5vdGlmaWNhdGlvbnMpfWNhdGNoKHQpe3JldHVybiBzdXBlci5jb21wbGV0ZSgpfXRoaXMucmV0cmllcz10LHRoaXMucmV0cmllc1N1YnNjcmlwdGlvbj1rdCh0aGlzLHQpfX1mdW5jdGlvbiBubigpe3JldHVybiBuZXcgeH1mdW5jdGlvbiBvbigpe3JldHVybiB0PT5QKCkoKGZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gZnVuY3Rpb24gZShvKXtsZXQgaTtpZihpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZnVuY3Rpb24gZSgpe3JldHVybiB0fSwiZnVuY3Rpb24iPT10eXBlb2YgbilyZXR1cm4gby5saWZ0KG5ldyBKZShpLG4pKTtjb25zdCBhPU9iamVjdC5jcmVhdGUobyxEKTtyZXR1cm4gYS5zb3VyY2U9byxhLnN1YmplY3RGYWN0b3J5PWksYX19KShubikodCkpfWZ1bmN0aW9uIGFuKHQsZSxuKXtsZXQgbztyZXR1cm4gbz10JiYib2JqZWN0Ij09dHlwZW9mIHQ/dDp7YnVmZmVyU2l6ZTp0LHdpbmRvd1RpbWU6ZSxyZWZDb3VudDohMSxzY2hlZHVsZXI6bn0sdD0+dC5saWZ0KChmdW5jdGlvbiBlKHtidWZmZXJTaXplOnQ9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLHdpbmRvd1RpbWU6bj1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkscmVmQ291bnQ6byxzY2hlZHVsZXI6aX0pe2xldCBhLHIscz0wLGw9ITEsYz0hMTtyZXR1cm4gZnVuY3Rpb24gZShkKXtzKyssYSYmIWx8fChsPSExLGE9bmV3IG50KHQsbixpKSxyPWQuc3Vic2NyaWJlKHtuZXh0KHQpe2EubmV4dCh0KX0sZXJyb3IodCl7bD0hMCxhLmVycm9yKHQpfSxjb21wbGV0ZSgpe2M9ITAscj12b2lkIDAsYS5jb21wbGV0ZSgpfX0pKTtjb25zdCBwPWEuc3Vic2NyaWJlKHRoaXMpO3RoaXMuYWRkKCgoKT0+e3MtLSxwLnVuc3Vic2NyaWJlKCksciYmIWMmJm8mJjA9PT1zJiYoci51bnN1YnNjcmliZSgpLHI9dm9pZCAwLGE9dm9pZCAwKX0pKX19KShvKSl9ZnVuY3Rpb24gcm4odCl7cmV0dXJuIGU9PmUubGlmdChuZXcgc24odCkpfWNsYXNzIHNue2NvbnN0cnVjdG9yKHQpe3RoaXMudG90YWw9dH1jYWxsKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyBsbih0LHRoaXMudG90YWwpKX19Y2xhc3MgbG4gZXh0ZW5kcyBwe2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCksdGhpcy50b3RhbD1lLHRoaXMuY291bnQ9MH1fbmV4dCh0KXsrK3RoaXMuY291bnQ+dGhpcy50b3RhbCYmdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHQpfX1mdW5jdGlvbiBjbiguLi50KXtjb25zdCBlPXRbdC5sZW5ndGgtMV07cmV0dXJuIFcoZSk/KHQucG9wKCksbj0+SHQodCxuLGUpKTplPT5IdCh0LGUpfWZ1bmN0aW9uIGRuKHQsZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGU/bj0+bi5waXBlKGRuKCgobixvKT0+UnQodChuLG8pKS5waXBlKGh0KCgodCxpKT0+ZShuLHQsbyxpKSkpKSkpKTplPT5lLmxpZnQobmV3IHBuKHQpKX1jbGFzcyBwbntjb25zdHJ1Y3Rvcih0KXt0aGlzLnByb2plY3Q9dH1jYWxsKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyBtbih0LHRoaXMucHJvamVjdCkpfX1jbGFzcyBtbiBleHRlbmRzIF90e2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCksdGhpcy5wcm9qZWN0PWUsdGhpcy5pbmRleD0wfV9uZXh0KHQpe2xldCBlO2NvbnN0IG49dGhpcy5pbmRleCsrO3RyeXtlPXRoaXMucHJvamVjdCh0LG4pfWNhdGNoKHQpe3JldHVybiB2b2lkIHRoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9dGhpcy5faW5uZXJTdWIoZSx0LG4pfV9pbm5lclN1Yih0LGUsbil7Y29uc3Qgbz10aGlzLmlubmVyU3Vic2NyaXB0aW9uO28mJm8udW5zdWJzY3JpYmUoKTtjb25zdCBpPW5ldyBDdCh0aGlzLGUsbiksYT10aGlzLmRlc3RpbmF0aW9uO2EuYWRkKGkpLHRoaXMuaW5uZXJTdWJzY3JpcHRpb249a3QodGhpcyx0LHZvaWQgMCx2b2lkIDAsaSksdGhpcy5pbm5lclN1YnNjcmlwdGlvbiE9PWkmJmEuYWRkKHRoaXMuaW5uZXJTdWJzY3JpcHRpb24pfV9jb21wbGV0ZSgpe2NvbnN0e2lubmVyU3Vic2NyaXB0aW9uOnR9PXRoaXM7dCYmIXQuY2xvc2VkfHxzdXBlci5fY29tcGxldGUoKSx0aGlzLnVuc3Vic2NyaWJlKCl9X3Vuc3Vic2NyaWJlKCl7dGhpcy5pbm5lclN1YnNjcmlwdGlvbj1udWxsfW5vdGlmeUNvbXBsZXRlKHQpe3RoaXMuZGVzdGluYXRpb24ucmVtb3ZlKHQpLHRoaXMuaW5uZXJTdWJzY3JpcHRpb249bnVsbCx0aGlzLmlzU3RvcHBlZCYmc3VwZXIuX2NvbXBsZXRlKCl9bm90aWZ5TmV4dCh0LGUsbixvLGkpe3RoaXMuZGVzdGluYXRpb24ubmV4dChlKX19ZnVuY3Rpb24gdW4odCl7cmV0dXJuIGU9PmUubGlmdChuZXcgZm4odCkpfWNsYXNzIGZue2NvbnN0cnVjdG9yKHQpe3RoaXMubm90aWZpZXI9dH1jYWxsKHQsZSl7Y29uc3Qgbj1uZXcgZ24odCksbz1rdChuLHRoaXMubm90aWZpZXIpO3JldHVybiBvJiYhbi5zZWVuVmFsdWU/KG4uYWRkKG8pLGUuc3Vic2NyaWJlKG4pKTpufX1jbGFzcyBnbiBleHRlbmRzIF90e2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpLHRoaXMuc2VlblZhbHVlPSExfW5vdGlmeU5leHQodCxlLG4sbyxpKXt0aGlzLnNlZW5WYWx1ZT0hMCx0aGlzLmNvbXBsZXRlKCl9bm90aWZ5Q29tcGxldGUoKXt9fWZ1bmN0aW9uIGhuKHQsZT0hMSl7cmV0dXJuIG49Pm4ubGlmdChuZXcgYm4odCxlKSl9Y2xhc3MgYm57Y29uc3RydWN0b3IodCxlKXt0aGlzLnByZWRpY2F0ZT10LHRoaXMuaW5jbHVzaXZlPWV9Y2FsbCh0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgeW4odCx0aGlzLnByZWRpY2F0ZSx0aGlzLmluY2x1c2l2ZSkpfX1jbGFzcyB5biBleHRlbmRzIHB7Y29uc3RydWN0b3IodCxlLG4pe3N1cGVyKHQpLHRoaXMucHJlZGljYXRlPWUsdGhpcy5pbmNsdXNpdmU9bix0aGlzLmluZGV4PTB9X25leHQodCl7Y29uc3QgZT10aGlzLmRlc3RpbmF0aW9uO2xldCBuO3RyeXtuPXRoaXMucHJlZGljYXRlKHQsdGhpcy5pbmRleCsrKX1jYXRjaCh0KXtyZXR1cm4gdm9pZCBlLmVycm9yKHQpfXRoaXMubmV4dE9yQ29tcGxldGUodCxuKX1uZXh0T3JDb21wbGV0ZSh0LGUpe2NvbnN0IG49dGhpcy5kZXN0aW5hdGlvbjtCb29sZWFuKGUpP24ubmV4dCh0KToodGhpcy5pbmNsdXNpdmUmJm4ubmV4dCh0KSxuLmNvbXBsZXRlKCkpfX1mdW5jdGlvbiBfbih0LGUsbil7cmV0dXJuIGZ1bmN0aW9uIG8oaSl7cmV0dXJuIGkubGlmdChuZXcgQ24odCxlLG4pKX19Y2xhc3MgQ257Y29uc3RydWN0b3IodCxlLG4pe3RoaXMubmV4dE9yT2JzZXJ2ZXI9dCx0aGlzLmVycm9yPWUsdGhpcy5jb21wbGV0ZT1ufWNhbGwodCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IE1uKHQsdGhpcy5uZXh0T3JPYnNlcnZlcix0aGlzLmVycm9yLHRoaXMuY29tcGxldGUpKX19Y2xhc3MgTW4gZXh0ZW5kcyBwe2NvbnN0cnVjdG9yKGUsbixvLGkpe3N1cGVyKGUpLHRoaXMuX3RhcE5leHQ9bXQsdGhpcy5fdGFwRXJyb3I9bXQsdGhpcy5fdGFwQ29tcGxldGU9bXQsdGhpcy5fdGFwRXJyb3I9b3x8bXQsdGhpcy5fdGFwQ29tcGxldGU9aXx8bXQsdChuKT8odGhpcy5fY29udGV4dD10aGlzLHRoaXMuX3RhcE5leHQ9bik6biYmKHRoaXMuX2NvbnRleHQ9bix0aGlzLl90YXBOZXh0PW4ubmV4dHx8bXQsdGhpcy5fdGFwRXJyb3I9bi5lcnJvcnx8bXQsdGhpcy5fdGFwQ29tcGxldGU9bi5jb21wbGV0ZXx8bXQpfV9uZXh0KHQpe3RyeXt0aGlzLl90YXBOZXh0LmNhbGwodGhpcy5fY29udGV4dCx0KX1jYXRjaCh0KXtyZXR1cm4gdm9pZCB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKHQpfXRoaXMuZGVzdGluYXRpb24ubmV4dCh0KX1fZXJyb3IodCl7dHJ5e3RoaXMuX3RhcEVycm9yLmNhbGwodGhpcy5fY29udGV4dCx0KX1jYXRjaCh0KXtyZXR1cm4gdm9pZCB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKHQpfXRoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9X2NvbXBsZXRlKCl7dHJ5e3RoaXMuX3RhcENvbXBsZXRlLmNhbGwodGhpcy5fY29udGV4dCl9Y2F0Y2godCl7cmV0dXJuIHZvaWQgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX1yZXR1cm4gdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpfX1jb25zdCB2bj17bGVhZGluZzohMCx0cmFpbGluZzohMX07ZnVuY3Rpb24geG4odCxlPWR0LG49dm4pe3JldHVybiBvPT5vLmxpZnQobmV3IE9uKHQsZSwhIW4ubGVhZGluZywhIW4udHJhaWxpbmcpKX1jbGFzcyBPbntjb25zdHJ1Y3Rvcih0LGUsbixvKXt0aGlzLmR1cmF0aW9uPXQsdGhpcy5zY2hlZHVsZXI9ZSx0aGlzLmxlYWRpbmc9bix0aGlzLnRyYWlsaW5nPW99Y2FsbCh0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgUG4odCx0aGlzLmR1cmF0aW9uLHRoaXMuc2NoZWR1bGVyLHRoaXMubGVhZGluZyx0aGlzLnRyYWlsaW5nKSl9fWNsYXNzIFBuIGV4dGVuZHMgcHtjb25zdHJ1Y3Rvcih0LGUsbixvLGkpe3N1cGVyKHQpLHRoaXMuZHVyYXRpb249ZSx0aGlzLnNjaGVkdWxlcj1uLHRoaXMubGVhZGluZz1vLHRoaXMudHJhaWxpbmc9aSx0aGlzLnRocm90dGxlZD1udWxsLHRoaXMuX2hhc1RyYWlsaW5nVmFsdWU9ITEsdGhpcy5fdHJhaWxpbmdWYWx1ZT1udWxsfV9uZXh0KHQpe3RoaXMudGhyb3R0bGVkP3RoaXMudHJhaWxpbmcmJih0aGlzLl90cmFpbGluZ1ZhbHVlPXQsdGhpcy5faGFzVHJhaWxpbmdWYWx1ZT0hMCk6KHRoaXMuYWRkKHRoaXMudGhyb3R0bGVkPXRoaXMuc2NoZWR1bGVyLnNjaGVkdWxlKHduLHRoaXMuZHVyYXRpb24se3N1YnNjcmliZXI6dGhpc30pKSx0aGlzLmxlYWRpbmc/dGhpcy5kZXN0aW5hdGlvbi5uZXh0KHQpOnRoaXMudHJhaWxpbmcmJih0aGlzLl90cmFpbGluZ1ZhbHVlPXQsdGhpcy5faGFzVHJhaWxpbmdWYWx1ZT0hMCkpfV9jb21wbGV0ZSgpe3RoaXMuX2hhc1RyYWlsaW5nVmFsdWU/KHRoaXMuZGVzdGluYXRpb24ubmV4dCh0aGlzLl90cmFpbGluZ1ZhbHVlKSx0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCkpOnRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKX1jbGVhclRocm90dGxlKCl7Y29uc3QgdD10aGlzLnRocm90dGxlZDt0JiYodGhpcy50cmFpbGluZyYmdGhpcy5faGFzVHJhaWxpbmdWYWx1ZSYmKHRoaXMuZGVzdGluYXRpb24ubmV4dCh0aGlzLl90cmFpbGluZ1ZhbHVlKSx0aGlzLl90cmFpbGluZ1ZhbHVlPW51bGwsdGhpcy5faGFzVHJhaWxpbmdWYWx1ZT0hMSksdC51bnN1YnNjcmliZSgpLHRoaXMucmVtb3ZlKHQpLHRoaXMudGhyb3R0bGVkPW51bGwpfX1mdW5jdGlvbiB3bih0KXtjb25zdHtzdWJzY3JpYmVyOmV9PXQ7ZS5jbGVhclRocm90dGxlKCl9ZnVuY3Rpb24ga24oLi4udCl7cmV0dXJuIGU9PntsZXQgbjtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdFt0Lmxlbmd0aC0xXSYmKG49dC5wb3AoKSksZS5saWZ0KG5ldyBTbih0LG4pKX19Y2xhc3MgU257Y29uc3RydWN0b3IodCxlKXt0aGlzLm9ic2VydmFibGVzPXQsdGhpcy5wcm9qZWN0PWV9Y2FsbCh0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgRG4odCx0aGlzLm9ic2VydmFibGVzLHRoaXMucHJvamVjdCkpfX1jbGFzcyBEbiBleHRlbmRzIF90e2NvbnN0cnVjdG9yKHQsZSxuKXtzdXBlcih0KSx0aGlzLm9ic2VydmFibGVzPWUsdGhpcy5wcm9qZWN0PW4sdGhpcy50b1Jlc3BvbmQ9W107Y29uc3Qgbz1lLmxlbmd0aDt0aGlzLnZhbHVlcz1uZXcgQXJyYXkobyk7Zm9yKGxldCB0PTA7dDxvO3QrKyl0aGlzLnRvUmVzcG9uZC5wdXNoKHQpO2ZvcihsZXQgdD0wO3Q8bzt0Kyspe2xldCBuPWVbdF07dGhpcy5hZGQoa3QodGhpcyxuLG4sdCkpfX1ub3RpZnlOZXh0KHQsZSxuLG8saSl7dGhpcy52YWx1ZXNbbl09ZTtjb25zdCBhPXRoaXMudG9SZXNwb25kO2lmKGEubGVuZ3RoPjApe2NvbnN0IHQ9YS5pbmRleE9mKG4pOy0xIT09dCYmYS5zcGxpY2UodCwxKX19bm90aWZ5Q29tcGxldGUoKXt9X25leHQodCl7aWYoMD09PXRoaXMudG9SZXNwb25kLmxlbmd0aCl7Y29uc3QgZT1bdCwuLi50aGlzLnZhbHVlc107dGhpcy5wcm9qZWN0P3RoaXMuX3RyeVByb2plY3QoZSk6dGhpcy5kZXN0aW5hdGlvbi5uZXh0KGUpfX1fdHJ5UHJvamVjdCh0KXtsZXQgZTt0cnl7ZT10aGlzLnByb2plY3QuYXBwbHkodGhpcyx0KX1jYXRjaCh0KXtyZXR1cm4gdm9pZCB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKHQpfXRoaXMuZGVzdGluYXRpb24ubmV4dChlKX19Ci8qKgogICAgICogQGxpY2Vuc2UgQW5ndWxhciB2MTEuMi4xNAogICAgICogKGMpIDIwMTAtMjAyMSBHb29nbGUgTExDLiBodHRwczovL2FuZ3VsYXIuaW8vCiAgICAgKiBMaWNlbnNlOiBNSVQKICAgICAqLwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiBFbih0KXtmb3IobGV0IGUgaW4gdClpZih0W2VdPT09RW4pcmV0dXJuIGU7dGhyb3cgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIHJlbmFtZWQgcHJvcGVydHkgb24gdGFyZ2V0IG9iamVjdC4iKX1mdW5jdGlvbiBBbih0LGUpe2Zvcihjb25zdCBuIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShuKSYmIXQuaGFzT3duUHJvcGVydHkobikmJih0W25dPWVbbl0pfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiBSbih0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIHQ7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4iWyIrdC5tYXAoUm4pLmpvaW4oIiwgIikrIl0iO2lmKG51bGw9PXQpcmV0dXJuIiIrdDtpZih0Lm92ZXJyaWRkZW5OYW1lKXJldHVybmAke3Qub3ZlcnJpZGRlbk5hbWV9YDtpZih0Lm5hbWUpcmV0dXJuYCR7dC5uYW1lfWA7Y29uc3QgZT10LnRvU3RyaW5nKCk7aWYobnVsbD09ZSlyZXR1cm4iIitlO2NvbnN0IG49ZS5pbmRleE9mKCJcbiIpO3JldHVybi0xPT09bj9lOmUuc3Vic3RyaW5nKDAsbil9ZnVuY3Rpb24gVG4odCxlKXtyZXR1cm4gbnVsbD09dHx8IiI9PT10P251bGw9PT1lPyIiOmU6bnVsbD09ZXx8IiI9PT1lP3Q6dCsiICIrZX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY29uc3QgTm49RW4oe19fZm9yd2FyZF9yZWZfXzpFbn0pO2Z1bmN0aW9uIEluKHQpe3JldHVybiB0Ll9fZm9yd2FyZF9yZWZfXz1Jbix0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIFJuKHRoaXMoKSl9LHR9ZnVuY3Rpb24gem4odCl7cmV0dXJuIEhuKHQpP3QoKTp0fWZ1bmN0aW9uIEhuKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0JiZ0Lmhhc093blByb3BlcnR5KE5uKSYmdC5fX2ZvcndhcmRfcmVmX189PT1Jbn0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY2xhc3MgRm4gZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKEJuKHQsZSkpLHRoaXMuY29kZT10fX1jb25zdCBMbj1uZXcgU2V0KFsiMTAwIiwiMjAwIiwiMjAxIiwiMzAwIiwiMzAxIiwiMzAyIl0pO2Z1bmN0aW9uIEJuKHQsZSl7bGV0IG49YCR7dD9gTkcwJHt0fTogYDoiIn0ke2V9YDtyZXR1cm4gbmdEZXZNb2RlJiZMbi5oYXModCkmJihuPWAke259LiBGaW5kIG1vcmUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2Vycm9ycy9ORzAke3R9YCksbn0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovZnVuY3Rpb24gVm4odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P3Q6bnVsbD09dD8iIjpTdHJpbmcodCl9ZnVuY3Rpb24gam4odCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/dC5uYW1lfHx0LnRvU3RyaW5nKCk6Im9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT10JiYiZnVuY3Rpb24iPT10eXBlb2YgdC50eXBlP3QudHlwZS5uYW1lfHx0LnR5cGUudG9TdHJpbmcoKTpWbih0KX1mdW5jdGlvbiBVbih0LGUpe2NvbnN0IG49ZT9gLiBEZXBlbmRlbmN5IHBhdGg6ICR7ZS5qb2luKCIgPiAiKX0gPiAke3R9YDoiIjt0aHJvdyBuZXcgRm4oIjIwMCIsYENpcmN1bGFyIGRlcGVuZGVuY3kgaW4gREkgZGV0ZWN0ZWQgZm9yICR7dH0ke259YCl9ZnVuY3Rpb24gV24oKXt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBtaXggbXVsdGkgcHJvdmlkZXJzIGFuZCByZWd1bGFyIHByb3ZpZGVycyIpfWZ1bmN0aW9uIEduKHQsZSl7Y29uc3Qgbj1lP2AgaW4gJHtlfWA6IiI7dGhyb3cgbmV3IEZuKCIyMDEiLGBObyBwcm92aWRlciBmb3IgJHtqbih0KX0gZm91bmQke259YCl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIFluKHQsZSl7Im51bWJlciIhPXR5cGVvZiB0JiZpbyhlLHR5cGVvZiB0LCJudW1iZXIiLCI9PT0iKX1mdW5jdGlvbiBxbih0LGUsbil7WW4odCwiRXhwZWN0ZWQgYSBudW1iZXIiKSx0byh0LG4sIkV4cGVjdGVkIG51bWJlciB0byBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8iKSxubyh0LGUsIkV4cGVjdGVkIG51bWJlciB0byBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8iKX1mdW5jdGlvbiBabih0LGUpeyJzdHJpbmciIT10eXBlb2YgdCYmaW8oZSxudWxsPT09dD8ibnVsbCI6dHlwZW9mIHQsInN0cmluZyIsIj09PSIpfWZ1bmN0aW9uIFhuKHQsZSxuKXt0IT1lJiZpbyhuLHQsZSwiPT0iKX1mdW5jdGlvbiBLbih0LGUsbil7dD09ZSYmaW8obix0LGUsIiE9Iil9ZnVuY3Rpb24gSm4odCxlLG4pe3QhPT1lJiZpbyhuLHQsZSwiPT09Iil9ZnVuY3Rpb24gUW4odCxlLG4pe3Q9PT1lJiZpbyhuLHQsZSwiIT09Iil9ZnVuY3Rpb24gJG4odCxlLG4pe3Q8ZXx8aW8obix0LGUsIjwiKX1mdW5jdGlvbiB0byh0LGUsbil7dDw9ZXx8aW8obix0LGUsIjw9Iil9ZnVuY3Rpb24gZW8odCxlLG4pe3Q+ZXx8aW8obix0LGUsIj4iKX1mdW5jdGlvbiBubyh0LGUsbil7dD49ZXx8aW8obix0LGUsIj49Iil9ZnVuY3Rpb24gb28odCxlKXtudWxsPT10JiZpbyhlLHQsbnVsbCwiIT0iKX1mdW5jdGlvbiBpbyh0LGUsbixvKXt0aHJvdyBuZXcgRXJyb3IoYEFTU0VSVElPTiBFUlJPUjogJHt0fWArKG51bGw9PW8/IiI6YCBbRXhwZWN0ZWQ9PiAke259ICR7b30gJHtlfSA8PUFjdHVhbF1gKSl9ZnVuY3Rpb24gYW8odCl7InVuZGVmaW5lZCIhPXR5cGVvZiBOb2RlJiZ0IGluc3RhbmNlb2YgTm9kZXx8Im9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT10JiYiV2ViV29ya2VyUmVuZGVyTm9kZSI9PT10LmNvbnN0cnVjdG9yLm5hbWV8fGlvKGBUaGUgcHJvdmlkZWQgdmFsdWUgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBhIERPTSBOb2RlIGJ1dCBnb3QgJHtSbih0KX1gKX1mdW5jdGlvbiBybyh0LGUpe29vKHQsIkFycmF5IG11c3QgYmUgZGVmaW5lZC4iKTtjb25zdCBuPXQubGVuZ3RoOyhlPDB8fGU+PW4pJiZpbyhgSW5kZXggZXhwZWN0ZWQgdG8gYmUgbGVzcyB0aGFuICR7bn0gYnV0IGdvdCAke2V9YCl9ZnVuY3Rpb24gc28odCwuLi5lKXtpZigtMSE9PWUuaW5kZXhPZih0KSlyZXR1cm4hMDtpbyhgRXhwZWN0ZWQgdmFsdWUgdG8gYmUgb25lIG9mICR7SlNPTi5zdHJpbmdpZnkoZSl9IGJ1dCB3YXMgJHtKU09OLnN0cmluZ2lmeSh0KX0uYCl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIGxvKHQpe3JldHVybnt0b2tlbjp0LnRva2VuLHByb3ZpZGVkSW46dC5wcm92aWRlZElufHxudWxsLGZhY3Rvcnk6dC5mYWN0b3J5LHZhbHVlOnZvaWQgMH19ZnVuY3Rpb24gY28odCl7cmV0dXJue3Byb3ZpZGVyczp0LnByb3ZpZGVyc3x8W10saW1wb3J0czp0LmltcG9ydHN8fFtdfX1mdW5jdGlvbiBwbyh0KXtyZXR1cm4gbW8odCxmbyl8fG1vKHQsaG8pfWZ1bmN0aW9uIG1vKHQsZSl7cmV0dXJuIHQuaGFzT3duUHJvcGVydHkoZSk/dFtlXTpudWxsfWZ1bmN0aW9uIHVvKHQpe3JldHVybiB0JiYodC5oYXNPd25Qcm9wZXJ0eShnbyl8fHQuaGFzT3duUHJvcGVydHkoYm8pKT90W2dvXTpudWxsfWNvbnN0IGZvPUVuKHsiybVwcm92IjpFbn0pLGdvPUVuKHsiybVpbmoiOkVufSksaG89RW4oe25nSW5qZWN0YWJsZURlZjpFbn0pLGJvPUVuKHtuZ0luamVjdG9yRGVmOkVufSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwp2YXIgeW87Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpsZXQgX287ZnVuY3Rpb24gQ28odCl7Y29uc3QgZT1fbztyZXR1cm4gX289dCxlfWZ1bmN0aW9uIE1vKHQsZSxuKXtjb25zdCBvPXBvKHQpO3JldHVybiBvJiYicm9vdCI9PW8ucHJvdmlkZWRJbj92b2lkIDA9PT1vLnZhbHVlP28udmFsdWU9by5mYWN0b3J5KCk6by52YWx1ZTpuJnlvLk9wdGlvbmFsP251bGw6dm9pZCAwIT09ZT9lOnZvaWQgR24oUm4odCksIkluamVjdG9yIil9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpmdW5jdGlvbiB2byh0KXtyZXR1cm57dG9TdHJpbmc6dH0udG9TdHJpbmcoKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovdmFyIHhvLE9vLFBvOyEoZnVuY3Rpb24odCl7dFt0LkRlZmF1bHQ9MF09IkRlZmF1bHQiLHRbdC5Ib3N0PTFdPSJIb3N0Iix0W3QuU2VsZj0yXT0iU2VsZiIsdFt0LlNraXBTZWxmPTRdPSJTa2lwU2VsZiIsdFt0Lk9wdGlvbmFsPThdPSJPcHRpb25hbCJ9KSh5b3x8KHlvPXt9KSksKGZ1bmN0aW9uKHQpe3RbdC5PblB1c2g9MF09Ik9uUHVzaCIsdFt0LkRlZmF1bHQ9MV09IkRlZmF1bHQifSkoeG98fCh4bz17fSkpLChmdW5jdGlvbih0KXt0W3QuQ2hlY2tPbmNlPTBdPSJDaGVja09uY2UiLHRbdC5DaGVja2VkPTFdPSJDaGVja2VkIix0W3QuQ2hlY2tBbHdheXM9Ml09IkNoZWNrQWx3YXlzIix0W3QuRGV0YWNoZWQ9M109IkRldGFjaGVkIix0W3QuRXJyb3JlZD00XT0iRXJyb3JlZCIsdFt0LkRlc3Ryb3llZD01XT0iRGVzdHJveWVkIn0pKE9vfHwoT289e30pKSwoZnVuY3Rpb24odCl7dFt0LkVtdWxhdGVkPTBdPSJFbXVsYXRlZCIsdFt0Lk5vbmU9Ml09Ik5vbmUiLHRbdC5TaGFkb3dEb209M109IlNoYWRvd0RvbSJ9KShQb3x8KFBvPXt9KSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCB3bz0idW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbFRoaXMmJmdsb2JhbFRoaXMsa289InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvdyxTbz0idW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYmJiJ1bmRlZmluZWQiIT10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSYmc2VsZixEbz0idW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbCYmZ2xvYmFsLEVvPXdvfHxEb3x8a298fFNvO2Z1bmN0aW9uIEFvKCl7cmV0dXJuISgidW5kZWZpbmVkIiE9dHlwZW9mIG5nRGV2TW9kZSYmIW5nRGV2TW9kZXx8KCJvYmplY3QiIT10eXBlb2YgbmdEZXZNb2RlJiYoCi8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpmdW5jdGlvbiB0KCl7Y29uc3QgdD0idW5kZWZpbmVkIiE9dHlwZW9mIGxvY2F0aW9uP2xvY2F0aW9uLnRvU3RyaW5nKCk6IiIsZT17bmFtZWRDb25zdHJ1Y3RvcnM6LTEhPXQuaW5kZXhPZigibmdEZXZNb2RlPW5hbWVkQ29uc3RydWN0b3JzIiksZmlyc3RDcmVhdGVQYXNzOjAsdE5vZGU6MCx0VmlldzowLHJlbmRlcmVyQ3JlYXRlVGV4dE5vZGU6MCxyZW5kZXJlclNldFRleHQ6MCxyZW5kZXJlckNyZWF0ZUVsZW1lbnQ6MCxyZW5kZXJlckFkZEV2ZW50TGlzdGVuZXI6MCxyZW5kZXJlclNldEF0dHJpYnV0ZTowLHJlbmRlcmVyUmVtb3ZlQXR0cmlidXRlOjAscmVuZGVyZXJTZXRQcm9wZXJ0eTowLHJlbmRlcmVyU2V0Q2xhc3NOYW1lOjAscmVuZGVyZXJBZGRDbGFzczowLHJlbmRlcmVyUmVtb3ZlQ2xhc3M6MCxyZW5kZXJlclNldFN0eWxlOjAscmVuZGVyZXJSZW1vdmVTdHlsZTowLHJlbmRlcmVyRGVzdHJveTowLHJlbmRlcmVyRGVzdHJveU5vZGU6MCxyZW5kZXJlck1vdmVOb2RlOjAscmVuZGVyZXJSZW1vdmVOb2RlOjAscmVuZGVyZXJBcHBlbmRDaGlsZDowLHJlbmRlcmVySW5zZXJ0QmVmb3JlOjAscmVuZGVyZXJDcmVhdGVDb21tZW50OjB9LG49LTE9PT10LmluZGV4T2YoIm5nRGV2TW9kZT1mYWxzZSIpO0VvLm5nRGV2TW9kZT1uJiZlfSkoKSwidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8IW5nRGV2TW9kZSkpfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jb25zdCBSbz17fSxUbz1bXTsoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJkFvKCkmJihPYmplY3QuZnJlZXplKFJvKSxPYmplY3QuZnJlZXplKFRvKSkKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovO2NvbnN0IE5vPVtdOygidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmQW8oKSYmT2JqZWN0LmZyZWV6ZShObykKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovO2NvbnN0IElvPUVuKHsiybVjbXAiOkVufSksem89RW4oeyLJtWRpciI6RW59KSxIbz1Fbih7Ism1cGlwZSI6RW59KSxGbz1Fbih7Ism1bW9kIjpFbn0pLExvPUVuKHsiybVsb2MiOkVufSksQm89RW4oeyLJtWZhYyI6RW59KSxWbz1Fbih7X19OR19FTEVNRU5UX0lEX186RW59KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmxldCBqbz0wO2Z1bmN0aW9uIFVvKHQpe3JldHVybiB2bygoKCk9PnsoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJkFvKCk7Y29uc3QgZT17fSxuPXt0eXBlOnQudHlwZSxwcm92aWRlcnNSZXNvbHZlcjpudWxsLGRlY2xzOnQuZGVjbHMsdmFyczp0LnZhcnMsZmFjdG9yeTpudWxsLHRlbXBsYXRlOnQudGVtcGxhdGV8fG51bGwsY29uc3RzOnQuY29uc3RzfHxudWxsLG5nQ29udGVudFNlbGVjdG9yczp0Lm5nQ29udGVudFNlbGVjdG9ycyxob3N0QmluZGluZ3M6dC5ob3N0QmluZGluZ3N8fG51bGwsaG9zdFZhcnM6dC5ob3N0VmFyc3x8MCxob3N0QXR0cnM6dC5ob3N0QXR0cnN8fG51bGwsY29udGVudFF1ZXJpZXM6dC5jb250ZW50UXVlcmllc3x8bnVsbCxkZWNsYXJlZElucHV0czplLGlucHV0czpudWxsLG91dHB1dHM6bnVsbCxleHBvcnRBczp0LmV4cG9ydEFzfHxudWxsLG9uUHVzaDp0LmNoYW5nZURldGVjdGlvbj09PXhvLk9uUHVzaCxkaXJlY3RpdmVEZWZzOm51bGwscGlwZURlZnM6bnVsbCxzZWxlY3RvcnM6dC5zZWxlY3RvcnN8fE5vLHZpZXdRdWVyeTp0LnZpZXdRdWVyeXx8bnVsbCxmZWF0dXJlczp0LmZlYXR1cmVzfHxudWxsLGRhdGE6dC5kYXRhfHx7fSxlbmNhcHN1bGF0aW9uOnQuZW5jYXBzdWxhdGlvbnx8UG8uRW11bGF0ZWQsaWQ6ImMiLHN0eWxlczp0LnN0eWxlc3x8Tm8sXzpudWxsLHNldElucHV0Om51bGwsc2NoZW1hczp0LnNjaGVtYXN8fG51bGwsdFZpZXc6bnVsbH0sbz10LmRpcmVjdGl2ZXMsaT10LmZlYXR1cmVzLGE9dC5waXBlcztyZXR1cm4gbi5pZCs9am8rKyxuLmlucHV0cz1Lbyh0LmlucHV0cyxlKSxuLm91dHB1dHM9S28odC5vdXRwdXRzKSxpJiZpLmZvckVhY2goKHQ9PnQobikpKSxuLmRpcmVjdGl2ZURlZnM9bz8oKT0+KCJmdW5jdGlvbiI9PXR5cGVvZiBvP28oKTpvKS5tYXAoR28pOm51bGwsbi5waXBlRGVmcz1hPygpPT4oImZ1bmN0aW9uIj09dHlwZW9mIGE/YSgpOmEpLm1hcChZbyk6bnVsbCxufSkpfWZ1bmN0aW9uIFdvKHQsZSxuKXtjb25zdCBvPXQuybVjbXA7by5kaXJlY3RpdmVEZWZzPSgpPT5lLm1hcChHbyksby5waXBlRGVmcz0oKT0+bi5tYXAoWW8pfWZ1bmN0aW9uIEdvKHQpe2NvbnN0IGU9JG8odCl8fHRpKHQpO2lmKG5nRGV2TW9kZSYmIWUpdGhyb3cgbmV3IEVycm9yKGAnJHt0Lm5hbWV9JyBpcyBuZWl0aGVyICdDb21wb25lbnRUeXBlJyBvciAnRGlyZWN0aXZlVHlwZScuYCk7cmV0dXJuIGV9ZnVuY3Rpb24gWW8odCl7Y29uc3QgZT1laSh0KTtpZihuZ0Rldk1vZGUmJiFlKXRocm93IG5ldyBFcnJvcihgJyR7dC5uYW1lfScgaXMgbm90IGEgJ1BpcGVUeXBlJy5gKTtyZXR1cm4gZX1jb25zdCBxbz17fTtmdW5jdGlvbiBabyh0KXtjb25zdCBlPXt0eXBlOnQudHlwZSxib290c3RyYXA6dC5ib290c3RyYXB8fE5vLGRlY2xhcmF0aW9uczp0LmRlY2xhcmF0aW9uc3x8Tm8saW1wb3J0czp0LmltcG9ydHN8fE5vLGV4cG9ydHM6dC5leHBvcnRzfHxObyx0cmFuc2l0aXZlQ29tcGlsZVNjb3BlczpudWxsLHNjaGVtYXM6dC5zY2hlbWFzfHxudWxsLGlkOnQuaWR8fG51bGx9O3JldHVybiBudWxsIT10LmlkJiZ2bygoKCk9Pntxb1t0LmlkXT10LnR5cGV9KSksZX1mdW5jdGlvbiBYbyh0LGUpe3JldHVybiB2bygoKCk9Pntjb25zdCBuPW5pKHQsITApO24uZGVjbGFyYXRpb25zPWUuZGVjbGFyYXRpb25zfHxObyxuLmltcG9ydHM9ZS5pbXBvcnRzfHxObyxuLmV4cG9ydHM9ZS5leHBvcnRzfHxOb30pKX1mdW5jdGlvbiBLbyh0LGUpe2lmKG51bGw9PXQpcmV0dXJuIFJvO2NvbnN0IG49e307Zm9yKGNvbnN0IG8gaW4gdClpZih0Lmhhc093blByb3BlcnR5KG8pKXtsZXQgaT10W29dLGE9aTtBcnJheS5pc0FycmF5KGkpJiYoYT1pWzFdLGk9aVswXSksbltpXT1vLGUmJihlW2ldPWEpfXJldHVybiBufWNvbnN0IEpvPVVvO2Z1bmN0aW9uIFFvKHQpe3JldHVybnt0eXBlOnQudHlwZSxuYW1lOnQubmFtZSxmYWN0b3J5Om51bGwscHVyZTohMSE9PXQucHVyZSxvbkRlc3Ryb3k6dC50eXBlLnByb3RvdHlwZS5uZ09uRGVzdHJveXx8bnVsbH19ZnVuY3Rpb24gJG8odCl7cmV0dXJuIHRbSW9dfHxudWxsfWZ1bmN0aW9uIHRpKHQpe3JldHVybiB0W3pvXXx8bnVsbH1mdW5jdGlvbiBlaSh0KXtyZXR1cm4gdFtIb118fG51bGx9ZnVuY3Rpb24gbmkodCxlKXtjb25zdCBuPXRbRm9dfHxudWxsO2lmKCFuJiYhMD09PWUpdGhyb3cgbmV3IEVycm9yKGBUeXBlICR7Um4odCl9IGRvZXMgbm90IGhhdmUgJ8m1bW9kJyBwcm9wZXJ0eS5gKTtyZXR1cm4gbn0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IG9pPTIwLGlpPVsiUm9vdCIsIkNvbXBvbmVudCIsIkVtYmVkZGVkIl0sYWk9MTA7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpmdW5jdGlvbiByaSh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KSYmIm9iamVjdCI9PXR5cGVvZiB0WzFdfWZ1bmN0aW9uIHNpKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpJiYhMD09PXRbMV19ZnVuY3Rpb24gbGkodCl7cmV0dXJuIDAhPSg4JnQuZmxhZ3MpfWZ1bmN0aW9uIGNpKHQpe3JldHVybiAyPT0oMiZ0LmZsYWdzKX1mdW5jdGlvbiBkaSh0KXtyZXR1cm4gMT09KDEmdC5mbGFncyl9ZnVuY3Rpb24gcGkodCl7cmV0dXJuIG51bGwhPT10LnRlbXBsYXRlfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KZnVuY3Rpb24gbWkodCxlKXt1aSh0LGVbMV0pfWZ1bmN0aW9uIHVpKHQsZSl7ZmkodCksdC5oYXNPd25Qcm9wZXJ0eSgidFZpZXdfIikmJlhuKHQudFZpZXdfLGUsIlRoaXMgVE5vZGUgZG9lcyBub3QgYmVsb25nIHRvIHRoaXMgVFZpZXcuIil9ZnVuY3Rpb24gZmkodCl7b28odCwiVE5vZGUgbXVzdCBiZSBkZWZpbmVkIiksdCYmIm9iamVjdCI9PXR5cGVvZiB0JiZ0Lmhhc093blByb3BlcnR5KCJkaXJlY3RpdmVTdHlsaW5nTGFzdCIpfHxpbygiTm90IG9mIHR5cGUgVE5vZGUsIGdvdDogIit0KX1mdW5jdGlvbiBnaSh0KXtvbyh0LCJFeHBlY3RlZCBUSWN1IHRvIGJlIGRlZmluZWQiKSwibnVtYmVyIiE9dHlwZW9mIHQuY3VycmVudENhc2VMVmlld0luZGV4JiZpbygiT2JqZWN0IGlzIG5vdCBvZiBUSWN1IHR5cGUuIil9ZnVuY3Rpb24gaGkodCl7b28odCwiY3VycmVudFROb2RlIHNob3VsZCBleGlzdCEiKSxvbyh0LnBhcmVudCwiY3VycmVudFROb2RlIHNob3VsZCBoYXZlIGEgcGFyZW50Iil9ZnVuY3Rpb24gYmkodCl7b28odCwiTENvbnRhaW5lciBtdXN0IGJlIGRlZmluZWQiKSxYbihzaSh0KSwhMCwiRXhwZWN0aW5nIExDb250YWluZXIiKX1mdW5jdGlvbiB5aSh0KXt0JiZYbihyaSh0KSwhMCwiRXhwZWN0aW5nIExWaWV3IG9yIHVuZGVmaW5lZCBvciBudWxsIil9ZnVuY3Rpb24gX2kodCl7b28odCwiTFZpZXcgbXVzdCBiZSBkZWZpbmVkIiksWG4ocmkodCksITAsIkV4cGVjdGluZyBMVmlldyIpfWZ1bmN0aW9uIENpKHQsZSl7WG4odC5maXJzdENyZWF0ZVBhc3MsITAsZXx8IlNob3VsZCBvbmx5IGJlIGNhbGxlZCBpbiBmaXJzdCBjcmVhdGUgcGFzcy4iKX1mdW5jdGlvbiBNaSh0LGUpe1huKHQuZmlyc3RVcGRhdGVQYXNzLCEwLGV8fCJTaG91bGQgb25seSBiZSBjYWxsZWQgaW4gZmlyc3QgdXBkYXRlIHBhc3MuIil9ZnVuY3Rpb24gdmkodCxlKXt4aSh0WzFdLmV4cGFuZG9TdGFydEluZGV4LHQubGVuZ3RoLGUpfWZ1bmN0aW9uIHhpKHQsZSxuKXt0PD1uJiZuPGV8fGlvKGBJbmRleCBvdXQgb2YgcmFuZ2UgKGV4cGVjdGluZyAke3R9IDw9ICR7bn0gPCAke2V9KWApfWZ1bmN0aW9uIE9pKHQsZSl7b28odCxlfHwiQ29tcG9uZW50IHZpZXdzIHNob3VsZCBhbHdheXMgaGF2ZSBhIHBhcmVudCB2aWV3IChjb21wb25lbnQncyBob3N0IHZpZXcpIil9ZnVuY3Rpb24gUGkodCxlKXt2aSh0LGUpLHZpKHQsZSs4KSxZbih0W2UrMF0sImluamVjdG9ySW5kZXggc2hvdWxkIHBvaW50IHRvIGEgYmxvb20gZmlsdGVyIiksWW4odFtlKzFdLCJpbmplY3RvckluZGV4IHNob3VsZCBwb2ludCB0byBhIGJsb29tIGZpbHRlciIpLFluKHRbZSsyXSwiaW5qZWN0b3JJbmRleCBzaG91bGQgcG9pbnQgdG8gYSBibG9vbSBmaWx0ZXIiKSxZbih0W2UrM10sImluamVjdG9ySW5kZXggc2hvdWxkIHBvaW50IHRvIGEgYmxvb20gZmlsdGVyIiksWW4odFtlKzRdLCJpbmplY3RvckluZGV4IHNob3VsZCBwb2ludCB0byBhIGJsb29tIGZpbHRlciIpLFluKHRbZSs1XSwiaW5qZWN0b3JJbmRleCBzaG91bGQgcG9pbnQgdG8gYSBibG9vbSBmaWx0ZXIiKSxZbih0W2UrNl0sImluamVjdG9ySW5kZXggc2hvdWxkIHBvaW50IHRvIGEgYmxvb20gZmlsdGVyIiksWW4odFtlKzddLCJpbmplY3RvckluZGV4IHNob3VsZCBwb2ludCB0byBhIGJsb29tIGZpbHRlciIpLFluKHRbZSs4XSwiaW5qZWN0b3JJbmRleCBzaG91bGQgcG9pbnQgdG8gcGFyZW50IGluamVjdG9yIil9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIHdpKHQsZSl7Y29uc3Qgbj10Lmhhc093blByb3BlcnR5KEJvKTtpZighbiYmITA9PT1lJiZuZ0Rldk1vZGUpdGhyb3cgbmV3IEVycm9yKGBUeXBlICR7Um4odCl9IGRvZXMgbm90IGhhdmUgJ8m1ZmFjJyBwcm9wZXJ0eS5gKTtyZXR1cm4gbj90W0JvXTpudWxsfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jbGFzcyBraXtjb25zdHJ1Y3Rvcih0LGUsbil7dGhpcy5wcmV2aW91c1ZhbHVlPXQsdGhpcy5jdXJyZW50VmFsdWU9ZSx0aGlzLmZpcnN0Q2hhbmdlPW59aXNGaXJzdENoYW5nZSgpe3JldHVybiB0aGlzLmZpcnN0Q2hhbmdlfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovZnVuY3Rpb24gU2koKXtyZXR1cm4gRGl9ZnVuY3Rpb24gRGkodCl7cmV0dXJuIHQudHlwZS5wcm90b3R5cGUubmdPbkNoYW5nZXMmJih0LnNldElucHV0PUFpKSxFaX1mdW5jdGlvbiBFaSgpe2NvbnN0IHQ9UmkodGhpcyksZT1udWxsPT10P3ZvaWQgMDp0LmN1cnJlbnQ7aWYoZSl7Y29uc3Qgbj10LnByZXZpb3VzO2lmKG49PT1Sbyl0LnByZXZpb3VzPWU7ZWxzZSBmb3IobGV0IHQgaW4gZSluW3RdPWVbdF07dC5jdXJyZW50PW51bGwsdGhpcy5uZ09uQ2hhbmdlcyhlKX19ZnVuY3Rpb24gQWkodCxlLG4sbyl7Y29uc3QgaT1SaSh0KXx8KGZ1bmN0aW9uIGEodCxlKXtyZXR1cm4gdC5fX25nU2ltcGxlQ2hhbmdlc19fPWV9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLykodCx7cHJldmlvdXM6Um8sY3VycmVudDpudWxsfSkscj1pLmN1cnJlbnR8fChpLmN1cnJlbnQ9e30pLHM9aS5wcmV2aW91cyxsPXRoaXMuZGVjbGFyZWRJbnB1dHNbbl0sYz1zW2xdO3JbbF09bmV3IGtpKGMmJmMuY3VycmVudFZhbHVlLGUscz09PVJvKSx0W29dPWV9ZnVuY3Rpb24gUmkodCl7cmV0dXJuIHQuX19uZ1NpbXBsZUNoYW5nZXNfX3x8bnVsbH1TaS5uZ0luaGVyaXQ9ITA7bGV0IFRpPW51bGw7Y29uc3QgTmk9dD0+e1RpPXR9LElpPWZ1bmN0aW9uKHQsZSxuKXtudWxsIT1UaSYmVGkodCxlLG4pfSx6aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLEhpPSJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGhNTC8iOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KbGV0IEZpO2Z1bmN0aW9uIExpKCl7cmV0dXJuIHZvaWQgMCE9PUZpP0ZpOiJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQ/ZG9jdW1lbnQ6dm9pZCAwfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi92YXIgQmk7ZnVuY3Rpb24gVmkodCl7cmV0dXJuISF0Lmxpc3Rlbn0hKGZ1bmN0aW9uKHQpe3RbdC5JbXBvcnRhbnQ9MV09IkltcG9ydGFudCIsdFt0LkRhc2hDYXNlPTJdPSJEYXNoQ2FzZSJ9KShCaXx8KEJpPXt9KSk7Y29uc3Qgamk9e2NyZWF0ZVJlbmRlcmVyOih0LGUpPT5MaSgpfTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmZ1bmN0aW9uIFVpKHQpe2Zvcig7QXJyYXkuaXNBcnJheSh0KTspdD10WzBdO3JldHVybiB0fWZ1bmN0aW9uIFdpKHQsZSl7cmV0dXJuIG5nRGV2TW9kZSYmcm8oZSx0KSxuZ0Rldk1vZGUmJm5vKHQsb2ksIkV4cGVjdGVkIHRvIGJlIHBhc3QgSEVBREVSX09GRlNFVCIpLFVpKGVbdF0pfWZ1bmN0aW9uIEdpKHQsZSl7bmdEZXZNb2RlJiZtaSh0LGUpLG5nRGV2TW9kZSYmcm8oZSx0LmluZGV4KTtjb25zdCBuPVVpKGVbdC5pbmRleF0pO3JldHVybiBuZ0Rldk1vZGUmJiFWaShlWzExXSkmJmFvKG4pLG59ZnVuY3Rpb24gWWkodCxlKXtuZ0Rldk1vZGUmJmVvKGUsLTEsIndyb25nIGluZGV4IGZvciBUTm9kZSIpLG5nRGV2TW9kZSYmJG4oZSx0LmRhdGEubGVuZ3RoLCJ3cm9uZyBpbmRleCBmb3IgVE5vZGUiKTtjb25zdCBuPXQuZGF0YVtlXTtyZXR1cm4gbmdEZXZNb2RlJiZudWxsIT09biYmZmkobiksbn1mdW5jdGlvbiBxaSh0LGUpe3JldHVybiBuZ0Rldk1vZGUmJnJvKHQsZSksdFtlXX1mdW5jdGlvbiBaaSh0LGUpe25nRGV2TW9kZSYmcm8oZSx0KTtjb25zdCBuPWVbdF07cmV0dXJuIHJpKG4pP246blswXX1mdW5jdGlvbiBYaSh0KXtyZXR1cm4gbmdEZXZNb2RlJiZvbyh0LCJUYXJnZXQgZXhwZWN0ZWQiKSx0Ll9fbmdDb250ZXh0X198fG51bGx9ZnVuY3Rpb24gS2kodCl7Y29uc3QgZT1YaSh0KTtyZXR1cm4gZT9BcnJheS5pc0FycmF5KGUpP2U6ZS5sVmlldzpudWxsfWZ1bmN0aW9uIEppKHQpe3JldHVybiA0PT0oNCZ0WzJdKX1mdW5jdGlvbiBRaSh0KXtyZXR1cm4gMTI4PT0oMTI4JnRbMl0pfWZ1bmN0aW9uICRpKHQsZSl7cmV0dXJuIG51bGw9PWU/bnVsbDoobmdEZXZNb2RlJiZybyh0LGUpLHRbZV0pfWZ1bmN0aW9uIHRhKHQpe3RbMThdPTB9ZnVuY3Rpb24gZWEodCxlKXt0WzVdKz1lO2xldCBuPXQsbz10WzNdO2Zvcig7bnVsbCE9PW8mJigxPT09ZSYmMT09PW5bNV18fC0xPT09ZSYmMD09PW5bNV0pOylvWzVdKz1lLG49byxvPW9bM119Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NvbnN0IG5hPXtsRnJhbWU6RWEobnVsbCksYmluZGluZ3NFbmFibGVkOiEwLGlzSW5DaGVja05vQ2hhbmdlc01vZGU6ITF9O2Z1bmN0aW9uIG9hKCl7cmV0dXJuIG5hLmJpbmRpbmdzRW5hYmxlZH1mdW5jdGlvbiBpYSgpe3JldHVybiBuYS5sRnJhbWUubFZpZXd9ZnVuY3Rpb24gYWEoKXtyZXR1cm4gbmEubEZyYW1lLnRWaWV3fWZ1bmN0aW9uIHJhKHQpe25hLmxGcmFtZS5jb250ZXh0TFZpZXc9dH1mdW5jdGlvbiBzYSgpe2xldCB0PWxhKCk7Zm9yKDtudWxsIT09dCYmNjQ9PT10LnR5cGU7KXQ9dC5wYXJlbnQ7cmV0dXJuIHR9ZnVuY3Rpb24gbGEoKXtyZXR1cm4gbmEubEZyYW1lLmN1cnJlbnRUTm9kZX1mdW5jdGlvbiBjYSgpe2NvbnN0IHQ9bmEubEZyYW1lLGU9dC5jdXJyZW50VE5vZGU7cmV0dXJuIHQuaXNQYXJlbnQ/ZTplLnBhcmVudH1mdW5jdGlvbiBkYSh0LGUpe25nRGV2TW9kZSYmdCYmdWkodCxuYS5sRnJhbWUudFZpZXcpO2NvbnN0IG49bmEubEZyYW1lO24uY3VycmVudFROb2RlPXQsbi5pc1BhcmVudD1lfWZ1bmN0aW9uIHBhKCl7cmV0dXJuIG5hLmxGcmFtZS5pc1BhcmVudH1mdW5jdGlvbiBtYSgpe25hLmxGcmFtZS5pc1BhcmVudD0hMX1mdW5jdGlvbiB1YSgpe3JldHVybiBuYS5pc0luQ2hlY2tOb0NoYW5nZXNNb2RlfWZ1bmN0aW9uIGZhKHQpe25hLmlzSW5DaGVja05vQ2hhbmdlc01vZGU9dH1mdW5jdGlvbiBnYSgpe2NvbnN0IHQ9bmEubEZyYW1lO2xldCBlPXQuYmluZGluZ1Jvb3RJbmRleDtyZXR1cm4tMT09PWUmJihlPXQuYmluZGluZ1Jvb3RJbmRleD10LnRWaWV3LmJpbmRpbmdTdGFydEluZGV4KSxlfWZ1bmN0aW9uIGhhKCl7cmV0dXJuIG5hLmxGcmFtZS5iaW5kaW5nSW5kZXh9ZnVuY3Rpb24gYmEodCl7cmV0dXJuIG5hLmxGcmFtZS5iaW5kaW5nSW5kZXg9dH1mdW5jdGlvbiB5YSgpe3JldHVybiBuYS5sRnJhbWUuYmluZGluZ0luZGV4Kyt9ZnVuY3Rpb24gX2EodCl7Y29uc3QgZT1uYS5sRnJhbWUsbj1lLmJpbmRpbmdJbmRleDtyZXR1cm4gZS5iaW5kaW5nSW5kZXg9ZS5iaW5kaW5nSW5kZXgrdCxufWZ1bmN0aW9uIENhKHQpe25hLmxGcmFtZS5pbkkxOG49dH1mdW5jdGlvbiBNYSh0LGUpe2NvbnN0IG49bmEubEZyYW1lO24uYmluZGluZ0luZGV4PW4uYmluZGluZ1Jvb3RJbmRleD10LHZhKGUpfWZ1bmN0aW9uIHZhKHQpe25hLmxGcmFtZS5jdXJyZW50RGlyZWN0aXZlSW5kZXg9dH1mdW5jdGlvbiB4YSh0KXtjb25zdCBlPW5hLmxGcmFtZS5jdXJyZW50RGlyZWN0aXZlSW5kZXg7cmV0dXJuLTE9PT1lP251bGw6dFtlXX1mdW5jdGlvbiBPYSgpe3JldHVybiBuYS5sRnJhbWUuY3VycmVudFF1ZXJ5SW5kZXh9ZnVuY3Rpb24gUGEodCl7bmEubEZyYW1lLmN1cnJlbnRRdWVyeUluZGV4PXR9ZnVuY3Rpb24gd2EodCl7Y29uc3QgZT10WzFdO3JldHVybiAyPT09ZS50eXBlPyhuZ0Rldk1vZGUmJm9vKGUuZGVjbFROb2RlLCJFbWJlZGRlZCBUTm9kZXMgc2hvdWxkIGhhdmUgZGVjbGFyYXRpb24gcGFyZW50cy4iKSxlLmRlY2xUTm9kZSk6MT09PWUudHlwZT90WzZdOm51bGx9ZnVuY3Rpb24ga2EodCxlLG4pe2lmKG5nRGV2TW9kZSYmeWkodCksbiZ5by5Ta2lwU2VsZil7bmdEZXZNb2RlJiZ1aShlLHRbMV0pO2xldCBvPWUsaT10O2Zvcig7bmdEZXZNb2RlJiZvbyhvLCJQYXJlbnQgVE5vZGUgc2hvdWxkIGJlIGRlZmluZWQiKSxvPW8ucGFyZW50LCEobnVsbCE9PW98fG4meW8uSG9zdHx8KG89d2EoaSksbnVsbD09PW8pfHwobmdEZXZNb2RlJiZvbyhpLCJQYXJlbnQgTFZpZXcgc2hvdWxkIGJlIGRlZmluZWQiKSxpPWlbMTVdLDEwJm8udHlwZSkpOyk7aWYobnVsbD09PW8pcmV0dXJuITE7ZT1vLHQ9aX1uZ0Rldk1vZGUmJm1pKGUsdCk7Y29uc3Qgbz1uYS5sRnJhbWU9RGEoKTtyZXR1cm4gby5jdXJyZW50VE5vZGU9ZSxvLmxWaWV3PXQsITB9ZnVuY3Rpb24gU2EodCl7bmdEZXZNb2RlJiZLbih0WzBdLHRbMV0sIj8/Pz8iKSxuZ0Rldk1vZGUmJnlpKHQpO2NvbnN0IGU9RGEoKTtuZ0Rldk1vZGUmJihYbihlLmlzUGFyZW50LCEwLCJFeHBlY3RlZCBjbGVhbiBMRnJhbWUiKSxYbihlLmxWaWV3LG51bGwsIkV4cGVjdGVkIGNsZWFuIExGcmFtZSIpLFhuKGUudFZpZXcsbnVsbCwiRXhwZWN0ZWQgY2xlYW4gTEZyYW1lIiksWG4oZS5zZWxlY3RlZEluZGV4LC0xLCJFeHBlY3RlZCBjbGVhbiBMRnJhbWUiKSxYbihlLmVsZW1lbnREZXB0aENvdW50LDAsIkV4cGVjdGVkIGNsZWFuIExGcmFtZSIpLFhuKGUuY3VycmVudERpcmVjdGl2ZUluZGV4LC0xLCJFeHBlY3RlZCBjbGVhbiBMRnJhbWUiKSxYbihlLmN1cnJlbnROYW1lc3BhY2UsbnVsbCwiRXhwZWN0ZWQgY2xlYW4gTEZyYW1lIiksWG4oZS5iaW5kaW5nUm9vdEluZGV4LC0xLCJFeHBlY3RlZCBjbGVhbiBMRnJhbWUiKSxYbihlLmN1cnJlbnRRdWVyeUluZGV4LDAsIkV4cGVjdGVkIGNsZWFuIExGcmFtZSIpKTtjb25zdCBuPXRbMV07bmEubEZyYW1lPWUsbmdEZXZNb2RlJiZuLmZpcnN0Q2hpbGQmJnVpKG4uZmlyc3RDaGlsZCxuKSxlLmN1cnJlbnRUTm9kZT1uLmZpcnN0Q2hpbGQsZS5sVmlldz10LGUudFZpZXc9bixlLmNvbnRleHRMVmlldz10LGUuYmluZGluZ0luZGV4PW4uYmluZGluZ1N0YXJ0SW5kZXgsZS5pbkkxOG49ITF9ZnVuY3Rpb24gRGEoKXtjb25zdCB0PW5hLmxGcmFtZSxlPW51bGw9PT10P251bGw6dC5jaGlsZDtyZXR1cm4gbnVsbD09PWU/RWEodCk6ZX1mdW5jdGlvbiBFYSh0KXtjb25zdCBlPXtjdXJyZW50VE5vZGU6bnVsbCxpc1BhcmVudDohMCxsVmlldzpudWxsLHRWaWV3Om51bGwsc2VsZWN0ZWRJbmRleDotMSxjb250ZXh0TFZpZXc6bnVsbCxlbGVtZW50RGVwdGhDb3VudDowLGN1cnJlbnROYW1lc3BhY2U6bnVsbCxjdXJyZW50RGlyZWN0aXZlSW5kZXg6LTEsYmluZGluZ1Jvb3RJbmRleDotMSxiaW5kaW5nSW5kZXg6LTEsY3VycmVudFF1ZXJ5SW5kZXg6MCxwYXJlbnQ6dCxjaGlsZDpudWxsLGluSTE4bjohMX07cmV0dXJuIG51bGwhPT10JiYodC5jaGlsZD1lKSxlfWZ1bmN0aW9uIEFhKCl7Y29uc3QgdD1uYS5sRnJhbWU7cmV0dXJuIG5hLmxGcmFtZT10LnBhcmVudCx0LmN1cnJlbnRUTm9kZT1udWxsLHQubFZpZXc9bnVsbCx0fWNvbnN0IFJhPUFhO2Z1bmN0aW9uIFRhKCl7Y29uc3QgdD1BYSgpO3QuaXNQYXJlbnQ9ITAsdC50Vmlldz1udWxsLHQuc2VsZWN0ZWRJbmRleD0tMSx0LmNvbnRleHRMVmlldz1udWxsLHQuZWxlbWVudERlcHRoQ291bnQ9MCx0LmN1cnJlbnREaXJlY3RpdmVJbmRleD0tMSx0LmN1cnJlbnROYW1lc3BhY2U9bnVsbCx0LmJpbmRpbmdSb290SW5kZXg9LTEsdC5iaW5kaW5nSW5kZXg9LTEsdC5jdXJyZW50UXVlcnlJbmRleD0wfWZ1bmN0aW9uIE5hKCl7cmV0dXJuIG5hLmxGcmFtZS5zZWxlY3RlZEluZGV4fWZ1bmN0aW9uIElhKHQpe25nRGV2TW9kZSYmLTEhPT10JiZubyh0LG9pLCJJbmRleCBtdXN0IGJlIHBhc3QgSEVBREVSX09GRlNFVCAob3IgLTEpLiIpLG5nRGV2TW9kZSYmJG4odCxuYS5sRnJhbWUubFZpZXcubGVuZ3RoLCJDYW4ndCBzZXQgaW5kZXggcGFzc2VkIGVuZCBvZiBMVmlldyIpLG5hLmxGcmFtZS5zZWxlY3RlZEluZGV4PXR9ZnVuY3Rpb24gemEoKXtjb25zdCB0PW5hLmxGcmFtZTtyZXR1cm4gWWkodC50Vmlldyx0LnNlbGVjdGVkSW5kZXgpfWZ1bmN0aW9uIEhhKCl7bmEubEZyYW1lLmN1cnJlbnROYW1lc3BhY2U9eml9ZnVuY3Rpb24gRmEoKXshKGZ1bmN0aW9uIHQoKXtuYS5sRnJhbWUuY3VycmVudE5hbWVzcGFjZT1udWxsfSkoKX1mdW5jdGlvbiBMYSh0LGUpe25nRGV2TW9kZSYmQ2kodCk7Zm9yKGxldCBuPWUuZGlyZWN0aXZlU3RhcnQsbz1lLmRpcmVjdGl2ZUVuZDtuPG87bisrKXtjb25zdCBlPXQuZGF0YVtuXTtuZ0Rldk1vZGUmJm9vKGUsIkV4cGVjdGluZyBEaXJlY3RpdmVEZWYiKTtjb25zdCBvPWUudHlwZS5wcm90b3R5cGUse25nQWZ0ZXJDb250ZW50SW5pdDppLG5nQWZ0ZXJDb250ZW50Q2hlY2tlZDphLG5nQWZ0ZXJWaWV3SW5pdDpyLG5nQWZ0ZXJWaWV3Q2hlY2tlZDpzLG5nT25EZXN0cm95Omx9PW87aSYmKHQuY29udGVudEhvb2tzfHwodC5jb250ZW50SG9va3M9W10pKS5wdXNoKC1uLGkpLGEmJigodC5jb250ZW50SG9va3N8fCh0LmNvbnRlbnRIb29rcz1bXSkpLnB1c2gobixhKSwodC5jb250ZW50Q2hlY2tIb29rc3x8KHQuY29udGVudENoZWNrSG9va3M9W10pKS5wdXNoKG4sYSkpLHImJih0LnZpZXdIb29rc3x8KHQudmlld0hvb2tzPVtdKSkucHVzaCgtbixyKSxzJiYoKHQudmlld0hvb2tzfHwodC52aWV3SG9va3M9W10pKS5wdXNoKG4scyksKHQudmlld0NoZWNrSG9va3N8fCh0LnZpZXdDaGVja0hvb2tzPVtdKSkucHVzaChuLHMpKSxudWxsIT1sJiYodC5kZXN0cm95SG9va3N8fCh0LmRlc3Ryb3lIb29rcz1bXSkpLnB1c2gobixsKX19ZnVuY3Rpb24gQmEodCxlLG4pe1VhKHQsZSwzLG4pfWZ1bmN0aW9uIFZhKHQsZSxuLG8pe25nRGV2TW9kZSYmS24obiwzLCJJbml0IHByZS1vcmRlciBob29rcyBzaG91bGQgbm90IGJlIGNhbGxlZCBtb3JlIHRoYW4gb25jZSIpLCgzJnRbMl0pPT09biYmVWEodCxlLG4sbyl9ZnVuY3Rpb24gamEodCxlKXtuZ0Rldk1vZGUmJktuKGUsMywiSW5pdCBob29rcyBwaGFzZSBzaG91bGQgbm90IGJlIGluY3JlbWVudGVkIGFmdGVyIGFsbCBpbml0IGhvb2tzIGhhdmUgYmVlbiBydW4uIik7bGV0IG49dFsyXTsoMyZuKT09PWUmJihuJj0yMDQ3LG4rPTEsdFsyXT1uKX1mdW5jdGlvbiBVYSh0LGUsbixvKXtuZ0Rldk1vZGUmJlhuKHVhKCksITEsIkhvb2tzIHNob3VsZCBuZXZlciBiZSBydW4gd2hlbiBpbiBjaGVjayBubyBjaGFuZ2VzIG1vZGUuIik7Y29uc3QgaT1udWxsIT1vP286LTEsYT1lLmxlbmd0aC0xO2xldCByPTA7Zm9yKGxldCBzPXZvaWQgMCE9PW8/NjU1MzUmdFsxOF06MDtzPGE7cysrKWlmKCJudW1iZXIiPT10eXBlb2YgZVtzKzFdKXtpZihyPWVbc10sbnVsbCE9byYmcj49bylicmVha31lbHNlIGVbc108MCYmKHRbMThdKz02NTUzNiksKHI8aXx8LTE9PWkpJiYoV2EodCxuLGUscyksdFsxOF09KDQyOTQ5MDE3NjAmdFsxOF0pK3MrMikscysrfWZ1bmN0aW9uIFdhKHQsZSxuLG8pe2NvbnN0IGk9bltvXTwwLGE9bltvKzFdLHI9dFtpPy1uW29dOm5bb11dO2lmKGkpe2lmKHRbMl0+PjExPHRbMThdPj4xNiYmKDMmdFsyXSk9PT1lKXt0WzJdKz0yMDQ4LElpKDQscixhKTt0cnl7YS5jYWxsKHIpfWZpbmFsbHl7SWkoNSxyLGEpfX19ZWxzZXtJaSg0LHIsYSk7dHJ5e2EuY2FsbChyKX1maW5hbGx5e0lpKDUscixhKX19fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jb25zdCBHYT0tMTtjbGFzcyBZYXtjb25zdHJ1Y3Rvcih0LGUsbil7dGhpcy5mYWN0b3J5PXQsdGhpcy5yZXNvbHZpbmc9ITEsbmdEZXZNb2RlJiZvbyh0LCJGYWN0b3J5IG5vdCBzcGVjaWZpZWQiKSxuZ0Rldk1vZGUmJlhuKHR5cGVvZiB0LCJmdW5jdGlvbiIsIkV4cGVjdGVkIGZhY3RvcnkgZnVuY3Rpb24uIiksdGhpcy5jYW5TZWVWaWV3UHJvdmlkZXJzPWUsdGhpcy5pbmplY3RJbXBsPW59fWZ1bmN0aW9uIHFhKHQpe2xldCBlPSIiO3JldHVybiAxJnQmJihlKz0ifFRleHQiKSwyJnQmJihlKz0ifEVsZW1lbnQiKSw0JnQmJihlKz0ifENvbnRhaW5lciIpLDgmdCYmKGUrPSJ8RWxlbWVudENvbnRhaW5lciIpLDE2JnQmJihlKz0ifFByb2plY3Rpb24iKSwzMiZ0JiYoZSs9InxJY3VDb250YWluZXIiKSw2NCZ0JiYoZSs9InxQbGFjZWhvbGRlciIpLGUubGVuZ3RoPjA/ZS5zdWJzdHJpbmcoMSk6ZX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmZ1bmN0aW9uIFphKHQsZSxuKXtvbyh0LCJzaG91bGQgYmUgY2FsbGVkIHdpdGggYSBUTm9kZSIpLDA9PSh0LnR5cGUmZSkmJmlvKG58fGBFeHBlY3RlZCBbJHtxYShlKX1dIGJ1dCBnb3QgJHtxYSh0LnR5cGUpfS5gKX1mdW5jdGlvbiBYYSh0LGUsbil7Y29uc3Qgbz1WaSh0KTtsZXQgaT0wO2Zvcig7aTxuLmxlbmd0aDspe2NvbnN0IGE9bltpXTtpZigibnVtYmVyIj09dHlwZW9mIGEpe2lmKDAhPT1hKWJyZWFrO2krKztjb25zdCByPW5baSsrXSxzPW5baSsrXSxsPW5baSsrXTtuZ0Rldk1vZGUmJm5nRGV2TW9kZS5yZW5kZXJlclNldEF0dHJpYnV0ZSsrLG8/dC5zZXRBdHRyaWJ1dGUoZSxzLGwscik6ZS5zZXRBdHRyaWJ1dGVOUyhyLHMsbCl9ZWxzZXtjb25zdCByPWEscz1uWysraV07bmdEZXZNb2RlJiZuZ0Rldk1vZGUucmVuZGVyZXJTZXRBdHRyaWJ1dGUrKyxKYShyKT9vJiZ0LnNldFByb3BlcnR5KGUscixzKTpvP3Quc2V0QXR0cmlidXRlKGUscixzKTplLnNldEF0dHJpYnV0ZShyLHMpLGkrK319cmV0dXJuIGl9ZnVuY3Rpb24gS2EodCl7cmV0dXJuIDM9PT10fHw0PT09dHx8Nj09PXR9ZnVuY3Rpb24gSmEodCl7cmV0dXJuIDY0PT09dC5jaGFyQ29kZUF0KDApfWZ1bmN0aW9uIFFhKHQsZSl7aWYobnVsbD09PWV8fDA9PT1lLmxlbmd0aCk7ZWxzZSBpZihudWxsPT09dHx8MD09PXQubGVuZ3RoKXQ9ZS5zbGljZSgpO2Vsc2V7bGV0IG49LTE7Zm9yKGxldCBvPTA7bzxlLmxlbmd0aDtvKyspe2NvbnN0IGk9ZVtvXTsibnVtYmVyIj09dHlwZW9mIGk/bj1pOjA9PT1ufHwkYSh0LG4saSxudWxsLC0xPT09bnx8Mj09PW4/ZVsrK29dOm51bGwpfX1yZXR1cm4gdH1mdW5jdGlvbiAkYSh0LGUsbixvLGkpe2xldCBhPTAscj10Lmxlbmd0aDtpZigtMT09PWUpcj0tMTtlbHNlIGZvcig7YTx0Lmxlbmd0aDspe2NvbnN0IG49dFthKytdO2lmKCJudW1iZXIiPT10eXBlb2Ygbil7aWYobj09PWUpe3I9LTE7YnJlYWt9aWYobj5lKXtyPWEtMTticmVha319fWZvcig7YTx0Lmxlbmd0aDspe2NvbnN0IGU9dFthXTtpZigibnVtYmVyIj09dHlwZW9mIGUpYnJlYWs7aWYoZT09PW4pe2lmKG51bGw9PT1vKXJldHVybiB2b2lkKG51bGwhPT1pJiYodFthKzFdPWkpKTtpZihvPT09dFthKzFdKXJldHVybiB2b2lkKHRbYSsyXT1pKX1hKyssbnVsbCE9PW8mJmErKyxudWxsIT09aSYmYSsrfS0xIT09ciYmKHQuc3BsaWNlKHIsMCxlKSxhPXIrMSksdC5zcGxpY2UoYSsrLDAsbiksbnVsbCE9PW8mJnQuc3BsaWNlKGErKywwLG8pLG51bGwhPT1pJiZ0LnNwbGljZShhKyssMCxpKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovZnVuY3Rpb24gdHIodCl7cmV0dXJuIHQhPT1HYX1mdW5jdGlvbiBlcih0KXtyZXR1cm4gbmdEZXZNb2RlJiZZbih0LCJOdW1iZXIgZXhwZWN0ZWQiKSxuZ0Rldk1vZGUmJktuKHQsLTEsIk5vdCBhIHZhbGlkIHN0YXRlLiIpLG5nRGV2TW9kZSYmZW8oMzI3NjcmdCxvaSwiUGFyZW50IGluamVjdG9yIG11c3QgYmUgcG9pbnRpbmcgcGFzdCBIRUFERVJfT0ZGU0VULiIpLDMyNzY3JnR9ZnVuY3Rpb24gbnIodCxlKXtsZXQgbj0oZnVuY3Rpb24gbyh0KXtyZXR1cm4gdD4+MTZ9KSh0KSxpPWU7Zm9yKDtuPjA7KWk9aVsxNV0sbi0tO3JldHVybiBpfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9sZXQgb3I9ITA7ZnVuY3Rpb24gaXIodCl7Y29uc3QgZT1vcjtyZXR1cm4gb3I9dCxlfWxldCBhcj0wO2Z1bmN0aW9uIHJyKHQsZSl7Y29uc3Qgbj1scih0LGUpO2lmKC0xIT09bilyZXR1cm4gbjtjb25zdCBvPWVbMV07by5maXJzdENyZWF0ZVBhc3MmJih0LmluamVjdG9ySW5kZXg9ZS5sZW5ndGgsc3Ioby5kYXRhLHQpLHNyKGUsbnVsbCksc3Ioby5ibHVlcHJpbnQsbnVsbCkpO2NvbnN0IGk9Y3IodCxlKSxhPXQuaW5qZWN0b3JJbmRleDtpZih0cihpKSl7Y29uc3QgdD1lcihpKSxuPW5yKGksZSksbz1uWzFdLmRhdGE7Zm9yKGxldCBpPTA7aTw4O2krKyllW2EraV09blt0K2ldfG9bdCtpXX1yZXR1cm4gZVthKzhdPWksYX1mdW5jdGlvbiBzcih0LGUpe3QucHVzaCgwLDAsMCwwLDAsMCwwLDAsZSl9ZnVuY3Rpb24gbHIodCxlKXtyZXR1cm4tMT09PXQuaW5qZWN0b3JJbmRleHx8dC5wYXJlbnQmJnQucGFyZW50LmluamVjdG9ySW5kZXg9PT10LmluamVjdG9ySW5kZXh8fG51bGw9PT1lW3QuaW5qZWN0b3JJbmRleCs4XT8tMToobmdEZXZNb2RlJiZybyhlLHQuaW5qZWN0b3JJbmRleCksdC5pbmplY3RvckluZGV4KX1mdW5jdGlvbiBjcih0LGUpe2lmKHQucGFyZW50JiYtMSE9PXQucGFyZW50LmluamVjdG9ySW5kZXgpcmV0dXJuIHQucGFyZW50LmluamVjdG9ySW5kZXg7bGV0IG49MCxvPW51bGwsaT1lO2Zvcig7bnVsbCE9PWk7KXtjb25zdCB0PWlbMV0sZT10LnR5cGU7aWYoMj09PWU/KG5nRGV2TW9kZSYmb28odC5kZWNsVE5vZGUsIkVtYmVkZGVkIFROb2RlcyBzaG91bGQgaGF2ZSBkZWNsYXJhdGlvbiBwYXJlbnRzLiIpLG89dC5kZWNsVE5vZGUpOjE9PT1lP289aVs2XToobmdEZXZNb2RlJiZYbih0LnR5cGUsMCwiUm9vdCB0eXBlIGV4cGVjdGVkIiksbz1udWxsKSxudWxsPT09bylyZXR1cm4gR2E7aWYobmdEZXZNb2RlJiZvJiZtaShvLGlbMTVdKSxuKyssaT1pWzE1XSwtMSE9PW8uaW5qZWN0b3JJbmRleClyZXR1cm4gby5pbmplY3RvckluZGV4fG48PDE2fXJldHVybiBHYX1mdW5jdGlvbiBkcih0LGUsbil7IShmdW5jdGlvbiBvKHQsZSxuKXtsZXQgbztuZ0Rldk1vZGUmJlhuKGUuZmlyc3RDcmVhdGVQYXNzLCEwLCJleHBlY3RlZCBmaXJzdENyZWF0ZVBhc3MgdG8gYmUgdHJ1ZSIpLCJzdHJpbmciPT10eXBlb2Ygbj9vPW4uY2hhckNvZGVBdCgwKXx8MDpuLmhhc093blByb3BlcnR5KFZvKSYmKG89bltWb10pLG51bGw9PW8mJihvPW5bVm9dPWFyKyspO2NvbnN0IGk9MjU1Jm87ZS5kYXRhW3QrKGk+PjUpXXw9MTw8aX0pKHQsZSxuKX1mdW5jdGlvbiBwcih0LGUsbil7aWYobiZ5by5PcHRpb25hbClyZXR1cm4gdDtHbihlLCJOb2RlSW5qZWN0b3IiKX1mdW5jdGlvbiBtcih0LGUsbixvKXtpZihuJnlvLk9wdGlvbmFsJiZ2b2lkIDA9PT1vJiYobz1udWxsKSwwPT0obiYoeW8uU2VsZnx5by5Ib3N0KSkpe2NvbnN0IGk9dFs5XSxhPUNvKHZvaWQgMCk7dHJ5e3JldHVybiBpP2kuZ2V0KGUsbyxuJnlvLk9wdGlvbmFsKTpNbyhlLG8sbiZ5by5PcHRpb25hbCl9ZmluYWxseXtDbyhhKX19cmV0dXJuIHByKG8sZSxuKX1mdW5jdGlvbiB1cih0LGUsbixvPXlvLkRlZmF1bHQsaSl7aWYobnVsbCE9PXQpe2NvbnN0IGE9KGZ1bmN0aW9uIGEodCl7aWYobmdEZXZNb2RlJiZvbyh0LCJ0b2tlbiBtdXN0IGJlIGRlZmluZWQiKSwic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIHQuY2hhckNvZGVBdCgwKXx8MDtjb25zdCBlPXQuaGFzT3duUHJvcGVydHkoVm8pP3RbVm9dOnZvaWQgMDtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGU/ZT49MD8yNTUmZToobmdEZXZNb2RlJiZYbihlLC0xLCJFeHBlY3RpbmcgdG8gZ2V0IFNwZWNpYWwgSW5qZWN0b3IgSWQiKSxncik6ZX0pKG4pO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBhKXtpZigha2EoZSx0LG8pKXJldHVybiBvJnlvLkhvc3Q/cHIoaSxuLG8pOm1yKGUsbixvLGkpO3RyeXtjb25zdCB0PWEoKTtpZihudWxsIT10fHxvJnlvLk9wdGlvbmFsKXJldHVybiB0O0duKG4pfWZpbmFsbHl7UmEoKX19ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIGEpe2xldCBpPW51bGwscj1scih0LGUpLHM9R2EsbD1vJnlvLkhvc3Q/ZVsxNl1bNl06bnVsbDtmb3IoKC0xPT09cnx8byZ5by5Ta2lwU2VsZikmJihzPS0xPT09cj9jcih0LGUpOmVbcis4XSxzIT09R2EmJkNyKG8sITEpPyhpPWVbMV0scj1lcihzKSxlPW5yKHMsZSkpOnI9LTEpOy0xIT09cjspe25nRGV2TW9kZSYmUGkoZSxyKTtjb25zdCB0PWVbMV07aWYobmdEZXZNb2RlJiZtaSh0LmRhdGFbcis4XSxlKSxfcihhLHIsdC5kYXRhKSl7Y29uc3QgdD1ocihyLGUsbixpLG8sbCk7aWYodCE9PWZyKXJldHVybiB0fXM9ZVtyKzhdLHMhPT1HYSYmQ3IobyxlWzFdLmRhdGFbcis4XT09PWwpJiZfcihhLHIsZSk/KGk9dCxyPWVyKHMpLGU9bnIocyxlKSk6cj0tMX19fXJldHVybiBtcihlLG4sbyxpKX1jb25zdCBmcj17fTtmdW5jdGlvbiBncigpe3JldHVybiBuZXcgTXIoc2EoKSxpYSgpKX1mdW5jdGlvbiBocih0LGUsbixvLGksYSl7Y29uc3Qgcj1lWzFdLHM9ci5kYXRhW3QrOF0sbD1icihzLHIsbixudWxsPT1vP2NpKHMpJiZvcjpvIT1yJiYwIT0oMyZzLnR5cGUpLGkmeW8uSG9zdCYmYT09PXMpO3JldHVybiBudWxsIT09bD95cihlLHIsbCxzKTpmcn1mdW5jdGlvbiBicih0LGUsbixvLGkpe2NvbnN0IGE9dC5wcm92aWRlckluZGV4ZXMscj1lLmRhdGEscz0xMDQ4NTc1JmEsbD10LmRpcmVjdGl2ZVN0YXJ0LGM9YT4+MjAsZD1pP3MrYzp0LmRpcmVjdGl2ZUVuZDtmb3IobGV0IHQ9bz9zOnMrYzt0PGQ7dCsrKXtjb25zdCBlPXJbdF07aWYodDxsJiZuPT09ZXx8dD49bCYmZS50eXBlPT09bilyZXR1cm4gdH1pZihpKXtjb25zdCB0PXJbbF07aWYodCYmcGkodCkmJnQudHlwZT09PW4pcmV0dXJuIGx9cmV0dXJuIG51bGx9ZnVuY3Rpb24geXIodCxlLG4sbyl7bGV0IGk9dFtuXTtjb25zdCBhPWUuZGF0YTtpZigoZnVuY3Rpb24gcih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIFlhfSkoaSkpe2NvbnN0IHI9aTtyLnJlc29sdmluZyYmVW4oam4oYVtuXSkpO2NvbnN0IHM9aXIoci5jYW5TZWVWaWV3UHJvdmlkZXJzKTtyLnJlc29sdmluZz0hMDtjb25zdCBsPXIuaW5qZWN0SW1wbD9DbyhyLmluamVjdEltcGwpOm51bGwsYz1rYSh0LG8seW8uRGVmYXVsdCk7bmdEZXZNb2RlJiZYbihjLCEwLCJCZWNhdXNlIGZsYWdzIGRvIG5vdCBjb250YWluIGBTa2lwU2VsZicgd2UgZXhwZWN0IHRoaXMgdG8gYWx3YXlzIHN1Y2NlZWQuIik7dHJ5e2k9dFtuXT1yLmZhY3Rvcnkodm9pZCAwLGEsdCxvKSxlLmZpcnN0Q3JlYXRlUGFzcyYmbj49by5kaXJlY3RpdmVTdGFydCYmKG5nRGV2TW9kZSYmKGZ1bmN0aW9uIHModCl7dm9pZCAwIT09dC50eXBlJiZudWxsIT10LnNlbGVjdG9ycyYmdm9pZCAwIT09dC5pbnB1dHN8fGlvKCJFeHBlY3RlZCBhIERpcmVjdGl2ZURlZi9Db21wb25lbnREZWYgYW5kIHRoaXMgb2JqZWN0IGRvZXMgbm90IHNlZW0gdG8gaGF2ZSB0aGUgZXhwZWN0ZWQgc2hhcGUuIil9KShhW25dKSwoCi8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpmdW5jdGlvbiBsKHQsZSxuKXtuZ0Rldk1vZGUmJkNpKG4pO2NvbnN0e25nT25DaGFuZ2VzOm8sbmdPbkluaXQ6aSxuZ0RvQ2hlY2s6YX09ZS50eXBlLnByb3RvdHlwZTtpZihvKXtjb25zdCBvPURpKGUpOyhuLnByZU9yZGVySG9va3N8fChuLnByZU9yZGVySG9va3M9W10pKS5wdXNoKHQsbyksKG4ucHJlT3JkZXJDaGVja0hvb2tzfHwobi5wcmVPcmRlckNoZWNrSG9va3M9W10pKS5wdXNoKHQsbyl9aSYmKG4ucHJlT3JkZXJIb29rc3x8KG4ucHJlT3JkZXJIb29rcz1bXSkpLnB1c2goMC10LGkpLGEmJigobi5wcmVPcmRlckhvb2tzfHwobi5wcmVPcmRlckhvb2tzPVtdKSkucHVzaCh0LGEpLChuLnByZU9yZGVyQ2hlY2tIb29rc3x8KG4ucHJlT3JkZXJDaGVja0hvb2tzPVtdKSkucHVzaCh0LGEpKX0pKG4sYVtuXSxlKSl9ZmluYWxseXtudWxsIT09bCYmQ28obCksaXIocyksci5yZXNvbHZpbmc9ITEsUmEoKX19cmV0dXJuIGl9ZnVuY3Rpb24gX3IodCxlLG4pe3JldHVybiEhKG5bZSsodD4+NSldJjE8PHQpfWZ1bmN0aW9uIENyKHQsZSl7cmV0dXJuISh0JnlvLlNlbGZ8fHQmeW8uSG9zdCYmZSl9Y2xhc3MgTXJ7Y29uc3RydWN0b3IodCxlKXt0aGlzLl90Tm9kZT10LHRoaXMuX2xWaWV3PWV9Z2V0KHQsZSl7cmV0dXJuIHVyKHRoaXMuX3ROb2RlLHRoaXMuX2xWaWV3LHQsdm9pZCAwLGUpfX1mdW5jdGlvbiB2cih0KXtyZXR1cm4gdm8oKCgpPT57Y29uc3QgZT10LnByb3RvdHlwZS5jb25zdHJ1Y3RvcixuPWVbQm9dfHx4cihlKSxvPU9iamVjdC5wcm90b3R5cGU7bGV0IGk9T2JqZWN0LmdldFByb3RvdHlwZU9mKHQucHJvdG90eXBlKS5jb25zdHJ1Y3Rvcjtmb3IoO2kmJmkhPT1vOyl7Y29uc3QgdD1pW0JvXXx8eHIoaSk7aWYodCYmdCE9PW4pcmV0dXJuIHQ7aT1PYmplY3QuZ2V0UHJvdG90eXBlT2YoaSl9cmV0dXJuIHQ9Pm5ldyB0fSkpfWZ1bmN0aW9uIHhyKHQpe3JldHVybiBIbih0KT8oKT0+e2NvbnN0IGU9eHIoem4odCkpO3JldHVybiBlJiZlKCl9OndpKHQpfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiBPcih0KXtyZXR1cm4oZnVuY3Rpb24gZSh0LG4pe2lmKG5nRGV2TW9kZSYmWmEodCwxNSksbmdEZXZNb2RlJiZvbyh0LCJleHBlY3RpbmcgdE5vZGUiKSwiY2xhc3MiPT09bilyZXR1cm4gdC5jbGFzc2VzO2lmKCJzdHlsZSI9PT1uKXJldHVybiB0LnN0eWxlcztjb25zdCBvPXQuYXR0cnM7aWYobyl7Y29uc3QgdD1vLmxlbmd0aDtsZXQgZT0wO2Zvcig7ZTx0Oyl7Y29uc3QgaT1vW2VdO2lmKEthKGkpKWJyZWFrO2lmKDA9PT1pKWUrPTI7ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIGkpZm9yKGUrKztlPHQmJiJzdHJpbmciPT10eXBlb2Ygb1tlXTspZSsrO2Vsc2V7aWYoaT09PW4pcmV0dXJuIG9bZSsxXTtlKz0yfX19cmV0dXJuIG51bGx9KShzYSgpLHQpfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jb25zdCBQcj0iX19hbm5vdGF0aW9uc19fIix3cj0iX19wYXJhbWV0ZXJzX18iLGtyPSJfX3Byb3BfX21ldGFkYXRhX18iO2Z1bmN0aW9uIFNyKHQsZSxuLG8saSl7cmV0dXJuIHZvKCgoKT0+e2NvbnN0IGE9RHIoZSk7ZnVuY3Rpb24gciguLi50KXtpZih0aGlzIGluc3RhbmNlb2YgcilyZXR1cm4gYS5jYWxsKHRoaXMsLi4udCksdGhpcztjb25zdCBlPW5ldyByKC4uLnQpO3JldHVybiBmdW5jdGlvbiBuKGEpe3JldHVybiBpJiZpKGEsLi4udCksKGEuaGFzT3duUHJvcGVydHkoUHIpP2FbUHJdOk9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLFByLHt2YWx1ZTpbXX0pW1ByXSkucHVzaChlKSxvJiZvKGEpLGF9fXJldHVybiBuJiYoci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuLnByb3RvdHlwZSkpLHIucHJvdG90eXBlLm5nTWV0YWRhdGFOYW1lPXQsci5hbm5vdGF0aW9uQ2xzPXIscn0pKX1mdW5jdGlvbiBEcih0KXtyZXR1cm4gZnVuY3Rpb24gZSguLi5uKXtpZih0KXtjb25zdCBlPXQoLi4ubik7Zm9yKGNvbnN0IHQgaW4gZSl0aGlzW3RdPWVbdF19fX1mdW5jdGlvbiBFcih0LGUsbil7cmV0dXJuIHZvKCgoKT0+e2NvbnN0IG89RHIoZSk7ZnVuY3Rpb24gaSguLi50KXtpZih0aGlzIGluc3RhbmNlb2YgaSlyZXR1cm4gby5hcHBseSh0aGlzLHQpLHRoaXM7Y29uc3QgZT1uZXcgaSguLi50KTtyZXR1cm4gbi5hbm5vdGF0aW9uPWUsbjtmdW5jdGlvbiBuKHQsbixvKXtjb25zdCBpPXQuaGFzT3duUHJvcGVydHkod3IpP3Rbd3JdOk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LHdyLHt2YWx1ZTpbXX0pW3dyXTtmb3IoO2kubGVuZ3RoPD1vOylpLnB1c2gobnVsbCk7cmV0dXJuKGlbb109aVtvXXx8W10pLnB1c2goZSksdH19cmV0dXJuIG4mJihpLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG4ucHJvdG90eXBlKSksaS5wcm90b3R5cGUubmdNZXRhZGF0YU5hbWU9dCxpLmFubm90YXRpb25DbHM9aSxpfSkpfWZ1bmN0aW9uIEFyKHQsZSxuLG8pe3JldHVybiB2bygoKCk9Pntjb25zdCBpPURyKGUpO2Z1bmN0aW9uIGEoLi4udCl7aWYodGhpcyBpbnN0YW5jZW9mIGEpcmV0dXJuIGkuYXBwbHkodGhpcyx0KSx0aGlzO2NvbnN0IGU9bmV3IGEoLi4udCk7cmV0dXJuIGZ1bmN0aW9uIG4oaSxhKXtjb25zdCByPWkuY29uc3RydWN0b3Iscz1yLmhhc093blByb3BlcnR5KGtyKT9yW2tyXTpPYmplY3QuZGVmaW5lUHJvcGVydHkocixrcix7dmFsdWU6e319KVtrcl07c1thXT1zLmhhc093blByb3BlcnR5KGEpJiZzW2FdfHxbXSxzW2FdLnVuc2hpZnQoZSksbyYmbyhpLGEsLi4udCl9fXJldHVybiBuJiYoYS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuLnByb3RvdHlwZSkpLGEucHJvdG90eXBlLm5nTWV0YWRhdGFOYW1lPXQsYS5hbm5vdGF0aW9uQ2xzPWEsYX0pKX1jb25zdCBScj0oZnVuY3Rpb24gVHIoKXtyZXR1cm4gRXIoIkF0dHJpYnV0ZSIsKHQ9Pih7YXR0cmlidXRlTmFtZTp0LF9fTkdfRUxFTUVOVF9JRF9fOigpPT5Pcih0KX0pKSl9KSgpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3MgTnJ7Y29uc3RydWN0b3IodCxlKXt0aGlzLl9kZXNjPXQsdGhpcy5uZ01ldGFkYXRhTmFtZT0iSW5qZWN0aW9uVG9rZW4iLHRoaXMuybVwcm92PXZvaWQgMCwibnVtYmVyIj09dHlwZW9mIGU/KCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmJG4oZSwwLCJPbmx5IG5lZ2F0aXZlIG51bWJlcnMgYXJlIHN1cHBvcnRlZCBoZXJlIiksdGhpcy5fX05HX0VMRU1FTlRfSURfXz1lKTp2b2lkIDAhPT1lJiYodGhpcy7JtXByb3Y9bG8oe3Rva2VuOnRoaXMscHJvdmlkZWRJbjplLnByb3ZpZGVkSW58fCJyb290IixmYWN0b3J5OmUuZmFjdG9yeX0pKX10b1N0cmluZygpe3JldHVybmBJbmplY3Rpb25Ub2tlbiAke3RoaXMuX2Rlc2N9YH19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL25ldyBOcigiQW5hbHl6ZUZvckVudHJ5Q29tcG9uZW50cyIpO2NsYXNzIElye31jb25zdCB6cj1BcigiQ29udGVudENoaWxkcmVuIiwoKHQsZT17fSk9Pk9iamVjdC5hc3NpZ24oe3NlbGVjdG9yOnQsZmlyc3Q6ITEsaXNWaWV3UXVlcnk6ITEsZGVzY2VuZGFudHM6ITEsZW1pdERpc3RpbmN0Q2hhbmdlc09ubHk6ITF9LGUpKSxJciksSHI9QXIoIkNvbnRlbnRDaGlsZCIsKCh0LGU9e30pPT5PYmplY3QuYXNzaWduKHtzZWxlY3Rvcjp0LGZpcnN0OiEwLGlzVmlld1F1ZXJ5OiExLGRlc2NlbmRhbnRzOiEwfSxlKSksSXIpO0FyKCJWaWV3Q2hpbGRyZW4iLCgodCxlPXt9KT0+T2JqZWN0LmFzc2lnbih7c2VsZWN0b3I6dCxmaXJzdDohMSxpc1ZpZXdRdWVyeTohMCxkZXNjZW5kYW50czohMCxlbWl0RGlzdGluY3RDaGFuZ2VzT25seTohMX0sZSkpLElyKTtjb25zdCBGcj1BcigiVmlld0NoaWxkIiwoKHQsZSk9Pk9iamVjdC5hc3NpZ24oe3NlbGVjdG9yOnQsZmlyc3Q6ITAsaXNWaWV3UXVlcnk6ITAsZGVzY2VuZGFudHM6ITB9LGUpKSxJcik7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwp2YXIgTHIsQnIsVnI7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpmdW5jdGlvbiBqcigpe2NvbnN0IHQ9RW8ubmc7aWYoIXR8fCF0Lsm1Y29tcGlsZXJGYWNhZGUpdGhyb3cgbmV3IEVycm9yKCJBbmd1bGFyIEpJVCBjb21waWxhdGlvbiBmYWlsZWQ6ICdAYW5ndWxhci9jb21waWxlcicgbm90IGxvYWRlZCFcbiAgLSBKSVQgY29tcGlsYXRpb24gaXMgZGlzY291cmFnZWQgZm9yIHByb2R1Y3Rpb24gdXNlLWNhc2VzISBDb25zaWRlciBBT1QgbW9kZSBpbnN0ZWFkLlxuICAtIERpZCB5b3UgYm9vdHN0cmFwIHVzaW5nICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyLWR5bmFtaWMnIG9yICdAYW5ndWxhci9wbGF0Zm9ybS1zZXJ2ZXInP1xuICAtIEFsdGVybmF0aXZlbHkgcHJvdmlkZSB0aGUgY29tcGlsZXIgd2l0aCAnaW1wb3J0IFwiQGFuZ3VsYXIvY29tcGlsZXJcIjsnIGJlZm9yZSBib290c3RyYXBwaW5nLiIpO3JldHVybiB0Lsm1Y29tcGlsZXJGYWNhZGV9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLyEoZnVuY3Rpb24odCl7dFt0LlRva2VuPTBdPSJUb2tlbiIsdFt0LkF0dHJpYnV0ZT0xXT0iQXR0cmlidXRlIix0W3QuQ2hhbmdlRGV0ZWN0b3JSZWY9Ml09IkNoYW5nZURldGVjdG9yUmVmIix0W3QuSW52YWxpZD0zXT0iSW52YWxpZCJ9KShMcnx8KExyPXt9KSksKGZ1bmN0aW9uKHQpe3RbdC5EaXJlY3RpdmU9MF09IkRpcmVjdGl2ZSIsdFt0LkNvbXBvbmVudD0xXT0iQ29tcG9uZW50Iix0W3QuSW5qZWN0YWJsZT0yXT0iSW5qZWN0YWJsZSIsdFt0LlBpcGU9M109IlBpcGUiLHRbdC5OZ01vZHVsZT00XT0iTmdNb2R1bGUifSkoQnJ8fChCcj17fSkpLChmdW5jdGlvbih0KXt0W3QuRW11bGF0ZWQ9MF09IkVtdWxhdGVkIix0W3QuTm9uZT0yXT0iTm9uZSIsdFt0LlNoYWRvd0RvbT0zXT0iU2hhZG93RG9tIn0pKFZyfHwoVnI9e30pKTtjb25zdCBVcj1GdW5jdGlvbjtmdW5jdGlvbiBXcih0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdH1mdW5jdGlvbiBHcih0LGUpe3ZvaWQgMD09PWUmJihlPXQpO2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKXtsZXQgbz10W25dO0FycmF5LmlzQXJyYXkobyk/KGU9PT10JiYoZT10LnNsaWNlKDAsbikpLEdyKG8sZSkpOmUhPT10JiZlLnB1c2gobyl9cmV0dXJuIGV9ZnVuY3Rpb24gWXIodCxlKXt0LmZvckVhY2goKHQ9PkFycmF5LmlzQXJyYXkodCk/WXIodCxlKTplKHQpKSl9ZnVuY3Rpb24gcXIodCxlLG4pe2U+PXQubGVuZ3RoP3QucHVzaChuKTp0LnNwbGljZShlLDAsbil9ZnVuY3Rpb24gWnIodCxlKXtyZXR1cm4gZT49dC5sZW5ndGgtMT90LnBvcCgpOnQuc3BsaWNlKGUsMSlbMF19ZnVuY3Rpb24gWHIodCxlKXtjb25zdCBuPVtdO2ZvcihsZXQgbz0wO288dDtvKyspbi5wdXNoKGUpO3JldHVybiBufWZ1bmN0aW9uIEtyKHQsZSxuKXtsZXQgbz1Rcih0LGUpO3JldHVybiBvPj0wP3RbMXxvXT1uOihvPX5vLChmdW5jdGlvbiBpKHQsZSxuLG8pe25nRGV2TW9kZSYmdG8oZSx0Lmxlbmd0aCwiQ2FuJ3QgaW5zZXJ0IHBhc3QgYXJyYXkgZW5kLiIpO2xldCBpPXQubGVuZ3RoO2lmKGk9PWUpdC5wdXNoKG4sbyk7ZWxzZSBpZigxPT09aSl0LnB1c2gobyx0WzBdKSx0WzBdPW47ZWxzZXtmb3IoaS0tLHQucHVzaCh0W2ktMV0sdFtpXSk7aT5lOyl0W2ldPXRbaS0yXSxpLS07dFtlXT1uLHRbZSsxXT1vfX0pKHQsbyxlLG4pKSxvfWZ1bmN0aW9uIEpyKHQsZSl7Y29uc3Qgbj1Rcih0LGUpO2lmKG4+PTApcmV0dXJuIHRbMXxuXX1mdW5jdGlvbiBRcih0LGUpe3JldHVybihmdW5jdGlvbiBuKHQsZSxvKXtuZ0Rldk1vZGUmJlhuKEFycmF5LmlzQXJyYXkodCksITAsIkV4cGVjdGluZyBhbiBhcnJheSIpO2xldCBpPTAsYT10Lmxlbmd0aD4+bztmb3IoO2EhPT1pOyl7Y29uc3Qgbj1pKyhhLWk+PjEpLHI9dFtuPDxvXTtpZihlPT09cilyZXR1cm4gbjw8bztyPmU/YT1uOmk9bisxfXJldHVybn4oYTw8byl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLykodCxlLDEpfWNvbnN0ICRyPS9eZnVuY3Rpb25ccytcUytcKFwpXHMqe1tcc1xTXStcLmFwcGx5XCh0aGlzLFxzKihhcmd1bWVudHN8W14oKV0rXChhcmd1bWVudHNcKSlcKS8sdHM9L15jbGFzc1xzK1tBLVphLXpcZCRfXSpccypleHRlbmRzXHMrW157XSt7Lyxlcz0vXmNsYXNzXHMrW0EtWmEtelxkJF9dKlxzKmV4dGVuZHNccytbXntdK3tbXHNcU10qY29uc3RydWN0b3JccypcKC8sbnM9L15jbGFzc1xzK1tBLVphLXpcZCRfXSpccypleHRlbmRzXHMrW157XSt7W1xzXFNdKmNvbnN0cnVjdG9yXHMqXChcKVxzKntccypzdXBlclwoXC5cLlwuYXJndW1lbnRzXCkvO2NsYXNzIG9ze2NvbnN0cnVjdG9yKHQpe3RoaXMuX3JlZmxlY3Q9dHx8RW8uUmVmbGVjdH1pc1JlZmxlY3Rpb25FbmFibGVkKCl7cmV0dXJuITB9ZmFjdG9yeSh0KXtyZXR1cm4oLi4uZSk9Pm5ldyB0KC4uLmUpfV96aXBUeXBlc0FuZEFubm90YXRpb25zKHQsZSl7bGV0IG47bj1Ycih2b2lkIDA9PT10P2UubGVuZ3RoOnQubGVuZ3RoKTtmb3IobGV0IG89MDtvPG4ubGVuZ3RoO28rKyluW29dPXZvaWQgMD09PXQ/W106dFtvXSYmdFtvXSE9T2JqZWN0P1t0W29dXTpbXSxlJiZudWxsIT1lW29dJiYobltvXT1uW29dLmNvbmNhdChlW29dKSk7cmV0dXJuIG59X293blBhcmFtZXRlcnModCxlKXtpZigoZnVuY3Rpb24gbih0KXtyZXR1cm4gJHIudGVzdCh0KXx8bnMudGVzdCh0KXx8dHMudGVzdCh0KSYmIWVzLnRlc3QodCl9KSh0LnRvU3RyaW5nKCkpKXJldHVybiBudWxsO2lmKHQucGFyYW1ldGVycyYmdC5wYXJhbWV0ZXJzIT09ZS5wYXJhbWV0ZXJzKXJldHVybiB0LnBhcmFtZXRlcnM7Y29uc3Qgbz10LmN0b3JQYXJhbWV0ZXJzO2lmKG8mJm8hPT1lLmN0b3JQYXJhbWV0ZXJzKXtjb25zdCB0PSJmdW5jdGlvbiI9PXR5cGVvZiBvP28oKTpvLGU9dC5tYXAoKHQ9PnQmJnQudHlwZSkpLG49dC5tYXAoKHQ9PnQmJmlzKHQuZGVjb3JhdG9ycykpKTtyZXR1cm4gdGhpcy5femlwVHlwZXNBbmRBbm5vdGF0aW9ucyhlLG4pfWNvbnN0IGk9dC5oYXNPd25Qcm9wZXJ0eSh3cikmJnRbd3JdLGE9dGhpcy5fcmVmbGVjdCYmdGhpcy5fcmVmbGVjdC5nZXRPd25NZXRhZGF0YSYmdGhpcy5fcmVmbGVjdC5nZXRPd25NZXRhZGF0YSgiZGVzaWduOnBhcmFtdHlwZXMiLHQpO3JldHVybiBhfHxpP3RoaXMuX3ppcFR5cGVzQW5kQW5ub3RhdGlvbnMoYSxpKTpYcih0Lmxlbmd0aCl9cGFyYW1ldGVycyh0KXtpZighV3IodCkpcmV0dXJuW107Y29uc3QgZT1hcyh0KTtsZXQgbj10aGlzLl9vd25QYXJhbWV0ZXJzKHQsZSk7cmV0dXJuIG58fGU9PT1PYmplY3R8fChuPXRoaXMucGFyYW1ldGVycyhlKSksbnx8W119X293bkFubm90YXRpb25zKHQsZSl7aWYodC5hbm5vdGF0aW9ucyYmdC5hbm5vdGF0aW9ucyE9PWUuYW5ub3RhdGlvbnMpe2xldCBlPXQuYW5ub3RhdGlvbnM7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGUmJmUuYW5ub3RhdGlvbnMmJihlPWUuYW5ub3RhdGlvbnMpLGV9cmV0dXJuIHQuZGVjb3JhdG9ycyYmdC5kZWNvcmF0b3JzIT09ZS5kZWNvcmF0b3JzP2lzKHQuZGVjb3JhdG9ycyk6dC5oYXNPd25Qcm9wZXJ0eShQcik/dFtQcl06bnVsbH1hbm5vdGF0aW9ucyh0KXtpZighV3IodCkpcmV0dXJuW107Y29uc3QgZT1hcyh0KSxuPXRoaXMuX293bkFubm90YXRpb25zKHQsZSl8fFtdO3JldHVybihlIT09T2JqZWN0P3RoaXMuYW5ub3RhdGlvbnMoZSk6W10pLmNvbmNhdChuKX1fb3duUHJvcE1ldGFkYXRhKHQsZSl7aWYodC5wcm9wTWV0YWRhdGEmJnQucHJvcE1ldGFkYXRhIT09ZS5wcm9wTWV0YWRhdGEpe2xldCBlPXQucHJvcE1ldGFkYXRhO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlJiZlLnByb3BNZXRhZGF0YSYmKGU9ZS5wcm9wTWV0YWRhdGEpLGV9aWYodC5wcm9wRGVjb3JhdG9ycyYmdC5wcm9wRGVjb3JhdG9ycyE9PWUucHJvcERlY29yYXRvcnMpe2NvbnN0IGU9dC5wcm9wRGVjb3JhdG9ycyxuPXt9O3JldHVybiBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKCh0PT57blt0XT1pcyhlW3RdKX0pKSxufXJldHVybiB0Lmhhc093blByb3BlcnR5KGtyKT90W2tyXTpudWxsfXByb3BNZXRhZGF0YSh0KXtpZighV3IodCkpcmV0dXJue307Y29uc3QgZT1hcyh0KSxuPXt9O2lmKGUhPT1PYmplY3Qpe2NvbnN0IHQ9dGhpcy5wcm9wTWV0YWRhdGEoZSk7T2JqZWN0LmtleXModCkuZm9yRWFjaCgoZT0+e25bZV09dFtlXX0pKX1jb25zdCBvPXRoaXMuX293blByb3BNZXRhZGF0YSh0LGUpO3JldHVybiBvJiZPYmplY3Qua2V5cyhvKS5mb3JFYWNoKCh0PT57Y29uc3QgZT1bXTtuLmhhc093blByb3BlcnR5KHQpJiZlLnB1c2goLi4ublt0XSksZS5wdXNoKC4uLm9bdF0pLG5bdF09ZX0pKSxufW93blByb3BNZXRhZGF0YSh0KXtyZXR1cm4gV3IodCkmJnRoaXMuX293blByb3BNZXRhZGF0YSh0LGFzKHQpKXx8e319aGFzTGlmZWN5Y2xlSG9vayh0LGUpe3JldHVybiB0IGluc3RhbmNlb2YgVXImJmUgaW4gdC5wcm90b3R5cGV9Z3VhcmRzKHQpe3JldHVybnt9fWdldHRlcih0KXtyZXR1cm4gbmV3IEZ1bmN0aW9uKCJvIiwicmV0dXJuIG8uIit0KyI7Iil9c2V0dGVyKHQpe3JldHVybiBuZXcgRnVuY3Rpb24oIm8iLCJ2IiwicmV0dXJuIG8uIit0KyIgPSB2OyIpfW1ldGhvZCh0KXtyZXR1cm4gbmV3IEZ1bmN0aW9uKCJvIiwiYXJncyIsYGlmICghby4ke3R9KSB0aHJvdyBuZXcgRXJyb3IoJyIke3R9IiBpcyB1bmRlZmluZWQnKTtcbiAgICAgICAgcmV0dXJuIG8uJHt0fS5hcHBseShvLCBhcmdzKTtgKX1pbXBvcnRVcmkodCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0JiZ0LmZpbGVQYXRoP3QuZmlsZVBhdGg6YC4vJHtSbih0KX1gfXJlc291cmNlVXJpKHQpe3JldHVybmAuLyR7Um4odCl9YH1yZXNvbHZlSWRlbnRpZmllcih0LGUsbixvKXtyZXR1cm4gb31yZXNvbHZlRW51bSh0LGUpe3JldHVybiB0W2VdfX1mdW5jdGlvbiBpcyh0KXtyZXR1cm4gdD90Lm1hcCgodD0+bmV3KDAsdC50eXBlLmFubm90YXRpb25DbHMpKC4uLnQuYXJncz90LmFyZ3M6W10pKSk6W119ZnVuY3Rpb24gYXModCl7Y29uc3QgZT10LnByb3RvdHlwZT9PYmplY3QuZ2V0UHJvdG90eXBlT2YodC5wcm90b3R5cGUpOm51bGw7cmV0dXJuKGU/ZS5jb25zdHJ1Y3RvcjpudWxsKXx8T2JqZWN0fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jb25zdCBycz17fSxzcz0vXG4vZ20sbHM9Il9fc291cmNlIixjcz1Fbih7cHJvdmlkZTpTdHJpbmcsdXNlVmFsdWU6RW59KTtsZXQgZHM7ZnVuY3Rpb24gcHModCl7Y29uc3QgZT1kcztyZXR1cm4gZHM9dCxlfWZ1bmN0aW9uIG1zKHQsZT15by5EZWZhdWx0KXtpZih2b2lkIDA9PT1kcyl0aHJvdyBuZXcgRXJyb3IoImluamVjdCgpIG11c3QgYmUgY2FsbGVkIGZyb20gYW4gaW5qZWN0aW9uIGNvbnRleHQiKTtyZXR1cm4gbnVsbD09PWRzP01vKHQsdm9pZCAwLGUpOmRzLmdldCh0LGUmeW8uT3B0aW9uYWw/bnVsbDp2b2lkIDAsZSl9ZnVuY3Rpb24gdXModCxlPXlvLkRlZmF1bHQpe3JldHVybigoZnVuY3Rpb24gbigpe3JldHVybiBfb30pKCl8fG1zKSh6bih0KSxlKX1mdW5jdGlvbiBmcyh0KXtjb25zdCBlPW5nRGV2TW9kZT9gVGhpcyBjb25zdHJ1Y3RvciBpcyBub3QgY29tcGF0aWJsZSB3aXRoIEFuZ3VsYXIgRGVwZW5kZW5jeSBJbmplY3Rpb24gYmVjYXVzZSBpdHMgZGVwZW5kZW5jeSBhdCBpbmRleCAke3R9IG9mIHRoZSBwYXJhbWV0ZXIgbGlzdCBpcyBpbnZhbGlkLlxuVGhpcyBjYW4gaGFwcGVuIGlmIHRoZSBkZXBlbmRlbmN5IHR5cGUgaXMgYSBwcmltaXRpdmUgbGlrZSBhIHN0cmluZyBvciBpZiBhbiBhbmNlc3RvciBvZiB0aGlzIGNsYXNzIGlzIG1pc3NpbmcgYW4gQW5ndWxhciBkZWNvcmF0b3IuXG5cblBsZWFzZSBjaGVjayB0aGF0IDEpIHRoZSB0eXBlIGZvciB0aGUgcGFyYW1ldGVyIGF0IGluZGV4ICR7dH0gaXMgY29ycmVjdCBhbmQgMikgdGhlIGNvcnJlY3QgQW5ndWxhciBkZWNvcmF0b3JzIGFyZSBkZWZpbmVkIGZvciB0aGlzIGNsYXNzIGFuZCBpdHMgYW5jZXN0b3JzLmA6ImludmFsaWQiO3Rocm93IG5ldyBFcnJvcihlKX1jb25zdCBncz11cztmdW5jdGlvbiBocyh0KXtjb25zdCBlPVtdO2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKXtjb25zdCBvPXpuKHRbbl0pO2lmKEFycmF5LmlzQXJyYXkobykpe2lmKDA9PT1vLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkFyZ3VtZW50cyBhcnJheSBtdXN0IGhhdmUgYXJndW1lbnRzLiIpO2xldCB0LG49eW8uRGVmYXVsdDtmb3IobGV0IGU9MDtlPG8ubGVuZ3RoO2UrKyl7Y29uc3QgaT1vW2VdLGE9aS5fX05HX0RJX0ZMQUdfXzsibnVtYmVyIj09dHlwZW9mIGE/LTE9PT1hP3Q9aS50b2tlbjpufD1hOnQ9aX1lLnB1c2godXModCxuKSl9ZWxzZSBlLnB1c2godXMobykpfXJldHVybiBlfWZ1bmN0aW9uIGJzKHQsZSl7cmV0dXJuIHQuX19OR19ESV9GTEFHX189ZSx0LnByb3RvdHlwZS5fX05HX0RJX0ZMQUdfXz1lLHR9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCB5cz1icyhFcigiSW5qZWN0IiwodD0+KHt0b2tlbjp0fSkpKSwtMSksX3M9YnMoRXIoIk9wdGlvbmFsIiksOCksQ3M9YnMoRXIoIlNlbGYiKSwyKSxNcz1icyhFcigiU2tpcFNlbGYiKSw0KSx2cz1icyhFcigiSG9zdCIpLDEpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KbGV0IHhzPW51bGw7ZnVuY3Rpb24gT3MoKXtyZXR1cm4geHM9eHN8fG5ldyBvc31mdW5jdGlvbiBQcyh0KXtyZXR1cm4gd3MoT3MoKS5wYXJhbWV0ZXJzKHQpKX1mdW5jdGlvbiB3cyh0KXtjb25zdCBlPWpyKCk7cmV0dXJuIHQubWFwKCh0PT4oZnVuY3Rpb24gbih0LGUpe2NvbnN0IG49e3Rva2VuOm51bGwsaG9zdDohMSxvcHRpb25hbDohMSxyZXNvbHZlZDp0LlIzUmVzb2x2ZWREZXBlbmRlbmN5VHlwZS5Ub2tlbixzZWxmOiExLHNraXBTZWxmOiExfTtmdW5jdGlvbiBvKGUpe24ucmVzb2x2ZWQ9dC5SM1Jlc29sdmVkRGVwZW5kZW5jeVR5cGUuVG9rZW4sbi50b2tlbj1lfWlmKEFycmF5LmlzQXJyYXkoZSkmJmUubGVuZ3RoPjApZm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKyspe2NvbnN0IGE9ZVtpXTtpZih2b2lkIDA9PT1hKWNvbnRpbnVlO2NvbnN0IHI9T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpO2lmKGEgaW5zdGFuY2VvZiBfc3x8Ik9wdGlvbmFsIj09PXIubmdNZXRhZGF0YU5hbWUpbi5vcHRpb25hbD0hMDtlbHNlIGlmKGEgaW5zdGFuY2VvZiBNc3x8IlNraXBTZWxmIj09PXIubmdNZXRhZGF0YU5hbWUpbi5za2lwU2VsZj0hMDtlbHNlIGlmKGEgaW5zdGFuY2VvZiBDc3x8IlNlbGYiPT09ci5uZ01ldGFkYXRhTmFtZSluLnNlbGY9ITA7ZWxzZSBpZihhIGluc3RhbmNlb2YgdnN8fCJIb3N0Ij09PXIubmdNZXRhZGF0YU5hbWUpbi5ob3N0PSEwO2Vsc2UgaWYoYSBpbnN0YW5jZW9mIHlzKW4udG9rZW49YS50b2tlbjtlbHNlIGlmKGEgaW5zdGFuY2VvZiBScil7aWYodm9pZCAwPT09YS5hdHRyaWJ1dGVOYW1lKXRocm93IG5ldyBFcnJvcigiQXR0cmlidXRlIG5hbWUgbXVzdCBiZSBkZWZpbmVkLiIpO24udG9rZW49YS5hdHRyaWJ1dGVOYW1lLG4ucmVzb2x2ZWQ9dC5SM1Jlc29sdmVkRGVwZW5kZW5jeVR5cGUuQXR0cmlidXRlfWVsc2UhMD09PWEuX19DaGFuZ2VEZXRlY3RvclJlZl9fPyhuLnRva2VuPWEsbi5yZXNvbHZlZD10LlIzUmVzb2x2ZWREZXBlbmRlbmN5VHlwZS5DaGFuZ2VEZXRlY3RvclJlZik6byhhKX1lbHNlIHZvaWQgMD09PWV8fEFycmF5LmlzQXJyYXkoZSkmJjA9PT1lLmxlbmd0aD8obi50b2tlbj12b2lkIDAsbi5yZXNvbHZlZD1Mci5JbnZhbGlkKTpvKGUpO3JldHVybiBufQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8pKGUsdCkpKX1sZXQga3M9bmV3IE1hcDtjb25zdCBTcz1uZXcgU2V0O2Z1bmN0aW9uIERzKHQpe3JldHVybiEhKHQudGVtcGxhdGVVcmwmJiF0Lmhhc093blByb3BlcnR5KCJ0ZW1wbGF0ZSIpfHx0LnN0eWxlVXJscyYmdC5zdHlsZVVybHMubGVuZ3RoKX1mdW5jdGlvbiBFcyh0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/dDp0LnRleHQoKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmxldCBBcyxScztmdW5jdGlvbiBUcygpe2lmKHZvaWQgMD09PUFzJiYoQXM9bnVsbCxFby50cnVzdGVkVHlwZXMpKXRyeXtBcz1Fby50cnVzdGVkVHlwZXMuY3JlYXRlUG9saWN5KCJhbmd1bGFyIix7Y3JlYXRlSFRNTDp0PT50LGNyZWF0ZVNjcmlwdDp0PT50LGNyZWF0ZVNjcmlwdFVSTDp0PT50fSl9Y2F0Y2godCl7fXJldHVybiBBc31mdW5jdGlvbiBOcyh0KXt2YXIgZTtyZXR1cm4obnVsbD09PShlPVRzKCkpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmNyZWF0ZUhUTUwodCkpfHx0fWZ1bmN0aW9uIElzKCl7aWYodm9pZCAwPT09UnMmJihScz1udWxsLEVvLnRydXN0ZWRUeXBlcykpdHJ5e1JzPUVvLnRydXN0ZWRUeXBlcy5jcmVhdGVQb2xpY3koImFuZ3VsYXIjdW5zYWZlLWJ5cGFzcyIse2NyZWF0ZUhUTUw6dD0+dCxjcmVhdGVTY3JpcHQ6dD0+dCxjcmVhdGVTY3JpcHRVUkw6dD0+dH0pfWNhdGNoKHQpe31yZXR1cm4gUnN9ZnVuY3Rpb24genModCl7dmFyIGU7cmV0dXJuKG51bGw9PT0oZT1JcygpKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5jcmVhdGVIVE1MKHQpKXx8dH1mdW5jdGlvbiBIcyh0KXt2YXIgZTtyZXR1cm4obnVsbD09PShlPUlzKCkpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmNyZWF0ZVNjcmlwdCh0KSl8fHR9ZnVuY3Rpb24gRnModCl7dmFyIGU7cmV0dXJuKG51bGw9PT0oZT1JcygpKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5jcmVhdGVTY3JpcHRVUkwodCkpfHx0fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jbGFzcyBMc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmNoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHk9dH10b1N0cmluZygpe3JldHVybmBTYWZlVmFsdWUgbXVzdCB1c2UgW3Byb3BlcnR5XT1iaW5kaW5nOiAke3RoaXMuY2hhbmdpbmdUaGlzQnJlYWtzQXBwbGljYXRpb25TZWN1cml0eX0gKHNlZSBodHRwczovL2cuY28vbmcvc2VjdXJpdHkjeHNzKWB9fWNsYXNzIEJzIGV4dGVuZHMgTHN7Z2V0VHlwZU5hbWUoKXtyZXR1cm4iSFRNTCJ9fWNsYXNzIFZzIGV4dGVuZHMgTHN7Z2V0VHlwZU5hbWUoKXtyZXR1cm4iU3R5bGUifX1jbGFzcyBqcyBleHRlbmRzIExze2dldFR5cGVOYW1lKCl7cmV0dXJuIlNjcmlwdCJ9fWNsYXNzIFVzIGV4dGVuZHMgTHN7Z2V0VHlwZU5hbWUoKXtyZXR1cm4iVVJMIn19Y2xhc3MgV3MgZXh0ZW5kcyBMc3tnZXRUeXBlTmFtZSgpe3JldHVybiJSZXNvdXJjZVVSTCJ9fWZ1bmN0aW9uIEdzKHQpe3JldHVybiB0IGluc3RhbmNlb2YgTHM/dC5jaGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlvblNlY3VyaXR5OnR9ZnVuY3Rpb24gWXModCxlKXtjb25zdCBuPXFzKHQpO2lmKG51bGwhPW4mJm4hPT1lKXtpZigiUmVzb3VyY2VVUkwiPT09biYmIlVSTCI9PT1lKXJldHVybiEwO3Rocm93IG5ldyBFcnJvcihgUmVxdWlyZWQgYSBzYWZlICR7ZX0sIGdvdCBhICR7bn0gKHNlZSBodHRwczovL2cuY28vbmcvc2VjdXJpdHkjeHNzKWApfXJldHVybiBuPT09ZX1mdW5jdGlvbiBxcyh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIExzJiZ0LmdldFR5cGVOYW1lKCl8fG51bGx9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpmdW5jdGlvbiBacyh0KXtjb25zdCBlPW5ldyBLcyh0KTtyZXR1cm4oZnVuY3Rpb24gbigpe3RyeXtyZXR1cm4hIShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKE5zKCIiKSwidGV4dC9odG1sIil9Y2F0Y2godCl7cmV0dXJuITF9fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8pKCk/bmV3IFhzKGUpOmV9Y2xhc3MgWHN7Y29uc3RydWN0b3IodCl7dGhpcy5pbmVydERvY3VtZW50SGVscGVyPXR9Z2V0SW5lcnRCb2R5RWxlbWVudCh0KXt0PSI8Ym9keT48cmVtb3ZlPjwvcmVtb3ZlPiIrdDt0cnl7Y29uc3QgZT0obmV3IHdpbmRvdy5ET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhOcyh0KSwidGV4dC9odG1sIikuYm9keTtyZXR1cm4gbnVsbD09PWU/dGhpcy5pbmVydERvY3VtZW50SGVscGVyLmdldEluZXJ0Qm9keUVsZW1lbnQodCk6KGUucmVtb3ZlQ2hpbGQoZS5maXJzdENoaWxkKSxlKX1jYXRjaCh0KXtyZXR1cm4gbnVsbH19fWNsYXNzIEtze2NvbnN0cnVjdG9yKHQpe2lmKHRoaXMuZGVmYXVsdERvYz10LHRoaXMuaW5lcnREb2N1bWVudD10aGlzLmRlZmF1bHREb2MuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCJzYW5pdGl6YXRpb24taW5lcnQiKSxudWxsPT10aGlzLmluZXJ0RG9jdW1lbnQuYm9keSl7Y29uc3QgdD10aGlzLmluZXJ0RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaHRtbCIpO3RoaXMuaW5lcnREb2N1bWVudC5hcHBlbmRDaGlsZCh0KTtjb25zdCBlPXRoaXMuaW5lcnREb2N1bWVudC5jcmVhdGVFbGVtZW50KCJib2R5Iik7dC5hcHBlbmRDaGlsZChlKX19Z2V0SW5lcnRCb2R5RWxlbWVudCh0KXtjb25zdCBlPXRoaXMuaW5lcnREb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO2lmKCJjb250ZW50ImluIGUpcmV0dXJuIGUuaW5uZXJIVE1MPU5zKHQpLGU7Y29uc3Qgbj10aGlzLmluZXJ0RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYm9keSIpO3JldHVybiBuLmlubmVySFRNTD1Ocyh0KSx0aGlzLmRlZmF1bHREb2MuZG9jdW1lbnRNb2RlJiZ0aGlzLnN0cmlwQ3VzdG9tTnNBdHRycyhuKSxufXN0cmlwQ3VzdG9tTnNBdHRycyh0KXtjb25zdCBlPXQuYXR0cmlidXRlcztmb3IobGV0IG49ZS5sZW5ndGgtMTswPG47bi0tKXtjb25zdCBvPWUuaXRlbShuKS5uYW1lOyJ4bWxuczpuczEiIT09byYmMCE9PW8uaW5kZXhPZigibnMxOiIpfHx0LnJlbW92ZUF0dHJpYnV0ZShvKX1sZXQgbj10LmZpcnN0Q2hpbGQ7Zm9yKDtuOyluLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJnRoaXMuc3RyaXBDdXN0b21Oc0F0dHJzKG4pLG49bi5uZXh0U2libGluZ319Y29uc3QgSnM9L14oPzooPzpodHRwcz98bWFpbHRvfGZ0cHx0ZWx8ZmlsZXxzbXMpOnxbXiY6Lz8jXSooPzpbLz8jXXwkKSkvZ2ksUXM9L15kYXRhOig/OmltYWdlXC8oPzpibXB8Z2lmfGpwZWd8anBnfHBuZ3x0aWZmfHdlYnApfHZpZGVvXC8oPzptcGVnfG1wNHxvZ2d8d2VibSl8YXVkaW9cLyg/Om1wM3xvZ2F8b2dnfG9wdXMpKTtiYXNlNjQsW2EtejAtOStcL10rPSokL2k7ZnVuY3Rpb24gJHModCl7cmV0dXJuKHQ9U3RyaW5nKHQpKS5tYXRjaChKcyl8fHQubWF0Y2goUXMpP3Q6KCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmY29uc29sZS53YXJuKGBXQVJOSU5HOiBzYW5pdGl6aW5nIHVuc2FmZSBVUkwgdmFsdWUgJHt0fSAoc2VlIGh0dHBzOi8vZy5jby9uZy9zZWN1cml0eSN4c3MpYCksInVuc2FmZToiK3QpfWZ1bmN0aW9uIHRsKHQpe3JldHVybih0PVN0cmluZyh0KSkuc3BsaXQoIiwiKS5tYXAoKHQ9PiRzKHQudHJpbSgpKSkpLmpvaW4oIiwgIil9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIGVsKHQpe2NvbnN0IGU9e307Zm9yKGNvbnN0IG4gb2YgdC5zcGxpdCgiLCIpKWVbbl09ITA7cmV0dXJuIGV9ZnVuY3Rpb24gbmwoLi4udCl7Y29uc3QgZT17fTtmb3IoY29uc3QgbiBvZiB0KWZvcihjb25zdCB0IGluIG4pbi5oYXNPd25Qcm9wZXJ0eSh0KSYmKGVbdF09ITApO3JldHVybiBlfWNvbnN0IG9sPWVsKCJhcmVhLGJyLGNvbCxocixpbWcsd2JyIiksaWw9ZWwoImNvbGdyb3VwLGRkLGR0LGxpLHAsdGJvZHksdGQsdGZvb3QsdGgsdGhlYWQsdHIiKSxhbD1lbCgicnAscnQiKSxybD1ubChhbCxpbCksc2w9bmwoaWwsZWwoImFkZHJlc3MsYXJ0aWNsZSxhc2lkZSxibG9ja3F1b3RlLGNhcHRpb24sY2VudGVyLGRlbCxkZXRhaWxzLGRpYWxvZyxkaXIsZGl2LGRsLGZpZ3VyZSxmaWdjYXB0aW9uLGZvb3RlcixoMSxoMixoMyxoNCxoNSxoNixoZWFkZXIsaGdyb3VwLGhyLGlucyxtYWluLG1hcCxtZW51LG5hdixvbCxwcmUsc2VjdGlvbixzdW1tYXJ5LHRhYmxlLHVsIikpLGxsPW5sKGFsLGVsKCJhLGFiYnIsYWNyb255bSxhdWRpbyxiLGJkaSxiZG8sYmlnLGJyLGNpdGUsY29kZSxkZWwsZGZuLGVtLGZvbnQsaSxpbWcsaW5zLGtiZCxsYWJlbCxtYXAsbWFyayxwaWN0dXJlLHEscnVieSxycCxydCxzLHNhbXAsc21hbGwsc291cmNlLHNwYW4sc3RyaWtlLHN0cm9uZyxzdWIsc3VwLHRpbWUsdHJhY2ssdHQsdSx2YXIsdmlkZW8iKSksY2w9bmwob2wsc2wsbGwscmwpLGRsPWVsKCJiYWNrZ3JvdW5kLGNpdGUsaHJlZixpdGVtdHlwZSxsb25nZGVzYyxwb3N0ZXIsc3JjLHhsaW5rOmhyZWYiKSxwbD1lbCgic3Jjc2V0IiksbWw9ZWwoImFiYnIsYWNjZXNza2V5LGFsaWduLGFsdCxhdXRvcGxheSxheGlzLGJnY29sb3IsYm9yZGVyLGNlbGxwYWRkaW5nLGNlbGxzcGFjaW5nLGNsYXNzLGNsZWFyLGNvbG9yLGNvbHMsY29sc3Bhbixjb21wYWN0LGNvbnRyb2xzLGNvb3JkcyxkYXRldGltZSxkZWZhdWx0LGRpcixkb3dubG9hZCxmYWNlLGhlYWRlcnMsaGVpZ2h0LGhpZGRlbixocmVmbGFuZyxoc3BhY2UsaXNtYXAsaXRlbXNjb3BlLGl0ZW1wcm9wLGtpbmQsbGFiZWwsbGFuZyxsYW5ndWFnZSxsb29wLG1lZGlhLG11dGVkLG5vaHJlZixub3dyYXAsb3BlbixwcmVsb2FkLHJlbCxyZXYscm9sZSxyb3dzLHJvd3NwYW4scnVsZXMsc2NvcGUsc2Nyb2xsaW5nLHNoYXBlLHNpemUsc2l6ZXMsc3BhbixzcmNsYW5nLHN0YXJ0LHN1bW1hcnksdGFiaW5kZXgsdGFyZ2V0LHRpdGxlLHRyYW5zbGF0ZSx0eXBlLHVzZW1hcCx2YWxpZ24sdmFsdWUsdnNwYWNlLHdpZHRoIiksdWw9ZWwoImFyaWEtYWN0aXZlZGVzY2VuZGFudCxhcmlhLWF0b21pYyxhcmlhLWF1dG9jb21wbGV0ZSxhcmlhLWJ1c3ksYXJpYS1jaGVja2VkLGFyaWEtY29sY291bnQsYXJpYS1jb2xpbmRleCxhcmlhLWNvbHNwYW4sYXJpYS1jb250cm9scyxhcmlhLWN1cnJlbnQsYXJpYS1kZXNjcmliZWRieSxhcmlhLWRldGFpbHMsYXJpYS1kaXNhYmxlZCxhcmlhLWRyb3BlZmZlY3QsYXJpYS1lcnJvcm1lc3NhZ2UsYXJpYS1leHBhbmRlZCxhcmlhLWZsb3d0byxhcmlhLWdyYWJiZWQsYXJpYS1oYXNwb3B1cCxhcmlhLWhpZGRlbixhcmlhLWludmFsaWQsYXJpYS1rZXlzaG9ydGN1dHMsYXJpYS1sYWJlbCxhcmlhLWxhYmVsbGVkYnksYXJpYS1sZXZlbCxhcmlhLWxpdmUsYXJpYS1tb2RhbCxhcmlhLW11bHRpbGluZSxhcmlhLW11bHRpc2VsZWN0YWJsZSxhcmlhLW9yaWVudGF0aW9uLGFyaWEtb3ducyxhcmlhLXBsYWNlaG9sZGVyLGFyaWEtcG9zaW5zZXQsYXJpYS1wcmVzc2VkLGFyaWEtcmVhZG9ubHksYXJpYS1yZWxldmFudCxhcmlhLXJlcXVpcmVkLGFyaWEtcm9sZWRlc2NyaXB0aW9uLGFyaWEtcm93Y291bnQsYXJpYS1yb3dpbmRleCxhcmlhLXJvd3NwYW4sYXJpYS1zZWxlY3RlZCxhcmlhLXNldHNpemUsYXJpYS1zb3J0LGFyaWEtdmFsdWVtYXgsYXJpYS12YWx1ZW1pbixhcmlhLXZhbHVlbm93LGFyaWEtdmFsdWV0ZXh0IiksZmw9bmwoZGwscGwsbWwsdWwpLGdsPWVsKCJzY3JpcHQsc3R5bGUsdGVtcGxhdGUiKTtjbGFzcyBobHtjb25zdHJ1Y3Rvcigpe3RoaXMuc2FuaXRpemVkU29tZXRoaW5nPSExLHRoaXMuYnVmPVtdfXNhbml0aXplQ2hpbGRyZW4odCl7bGV0IGU9dC5maXJzdENoaWxkLG49ITA7Zm9yKDtlOylpZihlLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREU/bj10aGlzLnN0YXJ0RWxlbWVudChlKTplLm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREU/dGhpcy5jaGFycyhlLm5vZGVWYWx1ZSk6dGhpcy5zYW5pdGl6ZWRTb21ldGhpbmc9ITAsbiYmZS5maXJzdENoaWxkKWU9ZS5maXJzdENoaWxkO2Vsc2UgZm9yKDtlOyl7ZS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFJiZ0aGlzLmVuZEVsZW1lbnQoZSk7bGV0IHQ9dGhpcy5jaGVja0Nsb2JiZXJlZEVsZW1lbnQoZSxlLm5leHRTaWJsaW5nKTtpZih0KXtlPXQ7YnJlYWt9ZT10aGlzLmNoZWNrQ2xvYmJlcmVkRWxlbWVudChlLGUucGFyZW50Tm9kZSl9cmV0dXJuIHRoaXMuYnVmLmpvaW4oIiIpfXN0YXJ0RWxlbWVudCh0KXtjb25zdCBlPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtpZighY2wuaGFzT3duUHJvcGVydHkoZSkpcmV0dXJuIHRoaXMuc2FuaXRpemVkU29tZXRoaW5nPSEwLCFnbC5oYXNPd25Qcm9wZXJ0eShlKTt0aGlzLmJ1Zi5wdXNoKCI8IiksdGhpcy5idWYucHVzaChlKTtjb25zdCBuPXQuYXR0cmlidXRlcztmb3IobGV0IHQ9MDt0PG4ubGVuZ3RoO3QrKyl7Y29uc3QgZT1uLml0ZW0odCksbz1lLm5hbWUsaT1vLnRvTG93ZXJDYXNlKCk7aWYoIWZsLmhhc093blByb3BlcnR5KGkpKXt0aGlzLnNhbml0aXplZFNvbWV0aGluZz0hMDtjb250aW51ZX1sZXQgYT1lLnZhbHVlO2RsW2ldJiYoYT0kcyhhKSkscGxbaV0mJihhPXRsKGEpKSx0aGlzLmJ1Zi5wdXNoKCIgIixvLCc9IicsX2woYSksJyInKX1yZXR1cm4gdGhpcy5idWYucHVzaCgiPiIpLCEwfWVuZEVsZW1lbnQodCl7Y29uc3QgZT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7Y2wuaGFzT3duUHJvcGVydHkoZSkmJiFvbC5oYXNPd25Qcm9wZXJ0eShlKSYmKHRoaXMuYnVmLnB1c2goIjwvIiksdGhpcy5idWYucHVzaChlKSx0aGlzLmJ1Zi5wdXNoKCI+IikpfWNoYXJzKHQpe3RoaXMuYnVmLnB1c2goX2wodCkpfWNoZWNrQ2xvYmJlcmVkRWxlbWVudCh0LGUpe2lmKGUmJih0LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGUpJk5vZGUuRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTkVEX0JZKT09PU5vZGUuRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTkVEX0JZKXRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHNhbml0aXplIGh0bWwgYmVjYXVzZSB0aGUgZWxlbWVudCBpcyBjbG9iYmVyZWQ6ICR7dC5vdXRlckhUTUx9YCk7cmV0dXJuIGV9fWNvbnN0IGJsPS9bXHVEODAwLVx1REJGRl1bXHVEQzAwLVx1REZGRl0vZyx5bD0vKFteXCMtfiB8IV0pL2c7ZnVuY3Rpb24gX2wodCl7cmV0dXJuIHQucmVwbGFjZSgvJi9nLCImYW1wOyIpLnJlcGxhY2UoYmwsKGZ1bmN0aW9uKHQpe3JldHVybiImIyIrKDEwMjQqKHQuY2hhckNvZGVBdCgwKS01NTI5NikrKHQuY2hhckNvZGVBdCgxKS01NjMyMCkrNjU1MzYpKyI7In0pKS5yZXBsYWNlKHlsLChmdW5jdGlvbih0KXtyZXR1cm4iJiMiK3QuY2hhckNvZGVBdCgwKSsiOyJ9KSkucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7Iil9bGV0IENsO2Z1bmN0aW9uIE1sKHQsZSl7bGV0IG49bnVsbDt0cnl7Q2w9Q2x8fFpzKHQpO2xldCBvPWU/U3RyaW5nKGUpOiIiO249Q2wuZ2V0SW5lcnRCb2R5RWxlbWVudChvKTtsZXQgaT01LGE9bztkb3tpZigwPT09aSl0aHJvdyBuZXcgRXJyb3IoIkZhaWxlZCB0byBzYW5pdGl6ZSBodG1sIGJlY2F1c2UgdGhlIGlucHV0IGlzIHVuc3RhYmxlIik7aS0tLG89YSxhPW4uaW5uZXJIVE1MLG49Q2wuZ2V0SW5lcnRCb2R5RWxlbWVudChvKX13aGlsZShvIT09YSk7Y29uc3Qgcj1uZXcgaGwscz1yLnNhbml0aXplQ2hpbGRyZW4odmwobil8fG4pO3JldHVybigidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmci5zYW5pdGl6ZWRTb21ldGhpbmcmJmNvbnNvbGUud2FybigiV0FSTklORzogc2FuaXRpemluZyBIVE1MIHN0cmlwcGVkIHNvbWUgY29udGVudCwgc2VlIGh0dHBzOi8vZy5jby9uZy9zZWN1cml0eSN4c3MiKSxOcyhzKX1maW5hbGx5e2lmKG4pe2NvbnN0IHQ9dmwobil8fG47Zm9yKDt0LmZpcnN0Q2hpbGQ7KXQucmVtb3ZlQ2hpbGQodC5maXJzdENoaWxkKX19fWZ1bmN0aW9uIHZsKHQpe3JldHVybiJjb250ZW50ImluIHQmJihmdW5jdGlvbiBlKHQpe3JldHVybiB0Lm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJiJURU1QTEFURSI9PT10Lm5vZGVOYW1lfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8pKHQpP3QuY29udGVudDpudWxsfXZhciB4bDtmdW5jdGlvbiBPbCh0KXtjb25zdCBlPXdsKCk7cmV0dXJuIGU/ZS5zYW5pdGl6ZSh4bC5VUkwsdCl8fCIiOllzKHQsIlVSTCIpP0dzKHQpOiRzKFZuKHQpKX1mdW5jdGlvbiBQbCh0KXtjb25zdCBlPXdsKCk7aWYoZSlyZXR1cm4gRnMoZS5zYW5pdGl6ZSh4bC5SRVNPVVJDRV9VUkwsdCl8fCIiKTtpZihZcyh0LCJSZXNvdXJjZVVSTCIpKXJldHVybiBGcyhHcyh0KSk7dGhyb3cgbmV3IEVycm9yKCJ1bnNhZmUgdmFsdWUgdXNlZCBpbiBhIHJlc291cmNlIFVSTCBjb250ZXh0IChzZWUgaHR0cHM6Ly9nLmNvL25nL3NlY3VyaXR5I3hzcykiKX1mdW5jdGlvbiB3bCgpe2NvbnN0IHQ9aWEoKTtyZXR1cm4gdCYmdFsxMl19ZnVuY3Rpb24ga2wodCl7cmV0dXJuIHQubmdEZWJ1Z0NvbnRleHR9ZnVuY3Rpb24gU2wodCl7cmV0dXJuIHQubmdPcmlnaW5hbEVycm9yfWZ1bmN0aW9uIERsKHQsLi4uZSl7dC5lcnJvciguLi5lKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovIShmdW5jdGlvbih0KXt0W3QuTk9ORT0wXT0iTk9ORSIsdFt0LkhUTUw9MV09IkhUTUwiLHRbdC5TVFlMRT0yXT0iU1RZTEUiLHRbdC5TQ1JJUFQ9M109IlNDUklQVCIsdFt0LlVSTD00XT0iVVJMIix0W3QuUkVTT1VSQ0VfVVJMPTVdPSJSRVNPVVJDRV9VUkwifSkoeGx8fCh4bD17fSkpO2NsYXNzIEVse2NvbnN0cnVjdG9yKCl7dGhpcy5fY29uc29sZT1jb25zb2xlfWhhbmRsZUVycm9yKHQpe2NvbnN0IGU9dGhpcy5fZmluZE9yaWdpbmFsRXJyb3IodCksbj10aGlzLl9maW5kQ29udGV4dCh0KSxvPShmdW5jdGlvbiBpKHQpe3JldHVybiB0Lm5nRXJyb3JMb2dnZXJ8fERsfSkodCk7byh0aGlzLl9jb25zb2xlLCJFUlJPUiIsdCksZSYmbyh0aGlzLl9jb25zb2xlLCJPUklHSU5BTCBFUlJPUiIsZSksbiYmbyh0aGlzLl9jb25zb2xlLCJFUlJPUiBDT05URVhUIixuKX1fZmluZENvbnRleHQodCl7cmV0dXJuIHQ/a2wodCk/a2wodCk6dGhpcy5fZmluZENvbnRleHQoU2wodCkpOm51bGx9X2ZpbmRPcmlnaW5hbEVycm9yKHQpe2xldCBlPVNsKHQpO2Zvcig7ZSYmU2woZSk7KWU9U2woZSk7cmV0dXJuIGV9fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jb25zdCBBbD17bmFtZToiY3VzdG9tLWVsZW1lbnRzIn0sUmw9e25hbWU6Im5vLWVycm9ycy1zY2hlbWEifSxUbD0vXj58Xi0+fDwhLS18LS0+fC0tIT58PCEtJC9nLE5sPS8oPHw+KS87ZnVuY3Rpb24gSWwodCl7cmV0dXJuIHQucmVwbGFjZShUbCwodD0+dC5yZXBsYWNlKE5sLCLigIskMeKAiyIpKSl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIHpsKHQpe2lmKCFuZ0Rldk1vZGUpdGhyb3cgbmV3IEVycm9yKCJMb29rcyBsaWtlIHdlIGFyZSBpbiAncHJvZCBtb2RlJywgYnV0IHdlIGFyZSBjcmVhdGluZyBhIG5hbWVkIEFycmF5IHR5cGUsIHdoaWNoIGlzIHdyb25nISBDaGVjayB5b3VyIGNvZGUiKTt0cnl7cmV0dXJuKGZ1bmN0aW9uIGUoLi4udCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGUpdGhyb3cgbmV3IEVycm9yKCJuZXdUcnVzdGVkRnVuY3Rpb25Gb3JEZXYgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCBpbiBwcm9kdWN0aW9uIik7aWYoIUVvLnRydXN0ZWRUeXBlcylyZXR1cm4gbmV3IEZ1bmN0aW9uKC4uLnQpO2NvbnN0IGU9YChmdW5jdGlvbiBhbm9ueW1vdXMoJHt0LnNsaWNlKDAsLTEpLmpvaW4oIiwiKX1cbikgeyAke3RbdC5sZW5ndGgtMV19XG59KWAsbj1Fby5ldmFsKChmdW5jdGlvbiBvKHQpe3ZhciBlO3JldHVybihudWxsPT09KGU9VHMoKSl8fHZvaWQgMD09PWU/dm9pZCAwOmUuY3JlYXRlU2NyaXB0KHQpKXx8dH0pKGUpKTtyZXR1cm4gdm9pZCAwPT09bi5iaW5kP25ldyBGdW5jdGlvbiguLi50KToobi50b1N0cmluZz0oKT0+ZSxuLmJpbmQoRW8pKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovKSgiQXJyYXkiLGByZXR1cm4gY2xhc3MgJHt0fSBleHRlbmRzIEFycmF5e31gKShBcnJheSl9Y2F0Y2godCl7cmV0dXJuIEFycmF5fX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY29uc3QgSGw9LyhbQS1aXSkvZzsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmZ1bmN0aW9uIEZsKHQpe2xldCBlPVhpKHQpO2lmKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpe2NvbnN0IG49ZTtsZXQgbyxpLGE7aWYoKGZ1bmN0aW9uIG4odCl7cmV0dXJuIHQmJnQuY29uc3RydWN0b3ImJnQuY29uc3RydWN0b3IuybVjbXB9KSh0KSl7aWYobz1XbChuLHQpLC0xPT1vKXRocm93IG5ldyBFcnJvcigiVGhlIHByb3ZpZGVkIGNvbXBvbmVudCB3YXMgbm90IGZvdW5kIGluIHRoZSBhcHBsaWNhdGlvbiIpO2k9dH1lbHNlIGlmKChmdW5jdGlvbiBvKHQpe3JldHVybiB0JiZ0LmNvbnN0cnVjdG9yJiZ0LmNvbnN0cnVjdG9yLsm1ZGlyfSkodCkpe2lmKG89KGZ1bmN0aW9uIGkodCxlKXtsZXQgbj10WzFdLmZpcnN0Q2hpbGQ7Zm9yKDtuOyl7Y29uc3Qgbz1uLmRpcmVjdGl2ZUVuZDtmb3IobGV0IGk9bi5kaXJlY3RpdmVTdGFydDtpPG87aSsrKWlmKHRbaV09PT1lKXJldHVybiBuLmluZGV4O249VWwobil9cmV0dXJuLTF9KShuLHQpLC0xPT1vKXRocm93IG5ldyBFcnJvcigiVGhlIHByb3ZpZGVkIGRpcmVjdGl2ZSB3YXMgbm90IGZvdW5kIGluIHRoZSBhcHBsaWNhdGlvbiIpO2E9R2wobyxuLCExKX1lbHNlIGlmKG89amwobix0KSwtMT09bylyZXR1cm4gbnVsbDtjb25zdCByPVVpKG5bb10pLHM9WGkociksbD1zJiYhQXJyYXkuaXNBcnJheShzKT9zOkxsKG4sbyxyKTtpZihpJiZ2b2lkIDA9PT1sLmNvbXBvbmVudCYmKGwuY29tcG9uZW50PWksVmwobC5jb21wb25lbnQsbCkpLGEmJnZvaWQgMD09PWwuZGlyZWN0aXZlcyl7bC5kaXJlY3RpdmVzPWE7Zm9yKGxldCB0PTA7dDxhLmxlbmd0aDt0KyspVmwoYVt0XSxsKX1WbChsLm5hdGl2ZSxsKSxlPWx9fWVsc2V7Y29uc3Qgbj10O25nRGV2TW9kZSYmYW8obik7bGV0IG89bjtmb3IoO289by5wYXJlbnROb2RlOyl7Y29uc3QgdD1YaShvKTtpZih0KXtsZXQgbztpZihvPUFycmF5LmlzQXJyYXkodCk/dDp0LmxWaWV3LCFvKXJldHVybiBudWxsO2NvbnN0IGk9amwobyxuKTtpZihpPj0wKXtjb25zdCB0PVVpKG9baV0pLG49TGwobyxpLHQpO1ZsKHQsbiksZT1uO2JyZWFrfX19fXJldHVybiBlfHxudWxsfWZ1bmN0aW9uIExsKHQsZSxuKXtyZXR1cm57bFZpZXc6dCxub2RlSW5kZXg6ZSxuYXRpdmU6bixjb21wb25lbnQ6dm9pZCAwLGRpcmVjdGl2ZXM6dm9pZCAwLGxvY2FsUmVmczp2b2lkIDB9fWZ1bmN0aW9uIEJsKHQpe2xldCBlLG49WGkodCk7aWYoQXJyYXkuaXNBcnJheShuKSl7Y29uc3Qgbz1XbChuLHQpO2U9WmkobyxuKTtjb25zdCBpPUxsKG4sbyxlWzBdKTtpLmNvbXBvbmVudD10LFZsKHQsaSksVmwoaS5uYXRpdmUsaSl9ZWxzZSBlPVppKG4ubm9kZUluZGV4LG4ubFZpZXcpO3JldHVybiBlfWZ1bmN0aW9uIFZsKHQsZSl7dC5fX25nQ29udGV4dF9fPWV9ZnVuY3Rpb24gamwodCxlKXtjb25zdCBuPXRbMV07Zm9yKGxldCBvPW9pO288bi5iaW5kaW5nU3RhcnRJbmRleDtvKyspaWYoVWkodFtvXSk9PT1lKXJldHVybiBvO3JldHVybi0xfWZ1bmN0aW9uIFVsKHQpe2lmKHQuY2hpbGQpcmV0dXJuIHQuY2hpbGQ7aWYodC5uZXh0KXJldHVybiB0Lm5leHQ7Zm9yKDt0LnBhcmVudCYmIXQucGFyZW50Lm5leHQ7KXQ9dC5wYXJlbnQ7cmV0dXJuIHQucGFyZW50JiZ0LnBhcmVudC5uZXh0fWZ1bmN0aW9uIFdsKHQsZSl7Y29uc3Qgbj10WzFdLmNvbXBvbmVudHM7aWYobilmb3IobGV0IG89MDtvPG4ubGVuZ3RoO28rKyl7Y29uc3QgaT1uW29dO2lmKFppKGksdClbOF09PT1lKXJldHVybiBpfWVsc2UgaWYoWmkob2ksdClbOF09PT1lKXJldHVybiBvaTtyZXR1cm4tMX1mdW5jdGlvbiBHbCh0LGUsbil7Y29uc3Qgbz1lWzFdLmRhdGFbdF07bGV0IGk9by5kaXJlY3RpdmVTdGFydDtyZXR1cm4gMD09aT9ObzooIW4mJjImby5mbGFncyYmaSsrLGUuc2xpY2UoaSxvLmRpcmVjdGl2ZUVuZCkpfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3QgWWw9KCJ1bmRlZmluZWQiIT10eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lJiZyZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHNldFRpbWVvdXQpLmJpbmQoRW8pO2Z1bmN0aW9uIHFsKHQpe3JldHVybntuYW1lOiJ3aW5kb3ciLHRhcmdldDp0Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd9fWZ1bmN0aW9uIFpsKHQpe3JldHVybntuYW1lOiJkb2N1bWVudCIsdGFyZ2V0OnQub3duZXJEb2N1bWVudH19ZnVuY3Rpb24gWGwodCl7cmV0dXJue25hbWU6ImJvZHkiLHRhcmdldDp0Lm93bmVyRG9jdW1lbnQuYm9keX19Y29uc3QgS2w9Iu+/vSI7ZnVuY3Rpb24gSmwodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBGdW5jdGlvbj90KCk6dH0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovZnVuY3Rpb24gUWwodCl7dGhyb3cgbmV3IEZuKCIzMDAiLGBNdWx0aXBsZSBjb21wb25lbnRzIG1hdGNoIG5vZGUgd2l0aCB0YWduYW1lICR7dC52YWx1ZX1gKX1mdW5jdGlvbiAkbCh0LGUsbixvLGkpe2NvbnN0W2EsciwuLi5zXT1vLnNwbGl0KEtsKTtsZXQgbD1yLGM9cjtmb3IobGV0IG89MDtvPHMubGVuZ3RoO28rKyl7Y29uc3QgYT1lK287bCs9YCR7dFthXX0ke3Nbb119YCxjKz1gJHthPT09bj9pOnRbYV19JHtzW29dfWB9cmV0dXJue3Byb3BOYW1lOmEsb2xkVmFsdWU6bCxuZXdWYWx1ZTpjfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCnZhciB0YzsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmxldCBlYztmdW5jdGlvbiBuYyh0LGUpe3JldHVybiBlYyh0LGUpfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KZnVuY3Rpb24gb2ModCl7bmdEZXZNb2RlJiZfaSh0KTtjb25zdCBlPXRbM107cmV0dXJuIHNpKGUpP2VbM106ZX1mdW5jdGlvbiBpYyh0KXtjb25zdCBlPShmdW5jdGlvbiBuKHQpe25nRGV2TW9kZSYmb28odCwiY29tcG9uZW50Iik7bGV0IGU9cmkodCk/dDpLaSh0KTtmb3IoO2UmJiEoNTEyJmVbMl0pOyllPW9jKGUpO3JldHVybiBuZ0Rldk1vZGUmJl9pKGUpLGV9KSh0KTtyZXR1cm4gbmdEZXZNb2RlJiZvbyhlWzhdLCJSb290VmlldyBoYXMgbm8gY29udGV4dC4gUGVyaGFwcyBpdCBpcyBkaXNjb25uZWN0ZWQ/IiksZVs4XX1mdW5jdGlvbiBhYyh0KXtyZXR1cm4gc2ModFsxM10pfWZ1bmN0aW9uIHJjKHQpe3JldHVybiBzYyh0WzRdKX1mdW5jdGlvbiBzYyh0KXtmb3IoO251bGwhPT10JiYhc2kodCk7KXQ9dFs0XTtyZXR1cm4gdH1mdW5jdGlvbiBsYyh0LGUsbixvLGkpe2lmKG51bGwhPW8pe2xldCBhLHI9ITE7c2kobyk/YT1vOnJpKG8pJiYocj0hMCxuZ0Rldk1vZGUmJm9vKG9bMF0sIkhPU1QgbXVzdCBiZSBkZWZpbmVkIGZvciBhIGNvbXBvbmVudCBMVmlldyIpLG89b1swXSk7Y29uc3Qgcz1VaShvKTtuZ0Rldk1vZGUmJiFWaShlKSYmYW8ocyksMD09PXQmJm51bGwhPT1uP251bGw9PWk/Q2MoZSxuLHMpOl9jKGUsbixzLGl8fG51bGwsITApOjE9PT10JiZudWxsIT09bj9fYyhlLG4scyxpfHxudWxsLCEwKToyPT09dD9SYyhlLHMscik6Mz09PXQmJihuZ0Rldk1vZGUmJm5nRGV2TW9kZS5yZW5kZXJlckRlc3Ryb3lOb2RlKyssZS5kZXN0cm95Tm9kZShzKSksbnVsbCE9YSYmKGZ1bmN0aW9uIGEodCxlLG4sbyxpKXtuZ0Rldk1vZGUmJmJpKG4pO2NvbnN0IGE9bls3XTthIT09VWkobikmJmxjKGUsdCxvLGEsaSk7Zm9yKGxldCBpPWFpO2k8bi5sZW5ndGg7aSsrKXtjb25zdCByPW5baV07TmMoclsxXSxyLHQsZSxvLGEpfX0pKGUsdCxhLG4saSl9fWZ1bmN0aW9uIGNjKHQsZSl7cmV0dXJuIG5nRGV2TW9kZSYmbmdEZXZNb2RlLnJlbmRlcmVyQ3JlYXRlVGV4dE5vZGUrKyxuZ0Rldk1vZGUmJm5nRGV2TW9kZS5yZW5kZXJlclNldFRleHQrKyxWaSh0KT90LmNyZWF0ZVRleHQoZSk6dC5jcmVhdGVUZXh0Tm9kZShlKX1mdW5jdGlvbiBkYyh0LGUsbil7bmdEZXZNb2RlJiZuZ0Rldk1vZGUucmVuZGVyZXJTZXRUZXh0KyssVmkodCk/dC5zZXRWYWx1ZShlLG4pOmUudGV4dENvbnRlbnQ9bn1mdW5jdGlvbiBwYyh0LGUpe3JldHVybiBuZ0Rldk1vZGUmJm5nRGV2TW9kZS5yZW5kZXJlckNyZWF0ZUNvbW1lbnQrKyx0LmNyZWF0ZUNvbW1lbnQoSWwoZSkpfWZ1bmN0aW9uIG1jKHQsZSxuKXtyZXR1cm4gbmdEZXZNb2RlJiZuZ0Rldk1vZGUucmVuZGVyZXJDcmVhdGVFbGVtZW50KyssVmkodCk/dC5jcmVhdGVFbGVtZW50KGUsbik6bnVsbD09PW4/dC5jcmVhdGVFbGVtZW50KGUpOnQuY3JlYXRlRWxlbWVudE5TKG4sZSl9ZnVuY3Rpb24gdWModCxlKXtuZ0Rldk1vZGUmJmJpKHQpLG5nRGV2TW9kZSYmb28odFs5XSwiQSBwcm9qZWN0ZWQgdmlldyBzaG91bGQgYmVsb25nIHRvIGEgbm9uLWVtcHR5IHByb2plY3RlZCB2aWV3cyBjb2xsZWN0aW9uIik7Y29uc3Qgbj10WzldLG89bi5pbmRleE9mKGUpLGk9ZVszXTtuZ0Rldk1vZGUmJmJpKGkpLDEwMjQmZVsyXSYmKGVbMl0mPS0xMDI1LGVhKGksLTEpKSxuLnNwbGljZShvLDEpfWZ1bmN0aW9uIGZjKHQsZSl7aWYodC5sZW5ndGg8PWFpKXJldHVybjtjb25zdCBuPWFpK2Usbz10W25dO2lmKG8pe2NvbnN0IGk9b1sxN107bnVsbCE9PWkmJmkhPT10JiZ1YyhpLG8pLGU+MCYmKHRbbi0xXVs0XT1vWzRdKTtjb25zdCBhPVpyKHQsYWkrZSk7IShmdW5jdGlvbiBpKHQsZSl7TmModCxlLGVbMTFdLDIsbnVsbCxudWxsKSxlWzBdPW51bGwsZVs2XT1udWxsfSkob1sxXSxvKTtjb25zdCByPWFbMTldO251bGwhPT1yJiZyLmRldGFjaFZpZXcoYVsxXSksb1szXT1udWxsLG9bNF09bnVsbCxvWzJdJj0tMTI5fXJldHVybiBvfWZ1bmN0aW9uIGdjKHQsZSl7aWYoISgyNTYmZVsyXSkpe2NvbnN0IG49ZVsxMV07VmkobikmJm4uZGVzdHJveU5vZGUmJk5jKHQsZSxuLDMsbnVsbCxudWxsKSwoZnVuY3Rpb24gbih0KXtsZXQgZT10WzEzXTtpZighZSlyZXR1cm4gaGModFsxXSx0KTtmb3IoO2U7KXtsZXQgbj1udWxsO2lmKHJpKGUpKW49ZVsxM107ZWxzZXtuZ0Rldk1vZGUmJmJpKGUpO2NvbnN0IHQ9ZVsxMF07dCYmKG49dCl9aWYoIW4pe2Zvcig7ZSYmIWVbNF0mJmUhPT10OylyaShlKSYmaGMoZVsxXSxlKSxlPWVbM107bnVsbD09PWUmJihlPXQpLHJpKGUpJiZoYyhlWzFdLGUpLG49ZSYmZVs0XX1lPW59fSkoZSl9fWZ1bmN0aW9uIGhjKHQsZSl7aWYoISgyNTYmZVsyXSkpe2VbMl0mPS0xMjksZVsyXXw9MjU2LChmdW5jdGlvbiBuKHQsZSl7bGV0IG47aWYobnVsbCE9dCYmbnVsbCE9KG49dC5kZXN0cm95SG9va3MpKWZvcihsZXQgdD0wO3Q8bi5sZW5ndGg7dCs9Mil7Y29uc3Qgbz1lW25bdF1dO2lmKCEobyBpbnN0YW5jZW9mIFlhKSl7Y29uc3QgZT1uW3QrMV07aWYoQXJyYXkuaXNBcnJheShlKSlmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrPTIpe2NvbnN0IG49b1tlW3RdXSxpPWVbdCsxXTtJaSg0LG4saSk7dHJ5e2kuY2FsbChuKX1maW5hbGx5e0lpKDUsbixpKX19ZWxzZXtJaSg0LG8sZSk7dHJ5e2UuY2FsbChvKX1maW5hbGx5e0lpKDUsbyxlKX19fX19KSh0LGUpLChmdW5jdGlvbiBvKHQsZSl7Y29uc3Qgbj10LmNsZWFudXAsbz1lWzddO2xldCBpPS0xO2lmKG51bGwhPT1uKWZvcihsZXQgdD0wO3Q8bi5sZW5ndGgtMTt0Kz0yKWlmKCJzdHJpbmciPT10eXBlb2Ygblt0XSl7Y29uc3QgYT1uW3QrMV0scj0iZnVuY3Rpb24iPT10eXBlb2YgYT9hKGUpOlVpKGVbYV0pLHM9b1tpPW5bdCsyXV0sbD1uW3QrM107ImJvb2xlYW4iPT10eXBlb2YgbD9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoblt0XSxzLGwpOmw+PTA/b1tpPWxdKCk6b1tpPS1sXS51bnN1YnNjcmliZSgpLHQrPTJ9ZWxzZXtjb25zdCBlPW9baT1uW3QrMV1dO25bdF0uY2FsbChlKX1pZihudWxsIT09byl7Zm9yKGxldCB0PWkrMTt0PG8ubGVuZ3RoO3QrKyl7Y29uc3QgZT1vW3RdO25nRGV2TW9kZSYmKCJFeHBlY3RpbmcgaW5zdGFuY2UgY2xlYW51cCBmdW5jdGlvbi4iLCJmdW5jdGlvbiIhPXR5cGVvZihhPWUpJiZpbygiRXhwZWN0aW5nIGluc3RhbmNlIGNsZWFudXAgZnVuY3Rpb24uIixudWxsPT09YT8ibnVsbCI6dHlwZW9mIGEsImZ1bmN0aW9uIiwiPT09IikpLGUoKX1lWzddPW51bGx9dmFyIGF9KSh0LGUpLDE9PT1lWzFdLnR5cGUmJlZpKGVbMTFdKSYmKG5nRGV2TW9kZSYmbmdEZXZNb2RlLnJlbmRlcmVyRGVzdHJveSsrLGVbMTFdLmRlc3Ryb3koKSk7Y29uc3Qgbj1lWzE3XTtpZihudWxsIT09biYmc2koZVszXSkpe24hPT1lWzNdJiZ1YyhuLGUpO2NvbnN0IG89ZVsxOV07bnVsbCE9PW8mJm8uZGV0YWNoVmlldyh0KX19fWZ1bmN0aW9uIGJjKHQsZSxuKXtyZXR1cm4geWModCxlLnBhcmVudCxuKX1mdW5jdGlvbiB5Yyh0LGUsbil7bGV0IG89ZTtmb3IoO251bGwhPT1vJiY0MCZvLnR5cGU7KW89KGU9bykucGFyZW50O2lmKG51bGw9PT1vKXJldHVybiBuWzBdO2lmKG5nRGV2TW9kZSYmWmEobyw3KSwyJm8uZmxhZ3Mpe25nRGV2TW9kZSYmbWkobyxuKTtjb25zdCBlPXQuZGF0YVtvLmRpcmVjdGl2ZVN0YXJ0XS5lbmNhcHN1bGF0aW9uO2lmKGU9PT1Qby5Ob25lfHxlPT09UG8uRW11bGF0ZWQpcmV0dXJuIG51bGx9cmV0dXJuIEdpKG8sbil9ZnVuY3Rpb24gX2ModCxlLG4sbyxpKXtuZ0Rldk1vZGUmJm5nRGV2TW9kZS5yZW5kZXJlckluc2VydEJlZm9yZSsrLFZpKHQpP3QuaW5zZXJ0QmVmb3JlKGUsbixvLGkpOmUuaW5zZXJ0QmVmb3JlKG4sbyxpKX1mdW5jdGlvbiBDYyh0LGUsbil7bmdEZXZNb2RlJiZuZ0Rldk1vZGUucmVuZGVyZXJBcHBlbmRDaGlsZCsrLG5nRGV2TW9kZSYmb28oZSwicGFyZW50IG5vZGUgbXVzdCBiZSBkZWZpbmVkIiksVmkodCk/dC5hcHBlbmRDaGlsZChlLG4pOmUuYXBwZW5kQ2hpbGQobil9ZnVuY3Rpb24gTWModCxlLG4sbyxpKXtudWxsIT09bz9fYyh0LGUsbixvLGkpOkNjKHQsZSxuKX1mdW5jdGlvbiB2Yyh0LGUpe3JldHVybiBWaSh0KT90LnBhcmVudE5vZGUoZSk6ZS5wYXJlbnROb2RlfWZ1bmN0aW9uIHhjKHQsZSxuKXtyZXR1cm4gd2ModCxlLG4pfWZ1bmN0aW9uIE9jKHQsZSxuKXtyZXR1cm4gNDAmdC50eXBlP0dpKHQsbik6bnVsbH0hKGZ1bmN0aW9uKHQpe3RbdC5JbXBvcnRhbnQ9MV09IkltcG9ydGFudCIsdFt0LkRhc2hDYXNlPTJdPSJEYXNoQ2FzZSJ9KSh0Y3x8KHRjPXt9KSk7bGV0IFBjLHdjPU9jO2Z1bmN0aW9uIGtjKHQsZSl7d2M9dCxQYz1lfWZ1bmN0aW9uIFNjKHQsZSxuLG8pe2NvbnN0IGk9YmModCxvLGUpLGE9ZVsxMV0scj14YyhvLnBhcmVudHx8ZVs2XSxvLGUpO2lmKG51bGwhPWkpaWYoQXJyYXkuaXNBcnJheShuKSlmb3IobGV0IHQ9MDt0PG4ubGVuZ3RoO3QrKylNYyhhLGksblt0XSxyLCExKTtlbHNlIE1jKGEsaSxuLHIsITEpO3ZvaWQgMCE9PVBjJiZQYyhhLG8sZSxuLGkpfWZ1bmN0aW9uIERjKHQsZSl7aWYobnVsbCE9PWUpe25nRGV2TW9kZSYmWmEoZSw2Myk7Y29uc3Qgbj1lLnR5cGU7aWYoMyZuKXJldHVybiBHaShlLHQpO2lmKDQmbilyZXR1cm4gQWMoLTEsdFtlLmluZGV4XSk7aWYoOCZuKXtjb25zdCBuPWUuY2hpbGQ7aWYobnVsbCE9PW4pcmV0dXJuIERjKHQsbik7e2NvbnN0IG49dFtlLmluZGV4XTtyZXR1cm4gc2kobik/QWMoLTEsbik6VWkobil9fWlmKDMyJm4pcmV0dXJuIG5jKGUsdCkoKXx8VWkodFtlLmluZGV4XSk7e2NvbnN0IG49RWModCxlKTtpZihudWxsIT09bil7aWYoQXJyYXkuaXNBcnJheShuKSlyZXR1cm4gblswXTtjb25zdCBlPW9jKHRbMTZdKTtyZXR1cm4gbmdEZXZNb2RlJiZPaShlKSxEYyhlLG4pfXJldHVybiBEYyh0LGUubmV4dCl9fXJldHVybiBudWxsfWZ1bmN0aW9uIEVjKHQsZSl7aWYobnVsbCE9PWUpe2NvbnN0IG49dFsxNl1bNl0sbz1lLnByb2plY3Rpb247cmV0dXJuIG5nRGV2TW9kZSYmKGZ1bmN0aW9uIG4odCxlKXtvbyh0WzE2XSwiQ29tcG9uZW50IHZpZXdzIHNob3VsZCBleGlzdC4iKSxvbyh0WzE2XVs2XS5wcm9qZWN0aW9uLGV8fCJDb21wb25lbnRzIHdpdGggcHJvamVjdGlvbiBub2RlcyAoPG5nLWNvbnRlbnQ+KSBtdXN0IGhhdmUgcHJvamVjdGlvbiBzbG90cyBkZWZpbmVkLiIpfSkodCksbi5wcm9qZWN0aW9uW29dfXJldHVybiBudWxsfWZ1bmN0aW9uIEFjKHQsZSl7Y29uc3Qgbj1haSt0KzE7aWYobjxlLmxlbmd0aCl7Y29uc3QgdD1lW25dLG89dFsxXS5maXJzdENoaWxkO2lmKG51bGwhPT1vKXJldHVybiBEYyh0LG8pfXJldHVybiBlWzddfWZ1bmN0aW9uIFJjKHQsZSxuKXtuZ0Rldk1vZGUmJm5nRGV2TW9kZS5yZW5kZXJlclJlbW92ZU5vZGUrKztjb25zdCBvPXZjKHQsZSk7byYmKGZ1bmN0aW9uIGkodCxlLG4sbyl7VmkodCk/dC5yZW1vdmVDaGlsZChlLG4sbyk6ZS5yZW1vdmVDaGlsZChuKX0pKHQsbyxlLG4pfWZ1bmN0aW9uIFRjKHQsZSxuLG8saSxhLHIpe2Zvcig7bnVsbCE9bjspe25nRGV2TW9kZSYmbWkobixvKSxuZ0Rldk1vZGUmJlphKG4sNjMpO2NvbnN0IHM9b1tuLmluZGV4XSxsPW4udHlwZTtpZihyJiYwPT09ZSYmKHMmJlZsKFVpKHMpLG8pLG4uZmxhZ3N8PTQpLDY0IT0oNjQmbi5mbGFncykpaWYoOCZsKVRjKHQsZSxuLmNoaWxkLG8saSxhLCExKSxsYyhlLHQsaSxzLGEpO2Vsc2UgaWYoMzImbCl7Y29uc3Qgcj1uYyhuLG8pO2xldCBsO2Zvcig7bD1yKCk7KWxjKGUsdCxpLGwsYSk7bGMoZSx0LGkscyxhKX1lbHNlIDE2Jmw/SWModCxlLG8sbixpLGEpOihuZ0Rldk1vZGUmJlphKG4sNyksbGMoZSx0LGkscyxhKSk7bj1yP24ucHJvamVjdGlvbk5leHQ6bi5uZXh0fX1mdW5jdGlvbiBOYyh0LGUsbixvLGksYSl7VGMobixvLHQuZmlyc3RDaGlsZCxlLGksYSwhMSl9ZnVuY3Rpb24gSWModCxlLG4sbyxpLGEpe2NvbnN0IHI9blsxNl0scz1yWzZdO25nRGV2TW9kZSYmWG4odHlwZW9mIG8ucHJvamVjdGlvbiwibnVtYmVyIiwiZXhwZWN0aW5nIHByb2plY3Rpb24gaW5kZXgiKTtjb25zdCBsPXMucHJvamVjdGlvbltvLnByb2plY3Rpb25dO2lmKEFycmF5LmlzQXJyYXkobCkpZm9yKGxldCBuPTA7bjxsLmxlbmd0aDtuKyspbGMoZSx0LGksbFtuXSxhKTtlbHNlIFRjKHQsZSxsLHJbM10saSxhLCEwKX1mdW5jdGlvbiB6Yyh0LGUsbil7bmdEZXZNb2RlJiZabihuLCInbmV3VmFsdWUnIHNob3VsZCBiZSBhIHN0cmluZyIpLFZpKHQpP3Quc2V0QXR0cmlidXRlKGUsInN0eWxlIixuKTplLnN0eWxlLmNzc1RleHQ9bixuZ0Rldk1vZGUmJm5nRGV2TW9kZS5yZW5kZXJlclNldFN0eWxlKyt9ZnVuY3Rpb24gSGModCxlLG4pe25nRGV2TW9kZSYmWm4obiwiJ25ld1ZhbHVlJyBzaG91bGQgYmUgYSBzdHJpbmciKSxWaSh0KT8iIj09PW4/dC5yZW1vdmVBdHRyaWJ1dGUoZSwiY2xhc3MiKTp0LnNldEF0dHJpYnV0ZShlLCJjbGFzcyIsbik6ZS5jbGFzc05hbWU9bixuZ0Rldk1vZGUmJm5nRGV2TW9kZS5yZW5kZXJlclNldENsYXNzTmFtZSsrfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiBGYyh0LGUsbil7bmdEZXZNb2RlJiZLbihlLCIiLCdjYW4gbm90IGxvb2sgZm9yICIiIHN0cmluZy4nKTtsZXQgbz10Lmxlbmd0aDtmb3IoOzspe2NvbnN0IGk9dC5pbmRleE9mKGUsbik7aWYoLTE9PT1pKXJldHVybiBpO2lmKDA9PT1pfHx0LmNoYXJDb2RlQXQoaS0xKTw9MzIpe2NvbnN0IG49ZS5sZW5ndGg7aWYoaStuPT09b3x8dC5jaGFyQ29kZUF0KGkrbik8PTMyKXJldHVybiBpfW49aSsxfX1jb25zdCBMYz0ibmctdGVtcGxhdGUiO2Z1bmN0aW9uIEJjKHQsZSxuKXtuZ0Rldk1vZGUmJlhuKGUsZS50b0xvd2VyQ2FzZSgpLCJDbGFzcyBuYW1lIGV4cGVjdGVkIHRvIGJlIGxvd2VyY2FzZS4iKTtsZXQgbz0wO2Zvcig7bzx0Lmxlbmd0aDspe2xldCBpPXRbbysrXTtpZihuJiYiY2xhc3MiPT09aSl7aWYoaT10W29dLC0xIT09RmMoaS50b0xvd2VyQ2FzZSgpLGUsMCkpcmV0dXJuITB9ZWxzZSBpZigxPT09aSl7Zm9yKDtvPHQubGVuZ3RoJiYic3RyaW5nIj09dHlwZW9mKGk9dFtvKytdKTspaWYoaS50b0xvd2VyQ2FzZSgpPT09ZSlyZXR1cm4hMDtyZXR1cm4hMX19cmV0dXJuITF9ZnVuY3Rpb24gVmModCl7cmV0dXJuIDQ9PT10LnR5cGUmJnQudmFsdWUhPT1MY31mdW5jdGlvbiBqYyh0LGUsbil7cmV0dXJuIGU9PT0oNCE9PXQudHlwZXx8bj90LnZhbHVlOkxjKX1mdW5jdGlvbiBVYyh0LGUsbil7bmdEZXZNb2RlJiZvbyhlWzBdLCJTZWxlY3RvciBzaG91bGQgaGF2ZSBhIHRhZyBuYW1lIik7bGV0IG89NDtjb25zdCBpPXQuYXR0cnN8fFtdLGE9KGZ1bmN0aW9uIHIodCl7Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspaWYoS2EodFtlXSkpcmV0dXJuIGU7cmV0dXJuIHQubGVuZ3RofSkoaSk7bGV0IHM9ITE7Zm9yKGxldCByPTA7cjxlLmxlbmd0aDtyKyspe2NvbnN0IGw9ZVtyXTtpZigibnVtYmVyIiE9dHlwZW9mIGwpe2lmKCFzKWlmKDQmbyl7aWYobz0yfDEmbywiIiE9PWwmJiFqYyh0LGwsbil8fCIiPT09bCYmMT09PWUubGVuZ3RoKXtpZihXYyhvKSlyZXR1cm4hMTtzPSEwfX1lbHNle2NvbnN0IGM9OCZvP2w6ZVsrK3JdO2lmKDgmbyYmbnVsbCE9PXQuYXR0cnMpe2lmKCFCYyh0LmF0dHJzLGMsbikpe2lmKFdjKG8pKXJldHVybiExO3M9ITB9Y29udGludWV9Y29uc3QgZD1HYyg4Jm8/ImNsYXNzIjpsLGksVmModCksbik7aWYoLTE9PT1kKXtpZihXYyhvKSlyZXR1cm4hMTtzPSEwO2NvbnRpbnVlfWlmKCIiIT09Yyl7bGV0IHQ7ZD5hP3Q9IiI6KG5nRGV2TW9kZSYmS24oaVtkXSwwLCJXZSBkbyBub3QgbWF0Y2ggZGlyZWN0aXZlcyBvbiBuYW1lc3BhY2VkIGF0dHJpYnV0ZXMiKSx0PWlbZCsxXS50b0xvd2VyQ2FzZSgpKTtjb25zdCBlPTgmbz90Om51bGw7aWYoZSYmLTEhPT1GYyhlLGMsMCl8fDImbyYmYyE9PXQpe2lmKFdjKG8pKXJldHVybiExO3M9ITB9fX19ZWxzZXtpZighcyYmIVdjKG8pJiYhV2MobCkpcmV0dXJuITE7aWYocyYmV2MobCkpY29udGludWU7cz0hMSxvPWx8MSZvfX1yZXR1cm4gV2Mobyl8fHN9ZnVuY3Rpb24gV2ModCl7cmV0dXJuIDA9PSgxJnQpfWZ1bmN0aW9uIEdjKHQsZSxuLG8pe2lmKG51bGw9PT1lKXJldHVybi0xO2xldCBpPTA7aWYob3x8IW4pe2xldCBuPSExO2Zvcig7aTxlLmxlbmd0aDspe2NvbnN0IG89ZVtpXTtpZihvPT09dClyZXR1cm4gaTtpZigzPT09b3x8Nj09PW8pbj0hMDtlbHNle2lmKDE9PT1vfHwyPT09byl7bGV0IHQ9ZVsrK2ldO2Zvcig7InN0cmluZyI9PXR5cGVvZiB0Oyl0PWVbKytpXTtjb250aW51ZX1pZig0PT09bylicmVhaztpZigwPT09byl7aSs9NDtjb250aW51ZX19aSs9bj8xOjJ9cmV0dXJuLTF9cmV0dXJuKGZ1bmN0aW9uIGEodCxlKXtsZXQgbj10LmluZGV4T2YoNCk7aWYobj4tMSlmb3IobisrO248dC5sZW5ndGg7KXtjb25zdCBvPXRbbl07aWYoIm51bWJlciI9PXR5cGVvZiBvKXJldHVybi0xO2lmKG89PT1lKXJldHVybiBuO24rK31yZXR1cm4tMX0pKGUsdCl9ZnVuY3Rpb24gWWModCxlLG49ITEpe2ZvcihsZXQgbz0wO288ZS5sZW5ndGg7bysrKWlmKFVjKHQsZVtvXSxuKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBxYyh0LGUpe3Q6Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspe2NvbnN0IG89ZVtuXTtpZih0Lmxlbmd0aD09PW8ubGVuZ3RoKXtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKylpZih0W2VdIT09b1tlXSljb250aW51ZSB0O3JldHVybiEwfX1yZXR1cm4hMX1mdW5jdGlvbiBaYyh0LGUpe3JldHVybiB0PyI6bm90KCIrZS50cmltKCkrIikiOmV9ZnVuY3Rpb24gWGModCl7bGV0IGU9dFswXSxuPTEsbz0yLGk9IiIsYT0hMTtmb3IoO248dC5sZW5ndGg7KXtsZXQgcj10W25dO2lmKCJzdHJpbmciPT10eXBlb2YgcilpZigyJm8pe2NvbnN0IGU9dFsrK25dO2krPSJbIityKyhlLmxlbmd0aD4wPyc9IicrZSsnIic6IiIpKyJdIn1lbHNlIDgmbz9pKz0iLiIrcjo0Jm8mJihpKz0iICIrcik7ZWxzZSIiPT09aXx8V2Mocil8fChlKz1aYyhhLGkpLGk9IiIpLG89cixhPWF8fCFXYyhvKTtuKyt9cmV0dXJuIiIhPT1pJiYoZSs9WmMoYSxpKSksZX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IEtjPSJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGU/e19fYnJhbmRfXzoiTk9fQ0hBTkdFIn06e307Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIEpjKHQpe25nRGV2TW9kZSYmZW8odCwwLCJDYW4gb25seSBhZHZhbmNlIGZvcndhcmQiKSxRYyhhYSgpLGlhKCksTmEoKSt0LHVhKCkpfWZ1bmN0aW9uIFFjKHQsZSxuLG8pe2lmKG5nRGV2TW9kZSYmKGZ1bmN0aW9uIGkodCxlKXt4aShvaSx0WzFdLmJpbmRpbmdTdGFydEluZGV4LGUpfSkoZSxuKSwhbylpZigzPT0oMyZlWzJdKSl7Y29uc3Qgbz10LnByZU9yZGVyQ2hlY2tIb29rcztudWxsIT09byYmQmEoZSxvLG4pfWVsc2V7Y29uc3Qgbz10LnByZU9yZGVySG9va3M7bnVsbCE9PW8mJlZhKGUsbywwLG4pfUlhKG4pfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiAkYyh0LGUpe3JldHVybiBuZ0Rldk1vZGUmJnFuKHQsMCwzMjc2NyksbmdEZXZNb2RlJiZxbihlLDAsMzI3NjcpLHQ8PDE3fGU8PDJ9ZnVuY3Rpb24gdGQodCl7cmV0dXJuIG5nRGV2TW9kZSYmWW4odCwiZXhwZWN0ZWQgbnVtYmVyIiksdD4+MTcmMzI3Njd9ZnVuY3Rpb24gZWQodCl7cmV0dXJuIG5nRGV2TW9kZSYmWW4odCwiZXhwZWN0ZWQgbnVtYmVyIiksMj09KDImdCl9ZnVuY3Rpb24gbmQodCl7cmV0dXJuIG5nRGV2TW9kZSYmWW4odCwiZXhwZWN0ZWQgbnVtYmVyIiksMnx0fWZ1bmN0aW9uIG9kKHQpe3JldHVybiBuZ0Rldk1vZGUmJlluKHQsImV4cGVjdGVkIG51bWJlciIpLCgxMzEwNjgmdCk+PjJ9ZnVuY3Rpb24gaWQodCxlKXtyZXR1cm4gbmdEZXZNb2RlJiZZbih0LCJleHBlY3RlZCBudW1iZXIiKSxuZ0Rldk1vZGUmJnFuKGUsMCwzMjc2NyksLTEzMTA2OSZ0fGU8PDJ9ZnVuY3Rpb24gYWQodCl7cmV0dXJuIG5nRGV2TW9kZSYmWW4odCwiZXhwZWN0ZWQgbnVtYmVyIiksMT09KDEmdCl9ZnVuY3Rpb24gcmQodCl7cmV0dXJuIG5nRGV2TW9kZSYmWW4odCwiZXhwZWN0ZWQgbnVtYmVyIiksMXx0fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiBzZCh0LGUpe2lmKCFuZ0Rldk1vZGUpdGhyb3cgbmV3IEVycm9yKCJUaGlzIG1ldGhvZCBzaG91bGQgYmUgZ3VhcmRlZCB3aXRoIGBuZ0Rldk1vZGVgIHNvIHRoYXQgaXQgY2FuIGJlIHRyZWUgc2hha2VuIGluIHByb2R1Y3Rpb24hIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImRlYnVnIix7dmFsdWU6ZSxlbnVtZXJhYmxlOiExfSl9ZnVuY3Rpb24gbGQodCxlKXtpZighbmdEZXZNb2RlKXRocm93IG5ldyBFcnJvcigiVGhpcyBtZXRob2Qgc2hvdWxkIGJlIGd1YXJkZWQgd2l0aCBgbmdEZXZNb2RlYCBzbyB0aGF0IGl0IGNhbiBiZSB0cmVlIHNoYWtlbiBpbiBwcm9kdWN0aW9uISIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJkZWJ1ZyIse2dldDplLGVudW1lcmFibGU6ITF9KX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY29uc3QgY2Q9KCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHwhIW5nRGV2TW9kZSkmJkFvKCk7bGV0IGRkLHBkLG1kO2Z1bmN0aW9uIHVkKHQpe2lmKG51bGw9PXQpcmV0dXJuIiI7Y29uc3QgZT10Lmxhc3RJbmRleE9mKCJfVGVtcGxhdGUiKTtyZXR1cm4iXyIrKC0xPT09ZT90OnQuc3Vic3RyKDAsZSkpfWZ1bmN0aW9uIGZkKHQsZSl7Y29uc3Qgbj10LnRWaWV3Xy5kYXRhLG89W10saT1lP3QuY2xhc3NCaW5kaW5nczp0LnN0eWxlQmluZGluZ3MsYT10ZChpKSxyPW9kKGkpO2xldCBzPTAhPT1yLGw9cz9yOmE7Zm9yKDswIT09bDspe2NvbnN0IHQ9bltsKzFdO28udW5zaGlmdCh7a2V5Om5bbF0saW5kZXg6bCxpc1RlbXBsYXRlOnMscHJldkR1cGxpY2F0ZTplZCh0KSxuZXh0RHVwbGljYXRlOmFkKHQpLG5leHRJbmRleDpvZCh0KSxwcmV2SW5kZXg6dGQodCl9KSxsPT09YSYmKHM9ITEpLGw9dGQodCl9cmV0dXJuIG8ucHVzaCgoZT90LnJlc2lkdWFsQ2xhc3Nlczp0LnJlc2lkdWFsU3R5bGVzKXx8bnVsbCksb31mdW5jdGlvbiBnZCh0LGUpe2Zvcig7dDspZS5wdXNoKHQudGVtcGxhdGVfKSx0PXQubmV4dH1jb25zdCBoZD1jZCYmemwoIlRWaWV3RGF0YSIpfHxudWxsO2xldCBiZDtjb25zdCB5ZD1jZCYmemwoIkxWaWV3Qmx1ZXByaW50Iil8fG51bGwsX2Q9Y2QmJnpsKCJNYXRjaGVzQXJyYXkiKXx8bnVsbCxDZD1jZCYmemwoIlRWaWV3Q29tcG9uZW50cyIpfHxudWxsLE1kPWNkJiZ6bCgiVE5vZGVMb2NhbE5hbWVzIil8fG51bGwsdmQ9Y2QmJnpsKCJUTm9kZUluaXRpYWxJbnB1dHMiKXx8bnVsbDtjZCYmemwoIlROb2RlSW5pdGlhbERhdGEiKTtjb25zdCB4ZD1jZCYmemwoIkxDbGVhbnVwIil8fG51bGwsT2Q9Y2QmJnpsKCJUQ2xlYW51cCIpfHxudWxsO2Z1bmN0aW9uIFBkKHQpe2lmKHQpe2NvbnN0IGU9dC5kZWJ1ZztyZXR1cm4gb28oZSwiT2JqZWN0IGRvZXMgbm90IGhhdmUgYSBkZWJ1ZyByZXByZXNlbnRhdGlvbi4iKSxlfXJldHVybiB0fWZ1bmN0aW9uIHdkKHQsZT0hMSl7Y29uc3Qgbj1VaSh0KTtpZihuKXN3aXRjaChuLm5vZGVUeXBlKXtjYXNlIE5vZGUuVEVYVF9OT0RFOnJldHVybiBuLnRleHRDb250ZW50O2Nhc2UgTm9kZS5DT01NRU5UX05PREU6cmV0dXJuYFx4M2MhLS0ke24udGV4dENvbnRlbnR9LS1ceDNlYDtjYXNlIE5vZGUuRUxFTUVOVF9OT0RFOmNvbnN0IHQ9bi5vdXRlckhUTUw7cmV0dXJuIGU/dDp0LnNwbGl0KCI+IituLmlubmVySFRNTCsiPCIpWzBdKyI+In1yZXR1cm4gbnVsbH1jbGFzcyBrZHtjb25zdHJ1Y3Rvcih0KXt0aGlzLl9yYXdfbFZpZXc9dH1nZXQgZmxhZ3MoKXtjb25zdCB0PXRoaXMuX3Jhd19sVmlld1syXTtyZXR1cm57X19yYXdfX2ZsYWdzX186dCxpbml0UGhhc2VTdGF0ZTozJnQsY3JlYXRpb25Nb2RlOiEhKDQmdCksZmlyc3RWaWV3UGFzczohISg4JnQpLGNoZWNrQWx3YXlzOiEhKDE2JnQpLGRpcnR5OiEhKDY0JnQpLGF0dGFjaGVkOiEhKDEyOCZ0KSxkZXN0cm95ZWQ6ISEoMjU2JnQpLGlzUm9vdDohISg1MTImdCksaW5kZXhXaXRoaW5Jbml0UGhhc2U6dD4+MTF9fWdldCBwYXJlbnQoKXtyZXR1cm4gUGQodGhpcy5fcmF3X2xWaWV3WzNdKX1nZXQgaG9zdEhUTUwoKXtyZXR1cm4gd2QodGhpcy5fcmF3X2xWaWV3WzBdLCEwKX1nZXQgaHRtbCgpe3JldHVybih0aGlzLm5vZGVzfHxbXSkubWFwKFNkKS5qb2luKCIiKX1nZXQgY29udGV4dCgpe3JldHVybiB0aGlzLl9yYXdfbFZpZXdbOF19Z2V0IG5vZGVzKCl7Y29uc3QgdD10aGlzLl9yYXdfbFZpZXc7cmV0dXJuIEVkKHRbMV0uZmlyc3RDaGlsZCx0KX1nZXQgdGVtcGxhdGUoKXtyZXR1cm4gdGhpcy50Vmlldy50ZW1wbGF0ZV99Z2V0IHRWaWV3KCl7cmV0dXJuIHRoaXMuX3Jhd19sVmlld1sxXX1nZXQgY2xlYW51cCgpe3JldHVybiB0aGlzLl9yYXdfbFZpZXdbN119Z2V0IGluamVjdG9yKCl7cmV0dXJuIHRoaXMuX3Jhd19sVmlld1s5XX1nZXQgcmVuZGVyZXJGYWN0b3J5KCl7cmV0dXJuIHRoaXMuX3Jhd19sVmlld1sxMF19Z2V0IHJlbmRlcmVyKCl7cmV0dXJuIHRoaXMuX3Jhd19sVmlld1sxMV19Z2V0IHNhbml0aXplcigpe3JldHVybiB0aGlzLl9yYXdfbFZpZXdbMTJdfWdldCBjaGlsZEhlYWQoKXtyZXR1cm4gUGQodGhpcy5fcmF3X2xWaWV3WzEzXSl9Z2V0IG5leHQoKXtyZXR1cm4gUGQodGhpcy5fcmF3X2xWaWV3WzRdKX1nZXQgY2hpbGRUYWlsKCl7cmV0dXJuIFBkKHRoaXMuX3Jhd19sVmlld1sxNF0pfWdldCBkZWNsYXJhdGlvblZpZXcoKXtyZXR1cm4gUGQodGhpcy5fcmF3X2xWaWV3WzE1XSl9Z2V0IHF1ZXJpZXMoKXtyZXR1cm4gdGhpcy5fcmF3X2xWaWV3WzE5XX1nZXQgdEhvc3QoKXtyZXR1cm4gdGhpcy5fcmF3X2xWaWV3WzZdfWdldCBkZWNscygpe3JldHVybiBEZCh0aGlzLnRWaWV3LHRoaXMuX3Jhd19sVmlldyxvaSx0aGlzLnRWaWV3LmJpbmRpbmdTdGFydEluZGV4KX1nZXQgdmFycygpe3JldHVybiBEZCh0aGlzLnRWaWV3LHRoaXMuX3Jhd19sVmlldyx0aGlzLnRWaWV3LmJpbmRpbmdTdGFydEluZGV4LHRoaXMudFZpZXcuZXhwYW5kb1N0YXJ0SW5kZXgpfWdldCBleHBhbmRvKCl7cmV0dXJuIERkKHRoaXMudFZpZXcsdGhpcy5fcmF3X2xWaWV3LHRoaXMudFZpZXcuZXhwYW5kb1N0YXJ0SW5kZXgsdGhpcy5fcmF3X2xWaWV3Lmxlbmd0aCl9Z2V0IGNoaWxkVmlld3MoKXtjb25zdCB0PVtdO2xldCBlPXRoaXMuY2hpbGRIZWFkO2Zvcig7ZTspdC5wdXNoKGUpLGU9ZS5uZXh0O3JldHVybiB0fX1mdW5jdGlvbiBTZCh0KXtpZigiRWxlbWVudENvbnRhaW5lciI9PT10LnR5cGUpcmV0dXJuKHQuY2hpbGRyZW58fFtdKS5tYXAoU2QpLmpvaW4oIiIpO2lmKCJJY3VDb250YWluZXIiPT09dC50eXBlKXRocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIik7cmV0dXJuIHdkKHQubmF0aXZlLCEwKXx8IiJ9ZnVuY3Rpb24gRGQodCxlLG4sbyl7bGV0IGk9W107Zm9yKGxldCBhPW47YTxvO2ErKylpLnB1c2goe2luZGV4OmEsdDp0LmRhdGFbYV0sbDplW2FdfSk7cmV0dXJue3N0YXJ0Om4sZW5kOm8sbGVuZ3RoOm8tbixjb250ZW50Oml9fWZ1bmN0aW9uIEVkKHQsZSl7aWYodCl7Y29uc3Qgbj1bXTtsZXQgbz10O2Zvcig7bzspbi5wdXNoKEFkKG8sZSkpLG89by5uZXh0O3JldHVybiBufXJldHVybltdfWZ1bmN0aW9uIEFkKHQsZSl7Y29uc3Qgbj1VaShlW3QuaW5kZXhdKSxvPVtdLGk9W10sYT1lWzFdO2ZvcihsZXQgbj10LmRpcmVjdGl2ZVN0YXJ0O248dC5kaXJlY3RpdmVFbmQ7bisrKW8ucHVzaChhLmRhdGFbbl0udHlwZSksaS5wdXNoKGVbbl0pO3JldHVybntodG1sOndkKG4pLHR5cGU6cWEodC50eXBlKSx0Tm9kZTp0LG5hdGl2ZTpuLGNoaWxkcmVuOkVkKHQuY2hpbGQsZSksZmFjdG9yaWVzOm8saW5zdGFuY2VzOmksaW5qZWN0b3I6UmQodCxhLGUpLGdldCBpbmplY3RvclJlc29sdXRpb25QYXRoKCl7cmV0dXJuIHQuZGVidWdOb2RlSW5qZWN0b3JQYXRoKGUpfX19ZnVuY3Rpb24gUmQodCxlLG4pe2NvbnN0IG89W107Zm9yKGxldCBuPXQucHJvdmlkZXJJbmRleFN0YXJ0XztuPHQucHJvdmlkZXJJbmRleEVuZF87bisrKW8ucHVzaChlLmRhdGFbbl0pO2NvbnN0IGk9W107Zm9yKGxldCBuPXQucHJvdmlkZXJJbmRleEVuZF87bjx0LmRpcmVjdGl2ZUVuZDtuKyspaS5wdXNoKGUuZGF0YVtuXSk7cmV0dXJue2Jsb29tOk5kKG4sdC5pbmplY3RvckluZGV4KSxjdW11bGF0aXZlQmxvb206TmQoZS5kYXRhLHQuaW5qZWN0b3JJbmRleCkscHJvdmlkZXJzOmksdmlld1Byb3ZpZGVyczpvLHBhcmVudEluamVjdG9ySW5kZXg6blt0LnByb3ZpZGVySW5kZXhTdGFydF8tMV19fWZ1bmN0aW9uIFRkKHQsZSl7Y29uc3Qgbj10W2VdO2lmKCJudW1iZXIiIT10eXBlb2YgbilyZXR1cm4iPz8/Pz8/Pz8iO2NvbnN0IG89IjAwMDAwMDAwIituLnRvU3RyaW5nKDIpO3JldHVybiBvLnN1YnN0cmluZyhvLmxlbmd0aC04KX1mdW5jdGlvbiBOZCh0LGUpe3JldHVybiBlPDA/Ik5PX05PREVfSU5KRUNUT1IiOmAke1RkKHQsZSs3KX1fJHtUZCh0LGUrNil9XyR7VGQodCxlKzUpfV8ke1RkKHQsZSs0KX1fJHtUZCh0LGUrMyl9XyR7VGQodCxlKzIpfV8ke1RkKHQsZSsxKX1fJHtUZCh0LGUrMCl9YH1jbGFzcyBJZHtjb25zdHJ1Y3Rvcih0KXt0aGlzLl9yYXdfbENvbnRhaW5lcj10fWdldCBoYXNUcmFuc3BsYW50ZWRWaWV3cygpe3JldHVybiB0aGlzLl9yYXdfbENvbnRhaW5lclsyXX1nZXQgdmlld3MoKXtyZXR1cm4gdGhpcy5fcmF3X2xDb250YWluZXIuc2xpY2UoYWkpLm1hcChQZCl9Z2V0IHBhcmVudCgpe3JldHVybiBQZCh0aGlzLl9yYXdfbENvbnRhaW5lclszXSl9Z2V0IG1vdmVkVmlld3MoKXtyZXR1cm4gdGhpcy5fcmF3X2xDb250YWluZXJbOV19Z2V0IGhvc3QoKXtyZXR1cm4gdGhpcy5fcmF3X2xDb250YWluZXJbMF19Z2V0IG5hdGl2ZSgpe3JldHVybiB0aGlzLl9yYXdfbENvbnRhaW5lcls3XX1nZXQgbmV4dCgpe3JldHVybiBQZCh0aGlzLl9yYXdfbENvbnRhaW5lcls0XSl9fWNvbnN0IHpkPVByb21pc2UucmVzb2x2ZShudWxsKTtmdW5jdGlvbiBIZCh0LGUpe2NvbnN0IG49dC5jb250ZW50UXVlcmllcztpZihudWxsIT09bilmb3IobGV0IG89MDtvPG4ubGVuZ3RoO28rPTIpe2NvbnN0IGk9bltvXSxhPW5bbysxXTtpZigtMSE9PWEpe2NvbnN0IG49dC5kYXRhW2FdO25nRGV2TW9kZSYmb28obiwiRGlyZWN0aXZlRGVmIG5vdCBmb3VuZC4iKSxuZ0Rldk1vZGUmJm9vKG4uY29udGVudFF1ZXJpZXMsImNvbnRlbnRRdWVyaWVzIGZ1bmN0aW9uIHNob3VsZCBiZSBkZWZpbmVkIiksUGEoaSksbi5jb250ZW50UXVlcmllcygyLGVbYV0sYSl9fX1mdW5jdGlvbiBGZCh0LGUsbixvLGksYSxyLHMsbCxjKXtjb25zdCBkPW5nRGV2TW9kZT8oZnVuY3Rpb24gcCh0KXtyZXR1cm4oZnVuY3Rpb24gZSh0LG4pe3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIHZvaWQgMD09PW1kJiYobWQ9bmV3KHpsKCJMUm9vdFZpZXciKSkpLG1kO2Nhc2UgMTp2b2lkIDA9PT1kZCYmKGRkPW5ldyBNYXApO2xldCB0PWRkLmdldChuKTtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9bmV3KHpsKCJMQ29tcG9uZW50VmlldyIrdWQobikpKSxkZC5zZXQobix0KSksdDtjYXNlIDI6dm9pZCAwPT09cGQmJihwZD1uZXcgTWFwKTtsZXQgZT1wZC5nZXQobik7cmV0dXJuIHZvaWQgMD09PWUmJihlPW5ldyh6bCgiTEVtYmVkZGVkVmlldyIrdWQobikpKSxwZC5zZXQobixlKSksZX19KSh0LnR5cGUsdC50ZW1wbGF0ZSYmdC50ZW1wbGF0ZS5uYW1lKS5jb25jYXQodC5ibHVlcHJpbnQpfSkoZSk6ZS5ibHVlcHJpbnQuc2xpY2UoKTtyZXR1cm4gZFswXT1pLGRbMl09MTQwfG8sdGEoZCksbmdEZXZNb2RlJiZlLmRlY2xUTm9kZSYmdCYmbWkoZS5kZWNsVE5vZGUsdCksZFszXT1kWzE1XT10LGRbOF09bixkWzEwXT1yfHx0JiZ0WzEwXSxuZ0Rldk1vZGUmJm9vKGRbMTBdLCJSZW5kZXJlckZhY3RvcnkgaXMgcmVxdWlyZWQiKSxkWzExXT1zfHx0JiZ0WzExXSxuZ0Rldk1vZGUmJm9vKGRbMTFdLCJSZW5kZXJlciBpcyByZXF1aXJlZCIpLGRbMTJdPWx8fHQmJnRbMTJdfHxudWxsLGRbOV09Y3x8dCYmdFs5XXx8bnVsbCxkWzZdPWEsbmdEZXZNb2RlJiZYbigyIT1lLnR5cGV8fG51bGwhPT10LCEwLCJFbWJlZGRlZCB2aWV3cyBtdXN0IGhhdmUgcGFyZW50TFZpZXciKSxkWzE2XT0yPT1lLnR5cGU/dFsxNl06ZCxuZ0Rldk1vZGUmJihmdW5jdGlvbiBtKHQpe3NkKHQsbmV3IGtkKHQpKX0pKGQpLGR9ZnVuY3Rpb24gTGQodCxlLG4sbyxpKXtuZ0Rldk1vZGUmJjAhPT1lJiZubyhlLG9pLCJUTm9kZXMgY2FuJ3QgYmUgaW4gdGhlIExWaWV3IGhlYWRlci4iKSxuZ0Rldk1vZGUmJihmdW5jdGlvbiBhKHQpezIhPT10JiYxIT09dCYmNCE9PXQmJjghPT10JiYzMiE9PXQmJjE2IT09dCYmNjQhPT10JiZpbyhgRXhwZWN0ZWQgVE5vZGVUeXBlIHRvIGhhdmUgb25seSBhIHNpbmdsZSB0eXBlIHNlbGVjdGVkLCBidXQgZ290ICR7cWEodCl9LmApfSkobik7bGV0IHI9dC5kYXRhW2VdO2lmKG51bGw9PT1yKXI9QmQodCxlLG4sbyxpKSwoZnVuY3Rpb24gcygpe3JldHVybiBuYS5sRnJhbWUuaW5JMThufSkoKSYmKHIuZmxhZ3N8PTY0KTtlbHNlIGlmKDY0JnIudHlwZSl7ci50eXBlPW4sci52YWx1ZT1vLHIuYXR0cnM9aTtjb25zdCBhPWNhKCk7ci5pbmplY3RvckluZGV4PW51bGw9PT1hPy0xOmEuaW5qZWN0b3JJbmRleCxuZ0Rldk1vZGUmJnVpKHIsdCksbmdEZXZNb2RlJiZYbihlLHIuaW5kZXgsIkV4cGVjdGluZyBzYW1lIGluZGV4Iil9cmV0dXJuIGRhKHIsITApLHJ9ZnVuY3Rpb24gQmQodCxlLG4sbyxpKXtjb25zdCBhPWxhKCkscj1wYSgpLHM9dC5kYXRhW2VdPShmdW5jdGlvbiBsKHQsZSxuLG8saSxhKXtuZ0Rldk1vZGUmJjAhPT1vJiZubyhvLG9pLCJUTm9kZXMgY2FuJ3QgYmUgaW4gdGhlIExWaWV3IGhlYWRlci4iKSxuZ0Rldk1vZGUmJlFuKGEsdm9pZCAwLCIndW5kZWZpbmVkJyBpcyBub3QgdmFsaWQgdmFsdWUgZm9yICdhdHRycyciKSxuZ0Rldk1vZGUmJm5nRGV2TW9kZS50Tm9kZSsrLG5nRGV2TW9kZSYmZSYmdWkoZSx0KTtsZXQgcj1lP2UuaW5qZWN0b3JJbmRleDotMTtjb25zdCBzPW5nRGV2TW9kZT9uZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlLG4sbyxpLGEscixzLGwsYyxkLHAsbSx1LGYsZyxoLGIseSxfLEMsTSx2LHgsTyxQLHcsayxTLEQsRSxBKXt0aGlzLnRWaWV3Xz10LHRoaXMudHlwZT1lLHRoaXMuaW5kZXg9bix0aGlzLmluc2VydEJlZm9yZUluZGV4PW8sdGhpcy5pbmplY3RvckluZGV4PWksdGhpcy5kaXJlY3RpdmVTdGFydD1hLHRoaXMuZGlyZWN0aXZlRW5kPXIsdGhpcy5kaXJlY3RpdmVTdHlsaW5nTGFzdD1zLHRoaXMucHJvcGVydHlCaW5kaW5ncz1sLHRoaXMuZmxhZ3M9Yyx0aGlzLnByb3ZpZGVySW5kZXhlcz1kLHRoaXMudmFsdWU9cCx0aGlzLmF0dHJzPW0sdGhpcy5tZXJnZWRBdHRycz11LHRoaXMubG9jYWxOYW1lcz1mLHRoaXMuaW5pdGlhbElucHV0cz1nLHRoaXMuaW5wdXRzPWgsdGhpcy5vdXRwdXRzPWIsdGhpcy50Vmlld3M9eSx0aGlzLm5leHQ9Xyx0aGlzLnByb2plY3Rpb25OZXh0PUMsdGhpcy5jaGlsZD1NLHRoaXMucGFyZW50PXYsdGhpcy5wcm9qZWN0aW9uPXgsdGhpcy5zdHlsZXM9Tyx0aGlzLnN0eWxlc1dpdGhvdXRIb3N0PVAsdGhpcy5yZXNpZHVhbFN0eWxlcz13LHRoaXMuY2xhc3Nlcz1rLHRoaXMuY2xhc3Nlc1dpdGhvdXRIb3N0PVMsdGhpcy5yZXNpZHVhbENsYXNzZXM9RCx0aGlzLmNsYXNzQmluZGluZ3M9RSx0aGlzLnN0eWxlQmluZGluZ3M9QX1kZWJ1Z05vZGVJbmplY3RvclBhdGgodCl7Y29uc3QgZT1bXTtsZXQgbj1scih0aGlzLHQpO2lmKC0xPT09bil7Y29uc3QgZT1jcih0aGlzLHQpO2UhPT1HYSYmKG49ZXIoZSksdD1ucihlLHQpKX1mb3IoOy0xIT09bjspe25nRGV2TW9kZSYmUGkodCxuKSxlLnB1c2goQWQodFsxXS5kYXRhW24rOF0sdCkpO2NvbnN0IG89dFtuKzhdO289PT1HYT9uPS0xOihuPWVyKG8pLHQ9bnIobyx0KSl9cmV0dXJuIGV9Z2V0IHR5cGVfKCl7cmV0dXJuIHFhKHRoaXMudHlwZSl8fGBUTm9kZVR5cGUuPyR7dGhpcy50eXBlfT9gfWdldCBmbGFnc18oKXtjb25zdCB0PVtdO3JldHVybiAxNiZ0aGlzLmZsYWdzJiZ0LnB1c2goIlROb2RlRmxhZ3MuaGFzQ2xhc3NJbnB1dCIpLDgmdGhpcy5mbGFncyYmdC5wdXNoKCJUTm9kZUZsYWdzLmhhc0NvbnRlbnRRdWVyeSIpLDMyJnRoaXMuZmxhZ3MmJnQucHVzaCgiVE5vZGVGbGFncy5oYXNTdHlsZUlucHV0IiksMTI4JnRoaXMuZmxhZ3MmJnQucHVzaCgiVE5vZGVGbGFncy5oYXNIb3N0QmluZGluZ3MiKSwyJnRoaXMuZmxhZ3MmJnQucHVzaCgiVE5vZGVGbGFncy5pc0NvbXBvbmVudEhvc3QiKSwxJnRoaXMuZmxhZ3MmJnQucHVzaCgiVE5vZGVGbGFncy5pc0RpcmVjdGl2ZUhvc3QiKSw2NCZ0aGlzLmZsYWdzJiZ0LnB1c2goIlROb2RlRmxhZ3MuaXNEZXRhY2hlZCIpLDQmdGhpcy5mbGFncyYmdC5wdXNoKCJUTm9kZUZsYWdzLmlzUHJvamVjdGVkIiksdC5qb2luKCJ8Iil9Z2V0IHRlbXBsYXRlXygpe2lmKDEmdGhpcy50eXBlKXJldHVybiB0aGlzLnZhbHVlO2NvbnN0IHQ9W10sZT0ic3RyaW5nIj09dHlwZW9mIHRoaXMudmFsdWUmJnRoaXMudmFsdWV8fHRoaXMudHlwZV87aWYodC5wdXNoKCI8IixlKSx0aGlzLmZsYWdzJiZ0LnB1c2goIiAiLHRoaXMuZmxhZ3NfKSx0aGlzLmF0dHJzKWZvcihsZXQgZT0wO2U8dGhpcy5hdHRycy5sZW5ndGg7KXtjb25zdCBuPXRoaXMuYXR0cnNbZSsrXTtpZigibnVtYmVyIj09dHlwZW9mIG4pYnJlYWs7Y29uc3Qgbz10aGlzLmF0dHJzW2UrK107dC5wdXNoKCIgIixuLCc9IicsbywnIicpfXJldHVybiB0LnB1c2goIj4iKSxnZCh0aGlzLmNoaWxkLHQpLHQucHVzaCgiPC8iLGUsIj4iKSx0LmpvaW4oIiIpfWdldCBzdHlsZUJpbmRpbmdzXygpe3JldHVybiBmZCh0aGlzLCExKX1nZXQgY2xhc3NCaW5kaW5nc18oKXtyZXR1cm4gZmQodGhpcywhMCl9Z2V0IHByb3ZpZGVySW5kZXhTdGFydF8oKXtyZXR1cm4gMTA0ODU3NSZ0aGlzLnByb3ZpZGVySW5kZXhlc31nZXQgcHJvdmlkZXJJbmRleEVuZF8oKXtyZXR1cm4gdGhpcy5wcm92aWRlckluZGV4U3RhcnRfKyh0aGlzLnByb3ZpZGVySW5kZXhlcz4+PjIwKX19KHQsbixvLG51bGwsciwtMSwtMSwtMSxudWxsLDAsMCxpLGEsbnVsbCxudWxsLHZvaWQgMCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxlLG51bGwsbnVsbCxudWxsLHZvaWQgMCxudWxsLG51bGwsdm9pZCAwLDAsMCk6e3R5cGU6bixpbmRleDpvLGluc2VydEJlZm9yZUluZGV4Om51bGwsaW5qZWN0b3JJbmRleDpyLGRpcmVjdGl2ZVN0YXJ0Oi0xLGRpcmVjdGl2ZUVuZDotMSxkaXJlY3RpdmVTdHlsaW5nTGFzdDotMSxwcm9wZXJ0eUJpbmRpbmdzOm51bGwsZmxhZ3M6MCxwcm92aWRlckluZGV4ZXM6MCx2YWx1ZTppLGF0dHJzOmEsbWVyZ2VkQXR0cnM6bnVsbCxsb2NhbE5hbWVzOm51bGwsaW5pdGlhbElucHV0czp2b2lkIDAsaW5wdXRzOm51bGwsb3V0cHV0czpudWxsLHRWaWV3czpudWxsLG5leHQ6bnVsbCxwcm9qZWN0aW9uTmV4dDpudWxsLGNoaWxkOm51bGwscGFyZW50OmUscHJvamVjdGlvbjpudWxsLHN0eWxlczpudWxsLHN0eWxlc1dpdGhvdXRIb3N0Om51bGwscmVzaWR1YWxTdHlsZXM6dm9pZCAwLGNsYXNzZXM6bnVsbCxjbGFzc2VzV2l0aG91dEhvc3Q6bnVsbCxyZXNpZHVhbENsYXNzZXM6dm9pZCAwLGNsYXNzQmluZGluZ3M6MCxzdHlsZUJpbmRpbmdzOjB9O3JldHVybiBuZ0Rldk1vZGUmJk9iamVjdC5zZWFsKHMpLHN9KSh0LHI/YTphJiZhLnBhcmVudCxuLGUsbyxpKTtyZXR1cm4gbnVsbD09PXQuZmlyc3RDaGlsZCYmKHQuZmlyc3RDaGlsZD1zKSxudWxsIT09YSYmKHI/bnVsbD09YS5jaGlsZCYmbnVsbCE9PXMucGFyZW50JiYoYS5jaGlsZD1zKTpudWxsPT09YS5uZXh0JiYoYS5uZXh0PXMpKSxzfWZ1bmN0aW9uIFZkKHQsZSxuLG8pe2lmKDA9PT1uKXJldHVybi0xO25nRGV2TW9kZSYmKENpKHQpLEpuKHQsZVsxXSwiYExWaWV3YCBtdXN0IGJlIGFzc29jaWF0ZWQgd2l0aCBgVFZpZXdgISIpLFhuKHQuZGF0YS5sZW5ndGgsZS5sZW5ndGgsIkV4cGVjdGluZyBMVmlldyB0byBiZSBzYW1lIHNpemUgYXMgVFZpZXciKSxYbih0LmRhdGEubGVuZ3RoLHQuYmx1ZXByaW50Lmxlbmd0aCwiRXhwZWN0aW5nIEJsdWVwcmludCB0byBiZSBzYW1lIHNpemUgYXMgVFZpZXciKSxNaSh0KSk7Y29uc3QgaT1lLmxlbmd0aDtmb3IobGV0IGk9MDtpPG47aSsrKWUucHVzaChvKSx0LmJsdWVwcmludC5wdXNoKG8pLHQuZGF0YS5wdXNoKG51bGwpO3JldHVybiBpfWZ1bmN0aW9uIGpkKHQsZSxuKXtuZ0Rldk1vZGUmJlhuKEppKGUpLCEwLCJTaG91bGQgYmUgcnVuIGluIGNyZWF0aW9uIG1vZGUiKSxTYShlKTt0cnl7Y29uc3Qgbz10LnZpZXdRdWVyeTtudWxsIT09byYmUHAoMSxvLG4pO2NvbnN0IGk9dC50ZW1wbGF0ZTtudWxsIT09aSYmR2QodCxlLGksMSxuKSx0LmZpcnN0Q3JlYXRlUGFzcyYmKHQuZmlyc3RDcmVhdGVQYXNzPSExKSx0LnN0YXRpY0NvbnRlbnRRdWVyaWVzJiZIZCh0LGUpLHQuc3RhdGljVmlld1F1ZXJpZXMmJlBwKDIsdC52aWV3UXVlcnksbik7Y29uc3QgYT10LmNvbXBvbmVudHM7bnVsbCE9PWEmJihmdW5jdGlvbiBvKHQsZSl7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspX3AodCxlW25dKX0pKGUsYSl9Y2F0Y2goZSl7dGhyb3cgdC5maXJzdENyZWF0ZVBhc3MmJih0LmluY29tcGxldGVGaXJzdFBhc3M9ITApLGV9ZmluYWxseXtlWzJdJj0tNSxUYSgpfX1mdW5jdGlvbiBVZCh0LGUsbixvKXtuZ0Rldk1vZGUmJlhuKEppKGUpLCExLCJTaG91bGQgYmUgcnVuIGluIHVwZGF0ZSBtb2RlIik7Y29uc3QgaT1lWzJdO2lmKDI1Nj09KDI1NiZpKSlyZXR1cm47U2EoZSk7Y29uc3QgYT11YSgpO3RyeXt0YShlKSxiYSh0LmJpbmRpbmdTdGFydEluZGV4KSxudWxsIT09biYmR2QodCxlLG4sMixvKTtjb25zdCByPTM9PSgzJmkpO2lmKCFhKWlmKHIpe2NvbnN0IG49dC5wcmVPcmRlckNoZWNrSG9va3M7bnVsbCE9PW4mJkJhKGUsbixudWxsKX1lbHNle2NvbnN0IG49dC5wcmVPcmRlckhvb2tzO251bGwhPT1uJiZWYShlLG4sMCxudWxsKSxqYShlLDApfWlmKChmdW5jdGlvbiByKHQpe2ZvcihsZXQgZT1hYyh0KTtudWxsIT09ZTtlPXJjKGUpKXtpZighZVsyXSljb250aW51ZTtjb25zdCB0PWVbOV07bmdEZXZNb2RlJiZvbyh0LCJUcmFuc3BsYW50ZWQgVmlldyBmbGFncyBzZXQgYnV0IG1pc3NpbmcgTU9WRURfVklFV1MiKTtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKyl7Y29uc3Qgbj10W2VdLG89blszXTtuZ0Rldk1vZGUmJmJpKG8pLDA9PSgxMDI0Jm5bMl0pJiZlYShvLDEpLG5bMl18PTEwMjR9fX0pKGUpLChmdW5jdGlvbiBzKHQpe2ZvcihsZXQgZT1hYyh0KTtudWxsIT09ZTtlPXJjKGUpKWZvcihsZXQgdD1haTt0PGUubGVuZ3RoO3QrKyl7Y29uc3Qgbj1lW3RdLG89blsxXTtuZ0Rldk1vZGUmJm9vKG8sIlRWaWV3IG11c3QgYmUgYWxsb2NhdGVkIiksUWkobikmJlVkKG8sbixvLnRlbXBsYXRlLG5bOF0pfX0pKGUpLG51bGwhPT10LmNvbnRlbnRRdWVyaWVzJiZIZCh0LGUpLCFhKWlmKHIpe2NvbnN0IG49dC5jb250ZW50Q2hlY2tIb29rcztudWxsIT09biYmQmEoZSxuKX1lbHNle2NvbnN0IG49dC5jb250ZW50SG9va3M7bnVsbCE9PW4mJlZhKGUsbiwxKSxqYShlLDEpfSEoZnVuY3Rpb24gbCh0LGUpe2NvbnN0IG49dC5ob3N0QmluZGluZ09wQ29kZXM7aWYobnVsbCE9PW4pdHJ5e2ZvcihsZXQgdD0wO3Q8bi5sZW5ndGg7dCsrKXtjb25zdCBvPW5bdF07aWYobzwwKUlhKH5vKTtlbHNle2NvbnN0IGk9byxhPW5bKyt0XSxyPW5bKyt0XTtNYShhLGkpLHIoMixlW2ldKX19fWZpbmFsbHl7SWEoLTEpfX0pKHQsZSk7Y29uc3Qgcz10LmNvbXBvbmVudHM7bnVsbCE9PXMmJihmdW5jdGlvbiBjKHQsZSl7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspYnAodCxlW25dKX0pKGUscyk7Y29uc3QgbD10LnZpZXdRdWVyeTtpZihudWxsIT09bCYmUHAoMixsLG8pLCFhKWlmKHIpe2NvbnN0IG49dC52aWV3Q2hlY2tIb29rcztudWxsIT09biYmQmEoZSxuKX1lbHNle2NvbnN0IG49dC52aWV3SG9va3M7bnVsbCE9PW4mJlZhKGUsbiwyKSxqYShlLDIpfSEwPT09dC5maXJzdFVwZGF0ZVBhc3MmJih0LmZpcnN0VXBkYXRlUGFzcz0hMSksYXx8KGVbMl0mPS03MyksMTAyNCZlWzJdJiYoZVsyXSY9LTEwMjUsZWEoZVszXSwtMSkpfWZpbmFsbHl7VGEoKX19ZnVuY3Rpb24gV2QodCxlLG4sbyl7Y29uc3QgaT1lWzEwXSxhPSF1YSgpLHI9SmkoZSk7dHJ5e2EmJiFyJiZpLmJlZ2luJiZpLmJlZ2luKCksciYmamQodCxlLG8pLFVkKHQsZSxuLG8pfWZpbmFsbHl7YSYmIXImJmkuZW5kJiZpLmVuZCgpfX1mdW5jdGlvbiBHZCh0LGUsbixvLGkpe2NvbnN0IGE9TmEoKSxyPTImbzt0cnl7SWEoLTEpLHImJmUubGVuZ3RoPm9pJiZRYyh0LGUsb2ksdWEoKSksSWkocj8yOjAsaSksbihvLGkpfWZpbmFsbHl7SWEoYSksSWkocj8zOjEsaSl9fWZ1bmN0aW9uIFlkKHQsZSxuKXtpZihsaShlKSl7Y29uc3Qgbz1lLmRpcmVjdGl2ZUVuZDtmb3IobGV0IGk9ZS5kaXJlY3RpdmVTdGFydDtpPG87aSsrKXtjb25zdCBlPXQuZGF0YVtpXTtlLmNvbnRlbnRRdWVyaWVzJiZlLmNvbnRlbnRRdWVyaWVzKDEsbltpXSxpKX19fWZ1bmN0aW9uIHFkKHQsZSxuKXtvYSgpJiYoKGZ1bmN0aW9uIG8odCxlLG4saSl7Y29uc3QgYT1uLmRpcmVjdGl2ZVN0YXJ0LHI9bi5kaXJlY3RpdmVFbmQ7dC5maXJzdENyZWF0ZVBhc3N8fHJyKG4sZSksVmwoaSxlKTtjb25zdCBzPW4uaW5pdGlhbElucHV0cztmb3IobGV0IG89YTtvPHI7bysrKXtjb25zdCBpPXQuZGF0YVtvXSxyPXBpKGkpO3ImJihuZ0Rldk1vZGUmJlphKG4sMyksZHAoZSxuLGkpKTtjb25zdCBsPXlyKGUsdCxvLG4pO1ZsKGwsZSksbnVsbCE9PXMmJnVwKGUsby1hLGwsaSxuLHMpLHImJihaaShuLmluZGV4LGUpWzhdPWwpfX0pKHQsZSxuLEdpKG4sZSkpLDEyOD09KDEyOCZuLmZsYWdzKSYmKGZ1bmN0aW9uIGkodCxlLG4pe2NvbnN0IG89bi5kaXJlY3RpdmVTdGFydCxpPW4uZGlyZWN0aXZlRW5kLGE9bi5pbmRleCxyPShmdW5jdGlvbiBzKCl7cmV0dXJuIG5hLmxGcmFtZS5jdXJyZW50RGlyZWN0aXZlSW5kZXh9KSgpO3RyeXtJYShhKTtmb3IobGV0IG49bztuPGk7bisrKXtjb25zdCBvPXQuZGF0YVtuXSxpPWVbbl07dmEobiksbnVsbD09PW8uaG9zdEJpbmRpbmdzJiYwPT09by5ob3N0VmFycyYmbnVsbD09PW8uaG9zdEF0dHJzfHxhcChvLGkpfX1maW5hbGx5e0lhKC0xKSx2YShyKX19KSh0LGUsbikpfWZ1bmN0aW9uIFpkKHQsZSxuPUdpKXtjb25zdCBvPWUubG9jYWxOYW1lcztpZihudWxsIT09byl7bGV0IGk9ZS5pbmRleCsxO2ZvcihsZXQgYT0wO2E8by5sZW5ndGg7YSs9Mil7Y29uc3Qgcj1vW2ErMV0scz0tMT09PXI/bihlLHQpOnRbcl07dFtpKytdPXN9fX1mdW5jdGlvbiBYZCh0KXtjb25zdCBlPXQudFZpZXc7cmV0dXJuIG51bGw9PT1lfHxlLmluY29tcGxldGVGaXJzdFBhc3M/dC50Vmlldz1LZCgxLG51bGwsdC50ZW1wbGF0ZSx0LmRlY2xzLHQudmFycyx0LmRpcmVjdGl2ZURlZnMsdC5waXBlRGVmcyx0LnZpZXdRdWVyeSx0LnNjaGVtYXMsdC5jb25zdHMpOmV9ZnVuY3Rpb24gS2QodCxlLG4sbyxpLGEscixzLGwsYyl7bmdEZXZNb2RlJiZuZ0Rldk1vZGUudFZpZXcrKztjb25zdCBkPW9pK28scD1kK2ksbT0oZnVuY3Rpb24gdSh0LGUpe2NvbnN0IG49bmdEZXZNb2RlP25ldyB5ZDpbXTtmb3IobGV0IG89MDtvPGU7bysrKW4ucHVzaChvPHQ/bnVsbDpLYyk7cmV0dXJuIG59KShkLHApLGY9ImZ1bmN0aW9uIj09dHlwZW9mIGM/YygpOmMsZz1tWzFdPW5nRGV2TW9kZT9uZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlLG4sbyxpLGEscixzLGwsYyxkLHAsbSx1LGYsZyxoLGIseSxfLEMsTSx2LHgsTyxQLHcsayxTLEQsRSxBKXt0aGlzLnR5cGU9dCx0aGlzLmJsdWVwcmludD1lLHRoaXMudGVtcGxhdGU9bix0aGlzLnF1ZXJpZXM9byx0aGlzLnZpZXdRdWVyeT1pLHRoaXMuZGVjbFROb2RlPWEsdGhpcy5kYXRhPXIsdGhpcy5iaW5kaW5nU3RhcnRJbmRleD1zLHRoaXMuZXhwYW5kb1N0YXJ0SW5kZXg9bCx0aGlzLmhvc3RCaW5kaW5nT3BDb2Rlcz1jLHRoaXMuZmlyc3RDcmVhdGVQYXNzPWQsdGhpcy5maXJzdFVwZGF0ZVBhc3M9cCx0aGlzLnN0YXRpY1ZpZXdRdWVyaWVzPW0sdGhpcy5zdGF0aWNDb250ZW50UXVlcmllcz11LHRoaXMucHJlT3JkZXJIb29rcz1mLHRoaXMucHJlT3JkZXJDaGVja0hvb2tzPWcsdGhpcy5jb250ZW50SG9va3M9aCx0aGlzLmNvbnRlbnRDaGVja0hvb2tzPWIsdGhpcy52aWV3SG9va3M9eSx0aGlzLnZpZXdDaGVja0hvb2tzPV8sdGhpcy5kZXN0cm95SG9va3M9Qyx0aGlzLmNsZWFudXA9TSx0aGlzLmNvbnRlbnRRdWVyaWVzPXYsdGhpcy5jb21wb25lbnRzPXgsdGhpcy5kaXJlY3RpdmVSZWdpc3RyeT1PLHRoaXMucGlwZVJlZ2lzdHJ5PVAsdGhpcy5maXJzdENoaWxkPXcsdGhpcy5zY2hlbWFzPWssdGhpcy5jb25zdHM9Uyx0aGlzLmluY29tcGxldGVGaXJzdFBhc3M9RCx0aGlzLl9kZWNscz1FLHRoaXMuX3ZhcnM9QX1nZXQgdGVtcGxhdGVfKCl7Y29uc3QgdD1bXTtyZXR1cm4gZ2QodGhpcy5maXJzdENoaWxkLHQpLHQuam9pbigiIil9Z2V0IHR5cGVfKCl7cmV0dXJuIGlpW3RoaXMudHlwZV18fGBUVmlld1R5cGUuPyR7dGhpcy50eXBlfT9gfX0odCxtLG4sbnVsbCxzLGUsKGZ1bmN0aW9uIGgodCl7cmV0dXJuIHZvaWQgMD09PWJkJiYoYmQ9bmV3IGhkKSxiZC5jb25jYXQodCl9KShtKS5maWxsKG51bGwsZCksZCxwLG51bGwsITAsITAsITEsITEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwiZnVuY3Rpb24iPT10eXBlb2YgYT9hKCk6YSwiZnVuY3Rpb24iPT10eXBlb2Ygcj9yKCk6cixudWxsLGwsZiwhMSxvLGkpOnt0eXBlOnQsYmx1ZXByaW50Om0sdGVtcGxhdGU6bixxdWVyaWVzOm51bGwsdmlld1F1ZXJ5OnMsZGVjbFROb2RlOmUsZGF0YTptLnNsaWNlKCkuZmlsbChudWxsLGQpLGJpbmRpbmdTdGFydEluZGV4OmQsZXhwYW5kb1N0YXJ0SW5kZXg6cCxob3N0QmluZGluZ09wQ29kZXM6bnVsbCxmaXJzdENyZWF0ZVBhc3M6ITAsZmlyc3RVcGRhdGVQYXNzOiEwLHN0YXRpY1ZpZXdRdWVyaWVzOiExLHN0YXRpY0NvbnRlbnRRdWVyaWVzOiExLHByZU9yZGVySG9va3M6bnVsbCxwcmVPcmRlckNoZWNrSG9va3M6bnVsbCxjb250ZW50SG9va3M6bnVsbCxjb250ZW50Q2hlY2tIb29rczpudWxsLHZpZXdIb29rczpudWxsLHZpZXdDaGVja0hvb2tzOm51bGwsZGVzdHJveUhvb2tzOm51bGwsY2xlYW51cDpudWxsLGNvbnRlbnRRdWVyaWVzOm51bGwsY29tcG9uZW50czpudWxsLGRpcmVjdGl2ZVJlZ2lzdHJ5OiJmdW5jdGlvbiI9PXR5cGVvZiBhP2EoKTphLHBpcGVSZWdpc3RyeToiZnVuY3Rpb24iPT10eXBlb2Ygcj9yKCk6cixmaXJzdENoaWxkOm51bGwsc2NoZW1hczpsLGNvbnN0czpmLGluY29tcGxldGVGaXJzdFBhc3M6ITF9O3JldHVybiBuZ0Rldk1vZGUmJk9iamVjdC5zZWFsKGcpLGd9ZnVuY3Rpb24gSmQodCxlLG4sbyl7Y29uc3QgaT1TcChlKTtudWxsPT09bj8obmdEZXZNb2RlJiZPYmplY3QuZnJlZXplKERwKHQpKSxpLnB1c2gobykpOihpLnB1c2gobiksdC5maXJzdENyZWF0ZVBhc3MmJkRwKHQpLnB1c2gobyxpLmxlbmd0aC0xKSl9ZnVuY3Rpb24gUWQodCxlLG4pe2ZvcihsZXQgbyBpbiB0KWlmKHQuaGFzT3duUHJvcGVydHkobykpe2NvbnN0IGk9dFtvXTsobj1udWxsPT09bj97fTpuKS5oYXNPd25Qcm9wZXJ0eShvKT9uW29dLnB1c2goZSxpKTpuW29dPVtlLGldfXJldHVybiBufWZ1bmN0aW9uICRkKHQsZSxuLG8saSxhLHIscyl7bmdEZXZNb2RlJiZRbihpLEtjLCJJbmNvbWluZyB2YWx1ZSBzaG91bGQgbmV2ZXIgYmUgTk9fQ0hBTkdFLiIpO2NvbnN0IGw9R2koZSxuKTtsZXQgYyxkPWUuaW5wdXRzO2lmKCFzJiZudWxsIT1kJiYoYz1kW29dKSlScCh0LG4sYyxvLGkpLGNpKGUpJiYoZnVuY3Rpb24gcCh0LGUpe25nRGV2TW9kZSYmX2kodCk7Y29uc3Qgbj1aaShlLHQpOzE2Jm5bMl18fChuWzJdfD02NCl9KShuLGUuaW5kZXgpLG5nRGV2TW9kZSYmKGZ1bmN0aW9uIG0odCxlLG4sbyxpKXtpZig3Jm4pZm9yKGxldCBhPTA7YTxvLmxlbmd0aDthKz0yKXRwKHQsZSxuLG9bYSsxXSxpKX0pKG4sbCxlLnR5cGUsYyxpKTtlbHNlIGlmKDMmZS50eXBlKXtpZihvPShmdW5jdGlvbiB1KHQpe3JldHVybiJjbGFzcyI9PT10PyJjbGFzc05hbWUiOiJmb3IiPT09dD8iaHRtbEZvciI6ImZvcm1hY3Rpb24iPT09dD8iZm9ybUFjdGlvbiI6ImlubmVySHRtbCI9PT10PyJpbm5lckhUTUwiOiJyZWFkb25seSI9PT10PyJyZWFkT25seSI6InRhYmluZGV4Ij09PXQ/InRhYkluZGV4Ijp0fSkobyksbmdEZXZNb2RlKXtpZigoZnVuY3Rpb24gZih0KXtpZih0LnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgib24iKSl7Y29uc3QgZT1gQmluZGluZyB0byBldmVudCBwcm9wZXJ0eSAnJHt0fScgaXMgZGlzYWxsb3dlZCBmb3Igc2VjdXJpdHkgcmVhc29ucywgcGxlYXNlIHVzZSAoJHt0LnNsaWNlKDIpfSk9Li4uXG5JZiAnJHt0fScgaXMgYSBkaXJlY3RpdmUgaW5wdXQsIG1ha2Ugc3VyZSB0aGUgZGlyZWN0aXZlIGlzIGltcG9ydGVkIGJ5IHRoZSBjdXJyZW50IG1vZHVsZS5gO3Rocm93IG5ldyBFcnJvcihlKX19KShvKSwhKGZ1bmN0aW9uIGcodCxlLG4sbyl7cmV0dXJuIShudWxsIT09dC5zY2hlbWFzJiYhKGVwKHQsby52YWx1ZSl8fG4gaW4gZXx8SmEobikpJiYidW5kZWZpbmVkIiE9dHlwZW9mIE5vZGUmJm51bGwhPT1Ob2RlJiZlIGluc3RhbmNlb2YgTm9kZSl9KSh0LGwsbyxlKSlyZXR1cm4gdm9pZCBucChvLGUpO25nRGV2TW9kZS5yZW5kZXJlclNldFByb3BlcnR5Kyt9aT1udWxsIT1yP3IoaSxlLnZhbHVlfHwiIixvKTppLFZpKGEpP2Euc2V0UHJvcGVydHkobCxvLGkpOkphKG8pfHwobC5zZXRQcm9wZXJ0eT9sLnNldFByb3BlcnR5KG8saSk6bFtvXT1pKX1lbHNlIDEyJmUudHlwZSYmbmdEZXZNb2RlJiYhZXAodCxlLnZhbHVlKSYmbnAobyxlKX1mdW5jdGlvbiB0cCh0LGUsbixvLGkpe2NvbnN0IGE9dFsxMV07bz0oZnVuY3Rpb24gcih0KXtyZXR1cm5gbmctcmVmbGVjdC0ke3Q9KGZ1bmN0aW9uIGUodCl7cmV0dXJuIHQucmVwbGFjZShIbCwoKC4uLnQpPT4iLSIrdFsxXS50b0xvd2VyQ2FzZSgpKSl9KSh0LnJlcGxhY2UoL1skQF0vZywiXyIpKX1gfSkobyk7Y29uc3Qgcz0oZnVuY3Rpb24gbCh0KXt0cnl7cmV0dXJuIG51bGwhPXQ/dC50b1N0cmluZygpLnNsaWNlKDAsMzApOnR9Y2F0Y2godCl7cmV0dXJuIltFUlJPUl0gRXhjZXB0aW9uIHdoaWxlIHRyeWluZyB0byBzZXJpYWxpemUgdGhlIHZhbHVlIn19KShpKTtpZigzJm4pbnVsbD09aT9WaShhKT9hLnJlbW92ZUF0dHJpYnV0ZShlLG8pOmUucmVtb3ZlQXR0cmlidXRlKG8pOlZpKGEpP2Euc2V0QXR0cmlidXRlKGUsbyxzKTplLnNldEF0dHJpYnV0ZShvLHMpO2Vsc2V7Y29uc3QgdD1JbChgYmluZGluZ3M9JHtKU09OLnN0cmluZ2lmeSh7W29dOnN9LG51bGwsMil9YCk7VmkoYSk/YS5zZXRWYWx1ZShlLHQpOmUudGV4dENvbnRlbnQ9dH19ZnVuY3Rpb24gZXAodCxlKXtjb25zdCBuPXQuc2NoZW1hcztpZihudWxsIT09bilmb3IobGV0IHQ9MDt0PG4ubGVuZ3RoO3QrKyl7Y29uc3Qgbz1uW3RdO2lmKG89PT1SbHx8bz09PUFsJiZlJiZlLmluZGV4T2YoIi0iKT4tMSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBucCh0LGUpe2NvbnNvbGUuZXJyb3IoQm4oIjMwMyIsYENhbid0IGJpbmQgdG8gJyR7dH0nIHNpbmNlIGl0IGlzbid0IGEga25vd24gcHJvcGVydHkgb2YgJyR7ZS52YWx1ZX0nLmApKX1mdW5jdGlvbiBvcCh0LGUsbixvKXtuZ0Rldk1vZGUmJkNpKHQpO2xldCBpPSExO2lmKG9hKCkpe2NvbnN0IGE9KGZ1bmN0aW9uIGEodCxlLG4pe25nRGV2TW9kZSYmQ2kodCksbmdEZXZNb2RlJiZaYShuLDE1KTtjb25zdCBvPXQuZGlyZWN0aXZlUmVnaXN0cnk7bGV0IGk9bnVsbDtpZihvKWZvcihsZXQgYT0wO2E8by5sZW5ndGg7YSsrKXtjb25zdCByPW9bYV07WWMobixyLnNlbGVjdG9ycywhMSkmJihpfHwoaT1uZ0Rldk1vZGU/bmV3IF9kOltdKSxkcihycihuLGUpLHQsci50eXBlKSxwaShyKT8obmdEZXZNb2RlJiYoWmEobiwyLGAiJHtuLnZhbHVlfSIgdGFncyBjYW5ub3QgYmUgdXNlZCBhcyBjb21wb25lbnQgaG9zdHMuIFBsZWFzZSB1c2UgYSBkaWZmZXJlbnQgdGFnIHRvIGFjdGl2YXRlIHRoZSAke1JuKHIudHlwZSl9IGNvbXBvbmVudC5gKSwyJm4uZmxhZ3MmJlFsKG4pKSxycCh0LG4pLGkudW5zaGlmdChyKSk6aS5wdXNoKHIpKX1yZXR1cm4gaX0pKHQsZSxuKSxyPW51bGw9PT1vP251bGw6eyIiOi0xfTtpZihudWxsIT09YSl7aT0hMCxscChuLHQuZGF0YS5sZW5ndGgsYS5sZW5ndGgpO2ZvcihsZXQgdD0wO3Q8YS5sZW5ndGg7dCsrKXtjb25zdCBlPWFbdF07ZS5wcm92aWRlcnNSZXNvbHZlciYmZS5wcm92aWRlcnNSZXNvbHZlcihlKX1sZXQgbz0hMSxzPSExLGw9VmQodCxlLGEubGVuZ3RoLG51bGwpO25nRGV2TW9kZSYmSm4obCxuLmRpcmVjdGl2ZVN0YXJ0LCJUTm9kZS5kaXJlY3RpdmVTdGFydCBzaG91bGQgcG9pbnQgdG8ganVzdCBhbGxvY2F0ZWQgc3BhY2UiKTtmb3IobGV0IGk9MDtpPGEubGVuZ3RoO2krKyl7Y29uc3QgYz1hW2ldO24ubWVyZ2VkQXR0cnM9UWEobi5tZXJnZWRBdHRycyxjLmhvc3RBdHRycyksY3AodCxuLGUsbCxjKSxzcChsLGMsciksbnVsbCE9PWMuY29udGVudFF1ZXJpZXMmJihuLmZsYWdzfD04KSxudWxsPT09Yy5ob3N0QmluZGluZ3MmJm51bGw9PT1jLmhvc3RBdHRycyYmMD09PWMuaG9zdFZhcnN8fChuLmZsYWdzfD0xMjgpO2NvbnN0IGQ9Yy50eXBlLnByb3RvdHlwZTshbyYmKGQubmdPbkNoYW5nZXN8fGQubmdPbkluaXR8fGQubmdEb0NoZWNrKSYmKCh0LnByZU9yZGVySG9va3N8fCh0LnByZU9yZGVySG9va3M9W10pKS5wdXNoKG4uaW5kZXgpLG89ITApLHN8fCFkLm5nT25DaGFuZ2VzJiYhZC5uZ0RvQ2hlY2t8fCgodC5wcmVPcmRlckNoZWNrSG9va3N8fCh0LnByZU9yZGVyQ2hlY2tIb29rcz1bXSkpLnB1c2gobi5pbmRleCkscz0hMCksbCsrfSEoZnVuY3Rpb24gcih0LGUpe25nRGV2TW9kZSYmQ2kodCk7Y29uc3Qgbj1lLmRpcmVjdGl2ZVN0YXJ0LG89ZS5kaXJlY3RpdmVFbmQsaT10LmRhdGEsYT1lLmF0dHJzLHI9bmdEZXZNb2RlP25ldyB2ZDpbXTtsZXQgcz1udWxsLGw9bnVsbDtmb3IobGV0IHQ9bjt0PG87dCsrKXtjb25zdCBuPWlbdF0sbz1uLmlucHV0cyxjPW51bGw9PT1hfHxWYyhlKT9udWxsOmZwKG8sYSk7ci5wdXNoKGMpLHM9UWQobyx0LHMpLGw9UWQobi5vdXRwdXRzLHQsbCl9bnVsbCE9PXMmJihzLmhhc093blByb3BlcnR5KCJjbGFzcyIpJiYoZS5mbGFnc3w9MTYpLHMuaGFzT3duUHJvcGVydHkoInN0eWxlIikmJihlLmZsYWdzfD0zMikpLGUuaW5pdGlhbElucHV0cz1yLGUuaW5wdXRzPXMsZS5vdXRwdXRzPWx9KSh0LG4pfXImJihmdW5jdGlvbiBzKHQsZSxuKXtpZihlKXtjb25zdCBvPXQubG9jYWxOYW1lcz1uZ0Rldk1vZGU/bmV3IE1kOltdO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCs9Mil7Y29uc3QgaT1uW2VbdCsxXV07aWYobnVsbD09aSl0aHJvdyBuZXcgRm4oIjMwMSIsYEV4cG9ydCBvZiBuYW1lICcke2VbdCsxXX0nIG5vdCBmb3VuZCFgKTtvLnB1c2goZVt0XSxpKX19fSkobixvLHIpfXJldHVybiBuLm1lcmdlZEF0dHJzPVFhKG4ubWVyZ2VkQXR0cnMsbi5hdHRycyksaX1mdW5jdGlvbiBpcCh0LGUsbixvLGksYSl7bmdEZXZNb2RlJiZDaSh0KTtjb25zdCByPWEuaG9zdEJpbmRpbmdzO2lmKHIpe2xldCBuPXQuaG9zdEJpbmRpbmdPcENvZGVzO251bGw9PT1uJiYobj10Lmhvc3RCaW5kaW5nT3BDb2Rlcz1bXSk7Y29uc3QgYT1+ZS5pbmRleDsoZnVuY3Rpb24gcyh0KXtsZXQgZT10Lmxlbmd0aDtmb3IoO2U+MDspe2NvbnN0IG49dFstLWVdO2lmKCJudW1iZXIiPT10eXBlb2YgbiYmbjwwKXJldHVybiBufXJldHVybiAwfSkobikhPWEmJm4ucHVzaChhKSxuLnB1c2gobyxpLHIpfX1mdW5jdGlvbiBhcCh0LGUpe251bGwhPT10Lmhvc3RCaW5kaW5ncyYmdC5ob3N0QmluZGluZ3MoMSxlKX1mdW5jdGlvbiBycCh0LGUpe25nRGV2TW9kZSYmQ2kodCksZS5mbGFnc3w9MiwodC5jb21wb25lbnRzfHwodC5jb21wb25lbnRzPW5nRGV2TW9kZT9uZXcgQ2Q6W10pKS5wdXNoKGUuaW5kZXgpfWZ1bmN0aW9uIHNwKHQsZSxuKXtpZihuKXtpZihlLmV4cG9ydEFzKWZvcihsZXQgbz0wO288ZS5leHBvcnRBcy5sZW5ndGg7bysrKW5bZS5leHBvcnRBc1tvXV09dDtwaShlKSYmKG5bIiJdPXQpfX1mdW5jdGlvbiBscCh0LGUsbil7bmdEZXZNb2RlJiZLbihuLHQuZGlyZWN0aXZlRW5kLXQuZGlyZWN0aXZlU3RhcnQsIlJlYWNoZWQgdGhlIG1heCBudW1iZXIgb2YgZGlyZWN0aXZlcyIpLHQuZmxhZ3N8PTEsdC5kaXJlY3RpdmVTdGFydD1lLHQuZGlyZWN0aXZlRW5kPWUrbix0LnByb3ZpZGVySW5kZXhlcz1lfWZ1bmN0aW9uIGNwKHQsZSxuLG8saSl7bmdEZXZNb2RlJiZubyhvLG9pLCJNdXN0IGJlIGluIEV4cGFuZG8gc2VjdGlvbiIpLHQuZGF0YVtvXT1pO2NvbnN0IGE9aS5mYWN0b3J5fHwoaS5mYWN0b3J5PXdpKGkudHlwZSwhMCkpLHI9bmV3IFlhKGEscGkoaSksbnVsbCk7dC5ibHVlcHJpbnRbb109cixuW29dPXIsaXAodCxlLDAsbyxWZCh0LG4saS5ob3N0VmFycyxLYyksaSl9ZnVuY3Rpb24gZHAodCxlLG4pe2NvbnN0IG89R2koZSx0KSxpPVhkKG4pLGE9dFsxMF0scj1DcCh0LEZkKHQsaSxudWxsLG4ub25QdXNoPzY0OjE2LG8sZSxhLGEuY3JlYXRlUmVuZGVyZXIobyxuKSxudWxsLG51bGwpKTt0W2UuaW5kZXhdPXJ9ZnVuY3Rpb24gcHAodCxlLG4sbyxpLGEpe25nRGV2TW9kZSYmKFFuKG8sS2MsIkluY29taW5nIHZhbHVlIHNob3VsZCBuZXZlciBiZSBOT19DSEFOR0UuIiksKGZ1bmN0aW9uIHIodCl7aWYodC50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoIm9uIikpe2NvbnN0IGU9YEJpbmRpbmcgdG8gZXZlbnQgYXR0cmlidXRlICcke3R9JyBpcyBkaXNhbGxvd2VkIGZvciBzZWN1cml0eSByZWFzb25zLCBwbGVhc2UgdXNlICgke3Quc2xpY2UoMil9KT0uLi5gO3Rocm93IG5ldyBFcnJvcihlKX19KShuKSxaYSh0LDIsYEF0dGVtcHRlZCB0byBzZXQgYXR0cmlidXRlIFxgJHtufVxgIG9uIGEgY29udGFpbmVyIG5vZGUuIEhvc3QgYmluZGluZ3MgYXJlIG5vdCB2YWxpZCBvbiBuZy1jb250YWluZXIgb3IgbmctdGVtcGxhdGUuYCkpO2NvbnN0IHM9R2kodCxlKTttcChlWzExXSxzLGEsdC52YWx1ZSxuLG8saSl9ZnVuY3Rpb24gbXAodCxlLG4sbyxpLGEscil7aWYobnVsbD09YSluZ0Rldk1vZGUmJm5nRGV2TW9kZS5yZW5kZXJlclJlbW92ZUF0dHJpYnV0ZSsrLFZpKHQpP3QucmVtb3ZlQXR0cmlidXRlKGUsaSxuKTplLnJlbW92ZUF0dHJpYnV0ZShpKTtlbHNle25nRGV2TW9kZSYmbmdEZXZNb2RlLnJlbmRlcmVyU2V0QXR0cmlidXRlKys7Y29uc3Qgcz1udWxsPT1yP1ZuKGEpOnIoYSxvfHwiIixpKTtWaSh0KT90LnNldEF0dHJpYnV0ZShlLGkscyxuKTpuP2Uuc2V0QXR0cmlidXRlTlMobixpLHMpOmUuc2V0QXR0cmlidXRlKGkscyl9fWZ1bmN0aW9uIHVwKHQsZSxuLG8saSxhKXtjb25zdCByPWFbZV07aWYobnVsbCE9PXIpe2NvbnN0IGU9by5zZXRJbnB1dDtmb3IobGV0IGE9MDthPHIubGVuZ3RoOyl7Y29uc3Qgcz1yW2ErK10sbD1yW2ErK10sYz1yW2ErK107bnVsbCE9PWU/by5zZXRJbnB1dChuLGMscyxsKTpuW2xdPWMsbmdEZXZNb2RlJiZ0cCh0LEdpKGksdCksaS50eXBlLGwsYyl9fX1mdW5jdGlvbiBmcCh0LGUpe2xldCBuPW51bGwsbz0wO2Zvcig7bzxlLmxlbmd0aDspe2NvbnN0IGk9ZVtvXTtpZigwIT09aSlpZig1IT09aSl7aWYoIm51bWJlciI9PXR5cGVvZiBpKWJyZWFrO3QuaGFzT3duUHJvcGVydHkoaSkmJihudWxsPT09biYmKG49W10pLG4ucHVzaChpLHRbaV0sZVtvKzFdKSksbys9Mn1lbHNlIG8rPTI7ZWxzZSBvKz00fXJldHVybiBufWNvbnN0IGdwPSgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmQW8oKSYmemwoIkxDb250YWluZXIiKTtmdW5jdGlvbiBocCh0LGUsbixvKXtuZ0Rldk1vZGUmJl9pKGUpLG5nRGV2TW9kZSYmIVZpKGVbMTFdKSYmYW8obik7Y29uc3QgaT1uZXcobmdEZXZNb2RlP2dwOkFycmF5KSh0LCEwLCExLGUsbnVsbCwwLG8sbixudWxsLG51bGwpO3JldHVybiBuZ0Rldk1vZGUmJlhuKGkubGVuZ3RoLGFpLCJTaG91bGQgYWxsb2NhdGUgY29ycmVjdCBudW1iZXIgb2Ygc2xvdHMgZm9yIExDb250YWluZXIgaGVhZGVyLiIpLG5nRGV2TW9kZSYmKGZ1bmN0aW9uIGEodCl7c2QodCxuZXcgSWQodCkpfSkoaSksaX1mdW5jdGlvbiBicCh0LGUpe25nRGV2TW9kZSYmWG4oSmkodCksITEsIlNob3VsZCBiZSBydW4gaW4gdXBkYXRlIG1vZGUiKTtjb25zdCBuPVppKGUsdCk7aWYoUWkobikpe2NvbnN0IHQ9blsxXTs4MCZuWzJdP1VkKHQsbix0LnRlbXBsYXRlLG5bOF0pOm5bNV0+MCYmeXAobil9fWZ1bmN0aW9uIHlwKHQpe2ZvcihsZXQgZT1hYyh0KTtudWxsIT09ZTtlPXJjKGUpKWZvcihsZXQgdD1haTt0PGUubGVuZ3RoO3QrKyl7Y29uc3Qgbj1lW3RdO2lmKDEwMjQmblsyXSl7Y29uc3QgdD1uWzFdO25nRGV2TW9kZSYmb28odCwiVFZpZXcgbXVzdCBiZSBhbGxvY2F0ZWQiKSxVZCh0LG4sdC50ZW1wbGF0ZSxuWzhdKX1lbHNlIG5bNV0+MCYmeXAobil9Y29uc3QgZT10WzFdLmNvbXBvbmVudHM7aWYobnVsbCE9PWUpZm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspe2NvbnN0IG89WmkoZVtuXSx0KTtRaShvKSYmb1s1XT4wJiZ5cChvKX19ZnVuY3Rpb24gX3AodCxlKXtuZ0Rldk1vZGUmJlhuKEppKHQpLCEwLCJTaG91bGQgYmUgcnVuIGluIGNyZWF0aW9uIG1vZGUiKTtjb25zdCBuPVppKGUsdCksbz1uWzFdOyEoZnVuY3Rpb24gaSh0LGUpe2ZvcihsZXQgbj1lLmxlbmd0aDtuPHQuYmx1ZXByaW50Lmxlbmd0aDtuKyspZS5wdXNoKHQuYmx1ZXByaW50W25dKX0pKG8sbiksamQobyxuLG5bOF0pfWZ1bmN0aW9uIENwKHQsZSl7cmV0dXJuIHRbMTNdP3RbMTRdWzRdPWU6dFsxM109ZSx0WzE0XT1lLGV9ZnVuY3Rpb24gTXAodCl7Zm9yKDt0Oyl7dFsyXXw9NjQ7Y29uc3QgZT1vYyh0KTtpZigwIT0oNTEyJnRbMl0pJiYhZSlyZXR1cm4gdDt0PWV9cmV0dXJuIG51bGx9ZnVuY3Rpb24gdnAodCl7Zm9yKGxldCBlPTA7ZTx0LmNvbXBvbmVudHMubGVuZ3RoO2UrKyl7Y29uc3Qgbj10LmNvbXBvbmVudHNbZV0sbz1LaShuKSxpPW9bMV07V2QoaSxvLGkudGVtcGxhdGUsbil9fWZ1bmN0aW9uIHhwKHQsZSxuKXtjb25zdCBvPWVbMTBdO28uYmVnaW4mJm8uYmVnaW4oKTt0cnl7VWQodCxlLHQudGVtcGxhdGUsbil9Y2F0Y2godCl7dGhyb3cgQXAoZSx0KSx0fWZpbmFsbHl7by5lbmQmJm8uZW5kKCl9fWZ1bmN0aW9uIE9wKHQpe3ZwKHRbOF0pfWZ1bmN0aW9uIFBwKHQsZSxuKXtuZ0Rldk1vZGUmJm9vKGUsIlZpZXcgcXVlcmllcyBmdW5jdGlvbiB0byBleGVjdXRlIG11c3QgYmUgZGVmaW5lZC4iKSxQYSgwKSxlKHQsbil9ZnVuY3Rpb24gd3AodCxlLG4sbywuLi5pKXtpZihudWxsPT09dFtvXSYmKG51bGw9PWUuaW5wdXRzfHwhZS5pbnB1dHNbbl0pKXsoZS5wcm9wZXJ0eUJpbmRpbmdzfHwoZS5wcm9wZXJ0eUJpbmRpbmdzPVtdKSkucHVzaChvKTtsZXQgYT1uO2kubGVuZ3RoPjAmJihhKz1LbCtpLmpvaW4oS2wpKSx0W29dPWF9fWNvbnN0IGtwPXpkO2Z1bmN0aW9uIFNwKHQpe3JldHVybiB0WzddfHwodFs3XT1uZ0Rldk1vZGU/bmV3IHhkOltdKX1mdW5jdGlvbiBEcCh0KXtyZXR1cm4gdC5jbGVhbnVwfHwodC5jbGVhbnVwPW5nRGV2TW9kZT9uZXcgT2Q6W10pfWZ1bmN0aW9uIEVwKHQsZSxuKXtyZXR1cm4obnVsbD09PXR8fHBpKHQpKSYmKG49KGZ1bmN0aW9uIG8odCl7Zm9yKDtBcnJheS5pc0FycmF5KHQpOyl7aWYoIm9iamVjdCI9PXR5cGVvZiB0WzFdKXJldHVybiB0O3Q9dFswXX1yZXR1cm4gbnVsbH0pKG5bZS5pbmRleF0pKSxuWzExXX1mdW5jdGlvbiBBcCh0LGUpe2NvbnN0IG49dFs5XSxvPW4/bi5nZXQoRWwsbnVsbCk6bnVsbDtvJiZvLmhhbmRsZUVycm9yKGUpfWZ1bmN0aW9uIFJwKHQsZSxuLG8saSl7Zm9yKGxldCBhPTA7YTxuLmxlbmd0aDspe2NvbnN0IHI9blthKytdLHM9blthKytdLGw9ZVtyXTtuZ0Rldk1vZGUmJnJvKGUscik7Y29uc3QgYz10LmRhdGFbcl07bnVsbCE9PWMuc2V0SW5wdXQ/Yy5zZXRJbnB1dChsLGksbyxzKTpsW3NdPWl9fWZ1bmN0aW9uIFRwKHQsZSxuKXtuZ0Rldk1vZGUmJlpuKG4sIlZhbHVlIHNob3VsZCBiZSBhIHN0cmluZyIpLG5nRGV2TW9kZSYmUW4obixLYywidmFsdWUgc2hvdWxkIG5vdCBiZSBOT19DSEFOR0UiKSxuZ0Rldk1vZGUmJnJvKHQsZSk7Y29uc3Qgbz1XaShlLHQpO25nRGV2TW9kZSYmb28obywibmF0aXZlIGVsZW1lbnQgc2hvdWxkIGV4aXN0IiksZGModFsxMV0sbyxuKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovZnVuY3Rpb24gTnAodCxlLG4pe25nRGV2TW9kZSYmQ2koYWEoKSwiRXhwZWN0aW5nIHRvIGJlIGNhbGxlZCBpbiBmaXJzdCB0ZW1wbGF0ZSBwYXNzIG9ubHkiKTtsZXQgbz1uP3Quc3R5bGVzOm51bGwsaT1uP3QuY2xhc3NlczpudWxsLGE9MDtpZihudWxsIT09ZSlmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyl7Y29uc3Qgbj1lW3RdOyJudW1iZXIiPT10eXBlb2Ygbj9hPW46MT09YT9pPVRuKGksbik6Mj09YSYmKG89VG4obyxuKyI6ICIrZVsrK3RdKyI7IikpfW4/dC5zdHlsZXM9bzp0LnN0eWxlc1dpdGhvdXRIb3N0PW8sbj90LmNsYXNzZXM9aTp0LmNsYXNzZXNXaXRob3V0SG9zdD1pfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IElwPW5ldyBOcigiSU5KRUNUT1IiLC0xKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY2xhc3MgenB7Z2V0KHQsZT1ycyl7aWYoZT09PXJzKXtjb25zdCBlPW5ldyBFcnJvcihgTnVsbEluamVjdG9yRXJyb3I6IE5vIHByb3ZpZGVyIGZvciAke1JuKHQpfSFgKTt0aHJvdyBlLm5hbWU9Ik51bGxJbmplY3RvckVycm9yIixlfXJldHVybiBlfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY29uc3QgSHA9bmV3IE5yKCJTZXQgSW5qZWN0b3Igc2NvcGUuIiksRnA9e30sTHA9e30sQnA9W107Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2xldCBWcDtmdW5jdGlvbiBqcCgpe3JldHVybiB2b2lkIDA9PT1WcCYmKFZwPW5ldyB6cCksVnB9ZnVuY3Rpb24gVXAodCxlPW51bGwsbj1udWxsLG8pe3JldHVybiBuZXcgV3AodCxuLGV8fGpwKCksbyl9Y2xhc3MgV3B7Y29uc3RydWN0b3IodCxlLG4sbz1udWxsKXt0aGlzLnBhcmVudD1uLHRoaXMucmVjb3Jkcz1uZXcgTWFwLHRoaXMuaW5qZWN0b3JEZWZUeXBlcz1uZXcgU2V0LHRoaXMub25EZXN0cm95PW5ldyBTZXQsdGhpcy5fZGVzdHJveWVkPSExO2NvbnN0IGk9W107ZSYmWXIoZSwobj0+dGhpcy5wcm9jZXNzUHJvdmlkZXIobix0LGUpKSksWXIoW3RdLCh0PT50aGlzLnByb2Nlc3NJbmplY3RvclR5cGUodCxbXSxpKSkpLHRoaXMucmVjb3Jkcy5zZXQoSXAscXAodm9pZCAwLHRoaXMpKTtjb25zdCBhPXRoaXMucmVjb3Jkcy5nZXQoSHApO3RoaXMuc2NvcGU9bnVsbCE9YT9hLnZhbHVlOm51bGwsdGhpcy5zb3VyY2U9b3x8KCJvYmplY3QiPT10eXBlb2YgdD9udWxsOlJuKHQpKX1nZXQgZGVzdHJveWVkKCl7cmV0dXJuIHRoaXMuX2Rlc3Ryb3llZH1kZXN0cm95KCl7dGhpcy5hc3NlcnROb3REZXN0cm95ZWQoKSx0aGlzLl9kZXN0cm95ZWQ9ITA7dHJ5e3RoaXMub25EZXN0cm95LmZvckVhY2goKHQ9PnQubmdPbkRlc3Ryb3koKSkpfWZpbmFsbHl7dGhpcy5yZWNvcmRzLmNsZWFyKCksdGhpcy5vbkRlc3Ryb3kuY2xlYXIoKSx0aGlzLmluamVjdG9yRGVmVHlwZXMuY2xlYXIoKX19Z2V0KHQsZT1ycyxuPXlvLkRlZmF1bHQpe3RoaXMuYXNzZXJ0Tm90RGVzdHJveWVkKCk7Y29uc3Qgbz1wcyh0aGlzKTt0cnl7aWYoIShuJnlvLlNraXBTZWxmKSl7bGV0IGU9dGhpcy5yZWNvcmRzLmdldCh0KTtpZih2b2lkIDA9PT1lKXtjb25zdCBuPShmdW5jdGlvbiBpKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0fHwib2JqZWN0Ij09dHlwZW9mIHQmJnQgaW5zdGFuY2VvZiBOcn0pKHQpJiZwbyh0KTtlPW4mJnRoaXMuaW5qZWN0YWJsZURlZkluU2NvcGUobik/cXAoR3AodCksRnApOm51bGwsdGhpcy5yZWNvcmRzLnNldCh0LGUpfWlmKG51bGwhPWUpcmV0dXJuIHRoaXMuaHlkcmF0ZSh0LGUpfXJldHVybihuJnlvLlNlbGY/anAoKTp0aGlzLnBhcmVudCkuZ2V0KHQsZT1uJnlvLk9wdGlvbmFsJiZlPT09cnM/bnVsbDplKX1jYXRjaChlKXtpZigiTnVsbEluamVjdG9yRXJyb3IiPT09ZS5uYW1lKXtpZigoZS5uZ1RlbXBUb2tlblBhdGg9ZS5uZ1RlbXBUb2tlblBhdGh8fFtdKS51bnNoaWZ0KFJuKHQpKSxvKXRocm93IGU7cmV0dXJuKGZ1bmN0aW9uIGEodCxlLG4sbyl7Y29uc3QgaT10Lm5nVGVtcFRva2VuUGF0aDt0aHJvdyBlW2xzXSYmaS51bnNoaWZ0KGVbbHNdKSx0Lm1lc3NhZ2U9KGZ1bmN0aW9uIGEodCxlLG4sbz1udWxsKXt0PXQmJiJcbiI9PT10LmNoYXJBdCgwKSYmIsm1Ij09dC5jaGFyQXQoMSk/dC5zdWJzdHIoMik6dDtsZXQgaT1SbihlKTtpZihBcnJheS5pc0FycmF5KGUpKWk9ZS5tYXAoUm4pLmpvaW4oIiAtPiAiKTtlbHNlIGlmKCJvYmplY3QiPT10eXBlb2YgZSl7bGV0IHQ9W107Zm9yKGxldCBuIGluIGUpaWYoZS5oYXNPd25Qcm9wZXJ0eShuKSl7bGV0IG89ZVtuXTt0LnB1c2gobisiOiIrKCJzdHJpbmciPT10eXBlb2Ygbz9KU09OLnN0cmluZ2lmeShvKTpSbihvKSkpfWk9YHske3Quam9pbigiLCAiKX19YH1yZXR1cm5gJHtufSR7bz8iKCIrbysiKSI6IiJ9WyR7aX1dOiAke3QucmVwbGFjZShzcywiXG4gICIpfWB9KSgiXG4iK3QubWVzc2FnZSxpLG4sbyksdC5uZ1Rva2VuUGF0aD1pLHQubmdUZW1wVG9rZW5QYXRoPW51bGwsdH0pKGUsdCwiUjNJbmplY3RvckVycm9yIix0aGlzLnNvdXJjZSl9dGhyb3cgZX1maW5hbGx5e3BzKG8pfX1fcmVzb2x2ZUluamVjdG9yRGVmVHlwZXMoKXt0aGlzLmluamVjdG9yRGVmVHlwZXMuZm9yRWFjaCgodD0+dGhpcy5nZXQodCkpKX10b1N0cmluZygpe2NvbnN0IHQ9W107cmV0dXJuIHRoaXMucmVjb3Jkcy5mb3JFYWNoKCgoZSxuKT0+dC5wdXNoKFJuKG4pKSkpLGBSM0luamVjdG9yWyR7dC5qb2luKCIsICIpfV1gfWFzc2VydE5vdERlc3Ryb3llZCgpe2lmKHRoaXMuX2Rlc3Ryb3llZCl0aHJvdyBuZXcgRXJyb3IoIkluamVjdG9yIGhhcyBhbHJlYWR5IGJlZW4gZGVzdHJveWVkLiIpfXByb2Nlc3NJbmplY3RvclR5cGUodCxlLG4pe2lmKCEodD16bih0KSkpcmV0dXJuITE7bGV0IG89dW8odCk7Y29uc3QgaT1udWxsPT1vJiZ0Lm5nTW9kdWxlfHx2b2lkIDAsYT12b2lkIDA9PT1pP3Q6aTtuZ0Rldk1vZGUmJi0xIT09ZS5pbmRleE9mKGEpJiZVbihSbihhKSxlLm1hcChSbikpO2NvbnN0IHI9LTEhPT1uLmluZGV4T2YoYSk7aWYodm9pZCAwIT09aSYmKG89dW8oaSkpLG51bGw9PW8pcmV0dXJuITE7aWYobnVsbCE9by5pbXBvcnRzJiYhcil7bGV0IHQ7bmdEZXZNb2RlJiZlLnB1c2goYSksbi5wdXNoKGEpO3RyeXtZcihvLmltcG9ydHMsKG89Pnt0aGlzLnByb2Nlc3NJbmplY3RvclR5cGUobyxlLG4pJiYodm9pZCAwPT09dCYmKHQ9W10pLHQucHVzaChvKSl9KSl9ZmluYWxseXtuZ0Rldk1vZGUmJmUucG9wKCl9aWYodm9pZCAwIT09dClmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKyl7Y29uc3R7bmdNb2R1bGU6bixwcm92aWRlcnM6b309dFtlXTtZcihvLCh0PT50aGlzLnByb2Nlc3NQcm92aWRlcih0LG4sb3x8QnApKSl9fXRoaXMuaW5qZWN0b3JEZWZUeXBlcy5hZGQoYSk7Y29uc3Qgcz13aShhKXx8KCgpPT5uZXcgYSk7dGhpcy5yZWNvcmRzLnNldChhLHFwKHMsRnApKTtjb25zdCBsPW8ucHJvdmlkZXJzO2lmKG51bGwhPWwmJiFyKXtjb25zdCBlPXQ7WXIobCwodD0+dGhpcy5wcm9jZXNzUHJvdmlkZXIodCxlLGwpKSl9cmV0dXJuIHZvaWQgMCE9PWkmJnZvaWQgMCE9PXQucHJvdmlkZXJzfXByb2Nlc3NQcm92aWRlcih0LGUsbil7bGV0IG89WHAodD16bih0KSk/dDp6bih0JiZ0LnByb3ZpZGUpO2NvbnN0IGk9KGZ1bmN0aW9uIGEodCxlLG4pe3JldHVybiBacCh0KT9xcCh2b2lkIDAsdC51c2VWYWx1ZSk6cXAoWXAodCxlLG4pLEZwKX0pKHQsZSxuKTtpZihYcCh0KXx8ITAhPT10Lm11bHRpKXtjb25zdCB0PXRoaXMucmVjb3Jkcy5nZXQobyk7bmdEZXZNb2RlJiZ0JiZ2b2lkIDAhPT10Lm11bHRpJiZXbigpfWVsc2V7bGV0IGU9dGhpcy5yZWNvcmRzLmdldChvKTtlP25nRGV2TW9kZSYmdm9pZCAwPT09ZS5tdWx0aSYmV24oKTooZT1xcCh2b2lkIDAsRnAsITApLGUuZmFjdG9yeT0oKT0+aHMoZS5tdWx0aSksdGhpcy5yZWNvcmRzLnNldChvLGUpKSxvPXQsZS5tdWx0aS5wdXNoKHQpfXRoaXMucmVjb3Jkcy5zZXQobyxpKX1oeWRyYXRlKHQsZSl7cmV0dXJuIG5nRGV2TW9kZSYmZS52YWx1ZT09PUxwP1VuKFJuKHQpKTplLnZhbHVlPT09RnAmJihlLnZhbHVlPUxwLGUudmFsdWU9ZS5mYWN0b3J5KCkpLCJvYmplY3QiPT10eXBlb2YgZS52YWx1ZSYmZS52YWx1ZSYmKGZ1bmN0aW9uIG4odCl7cmV0dXJuIG51bGwhPT10JiYib2JqZWN0Ij09dHlwZW9mIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0Lm5nT25EZXN0cm95fSkoZS52YWx1ZSkmJnRoaXMub25EZXN0cm95LmFkZChlLnZhbHVlKSxlLnZhbHVlfWluamVjdGFibGVEZWZJblNjb3BlKHQpe3JldHVybiEhdC5wcm92aWRlZEluJiYoInN0cmluZyI9PXR5cGVvZiB0LnByb3ZpZGVkSW4/ImFueSI9PT10LnByb3ZpZGVkSW58fHQucHJvdmlkZWRJbj09PXRoaXMuc2NvcGU6dGhpcy5pbmplY3RvckRlZlR5cGVzLmhhcyh0LnByb3ZpZGVkSW4pKX19ZnVuY3Rpb24gR3AodCl7Y29uc3QgZT1wbyh0KSxuPW51bGwhPT1lP2UuZmFjdG9yeTp3aSh0KTtpZihudWxsIT09bilyZXR1cm4gbjtpZih0IGluc3RhbmNlb2YgTnIpdGhyb3cgbmV3IEVycm9yKGBUb2tlbiAke1JuKHQpfSBpcyBtaXNzaW5nIGEgybVwcm92IGRlZmluaXRpb24uYCk7aWYodCBpbnN0YW5jZW9mIEZ1bmN0aW9uKXJldHVybihmdW5jdGlvbiBvKHQpe2NvbnN0IGU9dC5sZW5ndGg7aWYoZT4wKXtjb25zdCBuPVhyKGUsIj8iKTt0aHJvdyBuZXcgRXJyb3IoYENhbid0IHJlc29sdmUgYWxsIHBhcmFtZXRlcnMgZm9yICR7Um4odCl9OiAoJHtuLmpvaW4oIiwgIil9KS5gKX1jb25zdCBuPShmdW5jdGlvbiBvKHQpe2NvbnN0IGU9dCYmKHRbZm9dfHx0W2hvXSk7aWYoZSl7Y29uc3Qgbj0oZnVuY3Rpb24gbih0KXtpZih0Lmhhc093blByb3BlcnR5KCJuYW1lIikpcmV0dXJuIHQubmFtZTtjb25zdCBlPSgiIit0KS5tYXRjaCgvXmZ1bmN0aW9uXHMqKFteXHMoXSspLyk7cmV0dXJuIG51bGw9PT1lPyIiOmVbMV19KSh0KTtyZXR1cm4gY29uc29sZS53YXJuKGBERVBSRUNBVEVEOiBESSBpcyBpbnN0YW50aWF0aW5nIGEgdG9rZW4gIiR7bn0iIHRoYXQgaW5oZXJpdHMgaXRzIEBJbmplY3RhYmxlIGRlY29yYXRvciBidXQgZG9lcyBub3QgcHJvdmlkZSBvbmUgaXRzZWxmLlxuVGhpcyB3aWxsIGJlY29tZSBhbiBlcnJvciBpbiBhIGZ1dHVyZSB2ZXJzaW9uIG9mIEFuZ3VsYXIuIFBsZWFzZSBhZGQgQEluamVjdGFibGUoKSB0byB0aGUgIiR7bn0iIGNsYXNzLmApLGV9cmV0dXJuIG51bGx9KSh0KTtyZXR1cm4gbnVsbCE9PW4/KCk9Pm4uZmFjdG9yeSh0KTooKT0+bmV3IHR9KSh0KTt0aHJvdyBuZXcgRXJyb3IoInVucmVhY2hhYmxlIil9ZnVuY3Rpb24gWXAodCxlLG4pe2xldCBvO2lmKFhwKHQpKXtjb25zdCBlPXpuKHQpO3JldHVybiB3aShlKXx8R3AoZSl9aWYoWnAodCkpbz0oKT0+em4odC51c2VWYWx1ZSk7ZWxzZSBpZigoZnVuY3Rpb24gaSh0KXtyZXR1cm4hKCF0fHwhdC51c2VGYWN0b3J5KX0pKHQpKW89KCk9PnQudXNlRmFjdG9yeSguLi5ocyh0LmRlcHN8fFtdKSk7ZWxzZSBpZigoZnVuY3Rpb24gYSh0KXtyZXR1cm4hKCF0fHwhdC51c2VFeGlzdGluZyl9KSh0KSlvPSgpPT51cyh6bih0LnVzZUV4aXN0aW5nKSk7ZWxzZXtjb25zdCBpPXpuKHQmJih0LnVzZUNsYXNzfHx0LnByb3ZpZGUpKTtpZihuZ0Rldk1vZGUmJiFpJiYoZnVuY3Rpb24gcih0LGUsbil7bGV0IG89IiI7dGhyb3cgdCYmZSYmKG89YCAtIG9ubHkgaW5zdGFuY2VzIG9mIFByb3ZpZGVyIGFuZCBUeXBlIGFyZSBhbGxvd2VkLCBnb3Q6IFske2UubWFwKCh0PT50PT1uPyI/IituKyI/IjoiLi4uIikpLmpvaW4oIiwgIil9XWApLG5ldyBFcnJvcihgSW52YWxpZCBwcm92aWRlciBmb3IgdGhlIE5nTW9kdWxlICcke1JuKHQpfSdgK28pfSkoZSxuLHQpLCEoZnVuY3Rpb24gcyh0KXtyZXR1cm4hIXQuZGVwc30pKHQpKXJldHVybiB3aShpKXx8R3AoaSk7bz0oKT0+bmV3IGkoLi4uaHModC5kZXBzKSl9cmV0dXJuIG99ZnVuY3Rpb24gcXAodCxlLG49ITEpe3JldHVybntmYWN0b3J5OnQsdmFsdWU6ZSxtdWx0aTpuP1tdOnZvaWQgMH19ZnVuY3Rpb24gWnAodCl7cmV0dXJuIG51bGwhPT10JiYib2JqZWN0Ij09dHlwZW9mIHQmJmNzIGluIHR9ZnVuY3Rpb24gWHAodCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHR9Y29uc3QgS3A9ZnVuY3Rpb24gSnAodCxlLG4pe3JldHVybihmdW5jdGlvbiBvKHQsZT1udWxsLG49bnVsbCxpKXtjb25zdCBhPVVwKHQsZSxuLGkpO3JldHVybiBhLl9yZXNvbHZlSW5qZWN0b3JEZWZUeXBlcygpLGF9KSh7bmFtZTpufSxlLHQsbil9O2NsYXNzIFFwe3N0YXRpYyBjcmVhdGUodCxlKXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT9LcCh0LGUsIiIpOktwKHQucHJvdmlkZXJzLHQucGFyZW50LHQubmFtZXx8IiIpfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmZ1bmN0aW9uICRwKHQpe2NtKHQpO2NvbnN0IGU9YW0odCwhMSk7cmV0dXJuIG51bGw9PT1lP251bGw6KHZvaWQgMD09PWUuY29tcG9uZW50JiYoZS5jb21wb25lbnQ9KGZ1bmN0aW9uIG4odCxlKXtjb25zdCBuPWVbMV0uZGF0YVt0XTtyZXR1cm4gMiZuLmZsYWdzP2Vbbi5kaXJlY3RpdmVTdGFydF06bnVsbH0pKGUubm9kZUluZGV4LGUubFZpZXcpKSxlLmNvbXBvbmVudCl9ZnVuY3Rpb24gdG0odCl7Y20odCk7Y29uc3QgZT1hbSh0LCExKTtyZXR1cm4gbnVsbD09PWU/bnVsbDplLmxWaWV3WzhdfWZ1bmN0aW9uIGVtKHQpe2NvbnN0IGU9YW0odCwhMSk7aWYobnVsbD09PWUpcmV0dXJuIG51bGw7bGV0IG4sbz1lLmxWaWV3O2ZvcihuZ0Rldk1vZGUmJl9pKG8pOzI9PT1vWzFdLnR5cGUmJihuPW9jKG8pKTspbz1uO3JldHVybiA1MTImb1syXT9udWxsOm9bOF19ZnVuY3Rpb24gbm0odCl7cmV0dXJuWy4uLmljKHQpLmNvbXBvbmVudHNdfWZ1bmN0aW9uIG9tKHQpe2NvbnN0IGU9YW0odCwhMSk7cmV0dXJuIG51bGw9PT1lP1FwLk5VTEw6bmV3IE1yKGUubFZpZXdbMV0uZGF0YVtlLm5vZGVJbmRleF0sZS5sVmlldyl9ZnVuY3Rpb24gaW0odCl7Y29uc3QgZT1hbSh0KTtyZXR1cm4gdm9pZCAwPT09ZS5kaXJlY3RpdmVzJiYoZS5kaXJlY3RpdmVzPUdsKGUubm9kZUluZGV4LGUubFZpZXcsITEpKSxudWxsPT09ZS5kaXJlY3RpdmVzP1tdOlsuLi5lLmRpcmVjdGl2ZXNdfWZ1bmN0aW9uIGFtKHQsZT0hMCl7Y29uc3Qgbj1GbCh0KTtpZighbiYmZSl0aHJvdyBuZXcgRXJyb3IobmdEZXZNb2RlP2BVbmFibGUgdG8gZmluZCBjb250ZXh0IGFzc29jaWF0ZWQgd2l0aCAke2puKHQpfWA6IkludmFsaWQgbmcgdGFyZ2V0Iik7cmV0dXJuIG59ZnVuY3Rpb24gcm0odCl7cmV0dXJuIEZsKHQpLm5hdGl2ZX1mdW5jdGlvbiBzbSh0KXtjbSh0KTtjb25zdCBlPWFtKHQsITEpO2lmKG51bGw9PT1lKXJldHVybltdO2NvbnN0IG49ZS5sVmlldyxvPW5bN10saT1uWzFdLmNsZWFudXAsYT1bXTtpZihpJiZvKWZvcihsZXQgZT0wO2U8aS5sZW5ndGg7KXtjb25zdCByPWlbZSsrXSxzPWlbZSsrXTtpZigic3RyaW5nIj09dHlwZW9mIHIpe2NvbnN0IGw9cixjPVVpKG5bc10pLGQ9b1tpW2UrK11dLHA9aVtlKytdLG09ImJvb2xlYW4iPT10eXBlb2YgcHx8cD49MD8iZG9tIjoib3V0cHV0Iix1PSJib29sZWFuIj09dHlwZW9mIHAmJnA7dD09YyYmYS5wdXNoKHtlbGVtZW50OnQsbmFtZTpsLGNhbGxiYWNrOmQsdXNlQ2FwdHVyZTp1LHR5cGU6bX0pfX1yZXR1cm4gYS5zb3J0KGxtKSxhfWZ1bmN0aW9uIGxtKHQsZSl7cmV0dXJuIHQubmFtZT09ZS5uYW1lPzA6dC5uYW1lPGUubmFtZT8tMToxfWZ1bmN0aW9uIGNtKHQpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgRWxlbWVudCYmISh0IGluc3RhbmNlb2YgRWxlbWVudCkpdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RpbmcgaW5zdGFuY2Ugb2YgRE9NIEVsZW1lbnQiKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovZnVuY3Rpb24gZG0odCl7KGZ1bmN0aW9uIGUodCl7bmdEZXZNb2RlJiZvbyh0LCJjb21wb25lbnQiKTtjb25zdCBlPU1wKEJsKHQpKTtuZ0Rldk1vZGUmJm9vKGVbOF0sInJvb3RDb250ZXh0IHNob3VsZCBiZSBkZWZpbmVkIiksKGZ1bmN0aW9uIG4odCxlKXtpZigwPT09dC5mbGFncyYmdC5jbGVhbj09emQpe2xldCBuO3QuZmxhZ3N8PWUsdC5jbGVhbj1uZXcgUHJvbWlzZSgodD0+bj10KSksdC5zY2hlZHVsZXIoKCgpPT57aWYoMSZ0LmZsYWdzJiYodC5mbGFncyY9LTIsdnAodCkpLDImdC5mbGFncyl7dC5mbGFncyY9LTM7Y29uc3QgZT10LnBsYXllckhhbmRsZXI7ZSYmZS5mbHVzaFBsYXllcnMoKX10LmNsZWFuPXpkLG4obnVsbCl9KSl9fSkoZVs4XSwxKX0pKHQpLG5tKHQpLmZvckVhY2goKHQ9PihmdW5jdGlvbiBlKHQpe2NvbnN0IGU9QmwodCk7eHAoZVsxXSxlLHQpfSkodCkpKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovUXAuVEhST1dfSUZfTk9UX0ZPVU5EPXJzLFFwLk5VTEw9bmV3IHpwLFFwLsm1cHJvdj1sbyh7dG9rZW46UXAscHJvdmlkZWRJbjoiYW55IixmYWN0b3J5OigpPT51cyhJcCl9KSxRcC5fX05HX0VMRU1FTlRfSURfXz0tMTtsZXQgcG09ITE7ZnVuY3Rpb24gbW0odCxlKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIENPTVBJTEVEfHwhQ09NUElMRUQpe2NvbnN0IG49RW87aWYobmdEZXZNb2RlJiZvbyhlLCJmdW5jdGlvbiBub3QgZGVmaW5lZCIpLG4pe2xldCBvPW4ubmc7b3x8KG89bi5uZz17fSksb1t0XT1lfX19ZnVuY3Rpb24gdW0odCxlKXtjb25zdCBuPUtpKHQpO25nRGV2TW9kZSYmb28obiwiTFZpZXcgaXMgcmVxdWlyZWQiKTtjb25zdCBvPW5bMV0saT1zYSgpO25nRGV2TW9kZSYmb28oaSwiVE5vZGUgaXMgcmVxdWlyZWQiKSxMYShvLGkpfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiBmbSh0KXtyZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKHQucHJvdG90eXBlKS5jb25zdHJ1Y3Rvcn1mdW5jdGlvbiBnbSh0KXtsZXQgZT1mbSh0LnR5cGUpLG49ITA7Y29uc3Qgbz1bdF07Zm9yKDtlOyl7bGV0IGk7aWYocGkodCkpaT1lLsm1Y21wfHxlLsm1ZGlyO2Vsc2V7aWYoZS7JtWNtcCl0aHJvdyBuZXcgRXJyb3IoIkRpcmVjdGl2ZXMgY2Fubm90IGluaGVyaXQgQ29tcG9uZW50cyIpO2k9ZS7JtWRpcn1pZihpKXtpZihuKXtvLnB1c2goaSk7Y29uc3QgZT10O2UuaW5wdXRzPWhtKHQuaW5wdXRzKSxlLmRlY2xhcmVkSW5wdXRzPWhtKHQuZGVjbGFyZWRJbnB1dHMpLGUub3V0cHV0cz1obSh0Lm91dHB1dHMpO2NvbnN0IG49aS5ob3N0QmluZGluZ3M7biYmX20odCxuKTtjb25zdCBhPWkudmlld1F1ZXJ5LHI9aS5jb250ZW50UXVlcmllcztpZihhJiZibSh0LGEpLHImJnltKHQsciksQW4odC5pbnB1dHMsaS5pbnB1dHMpLEFuKHQuZGVjbGFyZWRJbnB1dHMsaS5kZWNsYXJlZElucHV0cyksQW4odC5vdXRwdXRzLGkub3V0cHV0cykscGkoaSkmJmkuZGF0YS5hbmltYXRpb24pe2NvbnN0IGU9dC5kYXRhO2UuYW5pbWF0aW9uPShlLmFuaW1hdGlvbnx8W10pLmNvbmNhdChpLmRhdGEuYW5pbWF0aW9uKX19Y29uc3QgZT1pLmZlYXR1cmVzO2lmKGUpZm9yKGxldCBvPTA7bzxlLmxlbmd0aDtvKyspe2NvbnN0IGk9ZVtvXTtpJiZpLm5nSW5oZXJpdCYmaSh0KSxpPT09Z20mJihuPSExKX19ZT1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9IShmdW5jdGlvbiBpKHQpe2xldCBlPTAsbj1udWxsO2ZvcihsZXQgbz10Lmxlbmd0aC0xO28+PTA7by0tKXtjb25zdCBpPXRbb107aS5ob3N0VmFycz1lKz1pLmhvc3RWYXJzLGkuaG9zdEF0dHJzPVFhKGkuaG9zdEF0dHJzLG49UWEobixpLmhvc3RBdHRycykpfX0pKG8pfWZ1bmN0aW9uIGhtKHQpe3JldHVybiB0PT09Um8/e306dD09PU5vP1tdOnR9ZnVuY3Rpb24gYm0odCxlKXtjb25zdCBuPXQudmlld1F1ZXJ5O3Qudmlld1F1ZXJ5PW4/KHQsbyk9PntlKHQsbyksbih0LG8pfTplfWZ1bmN0aW9uIHltKHQsZSl7Y29uc3Qgbj10LmNvbnRlbnRRdWVyaWVzO3QuY29udGVudFF1ZXJpZXM9bj8odCxvLGkpPT57ZSh0LG8saSksbih0LG8saSl9OmV9ZnVuY3Rpb24gX20odCxlKXtjb25zdCBuPXQuaG9zdEJpbmRpbmdzO3QuaG9zdEJpbmRpbmdzPW4/KHQsbyk9PntlKHQsbyksbih0LG8pfTplfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jb25zdCBDbT1bInByb3ZpZGVyc1Jlc29sdmVyIl0sTW09WyJ0ZW1wbGF0ZSIsImRlY2xzIiwiY29uc3RzIiwidmFycyIsIm9uUHVzaCIsIm5nQ29udGVudFNlbGVjdG9ycyIsInN0eWxlcyIsImVuY2Fwc3VsYXRpb24iLCJzY2hlbWFzIl07Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpsZXQgdm09bnVsbDtmdW5jdGlvbiB4bSgpe2lmKCF2bSl7Y29uc3QgdD1Fby5TeW1ib2w7aWYodCYmdC5pdGVyYXRvcil2bT10Lml0ZXJhdG9yO2Vsc2V7Y29uc3QgdD1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhNYXAucHJvdG90eXBlKTtmb3IobGV0IGU9MDtlPHQubGVuZ3RoOysrZSl7Y29uc3Qgbj10W2VdOyJlbnRyaWVzIiE9PW4mJiJzaXplIiE9PW4mJk1hcC5wcm90b3R5cGVbbl09PT1NYXAucHJvdG90eXBlLmVudHJpZXMmJih2bT1uKX19fXJldHVybiB2bX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovZnVuY3Rpb24gT20odCxlKXtjb25zdCBuPXdtKHQpLG89d20oZSk7aWYobiYmbylyZXR1cm4oZnVuY3Rpb24gaSh0LGUsbil7Y29uc3Qgbz10W3htKCldKCksaT1lW3htKCldKCk7Zm9yKDs7KXtjb25zdCB0PW8ubmV4dCgpLGU9aS5uZXh0KCk7aWYodC5kb25lJiZlLmRvbmUpcmV0dXJuITA7aWYodC5kb25lfHxlLmRvbmUpcmV0dXJuITE7aWYoIW4odC52YWx1ZSxlLnZhbHVlKSlyZXR1cm4hMX19KSh0LGUsT20pO3tjb25zdCBpPXQmJigib2JqZWN0Ij09dHlwZW9mIHR8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSxhPWUmJigib2JqZWN0Ij09dHlwZW9mIGV8fCJmdW5jdGlvbiI9PXR5cGVvZiBlKTtyZXR1cm4hKG58fCFpfHxvfHwhYSl8fE9iamVjdC5pcyh0LGUpfX1jbGFzcyBQbXtjb25zdHJ1Y3Rvcih0KXt0aGlzLndyYXBwZWQ9dH1zdGF0aWMgd3JhcCh0KXtyZXR1cm4gbmV3IFBtKHQpfXN0YXRpYyB1bndyYXAodCl7cmV0dXJuIFBtLmlzV3JhcHBlZCh0KT90LndyYXBwZWQ6dH1zdGF0aWMgaXNXcmFwcGVkKHQpe3JldHVybiB0IGluc3RhbmNlb2YgUG19fWZ1bmN0aW9uIHdtKHQpe3JldHVybiEha20odCkmJihBcnJheS5pc0FycmF5KHQpfHwhKHQgaW5zdGFuY2VvZiBNYXApJiZ4bSgpaW4gdCl9ZnVuY3Rpb24ga20odCl7cmV0dXJuIG51bGwhPT10JiYoImZ1bmN0aW9uIj09dHlwZW9mIHR8fCJvYmplY3QiPT10eXBlb2YgdCl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIFNtKHQsZSxuKXtyZXR1cm4gdFtlXT1ufWZ1bmN0aW9uIERtKHQsZSl7cmV0dXJuIG5nRGV2TW9kZSYmcm8odCxlKSxuZ0Rldk1vZGUmJlFuKHRbZV0sS2MsIlN0b3JlZCB2YWx1ZSBzaG91bGQgbmV2ZXIgYmUgTk9fQ0hBTkdFLiIpLHRbZV19ZnVuY3Rpb24gRW0odCxlLG4pe25nRGV2TW9kZSYmUW4obixLYywiSW5jb21pbmcgdmFsdWUgc2hvdWxkIG5ldmVyIGJlIE5PX0NIQU5HRS4iKSxuZ0Rldk1vZGUmJiRuKGUsdC5sZW5ndGgsIlNsb3Qgc2hvdWxkIGhhdmUgYmVlbiBpbml0aWFsaXplZCB0byBOT19DSEFOR0UiKTtjb25zdCBvPXRbZV07aWYoT2JqZWN0LmlzKG8sbikpcmV0dXJuITE7aWYobmdEZXZNb2RlJiZ1YSgpKXtjb25zdCBpPW8hPT1LYz9vOnZvaWQgMDtpZighT20oaSxuKSl7Y29uc3QgYT0oZnVuY3Rpb24gaSh0LGUsbixvKXtjb25zdCBpPXRbMV0uZGF0YSxhPWlbZV07aWYoInN0cmluZyI9PXR5cGVvZiBhKXJldHVybiBhLmluZGV4T2YoS2wpPi0xPyRsKHQsZSxlLGEsbyk6e3Byb3BOYW1lOmEsb2xkVmFsdWU6bixuZXdWYWx1ZTpvfTtpZihudWxsPT09YSl7bGV0IG49ZS0xO2Zvcig7InN0cmluZyIhPXR5cGVvZiBpW25dJiZudWxsPT09aVtuKzFdOyluLS07Y29uc3QgYT1pW25dO2lmKCJzdHJpbmciPT10eXBlb2YgYSl7Y29uc3QgaT1hLm1hdGNoKG5ldyBSZWdFeHAoS2wsImciKSk7aWYoaSYmaS5sZW5ndGgtMT5lLW4pcmV0dXJuICRsKHQsbixlLGEsbyl9fXJldHVybntwcm9wTmFtZTp2b2lkIDAsb2xkVmFsdWU6bixuZXdWYWx1ZTpvfX0pKHQsZSxpLG4pOyEoZnVuY3Rpb24gYSh0LGUsbixvKXtsZXQgaT1gRXhwcmVzc2lvbkNoYW5nZWRBZnRlckl0SGFzQmVlbkNoZWNrZWRFcnJvcjogRXhwcmVzc2lvbiBoYXMgY2hhbmdlZCBhZnRlciBpdCB3YXMgY2hlY2tlZC4gUHJldmlvdXMgdmFsdWUke28/YCBmb3IgJyR7b30nYDoiIn06ICcke2V9Jy4gQ3VycmVudCB2YWx1ZTogJyR7bn0nLmA7dGhyb3cgdCYmKGkrPSIgSXQgc2VlbXMgbGlrZSB0aGUgdmlldyBoYXMgYmVlbiBjcmVhdGVkIGFmdGVyIGl0cyBwYXJlbnQgYW5kIGl0cyBjaGlsZHJlbiBoYXZlIGJlZW4gZGlydHkgY2hlY2tlZC4gSGFzIGl0IGJlZW4gY3JlYXRlZCBpbiBhIGNoYW5nZSBkZXRlY3Rpb24gaG9vaz8iKSxuZXcgRm4oIjEwMCIsaSl9KShvPT09S2MsYS5vbGRWYWx1ZSxhLm5ld1ZhbHVlLGEucHJvcE5hbWUpfXJldHVybiExfXJldHVybiB0W2VdPW4sITB9ZnVuY3Rpb24gQW0odCxlLG4sbyl7Y29uc3QgaT1FbSh0LGUsbik7cmV0dXJuIEVtKHQsZSsxLG8pfHxpfWZ1bmN0aW9uIFJtKHQsZSxuLG8saSl7Y29uc3QgYT1BbSh0LGUsbixvKTtyZXR1cm4gRW0odCxlKzIsaSl8fGF9ZnVuY3Rpb24gVG0odCxlLG4sbyxpLGEpe2NvbnN0IHI9QW0odCxlLG4sbyk7cmV0dXJuIEFtKHQsZSsyLGksYSl8fHJ9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIE5tKHQsZSxuLG8pe2NvbnN0IGk9aWEoKSxhPXlhKCk7aWYoRW0oaSxhLGUpKXtjb25zdCByPWFhKCkscz16YSgpO3BwKHMsaSx0LGUsbixvKSxuZ0Rldk1vZGUmJndwKHIuZGF0YSxzLCJhdHRyLiIrdCxhKX1yZXR1cm4gTm19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIEltKHQsZSl7bmdEZXZNb2RlJiYkbigyLGUubGVuZ3RoLCJzaG91bGQgaGF2ZSBhdCBsZWFzdCAzIHZhbHVlcyIpLG5nRGV2TW9kZSYmWG4oZS5sZW5ndGglMiwxLCJzaG91bGQgaGF2ZSBhbiBvZGQgbnVtYmVyIG9mIHZhbHVlcyIpO2xldCBuPSExLG89aGEoKTtmb3IobGV0IGk9MTtpPGUubGVuZ3RoO2krPTIpbj1FbSh0LG8rKyxlW2ldKXx8bjtpZihiYShvKSwhbilyZXR1cm4gS2M7bGV0IGk9ZVswXTtmb3IobGV0IHQ9MTt0PGUubGVuZ3RoO3QrPTIpaSs9Vm4oZVt0XSkrZVt0KzFdO3JldHVybiBpfWZ1bmN0aW9uIHptKHQsZSxuLG8pe3JldHVybiBFbSh0LHlhKCksbik/ZStWbihuKStvOktjfWZ1bmN0aW9uIEhtKHQsZSxuLG8saSxhKXtjb25zdCByPUFtKHQsaGEoKSxuLGkpO3JldHVybiBfYSgyKSxyP2UrVm4obikrbytWbihpKSthOktjfWZ1bmN0aW9uIEZtKHQsZSxuLG8saSxhLHIscyl7Y29uc3QgbD1SbSh0LGhhKCksbixpLHIpO3JldHVybiBfYSgzKSxsP2UrVm4obikrbytWbihpKSthK1ZuKHIpK3M6S2N9ZnVuY3Rpb24gTG0odCxlLG4sbyxpLGEscixzLGwsYyl7Y29uc3QgZD1UbSh0LGhhKCksbixpLHIsbCk7cmV0dXJuIF9hKDQpLGQ/ZStWbihuKStvK1ZuKGkpK2ErVm4ocikrcytWbihsKStjOktjfWZ1bmN0aW9uIEJtKHQsZSxuLG8saSxhLHIscyxsLGMsZCxwKXtjb25zdCBtPWhhKCk7bGV0IHU9VG0odCxtLG4saSxyLGwpO3JldHVybiB1PUVtKHQsbSs0LGQpfHx1LF9hKDUpLHU/ZStWbihuKStvK1ZuKGkpK2ErVm4ocikrcytWbihsKStjK1ZuKGQpK3A6S2N9ZnVuY3Rpb24gVm0odCxlLG4sbyxpLGEscixzLGwsYyxkLHAsbSx1KXtjb25zdCBmPWhhKCk7bGV0IGc9VG0odCxmLG4saSxyLGwpO3JldHVybiBnPUFtKHQsZis0LGQsbSl8fGcsX2EoNiksZz9lK1ZuKG4pK28rVm4oaSkrYStWbihyKStzK1ZuKGwpK2MrVm4oZCkrcCtWbihtKSt1OktjfWZ1bmN0aW9uIGptKHQsZSxuLG8saSxhLHIscyxsLGMsZCxwLG0sdSxmLGcpe2NvbnN0IGg9aGEoKTtsZXQgYj1UbSh0LGgsbixpLHIsbCk7cmV0dXJuIGI9Um0odCxoKzQsZCxtLGYpfHxiLF9hKDcpLGI/ZStWbihuKStvK1ZuKGkpK2ErVm4ocikrcytWbihsKStjK1ZuKGQpK3ArVm4obSkrdStWbihmKStnOktjfWZ1bmN0aW9uIFVtKHQsZSxuLG8saSxhLHIscyxsLGMsZCxwLG0sdSxmLGcsaCxiKXtjb25zdCB5PWhhKCk7bGV0IF89VG0odCx5LG4saSxyLGwpO3JldHVybiBfPVRtKHQseSs0LGQsbSxmLGgpfHxfLF9hKDgpLF8/ZStWbihuKStvK1ZuKGkpK2ErVm4ocikrcytWbihsKStjK1ZuKGQpK3ArVm4obSkrdStWbihmKStnK1ZuKGgpK2I6S2N9ZnVuY3Rpb24gV20odCxlLG4sbyxpLGEscixzKXtjb25zdCBsPWlhKCksYz1hYSgpLGQ9dCtvaSxwPWMuZmlyc3RDcmVhdGVQYXNzPygKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmZ1bmN0aW9uIG0odCxlLG4sbyxpLGEscixzLGwpe25nRGV2TW9kZSYmQ2koZSksbmdEZXZNb2RlJiZuZ0Rldk1vZGUuZmlyc3RDcmVhdGVQYXNzKys7Y29uc3QgYz1lLmNvbnN0cyxkPUxkKGUsdCw0LHJ8fG51bGwsJGkoYyxzKSk7b3AoZSxuLGQsJGkoYyxsKSksTGEoZSxkKTtjb25zdCBwPWQudFZpZXdzPUtkKDIsZCxvLGksYSxlLmRpcmVjdGl2ZVJlZ2lzdHJ5LGUucGlwZVJlZ2lzdHJ5LG51bGwsZS5zY2hlbWFzLGMpO3JldHVybiBudWxsIT09ZS5xdWVyaWVzJiYoZS5xdWVyaWVzLnRlbXBsYXRlKGUsZCkscC5xdWVyaWVzPWUucXVlcmllcy5lbWJlZGRlZFRWaWV3KGQpKSxkfSkoZCxjLGwsZSxuLG8saSxhLHIpOmMuZGF0YVtkXTtkYShwLCExKTtjb25zdCB1PWxbMTFdLmNyZWF0ZUNvbW1lbnQobmdEZXZNb2RlPyJjb250YWluZXIiOiIiKTtTYyhjLGwsdSxwKSxWbCh1LGwpLENwKGwsbFtkXT1ocCh1LGwsdSxwKSksZGkocCkmJnFkKGMsbCxwKSxudWxsIT1yJiZaZChsLHAscyl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIEdtKHQpe3JldHVybiBxaSgoZnVuY3Rpb24gZSgpe3JldHVybiBuYS5sRnJhbWUuY29udGV4dExWaWV3fSkoKSxvaSt0KX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY29uc3QgWW09eyLJtcm1ZGVmaW5lSW5qZWN0YWJsZSI6bG8sIsm1ybVkZWZpbmVJbmplY3RvciI6Y28sIsm1ybVpbmplY3QiOnVzLCLJtcm1aW52YWxpZEZhY3RvcnlEZXAiOmZzfSxxbT1Fbih7cHJvdmlkZTpTdHJpbmcsdXNlVmFsdWU6RW59KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovZnVuY3Rpb24gWm0odCl7cmV0dXJuIHZvaWQgMCE9PXQudXNlQ2xhc3N9ZnVuY3Rpb24gWG0odCl7cmV0dXJuIHZvaWQgMCE9PXQudXNlRmFjdG9yeX1mdW5jdGlvbiBLbSh0LGUpe2NvbnN0IG49ZXx8e3Byb3ZpZGVkSW46bnVsbH0sbz17bmFtZTp0Lm5hbWUsdHlwZTp0LHR5cGVBcmd1bWVudENvdW50OjAscHJvdmlkZWRJbjpuLnByb3ZpZGVkSW4sdXNlckRlcHM6dm9pZCAwfTtyZXR1cm4oWm0obil8fFhtKG4pKSYmdm9pZCAwIT09bi5kZXBzJiYoby51c2VyRGVwcz13cyhuLmRlcHMpKSxabShuKT9vLnVzZUNsYXNzPXpuKG4udXNlQ2xhc3MpOihmdW5jdGlvbiBpKHQpe3JldHVybiBxbSBpbiB0fSkobik/by51c2VWYWx1ZT16bihuLnVzZVZhbHVlKTpYbShuKT9vLnVzZUZhY3Rvcnk9bi51c2VGYWN0b3J5OihmdW5jdGlvbiBhKHQpe3JldHVybiB2b2lkIDAhPT10LnVzZUV4aXN0aW5nfSkobikmJihvLnVzZUV4aXN0aW5nPXpuKG4udXNlRXhpc3RpbmcpKSxvfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9Fbih7cHJvdmlkZTpTdHJpbmcsdXNlVmFsdWU6RW59KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IEptPVNyKCJJbmplY3RhYmxlIix2b2lkIDAsdm9pZCAwLHZvaWQgMCwoKHQsZSk9PlFtKHQsZSkpKSxRbT1mdW5jdGlvbiAkbSh0LGUpe2xldCBuPW51bGwsbz1udWxsO3QuaGFzT3duUHJvcGVydHkoZm8pfHxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxmbyx7Z2V0OigpPT4obnVsbD09PW4mJihuPWpyKCkuY29tcGlsZUluamVjdGFibGUoWW0sYG5nOi8vLyR7dC5uYW1lfS/JtXByb3YuanNgLEttKHQsZSkpKSxuKX0pLHQuaGFzT3duUHJvcGVydHkoQm8pfHxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxCbyx7Z2V0OigpPT57aWYobnVsbD09PW8pe2NvbnN0IG49S20odCxlKSxpPWpyKCk7bz1pLmNvbXBpbGVGYWN0b3J5KFltLGBuZzovLy8ke3QubmFtZX0vybVmYWMuanNgLHtuYW1lOm4ubmFtZSx0eXBlOm4udHlwZSx0eXBlQXJndW1lbnRDb3VudDpuLnR5cGVBcmd1bWVudENvdW50LGRlcHM6UHModCksaW5qZWN0Rm46ImluamVjdCIsdGFyZ2V0OmkuUjNGYWN0b3J5VGFyZ2V0LkluamVjdGFibGV9KX1yZXR1cm4gb30sY29uZmlndXJhYmxlOiEwfSl9O2Z1bmN0aW9uIHR1KHQpe3JldHVybiB0Lmxlbmd0aD4xPyIgKCIrKAovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KZnVuY3Rpb24gZSh0KXtjb25zdCBlPVtdO2ZvcihsZXQgbj0wO248dC5sZW5ndGg7KytuKXtpZihlLmluZGV4T2YodFtuXSk+LTEpcmV0dXJuIGUucHVzaCh0W25dKSxlO2UucHVzaCh0W25dKX1yZXR1cm4gZX0pKHQuc2xpY2UoKS5yZXZlcnNlKCkpLm1hcCgodD0+Um4odC50b2tlbikpKS5qb2luKCIgLT4gIikrIikiOiIifWZ1bmN0aW9uIGV1KHQsZSxuLG8pe2NvbnN0IGk9W2VdLGE9bihpKSxyPW8/KGZ1bmN0aW9uIHModCxlKXtjb25zdCBuPWAke3R9IGNhdXNlZCBieTogJHtlIGluc3RhbmNlb2YgRXJyb3I/ZS5tZXNzYWdlOmV9YCxvPUVycm9yKG4pO3JldHVybiBvLm5nT3JpZ2luYWxFcnJvcj1lLG99KShhLG8pOkVycm9yKGEpO3JldHVybiByLmFkZEtleT1udSxyLmtleXM9aSxyLmluamVjdG9ycz1bdF0sci5jb25zdHJ1Y3RSZXNvbHZpbmdNZXNzYWdlPW4sci5uZ09yaWdpbmFsRXJyb3I9byxyfWZ1bmN0aW9uIG51KHQsZSl7dGhpcy5pbmplY3RvcnMucHVzaCh0KSx0aGlzLmtleXMucHVzaChlKSx0aGlzLm1lc3NhZ2U9dGhpcy5jb25zdHJ1Y3RSZXNvbHZpbmdNZXNzYWdlKHRoaXMua2V5cyl9ZnVuY3Rpb24gb3UodCxlKXtjb25zdCBuPVtdO2ZvcihsZXQgdD0wLG89ZS5sZW5ndGg7dDxvO3QrKyl7Y29uc3Qgbz1lW3RdO24ucHVzaChvJiYwIT1vLmxlbmd0aD9vLm1hcChSbikuam9pbigiICIpOiI/Iil9cmV0dXJuIEVycm9yKCJDYW5ub3QgcmVzb2x2ZSBhbGwgcGFyYW1ldGVycyBmb3IgJyIrUm4odCkrIicoIituLmpvaW4oIiwgIikrIikuIE1ha2Ugc3VyZSB0aGF0IGFsbCB0aGUgcGFyYW1ldGVycyBhcmUgZGVjb3JhdGVkIHdpdGggSW5qZWN0IG9yIGhhdmUgdmFsaWQgdHlwZSBhbm5vdGF0aW9ucyBhbmQgdGhhdCAnIitSbih0KSsiJyBpcyBkZWNvcmF0ZWQgd2l0aCBJbmplY3RhYmxlLiIpfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3MgaXV7Y29uc3RydWN0b3IodCxlKXtpZih0aGlzLnRva2VuPXQsdGhpcy5pZD1lLCF0KXRocm93IG5ldyBFcnJvcigiVG9rZW4gbXVzdCBiZSBkZWZpbmVkISIpO3RoaXMuZGlzcGxheU5hbWU9Um4odGhpcy50b2tlbil9c3RhdGljIGdldCh0KXtyZXR1cm4gYXUuZ2V0KHpuKHQpKX1zdGF0aWMgZ2V0IG51bWJlck9mS2V5cygpe3JldHVybiBhdS5udW1iZXJPZktleXN9fWNvbnN0IGF1PW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2FsbEtleXM9bmV3IE1hcH1nZXQodCl7aWYodCBpbnN0YW5jZW9mIGl1KXJldHVybiB0O2lmKHRoaXMuX2FsbEtleXMuaGFzKHQpKXJldHVybiB0aGlzLl9hbGxLZXlzLmdldCh0KTtjb25zdCBlPW5ldyBpdSh0LGl1Lm51bWJlck9mS2V5cyk7cmV0dXJuIHRoaXMuX2FsbEtleXMuc2V0KHQsZSksZX1nZXQgbnVtYmVyT2ZLZXlzKCl7cmV0dXJuIHRoaXMuX2FsbEtleXMuc2l6ZX19LHJ1PW5ldwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5yZWZsZWN0aW9uQ2FwYWJpbGl0aWVzPXR9dXBkYXRlQ2FwYWJpbGl0aWVzKHQpe3RoaXMucmVmbGVjdGlvbkNhcGFiaWxpdGllcz10fWZhY3RvcnkodCl7cmV0dXJuIHRoaXMucmVmbGVjdGlvbkNhcGFiaWxpdGllcy5mYWN0b3J5KHQpfXBhcmFtZXRlcnModCl7cmV0dXJuIHRoaXMucmVmbGVjdGlvbkNhcGFiaWxpdGllcy5wYXJhbWV0ZXJzKHQpfWFubm90YXRpb25zKHQpe3JldHVybiB0aGlzLnJlZmxlY3Rpb25DYXBhYmlsaXRpZXMuYW5ub3RhdGlvbnModCl9cHJvcE1ldGFkYXRhKHQpe3JldHVybiB0aGlzLnJlZmxlY3Rpb25DYXBhYmlsaXRpZXMucHJvcE1ldGFkYXRhKHQpfWhhc0xpZmVjeWNsZUhvb2sodCxlKXtyZXR1cm4gdGhpcy5yZWZsZWN0aW9uQ2FwYWJpbGl0aWVzLmhhc0xpZmVjeWNsZUhvb2sodCxlKX1nZXR0ZXIodCl7cmV0dXJuIHRoaXMucmVmbGVjdGlvbkNhcGFiaWxpdGllcy5nZXR0ZXIodCl9c2V0dGVyKHQpe3JldHVybiB0aGlzLnJlZmxlY3Rpb25DYXBhYmlsaXRpZXMuc2V0dGVyKHQpfW1ldGhvZCh0KXtyZXR1cm4gdGhpcy5yZWZsZWN0aW9uQ2FwYWJpbGl0aWVzLm1ldGhvZCh0KX1pbXBvcnRVcmkodCl7cmV0dXJuIHRoaXMucmVmbGVjdGlvbkNhcGFiaWxpdGllcy5pbXBvcnRVcmkodCl9cmVzb3VyY2VVcmkodCl7cmV0dXJuIHRoaXMucmVmbGVjdGlvbkNhcGFiaWxpdGllcy5yZXNvdXJjZVVyaSh0KX1yZXNvbHZlSWRlbnRpZmllcih0LGUsbixvKXtyZXR1cm4gdGhpcy5yZWZsZWN0aW9uQ2FwYWJpbGl0aWVzLnJlc29sdmVJZGVudGlmaWVyKHQsZSxuLG8pfXJlc29sdmVFbnVtKHQsZSl7cmV0dXJuIHRoaXMucmVmbGVjdGlvbkNhcGFiaWxpdGllcy5yZXNvbHZlRW51bSh0LGUpfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovKG5ldyBvcyk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyBzdXtjb25zdHJ1Y3Rvcih0LGUsbil7dGhpcy5rZXk9dCx0aGlzLm9wdGlvbmFsPWUsdGhpcy52aXNpYmlsaXR5PW59c3RhdGljIGZyb21LZXkodCl7cmV0dXJuIG5ldyBzdSh0LCExLG51bGwpfX1jb25zdCBsdT1bXTtjbGFzcyBjdXtjb25zdHJ1Y3Rvcih0LGUsbil7dGhpcy5rZXk9dCx0aGlzLnJlc29sdmVkRmFjdG9yaWVzPWUsdGhpcy5tdWx0aVByb3ZpZGVyPW4sdGhpcy5yZXNvbHZlZEZhY3Rvcnk9dGhpcy5yZXNvbHZlZEZhY3Rvcmllc1swXX19Y2xhc3MgZHV7Y29uc3RydWN0b3IodCxlKXt0aGlzLmZhY3Rvcnk9dCx0aGlzLmRlcGVuZGVuY2llcz1lfX1mdW5jdGlvbiBwdSh0KXtsZXQgZSxuO2lmKHQudXNlQ2xhc3Mpe2NvbnN0IG89em4odC51c2VDbGFzcyk7ZT1ydS5mYWN0b3J5KG8pLG49Z3Uobyl9ZWxzZSB0LnVzZUV4aXN0aW5nPyhlPXQ9PnQsbj1bc3UuZnJvbUtleShpdS5nZXQodC51c2VFeGlzdGluZykpXSk6dC51c2VGYWN0b3J5PyhlPXQudXNlRmFjdG9yeSxuPShmdW5jdGlvbiBvKHQsZSl7aWYoZSl7Y29uc3Qgbj1lLm1hcCgodD0+W3RdKSk7cmV0dXJuIGUubWFwKChlPT5odSh0LGUsbikpKX1yZXR1cm4gZ3UodCl9KSh0LnVzZUZhY3RvcnksdC5kZXBzKSk6KGU9KCk9PnQudXNlVmFsdWUsbj1sdSk7cmV0dXJuIG5ldyBkdShlLG4pfWZ1bmN0aW9uIG11KHQpe3JldHVybiBuZXcgY3UoaXUuZ2V0KHQucHJvdmlkZSksW3B1KHQpXSx0Lm11bHRpfHwhMSl9ZnVuY3Rpb24gdXUodCl7Y29uc3QgZT0oZnVuY3Rpb24gbih0LGUpe2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKXtjb25zdCBvPXRbbl0saT1lLmdldChvLmtleS5pZCk7aWYoaSl7aWYoby5tdWx0aVByb3ZpZGVyIT09aS5tdWx0aVByb3ZpZGVyKXRocm93IEVycm9yKGBDYW5ub3QgbWl4IG11bHRpIHByb3ZpZGVycyBhbmQgcmVndWxhciBwcm92aWRlcnMsIGdvdDogJHtpfSAke299YCk7aWYoby5tdWx0aVByb3ZpZGVyKWZvcihsZXQgdD0wO3Q8by5yZXNvbHZlZEZhY3Rvcmllcy5sZW5ndGg7dCsrKWkucmVzb2x2ZWRGYWN0b3JpZXMucHVzaChvLnJlc29sdmVkRmFjdG9yaWVzW3RdKTtlbHNlIGUuc2V0KG8ua2V5LmlkLG8pfWVsc2V7bGV0IHQ7dD1vLm11bHRpUHJvdmlkZXI/bmV3IGN1KG8ua2V5LG8ucmVzb2x2ZWRGYWN0b3JpZXMuc2xpY2UoKSxvLm11bHRpUHJvdmlkZXIpOm8sZS5zZXQoby5rZXkuaWQsdCl9fXJldHVybiBlfSkoZnUodCxbXSkubWFwKG11KSxuZXcgTWFwKTtyZXR1cm4gQXJyYXkuZnJvbShlLnZhbHVlcygpKX1mdW5jdGlvbiBmdSh0LGUpe3JldHVybiB0LmZvckVhY2goKHQ9PntpZih0IGluc3RhbmNlb2YgVXIpZS5wdXNoKHtwcm92aWRlOnQsdXNlQ2xhc3M6dH0pO2Vsc2UgaWYodCYmIm9iamVjdCI9PXR5cGVvZiB0JiZ2b2lkIDAhPT10LnByb3ZpZGUpZS5wdXNoKHQpO2Vsc2V7aWYoIUFycmF5LmlzQXJyYXkodCkpdGhyb3coZnVuY3Rpb24gbih0KXtyZXR1cm4gRXJyb3IoYEludmFsaWQgcHJvdmlkZXIgLSBvbmx5IGluc3RhbmNlcyBvZiBQcm92aWRlciBhbmQgVHlwZSBhcmUgYWxsb3dlZCwgZ290OiAke3R9YCl9KSh0KTtmdSh0LGUpfX0pKSxlfWZ1bmN0aW9uIGd1KHQpe2NvbnN0IGU9cnUucGFyYW1ldGVycyh0KTtpZighZSlyZXR1cm5bXTtpZihlLnNvbWUoKHQ9Pm51bGw9PXQpKSl0aHJvdyBvdSh0LGUpO3JldHVybiBlLm1hcCgobj0+aHUodCxuLGUpKSl9ZnVuY3Rpb24gaHUodCxlLG4pe2xldCBvPW51bGwsaT0hMTtpZighQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gYnUoZSBpbnN0YW5jZW9mIHlzP2UudG9rZW46ZSxpLG51bGwpO2xldCBhPW51bGw7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDsrK3Qpe2NvbnN0IG49ZVt0XTtuIGluc3RhbmNlb2YgVXI/bz1uOm4gaW5zdGFuY2VvZiB5cz9vPW4udG9rZW46biBpbnN0YW5jZW9mIF9zP2k9ITA6biBpbnN0YW5jZW9mIENzfHxuIGluc3RhbmNlb2YgTXM/YT1uOm4gaW5zdGFuY2VvZiBOciYmKG89bil9aWYobz16bihvKSxudWxsIT1vKXJldHVybiBidShvLGksYSk7dGhyb3cgb3UodCxuKX1mdW5jdGlvbiBidSh0LGUsbil7cmV0dXJuIG5ldyBzdShpdS5nZXQodCksZSxuKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY29uc3QgeXU9e307Y2xhc3MgX3V7c3RhdGljIHJlc29sdmUodCl7cmV0dXJuIHV1KHQpfXN0YXRpYyByZXNvbHZlQW5kQ3JlYXRlKHQsZSl7Y29uc3Qgbj1fdS5yZXNvbHZlKHQpO3JldHVybiBfdS5mcm9tUmVzb2x2ZWRQcm92aWRlcnMobixlKX1zdGF0aWMgZnJvbVJlc29sdmVkUHJvdmlkZXJzKHQsZSl7cmV0dXJuIG5ldyBDdSh0LGUpfX1jbGFzcyBDdXtjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuX2NvbnN0cnVjdGlvbkNvdW50ZXI9MCx0aGlzLl9wcm92aWRlcnM9dCx0aGlzLnBhcmVudD1lfHxudWxsO2NvbnN0IG49dC5sZW5ndGg7dGhpcy5rZXlJZHM9W10sdGhpcy5vYmpzPVtdO2ZvcihsZXQgZT0wO2U8bjtlKyspdGhpcy5rZXlJZHNbZV09dFtlXS5rZXkuaWQsdGhpcy5vYmpzW2VdPXl1fWdldCh0LGU9cnMpe3JldHVybiB0aGlzLl9nZXRCeUtleShpdS5nZXQodCksbnVsbCxlKX1yZXNvbHZlQW5kQ3JlYXRlQ2hpbGQodCl7Y29uc3QgZT1fdS5yZXNvbHZlKHQpO3JldHVybiB0aGlzLmNyZWF0ZUNoaWxkRnJvbVJlc29sdmVkKGUpfWNyZWF0ZUNoaWxkRnJvbVJlc29sdmVkKHQpe2NvbnN0IGU9bmV3IEN1KHQpO3JldHVybiBlLnBhcmVudD10aGlzLGV9cmVzb2x2ZUFuZEluc3RhbnRpYXRlKHQpe3JldHVybiB0aGlzLmluc3RhbnRpYXRlUmVzb2x2ZWQoX3UucmVzb2x2ZShbdF0pWzBdKX1pbnN0YW50aWF0ZVJlc29sdmVkKHQpe3JldHVybiB0aGlzLl9pbnN0YW50aWF0ZVByb3ZpZGVyKHQpfWdldFByb3ZpZGVyQXRJbmRleCh0KXtpZih0PDB8fHQ+PXRoaXMuX3Byb3ZpZGVycy5sZW5ndGgpdGhyb3coZnVuY3Rpb24gZSh0KXtyZXR1cm4gRXJyb3IoYEluZGV4ICR7dH0gaXMgb3V0LW9mLWJvdW5kcy5gKX0pKHQpO3JldHVybiB0aGlzLl9wcm92aWRlcnNbdF19X25ldyh0KXtpZih0aGlzLl9jb25zdHJ1Y3Rpb25Db3VudGVyKys+dGhpcy5fZ2V0TWF4TnVtYmVyT2ZPYmplY3RzKCkpdGhyb3coZnVuY3Rpb24gZSh0LG4pe3JldHVybiBldSh0LG4sKGZ1bmN0aW9uKHQpe3JldHVybmBDYW5ub3QgaW5zdGFudGlhdGUgY3ljbGljIGRlcGVuZGVuY3khJHt0dSh0KX1gfSkpfSkodGhpcyx0LmtleSk7cmV0dXJuIHRoaXMuX2luc3RhbnRpYXRlUHJvdmlkZXIodCl9X2dldE1heE51bWJlck9mT2JqZWN0cygpe3JldHVybiB0aGlzLm9ianMubGVuZ3RofV9pbnN0YW50aWF0ZVByb3ZpZGVyKHQpe2lmKHQubXVsdGlQcm92aWRlcil7Y29uc3QgZT1bXTtmb3IobGV0IG49MDtuPHQucmVzb2x2ZWRGYWN0b3JpZXMubGVuZ3RoOysrbillW25dPXRoaXMuX2luc3RhbnRpYXRlKHQsdC5yZXNvbHZlZEZhY3Rvcmllc1tuXSk7cmV0dXJuIGV9cmV0dXJuIHRoaXMuX2luc3RhbnRpYXRlKHQsdC5yZXNvbHZlZEZhY3Rvcmllc1swXSl9X2luc3RhbnRpYXRlKHQsZSl7Y29uc3Qgbj1lLmZhY3Rvcnk7bGV0IG8saTt0cnl7bz1lLmRlcGVuZGVuY2llcy5tYXAoKHQ9PnRoaXMuX2dldEJ5UmVmbGVjdGl2ZURlcGVuZGVuY3kodCkpKX1jYXRjaChlKXt0aHJvdyBlLmFkZEtleSYmZS5hZGRLZXkodGhpcyx0LmtleSksZX10cnl7aT1uKC4uLm8pfWNhdGNoKGUpe3Rocm93KGZ1bmN0aW9uIGEodCxlLG4sbyl7cmV0dXJuIGV1KHQsbywoZnVuY3Rpb24odCl7Y29uc3Qgbj1Sbih0WzBdLnRva2VuKTtyZXR1cm5gJHtlLm1lc3NhZ2V9OiBFcnJvciBkdXJpbmcgaW5zdGFudGlhdGlvbiBvZiAke259ISR7dHUodCl9LmB9KSxlKX0pKHRoaXMsZSwwLHQua2V5KX1yZXR1cm4gaX1fZ2V0QnlSZWZsZWN0aXZlRGVwZW5kZW5jeSh0KXtyZXR1cm4gdGhpcy5fZ2V0QnlLZXkodC5rZXksdC52aXNpYmlsaXR5LHQub3B0aW9uYWw/bnVsbDpycyl9X2dldEJ5S2V5KHQsZSxuKXtyZXR1cm4gdD09PUN1LklOSkVDVE9SX0tFWT90aGlzOmUgaW5zdGFuY2VvZiBDcz90aGlzLl9nZXRCeUtleVNlbGYodCxuKTp0aGlzLl9nZXRCeUtleURlZmF1bHQodCxuLGUpfV9nZXRPYmpCeUtleUlkKHQpe2ZvcihsZXQgZT0wO2U8dGhpcy5rZXlJZHMubGVuZ3RoO2UrKylpZih0aGlzLmtleUlkc1tlXT09PXQpcmV0dXJuIHRoaXMub2Jqc1tlXT09PXl1JiYodGhpcy5vYmpzW2VdPXRoaXMuX25ldyh0aGlzLl9wcm92aWRlcnNbZV0pKSx0aGlzLm9ianNbZV07cmV0dXJuIHl1fV90aHJvd09yTnVsbCh0LGUpe2lmKGUhPT1ycylyZXR1cm4gZTt0aHJvdyhmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIGV1KHQsZSwoZnVuY3Rpb24odCl7cmV0dXJuYE5vIHByb3ZpZGVyIGZvciAke1JuKHRbMF0udG9rZW4pfSEke3R1KHQpfWB9KSl9KSh0aGlzLHQpfV9nZXRCeUtleVNlbGYodCxlKXtjb25zdCBuPXRoaXMuX2dldE9iakJ5S2V5SWQodC5pZCk7cmV0dXJuIG4hPT15dT9uOnRoaXMuX3Rocm93T3JOdWxsKHQsZSl9X2dldEJ5S2V5RGVmYXVsdCh0LGUsbil7bGV0IG87Zm9yKG89biBpbnN0YW5jZW9mIE1zP3RoaXMucGFyZW50OnRoaXM7byBpbnN0YW5jZW9mIEN1Oyl7Y29uc3QgZT1vLG49ZS5fZ2V0T2JqQnlLZXlJZCh0LmlkKTtpZihuIT09eXUpcmV0dXJuIG47bz1lLnBhcmVudH1yZXR1cm4gbnVsbCE9PW8/by5nZXQodC50b2tlbixlKTp0aGlzLl90aHJvd09yTnVsbCh0LGUpfWdldCBkaXNwbGF5TmFtZSgpe3JldHVybmBSZWZsZWN0aXZlSW5qZWN0b3IocHJvdmlkZXJzOiBbJHsoZnVuY3Rpb24gdChlLG4pe2NvbnN0IG89W107Zm9yKGxldCB0PTA7dDxlLl9wcm92aWRlcnMubGVuZ3RoOysrdClvW3RdPW4oZS5nZXRQcm92aWRlckF0SW5kZXgodCkpO3JldHVybiBvfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCi8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLykodGhpcywodD0+JyAiJyt0LmtleS5kaXNwbGF5TmFtZSsnIiAnKSkuam9pbigiLCAiKX1dKWB9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5kaXNwbGF5TmFtZX19ZnVuY3Rpb24gTXUodCxlPXlvLkRlZmF1bHQpe2NvbnN0IG49aWEoKTtyZXR1cm4gbnVsbD09PW4/KG5nRGV2TW9kZSYmKGZ1bmN0aW9uIG8odCl7bmdEZXZNb2RlJiZLbihfbyx0LCJDYWxsaW5nIMm1ybVpbmplY3Qgd291bGQgY2F1c2UgaW5maW5pdGUgcmVjdXJzaW9uIil9KShNdSksdXModCxlKSk6dXIoc2EoKSxuLHpuKHQpLGUpfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KZnVuY3Rpb24gdnUodCxlLG4pe2NvbnN0IG89aWEoKSxpPXlhKCk7aWYoRW0obyxpLGUpKXtjb25zdCBhPWFhKCkscj16YSgpOyRkKGEscixvLHQsZSxvWzExXSxuLCExKSxuZ0Rldk1vZGUmJndwKGEuZGF0YSxyLHQsaSl9cmV0dXJuIHZ1fWZ1bmN0aW9uIHh1KHQsZSxuLG8saSl7Y29uc3QgYT1pPyJjbGFzcyI6InN0eWxlIjtScCh0LG4sZS5pbnB1dHNbYV0sYSxvKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovZnVuY3Rpb24gT3UodCxlLG4sbyl7Y29uc3QgaT1pYSgpLGE9YWEoKSxyPW9pK3Q7bmdEZXZNb2RlJiZYbihoYSgpLGEuYmluZGluZ1N0YXJ0SW5kZXgsImVsZW1lbnRzIHNob3VsZCBiZSBjcmVhdGVkIGJlZm9yZSBhbnkgYmluZGluZ3MiKSxuZ0Rldk1vZGUmJnJvKGkscik7Y29uc3Qgcz1pWzExXSxsPWlbcl09bWMocyxlLChmdW5jdGlvbiBjKCl7cmV0dXJuIG5hLmxGcmFtZS5jdXJyZW50TmFtZXNwYWNlfSkoKSksZD1hLmZpcnN0Q3JlYXRlUGFzcz8oZnVuY3Rpb24gcCh0LGUsbixvLGksYSxyKXtuZ0Rldk1vZGUmJkNpKGUpLG5nRGV2TW9kZSYmbmdEZXZNb2RlLmZpcnN0Q3JlYXRlUGFzcysrO2NvbnN0IHM9ZS5jb25zdHMsbD1MZChlLHQsMixpLCRpKHMsYSkpLGM9b3AoZSxuLGwsJGkocyxyKSk7cmV0dXJuIG5nRGV2TW9kZSYmKGZ1bmN0aW9uIGQodCxlLG4sbyl7aWYobnVsbD09PXQuc2NoZW1hcylyZXR1cm47Y29uc3QgaT1uLnZhbHVlO2lmKCFvJiZudWxsIT09aSYmKCJ1bmRlZmluZWQiIT10eXBlb2YgSFRNTFVua25vd25FbGVtZW50JiZIVE1MVW5rbm93bkVsZW1lbnQmJmUgaW5zdGFuY2VvZiBIVE1MVW5rbm93bkVsZW1lbnR8fCJ1bmRlZmluZWQiIT10eXBlb2YgY3VzdG9tRWxlbWVudHMmJmkuaW5kZXhPZigiLSIpPi0xJiYhY3VzdG9tRWxlbWVudHMuZ2V0KGkpKSYmIWVwKHQsaSkpe2xldCB0PWAnJHtpfScgaXMgbm90IGEga25vd24gZWxlbWVudDpcbmA7dCs9YDEuIElmICcke2l9JyBpcyBhbiBBbmd1bGFyIGNvbXBvbmVudCwgdGhlbiB2ZXJpZnkgdGhhdCBpdCBpcyBwYXJ0IG9mIHRoaXMgbW9kdWxlLlxuYCxpJiZpLmluZGV4T2YoIi0iKT4tMT90Kz1gMi4gSWYgJyR7aX0nIGlzIGEgV2ViIENvbXBvbmVudCB0aGVuIGFkZCAnQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQScgdG8gdGhlICdATmdNb2R1bGUuc2NoZW1hcycgb2YgdGhpcyBjb21wb25lbnQgdG8gc3VwcHJlc3MgdGhpcyBtZXNzYWdlLmA6dCs9IjIuIFRvIGFsbG93IGFueSBlbGVtZW50IGFkZCAnTk9fRVJST1JTX1NDSEVNQScgdG8gdGhlICdATmdNb2R1bGUuc2NoZW1hcycgb2YgdGhpcyBjb21wb25lbnQuIixjb25zb2xlLmVycm9yKEJuKCIzMDQiLHQpKX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLykoZSxvLGwsYyksbnVsbCE9PWwuYXR0cnMmJk5wKGwsbC5hdHRycywhMSksbnVsbCE9PWwubWVyZ2VkQXR0cnMmJk5wKGwsbC5tZXJnZWRBdHRycywhMCksbnVsbCE9PWUucXVlcmllcyYmZS5xdWVyaWVzLmVsZW1lbnRTdGFydChlLGwpLGx9KShyLGEsaSxsLGUsbixvKTphLmRhdGFbcl07ZGEoZCwhMCk7Y29uc3QgbT1kLm1lcmdlZEF0dHJzO251bGwhPT1tJiZYYShzLGwsbSk7Y29uc3QgdT1kLmNsYXNzZXM7bnVsbCE9PXUmJkhjKHMsbCx1KTtjb25zdCBmPWQuc3R5bGVzO251bGwhPT1mJiZ6YyhzLGwsZiksNjQhPSg2NCZkLmZsYWdzKSYmU2MoYSxpLGwsZCksMD09PShmdW5jdGlvbiBnKCl7cmV0dXJuIG5hLmxGcmFtZS5lbGVtZW50RGVwdGhDb3VudH0pKCkmJlZsKGwsaSksKGZ1bmN0aW9uIGgoKXtuYS5sRnJhbWUuZWxlbWVudERlcHRoQ291bnQrK30pKCksZGkoZCkmJihxZChhLGksZCksWWQoYSxkLGkpKSxudWxsIT09byYmWmQoaSxkKX1mdW5jdGlvbiBQdSgpe2xldCB0PXNhKCk7bmdEZXZNb2RlJiZvbyh0LCJObyBwYXJlbnQgbm9kZSB0byBjbG9zZS4iKSxwYSgpP21hKCk6KG5nRGV2TW9kZSYmaGkoc2EoKSksdD10LnBhcmVudCxkYSh0LCExKSk7Y29uc3QgZT10O25nRGV2TW9kZSYmWmEoZSwzKSwoZnVuY3Rpb24gbigpe25hLmxGcmFtZS5lbGVtZW50RGVwdGhDb3VudC0tfSkoKTtjb25zdCBvPWFhKCk7by5maXJzdENyZWF0ZVBhc3MmJihMYShvLHQpLGxpKHQpJiZvLnF1ZXJpZXMuZWxlbWVudEVuZCh0KSksbnVsbCE9ZS5jbGFzc2VzV2l0aG91dEhvc3QmJihmdW5jdGlvbiBpKHQpe3JldHVybiAwIT0oMTYmdC5mbGFncyl9KShlKSYmeHUobyxlLGlhKCksZS5jbGFzc2VzV2l0aG91dEhvc3QsITApLG51bGwhPWUuc3R5bGVzV2l0aG91dEhvc3QmJihmdW5jdGlvbiBhKHQpe3JldHVybiAwIT0oMzImdC5mbGFncyl9KShlKSYmeHUobyxlLGlhKCksZS5zdHlsZXNXaXRob3V0SG9zdCwhMSl9ZnVuY3Rpb24gd3UodCxlLG4sbyl7T3UodCxlLG4sbyksUHUoKX1mdW5jdGlvbiBrdSh0LGUsbil7Y29uc3Qgbz1pYSgpLGk9YWEoKSxhPXQrb2k7bmdEZXZNb2RlJiZybyhvLGEpLG5nRGV2TW9kZSYmWG4oaGEoKSxpLmJpbmRpbmdTdGFydEluZGV4LCJlbGVtZW50IGNvbnRhaW5lcnMgc2hvdWxkIGJlIGNyZWF0ZWQgYmVmb3JlIGFueSBiaW5kaW5ncyIpO2NvbnN0IHI9aS5maXJzdENyZWF0ZVBhc3M/KGZ1bmN0aW9uIHModCxlLG4sbyxpKXtuZ0Rldk1vZGUmJm5nRGV2TW9kZS5maXJzdENyZWF0ZVBhc3MrKztjb25zdCBhPWUuY29uc3RzLHI9JGkoYSxvKSxzPUxkKGUsdCw4LCJuZy1jb250YWluZXIiLHIpO3JldHVybiBudWxsIT09ciYmTnAocyxyLCEwKSxvcChlLG4scywkaShhLGkpKSxudWxsIT09ZS5xdWVyaWVzJiZlLnF1ZXJpZXMuZWxlbWVudFN0YXJ0KGUscyksc30pKGEsaSxvLGUsbik6aS5kYXRhW2FdO2RhKHIsITApLG5nRGV2TW9kZSYmbmdEZXZNb2RlLnJlbmRlcmVyQ3JlYXRlQ29tbWVudCsrO2NvbnN0IGw9b1thXT1vWzExXS5jcmVhdGVDb21tZW50KG5nRGV2TW9kZT8ibmctY29udGFpbmVyIjoiIik7U2MoaSxvLGwsciksVmwobCxvKSxkaShyKSYmKHFkKGksbyxyKSxZZChpLHIsbykpLG51bGwhPW4mJlpkKG8scil9ZnVuY3Rpb24gU3UoKXtsZXQgdD1zYSgpO2NvbnN0IGU9YWEoKTtwYSgpP21hKCk6KG5nRGV2TW9kZSYmaGkodCksdD10LnBhcmVudCxkYSh0LCExKSksbmdEZXZNb2RlJiZaYSh0LDgpLGUuZmlyc3RDcmVhdGVQYXNzJiYoTGEoZSx0KSxsaSh0KSYmZS5xdWVyaWVzLmVsZW1lbnRFbmQodCkpfWZ1bmN0aW9uIER1KHQsZSxuKXtrdSh0LGUsbiksU3UoKX1mdW5jdGlvbiBFdSgpe3JldHVybiBpYSgpfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiBBdSh0KXtyZXR1cm4hIXQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LnRoZW59ZnVuY3Rpb24gUnUodCl7cmV0dXJuISF0JiYiZnVuY3Rpb24iPT10eXBlb2YgdC5zdWJzY3JpYmV9Q3UuSU5KRUNUT1JfS0VZPWl1LmdldChRcCk7Y29uc3QgVHU9UnU7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIE51KHQsZSxuPSExLG8pe2NvbnN0IGk9aWEoKSxhPWFhKCkscj1zYSgpO3JldHVybiB6dShhLGksaVsxMV0scix0LGUsbixvKSxOdX1mdW5jdGlvbiBJdSh0LGUsbj0hMSxvKXtjb25zdCBpPXNhKCksYT1pYSgpLHI9YWEoKTtyZXR1cm4genUocixhLEVwKHhhKHIuZGF0YSksaSxhKSxpLHQsZSxuLG8pLEl1fWZ1bmN0aW9uIHp1KHQsZSxuLG8saSxhLHI9ITEscyl7Y29uc3QgbD1kaShvKSxjPXQuZmlyc3RDcmVhdGVQYXNzJiZEcCh0KSxkPWVbOF0scD1TcChlKTtuZ0Rldk1vZGUmJlphKG8sMTUpO2xldCBtPSEwO2lmKDMmby50eXBlKXtjb25zdCB1PUdpKG8sZSksZj1zP3ModSk6Um8sZz1mLnRhcmdldHx8dSxoPXAubGVuZ3RoLGI9cz90PT5zKFVpKHRbby5pbmRleF0pKS50YXJnZXQ6by5pbmRleDtpZihWaShuKSl7bGV0IHI9bnVsbDtpZighcyYmbCYmKHI9KGZ1bmN0aW9uIHUodCxlLG4sbyl7Y29uc3QgaT10LmNsZWFudXA7aWYobnVsbCE9aSlmb3IobGV0IHQ9MDt0PGkubGVuZ3RoLTE7dCs9Mil7Y29uc3QgYT1pW3RdO2lmKGE9PT1uJiZpW3QrMV09PT1vKXtjb25zdCBuPWVbN10sbz1pW3QrMl07cmV0dXJuIG4ubGVuZ3RoPm8/bltvXTpudWxsfSJzdHJpbmciPT10eXBlb2YgYSYmKHQrPTIpfXJldHVybiBudWxsfSkodCxlLGksby5pbmRleCkpLG51bGwhPT1yKShyLl9fbmdMYXN0TGlzdGVuZXJGbl9ffHxyKS5fX25nTmV4dExpc3RlbmVyRm5fXz1hLHIuX19uZ0xhc3RMaXN0ZW5lckZuX189YSxtPSExO2Vsc2V7YT1GdShvLGUsZCxhLCExKTtjb25zdCB0PW4ubGlzdGVuKGYubmFtZXx8ZyxpLGEpO25nRGV2TW9kZSYmbmdEZXZNb2RlLnJlbmRlcmVyQWRkRXZlbnRMaXN0ZW5lcisrLHAucHVzaChhLHQpLGMmJmMucHVzaChpLGIsaCxoKzEpfX1lbHNlIGE9RnUobyxlLGQsYSwhMCksZy5hZGRFdmVudExpc3RlbmVyKGksYSxyKSxuZ0Rldk1vZGUmJm5nRGV2TW9kZS5yZW5kZXJlckFkZEV2ZW50TGlzdGVuZXIrKyxwLnB1c2goYSksYyYmYy5wdXNoKGksYixoLHIpfWVsc2UgYT1GdShvLGUsZCxhLCExKTtjb25zdCBmPW8ub3V0cHV0cztsZXQgZztpZihtJiZudWxsIT09ZiYmKGc9ZltpXSkpe2NvbnN0IHQ9Zy5sZW5ndGg7aWYodClmb3IobGV0IG49MDtuPHQ7bis9Mil7Y29uc3QgdD1nW25dO25nRGV2TW9kZSYmcm8oZSx0KTtjb25zdCByPWdbbisxXSxzPWVbdF0sbD1zW3JdO2lmKG5nRGV2TW9kZSYmIVR1KGwpKXRocm93IG5ldyBFcnJvcihgQE91dHB1dCAke3J9IG5vdCBpbml0aWFsaXplZCBpbiAnJHtzLmNvbnN0cnVjdG9yLm5hbWV9Jy5gKTtjb25zdCBkPWwuc3Vic2NyaWJlKGEpLG09cC5sZW5ndGg7cC5wdXNoKGEsZCksYyYmYy5wdXNoKGksby5pbmRleCxtLC0obSsxKSl9fX1mdW5jdGlvbiBIdSh0LGUsbixvKXt0cnl7cmV0dXJuIElpKDYsZSxuKSwhMSE9PW4obyl9Y2F0Y2goZSl7cmV0dXJuIEFwKHQsZSksITF9ZmluYWxseXtJaSg3LGUsbil9fWZ1bmN0aW9uIEZ1KHQsZSxuLG8saSl7cmV0dXJuIGZ1bmN0aW9uIGEocil7aWYocj09PUZ1bmN0aW9uKXJldHVybiBvO2NvbnN0IHM9MiZ0LmZsYWdzP1ppKHQuaW5kZXgsZSk6ZTswPT0oMzImZVsyXSkmJk1wKHMpO2xldCBsPUh1KGUsbixvLHIpLGM9YS5fX25nTmV4dExpc3RlbmVyRm5fXztmb3IoO2M7KWw9SHUoZSxuLGMscikmJmwsYz1jLl9fbmdOZXh0TGlzdGVuZXJGbl9fO3JldHVybiBpJiYhMT09PWwmJihyLnByZXZlbnREZWZhdWx0KCksci5yZXR1cm5WYWx1ZT0hMSksbH19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiBMdSh0PTEpe3JldHVybihmdW5jdGlvbiBlKHQpe3JldHVybihuYS5sRnJhbWUuY29udGV4dExWaWV3PShmdW5jdGlvbiBlKHQsbil7Zm9yKDt0PjA7KW5nRGV2TW9kZSYmb28oblsxNV0sIkRlY2xhcmF0aW9uIHZpZXcgc2hvdWxkIGJlIGRlZmluZWQgaWYgbmVzdGluZyBsZXZlbCBpcyBncmVhdGVyIHRoYW4gMC4iKSxuPW5bMTVdLHQtLTtyZXR1cm4gbn0pKHQsbmEubEZyYW1lLmNvbnRleHRMVmlldykpWzhdfSkodCl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIEJ1KHQsZSl7bGV0IG49bnVsbDtjb25zdCBvPShmdW5jdGlvbiBpKHQpe2NvbnN0IGU9dC5hdHRycztpZihudWxsIT1lKXtjb25zdCB0PWUuaW5kZXhPZig1KTtpZigwPT0oMSZ0KSlyZXR1cm4gZVt0KzFdfXJldHVybiBudWxsfSkodCk7Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKyspe2NvbnN0IGE9ZVtpXTtpZigiKiIhPT1hKXtpZihudWxsPT09bz9ZYyh0LGEsITApOnFjKG8sYSkpcmV0dXJuIGl9ZWxzZSBuPWl9cmV0dXJuIG59ZnVuY3Rpb24gVnUodCl7Y29uc3QgZT1pYSgpWzE2XVs2XTtpZighZS5wcm9qZWN0aW9uKXtjb25zdCBuPWUucHJvamVjdGlvbj1Ycih0P3QubGVuZ3RoOjEsbnVsbCksbz1uLnNsaWNlKCk7bGV0IGk9ZS5jaGlsZDtmb3IoO251bGwhPT1pOyl7Y29uc3QgZT10P0J1KGksdCk6MDtudWxsIT09ZSYmKG9bZV0/b1tlXS5wcm9qZWN0aW9uTmV4dD1pOm5bZV09aSxvW2VdPWkpLGk9aS5uZXh0fX19ZnVuY3Rpb24ganUodCxlPTAsbil7Y29uc3Qgbz1pYSgpLGk9YWEoKSxhPUxkKGksb2krdCwxNixudWxsLG58fG51bGwpO251bGw9PT1hLnByb2plY3Rpb24mJihhLnByb2plY3Rpb249ZSksbWEoKSw2NCE9KDY0JmEuZmxhZ3MpJiYoZnVuY3Rpb24gcih0LGUsbil7SWMoZVsxMV0sMCxlLG4sYmModCxuLGUpLHhjKG4ucGFyZW50fHxlWzZdLG4sZSkpfSkoaSxvLGEpfWZ1bmN0aW9uIFV1KHQsZSxuKXtyZXR1cm4gV3UodCwiIixlLCIiLG4pLFV1fWZ1bmN0aW9uIFd1KHQsZSxuLG8saSl7Y29uc3QgYT1pYSgpLHI9em0oYSxlLG4sbyk7aWYociE9PUtjKXtjb25zdCBuPWFhKCkscz16YSgpOyRkKG4scyxhLHQscixhWzExXSxpLCExKSxuZ0Rldk1vZGUmJndwKG4uZGF0YSxzLHQsaGEoKS0xLGUsbyl9cmV0dXJuIFd1fWZ1bmN0aW9uIEd1KHQsZSxuLG8saSl7Y29uc3QgYT10W24rMV0scj1udWxsPT09ZTtsZXQgcz1vP3RkKGEpOm9kKGEpLGw9ITE7Zm9yKDswIT09cyYmKCExPT09bHx8cik7KXtuZ0Rldk1vZGUmJnJvKHQscyk7Y29uc3Qgbj10W3MrMV07WXUodFtzXSxlKSYmKGw9ITAsdFtzKzFdPW8/cmQobik6bmQobikpLHM9bz90ZChuKTpvZChuKX1sJiYodFtuKzFdPW8/bmQoYSk6cmQoYSkpfWZ1bmN0aW9uIFl1KHQsZSl7cmV0dXJuIG5nRGV2TW9kZSYmS24oQXJyYXkuaXNBcnJheShlKSwhMCwiRXhwZWN0ZWQgdGhhdCAndFN0eWxpbmdLZXknIGhhcyBiZWVuIHVud3JhcHBlZCIpLG51bGw9PT10fHxudWxsPT1lfHwoQXJyYXkuaXNBcnJheSh0KT90WzFdOnQpPT09ZXx8ISghQXJyYXkuaXNBcnJheSh0KXx8InN0cmluZyIhPXR5cGVvZiBlKSYmUXIodCxlKT49MH0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY29uc3QgcXU9e3RleHRFbmQ6MCxrZXk6MCxrZXlFbmQ6MCx2YWx1ZTowLHZhbHVlRW5kOjB9O2Z1bmN0aW9uIFp1KHQpe3JldHVybiB0LnN1YnN0cmluZyhxdS5rZXkscXUua2V5RW5kKX1mdW5jdGlvbiBYdSh0KXtyZXR1cm4gdC5zdWJzdHJpbmcocXUudmFsdWUscXUudmFsdWVFbmQpfWZ1bmN0aW9uIEt1KHQsZSl7Y29uc3Qgbj1xdS50ZXh0RW5kO3JldHVybiBuPT09ZT8tMTooZT1xdS5rZXlFbmQ9KGZ1bmN0aW9uIG8odCxlLG4pe2Zvcig7ZTxuJiZ0LmNoYXJDb2RlQXQoZSk+MzI7KWUrKztyZXR1cm4gZX0pKHQscXUua2V5PWUsbiksJHUodCxlLG4pKX1mdW5jdGlvbiBKdSh0LGUpe2NvbnN0IG49cXUudGV4dEVuZDtsZXQgbz1xdS5rZXk9JHUodCxlLG4pO3JldHVybiBuPT09bz8tMToobz1xdS5rZXlFbmQ9KGZ1bmN0aW9uIGkodCxlLG4pe2xldCBvO2Zvcig7ZTxuJiYoNDU9PT0obz10LmNoYXJDb2RlQXQoZSkpfHw5NT09PW98fCgtMzMmbyk+PTY1JiYoLTMzJm8pPD05MHx8bz49NDgmJm88PTU3KTspZSsrO3JldHVybiBlfSkodCxvLG4pLG89dGYodCxvLG4sNTgpLG89cXUudmFsdWU9JHUodCxvLG4pLG89cXUudmFsdWVFbmQ9KGZ1bmN0aW9uIGEodCxlLG4pe2xldCBvPS0xLGk9LTEsYT0tMSxyPWUscz1yO2Zvcig7cjxuOyl7Y29uc3QgbD10LmNoYXJDb2RlQXQocisrKTtpZig1OT09PWwpcmV0dXJuIHM7MzQ9PT1sfHwzOT09PWw/cz1yPWVmKHQsbCxyLG4pOmU9PT1yLTQmJjg1PT09YSYmODI9PT1pJiY3Nj09PW8mJjQwPT09bD9zPXI9ZWYodCw0MSxyLG4pOmw+MzImJihzPXIpLGE9aSxpPW8sbz0tMzMmbH1yZXR1cm4gc30pKHQsbyxuKSx0Zih0LG8sbiw1OSkpfWZ1bmN0aW9uIFF1KHQpe3F1LmtleT0wLHF1LmtleUVuZD0wLHF1LnZhbHVlPTAscXUudmFsdWVFbmQ9MCxxdS50ZXh0RW5kPXQubGVuZ3RofWZ1bmN0aW9uICR1KHQsZSxuKXtmb3IoO2U8biYmdC5jaGFyQ29kZUF0KGUpPD0zMjspZSsrO3JldHVybiBlfWZ1bmN0aW9uIHRmKHQsZSxuLG8pe3JldHVybihlPSR1KHQsZSxuKSk8biYmKG5nRGV2TW9kZSYmdC5jaGFyQ29kZUF0KGUpIT09byYmbmYodCxTdHJpbmcuZnJvbUNoYXJDb2RlKG8pLGUpLGUrKyksZX1mdW5jdGlvbiBlZih0LGUsbixvKXtsZXQgaT0tMSxhPW47Zm9yKDthPG87KXtjb25zdCBuPXQuY2hhckNvZGVBdChhKyspO2lmKG49PWUmJjkyIT09aSlyZXR1cm4gYTtpPTkyPT1uJiY5Mj09PWk/MDpufXRocm93IG5nRGV2TW9kZT9uZih0LFN0cmluZy5mcm9tQ2hhckNvZGUoZSksbyk6bmV3IEVycm9yfWZ1bmN0aW9uIG5mKHQsZSxuKXt0aHJvdyBuZ0Rldk1vZGUmJlhuKCJzdHJpbmciPT10eXBlb2YgdCwhMCwiU3RyaW5nIGV4cGVjdGVkIGhlcmUiKSxpbyhgTWFsZm9ybWVkIHN0eWxlIGF0IGxvY2F0aW9uICR7bn0gaW4gc3RyaW5nICdgK3Quc3Vic3RyaW5nKDAsbikrIls+PiIrdC5zdWJzdHJpbmcobixuKzEpKyI8PF0iK3Quc3Vic3RyKG4rMSkrYCcuIEV4cGVjdGluZyAnJHtlfScuYCl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIG9mKHQsZSxuKXtyZXR1cm4gZGYodCxlLG4sITEpLG9mfWZ1bmN0aW9uIGFmKHQsZSl7cmV0dXJuIGRmKHQsZSxudWxsLCEwKSxhZn1mdW5jdGlvbiByZih0KXtwZihoZixzZix0LCExKX1mdW5jdGlvbiBzZih0LGUpe2ZvcihsZXQgbj0oZnVuY3Rpb24gbih0KXtyZXR1cm4gUXUodCksSnUodCwkdSh0LDAscXUudGV4dEVuZCkpfSkoZSk7bj49MDtuPUp1KGUsbikpaGYodCxadShlKSxYdShlKSl9ZnVuY3Rpb24gbGYodCl7cGYoS3IsY2YsdCwhMCl9ZnVuY3Rpb24gY2YodCxlKXtmb3IobGV0IG49KGZ1bmN0aW9uIG4odCl7cmV0dXJuIFF1KHQpLEt1KHQsJHUodCwwLHF1LnRleHRFbmQpKX0pKGUpO24+PTA7bj1LdShlLG4pKUtyKHQsWnUoZSksITApfWZ1bmN0aW9uIGRmKHQsZSxuLG8pe2NvbnN0IGk9aWEoKSxhPWFhKCkscj1fYSgyKTthLmZpcnN0VXBkYXRlUGFzcyYmdWYoYSx0LHIsbyksZSE9PUtjJiZFbShpLHIsZSkmJmJmKGEsYS5kYXRhW05hKCldLGksaVsxMV0sdCxpW3IrMV09KGZ1bmN0aW9uIHModCxlKXtyZXR1cm4gbnVsbD09dHx8KCJzdHJpbmciPT10eXBlb2YgZT90Kz1lOiJvYmplY3QiPT10eXBlb2YgdCYmKHQ9Um4oR3ModCkpKSksdH0pKGUsbiksbyxyKX1mdW5jdGlvbiBwZih0LGUsbixvKXtjb25zdCBpPWFhKCksYT1fYSgyKTtpLmZpcnN0VXBkYXRlUGFzcyYmdWYoaSxudWxsLGEsbyk7Y29uc3Qgcj1pYSgpO2lmKG4hPT1LYyYmRW0ocixhLG4pKXtjb25zdCBzPWkuZGF0YVtOYSgpXTtpZihDZihzLG8pJiYhbWYoaSxhKSl7aWYobmdEZXZNb2RlKXtjb25zdCB0PWkuZGF0YVthXTtYbihBcnJheS5pc0FycmF5KHQpP3RbMV06dCwhMSwiU3R5bGluZyBsaW5rZWQgbGlzdCBzaGFkb3cgaW5wdXQgc2hvdWxkIGJlIG1hcmtlZCBhcyAnZmFsc2UnIil9bGV0IHQ9bz9zLmNsYXNzZXNXaXRob3V0SG9zdDpzLnN0eWxlc1dpdGhvdXRIb3N0O25nRGV2TW9kZSYmITE9PT1vJiZudWxsIT09dCYmWG4odC5lbmRzV2l0aCgiOyIpLCEwLCJFeHBlY3Rpbmcgc3RhdGljIHBvcnRpb24gdG8gZW5kIHdpdGggJzsnIiksbnVsbCE9PXQmJihuPVRuKHQsbnx8IiIpKSx4dShpLHMscixuLG8pfWVsc2UhKGZ1bmN0aW9uIGwodCxlLG4sbyxpLGEscixzKXtpPT09S2MmJihpPVRvKTtsZXQgbD0wLGM9MCxkPTA8aS5sZW5ndGg/aVswXTpudWxsLHA9MDxhLmxlbmd0aD9hWzBdOm51bGw7Zm9yKDtudWxsIT09ZHx8bnVsbCE9PXA7KXtuZ0Rldk1vZGUmJiRuKGwsOTk5LCJBcmUgd2Ugc3R1Y2sgaW4gaW5maW5pdGUgbG9vcD8iKSxuZ0Rldk1vZGUmJiRuKGMsOTk5LCJBcmUgd2Ugc3R1Y2sgaW4gaW5maW5pdGUgbG9vcD8iKTtjb25zdCBtPWw8aS5sZW5ndGg/aVtsKzFdOnZvaWQgMCx1PWM8YS5sZW5ndGg/YVtjKzFdOnZvaWQgMDtsZXQgZixnPW51bGw7ZD09PXA/KGwrPTIsYys9MixtIT09dSYmKGc9cCxmPXUpKTpudWxsPT09cHx8bnVsbCE9PWQmJmQ8cD8obCs9MixnPWQpOihuZ0Rldk1vZGUmJm9vKHAsIkV4cGVjdGluZyB0byBoYXZlIGEgdmFsaWQga2V5IiksYys9MixnPXAsZj11KSxudWxsIT09ZyYmYmYodCxlLG4sbyxnLGYscixzKSxkPWw8aS5sZW5ndGg/aVtsXTpudWxsLHA9YzxhLmxlbmd0aD9hW2NdOm51bGx9fSkoaSxzLHIsclsxMV0sclthKzFdLHJbYSsxXT0oZnVuY3Rpb24gcyh0LGUsbil7aWYobnVsbD09bnx8IiI9PT1uKXJldHVybiBUbztjb25zdCBvPVtdLGk9R3Mobik7aWYoQXJyYXkuaXNBcnJheShpKSlmb3IobGV0IGU9MDtlPGkubGVuZ3RoO2UrKyl0KG8saVtlXSwhMCk7ZWxzZSBpZigib2JqZWN0Ij09dHlwZW9mIGkpZm9yKGNvbnN0IGUgaW4gaSlpLmhhc093blByb3BlcnR5KGUpJiZ0KG8sZSxpW2VdKTtlbHNlInN0cmluZyI9PXR5cGVvZiBpP2UobyxpKTpuZ0Rldk1vZGUmJmlvKCJVbnN1cHBvcnRlZCBzdHlsaW5nIHR5cGUgIit0eXBlb2YgaSsiOiAiK2kpO3JldHVybiBvfSkodCxlLG4pLG8sYSl9fWZ1bmN0aW9uIG1mKHQsZSl7cmV0dXJuIGU+PXQuZXhwYW5kb1N0YXJ0SW5kZXh9ZnVuY3Rpb24gdWYodCxlLG4sbyl7bmdEZXZNb2RlJiZNaSh0KTtjb25zdCBpPXQuZGF0YTtpZihudWxsPT09aVtuKzFdKXtjb25zdCBhPWlbTmEoKV07bmdEZXZNb2RlJiZvbyhhLCJUTm9kZSBleHBlY3RlZCIpO2NvbnN0IHI9bWYodCxuKTtDZihhLG8pJiZudWxsPT09ZSYmIXImJihlPSExKSxlPShmdW5jdGlvbiBhKHQsZSxuLG8pe2NvbnN0IGk9eGEodCk7bGV0IGE9bz9lLnJlc2lkdWFsQ2xhc3NlczplLnJlc2lkdWFsU3R5bGVzO2lmKG51bGw9PT1pKTA9PT0obz9lLmNsYXNzQmluZGluZ3M6ZS5zdHlsZUJpbmRpbmdzKSYmKG49Z2Yobj1mZihudWxsLHQsZSxuLG8pLGUuYXR0cnMsbyksYT1udWxsKTtlbHNle2NvbnN0IHI9ZS5kaXJlY3RpdmVTdHlsaW5nTGFzdDtpZigtMT09PXJ8fHRbcl0hPT1pKWlmKG49ZmYoaSx0LGUsbixvKSxudWxsPT09YSl7bGV0IG49KGZ1bmN0aW9uIHIodCxlLG4pe2NvbnN0IG89bj9lLmNsYXNzQmluZGluZ3M6ZS5zdHlsZUJpbmRpbmdzO2lmKDAhPT1vZChvKSlyZXR1cm4gdFt0ZChvKV19KSh0LGUsbyk7dm9pZCAwIT09biYmQXJyYXkuaXNBcnJheShuKSYmKG49ZmYobnVsbCx0LGUsblsxXSxvKSxuPWdmKG4sZS5hdHRycyxvKSwoZnVuY3Rpb24gcyh0LGUsbixvKXtjb25zdCBpPW4/ZS5jbGFzc0JpbmRpbmdzOmUuc3R5bGVCaW5kaW5ncztuZ0Rldk1vZGUmJktuKG9kKGkpLDAsIkV4cGVjdGluZyB0byBoYXZlIGF0IGxlYXN0IG9uZSB0ZW1wbGF0ZSBzdHlsaW5nIGJpbmRpbmcuIiksdFt0ZChpKV09b30pKHQsZSxvLG4pKX1lbHNlIGE9KGZ1bmN0aW9uIGwodCxlLG4pe2xldCBvO2NvbnN0IGk9ZS5kaXJlY3RpdmVFbmQ7bmdEZXZNb2RlJiZLbihlLmRpcmVjdGl2ZVN0eWxpbmdMYXN0LC0xLCJCeSB0aGUgdGltZSB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGF0IGxlYXN0IG9uZSBob3N0QmluZGluZ3Mtbm9kZSBzdHlsaW5nIGluc3RydWN0aW9uIG11c3QgaGF2ZSBleGVjdXRlZC4iKTtmb3IobGV0IGE9MStlLmRpcmVjdGl2ZVN0eWxpbmdMYXN0O2E8aTthKyspbz1nZihvLHRbYV0uaG9zdEF0dHJzLG4pO3JldHVybiBnZihvLGUuYXR0cnMsbil9KSh0LGUsbyl9cmV0dXJuIHZvaWQgMCE9PWEmJihvP2UucmVzaWR1YWxDbGFzc2VzPWE6ZS5yZXNpZHVhbFN0eWxlcz1hKSxufSkoaSxhLGUsbyksKGZ1bmN0aW9uIHIodCxlLG4sbyxpLGEpe25nRGV2TW9kZSYmTWkoYWEoKSk7bGV0IHI9YT9lLmNsYXNzQmluZGluZ3M6ZS5zdHlsZUJpbmRpbmdzLHM9dGQociksbD1vZChyKTt0W29dPW47bGV0IGMsZD0hMTtpZihBcnJheS5pc0FycmF5KG4pKXtjb25zdCB0PW47Yz10WzFdLChudWxsPT09Y3x8UXIodCxjKT4wKSYmKGQ9ITApfWVsc2UgYz1uO2lmKGkpaWYoMCE9PWwpe2NvbnN0IGU9dGQodFtzKzFdKTt0W28rMV09JGMoZSxzKSwwIT09ZSYmKHRbZSsxXT1pZCh0W2UrMV0sbykpLHRbcysxXT0oZnVuY3Rpb24gcCh0LGUpe3JldHVybiBuZ0Rldk1vZGUmJlluKHQsImV4cGVjdGVkIG51bWJlciIpLG5nRGV2TW9kZSYmcW4oZSwwLDMyNzY3KSwxMzEwNzEmdHxlPDwxN30pKHRbcysxXSxvKX1lbHNlIHRbbysxXT0kYyhzLDApLDAhPT1zJiYodFtzKzFdPWlkKHRbcysxXSxvKSkscz1vO2Vsc2UgdFtvKzFdPSRjKGwsMCksbmdEZXZNb2RlJiZYbigwIT09cyYmMD09PWwsITEsIkFkZGluZyB0ZW1wbGF0ZSBiaW5kaW5ncyBhZnRlciBob3N0QmluZGluZ3MgaXMgbm90IGFsbG93ZWQuIiksMD09PXM/cz1vOnRbbCsxXT1pZCh0W2wrMV0sbyksbD1vO2QmJih0W28rMV09bmQodFtvKzFdKSksR3UodCxjLG8sITApLEd1KHQsYyxvLCExKSwoZnVuY3Rpb24gbSh0LGUsbixvLGkpe2NvbnN0IGE9aT90LnJlc2lkdWFsQ2xhc3Nlczp0LnJlc2lkdWFsU3R5bGVzO251bGwhPWEmJiJzdHJpbmciPT10eXBlb2YgZSYmUXIoYSxlKT49MCYmKG5bbysxXT1yZChuW28rMV0pKX0pKGUsYyx0LG8sYSkscj0kYyhzLGwpLGE/ZS5jbGFzc0JpbmRpbmdzPXI6ZS5zdHlsZUJpbmRpbmdzPXJ9KShpLGEsZSxuLHIsbyl9fWZ1bmN0aW9uIGZmKHQsZSxuLG8saSl7bGV0IGE9bnVsbDtjb25zdCByPW4uZGlyZWN0aXZlRW5kO2xldCBzPW4uZGlyZWN0aXZlU3R5bGluZ0xhc3Q7Zm9yKC0xPT09cz9zPW4uZGlyZWN0aXZlU3RhcnQ6cysrO3M8ciYmKGE9ZVtzXSxuZ0Rldk1vZGUmJm9vKGEsImV4cGVjdGVkIHRvIGJlIGRlZmluZWQiKSxvPWdmKG8sYS5ob3N0QXR0cnMsaSksYSE9PXQpOylzKys7cmV0dXJuIG51bGwhPT10JiYobi5kaXJlY3RpdmVTdHlsaW5nTGFzdD1zKSxvfWZ1bmN0aW9uIGdmKHQsZSxuKXtjb25zdCBvPW4/MToyO2xldCBpPS0xO2lmKG51bGwhPT1lKWZvcihsZXQgYT0wO2E8ZS5sZW5ndGg7YSsrKXtjb25zdCByPWVbYV07Im51bWJlciI9PXR5cGVvZiByP2k9cjppPT09byYmKEFycmF5LmlzQXJyYXkodCl8fCh0PXZvaWQgMD09PXQ/W106WyIiLHRdKSxLcih0LHIsISFufHxlWysrYV0pKX1yZXR1cm4gdm9pZCAwPT09dD9udWxsOnR9ZnVuY3Rpb24gaGYodCxlLG4pe0tyKHQsZSxHcyhuKSl9ZnVuY3Rpb24gYmYodCxlLG4sbyxpLGEscixzKXtpZighKDMmZS50eXBlKSlyZXR1cm47Y29uc3QgbD10LmRhdGEsYz1sW3MrMV07X2YoYWQoYyk/eWYobCxlLG4saSxvZChjKSxyKTp2b2lkIDApfHwoX2YoYSl8fGVkKGMpJiYoYT15ZihsLG51bGwsbixpLHMscikpLChmdW5jdGlvbiBkKHQsZSxuLG8saSl7Y29uc3QgYT1WaSh0KTtpZihlKWk/KG5nRGV2TW9kZSYmbmdEZXZNb2RlLnJlbmRlcmVyQWRkQ2xhc3MrKyxhP3QuYWRkQ2xhc3MobixvKToobmdEZXZNb2RlJiZvbyhuLmNsYXNzTGlzdCwiSFRNTEVsZW1lbnQgZXhwZWN0ZWQiKSxuLmNsYXNzTGlzdC5hZGQobykpKToobmdEZXZNb2RlJiZuZ0Rldk1vZGUucmVuZGVyZXJSZW1vdmVDbGFzcysrLGE/dC5yZW1vdmVDbGFzcyhuLG8pOm4uY2xhc3NMaXN0LnJlbW92ZShvKSk7ZWxzZXtsZXQgZT0tMT09PW8uaW5kZXhPZigiLSIpP3ZvaWQgMDp0Yy5EYXNoQ2FzZTtpZihudWxsPT1pKW5nRGV2TW9kZSYmbmdEZXZNb2RlLnJlbmRlcmVyUmVtb3ZlU3R5bGUrKyxhP3QucmVtb3ZlU3R5bGUobixvLGUpOm4uc3R5bGUucmVtb3ZlUHJvcGVydHkobyk7ZWxzZXtjb25zdCByPSJzdHJpbmciPT10eXBlb2YgaSYmaS5lbmRzV2l0aCgiIWltcG9ydGFudCIpO3ImJihpPWkuc2xpY2UoMCwtMTApLGV8PXRjLkltcG9ydGFudCksbmdEZXZNb2RlJiZuZ0Rldk1vZGUucmVuZGVyZXJTZXRTdHlsZSsrLGE/dC5zZXRTdHlsZShuLG8saSxlKToobmdEZXZNb2RlJiZvbyhuLnN0eWxlLCJIVE1MRWxlbWVudCBleHBlY3RlZCIpLG4uc3R5bGUuc2V0UHJvcGVydHkobyxpLHI/ImltcG9ydGFudCI6IiIpKX19fSkobyxyLFdpKE5hKCksbiksaSxhKSl9ZnVuY3Rpb24geWYodCxlLG4sbyxpLGEpe2NvbnN0IHI9bnVsbD09PWU7bGV0IHM7Zm9yKDtpPjA7KXtjb25zdCBlPXRbaV0sYT1BcnJheS5pc0FycmF5KGUpLGw9YT9lWzFdOmUsYz1udWxsPT09bDtsZXQgZD1uW2krMV07ZD09PUtjJiYoZD1jP1RvOnZvaWQgMCk7bGV0IHA9Yz9KcihkLG8pOmw9PT1vP2Q6dm9pZCAwO2lmKGEmJiFfZihwKSYmKHA9SnIoZSxvKSksX2YocCkmJihzPXAscikpcmV0dXJuIHM7Y29uc3QgbT10W2krMV07aT1yP3RkKG0pOm9kKG0pfWlmKG51bGwhPT1lKXtsZXQgdD1hP2UucmVzaWR1YWxDbGFzc2VzOmUucmVzaWR1YWxTdHlsZXM7bnVsbCE9dCYmKHM9SnIodCxvKSl9cmV0dXJuIHN9ZnVuY3Rpb24gX2YodCl7cmV0dXJuIHZvaWQgMCE9PXR9ZnVuY3Rpb24gQ2YodCxlKXtyZXR1cm4gMCE9KHQuZmxhZ3MmKGU/MTY6MzIpKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovZnVuY3Rpb24gTWYodCxlPSIiKXtjb25zdCBuPWlhKCksbz1hYSgpLGk9dCtvaTtuZ0Rldk1vZGUmJlhuKGhhKCksby5iaW5kaW5nU3RhcnRJbmRleCwidGV4dCBub2RlcyBzaG91bGQgYmUgY3JlYXRlZCBiZWZvcmUgYW55IGJpbmRpbmdzIiksbmdEZXZNb2RlJiZybyhuLGkpO2NvbnN0IGE9by5maXJzdENyZWF0ZVBhc3M/TGQobyxpLDEsZSxudWxsKTpvLmRhdGFbaV0scj1uW2ldPWNjKG5bMTFdLGUpO1NjKG8sbixyLGEpLGRhKGEsITEpfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiB2Zih0KXtyZXR1cm4geGYoIiIsdCwiIiksdmZ9ZnVuY3Rpb24geGYodCxlLG4pe2NvbnN0IG89aWEoKSxpPXptKG8sdCxlLG4pO3JldHVybiBpIT09S2MmJlRwKG8sTmEoKSxpKSx4Zn1mdW5jdGlvbiBPZih0LGUsbixvLGkpe2NvbnN0IGE9aWEoKSxyPUhtKGEsdCxlLG4sbyxpKTtyZXR1cm4gciE9PUtjJiZUcChhLE5hKCksciksT2Z9ZnVuY3Rpb24gUGYodCxlLG4sbyxpLGEscil7Y29uc3Qgcz1pYSgpLGw9Rm0ocyx0LGUsbixvLGksYSxyKTtyZXR1cm4gbCE9PUtjJiZUcChzLE5hKCksbCksUGZ9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpmdW5jdGlvbiB3Zih0LGUsbil7cGYoS3IsY2Ysem0oaWEoKSx0LGUsbiksITApfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KZnVuY3Rpb24ga2YodCxlLG4pe2NvbnN0IG89aWEoKSxpPXlhKCk7aWYoRW0obyxpLGUpKXtjb25zdCBhPWFhKCkscj16YSgpOyRkKGEscixvLHQsZSxvWzExXSxuLCEwKSxuZ0Rldk1vZGUmJndwKGEuZGF0YSxyLHQsaSl9cmV0dXJuIGtmfWZ1bmN0aW9uIFNmKHQsZSxuKXtjb25zdCBvPWlhKCksaT15YSgpO2lmKEVtKG8saSxlKSl7Y29uc3QgYT1hYSgpLHI9emEoKTskZChhLHIsbyx0LGUsRXAoeGEoYS5kYXRhKSxyLG8pLG4sITApLG5nRGV2TW9kZSYmd3AoYS5kYXRhLHIsdCxpKX1yZXR1cm4gU2Z9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLyJ1bmRlZmluZWQiPT10eXBlb2YgbmdJMThuQ2xvc3VyZU1vZGUmJihFby5uZ0kxOG5DbG9zdXJlTW9kZT0idW5kZWZpbmVkIiE9dHlwZW9mIGdvb2cmJiJmdW5jdGlvbiI9PXR5cGVvZiBnb29nLmdldE1zZyk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NvbnN0IERmPXZvaWQgMDt2YXIgRWY9WyJlbiIsW1siYSIsInAiXSxbIkFNIiwiUE0iXSxEZl0sW1siQU0iLCJQTSJdLERmLERmXSxbWyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0sWyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sWyJTdSIsIk1vIiwiVHUiLCJXZSIsIlRoIiwiRnIiLCJTYSJdXSxEZixbWyJKIiwiRiIsIk0iLCJBIiwiTSIsIkoiLCJKIiwiQSIsIlMiLCJPIiwiTiIsIkQiXSxbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLFsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXV0sRGYsW1siQiIsIkEiXSxbIkJDIiwiQUQiXSxbIkJlZm9yZSBDaHJpc3QiLCJBbm5vIERvbWluaSJdXSwwLFs2LDBdLFsiTS9kL3l5IiwiTU1NIGQsIHkiLCJNTU1NIGQsIHkiLCJFRUVFLCBNTU1NIGQsIHkiXSxbImg6bW0gYSIsImg6bW06c3MgYSIsImg6bW06c3MgYSB6IiwiaDptbTpzcyBhIHp6enoiXSxbInsxfSwgezB9IixEZiwiezF9ICdhdCcgezB9IixEZl0sWyIuIiwiLCIsIjsiLCIlIiwiKyIsIi0iLCJFIiwiw5ciLCLigLAiLCLiiJ4iLCJOYU4iLCI6Il0sWyIjLCMjMC4jIyMiLCIjLCMjMCUiLCLCpCMsIyMwLjAwIiwiI0UwIl0sIlVTRCIsIiQiLCJVUyBEb2xsYXIiLHt9LCJsdHIiLGZ1bmN0aW9uIEFmKHQpe2xldCBlPU1hdGguZmxvb3IoTWF0aC5hYnModCkpLG49dC50b1N0cmluZygpLnJlcGxhY2UoL15bXi5dKlwuPy8sIiIpLmxlbmd0aDtyZXR1cm4gMT09PWUmJjA9PT1uPzE6NX1dOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9sZXQgUmY9e307ZnVuY3Rpb24gVGYodCl7Y29uc3QgZT0oZnVuY3Rpb24gbih0KXtyZXR1cm4gdC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL18vZywiLSIpfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8pKHQpO2xldCBvPUlmKGUpO2lmKG8pcmV0dXJuIG87Y29uc3QgaT1lLnNwbGl0KCItIilbMF07aWYobz1JZihpKSxvKXJldHVybiBvO2lmKCJlbiI9PT1pKXJldHVybiBFZjt0aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgbG9jYWxlIGRhdGEgZm9yIHRoZSBsb2NhbGUgIiR7dH0iLmApfWZ1bmN0aW9uIE5mKHQpe3JldHVybiBUZih0KVt6Zi5QbHVyYWxDYXNlXX1mdW5jdGlvbiBJZih0KXtyZXR1cm4gdCBpbiBSZnx8KFJmW3RdPUVvLm5nJiZFby5uZy5jb21tb24mJkVvLm5nLmNvbW1vbi5sb2NhbGVzJiZFby5uZy5jb21tb24ubG9jYWxlc1t0XSksUmZbdF19dmFyIHpmOyEoZnVuY3Rpb24odCl7dFt0LkxvY2FsZUlkPTBdPSJMb2NhbGVJZCIsdFt0LkRheVBlcmlvZHNGb3JtYXQ9MV09IkRheVBlcmlvZHNGb3JtYXQiLHRbdC5EYXlQZXJpb2RzU3RhbmRhbG9uZT0yXT0iRGF5UGVyaW9kc1N0YW5kYWxvbmUiLHRbdC5EYXlzRm9ybWF0PTNdPSJEYXlzRm9ybWF0Iix0W3QuRGF5c1N0YW5kYWxvbmU9NF09IkRheXNTdGFuZGFsb25lIix0W3QuTW9udGhzRm9ybWF0PTVdPSJNb250aHNGb3JtYXQiLHRbdC5Nb250aHNTdGFuZGFsb25lPTZdPSJNb250aHNTdGFuZGFsb25lIix0W3QuRXJhcz03XT0iRXJhcyIsdFt0LkZpcnN0RGF5T2ZXZWVrPThdPSJGaXJzdERheU9mV2VlayIsdFt0LldlZWtlbmRSYW5nZT05XT0iV2Vla2VuZFJhbmdlIix0W3QuRGF0ZUZvcm1hdD0xMF09IkRhdGVGb3JtYXQiLHRbdC5UaW1lRm9ybWF0PTExXT0iVGltZUZvcm1hdCIsdFt0LkRhdGVUaW1lRm9ybWF0PTEyXT0iRGF0ZVRpbWVGb3JtYXQiLHRbdC5OdW1iZXJTeW1ib2xzPTEzXT0iTnVtYmVyU3ltYm9scyIsdFt0Lk51bWJlckZvcm1hdHM9MTRdPSJOdW1iZXJGb3JtYXRzIix0W3QuQ3VycmVuY3lDb2RlPTE1XT0iQ3VycmVuY3lDb2RlIix0W3QuQ3VycmVuY3lTeW1ib2w9MTZdPSJDdXJyZW5jeVN5bWJvbCIsdFt0LkN1cnJlbmN5TmFtZT0xN109IkN1cnJlbmN5TmFtZSIsdFt0LkN1cnJlbmNpZXM9MThdPSJDdXJyZW5jaWVzIix0W3QuRGlyZWN0aW9uYWxpdHk9MTldPSJEaXJlY3Rpb25hbGl0eSIsdFt0LlBsdXJhbENhc2U9MjBdPSJQbHVyYWxDYXNlIix0W3QuRXh0cmFEYXRhPTIxXT0iRXh0cmFEYXRhIn0pKHpmfHwoemY9e30pKTtjb25zdCBIZj1bInplcm8iLCJvbmUiLCJ0d28iLCJmZXciLCJtYW55Il0sRmY9ImVuLVVTIixMZj17bWFya2VyOiJlbGVtZW50In0sQmY9e21hcmtlcjoiSUNVIn07dmFyIFZmOyEoZnVuY3Rpb24odCl7dFt0LlNISUZUPTJdPSJTSElGVCIsdFt0LkFQUEVORF9FQUdFUkxZPTFdPSJBUFBFTkRfRUFHRVJMWSIsdFt0LkNPTU1FTlQ9Ml09IkNPTU1FTlQifSkoVmZ8fChWZj17fSkpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KbGV0IGpmPUZmO2Z1bmN0aW9uIFVmKHQpe29vKHQsIkV4cGVjdGVkIGxvY2FsZUlkIHRvIGJlIGRlZmluZWQiKSwic3RyaW5nIj09dHlwZW9mIHQmJihqZj10LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXy9nLCItIikpfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KZnVuY3Rpb24gV2YodCxlLG4pe2NvbnN0IG89ZS5pbnNlcnRCZWZvcmVJbmRleCxpPUFycmF5LmlzQXJyYXkobyk/b1swXTpvO3JldHVybiBudWxsPT09aT9PYyh0LDAsbik6KG5nRGV2TW9kZSYmcm8obixpKSxVaShuW2ldKSl9ZnVuY3Rpb24gR2YodCxlLG4sbyxpKXtjb25zdCBhPWUuaW5zZXJ0QmVmb3JlSW5kZXg7aWYoQXJyYXkuaXNBcnJheShhKSl7bmdEZXZNb2RlJiZhbyhvKTtsZXQgcj1vLHM9bnVsbDtpZigzJmUudHlwZXx8KHM9cixyPWkpLG51bGwhPT1yJiYwPT0oMiZlLmZsYWdzKSlmb3IobGV0IGU9MTtlPGEubGVuZ3RoO2UrKylfYyh0LHIsblthW2VdXSxzLCExKX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIFlmKHQsZSl7aWYobmdEZXZNb2RlJiZYbihlLmluc2VydEJlZm9yZUluZGV4LG51bGwsIldlIGV4cGVjdCB0aGF0IGluc2VydEJlZm9yZUluZGV4IGlzIG5vdCBzZXQiKSx0LnB1c2goZSksdC5sZW5ndGg+MSlmb3IobGV0IG49dC5sZW5ndGgtMjtuPj0wO24tLSl7Y29uc3Qgbz10W25dO3FmKG8pfHxaZihvLGUpJiZudWxsPT09WGYobykmJktmKG8sZS5pbmRleCl9fWZ1bmN0aW9uIHFmKHQpe3JldHVybiEoNjQmdC50eXBlKX1mdW5jdGlvbiBaZih0LGUpe3JldHVybiBxZihlKXx8dC5pbmRleD5lLmluZGV4fWZ1bmN0aW9uIFhmKHQpe2NvbnN0IGU9dC5pbnNlcnRCZWZvcmVJbmRleDtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9lWzBdOmV9ZnVuY3Rpb24gS2YodCxlKXtjb25zdCBuPXQuaW5zZXJ0QmVmb3JlSW5kZXg7QXJyYXkuaXNBcnJheShuKT9uWzBdPWU6KGtjKFdmLEdmKSx0Lmluc2VydEJlZm9yZUluZGV4PWUpfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiBKZih0LGUpe2NvbnN0IG49dC5kYXRhW2VdO2lmKG51bGw9PT1ufHwic3RyaW5nIj09dHlwZW9mIG4pcmV0dXJuIG51bGw7IW5nRGV2TW9kZXx8bi5oYXNPd25Qcm9wZXJ0eSgidFZpZXdzIil8fG4uaGFzT3duUHJvcGVydHkoImN1cnJlbnRDYXNlTFZpZXdJbmRleCIpfHxpbygiV2UgZXhwZWN0IHRvIGdldCAnbnVsbCd8J1RJY3UnfCdUSWN1Q29udGFpbmVyJywgYnV0IGdvdDogIituKTtjb25zdCBvPW4uaGFzT3duUHJvcGVydHkoImN1cnJlbnRDYXNlTFZpZXdJbmRleCIpP246bi52YWx1ZTtyZXR1cm4gbmdEZXZNb2RlJiZnaShvKSxvfWZ1bmN0aW9uIFFmKHQsZSxuKXtjb25zdCBvPUJkKHQsbiw2NCxudWxsLG51bGwpO3JldHVybiBZZihlLG8pLG99ZnVuY3Rpb24gJGYodCxlKXtjb25zdCBuPWVbdC5jdXJyZW50Q2FzZUxWaWV3SW5kZXhdO3JldHVybiBudWxsPT09bj9uOm48MD9+bjpufWZ1bmN0aW9uIHRnKHQpe3JldHVybiB0Pj4+MTd9ZnVuY3Rpb24gZWcodCl7cmV0dXJuKDEzMTA3MCZ0KT4+PjF9ZnVuY3Rpb24gbmcodCl7cmV0dXJuIDEmdH0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmxldCBvZz0wLGlnPTA7ZnVuY3Rpb24gYWcodCxlLG4sbyl7bmdEZXZNb2RlJiZhbyhvKTtjb25zdCBpPW5bMTFdO2xldCBhLHI9bnVsbDtmb3IobGV0IHM9MDtzPGUubGVuZ3RoO3MrKyl7Y29uc3QgbD1lW3NdO2lmKCJzdHJpbmciPT10eXBlb2YgbCl7Y29uc3QgdD1lWysrc107bnVsbD09PW5bdF0mJihuZ0Rldk1vZGUmJm5nRGV2TW9kZS5yZW5kZXJlckNyZWF0ZVRleHROb2RlKyssbmdEZXZNb2RlJiZybyhuLHQpLG5bdF09Y2MoaSxsKSl9ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIGwpc3dpdGNoKDEmbCl7Y2FzZSAwOmNvbnN0IGM9dGcobCk7bGV0IGQscDtpZihudWxsPT09ciYmKHI9YyxhPXZjKGksbykpLGM9PT1yPyhkPW8scD1hKTooZD1udWxsLHA9VWkobltjXSkpLG51bGwhPT1wKXtuZ0Rldk1vZGUmJmFvKHApO2NvbnN0IGU9ZWcobCk7bmdEZXZNb2RlJiZlbyhlLG9pLCJNaXNzaW5nIHJlZiIpO2NvbnN0IG89bltlXTtuZ0Rldk1vZGUmJmFvKG8pLF9jKGkscCxvLGQsITEpO2NvbnN0IGE9SmYodCxlKTtpZihudWxsIT09YSYmIm9iamVjdCI9PXR5cGVvZiBhKXtuZ0Rldk1vZGUmJmdpKGEpO2NvbnN0IGU9JGYoYSxuKTtudWxsIT09ZSYmYWcodCxhLmNyZWF0ZVtlXSxuLG5bYS5hbmNob3JJZHhdKX19YnJlYWs7Y2FzZSAxOmNvbnN0IG09ZVsrK3NdLHU9ZVsrK3NdO21wKGksV2kobD4+PjEsbiksbnVsbCxudWxsLG0sdSxudWxsKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGRldGVybWluZSB0aGUgdHlwZSBvZiBtdXRhdGUgb3BlcmF0aW9uIGZvciAiJHtsfSJgKX1lbHNlIHN3aXRjaChsKXtjYXNlIEJmOmNvbnN0IHQ9ZVsrK3NdLG89ZVsrK3NdO251bGw9PT1uW29dJiYobmdEZXZNb2RlJiZYbih0eXBlb2YgdCwic3RyaW5nIixgRXhwZWN0ZWQgIiR7dH0iIHRvIGJlIGEgY29tbWVudCBub2RlIHZhbHVlYCksbmdEZXZNb2RlJiZuZ0Rldk1vZGUucmVuZGVyZXJDcmVhdGVDb21tZW50KyssbmdEZXZNb2RlJiZ2aShuLG8pLFZsKG5bb109cGMoaSx0KSxuKSk7YnJlYWs7Y2FzZSBMZjpjb25zdCBhPWVbKytzXSxyPWVbKytzXTtudWxsPT09bltyXSYmKG5nRGV2TW9kZSYmWG4odHlwZW9mIGEsInN0cmluZyIsYEV4cGVjdGVkICIke2F9IiB0byBiZSBhbiBlbGVtZW50IG5vZGUgdGFnIG5hbWVgKSxuZ0Rldk1vZGUmJm5nRGV2TW9kZS5yZW5kZXJlckNyZWF0ZUVsZW1lbnQrKyxuZ0Rldk1vZGUmJnZpKG4sciksVmwobltyXT1tYyhpLGEsbnVsbCksbikpO2JyZWFrO2RlZmF1bHQ6bmdEZXZNb2RlJiZpbyhgVW5hYmxlIHRvIGRldGVybWluZSB0aGUgdHlwZSBvZiBtdXRhdGUgb3BlcmF0aW9uIGZvciAiJHtsfSJgKX19fWZ1bmN0aW9uIHJnKHQsZSxuLG8saSl7Zm9yKGxldCBhPTA7YTxuLmxlbmd0aDthKyspe2NvbnN0IHI9blthXSxzPW5bKythXTtpZihyJmkpe2xldCBpPSIiO2ZvcihsZXQgcj1hKzE7cjw9YStzO3IrKyl7Y29uc3QgYT1uW3JdO2lmKCJzdHJpbmciPT10eXBlb2YgYSlpKz1hO2Vsc2UgaWYoIm51bWJlciI9PXR5cGVvZiBhKWlmKGE8MClpKz1WbihlW28tYV0pO2Vsc2V7Y29uc3Qgcz1hPj4+Mjtzd2l0Y2goMyZhKXtjYXNlIDE6Y29uc3QgYT1uWysrcl0sbD1uWysrcl0sYz10LmRhdGFbc107bmdEZXZNb2RlJiZvbyhjLCJFeHBlcnRpbmcgVE5vZGUgb3Igc3RyaW5nIiksInN0cmluZyI9PXR5cGVvZiBjP21wKGVbMTFdLGVbc10sbnVsbCxjLGEsaSxsKTokZCh0LGMsZSxhLGksZVsxMV0sbCwhMSk7YnJlYWs7Y2FzZSAwOmNvbnN0IGQ9ZVtzXTtudWxsIT09ZCYmZGMoZVsxMV0sZCxpKTticmVhaztjYXNlIDI6bGcodCxKZih0LHMpLGUsaSk7YnJlYWs7Y2FzZSAzOnNnKHQsSmYodCxzKSxvLGUpfX19fWVsc2V7Y29uc3QgaT1uW2ErMV07aWYoaT4wJiYzPT0oMyZpKSl7Y29uc3Qgbj1KZih0LGk+Pj4yKTtlW24uY3VycmVudENhc2VMVmlld0luZGV4XTwwJiZzZyh0LG4sbyxlKX19YSs9c319ZnVuY3Rpb24gc2codCxlLG4sbyl7bmdEZXZNb2RlJiZybyhvLGUuY3VycmVudENhc2VMVmlld0luZGV4KTtsZXQgaT1vW2UuY3VycmVudENhc2VMVmlld0luZGV4XTtpZihudWxsIT09aSl7bGV0IGE9b2c7aTwwJiYoaT1vW2UuY3VycmVudENhc2VMVmlld0luZGV4XT1+aSxhPS0xKSxyZyh0LG8sZS51cGRhdGVbaV0sbixhKX19ZnVuY3Rpb24gbGcodCxlLG4sbyl7Y29uc3QgaT0oZnVuY3Rpb24gYSh0LGUpe2xldCBuPXQuY2FzZXMuaW5kZXhPZihlKTtpZigtMT09PW4pc3dpdGNoKHQudHlwZSl7Y2FzZSAxOntjb25zdCBvPShmdW5jdGlvbiBpKHQsZSl7Y29uc3Qgbj1OZihlKShwYXJzZUludCh0LDEwKSksbz1IZltuXTtyZXR1cm4gdm9pZCAwIT09bz9vOiJvdGhlciJ9KShlLChmdW5jdGlvbiBvKCl7cmV0dXJuIGpmfSkoKSk7bj10LmNhc2VzLmluZGV4T2YobyksLTE9PT1uJiYib3RoZXIiIT09byYmKG49dC5jYXNlcy5pbmRleE9mKCJvdGhlciIpKTticmVha31jYXNlIDA6bj10LmNhc2VzLmluZGV4T2YoIm90aGVyIil9cmV0dXJuLTE9PT1uP251bGw6bn0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovKShlLG8pO2lmKCRmKGUsbikhPT1pJiYoY2codCxlLG4pLG5bZS5jdXJyZW50Q2FzZUxWaWV3SW5kZXhdPW51bGw9PT1pP251bGw6fmksbnVsbCE9PWkpKXtjb25zdCBvPW5bZS5hbmNob3JJZHhdO28mJihuZ0Rldk1vZGUmJmFvKG8pLGFnKHQsZS5jcmVhdGVbaV0sbixvKSl9fWZ1bmN0aW9uIGNnKHQsZSxuKXtsZXQgbz0kZihlLG4pO2lmKG51bGwhPT1vKXtjb25zdCBpPWUucmVtb3ZlW29dO2ZvcihsZXQgZT0wO2U8aS5sZW5ndGg7ZSsrKXtjb25zdCBvPWlbZV07aWYobz4wKXtjb25zdCB0PVdpKG8sbik7bnVsbCE9PXQmJlJjKG5bMTFdLHQpfWVsc2UgY2codCxKZih0LH5vKSxuKX19fWZ1bmN0aW9uIGRnKCl7Y29uc3QgdD1bXTtsZXQgZSxuLG89LTE7ZnVuY3Rpb24gaSh0LGUpe289MDtjb25zdCBpPSRmKHQsZSk7bnVsbCE9PWk/KG5nRGV2TW9kZSYmcW4oaSwwLHQuY2FzZXMubGVuZ3RoLTEpLG49dC5yZW1vdmVbaV0pOm49Tm99ZnVuY3Rpb24gYSgpe2lmKG88bi5sZW5ndGgpe2NvbnN0IHI9bltvKytdO2lmKG5nRGV2TW9kZSYmWW4ociwiRXhwZWN0aW5nIE9wQ29kZSBudW1iZXIiKSxyPjApe2NvbnN0IHQ9ZVtyXTtyZXR1cm4gbmdEZXZNb2RlJiZhbyh0KSx0fXt0LnB1c2gobyxuKTtjb25zdCBzPWVbMV0uZGF0YVt+cl07cmV0dXJuIG5nRGV2TW9kZSYmZ2kocyksaShzLGUpLGEoKX19cmV0dXJuIDA9PT10Lmxlbmd0aD9udWxsOihuPXQucG9wKCksbz10LnBvcCgpLGEoKSl9cmV0dXJuIGZ1bmN0aW9uIHIobixvKXtmb3IoZT1vO3QubGVuZ3RoOyl0LnBvcCgpO3JldHVybiBuZ0Rldk1vZGUmJm1pKG4sbyksaShuLnZhbHVlLG8pLGF9fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiBwZyh0KXtjb25zdCBlPXR8fChBcnJheS5pc0FycmF5KHRoaXMpP3RoaXM6W10pO2xldCBuPVtdO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKXtjb25zdCBvPWVbdCsrXSxpPShvJlZmLkFQUEVORF9FQUdFUkxZKT09PVZmLkFQUEVORF9FQUdFUkxZLGE9bz4+PlZmLlNISUZUO24ucHVzaChgbFZpZXdbJHthfV0gPSBkb2N1bWVudC4keyhvJlZmLkNPTU1FTlQpPT09VmYuQ09NTUVOVD8iY3JlYXRlQ29tbWVudCI6ImNyZWF0ZVRleHQifSgke0pTT04uc3RyaW5naWZ5KGVbdF0pfSk7YCksaSYmbi5wdXNoKGBwYXJlbnQuYXBwZW5kQ2hpbGQobFZpZXdbJHthfV0pO2ApfXJldHVybiBufWZ1bmN0aW9uIG1nKHQpe2NvbnN0IGU9bmV3IGdnKHR8fChBcnJheS5pc0FycmF5KHRoaXMpP3RoaXM6W10pKTtsZXQgbj1bXTtmdW5jdGlvbiBvKHQpe2NvbnN0IG49dD4+PjI7c3dpdGNoKDMmdCl7Y2FzZSAwOnJldHVybmAobFZpZXdbJHtufV0gYXMgVGV4dCkudGV4dENvbnRlbnQgPSAkJCRgO2Nhc2UgMTpjb25zdCB0PWUuY29uc3VtZVN0cmluZygpLG89ZS5jb25zdW1lRnVuY3Rpb24oKTtyZXR1cm5gKGxWaWV3WyR7bn1dIGFzIEVsZW1lbnQpLnNldEF0dHJpYnV0ZSgnJHt0fScsICR7bz9gKCR7b30pKCQkJClgOiIkJCQifSlgO2Nhc2UgMjpyZXR1cm5gaWN1U3dpdGNoQ2FzZSgke259LCAkJCQpYDtjYXNlIDM6cmV0dXJuYGljdVVwZGF0ZUNhc2UoJHtufSlgfXRocm93IG5ldyBFcnJvcigidW5leHBlY3RlZCBPcENvZGUiKX1mb3IoO2UuaGFzTW9yZSgpOyl7bGV0IHQ9ZS5jb25zdW1lTnVtYmVyKCksaT1lLmNvbnN1bWVOdW1iZXIoKTtjb25zdCBhPWUuaStpLHI9W107bGV0IHM9IiI7Zm9yKDtlLmk8YTspe2xldCB0PWUuY29uc3VtZU51bWJlck9yU3RyaW5nKCk7aWYoInN0cmluZyI9PXR5cGVvZiB0KXMrPXQ7ZWxzZSBpZih0PDApcys9IiR7bFZpZXdbaSIrdCsiXX0iO2Vsc2V7Y29uc3QgZT1vKHQpO3IucHVzaChlLnJlcGxhY2UoIiQkJCIsImAiK3MrImAiKSsiOyIpLHM9IiJ9fW4ucHVzaChgaWYgKG1hc2sgJiAwYiR7dC50b1N0cmluZygyKX0pIHsgJHtyLmpvaW4oIiAiKX0gfWApfXJldHVybiBufWZ1bmN0aW9uIHVnKHQpe2NvbnN0IGU9bmV3IGdnKHR8fChBcnJheS5pc0FycmF5KHRoaXMpP3RoaXM6W10pKTtsZXQgbj1bXTtmdW5jdGlvbiBvKHQpe2NvbnN0IG49dGcodCksbz1lZyh0KTtzd2l0Y2gobmcodCkpe2Nhc2UgMDpyZXR1cm5gKGxWaWV3WyR7bn1dIGFzIEVsZW1lbnQpLmFwcGVuZENoaWxkKGxWaWV3WyR7aX1dKWA7Y2FzZSAxOnJldHVybmAobFZpZXdbJHtvfV0gYXMgRWxlbWVudCkuc2V0QXR0cmlidXRlKCIke2UuY29uc3VtZVN0cmluZygpfSIsICIke2UuY29uc3VtZVN0cmluZygpfSIpYH10aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgT3BDb2RlOiAiK25nKHQpKX1sZXQgaT0tMTtmb3IoO2UuaGFzTW9yZSgpOyl7bGV0IHQ9ZS5jb25zdW1lTnVtYmVyU3RyaW5nT3JNYXJrZXIoKTtpZih0PT09QmYpe2NvbnN0IHQ9ZS5jb25zdW1lU3RyaW5nKCk7aT1lLmNvbnN1bWVOdW1iZXIoKSxuLnB1c2goYGxWaWV3WyR7aX1dID0gZG9jdW1lbnQuY3JlYXRlQ29tbWVudCgiJHt0fSIpYCl9ZWxzZSBpZih0PT09TGYpe2NvbnN0IHQ9ZS5jb25zdW1lU3RyaW5nKCk7aT1lLmNvbnN1bWVOdW1iZXIoKSxuLnB1c2goYGxWaWV3WyR7aX1dID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiJHt0fSIpYCl9ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIHQpaT1lLmNvbnN1bWVOdW1iZXIoKSxuLnB1c2goYGxWaWV3WyR7aX1dID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiR7dH0iKWApO2Vsc2V7aWYoIm51bWJlciIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCB2YWx1ZSIpO3tjb25zdCBlPW8odCk7ZSYmbi5wdXNoKGUpfX19cmV0dXJuIG59ZnVuY3Rpb24gZmcodCl7Y29uc3QgZT10fHwoQXJyYXkuaXNBcnJheSh0aGlzKT90aGlzOltdKTtsZXQgbj1bXTtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyl7Y29uc3Qgbz1lW3RdO24ucHVzaChvPjA/YHJlbW92ZShsVmlld1ske299XSlgOmByZW1vdmVOZXN0ZWRJQ1UoJHt+b30pYCl9cmV0dXJuIG59Y2xhc3MgZ2d7Y29uc3RydWN0b3IodCl7dGhpcy5pPTAsdGhpcy5jb2Rlcz10fWhhc01vcmUoKXtyZXR1cm4gdGhpcy5pPHRoaXMuY29kZXMubGVuZ3RofWNvbnN1bWVOdW1iZXIoKXtsZXQgdD10aGlzLmNvZGVzW3RoaXMuaSsrXTtyZXR1cm4gWW4odCwiZXhwZWN0aW5nIG51bWJlciBpbiBPcENvZGUiKSx0fWNvbnN1bWVTdHJpbmcoKXtsZXQgdD10aGlzLmNvZGVzW3RoaXMuaSsrXTtyZXR1cm4gWm4odCwiZXhwZWN0aW5nIHN0cmluZyBpbiBPcENvZGUiKSx0fWNvbnN1bWVGdW5jdGlvbigpe2xldCB0PXRoaXMuY29kZXNbdGhpcy5pKytdO2lmKG51bGw9PT10fHwiZnVuY3Rpb24iPT10eXBlb2YgdClyZXR1cm4gdDt0aHJvdyBuZXcgRXJyb3IoImV4cGVjdGluZyBmdW5jdGlvbiBpbiBPcENvZGUiKX1jb25zdW1lTnVtYmVyT3JTdHJpbmcoKXtsZXQgdD10aGlzLmNvZGVzW3RoaXMuaSsrXTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHR8fFluKHQsImV4cGVjdGluZyBudW1iZXIgb3Igc3RyaW5nIGluIE9wQ29kZSIpLHR9Y29uc3VtZU51bWJlclN0cmluZ09yTWFya2VyKCl7bGV0IHQ9dGhpcy5jb2Rlc1t0aGlzLmkrK107cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0fHwibnVtYmVyIj09dHlwZW9mIHR8fHQ9PUJmfHx0PT1MZnx8WW4odCwiZXhwZWN0aW5nIG51bWJlciwgc3RyaW5nLCBJQ1VfTUFSS0VSIG9yIEVMRU1FTlRfTUFSS0VSIGluIE9wQ29kZSIpLHR9fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jb25zdCBoZz0v77+9KFxkKyk6P1xkKu+/vS9naSxiZz0vKHtccyrvv71cZCs6P1xkKu+/vVxzKixccypcU3s2fVxzKixbXHNcU10qfSkvZ2kseWc9L++/vShcZCsp77+9LyxfZz0vXlxzKijvv71cZCs6P1xkKu+/vSlccyosXHMqKHNlbGVjdHxwbHVyYWwpXHMqLC8sQ2c9L++/vVwvP1wqKFxkKzpcZCsp77+9L2dpLE1nPS/vv70oXC8/WyMqXVxkKyk6P1xkKu+/vS9naSx2Zz0vXHVFNTAwL2c7ZnVuY3Rpb24geGcodCxlLG4sbyxpLGEscil7Y29uc3Qgcz1WZCh0LG8sMSxudWxsKTtsZXQgbD1zPDxWZi5TSElGVCxjPWNhKCk7ZT09PWMmJihjPW51bGwpLG51bGw9PT1jJiYobHw9VmYuQVBQRU5EX0VBR0VSTFkpLHImJihsfD1WZi5DT01NRU5ULChmdW5jdGlvbiBkKHQpe3ZvaWQgMD09PWVjJiYoZWM9dCgpKX0pKGRnKSksaS5wdXNoKGwsbnVsbD09PWE/IiI6YSk7Y29uc3QgcD1CZCh0LHMscj8zMjoxLG51bGw9PT1hP25nRGV2TW9kZT8ie3s/fX0iOiIiOmEsbnVsbCk7WWYobixwKTtjb25zdCBtPXAuaW5kZXg7cmV0dXJuIGRhKHAsITEpLG51bGwhPT1jJiZlIT09YyYmKGZ1bmN0aW9uIHUodCxlKXtuZ0Rldk1vZGUmJmZpKHQpO2xldCBuPXQuaW5zZXJ0QmVmb3JlSW5kZXg7bnVsbD09PW4/KGtjKFdmLEdmKSxuPXQuaW5zZXJ0QmVmb3JlSW5kZXg9W251bGwsZV0pOihYbihBcnJheS5pc0FycmF5KG4pLCEwLCJFeHBlY3RpbmcgYXJyYXkgaGVyZSIpLG4ucHVzaChlKSl9KShjLG0pLHB9ZnVuY3Rpb24gT2codCxlLG4sbyxpLGEscil7Y29uc3Qgcz1yLm1hdGNoKGhnKSxsPXhnKHQsZSxuLGEsbyxzP251bGw6ciwhMSk7cyYmUGcoaSxyLGwuaW5kZXgsbnVsbCwwLG51bGwpfWZ1bmN0aW9uIFBnKHQsZSxuLG8saSxhKXtuZ0Rldk1vZGUmJm5vKG4sb2ksIkluZGV4IG11c3QgYmUgaW4gYWJzb2x1dGUgTFZpZXcgb2Zmc2V0Iik7Y29uc3Qgcj10Lmxlbmd0aCxzPXIrMTt0LnB1c2gobnVsbCxudWxsKTtjb25zdCBsPXIrMjtuZ0Rldk1vZGUmJmxkKHQsbWcpO2NvbnN0IGM9ZS5zcGxpdChoZyk7bGV0IGQ9MDtmb3IobGV0IGU9MDtlPGMubGVuZ3RoO2UrKyl7Y29uc3Qgbj1jW2VdO2lmKDEmZSl7Y29uc3QgZT1pK3BhcnNlSW50KG4sMTApO3QucHVzaCgtMS1lKSxkfD1rZyhlKX1lbHNlIiIhPT1uJiZ0LnB1c2gobil9cmV0dXJuIHQucHVzaChuPDwyfChvPzE6MCkpLG8mJnQucHVzaChvLGEpLHRbcl09ZCx0W3NdPXQubGVuZ3RoLWwsZH1mdW5jdGlvbiB3Zyh0KXtsZXQgZT0wO2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKXtjb25zdCBvPXRbbl07Im51bWJlciI9PXR5cGVvZiBvJiZvPDAmJmUrK31yZXR1cm4gZX1mdW5jdGlvbiBrZyh0KXtyZXR1cm4gMTw8TWF0aC5taW4odCwzMSl9ZnVuY3Rpb24gU2codCl7bGV0IGUsbixvPSIiLGk9MCxhPSExO2Zvcig7bnVsbCE9PShlPUNnLmV4ZWModCkpOylhP2VbMF09PT1g77+9Lyoke25977+9YCYmKGk9ZS5pbmRleCxhPSExKToobys9dC5zdWJzdHJpbmcoaSxlLmluZGV4K2VbMF0ubGVuZ3RoKSxuPWVbMV0sYT0hMCk7cmV0dXJuIG5nRGV2TW9kZSYmWG4oYSwhMSxgVGFnIG1pc21hdGNoOiB1bmFibGUgdG8gZmluZCB0aGUgZW5kIG9mIHRoZSBzdWItdGVtcGxhdGUgaW4gdGhlIHRyYW5zbGF0aW9uICIke3R9ImApLG8rPXQuc3Vic3RyKGkpLG99ZnVuY3Rpb24gRGcodCxlLG4sbyxpLGEpe25nRGV2TW9kZSYmb28oaSwiSUNVIGV4cHJlc3Npb24gbXVzdCBiZSBkZWZpbmVkIik7bGV0IHI9MDtjb25zdCBzPXt0eXBlOmkudHlwZSxjdXJyZW50Q2FzZUxWaWV3SW5kZXg6VmQodCxlLDEsbnVsbCksYW5jaG9ySWR4OmEsY2FzZXM6W10sY3JlYXRlOltdLHJlbW92ZTpbXSx1cGRhdGU6W119OyEoZnVuY3Rpb24gbCh0LGUsbil7dC5wdXNoKGtnKGUubWFpbkJpbmRpbmcpLDIsLTEtZS5tYWluQmluZGluZyxuPDwyfDIpfSkobixpLGEpLChmdW5jdGlvbiBjKHQsZSxuKXtjb25zdCBvPXQuZGF0YVtlXTtuZ0Rldk1vZGUmJlhuKG51bGw9PT1vfHxvLmhhc093blByb3BlcnR5KCJ0Vmlld3MiKSwhMCwiV2UgZXhwZWN0IHRvIGdldCAnbnVsbCd8J1RJY3VDb250YWluZXInIiksbnVsbD09PW8/dC5kYXRhW2VdPW46KG5nRGV2TW9kZSYmWmEobywzMiksby52YWx1ZT1uKX0pKHQsYSxzKTtjb25zdCBkPWkudmFsdWVzO2ZvcihsZXQgYT0wO2E8ZC5sZW5ndGg7YSsrKXtjb25zdCBsPWRbYV0sYz1bXTtmb3IobGV0IHQ9MDt0PGwubGVuZ3RoO3QrKyl7Y29uc3QgZT1sW3RdO2lmKCJzdHJpbmciIT10eXBlb2YgZSl7Y29uc3Qgbj1jLnB1c2goZSktMTtsW3RdPWBceDNjIS0t77+9JHtufe+/vS0tXHgzZWB9fXI9UmcodCxzLGUsbixvLGkuY2FzZXNbYV0sbC5qb2luKCIiKSxjKXxyfXImJihmdW5jdGlvbiBwKHQsZSxuKXt0LnB1c2goZSwxLG48PDJ8Myl9KShuLHIsYSl9ZnVuY3Rpb24gRWcodCl7Y29uc3QgZT1bXSxuPVtdO2xldCBvPTEsaT0wO2NvbnN0IGE9QWcodD10LnJlcGxhY2UoX2csKGZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gbz0ic2VsZWN0Ij09PW4/MDoxLGk9cGFyc2VJbnQoZS5zdWJzdHIoMSksMTApLCIifSkpKTtmb3IobGV0IHQ9MDt0PGEubGVuZ3RoOyl7bGV0IGk9YVt0KytdLnRyaW0oKTsxPT09byYmKGk9aS5yZXBsYWNlKC9ccyooPzo9KT8oXHcrKVxzKi8sIiQxIikpLGkubGVuZ3RoJiZlLnB1c2goaSk7Y29uc3Qgcj1BZyhhW3QrK10pO2UubGVuZ3RoPm4ubGVuZ3RoJiZuLnB1c2gocil9cmV0dXJue3R5cGU6byxtYWluQmluZGluZzppLGNhc2VzOmUsdmFsdWVzOm59fWZ1bmN0aW9uIEFnKHQpe2lmKCF0KXJldHVybltdO2xldCBlPTA7Y29uc3Qgbj1bXSxvPVtdLGk9L1t7fV0vZztsZXQgYTtmb3IoaS5sYXN0SW5kZXg9MDthPWkuZXhlYyh0KTspe2NvbnN0IGk9YS5pbmRleDtpZigifSI9PWFbMF0pe2lmKG4ucG9wKCksMD09bi5sZW5ndGgpe2NvbnN0IG49dC5zdWJzdHJpbmcoZSxpKTtfZy50ZXN0KG4pP28ucHVzaChFZyhuKSk6by5wdXNoKG4pLGU9aSsxfX1lbHNle2lmKDA9PW4ubGVuZ3RoKXtjb25zdCBuPXQuc3Vic3RyaW5nKGUsaSk7by5wdXNoKG4pLGU9aSsxfW4ucHVzaCgieyIpfX1jb25zdCByPXQuc3Vic3RyaW5nKGUpO3JldHVybiBvLnB1c2gociksb31mdW5jdGlvbiBSZyh0LGUsbixvLGksYSxyLHMpe2NvbnN0IGw9W10sYz1bXSxkPVtdO25nRGV2TW9kZSYmKGxkKGwsdWcpLGxkKGMsZmcpLGxkKGQsbWcpKSxlLmNhc2VzLnB1c2goYSksZS5jcmVhdGUucHVzaChsKSxlLnJlbW92ZS5wdXNoKGMpLGUudXBkYXRlLnB1c2goZCk7Y29uc3QgcD1acyhMaSgpKS5nZXRJbmVydEJvZHlFbGVtZW50KHIpO25nRGV2TW9kZSYmb28ocCwiVW5hYmxlIHRvIGdlbmVyYXRlIGluZXJ0IGJvZHkgZWxlbWVudCIpO2NvbnN0IG09dmwocCl8fHA7cmV0dXJuIG0/VGcodCxlLG4sbyxsLGMsZCxtLGkscywwKTowfWZ1bmN0aW9uIFRnKHQsZSxuLG8saSxhLHIscyxsLGMsZCl7bGV0IHA9MCxtPXMuZmlyc3RDaGlsZDtmb3IoO207KXtjb25zdCBzPVZkKHQsbiwxLG51bGwpO3N3aXRjaChtLm5vZGVUeXBlKXtjYXNlIE5vZGUuRUxFTUVOVF9OT0RFOmNvbnN0IHU9bSxmPXUudGFnTmFtZS50b0xvd2VyQ2FzZSgpO2lmKGNsLmhhc093blByb3BlcnR5KGYpKXt6ZyhpLExmLGYsbCxzKSx0LmRhdGFbc109Zjtjb25zdCBnPXUuYXR0cmlidXRlcztmb3IobGV0IHQ9MDt0PGcubGVuZ3RoO3QrKyl7Y29uc3QgZT1nLml0ZW0odCksbj1lLm5hbWUudG9Mb3dlckNhc2UoKTtlLnZhbHVlLm1hdGNoKGhnKT9mbC5oYXNPd25Qcm9wZXJ0eShuKT9QZyhyLGUudmFsdWUscyxlLm5hbWUsMCxkbFtuXT8kczpwbFtuXT90bDpudWxsKTpuZ0Rldk1vZGUmJmNvbnNvbGUud2FybihgV0FSTklORzogaWdub3JpbmcgdW5zYWZlIGF0dHJpYnV0ZSB2YWx1ZSAke259IG9uIGVsZW1lbnQgJHtmfSAoc2VlIGh0dHBzOi8vZy5jby9uZy9zZWN1cml0eSN4c3MpYCk6SGcoaSxzLGUpfXA9VGcodCxlLG4sbyxpLGEscixtLHMsYyxkKzEpfHAsTmcoYSxzLGQpfWJyZWFrO2Nhc2UgTm9kZS5URVhUX05PREU6Y29uc3QgZz1tLnRleHRDb250ZW50fHwiIixoPWcubWF0Y2goaGcpO3pnKGksbnVsbCxoPyIiOmcsbCxzKSxOZyhhLHMsZCksaCYmKHA9UGcocixnLHMsbnVsbCwwLG51bGwpfHApO2JyZWFrO2Nhc2UgTm9kZS5DT01NRU5UX05PREU6Y29uc3QgYj15Zy5leGVjKG0udGV4dENvbnRlbnR8fCIiKTtpZihiKXtjb25zdCBlPXBhcnNlSW50KGJbMV0sMTApLHI9Y1tlXTt6ZyhpLEJmLG5nRGV2TW9kZT9gbmVzdGVkIElDVSAke2V9YDoiIixsLHMpLERnKHQsbixvLGwscixzKSxJZyhhLHMsZCl9fW09bS5uZXh0U2libGluZ31yZXR1cm4gcH1mdW5jdGlvbiBOZyh0LGUsbil7MD09PW4mJnQucHVzaChlKX1mdW5jdGlvbiBJZyh0LGUsbil7MD09PW4mJih0LnB1c2gofmUpLHQucHVzaChlKSl9ZnVuY3Rpb24gemcodCxlLG4sbyxpKXtudWxsIT09ZSYmdC5wdXNoKGUpLHQucHVzaChuLGksKGZ1bmN0aW9uIGEodCxlLG4pe3JldHVybiBuZ0Rldk1vZGUmJm5vKGUsMCwiTWlzc2luZyBwYXJlbnQgaW5kZXgiKSxuZ0Rldk1vZGUmJmVvKG4sMCwiTWlzc2luZyByZWYgaW5kZXgiKSx0fGU8PDE3fG48PDF9KSgwLG8saSkpfWZ1bmN0aW9uIEhnKHQsZSxuKXt0LnB1c2goZTw8MXwxLG4ubmFtZSxuLnZhbHVlKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY29uc3QgRmc9L1xbKO+/vS4rP++/vT8pXF0vLExnPS9cWyjvv70uKz/vv70/KVxdfCjvv71cLz9cKlxkKzpcZCvvv70pL2csQmc9Lyh7XHMqKShWQVJfKFBMVVJBTHxTRUxFQ1QpKF9cZCspPykoXHMqLCkvZyxWZz0veyhbQS1aMC05X10rKX0vZyxqZz0v77+9STE4Tl9FWFBfKElDVShfXGQrKT8p77+9L2csVWc9L1wvXCovLFdnPS9cZCtcOihcZCspLzsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmZ1bmN0aW9uIEdnKHQsZSxuPS0xKXtjb25zdCBvPWFhKCksaT1pYSgpLGE9b2krdDtuZ0Rldk1vZGUmJm9vKG8sInRWaWV3IHNob3VsZCBiZSBkZWZpbmVkIik7Y29uc3Qgcj0kaShvLmNvbnN0cyxlKSxzPWNhKCk7by5maXJzdENyZWF0ZVBhc3MmJihmdW5jdGlvbiBsKHQsZSxuLG8saSxhKXtjb25zdCByPWNhKCkscz1bXSxsPVtdLGM9W1tdXTtuZ0Rldk1vZGUmJihsZChzLHBnKSxsZChsLG1nKSk7Y29uc3QgZD0oZnVuY3Rpb24gbSh0KXtyZXR1cm4gdC5yZXBsYWNlKHZnLCIgIil9KShpPShmdW5jdGlvbiBwKHQsZSl7aWYoKGZ1bmN0aW9uIG4odCl7cmV0dXJuLTE9PT10fSkoZSkpcmV0dXJuIFNnKHQpO3tjb25zdCBuPXQuaW5kZXhPZihgOiR7ZX3vv71gKSsyK2UudG9TdHJpbmcoKS5sZW5ndGgsbz10LnNlYXJjaChuZXcgUmVnRXhwKGDvv71cXC9cXCpcXGQrOiR7ZX3vv71gKSk7cmV0dXJuIFNnKHQuc3Vic3RyaW5nKG4sbykpfX0pKGksYSkpLnNwbGl0KE1nKTtmb3IobGV0IGE9MDthPGQubGVuZ3RoO2ErKyl7bGV0IHA9ZFthXTtpZigwPT0oMSZhKSl7Y29uc3QgYT1BZyhwKTtmb3IobGV0IGQ9MDtkPGEubGVuZ3RoO2QrKyl7bGV0IHA9YVtkXTtpZigwPT0oMSZkKSl7Y29uc3QgZT1wO25nRGV2TW9kZSYmWm4oZSwiUGFyc2VkIElDVSBwYXJ0IHNob3VsZCBiZSBzdHJpbmciKSwiIiE9PWUmJk9nKHQscixjWzBdLHMsbCxuLGUpfWVsc2V7Y29uc3QgYT1wO2lmKCJvYmplY3QiIT10eXBlb2YgYSl0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBwYXJzZSBJQ1UgZXhwcmVzc2lvbiBpbiAiJHtpfSIgbWVzc2FnZS5gKTtjb25zdCBkPXhnKHQscixjWzBdLG4scyxuZ0Rldk1vZGU/YElDVSAke299OiR7YS5tYWluQmluZGluZ31gOiIiLCEwKS5pbmRleDtuZ0Rldk1vZGUmJm5vKGQsb2ksIkluZGV4IG11c3QgYmUgaW4gYWJzb2x1dGUgTFZpZXcgb2Zmc2V0IiksRGcodCxuLGwsZSxhLGQpfX19ZWxzZXtjb25zdCBlPTQ3PT09cC5jaGFyQ29kZUF0KDApLG49cC5jaGFyQ29kZUF0KGU/MTowKTtuZ0Rldk1vZGUmJnNvKG4sNDIsMzUpO2NvbnN0IG89b2krTnVtYmVyLnBhcnNlSW50KHAuc3Vic3RyaW5nKGU/MjoxKSk7aWYoZSljLnNoaWZ0KCksZGEoY2EoKSwhMSk7ZWxzZXtjb25zdCBlPVFmKHQsY1swXSxvKTtjLnVuc2hpZnQoW10pLGRhKGUsITApfX19dC5kYXRhW29dPXtjcmVhdGU6cyx1cGRhdGU6bH19KShvLG51bGw9PT1zPzA6cy5pbmRleCxpLGEscixuKTtjb25zdCBjPW8uZGF0YVthXSxkPXljKG8scz09PWlbNl0/bnVsbDpzLGkpOyEoZnVuY3Rpb24gcCh0LGUsbixvKXtjb25zdCBpPXRbMTFdO2ZvcihsZXQgYT0wO2E8ZS5sZW5ndGg7YSsrKXtjb25zdCByPWVbYSsrXSxzPWVbYV0sbD0ociZWZi5DT01NRU5UKT09PVZmLkNPTU1FTlQsYz0ociZWZi5BUFBFTkRfRUFHRVJMWSk9PT1WZi5BUFBFTkRfRUFHRVJMWSxkPXI+Pj5WZi5TSElGVDtsZXQgcD10W2RdO251bGw9PT1wJiYocD10W2RdPWw/aS5jcmVhdGVDb21tZW50KHMpOmNjKGkscykpLGMmJm51bGwhPT1uJiZfYyhpLG4scCxvLCExKX19KShpLGMuY3JlYXRlLGQscyYmOCZzLnR5cGU/aVtzLmluZGV4XTpudWxsKSxDYSghMCl9ZnVuY3Rpb24gWWcoKXtDYSghMSl9ZnVuY3Rpb24gcWcodCxlLG4pe0dnKHQsZSxuKSxZZygpfWZ1bmN0aW9uIFpnKHQpe3JldHVybihmdW5jdGlvbiBlKHQpe3QmJihvZ3w9MTw8TWF0aC5taW4oaWcsMzEpKSxpZysrfSkoRW0oaWEoKSx5YSgpLHQpKSxaZ31mdW5jdGlvbiBYZyh0KXshKGZ1bmN0aW9uIGUodCxuLG8pe2lmKGlnPjApe25nRGV2TW9kZSYmb28odCwidFZpZXcgc2hvdWxkIGJlIGRlZmluZWQiKTtjb25zdCBlPXQuZGF0YVtvXTtyZyh0LG4sQXJyYXkuaXNBcnJheShlKT9lOmUudXBkYXRlLGhhKCktaWctMSxvZyl9b2c9MCxpZz0wfSkoYWEoKSxpYSgpLHQrb2kpfWZ1bmN0aW9uIEtnKHQsZT17fSl7cmV0dXJuKGZ1bmN0aW9uIG4odCxlPXt9KXtsZXQgbj10O2lmKEZnLnRlc3QodCkpe2NvbnN0IHQ9e30sZT1bMF07bj1uLnJlcGxhY2UoTGcsKChuLG8saSk9Pntjb25zdCBhPW98fGkscj10W2FdfHxbXTtpZihyLmxlbmd0aHx8KGEuc3BsaXQoInwiKS5mb3JFYWNoKCh0PT57Y29uc3QgZT10Lm1hdGNoKFdnKSxuPWU/cGFyc2VJbnQoZVsxXSwxMCk6MCxvPVVnLnRlc3QodCk7ci5wdXNoKFtuLG8sdF0pfSkpLHRbYV09ciksIXIubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgaTE4biBwb3N0cHJvY2VzczogdW5tYXRjaGVkIHBsYWNlaG9sZGVyIC0gJHthfWApO2NvbnN0IHM9ZVtlLmxlbmd0aC0xXTtsZXQgbD0wO2ZvcihsZXQgdD0wO3Q8ci5sZW5ndGg7dCsrKWlmKHJbdF1bMF09PT1zKXtsPXQ7YnJlYWt9Y29uc3RbYyxkLHBdPXJbbF07cmV0dXJuIGQ/ZS5wb3AoKTpzIT09YyYmZS5wdXNoKGMpLHIuc3BsaWNlKGwsMSkscH0pKX1yZXR1cm4gT2JqZWN0LmtleXMoZSkubGVuZ3RoPyhuPW4ucmVwbGFjZShCZywoKHQsbixvLGksYSxyKT0+ZS5oYXNPd25Qcm9wZXJ0eShvKT9gJHtufSR7ZVtvXX0ke3J9YDp0KSksbj1uLnJlcGxhY2UoVmcsKCh0LG4pPT5lLmhhc093blByb3BlcnR5KG4pP2Vbbl06dCkpLG49bi5yZXBsYWNlKGpnLCgodCxuKT0+e2lmKGUuaGFzT3duUHJvcGVydHkobikpe2NvbnN0IG89ZVtuXTtpZighby5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKGBpMThuIHBvc3Rwcm9jZXNzOiB1bm1hdGNoZWQgSUNVIC0gJHt0fSB3aXRoIGtleTogJHtufWApO3JldHVybiBvLnNoaWZ0KCl9cmV0dXJuIHR9KSksbik6bn0pKHQsZSl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiBKZyh0LGUsbixvLGkpe2lmKHQ9em4odCksQXJyYXkuaXNBcnJheSh0KSlmb3IobGV0IGE9MDthPHQubGVuZ3RoO2ErKylKZyh0W2FdLGUsbixvLGkpO2Vsc2V7Y29uc3QgYT1hYSgpLHI9aWEoKTtsZXQgcz1YcCh0KT90OnpuKHQucHJvdmlkZSksbD1ZcCh0KTtjb25zdCBjPXNhKCksZD0xMDQ4NTc1JmMucHJvdmlkZXJJbmRleGVzLHA9Yy5kaXJlY3RpdmVTdGFydCxtPWMucHJvdmlkZXJJbmRleGVzPj4yMDtpZihYcCh0KXx8IXQubXVsdGkpe2NvbnN0IG89bmV3IFlhKGwsaSxNdSksdT10aChzLGUsaT9kOmQrbSxwKTstMT09PXU/KGRyKHJyKGMsciksYSxzKSxRZyhhLHQsZS5sZW5ndGgpLGUucHVzaChzKSxjLmRpcmVjdGl2ZVN0YXJ0KyssYy5kaXJlY3RpdmVFbmQrKyxpJiYoYy5wcm92aWRlckluZGV4ZXMrPTEwNDg1NzYpLG4ucHVzaChvKSxyLnB1c2gobykpOihuW3VdPW8sclt1XT1vKX1lbHNle2NvbnN0IHU9dGgocyxlLGQrbSxwKSxmPXRoKHMsZSxkLGQrbSksZz11Pj0wJiZuW3VdLGg9Zj49MCYmbltmXTtpZihpJiYhaHx8IWkmJiFnKXtkcihycihjLHIpLGEscyk7Y29uc3QgZD0oZnVuY3Rpb24gYSh0LGUsbixvLGkpe2NvbnN0IGE9bmV3IFlhKHQsbixNdSk7cmV0dXJuIGEubXVsdGk9W10sYS5pbmRleD1lLGEuY29tcG9uZW50UHJvdmlkZXJzPTAsJGcoYSxpLG8mJiFuKSxhfSkoaT9uaDplaCxuLmxlbmd0aCxpLG8sbCk7IWkmJmgmJihuW2ZdLnByb3ZpZGVyRmFjdG9yeT1kKSxRZyhhLHQsZS5sZW5ndGgsMCksZS5wdXNoKHMpLGMuZGlyZWN0aXZlU3RhcnQrKyxjLmRpcmVjdGl2ZUVuZCsrLGkmJihjLnByb3ZpZGVySW5kZXhlcys9MTA0ODU3Niksbi5wdXNoKGQpLHIucHVzaChkKX1lbHNlIFFnKGEsdCx1Pi0xP3U6ZiwkZyhuW2k/Zjp1XSxsLCFpJiZvKSk7IWkmJm8mJmgmJm5bZl0uY29tcG9uZW50UHJvdmlkZXJzKyt9fX1mdW5jdGlvbiBRZyh0LGUsbixvKXtjb25zdCBpPVhwKGUpO2lmKGl8fChmdW5jdGlvbiBhKHQpe3JldHVybiEhdC51c2VDbGFzc30pKGUpKXtjb25zdCBhPShlLnVzZUNsYXNzfHxlKS5wcm90b3R5cGUubmdPbkRlc3Ryb3k7aWYoYSl7Y29uc3Qgcj10LmRlc3Ryb3lIb29rc3x8KHQuZGVzdHJveUhvb2tzPVtdKTtpZighaSYmZS5tdWx0aSl7bmdEZXZNb2RlJiZvbyhvLCJpbmRleEluRmFjdG9yeSB3aGVuIHJlZ2lzdGVyaW5nIG11bHRpIGZhY3RvcnkgZGVzdHJveSBob29rIik7Y29uc3QgdD1yLmluZGV4T2Yobik7LTE9PT10P3IucHVzaChuLFtvLGFdKTpyW3QrMV0ucHVzaChvLGEpfWVsc2Ugci5wdXNoKG4sYSl9fX1mdW5jdGlvbiAkZyh0LGUsbil7cmV0dXJuIG4mJnQuY29tcG9uZW50UHJvdmlkZXJzKyssdC5tdWx0aS5wdXNoKGUpLTF9ZnVuY3Rpb24gdGgodCxlLG4sbyl7Zm9yKGxldCBpPW47aTxvO2krKylpZihlW2ldPT09dClyZXR1cm4gaTtyZXR1cm4tMX1mdW5jdGlvbiBlaCh0LGUsbixvKXtyZXR1cm4gb2godGhpcy5tdWx0aSxbXSl9ZnVuY3Rpb24gbmgodCxlLG4sbyl7Y29uc3QgaT10aGlzLm11bHRpO2xldCBhO2lmKHRoaXMucHJvdmlkZXJGYWN0b3J5KXtjb25zdCB0PXRoaXMucHJvdmlkZXJGYWN0b3J5LmNvbXBvbmVudFByb3ZpZGVycyxlPXlyKG4sblsxXSx0aGlzLnByb3ZpZGVyRmFjdG9yeS5pbmRleCxvKTthPWUuc2xpY2UoMCx0KSxvaChpLGEpO2ZvcihsZXQgbj10O248ZS5sZW5ndGg7bisrKWEucHVzaChlW25dKX1lbHNlIGE9W10sb2goaSxhKTtyZXR1cm4gYX1mdW5jdGlvbiBvaCh0LGUpe2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKWUucHVzaCgoMCx0W25dKSgpKTtyZXR1cm4gZX1mdW5jdGlvbiBpaCh0LGU9W10pe3JldHVybiBuPT57bi5wcm92aWRlcnNSZXNvbHZlcj0obixvKT0+KGZ1bmN0aW9uIGkodCxlLG4pe2NvbnN0IG89YWEoKTtpZihvLmZpcnN0Q3JlYXRlUGFzcyl7Y29uc3QgaT1waSh0KTtKZyhuLG8uZGF0YSxvLmJsdWVwcmludCxpLCEwKSxKZyhlLG8uZGF0YSxvLmJsdWVwcmludCxpLCExKX19KShuLG8/byh0KTp0LGUpfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY2xhc3MgYWh7fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jbGFzcyByaHt9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpmdW5jdGlvbiBzaCguLi50KXt9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIGxoKHQsZSl7cmV0dXJuIG5ldyBjaChHaSh0LGUpKX1yaC5OVUxMPW5ldyBjbGFzc3tyZXNvbHZlQ29tcG9uZW50RmFjdG9yeSh0KXt0aHJvdyhmdW5jdGlvbiBlKHQpe2NvbnN0IGU9RXJyb3IoYE5vIGNvbXBvbmVudCBmYWN0b3J5IGZvdW5kIGZvciAke1JuKHQpfS4gRGlkIHlvdSBhZGQgaXQgdG8gQE5nTW9kdWxlLmVudHJ5Q29tcG9uZW50cz9gKTtyZXR1cm4gZS5uZ0NvbXBvbmVudD10LGV9KSh0KX19O2NsYXNzIGNoe2NvbnN0cnVjdG9yKHQpe3RoaXMubmF0aXZlRWxlbWVudD10fX1mdW5jdGlvbiBkaCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGNoP3QubmF0aXZlRWxlbWVudDp0fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jaC5fX05HX0VMRU1FTlRfSURfXz1mdW5jdGlvbiBwaCgpe3JldHVybiBsaChzYSgpLGlhKCkpfSxuZXcgTnIoIlJlbmRlcmVyMkludGVyY2VwdG9yIik7Y2xhc3MgbWh7fWNsYXNzIHVoe311aC5fX05HX0VMRU1FTlRfSURfXz0oKT0+ZmgoKTtjb25zdCBmaD1mdW5jdGlvbiBnaCgpe2NvbnN0IHQ9aWEoKSxlPVppKHNhKCkuaW5kZXgsdCk7cmV0dXJuKGZ1bmN0aW9uIG4odCl7Y29uc3QgZT10WzExXTtpZihuZ0Rldk1vZGUmJiFWaShlKSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBpbmplY3QgUmVuZGVyZXIyIHdoZW4gdGhlIGFwcGxpY2F0aW9uIHVzZXMgUmVuZGVyZXIzISIpO3JldHVybiBlfSkocmkoZSk/ZTp0KX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovO2NsYXNzIGhoe31oaC7JtXByb3Y9bG8oe3Rva2VuOmhoLHByb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9Pm51bGx9KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIGJoe2NvbnN0cnVjdG9yKHQpe3RoaXMuZnVsbD10LHRoaXMubWFqb3I9dC5zcGxpdCgiLiIpWzBdLHRoaXMubWlub3I9dC5zcGxpdCgiLiIpWzFdLHRoaXMucGF0Y2g9dC5zcGxpdCgiLiIpLnNsaWNlKDIpLmpvaW4oIi4iKX19Y29uc3QgeWg9bmV3IGJoKCIxMS4yLjE0Iik7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NsYXNzIF9oe2NvbnN0cnVjdG9yKCl7fXN1cHBvcnRzKHQpe3JldHVybiB3bSh0KX1jcmVhdGUodCl7cmV0dXJuIG5ldyBNaCh0KX19Y29uc3QgQ2g9KHQsZSk9PmU7Y2xhc3MgTWh7Y29uc3RydWN0b3IodCl7dGhpcy5sZW5ndGg9MCx0aGlzLl9saW5rZWRSZWNvcmRzPW51bGwsdGhpcy5fdW5saW5rZWRSZWNvcmRzPW51bGwsdGhpcy5fcHJldmlvdXNJdEhlYWQ9bnVsbCx0aGlzLl9pdEhlYWQ9bnVsbCx0aGlzLl9pdFRhaWw9bnVsbCx0aGlzLl9hZGRpdGlvbnNIZWFkPW51bGwsdGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLHRoaXMuX21vdmVzSGVhZD1udWxsLHRoaXMuX21vdmVzVGFpbD1udWxsLHRoaXMuX3JlbW92YWxzSGVhZD1udWxsLHRoaXMuX3JlbW92YWxzVGFpbD1udWxsLHRoaXMuX2lkZW50aXR5Q2hhbmdlc0hlYWQ9bnVsbCx0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsPW51bGwsdGhpcy5fdHJhY2tCeUZuPXR8fENofWZvckVhY2hJdGVtKHQpe2xldCBlO2ZvcihlPXRoaXMuX2l0SGVhZDtudWxsIT09ZTtlPWUuX25leHQpdChlKX1mb3JFYWNoT3BlcmF0aW9uKHQpe2xldCBlPXRoaXMuX2l0SGVhZCxuPXRoaXMuX3JlbW92YWxzSGVhZCxvPTAsaT1udWxsO2Zvcig7ZXx8bjspe2NvbnN0IGE9IW58fGUmJmUuY3VycmVudEluZGV4PFBoKG4sbyxpKT9lOm4scj1QaChhLG8saSkscz1hLmN1cnJlbnRJbmRleDtpZihhPT09bilvLS0sbj1uLl9uZXh0UmVtb3ZlZDtlbHNlIGlmKGU9ZS5fbmV4dCxudWxsPT1hLnByZXZpb3VzSW5kZXgpbysrO2Vsc2V7aXx8KGk9W10pO2NvbnN0IHQ9ci1vLGU9cy1vO2lmKHQhPWUpe2ZvcihsZXQgbj0wO248dDtuKyspe2NvbnN0IG89bjxpLmxlbmd0aD9pW25dOmlbbl09MCxhPW8rbjtlPD1hJiZhPHQmJihpW25dPW8rMSl9aVthLnByZXZpb3VzSW5kZXhdPWUtdH19ciE9PXMmJnQoYSxyLHMpfX1mb3JFYWNoUHJldmlvdXNJdGVtKHQpe2xldCBlO2ZvcihlPXRoaXMuX3ByZXZpb3VzSXRIZWFkO251bGwhPT1lO2U9ZS5fbmV4dFByZXZpb3VzKXQoZSl9Zm9yRWFjaEFkZGVkSXRlbSh0KXtsZXQgZTtmb3IoZT10aGlzLl9hZGRpdGlvbnNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dEFkZGVkKXQoZSl9Zm9yRWFjaE1vdmVkSXRlbSh0KXtsZXQgZTtmb3IoZT10aGlzLl9tb3Zlc0hlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0TW92ZWQpdChlKX1mb3JFYWNoUmVtb3ZlZEl0ZW0odCl7bGV0IGU7Zm9yKGU9dGhpcy5fcmVtb3ZhbHNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dFJlbW92ZWQpdChlKX1mb3JFYWNoSWRlbnRpdHlDaGFuZ2UodCl7bGV0IGU7Zm9yKGU9dGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZDtudWxsIT09ZTtlPWUuX25leHRJZGVudGl0eUNoYW5nZSl0KGUpfWRpZmYodCl7aWYobnVsbD09dCYmKHQ9W10pLCF3bSh0KSl0aHJvdyBuZXcgRXJyb3IoYEVycm9yIHRyeWluZyB0byBkaWZmICcke1JuKHQpfScuIE9ubHkgYXJyYXlzIGFuZCBpdGVyYWJsZXMgYXJlIGFsbG93ZWRgKTtyZXR1cm4gdGhpcy5jaGVjayh0KT90aGlzOm51bGx9b25EZXN0cm95KCl7fWNoZWNrKHQpe3RoaXMuX3Jlc2V0KCk7bGV0IGUsbixvLGk9dGhpcy5faXRIZWFkLGE9ITE7aWYoQXJyYXkuaXNBcnJheSh0KSl7dGhpcy5sZW5ndGg9dC5sZW5ndGg7Zm9yKGxldCBlPTA7ZTx0aGlzLmxlbmd0aDtlKyspbj10W2VdLG89dGhpcy5fdHJhY2tCeUZuKGUsbiksbnVsbCE9PWkmJk9iamVjdC5pcyhpLnRyYWNrQnlJZCxvKT8oYSYmKGk9dGhpcy5fdmVyaWZ5UmVpbnNlcnRpb24oaSxuLG8sZSkpLE9iamVjdC5pcyhpLml0ZW0sbil8fHRoaXMuX2FkZElkZW50aXR5Q2hhbmdlKGksbikpOihpPXRoaXMuX21pc21hdGNoKGksbixvLGUpLGE9ITApLGk9aS5fbmV4dH1lbHNlIGU9MCwoZnVuY3Rpb24gcih0LGUpe2lmKEFycmF5LmlzQXJyYXkodCkpZm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspZSh0W25dKTtlbHNle2NvbnN0IG49dFt4bSgpXSgpO2xldCBvO2Zvcig7IShvPW4ubmV4dCgpKS5kb25lOyllKG8udmFsdWUpfX0pKHQsKHQ9PntvPXRoaXMuX3RyYWNrQnlGbihlLHQpLG51bGwhPT1pJiZPYmplY3QuaXMoaS50cmFja0J5SWQsbyk/KGEmJihpPXRoaXMuX3ZlcmlmeVJlaW5zZXJ0aW9uKGksdCxvLGUpKSxPYmplY3QuaXMoaS5pdGVtLHQpfHx0aGlzLl9hZGRJZGVudGl0eUNoYW5nZShpLHQpKTooaT10aGlzLl9taXNtYXRjaChpLHQsbyxlKSxhPSEwKSxpPWkuX25leHQsZSsrfSkpLHRoaXMubGVuZ3RoPWU7cmV0dXJuIHRoaXMuX3RydW5jYXRlKGkpLHRoaXMuY29sbGVjdGlvbj10LHRoaXMuaXNEaXJ0eX1nZXQgaXNEaXJ0eSgpe3JldHVybiBudWxsIT09dGhpcy5fYWRkaXRpb25zSGVhZHx8bnVsbCE9PXRoaXMuX21vdmVzSGVhZHx8bnVsbCE9PXRoaXMuX3JlbW92YWxzSGVhZHx8bnVsbCE9PXRoaXMuX2lkZW50aXR5Q2hhbmdlc0hlYWR9X3Jlc2V0KCl7aWYodGhpcy5pc0RpcnR5KXtsZXQgdDtmb3IodD10aGlzLl9wcmV2aW91c0l0SGVhZD10aGlzLl9pdEhlYWQ7bnVsbCE9PXQ7dD10Ll9uZXh0KXQuX25leHRQcmV2aW91cz10Ll9uZXh0O2Zvcih0PXRoaXMuX2FkZGl0aW9uc0hlYWQ7bnVsbCE9PXQ7dD10Ll9uZXh0QWRkZWQpdC5wcmV2aW91c0luZGV4PXQuY3VycmVudEluZGV4O2Zvcih0aGlzLl9hZGRpdGlvbnNIZWFkPXRoaXMuX2FkZGl0aW9uc1RhaWw9bnVsbCx0PXRoaXMuX21vdmVzSGVhZDtudWxsIT09dDt0PXQuX25leHRNb3ZlZCl0LnByZXZpb3VzSW5kZXg9dC5jdXJyZW50SW5kZXg7dGhpcy5fbW92ZXNIZWFkPXRoaXMuX21vdmVzVGFpbD1udWxsLHRoaXMuX3JlbW92YWxzSGVhZD10aGlzLl9yZW1vdmFsc1RhaWw9bnVsbCx0aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkPXRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWw9bnVsbH19X21pc21hdGNoKHQsZSxuLG8pe2xldCBpO3JldHVybiBudWxsPT09dD9pPXRoaXMuX2l0VGFpbDooaT10Ll9wcmV2LHRoaXMuX3JlbW92ZSh0KSksbnVsbCE9PSh0PW51bGw9PT10aGlzLl91bmxpbmtlZFJlY29yZHM/bnVsbDp0aGlzLl91bmxpbmtlZFJlY29yZHMuZ2V0KG4sbnVsbCkpPyhPYmplY3QuaXModC5pdGVtLGUpfHx0aGlzLl9hZGRJZGVudGl0eUNoYW5nZSh0LGUpLHRoaXMuX3JlaW5zZXJ0QWZ0ZXIodCxpLG8pKTpudWxsIT09KHQ9bnVsbD09PXRoaXMuX2xpbmtlZFJlY29yZHM/bnVsbDp0aGlzLl9saW5rZWRSZWNvcmRzLmdldChuLG8pKT8oT2JqZWN0LmlzKHQuaXRlbSxlKXx8dGhpcy5fYWRkSWRlbnRpdHlDaGFuZ2UodCxlKSx0aGlzLl9tb3ZlQWZ0ZXIodCxpLG8pKTp0PXRoaXMuX2FkZEFmdGVyKG5ldyB2aChlLG4pLGksbyksdH1fdmVyaWZ5UmVpbnNlcnRpb24odCxlLG4sbyl7bGV0IGk9bnVsbD09PXRoaXMuX3VubGlua2VkUmVjb3Jkcz9udWxsOnRoaXMuX3VubGlua2VkUmVjb3Jkcy5nZXQobixudWxsKTtyZXR1cm4gbnVsbCE9PWk/dD10aGlzLl9yZWluc2VydEFmdGVyKGksdC5fcHJldixvKTp0LmN1cnJlbnRJbmRleCE9byYmKHQuY3VycmVudEluZGV4PW8sdGhpcy5fYWRkVG9Nb3Zlcyh0LG8pKSx0fV90cnVuY2F0ZSh0KXtmb3IoO251bGwhPT10Oyl7Y29uc3QgZT10Ll9uZXh0O3RoaXMuX2FkZFRvUmVtb3ZhbHModGhpcy5fdW5saW5rKHQpKSx0PWV9bnVsbCE9PXRoaXMuX3VubGlua2VkUmVjb3JkcyYmdGhpcy5fdW5saW5rZWRSZWNvcmRzLmNsZWFyKCksbnVsbCE9PXRoaXMuX2FkZGl0aW9uc1RhaWwmJih0aGlzLl9hZGRpdGlvbnNUYWlsLl9uZXh0QWRkZWQ9bnVsbCksbnVsbCE9PXRoaXMuX21vdmVzVGFpbCYmKHRoaXMuX21vdmVzVGFpbC5fbmV4dE1vdmVkPW51bGwpLG51bGwhPT10aGlzLl9pdFRhaWwmJih0aGlzLl9pdFRhaWwuX25leHQ9bnVsbCksbnVsbCE9PXRoaXMuX3JlbW92YWxzVGFpbCYmKHRoaXMuX3JlbW92YWxzVGFpbC5fbmV4dFJlbW92ZWQ9bnVsbCksbnVsbCE9PXRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWwmJih0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsLl9uZXh0SWRlbnRpdHlDaGFuZ2U9bnVsbCl9X3JlaW5zZXJ0QWZ0ZXIodCxlLG4pe251bGwhPT10aGlzLl91bmxpbmtlZFJlY29yZHMmJnRoaXMuX3VubGlua2VkUmVjb3Jkcy5yZW1vdmUodCk7Y29uc3Qgbz10Ll9wcmV2UmVtb3ZlZCxpPXQuX25leHRSZW1vdmVkO3JldHVybiBudWxsPT09bz90aGlzLl9yZW1vdmFsc0hlYWQ9aTpvLl9uZXh0UmVtb3ZlZD1pLG51bGw9PT1pP3RoaXMuX3JlbW92YWxzVGFpbD1vOmkuX3ByZXZSZW1vdmVkPW8sdGhpcy5faW5zZXJ0QWZ0ZXIodCxlLG4pLHRoaXMuX2FkZFRvTW92ZXModCxuKSx0fV9tb3ZlQWZ0ZXIodCxlLG4pe3JldHVybiB0aGlzLl91bmxpbmsodCksdGhpcy5faW5zZXJ0QWZ0ZXIodCxlLG4pLHRoaXMuX2FkZFRvTW92ZXModCxuKSx0fV9hZGRBZnRlcih0LGUsbil7cmV0dXJuIHRoaXMuX2luc2VydEFmdGVyKHQsZSxuKSx0aGlzLl9hZGRpdGlvbnNUYWlsPW51bGw9PT10aGlzLl9hZGRpdGlvbnNUYWlsP3RoaXMuX2FkZGl0aW9uc0hlYWQ9dDp0aGlzLl9hZGRpdGlvbnNUYWlsLl9uZXh0QWRkZWQ9dCx0fV9pbnNlcnRBZnRlcih0LGUsbil7Y29uc3Qgbz1udWxsPT09ZT90aGlzLl9pdEhlYWQ6ZS5fbmV4dDtyZXR1cm4gdC5fbmV4dD1vLHQuX3ByZXY9ZSxudWxsPT09bz90aGlzLl9pdFRhaWw9dDpvLl9wcmV2PXQsbnVsbD09PWU/dGhpcy5faXRIZWFkPXQ6ZS5fbmV4dD10LG51bGw9PT10aGlzLl9saW5rZWRSZWNvcmRzJiYodGhpcy5fbGlua2VkUmVjb3Jkcz1uZXcgT2gpLHRoaXMuX2xpbmtlZFJlY29yZHMucHV0KHQpLHQuY3VycmVudEluZGV4PW4sdH1fcmVtb3ZlKHQpe3JldHVybiB0aGlzLl9hZGRUb1JlbW92YWxzKHRoaXMuX3VubGluayh0KSl9X3VubGluayh0KXtudWxsIT09dGhpcy5fbGlua2VkUmVjb3JkcyYmdGhpcy5fbGlua2VkUmVjb3Jkcy5yZW1vdmUodCk7Y29uc3QgZT10Ll9wcmV2LG49dC5fbmV4dDtyZXR1cm4gbnVsbD09PWU/dGhpcy5faXRIZWFkPW46ZS5fbmV4dD1uLG51bGw9PT1uP3RoaXMuX2l0VGFpbD1lOm4uX3ByZXY9ZSx0fV9hZGRUb01vdmVzKHQsZSl7cmV0dXJuIHQucHJldmlvdXNJbmRleD09PWV8fCh0aGlzLl9tb3Zlc1RhaWw9bnVsbD09PXRoaXMuX21vdmVzVGFpbD90aGlzLl9tb3Zlc0hlYWQ9dDp0aGlzLl9tb3Zlc1RhaWwuX25leHRNb3ZlZD10KSx0fV9hZGRUb1JlbW92YWxzKHQpe3JldHVybiBudWxsPT09dGhpcy5fdW5saW5rZWRSZWNvcmRzJiYodGhpcy5fdW5saW5rZWRSZWNvcmRzPW5ldyBPaCksdGhpcy5fdW5saW5rZWRSZWNvcmRzLnB1dCh0KSx0LmN1cnJlbnRJbmRleD1udWxsLHQuX25leHRSZW1vdmVkPW51bGwsbnVsbD09PXRoaXMuX3JlbW92YWxzVGFpbD8odGhpcy5fcmVtb3ZhbHNUYWlsPXRoaXMuX3JlbW92YWxzSGVhZD10LHQuX3ByZXZSZW1vdmVkPW51bGwpOih0Ll9wcmV2UmVtb3ZlZD10aGlzLl9yZW1vdmFsc1RhaWwsdGhpcy5fcmVtb3ZhbHNUYWlsPXRoaXMuX3JlbW92YWxzVGFpbC5fbmV4dFJlbW92ZWQ9dCksdH1fYWRkSWRlbnRpdHlDaGFuZ2UodCxlKXtyZXR1cm4gdC5pdGVtPWUsdGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbD1udWxsPT09dGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbD90aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkPXQ6dGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbC5fbmV4dElkZW50aXR5Q2hhbmdlPXQsdH19Y2xhc3Mgdmh7Y29uc3RydWN0b3IodCxlKXt0aGlzLml0ZW09dCx0aGlzLnRyYWNrQnlJZD1lLHRoaXMuY3VycmVudEluZGV4PW51bGwsdGhpcy5wcmV2aW91c0luZGV4PW51bGwsdGhpcy5fbmV4dFByZXZpb3VzPW51bGwsdGhpcy5fcHJldj1udWxsLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wcmV2RHVwPW51bGwsdGhpcy5fbmV4dER1cD1udWxsLHRoaXMuX3ByZXZSZW1vdmVkPW51bGwsdGhpcy5fbmV4dFJlbW92ZWQ9bnVsbCx0aGlzLl9uZXh0QWRkZWQ9bnVsbCx0aGlzLl9uZXh0TW92ZWQ9bnVsbCx0aGlzLl9uZXh0SWRlbnRpdHlDaGFuZ2U9bnVsbH19Y2xhc3MgeGh7Y29uc3RydWN0b3IoKXt0aGlzLl9oZWFkPW51bGwsdGhpcy5fdGFpbD1udWxsfWFkZCh0KXtudWxsPT09dGhpcy5faGVhZD8odGhpcy5faGVhZD10aGlzLl90YWlsPXQsdC5fbmV4dER1cD1udWxsLHQuX3ByZXZEdXA9bnVsbCk6KHRoaXMuX3RhaWwuX25leHREdXA9dCx0Ll9wcmV2RHVwPXRoaXMuX3RhaWwsdC5fbmV4dER1cD1udWxsLHRoaXMuX3RhaWw9dCl9Z2V0KHQsZSl7bGV0IG47Zm9yKG49dGhpcy5faGVhZDtudWxsIT09bjtuPW4uX25leHREdXApaWYoKG51bGw9PT1lfHxlPD1uLmN1cnJlbnRJbmRleCkmJk9iamVjdC5pcyhuLnRyYWNrQnlJZCx0KSlyZXR1cm4gbjtyZXR1cm4gbnVsbH1yZW1vdmUodCl7Y29uc3QgZT10Ll9wcmV2RHVwLG49dC5fbmV4dER1cDtyZXR1cm4gbnVsbD09PWU/dGhpcy5faGVhZD1uOmUuX25leHREdXA9bixudWxsPT09bj90aGlzLl90YWlsPWU6bi5fcHJldkR1cD1lLG51bGw9PT10aGlzLl9oZWFkfX1jbGFzcyBPaHtjb25zdHJ1Y3Rvcigpe3RoaXMubWFwPW5ldyBNYXB9cHV0KHQpe2NvbnN0IGU9dC50cmFja0J5SWQ7bGV0IG49dGhpcy5tYXAuZ2V0KGUpO258fChuPW5ldyB4aCx0aGlzLm1hcC5zZXQoZSxuKSksbi5hZGQodCl9Z2V0KHQsZSl7Y29uc3Qgbj10aGlzLm1hcC5nZXQodCk7cmV0dXJuIG4/bi5nZXQodCxlKTpudWxsfXJlbW92ZSh0KXtjb25zdCBlPXQudHJhY2tCeUlkO3JldHVybiB0aGlzLm1hcC5nZXQoZSkucmVtb3ZlKHQpJiZ0aGlzLm1hcC5kZWxldGUoZSksdH1nZXQgaXNFbXB0eSgpe3JldHVybiAwPT09dGhpcy5tYXAuc2l6ZX1jbGVhcigpe3RoaXMubWFwLmNsZWFyKCl9fWZ1bmN0aW9uIFBoKHQsZSxuKXtjb25zdCBvPXQucHJldmlvdXNJbmRleDtpZihudWxsPT09bylyZXR1cm4gbztsZXQgaT0wO3JldHVybiBuJiZvPG4ubGVuZ3RoJiYoaT1uW29dKSxvK2UraX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY2xhc3Mgd2h7Y29uc3RydWN0b3IoKXt9c3VwcG9ydHModCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBNYXB8fGttKHQpfWNyZWF0ZSgpe3JldHVybiBuZXcga2h9fWNsYXNzIGtoe2NvbnN0cnVjdG9yKCl7dGhpcy5fcmVjb3Jkcz1uZXcgTWFwLHRoaXMuX21hcEhlYWQ9bnVsbCx0aGlzLl9hcHBlbmRBZnRlcj1udWxsLHRoaXMuX3ByZXZpb3VzTWFwSGVhZD1udWxsLHRoaXMuX2NoYW5nZXNIZWFkPW51bGwsdGhpcy5fY2hhbmdlc1RhaWw9bnVsbCx0aGlzLl9hZGRpdGlvbnNIZWFkPW51bGwsdGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLHRoaXMuX3JlbW92YWxzSGVhZD1udWxsLHRoaXMuX3JlbW92YWxzVGFpbD1udWxsfWdldCBpc0RpcnR5KCl7cmV0dXJuIG51bGwhPT10aGlzLl9hZGRpdGlvbnNIZWFkfHxudWxsIT09dGhpcy5fY2hhbmdlc0hlYWR8fG51bGwhPT10aGlzLl9yZW1vdmFsc0hlYWR9Zm9yRWFjaEl0ZW0odCl7bGV0IGU7Zm9yKGU9dGhpcy5fbWFwSGVhZDtudWxsIT09ZTtlPWUuX25leHQpdChlKX1mb3JFYWNoUHJldmlvdXNJdGVtKHQpe2xldCBlO2ZvcihlPXRoaXMuX3ByZXZpb3VzTWFwSGVhZDtudWxsIT09ZTtlPWUuX25leHRQcmV2aW91cyl0KGUpfWZvckVhY2hDaGFuZ2VkSXRlbSh0KXtsZXQgZTtmb3IoZT10aGlzLl9jaGFuZ2VzSGVhZDtudWxsIT09ZTtlPWUuX25leHRDaGFuZ2VkKXQoZSl9Zm9yRWFjaEFkZGVkSXRlbSh0KXtsZXQgZTtmb3IoZT10aGlzLl9hZGRpdGlvbnNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dEFkZGVkKXQoZSl9Zm9yRWFjaFJlbW92ZWRJdGVtKHQpe2xldCBlO2ZvcihlPXRoaXMuX3JlbW92YWxzSGVhZDtudWxsIT09ZTtlPWUuX25leHRSZW1vdmVkKXQoZSl9ZGlmZih0KXtpZih0KXtpZighKHQgaW5zdGFuY2VvZiBNYXB8fGttKHQpKSl0aHJvdyBuZXcgRXJyb3IoYEVycm9yIHRyeWluZyB0byBkaWZmICcke1JuKHQpfScuIE9ubHkgbWFwcyBhbmQgb2JqZWN0cyBhcmUgYWxsb3dlZGApfWVsc2UgdD1uZXcgTWFwO3JldHVybiB0aGlzLmNoZWNrKHQpP3RoaXM6bnVsbH1vbkRlc3Ryb3koKXt9Y2hlY2sodCl7dGhpcy5fcmVzZXQoKTtsZXQgZT10aGlzLl9tYXBIZWFkO2lmKHRoaXMuX2FwcGVuZEFmdGVyPW51bGwsdGhpcy5fZm9yRWFjaCh0LCgodCxuKT0+e2lmKGUmJmUua2V5PT09bil0aGlzLl9tYXliZUFkZFRvQ2hhbmdlcyhlLHQpLHRoaXMuX2FwcGVuZEFmdGVyPWUsZT1lLl9uZXh0O2Vsc2V7Y29uc3Qgbz10aGlzLl9nZXRPckNyZWF0ZVJlY29yZEZvcktleShuLHQpO2U9dGhpcy5faW5zZXJ0QmVmb3JlT3JBcHBlbmQoZSxvKX19KSksZSl7ZS5fcHJldiYmKGUuX3ByZXYuX25leHQ9bnVsbCksdGhpcy5fcmVtb3ZhbHNIZWFkPWU7Zm9yKGxldCB0PWU7bnVsbCE9PXQ7dD10Ll9uZXh0UmVtb3ZlZCl0PT09dGhpcy5fbWFwSGVhZCYmKHRoaXMuX21hcEhlYWQ9bnVsbCksdGhpcy5fcmVjb3Jkcy5kZWxldGUodC5rZXkpLHQuX25leHRSZW1vdmVkPXQuX25leHQsdC5wcmV2aW91c1ZhbHVlPXQuY3VycmVudFZhbHVlLHQuY3VycmVudFZhbHVlPW51bGwsdC5fcHJldj1udWxsLHQuX25leHQ9bnVsbH1yZXR1cm4gdGhpcy5fY2hhbmdlc1RhaWwmJih0aGlzLl9jaGFuZ2VzVGFpbC5fbmV4dENoYW5nZWQ9bnVsbCksdGhpcy5fYWRkaXRpb25zVGFpbCYmKHRoaXMuX2FkZGl0aW9uc1RhaWwuX25leHRBZGRlZD1udWxsKSx0aGlzLmlzRGlydHl9X2luc2VydEJlZm9yZU9yQXBwZW5kKHQsZSl7aWYodCl7Y29uc3Qgbj10Ll9wcmV2O3JldHVybiBlLl9uZXh0PXQsZS5fcHJldj1uLHQuX3ByZXY9ZSxuJiYobi5fbmV4dD1lKSx0PT09dGhpcy5fbWFwSGVhZCYmKHRoaXMuX21hcEhlYWQ9ZSksdGhpcy5fYXBwZW5kQWZ0ZXI9dCx0fXJldHVybiB0aGlzLl9hcHBlbmRBZnRlcj8odGhpcy5fYXBwZW5kQWZ0ZXIuX25leHQ9ZSxlLl9wcmV2PXRoaXMuX2FwcGVuZEFmdGVyKTp0aGlzLl9tYXBIZWFkPWUsdGhpcy5fYXBwZW5kQWZ0ZXI9ZSxudWxsfV9nZXRPckNyZWF0ZVJlY29yZEZvcktleSh0LGUpe2lmKHRoaXMuX3JlY29yZHMuaGFzKHQpKXtjb25zdCBuPXRoaXMuX3JlY29yZHMuZ2V0KHQpO3RoaXMuX21heWJlQWRkVG9DaGFuZ2VzKG4sZSk7Y29uc3Qgbz1uLl9wcmV2LGk9bi5fbmV4dDtyZXR1cm4gbyYmKG8uX25leHQ9aSksaSYmKGkuX3ByZXY9byksbi5fbmV4dD1udWxsLG4uX3ByZXY9bnVsbCxufWNvbnN0IG49bmV3IFNoKHQpO3JldHVybiB0aGlzLl9yZWNvcmRzLnNldCh0LG4pLG4uY3VycmVudFZhbHVlPWUsdGhpcy5fYWRkVG9BZGRpdGlvbnMobiksbn1fcmVzZXQoKXtpZih0aGlzLmlzRGlydHkpe2xldCB0O2Zvcih0aGlzLl9wcmV2aW91c01hcEhlYWQ9dGhpcy5fbWFwSGVhZCx0PXRoaXMuX3ByZXZpb3VzTWFwSGVhZDtudWxsIT09dDt0PXQuX25leHQpdC5fbmV4dFByZXZpb3VzPXQuX25leHQ7Zm9yKHQ9dGhpcy5fY2hhbmdlc0hlYWQ7bnVsbCE9PXQ7dD10Ll9uZXh0Q2hhbmdlZCl0LnByZXZpb3VzVmFsdWU9dC5jdXJyZW50VmFsdWU7Zm9yKHQ9dGhpcy5fYWRkaXRpb25zSGVhZDtudWxsIT10O3Q9dC5fbmV4dEFkZGVkKXQucHJldmlvdXNWYWx1ZT10LmN1cnJlbnRWYWx1ZTt0aGlzLl9jaGFuZ2VzSGVhZD10aGlzLl9jaGFuZ2VzVGFpbD1udWxsLHRoaXMuX2FkZGl0aW9uc0hlYWQ9dGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLHRoaXMuX3JlbW92YWxzSGVhZD1udWxsfX1fbWF5YmVBZGRUb0NoYW5nZXModCxlKXtPYmplY3QuaXMoZSx0LmN1cnJlbnRWYWx1ZSl8fCh0LnByZXZpb3VzVmFsdWU9dC5jdXJyZW50VmFsdWUsdC5jdXJyZW50VmFsdWU9ZSx0aGlzLl9hZGRUb0NoYW5nZXModCkpfV9hZGRUb0FkZGl0aW9ucyh0KXtudWxsPT09dGhpcy5fYWRkaXRpb25zSGVhZD90aGlzLl9hZGRpdGlvbnNIZWFkPXRoaXMuX2FkZGl0aW9uc1RhaWw9dDoodGhpcy5fYWRkaXRpb25zVGFpbC5fbmV4dEFkZGVkPXQsdGhpcy5fYWRkaXRpb25zVGFpbD10KX1fYWRkVG9DaGFuZ2VzKHQpe251bGw9PT10aGlzLl9jaGFuZ2VzSGVhZD90aGlzLl9jaGFuZ2VzSGVhZD10aGlzLl9jaGFuZ2VzVGFpbD10Oih0aGlzLl9jaGFuZ2VzVGFpbC5fbmV4dENoYW5nZWQ9dCx0aGlzLl9jaGFuZ2VzVGFpbD10KX1fZm9yRWFjaCh0LGUpe3QgaW5zdGFuY2VvZiBNYXA/dC5mb3JFYWNoKGUpOk9iamVjdC5rZXlzKHQpLmZvckVhY2goKG49PmUodFtuXSxuKSkpfX1jbGFzcyBTaHtjb25zdHJ1Y3Rvcih0KXt0aGlzLmtleT10LHRoaXMucHJldmlvdXNWYWx1ZT1udWxsLHRoaXMuY3VycmVudFZhbHVlPW51bGwsdGhpcy5fbmV4dFByZXZpb3VzPW51bGwsdGhpcy5fbmV4dD1udWxsLHRoaXMuX3ByZXY9bnVsbCx0aGlzLl9uZXh0QWRkZWQ9bnVsbCx0aGlzLl9uZXh0UmVtb3ZlZD1udWxsLHRoaXMuX25leHRDaGFuZ2VkPW51bGx9fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiBEaCgpe3JldHVybiBuZXcgRWgoW25ldyBfaF0pfWNsYXNzIEVoe2NvbnN0cnVjdG9yKHQpe3RoaXMuZmFjdG9yaWVzPXR9c3RhdGljIGNyZWF0ZSh0LGUpe2lmKG51bGwhPWUpe2NvbnN0IG49ZS5mYWN0b3JpZXMuc2xpY2UoKTt0PXQuY29uY2F0KG4pfXJldHVybiBuZXcgRWgodCl9c3RhdGljIGV4dGVuZCh0KXtyZXR1cm57cHJvdmlkZTpFaCx1c2VGYWN0b3J5OmU9PkVoLmNyZWF0ZSh0LGV8fERoKCkpLGRlcHM6W1tFaCxuZXcgTXMsbmV3IF9zXV19fWZpbmQodCl7Y29uc3QgZT10aGlzLmZhY3Rvcmllcy5maW5kKChlPT5lLnN1cHBvcnRzKHQpKSk7aWYobnVsbCE9ZSlyZXR1cm4gZTt0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBmaW5kIGEgZGlmZmVyIHN1cHBvcnRpbmcgb2JqZWN0ICcke3R9JyBvZiB0eXBlICckeyhmdW5jdGlvbiBuKHQpe3JldHVybiB0Lm5hbWV8fHR5cGVvZiB0fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8pKHQpfSdgKX19ZnVuY3Rpb24gQWgoKXtyZXR1cm4gbmV3IFJoKFtuZXcgd2hdKX1FaC7JtXByb3Y9bG8oe3Rva2VuOkVoLHByb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6RGh9KTtjbGFzcyBSaHtjb25zdHJ1Y3Rvcih0KXt0aGlzLmZhY3Rvcmllcz10fXN0YXRpYyBjcmVhdGUodCxlKXtpZihlKXtjb25zdCBuPWUuZmFjdG9yaWVzLnNsaWNlKCk7dD10LmNvbmNhdChuKX1yZXR1cm4gbmV3IFJoKHQpfXN0YXRpYyBleHRlbmQodCl7cmV0dXJue3Byb3ZpZGU6UmgsdXNlRmFjdG9yeTplPT5SaC5jcmVhdGUodCxlfHxBaCgpKSxkZXBzOltbUmgsbmV3IE1zLG5ldyBfc11dfX1maW5kKHQpe2NvbnN0IGU9dGhpcy5mYWN0b3JpZXMuZmluZCgoZT0+ZS5zdXBwb3J0cyh0KSkpO2lmKGUpcmV0dXJuIGU7dGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCBhIGRpZmZlciBzdXBwb3J0aW5nIG9iamVjdCAnJHt0fSdgKX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpmdW5jdGlvbiBUaCh0LGUsbixvLGk9ITEpe2Zvcig7bnVsbCE9PW47KXtuZ0Rldk1vZGUmJlphKG4sNjMpO2NvbnN0IGE9ZVtuLmluZGV4XTtpZihudWxsIT09YSYmby5wdXNoKFVpKGEpKSxzaShhKSlmb3IobGV0IHQ9YWk7dDxhLmxlbmd0aDt0Kyspe2NvbnN0IGU9YVt0XSxuPWVbMV0uZmlyc3RDaGlsZDtudWxsIT09biYmVGgoZVsxXSxlLG4sbyl9Y29uc3Qgcj1uLnR5cGU7aWYoOCZyKVRoKHQsZSxuLmNoaWxkLG8pO2Vsc2UgaWYoMzImcil7Y29uc3QgdD1uYyhuLGUpO2xldCBpO2Zvcig7aT10KCk7KW8ucHVzaChpKX1lbHNlIGlmKDE2JnIpe2NvbnN0IHQ9RWMoZSxuKTtpZihBcnJheS5pc0FycmF5KHQpKW8ucHVzaCguLi50KTtlbHNle2NvbnN0IG49b2MoZVsxNl0pO25nRGV2TW9kZSYmT2kobiksVGgoblsxXSxuLHQsbywhMCl9fW49aT9uLnByb2plY3Rpb25OZXh0Om4ubmV4dH1yZXR1cm4gb30KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovUmguybVwcm92PWxvKHt0b2tlbjpSaCxwcm92aWRlZEluOiJyb290IixmYWN0b3J5OkFofSk7Y2xhc3MgTmh7Y29uc3RydWN0b3IodCxlKXt0aGlzLl9sVmlldz10LHRoaXMuX2NkUmVmSW5qZWN0aW5nVmlldz1lLHRoaXMuX2FwcFJlZj1udWxsLHRoaXMuX2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyPSExfWdldCByb290Tm9kZXMoKXtjb25zdCB0PXRoaXMuX2xWaWV3LGU9dFsxXTtyZXR1cm4gVGgoZSx0LGUuZmlyc3RDaGlsZCxbXSl9Z2V0IGNvbnRleHQoKXtyZXR1cm4gdGhpcy5fbFZpZXdbOF19Z2V0IGRlc3Ryb3llZCgpe3JldHVybiAyNTY9PSgyNTYmdGhpcy5fbFZpZXdbMl0pfWRlc3Ryb3koKXtpZih0aGlzLl9hcHBSZWYpdGhpcy5fYXBwUmVmLmRldGFjaFZpZXcodGhpcyk7ZWxzZSBpZih0aGlzLl9hdHRhY2hlZFRvVmlld0NvbnRhaW5lcil7Y29uc3QgdD10aGlzLl9sVmlld1szXTtpZihzaSh0KSl7Y29uc3QgZT10WzhdLG49ZT9lLmluZGV4T2YodGhpcyk6LTE7bj4tMSYmKG5nRGV2TW9kZSYmWG4obix0LmluZGV4T2YodGhpcy5fbFZpZXcpLWFpLCJBbiBhdHRhY2hlZCB2aWV3IHNob3VsZCBiZSBpbiB0aGUgc2FtZSBwb3NpdGlvbiB3aXRoaW4gaXRzIGNvbnRhaW5lciBhcyBpdHMgVmlld1JlZiBpbiB0aGUgVklFV19SRUZTIGFycmF5LiIpLGZjKHQsbiksWnIoZSxuKSl9dGhpcy5fYXR0YWNoZWRUb1ZpZXdDb250YWluZXI9ITF9Z2ModGhpcy5fbFZpZXdbMV0sdGhpcy5fbFZpZXcpfW9uRGVzdHJveSh0KXtKZCh0aGlzLl9sVmlld1sxXSx0aGlzLl9sVmlldyxudWxsLHQpfW1hcmtGb3JDaGVjaygpe01wKHRoaXMuX2NkUmVmSW5qZWN0aW5nVmlld3x8dGhpcy5fbFZpZXcpfWRldGFjaCgpe3RoaXMuX2xWaWV3WzJdJj0tMTI5fXJlYXR0YWNoKCl7dGhpcy5fbFZpZXdbMl18PTEyOH1kZXRlY3RDaGFuZ2VzKCl7eHAodGhpcy5fbFZpZXdbMV0sdGhpcy5fbFZpZXcsdGhpcy5jb250ZXh0KX1jaGVja05vQ2hhbmdlcygpeyEoZnVuY3Rpb24gdChlLG4sbyl7ZmEoITApO3RyeXt4cChlLG4sbyl9ZmluYWxseXtmYSghMSl9fSkodGhpcy5fbFZpZXdbMV0sdGhpcy5fbFZpZXcsdGhpcy5jb250ZXh0KX1hdHRhY2hUb1ZpZXdDb250YWluZXJSZWYoKXtpZih0aGlzLl9hcHBSZWYpdGhyb3cgbmV3IEVycm9yKCJUaGlzIHZpZXcgaXMgYWxyZWFkeSBhdHRhY2hlZCBkaXJlY3RseSB0byB0aGUgQXBwbGljYXRpb25SZWYhIik7dGhpcy5fYXR0YWNoZWRUb1ZpZXdDb250YWluZXI9ITB9ZGV0YWNoRnJvbUFwcFJlZigpe3RoaXMuX2FwcFJlZj1udWxsLChmdW5jdGlvbiB0KGUsbil7TmMoZSxuLG5bMTFdLDIsbnVsbCxudWxsKX0pKHRoaXMuX2xWaWV3WzFdLHRoaXMuX2xWaWV3KX1hdHRhY2hUb0FwcFJlZih0KXtpZih0aGlzLl9hdHRhY2hlZFRvVmlld0NvbnRhaW5lcil0aHJvdyBuZXcgRXJyb3IoIlRoaXMgdmlldyBpcyBhbHJlYWR5IGF0dGFjaGVkIHRvIGEgVmlld0NvbnRhaW5lciEiKTt0aGlzLl9hcHBSZWY9dH19Y2xhc3MgSWggZXh0ZW5kcyBOaHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLl92aWV3PXR9ZGV0ZWN0Q2hhbmdlcygpe09wKHRoaXMuX3ZpZXcpfWNoZWNrTm9DaGFuZ2VzKCl7IShmdW5jdGlvbiB0KGUpe2ZhKCEwKTt0cnl7T3AoZSl9ZmluYWxseXtmYSghMSl9fSkodGhpcy5fdmlldyl9Z2V0IGNvbnRleHQoKXtyZXR1cm4gbnVsbH19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NvbnN0IHpoPUZoO2NsYXNzIEhoe31mdW5jdGlvbiBGaCh0PSExKXtyZXR1cm4oZnVuY3Rpb24gZSh0LG4sbyl7aWYoIW8mJmNpKHQpKXtjb25zdCBlPVppKHQuaW5kZXgsbik7cmV0dXJuIG5ldyBOaChlLGUpfXJldHVybiA0NyZ0LnR5cGU/bmV3IE5oKG5bMTZdLG4pOm51bGx9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLykoc2EoKSxpYSgpLHQpfUhoLl9fTkdfRUxFTUVOVF9JRF9fPXpoLEhoLl9fQ2hhbmdlRGV0ZWN0b3JSZWZfXz0hMDtjb25zdCBMaD1bbmV3IHdoXSxCaD1bbmV3IF9oXSxWaD1uZXcgRWgoQmgpLGpoPW5ldyBSaChMaCk7Y2xhc3MgVWh7fVVoLl9fTkdfRUxFTUVOVF9JRF9fPWZ1bmN0aW9uIFdoKCl7cmV0dXJuIHFoKHNhKCksaWEoKSl9O2NvbnN0IEdoPVVoLFloPWNsYXNzIGV4dGVuZHMgR2h7Y29uc3RydWN0b3IodCxlLG4pe3N1cGVyKCksdGhpcy5fZGVjbGFyYXRpb25MVmlldz10LHRoaXMuX2RlY2xhcmF0aW9uVENvbnRhaW5lcj1lLHRoaXMuZWxlbWVudFJlZj1ufWNyZWF0ZUVtYmVkZGVkVmlldyh0KXtjb25zdCBlPXRoaXMuX2RlY2xhcmF0aW9uVENvbnRhaW5lci50Vmlld3Msbj1GZCh0aGlzLl9kZWNsYXJhdGlvbkxWaWV3LGUsdCwxNixudWxsLGUuZGVjbFROb2RlLG51bGwsbnVsbCxudWxsLG51bGwpLG89dGhpcy5fZGVjbGFyYXRpb25MVmlld1t0aGlzLl9kZWNsYXJhdGlvblRDb250YWluZXIuaW5kZXhdO25nRGV2TW9kZSYmYmkobyksblsxN109bztjb25zdCBpPXRoaXMuX2RlY2xhcmF0aW9uTFZpZXdbMTldO3JldHVybiBudWxsIT09aSYmKG5bMTldPWkuY3JlYXRlRW1iZWRkZWRWaWV3KGUpKSxqZChlLG4sdCksbmV3IE5oKG4pfX07ZnVuY3Rpb24gcWgodCxlKXtyZXR1cm4gNCZ0LnR5cGU/KG5nRGV2TW9kZSYmb28odC50Vmlld3MsIlRWaWV3IG11c3QgYmUgYWxsb2NhdGVkIiksbmV3IFloKGUsdCxsaCh0LGUpKSk6bnVsbH0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY2xhc3MgWmh7fWNsYXNzIFhoe31YaC5fX05HX0VMRU1FTlRfSURfXz1mdW5jdGlvbiBLaCgpe3JldHVybiBlYihzYSgpLGlhKCkpfTtjb25zdCBKaD1YaCxRaD1jbGFzcyBleHRlbmRzIEpoe2NvbnN0cnVjdG9yKHQsZSxuKXtzdXBlcigpLHRoaXMuX2xDb250YWluZXI9dCx0aGlzLl9ob3N0VE5vZGU9ZSx0aGlzLl9ob3N0TFZpZXc9bn1nZXQgZWxlbWVudCgpe3JldHVybiBsaCh0aGlzLl9ob3N0VE5vZGUsdGhpcy5faG9zdExWaWV3KX1nZXQgaW5qZWN0b3IoKXtyZXR1cm4gbmV3IE1yKHRoaXMuX2hvc3RUTm9kZSx0aGlzLl9ob3N0TFZpZXcpfWdldCBwYXJlbnRJbmplY3Rvcigpe2NvbnN0IHQ9Y3IodGhpcy5faG9zdFROb2RlLHRoaXMuX2hvc3RMVmlldyk7aWYodHIodCkpe2NvbnN0IGU9bnIodCx0aGlzLl9ob3N0TFZpZXcpLG49ZXIodCk7cmV0dXJuIG5nRGV2TW9kZSYmUGkoZSxuKSxuZXcgTXIoZVsxXS5kYXRhW24rOF0sZSl9cmV0dXJuIG5ldyBNcihudWxsLHRoaXMuX2hvc3RMVmlldyl9Y2xlYXIoKXtmb3IoO3RoaXMubGVuZ3RoPjA7KXRoaXMucmVtb3ZlKHRoaXMubGVuZ3RoLTEpfWdldCh0KXtjb25zdCBlPSRoKHRoaXMuX2xDb250YWluZXIpO3JldHVybiBudWxsIT09ZSYmZVt0XXx8bnVsbH1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMuX2xDb250YWluZXIubGVuZ3RoLWFpfWNyZWF0ZUVtYmVkZGVkVmlldyh0LGUsbil7Y29uc3Qgbz10LmNyZWF0ZUVtYmVkZGVkVmlldyhlfHx7fSk7cmV0dXJuIHRoaXMuaW5zZXJ0KG8sbiksb31jcmVhdGVDb21wb25lbnQodCxlLG4sbyxpKXtjb25zdCBhPW58fHRoaXMucGFyZW50SW5qZWN0b3I7aWYoIWkmJm51bGw9PXQubmdNb2R1bGUmJmEpe2NvbnN0IHQ9YS5nZXQoWmgsbnVsbCk7dCYmKGk9dCl9Y29uc3Qgcj10LmNyZWF0ZShhLG8sdm9pZCAwLGkpO3JldHVybiB0aGlzLmluc2VydChyLmhvc3RWaWV3LGUpLHJ9aW5zZXJ0KHQsZSl7Y29uc3Qgbj10Ll9sVmlldyxvPW5bMV07aWYobmdEZXZNb2RlJiZ0LmRlc3Ryb3llZCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBpbnNlcnQgYSBkZXN0cm95ZWQgVmlldyBpbiBhIFZpZXdDb250YWluZXIhIik7aWYoKGZ1bmN0aW9uIGkodCl7cmV0dXJuIHNpKHRbM10pfSkobikpe2NvbnN0IGU9dGhpcy5pbmRleE9mKHQpO2lmKC0xIT09ZSl0aGlzLmRldGFjaChlKTtlbHNle2NvbnN0IGU9blszXTtuZ0Rldk1vZGUmJlhuKHNpKGUpLCEwLCJBbiBhdHRhY2hlZCB2aWV3IHNob3VsZCBoYXZlIGl0cyBQQVJFTlQgcG9pbnQgdG8gYSBjb250YWluZXIuIik7Y29uc3Qgbz1uZXcgUWgoZSxlWzZdLGVbM10pO28uZGV0YWNoKG8uaW5kZXhPZih0KSl9fWNvbnN0IGE9dGhpcy5fYWRqdXN0SW5kZXgoZSkscj10aGlzLl9sQ29udGFpbmVyOyEoZnVuY3Rpb24gcyh0LGUsbixvKXtuZ0Rldk1vZGUmJl9pKGUpLG5nRGV2TW9kZSYmYmkobik7Y29uc3QgaT1haStvLGE9bi5sZW5ndGg7bz4wJiYobltpLTFdWzRdPWUpLG88YS1haT8oZVs0XT1uW2ldLHFyKG4sYWkrbyxlKSk6KG4ucHVzaChlKSxlWzRdPW51bGwpLGVbM109bjtjb25zdCByPWVbMTddO251bGwhPT1yJiZuIT09ciYmKGZ1bmN0aW9uIHModCxlKXtuZ0Rldk1vZGUmJm9vKGUsIkxWaWV3IHJlcXVpcmVkIiksbmdEZXZNb2RlJiZiaSh0KTtjb25zdCBuPXRbOV0sbz1lWzNdO25nRGV2TW9kZSYmYmkobyk7Y29uc3QgaT1vWzNdWzE2XTtuZ0Rldk1vZGUmJm9vKGksIk1pc3NpbmcgaW5zZXJ0ZWRDb21wb25lbnRMVmlldyIpO2NvbnN0IGE9ZVsxNl07bmdEZXZNb2RlJiZvbyhhLCJNaXNzaW5nIGRlY2xhcmVkQ29tcG9uZW50TFZpZXciKSxhIT09aSYmKHRbMl09ITApLG51bGw9PT1uP3RbOV09W2VdOm4ucHVzaChlKX0pKHIsZSk7Y29uc3QgbD1lWzE5XTtudWxsIT09bCYmbC5pbnNlcnRWaWV3KHQpLGVbMl18PTEyOH0pKG8sbixyLGEpO2NvbnN0IGw9QWMoYSxyKSxjPW5bMTFdLGQ9dmMoYyxyWzddKTtyZXR1cm4gbnVsbCE9PWQmJihmdW5jdGlvbiBwKHQsZSxuLG8saSxhKXtvWzBdPWksb1s2XT1lLE5jKHQsbyxuLDEsaSxhKX0pKG8scls2XSxjLG4sZCxsKSx0LmF0dGFjaFRvVmlld0NvbnRhaW5lclJlZigpLHFyKHRiKHIpLGEsdCksdH1tb3ZlKHQsZSl7aWYobmdEZXZNb2RlJiZ0LmRlc3Ryb3llZCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBtb3ZlIGEgZGVzdHJveWVkIFZpZXcgaW4gYSBWaWV3Q29udGFpbmVyISIpO3JldHVybiB0aGlzLmluc2VydCh0LGUpfWluZGV4T2YodCl7Y29uc3QgZT0kaCh0aGlzLl9sQ29udGFpbmVyKTtyZXR1cm4gbnVsbCE9PWU/ZS5pbmRleE9mKHQpOi0xfXJlbW92ZSh0KXtjb25zdCBlPXRoaXMuX2FkanVzdEluZGV4KHQsLTEpLG49ZmModGhpcy5fbENvbnRhaW5lcixlKTtuJiYoWnIodGIodGhpcy5fbENvbnRhaW5lciksZSksZ2MoblsxXSxuKSl9ZGV0YWNoKHQpe2NvbnN0IGU9dGhpcy5fYWRqdXN0SW5kZXgodCwtMSksbj1mYyh0aGlzLl9sQ29udGFpbmVyLGUpO3JldHVybiBuJiZudWxsIT1acih0Yih0aGlzLl9sQ29udGFpbmVyKSxlKT9uZXcgTmgobik6bnVsbH1fYWRqdXN0SW5kZXgodCxlPTApe3JldHVybiBudWxsPT10P3RoaXMubGVuZ3RoK2U6KG5nRGV2TW9kZSYmKGVvKHQsLTEsYFZpZXdSZWYgaW5kZXggbXVzdCBiZSBwb3NpdGl2ZSwgZ290ICR7dH1gKSwkbih0LHRoaXMubGVuZ3RoKzErZSwiaW5kZXgiKSksdCl9fTtmdW5jdGlvbiAkaCh0KXtyZXR1cm4gdFs4XX1mdW5jdGlvbiB0Yih0KXtyZXR1cm4gdFs4XXx8KHRbOF09W10pfWZ1bmN0aW9uIGViKHQsZSl7bGV0IG47bmdEZXZNb2RlJiZaYSh0LDE1KTtjb25zdCBvPWVbdC5pbmRleF07aWYoc2kobykpbj1vO2Vsc2V7bGV0IGk7aWYoOCZ0LnR5cGUpaT1VaShvKTtlbHNle2NvbnN0IG49ZVsxMV07bmdEZXZNb2RlJiZuZ0Rldk1vZGUucmVuZGVyZXJDcmVhdGVDb21tZW50KyssaT1uLmNyZWF0ZUNvbW1lbnQobmdEZXZNb2RlPyJjb250YWluZXIiOiIiKTtjb25zdCBvPUdpKHQsZSk7X2Mobix2YyhuLG8pLGksKGZ1bmN0aW9uIGkodCxlKXtyZXR1cm4gVmkodCk/dC5uZXh0U2libGluZyhlKTplLm5leHRTaWJsaW5nfSkobixvKSwhMSl9ZVt0LmluZGV4XT1uPWhwKG8sZSxpLHQpLENwKGUsbil9cmV0dXJuIG5ldyBRaChuLHQsZSl9Y29uc3QgbmI9bmV3IE1hcDtmdW5jdGlvbiBvYih0KXtsZXQgZT1uYi5nZXQodCk7cmV0dXJuIGV8fChlPVJuKHQpKyJfIituYi5zaXplLG5iLnNldCh0LGUpKSxlfW9iKFFwKSxvYihJcCksb2IoWmgpLAovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8Kb2IodWgpLG9iKGNoKSxvYihYaCksb2IoVWgpLG9iKEhoKSxvYihRcCksb2IoSXApO2NvbnN0IGliPXt9OwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jbGFzcyBhYiBleHRlbmRzIHJoe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5uZ01vZHVsZT10fXJlc29sdmVDb21wb25lbnRGYWN0b3J5KHQpe25nRGV2TW9kZSYmKGZ1bmN0aW9uIGUodCxuPSJUeXBlIHBhc3NlZCBpbiBpcyBub3QgQ29tcG9uZW50VHlwZSwgaXQgZG9lcyBub3QgaGF2ZSAnybVjbXAnIHByb3BlcnR5LiIpeyRvKHQpfHxpbyhuKX0pKHQpO2NvbnN0IG49JG8odCk7cmV0dXJuIG5ldyBsYihuLHRoaXMubmdNb2R1bGUpfX1mdW5jdGlvbiByYih0KXtjb25zdCBlPVtdO2ZvcihsZXQgbiBpbiB0KXQuaGFzT3duUHJvcGVydHkobikmJmUucHVzaCh7cHJvcE5hbWU6dFtuXSx0ZW1wbGF0ZU5hbWU6bn0pO3JldHVybiBlfWNvbnN0IHNiPW5ldyBOcigiU0NIRURVTEVSX1RPS0VOIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+WWx9KTtjbGFzcyBsYiBleHRlbmRzIGFoe2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIoKSx0aGlzLmNvbXBvbmVudERlZj10LHRoaXMubmdNb2R1bGU9ZSx0aGlzLmNvbXBvbmVudFR5cGU9dC50eXBlLHRoaXMuc2VsZWN0b3I9KGZ1bmN0aW9uIG4odCl7cmV0dXJuIHQubWFwKFhjKS5qb2luKCIsIil9KSh0LnNlbGVjdG9ycyksdGhpcy5uZ0NvbnRlbnRTZWxlY3RvcnM9dC5uZ0NvbnRlbnRTZWxlY3RvcnM/dC5uZ0NvbnRlbnRTZWxlY3RvcnM6W10sdGhpcy5pc0JvdW5kVG9Nb2R1bGU9ISFlfWdldCBpbnB1dHMoKXtyZXR1cm4gcmIodGhpcy5jb21wb25lbnREZWYuaW5wdXRzKX1nZXQgb3V0cHV0cygpe3JldHVybiByYih0aGlzLmNvbXBvbmVudERlZi5vdXRwdXRzKX1jcmVhdGUodCxlLG4sbyl7Y29uc3QgaT0obz1vfHx0aGlzLm5nTW9kdWxlKT8oZnVuY3Rpb24gYSh0LGUpe3JldHVybntnZXQ6KG4sbyxpKT0+e2NvbnN0IGE9dC5nZXQobixpYixpKTtyZXR1cm4gYSE9PWlifHxvPT09aWI/YTplLmdldChuLG8saSl9fX0pKHQsby5pbmplY3Rvcik6dCxyPWkuZ2V0KG1oLGppKSxzPWkuZ2V0KGhoLG51bGwpLGw9ci5jcmVhdGVSZW5kZXJlcihudWxsLHRoaXMuY29tcG9uZW50RGVmKSxjPXRoaXMuY29tcG9uZW50RGVmLnNlbGVjdG9yc1swXVswXXx8ImRpdiIsZD1uPyhmdW5jdGlvbiBwKHQsZSxuKXtpZihWaSh0KSlyZXR1cm4gdC5zZWxlY3RSb290RWxlbWVudChlLG49PT1Qby5TaGFkb3dEb20pO2xldCBvPSJzdHJpbmciPT10eXBlb2YgZT90LnF1ZXJ5U2VsZWN0b3IoZSk6ZTtyZXR1cm4gbmdEZXZNb2RlJiYoZnVuY3Rpb24gaSh0LGUpe2lmKCF0KXRocm93KGZ1bmN0aW9uIG4odCxlKXtyZXR1cm4gbmV3IEVycm9yKGBSZW5kZXJlcjogJHt0fSBbJHtqbihlKX1dYCl9KSgic3RyaW5nIj09dHlwZW9mIGU/Ikhvc3Qgbm9kZSB3aXRoIHNlbGVjdG9yIG5vdCBmb3VuZDoiOiJIb3N0IG5vZGUgaXMgcmVxdWlyZWQ6IixlKX0pKG8sZSksby50ZXh0Q29udGVudD0iIixvfSkobCxuLHRoaXMuY29tcG9uZW50RGVmLmVuY2Fwc3VsYXRpb24pOm1jKHIuY3JlYXRlUmVuZGVyZXIobnVsbCx0aGlzLmNvbXBvbmVudERlZiksYywoZnVuY3Rpb24gbSh0KXtjb25zdCBlPXQudG9Mb3dlckNhc2UoKTtyZXR1cm4ic3ZnIj09PWU/emk6Im1hdGgiPT09ZT9IaTpudWxsfSkoYykpLHU9dGhpcy5jb21wb25lbnREZWYub25QdXNoPzU3Njo1MjgsZj0oZnVuY3Rpb24gZyh0LGUpe3JldHVybntjb21wb25lbnRzOltdLHNjaGVkdWxlcjp0fHxZbCxjbGVhbjprcCxwbGF5ZXJIYW5kbGVyOmV8fG51bGwsZmxhZ3M6MH19KSgpLGg9S2QoMCxudWxsLG51bGwsMSwwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCksYj1GZChudWxsLGgsZix1LG51bGwsbnVsbCxyLGwscyxpKTtsZXQgeSxfO1NhKGIpO3RyeXtjb25zdCB0PShmdW5jdGlvbiBDKHQsZSxuLG8saSxhKXtjb25zdCByPW5bMV07bmdEZXZNb2RlJiZybyhuLDIwKSxuWzIwXT10O2NvbnN0IHM9TGQociwyMCwyLCIjaG9zdCIsbnVsbCksbD1zLm1lcmdlZEF0dHJzPWUuaG9zdEF0dHJzO251bGwhPT1sJiYoTnAocyxsLCEwKSxudWxsIT09dCYmKFhhKGksdCxsKSxudWxsIT09cy5jbGFzc2VzJiZIYyhpLHQscy5jbGFzc2VzKSxudWxsIT09cy5zdHlsZXMmJnpjKGksdCxzLnN0eWxlcykpKTtjb25zdCBjPW8uY3JlYXRlUmVuZGVyZXIodCxlKSxkPUZkKG4sWGQoZSksbnVsbCxlLm9uUHVzaD82NDoxNixuWzIwXSxzLG8sYyxhfHxudWxsLG51bGwpO3JldHVybiByLmZpcnN0Q3JlYXRlUGFzcyYmKGRyKHJyKHMsbikscixlLnR5cGUpLHJwKHIscyksbHAocyxuLmxlbmd0aCwxKSksQ3AobixkKSxuWzIwXT1kfSkoZCx0aGlzLmNvbXBvbmVudERlZixiLHIsbCk7aWYoZClpZihuKVhhKGwsZCxbIm5nLXZlcnNpb24iLHloLmZ1bGxdKTtlbHNle2NvbnN0e2F0dHJzOnQsY2xhc3NlczplfT0oZnVuY3Rpb24gTSh0KXtjb25zdCBlPVtdLG49W107bGV0IG89MSxpPTI7Zm9yKDtvPHQubGVuZ3RoOyl7bGV0IGE9dFtvXTtpZigic3RyaW5nIj09dHlwZW9mIGEpMj09PWk/IiIhPT1hJiZlLnB1c2goYSx0Wysrb10pOjg9PT1pJiZuLnB1c2goYSk7ZWxzZXtpZighV2MoaSkpYnJlYWs7aT1hfW8rK31yZXR1cm57YXR0cnM6ZSxjbGFzc2VzOm59fSkodGhpcy5jb21wb25lbnREZWYuc2VsZWN0b3JzWzBdKTt0JiZYYShsLGQsdCksZSYmZS5sZW5ndGg+MCYmSGMobCxkLGUuam9pbigiICIpKX1pZihfPVlpKGgsb2kpLHZvaWQgMCE9PWUpe2NvbnN0IHQ9Xy5wcm9qZWN0aW9uPVtdO2ZvcihsZXQgbj0wO248dGhpcy5uZ0NvbnRlbnRTZWxlY3RvcnMubGVuZ3RoO24rKyl7Y29uc3Qgbz1lW25dO3QucHVzaChudWxsIT1vP0FycmF5LmZyb20obyk6bnVsbCl9fXk9KGZ1bmN0aW9uIHYodCxlLG4sbyxpKXtjb25zdCBhPW5bMV0scj0oZnVuY3Rpb24gcyh0LGUsbil7Y29uc3Qgbz1zYSgpO2lmKHQuZmlyc3RDcmVhdGVQYXNzKXtuLnByb3ZpZGVyc1Jlc29sdmVyJiZuLnByb3ZpZGVyc1Jlc29sdmVyKG4pO2NvbnN0IGk9VmQodCxlLDEsbnVsbCk7bmdEZXZNb2RlJiZYbihpLG8uZGlyZWN0aXZlU3RhcnQsIkJlY2F1c2UgdGhpcyBpcyBhIHJvb3QgY29tcG9uZW50IHRoZSBhbGxvY2F0ZWQgZXhwYW5kbyBzaG91bGQgbWF0Y2ggdGhlIFROb2RlIGNvbXBvbmVudC4iKSxjcCh0LG8sZSxpLG4pfWNvbnN0IGk9eXIoZSx0LG8uZGlyZWN0aXZlU3RhcnQsbyk7VmwoaSxlKTtjb25zdCBhPUdpKG8sZSk7cmV0dXJuIGEmJlZsKGEsZSksaX0pKGEsbixlKTtpZihvLmNvbXBvbmVudHMucHVzaChyKSx0WzhdPXIsaSYmaS5mb3JFYWNoKCh0PT50KHIsZSkpKSxlLmNvbnRlbnRRdWVyaWVzKXtjb25zdCB0PXNhKCk7bmdEZXZNb2RlJiZvbyh0LCJUTm9kZSBleHBlY3RlZCIpLGUuY29udGVudFF1ZXJpZXMoMSxyLHQuZGlyZWN0aXZlU3RhcnQpfWNvbnN0IGw9c2EoKTtyZXR1cm4gbmdEZXZNb2RlJiZvbyhsLCJ0Tm9kZSBzaG91bGQgaGF2ZSBiZWVuIGFscmVhZHkgY3JlYXRlZCIpLCFhLmZpcnN0Q3JlYXRlUGFzc3x8bnVsbD09PWUuaG9zdEJpbmRpbmdzJiZudWxsPT09ZS5ob3N0QXR0cnN8fChJYShsLmluZGV4KSxpcChuWzFdLGwsMCxsLmRpcmVjdGl2ZVN0YXJ0LGwuZGlyZWN0aXZlRW5kLGUpLGFwKGUscikpLHJ9KSh0LHRoaXMuY29tcG9uZW50RGVmLGIsZixbdW1dKSxqZChoLGIsbnVsbCl9ZmluYWxseXtUYSgpfXJldHVybiBuZXcgY2IodGhpcy5jb21wb25lbnRUeXBlLHksbGgoXyxiKSxiLF8pfX1uZXcgYWI7Y2xhc3MgY2IgZXh0ZW5kcyBjbGFzc3t9e2NvbnN0cnVjdG9yKHQsZSxuLG8saSl7c3VwZXIoKSx0aGlzLmxvY2F0aW9uPW4sdGhpcy5fcm9vdExWaWV3PW8sdGhpcy5fdE5vZGU9aSx0aGlzLmluc3RhbmNlPWUsdGhpcy5ob3N0Vmlldz10aGlzLmNoYW5nZURldGVjdG9yUmVmPW5ldyBJaChvKSx0aGlzLmNvbXBvbmVudFR5cGU9dH1nZXQgaW5qZWN0b3IoKXtyZXR1cm4gbmV3IE1yKHRoaXMuX3ROb2RlLHRoaXMuX3Jvb3RMVmlldyl9ZGVzdHJveSgpe3RoaXMuaG9zdFZpZXcuZGVzdHJveSgpfW9uRGVzdHJveSh0KXt0aGlzLmhvc3RWaWV3Lm9uRGVzdHJveSh0KX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIGRiKHQsZSxuLG8pe3JldHVybiB2bygoKCk9Pntjb25zdCBpPXQ7bnVsbCE9PWUmJihpLmhhc093blByb3BlcnR5KCJkZWNvcmF0b3JzIikmJnZvaWQgMCE9PWkuZGVjb3JhdG9ycz9pLmRlY29yYXRvcnMucHVzaCguLi5lKTppLmRlY29yYXRvcnM9ZSksbnVsbCE9PW4mJihpLmN0b3JQYXJhbWV0ZXJzPW4pLG51bGwhPT1vJiYoaS5wcm9wRGVjb3JhdG9ycz1pLmhhc093blByb3BlcnR5KCJwcm9wRGVjb3JhdG9ycyIpJiZ2b2lkIDAhPT1pLnByb3BEZWNvcmF0b3JzP09iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxpLnByb3BEZWNvcmF0b3JzKSxvKTpvKX0pKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY29uc3QgcGI9bmV3IE1hcDsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIG1iIGV4dGVuZHMgWmh7Y29uc3RydWN0b3IodCxlKXtzdXBlcigpLHRoaXMuX3BhcmVudD1lLHRoaXMuX2Jvb3RzdHJhcENvbXBvbmVudHM9W10sdGhpcy5pbmplY3Rvcj10aGlzLHRoaXMuZGVzdHJveUNicz1bXSx0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1uZXcgYWIodGhpcyk7Y29uc3Qgbj1uaSh0KTtuZ0Rldk1vZGUmJm9vKG4sYE5nTW9kdWxlICcke1JuKHQpfScgaXMgbm90IGEgc3VidHlwZSBvZiAnTmdNb2R1bGVUeXBlJy5gKTtjb25zdCBvPShmdW5jdGlvbiBpKHQpe3JldHVybiB0W0xvXXx8bnVsbH0pKHQpO28mJlVmKG8pLHRoaXMuX2Jvb3RzdHJhcENvbXBvbmVudHM9Smwobi5ib290c3RyYXApLHRoaXMuX3IzSW5qZWN0b3I9VXAodCxlLFt7cHJvdmlkZTpaaCx1c2VWYWx1ZTp0aGlzfSx7cHJvdmlkZTpyaCx1c2VWYWx1ZTp0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcn1dLFJuKHQpKSx0aGlzLl9yM0luamVjdG9yLl9yZXNvbHZlSW5qZWN0b3JEZWZUeXBlcygpLHRoaXMuaW5zdGFuY2U9dGhpcy5nZXQodCl9Z2V0KHQsZT1RcC5USFJPV19JRl9OT1RfRk9VTkQsbj15by5EZWZhdWx0KXtyZXR1cm4gdD09PVFwfHx0PT09Wmh8fHQ9PT1JcD90aGlzOnRoaXMuX3IzSW5qZWN0b3IuZ2V0KHQsZSxuKX1kZXN0cm95KCl7bmdEZXZNb2RlJiZvbyh0aGlzLmRlc3Ryb3lDYnMsIk5nTW9kdWxlIGFscmVhZHkgZGVzdHJveWVkIik7Y29uc3QgdD10aGlzLl9yM0luamVjdG9yOyF0LmRlc3Ryb3llZCYmdC5kZXN0cm95KCksdGhpcy5kZXN0cm95Q2JzLmZvckVhY2goKHQ9PnQoKSkpLHRoaXMuZGVzdHJveUNicz1udWxsfW9uRGVzdHJveSh0KXtuZ0Rldk1vZGUmJm9vKHRoaXMuZGVzdHJveUNicywiTmdNb2R1bGUgYWxyZWFkeSBkZXN0cm95ZWQiKSx0aGlzLmRlc3Ryb3lDYnMucHVzaCh0KX19Y2xhc3MgdWIgZXh0ZW5kcyBjbGFzc3t9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMubW9kdWxlVHlwZT10LG51bGwhPT1uaSh0KSYmKGZ1bmN0aW9uIGUodCl7Y29uc3QgZT1uZXcgU2V0OyEoZnVuY3Rpb24gdChuKXtjb25zdCBvPW5pKG4sITApLGk9by5pZDtudWxsIT09aSYmKChmdW5jdGlvbiBhKHQsZSxuKXtpZihlJiZlIT09bil0aHJvdyBuZXcgRXJyb3IoYER1cGxpY2F0ZSBtb2R1bGUgcmVnaXN0ZXJlZCBmb3IgJHt0fSAtICR7Um4oZSl9IHZzICR7Um4oZS5uYW1lKX1gKX0pKGkscGIuZ2V0KGkpLG4pLHBiLnNldChpLG4pKTtjb25zdCByPUpsKG8uaW1wb3J0cyk7Zm9yKGNvbnN0IG4gb2YgcillLmhhcyhuKXx8KGUuYWRkKG4pLHQobikpfSkodCl9KSh0KX1jcmVhdGUodCl7cmV0dXJuIG5ldyBtYih0aGlzLm1vZHVsZVR5cGUsdCl9fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiBmYih0LGUsbil7Y29uc3Qgbz1nYSgpK3QsaT1pYSgpO3JldHVybiBpW29dPT09S2M/U20oaSxvLG4/ZS5jYWxsKG4pOmUoKSk6RG0oaSxvKX1mdW5jdGlvbiBnYih0LGUsbixvKXtyZXR1cm4gX2IoaWEoKSxnYSgpLHQsZSxuLG8pfWZ1bmN0aW9uIGhiKHQsZSxuLG8saSl7cmV0dXJuIENiKGlhKCksZ2EoKSx0LGUsbixvLGkpfWZ1bmN0aW9uIGJiKHQsZSxuLG8saSxhKXtyZXR1cm4gTWIoaWEoKSxnYSgpLHQsZSxuLG8saSxhKX1mdW5jdGlvbiB5Yih0LGUpe25nRGV2TW9kZSYmcm8odCxlKTtjb25zdCBuPXRbZV07cmV0dXJuIG49PT1LYz92b2lkIDA6bn1mdW5jdGlvbiBfYih0LGUsbixvLGksYSl7Y29uc3Qgcj1lK247cmV0dXJuIEVtKHQscixpKT9TbSh0LHIrMSxhP28uY2FsbChhLGkpOm8oaSkpOnliKHQscisxKX1mdW5jdGlvbiBDYih0LGUsbixvLGksYSxyKXtjb25zdCBzPWUrbjtyZXR1cm4gQW0odCxzLGksYSk/U20odCxzKzIscj9vLmNhbGwocixpLGEpOm8oaSxhKSk6eWIodCxzKzIpfWZ1bmN0aW9uIE1iKHQsZSxuLG8saSxhLHIscyl7Y29uc3QgbD1lK247cmV0dXJuIFJtKHQsbCxpLGEscik/U20odCxsKzMscz9vLmNhbGwocyxpLGEscik6byhpLGEscikpOnliKHQsbCszKX1mdW5jdGlvbiB2Yih0LGUsbixvLGksYSxyLHMsbCl7Y29uc3QgYz1lK247cmV0dXJuIFRtKHQsYyxpLGEscixzKT9TbSh0LGMrNCxsP28uY2FsbChsLGksYSxyLHMpOm8oaSxhLHIscykpOnliKHQsYys0KX1mdW5jdGlvbiB4Yih0LGUsbixvLGksYSl7bGV0IHI9ZStuLHM9ITE7Zm9yKGxldCBlPTA7ZTxpLmxlbmd0aDtlKyspRW0odCxyKyssaVtlXSkmJihzPSEwKTtyZXR1cm4gcz9TbSh0LHIsby5hcHBseShhLGkpKTp5Yih0LHIpfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiBPYih0LGUpe2NvbnN0IG49YWEoKTtsZXQgbztjb25zdCBpPXQrb2k7bi5maXJzdENyZWF0ZVBhc3M/KG89KGZ1bmN0aW9uIGEodCxlKXtpZihlKWZvcihsZXQgbj1lLmxlbmd0aC0xO24+PTA7bi0tKXtjb25zdCBvPWVbbl07aWYodD09PW8ubmFtZSlyZXR1cm4gb310aHJvdyBuZXcgRm4oIjMwMiIsYFRoZSBwaXBlICcke3R9JyBjb3VsZCBub3QgYmUgZm91bmQhYCl9KShlLG4ucGlwZVJlZ2lzdHJ5KSxuLmRhdGFbaV09byxvLm9uRGVzdHJveSYmKG4uZGVzdHJveUhvb2tzfHwobi5kZXN0cm95SG9va3M9W10pKS5wdXNoKGksby5vbkRlc3Ryb3kpKTpvPW4uZGF0YVtpXTtjb25zdCByPW8uZmFjdG9yeXx8KG8uZmFjdG9yeT13aShvLnR5cGUsITApKSxzPUNvKE11KTt0cnl7Y29uc3QgdD1pcighMSksZT1yKCk7cmV0dXJuIGlyKHQpLChmdW5jdGlvbiBsKHQsZSxuLG8pe24+PXQuZGF0YS5sZW5ndGgmJih0LmRhdGFbbl09bnVsbCx0LmJsdWVwcmludFtuXT1udWxsKSxlW25dPW99KShuLGlhKCksaSxlKSxlfWZpbmFsbHl7Q28ocyl9fWZ1bmN0aW9uIFBiKHQsZSxuKXtjb25zdCBvPXQrb2ksaT1pYSgpLGE9cWkoaSxvKTtyZXR1cm4gRGIoaSxTYihpLG8pP19iKGksZ2EoKSxlLGEudHJhbnNmb3JtLG4sYSk6YS50cmFuc2Zvcm0obikpfWZ1bmN0aW9uIHdiKHQsZSxuLG8pe2NvbnN0IGk9dCtvaSxhPWlhKCkscj1xaShhLGkpO3JldHVybiBEYihhLFNiKGEsaSk/Q2IoYSxnYSgpLGUsci50cmFuc2Zvcm0sbixvLHIpOnIudHJhbnNmb3JtKG4sbykpfWZ1bmN0aW9uIGtiKHQsZSxuLG8saSl7Y29uc3QgYT10K29pLHI9aWEoKSxzPXFpKHIsYSk7cmV0dXJuIERiKHIsU2IocixhKT9NYihyLGdhKCksZSxzLnRyYW5zZm9ybSxuLG8saSxzKTpzLnRyYW5zZm9ybShuLG8saSkpfWZ1bmN0aW9uIFNiKHQsZSl7cmV0dXJuIHRbMV0uZGF0YVtlXS5wdXJlfWZ1bmN0aW9uIERiKHQsZSl7cmV0dXJuIFBtLmlzV3JhcHBlZChlKSYmKGU9UG0udW53cmFwKGUpLHRbaGEoKV09S2MpLGV9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIEViKHQpe3JldHVybiBlPT57c2V0VGltZW91dCh0LHZvaWQgMCxlKX19Y29uc3QgQWI9Y2xhc3MgZXh0ZW5kcyB4e2NvbnN0cnVjdG9yKHQ9ITEpe3N1cGVyKCksdGhpcy5fX2lzQXN5bmM9dH1lbWl0KHQpe3N1cGVyLm5leHQodCl9c3Vic2NyaWJlKHQsZSxuKXt2YXIgbyxpLGE7bGV0IHI9dCxzPWV8fCgoKT0+bnVsbCksYz1uO2lmKHQmJiJvYmplY3QiPT10eXBlb2YgdCl7Y29uc3QgZT10O3I9bnVsbD09PShvPWUubmV4dCl8fHZvaWQgMD09PW8/dm9pZCAwOm8uYmluZChlKSxzPW51bGw9PT0oaT1lLmVycm9yKXx8dm9pZCAwPT09aT92b2lkIDA6aS5iaW5kKGUpLGM9bnVsbD09PShhPWUuY29tcGxldGUpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmJpbmQoZSl9dGhpcy5fX2lzQXN5bmMmJihzPUViKHMpLHImJihyPUViKHIpKSxjJiYoYz1FYihjKSkpO2NvbnN0IGQ9c3VwZXIuc3Vic2NyaWJlKHtuZXh0OnIsZXJyb3I6cyxjb21wbGV0ZTpjfSk7cmV0dXJuIHQgaW5zdGFuY2VvZiBsJiZ0LmFkZChkKSxkfX07Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIFJiKCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHNbeG0oKV0oKX1jbGFzcyBUYntjb25zdHJ1Y3Rvcih0PSExKXt0aGlzLl9lbWl0RGlzdGluY3RDaGFuZ2VzT25seT10LHRoaXMuZGlydHk9ITAsdGhpcy5fcmVzdWx0cz1bXSx0aGlzLl9jaGFuZ2VzRGV0ZWN0ZWQ9ITEsdGhpcy5fY2hhbmdlcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5maXJzdD12b2lkIDAsdGhpcy5sYXN0PXZvaWQgMDtjb25zdCBlPXhtKCksbj1UYi5wcm90b3R5cGU7bltlXXx8KG5bZV09UmIpfWdldCBjaGFuZ2VzKCl7cmV0dXJuIHRoaXMuX2NoYW5nZXN8fCh0aGlzLl9jaGFuZ2VzPW5ldyBBYil9Z2V0KHQpe3JldHVybiB0aGlzLl9yZXN1bHRzW3RdfW1hcCh0KXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5tYXAodCl9ZmlsdGVyKHQpe3JldHVybiB0aGlzLl9yZXN1bHRzLmZpbHRlcih0KX1maW5kKHQpe3JldHVybiB0aGlzLl9yZXN1bHRzLmZpbmQodCl9cmVkdWNlKHQsZSl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMucmVkdWNlKHQsZSl9Zm9yRWFjaCh0KXt0aGlzLl9yZXN1bHRzLmZvckVhY2godCl9c29tZSh0KXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5zb21lKHQpfXRvQXJyYXkoKXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5zbGljZSgpfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMudG9TdHJpbmcoKX1yZXNldCh0LGUpe2NvbnN0IG49dGhpcztuLmRpcnR5PSExO2NvbnN0IG89R3IodCk7KHRoaXMuX2NoYW5nZXNEZXRlY3RlZD0hKGZ1bmN0aW9uIGkodCxlLG4pe2lmKHQubGVuZ3RoIT09ZS5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBvPTA7bzx0Lmxlbmd0aDtvKyspe2xldCBpPXRbb10sYT1lW29dO2lmKG4mJihpPW4oaSksYT1uKGEpKSxhIT09aSlyZXR1cm4hMX1yZXR1cm4hMH0pKG4uX3Jlc3VsdHMsbyxlKSkmJihuLl9yZXN1bHRzPW8sbi5sZW5ndGg9by5sZW5ndGgsbi5sYXN0PW9bdGhpcy5sZW5ndGgtMV0sbi5maXJzdD1vWzBdKX1ub3RpZnlPbkNoYW5nZXMoKXshdGhpcy5fY2hhbmdlc3x8IXRoaXMuX2NoYW5nZXNEZXRlY3RlZCYmdGhpcy5fZW1pdERpc3RpbmN0Q2hhbmdlc09ubHl8fHRoaXMuX2NoYW5nZXMuZW1pdCh0aGlzKX1zZXREaXJ0eSgpe3RoaXMuZGlydHk9ITB9ZGVzdHJveSgpe3RoaXMuY2hhbmdlcy5jb21wbGV0ZSgpLHRoaXMuY2hhbmdlcy51bnN1YnNjcmliZSgpfX1jbGFzcyBOYntjb25zdHJ1Y3Rvcih0KXt0aGlzLnF1ZXJ5TGlzdD10LHRoaXMubWF0Y2hlcz1udWxsfWNsb25lKCl7cmV0dXJuIG5ldyBOYih0aGlzLnF1ZXJ5TGlzdCl9c2V0RGlydHkoKXt0aGlzLnF1ZXJ5TGlzdC5zZXREaXJ0eSgpfX1jbGFzcyBJYntjb25zdHJ1Y3Rvcih0PVtdKXt0aGlzLnF1ZXJpZXM9dH1jcmVhdGVFbWJlZGRlZFZpZXcodCl7Y29uc3QgZT10LnF1ZXJpZXM7aWYobnVsbCE9PWUpe2NvbnN0IG49bnVsbCE9PXQuY29udGVudFF1ZXJpZXM/dC5jb250ZW50UXVlcmllc1swXTplLmxlbmd0aCxvPVtdO2ZvcihsZXQgdD0wO3Q8bjt0Kyspe2NvbnN0IG49ZS5nZXRCeUluZGV4KHQpO28ucHVzaCh0aGlzLnF1ZXJpZXNbbi5pbmRleEluRGVjbGFyYXRpb25WaWV3XS5jbG9uZSgpKX1yZXR1cm4gbmV3IEliKG8pfXJldHVybiBudWxsfWluc2VydFZpZXcodCl7dGhpcy5kaXJ0eVF1ZXJpZXNXaXRoTWF0Y2hlcyh0KX1kZXRhY2hWaWV3KHQpe3RoaXMuZGlydHlRdWVyaWVzV2l0aE1hdGNoZXModCl9ZGlydHlRdWVyaWVzV2l0aE1hdGNoZXModCl7Zm9yKGxldCBlPTA7ZTx0aGlzLnF1ZXJpZXMubGVuZ3RoO2UrKyludWxsIT09WGIodCxlKS5tYXRjaGVzJiZ0aGlzLnF1ZXJpZXNbZV0uc2V0RGlydHkoKX19Y2xhc3MgemJ7Y29uc3RydWN0b3IodCxlLG49bnVsbCl7dGhpcy5wcmVkaWNhdGU9dCx0aGlzLmZsYWdzPWUsdGhpcy5yZWFkPW59fWNsYXNzIEhie2NvbnN0cnVjdG9yKHQ9W10pe3RoaXMucXVlcmllcz10fWVsZW1lbnRTdGFydCh0LGUpe25nRGV2TW9kZSYmQ2kodCwiUXVlcmllcyBzaG91bGQgY29sbGVjdCByZXN1bHRzIG9uIHRoZSBmaXJzdCB0ZW1wbGF0ZSBwYXNzIG9ubHkiKTtmb3IobGV0IG49MDtuPHRoaXMucXVlcmllcy5sZW5ndGg7bisrKXRoaXMucXVlcmllc1tuXS5lbGVtZW50U3RhcnQodCxlKX1lbGVtZW50RW5kKHQpe2ZvcihsZXQgZT0wO2U8dGhpcy5xdWVyaWVzLmxlbmd0aDtlKyspdGhpcy5xdWVyaWVzW2VdLmVsZW1lbnRFbmQodCl9ZW1iZWRkZWRUVmlldyh0KXtsZXQgZT1udWxsO2ZvcihsZXQgbj0wO248dGhpcy5sZW5ndGg7bisrKXtjb25zdCBvPW51bGwhPT1lP2UubGVuZ3RoOjAsaT10aGlzLmdldEJ5SW5kZXgobikuZW1iZWRkZWRUVmlldyh0LG8pO2kmJihpLmluZGV4SW5EZWNsYXJhdGlvblZpZXc9bixudWxsIT09ZT9lLnB1c2goaSk6ZT1baV0pfXJldHVybiBudWxsIT09ZT9uZXcgSGIoZSk6bnVsbH10ZW1wbGF0ZSh0LGUpe25nRGV2TW9kZSYmQ2kodCwiUXVlcmllcyBzaG91bGQgY29sbGVjdCByZXN1bHRzIG9uIHRoZSBmaXJzdCB0ZW1wbGF0ZSBwYXNzIG9ubHkiKTtmb3IobGV0IG49MDtuPHRoaXMucXVlcmllcy5sZW5ndGg7bisrKXRoaXMucXVlcmllc1tuXS50ZW1wbGF0ZSh0LGUpfWdldEJ5SW5kZXgodCl7cmV0dXJuIG5nRGV2TW9kZSYmcm8odGhpcy5xdWVyaWVzLHQpLHRoaXMucXVlcmllc1t0XX1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMucXVlcmllcy5sZW5ndGh9dHJhY2sodCl7dGhpcy5xdWVyaWVzLnB1c2godCl9fWNsYXNzIEZie2NvbnN0cnVjdG9yKHQsZT0tMSl7dGhpcy5tZXRhZGF0YT10LHRoaXMubWF0Y2hlcz1udWxsLHRoaXMuaW5kZXhJbkRlY2xhcmF0aW9uVmlldz0tMSx0aGlzLmNyb3NzZXNOZ1RlbXBsYXRlPSExLHRoaXMuX2FwcGxpZXNUb05leHROb2RlPSEwLHRoaXMuX2RlY2xhcmF0aW9uTm9kZUluZGV4PWV9ZWxlbWVudFN0YXJ0KHQsZSl7dGhpcy5pc0FwcGx5aW5nVG9Ob2RlKGUpJiZ0aGlzLm1hdGNoVE5vZGUodCxlKX1lbGVtZW50RW5kKHQpe3RoaXMuX2RlY2xhcmF0aW9uTm9kZUluZGV4PT09dC5pbmRleCYmKHRoaXMuX2FwcGxpZXNUb05leHROb2RlPSExKX10ZW1wbGF0ZSh0LGUpe3RoaXMuZWxlbWVudFN0YXJ0KHQsZSl9ZW1iZWRkZWRUVmlldyh0LGUpe3JldHVybiB0aGlzLmlzQXBwbHlpbmdUb05vZGUodCk/KHRoaXMuY3Jvc3Nlc05nVGVtcGxhdGU9ITAsdGhpcy5hZGRNYXRjaCgtdC5pbmRleCxlKSxuZXcgRmIodGhpcy5tZXRhZGF0YSkpOm51bGx9aXNBcHBseWluZ1RvTm9kZSh0KXtpZih0aGlzLl9hcHBsaWVzVG9OZXh0Tm9kZSYmMSE9KDEmdGhpcy5tZXRhZGF0YS5mbGFncykpe2NvbnN0IGU9dGhpcy5fZGVjbGFyYXRpb25Ob2RlSW5kZXg7bGV0IG49dC5wYXJlbnQ7Zm9yKDtudWxsIT09biYmOCZuLnR5cGUmJm4uaW5kZXghPT1lOyluPW4ucGFyZW50O3JldHVybiBlPT09KG51bGwhPT1uP24uaW5kZXg6LTEpfXJldHVybiB0aGlzLl9hcHBsaWVzVG9OZXh0Tm9kZX1tYXRjaFROb2RlKHQsZSl7Y29uc3Qgbj10aGlzLm1ldGFkYXRhLnByZWRpY2F0ZTtpZihBcnJheS5pc0FycmF5KG4pKWZvcihsZXQgbz0wO288bi5sZW5ndGg7bysrKXtjb25zdCBpPW5bb107dGhpcy5tYXRjaFROb2RlV2l0aFJlYWRPcHRpb24odCxlLExiKGUsaSkpLHRoaXMubWF0Y2hUTm9kZVdpdGhSZWFkT3B0aW9uKHQsZSxicihlLHQsaSwhMSwhMSkpfWVsc2Ugbj09PVVoPzQmZS50eXBlJiZ0aGlzLm1hdGNoVE5vZGVXaXRoUmVhZE9wdGlvbih0LGUsLTEpOnRoaXMubWF0Y2hUTm9kZVdpdGhSZWFkT3B0aW9uKHQsZSxicihlLHQsbiwhMSwhMSkpfW1hdGNoVE5vZGVXaXRoUmVhZE9wdGlvbih0LGUsbil7aWYobnVsbCE9PW4pe2NvbnN0IG89dGhpcy5tZXRhZGF0YS5yZWFkO2lmKG51bGwhPT1vKWlmKG89PT1jaHx8bz09PVhofHxvPT09VWgmJjQmZS50eXBlKXRoaXMuYWRkTWF0Y2goZS5pbmRleCwtMik7ZWxzZXtjb25zdCBuPWJyKGUsdCxvLCExLCExKTtudWxsIT09biYmdGhpcy5hZGRNYXRjaChlLmluZGV4LG4pfWVsc2UgdGhpcy5hZGRNYXRjaChlLmluZGV4LG4pfX1hZGRNYXRjaCh0LGUpe251bGw9PT10aGlzLm1hdGNoZXM/dGhpcy5tYXRjaGVzPVt0LGVdOnRoaXMubWF0Y2hlcy5wdXNoKHQsZSl9fWZ1bmN0aW9uIExiKHQsZSl7Y29uc3Qgbj10LmxvY2FsTmFtZXM7aWYobnVsbCE9PW4pZm9yKGxldCB0PTA7dDxuLmxlbmd0aDt0Kz0yKWlmKG5bdF09PT1lKXJldHVybiBuW3QrMV07cmV0dXJuIG51bGx9ZnVuY3Rpb24gQmIodCxlLG4sbyl7cmV0dXJuLTE9PT1uPyhmdW5jdGlvbiBpKHQsZSl7cmV0dXJuIDExJnQudHlwZT9saCh0LGUpOjQmdC50eXBlP3FoKHQsZSk6bnVsbH0pKGUsdCk6LTI9PT1uPyhmdW5jdGlvbiBhKHQsZSxuKXtyZXR1cm4gbj09PWNoP2xoKGUsdCk6bj09PVVoP3FoKGUsdCk6bj09PVhoPyhuZ0Rldk1vZGUmJlphKGUsMTUpLGViKGUsdCkpOnZvaWQobmdEZXZNb2RlJiZpbyhgU3BlY2lhbCB0b2tlbiB0byByZWFkIHNob3VsZCBiZSBvbmUgb2YgRWxlbWVudFJlZiwgVGVtcGxhdGVSZWYgb3IgVmlld0NvbnRhaW5lclJlZiBidXQgZ290ICR7Um4obil9LmApKX0pKHQsZSxvKTp5cih0LHRbMV0sbixlKX1mdW5jdGlvbiBWYih0LGUsbixvKXtjb25zdCBpPWVbMTldLnF1ZXJpZXNbb107aWYobnVsbD09PWkubWF0Y2hlcyl7Y29uc3Qgbz10LmRhdGEsYT1uLm1hdGNoZXMscj1bXTtmb3IobGV0IHQ9MDt0PGEubGVuZ3RoO3QrPTIpe2NvbnN0IGk9YVt0XTtpPDA/ci5wdXNoKG51bGwpOihuZ0Rldk1vZGUmJnJvKG8saSksci5wdXNoKEJiKGUsb1tpXSxhW3QrMV0sbi5tZXRhZGF0YS5yZWFkKSkpfWkubWF0Y2hlcz1yfXJldHVybiBpLm1hdGNoZXN9ZnVuY3Rpb24gamIodCxlLG4sbyl7Y29uc3QgaT10LnF1ZXJpZXMuZ2V0QnlJbmRleChuKSxhPWkubWF0Y2hlcztpZihudWxsIT09YSl7Y29uc3Qgcj1WYih0LGUsaSxuKTtmb3IobGV0IHQ9MDt0PGEubGVuZ3RoO3QrPTIpe2NvbnN0IG49YVt0XTtpZihuPjApby5wdXNoKHJbdC8yXSk7ZWxzZXtjb25zdCBpPWFbdCsxXSxyPWVbLW5dO25nRGV2TW9kZSYmYmkocik7Zm9yKGxldCB0PWFpO3Q8ci5sZW5ndGg7dCsrKXtjb25zdCBlPXJbdF07ZVsxN109PT1lWzNdJiZqYihlWzFdLGUsaSxvKX1pZihudWxsIT09cls5XSl7Y29uc3QgdD1yWzldO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKXtjb25zdCBuPXRbZV07amIoblsxXSxuLGksbyl9fX19fXJldHVybiBvfWZ1bmN0aW9uIFViKHQpe2NvbnN0IGU9aWEoKSxuPWFhKCksbz1PYSgpO1BhKG8rMSk7Y29uc3QgaT1YYihuLG8pO2lmKHQuZGlydHkmJkppKGUpPT09KDI9PSgyJmkubWV0YWRhdGEuZmxhZ3MpKSl7aWYobnVsbD09PWkubWF0Y2hlcyl0LnJlc2V0KFtdKTtlbHNle2NvbnN0IGE9aS5jcm9zc2VzTmdUZW1wbGF0ZT9qYihuLGUsbyxbXSk6VmIobixlLGksbyk7dC5yZXNldChhLGRoKSx0Lm5vdGlmeU9uQ2hhbmdlcygpfXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIFdiKHQsZSxuKXtuZ0Rldk1vZGUmJlluKGUsIkV4cGVjdGluZyBmbGFncyIpO2NvbnN0IG89YWEoKTtvLmZpcnN0Q3JlYXRlUGFzcyYmKFpiKG8sbmV3IHpiKHQsZSxuKSwtMSksMj09KDImZSkmJihvLnN0YXRpY1ZpZXdRdWVyaWVzPSEwKSkscWIobyxpYSgpLGUpfWZ1bmN0aW9uIEdiKHQsZSxuLG8pe25nRGV2TW9kZSYmWW4obiwiRXhwZWN0aW5nIGZsYWdzIik7Y29uc3QgaT1hYSgpO2lmKGkuZmlyc3RDcmVhdGVQYXNzKXtjb25zdCBhPXNhKCk7WmIoaSxuZXcgemIoZSxuLG8pLGEuaW5kZXgpLChmdW5jdGlvbiBhKHQsZSl7Y29uc3Qgbj10LmNvbnRlbnRRdWVyaWVzfHwodC5jb250ZW50UXVlcmllcz1bXSk7ZSE9PShuLmxlbmd0aD9uW24ubGVuZ3RoLTFdOi0xKSYmbi5wdXNoKHQucXVlcmllcy5sZW5ndGgtMSxlKX0pKGksdCksMj09KDImbikmJihpLnN0YXRpY0NvbnRlbnRRdWVyaWVzPSEwKX1xYihpLGlhKCksbil9ZnVuY3Rpb24gWWIoKXtyZXR1cm4oZnVuY3Rpb24gdChlLG4pe3JldHVybiBuZ0Rldk1vZGUmJm9vKGVbMTldLCJMUXVlcmllcyBzaG91bGQgYmUgZGVmaW5lZCB3aGVuIHRyeWluZyB0byBsb2FkIGEgcXVlcnkiKSxuZ0Rldk1vZGUmJnJvKGVbMTldLnF1ZXJpZXMsbiksZVsxOV0ucXVlcmllc1tuXS5xdWVyeUxpc3R9KShpYSgpLE9hKCkpfWZ1bmN0aW9uIHFiKHQsZSxuKXtjb25zdCBvPW5ldyBUYig0PT0oNCZuKSk7SmQodCxlLG8sby5kZXN0cm95KSxudWxsPT09ZVsxOV0mJihlWzE5XT1uZXcgSWIpLGVbMTldLnF1ZXJpZXMucHVzaChuZXcgTmIobykpfWZ1bmN0aW9uIFpiKHQsZSxuKXtudWxsPT09dC5xdWVyaWVzJiYodC5xdWVyaWVzPW5ldyBIYiksdC5xdWVyaWVzLnRyYWNrKG5ldyBGYihlLG4pKX1mdW5jdGlvbiBYYih0LGUpe3JldHVybiBuZ0Rldk1vZGUmJm9vKHQucXVlcmllcywiVFF1ZXJpZXMgbXVzdCBiZSBkZWZpbmVkIHRvIHJldHJpZXZlIGEgVFF1ZXJ5IiksdC5xdWVyaWVzLmdldEJ5SW5kZXgoZSl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIEtiKHQsZSl7cmV0dXJuIHFoKHQsZSl9ZnVuY3Rpb24gSmIodD15by5EZWZhdWx0KXtjb25zdCBlPUZoKCEwKTtpZihudWxsIT1lfHx0JnlvLk9wdGlvbmFsKXJldHVybiBlO0duKCJDaGFuZ2VEZXRlY3RvclJlZiIpfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY29uc3QgUWI9eyLJtcm1YXR0cmlidXRlIjpObSwiybXJtWF0dHJpYnV0ZUludGVycG9sYXRlMSI6ZnVuY3Rpb24gdChlLG4sbyxpLGEscil7Y29uc3Qgcz1pYSgpLGw9em0ocyxuLG8saSk7aWYobCE9PUtjKXtjb25zdCB0PXphKCk7cHAodCxzLGUsbCxhLHIpLG5nRGV2TW9kZSYmd3AoYWEoKS5kYXRhLHQsImF0dHIuIitlLGhhKCktMSxuLGkpfXJldHVybiB0fSwiybXJtWF0dHJpYnV0ZUludGVycG9sYXRlMiI6ZnVuY3Rpb24gdChlLG4sbyxpLGEscixzLGwpe2NvbnN0IGM9aWEoKSxkPUhtKGMsbixvLGksYSxyKTtpZihkIT09S2Mpe2NvbnN0IHQ9emEoKTtwcCh0LGMsZSxkLHMsbCksbmdEZXZNb2RlJiZ3cChhYSgpLmRhdGEsdCwiYXR0ci4iK2UsaGEoKS0yLG4saSxyKX1yZXR1cm4gdH0sIsm1ybVhdHRyaWJ1dGVJbnRlcnBvbGF0ZTMiOmZ1bmN0aW9uIHQoZSxuLG8saSxhLHIscyxsLGMsZCl7Y29uc3QgcD1pYSgpLG09Rm0ocCxuLG8saSxhLHIscyxsKTtpZihtIT09S2Mpe2NvbnN0IHQ9emEoKTtwcCh0LHAsZSxtLGMsZCksbmdEZXZNb2RlJiZ3cChhYSgpLmRhdGEsdCwiYXR0ci4iK2UsaGEoKS0zLG4saSxyLGwpfXJldHVybiB0fSwiybXJtWF0dHJpYnV0ZUludGVycG9sYXRlNCI6ZnVuY3Rpb24gdChlLG4sbyxpLGEscixzLGwsYyxkLHAsbSl7Y29uc3QgdT1pYSgpLGY9TG0odSxuLG8saSxhLHIscyxsLGMsZCk7aWYoZiE9PUtjKXtjb25zdCB0PXphKCk7cHAodCx1LGUsZixwLG0pLG5nRGV2TW9kZSYmd3AoYWEoKS5kYXRhLHQsImF0dHIuIitlLGhhKCktNCxuLGkscixsLGQpfXJldHVybiB0fSwiybXJtWF0dHJpYnV0ZUludGVycG9sYXRlNSI6ZnVuY3Rpb24gdChlLG4sbyxpLGEscixzLGwsYyxkLHAsbSx1LGYpe2NvbnN0IGc9aWEoKSxoPUJtKGcsbixvLGksYSxyLHMsbCxjLGQscCxtKTtpZihoIT09S2Mpe2NvbnN0IHQ9emEoKTtwcCh0LGcsZSxoLHUsZiksbmdEZXZNb2RlJiZ3cChhYSgpLmRhdGEsdCwiYXR0ci4iK2UsaGEoKS01LG4saSxyLGwsZCxtKX1yZXR1cm4gdH0sIsm1ybVhdHRyaWJ1dGVJbnRlcnBvbGF0ZTYiOmZ1bmN0aW9uIHQoZSxuLG8saSxhLHIscyxsLGMsZCxwLG0sdSxmLGcsaCl7Y29uc3QgYj1pYSgpLHk9Vm0oYixuLG8saSxhLHIscyxsLGMsZCxwLG0sdSxmKTtpZih5IT09S2Mpe2NvbnN0IHQ9emEoKTtwcCh0LGIsZSx5LGcsaCksbmdEZXZNb2RlJiZ3cChhYSgpLmRhdGEsdCwiYXR0ci4iK2UsaGEoKS02LG4saSxyLGwsZCxtLGYpfXJldHVybiB0fSwiybXJtWF0dHJpYnV0ZUludGVycG9sYXRlNyI6ZnVuY3Rpb24gdChlLG4sbyxpLGEscixzLGwsYyxkLHAsbSx1LGYsZyxoLGIseSl7Y29uc3QgXz1pYSgpLEM9am0oXyxuLG8saSxhLHIscyxsLGMsZCxwLG0sdSxmLGcsaCk7aWYoQyE9PUtjKXtjb25zdCB0PXphKCk7cHAodCxfLGUsQyxiLHkpLG5nRGV2TW9kZSYmd3AoYWEoKS5kYXRhLHQsImF0dHIuIitlLGhhKCktNyxuLGkscixsLGQsbSxmLGgpfXJldHVybiB0fSwiybXJtWF0dHJpYnV0ZUludGVycG9sYXRlOCI6ZnVuY3Rpb24gdChlLG4sbyxpLGEscixzLGwsYyxkLHAsbSx1LGYsZyxoLGIseSxfLEMpe2NvbnN0IE09aWEoKSx2PVVtKE0sbixvLGksYSxyLHMsbCxjLGQscCxtLHUsZixnLGgsYix5KTtpZih2IT09S2Mpe2NvbnN0IHQ9emEoKTtwcCh0LE0sZSx2LF8sQyksbmdEZXZNb2RlJiZ3cChhYSgpLmRhdGEsdCwiYXR0ci4iK2UsaGEoKS04LG4saSxyLGwsZCxtLGYsaCx5KX1yZXR1cm4gdH0sIsm1ybVhdHRyaWJ1dGVJbnRlcnBvbGF0ZVYiOmZ1bmN0aW9uIHQoZSxuLG8saSl7Y29uc3QgYT1pYSgpLHI9SW0oYSxuKTtpZihyIT09S2Mpe2NvbnN0IHQ9emEoKTtpZihwcCh0LGEsZSxyLG8saSksbmdEZXZNb2RlKXtjb25zdCBvPVtuWzBdXTtmb3IobGV0IHQ9Mjt0PG4ubGVuZ3RoO3QrPTIpby5wdXNoKG5bdF0pO3dwKGFhKCkuZGF0YSx0LCJhdHRyLiIrZSxoYSgpLW8ubGVuZ3RoKzEsLi4ubyl9fXJldHVybiB0fSwiybXJtWRlZmluZUNvbXBvbmVudCI6VW8sIsm1ybVkZWZpbmVEaXJlY3RpdmUiOkpvLCLJtcm1ZGVmaW5lSW5qZWN0YWJsZSI6bG8sIsm1ybVkZWZpbmVJbmplY3RvciI6Y28sIsm1ybVkZWZpbmVOZ01vZHVsZSI6Wm8sIsm1ybVkZWZpbmVQaXBlIjpRbywiybXJtWRpcmVjdGl2ZUluamVjdCI6TXUsIsm1ybVnZXRJbmhlcml0ZWRGYWN0b3J5Ijp2ciwiybXJtWluamVjdCI6dXMsIsm1ybVpbmplY3RBdHRyaWJ1dGUiOk9yLCLJtcm1aW52YWxpZEZhY3RvcnkiOmZ1bmN0aW9uICRiKCl7Y29uc3QgdD1uZ0Rldk1vZGU/IlRoaXMgY29uc3RydWN0b3Igd2FzIG5vdCBjb21wYXRpYmxlIHdpdGggRGVwZW5kZW5jeSBJbmplY3Rpb24uIjoiaW52YWxpZCI7dGhyb3cgbmV3IEVycm9yKHQpfSwiybXJtWludmFsaWRGYWN0b3J5RGVwIjpmcywiybXJtWluamVjdFBpcGVDaGFuZ2VEZXRlY3RvclJlZiI6SmIsIsm1ybV0ZW1wbGF0ZVJlZkV4dHJhY3RvciI6S2IsIsm1ybVOZ09uQ2hhbmdlc0ZlYXR1cmUiOlNpLCLJtcm1UHJvdmlkZXJzRmVhdHVyZSI6aWgsIsm1ybVDb3B5RGVmaW5pdGlvbkZlYXR1cmUiOmZ1bmN0aW9uIHR5KHQpe2xldCBlLG49Zm0odC50eXBlKTtlPXBpKHQpP24uybVjbXA6bi7JtWRpcjtjb25zdCBvPXQ7Zm9yKGNvbnN0IHQgb2YgQ20pb1t0XT1lW3RdO2lmKHBpKGUpKWZvcihjb25zdCB0IG9mIE1tKW9bdF09ZVt0XX0sIsm1ybVJbmhlcml0RGVmaW5pdGlvbkZlYXR1cmUiOmdtLCLJtcm1bmV4dENvbnRleHQiOkx1LCLJtcm1bmFtZXNwYWNlSFRNTCI6RmEsIsm1ybVuYW1lc3BhY2VNYXRoTUwiOmZ1bmN0aW9uIGV5KCl7bmEubEZyYW1lLmN1cnJlbnROYW1lc3BhY2U9SGl9LCLJtcm1bmFtZXNwYWNlU1ZHIjpIYSwiybXJtWVuYWJsZUJpbmRpbmdzIjpmdW5jdGlvbiBueSgpe25hLmJpbmRpbmdzRW5hYmxlZD0hMH0sIsm1ybVkaXNhYmxlQmluZGluZ3MiOmZ1bmN0aW9uIG95KCl7bmEuYmluZGluZ3NFbmFibGVkPSExfSwiybXJtWVsZW1lbnRTdGFydCI6T3UsIsm1ybVlbGVtZW50RW5kIjpQdSwiybXJtWVsZW1lbnQiOnd1LCLJtcm1ZWxlbWVudENvbnRhaW5lclN0YXJ0IjprdSwiybXJtWVsZW1lbnRDb250YWluZXJFbmQiOlN1LCLJtcm1ZWxlbWVudENvbnRhaW5lciI6RHUsIsm1ybVwdXJlRnVuY3Rpb24wIjpmYiwiybXJtXB1cmVGdW5jdGlvbjEiOmdiLCLJtcm1cHVyZUZ1bmN0aW9uMiI6aGIsIsm1ybVwdXJlRnVuY3Rpb24zIjpiYiwiybXJtXB1cmVGdW5jdGlvbjQiOmZ1bmN0aW9uIGl5KHQsZSxuLG8saSxhLHIpe3JldHVybiB2YihpYSgpLGdhKCksdCxlLG4sbyxpLGEscil9LCLJtcm1cHVyZUZ1bmN0aW9uNSI6ZnVuY3Rpb24gYXkodCxlLG4sbyxpLGEscixzKXtjb25zdCBsPWdhKCkrdCxjPWlhKCksZD1UbShjLGwsbixvLGksYSk7cmV0dXJuIEVtKGMsbCs0LHIpfHxkP1NtKGMsbCs1LHM/ZS5jYWxsKHMsbixvLGksYSxyKTplKG4sbyxpLGEscikpOkRtKGMsbCs1KX0sIsm1ybVwdXJlRnVuY3Rpb242IjpmdW5jdGlvbiByeSh0LGUsbixvLGksYSxyLHMsbCl7Y29uc3QgYz1nYSgpK3QsZD1pYSgpLHA9VG0oZCxjLG4sbyxpLGEpO3JldHVybiBBbShkLGMrNCxyLHMpfHxwP1NtKGQsYys2LGw/ZS5jYWxsKGwsbixvLGksYSxyLHMpOmUobixvLGksYSxyLHMpKTpEbShkLGMrNil9LCLJtcm1cHVyZUZ1bmN0aW9uNyI6ZnVuY3Rpb24gc3kodCxlLG4sbyxpLGEscixzLGwsYyl7Y29uc3QgZD1nYSgpK3QscD1pYSgpO2xldCBtPVRtKHAsZCxuLG8saSxhKTtyZXR1cm4gUm0ocCxkKzQscixzLGwpfHxtP1NtKHAsZCs3LGM/ZS5jYWxsKGMsbixvLGksYSxyLHMsbCk6ZShuLG8saSxhLHIscyxsKSk6RG0ocCxkKzcpfSwiybXJtXB1cmVGdW5jdGlvbjgiOmZ1bmN0aW9uIGx5KHQsZSxuLG8saSxhLHIscyxsLGMsZCl7Y29uc3QgcD1nYSgpK3QsbT1pYSgpLHU9VG0obSxwLG4sbyxpLGEpO3JldHVybiBUbShtLHArNCxyLHMsbCxjKXx8dT9TbShtLHArOCxkP2UuY2FsbChkLG4sbyxpLGEscixzLGwsYyk6ZShuLG8saSxhLHIscyxsLGMpKTpEbShtLHArOCl9LCLJtcm1cHVyZUZ1bmN0aW9uViI6ZnVuY3Rpb24gY3kodCxlLG4sbyl7cmV0dXJuIHhiKGlhKCksZ2EoKSx0LGUsbixvKX0sIsm1ybVnZXRDdXJyZW50VmlldyI6RXUsIsm1ybVyZXN0b3JlVmlldyI6cmEsIsm1ybVsaXN0ZW5lciI6TnUsIsm1ybVwcm9qZWN0aW9uIjpqdSwiybXJtXN5bnRoZXRpY0hvc3RQcm9wZXJ0eSI6U2YsIsm1ybVzeW50aGV0aWNIb3N0TGlzdGVuZXIiOkl1LCLJtcm1cGlwZUJpbmQxIjpQYiwiybXJtXBpcGVCaW5kMiI6d2IsIsm1ybVwaXBlQmluZDMiOmtiLCLJtcm1cGlwZUJpbmQ0IjpmdW5jdGlvbiBkeSh0LGUsbixvLGksYSl7Y29uc3Qgcj10K29pLHM9aWEoKSxsPXFpKHMscik7cmV0dXJuIERiKHMsU2IocyxyKT92YihzLGdhKCksZSxsLnRyYW5zZm9ybSxuLG8saSxhLGwpOmwudHJhbnNmb3JtKG4sbyxpLGEpKX0sIsm1ybVwaXBlQmluZFYiOmZ1bmN0aW9uIHB5KHQsZSxuKXtjb25zdCBvPXQrb2ksaT1pYSgpLGE9cWkoaSxvKTtyZXR1cm4gRGIoaSxTYihpLG8pP3hiKGksZ2EoKSxlLGEudHJhbnNmb3JtLG4sYSk6YS50cmFuc2Zvcm0uYXBwbHkoYSxuKSl9LCLJtcm1cHJvamVjdGlvbkRlZiI6VnUsIsm1ybVob3N0UHJvcGVydHkiOmtmLCLJtcm1cHJvcGVydHkiOnZ1LCLJtcm1cHJvcGVydHlJbnRlcnBvbGF0ZSI6VXUsIsm1ybVwcm9wZXJ0eUludGVycG9sYXRlMSI6V3UsIsm1ybVwcm9wZXJ0eUludGVycG9sYXRlMiI6ZnVuY3Rpb24gdChlLG4sbyxpLGEscixzKXtjb25zdCBsPWlhKCksYz1IbShsLG4sbyxpLGEscik7aWYoYyE9PUtjKXtjb25zdCB0PWFhKCksbz16YSgpOyRkKHQsbyxsLGUsYyxsWzExXSxzLCExKSxuZ0Rldk1vZGUmJndwKHQuZGF0YSxvLGUsaGEoKS0yLG4saSxyKX1yZXR1cm4gdH0sIsm1ybVwcm9wZXJ0eUludGVycG9sYXRlMyI6ZnVuY3Rpb24gdChlLG4sbyxpLGEscixzLGwsYyl7Y29uc3QgZD1pYSgpLHA9Rm0oZCxuLG8saSxhLHIscyxsKTtpZihwIT09S2Mpe2NvbnN0IHQ9YWEoKSxvPXphKCk7JGQodCxvLGQsZSxwLGRbMTFdLGMsITEpLG5nRGV2TW9kZSYmd3AodC5kYXRhLG8sZSxoYSgpLTMsbixpLHIsbCl9cmV0dXJuIHR9LCLJtcm1cHJvcGVydHlJbnRlcnBvbGF0ZTQiOmZ1bmN0aW9uIHQoZSxuLG8saSxhLHIscyxsLGMsZCxwKXtjb25zdCBtPWlhKCksdT1MbShtLG4sbyxpLGEscixzLGwsYyxkKTtpZih1IT09S2Mpe2NvbnN0IHQ9YWEoKSxvPXphKCk7JGQodCxvLG0sZSx1LG1bMTFdLHAsITEpLG5nRGV2TW9kZSYmd3AodC5kYXRhLG8sZSxoYSgpLTQsbixpLHIsbCxkKX1yZXR1cm4gdH0sIsm1ybVwcm9wZXJ0eUludGVycG9sYXRlNSI6ZnVuY3Rpb24gdChlLG4sbyxpLGEscixzLGwsYyxkLHAsbSx1KXtjb25zdCBmPWlhKCksZz1CbShmLG4sbyxpLGEscixzLGwsYyxkLHAsbSk7aWYoZyE9PUtjKXtjb25zdCB0PWFhKCksbz16YSgpOyRkKHQsbyxmLGUsZyxmWzExXSx1LCExKSxuZ0Rldk1vZGUmJndwKHQuZGF0YSxvLGUsaGEoKS01LG4saSxyLGwsZCxtKX1yZXR1cm4gdH0sIsm1ybVwcm9wZXJ0eUludGVycG9sYXRlNiI6ZnVuY3Rpb24gdChlLG4sbyxpLGEscixzLGwsYyxkLHAsbSx1LGYsZyl7Y29uc3QgaD1pYSgpLGI9Vm0oaCxuLG8saSxhLHIscyxsLGMsZCxwLG0sdSxmKTtpZihiIT09S2Mpe2NvbnN0IHQ9YWEoKSxvPXphKCk7JGQodCxvLGgsZSxiLGhbMTFdLGcsITEpLG5nRGV2TW9kZSYmd3AodC5kYXRhLG8sZSxoYSgpLTYsbixpLHIsbCxkLG0sZil9cmV0dXJuIHR9LCLJtcm1cHJvcGVydHlJbnRlcnBvbGF0ZTciOmZ1bmN0aW9uIHQoZSxuLG8saSxhLHIscyxsLGMsZCxwLG0sdSxmLGcsaCxiKXtjb25zdCB5PWlhKCksXz1qbSh5LG4sbyxpLGEscixzLGwsYyxkLHAsbSx1LGYsZyxoKTtpZihfIT09S2Mpe2NvbnN0IHQ9YWEoKSxvPXphKCk7JGQodCxvLHksZSxfLHlbMTFdLGIsITEpLG5nRGV2TW9kZSYmd3AodC5kYXRhLG8sZSxoYSgpLTcsbixpLHIsbCxkLG0sZixoKX1yZXR1cm4gdH0sIsm1ybVwcm9wZXJ0eUludGVycG9sYXRlOCI6ZnVuY3Rpb24gdChlLG4sbyxpLGEscixzLGwsYyxkLHAsbSx1LGYsZyxoLGIseSxfKXtjb25zdCBDPWlhKCksTT1VbShDLG4sbyxpLGEscixzLGwsYyxkLHAsbSx1LGYsZyxoLGIseSk7aWYoTSE9PUtjKXtjb25zdCB0PWFhKCksbz16YSgpOyRkKHQsbyxDLGUsTSxDWzExXSxfLCExKSxuZ0Rldk1vZGUmJndwKHQuZGF0YSxvLGUsaGEoKS04LG4saSxyLGwsZCxtLGYsaCx5KX1yZXR1cm4gdH0sIsm1ybVwcm9wZXJ0eUludGVycG9sYXRlViI6ZnVuY3Rpb24gdChlLG4sbyl7Y29uc3QgaT1pYSgpLGE9SW0oaSxuKTtpZihhIT09S2Mpe2NvbnN0IHQ9YWEoKSxyPXphKCk7aWYoJGQodCxyLGksZSxhLGlbMTFdLG8sITEpLG5nRGV2TW9kZSl7Y29uc3Qgbz1bblswXV07Zm9yKGxldCB0PTI7dDxuLmxlbmd0aDt0Kz0yKW8ucHVzaChuW3RdKTt3cCh0LmRhdGEscixlLGhhKCktby5sZW5ndGgrMSwuLi5vKX19cmV0dXJuIHR9LCLJtcm1cGlwZSI6T2IsIsm1ybVxdWVyeVJlZnJlc2giOlViLCLJtcm1dmlld1F1ZXJ5IjpXYiwiybXJtWxvYWRRdWVyeSI6WWIsIsm1ybVjb250ZW50UXVlcnkiOkdiLCLJtcm1cmVmZXJlbmNlIjpHbSwiybXJtWNsYXNzTWFwIjpsZiwiybXJtWNsYXNzTWFwSW50ZXJwb2xhdGUxIjp3ZiwiybXJtWNsYXNzTWFwSW50ZXJwb2xhdGUyIjpmdW5jdGlvbiBteSh0LGUsbixvLGkpe3BmKEtyLGNmLEhtKGlhKCksdCxlLG4sbyxpKSwhMCl9LCLJtcm1Y2xhc3NNYXBJbnRlcnBvbGF0ZTMiOmZ1bmN0aW9uIHV5KHQsZSxuLG8saSxhLHIpe3BmKEtyLGNmLEZtKGlhKCksdCxlLG4sbyxpLGEsciksITApfSwiybXJtWNsYXNzTWFwSW50ZXJwb2xhdGU0IjpmdW5jdGlvbiBmeSh0LGUsbixvLGksYSxyLHMsbCl7cGYoS3IsY2YsTG0oaWEoKSx0LGUsbixvLGksYSxyLHMsbCksITApfSwiybXJtWNsYXNzTWFwSW50ZXJwb2xhdGU1IjpmdW5jdGlvbiBneSh0LGUsbixvLGksYSxyLHMsbCxjLGQpe3BmKEtyLGNmLEJtKGlhKCksdCxlLG4sbyxpLGEscixzLGwsYyxkKSwhMCl9LCLJtcm1Y2xhc3NNYXBJbnRlcnBvbGF0ZTYiOmZ1bmN0aW9uIGh5KHQsZSxuLG8saSxhLHIscyxsLGMsZCxwLG0pe3BmKEtyLGNmLFZtKGlhKCksdCxlLG4sbyxpLGEscixzLGwsYyxkLHAsbSksITApfSwiybXJtWNsYXNzTWFwSW50ZXJwb2xhdGU3IjpmdW5jdGlvbiBieSh0LGUsbixvLGksYSxyLHMsbCxjLGQscCxtLHUsZil7cGYoS3IsY2Ysam0oaWEoKSx0LGUsbixvLGksYSxyLHMsbCxjLGQscCxtLHUsZiksITApfSwiybXJtWNsYXNzTWFwSW50ZXJwb2xhdGU4IjpmdW5jdGlvbiB5eSh0LGUsbixvLGksYSxyLHMsbCxjLGQscCxtLHUsZixnLGgpe3BmKEtyLGNmLFVtKGlhKCksdCxlLG4sbyxpLGEscixzLGwsYyxkLHAsbSx1LGYsZyxoKSwhMCl9LCLJtcm1Y2xhc3NNYXBJbnRlcnBvbGF0ZVYiOmZ1bmN0aW9uIF95KHQpe3BmKEtyLGNmLEltKGlhKCksdCksITApfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8sIsm1ybVzdHlsZU1hcCI6cmYsIsm1ybVzdHlsZU1hcEludGVycG9sYXRlMSI6ZnVuY3Rpb24gQ3kodCxlLG4pe3JmKHptKGlhKCksdCxlLG4pKX0sIsm1ybVzdHlsZU1hcEludGVycG9sYXRlMiI6ZnVuY3Rpb24gTXkodCxlLG4sbyxpKXtyZihIbShpYSgpLHQsZSxuLG8saSkpfSwiybXJtXN0eWxlTWFwSW50ZXJwb2xhdGUzIjpmdW5jdGlvbiB2eSh0LGUsbixvLGksYSxyKXtyZihGbShpYSgpLHQsZSxuLG8saSxhLHIpKX0sIsm1ybVzdHlsZU1hcEludGVycG9sYXRlNCI6ZnVuY3Rpb24geHkodCxlLG4sbyxpLGEscixzLGwpe3JmKExtKGlhKCksdCxlLG4sbyxpLGEscixzLGwpKX0sIsm1ybVzdHlsZU1hcEludGVycG9sYXRlNSI6ZnVuY3Rpb24gT3kodCxlLG4sbyxpLGEscixzLGwsYyxkKXtyZihCbShpYSgpLHQsZSxuLG8saSxhLHIscyxsLGMsZCkpfSwiybXJtXN0eWxlTWFwSW50ZXJwb2xhdGU2IjpmdW5jdGlvbiBQeSh0LGUsbixvLGksYSxyLHMsbCxjLGQscCxtKXtyZihWbShpYSgpLHQsZSxuLG8saSxhLHIscyxsLGMsZCxwLG0pKX0sIsm1ybVzdHlsZU1hcEludGVycG9sYXRlNyI6ZnVuY3Rpb24gd3kodCxlLG4sbyxpLGEscixzLGwsYyxkLHAsbSx1LGYpe3JmKGptKGlhKCksdCxlLG4sbyxpLGEscixzLGwsYyxkLHAsbSx1LGYpKX0sIsm1ybVzdHlsZU1hcEludGVycG9sYXRlOCI6ZnVuY3Rpb24ga3kodCxlLG4sbyxpLGEscixzLGwsYyxkLHAsbSx1LGYsZyxoKXtyZihVbShpYSgpLHQsZSxuLG8saSxhLHIscyxsLGMsZCxwLG0sdSxmLGcsaCkpfSwiybXJtXN0eWxlTWFwSW50ZXJwb2xhdGVWIjpmdW5jdGlvbiBTeSh0KXtyZihJbShpYSgpLHQpKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovLCLJtcm1c3R5bGVQcm9wIjpvZiwiybXJtXN0eWxlUHJvcEludGVycG9sYXRlMSI6ZnVuY3Rpb24gdChlLG4sbyxpLGEpe3JldHVybiBkZihlLHptKGlhKCksbixvLGkpLGEsITEpLHR9LCLJtcm1c3R5bGVQcm9wSW50ZXJwb2xhdGUyIjpmdW5jdGlvbiB0KGUsbixvLGksYSxyLHMpe3JldHVybiBkZihlLEhtKGlhKCksbixvLGksYSxyKSxzLCExKSx0fSwiybXJtXN0eWxlUHJvcEludGVycG9sYXRlMyI6ZnVuY3Rpb24gdChlLG4sbyxpLGEscixzLGwsYyl7cmV0dXJuIGRmKGUsRm0oaWEoKSxuLG8saSxhLHIscyxsKSxjLCExKSx0fSwiybXJtXN0eWxlUHJvcEludGVycG9sYXRlNCI6ZnVuY3Rpb24gdChlLG4sbyxpLGEscixzLGwsYyxkLHApe3JldHVybiBkZihlLExtKGlhKCksbixvLGksYSxyLHMsbCxjLGQpLHAsITEpLHR9LCLJtcm1c3R5bGVQcm9wSW50ZXJwb2xhdGU1IjpmdW5jdGlvbiB0KGUsbixvLGksYSxyLHMsbCxjLGQscCxtLHUpe3JldHVybiBkZihlLEJtKGlhKCksbixvLGksYSxyLHMsbCxjLGQscCxtKSx1LCExKSx0fSwiybXJtXN0eWxlUHJvcEludGVycG9sYXRlNiI6ZnVuY3Rpb24gdChlLG4sbyxpLGEscixzLGwsYyxkLHAsbSx1LGYsZyl7cmV0dXJuIGRmKGUsVm0oaWEoKSxuLG8saSxhLHIscyxsLGMsZCxwLG0sdSxmKSxnLCExKSx0fSwiybXJtXN0eWxlUHJvcEludGVycG9sYXRlNyI6ZnVuY3Rpb24gdChlLG4sbyxpLGEscixzLGwsYyxkLHAsbSx1LGYsZyxoLGIpe3JldHVybiBkZihlLGptKGlhKCksbixvLGksYSxyLHMsbCxjLGQscCxtLHUsZixnLGgpLGIsITEpLHR9LCLJtcm1c3R5bGVQcm9wSW50ZXJwb2xhdGU4IjpmdW5jdGlvbiB0KGUsbixvLGksYSxyLHMsbCxjLGQscCxtLHUsZixnLGgsYix5LF8pe3JldHVybiBkZihlLFVtKGlhKCksbixvLGksYSxyLHMsbCxjLGQscCxtLHUsZixnLGgsYix5KSxfLCExKSx0fSwiybXJtXN0eWxlUHJvcEludGVycG9sYXRlViI6ZnVuY3Rpb24gdChlLG4sbyl7cmV0dXJuIGRmKGUsSW0oaWEoKSxuKSxvLCExKSx0fSwiybXJtWNsYXNzUHJvcCI6YWYsIsm1ybVhZHZhbmNlIjpKYywiybXJtXRlbXBsYXRlIjpXbSwiybXJtXRleHQiOk1mLCLJtcm1dGV4dEludGVycG9sYXRlIjp2ZiwiybXJtXRleHRJbnRlcnBvbGF0ZTEiOnhmLCLJtcm1dGV4dEludGVycG9sYXRlMiI6T2YsIsm1ybV0ZXh0SW50ZXJwb2xhdGUzIjpQZiwiybXJtXRleHRJbnRlcnBvbGF0ZTQiOmZ1bmN0aW9uIHQoZSxuLG8saSxhLHIscyxsLGMpe2NvbnN0IGQ9aWEoKSxwPUxtKGQsZSxuLG8saSxhLHIscyxsLGMpO3JldHVybiBwIT09S2MmJlRwKGQsTmEoKSxwKSx0fSwiybXJtXRleHRJbnRlcnBvbGF0ZTUiOmZ1bmN0aW9uIHQoZSxuLG8saSxhLHIscyxsLGMsZCxwKXtjb25zdCBtPWlhKCksdT1CbShtLGUsbixvLGksYSxyLHMsbCxjLGQscCk7cmV0dXJuIHUhPT1LYyYmVHAobSxOYSgpLHUpLHR9LCLJtcm1dGV4dEludGVycG9sYXRlNiI6ZnVuY3Rpb24gdChlLG4sbyxpLGEscixzLGwsYyxkLHAsbSx1KXtjb25zdCBmPWlhKCksZz1WbShmLGUsbixvLGksYSxyLHMsbCxjLGQscCxtLHUpO3JldHVybiBnIT09S2MmJlRwKGYsTmEoKSxnKSx0fSwiybXJtXRleHRJbnRlcnBvbGF0ZTciOmZ1bmN0aW9uIHQoZSxuLG8saSxhLHIscyxsLGMsZCxwLG0sdSxmLGcpe2NvbnN0IGg9aWEoKSxiPWptKGgsZSxuLG8saSxhLHIscyxsLGMsZCxwLG0sdSxmLGcpO3JldHVybiBiIT09S2MmJlRwKGgsTmEoKSxiKSx0fSwiybXJtXRleHRJbnRlcnBvbGF0ZTgiOmZ1bmN0aW9uIHQoZSxuLG8saSxhLHIscyxsLGMsZCxwLG0sdSxmLGcsaCxiKXtjb25zdCB5PWlhKCksXz1VbSh5LGUsbixvLGksYSxyLHMsbCxjLGQscCxtLHUsZixnLGgsYik7cmV0dXJuIF8hPT1LYyYmVHAoeSxOYSgpLF8pLHR9LCLJtcm1dGV4dEludGVycG9sYXRlViI6ZnVuY3Rpb24gdChlKXtjb25zdCBuPWlhKCksbz1JbShuLGUpO3JldHVybiBvIT09S2MmJlRwKG4sTmEoKSxvKSx0fSwiybXJtWkxOG4iOnFnLCLJtcm1aTE4bkF0dHJpYnV0ZXMiOmZ1bmN0aW9uIER5KHQsZSl7Y29uc3Qgbj1hYSgpO25nRGV2TW9kZSYmb28obiwidFZpZXcgc2hvdWxkIGJlIGRlZmluZWQiKTtjb25zdCBvPSRpKG4uY29uc3RzLGUpOyEoZnVuY3Rpb24gaSh0LGUsbil7Y29uc3Qgbz1zYSgpLmluZGV4LGk9W107aWYobmdEZXZNb2RlJiZsZChpLG1nKSx0LmZpcnN0Q3JlYXRlUGFzcyYmbnVsbD09PXQuZGF0YVtlXSl7Zm9yKGxldCB0PTA7dDxuLmxlbmd0aDt0Kz0yKXtjb25zdCBlPW5bdF0sYT1uW3QrMV07aWYoIiIhPT1hKXtpZihiZy50ZXN0KGEpKXRocm93IG5ldyBFcnJvcihgSUNVIGV4cHJlc3Npb25zIGFyZSBub3Qgc3VwcG9ydGVkIGluIGF0dHJpYnV0ZXMuIE1lc3NhZ2U6ICIke2F9Ii5gKTtQZyhpLGEsbyxlLHdnKGkpLG51bGwpfX10LmRhdGFbZV09aX19KShuLHQrb2ksbyl9LCLJtcm1aTE4bkV4cCI6WmcsIsm1ybVpMThuU3RhcnQiOkdnLCLJtcm1aTE4bkVuZCI6WWcsIsm1ybVpMThuQXBwbHkiOlhnLCLJtcm1aTE4blBvc3Rwcm9jZXNzIjpLZywiybXJtXJlc29sdmVXaW5kb3ciOnFsLCLJtcm1cmVzb2x2ZURvY3VtZW50IjpabCwiybXJtXJlc29sdmVCb2R5IjpYbCwiybXJtXNldENvbXBvbmVudFNjb3BlIjpXbywiybXJtXNldE5nTW9kdWxlU2NvcGUiOlhvLCLJtcm1c2FuaXRpemVIdG1sIjoKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmZ1bmN0aW9uIEV5KHQpe2NvbnN0IGU9d2woKTtyZXR1cm4gZT96cyhlLnNhbml0aXplKHhsLkhUTUwsdCl8fCIiKTpZcyh0LCJIVE1MIik/enMoR3ModCkpOk1sKExpKCksVm4odCkpfSwiybXJtXNhbml0aXplU3R5bGUiOmZ1bmN0aW9uIEF5KHQpe2NvbnN0IGU9d2woKTtyZXR1cm4gZT9lLnNhbml0aXplKHhsLlNUWUxFLHQpfHwiIjpZcyh0LCJTdHlsZSIpP0dzKHQpOlZuKHQpfSwiybXJtXNhbml0aXplUmVzb3VyY2VVcmwiOlBsLCLJtcm1c2FuaXRpemVTY3JpcHQiOmZ1bmN0aW9uIFJ5KHQpe2NvbnN0IGU9d2woKTtpZihlKXJldHVybiBIcyhlLnNhbml0aXplKHhsLlNDUklQVCx0KXx8IiIpO2lmKFlzKHQsIlNjcmlwdCIpKXJldHVybiBIcyhHcyh0KSk7dGhyb3cgbmV3IEVycm9yKCJ1bnNhZmUgdmFsdWUgdXNlZCBpbiBhIHNjcmlwdCBjb250ZXh0Iil9LCLJtcm1c2FuaXRpemVVcmwiOk9sLCLJtcm1c2FuaXRpemVVcmxPclJlc291cmNlVXJsIjpmdW5jdGlvbiBUeSh0LGUsbil7cmV0dXJuKGZ1bmN0aW9uIG8odCxlKXtyZXR1cm4ic3JjIj09PWUmJigiZW1iZWQiPT09dHx8ImZyYW1lIj09PXR8fCJpZnJhbWUiPT09dHx8Im1lZGlhIj09PXR8fCJzY3JpcHQiPT09dCl8fCJocmVmIj09PWUmJigiYmFzZSI9PT10fHwibGluayI9PT10KT9QbDpPbH0pKGUsbikodCl9LCLJtcm1dHJ1c3RDb25zdGFudEh0bWwiOmZ1bmN0aW9uIE55KHQpe2lmKG5nRGV2TW9kZSYmKCFBcnJheS5pc0FycmF5KHQpfHwhQXJyYXkuaXNBcnJheSh0LnJhdyl8fDEhPT10Lmxlbmd0aCkpdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIGludGVycG9sYXRpb24gaW4gdHJ1c3RlZCBIVE1MIGNvbnN0YW50OiAke3Quam9pbigiPyIpfWApO3JldHVybiBOcyh0WzBdKX0sIsm1ybV0cnVzdENvbnN0YW50UmVzb3VyY2VVcmwiOmZ1bmN0aW9uIEl5KHQpe2lmKG5nRGV2TW9kZSYmKCFBcnJheS5pc0FycmF5KHQpfHwhQXJyYXkuaXNBcnJheSh0LnJhdyl8fDEhPT10Lmxlbmd0aCkpdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIGludGVycG9sYXRpb24gaW4gdHJ1c3RlZCBVUkwgY29uc3RhbnQ6ICR7dC5qb2luKCI/Iil9YCk7cmV0dXJuKGZ1bmN0aW9uIGUodCl7dmFyIGU7cmV0dXJuKG51bGw9PT0oZT1UcygpKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5jcmVhdGVTY3JpcHRVUkwodCkpfHx0fSkodFswXSl9LGZvcndhcmRSZWY6SW4scmVzb2x2ZUZvcndhcmRSZWY6em59O2xldCB6eT1udWxsOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3QgSHk9W10sRnk9W107bGV0IEx5PSExO2Z1bmN0aW9uIEJ5KHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP3QuZXZlcnkoQnkpOiEhem4odCl9ZnVuY3Rpb24gVnkodCxlLG4pe2lmKEd5LmdldCh0KSlyZXR1cm47bGV0IG87aWYoR3kuc2V0KHQsITApLHQ9em4odCksbil7aWYobz1uaSh0KSwhbyl0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgdmFsdWUgJyR7dC5uYW1lfScgaW1wb3J0ZWQgYnkgdGhlIG1vZHVsZSAnJHtuLm5hbWV9Jy4gUGxlYXNlIGFkZCBhbiBATmdNb2R1bGUgYW5ub3RhdGlvbi5gKX1lbHNlIG89bmkodCwhMCk7Y29uc3QgaT1bXSxhPUpsKG8uZGVjbGFyYXRpb25zKSxyPUpsKG8uaW1wb3J0cyk7R3IocikubWFwKGp5KS5mb3JFYWNoKChlPT57aChlLHQpLFZ5KGUsITEsdCl9KSk7Y29uc3Qgcz1KbChvLmV4cG9ydHMpO2EuZm9yRWFjaCgoZnVuY3Rpb24gbChlKXskbyhlPXpuKGUpKXx8dGkoZSl8fGVpKGUpfHxpLnB1c2goYFVuZXhwZWN0ZWQgdmFsdWUgJyR7am4oZSl9JyBkZWNsYXJlZCBieSB0aGUgbW9kdWxlICcke2puKHQpfScuIFBsZWFzZSBhZGQgYSBAUGlwZS9ARGlyZWN0aXZlL0BDb21wb25lbnQgYW5ub3RhdGlvbi5gKX0pKSxhLmZvckVhY2goKGZ1bmN0aW9uIGModCl7Y29uc3QgZT10aSh0PXpuKHQpKTshJG8odCkmJmUmJjA9PWUuc2VsZWN0b3JzLmxlbmd0aCYmaS5wdXNoKGBEaXJlY3RpdmUgJHtqbih0KX0gaGFzIG5vIHNlbGVjdG9yLCBwbGVhc2UgYWRkIGl0IWApfSkpO2NvbnN0IGQ9Wy4uLmEubWFwKHpuKSwuLi5HcihyLm1hcChZeSkpLm1hcCh6bildO3MuZm9yRWFjaCgoZnVuY3Rpb24gcChlKXtjb25zdCBuPSgkbyhlPXpuKGUpKT8iY29tcG9uZW50Ijp0aShlKSYmImRpcmVjdGl2ZSIpfHxlaShlKSYmInBpcGUiO24mJi0xPT09ZC5sYXN0SW5kZXhPZihlKSYmaS5wdXNoKGBDYW4ndCBleHBvcnQgJHtufSAke2puKGUpfSBmcm9tICR7am4odCl9IGFzIGl0IHdhcyBuZWl0aGVyIGRlY2xhcmVkIG5vciBpbXBvcnRlZCFgKX0pKSxhLmZvckVhY2goKG49PihmdW5jdGlvbiBvKGUsbil7ZT16bihlKTtjb25zdCBvPVd5LmdldChlKTtpZihvJiZvIT09dCl7aWYoIW4pe2NvbnN0IG49W28sdF0ubWFwKGpuKS5zb3J0KCk7aS5wdXNoKGBUeXBlICR7am4oZSl9IGlzIHBhcnQgb2YgdGhlIGRlY2xhcmF0aW9ucyBvZiAyIG1vZHVsZXM6ICR7blswXX0gYW5kICR7blsxXX0hIFBsZWFzZSBjb25zaWRlciBtb3ZpbmcgJHtqbihlKX0gdG8gYSBoaWdoZXIgbW9kdWxlIHRoYXQgaW1wb3J0cyAke25bMF19IGFuZCAke25bMV19LiBZb3UgY2FuIGFsc28gY3JlYXRlIGEgbmV3IE5nTW9kdWxlIHRoYXQgZXhwb3J0cyBhbmQgaW5jbHVkZXMgJHtqbihlKX0gdGhlbiBpbXBvcnQgdGhhdCBOZ01vZHVsZSBpbiAke25bMF19IGFuZCAke25bMV19LmApfX1lbHNlIFd5LnNldChlLHQpfSkobixlKSkpLGEuZm9yRWFjaCgoZnVuY3Rpb24gbSh0KXtpZigkbyh0PXpuKHQpKSl7Y29uc3QgZT1VeSh0LCJDb21wb25lbnQiKTtlJiZlLmVudHJ5Q29tcG9uZW50cyYmWXIoZS5lbnRyeUNvbXBvbmVudHMsZyl9fSkpO2NvbnN0IHU9VXkodCwiTmdNb2R1bGUiKTtpZih1JiYodS5pbXBvcnRzJiZHcih1LmltcG9ydHMpLm1hcChqeSkuZm9yRWFjaCgoZT0+e2goZSx0KSxWeShlLCExLHQpfSkpLHUuYm9vdHN0cmFwJiZZcih1LmJvb3RzdHJhcCwoZnVuY3Rpb24gZih0KXskbyh0PXpuKHQpKXx8aS5wdXNoKGAke2puKHQpfSBjYW5ub3QgYmUgdXNlZCBhcyBhbiBlbnRyeSBjb21wb25lbnQuYCl9KSksdS5ib290c3RyYXAmJllyKHUuYm9vdHN0cmFwLGcpLHUuZW50cnlDb21wb25lbnRzJiZZcih1LmVudHJ5Q29tcG9uZW50cyxnKSksaS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKGkuam9pbigiXG4iKSk7ZnVuY3Rpb24gZyh0KXt0PXpuKHQpLFd5LmdldCh0KXx8aS5wdXNoKGBDb21wb25lbnQgJHtqbih0KX0gaXMgbm90IHBhcnQgb2YgYW55IE5nTW9kdWxlIG9yIHRoZSBtb2R1bGUgaGFzIG5vdCBiZWVuIGltcG9ydGVkIGludG8geW91ciBtb2R1bGUuYCl9ZnVuY3Rpb24gaCh0LGUpe2lmKCRvKHQ9em4odCkpfHx0aSh0KSl0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgZGlyZWN0aXZlICcke3QubmFtZX0nIGltcG9ydGVkIGJ5IHRoZSBtb2R1bGUgJyR7ZS5uYW1lfScuIFBsZWFzZSBhZGQgYW4gQE5nTW9kdWxlIGFubm90YXRpb24uYCk7aWYoZWkodCkpdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIHBpcGUgJyR7dC5uYW1lfScgaW1wb3J0ZWQgYnkgdGhlIG1vZHVsZSAnJHtlLm5hbWV9Jy4gUGxlYXNlIGFkZCBhbiBATmdNb2R1bGUgYW5ub3RhdGlvbi5gKX19ZnVuY3Rpb24gankodCl7cmV0dXJuKHQ9em4odCkpLm5nTW9kdWxlfHx0fWZ1bmN0aW9uIFV5KHQsZSl7bGV0IG49bnVsbDtyZXR1cm4gbyh0Ll9fYW5ub3RhdGlvbnNfXyksbyh0LmRlY29yYXRvcnMpLG47ZnVuY3Rpb24gbyh0KXt0JiZ0LmZvckVhY2goaSl9ZnVuY3Rpb24gaSh0KXtufHwoT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpLm5nTWV0YWRhdGFOYW1lPT1lP249dDp0LnR5cGUmJk9iamVjdC5nZXRQcm90b3R5cGVPZih0LnR5cGUpLm5nTWV0YWRhdGFOYW1lPT1lJiYobj10LmFyZ3NbMF0pKX19bGV0IFd5PW5ldyBXZWFrTWFwLEd5PW5ldyBXZWFrTWFwO2Z1bmN0aW9uIFl5KHQpe3JldHVyblsuLi5HcihKbChuaSh0PXpuKHQpLCEwKS5leHBvcnRzKS5tYXAoKHQ9Pm5pKHQpPyhWeSh0LCExKSxZeSh0KSk6dCkpKV19ZnVuY3Rpb24gcXkodCxlKXtjb25zdCBuPUdyKGUuZGVjbGFyYXRpb25zfHxIeSksbz1YeSh0KTtuLmZvckVhY2goKGU9PntlLmhhc093blByb3BlcnR5KElvKT9aeSgkbyhlKSxvKTplLmhhc093blByb3BlcnR5KHpvKXx8ZS5oYXNPd25Qcm9wZXJ0eShIbyl8fChlLm5nU2VsZWN0b3JTY29wZT10KX0pKX1mdW5jdGlvbiBaeSh0LGUpe3QuZGlyZWN0aXZlRGVmcz0oKT0+QXJyYXkuZnJvbShlLmNvbXBpbGF0aW9uLmRpcmVjdGl2ZXMpLm1hcCgodD0+dC5oYXNPd25Qcm9wZXJ0eShJbyk/JG8odCk6dGkodCkpKS5maWx0ZXIoKHQ9PiEhdCkpLHQucGlwZURlZnM9KCk9PkFycmF5LmZyb20oZS5jb21waWxhdGlvbi5waXBlcykubWFwKCh0PT5laSh0KSkpLHQuc2NoZW1hcz1lLnNjaGVtYXMsdC50Vmlldz1udWxsfWZ1bmN0aW9uIFh5KHQpe2lmKCFKeSh0KSl0aHJvdyBuZXcgRXJyb3IoYCR7dC5uYW1lfSBkb2VzIG5vdCBoYXZlIGEgbW9kdWxlIGRlZiAoybVtb2QgcHJvcGVydHkpYCk7Y29uc3QgZT1uaSh0KTtpZihudWxsIT09ZS50cmFuc2l0aXZlQ29tcGlsZVNjb3BlcylyZXR1cm4gZS50cmFuc2l0aXZlQ29tcGlsZVNjb3Blcztjb25zdCBuPXtzY2hlbWFzOmUuc2NoZW1hc3x8bnVsbCxjb21waWxhdGlvbjp7ZGlyZWN0aXZlczpuZXcgU2V0LHBpcGVzOm5ldyBTZXR9LGV4cG9ydGVkOntkaXJlY3RpdmVzOm5ldyBTZXQscGlwZXM6bmV3IFNldH19O3JldHVybiBKbChlLmltcG9ydHMpLmZvckVhY2goKHQ9Pntjb25zdCBlPXQ7aWYoIUp5KGUpKXRocm93IG5ldyBFcnJvcihgSW1wb3J0aW5nICR7ZS5uYW1lfSB3aGljaCBkb2VzIG5vdCBoYXZlIGEgybVtb2QgcHJvcGVydHlgKTtjb25zdCBvPVh5KGUpO28uZXhwb3J0ZWQuZGlyZWN0aXZlcy5mb3JFYWNoKCh0PT5uLmNvbXBpbGF0aW9uLmRpcmVjdGl2ZXMuYWRkKHQpKSksby5leHBvcnRlZC5waXBlcy5mb3JFYWNoKCh0PT5uLmNvbXBpbGF0aW9uLnBpcGVzLmFkZCh0KSkpfSkpLEpsKGUuZGVjbGFyYXRpb25zKS5mb3JFYWNoKCh0PT57ZWkodCk/bi5jb21waWxhdGlvbi5waXBlcy5hZGQodCk6bi5jb21waWxhdGlvbi5kaXJlY3RpdmVzLmFkZCh0KX0pKSxKbChlLmV4cG9ydHMpLmZvckVhY2goKHQ9Pntjb25zdCBlPXQ7aWYoSnkoZSkpe2NvbnN0IHQ9WHkoZSk7dC5leHBvcnRlZC5kaXJlY3RpdmVzLmZvckVhY2goKHQ9PntuLmNvbXBpbGF0aW9uLmRpcmVjdGl2ZXMuYWRkKHQpLG4uZXhwb3J0ZWQuZGlyZWN0aXZlcy5hZGQodCl9KSksdC5leHBvcnRlZC5waXBlcy5mb3JFYWNoKCh0PT57bi5jb21waWxhdGlvbi5waXBlcy5hZGQodCksbi5leHBvcnRlZC5waXBlcy5hZGQodCl9KSl9ZWxzZSBlaShlKT9uLmV4cG9ydGVkLnBpcGVzLmFkZChlKTpuLmV4cG9ydGVkLmRpcmVjdGl2ZXMuYWRkKGUpfSkpLGUudHJhbnNpdGl2ZUNvbXBpbGVTY29wZXM9bixufWZ1bmN0aW9uIEt5KHQpe3JldHVybihmdW5jdGlvbiBlKHQpe3JldHVybiB2b2lkIDAhPT10Lm5nTW9kdWxlfSkodCk/dC5uZ01vZHVsZTp0fWZ1bmN0aW9uIEp5KHQpe3JldHVybiEhbmkodCl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2xldCBReT0wO2Z1bmN0aW9uICR5KHQsZSl7bGV0IG49bnVsbDtlXyh0LGV8fHt9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCx6byx7Z2V0OigpPT57aWYobnVsbD09PW4pe2NvbnN0IG89dF8odCxlfHx7fSk7bj1qcigpLmNvbXBpbGVEaXJlY3RpdmUoUWIsby5zb3VyY2VNYXBVcmwsby5tZXRhZGF0YSl9cmV0dXJuIG59LGNvbmZpZ3VyYWJsZTohIW5nRGV2TW9kZX0pfWZ1bmN0aW9uIHRfKHQsZSl7Y29uc3Qgbj10JiZ0Lm5hbWUsbz1gbmc6Ly8vJHtufS/JtWRpci5qc2AsaT1qcigpLGE9b18odCxlKTtyZXR1cm4gYS50eXBlU291cmNlU3Bhbj1pLmNyZWF0ZVBhcnNlU291cmNlU3BhbigiRGlyZWN0aXZlIixuLG8pLGEudXNlc0luaGVyaXRhbmNlJiZpXyh0KSx7bWV0YWRhdGE6YSxzb3VyY2VNYXBVcmw6b319ZnVuY3Rpb24gZV8odCxlKXtsZXQgbj1udWxsO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LEJvLHtnZXQ6KCk9PntpZihudWxsPT09bil7Y29uc3Qgbz10Xyh0LGUpLGk9anIoKTtuPWkuY29tcGlsZUZhY3RvcnkoUWIsYG5nOi8vLyR7dC5uYW1lfS/JtWZhYy5qc2AsT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LG8ubWV0YWRhdGEpLHtpbmplY3RGbjoiZGlyZWN0aXZlSW5qZWN0Iix0YXJnZXQ6aS5SM0ZhY3RvcnlUYXJnZXQuRGlyZWN0aXZlfSkpfXJldHVybiBufSxjb25maWd1cmFibGU6ISFuZ0Rldk1vZGV9KX1mdW5jdGlvbiBuXyh0KXtyZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKHQucHJvdG90eXBlKT09PU9iamVjdC5wcm90b3R5cGV9ZnVuY3Rpb24gb18odCxlKXtjb25zdCBuPU9zKCksbz1uLm93blByb3BNZXRhZGF0YSh0KTtyZXR1cm57bmFtZTp0Lm5hbWUsdHlwZTp0LHR5cGVBcmd1bWVudENvdW50OjAsc2VsZWN0b3I6dm9pZCAwIT09ZS5zZWxlY3Rvcj9lLnNlbGVjdG9yOm51bGwsZGVwczpQcyh0KSxob3N0OmUuaG9zdHx8Um8scHJvcE1ldGFkYXRhOm8saW5wdXRzOmUuaW5wdXRzfHxObyxvdXRwdXRzOmUub3V0cHV0c3x8Tm8scXVlcmllczpzXyh0LG8sbF8pLGxpZmVjeWNsZTp7dXNlc09uQ2hhbmdlczpuLmhhc0xpZmVjeWNsZUhvb2sodCwibmdPbkNoYW5nZXMiKX0sdHlwZVNvdXJjZVNwYW46bnVsbCx1c2VzSW5oZXJpdGFuY2U6IW5fKHQpLGV4cG9ydEFzOihpPWUuZXhwb3J0QXMsdm9pZCAwPT09aT9udWxsOnBfKGkpKSxwcm92aWRlcnM6ZS5wcm92aWRlcnN8fG51bGwsdmlld1F1ZXJpZXM6c18odCxvLGNfKX07dmFyIGl9ZnVuY3Rpb24gaV8odCl7Y29uc3QgZT1PYmplY3QucHJvdG90eXBlO2xldCBuPU9iamVjdC5nZXRQcm90b3R5cGVPZih0LnByb3RvdHlwZSkuY29uc3RydWN0b3I7Zm9yKDtuJiZuIT09ZTspdGkobil8fCRvKG4pfHwhdV8obil8fCR5KG4sbnVsbCksbj1PYmplY3QuZ2V0UHJvdG90eXBlT2Yobil9ZnVuY3Rpb24gYV8odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P3BfKHQpOnpuKHQpfWZ1bmN0aW9uIHJfKHQsZSl7cmV0dXJue3Byb3BlcnR5TmFtZTp0LHByZWRpY2F0ZTphXyhlLnNlbGVjdG9yKSxkZXNjZW5kYW50czplLmRlc2NlbmRhbnRzLGZpcnN0OmUuZmlyc3QscmVhZDplLnJlYWQ/ZS5yZWFkOm51bGwsc3RhdGljOiEhZS5zdGF0aWMsZW1pdERpc3RpbmN0Q2hhbmdlc09ubHk6ISFlLmVtaXREaXN0aW5jdENoYW5nZXNPbmx5fX1mdW5jdGlvbiBzXyh0LGUsbil7Y29uc3Qgbz1bXTtmb3IoY29uc3QgaSBpbiBlKWlmKGUuaGFzT3duUHJvcGVydHkoaSkpe2NvbnN0IGE9ZVtpXTthLmZvckVhY2goKGU9PntpZihuKGUpKXtpZighZS5zZWxlY3Rvcil0aHJvdyBuZXcgRXJyb3IoYENhbid0IGNvbnN0cnVjdCBhIHF1ZXJ5IGZvciB0aGUgcHJvcGVydHkgIiR7aX0iIG9mICIke2puKHQpfSIgc2luY2UgdGhlIHF1ZXJ5IHNlbGVjdG9yIHdhc24ndCBkZWZpbmVkLmApO2lmKGEuc29tZShkXykpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY29tYmluZSBASW5wdXQgZGVjb3JhdG9ycyB3aXRoIHF1ZXJ5IGRlY29yYXRvcnMiKTtvLnB1c2gocl8oaSxlKSl9fSkpfXJldHVybiBvfWZ1bmN0aW9uIGxfKHQpe2NvbnN0IGU9dC5uZ01ldGFkYXRhTmFtZTtyZXR1cm4iQ29udGVudENoaWxkIj09PWV8fCJDb250ZW50Q2hpbGRyZW4iPT09ZX1mdW5jdGlvbiBjXyh0KXtjb25zdCBlPXQubmdNZXRhZGF0YU5hbWU7cmV0dXJuIlZpZXdDaGlsZCI9PT1lfHwiVmlld0NoaWxkcmVuIj09PWV9ZnVuY3Rpb24gZF8odCl7cmV0dXJuIklucHV0Ij09PXQubmdNZXRhZGF0YU5hbWV9ZnVuY3Rpb24gcF8odCl7cmV0dXJuIHQuc3BsaXQoIiwiKS5tYXAoKHQ9PnQudHJpbSgpKSl9Y29uc3QgbV89WyJuZ09uQ2hhbmdlcyIsIm5nT25Jbml0IiwibmdPbkRlc3Ryb3kiLCJuZ0RvQ2hlY2siLCJuZ0FmdGVyVmlld0luaXQiLCJuZ0FmdGVyVmlld0NoZWNrZWQiLCJuZ0FmdGVyQ29udGVudEluaXQiLCJuZ0FmdGVyQ29udGVudENoZWNrZWQiXTtmdW5jdGlvbiB1Xyh0KXtjb25zdCBlPU9zKCk7aWYobV8uc29tZSgobj0+ZS5oYXNMaWZlY3ljbGVIb29rKHQsbikpKSlyZXR1cm4hMDtjb25zdCBuPWUucHJvcE1ldGFkYXRhKHQpO2Zvcihjb25zdCB0IGluIG4pe2NvbnN0IGU9blt0XTtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyl7Y29uc3Qgbj1lW3RdLG89bi5uZ01ldGFkYXRhTmFtZTtpZihkXyhuKXx8bF8obil8fGNfKG4pfHwiT3V0cHV0Ij09PW98fCJIb3N0QmluZGluZyI9PT1vfHwiSG9zdExpc3RlbmVyIj09PW8pcmV0dXJuITB9fXJldHVybiExfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiBmXyh0LGUpe3JldHVybnt0eXBlOnQsdHlwZUFyZ3VtZW50Q291bnQ6MCxuYW1lOnQubmFtZSxkZXBzOlBzKHQpLHBpcGVOYW1lOmUubmFtZSxwdXJlOnZvaWQgMD09PWUucHVyZXx8ZS5wdXJlfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY29uc3QgZ189U3IoIkRpcmVjdGl2ZSIsKCh0PXt9KT0+dCksdm9pZCAwLHZvaWQgMCwoKHQsZSk9Pk9fKHQsZSkpKSxoXz1TcigiQ29tcG9uZW50IiwoKHQ9e30pPT5PYmplY3QuYXNzaWduKHtjaGFuZ2VEZXRlY3Rpb246eG8uRGVmYXVsdH0sdCkpLGdfLHZvaWQgMCwoKHQsZSk9PnZfKHQsZSkpKSxiXz1TcigiUGlwZSIsKHQ9Pk9iamVjdC5hc3NpZ24oe3B1cmU6ITB9LHQpKSx2b2lkIDAsdm9pZCAwLCgodCxlKT0+UF8odCxlKSkpLHlfPUFyKCJJbnB1dCIsKHQ9Pih7YmluZGluZ1Byb3BlcnR5TmFtZTp0fSkpKSxfXz1BcigiT3V0cHV0IiwodD0+KHtiaW5kaW5nUHJvcGVydHlOYW1lOnR9KSkpLENfPUFyKCJIb3N0QmluZGluZyIsKHQ9Pih7aG9zdFByb3BlcnR5TmFtZTp0fSkpKSxNXz1BcigiSG9zdExpc3RlbmVyIiwoKHQsZSk9Pih7ZXZlbnROYW1lOnQsYXJnczplfSkpKSx2Xz1mdW5jdGlvbiB4Xyh0LGUpeygidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmQW8oKTtsZXQgbj1udWxsOyEoZnVuY3Rpb24gbyh0LGUpe0RzKGUpJiYoa3Muc2V0KHQsZSksU3MuYWRkKHQpKX0pKHQsZSksZV8odCxlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxJbyx7Z2V0OigpPT57aWYobnVsbD09PW4pe2NvbnN0IG89anIoKTtpZihEcyhlKSl7Y29uc3Qgbj1bYENvbXBvbmVudCAnJHt0Lm5hbWV9JyBpcyBub3QgcmVzb2x2ZWQ6YF07dGhyb3cgZS50ZW1wbGF0ZVVybCYmbi5wdXNoKGAgLSB0ZW1wbGF0ZVVybDogJHtlLnRlbXBsYXRlVXJsfWApLGUuc3R5bGVVcmxzJiZlLnN0eWxlVXJscy5sZW5ndGgmJm4ucHVzaChgIC0gc3R5bGVVcmxzOiAke0pTT04uc3RyaW5naWZ5KGUuc3R5bGVVcmxzKX1gKSxuLnB1c2goIkRpZCB5b3UgcnVuIGFuZCB3YWl0IGZvciAncmVzb2x2ZUNvbXBvbmVudFJlc291cmNlcygpJz8iKSxuZXcgRXJyb3Iobi5qb2luKCJcbiIpKX1jb25zdCBpPShmdW5jdGlvbiBvKCl7cmV0dXJuIHp5fSkoKTtsZXQgYT1lLnByZXNlcnZlV2hpdGVzcGFjZXM7dm9pZCAwPT09YSYmKGE9bnVsbCE9PWkmJnZvaWQgMCE9PWkucHJlc2VydmVXaGl0ZXNwYWNlcyYmaS5wcmVzZXJ2ZVdoaXRlc3BhY2VzKTtsZXQgcj1lLmVuY2Fwc3VsYXRpb247dm9pZCAwPT09ciYmKHI9bnVsbCE9PWkmJnZvaWQgMCE9PWkuZGVmYXVsdEVuY2Fwc3VsYXRpb24/aS5kZWZhdWx0RW5jYXBzdWxhdGlvbjpQby5FbXVsYXRlZCk7Y29uc3Qgcz1lLnRlbXBsYXRlVXJsfHxgbmc6Ly8vJHt0Lm5hbWV9L3RlbXBsYXRlLmh0bWxgLGw9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LG9fKHQsZSkpLHt0eXBlU291cmNlU3BhbjpvLmNyZWF0ZVBhcnNlU291cmNlU3BhbigiQ29tcG9uZW50Iix0Lm5hbWUscyksdGVtcGxhdGU6ZS50ZW1wbGF0ZXx8IiIscHJlc2VydmVXaGl0ZXNwYWNlczphLHN0eWxlczplLnN0eWxlc3x8Tm8sYW5pbWF0aW9uczplLmFuaW1hdGlvbnMsZGlyZWN0aXZlczpbXSxjaGFuZ2VEZXRlY3Rpb246ZS5jaGFuZ2VEZXRlY3Rpb24scGlwZXM6bmV3IE1hcCxlbmNhcHN1bGF0aW9uOnIsaW50ZXJwb2xhdGlvbjplLmludGVycG9sYXRpb24sdmlld1Byb3ZpZGVyczplLnZpZXdQcm92aWRlcnN8fG51bGx9KTtReSsrO3RyeXtsLnVzZXNJbmhlcml0YW5jZSYmaV8odCksbj1vLmNvbXBpbGVDb21wb25lbnQoUWIscyxsKX1maW5hbGx5e1F5LS19aWYoMD09PVF5JiYoZnVuY3Rpb24gaSgpe2lmKCFMeSl7THk9ITA7dHJ5e2ZvcihsZXQgdD1GeS5sZW5ndGgtMTt0Pj0wO3QtLSl7Y29uc3R7bW9kdWxlVHlwZTplLG5nTW9kdWxlOm59PUZ5W3RdO24uZGVjbGFyYXRpb25zJiZuLmRlY2xhcmF0aW9ucy5ldmVyeShCeSkmJihGeS5zcGxpY2UodCwxKSxxeShlLG4pKX19ZmluYWxseXtMeT0hMX19fSkoKSwoZnVuY3Rpb24gYSh0KXtyZXR1cm4gdm9pZCAwIT09dC5uZ1NlbGVjdG9yU2NvcGV9KSh0KSl7Y29uc3QgZT1YeSh0Lm5nU2VsZWN0b3JTY29wZSk7WnkobixlKX19cmV0dXJuIG59LGNvbmZpZ3VyYWJsZTohIW5nRGV2TW9kZX0pfSxPXz0keSxQXz1mdW5jdGlvbiB3Xyh0LGUpe2xldCBuPW51bGwsbz1udWxsO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LEJvLHtnZXQ6KCk9PntpZihudWxsPT09byl7Y29uc3Qgbj1mXyh0LGUpLGk9anIoKTtvPWkuY29tcGlsZUZhY3RvcnkoUWIsYG5nOi8vLyR7bi5uYW1lfS/JtWZhYy5qc2AsT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LG4pLHtpbmplY3RGbjoiZGlyZWN0aXZlSW5qZWN0Iix0YXJnZXQ6aS5SM0ZhY3RvcnlUYXJnZXQuUGlwZX0pKX1yZXR1cm4gb30sY29uZmlndXJhYmxlOiEhbmdEZXZNb2RlfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsSG8se2dldDooKT0+e2lmKG51bGw9PT1uKXtjb25zdCBvPWZfKHQsZSk7bj1qcigpLmNvbXBpbGVQaXBlKFFiLGBuZzovLy8ke28ubmFtZX0vybVwaXBlLmpzYCxvKX1yZXR1cm4gbn0sY29uZmlndXJhYmxlOiEhbmdEZXZNb2RlfSl9LGtfPVNyKCJOZ01vZHVsZSIsKHQ9PnQpLHZvaWQgMCx2b2lkIDAsKCh0LGUpPT5TXyh0LGUpKSksU189ZnVuY3Rpb24gRF8odCxlPXt9KXshKGZ1bmN0aW9uIG4odCxlLG89ITEpe25nRGV2TW9kZSYmb28odCwiUmVxdWlyZWQgdmFsdWUgbW9kdWxlVHlwZSIpLG5nRGV2TW9kZSYmb28oZSwiUmVxdWlyZWQgdmFsdWUgbmdNb2R1bGUiKTtjb25zdCBpPUdyKGUuZGVjbGFyYXRpb25zfHxIeSk7bGV0IGE9bnVsbDtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxGbyx7Y29uZmlndXJhYmxlOiEwLGdldDooKT0+e2lmKG51bGw9PT1hKXtpZihuZ0Rldk1vZGUmJmUuaW1wb3J0cyYmZS5pbXBvcnRzLmluZGV4T2YodCk+LTEpdGhyb3cgbmV3IEVycm9yKGAnJHtqbih0KX0nIG1vZHVsZSBjYW4ndCBpbXBvcnQgaXRzZWxmYCk7YT1qcigpLmNvbXBpbGVOZ01vZHVsZShRYixgbmc6Ly8vJHt0Lm5hbWV9L8m1bW9kLmpzYCx7dHlwZTp0LGJvb3RzdHJhcDpHcihlLmJvb3RzdHJhcHx8SHkpLm1hcCh6biksZGVjbGFyYXRpb25zOmkubWFwKHpuKSxpbXBvcnRzOkdyKGUuaW1wb3J0c3x8SHkpLm1hcCh6bikubWFwKEt5KSxleHBvcnRzOkdyKGUuZXhwb3J0c3x8SHkpLm1hcCh6bikubWFwKEt5KSxzY2hlbWFzOmUuc2NoZW1hcz9HcihlLnNjaGVtYXMpOm51bGwsaWQ6ZS5pZHx8bnVsbH0pLGEuc2NoZW1hc3x8KGEuc2NoZW1hcz1bXSl9cmV0dXJuIGF9fSk7bGV0IHI9bnVsbDtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxCbyx7Z2V0OigpPT57aWYobnVsbD09PXIpe2NvbnN0IGU9anIoKTtyPWUuY29tcGlsZUZhY3RvcnkoUWIsYG5nOi8vLyR7dC5uYW1lfS/JtWZhYy5qc2Ase25hbWU6dC5uYW1lLHR5cGU6dCxkZXBzOlBzKHQpLGluamVjdEZuOiJpbmplY3QiLHRhcmdldDplLlIzRmFjdG9yeVRhcmdldC5OZ01vZHVsZSx0eXBlQXJndW1lbnRDb3VudDowfSl9cmV0dXJuIHJ9LGNvbmZpZ3VyYWJsZTohIW5nRGV2TW9kZX0pO2xldCBzPW51bGw7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZ28se2dldDooKT0+e2lmKG51bGw9PT1zKXtuZ0Rldk1vZGUmJlZ5KHQsbyk7Y29uc3Qgbj17bmFtZTp0Lm5hbWUsdHlwZTp0LHByb3ZpZGVyczplLnByb3ZpZGVyc3x8SHksaW1wb3J0czpbKGUuaW1wb3J0c3x8SHkpLm1hcCh6biksKGUuZXhwb3J0c3x8SHkpLm1hcCh6bildfTtzPWpyKCkuY29tcGlsZUluamVjdG9yKFFiLGBuZzovLy8ke3QubmFtZX0vybVpbmouanNgLG4pfXJldHVybiBzfSxjb25maWd1cmFibGU6ISFuZ0Rldk1vZGV9KX0pKHQsZSksKGZ1bmN0aW9uIG8odCxlKXtGeS5wdXNoKHttb2R1bGVUeXBlOnQsbmdNb2R1bGU6ZX0pfSkodCxlKX0sRV89bmV3IE5yKCJBcHBsaWNhdGlvbiBJbml0aWFsaXplciIpO2NsYXNzIEFfe2NvbnN0cnVjdG9yKHQpe3RoaXMuYXBwSW5pdHM9dCx0aGlzLnJlc29sdmU9c2gsdGhpcy5yZWplY3Q9c2gsdGhpcy5pbml0aWFsaXplZD0hMSx0aGlzLmRvbmU9ITEsdGhpcy5kb25lUHJvbWlzZT1uZXcgUHJvbWlzZSgoKHQsZSk9Pnt0aGlzLnJlc29sdmU9dCx0aGlzLnJlamVjdD1lfSkpfXJ1bkluaXRpYWxpemVycygpe2lmKHRoaXMuaW5pdGlhbGl6ZWQpcmV0dXJuO2NvbnN0IHQ9W10sZT0oKT0+e3RoaXMuZG9uZT0hMCx0aGlzLnJlc29sdmUoKX07aWYodGhpcy5hcHBJbml0cylmb3IobGV0IGU9MDtlPHRoaXMuYXBwSW5pdHMubGVuZ3RoO2UrKyl7Y29uc3Qgbj10aGlzLmFwcEluaXRzW2VdKCk7QXUobikmJnQucHVzaChuKX1Qcm9taXNlLmFsbCh0KS50aGVuKCgoKT0+e2UoKX0pKS5jYXRjaCgodD0+e3RoaXMucmVqZWN0KHQpfSkpLDA9PT10Lmxlbmd0aCYmZSgpLHRoaXMuaW5pdGlhbGl6ZWQ9ITB9fUFfLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxBXykodXMoRV8sOCkpfSxBXy7JtXByb3Y9bG8oe3Rva2VuOkFfLGZhY3Rvcnk6QV8uybVmYWN9KSxBXy5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOkFycmF5LGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W0VfXX0se3R5cGU6X3N9XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoQV8sW3t0eXBlOkptfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkFycmF5LGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W0VfXX0se3R5cGU6X3N9XX1dfSksbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCBSXz1uZXcgTnIoIkFwcElkIiksVF89e3Byb3ZpZGU6Ul8sdXNlRmFjdG9yeTpmdW5jdGlvbiBOXygpe3JldHVybmAke0lfKCl9JHtJXygpfSR7SV8oKX1gfSxkZXBzOltdfTtmdW5jdGlvbiBJXygpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKDk3K01hdGguZmxvb3IoMjUqTWF0aC5yYW5kb20oKSkpfWNvbnN0IHpfPW5ldyBOcigiUGxhdGZvcm0gSW5pdGlhbGl6ZXIiKSxIXz1uZXcgTnIoIlBsYXRmb3JtIElEIiksRl89bmV3IE5yKCJhcHBCb290c3RyYXBMaXN0ZW5lciIpO25ldyBOcigiQXBwbGljYXRpb24gUGFja2FnZXMgUm9vdCBVUkwiKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIExfe2xvZyh0KXtjb25zb2xlLmxvZyh0KX13YXJuKHQpe2NvbnNvbGUud2Fybih0KX19TF8uybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fExfKX0sTF8uybVwcm92PWxvKHt0b2tlbjpMXyxmYWN0b3J5OkxfLsm1ZmFjfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihMXyxbe3R5cGU6Sm19XSxudWxsLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3QgQl89bmV3IE5yKCJMb2NhbGVJZCIpLFZfPW5ldyBOcigiRGVmYXVsdEN1cnJlbmN5Q29kZSIpO3ZhciBqXztuZXcgTnIoIlRyYW5zbGF0aW9ucyIpLG5ldyBOcigiVHJhbnNsYXRpb25zRm9ybWF0IiksKGZ1bmN0aW9uKHQpe3RbdC5FcnJvcj0wXT0iRXJyb3IiLHRbdC5XYXJuaW5nPTFdPSJXYXJuaW5nIix0W3QuSWdub3JlPTJdPSJJZ25vcmUifSkoal98fChqXz17fSkpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3MgVV97Y29uc3RydWN0b3IodCxlKXt0aGlzLm5nTW9kdWxlRmFjdG9yeT10LHRoaXMuY29tcG9uZW50RmFjdG9yaWVzPWV9fWNvbnN0IFdfPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgdWIodCl9LEdfPVdfLFlfPWZ1bmN0aW9uKHQpe3JldHVybiBQcm9taXNlLnJlc29sdmUoV18odCkpfSxxXz1mdW5jdGlvbih0KXtjb25zdCBlPVdfKHQpLG49SmwobmkodCkuZGVjbGFyYXRpb25zKS5yZWR1Y2UoKCh0LGUpPT57Y29uc3Qgbj0kbyhlKTtyZXR1cm4gbiYmdC5wdXNoKG5ldyBsYihuKSksdH0pLFtdKTtyZXR1cm4gbmV3IFVfKGUsbil9LFpfPXFfLFhfPWZ1bmN0aW9uKHQpe3JldHVybiBQcm9taXNlLnJlc29sdmUocV8odCkpfTtjbGFzcyBLX3tjb25zdHJ1Y3Rvcigpe3RoaXMuY29tcGlsZU1vZHVsZVN5bmM9R18sdGhpcy5jb21waWxlTW9kdWxlQXN5bmM9WV8sdGhpcy5jb21waWxlTW9kdWxlQW5kQWxsQ29tcG9uZW50c1N5bmM9Wl8sdGhpcy5jb21waWxlTW9kdWxlQW5kQWxsQ29tcG9uZW50c0FzeW5jPVhffWNsZWFyQ2FjaGUoKXt9Y2xlYXJDYWNoZUZvcih0KXt9Z2V0TW9kdWxlSWQodCl7fX1LXy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8S18pfSxLXy7JtXByb3Y9bG8oe3Rva2VuOktfLGZhY3Rvcnk6S18uybVmYWN9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEtfLFt7dHlwZTpKbX1dLChmdW5jdGlvbigpe3JldHVybltdfSksbnVsbCk7Y29uc3QgSl89bmV3IE5yKCJjb21waWxlck9wdGlvbnMiKSxRXz1Qcm9taXNlLnJlc29sdmUoMCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uICRfKHQpeyJ1bmRlZmluZWQiPT10eXBlb2YgWm9uZT9RXy50aGVuKCgoKT0+e3QmJnQuYXBwbHkobnVsbCxudWxsKX0pKTpab25lLmN1cnJlbnQuc2NoZWR1bGVNaWNyb1Rhc2soInNjaGVkdWxlTWljcm90YXNrIix0KX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCi8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyB0Q3tjb25zdHJ1Y3Rvcih7ZW5hYmxlTG9uZ1N0YWNrVHJhY2U6dD0hMSxzaG91bGRDb2FsZXNjZUV2ZW50Q2hhbmdlRGV0ZWN0aW9uOmU9ITEsc2hvdWxkQ29hbGVzY2VSdW5DaGFuZ2VEZXRlY3Rpb246bj0hMX0pe2lmKHRoaXMuaGFzUGVuZGluZ01hY3JvdGFza3M9ITEsdGhpcy5oYXNQZW5kaW5nTWljcm90YXNrcz0hMSx0aGlzLmlzU3RhYmxlPSEwLHRoaXMub25VbnN0YWJsZT1uZXcgQWIoITEpLHRoaXMub25NaWNyb3Rhc2tFbXB0eT1uZXcgQWIoITEpLHRoaXMub25TdGFibGU9bmV3IEFiKCExKSx0aGlzLm9uRXJyb3I9bmV3IEFiKCExKSwidW5kZWZpbmVkIj09dHlwZW9mIFpvbmUpdGhyb3cgbmV3IEVycm9yKCJJbiB0aGlzIGNvbmZpZ3VyYXRpb24gQW5ndWxhciByZXF1aXJlcyBab25lLmpzIik7Wm9uZS5hc3NlcnRab25lUGF0Y2hlZCgpO2NvbnN0IG89dGhpcztvLl9uZXN0aW5nPTAsby5fb3V0ZXI9by5faW5uZXI9Wm9uZS5jdXJyZW50LFpvbmUuVGFza1RyYWNraW5nWm9uZVNwZWMmJihvLl9pbm5lcj1vLl9pbm5lci5mb3JrKG5ldyBab25lLlRhc2tUcmFja2luZ1pvbmVTcGVjKSksdCYmWm9uZS5sb25nU3RhY2tUcmFjZVpvbmVTcGVjJiYoby5faW5uZXI9by5faW5uZXIuZm9yayhab25lLmxvbmdTdGFja1RyYWNlWm9uZVNwZWMpKSxvLnNob3VsZENvYWxlc2NlRXZlbnRDaGFuZ2VEZXRlY3Rpb249IW4mJmUsby5zaG91bGRDb2FsZXNjZVJ1bkNoYW5nZURldGVjdGlvbj1uLG8ubGFzdFJlcXVlc3RBbmltYXRpb25GcmFtZUlkPS0xLG8ubmF0aXZlUmVxdWVzdEFuaW1hdGlvbkZyYW1lPShmdW5jdGlvbiBpKCl7bGV0IHQ9RW8ucmVxdWVzdEFuaW1hdGlvbkZyYW1lLGU9RW8uY2FuY2VsQW5pbWF0aW9uRnJhbWU7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBab25lJiZ0JiZlKXtjb25zdCBuPXRbWm9uZS5fX3N5bWJvbF9fKCJPcmlnaW5hbERlbGVnYXRlIildO24mJih0PW4pO2NvbnN0IG89ZVtab25lLl9fc3ltYm9sX18oIk9yaWdpbmFsRGVsZWdhdGUiKV07byYmKGU9byl9cmV0dXJue25hdGl2ZVJlcXVlc3RBbmltYXRpb25GcmFtZTp0LG5hdGl2ZUNhbmNlbEFuaW1hdGlvbkZyYW1lOmV9fSkoKS5uYXRpdmVSZXF1ZXN0QW5pbWF0aW9uRnJhbWUsKGZ1bmN0aW9uIGEodCl7Y29uc3QgZT0oKT0+eyEoZnVuY3Rpb24gZSh0KXstMT09PXQubGFzdFJlcXVlc3RBbmltYXRpb25GcmFtZUlkJiYodC5sYXN0UmVxdWVzdEFuaW1hdGlvbkZyYW1lSWQ9dC5uYXRpdmVSZXF1ZXN0QW5pbWF0aW9uRnJhbWUuY2FsbChFbywoKCk9Pnt0LmZha2VUb3BFdmVudFRhc2t8fCh0LmZha2VUb3BFdmVudFRhc2s9Wm9uZS5yb290LnNjaGVkdWxlRXZlbnRUYXNrKCJmYWtlVG9wRXZlbnRUYXNrIiwoKCk9Pnt0Lmxhc3RSZXF1ZXN0QW5pbWF0aW9uRnJhbWVJZD0tMSxvQyh0KSxuQyh0KX0pLHZvaWQgMCwoKCk9Pnt9KSwoKCk9Pnt9KSkpLHQuZmFrZVRvcEV2ZW50VGFzay5pbnZva2UoKX0pKSxvQyh0KSl9KSh0KX07dC5faW5uZXI9dC5faW5uZXIuZm9yayh7bmFtZToiYW5ndWxhciIscHJvcGVydGllczp7aXNBbmd1bGFyWm9uZTohMH0sb25JbnZva2VUYXNrOihuLG8saSxhLHIscyk9Pnt0cnl7cmV0dXJuIGlDKHQpLG4uaW52b2tlVGFzayhpLGEscixzKX1maW5hbGx5eyh0LnNob3VsZENvYWxlc2NlRXZlbnRDaGFuZ2VEZXRlY3Rpb24mJiJldmVudFRhc2siPT09YS50eXBlfHx0LnNob3VsZENvYWxlc2NlUnVuQ2hhbmdlRGV0ZWN0aW9uKSYmZSgpLGFDKHQpfX0sb25JbnZva2U6KG4sbyxpLGEscixzLGwpPT57dHJ5e3JldHVybiBpQyh0KSxuLmludm9rZShpLGEscixzLGwpfWZpbmFsbHl7dC5zaG91bGRDb2FsZXNjZVJ1bkNoYW5nZURldGVjdGlvbiYmZSgpLGFDKHQpfX0sb25IYXNUYXNrOihlLG4sbyxpKT0+e2UuaGFzVGFzayhvLGkpLG49PT1vJiYoIm1pY3JvVGFzayI9PWkuY2hhbmdlPyh0Ll9oYXNQZW5kaW5nTWljcm90YXNrcz1pLm1pY3JvVGFzayxvQyh0KSxuQyh0KSk6Im1hY3JvVGFzayI9PWkuY2hhbmdlJiYodC5oYXNQZW5kaW5nTWFjcm90YXNrcz1pLm1hY3JvVGFzaykpfSxvbkhhbmRsZUVycm9yOihlLG4sbyxpKT0+KGUuaGFuZGxlRXJyb3IobyxpKSx0LnJ1bk91dHNpZGVBbmd1bGFyKCgoKT0+dC5vbkVycm9yLmVtaXQoaSkpKSwhMSl9KX0pKG8pfXN0YXRpYyBpc0luQW5ndWxhclpvbmUoKXtyZXR1cm4hMD09PVpvbmUuY3VycmVudC5nZXQoImlzQW5ndWxhclpvbmUiKX1zdGF0aWMgYXNzZXJ0SW5Bbmd1bGFyWm9uZSgpe2lmKCF0Qy5pc0luQW5ndWxhclpvbmUoKSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIHRvIGJlIGluIEFuZ3VsYXIgWm9uZSwgYnV0IGl0IGlzIG5vdCEiKX1zdGF0aWMgYXNzZXJ0Tm90SW5Bbmd1bGFyWm9uZSgpe2lmKHRDLmlzSW5Bbmd1bGFyWm9uZSgpKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgdG8gbm90IGJlIGluIEFuZ3VsYXIgWm9uZSwgYnV0IGl0IGlzISIpfXJ1bih0LGUsbil7cmV0dXJuIHRoaXMuX2lubmVyLnJ1bih0LGUsbil9cnVuVGFzayh0LGUsbixvKXtjb25zdCBpPXRoaXMuX2lubmVyLGE9aS5zY2hlZHVsZUV2ZW50VGFzaygiTmdab25lRXZlbnQ6ICIrbyx0LGVDLHNoLHNoKTt0cnl7cmV0dXJuIGkucnVuVGFzayhhLGUsbil9ZmluYWxseXtpLmNhbmNlbFRhc2soYSl9fXJ1bkd1YXJkZWQodCxlLG4pe3JldHVybiB0aGlzLl9pbm5lci5ydW5HdWFyZGVkKHQsZSxuKX1ydW5PdXRzaWRlQW5ndWxhcih0KXtyZXR1cm4gdGhpcy5fb3V0ZXIucnVuKHQpfX1jb25zdCBlQz17fTtmdW5jdGlvbiBuQyh0KXtpZigwPT10Ll9uZXN0aW5nJiYhdC5oYXNQZW5kaW5nTWljcm90YXNrcyYmIXQuaXNTdGFibGUpdHJ5e3QuX25lc3RpbmcrKyx0Lm9uTWljcm90YXNrRW1wdHkuZW1pdChudWxsKX1maW5hbGx5e2lmKHQuX25lc3RpbmctLSwhdC5oYXNQZW5kaW5nTWljcm90YXNrcyl0cnl7dC5ydW5PdXRzaWRlQW5ndWxhcigoKCk9PnQub25TdGFibGUuZW1pdChudWxsKSkpfWZpbmFsbHl7dC5pc1N0YWJsZT0hMH19fWZ1bmN0aW9uIG9DKHQpe3QuaGFzUGVuZGluZ01pY3JvdGFza3M9ISEodC5faGFzUGVuZGluZ01pY3JvdGFza3N8fCh0LnNob3VsZENvYWxlc2NlRXZlbnRDaGFuZ2VEZXRlY3Rpb258fHQuc2hvdWxkQ29hbGVzY2VSdW5DaGFuZ2VEZXRlY3Rpb24pJiYtMSE9PXQubGFzdFJlcXVlc3RBbmltYXRpb25GcmFtZUlkKX1mdW5jdGlvbiBpQyh0KXt0Ll9uZXN0aW5nKyssdC5pc1N0YWJsZSYmKHQuaXNTdGFibGU9ITEsdC5vblVuc3RhYmxlLmVtaXQobnVsbCkpfWZ1bmN0aW9uIGFDKHQpe3QuX25lc3RpbmctLSxuQyh0KX1jbGFzcyByQ3tjb25zdHJ1Y3Rvcigpe3RoaXMuaGFzUGVuZGluZ01pY3JvdGFza3M9ITEsdGhpcy5oYXNQZW5kaW5nTWFjcm90YXNrcz0hMSx0aGlzLmlzU3RhYmxlPSEwLHRoaXMub25VbnN0YWJsZT1uZXcgQWIsdGhpcy5vbk1pY3JvdGFza0VtcHR5PW5ldyBBYix0aGlzLm9uU3RhYmxlPW5ldyBBYix0aGlzLm9uRXJyb3I9bmV3IEFifXJ1bih0LGUsbil7cmV0dXJuIHQuYXBwbHkoZSxuKX1ydW5HdWFyZGVkKHQsZSxuKXtyZXR1cm4gdC5hcHBseShlLG4pfXJ1bk91dHNpZGVBbmd1bGFyKHQpe3JldHVybiB0KCl9cnVuVGFzayh0LGUsbixvKXtyZXR1cm4gdC5hcHBseShlLG4pfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY2xhc3Mgc0N7Y29uc3RydWN0b3IodCl7dGhpcy5fbmdab25lPXQsdGhpcy5fcGVuZGluZ0NvdW50PTAsdGhpcy5faXNab25lU3RhYmxlPSEwLHRoaXMuX2RpZFdvcms9ITEsdGhpcy5fY2FsbGJhY2tzPVtdLHRoaXMudGFza1RyYWNraW5nWm9uZT1udWxsLHRoaXMuX3dhdGNoQW5ndWxhckV2ZW50cygpLHQucnVuKCgoKT0+e3RoaXMudGFza1RyYWNraW5nWm9uZT0idW5kZWZpbmVkIj09dHlwZW9mIFpvbmU/bnVsbDpab25lLmN1cnJlbnQuZ2V0KCJUYXNrVHJhY2tpbmdab25lIil9KSl9X3dhdGNoQW5ndWxhckV2ZW50cygpe3RoaXMuX25nWm9uZS5vblVuc3RhYmxlLnN1YnNjcmliZSh7bmV4dDooKT0+e3RoaXMuX2RpZFdvcms9ITAsdGhpcy5faXNab25lU3RhYmxlPSExfX0pLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKCk9Pnt0aGlzLl9uZ1pvbmUub25TdGFibGUuc3Vic2NyaWJlKHtuZXh0OigpPT57dEMuYXNzZXJ0Tm90SW5Bbmd1bGFyWm9uZSgpLCRfKCgoKT0+e3RoaXMuX2lzWm9uZVN0YWJsZT0hMCx0aGlzLl9ydW5DYWxsYmFja3NJZlJlYWR5KCl9KSl9fSl9KSl9aW5jcmVhc2VQZW5kaW5nUmVxdWVzdENvdW50KCl7cmV0dXJuIHRoaXMuX3BlbmRpbmdDb3VudCs9MSx0aGlzLl9kaWRXb3JrPSEwLHRoaXMuX3BlbmRpbmdDb3VudH1kZWNyZWFzZVBlbmRpbmdSZXF1ZXN0Q291bnQoKXtpZih0aGlzLl9wZW5kaW5nQ291bnQtPTEsdGhpcy5fcGVuZGluZ0NvdW50PDApdGhyb3cgbmV3IEVycm9yKCJwZW5kaW5nIGFzeW5jIHJlcXVlc3RzIGJlbG93IHplcm8iKTtyZXR1cm4gdGhpcy5fcnVuQ2FsbGJhY2tzSWZSZWFkeSgpLHRoaXMuX3BlbmRpbmdDb3VudH1pc1N0YWJsZSgpe3JldHVybiB0aGlzLl9pc1pvbmVTdGFibGUmJjA9PT10aGlzLl9wZW5kaW5nQ291bnQmJiF0aGlzLl9uZ1pvbmUuaGFzUGVuZGluZ01hY3JvdGFza3N9X3J1bkNhbGxiYWNrc0lmUmVhZHkoKXtpZih0aGlzLmlzU3RhYmxlKCkpJF8oKCgpPT57Zm9yKDswIT09dGhpcy5fY2FsbGJhY2tzLmxlbmd0aDspe2xldCB0PXRoaXMuX2NhbGxiYWNrcy5wb3AoKTtjbGVhclRpbWVvdXQodC50aW1lb3V0SWQpLHQuZG9uZUNiKHRoaXMuX2RpZFdvcmspfXRoaXMuX2RpZFdvcms9ITF9KSk7ZWxzZXtsZXQgdD10aGlzLmdldFBlbmRpbmdUYXNrcygpO3RoaXMuX2NhbGxiYWNrcz10aGlzLl9jYWxsYmFja3MuZmlsdGVyKChlPT4hZS51cGRhdGVDYnx8IWUudXBkYXRlQ2IodCl8fChjbGVhclRpbWVvdXQoZS50aW1lb3V0SWQpLCExKSkpLHRoaXMuX2RpZFdvcms9ITB9fWdldFBlbmRpbmdUYXNrcygpe3JldHVybiB0aGlzLnRhc2tUcmFja2luZ1pvbmU/dGhpcy50YXNrVHJhY2tpbmdab25lLm1hY3JvVGFza3MubWFwKCh0PT4oe3NvdXJjZTp0LnNvdXJjZSxjcmVhdGlvbkxvY2F0aW9uOnQuY3JlYXRpb25Mb2NhdGlvbixkYXRhOnQuZGF0YX0pKSk6W119YWRkQ2FsbGJhY2sodCxlLG4pe2xldCBvPS0xO2UmJmU+MCYmKG89c2V0VGltZW91dCgoKCk9Pnt0aGlzLl9jYWxsYmFja3M9dGhpcy5fY2FsbGJhY2tzLmZpbHRlcigodD0+dC50aW1lb3V0SWQhPT1vKSksdCh0aGlzLl9kaWRXb3JrLHRoaXMuZ2V0UGVuZGluZ1Rhc2tzKCkpfSksZSkpLHRoaXMuX2NhbGxiYWNrcy5wdXNoKHtkb25lQ2I6dCx0aW1lb3V0SWQ6byx1cGRhdGVDYjpufSl9d2hlblN0YWJsZSh0LGUsbil7aWYobiYmIXRoaXMudGFza1RyYWNraW5nWm9uZSl0aHJvdyBuZXcgRXJyb3IoJ1Rhc2sgdHJhY2tpbmcgem9uZSBpcyByZXF1aXJlZCB3aGVuIHBhc3NpbmcgYW4gdXBkYXRlIGNhbGxiYWNrIHRvIHdoZW5TdGFibGUoKS4gSXMgInpvbmUuanMvZGlzdC90YXNrLXRyYWNraW5nLmpzIiBsb2FkZWQ/Jyk7dGhpcy5hZGRDYWxsYmFjayh0LGUsbiksdGhpcy5fcnVuQ2FsbGJhY2tzSWZSZWFkeSgpfWdldFBlbmRpbmdSZXF1ZXN0Q291bnQoKXtyZXR1cm4gdGhpcy5fcGVuZGluZ0NvdW50fWZpbmRQcm92aWRlcnModCxlLG4pe3JldHVybltdfX1zQy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8c0MpKHVzKHRDKSl9LHNDLsm1cHJvdj1sbyh7dG9rZW46c0MsZmFjdG9yeTpzQy7JtWZhY30pLHNDLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6dEN9XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHNDLFt7dHlwZTpKbX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTp0Q31dfSksbnVsbCk7Y2xhc3MgbEN7Y29uc3RydWN0b3IoKXt0aGlzLl9hcHBsaWNhdGlvbnM9bmV3IE1hcCxkQy5hZGRUb1dpbmRvdyh0aGlzKX1yZWdpc3RlckFwcGxpY2F0aW9uKHQsZSl7dGhpcy5fYXBwbGljYXRpb25zLnNldCh0LGUpfXVucmVnaXN0ZXJBcHBsaWNhdGlvbih0KXt0aGlzLl9hcHBsaWNhdGlvbnMuZGVsZXRlKHQpfXVucmVnaXN0ZXJBbGxBcHBsaWNhdGlvbnMoKXt0aGlzLl9hcHBsaWNhdGlvbnMuY2xlYXIoKX1nZXRUZXN0YWJpbGl0eSh0KXtyZXR1cm4gdGhpcy5fYXBwbGljYXRpb25zLmdldCh0KXx8bnVsbH1nZXRBbGxUZXN0YWJpbGl0aWVzKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5fYXBwbGljYXRpb25zLnZhbHVlcygpKX1nZXRBbGxSb290RWxlbWVudHMoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9hcHBsaWNhdGlvbnMua2V5cygpKX1maW5kVGVzdGFiaWxpdHlJblRyZWUodCxlPSEwKXtyZXR1cm4gZEMuZmluZFRlc3RhYmlsaXR5SW5UcmVlKHRoaXMsdCxlKX19bEMuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGxDKX0sbEMuybVwcm92PWxvKHt0b2tlbjpsQyxmYWN0b3J5OmxDLsm1ZmFjfSksbEMuY3RvclBhcmFtZXRlcnM9KCk9PltdLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIobEMsW3t0eXBlOkptfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW119KSxudWxsKTtsZXQgY0MsZEM9bmV3IGNsYXNze2FkZFRvV2luZG93KHQpe31maW5kVGVzdGFiaWxpdHlJblRyZWUodCxlLG4pe3JldHVybiBudWxsfX0scEM9ITAsbUM9ITE7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIHVDKCl7cmV0dXJuIG1DPSEwLHBDfWNvbnN0IGZDPW5ldyBOcigiQWxsb3dNdWx0aXBsZVRva2VuIik7ZnVuY3Rpb24gZ0ModCxlLG49W10pe2NvbnN0IG89YFBsYXRmb3JtOiAke2V9YCxpPW5ldyBOcihvKTtyZXR1cm4oZT1bXSk9PntsZXQgYT1oQygpO2lmKCFhfHxhLmluamVjdG9yLmdldChmQywhMSkpaWYodCl0KG4uY29uY2F0KGUpLmNvbmNhdCh7cHJvdmlkZTppLHVzZVZhbHVlOiEwfSkpO2Vsc2V7Y29uc3QgdD1uLmNvbmNhdChlKS5jb25jYXQoe3Byb3ZpZGU6aSx1c2VWYWx1ZTohMH0se3Byb3ZpZGU6SHAsdXNlVmFsdWU6InBsYXRmb3JtIn0pOyEoZnVuY3Rpb24gcih0KXtpZihjQyYmIWNDLmRlc3Ryb3llZCYmIWNDLmluamVjdG9yLmdldChmQywhMSkpdGhyb3cgbmV3IEVycm9yKCJUaGVyZSBjYW4gYmUgb25seSBvbmUgcGxhdGZvcm0uIERlc3Ryb3kgdGhlIHByZXZpb3VzIG9uZSB0byBjcmVhdGUgYSBuZXcgb25lLiIpOyhmdW5jdGlvbiBlKCl7bmdEZXZNb2RlJiYoZnVuY3Rpb24gdCgpe3BtfHwocG09ITAsbW0oIsm1c2V0UHJvZmlsZXIiLE5pKSxtbSgiZ2V0Q29tcG9uZW50IiwkcCksbW0oImdldENvbnRleHQiLHRtKSxtbSgiZ2V0TGlzdGVuZXJzIixzbSksbW0oImdldE93bmluZ0NvbXBvbmVudCIsZW0pLG1tKCJnZXRIb3N0RWxlbWVudCIscm0pLG1tKCJnZXRJbmplY3RvciIsb20pLG1tKCJnZXRSb290Q29tcG9uZW50cyIsbm0pLG1tKCJnZXREaXJlY3RpdmVzIixpbSksbW0oImFwcGx5Q2hhbmdlcyIsZG0pKX0pKCl9KSgpLGNDPXQuZ2V0KGJDKTtjb25zdCBuPXQuZ2V0KHpfLG51bGwpO24mJm4uZm9yRWFjaCgodD0+dCgpKSl9KShRcC5jcmVhdGUoe3Byb3ZpZGVyczp0LG5hbWU6b30pKX1yZXR1cm4oZnVuY3Rpb24gcyh0KXtjb25zdCBlPWhDKCk7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCJObyBwbGF0Zm9ybSBleGlzdHMhIik7aWYoIWUuaW5qZWN0b3IuZ2V0KHQsbnVsbCkpdGhyb3cgbmV3IEVycm9yKCJBIHBsYXRmb3JtIHdpdGggYSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbiBoYXMgYmVlbiBjcmVhdGVkLiBQbGVhc2UgZGVzdHJveSBpdCBmaXJzdC4iKTtyZXR1cm4gZX0pKGkpfX1mdW5jdGlvbiBoQygpe3JldHVybiBjQyYmIWNDLmRlc3Ryb3llZD9jQzpudWxsfWNsYXNzIGJDe2NvbnN0cnVjdG9yKHQpe3RoaXMuX2luamVjdG9yPXQsdGhpcy5fbW9kdWxlcz1bXSx0aGlzLl9kZXN0cm95TGlzdGVuZXJzPVtdLHRoaXMuX2Rlc3Ryb3llZD0hMX1ib290c3RyYXBNb2R1bGVGYWN0b3J5KHQsZSl7Y29uc3Qgbj0oZnVuY3Rpb24gbyh0LGUpe2xldCBuO3JldHVybiBuPSJub29wIj09PXQ/bmV3IHJDOigiem9uZS5qcyI9PT10P3ZvaWQgMDp0KXx8bmV3IHRDKHtlbmFibGVMb25nU3RhY2tUcmFjZTp1QygpLHNob3VsZENvYWxlc2NlRXZlbnRDaGFuZ2VEZXRlY3Rpb246ISEobnVsbD09ZT92b2lkIDA6ZS5uZ1pvbmVFdmVudENvYWxlc2NpbmcpLHNob3VsZENvYWxlc2NlUnVuQ2hhbmdlRGV0ZWN0aW9uOiEhKG51bGw9PWU/dm9pZCAwOmUubmdab25lUnVuQ29hbGVzY2luZyl9KSxufSkoZT9lLm5nWm9uZTp2b2lkIDAse25nWm9uZUV2ZW50Q29hbGVzY2luZzplJiZlLm5nWm9uZUV2ZW50Q29hbGVzY2luZ3x8ITEsbmdab25lUnVuQ29hbGVzY2luZzplJiZlLm5nWm9uZVJ1bkNvYWxlc2Npbmd8fCExfSksaT1be3Byb3ZpZGU6dEMsdXNlVmFsdWU6bn1dO3JldHVybiBuLnJ1bigoKCk9Pntjb25zdCBlPVFwLmNyZWF0ZSh7cHJvdmlkZXJzOmkscGFyZW50OnRoaXMuaW5qZWN0b3IsbmFtZTp0Lm1vZHVsZVR5cGUubmFtZX0pLG89dC5jcmVhdGUoZSksYT1vLmluamVjdG9yLmdldChFbCxudWxsKTtpZighYSl0aHJvdyBuZXcgRXJyb3IoIk5vIEVycm9ySGFuZGxlci4gSXMgcGxhdGZvcm0gbW9kdWxlIChCcm93c2VyTW9kdWxlKSBpbmNsdWRlZD8iKTtyZXR1cm4gbi5ydW5PdXRzaWRlQW5ndWxhcigoKCk9Pntjb25zdCB0PW4ub25FcnJvci5zdWJzY3JpYmUoe25leHQ6dD0+e2EuaGFuZGxlRXJyb3IodCl9fSk7by5vbkRlc3Ryb3koKCgpPT57Q0ModGhpcy5fbW9kdWxlcyxvKSx0LnVuc3Vic2NyaWJlKCl9KSl9KSksKGZ1bmN0aW9uIHIodCxlLG4pe3RyeXtjb25zdCBvPW4oKTtyZXR1cm4gQXUobyk/by5jYXRjaCgobj0+e3Rocm93IGUucnVuT3V0c2lkZUFuZ3VsYXIoKCgpPT50LmhhbmRsZUVycm9yKG4pKSksbn0pKTpvfWNhdGNoKG4pe3Rocm93IGUucnVuT3V0c2lkZUFuZ3VsYXIoKCgpPT50LmhhbmRsZUVycm9yKG4pKSksbn19KShhLG4sKCgpPT57Y29uc3QgdD1vLmluamVjdG9yLmdldChBXyk7cmV0dXJuIHQucnVuSW5pdGlhbGl6ZXJzKCksdC5kb25lUHJvbWlzZS50aGVuKCgoKT0+KFVmKG8uaW5qZWN0b3IuZ2V0KEJfLEZmKXx8RmYpLHRoaXMuX21vZHVsZURvQm9vdHN0cmFwKG8pLG8pKSl9KSl9KSl9Ym9vdHN0cmFwTW9kdWxlKHQsZT1bXSl7Y29uc3Qgbj15Qyh7fSxlKTtyZXR1cm4oZnVuY3Rpb24gbyh0LGUsbil7bmdEZXZNb2RlJiYoZnVuY3Rpb24gbyh0LGU9IlR5cGUgcGFzc2VkIGluIGlzIG5vdCBOZ01vZHVsZVR5cGUsIGl0IGRvZXMgbm90IGhhdmUgJ8m1bW9kJyBwcm9wZXJ0eS4iKXtuaSh0KXx8aW8oZSl9KShuKTtjb25zdCBpPW5ldyB1YihuKTtpZigidW5kZWZpbmVkIiE9dHlwZW9mIG5nSml0TW9kZSYmIW5nSml0TW9kZSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGkpO2NvbnN0IGE9dC5nZXQoSl8sW10pLmNvbmNhdChlKTtpZigoZnVuY3Rpb24gcih0KXtpZihudWxsIT09enkpe2lmKHQuZGVmYXVsdEVuY2Fwc3VsYXRpb24hPT16eS5kZWZhdWx0RW5jYXBzdWxhdGlvbilyZXR1cm4gdm9pZChuZ0Rldk1vZGUmJmNvbnNvbGUuZXJyb3IoIlByb3ZpZGVkIHZhbHVlIGZvciBgZGVmYXVsdEVuY2Fwc3VsYXRpb25gIGNhbiBub3QgYmUgY2hhbmdlZCBvbmNlIGl0IGhhcyBiZWVuIHNldC4iKSk7aWYodC5wcmVzZXJ2ZVdoaXRlc3BhY2VzIT09enkucHJlc2VydmVXaGl0ZXNwYWNlcylyZXR1cm4gdm9pZChuZ0Rldk1vZGUmJmNvbnNvbGUuZXJyb3IoIlByb3ZpZGVkIHZhbHVlIGZvciBgcHJlc2VydmVXaGl0ZXNwYWNlc2AgY2FuIG5vdCBiZSBjaGFuZ2VkIG9uY2UgaXQgaGFzIGJlZW4gc2V0LiIpKX16eT10fSkoe2RlZmF1bHRFbmNhcHN1bGF0aW9uOk1DKGEubWFwKCh0PT50LmRlZmF1bHRFbmNhcHN1bGF0aW9uKSkpLHByZXNlcnZlV2hpdGVzcGFjZXM6TUMoYS5tYXAoKHQ9PnQucHJlc2VydmVXaGl0ZXNwYWNlcykpKX0pLChmdW5jdGlvbiBzKCl7cmV0dXJuIDA9PT1rcy5zaXplfSkoKSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGkpO2NvbnN0IGw9KGZ1bmN0aW9uIGModCl7Y29uc3QgZT1bXTtyZXR1cm4gdC5mb3JFYWNoKCh0PT50JiZlLnB1c2goLi4udCkpKSxlfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8pKGEubWFwKCh0PT50LnByb3ZpZGVycykpKTtpZigwPT09bC5sZW5ndGgpcmV0dXJuIFByb21pc2UucmVzb2x2ZShpKTtjb25zdCBkPWpyKCkscD1RcC5jcmVhdGUoe3Byb3ZpZGVyczpsfSkuZ2V0KGQuUmVzb3VyY2VMb2FkZXIpO3JldHVybihmdW5jdGlvbiBtKHQpe2NvbnN0IGU9W10sbj1uZXcgTWFwO2Z1bmN0aW9uIG8oZSl7bGV0IG89bi5nZXQoZSk7aWYoIW8pe2NvbnN0IGk9dChlKTtuLnNldChlLG89aS50aGVuKEVzKSl9cmV0dXJuIG99cmV0dXJuIGtzLmZvckVhY2goKCh0LG4pPT57Y29uc3QgaT1bXTt0LnRlbXBsYXRlVXJsJiZpLnB1c2gobyh0LnRlbXBsYXRlVXJsKS50aGVuKChlPT57dC50ZW1wbGF0ZT1lfSkpKTtjb25zdCBhPXQuc3R5bGVVcmxzLHI9dC5zdHlsZXN8fCh0LnN0eWxlcz1bXSkscz10LnN0eWxlcy5sZW5ndGg7YSYmYS5mb3JFYWNoKCgoZSxuKT0+e3IucHVzaCgiIiksaS5wdXNoKG8oZSkudGhlbigobz0+e3JbcytuXT1vLGEuc3BsaWNlKGEuaW5kZXhPZihlKSwxKSwwPT1hLmxlbmd0aCYmKHQuc3R5bGVVcmxzPXZvaWQgMCl9KSkpfSkpO2NvbnN0IGw9UHJvbWlzZS5hbGwoaSkudGhlbigoKCk9PihmdW5jdGlvbiB0KGUpe1NzLmRlbGV0ZShlKX0pKG4pKSk7ZS5wdXNoKGwpfSkpLChmdW5jdGlvbiBpKCl7a3M9bmV3IE1hcH0pKCksUHJvbWlzZS5hbGwoZSkudGhlbigoKCk9Pnt9KSl9KSgodD0+UHJvbWlzZS5yZXNvbHZlKHAuZ2V0KHQpKSkpLnRoZW4oKCgpPT5pKSl9KSh0aGlzLmluamVjdG9yLG4sdCkudGhlbigodD0+dGhpcy5ib290c3RyYXBNb2R1bGVGYWN0b3J5KHQsbikpKX1fbW9kdWxlRG9Cb290c3RyYXAodCl7Y29uc3QgZT10LmluamVjdG9yLmdldChfQyk7aWYodC5fYm9vdHN0cmFwQ29tcG9uZW50cy5sZW5ndGg+MCl0Ll9ib290c3RyYXBDb21wb25lbnRzLmZvckVhY2goKHQ9PmUuYm9vdHN0cmFwKHQpKSk7ZWxzZXtpZighdC5pbnN0YW5jZS5uZ0RvQm9vdHN0cmFwKXRocm93IG5ldyBFcnJvcihgVGhlIG1vZHVsZSAke1JuKHQuaW5zdGFuY2UuY29uc3RydWN0b3IpfSB3YXMgYm9vdHN0cmFwcGVkLCBidXQgaXQgZG9lcyBub3QgZGVjbGFyZSAiQE5nTW9kdWxlLmJvb3RzdHJhcCIgY29tcG9uZW50cyBub3IgYSAibmdEb0Jvb3RzdHJhcCIgbWV0aG9kLiBQbGVhc2UgZGVmaW5lIG9uZSBvZiB0aGVzZS5gKTt0Lmluc3RhbmNlLm5nRG9Cb290c3RyYXAoZSl9dGhpcy5fbW9kdWxlcy5wdXNoKHQpfW9uRGVzdHJveSh0KXt0aGlzLl9kZXN0cm95TGlzdGVuZXJzLnB1c2godCl9Z2V0IGluamVjdG9yKCl7cmV0dXJuIHRoaXMuX2luamVjdG9yfWRlc3Ryb3koKXtpZih0aGlzLl9kZXN0cm95ZWQpdGhyb3cgbmV3IEVycm9yKCJUaGUgcGxhdGZvcm0gaGFzIGFscmVhZHkgYmVlbiBkZXN0cm95ZWQhIik7dGhpcy5fbW9kdWxlcy5zbGljZSgpLmZvckVhY2goKHQ9PnQuZGVzdHJveSgpKSksdGhpcy5fZGVzdHJveUxpc3RlbmVycy5mb3JFYWNoKCh0PT50KCkpKSx0aGlzLl9kZXN0cm95ZWQ9ITB9Z2V0IGRlc3Ryb3llZCgpe3JldHVybiB0aGlzLl9kZXN0cm95ZWR9fWZ1bmN0aW9uIHlDKHQsZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZS5yZWR1Y2UoeUMsdCk6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLGUpfWJDLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxiQykodXMoUXApKX0sYkMuybVwcm92PWxvKHt0b2tlbjpiQyxmYWN0b3J5OmJDLsm1ZmFjfSksYkMuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpRcH1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoYkMsW3t0eXBlOkptfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOlFwfV19KSxudWxsKTtjbGFzcyBfQ3tjb25zdHJ1Y3Rvcih0LGUsbixvLGkpe3RoaXMuX3pvbmU9dCx0aGlzLl9pbmplY3Rvcj1lLHRoaXMuX2V4Y2VwdGlvbkhhbmRsZXI9bix0aGlzLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9byx0aGlzLl9pbml0U3RhdHVzPWksdGhpcy5fYm9vdHN0cmFwTGlzdGVuZXJzPVtdLHRoaXMuX3ZpZXdzPVtdLHRoaXMuX3J1bm5pbmdUaWNrPSExLHRoaXMuX3N0YWJsZT0hMCx0aGlzLmNvbXBvbmVudFR5cGVzPVtdLHRoaXMuY29tcG9uZW50cz1bXSx0aGlzLl9vbk1pY3JvdGFza0VtcHR5U3Vic2NyaXB0aW9uPXRoaXMuX3pvbmUub25NaWNyb3Rhc2tFbXB0eS5zdWJzY3JpYmUoe25leHQ6KCk9Pnt0aGlzLl96b25lLnJ1bigoKCk9Pnt0aGlzLnRpY2soKX0pKX19KTtjb25zdCBhPW5ldyB5KCh0PT57dGhpcy5fc3RhYmxlPXRoaXMuX3pvbmUuaXNTdGFibGUmJiF0aGlzLl96b25lLmhhc1BlbmRpbmdNYWNyb3Rhc2tzJiYhdGhpcy5fem9uZS5oYXNQZW5kaW5nTWljcm90YXNrcyx0aGlzLl96b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgoKT0+e3QubmV4dCh0aGlzLl9zdGFibGUpLHQuY29tcGxldGUoKX0pKX0pKSxyPW5ldyB5KCh0PT57bGV0IGU7dGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKCk9PntlPXRoaXMuX3pvbmUub25TdGFibGUuc3Vic2NyaWJlKCgoKT0+e3RDLmFzc2VydE5vdEluQW5ndWxhclpvbmUoKSwkXygoKCk9Pnt0aGlzLl9zdGFibGV8fHRoaXMuX3pvbmUuaGFzUGVuZGluZ01hY3JvdGFza3N8fHRoaXMuX3pvbmUuaGFzUGVuZGluZ01pY3JvdGFza3N8fCh0aGlzLl9zdGFibGU9ITAsdC5uZXh0KCEwKSl9KSl9KSl9KSk7Y29uc3Qgbj10aGlzLl96b25lLm9uVW5zdGFibGUuc3Vic2NyaWJlKCgoKT0+e3RDLmFzc2VydEluQW5ndWxhclpvbmUoKSx0aGlzLl9zdGFibGUmJih0aGlzLl9zdGFibGU9ITEsdGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKCk9Pnt0Lm5leHQoITEpfSkpKX0pKTtyZXR1cm4oKT0+e2UudW5zdWJzY3JpYmUoKSxuLnVuc3Vic2NyaWJlKCl9fSkpO3RoaXMuaXNTdGFibGU9V3QoYSxyLnBpcGUob24oKSkpfWJvb3RzdHJhcCh0LGUpe2lmKCF0aGlzLl9pbml0U3RhdHVzLmRvbmUpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgYm9vdHN0cmFwIGFzIHRoZXJlIGFyZSBzdGlsbCBhc3luY2hyb25vdXMgaW5pdGlhbGl6ZXJzIHJ1bm5pbmcuIEJvb3RzdHJhcCBjb21wb25lbnRzIGluIHRoZSBgbmdEb0Jvb3RzdHJhcGAgbWV0aG9kIG9mIHRoZSByb290IG1vZHVsZS4iKTtsZXQgbjtuPXQgaW5zdGFuY2VvZiBhaD90OnRoaXMuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeSh0KSx0aGlzLmNvbXBvbmVudFR5cGVzLnB1c2gobi5jb21wb25lbnRUeXBlKTtjb25zdCBvPShmdW5jdGlvbiBpKHQpe3JldHVybiB0LmlzQm91bmRUb01vZHVsZX0pKG4pP3ZvaWQgMDp0aGlzLl9pbmplY3Rvci5nZXQoWmgpLGE9bi5jcmVhdGUoUXAuTlVMTCxbXSxlfHxuLnNlbGVjdG9yLG8pLHI9YS5sb2NhdGlvbi5uYXRpdmVFbGVtZW50LHM9YS5pbmplY3Rvci5nZXQoc0MsbnVsbCksbD1zJiZhLmluamVjdG9yLmdldChsQyk7cmV0dXJuIHMmJmwmJmwucmVnaXN0ZXJBcHBsaWNhdGlvbihyLHMpLGEub25EZXN0cm95KCgoKT0+e3RoaXMuZGV0YWNoVmlldyhhLmhvc3RWaWV3KSxDQyh0aGlzLmNvbXBvbmVudHMsYSksbCYmbC51bnJlZ2lzdGVyQXBwbGljYXRpb24ocil9KSksdGhpcy5fbG9hZENvbXBvbmVudChhKSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJnVDKCkmJnRoaXMuX2luamVjdG9yLmdldChMXykubG9nKCJBbmd1bGFyIGlzIHJ1bm5pbmcgaW4gZGV2ZWxvcG1lbnQgbW9kZS4gQ2FsbCBlbmFibGVQcm9kTW9kZSgpIHRvIGVuYWJsZSBwcm9kdWN0aW9uIG1vZGUuIiksYX10aWNrKCl7aWYodGhpcy5fcnVubmluZ1RpY2spdGhyb3cgbmV3IEVycm9yKCJBcHBsaWNhdGlvblJlZi50aWNrIGlzIGNhbGxlZCByZWN1cnNpdmVseSIpO3RyeXt0aGlzLl9ydW5uaW5nVGljaz0hMDtmb3IobGV0IHQgb2YgdGhpcy5fdmlld3MpdC5kZXRlY3RDaGFuZ2VzKCk7aWYoKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZ1QygpKWZvcihsZXQgdCBvZiB0aGlzLl92aWV3cyl0LmNoZWNrTm9DaGFuZ2VzKCl9Y2F0Y2godCl7dGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKCk9PnRoaXMuX2V4Y2VwdGlvbkhhbmRsZXIuaGFuZGxlRXJyb3IodCkpKX1maW5hbGx5e3RoaXMuX3J1bm5pbmdUaWNrPSExfX1hdHRhY2hWaWV3KHQpe2NvbnN0IGU9dDt0aGlzLl92aWV3cy5wdXNoKGUpLGUuYXR0YWNoVG9BcHBSZWYodGhpcyl9ZGV0YWNoVmlldyh0KXtjb25zdCBlPXQ7Q0ModGhpcy5fdmlld3MsZSksZS5kZXRhY2hGcm9tQXBwUmVmKCl9X2xvYWRDb21wb25lbnQodCl7dGhpcy5hdHRhY2hWaWV3KHQuaG9zdFZpZXcpLHRoaXMudGljaygpLHRoaXMuY29tcG9uZW50cy5wdXNoKHQpLHRoaXMuX2luamVjdG9yLmdldChGXyxbXSkuY29uY2F0KHRoaXMuX2Jvb3RzdHJhcExpc3RlbmVycykuZm9yRWFjaCgoZT0+ZSh0KSkpfW5nT25EZXN0cm95KCl7dGhpcy5fdmlld3Muc2xpY2UoKS5mb3JFYWNoKCh0PT50LmRlc3Ryb3koKSkpLHRoaXMuX29uTWljcm90YXNrRW1wdHlTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1nZXQgdmlld0NvdW50KCl7cmV0dXJuIHRoaXMuX3ZpZXdzLmxlbmd0aH19ZnVuY3Rpb24gQ0ModCxlKXtjb25zdCBuPXQuaW5kZXhPZihlKTtuPi0xJiZ0LnNwbGljZShuLDEpfWZ1bmN0aW9uIE1DKHQpe2ZvcihsZXQgZT10Lmxlbmd0aC0xO2U+PTA7ZS0tKWlmKHZvaWQgMCE9PXRbZV0pcmV0dXJuIHRbZV19X0MuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fF9DKSh1cyh0QyksdXMoUXApLHVzKEVsKSx1cyhyaCksdXMoQV8pKX0sX0MuybVwcm92PWxvKHt0b2tlbjpfQyxmYWN0b3J5Ol9DLsm1ZmFjfSksX0MuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTp0Q30se3R5cGU6UXB9LHt0eXBlOkVsfSx7dHlwZTpyaH0se3R5cGU6QV99XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKF9DLFt7dHlwZTpKbX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTp0Q30se3R5cGU6UXB9LHt0eXBlOkVsfSx7dHlwZTpyaH0se3R5cGU6QV99XX0pLG51bGwpO2NsYXNzIHZDe31jb25zdCB4Qz17ZmFjdG9yeVBhdGhQcmVmaXg6IiIsZmFjdG9yeVBhdGhTdWZmaXg6Ii5uZ2ZhY3RvcnkifTtjbGFzcyBPQ3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuX2NvbXBpbGVyPXQsdGhpcy5fY29uZmlnPWV8fHhDfWxvYWQodCl7cmV0dXJuIHRoaXMubG9hZEFuZENvbXBpbGUodCl9bG9hZEFuZENvbXBpbGUodCl7bGV0W2Usbl09dC5zcGxpdCgiIyIpO3JldHVybiB2b2lkIDA9PT1uJiYobj0iZGVmYXVsdCIpLFN5c3RlbS5pbXBvcnQoZSkudGhlbigodD0+dFtuXSkpLnRoZW4oKHQ9PlBDKHQsZSxuKSkpLnRoZW4oKHQ9PnRoaXMuX2NvbXBpbGVyLmNvbXBpbGVNb2R1bGVBc3luYyh0KSkpfWxvYWRGYWN0b3J5KHQpe2xldFtlLG5dPXQuc3BsaXQoIiMiKSxvPSJOZ0ZhY3RvcnkiO3JldHVybiB2b2lkIDA9PT1uJiYobj0iZGVmYXVsdCIsbz0iIiksU3lzdGVtLmltcG9ydCh0aGlzLl9jb25maWcuZmFjdG9yeVBhdGhQcmVmaXgrZSt0aGlzLl9jb25maWcuZmFjdG9yeVBhdGhTdWZmaXgpLnRoZW4oKHQ9PnRbbitvXSkpLnRoZW4oKHQ9PlBDKHQsZSxuKSkpfX1mdW5jdGlvbiBQQyh0LGUsbil7aWYoIXQpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCAnJHtufScgaW4gJyR7ZX0nYCk7cmV0dXJuIHR9T0MuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fE9DKSh1cyhLXyksdXModkMsOCkpfSxPQy7JtXByb3Y9bG8oe3Rva2VuOk9DLGZhY3Rvcnk6T0MuybVmYWN9KSxPQy5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOktffSx7dHlwZTp2QyxkZWNvcmF0b3JzOlt7dHlwZTpfc31dfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihPQyxbe3R5cGU6Sm19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6S199LHt0eXBlOnZDLGRlY29yYXRvcnM6W3t0eXBlOl9zfV19XX0pLG51bGwpO2NvbnN0IHdDPWdDKG51bGwsImNvcmUiLFt7cHJvdmlkZTpIXyx1c2VWYWx1ZToidW5rbm93biJ9LHtwcm92aWRlOmJDLGRlcHM6W1FwXX0se3Byb3ZpZGU6bEMsZGVwczpbXX0se3Byb3ZpZGU6TF8sZGVwczpbXX1dKSxrQz1be3Byb3ZpZGU6X0MsdXNlQ2xhc3M6X0MsZGVwczpbdEMsUXAsRWwscmgsQV9dfSx7cHJvdmlkZTpzYixkZXBzOlt0Q10sdXNlRmFjdG9yeTpmdW5jdGlvbiBTQyh0KXtsZXQgZT1bXTtyZXR1cm4gdC5vblN0YWJsZS5zdWJzY3JpYmUoKCgpPT57Zm9yKDtlLmxlbmd0aDspZS5wb3AoKSgpfSkpLGZ1bmN0aW9uKHQpe2UucHVzaCh0KX19fSx7cHJvdmlkZTpBXyx1c2VDbGFzczpBXyxkZXBzOltbbmV3IF9zLEVfXV19LHtwcm92aWRlOktfLHVzZUNsYXNzOktfLGRlcHM6W119LFRfLHtwcm92aWRlOkVoLHVzZUZhY3Rvcnk6Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpmdW5jdGlvbiBEQygpe3JldHVybiBWaH0sZGVwczpbXX0se3Byb3ZpZGU6UmgsdXNlRmFjdG9yeTpmdW5jdGlvbiBFQygpe3JldHVybiBqaH0sZGVwczpbXX0se3Byb3ZpZGU6Ql8sdXNlRmFjdG9yeTpmdW5jdGlvbiBBQyh0KXtyZXR1cm4gVWYodD10fHwoZnVuY3Rpb24gZSgpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgbmdJMThuQ2xvc3VyZU1vZGUmJm5nSTE4bkNsb3N1cmVNb2RlJiYidW5kZWZpbmVkIiE9dHlwZW9mIGdvb2cmJiJlbiIhPT1nb29nLkxPQ0FMRT9nb29nLkxPQ0FMRToidW5kZWZpbmVkIiE9dHlwZW9mICRsb2NhbGl6ZSYmJGxvY2FsaXplLmxvY2FsZXx8RmZ9KSgpKSx0fSxkZXBzOltbbmV3IHlzKEJfKSxuZXcgX3MsbmV3IE1zXV19LHtwcm92aWRlOlZfLHVzZVZhbHVlOiJVU0QifV07Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jbGFzcyBSQ3tjb25zdHJ1Y3Rvcih0KXt9fXZhciBUQyxOQztSQy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8UkMpKHVzKF9DKSl9LFJDLsm1bW9kPVpvKHt0eXBlOlJDfSksUkMuybVpbmo9Y28oe3Byb3ZpZGVyczprQ30pLFJDLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6X0N9XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFJDLFt7dHlwZTprXyxhcmdzOlt7cHJvdmlkZXJzOmtDfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6X0N9XX0pLG51bGwpLChmdW5jdGlvbih0KXt0W3QuQ3JlYXRlVmlld05vZGVzPTBdPSJDcmVhdGVWaWV3Tm9kZXMiLHRbdC5DaGVja05vQ2hhbmdlcz0xXT0iQ2hlY2tOb0NoYW5nZXMiLHRbdC5DaGVja05vQ2hhbmdlc1Byb2plY3RlZFZpZXdzPTJdPSJDaGVja05vQ2hhbmdlc1Byb2plY3RlZFZpZXdzIix0W3QuQ2hlY2tBbmRVcGRhdGU9M109IkNoZWNrQW5kVXBkYXRlIix0W3QuQ2hlY2tBbmRVcGRhdGVQcm9qZWN0ZWRWaWV3cz00XT0iQ2hlY2tBbmRVcGRhdGVQcm9qZWN0ZWRWaWV3cyIsdFt0LkRlc3Ryb3k9NV09IkRlc3Ryb3kifSkoVEN8fChUQz17fSkpLChmdW5jdGlvbih0KXt0W3QuY3JlYXRlPTBdPSJjcmVhdGUiLHRbdC5kZXRlY3RDaGFuZ2VzPTFdPSJkZXRlY3RDaGFuZ2VzIix0W3QuY2hlY2tOb0NoYW5nZXM9Ml09ImNoZWNrTm9DaGFuZ2VzIix0W3QuZGVzdHJveT0zXT0iZGVzdHJveSIsdFt0LmhhbmRsZUV2ZW50PTRdPSJoYW5kbGVFdmVudCJ9KShOQ3x8KE5DPXt9KSksCi8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCiJ1bmRlZmluZWQiIT10eXBlb2YgbmdEZXZNb2RlJiZuZ0Rldk1vZGUmJihFby4kbG9jYWxpemU9RW8uJGxvY2FsaXplfHxmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiSXQgbG9va3MgbGlrZSB5b3VyIGFwcGxpY2F0aW9uIG9yIG9uZSBvZiBpdHMgZGVwZW5kZW5jaWVzIGlzIHVzaW5nIGkxOG4uXG5Bbmd1bGFyIDkgaW50cm9kdWNlZCBhIGdsb2JhbCBgJGxvY2FsaXplKClgIGZ1bmN0aW9uIHRoYXQgbmVlZHMgdG8gYmUgbG9hZGVkLlxuUGxlYXNlIHJ1biBgbmcgYWRkIEBhbmd1bGFyL2xvY2FsaXplYCBmcm9tIHRoZSBBbmd1bGFyIENMSS5cbihGb3Igbm9uLUNMSSBwcm9qZWN0cywgYWRkIGBpbXBvcnQgJ0Bhbmd1bGFyL2xvY2FsaXplL2luaXQnO2AgdG8geW91ciBgcG9seWZpbGxzLnRzYCBmaWxlLlxuRm9yIHNlcnZlci1zaWRlIHJlbmRlcmluZyBhcHBsaWNhdGlvbnMgYWRkIHRoZSBpbXBvcnQgdG8geW91ciBgbWFpbi5zZXJ2ZXIudHNgIGZpbGUuKSIpfSkKLyoqCiAgICAgKiBAbGljZW5zZSBBbmd1bGFyIHYxMS4yLjE0CiAgICAgKiAoYykgMjAxMC0yMDIxIEdvb2dsZSBMTEMuIGh0dHBzOi8vYW5ndWxhci5pby8KICAgICAqIExpY2Vuc2U6IE1JVAogICAgICovCi8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLztjb25zdCBJQz0idW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbFRoaXMmJmdsb2JhbFRoaXMsekM9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvdyxIQz0idW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYmJiJ1bmRlZmluZWQiIT10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSYmc2VsZixGQz0idW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbCYmZ2xvYmFsLExDPWZ1bmN0aW9uKHQsLi4uZSl7aWYoTEMudHJhbnNsYXRlKXtjb25zdCBuPUxDLnRyYW5zbGF0ZSh0LGUpO3Q9blswXSxlPW5bMV19bGV0IG49QkModFswXSx0LnJhd1swXSk7Zm9yKGxldCBvPTE7bzx0Lmxlbmd0aDtvKyspbis9ZVtvLTFdK0JDKHRbb10sdC5yYXdbb10pO3JldHVybiBufTtmdW5jdGlvbiBCQyh0LGUpe3JldHVybiI6Ij09PWUuY2hhckF0KDApP3Quc3Vic3RyaW5nKChmdW5jdGlvbiBuKHQsZSl7Zm9yKGxldCBuPTEsbz0xO248dC5sZW5ndGg7bisrLG8rKylpZigiXFwiPT09ZVtvXSlvKys7ZWxzZSBpZigiOiI9PT10W25dKXJldHVybiBuO3Rocm93IG5ldyBFcnJvcihgVW50ZXJtaW5hdGVkICRsb2NhbGl6ZSBtZXRhZGF0YSBibG9jayBpbiAiJHtlfSIuYCl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8pKHQsZSkrMSk6dH0oSUN8fEZDfHx6Q3x8SEMpLiRsb2NhbGl6ZT1MQzsKLyoqCiAgICAgKiBAbGljZW5zZSBBbmd1bGFyIHYxMS4yLjE0CiAgICAgKiAoYykgMjAxMC0yMDIxIEdvb2dsZSBMTEMuIGh0dHBzOi8vYW5ndWxhci5pby8KICAgICAqIExpY2Vuc2U6IE1JVAogICAgICovCmxldCBWQz1udWxsO2Z1bmN0aW9uIGpDKCl7cmV0dXJuIFZDfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3QgVUM9bmV3IE5yKCJEb2N1bWVudFRva2VuIik7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NsYXNzIFdDe31mdW5jdGlvbiBHQygpe3JldHVybiB1cyhZQyl9V0MuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFdDKX0sV0MuybVwcm92PWxvKHtmYWN0b3J5OkdDLHRva2VuOldDLHByb3ZpZGVkSW46InBsYXRmb3JtIn0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoV0MsW3t0eXBlOkptLGFyZ3M6W3twcm92aWRlZEluOiJwbGF0Zm9ybSIsdXNlRmFjdG9yeTpHQ31dfV0sbnVsbCxudWxsKSxuZXcgTnIoIkxvY2F0aW9uIEluaXRpYWxpemVkIik7Y2xhc3MgWUMgZXh0ZW5kcyBXQ3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuX2RvYz10LHRoaXMuX2luaXQoKX1faW5pdCgpe3RoaXMubG9jYXRpb249akMoKS5nZXRMb2NhdGlvbigpLHRoaXMuX2hpc3Rvcnk9akMoKS5nZXRIaXN0b3J5KCl9Z2V0QmFzZUhyZWZGcm9tRE9NKCl7cmV0dXJuIGpDKCkuZ2V0QmFzZUhyZWYodGhpcy5fZG9jKX1vblBvcFN0YXRlKHQpe2pDKCkuZ2V0R2xvYmFsRXZlbnRUYXJnZXQodGhpcy5fZG9jLCJ3aW5kb3ciKS5hZGRFdmVudExpc3RlbmVyKCJwb3BzdGF0ZSIsdCwhMSl9b25IYXNoQ2hhbmdlKHQpe2pDKCkuZ2V0R2xvYmFsRXZlbnRUYXJnZXQodGhpcy5fZG9jLCJ3aW5kb3ciKS5hZGRFdmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIix0LCExKX1nZXQgaHJlZigpe3JldHVybiB0aGlzLmxvY2F0aW9uLmhyZWZ9Z2V0IHByb3RvY29sKCl7cmV0dXJuIHRoaXMubG9jYXRpb24ucHJvdG9jb2x9Z2V0IGhvc3RuYW1lKCl7cmV0dXJuIHRoaXMubG9jYXRpb24uaG9zdG5hbWV9Z2V0IHBvcnQoKXtyZXR1cm4gdGhpcy5sb2NhdGlvbi5wb3J0fWdldCBwYXRobmFtZSgpe3JldHVybiB0aGlzLmxvY2F0aW9uLnBhdGhuYW1lfWdldCBzZWFyY2goKXtyZXR1cm4gdGhpcy5sb2NhdGlvbi5zZWFyY2h9Z2V0IGhhc2goKXtyZXR1cm4gdGhpcy5sb2NhdGlvbi5oYXNofXNldCBwYXRobmFtZSh0KXt0aGlzLmxvY2F0aW9uLnBhdGhuYW1lPXR9cHVzaFN0YXRlKHQsZSxuKXtxQygpP3RoaXMuX2hpc3RvcnkucHVzaFN0YXRlKHQsZSxuKTp0aGlzLmxvY2F0aW9uLmhhc2g9bn1yZXBsYWNlU3RhdGUodCxlLG4pe3FDKCk/dGhpcy5faGlzdG9yeS5yZXBsYWNlU3RhdGUodCxlLG4pOnRoaXMubG9jYXRpb24uaGFzaD1ufWZvcndhcmQoKXt0aGlzLl9oaXN0b3J5LmZvcndhcmQoKX1iYWNrKCl7dGhpcy5faGlzdG9yeS5iYWNrKCl9Z2V0U3RhdGUoKXtyZXR1cm4gdGhpcy5faGlzdG9yeS5zdGF0ZX19ZnVuY3Rpb24gcUMoKXtyZXR1cm4hIXdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZX1mdW5jdGlvbiBaQygpe3JldHVybiBuZXcgWUModXMoVUMpKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCi8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIFhDKHQsZSl7aWYoMD09dC5sZW5ndGgpcmV0dXJuIGU7aWYoMD09ZS5sZW5ndGgpcmV0dXJuIHQ7bGV0IG49MDtyZXR1cm4gdC5lbmRzV2l0aCgiLyIpJiZuKyssZS5zdGFydHNXaXRoKCIvIikmJm4rKywyPT1uP3QrZS5zdWJzdHJpbmcoMSk6MT09bj90K2U6dCsiLyIrZX1mdW5jdGlvbiBLQyh0KXtjb25zdCBlPXQubWF0Y2goLyN8XD98JC8pLG49ZSYmZS5pbmRleHx8dC5sZW5ndGg7cmV0dXJuIHQuc2xpY2UoMCxuLSgiLyI9PT10W24tMV0/MTowKSkrdC5zbGljZShuKX1mdW5jdGlvbiBKQyh0KXtyZXR1cm4gdCYmIj8iIT09dFswXT8iPyIrdDp0fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9ZQy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8WUMpKHVzKFVDKSl9LFlDLsm1cHJvdj1sbyh7ZmFjdG9yeTpaQyx0b2tlbjpZQyxwcm92aWRlZEluOiJwbGF0Zm9ybSJ9KSxZQy5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltVQ119XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoWUMsW3t0eXBlOkptLGFyZ3M6W3twcm92aWRlZEluOiJwbGF0Zm9ybSIsdXNlRmFjdG9yeTpaQ31dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltVQ119XX1dfSksbnVsbCk7Y2xhc3MgUUN7fWZ1bmN0aW9uICRDKHQpe2NvbnN0IGU9dXMoVUMpLmxvY2F0aW9uO3JldHVybiBuZXcgZU0odXMoV0MpLGUmJmUub3JpZ2lufHwiIil9UUMuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFFDKX0sUUMuybVwcm92PWxvKHtmYWN0b3J5OiRDLHRva2VuOlFDLHByb3ZpZGVkSW46InJvb3QifSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihRQyxbe3R5cGU6Sm0sYXJnczpbe3Byb3ZpZGVkSW46InJvb3QiLHVzZUZhY3Rvcnk6JEN9XX1dLG51bGwsbnVsbCk7Y29uc3QgdE09bmV3IE5yKCJhcHBCYXNlSHJlZiIpO2NsYXNzIGVNIGV4dGVuZHMgUUN7Y29uc3RydWN0b3IodCxlKXtpZihzdXBlcigpLHRoaXMuX3BsYXRmb3JtTG9jYXRpb249dCxudWxsPT1lJiYoZT10aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmdldEJhc2VIcmVmRnJvbURPTSgpKSxudWxsPT1lKXRocm93IG5ldyBFcnJvcigiTm8gYmFzZSBocmVmIHNldC4gUGxlYXNlIHByb3ZpZGUgYSB2YWx1ZSBmb3IgdGhlIEFQUF9CQVNFX0hSRUYgdG9rZW4gb3IgYWRkIGEgYmFzZSBlbGVtZW50IHRvIHRoZSBkb2N1bWVudC4iKTt0aGlzLl9iYXNlSHJlZj1lfW9uUG9wU3RhdGUodCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5vblBvcFN0YXRlKHQpLHRoaXMuX3BsYXRmb3JtTG9jYXRpb24ub25IYXNoQ2hhbmdlKHQpfWdldEJhc2VIcmVmKCl7cmV0dXJuIHRoaXMuX2Jhc2VIcmVmfXByZXBhcmVFeHRlcm5hbFVybCh0KXtyZXR1cm4gWEModGhpcy5fYmFzZUhyZWYsdCl9cGF0aCh0PSExKXtjb25zdCBlPXRoaXMuX3BsYXRmb3JtTG9jYXRpb24ucGF0aG5hbWUrSkModGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5zZWFyY2gpLG49dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5oYXNoO3JldHVybiBuJiZ0P2Ake2V9JHtufWA6ZX1wdXNoU3RhdGUodCxlLG4sbyl7Y29uc3QgaT10aGlzLnByZXBhcmVFeHRlcm5hbFVybChuK0pDKG8pKTt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnB1c2hTdGF0ZSh0LGUsaSl9cmVwbGFjZVN0YXRlKHQsZSxuLG8pe2NvbnN0IGk9dGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwobitKQyhvKSk7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5yZXBsYWNlU3RhdGUodCxlLGkpfWZvcndhcmQoKXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmZvcndhcmQoKX1iYWNrKCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5iYWNrKCl9fWVNLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxlTSkodXMoV0MpLHVzKHRNLDgpKX0sZU0uybVwcm92PWxvKHt0b2tlbjplTSxmYWN0b3J5OmVNLsm1ZmFjfSksZU0uY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpXQ30se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOlt0TV19XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoZU0sW3t0eXBlOkptfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOldDfSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W3RNXX1dfV19KSxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIG5NIGV4dGVuZHMgUUN7Y29uc3RydWN0b3IodCxlKXtzdXBlcigpLHRoaXMuX3BsYXRmb3JtTG9jYXRpb249dCx0aGlzLl9iYXNlSHJlZj0iIixudWxsIT1lJiYodGhpcy5fYmFzZUhyZWY9ZSl9b25Qb3BTdGF0ZSh0KXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLm9uUG9wU3RhdGUodCksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5vbkhhc2hDaGFuZ2UodCl9Z2V0QmFzZUhyZWYoKXtyZXR1cm4gdGhpcy5fYmFzZUhyZWZ9cGF0aCh0PSExKXtsZXQgZT10aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmhhc2g7cmV0dXJuIG51bGw9PWUmJihlPSIjIiksZS5sZW5ndGg+MD9lLnN1YnN0cmluZygxKTplfXByZXBhcmVFeHRlcm5hbFVybCh0KXtjb25zdCBlPVhDKHRoaXMuX2Jhc2VIcmVmLHQpO3JldHVybiBlLmxlbmd0aD4wPyIjIitlOmV9cHVzaFN0YXRlKHQsZSxuLG8pe2xldCBpPXRoaXMucHJlcGFyZUV4dGVybmFsVXJsKG4rSkMobykpOzA9PWkubGVuZ3RoJiYoaT10aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnBhdGhuYW1lKSx0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnB1c2hTdGF0ZSh0LGUsaSl9cmVwbGFjZVN0YXRlKHQsZSxuLG8pe2xldCBpPXRoaXMucHJlcGFyZUV4dGVybmFsVXJsKG4rSkMobykpOzA9PWkubGVuZ3RoJiYoaT10aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnBhdGhuYW1lKSx0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnJlcGxhY2VTdGF0ZSh0LGUsaSl9Zm9yd2FyZCgpe3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uZm9yd2FyZCgpfWJhY2soKXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmJhY2soKX19bk0uybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fG5NKSh1cyhXQyksdXModE0sOCkpfSxuTS7JtXByb3Y9bG8oe3Rva2VuOm5NLGZhY3Rvcnk6bk0uybVmYWN9KSxuTS5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOldDfSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W3RNXX1dfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihuTSxbe3R5cGU6Sm19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6V0N9LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbdE1dfV19XX0pLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3Mgb017Y29uc3RydWN0b3IodCxlKXt0aGlzLl9zdWJqZWN0PW5ldyBBYix0aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnM9W10sdGhpcy5fcGxhdGZvcm1TdHJhdGVneT10O2NvbnN0IG49dGhpcy5fcGxhdGZvcm1TdHJhdGVneS5nZXRCYXNlSHJlZigpO3RoaXMuX3BsYXRmb3JtTG9jYXRpb249ZSx0aGlzLl9iYXNlSHJlZj1LQyhhTShuKSksdGhpcy5fcGxhdGZvcm1TdHJhdGVneS5vblBvcFN0YXRlKCh0PT57dGhpcy5fc3ViamVjdC5lbWl0KHt1cmw6dGhpcy5wYXRoKCEwKSxwb3A6ITAsc3RhdGU6dC5zdGF0ZSx0eXBlOnQudHlwZX0pfSkpfXBhdGgodD0hMSl7cmV0dXJuIHRoaXMubm9ybWFsaXplKHRoaXMuX3BsYXRmb3JtU3RyYXRlZ3kucGF0aCh0KSl9Z2V0U3RhdGUoKXtyZXR1cm4gdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5nZXRTdGF0ZSgpfWlzQ3VycmVudFBhdGhFcXVhbFRvKHQsZT0iIil7cmV0dXJuIHRoaXMucGF0aCgpPT10aGlzLm5vcm1hbGl6ZSh0K0pDKGUpKX1ub3JtYWxpemUodCl7cmV0dXJuIG9NLnN0cmlwVHJhaWxpbmdTbGFzaCgoZnVuY3Rpb24gZSh0LG4pe3JldHVybiB0JiZuLnN0YXJ0c1dpdGgodCk/bi5zdWJzdHJpbmcodC5sZW5ndGgpOm59KSh0aGlzLl9iYXNlSHJlZixhTSh0KSkpfXByZXBhcmVFeHRlcm5hbFVybCh0KXtyZXR1cm4gdCYmIi8iIT09dFswXSYmKHQ9Ii8iK3QpLHRoaXMuX3BsYXRmb3JtU3RyYXRlZ3kucHJlcGFyZUV4dGVybmFsVXJsKHQpfWdvKHQsZT0iIixuPW51bGwpe3RoaXMuX3BsYXRmb3JtU3RyYXRlZ3kucHVzaFN0YXRlKG4sIiIsdCxlKSx0aGlzLl9ub3RpZnlVcmxDaGFuZ2VMaXN0ZW5lcnModGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwodCtKQyhlKSksbil9cmVwbGFjZVN0YXRlKHQsZT0iIixuPW51bGwpe3RoaXMuX3BsYXRmb3JtU3RyYXRlZ3kucmVwbGFjZVN0YXRlKG4sIiIsdCxlKSx0aGlzLl9ub3RpZnlVcmxDaGFuZ2VMaXN0ZW5lcnModGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwodCtKQyhlKSksbil9Zm9yd2FyZCgpe3RoaXMuX3BsYXRmb3JtU3RyYXRlZ3kuZm9yd2FyZCgpfWJhY2soKXt0aGlzLl9wbGF0Zm9ybVN0cmF0ZWd5LmJhY2soKX1vblVybENoYW5nZSh0KXt0aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnMucHVzaCh0KSx0aGlzLl91cmxDaGFuZ2VTdWJzY3JpcHRpb258fCh0aGlzLl91cmxDaGFuZ2VTdWJzY3JpcHRpb249dGhpcy5zdWJzY3JpYmUoKHQ9Pnt0aGlzLl9ub3RpZnlVcmxDaGFuZ2VMaXN0ZW5lcnModC51cmwsdC5zdGF0ZSl9KSkpfV9ub3RpZnlVcmxDaGFuZ2VMaXN0ZW5lcnModD0iIixlKXt0aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnMuZm9yRWFjaCgobj0+bih0LGUpKSl9c3Vic2NyaWJlKHQsZSxuKXtyZXR1cm4gdGhpcy5fc3ViamVjdC5zdWJzY3JpYmUoe25leHQ6dCxlcnJvcjplLGNvbXBsZXRlOm59KX19ZnVuY3Rpb24gaU0oKXtyZXR1cm4gbmV3IG9NKHVzKFFDKSx1cyhXQykpfWZ1bmN0aW9uIGFNKHQpe3JldHVybiB0LnJlcGxhY2UoL1wvaW5kZXguaHRtbCQvLCIiKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCi8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL29NLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxvTSkodXMoUUMpLHVzKFdDKSl9LG9NLm5vcm1hbGl6ZVF1ZXJ5UGFyYW1zPUpDLG9NLmpvaW5XaXRoU2xhc2g9WEMsb00uc3RyaXBUcmFpbGluZ1NsYXNoPUtDLG9NLsm1cHJvdj1sbyh7ZmFjdG9yeTppTSx0b2tlbjpvTSxwcm92aWRlZEluOiJyb290In0pLG9NLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6UUN9LHt0eXBlOldDfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihvTSxbe3R5cGU6Sm0sYXJnczpbe3Byb3ZpZGVkSW46InJvb3QiLHVzZUZhY3Rvcnk6aU19XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpRQ30se3R5cGU6V0N9XX0pLG51bGwpO2NvbnN0IHJNPXtBRFA6W3ZvaWQgMCx2b2lkIDAsMF0sQUZOOlt2b2lkIDAsdm9pZCAwLDBdLEFMTDpbdm9pZCAwLHZvaWQgMCwwXSxBTUQ6W3ZvaWQgMCx2b2lkIDAsMl0sQU9BOlt2b2lkIDAsIkt6Il0sQVJTOlt2b2lkIDAsIiQiXSxBVUQ6WyJBJCIsIiQiXSxCQU06W3ZvaWQgMCwiS00iXSxCQkQ6W3ZvaWQgMCwiJCJdLEJEVDpbdm9pZCAwLCLgp7MiXSxCSEQ6W3ZvaWQgMCx2b2lkIDAsM10sQklGOlt2b2lkIDAsdm9pZCAwLDBdLEJNRDpbdm9pZCAwLCIkIl0sQk5EOlt2b2lkIDAsIiQiXSxCT0I6W3ZvaWQgMCwiQnMiXSxCUkw6WyJSJCJdLEJTRDpbdm9pZCAwLCIkIl0sQldQOlt2b2lkIDAsIlAiXSxCWU46W3ZvaWQgMCwi0YAuIiwyXSxCWVI6W3ZvaWQgMCx2b2lkIDAsMF0sQlpEOlt2b2lkIDAsIiQiXSxDQUQ6WyJDQSQiLCIkIiwyXSxDSEY6W3ZvaWQgMCx2b2lkIDAsMl0sQ0xGOlt2b2lkIDAsdm9pZCAwLDRdLENMUDpbdm9pZCAwLCIkIiwwXSxDTlk6WyJDTsKlIiwiwqUiXSxDT1A6W3ZvaWQgMCwiJCIsMl0sQ1JDOlt2b2lkIDAsIuKCoSIsMl0sQ1VDOlt2b2lkIDAsIiQiXSxDVVA6W3ZvaWQgMCwiJCJdLENaSzpbdm9pZCAwLCJLxI0iLDJdLERKRjpbdm9pZCAwLHZvaWQgMCwwXSxES0s6W3ZvaWQgMCwia3IiLDJdLERPUDpbdm9pZCAwLCIkIl0sRUdQOlt2b2lkIDAsIkXCoyJdLEVTUDpbdm9pZCAwLCLigqciLDBdLEVVUjpbIuKCrCJdLEZKRDpbdm9pZCAwLCIkIl0sRktQOlt2b2lkIDAsIsKjIl0sR0JQOlsiwqMiXSxHRUw6W3ZvaWQgMCwi4oK+Il0sR0lQOlt2b2lkIDAsIsKjIl0sR05GOlt2b2lkIDAsIkZHIiwwXSxHVFE6W3ZvaWQgMCwiUSJdLEdZRDpbdm9pZCAwLCIkIiwyXSxIS0Q6WyJISyQiLCIkIl0sSE5MOlt2b2lkIDAsIkwiXSxIUks6W3ZvaWQgMCwia24iXSxIVUY6W3ZvaWQgMCwiRnQiLDJdLElEUjpbdm9pZCAwLCJScCIsMl0sSUxTOlsi4oKqIl0sSU5SOlsi4oK5Il0sSVFEOlt2b2lkIDAsdm9pZCAwLDBdLElSUjpbdm9pZCAwLHZvaWQgMCwwXSxJU0s6W3ZvaWQgMCwia3IiLDBdLElUTDpbdm9pZCAwLHZvaWQgMCwwXSxKTUQ6W3ZvaWQgMCwiJCJdLEpPRDpbdm9pZCAwLHZvaWQgMCwzXSxKUFk6WyLCpSIsdm9pZCAwLDBdLEtIUjpbdm9pZCAwLCLhn5siXSxLTUY6W3ZvaWQgMCwiQ0YiLDBdLEtQVzpbdm9pZCAwLCLigqkiLDBdLEtSVzpbIuKCqSIsdm9pZCAwLDBdLEtXRDpbdm9pZCAwLHZvaWQgMCwzXSxLWUQ6W3ZvaWQgMCwiJCJdLEtaVDpbdm9pZCAwLCLigrgiXSxMQUs6W3ZvaWQgMCwi4oKtIiwwXSxMQlA6W3ZvaWQgMCwiTMKjIiwwXSxMS1I6W3ZvaWQgMCwiUnMiXSxMUkQ6W3ZvaWQgMCwiJCJdLExUTDpbdm9pZCAwLCJMdCJdLExVRjpbdm9pZCAwLHZvaWQgMCwwXSxMVkw6W3ZvaWQgMCwiTHMiXSxMWUQ6W3ZvaWQgMCx2b2lkIDAsM10sTUdBOlt2b2lkIDAsIkFyIiwwXSxNR0Y6W3ZvaWQgMCx2b2lkIDAsMF0sTU1LOlt2b2lkIDAsIksiLDBdLE1OVDpbdm9pZCAwLCLigq4iLDJdLE1STzpbdm9pZCAwLHZvaWQgMCwwXSxNVVI6W3ZvaWQgMCwiUnMiLDJdLE1YTjpbIk1YJCIsIiQiXSxNWVI6W3ZvaWQgMCwiUk0iXSxOQUQ6W3ZvaWQgMCwiJCJdLE5HTjpbdm9pZCAwLCLigqYiXSxOSU86W3ZvaWQgMCwiQyQiXSxOT0s6W3ZvaWQgMCwia3IiLDJdLE5QUjpbdm9pZCAwLCJScyJdLE5aRDpbIk5aJCIsIiQiXSxPTVI6W3ZvaWQgMCx2b2lkIDAsM10sUEhQOlt2b2lkIDAsIuKCsSJdLFBLUjpbdm9pZCAwLCJScyIsMl0sUExOOlt2b2lkIDAsInrFgiJdLFBZRzpbdm9pZCAwLCLigrIiLDBdLFJPTjpbdm9pZCAwLCJsZWkiXSxSU0Q6W3ZvaWQgMCx2b2lkIDAsMF0sUlVCOlt2b2lkIDAsIuKCvSJdLFJVUjpbdm9pZCAwLCLRgC4iXSxSV0Y6W3ZvaWQgMCwiUkYiLDBdLFNCRDpbdm9pZCAwLCIkIl0sU0VLOlt2b2lkIDAsImtyIiwyXSxTR0Q6W3ZvaWQgMCwiJCJdLFNIUDpbdm9pZCAwLCLCoyJdLFNMTDpbdm9pZCAwLHZvaWQgMCwwXSxTT1M6W3ZvaWQgMCx2b2lkIDAsMF0sU1JEOlt2b2lkIDAsIiQiXSxTU1A6W3ZvaWQgMCwiwqMiXSxTVEQ6W3ZvaWQgMCx2b2lkIDAsMF0sU1ROOlt2b2lkIDAsIkRiIl0sU1lQOlt2b2lkIDAsIsKjIiwwXSxUSEI6W3ZvaWQgMCwi4Li/Il0sVE1NOlt2b2lkIDAsdm9pZCAwLDBdLFRORDpbdm9pZCAwLHZvaWQgMCwzXSxUT1A6W3ZvaWQgMCwiVCQiXSxUUkw6W3ZvaWQgMCx2b2lkIDAsMF0sVFJZOlt2b2lkIDAsIuKCuiJdLFRURDpbdm9pZCAwLCIkIl0sVFdEOlsiTlQkIiwiJCIsMl0sVFpTOlt2b2lkIDAsdm9pZCAwLDJdLFVBSDpbdm9pZCAwLCLigrQiXSxVR1g6W3ZvaWQgMCx2b2lkIDAsMF0sVVNEOlsiJCJdLFVZSTpbdm9pZCAwLHZvaWQgMCwwXSxVWVU6W3ZvaWQgMCwiJCJdLFVZVzpbdm9pZCAwLHZvaWQgMCw0XSxVWlM6W3ZvaWQgMCx2b2lkIDAsMl0sVkVGOlt2b2lkIDAsIkJzIiwyXSxWTkQ6WyLigqsiLHZvaWQgMCwwXSxWVVY6W3ZvaWQgMCx2b2lkIDAsMF0sWEFGOlsiRkNGQSIsdm9pZCAwLDBdLFhDRDpbIkVDJCIsIiQiXSxYT0Y6WyJDRkEiLHZvaWQgMCwwXSxYUEY6WyJDRlBGIix2b2lkIDAsMF0sWFhYOlsiwqQiXSxZRVI6W3ZvaWQgMCx2b2lkIDAsMF0sWkFSOlt2b2lkIDAsIlIiXSxaTUs6W3ZvaWQgMCx2b2lkIDAsMF0sWk1XOlt2b2lkIDAsIlpLIl0sWldEOlt2b2lkIDAsdm9pZCAwLDBdfTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovdmFyIHNNLGxNLGNNLGRNLHBNLG1NLHVNO2Z1bmN0aW9uIGZNKHQsZSl7cmV0dXJuIE1NKFRmKHQpW3pmLkRhdGVGb3JtYXRdLGUpfWZ1bmN0aW9uIGdNKHQsZSl7cmV0dXJuIE1NKFRmKHQpW3pmLlRpbWVGb3JtYXRdLGUpfWZ1bmN0aW9uIGhNKHQsZSl7cmV0dXJuIE1NKFRmKHQpW3pmLkRhdGVUaW1lRm9ybWF0XSxlKX1mdW5jdGlvbiBiTSh0LGUpe2NvbnN0IG49VGYodCksbz1uW3pmLk51bWJlclN5bWJvbHNdW2VdO2lmKHZvaWQgMD09PW8pe2lmKGU9PT1tTS5DdXJyZW5jeURlY2ltYWwpcmV0dXJuIG5bemYuTnVtYmVyU3ltYm9sc11bbU0uRGVjaW1hbF07aWYoZT09PW1NLkN1cnJlbmN5R3JvdXApcmV0dXJuIG5bemYuTnVtYmVyU3ltYm9sc11bbU0uR3JvdXBdfXJldHVybiBvfWZ1bmN0aW9uIHlNKHQsZSl7cmV0dXJuIFRmKHQpW3pmLk51bWJlckZvcm1hdHNdW2VdfSEoZnVuY3Rpb24odCl7dFt0LkRlY2ltYWw9MF09IkRlY2ltYWwiLHRbdC5QZXJjZW50PTFdPSJQZXJjZW50Iix0W3QuQ3VycmVuY3k9Ml09IkN1cnJlbmN5Iix0W3QuU2NpZW50aWZpYz0zXT0iU2NpZW50aWZpYyJ9KShzTXx8KHNNPXt9KSksKGZ1bmN0aW9uKHQpe3RbdC5aZXJvPTBdPSJaZXJvIix0W3QuT25lPTFdPSJPbmUiLHRbdC5Ud289Ml09IlR3byIsdFt0LkZldz0zXT0iRmV3Iix0W3QuTWFueT00XT0iTWFueSIsdFt0Lk90aGVyPTVdPSJPdGhlciJ9KShsTXx8KGxNPXt9KSksKGZ1bmN0aW9uKHQpe3RbdC5Gb3JtYXQ9MF09IkZvcm1hdCIsdFt0LlN0YW5kYWxvbmU9MV09IlN0YW5kYWxvbmUifSkoY018fChjTT17fSkpLChmdW5jdGlvbih0KXt0W3QuTmFycm93PTBdPSJOYXJyb3ciLHRbdC5BYmJyZXZpYXRlZD0xXT0iQWJicmV2aWF0ZWQiLHRbdC5XaWRlPTJdPSJXaWRlIix0W3QuU2hvcnQ9M109IlNob3J0In0pKGRNfHwoZE09e30pKSwoZnVuY3Rpb24odCl7dFt0LlNob3J0PTBdPSJTaG9ydCIsdFt0Lk1lZGl1bT0xXT0iTWVkaXVtIix0W3QuTG9uZz0yXT0iTG9uZyIsdFt0LkZ1bGw9M109IkZ1bGwifSkocE18fChwTT17fSkpLChmdW5jdGlvbih0KXt0W3QuRGVjaW1hbD0wXT0iRGVjaW1hbCIsdFt0Lkdyb3VwPTFdPSJHcm91cCIsdFt0Lkxpc3Q9Ml09Ikxpc3QiLHRbdC5QZXJjZW50U2lnbj0zXT0iUGVyY2VudFNpZ24iLHRbdC5QbHVzU2lnbj00XT0iUGx1c1NpZ24iLHRbdC5NaW51c1NpZ249NV09Ik1pbnVzU2lnbiIsdFt0LkV4cG9uZW50aWFsPTZdPSJFeHBvbmVudGlhbCIsdFt0LlN1cGVyc2NyaXB0aW5nRXhwb25lbnQ9N109IlN1cGVyc2NyaXB0aW5nRXhwb25lbnQiLHRbdC5QZXJNaWxsZT04XT0iUGVyTWlsbGUiLHRbdFsxLzBdPTldPSJJbmZpbml0eSIsdFt0Lk5hTj0xMF09Ik5hTiIsdFt0LlRpbWVTZXBhcmF0b3I9MTFdPSJUaW1lU2VwYXJhdG9yIix0W3QuQ3VycmVuY3lEZWNpbWFsPTEyXT0iQ3VycmVuY3lEZWNpbWFsIix0W3QuQ3VycmVuY3lHcm91cD0xM109IkN1cnJlbmN5R3JvdXAifSkobU18fChtTT17fSkpLChmdW5jdGlvbih0KXt0W3QuU3VuZGF5PTBdPSJTdW5kYXkiLHRbdC5Nb25kYXk9MV09Ik1vbmRheSIsdFt0LlR1ZXNkYXk9Ml09IlR1ZXNkYXkiLHRbdC5XZWRuZXNkYXk9M109IldlZG5lc2RheSIsdFt0LlRodXJzZGF5PTRdPSJUaHVyc2RheSIsdFt0LkZyaWRheT01XT0iRnJpZGF5Iix0W3QuU2F0dXJkYXk9Nl09IlNhdHVyZGF5In0pKHVNfHwodU09e30pKTtjb25zdCBfTT1OZjtmdW5jdGlvbiBDTSh0KXtpZighdFt6Zi5FeHRyYURhdGFdKXRocm93IG5ldyBFcnJvcihgTWlzc2luZyBleHRyYSBsb2NhbGUgZGF0YSBmb3IgdGhlIGxvY2FsZSAiJHt0W3pmLkxvY2FsZUlkXX0iLiBVc2UgInJlZ2lzdGVyTG9jYWxlRGF0YSIgdG8gbG9hZCBuZXcgZGF0YS4gU2VlIHRoZSAiSTE4biBndWlkZSIgb24gYW5ndWxhci5pbyB0byBrbm93IG1vcmUuYCl9ZnVuY3Rpb24gTU0odCxlKXtmb3IobGV0IG49ZTtuPi0xO24tLSlpZih2b2lkIDAhPT10W25dKXJldHVybiB0W25dO3Rocm93IG5ldyBFcnJvcigiTG9jYWxlIGRhdGEgQVBJOiBsb2NhbGUgZGF0YSB1bmRlZmluZWQiKX1mdW5jdGlvbiB2TSh0KXtjb25zdFtlLG5dPXQuc3BsaXQoIjoiKTtyZXR1cm57aG91cnM6K2UsbWludXRlczorbn19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCB4TT0vXihcZHs0fSktPyhcZFxkKS0/KFxkXGQpKD86VChcZFxkKSg/Ojo/KFxkXGQpKD86Oj8oXGRcZCkoPzpcLihcZCspKT8pPyk/KFp8KFsrLV0pKFxkXGQpOj8oXGRcZCkpPyk/JC8sT009e30sUE09LygoPzpbXkd5WU1Md1dkRWFiQmhIbXNTelpPJ10rKXwoPzonKD86W14nXXwnJykqJyl8KD86R3sxLDV9fHl7MSw0fXxZezEsNH18TXsxLDV9fEx7MSw1fXx3ezEsMn18V3sxfXxkezEsMn18RXsxLDZ9fGF7MSw1fXxiezEsNX18QnsxLDV9fGh7MSwyfXxIezEsMn18bXsxLDJ9fHN7MSwyfXxTezEsM318ensxLDR9fFp7MSw1fXxPezEsNH0pKShbXHNcU10qKS87dmFyIHdNLGtNLFNNO2Z1bmN0aW9uIERNKHQsZSxuLG8pe2xldCBpPShmdW5jdGlvbiBhKHQpe2lmKGpNKHQpKXJldHVybiB0O2lmKCJudW1iZXIiPT10eXBlb2YgdCYmIWlzTmFOKHQpKXJldHVybiBuZXcgRGF0ZSh0KTtpZigic3RyaW5nIj09dHlwZW9mIHQpe2lmKHQ9dC50cmltKCksL14oXGR7NH0oLVxkezEsMn0oLVxkezEsMn0pPyk/KSQvLnRlc3QodCkpe2NvbnN0W2Usbj0xLG89MV09dC5zcGxpdCgiLSIpLm1hcCgodD0+K3QpKTtyZXR1cm4gRU0oZSxuLTEsbyl9Y29uc3QgZT1wYXJzZUZsb2F0KHQpO2lmKCFpc05hTih0LWUpKXJldHVybiBuZXcgRGF0ZShlKTtsZXQgbjtpZihuPXQubWF0Y2goeE0pKXJldHVybihmdW5jdGlvbiBlKHQpe2NvbnN0IGU9bmV3IERhdGUoMCk7bGV0IG49MCxvPTA7Y29uc3QgaT10WzhdP2Uuc2V0VVRDRnVsbFllYXI6ZS5zZXRGdWxsWWVhcixhPXRbOF0/ZS5zZXRVVENIb3VyczplLnNldEhvdXJzO3RbOV0mJihuPU51bWJlcih0WzldK3RbMTBdKSxvPU51bWJlcih0WzldK3RbMTFdKSksaS5jYWxsKGUsTnVtYmVyKHRbMV0pLE51bWJlcih0WzJdKS0xLE51bWJlcih0WzNdKSk7Y29uc3Qgcj1OdW1iZXIodFs0XXx8MCktbixzPU51bWJlcih0WzVdfHwwKS1vLGw9TnVtYmVyKHRbNl18fDApLGM9TWF0aC5mbG9vcigxZTMqcGFyc2VGbG9hdCgiMC4iKyh0WzddfHwwKSkpO3JldHVybiBhLmNhbGwoZSxyLHMsbCxjKSxlfSkobil9Y29uc3Qgbj1uZXcgRGF0ZSh0KTtpZighak0obikpdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gY29udmVydCAiJHt0fSIgaW50byBhIGRhdGVgKTtyZXR1cm4gbn0pKHQpO2U9QU0obixlKXx8ZTtsZXQgcixzPVtdO2Zvcig7ZTspe2lmKHI9UE0uZXhlYyhlKSwhcil7cy5wdXNoKGUpO2JyZWFrfXtzPXMuY29uY2F0KHIuc2xpY2UoMSkpO2NvbnN0IHQ9cy5wb3AoKTtpZighdClicmVhaztlPXR9fWxldCBsPWkuZ2V0VGltZXpvbmVPZmZzZXQoKTtvJiYobD1WTShvLGwpLGk9KGZ1bmN0aW9uIGModCxlLG4pe2NvbnN0IG89bj8tMToxLGk9dC5nZXRUaW1lem9uZU9mZnNldCgpO3JldHVybihmdW5jdGlvbiBhKHQsZSl7cmV0dXJuKHQ9bmV3IERhdGUodC5nZXRUaW1lKCkpKS5zZXRNaW51dGVzKHQuZ2V0TWludXRlcygpK2UpLHR9KSh0LG8qKFZNKGUsaSktaSkpfSkoaSxvLCEwKSk7bGV0IGQ9IiI7cmV0dXJuIHMuZm9yRWFjaCgodD0+e2NvbnN0IGU9KGZ1bmN0aW9uIG8odCl7aWYoQk1bdF0pcmV0dXJuIEJNW3RdO2xldCBlO3N3aXRjaCh0KXtjYXNlIkciOmNhc2UiR0ciOmNhc2UiR0dHIjplPUlNKFNNLkVyYXMsZE0uQWJicmV2aWF0ZWQpO2JyZWFrO2Nhc2UiR0dHRyI6ZT1JTShTTS5FcmFzLGRNLldpZGUpO2JyZWFrO2Nhc2UiR0dHR0ciOmU9SU0oU00uRXJhcyxkTS5OYXJyb3cpO2JyZWFrO2Nhc2UieSI6ZT1OTShrTS5GdWxsWWVhciwxLDAsITEsITApO2JyZWFrO2Nhc2UieXkiOmU9Tk0oa00uRnVsbFllYXIsMiwwLCEwLCEwKTticmVhaztjYXNlInl5eSI6ZT1OTShrTS5GdWxsWWVhciwzLDAsITEsITApO2JyZWFrO2Nhc2UieXl5eSI6ZT1OTShrTS5GdWxsWWVhciw0LDAsITEsITApO2JyZWFrO2Nhc2UiWSI6ZT1MTSgxKTticmVhaztjYXNlIllZIjplPUxNKDIsITApO2JyZWFrO2Nhc2UiWVlZIjplPUxNKDMpO2JyZWFrO2Nhc2UiWVlZWSI6ZT1MTSg0KTticmVhaztjYXNlIk0iOmNhc2UiTCI6ZT1OTShrTS5Nb250aCwxLDEpO2JyZWFrO2Nhc2UiTU0iOmNhc2UiTEwiOmU9Tk0oa00uTW9udGgsMiwxKTticmVhaztjYXNlIk1NTSI6ZT1JTShTTS5Nb250aHMsZE0uQWJicmV2aWF0ZWQpO2JyZWFrO2Nhc2UiTU1NTSI6ZT1JTShTTS5Nb250aHMsZE0uV2lkZSk7YnJlYWs7Y2FzZSJNTU1NTSI6ZT1JTShTTS5Nb250aHMsZE0uTmFycm93KTticmVhaztjYXNlIkxMTCI6ZT1JTShTTS5Nb250aHMsZE0uQWJicmV2aWF0ZWQsY00uU3RhbmRhbG9uZSk7YnJlYWs7Y2FzZSJMTExMIjplPUlNKFNNLk1vbnRocyxkTS5XaWRlLGNNLlN0YW5kYWxvbmUpO2JyZWFrO2Nhc2UiTExMTEwiOmU9SU0oU00uTW9udGhzLGRNLk5hcnJvdyxjTS5TdGFuZGFsb25lKTticmVhaztjYXNlInciOmU9Rk0oMSk7YnJlYWs7Y2FzZSJ3dyI6ZT1GTSgyKTticmVhaztjYXNlIlciOmU9Rk0oMSwhMCk7YnJlYWs7Y2FzZSJkIjplPU5NKGtNLkRhdGUsMSk7YnJlYWs7Y2FzZSJkZCI6ZT1OTShrTS5EYXRlLDIpO2JyZWFrO2Nhc2UiRSI6Y2FzZSJFRSI6Y2FzZSJFRUUiOmU9SU0oU00uRGF5cyxkTS5BYmJyZXZpYXRlZCk7YnJlYWs7Y2FzZSJFRUVFIjplPUlNKFNNLkRheXMsZE0uV2lkZSk7YnJlYWs7Y2FzZSJFRUVFRSI6ZT1JTShTTS5EYXlzLGRNLk5hcnJvdyk7YnJlYWs7Y2FzZSJFRUVFRUUiOmU9SU0oU00uRGF5cyxkTS5TaG9ydCk7YnJlYWs7Y2FzZSJhIjpjYXNlImFhIjpjYXNlImFhYSI6ZT1JTShTTS5EYXlQZXJpb2RzLGRNLkFiYnJldmlhdGVkKTticmVhaztjYXNlImFhYWEiOmU9SU0oU00uRGF5UGVyaW9kcyxkTS5XaWRlKTticmVhaztjYXNlImFhYWFhIjplPUlNKFNNLkRheVBlcmlvZHMsZE0uTmFycm93KTticmVhaztjYXNlImIiOmNhc2UiYmIiOmNhc2UiYmJiIjplPUlNKFNNLkRheVBlcmlvZHMsZE0uQWJicmV2aWF0ZWQsY00uU3RhbmRhbG9uZSwhMCk7YnJlYWs7Y2FzZSJiYmJiIjplPUlNKFNNLkRheVBlcmlvZHMsZE0uV2lkZSxjTS5TdGFuZGFsb25lLCEwKTticmVhaztjYXNlImJiYmJiIjplPUlNKFNNLkRheVBlcmlvZHMsZE0uTmFycm93LGNNLlN0YW5kYWxvbmUsITApO2JyZWFrO2Nhc2UiQiI6Y2FzZSJCQiI6Y2FzZSJCQkIiOmU9SU0oU00uRGF5UGVyaW9kcyxkTS5BYmJyZXZpYXRlZCxjTS5Gb3JtYXQsITApO2JyZWFrO2Nhc2UiQkJCQiI6ZT1JTShTTS5EYXlQZXJpb2RzLGRNLldpZGUsY00uRm9ybWF0LCEwKTticmVhaztjYXNlIkJCQkJCIjplPUlNKFNNLkRheVBlcmlvZHMsZE0uTmFycm93LGNNLkZvcm1hdCwhMCk7YnJlYWs7Y2FzZSJoIjplPU5NKGtNLkhvdXJzLDEsLTEyKTticmVhaztjYXNlImhoIjplPU5NKGtNLkhvdXJzLDIsLTEyKTticmVhaztjYXNlIkgiOmU9Tk0oa00uSG91cnMsMSk7YnJlYWs7Y2FzZSJISCI6ZT1OTShrTS5Ib3VycywyKTticmVhaztjYXNlIm0iOmU9Tk0oa00uTWludXRlcywxKTticmVhaztjYXNlIm1tIjplPU5NKGtNLk1pbnV0ZXMsMik7YnJlYWs7Y2FzZSJzIjplPU5NKGtNLlNlY29uZHMsMSk7YnJlYWs7Y2FzZSJzcyI6ZT1OTShrTS5TZWNvbmRzLDIpO2JyZWFrO2Nhc2UiUyI6ZT1OTShrTS5GcmFjdGlvbmFsU2Vjb25kcywxKTticmVhaztjYXNlIlNTIjplPU5NKGtNLkZyYWN0aW9uYWxTZWNvbmRzLDIpO2JyZWFrO2Nhc2UiU1NTIjplPU5NKGtNLkZyYWN0aW9uYWxTZWNvbmRzLDMpO2JyZWFrO2Nhc2UiWiI6Y2FzZSJaWiI6Y2FzZSJaWloiOmU9ek0od00uU2hvcnQpO2JyZWFrO2Nhc2UiWlpaWloiOmU9ek0od00uRXh0ZW5kZWQpO2JyZWFrO2Nhc2UiTyI6Y2FzZSJPTyI6Y2FzZSJPT08iOmNhc2UieiI6Y2FzZSJ6eiI6Y2FzZSJ6enoiOmU9ek0od00uU2hvcnRHTVQpO2JyZWFrO2Nhc2UiT09PTyI6Y2FzZSJaWlpaIjpjYXNlInp6enoiOmU9ek0od00uTG9uZyk7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gbnVsbH1yZXR1cm4gQk1bdF09ZSxlfSkodCk7ZCs9ZT9lKGksbixsKToiJyciPT09dD8iJyI6dC5yZXBsYWNlKC8oXid8JyQpL2csIiIpLnJlcGxhY2UoLycnL2csIiciKX0pKSxkfWZ1bmN0aW9uIEVNKHQsZSxuKXtjb25zdCBvPW5ldyBEYXRlKDApO3JldHVybiBvLnNldEZ1bGxZZWFyKHQsZSxuKSxvLnNldEhvdXJzKDAsMCwwKSxvfWZ1bmN0aW9uIEFNKHQsZSl7Y29uc3Qgbj0oZnVuY3Rpb24gbyh0KXtyZXR1cm4gVGYodClbemYuTG9jYWxlSWRdfSkodCk7aWYoT01bbl09T01bbl18fHt9LE9NW25dW2VdKXJldHVybiBPTVtuXVtlXTtsZXQgaT0iIjtzd2l0Y2goZSl7Y2FzZSJzaG9ydERhdGUiOmk9Zk0odCxwTS5TaG9ydCk7YnJlYWs7Y2FzZSJtZWRpdW1EYXRlIjppPWZNKHQscE0uTWVkaXVtKTticmVhaztjYXNlImxvbmdEYXRlIjppPWZNKHQscE0uTG9uZyk7YnJlYWs7Y2FzZSJmdWxsRGF0ZSI6aT1mTSh0LHBNLkZ1bGwpO2JyZWFrO2Nhc2Uic2hvcnRUaW1lIjppPWdNKHQscE0uU2hvcnQpO2JyZWFrO2Nhc2UibWVkaXVtVGltZSI6aT1nTSh0LHBNLk1lZGl1bSk7YnJlYWs7Y2FzZSJsb25nVGltZSI6aT1nTSh0LHBNLkxvbmcpO2JyZWFrO2Nhc2UiZnVsbFRpbWUiOmk9Z00odCxwTS5GdWxsKTticmVhaztjYXNlInNob3J0Ijpjb25zdCBlPUFNKHQsInNob3J0VGltZSIpLG49QU0odCwic2hvcnREYXRlIik7aT1STShoTSh0LHBNLlNob3J0KSxbZSxuXSk7YnJlYWs7Y2FzZSJtZWRpdW0iOmNvbnN0IG89QU0odCwibWVkaXVtVGltZSIpLGE9QU0odCwibWVkaXVtRGF0ZSIpO2k9Uk0oaE0odCxwTS5NZWRpdW0pLFtvLGFdKTticmVhaztjYXNlImxvbmciOmNvbnN0IHI9QU0odCwibG9uZ1RpbWUiKSxzPUFNKHQsImxvbmdEYXRlIik7aT1STShoTSh0LHBNLkxvbmcpLFtyLHNdKTticmVhaztjYXNlImZ1bGwiOmNvbnN0IGw9QU0odCwiZnVsbFRpbWUiKSxjPUFNKHQsImZ1bGxEYXRlIik7aT1STShoTSh0LHBNLkZ1bGwpLFtsLGNdKX1yZXR1cm4gaSYmKE9NW25dW2VdPWkpLGl9ZnVuY3Rpb24gUk0odCxlKXtyZXR1cm4gZSYmKHQ9dC5yZXBsYWNlKC9ceyhbXn1dKyl9L2csKGZ1bmN0aW9uKHQsbil7cmV0dXJuIG51bGwhPWUmJm4gaW4gZT9lW25dOnR9KSkpLHR9ZnVuY3Rpb24gVE0odCxlLG49Ii0iLG8saSl7bGV0IGE9IiI7KHQ8MHx8aSYmdDw9MCkmJihpP3Q9MS10Oih0PS10LGE9bikpO2xldCByPVN0cmluZyh0KTtmb3IoO3IubGVuZ3RoPGU7KXI9IjAiK3I7cmV0dXJuIG8mJihyPXIuc3Vic3RyKHIubGVuZ3RoLWUpKSxhK3J9ZnVuY3Rpb24gTk0odCxlLG49MCxvPSExLGk9ITEpe3JldHVybiBmdW5jdGlvbihhLHIpe2xldCBzPShmdW5jdGlvbiBsKHQsZSl7c3dpdGNoKHQpe2Nhc2Uga00uRnVsbFllYXI6cmV0dXJuIGUuZ2V0RnVsbFllYXIoKTtjYXNlIGtNLk1vbnRoOnJldHVybiBlLmdldE1vbnRoKCk7Y2FzZSBrTS5EYXRlOnJldHVybiBlLmdldERhdGUoKTtjYXNlIGtNLkhvdXJzOnJldHVybiBlLmdldEhvdXJzKCk7Y2FzZSBrTS5NaW51dGVzOnJldHVybiBlLmdldE1pbnV0ZXMoKTtjYXNlIGtNLlNlY29uZHM6cmV0dXJuIGUuZ2V0U2Vjb25kcygpO2Nhc2Uga00uRnJhY3Rpb25hbFNlY29uZHM6cmV0dXJuIGUuZ2V0TWlsbGlzZWNvbmRzKCk7Y2FzZSBrTS5EYXk6cmV0dXJuIGUuZ2V0RGF5KCk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gRGF0ZVR5cGUgdmFsdWUgIiR7dH0iLmApfX0pKHQsYSk7aWYoKG4+MHx8cz4tbikmJihzKz1uKSx0PT09a00uSG91cnMpMD09PXMmJi0xMj09PW4mJihzPTEyKTtlbHNlIGlmKHQ9PT1rTS5GcmFjdGlvbmFsU2Vjb25kcylyZXR1cm4oZnVuY3Rpb24gYyh0LGUpe3JldHVybiBUTSh0LDMpLnN1YnN0cigwLGUpfSkocyxlKTtjb25zdCBkPWJNKHIsbU0uTWludXNTaWduKTtyZXR1cm4gVE0ocyxlLGQsbyxpKX19ZnVuY3Rpb24gSU0odCxlLG49Y00uRm9ybWF0LG89ITEpe3JldHVybiBmdW5jdGlvbihpLGEpe3JldHVybihmdW5jdGlvbiByKHQsZSxuLG8saSxhKXtzd2l0Y2gobil7Y2FzZSBTTS5Nb250aHM6cmV0dXJuKGZ1bmN0aW9uIHIodCxlLG4pe2NvbnN0IG89VGYodCksaT1NTShbb1t6Zi5Nb250aHNGb3JtYXRdLG9bemYuTW9udGhzU3RhbmRhbG9uZV1dLGUpO3JldHVybiBNTShpLG4pfSkoZSxpLG8pW3QuZ2V0TW9udGgoKV07Y2FzZSBTTS5EYXlzOnJldHVybihmdW5jdGlvbiBzKHQsZSxuKXtjb25zdCBvPVRmKHQpLGk9TU0oW29bemYuRGF5c0Zvcm1hdF0sb1t6Zi5EYXlzU3RhbmRhbG9uZV1dLGUpO3JldHVybiBNTShpLG4pfSkoZSxpLG8pW3QuZ2V0RGF5KCldO2Nhc2UgU00uRGF5UGVyaW9kczpjb25zdCByPXQuZ2V0SG91cnMoKSxzPXQuZ2V0TWludXRlcygpO2lmKGEpe2NvbnN0IHQ9KGZ1bmN0aW9uIGwodCl7Y29uc3QgZT1UZih0KTtyZXR1cm4gQ00oZSksKGVbemYuRXh0cmFEYXRhXVsyXXx8W10pLm1hcCgodD0+InN0cmluZyI9PXR5cGVvZiB0P3ZNKHQpOlt2TSh0WzBdKSx2TSh0WzFdKV0pKX0pKGUpLG49KGZ1bmN0aW9uIGModCxlLG4pe2NvbnN0IG89VGYodCk7Q00obyk7Y29uc3QgaT1NTShbb1t6Zi5FeHRyYURhdGFdWzBdLG9bemYuRXh0cmFEYXRhXVsxXV0sZSl8fFtdO3JldHVybiBNTShpLG4pfHxbXX0pKGUsaSxvKSxhPXQuZmluZEluZGV4KCh0PT57aWYoQXJyYXkuaXNBcnJheSh0KSl7Y29uc3RbZSxuXT10LG89cj49ZS5ob3VycyYmcz49ZS5taW51dGVzLGk9cjxuLmhvdXJzfHxyPT09bi5ob3VycyYmczxuLm1pbnV0ZXM7aWYoZS5ob3VyczxuLmhvdXJzKXtpZihvJiZpKXJldHVybiEwfWVsc2UgaWYob3x8aSlyZXR1cm4hMH1lbHNlIGlmKHQuaG91cnM9PT1yJiZ0Lm1pbnV0ZXM9PT1zKXJldHVybiEwO3JldHVybiExfSkpO2lmKC0xIT09YSlyZXR1cm4gblthXX1yZXR1cm4oZnVuY3Rpb24gZCh0LGUsbil7Y29uc3Qgbz1UZih0KSxpPU1NKFtvW3pmLkRheVBlcmlvZHNGb3JtYXRdLG9bemYuRGF5UGVyaW9kc1N0YW5kYWxvbmVdXSxlKTtyZXR1cm4gTU0oaSxuKX0pKGUsaSxvKVtyPDEyPzA6MV07Y2FzZSBTTS5FcmFzOnJldHVybihmdW5jdGlvbiBwKHQsZSl7cmV0dXJuIE1NKFRmKHQpW3pmLkVyYXNdLGUpfSkoZSxvKVt0LmdldEZ1bGxZZWFyKCk8PTA/MDoxXTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgdW5leHBlY3RlZCB0cmFuc2xhdGlvbiB0eXBlICR7bn1gKX19KShpLGEsdCxlLG4sbyl9fWZ1bmN0aW9uIHpNKHQpe3JldHVybiBmdW5jdGlvbihlLG4sbyl7Y29uc3QgaT0tMSpvLGE9Yk0obixtTS5NaW51c1NpZ24pLHI9aT4wP01hdGguZmxvb3IoaS82MCk6TWF0aC5jZWlsKGkvNjApO3N3aXRjaCh0KXtjYXNlIHdNLlNob3J0OnJldHVybihpPj0wPyIrIjoiIikrVE0ociwyLGEpK1RNKE1hdGguYWJzKGklNjApLDIsYSk7Y2FzZSB3TS5TaG9ydEdNVDpyZXR1cm4iR01UIisoaT49MD8iKyI6IiIpK1RNKHIsMSxhKTtjYXNlIHdNLkxvbmc6cmV0dXJuIkdNVCIrKGk+PTA/IisiOiIiKStUTShyLDIsYSkrIjoiK1RNKE1hdGguYWJzKGklNjApLDIsYSk7Y2FzZSB3TS5FeHRlbmRlZDpyZXR1cm4gMD09PW8/IloiOihpPj0wPyIrIjoiIikrVE0ociwyLGEpKyI6IitUTShNYXRoLmFicyhpJTYwKSwyLGEpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHpvbmUgd2lkdGggIiR7dH0iYCl9fX1mdW5jdGlvbiBITSh0KXtyZXR1cm4gRU0odC5nZXRGdWxsWWVhcigpLHQuZ2V0TW9udGgoKSx0LmdldERhdGUoKSsoNC10LmdldERheSgpKSl9ZnVuY3Rpb24gRk0odCxlPSExKXtyZXR1cm4gZnVuY3Rpb24obixvKXtsZXQgaTtpZihlKXtjb25zdCB0PW5ldyBEYXRlKG4uZ2V0RnVsbFllYXIoKSxuLmdldE1vbnRoKCksMSkuZ2V0RGF5KCktMSxlPW4uZ2V0RGF0ZSgpO2k9MStNYXRoLmZsb29yKChlK3QpLzcpfWVsc2V7Y29uc3QgdD1ITShuKSxlPShmdW5jdGlvbiBhKHQpe2NvbnN0IGU9RU0odCwwLDEpLmdldERheSgpO3JldHVybiBFTSh0LDAsMSsoZTw9ND80OjExKS1lKX0pKHQuZ2V0RnVsbFllYXIoKSksbz10LmdldFRpbWUoKS1lLmdldFRpbWUoKTtpPTErTWF0aC5yb3VuZChvLzYwNDhlNSl9cmV0dXJuIFRNKGksdCxiTShvLG1NLk1pbnVzU2lnbikpfX1mdW5jdGlvbiBMTSh0LGU9ITEpe3JldHVybiBmdW5jdGlvbihuLG8pe3JldHVybiBUTShITShuKS5nZXRGdWxsWWVhcigpLHQsYk0obyxtTS5NaW51c1NpZ24pLGUpfX0hKGZ1bmN0aW9uKHQpe3RbdC5TaG9ydD0wXT0iU2hvcnQiLHRbdC5TaG9ydEdNVD0xXT0iU2hvcnRHTVQiLHRbdC5Mb25nPTJdPSJMb25nIix0W3QuRXh0ZW5kZWQ9M109IkV4dGVuZGVkIn0pKHdNfHwod009e30pKSwoZnVuY3Rpb24odCl7dFt0LkZ1bGxZZWFyPTBdPSJGdWxsWWVhciIsdFt0Lk1vbnRoPTFdPSJNb250aCIsdFt0LkRhdGU9Ml09IkRhdGUiLHRbdC5Ib3Vycz0zXT0iSG91cnMiLHRbdC5NaW51dGVzPTRdPSJNaW51dGVzIix0W3QuU2Vjb25kcz01XT0iU2Vjb25kcyIsdFt0LkZyYWN0aW9uYWxTZWNvbmRzPTZdPSJGcmFjdGlvbmFsU2Vjb25kcyIsdFt0LkRheT03XT0iRGF5In0pKGtNfHwoa009e30pKSwoZnVuY3Rpb24odCl7dFt0LkRheVBlcmlvZHM9MF09IkRheVBlcmlvZHMiLHRbdC5EYXlzPTFdPSJEYXlzIix0W3QuTW9udGhzPTJdPSJNb250aHMiLHRbdC5FcmFzPTNdPSJFcmFzIn0pKFNNfHwoU009e30pKTtjb25zdCBCTT17fTtmdW5jdGlvbiBWTSh0LGUpe3Q9dC5yZXBsYWNlKC86L2csIiIpO2NvbnN0IG49RGF0ZS5wYXJzZSgiSmFuIDAxLCAxOTcwIDAwOjAwOjAwICIrdCkvNmU0O3JldHVybiBpc05hTihuKT9lOm59ZnVuY3Rpb24gak0odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBEYXRlJiYhaXNOYU4odC52YWx1ZU9mKCkpfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jb25zdCBVTT0vXihcZCspP1wuKChcZCspKC0oXGQrKSk/KT8kLyxXTT0iLiIsR009IjAiO2Z1bmN0aW9uIFlNKHQsZSxuLG8saSxhLHI9ITEpe2xldCBzPSIiLGw9ITE7aWYoaXNGaW5pdGUodCkpe2xldCBjPShmdW5jdGlvbiBjKHQpe2xldCBlLG4sbyxpLGEscj1NYXRoLmFicyh0KSsiIixzPTA7Zm9yKChuPXIuaW5kZXhPZihXTSkpPi0xJiYocj1yLnJlcGxhY2UoV00sIiIpKSwobz1yLnNlYXJjaCgvZS9pKSk+MD8objwwJiYobj1vKSxuKz0rci5zbGljZShvKzEpLHI9ci5zdWJzdHJpbmcoMCxvKSk6bjwwJiYobj1yLmxlbmd0aCksbz0wO3IuY2hhckF0KG8pPT09R007bysrKTtpZihvPT09KGE9ci5sZW5ndGgpKWU9WzBdLG49MTtlbHNle2ZvcihhLS07ci5jaGFyQXQoYSk9PT1HTTspYS0tO2ZvcihuLT1vLGU9W10saT0wO288PWE7bysrLGkrKyllW2ldPU51bWJlcihyLmNoYXJBdChvKSl9cmV0dXJuIG4+MjImJihlPWUuc3BsaWNlKDAsMjEpLHM9bi0xLG49MSkse2RpZ2l0czplLGV4cG9uZW50OnMsaW50ZWdlckxlbjpufX0pKHQpO3ImJihjPShmdW5jdGlvbiBkKHQpe2lmKDA9PT10LmRpZ2l0c1swXSlyZXR1cm4gdDtjb25zdCBlPXQuZGlnaXRzLmxlbmd0aC10LmludGVnZXJMZW47cmV0dXJuIHQuZXhwb25lbnQ/dC5leHBvbmVudCs9MjooMD09PWU/dC5kaWdpdHMucHVzaCgwLDApOjE9PT1lJiZ0LmRpZ2l0cy5wdXNoKDApLHQuaW50ZWdlckxlbis9MiksdH0pKGMpKTtsZXQgZD1lLm1pbkludCxwPWUubWluRnJhYyxtPWUubWF4RnJhYztpZihhKXtjb25zdCB0PWEubWF0Y2goVU0pO2lmKG51bGw9PT10KXRocm93IG5ldyBFcnJvcihgJHthfSBpcyBub3QgYSB2YWxpZCBkaWdpdCBpbmZvYCk7Y29uc3QgZT10WzFdLG49dFszXSxvPXRbNV07bnVsbCE9ZSYmKGQ9WE0oZSkpLG51bGwhPW4mJihwPVhNKG4pKSxudWxsIT1vP209WE0obyk6bnVsbCE9biYmcD5tJiYobT1wKX0hKGZ1bmN0aW9uIHAodCxlLG4pe2lmKGU+bil0aHJvdyBuZXcgRXJyb3IoYFRoZSBtaW5pbXVtIG51bWJlciBvZiBkaWdpdHMgYWZ0ZXIgZnJhY3Rpb24gKCR7ZX0pIGlzIGhpZ2hlciB0aGFuIHRoZSBtYXhpbXVtICgke259KS5gKTtsZXQgbz10LmRpZ2l0cyxpPW8ubGVuZ3RoLXQuaW50ZWdlckxlbjtjb25zdCBhPU1hdGgubWluKE1hdGgubWF4KGUsaSksbik7bGV0IHI9YSt0LmludGVnZXJMZW4scz1vW3JdO2lmKHI+MCl7by5zcGxpY2UoTWF0aC5tYXgodC5pbnRlZ2VyTGVuLHIpKTtmb3IobGV0IHQ9cjt0PG8ubGVuZ3RoO3QrKylvW3RdPTB9ZWxzZXtpPU1hdGgubWF4KDAsaSksdC5pbnRlZ2VyTGVuPTEsby5sZW5ndGg9TWF0aC5tYXgoMSxyPWErMSksb1swXT0wO2ZvcihsZXQgdD0xO3Q8cjt0Kyspb1t0XT0wfWlmKHM+PTUpaWYoci0xPDApe2ZvcihsZXQgZT0wO2U+cjtlLS0pby51bnNoaWZ0KDApLHQuaW50ZWdlckxlbisrO28udW5zaGlmdCgxKSx0LmludGVnZXJMZW4rK31lbHNlIG9bci0xXSsrO2Zvcig7aTxNYXRoLm1heCgwLGEpO2krKylvLnB1c2goMCk7bGV0IGw9MCE9PWE7Y29uc3QgYz1lK3QuaW50ZWdlckxlbixkPW8ucmVkdWNlUmlnaHQoKGZ1bmN0aW9uKHQsZSxuLG8pe3JldHVybiBvW25dPShlKz10KTwxMD9lOmUtMTAsbCYmKDA9PT1vW25dJiZuPj1jP28ucG9wKCk6bD0hMSksZT49MTA/MTowfSksMCk7ZCYmKG8udW5zaGlmdChkKSx0LmludGVnZXJMZW4rKyl9KShjLHAsbSk7bGV0IHU9Yy5kaWdpdHMsZj1jLmludGVnZXJMZW47Y29uc3QgZz1jLmV4cG9uZW50O2xldCBoPVtdO2ZvcihsPXUuZXZlcnkoKHQ9PiF0KSk7ZjxkO2YrKyl1LnVuc2hpZnQoMCk7Zm9yKDtmPDA7ZisrKXUudW5zaGlmdCgwKTtmPjA/aD11LnNwbGljZShmLHUubGVuZ3RoKTooaD11LHU9WzBdKTtjb25zdCBiPVtdO2Zvcih1Lmxlbmd0aD49ZS5sZ1NpemUmJmIudW5zaGlmdCh1LnNwbGljZSgtZS5sZ1NpemUsdS5sZW5ndGgpLmpvaW4oIiIpKTt1Lmxlbmd0aD5lLmdTaXplOyliLnVuc2hpZnQodS5zcGxpY2UoLWUuZ1NpemUsdS5sZW5ndGgpLmpvaW4oIiIpKTt1Lmxlbmd0aCYmYi51bnNoaWZ0KHUuam9pbigiIikpLHM9Yi5qb2luKGJNKG4sbykpLGgubGVuZ3RoJiYocys9Yk0obixpKStoLmpvaW4oIiIpKSxnJiYocys9Yk0obixtTS5FeHBvbmVudGlhbCkrIisiK2cpfWVsc2Ugcz1iTShuLG1NLkluZmluaXR5KTtyZXR1cm4gcz10PDAmJiFsP2UubmVnUHJlK3MrZS5uZWdTdWY6ZS5wb3NQcmUrcytlLnBvc1N1ZixzfWZ1bmN0aW9uIHFNKHQsZSxuKXtyZXR1cm4gWU0odCxaTSh5TShlLHNNLkRlY2ltYWwpLGJNKGUsbU0uTWludXNTaWduKSksZSxtTS5Hcm91cCxtTS5EZWNpbWFsLG4pfWZ1bmN0aW9uIFpNKHQsZT0iLSIpe2NvbnN0IG49e21pbkludDoxLG1pbkZyYWM6MCxtYXhGcmFjOjAscG9zUHJlOiIiLHBvc1N1ZjoiIixuZWdQcmU6IiIsbmVnU3VmOiIiLGdTaXplOjAsbGdTaXplOjB9LG89dC5zcGxpdCgiOyIpLGk9b1swXSxhPW9bMV0scj0tMSE9PWkuaW5kZXhPZihXTSk/aS5zcGxpdChXTSk6W2kuc3Vic3RyaW5nKDAsaS5sYXN0SW5kZXhPZihHTSkrMSksaS5zdWJzdHJpbmcoaS5sYXN0SW5kZXhPZihHTSkrMSldLHM9clswXSxsPXJbMV18fCIiO24ucG9zUHJlPXMuc3Vic3RyKDAscy5pbmRleE9mKCIjIikpO2ZvcihsZXQgdD0wO3Q8bC5sZW5ndGg7dCsrKXtjb25zdCBlPWwuY2hhckF0KHQpO2U9PT1HTT9uLm1pbkZyYWM9bi5tYXhGcmFjPXQrMToiIyI9PT1lP24ubWF4RnJhYz10KzE6bi5wb3NTdWYrPWV9Y29uc3QgYz1zLnNwbGl0KCIsIik7aWYobi5nU2l6ZT1jWzFdP2NbMV0ubGVuZ3RoOjAsbi5sZ1NpemU9Y1syXXx8Y1sxXT8oY1syXXx8Y1sxXSkubGVuZ3RoOjAsYSl7Y29uc3QgdD1pLmxlbmd0aC1uLnBvc1ByZS5sZW5ndGgtbi5wb3NTdWYubGVuZ3RoLGU9YS5pbmRleE9mKCIjIik7bi5uZWdQcmU9YS5zdWJzdHIoMCxlKS5yZXBsYWNlKC8nL2csIiIpLG4ubmVnU3VmPWEuc3Vic3RyKGUrdCkucmVwbGFjZSgvJy9nLCIiKX1lbHNlIG4ubmVnUHJlPWUrbi5wb3NQcmUsbi5uZWdTdWY9bi5wb3NTdWY7cmV0dXJuIG59ZnVuY3Rpb24gWE0odCl7Y29uc3QgZT1wYXJzZUludCh0KTtpZihpc05hTihlKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaW50ZWdlciBsaXRlcmFsIHdoZW4gcGFyc2luZyAiK3QpO3JldHVybiBlfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jbGFzcyBLTXt9ZnVuY3Rpb24gSk0odCxlLG4sbyl7bGV0IGk9YD0ke3R9YDtpZihlLmluZGV4T2YoaSk+LTEpcmV0dXJuIGk7aWYoaT1uLmdldFBsdXJhbENhdGVnb3J5KHQsbyksZS5pbmRleE9mKGkpPi0xKXJldHVybiBpO2lmKGUuaW5kZXhPZigib3RoZXIiKT4tMSlyZXR1cm4ib3RoZXIiO3Rocm93IG5ldyBFcnJvcihgTm8gcGx1cmFsIG1lc3NhZ2UgZm91bmQgZm9yIHZhbHVlICIke3R9ImApfWNsYXNzIFFNIGV4dGVuZHMgS017Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLmxvY2FsZT10fWdldFBsdXJhbENhdGVnb3J5KHQsZSl7c3dpdGNoKF9NKGV8fHRoaXMubG9jYWxlKSh0KSl7Y2FzZSBsTS5aZXJvOnJldHVybiJ6ZXJvIjtjYXNlIGxNLk9uZTpyZXR1cm4ib25lIjtjYXNlIGxNLlR3bzpyZXR1cm4idHdvIjtjYXNlIGxNLkZldzpyZXR1cm4iZmV3IjtjYXNlIGxNLk1hbnk6cmV0dXJuIm1hbnkiO2RlZmF1bHQ6cmV0dXJuIm90aGVyIn19fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KZnVuY3Rpb24gJE0odCxlKXtlPWVuY29kZVVSSUNvbXBvbmVudChlKTtmb3IoY29uc3QgbiBvZiB0LnNwbGl0KCI7Iikpe2NvbnN0IHQ9bi5pbmRleE9mKCI9IiksW28saV09LTE9PXQ/W24sIiJdOltuLnNsaWNlKDAsdCksbi5zbGljZSh0KzEpXTtpZihvLnRyaW0oKT09PWUpcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChpKX1yZXR1cm4gbnVsbH0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovUU0uybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFFNKSh1cyhCXykpfSxRTS7JtXByb3Y9bG8oe3Rva2VuOlFNLGZhY3Rvcnk6UU0uybVmYWN9KSxRTS5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltCX119XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoUU0sW3t0eXBlOkptfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltCX119XX1dfSksbnVsbCk7Y2xhc3MgdHZ7Y29uc3RydWN0b3IodCxlLG4sbyl7dGhpcy5faXRlcmFibGVEaWZmZXJzPXQsdGhpcy5fa2V5VmFsdWVEaWZmZXJzPWUsdGhpcy5fbmdFbD1uLHRoaXMuX3JlbmRlcmVyPW8sdGhpcy5faXRlcmFibGVEaWZmZXI9bnVsbCx0aGlzLl9rZXlWYWx1ZURpZmZlcj1udWxsLHRoaXMuX2luaXRpYWxDbGFzc2VzPVtdLHRoaXMuX3Jhd0NsYXNzPW51bGx9c2V0IGtsYXNzKHQpe3RoaXMuX3JlbW92ZUNsYXNzZXModGhpcy5faW5pdGlhbENsYXNzZXMpLHRoaXMuX2luaXRpYWxDbGFzc2VzPSJzdHJpbmciPT10eXBlb2YgdD90LnNwbGl0KC9ccysvKTpbXSx0aGlzLl9hcHBseUNsYXNzZXModGhpcy5faW5pdGlhbENsYXNzZXMpLHRoaXMuX2FwcGx5Q2xhc3Nlcyh0aGlzLl9yYXdDbGFzcyl9c2V0IG5nQ2xhc3ModCl7dGhpcy5fcmVtb3ZlQ2xhc3Nlcyh0aGlzLl9yYXdDbGFzcyksdGhpcy5fYXBwbHlDbGFzc2VzKHRoaXMuX2luaXRpYWxDbGFzc2VzKSx0aGlzLl9pdGVyYWJsZURpZmZlcj1udWxsLHRoaXMuX2tleVZhbHVlRGlmZmVyPW51bGwsdGhpcy5fcmF3Q2xhc3M9InN0cmluZyI9PXR5cGVvZiB0P3Quc3BsaXQoL1xzKy8pOnQsdGhpcy5fcmF3Q2xhc3MmJih3bSh0aGlzLl9yYXdDbGFzcyk/dGhpcy5faXRlcmFibGVEaWZmZXI9dGhpcy5faXRlcmFibGVEaWZmZXJzLmZpbmQodGhpcy5fcmF3Q2xhc3MpLmNyZWF0ZSgpOnRoaXMuX2tleVZhbHVlRGlmZmVyPXRoaXMuX2tleVZhbHVlRGlmZmVycy5maW5kKHRoaXMuX3Jhd0NsYXNzKS5jcmVhdGUoKSl9bmdEb0NoZWNrKCl7aWYodGhpcy5faXRlcmFibGVEaWZmZXIpe2NvbnN0IHQ9dGhpcy5faXRlcmFibGVEaWZmZXIuZGlmZih0aGlzLl9yYXdDbGFzcyk7dCYmdGhpcy5fYXBwbHlJdGVyYWJsZUNoYW5nZXModCl9ZWxzZSBpZih0aGlzLl9rZXlWYWx1ZURpZmZlcil7Y29uc3QgdD10aGlzLl9rZXlWYWx1ZURpZmZlci5kaWZmKHRoaXMuX3Jhd0NsYXNzKTt0JiZ0aGlzLl9hcHBseUtleVZhbHVlQ2hhbmdlcyh0KX19X2FwcGx5S2V5VmFsdWVDaGFuZ2VzKHQpe3QuZm9yRWFjaEFkZGVkSXRlbSgodD0+dGhpcy5fdG9nZ2xlQ2xhc3ModC5rZXksdC5jdXJyZW50VmFsdWUpKSksdC5mb3JFYWNoQ2hhbmdlZEl0ZW0oKHQ9PnRoaXMuX3RvZ2dsZUNsYXNzKHQua2V5LHQuY3VycmVudFZhbHVlKSkpLHQuZm9yRWFjaFJlbW92ZWRJdGVtKCh0PT57dC5wcmV2aW91c1ZhbHVlJiZ0aGlzLl90b2dnbGVDbGFzcyh0LmtleSwhMSl9KSl9X2FwcGx5SXRlcmFibGVDaGFuZ2VzKHQpe3QuZm9yRWFjaEFkZGVkSXRlbSgodD0+e2lmKCJzdHJpbmciIT10eXBlb2YgdC5pdGVtKXRocm93IG5ldyBFcnJvcihgTmdDbGFzcyBjYW4gb25seSB0b2dnbGUgQ1NTIGNsYXNzZXMgZXhwcmVzc2VkIGFzIHN0cmluZ3MsIGdvdCAke1JuKHQuaXRlbSl9YCk7dGhpcy5fdG9nZ2xlQ2xhc3ModC5pdGVtLCEwKX0pKSx0LmZvckVhY2hSZW1vdmVkSXRlbSgodD0+dGhpcy5fdG9nZ2xlQ2xhc3ModC5pdGVtLCExKSkpfV9hcHBseUNsYXNzZXModCl7dCYmKEFycmF5LmlzQXJyYXkodCl8fHQgaW5zdGFuY2VvZiBTZXQ/dC5mb3JFYWNoKCh0PT50aGlzLl90b2dnbGVDbGFzcyh0LCEwKSkpOk9iamVjdC5rZXlzKHQpLmZvckVhY2goKGU9PnRoaXMuX3RvZ2dsZUNsYXNzKGUsISF0W2VdKSkpKX1fcmVtb3ZlQ2xhc3Nlcyh0KXt0JiYoQXJyYXkuaXNBcnJheSh0KXx8dCBpbnN0YW5jZW9mIFNldD90LmZvckVhY2goKHQ9PnRoaXMuX3RvZ2dsZUNsYXNzKHQsITEpKSk6T2JqZWN0LmtleXModCkuZm9yRWFjaCgodD0+dGhpcy5fdG9nZ2xlQ2xhc3ModCwhMSkpKSl9X3RvZ2dsZUNsYXNzKHQsZSl7KHQ9dC50cmltKCkpJiZ0LnNwbGl0KC9ccysvZykuZm9yRWFjaCgodD0+e2U/dGhpcy5fcmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LHQpOnRoaXMuX3JlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuX25nRWwubmF0aXZlRWxlbWVudCx0KX0pKX19dHYuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHR2KShNdShFaCksTXUoUmgpLE11KGNoKSxNdSh1aCkpfSx0di7JtWRpcj1Kbyh7dHlwZTp0dixzZWxlY3RvcnM6W1siIiwibmdDbGFzcyIsIiJdXSxpbnB1dHM6e2tsYXNzOlsiY2xhc3MiLCJrbGFzcyJdLG5nQ2xhc3M6Im5nQ2xhc3MifX0pLHR2LmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6RWh9LHt0eXBlOlJofSx7dHlwZTpjaH0se3R5cGU6dWh9XSx0di5wcm9wRGVjb3JhdG9ycz17a2xhc3M6W3t0eXBlOnlfLGFyZ3M6WyJjbGFzcyJdfV0sbmdDbGFzczpbe3R5cGU6eV8sYXJnczpbIm5nQ2xhc3MiXX1dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHR2LFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6IltuZ0NsYXNzXSJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpFaH0se3R5cGU6Umh9LHt0eXBlOmNofSx7dHlwZTp1aH1dfSkse2tsYXNzOlt7dHlwZTp5XyxhcmdzOlsiY2xhc3MiXX1dLG5nQ2xhc3M6W3t0eXBlOnlfLGFyZ3M6WyJuZ0NsYXNzIl19XX0pOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3MgZXZ7Y29uc3RydWN0b3IodCl7dGhpcy5fdmlld0NvbnRhaW5lclJlZj10LHRoaXMuX2NvbXBvbmVudFJlZj1udWxsLHRoaXMuX21vZHVsZVJlZj1udWxsfW5nT25DaGFuZ2VzKHQpe2lmKHRoaXMuX3ZpZXdDb250YWluZXJSZWYuY2xlYXIoKSx0aGlzLl9jb21wb25lbnRSZWY9bnVsbCx0aGlzLm5nQ29tcG9uZW50T3V0bGV0KXtjb25zdCBlPXRoaXMubmdDb21wb25lbnRPdXRsZXRJbmplY3Rvcnx8dGhpcy5fdmlld0NvbnRhaW5lclJlZi5wYXJlbnRJbmplY3RvcjtpZih0Lm5nQ29tcG9uZW50T3V0bGV0TmdNb2R1bGVGYWN0b3J5KWlmKHRoaXMuX21vZHVsZVJlZiYmdGhpcy5fbW9kdWxlUmVmLmRlc3Ryb3koKSx0aGlzLm5nQ29tcG9uZW50T3V0bGV0TmdNb2R1bGVGYWN0b3J5KXtjb25zdCB0PWUuZ2V0KFpoKTt0aGlzLl9tb2R1bGVSZWY9dGhpcy5uZ0NvbXBvbmVudE91dGxldE5nTW9kdWxlRmFjdG9yeS5jcmVhdGUodC5pbmplY3Rvcil9ZWxzZSB0aGlzLl9tb2R1bGVSZWY9bnVsbDtjb25zdCBuPSh0aGlzLl9tb2R1bGVSZWY/dGhpcy5fbW9kdWxlUmVmLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjplLmdldChyaCkpLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KHRoaXMubmdDb21wb25lbnRPdXRsZXQpO3RoaXMuX2NvbXBvbmVudFJlZj10aGlzLl92aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChuLHRoaXMuX3ZpZXdDb250YWluZXJSZWYubGVuZ3RoLGUsdGhpcy5uZ0NvbXBvbmVudE91dGxldENvbnRlbnQpfX1uZ09uRGVzdHJveSgpe3RoaXMuX21vZHVsZVJlZiYmdGhpcy5fbW9kdWxlUmVmLmRlc3Ryb3koKX19ZXYuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGV2KShNdShYaCkpfSxldi7JtWRpcj1Kbyh7dHlwZTpldixzZWxlY3RvcnM6W1siIiwibmdDb21wb25lbnRPdXRsZXQiLCIiXV0saW5wdXRzOntuZ0NvbXBvbmVudE91dGxldDoibmdDb21wb25lbnRPdXRsZXQiLG5nQ29tcG9uZW50T3V0bGV0SW5qZWN0b3I6Im5nQ29tcG9uZW50T3V0bGV0SW5qZWN0b3IiLG5nQ29tcG9uZW50T3V0bGV0Q29udGVudDoibmdDb21wb25lbnRPdXRsZXRDb250ZW50IixuZ0NvbXBvbmVudE91dGxldE5nTW9kdWxlRmFjdG9yeToibmdDb21wb25lbnRPdXRsZXROZ01vZHVsZUZhY3RvcnkifSxmZWF0dXJlczpbU2ldfSksZXYuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpYaH1dLGV2LnByb3BEZWNvcmF0b3JzPXtuZ0NvbXBvbmVudE91dGxldDpbe3R5cGU6eV99XSxuZ0NvbXBvbmVudE91dGxldEluamVjdG9yOlt7dHlwZTp5X31dLG5nQ29tcG9uZW50T3V0bGV0Q29udGVudDpbe3R5cGU6eV99XSxuZ0NvbXBvbmVudE91dGxldE5nTW9kdWxlRmFjdG9yeTpbe3R5cGU6eV99XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihldixbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJbbmdDb21wb25lbnRPdXRsZXRdIn1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOlhofV19KSx7bmdDb21wb25lbnRPdXRsZXQ6W3t0eXBlOnlffV0sbmdDb21wb25lbnRPdXRsZXRJbmplY3Rvcjpbe3R5cGU6eV99XSxuZ0NvbXBvbmVudE91dGxldENvbnRlbnQ6W3t0eXBlOnlffV0sbmdDb21wb25lbnRPdXRsZXROZ01vZHVsZUZhY3Rvcnk6W3t0eXBlOnlffV19KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIG52e2NvbnN0cnVjdG9yKHQsZSxuLG8pe3RoaXMuJGltcGxpY2l0PXQsdGhpcy5uZ0Zvck9mPWUsdGhpcy5pbmRleD1uLHRoaXMuY291bnQ9b31nZXQgZmlyc3QoKXtyZXR1cm4gMD09PXRoaXMuaW5kZXh9Z2V0IGxhc3QoKXtyZXR1cm4gdGhpcy5pbmRleD09PXRoaXMuY291bnQtMX1nZXQgZXZlbigpe3JldHVybiB0aGlzLmluZGV4JTI9PTB9Z2V0IG9kZCgpe3JldHVybiF0aGlzLmV2ZW59fWNsYXNzIG92e2NvbnN0cnVjdG9yKHQsZSxuKXt0aGlzLl92aWV3Q29udGFpbmVyPXQsdGhpcy5fdGVtcGxhdGU9ZSx0aGlzLl9kaWZmZXJzPW4sdGhpcy5fbmdGb3JPZj1udWxsLHRoaXMuX25nRm9yT2ZEaXJ0eT0hMCx0aGlzLl9kaWZmZXI9bnVsbH1zZXQgbmdGb3JPZih0KXt0aGlzLl9uZ0Zvck9mPXQsdGhpcy5fbmdGb3JPZkRpcnR5PSEwfXNldCBuZ0ZvclRyYWNrQnkodCl7InVuZGVmaW5lZCIhPXR5cGVvZiBuZ0Rldk1vZGUmJiFuZ0Rldk1vZGV8fG51bGw9PXR8fCJmdW5jdGlvbiI9PXR5cGVvZiB0fHxjb25zb2xlJiZjb25zb2xlLndhcm4mJmNvbnNvbGUud2FybihgdHJhY2tCeSBtdXN0IGJlIGEgZnVuY3Rpb24sIGJ1dCByZWNlaXZlZCAke0pTT04uc3RyaW5naWZ5KHQpfS4gU2VlIGh0dHBzOi8vYW5ndWxhci5pby9hcGkvY29tbW9uL05nRm9yT2YjY2hhbmdlLXByb3BhZ2F0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLmApLHRoaXMuX3RyYWNrQnlGbj10fWdldCBuZ0ZvclRyYWNrQnkoKXtyZXR1cm4gdGhpcy5fdHJhY2tCeUZufXNldCBuZ0ZvclRlbXBsYXRlKHQpe3QmJih0aGlzLl90ZW1wbGF0ZT10KX1uZ0RvQ2hlY2soKXtpZih0aGlzLl9uZ0Zvck9mRGlydHkpe3RoaXMuX25nRm9yT2ZEaXJ0eT0hMTtjb25zdCB0PXRoaXMuX25nRm9yT2Y7aWYoIXRoaXMuX2RpZmZlciYmdCl0cnl7dGhpcy5fZGlmZmVyPXRoaXMuX2RpZmZlcnMuZmluZCh0KS5jcmVhdGUodGhpcy5uZ0ZvclRyYWNrQnkpfWNhdGNoKGUpe3Rocm93IG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgYSBkaWZmZXIgc3VwcG9ydGluZyBvYmplY3QgJyR7dH0nIG9mIHR5cGUgJyR7KGZ1bmN0aW9uIHQoZSl7cmV0dXJuIGUubmFtZXx8dHlwZW9mIGV9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLykodCl9Jy4gTmdGb3Igb25seSBzdXBwb3J0cyBiaW5kaW5nIHRvIEl0ZXJhYmxlcyBzdWNoIGFzIEFycmF5cy5gKX19aWYodGhpcy5fZGlmZmVyKXtjb25zdCB0PXRoaXMuX2RpZmZlci5kaWZmKHRoaXMuX25nRm9yT2YpO3QmJnRoaXMuX2FwcGx5Q2hhbmdlcyh0KX19X2FwcGx5Q2hhbmdlcyh0KXtjb25zdCBlPVtdO3QuZm9yRWFjaE9wZXJhdGlvbigoKHQsbixvKT0+e2lmKG51bGw9PXQucHJldmlvdXNJbmRleCl7Y29uc3Qgbj10aGlzLl92aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl90ZW1wbGF0ZSxuZXcgbnYobnVsbCx0aGlzLl9uZ0Zvck9mLC0xLC0xKSxudWxsPT09bz92b2lkIDA6byksaT1uZXcgaXYodCxuKTtlLnB1c2goaSl9ZWxzZSBpZihudWxsPT1vKXRoaXMuX3ZpZXdDb250YWluZXIucmVtb3ZlKG51bGw9PT1uP3ZvaWQgMDpuKTtlbHNlIGlmKG51bGwhPT1uKXtjb25zdCBpPXRoaXMuX3ZpZXdDb250YWluZXIuZ2V0KG4pO3RoaXMuX3ZpZXdDb250YWluZXIubW92ZShpLG8pO2NvbnN0IGE9bmV3IGl2KHQsaSk7ZS5wdXNoKGEpfX0pKTtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyl0aGlzLl9wZXJWaWV3Q2hhbmdlKGVbdF0udmlldyxlW3RdLnJlY29yZCk7Zm9yKGxldCB0PTAsZT10aGlzLl92aWV3Q29udGFpbmVyLmxlbmd0aDt0PGU7dCsrKXtjb25zdCBuPXRoaXMuX3ZpZXdDb250YWluZXIuZ2V0KHQpO24uY29udGV4dC5pbmRleD10LG4uY29udGV4dC5jb3VudD1lLG4uY29udGV4dC5uZ0Zvck9mPXRoaXMuX25nRm9yT2Z9dC5mb3JFYWNoSWRlbnRpdHlDaGFuZ2UoKHQ9Pnt0aGlzLl92aWV3Q29udGFpbmVyLmdldCh0LmN1cnJlbnRJbmRleCkuY29udGV4dC4kaW1wbGljaXQ9dC5pdGVtfSkpfV9wZXJWaWV3Q2hhbmdlKHQsZSl7dC5jb250ZXh0LiRpbXBsaWNpdD1lLml0ZW19c3RhdGljIG5nVGVtcGxhdGVDb250ZXh0R3VhcmQodCxlKXtyZXR1cm4hMH19b3YuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fG92KShNdShYaCksTXUoVWgpLE11KEVoKSl9LG92Lsm1ZGlyPUpvKHt0eXBlOm92LHNlbGVjdG9yczpbWyIiLCJuZ0ZvciIsIiIsIm5nRm9yT2YiLCIiXV0saW5wdXRzOntuZ0Zvck9mOiJuZ0Zvck9mIixuZ0ZvclRyYWNrQnk6Im5nRm9yVHJhY2tCeSIsbmdGb3JUZW1wbGF0ZToibmdGb3JUZW1wbGF0ZSJ9fSksb3YuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpYaH0se3R5cGU6VWh9LHt0eXBlOkVofV0sb3YucHJvcERlY29yYXRvcnM9e25nRm9yT2Y6W3t0eXBlOnlffV0sbmdGb3JUcmFja0J5Olt7dHlwZTp5X31dLG5nRm9yVGVtcGxhdGU6W3t0eXBlOnlffV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIob3YsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoiW25nRm9yXVtuZ0Zvck9mXSJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpYaH0se3R5cGU6VWh9LHt0eXBlOkVofV19KSx7bmdGb3JPZjpbe3R5cGU6eV99XSxuZ0ZvclRyYWNrQnk6W3t0eXBlOnlffV0sbmdGb3JUZW1wbGF0ZTpbe3R5cGU6eV99XX0pO2NsYXNzIGl2e2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5yZWNvcmQ9dCx0aGlzLnZpZXc9ZX19Y2xhc3MgYXZ7Y29uc3RydWN0b3IodCxlKXt0aGlzLl92aWV3Q29udGFpbmVyPXQsdGhpcy5fY29udGV4dD1uZXcgcnYsdGhpcy5fdGhlblRlbXBsYXRlUmVmPW51bGwsdGhpcy5fZWxzZVRlbXBsYXRlUmVmPW51bGwsdGhpcy5fdGhlblZpZXdSZWY9bnVsbCx0aGlzLl9lbHNlVmlld1JlZj1udWxsLHRoaXMuX3RoZW5UZW1wbGF0ZVJlZj1lfXNldCBuZ0lmKHQpe3RoaXMuX2NvbnRleHQuJGltcGxpY2l0PXRoaXMuX2NvbnRleHQubmdJZj10LHRoaXMuX3VwZGF0ZVZpZXcoKX1zZXQgbmdJZlRoZW4odCl7c3YoIm5nSWZUaGVuIix0KSx0aGlzLl90aGVuVGVtcGxhdGVSZWY9dCx0aGlzLl90aGVuVmlld1JlZj1udWxsLHRoaXMuX3VwZGF0ZVZpZXcoKX1zZXQgbmdJZkVsc2UodCl7c3YoIm5nSWZFbHNlIix0KSx0aGlzLl9lbHNlVGVtcGxhdGVSZWY9dCx0aGlzLl9lbHNlVmlld1JlZj1udWxsLHRoaXMuX3VwZGF0ZVZpZXcoKX1fdXBkYXRlVmlldygpe3RoaXMuX2NvbnRleHQuJGltcGxpY2l0P3RoaXMuX3RoZW5WaWV3UmVmfHwodGhpcy5fdmlld0NvbnRhaW5lci5jbGVhcigpLHRoaXMuX2Vsc2VWaWV3UmVmPW51bGwsdGhpcy5fdGhlblRlbXBsYXRlUmVmJiYodGhpcy5fdGhlblZpZXdSZWY9dGhpcy5fdmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fdGhlblRlbXBsYXRlUmVmLHRoaXMuX2NvbnRleHQpKSk6dGhpcy5fZWxzZVZpZXdSZWZ8fCh0aGlzLl92aWV3Q29udGFpbmVyLmNsZWFyKCksdGhpcy5fdGhlblZpZXdSZWY9bnVsbCx0aGlzLl9lbHNlVGVtcGxhdGVSZWYmJih0aGlzLl9lbHNlVmlld1JlZj10aGlzLl92aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl9lbHNlVGVtcGxhdGVSZWYsdGhpcy5fY29udGV4dCkpKX1zdGF0aWMgbmdUZW1wbGF0ZUNvbnRleHRHdWFyZCh0LGUpe3JldHVybiEwfX1hdi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8YXYpKE11KFhoKSxNdShVaCkpfSxhdi7JtWRpcj1Kbyh7dHlwZTphdixzZWxlY3RvcnM6W1siIiwibmdJZiIsIiJdXSxpbnB1dHM6e25nSWY6Im5nSWYiLG5nSWZUaGVuOiJuZ0lmVGhlbiIsbmdJZkVsc2U6Im5nSWZFbHNlIn19KSxhdi5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOlhofSx7dHlwZTpVaH1dLGF2LnByb3BEZWNvcmF0b3JzPXtuZ0lmOlt7dHlwZTp5X31dLG5nSWZUaGVuOlt7dHlwZTp5X31dLG5nSWZFbHNlOlt7dHlwZTp5X31dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGF2LFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6IltuZ0lmXSJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpYaH0se3R5cGU6VWh9XX0pLHtuZ0lmOlt7dHlwZTp5X31dLG5nSWZUaGVuOlt7dHlwZTp5X31dLG5nSWZFbHNlOlt7dHlwZTp5X31dfSk7Y2xhc3MgcnZ7Y29uc3RydWN0b3IoKXt0aGlzLiRpbXBsaWNpdD1udWxsLHRoaXMubmdJZj1udWxsfX1mdW5jdGlvbiBzdih0LGUpe2lmKGUmJiFlLmNyZWF0ZUVtYmVkZGVkVmlldyl0aHJvdyBuZXcgRXJyb3IoYCR7dH0gbXVzdCBiZSBhIFRlbXBsYXRlUmVmLCBidXQgcmVjZWl2ZWQgJyR7Um4oZSl9Jy5gKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY2xhc3MgbHZ7Y29uc3RydWN0b3IodCxlKXt0aGlzLl92aWV3Q29udGFpbmVyUmVmPXQsdGhpcy5fdGVtcGxhdGVSZWY9ZSx0aGlzLl9jcmVhdGVkPSExfWNyZWF0ZSgpe3RoaXMuX2NyZWF0ZWQ9ITAsdGhpcy5fdmlld0NvbnRhaW5lclJlZi5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fdGVtcGxhdGVSZWYpfWRlc3Ryb3koKXt0aGlzLl9jcmVhdGVkPSExLHRoaXMuX3ZpZXdDb250YWluZXJSZWYuY2xlYXIoKX1lbmZvcmNlU3RhdGUodCl7dCYmIXRoaXMuX2NyZWF0ZWQ/dGhpcy5jcmVhdGUoKTohdCYmdGhpcy5fY3JlYXRlZCYmdGhpcy5kZXN0cm95KCl9fWNsYXNzIGN2e2NvbnN0cnVjdG9yKCl7dGhpcy5fZGVmYXVsdFVzZWQ9ITEsdGhpcy5fY2FzZUNvdW50PTAsdGhpcy5fbGFzdENhc2VDaGVja0luZGV4PTAsdGhpcy5fbGFzdENhc2VzTWF0Y2hlZD0hMX1zZXQgbmdTd2l0Y2godCl7dGhpcy5fbmdTd2l0Y2g9dCwwPT09dGhpcy5fY2FzZUNvdW50JiZ0aGlzLl91cGRhdGVEZWZhdWx0Q2FzZXMoITApfV9hZGRDYXNlKCl7cmV0dXJuIHRoaXMuX2Nhc2VDb3VudCsrfV9hZGREZWZhdWx0KHQpe3RoaXMuX2RlZmF1bHRWaWV3c3x8KHRoaXMuX2RlZmF1bHRWaWV3cz1bXSksdGhpcy5fZGVmYXVsdFZpZXdzLnB1c2godCl9X21hdGNoQ2FzZSh0KXtjb25zdCBlPXQ9PXRoaXMuX25nU3dpdGNoO3JldHVybiB0aGlzLl9sYXN0Q2FzZXNNYXRjaGVkPXRoaXMuX2xhc3RDYXNlc01hdGNoZWR8fGUsdGhpcy5fbGFzdENhc2VDaGVja0luZGV4KyssdGhpcy5fbGFzdENhc2VDaGVja0luZGV4PT09dGhpcy5fY2FzZUNvdW50JiYodGhpcy5fdXBkYXRlRGVmYXVsdENhc2VzKCF0aGlzLl9sYXN0Q2FzZXNNYXRjaGVkKSx0aGlzLl9sYXN0Q2FzZUNoZWNrSW5kZXg9MCx0aGlzLl9sYXN0Q2FzZXNNYXRjaGVkPSExKSxlfV91cGRhdGVEZWZhdWx0Q2FzZXModCl7aWYodGhpcy5fZGVmYXVsdFZpZXdzJiZ0IT09dGhpcy5fZGVmYXVsdFVzZWQpe3RoaXMuX2RlZmF1bHRVc2VkPXQ7Zm9yKGxldCBlPTA7ZTx0aGlzLl9kZWZhdWx0Vmlld3MubGVuZ3RoO2UrKyl0aGlzLl9kZWZhdWx0Vmlld3NbZV0uZW5mb3JjZVN0YXRlKHQpfX19Y3YuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGN2KX0sY3YuybVkaXI9Sm8oe3R5cGU6Y3Ysc2VsZWN0b3JzOltbIiIsIm5nU3dpdGNoIiwiIl1dLGlucHV0czp7bmdTd2l0Y2g6Im5nU3dpdGNoIn19KSxjdi5wcm9wRGVjb3JhdG9ycz17bmdTd2l0Y2g6W3t0eXBlOnlffV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoY3YsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoiW25nU3dpdGNoXSJ9XX1dLChmdW5jdGlvbigpe3JldHVybltdfSkse25nU3dpdGNoOlt7dHlwZTp5X31dfSk7Y2xhc3MgZHZ7Y29uc3RydWN0b3IodCxlLG4pe3RoaXMubmdTd2l0Y2g9biwidW5kZWZpbmVkIiE9dHlwZW9mIG5nRGV2TW9kZSYmIW5nRGV2TW9kZXx8bnx8bXYoIm5nU3dpdGNoQ2FzZSIsIk5nU3dpdGNoQ2FzZSIpLG4uX2FkZENhc2UoKSx0aGlzLl92aWV3PW5ldyBsdih0LGUpfW5nRG9DaGVjaygpe3RoaXMuX3ZpZXcuZW5mb3JjZVN0YXRlKHRoaXMubmdTd2l0Y2guX21hdGNoQ2FzZSh0aGlzLm5nU3dpdGNoQ2FzZSkpfX1kdi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8ZHYpKE11KFhoKSxNdShVaCksTXUoY3YsOSkpfSxkdi7JtWRpcj1Kbyh7dHlwZTpkdixzZWxlY3RvcnM6W1siIiwibmdTd2l0Y2hDYXNlIiwiIl1dLGlucHV0czp7bmdTd2l0Y2hDYXNlOiJuZ1N3aXRjaENhc2UifX0pLGR2LmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6WGh9LHt0eXBlOlVofSx7dHlwZTpjdixkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6dnN9XX1dLGR2LnByb3BEZWNvcmF0b3JzPXtuZ1N3aXRjaENhc2U6W3t0eXBlOnlffV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoZHYsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoiW25nU3dpdGNoQ2FzZV0ifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6WGh9LHt0eXBlOlVofSx7dHlwZTpjdixkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6dnN9XX1dfSkse25nU3dpdGNoQ2FzZTpbe3R5cGU6eV99XX0pO2NsYXNzIHB2e2NvbnN0cnVjdG9yKHQsZSxuKXsidW5kZWZpbmVkIiE9dHlwZW9mIG5nRGV2TW9kZSYmIW5nRGV2TW9kZXx8bnx8bXYoIm5nU3dpdGNoRGVmYXVsdCIsIk5nU3dpdGNoRGVmYXVsdCIpLG4uX2FkZERlZmF1bHQobmV3IGx2KHQsZSkpfX1mdW5jdGlvbiBtdih0LGUpe3Rocm93IG5ldyBGbigiMzA1IixgQW4gZWxlbWVudCB3aXRoIHRoZSAiJHt0fSIgYXR0cmlidXRlIChtYXRjaGluZyB0aGUgIiR7ZX0iIGRpcmVjdGl2ZSkgbXVzdCBiZSBsb2NhdGVkIGluc2lkZSBhbiBlbGVtZW50IHdpdGggdGhlICJuZ1N3aXRjaCIgYXR0cmlidXRlIChtYXRjaGluZyAiTmdTd2l0Y2giIGRpcmVjdGl2ZSlgKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovcHYuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHB2KShNdShYaCksTXUoVWgpLE11KGN2LDkpKX0scHYuybVkaXI9Sm8oe3R5cGU6cHYsc2VsZWN0b3JzOltbIiIsIm5nU3dpdGNoRGVmYXVsdCIsIiJdXX0pLHB2LmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6WGh9LHt0eXBlOlVofSx7dHlwZTpjdixkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6dnN9XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIocHYsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoiW25nU3dpdGNoRGVmYXVsdF0ifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6WGh9LHt0eXBlOlVofSx7dHlwZTpjdixkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6dnN9XX1dfSksbnVsbCk7Y2xhc3MgdXZ7Y29uc3RydWN0b3IodCl7dGhpcy5fbG9jYWxpemF0aW9uPXQsdGhpcy5fY2FzZVZpZXdzPXt9fXNldCBuZ1BsdXJhbCh0KXt0aGlzLl9zd2l0Y2hWYWx1ZT10LHRoaXMuX3VwZGF0ZVZpZXcoKX1hZGRDYXNlKHQsZSl7dGhpcy5fY2FzZVZpZXdzW3RdPWV9X3VwZGF0ZVZpZXcoKXt0aGlzLl9jbGVhclZpZXdzKCk7Y29uc3QgdD1PYmplY3Qua2V5cyh0aGlzLl9jYXNlVmlld3MpLGU9Sk0odGhpcy5fc3dpdGNoVmFsdWUsdCx0aGlzLl9sb2NhbGl6YXRpb24pO3RoaXMuX2FjdGl2YXRlVmlldyh0aGlzLl9jYXNlVmlld3NbZV0pfV9jbGVhclZpZXdzKCl7dGhpcy5fYWN0aXZlVmlldyYmdGhpcy5fYWN0aXZlVmlldy5kZXN0cm95KCl9X2FjdGl2YXRlVmlldyh0KXt0JiYodGhpcy5fYWN0aXZlVmlldz10LHRoaXMuX2FjdGl2ZVZpZXcuY3JlYXRlKCkpfX11di7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8dXYpKE11KEtNKSl9LHV2Lsm1ZGlyPUpvKHt0eXBlOnV2LHNlbGVjdG9yczpbWyIiLCJuZ1BsdXJhbCIsIiJdXSxpbnB1dHM6e25nUGx1cmFsOiJuZ1BsdXJhbCJ9fSksdXYuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpLTX1dLHV2LnByb3BEZWNvcmF0b3JzPXtuZ1BsdXJhbDpbe3R5cGU6eV99XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYih1dixbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJbbmdQbHVyYWxdIn1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOktNfV19KSx7bmdQbHVyYWw6W3t0eXBlOnlffV19KTtjbGFzcyBmdntjb25zdHJ1Y3Rvcih0LGUsbixvKXt0aGlzLnZhbHVlPXQ7Y29uc3QgaT0haXNOYU4oTnVtYmVyKHQpKTtvLmFkZENhc2UoaT9gPSR7dH1gOnQsbmV3IGx2KG4sZSkpfX1mdi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8ZnYpKE9yKCJuZ1BsdXJhbENhc2UiKSxNdShVaCksTXUoWGgpLE11KHV2LDEpKX0sZnYuybVkaXI9Sm8oe3R5cGU6ZnYsc2VsZWN0b3JzOltbIiIsIm5nUGx1cmFsQ2FzZSIsIiJdXX0pLGZ2LmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOlJyLGFyZ3M6WyJuZ1BsdXJhbENhc2UiXX1dfSx7dHlwZTpVaH0se3R5cGU6WGh9LHt0eXBlOnV2LGRlY29yYXRvcnM6W3t0eXBlOnZzfV19XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGZ2LFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6IltuZ1BsdXJhbENhc2VdIn1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpScixhcmdzOlsibmdQbHVyYWxDYXNlIl19XX0se3R5cGU6VWh9LHt0eXBlOlhofSx7dHlwZTp1dixkZWNvcmF0b3JzOlt7dHlwZTp2c31dfV19KSxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIGd2e2NvbnN0cnVjdG9yKHQsZSxuKXt0aGlzLl9uZ0VsPXQsdGhpcy5fZGlmZmVycz1lLHRoaXMuX3JlbmRlcmVyPW4sdGhpcy5fbmdTdHlsZT1udWxsLHRoaXMuX2RpZmZlcj1udWxsfXNldCBuZ1N0eWxlKHQpe3RoaXMuX25nU3R5bGU9dCwhdGhpcy5fZGlmZmVyJiZ0JiYodGhpcy5fZGlmZmVyPXRoaXMuX2RpZmZlcnMuZmluZCh0KS5jcmVhdGUoKSl9bmdEb0NoZWNrKCl7aWYodGhpcy5fZGlmZmVyKXtjb25zdCB0PXRoaXMuX2RpZmZlci5kaWZmKHRoaXMuX25nU3R5bGUpO3QmJnRoaXMuX2FwcGx5Q2hhbmdlcyh0KX19X3NldFN0eWxlKHQsZSl7Y29uc3RbbixvXT10LnNwbGl0KCIuIik7bnVsbCE9KGU9bnVsbCE9ZSYmbz9gJHtlfSR7b31gOmUpP3RoaXMuX3JlbmRlcmVyLnNldFN0eWxlKHRoaXMuX25nRWwubmF0aXZlRWxlbWVudCxuLGUpOnRoaXMuX3JlbmRlcmVyLnJlbW92ZVN0eWxlKHRoaXMuX25nRWwubmF0aXZlRWxlbWVudCxuKX1fYXBwbHlDaGFuZ2VzKHQpe3QuZm9yRWFjaFJlbW92ZWRJdGVtKCh0PT50aGlzLl9zZXRTdHlsZSh0LmtleSxudWxsKSkpLHQuZm9yRWFjaEFkZGVkSXRlbSgodD0+dGhpcy5fc2V0U3R5bGUodC5rZXksdC5jdXJyZW50VmFsdWUpKSksdC5mb3JFYWNoQ2hhbmdlZEl0ZW0oKHQ9PnRoaXMuX3NldFN0eWxlKHQua2V5LHQuY3VycmVudFZhbHVlKSkpfX1ndi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8Z3YpKE11KGNoKSxNdShSaCksTXUodWgpKX0sZ3YuybVkaXI9Sm8oe3R5cGU6Z3Ysc2VsZWN0b3JzOltbIiIsIm5nU3R5bGUiLCIiXV0saW5wdXRzOntuZ1N0eWxlOiJuZ1N0eWxlIn19KSxndi5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmNofSx7dHlwZTpSaH0se3R5cGU6dWh9XSxndi5wcm9wRGVjb3JhdG9ycz17bmdTdHlsZTpbe3R5cGU6eV8sYXJnczpbIm5nU3R5bGUiXX1dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGd2LFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6IltuZ1N0eWxlXSJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpjaH0se3R5cGU6Umh9LHt0eXBlOnVofV19KSx7bmdTdHlsZTpbe3R5cGU6eV8sYXJnczpbIm5nU3R5bGUiXX1dfSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyBodntjb25zdHJ1Y3Rvcih0KXt0aGlzLl92aWV3Q29udGFpbmVyUmVmPXQsdGhpcy5fdmlld1JlZj1udWxsLHRoaXMubmdUZW1wbGF0ZU91dGxldENvbnRleHQ9bnVsbCx0aGlzLm5nVGVtcGxhdGVPdXRsZXQ9bnVsbH1uZ09uQ2hhbmdlcyh0KXtpZih0aGlzLl9zaG91bGRSZWNyZWF0ZVZpZXcodCkpe2NvbnN0IHQ9dGhpcy5fdmlld0NvbnRhaW5lclJlZjt0aGlzLl92aWV3UmVmJiZ0LnJlbW92ZSh0LmluZGV4T2YodGhpcy5fdmlld1JlZikpLHRoaXMuX3ZpZXdSZWY9dGhpcy5uZ1RlbXBsYXRlT3V0bGV0P3QuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMubmdUZW1wbGF0ZU91dGxldCx0aGlzLm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0KTpudWxsfWVsc2UgdGhpcy5fdmlld1JlZiYmdGhpcy5uZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCYmdGhpcy5fdXBkYXRlRXhpc3RpbmdDb250ZXh0KHRoaXMubmdUZW1wbGF0ZU91dGxldENvbnRleHQpfV9zaG91bGRSZWNyZWF0ZVZpZXcodCl7Y29uc3QgZT10Lm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0O3JldHVybiEhdC5uZ1RlbXBsYXRlT3V0bGV0fHxlJiZ0aGlzLl9oYXNDb250ZXh0U2hhcGVDaGFuZ2VkKGUpfV9oYXNDb250ZXh0U2hhcGVDaGFuZ2VkKHQpe2NvbnN0IGU9T2JqZWN0LmtleXModC5wcmV2aW91c1ZhbHVlfHx7fSksbj1PYmplY3Qua2V5cyh0LmN1cnJlbnRWYWx1ZXx8e30pO2lmKGUubGVuZ3RoPT09bi5sZW5ndGgpe2ZvcihsZXQgdCBvZiBuKWlmKC0xPT09ZS5pbmRleE9mKHQpKXJldHVybiEwO3JldHVybiExfXJldHVybiEwfV91cGRhdGVFeGlzdGluZ0NvbnRleHQodCl7Zm9yKGxldCBlIG9mIE9iamVjdC5rZXlzKHQpKXRoaXMuX3ZpZXdSZWYuY29udGV4dFtlXT10aGlzLm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0W2VdfX1odi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8aHYpKE11KFhoKSl9LGh2Lsm1ZGlyPUpvKHt0eXBlOmh2LHNlbGVjdG9yczpbWyIiLCJuZ1RlbXBsYXRlT3V0bGV0IiwiIl1dLGlucHV0czp7bmdUZW1wbGF0ZU91dGxldENvbnRleHQ6Im5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixuZ1RlbXBsYXRlT3V0bGV0OiJuZ1RlbXBsYXRlT3V0bGV0In0sZmVhdHVyZXM6W1NpXX0pLGh2LmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6WGh9XSxodi5wcm9wRGVjb3JhdG9ycz17bmdUZW1wbGF0ZU91dGxldENvbnRleHQ6W3t0eXBlOnlffV0sbmdUZW1wbGF0ZU91dGxldDpbe3R5cGU6eV99XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihodixbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJbbmdUZW1wbGF0ZU91dGxldF0ifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6WGh9XX0pLHtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dDpbe3R5cGU6eV99XSxuZ1RlbXBsYXRlT3V0bGV0Olt7dHlwZTp5X31dfSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCBidj1bdHYsZXYsb3YsYXYsaHYsZ3YsY3YsZHYscHYsdXYsZnZdOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiB5dih0LGUpe3JldHVybiBFcnJvcihgSW52YWxpZFBpcGVBcmd1bWVudDogJyR7ZX0nIGZvciBwaXBlICcke1JuKHQpfSdgKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY29uc3QgX3Y9bmV3IGNsYXNze2NyZWF0ZVN1YnNjcmlwdGlvbih0LGUpe3JldHVybiB0LnRoZW4oZSwodD0+e3Rocm93IHR9KSl9ZGlzcG9zZSh0KXt9b25EZXN0cm95KHQpe319LEN2PW5ldyBjbGFzc3tjcmVhdGVTdWJzY3JpcHRpb24odCxlKXtyZXR1cm4gdC5zdWJzY3JpYmUoe25leHQ6ZSxlcnJvcjp0PT57dGhyb3cgdH19KX1kaXNwb3NlKHQpe3QudW5zdWJzY3JpYmUoKX1vbkRlc3Ryb3kodCl7dC51bnN1YnNjcmliZSgpfX07Y2xhc3MgTXZ7Y29uc3RydWN0b3IodCl7dGhpcy5fcmVmPXQsdGhpcy5fbGF0ZXN0VmFsdWU9bnVsbCx0aGlzLl9zdWJzY3JpcHRpb249bnVsbCx0aGlzLl9vYmo9bnVsbCx0aGlzLl9zdHJhdGVneT1udWxsfW5nT25EZXN0cm95KCl7dGhpcy5fc3Vic2NyaXB0aW9uJiZ0aGlzLl9kaXNwb3NlKCl9dHJhbnNmb3JtKHQpe3JldHVybiB0aGlzLl9vYmo/dCE9PXRoaXMuX29iaj8odGhpcy5fZGlzcG9zZSgpLHRoaXMudHJhbnNmb3JtKHQpKTp0aGlzLl9sYXRlc3RWYWx1ZToodCYmdGhpcy5fc3Vic2NyaWJlKHQpLHRoaXMuX2xhdGVzdFZhbHVlKX1fc3Vic2NyaWJlKHQpe3RoaXMuX29iaj10LHRoaXMuX3N0cmF0ZWd5PXRoaXMuX3NlbGVjdFN0cmF0ZWd5KHQpLHRoaXMuX3N1YnNjcmlwdGlvbj10aGlzLl9zdHJhdGVneS5jcmVhdGVTdWJzY3JpcHRpb24odCwoZT0+dGhpcy5fdXBkYXRlTGF0ZXN0VmFsdWUodCxlKSkpfV9zZWxlY3RTdHJhdGVneSh0KXtpZihBdSh0KSlyZXR1cm4gX3Y7aWYoUnUodCkpcmV0dXJuIEN2O3Rocm93IHl2KE12LHQpfV9kaXNwb3NlKCl7dGhpcy5fc3RyYXRlZ3kuZGlzcG9zZSh0aGlzLl9zdWJzY3JpcHRpb24pLHRoaXMuX2xhdGVzdFZhbHVlPW51bGwsdGhpcy5fc3Vic2NyaXB0aW9uPW51bGwsdGhpcy5fb2JqPW51bGx9X3VwZGF0ZUxhdGVzdFZhbHVlKHQsZSl7dD09PXRoaXMuX29iaiYmKHRoaXMuX2xhdGVzdFZhbHVlPWUsdGhpcy5fcmVmLm1hcmtGb3JDaGVjaygpKX19TXYuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fE12KShKYigpKX0sTXYuybVwaXBlPVFvKHtuYW1lOiJhc3luYyIsdHlwZTpNdixwdXJlOiExfSksTXYuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpIaH1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoTXYsW3t0eXBlOmJfLGFyZ3M6W3tuYW1lOiJhc3luYyIscHVyZTohMX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkhofV19KSxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIHZ2e3RyYW5zZm9ybSh0KXtpZihudWxsPT10KXJldHVybiBudWxsO2lmKCJzdHJpbmciIT10eXBlb2YgdCl0aHJvdyB5dih2dix0KTtyZXR1cm4gdC50b0xvd2VyQ2FzZSgpfX12di7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8dnYpfSx2di7JtXBpcGU9UW8oe25hbWU6Imxvd2VyY2FzZSIsdHlwZTp2dixwdXJlOiEwfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYih2dixbe3R5cGU6Yl8sYXJnczpbe25hbWU6Imxvd2VyY2FzZSJ9XX1dLG51bGwsbnVsbCk7Y29uc3QgeHY9Lyg/OltBLVphLXpceEFBXHhCNVx4QkFceEMwLVx4RDZceEQ4LVx4RjZceEY4LVx1MDJDMVx1MDJDNi1cdTAyRDFcdTAyRTAtXHUwMkU0XHUwMkVDXHUwMkVFXHUwMzcwLVx1MDM3NFx1MDM3Nlx1MDM3N1x1MDM3QS1cdTAzN0RcdTAzN0ZcdTAzODZcdTAzODgtXHUwMzhBXHUwMzhDXHUwMzhFLVx1MDNBMVx1MDNBMy1cdTAzRjVcdTAzRjctXHUwNDgxXHUwNDhBLVx1MDUyRlx1MDUzMS1cdTA1NTZcdTA1NTlcdTA1NjEtXHUwNTg3XHUwNUQwLVx1MDVFQVx1MDVGMC1cdTA1RjJcdTA2MjAtXHUwNjRBXHUwNjZFXHUwNjZGXHUwNjcxLVx1MDZEM1x1MDZENVx1MDZFNVx1MDZFNlx1MDZFRVx1MDZFRlx1MDZGQS1cdTA2RkNcdTA2RkZcdTA3MTBcdTA3MTItXHUwNzJGXHUwNzRELVx1MDdBNVx1MDdCMVx1MDdDQS1cdTA3RUFcdTA3RjRcdTA3RjVcdTA3RkFcdTA4MDAtXHUwODE1XHUwODFBXHUwODI0XHUwODI4XHUwODQwLVx1MDg1OFx1MDg2MC1cdTA4NkFcdTA4QTAtXHUwOEI0XHUwOEI2LVx1MDhCRFx1MDkwNC1cdTA5MzlcdTA5M0RcdTA5NTBcdTA5NTgtXHUwOTYxXHUwOTcxLVx1MDk4MFx1MDk4NS1cdTA5OENcdTA5OEZcdTA5OTBcdTA5OTMtXHUwOUE4XHUwOUFBLVx1MDlCMFx1MDlCMlx1MDlCNi1cdTA5QjlcdTA5QkRcdTA5Q0VcdTA5RENcdTA5RERcdTA5REYtXHUwOUUxXHUwOUYwXHUwOUYxXHUwOUZDXHUwQTA1LVx1MEEwQVx1MEEwRlx1MEExMFx1MEExMy1cdTBBMjhcdTBBMkEtXHUwQTMwXHUwQTMyXHUwQTMzXHUwQTM1XHUwQTM2XHUwQTM4XHUwQTM5XHUwQTU5LVx1MEE1Q1x1MEE1RVx1MEE3Mi1cdTBBNzRcdTBBODUtXHUwQThEXHUwQThGLVx1MEE5MVx1MEE5My1cdTBBQThcdTBBQUEtXHUwQUIwXHUwQUIyXHUwQUIzXHUwQUI1LVx1MEFCOVx1MEFCRFx1MEFEMFx1MEFFMFx1MEFFMVx1MEFGOVx1MEIwNS1cdTBCMENcdTBCMEZcdTBCMTBcdTBCMTMtXHUwQjI4XHUwQjJBLVx1MEIzMFx1MEIzMlx1MEIzM1x1MEIzNS1cdTBCMzlcdTBCM0RcdTBCNUNcdTBCNURcdTBCNUYtXHUwQjYxXHUwQjcxXHUwQjgzXHUwQjg1LVx1MEI4QVx1MEI4RS1cdTBCOTBcdTBCOTItXHUwQjk1XHUwQjk5XHUwQjlBXHUwQjlDXHUwQjlFXHUwQjlGXHUwQkEzXHUwQkE0XHUwQkE4LVx1MEJBQVx1MEJBRS1cdTBCQjlcdTBCRDBcdTBDMDUtXHUwQzBDXHUwQzBFLVx1MEMxMFx1MEMxMi1cdTBDMjhcdTBDMkEtXHUwQzM5XHUwQzNEXHUwQzU4LVx1MEM1QVx1MEM2MFx1MEM2MVx1MEM4MFx1MEM4NS1cdTBDOENcdTBDOEUtXHUwQzkwXHUwQzkyLVx1MENBOFx1MENBQS1cdTBDQjNcdTBDQjUtXHUwQ0I5XHUwQ0JEXHUwQ0RFXHUwQ0UwXHUwQ0UxXHUwQ0YxXHUwQ0YyXHUwRDA1LVx1MEQwQ1x1MEQwRS1cdTBEMTBcdTBEMTItXHUwRDNBXHUwRDNEXHUwRDRFXHUwRDU0LVx1MEQ1Nlx1MEQ1Ri1cdTBENjFcdTBEN0EtXHUwRDdGXHUwRDg1LVx1MEQ5Nlx1MEQ5QS1cdTBEQjFcdTBEQjMtXHUwREJCXHUwREJEXHUwREMwLVx1MERDNlx1MEUwMS1cdTBFMzBcdTBFMzJcdTBFMzNcdTBFNDAtXHUwRTQ2XHUwRTgxXHUwRTgyXHUwRTg0XHUwRTg3XHUwRTg4XHUwRThBXHUwRThEXHUwRTk0LVx1MEU5N1x1MEU5OS1cdTBFOUZcdTBFQTEtXHUwRUEzXHUwRUE1XHUwRUE3XHUwRUFBXHUwRUFCXHUwRUFELVx1MEVCMFx1MEVCMlx1MEVCM1x1MEVCRFx1MEVDMC1cdTBFQzRcdTBFQzZcdTBFREMtXHUwRURGXHUwRjAwXHUwRjQwLVx1MEY0N1x1MEY0OS1cdTBGNkNcdTBGODgtXHUwRjhDXHUxMDAwLVx1MTAyQVx1MTAzRlx1MTA1MC1cdTEwNTVcdTEwNUEtXHUxMDVEXHUxMDYxXHUxMDY1XHUxMDY2XHUxMDZFLVx1MTA3MFx1MTA3NS1cdTEwODFcdTEwOEVcdTEwQTAtXHUxMEM1XHUxMEM3XHUxMENEXHUxMEQwLVx1MTBGQVx1MTBGQy1cdTEyNDhcdTEyNEEtXHUxMjREXHUxMjUwLVx1MTI1Nlx1MTI1OFx1MTI1QS1cdTEyNURcdTEyNjAtXHUxMjg4XHUxMjhBLVx1MTI4RFx1MTI5MC1cdTEyQjBcdTEyQjItXHUxMkI1XHUxMkI4LVx1MTJCRVx1MTJDMFx1MTJDMi1cdTEyQzVcdTEyQzgtXHUxMkQ2XHUxMkQ4LVx1MTMxMFx1MTMxMi1cdTEzMTVcdTEzMTgtXHUxMzVBXHUxMzgwLVx1MTM4Rlx1MTNBMC1cdTEzRjVcdTEzRjgtXHUxM0ZEXHUxNDAxLVx1MTY2Q1x1MTY2Ri1cdTE2N0ZcdTE2ODEtXHUxNjlBXHUxNkEwLVx1MTZFQVx1MTZGMS1cdTE2RjhcdTE3MDAtXHUxNzBDXHUxNzBFLVx1MTcxMVx1MTcyMC1cdTE3MzFcdTE3NDAtXHUxNzUxXHUxNzYwLVx1MTc2Q1x1MTc2RS1cdTE3NzBcdTE3ODAtXHUxN0IzXHUxN0Q3XHUxN0RDXHUxODIwLVx1MTg3N1x1MTg4MC1cdTE4ODRcdTE4ODctXHUxOEE4XHUxOEFBXHUxOEIwLVx1MThGNVx1MTkwMC1cdTE5MUVcdTE5NTAtXHUxOTZEXHUxOTcwLVx1MTk3NFx1MTk4MC1cdTE5QUJcdTE5QjAtXHUxOUM5XHUxQTAwLVx1MUExNlx1MUEyMC1cdTFBNTRcdTFBQTdcdTFCMDUtXHUxQjMzXHUxQjQ1LVx1MUI0Qlx1MUI4My1cdTFCQTBcdTFCQUVcdTFCQUZcdTFCQkEtXHUxQkU1XHUxQzAwLVx1MUMyM1x1MUM0RC1cdTFDNEZcdTFDNUEtXHUxQzdEXHUxQzgwLVx1MUM4OFx1MUNFOS1cdTFDRUNcdTFDRUUtXHUxQ0YxXHUxQ0Y1XHUxQ0Y2XHUxRDAwLVx1MURCRlx1MUUwMC1cdTFGMTVcdTFGMTgtXHUxRjFEXHUxRjIwLVx1MUY0NVx1MUY0OC1cdTFGNERcdTFGNTAtXHUxRjU3XHUxRjU5XHUxRjVCXHUxRjVEXHUxRjVGLVx1MUY3RFx1MUY4MC1cdTFGQjRcdTFGQjYtXHUxRkJDXHUxRkJFXHUxRkMyLVx1MUZDNFx1MUZDNi1cdTFGQ0NcdTFGRDAtXHUxRkQzXHUxRkQ2LVx1MUZEQlx1MUZFMC1cdTFGRUNcdTFGRjItXHUxRkY0XHUxRkY2LVx1MUZGQ1x1MjA3MVx1MjA3Rlx1MjA5MC1cdTIwOUNcdTIxMDJcdTIxMDdcdTIxMEEtXHUyMTEzXHUyMTE1XHUyMTE5LVx1MjExRFx1MjEyNFx1MjEyNlx1MjEyOFx1MjEyQS1cdTIxMkRcdTIxMkYtXHUyMTM5XHUyMTNDLVx1MjEzRlx1MjE0NS1cdTIxNDlcdTIxNEVcdTIxODNcdTIxODRcdTJDMDAtXHUyQzJFXHUyQzMwLVx1MkM1RVx1MkM2MC1cdTJDRTRcdTJDRUItXHUyQ0VFXHUyQ0YyXHUyQ0YzXHUyRDAwLVx1MkQyNVx1MkQyN1x1MkQyRFx1MkQzMC1cdTJENjdcdTJENkZcdTJEODAtXHUyRDk2XHUyREEwLVx1MkRBNlx1MkRBOC1cdTJEQUVcdTJEQjAtXHUyREI2XHUyREI4LVx1MkRCRVx1MkRDMC1cdTJEQzZcdTJEQzgtXHUyRENFXHUyREQwLVx1MkRENlx1MkREOC1cdTJEREVcdTJFMkZcdTMwMDVcdTMwMDZcdTMwMzEtXHUzMDM1XHUzMDNCXHUzMDNDXHUzMDQxLVx1MzA5Nlx1MzA5RC1cdTMwOUZcdTMwQTEtXHUzMEZBXHUzMEZDLVx1MzBGRlx1MzEwNS1cdTMxMkVcdTMxMzEtXHUzMThFXHUzMUEwLVx1MzFCQVx1MzFGMC1cdTMxRkZcdTM0MDAtXHU0REI1XHU0RTAwLVx1OUZFQVx1QTAwMC1cdUE0OENcdUE0RDAtXHVBNEZEXHVBNTAwLVx1QTYwQ1x1QTYxMC1cdUE2MUZcdUE2MkFcdUE2MkJcdUE2NDAtXHVBNjZFXHVBNjdGLVx1QTY5RFx1QTZBMC1cdUE2RTVcdUE3MTctXHVBNzFGXHVBNzIyLVx1QTc4OFx1QTc4Qi1cdUE3QUVcdUE3QjAtXHVBN0I3XHVBN0Y3LVx1QTgwMVx1QTgwMy1cdUE4MDVcdUE4MDctXHVBODBBXHVBODBDLVx1QTgyMlx1QTg0MC1cdUE4NzNcdUE4ODItXHVBOEIzXHVBOEYyLVx1QThGN1x1QThGQlx1QThGRFx1QTkwQS1cdUE5MjVcdUE5MzAtXHVBOTQ2XHVBOTYwLVx1QTk3Q1x1QTk4NC1cdUE5QjJcdUE5Q0ZcdUE5RTAtXHVBOUU0XHVBOUU2LVx1QTlFRlx1QTlGQS1cdUE5RkVcdUFBMDAtXHVBQTI4XHVBQTQwLVx1QUE0Mlx1QUE0NC1cdUFBNEJcdUFBNjAtXHVBQTc2XHVBQTdBXHVBQTdFLVx1QUFBRlx1QUFCMVx1QUFCNVx1QUFCNlx1QUFCOS1cdUFBQkRcdUFBQzBcdUFBQzJcdUFBREItXHVBQUREXHVBQUUwLVx1QUFFQVx1QUFGMi1cdUFBRjRcdUFCMDEtXHVBQjA2XHVBQjA5LVx1QUIwRVx1QUIxMS1cdUFCMTZcdUFCMjAtXHVBQjI2XHVBQjI4LVx1QUIyRVx1QUIzMC1cdUFCNUFcdUFCNUMtXHVBQjY1XHVBQjcwLVx1QUJFMlx1QUMwMC1cdUQ3QTNcdUQ3QjAtXHVEN0M2XHVEN0NCLVx1RDdGQlx1RjkwMC1cdUZBNkRcdUZBNzAtXHVGQUQ5XHVGQjAwLVx1RkIwNlx1RkIxMy1cdUZCMTdcdUZCMURcdUZCMUYtXHVGQjI4XHVGQjJBLVx1RkIzNlx1RkIzOC1cdUZCM0NcdUZCM0VcdUZCNDBcdUZCNDFcdUZCNDNcdUZCNDRcdUZCNDYtXHVGQkIxXHVGQkQzLVx1RkQzRFx1RkQ1MC1cdUZEOEZcdUZEOTItXHVGREM3XHVGREYwLVx1RkRGQlx1RkU3MC1cdUZFNzRcdUZFNzYtXHVGRUZDXHVGRjIxLVx1RkYzQVx1RkY0MS1cdUZGNUFcdUZGNjYtXHVGRkJFXHVGRkMyLVx1RkZDN1x1RkZDQS1cdUZGQ0ZcdUZGRDItXHVGRkQ3XHVGRkRBLVx1RkZEQ118XHVEODAwW1x1REMwMC1cdURDMEJcdURDMEQtXHVEQzI2XHVEQzI4LVx1REMzQVx1REMzQ1x1REMzRFx1REMzRi1cdURDNERcdURDNTAtXHVEQzVEXHVEQzgwLVx1RENGQVx1REU4MC1cdURFOUNcdURFQTAtXHVERUQwXHVERjAwLVx1REYxRlx1REYyRC1cdURGNDBcdURGNDItXHVERjQ5XHVERjUwLVx1REY3NVx1REY4MC1cdURGOURcdURGQTAtXHVERkMzXHVERkM4LVx1REZDRl18XHVEODAxW1x1REMwMC1cdURDOURcdURDQjAtXHVEQ0QzXHVEQ0Q4LVx1RENGQlx1REQwMC1cdUREMjdcdUREMzAtXHVERDYzXHVERTAwLVx1REYzNlx1REY0MC1cdURGNTVcdURGNjAtXHVERjY3XXxcdUQ4MDJbXHVEQzAwLVx1REMwNVx1REMwOFx1REMwQS1cdURDMzVcdURDMzdcdURDMzhcdURDM0NcdURDM0YtXHVEQzU1XHVEQzYwLVx1REM3Nlx1REM4MC1cdURDOUVcdURDRTAtXHVEQ0YyXHVEQ0Y0XHVEQ0Y1XHVERDAwLVx1REQxNVx1REQyMC1cdUREMzlcdUREODAtXHVEREI3XHVEREJFXHVEREJGXHVERTAwXHVERTEwLVx1REUxM1x1REUxNS1cdURFMTdcdURFMTktXHVERTMzXHVERTYwLVx1REU3Q1x1REU4MC1cdURFOUNcdURFQzAtXHVERUM3XHVERUM5LVx1REVFNFx1REYwMC1cdURGMzVcdURGNDAtXHVERjU1XHVERjYwLVx1REY3Mlx1REY4MC1cdURGOTFdfFx1RDgwM1tcdURDMDAtXHVEQzQ4XHVEQzgwLVx1RENCMlx1RENDMC1cdURDRjJdfFx1RDgwNFtcdURDMDMtXHVEQzM3XHVEQzgzLVx1RENBRlx1RENEMC1cdURDRThcdUREMDMtXHVERDI2XHVERDUwLVx1REQ3Mlx1REQ3Nlx1REQ4My1cdUREQjJcdUREQzEtXHVEREM0XHVERERBXHVERERDXHVERTAwLVx1REUxMVx1REUxMy1cdURFMkJcdURFODAtXHVERTg2XHVERTg4XHVERThBLVx1REU4RFx1REU4Ri1cdURFOURcdURFOUYtXHVERUE4XHVERUIwLVx1REVERVx1REYwNS1cdURGMENcdURGMEZcdURGMTBcdURGMTMtXHVERjI4XHVERjJBLVx1REYzMFx1REYzMlx1REYzM1x1REYzNS1cdURGMzlcdURGM0RcdURGNTBcdURGNUQtXHVERjYxXXxcdUQ4MDVbXHVEQzAwLVx1REMzNFx1REM0Ny1cdURDNEFcdURDODAtXHVEQ0FGXHVEQ0M0XHVEQ0M1XHVEQ0M3XHVERDgwLVx1RERBRVx1REREOC1cdUREREJcdURFMDAtXHVERTJGXHVERTQ0XHVERTgwLVx1REVBQVx1REYwMC1cdURGMTldfFx1RDgwNltcdURDQTAtXHVEQ0RGXHVEQ0ZGXHVERTAwXHVERTBCLVx1REUzMlx1REUzQVx1REU1MFx1REU1Qy1cdURFODNcdURFODYtXHVERTg5XHVERUMwLVx1REVGOF18XHVEODA3W1x1REMwMC1cdURDMDhcdURDMEEtXHVEQzJFXHVEQzQwXHVEQzcyLVx1REM4Rlx1REQwMC1cdUREMDZcdUREMDhcdUREMDlcdUREMEItXHVERDMwXHVERDQ2XXxcdUQ4MDhbXHVEQzAwLVx1REY5OV18XHVEODA5W1x1REM4MC1cdURENDNdfFtcdUQ4MENcdUQ4MUMtXHVEODIwXHVEODQwLVx1RDg2OFx1RDg2QS1cdUQ4NkNcdUQ4NkYtXHVEODcyXHVEODc0LVx1RDg3OV1bXHVEQzAwLVx1REZGRl18XHVEODBEW1x1REMwMC1cdURDMkVdfFx1RDgxMVtcdURDMDAtXHVERTQ2XXxcdUQ4MUFbXHVEQzAwLVx1REUzOFx1REU0MC1cdURFNUVcdURFRDAtXHVERUVEXHVERjAwLVx1REYyRlx1REY0MC1cdURGNDNcdURGNjMtXHVERjc3XHVERjdELVx1REY4Rl18XHVEODFCW1x1REYwMC1cdURGNDRcdURGNTBcdURGOTMtXHVERjlGXHVERkUwXHVERkUxXXxcdUQ4MjFbXHVEQzAwLVx1REZFQ118XHVEODIyW1x1REMwMC1cdURFRjJdfFx1RDgyQ1tcdURDMDAtXHVERDFFXHVERDcwLVx1REVGQl18XHVEODJGW1x1REMwMC1cdURDNkFcdURDNzAtXHVEQzdDXHVEQzgwLVx1REM4OFx1REM5MC1cdURDOTldfFx1RDgzNVtcdURDMDAtXHVEQzU0XHVEQzU2LVx1REM5Q1x1REM5RVx1REM5Rlx1RENBMlx1RENBNVx1RENBNlx1RENBOS1cdURDQUNcdURDQUUtXHVEQ0I5XHVEQ0JCXHVEQ0JELVx1RENDM1x1RENDNS1cdUREMDVcdUREMDctXHVERDBBXHVERDBELVx1REQxNFx1REQxNi1cdUREMUNcdUREMUUtXHVERDM5XHVERDNCLVx1REQzRVx1REQ0MC1cdURENDRcdURENDZcdURENEEtXHVERDUwXHVERDUyLVx1REVBNVx1REVBOC1cdURFQzBcdURFQzItXHVERURBXHVERURDLVx1REVGQVx1REVGQy1cdURGMTRcdURGMTYtXHVERjM0XHVERjM2LVx1REY0RVx1REY1MC1cdURGNkVcdURGNzAtXHVERjg4XHVERjhBLVx1REZBOFx1REZBQS1cdURGQzJcdURGQzQtXHVERkNCXXxcdUQ4M0FbXHVEQzAwLVx1RENDNFx1REQwMC1cdURENDNdfFx1RDgzQltcdURFMDAtXHVERTAzXHVERTA1LVx1REUxRlx1REUyMVx1REUyMlx1REUyNFx1REUyN1x1REUyOS1cdURFMzJcdURFMzQtXHVERTM3XHVERTM5XHVERTNCXHVERTQyXHVERTQ3XHVERTQ5XHVERTRCXHVERTRELVx1REU0Rlx1REU1MVx1REU1Mlx1REU1NFx1REU1N1x1REU1OVx1REU1Qlx1REU1RFx1REU1Rlx1REU2MVx1REU2Mlx1REU2NFx1REU2Ny1cdURFNkFcdURFNkMtXHVERTcyXHVERTc0LVx1REU3N1x1REU3OS1cdURFN0NcdURFN0VcdURFODAtXHVERTg5XHVERThCLVx1REU5Qlx1REVBMS1cdURFQTNcdURFQTUtXHVERUE5XHVERUFCLVx1REVCQl18XHVEODY5W1x1REMwMC1cdURFRDZcdURGMDAtXHVERkZGXXxcdUQ4NkRbXHVEQzAwLVx1REYzNFx1REY0MC1cdURGRkZdfFx1RDg2RVtcdURDMDAtXHVEQzFEXHVEQzIwLVx1REZGRl18XHVEODczW1x1REMwMC1cdURFQTFcdURFQjAtXHVERkZGXXxcdUQ4N0FbXHVEQzAwLVx1REZFMF18XHVEODdFW1x1REMwMC1cdURFMURdKVxTKi9nO2NsYXNzIE92e3RyYW5zZm9ybSh0KXtpZihudWxsPT10KXJldHVybiBudWxsO2lmKCJzdHJpbmciIT10eXBlb2YgdCl0aHJvdyB5dihPdix0KTtyZXR1cm4gdC5yZXBsYWNlKHh2LCh0PT50WzBdLnRvVXBwZXJDYXNlKCkrdC5zdWJzdHIoMSkudG9Mb3dlckNhc2UoKSkpfX1Pdi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8T3YpfSxPdi7JtXBpcGU9UW8oe25hbWU6InRpdGxlY2FzZSIsdHlwZTpPdixwdXJlOiEwfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihPdixbe3R5cGU6Yl8sYXJnczpbe25hbWU6InRpdGxlY2FzZSJ9XX1dLG51bGwsbnVsbCk7Y2xhc3MgUHZ7dHJhbnNmb3JtKHQpe2lmKG51bGw9PXQpcmV0dXJuIG51bGw7aWYoInN0cmluZyIhPXR5cGVvZiB0KXRocm93IHl2KFB2LHQpO3JldHVybiB0LnRvVXBwZXJDYXNlKCl9fVB2Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxQdil9LFB2Lsm1cGlwZT1Rbyh7bmFtZToidXBwZXJjYXNlIix0eXBlOlB2LHB1cmU6ITB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFB2LFt7dHlwZTpiXyxhcmdzOlt7bmFtZToidXBwZXJjYXNlIn1dfV0sbnVsbCxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIHd2e2NvbnN0cnVjdG9yKHQpe3RoaXMubG9jYWxlPXR9dHJhbnNmb3JtKHQsZT0ibWVkaXVtRGF0ZSIsbixvKXtpZihudWxsPT10fHwiIj09PXR8fHQhPXQpcmV0dXJuIG51bGw7dHJ5e3JldHVybiBETSh0LGUsb3x8dGhpcy5sb2NhbGUsbil9Y2F0Y2godCl7dGhyb3cgeXYod3YsdC5tZXNzYWdlKX19fXd2Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHx3dikoTXUoQl8pKX0sd3YuybVwaXBlPVFvKHtuYW1lOiJkYXRlIix0eXBlOnd2LHB1cmU6ITB9KSx3di5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltCX119XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIod3YsW3t0eXBlOmJfLGFyZ3M6W3tuYW1lOiJkYXRlIixwdXJlOiEwfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W0JfXX1dfV19KSxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IGt2PS8jL2c7Y2xhc3MgU3Z7Y29uc3RydWN0b3IodCl7dGhpcy5fbG9jYWxpemF0aW9uPXR9dHJhbnNmb3JtKHQsZSxuKXtpZihudWxsPT10KXJldHVybiIiO2lmKCJvYmplY3QiIT10eXBlb2YgZXx8bnVsbD09PWUpdGhyb3cgeXYoU3YsZSk7cmV0dXJuIGVbSk0odCxPYmplY3Qua2V5cyhlKSx0aGlzLl9sb2NhbGl6YXRpb24sbildLnJlcGxhY2Uoa3YsdC50b1N0cmluZygpKX19U3YuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFN2KShNdShLTSkpfSxTdi7JtXBpcGU9UW8oe25hbWU6ImkxOG5QbHVyYWwiLHR5cGU6U3YscHVyZTohMH0pLFN2LmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6S019XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFN2LFt7dHlwZTpiXyxhcmdzOlt7bmFtZToiaTE4blBsdXJhbCIscHVyZTohMH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOktNfV19KSxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIER2e3RyYW5zZm9ybSh0LGUpe2lmKG51bGw9PXQpcmV0dXJuIiI7aWYoIm9iamVjdCIhPXR5cGVvZiBlfHwic3RyaW5nIiE9dHlwZW9mIHQpdGhyb3cgeXYoRHYsZSk7cmV0dXJuIGUuaGFzT3duUHJvcGVydHkodCk/ZVt0XTplLmhhc093blByb3BlcnR5KCJvdGhlciIpP2Uub3RoZXI6IiJ9fUR2Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxEdil9LER2Lsm1cGlwZT1Rbyh7bmFtZToiaTE4blNlbGVjdCIsdHlwZTpEdixwdXJlOiEwfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihEdixbe3R5cGU6Yl8sYXJnczpbe25hbWU6ImkxOG5TZWxlY3QiLHB1cmU6ITB9XX1dLG51bGwsbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyBFdnt0cmFuc2Zvcm0odCl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHQsbnVsbCwyKX19RXYuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEV2KX0sRXYuybVwaXBlPVFvKHtuYW1lOiJqc29uIix0eXBlOkV2LHB1cmU6ITF9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEV2LFt7dHlwZTpiXyxhcmdzOlt7bmFtZToianNvbiIscHVyZTohMX1dfV0sbnVsbCxudWxsKTtjbGFzcyBBdntjb25zdHJ1Y3Rvcih0KXt0aGlzLmRpZmZlcnM9dCx0aGlzLmtleVZhbHVlcz1bXX10cmFuc2Zvcm0odCxlPVJ2KXtpZighdHx8ISh0IGluc3RhbmNlb2YgTWFwKSYmIm9iamVjdCIhPXR5cGVvZiB0KXJldHVybiBudWxsO3RoaXMuZGlmZmVyfHwodGhpcy5kaWZmZXI9dGhpcy5kaWZmZXJzLmZpbmQodCkuY3JlYXRlKCkpO2NvbnN0IG49dGhpcy5kaWZmZXIuZGlmZih0KTtyZXR1cm4gbiYmKHRoaXMua2V5VmFsdWVzPVtdLG4uZm9yRWFjaEl0ZW0oKHQ9Pnt0aGlzLmtleVZhbHVlcy5wdXNoKCgKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmZ1bmN0aW9uIGUodCxuKXtyZXR1cm57a2V5OnQsdmFsdWU6bn19KSh0LmtleSx0LmN1cnJlbnRWYWx1ZSkpfSkpLHRoaXMua2V5VmFsdWVzLnNvcnQoZSkpLHRoaXMua2V5VmFsdWVzfX1mdW5jdGlvbiBSdih0LGUpe2NvbnN0IG49dC5rZXksbz1lLmtleTtpZihuPT09bylyZXR1cm4gMDtpZih2b2lkIDA9PT1uKXJldHVybiAxO2lmKHZvaWQgMD09PW8pcmV0dXJuLTE7aWYobnVsbD09PW4pcmV0dXJuIDE7aWYobnVsbD09PW8pcmV0dXJuLTE7aWYoInN0cmluZyI9PXR5cGVvZiBuJiYic3RyaW5nIj09dHlwZW9mIG8pcmV0dXJuIG48bz8tMToxO2lmKCJudW1iZXIiPT10eXBlb2YgbiYmIm51bWJlciI9PXR5cGVvZiBvKXJldHVybiBuLW87aWYoImJvb2xlYW4iPT10eXBlb2YgbiYmImJvb2xlYW4iPT10eXBlb2YgbylyZXR1cm4gbjxvPy0xOjE7Y29uc3QgaT1TdHJpbmcobiksYT1TdHJpbmcobyk7cmV0dXJuIGk9PWE/MDppPGE/LTE6MX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovQXYuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEF2KShNdShSaCkpfSxBdi7JtXBpcGU9UW8oe25hbWU6ImtleXZhbHVlIix0eXBlOkF2LHB1cmU6ITF9KSxBdi5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOlJofV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihBdixbe3R5cGU6Yl8sYXJnczpbe25hbWU6ImtleXZhbHVlIixwdXJlOiExfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Umh9XX0pLG51bGwpO2NsYXNzIFR2e2NvbnN0cnVjdG9yKHQpe3RoaXMuX2xvY2FsZT10fXRyYW5zZm9ybSh0LGUsbil7aWYoIXp2KHQpKXJldHVybiBudWxsO249bnx8dGhpcy5fbG9jYWxlO3RyeXtyZXR1cm4gcU0oSHYodCksbixlKX1jYXRjaCh0KXt0aHJvdyB5dihUdix0Lm1lc3NhZ2UpfX19VHYuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFR2KShNdShCXykpfSxUdi7JtXBpcGU9UW8oe25hbWU6Im51bWJlciIsdHlwZTpUdixwdXJlOiEwfSksVHYuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbQl9dfV19XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFR2LFt7dHlwZTpiXyxhcmdzOlt7bmFtZToibnVtYmVyIn1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltCX119XX1dfSksbnVsbCk7Y2xhc3MgTnZ7Y29uc3RydWN0b3IodCl7dGhpcy5fbG9jYWxlPXR9dHJhbnNmb3JtKHQsZSxuKXtpZighenYodCkpcmV0dXJuIG51bGw7bj1ufHx0aGlzLl9sb2NhbGU7dHJ5e3JldHVybihmdW5jdGlvbiBvKHQsZSxuKXtyZXR1cm4gWU0odCxaTSh5TShlLHNNLlBlcmNlbnQpLGJNKGUsbU0uTWludXNTaWduKSksZSxtTS5Hcm91cCxtTS5EZWNpbWFsLG4sITApLnJlcGxhY2UobmV3IFJlZ0V4cCgiJSIsImciKSxiTShlLG1NLlBlcmNlbnRTaWduKSl9KShIdih0KSxuLGUpfWNhdGNoKHQpe3Rocm93IHl2KE52LHQubWVzc2FnZSl9fX1Odi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8TnYpKE11KEJfKSl9LE52Lsm1cGlwZT1Rbyh7bmFtZToicGVyY2VudCIsdHlwZTpOdixwdXJlOiEwfSksTnYuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbQl9dfV19XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKE52LFt7dHlwZTpiXyxhcmdzOlt7bmFtZToicGVyY2VudCJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbQl9dfV19XX0pLG51bGwpO2NsYXNzIEl2e2NvbnN0cnVjdG9yKHQsZT0iVVNEIil7dGhpcy5fbG9jYWxlPXQsdGhpcy5fZGVmYXVsdEN1cnJlbmN5Q29kZT1lfXRyYW5zZm9ybSh0LGUsbj0ic3ltYm9sIixvLGkpe2lmKCF6dih0KSlyZXR1cm4gbnVsbDtpPWl8fHRoaXMuX2xvY2FsZSwiYm9vbGVhbiI9PXR5cGVvZiBuJiYoKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZjb25zb2xlJiZjb25zb2xlLndhcm4mJmNvbnNvbGUud2FybignV2FybmluZzogdGhlIGN1cnJlbmN5IHBpcGUgaGFzIGJlZW4gY2hhbmdlZCBpbiBBbmd1bGFyIHY1LiBUaGUgc3ltYm9sRGlzcGxheSBvcHRpb24gKHRoaXJkIHBhcmFtZXRlcikgaXMgbm93IGEgc3RyaW5nIGluc3RlYWQgb2YgYSBib29sZWFuLiBUaGUgYWNjZXB0ZWQgdmFsdWVzIGFyZSAiY29kZSIsICJzeW1ib2wiIG9yICJzeW1ib2wtbmFycm93Ii4nKSxuPW4/InN5bWJvbCI6ImNvZGUiKTtsZXQgYT1lfHx0aGlzLl9kZWZhdWx0Q3VycmVuY3lDb2RlOyJjb2RlIiE9PW4mJihhPSJzeW1ib2wiPT09bnx8InN5bWJvbC1uYXJyb3ciPT09bj8oZnVuY3Rpb24gcih0LGUsbj0iZW4iKXtjb25zdCBvPShmdW5jdGlvbiBpKHQpe3JldHVybiBUZih0KVt6Zi5DdXJyZW5jaWVzXX0pKG4pW3RdfHxyTVt0XXx8W10sYT1vWzFdO3JldHVybiJuYXJyb3ciPT09ZSYmInN0cmluZyI9PXR5cGVvZiBhP2E6b1swXXx8dH0pKGEsInN5bWJvbCI9PT1uPyJ3aWRlIjoibmFycm93IixpKTpuKTt0cnl7cmV0dXJuKGZ1bmN0aW9uIHModCxlLG4sbyxpKXtjb25zdCBhPVpNKHlNKGUsc00uQ3VycmVuY3kpLGJNKGUsbU0uTWludXNTaWduKSk7cmV0dXJuIGEubWluRnJhYz0oZnVuY3Rpb24gcih0KXtsZXQgZTtjb25zdCBuPXJNW3RdO3JldHVybiBuJiYoZT1uWzJdKSwibnVtYmVyIj09dHlwZW9mIGU/ZToyfSkobyksYS5tYXhGcmFjPWEubWluRnJhYyxZTSh0LGEsZSxtTS5DdXJyZW5jeUdyb3VwLG1NLkN1cnJlbmN5RGVjaW1hbCxpKS5yZXBsYWNlKCLCpCIsbikucmVwbGFjZSgiwqQiLCIiKS50cmltKCl9KShIdih0KSxpLGEsZSxvKX1jYXRjaCh0KXt0aHJvdyB5dihJdix0Lm1lc3NhZ2UpfX19ZnVuY3Rpb24genYodCl7cmV0dXJuIShudWxsPT10fHwiIj09PXR8fHQhPXQpfWZ1bmN0aW9uIEh2KHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdCYmIWlzTmFOKE51bWJlcih0KS1wYXJzZUZsb2F0KHQpKSlyZXR1cm4gTnVtYmVyKHQpO2lmKCJudW1iZXIiIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3IoYCR7dH0gaXMgbm90IGEgbnVtYmVyYCk7cmV0dXJuIHR9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL0l2Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxJdikoTXUoQl8pLE11KFZfKSl9LEl2Lsm1cGlwZT1Rbyh7bmFtZToiY3VycmVuY3kiLHR5cGU6SXYscHVyZTohMH0pLEl2LmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W0JfXX1dfSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbVl9dfV19XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEl2LFt7dHlwZTpiXyxhcmdzOlt7bmFtZToiY3VycmVuY3kifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W0JfXX1dfSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbVl9dfV19XX0pLG51bGwpO2NsYXNzIEZ2e3RyYW5zZm9ybSh0LGUsbil7aWYobnVsbD09dClyZXR1cm4gbnVsbDtpZighdGhpcy5zdXBwb3J0cyh0KSl0aHJvdyB5dihGdix0KTtyZXR1cm4gdC5zbGljZShlLG4pfXN1cHBvcnRzKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdHx8QXJyYXkuaXNBcnJheSh0KX19RnYuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEZ2KX0sRnYuybVwaXBlPVFvKHtuYW1lOiJzbGljZSIsdHlwZTpGdixwdXJlOiExfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihGdixbe3R5cGU6Yl8sYXJnczpbe25hbWU6InNsaWNlIixwdXJlOiExfV19XSxudWxsLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3QgTHY9W012LFB2LHZ2LEV2LEZ2LFR2LE52LE92LEl2LHd2LFN2LER2LEF2XTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY2xhc3MgQnZ7fUJ2Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxCdil9LEJ2Lsm1bW9kPVpvKHt0eXBlOkJ2fSksQnYuybVpbmo9Y28oe3Byb3ZpZGVyczpbe3Byb3ZpZGU6S00sdXNlQ2xhc3M6UU19XX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oQnYse2RlY2xhcmF0aW9uczpbdHYsZXYsb3YsYXYsaHYsZ3YsY3YsZHYscHYsdXYsZnYsTXYsUHYsdnYsRXYsRnYsVHYsTnYsT3YsSXYsd3YsU3YsRHYsQXZdLGV4cG9ydHM6W3R2LGV2LG92LGF2LGh2LGd2LGN2LGR2LHB2LHV2LGZ2LE12LFB2LHZ2LEV2LEZ2LFR2LE52LE92LEl2LHd2LFN2LER2LEF2XX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoQnYsW3t0eXBlOmtfLGFyZ3M6W3tkZWNsYXJhdGlvbnM6W2J2LEx2XSxleHBvcnRzOltidixMdl0scHJvdmlkZXJzOlt7cHJvdmlkZTpLTSx1c2VDbGFzczpRTX1dfV19XSxudWxsLG51bGwpLAovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KbmV3IGJoKCIxMS4yLjE0Iik7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyBWdnt9VnYuybVwcm92PWxvKHt0b2tlbjpWdixwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5uZXcganYodXMoVUMpLHdpbmRvdyl9KTtjbGFzcyBqdntjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuZG9jdW1lbnQ9dCx0aGlzLndpbmRvdz1lLHRoaXMub2Zmc2V0PSgpPT5bMCwwXX1zZXRPZmZzZXQodCl7dGhpcy5vZmZzZXQ9QXJyYXkuaXNBcnJheSh0KT8oKT0+dDp0fWdldFNjcm9sbFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuc3VwcG9ydHNTY3JvbGxpbmcoKT9bdGhpcy53aW5kb3cucGFnZVhPZmZzZXQsdGhpcy53aW5kb3cucGFnZVlPZmZzZXRdOlswLDBdfXNjcm9sbFRvUG9zaXRpb24odCl7dGhpcy5zdXBwb3J0c1Njcm9sbGluZygpJiZ0aGlzLndpbmRvdy5zY3JvbGxUbyh0WzBdLHRbMV0pfXNjcm9sbFRvQW5jaG9yKHQpe2lmKCF0aGlzLnN1cHBvcnRzU2Nyb2xsaW5nKCkpcmV0dXJuO2NvbnN0IGU9KGZ1bmN0aW9uIG4odCxlKXtjb25zdCBuPXQuZ2V0RWxlbWVudEJ5SWQoZSl8fHQuZ2V0RWxlbWVudHNCeU5hbWUoZSlbMF07aWYobilyZXR1cm4gbjtpZigiZnVuY3Rpb24iPT10eXBlb2YgdC5jcmVhdGVUcmVlV2Fsa2VyJiZ0LmJvZHkmJih0LmJvZHkuY3JlYXRlU2hhZG93Um9vdHx8dC5ib2R5LmF0dGFjaFNoYWRvdykpe2NvbnN0IG49dC5jcmVhdGVUcmVlV2Fsa2VyKHQuYm9keSxOb2RlRmlsdGVyLlNIT1dfRUxFTUVOVCk7bGV0IG89bi5jdXJyZW50Tm9kZTtmb3IoO287KXtjb25zdCB0PW8uc2hhZG93Um9vdDtpZih0KXtjb25zdCBuPXQuZ2V0RWxlbWVudEJ5SWQoZSl8fHQucXVlcnlTZWxlY3RvcihgW25hbWU9IiR7ZX0iXWApO2lmKG4pcmV0dXJuIG59bz1uLm5leHROb2RlKCl9fXJldHVybiBudWxsfQovKioKICAgICAqIEBsaWNlbnNlIEFuZ3VsYXIgdjExLjIuMTQKICAgICAqIChjKSAyMDEwLTIwMjEgR29vZ2xlIExMQy4gaHR0cHM6Ly9hbmd1bGFyLmlvLwogICAgICogTGljZW5zZTogTUlUCiAgICAgKi8KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovKSh0aGlzLmRvY3VtZW50LHQpO2UmJih0aGlzLnNjcm9sbFRvRWxlbWVudChlKSx0aGlzLmF0dGVtcHRGb2N1cyhlKSl9c2V0SGlzdG9yeVNjcm9sbFJlc3RvcmF0aW9uKHQpe2lmKHRoaXMuc3VwcG9ydFNjcm9sbFJlc3RvcmF0aW9uKCkpe2NvbnN0IGU9dGhpcy53aW5kb3cuaGlzdG9yeTtlJiZlLnNjcm9sbFJlc3RvcmF0aW9uJiYoZS5zY3JvbGxSZXN0b3JhdGlvbj10KX19c2Nyb2xsVG9FbGVtZW50KHQpe2NvbnN0IGU9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPWUubGVmdCt0aGlzLndpbmRvdy5wYWdlWE9mZnNldCxvPWUudG9wK3RoaXMud2luZG93LnBhZ2VZT2Zmc2V0LGk9dGhpcy5vZmZzZXQoKTt0aGlzLndpbmRvdy5zY3JvbGxUbyhuLWlbMF0sby1pWzFdKX1hdHRlbXB0Rm9jdXModCl7cmV0dXJuIHQuZm9jdXMoKSx0aGlzLmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT10fXN1cHBvcnRTY3JvbGxSZXN0b3JhdGlvbigpe3RyeXtpZighdGhpcy5zdXBwb3J0c1Njcm9sbGluZygpKXJldHVybiExO2NvbnN0IHQ9VXYodGhpcy53aW5kb3cuaGlzdG9yeSl8fFV2KE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzLndpbmRvdy5oaXN0b3J5KSk7cmV0dXJuISghdHx8IXQud3JpdGFibGUmJiF0LnNldCl9Y2F0Y2godCl7cmV0dXJuITF9fXN1cHBvcnRzU2Nyb2xsaW5nKCl7dHJ5e3JldHVybiEhdGhpcy53aW5kb3cmJiEhdGhpcy53aW5kb3cuc2Nyb2xsVG8mJiJwYWdlWE9mZnNldCJpbiB0aGlzLndpbmRvd31jYXRjaCh0KXtyZXR1cm4hMX19fWZ1bmN0aW9uIFV2KHQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsInNjcm9sbFJlc3RvcmF0aW9uIil9Y2xhc3MgV3YgZXh0ZW5kcyBjbGFzcyBleHRlbmRzIGNsYXNze317Y29uc3RydWN0b3IoKXtzdXBlcigpfXN1cHBvcnRzRE9NRXZlbnRzKCl7cmV0dXJuITB9fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi97c3RhdGljIG1ha2VDdXJyZW50KCl7IShmdW5jdGlvbiB0KGUpe1ZDfHwoVkM9ZSl9KShuZXcgV3YpfWdldFByb3BlcnR5KHQsZSl7cmV0dXJuIHRbZV19bG9nKHQpe3dpbmRvdy5jb25zb2xlJiZ3aW5kb3cuY29uc29sZS5sb2cmJndpbmRvdy5jb25zb2xlLmxvZyh0KX1sb2dHcm91cCh0KXt3aW5kb3cuY29uc29sZSYmd2luZG93LmNvbnNvbGUuZ3JvdXAmJndpbmRvdy5jb25zb2xlLmdyb3VwKHQpfWxvZ0dyb3VwRW5kKCl7d2luZG93LmNvbnNvbGUmJndpbmRvdy5jb25zb2xlLmdyb3VwRW5kJiZ3aW5kb3cuY29uc29sZS5ncm91cEVuZCgpfW9uQW5kQ2FuY2VsKHQsZSxuKXtyZXR1cm4gdC5hZGRFdmVudExpc3RlbmVyKGUsbiwhMSksKCk9Pnt0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZSxuLCExKX19ZGlzcGF0Y2hFdmVudCh0LGUpe3QuZGlzcGF0Y2hFdmVudChlKX1yZW1vdmUodCl7cmV0dXJuIHQucGFyZW50Tm9kZSYmdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpLHR9Z2V0VmFsdWUodCl7cmV0dXJuIHQudmFsdWV9Y3JlYXRlRWxlbWVudCh0LGUpe3JldHVybihlPWV8fHRoaXMuZ2V0RGVmYXVsdERvY3VtZW50KCkpLmNyZWF0ZUVsZW1lbnQodCl9Y3JlYXRlSHRtbERvY3VtZW50KCl7cmV0dXJuIGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgiZmFrZVRpdGxlIil9Z2V0RGVmYXVsdERvY3VtZW50KCl7cmV0dXJuIGRvY3VtZW50fWlzRWxlbWVudE5vZGUodCl7cmV0dXJuIHQubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERX1pc1NoYWRvd1Jvb3QodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50fWdldEdsb2JhbEV2ZW50VGFyZ2V0KHQsZSl7cmV0dXJuIndpbmRvdyI9PT1lP3dpbmRvdzoiZG9jdW1lbnQiPT09ZT90OiJib2R5Ij09PWU/dC5ib2R5Om51bGx9Z2V0SGlzdG9yeSgpe3JldHVybiB3aW5kb3cuaGlzdG9yeX1nZXRMb2NhdGlvbigpe3JldHVybiB3aW5kb3cubG9jYXRpb259Z2V0QmFzZUhyZWYodCl7Y29uc3QgZT0oZnVuY3Rpb24gbigpe3JldHVybiBZdnx8KFl2PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImJhc2UiKSxZdik/WXYuZ2V0QXR0cmlidXRlKCJocmVmIik6bnVsbH0pKCk7cmV0dXJuIG51bGw9PWU/bnVsbDooZnVuY3Rpb24gbyh0KXtyZXR1cm4gR3Z8fChHdj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIikpLEd2LnNldEF0dHJpYnV0ZSgiaHJlZiIsdCksIi8iPT09R3YucGF0aG5hbWUuY2hhckF0KDApP0d2LnBhdGhuYW1lOiIvIitHdi5wYXRobmFtZX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovKShlKX1yZXNldEJhc2VFbGVtZW50KCl7WXY9bnVsbH1nZXRVc2VyQWdlbnQoKXtyZXR1cm4gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnR9cGVyZm9ybWFuY2VOb3coKXtyZXR1cm4gd2luZG93LnBlcmZvcm1hbmNlJiZ3aW5kb3cucGVyZm9ybWFuY2Uubm93P3dpbmRvdy5wZXJmb3JtYW5jZS5ub3coKToobmV3IERhdGUpLmdldFRpbWUoKX1zdXBwb3J0c0Nvb2tpZXMoKXtyZXR1cm4hMH1nZXRDb29raWUodCl7cmV0dXJuICRNKGRvY3VtZW50LmNvb2tpZSx0KX19bGV0IEd2LFl2PW51bGw7Y29uc3QgcXY9bmV3IE5yKCJUUkFOU0lUSU9OX0lEIiksWnY9W3twcm92aWRlOkVfLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gWHYodCxlLG4pe3JldHVybigpPT57bi5nZXQoQV8pLmRvbmVQcm9taXNlLnRoZW4oKCgpPT57Y29uc3Qgbj1qQygpO0FycmF5LnByb3RvdHlwZS5zbGljZS5hcHBseShlLnF1ZXJ5U2VsZWN0b3JBbGwoInN0eWxlW25nLXRyYW5zaXRpb25dIikpLmZpbHRlcigoZT0+ZS5nZXRBdHRyaWJ1dGUoIm5nLXRyYW5zaXRpb24iKT09PXQpKS5mb3JFYWNoKCh0PT5uLnJlbW92ZSh0KSkpfSkpfX0sZGVwczpbcXYsVUMsUXBdLG11bHRpOiEwfV07Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyBLdntzdGF0aWMgaW5pdCgpeyEoZnVuY3Rpb24gdChlKXtkQz1lfSkobmV3IEt2KX1hZGRUb1dpbmRvdyh0KXtFby5nZXRBbmd1bGFyVGVzdGFiaWxpdHk9KGUsbj0hMCk9Pntjb25zdCBvPXQuZmluZFRlc3RhYmlsaXR5SW5UcmVlKGUsbik7aWYobnVsbD09byl0aHJvdyBuZXcgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIHRlc3RhYmlsaXR5IGZvciBlbGVtZW50LiIpO3JldHVybiBvfSxFby5nZXRBbGxBbmd1bGFyVGVzdGFiaWxpdGllcz0oKT0+dC5nZXRBbGxUZXN0YWJpbGl0aWVzKCksRW8uZ2V0QWxsQW5ndWxhclJvb3RFbGVtZW50cz0oKT0+dC5nZXRBbGxSb290RWxlbWVudHMoKSxFby5mcmFtZXdvcmtTdGFiaWxpemVyc3x8KEVvLmZyYW1ld29ya1N0YWJpbGl6ZXJzPVtdKSxFby5mcmFtZXdvcmtTdGFiaWxpemVycy5wdXNoKCh0PT57Y29uc3QgZT1Fby5nZXRBbGxBbmd1bGFyVGVzdGFiaWxpdGllcygpO2xldCBuPWUubGVuZ3RoLG89ITE7Y29uc3QgaT1mdW5jdGlvbihlKXtvPW98fGUsbi0tLDA9PW4mJnQobyl9O2UuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC53aGVuU3RhYmxlKGkpfSkpfSkpfWZpbmRUZXN0YWJpbGl0eUluVHJlZSh0LGUsbil7aWYobnVsbD09ZSlyZXR1cm4gbnVsbDtjb25zdCBvPXQuZ2V0VGVzdGFiaWxpdHkoZSk7cmV0dXJuIG51bGwhPW8/bzpuP2pDKCkuaXNTaGFkb3dSb290KGUpP3RoaXMuZmluZFRlc3RhYmlsaXR5SW5UcmVlKHQsZS5ob3N0LCEwKTp0aGlzLmZpbmRUZXN0YWJpbGl0eUluVHJlZSh0LGUucGFyZW50RWxlbWVudCwhMCk6bnVsbH19bmV3IF9zO2NvbnN0IEp2PW5ldyBOcigiRXZlbnRNYW5hZ2VyUGx1Z2lucyIpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jbGFzcyBRdntjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuX3pvbmU9ZSx0aGlzLl9ldmVudE5hbWVUb1BsdWdpbj1uZXcgTWFwLHQuZm9yRWFjaCgodD0+dC5tYW5hZ2VyPXRoaXMpKSx0aGlzLl9wbHVnaW5zPXQuc2xpY2UoKS5yZXZlcnNlKCl9YWRkRXZlbnRMaXN0ZW5lcih0LGUsbil7cmV0dXJuIHRoaXMuX2ZpbmRQbHVnaW5Gb3IoZSkuYWRkRXZlbnRMaXN0ZW5lcih0LGUsbil9YWRkR2xvYmFsRXZlbnRMaXN0ZW5lcih0LGUsbil7cmV0dXJuIHRoaXMuX2ZpbmRQbHVnaW5Gb3IoZSkuYWRkR2xvYmFsRXZlbnRMaXN0ZW5lcih0LGUsbil9Z2V0Wm9uZSgpe3JldHVybiB0aGlzLl96b25lfV9maW5kUGx1Z2luRm9yKHQpe2NvbnN0IGU9dGhpcy5fZXZlbnROYW1lVG9QbHVnaW4uZ2V0KHQpO2lmKGUpcmV0dXJuIGU7Y29uc3Qgbj10aGlzLl9wbHVnaW5zO2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKXtjb25zdCBvPW5bZV07aWYoby5zdXBwb3J0cyh0KSlyZXR1cm4gdGhpcy5fZXZlbnROYW1lVG9QbHVnaW4uc2V0KHQsbyksb310aHJvdyBuZXcgRXJyb3IoYE5vIGV2ZW50IG1hbmFnZXIgcGx1Z2luIGZvdW5kIGZvciBldmVudCAke3R9YCl9fVF2Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxRdikodXMoSnYpLHVzKHRDKSl9LFF2Lsm1cHJvdj1sbyh7dG9rZW46UXYsZmFjdG9yeTpRdi7JtWZhY30pLFF2LmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6QXJyYXksZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbSnZdfV19LHt0eXBlOnRDfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihRdixbe3R5cGU6Sm19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6QXJyYXksZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbSnZdfV19LHt0eXBlOnRDfV19KSxudWxsKTtjbGFzcyAkdntjb25zdHJ1Y3Rvcih0KXt0aGlzLl9kb2M9dH1hZGRHbG9iYWxFdmVudExpc3RlbmVyKHQsZSxuKXtjb25zdCBvPWpDKCkuZ2V0R2xvYmFsRXZlbnRUYXJnZXQodGhpcy5fZG9jLHQpO2lmKCFvKXRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgZXZlbnQgdGFyZ2V0ICR7b30gZm9yIGV2ZW50ICR7ZX1gKTtyZXR1cm4gdGhpcy5hZGRFdmVudExpc3RlbmVyKG8sZSxuKX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NsYXNzIHR4e2NvbnN0cnVjdG9yKCl7dGhpcy5fc3R5bGVzU2V0PW5ldyBTZXR9YWRkU3R5bGVzKHQpe2NvbnN0IGU9bmV3IFNldDt0LmZvckVhY2goKHQ9Pnt0aGlzLl9zdHlsZXNTZXQuaGFzKHQpfHwodGhpcy5fc3R5bGVzU2V0LmFkZCh0KSxlLmFkZCh0KSl9KSksdGhpcy5vblN0eWxlc0FkZGVkKGUpfW9uU3R5bGVzQWRkZWQodCl7fWdldEFsbFN0eWxlcygpe3JldHVybiBBcnJheS5mcm9tKHRoaXMuX3N0eWxlc1NldCl9fXR4Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHx0eCl9LHR4Lsm1cHJvdj1sbyh7dG9rZW46dHgsZmFjdG9yeTp0eC7JtWZhY30pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIodHgsW3t0eXBlOkptfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW119KSxudWxsKTtjbGFzcyBleCBleHRlbmRzIHR4e2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5fZG9jPXQsdGhpcy5faG9zdE5vZGVzPW5ldyBNYXAsdGhpcy5faG9zdE5vZGVzLnNldCh0LmhlYWQsW10pfV9hZGRTdHlsZXNUb0hvc3QodCxlLG4pe3QuZm9yRWFjaCgodD0+e2NvbnN0IG89dGhpcy5fZG9jLmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7by50ZXh0Q29udGVudD10LG4ucHVzaChlLmFwcGVuZENoaWxkKG8pKX0pKX1hZGRIb3N0KHQpe2NvbnN0IGU9W107dGhpcy5fYWRkU3R5bGVzVG9Ib3N0KHRoaXMuX3N0eWxlc1NldCx0LGUpLHRoaXMuX2hvc3ROb2Rlcy5zZXQodCxlKX1yZW1vdmVIb3N0KHQpe2NvbnN0IGU9dGhpcy5faG9zdE5vZGVzLmdldCh0KTtlJiZlLmZvckVhY2gobngpLHRoaXMuX2hvc3ROb2Rlcy5kZWxldGUodCl9b25TdHlsZXNBZGRlZCh0KXt0aGlzLl9ob3N0Tm9kZXMuZm9yRWFjaCgoKGUsbik9Pnt0aGlzLl9hZGRTdHlsZXNUb0hvc3QodCxuLGUpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5faG9zdE5vZGVzLmZvckVhY2goKHQ9PnQuZm9yRWFjaChueCkpKX19ZnVuY3Rpb24gbngodCl7akMoKS5yZW1vdmUodCl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2V4Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxleCkodXMoVUMpKX0sZXguybVwcm92PWxvKHt0b2tlbjpleCxmYWN0b3J5OmV4Lsm1ZmFjfSksZXguY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbVUNdfV19XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGV4LFt7dHlwZTpKbX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbVUNdfV19XX0pLG51bGwpO2NvbnN0IG94PXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifSxpeD0vJUNPTVAlL2csYXg9InVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fCEhbmdEZXZNb2RlO2Z1bmN0aW9uIHJ4KHQsZSxuKXtmb3IobGV0IG89MDtvPGUubGVuZ3RoO28rKyl7bGV0IGk9ZVtvXTtBcnJheS5pc0FycmF5KGkpP3J4KHQsaSxuKTooaT1pLnJlcGxhY2UoaXgsdCksbi5wdXNoKGkpKX1yZXR1cm4gbn1mdW5jdGlvbiBzeCh0KXtyZXR1cm4gZT0+e2lmKCJfX25nVW53cmFwX18iPT09ZSlyZXR1cm4gdDshMT09PXQoZSkmJihlLnByZXZlbnREZWZhdWx0KCksZS5yZXR1cm5WYWx1ZT0hMSl9fWxldCBseD0hMTtjbGFzcyBjeHtjb25zdHJ1Y3Rvcih0LGUsbil7dGhpcy5ldmVudE1hbmFnZXI9dCx0aGlzLnNoYXJlZFN0eWxlc0hvc3Q9ZSx0aGlzLmFwcElkPW4sdGhpcy5yZW5kZXJlckJ5Q29tcElkPW5ldyBNYXAsdGhpcy5kZWZhdWx0UmVuZGVyZXI9bmV3IGR4KHQpfWNyZWF0ZVJlbmRlcmVyKHQsZSl7aWYoIXR8fCFlKXJldHVybiB0aGlzLmRlZmF1bHRSZW5kZXJlcjtzd2l0Y2goZS5lbmNhcHN1bGF0aW9uKXtjYXNlIFBvLkVtdWxhdGVkOntsZXQgbj10aGlzLnJlbmRlcmVyQnlDb21wSWQuZ2V0KGUuaWQpO3JldHVybiBufHwobj1uZXcgdXgodGhpcy5ldmVudE1hbmFnZXIsdGhpcy5zaGFyZWRTdHlsZXNIb3N0LGUsdGhpcy5hcHBJZCksdGhpcy5yZW5kZXJlckJ5Q29tcElkLnNldChlLmlkLG4pKSxuLmFwcGx5VG9Ib3N0KHQpLG59Y2FzZSAxOmNhc2UgUG8uU2hhZG93RG9tOnJldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgbmdEZXZNb2RlJiYhbmdEZXZNb2RlfHxseHx8MSE9PWUuZW5jYXBzdWxhdGlvbnx8KGx4PSEwLGNvbnNvbGUud2FybigiVmlld0VuY2Fwc3VsYXRpb24uTmF0aXZlIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuIEZhbGxpbmcgYmFjayB0byBWaWV3RW5jYXBzdWxhdGlvbi5TaGFkb3dEb20uIFRoZSBmYWxsYmFjayB3aWxsIGJlIHJlbW92ZWQgaW4gdjEyLiIpKSxuZXcgZngodGhpcy5ldmVudE1hbmFnZXIsdGhpcy5zaGFyZWRTdHlsZXNIb3N0LHQsZSk7ZGVmYXVsdDppZighdGhpcy5yZW5kZXJlckJ5Q29tcElkLmhhcyhlLmlkKSl7Y29uc3QgdD1yeChlLmlkLGUuc3R5bGVzLFtdKTt0aGlzLnNoYXJlZFN0eWxlc0hvc3QuYWRkU3R5bGVzKHQpLHRoaXMucmVuZGVyZXJCeUNvbXBJZC5zZXQoZS5pZCx0aGlzLmRlZmF1bHRSZW5kZXJlcil9cmV0dXJuIHRoaXMuZGVmYXVsdFJlbmRlcmVyfX1iZWdpbigpe31lbmQoKXt9fWN4Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxjeCkodXMoUXYpLHVzKGV4KSx1cyhSXykpfSxjeC7JtXByb3Y9bG8oe3Rva2VuOmN4LGZhY3Rvcnk6Y3guybVmYWN9KSxjeC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOlF2fSx7dHlwZTpleH0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W1JfXX1dfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihjeCxbe3R5cGU6Sm19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6UXZ9LHt0eXBlOmV4fSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbUl9dfV19XX0pLG51bGwpO2NsYXNzIGR4e2NvbnN0cnVjdG9yKHQpe3RoaXMuZXZlbnRNYW5hZ2VyPXQsdGhpcy5kYXRhPU9iamVjdC5jcmVhdGUobnVsbCl9ZGVzdHJveSgpe31jcmVhdGVFbGVtZW50KHQsZSl7cmV0dXJuIGU/ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG94W2VdfHxlLHQpOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodCl9Y3JlYXRlQ29tbWVudCh0KXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlQ29tbWVudCh0KX1jcmVhdGVUZXh0KHQpe3JldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0KX1hcHBlbmRDaGlsZCh0LGUpe3QuYXBwZW5kQ2hpbGQoZSl9aW5zZXJ0QmVmb3JlKHQsZSxuKXt0JiZ0Lmluc2VydEJlZm9yZShlLG4pfXJlbW92ZUNoaWxkKHQsZSl7dCYmdC5yZW1vdmVDaGlsZChlKX1zZWxlY3RSb290RWxlbWVudCh0LGUpe2xldCBuPSJzdHJpbmciPT10eXBlb2YgdD9kb2N1bWVudC5xdWVyeVNlbGVjdG9yKHQpOnQ7aWYoIW4pdGhyb3cgbmV3IEVycm9yKGBUaGUgc2VsZWN0b3IgIiR7dH0iIGRpZCBub3QgbWF0Y2ggYW55IGVsZW1lbnRzYCk7cmV0dXJuIGV8fChuLnRleHRDb250ZW50PSIiKSxufXBhcmVudE5vZGUodCl7cmV0dXJuIHQucGFyZW50Tm9kZX1uZXh0U2libGluZyh0KXtyZXR1cm4gdC5uZXh0U2libGluZ31zZXRBdHRyaWJ1dGUodCxlLG4sbyl7aWYobyl7ZT1vKyI6IitlO2NvbnN0IGk9b3hbb107aT90LnNldEF0dHJpYnV0ZU5TKGksZSxuKTp0LnNldEF0dHJpYnV0ZShlLG4pfWVsc2UgdC5zZXRBdHRyaWJ1dGUoZSxuKX1yZW1vdmVBdHRyaWJ1dGUodCxlLG4pe2lmKG4pe2NvbnN0IG89b3hbbl07bz90LnJlbW92ZUF0dHJpYnV0ZU5TKG8sZSk6dC5yZW1vdmVBdHRyaWJ1dGUoYCR7bn06JHtlfWApfWVsc2UgdC5yZW1vdmVBdHRyaWJ1dGUoZSl9YWRkQ2xhc3ModCxlKXt0LmNsYXNzTGlzdC5hZGQoZSl9cmVtb3ZlQ2xhc3ModCxlKXt0LmNsYXNzTGlzdC5yZW1vdmUoZSl9c2V0U3R5bGUodCxlLG4sbyl7byYodGMuRGFzaENhc2V8dGMuSW1wb3J0YW50KT90LnN0eWxlLnNldFByb3BlcnR5KGUsbixvJnRjLkltcG9ydGFudD8iaW1wb3J0YW50IjoiIik6dC5zdHlsZVtlXT1ufXJlbW92ZVN0eWxlKHQsZSxuKXtuJnRjLkRhc2hDYXNlP3Quc3R5bGUucmVtb3ZlUHJvcGVydHkoZSk6dC5zdHlsZVtlXT0iIn1zZXRQcm9wZXJ0eSh0LGUsbil7YXgmJm14KGUsInByb3BlcnR5IiksdFtlXT1ufXNldFZhbHVlKHQsZSl7dC5ub2RlVmFsdWU9ZX1saXN0ZW4odCxlLG4pe3JldHVybiBheCYmbXgoZSwibGlzdGVuZXIiKSwic3RyaW5nIj09dHlwZW9mIHQ/dGhpcy5ldmVudE1hbmFnZXIuYWRkR2xvYmFsRXZlbnRMaXN0ZW5lcih0LGUsc3gobikpOnRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodCxlLHN4KG4pKX19Y29uc3QgcHg9IkAiLmNoYXJDb2RlQXQoMCk7ZnVuY3Rpb24gbXgodCxlKXtpZih0LmNoYXJDb2RlQXQoMCk9PT1weCl0aHJvdyBuZXcgRXJyb3IoYEZvdW5kIHRoZSBzeW50aGV0aWMgJHtlfSAke3R9LiBQbGVhc2UgaW5jbHVkZSBlaXRoZXIgIkJyb3dzZXJBbmltYXRpb25zTW9kdWxlIiBvciAiTm9vcEFuaW1hdGlvbnNNb2R1bGUiIGluIHlvdXIgYXBwbGljYXRpb24uYCl9Y2xhc3MgdXggZXh0ZW5kcyBkeHtjb25zdHJ1Y3Rvcih0LGUsbixvKXtzdXBlcih0KSx0aGlzLmNvbXBvbmVudD1uO2NvbnN0IGk9cngobysiLSIrbi5pZCxuLnN0eWxlcyxbXSk7ZS5hZGRTdHlsZXMoaSksdGhpcy5jb250ZW50QXR0cj0oZnVuY3Rpb24gYSh0KXtyZXR1cm4iX25nY29udGVudC0lQ09NUCUiLnJlcGxhY2UoaXgsdCl9KShvKyItIituLmlkKSx0aGlzLmhvc3RBdHRyPShmdW5jdGlvbiByKHQpe3JldHVybiJfbmdob3N0LSVDT01QJSIucmVwbGFjZShpeCx0KX0pKG8rIi0iK24uaWQpfWFwcGx5VG9Ib3N0KHQpe3N1cGVyLnNldEF0dHJpYnV0ZSh0LHRoaXMuaG9zdEF0dHIsIiIpfWNyZWF0ZUVsZW1lbnQodCxlKXtjb25zdCBuPXN1cGVyLmNyZWF0ZUVsZW1lbnQodCxlKTtyZXR1cm4gc3VwZXIuc2V0QXR0cmlidXRlKG4sdGhpcy5jb250ZW50QXR0ciwiIiksbn19Y2xhc3MgZnggZXh0ZW5kcyBkeHtjb25zdHJ1Y3Rvcih0LGUsbixvKXtzdXBlcih0KSx0aGlzLnNoYXJlZFN0eWxlc0hvc3Q9ZSx0aGlzLmhvc3RFbD1uLHRoaXMuc2hhZG93Um9vdD1uLmF0dGFjaFNoYWRvdyh7bW9kZToib3BlbiJ9KSx0aGlzLnNoYXJlZFN0eWxlc0hvc3QuYWRkSG9zdCh0aGlzLnNoYWRvd1Jvb3QpO2NvbnN0IGk9cngoby5pZCxvLnN0eWxlcyxbXSk7Zm9yKGxldCB0PTA7dDxpLmxlbmd0aDt0Kyspe2NvbnN0IGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtlLnRleHRDb250ZW50PWlbdF0sdGhpcy5zaGFkb3dSb290LmFwcGVuZENoaWxkKGUpfX1ub2RlT3JTaGFkb3dSb290KHQpe3JldHVybiB0PT09dGhpcy5ob3N0RWw/dGhpcy5zaGFkb3dSb290OnR9ZGVzdHJveSgpe3RoaXMuc2hhcmVkU3R5bGVzSG9zdC5yZW1vdmVIb3N0KHRoaXMuc2hhZG93Um9vdCl9YXBwZW5kQ2hpbGQodCxlKXtyZXR1cm4gc3VwZXIuYXBwZW5kQ2hpbGQodGhpcy5ub2RlT3JTaGFkb3dSb290KHQpLGUpfWluc2VydEJlZm9yZSh0LGUsbil7cmV0dXJuIHN1cGVyLmluc2VydEJlZm9yZSh0aGlzLm5vZGVPclNoYWRvd1Jvb3QodCksZSxuKX1yZW1vdmVDaGlsZCh0LGUpe3JldHVybiBzdXBlci5yZW1vdmVDaGlsZCh0aGlzLm5vZGVPclNoYWRvd1Jvb3QodCksZSl9cGFyZW50Tm9kZSh0KXtyZXR1cm4gdGhpcy5ub2RlT3JTaGFkb3dSb290KHN1cGVyLnBhcmVudE5vZGUodGhpcy5ub2RlT3JTaGFkb3dSb290KHQpKSl9fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jbGFzcyBneCBleHRlbmRzICR2e2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfXN1cHBvcnRzKHQpe3JldHVybiEwfWFkZEV2ZW50TGlzdGVuZXIodCxlLG4pe3JldHVybiB0LmFkZEV2ZW50TGlzdGVuZXIoZSxuLCExKSwoKT0+dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKHQsZSxuKX1yZW1vdmVFdmVudExpc3RlbmVyKHQsZSxuKXtyZXR1cm4gdC5yZW1vdmVFdmVudExpc3RlbmVyKGUsbil9fWd4Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxneCkodXMoVUMpKX0sZ3guybVwcm92PWxvKHt0b2tlbjpneCxmYWN0b3J5Omd4Lsm1ZmFjfSksZ3guY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbVUNdfV19XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGd4LFt7dHlwZTpKbX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbVUNdfV19XX0pLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3QgaHg9e3BhbjohMCxwYW5zdGFydDohMCxwYW5tb3ZlOiEwLHBhbmVuZDohMCxwYW5jYW5jZWw6ITAscGFubGVmdDohMCxwYW5yaWdodDohMCxwYW51cDohMCxwYW5kb3duOiEwLHBpbmNoOiEwLHBpbmNoc3RhcnQ6ITAscGluY2htb3ZlOiEwLHBpbmNoZW5kOiEwLHBpbmNoY2FuY2VsOiEwLHBpbmNoaW46ITAscGluY2hvdXQ6ITAscHJlc3M6ITAscHJlc3N1cDohMCxyb3RhdGU6ITAscm90YXRlc3RhcnQ6ITAscm90YXRlbW92ZTohMCxyb3RhdGVlbmQ6ITAscm90YXRlY2FuY2VsOiEwLHN3aXBlOiEwLHN3aXBlbGVmdDohMCxzd2lwZXJpZ2h0OiEwLHN3aXBldXA6ITAsc3dpcGVkb3duOiEwLHRhcDohMCxkb3VibGV0YXA6ITB9LGJ4PW5ldyBOcigiSGFtbWVyR2VzdHVyZUNvbmZpZyIpLHl4PW5ldyBOcigiSGFtbWVyTG9hZGVyIik7Y2xhc3MgX3h7Y29uc3RydWN0b3IoKXt0aGlzLmV2ZW50cz1bXSx0aGlzLm92ZXJyaWRlcz17fX1idWlsZEhhbW1lcih0KXtjb25zdCBlPW5ldyBIYW1tZXIodCx0aGlzLm9wdGlvbnMpO2UuZ2V0KCJwaW5jaCIpLnNldCh7ZW5hYmxlOiEwfSksZS5nZXQoInJvdGF0ZSIpLnNldCh7ZW5hYmxlOiEwfSk7Zm9yKGNvbnN0IHQgaW4gdGhpcy5vdmVycmlkZXMpZS5nZXQodCkuc2V0KHRoaXMub3ZlcnJpZGVzW3RdKTtyZXR1cm4gZX19X3guybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fF94KX0sX3guybVwcm92PWxvKHt0b2tlbjpfeCxmYWN0b3J5Ol94Lsm1ZmFjfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihfeCxbe3R5cGU6Sm19XSwoZnVuY3Rpb24oKXtyZXR1cm5bXX0pLG51bGwpO2NsYXNzIEN4IGV4dGVuZHMgJHZ7Y29uc3RydWN0b3IodCxlLG4sbyl7c3VwZXIodCksdGhpcy5fY29uZmlnPWUsdGhpcy5jb25zb2xlPW4sdGhpcy5sb2FkZXI9byx0aGlzLl9sb2FkZXJQcm9taXNlPW51bGx9c3VwcG9ydHModCl7cmV0dXJuISghaHguaGFzT3duUHJvcGVydHkodC50b0xvd2VyQ2FzZSgpKSYmIXRoaXMuaXNDdXN0b21FdmVudCh0KXx8IXdpbmRvdy5IYW1tZXImJiF0aGlzLmxvYWRlciYmKCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmdGhpcy5jb25zb2xlLndhcm4oYFRoZSAiJHt0fSIgZXZlbnQgY2Fubm90IGJlIGJvdW5kIGJlY2F1c2UgSGFtbWVyLkpTIGlzIG5vdCBsb2FkZWQgYW5kIG5vIGN1c3RvbSBsb2FkZXIgaGFzIGJlZW4gc3BlY2lmaWVkLmApLDEpKX1hZGRFdmVudExpc3RlbmVyKHQsZSxuKXtjb25zdCBvPXRoaXMubWFuYWdlci5nZXRab25lKCk7aWYoZT1lLnRvTG93ZXJDYXNlKCksIXdpbmRvdy5IYW1tZXImJnRoaXMubG9hZGVyKXt0aGlzLl9sb2FkZXJQcm9taXNlPXRoaXMuX2xvYWRlclByb21pc2V8fHRoaXMubG9hZGVyKCk7bGV0IG89ITEsaT0oKT0+e289ITB9O3JldHVybiB0aGlzLl9sb2FkZXJQcm9taXNlLnRoZW4oKCgpPT57aWYoIXdpbmRvdy5IYW1tZXIpcmV0dXJuKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZ0aGlzLmNvbnNvbGUud2FybigiVGhlIGN1c3RvbSBIQU1NRVJfTE9BREVSIGNvbXBsZXRlZCwgYnV0IEhhbW1lci5KUyBpcyBub3QgcHJlc2VudC4iKSx2b2lkKGk9KCk9Pnt9KTtvfHwoaT10aGlzLmFkZEV2ZW50TGlzdGVuZXIodCxlLG4pKX0pKS5jYXRjaCgoKCk9PnsoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJnRoaXMuY29uc29sZS53YXJuKGBUaGUgIiR7ZX0iIGV2ZW50IGNhbm5vdCBiZSBib3VuZCBiZWNhdXNlIHRoZSBjdXN0b20gSGFtbWVyLkpTIGxvYWRlciBmYWlsZWQuYCksaT0oKT0+e319KSksKCk9PntpKCl9fXJldHVybiBvLnJ1bk91dHNpZGVBbmd1bGFyKCgoKT0+e2NvbnN0IGk9dGhpcy5fY29uZmlnLmJ1aWxkSGFtbWVyKHQpLGE9ZnVuY3Rpb24odCl7by5ydW5HdWFyZGVkKChmdW5jdGlvbigpe24odCl9KSl9O3JldHVybiBpLm9uKGUsYSksKCk9PntpLm9mZihlLGEpLCJmdW5jdGlvbiI9PXR5cGVvZiBpLmRlc3Ryb3kmJmkuZGVzdHJveSgpfX0pKX1pc0N1c3RvbUV2ZW50KHQpe3JldHVybiB0aGlzLl9jb25maWcuZXZlbnRzLmluZGV4T2YodCk+LTF9fUN4Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxDeCkodXMoVUMpLHVzKGJ4KSx1cyhMXyksdXMoeXgsOCkpfSxDeC7JtXByb3Y9bG8oe3Rva2VuOkN4LGZhY3Rvcnk6Q3guybVmYWN9KSxDeC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltVQ119XX0se3R5cGU6X3gsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbYnhdfV19LHt0eXBlOkxffSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W3l4XX1dfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihDeCxbe3R5cGU6Sm19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W1VDXX1dfSx7dHlwZTpfeCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltieF19XX0se3R5cGU6TF99LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbeXhdfV19XX0pLG51bGwpO2NvbnN0IE14PVt7cHJvdmlkZTpKdix1c2VDbGFzczpDeCxtdWx0aTohMCxkZXBzOltVQyxieCxMXyxbbmV3IF9zLHl4XV19LHtwcm92aWRlOmJ4LHVzZUNsYXNzOl94LGRlcHM6W119XTtjbGFzcyB2eHt9dnguybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHZ4KX0sdnguybVtb2Q9Wm8oe3R5cGU6dnh9KSx2eC7JtWluaj1jbyh7cHJvdmlkZXJzOk14fSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYih2eCxbe3R5cGU6a18sYXJnczpbe3Byb3ZpZGVyczpNeH1dfV0sbnVsbCxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IHh4PVsiYWx0IiwiY29udHJvbCIsIm1ldGEiLCJzaGlmdCJdLE94PXsiXGIiOiJCYWNrc3BhY2UiLCJcdCI6IlRhYiIsIn8iOiJEZWxldGUiLCIbIjoiRXNjYXBlIixEZWw6IkRlbGV0ZSIsRXNjOiJFc2NhcGUiLExlZnQ6IkFycm93TGVmdCIsUmlnaHQ6IkFycm93UmlnaHQiLFVwOiJBcnJvd1VwIixEb3duOiJBcnJvd0Rvd24iLE1lbnU6IkNvbnRleHRNZW51IixTY3JvbGw6IlNjcm9sbExvY2siLFdpbjoiT1MifSxQeD17QToiMSIsQjoiMiIsQzoiMyIsRDoiNCIsRToiNSIsRjoiNiIsRzoiNyIsSDoiOCIsSToiOSIsSjoiKiIsSzoiKyIsTToiLSIsTjoiLiIsTzoiLyIsImAiOiIwIiwiwpAiOiJOdW1Mb2NrIn0sd3g9e2FsdDp0PT50LmFsdEtleSxjb250cm9sOnQ9PnQuY3RybEtleSxtZXRhOnQ9PnQubWV0YUtleSxzaGlmdDp0PT50LnNoaWZ0S2V5fTtjbGFzcyBreCBleHRlbmRzICR2e2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfXN1cHBvcnRzKHQpe3JldHVybiBudWxsIT1reC5wYXJzZUV2ZW50TmFtZSh0KX1hZGRFdmVudExpc3RlbmVyKHQsZSxuKXtjb25zdCBvPWt4LnBhcnNlRXZlbnROYW1lKGUpLGk9a3guZXZlbnRDYWxsYmFjayhvLmZ1bGxLZXksbix0aGlzLm1hbmFnZXIuZ2V0Wm9uZSgpKTtyZXR1cm4gdGhpcy5tYW5hZ2VyLmdldFpvbmUoKS5ydW5PdXRzaWRlQW5ndWxhcigoKCk9PmpDKCkub25BbmRDYW5jZWwodCxvLmRvbUV2ZW50TmFtZSxpKSkpfXN0YXRpYyBwYXJzZUV2ZW50TmFtZSh0KXtjb25zdCBlPXQudG9Mb3dlckNhc2UoKS5zcGxpdCgiLiIpLG49ZS5zaGlmdCgpO2lmKDA9PT1lLmxlbmd0aHx8ImtleWRvd24iIT09biYmImtleXVwIiE9PW4pcmV0dXJuIG51bGw7Y29uc3Qgbz1reC5fbm9ybWFsaXplS2V5KGUucG9wKCkpO2xldCBpPSIiO2lmKHh4LmZvckVhY2goKHQ9Pntjb25zdCBuPWUuaW5kZXhPZih0KTtuPi0xJiYoZS5zcGxpY2UobiwxKSxpKz10KyIuIil9KSksaSs9bywwIT1lLmxlbmd0aHx8MD09PW8ubGVuZ3RoKXJldHVybiBudWxsO2NvbnN0IGE9e307cmV0dXJuIGEuZG9tRXZlbnROYW1lPW4sYS5mdWxsS2V5PWksYX1zdGF0aWMgZ2V0RXZlbnRGdWxsS2V5KHQpe2xldCBlPSIiLG49KGZ1bmN0aW9uIG8odCl7bGV0IGU9dC5rZXk7aWYobnVsbD09ZSl7aWYoZT10LmtleUlkZW50aWZpZXIsbnVsbD09ZSlyZXR1cm4iVW5pZGVudGlmaWVkIjtlLnN0YXJ0c1dpdGgoIlUrIikmJihlPVN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoZS5zdWJzdHJpbmcoMiksMTYpKSwzPT09dC5sb2NhdGlvbiYmUHguaGFzT3duUHJvcGVydHkoZSkmJihlPVB4W2VdKSl9cmV0dXJuIE94W2VdfHxlfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8pKHQpO3JldHVybiBuPW4udG9Mb3dlckNhc2UoKSwiICI9PT1uP249InNwYWNlIjoiLiI9PT1uJiYobj0iZG90IikseHguZm9yRWFjaCgobz0+e28hPW4mJigwLHd4W29dKSh0KSYmKGUrPW8rIi4iKX0pKSxlKz1uLGV9c3RhdGljIGV2ZW50Q2FsbGJhY2sodCxlLG4pe3JldHVybiBvPT57a3guZ2V0RXZlbnRGdWxsS2V5KG8pPT09dCYmbi5ydW5HdWFyZGVkKCgoKT0+ZShvKSkpfX1zdGF0aWMgX25vcm1hbGl6ZUtleSh0KXtzd2l0Y2godCl7Y2FzZSJlc2MiOnJldHVybiJlc2NhcGUiO2RlZmF1bHQ6cmV0dXJuIHR9fX1reC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8a3gpKHVzKFVDKSl9LGt4Lsm1cHJvdj1sbyh7dG9rZW46a3gsZmFjdG9yeTpreC7JtWZhY30pLGt4LmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W1VDXX1dfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihreCxbe3R5cGU6Sm19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W1VDXX1dfV19KSxudWxsKTtjbGFzcyBTeHt9ZnVuY3Rpb24gRHgodCl7cmV0dXJuIG5ldyBFeCh0LmdldChVQykpfVN4Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxTeCl9LFN4Lsm1cHJvdj1sbyh7ZmFjdG9yeTpmdW5jdGlvbiB0KCl7cmV0dXJuIHVzKEV4KX0sdG9rZW46U3gscHJvdmlkZWRJbjoicm9vdCJ9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFN4LFt7dHlwZTpKbSxhcmdzOlt7cHJvdmlkZWRJbjoicm9vdCIsdXNlRXhpc3Rpbmc6SW4oKCgpPT5FeCkpfV19XSxudWxsLG51bGwpO2NsYXNzIEV4IGV4dGVuZHMgU3h7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLl9kb2M9dH1zYW5pdGl6ZSh0LGUpe2lmKG51bGw9PWUpcmV0dXJuIG51bGw7c3dpdGNoKHQpe2Nhc2UgeGwuTk9ORTpyZXR1cm4gZTtjYXNlIHhsLkhUTUw6cmV0dXJuIFlzKGUsIkhUTUwiKT9HcyhlKTpNbCh0aGlzLl9kb2MsU3RyaW5nKGUpKS50b1N0cmluZygpO2Nhc2UgeGwuU1RZTEU6cmV0dXJuIFlzKGUsIlN0eWxlIik/R3MoZSk6ZTtjYXNlIHhsLlNDUklQVDppZihZcyhlLCJTY3JpcHQiKSlyZXR1cm4gR3MoZSk7dGhyb3cgbmV3IEVycm9yKCJ1bnNhZmUgdmFsdWUgdXNlZCBpbiBhIHNjcmlwdCBjb250ZXh0Iik7Y2FzZSB4bC5VUkw6cmV0dXJuIHFzKGUpLFlzKGUsIlVSTCIpP0dzKGUpOiRzKFN0cmluZyhlKSk7Y2FzZSB4bC5SRVNPVVJDRV9VUkw6aWYoWXMoZSwiUmVzb3VyY2VVUkwiKSlyZXR1cm4gR3MoZSk7dGhyb3cgbmV3IEVycm9yKCJ1bnNhZmUgdmFsdWUgdXNlZCBpbiBhIHJlc291cmNlIFVSTCBjb250ZXh0IChzZWUgaHR0cHM6Ly9nLmNvL25nL3NlY3VyaXR5I3hzcykiKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCBTZWN1cml0eUNvbnRleHQgJHt0fSAoc2VlIGh0dHBzOi8vZy5jby9uZy9zZWN1cml0eSN4c3MpYCl9fWJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKHQpe3JldHVybihmdW5jdGlvbiBlKHQpe3JldHVybiBuZXcgQnModCl9KSh0KX1ieXBhc3NTZWN1cml0eVRydXN0U3R5bGUodCl7cmV0dXJuKGZ1bmN0aW9uIGUodCl7cmV0dXJuIG5ldyBWcyh0KX0pKHQpfWJ5cGFzc1NlY3VyaXR5VHJ1c3RTY3JpcHQodCl7cmV0dXJuKGZ1bmN0aW9uIGUodCl7cmV0dXJuIG5ldyBqcyh0KX0pKHQpfWJ5cGFzc1NlY3VyaXR5VHJ1c3RVcmwodCl7cmV0dXJuKGZ1bmN0aW9uIGUodCl7cmV0dXJuIG5ldyBVcyh0KX0pKHQpfWJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybCh0KXtyZXR1cm4oZnVuY3Rpb24gZSh0KXtyZXR1cm4gbmV3IFdzKHQpfSkodCl9fUV4Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxFeCkodXMoVUMpKX0sRXguybVwcm92PWxvKHtmYWN0b3J5OmZ1bmN0aW9uIHQoKXtyZXR1cm4gRHgodXMoSXApKX0sdG9rZW46RXgscHJvdmlkZWRJbjoicm9vdCJ9KSxFeC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltVQ119XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoRXgsW3t0eXBlOkptLGFyZ3M6W3twcm92aWRlZEluOiJyb290Iix1c2VGYWN0b3J5OkR4LGRlcHM6W1FwXX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltVQ119XX1dfSksbnVsbCk7Y29uc3QgQXg9Z0Mod0MsImJyb3dzZXIiLFt7cHJvdmlkZTpIXyx1c2VWYWx1ZToiYnJvd3NlciJ9LHtwcm92aWRlOnpfLHVzZVZhbHVlOgovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KZnVuY3Rpb24gUngoKXtXdi5tYWtlQ3VycmVudCgpLEt2LmluaXQoKX0sbXVsdGk6ITB9LHtwcm92aWRlOlVDLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gVHgoKXtyZXR1cm4oZnVuY3Rpb24gdChlKXtGaT1lfSkoZG9jdW1lbnQpLGRvY3VtZW50fSxkZXBzOltdfV0pLE54PVtbXSx7cHJvdmlkZTpIcCx1c2VWYWx1ZToicm9vdCJ9LHtwcm92aWRlOkVsLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gSXgoKXtyZXR1cm4gbmV3IEVsfSxkZXBzOltdfSx7cHJvdmlkZTpKdix1c2VDbGFzczpneCxtdWx0aTohMCxkZXBzOltVQyx0QyxIX119LHtwcm92aWRlOkp2LHVzZUNsYXNzOmt4LG11bHRpOiEwLGRlcHM6W1VDXX0sW10se3Byb3ZpZGU6Y3gsdXNlQ2xhc3M6Y3gsZGVwczpbUXYsZXgsUl9dfSx7cHJvdmlkZTptaCx1c2VFeGlzdGluZzpjeH0se3Byb3ZpZGU6dHgsdXNlRXhpc3Rpbmc6ZXh9LHtwcm92aWRlOmV4LHVzZUNsYXNzOmV4LGRlcHM6W1VDXX0se3Byb3ZpZGU6c0MsdXNlQ2xhc3M6c0MsZGVwczpbdENdfSx7cHJvdmlkZTpRdix1c2VDbGFzczpRdixkZXBzOltKdix0Q119LFtdXTtjbGFzcyB6eHtjb25zdHJ1Y3Rvcih0KXtpZih0KXRocm93IG5ldyBFcnJvcigiQnJvd3Nlck1vZHVsZSBoYXMgYWxyZWFkeSBiZWVuIGxvYWRlZC4gSWYgeW91IG5lZWQgYWNjZXNzIHRvIGNvbW1vbiBkaXJlY3RpdmVzIHN1Y2ggYXMgTmdJZiBhbmQgTmdGb3IgZnJvbSBhIGxhenkgbG9hZGVkIG1vZHVsZSwgaW1wb3J0IENvbW1vbk1vZHVsZSBpbnN0ZWFkLiIpfXN0YXRpYyB3aXRoU2VydmVyVHJhbnNpdGlvbih0KXtyZXR1cm57bmdNb2R1bGU6engscHJvdmlkZXJzOlt7cHJvdmlkZTpSXyx1c2VWYWx1ZTp0LmFwcElkfSx7cHJvdmlkZTpxdix1c2VFeGlzdGluZzpSX30sWnZdfX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpmdW5jdGlvbiBIeCgpe3JldHVybiBuZXcgRngodXMoVUMpKX16eC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8engpKHVzKHp4LDEyKSl9LHp4Lsm1bW9kPVpvKHt0eXBlOnp4fSksenguybVpbmo9Y28oe3Byb3ZpZGVyczpOeCxpbXBvcnRzOltCdixSQ119KSx6eC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOnp4LGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTpNc30se3R5cGU6eXMsYXJnczpbenhdfV19XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKHp4LHtleHBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW0J2LFJDXX19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHp4LFt7dHlwZTprXyxhcmdzOlt7cHJvdmlkZXJzOk54LGV4cG9ydHM6W0J2LFJDXX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOnp4LGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTpNc30se3R5cGU6eXMsYXJnczpbenhdfV19XX0pLG51bGwpO2NsYXNzIEZ4e2NvbnN0cnVjdG9yKHQpe3RoaXMuX2RvYz10LHRoaXMuX2RvbT1qQygpfWFkZFRhZyh0LGU9ITEpe3JldHVybiB0P3RoaXMuX2dldE9yQ3JlYXRlRWxlbWVudCh0LGUpOm51bGx9YWRkVGFncyh0LGU9ITEpe3JldHVybiB0P3QucmVkdWNlKCgodCxuKT0+KG4mJnQucHVzaCh0aGlzLl9nZXRPckNyZWF0ZUVsZW1lbnQobixlKSksdCkpLFtdKTpbXX1nZXRUYWcodCl7cmV0dXJuIHQmJnRoaXMuX2RvYy5xdWVyeVNlbGVjdG9yKGBtZXRhWyR7dH1dYCl8fG51bGx9Z2V0VGFncyh0KXtpZighdClyZXR1cm5bXTtjb25zdCBlPXRoaXMuX2RvYy5xdWVyeVNlbGVjdG9yQWxsKGBtZXRhWyR7dH1dYCk7cmV0dXJuIGU/W10uc2xpY2UuY2FsbChlKTpbXX11cGRhdGVUYWcodCxlKXtpZighdClyZXR1cm4gbnVsbDtlPWV8fHRoaXMuX3BhcnNlU2VsZWN0b3IodCk7Y29uc3Qgbj10aGlzLmdldFRhZyhlKTtyZXR1cm4gbj90aGlzLl9zZXRNZXRhRWxlbWVudEF0dHJpYnV0ZXModCxuKTp0aGlzLl9nZXRPckNyZWF0ZUVsZW1lbnQodCwhMCl9cmVtb3ZlVGFnKHQpe3RoaXMucmVtb3ZlVGFnRWxlbWVudCh0aGlzLmdldFRhZyh0KSl9cmVtb3ZlVGFnRWxlbWVudCh0KXt0JiZ0aGlzLl9kb20ucmVtb3ZlKHQpfV9nZXRPckNyZWF0ZUVsZW1lbnQodCxlPSExKXtpZighZSl7Y29uc3QgZT10aGlzLl9wYXJzZVNlbGVjdG9yKHQpLG49dGhpcy5nZXRUYWcoZSk7aWYobiYmdGhpcy5fY29udGFpbnNBdHRyaWJ1dGVzKHQsbikpcmV0dXJuIG59Y29uc3Qgbj10aGlzLl9kb20uY3JlYXRlRWxlbWVudCgibWV0YSIpO3JldHVybiB0aGlzLl9zZXRNZXRhRWxlbWVudEF0dHJpYnV0ZXModCxuKSx0aGlzLl9kb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXS5hcHBlbmRDaGlsZChuKSxufV9zZXRNZXRhRWxlbWVudEF0dHJpYnV0ZXModCxlKXtyZXR1cm4gT2JqZWN0LmtleXModCkuZm9yRWFjaCgobj0+ZS5zZXRBdHRyaWJ1dGUodGhpcy5fZ2V0TWV0YUtleU1hcChuKSx0W25dKSkpLGV9X3BhcnNlU2VsZWN0b3IodCl7Y29uc3QgZT10Lm5hbWU/Im5hbWUiOiJwcm9wZXJ0eSI7cmV0dXJuYCR7ZX09IiR7dFtlXX0iYH1fY29udGFpbnNBdHRyaWJ1dGVzKHQsZSl7cmV0dXJuIE9iamVjdC5rZXlzKHQpLmV2ZXJ5KChuPT5lLmdldEF0dHJpYnV0ZSh0aGlzLl9nZXRNZXRhS2V5TWFwKG4pKT09PXRbbl0pKX1fZ2V0TWV0YUtleU1hcCh0KXtyZXR1cm4gTHhbdF18fHR9fUZ4Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxGeCkodXMoVUMpKX0sRnguybVwcm92PWxvKHtmYWN0b3J5Okh4LHRva2VuOkZ4LHByb3ZpZGVkSW46InJvb3QifSksRnguY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbVUNdfV19XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEZ4LFt7dHlwZTpKbSxhcmdzOlt7cHJvdmlkZWRJbjoicm9vdCIsdXNlRmFjdG9yeTpIeCxkZXBzOltdfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W1VDXX1dfV19KSxudWxsKTtjb25zdCBMeD17aHR0cEVxdWl2OiJodHRwLWVxdWl2In07Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIEJ4KCl7cmV0dXJuIG5ldyBWeCh1cyhVQykpfWNsYXNzIFZ4e2NvbnN0cnVjdG9yKHQpe3RoaXMuX2RvYz10fWdldFRpdGxlKCl7cmV0dXJuIHRoaXMuX2RvYy50aXRsZX1zZXRUaXRsZSh0KXt0aGlzLl9kb2MudGl0bGU9dHx8IiJ9fVZ4Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxWeCkodXMoVUMpKX0sVnguybVwcm92PWxvKHtmYWN0b3J5OkJ4LHRva2VuOlZ4LHByb3ZpZGVkSW46InJvb3QifSksVnguY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbVUNdfV19XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFZ4LFt7dHlwZTpKbSxhcmdzOlt7cHJvdmlkZWRJbjoicm9vdCIsdXNlRmFjdG9yeTpCeCxkZXBzOltdfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W1VDXX1dfV19KSxudWxsKTtjbGFzcyBqeHtjb25zdHJ1Y3Rvcigpe3RoaXMuc3RvcmU9e30sdGhpcy5vblNlcmlhbGl6ZUNhbGxiYWNrcz17fX1zdGF0aWMgaW5pdCh0KXtjb25zdCBlPW5ldyBqeDtyZXR1cm4gZS5zdG9yZT10LGV9Z2V0KHQsZSl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuc3RvcmVbdF0/dGhpcy5zdG9yZVt0XTplfXNldCh0LGUpe3RoaXMuc3RvcmVbdF09ZX1yZW1vdmUodCl7ZGVsZXRlIHRoaXMuc3RvcmVbdF19aGFzS2V5KHQpe3JldHVybiB0aGlzLnN0b3JlLmhhc093blByb3BlcnR5KHQpfW9uU2VyaWFsaXplKHQsZSl7dGhpcy5vblNlcmlhbGl6ZUNhbGxiYWNrc1t0XT1lfXRvSnNvbigpe2Zvcihjb25zdCB0IGluIHRoaXMub25TZXJpYWxpemVDYWxsYmFja3MpaWYodGhpcy5vblNlcmlhbGl6ZUNhbGxiYWNrcy5oYXNPd25Qcm9wZXJ0eSh0KSl0cnl7dGhpcy5zdG9yZVt0XT10aGlzLm9uU2VyaWFsaXplQ2FsbGJhY2tzW3RdKCl9Y2F0Y2godCl7Y29uc29sZS53YXJuKCJFeGNlcHRpb24gaW4gb25TZXJpYWxpemUgY2FsbGJhY2s6ICIsdCl9cmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMuc3RvcmUpfX1mdW5jdGlvbiBVeCh0LGUpe2NvbnN0IG49dC5nZXRFbGVtZW50QnlJZChlKyItc3RhdGUiKTtsZXQgbz17fTtpZihuJiZuLnRleHRDb250ZW50KXRyeXtvPUpTT04ucGFyc2UoKGZ1bmN0aW9uIGkodCl7Y29uc3QgZT17IiZhOyI6IiYiLCImcTsiOiciJywiJnM7IjoiJyIsIiZsOyI6IjwiLCImZzsiOiI+In07cmV0dXJuIHQucmVwbGFjZSgvJlteO10rOy9nLCh0PT5lW3RdKSl9KShuLnRleHRDb250ZW50KSl9Y2F0Y2godCl7Y29uc29sZS53YXJuKCJFeGNlcHRpb24gd2hpbGUgcmVzdG9yaW5nIFRyYW5zZmVyU3RhdGUgZm9yIGFwcCAiK2UsdCl9cmV0dXJuIGp4LmluaXQobyl9anguybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGp4KX0sanguybVwcm92PWxvKHt0b2tlbjpqeCxmYWN0b3J5Omp4Lsm1ZmFjfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihqeCxbe3R5cGU6Sm19XSwoZnVuY3Rpb24oKXtyZXR1cm5bXX0pLG51bGwpO2NsYXNzIFd4e31XeC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8V3gpfSxXeC7JtW1vZD1abyh7dHlwZTpXeH0pLFd4Lsm1aW5qPWNvKHtwcm92aWRlcnM6W3twcm92aWRlOmp4LHVzZUZhY3Rvcnk6VXgsZGVwczpbVUMsUl9dfV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFd4LFt7dHlwZTprXyxhcmdzOlt7cHJvdmlkZXJzOlt7cHJvdmlkZTpqeCx1c2VGYWN0b3J5OlV4LGRlcHM6W1VDLFJfXX1dfV19XSxudWxsLG51bGwpLAovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCm5ldyBiaCgiMTEuMi4xNCIpO3ZhciBHeD0idW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOnt9O2Z1bmN0aW9uIFl4KHQsZSxuKXtyZXR1cm4gdChuPXtwYXRoOmUsZXhwb3J0czp7fSxyZXF1aXJlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuKGZ1bmN0aW9uIG4oKXt0aHJvdyBuZXcgRXJyb3IoIkR5bmFtaWMgcmVxdWlyZXMgYXJlIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkIGJ5IEByb2xsdXAvcGx1Z2luLWNvbW1vbmpzIil9Ci8qKgogICAgKiBAbGljZW5zZSBBbmd1bGFyIHY5LjEuMC1uZXh0LjQrNjEuc2hhLWU1NTI1OTEud2l0aC1sb2NhbC1jaGFuZ2VzCiAgICAqIChjKSAyMDEwLTIwMjAgR29vZ2xlIExMQy4gaHR0cHM6Ly9hbmd1bGFyLmlvLwogICAgKiBMaWNlbnNlOiBNSVQKICAgICovKSgpfX0sbi5leHBvcnRzKSxuLmV4cG9ydHN9ZnVuY3Rpb24gcXgodCl7aWYodC5fX2VzTW9kdWxlKXJldHVybiB0O3ZhciBlPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7cmV0dXJuIE9iamVjdC5rZXlzKHQpLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLG8uZ2V0P286e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSl9KSksZX0hKGZ1bmN0aW9uKCl7Ci8qKgogICAgICAgICAqIEBsaWNlbnNlCiAgICAgICAgICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgICAgICoKICAgICAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAgICAgKi8KKGZ1bmN0aW9uKHQpe3ZhciBlPXQucGVyZm9ybWFuY2U7ZnVuY3Rpb24gbih0KXtlJiZlLm1hcmsmJmUubWFyayh0KX1mdW5jdGlvbiBvKHQsbil7ZSYmZS5tZWFzdXJlJiZlLm1lYXN1cmUodCxuKX1uKCJab25lIik7dmFyIGk9dC5fX1pvbmVfc3ltYm9sX3ByZWZpeHx8Il9fem9uZV9zeW1ib2xfXyI7ZnVuY3Rpb24gYSh0KXtyZXR1cm4gaSt0fXZhciByPSEwPT09dFthKCJmb3JjZUR1cGxpY2F0ZVpvbmVDaGVjayIpXTtpZih0LlpvbmUpe2lmKHJ8fCJmdW5jdGlvbiIhPXR5cGVvZiB0LlpvbmUuX19zeW1ib2xfXyl0aHJvdyBuZXcgRXJyb3IoIlpvbmUgYWxyZWFkeSBsb2FkZWQuIik7cmV0dXJuIHQuWm9uZX12YXIgcz0oZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQsZSl7dGhpcy5fcGFyZW50PXQsdGhpcy5fbmFtZT1lP2UubmFtZXx8InVubmFtZWQiOiI8cm9vdD4iLHRoaXMuX3Byb3BlcnRpZXM9ZSYmZS5wcm9wZXJ0aWVzfHx7fSx0aGlzLl96b25lRGVsZWdhdGU9bmV3IGQodGhpcyx0aGlzLl9wYXJlbnQmJnRoaXMuX3BhcmVudC5fem9uZURlbGVnYXRlLGUpfXJldHVybiBlLmFzc2VydFpvbmVQYXRjaGVkPWZ1bmN0aW9uKCl7aWYodC5Qcm9taXNlIT09RC5ab25lQXdhcmVQcm9taXNlKXRocm93IG5ldyBFcnJvcigiWm9uZS5qcyBoYXMgZGV0ZWN0ZWQgdGhhdCBab25lQXdhcmVQcm9taXNlIGAod2luZG93fGdsb2JhbCkuUHJvbWlzZWAgaGFzIGJlZW4gb3ZlcndyaXR0ZW4uXG5Nb3N0IGxpa2VseSBjYXVzZSBpcyB0aGF0IGEgUHJvbWlzZSBwb2x5ZmlsbCBoYXMgYmVlbiBsb2FkZWQgYWZ0ZXIgWm9uZS5qcyAoUG9seWZpbGxpbmcgUHJvbWlzZSBhcGkgaXMgbm90IG5lY2Vzc2FyeSB3aGVuIHpvbmUuanMgaXMgbG9hZGVkLiBJZiB5b3UgbXVzdCBsb2FkIG9uZSwgZG8gc28gYmVmb3JlIGxvYWRpbmcgem9uZS5qcy4pIil9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJyb290Iix7Z2V0OmZ1bmN0aW9uKCl7Zm9yKHZhciB0PWUuY3VycmVudDt0LnBhcmVudDspdD10LnBhcmVudDtyZXR1cm4gdH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiY3VycmVudCIse2dldDpmdW5jdGlvbigpe3JldHVybiBBLnpvbmV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImN1cnJlbnRUYXNrIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFJ9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5fX2xvYWRfcGF0Y2g9ZnVuY3Rpb24oaSxhKXtpZihELmhhc093blByb3BlcnR5KGkpKXtpZihyKXRocm93IEVycm9yKCJBbHJlYWR5IGxvYWRlZCBwYXRjaDogIitpKX1lbHNlIGlmKCF0WyJfX1pvbmVfZGlzYWJsZV8iK2ldKXt2YXIgcz0iWm9uZToiK2k7bihzKSxEW2ldPWEodCxlLEUpLG8ocyxzKX19LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwicGFyZW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhcmVudH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsIm5hbWUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbmFtZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nZXRab25lV2l0aCh0KTtpZihlKXJldHVybiBlLl9wcm9wZXJ0aWVzW3RdfSxlLnByb3RvdHlwZS5nZXRab25lV2l0aD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcztlOyl7aWYoZS5fcHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eSh0KSlyZXR1cm4gZTtlPWUuX3BhcmVudH1yZXR1cm4gbnVsbH0sZS5wcm90b3R5cGUuZm9yaz1mdW5jdGlvbih0KXtpZighdCl0aHJvdyBuZXcgRXJyb3IoIlpvbmVTcGVjIHJlcXVpcmVkISIpO3JldHVybiB0aGlzLl96b25lRGVsZWdhdGUuZm9yayh0aGlzLHQpfSxlLnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKHQsZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RpbmcgZnVuY3Rpb24gZ290OiAiK3QpO3ZhciBuPXRoaXMuX3pvbmVEZWxlZ2F0ZS5pbnRlcmNlcHQodGhpcyx0LGUpLG89dGhpcztyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gby5ydW5HdWFyZGVkKG4sdGhpcyxhcmd1bWVudHMsZSl9fSxlLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24odCxlLG4sbyl7QT17cGFyZW50OkEsem9uZTp0aGlzfTt0cnl7cmV0dXJuIHRoaXMuX3pvbmVEZWxlZ2F0ZS5pbnZva2UodGhpcyx0LGUsbixvKX1maW5hbGx5e0E9QS5wYXJlbnR9fSxlLnByb3RvdHlwZS5ydW5HdWFyZGVkPWZ1bmN0aW9uKHQsZSxuLG8pe3ZvaWQgMD09PWUmJihlPW51bGwpLEE9e3BhcmVudDpBLHpvbmU6dGhpc307dHJ5e3RyeXtyZXR1cm4gdGhpcy5fem9uZURlbGVnYXRlLmludm9rZSh0aGlzLHQsZSxuLG8pfWNhdGNoKHQpe2lmKHRoaXMuX3pvbmVEZWxlZ2F0ZS5oYW5kbGVFcnJvcih0aGlzLHQpKXRocm93IHR9fWZpbmFsbHl7QT1BLnBhcmVudH19LGUucHJvdG90eXBlLnJ1blRhc2s9ZnVuY3Rpb24odCxlLG4pe2lmKHQuem9uZSE9dGhpcyl0aHJvdyBuZXcgRXJyb3IoIkEgdGFzayBjYW4gb25seSBiZSBydW4gaW4gdGhlIHpvbmUgb2YgY3JlYXRpb24hIChDcmVhdGlvbjogIisodC56b25lfHxfKS5uYW1lKyI7IEV4ZWN1dGlvbjogIit0aGlzLm5hbWUrIikiKTtpZih0LnN0YXRlIT09Q3x8dC50eXBlIT09UyYmdC50eXBlIT09ayl7dmFyIG89dC5zdGF0ZSE9eDtvJiZ0Ll90cmFuc2l0aW9uVG8oeCx2KSx0LnJ1bkNvdW50Kys7dmFyIGk9UjtSPXQsQT17cGFyZW50OkEsem9uZTp0aGlzfTt0cnl7dC50eXBlPT1rJiZ0LmRhdGEmJiF0LmRhdGEuaXNQZXJpb2RpYyYmKHQuY2FuY2VsRm49dm9pZCAwKTt0cnl7cmV0dXJuIHRoaXMuX3pvbmVEZWxlZ2F0ZS5pbnZva2VUYXNrKHRoaXMsdCxlLG4pfWNhdGNoKHQpe2lmKHRoaXMuX3pvbmVEZWxlZ2F0ZS5oYW5kbGVFcnJvcih0aGlzLHQpKXRocm93IHR9fWZpbmFsbHl7dC5zdGF0ZSE9PUMmJnQuc3RhdGUhPT1QJiYodC50eXBlPT1TfHx0LmRhdGEmJnQuZGF0YS5pc1BlcmlvZGljP28mJnQuX3RyYW5zaXRpb25Ubyh2LHgpOih0LnJ1bkNvdW50PTAsdGhpcy5fdXBkYXRlVGFza0NvdW50KHQsLTEpLG8mJnQuX3RyYW5zaXRpb25UbyhDLHgsQykpKSxBPUEucGFyZW50LFI9aX19fSxlLnByb3RvdHlwZS5zY2hlZHVsZVRhc2s9ZnVuY3Rpb24odCl7aWYodC56b25lJiZ0LnpvbmUhPT10aGlzKWZvcih2YXIgZT10aGlzO2U7KXtpZihlPT09dC56b25lKXRocm93IEVycm9yKCJjYW4gbm90IHJlc2NoZWR1bGUgdGFzayB0byAiK3RoaXMubmFtZSsiIHdoaWNoIGlzIGRlc2NlbmRhbnRzIG9mIHRoZSBvcmlnaW5hbCB6b25lICIrdC56b25lLm5hbWUpO2U9ZS5wYXJlbnR9dC5fdHJhbnNpdGlvblRvKE0sQyk7dmFyIG49W107dC5fem9uZURlbGVnYXRlcz1uLHQuX3pvbmU9dGhpczt0cnl7dD10aGlzLl96b25lRGVsZWdhdGUuc2NoZWR1bGVUYXNrKHRoaXMsdCl9Y2F0Y2goZSl7dGhyb3cgdC5fdHJhbnNpdGlvblRvKFAsTSxDKSx0aGlzLl96b25lRGVsZWdhdGUuaGFuZGxlRXJyb3IodGhpcyxlKSxlfXJldHVybiB0Ll96b25lRGVsZWdhdGVzPT09biYmdGhpcy5fdXBkYXRlVGFza0NvdW50KHQsMSksdC5zdGF0ZT09TSYmdC5fdHJhbnNpdGlvblRvKHYsTSksdH0sZS5wcm90b3R5cGUuc2NoZWR1bGVNaWNyb1Rhc2s9ZnVuY3Rpb24odCxlLG4sbyl7cmV0dXJuIHRoaXMuc2NoZWR1bGVUYXNrKG5ldyBwKHcsdCxlLG4sbyx2b2lkIDApKX0sZS5wcm90b3R5cGUuc2NoZWR1bGVNYWNyb1Rhc2s9ZnVuY3Rpb24odCxlLG4sbyxpKXtyZXR1cm4gdGhpcy5zY2hlZHVsZVRhc2sobmV3IHAoayx0LGUsbixvLGkpKX0sZS5wcm90b3R5cGUuc2NoZWR1bGVFdmVudFRhc2s9ZnVuY3Rpb24odCxlLG4sbyxpKXtyZXR1cm4gdGhpcy5zY2hlZHVsZVRhc2sobmV3IHAoUyx0LGUsbixvLGkpKX0sZS5wcm90b3R5cGUuY2FuY2VsVGFzaz1mdW5jdGlvbih0KXtpZih0LnpvbmUhPXRoaXMpdGhyb3cgbmV3IEVycm9yKCJBIHRhc2sgY2FuIG9ubHkgYmUgY2FuY2VsbGVkIGluIHRoZSB6b25lIG9mIGNyZWF0aW9uISAoQ3JlYXRpb246ICIrKHQuem9uZXx8XykubmFtZSsiOyBFeGVjdXRpb246ICIrdGhpcy5uYW1lKyIpIik7dC5fdHJhbnNpdGlvblRvKE8sdix4KTt0cnl7dGhpcy5fem9uZURlbGVnYXRlLmNhbmNlbFRhc2sodGhpcyx0KX1jYXRjaChlKXt0aHJvdyB0Ll90cmFuc2l0aW9uVG8oUCxPKSx0aGlzLl96b25lRGVsZWdhdGUuaGFuZGxlRXJyb3IodGhpcyxlKSxlfXJldHVybiB0aGlzLl91cGRhdGVUYXNrQ291bnQodCwtMSksdC5fdHJhbnNpdGlvblRvKEMsTyksdC5ydW5Db3VudD0wLHR9LGUucHJvdG90eXBlLl91cGRhdGVUYXNrQ291bnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10Ll96b25lRGVsZWdhdGVzOy0xPT1lJiYodC5fem9uZURlbGVnYXRlcz1udWxsKTtmb3IodmFyIG89MDtvPG4ubGVuZ3RoO28rKyluW29dLl91cGRhdGVUYXNrQ291bnQodC50eXBlLGUpfSxlfSkoKTtzLl9fc3ltYm9sX189YTt2YXIgbCxjPXtuYW1lOiIiLG9uSGFzVGFzazpmdW5jdGlvbih0LGUsbixvKXtyZXR1cm4gdC5oYXNUYXNrKG4sbyl9LG9uU2NoZWR1bGVUYXNrOmZ1bmN0aW9uKHQsZSxuLG8pe3JldHVybiB0LnNjaGVkdWxlVGFzayhuLG8pfSxvbkludm9rZVRhc2s6ZnVuY3Rpb24odCxlLG4sbyxpLGEpe3JldHVybiB0Lmludm9rZVRhc2sobixvLGksYSl9LG9uQ2FuY2VsVGFzazpmdW5jdGlvbih0LGUsbixvKXtyZXR1cm4gdC5jYW5jZWxUYXNrKG4sbyl9fSxkPShmdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuX3Rhc2tDb3VudHM9e21pY3JvVGFzazowLG1hY3JvVGFzazowLGV2ZW50VGFzazowfSx0aGlzLnpvbmU9dCx0aGlzLl9wYXJlbnREZWxlZ2F0ZT1lLHRoaXMuX2ZvcmtaUz1uJiYobiYmbi5vbkZvcms/bjplLl9mb3JrWlMpLHRoaXMuX2ZvcmtEbGd0PW4mJihuLm9uRm9yaz9lOmUuX2ZvcmtEbGd0KSx0aGlzLl9mb3JrQ3VyclpvbmU9biYmKG4ub25Gb3JrP3RoaXMuem9uZTplLl9mb3JrQ3VyclpvbmUpLHRoaXMuX2ludGVyY2VwdFpTPW4mJihuLm9uSW50ZXJjZXB0P246ZS5faW50ZXJjZXB0WlMpLHRoaXMuX2ludGVyY2VwdERsZ3Q9biYmKG4ub25JbnRlcmNlcHQ/ZTplLl9pbnRlcmNlcHREbGd0KSx0aGlzLl9pbnRlcmNlcHRDdXJyWm9uZT1uJiYobi5vbkludGVyY2VwdD90aGlzLnpvbmU6ZS5faW50ZXJjZXB0Q3VyclpvbmUpLHRoaXMuX2ludm9rZVpTPW4mJihuLm9uSW52b2tlP246ZS5faW52b2tlWlMpLHRoaXMuX2ludm9rZURsZ3Q9biYmKG4ub25JbnZva2U/ZTplLl9pbnZva2VEbGd0KSx0aGlzLl9pbnZva2VDdXJyWm9uZT1uJiYobi5vbkludm9rZT90aGlzLnpvbmU6ZS5faW52b2tlQ3VyclpvbmUpLHRoaXMuX2hhbmRsZUVycm9yWlM9biYmKG4ub25IYW5kbGVFcnJvcj9uOmUuX2hhbmRsZUVycm9yWlMpLHRoaXMuX2hhbmRsZUVycm9yRGxndD1uJiYobi5vbkhhbmRsZUVycm9yP2U6ZS5faGFuZGxlRXJyb3JEbGd0KSx0aGlzLl9oYW5kbGVFcnJvckN1cnJab25lPW4mJihuLm9uSGFuZGxlRXJyb3I/dGhpcy56b25lOmUuX2hhbmRsZUVycm9yQ3VyclpvbmUpLHRoaXMuX3NjaGVkdWxlVGFza1pTPW4mJihuLm9uU2NoZWR1bGVUYXNrP246ZS5fc2NoZWR1bGVUYXNrWlMpLHRoaXMuX3NjaGVkdWxlVGFza0RsZ3Q9biYmKG4ub25TY2hlZHVsZVRhc2s/ZTplLl9zY2hlZHVsZVRhc2tEbGd0KSx0aGlzLl9zY2hlZHVsZVRhc2tDdXJyWm9uZT1uJiYobi5vblNjaGVkdWxlVGFzaz90aGlzLnpvbmU6ZS5fc2NoZWR1bGVUYXNrQ3VyclpvbmUpLHRoaXMuX2ludm9rZVRhc2taUz1uJiYobi5vbkludm9rZVRhc2s/bjplLl9pbnZva2VUYXNrWlMpLHRoaXMuX2ludm9rZVRhc2tEbGd0PW4mJihuLm9uSW52b2tlVGFzaz9lOmUuX2ludm9rZVRhc2tEbGd0KSx0aGlzLl9pbnZva2VUYXNrQ3VyclpvbmU9biYmKG4ub25JbnZva2VUYXNrP3RoaXMuem9uZTplLl9pbnZva2VUYXNrQ3VyclpvbmUpLHRoaXMuX2NhbmNlbFRhc2taUz1uJiYobi5vbkNhbmNlbFRhc2s/bjplLl9jYW5jZWxUYXNrWlMpLHRoaXMuX2NhbmNlbFRhc2tEbGd0PW4mJihuLm9uQ2FuY2VsVGFzaz9lOmUuX2NhbmNlbFRhc2tEbGd0KSx0aGlzLl9jYW5jZWxUYXNrQ3VyclpvbmU9biYmKG4ub25DYW5jZWxUYXNrP3RoaXMuem9uZTplLl9jYW5jZWxUYXNrQ3VyclpvbmUpLHRoaXMuX2hhc1Rhc2taUz1udWxsLHRoaXMuX2hhc1Rhc2tEbGd0PW51bGwsdGhpcy5faGFzVGFza0RsZ3RPd25lcj1udWxsLHRoaXMuX2hhc1Rhc2tDdXJyWm9uZT1udWxsO3ZhciBvPW4mJm4ub25IYXNUYXNrOyhvfHxlJiZlLl9oYXNUYXNrWlMpJiYodGhpcy5faGFzVGFza1pTPW8/bjpjLHRoaXMuX2hhc1Rhc2tEbGd0PWUsdGhpcy5faGFzVGFza0RsZ3RPd25lcj10aGlzLHRoaXMuX2hhc1Rhc2tDdXJyWm9uZT10LG4ub25TY2hlZHVsZVRhc2t8fCh0aGlzLl9zY2hlZHVsZVRhc2taUz1jLHRoaXMuX3NjaGVkdWxlVGFza0RsZ3Q9ZSx0aGlzLl9zY2hlZHVsZVRhc2tDdXJyWm9uZT10aGlzLnpvbmUpLG4ub25JbnZva2VUYXNrfHwodGhpcy5faW52b2tlVGFza1pTPWMsdGhpcy5faW52b2tlVGFza0RsZ3Q9ZSx0aGlzLl9pbnZva2VUYXNrQ3VyclpvbmU9dGhpcy56b25lKSxuLm9uQ2FuY2VsVGFza3x8KHRoaXMuX2NhbmNlbFRhc2taUz1jLHRoaXMuX2NhbmNlbFRhc2tEbGd0PWUsdGhpcy5fY2FuY2VsVGFza0N1cnJab25lPXRoaXMuem9uZSkpfXJldHVybiB0LnByb3RvdHlwZS5mb3JrPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2ZvcmtaUz90aGlzLl9mb3JrWlMub25Gb3JrKHRoaXMuX2ZvcmtEbGd0LHRoaXMuem9uZSx0LGUpOm5ldyBzKHQsZSl9LHQucHJvdG90eXBlLmludGVyY2VwdD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHRoaXMuX2ludGVyY2VwdFpTP3RoaXMuX2ludGVyY2VwdFpTLm9uSW50ZXJjZXB0KHRoaXMuX2ludGVyY2VwdERsZ3QsdGhpcy5faW50ZXJjZXB0Q3VyclpvbmUsdCxlLG4pOmV9LHQucHJvdG90eXBlLmludm9rZT1mdW5jdGlvbih0LGUsbixvLGkpe3JldHVybiB0aGlzLl9pbnZva2VaUz90aGlzLl9pbnZva2VaUy5vbkludm9rZSh0aGlzLl9pbnZva2VEbGd0LHRoaXMuX2ludm9rZUN1cnJab25lLHQsZSxuLG8saSk6ZS5hcHBseShuLG8pfSx0LnByb3RvdHlwZS5oYW5kbGVFcnJvcj1mdW5jdGlvbih0LGUpe3JldHVybiF0aGlzLl9oYW5kbGVFcnJvclpTfHx0aGlzLl9oYW5kbGVFcnJvclpTLm9uSGFuZGxlRXJyb3IodGhpcy5faGFuZGxlRXJyb3JEbGd0LHRoaXMuX2hhbmRsZUVycm9yQ3VyclpvbmUsdCxlKX0sdC5wcm90b3R5cGUuc2NoZWR1bGVUYXNrPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZTtpZih0aGlzLl9zY2hlZHVsZVRhc2taUyl0aGlzLl9oYXNUYXNrWlMmJm4uX3pvbmVEZWxlZ2F0ZXMucHVzaCh0aGlzLl9oYXNUYXNrRGxndE93bmVyKSwobj10aGlzLl9zY2hlZHVsZVRhc2taUy5vblNjaGVkdWxlVGFzayh0aGlzLl9zY2hlZHVsZVRhc2tEbGd0LHRoaXMuX3NjaGVkdWxlVGFza0N1cnJab25lLHQsZSkpfHwobj1lKTtlbHNlIGlmKGUuc2NoZWR1bGVGbillLnNjaGVkdWxlRm4oZSk7ZWxzZXtpZihlLnR5cGUhPXcpdGhyb3cgbmV3IEVycm9yKCJUYXNrIGlzIG1pc3Npbmcgc2NoZWR1bGVGbi4iKTtiKGUpfXJldHVybiBufSx0LnByb3RvdHlwZS5pbnZva2VUYXNrPWZ1bmN0aW9uKHQsZSxuLG8pe3JldHVybiB0aGlzLl9pbnZva2VUYXNrWlM/dGhpcy5faW52b2tlVGFza1pTLm9uSW52b2tlVGFzayh0aGlzLl9pbnZva2VUYXNrRGxndCx0aGlzLl9pbnZva2VUYXNrQ3VyclpvbmUsdCxlLG4sbyk6ZS5jYWxsYmFjay5hcHBseShuLG8pfSx0LnByb3RvdHlwZS5jYW5jZWxUYXNrPWZ1bmN0aW9uKHQsZSl7dmFyIG47aWYodGhpcy5fY2FuY2VsVGFza1pTKW49dGhpcy5fY2FuY2VsVGFza1pTLm9uQ2FuY2VsVGFzayh0aGlzLl9jYW5jZWxUYXNrRGxndCx0aGlzLl9jYW5jZWxUYXNrQ3VyclpvbmUsdCxlKTtlbHNle2lmKCFlLmNhbmNlbEZuKXRocm93IEVycm9yKCJUYXNrIGlzIG5vdCBjYW5jZWxhYmxlIik7bj1lLmNhbmNlbEZuKGUpfXJldHVybiBufSx0LnByb3RvdHlwZS5oYXNUYXNrPWZ1bmN0aW9uKHQsZSl7dHJ5e3RoaXMuX2hhc1Rhc2taUyYmdGhpcy5faGFzVGFza1pTLm9uSGFzVGFzayh0aGlzLl9oYXNUYXNrRGxndCx0aGlzLl9oYXNUYXNrQ3VyclpvbmUsdCxlKX1jYXRjaChlKXt0aGlzLmhhbmRsZUVycm9yKHQsZSl9fSx0LnByb3RvdHlwZS5fdXBkYXRlVGFza0NvdW50PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fdGFza0NvdW50cyxvPW5bdF0saT1uW3RdPW8rZTtpZihpPDApdGhyb3cgbmV3IEVycm9yKCJNb3JlIHRhc2tzIGV4ZWN1dGVkIHRoZW4gd2VyZSBzY2hlZHVsZWQuIik7MCE9byYmMCE9aXx8dGhpcy5oYXNUYXNrKHRoaXMuem9uZSx7bWljcm9UYXNrOm4ubWljcm9UYXNrPjAsbWFjcm9UYXNrOm4ubWFjcm9UYXNrPjAsZXZlbnRUYXNrOm4uZXZlbnRUYXNrPjAsY2hhbmdlOnR9KX0sdH0pKCkscD0oZnVuY3Rpb24oKXtmdW5jdGlvbiBlKG4sbyxpLGEscixzKXtpZih0aGlzLl96b25lPW51bGwsdGhpcy5ydW5Db3VudD0wLHRoaXMuX3pvbmVEZWxlZ2F0ZXM9bnVsbCx0aGlzLl9zdGF0ZT0ibm90U2NoZWR1bGVkIix0aGlzLnR5cGU9bix0aGlzLnNvdXJjZT1vLHRoaXMuZGF0YT1hLHRoaXMuc2NoZWR1bGVGbj1yLHRoaXMuY2FuY2VsRm49cywhaSl0aHJvdyBuZXcgRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBkZWZpbmVkIik7dGhpcy5jYWxsYmFjaz1pO3ZhciBsPXRoaXM7dGhpcy5pbnZva2U9bj09PVMmJmEmJmEudXNlRz9lLmludm9rZVRhc2s6ZnVuY3Rpb24oKXtyZXR1cm4gZS5pbnZva2VUYXNrLmNhbGwodCxsLHRoaXMsYXJndW1lbnRzKX19cmV0dXJuIGUuaW52b2tlVGFzaz1mdW5jdGlvbih0LGUsbil7dHx8KHQ9dGhpcyksVCsrO3RyeXtyZXR1cm4gdC5ydW5Db3VudCsrLHQuem9uZS5ydW5UYXNrKHQsZSxuKX1maW5hbGx5ezE9PVQmJnkoKSxULS19fSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInpvbmUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fem9uZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInN0YXRlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YXRlfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLmNhbmNlbFNjaGVkdWxlUmVxdWVzdD1mdW5jdGlvbigpe3RoaXMuX3RyYW5zaXRpb25UbyhDLE0pfSxlLnByb3RvdHlwZS5fdHJhbnNpdGlvblRvPWZ1bmN0aW9uKHQsZSxuKXtpZih0aGlzLl9zdGF0ZSE9PWUmJnRoaXMuX3N0YXRlIT09bil0aHJvdyBuZXcgRXJyb3IodGhpcy50eXBlKyIgJyIrdGhpcy5zb3VyY2UrIic6IGNhbiBub3QgdHJhbnNpdGlvbiB0byAnIit0KyInLCBleHBlY3Rpbmcgc3RhdGUgJyIrZSsiJyIrKG4/IiBvciAnIituKyInIjoiIikrIiwgd2FzICciK3RoaXMuX3N0YXRlKyInLiIpO3RoaXMuX3N0YXRlPXQsdD09QyYmKHRoaXMuX3pvbmVEZWxlZ2F0ZXM9bnVsbCl9LGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YSYmdm9pZCAwIT09dGhpcy5kYXRhLmhhbmRsZUlkP3RoaXMuZGF0YS5oYW5kbGVJZC50b1N0cmluZygpOk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0aGlzKX0sZS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6dGhpcy50eXBlLHN0YXRlOnRoaXMuc3RhdGUsc291cmNlOnRoaXMuc291cmNlLHpvbmU6dGhpcy56b25lLm5hbWUscnVuQ291bnQ6dGhpcy5ydW5Db3VudH19LGV9KSgpLG09YSgic2V0VGltZW91dCIpLHU9YSgiUHJvbWlzZSIpLGY9YSgidGhlbiIpLGc9W10saD0hMTtmdW5jdGlvbiBiKGUpe2lmKDA9PT1UJiYwPT09Zy5sZW5ndGgpaWYobHx8dFt1XSYmKGw9dFt1XS5yZXNvbHZlKDApKSxsKXt2YXIgbj1sW2ZdO258fChuPWwudGhlbiksbi5jYWxsKGwseSl9ZWxzZSB0W21dKHksMCk7ZSYmZy5wdXNoKGUpfWZ1bmN0aW9uIHkoKXtpZighaCl7Zm9yKGg9ITA7Zy5sZW5ndGg7KXt2YXIgdD1nO2c9W107Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspe3ZhciBuPXRbZV07dHJ5e24uem9uZS5ydW5UYXNrKG4sbnVsbCxudWxsKX1jYXRjaCh0KXtFLm9uVW5oYW5kbGVkRXJyb3IodCl9fX1FLm1pY3JvdGFza0RyYWluRG9uZSgpLGg9ITF9fXZhciBfPXtuYW1lOiJOTyBaT05FIn0sQz0ibm90U2NoZWR1bGVkIixNPSJzY2hlZHVsaW5nIix2PSJzY2hlZHVsZWQiLHg9InJ1bm5pbmciLE89ImNhbmNlbGluZyIsUD0idW5rbm93biIsdz0ibWljcm9UYXNrIixrPSJtYWNyb1Rhc2siLFM9ImV2ZW50VGFzayIsRD17fSxFPXtzeW1ib2w6YSxjdXJyZW50Wm9uZUZyYW1lOmZ1bmN0aW9uKCl7cmV0dXJuIEF9LG9uVW5oYW5kbGVkRXJyb3I6TixtaWNyb3Rhc2tEcmFpbkRvbmU6TixzY2hlZHVsZU1pY3JvVGFzazpiLHNob3dVbmNhdWdodEVycm9yOmZ1bmN0aW9uKCl7cmV0dXJuIXNbYSgiaWdub3JlQ29uc29sZUVycm9yVW5jYXVnaHRFcnJvciIpXX0scGF0Y2hFdmVudFRhcmdldDpmdW5jdGlvbigpe3JldHVybltdfSxwYXRjaE9uUHJvcGVydGllczpOLHBhdGNoTWV0aG9kOmZ1bmN0aW9uKCl7cmV0dXJuIE59LGJpbmRBcmd1bWVudHM6ZnVuY3Rpb24oKXtyZXR1cm5bXX0scGF0Y2hUaGVuOmZ1bmN0aW9uKCl7cmV0dXJuIE59LHBhdGNoTWFjcm9UYXNrOmZ1bmN0aW9uKCl7cmV0dXJuIE59LHNldE5hdGl2ZVByb21pc2U6ZnVuY3Rpb24odCl7dCYmImZ1bmN0aW9uIj09dHlwZW9mIHQucmVzb2x2ZSYmKGw9dC5yZXNvbHZlKDApKX0scGF0Y2hFdmVudFByb3RvdHlwZTpmdW5jdGlvbigpe3JldHVybiBOfSxpc0lFT3JFZGdlOmZ1bmN0aW9uKCl7cmV0dXJuITF9LGdldEdsb2JhbE9iamVjdHM6ZnVuY3Rpb24oKXt9LE9iamVjdERlZmluZVByb3BlcnR5OmZ1bmN0aW9uKCl7cmV0dXJuIE59LE9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcjpmdW5jdGlvbigpe30sT2JqZWN0Q3JlYXRlOmZ1bmN0aW9uKCl7fSxBcnJheVNsaWNlOmZ1bmN0aW9uKCl7cmV0dXJuW119LHBhdGNoQ2xhc3M6ZnVuY3Rpb24oKXtyZXR1cm4gTn0sd3JhcFdpdGhDdXJyZW50Wm9uZTpmdW5jdGlvbigpe3JldHVybiBOfSxmaWx0ZXJQcm9wZXJ0aWVzOmZ1bmN0aW9uKCl7cmV0dXJuW119LGF0dGFjaE9yaWdpblRvUGF0Y2hlZDpmdW5jdGlvbigpe3JldHVybiBOfSxfcmVkZWZpbmVQcm9wZXJ0eTpmdW5jdGlvbigpe3JldHVybiBOfSxwYXRjaENhbGxiYWNrczpmdW5jdGlvbigpe3JldHVybiBOfX0sQT17cGFyZW50Om51bGwsem9uZTpuZXcgcyhudWxsLG51bGwpfSxSPW51bGwsVD0wO2Z1bmN0aW9uIE4oKXt9bygiWm9uZSIsIlpvbmUiKSx0LlpvbmU9c30pKCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3d8fCJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZiYmc2VsZnx8R3gpLAovKioKICAgICAgICAgKiBAbGljZW5zZQogICAgICAgICAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICAgICAqCiAgICAgICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgICAgICovClpvbmUuX19sb2FkX3BhdGNoKCJab25lQXdhcmVQcm9taXNlIiwoZnVuY3Rpb24odCxlLG4pe3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsaT1PYmplY3QuZGVmaW5lUHJvcGVydHksYT1uLnN5bWJvbCxyPVtdLHM9ITA9PT10W2EoIkRJU0FCTEVfV1JBUFBJTkdfVU5DQVVHSFRfUFJPTUlTRV9SRUpFQ1RJT04iKV0sbD1hKCJQcm9taXNlIiksYz1hKCJ0aGVuIik7bi5vblVuaGFuZGxlZEVycm9yPWZ1bmN0aW9uKHQpe2lmKG4uc2hvd1VuY2F1Z2h0RXJyb3IoKSl7dmFyIGU9dCYmdC5yZWplY3Rpb247ZT9jb25zb2xlLmVycm9yKCJVbmhhbmRsZWQgUHJvbWlzZSByZWplY3Rpb246IixlIGluc3RhbmNlb2YgRXJyb3I/ZS5tZXNzYWdlOmUsIjsgWm9uZToiLHQuem9uZS5uYW1lLCI7IFRhc2s6Iix0LnRhc2smJnQudGFzay5zb3VyY2UsIjsgVmFsdWU6IixlLGUgaW5zdGFuY2VvZiBFcnJvcj9lLnN0YWNrOnZvaWQgMCk6Y29uc29sZS5lcnJvcih0KX19LG4ubWljcm90YXNrRHJhaW5Eb25lPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PWZ1bmN0aW9uKCl7dmFyIHQ9ci5zaGlmdCgpO3RyeXt0LnpvbmUucnVuR3VhcmRlZCgoZnVuY3Rpb24oKXt0aHJvdyB0fSkpfWNhdGNoKHQpeyEoZnVuY3Rpb24gbyh0KXtuLm9uVW5oYW5kbGVkRXJyb3IodCk7dHJ5e3ZhciBvPWVbZF07ImZ1bmN0aW9uIj09dHlwZW9mIG8mJm8uY2FsbCh0aGlzLHQpfWNhdGNoKHQpe319KSh0KX19O3IubGVuZ3RoOyl0KCl9O3ZhciBkPWEoInVuaGFuZGxlZFByb21pc2VSZWplY3Rpb25IYW5kbGVyIik7ZnVuY3Rpb24gcCh0KXtyZXR1cm4gdCYmdC50aGVufWZ1bmN0aW9uIG0odCl7cmV0dXJuIHR9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gRC5yZWplY3QodCl9dmFyIGY9YSgic3RhdGUiKSxnPWEoInZhbHVlIiksaD1hKCJmaW5hbGx5IiksYj1hKCJwYXJlbnRQcm9taXNlVmFsdWUiKSx5PWEoInBhcmVudFByb21pc2VTdGF0ZSIpLF89bnVsbCxDPSEwLE09ITE7ZnVuY3Rpb24gdih0LGUpe3JldHVybiBmdW5jdGlvbihuKXt0cnl7Tyh0LGUsbil9Y2F0Y2goZSl7Tyh0LCExLGUpfX19dmFyIHg9YSgiY3VycmVudFRhc2tUcmFjZSIpO2Z1bmN0aW9uIE8odCxvLGEpe3ZhciBsLGM9KGw9ITEsZnVuY3Rpb24gdChlKXtyZXR1cm4gZnVuY3Rpb24oKXtsfHwobD0hMCxlLmFwcGx5KG51bGwsYXJndW1lbnRzKSl9fSk7aWYodD09PWEpdGhyb3cgbmV3IFR5cGVFcnJvcigiUHJvbWlzZSByZXNvbHZlZCB3aXRoIGl0c2VsZiIpO2lmKHRbZl09PT1fKXt2YXIgZD1udWxsO3RyeXsib2JqZWN0IiE9dHlwZW9mIGEmJiJmdW5jdGlvbiIhPXR5cGVvZiBhfHwoZD1hJiZhLnRoZW4pfWNhdGNoKGUpe3JldHVybiBjKChmdW5jdGlvbigpe08odCwhMSxlKX0pKSgpLHR9aWYobyE9PU0mJmEgaW5zdGFuY2VvZiBEJiZhLmhhc093blByb3BlcnR5KGYpJiZhLmhhc093blByb3BlcnR5KGcpJiZhW2ZdIT09Xyl3KGEpLE8odCxhW2ZdLGFbZ10pO2Vsc2UgaWYobyE9PU0mJiJmdW5jdGlvbiI9PXR5cGVvZiBkKXRyeXtkLmNhbGwoYSxjKHYodCxvKSksYyh2KHQsITEpKSl9Y2F0Y2goZSl7YygoZnVuY3Rpb24oKXtPKHQsITEsZSl9KSkoKX1lbHNle3RbZl09bzt2YXIgcD10W2ddO2lmKHRbZ109YSx0W2hdPT09aCYmbz09PUMmJih0W2ZdPXRbeV0sdFtnXT10W2JdKSxvPT09TSYmYSBpbnN0YW5jZW9mIEVycm9yKXt2YXIgbT1lLmN1cnJlbnRUYXNrJiZlLmN1cnJlbnRUYXNrLmRhdGEmJmUuY3VycmVudFRhc2suZGF0YS5fX2NyZWF0aW9uVHJhY2VfXzttJiZpKGEseCx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsdmFsdWU6bX0pfWZvcih2YXIgdT0wO3U8cC5sZW5ndGg7KWsodCxwW3UrK10scFt1KytdLHBbdSsrXSxwW3UrK10pO2lmKDA9PXAubGVuZ3RoJiZvPT1NKXt0W2ZdPTA7dmFyIFA9YTtpZighcyl0cnl7dGhyb3cgbmV3IEVycm9yKCJVbmNhdWdodCAoaW4gcHJvbWlzZSk6ICIrKGZ1bmN0aW9uIFModCl7cmV0dXJuIHQmJnQudG9TdHJpbmc9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nPyh0LmNvbnN0cnVjdG9yJiZ0LmNvbnN0cnVjdG9yLm5hbWV8fCIiKSsiOiAiK0pTT04uc3RyaW5naWZ5KHQpOnQ/dC50b1N0cmluZygpOk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX0pKGEpKyhhJiZhLnN0YWNrPyJcbiIrYS5zdGFjazoiIikpfWNhdGNoKHQpe1A9dH1QLnJlamVjdGlvbj1hLFAucHJvbWlzZT10LFAuem9uZT1lLmN1cnJlbnQsUC50YXNrPWUuY3VycmVudFRhc2ssci5wdXNoKFApLG4uc2NoZWR1bGVNaWNyb1Rhc2soKX19fXJldHVybiB0fXZhciBQPWEoInJlamVjdGlvbkhhbmRsZWRIYW5kbGVyIik7ZnVuY3Rpb24gdyh0KXtpZigwPT09dFtmXSl7dHJ5e3ZhciBuPWVbUF07biYmImZ1bmN0aW9uIj09dHlwZW9mIG4mJm4uY2FsbCh0aGlzLHtyZWplY3Rpb246dFtnXSxwcm9taXNlOnR9KX1jYXRjaCh0KXt9dFtmXT1NO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXQ9PT1yW29dLnByb21pc2UmJnIuc3BsaWNlKG8sMSl9fWZ1bmN0aW9uIGsodCxlLG4sbyxpKXt3KHQpO3ZhciBhPXRbZl0scj1hPyJmdW5jdGlvbiI9PXR5cGVvZiBvP286bToiZnVuY3Rpb24iPT10eXBlb2YgaT9pOnU7ZS5zY2hlZHVsZU1pY3JvVGFzaygiUHJvbWlzZS50aGVuIiwoZnVuY3Rpb24oKXt0cnl7dmFyIG89dFtnXSxpPSEhbiYmaD09PW5baF07aSYmKG5bYl09byxuW3ldPWEpO3ZhciBzPWUucnVuKHIsdm9pZCAwLGkmJnIhPT11JiZyIT09bT9bXTpbb10pO08obiwhMCxzKX1jYXRjaCh0KXtPKG4sITEsdCl9fSksbil9dmFyIFM9ZnVuY3Rpb24oKXt9LEQ9KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXt2YXIgbj10aGlzO2lmKCEobiBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBFcnJvcigiTXVzdCBiZSBhbiBpbnN0YW5jZW9mIFByb21pc2UuIik7bltmXT1fLG5bZ109W107dHJ5e2UmJmUodihuLEMpLHYobixNKSl9Y2F0Y2godCl7TyhuLCExLHQpfX1yZXR1cm4gdC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJmdW5jdGlvbiBab25lQXdhcmVQcm9taXNlKCkgeyBbbmF0aXZlIGNvZGVdIH0ifSx0LnJlc29sdmU9ZnVuY3Rpb24odCl7cmV0dXJuIE8obmV3IHRoaXMobnVsbCksQyx0KX0sdC5yZWplY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIE8obmV3IHRoaXMobnVsbCksTSx0KX0sdC5yYWNlPWZ1bmN0aW9uKHQpe3ZhciBlLG4sbz1uZXcgdGhpcygoZnVuY3Rpb24odCxvKXtlPXQsbj1vfSkpO2Z1bmN0aW9uIGkodCl7ZSh0KX1mdW5jdGlvbiBhKHQpe24odCl9Zm9yKHZhciByPTAscz10O3I8cy5sZW5ndGg7cisrKXt2YXIgbD1zW3JdO3AobCl8fChsPXRoaXMucmVzb2x2ZShsKSksbC50aGVuKGksYSl9cmV0dXJuIG99LHQuYWxsPWZ1bmN0aW9uKGUpe3JldHVybiB0LmFsbFdpdGhDYWxsYmFjayhlKX0sdC5hbGxTZXR0bGVkPWZ1bmN0aW9uKGUpe3JldHVybih0aGlzJiZ0aGlzLnByb3RvdHlwZSBpbnN0YW5jZW9mIHQ/dGhpczp0KS5hbGxXaXRoQ2FsbGJhY2soZSx7dGhlbkNhbGxiYWNrOmZ1bmN0aW9uKHQpe3JldHVybntzdGF0dXM6ImZ1bGZpbGxlZCIsdmFsdWU6dH19LGVycm9yQ2FsbGJhY2s6ZnVuY3Rpb24odCl7cmV0dXJue3N0YXR1czoicmVqZWN0ZWQiLHJlYXNvbjp0fX19KX0sdC5hbGxXaXRoQ2FsbGJhY2s9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG4sbyxpPW5ldyB0aGlzKChmdW5jdGlvbih0LGUpe249dCxvPWV9KSksYT0yLHI9MCxzPVtdLGw9ZnVuY3Rpb24odCl7cCh0KXx8KHQ9Yy5yZXNvbHZlKHQpKTt2YXIgaT1yO3RyeXt0LnRoZW4oKGZ1bmN0aW9uKHQpe3NbaV09ZT9lLnRoZW5DYWxsYmFjayh0KTp0LDA9PS0tYSYmbihzKX0pLChmdW5jdGlvbih0KXtlPyhzW2ldPWUuZXJyb3JDYWxsYmFjayh0KSwwPT0tLWEmJm4ocykpOm8odCl9KSl9Y2F0Y2godCl7byh0KX1hKysscisrfSxjPXRoaXMsZD0wLG09dDtkPG0ubGVuZ3RoO2QrKylsKG1bZF0pO3JldHVybiAwPT0oYS09MikmJm4ocyksaX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLFN5bWJvbC50b1N0cmluZ1RhZyx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIlByb21pc2UifSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSxTeW1ib2wuc3BlY2llcyx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUudGhlbj1mdW5jdGlvbihuLG8pe3ZhciBpPXRoaXMuY29uc3RydWN0b3JbU3ltYm9sLnNwZWNpZXNdO2kmJiJmdW5jdGlvbiI9PXR5cGVvZiBpfHwoaT10aGlzLmNvbnN0cnVjdG9yfHx0KTt2YXIgYT1uZXcgaShTKSxyPWUuY3VycmVudDtyZXR1cm4gdGhpc1tmXT09Xz90aGlzW2ddLnB1c2gocixhLG4sbyk6ayh0aGlzLHIsYSxuLG8pLGF9LHQucHJvdG90eXBlLmNhdGNoPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRoZW4obnVsbCx0KX0sdC5wcm90b3R5cGUuZmluYWxseT1mdW5jdGlvbihuKXt2YXIgbz10aGlzLmNvbnN0cnVjdG9yW1N5bWJvbC5zcGVjaWVzXTtvJiYiZnVuY3Rpb24iPT10eXBlb2Ygb3x8KG89dCk7dmFyIGk9bmV3IG8oUyk7aVtoXT1oO3ZhciBhPWUuY3VycmVudDtyZXR1cm4gdGhpc1tmXT09Xz90aGlzW2ddLnB1c2goYSxpLG4sbik6ayh0aGlzLGEsaSxuLG4pLGl9LHR9KSgpO0QucmVzb2x2ZT1ELnJlc29sdmUsRC5yZWplY3Q9RC5yZWplY3QsRC5yYWNlPUQucmFjZSxELmFsbD1ELmFsbDt2YXIgRT10W2xdPXQuUHJvbWlzZSxBPWUuX19zeW1ib2xfXygiWm9uZUF3YXJlUHJvbWlzZSIpLFI9byh0LCJQcm9taXNlIik7UiYmIVIuY29uZmlndXJhYmxlfHwoUiYmZGVsZXRlIFIud3JpdGFibGUsUiYmZGVsZXRlIFIudmFsdWUsUnx8KFI9e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwfSksUi5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdFtBXT90W0FdOnRbbF19LFIuc2V0PWZ1bmN0aW9uKGUpe2U9PT1EP3RbQV09ZToodFtsXT1lLGUucHJvdG90eXBlW2NdfHxOKGUpLG4uc2V0TmF0aXZlUHJvbWlzZShlKSl9LGkodCwiUHJvbWlzZSIsUikpLHQuUHJvbWlzZT1EO3ZhciBUPWEoInRoZW5QYXRjaGVkIik7ZnVuY3Rpb24gTih0KXt2YXIgZT10LnByb3RvdHlwZSxuPW8oZSwidGhlbiIpO2lmKCFufHwhMSE9PW4ud3JpdGFibGUmJm4uY29uZmlndXJhYmxlKXt2YXIgaT1lLnRoZW47ZVtjXT1pLHQucHJvdG90eXBlLnRoZW49ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3JldHVybiBuZXcgRCgoZnVuY3Rpb24odCxlKXtpLmNhbGwobix0LGUpfSkpLnRoZW4odCxlKX0sdFtUXT0hMH19aWYobi5wYXRjaFRoZW49TixFKXtOKEUpO3ZhciBJPXQuZmV0Y2g7ImZ1bmN0aW9uIj09dHlwZW9mIEkmJih0W24uc3ltYm9sKCJmZXRjaCIpXT1JLHQuZmV0Y2g9KGZ1bmN0aW9uIHoodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYoZSBpbnN0YW5jZW9mIEQpcmV0dXJuIGU7dmFyIG49ZS5jb25zdHJ1Y3RvcjtyZXR1cm4gbltUXXx8TihuKSxlfX0pKEkpKX1yZXR1cm4gUHJvbWlzZVtlLl9fc3ltYm9sX18oInVuY2F1Z2h0UHJvbWlzZUVycm9ycyIpXT1yLER9KSk7Ci8qKgogICAgICAgICAqIEBsaWNlbnNlCiAgICAgICAgICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgICAgICoKICAgICAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAgICAgKi8KdmFyIHQ9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixlPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxuPU9iamVjdC5nZXRQcm90b3R5cGVPZixvPU9iamVjdC5jcmVhdGUsaT1BcnJheS5wcm90b3R5cGUuc2xpY2UsYT0iYWRkRXZlbnRMaXN0ZW5lciIscj0icmVtb3ZlRXZlbnRMaXN0ZW5lciIscz1ab25lLl9fc3ltYm9sX18oYSksbD1ab25lLl9fc3ltYm9sX18ociksYz0idHJ1ZSIsZD0iZmFsc2UiLHA9Wm9uZS5fX3N5bWJvbF9fKCIiKTtmdW5jdGlvbiBtKHQsZSl7cmV0dXJuIFpvbmUuY3VycmVudC53cmFwKHQsZSl9ZnVuY3Rpb24gdSh0LGUsbixvLGkpe3JldHVybiBab25lLmN1cnJlbnQuc2NoZWR1bGVNYWNyb1Rhc2sodCxlLG4sbyxpKX12YXIgZj1ab25lLl9fc3ltYm9sX18sZz0idW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyxoPWc/d2luZG93OnZvaWQgMCxiPWcmJmh8fCJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZnx8R3gseT1bbnVsbF07ZnVuY3Rpb24gXyh0LGUpe2Zvcih2YXIgbj10Lmxlbmd0aC0xO24+PTA7bi0tKSJmdW5jdGlvbiI9PXR5cGVvZiB0W25dJiYodFtuXT1tKHRbbl0sZSsiXyIrbikpO3JldHVybiB0fWZ1bmN0aW9uIEModCl7cmV0dXJuIXR8fCExIT09dC53cml0YWJsZSYmISgiZnVuY3Rpb24iPT10eXBlb2YgdC5nZXQmJnZvaWQgMD09PXQuc2V0KX12YXIgTT0idW5kZWZpbmVkIiE9dHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUsdj0hKCJudyJpbiBiKSYmdm9pZCAwIT09Yi5wcm9jZXNzJiYiW29iamVjdCBwcm9jZXNzXSI9PT17fS50b1N0cmluZy5jYWxsKGIucHJvY2VzcykseD0hdiYmIU0mJiEoIWd8fCFoLkhUTUxFbGVtZW50KSxPPXZvaWQgMCE9PWIucHJvY2VzcyYmIltvYmplY3QgcHJvY2Vzc10iPT09e30udG9TdHJpbmcuY2FsbChiLnByb2Nlc3MpJiYhTSYmISghZ3x8IWguSFRNTEVsZW1lbnQpLFA9e30sdz1mdW5jdGlvbih0KXtpZih0PXR8fGIuZXZlbnQpe3ZhciBlPVBbdC50eXBlXTtlfHwoZT1QW3QudHlwZV09ZigiT05fUFJPUEVSVFkiK3QudHlwZSkpO3ZhciBuLG89dGhpc3x8dC50YXJnZXR8fGIsaT1vW2VdO3JldHVybiB4JiZvPT09aCYmImVycm9yIj09PXQudHlwZT8hMD09PShuPWkmJmkuY2FsbCh0aGlzLHQubWVzc2FnZSx0LmZpbGVuYW1lLHQubGluZW5vLHQuY29sbm8sdC5lcnJvcikpJiZ0LnByZXZlbnREZWZhdWx0KCk6bnVsbD09KG49aSYmaS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfHxufHx0LnByZXZlbnREZWZhdWx0KCksbn19O2Z1bmN0aW9uIGsobixvLGkpe3ZhciBhPXQobixvKTtpZighYSYmaSYmdChpLG8pJiYoYT17ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxhJiZhLmNvbmZpZ3VyYWJsZSl7dmFyIHI9Zigib24iK28rInBhdGNoZWQiKTtpZighbi5oYXNPd25Qcm9wZXJ0eShyKXx8IW5bcl0pe2RlbGV0ZSBhLndyaXRhYmxlLGRlbGV0ZSBhLnZhbHVlO3ZhciBzPWEuZ2V0LGw9YS5zZXQsYz1vLnN1YnN0cigyKSxkPVBbY107ZHx8KGQ9UFtjXT1mKCJPTl9QUk9QRVJUWSIrYykpLGEuc2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7ZXx8biE9PWJ8fChlPWIpLGUmJihlW2RdJiZlLnJlbW92ZUV2ZW50TGlzdGVuZXIoYyx3KSxsJiZsLmFwcGx5KGUseSksImZ1bmN0aW9uIj09dHlwZW9mIHQ/KGVbZF09dCxlLmFkZEV2ZW50TGlzdGVuZXIoYyx3LCExKSk6ZVtkXT1udWxsKX0sYS5nZXQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKHR8fG4hPT1ifHwodD1iKSwhdClyZXR1cm4gbnVsbDt2YXIgZT10W2RdO2lmKGUpcmV0dXJuIGU7aWYocyl7dmFyIGk9cyYmcy5jYWxsKHRoaXMpO2lmKGkpcmV0dXJuIGEuc2V0LmNhbGwodGhpcyxpKSwiZnVuY3Rpb24iPT10eXBlb2YgdC5yZW1vdmVBdHRyaWJ1dGUmJnQucmVtb3ZlQXR0cmlidXRlKG8pLGl9cmV0dXJuIG51bGx9LGUobixvLGEpLG5bcl09ITB9fX1mdW5jdGlvbiBTKHQsZSxuKXtpZihlKWZvcih2YXIgbz0wO288ZS5sZW5ndGg7bysrKWsodCwib24iK2Vbb10sbik7ZWxzZXt2YXIgaT1bXTtmb3IodmFyIGEgaW4gdCkib24iPT1hLnN1YnN0cigwLDIpJiZpLnB1c2goYSk7Zm9yKHZhciByPTA7cjxpLmxlbmd0aDtyKyspayh0LGlbcl0sbil9fXZhciBEPWYoIm9yaWdpbmFsSW5zdGFuY2UiKTtmdW5jdGlvbiBFKHQpe3ZhciBuPWJbdF07aWYobil7YltmKHQpXT1uLGJbdF09ZnVuY3Rpb24oKXt2YXIgZT1fKGFyZ3VtZW50cyx0KTtzd2l0Y2goZS5sZW5ndGgpe2Nhc2UgMDp0aGlzW0RdPW5ldyBuO2JyZWFrO2Nhc2UgMTp0aGlzW0RdPW5ldyBuKGVbMF0pO2JyZWFrO2Nhc2UgMjp0aGlzW0RdPW5ldyBuKGVbMF0sZVsxXSk7YnJlYWs7Y2FzZSAzOnRoaXNbRF09bmV3IG4oZVswXSxlWzFdLGVbMl0pO2JyZWFrO2Nhc2UgNDp0aGlzW0RdPW5ldyBuKGVbMF0sZVsxXSxlWzJdLGVbM10pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJBcmcgbGlzdCB0b28gbG9uZy4iKX19LFQoYlt0XSxuKTt2YXIgbyxpPW5ldyBuKChmdW5jdGlvbigpe30pKTtmb3IobyBpbiBpKSJYTUxIdHRwUmVxdWVzdCI9PT10JiYicmVzcG9uc2VCbG9iIj09PW98fChmdW5jdGlvbihuKXsiZnVuY3Rpb24iPT10eXBlb2YgaVtuXT9iW3RdLnByb3RvdHlwZVtuXT1mdW5jdGlvbigpe3JldHVybiB0aGlzW0RdW25dLmFwcGx5KHRoaXNbRF0sYXJndW1lbnRzKX06ZShiW3RdLnByb3RvdHlwZSxuLHtzZXQ6ZnVuY3Rpb24oZSl7ImZ1bmN0aW9uIj09dHlwZW9mIGU/KHRoaXNbRF1bbl09bShlLHQrIi4iK24pLFQodGhpc1tEXVtuXSxlKSk6dGhpc1tEXVtuXT1lfSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tEXVtuXX19KX0pKG8pO2ZvcihvIGluIG4pInByb3RvdHlwZSIhPT1vJiZuLmhhc093blByb3BlcnR5KG8pJiYoYlt0XVtvXT1uW29dKX19ZnVuY3Rpb24gQShlLG8saSl7Zm9yKHZhciBhPWU7YSYmIWEuaGFzT3duUHJvcGVydHkobyk7KWE9bihhKTshYSYmZVtvXSYmKGE9ZSk7dmFyIHI9ZihvKSxzPW51bGw7aWYoYSYmIShzPWFbcl0pJiYocz1hW3JdPWFbb10sQyhhJiZ0KGEsbykpKSl7dmFyIGw9aShzLHIsbyk7YVtvXT1mdW5jdGlvbigpe3JldHVybiBsKHRoaXMsYXJndW1lbnRzKX0sVChhW29dLHMpfXJldHVybiBzfWZ1bmN0aW9uIFIodCxlLG4pe3ZhciBvPW51bGw7ZnVuY3Rpb24gaSh0KXt2YXIgZT10LmRhdGE7cmV0dXJuIGUuYXJnc1tlLmNiSWR4XT1mdW5jdGlvbigpe3QuaW52b2tlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sby5hcHBseShlLnRhcmdldCxlLmFyZ3MpLHR9bz1BKHQsZSwoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbyl7dmFyIGE9bihlLG8pO3JldHVybiBhLmNiSWR4Pj0wJiYiZnVuY3Rpb24iPT10eXBlb2Ygb1thLmNiSWR4XT91KGEubmFtZSxvW2EuY2JJZHhdLGEsaSk6dC5hcHBseShlLG8pfX0pKX1mdW5jdGlvbiBUKHQsZSl7dFtmKCJPcmlnaW5hbERlbGVnYXRlIildPWV9dmFyIE49ITEsST0hMTtmdW5jdGlvbiB6KCl7dHJ5e3ZhciB0PWgubmF2aWdhdG9yLnVzZXJBZ2VudDtpZigtMSE9PXQuaW5kZXhPZigiTVNJRSAiKXx8LTEhPT10LmluZGV4T2YoIlRyaWRlbnQvIikpcmV0dXJuITB9Y2F0Y2godCl7fXJldHVybiExfWZ1bmN0aW9uIEgoKXtpZihOKXJldHVybiBJO049ITA7dHJ5e3ZhciB0PWgubmF2aWdhdG9yLnVzZXJBZ2VudDstMT09PXQuaW5kZXhPZigiTVNJRSAiKSYmLTE9PT10LmluZGV4T2YoIlRyaWRlbnQvIikmJi0xPT09dC5pbmRleE9mKCJFZGdlLyIpfHwoST0hMCl9Y2F0Y2godCl7fXJldHVybiBJfQovKioKICAgICAgICAgKiBAbGljZW5zZQogICAgICAgICAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICAgICAqCiAgICAgICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgICAgICovWm9uZS5fX2xvYWRfcGF0Y2goInRvU3RyaW5nIiwoZnVuY3Rpb24odCl7dmFyIGU9RnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nLG49ZigiT3JpZ2luYWxEZWxlZ2F0ZSIpLG89ZigiUHJvbWlzZSIpLGk9ZigiRXJyb3IiKSxhPWZ1bmN0aW9uIGEoKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgdGhpcyl7dmFyIHI9dGhpc1tuXTtpZihyKXJldHVybiJmdW5jdGlvbiI9PXR5cGVvZiByP2UuY2FsbChyKTpPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocik7aWYodGhpcz09PVByb21pc2Upe3ZhciBzPXRbb107aWYocylyZXR1cm4gZS5jYWxsKHMpfWlmKHRoaXM9PT1FcnJvcil7dmFyIGw9dFtpXTtpZihsKXJldHVybiBlLmNhbGwobCl9fXJldHVybiBlLmNhbGwodGhpcyl9O2Fbbl09ZSxGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc9YTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO09iamVjdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIFByb21pc2U/IltvYmplY3QgUHJvbWlzZV0iOnIuY2FsbCh0aGlzKX19KSk7Ci8qKgogICAgICAgICAqIEBsaWNlbnNlCiAgICAgICAgICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgICAgICoKICAgICAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAgICAgKi8KdmFyIEY9ITE7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cpdHJ5e3ZhciBMPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwicGFzc2l2ZSIse2dldDpmdW5jdGlvbigpe0Y9ITB9fSk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInRlc3QiLEwsTCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRlc3QiLEwsTCl9Y2F0Y2godCl7Rj0hMX12YXIgQj17dXNlRzohMH0sVj17fSxqPXt9LFU9bmV3IFJlZ0V4cCgiXiIrcCsiKFxcdyspKHRydWV8ZmFsc2UpJCIpLFc9ZigicHJvcGFnYXRpb25TdG9wcGVkIik7ZnVuY3Rpb24gRyh0LGUpe3ZhciBuPShlP2UodCk6dCkrZCxvPShlP2UodCk6dCkrYyxpPXArbixhPXArbztWW3RdPXt9LFZbdF0uZmFsc2U9aSxWW3RdLnRydWU9YX1mdW5jdGlvbiBZKHQsZSxvKXt2YXIgaT1vJiZvLmFkZHx8YSxzPW8mJm8ucm18fHIsbD1vJiZvLmxpc3RlbmVyc3x8ImV2ZW50TGlzdGVuZXJzIixtPW8mJm8ucm1BbGx8fCJyZW1vdmVBbGxMaXN0ZW5lcnMiLHU9ZihpKSxnPSIuIitpKyI6IixoPWZ1bmN0aW9uKHQsZSxuKXtpZighdC5pc1JlbW92ZWQpe3ZhciBvPXQuY2FsbGJhY2s7Im9iamVjdCI9PXR5cGVvZiBvJiZvLmhhbmRsZUV2ZW50JiYodC5jYWxsYmFjaz1mdW5jdGlvbih0KXtyZXR1cm4gby5oYW5kbGVFdmVudCh0KX0sdC5vcmlnaW5hbERlbGVnYXRlPW8pLHQuaW52b2tlKHQsZSxbbl0pO3ZhciBpPXQub3B0aW9ucztpJiYib2JqZWN0Ij09dHlwZW9mIGkmJmkub25jZSYmZVtzXS5jYWxsKGUsbi50eXBlLHQub3JpZ2luYWxEZWxlZ2F0ZT90Lm9yaWdpbmFsRGVsZWdhdGU6dC5jYWxsYmFjayxpKX19LGI9ZnVuY3Rpb24oZSl7aWYoZT1lfHx0LmV2ZW50KXt2YXIgbj10aGlzfHxlLnRhcmdldHx8dCxvPW5bVltlLnR5cGVdLmZhbHNlXTtpZihvKWlmKDE9PT1vLmxlbmd0aCloKG9bMF0sbixlKTtlbHNlIGZvcih2YXIgaT1vLnNsaWNlKCksYT0wO2E8aS5sZW5ndGgmJighZXx8ITAhPT1lW1ddKTthKyspaChpW2FdLG4sZSl9fSx5PWZ1bmN0aW9uKGUpe2lmKGU9ZXx8dC5ldmVudCl7dmFyIG49dGhpc3x8ZS50YXJnZXR8fHQsbz1uW1ZbZS50eXBlXS50cnVlXTtpZihvKWlmKDE9PT1vLmxlbmd0aCloKG9bMF0sbixlKTtlbHNlIGZvcih2YXIgaT1vLnNsaWNlKCksYT0wO2E8aS5sZW5ndGgmJighZXx8ITAhPT1lW1ddKTthKyspaChpW2FdLG4sZSl9fTtmdW5jdGlvbiBfKGUsbyl7aWYoIWUpcmV0dXJuITE7dmFyIGE9ITA7byYmdm9pZCAwIT09by51c2VHJiYoYT1vLnVzZUcpO3ZhciByPW8mJm8udmgsaD0hMDtvJiZ2b2lkIDAhPT1vLmNoa0R1cCYmKGg9by5jaGtEdXApO3ZhciBfPSExO28mJnZvaWQgMCE9PW8ucnQmJihfPW8ucnQpO2Zvcih2YXIgQz1lO0MmJiFDLmhhc093blByb3BlcnR5KGkpOylDPW4oQyk7aWYoIUMmJmVbaV0mJihDPWUpLCFDKXJldHVybiExO2lmKENbdV0pcmV0dXJuITE7dmFyIE0seD1vJiZvLmV2ZW50TmFtZVRvU3RyaW5nLE89e30sUD1DW3VdPUNbaV0sdz1DW2YocyldPUNbc10saz1DW2YobCldPUNbbF0sUz1DW2YobSldPUNbbV07ZnVuY3Rpb24gRCh0LGUpe3JldHVybiFGJiYib2JqZWN0Ij09dHlwZW9mIHQmJnQ/ISF0LmNhcHR1cmU6RiYmZT8iYm9vbGVhbiI9PXR5cGVvZiB0P3tjYXB0dXJlOnQscGFzc2l2ZTohMH06dD8ib2JqZWN0Ij09dHlwZW9mIHQmJiExIT09dC5wYXNzaXZlP09iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7cGFzc2l2ZTohMH0pOnQ6e3Bhc3NpdmU6ITB9OnR9byYmby5wcmVwZW5kJiYoTT1DW2Yoby5wcmVwZW5kKV09Q1tvLnByZXBlbmRdKTt2YXIgRT1hP2Z1bmN0aW9uKHQpe2lmKCFPLmlzRXhpc3RpbmcpcmV0dXJuIFAuY2FsbChPLnRhcmdldCxPLmV2ZW50TmFtZSxPLmNhcHR1cmU/eTpiLE8ub3B0aW9ucyl9OmZ1bmN0aW9uKHQpe3JldHVybiBQLmNhbGwoTy50YXJnZXQsTy5ldmVudE5hbWUsdC5pbnZva2UsTy5vcHRpb25zKX0sQT1hP2Z1bmN0aW9uKHQpe2lmKCF0LmlzUmVtb3ZlZCl7dmFyIGU9Vlt0LmV2ZW50TmFtZV0sbj12b2lkIDA7ZSYmKG49ZVt0LmNhcHR1cmU/YzpkXSk7dmFyIG89biYmdC50YXJnZXRbbl07aWYobylmb3IodmFyIGk9MDtpPG8ubGVuZ3RoO2krKylpZihvW2ldPT09dCl7by5zcGxpY2UoaSwxKSx0LmlzUmVtb3ZlZD0hMCwwPT09by5sZW5ndGgmJih0LmFsbFJlbW92ZWQ9ITAsdC50YXJnZXRbbl09bnVsbCk7YnJlYWt9fWlmKHQuYWxsUmVtb3ZlZClyZXR1cm4gdy5jYWxsKHQudGFyZ2V0LHQuZXZlbnROYW1lLHQuY2FwdHVyZT95OmIsdC5vcHRpb25zKX06ZnVuY3Rpb24odCl7cmV0dXJuIHcuY2FsbCh0LnRhcmdldCx0LmV2ZW50TmFtZSx0Lmludm9rZSx0Lm9wdGlvbnMpfSxSPW8mJm8uZGlmZj9vLmRpZmY6ZnVuY3Rpb24odCxlKXt2YXIgbj10eXBlb2YgZTtyZXR1cm4iZnVuY3Rpb24iPT09biYmdC5jYWxsYmFjaz09PWV8fCJvYmplY3QiPT09biYmdC5vcmlnaW5hbERlbGVnYXRlPT09ZX0sTj1ab25lW2YoIkJMQUNLX0xJU1RFRF9FVkVOVFMiKV0sST10W2YoIlBBU1NJVkVfRVZFTlRTIildLHo9ZnVuY3Rpb24oZSxuLGkscyxsLHApe3JldHVybiB2b2lkIDA9PT1sJiYobD0hMSksdm9pZCAwPT09cCYmKHA9ITEpLGZ1bmN0aW9uKCl7dmFyIG09dGhpc3x8dCx1PWFyZ3VtZW50c1swXTtvJiZvLnRyYW5zZmVyRXZlbnROYW1lJiYodT1vLnRyYW5zZmVyRXZlbnROYW1lKHUpKTt2YXIgZj1hcmd1bWVudHNbMV07aWYoIWYpcmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKHYmJiJ1bmNhdWdodEV4Y2VwdGlvbiI9PT11KXJldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt2YXIgZz0hMTtpZigiZnVuY3Rpb24iIT10eXBlb2YgZil7aWYoIWYuaGFuZGxlRXZlbnQpcmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpO2c9ITB9aWYoIXJ8fHIoZSxmLG0sYXJndW1lbnRzKSl7dmFyIGI9RiYmISFJJiYtMSE9PUkuaW5kZXhPZih1KSx5PUQoYXJndW1lbnRzWzJdLGIpO2lmKE4pZm9yKHZhciBfPTA7XzxOLmxlbmd0aDtfKyspaWYodT09PU5bX10pcmV0dXJuIGI/ZS5jYWxsKG0sdSxmLHkpOmUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3ZhciBDPSEheSYmKCJib29sZWFuIj09dHlwZW9mIHl8fHkuY2FwdHVyZSksTT0hKCF5fHwib2JqZWN0IiE9dHlwZW9mIHkpJiZ5Lm9uY2UsUD1ab25lLmN1cnJlbnQsdz1WW3VdO3d8fChHKHUseCksdz1WW3VdKTt2YXIgayxTPXdbQz9jOmRdLEU9bVtTXSxBPSExO2lmKEUpe2lmKEE9ITAsaClmb3IoXz0wO188RS5sZW5ndGg7XysrKWlmKFIoRVtfXSxmKSlyZXR1cm59ZWxzZSBFPW1bU109W107dmFyIFQ9bS5jb25zdHJ1Y3Rvci5uYW1lLHo9altUXTt6JiYoaz16W3VdKSxrfHwoaz1UK24rKHg/eCh1KTp1KSksTy5vcHRpb25zPXksTSYmKE8ub3B0aW9ucy5vbmNlPSExKSxPLnRhcmdldD1tLE8uY2FwdHVyZT1DLE8uZXZlbnROYW1lPXUsTy5pc0V4aXN0aW5nPUE7dmFyIEg9YT9COnZvaWQgMDtIJiYoSC50YXNrRGF0YT1PKTt2YXIgTD1QLnNjaGVkdWxlRXZlbnRUYXNrKGssZixILGkscyk7cmV0dXJuIE8udGFyZ2V0PW51bGwsSCYmKEgudGFza0RhdGE9bnVsbCksTSYmKHkub25jZT0hMCksKEZ8fCJib29sZWFuIiE9dHlwZW9mIEwub3B0aW9ucykmJihMLm9wdGlvbnM9eSksTC50YXJnZXQ9bSxMLmNhcHR1cmU9QyxMLmV2ZW50TmFtZT11LGcmJihMLm9yaWdpbmFsRGVsZWdhdGU9ZikscD9FLnVuc2hpZnQoTCk6RS5wdXNoKEwpLGw/bTp2b2lkIDB9fX07cmV0dXJuIENbaV09eihQLGcsRSxBLF8pLE0mJihDLnByZXBlbmRMaXN0ZW5lcj16KE0sIi5wcmVwZW5kTGlzdGVuZXI6IiwoZnVuY3Rpb24odCl7cmV0dXJuIE0uY2FsbChPLnRhcmdldCxPLmV2ZW50TmFtZSx0Lmludm9rZSxPLm9wdGlvbnMpfSksQSxfLCEwKSksQ1tzXT1mdW5jdGlvbigpe3ZhciBlPXRoaXN8fHQsbj1hcmd1bWVudHNbMF07byYmby50cmFuc2ZlckV2ZW50TmFtZSYmKG49by50cmFuc2ZlckV2ZW50TmFtZShuKSk7dmFyIGk9YXJndW1lbnRzWzJdLGE9ISFpJiYoImJvb2xlYW4iPT10eXBlb2YgaXx8aS5jYXB0dXJlKSxzPWFyZ3VtZW50c1sxXTtpZighcylyZXR1cm4gdy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYoIXJ8fHIodyxzLGUsYXJndW1lbnRzKSl7dmFyIGwsbT1WW25dO20mJihsPW1bYT9jOmRdKTt2YXIgdT1sJiZlW2xdO2lmKHUpZm9yKHZhciBmPTA7Zjx1Lmxlbmd0aDtmKyspe3ZhciBnPXVbZl07aWYoUihnLHMpKXJldHVybiB1LnNwbGljZShmLDEpLGcuaXNSZW1vdmVkPSEwLDA9PT11Lmxlbmd0aCYmKGcuYWxsUmVtb3ZlZD0hMCxlW2xdPW51bGwsInN0cmluZyI9PXR5cGVvZiBuJiYoZVtwKyJPTl9QUk9QRVJUWSIrbl09bnVsbCkpLGcuem9uZS5jYW5jZWxUYXNrKGcpLF8/ZTp2b2lkIDB9cmV0dXJuIHcuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0sQ1tsXT1mdW5jdGlvbigpe3ZhciBlPXRoaXN8fHQsbj1hcmd1bWVudHNbMF07byYmby50cmFuc2ZlckV2ZW50TmFtZSYmKG49by50cmFuc2ZlckV2ZW50TmFtZShuKSk7Zm9yKHZhciBpPVtdLGE9cShlLHg/eChuKTpuKSxyPTA7cjxhLmxlbmd0aDtyKyspe3ZhciBzPWFbcl07aS5wdXNoKHMub3JpZ2luYWxEZWxlZ2F0ZT9zLm9yaWdpbmFsRGVsZWdhdGU6cy5jYWxsYmFjayl9cmV0dXJuIGl9LENbbV09ZnVuY3Rpb24oKXt2YXIgZT10aGlzfHx0LG49YXJndW1lbnRzWzBdO2lmKG4pe28mJm8udHJhbnNmZXJFdmVudE5hbWUmJihuPW8udHJhbnNmZXJFdmVudE5hbWUobikpO3ZhciBpPVZbbl07aWYoaSl7dmFyIGE9ZVtpLmZhbHNlXSxyPWVbaS50cnVlXTtpZihhKXt2YXIgbD1hLnNsaWNlKCk7Zm9yKHA9MDtwPGwubGVuZ3RoO3ArKyl0aGlzW3NdLmNhbGwodGhpcyxuLChjPWxbcF0pLm9yaWdpbmFsRGVsZWdhdGU/Yy5vcmlnaW5hbERlbGVnYXRlOmMuY2FsbGJhY2ssYy5vcHRpb25zKX1pZihyKWZvcihsPXIuc2xpY2UoKSxwPTA7cDxsLmxlbmd0aDtwKyspe3ZhciBjO3RoaXNbc10uY2FsbCh0aGlzLG4sKGM9bFtwXSkub3JpZ2luYWxEZWxlZ2F0ZT9jLm9yaWdpbmFsRGVsZWdhdGU6Yy5jYWxsYmFjayxjLm9wdGlvbnMpfX19ZWxzZXtmb3IodmFyIGQ9T2JqZWN0LmtleXMoZSkscD0wO3A8ZC5sZW5ndGg7cCsrKXt2YXIgdT1VLmV4ZWMoZFtwXSksZj11JiZ1WzFdO2YmJiJyZW1vdmVMaXN0ZW5lciIhPT1mJiZ0aGlzW21dLmNhbGwodGhpcyxmKX10aGlzW21dLmNhbGwodGhpcywicmVtb3ZlTGlzdGVuZXIiKX1pZihfKXJldHVybiB0aGlzfSxUKENbaV0sUCksVChDW3NdLHcpLFMmJlQoQ1ttXSxTKSxrJiZUKENbbF0sayksITB9Zm9yKHZhciBDPVtdLE09MDtNPGUubGVuZ3RoO00rKylDW01dPV8oZVtNXSxvKTtyZXR1cm4gQ31mdW5jdGlvbiBxKHQsZSl7aWYoIWUpe3ZhciBuPVtdO2Zvcih2YXIgbyBpbiB0KXt2YXIgaT1VLmV4ZWMobyksYT1pJiZpWzFdO2lmKGEmJighZXx8YT09PWUpKXt2YXIgcj10W29dO2lmKHIpZm9yKHZhciBzPTA7czxyLmxlbmd0aDtzKyspbi5wdXNoKHJbc10pfX1yZXR1cm4gbn12YXIgbD1WW2VdO2x8fChHKGUpLGw9VltlXSk7dmFyIGM9dFtsLmZhbHNlXSxkPXRbbC50cnVlXTtyZXR1cm4gYz9kP2MuY29uY2F0KGQpOmMuc2xpY2UoKTpkP2Quc2xpY2UoKTpbXX1mdW5jdGlvbiBaKHQsZSl7dmFyIG49dC5FdmVudDtuJiZuLnByb3RvdHlwZSYmZS5wYXRjaE1ldGhvZChuLnByb3RvdHlwZSwic3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uIiwoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7ZVtXXT0hMCx0JiZ0LmFwcGx5KGUsbil9fSkpfQovKioKICAgICAgICAgKiBAbGljZW5zZQogICAgICAgICAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICAgICAqCiAgICAgICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgICAgICovZnVuY3Rpb24gWCh0LGUsbixvLGkpe3ZhciBhPVpvbmUuX19zeW1ib2xfXyhvKTtpZighZVthXSl7dmFyIHI9ZVthXT1lW29dO2Vbb109ZnVuY3Rpb24oYSxzLGwpe3JldHVybiBzJiZzLnByb3RvdHlwZSYmaS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgaT1uKyIuIitvKyI6OiIrZSxhPXMucHJvdG90eXBlO2lmKGEuaGFzT3duUHJvcGVydHkoZSkpe3ZhciByPXQuT2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGEsZSk7ciYmci52YWx1ZT8oci52YWx1ZT10LndyYXBXaXRoQ3VycmVudFpvbmUoci52YWx1ZSxpKSx0Ll9yZWRlZmluZVByb3BlcnR5KHMucHJvdG90eXBlLGUscikpOmFbZV0mJihhW2VdPXQud3JhcFdpdGhDdXJyZW50Wm9uZShhW2VdLGkpKX1lbHNlIGFbZV0mJihhW2VdPXQud3JhcFdpdGhDdXJyZW50Wm9uZShhW2VdLGkpKX0pKSxyLmNhbGwoZSxhLHMsbCl9LHQuYXR0YWNoT3JpZ2luVG9QYXRjaGVkKGVbb10scil9fQovKioKICAgICAgICAgKiBAbGljZW5zZQogICAgICAgICAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICAgICAqCiAgICAgICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgICAgICovdmFyIEssSixRLCQsdHQsZXQ9WyJhYnNvbHV0ZWRldmljZW9yaWVudGF0aW9uIiwiYWZ0ZXJpbnB1dCIsImFmdGVycHJpbnQiLCJhcHBpbnN0YWxsZWQiLCJiZWZvcmVpbnN0YWxscHJvbXB0IiwiYmVmb3JlcHJpbnQiLCJiZWZvcmV1bmxvYWQiLCJkZXZpY2VsaWdodCIsImRldmljZW1vdGlvbiIsImRldmljZW9yaWVudGF0aW9uIiwiZGV2aWNlb3JpZW50YXRpb25hYnNvbHV0ZSIsImRldmljZXByb3hpbWl0eSIsImhhc2hjaGFuZ2UiLCJsYW5ndWFnZWNoYW5nZSIsIm1lc3NhZ2UiLCJtb3piZWZvcmVwYWludCIsIm9mZmxpbmUiLCJvbmxpbmUiLCJwYWludCIsInBhZ2VzaG93IiwicGFnZWhpZGUiLCJwb3BzdGF0ZSIsInJlamVjdGlvbmhhbmRsZWQiLCJzdG9yYWdlIiwidW5oYW5kbGVkcmVqZWN0aW9uIiwidW5sb2FkIiwidXNlcnByb3hpbWl0eSIsInZyZGlzcGxheWNvbm5lY3RlZCIsInZyZGlzcGxheWRpc2Nvbm5lY3RlZCIsInZyZGlzcGxheXByZXNlbnRjaGFuZ2UiXSxudD1bImVuY3J5cHRlZCIsIndhaXRpbmdmb3JrZXkiLCJtc25lZWRrZXkiLCJtb3ppbnRlcnJ1cHRiZWdpbiIsIm1vemludGVycnVwdGVuZCJdLG90PVsibG9hZCJdLGl0PVsiYmx1ciIsImVycm9yIiwiZm9jdXMiLCJsb2FkIiwicmVzaXplIiwic2Nyb2xsIiwibWVzc2FnZWVycm9yIl0sYXQ9WyJib3VuY2UiLCJmaW5pc2giLCJzdGFydCJdLHJ0PVsibG9hZHN0YXJ0IiwicHJvZ3Jlc3MiLCJhYm9ydCIsImVycm9yIiwibG9hZCIsInByb2dyZXNzIiwidGltZW91dCIsImxvYWRlbmQiLCJyZWFkeXN0YXRlY2hhbmdlIl0sc3Q9WyJ1cGdyYWRlbmVlZGVkIiwiY29tcGxldGUiLCJhYm9ydCIsInN1Y2Nlc3MiLCJlcnJvciIsImJsb2NrZWQiLCJ2ZXJzaW9uY2hhbmdlIiwiY2xvc2UiXSxsdD1bImNsb3NlIiwiZXJyb3IiLCJvcGVuIiwibWVzc2FnZSJdLGN0PVsiZXJyb3IiLCJtZXNzYWdlIl0sZHQ9WyJhYm9ydCIsImFuaW1hdGlvbmNhbmNlbCIsImFuaW1hdGlvbmVuZCIsImFuaW1hdGlvbml0ZXJhdGlvbiIsImF1eGNsaWNrIiwiYmVmb3JlaW5wdXQiLCJibHVyIiwiY2FuY2VsIiwiY2FucGxheSIsImNhbnBsYXl0aHJvdWdoIiwiY2hhbmdlIiwiY29tcG9zaXRpb25zdGFydCIsImNvbXBvc2l0aW9udXBkYXRlIiwiY29tcG9zaXRpb25lbmQiLCJjdWVjaGFuZ2UiLCJjbGljayIsImNsb3NlIiwiY29udGV4dG1lbnUiLCJjdXJlY2hhbmdlIiwiZGJsY2xpY2siLCJkcmFnIiwiZHJhZ2VuZCIsImRyYWdlbnRlciIsImRyYWdleGl0IiwiZHJhZ2xlYXZlIiwiZHJhZ292ZXIiLCJkcm9wIiwiZHVyYXRpb25jaGFuZ2UiLCJlbXB0aWVkIiwiZW5kZWQiLCJlcnJvciIsImZvY3VzIiwiZm9jdXNpbiIsImZvY3Vzb3V0IiwiZ290cG9pbnRlcmNhcHR1cmUiLCJpbnB1dCIsImludmFsaWQiLCJrZXlkb3duIiwia2V5cHJlc3MiLCJrZXl1cCIsImxvYWQiLCJsb2Fkc3RhcnQiLCJsb2FkZWRkYXRhIiwibG9hZGVkbWV0YWRhdGEiLCJsb3N0cG9pbnRlcmNhcHR1cmUiLCJtb3VzZWRvd24iLCJtb3VzZWVudGVyIiwibW91c2VsZWF2ZSIsIm1vdXNlbW92ZSIsIm1vdXNlb3V0IiwibW91c2VvdmVyIiwibW91c2V1cCIsIm1vdXNld2hlZWwiLCJvcmllbnRhdGlvbmNoYW5nZSIsInBhdXNlIiwicGxheSIsInBsYXlpbmciLCJwb2ludGVyY2FuY2VsIiwicG9pbnRlcmRvd24iLCJwb2ludGVyZW50ZXIiLCJwb2ludGVybGVhdmUiLCJwb2ludGVybG9ja2NoYW5nZSIsIm1venBvaW50ZXJsb2NrY2hhbmdlIiwid2Via2l0cG9pbnRlcmxvY2tlcmNoYW5nZSIsInBvaW50ZXJsb2NrZXJyb3IiLCJtb3pwb2ludGVybG9ja2Vycm9yIiwid2Via2l0cG9pbnRlcmxvY2tlcnJvciIsInBvaW50ZXJtb3ZlIiwicG9pbnRvdXQiLCJwb2ludGVyb3ZlciIsInBvaW50ZXJ1cCIsInByb2dyZXNzIiwicmF0ZWNoYW5nZSIsInJlc2V0IiwicmVzaXplIiwic2Nyb2xsIiwic2Vla2VkIiwic2Vla2luZyIsInNlbGVjdCIsInNlbGVjdGlvbmNoYW5nZSIsInNlbGVjdHN0YXJ0Iiwic2hvdyIsInNvcnQiLCJzdGFsbGVkIiwic3VibWl0Iiwic3VzcGVuZCIsInRpbWV1cGRhdGUiLCJ2b2x1bWVjaGFuZ2UiLCJ0b3VjaGNhbmNlbCIsInRvdWNobW92ZSIsInRvdWNoc3RhcnQiLCJ0b3VjaGVuZCIsInRyYW5zaXRpb25jYW5jZWwiLCJ0cmFuc2l0aW9uZW5kIiwid2FpdGluZyIsIndoZWVsIl0uY29uY2F0KFsid2ViZ2xjb250ZXh0cmVzdG9yZWQiLCJ3ZWJnbGNvbnRleHRsb3N0Iiwid2ViZ2xjb250ZXh0Y3JlYXRpb25lcnJvciJdLFsiYXV0b2NvbXBsZXRlIiwiYXV0b2NvbXBsZXRlZXJyb3IiXSxbInRvZ2dsZSJdLFsiYWZ0ZXJzY3JpcHRleGVjdXRlIiwiYmVmb3Jlc2NyaXB0ZXhlY3V0ZSIsIkRPTUNvbnRlbnRMb2FkZWQiLCJmcmVlemUiLCJmdWxsc2NyZWVuY2hhbmdlIiwibW96ZnVsbHNjcmVlbmNoYW5nZSIsIndlYmtpdGZ1bGxzY3JlZW5jaGFuZ2UiLCJtc2Z1bGxzY3JlZW5jaGFuZ2UiLCJmdWxsc2NyZWVuZXJyb3IiLCJtb3pmdWxsc2NyZWVuZXJyb3IiLCJ3ZWJraXRmdWxsc2NyZWVuZXJyb3IiLCJtc2Z1bGxzY3JlZW5lcnJvciIsInJlYWR5c3RhdGVjaGFuZ2UiLCJ2aXNpYmlsaXR5Y2hhbmdlIiwicmVzdW1lIl0sZXQsWyJiZWZvcmVjb3B5IiwiYmVmb3JlY3V0IiwiYmVmb3JlcGFzdGUiLCJjb3B5IiwiY3V0IiwicGFzdGUiLCJkcmFnc3RhcnQiLCJsb2FkZW5kIiwiYW5pbWF0aW9uc3RhcnQiLCJzZWFyY2giLCJ0cmFuc2l0aW9ucnVuIiwidHJhbnNpdGlvbnN0YXJ0Iiwid2Via2l0YW5pbWF0aW9uZW5kIiwid2Via2l0YW5pbWF0aW9uaXRlcmF0aW9uIiwid2Via2l0YW5pbWF0aW9uc3RhcnQiLCJ3ZWJraXR0cmFuc2l0aW9uZW5kIl0sWyJhY3RpdmF0ZSIsImFmdGVydXBkYXRlIiwiYXJpYXJlcXVlc3QiLCJiZWZvcmVhY3RpdmF0ZSIsImJlZm9yZWRlYWN0aXZhdGUiLCJiZWZvcmVlZGl0Zm9jdXMiLCJiZWZvcmV1cGRhdGUiLCJjZWxsY2hhbmdlIiwiY29udHJvbHNlbGVjdCIsImRhdGFhdmFpbGFibGUiLCJkYXRhc2V0Y2hhbmdlZCIsImRhdGFzZXRjb21wbGV0ZSIsImVycm9ydXBkYXRlIiwiZmlsdGVyY2hhbmdlIiwibGF5b3V0Y29tcGxldGUiLCJsb3NlY2FwdHVyZSIsIm1vdmUiLCJtb3ZlZW5kIiwibW92ZXN0YXJ0IiwicHJvcGVydHljaGFuZ2UiLCJyZXNpemVlbmQiLCJyZXNpemVzdGFydCIsInJvd2VudGVyIiwicm93ZXhpdCIsInJvd3NkZWxldGUiLCJyb3dzaW5zZXJ0ZWQiLCJjb21tYW5kIiwiY29tcGFzc25lZWRzY2FsaWJyYXRpb24iLCJkZWFjdGl2YXRlIiwiaGVscCIsIm1zY29udGVudHpvb20iLCJtc21hbmlwdWxhdGlvbnN0YXRlY2hhbmdlZCIsIm1zZ2VzdHVyZWNoYW5nZSIsIm1zZ2VzdHVyZWRvdWJsZXRhcCIsIm1zZ2VzdHVyZWVuZCIsIm1zZ2VzdHVyZWhvbGQiLCJtc2dlc3R1cmVzdGFydCIsIm1zZ2VzdHVyZXRhcCIsIm1zZ290cG9pbnRlcmNhcHR1cmUiLCJtc2luZXJ0aWFzdGFydCIsIm1zbG9zdHBvaW50ZXJjYXB0dXJlIiwibXNwb2ludGVyY2FuY2VsIiwibXNwb2ludGVyZG93biIsIm1zcG9pbnRlcmVudGVyIiwibXNwb2ludGVyaG92ZXIiLCJtc3BvaW50ZXJsZWF2ZSIsIm1zcG9pbnRlcm1vdmUiLCJtc3BvaW50ZXJvdXQiLCJtc3BvaW50ZXJvdmVyIiwibXNwb2ludGVydXAiLCJwb2ludGVyb3V0IiwibXNzaXRlbW9kZWp1bXBsaXN0aXRlbXJlbW92ZWQiLCJtc3RodW1ibmFpbGNsaWNrIiwic3RvcCIsInN0b3JhZ2Vjb21taXQiXSk7ZnVuY3Rpb24gcHQodCxlLG4pe2lmKCFufHwwPT09bi5sZW5ndGgpcmV0dXJuIGU7dmFyIG89bi5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnRhcmdldD09PXR9KSk7aWYoIW98fDA9PT1vLmxlbmd0aClyZXR1cm4gZTt2YXIgaT1vWzBdLmlnbm9yZVByb3BlcnRpZXM7cmV0dXJuIGUuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4tMT09PWkuaW5kZXhPZih0KX0pKX1mdW5jdGlvbiBtdCh0LGUsbixvKXt0JiZTKHQscHQodCxlLG4pLG8pfWZ1bmN0aW9uIHV0KHQsZSl7aWYoKCF2fHxPKSYmIVpvbmVbdC5zeW1ib2woInBhdGNoRXZlbnRzIildKXt2YXIgbz0idW5kZWZpbmVkIiE9dHlwZW9mIFdlYlNvY2tldCxpPWUuX19ab25lX2lnbm9yZV9vbl9wcm9wZXJ0aWVzO2lmKHgpe3ZhciBhPXdpbmRvdyxyPXo/W3t0YXJnZXQ6YSxpZ25vcmVQcm9wZXJ0aWVzOlsiZXJyb3IiXX1dOltdO210KGEsZHQuY29uY2F0KFsibWVzc2FnZWVycm9yIl0pLGk/aS5jb25jYXQocik6aSxuKGEpKSxtdChEb2N1bWVudC5wcm90b3R5cGUsZHQsaSksdm9pZCAwIT09YS5TVkdFbGVtZW50JiZtdChhLlNWR0VsZW1lbnQucHJvdG90eXBlLGR0LGkpLG10KEVsZW1lbnQucHJvdG90eXBlLGR0LGkpLG10KEhUTUxFbGVtZW50LnByb3RvdHlwZSxkdCxpKSxtdChIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZSxudCxpKSxtdChIVE1MRnJhbWVTZXRFbGVtZW50LnByb3RvdHlwZSxldC5jb25jYXQoaXQpLGkpLG10KEhUTUxCb2R5RWxlbWVudC5wcm90b3R5cGUsZXQuY29uY2F0KGl0KSxpKSxtdChIVE1MRnJhbWVFbGVtZW50LnByb3RvdHlwZSxvdCxpKSxtdChIVE1MSUZyYW1lRWxlbWVudC5wcm90b3R5cGUsb3QsaSk7dmFyIHM9YS5IVE1MTWFycXVlZUVsZW1lbnQ7cyYmbXQocy5wcm90b3R5cGUsYXQsaSk7dmFyIGw9YS5Xb3JrZXI7bCYmbXQobC5wcm90b3R5cGUsY3QsaSl9dmFyIGM9ZS5YTUxIdHRwUmVxdWVzdDtjJiZtdChjLnByb3RvdHlwZSxydCxpKTt2YXIgZD1lLlhNTEh0dHBSZXF1ZXN0RXZlbnRUYXJnZXQ7ZCYmbXQoZCYmZC5wcm90b3R5cGUscnQsaSksInVuZGVmaW5lZCIhPXR5cGVvZiBJREJJbmRleCYmKG10KElEQkluZGV4LnByb3RvdHlwZSxzdCxpKSxtdChJREJSZXF1ZXN0LnByb3RvdHlwZSxzdCxpKSxtdChJREJPcGVuREJSZXF1ZXN0LnByb3RvdHlwZSxzdCxpKSxtdChJREJEYXRhYmFzZS5wcm90b3R5cGUsc3QsaSksbXQoSURCVHJhbnNhY3Rpb24ucHJvdG90eXBlLHN0LGkpLG10KElEQkN1cnNvci5wcm90b3R5cGUsc3QsaSkpLG8mJm10KFdlYlNvY2tldC5wcm90b3R5cGUsbHQsaSl9fQovKioKICAgICAgICAgKiBAbGljZW5zZQogICAgICAgICAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICAgICAqCiAgICAgICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgICAgICovZnVuY3Rpb24gZnQoKXtLPVpvbmUuX19zeW1ib2xfXyxKPU9iamVjdFtLKCJkZWZpbmVQcm9wZXJ0eSIpXT1PYmplY3QuZGVmaW5lUHJvcGVydHksUT1PYmplY3RbSygiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIildPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsJD1PYmplY3QuY3JlYXRlLHR0PUsoInVuY29uZmlndXJhYmxlcyIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eT1mdW5jdGlvbih0LGUsbil7aWYoaHQodCxlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYXNzaWduIHRvIHJlYWQgb25seSBwcm9wZXJ0eSAnIitlKyInIG9mICIrdCk7dmFyIG89bi5jb25maWd1cmFibGU7cmV0dXJuInByb3RvdHlwZSIhPT1lJiYobj1idCh0LGUsbikpLHl0KHQsZSxuLG8pfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcz1mdW5jdGlvbih0LGUpe3JldHVybiBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChmdW5jdGlvbihuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLGVbbl0pfSkpLHR9LE9iamVjdC5jcmVhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4ib2JqZWN0IiE9dHlwZW9mIGV8fE9iamVjdC5pc0Zyb3plbihlKXx8T2JqZWN0LmtleXMoZSkuZm9yRWFjaCgoZnVuY3Rpb24obil7ZVtuXT1idCh0LG4sZVtuXSl9KSksJCh0LGUpfSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yPWZ1bmN0aW9uKHQsZSl7dmFyIG49USh0LGUpO3JldHVybiBuJiZodCh0LGUpJiYobi5jb25maWd1cmFibGU9ITEpLG59fWZ1bmN0aW9uIGd0KHQsZSxuKXt2YXIgbz1uLmNvbmZpZ3VyYWJsZTtyZXR1cm4geXQodCxlLG49YnQodCxlLG4pLG8pfWZ1bmN0aW9uIGh0KHQsZSl7cmV0dXJuIHQmJnRbdHRdJiZ0W3R0XVtlXX1mdW5jdGlvbiBidCh0LGUsbil7cmV0dXJuIE9iamVjdC5pc0Zyb3plbihuKXx8KG4uY29uZmlndXJhYmxlPSEwKSxuLmNvbmZpZ3VyYWJsZXx8KHRbdHRdfHxPYmplY3QuaXNGcm96ZW4odCl8fEoodCx0dCx7d3JpdGFibGU6ITAsdmFsdWU6e319KSx0W3R0XSYmKHRbdHRdW2VdPSEwKSksbn1mdW5jdGlvbiB5dCh0LGUsbixvKXt0cnl7cmV0dXJuIEoodCxlLG4pfWNhdGNoKGEpe2lmKCFuLmNvbmZpZ3VyYWJsZSl0aHJvdyBhO3ZvaWQgMD09PW8/ZGVsZXRlIG4uY29uZmlndXJhYmxlOm4uY29uZmlndXJhYmxlPW87dHJ5e3JldHVybiBKKHQsZSxuKX1jYXRjaChvKXt2YXIgaT1udWxsO3RyeXtpPUpTT04uc3RyaW5naWZ5KG4pfWNhdGNoKHQpe2k9bi50b1N0cmluZygpfWNvbnNvbGUubG9nKCJBdHRlbXB0aW5nIHRvIGNvbmZpZ3VyZSAnIitlKyInIHdpdGggZGVzY3JpcHRvciAnIitpKyInIG9uIG9iamVjdCAnIit0KyInIGFuZCBnb3QgZXJyb3IsIGdpdmluZyB1cDogIitvKX19fQovKioKICAgICAgICAgKiBAbGljZW5zZQogICAgICAgICAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICAgICAqCiAgICAgICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgICAgICovZnVuY3Rpb24gX3QodCxlKXt2YXIgbj1lLmdldEdsb2JhbE9iamVjdHMoKSxvPW4uZXZlbnROYW1lcyxpPW4uZ2xvYmFsU291cmNlcyxhPW4uem9uZVN5bWJvbEV2ZW50TmFtZXMscj1uLlRSVUVfU1RSLHM9bi5GQUxTRV9TVFIsbD1uLlpPTkVfU1lNQk9MX1BSRUZJWCxjPSJBcHBsaWNhdGlvbkNhY2hlLEV2ZW50U291cmNlLEZpbGVSZWFkZXIsSW5wdXRNZXRob2RDb250ZXh0LE1lZGlhQ29udHJvbGxlcixNZXNzYWdlUG9ydCxOb2RlLFBlcmZvcm1hbmNlLFNWR0VsZW1lbnRJbnN0YW5jZSxTaGFyZWRXb3JrZXIsVGV4dFRyYWNrLFRleHRUcmFja0N1ZSxUZXh0VHJhY2tMaXN0LFdlYktpdE5hbWVkRmxvdyxXaW5kb3csV29ya2VyLFdvcmtlckdsb2JhbFNjb3BlLFhNTEh0dHBSZXF1ZXN0LFhNTEh0dHBSZXF1ZXN0RXZlbnRUYXJnZXQsWE1MSHR0cFJlcXVlc3RVcGxvYWQsSURCUmVxdWVzdCxJREJPcGVuREJSZXF1ZXN0LElEQkRhdGFiYXNlLElEQlRyYW5zYWN0aW9uLElEQkN1cnNvcixEQkluZGV4LFdlYlNvY2tldCIuc3BsaXQoIiwiKSxkPVtdLHA9dC53dGYsbT0iQW5jaG9yLEFyZWEsQXVkaW8sQlIsQmFzZSxCYXNlRm9udCxCb2R5LEJ1dHRvbixDYW52YXMsQ29udGVudCxETGlzdCxEaXJlY3RvcnksRGl2LEVtYmVkLEZpZWxkU2V0LEZvbnQsRm9ybSxGcmFtZSxGcmFtZVNldCxIUixIZWFkLEhlYWRpbmcsSHRtbCxJRnJhbWUsSW1hZ2UsSW5wdXQsS2V5Z2VuLExJLExhYmVsLExlZ2VuZCxMaW5rLE1hcCxNYXJxdWVlLE1lZGlhLE1lbnUsTWV0YSxNZXRlcixNb2QsT0xpc3QsT2JqZWN0LE9wdEdyb3VwLE9wdGlvbixPdXRwdXQsUGFyYWdyYXBoLFByZSxQcm9ncmVzcyxRdW90ZSxTY3JpcHQsU2VsZWN0LFNvdXJjZSxTcGFuLFN0eWxlLFRhYmxlQ2FwdGlvbixUYWJsZUNlbGwsVGFibGVDb2wsVGFibGUsVGFibGVSb3csVGFibGVTZWN0aW9uLFRleHRBcmVhLFRpdGxlLFRyYWNrLFVMaXN0LFVua25vd24sVmlkZW8iLnNwbGl0KCIsIik7cD9kPW0ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4iSFRNTCIrdCsiRWxlbWVudCJ9KSkuY29uY2F0KGMpOnQuRXZlbnRUYXJnZXQ/ZC5wdXNoKCJFdmVudFRhcmdldCIpOmQ9Yztmb3IodmFyIHU9dC5fX1pvbmVfZGlzYWJsZV9JRV9jaGVja3x8ITEsZj10Ll9fWm9uZV9lbmFibGVfY3Jvc3NfY29udGV4dF9jaGVja3x8ITEsZz1lLmlzSUVPckVkZ2UoKSxoPSJbb2JqZWN0IEZ1bmN0aW9uV3JhcHBlcl0iLGI9ImZ1bmN0aW9uIF9fQlJPV1NFUlRPT0xTX0NPTlNPTEVfU0FGRUZVTkMoKSB7IFtuYXRpdmUgY29kZV0gfSIseT17TVNQb2ludGVyQ2FuY2VsOiJwb2ludGVyY2FuY2VsIixNU1BvaW50ZXJEb3duOiJwb2ludGVyZG93biIsTVNQb2ludGVyRW50ZXI6InBvaW50ZXJlbnRlciIsTVNQb2ludGVySG92ZXI6InBvaW50ZXJob3ZlciIsTVNQb2ludGVyTGVhdmU6InBvaW50ZXJsZWF2ZSIsTVNQb2ludGVyTW92ZToicG9pbnRlcm1vdmUiLE1TUG9pbnRlck91dDoicG9pbnRlcm91dCIsTVNQb2ludGVyT3ZlcjoicG9pbnRlcm92ZXIiLE1TUG9pbnRlclVwOiJwb2ludGVydXAifSxfPTA7XzxvLmxlbmd0aDtfKyspe3ZhciBDPWwrKChQPW9bX10pK3MpLE09bCsoUCtyKTthW1BdPXt9LGFbUF1bc109QyxhW1BdW3JdPU19Zm9yKF89MDtfPG0ubGVuZ3RoO18rKylmb3IodmFyIHY9bVtfXSx4PWlbdl09e30sTz0wO088by5sZW5ndGg7TysrKXt2YXIgUDt4W1A9b1tPXV09disiLmFkZEV2ZW50TGlzdGVuZXI6IitQfXZhciB3PVtdO2ZvcihfPTA7XzxkLmxlbmd0aDtfKyspe3ZhciBrPXRbZFtfXV07dy5wdXNoKGsmJmsucHJvdG90eXBlKX1yZXR1cm4gZS5wYXRjaEV2ZW50VGFyZ2V0KHQsdyx7dmg6ZnVuY3Rpb24odCxlLG4sbyl7aWYoIXUmJmcpe2lmKGYpdHJ5e3ZhciBpO2lmKChpPWUudG9TdHJpbmcoKSk9PT1ofHxpPT1iKXJldHVybiB0LmFwcGx5KG4sbyksITF9Y2F0Y2goZSl7cmV0dXJuIHQuYXBwbHkobixvKSwhMX1lbHNlIGlmKChpPWUudG9TdHJpbmcoKSk9PT1ofHxpPT1iKXJldHVybiB0LmFwcGx5KG4sbyksITF9ZWxzZSBpZihmKXRyeXtlLnRvU3RyaW5nKCl9Y2F0Y2goZSl7cmV0dXJuIHQuYXBwbHkobixvKSwhMX1yZXR1cm4hMH0sdHJhbnNmZXJFdmVudE5hbWU6ZnVuY3Rpb24odCl7cmV0dXJuIHlbdF18fHR9fSksWm9uZVtlLnN5bWJvbCgicGF0Y2hFdmVudFRhcmdldCIpXT0hIXQuRXZlbnRUYXJnZXQsITB9Ci8qKgogICAgICAgICAqIEBsaWNlbnNlCiAgICAgICAgICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgICAgICoKICAgICAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAgICAgKi8KLyoqCiAgICAgICAgICogQGxpY2Vuc2UKICAgICAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAgICAgKgogICAgICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICAgICAqLwpmdW5jdGlvbiBDdCh0LGUpe3ZhciBuPXQuZ2V0R2xvYmFsT2JqZWN0cygpO2lmKCghbi5pc05vZGV8fG4uaXNNaXgpJiYhKGZ1bmN0aW9uIG8odCxlKXt2YXIgbj10LmdldEdsb2JhbE9iamVjdHMoKTtpZigobi5pc0Jyb3dzZXJ8fG4uaXNNaXgpJiYhdC5PYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSFRNTEVsZW1lbnQucHJvdG90eXBlLCJvbmNsaWNrIikmJiJ1bmRlZmluZWQiIT10eXBlb2YgRWxlbWVudCl7dmFyIG89dC5PYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRWxlbWVudC5wcm90b3R5cGUsIm9uY2xpY2siKTtpZihvJiYhby5jb25maWd1cmFibGUpcmV0dXJuITE7aWYobyl7dC5PYmplY3REZWZpbmVQcm9wZXJ0eShFbGVtZW50LnByb3RvdHlwZSwib25jbGljayIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiEwfX0pO3ZhciBpPSEhZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iikub25jbGljaztyZXR1cm4gdC5PYmplY3REZWZpbmVQcm9wZXJ0eShFbGVtZW50LnByb3RvdHlwZSwib25jbGljayIsbyksaX19dmFyIGE9ZS5YTUxIdHRwUmVxdWVzdDtpZighYSlyZXR1cm4hMTt2YXIgcj0ib25yZWFkeXN0YXRlY2hhbmdlIixzPWEucHJvdG90eXBlLGw9dC5PYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocyxyKTtpZihsKXJldHVybiB0Lk9iamVjdERlZmluZVByb3BlcnR5KHMscix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuITB9fSksaT0hIShkPW5ldyBhKS5vbnJlYWR5c3RhdGVjaGFuZ2UsdC5PYmplY3REZWZpbmVQcm9wZXJ0eShzLHIsbHx8e30pLGk7dmFyIGM9dC5zeW1ib2woImZha2UiKTt0Lk9iamVjdERlZmluZVByb3BlcnR5KHMscix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbY119LHNldDpmdW5jdGlvbih0KXt0aGlzW2NdPXR9fSk7dmFyIGQscD1mdW5jdGlvbigpe307cmV0dXJuKGQ9bmV3IGEpLm9ucmVhZHlzdGF0ZWNoYW5nZT1wLGk9ZFtjXT09PXAsZC5vbnJlYWR5c3RhdGVjaGFuZ2U9bnVsbCxpfSkodCxlKSl7dmFyIGk9InVuZGVmaW5lZCIhPXR5cGVvZiBXZWJTb2NrZXQ7KGZ1bmN0aW9uIGEodCl7Zm9yKHZhciBlPXQuZ2V0R2xvYmFsT2JqZWN0cygpLmV2ZW50TmFtZXMsbj10LnN5bWJvbCgidW5ib3VuZCIpLG89ZnVuY3Rpb24obyl7dmFyIGk9ZVtvXSxhPSJvbiIraTtzZWxmLmFkZEV2ZW50TGlzdGVuZXIoaSwoZnVuY3Rpb24oZSl7dmFyIG8saSxyPWUudGFyZ2V0O2ZvcihpPXI/ci5jb25zdHJ1Y3Rvci5uYW1lKyIuIithOiJ1bmtub3duLiIrYTtyOylyW2FdJiYhclthXVtuXSYmKChvPXQud3JhcFdpdGhDdXJyZW50Wm9uZShyW2FdLGkpKVtuXT1yW2FdLHJbYV09bykscj1yLnBhcmVudEVsZW1lbnR9KSwhMCl9LGk9MDtpPGUubGVuZ3RoO2krKylvKGkpfQovKioKICAgICAgICAgKiBAbGljZW5zZQogICAgICAgICAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICAgICAqCiAgICAgICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgICAgICovKSh0KSx0LnBhdGNoQ2xhc3MoIlhNTEh0dHBSZXF1ZXN0IiksaSYmKGZ1bmN0aW9uIHIodCxlKXt2YXIgbj10LmdldEdsb2JhbE9iamVjdHMoKSxvPW4uQUREX0VWRU5UX0xJU1RFTkVSX1NUUixpPW4uUkVNT1ZFX0VWRU5UX0xJU1RFTkVSX1NUUixhPWUuV2ViU29ja2V0O2UuRXZlbnRUYXJnZXR8fHQucGF0Y2hFdmVudFRhcmdldChlLFthLnByb3RvdHlwZV0pLGUuV2ViU29ja2V0PWZ1bmN0aW9uKGUsbil7dmFyIHIscyxsPWFyZ3VtZW50cy5sZW5ndGg+MT9uZXcgYShlLG4pOm5ldyBhKGUpLGM9dC5PYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobCwib25tZXNzYWdlIik7cmV0dXJuIGMmJiExPT09Yy5jb25maWd1cmFibGU/KHI9dC5PYmplY3RDcmVhdGUobCkscz1sLFtvLGksInNlbmQiLCJjbG9zZSJdLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JbZV09ZnVuY3Rpb24oKXt2YXIgbj10LkFycmF5U2xpY2UuY2FsbChhcmd1bWVudHMpO2lmKGU9PT1vfHxlPT09aSl7dmFyIGE9bi5sZW5ndGg+MD9uWzBdOnZvaWQgMDtpZihhKXt2YXIgcz1ab25lLl9fc3ltYm9sX18oIk9OX1BST1BFUlRZIithKTtsW3NdPXJbc119fXJldHVybiBsW2VdLmFwcGx5KGwsbil9fSkpKTpyPWwsdC5wYXRjaE9uUHJvcGVydGllcyhyLFsiY2xvc2UiLCJlcnJvciIsIm1lc3NhZ2UiLCJvcGVuIl0scykscn07dmFyIHI9ZS5XZWJTb2NrZXQ7Zm9yKHZhciBzIGluIGEpcltzXT1hW3NdfSkodCxlKSxab25lW3Quc3ltYm9sKCJwYXRjaEV2ZW50cyIpXT0hMH19Wm9uZS5fX2xvYWRfcGF0Y2goInV0aWwiLChmdW5jdGlvbihuLHMsbCl7bC5wYXRjaE9uUHJvcGVydGllcz1TLGwucGF0Y2hNZXRob2Q9QSxsLmJpbmRBcmd1bWVudHM9XyxsLnBhdGNoTWFjcm9UYXNrPVI7dmFyIHU9cy5fX3N5bWJvbF9fKCJCTEFDS19MSVNURURfRVZFTlRTIiksZj1zLl9fc3ltYm9sX18oIlVOUEFUQ0hFRF9FVkVOVFMiKTtuW2ZdJiYoblt1XT1uW2ZdKSxuW3VdJiYoc1t1XT1zW2ZdPW5bdV0pLGwucGF0Y2hFdmVudFByb3RvdHlwZT1aLGwucGF0Y2hFdmVudFRhcmdldD1ZLGwuaXNJRU9yRWRnZT1ILGwuT2JqZWN0RGVmaW5lUHJvcGVydHk9ZSxsLk9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcj10LGwuT2JqZWN0Q3JlYXRlPW8sbC5BcnJheVNsaWNlPWksbC5wYXRjaENsYXNzPUUsbC53cmFwV2l0aEN1cnJlbnRab25lPW0sbC5maWx0ZXJQcm9wZXJ0aWVzPXB0LGwuYXR0YWNoT3JpZ2luVG9QYXRjaGVkPVQsbC5fcmVkZWZpbmVQcm9wZXJ0eT1PYmplY3QuZGVmaW5lUHJvcGVydHksbC5wYXRjaENhbGxiYWNrcz1YLGwuZ2V0R2xvYmFsT2JqZWN0cz1mdW5jdGlvbigpe3JldHVybntnbG9iYWxTb3VyY2VzOmosem9uZVN5bWJvbEV2ZW50TmFtZXM6VixldmVudE5hbWVzOmR0LGlzQnJvd3Nlcjp4LGlzTWl4Ok8saXNOb2RlOnYsVFJVRV9TVFI6YyxGQUxTRV9TVFI6ZCxaT05FX1NZTUJPTF9QUkVGSVg6cCxBRERfRVZFTlRfTElTVEVORVJfU1RSOmEsUkVNT1ZFX0VWRU5UX0xJU1RFTkVSX1NUUjpyfX19KSksCi8qKgogICAgICAgICAqIEBsaWNlbnNlCiAgICAgICAgICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgICAgICoKICAgICAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAgICAgKi8KKGZ1bmN0aW9uKHQpe3ZhciBlPXQuX19ab25lX3N5bWJvbF9wcmVmaXh8fCJfX3pvbmVfc3ltYm9sX18iO3RbKGZ1bmN0aW9uIG4odCl7cmV0dXJuIGUrdH0pKCJsZWdhY3lQYXRjaCIpXT1mdW5jdGlvbigpe3ZhciBlPXQuWm9uZTtlLl9fbG9hZF9wYXRjaCgiZGVmaW5lUHJvcGVydHkiLChmdW5jdGlvbih0LGUsbil7bi5fcmVkZWZpbmVQcm9wZXJ0eT1ndCxmdCgpfSkpLGUuX19sb2FkX3BhdGNoKCJyZWdpc3RlckVsZW1lbnQiLChmdW5jdGlvbih0LGUsbil7IShmdW5jdGlvbiBvKHQsZSl7dmFyIG49ZS5nZXRHbG9iYWxPYmplY3RzKCk7KG4uaXNCcm93c2VyfHxuLmlzTWl4KSYmInJlZ2lzdGVyRWxlbWVudCJpbiB0LmRvY3VtZW50JiZlLnBhdGNoQ2FsbGJhY2tzKGUsZG9jdW1lbnQsIkRvY3VtZW50IiwicmVnaXN0ZXJFbGVtZW50IixbImNyZWF0ZWRDYWxsYmFjayIsImF0dGFjaGVkQ2FsbGJhY2siLCJkZXRhY2hlZENhbGxiYWNrIiwiYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrIl0pfSkodCxuKX0pKSxlLl9fbG9hZF9wYXRjaCgiRXZlbnRUYXJnZXRMZWdhY3kiLChmdW5jdGlvbih0LGUsbil7X3QodCxuKSxDdChuLHQpfSkpfX0pKCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp2b2lkIDAhPT1HeD9HeDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjp7fSk7Ci8qKgogICAgICAgICAqIEBsaWNlbnNlCiAgICAgICAgICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgICAgICoKICAgICAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAgICAgKi8KdmFyIE10PWYoInpvbmVUYXNrIik7ZnVuY3Rpb24gdnQodCxlLG4sbyl7dmFyIGk9bnVsbCxhPW51bGw7bis9bzt2YXIgcj17fTtmdW5jdGlvbiBzKGUpe3ZhciBuPWUuZGF0YTtyZXR1cm4gbi5hcmdzWzBdPWZ1bmN0aW9uIG8oKXt0cnl7ZS5pbnZva2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZpbmFsbHl7ZS5kYXRhJiZlLmRhdGEuaXNQZXJpb2RpY3x8KCJudW1iZXIiPT10eXBlb2Ygbi5oYW5kbGVJZD9kZWxldGUgcltuLmhhbmRsZUlkXTpuLmhhbmRsZUlkJiYobi5oYW5kbGVJZFtNdF09bnVsbCkpfX0sbi5oYW5kbGVJZD1pLmFwcGx5KHQsbi5hcmdzKSxlfWZ1bmN0aW9uIGwodCl7cmV0dXJuIGEodC5kYXRhLmhhbmRsZUlkKX1pPUEodCxlKz1vLChmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24oaSxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYVswXSl7dmFyIGM9dShlLGFbMF0se2lzUGVyaW9kaWM6IkludGVydmFsIj09PW8sZGVsYXk6IlRpbWVvdXQiPT09b3x8IkludGVydmFsIj09PW8/YVsxXXx8MDp2b2lkIDAsYXJnczphfSxzLGwpO2lmKCFjKXJldHVybiBjO3ZhciBkPWMuZGF0YS5oYW5kbGVJZDtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGQ/cltkXT1jOmQmJihkW010XT1jKSxkJiZkLnJlZiYmZC51bnJlZiYmImZ1bmN0aW9uIj09dHlwZW9mIGQucmVmJiYiZnVuY3Rpb24iPT10eXBlb2YgZC51bnJlZiYmKGMucmVmPWQucmVmLmJpbmQoZCksYy51bnJlZj1kLnVucmVmLmJpbmQoZCkpLCJudW1iZXIiPT10eXBlb2YgZHx8ZD9kOmN9cmV0dXJuIG4uYXBwbHkodCxhKX19KSksYT1BKHQsbiwoZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKG4sbyl7dmFyIGksYT1vWzBdOyJudW1iZXIiPT10eXBlb2YgYT9pPXJbYV06KGk9YSYmYVtNdF0pfHwoaT1hKSxpJiYic3RyaW5nIj09dHlwZW9mIGkudHlwZT8ibm90U2NoZWR1bGVkIiE9PWkuc3RhdGUmJihpLmNhbmNlbEZuJiZpLmRhdGEuaXNQZXJpb2RpY3x8MD09PWkucnVuQ291bnQpJiYoIm51bWJlciI9PXR5cGVvZiBhP2RlbGV0ZSByW2FdOmEmJihhW010XT1udWxsKSxpLnpvbmUuY2FuY2VsVGFzayhpKSk6ZS5hcHBseSh0LG8pfX0pKX0KLyoqCiAgICAgICAgICogQGxpY2Vuc2UKICAgICAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAgICAgKgogICAgICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICAgICAqLwovKioKICAgICAgICAgKiBAbGljZW5zZQogICAgICAgICAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICAgICAqCiAgICAgICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgICAgICovCmZ1bmN0aW9uIHh0KHQsZSl7aWYoIVpvbmVbZS5zeW1ib2woInBhdGNoRXZlbnRUYXJnZXQiKV0pe2Zvcih2YXIgbj1lLmdldEdsb2JhbE9iamVjdHMoKSxvPW4uZXZlbnROYW1lcyxpPW4uem9uZVN5bWJvbEV2ZW50TmFtZXMsYT1uLlRSVUVfU1RSLHI9bi5GQUxTRV9TVFIscz1uLlpPTkVfU1lNQk9MX1BSRUZJWCxsPTA7bDxvLmxlbmd0aDtsKyspe3ZhciBjPW9bbF0sZD1zKyhjK3IpLHA9cysoYythKTtpW2NdPXt9LGlbY11bcl09ZCxpW2NdW2FdPXB9dmFyIG09dC5FdmVudFRhcmdldDtpZihtJiZtLnByb3RvdHlwZSlyZXR1cm4gZS5wYXRjaEV2ZW50VGFyZ2V0KHQsW20mJm0ucHJvdG90eXBlXSksITB9fQovKioKICAgICAgICAgKiBAbGljZW5zZQogICAgICAgICAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICAgICAqCiAgICAgICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgICAgICovClpvbmUuX19sb2FkX3BhdGNoKCJsZWdhY3kiLChmdW5jdGlvbih0KXt2YXIgZT10W1pvbmUuX19zeW1ib2xfXygibGVnYWN5UGF0Y2giKV07ZSYmZSgpfSkpLFpvbmUuX19sb2FkX3BhdGNoKCJ0aW1lcnMiLChmdW5jdGlvbih0KXt2YXIgZT0ic2V0IixuPSJjbGVhciI7dnQodCxlLG4sIlRpbWVvdXQiKSx2dCh0LGUsbiwiSW50ZXJ2YWwiKSx2dCh0LGUsbiwiSW1tZWRpYXRlIil9KSksWm9uZS5fX2xvYWRfcGF0Y2goInJlcXVlc3RBbmltYXRpb25GcmFtZSIsKGZ1bmN0aW9uKHQpe3Z0KHQsInJlcXVlc3QiLCJjYW5jZWwiLCJBbmltYXRpb25GcmFtZSIpLHZ0KHQsIm1velJlcXVlc3QiLCJtb3pDYW5jZWwiLCJBbmltYXRpb25GcmFtZSIpLHZ0KHQsIndlYmtpdFJlcXVlc3QiLCJ3ZWJraXRDYW5jZWwiLCJBbmltYXRpb25GcmFtZSIpfSkpLFpvbmUuX19sb2FkX3BhdGNoKCJibG9ja2luZyIsKGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPVsiYWxlcnQiLCJwcm9tcHQiLCJjb25maXJtIl0sbz0wO288bi5sZW5ndGg7bysrKUEodCxuW29dLChmdW5jdGlvbihuLG8saSl7cmV0dXJuIGZ1bmN0aW9uKG8sYSl7cmV0dXJuIGUuY3VycmVudC5ydW4obix0LGEsaSl9fSkpfSkpLFpvbmUuX19sb2FkX3BhdGNoKCJFdmVudFRhcmdldCIsKGZ1bmN0aW9uKHQsZSxuKXsoZnVuY3Rpb24gbyh0LGUpe2UucGF0Y2hFdmVudFByb3RvdHlwZSh0LGUpfSkodCxuKSx4dCh0LG4pO3ZhciBpPXQuWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldDtpJiZpLnByb3RvdHlwZSYmbi5wYXRjaEV2ZW50VGFyZ2V0KHQsW2kucHJvdG90eXBlXSksRSgiTXV0YXRpb25PYnNlcnZlciIpLEUoIldlYktpdE11dGF0aW9uT2JzZXJ2ZXIiKSxFKCJJbnRlcnNlY3Rpb25PYnNlcnZlciIpLEUoIkZpbGVSZWFkZXIiKX0pKSxab25lLl9fbG9hZF9wYXRjaCgib25fcHJvcGVydHkiLChmdW5jdGlvbih0LGUsbil7dXQobix0KX0pKSxab25lLl9fbG9hZF9wYXRjaCgiY3VzdG9tRWxlbWVudHMiLChmdW5jdGlvbih0LGUsbil7IShmdW5jdGlvbiBvKHQsZSl7dmFyIG49ZS5nZXRHbG9iYWxPYmplY3RzKCk7KG4uaXNCcm93c2VyfHxuLmlzTWl4KSYmdC5jdXN0b21FbGVtZW50cyYmImN1c3RvbUVsZW1lbnRzImluIHQmJmUucGF0Y2hDYWxsYmFja3MoZSx0LmN1c3RvbUVsZW1lbnRzLCJjdXN0b21FbGVtZW50cyIsImRlZmluZSIsWyJjb25uZWN0ZWRDYWxsYmFjayIsImRpc2Nvbm5lY3RlZENhbGxiYWNrIiwiYWRvcHRlZENhbGxiYWNrIiwiYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrIl0pfSkodCxuKX0pKSxab25lLl9fbG9hZF9wYXRjaCgiWEhSIiwoZnVuY3Rpb24odCxlKXshKGZ1bmN0aW9uIG4odCl7dmFyIG49dC5YTUxIdHRwUmVxdWVzdDtpZihuKXt2YXIgcD1uLnByb3RvdHlwZSxtPXBbc10sZz1wW2xdO2lmKCFtKXt2YXIgaD10LlhNTEh0dHBSZXF1ZXN0RXZlbnRUYXJnZXQ7aWYoaCl7dmFyIGI9aC5wcm90b3R5cGU7bT1iW3NdLGc9YltsXX19dmFyIHk9InJlYWR5c3RhdGVjaGFuZ2UiLF89InNjaGVkdWxlZCIsQz1BKHAsIm9wZW4iLChmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0LGUpe3JldHVybiB0W2ldPTA9PWVbMl0sdFtjXT1lWzFdLEMuYXBwbHkodCxlKX19KSksTT1mKCJmZXRjaFRhc2tBYm9ydGluZyIpLHY9ZigiZmV0Y2hUYXNrU2NoZWR1bGluZyIpLHg9QShwLCJzZW5kIiwoZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCxuKXtpZighMD09PWUuY3VycmVudFt2XSlyZXR1cm4geC5hcHBseSh0LG4pO2lmKHRbaV0pcmV0dXJuIHguYXBwbHkodCxuKTt2YXIgbz17dGFyZ2V0OnQsdXJsOnRbY10saXNQZXJpb2RpYzohMSxhcmdzOm4sYWJvcnRlZDohMX0sYT11KCJYTUxIdHRwUmVxdWVzdC5zZW5kIix3LG8sUCxrKTt0JiYhMD09PXRbZF0mJiFvLmFib3J0ZWQmJmEuc3RhdGU9PT1fJiZhLmludm9rZSgpfX0pKSxPPUEocCwiYWJvcnQiLChmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0LG4pe3ZhciBpPShmdW5jdGlvbiBhKHQpe3JldHVybiB0W29dfSkodCk7aWYoaSYmInN0cmluZyI9PXR5cGVvZiBpLnR5cGUpe2lmKG51bGw9PWkuY2FuY2VsRm58fGkuZGF0YSYmaS5kYXRhLmFib3J0ZWQpcmV0dXJuO2kuem9uZS5jYW5jZWxUYXNrKGkpfWVsc2UgaWYoITA9PT1lLmN1cnJlbnRbTV0pcmV0dXJuIE8uYXBwbHkodCxuKX19KSl9ZnVuY3Rpb24gUCh0KXt2YXIgbj10LmRhdGEsaT1uLnRhcmdldDtpW3JdPSExLGlbZF09ITE7dmFyIGM9aVthXTttfHwobT1pW3NdLGc9aVtsXSksYyYmZy5jYWxsKGkseSxjKTt2YXIgcD1pW2FdPWZ1bmN0aW9uKCl7aWYoaS5yZWFkeVN0YXRlPT09aS5ET05FKWlmKCFuLmFib3J0ZWQmJmlbcl0mJnQuc3RhdGU9PT1fKXt2YXIgbz1pW2UuX19zeW1ib2xfXygibG9hZGZhbHNlIildO2lmKG8mJm8ubGVuZ3RoPjApe3ZhciBhPXQuaW52b2tlO3QuaW52b2tlPWZ1bmN0aW9uKCl7Zm9yKHZhciBvPWlbZS5fX3N5bWJvbF9fKCJsb2FkZmFsc2UiKV0scj0wO3I8by5sZW5ndGg7cisrKW9bcl09PT10JiZvLnNwbGljZShyLDEpO24uYWJvcnRlZHx8dC5zdGF0ZSE9PV98fGEuY2FsbCh0KX0sby5wdXNoKHQpfWVsc2UgdC5pbnZva2UoKX1lbHNlIG4uYWJvcnRlZHx8ITEhPT1pW3JdfHwoaVtkXT0hMCl9O3JldHVybiBtLmNhbGwoaSx5LHApLGlbb118fChpW29dPXQpLHguYXBwbHkoaSxuLmFyZ3MpLGlbcl09ITAsdH1mdW5jdGlvbiB3KCl7fWZ1bmN0aW9uIGsodCl7dmFyIGU9dC5kYXRhO3JldHVybiBlLmFib3J0ZWQ9ITAsTy5hcHBseShlLnRhcmdldCxlLmFyZ3MpfX0pKHQpO3ZhciBvPWYoInhoclRhc2siKSxpPWYoInhoclN5bmMiKSxhPWYoInhockxpc3RlbmVyIikscj1mKCJ4aHJTY2hlZHVsZWQiKSxjPWYoInhoclVSTCIpLGQ9ZigieGhyRXJyb3JCZWZvcmVTY2hlZHVsZWQiKX0pKSxab25lLl9fbG9hZF9wYXRjaCgiZ2VvbG9jYXRpb24iLChmdW5jdGlvbihlKXtlLm5hdmlnYXRvciYmZS5uYXZpZ2F0b3IuZ2VvbG9jYXRpb24mJihmdW5jdGlvbiBuKGUsbyl7Zm9yKHZhciBpPWUuY29uc3RydWN0b3IubmFtZSxhPWZ1bmN0aW9uKG4pe3ZhciBhPW9bbl0scj1lW2FdO2lmKHIpe2lmKCFDKHQoZSxhKSkpcmV0dXJuImNvbnRpbnVlIjtlW2FdPShmdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbigpe3JldHVybiB0LmFwcGx5KHRoaXMsXyhhcmd1bWVudHMsaSsiLiIrYSkpfTtyZXR1cm4gVChlLHQpLGV9KShyKX19LHI9MDtyPG8ubGVuZ3RoO3IrKylhKHIpfSkoZS5uYXZpZ2F0b3IuZ2VvbG9jYXRpb24sWyJnZXRDdXJyZW50UG9zaXRpb24iLCJ3YXRjaFBvc2l0aW9uIl0pfSkpLFpvbmUuX19sb2FkX3BhdGNoKCJQcm9taXNlUmVqZWN0aW9uRXZlbnQiLChmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3EodCxlKS5mb3JFYWNoKChmdW5jdGlvbihvKXt2YXIgaT10LlByb21pc2VSZWplY3Rpb25FdmVudDtpZihpKXt2YXIgYT1uZXcgaShlLHtwcm9taXNlOm4ucHJvbWlzZSxyZWFzb246bi5yZWplY3Rpb259KTtvLmludm9rZShhKX19KSl9fXQuUHJvbWlzZVJlamVjdGlvbkV2ZW50JiYoZVtmKCJ1bmhhbmRsZWRQcm9taXNlUmVqZWN0aW9uSGFuZGxlciIpXT1uKCJ1bmhhbmRsZWRyZWplY3Rpb24iKSxlW2YoInJlamVjdGlvbkhhbmRsZWRIYW5kbGVyIildPW4oInJlamVjdGlvbmhhbmRsZWQiKSl9KSl9KSgpOwovKioKICAgICAqIEBsaWNlbnNlIEFuZ3VsYXIgdjExLjIuMTQKICAgICAqIChjKSAyMDEwLTIwMjEgR29vZ2xlIExMQy4gaHR0cHM6Ly9hbmd1bGFyLmlvLwogICAgICogTGljZW5zZTogTUlUCiAgICAgKi8KY2xhc3MgWnh7fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3QgWHg9IioiO2Z1bmN0aW9uIEt4KHQsZSl7cmV0dXJue3R5cGU6NyxuYW1lOnQsZGVmaW5pdGlvbnM6ZSxvcHRpb25zOnt9fX1mdW5jdGlvbiBKeCh0LGU9bnVsbCl7cmV0dXJue3R5cGU6NCxzdHlsZXM6ZSx0aW1pbmdzOnR9fWZ1bmN0aW9uIFF4KHQsZT1udWxsKXtyZXR1cm57dHlwZToyLHN0ZXBzOnQsb3B0aW9uczplfX1mdW5jdGlvbiAkeCh0KXtyZXR1cm57dHlwZTo2LHN0eWxlczp0LG9mZnNldDpudWxsfX1mdW5jdGlvbiB0Tyh0LGUsbil7cmV0dXJue3R5cGU6MCxuYW1lOnQsc3R5bGVzOmUsb3B0aW9uczpufX1mdW5jdGlvbiBlTyh0KXtyZXR1cm57dHlwZTo1LHN0ZXBzOnR9fWZ1bmN0aW9uIG5PKHQsZSxuPW51bGwpe3JldHVybnt0eXBlOjEsZXhwcjp0LGFuaW1hdGlvbjplLG9wdGlvbnM6bn19ZnVuY3Rpb24gb08odD1udWxsKXtyZXR1cm57dHlwZTo5LG9wdGlvbnM6dH19ZnVuY3Rpb24gaU8odCxlLG49bnVsbCl7cmV0dXJue3R5cGU6MTEsc2VsZWN0b3I6dCxhbmltYXRpb246ZSxvcHRpb25zOm59fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiBhTyh0KXtQcm9taXNlLnJlc29sdmUobnVsbCkudGhlbih0KX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY2xhc3Mgck97Y29uc3RydWN0b3IodD0wLGU9MCl7dGhpcy5fb25Eb25lRm5zPVtdLHRoaXMuX29uU3RhcnRGbnM9W10sdGhpcy5fb25EZXN0cm95Rm5zPVtdLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX3Bvc2l0aW9uPTAsdGhpcy5wYXJlbnRQbGF5ZXI9bnVsbCx0aGlzLnRvdGFsVGltZT10K2V9X29uRmluaXNoKCl7dGhpcy5fZmluaXNoZWR8fCh0aGlzLl9maW5pc2hlZD0hMCx0aGlzLl9vbkRvbmVGbnMuZm9yRWFjaCgodD0+dCgpKSksdGhpcy5fb25Eb25lRm5zPVtdKX1vblN0YXJ0KHQpe3RoaXMuX29uU3RhcnRGbnMucHVzaCh0KX1vbkRvbmUodCl7dGhpcy5fb25Eb25lRm5zLnB1c2godCl9b25EZXN0cm95KHQpe3RoaXMuX29uRGVzdHJveUZucy5wdXNoKHQpfWhhc1N0YXJ0ZWQoKXtyZXR1cm4gdGhpcy5fc3RhcnRlZH1pbml0KCl7fXBsYXkoKXt0aGlzLmhhc1N0YXJ0ZWQoKXx8KHRoaXMuX29uU3RhcnQoKSx0aGlzLnRyaWdnZXJNaWNyb3Rhc2soKSksdGhpcy5fc3RhcnRlZD0hMH10cmlnZ2VyTWljcm90YXNrKCl7YU8oKCgpPT50aGlzLl9vbkZpbmlzaCgpKSl9X29uU3RhcnQoKXt0aGlzLl9vblN0YXJ0Rm5zLmZvckVhY2goKHQ9PnQoKSkpLHRoaXMuX29uU3RhcnRGbnM9W119cGF1c2UoKXt9cmVzdGFydCgpe31maW5pc2goKXt0aGlzLl9vbkZpbmlzaCgpfWRlc3Ryb3koKXt0aGlzLl9kZXN0cm95ZWR8fCh0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy5oYXNTdGFydGVkKCl8fHRoaXMuX29uU3RhcnQoKSx0aGlzLmZpbmlzaCgpLHRoaXMuX29uRGVzdHJveUZucy5mb3JFYWNoKCh0PT50KCkpKSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10pfXJlc2V0KCl7fXNldFBvc2l0aW9uKHQpe3RoaXMuX3Bvc2l0aW9uPXRoaXMudG90YWxUaW1lP3QqdGhpcy50b3RhbFRpbWU6MX1nZXRQb3NpdGlvbigpe3JldHVybiB0aGlzLnRvdGFsVGltZT90aGlzLl9wb3NpdGlvbi90aGlzLnRvdGFsVGltZToxfXRyaWdnZXJDYWxsYmFjayh0KXtjb25zdCBlPSJzdGFydCI9PXQ/dGhpcy5fb25TdGFydEZuczp0aGlzLl9vbkRvbmVGbnM7ZS5mb3JFYWNoKCh0PT50KCkpKSxlLmxlbmd0aD0wfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY2xhc3Mgc097Y29uc3RydWN0b3IodCl7dGhpcy5fb25Eb25lRm5zPVtdLHRoaXMuX29uU3RhcnRGbnM9W10sdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fb25EZXN0cm95Rm5zPVtdLHRoaXMucGFyZW50UGxheWVyPW51bGwsdGhpcy50b3RhbFRpbWU9MCx0aGlzLnBsYXllcnM9dDtsZXQgZT0wLG49MCxvPTA7Y29uc3QgaT10aGlzLnBsYXllcnMubGVuZ3RoOzA9PWk/YU8oKCgpPT50aGlzLl9vbkZpbmlzaCgpKSk6dGhpcy5wbGF5ZXJzLmZvckVhY2goKHQ9Pnt0Lm9uRG9uZSgoKCk9PnsrK2U9PWkmJnRoaXMuX29uRmluaXNoKCl9KSksdC5vbkRlc3Ryb3koKCgpPT57KytuPT1pJiZ0aGlzLl9vbkRlc3Ryb3koKX0pKSx0Lm9uU3RhcnQoKCgpPT57KytvPT1pJiZ0aGlzLl9vblN0YXJ0KCl9KSl9KSksdGhpcy50b3RhbFRpbWU9dGhpcy5wbGF5ZXJzLnJlZHVjZSgoKHQsZSk9Pk1hdGgubWF4KHQsZS50b3RhbFRpbWUpKSwwKX1fb25GaW5pc2goKXt0aGlzLl9maW5pc2hlZHx8KHRoaXMuX2ZpbmlzaGVkPSEwLHRoaXMuX29uRG9uZUZucy5mb3JFYWNoKCh0PT50KCkpKSx0aGlzLl9vbkRvbmVGbnM9W10pfWluaXQoKXt0aGlzLnBsYXllcnMuZm9yRWFjaCgodD0+dC5pbml0KCkpKX1vblN0YXJ0KHQpe3RoaXMuX29uU3RhcnRGbnMucHVzaCh0KX1fb25TdGFydCgpe3RoaXMuaGFzU3RhcnRlZCgpfHwodGhpcy5fc3RhcnRlZD0hMCx0aGlzLl9vblN0YXJ0Rm5zLmZvckVhY2goKHQ9PnQoKSkpLHRoaXMuX29uU3RhcnRGbnM9W10pfW9uRG9uZSh0KXt0aGlzLl9vbkRvbmVGbnMucHVzaCh0KX1vbkRlc3Ryb3kodCl7dGhpcy5fb25EZXN0cm95Rm5zLnB1c2godCl9aGFzU3RhcnRlZCgpe3JldHVybiB0aGlzLl9zdGFydGVkfXBsYXkoKXt0aGlzLnBhcmVudFBsYXllcnx8dGhpcy5pbml0KCksdGhpcy5fb25TdGFydCgpLHRoaXMucGxheWVycy5mb3JFYWNoKCh0PT50LnBsYXkoKSkpfXBhdXNlKCl7dGhpcy5wbGF5ZXJzLmZvckVhY2goKHQ9PnQucGF1c2UoKSkpfXJlc3RhcnQoKXt0aGlzLnBsYXllcnMuZm9yRWFjaCgodD0+dC5yZXN0YXJ0KCkpKX1maW5pc2goKXt0aGlzLl9vbkZpbmlzaCgpLHRoaXMucGxheWVycy5mb3JFYWNoKCh0PT50LmZpbmlzaCgpKSl9ZGVzdHJveSgpe3RoaXMuX29uRGVzdHJveSgpfV9vbkRlc3Ryb3koKXt0aGlzLl9kZXN0cm95ZWR8fCh0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy5fb25GaW5pc2goKSx0aGlzLnBsYXllcnMuZm9yRWFjaCgodD0+dC5kZXN0cm95KCkpKSx0aGlzLl9vbkRlc3Ryb3lGbnMuZm9yRWFjaCgodD0+dCgpKSksdGhpcy5fb25EZXN0cm95Rm5zPVtdKX1yZXNldCgpe3RoaXMucGxheWVycy5mb3JFYWNoKCh0PT50LnJlc2V0KCkpKSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMX1zZXRQb3NpdGlvbih0KXtjb25zdCBlPXQqdGhpcy50b3RhbFRpbWU7dGhpcy5wbGF5ZXJzLmZvckVhY2goKHQ9Pntjb25zdCBuPXQudG90YWxUaW1lP01hdGgubWluKDEsZS90LnRvdGFsVGltZSk6MTt0LnNldFBvc2l0aW9uKG4pfSkpfWdldFBvc2l0aW9uKCl7Y29uc3QgdD10aGlzLnBsYXllcnMucmVkdWNlKCgodCxlKT0+bnVsbD09PXR8fGUudG90YWxUaW1lPnQudG90YWxUaW1lP2U6dCksbnVsbCk7cmV0dXJuIG51bGwhPXQ/dC5nZXRQb3NpdGlvbigpOjB9YmVmb3JlRGVzdHJveSgpe3RoaXMucGxheWVycy5mb3JFYWNoKCh0PT57dC5iZWZvcmVEZXN0cm95JiZ0LmJlZm9yZURlc3Ryb3koKX0pKX10cmlnZ2VyQ2FsbGJhY2sodCl7Y29uc3QgZT0ic3RhcnQiPT10P3RoaXMuX29uU3RhcnRGbnM6dGhpcy5fb25Eb25lRm5zO2UuZm9yRWFjaCgodD0+dCgpKSksZS5sZW5ndGg9MH19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIGxPKCl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBwcm9jZXNzJiYiW29iamVjdCBwcm9jZXNzXSI9PT17fS50b1N0cmluZy5jYWxsKHByb2Nlc3MpfWZ1bmN0aW9uIGNPKHQpe3N3aXRjaCh0Lmxlbmd0aCl7Y2FzZSAwOnJldHVybiBuZXcgck87Y2FzZSAxOnJldHVybiB0WzBdO2RlZmF1bHQ6cmV0dXJuIG5ldyBzTyh0KX19ZnVuY3Rpb24gZE8odCxlLG4sbyxpPXt9LGE9e30pe2NvbnN0IHI9W10scz1bXTtsZXQgbD0tMSxjPW51bGw7aWYoby5mb3JFYWNoKCh0PT57Y29uc3Qgbj10Lm9mZnNldCxvPW49PWwsZD1vJiZjfHx7fTtPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChuPT57bGV0IG89bixzPXRbbl07aWYoIm9mZnNldCIhPT1uKXN3aXRjaChvPWUubm9ybWFsaXplUHJvcGVydHlOYW1lKG8scikscyl7Y2FzZSIhIjpzPWlbbl07YnJlYWs7Y2FzZSBYeDpzPWFbbl07YnJlYWs7ZGVmYXVsdDpzPWUubm9ybWFsaXplU3R5bGVWYWx1ZShuLG8scyxyKX1kW29dPXN9KSksb3x8cy5wdXNoKGQpLGM9ZCxsPW59KSksci5sZW5ndGgpe2NvbnN0IHQ9IlxuIC0gIjt0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBhbmltYXRlIGR1ZSB0byB0aGUgZm9sbG93aW5nIGVycm9yczoke3R9JHtyLmpvaW4odCl9YCl9cmV0dXJuIHN9ZnVuY3Rpb24gcE8odCxlLG4sbyl7c3dpdGNoKGUpe2Nhc2Uic3RhcnQiOnQub25TdGFydCgoKCk9Pm8obiYmbU8obiwic3RhcnQiLHQpKSkpO2JyZWFrO2Nhc2UiZG9uZSI6dC5vbkRvbmUoKCgpPT5vKG4mJm1PKG4sImRvbmUiLHQpKSkpO2JyZWFrO2Nhc2UiZGVzdHJveSI6dC5vbkRlc3Ryb3koKCgpPT5vKG4mJm1PKG4sImRlc3Ryb3kiLHQpKSkpfX1mdW5jdGlvbiBtTyh0LGUsbil7Y29uc3Qgbz1uLnRvdGFsVGltZSxpPXVPKHQuZWxlbWVudCx0LnRyaWdnZXJOYW1lLHQuZnJvbVN0YXRlLHQudG9TdGF0ZSxlfHx0LnBoYXNlTmFtZSxudWxsPT1vP3QudG90YWxUaW1lOm8sISFuLmRpc2FibGVkKSxhPXQuX2RhdGE7cmV0dXJuIG51bGwhPWEmJihpLl9kYXRhPWEpLGl9ZnVuY3Rpb24gdU8odCxlLG4sbyxpPSIiLGE9MCxyKXtyZXR1cm57ZWxlbWVudDp0LHRyaWdnZXJOYW1lOmUsZnJvbVN0YXRlOm4sdG9TdGF0ZTpvLHBoYXNlTmFtZTppLHRvdGFsVGltZTphLGRpc2FibGVkOiEhcn19ZnVuY3Rpb24gZk8odCxlLG4pe2xldCBvO3JldHVybiB0IGluc3RhbmNlb2YgTWFwPyhvPXQuZ2V0KGUpLG98fHQuc2V0KGUsbz1uKSk6KG89dFtlXSxvfHwobz10W2VdPW4pKSxvfWZ1bmN0aW9uIGdPKHQpe2NvbnN0IGU9dC5pbmRleE9mKCI6Iik7cmV0dXJuW3Quc3Vic3RyaW5nKDEsZSksdC5zdWJzdHIoZSsxKV19bGV0IGhPPSh0LGUpPT4hMSxiTz0odCxlKT0+ITEseU89KHQsZSxuKT0+W107Y29uc3QgX089bE8oKTsoX098fCJ1bmRlZmluZWQiIT10eXBlb2YgRWxlbWVudCkmJihoTz0odCxlKT0+dC5jb250YWlucyhlKSxiTz0oKCk9PntpZihfT3x8RWxlbWVudC5wcm90b3R5cGUubWF0Y2hlcylyZXR1cm4odCxlKT0+dC5tYXRjaGVzKGUpO3tjb25zdCB0PUVsZW1lbnQucHJvdG90eXBlLGU9dC5tYXRjaGVzU2VsZWN0b3J8fHQubW96TWF0Y2hlc1NlbGVjdG9yfHx0Lm1zTWF0Y2hlc1NlbGVjdG9yfHx0Lm9NYXRjaGVzU2VsZWN0b3J8fHQud2Via2l0TWF0Y2hlc1NlbGVjdG9yO3JldHVybiBlPyh0LG4pPT5lLmFwcGx5KHQsW25dKTpiT319KSgpLHlPPSh0LGUsbik9PntsZXQgbz1bXTtpZihuKXtjb25zdCBuPXQucXVlcnlTZWxlY3RvckFsbChlKTtmb3IobGV0IHQ9MDt0PG4ubGVuZ3RoO3QrKylvLnB1c2goblt0XSl9ZWxzZXtjb25zdCBuPXQucXVlcnlTZWxlY3RvcihlKTtuJiZvLnB1c2gobil9cmV0dXJuIG99KTtsZXQgQ089bnVsbCxNTz0hMTtmdW5jdGlvbiB2Tyh0KXtDT3x8KENPPShmdW5jdGlvbiBlKCl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudD9kb2N1bWVudC5ib2R5Om51bGx9KSgpfHx7fSxNTz0hIUNPLnN0eWxlJiYiV2Via2l0QXBwZWFyYW5jZSJpbiBDTy5zdHlsZSk7bGV0IG49ITA7cmV0dXJuIENPLnN0eWxlJiYhKGZ1bmN0aW9uIG8odCl7cmV0dXJuImVia2l0Ij09dC5zdWJzdHJpbmcoMSw2KX0pKHQpJiYobj10IGluIENPLnN0eWxlLCFuJiZNTykmJihuPSJXZWJraXQiK3QuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrdC5zdWJzdHIoMSlpbiBDTy5zdHlsZSksbn1jb25zdCB4Tz1iTyxPTz1oTyxQTz15TztmdW5jdGlvbiB3Tyh0KXtjb25zdCBlPXt9O3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChuPT57Y29uc3Qgbz1uLnJlcGxhY2UoLyhbYS16XSkoW0EtWl0pL2csIiQxLSQyIik7ZVtvXT10W25dfSkpLGV9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NsYXNzIGtPe3ZhbGlkYXRlU3R5bGVQcm9wZXJ0eSh0KXtyZXR1cm4gdk8odCl9bWF0Y2hlc0VsZW1lbnQodCxlKXtyZXR1cm4geE8odCxlKX1jb250YWluc0VsZW1lbnQodCxlKXtyZXR1cm4gT08odCxlKX1xdWVyeSh0LGUsbil7cmV0dXJuIFBPKHQsZSxuKX1jb21wdXRlU3R5bGUodCxlLG4pe3JldHVybiBufHwiIn1hbmltYXRlKHQsZSxuLG8saSxhPVtdLHIpe3JldHVybiBuZXcgck8obixvKX19a08uybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGtPKX0sa08uybVwcm92PWxvKHt0b2tlbjprTyxmYWN0b3J5OmtPLsm1ZmFjfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihrTyxbe3R5cGU6Sm19XSxudWxsLG51bGwpO2NsYXNzIFNPe31TTy5OT09QPW5ldyBrTzsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IERPPSJuZy1lbnRlciIsRU89Im5nLWxlYXZlIixBTz0ibmctdHJpZ2dlciIsUk89Ii5uZy10cmlnZ2VyIixUTz0ibmctYW5pbWF0aW5nIixOTz0iLm5nLWFuaW1hdGluZyI7ZnVuY3Rpb24gSU8odCl7aWYoIm51bWJlciI9PXR5cGVvZiB0KXJldHVybiB0O2NvbnN0IGU9dC5tYXRjaCgvXigtP1tcLlxkXSspKG0/cykvKTtyZXR1cm4hZXx8ZS5sZW5ndGg8Mj8wOnpPKHBhcnNlRmxvYXQoZVsxXSksZVsyXSl9ZnVuY3Rpb24gek8odCxlKXtzd2l0Y2goZSl7Y2FzZSJzIjpyZXR1cm4gMWUzKnQ7ZGVmYXVsdDpyZXR1cm4gdH19ZnVuY3Rpb24gSE8odCxlLG4pe3JldHVybiB0Lmhhc093blByb3BlcnR5KCJkdXJhdGlvbiIpP3Q6KGZ1bmN0aW9uIG8odCxlLG4pe2xldCBvLGk9MCxhPSIiO2lmKCJzdHJpbmciPT10eXBlb2YgdCl7Y29uc3Qgbj10Lm1hdGNoKC9eKC0/W1wuXGRdKykobT9zKSg/OlxzKygtP1tcLlxkXSspKG0/cykpPyg/OlxzKyhbLWEtel0rKD86XCguKz9cKSk/KSk/JC9pKTtpZihudWxsPT09bilyZXR1cm4gZS5wdXNoKGBUaGUgcHJvdmlkZWQgdGltaW5nIHZhbHVlICIke3R9IiBpcyBpbnZhbGlkLmApLHtkdXJhdGlvbjowLGRlbGF5OjAsZWFzaW5nOiIifTtvPXpPKHBhcnNlRmxvYXQoblsxXSksblsyXSk7Y29uc3Qgcj1uWzNdO251bGwhPXImJihpPXpPKHBhcnNlRmxvYXQociksbls0XSkpO2NvbnN0IHM9bls1XTtzJiYoYT1zKX1lbHNlIG89dDtpZighbil7bGV0IG49ITEsYT1lLmxlbmd0aDtvPDAmJihlLnB1c2goIkR1cmF0aW9uIHZhbHVlcyBiZWxvdyAwIGFyZSBub3QgYWxsb3dlZCBmb3IgdGhpcyBhbmltYXRpb24gc3RlcC4iKSxuPSEwKSxpPDAmJihlLnB1c2goIkRlbGF5IHZhbHVlcyBiZWxvdyAwIGFyZSBub3QgYWxsb3dlZCBmb3IgdGhpcyBhbmltYXRpb24gc3RlcC4iKSxuPSEwKSxuJiZlLnNwbGljZShhLDAsYFRoZSBwcm92aWRlZCB0aW1pbmcgdmFsdWUgIiR7dH0iIGlzIGludmFsaWQuYCl9cmV0dXJue2R1cmF0aW9uOm8sZGVsYXk6aSxlYXNpbmc6YX19KSh0LGUsbil9ZnVuY3Rpb24gRk8odCxlPXt9KXtyZXR1cm4gT2JqZWN0LmtleXModCkuZm9yRWFjaCgobj0+e2Vbbl09dFtuXX0pKSxlfWZ1bmN0aW9uIExPKHQsZSxuPXt9KXtpZihlKWZvcihsZXQgZSBpbiB0KW5bZV09dFtlXTtlbHNlIEZPKHQsbik7cmV0dXJuIG59ZnVuY3Rpb24gQk8odCxlLG4pe3JldHVybiBuP2UrIjoiK24rIjsiOiIifWZ1bmN0aW9uIFZPKHQpe2xldCBlPSIiO2ZvcihsZXQgbj0wO248dC5zdHlsZS5sZW5ndGg7bisrKXtjb25zdCBvPXQuc3R5bGUuaXRlbShuKTtlKz1CTygwLG8sdC5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKG8pKX1mb3IoY29uc3QgbiBpbiB0LnN0eWxlKXQuc3R5bGUuaGFzT3duUHJvcGVydHkobikmJiFuLnN0YXJ0c1dpdGgoIl8iKSYmKGUrPUJPKDAsbi5yZXBsYWNlKC8oW2Etel0pKFtBLVpdKS9nLCIkMS0kMiIpLnRvTG93ZXJDYXNlKCksdC5zdHlsZVtuXSkpO3Quc2V0QXR0cmlidXRlKCJzdHlsZSIsZSl9ZnVuY3Rpb24gak8odCxlLG4pe3Quc3R5bGUmJihPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChvPT57Y29uc3QgaT1LTyhvKTtuJiYhbi5oYXNPd25Qcm9wZXJ0eShvKSYmKG5bb109dC5zdHlsZVtpXSksdC5zdHlsZVtpXT1lW29dfSkpLGxPKCkmJlZPKHQpKX1mdW5jdGlvbiBVTyh0LGUpe3Quc3R5bGUmJihPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChlPT57Y29uc3Qgbj1LTyhlKTt0LnN0eWxlW25dPSIifSkpLGxPKCkmJlZPKHQpKX1mdW5jdGlvbiBXTyh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT8xPT10Lmxlbmd0aD90WzBdOlF4KHQpOnR9Y29uc3QgR089bmV3IFJlZ0V4cCgie3tcXHMqKC4rPylcXHMqfX0iLCJnIik7ZnVuY3Rpb24gWU8odCl7bGV0IGU9W107aWYoInN0cmluZyI9PXR5cGVvZiB0KXtsZXQgbjtmb3IoO249R08uZXhlYyh0KTspZS5wdXNoKG5bMV0pO0dPLmxhc3RJbmRleD0wfXJldHVybiBlfWZ1bmN0aW9uIHFPKHQsZSxuKXtjb25zdCBvPXQudG9TdHJpbmcoKSxpPW8ucmVwbGFjZShHTywoKHQsbyk9PntsZXQgaT1lW29dO3JldHVybiBlLmhhc093blByb3BlcnR5KG8pfHwobi5wdXNoKGBQbGVhc2UgcHJvdmlkZSBhIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIHBhcmFtICR7b31gKSxpPSIiKSxpLnRvU3RyaW5nKCl9KSk7cmV0dXJuIGk9PW8/dDppfWZ1bmN0aW9uIFpPKHQpe2NvbnN0IGU9W107bGV0IG49dC5uZXh0KCk7Zm9yKDshbi5kb25lOyllLnB1c2gobi52YWx1ZSksbj10Lm5leHQoKTtyZXR1cm4gZX1jb25zdCBYTz0vLSsoW2EtejAtOV0pL2c7ZnVuY3Rpb24gS08odCl7cmV0dXJuIHQucmVwbGFjZShYTywoKC4uLnQpPT50WzFdLnRvVXBwZXJDYXNlKCkpKX1mdW5jdGlvbiBKTyh0LGUpe3JldHVybiAwPT09dHx8MD09PWV9ZnVuY3Rpb24gUU8odCxlLG4pe2NvbnN0IG89T2JqZWN0LmtleXMobik7aWYoby5sZW5ndGgmJmUubGVuZ3RoKXtsZXQgYT1lWzBdLHI9W107aWYoby5mb3JFYWNoKCh0PT57YS5oYXNPd25Qcm9wZXJ0eSh0KXx8ci5wdXNoKHQpLGFbdF09blt0XX0pKSxyLmxlbmd0aClmb3IodmFyIGk9MTtpPGUubGVuZ3RoO2krKyl7bGV0IG49ZVtpXTtyLmZvckVhY2goKGZ1bmN0aW9uKGUpe25bZV09dFAodCxlKX0pKX19cmV0dXJuIGV9ZnVuY3Rpb24gJE8odCxlLG4pe3N3aXRjaChlLnR5cGUpe2Nhc2UgNzpyZXR1cm4gdC52aXNpdFRyaWdnZXIoZSxuKTtjYXNlIDA6cmV0dXJuIHQudmlzaXRTdGF0ZShlLG4pO2Nhc2UgMTpyZXR1cm4gdC52aXNpdFRyYW5zaXRpb24oZSxuKTtjYXNlIDI6cmV0dXJuIHQudmlzaXRTZXF1ZW5jZShlLG4pO2Nhc2UgMzpyZXR1cm4gdC52aXNpdEdyb3VwKGUsbik7Y2FzZSA0OnJldHVybiB0LnZpc2l0QW5pbWF0ZShlLG4pO2Nhc2UgNTpyZXR1cm4gdC52aXNpdEtleWZyYW1lcyhlLG4pO2Nhc2UgNjpyZXR1cm4gdC52aXNpdFN0eWxlKGUsbik7Y2FzZSA4OnJldHVybiB0LnZpc2l0UmVmZXJlbmNlKGUsbik7Y2FzZSA5OnJldHVybiB0LnZpc2l0QW5pbWF0ZUNoaWxkKGUsbik7Y2FzZSAxMDpyZXR1cm4gdC52aXNpdEFuaW1hdGVSZWYoZSxuKTtjYXNlIDExOnJldHVybiB0LnZpc2l0UXVlcnkoZSxuKTtjYXNlIDEyOnJldHVybiB0LnZpc2l0U3RhZ2dlcihlLG4pO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gcmVzb2x2ZSBhbmltYXRpb24gbWV0YWRhdGEgbm9kZSAjJHtlLnR5cGV9YCl9fWZ1bmN0aW9uIHRQKHQsZSl7cmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQpW2VdfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jb25zdCBlUD0iKiI7ZnVuY3Rpb24gblAodCxlKXtjb25zdCBuPVtdO3JldHVybiJzdHJpbmciPT10eXBlb2YgdD90LnNwbGl0KC9ccyosXHMqLykuZm9yRWFjaCgodD0+KGZ1bmN0aW9uIG8odCxlLG4pe2lmKCI6Ij09dFswXSl7Y29uc3Qgbz0oZnVuY3Rpb24gbyh0LGUpe3N3aXRjaCh0KXtjYXNlIjplbnRlciI6cmV0dXJuInZvaWQgPT4gKiI7Y2FzZSI6bGVhdmUiOnJldHVybiIqID0+IHZvaWQiO2Nhc2UiOmluY3JlbWVudCI6cmV0dXJuKHQsZSk9PnBhcnNlRmxvYXQoZSk+cGFyc2VGbG9hdCh0KTtjYXNlIjpkZWNyZW1lbnQiOnJldHVybih0LGUpPT5wYXJzZUZsb2F0KGUpPHBhcnNlRmxvYXQodCk7ZGVmYXVsdDpyZXR1cm4gZS5wdXNoKGBUaGUgdHJhbnNpdGlvbiBhbGlhcyB2YWx1ZSAiJHt0fSIgaXMgbm90IHN1cHBvcnRlZGApLCIqID0+ICoifX0pKHQsbik7aWYoImZ1bmN0aW9uIj09dHlwZW9mIG8pcmV0dXJuIHZvaWQgZS5wdXNoKG8pO3Q9b31jb25zdCBpPXQubWF0Y2goL14oXCp8Wy1cd10rKVxzKig8P1s9LV0+KVxzKihcKnxbLVx3XSspJC8pO2lmKG51bGw9PWl8fGkubGVuZ3RoPDQpcmV0dXJuIG4ucHVzaChgVGhlIHByb3ZpZGVkIHRyYW5zaXRpb24gZXhwcmVzc2lvbiAiJHt0fSIgaXMgbm90IHN1cHBvcnRlZGApLGU7Y29uc3QgYT1pWzFdLHI9aVsyXSxzPWlbM107ZS5wdXNoKGFQKGEscykpLCI8IiE9clswXXx8YT09ZVAmJnM9PWVQfHxlLnB1c2goYVAocyxhKSl9KSh0LG4sZSkpKTpuLnB1c2godCksbn1jb25zdCBvUD1uZXcgU2V0KFsidHJ1ZSIsIjEiXSksaVA9bmV3IFNldChbImZhbHNlIiwiMCJdKTtmdW5jdGlvbiBhUCh0LGUpe2NvbnN0IG49b1AuaGFzKHQpfHxpUC5oYXModCksbz1vUC5oYXMoZSl8fGlQLmhhcyhlKTtyZXR1cm4oaSxhKT0+e2xldCByPXQ9PWVQfHx0PT1pLHM9ZT09ZVB8fGU9PWE7cmV0dXJuIXImJm4mJiJib29sZWFuIj09dHlwZW9mIGkmJihyPWk/b1AuaGFzKHQpOmlQLmhhcyh0KSksIXMmJm8mJiJib29sZWFuIj09dHlwZW9mIGEmJihzPWE/b1AuaGFzKGUpOmlQLmhhcyhlKSksciYmc319Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NvbnN0IHJQPW5ldyBSZWdFeHAoInMqOnNlbGZzKiw/IiwiZyIpO2Z1bmN0aW9uIHNQKHQsZSxuKXtyZXR1cm4gbmV3IGxQKHQpLmJ1aWxkKGUsbil9Y2xhc3MgbFB7Y29uc3RydWN0b3IodCl7dGhpcy5fZHJpdmVyPXR9YnVpbGQodCxlKXtjb25zdCBuPW5ldyBjUChlKTtyZXR1cm4gdGhpcy5fcmVzZXRDb250ZXh0U3R5bGVUaW1pbmdTdGF0ZShuKSwkTyh0aGlzLFdPKHQpLG4pfV9yZXNldENvbnRleHRTdHlsZVRpbWluZ1N0YXRlKHQpe3QuY3VycmVudFF1ZXJ5U2VsZWN0b3I9IiIsdC5jb2xsZWN0ZWRTdHlsZXM9e30sdC5jb2xsZWN0ZWRTdHlsZXNbIiJdPXt9LHQuY3VycmVudFRpbWU9MH12aXNpdFRyaWdnZXIodCxlKXtsZXQgbj1lLnF1ZXJ5Q291bnQ9MCxvPWUuZGVwQ291bnQ9MDtjb25zdCBpPVtdLGE9W107cmV0dXJuIkAiPT10Lm5hbWUuY2hhckF0KDApJiZlLmVycm9ycy5wdXNoKCJhbmltYXRpb24gdHJpZ2dlcnMgY2Fubm90IGJlIHByZWZpeGVkIHdpdGggYW4gYEBgIHNpZ24gKGUuZy4gdHJpZ2dlcignQGZvbycsIFsuLi5dKSkiKSx0LmRlZmluaXRpb25zLmZvckVhY2goKHQ9PntpZih0aGlzLl9yZXNldENvbnRleHRTdHlsZVRpbWluZ1N0YXRlKGUpLDA9PXQudHlwZSl7Y29uc3Qgbj10LG89bi5uYW1lO28udG9TdHJpbmcoKS5zcGxpdCgvXHMqLFxzKi8pLmZvckVhY2goKHQ9PntuLm5hbWU9dCxpLnB1c2godGhpcy52aXNpdFN0YXRlKG4sZSkpfSkpLG4ubmFtZT1vfWVsc2UgaWYoMT09dC50eXBlKXtjb25zdCBpPXRoaXMudmlzaXRUcmFuc2l0aW9uKHQsZSk7bis9aS5xdWVyeUNvdW50LG8rPWkuZGVwQ291bnQsYS5wdXNoKGkpfWVsc2UgZS5lcnJvcnMucHVzaCgib25seSBzdGF0ZSgpIGFuZCB0cmFuc2l0aW9uKCkgZGVmaW5pdGlvbnMgY2FuIHNpdCBpbnNpZGUgb2YgYSB0cmlnZ2VyKCkiKX0pKSx7dHlwZTo3LG5hbWU6dC5uYW1lLHN0YXRlczppLHRyYW5zaXRpb25zOmEscXVlcnlDb3VudDpuLGRlcENvdW50Om8sb3B0aW9uczpudWxsfX12aXNpdFN0YXRlKHQsZSl7Y29uc3Qgbj10aGlzLnZpc2l0U3R5bGUodC5zdHlsZXMsZSksbz10Lm9wdGlvbnMmJnQub3B0aW9ucy5wYXJhbXN8fG51bGw7aWYobi5jb250YWluc0R5bmFtaWNTdHlsZXMpe2NvbnN0IGk9bmV3IFNldCxhPW98fHt9O2lmKG4uc3R5bGVzLmZvckVhY2goKHQ9PntpZihkUCh0KSl7Y29uc3QgZT10O09iamVjdC5rZXlzKGUpLmZvckVhY2goKHQ9PntZTyhlW3RdKS5mb3JFYWNoKCh0PT57YS5oYXNPd25Qcm9wZXJ0eSh0KXx8aS5hZGQodCl9KSl9KSl9fSkpLGkuc2l6ZSl7Y29uc3Qgbj1aTyhpLnZhbHVlcygpKTtlLmVycm9ycy5wdXNoKGBzdGF0ZSgiJHt0Lm5hbWV9IiwgLi4uKSBtdXN0IGRlZmluZSBkZWZhdWx0IHZhbHVlcyBmb3IgYWxsIHRoZSBmb2xsb3dpbmcgc3R5bGUgc3Vic3RpdHV0aW9uczogJHtuLmpvaW4oIiwgIil9YCl9fXJldHVybnt0eXBlOjAsbmFtZTp0Lm5hbWUsc3R5bGU6bixvcHRpb25zOm8/e3BhcmFtczpvfTpudWxsfX12aXNpdFRyYW5zaXRpb24odCxlKXtlLnF1ZXJ5Q291bnQ9MCxlLmRlcENvdW50PTA7Y29uc3Qgbj0kTyh0aGlzLFdPKHQuYW5pbWF0aW9uKSxlKTtyZXR1cm57dHlwZToxLG1hdGNoZXJzOm5QKHQuZXhwcixlLmVycm9ycyksYW5pbWF0aW9uOm4scXVlcnlDb3VudDplLnF1ZXJ5Q291bnQsZGVwQ291bnQ6ZS5kZXBDb3VudCxvcHRpb25zOnBQKHQub3B0aW9ucyl9fXZpc2l0U2VxdWVuY2UodCxlKXtyZXR1cm57dHlwZToyLHN0ZXBzOnQuc3RlcHMubWFwKCh0PT4kTyh0aGlzLHQsZSkpKSxvcHRpb25zOnBQKHQub3B0aW9ucyl9fXZpc2l0R3JvdXAodCxlKXtjb25zdCBuPWUuY3VycmVudFRpbWU7bGV0IG89MDtjb25zdCBpPXQuc3RlcHMubWFwKCh0PT57ZS5jdXJyZW50VGltZT1uO2NvbnN0IGk9JE8odGhpcyx0LGUpO3JldHVybiBvPU1hdGgubWF4KG8sZS5jdXJyZW50VGltZSksaX0pKTtyZXR1cm4gZS5jdXJyZW50VGltZT1vLHt0eXBlOjMsc3RlcHM6aSxvcHRpb25zOnBQKHQub3B0aW9ucyl9fXZpc2l0QW5pbWF0ZSh0LGUpe2NvbnN0IG49KGZ1bmN0aW9uIG8odCxlKXtsZXQgbj1udWxsO2lmKHQuaGFzT3duUHJvcGVydHkoImR1cmF0aW9uIikpbj10O2Vsc2UgaWYoIm51bWJlciI9PXR5cGVvZiB0KXJldHVybiBtUChITyh0LGUpLmR1cmF0aW9uLDAsIiIpO2NvbnN0IG89dDtpZihvLnNwbGl0KC9ccysvKS5zb21lKCh0PT4ieyI9PXQuY2hhckF0KDApJiYieyI9PXQuY2hhckF0KDEpKSkpe2NvbnN0IHQ9bVAoMCwwLCIiKTtyZXR1cm4gdC5keW5hbWljPSEwLHQuc3RyVmFsdWU9byx0fXJldHVybiBuPW58fEhPKG8sZSksbVAobi5kdXJhdGlvbixuLmRlbGF5LG4uZWFzaW5nKX0pKHQudGltaW5ncyxlLmVycm9ycyk7bGV0IGk7ZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bjtsZXQgYT10LnN0eWxlcz90LnN0eWxlczokeCh7fSk7aWYoNT09YS50eXBlKWk9dGhpcy52aXNpdEtleWZyYW1lcyhhLGUpO2Vsc2V7bGV0IG89dC5zdHlsZXMsYT0hMTtpZighbyl7YT0hMDtjb25zdCB0PXt9O24uZWFzaW5nJiYodC5lYXNpbmc9bi5lYXNpbmcpLG89JHgodCl9ZS5jdXJyZW50VGltZSs9bi5kdXJhdGlvbituLmRlbGF5O2NvbnN0IHI9dGhpcy52aXNpdFN0eWxlKG8sZSk7ci5pc0VtcHR5U3RlcD1hLGk9cn1yZXR1cm4gZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bnVsbCx7dHlwZTo0LHRpbWluZ3M6bixzdHlsZTppLG9wdGlvbnM6bnVsbH19dmlzaXRTdHlsZSh0LGUpe2NvbnN0IG49dGhpcy5fbWFrZVN0eWxlQXN0KHQsZSk7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlU3R5bGVBc3QobixlKSxufV9tYWtlU3R5bGVBc3QodCxlKXtjb25zdCBuPVtdO0FycmF5LmlzQXJyYXkodC5zdHlsZXMpP3Quc3R5bGVzLmZvckVhY2goKHQ9Pnsic3RyaW5nIj09dHlwZW9mIHQ/dD09WHg/bi5wdXNoKHQpOmUuZXJyb3JzLnB1c2goYFRoZSBwcm92aWRlZCBzdHlsZSBzdHJpbmcgdmFsdWUgJHt0fSBpcyBub3QgYWxsb3dlZC5gKTpuLnB1c2godCl9KSk6bi5wdXNoKHQuc3R5bGVzKTtsZXQgbz0hMSxpPW51bGw7cmV0dXJuIG4uZm9yRWFjaCgodD0+e2lmKGRQKHQpKXtjb25zdCBlPXQsbj1lLmVhc2luZztpZihuJiYoaT1uLGRlbGV0ZSBlLmVhc2luZyksIW8pZm9yKGxldCB0IGluIGUpaWYoZVt0XS50b1N0cmluZygpLmluZGV4T2YoInt7Iik+PTApe289ITA7YnJlYWt9fX0pKSx7dHlwZTo2LHN0eWxlczpuLGVhc2luZzppLG9mZnNldDp0Lm9mZnNldCxjb250YWluc0R5bmFtaWNTdHlsZXM6byxvcHRpb25zOm51bGx9fV92YWxpZGF0ZVN0eWxlQXN0KHQsZSl7Y29uc3Qgbj1lLmN1cnJlbnRBbmltYXRlVGltaW5ncztsZXQgbz1lLmN1cnJlbnRUaW1lLGk9ZS5jdXJyZW50VGltZTtuJiZpPjAmJihpLT1uLmR1cmF0aW9uK24uZGVsYXkpLHQuc3R5bGVzLmZvckVhY2goKHQ9Pnsic3RyaW5nIiE9dHlwZW9mIHQmJk9iamVjdC5rZXlzKHQpLmZvckVhY2goKG49PntpZighdGhpcy5fZHJpdmVyLnZhbGlkYXRlU3R5bGVQcm9wZXJ0eShuKSlyZXR1cm4gdm9pZCBlLmVycm9ycy5wdXNoKGBUaGUgcHJvdmlkZWQgYW5pbWF0aW9uIHByb3BlcnR5ICIke259IiBpcyBub3QgYSBzdXBwb3J0ZWQgQ1NTIHByb3BlcnR5IGZvciBhbmltYXRpb25zYCk7Y29uc3QgYT1lLmNvbGxlY3RlZFN0eWxlc1tlLmN1cnJlbnRRdWVyeVNlbGVjdG9yXSxyPWFbbl07bGV0IHM9ITA7ciYmKGkhPW8mJmk+PXIuc3RhcnRUaW1lJiZvPD1yLmVuZFRpbWUmJihlLmVycm9ycy5wdXNoKGBUaGUgQ1NTIHByb3BlcnR5ICIke259IiB0aGF0IGV4aXN0cyBiZXR3ZWVuIHRoZSB0aW1lcyBvZiAiJHtyLnN0YXJ0VGltZX1tcyIgYW5kICIke3IuZW5kVGltZX1tcyIgaXMgYWxzbyBiZWluZyBhbmltYXRlZCBpbiBhIHBhcmFsbGVsIGFuaW1hdGlvbiBiZXR3ZWVuIHRoZSB0aW1lcyBvZiAiJHtpfW1zIiBhbmQgIiR7b31tcyJgKSxzPSExKSxpPXIuc3RhcnRUaW1lKSxzJiYoYVtuXT17c3RhcnRUaW1lOmksZW5kVGltZTpvfSksZS5vcHRpb25zJiYoZnVuY3Rpb24gbCh0LGUsbil7Y29uc3Qgbz1lLnBhcmFtc3x8e30saT1ZTyh0KTtpLmxlbmd0aCYmaS5mb3JFYWNoKCh0PT57by5oYXNPd25Qcm9wZXJ0eSh0KXx8bi5wdXNoKGBVbmFibGUgdG8gcmVzb2x2ZSB0aGUgbG9jYWwgYW5pbWF0aW9uIHBhcmFtICR7dH0gaW4gdGhlIGdpdmVuIGxpc3Qgb2YgdmFsdWVzYCl9KSl9KSh0W25dLGUub3B0aW9ucyxlLmVycm9ycyl9KSl9KSl9dmlzaXRLZXlmcmFtZXModCxlKXtjb25zdCBuPXt0eXBlOjUsc3R5bGVzOltdLG9wdGlvbnM6bnVsbH07aWYoIWUuY3VycmVudEFuaW1hdGVUaW1pbmdzKXJldHVybiBlLmVycm9ycy5wdXNoKCJrZXlmcmFtZXMoKSBtdXN0IGJlIHBsYWNlZCBpbnNpZGUgb2YgYSBjYWxsIHRvIGFuaW1hdGUoKSIpLG47bGV0IG89MDtjb25zdCBpPVtdO2xldCBhPSExLHI9ITEscz0wO2NvbnN0IGw9dC5zdGVwcy5tYXAoKHQ9Pntjb25zdCBuPXRoaXMuX21ha2VTdHlsZUFzdCh0LGUpO2xldCBsPW51bGwhPW4ub2Zmc2V0P24ub2Zmc2V0OihmdW5jdGlvbiBjKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gbnVsbDtsZXQgZT1udWxsO2lmKEFycmF5LmlzQXJyYXkodCkpdC5mb3JFYWNoKCh0PT57aWYoZFAodCkmJnQuaGFzT3duUHJvcGVydHkoIm9mZnNldCIpKXtjb25zdCBuPXQ7ZT1wYXJzZUZsb2F0KG4ub2Zmc2V0KSxkZWxldGUgbi5vZmZzZXR9fSkpO2Vsc2UgaWYoZFAodCkmJnQuaGFzT3duUHJvcGVydHkoIm9mZnNldCIpKXtjb25zdCBuPXQ7ZT1wYXJzZUZsb2F0KG4ub2Zmc2V0KSxkZWxldGUgbi5vZmZzZXR9cmV0dXJuIGV9KShuLnN0eWxlcyksZD0wO3JldHVybiBudWxsIT1sJiYobysrLGQ9bi5vZmZzZXQ9bCkscj1yfHxkPDB8fGQ+MSxhPWF8fGQ8cyxzPWQsaS5wdXNoKGQpLG59KSk7ciYmZS5lcnJvcnMucHVzaCgiUGxlYXNlIGVuc3VyZSB0aGF0IGFsbCBrZXlmcmFtZSBvZmZzZXRzIGFyZSBiZXR3ZWVuIDAgYW5kIDEiKSxhJiZlLmVycm9ycy5wdXNoKCJQbGVhc2UgZW5zdXJlIHRoYXQgYWxsIGtleWZyYW1lIG9mZnNldHMgYXJlIGluIG9yZGVyIik7Y29uc3QgYz10LnN0ZXBzLmxlbmd0aDtsZXQgZD0wO28+MCYmbzxjP2UuZXJyb3JzLnB1c2goIk5vdCBhbGwgc3R5bGUoKSBzdGVwcyB3aXRoaW4gdGhlIGRlY2xhcmVkIGtleWZyYW1lcygpIGNvbnRhaW4gb2Zmc2V0cyIpOjA9PW8mJihkPTEvKGMtMSkpO2NvbnN0IHA9Yy0xLG09ZS5jdXJyZW50VGltZSx1PWUuY3VycmVudEFuaW1hdGVUaW1pbmdzLGY9dS5kdXJhdGlvbjtyZXR1cm4gbC5mb3JFYWNoKCgodCxvKT0+e2NvbnN0IGE9ZD4wP289PXA/MTpkKm86aVtvXSxyPWEqZjtlLmN1cnJlbnRUaW1lPW0rdS5kZWxheStyLHUuZHVyYXRpb249cix0aGlzLl92YWxpZGF0ZVN0eWxlQXN0KHQsZSksdC5vZmZzZXQ9YSxuLnN0eWxlcy5wdXNoKHQpfSkpLG59dmlzaXRSZWZlcmVuY2UodCxlKXtyZXR1cm57dHlwZTo4LGFuaW1hdGlvbjokTyh0aGlzLFdPKHQuYW5pbWF0aW9uKSxlKSxvcHRpb25zOnBQKHQub3B0aW9ucyl9fXZpc2l0QW5pbWF0ZUNoaWxkKHQsZSl7cmV0dXJuIGUuZGVwQ291bnQrKyx7dHlwZTo5LG9wdGlvbnM6cFAodC5vcHRpb25zKX19dmlzaXRBbmltYXRlUmVmKHQsZSl7cmV0dXJue3R5cGU6MTAsYW5pbWF0aW9uOnRoaXMudmlzaXRSZWZlcmVuY2UodC5hbmltYXRpb24sZSksb3B0aW9uczpwUCh0Lm9wdGlvbnMpfX12aXNpdFF1ZXJ5KHQsZSl7Y29uc3Qgbj1lLmN1cnJlbnRRdWVyeVNlbGVjdG9yLG89dC5vcHRpb25zfHx7fTtlLnF1ZXJ5Q291bnQrKyxlLmN1cnJlbnRRdWVyeT10O2NvbnN0W2ksYV09KGZ1bmN0aW9uIHIodCl7Y29uc3QgZT0hIXQuc3BsaXQoL1xzKixccyovKS5maW5kKCh0PT4iOnNlbGYiPT10KSk7cmV0dXJuIGUmJih0PXQucmVwbGFjZShyUCwiIikpLFt0PXQucmVwbGFjZSgvQFwqL2csUk8pLnJlcGxhY2UoL0BcdysvZywodD0+Ii5uZy10cmlnZ2VyLSIrdC5zdWJzdHIoMSkpKS5yZXBsYWNlKC86YW5pbWF0aW5nL2csTk8pLGVdfSkodC5zZWxlY3Rvcik7ZS5jdXJyZW50UXVlcnlTZWxlY3Rvcj1uLmxlbmd0aD9uKyIgIitpOmksZk8oZS5jb2xsZWN0ZWRTdHlsZXMsZS5jdXJyZW50UXVlcnlTZWxlY3Rvcix7fSk7Y29uc3Qgcz0kTyh0aGlzLFdPKHQuYW5pbWF0aW9uKSxlKTtyZXR1cm4gZS5jdXJyZW50UXVlcnk9bnVsbCxlLmN1cnJlbnRRdWVyeVNlbGVjdG9yPW4se3R5cGU6MTEsc2VsZWN0b3I6aSxsaW1pdDpvLmxpbWl0fHwwLG9wdGlvbmFsOiEhby5vcHRpb25hbCxpbmNsdWRlU2VsZjphLGFuaW1hdGlvbjpzLG9yaWdpbmFsU2VsZWN0b3I6dC5zZWxlY3RvcixvcHRpb25zOnBQKHQub3B0aW9ucyl9fXZpc2l0U3RhZ2dlcih0LGUpe2UuY3VycmVudFF1ZXJ5fHxlLmVycm9ycy5wdXNoKCJzdGFnZ2VyKCkgY2FuIG9ubHkgYmUgdXNlZCBpbnNpZGUgb2YgcXVlcnkoKSIpO2NvbnN0IG49ImZ1bGwiPT09dC50aW1pbmdzP3tkdXJhdGlvbjowLGRlbGF5OjAsZWFzaW5nOiJmdWxsIn06SE8odC50aW1pbmdzLGUuZXJyb3JzLCEwKTtyZXR1cm57dHlwZToxMixhbmltYXRpb246JE8odGhpcyxXTyh0LmFuaW1hdGlvbiksZSksdGltaW5nczpuLG9wdGlvbnM6bnVsbH19fWNsYXNzIGNQe2NvbnN0cnVjdG9yKHQpe3RoaXMuZXJyb3JzPXQsdGhpcy5xdWVyeUNvdW50PTAsdGhpcy5kZXBDb3VudD0wLHRoaXMuY3VycmVudFRyYW5zaXRpb249bnVsbCx0aGlzLmN1cnJlbnRRdWVyeT1udWxsLHRoaXMuY3VycmVudFF1ZXJ5U2VsZWN0b3I9bnVsbCx0aGlzLmN1cnJlbnRBbmltYXRlVGltaW5ncz1udWxsLHRoaXMuY3VycmVudFRpbWU9MCx0aGlzLmNvbGxlY3RlZFN0eWxlcz17fSx0aGlzLm9wdGlvbnM9bnVsbH19ZnVuY3Rpb24gZFAodCl7cmV0dXJuIUFycmF5LmlzQXJyYXkodCkmJiJvYmplY3QiPT10eXBlb2YgdH1mdW5jdGlvbiBwUCh0KXtyZXR1cm4gdD8odD1GTyh0KSkucGFyYW1zJiYodC5wYXJhbXM9KGZ1bmN0aW9uIGUodCl7cmV0dXJuIHQ/Rk8odCk6bnVsbH0pKHQucGFyYW1zKSk6dD17fSx0fWZ1bmN0aW9uIG1QKHQsZSxuKXtyZXR1cm57ZHVyYXRpb246dCxkZWxheTplLGVhc2luZzpufX1mdW5jdGlvbiB1UCh0LGUsbixvLGksYSxyPW51bGwscz0hMSl7cmV0dXJue3R5cGU6MSxlbGVtZW50OnQsa2V5ZnJhbWVzOmUscHJlU3R5bGVQcm9wczpuLHBvc3RTdHlsZVByb3BzOm8sZHVyYXRpb246aSxkZWxheTphLHRvdGFsVGltZTppK2EsZWFzaW5nOnIsc3ViVGltZWxpbmU6c319Y2xhc3MgZlB7Y29uc3RydWN0b3IoKXt0aGlzLl9tYXA9bmV3IE1hcH1jb25zdW1lKHQpe2xldCBlPXRoaXMuX21hcC5nZXQodCk7cmV0dXJuIGU/dGhpcy5fbWFwLmRlbGV0ZSh0KTplPVtdLGV9YXBwZW5kKHQsZSl7bGV0IG49dGhpcy5fbWFwLmdldCh0KTtufHx0aGlzLl9tYXAuc2V0KHQsbj1bXSksbi5wdXNoKC4uLmUpfWhhcyh0KXtyZXR1cm4gdGhpcy5fbWFwLmhhcyh0KX1jbGVhcigpe3RoaXMuX21hcC5jbGVhcigpfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY29uc3QgZ1A9bmV3IFJlZ0V4cCgiOmVudGVyIiwiZyIpLGhQPW5ldyBSZWdFeHAoIjpsZWF2ZSIsImciKTtmdW5jdGlvbiBiUCh0LGUsbixvLGksYT17fSxyPXt9LHMsbCxjPVtdKXtyZXR1cm4obmV3IHlQKS5idWlsZEtleWZyYW1lcyh0LGUsbixvLGksYSxyLHMsbCxjKX1jbGFzcyB5UHtidWlsZEtleWZyYW1lcyh0LGUsbixvLGksYSxyLHMsbCxjPVtdKXtsPWx8fG5ldyBmUDtjb25zdCBkPW5ldyBDUCh0LGUsbCxvLGksYyxbXSk7ZC5vcHRpb25zPXMsZC5jdXJyZW50VGltZWxpbmUuc2V0U3R5bGVzKFthXSxudWxsLGQuZXJyb3JzLHMpLCRPKHRoaXMsbixkKTtjb25zdCBwPWQudGltZWxpbmVzLmZpbHRlcigodD0+dC5jb250YWluc0FuaW1hdGlvbigpKSk7aWYocC5sZW5ndGgmJk9iamVjdC5rZXlzKHIpLmxlbmd0aCl7Y29uc3QgdD1wW3AubGVuZ3RoLTFdO3QuYWxsb3dPbmx5VGltZWxpbmVTdHlsZXMoKXx8dC5zZXRTdHlsZXMoW3JdLG51bGwsZC5lcnJvcnMscyl9cmV0dXJuIHAubGVuZ3RoP3AubWFwKCh0PT50LmJ1aWxkS2V5ZnJhbWVzKCkpKTpbdVAoZSxbXSxbXSxbXSwwLDAsIiIsITEpXX12aXNpdFRyaWdnZXIodCxlKXt9dmlzaXRTdGF0ZSh0LGUpe312aXNpdFRyYW5zaXRpb24odCxlKXt9dmlzaXRBbmltYXRlQ2hpbGQodCxlKXtjb25zdCBuPWUuc3ViSW5zdHJ1Y3Rpb25zLmNvbnN1bWUoZS5lbGVtZW50KTtpZihuKXtjb25zdCBvPWUuY3JlYXRlU3ViQ29udGV4dCh0Lm9wdGlvbnMpLGk9ZS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUsYT10aGlzLl92aXNpdFN1Ykluc3RydWN0aW9ucyhuLG8sby5vcHRpb25zKTtpIT1hJiZlLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZShhKX1lLnByZXZpb3VzTm9kZT10fXZpc2l0QW5pbWF0ZVJlZih0LGUpe2NvbnN0IG49ZS5jcmVhdGVTdWJDb250ZXh0KHQub3B0aW9ucyk7bi50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoKSx0aGlzLnZpc2l0UmVmZXJlbmNlKHQuYW5pbWF0aW9uLG4pLGUudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKG4uY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lKSxlLnByZXZpb3VzTm9kZT10fV92aXNpdFN1Ykluc3RydWN0aW9ucyh0LGUsbil7bGV0IG89ZS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWU7Y29uc3QgaT1udWxsIT1uLmR1cmF0aW9uP0lPKG4uZHVyYXRpb24pOm51bGwsYT1udWxsIT1uLmRlbGF5P0lPKG4uZGVsYXkpOm51bGw7cmV0dXJuIDAhPT1pJiZ0LmZvckVhY2goKHQ9Pntjb25zdCBuPWUuYXBwZW5kSW5zdHJ1Y3Rpb25Ub1RpbWVsaW5lKHQsaSxhKTtvPU1hdGgubWF4KG8sbi5kdXJhdGlvbituLmRlbGF5KX0pKSxvfXZpc2l0UmVmZXJlbmNlKHQsZSl7ZS51cGRhdGVPcHRpb25zKHQub3B0aW9ucywhMCksJE8odGhpcyx0LmFuaW1hdGlvbixlKSxlLnByZXZpb3VzTm9kZT10fXZpc2l0U2VxdWVuY2UodCxlKXtjb25zdCBuPWUuc3ViQ29udGV4dENvdW50O2xldCBvPWU7Y29uc3QgaT10Lm9wdGlvbnM7aWYoaSYmKGkucGFyYW1zfHxpLmRlbGF5KSYmKG89ZS5jcmVhdGVTdWJDb250ZXh0KGkpLG8udHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKCksbnVsbCE9aS5kZWxheSkpezY9PW8ucHJldmlvdXNOb2RlLnR5cGUmJihvLmN1cnJlbnRUaW1lbGluZS5zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKSxvLnByZXZpb3VzTm9kZT1fUCk7Y29uc3QgdD1JTyhpLmRlbGF5KTtvLmRlbGF5TmV4dFN0ZXAodCl9dC5zdGVwcy5sZW5ndGgmJih0LnN0ZXBzLmZvckVhY2goKHQ9PiRPKHRoaXMsdCxvKSkpLG8uY3VycmVudFRpbWVsaW5lLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpLG8uc3ViQ29udGV4dENvdW50Pm4mJm8udHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKCkpLGUucHJldmlvdXNOb2RlPXR9dmlzaXRHcm91cCh0LGUpe2NvbnN0IG49W107bGV0IG89ZS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWU7Y29uc3QgaT10Lm9wdGlvbnMmJnQub3B0aW9ucy5kZWxheT9JTyh0Lm9wdGlvbnMuZGVsYXkpOjA7dC5zdGVwcy5mb3JFYWNoKChhPT57Y29uc3Qgcj1lLmNyZWF0ZVN1YkNvbnRleHQodC5vcHRpb25zKTtpJiZyLmRlbGF5TmV4dFN0ZXAoaSksJE8odGhpcyxhLHIpLG89TWF0aC5tYXgobyxyLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSksbi5wdXNoKHIuY3VycmVudFRpbWVsaW5lKX0pKSxuLmZvckVhY2goKHQ9PmUuY3VycmVudFRpbWVsaW5lLm1lcmdlVGltZWxpbmVDb2xsZWN0ZWRTdHlsZXModCkpKSxlLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZShvKSxlLnByZXZpb3VzTm9kZT10fV92aXNpdFRpbWluZyh0LGUpe2lmKHQuZHluYW1pYyl7Y29uc3Qgbj10LnN0clZhbHVlO3JldHVybiBITyhlLnBhcmFtcz9xTyhuLGUucGFyYW1zLGUuZXJyb3JzKTpuLGUuZXJyb3JzKX1yZXR1cm57ZHVyYXRpb246dC5kdXJhdGlvbixkZWxheTp0LmRlbGF5LGVhc2luZzp0LmVhc2luZ319dmlzaXRBbmltYXRlKHQsZSl7Y29uc3Qgbj1lLmN1cnJlbnRBbmltYXRlVGltaW5ncz10aGlzLl92aXNpdFRpbWluZyh0LnRpbWluZ3MsZSksbz1lLmN1cnJlbnRUaW1lbGluZTtuLmRlbGF5JiYoZS5pbmNyZW1lbnRUaW1lKG4uZGVsYXkpLG8uc25hcHNob3RDdXJyZW50U3R5bGVzKCkpO2NvbnN0IGk9dC5zdHlsZTs1PT1pLnR5cGU/dGhpcy52aXNpdEtleWZyYW1lcyhpLGUpOihlLmluY3JlbWVudFRpbWUobi5kdXJhdGlvbiksdGhpcy52aXNpdFN0eWxlKGksZSksby5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSksZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bnVsbCxlLnByZXZpb3VzTm9kZT10fXZpc2l0U3R5bGUodCxlKXtjb25zdCBuPWUuY3VycmVudFRpbWVsaW5lLG89ZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M7IW8mJm4uZ2V0Q3VycmVudFN0eWxlUHJvcGVydGllcygpLmxlbmd0aCYmbi5mb3J3YXJkRnJhbWUoKTtjb25zdCBpPW8mJm8uZWFzaW5nfHx0LmVhc2luZzt0LmlzRW1wdHlTdGVwP24uYXBwbHlFbXB0eVN0ZXAoaSk6bi5zZXRTdHlsZXModC5zdHlsZXMsaSxlLmVycm9ycyxlLm9wdGlvbnMpLGUucHJldmlvdXNOb2RlPXR9dmlzaXRLZXlmcmFtZXModCxlKXtjb25zdCBuPWUuY3VycmVudEFuaW1hdGVUaW1pbmdzLG89ZS5jdXJyZW50VGltZWxpbmUuZHVyYXRpb24saT1uLmR1cmF0aW9uLGE9ZS5jcmVhdGVTdWJDb250ZXh0KCkuY3VycmVudFRpbWVsaW5lO2EuZWFzaW5nPW4uZWFzaW5nLHQuc3R5bGVzLmZvckVhY2goKHQ9PnthLmZvcndhcmRUaW1lKCh0Lm9mZnNldHx8MCkqaSksYS5zZXRTdHlsZXModC5zdHlsZXMsdC5lYXNpbmcsZS5lcnJvcnMsZS5vcHRpb25zKSxhLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpfSkpLGUuY3VycmVudFRpbWVsaW5lLm1lcmdlVGltZWxpbmVDb2xsZWN0ZWRTdHlsZXMoYSksZS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUobytpKSxlLnByZXZpb3VzTm9kZT10fXZpc2l0UXVlcnkodCxlKXtjb25zdCBuPWUuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lLG89dC5vcHRpb25zfHx7fSxpPW8uZGVsYXk/SU8oby5kZWxheSk6MDtpJiYoNj09PWUucHJldmlvdXNOb2RlLnR5cGV8fDA9PW4mJmUuY3VycmVudFRpbWVsaW5lLmdldEN1cnJlbnRTdHlsZVByb3BlcnRpZXMoKS5sZW5ndGgpJiYoZS5jdXJyZW50VGltZWxpbmUuc25hcHNob3RDdXJyZW50U3R5bGVzKCksZS5wcmV2aW91c05vZGU9X1ApO2xldCBhPW47Y29uc3Qgcj1lLmludm9rZVF1ZXJ5KHQuc2VsZWN0b3IsdC5vcmlnaW5hbFNlbGVjdG9yLHQubGltaXQsdC5pbmNsdWRlU2VsZiwhIW8ub3B0aW9uYWwsZS5lcnJvcnMpO2UuY3VycmVudFF1ZXJ5VG90YWw9ci5sZW5ndGg7bGV0IHM9bnVsbDtyLmZvckVhY2goKChuLG8pPT57ZS5jdXJyZW50UXVlcnlJbmRleD1vO2NvbnN0IHI9ZS5jcmVhdGVTdWJDb250ZXh0KHQub3B0aW9ucyxuKTtpJiZyLmRlbGF5TmV4dFN0ZXAoaSksbj09PWUuZWxlbWVudCYmKHM9ci5jdXJyZW50VGltZWxpbmUpLCRPKHRoaXMsdC5hbmltYXRpb24sciksci5jdXJyZW50VGltZWxpbmUuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCksYT1NYXRoLm1heChhLHIuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lKX0pKSxlLmN1cnJlbnRRdWVyeUluZGV4PTAsZS5jdXJyZW50UXVlcnlUb3RhbD0wLGUudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKGEpLHMmJihlLmN1cnJlbnRUaW1lbGluZS5tZXJnZVRpbWVsaW5lQ29sbGVjdGVkU3R5bGVzKHMpLGUuY3VycmVudFRpbWVsaW5lLnNuYXBzaG90Q3VycmVudFN0eWxlcygpKSxlLnByZXZpb3VzTm9kZT10fXZpc2l0U3RhZ2dlcih0LGUpe2NvbnN0IG49ZS5wYXJlbnRDb250ZXh0LG89ZS5jdXJyZW50VGltZWxpbmUsaT10LnRpbWluZ3MsYT1NYXRoLmFicyhpLmR1cmF0aW9uKSxyPWEqKGUuY3VycmVudFF1ZXJ5VG90YWwtMSk7bGV0IHM9YSplLmN1cnJlbnRRdWVyeUluZGV4O3N3aXRjaChpLmR1cmF0aW9uPDA/InJldmVyc2UiOmkuZWFzaW5nKXtjYXNlInJldmVyc2UiOnM9ci1zO2JyZWFrO2Nhc2UiZnVsbCI6cz1uLmN1cnJlbnRTdGFnZ2VyVGltZX1jb25zdCBsPWUuY3VycmVudFRpbWVsaW5lO3MmJmwuZGVsYXlOZXh0U3RlcChzKTtjb25zdCBjPWwuY3VycmVudFRpbWU7JE8odGhpcyx0LmFuaW1hdGlvbixlKSxlLnByZXZpb3VzTm9kZT10LG4uY3VycmVudFN0YWdnZXJUaW1lPW8uY3VycmVudFRpbWUtYysoby5zdGFydFRpbWUtbi5jdXJyZW50VGltZWxpbmUuc3RhcnRUaW1lKX19Y29uc3QgX1A9e307Y2xhc3MgQ1B7Y29uc3RydWN0b3IodCxlLG4sbyxpLGEscixzKXt0aGlzLl9kcml2ZXI9dCx0aGlzLmVsZW1lbnQ9ZSx0aGlzLnN1Ykluc3RydWN0aW9ucz1uLHRoaXMuX2VudGVyQ2xhc3NOYW1lPW8sdGhpcy5fbGVhdmVDbGFzc05hbWU9aSx0aGlzLmVycm9ycz1hLHRoaXMudGltZWxpbmVzPXIsdGhpcy5wYXJlbnRDb250ZXh0PW51bGwsdGhpcy5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bnVsbCx0aGlzLnByZXZpb3VzTm9kZT1fUCx0aGlzLnN1YkNvbnRleHRDb3VudD0wLHRoaXMub3B0aW9ucz17fSx0aGlzLmN1cnJlbnRRdWVyeUluZGV4PTAsdGhpcy5jdXJyZW50UXVlcnlUb3RhbD0wLHRoaXMuY3VycmVudFN0YWdnZXJUaW1lPTAsdGhpcy5jdXJyZW50VGltZWxpbmU9c3x8bmV3IE1QKHRoaXMuX2RyaXZlcixlLDApLHIucHVzaCh0aGlzLmN1cnJlbnRUaW1lbGluZSl9Z2V0IHBhcmFtcygpe3JldHVybiB0aGlzLm9wdGlvbnMucGFyYW1zfXVwZGF0ZU9wdGlvbnModCxlKXtpZighdClyZXR1cm47Y29uc3Qgbj10O2xldCBvPXRoaXMub3B0aW9ucztudWxsIT1uLmR1cmF0aW9uJiYoby5kdXJhdGlvbj1JTyhuLmR1cmF0aW9uKSksbnVsbCE9bi5kZWxheSYmKG8uZGVsYXk9SU8obi5kZWxheSkpO2NvbnN0IGk9bi5wYXJhbXM7aWYoaSl7bGV0IHQ9by5wYXJhbXM7dHx8KHQ9dGhpcy5vcHRpb25zLnBhcmFtcz17fSksT2JqZWN0LmtleXMoaSkuZm9yRWFjaCgobj0+e2UmJnQuaGFzT3duUHJvcGVydHkobil8fCh0W25dPXFPKGlbbl0sdCx0aGlzLmVycm9ycykpfSkpfX1fY29weU9wdGlvbnMoKXtjb25zdCB0PXt9O2lmKHRoaXMub3B0aW9ucyl7Y29uc3QgZT10aGlzLm9wdGlvbnMucGFyYW1zO2lmKGUpe2NvbnN0IG49dC5wYXJhbXM9e307T2JqZWN0LmtleXMoZSkuZm9yRWFjaCgodD0+e25bdF09ZVt0XX0pKX19cmV0dXJuIHR9Y3JlYXRlU3ViQ29udGV4dCh0PW51bGwsZSxuKXtjb25zdCBvPWV8fHRoaXMuZWxlbWVudCxpPW5ldyBDUCh0aGlzLl9kcml2ZXIsbyx0aGlzLnN1Ykluc3RydWN0aW9ucyx0aGlzLl9lbnRlckNsYXNzTmFtZSx0aGlzLl9sZWF2ZUNsYXNzTmFtZSx0aGlzLmVycm9ycyx0aGlzLnRpbWVsaW5lcyx0aGlzLmN1cnJlbnRUaW1lbGluZS5mb3JrKG8sbnx8MCkpO3JldHVybiBpLnByZXZpb3VzTm9kZT10aGlzLnByZXZpb3VzTm9kZSxpLmN1cnJlbnRBbmltYXRlVGltaW5ncz10aGlzLmN1cnJlbnRBbmltYXRlVGltaW5ncyxpLm9wdGlvbnM9dGhpcy5fY29weU9wdGlvbnMoKSxpLnVwZGF0ZU9wdGlvbnModCksaS5jdXJyZW50UXVlcnlJbmRleD10aGlzLmN1cnJlbnRRdWVyeUluZGV4LGkuY3VycmVudFF1ZXJ5VG90YWw9dGhpcy5jdXJyZW50UXVlcnlUb3RhbCxpLnBhcmVudENvbnRleHQ9dGhpcyx0aGlzLnN1YkNvbnRleHRDb3VudCsrLGl9dHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKHQpe3JldHVybiB0aGlzLnByZXZpb3VzTm9kZT1fUCx0aGlzLmN1cnJlbnRUaW1lbGluZT10aGlzLmN1cnJlbnRUaW1lbGluZS5mb3JrKHRoaXMuZWxlbWVudCx0KSx0aGlzLnRpbWVsaW5lcy5wdXNoKHRoaXMuY3VycmVudFRpbWVsaW5lKSx0aGlzLmN1cnJlbnRUaW1lbGluZX1hcHBlbmRJbnN0cnVjdGlvblRvVGltZWxpbmUodCxlLG4pe2NvbnN0IG89e2R1cmF0aW9uOm51bGwhPWU/ZTp0LmR1cmF0aW9uLGRlbGF5OnRoaXMuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lKyhudWxsIT1uP246MCkrdC5kZWxheSxlYXNpbmc6IiJ9LGk9bmV3IHZQKHRoaXMuX2RyaXZlcix0LmVsZW1lbnQsdC5rZXlmcmFtZXMsdC5wcmVTdHlsZVByb3BzLHQucG9zdFN0eWxlUHJvcHMsbyx0LnN0cmV0Y2hTdGFydGluZ0tleWZyYW1lKTtyZXR1cm4gdGhpcy50aW1lbGluZXMucHVzaChpKSxvfWluY3JlbWVudFRpbWUodCl7dGhpcy5jdXJyZW50VGltZWxpbmUuZm9yd2FyZFRpbWUodGhpcy5jdXJyZW50VGltZWxpbmUuZHVyYXRpb24rdCl9ZGVsYXlOZXh0U3RlcCh0KXt0PjAmJnRoaXMuY3VycmVudFRpbWVsaW5lLmRlbGF5TmV4dFN0ZXAodCl9aW52b2tlUXVlcnkodCxlLG4sbyxpLGEpe2xldCByPVtdO2lmKG8mJnIucHVzaCh0aGlzLmVsZW1lbnQpLHQubGVuZ3RoPjApe3Q9KHQ9dC5yZXBsYWNlKGdQLCIuIit0aGlzLl9lbnRlckNsYXNzTmFtZSkpLnJlcGxhY2UoaFAsIi4iK3RoaXMuX2xlYXZlQ2xhc3NOYW1lKTtsZXQgZT10aGlzLl9kcml2ZXIucXVlcnkodGhpcy5lbGVtZW50LHQsMSE9bik7MCE9PW4mJihlPW48MD9lLnNsaWNlKGUubGVuZ3RoK24sZS5sZW5ndGgpOmUuc2xpY2UoMCxuKSksci5wdXNoKC4uLmUpfXJldHVybiBpfHwwIT1yLmxlbmd0aHx8YS5wdXNoKGBcYHF1ZXJ5KCIke2V9IilcYCByZXR1cm5lZCB6ZXJvIGVsZW1lbnRzLiAoVXNlIFxgcXVlcnkoIiR7ZX0iLCB7IG9wdGlvbmFsOiB0cnVlIH0pXGAgaWYgeW91IHdpc2ggdG8gYWxsb3cgdGhpcy4pYCkscn19Y2xhc3MgTVB7Y29uc3RydWN0b3IodCxlLG4sbyl7dGhpcy5fZHJpdmVyPXQsdGhpcy5lbGVtZW50PWUsdGhpcy5zdGFydFRpbWU9bix0aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXA9byx0aGlzLmR1cmF0aW9uPTAsdGhpcy5fcHJldmlvdXNLZXlmcmFtZT17fSx0aGlzLl9jdXJyZW50S2V5ZnJhbWU9e30sdGhpcy5fa2V5ZnJhbWVzPW5ldyBNYXAsdGhpcy5fc3R5bGVTdW1tYXJ5PXt9LHRoaXMuX3BlbmRpbmdTdHlsZXM9e30sdGhpcy5fYmFja0ZpbGw9e30sdGhpcy5fY3VycmVudEVtcHR5U3RlcEtleWZyYW1lPW51bGwsdGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwfHwodGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwPW5ldyBNYXApLHRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXM9T2JqZWN0LmNyZWF0ZSh0aGlzLl9iYWNrRmlsbCx7fSksdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXM9dGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwLmdldChlKSx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlc3x8KHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzPXRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMsdGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwLnNldChlLHRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMpKSx0aGlzLl9sb2FkS2V5ZnJhbWUoKX1jb250YWluc0FuaW1hdGlvbigpe3N3aXRjaCh0aGlzLl9rZXlmcmFtZXMuc2l6ZSl7Y2FzZSAwOnJldHVybiExO2Nhc2UgMTpyZXR1cm4gdGhpcy5nZXRDdXJyZW50U3R5bGVQcm9wZXJ0aWVzKCkubGVuZ3RoPjA7ZGVmYXVsdDpyZXR1cm4hMH19Z2V0Q3VycmVudFN0eWxlUHJvcGVydGllcygpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLl9jdXJyZW50S2V5ZnJhbWUpfWdldCBjdXJyZW50VGltZSgpe3JldHVybiB0aGlzLnN0YXJ0VGltZSt0aGlzLmR1cmF0aW9ufWRlbGF5TmV4dFN0ZXAodCl7Y29uc3QgZT0xPT10aGlzLl9rZXlmcmFtZXMuc2l6ZSYmT2JqZWN0LmtleXModGhpcy5fcGVuZGluZ1N0eWxlcykubGVuZ3RoO3RoaXMuZHVyYXRpb258fGU/KHRoaXMuZm9yd2FyZFRpbWUodGhpcy5jdXJyZW50VGltZSt0KSxlJiZ0aGlzLnNuYXBzaG90Q3VycmVudFN0eWxlcygpKTp0aGlzLnN0YXJ0VGltZSs9dH1mb3JrKHQsZSl7cmV0dXJuIHRoaXMuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCksbmV3IE1QKHRoaXMuX2RyaXZlcix0LGV8fHRoaXMuY3VycmVudFRpbWUsdGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwKX1fbG9hZEtleWZyYW1lKCl7dGhpcy5fY3VycmVudEtleWZyYW1lJiYodGhpcy5fcHJldmlvdXNLZXlmcmFtZT10aGlzLl9jdXJyZW50S2V5ZnJhbWUpLHRoaXMuX2N1cnJlbnRLZXlmcmFtZT10aGlzLl9rZXlmcmFtZXMuZ2V0KHRoaXMuZHVyYXRpb24pLHRoaXMuX2N1cnJlbnRLZXlmcmFtZXx8KHRoaXMuX2N1cnJlbnRLZXlmcmFtZT1PYmplY3QuY3JlYXRlKHRoaXMuX2JhY2tGaWxsLHt9KSx0aGlzLl9rZXlmcmFtZXMuc2V0KHRoaXMuZHVyYXRpb24sdGhpcy5fY3VycmVudEtleWZyYW1lKSl9Zm9yd2FyZEZyYW1lKCl7dGhpcy5kdXJhdGlvbis9MSx0aGlzLl9sb2FkS2V5ZnJhbWUoKX1mb3J3YXJkVGltZSh0KXt0aGlzLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpLHRoaXMuZHVyYXRpb249dCx0aGlzLl9sb2FkS2V5ZnJhbWUoKX1fdXBkYXRlU3R5bGUodCxlKXt0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzW3RdPWUsdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXNbdF09ZSx0aGlzLl9zdHlsZVN1bW1hcnlbdF09e3RpbWU6dGhpcy5jdXJyZW50VGltZSx2YWx1ZTplfX1hbGxvd09ubHlUaW1lbGluZVN0eWxlcygpe3JldHVybiB0aGlzLl9jdXJyZW50RW1wdHlTdGVwS2V5ZnJhbWUhPT10aGlzLl9jdXJyZW50S2V5ZnJhbWV9YXBwbHlFbXB0eVN0ZXAodCl7dCYmKHRoaXMuX3ByZXZpb3VzS2V5ZnJhbWUuZWFzaW5nPXQpLE9iamVjdC5rZXlzKHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzKS5mb3JFYWNoKCh0PT57dGhpcy5fYmFja0ZpbGxbdF09dGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXNbdF18fFh4LHRoaXMuX2N1cnJlbnRLZXlmcmFtZVt0XT1YeH0pKSx0aGlzLl9jdXJyZW50RW1wdHlTdGVwS2V5ZnJhbWU9dGhpcy5fY3VycmVudEtleWZyYW1lfXNldFN0eWxlcyh0LGUsbixvKXtlJiYodGhpcy5fcHJldmlvdXNLZXlmcmFtZS5lYXNpbmc9ZSk7Y29uc3QgaT1vJiZvLnBhcmFtc3x8e30sYT0oZnVuY3Rpb24gcih0LGUpe2NvbnN0IG49e307bGV0IG87cmV0dXJuIHQuZm9yRWFjaCgodD0+eyIqIj09PXQ/KG89b3x8T2JqZWN0LmtleXMoZSksby5mb3JFYWNoKCh0PT57blt0XT1YeH0pKSk6TE8odCwhMSxuKX0pKSxufQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8pKHQsdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXMpO09iamVjdC5rZXlzKGEpLmZvckVhY2goKHQ9Pntjb25zdCBlPXFPKGFbdF0saSxuKTt0aGlzLl9wZW5kaW5nU3R5bGVzW3RdPWUsdGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcy5oYXNPd25Qcm9wZXJ0eSh0KXx8KHRoaXMuX2JhY2tGaWxsW3RdPXRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzLmhhc093blByb3BlcnR5KHQpP3RoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzW3RdOlh4KSx0aGlzLl91cGRhdGVTdHlsZSh0LGUpfSkpfWFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpe2NvbnN0IHQ9dGhpcy5fcGVuZGluZ1N0eWxlcyxlPU9iamVjdC5rZXlzKHQpOzAhPWUubGVuZ3RoJiYodGhpcy5fcGVuZGluZ1N0eWxlcz17fSxlLmZvckVhY2goKGU9Pnt0aGlzLl9jdXJyZW50S2V5ZnJhbWVbZV09dFtlXX0pKSxPYmplY3Qua2V5cyh0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzKS5mb3JFYWNoKCh0PT57dGhpcy5fY3VycmVudEtleWZyYW1lLmhhc093blByb3BlcnR5KHQpfHwodGhpcy5fY3VycmVudEtleWZyYW1lW3RdPXRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXNbdF0pfSkpKX1zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKXtPYmplY3Qua2V5cyh0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzKS5mb3JFYWNoKCh0PT57Y29uc3QgZT10aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzW3RdO3RoaXMuX3BlbmRpbmdTdHlsZXNbdF09ZSx0aGlzLl91cGRhdGVTdHlsZSh0LGUpfSkpfWdldEZpbmFsS2V5ZnJhbWUoKXtyZXR1cm4gdGhpcy5fa2V5ZnJhbWVzLmdldCh0aGlzLmR1cmF0aW9uKX1nZXQgcHJvcGVydGllcygpe2NvbnN0IHQ9W107Zm9yKGxldCBlIGluIHRoaXMuX2N1cnJlbnRLZXlmcmFtZSl0LnB1c2goZSk7cmV0dXJuIHR9bWVyZ2VUaW1lbGluZUNvbGxlY3RlZFN0eWxlcyh0KXtPYmplY3Qua2V5cyh0Ll9zdHlsZVN1bW1hcnkpLmZvckVhY2goKGU9Pntjb25zdCBuPXRoaXMuX3N0eWxlU3VtbWFyeVtlXSxvPXQuX3N0eWxlU3VtbWFyeVtlXTsoIW58fG8udGltZT5uLnRpbWUpJiZ0aGlzLl91cGRhdGVTdHlsZShlLG8udmFsdWUpfSkpfWJ1aWxkS2V5ZnJhbWVzKCl7dGhpcy5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKTtjb25zdCB0PW5ldyBTZXQsZT1uZXcgU2V0LG49MT09PXRoaXMuX2tleWZyYW1lcy5zaXplJiYwPT09dGhpcy5kdXJhdGlvbjtsZXQgbz1bXTt0aGlzLl9rZXlmcmFtZXMuZm9yRWFjaCgoKGksYSk9Pntjb25zdCByPUxPKGksITApO09iamVjdC5rZXlzKHIpLmZvckVhY2goKG49Pntjb25zdCBvPXJbbl07IiEiPT1vP3QuYWRkKG4pOm89PVh4JiZlLmFkZChuKX0pKSxufHwoci5vZmZzZXQ9YS90aGlzLmR1cmF0aW9uKSxvLnB1c2gocil9KSk7Y29uc3QgaT10LnNpemU/Wk8odC52YWx1ZXMoKSk6W10sYT1lLnNpemU/Wk8oZS52YWx1ZXMoKSk6W107aWYobil7Y29uc3QgdD1vWzBdLGU9Rk8odCk7dC5vZmZzZXQ9MCxlLm9mZnNldD0xLG89W3QsZV19cmV0dXJuIHVQKHRoaXMuZWxlbWVudCxvLGksYSx0aGlzLmR1cmF0aW9uLHRoaXMuc3RhcnRUaW1lLHRoaXMuZWFzaW5nLCExKX19Y2xhc3MgdlAgZXh0ZW5kcyBNUHtjb25zdHJ1Y3Rvcih0LGUsbixvLGksYSxyPSExKXtzdXBlcih0LGUsYS5kZWxheSksdGhpcy5lbGVtZW50PWUsdGhpcy5rZXlmcmFtZXM9bix0aGlzLnByZVN0eWxlUHJvcHM9byx0aGlzLnBvc3RTdHlsZVByb3BzPWksdGhpcy5fc3RyZXRjaFN0YXJ0aW5nS2V5ZnJhbWU9cix0aGlzLnRpbWluZ3M9e2R1cmF0aW9uOmEuZHVyYXRpb24sZGVsYXk6YS5kZWxheSxlYXNpbmc6YS5lYXNpbmd9fWNvbnRhaW5zQW5pbWF0aW9uKCl7cmV0dXJuIHRoaXMua2V5ZnJhbWVzLmxlbmd0aD4xfWJ1aWxkS2V5ZnJhbWVzKCl7bGV0IHQ9dGhpcy5rZXlmcmFtZXMse2RlbGF5OmUsZHVyYXRpb246bixlYXNpbmc6b309dGhpcy50aW1pbmdzO2lmKHRoaXMuX3N0cmV0Y2hTdGFydGluZ0tleWZyYW1lJiZlKXtjb25zdCBpPVtdLGE9bitlLHI9ZS9hLHM9TE8odFswXSwhMSk7cy5vZmZzZXQ9MCxpLnB1c2gocyk7Y29uc3QgbD1MTyh0WzBdLCExKTtsLm9mZnNldD14UChyKSxpLnB1c2gobCk7Y29uc3QgYz10Lmxlbmd0aC0xO2ZvcihsZXQgbz0xO288PWM7bysrKXtsZXQgcj1MTyh0W29dLCExKTtyLm9mZnNldD14UCgoZStyLm9mZnNldCpuKS9hKSxpLnB1c2gocil9bj1hLGU9MCxvPSIiLHQ9aX1yZXR1cm4gdVAodGhpcy5lbGVtZW50LHQsdGhpcy5wcmVTdHlsZVByb3BzLHRoaXMucG9zdFN0eWxlUHJvcHMsbixlLG8sITApfX1mdW5jdGlvbiB4UCh0LGU9Myl7Y29uc3Qgbj1NYXRoLnBvdygxMCxlLTEpO3JldHVybiBNYXRoLnJvdW5kKHQqbikvbn1jbGFzcyBPUHt9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NsYXNzIFBQIGV4dGVuZHMgT1B7bm9ybWFsaXplUHJvcGVydHlOYW1lKHQsZSl7cmV0dXJuIEtPKHQpfW5vcm1hbGl6ZVN0eWxlVmFsdWUodCxlLG4sbyl7bGV0IGk9IiI7Y29uc3QgYT1uLnRvU3RyaW5nKCkudHJpbSgpO2lmKHdQW2VdJiYwIT09biYmIjAiIT09bilpZigibnVtYmVyIj09dHlwZW9mIG4paT0icHgiO2Vsc2V7Y29uc3QgZT1uLm1hdGNoKC9eWystXT9bXGRcLl0rKFthLXpdKikkLyk7ZSYmMD09ZVsxXS5sZW5ndGgmJm8ucHVzaChgUGxlYXNlIHByb3ZpZGUgYSBDU1MgdW5pdCB2YWx1ZSBmb3IgJHt0fToke259YCl9cmV0dXJuIGEraX19Y29uc3Qgd1A9KGZ1bmN0aW9uIGtQKHQpe2NvbnN0IGU9e307cmV0dXJuIHQuZm9yRWFjaCgodD0+ZVt0XT0hMCkpLGV9KSgid2lkdGgsaGVpZ2h0LG1pbldpZHRoLG1pbkhlaWdodCxtYXhXaWR0aCxtYXhIZWlnaHQsbGVmdCx0b3AsYm90dG9tLHJpZ2h0LGZvbnRTaXplLG91dGxpbmVXaWR0aCxvdXRsaW5lT2Zmc2V0LHBhZGRpbmdUb3AscGFkZGluZ0xlZnQscGFkZGluZ0JvdHRvbSxwYWRkaW5nUmlnaHQsbWFyZ2luVG9wLG1hcmdpbkxlZnQsbWFyZ2luQm90dG9tLG1hcmdpblJpZ2h0LGJvcmRlclJhZGl1cyxib3JkZXJXaWR0aCxib3JkZXJUb3BXaWR0aCxib3JkZXJMZWZ0V2lkdGgsYm9yZGVyUmlnaHRXaWR0aCxib3JkZXJCb3R0b21XaWR0aCx0ZXh0SW5kZW50LHBlcnNwZWN0aXZlIi5zcGxpdCgiLCIpKTtmdW5jdGlvbiBTUCh0LGUsbixvLGksYSxyLHMsbCxjLGQscCxtKXtyZXR1cm57dHlwZTowLGVsZW1lbnQ6dCx0cmlnZ2VyTmFtZTplLGlzUmVtb3ZhbFRyYW5zaXRpb246aSxmcm9tU3RhdGU6bixmcm9tU3R5bGVzOmEsdG9TdGF0ZTpvLHRvU3R5bGVzOnIsdGltZWxpbmVzOnMscXVlcmllZEVsZW1lbnRzOmwscHJlU3R5bGVQcm9wczpjLHBvc3RTdHlsZVByb3BzOmQsdG90YWxUaW1lOnAsZXJyb3JzOm19fWNvbnN0IERQPXt9O2NsYXNzIEVQe2NvbnN0cnVjdG9yKHQsZSxuKXt0aGlzLl90cmlnZ2VyTmFtZT10LHRoaXMuYXN0PWUsdGhpcy5fc3RhdGVTdHlsZXM9bn1tYXRjaCh0LGUsbixvKXtyZXR1cm4oZnVuY3Rpb24gaSh0LGUsbixvLGEpe3JldHVybiB0LnNvbWUoKHQ9PnQoZSxuLG8sYSkpKX0pKHRoaXMuYXN0Lm1hdGNoZXJzLHQsZSxuLG8pfWJ1aWxkU3R5bGVzKHQsZSxuKXtjb25zdCBvPXRoaXMuX3N0YXRlU3R5bGVzWyIqIl0saT10aGlzLl9zdGF0ZVN0eWxlc1t0XSxhPW8/by5idWlsZFN0eWxlcyhlLG4pOnt9O3JldHVybiBpP2kuYnVpbGRTdHlsZXMoZSxuKTphfWJ1aWxkKHQsZSxuLG8saSxhLHIscyxsLGMpe2NvbnN0IGQ9W10scD10aGlzLmFzdC5vcHRpb25zJiZ0aGlzLmFzdC5vcHRpb25zLnBhcmFtc3x8RFAsbT10aGlzLmJ1aWxkU3R5bGVzKG4sciYmci5wYXJhbXN8fERQLGQpLHU9cyYmcy5wYXJhbXN8fERQLGY9dGhpcy5idWlsZFN0eWxlcyhvLHUsZCksZz1uZXcgU2V0LGg9bmV3IE1hcCxiPW5ldyBNYXAseT0idm9pZCI9PT1vLF89e3BhcmFtczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30scCksdSl9LEM9Yz9bXTpiUCh0LGUsdGhpcy5hc3QuYW5pbWF0aW9uLGksYSxtLGYsXyxsLGQpO2xldCBNPTA7aWYoQy5mb3JFYWNoKCh0PT57TT1NYXRoLm1heCh0LmR1cmF0aW9uK3QuZGVsYXksTSl9KSksZC5sZW5ndGgpcmV0dXJuIFNQKGUsdGhpcy5fdHJpZ2dlck5hbWUsbixvLHksbSxmLFtdLFtdLGgsYixNLGQpO0MuZm9yRWFjaCgodD0+e2NvbnN0IG49dC5lbGVtZW50LG89Zk8oaCxuLHt9KTt0LnByZVN0eWxlUHJvcHMuZm9yRWFjaCgodD0+b1t0XT0hMCkpO2NvbnN0IGk9Zk8oYixuLHt9KTt0LnBvc3RTdHlsZVByb3BzLmZvckVhY2goKHQ9PmlbdF09ITApKSxuIT09ZSYmZy5hZGQobil9KSk7Y29uc3Qgdj1aTyhnLnZhbHVlcygpKTtyZXR1cm4gU1AoZSx0aGlzLl90cmlnZ2VyTmFtZSxuLG8seSxtLGYsQyx2LGgsYixNKX19Y2xhc3MgQVB7Y29uc3RydWN0b3IodCxlKXt0aGlzLnN0eWxlcz10LHRoaXMuZGVmYXVsdFBhcmFtcz1lfWJ1aWxkU3R5bGVzKHQsZSl7Y29uc3Qgbj17fSxvPUZPKHRoaXMuZGVmYXVsdFBhcmFtcyk7cmV0dXJuIE9iamVjdC5rZXlzKHQpLmZvckVhY2goKGU9Pntjb25zdCBuPXRbZV07bnVsbCE9biYmKG9bZV09bil9KSksdGhpcy5zdHlsZXMuc3R5bGVzLmZvckVhY2goKHQ9PntpZigic3RyaW5nIiE9dHlwZW9mIHQpe2NvbnN0IGk9dDtPYmplY3Qua2V5cyhpKS5mb3JFYWNoKCh0PT57bGV0IGE9aVt0XTthLmxlbmd0aD4xJiYoYT1xTyhhLG8sZSkpLG5bdF09YX0pKX19KSksbn19Y2xhc3MgUlB7Y29uc3RydWN0b3IodCxlKXt0aGlzLm5hbWU9dCx0aGlzLmFzdD1lLHRoaXMudHJhbnNpdGlvbkZhY3Rvcmllcz1bXSx0aGlzLnN0YXRlcz17fSxlLnN0YXRlcy5mb3JFYWNoKCh0PT57dGhpcy5zdGF0ZXNbdC5uYW1lXT1uZXcgQVAodC5zdHlsZSx0Lm9wdGlvbnMmJnQub3B0aW9ucy5wYXJhbXN8fHt9KX0pKSxUUCh0aGlzLnN0YXRlcywidHJ1ZSIsIjEiKSxUUCh0aGlzLnN0YXRlcywiZmFsc2UiLCIwIiksZS50cmFuc2l0aW9ucy5mb3JFYWNoKChlPT57dGhpcy50cmFuc2l0aW9uRmFjdG9yaWVzLnB1c2gobmV3IEVQKHQsZSx0aGlzLnN0YXRlcykpfSkpLHRoaXMuZmFsbGJhY2tUcmFuc2l0aW9uPShmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIG5ldyBFUCh0LHt0eXBlOjEsYW5pbWF0aW9uOnt0eXBlOjIsc3RlcHM6W10sb3B0aW9uczpudWxsfSxtYXRjaGVyczpbKHQsZSk9PiEwXSxvcHRpb25zOm51bGwscXVlcnlDb3VudDowLGRlcENvdW50OjB9LGUpfSkodCx0aGlzLnN0YXRlcyl9Z2V0IGNvbnRhaW5zUXVlcmllcygpe3JldHVybiB0aGlzLmFzdC5xdWVyeUNvdW50PjB9bWF0Y2hUcmFuc2l0aW9uKHQsZSxuLG8pe3JldHVybiB0aGlzLnRyYW5zaXRpb25GYWN0b3JpZXMuZmluZCgoaT0+aS5tYXRjaCh0LGUsbixvKSkpfHxudWxsfW1hdGNoU3R5bGVzKHQsZSxuKXtyZXR1cm4gdGhpcy5mYWxsYmFja1RyYW5zaXRpb24uYnVpbGRTdHlsZXModCxlLG4pfX1mdW5jdGlvbiBUUCh0LGUsbil7dC5oYXNPd25Qcm9wZXJ0eShlKT90Lmhhc093blByb3BlcnR5KG4pfHwodFtuXT10W2VdKTp0Lmhhc093blByb3BlcnR5KG4pJiYodFtlXT10W25dKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY29uc3QgTlA9bmV3IGZQO2NsYXNzIElQe2NvbnN0cnVjdG9yKHQsZSxuKXt0aGlzLmJvZHlOb2RlPXQsdGhpcy5fZHJpdmVyPWUsdGhpcy5fbm9ybWFsaXplcj1uLHRoaXMuX2FuaW1hdGlvbnM9e30sdGhpcy5fcGxheWVyc0J5SWQ9e30sdGhpcy5wbGF5ZXJzPVtdfXJlZ2lzdGVyKHQsZSl7Y29uc3Qgbj1bXSxvPXNQKHRoaXMuX2RyaXZlcixlLG4pO2lmKG4ubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGJ1aWxkIHRoZSBhbmltYXRpb24gZHVlIHRvIHRoZSBmb2xsb3dpbmcgZXJyb3JzOiAke24uam9pbigiXG4iKX1gKTt0aGlzLl9hbmltYXRpb25zW3RdPW99X2J1aWxkUGxheWVyKHQsZSxuKXtjb25zdCBvPXQuZWxlbWVudCxpPWRPKDAsdGhpcy5fbm9ybWFsaXplciwwLHQua2V5ZnJhbWVzLGUsbik7cmV0dXJuIHRoaXMuX2RyaXZlci5hbmltYXRlKG8saSx0LmR1cmF0aW9uLHQuZGVsYXksdC5lYXNpbmcsW10sITApfWNyZWF0ZSh0LGUsbj17fSl7Y29uc3Qgbz1bXSxpPXRoaXMuX2FuaW1hdGlvbnNbdF07bGV0IGE7Y29uc3Qgcj1uZXcgTWFwO2lmKGk/KGE9YlAodGhpcy5fZHJpdmVyLGUsaSxETyxFTyx7fSx7fSxuLE5QLG8pLGEuZm9yRWFjaCgodD0+e2NvbnN0IGU9Zk8ocix0LmVsZW1lbnQse30pO3QucG9zdFN0eWxlUHJvcHMuZm9yRWFjaCgodD0+ZVt0XT1udWxsKSl9KSkpOihvLnB1c2goIlRoZSByZXF1ZXN0ZWQgYW5pbWF0aW9uIGRvZXNuJ3QgZXhpc3Qgb3IgaGFzIGFscmVhZHkgYmVlbiBkZXN0cm95ZWQiKSxhPVtdKSxvLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBjcmVhdGUgdGhlIGFuaW1hdGlvbiBkdWUgdG8gdGhlIGZvbGxvd2luZyBlcnJvcnM6ICR7by5qb2luKCJcbiIpfWApO3IuZm9yRWFjaCgoKHQsZSk9PntPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChuPT57dFtuXT10aGlzLl9kcml2ZXIuY29tcHV0ZVN0eWxlKGUsbixYeCl9KSl9KSk7Y29uc3Qgcz1jTyhhLm1hcCgodD0+e2NvbnN0IGU9ci5nZXQodC5lbGVtZW50KTtyZXR1cm4gdGhpcy5fYnVpbGRQbGF5ZXIodCx7fSxlKX0pKSk7cmV0dXJuIHRoaXMuX3BsYXllcnNCeUlkW3RdPXMscy5vbkRlc3Ryb3koKCgpPT50aGlzLmRlc3Ryb3kodCkpKSx0aGlzLnBsYXllcnMucHVzaChzKSxzfWRlc3Ryb3kodCl7Y29uc3QgZT10aGlzLl9nZXRQbGF5ZXIodCk7ZS5kZXN0cm95KCksZGVsZXRlIHRoaXMuX3BsYXllcnNCeUlkW3RdO2NvbnN0IG49dGhpcy5wbGF5ZXJzLmluZGV4T2YoZSk7bj49MCYmdGhpcy5wbGF5ZXJzLnNwbGljZShuLDEpfV9nZXRQbGF5ZXIodCl7Y29uc3QgZT10aGlzLl9wbGF5ZXJzQnlJZFt0XTtpZighZSl0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBmaW5kIHRoZSB0aW1lbGluZSBwbGF5ZXIgcmVmZXJlbmNlZCBieSAke3R9YCk7cmV0dXJuIGV9bGlzdGVuKHQsZSxuLG8pe2NvbnN0IGk9dU8oZSwiIiwiIiwiIik7cmV0dXJuIHBPKHRoaXMuX2dldFBsYXllcih0KSxuLGksbyksKCk9Pnt9fWNvbW1hbmQodCxlLG4sbyl7aWYoInJlZ2lzdGVyIj09bilyZXR1cm4gdm9pZCB0aGlzLnJlZ2lzdGVyKHQsb1swXSk7aWYoImNyZWF0ZSI9PW4pcmV0dXJuIHZvaWQgdGhpcy5jcmVhdGUodCxlLG9bMF18fHt9KTtjb25zdCBpPXRoaXMuX2dldFBsYXllcih0KTtzd2l0Y2gobil7Y2FzZSJwbGF5IjppLnBsYXkoKTticmVhaztjYXNlInBhdXNlIjppLnBhdXNlKCk7YnJlYWs7Y2FzZSJyZXNldCI6aS5yZXNldCgpO2JyZWFrO2Nhc2UicmVzdGFydCI6aS5yZXN0YXJ0KCk7YnJlYWs7Y2FzZSJmaW5pc2giOmkuZmluaXNoKCk7YnJlYWs7Y2FzZSJpbml0IjppLmluaXQoKTticmVhaztjYXNlInNldFBvc2l0aW9uIjppLnNldFBvc2l0aW9uKHBhcnNlRmxvYXQob1swXSkpO2JyZWFrO2Nhc2UiZGVzdHJveSI6dGhpcy5kZXN0cm95KHQpfX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NvbnN0IHpQPSJuZy1hbmltYXRlLXF1ZXVlZCIsSFA9Im5nLWFuaW1hdGUtZGlzYWJsZWQiLEZQPSIubmctYW5pbWF0ZS1kaXNhYmxlZCIsTFA9W10sQlA9e25hbWVzcGFjZUlkOiIiLHNldEZvclJlbW92YWw6ITEsc2V0Rm9yTW92ZTohMSxoYXNBbmltYXRpb246ITEscmVtb3ZlZEJlZm9yZVF1ZXJpZWQ6ITF9LFZQPXtuYW1lc3BhY2VJZDoiIixzZXRGb3JNb3ZlOiExLHNldEZvclJlbW92YWw6ITEsaGFzQW5pbWF0aW9uOiExLHJlbW92ZWRCZWZvcmVRdWVyaWVkOiEwfTtjbGFzcyBqUHtjb25zdHJ1Y3Rvcih0LGU9IiIpe3RoaXMubmFtZXNwYWNlSWQ9ZTtjb25zdCBuPXQmJnQuaGFzT3duUHJvcGVydHkoInZhbHVlIik7aWYodGhpcy52YWx1ZT0oZnVuY3Rpb24gbyh0KXtyZXR1cm4gbnVsbCE9dD90Om51bGx9KShuP3QudmFsdWU6dCksbil7Y29uc3QgZT1GTyh0KTtkZWxldGUgZS52YWx1ZSx0aGlzLm9wdGlvbnM9ZX1lbHNlIHRoaXMub3B0aW9ucz17fTt0aGlzLm9wdGlvbnMucGFyYW1zfHwodGhpcy5vcHRpb25zLnBhcmFtcz17fSl9Z2V0IHBhcmFtcygpe3JldHVybiB0aGlzLm9wdGlvbnMucGFyYW1zfWFic29yYk9wdGlvbnModCl7Y29uc3QgZT10LnBhcmFtcztpZihlKXtjb25zdCB0PXRoaXMub3B0aW9ucy5wYXJhbXM7T2JqZWN0LmtleXMoZSkuZm9yRWFjaCgobj0+e251bGw9PXRbbl0mJih0W25dPWVbbl0pfSkpfX19Y29uc3QgVVA9InZvaWQiLFdQPW5ldyBqUChVUCk7Y2xhc3MgR1B7Y29uc3RydWN0b3IodCxlLG4pe3RoaXMuaWQ9dCx0aGlzLmhvc3RFbGVtZW50PWUsdGhpcy5fZW5naW5lPW4sdGhpcy5wbGF5ZXJzPVtdLHRoaXMuX3RyaWdnZXJzPXt9LHRoaXMuX3F1ZXVlPVtdLHRoaXMuX2VsZW1lbnRMaXN0ZW5lcnM9bmV3IE1hcCx0aGlzLl9ob3N0Q2xhc3NOYW1lPSJuZy10bnMtIit0LFFQKGUsdGhpcy5faG9zdENsYXNzTmFtZSl9bGlzdGVuKHQsZSxuLG8pe2lmKCF0aGlzLl90cmlnZ2Vycy5oYXNPd25Qcm9wZXJ0eShlKSl0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBsaXN0ZW4gb24gdGhlIGFuaW1hdGlvbiB0cmlnZ2VyIGV2ZW50ICIke259IiBiZWNhdXNlIHRoZSBhbmltYXRpb24gdHJpZ2dlciAiJHtlfSIgZG9lc24ndCBleGlzdCFgKTtpZihudWxsPT1ufHwwPT1uLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBsaXN0ZW4gb24gdGhlIGFuaW1hdGlvbiB0cmlnZ2VyICIke2V9IiBiZWNhdXNlIHRoZSBwcm92aWRlZCBldmVudCBpcyB1bmRlZmluZWQhYCk7aWYoIShmdW5jdGlvbiBpKHQpe3JldHVybiJzdGFydCI9PXR8fCJkb25lIj09dH0pKG4pKXRocm93IG5ldyBFcnJvcihgVGhlIHByb3ZpZGVkIGFuaW1hdGlvbiB0cmlnZ2VyIGV2ZW50ICIke259IiBmb3IgdGhlIGFuaW1hdGlvbiB0cmlnZ2VyICIke2V9IiBpcyBub3Qgc3VwcG9ydGVkIWApO2NvbnN0IGE9Zk8odGhpcy5fZWxlbWVudExpc3RlbmVycyx0LFtdKSxyPXtuYW1lOmUscGhhc2U6bixjYWxsYmFjazpvfTthLnB1c2gocik7Y29uc3Qgcz1mTyh0aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LHQse30pO3JldHVybiBzLmhhc093blByb3BlcnR5KGUpfHwoUVAodCxBTyksUVAodCwibmctdHJpZ2dlci0iK2UpLHNbZV09V1ApLCgpPT57dGhpcy5fZW5naW5lLmFmdGVyRmx1c2goKCgpPT57Y29uc3QgdD1hLmluZGV4T2Yocik7dD49MCYmYS5zcGxpY2UodCwxKSx0aGlzLl90cmlnZ2Vyc1tlXXx8ZGVsZXRlIHNbZV19KSl9fXJlZ2lzdGVyKHQsZSl7cmV0dXJuIXRoaXMuX3RyaWdnZXJzW3RdJiYodGhpcy5fdHJpZ2dlcnNbdF09ZSwhMCl9X2dldFRyaWdnZXIodCl7Y29uc3QgZT10aGlzLl90cmlnZ2Vyc1t0XTtpZighZSl0aHJvdyBuZXcgRXJyb3IoYFRoZSBwcm92aWRlZCBhbmltYXRpb24gdHJpZ2dlciAiJHt0fSIgaGFzIG5vdCBiZWVuIHJlZ2lzdGVyZWQhYCk7cmV0dXJuIGV9dHJpZ2dlcih0LGUsbixvPSEwKXtjb25zdCBpPXRoaXMuX2dldFRyaWdnZXIoZSksYT1uZXcgcVAodGhpcy5pZCxlLHQpO2xldCByPXRoaXMuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQuZ2V0KHQpO3J8fChRUCh0LEFPKSxRUCh0LCJuZy10cmlnZ2VyLSIrZSksdGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5zZXQodCxyPXt9KSk7bGV0IHM9cltlXTtjb25zdCBsPW5ldyBqUChuLHRoaXMuaWQpO2lmKCEobiYmbi5oYXNPd25Qcm9wZXJ0eSgidmFsdWUiKSkmJnMmJmwuYWJzb3JiT3B0aW9ucyhzLm9wdGlvbnMpLHJbZV09bCxzfHwocz1XUCksbC52YWx1ZSE9PVVQJiZzLnZhbHVlPT09bC52YWx1ZSl7aWYoIShmdW5jdGlvbiBjKHQsZSl7Y29uc3Qgbj1PYmplY3Qua2V5cyh0KSxvPU9iamVjdC5rZXlzKGUpO2lmKG4ubGVuZ3RoIT1vLmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IG89MDtvPG4ubGVuZ3RoO28rKyl7Y29uc3QgaT1uW29dO2lmKCFlLmhhc093blByb3BlcnR5KGkpfHx0W2ldIT09ZVtpXSlyZXR1cm4hMX1yZXR1cm4hMH0pKHMucGFyYW1zLGwucGFyYW1zKSl7Y29uc3QgZT1bXSxuPWkubWF0Y2hTdHlsZXMocy52YWx1ZSxzLnBhcmFtcyxlKSxvPWkubWF0Y2hTdHlsZXMobC52YWx1ZSxsLnBhcmFtcyxlKTtlLmxlbmd0aD90aGlzLl9lbmdpbmUucmVwb3J0RXJyb3IoZSk6dGhpcy5fZW5naW5lLmFmdGVyRmx1c2goKCgpPT57VU8odCxuKSxqTyh0LG8pfSkpfXJldHVybn1jb25zdCBkPWZPKHRoaXMuX2VuZ2luZS5wbGF5ZXJzQnlFbGVtZW50LHQsW10pO2QuZm9yRWFjaCgodD0+e3QubmFtZXNwYWNlSWQ9PXRoaXMuaWQmJnQudHJpZ2dlck5hbWU9PWUmJnQucXVldWVkJiZ0LmRlc3Ryb3koKX0pKTtsZXQgcD1pLm1hdGNoVHJhbnNpdGlvbihzLnZhbHVlLGwudmFsdWUsdCxsLnBhcmFtcyksbT0hMTtpZighcCl7aWYoIW8pcmV0dXJuO3A9aS5mYWxsYmFja1RyYW5zaXRpb24sbT0hMH1yZXR1cm4gdGhpcy5fZW5naW5lLnRvdGFsUXVldWVkUGxheWVycysrLHRoaXMuX3F1ZXVlLnB1c2goe2VsZW1lbnQ6dCx0cmlnZ2VyTmFtZTplLHRyYW5zaXRpb246cCxmcm9tU3RhdGU6cyx0b1N0YXRlOmwscGxheWVyOmEsaXNGYWxsYmFja1RyYW5zaXRpb246bX0pLG18fChRUCh0LHpQKSxhLm9uU3RhcnQoKCgpPT57JFAodCx6UCl9KSkpLGEub25Eb25lKCgoKT0+e2xldCBlPXRoaXMucGxheWVycy5pbmRleE9mKGEpO2U+PTAmJnRoaXMucGxheWVycy5zcGxpY2UoZSwxKTtjb25zdCBuPXRoaXMuX2VuZ2luZS5wbGF5ZXJzQnlFbGVtZW50LmdldCh0KTtpZihuKXtsZXQgdD1uLmluZGV4T2YoYSk7dD49MCYmbi5zcGxpY2UodCwxKX19KSksdGhpcy5wbGF5ZXJzLnB1c2goYSksZC5wdXNoKGEpLGF9ZGVyZWdpc3Rlcih0KXtkZWxldGUgdGhpcy5fdHJpZ2dlcnNbdF0sdGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5mb3JFYWNoKCgoZSxuKT0+e2RlbGV0ZSBlW3RdfSkpLHRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuZm9yRWFjaCgoKGUsbik9Pnt0aGlzLl9lbGVtZW50TGlzdGVuZXJzLnNldChuLGUuZmlsdGVyKChlPT5lLm5hbWUhPXQpKSl9KSl9Y2xlYXJFbGVtZW50Q2FjaGUodCl7dGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5kZWxldGUodCksdGhpcy5fZWxlbWVudExpc3RlbmVycy5kZWxldGUodCk7Y29uc3QgZT10aGlzLl9lbmdpbmUucGxheWVyc0J5RWxlbWVudC5nZXQodCk7ZSYmKGUuZm9yRWFjaCgodD0+dC5kZXN0cm95KCkpKSx0aGlzLl9lbmdpbmUucGxheWVyc0J5RWxlbWVudC5kZWxldGUodCkpfV9zaWduYWxSZW1vdmFsRm9ySW5uZXJUcmlnZ2Vycyh0LGUpe2NvbnN0IG49dGhpcy5fZW5naW5lLmRyaXZlci5xdWVyeSh0LFJPLCEwKTtuLmZvckVhY2goKHQ9PntpZih0Ll9fbmdfcmVtb3ZlZClyZXR1cm47Y29uc3Qgbj10aGlzLl9lbmdpbmUuZmV0Y2hOYW1lc3BhY2VzQnlFbGVtZW50KHQpO24uc2l6ZT9uLmZvckVhY2goKG49Pm4udHJpZ2dlckxlYXZlQW5pbWF0aW9uKHQsZSwhMSwhMCkpKTp0aGlzLmNsZWFyRWxlbWVudENhY2hlKHQpfSkpLHRoaXMuX2VuZ2luZS5hZnRlckZsdXNoQW5pbWF0aW9uc0RvbmUoKCgpPT5uLmZvckVhY2goKHQ9PnRoaXMuY2xlYXJFbGVtZW50Q2FjaGUodCkpKSkpfXRyaWdnZXJMZWF2ZUFuaW1hdGlvbih0LGUsbixvKXtjb25zdCBpPXRoaXMuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQuZ2V0KHQpO2lmKGkpe2NvbnN0IGE9W107aWYoT2JqZWN0LmtleXMoaSkuZm9yRWFjaCgoZT0+e2lmKHRoaXMuX3RyaWdnZXJzW2VdKXtjb25zdCBuPXRoaXMudHJpZ2dlcih0LGUsVVAsbyk7biYmYS5wdXNoKG4pfX0pKSxhLmxlbmd0aClyZXR1cm4gdGhpcy5fZW5naW5lLm1hcmtFbGVtZW50QXNSZW1vdmVkKHRoaXMuaWQsdCwhMCxlKSxuJiZjTyhhKS5vbkRvbmUoKCgpPT50aGlzLl9lbmdpbmUucHJvY2Vzc0xlYXZlTm9kZSh0KSkpLCEwfXJldHVybiExfXByZXBhcmVMZWF2ZUFuaW1hdGlvbkxpc3RlbmVycyh0KXtjb25zdCBlPXRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuZ2V0KHQpLG49dGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5nZXQodCk7aWYoZSYmbil7Y29uc3Qgbz1uZXcgU2V0O2UuZm9yRWFjaCgoZT0+e2NvbnN0IGk9ZS5uYW1lO2lmKG8uaGFzKGkpKXJldHVybjtvLmFkZChpKTtjb25zdCBhPXRoaXMuX3RyaWdnZXJzW2ldLmZhbGxiYWNrVHJhbnNpdGlvbixyPW5baV18fFdQLHM9bmV3IGpQKFVQKSxsPW5ldyBxUCh0aGlzLmlkLGksdCk7dGhpcy5fZW5naW5lLnRvdGFsUXVldWVkUGxheWVycysrLHRoaXMuX3F1ZXVlLnB1c2goe2VsZW1lbnQ6dCx0cmlnZ2VyTmFtZTppLHRyYW5zaXRpb246YSxmcm9tU3RhdGU6cix0b1N0YXRlOnMscGxheWVyOmwsaXNGYWxsYmFja1RyYW5zaXRpb246ITB9KX0pKX19cmVtb3ZlTm9kZSh0LGUpe2NvbnN0IG49dGhpcy5fZW5naW5lO2lmKHQuY2hpbGRFbGVtZW50Q291bnQmJnRoaXMuX3NpZ25hbFJlbW92YWxGb3JJbm5lclRyaWdnZXJzKHQsZSksdGhpcy50cmlnZ2VyTGVhdmVBbmltYXRpb24odCxlLCEwKSlyZXR1cm47bGV0IG89ITE7aWYobi50b3RhbEFuaW1hdGlvbnMpe2NvbnN0IGU9bi5wbGF5ZXJzLmxlbmd0aD9uLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LmdldCh0KTpbXTtpZihlJiZlLmxlbmd0aClvPSEwO2Vsc2V7bGV0IGU9dDtmb3IoO2U9ZS5wYXJlbnROb2RlOylpZihuLnN0YXRlc0J5RWxlbWVudC5nZXQoZSkpe289ITA7YnJlYWt9fX1pZih0aGlzLnByZXBhcmVMZWF2ZUFuaW1hdGlvbkxpc3RlbmVycyh0KSxvKW4ubWFya0VsZW1lbnRBc1JlbW92ZWQodGhpcy5pZCx0LCExLGUpO2Vsc2V7Y29uc3Qgbz10Ll9fbmdfcmVtb3ZlZDtvJiZvIT09QlB8fChuLmFmdGVyRmx1c2goKCgpPT50aGlzLmNsZWFyRWxlbWVudENhY2hlKHQpKSksbi5kZXN0cm95SW5uZXJBbmltYXRpb25zKHQpLG4uX29uUmVtb3ZhbENvbXBsZXRlKHQsZSkpfX1pbnNlcnROb2RlKHQsZSl7UVAodCx0aGlzLl9ob3N0Q2xhc3NOYW1lKX1kcmFpblF1ZXVlZFRyYW5zaXRpb25zKHQpe2NvbnN0IGU9W107cmV0dXJuIHRoaXMuX3F1ZXVlLmZvckVhY2goKG49Pntjb25zdCBvPW4ucGxheWVyO2lmKG8uZGVzdHJveWVkKXJldHVybjtjb25zdCBpPW4uZWxlbWVudCxhPXRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuZ2V0KGkpO2EmJmEuZm9yRWFjaCgoZT0+e2lmKGUubmFtZT09bi50cmlnZ2VyTmFtZSl7Y29uc3Qgbz11TyhpLG4udHJpZ2dlck5hbWUsbi5mcm9tU3RhdGUudmFsdWUsbi50b1N0YXRlLnZhbHVlKTtvLl9kYXRhPXQscE8obi5wbGF5ZXIsZS5waGFzZSxvLGUuY2FsbGJhY2spfX0pKSxvLm1hcmtlZEZvckRlc3Ryb3k/dGhpcy5fZW5naW5lLmFmdGVyRmx1c2goKCgpPT57by5kZXN0cm95KCl9KSk6ZS5wdXNoKG4pfSkpLHRoaXMuX3F1ZXVlPVtdLGUuc29ydCgoKHQsZSk9Pntjb25zdCBuPXQudHJhbnNpdGlvbi5hc3QuZGVwQ291bnQsbz1lLnRyYW5zaXRpb24uYXN0LmRlcENvdW50O3JldHVybiAwPT1ufHwwPT1vP24tbzp0aGlzLl9lbmdpbmUuZHJpdmVyLmNvbnRhaW5zRWxlbWVudCh0LmVsZW1lbnQsZS5lbGVtZW50KT8xOi0xfSkpfWRlc3Ryb3kodCl7dGhpcy5wbGF5ZXJzLmZvckVhY2goKHQ9PnQuZGVzdHJveSgpKSksdGhpcy5fc2lnbmFsUmVtb3ZhbEZvcklubmVyVHJpZ2dlcnModGhpcy5ob3N0RWxlbWVudCx0KX1lbGVtZW50Q29udGFpbnNEYXRhKHQpe2xldCBlPSExO3JldHVybiB0aGlzLl9lbGVtZW50TGlzdGVuZXJzLmhhcyh0KSYmKGU9ITApLGU9ISF0aGlzLl9xdWV1ZS5maW5kKChlPT5lLmVsZW1lbnQ9PT10KSl8fGUsZX19Y2xhc3MgWVB7Y29uc3RydWN0b3IodCxlLG4pe3RoaXMuYm9keU5vZGU9dCx0aGlzLmRyaXZlcj1lLHRoaXMuX25vcm1hbGl6ZXI9bix0aGlzLnBsYXllcnM9W10sdGhpcy5uZXdIb3N0RWxlbWVudHM9bmV3IE1hcCx0aGlzLnBsYXllcnNCeUVsZW1lbnQ9bmV3IE1hcCx0aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50PW5ldyBNYXAsdGhpcy5zdGF0ZXNCeUVsZW1lbnQ9bmV3IE1hcCx0aGlzLmRpc2FibGVkTm9kZXM9bmV3IFNldCx0aGlzLnRvdGFsQW5pbWF0aW9ucz0wLHRoaXMudG90YWxRdWV1ZWRQbGF5ZXJzPTAsdGhpcy5fbmFtZXNwYWNlTG9va3VwPXt9LHRoaXMuX25hbWVzcGFjZUxpc3Q9W10sdGhpcy5fZmx1c2hGbnM9W10sdGhpcy5fd2hlblF1aWV0Rm5zPVtdLHRoaXMubmFtZXNwYWNlc0J5SG9zdEVsZW1lbnQ9bmV3IE1hcCx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHM9W10sdGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzPVtdLHRoaXMub25SZW1vdmFsQ29tcGxldGU9KHQsZSk9Pnt9fV9vblJlbW92YWxDb21wbGV0ZSh0LGUpe3RoaXMub25SZW1vdmFsQ29tcGxldGUodCxlKX1nZXQgcXVldWVkUGxheWVycygpe2NvbnN0IHQ9W107cmV0dXJuIHRoaXMuX25hbWVzcGFjZUxpc3QuZm9yRWFjaCgoZT0+e2UucGxheWVycy5mb3JFYWNoKChlPT57ZS5xdWV1ZWQmJnQucHVzaChlKX0pKX0pKSx0fWNyZWF0ZU5hbWVzcGFjZSh0LGUpe2NvbnN0IG49bmV3IEdQKHQsZSx0aGlzKTtyZXR1cm4gdGhpcy5ib2R5Tm9kZSYmdGhpcy5kcml2ZXIuY29udGFpbnNFbGVtZW50KHRoaXMuYm9keU5vZGUsZSk/dGhpcy5fYmFsYW5jZU5hbWVzcGFjZUxpc3QobixlKToodGhpcy5uZXdIb3N0RWxlbWVudHMuc2V0KGUsbiksdGhpcy5jb2xsZWN0RW50ZXJFbGVtZW50KGUpKSx0aGlzLl9uYW1lc3BhY2VMb29rdXBbdF09bn1fYmFsYW5jZU5hbWVzcGFjZUxpc3QodCxlKXtjb25zdCBuPXRoaXMuX25hbWVzcGFjZUxpc3QubGVuZ3RoLTE7aWYobj49MCl7bGV0IG89ITE7Zm9yKGxldCBpPW47aT49MDtpLS0paWYodGhpcy5kcml2ZXIuY29udGFpbnNFbGVtZW50KHRoaXMuX25hbWVzcGFjZUxpc3RbaV0uaG9zdEVsZW1lbnQsZSkpe3RoaXMuX25hbWVzcGFjZUxpc3Quc3BsaWNlKGkrMSwwLHQpLG89ITA7YnJlYWt9b3x8dGhpcy5fbmFtZXNwYWNlTGlzdC5zcGxpY2UoMCwwLHQpfWVsc2UgdGhpcy5fbmFtZXNwYWNlTGlzdC5wdXNoKHQpO3JldHVybiB0aGlzLm5hbWVzcGFjZXNCeUhvc3RFbGVtZW50LnNldChlLHQpLHR9cmVnaXN0ZXIodCxlKXtsZXQgbj10aGlzLl9uYW1lc3BhY2VMb29rdXBbdF07cmV0dXJuIG58fChuPXRoaXMuY3JlYXRlTmFtZXNwYWNlKHQsZSkpLG59cmVnaXN0ZXJUcmlnZ2VyKHQsZSxuKXtsZXQgbz10aGlzLl9uYW1lc3BhY2VMb29rdXBbdF07byYmby5yZWdpc3RlcihlLG4pJiZ0aGlzLnRvdGFsQW5pbWF0aW9ucysrfWRlc3Ryb3kodCxlKXtpZighdClyZXR1cm47Y29uc3Qgbj10aGlzLl9mZXRjaE5hbWVzcGFjZSh0KTt0aGlzLmFmdGVyRmx1c2goKCgpPT57dGhpcy5uYW1lc3BhY2VzQnlIb3N0RWxlbWVudC5kZWxldGUobi5ob3N0RWxlbWVudCksZGVsZXRlIHRoaXMuX25hbWVzcGFjZUxvb2t1cFt0XTtjb25zdCBlPXRoaXMuX25hbWVzcGFjZUxpc3QuaW5kZXhPZihuKTtlPj0wJiZ0aGlzLl9uYW1lc3BhY2VMaXN0LnNwbGljZShlLDEpfSkpLHRoaXMuYWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25lKCgoKT0+bi5kZXN0cm95KGUpKSl9X2ZldGNoTmFtZXNwYWNlKHQpe3JldHVybiB0aGlzLl9uYW1lc3BhY2VMb29rdXBbdF19ZmV0Y2hOYW1lc3BhY2VzQnlFbGVtZW50KHQpe2NvbnN0IGU9bmV3IFNldCxuPXRoaXMuc3RhdGVzQnlFbGVtZW50LmdldCh0KTtpZihuKXtjb25zdCB0PU9iamVjdC5rZXlzKG4pO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKXtjb25zdCBpPW5bdFtvXV0ubmFtZXNwYWNlSWQ7aWYoaSl7Y29uc3QgdD10aGlzLl9mZXRjaE5hbWVzcGFjZShpKTt0JiZlLmFkZCh0KX19fXJldHVybiBlfXRyaWdnZXIodCxlLG4sbyl7aWYoWlAoZSkpe2NvbnN0IGk9dGhpcy5fZmV0Y2hOYW1lc3BhY2UodCk7aWYoaSlyZXR1cm4gaS50cmlnZ2VyKGUsbixvKSwhMH1yZXR1cm4hMX1pbnNlcnROb2RlKHQsZSxuLG8pe2lmKCFaUChlKSlyZXR1cm47Y29uc3QgaT1lLl9fbmdfcmVtb3ZlZDtpZihpJiZpLnNldEZvclJlbW92YWwpe2kuc2V0Rm9yUmVtb3ZhbD0hMSxpLnNldEZvck1vdmU9ITA7Y29uc3QgdD10aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMuaW5kZXhPZihlKTt0Pj0wJiZ0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMuc3BsaWNlKHQsMSl9aWYodCl7Y29uc3Qgbz10aGlzLl9mZXRjaE5hbWVzcGFjZSh0KTtvJiZvLmluc2VydE5vZGUoZSxuKX1vJiZ0aGlzLmNvbGxlY3RFbnRlckVsZW1lbnQoZSl9Y29sbGVjdEVudGVyRWxlbWVudCh0KXt0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMucHVzaCh0KX1tYXJrRWxlbWVudEFzRGlzYWJsZWQodCxlKXtlP3RoaXMuZGlzYWJsZWROb2Rlcy5oYXModCl8fCh0aGlzLmRpc2FibGVkTm9kZXMuYWRkKHQpLFFQKHQsSFApKTp0aGlzLmRpc2FibGVkTm9kZXMuaGFzKHQpJiYodGhpcy5kaXNhYmxlZE5vZGVzLmRlbGV0ZSh0KSwkUCh0LEhQKSl9cmVtb3ZlTm9kZSh0LGUsbixvKXtpZihaUChlKSl7Y29uc3QgaT10P3RoaXMuX2ZldGNoTmFtZXNwYWNlKHQpOm51bGw7aWYoaT9pLnJlbW92ZU5vZGUoZSxvKTp0aGlzLm1hcmtFbGVtZW50QXNSZW1vdmVkKHQsZSwhMSxvKSxuKXtjb25zdCBuPXRoaXMubmFtZXNwYWNlc0J5SG9zdEVsZW1lbnQuZ2V0KGUpO24mJm4uaWQhPT10JiZuLnJlbW92ZU5vZGUoZSxvKX19ZWxzZSB0aGlzLl9vblJlbW92YWxDb21wbGV0ZShlLG8pfW1hcmtFbGVtZW50QXNSZW1vdmVkKHQsZSxuLG8pe3RoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5wdXNoKGUpLGUuX19uZ19yZW1vdmVkPXtuYW1lc3BhY2VJZDp0LHNldEZvclJlbW92YWw6byxoYXNBbmltYXRpb246bixyZW1vdmVkQmVmb3JlUXVlcmllZDohMX19bGlzdGVuKHQsZSxuLG8saSl7cmV0dXJuIFpQKGUpP3RoaXMuX2ZldGNoTmFtZXNwYWNlKHQpLmxpc3RlbihlLG4sbyxpKTooKT0+e319X2J1aWxkSW5zdHJ1Y3Rpb24odCxlLG4sbyxpKXtyZXR1cm4gdC50cmFuc2l0aW9uLmJ1aWxkKHRoaXMuZHJpdmVyLHQuZWxlbWVudCx0LmZyb21TdGF0ZS52YWx1ZSx0LnRvU3RhdGUudmFsdWUsbixvLHQuZnJvbVN0YXRlLm9wdGlvbnMsdC50b1N0YXRlLm9wdGlvbnMsZSxpKX1kZXN0cm95SW5uZXJBbmltYXRpb25zKHQpe2xldCBlPXRoaXMuZHJpdmVyLnF1ZXJ5KHQsUk8sITApO2UuZm9yRWFjaCgodD0+dGhpcy5kZXN0cm95QWN0aXZlQW5pbWF0aW9uc0ZvckVsZW1lbnQodCkpKSwwIT10aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LnNpemUmJihlPXRoaXMuZHJpdmVyLnF1ZXJ5KHQsTk8sITApLGUuZm9yRWFjaCgodD0+dGhpcy5maW5pc2hBY3RpdmVRdWVyaWVkQW5pbWF0aW9uT25FbGVtZW50KHQpKSkpfWRlc3Ryb3lBY3RpdmVBbmltYXRpb25zRm9yRWxlbWVudCh0KXtjb25zdCBlPXRoaXMucGxheWVyc0J5RWxlbWVudC5nZXQodCk7ZSYmZS5mb3JFYWNoKCh0PT57dC5xdWV1ZWQ/dC5tYXJrZWRGb3JEZXN0cm95PSEwOnQuZGVzdHJveSgpfSkpfWZpbmlzaEFjdGl2ZVF1ZXJpZWRBbmltYXRpb25PbkVsZW1lbnQodCl7Y29uc3QgZT10aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LmdldCh0KTtlJiZlLmZvckVhY2goKHQ9PnQuZmluaXNoKCkpKX13aGVuUmVuZGVyaW5nRG9uZSgpe3JldHVybiBuZXcgUHJvbWlzZSgodD0+e2lmKHRoaXMucGxheWVycy5sZW5ndGgpcmV0dXJuIGNPKHRoaXMucGxheWVycykub25Eb25lKCgoKT0+dCgpKSk7dCgpfSkpfXByb2Nlc3NMZWF2ZU5vZGUodCl7Y29uc3QgZT10Ll9fbmdfcmVtb3ZlZDtpZihlJiZlLnNldEZvclJlbW92YWwpe2lmKHQuX19uZ19yZW1vdmVkPUJQLGUubmFtZXNwYWNlSWQpe3RoaXMuZGVzdHJveUlubmVyQW5pbWF0aW9ucyh0KTtjb25zdCBuPXRoaXMuX2ZldGNoTmFtZXNwYWNlKGUubmFtZXNwYWNlSWQpO24mJm4uY2xlYXJFbGVtZW50Q2FjaGUodCl9dGhpcy5fb25SZW1vdmFsQ29tcGxldGUodCxlLnNldEZvclJlbW92YWwpfXRoaXMuZHJpdmVyLm1hdGNoZXNFbGVtZW50KHQsRlApJiZ0aGlzLm1hcmtFbGVtZW50QXNEaXNhYmxlZCh0LCExKSx0aGlzLmRyaXZlci5xdWVyeSh0LEZQLCEwKS5mb3JFYWNoKCh0PT57dGhpcy5tYXJrRWxlbWVudEFzRGlzYWJsZWQodCwhMSl9KSl9Zmx1c2godD0tMSl7bGV0IGU9W107aWYodGhpcy5uZXdIb3N0RWxlbWVudHMuc2l6ZSYmKHRoaXMubmV3SG9zdEVsZW1lbnRzLmZvckVhY2goKCh0LGUpPT50aGlzLl9iYWxhbmNlTmFtZXNwYWNlTGlzdCh0LGUpKSksdGhpcy5uZXdIb3N0RWxlbWVudHMuY2xlYXIoKSksdGhpcy50b3RhbEFuaW1hdGlvbnMmJnRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5sZW5ndGgpZm9yKGxldCB0PTA7dDx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMubGVuZ3RoO3QrKylRUCh0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHNbdF0sIm5nLXN0YXItaW5zZXJ0ZWQiKTtpZih0aGlzLl9uYW1lc3BhY2VMaXN0Lmxlbmd0aCYmKHRoaXMudG90YWxRdWV1ZWRQbGF5ZXJzfHx0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMubGVuZ3RoKSl7Y29uc3Qgbj1bXTt0cnl7ZT10aGlzLl9mbHVzaEFuaW1hdGlvbnMobix0KX1maW5hbGx5e2ZvcihsZXQgdD0wO3Q8bi5sZW5ndGg7dCsrKW5bdF0oKX19ZWxzZSBmb3IobGV0IHQ9MDt0PHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5sZW5ndGg7dCsrKXRoaXMucHJvY2Vzc0xlYXZlTm9kZSh0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHNbdF0pO2lmKHRoaXMudG90YWxRdWV1ZWRQbGF5ZXJzPTAsdGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzLmxlbmd0aD0wLHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5sZW5ndGg9MCx0aGlzLl9mbHVzaEZucy5mb3JFYWNoKCh0PT50KCkpKSx0aGlzLl9mbHVzaEZucz1bXSx0aGlzLl93aGVuUXVpZXRGbnMubGVuZ3RoKXtjb25zdCB0PXRoaXMuX3doZW5RdWlldEZuczt0aGlzLl93aGVuUXVpZXRGbnM9W10sZS5sZW5ndGg/Y08oZSkub25Eb25lKCgoKT0+e3QuZm9yRWFjaCgodD0+dCgpKSl9KSk6dC5mb3JFYWNoKCh0PT50KCkpKX19cmVwb3J0RXJyb3IodCl7dGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gcHJvY2VzcyBhbmltYXRpb25zIGR1ZSB0byB0aGUgZm9sbG93aW5nIGZhaWxlZCB0cmlnZ2VyIHRyYW5zaXRpb25zXG4gJHt0LmpvaW4oIlxuIil9YCl9X2ZsdXNoQW5pbWF0aW9ucyh0LGUpe2NvbnN0IG49bmV3IGZQLG89W10saT1uZXcgTWFwLGE9W10scj1uZXcgTWFwLHM9bmV3IE1hcCxsPW5ldyBNYXAsYz1uZXcgU2V0O3RoaXMuZGlzYWJsZWROb2Rlcy5mb3JFYWNoKCh0PT57Yy5hZGQodCk7Y29uc3QgZT10aGlzLmRyaXZlci5xdWVyeSh0LCIubmctYW5pbWF0ZS1xdWV1ZWQiLCEwKTtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyljLmFkZChlW3RdKX0pKTtjb25zdCBkPXRoaXMuYm9keU5vZGUscD1BcnJheS5mcm9tKHRoaXMuc3RhdGVzQnlFbGVtZW50LmtleXMoKSksbT1KUChwLHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cyksdT1uZXcgTWFwO2xldCBmPTA7bS5mb3JFYWNoKCgodCxlKT0+e2NvbnN0IG49RE8rZisrO3Uuc2V0KGUsbiksdC5mb3JFYWNoKCh0PT5RUCh0LG4pKSl9KSk7Y29uc3QgZz1bXSxoPW5ldyBTZXQsYj1uZXcgU2V0O2ZvcihsZXQgdD0wO3Q8dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmxlbmd0aDt0Kyspe2NvbnN0IGU9dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzW3RdLG49ZS5fX25nX3JlbW92ZWQ7biYmbi5zZXRGb3JSZW1vdmFsJiYoZy5wdXNoKGUpLGguYWRkKGUpLG4uaGFzQW5pbWF0aW9uP3RoaXMuZHJpdmVyLnF1ZXJ5KGUsIi5uZy1zdGFyLWluc2VydGVkIiwhMCkuZm9yRWFjaCgodD0+aC5hZGQodCkpKTpiLmFkZChlKSl9Y29uc3QgeT1uZXcgTWFwLF89SlAocCxBcnJheS5mcm9tKGgpKTtfLmZvckVhY2goKCh0LGUpPT57Y29uc3Qgbj1FTytmKys7eS5zZXQoZSxuKSx0LmZvckVhY2goKHQ9PlFQKHQsbikpKX0pKSx0LnB1c2goKCgpPT57bS5mb3JFYWNoKCgodCxlKT0+e2NvbnN0IG49dS5nZXQoZSk7dC5mb3JFYWNoKCh0PT4kUCh0LG4pKSl9KSksXy5mb3JFYWNoKCgodCxlKT0+e2NvbnN0IG49eS5nZXQoZSk7dC5mb3JFYWNoKCh0PT4kUCh0LG4pKSl9KSksZy5mb3JFYWNoKCh0PT57dGhpcy5wcm9jZXNzTGVhdmVOb2RlKHQpfSkpfSkpO2NvbnN0IEM9W10sTT1bXTtmb3IobGV0IHQ9dGhpcy5fbmFtZXNwYWNlTGlzdC5sZW5ndGgtMTt0Pj0wO3QtLSl0aGlzLl9uYW1lc3BhY2VMaXN0W3RdLmRyYWluUXVldWVkVHJhbnNpdGlvbnMoZSkuZm9yRWFjaCgodD0+e2NvbnN0IGU9dC5wbGF5ZXIsaT10LmVsZW1lbnQ7aWYoQy5wdXNoKGUpLHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5sZW5ndGgpe2NvbnN0IHQ9aS5fX25nX3JlbW92ZWQ7aWYodCYmdC5zZXRGb3JNb3ZlKXJldHVybiB2b2lkIGUuZGVzdHJveSgpfWNvbnN0IGM9IWR8fCF0aGlzLmRyaXZlci5jb250YWluc0VsZW1lbnQoZCxpKSxwPXkuZ2V0KGkpLG09dS5nZXQoaSksZj10aGlzLl9idWlsZEluc3RydWN0aW9uKHQsbixtLHAsYyk7aWYoZi5lcnJvcnMmJmYuZXJyb3JzLmxlbmd0aClNLnB1c2goZik7ZWxzZXtpZihjKXJldHVybiBlLm9uU3RhcnQoKCgpPT5VTyhpLGYuZnJvbVN0eWxlcykpKSxlLm9uRGVzdHJveSgoKCk9PmpPKGksZi50b1N0eWxlcykpKSx2b2lkIG8ucHVzaChlKTtpZih0LmlzRmFsbGJhY2tUcmFuc2l0aW9uKXJldHVybiBlLm9uU3RhcnQoKCgpPT5VTyhpLGYuZnJvbVN0eWxlcykpKSxlLm9uRGVzdHJveSgoKCk9PmpPKGksZi50b1N0eWxlcykpKSx2b2lkIG8ucHVzaChlKTtmLnRpbWVsaW5lcy5mb3JFYWNoKCh0PT50LnN0cmV0Y2hTdGFydGluZ0tleWZyYW1lPSEwKSksbi5hcHBlbmQoaSxmLnRpbWVsaW5lcyksYS5wdXNoKHtpbnN0cnVjdGlvbjpmLHBsYXllcjplLGVsZW1lbnQ6aX0pLGYucXVlcmllZEVsZW1lbnRzLmZvckVhY2goKHQ9PmZPKHIsdCxbXSkucHVzaChlKSkpLGYucHJlU3R5bGVQcm9wcy5mb3JFYWNoKCgodCxlKT0+e2NvbnN0IG49T2JqZWN0LmtleXModCk7aWYobi5sZW5ndGgpe2xldCB0PXMuZ2V0KGUpO3R8fHMuc2V0KGUsdD1uZXcgU2V0KSxuLmZvckVhY2goKGU9PnQuYWRkKGUpKSl9fSkpLGYucG9zdFN0eWxlUHJvcHMuZm9yRWFjaCgoKHQsZSk9Pntjb25zdCBuPU9iamVjdC5rZXlzKHQpO2xldCBvPWwuZ2V0KGUpO298fGwuc2V0KGUsbz1uZXcgU2V0KSxuLmZvckVhY2goKHQ9Pm8uYWRkKHQpKSl9KSl9fSkpO2lmKE0ubGVuZ3RoKXtjb25zdCB0PVtdO00uZm9yRWFjaCgoZT0+e3QucHVzaChgQCR7ZS50cmlnZ2VyTmFtZX0gaGFzIGZhaWxlZCBkdWUgdG86XG5gKSxlLmVycm9ycy5mb3JFYWNoKChlPT50LnB1c2goYC0gJHtlfVxuYCkpKX0pKSxDLmZvckVhY2goKHQ9PnQuZGVzdHJveSgpKSksdGhpcy5yZXBvcnRFcnJvcih0KX1jb25zdCB2PW5ldyBNYXAseD1uZXcgTWFwO2EuZm9yRWFjaCgodD0+e2NvbnN0IGU9dC5lbGVtZW50O24uaGFzKGUpJiYoeC5zZXQoZSxlKSx0aGlzLl9iZWZvcmVBbmltYXRpb25CdWlsZCh0LnBsYXllci5uYW1lc3BhY2VJZCx0Lmluc3RydWN0aW9uLHYpKX0pKSxvLmZvckVhY2goKHQ9Pntjb25zdCBlPXQuZWxlbWVudDt0aGlzLl9nZXRQcmV2aW91c1BsYXllcnMoZSwhMSx0Lm5hbWVzcGFjZUlkLHQudHJpZ2dlck5hbWUsbnVsbCkuZm9yRWFjaCgodD0+e2ZPKHYsZSxbXSkucHVzaCh0KSx0LmRlc3Ryb3koKX0pKX0pKTtjb25zdCBPPWcuZmlsdGVyKCh0PT5udyh0LHMsbCkpKSxQPW5ldyBNYXA7S1AoUCx0aGlzLmRyaXZlcixiLGwsWHgpLmZvckVhY2goKHQ9Pntudyh0LHMsbCkmJk8ucHVzaCh0KX0pKTtjb25zdCB3PW5ldyBNYXA7bS5mb3JFYWNoKCgodCxlKT0+e0tQKHcsdGhpcy5kcml2ZXIsbmV3IFNldCh0KSxzLCIhIil9KSksTy5mb3JFYWNoKCh0PT57Y29uc3QgZT1QLmdldCh0KSxuPXcuZ2V0KHQpO1Auc2V0KHQsT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLG4pKX0pKTtjb25zdCBrPVtdLFM9W10sRD17fTthLmZvckVhY2goKHQ9Pntjb25zdHtlbGVtZW50OmUscGxheWVyOmEsaW5zdHJ1Y3Rpb246cn09dDtpZihuLmhhcyhlKSl7aWYoYy5oYXMoZSkpcmV0dXJuIGEub25EZXN0cm95KCgoKT0+ak8oZSxyLnRvU3R5bGVzKSkpLGEuZGlzYWJsZWQ9ITAsYS5vdmVycmlkZVRvdGFsVGltZShyLnRvdGFsVGltZSksdm9pZCBvLnB1c2goYSk7bGV0IHQ9RDtpZih4LnNpemU+MSl7bGV0IG49ZTtjb25zdCBvPVtdO2Zvcig7bj1uLnBhcmVudE5vZGU7KXtjb25zdCBlPXguZ2V0KG4pO2lmKGUpe3Q9ZTticmVha31vLnB1c2gobil9by5mb3JFYWNoKChlPT54LnNldChlLHQpKSl9Y29uc3Qgbj10aGlzLl9idWlsZEFuaW1hdGlvbihhLm5hbWVzcGFjZUlkLHIsdixpLHcsUCk7aWYoYS5zZXRSZWFsUGxheWVyKG4pLHQ9PT1EKWsucHVzaChhKTtlbHNle2NvbnN0IGU9dGhpcy5wbGF5ZXJzQnlFbGVtZW50LmdldCh0KTtlJiZlLmxlbmd0aCYmKGEucGFyZW50UGxheWVyPWNPKGUpKSxvLnB1c2goYSl9fWVsc2UgVU8oZSxyLmZyb21TdHlsZXMpLGEub25EZXN0cm95KCgoKT0+ak8oZSxyLnRvU3R5bGVzKSkpLFMucHVzaChhKSxjLmhhcyhlKSYmby5wdXNoKGEpfSkpLFMuZm9yRWFjaCgodD0+e2NvbnN0IGU9aS5nZXQodC5lbGVtZW50KTtpZihlJiZlLmxlbmd0aCl7Y29uc3Qgbj1jTyhlKTt0LnNldFJlYWxQbGF5ZXIobil9fSkpLG8uZm9yRWFjaCgodD0+e3QucGFyZW50UGxheWVyP3Quc3luY1BsYXllckV2ZW50cyh0LnBhcmVudFBsYXllcik6dC5kZXN0cm95KCl9KSk7Zm9yKGxldCB0PTA7dDxnLmxlbmd0aDt0Kyspe2NvbnN0IGU9Z1t0XSxuPWUuX19uZ19yZW1vdmVkO2lmKCRQKGUsRU8pLG4mJm4uaGFzQW5pbWF0aW9uKWNvbnRpbnVlO2xldCBvPVtdO2lmKHIuc2l6ZSl7bGV0IHQ9ci5nZXQoZSk7dCYmdC5sZW5ndGgmJm8ucHVzaCguLi50KTtsZXQgbj10aGlzLmRyaXZlci5xdWVyeShlLE5PLCEwKTtmb3IobGV0IHQ9MDt0PG4ubGVuZ3RoO3QrKyl7bGV0IGU9ci5nZXQoblt0XSk7ZSYmZS5sZW5ndGgmJm8ucHVzaCguLi5lKX19Y29uc3QgaT1vLmZpbHRlcigodD0+IXQuZGVzdHJveWVkKSk7aS5sZW5ndGg/dHcodGhpcyxlLGkpOnRoaXMucHJvY2Vzc0xlYXZlTm9kZShlKX1yZXR1cm4gZy5sZW5ndGg9MCxrLmZvckVhY2goKHQ9Pnt0aGlzLnBsYXllcnMucHVzaCh0KSx0Lm9uRG9uZSgoKCk9Pnt0LmRlc3Ryb3koKTtjb25zdCBlPXRoaXMucGxheWVycy5pbmRleE9mKHQpO3RoaXMucGxheWVycy5zcGxpY2UoZSwxKX0pKSx0LnBsYXkoKX0pKSxrfWVsZW1lbnRDb250YWluc0RhdGEodCxlKXtsZXQgbj0hMTtjb25zdCBvPWUuX19uZ19yZW1vdmVkO3JldHVybiBvJiZvLnNldEZvclJlbW92YWwmJihuPSEwKSx0aGlzLnBsYXllcnNCeUVsZW1lbnQuaGFzKGUpJiYobj0hMCksdGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudC5oYXMoZSkmJihuPSEwKSx0aGlzLnN0YXRlc0J5RWxlbWVudC5oYXMoZSkmJihuPSEwKSx0aGlzLl9mZXRjaE5hbWVzcGFjZSh0KS5lbGVtZW50Q29udGFpbnNEYXRhKGUpfHxufWFmdGVyRmx1c2godCl7dGhpcy5fZmx1c2hGbnMucHVzaCh0KX1hZnRlckZsdXNoQW5pbWF0aW9uc0RvbmUodCl7dGhpcy5fd2hlblF1aWV0Rm5zLnB1c2godCl9X2dldFByZXZpb3VzUGxheWVycyh0LGUsbixvLGkpe2xldCBhPVtdO2lmKGUpe2NvbnN0IGU9dGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudC5nZXQodCk7ZSYmKGE9ZSl9ZWxzZXtjb25zdCBlPXRoaXMucGxheWVyc0J5RWxlbWVudC5nZXQodCk7aWYoZSl7Y29uc3QgdD0haXx8aT09VVA7ZS5mb3JFYWNoKChlPT57ZS5xdWV1ZWR8fCh0fHxlLnRyaWdnZXJOYW1lPT1vKSYmYS5wdXNoKGUpfSkpfX1yZXR1cm4obnx8bykmJihhPWEuZmlsdGVyKCh0PT4hKG4mJm4hPXQubmFtZXNwYWNlSWR8fG8mJm8hPXQudHJpZ2dlck5hbWUpKSkpLGF9X2JlZm9yZUFuaW1hdGlvbkJ1aWxkKHQsZSxuKXtjb25zdCBvPWUuZWxlbWVudCxpPWUuaXNSZW1vdmFsVHJhbnNpdGlvbj92b2lkIDA6dCxhPWUuaXNSZW1vdmFsVHJhbnNpdGlvbj92b2lkIDA6ZS50cmlnZ2VyTmFtZTtmb3IoY29uc3QgdCBvZiBlLnRpbWVsaW5lcyl7Y29uc3Qgcj10LmVsZW1lbnQscz1yIT09byxsPWZPKG4scixbXSk7dGhpcy5fZ2V0UHJldmlvdXNQbGF5ZXJzKHIscyxpLGEsZS50b1N0YXRlKS5mb3JFYWNoKCh0PT57Y29uc3QgZT10LmdldFJlYWxQbGF5ZXIoKTtlLmJlZm9yZURlc3Ryb3kmJmUuYmVmb3JlRGVzdHJveSgpLHQuZGVzdHJveSgpLGwucHVzaCh0KX0pKX1VTyhvLGUuZnJvbVN0eWxlcyl9X2J1aWxkQW5pbWF0aW9uKHQsZSxuLG8saSxhKXtjb25zdCByPWUudHJpZ2dlck5hbWUscz1lLmVsZW1lbnQsbD1bXSxjPW5ldyBTZXQsZD1uZXcgU2V0LHA9ZS50aW1lbGluZXMubWFwKChlPT57Y29uc3QgcD1lLmVsZW1lbnQ7Yy5hZGQocCk7Y29uc3QgbT1wLl9fbmdfcmVtb3ZlZDtpZihtJiZtLnJlbW92ZWRCZWZvcmVRdWVyaWVkKXJldHVybiBuZXcgck8oZS5kdXJhdGlvbixlLmRlbGF5KTtjb25zdCB1PXAhPT1zLGY9KGZ1bmN0aW9uIGcodCl7Y29uc3QgZT1bXTtyZXR1cm4gZXcodCxlKSxlfSkoKG4uZ2V0KHApfHxMUCkubWFwKCh0PT50LmdldFJlYWxQbGF5ZXIoKSkpKS5maWx0ZXIoKHQ9PiEhdC5lbGVtZW50JiZ0LmVsZW1lbnQ9PT1wKSksaD1pLmdldChwKSxiPWEuZ2V0KHApLHk9ZE8oMCx0aGlzLl9ub3JtYWxpemVyLDAsZS5rZXlmcmFtZXMsaCxiKSxfPXRoaXMuX2J1aWxkUGxheWVyKGUseSxmKTtpZihlLnN1YlRpbWVsaW5lJiZvJiZkLmFkZChwKSx1KXtjb25zdCBlPW5ldyBxUCh0LHIscCk7ZS5zZXRSZWFsUGxheWVyKF8pLGwucHVzaChlKX1yZXR1cm4gX30pKTtsLmZvckVhY2goKHQ9PntmTyh0aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LHQuZWxlbWVudCxbXSkucHVzaCh0KSx0Lm9uRG9uZSgoKCk9PihmdW5jdGlvbiBlKHQsbixvKXtsZXQgaTtpZih0IGluc3RhbmNlb2YgTWFwKXtpZihpPXQuZ2V0KG4pLGkpe2lmKGkubGVuZ3RoKXtjb25zdCB0PWkuaW5kZXhPZihvKTtpLnNwbGljZSh0LDEpfTA9PWkubGVuZ3RoJiZ0LmRlbGV0ZShuKX19ZWxzZSBpZihpPXRbbl0saSl7aWYoaS5sZW5ndGgpe2NvbnN0IHQ9aS5pbmRleE9mKG8pO2kuc3BsaWNlKHQsMSl9MD09aS5sZW5ndGgmJmRlbGV0ZSB0W25dfXJldHVybiBpfSkodGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudCx0LmVsZW1lbnQsdCkpKX0pKSxjLmZvckVhY2goKHQ9PlFQKHQsVE8pKSk7Y29uc3QgbT1jTyhwKTtyZXR1cm4gbS5vbkRlc3Ryb3koKCgpPT57Yy5mb3JFYWNoKCh0PT4kUCh0LFRPKSkpLGpPKHMsZS50b1N0eWxlcyl9KSksZC5mb3JFYWNoKCh0PT57Zk8obyx0LFtdKS5wdXNoKG0pfSkpLG19X2J1aWxkUGxheWVyKHQsZSxuKXtyZXR1cm4gZS5sZW5ndGg+MD90aGlzLmRyaXZlci5hbmltYXRlKHQuZWxlbWVudCxlLHQuZHVyYXRpb24sdC5kZWxheSx0LmVhc2luZyxuKTpuZXcgck8odC5kdXJhdGlvbix0LmRlbGF5KX19Y2xhc3MgcVB7Y29uc3RydWN0b3IodCxlLG4pe3RoaXMubmFtZXNwYWNlSWQ9dCx0aGlzLnRyaWdnZXJOYW1lPWUsdGhpcy5lbGVtZW50PW4sdGhpcy5fcGxheWVyPW5ldyByTyx0aGlzLl9jb250YWluc1JlYWxQbGF5ZXI9ITEsdGhpcy5fcXVldWVkQ2FsbGJhY2tzPXt9LHRoaXMuZGVzdHJveWVkPSExLHRoaXMubWFya2VkRm9yRGVzdHJveT0hMSx0aGlzLmRpc2FibGVkPSExLHRoaXMucXVldWVkPSEwLHRoaXMudG90YWxUaW1lPTB9c2V0UmVhbFBsYXllcih0KXt0aGlzLl9jb250YWluc1JlYWxQbGF5ZXJ8fCh0aGlzLl9wbGF5ZXI9dCxPYmplY3Qua2V5cyh0aGlzLl9xdWV1ZWRDYWxsYmFja3MpLmZvckVhY2goKGU9Pnt0aGlzLl9xdWV1ZWRDYWxsYmFja3NbZV0uZm9yRWFjaCgobj0+cE8odCxlLHZvaWQgMCxuKSkpfSkpLHRoaXMuX3F1ZXVlZENhbGxiYWNrcz17fSx0aGlzLl9jb250YWluc1JlYWxQbGF5ZXI9ITAsdGhpcy5vdmVycmlkZVRvdGFsVGltZSh0LnRvdGFsVGltZSksdGhpcy5xdWV1ZWQ9ITEpfWdldFJlYWxQbGF5ZXIoKXtyZXR1cm4gdGhpcy5fcGxheWVyfW92ZXJyaWRlVG90YWxUaW1lKHQpe3RoaXMudG90YWxUaW1lPXR9c3luY1BsYXllckV2ZW50cyh0KXtjb25zdCBlPXRoaXMuX3BsYXllcjtlLnRyaWdnZXJDYWxsYmFjayYmdC5vblN0YXJ0KCgoKT0+ZS50cmlnZ2VyQ2FsbGJhY2soInN0YXJ0IikpKSx0Lm9uRG9uZSgoKCk9PnRoaXMuZmluaXNoKCkpKSx0Lm9uRGVzdHJveSgoKCk9PnRoaXMuZGVzdHJveSgpKSl9X3F1ZXVlRXZlbnQodCxlKXtmTyh0aGlzLl9xdWV1ZWRDYWxsYmFja3MsdCxbXSkucHVzaChlKX1vbkRvbmUodCl7dGhpcy5xdWV1ZWQmJnRoaXMuX3F1ZXVlRXZlbnQoImRvbmUiLHQpLHRoaXMuX3BsYXllci5vbkRvbmUodCl9b25TdGFydCh0KXt0aGlzLnF1ZXVlZCYmdGhpcy5fcXVldWVFdmVudCgic3RhcnQiLHQpLHRoaXMuX3BsYXllci5vblN0YXJ0KHQpfW9uRGVzdHJveSh0KXt0aGlzLnF1ZXVlZCYmdGhpcy5fcXVldWVFdmVudCgiZGVzdHJveSIsdCksdGhpcy5fcGxheWVyLm9uRGVzdHJveSh0KX1pbml0KCl7dGhpcy5fcGxheWVyLmluaXQoKX1oYXNTdGFydGVkKCl7cmV0dXJuIXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIuaGFzU3RhcnRlZCgpfXBsYXkoKXshdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5wbGF5KCl9cGF1c2UoKXshdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5wYXVzZSgpfXJlc3RhcnQoKXshdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5yZXN0YXJ0KCl9ZmluaXNoKCl7dGhpcy5fcGxheWVyLmZpbmlzaCgpfWRlc3Ryb3koKXt0aGlzLmRlc3Ryb3llZD0hMCx0aGlzLl9wbGF5ZXIuZGVzdHJveSgpfXJlc2V0KCl7IXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIucmVzZXQoKX1zZXRQb3NpdGlvbih0KXt0aGlzLnF1ZXVlZHx8dGhpcy5fcGxheWVyLnNldFBvc2l0aW9uKHQpfWdldFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMucXVldWVkPzA6dGhpcy5fcGxheWVyLmdldFBvc2l0aW9uKCl9dHJpZ2dlckNhbGxiYWNrKHQpe2NvbnN0IGU9dGhpcy5fcGxheWVyO2UudHJpZ2dlckNhbGxiYWNrJiZlLnRyaWdnZXJDYWxsYmFjayh0KX19ZnVuY3Rpb24gWlAodCl7cmV0dXJuIHQmJjE9PT10Lm5vZGVUeXBlfWZ1bmN0aW9uIFhQKHQsZSl7Y29uc3Qgbj10LnN0eWxlLmRpc3BsYXk7cmV0dXJuIHQuc3R5bGUuZGlzcGxheT1udWxsIT1lP2U6Im5vbmUiLG59ZnVuY3Rpb24gS1AodCxlLG4sbyxpKXtjb25zdCBhPVtdO24uZm9yRWFjaCgodD0+YS5wdXNoKFhQKHQpKSkpO2NvbnN0IHI9W107by5mb3JFYWNoKCgobixvKT0+e2NvbnN0IGE9e307bi5mb3JFYWNoKCh0PT57Y29uc3Qgbj1hW3RdPWUuY29tcHV0ZVN0eWxlKG8sdCxpKTtuJiYwIT1uLmxlbmd0aHx8KG8uX19uZ19yZW1vdmVkPVZQLHIucHVzaChvKSl9KSksdC5zZXQobyxhKX0pKTtsZXQgcz0wO3JldHVybiBuLmZvckVhY2goKHQ9PlhQKHQsYVtzKytdKSkpLHJ9ZnVuY3Rpb24gSlAodCxlKXtjb25zdCBuPW5ldyBNYXA7aWYodC5mb3JFYWNoKCh0PT5uLnNldCh0LFtdKSkpLDA9PWUubGVuZ3RoKXJldHVybiBuO2NvbnN0IG89bmV3IFNldChlKSxpPW5ldyBNYXA7ZnVuY3Rpb24gYSh0KXtpZighdClyZXR1cm4gMTtsZXQgZT1pLmdldCh0KTtpZihlKXJldHVybiBlO2NvbnN0IHI9dC5wYXJlbnROb2RlO3JldHVybiBlPW4uaGFzKHIpP3I6by5oYXMocik/MTphKHIpLGkuc2V0KHQsZSksZX1yZXR1cm4gZS5mb3JFYWNoKCh0PT57Y29uc3QgZT1hKHQpOzEhPT1lJiZuLmdldChlKS5wdXNoKHQpfSkpLG59ZnVuY3Rpb24gUVAodCxlKXtpZih0LmNsYXNzTGlzdCl0LmNsYXNzTGlzdC5hZGQoZSk7ZWxzZXtsZXQgbj10LiQkY2xhc3NlcztufHwobj10LiQkY2xhc3Nlcz17fSksbltlXT0hMH19ZnVuY3Rpb24gJFAodCxlKXtpZih0LmNsYXNzTGlzdCl0LmNsYXNzTGlzdC5yZW1vdmUoZSk7ZWxzZXtsZXQgbj10LiQkY2xhc3NlcztuJiZkZWxldGUgbltlXX19ZnVuY3Rpb24gdHcodCxlLG4pe2NPKG4pLm9uRG9uZSgoKCk9PnQucHJvY2Vzc0xlYXZlTm9kZShlKSkpfWZ1bmN0aW9uIGV3KHQsZSl7Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspe2NvbnN0IG89dFtuXTtvIGluc3RhbmNlb2Ygc08/ZXcoby5wbGF5ZXJzLGUpOmUucHVzaChvKX19ZnVuY3Rpb24gbncodCxlLG4pe2NvbnN0IG89bi5nZXQodCk7aWYoIW8pcmV0dXJuITE7bGV0IGk9ZS5nZXQodCk7cmV0dXJuIGk/by5mb3JFYWNoKCh0PT5pLmFkZCh0KSkpOmUuc2V0KHQsbyksbi5kZWxldGUodCksITB9Y2xhc3Mgb3d7Y29uc3RydWN0b3IodCxlLG4pe3RoaXMuYm9keU5vZGU9dCx0aGlzLl9kcml2ZXI9ZSx0aGlzLl90cmlnZ2VyQ2FjaGU9e30sdGhpcy5vblJlbW92YWxDb21wbGV0ZT0odCxlKT0+e30sdGhpcy5fdHJhbnNpdGlvbkVuZ2luZT1uZXcgWVAodCxlLG4pLHRoaXMuX3RpbWVsaW5lRW5naW5lPW5ldyBJUCh0LGUsbiksdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5vblJlbW92YWxDb21wbGV0ZT0odCxlKT0+dGhpcy5vblJlbW92YWxDb21wbGV0ZSh0LGUpfXJlZ2lzdGVyVHJpZ2dlcih0LGUsbixvLGkpe2NvbnN0IGE9dCsiLSIrbztsZXQgcj10aGlzLl90cmlnZ2VyQ2FjaGVbYV07aWYoIXIpe2NvbnN0IHQ9W10sZT1zUCh0aGlzLl9kcml2ZXIsaSx0KTtpZih0Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoYFRoZSBhbmltYXRpb24gdHJpZ2dlciAiJHtvfSIgaGFzIGZhaWxlZCB0byBidWlsZCBkdWUgdG8gdGhlIGZvbGxvd2luZyBlcnJvcnM6XG4gLSAke3Quam9pbigiXG4gLSAiKX1gKTtyPShmdW5jdGlvbiBzKHQsZSl7cmV0dXJuIG5ldyBSUCh0LGUpfSkobyxlKSx0aGlzLl90cmlnZ2VyQ2FjaGVbYV09cn10aGlzLl90cmFuc2l0aW9uRW5naW5lLnJlZ2lzdGVyVHJpZ2dlcihlLG8scil9cmVnaXN0ZXIodCxlKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLnJlZ2lzdGVyKHQsZSl9ZGVzdHJveSh0LGUpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUuZGVzdHJveSh0LGUpfW9uSW5zZXJ0KHQsZSxuLG8pe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUuaW5zZXJ0Tm9kZSh0LGUsbixvKX1vblJlbW92ZSh0LGUsbixvKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLnJlbW92ZU5vZGUodCxlLG98fCExLG4pfWRpc2FibGVBbmltYXRpb25zKHQsZSl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5tYXJrRWxlbWVudEFzRGlzYWJsZWQodCxlKX1wcm9jZXNzKHQsZSxuLG8pe2lmKCJAIj09bi5jaGFyQXQoMCkpe2NvbnN0W3QsaV09Z08obik7dGhpcy5fdGltZWxpbmVFbmdpbmUuY29tbWFuZCh0LGUsaSxvKX1lbHNlIHRoaXMuX3RyYW5zaXRpb25FbmdpbmUudHJpZ2dlcih0LGUsbixvKX1saXN0ZW4odCxlLG4sbyxpKXtpZigiQCI9PW4uY2hhckF0KDApKXtjb25zdFt0LG9dPWdPKG4pO3JldHVybiB0aGlzLl90aW1lbGluZUVuZ2luZS5saXN0ZW4odCxlLG8saSl9cmV0dXJuIHRoaXMuX3RyYW5zaXRpb25FbmdpbmUubGlzdGVuKHQsZSxuLG8saSl9Zmx1c2godD0tMSl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5mbHVzaCh0KX1nZXQgcGxheWVycygpe3JldHVybiB0aGlzLl90cmFuc2l0aW9uRW5naW5lLnBsYXllcnMuY29uY2F0KHRoaXMuX3RpbWVsaW5lRW5naW5lLnBsYXllcnMpfXdoZW5SZW5kZXJpbmdEb25lKCl7cmV0dXJuIHRoaXMuX3RyYW5zaXRpb25FbmdpbmUud2hlblJlbmRlcmluZ0RvbmUoKX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIGl3KHQsZSl7bGV0IG49bnVsbCxvPW51bGw7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSkmJmUubGVuZ3RoPyhuPXJ3KGVbMF0pLGUubGVuZ3RoPjEmJihvPXJ3KGVbZS5sZW5ndGgtMV0pKSk6ZSYmKG49cncoZSkpLG58fG8/bmV3IGF3KHQsbixvKTpudWxsfWNsYXNzIGF3e2NvbnN0cnVjdG9yKHQsZSxuKXt0aGlzLl9lbGVtZW50PXQsdGhpcy5fc3RhcnRTdHlsZXM9ZSx0aGlzLl9lbmRTdHlsZXM9bix0aGlzLl9zdGF0ZT0wO2xldCBvPWF3LmluaXRpYWxTdHlsZXNCeUVsZW1lbnQuZ2V0KHQpO298fGF3LmluaXRpYWxTdHlsZXNCeUVsZW1lbnQuc2V0KHQsbz17fSksdGhpcy5faW5pdGlhbFN0eWxlcz1vfXN0YXJ0KCl7dGhpcy5fc3RhdGU8MSYmKHRoaXMuX3N0YXJ0U3R5bGVzJiZqTyh0aGlzLl9lbGVtZW50LHRoaXMuX3N0YXJ0U3R5bGVzLHRoaXMuX2luaXRpYWxTdHlsZXMpLHRoaXMuX3N0YXRlPTEpfWZpbmlzaCgpe3RoaXMuc3RhcnQoKSx0aGlzLl9zdGF0ZTwyJiYoak8odGhpcy5fZWxlbWVudCx0aGlzLl9pbml0aWFsU3R5bGVzKSx0aGlzLl9lbmRTdHlsZXMmJihqTyh0aGlzLl9lbGVtZW50LHRoaXMuX2VuZFN0eWxlcyksdGhpcy5fZW5kU3R5bGVzPW51bGwpLHRoaXMuX3N0YXRlPTEpfWRlc3Ryb3koKXt0aGlzLmZpbmlzaCgpLHRoaXMuX3N0YXRlPDMmJihhdy5pbml0aWFsU3R5bGVzQnlFbGVtZW50LmRlbGV0ZSh0aGlzLl9lbGVtZW50KSx0aGlzLl9zdGFydFN0eWxlcyYmKFVPKHRoaXMuX2VsZW1lbnQsdGhpcy5fc3RhcnRTdHlsZXMpLHRoaXMuX2VuZFN0eWxlcz1udWxsKSx0aGlzLl9lbmRTdHlsZXMmJihVTyh0aGlzLl9lbGVtZW50LHRoaXMuX2VuZFN0eWxlcyksdGhpcy5fZW5kU3R5bGVzPW51bGwpLGpPKHRoaXMuX2VsZW1lbnQsdGhpcy5faW5pdGlhbFN0eWxlcyksdGhpcy5fc3RhdGU9Myl9fWZ1bmN0aW9uIHJ3KHQpe2xldCBlPW51bGw7Y29uc3Qgbj1PYmplY3Qua2V5cyh0KTtmb3IobGV0IG89MDtvPG4ubGVuZ3RoO28rKyl7Y29uc3QgaT1uW29dO3N3KGkpJiYoZT1lfHx7fSxlW2ldPXRbaV0pfXJldHVybiBlfWZ1bmN0aW9uIHN3KHQpe3JldHVybiJkaXNwbGF5Ij09PXR8fCJwb3NpdGlvbiI9PT10fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9hdy5pbml0aWFsU3R5bGVzQnlFbGVtZW50PW5ldyBXZWFrTWFwO2NvbnN0IGx3PSJhbmltYXRpb24iLGN3PSJhbmltYXRpb25lbmQiO2NsYXNzIGR3e2NvbnN0cnVjdG9yKHQsZSxuLG8saSxhLHIpe3RoaXMuX2VsZW1lbnQ9dCx0aGlzLl9uYW1lPWUsdGhpcy5fZHVyYXRpb249bix0aGlzLl9kZWxheT1vLHRoaXMuX2Vhc2luZz1pLHRoaXMuX2ZpbGxNb2RlPWEsdGhpcy5fb25Eb25lRm49cix0aGlzLl9maW5pc2hlZD0hMSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fc3RhcnRUaW1lPTAsdGhpcy5fcG9zaXRpb249MCx0aGlzLl9ldmVudEZuPXQ9PnRoaXMuX2hhbmRsZUNhbGxiYWNrKHQpfWFwcGx5KCl7IShmdW5jdGlvbiB0KGUsbil7Y29uc3Qgbz1odyhlLCIiKS50cmltKCk7bGV0IGk9MDtvLmxlbmd0aCYmKChmdW5jdGlvbiBhKHQsZSl7bGV0IG49MDtmb3IobGV0IG89MDtvPHQubGVuZ3RoO28rKyl0LmNoYXJBdChvKT09PWUmJm4rKztyZXR1cm4gbn0pKG8sIiwiKSsxLG49YCR7b30sICR7bn1gKSxndyhlLCIiLG4pfSkodGhpcy5fZWxlbWVudCxgJHt0aGlzLl9kdXJhdGlvbn1tcyAke3RoaXMuX2Vhc2luZ30gJHt0aGlzLl9kZWxheX1tcyAxIG5vcm1hbCAke3RoaXMuX2ZpbGxNb2RlfSAke3RoaXMuX25hbWV9YCksZncodGhpcy5fZWxlbWVudCx0aGlzLl9ldmVudEZuLCExKSx0aGlzLl9zdGFydFRpbWU9RGF0ZS5ub3coKX1wYXVzZSgpe3B3KHRoaXMuX2VsZW1lbnQsdGhpcy5fbmFtZSwicGF1c2VkIil9cmVzdW1lKCl7cHcodGhpcy5fZWxlbWVudCx0aGlzLl9uYW1lLCJydW5uaW5nIil9c2V0UG9zaXRpb24odCl7Y29uc3QgZT1tdyh0aGlzLl9lbGVtZW50LHRoaXMuX25hbWUpO3RoaXMuX3Bvc2l0aW9uPXQqdGhpcy5fZHVyYXRpb24sZ3codGhpcy5fZWxlbWVudCwiRGVsYXkiLGAtJHt0aGlzLl9wb3NpdGlvbn1tc2AsZSl9Z2V0UG9zaXRpb24oKXtyZXR1cm4gdGhpcy5fcG9zaXRpb259X2hhbmRsZUNhbGxiYWNrKHQpe2NvbnN0IGU9dC5fbmdUZXN0TWFudWFsVGltZXN0YW1wfHxEYXRlLm5vdygpLG49MWUzKnBhcnNlRmxvYXQodC5lbGFwc2VkVGltZS50b0ZpeGVkKDMpKTt0LmFuaW1hdGlvbk5hbWU9PXRoaXMuX25hbWUmJk1hdGgubWF4KGUtdGhpcy5fc3RhcnRUaW1lLDApPj10aGlzLl9kZWxheSYmbj49dGhpcy5fZHVyYXRpb24mJnRoaXMuZmluaXNoKCl9ZmluaXNoKCl7dGhpcy5fZmluaXNoZWR8fCh0aGlzLl9maW5pc2hlZD0hMCx0aGlzLl9vbkRvbmVGbigpLGZ3KHRoaXMuX2VsZW1lbnQsdGhpcy5fZXZlbnRGbiwhMCkpfWRlc3Ryb3koKXt0aGlzLl9kZXN0cm95ZWR8fCh0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy5maW5pc2goKSwoZnVuY3Rpb24gdChlLG4pe2NvbnN0IG89aHcoZSwiIikuc3BsaXQoIiwiKSxpPXV3KG8sbik7aT49MCYmKG8uc3BsaWNlKGksMSksZ3coZSwiIixvLmpvaW4oIiwiKSkpfSkodGhpcy5fZWxlbWVudCx0aGlzLl9uYW1lKSl9fWZ1bmN0aW9uIHB3KHQsZSxuKXtndyh0LCJQbGF5U3RhdGUiLG4sbXcodCxlKSl9ZnVuY3Rpb24gbXcodCxlKXtjb25zdCBuPWh3KHQsIiIpO3JldHVybiBuLmluZGV4T2YoIiwiKT4wP3V3KG4uc3BsaXQoIiwiKSxlKTp1dyhbbl0sZSl9ZnVuY3Rpb24gdXcodCxlKXtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKylpZih0W25dLmluZGV4T2YoZSk+PTApcmV0dXJuIG47cmV0dXJuLTF9ZnVuY3Rpb24gZncodCxlLG4pe24/dC5yZW1vdmVFdmVudExpc3RlbmVyKGN3LGUpOnQuYWRkRXZlbnRMaXN0ZW5lcihjdyxlKX1mdW5jdGlvbiBndyh0LGUsbixvKXtjb25zdCBpPWx3K2U7aWYobnVsbCE9byl7Y29uc3QgZT10LnN0eWxlW2ldO2lmKGUubGVuZ3RoKXtjb25zdCB0PWUuc3BsaXQoIiwiKTt0W29dPW4sbj10LmpvaW4oIiwiKX19dC5zdHlsZVtpXT1ufWZ1bmN0aW9uIGh3KHQsZSl7cmV0dXJuIHQuc3R5bGVbbHcrZV18fCIifWNsYXNzIGJ3e2NvbnN0cnVjdG9yKHQsZSxuLG8saSxhLHIscyl7dGhpcy5lbGVtZW50PXQsdGhpcy5rZXlmcmFtZXM9ZSx0aGlzLmFuaW1hdGlvbk5hbWU9bix0aGlzLl9kdXJhdGlvbj1vLHRoaXMuX2RlbGF5PWksdGhpcy5fZmluYWxTdHlsZXM9cix0aGlzLl9zcGVjaWFsU3R5bGVzPXMsdGhpcy5fb25Eb25lRm5zPVtdLHRoaXMuX29uU3RhcnRGbnM9W10sdGhpcy5fb25EZXN0cm95Rm5zPVtdLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5jdXJyZW50U25hcHNob3Q9e30sdGhpcy5fc3RhdGU9MCx0aGlzLmVhc2luZz1hfHwibGluZWFyIix0aGlzLnRvdGFsVGltZT1vK2ksdGhpcy5fYnVpbGRTdHlsZXIoKX1vblN0YXJ0KHQpe3RoaXMuX29uU3RhcnRGbnMucHVzaCh0KX1vbkRvbmUodCl7dGhpcy5fb25Eb25lRm5zLnB1c2godCl9b25EZXN0cm95KHQpe3RoaXMuX29uRGVzdHJveUZucy5wdXNoKHQpfWRlc3Ryb3koKXt0aGlzLmluaXQoKSx0aGlzLl9zdGF0ZT49NHx8KHRoaXMuX3N0YXRlPTQsdGhpcy5fc3R5bGVyLmRlc3Ryb3koKSx0aGlzLl9mbHVzaFN0YXJ0Rm5zKCksdGhpcy5fZmx1c2hEb25lRm5zKCksdGhpcy5fc3BlY2lhbFN0eWxlcyYmdGhpcy5fc3BlY2lhbFN0eWxlcy5kZXN0cm95KCksdGhpcy5fb25EZXN0cm95Rm5zLmZvckVhY2goKHQ9PnQoKSkpLHRoaXMuX29uRGVzdHJveUZucz1bXSl9X2ZsdXNoRG9uZUZucygpe3RoaXMuX29uRG9uZUZucy5mb3JFYWNoKCh0PT50KCkpKSx0aGlzLl9vbkRvbmVGbnM9W119X2ZsdXNoU3RhcnRGbnMoKXt0aGlzLl9vblN0YXJ0Rm5zLmZvckVhY2goKHQ9PnQoKSkpLHRoaXMuX29uU3RhcnRGbnM9W119ZmluaXNoKCl7dGhpcy5pbml0KCksdGhpcy5fc3RhdGU+PTN8fCh0aGlzLl9zdGF0ZT0zLHRoaXMuX3N0eWxlci5maW5pc2goKSx0aGlzLl9mbHVzaFN0YXJ0Rm5zKCksdGhpcy5fc3BlY2lhbFN0eWxlcyYmdGhpcy5fc3BlY2lhbFN0eWxlcy5maW5pc2goKSx0aGlzLl9mbHVzaERvbmVGbnMoKSl9c2V0UG9zaXRpb24odCl7dGhpcy5fc3R5bGVyLnNldFBvc2l0aW9uKHQpfWdldFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX3N0eWxlci5nZXRQb3NpdGlvbigpfWhhc1N0YXJ0ZWQoKXtyZXR1cm4gdGhpcy5fc3RhdGU+PTJ9aW5pdCgpe3RoaXMuX3N0YXRlPj0xfHwodGhpcy5fc3RhdGU9MSx0aGlzLl9zdHlsZXIuYXBwbHkoKSx0aGlzLl9kZWxheSYmdGhpcy5fc3R5bGVyLnBhdXNlKCkpfXBsYXkoKXt0aGlzLmluaXQoKSx0aGlzLmhhc1N0YXJ0ZWQoKXx8KHRoaXMuX2ZsdXNoU3RhcnRGbnMoKSx0aGlzLl9zdGF0ZT0yLHRoaXMuX3NwZWNpYWxTdHlsZXMmJnRoaXMuX3NwZWNpYWxTdHlsZXMuc3RhcnQoKSksdGhpcy5fc3R5bGVyLnJlc3VtZSgpfXBhdXNlKCl7dGhpcy5pbml0KCksdGhpcy5fc3R5bGVyLnBhdXNlKCl9cmVzdGFydCgpe3RoaXMucmVzZXQoKSx0aGlzLnBsYXkoKX1yZXNldCgpe3RoaXMuX3N0eWxlci5kZXN0cm95KCksdGhpcy5fYnVpbGRTdHlsZXIoKSx0aGlzLl9zdHlsZXIuYXBwbHkoKX1fYnVpbGRTdHlsZXIoKXt0aGlzLl9zdHlsZXI9bmV3IGR3KHRoaXMuZWxlbWVudCx0aGlzLmFuaW1hdGlvbk5hbWUsdGhpcy5fZHVyYXRpb24sdGhpcy5fZGVsYXksdGhpcy5lYXNpbmcsImZvcndhcmRzIiwoKCk9PnRoaXMuZmluaXNoKCkpKX10cmlnZ2VyQ2FsbGJhY2sodCl7Y29uc3QgZT0ic3RhcnQiPT10P3RoaXMuX29uU3RhcnRGbnM6dGhpcy5fb25Eb25lRm5zO2UuZm9yRWFjaCgodD0+dCgpKSksZS5sZW5ndGg9MH1iZWZvcmVEZXN0cm95KCl7dGhpcy5pbml0KCk7Y29uc3QgdD17fTtpZih0aGlzLmhhc1N0YXJ0ZWQoKSl7Y29uc3QgZT10aGlzLl9zdGF0ZT49MztPYmplY3Qua2V5cyh0aGlzLl9maW5hbFN0eWxlcykuZm9yRWFjaCgobj0+eyJvZmZzZXQiIT1uJiYodFtuXT1lP3RoaXMuX2ZpbmFsU3R5bGVzW25dOnRQKHRoaXMuZWxlbWVudCxuKSl9KSl9dGhpcy5jdXJyZW50U25hcHNob3Q9dH19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NsYXNzIHl3IGV4dGVuZHMgck97Y29uc3RydWN0b3IodCxlKXtzdXBlcigpLHRoaXMuZWxlbWVudD10LHRoaXMuX3N0YXJ0aW5nU3R5bGVzPXt9LHRoaXMuX19pbml0aWFsaXplZD0hMSx0aGlzLl9zdHlsZXM9d08oZSl9aW5pdCgpeyF0aGlzLl9faW5pdGlhbGl6ZWQmJnRoaXMuX3N0YXJ0aW5nU3R5bGVzJiYodGhpcy5fX2luaXRpYWxpemVkPSEwLE9iamVjdC5rZXlzKHRoaXMuX3N0eWxlcykuZm9yRWFjaCgodD0+e3RoaXMuX3N0YXJ0aW5nU3R5bGVzW3RdPXRoaXMuZWxlbWVudC5zdHlsZVt0XX0pKSxzdXBlci5pbml0KCkpfXBsYXkoKXt0aGlzLl9zdGFydGluZ1N0eWxlcyYmKHRoaXMuaW5pdCgpLE9iamVjdC5rZXlzKHRoaXMuX3N0eWxlcykuZm9yRWFjaCgodD0+dGhpcy5lbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KHQsdGhpcy5fc3R5bGVzW3RdKSkpLHN1cGVyLnBsYXkoKSl9ZGVzdHJveSgpe3RoaXMuX3N0YXJ0aW5nU3R5bGVzJiYoT2JqZWN0LmtleXModGhpcy5fc3RhcnRpbmdTdHlsZXMpLmZvckVhY2goKHQ9Pntjb25zdCBlPXRoaXMuX3N0YXJ0aW5nU3R5bGVzW3RdO2U/dGhpcy5lbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KHQsZSk6dGhpcy5lbGVtZW50LnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpfSkpLHRoaXMuX3N0YXJ0aW5nU3R5bGVzPW51bGwsc3VwZXIuZGVzdHJveSgpKX19Y2xhc3MgX3d7Y29uc3RydWN0b3IoKXt0aGlzLl9jb3VudD0wLHRoaXMuX2hlYWQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiaGVhZCIpfXZhbGlkYXRlU3R5bGVQcm9wZXJ0eSh0KXtyZXR1cm4gdk8odCl9bWF0Y2hlc0VsZW1lbnQodCxlKXtyZXR1cm4geE8odCxlKX1jb250YWluc0VsZW1lbnQodCxlKXtyZXR1cm4gT08odCxlKX1xdWVyeSh0LGUsbil7cmV0dXJuIFBPKHQsZSxuKX1jb21wdXRlU3R5bGUodCxlLG4pe3JldHVybiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KVtlXX1idWlsZEtleWZyYW1lRWxlbWVudCh0LGUsbil7bj1uLm1hcCgodD0+d08odCkpKTtsZXQgbz1gQGtleWZyYW1lcyAke2V9IHtcbmAsaT0iIjtuLmZvckVhY2goKHQ9PntpPSIgIjtjb25zdCBlPXBhcnNlRmxvYXQodC5vZmZzZXQpO28rPWAke2l9JHsxMDAqZX0lIHtcbmAsaSs9IiAiLE9iamVjdC5rZXlzKHQpLmZvckVhY2goKGU9Pntjb25zdCBuPXRbZV07c3dpdGNoKGUpe2Nhc2Uib2Zmc2V0IjpyZXR1cm47Y2FzZSJlYXNpbmciOnJldHVybiB2b2lkKG4mJihvKz1gJHtpfWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246ICR7bn07XG5gKSk7ZGVmYXVsdDpyZXR1cm4gdm9pZChvKz1gJHtpfSR7ZX06ICR7bn07XG5gKX19KSksbys9YCR7aX19XG5gfSkpLG8rPSJ9XG4iO2NvbnN0IGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtyZXR1cm4gYS50ZXh0Q29udGVudD1vLGF9YW5pbWF0ZSh0LGUsbixvLGksYT1bXSxyKXsoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJnImJihmdW5jdGlvbiBzKCl7Q3d8fChjb25zb2xlLndhcm4oIkBhbmd1bGFyL2FuaW1hdGlvbnM6IHBsZWFzZSBsb2FkIHRoZSB3ZWItYW5pbWF0aW9ucy5qcyBwb2x5ZmlsbCB0byBhbGxvdyBwcm9ncmFtbWF0aWMgYWNjZXNzLi4uXG4iLCIgIHZpc2l0IGh0dHBzOi8vYml0Lmx5L0lXdWthbSB0byBsZWFybiBtb3JlIGFib3V0IHVzaW5nIHRoZSB3ZWItYW5pbWF0aW9uLWpzIHBvbHlmaWxsLiIpLEN3PSEwKX0pKCk7Y29uc3QgbD1hLmZpbHRlcigodD0+dCBpbnN0YW5jZW9mIGJ3KSksYz17fTtKTyhuLG8pJiZsLmZvckVhY2goKHQ9PntsZXQgZT10LmN1cnJlbnRTbmFwc2hvdDtPYmplY3Qua2V5cyhlKS5mb3JFYWNoKCh0PT5jW3RdPWVbdF0pKX0pKTtjb25zdCBkPShmdW5jdGlvbiBwKHQpe2xldCBlPXt9O3JldHVybiB0JiYoQXJyYXkuaXNBcnJheSh0KT90Olt0XSkuZm9yRWFjaCgodD0+e09iamVjdC5rZXlzKHQpLmZvckVhY2goKG49Pnsib2Zmc2V0IiE9biYmImVhc2luZyIhPW4mJihlW25dPXRbbl0pfSkpfSkpLGV9KShlPVFPKHQsZSxjKSk7aWYoMD09bilyZXR1cm4gbmV3IHl3KHQsZCk7Y29uc3QgbT0iZ2VuX2Nzc19rZl8iK3RoaXMuX2NvdW50KyssdT10aGlzLmJ1aWxkS2V5ZnJhbWVFbGVtZW50KHQsbSxlKTtkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJoZWFkIikuYXBwZW5kQ2hpbGQodSk7Y29uc3QgZj1pdyh0LGUpLGc9bmV3IGJ3KHQsZSxtLG4sbyxpLGQsZik7cmV0dXJuIGcub25EZXN0cm95KCgoKT0+KGZ1bmN0aW9uIHQoZSl7ZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGUpfSkodSkpKSxnfX1sZXQgQ3c9ITE7Y2xhc3MgTXd7Y29uc3RydWN0b3IodCxlLG4sbyl7dGhpcy5lbGVtZW50PXQsdGhpcy5rZXlmcmFtZXM9ZSx0aGlzLm9wdGlvbnM9bix0aGlzLl9zcGVjaWFsU3R5bGVzPW8sdGhpcy5fb25Eb25lRm5zPVtdLHRoaXMuX29uU3RhcnRGbnM9W10sdGhpcy5fb25EZXN0cm95Rm5zPVtdLHRoaXMuX2luaXRpYWxpemVkPSExLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMudGltZT0wLHRoaXMucGFyZW50UGxheWVyPW51bGwsdGhpcy5jdXJyZW50U25hcHNob3Q9e30sdGhpcy5fZHVyYXRpb249bi5kdXJhdGlvbix0aGlzLl9kZWxheT1uLmRlbGF5fHwwLHRoaXMudGltZT10aGlzLl9kdXJhdGlvbit0aGlzLl9kZWxheX1fb25GaW5pc2goKXt0aGlzLl9maW5pc2hlZHx8KHRoaXMuX2ZpbmlzaGVkPSEwLHRoaXMuX29uRG9uZUZucy5mb3JFYWNoKCh0PT50KCkpKSx0aGlzLl9vbkRvbmVGbnM9W10pfWluaXQoKXt0aGlzLl9idWlsZFBsYXllcigpLHRoaXMuX3ByZXBhcmVQbGF5ZXJCZWZvcmVTdGFydCgpfV9idWlsZFBsYXllcigpe2lmKHRoaXMuX2luaXRpYWxpemVkKXJldHVybjt0aGlzLl9pbml0aWFsaXplZD0hMDtjb25zdCB0PXRoaXMua2V5ZnJhbWVzO3RoaXMuZG9tUGxheWVyPXRoaXMuX3RyaWdnZXJXZWJBbmltYXRpb24odGhpcy5lbGVtZW50LHQsdGhpcy5vcHRpb25zKSx0aGlzLl9maW5hbEtleWZyYW1lPXQubGVuZ3RoP3RbdC5sZW5ndGgtMV06e30sdGhpcy5kb21QbGF5ZXIuYWRkRXZlbnRMaXN0ZW5lcigiZmluaXNoIiwoKCk9PnRoaXMuX29uRmluaXNoKCkpKX1fcHJlcGFyZVBsYXllckJlZm9yZVN0YXJ0KCl7dGhpcy5fZGVsYXk/dGhpcy5fcmVzZXREb21QbGF5ZXJTdGF0ZSgpOnRoaXMuZG9tUGxheWVyLnBhdXNlKCl9X3RyaWdnZXJXZWJBbmltYXRpb24odCxlLG4pe3JldHVybiB0LmFuaW1hdGUoZSxuKX1vblN0YXJ0KHQpe3RoaXMuX29uU3RhcnRGbnMucHVzaCh0KX1vbkRvbmUodCl7dGhpcy5fb25Eb25lRm5zLnB1c2godCl9b25EZXN0cm95KHQpe3RoaXMuX29uRGVzdHJveUZucy5wdXNoKHQpfXBsYXkoKXt0aGlzLl9idWlsZFBsYXllcigpLHRoaXMuaGFzU3RhcnRlZCgpfHwodGhpcy5fb25TdGFydEZucy5mb3JFYWNoKCh0PT50KCkpKSx0aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX3N0YXJ0ZWQ9ITAsdGhpcy5fc3BlY2lhbFN0eWxlcyYmdGhpcy5fc3BlY2lhbFN0eWxlcy5zdGFydCgpKSx0aGlzLmRvbVBsYXllci5wbGF5KCl9cGF1c2UoKXt0aGlzLmluaXQoKSx0aGlzLmRvbVBsYXllci5wYXVzZSgpfWZpbmlzaCgpe3RoaXMuaW5pdCgpLHRoaXMuX3NwZWNpYWxTdHlsZXMmJnRoaXMuX3NwZWNpYWxTdHlsZXMuZmluaXNoKCksdGhpcy5fb25GaW5pc2goKSx0aGlzLmRvbVBsYXllci5maW5pc2goKX1yZXNldCgpe3RoaXMuX3Jlc2V0RG9tUGxheWVyU3RhdGUoKSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMX1fcmVzZXREb21QbGF5ZXJTdGF0ZSgpe3RoaXMuZG9tUGxheWVyJiZ0aGlzLmRvbVBsYXllci5jYW5jZWwoKX1yZXN0YXJ0KCl7dGhpcy5yZXNldCgpLHRoaXMucGxheSgpfWhhc1N0YXJ0ZWQoKXtyZXR1cm4gdGhpcy5fc3RhcnRlZH1kZXN0cm95KCl7dGhpcy5fZGVzdHJveWVkfHwodGhpcy5fZGVzdHJveWVkPSEwLHRoaXMuX3Jlc2V0RG9tUGxheWVyU3RhdGUoKSx0aGlzLl9vbkZpbmlzaCgpLHRoaXMuX3NwZWNpYWxTdHlsZXMmJnRoaXMuX3NwZWNpYWxTdHlsZXMuZGVzdHJveSgpLHRoaXMuX29uRGVzdHJveUZucy5mb3JFYWNoKCh0PT50KCkpKSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10pfXNldFBvc2l0aW9uKHQpe3ZvaWQgMD09PXRoaXMuZG9tUGxheWVyJiZ0aGlzLmluaXQoKSx0aGlzLmRvbVBsYXllci5jdXJyZW50VGltZT10KnRoaXMudGltZX1nZXRQb3NpdGlvbigpe3JldHVybiB0aGlzLmRvbVBsYXllci5jdXJyZW50VGltZS90aGlzLnRpbWV9Z2V0IHRvdGFsVGltZSgpe3JldHVybiB0aGlzLl9kZWxheSt0aGlzLl9kdXJhdGlvbn1iZWZvcmVEZXN0cm95KCl7Y29uc3QgdD17fTt0aGlzLmhhc1N0YXJ0ZWQoKSYmT2JqZWN0LmtleXModGhpcy5fZmluYWxLZXlmcmFtZSkuZm9yRWFjaCgoZT0+eyJvZmZzZXQiIT1lJiYodFtlXT10aGlzLl9maW5pc2hlZD90aGlzLl9maW5hbEtleWZyYW1lW2VdOnRQKHRoaXMuZWxlbWVudCxlKSl9KSksdGhpcy5jdXJyZW50U25hcHNob3Q9dH10cmlnZ2VyQ2FsbGJhY2sodCl7Y29uc3QgZT0ic3RhcnQiPT10P3RoaXMuX29uU3RhcnRGbnM6dGhpcy5fb25Eb25lRm5zO2UuZm9yRWFjaCgodD0+dCgpKSksZS5sZW5ndGg9MH19Y2xhc3Mgdnd7Y29uc3RydWN0b3IoKXt0aGlzLl9pc05hdGl2ZUltcGw9L1x7XHMqXFtuYXRpdmVccytjb2RlXF1ccypcfS8udGVzdCh4dygpLnRvU3RyaW5nKCkpLHRoaXMuX2Nzc0tleWZyYW1lc0RyaXZlcj1uZXcgX3d9dmFsaWRhdGVTdHlsZVByb3BlcnR5KHQpe3JldHVybiB2Tyh0KX1tYXRjaGVzRWxlbWVudCh0LGUpe3JldHVybiB4Tyh0LGUpfWNvbnRhaW5zRWxlbWVudCh0LGUpe3JldHVybiBPTyh0LGUpfXF1ZXJ5KHQsZSxuKXtyZXR1cm4gUE8odCxlLG4pfWNvbXB1dGVTdHlsZSh0LGUsbil7cmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQpW2VdfW92ZXJyaWRlV2ViQW5pbWF0aW9uc1N1cHBvcnQodCl7dGhpcy5faXNOYXRpdmVJbXBsPXR9YW5pbWF0ZSh0LGUsbixvLGksYT1bXSxyKXtpZighciYmIXRoaXMuX2lzTmF0aXZlSW1wbClyZXR1cm4gdGhpcy5fY3NzS2V5ZnJhbWVzRHJpdmVyLmFuaW1hdGUodCxlLG4sbyxpLGEpO2NvbnN0IHM9e2R1cmF0aW9uOm4sZGVsYXk6byxmaWxsOjA9PW8/ImJvdGgiOiJmb3J3YXJkcyJ9O2kmJihzLmVhc2luZz1pKTtjb25zdCBsPXt9LGM9YS5maWx0ZXIoKHQ9PnQgaW5zdGFuY2VvZiBNdykpO0pPKG4sbykmJmMuZm9yRWFjaCgodD0+e2xldCBlPXQuY3VycmVudFNuYXBzaG90O09iamVjdC5rZXlzKGUpLmZvckVhY2goKHQ9PmxbdF09ZVt0XSkpfSkpO2NvbnN0IGQ9aXcodCxlPVFPKHQsZT1lLm1hcCgodD0+TE8odCwhMSkpKSxsKSk7cmV0dXJuIG5ldyBNdyh0LGUscyxkKX19ZnVuY3Rpb24geHcoKXsKLyoqCiAgICAgKiBAbGljZW5zZSBBbmd1bGFyIHYxMS4yLjE0CiAgICAgKiAoYykgMjAxMC0yMDIxIEdvb2dsZSBMTEMuIGh0dHBzOi8vYW5ndWxhci5pby8KICAgICAqIExpY2Vuc2U6IE1JVAogICAgICovCnJldHVybihmdW5jdGlvbiB0KCl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJnZvaWQgMCE9PXdpbmRvdy5kb2N1bWVudH0pKCkmJkVsZW1lbnQucHJvdG90eXBlLmFuaW1hdGV8fHt9fQovKioKICAgICAqIEBsaWNlbnNlIEFuZ3VsYXIgdjExLjIuMTQKICAgICAqIChjKSAyMDEwLTIwMjEgR29vZ2xlIExMQy4gaHR0cHM6Ly9hbmd1bGFyLmlvLwogICAgICogTGljZW5zZTogTUlUCiAgICAgKi9jbGFzcyBPdyBleHRlbmRzIFp4e2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIoKSx0aGlzLl9uZXh0QW5pbWF0aW9uSWQ9MCx0aGlzLl9yZW5kZXJlcj10LmNyZWF0ZVJlbmRlcmVyKGUuYm9keSx7aWQ6IjAiLGVuY2Fwc3VsYXRpb246UG8uTm9uZSxzdHlsZXM6W10sZGF0YTp7YW5pbWF0aW9uOltdfX0pfWJ1aWxkKHQpe2NvbnN0IGU9dGhpcy5fbmV4dEFuaW1hdGlvbklkLnRvU3RyaW5nKCk7dGhpcy5fbmV4dEFuaW1hdGlvbklkKys7Y29uc3Qgbj1BcnJheS5pc0FycmF5KHQpP1F4KHQpOnQ7cmV0dXJuIGt3KHRoaXMuX3JlbmRlcmVyLG51bGwsZSwicmVnaXN0ZXIiLFtuXSksbmV3IFB3KGUsdGhpcy5fcmVuZGVyZXIpfX1Pdy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8T3cpKHVzKG1oKSx1cyhVQykpfSxPdy7JtXByb3Y9bG8oe3Rva2VuOk93LGZhY3Rvcnk6T3cuybVmYWN9KSxPdy5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOm1ofSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbVUNdfV19XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKE93LFt7dHlwZTpKbX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTptaH0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W1VDXX1dfV19KSxudWxsKTtjbGFzcyBQdyBleHRlbmRzIGNsYXNze317Y29uc3RydWN0b3IodCxlKXtzdXBlcigpLHRoaXMuX2lkPXQsdGhpcy5fcmVuZGVyZXI9ZX1jcmVhdGUodCxlKXtyZXR1cm4gbmV3IHd3KHRoaXMuX2lkLHQsZXx8e30sdGhpcy5fcmVuZGVyZXIpfX1jbGFzcyB3d3tjb25zdHJ1Y3Rvcih0LGUsbixvKXt0aGlzLmlkPXQsdGhpcy5lbGVtZW50PWUsdGhpcy5fcmVuZGVyZXI9byx0aGlzLnBhcmVudFBsYXllcj1udWxsLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy50b3RhbFRpbWU9MCx0aGlzLl9jb21tYW5kKCJjcmVhdGUiLG4pfV9saXN0ZW4odCxlKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXIubGlzdGVuKHRoaXMuZWxlbWVudCxgQEAke3RoaXMuaWR9OiR7dH1gLGUpfV9jb21tYW5kKHQsLi4uZSl7cmV0dXJuIGt3KHRoaXMuX3JlbmRlcmVyLHRoaXMuZWxlbWVudCx0aGlzLmlkLHQsZSl9b25Eb25lKHQpe3RoaXMuX2xpc3RlbigiZG9uZSIsdCl9b25TdGFydCh0KXt0aGlzLl9saXN0ZW4oInN0YXJ0Iix0KX1vbkRlc3Ryb3kodCl7dGhpcy5fbGlzdGVuKCJkZXN0cm95Iix0KX1pbml0KCl7dGhpcy5fY29tbWFuZCgiaW5pdCIpfWhhc1N0YXJ0ZWQoKXtyZXR1cm4gdGhpcy5fc3RhcnRlZH1wbGF5KCl7dGhpcy5fY29tbWFuZCgicGxheSIpLHRoaXMuX3N0YXJ0ZWQ9ITB9cGF1c2UoKXt0aGlzLl9jb21tYW5kKCJwYXVzZSIpfXJlc3RhcnQoKXt0aGlzLl9jb21tYW5kKCJyZXN0YXJ0Iil9ZmluaXNoKCl7dGhpcy5fY29tbWFuZCgiZmluaXNoIil9ZGVzdHJveSgpe3RoaXMuX2NvbW1hbmQoImRlc3Ryb3kiKX1yZXNldCgpe3RoaXMuX2NvbW1hbmQoInJlc2V0Iil9c2V0UG9zaXRpb24odCl7dGhpcy5fY29tbWFuZCgic2V0UG9zaXRpb24iLHQpfWdldFBvc2l0aW9uKCl7dmFyIHQsZTtyZXR1cm4gbnVsbCE9PShlPW51bGw9PT0odD10aGlzLl9yZW5kZXJlci5lbmdpbmUucGxheWVyc1srdGhpcy5pZF0pfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmdldFBvc2l0aW9uKCkpJiZ2b2lkIDAhPT1lP2U6MH19ZnVuY3Rpb24ga3codCxlLG4sbyxpKXtyZXR1cm4gdC5zZXRQcm9wZXJ0eShlLGBAQCR7bn06JHtvfWAsaSl9Y29uc3QgU3c9IkAiLER3PSJALmRpc2FibGVkIjtjbGFzcyBFd3tjb25zdHJ1Y3Rvcih0LGUsbil7dGhpcy5kZWxlZ2F0ZT10LHRoaXMuZW5naW5lPWUsdGhpcy5fem9uZT1uLHRoaXMuX2N1cnJlbnRJZD0wLHRoaXMuX21pY3JvdGFza0lkPTEsdGhpcy5fYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyPVtdLHRoaXMuX3JlbmRlcmVyQ2FjaGU9bmV3IE1hcCx0aGlzLl9jZFJlY3VyRGVwdGg9MCx0aGlzLnByb21pc2U9UHJvbWlzZS5yZXNvbHZlKDApLGUub25SZW1vdmFsQ29tcGxldGU9KHQsZSk9PntlJiZlLnBhcmVudE5vZGUodCkmJmUucmVtb3ZlQ2hpbGQodC5wYXJlbnROb2RlLHQpfX1jcmVhdGVSZW5kZXJlcih0LGUpe2NvbnN0IG49dGhpcy5kZWxlZ2F0ZS5jcmVhdGVSZW5kZXJlcih0LGUpO2lmKCEodCYmZSYmZS5kYXRhJiZlLmRhdGEuYW5pbWF0aW9uKSl7bGV0IHQ9dGhpcy5fcmVuZGVyZXJDYWNoZS5nZXQobik7cmV0dXJuIHR8fCh0PW5ldyBBdygiIixuLHRoaXMuZW5naW5lKSx0aGlzLl9yZW5kZXJlckNhY2hlLnNldChuLHQpKSx0fWNvbnN0IG89ZS5pZCxpPWUuaWQrIi0iK3RoaXMuX2N1cnJlbnRJZDt0aGlzLl9jdXJyZW50SWQrKyx0aGlzLmVuZ2luZS5yZWdpc3RlcihpLHQpO2NvbnN0IGE9ZT0+e0FycmF5LmlzQXJyYXkoZSk/ZS5mb3JFYWNoKGEpOnRoaXMuZW5naW5lLnJlZ2lzdGVyVHJpZ2dlcihvLGksdCxlLm5hbWUsZSl9O3JldHVybiBlLmRhdGEuYW5pbWF0aW9uLmZvckVhY2goYSksbmV3IFJ3KHRoaXMsaSxuLHRoaXMuZW5naW5lKX1iZWdpbigpe3RoaXMuX2NkUmVjdXJEZXB0aCsrLHRoaXMuZGVsZWdhdGUuYmVnaW4mJnRoaXMuZGVsZWdhdGUuYmVnaW4oKX1fc2NoZWR1bGVDb3VudFRhc2soKXt0aGlzLnByb21pc2UudGhlbigoKCk9Pnt0aGlzLl9taWNyb3Rhc2tJZCsrfSkpfXNjaGVkdWxlTGlzdGVuZXJDYWxsYmFjayh0LGUsbil7dD49MCYmdDx0aGlzLl9taWNyb3Rhc2tJZD90aGlzLl96b25lLnJ1bigoKCk9PmUobikpKTooMD09dGhpcy5fYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyLmxlbmd0aCYmUHJvbWlzZS5yZXNvbHZlKG51bGwpLnRoZW4oKCgpPT57dGhpcy5fem9uZS5ydW4oKCgpPT57dGhpcy5fYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyLmZvckVhY2goKHQ9Pntjb25zdFtlLG5dPXQ7ZShuKX0pKSx0aGlzLl9hbmltYXRpb25DYWxsYmFja3NCdWZmZXI9W119KSl9KSksdGhpcy5fYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyLnB1c2goW2Usbl0pKX1lbmQoKXt0aGlzLl9jZFJlY3VyRGVwdGgtLSwwPT10aGlzLl9jZFJlY3VyRGVwdGgmJnRoaXMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCgpPT57dGhpcy5fc2NoZWR1bGVDb3VudFRhc2soKSx0aGlzLmVuZ2luZS5mbHVzaCh0aGlzLl9taWNyb3Rhc2tJZCl9KSksdGhpcy5kZWxlZ2F0ZS5lbmQmJnRoaXMuZGVsZWdhdGUuZW5kKCl9d2hlblJlbmRlcmluZ0RvbmUoKXtyZXR1cm4gdGhpcy5lbmdpbmUud2hlblJlbmRlcmluZ0RvbmUoKX19RXcuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEV3KSh1cyhtaCksdXMob3cpLHVzKHRDKSl9LEV3Lsm1cHJvdj1sbyh7dG9rZW46RXcsZmFjdG9yeTpFdy7JtWZhY30pLEV3LmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6bWh9LHt0eXBlOm93fSx7dHlwZTp0Q31dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoRXcsW3t0eXBlOkptfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOm1ofSx7dHlwZTpvd30se3R5cGU6dEN9XX0pLG51bGwpO2NsYXNzIEF3e2NvbnN0cnVjdG9yKHQsZSxuKXt0aGlzLm5hbWVzcGFjZUlkPXQsdGhpcy5kZWxlZ2F0ZT1lLHRoaXMuZW5naW5lPW4sdGhpcy5kZXN0cm95Tm9kZT10aGlzLmRlbGVnYXRlLmRlc3Ryb3lOb2RlP3Q9PmUuZGVzdHJveU5vZGUodCk6bnVsbH1nZXQgZGF0YSgpe3JldHVybiB0aGlzLmRlbGVnYXRlLmRhdGF9ZGVzdHJveSgpe3RoaXMuZW5naW5lLmRlc3Ryb3kodGhpcy5uYW1lc3BhY2VJZCx0aGlzLmRlbGVnYXRlKSx0aGlzLmRlbGVnYXRlLmRlc3Ryb3koKX1jcmVhdGVFbGVtZW50KHQsZSl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuY3JlYXRlRWxlbWVudCh0LGUpfWNyZWF0ZUNvbW1lbnQodCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuY3JlYXRlQ29tbWVudCh0KX1jcmVhdGVUZXh0KHQpe3JldHVybiB0aGlzLmRlbGVnYXRlLmNyZWF0ZVRleHQodCl9YXBwZW5kQ2hpbGQodCxlKXt0aGlzLmRlbGVnYXRlLmFwcGVuZENoaWxkKHQsZSksdGhpcy5lbmdpbmUub25JbnNlcnQodGhpcy5uYW1lc3BhY2VJZCxlLHQsITEpfWluc2VydEJlZm9yZSh0LGUsbixvPSEwKXt0aGlzLmRlbGVnYXRlLmluc2VydEJlZm9yZSh0LGUsbiksdGhpcy5lbmdpbmUub25JbnNlcnQodGhpcy5uYW1lc3BhY2VJZCxlLHQsbyl9cmVtb3ZlQ2hpbGQodCxlLG4pe3RoaXMuZW5naW5lLm9uUmVtb3ZlKHRoaXMubmFtZXNwYWNlSWQsZSx0aGlzLmRlbGVnYXRlLG4pfXNlbGVjdFJvb3RFbGVtZW50KHQsZSl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuc2VsZWN0Um9vdEVsZW1lbnQodCxlKX1wYXJlbnROb2RlKHQpe3JldHVybiB0aGlzLmRlbGVnYXRlLnBhcmVudE5vZGUodCl9bmV4dFNpYmxpbmcodCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUubmV4dFNpYmxpbmcodCl9c2V0QXR0cmlidXRlKHQsZSxuLG8pe3RoaXMuZGVsZWdhdGUuc2V0QXR0cmlidXRlKHQsZSxuLG8pfXJlbW92ZUF0dHJpYnV0ZSh0LGUsbil7dGhpcy5kZWxlZ2F0ZS5yZW1vdmVBdHRyaWJ1dGUodCxlLG4pfWFkZENsYXNzKHQsZSl7dGhpcy5kZWxlZ2F0ZS5hZGRDbGFzcyh0LGUpfXJlbW92ZUNsYXNzKHQsZSl7dGhpcy5kZWxlZ2F0ZS5yZW1vdmVDbGFzcyh0LGUpfXNldFN0eWxlKHQsZSxuLG8pe3RoaXMuZGVsZWdhdGUuc2V0U3R5bGUodCxlLG4sbyl9cmVtb3ZlU3R5bGUodCxlLG4pe3RoaXMuZGVsZWdhdGUucmVtb3ZlU3R5bGUodCxlLG4pfXNldFByb3BlcnR5KHQsZSxuKXtlLmNoYXJBdCgwKT09U3cmJmU9PUR3P3RoaXMuZGlzYWJsZUFuaW1hdGlvbnModCwhIW4pOnRoaXMuZGVsZWdhdGUuc2V0UHJvcGVydHkodCxlLG4pfXNldFZhbHVlKHQsZSl7dGhpcy5kZWxlZ2F0ZS5zZXRWYWx1ZSh0LGUpfWxpc3Rlbih0LGUsbil7cmV0dXJuIHRoaXMuZGVsZWdhdGUubGlzdGVuKHQsZSxuKX1kaXNhYmxlQW5pbWF0aW9ucyh0LGUpe3RoaXMuZW5naW5lLmRpc2FibGVBbmltYXRpb25zKHQsZSl9fWNsYXNzIFJ3IGV4dGVuZHMgQXd7Y29uc3RydWN0b3IodCxlLG4sbyl7c3VwZXIoZSxuLG8pLHRoaXMuZmFjdG9yeT10LHRoaXMubmFtZXNwYWNlSWQ9ZX1zZXRQcm9wZXJ0eSh0LGUsbil7ZS5jaGFyQXQoMCk9PVN3PyIuIj09ZS5jaGFyQXQoMSkmJmU9PUR3P3RoaXMuZGlzYWJsZUFuaW1hdGlvbnModCxuPXZvaWQgMD09PW58fCEhbik6dGhpcy5lbmdpbmUucHJvY2Vzcyh0aGlzLm5hbWVzcGFjZUlkLHQsZS5zdWJzdHIoMSksbik6dGhpcy5kZWxlZ2F0ZS5zZXRQcm9wZXJ0eSh0LGUsbil9bGlzdGVuKHQsZSxuKXtpZihlLmNoYXJBdCgwKT09U3cpe2NvbnN0IG89KGZ1bmN0aW9uIG8odCl7c3dpdGNoKHQpe2Nhc2UiYm9keSI6cmV0dXJuIGRvY3VtZW50LmJvZHk7Y2FzZSJkb2N1bWVudCI6cmV0dXJuIGRvY3VtZW50O2Nhc2Uid2luZG93IjpyZXR1cm4gd2luZG93O2RlZmF1bHQ6cmV0dXJuIHR9fSkodCk7bGV0IGk9ZS5zdWJzdHIoMSksYT0iIjtyZXR1cm4gaS5jaGFyQXQoMCkhPVN3JiYoW2ksYV09KGZ1bmN0aW9uIGkodCl7Y29uc3QgZT10LmluZGV4T2YoIi4iKTtyZXR1cm5bdC5zdWJzdHJpbmcoMCxlKSx0LnN1YnN0cihlKzEpXX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovKShpKSksdGhpcy5lbmdpbmUubGlzdGVuKHRoaXMubmFtZXNwYWNlSWQsbyxpLGEsKHQ9Pnt0aGlzLmZhY3Rvcnkuc2NoZWR1bGVMaXN0ZW5lckNhbGxiYWNrKHQuX2RhdGF8fC0xLG4sdCl9KSl9cmV0dXJuIHRoaXMuZGVsZWdhdGUubGlzdGVuKHQsZSxuKX19Y2xhc3MgVHcgZXh0ZW5kcyBvd3tjb25zdHJ1Y3Rvcih0LGUsbil7c3VwZXIodC5ib2R5LGUsbil9fVR3Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxUdykodXMoVUMpLHVzKFNPKSx1cyhPUCkpfSxUdy7JtXByb3Y9bG8oe3Rva2VuOlR3LGZhY3Rvcnk6VHcuybVmYWN9KSxUdy5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltVQ119XX0se3R5cGU6U099LHt0eXBlOk9QfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihUdyxbe3R5cGU6Sm19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W1VDXX1dfSx7dHlwZTpTT30se3R5cGU6T1B9XX0pLG51bGwpO2NvbnN0IE53PW5ldyBOcigiQW5pbWF0aW9uTW9kdWxlVHlwZSIpLEl3PVt7cHJvdmlkZTpaeCx1c2VDbGFzczpPd30se3Byb3ZpZGU6T1AsdXNlRmFjdG9yeTpmdW5jdGlvbiB6dygpe3JldHVybiBuZXcgUFB9fSx7cHJvdmlkZTpvdyx1c2VDbGFzczpUd30se3Byb3ZpZGU6bWgsdXNlRmFjdG9yeTpmdW5jdGlvbiBIdyh0LGUsbil7cmV0dXJuIG5ldyBFdyh0LGUsbil9LGRlcHM6W2N4LG93LHRDXX1dLEZ3PVt7cHJvdmlkZTpTTyx1c2VGYWN0b3J5OmZ1bmN0aW9uIEx3KCl7cmV0dXJuKGZ1bmN0aW9uIHQoKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgeHcoKX0pKCk/bmV3IHZ3Om5ldyBfd319LHtwcm92aWRlOk53LHVzZVZhbHVlOiJCcm93c2VyQW5pbWF0aW9ucyJ9LC4uLkl3XSxCdz1be3Byb3ZpZGU6U08sdXNlQ2xhc3M6a099LHtwcm92aWRlOk53LHVzZVZhbHVlOiJOb29wQW5pbWF0aW9ucyJ9LC4uLkl3XTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIFZ3e31Wdy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8VncpfSxWdy7JtW1vZD1abyh7dHlwZTpWd30pLFZ3Lsm1aW5qPWNvKHtwcm92aWRlcnM6RncsaW1wb3J0czpbenhdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhWdyx7ZXhwb3J0czpmdW5jdGlvbigpe3JldHVyblt6eF19fSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihWdyxbe3R5cGU6a18sYXJnczpbe2V4cG9ydHM6W3p4XSxwcm92aWRlcnM6Rnd9XX1dLG51bGwsbnVsbCk7Y2xhc3Mgand7fWp3Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxqdyl9LGp3Lsm1bW9kPVpvKHt0eXBlOmp3fSksancuybVpbmo9Y28oe3Byb3ZpZGVyczpCdyxpbXBvcnRzOlt6eF19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKGp3LHtleHBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW3p4XX19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGp3LFt7dHlwZTprXyxhcmdzOlt7ZXhwb3J0czpbenhdLHByb3ZpZGVyczpCd31dfV0sbnVsbCxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZSBOZ1J4IDkuMi4xCiAgICAgKiAoYykgMjAxNS0yMDE4IEJyYW5kb24gUm9iZXJ0cywgTWlrZSBSeWFuLCBSb2IgV29ybWFsZCwgVmljdG9yIFNhdmtpbgogICAgICogTGljZW5zZTogTUlUCiAgICAgKi8KbGV0IFV3PXt9O2Z1bmN0aW9uIFd3KHQsZSl7aWYoVXdbdF09KFV3W3RdfHwwKSsxLCJmdW5jdGlvbiI9PXR5cGVvZiBlKXJldHVybiBHdyh0LCgoLi4ubik9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKC4uLm4pKSx7dHlwZTp0fSkpKTtzd2l0Y2goZT9lLl9hczoiZW1wdHkiKXtjYXNlImVtcHR5IjpyZXR1cm4gR3codCwoKCk9Pih7dHlwZTp0fSkpKTtjYXNlInByb3BzIjpyZXR1cm4gR3codCwoZT0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHt0eXBlOnR9KSkpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIGNvbmZpZy4iKX19ZnVuY3Rpb24gR3codCxlKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInR5cGUiLHt2YWx1ZTp0LHdyaXRhYmxlOiExfSl9Y29uc3QgWXc9IkBuZ3J4L3N0b3JlL2luaXQiO2NsYXNzIHF3IGV4dGVuZHMgSHtjb25zdHJ1Y3Rvcigpe3N1cGVyKHt0eXBlOll3fSl9bmV4dCh0KXtpZigiZnVuY3Rpb24iPT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJcbiAgICAgICAgRGlzcGF0Y2ggZXhwZWN0ZWQgYW4gb2JqZWN0LCBpbnN0ZWFkIGl0IHJlY2VpdmVkIGEgZnVuY3Rpb24uXG4gICAgICAgIElmIHlvdSdyZSB1c2luZyB0aGUgY3JlYXRlQWN0aW9uIGZ1bmN0aW9uLCBtYWtlIHN1cmUgdG8gaW52b2tlIHRoZSBmdW5jdGlvblxuICAgICAgICBiZWZvcmUgZGlzcGF0Y2hpbmcgdGhlIGFjdGlvbi4gRm9yIGV4YW1wbGUsIHNvbWVBY3Rpb24gc2hvdWxkIGJlIHNvbWVBY3Rpb24oKS4iKTtpZih2b2lkIDA9PT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkFjdGlvbnMgbXVzdCBiZSBvYmplY3RzIik7aWYodm9pZCAwPT09dC50eXBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkFjdGlvbnMgbXVzdCBoYXZlIGEgdHlwZSBwcm9wZXJ0eSIpO3N1cGVyLm5leHQodCl9Y29tcGxldGUoKXt9bmdPbkRlc3Ryb3koKXtzdXBlci5jb21wbGV0ZSgpfX1xdy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8cXcpfSxxdy7JtXByb3Y9bG8oe3Rva2VuOnF3LGZhY3Rvcnk6cXcuybVmYWN9KSxxdy5jdG9yUGFyYW1ldGVycz0oKT0+W10sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihxdyxbe3R5cGU6Sm19XSwoZnVuY3Rpb24oKXtyZXR1cm5bXX0pLG51bGwpO2NvbnN0IFp3PVtxd10sWHc9bmV3IE5yKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBSb290IEd1YXJkIiksS3c9bmV3IE5yKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBJbml0aWFsIFN0YXRlIiksSnc9bmV3IE5yKCJAbmdyeC9zdG9yZSBJbml0aWFsIFN0YXRlIiksUXc9bmV3IE5yKCJAbmdyeC9zdG9yZSBSZWR1Y2VyIEZhY3RvcnkiKSwkdz1uZXcgTnIoIkBuZ3J4L3N0b3JlIEludGVybmFsIFJlZHVjZXIgRmFjdG9yeSBQcm92aWRlciIpLHRrPW5ldyBOcigiQG5ncngvc3RvcmUgSW5pdGlhbCBSZWR1Y2VycyIpLGVrPW5ldyBOcigiQG5ncngvc3RvcmUgSW50ZXJuYWwgSW5pdGlhbCBSZWR1Y2VycyIpLG5rPW5ldyBOcigiQG5ncngvc3RvcmUgU3RvcmUgRmVhdHVyZXMiKSxvaz1uZXcgTnIoIkBuZ3J4L3N0b3JlIEludGVybmFsIFN0b3JlIFJlZHVjZXJzIiksaWs9bmV3IE5yKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBGZWF0dXJlIFJlZHVjZXJzIiksYWs9bmV3IE5yKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBGZWF0dXJlIENvbmZpZ3MiKSxyaz1uZXcgTnIoIkBuZ3J4L3N0b3JlIEludGVybmFsIFN0b3JlIEZlYXR1cmVzIiksc2s9bmV3IE5yKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBGZWF0dXJlIFJlZHVjZXJzIFRva2VuIiksbGs9bmV3IE5yKCJAbmdyeC9zdG9yZSBGZWF0dXJlIFJlZHVjZXJzIiksY2s9bmV3IE5yKCJAbmdyeC9zdG9yZSBVc2VyIFByb3ZpZGVkIE1ldGEgUmVkdWNlcnMiKSxkaz1uZXcgTnIoIkBuZ3J4L3N0b3JlIE1ldGEgUmVkdWNlcnMiKSxwaz1uZXcgTnIoIkBuZ3J4L3N0b3JlIEludGVybmFsIFJlc29sdmVkIE1ldGEgUmVkdWNlcnMiKSxtaz1uZXcgTnIoIkBuZ3J4L3N0b3JlIFVzZXIgUnVudGltZSBDaGVja3MgQ29uZmlnIiksdWs9bmV3IE5yKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBVc2VyIFJ1bnRpbWUgQ2hlY2tzIENvbmZpZyIpLGZrPW5ldyBOcigiQG5ncngvc3RvcmUgSW50ZXJuYWwgUnVudGltZSBDaGVja3MiKSxnaz1uZXcgTnIoIkBuZ3J4L3N0b3JlIENoZWNrIGlmIEFjdGlvbiB0eXBlcyBhcmUgdW5pcXVlIik7ZnVuY3Rpb24gaGsodCxlPXt9KXtjb25zdCBuPU9iamVjdC5rZXlzKHQpLG89e307Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspe2NvbnN0IGk9bltlXTsiZnVuY3Rpb24iPT10eXBlb2YgdFtpXSYmKG9baV09dFtpXSl9Y29uc3QgaT1PYmplY3Qua2V5cyhvKTtyZXR1cm4gZnVuY3Rpb24gdChuLGEpe249dm9pZCAwPT09bj9lOm47bGV0IHI9ITE7Y29uc3Qgcz17fTtmb3IobGV0IHQ9MDt0PGkubGVuZ3RoO3QrKyl7Y29uc3QgZT1pW3RdLGw9bltlXSxjPSgwLG9bZV0pKGwsYSk7c1tlXT1jLHI9cnx8YyE9PWx9cmV0dXJuIHI/czpufX1mdW5jdGlvbiBiayguLi50KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoMD09PXQubGVuZ3RoKXJldHVybiBlO2NvbnN0IG49dFt0Lmxlbmd0aC0xXTtyZXR1cm4gdC5zbGljZSgwLC0xKS5yZWR1Y2VSaWdodCgoKHQsZSk9PmUodCkpLG4oZSkpfX1mdW5jdGlvbiB5ayh0LGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpJiZlLmxlbmd0aD4wJiYodD1iay5hcHBseShudWxsLFsuLi5lLHRdKSksKGUsbik9Pntjb25zdCBvPXQoZSk7cmV0dXJuKHQsZSk9Pm8odD12b2lkIDA9PT10P246dCxlKX19Y2xhc3MgX2sgZXh0ZW5kcyB5e31jbGFzcyBDayBleHRlbmRzIHF3e31jbGFzcyBNayBleHRlbmRzIEh7Y29uc3RydWN0b3IodCxlLG4sbyl7c3VwZXIobyhuLGUpKSx0aGlzLmRpc3BhdGNoZXI9dCx0aGlzLmluaXRpYWxTdGF0ZT1lLHRoaXMucmVkdWNlcnM9bix0aGlzLnJlZHVjZXJGYWN0b3J5PW99YWRkRmVhdHVyZSh0KXt0aGlzLmFkZEZlYXR1cmVzKFt0XSl9YWRkRmVhdHVyZXModCl7Y29uc3QgZT10LnJlZHVjZSgoKHQse3JlZHVjZXJzOmUscmVkdWNlckZhY3Rvcnk6bixtZXRhUmVkdWNlcnM6byxpbml0aWFsU3RhdGU6aSxrZXk6YX0pPT57Y29uc3Qgcj0iZnVuY3Rpb24iPT10eXBlb2YgZT8oZnVuY3Rpb24gcyh0KXtjb25zdCBlPUFycmF5LmlzQXJyYXkodCkmJnQubGVuZ3RoPjA/YmsoLi4udCk6dD0+dDtyZXR1cm4odCxuKT0+KHQ9ZSh0KSwoZSxvKT0+dChlPXZvaWQgMD09PWU/bjplLG8pKX0pKG8pKGUsaSk6eWsobixvKShlLGkpO3JldHVybiB0W2FdPXIsdH0pLHt9KTt0aGlzLmFkZFJlZHVjZXJzKGUpfXJlbW92ZUZlYXR1cmUodCl7dGhpcy5yZW1vdmVGZWF0dXJlcyhbdF0pfXJlbW92ZUZlYXR1cmVzKHQpe3RoaXMucmVtb3ZlUmVkdWNlcnModC5tYXAoKHQ9PnQua2V5KSkpfWFkZFJlZHVjZXIodCxlKXt0aGlzLmFkZFJlZHVjZXJzKHtbdF06ZX0pfWFkZFJlZHVjZXJzKHQpe3RoaXMucmVkdWNlcnM9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHRoaXMucmVkdWNlcnMpLHQpLHRoaXMudXBkYXRlUmVkdWNlcnMoT2JqZWN0LmtleXModCkpfXJlbW92ZVJlZHVjZXIodCl7dGhpcy5yZW1vdmVSZWR1Y2VycyhbdF0pfXJlbW92ZVJlZHVjZXJzKHQpe3QuZm9yRWFjaCgodD0+e3RoaXMucmVkdWNlcnM9KGZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gT2JqZWN0LmtleXModCkuZmlsdGVyKCh0PT50IT09bikpLnJlZHVjZSgoKGUsbik9Pk9iamVjdC5hc3NpZ24oZSx7W25dOnRbbl19KSkse30pfSkodGhpcy5yZWR1Y2Vycyx0KX0pKSx0aGlzLnVwZGF0ZVJlZHVjZXJzKHQpfXVwZGF0ZVJlZHVjZXJzKHQpe3RoaXMubmV4dCh0aGlzLnJlZHVjZXJGYWN0b3J5KHRoaXMucmVkdWNlcnMsdGhpcy5pbml0aWFsU3RhdGUpKSx0aGlzLmRpc3BhdGNoZXIubmV4dCh7dHlwZToiQG5ncngvc3RvcmUvdXBkYXRlLXJlZHVjZXJzIixmZWF0dXJlczp0fSl9bmdPbkRlc3Ryb3koKXt0aGlzLmNvbXBsZXRlKCl9fU1rLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxNaykodXMoQ2spLHVzKEp3KSx1cyh0ayksdXMoUXcpKX0sTWsuybVwcm92PWxvKHt0b2tlbjpNayxmYWN0b3J5Ok1rLsm1ZmFjfSksTWsuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpDa30se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W0p3XX1dfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbdGtdfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltRd119XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoTWssW3t0eXBlOkptfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkNrfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbSnddfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOlt0a119XX0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W1F3XX1dfV19KSxudWxsKTtjb25zdCB2az1bTWsse3Byb3ZpZGU6X2ssdXNlRXhpc3Rpbmc6TWt9LHtwcm92aWRlOkNrLHVzZUV4aXN0aW5nOnF3fV07Y2xhc3MgeGsgZXh0ZW5kcyB4e25nT25EZXN0cm95KCl7dGhpcy5jb21wbGV0ZSgpfX14ay7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBPayhlfHx4ayl9LHhrLsm1cHJvdj1sbyh7dG9rZW46eGssZmFjdG9yeTp4ay7JtWZhY30pO2NvbnN0IE9rPXZyKHhrKTsoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHhrLFt7dHlwZTpKbX1dLG51bGwsbnVsbCk7Y29uc3QgUGs9W3hrXTtjbGFzcyB3ayBleHRlbmRzIHl7fWNsYXNzIGtrIGV4dGVuZHMgSHtjb25zdHJ1Y3Rvcih0LGUsbixvKXtzdXBlcihvKTtjb25zdCBpPXQucGlwZSgoZnVuY3Rpb24gcih0LGU9MCl7cmV0dXJuIGZ1bmN0aW9uIG4obyl7cmV0dXJuIG8ubGlmdChuZXcgJCh0LGUpKX19KShqKSkucGlwZShrbihlKSkucGlwZSgoZnVuY3Rpb24gYSh0LGUpe2xldCBuPSExO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPj0yJiYobj0hMCksZnVuY3Rpb24gbyhpKXtyZXR1cm4gaS5saWZ0KG5ldyBYZSh0LGUsbikpfX0pKFNrLHtzdGF0ZTpvfSkpO3RoaXMuc3RhdGVTdWJzY3JpcHRpb249aS5zdWJzY3JpYmUoKCh7c3RhdGU6dCxhY3Rpb246ZX0pPT57dGhpcy5uZXh0KHQpLG4ubmV4dChlKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuc3RhdGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLmNvbXBsZXRlKCl9fWZ1bmN0aW9uIFNrKHQ9e3N0YXRlOnZvaWQgMH0sW2Usbl0pe2NvbnN0e3N0YXRlOm99PXQ7cmV0dXJue3N0YXRlOm4obyxlKSxhY3Rpb246ZX19a2suybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGtrKSh1cyhxdyksdXMoX2spLHVzKHhrKSx1cyhKdykpfSxray7JtXByb3Y9bG8oe3Rva2VuOmtrLGZhY3Rvcnk6a2suybVmYWN9KSxray5JTklUPVl3LGtrLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6cXd9LHt0eXBlOl9rfSx7dHlwZTp4a30se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W0p3XX1dfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihrayxbe3R5cGU6Sm19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6cXd9LHt0eXBlOl9rfSx7dHlwZTp4a30se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W0p3XX1dfV19KSxudWxsKTtjb25zdCBEaz1ba2sse3Byb3ZpZGU6d2ssdXNlRXhpc3Rpbmc6a2t9XTtjbGFzcyBFayBleHRlbmRzIHl7Y29uc3RydWN0b3IodCxlLG4pe3N1cGVyKCksdGhpcy5hY3Rpb25zT2JzZXJ2ZXI9ZSx0aGlzLnJlZHVjZXJNYW5hZ2VyPW4sdGhpcy5zb3VyY2U9dH1zZWxlY3QodCwuLi5lKXtyZXR1cm4gUmsuY2FsbChudWxsLHQsLi4uZSkodGhpcyl9bGlmdCh0KXtjb25zdCBlPW5ldyBFayh0aGlzLHRoaXMuYWN0aW9uc09ic2VydmVyLHRoaXMucmVkdWNlck1hbmFnZXIpO3JldHVybiBlLm9wZXJhdG9yPXQsZX1kaXNwYXRjaCh0KXt0aGlzLmFjdGlvbnNPYnNlcnZlci5uZXh0KHQpfW5leHQodCl7dGhpcy5hY3Rpb25zT2JzZXJ2ZXIubmV4dCh0KX1lcnJvcih0KXt0aGlzLmFjdGlvbnNPYnNlcnZlci5lcnJvcih0KX1jb21wbGV0ZSgpe3RoaXMuYWN0aW9uc09ic2VydmVyLmNvbXBsZXRlKCl9YWRkUmVkdWNlcih0LGUpe3RoaXMucmVkdWNlck1hbmFnZXIuYWRkUmVkdWNlcih0LGUpfXJlbW92ZVJlZHVjZXIodCl7dGhpcy5yZWR1Y2VyTWFuYWdlci5yZW1vdmVSZWR1Y2VyKHQpfX1Fay7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8RWspKHVzKHdrKSx1cyhxdyksdXMoTWspKX0sRWsuybVwcm92PWxvKHt0b2tlbjpFayxmYWN0b3J5OkVrLsm1ZmFjfSksRWsuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTp3a30se3R5cGU6cXd9LHt0eXBlOk1rfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihFayxbe3R5cGU6Sm19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6d2t9LHt0eXBlOnF3fSx7dHlwZTpNa31dfSksbnVsbCk7Y29uc3QgQWs9W0VrXTtmdW5jdGlvbiBSayh0LGUsLi4ubil7cmV0dXJuIGZ1bmN0aW9uIG8oaSl7bGV0IGE7aWYoInN0cmluZyI9PXR5cGVvZiB0KXtjb25zdCBvPVtlLC4uLm5dLmZpbHRlcihCb29sZWFuKTthPWkucGlwZSgoZnVuY3Rpb24gciguLi50KXtjb25zdCBlPXQubGVuZ3RoO2lmKDA9PT1lKXRocm93IG5ldyBFcnJvcigibGlzdCBvZiBwcm9wZXJ0aWVzIGNhbm5vdCBiZSBlbXB0eS4iKTtyZXR1cm4gaHQoKG49PntsZXQgbz1uO2ZvcihsZXQgbj0wO248ZTtuKyspe2NvbnN0IGU9b1t0W25dXTtpZih2b2lkIDA9PT1lKXJldHVybjtvPWV9cmV0dXJuIG99KSl9KSh0LC4uLm8pKX1lbHNle2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoYFVuZXhwZWN0ZWQgdHlwZSAnJHt0eXBlb2YgdH0nIGluIHNlbGVjdCBvcGVyYXRvciwgZXhwZWN0ZWQgJ3N0cmluZycgb3IgJ2Z1bmN0aW9uJ2ApO2E9aS5waXBlKGh0KChuPT50KG4sZSkpKSl9cmV0dXJuIGEucGlwZShrZSgpKX19ZnVuY3Rpb24gVGsodCxlKXtyZXR1cm4gdD09PWV9ZnVuY3Rpb24gTmsodCxlLG4pe2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKWlmKCFuKHRbb10sZVtvXSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gSWsodCxlPVRrLG49VGspe2xldCBvLGk9bnVsbCxhPW51bGw7cmV0dXJue21lbW9pemVkOmZ1bmN0aW9uIHIoKXtpZih2b2lkIDAhPT1vKXJldHVybiBvLnJlc3VsdDtpZighaSlyZXR1cm4gYT10LmFwcGx5KG51bGwsYXJndW1lbnRzKSxpPWFyZ3VtZW50cyxhO2lmKCFOayhhcmd1bWVudHMsaSxlKSlyZXR1cm4gYTtjb25zdCByPXQuYXBwbHkobnVsbCxhcmd1bWVudHMpO3JldHVybiBpPWFyZ3VtZW50cyxuKGEscik/YTooYT1yLHIpfSxyZXNldDpmdW5jdGlvbiBzKCl7aT1udWxsLGE9bnVsbH0sc2V0UmVzdWx0OmZ1bmN0aW9uIGwodCl7bz17cmVzdWx0OnR9fSxjbGVhclJlc3VsdDpmdW5jdGlvbiBjKCl7bz12b2lkIDB9fX1mdW5jdGlvbiB6ayguLi50KXtyZXR1cm4oZnVuY3Rpb24gZSh0LG49e3N0YXRlRm46SGt9KXtyZXR1cm4gZnVuY3Rpb24oLi4uZSl7bGV0IG89ZTtpZihBcnJheS5pc0FycmF5KG9bMF0pKXtjb25zdFt0LC4uLmVdPW87bz1bLi4udCwuLi5lXX1jb25zdCBpPW8uc2xpY2UoMCxvLmxlbmd0aC0xKSxhPW9bby5sZW5ndGgtMV0scj1pLmZpbHRlcigodD0+dC5yZWxlYXNlJiYiZnVuY3Rpb24iPT10eXBlb2YgdC5yZWxlYXNlKSkscz10KChmdW5jdGlvbiguLi50KXtyZXR1cm4gYS5hcHBseShudWxsLHQpfSkpLGw9SWsoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4uc3RhdGVGbi5hcHBseShudWxsLFt0LGksZSxzXSl9KSk7cmV0dXJuIE9iamVjdC5hc3NpZ24obC5tZW1vaXplZCx7cmVsZWFzZTpmdW5jdGlvbiBjKCl7bC5yZXNldCgpLHMucmVzZXQoKSxyLmZvckVhY2goKHQ9PnQucmVsZWFzZSgpKSl9LHByb2plY3RvcjpzLm1lbW9pemVkLHNldFJlc3VsdDpsLnNldFJlc3VsdCxjbGVhclJlc3VsdDpsLmNsZWFyUmVzdWx0fSl9fSkoSWspKC4uLnQpfWZ1bmN0aW9uIEhrKHQsZSxuLG8pe2lmKHZvaWQgMD09PW4pe2NvbnN0IG49ZS5tYXAoKGU9PmUodCkpKTtyZXR1cm4gby5tZW1vaXplZC5hcHBseShudWxsLG4pfWNvbnN0IGk9ZS5tYXAoKGU9PmUodCxuKSkpO3JldHVybiBvLm1lbW9pemVkLmFwcGx5KG51bGwsWy4uLmksbl0pfWZ1bmN0aW9uIEZrKHQpe3JldHVybiB6aygoZT0+e2NvbnN0IG49ZVt0XTtyZXR1cm4gdUMoKSYmISh0IGluIGUpJiZjb25zb2xlLndhcm4oYEBuZ3J4L3N0b3JlOiBUaGUgZmVhdHVyZSBuYW1lICIke3R9IiBkb2VzIG5vdCBleGlzdCBpbiB0aGUgc3RhdGUsIHRoZXJlZm9yZSBjcmVhdGVGZWF0dXJlU2VsZWN0b3IgY2Fubm90IGFjY2VzcyBpdC4gIEJlIHN1cmUgaXQgaXMgaW1wb3J0ZWQgaW4gYSBsb2FkZWQgbW9kdWxlIHVzaW5nIFN0b3JlTW9kdWxlLmZvclJvb3QoJyR7dH0nLCAuLi4pIG9yIFN0b3JlTW9kdWxlLmZvckZlYXR1cmUoJyR7dH0nLCAuLi4pLiAgSWYgdGhlIGRlZmF1bHQgc3RhdGUgaXMgaW50ZW5kZWQgdG8gYmUgdW5kZWZpbmVkLCBhcyBpcyB0aGUgY2FzZSB3aXRoIHJvdXRlciBzdGF0ZSwgdGhpcyBkZXZlbG9wbWVudC1vbmx5IHdhcm5pbmcgbWVzc2FnZSBjYW4gYmUgaWdub3JlZC5gKSxufSksKHQ9PnQpKX1jb25zdCBMaz0iaHR0cHM6Ly9uZ3J4LmlvL2d1aWRlL3N0b3JlL2NvbmZpZ3VyYXRpb24vcnVudGltZS1jaGVja3MiO2Z1bmN0aW9uIEJrKHQpe3JldHVybiB2b2lkIDA9PT10fWZ1bmN0aW9uIFZrKHQpe3JldHVybiBudWxsPT09dH1mdW5jdGlvbiBqayh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KX1mdW5jdGlvbiBVayh0KXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHQmJm51bGwhPT10fWZ1bmN0aW9uIFdrKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0fWZ1bmN0aW9uIEdrKHQpe09iamVjdC5mcmVlemUodCk7Y29uc3QgZT1Xayh0KTtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModCkuZm9yRWFjaCgobj0+e2lmKCFuLnN0YXJ0c1dpdGgoIsm1IikmJihmdW5jdGlvbiBvKHQsZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGUpfSkodCxuKSYmKCFlfHwiY2FsbGVyIiE9PW4mJiJjYWxsZWUiIT09biYmImFyZ3VtZW50cyIhPT1uKSl7Y29uc3QgZT10W25dOyFVayhlKSYmIVdrKGUpfHxPYmplY3QuaXNGcm96ZW4oZSl8fEdrKGUpfX0pKSx0fWZ1bmN0aW9uIFlrKHQsZT1bXSl7cmV0dXJuKEJrKHQpfHxWayh0KSkmJjA9PT1lLmxlbmd0aD97cGF0aDpbInJvb3QiXSx2YWx1ZTp0fTpPYmplY3Qua2V5cyh0KS5yZWR1Y2UoKChuLG8pPT57aWYobilyZXR1cm4gbjtjb25zdCBpPXRbb107cmV0dXJuKGZ1bmN0aW9uIGEodCl7cmV0dXJuIFdrKHQpJiZ0Lmhhc093blByb3BlcnR5KCLJtWNtcCIpfSkoaSk/bjohKEJrKGkpfHxWayhpKXx8KGZ1bmN0aW9uIHIodCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0fSkoaSl8fChmdW5jdGlvbiBzKHQpe3JldHVybiJib29sZWFuIj09dHlwZW9mIHR9KShpKXx8KGZ1bmN0aW9uIGwodCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0fSkoaSl8fGprKGkpKSYmKChmdW5jdGlvbiBjKHQpe2lmKCEoZnVuY3Rpb24gZSh0KXtyZXR1cm4gVWsodCkmJiFqayh0KX0pKHQpKXJldHVybiExO2NvbnN0IG49T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpO3JldHVybiBuPT09T2JqZWN0LnByb3RvdHlwZXx8bnVsbD09PW59KShpKT9ZayhpLFsuLi5lLG9dKTp7cGF0aDpbLi4uZSxvXSx2YWx1ZTppfSl9KSwhMSl9ZnVuY3Rpb24gcWsodCxlKXtpZighMT09PXQpcmV0dXJuO2NvbnN0IG49dC5wYXRoLmpvaW4oIi4iKSxvPW5ldyBFcnJvcihgRGV0ZWN0ZWQgdW5zZXJpYWxpemFibGUgJHtlfSBhdCAiJHtufSIuICR7TGt9I3N0cmljdCR7ZX1zZXJpYWxpemFiaWxpdHlgKTt0aHJvdyBvLnZhbHVlPXQudmFsdWUsby51bnNlcmlhbGl6YWJsZVBhdGg9bixvfWZ1bmN0aW9uIFprKHQpe3JldHVybiB1QygpP09iamVjdC5hc3NpZ24oe3N0cmljdFN0YXRlU2VyaWFsaXphYmlsaXR5OiExLHN0cmljdEFjdGlvblNlcmlhbGl6YWJpbGl0eTohMSxzdHJpY3RTdGF0ZUltbXV0YWJpbGl0eTohMCxzdHJpY3RBY3Rpb25JbW11dGFiaWxpdHk6ITAsc3RyaWN0QWN0aW9uV2l0aGluTmdab25lOiExLHN0cmljdEFjdGlvblR5cGVVbmlxdWVuZXNzOiExfSx0KTp7c3RyaWN0U3RhdGVTZXJpYWxpemFiaWxpdHk6ITEsc3RyaWN0QWN0aW9uU2VyaWFsaXphYmlsaXR5OiExLHN0cmljdFN0YXRlSW1tdXRhYmlsaXR5OiExLHN0cmljdEFjdGlvbkltbXV0YWJpbGl0eTohMSxzdHJpY3RBY3Rpb25XaXRoaW5OZ1pvbmU6ITEsc3RyaWN0QWN0aW9uVHlwZVVuaXF1ZW5lc3M6ITF9fWZ1bmN0aW9uIFhrKHtzdHJpY3RBY3Rpb25TZXJpYWxpemFiaWxpdHk6dCxzdHJpY3RTdGF0ZVNlcmlhbGl6YWJpbGl0eTplfSl7cmV0dXJuIG49PnR8fGU/KGZ1bmN0aW9uIG8odCxlKXtyZXR1cm4gZnVuY3Rpb24obixvKXtlLmFjdGlvbihvKSYmcWsoWWsobyksImFjdGlvbiIpO2NvbnN0IGk9dChuLG8pO3JldHVybiBlLnN0YXRlKCkmJnFrKFlrKGkpLCJzdGF0ZSIpLGl9fSkobix7YWN0aW9uOmU9PnQmJiFKayhlKSxzdGF0ZTooKT0+ZX0pOm59ZnVuY3Rpb24gS2soe3N0cmljdEFjdGlvbkltbXV0YWJpbGl0eTp0LHN0cmljdFN0YXRlSW1tdXRhYmlsaXR5OmV9KXtyZXR1cm4gbj0+dHx8ZT8oZnVuY3Rpb24gbyh0LGUpe3JldHVybiBmdW5jdGlvbihuLG8pe2NvbnN0IGk9ZS5hY3Rpb24obyk/R2sobyk6byxhPXQobixpKTtyZXR1cm4gZS5zdGF0ZSgpP0drKGEpOmF9fSkobix7YWN0aW9uOmU9PnQmJiFKayhlKSxzdGF0ZTooKT0+ZX0pOm59ZnVuY3Rpb24gSmsodCl7cmV0dXJuIHQudHlwZS5zdGFydHNXaXRoKCJAbmdyeCIpfWZ1bmN0aW9uIFFrKHtzdHJpY3RBY3Rpb25XaXRoaW5OZ1pvbmU6dH0pe3JldHVybiBlPT50PyhmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4sbyl7aWYoZS5hY3Rpb24obykmJiF0Qy5pc0luQW5ndWxhclpvbmUoKSl0aHJvdyBuZXcgRXJyb3IoYEFjdGlvbiAnJHtvLnR5cGV9JyBydW5uaW5nIG91dHNpZGUgTmdab25lLiAke0xrfSNzdHJpY3RhY3Rpb253aXRoaW5uZ3pvbmVgKTtyZXR1cm4gdChuLG8pfX0pKGUse2FjdGlvbjplPT50JiYhSmsoZSl9KTplfWZ1bmN0aW9uICRrKCl7cmV0dXJuW3twcm92aWRlOmdrLG11bHRpOiEwLGRlcHM6W2ZrXSx1c2VGYWN0b3J5OmVTfV19ZnVuY3Rpb24gdFModCl7cmV0dXJuIHR9ZnVuY3Rpb24gZVModCl7aWYoIXQuc3RyaWN0QWN0aW9uVHlwZVVuaXF1ZW5lc3MpcmV0dXJuO2NvbnN0IGU9T2JqZWN0LmVudHJpZXMoVXcpLmZpbHRlcigoKFssdF0pPT50PjEpKS5tYXAoKChbdF0pPT50KSk7aWYoZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKGBBY3Rpb24gdHlwZXMgYXJlIHJlZ2lzdGVyZWQgbW9yZSB0aGFuIG9uY2UsICR7ZS5tYXAoKHQ9PmAiJHt0fSJgKSkuam9pbigiLCAiKX0uICR7TGt9I3N0cmljdGFjdGlvbnR5cGV1bmlxdWVuZXNzYCl9Y2xhc3MgblN7Y29uc3RydWN0b3IodCxlLG4sbyxpLGEpe319blMuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fG5TKSh1cyhxdyksdXMoX2spLHVzKHhrKSx1cyhFayksdXMoWHcsOCksdXMoZ2ssOCkpfSxuUy7JtW1vZD1abyh7dHlwZTpuU30pLG5TLsm1aW5qPWNvKHt9KSxuUy5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOnF3fSx7dHlwZTpfa30se3R5cGU6eGt9LHt0eXBlOkVrfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W1h3XX1dfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W2drXX1dfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihuUyxbe3R5cGU6a18sYXJnczpbe31dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOnF3fSx7dHlwZTpfa30se3R5cGU6eGt9LHt0eXBlOkVrfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W1h3XX1dfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W2drXX1dfV19KSxudWxsKTtjbGFzcyBvU3tjb25zdHJ1Y3Rvcih0LGUsbixvLGkpe3RoaXMuZmVhdHVyZXM9dCx0aGlzLmZlYXR1cmVSZWR1Y2Vycz1lLHRoaXMucmVkdWNlck1hbmFnZXI9bjtjb25zdCBhPXQubWFwKCgodCxuKT0+e2NvbnN0IG89ZS5zaGlmdCgpW25dO3JldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3JlZHVjZXJzOm8saW5pdGlhbFN0YXRlOmxTKHQuaW5pdGlhbFN0YXRlKX0pfSkpO24uYWRkRmVhdHVyZXMoYSl9bmdPbkRlc3Ryb3koKXt0aGlzLnJlZHVjZXJNYW5hZ2VyLnJlbW92ZUZlYXR1cmVzKHRoaXMuZmVhdHVyZXMpfX1vUy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8b1MpKHVzKHJrKSx1cyhsayksdXMoTWspLHVzKG5TKSx1cyhnayw4KSl9LG9TLsm1bW9kPVpvKHt0eXBlOm9TfSksb1MuybVpbmo9Y28oe30pLG9TLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6QXJyYXksZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbcmtdfV19LHt0eXBlOkFycmF5LGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W2xrXX1dfSx7dHlwZTpNa30se3R5cGU6blN9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbZ2tdfV19XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKG9TLFt7dHlwZTprXyxhcmdzOlt7fV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6QXJyYXksZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbcmtdfV19LHt0eXBlOkFycmF5LGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W2xrXX1dfSx7dHlwZTpNa30se3R5cGU6blN9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbZ2tdfV19XX0pLG51bGwpO2NsYXNzIGlTe3N0YXRpYyBmb3JSb290KHQsZT17fSl7cmV0dXJue25nTW9kdWxlOm5TLHByb3ZpZGVyczpbe3Byb3ZpZGU6WHcsdXNlRmFjdG9yeTpkUyxkZXBzOltbRWssbmV3IF9zLG5ldyBNc11dfSx7cHJvdmlkZTpLdyx1c2VWYWx1ZTplLmluaXRpYWxTdGF0ZX0se3Byb3ZpZGU6SncsdXNlRmFjdG9yeTpsUyxkZXBzOltLd119LHtwcm92aWRlOmVrLHVzZVZhbHVlOnR9LHtwcm92aWRlOm9rLHVzZUV4aXN0aW5nOnQgaW5zdGFuY2VvZiBOcj90OmVrfSx7cHJvdmlkZTp0ayxkZXBzOltRcCxlayxbbmV3IHlzKG9rKV1dLHVzZUZhY3Rvcnk6YVN9LHtwcm92aWRlOmNrLHVzZVZhbHVlOmUubWV0YVJlZHVjZXJzP2UubWV0YVJlZHVjZXJzOltdfSx7cHJvdmlkZTpwayxkZXBzOltkayxja10sdXNlRmFjdG9yeTpjU30se3Byb3ZpZGU6JHcsdXNlVmFsdWU6ZS5yZWR1Y2VyRmFjdG9yeT9lLnJlZHVjZXJGYWN0b3J5OmhrfSx7cHJvdmlkZTpRdyxkZXBzOlskdyxwa10sdXNlRmFjdG9yeTp5a30sWncsdmssUGssRGssQWssKG49ZS5ydW50aW1lQ2hlY2tzLFt7cHJvdmlkZTp1ayx1c2VWYWx1ZTpufSx7cHJvdmlkZTptayx1c2VGYWN0b3J5OnRTLGRlcHM6W3VrXX0se3Byb3ZpZGU6ZmssZGVwczpbbWtdLHVzZUZhY3Rvcnk6Wmt9LHtwcm92aWRlOmRrLG11bHRpOiEwLGRlcHM6W2ZrXSx1c2VGYWN0b3J5OktrfSx7cHJvdmlkZTpkayxtdWx0aTohMCxkZXBzOltma10sdXNlRmFjdG9yeTpYa30se3Byb3ZpZGU6ZGssbXVsdGk6ITAsZGVwczpbZmtdLHVzZUZhY3Rvcnk6UWt9XSksJGsoKV19O3ZhciBufXN0YXRpYyBmb3JGZWF0dXJlKHQsZSxuPXt9KXtyZXR1cm57bmdNb2R1bGU6b1MscHJvdmlkZXJzOlt7cHJvdmlkZTphayxtdWx0aTohMCx1c2VWYWx1ZTpufSx7cHJvdmlkZTpuayxtdWx0aTohMCx1c2VWYWx1ZTp7a2V5OnQscmVkdWNlckZhY3Rvcnk6biBpbnN0YW5jZW9mIE5yfHwhbi5yZWR1Y2VyRmFjdG9yeT9oazpuLnJlZHVjZXJGYWN0b3J5LG1ldGFSZWR1Y2VyczpuIGluc3RhbmNlb2YgTnJ8fCFuLm1ldGFSZWR1Y2Vycz9bXTpuLm1ldGFSZWR1Y2Vycyxpbml0aWFsU3RhdGU6biBpbnN0YW5jZW9mIE5yfHwhbi5pbml0aWFsU3RhdGU/dm9pZCAwOm4uaW5pdGlhbFN0YXRlfX0se3Byb3ZpZGU6cmssZGVwczpbUXAsYWssbmtdLHVzZUZhY3Rvcnk6clN9LHtwcm92aWRlOmlrLG11bHRpOiEwLHVzZVZhbHVlOmV9LHtwcm92aWRlOnNrLG11bHRpOiEwLHVzZUV4aXN0aW5nOmUgaW5zdGFuY2VvZiBOcj9lOmlrfSx7cHJvdmlkZTpsayxtdWx0aTohMCxkZXBzOltRcCxpayxbbmV3IHlzKHNrKV1dLHVzZUZhY3Rvcnk6c1N9LCRrKCldfX19ZnVuY3Rpb24gYVModCxlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIE5yP3QuZ2V0KGUpOmV9ZnVuY3Rpb24gclModCxlLG4pe3JldHVybiBuLm1hcCgoKG4sbyk9PntpZihlW29daW5zdGFuY2VvZiBOcil7Y29uc3QgaT10LmdldChlW29dKTtyZXR1cm57a2V5Om4ua2V5LHJlZHVjZXJGYWN0b3J5OmkucmVkdWNlckZhY3Rvcnk/aS5yZWR1Y2VyRmFjdG9yeTpoayxtZXRhUmVkdWNlcnM6aS5tZXRhUmVkdWNlcnM/aS5tZXRhUmVkdWNlcnM6W10saW5pdGlhbFN0YXRlOmkuaW5pdGlhbFN0YXRlfX1yZXR1cm4gbn0pKX1mdW5jdGlvbiBzUyh0LGUpe3JldHVybiBlLm1hcCgoZT0+ZSBpbnN0YW5jZW9mIE5yP3QuZ2V0KGUpOmUpKX1mdW5jdGlvbiBsUyh0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD90KCk6dH1mdW5jdGlvbiBjUyh0LGUpe3JldHVybiB0LmNvbmNhdChlKX1mdW5jdGlvbiBkUyh0KXtpZih0KXRocm93IG5ldyBUeXBlRXJyb3IoIlN0b3JlTW9kdWxlLmZvclJvb3QoKSBjYWxsZWQgdHdpY2UuIEZlYXR1cmUgbW9kdWxlcyBzaG91bGQgdXNlIFN0b3JlTW9kdWxlLmZvckZlYXR1cmUoKSBpbnN0ZWFkLiIpO3JldHVybiJndWFyZGVkIn1mdW5jdGlvbiBwUyguLi50KXtyZXR1cm57cmVkdWNlcjp0LnBvcCgpLHR5cGVzOnQucmVkdWNlKCgodCxlKT0+Wy4uLnQsZS50eXBlXSksW10pfX1mdW5jdGlvbiBtUyh0LC4uLmUpe2NvbnN0IG49bmV3IE1hcDtmb3IobGV0IHQgb2YgZSlmb3IobGV0IGUgb2YgdC50eXBlcylpZihuLmhhcyhlKSl7Y29uc3Qgbz1uLmdldChlKTtuLnNldChlLCgoZSxuKT0+dC5yZWR1Y2VyKG8oZSxuKSxuKSkpfWVsc2Ugbi5zZXQoZSx0LnJlZHVjZXIpO3JldHVybiBmdW5jdGlvbihlPXQsbyl7Y29uc3QgaT1uLmdldChvLnR5cGUpO3JldHVybiBpP2koZSxvKTplfX0KLyoqCiAgICAgKiBAbGljZW5zZSBOZ1J4IDkuMi4xCiAgICAgKiAoYykgMjAxNS0yMDE4IEJyYW5kb24gUm9iZXJ0cywgTWlrZSBSeWFuLCBSb2IgV29ybWFsZCwgVmljdG9yIFNhdmtpbgogICAgICogTGljZW5zZTogTUlUCiAgICAgKi9pUy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8aVMpfSxpUy7JtW1vZD1abyh7dHlwZTppU30pLGlTLsm1aW5qPWNvKHt9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGlTLFt7dHlwZTprXyxhcmdzOlt7fV19XSxudWxsLG51bGwpO2NvbnN0IHVTPXtkaXNwYXRjaDohMCx1c2VFZmZlY3RzRXJyb3JIYW5kbGVyOiEwfSxmUz0iX19AbmdyeC9lZmZlY3RzX2NyZWF0ZV9fIjtmdW5jdGlvbiBnUyh0LGUpe2NvbnN0IG49dCgpLG89T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHVTKSxlKTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sZlMse3ZhbHVlOm99KSxufWZ1bmN0aW9uIGhTKHQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0KS5maWx0ZXIoKGU9PnRbZV0mJnRbZV0uaGFzT3duUHJvcGVydHkoZlMpKSkubWFwKChlPT5PYmplY3QuYXNzaWduKHtwcm9wZXJ0eU5hbWU6ZX0sdFtlXVtmU10pKSl9ZnVuY3Rpb24gYlModCl7cmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZih0KX1jb25zdCB5Uz0iX19AbmdyeC9lZmZlY3RzX18iO2Z1bmN0aW9uIF9TKHQpe3JldHVybiBiayhDUyxiUykodCl9ZnVuY3Rpb24gQ1ModCl7cmV0dXJuKGZ1bmN0aW9uIGUodCl7cmV0dXJuIHQuY29uc3RydWN0b3IuaGFzT3duUHJvcGVydHkoeVMpfSkodCk/dC5jb25zdHJ1Y3Rvclt5U106W119ZnVuY3Rpb24gTVModCxlLG49MTApe3JldHVybiB0LnBpcGUocmUoKG89PihlJiZlLmhhbmRsZUVycm9yKG8pLG48PTE/dDpNUyh0LGUsbi0xKSkpKSl9Y2xhc3MgdlMgZXh0ZW5kcyB5e2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdCYmKHRoaXMuc291cmNlPXQpfWxpZnQodCl7Y29uc3QgZT1uZXcgdlM7cmV0dXJuIGUuc291cmNlPXRoaXMsZS5vcGVyYXRvcj10LGV9fWZ1bmN0aW9uIHhTKC4uLnQpe3JldHVybiBHdCgoZT0+dC5zb21lKCh0PT4ic3RyaW5nIj09dHlwZW9mIHQ/dD09PWUudHlwZTp0LnR5cGU9PT1lLnR5cGUpKSkpfWZ1bmN0aW9uIE9TKHQpe3JldHVybiBQUyh0LCJuZ3J4T25Jbml0RWZmZWN0cyIpfWZ1bmN0aW9uIFBTKHQsZSl7cmV0dXJuIHQmJmUgaW4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIHRbZV19dlMuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHZTKSh1cyh4aykpfSx2Uy7JtXByb3Y9bG8oe3Rva2VuOnZTLGZhY3Rvcnk6dlMuybVmYWN9KSx2Uy5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOnksZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbeGtdfV19XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHZTLFt7dHlwZTpKbX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTp5LGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W3hrXX1dfV19KSxudWxsKTtjb25zdCB3Uz1uZXcgTnIoIkBuZ3J4L2VmZmVjdHMgSW50ZXJuYWwgUm9vdCBHdWFyZCIpO25ldyBOcigibmdyeC9lZmZlY3RzOiBJbW1lZGlhdGUgRWZmZWN0cyIpO2NvbnN0IGtTPW5ldyBOcigibmdyeC9lZmZlY3RzOiBVc2VyIFByb3ZpZGVkIEVmZmVjdHMiKSxTUz1uZXcgTnIoIm5ncngvZWZmZWN0czogSW50ZXJuYWwgUm9vdCBFZmZlY3RzIiksRFM9bmV3IE5yKCJuZ3J4L2VmZmVjdHM6IFJvb3QgRWZmZWN0cyIpLEVTPW5ldyBOcigibmdyeC9lZmZlY3RzOiBJbnRlcm5hbCBGZWF0dXJlIEVmZmVjdHMiKSxBUz1uZXcgTnIoIm5ncngvZWZmZWN0czogRmVhdHVyZSBFZmZlY3RzIiksUlM9bmV3IE5yKCJuZ3J4L2VmZmVjdHM6IEVmZmVjdHMgRXJyb3IgSGFuZGxlciIpO2NsYXNzIFRTIGV4dGVuZHMgeHtjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKCksdGhpcy5lcnJvckhhbmRsZXI9dCx0aGlzLmVmZmVjdHNFcnJvckhhbmRsZXI9ZX1hZGRFZmZlY3RzKHQpe3RoaXMubmV4dCh0KX10b0FjdGlvbnMoKXtyZXR1cm4gdGhpcy5waXBlKEEoYlMpLFR0KCh0PT50LnBpcGUoQShOUykpKSksVHQoKHQ9Pld0KHQucGlwZShIZSgodD0+KGZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gZT0+e2NvbnN0IG89KGZ1bmN0aW9uIGkodCxlLG4pe2NvbnN0IG89YlModCkuY29uc3RydWN0b3IubmFtZTtyZXR1cm4gV3QoLi4uKGZ1bmN0aW9uIGkodCl7cmV0dXJuW19TLGhTXS5yZWR1Y2UoKChlLG4pPT5lLmNvbmNhdChuKHQpKSksW10pfSkodCkubWFwKCgoe3Byb3BlcnR5TmFtZTppLGRpc3BhdGNoOmEsdXNlRWZmZWN0c0Vycm9ySGFuZGxlcjpyfSk9Pntjb25zdCBzPSJmdW5jdGlvbiI9PXR5cGVvZiB0W2ldP3RbaV0oKTp0W2ldLGw9cj9uKHMsZSk6cztyZXR1cm4hMT09PWE/bC5waXBlKChmdW5jdGlvbiBjKCl7cmV0dXJuIGZ1bmN0aW9uIHQoZSl7cmV0dXJuIGUubGlmdChuZXcgamUpfX0pKCkpOmwucGlwZSgoZnVuY3Rpb24gZCgpe3JldHVybiBmdW5jdGlvbiB0KGUpe3JldHVybiBlLmxpZnQobmV3IHFlKX19KSgpKS5waXBlKGh0KChlPT4oe2VmZmVjdDp0W2ldLG5vdGlmaWNhdGlvbjplLHByb3BlcnR5TmFtZTppLHNvdXJjZU5hbWU6byxzb3VyY2VJbnN0YW5jZTp0fSkpKSl9KSkpfSkoZSx0LG4pO3JldHVybihmdW5jdGlvbiBhKHQpe3JldHVybiBQUyh0LCJuZ3J4T25SdW5FZmZlY3RzIil9KShlKT9lLm5ncnhPblJ1bkVmZmVjdHMobyk6b319KSh0aGlzLmVycm9ySGFuZGxlcix0aGlzLmVmZmVjdHNFcnJvckhhbmRsZXIpKHQpKSksaHQoKHQ9PigoZnVuY3Rpb24gZSh0LG4pe2lmKCJOIj09PXQubm90aWZpY2F0aW9uLmtpbmQpe2NvbnN0IGU9dC5ub3RpZmljYXRpb24udmFsdWU7IShmdW5jdGlvbiBvKHQpe3JldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiZ0JiZ0LnR5cGUmJiJzdHJpbmciPT10eXBlb2YgdC50eXBlfSkoZSkmJm4uaGFuZGxlRXJyb3IobmV3IEVycm9yKGBFZmZlY3QgJHsoZnVuY3Rpb24gaSh7cHJvcGVydHlOYW1lOnQsc291cmNlSW5zdGFuY2U6ZSxzb3VyY2VOYW1lOm59KXtjb25zdCBvPSJmdW5jdGlvbiI9PXR5cGVvZiBlW3RdO3JldHVybmAiJHtufS4ke1N0cmluZyh0KX0ke28/IigpIjoiIn0iYH0pKHQpfSBkaXNwYXRjaGVkIGFuIGludmFsaWQgYWN0aW9uOiAkeyhmdW5jdGlvbiBhKHQpe3RyeXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodCl9Y2F0Y2goZSl7cmV0dXJuIHR9fSkoZSl9YCkpfX0pKHQsdGhpcy5lcnJvckhhbmRsZXIpLHQubm90aWZpY2F0aW9uKSkpLEd0KCh0PT4iTiI9PT10LmtpbmQpKSwoZnVuY3Rpb24gZSgpe3JldHVybiBmdW5jdGlvbiB0KGUpe3JldHVybiBlLmxpZnQobmV3IFBlKX19KSgpKSx0LnBpcGUoTmUoMSksR3QoT1MpLGh0KCh0PT50Lm5ncnhPbkluaXRFZmZlY3RzKCkpKSkpKSkpfX1mdW5jdGlvbiBOUyh0KXtyZXR1cm4oZnVuY3Rpb24gZSh0KXtyZXR1cm4gUFModCwibmdyeE9uSWRlbnRpZnlFZmZlY3RzIil9KSh0KT90Lm5ncnhPbklkZW50aWZ5RWZmZWN0cygpOiIifVRTLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxUUykodXMoRWwpLHVzKFJTKSl9LFRTLsm1cHJvdj1sbyh7dG9rZW46VFMsZmFjdG9yeTpUUy7JtWZhY30pLFRTLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6RWx9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltSU119XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoVFMsW3t0eXBlOkptfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkVsfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbUlNdfV19XX0pLG51bGwpO2NsYXNzIElTe2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5lZmZlY3RTb3VyY2VzPXQsdGhpcy5zdG9yZT1lLHRoaXMuZWZmZWN0c1N1YnNjcmlwdGlvbj1udWxsfXN0YXJ0KCl7dGhpcy5lZmZlY3RzU3Vic2NyaXB0aW9ufHwodGhpcy5lZmZlY3RzU3Vic2NyaXB0aW9uPXRoaXMuZWZmZWN0U291cmNlcy50b0FjdGlvbnMoKS5zdWJzY3JpYmUodGhpcy5zdG9yZSkpfW5nT25EZXN0cm95KCl7dGhpcy5lZmZlY3RzU3Vic2NyaXB0aW9uJiYodGhpcy5lZmZlY3RzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5lZmZlY3RzU3Vic2NyaXB0aW9uPW51bGwpfX1JUy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8SVMpKHVzKFRTKSx1cyhFaykpfSxJUy7JtXByb3Y9bG8oe3Rva2VuOklTLGZhY3Rvcnk6SVMuybVmYWN9KSxJUy5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOlRTfSx7dHlwZTpFa31dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoSVMsW3t0eXBlOkptfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOlRTfSx7dHlwZTpFa31dfSksbnVsbCk7Y29uc3QgelM9IkBuZ3J4L2VmZmVjdHMvaW5pdCI7V3coelMpO2NsYXNzIEhTe2NvbnN0cnVjdG9yKHQsZSxuLG8saSxhLHIpe3RoaXMuc291cmNlcz10LGUuc3RhcnQoKSxvLmZvckVhY2goKGU9PnQuYWRkRWZmZWN0cyhlKSkpLG4uZGlzcGF0Y2goe3R5cGU6elN9KX1hZGRFZmZlY3RzKHQpe3RoaXMuc291cmNlcy5hZGRFZmZlY3RzKHQpfX1IUy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8SFMpKHVzKFRTKSx1cyhJUyksdXMoRWspLHVzKERTKSx1cyhuUyw4KSx1cyhvUyw4KSx1cyh3Uyw4KSl9LEhTLsm1bW9kPVpvKHt0eXBlOkhTfSksSFMuybVpbmo9Y28oe30pLEhTLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6VFN9LHt0eXBlOklTfSx7dHlwZTpFa30se3R5cGU6QXJyYXksZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbRFNdfV19LHt0eXBlOm5TLGRlY29yYXRvcnM6W3t0eXBlOl9zfV19LHt0eXBlOm9TLGRlY29yYXRvcnM6W3t0eXBlOl9zfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbd1NdfV19XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEhTLFt7dHlwZTprXyxhcmdzOlt7fV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6VFN9LHt0eXBlOklTfSx7dHlwZTpFa30se3R5cGU6QXJyYXksZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbRFNdfV19LHt0eXBlOm5TLGRlY29yYXRvcnM6W3t0eXBlOl9zfV19LHt0eXBlOm9TLGRlY29yYXRvcnM6W3t0eXBlOl9zfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbd1NdfV19XX0pLG51bGwpO2NsYXNzIEZTe2NvbnN0cnVjdG9yKHQsZSxuLG8pe2UuZm9yRWFjaCgoZT0+ZS5mb3JFYWNoKChlPT50LmFkZEVmZmVjdHMoZSkpKSkpfX1GUy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8RlMpKHVzKEhTKSx1cyhBUyksdXMoblMsOCksdXMob1MsOCkpfSxGUy7JtW1vZD1abyh7dHlwZTpGU30pLEZTLsm1aW5qPWNvKHt9KSxGUy5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOkhTfSx7dHlwZTpBcnJheSxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltBU119XX0se3R5cGU6blMsZGVjb3JhdG9yczpbe3R5cGU6X3N9XX0se3R5cGU6b1MsZGVjb3JhdG9yczpbe3R5cGU6X3N9XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoRlMsW3t0eXBlOmtfLGFyZ3M6W3t9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpIU30se3R5cGU6QXJyYXksZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbQVNdfV19LHt0eXBlOm5TLGRlY29yYXRvcnM6W3t0eXBlOl9zfV19LHt0eXBlOm9TLGRlY29yYXRvcnM6W3t0eXBlOl9zfV19XX0pLG51bGwpO2NsYXNzIExTe3N0YXRpYyBmb3JGZWF0dXJlKHQ9W10pe3JldHVybntuZ01vZHVsZTpGUyxwcm92aWRlcnM6W3Qse3Byb3ZpZGU6RVMsbXVsdGk6ITAsdXNlVmFsdWU6dH0se3Byb3ZpZGU6a1MsbXVsdGk6ITAsdXNlVmFsdWU6W119LHtwcm92aWRlOkFTLG11bHRpOiEwLHVzZUZhY3Rvcnk6QlMsZGVwczpbUXAsRVMsa1NdfV19fXN0YXRpYyBmb3JSb290KHQ9W10pe3JldHVybntuZ01vZHVsZTpIUyxwcm92aWRlcnM6W3twcm92aWRlOndTLHVzZUZhY3Rvcnk6VlMsZGVwczpbW0lTLG5ldyBfcyxuZXcgTXNdXX0se3Byb3ZpZGU6UlMsdXNlVmFsdWU6TVN9LElTLFRTLHZTLHQse3Byb3ZpZGU6U1MsdXNlVmFsdWU6W3RdfSx7cHJvdmlkZTprUyxtdWx0aTohMCx1c2VWYWx1ZTpbXX0se3Byb3ZpZGU6RFMsdXNlRmFjdG9yeTpCUyxkZXBzOltRcCxTUyxrU119XX19fWZ1bmN0aW9uIEJTKHQsZSxuKXtjb25zdCBvPVtdO2ZvcihsZXQgdCBvZiBlKW8ucHVzaCguLi50KTtmb3IobGV0IHQgb2YgbilvLnB1c2goLi4udCk7cmV0dXJuKGZ1bmN0aW9uIGkodCxlKXtyZXR1cm4gZS5tYXAoKGU9PnQuZ2V0KGUpKSl9KSh0LG8pfWZ1bmN0aW9uIFZTKHQpe2lmKHQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRWZmZWN0c01vZHVsZS5mb3JSb290KCkgY2FsbGVkIHR3aWNlLiBGZWF0dXJlIG1vZHVsZXMgc2hvdWxkIHVzZSBFZmZlY3RzTW9kdWxlLmZvckZlYXR1cmUoKSBpbnN0ZWFkLiIpO3JldHVybiJndWFyZGVkIn12YXIgalM7TFMuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fExTKX0sTFMuybVtb2Q9Wm8oe3R5cGU6TFN9KSxMUy7JtWluaj1jbyh7fSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihMUyxbe3R5cGU6a18sYXJnczpbe31dfV0sbnVsbCxudWxsKSwoZnVuY3Rpb24odCl7dFt0LlVOS05PV049MF09IlVOS05PV04iLHRbdC5FWFBFUklNRU5UUz0xXT0iRVhQRVJJTUVOVFMiLHRbdC5FWFBFUklNRU5UPTJdPSJFWFBFUklNRU5UIix0W3QuQ09NUEFSRV9FWFBFUklNRU5UPTNdPSJDT01QQVJFX0VYUEVSSU1FTlQiLHRbdC5OT1RfU0VUPTRdPSJOT1RfU0VUIn0pKGpTfHwoalM9e30pKTtjb25zdCBVUz0iZGVmYXVsdEV4cGVyaW1lbnRJZCI7ZnVuY3Rpb24gV1ModCl7cmV0dXJuIHQuc3BsaXQoIiwiKS5tYXAoKHQ9Pntjb25zdCBlPXQuaW5kZXhPZigiOiIpO2lmKGU8MCl0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdCBjb2xvbiBkZWxpbWl0aW5nIG5hbWUgYW5kIElEOiAke3R9YCk7Y29uc3Qgbj10LnNsaWNlKDAsZSksbz10LnNsaWNlKGUrMSk7aWYoIW4pdGhyb3cgbmV3IEVycm9yKGBFeHBlY3QgbmFtZSB0byBiZSBub24tZmFsc3k6ICR7dH1gKTtpZighbyl0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdCBpZCB0byBiZSBub24tZmFsc3k6ICR7dH1gKTtyZXR1cm57bmFtZTpuLGlkOm99fSkpfWZ1bmN0aW9uIEdTKHQsZSl7c3dpdGNoKHQpe2Nhc2UgalMuRVhQRVJJTUVOVDpyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsImV4cGVyaW1lbnRJZCIpP1tlLmV4cGVyaW1lbnRJZF06W1VTXTtjYXNlIGpTLkNPTVBBUkVfRVhQRVJJTUVOVDpyZXR1cm4gV1MoZS5leHBlcmltZW50SWRzKS5tYXAoKCh7aWQ6dH0pPT50KSk7Y2FzZSBqUy5FWFBFUklNRU5UUzpkZWZhdWx0OnJldHVybiBudWxsfX1mdW5jdGlvbiBZUyh0LGUpe3ZhciBuO3N3aXRjaCh0KXtjYXNlIGpTLkNPTVBBUkVfRVhQRVJJTUVOVDpjYXNlIGpTLkVYUEVSSU1FTlQ6e2NvbnN0IG89bnVsbCE9PShuPUdTKHQsZSkpJiZ2b2lkIDAhPT1uP246W107cmV0dXJuIG8uc29ydCgpLGAke3R9LyR7by5qb2luKCIsIil9YH1jYXNlIGpTLkVYUEVSSU1FTlRTOnJldHVybiBTdHJpbmcodCk7Y2FzZSBqUy5OT1RfU0VUOnJldHVybiJfX25vdF9zZXQiO2RlZmF1bHQ6cmV0dXJuIiJ9fWNvbnN0IHFTPSgpPT53aW5kb3cubG9jYXRpb24uaHJlZjtjbGFzcyBaU3tnZXRIcmVmKCl7cmV0dXJuIHFTKCl9Z2V0U2VhcmNoKCl7Y29uc3QgdD1uZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLGU9W107cmV0dXJuIHQuZm9yRWFjaCgoKHQsbik9PntlLnB1c2goe2tleTpuLHZhbHVlOnR9KX0pKSxlfWdldEhhc2goKXtyZXR1cm4gd2luZG93LmxvY2F0aW9uLmhhc2h9Z2V0UGF0aCgpe3JldHVybiB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWV9cmVwbGFjZVN0YXRlKHQpe3dpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZShudWxsLCIiLHQpfXB1c2hTdGF0ZSh0KXt3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUobnVsbCwiIix0KX1vblBvcFN0YXRlKCl7cmV0dXJuIFZ0KHdpbmRvdywicG9wc3RhdGUiKS5waXBlKGh0KCgoKT0+KHtwYXRobmFtZTp0aGlzLmdldFBhdGgoKSxxdWVyeVBhcmFtczp0aGlzLmdldFNlYXJjaCgpfSkpKSl9Z2V0UmVzb2x2ZWRQYXRoKHQpe3JldHVybiBuZXcgVVJMKHQscVMoKSkucGF0aG5hbWV9Z2V0RnVsbFBhdGhGcm9tUm91dGVPck5hdih0LGUpe2NvbnN0IG49dGhpcy5nZXRSZXNvbHZlZFBhdGgodC5wYXRobmFtZSk7bGV0IG89IiI7cmV0dXJuIShmdW5jdGlvbiBpKHQpe3JldHVybiB0Lmhhc093blByb3BlcnR5KCJwYXRobmFtZSIpJiYhdC5oYXNPd25Qcm9wZXJ0eSgicXVlcnlQYXJhbXMiKX0pKHQpJiZ0LnF1ZXJ5UGFyYW1zLmxlbmd0aCYmKG89Ij8iKyhmdW5jdGlvbiBhKHQpe2NvbnN0IGU9bmV3IFVSTFNlYXJjaFBhcmFtcztmb3IoY29uc3R7a2V5Om4sdmFsdWU6b31vZiB0KWUuYXBwZW5kKG4sbyk7cmV0dXJuIGV9KSh0LnF1ZXJ5UGFyYW1zKS50b1N0cmluZygpKSxgJHtufSR7b30ke2U/dGhpcy5nZXRIYXNoKCk6IiJ9YH19WlMuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFpTKX0sWlMuybVwcm92PWxvKHt0b2tlbjpaUyxmYWN0b3J5OlpTLsm1ZmFjfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihaUyxbe3R5cGU6Sm19XSxudWxsLG51bGwpO2NsYXNzIFhTe2NvbnN0cnVjdG9yKHQpe3RoaXMuYXBwUm9vdD10aGlzLmdldEFwcFJvb3RGcm9tTWV0YUVsZW1lbnQodCl9Z2V0QXBwUm9vdEZyb21NZXRhRWxlbWVudCh0KXtjb25zdCBlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2hlYWQgbWV0YVtuYW1lPSJ0Yi1yZWxhdGl2ZS1yb290Il0nKTtpZighZSlyZXR1cm4iLyI7Y29uc3R7cGF0aG5hbWU6bn09bmV3IFVSTChlLmNvbnRlbnQsdC5nZXRIcmVmKCkpO3JldHVybiBuLnJlcGxhY2UoL1wvKiQvLCIvIil9Z2V0QWJzUGF0aG5hbWVXaXRoQXBwUm9vdCh0KXtyZXR1cm4gdGhpcy5hcHBSb290LnNsaWNlKDAsLTEpK3R9Z2V0QXBwUm9vdGxlc3NQYXRobmFtZSh0KXtyZXR1cm4gdC5zdGFydHNXaXRoKHRoaXMuYXBwUm9vdCk/Ii8iK3Quc2xpY2UodGhpcy5hcHBSb290Lmxlbmd0aCk6dH19WFMuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFhTKSh1cyhaUykpfSxYUy7JtXByb3Y9bG8oe3Rva2VuOlhTLGZhY3Rvcnk6WFMuybVmYWN9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFhTLFt7dHlwZTpKbX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpaU31dfSksbnVsbCk7Y2xhc3MgS1MgZXh0ZW5kcyBYU3tnZXRBcHBSb290KCl7cmV0dXJuIHRoaXMuYXBwUm9vdH1zZXRBcHBSb290KHQpe3RoaXMuYXBwUm9vdD10fX1LUy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBKUyhlfHxLUyl9LEtTLsm1cHJvdj1sbyh7dG9rZW46S1MsZmFjdG9yeTpLUy7JtWZhY30pO2NvbnN0IEpTPXZyKEtTKTsoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEtTLFt7dHlwZTpKbX1dLG51bGwsbnVsbCk7Y2xhc3MgUVN7fVFTLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxRUyl9LFFTLsm1bW9kPVpvKHt0eXBlOlFTfSksUVMuybVpbmo9Y28oe3Byb3ZpZGVyczpbWlNdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihRUyxbe3R5cGU6a18sYXJnczpbe3Byb3ZpZGVyczpbWlNdfV19XSxudWxsLG51bGwpO2NsYXNzICRTe30kUy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8JFMpfSwkUy7JtW1vZD1abyh7dHlwZTokU30pLCRTLsm1aW5qPWNvKHtwcm92aWRlcnM6W1hTXSxpbXBvcnRzOltbUVNdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oJFMse2ltcG9ydHM6W1FTXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoJFMsW3t0eXBlOmtfLGFyZ3M6W3tpbXBvcnRzOltRU10scHJvdmlkZXJzOltYU119XX1dLG51bGwsbnVsbCk7Y29uc3QgdEQ9V3coIltBcHAgUm91dGluZ10gU3RhdGUgUmVoeWRyYXRlZCBGcm9tIFVybCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGVEPVd3KCJbQXBwIFJvdXRpbmddIEluIEFwcCBOYXZpZ2F0aW9uIFJlcXVlc3RlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLG5EPVd3KCJbQXBwIFJvdXRpbmddIEluIEFwcCBOYXZpZ2F0aW5nIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksb0Q9V3coIltBcHAgUm91dGluZ10gSW4gQXBwIE5hdmlnYXRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGlEPW5ldyBOcigiW0FwcCBSb3V0aW5nXSBQcm9ncmFtbWF0aWNhbCBOYXZpZ2F0aW9uIFByb3ZpZGVyIik7Y2xhc3MgYUR7Y29uc3RydWN0b3IodCl7dGhpcy5wcm92aWRlcnM9bmV3IE1hcDtmb3IoY29uc3QgZSBvZiB0fHxbXSl7aWYodGhpcy5wcm92aWRlcnMuaGFzKGUuYWN0aW9uQ3JlYXRvci50eXBlKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgIiR7ZS5hY3Rpb25DcmVhdG9yLnR5cGV9IiBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQgZm9yIG5hdi4gTXVsdGlwbGUgbmF2aWdhdGlvbnMgb24gc2FtZSBraWNrIGlzIG5vdCBhbGxvd2VkLmApO3RoaXMucHJvdmlkZXJzLnNldChlLmFjdGlvbkNyZWF0b3IudHlwZSxlLmxhbWJkYSl9fWdldE5hdmlnYXRpb24odCl7Y29uc3QgZT10aGlzLnByb3ZpZGVycy5nZXQodC50eXBlKTtyZXR1cm4gZT9lKHQpOm51bGx9c3RhdGljIHJlZ2lzdGVyUHJvZ3JhbW1hdGljYWxOYXZpZ2F0aW9uKHQpe3JldHVybntuZ01vZHVsZTphRCxwcm92aWRlcnM6W3twcm92aWRlOmlELG11bHRpOiEwLHVzZUZhY3Rvcnk6dH1dfX19ZnVuY3Rpb24gckQodCl7cmV0dXJuIG51bGwhPXQucm91dGVLaW5kfWZ1bmN0aW9uIHNEKHQpe3JldHVybiB1RCh0KS5tYXAoKHQ9Pntjb25zdCBlPXQuc3RhcnRzV2l0aCgiOiIpO3JldHVybiBlP3twYXRoUGFydDp0LGlzUGFyYW06ITAscGFyYW1OYW1lOnQuc2xpY2UoMSl9OntwYXRoUGFydDp0LGlzUGFyYW06ZX19KSl9YUQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGFEKSh1cyhpRCw4KSl9LGFELsm1bW9kPVpvKHt0eXBlOmFEfSksYUQuybVpbmo9Y28oe30pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoYUQsW3t0eXBlOmtfLGFyZ3M6W3t9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W2lEXX1dfV19KSxudWxsKTtjbGFzcyBsRHtjb25zdHJ1Y3Rvcih0KXt0aGlzLnZhbGlkYXRlQ29uZmlnKHQpLHRoaXMucGF0aEZyYWdtZW50cz1zRCh0LnBhdGgpLHRoaXMucGF0aE1hdGNoZXJzPXRoaXMuZ2V0UGF0aE1hdGNoZXJzKHRoaXMucGF0aEZyYWdtZW50cyl9c3RhdGljIGdldE1hdGNoZXIodCl7cmV0dXJuIHJEKHQpP25ldyBjRCh0KTooZnVuY3Rpb24gZSh0KXtyZXR1cm4gdm9pZCAwIT09dC5yZWRpcmVjdGlvblBhdGh9KSh0KT9uZXcgZEQodCk6bmV3IHBEKHQpfXZhbGlkYXRlQ29uZmlnKHtwYXRoOnR9KXtpZighdC5zdGFydHNXaXRoKCIvIikpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYGNvbmZpZy5wYXRoIHNob3VsZCBzdGFydCB3aXRoICcvJy4gJHt0fWApO2xldCBlPTA7Zm9yKDsoZT10LmluZGV4T2YoIjoiLGUrMSkpPj0wOyl7aWYoIi8iIT09dFtlLTFdKXRocm93IG5ldyBSYW5nZUVycm9yKGBjb25maWcucGF0aCBwYXJhbWV0ZXIgc2hvdWxkIGNvbWUgYWZ0ZXIgJy8nLiAke3R9YCk7aWYodm9pZCAwPT09dFtlKzFdfHwiLyI9PT10W2UrMV0pdGhyb3cgbmV3IFJhbmdlRXJyb3IoYGNvbmZpZy5wYXRoIHBhcmFtZXRlciBzaG91bGQgaGF2ZSBub24tZW1wdHkgbmFtZS4gJHt0fWApfX1nZXRQYXRoTWF0Y2hlcnModCl7cmV0dXJuIHQubWFwKCh0PT57Y29uc3R7cGF0aFBhcnQ6ZX09dDtyZXR1cm4gdC5pc1BhcmFtP2U9Pih7aXNQYXJhbVBhdGhQYXJ0OiEwLHBhcnRNYXRjaGVkOiEwLHBhcmFtTmFtZTp0LnBhcmFtTmFtZSxwYXJhbVZhbHVlOmV9KTp0PT4oe2lzUGFyYW1QYXRoUGFydDohMSxwYXJ0TWF0Y2hlZDp0PT09ZX0pfSkpfW1hdGNoKHQpe2xldCBlPXt9O2lmKHRoaXMucGF0aE1hdGNoZXJzLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVybntyZXN1bHQ6ITF9O2xldCBuPTA7Zm9yKGNvbnN0IG8gb2YgdGhpcy5wYXRoTWF0Y2hlcnMpe2NvbnN0IGk9byh0W24rK10pO2lmKCFpLnBhcnRNYXRjaGVkKXJldHVybntyZXN1bHQ6ITF9O2kuaXNQYXJhbVBhdGhQYXJ0JiYoZT1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZSkse1tpLnBhcmFtTmFtZV06aS5wYXJhbVZhbHVlfSkpfXJldHVybntyZXN1bHQ6ITAscGFyYW1zOmUscGF0aFBhcnRzOnQsaXNSZWRpcmVjdGlvbjohMX19bWF0Y2hCeVBhcmFtcyh0KXtyZXR1cm57cmVzdWx0OiEwLHBhcmFtczp0LHBhdGhQYXJ0czp0aGlzLnJlcHJvamVjdFBhdGhCeVBhcmFtcyh0aGlzLnBhdGhGcmFnbWVudHMsdCksaXNSZWRpcmVjdGlvbjohMX19cmVwcm9qZWN0UGF0aEJ5UGFyYW1zKHQsZSl7Y29uc3Qgbj1bXTtmb3IoY29uc3QgbyBvZiB0KWlmKG8uaXNQYXJhbSl7Y29uc3R7cGFyYW1OYW1lOnR9PW87aWYoIWUuaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEZhaWxlZCB0byByZXByb2plY3QgcGFyYW1ldGVyLiAiJHt0fSIgcGFyYW1ldGVyIHNob3VsZCBiZSBwcmVzZW50LmApO24ucHVzaChlW3RdKX1lbHNlIG4ucHVzaChvLnBhdGhQYXJ0KTtyZXR1cm4gbn19Y2xhc3MgY0QgZXh0ZW5kcyBsRHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLmRlZmluaXRpb249dH19Y2xhc3MgZEQgZXh0ZW5kcyBsRHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLmRlZmluaXRpb249dCx0aGlzLnJlZGlyZWN0aW9uRnJhZ21lbnRzPXNEKHQucmVkaXJlY3Rpb25QYXRoKX1tYXRjaCh0KXtjb25zdCBlPXN1cGVyLm1hdGNoKHQpO2lmKCFlLnJlc3VsdClyZXR1cm4gZTtjb25zdCBuPXRoaXMucmVwcm9qZWN0UGF0aEJ5UGFyYW1zKHRoaXMucmVkaXJlY3Rpb25GcmFnbWVudHMsZS5wYXJhbXMpO3JldHVybntyZXN1bHQ6ITAscGFyYW1zOmUucGFyYW1zLHBhdGhQYXJ0czpuLGlzUmVkaXJlY3Rpb246ITB9fX1jbGFzcyBwRCBleHRlbmRzIGxEe2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpLHRoaXMuZGVmaW5pdGlvbj10fW1hdGNoKHQpe2NvbnN0IGU9c3VwZXIubWF0Y2godCk7aWYoIWUucmVzdWx0KXJldHVybiBlO2NvbnN0e3BhdGhQYXJ0czpuLHF1ZXJ5UGFyYW1zOm99PXRoaXMuZGVmaW5pdGlvbi5yZWRpcmVjdG9yKHQpO3JldHVybntyZXN1bHQ6ITAscGFyYW1zOmUucGFyYW1zLHBhdGhQYXJ0czpuLGlzUmVkaXJlY3Rpb246ITAscmVkaXJlY3Rpb25RdWVyeVBhcmFtczpvfX19Y2xhc3MgbUR7Y29uc3RydWN0b3IodCxlPTMpe2lmKHRoaXMubWF4UmVkaXJlY3Rpb249ZSxlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm1heFJlZGlyZWN0aW9uIGhhcyB0byBiZSBub24tbmVnYXRpdmUgbnVtYmVyIik7dGhpcy52YWxpZGF0ZVJvdXRlQ29uZmlncyh0KSx0aGlzLmRlZmF1bHRSb3V0ZUNvbmZpZz1udWxsLHRoaXMucm91dGVLaW5kVG9Db25jcmV0ZUNvbmZpZ01hdGNoZXJzPW5ldyBNYXAsdGhpcy5jb25maWdNYXRjaGVycz1bXTtmb3IoY29uc3QgZSBvZiB0KXtjb25zdCB0PWxELmdldE1hdGNoZXIoZSk7dGhpcy5jb25maWdNYXRjaGVycy5wdXNoKHQpLHQgaW5zdGFuY2VvZiBjRCYmKHRoaXMucm91dGVLaW5kVG9Db25jcmV0ZUNvbmZpZ01hdGNoZXJzLnNldCh0LmRlZmluaXRpb24ucm91dGVLaW5kLHQpLHQuZGVmaW5pdGlvbi5kZWZhdWx0Um91dGUmJih0aGlzLmRlZmF1bHRSb3V0ZUNvbmZpZz10KSl9fXZhbGlkYXRlUm91dGVDb25maWdzKHQpe2NvbnN0IGU9dC5maWx0ZXIockQpLG49ZS5maWx0ZXIoKHQ9PnQuZGVmYXVsdFJvdXRlKSk7aWYobi5sZW5ndGg+MSl7Y29uc3QgdD1uLm1hcCgoKHtwYXRoOnR9KT0+dCkpLmpvaW4oIiwgIik7dGhyb3cgbmV3IFJhbmdlRXJyb3IoYFRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIGRlZmF1bHRSb3V0ZXMuICR7dH1gKX1pZigxPT09bi5sZW5ndGgpe2NvbnN0e3BhdGg6dH09blswXTtpZihCb29sZWFuKHNEKHQpLmZpbmQoKCh7aXNQYXJhbTp0fSk9PnQpKSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEEgZGVmYXVsdFJvdXRlIGNhbm5vdCBoYXZlIGFueSBwYXJhbXMuICR7dH1gKX1jb25zdCBvPW5ldyBTZXQ7Zm9yKGNvbnN0e3JvdXRlS2luZDp0fW9mIGUpe2lmKG8uaGFzKHQpKXRocm93IG5ldyBSYW5nZUVycm9yKGBNdWx0aXBsZSByb3V0ZSBjb25maWd1cmF0aW9uIGZvciBraW5kOiAke3R9LiBDb25maWd1cmF0aW9ucyBzaG91bGQgaGF2ZSB1bmlxdWUgcm91dGVLaW5kc2ApO28uYWRkKHQpfX1tYXRjaCh0KXt2YXIgZTtpZighdC5wYXRobmFtZS5zdGFydHNXaXRoKCIvIikpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ05hdmlnYXRpb24gaGFzIHRvIG1hZGUgd2l0aCBwYXRobmFtZSB0aGF0IHN0YXJ0cyB3aXRoICIvIicpO2xldCBuLG89dUQodC5wYXRobmFtZSksaT0wLGE9ITE7Zm9yKDs7KXtsZXQgdD0hMTtmb3IoY29uc3QgZSBvZiB0aGlzLmNvbmZpZ01hdGNoZXJzKXtjb25zdCBpPWUubWF0Y2gobyk7aWYoaS5yZXN1bHQpe3Q9ITA7Y29uc3R7cGFyYW1zOnIscGF0aFBhcnRzOnMsaXNSZWRpcmVjdGlvbjpsfT1pO2lmKGwpe289cyxhPSEwLG49aS5yZWRpcmVjdGlvblF1ZXJ5UGFyYW1zO2JyZWFrfWlmKCEoZSBpbnN0YW5jZW9mIGNEKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiTm8gY29uY3JldGUgcm91dGUgZGVmaW5pdGlvbiBgbWF0Y2hgIHJldHVybiByZWRpcmVjdGlvbiIpO2NvbnN0e2RlZmluaXRpb246Y309ZSxkPXtyb3V0ZUtpbmQ6Yy5yb3V0ZUtpbmQscGFyYW1zOnIscGF0aG5hbWU6ZkQocyksZGVlcExpbmtQcm92aWRlcjpjLmRlZXBMaW5rUHJvdmlkZXJ8fG51bGx9O3JldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZCksYT97b3JpZ2luYXRlRnJvbVJlZGlyZWN0aW9uOiEwLHJlZGlyZWN0aW9uT25seVF1ZXJ5UGFyYW1zOm59OntvcmlnaW5hdGVGcm9tUmVkaXJlY3Rpb246ITF9KX19aWYoYSYmaSsrLCF0fHxpPnRoaXMubWF4UmVkaXJlY3Rpb24pYnJlYWt9aWYoaT50aGlzLm1heFJlZGlyZWN0aW9uKXRocm93IG5ldyBFcnJvcihgUG90ZW50aWFsIHJlZGlyZWN0aW9uIGxvb3AgKHJlZGlyZWN0aW5nIG1vcmUgdGhhbiAke3RoaXMubWF4UmVkaXJlY3Rpb259IHRpbWVzLiBQbGVhc2UgZG8gbm90IGhhdmUgY3ljbGVzIGluIHRoZSByb3V0ZXMuYCk7aWYodGhpcy5kZWZhdWx0Um91dGVDb25maWcpe2NvbnN0e2RlZmluaXRpb246dH09dGhpcy5kZWZhdWx0Um91dGVDb25maWc7cmV0dXJue3JvdXRlS2luZDp0LnJvdXRlS2luZCxkZWVwTGlua1Byb3ZpZGVyOm51bGwhPT0oZT10LmRlZXBMaW5rUHJvdmlkZXIpJiZ2b2lkIDAhPT1lP2U6bnVsbCxwYXRobmFtZTp0LnBhdGgscGFyYW1zOnt9LG9yaWdpbmF0ZUZyb21SZWRpcmVjdGlvbjphfX1yZXR1cm4gbnVsbH1tYXRjaEJ5Um91dGVLaW5kKHQsZSl7Y29uc3Qgbj10aGlzLnJvdXRlS2luZFRvQ29uY3JldGVDb25maWdNYXRjaGVycy5nZXQodCk7aWYoIW4pdGhyb3cgbmV3IFJhbmdlRXJyb3IoYFJlcXVpcmVzIGNvbmZpZ3VyYXRpb24gZm9yIHJvdXRlS2luZDogJHt0fWApO3JldHVybntyb3V0ZUtpbmQ6dCxwYXJhbXM6ZSxwYXRobmFtZTpmRChuLm1hdGNoQnlQYXJhbXMoZSkucGF0aFBhcnRzKSxkZWVwTGlua1Byb3ZpZGVyOm4uZGVmaW5pdGlvbi5kZWVwTGlua1Byb3ZpZGVyfHxudWxsLG9yaWdpbmF0ZUZyb21SZWRpcmVjdGlvbjohMX19fWZ1bmN0aW9uIHVEKHQpe3JldHVybiB0LnNwbGl0KCIvIikuc2xpY2UoMSl9ZnVuY3Rpb24gZkQodCl7cmV0dXJuIi8iK3Quam9pbigiLyIpfWNvbnN0IGdEPW5ldyBOcigiW0FwcCBSb3V0aW5nXSBSb3V0ZSBDb25maWciKTtjbGFzcyBoRHtjb25zdHJ1Y3Rvcih0KXtpZih0aGlzLnJvdXRlQ29uZmlncz1udWxsLHRoaXMucm91dGVLaW5kVG9OZ0NvbXBvbmVudD1uZXcgTWFwLCF0KXJldHVybjtjb25zdCBlPVtdO2Zvcihjb25zdCBuIG9mIHQpZm9yKGNvbnN0IHQgb2YgbillLnB1c2godCk7dGhpcy5yb3V0ZUNvbmZpZ3M9bmV3IG1EKGUpLGUuZm9yRWFjaCgodD0+e3JEKHQpJiZ0aGlzLnJvdXRlS2luZFRvTmdDb21wb25lbnQuc2V0KHQucm91dGVLaW5kLHQubmdDb21wb25lbnQpfSkpfWdldFJvdXRlQ29uZmlncygpe3JldHVybiB0aGlzLnJvdXRlQ29uZmlnc31nZXROZ0NvbXBvbmVudEJ5Um91dGVLaW5kKHQpe3JldHVybiB0aGlzLnJvdXRlS2luZFRvTmdDb21wb25lbnQuZ2V0KHQpfHxudWxsfXN0YXRpYyByZWdpc3RlclJvdXRlcyh0KXtyZXR1cm57bmdNb2R1bGU6aEQscHJvdmlkZXJzOlt7cHJvdmlkZTpnRCxtdWx0aTohMCx1c2VGYWN0b3J5OnR9XX19fWhELsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxoRCkodXMoZ0QsOCkpfSxoRC7JtW1vZD1abyh7dHlwZTpoRH0pLGhELsm1aW5qPWNvKHt9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGhELFt7dHlwZTprXyxhcmdzOlt7fV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltnRF19XX1dfSksbnVsbCk7Y29uc3QgYkQ9ImFwcF9yb3V0aW5nIix5RD1GayhiRCksX0Q9emsoeUQsKHQ9PnQuYWN0aXZlUm91dGUpKSxDRD16ayh5RCwodD0+dC5uZXh0Um91dGUpKSxNRD16ayhfRCwodD0+dD90LnJvdXRlS2luZDpqUy5OT1RfU0VUKSksdkQ9emsoX0QsKHQ9PnQ/dC5wYXJhbXM6e30pKSx4RD16ayhNRCx2RCwoKHQsZSk9PkdTKHQsZSkpKSxPRD16ayhNRCx2RCwoKHQsZSk9PllTKHQsZSkpKSxQRD16ayhNRCx2RCwoKHQsZSk9PntpZih0IT09alMuQ09NUEFSRV9FWFBFUklNRU5UKXJldHVybnt9O2NvbnN0IG49KGZ1bmN0aW9uIG8odCl7Y29uc3QgZT1uZXcgTWFwLG49V1ModC5leHBlcmltZW50SWRzKTtmb3IoY29uc3R7aWQ6dCxuYW1lOm99b2YgbillLnNldCh0LG8pO3JldHVybiBlfSkoZSk7cmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhuLmVudHJpZXMoKSl9KSksd0Q9V3coIltBcHAgUm91dGluZ10gRWZmZWN0cyBJbml0Iik7Y2xhc3Mga0R7Y29uc3RydWN0b3IodCxlLG4sbyxpLGEpe3RoaXMuYWN0aW9ucyQ9dCx0aGlzLnN0b3JlPWUsdGhpcy5sb2NhdGlvbj1uLHRoaXMucHJvZ3JhbW1hdGljYWxOYXZNb2R1bGU9aSx0aGlzLmFwcFJvb3RQcm92aWRlcj1hLHRoaXMub25OYXZpZ2F0aW9uUmVxdWVzdGVkJD10aGlzLmFjdGlvbnMkLnBpcGUoeFMoZUQpLGh0KCh0PT57Y29uc3QgZT10LnBhdGhuYW1lLnN0YXJ0c1dpdGgoIi8iKT90aGlzLmFwcFJvb3RQcm92aWRlci5nZXRBYnNQYXRobmFtZVdpdGhBcHBSb290KHQucGF0aG5hbWUpOnRoaXMubG9jYXRpb24uZ2V0UmVzb2x2ZWRQYXRoKHQucGF0aG5hbWUpO3JldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3BhdGhuYW1lOmV9KX0pKSksdGhpcy5vbkluaXQkPXRoaXMuYWN0aW9ucyQucGlwZSh4Uyh3RCkpLnBpcGUoYmUoMCksaHQoKCgpPT4oe3BhdGhuYW1lOnRoaXMubG9jYXRpb24uZ2V0UGF0aCgpLHF1ZXJ5UGFyYW1zOnRoaXMubG9jYXRpb24uZ2V0U2VhcmNoKCkscmVwbGFjZVN0YXRlOiEwLGJyb3dzZXJJbml0aWF0ZWQ6ITB9KSkpKSx0aGlzLnVzZXJJbml0TmF2Um91dGUkPVd0KHRoaXMub25OYXZpZ2F0aW9uUmVxdWVzdGVkJCx0aGlzLm9uSW5pdCQsdGhpcy5sb2NhdGlvbi5vblBvcFN0YXRlKCkucGlwZShodCgodD0+KHtwYXRobmFtZTp0LnBhdGhuYW1lLHJlcGxhY2VTdGF0ZTp0LnJlcGxhY2VTdGF0ZSxicm93c2VySW5pdGlhdGVkOiEwfSkpKSkpLnBpcGUoaHQoKHQ9PntpZighdC5wYXRobmFtZS5zdGFydHNXaXRoKCIvIikpdGhyb3cgbmV3IEVycm9yKGBbQXBwIHJvdXRpbmddIHBhdGhuYW1lIG11c3Qgc3RhcnQgd2l0aCAnLycuIEdvdDogJHt0LnBhdGhuYW1lfWApO3JldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3BhdGhuYW1lOnRoaXMuYXBwUm9vdFByb3ZpZGVyLmdldEFwcFJvb3RsZXNzUGF0aG5hbWUodC5wYXRobmFtZSl9KX0pKSxodCgodD0+KHtyb3V0ZU1hdGNoOnRoaXMucm91dGVDb25maWdzP3RoaXMucm91dGVDb25maWdzLm1hdGNoKHQpOm51bGwsb3B0aW9uczp7cmVwbGFjZVN0YXRlOnQucmVwbGFjZVN0YXRlLGJyb3dzZXJJbml0aWF0ZWQ6dC5icm93c2VySW5pdGlhdGVkfX0pKSkpLHRoaXMucHJvZ3JhbW10aWNhbE5hdlJvdXRlJD10aGlzLmFjdGlvbnMkLnBpcGUoaHQoKHQ9PnRoaXMucHJvZ3JhbW1hdGljYWxOYXZNb2R1bGUuZ2V0TmF2aWdhdGlvbih0KSkpLEd0KCh0PT5udWxsIT09dCkpLGh0KCh0PT57Y29uc3QgZT10LG49ZS5yb3V0ZUtpbmQ7bGV0IG87c3dpdGNoKGUucm91dGVLaW5kKXtjYXNlIGpTLkNPTVBBUkVfRVhQRVJJTUVOVDpvPXtleHBlcmltZW50SWRzOihpPWUucm91dGVQYXJhbXMuYWxpYXNBbmRFeHBlcmltZW50SWRzLGkubWFwKCgoe2FsaWFzOnQsaWQ6ZX0pPT5gJHt0fToke2V9YCkpLmpvaW4oIiwiKSl9O2JyZWFrO2RlZmF1bHQ6bz1lLnJvdXRlUGFyYW1zfXZhciBpO3JldHVybntyb3V0ZUtpbmQ6bixyb3V0ZVBhcmFtczpvfX0pKSxodCgoKHtyb3V0ZUtpbmQ6dCxyb3V0ZVBhcmFtczplfSk9Pih7cm91dGVNYXRjaDp0aGlzLnJvdXRlQ29uZmlncz90aGlzLnJvdXRlQ29uZmlncy5tYXRjaEJ5Um91dGVLaW5kKHQsZSk6bnVsbCxvcHRpb25zOntyZXBsYWNlU3RhdGU6ITEsYnJvd3NlckluaXRpYXRlZDohMX19KSkpKSx0aGlzLnZhbGlkYXRlZFJvdXRlJD1XdCh0aGlzLnVzZXJJbml0TmF2Um91dGUkLHRoaXMucHJvZ3JhbW10aWNhbE5hdlJvdXRlJCkucGlwZShHdCgoKHtyb3V0ZU1hdGNoOnR9KT0+Qm9vbGVhbih0KSkpLGh0KCh0PT4oe3JvdXRlTWF0Y2g6dC5yb3V0ZU1hdGNoLG9wdGlvbnM6dC5vcHRpb25zfSkpKSksdGhpcy5uYXZpZ2F0ZSQ9Z1MoKCgpPT50aGlzLnZhbGlkYXRlZFJvdXRlJC5waXBlKF9uKCgoe3JvdXRlTWF0Y2g6dCxvcHRpb25zOmV9KT0+e2lmKGUuYnJvd3NlckluaXRpYXRlZCYmdC5kZWVwTGlua1Byb3ZpZGVyKXtjb25zdCBlPXQub3JpZ2luYXRlRnJvbVJlZGlyZWN0aW9uJiZ0LnJlZGlyZWN0aW9uT25seVF1ZXJ5UGFyYW1zP3QucmVkaXJlY3Rpb25Pbmx5UXVlcnlQYXJhbXM6dGhpcy5sb2NhdGlvbi5nZXRTZWFyY2goKSxuPXQuZGVlcExpbmtQcm92aWRlci5kZXNlcmlhbGl6ZVF1ZXJ5UGFyYW1zKGUpO3RoaXMuc3RvcmUuZGlzcGF0Y2godEQoe3JvdXRlS2luZDp0LnJvdXRlS2luZCxwYXJ0aWFsU3RhdGU6bn0pKX19KSksZG4oKCh7cm91dGVNYXRjaDp0LG9wdGlvbnM6ZX0pPT57dmFyIG47Y29uc3Qgbz17cmVwbGFjZVN0YXRlOm51bGwhPT0obj1lLnJlcGxhY2VTdGF0ZSkmJnZvaWQgMCE9PW4mJm59LGk9Wih7cm91dGVLaW5kOnQucm91dGVLaW5kLHBhcmFtczp0LnBhcmFtcyxwYXRobmFtZTp0LnBhdGhuYW1lLHF1ZXJ5UGFyYW1zOltdLG5hdmlnYXRpb25PcHRpb25zOm99KTtyZXR1cm4gbnVsbD09PXQuZGVlcExpbmtQcm92aWRlcj9pOnQuZGVlcExpbmtQcm92aWRlci5zZXJpYWxpemVTdGF0ZVRvUXVlcnlQYXJhbXModGhpcy5zdG9yZSkucGlwZShodCgoKGUsbik9Pih7cm91dGVLaW5kOnQucm91dGVLaW5kLHBhcmFtczp0LnBhcmFtcyxwYXRobmFtZTp0LnBhdGhuYW1lLHF1ZXJ5UGFyYW1zOmUsbmF2aWdhdGlvbk9wdGlvbnM6MD09PW4/bzpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sbykse3JlcGxhY2VTdGF0ZTohMH0pfSkpKSl9KSksX24oKHQ9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKG5EKHthZnRlcjp0fSkpfSkpLGRlKDApKS5waXBlKGtuKHRoaXMuc3RvcmUuc2VsZWN0KF9EKSksaHQoKChbdCxlXSk9Pih7cHJlc2VydmVIYXNoOm51bGw9PT1lfHxudWxsPT09dHx8WVMoZS5yb3V0ZUtpbmQsZS5wYXJhbXMpPT09WVModC5yb3V0ZUtpbmQsdC5wYXJhbXMpLHJvdXRlOnR9KSkpLF9uKCgoe3ByZXNlcnZlSGFzaDp0LHJvdXRlOmV9KT0+eyEoZnVuY3Rpb24gbih0LGUpe3JldHVybiB0LnBhdGhuYW1lPT09ZS5wYXRobmFtZSYmdC5xdWVyeVBhcmFtcy5sZW5ndGg9PT1lLnF1ZXJ5UGFyYW1zLmxlbmd0aCYmdC5xdWVyeVBhcmFtcy5ldmVyeSgoKHQsbik9Pntjb25zdCBvPWUucXVlcnlQYXJhbXNbbl07cmV0dXJuIHQua2V5PT09by5rZXkmJnQudmFsdWU9PT1vLnZhbHVlfSkpfSkoZSx7cGF0aG5hbWU6dGhpcy5hcHBSb290UHJvdmlkZXIuZ2V0QXBwUm9vdGxlc3NQYXRobmFtZSh0aGlzLmxvY2F0aW9uLmdldFBhdGgoKSkscXVlcnlQYXJhbXM6dGhpcy5sb2NhdGlvbi5nZXRTZWFyY2goKX0pJiYoZS5uYXZpZ2F0aW9uT3B0aW9ucy5yZXBsYWNlU3RhdGU/dGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUodGhpcy5hcHBSb290UHJvdmlkZXIuZ2V0QWJzUGF0aG5hbWVXaXRoQXBwUm9vdCh0aGlzLmxvY2F0aW9uLmdldEZ1bGxQYXRoRnJvbVJvdXRlT3JOYXYoZSx0KSkpOnRoaXMubG9jYXRpb24ucHVzaFN0YXRlKHRoaXMuYXBwUm9vdFByb3ZpZGVyLmdldEFic1BhdGhuYW1lV2l0aEFwcFJvb3QodGhpcy5sb2NhdGlvbi5nZXRGdWxsUGF0aEZyb21Sb3V0ZU9yTmF2KGUsdCkpKSl9KSkpLnBpcGUoa24odGhpcy5zdG9yZS5zZWxlY3QoX0QpKSxodCgoKFt7cm91dGU6dH0sZV0pPT5vRCh7YmVmb3JlOmUsYWZ0ZXI6dH0pKSkpKSksdGhpcy5yb3V0ZUNvbmZpZ3M9by5nZXRSb3V0ZUNvbmZpZ3MoKX1uZ3J4T25Jbml0RWZmZWN0cygpe3JldHVybiB3RCgpfX1rRC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8a0QpKHVzKHZTKSx1cyhFayksdXMoWlMpLHVzKGhEKSx1cyhhRCksdXMoWFMpKX0sa0QuybVwcm92PWxvKHt0b2tlbjprRCxmYWN0b3J5OmtELsm1ZmFjfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihrRCxbe3R5cGU6Sm19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6dlN9LHt0eXBlOkVrfSx7dHlwZTpaU30se3R5cGU6aER9LHt0eXBlOmFEfSx7dHlwZTpYU31dfSksbnVsbCk7Y29uc3QgU0Q9bVMoe2FjdGl2ZVJvdXRlOm51bGwsbmV4dFJvdXRlOm51bGx9LHBTKG5ELCgodCx7YWZ0ZXI6ZX0pPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse25leHRSb3V0ZTplfSkpKSxwUyhvRCwoKHQse2FmdGVyOmV9KT0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHthY3RpdmVSb3V0ZTplLG5leHRSb3V0ZTpudWxsfSkpKSk7ZnVuY3Rpb24gREQodCxlKXtyZXR1cm4gU0QodCxlKX1jbGFzcyBFRHt9RUQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEVEKX0sRUQuybVtb2Q9Wm8oe3R5cGU6RUR9KSxFRC7JtWluaj1jbyh7cHJvdmlkZXJzOlthRF0saW1wb3J0czpbW2hELGlTLmZvckZlYXR1cmUoYkQsREQpLExTLmZvckZlYXR1cmUoW2tEXSksJFMsUVNdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oRUQse2ltcG9ydHM6W2hELG9TLEZTLCRTLFFTXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoRUQsW3t0eXBlOmtfLGFyZ3M6W3tpbXBvcnRzOltoRCxpUy5mb3JGZWF0dXJlKGJELEREKSxMUy5mb3JGZWF0dXJlKFtrRF0pLCRTLFFTXSxwcm92aWRlcnM6W2FEXX1dfV0sbnVsbCxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZSBBbmd1bGFyIHYxMS4yLjE0CiAgICAgKiAoYykgMjAxMC0yMDIxIEdvb2dsZSBMTEMuIGh0dHBzOi8vYW5ndWxhci5pby8KICAgICAqIExpY2Vuc2U6IE1JVAogICAgICovCmNsYXNzIEFEe31jbGFzcyBSRHt9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NsYXNzIFREe2NvbnN0cnVjdG9yKHQpe3RoaXMubm9ybWFsaXplZE5hbWVzPW5ldyBNYXAsdGhpcy5sYXp5VXBkYXRlPW51bGwsdD90aGlzLmxhenlJbml0PSJzdHJpbmciPT10eXBlb2YgdD8oKT0+e3RoaXMuaGVhZGVycz1uZXcgTWFwLHQuc3BsaXQoIlxuIikuZm9yRWFjaCgodD0+e2NvbnN0IGU9dC5pbmRleE9mKCI6Iik7aWYoZT4wKXtjb25zdCBuPXQuc2xpY2UoMCxlKSxvPW4udG9Mb3dlckNhc2UoKSxpPXQuc2xpY2UoZSsxKS50cmltKCk7dGhpcy5tYXliZVNldE5vcm1hbGl6ZWROYW1lKG4sbyksdGhpcy5oZWFkZXJzLmhhcyhvKT90aGlzLmhlYWRlcnMuZ2V0KG8pLnB1c2goaSk6dGhpcy5oZWFkZXJzLnNldChvLFtpXSl9fSkpfTooKT0+e3RoaXMuaGVhZGVycz1uZXcgTWFwLE9iamVjdC5rZXlzKHQpLmZvckVhY2goKGU9PntsZXQgbj10W2VdO2NvbnN0IG89ZS50b0xvd2VyQ2FzZSgpOyJzdHJpbmciPT10eXBlb2YgbiYmKG49W25dKSxuLmxlbmd0aD4wJiYodGhpcy5oZWFkZXJzLnNldChvLG4pLHRoaXMubWF5YmVTZXROb3JtYWxpemVkTmFtZShlLG8pKX0pKX06dGhpcy5oZWFkZXJzPW5ldyBNYXB9aGFzKHQpe3JldHVybiB0aGlzLmluaXQoKSx0aGlzLmhlYWRlcnMuaGFzKHQudG9Mb3dlckNhc2UoKSl9Z2V0KHQpe3RoaXMuaW5pdCgpO2NvbnN0IGU9dGhpcy5oZWFkZXJzLmdldCh0LnRvTG93ZXJDYXNlKCkpO3JldHVybiBlJiZlLmxlbmd0aD4wP2VbMF06bnVsbH1rZXlzKCl7cmV0dXJuIHRoaXMuaW5pdCgpLEFycmF5LmZyb20odGhpcy5ub3JtYWxpemVkTmFtZXMudmFsdWVzKCkpfWdldEFsbCh0KXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5oZWFkZXJzLmdldCh0LnRvTG93ZXJDYXNlKCkpfHxudWxsfWFwcGVuZCh0LGUpe3JldHVybiB0aGlzLmNsb25lKHtuYW1lOnQsdmFsdWU6ZSxvcDoiYSJ9KX1zZXQodCxlKXtyZXR1cm4gdGhpcy5jbG9uZSh7bmFtZTp0LHZhbHVlOmUsb3A6InMifSl9ZGVsZXRlKHQsZSl7cmV0dXJuIHRoaXMuY2xvbmUoe25hbWU6dCx2YWx1ZTplLG9wOiJkIn0pfW1heWJlU2V0Tm9ybWFsaXplZE5hbWUodCxlKXt0aGlzLm5vcm1hbGl6ZWROYW1lcy5oYXMoZSl8fHRoaXMubm9ybWFsaXplZE5hbWVzLnNldChlLHQpfWluaXQoKXt0aGlzLmxhenlJbml0JiYodGhpcy5sYXp5SW5pdCBpbnN0YW5jZW9mIFREP3RoaXMuY29weUZyb20odGhpcy5sYXp5SW5pdCk6dGhpcy5sYXp5SW5pdCgpLHRoaXMubGF6eUluaXQ9bnVsbCx0aGlzLmxhenlVcGRhdGUmJih0aGlzLmxhenlVcGRhdGUuZm9yRWFjaCgodD0+dGhpcy5hcHBseVVwZGF0ZSh0KSkpLHRoaXMubGF6eVVwZGF0ZT1udWxsKSl9Y29weUZyb20odCl7dC5pbml0KCksQXJyYXkuZnJvbSh0LmhlYWRlcnMua2V5cygpKS5mb3JFYWNoKChlPT57dGhpcy5oZWFkZXJzLnNldChlLHQuaGVhZGVycy5nZXQoZSkpLHRoaXMubm9ybWFsaXplZE5hbWVzLnNldChlLHQubm9ybWFsaXplZE5hbWVzLmdldChlKSl9KSl9Y2xvbmUodCl7Y29uc3QgZT1uZXcgVEQ7cmV0dXJuIGUubGF6eUluaXQ9dGhpcy5sYXp5SW5pdCYmdGhpcy5sYXp5SW5pdCBpbnN0YW5jZW9mIFREP3RoaXMubGF6eUluaXQ6dGhpcyxlLmxhenlVcGRhdGU9KHRoaXMubGF6eVVwZGF0ZXx8W10pLmNvbmNhdChbdF0pLGV9YXBwbHlVcGRhdGUodCl7Y29uc3QgZT10Lm5hbWUudG9Mb3dlckNhc2UoKTtzd2l0Y2godC5vcCl7Y2FzZSJhIjpjYXNlInMiOmxldCBuPXQudmFsdWU7aWYoInN0cmluZyI9PXR5cGVvZiBuJiYobj1bbl0pLDA9PT1uLmxlbmd0aClyZXR1cm47dGhpcy5tYXliZVNldE5vcm1hbGl6ZWROYW1lKHQubmFtZSxlKTtjb25zdCBvPSgiYSI9PT10Lm9wP3RoaXMuaGVhZGVycy5nZXQoZSk6dm9pZCAwKXx8W107by5wdXNoKC4uLm4pLHRoaXMuaGVhZGVycy5zZXQoZSxvKTticmVhaztjYXNlImQiOmNvbnN0IGk9dC52YWx1ZTtpZihpKXtsZXQgdD10aGlzLmhlYWRlcnMuZ2V0KGUpO2lmKCF0KXJldHVybjt0PXQuZmlsdGVyKCh0PT4tMT09PWkuaW5kZXhPZih0KSkpLDA9PT10Lmxlbmd0aD8odGhpcy5oZWFkZXJzLmRlbGV0ZShlKSx0aGlzLm5vcm1hbGl6ZWROYW1lcy5kZWxldGUoZSkpOnRoaXMuaGVhZGVycy5zZXQoZSx0KX1lbHNlIHRoaXMuaGVhZGVycy5kZWxldGUoZSksdGhpcy5ub3JtYWxpemVkTmFtZXMuZGVsZXRlKGUpfX1mb3JFYWNoKHQpe3RoaXMuaW5pdCgpLEFycmF5LmZyb20odGhpcy5ub3JtYWxpemVkTmFtZXMua2V5cygpKS5mb3JFYWNoKChlPT50KHRoaXMubm9ybWFsaXplZE5hbWVzLmdldChlKSx0aGlzLmhlYWRlcnMuZ2V0KGUpKSkpfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY2xhc3MgTkR7ZW5jb2RlS2V5KHQpe3JldHVybiBJRCh0KX1lbmNvZGVWYWx1ZSh0KXtyZXR1cm4gSUQodCl9ZGVjb2RlS2V5KHQpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQodCl9ZGVjb2RlVmFsdWUodCl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudCh0KX19ZnVuY3Rpb24gSUQodCl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh0KS5yZXBsYWNlKC8lNDAvZ2ksIkAiKS5yZXBsYWNlKC8lM0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjQvZ2ksIiQiKS5yZXBsYWNlKC8lMkMvZ2ksIiwiKS5yZXBsYWNlKC8lM0IvZ2ksIjsiKS5yZXBsYWNlKC8lMkIvZ2ksIisiKS5yZXBsYWNlKC8lM0QvZ2ksIj0iKS5yZXBsYWNlKC8lM0YvZ2ksIj8iKS5yZXBsYWNlKC8lMkYvZ2ksIi8iKX1jbGFzcyB6RHtjb25zdHJ1Y3Rvcih0PXt9KXtpZih0aGlzLnVwZGF0ZXM9bnVsbCx0aGlzLmNsb25lRnJvbT1udWxsLHRoaXMuZW5jb2Rlcj10LmVuY29kZXJ8fG5ldyBORCx0LmZyb21TdHJpbmcpe2lmKHQuZnJvbU9iamVjdCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzcGVjaWZ5IGJvdGggZnJvbVN0cmluZyBhbmQgZnJvbU9iamVjdC4iKTt0aGlzLm1hcD0oZnVuY3Rpb24gZSh0LG4pe2NvbnN0IG89bmV3IE1hcDtyZXR1cm4gdC5sZW5ndGg+MCYmdC5yZXBsYWNlKC9eXD8vLCIiKS5zcGxpdCgiJiIpLmZvckVhY2goKHQ9Pntjb25zdCBlPXQuaW5kZXhPZigiPSIpLFtpLGFdPS0xPT1lP1tuLmRlY29kZUtleSh0KSwiIl06W24uZGVjb2RlS2V5KHQuc2xpY2UoMCxlKSksbi5kZWNvZGVWYWx1ZSh0LnNsaWNlKGUrMSkpXSxyPW8uZ2V0KGkpfHxbXTtyLnB1c2goYSksby5zZXQoaSxyKX0pKSxvfSkodC5mcm9tU3RyaW5nLHRoaXMuZW5jb2Rlcil9ZWxzZSB0LmZyb21PYmplY3Q/KHRoaXMubWFwPW5ldyBNYXAsT2JqZWN0LmtleXModC5mcm9tT2JqZWN0KS5mb3JFYWNoKChlPT57Y29uc3Qgbj10LmZyb21PYmplY3RbZV07dGhpcy5tYXAuc2V0KGUsQXJyYXkuaXNBcnJheShuKT9uOltuXSl9KSkpOnRoaXMubWFwPW51bGx9aGFzKHQpe3JldHVybiB0aGlzLmluaXQoKSx0aGlzLm1hcC5oYXModCl9Z2V0KHQpe3RoaXMuaW5pdCgpO2NvbnN0IGU9dGhpcy5tYXAuZ2V0KHQpO3JldHVybiBlP2VbMF06bnVsbH1nZXRBbGwodCl7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXMubWFwLmdldCh0KXx8bnVsbH1rZXlzKCl7cmV0dXJuIHRoaXMuaW5pdCgpLEFycmF5LmZyb20odGhpcy5tYXAua2V5cygpKX1hcHBlbmQodCxlKXtyZXR1cm4gdGhpcy5jbG9uZSh7cGFyYW06dCx2YWx1ZTplLG9wOiJhIn0pfWFwcGVuZEFsbCh0KXtjb25zdCBlPVtdO3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChuPT57Y29uc3Qgbz10W25dO0FycmF5LmlzQXJyYXkobyk/by5mb3JFYWNoKCh0PT57ZS5wdXNoKHtwYXJhbTpuLHZhbHVlOnQsb3A6ImEifSl9KSk6ZS5wdXNoKHtwYXJhbTpuLHZhbHVlOm8sb3A6ImEifSl9KSksdGhpcy5jbG9uZShlKX1zZXQodCxlKXtyZXR1cm4gdGhpcy5jbG9uZSh7cGFyYW06dCx2YWx1ZTplLG9wOiJzIn0pfWRlbGV0ZSh0LGUpe3JldHVybiB0aGlzLmNsb25lKHtwYXJhbTp0LHZhbHVlOmUsb3A6ImQifSl9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5rZXlzKCkubWFwKCh0PT57Y29uc3QgZT10aGlzLmVuY29kZXIuZW5jb2RlS2V5KHQpO3JldHVybiB0aGlzLm1hcC5nZXQodCkubWFwKCh0PT5lKyI9Iit0aGlzLmVuY29kZXIuZW5jb2RlVmFsdWUodCkpKS5qb2luKCImIil9KSkuZmlsdGVyKCh0PT4iIiE9PXQpKS5qb2luKCImIil9Y2xvbmUodCl7Y29uc3QgZT1uZXcgekQoe2VuY29kZXI6dGhpcy5lbmNvZGVyfSk7cmV0dXJuIGUuY2xvbmVGcm9tPXRoaXMuY2xvbmVGcm9tfHx0aGlzLGUudXBkYXRlcz0odGhpcy51cGRhdGVzfHxbXSkuY29uY2F0KHQpLGV9aW5pdCgpe251bGw9PT10aGlzLm1hcCYmKHRoaXMubWFwPW5ldyBNYXApLG51bGwhPT10aGlzLmNsb25lRnJvbSYmKHRoaXMuY2xvbmVGcm9tLmluaXQoKSx0aGlzLmNsb25lRnJvbS5rZXlzKCkuZm9yRWFjaCgodD0+dGhpcy5tYXAuc2V0KHQsdGhpcy5jbG9uZUZyb20ubWFwLmdldCh0KSkpKSx0aGlzLnVwZGF0ZXMuZm9yRWFjaCgodD0+e3N3aXRjaCh0Lm9wKXtjYXNlImEiOmNhc2UicyI6Y29uc3QgZT0oImEiPT09dC5vcD90aGlzLm1hcC5nZXQodC5wYXJhbSk6dm9pZCAwKXx8W107ZS5wdXNoKHQudmFsdWUpLHRoaXMubWFwLnNldCh0LnBhcmFtLGUpO2JyZWFrO2Nhc2UiZCI6aWYodm9pZCAwPT09dC52YWx1ZSl7dGhpcy5tYXAuZGVsZXRlKHQucGFyYW0pO2JyZWFrfXtsZXQgZT10aGlzLm1hcC5nZXQodC5wYXJhbSl8fFtdO2NvbnN0IG49ZS5pbmRleE9mKHQudmFsdWUpOy0xIT09biYmZS5zcGxpY2UobiwxKSxlLmxlbmd0aD4wP3RoaXMubWFwLnNldCh0LnBhcmFtLGUpOnRoaXMubWFwLmRlbGV0ZSh0LnBhcmFtKX19fSkpLHRoaXMuY2xvbmVGcm9tPXRoaXMudXBkYXRlcz1udWxsKX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIEhEKHQpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJnQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcn1mdW5jdGlvbiBGRCh0KXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIEJsb2ImJnQgaW5zdGFuY2VvZiBCbG9ifWZ1bmN0aW9uIExEKHQpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgRm9ybURhdGEmJnQgaW5zdGFuY2VvZiBGb3JtRGF0YX1jbGFzcyBCRHtjb25zdHJ1Y3Rvcih0LGUsbixvKXtsZXQgaTtpZih0aGlzLnVybD1lLHRoaXMuYm9keT1udWxsLHRoaXMucmVwb3J0UHJvZ3Jlc3M9ITEsdGhpcy53aXRoQ3JlZGVudGlhbHM9ITEsdGhpcy5yZXNwb25zZVR5cGU9Impzb24iLHRoaXMubWV0aG9kPXQudG9VcHBlckNhc2UoKSwoZnVuY3Rpb24gYSh0KXtzd2l0Y2godCl7Y2FzZSJERUxFVEUiOmNhc2UiR0VUIjpjYXNlIkhFQUQiOmNhc2UiT1BUSU9OUyI6Y2FzZSJKU09OUCI6cmV0dXJuITE7ZGVmYXVsdDpyZXR1cm4hMH19KSh0aGlzLm1ldGhvZCl8fG8/KHRoaXMuYm9keT12b2lkIDAhPT1uP246bnVsbCxpPW8pOmk9bixpJiYodGhpcy5yZXBvcnRQcm9ncmVzcz0hIWkucmVwb3J0UHJvZ3Jlc3MsdGhpcy53aXRoQ3JlZGVudGlhbHM9ISFpLndpdGhDcmVkZW50aWFscyxpLnJlc3BvbnNlVHlwZSYmKHRoaXMucmVzcG9uc2VUeXBlPWkucmVzcG9uc2VUeXBlKSxpLmhlYWRlcnMmJih0aGlzLmhlYWRlcnM9aS5oZWFkZXJzKSxpLnBhcmFtcyYmKHRoaXMucGFyYW1zPWkucGFyYW1zKSksdGhpcy5oZWFkZXJzfHwodGhpcy5oZWFkZXJzPW5ldyBURCksdGhpcy5wYXJhbXMpe2NvbnN0IHQ9dGhpcy5wYXJhbXMudG9TdHJpbmcoKTtpZigwPT09dC5sZW5ndGgpdGhpcy51cmxXaXRoUGFyYW1zPWU7ZWxzZXtjb25zdCBuPWUuaW5kZXhPZigiPyIpO3RoaXMudXJsV2l0aFBhcmFtcz1lKygtMT09PW4/Ij8iOm48ZS5sZW5ndGgtMT8iJiI6IiIpK3R9fWVsc2UgdGhpcy5wYXJhbXM9bmV3IHpELHRoaXMudXJsV2l0aFBhcmFtcz1lfXNlcmlhbGl6ZUJvZHkoKXtyZXR1cm4gbnVsbD09PXRoaXMuYm9keT9udWxsOkhEKHRoaXMuYm9keSl8fEZEKHRoaXMuYm9keSl8fExEKHRoaXMuYm9keSl8fCJzdHJpbmciPT10eXBlb2YgdGhpcy5ib2R5P3RoaXMuYm9keTp0aGlzLmJvZHkgaW5zdGFuY2VvZiB6RD90aGlzLmJvZHkudG9TdHJpbmcoKToib2JqZWN0Ij09dHlwZW9mIHRoaXMuYm9keXx8ImJvb2xlYW4iPT10eXBlb2YgdGhpcy5ib2R5fHxBcnJheS5pc0FycmF5KHRoaXMuYm9keSk/SlNPTi5zdHJpbmdpZnkodGhpcy5ib2R5KTp0aGlzLmJvZHkudG9TdHJpbmcoKX1kZXRlY3RDb250ZW50VHlwZUhlYWRlcigpe3JldHVybiBudWxsPT09dGhpcy5ib2R5fHxMRCh0aGlzLmJvZHkpP251bGw6RkQodGhpcy5ib2R5KT90aGlzLmJvZHkudHlwZXx8bnVsbDpIRCh0aGlzLmJvZHkpP251bGw6InN0cmluZyI9PXR5cGVvZiB0aGlzLmJvZHk/InRleHQvcGxhaW4iOnRoaXMuYm9keSBpbnN0YW5jZW9mIHpEPyJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCI6Im9iamVjdCI9PXR5cGVvZiB0aGlzLmJvZHl8fCJudW1iZXIiPT10eXBlb2YgdGhpcy5ib2R5fHwiYm9vbGVhbiI9PXR5cGVvZiB0aGlzLmJvZHk/ImFwcGxpY2F0aW9uL2pzb24iOm51bGx9Y2xvbmUodD17fSl7Y29uc3QgZT10Lm1ldGhvZHx8dGhpcy5tZXRob2Qsbj10LnVybHx8dGhpcy51cmwsbz10LnJlc3BvbnNlVHlwZXx8dGhpcy5yZXNwb25zZVR5cGUsaT12b2lkIDAhPT10LmJvZHk/dC5ib2R5OnRoaXMuYm9keSxhPXZvaWQgMCE9PXQud2l0aENyZWRlbnRpYWxzP3Qud2l0aENyZWRlbnRpYWxzOnRoaXMud2l0aENyZWRlbnRpYWxzLHI9dm9pZCAwIT09dC5yZXBvcnRQcm9ncmVzcz90LnJlcG9ydFByb2dyZXNzOnRoaXMucmVwb3J0UHJvZ3Jlc3M7bGV0IHM9dC5oZWFkZXJzfHx0aGlzLmhlYWRlcnMsbD10LnBhcmFtc3x8dGhpcy5wYXJhbXM7cmV0dXJuIHZvaWQgMCE9PXQuc2V0SGVhZGVycyYmKHM9T2JqZWN0LmtleXModC5zZXRIZWFkZXJzKS5yZWR1Y2UoKChlLG4pPT5lLnNldChuLHQuc2V0SGVhZGVyc1tuXSkpLHMpKSx0LnNldFBhcmFtcyYmKGw9T2JqZWN0LmtleXModC5zZXRQYXJhbXMpLnJlZHVjZSgoKGUsbik9PmUuc2V0KG4sdC5zZXRQYXJhbXNbbl0pKSxsKSksbmV3IEJEKGUsbixpLHtwYXJhbXM6bCxoZWFkZXJzOnMscmVwb3J0UHJvZ3Jlc3M6cixyZXNwb25zZVR5cGU6byx3aXRoQ3JlZGVudGlhbHM6YX0pfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovdmFyIFZEOyEoZnVuY3Rpb24odCl7dFt0LlNlbnQ9MF09IlNlbnQiLHRbdC5VcGxvYWRQcm9ncmVzcz0xXT0iVXBsb2FkUHJvZ3Jlc3MiLHRbdC5SZXNwb25zZUhlYWRlcj0yXT0iUmVzcG9uc2VIZWFkZXIiLHRbdC5Eb3dubG9hZFByb2dyZXNzPTNdPSJEb3dubG9hZFByb2dyZXNzIix0W3QuUmVzcG9uc2U9NF09IlJlc3BvbnNlIix0W3QuVXNlcj01XT0iVXNlciJ9KShWRHx8KFZEPXt9KSk7Y2xhc3MgakR7Y29uc3RydWN0b3IodCxlPTIwMCxuPSJPSyIpe3RoaXMuaGVhZGVycz10LmhlYWRlcnN8fG5ldyBURCx0aGlzLnN0YXR1cz12b2lkIDAhPT10LnN0YXR1cz90LnN0YXR1czplLHRoaXMuc3RhdHVzVGV4dD10LnN0YXR1c1RleHR8fG4sdGhpcy51cmw9dC51cmx8fG51bGwsdGhpcy5vaz10aGlzLnN0YXR1cz49MjAwJiZ0aGlzLnN0YXR1czwzMDB9fWNsYXNzIFVEIGV4dGVuZHMgakR7Y29uc3RydWN0b3IodD17fSl7c3VwZXIodCksdGhpcy50eXBlPVZELlJlc3BvbnNlSGVhZGVyfWNsb25lKHQ9e30pe3JldHVybiBuZXcgVUQoe2hlYWRlcnM6dC5oZWFkZXJzfHx0aGlzLmhlYWRlcnMsc3RhdHVzOnZvaWQgMCE9PXQuc3RhdHVzP3Quc3RhdHVzOnRoaXMuc3RhdHVzLHN0YXR1c1RleHQ6dC5zdGF0dXNUZXh0fHx0aGlzLnN0YXR1c1RleHQsdXJsOnQudXJsfHx0aGlzLnVybHx8dm9pZCAwfSl9fWNsYXNzIFdEIGV4dGVuZHMgakR7Y29uc3RydWN0b3IodD17fSl7c3VwZXIodCksdGhpcy50eXBlPVZELlJlc3BvbnNlLHRoaXMuYm9keT12b2lkIDAhPT10LmJvZHk/dC5ib2R5Om51bGx9Y2xvbmUodD17fSl7cmV0dXJuIG5ldyBXRCh7Ym9keTp2b2lkIDAhPT10LmJvZHk/dC5ib2R5OnRoaXMuYm9keSxoZWFkZXJzOnQuaGVhZGVyc3x8dGhpcy5oZWFkZXJzLHN0YXR1czp2b2lkIDAhPT10LnN0YXR1cz90LnN0YXR1czp0aGlzLnN0YXR1cyxzdGF0dXNUZXh0OnQuc3RhdHVzVGV4dHx8dGhpcy5zdGF0dXNUZXh0LHVybDp0LnVybHx8dGhpcy51cmx8fHZvaWQgMH0pfX1jbGFzcyBHRCBleHRlbmRzIGpEe2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQsMCwiVW5rbm93biBFcnJvciIpLHRoaXMubmFtZT0iSHR0cEVycm9yUmVzcG9uc2UiLHRoaXMub2s9ITEsdGhpcy5tZXNzYWdlPXRoaXMuc3RhdHVzPj0yMDAmJnRoaXMuc3RhdHVzPDMwMD9gSHR0cCBmYWlsdXJlIGR1cmluZyBwYXJzaW5nIGZvciAke3QudXJsfHwiKHVua25vd24gdXJsKSJ9YDpgSHR0cCBmYWlsdXJlIHJlc3BvbnNlIGZvciAke3QudXJsfHwiKHVua25vd24gdXJsKSJ9OiAke3Quc3RhdHVzfSAke3Quc3RhdHVzVGV4dH1gLHRoaXMuZXJyb3I9dC5lcnJvcnx8bnVsbH19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIFlEKHQsZSl7cmV0dXJue2JvZHk6ZSxoZWFkZXJzOnQuaGVhZGVycyxvYnNlcnZlOnQub2JzZXJ2ZSxwYXJhbXM6dC5wYXJhbXMscmVwb3J0UHJvZ3Jlc3M6dC5yZXBvcnRQcm9ncmVzcyxyZXNwb25zZVR5cGU6dC5yZXNwb25zZVR5cGUsd2l0aENyZWRlbnRpYWxzOnQud2l0aENyZWRlbnRpYWxzfX1jbGFzcyBxRHtjb25zdHJ1Y3Rvcih0KXt0aGlzLmhhbmRsZXI9dH1yZXF1ZXN0KHQsZSxuPXt9KXtsZXQgbztpZih0IGluc3RhbmNlb2YgQkQpbz10O2Vsc2V7bGV0IGksYTtpPW4uaGVhZGVycyBpbnN0YW5jZW9mIFREP24uaGVhZGVyczpuZXcgVEQobi5oZWFkZXJzKSxuLnBhcmFtcyYmKGE9bi5wYXJhbXMgaW5zdGFuY2VvZiB6RD9uLnBhcmFtczpuZXcgekQoe2Zyb21PYmplY3Q6bi5wYXJhbXN9KSksbz1uZXcgQkQodCxlLHZvaWQgMCE9PW4uYm9keT9uLmJvZHk6bnVsbCx7aGVhZGVyczppLHBhcmFtczphLHJlcG9ydFByb2dyZXNzOm4ucmVwb3J0UHJvZ3Jlc3MscmVzcG9uc2VUeXBlOm4ucmVzcG9uc2VUeXBlfHwianNvbiIsd2l0aENyZWRlbnRpYWxzOm4ud2l0aENyZWRlbnRpYWxzfSl9Y29uc3QgaT1aKG8pLnBpcGUoKGZ1bmN0aW9uIGEodCxlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZT9UdCh0LGUsMSk6VHQodCwxKX0pKCh0PT50aGlzLmhhbmRsZXIuaGFuZGxlKHQpKSkpO2lmKHQgaW5zdGFuY2VvZiBCRHx8ImV2ZW50cyI9PT1uLm9ic2VydmUpcmV0dXJuIGk7Y29uc3Qgcj1pLnBpcGUoR3QoKHQ9PnQgaW5zdGFuY2VvZiBXRCkpKTtzd2l0Y2gobi5vYnNlcnZlfHwiYm9keSIpe2Nhc2UiYm9keSI6c3dpdGNoKG8ucmVzcG9uc2VUeXBlKXtjYXNlImFycmF5YnVmZmVyIjpyZXR1cm4gci5waXBlKGh0KCh0PT57aWYobnVsbCE9PXQuYm9keSYmISh0LmJvZHkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpdGhyb3cgbmV3IEVycm9yKCJSZXNwb25zZSBpcyBub3QgYW4gQXJyYXlCdWZmZXIuIik7cmV0dXJuIHQuYm9keX0pKSk7Y2FzZSJibG9iIjpyZXR1cm4gci5waXBlKGh0KCh0PT57aWYobnVsbCE9PXQuYm9keSYmISh0LmJvZHkgaW5zdGFuY2VvZiBCbG9iKSl0aHJvdyBuZXcgRXJyb3IoIlJlc3BvbnNlIGlzIG5vdCBhIEJsb2IuIik7cmV0dXJuIHQuYm9keX0pKSk7Y2FzZSJ0ZXh0IjpyZXR1cm4gci5waXBlKGh0KCh0PT57aWYobnVsbCE9PXQuYm9keSYmInN0cmluZyIhPXR5cGVvZiB0LmJvZHkpdGhyb3cgbmV3IEVycm9yKCJSZXNwb25zZSBpcyBub3QgYSBzdHJpbmcuIik7cmV0dXJuIHQuYm9keX0pKSk7Y2FzZSJqc29uIjpkZWZhdWx0OnJldHVybiByLnBpcGUoaHQoKHQ9PnQuYm9keSkpKX1jYXNlInJlc3BvbnNlIjpyZXR1cm4gcjtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5yZWFjaGFibGU6IHVuaGFuZGxlZCBvYnNlcnZlIHR5cGUgJHtuLm9ic2VydmV9fWApfX1kZWxldGUodCxlPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJERUxFVEUiLHQsZSl9Z2V0KHQsZT17fSl7cmV0dXJuIHRoaXMucmVxdWVzdCgiR0VUIix0LGUpfWhlYWQodCxlPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJIRUFEIix0LGUpfWpzb25wKHQsZSl7cmV0dXJuIHRoaXMucmVxdWVzdCgiSlNPTlAiLHQse3BhcmFtczoobmV3IHpEKS5hcHBlbmQoZSwiSlNPTlBfQ0FMTEJBQ0siKSxvYnNlcnZlOiJib2R5IixyZXNwb25zZVR5cGU6Impzb24ifSl9b3B0aW9ucyh0LGU9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIk9QVElPTlMiLHQsZSl9cGF0Y2godCxlLG49e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIlBBVENIIix0LFlEKG4sZSkpfXBvc3QodCxlLG49e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIlBPU1QiLHQsWUQobixlKSl9cHV0KHQsZSxuPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJQVVQiLHQsWUQobixlKSl9fXFELsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxxRCkodXMoQUQpKX0scUQuybVwcm92PWxvKHt0b2tlbjpxRCxmYWN0b3J5OnFELsm1ZmFjfSkscUQuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpBRH1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIocUQsW3t0eXBlOkptfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkFEfV19KSxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIFpEe2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5uZXh0PXQsdGhpcy5pbnRlcmNlcHRvcj1lfWhhbmRsZSh0KXtyZXR1cm4gdGhpcy5pbnRlcmNlcHRvci5pbnRlcmNlcHQodCx0aGlzLm5leHQpfX1jb25zdCBYRD1uZXcgTnIoIkhUVFBfSU5URVJDRVBUT1JTIik7Y2xhc3MgS0R7aW50ZXJjZXB0KHQsZSl7cmV0dXJuIGUuaGFuZGxlKHQpfX1LRC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8S0QpfSxLRC7JtXByb3Y9bG8oe3Rva2VuOktELGZhY3Rvcnk6S0QuybVmYWN9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEtELFt7dHlwZTpKbX1dLG51bGwsbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpsZXQgSkQ9MDtjbGFzcyBRRHt9Y2xhc3MgJER7Y29uc3RydWN0b3IodCxlKXt0aGlzLmNhbGxiYWNrTWFwPXQsdGhpcy5kb2N1bWVudD1lLHRoaXMucmVzb2x2ZWRQcm9taXNlPVByb21pc2UucmVzb2x2ZSgpfW5leHRDYWxsYmFjaygpe3JldHVybiJuZ19qc29ucF9jYWxsYmFja18iK0pEKyt9aGFuZGxlKHQpe2lmKCJKU09OUCIhPT10Lm1ldGhvZCl0aHJvdyBuZXcgRXJyb3IoIkpTT05QIHJlcXVlc3RzIG11c3QgdXNlIEpTT05QIHJlcXVlc3QgbWV0aG9kLiIpO2lmKCJqc29uIiE9PXQucmVzcG9uc2VUeXBlKXRocm93IG5ldyBFcnJvcigiSlNPTlAgcmVxdWVzdHMgbXVzdCB1c2UgSnNvbiByZXNwb25zZSB0eXBlLiIpO3JldHVybiBuZXcgeSgoZT0+e2NvbnN0IG49dGhpcy5uZXh0Q2FsbGJhY2soKSxvPXQudXJsV2l0aFBhcmFtcy5yZXBsYWNlKC89SlNPTlBfQ0FMTEJBQ0soJnwkKS8sYD0ke259JDFgKSxpPXRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7aS5zcmM9bztsZXQgYT1udWxsLHI9ITEscz0hMTt0aGlzLmNhbGxiYWNrTWFwW25dPXQ9PntkZWxldGUgdGhpcy5jYWxsYmFja01hcFtuXSxzfHwoYT10LHI9ITApfTtjb25zdCBsPSgpPT57aS5wYXJlbnROb2RlJiZpLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoaSksZGVsZXRlIHRoaXMuY2FsbGJhY2tNYXBbbl19LGM9dD0+e3N8fHRoaXMucmVzb2x2ZWRQcm9taXNlLnRoZW4oKCgpPT57bCgpLHI/KGUubmV4dChuZXcgV0Qoe2JvZHk6YSxzdGF0dXM6MjAwLHN0YXR1c1RleHQ6Ik9LIix1cmw6b30pKSxlLmNvbXBsZXRlKCkpOmUuZXJyb3IobmV3IEdEKHt1cmw6byxzdGF0dXM6MCxzdGF0dXNUZXh0OiJKU09OUCBFcnJvciIsZXJyb3I6bmV3IEVycm9yKCJKU09OUCBpbmplY3RlZCBzY3JpcHQgZGlkIG5vdCBpbnZva2UgY2FsbGJhY2suIil9KSl9KSl9LGQ9dD0+e3N8fChsKCksZS5lcnJvcihuZXcgR0Qoe2Vycm9yOnQsc3RhdHVzOjAsc3RhdHVzVGV4dDoiSlNPTlAgRXJyb3IiLHVybDpvfSkpKX07cmV0dXJuIGkuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsYyksaS5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsZCksdGhpcy5kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGkpLGUubmV4dCh7dHlwZTpWRC5TZW50fSksKCk9PntzPSEwLGkucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIsYyksaS5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsZCksbCgpfX0pKX19JEQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fCREKSh1cyhRRCksdXMoVUMpKX0sJEQuybVwcm92PWxvKHt0b2tlbjokRCxmYWN0b3J5OiRELsm1ZmFjfSksJEQuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpRRH0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W1VDXX1dfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYigkRCxbe3R5cGU6Sm19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6UUR9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltVQ119XX1dfSksbnVsbCk7Y2xhc3MgdEV7Y29uc3RydWN0b3IodCl7dGhpcy5qc29ucD10fWludGVyY2VwdCh0LGUpe3JldHVybiJKU09OUCI9PT10Lm1ldGhvZD90aGlzLmpzb25wLmhhbmRsZSh0KTplLmhhbmRsZSh0KX19dEUuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHRFKSh1cygkRCkpfSx0RS7JtXByb3Y9bG8oe3Rva2VuOnRFLGZhY3Rvcnk6dEUuybVmYWN9KSx0RS5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOiREfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYih0RSxbe3R5cGU6Sm19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6JER9XX0pLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3QgZUU9L15cKVxdXH0nLD9cbi87Y2xhc3MgbkV7fWNsYXNzIG9Fe2NvbnN0cnVjdG9yKCl7fWJ1aWxkKCl7cmV0dXJuIG5ldyBYTUxIdHRwUmVxdWVzdH19b0UuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fG9FKX0sb0UuybVwcm92PWxvKHt0b2tlbjpvRSxmYWN0b3J5Om9FLsm1ZmFjfSksb0UuY3RvclBhcmFtZXRlcnM9KCk9PltdLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIob0UsW3t0eXBlOkptfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW119KSxudWxsKTtjbGFzcyBpRXtjb25zdHJ1Y3Rvcih0KXt0aGlzLnhockZhY3Rvcnk9dH1oYW5kbGUodCl7aWYoIkpTT05QIj09PXQubWV0aG9kKXRocm93IG5ldyBFcnJvcigiQXR0ZW1wdGVkIHRvIGNvbnN0cnVjdCBKc29ucCByZXF1ZXN0IHdpdGhvdXQgSHR0cENsaWVudEpzb25wTW9kdWxlIGluc3RhbGxlZC4iKTtyZXR1cm4gbmV3IHkoKGU9Pntjb25zdCBuPXRoaXMueGhyRmFjdG9yeS5idWlsZCgpO2lmKG4ub3Blbih0Lm1ldGhvZCx0LnVybFdpdGhQYXJhbXMpLHQud2l0aENyZWRlbnRpYWxzJiYobi53aXRoQ3JlZGVudGlhbHM9ITApLHQuaGVhZGVycy5mb3JFYWNoKCgodCxlKT0+bi5zZXRSZXF1ZXN0SGVhZGVyKHQsZS5qb2luKCIsIikpKSksdC5oZWFkZXJzLmhhcygiQWNjZXB0Iil8fG4uc2V0UmVxdWVzdEhlYWRlcigiQWNjZXB0IiwiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qIiksIXQuaGVhZGVycy5oYXMoIkNvbnRlbnQtVHlwZSIpKXtjb25zdCBlPXQuZGV0ZWN0Q29udGVudFR5cGVIZWFkZXIoKTtudWxsIT09ZSYmbi5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLGUpfWlmKHQucmVzcG9uc2VUeXBlKXtjb25zdCBlPXQucmVzcG9uc2VUeXBlLnRvTG93ZXJDYXNlKCk7bi5yZXNwb25zZVR5cGU9Impzb24iIT09ZT9lOiJ0ZXh0In1jb25zdCBvPXQuc2VyaWFsaXplQm9keSgpO2xldCBpPW51bGw7Y29uc3QgYT0oKT0+e2lmKG51bGwhPT1pKXJldHVybiBpO2NvbnN0IGU9MTIyMz09PW4uc3RhdHVzPzIwNDpuLnN0YXR1cyxvPW4uc3RhdHVzVGV4dHx8Ik9LIixhPW5ldyBURChuLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSxyPShmdW5jdGlvbiBzKHQpe3JldHVybiJyZXNwb25zZVVSTCJpbiB0JiZ0LnJlc3BvbnNlVVJMP3QucmVzcG9uc2VVUkw6L15YLVJlcXVlc3QtVVJMOi9tLnRlc3QodC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSk/dC5nZXRSZXNwb25zZUhlYWRlcigiWC1SZXF1ZXN0LVVSTCIpOm51bGx9KShuKXx8dC51cmw7cmV0dXJuIGk9bmV3IFVEKHtoZWFkZXJzOmEsc3RhdHVzOmUsc3RhdHVzVGV4dDpvLHVybDpyfSksaX0scj0oKT0+e2xldHtoZWFkZXJzOm8sc3RhdHVzOmksc3RhdHVzVGV4dDpyLHVybDpzfT1hKCksbD1udWxsOzIwNCE9PWkmJihsPXZvaWQgMD09PW4ucmVzcG9uc2U/bi5yZXNwb25zZVRleHQ6bi5yZXNwb25zZSksMD09PWkmJihpPWw/MjAwOjApO2xldCBjPWk+PTIwMCYmaTwzMDA7aWYoImpzb24iPT09dC5yZXNwb25zZVR5cGUmJiJzdHJpbmciPT10eXBlb2YgbCl7Y29uc3QgdD1sO2w9bC5yZXBsYWNlKGVFLCIiKTt0cnl7bD0iIiE9PWw/SlNPTi5wYXJzZShsKTpudWxsfWNhdGNoKGUpe2w9dCxjJiYoYz0hMSxsPXtlcnJvcjplLHRleHQ6bH0pfX1jPyhlLm5leHQobmV3IFdEKHtib2R5OmwsaGVhZGVyczpvLHN0YXR1czppLHN0YXR1c1RleHQ6cix1cmw6c3x8dm9pZCAwfSkpLGUuY29tcGxldGUoKSk6ZS5lcnJvcihuZXcgR0Qoe2Vycm9yOmwsaGVhZGVyczpvLHN0YXR1czppLHN0YXR1c1RleHQ6cix1cmw6c3x8dm9pZCAwfSkpfSxzPXQ9Pntjb25zdHt1cmw6b309YSgpLGk9bmV3IEdEKHtlcnJvcjp0LHN0YXR1czpuLnN0YXR1c3x8MCxzdGF0dXNUZXh0Om4uc3RhdHVzVGV4dHx8IlVua25vd24gRXJyb3IiLHVybDpvfHx2b2lkIDB9KTtlLmVycm9yKGkpfTtsZXQgbD0hMTtjb25zdCBjPW89PntsfHwoZS5uZXh0KGEoKSksbD0hMCk7bGV0IGk9e3R5cGU6VkQuRG93bmxvYWRQcm9ncmVzcyxsb2FkZWQ6by5sb2FkZWR9O28ubGVuZ3RoQ29tcHV0YWJsZSYmKGkudG90YWw9by50b3RhbCksInRleHQiPT09dC5yZXNwb25zZVR5cGUmJm4ucmVzcG9uc2VUZXh0JiYoaS5wYXJ0aWFsVGV4dD1uLnJlc3BvbnNlVGV4dCksZS5uZXh0KGkpfSxkPXQ9PntsZXQgbj17dHlwZTpWRC5VcGxvYWRQcm9ncmVzcyxsb2FkZWQ6dC5sb2FkZWR9O3QubGVuZ3RoQ29tcHV0YWJsZSYmKG4udG90YWw9dC50b3RhbCksZS5uZXh0KG4pfTtyZXR1cm4gbi5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixyKSxuLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixzKSxuLmFkZEV2ZW50TGlzdGVuZXIoInRpbWVvdXQiLHMpLG4uYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHMpLHQucmVwb3J0UHJvZ3Jlc3MmJihuLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixjKSxudWxsIT09byYmbi51cGxvYWQmJm4udXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixkKSksbi5zZW5kKG8pLGUubmV4dCh7dHlwZTpWRC5TZW50fSksKCk9PntuLnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIixzKSxuLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixzKSxuLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLHIpLG4ucmVtb3ZlRXZlbnRMaXN0ZW5lcigidGltZW91dCIscyksdC5yZXBvcnRQcm9ncmVzcyYmKG4ucmVtb3ZlRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGMpLG51bGwhPT1vJiZuLnVwbG9hZCYmbi51cGxvYWQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGQpKSxuLnJlYWR5U3RhdGUhPT1uLkRPTkUmJm4uYWJvcnQoKX19KSl9fWlFLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxpRSkodXMobkUpKX0saUUuybVwcm92PWxvKHt0b2tlbjppRSxmYWN0b3J5OmlFLsm1ZmFjfSksaUUuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpuRX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoaUUsW3t0eXBlOkptfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOm5FfV19KSxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IGFFPW5ldyBOcigiWFNSRl9DT09LSUVfTkFNRSIpLHJFPW5ldyBOcigiWFNSRl9IRUFERVJfTkFNRSIpO2NsYXNzIHNFe31jbGFzcyBsRXtjb25zdHJ1Y3Rvcih0LGUsbil7dGhpcy5kb2M9dCx0aGlzLnBsYXRmb3JtPWUsdGhpcy5jb29raWVOYW1lPW4sdGhpcy5sYXN0Q29va2llU3RyaW5nPSIiLHRoaXMubGFzdFRva2VuPW51bGwsdGhpcy5wYXJzZUNvdW50PTB9Z2V0VG9rZW4oKXtpZigic2VydmVyIj09PXRoaXMucGxhdGZvcm0pcmV0dXJuIG51bGw7Y29uc3QgdD10aGlzLmRvYy5jb29raWV8fCIiO3JldHVybiB0IT09dGhpcy5sYXN0Q29va2llU3RyaW5nJiYodGhpcy5wYXJzZUNvdW50KyssdGhpcy5sYXN0VG9rZW49JE0odCx0aGlzLmNvb2tpZU5hbWUpLHRoaXMubGFzdENvb2tpZVN0cmluZz10KSx0aGlzLmxhc3RUb2tlbn19bEUuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGxFKSh1cyhVQyksdXMoSF8pLHVzKGFFKSl9LGxFLsm1cHJvdj1sbyh7dG9rZW46bEUsZmFjdG9yeTpsRS7JtWZhY30pLGxFLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W1VDXX1dfSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbSF9dfV19LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOlthRV19XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIobEUsW3t0eXBlOkptfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltVQ119XX0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W0hfXX1dfSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbYUVdfV19XX0pLG51bGwpO2NsYXNzIGNFe2NvbnN0cnVjdG9yKHQsZSl7dGhpcy50b2tlblNlcnZpY2U9dCx0aGlzLmhlYWRlck5hbWU9ZX1pbnRlcmNlcHQodCxlKXtjb25zdCBuPXQudXJsLnRvTG93ZXJDYXNlKCk7aWYoIkdFVCI9PT10Lm1ldGhvZHx8IkhFQUQiPT09dC5tZXRob2R8fG4uc3RhcnRzV2l0aCgiaHR0cDovLyIpfHxuLnN0YXJ0c1dpdGgoImh0dHBzOi8vIikpcmV0dXJuIGUuaGFuZGxlKHQpO2NvbnN0IG89dGhpcy50b2tlblNlcnZpY2UuZ2V0VG9rZW4oKTtyZXR1cm4gbnVsbD09PW98fHQuaGVhZGVycy5oYXModGhpcy5oZWFkZXJOYW1lKXx8KHQ9dC5jbG9uZSh7aGVhZGVyczp0LmhlYWRlcnMuc2V0KHRoaXMuaGVhZGVyTmFtZSxvKX0pKSxlLmhhbmRsZSh0KX19Y0UuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGNFKSh1cyhzRSksdXMockUpKX0sY0UuybVwcm92PWxvKHt0b2tlbjpjRSxmYWN0b3J5OmNFLsm1ZmFjfSksY0UuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpzRX0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W3JFXX1dfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihjRSxbe3R5cGU6Sm19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6c0V9LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltyRV19XX1dfSksbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyBkRXtjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuYmFja2VuZD10LHRoaXMuaW5qZWN0b3I9ZSx0aGlzLmNoYWluPW51bGx9aGFuZGxlKHQpe2lmKG51bGw9PT10aGlzLmNoYWluKXtjb25zdCB0PXRoaXMuaW5qZWN0b3IuZ2V0KFhELFtdKTt0aGlzLmNoYWluPXQucmVkdWNlUmlnaHQoKCh0LGUpPT5uZXcgWkQodCxlKSksdGhpcy5iYWNrZW5kKX1yZXR1cm4gdGhpcy5jaGFpbi5oYW5kbGUodCl9fWZ1bmN0aW9uIHBFKCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB3aW5kb3c/d2luZG93Ont9fWRFLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxkRSkodXMoUkQpLHVzKFFwKSl9LGRFLsm1cHJvdj1sbyh7dG9rZW46ZEUsZmFjdG9yeTpkRS7JtWZhY30pLGRFLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6UkR9LHt0eXBlOlFwfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihkRSxbe3R5cGU6Sm19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6UkR9LHt0eXBlOlFwfV19KSxudWxsKTtjbGFzcyBtRXtzdGF0aWMgZGlzYWJsZSgpe3JldHVybntuZ01vZHVsZTptRSxwcm92aWRlcnM6W3twcm92aWRlOmNFLHVzZUNsYXNzOktEfV19fXN0YXRpYyB3aXRoT3B0aW9ucyh0PXt9KXtyZXR1cm57bmdNb2R1bGU6bUUscHJvdmlkZXJzOlt0LmNvb2tpZU5hbWU/e3Byb3ZpZGU6YUUsdXNlVmFsdWU6dC5jb29raWVOYW1lfTpbXSx0LmhlYWRlck5hbWU/e3Byb3ZpZGU6ckUsdXNlVmFsdWU6dC5oZWFkZXJOYW1lfTpbXV19fX1tRS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8bUUpfSxtRS7JtW1vZD1abyh7dHlwZTptRX0pLG1FLsm1aW5qPWNvKHtwcm92aWRlcnM6W2NFLHtwcm92aWRlOlhELHVzZUV4aXN0aW5nOmNFLG11bHRpOiEwfSx7cHJvdmlkZTpzRSx1c2VDbGFzczpsRX0se3Byb3ZpZGU6YUUsdXNlVmFsdWU6IlhTUkYtVE9LRU4ifSx7cHJvdmlkZTpyRSx1c2VWYWx1ZToiWC1YU1JGLVRPS0VOIn1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihtRSxbe3R5cGU6a18sYXJnczpbe3Byb3ZpZGVyczpbY0Use3Byb3ZpZGU6WEQsdXNlRXhpc3Rpbmc6Y0UsbXVsdGk6ITB9LHtwcm92aWRlOnNFLHVzZUNsYXNzOmxFfSx7cHJvdmlkZTphRSx1c2VWYWx1ZToiWFNSRi1UT0tFTiJ9LHtwcm92aWRlOnJFLHVzZVZhbHVlOiJYLVhTUkYtVE9LRU4ifV19XX1dLG51bGwsbnVsbCk7Y2xhc3MgdUV7fXVFLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHx1RSl9LHVFLsm1bW9kPVpvKHt0eXBlOnVFfSksdUUuybVpbmo9Y28oe3Byb3ZpZGVyczpbcUQse3Byb3ZpZGU6QUQsdXNlQ2xhc3M6ZEV9LGlFLHtwcm92aWRlOlJELHVzZUV4aXN0aW5nOmlFfSxvRSx7cHJvdmlkZTpuRSx1c2VFeGlzdGluZzpvRX1dLGltcG9ydHM6W1ttRS53aXRoT3B0aW9ucyh7Y29va2llTmFtZToiWFNSRi1UT0tFTiIsaGVhZGVyTmFtZToiWC1YU1JGLVRPS0VOIn0pXV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKHVFLHtpbXBvcnRzOlttRV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHVFLFt7dHlwZTprXyxhcmdzOlt7aW1wb3J0czpbbUUud2l0aE9wdGlvbnMoe2Nvb2tpZU5hbWU6IlhTUkYtVE9LRU4iLGhlYWRlck5hbWU6IlgtWFNSRi1UT0tFTiJ9KV0scHJvdmlkZXJzOltxRCx7cHJvdmlkZTpBRCx1c2VDbGFzczpkRX0saUUse3Byb3ZpZGU6UkQsdXNlRXhpc3Rpbmc6aUV9LG9FLHtwcm92aWRlOm5FLHVzZUV4aXN0aW5nOm9FfV19XX1dLG51bGwsbnVsbCk7Y2xhc3MgZkV7fWZFLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxmRSl9LGZFLsm1bW9kPVpvKHt0eXBlOmZFfSksZkUuybVpbmo9Y28oe3Byb3ZpZGVyczpbJEQse3Byb3ZpZGU6UUQsdXNlRmFjdG9yeTpwRX0se3Byb3ZpZGU6WEQsdXNlQ2xhc3M6dEUsbXVsdGk6ITB9XX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoZkUsW3t0eXBlOmtfLGFyZ3M6W3twcm92aWRlcnM6WyRELHtwcm92aWRlOlFELHVzZUZhY3Rvcnk6cEV9LHtwcm92aWRlOlhELHVzZUNsYXNzOnRFLG11bHRpOiEwfV19XX1dLG51bGwsbnVsbCk7Y29uc3QgZ0U9ImZlYXR1cmUiLGhFPUZrKGdFKSxiRT16ayhoRSwodD0+dC5pc0ZlYXR1cmVGbGFnc0xvYWRlZCkpLHlFPXprKGhFLCh0PT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5kZWZhdWx0RmxhZ3MpLHQuZmxhZ092ZXJyaWRlcykpKSxfRT16ayhoRSwodD0+dC5mbGFnT3ZlcnJpZGVzfHx7fSkpLENFPXprKHlFLCh0PT50LmlzQXV0b0RhcmtNb2RlQWxsb3dlZCkpLE1FPXprKHlFLCh0PT5udWxsIT09dC5lbmFibGVEYXJrTW9kZU92ZXJyaWRlP3QuZW5hYmxlRGFya01vZGVPdmVycmlkZTp0LmRlZmF1bHRFbmFibGVEYXJrTW9kZSkpLHZFPXprKHlFLCh0PT50LmVuYWJsZURhcmtNb2RlT3ZlcnJpZGUpKSx4RT16ayh5RSwodD0+dC5lbmFibGVkRXhwZXJpbWVudGFsUGx1Z2lucykpLE9FPXprKHlFLCh0PT50LmluQ29sYWIpKSxQRT16ayh5RSwodD0+dC5lbmFibGVkQ29sb3JHcm91cCkpLHdFPXprKHlFLCh0PT50LmVuYWJsZWRDb2xvckdyb3VwQnlSZWdleCkpLGtFPXprKHlFLCh0PT50Lm1ldHJpY3NJbWFnZVN1cHBvcnRFbmFibGVkKSk7ZnVuY3Rpb24gU0UodCl7Y29uc3QgZT17fTtmb3IoY29uc3RbbixvXW9mIHQuZW50cmllcygpKWVbbl09bztyZXR1cm4gZX1mdW5jdGlvbiBERSh0KXtsZXQgZT10LmhlYWRlcnN8fG5ldyBURDtyZXR1cm4gZT1lLmFwcGVuZCgiWC1YU1JGLVByb3RlY3RlZCIsIjEiKSxPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2hlYWRlcnM6ZX0pfXprKHlFLCh0PT50LmVuYWJsZWRMaW5rZWRUaW1lKSk7Y2xhc3MgRUV7Y29uc3RydWN0b3IodCxlLG4pe3RoaXMuYXBwUm9vdFByb3ZpZGVyPXQsdGhpcy5odHRwPWUsdGhpcy5zdG9yZT1ufXJlc29sdmVBcHBSb290KHQpe3JldHVybiB0LnN0YXJ0c1dpdGgoIi8iKT90aGlzLmFwcFJvb3RQcm92aWRlci5nZXRBYnNQYXRobmFtZVdpdGhBcHBSb290KHQpOnR9Z2V0KHQsZT17fSl7cmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5yZXNvbHZlQXBwUm9vdCh0KSxlKX1wb3N0KHQsZSxuPXt9KXtyZXR1cm4gbj1ERShuKSx0aGlzLnN0b3JlLnNlbGVjdChiRSkucGlwZShHdCgodD0+Qm9vbGVhbih0KSkpLE5lKDEpLGtuKHRoaXMuc3RvcmUuc2VsZWN0KE9FKSksVHQoKChbLG9dKT0+e2NvbnN0IGk9dGhpcy5yZXNvbHZlQXBwUm9vdCh0KTtyZXR1cm4gbz90aGlzLmh0dHAuZ2V0KGkse2hlYWRlcnM6bi5oZWFkZXJzLHBhcmFtczpTRShlKX0pOnRoaXMuaHR0cC5wb3N0KGksZSxuKX0pKSl9cHV0KHQsZSxuPXt9KXtyZXR1cm4gdGhpcy5odHRwLnB1dCh0aGlzLnJlc29sdmVBcHBSb290KHQpLGUsREUobikpfWRlbGV0ZSh0LGU9e30pe3JldHVybiB0aGlzLmh0dHAuZGVsZXRlKHRoaXMucmVzb2x2ZUFwcFJvb3QodCksREUoZSkpfX1FRS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8RUUpKHVzKFhTKSx1cyhxRCksdXMoRWspKX0sRUUuybVwcm92PWxvKHt0b2tlbjpFRSxmYWN0b3J5OkVFLsm1ZmFjfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihFRSxbe3R5cGU6Sm19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6WFN9LHt0eXBlOnFEfSx7dHlwZTpFa31dfSksbnVsbCk7Y2xhc3MgQUV7fXZhciBSRSxURSxORTtBRS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8QUUpfSxBRS7JtW1vZD1abyh7dHlwZTpBRX0pLEFFLsm1aW5qPWNvKHtwcm92aWRlcnM6W0VFXSxpbXBvcnRzOltbdUUsJFNdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oQUUse2ltcG9ydHM6W3VFLCRTXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoQUUsW3t0eXBlOmtfLGFyZ3M6W3tpbXBvcnRzOlt1RSwkU10scHJvdmlkZXJzOltFRV19XX1dLG51bGwsbnVsbCksKGZ1bmN0aW9uKHQpe3QuU1RFUD0ic3RlcCIsdC5XQUxMX1RJTUU9IndhbGxfdGltZSIsdC5SRUxBVElWRT0icmVsYXRpdmUifSkoUkV8fChSRT17fSkpLChmdW5jdGlvbih0KXt0Lk9GRlNFVD0ib2Zmc2V0Iix0Lk9WRVJMQVk9Im92ZXJsYXkifSkoVEV8fChURT17fSkpLChmdW5jdGlvbih0KXt0LlVOS05PV049IlVOS05PV04iLHQuTk9UX0ZPVU5EPSJOT1RfRk9VTkQifSkoTkV8fChORT17fSkpO2NvbnN0IElFPW5ldyBOcigiVGVuc29yQm9hcmQgYnJhbmQgbmFtZSIpO2Z1bmN0aW9uIHpFKHQpe2xldCBlPU5FLlVOS05PV047cmV0dXJuIHQgaW5zdGFuY2VvZiBHRCYmNDA0PT09dC5zdGF0dXMmJihlPU5FLk5PVF9GT1VORCksWChuZXcgSEUoZSkpfWNsYXNzIEhFe2NvbnN0cnVjdG9yKHQpe3RoaXMuZmFpbHVyZUNvZGU9dH19Y2xhc3MgRkV7Y29uc3RydWN0b3IodCl7dGhpcy5odHRwPXQsdGhpcy50ZkJhY2tlbmQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGYtYmFja2VuZCIpLnRmX2JhY2tlbmR9ZmV0Y2hQbHVnaW5zTGlzdGluZyh0KXtjb25zdCBlPShmdW5jdGlvbiBuKHQpe2lmKCF0Lmxlbmd0aClyZXR1cm4gbnVsbDtjb25zdCBlPW5ldyBVUkxTZWFyY2hQYXJhbXM7Zm9yKGNvbnN0IG4gb2YgdCllLmFwcGVuZCgiZXhwZXJpbWVudGFsUGx1Z2luIixuKTtyZXR1cm4gZX0pKHQpLG89ZT9gZGF0YS9wbHVnaW5zX2xpc3Rpbmc/JHtlLnRvU3RyaW5nKCl9YDoiZGF0YS9wbHVnaW5zX2xpc3RpbmciO3JldHVybiB0aGlzLmh0dHAuZ2V0KG8pLnBpcGUocmUoekUpKX1mZXRjaEVudmlyb25tZW50KCl7cmV0dXJuIEx0KFt0aGlzLmh0dHAuZ2V0KCJkYXRhL2Vudmlyb25tZW50IiksUnQodGhpcy50ZkJhY2tlbmQuZW52aXJvbm1lbnRTdG9yZS5yZWZyZXNoKCkpXSkucGlwZShodCgoKFt0XSk9PnQpKSxyZSh6RSkpfX1GRS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8RkUpKHVzKEVFKSl9LEZFLsm1cHJvdj1sbyh7dG9rZW46RkUsZmFjdG9yeTpGRS7JtWZhY30pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoRkUsW3t0eXBlOkptfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkVFfV19KSxudWxsKTtjbGFzcyBMRXt9dmFyIEJFO0xFLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxMRSl9LExFLsm1bW9kPVpvKHt0eXBlOkxFfSksTEUuybVpbmo9Y28oe3Byb3ZpZGVyczpbRkVdLGltcG9ydHM6W1tBRV1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhMRSx7aW1wb3J0czpbQUVdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihMRSxbe3R5cGU6a18sYXJnczpbe2ltcG9ydHM6W0FFXSxwcm92aWRlcnM6W0ZFXX1dfV0sbnVsbCxudWxsKSwoZnVuY3Rpb24odCl7dFt0Lk5PVF9MT0FERUQ9MF09Ik5PVF9MT0FERUQiLHRbdC5MT0FERUQ9MV09IkxPQURFRCIsdFt0LkxPQURJTkc9Ml09IkxPQURJTkciLHRbdC5GQUlMRUQ9M109IkZBSUxFRCJ9KShCRXx8KEJFPXt9KSk7Y29uc3QgVkU9V3coIltDb3JlXSBQbHVnaW4gQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGpFPVd3KCJbQ29yZV0gUGx1Z2luIFVybCBIYXNoIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxVRT1XdygiW0NvcmVdIExvYWRlZCIpLFdFPVd3KCJbQ29yZV0gVXNlciBUcmlnZ2VyZWQgUmVsb2FkIiksR0U9V3coIltDb3JlXSBBdXRvIFJlbG9hZCIpLFlFPVd3KCJbQ29yZV0gUGx1Z2luTGlzdGluZyBGZXRjaCBSZXF1ZXN0ZWQiKSxxRT1XdygiW0NvcmVdIFBsdWdpbkxpc3RpbmcgRmV0Y2ggU3VjY2Vzc2Z1bCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFpFPVd3KCJbQ29yZV0gUGx1Z2luTGlzdGluZyBGZXRjaCBGYWlsZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxYRT1XdygiW0NvcmVdIFBvbHltZXIgQ29tcG9uZW50IFJ1bnMgRmV0Y2ggUmVxdWVzdGVkIiksS0U9V3coIltDb3JlXSBQb2x5bWVyIENvbXBvbmVudCBSdW5zIEZldGNoIFN1Y2Nlc3NmdWwiKSxKRT1XdygiW0NvcmVdIFBvbHltZXIgQ29tcG9uZW50IFJ1bnMgRmV0Y2ggRmFpbGVkIiksUUU9V3coIltDb3JlXSBFbnZpcm9ubWVudCBGZXRjaCBTdWNjZXNzZnVsIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksJEU9V3coIltDb3JlXSBSdW4gU2VsZWN0aW9uIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSx0QT1XdygiW0NvcmVdIFJ1biBGZXRjaCBTdWNjZXNzZnVsIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksZUE9ImNvcmUiLG5BPXthY3RpdmVQbHVnaW46bnVsbCxwbHVnaW5zOnt9LGNvcmVEYXRhTG9hZFN0YXRlOntzdGF0ZTpCRS5OT1RfTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpudWxsfSxwbHVnaW5zTGlzdExvYWRlZDp7c3RhdGU6QkUuTk9UX0xPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6bnVsbCxmYWlsdXJlQ29kZTpudWxsfSxlbnZpcm9ubWVudDp7ZGF0YV9sb2NhdGlvbjoiIix3aW5kb3dfdGl0bGU6IiJ9LHBvbHltZXJSdW5zTG9hZFN0YXRlOntzdGF0ZTpCRS5OT1RfTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpudWxsfSxwb2x5bWVySW50ZXJvcFJ1bnM6W10scG9seW1lckludGVyb3BSdW5TZWxlY3Rpb246bmV3IFNldH0sb0E9bVMobkEscFMoVkUsakUsKCh0LHtwbHVnaW46ZX0pPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2FjdGl2ZVBsdWdpbjplfSkpKSxwUyhZRSwodD0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtjb3JlRGF0YUxvYWRTdGF0ZTpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5jb3JlRGF0YUxvYWRTdGF0ZSkse3N0YXRlOkJFLkxPQURJTkd9KSxwbHVnaW5zTGlzdExvYWRlZDpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5wbHVnaW5zTGlzdExvYWRlZCkse3N0YXRlOkJFLkxPQURJTkd9KX0pKSkscFMoWkUsKCh0LHtmYWlsdXJlQ29kZTplfSk9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7Y29yZURhdGFMb2FkU3RhdGU6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuY29yZURhdGFMb2FkU3RhdGUpLHtzdGF0ZTpCRS5GQUlMRUR9KSxwbHVnaW5zTGlzdExvYWRlZDpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5wbHVnaW5zTGlzdExvYWRlZCkse3N0YXRlOkJFLkZBSUxFRCxmYWlsdXJlQ29kZTplfSl9KSkpLHBTKHFFLCgodCx7cGx1Z2luczplfSk9Pntjb25zdCBuPU9iamVjdC5rZXlzKGUpLmZpbmQoKHQ9PmVbdF0uZW5hYmxlZCkpfHxudWxsLG89dC5hY3RpdmVQbHVnaW58fG4saT1EYXRlLm5vdygpO2xldCBhPXQuY29yZURhdGFMb2FkU3RhdGU7cmV0dXJuIHQucG9seW1lclJ1bnNMb2FkU3RhdGUuc3RhdGU9PT1CRS5MT0FERUQmJihhPXtzdGF0ZTpCRS5MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOml9KSxPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2FjdGl2ZVBsdWdpbjpvLGNvcmVEYXRhTG9hZFN0YXRlOmEscGx1Z2luczplLHBsdWdpbnNMaXN0TG9hZGVkOntzdGF0ZTpCRS5MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOmksZmFpbHVyZUNvZGU6bnVsbH19KX0pKSxwUyhYRSwodD0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtjb3JlRGF0YUxvYWRTdGF0ZTpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5jb3JlRGF0YUxvYWRTdGF0ZSkse3N0YXRlOkJFLkxPQURJTkd9KSxwb2x5bWVyUnVuc0xvYWRTdGF0ZTpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5wb2x5bWVyUnVuc0xvYWRTdGF0ZSkse3N0YXRlOkJFLkxPQURJTkd9KX0pKSkscFMoS0UsKHQ9Pntjb25zdCBlPURhdGUubm93KCk7bGV0IG49dC5jb3JlRGF0YUxvYWRTdGF0ZTtyZXR1cm4gdC5wbHVnaW5zTGlzdExvYWRlZC5zdGF0ZT09PUJFLkxPQURFRCYmKG49e3N0YXRlOkJFLkxPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6ZX0pLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7Y29yZURhdGFMb2FkU3RhdGU6bixwb2x5bWVyUnVuc0xvYWRTdGF0ZTpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5wb2x5bWVyUnVuc0xvYWRTdGF0ZSkse3N0YXRlOkJFLkxPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6ZX0pfSl9KSkscFMoSkUsKHQ9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7Y29yZURhdGFMb2FkU3RhdGU6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuY29yZURhdGFMb2FkU3RhdGUpLHtzdGF0ZTpCRS5GQUlMRUR9KSxwb2x5bWVyUnVuc0xvYWRTdGF0ZTpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5wb2x5bWVyUnVuc0xvYWRTdGF0ZSkse3N0YXRlOkJFLkZBSUxFRH0pfSkpKSxwUyhRRSwoKHQse2Vudmlyb25tZW50OmV9KT0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtlbnZpcm9ubWVudDplfSkpKSxwUyh0QSwoKHQse3J1bnM6ZX0pPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3BvbHltZXJJbnRlcm9wUnVuczplfSkpKSxwUygkRSwoKHQse25leHRTZWxlY3Rpb246ZX0pPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3BvbHltZXJJbnRlcm9wUnVuU2VsZWN0aW9uOm5ldyBTZXQoZSl9KSkpKTtmdW5jdGlvbiBpQSh0LGUpe3JldHVybiBvQSh0LGUpfWNvbnN0IGFBPUZrKGVBKSxyQT16ayhhQSwodD0+dC5wbHVnaW5zTGlzdExvYWRlZCkpLHNBPXprKGFBLCh0PT50LnBvbHltZXJSdW5zTG9hZFN0YXRlKSksbEE9emsoYUEsKHQ9PnQuY29yZURhdGFMb2FkU3RhdGUuc3RhdGUpKSxjQT16ayhhQSwodD0+dC5jb3JlRGF0YUxvYWRTdGF0ZS5sYXN0TG9hZGVkVGltZUluTXMpKSxkQT16ayhhQSwodD0+dC5hY3RpdmVQbHVnaW4pKSxwQT16ayhhQSwodD0+dC5wbHVnaW5zKSksbUE9emsoYUEsKHQ9PnQuZW52aXJvbm1lbnQpKSx1QT1uZXcgU2V0KFtqUy5DT01QQVJFX0VYUEVSSU1FTlQsalMuRVhQRVJJTUVOVCxqUy5OT1RfU0VUXSk7Y2xhc3MgZkF7Y29uc3RydWN0b3IodCxlLG4pe3RoaXMuYWN0aW9ucyQ9dCx0aGlzLnN0b3JlPWUsdGhpcy53ZWJhcHBEYXRhU291cmNlPW4sdGhpcy50ZkJhY2tlbmQ9e3JlZjpkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0Zi1iYWNrZW5kIikudGZfYmFja2VuZH0sdGhpcy5vbkRhc2hib2FyZExvYWQkPVd0KHRoaXMuYWN0aW9ucyQucGlwZSh4UyhVRSxvRCksa24odGhpcy5zdG9yZS5zZWxlY3QoT0QpKSxrZSgoKFssdF0sWyxlXSk9PnQ9PT1lKSkpLHRoaXMuYWN0aW9ucyQucGlwZSh4UyhHRSxXRSkpKS5waXBlKGtuKHRoaXMuc3RvcmUuc2VsZWN0KE1EKSksR3QoKChbLHRdKT0+dUEuaGFzKHQpKSkseG4oMSx2b2lkIDAse2xlYWRpbmc6ITB9KSksdGhpcy5mZXRjaFdlYkFwcERhdGEkPWdTKCgoKT0+V3QodGhpcy5vbkRhc2hib2FyZExvYWQkLnBpcGUoa24odGhpcy5zdG9yZS5zZWxlY3QockEpLHRoaXMuc3RvcmUuc2VsZWN0KHhFKSksR3QoKChbLHtzdGF0ZTp0fV0pPT50IT09QkUuTE9BRElORykpLF9uKCgoKT0+dGhpcy5zdG9yZS5kaXNwYXRjaChZRSgpKSkpLFR0KCgoWywsdF0pPT4oZnVuY3Rpb24gZSguLi50KXtsZXQgZTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdFt0Lmxlbmd0aC0xXSYmKGU9dC5wb3AoKSkscSh0LHZvaWQgMCkubGlmdChuZXcgS3QoZSkpfSkodGhpcy53ZWJhcHBEYXRhU291cmNlLmZldGNoUGx1Z2luc0xpc3RpbmcodCksdGhpcy5mZXRjaEVudmlyb25tZW50KCkpLnBpcGUoaHQoKChbdF0pPT57dGhpcy5zdG9yZS5kaXNwYXRjaChxRSh7cGx1Z2luczp0fSkpfSkpLHJlKCh0PT4odGhpcy5zdG9yZS5kaXNwYXRjaChaRSh0IGluc3RhbmNlb2YgSEU/e2ZhaWx1cmVDb2RlOnQuZmFpbHVyZUNvZGV9OntmYWlsdXJlQ29kZTpORS5VTktOT1dOfSkpLFUpKSkpKSkpLHRoaXMub25EYXNoYm9hcmRMb2FkJC5waXBlKGh0KCgoWyx0XSk9PnQpKSxkbigodD0+dCE9PWpTLkNPTVBBUkVfRVhQRVJJTUVOVD9aKFtdKTp0aGlzLnN0b3JlLnNlbGVjdChQRCkucGlwZShrZSgoKHQsZSk9Pntjb25zdCBuPU9iamVjdC5lbnRyaWVzKHQpLG89bmV3IE1hcChPYmplY3QuZW50cmllcyhlKSk7aWYobi5sZW5ndGghPT1vLnNpemUpcmV0dXJuITE7Zm9yKGNvbnN0W3QsZV1vZiBuKWlmKG8uZ2V0KHQpIT09ZSlyZXR1cm4hMTtyZXR1cm4hMH0pKSxiZSgwKSx4big1MDAsdm9pZCAwLHtsZWFkaW5nOiEwLHRyYWlsaW5nOiEwfSkpKSksa24odGhpcy5zdG9yZS5zZWxlY3QoTUQpLHRoaXMuc3RvcmUuc2VsZWN0KHNBKSksR3QoKChbLHQsZV0pPT51QS5oYXModCkmJmUuc3RhdGUhPT1CRS5MT0FESU5HKSksX24oKCgpPT57dGhpcy5zdG9yZS5kaXNwYXRjaChYRSgpKX0pKSxkbigoKCk9PnRoaXMucmVmcmVzaFBvbHltZXJSdW5zKCkpKSxfbigoKCk9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKEtFKCkpfSkpLHJlKCgoKT0+KHRoaXMuc3RvcmUuZGlzcGF0Y2goSkUoKSksVSkpKSkpKSx7ZGlzcGF0Y2g6ITF9KSx0aGlzLmRpc3BhdGNoQ2hhbmdlUGx1Z2luJD1nUygoKCk9Pld0KHRoaXMub25EYXNoYm9hcmRMb2FkJCx0aGlzLmFjdGlvbnMkLnBpcGUoeFMocUUpKSkucGlwZShrbih0aGlzLnN0b3JlLnNlbGVjdChkQSkpLGh0KCgoWyx0XSk9PnQpKSxrZSgpLEd0KCh0PT5udWxsIT09dCkpLE5lKDEpLF9uKCh0PT57dGhpcy5zdG9yZS5kaXNwYXRjaChWRSh7cGx1Z2luOnR9KSl9KSkpKSx7ZGlzcGF0Y2g6ITF9KX1yZWZyZXNoUG9seW1lclJ1bnMoKXtyZXR1cm4gUnQodGhpcy50ZkJhY2tlbmQucmVmLnJ1bnNTdG9yZS5yZWZyZXNoKCkpfWZldGNoRW52aXJvbm1lbnQoKXtyZXR1cm4gdGhpcy53ZWJhcHBEYXRhU291cmNlLmZldGNoRW52aXJvbm1lbnQoKS5waXBlKF9uKCh0PT57dGhpcy5zdG9yZS5kaXNwYXRjaChRRSh7ZW52aXJvbm1lbnQ6dH0pKX0pKSl9fWZBLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxmQSkodXModlMpLHVzKEVrKSx1cyhGRSkpfSxmQS7JtXByb3Y9bG8oe3Rva2VuOmZBLGZhY3Rvcnk6ZkEuybVmYWN9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGZBLFt7dHlwZTpKbX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTp2U30se3R5cGU6RWt9LHt0eXBlOkZFfV19KSxudWxsKTtjb25zdCBnQT1uZXcgTnIoIkNvcmUgRmVhdHVyZSBDb25maWciKTtmdW5jdGlvbiBoQSh0KXtyZXR1cm57aW5pdGlhbFN0YXRlOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxuQSkse2FjdGl2ZVBsdWdpbjp0LmdldFBsdWdpbklkKCl8fG51bGx9KX19Y2xhc3MgYkF7fWNvbnN0IHlBPSJfX3RhYl9fIjtjbGFzcyBfQXtjb25zdHJ1Y3Rvcigpe3RoaXMudGZTdG9yYWdlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRmLXN0b3JhZ2UiKSxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0Zi1nbG9iYWxzIikudGZfZ2xvYmFscy5zZXRVc2VIYXNoKCEwKSx0aGlzLnRmU3RvcmFnZS50Zl9zdG9yYWdlLm1pZ3JhdGVMZWdhY3lVUkxTY2hlbWUoKX1nZXRTdHJpbmcodCl7cmV0dXJuIHRoaXMudGZTdG9yYWdlLnRmX3N0b3JhZ2UuZ2V0U3RyaW5nKHQpfXNldFN0cmluZyh0LGUsbil7dGhpcy50ZlN0b3JhZ2UudGZfc3RvcmFnZS5zZXRTdHJpbmcodCxlLG4pfWdldFBsdWdpbklkKCl7cmV0dXJuIHRoaXMuZ2V0U3RyaW5nKHlBKX1zZXRQbHVnaW5JZCh0LGUpe3RoaXMuc2V0U3RyaW5nKHlBLHQsZSl9fV9BLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxfQSl9LF9BLsm1cHJvdj1sbyh7dG9rZW46X0EsZmFjdG9yeTpfQS7JtWZhY30pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoX0EsW3t0eXBlOkptfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW119KSxudWxsKTtjbGFzcyBDQXt9Q0EuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fENBKX0sQ0EuybVtb2Q9Wm8oe3R5cGU6Q0F9KSxDQS7JtWluaj1jbyh7cHJvdmlkZXJzOlt7cHJvdmlkZTpnQSxkZXBzOltiQV0sdXNlRmFjdG9yeTpoQX1dLGltcG9ydHM6W1tMUy5mb3JGZWF0dXJlKFtmQV0pLGlTLmZvckZlYXR1cmUoZUEsaUEsZ0EpLExFXV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKENBLHtpbXBvcnRzOltGUyxvUyxMRV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKENBLFt7dHlwZTprXyxhcmdzOlt7aW1wb3J0czpbTFMuZm9yRmVhdHVyZShbZkFdKSxpUy5mb3JGZWF0dXJlKGVBLGlBLGdBKSxMRV0scHJvdmlkZXJzOlt7cHJvdmlkZTpnQSxkZXBzOltiQV0sdXNlRmFjdG9yeTpoQX1dfV19XSxudWxsLG51bGwpO2NvbnN0IE1BPW5ldyBOcigiW0FsZXJ0XSBBY3Rpb24tVG8tQWxlcnQgUHJvdmlkZXIiKTtjbGFzcyB2QXtjb25zdHJ1Y3Rvcih0KXt0aGlzLnByb3ZpZGVycz1uZXcgTWFwO2Zvcihjb25zdCBlIG9mIHR8fFtdKWZvcihjb25zdCB0IG9mIGUpe2lmKHRoaXMucHJvdmlkZXJzLmhhcyh0LmFjdGlvbkNyZWF0b3IudHlwZSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYCIke3QuYWN0aW9uQ3JlYXRvci50eXBlfSIgaXMgYWxyZWFkeSByZWdpc3RlcmVkIGZvciBhbGVydHMuIE11bHRpcGxlIGFsZXJ0cyBmb3IgdGhlIHNhbWUgYWN0aW9uIGlzIG5vdCBhbGxvd2VkLmApO3RoaXMucHJvdmlkZXJzLnNldCh0LmFjdGlvbkNyZWF0b3IudHlwZSx0LmFsZXJ0RnJvbUFjdGlvbil9fWdldEFsZXJ0RnJvbUFjdGlvbih0KXtjb25zdCBlPXRoaXMucHJvdmlkZXJzLmdldCh0LnR5cGUpO3JldHVybiBlP2UodCk6bnVsbH1zdGF0aWMgcmVnaXN0ZXJBbGVydEFjdGlvbnModCl7cmV0dXJue25nTW9kdWxlOnZBLHByb3ZpZGVyczpbe3Byb3ZpZGU6TUEsbXVsdGk6ITAsdXNlRmFjdG9yeTp0fV19fX12QS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8dkEpKHVzKE1BLDgpKX0sdkEuybVtb2Q9Wm8oe3R5cGU6dkF9KSx2QS7JtWluaj1jbyh7fSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYih2QSxbe3R5cGU6a18sYXJnczpbe31dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbTUFdfV19XX0pLG51bGwpO2NvbnN0IHhBPSJocGFyYW1zIixPQT1XdygiW1J1bnNdIEZldGNoIFJ1bnMgUmVxdWVzdGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksUEE9V3coIltSdW5zXSBGZXRjaCBSdW5zIFN1Y2NlZWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHdBPVd3KCJbUnVuc10gRmV0Y2ggUnVucyBGYWlsZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxrQT1XdygiW1J1bnNdIFJ1biBTZWxlY3Rpb24gVG9nZ2xlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFNBPVd3KCJbUnVuc10gUnVuIFBhZ2UgU2VsZWN0aW9uIFRvZ2dsZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxEQT1XdygiW1J1bnNdIFJ1bnMgU2VsZWN0IEFsbCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLEVBPVd3KCJbUnVuc10gUnVuIFNlbGVjdG9yIFBhZ2luYXRpb24gT3B0aW9uIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxBQT1XdygiW1J1bnNdIFJ1biBTZWxlY3RvciBTb3J0IENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxSQT1XdygiW1J1bnNdIFJ1biBTZWxlY3RvciBSZWdleCBGaWx0ZXIgQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFRBPVd3KCJbUnVuc10gUnVuIENvbG9yIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxOQT1XdygiW1J1bnNdIFJ1biBUYWJsZSBTaG93biIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLElBPVd3KCJbUnVuc10gUnVuIEdyb3VwIEJ5IENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KTt2YXIgekEsSEEsRkEsTEE7IShmdW5jdGlvbih0KXt0LkRBVEFTRVRfVU5LTk9XTj0iREFUQVNFVF9VTktOT1dOIix0LkRBVEFTRVRfVFJBSU5JTkc9IkRBVEFTRVRfVFJBSU5JTkciLHQuREFUQVNFVF9WQUxJREFUSU9OPSJEQVRBU0VUX1ZBTElEQVRJT04ifSkoekF8fCh6QT17fSkpLChmdW5jdGlvbih0KXt0LlNUQVRVU19VTktOT1dOPSJTVEFUVVNfVU5LTk9XTiIsdC5TVEFUVVNfU1VDQ0VTUz0iU1RBVFVTX1NVQ0NFU1MiLHQuU1RBVFVTX0ZBSUxVUkU9IlNUQVRVU19GQUlMVVJFIix0LlNUQVRVU19SVU5OSU5HPSJTVEFUVVNfUlVOTklORyJ9KShIQXx8KEhBPXt9KSksKGZ1bmN0aW9uKHQpe3QuREFUQV9UWVBFX1VOU0VUPSJEQVRBX1RZUEVfVU5TRVQiLHQuREFUQV9UWVBFX1NUUklORz0iREFUQV9UWVBFX1NUUklORyIsdC5EQVRBX1RZUEVfQk9PTD0iREFUQV9UWVBFX0JPT0wiLHQuREFUQV9UWVBFX0ZMT0FUNjQ9IkRBVEFfVFlQRV9GTE9BVDY0In0pKEZBfHwoRkE9e30pKSwoZnVuY3Rpb24odCl7dFt0LkRJU0NSRVRFPTBdPSJESVNDUkVURSIsdFt0LklOVEVSVkFMPTFdPSJJTlRFUlZBTCJ9KShMQXx8KExBPXt9KSk7Y2xhc3MgQkF7fUJBLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxCQSl9LEJBLsm1cHJvdj1sbyh7dG9rZW46QkEsZmFjdG9yeTpCQS7JtWZhYyxwcm92aWRlZEluOiJyb290In0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoQkEsW3t0eXBlOkptLGFyZ3M6W3twcm92aWRlZEluOiJyb290In1dfV0sbnVsbCxudWxsKTtjb25zdCBWQT1XdygiW0hwYXJhbXNdIEhwYXJhbXMgRGlzY3JldGUgSHBhcmFtIEZpbHRlciBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksakE9V3coIltIcGFyYW1zXSBIcGFyYW1zIEludGVydmFsIEhwYXJhbSBGaWx0ZXIgQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFVBPVd3KCJbSHBhcmFtc10gSHBhcmFtcyBNZXRyaWMgRmlsdGVyIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KTtmdW5jdGlvbiBXQSh0KXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoWy4uLnRdLnNvcnQoKSl9ZnVuY3Rpb24gR0EodCl7dmFyIGUsbixvLGk7Y29uc3QgYT1uZXcgTWFwLHI9bmV3IE1hcCxzPW5ldyBNYXA7Zm9yKGNvbnN0IGEgb2YgdClmb3IoY29uc3RbdCxsXW9mIGEpaWYobC50eXBlPT09TEEuRElTQ1JFVEUpe2NvbnN0e3Bvc3NpYmxlVmFsdWVzOmUsdmFsdWVzOm59PXIuZ2V0KHQpfHx7cG9zc2libGVWYWx1ZXM6bmV3IFNldCx2YWx1ZXM6bmV3IFNldH07Zm9yKGNvbnN0IHQgb2YgbC5maWx0ZXJWYWx1ZXMpbi5hZGQodCk7Zm9yKGNvbnN0IHQgb2YgbC5wb3NzaWJsZVZhbHVlcyllLmFkZCh0KTtyLnNldCh0LHtwb3NzaWJsZVZhbHVlczplLHZhbHVlczpufSl9ZWxzZXtjb25zdCBhPXMuZ2V0KHQpO3Muc2V0KHQse2ZpbHRlckxvd2VyVmFsdWU6TWF0aC5taW4obC5maWx0ZXJMb3dlclZhbHVlLG51bGwhPT0oZT1udWxsPT1hP3ZvaWQgMDphLmZpbHRlckxvd2VyVmFsdWUpJiZ2b2lkIDAhPT1lP2U6MS8wKSxmaWx0ZXJVcHBlclZhbHVlOk1hdGgubWF4KGwuZmlsdGVyVXBwZXJWYWx1ZSxudWxsIT09KG49bnVsbD09YT92b2lkIDA6YS5maWx0ZXJVcHBlclZhbHVlKSYmdm9pZCAwIT09bj9uOi0xLzApLG1pblZhbHVlOk1hdGgubWluKGwubWluVmFsdWUsbnVsbCE9PShvPW51bGw9PWE/dm9pZCAwOmEubWluVmFsdWUpJiZ2b2lkIDAhPT1vP286MS8wKSxtYXhWYWx1ZTpNYXRoLm1heChsLm1heFZhbHVlLG51bGwhPT0oaT1udWxsPT1hP3ZvaWQgMDphLm1heFZhbHVlKSYmdm9pZCAwIT09aT9pOi0xLzApfSl9Zm9yKGNvbnN0W3Qse3ZhbHVlczplLHBvc3NpYmxlVmFsdWVzOm59XW9mIHIpYS5zZXQodCx7dHlwZTpMQS5ESVNDUkVURSxpbmNsdWRlVW5kZWZpbmVkOiEwLHBvc3NpYmxlVmFsdWVzOlsuLi5uXSxmaWx0ZXJWYWx1ZXM6Wy4uLmVdfSk7Zm9yKGNvbnN0W3Qse21pblZhbHVlOmUsbWF4VmFsdWU6bixmaWx0ZXJMb3dlclZhbHVlOm8sZmlsdGVyVXBwZXJWYWx1ZTppfV1vZiBzKXtpZihhLmhhcyh0KSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgQ2Fubm90IGNvbWJpbmUgaHBhcmFtLCAke3R9LCBhcyBpdCBpcyBvZiBtaXhlZCB0eXBlcy5gKTthLnNldCh0LHt0eXBlOkxBLklOVEVSVkFMLGluY2x1ZGVVbmRlZmluZWQ6ITAsbWluVmFsdWU6ZSxtYXhWYWx1ZTpuLGZpbHRlckxvd2VyVmFsdWU6byxmaWx0ZXJVcHBlclZhbHVlOml9KX1yZXR1cm4gYX1mdW5jdGlvbiBZQSh0KXt2YXIgZSxuLG8saTtjb25zdCBhPW5ldyBNYXA7Zm9yKGNvbnN0IHIgb2YgdClmb3IoY29uc3RbdCxzXW9mIHIpe2NvbnN0IHI9YS5nZXQodCk7YS5zZXQodCxPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe3R5cGU6TEEuSU5URVJWQUwsaW5jbHVkZVVuZGVmaW5lZDohMH0scikse21pblZhbHVlOk1hdGgubWluKHMubWluVmFsdWUsbnVsbCE9PShlPW51bGw9PXI/dm9pZCAwOnIubWluVmFsdWUpJiZ2b2lkIDAhPT1lP2U6MS8wKSxtYXhWYWx1ZTpNYXRoLm1heChzLm1heFZhbHVlLG51bGwhPT0obj1udWxsPT1yP3ZvaWQgMDpyLm1heFZhbHVlKSYmdm9pZCAwIT09bj9uOi0xLzApLGZpbHRlckxvd2VyVmFsdWU6TWF0aC5taW4ocy5maWx0ZXJMb3dlclZhbHVlLG51bGwhPT0obz1udWxsPT1yP3ZvaWQgMDpyLmZpbHRlckxvd2VyVmFsdWUpJiZ2b2lkIDAhPT1vP286MS8wKSxmaWx0ZXJVcHBlclZhbHVlOk1hdGgubWF4KHMuZmlsdGVyVXBwZXJWYWx1ZSxudWxsIT09KGk9bnVsbD09cj92b2lkIDA6ci5maWx0ZXJVcHBlclZhbHVlKSYmdm9pZCAwIT09aT9pOi0xLzApfSkpfXJldHVybiBhfWNvbnN0IHFBPW1TKHtzcGVjczp7fSxmaWx0ZXJzOnt9fSxwUyhWQSwoKHQsZSk9Pnt2YXIgbjtjb25zdHtleHBlcmltZW50SWRzOm8saHBhcmFtTmFtZTppLGZpbHRlclZhbHVlczphLGluY2x1ZGVVbmRlZmluZWQ6cn09ZSxzPVdBKG8pLGw9bnVsbCE9PShuPXQuZmlsdGVyc1tzXSkmJnZvaWQgMCE9PW4/bjp7aHBhcmFtczpuZXcgTWFwfSxjPWwuaHBhcmFtcy5nZXQoaSk7aWYoYyYmYy50eXBlIT09TEEuRElTQ1JFVEUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYE5ldyBkaXNjcmV0ZSBmaWx0ZXIgb2YgJHtpfSBjb25mbGljdHMgZXhpc3RpbmcgZmlsdGVyIG9mIGArTEFbYy50eXBlXSk7Y29uc3QgZD1HQShvLmZpbHRlcigoZT0+Qm9vbGVhbih0LnNwZWNzW2VdKSkpLm1hcCgoZT0+dC5zcGVjc1tlXS5ocGFyYW0uZGVmYXVsdEZpbHRlcnMpKSkuZ2V0KGkpO2lmKCFkKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IHNldCBocGFyYW0sICR7aX0sIHdoZW4gaXQgaXMgbm90IGtub3duIGZvciBleHBlcmltZW50SWRzOiAke28uam9pbigiLCAiKX1gKTtpZihkLnR5cGUhPT1MQS5ESVNDUkVURSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBzZXQgJHtpfSB3aGVuIGRlZmF1bHQgZmlsdGVyIGlzIG5vdCBvZiBkaXNjcmV0ZSB0eXBlLmApO2NvbnN0IHA9bmV3IFNldChkLnBvc3NpYmxlVmFsdWVzKSxtPVsuLi5hXS5maWx0ZXIoKHQ9PiFwLmhhcyh0KSkpO2lmKG0ubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgTmV3IGZpbHRlciBmb3IgJHtpfSBoYXMgbW9yZSB0aGFuIG9uZSB2YWx1ZSB0aGF0IGlzIG5vdCBwcmVzZW50IGluIHRoZSBzcGVjLiBCYWQgdmFsdWVzOiAke20uam9pbigiLCAiKX1gKTtjb25zdCB1PW5ldyBNYXAobC5ocGFyYW1zKTtyZXR1cm4gdS5zZXQoaSxPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sYykse3R5cGU6TEEuRElTQ1JFVEUsaW5jbHVkZVVuZGVmaW5lZDpyLHBvc3NpYmxlVmFsdWVzOlsuLi5wXSxmaWx0ZXJWYWx1ZXM6YX0pKSxPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2ZpbHRlcnM6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuZmlsdGVycykse1tzXTpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sbCkse2hwYXJhbXM6dX0pfSl9KX0pKSxwUyhqQSwoKHQsZSk9Pnt2YXIgbjtjb25zdHtleHBlcmltZW50SWRzOm8saHBhcmFtTmFtZTppLGZpbHRlckxvd2VyVmFsdWU6YSxmaWx0ZXJVcHBlclZhbHVlOnIsaW5jbHVkZVVuZGVmaW5lZDpzfT1lLGw9V0EobyksYz1udWxsIT09KG49dC5maWx0ZXJzW2xdKSYmdm9pZCAwIT09bj9uOnttZXRyaWNzOm5ldyBNYXAsaHBhcmFtczpuZXcgTWFwfSxkPWMuaHBhcmFtcy5nZXQoaSk7aWYoZCYmZC50eXBlIT09TEEuSU5URVJWQUwpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYE5ldyBpbnRlcnZhbCBmaWx0ZXIgb2YgJHtpfSBjb25mbGljdHMgZXhpc3RpbmcgZmlsdGVyIG9mIGArTEFbZC50eXBlXSk7Y29uc3QgcD1HQShvLmZpbHRlcigoZT0+Qm9vbGVhbih0LnNwZWNzW2VdKSkpLm1hcCgoZT0+dC5zcGVjc1tlXS5ocGFyYW0uZGVmYXVsdEZpbHRlcnMpKSkuZ2V0KGkpO2lmKCFwKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IHNldCBocGFyYSwgJHtpfSwgd2hlbiBpdCBpcyBub3Qga25vd24gZm9yIGV4cGVyaW1lbnRJZHM6ICR7by5qb2luKCIsICIpfWApO2lmKHAudHlwZSE9PUxBLklOVEVSVkFMKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IHNldCAke2l9IHdoZW4gZGVmYXVsdCBmaWx0ZXIgaXMgbm90IG9mIGludGVydmFsIHR5cGUuYCk7Y29uc3QgbT1uZXcgTWFwKGMuaHBhcmFtcyk7cmV0dXJuIG0uc2V0KGksT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGQpLHt0eXBlOkxBLklOVEVSVkFMLGluY2x1ZGVVbmRlZmluZWQ6cyxtaW5WYWx1ZTpwLm1pblZhbHVlLG1heFZhbHVlOnAubWF4VmFsdWUsZmlsdGVyTG93ZXJWYWx1ZTphLGZpbHRlclVwcGVyVmFsdWU6cn0pKSxPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2ZpbHRlcnM6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuZmlsdGVycykse1tsXTpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sYykse2hwYXJhbXM6bX0pfSl9KX0pKSxwUyhVQSwoKHQsZSk9Pnt2YXIgbjtjb25zdHtleHBlcmltZW50SWRzOm8sbWV0cmljVGFnOmksZmlsdGVyTG93ZXJWYWx1ZTphLGZpbHRlclVwcGVyVmFsdWU6cixpbmNsdWRlVW5kZWZpbmVkOnN9PWUsbD1XQShvKSxjPW51bGwhPT0obj10LmZpbHRlcnNbbF0pJiZ2b2lkIDAhPT1uP246e21ldHJpY3M6bmV3IE1hcCxocGFyYW1zOm5ldyBNYXB9LGQ9WUEoby5maWx0ZXIoKGU9PkJvb2xlYW4odC5zcGVjc1tlXSkpKS5tYXAoKGU9PnQuc3BlY3NbZV0ubWV0cmljLmRlZmF1bHRGaWx0ZXJzKSkpLmdldChpKTtpZighZCl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBzZXQgbWV0cmljLCAke2l9LCB3aGVuIGl0IGlzIG5vdCBrbm93biBmb3IgZXhwZXJpbWVudElkczogJHtvLmpvaW4oIiwgIil9YCk7Y29uc3QgcD1jLm1ldHJpY3MuZ2V0KGkpLG09bmV3IE1hcChjLm1ldHJpY3MpO3JldHVybiBtLnNldChpLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxwKSx7dHlwZTpMQS5JTlRFUlZBTCxpbmNsdWRlVW5kZWZpbmVkOnMsbWluVmFsdWU6ZC5taW5WYWx1ZSxtYXhWYWx1ZTpkLm1heFZhbHVlLGZpbHRlckxvd2VyVmFsdWU6YSxmaWx0ZXJVcHBlclZhbHVlOnJ9KSksT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtmaWx0ZXJzOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LmZpbHRlcnMpLHtbbF06T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGMpLHttZXRyaWNzOm19KX0pfSl9KSkscFMoUEEsKCh0LGUpPT57dmFyIG4sbyxpLGE7aWYoMD09PU9iamVjdC5rZXlzKGUubmV3UnVuc0FuZE1ldGFkYXRhKS5sZW5ndGgpcmV0dXJuIHQ7Y29uc3Qgcj1PYmplY3QuYXNzaWduKHt9LHQuc3BlY3MpLHM9bmV3IE1hcCxsPW5ldyBTZXQ7Zm9yKGNvbnN0IHQgb2YgT2JqZWN0LmtleXMoZS5uZXdSdW5zQW5kTWV0YWRhdGEpKXtjb25zdCBjPW5ldyBNYXAsZD1uZXcgTWFwLHA9bmV3IE1hcCxtPW5ldyBNYXAse3J1bnM6dSxtZXRhZGF0YTpmfT1lLm5ld1J1bnNBbmRNZXRhZGF0YVt0XTtmb3IoY29uc3QgdCBvZiB1KXtjb25zdCBlPWYucnVuVG9IcGFyYW1zQW5kTWV0cmljc1t0LmlkXTtpZihlKWZvcihjb25zdCB0IG9mIGUubWV0cmljcyl7Y29uc3QgZT1zLmdldCh0LnRhZyk7cy5zZXQodC50YWcse21pbjplP01hdGgubWluKGUubWluLHQudmFsdWUpOnQudmFsdWUsbWF4OmU/TWF0aC5tYXgoZS5tYXgsdC52YWx1ZSk6dC52YWx1ZX0pfX1mb3IoY29uc3R7bmFtZTp0LGRvbWFpbjplfW9mIGYuaHBhcmFtU3BlY3MpaWYoZS50eXBlPT09TEEuRElTQ1JFVEUpe2NvbnN0IG49cC5nZXQodCl8fG5ldyBTZXQ7Zm9yKGNvbnN0IHQgb2YgZS52YWx1ZXMpbi5hZGQodCk7cC5zZXQodCxuKX1lbHNle2NvbnN0IG49bS5nZXQodCk7bS5zZXQodCx7bWluVmFsdWU6bj9NYXRoLm1pbihlLm1pblZhbHVlLG4ubWluVmFsdWUpOmUubWluVmFsdWUsbWF4VmFsdWU6bj9NYXRoLm1heChlLm1heFZhbHVlLG4ubWF4VmFsdWUpOmUubWF4VmFsdWV9KX1mb3IoY29uc3QgdCBvZiBmLm1ldHJpY1NwZWNzKWwuYWRkKHQudGFnKTtmb3IoY29uc3RbdCxlXW9mIHApYy5zZXQodCx7dHlwZTpMQS5ESVNDUkVURSxpbmNsdWRlVW5kZWZpbmVkOiEwLHBvc3NpYmxlVmFsdWVzOlsuLi5lXSxmaWx0ZXJWYWx1ZXM6Wy4uLmVdfSk7Zm9yKGNvbnN0W3Qse21pblZhbHVlOmUsbWF4VmFsdWU6bn1db2YgbSljLnNldCh0LHt0eXBlOkxBLklOVEVSVkFMLGluY2x1ZGVVbmRlZmluZWQ6ITAsbWluVmFsdWU6ZSxtYXhWYWx1ZTpuLGZpbHRlckxvd2VyVmFsdWU6ZSxmaWx0ZXJVcHBlclZhbHVlOm59KTtmb3IoY29uc3QgdCBvZiBsKXtjb25zdCBlPXMuZ2V0KHQpLGk9bnVsbCE9PShuPW51bGw9PWU/dm9pZCAwOmUubWluKSYmdm9pZCAwIT09bj9uOjAsYT1udWxsIT09KG89bnVsbD09ZT92b2lkIDA6ZS5tYXgpJiZ2b2lkIDAhPT1vP286MDtkLnNldCh0LHt0eXBlOkxBLklOVEVSVkFMLGluY2x1ZGVVbmRlZmluZWQ6ITAsbWluVmFsdWU6aSxtYXhWYWx1ZTphLGZpbHRlckxvd2VyVmFsdWU6aSxmaWx0ZXJVcHBlclZhbHVlOmF9KX1yW3RdPXtocGFyYW06T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LG51bGw9PT0oaT1yW3RdKXx8dm9pZCAwPT09aT92b2lkIDA6aS5ocGFyYW0pLHtzcGVjczpmLmhwYXJhbVNwZWNzLGRlZmF1bHRGaWx0ZXJzOmN9KSxtZXRyaWM6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LG51bGw9PT0oYT1yW3RdKXx8dm9pZCAwPT09YT92b2lkIDA6YS5tZXRyaWMpLHtzcGVjczpmLm1ldHJpY1NwZWNzLGRlZmF1bHRGaWx0ZXJzOmR9KX19cmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7c3BlY3M6cn0pfSkpKTtmdW5jdGlvbiBaQSh0LGUpe3JldHVybiBxQSh0LGUpfWNsYXNzIFhBe31YQS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8WEEpfSxYQS7JtW1vZD1abyh7dHlwZTpYQX0pLFhBLsm1aW5qPWNvKHtpbXBvcnRzOltbaVMuZm9yRmVhdHVyZSh4QSxaQSldXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oWEEse2ltcG9ydHM6W29TXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoWEEsW3t0eXBlOmtfLGFyZ3M6W3tpbXBvcnRzOltpUy5mb3JGZWF0dXJlKHhBLFpBKV19XX1dLG51bGwsbnVsbCk7Y2xhc3MgS0F7fWZ1bmN0aW9uIEpBKHQsZSl7cmV0dXJuYCR7ZX0vJHt0fWB9S0EuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEtBKX0sS0EuybVtb2Q9Wm8oe3R5cGU6S0F9KSxLQS7JtWluaj1jbyh7aW1wb3J0czpbW1hBXV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKEtBLHtpbXBvcnRzOltYQV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEtBLFt7dHlwZTprXyxhcmdzOlt7aW1wb3J0czpbWEFdfV19XSxudWxsLG51bGwpO2NsYXNzIFFBe2NvbnN0cnVjdG9yKHQpe3RoaXMuaHR0cD10fWZldGNoUnVucyh0KXtyZXR1cm4gdGhpcy5odHRwLmdldCgiZGF0YS9ydW5zIikucGlwZShodCgoZT0+ZS5tYXAoKGU9Pih7aWQ6SkEoZSx0KSxuYW1lOmUsc3RhcnRUaW1lOjB9KSkpKSkpfWZldGNoSHBhcmFtc01ldGFkYXRhKHQpe3JldHVybiBaKHtocGFyYW1TcGVjczpbXSxtZXRyaWNTcGVjczpbXSxydW5Ub0hwYXJhbXNBbmRNZXRyaWNzOnt9fSl9fVFBLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxRQSkodXMoRUUpKX0sUUEuybVwcm92PWxvKHt0b2tlbjpRQSxmYWN0b3J5OlFBLsm1ZmFjfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihRQSxbe3R5cGU6Sm19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6RUV9XX0pLG51bGwpO2NsYXNzICRBe30kQS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8JEEpfSwkQS7JtW1vZD1abyh7dHlwZTokQX0pLCRBLsm1aW5qPWNvKHtwcm92aWRlcnM6W3twcm92aWRlOkJBLHVzZUNsYXNzOlFBfV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKCRBLFt7dHlwZTprXyxhcmdzOlt7cHJvdmlkZXJzOlt7cHJvdmlkZTpCQSx1c2VDbGFzczpRQX1dfV19XSxudWxsLG51bGwpO2NvbnN0IHRSPSJhbGVydHMiLGVSPXprKEZrKHRSKSwodD0+dC5sYXRlc3RBbGVydCkpLG5SPSJleHBlcmltZW50cyIsb1I9emsoRmsoblIpLCh0PT50LmRhdGEpKSxpUj16ayhvUiwoKHQsZSk9Pntjb25zdHtleHBlcmltZW50SWQ6bn09ZTtyZXR1cm4gdC5leHBlcmltZW50TWFwW25dfHxudWxsfSkpOwovKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLgoKICAgIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQogICAgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLgoKICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRICiAgICBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkKICAgIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCwKICAgIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTQogICAgTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IKICAgIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IKICAgIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCiAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwpmdW5jdGlvbiBhUih0LGUpe3ZhciBuPXt9O2Zvcih2YXIgbyBpbiB0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG8pJiZlLmluZGV4T2Yobyk8MCYmKG5bb109dFtvXSk7aWYobnVsbCE9dCYmImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBpPTA7Zm9yKG89T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KTtpPG8ubGVuZ3RoO2krKyllLmluZGV4T2Yob1tpXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHQsb1tpXSkmJihuW29baV1dPXRbb1tpXV0pfXJldHVybiBufWZ1bmN0aW9uIHJSKHQsZSxuLG8pe3JldHVybiBuZXcobnx8KG49UHJvbWlzZSkpKChmdW5jdGlvbihpLGEpe2Z1bmN0aW9uIHIodCl7dHJ5e2woby5uZXh0KHQpKX1jYXRjaCh0KXthKHQpfX1mdW5jdGlvbiBzKHQpe3RyeXtsKG8udGhyb3codCkpfWNhdGNoKHQpe2EodCl9fWZ1bmN0aW9uIGwodCl7dC5kb25lP2kodC52YWx1ZSk6KGZ1bmN0aW9uIGUodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBuP3Q6bmV3IG4oKGZ1bmN0aW9uKGUpe2UodCl9KSl9KSh0LnZhbHVlKS50aGVuKHIscyl9bCgobz1vLmFwcGx5KHQsZXx8W10pKS5uZXh0KCkpfSkpfXZhciBzUixsUixjUjshKGZ1bmN0aW9uKHQpe3QuU0NBTEFSUz0ic2NhbGFycyIsdC5ISVNUT0dSQU1TPSJoaXN0b2dyYW1zIix0LklNQUdFUz0iaW1hZ2VzIn0pKHNSfHwoc1I9e30pKSwoZnVuY3Rpb24odCl7dC5ERUZBVUxUPSJkZWZhdWx0Iix0LkFTQ0VORElORz0iYXNjZW5kaW5nIix0LkRFU0NFTkRJTkc9ImRlc2NlbmRpbmciLHQuTkVBUkVTVD0ibmVhcmVzdCJ9KShsUnx8KGxSPXt9KSksKGZ1bmN0aW9uKHQpe3RbdC5TVEVQPTBdPSJTVEVQIix0W3QuUkVMQVRJVkU9MV09IlJFTEFUSVZFIix0W3QuV0FMTF9USU1FPTJdPSJXQUxMX1RJTUUifSkoY1J8fChjUj17fSkpO2NvbnN0IGRSPSJ0aW1lc2VyaWVzIixwUj1bc1IuSU1BR0VTXTtmdW5jdGlvbiBtUih0KXtyZXR1cm4gcFIuaW5jbHVkZXModCl9Y29uc3QgdVI9W3NSLkhJU1RPR1JBTVMsc1IuSU1BR0VTXTtmdW5jdGlvbiBmUih0KXtyZXR1cm4gdVIuaW5jbHVkZXModCl9ZnVuY3Rpb24gZ1IodCl7cmV0dXJuIGZSKHQucGx1Z2luKX1jbGFzcyBoUnt9ZnVuY3Rpb24gYlIodCl7cmV0dXJuIHQuaGFzT3duUHJvcGVydHkoImVycm9yIil9Y29uc3QgeVI9ImRhdGEvcGx1Z2luL3RpbWVzZXJpZXMiO2Z1bmN0aW9uIF9SKHQpe2NvbnN0IGU9dC5pbmRleE9mKCIvIik7cmV0dXJue3J1bjp0LnN1YnN0cmluZyhlKzEpLGV4cGVyaW1lbnRJZDp0LnN1YnN0cmluZygwLGUpfX1mdW5jdGlvbiBDUih0LGUpe3JldHVybmAke2V9LyR7dH1gfWZ1bmN0aW9uIE1SKHQsZSl7Y29uc3R7cnVuVG9TZXJpZXM6bixydW46b309dCxpPWFSKHQsWyJydW5Ub1NlcmllcyIsInJ1biJdKSxhPU9iamVjdC5hc3NpZ24oe30saSk7cmV0dXJuIG4mJihhLnJ1blRvU2VyaWVzPXZSKG4sZSkpLG8mJihhLnJ1bklkPUNSKG8sZSkpLGF9ZnVuY3Rpb24gdlIodCxlKXtjb25zdCBuPXt9O2Zvcihjb25zdCBvIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShvKSYmKG5bQ1IobyxlKV09dFtvXSk7cmV0dXJuIG59Y2xhc3MgeFJ7Y29uc3RydWN0b3IodCxlKXt0aGlzLmh0dHA9dCx0aGlzLnN0b3JlPWV9ZmV0Y2hUYWdNZXRhZGF0YSh0KXtjb25zdCBlPXQubWFwKCh0PT50aGlzLmh0dHAuZ2V0KGAvZXhwZXJpbWVudC8ke3R9LyR7eVJ9L3RhZ3NgKS5waXBlKGh0KChlPT4oZnVuY3Rpb24gbih0LGUpe2NvbnN0IG49e307Zm9yKGNvbnN0IG8gb2YgT2JqZWN0LmtleXModCkpe2NvbnN0IGk9bztpZihtUihpKSl7Y29uc3Qgbz10W2ldLHt0YWdSdW5TYW1wbGVkSW5mbzphfT1vLHI9YVIobyxbInRhZ1J1blNhbXBsZWRJbmZvIl0pLHM9e307Zm9yKGNvbnN0IHQgaW4gYSlhLmhhc093blByb3BlcnR5KHQpJiYoc1t0XT12UihhW3RdLGUpKTtuW2ldPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxyKSx7dGFnUnVuU2FtcGxlZEluZm86c30pfWVsc2V7Y29uc3Qgbz10W2ldLHtydW5UYWdJbmZvOmF9PW8scj1hUihvLFsicnVuVGFnSW5mbyJdKTtuW2ldPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxyKSx7cnVuVGFnSW5mbzp2UihhLGUpfSl9fXJldHVybiBufSkoZSx0KSkpKSkpLG49dGhpcy5zdG9yZS5zZWxlY3QoYkUpLnBpcGUoR3QoQm9vbGVhbiksTmUoMSksa24odGhpcy5zdG9yZS5zZWxlY3Qoa0UpKSxodCgoKFssdF0pPT50KSkpO3JldHVybiBMdChlKS5waXBlKGtuKG4pLGh0KCgoW3QsZV0pPT57Y29uc3Qgbj0oZnVuY3Rpb24gbyh0KXtjb25zdCBlPXt9O2Zvcihjb25zdCBuIG9mIHQpZm9yKGNvbnN0IHQgb2YgT2JqZWN0LnZhbHVlcyhzUikpaWYobVIodCkpe2VbdF09ZVt0XXx8e3RhZ0Rlc2NyaXB0aW9uczp7fSx0YWdSdW5TYW1wbGVkSW5mbzp7fX07Y29uc3R7dGFnRGVzY3JpcHRpb25zOm8sdGFnUnVuU2FtcGxlZEluZm86aX09blt0XTtlW3RdLnRhZ0Rlc2NyaXB0aW9ucz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZVt0XS50YWdEZXNjcmlwdGlvbnMpLG8pO2NvbnN0IGE9ZVt0XS50YWdSdW5TYW1wbGVkSW5mbztmb3IoY29uc3QgdCBvZiBPYmplY3Qua2V5cyhpKSl7YVt0XT1hW3RdfHx7fTtmb3IoY29uc3QgZSBvZiBPYmplY3Qua2V5cyhpW3RdKSlhW3RdW2VdPWlbdF1bZV19fWVsc2V7ZVt0XT1lW3RdfHx7dGFnRGVzY3JpcHRpb25zOnt9LHJ1blRhZ0luZm86e319O2NvbnN0e3RhZ0Rlc2NyaXB0aW9uczpvLHJ1blRhZ0luZm86aX09blt0XTtlW3RdLnRhZ0Rlc2NyaXB0aW9ucz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZVt0XS50YWdEZXNjcmlwdGlvbnMpLG8pLGVbdF0ucnVuVGFnSW5mbz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZVt0XS5ydW5UYWdJbmZvKSxpKX1yZXR1cm4gZX0pKHQpO3JldHVybiBlfHwobltzUi5JTUFHRVNdPXt0YWdEZXNjcmlwdGlvbnM6e30sdGFnUnVuU2FtcGxlZEluZm86e319KSxufSkpKX1mZXRjaFRpbWVTZXJpZXModCl7Y29uc3QgZT10Lm1hcCgodD0+e2lmKGZSKHQucGx1Z2luKSl7Y29uc3QgZT10LHtydW5JZDpufT1lLG89YVIoZSxbInJ1bklkIl0pLHtydW46aSxleHBlcmltZW50SWQ6YX09X1Iobikscj1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sbykse3J1bjppfSk7cmV0dXJuIHRoaXMuZmV0Y2hUaW1lU2VyaWVzQmFja2VuZFJlcXVlc3QocixhKS5waXBlKGh0KCgoe3Jlc3BvbnNlOnQsZXhwZXJpbWVudElkOmV9KT0+TVIodCxlKSkpKX1jb25zdCBlPXQse2V4cGVyaW1lbnRJZHM6bn09ZSxvPWFSKGUsWyJleHBlcmltZW50SWRzIl0pO3JldHVybiBMdChuLm1hcCgodD0+dGhpcy5mZXRjaFRpbWVTZXJpZXNCYWNrZW5kUmVxdWVzdChvLHQpKSkpLnBpcGUoaHQoKHQ9Pntjb25zdCBlPWFSKHRbMF0ucmVzcG9uc2UsWyJydW5Ub1NlcmllcyIsImVycm9yIl0pO2Zvcihjb25zdHtyZXNwb25zZTpuLGV4cGVyaW1lbnRJZDpvfW9mIHQpe2NvbnN0IHQ9TVIobixvKTtpZihlLmVycm9yKWNvbnRpbnVlO2NvbnN0e3J1blRvU2VyaWVzOmksZXJyb3I6YX09dDtpZihhKWUuZXJyb3I9YSxlLnJ1blRvU2VyaWVzPXZvaWQgMDtlbHNle2UucnVuVG9TZXJpZXM9ZS5ydW5Ub1Nlcmllc3x8e307Zm9yKGNvbnN0IHQgb2YgT2JqZWN0LmtleXMoaSkpZS5ydW5Ub1Nlcmllc1t0XT1pW3RdfX1yZXR1cm4gZX0pKSl9KSk7cmV0dXJuIEx0KGUpfWZldGNoVGltZVNlcmllc0JhY2tlbmRSZXF1ZXN0KHQsZSl7Y29uc3Qgbj1uZXcgRm9ybURhdGE7cmV0dXJuIG4uYXBwZW5kKCJyZXF1ZXN0cyIsSlNPTi5zdHJpbmdpZnkoW3RdKSksdGhpcy5odHRwLnBvc3QoYC9leHBlcmltZW50LyR7ZX0vJHt5Un0vdGltZVNlcmllc2AsbikucGlwZShodCgodD0+KHtyZXNwb25zZTp0WzBdLGV4cGVyaW1lbnRJZDplfSkpKSl9aW1hZ2VVcmwodCl7cmV0dXJuYCR7eVJ9L2ltYWdlRGF0YT9pbWFnZUlkPSR7dH1gfWRvd25sb2FkVXJsKHQsZSxuLG8pe2NvbnN0e3J1bjppLGV4cGVyaW1lbnRJZDphfT1fUihuKTtsZXQgcjtzd2l0Y2godCl7Y2FzZSBzUi5TQ0FMQVJTOnI9InNjYWxhcnMvc2NhbGFycyI7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYE5vdCBpbXBsZW1lbnRlZDogZG93bmxvYWRVcmwgZm9yICR7dH0gaXMgbm90IGltcGxlbWVudGVkIHlldGApfWlmKCFhKXRocm93IG5ldyBFcnJvcigiZXhwZXJpbWVudElkIGlzIGVtcHR5OyBpdCBpcyByZXF1aXJlZCB0byBmb3JtIGRvd25sb2FkVXJsLiIpO3JldHVybmAvZXhwZXJpbWVudC8ke2F9L2RhdGEvcGx1Z2luLyR7cn0/JHtuZXcgVVJMU2VhcmNoUGFyYW1zKHt0YWc6ZSxydW46aSxmb3JtYXQ6b30pfWB9fXZhciBPUjt4Ui7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8eFIpKHVzKEVFKSx1cyhFaykpfSx4Ui7JtXByb3Y9bG8oe3Rva2VuOnhSLGZhY3Rvcnk6eFIuybVmYWN9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHhSLFt7dHlwZTpKbX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpFRX0se3R5cGU6RWt9XX0pLG51bGwpLChmdW5jdGlvbih0KXt0LkJST1dTRVJfREVGQVVMVD0iYnJvd3Nlcl9kZWZhdWx0Iix0LkxJR0hUPSJsaWdodCIsdC5EQVJLPSJkYXJrIn0pKE9SfHwoT1I9e30pKTtjb25zdCBQUj1XdygiW1BlcnNpc3RlbnQgU2V0dGluZ3NdIEdsb2JhbCBTZXR0aW5ncyBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSx3Uj1uZXcgTnIoIltQZXJzaXN0ZW50IFNldHRpbmdzXSBHbG9iYWwgU2V0dGluZ3MiKTtjbGFzcyBrUntjb25zdHJ1Y3Rvcih0KXt0aGlzLmdsb2JhbFNldHRpbmdTZWxlY3RvcnM9W10sdCYmKHRoaXMuZ2xvYmFsU2V0dGluZ1NlbGVjdG9ycz10Lm1hcCgodD0+dCgpKSkpfWdldEdsb2JhbFNldHRpbmdTZWxlY3RvcnMoKXt2YXIgdDtyZXR1cm4gbnVsbCE9PSh0PXRoaXMuZ2xvYmFsU2V0dGluZ1NlbGVjdG9ycykmJnZvaWQgMCE9PXQ/dDpbXX1zdGF0aWMgZGVmaW5lR2xvYmFsU2V0dGluZyh0KXtyZXR1cm57bmdNb2R1bGU6a1IscHJvdmlkZXJzOlt7cHJvdmlkZTp3UixtdWx0aTohMCx1c2VWYWx1ZTp0fV19fX1rUi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8a1IpKHVzKHdSLDgpKX0sa1IuybVtb2Q9Wm8oe3R5cGU6a1J9KSxrUi7JtWluaj1jbyh7fSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihrUixbe3R5cGU6a199XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6QXJyYXksZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W3dSXX1dfV19KSxudWxsKTtjbGFzcyBTUntzZXRJdGVtKHQsZSl7bG9jYWxTdG9yYWdlLnNldEl0ZW0odCxlKX1nZXRJdGVtKHQpe3JldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0KX1yZW1vdmVJdGVtKHQpe2xvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHQpfX1TUi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8U1IpfSxTUi7JtXByb3Y9bG8oe3Rva2VuOlNSLGZhY3Rvcnk6U1IuybVmYWN9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFNSLFt7dHlwZTpKbX1dLG51bGwsbnVsbCk7Y2xhc3MgRFJ7fURSLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxEUil9LERSLsm1bW9kPVpvKHt0eXBlOkRSfSksRFIuybVpbmo9Y28oe3Byb3ZpZGVyczpbU1JdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihEUixbe3R5cGU6a18sYXJnczpbe3Byb3ZpZGVyczpbU1JdfV19XSxudWxsLG51bGwpO2NvbnN0IEVSPSJfdGJfZ2xvYmFsX3NldHRpbmdzLnRpbWVzZXJpZXMiLEFSPSJfdGJfZ2xvYmFsX3NldHRpbmdzIixSUj0ibm90aWZpY2F0aW9uTGFzdFJlYWRUaW1lc3RhbXAiO2NsYXNzIFRSe31UUi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8VFIpfSxUUi7JtXByb3Y9bG8oe3Rva2VuOlRSLGZhY3Rvcnk6VFIuybVmYWN9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFRSLFt7dHlwZTpKbX1dLG51bGwsbnVsbCk7Y2xhc3MgTlJ7fU5SLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxOUil9LE5SLsm1cHJvdj1sbyh7dG9rZW46TlIsZmFjdG9yeTpOUi7JtWZhY30pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoTlIsW3t0eXBlOkptfV0sbnVsbCxudWxsKTtjbGFzcyBJUiBleHRlbmRzIE5Se3VpVG9CYWNrZW5kKHQpe3JldHVybntpZ25vcmVPdXRsaWVyczp0Lmlnbm9yZU91dGxpZXJzLHNjYWxhclNtb290aGluZzp0LnNjYWxhclNtb290aGluZyx0b29sdGlwU29ydDp0LnRvb2x0aXBTb3J0U3RyaW5nLGF1dG9SZWxvYWQ6dC5hdXRvUmVsb2FkLGF1dG9SZWxvYWRQZXJpb2RJbk1zOnQuYXV0b1JlbG9hZFBlcmlvZEluTXMscGFnaW5hdGlvblNpemU6dC5wYWdlU2l6ZSx0aGVtZTp0LnRoZW1lT3ZlcnJpZGUsbm90aWZpY2F0aW9uTGFzdFJlYWRUaW1lSW5Nczp0Lm5vdGlmaWNhdGlvbkxhc3RSZWFkVGltZUluTXN9fWJhY2tlbmRUb1VpKHQpe2NvbnN0IGU9e307cmV0dXJuIHQuaGFzT3duUHJvcGVydHkoInNjYWxhclNtb290aGluZyIpJiYibnVtYmVyIj09dHlwZW9mIHQuc2NhbGFyU21vb3RoaW5nJiYoZS5zY2FsYXJTbW9vdGhpbmc9dC5zY2FsYXJTbW9vdGhpbmcpLHQuaGFzT3duUHJvcGVydHkoImlnbm9yZU91dGxpZXJzIikmJiJib29sZWFuIj09dHlwZW9mIHQuaWdub3JlT3V0bGllcnMmJihlLmlnbm9yZU91dGxpZXJzPXQuaWdub3JlT3V0bGllcnMpLHQuaGFzT3duUHJvcGVydHkoInRvb2x0aXBTb3J0IikmJiJzdHJpbmciPT10eXBlb2YgdC50b29sdGlwU29ydCYmKGUudG9vbHRpcFNvcnRTdHJpbmc9dC50b29sdGlwU29ydCksdC5oYXNPd25Qcm9wZXJ0eSgiYXV0b1JlbG9hZCIpJiYiYm9vbGVhbiI9PXR5cGVvZiB0LmF1dG9SZWxvYWQmJihlLmF1dG9SZWxvYWQ9dC5hdXRvUmVsb2FkKSx0Lmhhc093blByb3BlcnR5KCJhdXRvUmVsb2FkUGVyaW9kSW5NcyIpJiYibnVtYmVyIj09dHlwZW9mIHQuYXV0b1JlbG9hZFBlcmlvZEluTXMmJihlLmF1dG9SZWxvYWRQZXJpb2RJbk1zPXQuYXV0b1JlbG9hZFBlcmlvZEluTXMpLHQuaGFzT3duUHJvcGVydHkoInBhZ2luYXRpb25TaXplIikmJiJudW1iZXIiPT10eXBlb2YgdC5wYWdpbmF0aW9uU2l6ZSYmKGUucGFnZVNpemU9dC5wYWdpbmF0aW9uU2l6ZSksdC5oYXNPd25Qcm9wZXJ0eSgidGhlbWUiKSYmInN0cmluZyI9PXR5cGVvZiB0LnRoZW1lJiZuZXcgU2V0KE9iamVjdC52YWx1ZXMoT1IpKS5oYXModC50aGVtZSkmJihlLnRoZW1lT3ZlcnJpZGU9dC50aGVtZSksdC5oYXNPd25Qcm9wZXJ0eSgibm90aWZpY2F0aW9uTGFzdFJlYWRUaW1lSW5NcyIpJiYibnVtYmVyIj09dHlwZW9mIHQubm90aWZpY2F0aW9uTGFzdFJlYWRUaW1lSW5NcyYmKGUubm90aWZpY2F0aW9uTGFzdFJlYWRUaW1lSW5Ncz10Lm5vdGlmaWNhdGlvbkxhc3RSZWFkVGltZUluTXMpLGV9fUlSLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIHpSKGV8fElSKX0sSVIuybVwcm92PWxvKHt0b2tlbjpJUixmYWN0b3J5OklSLsm1ZmFjfSk7Y29uc3QgelI9dnIoSVIpOygidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoSVIsW3t0eXBlOkptfV0sbnVsbCxudWxsKTtjbGFzcyBIUntjb25zdHJ1Y3Rvcih0LGUpe3RoaXMubG9jYWxTdG9yYWdlPXQsdGhpcy5jb252ZXJ0ZXI9ZX1zZXRTZXR0aW5ncyh0KXtyZXR1cm4gT2JqZWN0LmtleXModCk/dGhpcy5nZXRTZXR0aW5ncygpLnBpcGUoX24oKGU9Pnt0aGlzLmxvY2FsU3RvcmFnZS5zZXRJdGVtKEFSLEpTT04uc3RyaW5naWZ5KHRoaXMuY29udmVydGVyLnVpVG9CYWNrZW5kKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSx0KSkpKSx0aGlzLmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKEVSKSx0aGlzLmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFJSKX0pKSxodCgoKCk9Pnt9KSkpOlV9ZGVzZXJpYWxpemUodCl7dHJ5e3JldHVybiBKU09OLnBhcnNlKHQpfWNhdGNoKHQpe3JldHVybnt9fX1nZXRTZXR0aW5ncygpe3ZhciB0LGU7Y29uc3Qgbj10aGlzLmxvY2FsU3RvcmFnZS5nZXRJdGVtKFJSKSxvPXRoaXMuY29udmVydGVyLmJhY2tlbmRUb1VpKHRoaXMuZGVzZXJpYWxpemUobj9KU09OLnN0cmluZ2lmeSh7bm90aWZpY2F0aW9uTGFzdFJlYWRUaW1lSW5NczpOdW1iZXIobil9KToie30iKSksaT10aGlzLmNvbnZlcnRlci5iYWNrZW5kVG9VaSh0aGlzLmRlc2VyaWFsaXplKG51bGwhPT0odD10aGlzLmxvY2FsU3RvcmFnZS5nZXRJdGVtKEVSKSkmJnZvaWQgMCE9PXQ/dDoie30iKSksYT10aGlzLmNvbnZlcnRlci5iYWNrZW5kVG9VaSh0aGlzLmRlc2VyaWFsaXplKG51bGwhPT0oZT10aGlzLmxvY2FsU3RvcmFnZS5nZXRJdGVtKEFSKSkmJnZvaWQgMCE9PWU/ZToie30iKSk7cmV0dXJuIFooT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sbyksaSksYSkpfX1IUi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8SFIpKHVzKFNSKSx1cyhOUikpfSxIUi7JtXByb3Y9bG8oe3Rva2VuOkhSLGZhY3Rvcnk6SFIuybVmYWN9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEhSLFt7dHlwZTpKbX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpTUn0se3R5cGU6TlJ9XX0pLG51bGwpO2NsYXNzIEZSe31GUi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8RlIpfSxGUi7JtW1vZD1abyh7dHlwZTpGUn0pLEZSLsm1aW5qPWNvKHtwcm92aWRlcnM6W3twcm92aWRlOlRSLHVzZUNsYXNzOkhSfSx7cHJvdmlkZTpOUix1c2VDbGFzczpJUn1dLGltcG9ydHM6W1tEUl1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhGUix7aW1wb3J0czpbRFJdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihGUixbe3R5cGU6a18sYXJnczpbe2ltcG9ydHM6W0RSXSxwcm92aWRlcnM6W3twcm92aWRlOlRSLHVzZUNsYXNzOkhSfSx7cHJvdmlkZTpOUix1c2VDbGFzczpJUn1dfV19XSxudWxsLG51bGwpO2NvbnN0IExSPVd3KCJbUGVyc2lzdGVudCBTZXR0aW5nc10gRWZmZWN0cyBJbml0Iik7Y2xhc3MgQlJ7Y29uc3RydWN0b3IodCxlLG4sbyl7dGhpcy5hY3Rpb25zJD10LHRoaXMuc3RvcmU9ZSx0aGlzLmNvbmZpZ01vZHVsZT1uLHRoaXMuZGF0YVNvdXJjZT1vLHRoaXMuaW5pdGlhbGl6ZUFuZFVwZGF0ZVNldHRpbmdzJD1nUygoKCk9Pntjb25zdCB0PXRoaXMuYWN0aW9ucyQucGlwZSh4UyhMUiksVHQoKCgpPT50aGlzLmRhdGFTb3VyY2UuZ2V0U2V0dGluZ3MoKSkpLF9uKCh0PT57dGhpcy5zdG9yZS5kaXNwYXRjaChQUih7cGFydGlhbFNldHRpbmdzOnR9KSl9KSksYmUoMCksVHQoKCgpPT5XdCguLi50aGlzLmNvbmZpZ01vZHVsZS5nZXRHbG9iYWxTZXR0aW5nU2VsZWN0b3JzKCkubWFwKCh0PT50aGlzLnN0b3JlLnNlbGVjdCh0KS5waXBlKGtlKCgodCxlKT0+e2NvbnN0IG49T2JqZWN0LnZhbHVlcyh0KSxvPU9iamVjdC52YWx1ZXMoZSk7cmV0dXJuIG4ubGVuZ3RoPT09by5sZW5ndGgmJm4uZXZlcnkoKCh0LGUpPT50PT09b1tlXSkpfSkpLHJuKDEpKSkpKSkpLG9uKCkpO3JldHVybiB0LnBpcGUoKGZ1bmN0aW9uIGUodCl7cmV0dXJuIGZ1bmN0aW9uIGUobil7cmV0dXJuIG4ubGlmdChuZXcgaWUodCkpfX0pKHQucGlwZShkZSg1MDApKSksVHQoKHQ9Pntjb25zdCBlPXt9O2Zvcihjb25zdCBuIG9mIHQpT2JqZWN0LmFzc2lnbihlLG4pO3JldHVybiB0aGlzLmRhdGFTb3VyY2Uuc2V0U2V0dGluZ3MoZSl9KSkpfSkse2Rpc3BhdGNoOiExfSl9bmdyeE9uSW5pdEVmZmVjdHMoKXtyZXR1cm4gTFIoKX19QlIuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEJSKSh1cyh2UyksdXMoRWspLHVzKGtSKSx1cyhUUikpfSxCUi7JtXByb3Y9bG8oe3Rva2VuOkJSLGZhY3Rvcnk6QlIuybVmYWN9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEJSLFt7dHlwZTpKbX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTp2U30se3R5cGU6RWt9LHt0eXBlOmtSfSx7dHlwZTpUUn1dfSksbnVsbCk7Y2xhc3MgVlJ7fVZSLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxWUil9LFZSLsm1bW9kPVpvKHt0eXBlOlZSfSksVlIuybVpbmo9Y28oe3Byb3ZpZGVyczpba1JdLGltcG9ydHM6W1tMUy5mb3JGZWF0dXJlKFtCUl0pLEZSXV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKFZSLHtpbXBvcnRzOltGUyxGUl19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFZSLFt7dHlwZTprXyxhcmdzOlt7aW1wb3J0czpbTFMuZm9yRmVhdHVyZShbQlJdKSxGUl0scHJvdmlkZXJzOltrUl19XX1dLG51bGwsbnVsbCk7Y2xhc3MgalJ7fWpSLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxqUil9LGpSLsm1cHJvdj1sbyh7dG9rZW46alIsZmFjdG9yeTpqUi7JtWZhY30pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoalIsW3t0eXBlOkptfV0sbnVsbCxudWxsKTtjb25zdCBVUj0iZXhwZXJpbWVudGFsUGx1Z2luIixXUj0ic2NhbGFyc0JhdGNoU2l6ZSIsR1I9ImVuYWJsZUNvbG9yR3JvdXAiLFlSPSJlbmFibGVDb2xvckdyb3VwQnlSZWdleCIscVI9ImRhcmtNb2RlIixaUj0iZW5hYmxlTGlua1RpbWUiLFhSPW5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7Y2xhc3MgS1J7Z2V0UGFyYW1zKCl7cmV0dXJuIFhSfX1LUi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8S1IpfSxLUi7JtXByb3Y9bG8oe3Rva2VuOktSLGZhY3Rvcnk6S1IuybVmYWN9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEtSLFt7dHlwZTpKbX1dLG51bGwsbnVsbCk7Y2xhc3MgSlJ7Y29uc3RydWN0b3IodCl7dGhpcy5xdWVyeVBhcmFtcz10fWdldEZlYXR1cmVzKHQ9ITEpe2NvbnN0IGU9dGhpcy5xdWVyeVBhcmFtcy5nZXRQYXJhbXMoKSxuPXQ/dGhpcy5nZXRQYXJ0aWFsRmVhdHVyZXNGcm9tTWVkaWFRdWVyeSgpOnt9O3JldHVybiBlLmhhcyhVUikmJihuLmVuYWJsZWRFeHBlcmltZW50YWxQbHVnaW5zPWUuZ2V0QWxsKFVSKSksZS5oYXMoInRlbnNvcmJvYXJkQ29sYWIiKSYmKG4uaW5Db2xhYj0idHJ1ZSI9PT1lLmdldCgidGVuc29yYm9hcmRDb2xhYiIpKSxlLmhhcyhXUikmJihuLnNjYWxhcnNCYXRjaFNpemU9TnVtYmVyKGUuZ2V0KFdSKSkpLGUuaGFzKEdSKSYmKG4uZW5hYmxlZENvbG9yR3JvdXA9ImZhbHNlIiE9PWUuZ2V0KEdSKSksZS5oYXMoWVIpJiYobi5lbmFibGVkQ29sb3JHcm91cEJ5UmVnZXg9ImZhbHNlIiE9PWUuZ2V0KFlSKSksZS5oYXMocVIpJiYobi5kZWZhdWx0RW5hYmxlRGFya01vZGU9ImZhbHNlIiE9PWUuZ2V0KHFSKSksZS5oYXMoWlIpJiYobi5lbmFibGVkTGlua2VkVGltZT0iZmFsc2UiIT09ZS5nZXQoWlIpKSxufWdldFBhcnRpYWxGZWF0dXJlc0Zyb21NZWRpYVF1ZXJ5KCl7Y29uc3QgdD17fTtyZXR1cm4gd2luZG93Lm1hdGNoTWVkaWEoIihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykiKS5tYXRjaGVzJiYodC5kZWZhdWx0RW5hYmxlRGFya01vZGU9ITApLHR9fUpSLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxKUikodXMoS1IpKX0sSlIuybVwcm92PWxvKHt0b2tlbjpKUixmYWN0b3J5OkpSLsm1ZmFjfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihKUixbe3R5cGU6Sm19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6S1J9XX0pLG51bGwpO2NsYXNzIFFSe31RUi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8UVIpfSxRUi7JtW1vZD1abyh7dHlwZTpRUn0pLFFSLsm1aW5qPWNvKHtwcm92aWRlcnM6W0pSLEtSLHtwcm92aWRlOmpSLHVzZUNsYXNzOkpSfV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFFSLFt7dHlwZTprXyxhcmdzOlt7cHJvdmlkZXJzOltKUixLUix7cHJvdmlkZTpqUix1c2VDbGFzczpKUn1dfV19XSxudWxsLG51bGwpO2NvbnN0ICRSPVd3KCJbRkVBVFVSRSBGTEFHXSBQYXJ0aWFsIEZlYXR1cmUgRmxhZ3MgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksdFQ9V3coIltGRUFUVVJFIEZMQUddIEVuYWJsZSBEYXJrIE1vZGUgT3ZlcnJpZGUgQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGVUPVd3KCJbRkVBVFVSRSBGTEFHXSBFZmZlY3RzIEluaXQiKTtjbGFzcyBuVHtjb25zdHJ1Y3Rvcih0LGUsbil7dGhpcy5hY3Rpb25zJD10LHRoaXMuc3RvcmU9ZSx0aGlzLmRhdGFTb3VyY2U9bix0aGlzLmdldEZlYXR1cmVGbGFncyQ9Z1MoKCgpPT50aGlzLmFjdGlvbnMkLnBpcGUoeFMoZVQpLGNlKHRoaXMuc3RvcmUuc2VsZWN0KENFKSksaHQoKChbLHRdKT0+e2NvbnN0IGU9dGhpcy5kYXRhU291cmNlLmdldEZlYXR1cmVzKHQpO3JldHVybiAkUih7ZmVhdHVyZXM6ZX0pfSkpKSkpfW5ncnhPbkluaXRFZmZlY3RzKCl7cmV0dXJuIGVUKCl9fW5ULsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxuVCkodXModlMpLHVzKEVrKSx1cyhqUikpfSxuVC7JtXByb3Y9bG8oe3Rva2VuOm5ULGZhY3Rvcnk6blQuybVmYWN9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKG5ULFt7dHlwZTpKbX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTp2U30se3R5cGU6RWt9LHt0eXBlOmpSfV19KSxudWxsKTtjb25zdCBvVD17aXNGZWF0dXJlRmxhZ3NMb2FkZWQ6ITEsZGVmYXVsdEZsYWdzOntpc0F1dG9EYXJrTW9kZUFsbG93ZWQ6ITAsZGVmYXVsdEVuYWJsZURhcmtNb2RlOiExLGVuYWJsZURhcmtNb2RlT3ZlcnJpZGU6bnVsbCxlbmFibGVkQ29sb3JHcm91cDohMSxlbmFibGVkQ29sb3JHcm91cEJ5UmVnZXg6ITEsZW5hYmxlZEV4cGVyaW1lbnRhbFBsdWdpbnM6W10saW5Db2xhYjohMSxzY2FsYXJzQmF0Y2hTaXplOnZvaWQgMCxtZXRyaWNzSW1hZ2VTdXBwb3J0RW5hYmxlZDohMCxlbmFibGVkTGlua2VkVGltZTohMX0sZmxhZ092ZXJyaWRlczp7fX0saVQ9bmV3IE5yKCJbRmVhdHVyZSBGbGFnXSBTdG9yZSBDb25maWciKTtmdW5jdGlvbiBhVCgpe3JldHVybntpbml0aWFsU3RhdGU6b1R9fWNvbnN0IHJUPW1TKG9ULHBTKCRSLCgodCx7ZmVhdHVyZXM6ZX0pPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2lzRmVhdHVyZUZsYWdzTG9hZGVkOiEwLGZsYWdPdmVycmlkZXM6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuZmxhZ092ZXJyaWRlcyksZSl9KSkpLHBTKHRULCgodCx7ZW5hYmxlRGFya01vZGU6ZX0pPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2ZsYWdPdmVycmlkZXM6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuZmxhZ092ZXJyaWRlcykse2VuYWJsZURhcmtNb2RlT3ZlcnJpZGU6ZX0pfSkpKSxwUyhQUiwoKHQse3BhcnRpYWxTZXR0aW5nczplfSk9PntpZighZS50aGVtZU92ZXJyaWRlKXJldHVybiB0O2xldCBuO3N3aXRjaChlLnRoZW1lT3ZlcnJpZGUpe2Nhc2UgT1IuQlJPV1NFUl9ERUZBVUxUOm49bnVsbDticmVhaztjYXNlIE9SLkRBUks6bj0hMDticmVhaztjYXNlIE9SLkxJR0hUOm49ITF9cmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7ZmxhZ092ZXJyaWRlczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5mbGFnT3ZlcnJpZGVzKSx7ZW5hYmxlRGFya01vZGVPdmVycmlkZTpufSl9KX0pKSk7ZnVuY3Rpb24gc1QodCxlKXtyZXR1cm4gclQodCxlKX1mdW5jdGlvbiBsVCgpe3JldHVybiB6ayh2RSwodD0+bnVsbD09PXQ/e3RoZW1lT3ZlcnJpZGU6T1IuQlJPV1NFUl9ERUZBVUxUfTp7dGhlbWVPdmVycmlkZTp0P09SLkRBUks6T1IuTElHSFR9KSl9Y2xhc3MgY1R7fWNULsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxjVCl9LGNULsm1bW9kPVpvKHt0eXBlOmNUfSksY1QuybVpbmo9Y28oe3Byb3ZpZGVyczpbe3Byb3ZpZGU6aVQsdXNlRmFjdG9yeTphVH1dLGltcG9ydHM6W1tRUixpUy5mb3JGZWF0dXJlKGdFLHNULGlUKSxMUy5mb3JGZWF0dXJlKFtuVF0pLGtSLmRlZmluZUdsb2JhbFNldHRpbmcobFQpXV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKGNULHtpbXBvcnRzOltRUixvUyxGUyxrUl19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGNULFt7dHlwZTprXyxhcmdzOlt7aW1wb3J0czpbUVIsaVMuZm9yRmVhdHVyZShnRSxzVCxpVCksTFMuZm9yRmVhdHVyZShbblRdKSxrUi5kZWZpbmVHbG9iYWxTZXR0aW5nKGxUKV0scHJvdmlkZXJzOlt7cHJvdmlkZTppVCx1c2VGYWN0b3J5OmFUfV19XX1dLG51bGwsbnVsbCk7Y2xhc3MgZFR7fWZ1bmN0aW9uIHBUKHQsZSxuLG8pe3JldHVybiB0W2VdLmhhc093blByb3BlcnR5KG4pP21SKGUpP3RbZV1bbl0uaGFzT3duUHJvcGVydHkobyk/dFtlXVtuXVtvXTpudWxsOnRbZV1bbl06bnVsbH1mdW5jdGlvbiBtVCh0LGUsbixvKXtpZihtUihlKSl7Y29uc3QgaT1PYmplY3QuYXNzaWduKHt9LHRbZV0pLGE9KGZ1bmN0aW9uIGkodCxlLG4pe2NvbnN0IG89dC5oYXNPd25Qcm9wZXJ0eShlKT9PYmplY3QuYXNzaWduKHt9LHRbZV0pOnt9LGk9by5oYXNPd25Qcm9wZXJ0eShuKTtyZXR1cm4gb1tuXT1pP09iamVjdC5hc3NpZ24oe30sb1tuXSk6e3J1blRvU2VyaWVzOnt9LHJ1blRvTG9hZFN0YXRlOnt9fSxvfSkoaSxuLG8pO3JldHVybiBpW25dPWEsaX1jb25zdCBhPU9iamVjdC5hc3NpZ24oe30sdFtlXSkscj1hLmhhc093blByb3BlcnR5KG4pO3JldHVybiBhW25dPXI/T2JqZWN0LmFzc2lnbih7fSxhW25dKTp7cnVuVG9TZXJpZXM6e30scnVuVG9Mb2FkU3RhdGU6e319LGF9ZnVuY3Rpb24gdVQodCl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHQpfWZ1bmN0aW9uIGZUKHQsZSxuKXtjb25zdCBvPU9iamVjdC5hc3NpZ24oe30sbik7Zm9yKGNvbnN0IG4gb2YgZSlvW25dPXQ7cmV0dXJuIG99ZnVuY3Rpb24gZ1QodCxlLG4sbyl7aWYobVIoZSkpe2NvbnN0IGk9dFtlXS50YWdSdW5TYW1wbGVkSW5mbztyZXR1cm4gaS5oYXNPd25Qcm9wZXJ0eShuKT9PYmplY3Qua2V5cyhpW25dKS5maWx0ZXIoKHQ9Pm88aVtuXVt0XS5tYXhTYW1wbGVzUGVyU3RlcCkpOltdfWNvbnN0IGk9dFtlXS50YWdUb1J1bnM7cmV0dXJuIGkuaGFzT3duUHJvcGVydHkobik/aVtuXTpbXX1mdW5jdGlvbiBoVCh0LGUsbixvLGksYSl7Y29uc3Qgcj1uZXcgU2V0KHQpLHM9W107Zm9yKGNvbnN0IG8gb2YgdClmb3IoY29uc3QgdCBvZiBlKWlmKChsPW5bdF0pLnBsdWdpbj09PShjPW8pLnBsdWdpbiYmbC50YWc9PT1jLnRhZyYmbC5zYW1wbGU9PT1jLnNhbXBsZSYmKGwucnVuSWQ9PT1jLnJ1bklkfHwhbC5ydW5JZCYmIWMucnVuSWQpKXtzLnB1c2godCksci5kZWxldGUobyk7YnJlYWt9dmFyIGwsYztpZighcy5sZW5ndGgpcmV0dXJue3VucmVzb2x2ZWRJbXBvcnRlZFBpbm5lZENhcmRzOnQsY2FyZE1ldGFkYXRhTWFwOm4sY2FyZFRvUGlubmVkQ29weTpvLHBpbm5lZENhcmRUb09yaWdpbmFsOmksY2FyZFN0ZXBJbmRleDphfTtsZXQgZD17Y2FyZFRvUGlubmVkQ29weTpvLHBpbm5lZENhcmRUb09yaWdpbmFsOmksY2FyZFN0ZXBJbmRleDphLGNhcmRNZXRhZGF0YU1hcDpufTtmb3IoY29uc3QgdCBvZiBzKWQ9YlQodCxkLmNhcmRUb1Bpbm5lZENvcHksZC5waW5uZWRDYXJkVG9PcmlnaW5hbCxkLmNhcmRTdGVwSW5kZXgsZC5jYXJkTWV0YWRhdGFNYXApO3JldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZCkse3VucmVzb2x2ZWRJbXBvcnRlZFBpbm5lZENhcmRzOlsuLi5yXX0pfWZ1bmN0aW9uIGJUKHQsZSxuLG8saSl7aWYoZS5oYXModCkpcmV0dXJue2NhcmRUb1Bpbm5lZENvcHk6ZSxwaW5uZWRDYXJkVG9PcmlnaW5hbDpuLGNhcmRTdGVwSW5kZXg6byxjYXJkTWV0YWRhdGFNYXA6aX07Y29uc3QgYT1uZXcgTWFwKGUpLHI9bmV3IE1hcChuKSxzPU9iamVjdC5hc3NpZ24oe30sbyksbD1PYmplY3QuYXNzaWduKHt9LGkpLGM9KGZ1bmN0aW9uIGQodCl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHtiYXNlQ2FyZElkOnR9KX0pKHQpO2Euc2V0KHQsYyksci5zZXQoYyx0KSxvLmhhc093blByb3BlcnR5KHQpJiYoc1tjXT1vW3RdKTtjb25zdCBwPWlbdF07aWYoIXApdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcGluIGEgY2FyZCB3aXRob3V0IG1ldGFkYXRhIik7cmV0dXJuIGxbY109cCx7Y2FyZFRvUGlubmVkQ29weTphLHBpbm5lZENhcmRUb09yaWdpbmFsOnIsY2FyZFN0ZXBJbmRleDpzLGNhcmRNZXRhZGF0YU1hcDpsfX1mdW5jdGlvbiB5VCh0KXtyZXR1cm4gdC5waW5uZWRDYXJkVG9PcmlnaW5hbC5zaXplK3QudW5yZXNvbHZlZEltcG9ydGVkUGlubmVkQ2FyZHMubGVuZ3RoPDEwfWRULsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxkVCl9LGRULsm1bW9kPVpvKHt0eXBlOmRUfSksZFQuybVpbmo9Y28oe3Byb3ZpZGVyczpbe3Byb3ZpZGU6aFIsdXNlQ2xhc3M6eFJ9XSxpbXBvcnRzOltbY1QsQUVdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oZFQse2ltcG9ydHM6W2NULEFFXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoZFQsW3t0eXBlOmtfLGFyZ3M6W3tpbXBvcnRzOltjVCxBRV0scHJvdmlkZXJzOlt7cHJvdmlkZTpoUix1c2VDbGFzczp4Un1dfV19XSxudWxsLG51bGwpO2NvbnN0IF9UPSJtZXRyaWNzIixDVD17dG9vbHRpcFNvcnQ6bFIuREVGQVVMVCxpZ25vcmVPdXRsaWVyczohMCx4QXhpc1R5cGU6Y1IuU1RFUCxzY2FsYXJTbW9vdGhpbmc6LjYsc2NhbGFyUGFydGl0aW9uTm9uTW9ub3RvbmljWDohMSxpbWFnZUJyaWdodG5lc3NJbk1pbGxpOjFlMyxpbWFnZUNvbnRyYXN0SW5NaWxsaToxZTMsaW1hZ2VTaG93QWN0dWFsU2l6ZTohMSxoaXN0b2dyYW1Nb2RlOlRFLk9GRlNFVH0sTVQ9RmsoX1QpLHZUPXprKE1ULCh0PT50LnRhZ01ldGFkYXRhTG9hZGVkKSk7emsoTVQsKHQ9PnQudGFnTWV0YWRhdGEpKTtjb25zdCB4VD16ayhNVCwodD0+dC5jYXJkTGlzdCkpLE9UPXprKE1ULCgodCxlKT0+e2lmKCF0LmNhcmRNZXRhZGF0YU1hcC5oYXNPd25Qcm9wZXJ0eShlKSlyZXR1cm4gQkUuTk9UX0xPQURFRDtjb25zdHtwbHVnaW46bix0YWc6byxydW5JZDppLHNhbXBsZTphfT10LmNhcmRNZXRhZGF0YU1hcFtlXSxyPXBUKHQudGltZVNlcmllc0RhdGEsbixvLGEpO2lmKCFyKXJldHVybiBCRS5OT1RfTE9BREVEO2NvbnN0IHM9ci5ydW5Ub0xvYWRTdGF0ZTtpZihpKXJldHVybiBzLmhhc093blByb3BlcnR5KGkpP3NbaV06QkUuTk9UX0xPQURFRDtjb25zdCBsPWdUKHQudGFnTWV0YWRhdGEsbixvLGEpO2lmKCFsLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBsb2FkIGEgY2FyZCB3aG9zZSB0YWcgaGFzIG5vIHJ1bnMiKTtyZXR1cm4gbC5ldmVyeSgodD0+c1t0XT09PUJFLkxPQURFRCkpP0JFLkxPQURFRDpsLnNvbWUoKHQ9PnNbdF09PT1CRS5MT0FESU5HKSk/QkUuTE9BRElORzpCRS5OT1RfTE9BREVEfSkpLFBUPXprKE1ULCgodCxlKT0+e2lmKCF0LmNhcmRNZXRhZGF0YU1hcC5oYXNPd25Qcm9wZXJ0eShlKSlyZXR1cm4gbnVsbDtjb25zdHtwbHVnaW46bix0YWc6byxzYW1wbGU6aX09dC5jYXJkTWV0YWRhdGFNYXBbZV0sYT1wVCh0LnRpbWVTZXJpZXNEYXRhLG4sbyxpKTtyZXR1cm4gYT9hLnJ1blRvU2VyaWVzOm51bGx9KSksd1Q9emsoTVQsKHQ9PnQuY2FyZE1ldGFkYXRhTWFwKSksa1Q9emsod1QsKCh0LGUpPT50Lmhhc093blByb3BlcnR5KGUpP3RbZV06bnVsbCkpLFNUPXprKE1ULCh0PT50LnZpc2libGVDYXJkcykpLERUPXprKFNULCh0PT50KSksRVQ9emsoeFQsd1QsKCh0LGUpPT50LmZpbHRlcigodD0+ZS5oYXNPd25Qcm9wZXJ0eSh0KSkpLm1hcCgodD0+T2JqZWN0LmFzc2lnbih7Y2FyZElkOnR9LGVbdF0pKSkpKSxBVD16ayhNVCwoKHQsZSk9PnQuY2FyZFN0ZXBJbmRleC5oYXNPd25Qcm9wZXJ0eShlKT90LmNhcmRTdGVwSW5kZXhbZV06bnVsbCkpLFJUPXprKE1ULCh0PT50LmNhcmRUb1Bpbm5lZENvcHkpKSxUVD16ayhNVCwodD0+dC5waW5uZWRDYXJkVG9PcmlnaW5hbCkpLE5UPXprKFJULHdULCgodCxlKT0+Wy4uLnQudmFsdWVzKCldLmZpbHRlcigodD0+ZS5oYXNPd25Qcm9wZXJ0eSh0KSkpLm1hcCgodD0+T2JqZWN0LmFzc2lnbih7Y2FyZElkOnR9LGVbdF0pKSkpKSxJVD16ayhSVCxUVCwoKHQsZSxuKT0+dC5oYXMobil8fGUuaGFzKG4pKSkselQ9emsoTVQsKHQ9PnQudW5yZXNvbHZlZEltcG9ydGVkUGlubmVkQ2FyZHMpKSxIVD16ayhNVCwodD0+eVQodCkpKSxGVD16ayhNVCwodD0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuc2V0dGluZ3MpLHQuc2V0dGluZ092ZXJyaWRlcykpKSxMVD16ayhNVCwodD0+dC5zZXR0aW5nT3ZlcnJpZGVzKSksQlQ9emsoRlQsKHQ9PnQudG9vbHRpcFNvcnQpKSxWVD16ayhGVCwodD0+dC5pZ25vcmVPdXRsaWVycykpLGpUPXprKEZULCh0PT50LnhBeGlzVHlwZSkpLFVUPXprKEZULCh0PT50Lmhpc3RvZ3JhbU1vZGUpKSxXVD16ayhGVCwodD0+dC5zY2FsYXJTbW9vdGhpbmcpKSxHVD16ayhGVCwodD0+dC5zY2FsYXJQYXJ0aXRpb25Ob25Nb25vdG9uaWNYKSksWVQ9emsoRlQsKHQ9PnQuaW1hZ2VCcmlnaHRuZXNzSW5NaWxsaSkpLHFUPXprKEZULCh0PT50LmltYWdlQ29udHJhc3RJbk1pbGxpKSksWlQ9emsoRlQsKHQ9PnQuaW1hZ2VTaG93QWN0dWFsU2l6ZSkpLFhUPXprKE1ULCh0PT50LnRhZ0ZpbHRlcikpLEtUPXprKE1ULCgodCxlKT0+Qm9vbGVhbih0LnRhZ0dyb3VwRXhwYW5kZWQuZ2V0KGUpKSkpO3ZhciBKVDt6ayhNVCwodD0+dC5zZWxlY3RlZFRpbWUpKSwoZnVuY3Rpb24odCl7dFt0Lk5PTkU9MF09Ik5PTkUiLHRbdC5XSEFUU19ORVc9MV09IldIQVRTX05FVyJ9KShKVHx8KEpUPXt9KSk7Y29uc3QgUVQ9RmsoIm5vdGlmaWNhdGlvbiIpO3prKFFULCh0PT50Lm5vdGlmaWNhdGlvbnMpKSx6ayhRVCwodD0+e3ZhciBlO3JldHVybiBudWxsIT09KGU9dC5sYXN0UmVhZFRpbWVzdGFtcEluTXMpJiZ2b2lkIDAhPT1lP2U6LTF9KSk7Y29uc3QgJFQ9InJ1bnMiO3ZhciB0TixlTjtmdW5jdGlvbiBuTih0KXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodC5zbGljZSgpLnNvcnQoKSl9ZnVuY3Rpb24gb04odCxlLG4pe2NvbnN0IG89e30saT1bXSxhPXttYXRjaGVzOm8sbm9uTWF0Y2hlczppfTtzd2l0Y2godC5rZXkpe2Nhc2UgZU4uUlVOOmZvcihjb25zdCB0IG9mIGUpb1t0LmlkXT1bdF07YnJlYWs7Y2FzZSBlTi5FWFBFUklNRU5UOmZvcihjb25zdCB0IG9mIGUpe2NvbnN0IGU9blt0LmlkXSxpPW9bZV18fFtdO2kucHVzaCh0KSxvW2VdPWl9YnJlYWs7Y2FzZSBlTi5SRUdFWDppZighdC5yZWdleFN0cmluZylicmVhaztsZXQgYTt0cnl7YT1uZXcgUmVnRXhwKHQucmVnZXhTdHJpbmcpfWNhdGNoKHQpe2JyZWFrfWZvcihjb25zdCB0IG9mIGUpe2NvbnN0IGU9dC5uYW1lLm1hdGNoKGEpO2lmKGUpe2NvbnN0IG49ZS5sZW5ndGg+MT9KU09OLnN0cmluZ2lmeShlLnNsaWNlKDEpKToicHNldWRvX2dyb3VwIixpPW9bbl18fFtdO2kucHVzaCh0KSxvW25dPWl9ZWxzZSBpLnB1c2godCl9fXJldHVybiBhfWZ1bmN0aW9uIGlOKHQsZSl7c3dpdGNoKHQpe2Nhc2UgZU4uUkVHRVg6cmV0dXJue2tleTp0LHJlZ2V4U3RyaW5nOm51bGwhPWU/ZToiIn07Y2FzZSBlTi5SVU46Y2FzZSBlTi5FWFBFUklNRU5UOmRlZmF1bHQ6cmV0dXJue2tleTp0fX19IShmdW5jdGlvbih0KXt0W3QuRVhQRVJJTUVOVF9OQU1FPTBdPSJFWFBFUklNRU5UX05BTUUiLHRbdC5IUEFSQU09MV09IkhQQVJBTSIsdFt0Lk1FVFJJQz0yXT0iTUVUUklDIix0W3QuUlVOX05BTUU9M109IlJVTl9OQU1FIn0pKHROfHwodE49e30pKSwoZnVuY3Rpb24odCl7dFt0LlJVTj0wXT0iUlVOIix0W3QuRVhQRVJJTUVOVD0xXT0iRVhQRVJJTUVOVCIsdFt0LlJFR0VYPTJdPSJSRUdFWCJ9KShlTnx8KGVOPXt9KSk7Y29uc3QgYU49RmsoJFQpLHJOPXprKGFOLCh0PT50LmRhdGEpKSxzTj16ayhyTiwoKHQsZSk9Pnt2YXIgbjtyZXR1cm4gbnVsbCE9PShuPXQucnVuSWRUb0V4cElkW2UucnVuSWRdKSYmdm9pZCAwIT09bj9uOm51bGx9KSksbE49emsock4sKCh0LGUpPT57dmFyIG47cmV0dXJuIG51bGwhPT0obj10LnJ1bk1ldGFkYXRhW2UucnVuSWRdKSYmdm9pZCAwIT09bj9uOm51bGx9KSksY049emsock4sKCh0LGUpPT4odC5ydW5JZHNbZS5leHBlcmltZW50SWRdfHxbXSkuZmlsdGVyKChlPT5Cb29sZWFuKHQucnVuTWV0YWRhdGFbZV0pKSkubWFwKChlPT50LnJ1bk1ldGFkYXRhW2VdKSkpKSxkTj16ayhyTiwoKHQsZSk9Pnt2YXIgbjtyZXR1cm4gbnVsbCE9PShuPXQucnVuSWRzW2UuZXhwZXJpbWVudElkXSkmJnZvaWQgMCE9PW4/bjpbXX0pKSxwTj16ayhyTiwodD0+bmV3IE1hcChPYmplY3QuZW50cmllcyh0LnJ1bk1ldGFkYXRhKSkpKSxtTj16ayhyTiwoKHQsZSk9PnQucnVuc0xvYWRTdGF0ZVtlLmV4cGVyaW1lbnRJZF18fHtsYXN0TG9hZGVkVGltZUluTXM6bnVsbCxzdGF0ZTpCRS5OT1RfTE9BREVEfSkpLHVOPXprKHJOLCgodCxlKT0+e2NvbnN0IG49bk4oZS5leHBlcmltZW50SWRzKTtyZXR1cm4gdC5zZWxlY3Rpb25TdGF0ZS5nZXQobil8fG5ldyBNYXB9KSksZk49emsock4sKHQ9Pm51bGwhPT10LnVzZXJTZXRHcm91cEJ5S2V5P2lOKHQudXNlclNldEdyb3VwQnlLZXksdC5jb2xvckdyb3VwUmVnZXhTdHJpbmcpOm51bGwpKSxnTj16ayhmTixyTiwoKHQsZSk9Pm51bGwhPXQ/dDplLmluaXRpYWxHcm91cEJ5KSksaE49emsock4sKHQ9PnQucmVnZXhGaWx0ZXIpKSxiTj16ayhhTiwodD0+dC51aSkpLHlOPXprKGJOLCh0PT50LnBhZ2luYXRpb25PcHRpb24pKSxfTj16ayhiTiwodD0+dC5zb3J0KSksQ049emsock4sKHQ9Pntjb25zdCBlPW5ldyBNYXAoWy4uLnQuZGVmYXVsdFJ1bkNvbG9yRm9yR3JvdXBCeSwuLi50LnJ1bkNvbG9yT3ZlcnJpZGVGb3JHcm91cEJ5XSksbj17fTtyZXR1cm4gZS5mb3JFYWNoKCgodCxlKT0+e25bZV09dH0pKSxufSkpLE1OPXprKHJOLCh0PT50LmNvbG9yR3JvdXBSZWdleFN0cmluZykpLHZOPXprKCh0PT57Y29uc3QgZT14RCh0KTtyZXR1cm4gbnVsbD09PWU/bnVsbDp1Tih0LHtleHBlcmltZW50SWRzOmV9KX0pLCh0PT50KSk7Y2xhc3MgeE57Y29uc3RydWN0b3IodCxlLG4pe3RoaXMuYWN0aW9ucyQ9dCx0aGlzLnN0b3JlPWUsdGhpcy5ydW5zRGF0YVNvdXJjZT1uLHRoaXMubG9hZFJ1bnNPblJ1blRhYmxlU2hvd24kPWdTKCgoKT0+dGhpcy5hY3Rpb25zJC5waXBlKHhTKE5BKSxUdCgoKHtleHBlcmltZW50SWRzOnR9KT0+dGhpcy5nZXRFeHBlcmltZW50c1dpdGhMb2FkU3RhdGUodCwodD0+dD09PUJFLkZBSUxFRHx8dD09PUJFLk5PVF9MT0FERUQpKS5waXBlKEd0KCh0PT4hIXQubGVuZ3RoKSksVHQoKGU9PnRoaXMuZmV0Y2hBbGxSdW5zTGlzdCh0LGUpKSkpKSkpKSx7ZGlzcGF0Y2g6ITF9KSx0aGlzLmV4cGVyaW1lbnRzV2l0aFN0YWxlUnVuc09uUm91dGVDaGFuZ2UkPXRoaXMuYWN0aW9ucyQucGlwZSh4UyhvRCksa24odGhpcy5zdG9yZS5zZWxlY3QoT0QpKSxrZSgoKFssdF0sWyxlXSk9PnQ9PT1lKSksa24odGhpcy5zdG9yZS5zZWxlY3QoeEQpKSxHdCgoKFssdF0pPT4hIXQpKSxodCgoKFssdF0pPT50KSksVHQoKHQ9PnRoaXMuZ2V0RXhwZXJpbWVudHNXaXRoTG9hZFN0YXRlKHQsKHQ9PnQ9PT1CRS5GQUlMRUR8fHQ9PT1CRS5OT1RfTE9BREVEKSkucGlwZShodCgoZT0+KHtleHBlcmltZW50SWRzOnQsZXhwZXJpbWVudElkc1RvQmVGZXRjaGVkOmV9KSkpKSkpKSx0aGlzLmV4cGVyaW1lbnRzV2l0aFN0YWxlUnVuc09uUmVsb2FkJD10aGlzLmFjdGlvbnMkLnBpcGUoeFMoR0UsV0UpLGtuKHRoaXMuc3RvcmUuc2VsZWN0KHhEKSksR3QoKChbLHRdKT0+ISF0KSksaHQoKChbLHRdKT0+dCkpLFR0KCh0PT50aGlzLmdldEV4cGVyaW1lbnRzV2l0aExvYWRTdGF0ZSh0LCh0PT50IT09QkUuTE9BRElORykpLnBpcGUoaHQoKGU9Pih7ZXhwZXJpbWVudElkczp0LGV4cGVyaW1lbnRJZHNUb0JlRmV0Y2hlZDplfSkpKSkpKSksdGhpcy5sb2FkUnVuc09uTmF2aWdhdGlvbk9yUmVsb2FkJD1nUygoKCk9Pld0KHRoaXMuZXhwZXJpbWVudHNXaXRoU3RhbGVSdW5zT25Sb3V0ZUNoYW5nZSQsdGhpcy5leHBlcmltZW50c1dpdGhTdGFsZVJ1bnNPblJlbG9hZCQpLnBpcGUoVHQoKCh7ZXhwZXJpbWVudElkczp0LGV4cGVyaW1lbnRJZHNUb0JlRmV0Y2hlZDplfSk9PnRoaXMuZmV0Y2hBbGxSdW5zTGlzdCh0LGUpKSkpKSx7ZGlzcGF0Y2g6ITF9KX1nZXRSdW5zTGlzdExvYWRTdGF0ZSh0KXtyZXR1cm4gdGhpcy5zdG9yZS5zZWxlY3QobU4se2V4cGVyaW1lbnRJZDp0fSkucGlwZShOZSgxKSl9Z2V0RXhwZXJpbWVudHNXaXRoTG9hZFN0YXRlKHQsZSl7cmV0dXJuIEx0KHQubWFwKCh0PT50aGlzLmdldFJ1bnNMaXN0TG9hZFN0YXRlKHQpKSkpLnBpcGUoaHQoKG49PnQuZmlsdGVyKCgodCxvKT0+ZShuW29dLnN0YXRlKSkpKSkpfWZldGNoQWxsUnVuc0xpc3QodCxlKXtyZXR1cm4gWih7ZXhwZXJpbWVudElkczp0LGV4cGVyaW1lbnRJZHNUb0JlRmV0Y2hlZDplfSkucGlwZShfbigoKCk9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKE9BKHtleHBlcmltZW50SWRzOnQscmVxdWVzdGVkRXhwZXJpbWVudElkczplfSkpfSkpLFR0KCgoKT0+e2NvbnN0IG49bmV3IFNldChlKTtyZXR1cm4gTHQodC5tYXAoKHQ9Pm4uaGFzKHQpP3RoaXMuZmV0Y2hSdW5zRm9yRXhwZXJpbWVudCh0KTp0aGlzLm1heWJlV2FpdEZvclJ1bnNBbmRHZXRSdW5zKHQpKSkpfSkpLGh0KCh0PT57Y29uc3QgZT17fSxuPVtdO2Zvcihjb25zdCBvIG9mIHQpbi5wdXNoKC4uLm8ucnVucyksby5mcm9tUmVtb3RlJiYoZVtvLmV4cGVyaW1lbnRJZF09e3J1bnM6by5ydW5zLG1ldGFkYXRhOm8ubWV0YWRhdGF9KTtyZXR1cm57bmV3UnVuc0FuZE1ldGFkYXRhOmUscnVuc0ZvckFsbEV4cGVyaW1lbnRzOm59fSkpLF9uKCgoe25ld1J1bnNBbmRNZXRhZGF0YTplLHJ1bnNGb3JBbGxFeHBlcmltZW50czpufSk9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKFBBKHtleHBlcmltZW50SWRzOnQsbmV3UnVuc0FuZE1ldGFkYXRhOmUscnVuc0ZvckFsbEV4cGVyaW1lbnRzOm59KSl9KSkscmUoKG49Pih0aGlzLnN0b3JlLmRpc3BhdGNoKHdBKHtleHBlcmltZW50SWRzOnQscmVxdWVzdGVkRXhwZXJpbWVudElkczplfSkpLFoobnVsbCkpKSksaHQoKCgpPT5udWxsKSkpfW1heWJlV2FpdEZvclJ1bnNBbmRHZXRSdW5zKHQpe3JldHVybiB0aGlzLnN0b3JlLnNlbGVjdChtTix7ZXhwZXJpbWVudElkOnR9KS5waXBlKEd0KCh0PT50LnN0YXRlIT09QkUuTE9BRElORykpLE5lKDEpLFR0KCh0PT50LnN0YXRlPT09QkUuRkFJTEVEP1gobmV3IEVycm9yKCJQZW5kaW5nIHJlcXVlc3QgZmFpbGVkIikpOloodCkpKSxrbih0aGlzLnN0b3JlLnNlbGVjdChjTix7ZXhwZXJpbWVudElkOnR9KSksaHQoKChbLGVdKT0+KHtmcm9tUmVtb3RlOiExLGV4cGVyaW1lbnRJZDp0LHJ1bnM6ZX0pKSkpfWZldGNoUnVuc0ZvckV4cGVyaW1lbnQodCl7cmV0dXJuIEx0KFt0aGlzLnJ1bnNEYXRhU291cmNlLmZldGNoUnVucyh0KSx0aGlzLnJ1bnNEYXRhU291cmNlLmZldGNoSHBhcmFtc01ldGFkYXRhKHQpXSkucGlwZShodCgoKFtlLG5dKT0+KHtmcm9tUmVtb3RlOiEwLGV4cGVyaW1lbnRJZDp0LHJ1bnM6ZSxtZXRhZGF0YTpufSkpKSl9fWZ1bmN0aW9uIE9OKHQsZSxuKXtjb25zdCBvPU9iamVjdC5rZXlzKHQpLGk9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCksZSkse3ByaXZhdGVSb3V0ZUNvbnRleHRlZFN0YXRlOnt9fSk7cmV0dXJue2luaXRpYWxTdGF0ZTppLHJlZHVjZXJzOm1TKGkscFMob0QsKChlLHtiZWZvcmU6aSxhZnRlcjphfSk9Pntjb25zdCByPVlTKGEucm91dGVLaW5kLGEucGFyYW1zKSxzPWk/WVMoaS5yb3V0ZUtpbmQsaS5wYXJhbXMpOm51bGw7aWYocz09PXIpcmV0dXJuIGU7bGV0IGw9T2JqZWN0LmFzc2lnbih7fSxlLnByaXZhdGVSb3V0ZUNvbnRleHRlZFN0YXRlKTtpZihzKXtjb25zdCB0PXt9O2Zvcihjb25zdCBuIG9mIG8pdFtuXT1lW25dO2w9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGwpLHtbc106dH0pfWxldCBjPWUucHJpdmF0ZVJvdXRlQ29udGV4dGVkU3RhdGUmJmUucHJpdmF0ZVJvdXRlQ29udGV4dGVkU3RhdGVbcl0/ZS5wcml2YXRlUm91dGVDb250ZXh0ZWRTdGF0ZVtyXTpudWxsO3MmJm51bGw9PT1jJiYoYz10KTtsZXQgZD1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSxjKSx7cHJpdmF0ZVJvdXRlQ29udGV4dGVkU3RhdGU6bH0pO3JldHVybiBuP24oZCxhKTpkfSkpKX19dmFyIFBOLHdOO3hOLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHx4TikodXModlMpLHVzKEVrKSx1cyhCQSkpfSx4Ti7JtXByb3Y9bG8oe3Rva2VuOnhOLGZhY3Rvcnk6eE4uybVmYWN9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHhOLFt7dHlwZTpKbX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTp2U30se3R5cGU6RWt9LHt0eXBlOkJBfV19KSxudWxsKSwoZnVuY3Rpb24odCl7dC5BU0M9ImFzYyIsdC5ERVNDPSJkZXNjIix0LlVOU0VUPSIifSkoUE58fChQTj17fSkpLChmdW5jdGlvbih0KXt0LlVTRVI9InVzZXIiLHQuQkVGT1JFPSJiZWZvcmUiLHQuQUZURVI9ImFmdGVyIix0LlJFR0VYPSJyZWdleCJ9KSh3Tnx8KHdOPXt9KSk7Y29uc3Qga049WyIjNDI1MDY2IiwiIzEyYjVjYiIsIiNlNTI1OTIiLCIjZjlhYjAwIiwiIzkzMzRlNiIsIiM3Y2IzNDIiLCIjZTg3MTBhIl07ZnVuY3Rpb24gU04oLi4udCl7cmV0dXJuKGUsbik9PntsZXQgbz1lO2Zvcihjb25zdCBlIG9mIHQpbz1lKG8sbik7cmV0dXJuIG99fWNvbnN0e2luaXRpYWxTdGF0ZTpETixyZWR1Y2VyczpFTn09T04oe3J1bkNvbG9yT3ZlcnJpZGVGb3JHcm91cEJ5Om5ldyBNYXAsZGVmYXVsdFJ1bkNvbG9yRm9yR3JvdXBCeTpuZXcgTWFwLGdyb3VwS2V5VG9Db2xvclN0cmluZzpuZXcgTWFwLGluaXRpYWxHcm91cEJ5OntrZXk6ZU4uUlVOfSx1c2VyU2V0R3JvdXBCeUtleTpudWxsLGNvbG9yR3JvdXBSZWdleFN0cmluZzoiIixyZWdleEZpbHRlcjoiIn0se3J1bklkczp7fSxydW5JZFRvRXhwSWQ6e30scnVuTWV0YWRhdGE6e30scnVuc0xvYWRTdGF0ZTp7fSxzZWxlY3Rpb25TdGF0ZTpuZXcgTWFwfSwoKHQsZSk9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7aW5pdGlhbEdyb3VwQnk6e2tleTplLnJvdXRlS2luZD09PWpTLkNPTVBBUkVfRVhQRVJJTUVOVD9lTi5FWFBFUklNRU5UOmVOLlJVTn19KSkpLEFOPVNOKG1TKEROLHBTKHRELCgodCx7cm91dGVLaW5kOmUscGFydGlhbFN0YXRlOm59KT0+e3ZhciBvO2lmKGUhPT1qUy5DT01QQVJFX0VYUEVSSU1FTlQmJmUhPT1qUy5FWFBFUklNRU5UKXJldHVybiB0O2NvbnN0IGk9bi5ydW5zLmdyb3VwQnk7aWYoIWkpcmV0dXJuIHQ7Y29uc3QgYT1pLmtleT09PWVOLlJFR0VYP2kucmVnZXhTdHJpbmc6dC5jb2xvckdyb3VwUmVnZXhTdHJpbmc7cmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7Y29sb3JHcm91cFJlZ2V4U3RyaW5nOmEsdXNlclNldEdyb3VwQnlLZXk6bnVsbCE9PShvPWkua2V5KSYmdm9pZCAwIT09bz9vOm51bGx9KX0pKSxwUyhPQSwoKHQsZSk9Pntjb25zdCBuPU9iamVjdC5hc3NpZ24oe30sdC5ydW5zTG9hZFN0YXRlKTtmb3IoY29uc3QgdCBvZiBlLnJlcXVlc3RlZEV4cGVyaW1lbnRJZHMpblt0XT1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe2xhc3RMb2FkZWRUaW1lSW5NczpudWxsfSxuW3RdKSx7c3RhdGU6QkUuTE9BRElOR30pO3JldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3J1bnNMb2FkU3RhdGU6bn0pfSkpLHBTKFBBLCgodCxlKT0+e3ZhciBuO2NvbnN0IG89T2JqZWN0LmFzc2lnbih7fSx0LnJ1bklkcyksaT1PYmplY3QuYXNzaWduKHt9LHQucnVuTWV0YWRhdGEpLGE9T2JqZWN0LmFzc2lnbih7fSx0LnJ1bklkVG9FeHBJZCkscj1PYmplY3QuYXNzaWduKHt9LHQucnVuc0xvYWRTdGF0ZSkscz1uZXcgTWFwKHQuc2VsZWN0aW9uU3RhdGUpO2Zvcihjb25zdCB0IG9mIE9iamVjdC5rZXlzKGUubmV3UnVuc0FuZE1ldGFkYXRhKSl7Y29uc3R7cnVuczpuLG1ldGFkYXRhOnN9PWUubmV3UnVuc0FuZE1ldGFkYXRhW3RdO29bdF09bi5tYXAoKCh7aWQ6dH0pPT50KSksclt0XT1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sclt0XSkse2xhc3RMb2FkZWRUaW1lSW5NczpEYXRlLm5vdygpLHN0YXRlOkJFLkxPQURFRH0pO2Zvcihjb25zdCBlIG9mIG4pe2NvbnN0IG49cy5ydW5Ub0hwYXJhbXNBbmRNZXRyaWNzW2UuaWRdO2lbZS5pZF09T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHtocGFyYW1zOm4/bi5ocGFyYW1zOm51bGwsbWV0cmljczpuP24ubWV0cmljczpudWxsfSksYVtlLmlkXT10fX1jb25zdCBsPW5OKGUuZXhwZXJpbWVudElkcyksYz1uZXcgTWFwKG51bGwhPT0obj1zLmdldChsKSkmJnZvaWQgMCE9PW4/bjpbXSksZD1lLnJ1bnNGb3JBbGxFeHBlcmltZW50cy5sZW5ndGg8PTUwMDtmb3IoY29uc3QgdCBvZiBlLnJ1bnNGb3JBbGxFeHBlcmltZW50cyljLmhhcyh0LmlkKXx8Yy5zZXQodC5pZCxkKTtyZXR1cm4gcy5zZXQobCxjKSxPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3J1bklkczpvLHJ1bklkVG9FeHBJZDphLHJ1bk1ldGFkYXRhOmkscnVuc0xvYWRTdGF0ZTpyLHNlbGVjdGlvblN0YXRlOnN9KX0pKSxwUyh3QSwoKHQsZSk9Pntjb25zdCBuPU9iamVjdC5hc3NpZ24oe30sdC5ydW5zTG9hZFN0YXRlKTtmb3IoY29uc3QgdCBvZiBlLnJlcXVlc3RlZEV4cGVyaW1lbnRJZHMpblt0XT1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe2xhc3RMb2FkZWRUaW1lSW5NczpudWxsfSxuW3RdKSx7c3RhdGU6QkUuRkFJTEVEfSk7cmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7cnVuc0xvYWRTdGF0ZTpufSl9KSkscFMoa0EsKCh0LHtleHBlcmltZW50SWRzOmUscnVuSWQ6bn0pPT57dmFyIG87Y29uc3QgaT1uTihlKSxhPW5ldyBNYXAodC5zZWxlY3Rpb25TdGF0ZSkscj1uZXcgTWFwKG51bGwhPT0obz1hLmdldChpKSkmJnZvaWQgMCE9PW8/bzpbXSk7cmV0dXJuIHIuc2V0KG4sIUJvb2xlYW4oci5nZXQobikpKSxhLnNldChpLHIpLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7c2VsZWN0aW9uU3RhdGU6YX0pfSkpLHBTKFNBLCgodCx7ZXhwZXJpbWVudElkczplLHJ1bklkczpufSk9Pnt2YXIgbztjb25zdCBpPW5OKGUpLGE9bmV3IE1hcCh0LnNlbGVjdGlvblN0YXRlKSxyPW5ldyBNYXAobnVsbCE9PShvPWEuZ2V0KGkpKSYmdm9pZCAwIT09bz9vOltdKSxzPSFuLmV2ZXJ5KCh0PT5Cb29sZWFuKHIuZ2V0KHQpKSkpO2Zvcihjb25zdCB0IG9mIG4pci5zZXQodCxzKTtyZXR1cm4gYS5zZXQoaSxyKSxPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3NlbGVjdGlvblN0YXRlOmF9KX0pKSxwUyhEQSwoKHQse2V4cGVyaW1lbnRJZHM6ZX0pPT57dmFyIG47Y29uc3Qgbz1uTihlKSxpPW5ldyBNYXAodC5zZWxlY3Rpb25TdGF0ZSksYT1uZXcgTWFwKG51bGwhPT0obj1pLmdldChvKSkmJnZvaWQgMCE9PW4/bjpbXSk7Zm9yKGNvbnN0IG4gb2YgZSlmb3IoY29uc3QgZSBvZiB0LnJ1bklkc1tuXSlhLnNldChlLCEwKTtyZXR1cm4gaS5zZXQobyxhKSxPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3NlbGVjdGlvblN0YXRlOml9KX0pKSxwUyhQQSwoKHQse3J1bnNGb3JBbGxFeHBlcmltZW50czplfSk9Pntjb25zdCBuPW5ldyBNYXAodC5ncm91cEtleVRvQ29sb3JTdHJpbmcpLG89bmV3IE1hcCh0LmRlZmF1bHRSdW5Db2xvckZvckdyb3VwQnkpO2xldCBpPXQuaW5pdGlhbEdyb3VwQnk7bnVsbCE9PXQudXNlclNldEdyb3VwQnlLZXkmJihpPWlOKHQudXNlclNldEdyb3VwQnlLZXksdC5jb2xvckdyb3VwUmVnZXhTdHJpbmcpKTtjb25zdCBhPW9OKGksZSx0LnJ1bklkVG9FeHBJZCk7T2JqZWN0LmVudHJpZXMoYS5tYXRjaGVzKS5mb3JFYWNoKCgoW3QsZV0pPT57dmFyIGk7Y29uc3QgYT1udWxsIT09KGk9bi5nZXQodCkpJiZ2b2lkIDAhPT1pP2k6a05bbi5zaXplJWtOLmxlbmd0aF07bi5zZXQodCxhKTtmb3IoY29uc3QgdCBvZiBlKW8uc2V0KHQuaWQsYSl9KSk7Zm9yKGNvbnN0IHQgb2YgYS5ub25NYXRjaGVzKW8uZGVsZXRlKHQuaWQpO3JldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2RlZmF1bHRSdW5Db2xvckZvckdyb3VwQnk6byxncm91cEtleVRvQ29sb3JTdHJpbmc6bn0pfSkpLHBTKElBLCgodCx7ZXhwZXJpbWVudElkczplLGdyb3VwQnk6bn0pPT57Y29uc3Qgbz1uZXcgTWFwLGk9bmV3IE1hcCh0LmRlZmF1bHRSdW5Db2xvckZvckdyb3VwQnkpLGE9b04obixlLmZsYXRNYXAoKGU9PnQucnVuSWRzW2VdKSkubWFwKChlPT50LnJ1bk1ldGFkYXRhW2VdKSksdC5ydW5JZFRvRXhwSWQpO09iamVjdC5lbnRyaWVzKGEubWF0Y2hlcykuZm9yRWFjaCgoKFt0LGVdKT0+e3ZhciBuO2NvbnN0IGE9bnVsbCE9PShuPW8uZ2V0KHQpKSYmdm9pZCAwIT09bj9uOmtOW28uc2l6ZSVrTi5sZW5ndGhdO28uc2V0KHQsYSk7Zm9yKGNvbnN0IHQgb2YgZSlpLnNldCh0LmlkLGEpfSkpO2Zvcihjb25zdCB0IG9mIGEubm9uTWF0Y2hlcylpLmRlbGV0ZSh0LmlkKTtjb25zdCByPW4ua2V5PT09ZU4uUkVHRVg/bi5yZWdleFN0cmluZzp0LmNvbG9yR3JvdXBSZWdleFN0cmluZztyZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtjb2xvckdyb3VwUmVnZXhTdHJpbmc6cix1c2VyU2V0R3JvdXBCeUtleTpuLmtleSxkZWZhdWx0UnVuQ29sb3JGb3JHcm91cEJ5OmksZ3JvdXBLZXlUb0NvbG9yU3RyaW5nOm8scnVuQ29sb3JPdmVycmlkZUZvckdyb3VwQnk6bmV3IE1hcH0pfSkpLHBTKFRBLCgodCx7cnVuSWQ6ZSxuZXdDb2xvcjpufSk9Pntjb25zdCBvPW5ldyBNYXAodC5ydW5Db2xvck92ZXJyaWRlRm9yR3JvdXBCeSk7cmV0dXJuIG8uc2V0KGUsbiksT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtydW5Db2xvck92ZXJyaWRlRm9yR3JvdXBCeTpvfSl9KSkscFMoUkEsKCh0LGUpPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3JlZ2V4RmlsdGVyOmUucmVnZXhTdHJpbmd9KSkpKSxFTiksUk49e2tleTpudWxsLGRpcmVjdGlvbjpQTi5VTlNFVH0se2luaXRpYWxTdGF0ZTpUTixyZWR1Y2VyczpOTn09T04oe3BhZ2luYXRpb25PcHRpb246e3BhZ2VJbmRleDowLHBhZ2VTaXplOjEwfSxzb3J0OlJOfSx7fSksSU49U04obVMoVE4scFMoRUEsKCh0LHtwYWdlU2l6ZTplLHBhZ2VJbmRleDpufSk9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7cGFnaW5hdGlvbk9wdGlvbjp7cGFnZVNpemU6ZSxwYWdlSW5kZXg6bn19KSkpLHBTKFJBLCgodCxlKT0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtwYWdpbmF0aW9uT3B0aW9uOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LnBhZ2luYXRpb25PcHRpb24pLHtwYWdlSW5kZXg6MH0pfSkpKSxwUyhBQSwoKHQsZSk9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7c29ydDp7a2V5OmUua2V5LGRpcmVjdGlvbjplLmRpcmVjdGlvbn19KSkpKSxOTik7ZnVuY3Rpb24gek4odCxlKXtyZXR1cm4gaGsoe2RhdGE6QU4sdWk6SU59KSh0LGUpfWZ1bmN0aW9uIEhOKCl7cmV0dXJuW3thY3Rpb25DcmVhdG9yOndBLGFsZXJ0RnJvbUFjdGlvbjooKT0+KHtsb2NhbGl6ZWRNZXNzYWdlOiJGYWlsZWQgdG8gZmV0Y2ggcnVucyJ9KX1dfWNsYXNzIEZOe312YXIgTE47Rk4uybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEZOKX0sRk4uybVtb2Q9Wm8oe3R5cGU6Rk59KSxGTi7JtWluaj1jbyh7aW1wb3J0czpbW2lTLmZvckZlYXR1cmUoJFQsek4pLExTLmZvckZlYXR1cmUoW3hOXSksJEEsdkEucmVnaXN0ZXJBbGVydEFjdGlvbnMoSE4pLEtBXV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKEZOLHtpbXBvcnRzOltvUyxGUywkQSx2QSxLQV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEZOLFt7dHlwZTprXyxhcmdzOlt7aW1wb3J0czpbaVMuZm9yRmVhdHVyZSgkVCx6TiksTFMuZm9yRmVhdHVyZShbeE5dKSwkQSx2QS5yZWdpc3RlckFsZXJ0QWN0aW9ucyhITiksS0FdfV19XSxudWxsLG51bGwpLChmdW5jdGlvbih0KXt0LlJVTlNfQ0hBTkdFRD0iZXhwZXJpbWVudGFsLlJ1bnNDaGFuZ2VkIix0LkdFVF9SVU5TPSJleHBlcmltZW50YWwuR2V0UnVucyIsdC5HRVRfVVJMX0RBVEE9ImV4cGVyaW1lbnRhbC5HZXRVUkxQbHVnaW5EYXRhIix0LkRBVEFfUkVMT0FERUQ9ImV4cGVyaW1lbnRhbC5EYXRhUmVsb2FkZWQifSkoTE58fChMTj17fSkpO2NsYXNzIEJOe2NvbnN0cnVjdG9yKHQpe3RoaXMucG9ydD10LHRoaXMuaWQ9MCx0aGlzLnJlc3BvbnNlV2FpdHM9bmV3IE1hcCx0aGlzLmxpc3RlbmVycz1uZXcgTWFwLHRoaXMucG9ydC5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwodD0+dGhpcy5vbk1lc3NhZ2UodCkpKX1saXN0ZW4odCxlKXt0aGlzLmxpc3RlbmVycy5zZXQodCxlKX11bmxpc3Rlbih0KXt0aGlzLmxpc3RlbmVycy5kZWxldGUodCl9b25NZXNzYWdlKHQpe3JldHVybiByUih0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9SlNPTi5wYXJzZSh0LmRhdGEpLG49ZS50eXBlLG89ZS5pZCxpPWUucGF5bG9hZCxhPWUuZXJyb3I7aWYoZS5pc1JlcGx5KXtpZighdGhpcy5yZXNwb25zZVdhaXRzLmhhcyhvKSlyZXR1cm47Y29uc3R7cmVzb2x2ZTp0LHJlamVjdDplfT10aGlzLnJlc3BvbnNlV2FpdHMuZ2V0KG8pO3JldHVybiB0aGlzLnJlc3BvbnNlV2FpdHMuZGVsZXRlKG8pLHZvaWQoYT9lKG5ldyBFcnJvcihhKSk6dChpKSl9bGV0IHI9bnVsbCxzPW51bGw7aWYodGhpcy5saXN0ZW5lcnMuaGFzKG4pKXtjb25zdCB0PXRoaXMubGlzdGVuZXJzLmdldChuKTt0cnl7cj15aWVsZCB0KGkpfWNhdGNoKHQpe3M9dH19dGhpcy5wb3N0TWVzc2FnZSh7dHlwZTpuLGlkOm8scGF5bG9hZDpyLGVycm9yOnMsaXNSZXBseTohMH0pfSkpfXBvc3RNZXNzYWdlKHQpe3RoaXMucG9ydC5wb3N0TWVzc2FnZShKU09OLnN0cmluZ2lmeSh0KSl9c2VuZE1lc3NhZ2UodCxlKXtjb25zdCBuPXRoaXMuaWQrKztyZXR1cm4gdGhpcy5wb3N0TWVzc2FnZSh7dHlwZTp0LGlkOm4scGF5bG9hZDplLGVycm9yOm51bGwsaXNSZXBseTohMX0pLG5ldyBQcm9taXNlKCgodCxlKT0+e3RoaXMucmVzcG9uc2VXYWl0cy5zZXQobix7cmVzb2x2ZTp0LHJlamVjdDplfSl9KSl9fWNvbnN0IFZOPW5ldyBXZWFrTWFwLGpOPW5ldyBTZXQsVU49bmV3IE1hcCxXTj1uZXcgTWFwO2Z1bmN0aW9uIEdOKHQsZSl7cmV0dXJuIG49Pntjb25zdCBvPVdOLmdldChlKSxpPVZOLmdldChvKXx8bnVsbDtyZXR1cm4gdChpLG4pfX13aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsKHQ9PntpZigiZXhwZXJpbWVudGFsLmJvb3RzdHJhcCIhPT10LmRhdGEpcmV0dXJuO2NvbnN0IGU9dC5wb3J0c1swXTtpZighZSlyZXR1cm47Y29uc3Qgbj10LnNvdXJjZT90LnNvdXJjZS5mcmFtZUVsZW1lbnQ6bnVsbDtuJiYoZnVuY3Rpb24gbyh0LGUpe2NvbnN0IG49bmV3IEJOKHQpO2pOLmFkZChuKSxXTi5zZXQobixlKSx0LnN0YXJ0KCk7Zm9yKGNvbnN0W3QsZV1vZiBVTil7Y29uc3Qgbz1HTihlLG4pO24ubGlzdGVuKHQsbyl9fSkoZSxuKX0pKTtjbGFzcyBZTnticm9hZGNhc3QodCxlKXtyZXR1cm4oZnVuY3Rpb24gbih0LGUpe2Zvcihjb25zdCB0IG9mIGpOKVdOLmdldCh0KS5pc0Nvbm5lY3RlZHx8KGpOLmRlbGV0ZSh0KSxXTi5kZWxldGUodCkpO2NvbnN0IG49Wy4uLmpOXS5tYXAoKG49Pm4uc2VuZE1lc3NhZ2UodCxlKSkpO3JldHVybiBQcm9taXNlLmFsbChuKX0pKHQsZSl9bGlzdGVuKHQsZSl7IShmdW5jdGlvbiBuKHQsZSl7VU4uc2V0KHQsZSk7Zm9yKGNvbnN0IG4gb2Ygak4pe2NvbnN0IG89R04oZSxuKTtuLmxpc3Rlbih0LG8pfX0pKHQsZSl9dW5saXN0ZW4odCl7IShmdW5jdGlvbiBlKHQpe1VOLmRlbGV0ZSh0KTtmb3IoY29uc3QgZSBvZiBqTillLnVubGlzdGVuKHQpfSkodCl9fVlOLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxZTil9LFlOLsm1cHJvdj1sbyh7dG9rZW46WU4sZmFjdG9yeTpZTi7JtWZhY30pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoWU4sW3t0eXBlOkptfV0sbnVsbCxudWxsKTtjbGFzcyBxTntjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuaXBjPXQsdGhpcy5zdG9yZT1lfWluaXQoKXtjb25zdCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRmLXN0b3JhZ2UiKTt0aGlzLmlwYy5saXN0ZW4oTE4uR0VUX1VSTF9EQVRBLChlPT57aWYoIWUpcmV0dXJuO2NvbnN0IG49YHAuJHtlLnBsdWdpbk5hbWV9LmAsbz17fSxpPXQudGZfc3RvcmFnZS5nZXRVcmxIYXNoRGljdCgpO2ZvcihsZXQgdCBpbiBpKXQuc3RhcnRzV2l0aChuKSYmKG9bdC5zdWJzdHJpbmcobi5sZW5ndGgpXT1pW3RdKTtyZXR1cm4gb30pKSx0aGlzLnN0b3JlLnNlbGVjdChjQSkucGlwZShHdCgodD0+bnVsbCE9PXQpKSxrZSgpKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5pcGMuYnJvYWRjYXN0KExOLkRBVEFfUkVMT0FERUQsdm9pZCAwKX0pKX19cU4uybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHFOKSh1cyhZTiksdXMoRWspKX0scU4uybVwcm92PWxvKHt0b2tlbjpxTixmYWN0b3J5OnFOLsm1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihxTixbe3R5cGU6Sm0sYXJnczpbe3Byb3ZpZGVkSW46InJvb3QifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6WU59LHt0eXBlOkVrfV19KSxudWxsKTtjbGFzcyBaTntjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuaXBjPXQsdGhpcy5zdG9yZT1lfWluaXQoKXtjb25zdCB0PXRoaXMuc3RvcmUuc2VsZWN0KHhEKS5waXBlKFR0KCh0PT50P0R0KHQubWFwKCh0PT50aGlzLnN0b3JlLnNlbGVjdChjTix7ZXhwZXJpbWVudElkOnR9KSkpKS5waXBlKGh0KCh0PT50LmZsYXQoKSkpLGtlKCgodCxlKT0+dC5sZW5ndGg9PT1lLmxlbmd0aCYmdC5ldmVyeSgoKHQsbik9PmVbbl0uaWQ9PT10LmlkKSkpKSxodCgodD0+dC5tYXAoKCh7bmFtZTp0fSk9PnQpKSkpKTpaKFtdKSkpKTt0LnN1YnNjcmliZSgodD0+e3RoaXMuaXBjLmJyb2FkY2FzdChMTi5SVU5TX0NIQU5HRUQsdCl9KSksdGhpcy5pcGMubGlzdGVuKExOLkdFVF9SVU5TLCgoKT0+dC5waXBlKE5lKDEpKS50b1Byb21pc2UoKSkpfX1aTi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8Wk4pKHVzKFlOKSx1cyhFaykpfSxaTi7JtXByb3Y9bG8oe3Rva2VuOlpOLGZhY3Rvcnk6Wk4uybVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFpOLFt7dHlwZTpKbSxhcmdzOlt7cHJvdmlkZWRJbjoicm9vdCJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpZTn0se3R5cGU6RWt9XX0pLG51bGwpO2NsYXNzIFhOe2NvbnN0cnVjdG9yKHQsZSl7ZS5pbml0KCksdC5pbml0KCl9cmVnaXN0ZXJQbHVnaW5JZnJhbWUodCxlKXshKGZ1bmN0aW9uIG4odCxlKXtWTi5zZXQodCx7cGx1Z2luTmFtZTplfSl9KSh0LGUpfX1YTi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8WE4pKHVzKFpOKSx1cyhxTikpfSxYTi7JtW1vZD1abyh7dHlwZTpYTn0pLFhOLsm1aW5qPWNvKHtwcm92aWRlcnM6W1lOLHFOLFpOXSxpbXBvcnRzOltbRUQsQ0EsRk5dXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oWE4se2ltcG9ydHM6W0VELENBLEZOXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoWE4sW3t0eXBlOmtfLGFyZ3M6W3twcm92aWRlcnM6W1lOLHFOLFpOXSxpbXBvcnRzOltFRCxDQSxGTl19XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpaTn0se3R5cGU6cU59XX0pLG51bGwpO2NvbnN0IEtOPVd3KCJbQWxlcnRdIEFsZXJ0IFJlcG9ydGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSk7Y2xhc3MgSk57Y29uc3RydWN0b3IodCxlLG4pe3RoaXMuYWN0aW9ucyQ9dCx0aGlzLnN0b3JlPWUsdGhpcy5hbGVydEFjdGlvbk1vZHVsZT1uLHRoaXMucmVwb3J0UmVnaXN0ZXJlZEFjdGlvbkFsZXJ0cyQ9Z1MoKCgpPT50aGlzLmFjdGlvbnMkLnBpcGUoX24oKHQ9Pntjb25zdCBlPXRoaXMuYWxlcnRBY3Rpb25Nb2R1bGUuZ2V0QWxlcnRGcm9tQWN0aW9uKHQpO2UmJnRoaXMuc3RvcmUuZGlzcGF0Y2goS04oZSkpfSkpKSkse2Rpc3BhdGNoOiExfSl9fUpOLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxKTikodXModlMpLHVzKEVrKSx1cyh2QSkpfSxKTi7JtXByb3Y9bG8oe3Rva2VuOkpOLGZhY3Rvcnk6Sk4uybVmYWN9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEpOLFt7dHlwZTpKbX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTp2U30se3R5cGU6RWt9LHt0eXBlOnZBfV19KSxudWxsKTtjb25zdCBRTj1tUyh7bGF0ZXN0QWxlcnQ6bnVsbH0scFMoS04sKCh0LHtsb2NhbGl6ZWRNZXNzYWdlOmUsZm9sbG93dXBBY3Rpb246bn0pPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2xhdGVzdEFsZXJ0Ontsb2NhbGl6ZWRNZXNzYWdlOmUsZm9sbG93dXBBY3Rpb246bixjcmVhdGVkOkRhdGUubm93KCl9fSkpKSk7ZnVuY3Rpb24gJE4odCxlKXtyZXR1cm4gUU4odCxlKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY29uc3QgdEk9MTMsZUk9Mjcsbkk9MzIsb0k9MzgsaUk9NDA7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpmdW5jdGlvbiBhSSh0LC4uLmUpe3JldHVybiBlLmxlbmd0aD9lLnNvbWUoKGU9PnRbZV0pKTp0LmFsdEtleXx8dC5zaGlmdEtleXx8dC5jdHJsS2V5fHx0Lm1ldGFLZXl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIHJJKHQpe3JldHVybiBudWxsIT10JiYiZmFsc2UiIT1gJHt0fWB9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIHNJKHQsZT0wKXtyZXR1cm4gbEkodCk/TnVtYmVyKHQpOmV9ZnVuY3Rpb24gbEkodCl7cmV0dXJuIWlzTmFOKHBhcnNlRmxvYXQodCkpJiYhaXNOYU4oTnVtYmVyKHQpKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovZnVuY3Rpb24gY0kodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/dDpbdF19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIGRJKHQpe3JldHVybiBudWxsPT10PyIiOiJzdHJpbmciPT10eXBlb2YgdD90OmAke3R9cHhgfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiBwSSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGNoP3QubmF0aXZlRWxlbWVudDp0fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9sZXQgbUksdUk7dHJ5e21JPSJ1bmRlZmluZWQiIT10eXBlb2YgSW50bCYmSW50bC52OEJyZWFrSXRlcmF0b3J9Y2F0Y2godCl7bUk9ITF9Y2xhc3MgZkl7Y29uc3RydWN0b3IodCl7dGhpcy5fcGxhdGZvcm1JZD10LHRoaXMuaXNCcm93c2VyPXRoaXMuX3BsYXRmb3JtSWQ/KGZ1bmN0aW9uIGUodCl7cmV0dXJuImJyb3dzZXIiPT09dH0pKHRoaXMuX3BsYXRmb3JtSWQpOiJvYmplY3QiPT10eXBlb2YgZG9jdW1lbnQmJiEhZG9jdW1lbnQsdGhpcy5FREdFPXRoaXMuaXNCcm93c2VyJiYvKGVkZ2UpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0aGlzLlRSSURFTlQ9dGhpcy5pc0Jyb3dzZXImJi8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksdGhpcy5CTElOSz10aGlzLmlzQnJvd3NlciYmISghd2luZG93LmNocm9tZSYmIW1JKSYmInVuZGVmaW5lZCIhPXR5cGVvZiBDU1MmJiF0aGlzLkVER0UmJiF0aGlzLlRSSURFTlQsdGhpcy5XRUJLSVQ9dGhpcy5pc0Jyb3dzZXImJi9BcHBsZVdlYktpdC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJiF0aGlzLkJMSU5LJiYhdGhpcy5FREdFJiYhdGhpcy5UUklERU5ULHRoaXMuSU9TPXRoaXMuaXNCcm93c2VyJiYvaVBhZHxpUGhvbmV8aVBvZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmISgiTVNTdHJlYW0iaW4gd2luZG93KSx0aGlzLkZJUkVGT1g9dGhpcy5pc0Jyb3dzZXImJi8oZmlyZWZveHxtaW5lZmllbGQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0aGlzLkFORFJPSUQ9dGhpcy5pc0Jyb3dzZXImJi9hbmRyb2lkL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmIXRoaXMuVFJJREVOVCx0aGlzLlNBRkFSST10aGlzLmlzQnJvd3NlciYmL3NhZmFyaS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJnRoaXMuV0VCS0lUfX1mSS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8ZkkpKHVzKEhfKSl9LGZJLsm1cHJvdj1sbyh7ZmFjdG9yeTpmdW5jdGlvbiB0KCl7cmV0dXJuIG5ldyBmSSh1cyhIXykpfSx0b2tlbjpmSSxwcm92aWRlZEluOiJyb290In0pLGZJLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6T2JqZWN0LGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W0hfXX1dfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihmSSxbe3R5cGU6Sm0sYXJnczpbe3Byb3ZpZGVkSW46InJvb3QifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6T2JqZWN0LGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W0hfXX1dfV19KSxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIGdJe31nSS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8Z0kpfSxnSS7JtW1vZD1abyh7dHlwZTpnSX0pLGdJLsm1aW5qPWNvKHt9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGdJLFt7dHlwZTprXyxhcmdzOlt7fV19XSxudWxsLG51bGwpO2NvbnN0IGhJPVsiY29sb3IiLCJidXR0b24iLCJjaGVja2JveCIsImRhdGUiLCJkYXRldGltZS1sb2NhbCIsImVtYWlsIiwiZmlsZSIsImhpZGRlbiIsImltYWdlIiwibW9udGgiLCJudW1iZXIiLCJwYXNzd29yZCIsInJhZGlvIiwicmFuZ2UiLCJyZXNldCIsInNlYXJjaCIsInN1Ym1pdCIsInRlbCIsInRleHQiLCJ0aW1lIiwidXJsIiwid2VlayJdO2Z1bmN0aW9uIGJJKCl7aWYodUkpcmV0dXJuIHVJO2lmKCJvYmplY3QiIT10eXBlb2YgZG9jdW1lbnR8fCFkb2N1bWVudClyZXR1cm4gdUk9bmV3IFNldChoSSksdUk7bGV0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTtyZXR1cm4gdUk9bmV3IFNldChoSS5maWx0ZXIoKGU9Pih0LnNldEF0dHJpYnV0ZSgidHlwZSIsZSksdC50eXBlPT09ZSkpKSksdUl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2xldCB5SSxfSSxDSSxNSTtmdW5jdGlvbiB2SSh0KXtyZXR1cm4oZnVuY3Rpb24gZSgpe2lmKG51bGw9PXlJJiYidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyl0cnl7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInRlc3QiLG51bGwsT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJwYXNzaXZlIix7Z2V0OigpPT55ST0hMH0pKX1maW5hbGx5e3lJPXlJfHwhMX1yZXR1cm4geUl9KSgpP3Q6ISF0LmNhcHR1cmV9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIHhJKCl7aWYobnVsbD09Q0kpe2lmKCJvYmplY3QiIT10eXBlb2YgZG9jdW1lbnR8fCFkb2N1bWVudHx8ImZ1bmN0aW9uIiE9dHlwZW9mIEVsZW1lbnR8fCFFbGVtZW50KXJldHVybiBDST0hMSxDSTtpZigic2Nyb2xsQmVoYXZpb3IiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlKUNJPSEwO2Vsc2V7Y29uc3QgdD1FbGVtZW50LnByb3RvdHlwZS5zY3JvbGxUbztDST0hIXQmJiEvXHtccypcW25hdGl2ZSBjb2RlXF1ccypcfS8udGVzdCh0LnRvU3RyaW5nKCkpfX1yZXR1cm4gQ0l9ZnVuY3Rpb24gT0koKXtpZigib2JqZWN0IiE9dHlwZW9mIGRvY3VtZW50fHwhZG9jdW1lbnQpcmV0dXJuIDA7aWYobnVsbD09X0kpe2NvbnN0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksZT10LnN0eWxlO3QuZGlyPSJydGwiLGUud2lkdGg9IjFweCIsZS5vdmVyZmxvdz0iYXV0byIsZS52aXNpYmlsaXR5PSJoaWRkZW4iLGUucG9pbnRlckV2ZW50cz0ibm9uZSIsZS5wb3NpdGlvbj0iYWJzb2x1dGUiO2NvbnN0IG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iiksbz1uLnN0eWxlO28ud2lkdGg9IjJweCIsby5oZWlnaHQ9IjFweCIsdC5hcHBlbmRDaGlsZChuKSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHQpLF9JPTAsMD09PXQuc2Nyb2xsTGVmdCYmKHQuc2Nyb2xsTGVmdD0xLF9JPTA9PT10LnNjcm9sbExlZnQ/MToyKSx0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCl9cmV0dXJuIF9JfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiBQSSh0KXtpZigoZnVuY3Rpb24gZSgpe2lmKG51bGw9PU1JKXtjb25zdCB0PSJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQ/ZG9jdW1lbnQuaGVhZDpudWxsO01JPSEoIXR8fCF0LmNyZWF0ZVNoYWRvd1Jvb3QmJiF0LmF0dGFjaFNoYWRvdyl9cmV0dXJuIE1JfSkoKSl7Y29uc3QgZT10LmdldFJvb3ROb2RlP3QuZ2V0Um9vdE5vZGUoKTpudWxsO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgU2hhZG93Um9vdCYmU2hhZG93Um9vdCYmZSBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpcmV0dXJuIGV9cmV0dXJuIG51bGx9Y2xhc3Mgd0l7Y3JlYXRlKHQpe3JldHVybiJ1bmRlZmluZWQiPT10eXBlb2YgTXV0YXRpb25PYnNlcnZlcj9udWxsOm5ldyBNdXRhdGlvbk9ic2VydmVyKHQpfX13SS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8d0kpfSx3SS7JtXByb3Y9bG8oe2ZhY3Rvcnk6ZnVuY3Rpb24gdCgpe3JldHVybiBuZXcgd0l9LHRva2VuOndJLHByb3ZpZGVkSW46InJvb3QifSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYih3SSxbe3R5cGU6Sm0sYXJnczpbe3Byb3ZpZGVkSW46InJvb3QifV19XSxudWxsLG51bGwpO2NsYXNzIGtJe2NvbnN0cnVjdG9yKHQpe3RoaXMuX211dGF0aW9uT2JzZXJ2ZXJGYWN0b3J5PXQsdGhpcy5fb2JzZXJ2ZWRFbGVtZW50cz1uZXcgTWFwfW5nT25EZXN0cm95KCl7dGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5mb3JFYWNoKCgodCxlKT0+dGhpcy5fY2xlYW51cE9ic2VydmVyKGUpKSl9b2JzZXJ2ZSh0KXtjb25zdCBlPXBJKHQpO3JldHVybiBuZXcgeSgodD0+e2NvbnN0IG49dGhpcy5fb2JzZXJ2ZUVsZW1lbnQoZSkuc3Vic2NyaWJlKHQpO3JldHVybigpPT57bi51bnN1YnNjcmliZSgpLHRoaXMuX3Vub2JzZXJ2ZUVsZW1lbnQoZSl9fSkpfV9vYnNlcnZlRWxlbWVudCh0KXtpZih0aGlzLl9vYnNlcnZlZEVsZW1lbnRzLmhhcyh0KSl0aGlzLl9vYnNlcnZlZEVsZW1lbnRzLmdldCh0KS5jb3VudCsrO2Vsc2V7Y29uc3QgZT1uZXcgeCxuPXRoaXMuX211dGF0aW9uT2JzZXJ2ZXJGYWN0b3J5LmNyZWF0ZSgodD0+ZS5uZXh0KHQpKSk7biYmbi5vYnNlcnZlKHQse2NoYXJhY3RlckRhdGE6ITAsY2hpbGRMaXN0OiEwLHN1YnRyZWU6ITB9KSx0aGlzLl9vYnNlcnZlZEVsZW1lbnRzLnNldCh0LHtvYnNlcnZlcjpuLHN0cmVhbTplLGNvdW50OjF9KX1yZXR1cm4gdGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5nZXQodCkuc3RyZWFtfV91bm9ic2VydmVFbGVtZW50KHQpe3RoaXMuX29ic2VydmVkRWxlbWVudHMuaGFzKHQpJiYodGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5nZXQodCkuY291bnQtLSx0aGlzLl9vYnNlcnZlZEVsZW1lbnRzLmdldCh0KS5jb3VudHx8dGhpcy5fY2xlYW51cE9ic2VydmVyKHQpKX1fY2xlYW51cE9ic2VydmVyKHQpe2lmKHRoaXMuX29ic2VydmVkRWxlbWVudHMuaGFzKHQpKXtjb25zdHtvYnNlcnZlcjplLHN0cmVhbTpufT10aGlzLl9vYnNlcnZlZEVsZW1lbnRzLmdldCh0KTtlJiZlLmRpc2Nvbm5lY3QoKSxuLmNvbXBsZXRlKCksdGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5kZWxldGUodCl9fX1rSS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8a0kpKHVzKHdJKSl9LGtJLsm1cHJvdj1sbyh7ZmFjdG9yeTpmdW5jdGlvbiB0KCl7cmV0dXJuIG5ldyBrSSh1cyh3SSkpfSx0b2tlbjprSSxwcm92aWRlZEluOiJyb290In0pLGtJLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6d0l9XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGtJLFt7dHlwZTpKbSxhcmdzOlt7cHJvdmlkZWRJbjoicm9vdCJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTp3SX1dfSksbnVsbCk7Y2xhc3MgU0l7Y29uc3RydWN0b3IodCxlLG4pe3RoaXMuX2NvbnRlbnRPYnNlcnZlcj10LHRoaXMuX2VsZW1lbnRSZWY9ZSx0aGlzLl9uZ1pvbmU9bix0aGlzLmV2ZW50PW5ldyBBYix0aGlzLl9kaXNhYmxlZD0hMSx0aGlzLl9jdXJyZW50U3Vic2NyaXB0aW9uPW51bGx9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfXNldCBkaXNhYmxlZCh0KXt0aGlzLl9kaXNhYmxlZD1ySSh0KSx0aGlzLl9kaXNhYmxlZD90aGlzLl91bnN1YnNjcmliZSgpOnRoaXMuX3N1YnNjcmliZSgpfWdldCBkZWJvdW5jZSgpe3JldHVybiB0aGlzLl9kZWJvdW5jZX1zZXQgZGVib3VuY2UodCl7dGhpcy5fZGVib3VuY2U9c0kodCksdGhpcy5fc3Vic2NyaWJlKCl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5fY3VycmVudFN1YnNjcmlwdGlvbnx8dGhpcy5kaXNhYmxlZHx8dGhpcy5fc3Vic2NyaWJlKCl9bmdPbkRlc3Ryb3koKXt0aGlzLl91bnN1YnNjcmliZSgpfV9zdWJzY3JpYmUoKXt0aGlzLl91bnN1YnNjcmliZSgpO2NvbnN0IHQ9dGhpcy5fY29udGVudE9ic2VydmVyLm9ic2VydmUodGhpcy5fZWxlbWVudFJlZik7dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgoKT0+e3RoaXMuX2N1cnJlbnRTdWJzY3JpcHRpb249KHRoaXMuZGVib3VuY2U/dC5waXBlKGRlKHRoaXMuZGVib3VuY2UpKTp0KS5zdWJzY3JpYmUodGhpcy5ldmVudCl9KSl9X3Vuc3Vic2NyaWJlKCl7dmFyIHQ7bnVsbD09PSh0PXRoaXMuX2N1cnJlbnRTdWJzY3JpcHRpb24pfHx2b2lkIDA9PT10fHx0LnVuc3Vic2NyaWJlKCl9fVNJLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxTSSkoTXUoa0kpLE11KGNoKSxNdSh0QykpfSxTSS7JtWRpcj1Kbyh7dHlwZTpTSSxzZWxlY3RvcnM6W1siIiwiY2RrT2JzZXJ2ZUNvbnRlbnQiLCIiXV0saW5wdXRzOntkaXNhYmxlZDpbImNka09ic2VydmVDb250ZW50RGlzYWJsZWQiLCJkaXNhYmxlZCJdLGRlYm91bmNlOiJkZWJvdW5jZSJ9LG91dHB1dHM6e2V2ZW50OiJjZGtPYnNlcnZlQ29udGVudCJ9LGV4cG9ydEFzOlsiY2RrT2JzZXJ2ZUNvbnRlbnQiXX0pLFNJLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6a0l9LHt0eXBlOmNofSx7dHlwZTp0Q31dLFNJLnByb3BEZWNvcmF0b3JzPXtldmVudDpbe3R5cGU6X18sYXJnczpbImNka09ic2VydmVDb250ZW50Il19XSxkaXNhYmxlZDpbe3R5cGU6eV8sYXJnczpbImNka09ic2VydmVDb250ZW50RGlzYWJsZWQiXX1dLGRlYm91bmNlOlt7dHlwZTp5X31dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFNJLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6IltjZGtPYnNlcnZlQ29udGVudF0iLGV4cG9ydEFzOiJjZGtPYnNlcnZlQ29udGVudCJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTprSX0se3R5cGU6Y2h9LHt0eXBlOnRDfV19KSx7ZXZlbnQ6W3t0eXBlOl9fLGFyZ3M6WyJjZGtPYnNlcnZlQ29udGVudCJdfV0sZGlzYWJsZWQ6W3t0eXBlOnlfLGFyZ3M6WyJjZGtPYnNlcnZlQ29udGVudERpc2FibGVkIl19XSxkZWJvdW5jZTpbe3R5cGU6eV99XX0pO2NsYXNzIERJe31mdW5jdGlvbiBFSSh0LGUpe3JldHVybih0LmdldEF0dHJpYnV0ZShlKXx8IiIpLm1hdGNoKC9cUysvZyl8fFtdfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9ESS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8REkpfSxESS7JtW1vZD1abyh7dHlwZTpESX0pLERJLsm1aW5qPWNvKHtwcm92aWRlcnM6W3dJXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oREkse2RlY2xhcmF0aW9uczpbU0ldLGV4cG9ydHM6W1NJXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoREksW3t0eXBlOmtfLGFyZ3M6W3tleHBvcnRzOltTSV0sZGVjbGFyYXRpb25zOltTSV0scHJvdmlkZXJzOlt3SV19XX1dLG51bGwsbnVsbCk7Y29uc3QgQUk9ImNkay1kZXNjcmliZWRieS1tZXNzYWdlLWNvbnRhaW5lciIsUkk9ImNkay1kZXNjcmliZWRieS1ob3N0IjtsZXQgVEk9MDtjb25zdCBOST1uZXcgTWFwO2xldCBJST1udWxsO2NsYXNzIHpJe2NvbnN0cnVjdG9yKHQpe3RoaXMuX2RvY3VtZW50PXR9ZGVzY3JpYmUodCxlLG4pe2lmKCF0aGlzLl9jYW5CZURlc2NyaWJlZCh0LGUpKXJldHVybjtjb25zdCBvPUhJKGUsbik7InN0cmluZyIhPXR5cGVvZiBlPyhGSShlKSxOSS5zZXQobyx7bWVzc2FnZUVsZW1lbnQ6ZSxyZWZlcmVuY2VDb3VudDowfSkpOk5JLmhhcyhvKXx8dGhpcy5fY3JlYXRlTWVzc2FnZUVsZW1lbnQoZSxuKSx0aGlzLl9pc0VsZW1lbnREZXNjcmliZWRCeU1lc3NhZ2UodCxvKXx8dGhpcy5fYWRkTWVzc2FnZVJlZmVyZW5jZSh0LG8pfXJlbW92ZURlc2NyaXB0aW9uKHQsZSxuKXtpZighZXx8IXRoaXMuX2lzRWxlbWVudE5vZGUodCkpcmV0dXJuO2NvbnN0IG89SEkoZSxuKTtpZih0aGlzLl9pc0VsZW1lbnREZXNjcmliZWRCeU1lc3NhZ2UodCxvKSYmdGhpcy5fcmVtb3ZlTWVzc2FnZVJlZmVyZW5jZSh0LG8pLCJzdHJpbmciPT10eXBlb2YgZSl7Y29uc3QgdD1OSS5nZXQobyk7dCYmMD09PXQucmVmZXJlbmNlQ291bnQmJnRoaXMuX2RlbGV0ZU1lc3NhZ2VFbGVtZW50KG8pfUlJJiYwPT09SUkuY2hpbGROb2Rlcy5sZW5ndGgmJnRoaXMuX2RlbGV0ZU1lc3NhZ2VzQ29udGFpbmVyKCl9bmdPbkRlc3Ryb3koKXtjb25zdCB0PXRoaXMuX2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIltjZGstZGVzY3JpYmVkYnktaG9zdF0iKTtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKyl0aGlzLl9yZW1vdmVDZGtEZXNjcmliZWRCeVJlZmVyZW5jZUlkcyh0W2VdKSx0W2VdLnJlbW92ZUF0dHJpYnV0ZShSSSk7SUkmJnRoaXMuX2RlbGV0ZU1lc3NhZ2VzQ29udGFpbmVyKCksTkkuY2xlYXIoKX1fY3JlYXRlTWVzc2FnZUVsZW1lbnQodCxlKXtjb25zdCBuPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO0ZJKG4pLG4udGV4dENvbnRlbnQ9dCxlJiZuLnNldEF0dHJpYnV0ZSgicm9sZSIsZSksdGhpcy5fY3JlYXRlTWVzc2FnZXNDb250YWluZXIoKSxJSS5hcHBlbmRDaGlsZChuKSxOSS5zZXQoSEkodCxlKSx7bWVzc2FnZUVsZW1lbnQ6bixyZWZlcmVuY2VDb3VudDowfSl9X2RlbGV0ZU1lc3NhZ2VFbGVtZW50KHQpe2NvbnN0IGU9TkkuZ2V0KHQpLG49ZSYmZS5tZXNzYWdlRWxlbWVudDtJSSYmbiYmSUkucmVtb3ZlQ2hpbGQobiksTkkuZGVsZXRlKHQpfV9jcmVhdGVNZXNzYWdlc0NvbnRhaW5lcigpe2lmKCFJSSl7Y29uc3QgdD10aGlzLl9kb2N1bWVudC5nZXRFbGVtZW50QnlJZChBSSk7dCYmdC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCksSUk9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksSUkuaWQ9QUksSUkuc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIixJSS5jbGFzc0xpc3QuYWRkKCJjZGstdmlzdWFsbHktaGlkZGVuIiksdGhpcy5fZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChJSSl9fV9kZWxldGVNZXNzYWdlc0NvbnRhaW5lcigpe0lJJiZJSS5wYXJlbnROb2RlJiYoSUkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChJSSksSUk9bnVsbCl9X3JlbW92ZUNka0Rlc2NyaWJlZEJ5UmVmZXJlbmNlSWRzKHQpe2NvbnN0IGU9RUkodCwiYXJpYS1kZXNjcmliZWRieSIpLmZpbHRlcigodD0+MCE9dC5pbmRleE9mKCJjZGstZGVzY3JpYmVkYnktbWVzc2FnZSIpKSk7dC5zZXRBdHRyaWJ1dGUoImFyaWEtZGVzY3JpYmVkYnkiLGUuam9pbigiICIpKX1fYWRkTWVzc2FnZVJlZmVyZW5jZSh0LGUpe2NvbnN0IG49TkkuZ2V0KGUpOyEoZnVuY3Rpb24gbyh0LGUsbil7Y29uc3Qgbz1FSSh0LGUpO28uc29tZSgodD0+dC50cmltKCk9PW4udHJpbSgpKSl8fChvLnB1c2gobi50cmltKCkpLHQuc2V0QXR0cmlidXRlKGUsby5qb2luKCIgIikpKX0pKHQsImFyaWEtZGVzY3JpYmVkYnkiLG4ubWVzc2FnZUVsZW1lbnQuaWQpLHQuc2V0QXR0cmlidXRlKFJJLCIiKSxuLnJlZmVyZW5jZUNvdW50Kyt9X3JlbW92ZU1lc3NhZ2VSZWZlcmVuY2UodCxlKXtjb25zdCBuPU5JLmdldChlKTtuLnJlZmVyZW5jZUNvdW50LS0sKGZ1bmN0aW9uIG8odCxlLG4pe2NvbnN0IG89RUkodCxlKS5maWx0ZXIoKHQ9PnQhPW4udHJpbSgpKSk7by5sZW5ndGg/dC5zZXRBdHRyaWJ1dGUoZSxvLmpvaW4oIiAiKSk6dC5yZW1vdmVBdHRyaWJ1dGUoZSl9KSh0LCJhcmlhLWRlc2NyaWJlZGJ5IixuLm1lc3NhZ2VFbGVtZW50LmlkKSx0LnJlbW92ZUF0dHJpYnV0ZShSSSl9X2lzRWxlbWVudERlc2NyaWJlZEJ5TWVzc2FnZSh0LGUpe2NvbnN0IG49RUkodCwiYXJpYS1kZXNjcmliZWRieSIpLG89TkkuZ2V0KGUpLGk9byYmby5tZXNzYWdlRWxlbWVudC5pZDtyZXR1cm4hIWkmJi0xIT1uLmluZGV4T2YoaSl9X2NhbkJlRGVzY3JpYmVkKHQsZSl7aWYoIXRoaXMuX2lzRWxlbWVudE5vZGUodCkpcmV0dXJuITE7aWYoZSYmIm9iamVjdCI9PXR5cGVvZiBlKXJldHVybiEwO2NvbnN0IG49bnVsbD09ZT8iIjpgJHtlfWAudHJpbSgpLG89dC5nZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiKTtyZXR1cm4hKCFufHxvJiZvLnRyaW0oKT09PW4pfV9pc0VsZW1lbnROb2RlKHQpe3JldHVybiB0Lm5vZGVUeXBlPT09dGhpcy5fZG9jdW1lbnQuRUxFTUVOVF9OT0RFfX1mdW5jdGlvbiBISSh0LGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD9gJHtlfHwiIn0vJHt0fWA6dH1mdW5jdGlvbiBGSSh0KXt0LmlkfHwodC5pZD0iY2RrLWRlc2NyaWJlZGJ5LW1lc3NhZ2UtIitUSSsrKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovekkuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHpJKSh1cyhVQykpfSx6SS7JtXByb3Y9bG8oe2ZhY3Rvcnk6ZnVuY3Rpb24gdCgpe3JldHVybiBuZXcgekkodXMoVUMpKX0sdG9rZW46ekkscHJvdmlkZWRJbjoicm9vdCJ9KSx6SS5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltVQ119XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoekksW3t0eXBlOkptLGFyZ3M6W3twcm92aWRlZEluOiJyb290In1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltVQ119XX1dfSksbnVsbCk7Y2xhc3MgTEl7Y29uc3RydWN0b3IodCl7dGhpcy5faXRlbXM9dCx0aGlzLl9hY3RpdmVJdGVtSW5kZXg9LTEsdGhpcy5fYWN0aXZlSXRlbT1udWxsLHRoaXMuX3dyYXA9ITEsdGhpcy5fbGV0dGVyS2V5U3RyZWFtPW5ldyB4LHRoaXMuX3R5cGVhaGVhZFN1YnNjcmlwdGlvbj1sLkVNUFRZLHRoaXMuX3ZlcnRpY2FsPSEwLHRoaXMuX2FsbG93ZWRNb2RpZmllcktleXM9W10sdGhpcy5faG9tZUFuZEVuZD0hMSx0aGlzLl9za2lwUHJlZGljYXRlRm49dD0+dC5kaXNhYmxlZCx0aGlzLl9wcmVzc2VkTGV0dGVycz1bXSx0aGlzLnRhYk91dD1uZXcgeCx0aGlzLmNoYW5nZT1uZXcgeCx0IGluc3RhbmNlb2YgVGImJnQuY2hhbmdlcy5zdWJzY3JpYmUoKHQ9PntpZih0aGlzLl9hY3RpdmVJdGVtKXtjb25zdCBlPXQudG9BcnJheSgpLmluZGV4T2YodGhpcy5fYWN0aXZlSXRlbSk7ZT4tMSYmZSE9PXRoaXMuX2FjdGl2ZUl0ZW1JbmRleCYmKHRoaXMuX2FjdGl2ZUl0ZW1JbmRleD1lKX19KSl9c2tpcFByZWRpY2F0ZSh0KXtyZXR1cm4gdGhpcy5fc2tpcFByZWRpY2F0ZUZuPXQsdGhpc313aXRoV3JhcCh0PSEwKXtyZXR1cm4gdGhpcy5fd3JhcD10LHRoaXN9d2l0aFZlcnRpY2FsT3JpZW50YXRpb24odD0hMCl7cmV0dXJuIHRoaXMuX3ZlcnRpY2FsPXQsdGhpc313aXRoSG9yaXpvbnRhbE9yaWVudGF0aW9uKHQpe3JldHVybiB0aGlzLl9ob3Jpem9udGFsPXQsdGhpc313aXRoQWxsb3dlZE1vZGlmaWVyS2V5cyh0KXtyZXR1cm4gdGhpcy5fYWxsb3dlZE1vZGlmaWVyS2V5cz10LHRoaXN9d2l0aFR5cGVBaGVhZCh0PTIwMCl7aWYoKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZ0aGlzLl9pdGVtcy5sZW5ndGgmJnRoaXMuX2l0ZW1zLnNvbWUoKHQ9PiJmdW5jdGlvbiIhPXR5cGVvZiB0LmdldExhYmVsKSkpdGhyb3cgRXJyb3IoIkxpc3RLZXlNYW5hZ2VyIGl0ZW1zIGluIHR5cGVhaGVhZCBtb2RlIG11c3QgaW1wbGVtZW50IHRoZSBgZ2V0TGFiZWxgIG1ldGhvZC4iKTtyZXR1cm4gdGhpcy5fdHlwZWFoZWFkU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fdHlwZWFoZWFkU3Vic2NyaXB0aW9uPXRoaXMuX2xldHRlcktleVN0cmVhbS5waXBlKF9uKCh0PT50aGlzLl9wcmVzc2VkTGV0dGVycy5wdXNoKHQpKSksZGUodCksR3QoKCgpPT50aGlzLl9wcmVzc2VkTGV0dGVycy5sZW5ndGg+MCkpLGh0KCgoKT0+dGhpcy5fcHJlc3NlZExldHRlcnMuam9pbigiIikpKSkuc3Vic2NyaWJlKCh0PT57Y29uc3QgZT10aGlzLl9nZXRJdGVtc0FycmF5KCk7Zm9yKGxldCBuPTE7bjxlLmxlbmd0aCsxO24rKyl7Y29uc3Qgbz0odGhpcy5fYWN0aXZlSXRlbUluZGV4K24pJWUubGVuZ3RoLGk9ZVtvXTtpZighdGhpcy5fc2tpcFByZWRpY2F0ZUZuKGkpJiYwPT09aS5nZXRMYWJlbCgpLnRvVXBwZXJDYXNlKCkudHJpbSgpLmluZGV4T2YodCkpe3RoaXMuc2V0QWN0aXZlSXRlbShvKTticmVha319dGhpcy5fcHJlc3NlZExldHRlcnM9W119KSksdGhpc313aXRoSG9tZUFuZEVuZCh0PSEwKXtyZXR1cm4gdGhpcy5faG9tZUFuZEVuZD10LHRoaXN9c2V0QWN0aXZlSXRlbSh0KXtjb25zdCBlPXRoaXMuX2FjdGl2ZUl0ZW07dGhpcy51cGRhdGVBY3RpdmVJdGVtKHQpLHRoaXMuX2FjdGl2ZUl0ZW0hPT1lJiZ0aGlzLmNoYW5nZS5uZXh0KHRoaXMuX2FjdGl2ZUl0ZW1JbmRleCl9b25LZXlkb3duKHQpe2NvbnN0IGU9dC5rZXlDb2RlLG49WyJhbHRLZXkiLCJjdHJsS2V5IiwibWV0YUtleSIsInNoaWZ0S2V5Il0uZXZlcnkoKGU9PiF0W2VdfHx0aGlzLl9hbGxvd2VkTW9kaWZpZXJLZXlzLmluZGV4T2YoZSk+LTEpKTtzd2l0Y2goZSl7Y2FzZSA5OnJldHVybiB2b2lkIHRoaXMudGFiT3V0Lm5leHQoKTtjYXNlIGlJOmlmKHRoaXMuX3ZlcnRpY2FsJiZuKXt0aGlzLnNldE5leHRJdGVtQWN0aXZlKCk7YnJlYWt9cmV0dXJuO2Nhc2Ugb0k6aWYodGhpcy5fdmVydGljYWwmJm4pe3RoaXMuc2V0UHJldmlvdXNJdGVtQWN0aXZlKCk7YnJlYWt9cmV0dXJuO2Nhc2UgMzk6aWYodGhpcy5faG9yaXpvbnRhbCYmbil7InJ0bCI9PT10aGlzLl9ob3Jpem9udGFsP3RoaXMuc2V0UHJldmlvdXNJdGVtQWN0aXZlKCk6dGhpcy5zZXROZXh0SXRlbUFjdGl2ZSgpO2JyZWFrfXJldHVybjtjYXNlIDM3OmlmKHRoaXMuX2hvcml6b250YWwmJm4peyJydGwiPT09dGhpcy5faG9yaXpvbnRhbD90aGlzLnNldE5leHRJdGVtQWN0aXZlKCk6dGhpcy5zZXRQcmV2aW91c0l0ZW1BY3RpdmUoKTticmVha31yZXR1cm47Y2FzZSAzNjppZih0aGlzLl9ob21lQW5kRW5kJiZuKXt0aGlzLnNldEZpcnN0SXRlbUFjdGl2ZSgpO2JyZWFrfXJldHVybjtjYXNlIDM1OmlmKHRoaXMuX2hvbWVBbmRFbmQmJm4pe3RoaXMuc2V0TGFzdEl0ZW1BY3RpdmUoKTticmVha31yZXR1cm47ZGVmYXVsdDpyZXR1cm4gdm9pZCgobnx8YUkodCwic2hpZnRLZXkiKSkmJih0LmtleSYmMT09PXQua2V5Lmxlbmd0aD90aGlzLl9sZXR0ZXJLZXlTdHJlYW0ubmV4dCh0LmtleS50b0xvY2FsZVVwcGVyQ2FzZSgpKTooZT49NjUmJmU8PTkwfHxlPj00OCYmZTw9NTcpJiZ0aGlzLl9sZXR0ZXJLZXlTdHJlYW0ubmV4dChTdHJpbmcuZnJvbUNoYXJDb2RlKGUpKSkpfXRoaXMuX3ByZXNzZWRMZXR0ZXJzPVtdLHQucHJldmVudERlZmF1bHQoKX1nZXQgYWN0aXZlSXRlbUluZGV4KCl7cmV0dXJuIHRoaXMuX2FjdGl2ZUl0ZW1JbmRleH1nZXQgYWN0aXZlSXRlbSgpe3JldHVybiB0aGlzLl9hY3RpdmVJdGVtfWlzVHlwaW5nKCl7cmV0dXJuIHRoaXMuX3ByZXNzZWRMZXR0ZXJzLmxlbmd0aD4wfXNldEZpcnN0SXRlbUFjdGl2ZSgpe3RoaXMuX3NldEFjdGl2ZUl0ZW1CeUluZGV4KDAsMSl9c2V0TGFzdEl0ZW1BY3RpdmUoKXt0aGlzLl9zZXRBY3RpdmVJdGVtQnlJbmRleCh0aGlzLl9pdGVtcy5sZW5ndGgtMSwtMSl9c2V0TmV4dEl0ZW1BY3RpdmUoKXt0aGlzLl9hY3RpdmVJdGVtSW5kZXg8MD90aGlzLnNldEZpcnN0SXRlbUFjdGl2ZSgpOnRoaXMuX3NldEFjdGl2ZUl0ZW1CeURlbHRhKDEpfXNldFByZXZpb3VzSXRlbUFjdGl2ZSgpe3RoaXMuX2FjdGl2ZUl0ZW1JbmRleDwwJiZ0aGlzLl93cmFwP3RoaXMuc2V0TGFzdEl0ZW1BY3RpdmUoKTp0aGlzLl9zZXRBY3RpdmVJdGVtQnlEZWx0YSgtMSl9dXBkYXRlQWN0aXZlSXRlbSh0KXtjb25zdCBlPXRoaXMuX2dldEl0ZW1zQXJyYXkoKSxuPSJudW1iZXIiPT10eXBlb2YgdD90OmUuaW5kZXhPZih0KSxvPWVbbl07dGhpcy5fYWN0aXZlSXRlbT1udWxsPT1vP251bGw6byx0aGlzLl9hY3RpdmVJdGVtSW5kZXg9bn1fc2V0QWN0aXZlSXRlbUJ5RGVsdGEodCl7dGhpcy5fd3JhcD90aGlzLl9zZXRBY3RpdmVJbldyYXBNb2RlKHQpOnRoaXMuX3NldEFjdGl2ZUluRGVmYXVsdE1vZGUodCl9X3NldEFjdGl2ZUluV3JhcE1vZGUodCl7Y29uc3QgZT10aGlzLl9nZXRJdGVtc0FycmF5KCk7Zm9yKGxldCBuPTE7bjw9ZS5sZW5ndGg7bisrKXtjb25zdCBvPSh0aGlzLl9hY3RpdmVJdGVtSW5kZXgrdCpuK2UubGVuZ3RoKSVlLmxlbmd0aDtpZighdGhpcy5fc2tpcFByZWRpY2F0ZUZuKGVbb10pKXJldHVybiB2b2lkIHRoaXMuc2V0QWN0aXZlSXRlbShvKX19X3NldEFjdGl2ZUluRGVmYXVsdE1vZGUodCl7dGhpcy5fc2V0QWN0aXZlSXRlbUJ5SW5kZXgodGhpcy5fYWN0aXZlSXRlbUluZGV4K3QsdCl9X3NldEFjdGl2ZUl0ZW1CeUluZGV4KHQsZSl7Y29uc3Qgbj10aGlzLl9nZXRJdGVtc0FycmF5KCk7aWYoblt0XSl7Zm9yKDt0aGlzLl9za2lwUHJlZGljYXRlRm4oblt0XSk7KWlmKCFuW3QrPWVdKXJldHVybjt0aGlzLnNldEFjdGl2ZUl0ZW0odCl9fV9nZXRJdGVtc0FycmF5KCl7cmV0dXJuIHRoaXMuX2l0ZW1zIGluc3RhbmNlb2YgVGI/dGhpcy5faXRlbXMudG9BcnJheSgpOnRoaXMuX2l0ZW1zfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY2xhc3MgQkkgZXh0ZW5kcyBMSXtzZXRBY3RpdmVJdGVtKHQpe3RoaXMuYWN0aXZlSXRlbSYmdGhpcy5hY3RpdmVJdGVtLnNldEluYWN0aXZlU3R5bGVzKCksc3VwZXIuc2V0QWN0aXZlSXRlbSh0KSx0aGlzLmFjdGl2ZUl0ZW0mJnRoaXMuYWN0aXZlSXRlbS5zZXRBY3RpdmVTdHlsZXMoKX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NsYXNzIFZJIGV4dGVuZHMgTEl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX29yaWdpbj0icHJvZ3JhbSJ9c2V0Rm9jdXNPcmlnaW4odCl7cmV0dXJuIHRoaXMuX29yaWdpbj10LHRoaXN9c2V0QWN0aXZlSXRlbSh0KXtzdXBlci5zZXRBY3RpdmVJdGVtKHQpLHRoaXMuYWN0aXZlSXRlbSYmdGhpcy5hY3RpdmVJdGVtLmZvY3VzKHRoaXMuX29yaWdpbil9fWNsYXNzIGpJe2NvbnN0cnVjdG9yKHQpe3RoaXMuX3BsYXRmb3JtPXR9aXNEaXNhYmxlZCh0KXtyZXR1cm4gdC5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIil9aXNWaXNpYmxlKHQpe3JldHVybihmdW5jdGlvbiBlKHQpe3JldHVybiEhKHQub2Zmc2V0V2lkdGh8fHQub2Zmc2V0SGVpZ2h0fHwiZnVuY3Rpb24iPT10eXBlb2YgdC5nZXRDbGllbnRSZWN0cyYmdC5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCl9KSh0KSYmInZpc2libGUiPT09Z2V0Q29tcHV0ZWRTdHlsZSh0KS52aXNpYmlsaXR5fWlzVGFiYmFibGUodCl7aWYoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm4hMTtjb25zdCBlPShmdW5jdGlvbiBvKHQpe3RyeXtyZXR1cm4gdC5mcmFtZUVsZW1lbnR9Y2F0Y2godCl7cmV0dXJuIG51bGx9fSkoKGZ1bmN0aW9uIG4odCl7cmV0dXJuIHQub3duZXJEb2N1bWVudCYmdC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHx3aW5kb3d9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLykodCkpO2lmKGUpe2lmKC0xPT09V0koZSkpcmV0dXJuITE7aWYoIXRoaXMuaXNWaXNpYmxlKGUpKXJldHVybiExfWxldCBpPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxhPVdJKHQpO3JldHVybiB0Lmhhc0F0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIik/LTEhPT1hOiJpZnJhbWUiIT09aSYmIm9iamVjdCIhPT1pJiYhKHRoaXMuX3BsYXRmb3JtLldFQktJVCYmdGhpcy5fcGxhdGZvcm0uSU9TJiYhKGZ1bmN0aW9uIHIodCl7bGV0IGU9dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLG49ImlucHV0Ij09PWUmJnQudHlwZTtyZXR1cm4idGV4dCI9PT1ufHwicGFzc3dvcmQiPT09bnx8InNlbGVjdCI9PT1lfHwidGV4dGFyZWEiPT09ZX0pKHQpKSYmKCJhdWRpbyI9PT1pPyEhdC5oYXNBdHRyaWJ1dGUoImNvbnRyb2xzIikmJi0xIT09YToidmlkZW8iPT09aT8tMSE9PWEmJihudWxsIT09YXx8dGhpcy5fcGxhdGZvcm0uRklSRUZPWHx8dC5oYXNBdHRyaWJ1dGUoImNvbnRyb2xzIikpOnQudGFiSW5kZXg+PTApfWlzRm9jdXNhYmxlKHQsZSl7cmV0dXJuKGZ1bmN0aW9uIG4odCl7cmV0dXJuIShmdW5jdGlvbiBlKHQpe3JldHVybihmdW5jdGlvbiBlKHQpe3JldHVybiJpbnB1dCI9PXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0pKHQpJiYiaGlkZGVuIj09dC50eXBlfSkodCkmJigoZnVuY3Rpb24gbih0KXtsZXQgZT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PWV8fCJzZWxlY3QiPT09ZXx8ImJ1dHRvbiI9PT1lfHwidGV4dGFyZWEiPT09ZX0pKHQpfHwoZnVuY3Rpb24gbyh0KXtyZXR1cm4oZnVuY3Rpb24gZSh0KXtyZXR1cm4iYSI9PXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0pKHQpJiZ0Lmhhc0F0dHJpYnV0ZSgiaHJlZiIpfSkodCl8fHQuaGFzQXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiKXx8VUkodCkpfSkodCkmJiF0aGlzLmlzRGlzYWJsZWQodCkmJigobnVsbD09ZT92b2lkIDA6ZS5pZ25vcmVWaXNpYmlsaXR5KXx8dGhpcy5pc1Zpc2libGUodCkpfX1mdW5jdGlvbiBVSSh0KXtpZighdC5oYXNBdHRyaWJ1dGUoInRhYmluZGV4Iil8fHZvaWQgMD09PXQudGFiSW5kZXgpcmV0dXJuITE7bGV0IGU9dC5nZXRBdHRyaWJ1dGUoInRhYmluZGV4Iik7cmV0dXJuIi0zMjc2OCIhPWUmJiEoIWV8fGlzTmFOKHBhcnNlSW50KGUsMTApKSl9ZnVuY3Rpb24gV0kodCl7aWYoIVVJKHQpKXJldHVybiBudWxsO2NvbnN0IGU9cGFyc2VJbnQodC5nZXRBdHRyaWJ1dGUoInRhYmluZGV4Iil8fCIiLDEwKTtyZXR1cm4gaXNOYU4oZSk/LTE6ZX1qSS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8akkpKHVzKGZJKSl9LGpJLsm1cHJvdj1sbyh7ZmFjdG9yeTpmdW5jdGlvbiB0KCl7cmV0dXJuIG5ldyBqSSh1cyhmSSkpfSx0b2tlbjpqSSxwcm92aWRlZEluOiJyb290In0pLGpJLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6Zkl9XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGpJLFt7dHlwZTpKbSxhcmdzOlt7cHJvdmlkZWRJbjoicm9vdCJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpmSX1dfSksbnVsbCk7Y2xhc3MgR0l7Y29uc3RydWN0b3IodCxlLG4sbyxpPSExKXt0aGlzLl9lbGVtZW50PXQsdGhpcy5fY2hlY2tlcj1lLHRoaXMuX25nWm9uZT1uLHRoaXMuX2RvY3VtZW50PW8sdGhpcy5faGFzQXR0YWNoZWQ9ITEsdGhpcy5zdGFydEFuY2hvckxpc3RlbmVyPSgpPT50aGlzLmZvY3VzTGFzdFRhYmJhYmxlRWxlbWVudCgpLHRoaXMuZW5kQW5jaG9yTGlzdGVuZXI9KCk9PnRoaXMuZm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudCgpLHRoaXMuX2VuYWJsZWQ9ITAsaXx8dGhpcy5hdHRhY2hBbmNob3JzKCl9Z2V0IGVuYWJsZWQoKXtyZXR1cm4gdGhpcy5fZW5hYmxlZH1zZXQgZW5hYmxlZCh0KXt0aGlzLl9lbmFibGVkPXQsdGhpcy5fc3RhcnRBbmNob3ImJnRoaXMuX2VuZEFuY2hvciYmKHRoaXMuX3RvZ2dsZUFuY2hvclRhYkluZGV4KHQsdGhpcy5fc3RhcnRBbmNob3IpLHRoaXMuX3RvZ2dsZUFuY2hvclRhYkluZGV4KHQsdGhpcy5fZW5kQW5jaG9yKSl9ZGVzdHJveSgpe2NvbnN0IHQ9dGhpcy5fc3RhcnRBbmNob3IsZT10aGlzLl9lbmRBbmNob3I7dCYmKHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuc3RhcnRBbmNob3JMaXN0ZW5lciksdC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCkpLGUmJihlLnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLmVuZEFuY2hvckxpc3RlbmVyKSxlLnBhcmVudE5vZGUmJmUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlKSksdGhpcy5fc3RhcnRBbmNob3I9dGhpcy5fZW5kQW5jaG9yPW51bGwsdGhpcy5faGFzQXR0YWNoZWQ9ITF9YXR0YWNoQW5jaG9ycygpe3JldHVybiEhdGhpcy5faGFzQXR0YWNoZWR8fCh0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCgpPT57dGhpcy5fc3RhcnRBbmNob3J8fCh0aGlzLl9zdGFydEFuY2hvcj10aGlzLl9jcmVhdGVBbmNob3IoKSx0aGlzLl9zdGFydEFuY2hvci5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5zdGFydEFuY2hvckxpc3RlbmVyKSksdGhpcy5fZW5kQW5jaG9yfHwodGhpcy5fZW5kQW5jaG9yPXRoaXMuX2NyZWF0ZUFuY2hvcigpLHRoaXMuX2VuZEFuY2hvci5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5lbmRBbmNob3JMaXN0ZW5lcikpfSkpLHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZSYmKHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5fc3RhcnRBbmNob3IsdGhpcy5fZWxlbWVudCksdGhpcy5fZWxlbWVudC5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLl9lbmRBbmNob3IsdGhpcy5fZWxlbWVudC5uZXh0U2libGluZyksdGhpcy5faGFzQXR0YWNoZWQ9ITApLHRoaXMuX2hhc0F0dGFjaGVkKX1mb2N1c0luaXRpYWxFbGVtZW50V2hlblJlYWR5KCl7cmV0dXJuIG5ldyBQcm9taXNlKCh0PT57dGhpcy5fZXhlY3V0ZU9uU3RhYmxlKCgoKT0+dCh0aGlzLmZvY3VzSW5pdGlhbEVsZW1lbnQoKSkpKX0pKX1mb2N1c0ZpcnN0VGFiYmFibGVFbGVtZW50V2hlblJlYWR5KCl7cmV0dXJuIG5ldyBQcm9taXNlKCh0PT57dGhpcy5fZXhlY3V0ZU9uU3RhYmxlKCgoKT0+dCh0aGlzLmZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnQoKSkpKX0pKX1mb2N1c0xhc3RUYWJiYWJsZUVsZW1lbnRXaGVuUmVhZHkoKXtyZXR1cm4gbmV3IFByb21pc2UoKHQ9Pnt0aGlzLl9leGVjdXRlT25TdGFibGUoKCgpPT50KHRoaXMuZm9jdXNMYXN0VGFiYmFibGVFbGVtZW50KCkpKSl9KSl9X2dldFJlZ2lvbkJvdW5kYXJ5KHQpe2xldCBlPXRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvckFsbChgW2Nkay1mb2N1cy1yZWdpb24tJHt0fV0sIFtjZGtGb2N1c1JlZ2lvbiR7dH1dLCBbY2RrLWZvY3VzLSR7dH1dYCk7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspZVtuXS5oYXNBdHRyaWJ1dGUoYGNkay1mb2N1cy0ke3R9YCk/Y29uc29sZS53YXJuKGBGb3VuZCB1c2Ugb2YgZGVwcmVjYXRlZCBhdHRyaWJ1dGUgJ2Nkay1mb2N1cy0ke3R9JywgdXNlICdjZGtGb2N1c1JlZ2lvbiR7dH0nIGluc3RlYWQuIFRoZSBkZXByZWNhdGVkIGF0dHJpYnV0ZSB3aWxsIGJlIHJlbW92ZWQgaW4gOC4wLjAuYCxlW25dKTplW25dLmhhc0F0dHJpYnV0ZShgY2RrLWZvY3VzLXJlZ2lvbi0ke3R9YCkmJmNvbnNvbGUud2FybihgRm91bmQgdXNlIG9mIGRlcHJlY2F0ZWQgYXR0cmlidXRlICdjZGstZm9jdXMtcmVnaW9uLSR7dH0nLCB1c2UgJ2Nka0ZvY3VzUmVnaW9uJHt0fScgaW5zdGVhZC4gVGhlIGRlcHJlY2F0ZWQgYXR0cmlidXRlIHdpbGwgYmUgcmVtb3ZlZCBpbiA4LjAuMC5gLGVbbl0pO3JldHVybiJzdGFydCI9PXQ/ZS5sZW5ndGg/ZVswXTp0aGlzLl9nZXRGaXJzdFRhYmJhYmxlRWxlbWVudCh0aGlzLl9lbGVtZW50KTplLmxlbmd0aD9lW2UubGVuZ3RoLTFdOnRoaXMuX2dldExhc3RUYWJiYWJsZUVsZW1lbnQodGhpcy5fZWxlbWVudCl9Zm9jdXNJbml0aWFsRWxlbWVudCgpe2NvbnN0IHQ9dGhpcy5fZWxlbWVudC5xdWVyeVNlbGVjdG9yKCJbY2RrLWZvY3VzLWluaXRpYWxdLCBbY2RrRm9jdXNJbml0aWFsXSIpO2lmKHQpe2lmKHQuaGFzQXR0cmlidXRlKCJjZGstZm9jdXMtaW5pdGlhbCIpJiZjb25zb2xlLndhcm4oIkZvdW5kIHVzZSBvZiBkZXByZWNhdGVkIGF0dHJpYnV0ZSAnY2RrLWZvY3VzLWluaXRpYWwnLCB1c2UgJ2Nka0ZvY3VzSW5pdGlhbCcgaW5zdGVhZC4gVGhlIGRlcHJlY2F0ZWQgYXR0cmlidXRlIHdpbGwgYmUgcmVtb3ZlZCBpbiA4LjAuMCIsdCksInVuZGVmaW5lZCIhPXR5cGVvZiBuZ0Rldk1vZGUmJiFuZ0Rldk1vZGV8fHRoaXMuX2NoZWNrZXIuaXNGb2N1c2FibGUodCl8fGNvbnNvbGUud2FybigiRWxlbWVudCBtYXRjaGluZyAnW2Nka0ZvY3VzSW5pdGlhbF0nIGlzIG5vdCBmb2N1c2FibGUuIix0KSwhdGhpcy5fY2hlY2tlci5pc0ZvY3VzYWJsZSh0KSl7Y29uc3QgZT10aGlzLl9nZXRGaXJzdFRhYmJhYmxlRWxlbWVudCh0KTtyZXR1cm4gbnVsbD09ZXx8ZS5mb2N1cygpLCEhZX1yZXR1cm4gdC5mb2N1cygpLCEwfXJldHVybiB0aGlzLmZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnQoKX1mb2N1c0ZpcnN0VGFiYmFibGVFbGVtZW50KCl7Y29uc3QgdD10aGlzLl9nZXRSZWdpb25Cb3VuZGFyeSgic3RhcnQiKTtyZXR1cm4gdCYmdC5mb2N1cygpLCEhdH1mb2N1c0xhc3RUYWJiYWJsZUVsZW1lbnQoKXtjb25zdCB0PXRoaXMuX2dldFJlZ2lvbkJvdW5kYXJ5KCJlbmQiKTtyZXR1cm4gdCYmdC5mb2N1cygpLCEhdH1oYXNBdHRhY2hlZCgpe3JldHVybiB0aGlzLl9oYXNBdHRhY2hlZH1fZ2V0Rmlyc3RUYWJiYWJsZUVsZW1lbnQodCl7aWYodGhpcy5fY2hlY2tlci5pc0ZvY3VzYWJsZSh0KSYmdGhpcy5fY2hlY2tlci5pc1RhYmJhYmxlKHQpKXJldHVybiB0O2xldCBlPXQuY2hpbGRyZW58fHQuY2hpbGROb2Rlcztmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyl7bGV0IG49ZVt0XS5ub2RlVHlwZT09PXRoaXMuX2RvY3VtZW50LkVMRU1FTlRfTk9ERT90aGlzLl9nZXRGaXJzdFRhYmJhYmxlRWxlbWVudChlW3RdKTpudWxsO2lmKG4pcmV0dXJuIG59cmV0dXJuIG51bGx9X2dldExhc3RUYWJiYWJsZUVsZW1lbnQodCl7aWYodGhpcy5fY2hlY2tlci5pc0ZvY3VzYWJsZSh0KSYmdGhpcy5fY2hlY2tlci5pc1RhYmJhYmxlKHQpKXJldHVybiB0O2xldCBlPXQuY2hpbGRyZW58fHQuY2hpbGROb2Rlcztmb3IobGV0IHQ9ZS5sZW5ndGgtMTt0Pj0wO3QtLSl7bGV0IG49ZVt0XS5ub2RlVHlwZT09PXRoaXMuX2RvY3VtZW50LkVMRU1FTlRfTk9ERT90aGlzLl9nZXRMYXN0VGFiYmFibGVFbGVtZW50KGVbdF0pOm51bGw7aWYobilyZXR1cm4gbn1yZXR1cm4gbnVsbH1fY3JlYXRlQW5jaG9yKCl7Y29uc3QgdD10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gdGhpcy5fdG9nZ2xlQW5jaG9yVGFiSW5kZXgodGhpcy5fZW5hYmxlZCx0KSx0LmNsYXNzTGlzdC5hZGQoImNkay12aXN1YWxseS1oaWRkZW4iKSx0LmNsYXNzTGlzdC5hZGQoImNkay1mb2N1cy10cmFwLWFuY2hvciIpLHQuc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsInRydWUiKSx0fV90b2dnbGVBbmNob3JUYWJJbmRleCh0LGUpe3Q/ZS5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiMCIpOmUucmVtb3ZlQXR0cmlidXRlKCJ0YWJpbmRleCIpfXRvZ2dsZUFuY2hvcnModCl7dGhpcy5fc3RhcnRBbmNob3ImJnRoaXMuX2VuZEFuY2hvciYmKHRoaXMuX3RvZ2dsZUFuY2hvclRhYkluZGV4KHQsdGhpcy5fc3RhcnRBbmNob3IpLHRoaXMuX3RvZ2dsZUFuY2hvclRhYkluZGV4KHQsdGhpcy5fZW5kQW5jaG9yKSl9X2V4ZWN1dGVPblN0YWJsZSh0KXt0aGlzLl9uZ1pvbmUuaXNTdGFibGU/dCgpOnRoaXMuX25nWm9uZS5vblN0YWJsZS5waXBlKE5lKDEpKS5zdWJzY3JpYmUodCl9fWNsYXNzIFlJe2NvbnN0cnVjdG9yKHQsZSxuKXt0aGlzLl9jaGVja2VyPXQsdGhpcy5fbmdab25lPWUsdGhpcy5fZG9jdW1lbnQ9bn1jcmVhdGUodCxlPSExKXtyZXR1cm4gbmV3IEdJKHQsdGhpcy5fY2hlY2tlcix0aGlzLl9uZ1pvbmUsdGhpcy5fZG9jdW1lbnQsZSl9fVlJLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxZSSkodXMoakkpLHVzKHRDKSx1cyhVQykpfSxZSS7JtXByb3Y9bG8oe2ZhY3Rvcnk6ZnVuY3Rpb24gdCgpe3JldHVybiBuZXcgWUkodXMoakkpLHVzKHRDKSx1cyhVQykpfSx0b2tlbjpZSSxwcm92aWRlZEluOiJyb290In0pLFlJLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6akl9LHt0eXBlOnRDfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbVUNdfV19XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFlJLFt7dHlwZTpKbSxhcmdzOlt7cHJvdmlkZWRJbjoicm9vdCJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpqSX0se3R5cGU6dEN9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltVQ119XX1dfSksbnVsbCk7Y2xhc3MgcUl7Y29uc3RydWN0b3IodCxlLG4pe3RoaXMuX2VsZW1lbnRSZWY9dCx0aGlzLl9mb2N1c1RyYXBGYWN0b3J5PWUsdGhpcy5fcHJldmlvdXNseUZvY3VzZWRFbGVtZW50PW51bGwsdGhpcy5fZG9jdW1lbnQ9bix0aGlzLmZvY3VzVHJhcD10aGlzLl9mb2N1c1RyYXBGYWN0b3J5LmNyZWF0ZSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsITApfWdldCBlbmFibGVkKCl7cmV0dXJuIHRoaXMuZm9jdXNUcmFwLmVuYWJsZWR9c2V0IGVuYWJsZWQodCl7dGhpcy5mb2N1c1RyYXAuZW5hYmxlZD1ySSh0KX1nZXQgYXV0b0NhcHR1cmUoKXtyZXR1cm4gdGhpcy5fYXV0b0NhcHR1cmV9c2V0IGF1dG9DYXB0dXJlKHQpe3RoaXMuX2F1dG9DYXB0dXJlPXJJKHQpfW5nT25EZXN0cm95KCl7dGhpcy5mb2N1c1RyYXAuZGVzdHJveSgpLHRoaXMuX3ByZXZpb3VzbHlGb2N1c2VkRWxlbWVudCYmKHRoaXMuX3ByZXZpb3VzbHlGb2N1c2VkRWxlbWVudC5mb2N1cygpLHRoaXMuX3ByZXZpb3VzbHlGb2N1c2VkRWxlbWVudD1udWxsKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLmZvY3VzVHJhcC5hdHRhY2hBbmNob3JzKCksdGhpcy5hdXRvQ2FwdHVyZSYmdGhpcy5fY2FwdHVyZUZvY3VzKCl9bmdEb0NoZWNrKCl7dGhpcy5mb2N1c1RyYXAuaGFzQXR0YWNoZWQoKXx8dGhpcy5mb2N1c1RyYXAuYXR0YWNoQW5jaG9ycygpfW5nT25DaGFuZ2VzKHQpe2NvbnN0IGU9dC5hdXRvQ2FwdHVyZTtlJiYhZS5maXJzdENoYW5nZSYmdGhpcy5hdXRvQ2FwdHVyZSYmdGhpcy5mb2N1c1RyYXAuaGFzQXR0YWNoZWQoKSYmdGhpcy5fY2FwdHVyZUZvY3VzKCl9X2NhcHR1cmVGb2N1cygpe3RoaXMuX3ByZXZpb3VzbHlGb2N1c2VkRWxlbWVudD10aGlzLl9kb2N1bWVudC5hY3RpdmVFbGVtZW50LHRoaXMuZm9jdXNUcmFwLmZvY3VzSW5pdGlhbEVsZW1lbnRXaGVuUmVhZHkoKX19cUkuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHFJKShNdShjaCksTXUoWUkpLE11KFVDKSl9LHFJLsm1ZGlyPUpvKHt0eXBlOnFJLHNlbGVjdG9yczpbWyIiLCJjZGtUcmFwRm9jdXMiLCIiXV0saW5wdXRzOntlbmFibGVkOlsiY2RrVHJhcEZvY3VzIiwiZW5hYmxlZCJdLGF1dG9DYXB0dXJlOlsiY2RrVHJhcEZvY3VzQXV0b0NhcHR1cmUiLCJhdXRvQ2FwdHVyZSJdfSxleHBvcnRBczpbImNka1RyYXBGb2N1cyJdLGZlYXR1cmVzOltTaV19KSxxSS5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmNofSx7dHlwZTpZSX0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W1VDXX1dfV0scUkucHJvcERlY29yYXRvcnM9e2VuYWJsZWQ6W3t0eXBlOnlfLGFyZ3M6WyJjZGtUcmFwRm9jdXMiXX1dLGF1dG9DYXB0dXJlOlt7dHlwZTp5XyxhcmdzOlsiY2RrVHJhcEZvY3VzQXV0b0NhcHR1cmUiXX1dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHFJLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6IltjZGtUcmFwRm9jdXNdIixleHBvcnRBczoiY2RrVHJhcEZvY3VzIn1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmNofSx7dHlwZTpZSX0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W1VDXX1dfV19KSx7ZW5hYmxlZDpbe3R5cGU6eV8sYXJnczpbImNka1RyYXBGb2N1cyJdfV0sYXV0b0NhcHR1cmU6W3t0eXBlOnlfLGFyZ3M6WyJjZGtUcmFwRm9jdXNBdXRvQ2FwdHVyZSJdfV19KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIFpJIGV4dGVuZHMgR0l7Y29uc3RydWN0b3IodCxlLG4sbyxpLGEscil7c3VwZXIodCxlLG4sbyxyLmRlZmVyKSx0aGlzLl9mb2N1c1RyYXBNYW5hZ2VyPWksdGhpcy5faW5lcnRTdHJhdGVneT1hLHRoaXMuX2ZvY3VzVHJhcE1hbmFnZXIucmVnaXN0ZXIodGhpcyl9Z2V0IGVuYWJsZWQoKXtyZXR1cm4gdGhpcy5fZW5hYmxlZH1zZXQgZW5hYmxlZCh0KXt0aGlzLl9lbmFibGVkPXQsdGhpcy5fZW5hYmxlZD90aGlzLl9mb2N1c1RyYXBNYW5hZ2VyLnJlZ2lzdGVyKHRoaXMpOnRoaXMuX2ZvY3VzVHJhcE1hbmFnZXIuZGVyZWdpc3Rlcih0aGlzKX1kZXN0cm95KCl7dGhpcy5fZm9jdXNUcmFwTWFuYWdlci5kZXJlZ2lzdGVyKHRoaXMpLHN1cGVyLmRlc3Ryb3koKX1fZW5hYmxlKCl7dGhpcy5faW5lcnRTdHJhdGVneS5wcmV2ZW50Rm9jdXModGhpcyksdGhpcy50b2dnbGVBbmNob3JzKCEwKX1fZGlzYWJsZSgpe3RoaXMuX2luZXJ0U3RyYXRlZ3kuYWxsb3dGb2N1cyh0aGlzKSx0aGlzLnRvZ2dsZUFuY2hvcnMoITEpfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY29uc3QgWEk9InVuZGVmaW5lZCIhPXR5cGVvZiBFbGVtZW50JiYhIUVsZW1lbnQucHJvdG90eXBlLmNsb3Nlc3Q7ZnVuY3Rpb24gS0kodCxlKXtyZXR1cm4gdC5tYXRjaGVzP3QubWF0Y2hlcyhlKTp0Lm1zTWF0Y2hlc1NlbGVjdG9yKGUpfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jbGFzcyBKSXtjb25zdHJ1Y3Rvcigpe3RoaXMuX2xpc3RlbmVyPW51bGx9cHJldmVudEZvY3VzKHQpe3RoaXMuX2xpc3RlbmVyJiZ0Ll9kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5fbGlzdGVuZXIsITApLHRoaXMuX2xpc3RlbmVyPWU9PnRoaXMuX3RyYXBGb2N1cyh0LGUpLHQuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKCk9Pnt0Ll9kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5fbGlzdGVuZXIsITApfSkpfWFsbG93Rm9jdXModCl7dGhpcy5fbGlzdGVuZXImJih0Ll9kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5fbGlzdGVuZXIsITApLHRoaXMuX2xpc3RlbmVyPW51bGwpfV90cmFwRm9jdXModCxlKXtjb25zdCBuPWUudGFyZ2V0LG89dC5fZWxlbWVudDtvLmNvbnRhaW5zKG4pfHxudWxsIT09KGZ1bmN0aW9uIGkodCxlKXtpZighKHQgaW5zdGFuY2VvZiBOb2RlKSlyZXR1cm4gbnVsbDtsZXQgbj10O2Zvcig7bnVsbCE9biYmIShuIGluc3RhbmNlb2YgRWxlbWVudCk7KW49bi5wYXJlbnROb2RlO3JldHVybiBuJiYoWEk/bi5jbG9zZXN0KGUpOihmdW5jdGlvbiBvKHQsZSl7bGV0IG49dDtmb3IoO251bGwhPW4mJiEobiBpbnN0YW5jZW9mIEVsZW1lbnQmJktJKG4sZSkpOyluPW4ucGFyZW50Tm9kZTtyZXR1cm4gbnx8bnVsbH0pKG4sZSkpfSkobiwiZGl2LmNkay1vdmVybGF5LXBhbmUiKXx8c2V0VGltZW91dCgoKCk9Pnt0LmVuYWJsZWQmJiFvLmNvbnRhaW5zKHQuX2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQpJiZ0LmZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnQoKX0pKX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NsYXNzIFFJe2NvbnN0cnVjdG9yKCl7dGhpcy5kZWZlcj0hMX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NvbnN0ICRJPW5ldyBOcigiRk9DVVNfVFJBUF9JTkVSVF9TVFJBVEVHWSIpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jbGFzcyB0entjb25zdHJ1Y3Rvcigpe3RoaXMuX2ZvY3VzVHJhcFN0YWNrPVtdfXJlZ2lzdGVyKHQpe3RoaXMuX2ZvY3VzVHJhcFN0YWNrPXRoaXMuX2ZvY3VzVHJhcFN0YWNrLmZpbHRlcigoZT0+ZSE9PXQpKTtsZXQgZT10aGlzLl9mb2N1c1RyYXBTdGFjaztlLmxlbmd0aCYmZVtlLmxlbmd0aC0xXS5fZGlzYWJsZSgpLGUucHVzaCh0KSx0Ll9lbmFibGUoKX1kZXJlZ2lzdGVyKHQpe3QuX2Rpc2FibGUoKTtjb25zdCBlPXRoaXMuX2ZvY3VzVHJhcFN0YWNrLG49ZS5pbmRleE9mKHQpOy0xIT09biYmKGUuc3BsaWNlKG4sMSksZS5sZW5ndGgmJmVbZS5sZW5ndGgtMV0uX2VuYWJsZSgpKX19dHouybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHR6KX0sdHouybVwcm92PWxvKHtmYWN0b3J5OmZ1bmN0aW9uIHQoKXtyZXR1cm4gbmV3IHR6fSx0b2tlbjp0eixwcm92aWRlZEluOiJyb290In0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIodHosW3t0eXBlOkptLGFyZ3M6W3twcm92aWRlZEluOiJyb290In1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW119KSxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIGV6e2NvbnN0cnVjdG9yKHQsZSxuLG8saSl7dGhpcy5fY2hlY2tlcj10LHRoaXMuX25nWm9uZT1lLHRoaXMuX2ZvY3VzVHJhcE1hbmFnZXI9bix0aGlzLl9kb2N1bWVudD1vLHRoaXMuX2luZXJ0U3RyYXRlZ3k9aXx8bmV3IEpJfWNyZWF0ZSh0LGU9bmV3IFFJKXtsZXQgbjtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBlPyhuPW5ldyBRSSxuLmRlZmVyPWUpOm49ZSxuZXcgWkkodCx0aGlzLl9jaGVja2VyLHRoaXMuX25nWm9uZSx0aGlzLl9kb2N1bWVudCx0aGlzLl9mb2N1c1RyYXBNYW5hZ2VyLHRoaXMuX2luZXJ0U3RyYXRlZ3ksbil9fWV6Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxleikodXMoakkpLHVzKHRDKSx1cyh0eiksdXMoVUMpLHVzKCRJLDgpKX0sZXouybVwcm92PWxvKHtmYWN0b3J5OmZ1bmN0aW9uIHQoKXtyZXR1cm4gbmV3IGV6KHVzKGpJKSx1cyh0QyksdXModHopLHVzKFVDKSx1cygkSSw4KSl9LHRva2VuOmV6LHByb3ZpZGVkSW46InJvb3QifSksZXouY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpqSX0se3R5cGU6dEN9LHt0eXBlOnR6fSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbVUNdfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbJEldfV19XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGV6LFt7dHlwZTpKbSxhcmdzOlt7cHJvdmlkZWRJbjoicm9vdCJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpqSX0se3R5cGU6dEN9LHt0eXBlOnR6fSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbVUNdfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbJEldfV19XX0pLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3Qgbno9bmV3IE5yKCJsaXZlQW5ub3VuY2VyRWxlbWVudCIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24gb3ooKXtyZXR1cm4gbnVsbH19KSxpej1uZXcgTnIoIkxJVkVfQU5OT1VOQ0VSX0RFRkFVTFRfT1BUSU9OUyIpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3MgYXp7Y29uc3RydWN0b3IodCxlLG4sbyl7dGhpcy5fbmdab25lPWUsdGhpcy5fZGVmYXVsdE9wdGlvbnM9byx0aGlzLl9kb2N1bWVudD1uLHRoaXMuX2xpdmVFbGVtZW50PXR8fHRoaXMuX2NyZWF0ZUxpdmVFbGVtZW50KCl9YW5ub3VuY2UodCwuLi5lKXtjb25zdCBuPXRoaXMuX2RlZmF1bHRPcHRpb25zO2xldCBvLGk7cmV0dXJuIDE9PT1lLmxlbmd0aCYmIm51bWJlciI9PXR5cGVvZiBlWzBdP2k9ZVswXTpbbyxpXT1lLHRoaXMuY2xlYXIoKSxjbGVhclRpbWVvdXQodGhpcy5fcHJldmlvdXNUaW1lb3V0KSxvfHwobz1uJiZuLnBvbGl0ZW5lc3M/bi5wb2xpdGVuZXNzOiJwb2xpdGUiKSxudWxsPT1pJiZuJiYoaT1uLmR1cmF0aW9uKSx0aGlzLl9saXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoImFyaWEtbGl2ZSIsbyksdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgoKT0+bmV3IFByb21pc2UoKGU9PntjbGVhclRpbWVvdXQodGhpcy5fcHJldmlvdXNUaW1lb3V0KSx0aGlzLl9wcmV2aW91c1RpbWVvdXQ9c2V0VGltZW91dCgoKCk9Pnt0aGlzLl9saXZlRWxlbWVudC50ZXh0Q29udGVudD10LGUoKSwibnVtYmVyIj09dHlwZW9mIGkmJih0aGlzLl9wcmV2aW91c1RpbWVvdXQ9c2V0VGltZW91dCgoKCk9PnRoaXMuY2xlYXIoKSksaSkpfSksMTAwKX0pKSkpfWNsZWFyKCl7dGhpcy5fbGl2ZUVsZW1lbnQmJih0aGlzLl9saXZlRWxlbWVudC50ZXh0Q29udGVudD0iIil9bmdPbkRlc3Ryb3koKXtjbGVhclRpbWVvdXQodGhpcy5fcHJldmlvdXNUaW1lb3V0KSx0aGlzLl9saXZlRWxlbWVudCYmdGhpcy5fbGl2ZUVsZW1lbnQucGFyZW50Tm9kZSYmKHRoaXMuX2xpdmVFbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5fbGl2ZUVsZW1lbnQpLHRoaXMuX2xpdmVFbGVtZW50PW51bGwpfV9jcmVhdGVMaXZlRWxlbWVudCgpe2NvbnN0IHQ9ImNkay1saXZlLWFubm91bmNlci1lbGVtZW50IixlPXRoaXMuX2RvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUodCksbj10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyllW3RdLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZVt0XSk7cmV0dXJuIG4uY2xhc3NMaXN0LmFkZCh0KSxuLmNsYXNzTGlzdC5hZGQoImNkay12aXN1YWxseS1oaWRkZW4iKSxuLnNldEF0dHJpYnV0ZSgiYXJpYS1hdG9taWMiLCJ0cnVlIiksbi5zZXRBdHRyaWJ1dGUoImFyaWEtbGl2ZSIsInBvbGl0ZSIpLHRoaXMuX2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobiksbn19YXouybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGF6KSh1cyhueiw4KSx1cyh0QyksdXMoVUMpLHVzKGl6LDgpKX0sYXouybVwcm92PWxvKHtmYWN0b3J5OmZ1bmN0aW9uIHQoKXtyZXR1cm4gbmV3IGF6KHVzKG56LDgpLHVzKHRDKSx1cyhVQyksdXMoaXosOCkpfSx0b2tlbjpheixwcm92aWRlZEluOiJyb290In0pLGF6LmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltuel19XX0se3R5cGU6dEN9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltVQ119XX0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltpel19XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoYXosW3t0eXBlOkptLGFyZ3M6W3twcm92aWRlZEluOiJyb290In1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbbnpdfV19LHt0eXBlOnRDfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbVUNdfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbaXpdfV19XX0pLG51bGwpO2NsYXNzIHJ6e2NvbnN0cnVjdG9yKHQsZSxuLG8pe3RoaXMuX2VsZW1lbnRSZWY9dCx0aGlzLl9saXZlQW5ub3VuY2VyPWUsdGhpcy5fY29udGVudE9ic2VydmVyPW4sdGhpcy5fbmdab25lPW8sdGhpcy5fcG9saXRlbmVzcz0icG9saXRlIn1nZXQgcG9saXRlbmVzcygpe3JldHVybiB0aGlzLl9wb2xpdGVuZXNzfXNldCBwb2xpdGVuZXNzKHQpe3RoaXMuX3BvbGl0ZW5lc3M9Im9mZiI9PT10fHwiYXNzZXJ0aXZlIj09PXQ/dDoicG9saXRlIiwib2ZmIj09PXRoaXMuX3BvbGl0ZW5lc3M/dGhpcy5fc3Vic2NyaXB0aW9uJiYodGhpcy5fc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fc3Vic2NyaXB0aW9uPW51bGwpOnRoaXMuX3N1YnNjcmlwdGlvbnx8KHRoaXMuX3N1YnNjcmlwdGlvbj10aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCgpPT50aGlzLl9jb250ZW50T2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLl9lbGVtZW50UmVmKS5zdWJzY3JpYmUoKCgpPT57Y29uc3QgdD10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudGV4dENvbnRlbnQ7dCE9PXRoaXMuX3ByZXZpb3VzQW5ub3VuY2VkVGV4dCYmKHRoaXMuX2xpdmVBbm5vdW5jZXIuYW5ub3VuY2UodCx0aGlzLl9wb2xpdGVuZXNzKSx0aGlzLl9wcmV2aW91c0Fubm91bmNlZFRleHQ9dCl9KSkpKSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9zdWJzY3JpcHRpb24mJnRoaXMuX3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmZ1bmN0aW9uIHN6KHQpe3JldHVybiAwPT09dC5idXR0b25zfWZ1bmN0aW9uIGx6KHQpe2NvbnN0IGU9dC50b3VjaGVzJiZ0LnRvdWNoZXNbMF18fHQuY2hhbmdlZFRvdWNoZXMmJnQuY2hhbmdlZFRvdWNoZXNbMF07cmV0dXJuISghZXx8LTEhPT1lLmlkZW50aWZpZXJ8fG51bGwhPWUucmFkaXVzWCYmMSE9PWUucmFkaXVzWHx8bnVsbCE9ZS5yYWRpdXNZJiYxIT09ZS5yYWRpdXNZKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovcnouybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHJ6KShNdShjaCksTXUoYXopLE11KGtJKSxNdSh0QykpfSxyei7JtWRpcj1Kbyh7dHlwZTpyeixzZWxlY3RvcnM6W1siIiwiY2RrQXJpYUxpdmUiLCIiXV0saW5wdXRzOntwb2xpdGVuZXNzOlsiY2RrQXJpYUxpdmUiLCJwb2xpdGVuZXNzIl19LGV4cG9ydEFzOlsiY2RrQXJpYUxpdmUiXX0pLHJ6LmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6Y2h9LHt0eXBlOmF6fSx7dHlwZTprSX0se3R5cGU6dEN9XSxyei5wcm9wRGVjb3JhdG9ycz17cG9saXRlbmVzczpbe3R5cGU6eV8sYXJnczpbImNka0FyaWFMaXZlIl19XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihyeixbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJbY2RrQXJpYUxpdmVdIixleHBvcnRBczoiY2RrQXJpYUxpdmUifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Y2h9LHt0eXBlOmF6fSx7dHlwZTprSX0se3R5cGU6dEN9XX0pLHtwb2xpdGVuZXNzOlt7dHlwZTp5XyxhcmdzOlsiY2RrQXJpYUxpdmUiXX1dfSk7Y29uc3QgY3o9bmV3IE5yKCJjZGstZm9jdXMtbW9uaXRvci1kZWZhdWx0LW9wdGlvbnMiKSxkej12SSh7cGFzc2l2ZTohMCxjYXB0dXJlOiEwfSk7Y2xhc3MgcHp7Y29uc3RydWN0b3IodCxlLG4sbyl7dGhpcy5fbmdab25lPXQsdGhpcy5fcGxhdGZvcm09ZSx0aGlzLl9vcmlnaW49bnVsbCx0aGlzLl93aW5kb3dGb2N1c2VkPSExLHRoaXMuX2VsZW1lbnRJbmZvPW5ldyBNYXAsdGhpcy5fbW9uaXRvcmVkRWxlbWVudENvdW50PTAsdGhpcy5fcm9vdE5vZGVGb2N1c0xpc3RlbmVyQ291bnQ9bmV3IE1hcCx0aGlzLl9kb2N1bWVudEtleWRvd25MaXN0ZW5lcj0oKT0+e3RoaXMuX2xhc3RUb3VjaFRhcmdldD1udWxsLHRoaXMuX3NldE9yaWdpbkZvckN1cnJlbnRFdmVudFF1ZXVlKCJrZXlib2FyZCIpfSx0aGlzLl9kb2N1bWVudE1vdXNlZG93bkxpc3RlbmVyPXQ9PntpZighdGhpcy5fbGFzdFRvdWNoVGFyZ2V0KXtjb25zdCBlPXN6KHQpPyJrZXlib2FyZCI6Im1vdXNlIjt0aGlzLl9zZXRPcmlnaW5Gb3JDdXJyZW50RXZlbnRRdWV1ZShlKX19LHRoaXMuX2RvY3VtZW50VG91Y2hzdGFydExpc3RlbmVyPXQ9Pntseih0KT90aGlzLl9sYXN0VG91Y2hUYXJnZXR8fHRoaXMuX3NldE9yaWdpbkZvckN1cnJlbnRFdmVudFF1ZXVlKCJrZXlib2FyZCIpOihudWxsIT10aGlzLl90b3VjaFRpbWVvdXRJZCYmY2xlYXJUaW1lb3V0KHRoaXMuX3RvdWNoVGltZW91dElkKSx0aGlzLl9sYXN0VG91Y2hUYXJnZXQ9bXoodCksdGhpcy5fdG91Y2hUaW1lb3V0SWQ9c2V0VGltZW91dCgoKCk9PnRoaXMuX2xhc3RUb3VjaFRhcmdldD1udWxsKSw2NTApKX0sdGhpcy5fd2luZG93Rm9jdXNMaXN0ZW5lcj0oKT0+e3RoaXMuX3dpbmRvd0ZvY3VzZWQ9ITAsdGhpcy5fd2luZG93Rm9jdXNUaW1lb3V0SWQ9c2V0VGltZW91dCgoKCk9PnRoaXMuX3dpbmRvd0ZvY3VzZWQ9ITEpKX0sdGhpcy5fcm9vdE5vZGVGb2N1c0FuZEJsdXJMaXN0ZW5lcj10PT57Y29uc3QgZT1teih0KSxuPSJmb2N1cyI9PT10LnR5cGU/dGhpcy5fb25Gb2N1czp0aGlzLl9vbkJsdXI7Zm9yKGxldCBvPWU7bztvPW8ucGFyZW50RWxlbWVudCluLmNhbGwodGhpcyx0LG8pfSx0aGlzLl9kb2N1bWVudD1uLHRoaXMuX2RldGVjdGlvbk1vZGU9KG51bGw9PW8/dm9pZCAwOm8uZGV0ZWN0aW9uTW9kZSl8fDB9bW9uaXRvcih0LGU9ITEpe2NvbnN0IG49cEkodCk7aWYoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcnx8MSE9PW4ubm9kZVR5cGUpcmV0dXJuIFoobnVsbCk7Y29uc3Qgbz1QSShuKXx8dGhpcy5fZ2V0RG9jdW1lbnQoKSxpPXRoaXMuX2VsZW1lbnRJbmZvLmdldChuKTtpZihpKXJldHVybiBlJiYoaS5jaGVja0NoaWxkcmVuPSEwKSxpLnN1YmplY3Q7Y29uc3QgYT17Y2hlY2tDaGlsZHJlbjplLHN1YmplY3Q6bmV3IHgscm9vdE5vZGU6b307cmV0dXJuIHRoaXMuX2VsZW1lbnRJbmZvLnNldChuLGEpLHRoaXMuX3JlZ2lzdGVyR2xvYmFsTGlzdGVuZXJzKGEpLGEuc3ViamVjdH1zdG9wTW9uaXRvcmluZyh0KXtjb25zdCBlPXBJKHQpLG49dGhpcy5fZWxlbWVudEluZm8uZ2V0KGUpO24mJihuLnN1YmplY3QuY29tcGxldGUoKSx0aGlzLl9zZXRDbGFzc2VzKGUpLHRoaXMuX2VsZW1lbnRJbmZvLmRlbGV0ZShlKSx0aGlzLl9yZW1vdmVHbG9iYWxMaXN0ZW5lcnMobikpfWZvY3VzVmlhKHQsZSxuKXtjb25zdCBvPXBJKHQpO289PT10aGlzLl9nZXREb2N1bWVudCgpLmFjdGl2ZUVsZW1lbnQ/dGhpcy5fZ2V0Q2xvc2VzdEVsZW1lbnRzSW5mbyhvKS5mb3JFYWNoKCgoW3Qsbl0pPT50aGlzLl9vcmlnaW5DaGFuZ2VkKHQsZSxuKSkpOih0aGlzLl9zZXRPcmlnaW5Gb3JDdXJyZW50RXZlbnRRdWV1ZShlKSwiZnVuY3Rpb24iPT10eXBlb2Ygby5mb2N1cyYmby5mb2N1cyhuKSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9lbGVtZW50SW5mby5mb3JFYWNoKCgodCxlKT0+dGhpcy5zdG9wTW9uaXRvcmluZyhlKSkpfV9nZXREb2N1bWVudCgpe3JldHVybiB0aGlzLl9kb2N1bWVudHx8ZG9jdW1lbnR9X2dldFdpbmRvdygpe3JldHVybiB0aGlzLl9nZXREb2N1bWVudCgpLmRlZmF1bHRWaWV3fHx3aW5kb3d9X3RvZ2dsZUNsYXNzKHQsZSxuKXtuP3QuY2xhc3NMaXN0LmFkZChlKTp0LmNsYXNzTGlzdC5yZW1vdmUoZSl9X2dldEZvY3VzT3JpZ2luKHQpe3JldHVybiB0aGlzLl9vcmlnaW4/dGhpcy5fb3JpZ2luOnRoaXMuX3dpbmRvd0ZvY3VzZWQmJnRoaXMuX2xhc3RGb2N1c09yaWdpbj90aGlzLl9sYXN0Rm9jdXNPcmlnaW46dGhpcy5fd2FzQ2F1c2VkQnlUb3VjaCh0KT8idG91Y2giOiJwcm9ncmFtIn1fc2V0Q2xhc3Nlcyh0LGUpe3RoaXMuX3RvZ2dsZUNsYXNzKHQsImNkay1mb2N1c2VkIiwhIWUpLHRoaXMuX3RvZ2dsZUNsYXNzKHQsImNkay10b3VjaC1mb2N1c2VkIiwidG91Y2giPT09ZSksdGhpcy5fdG9nZ2xlQ2xhc3ModCwiY2RrLWtleWJvYXJkLWZvY3VzZWQiLCJrZXlib2FyZCI9PT1lKSx0aGlzLl90b2dnbGVDbGFzcyh0LCJjZGstbW91c2UtZm9jdXNlZCIsIm1vdXNlIj09PWUpLHRoaXMuX3RvZ2dsZUNsYXNzKHQsImNkay1wcm9ncmFtLWZvY3VzZWQiLCJwcm9ncmFtIj09PWUpfV9zZXRPcmlnaW5Gb3JDdXJyZW50RXZlbnRRdWV1ZSh0KXt0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCgpPT57dGhpcy5fb3JpZ2luPXQsMD09PXRoaXMuX2RldGVjdGlvbk1vZGUmJih0aGlzLl9vcmlnaW5UaW1lb3V0SWQ9c2V0VGltZW91dCgoKCk9PnRoaXMuX29yaWdpbj1udWxsKSwxKSl9KSl9X3dhc0NhdXNlZEJ5VG91Y2godCl7Y29uc3QgZT1teih0KTtyZXR1cm4gdGhpcy5fbGFzdFRvdWNoVGFyZ2V0IGluc3RhbmNlb2YgTm9kZSYmZSBpbnN0YW5jZW9mIE5vZGUmJihlPT09dGhpcy5fbGFzdFRvdWNoVGFyZ2V0fHxlLmNvbnRhaW5zKHRoaXMuX2xhc3RUb3VjaFRhcmdldCkpfV9vbkZvY3VzKHQsZSl7Y29uc3Qgbj10aGlzLl9lbGVtZW50SW5mby5nZXQoZSk7biYmKG4uY2hlY2tDaGlsZHJlbnx8ZT09PW16KHQpKSYmdGhpcy5fb3JpZ2luQ2hhbmdlZChlLHRoaXMuX2dldEZvY3VzT3JpZ2luKHQpLG4pfV9vbkJsdXIodCxlKXtjb25zdCBuPXRoaXMuX2VsZW1lbnRJbmZvLmdldChlKTshbnx8bi5jaGVja0NoaWxkcmVuJiZ0LnJlbGF0ZWRUYXJnZXQgaW5zdGFuY2VvZiBOb2RlJiZlLmNvbnRhaW5zKHQucmVsYXRlZFRhcmdldCl8fCh0aGlzLl9zZXRDbGFzc2VzKGUpLHRoaXMuX2VtaXRPcmlnaW4obi5zdWJqZWN0LG51bGwpKX1fZW1pdE9yaWdpbih0LGUpe3RoaXMuX25nWm9uZS5ydW4oKCgpPT50Lm5leHQoZSkpKX1fcmVnaXN0ZXJHbG9iYWxMaXN0ZW5lcnModCl7aWYoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm47Y29uc3QgZT10LnJvb3ROb2RlLG49dGhpcy5fcm9vdE5vZGVGb2N1c0xpc3RlbmVyQ291bnQuZ2V0KGUpfHwwO258fHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKCk9PntlLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLl9yb290Tm9kZUZvY3VzQW5kQmx1ckxpc3RlbmVyLGR6KSxlLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLHRoaXMuX3Jvb3ROb2RlRm9jdXNBbmRCbHVyTGlzdGVuZXIsZHopfSkpLHRoaXMuX3Jvb3ROb2RlRm9jdXNMaXN0ZW5lckNvdW50LnNldChlLG4rMSksMT09Kyt0aGlzLl9tb25pdG9yZWRFbGVtZW50Q291bnQmJnRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKCk9Pntjb25zdCB0PXRoaXMuX2dldERvY3VtZW50KCksZT10aGlzLl9nZXRXaW5kb3coKTt0LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLHRoaXMuX2RvY3VtZW50S2V5ZG93bkxpc3RlbmVyLGR6KSx0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsdGhpcy5fZG9jdW1lbnRNb3VzZWRvd25MaXN0ZW5lcixkeiksdC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0Iix0aGlzLl9kb2N1bWVudFRvdWNoc3RhcnRMaXN0ZW5lcixkeiksZS5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5fd2luZG93Rm9jdXNMaXN0ZW5lcil9KSl9X3JlbW92ZUdsb2JhbExpc3RlbmVycyh0KXtjb25zdCBlPXQucm9vdE5vZGU7aWYodGhpcy5fcm9vdE5vZGVGb2N1c0xpc3RlbmVyQ291bnQuaGFzKGUpKXtjb25zdCB0PXRoaXMuX3Jvb3ROb2RlRm9jdXNMaXN0ZW5lckNvdW50LmdldChlKTt0PjE/dGhpcy5fcm9vdE5vZGVGb2N1c0xpc3RlbmVyQ291bnQuc2V0KGUsdC0xKTooZS5yZW1vdmVFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5fcm9vdE5vZGVGb2N1c0FuZEJsdXJMaXN0ZW5lcixkeiksZS5yZW1vdmVFdmVudExpc3RlbmVyKCJibHVyIix0aGlzLl9yb290Tm9kZUZvY3VzQW5kQmx1ckxpc3RlbmVyLGR6KSx0aGlzLl9yb290Tm9kZUZvY3VzTGlzdGVuZXJDb3VudC5kZWxldGUoZSkpfWlmKCEtLXRoaXMuX21vbml0b3JlZEVsZW1lbnRDb3VudCl7Y29uc3QgdD10aGlzLl9nZXREb2N1bWVudCgpLGU9dGhpcy5fZ2V0V2luZG93KCk7dC5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLl9kb2N1bWVudEtleWRvd25MaXN0ZW5lcixkeiksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHRoaXMuX2RvY3VtZW50TW91c2Vkb3duTGlzdGVuZXIsZHopLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdGhpcy5fZG9jdW1lbnRUb3VjaHN0YXJ0TGlzdGVuZXIsZHopLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuX3dpbmRvd0ZvY3VzTGlzdGVuZXIpLGNsZWFyVGltZW91dCh0aGlzLl93aW5kb3dGb2N1c1RpbWVvdXRJZCksY2xlYXJUaW1lb3V0KHRoaXMuX3RvdWNoVGltZW91dElkKSxjbGVhclRpbWVvdXQodGhpcy5fb3JpZ2luVGltZW91dElkKX19X29yaWdpbkNoYW5nZWQodCxlLG4pe3RoaXMuX3NldENsYXNzZXModCxlKSx0aGlzLl9lbWl0T3JpZ2luKG4uc3ViamVjdCxlKSx0aGlzLl9sYXN0Rm9jdXNPcmlnaW49ZX1fZ2V0Q2xvc2VzdEVsZW1lbnRzSW5mbyh0KXtjb25zdCBlPVtdO3JldHVybiB0aGlzLl9lbGVtZW50SW5mby5mb3JFYWNoKCgobixvKT0+eyhvPT09dHx8bi5jaGVja0NoaWxkcmVuJiZvLmNvbnRhaW5zKHQpKSYmZS5wdXNoKFtvLG5dKX0pKSxlfX1mdW5jdGlvbiBteih0KXtyZXR1cm4gdC5jb21wb3NlZFBhdGg/dC5jb21wb3NlZFBhdGgoKVswXTp0LnRhcmdldH1wei7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8cHopKHVzKHRDKSx1cyhmSSksdXMoVUMsOCksdXMoY3osOCkpfSxwei7JtXByb3Y9bG8oe2ZhY3Rvcnk6ZnVuY3Rpb24gdCgpe3JldHVybiBuZXcgcHoodXModEMpLHVzKGZJKSx1cyhVQyw4KSx1cyhjeiw4KSl9LHRva2VuOnB6LHByb3ZpZGVkSW46InJvb3QifSkscHouY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTp0Q30se3R5cGU6Zkl9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbVUNdfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbY3pdfV19XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHB6LFt7dHlwZTpKbSxhcmdzOlt7cHJvdmlkZWRJbjoicm9vdCJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTp0Q30se3R5cGU6Zkl9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbVUNdfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbY3pdfV19XX0pLG51bGwpO2NsYXNzIHV6e2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5fZWxlbWVudFJlZj10LHRoaXMuX2ZvY3VzTW9uaXRvcj1lLHRoaXMuY2RrRm9jdXNDaGFuZ2U9bmV3IEFifW5nQWZ0ZXJWaWV3SW5pdCgpe2NvbnN0IHQ9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O3RoaXMuX21vbml0b3JTdWJzY3JpcHRpb249dGhpcy5fZm9jdXNNb25pdG9yLm1vbml0b3IodCwxPT09dC5ub2RlVHlwZSYmdC5oYXNBdHRyaWJ1dGUoImNka01vbml0b3JTdWJ0cmVlRm9jdXMiKSkuc3Vic2NyaWJlKCh0PT50aGlzLmNka0ZvY3VzQ2hhbmdlLmVtaXQodCkpKX1uZ09uRGVzdHJveSgpe3RoaXMuX2ZvY3VzTW9uaXRvci5zdG9wTW9uaXRvcmluZyh0aGlzLl9lbGVtZW50UmVmKSx0aGlzLl9tb25pdG9yU3Vic2NyaXB0aW9uJiZ0aGlzLl9tb25pdG9yU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9fXV6Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHx1eikoTXUoY2gpLE11KHB6KSl9LHV6Lsm1ZGlyPUpvKHt0eXBlOnV6LHNlbGVjdG9yczpbWyIiLCJjZGtNb25pdG9yRWxlbWVudEZvY3VzIiwiIl0sWyIiLCJjZGtNb25pdG9yU3VidHJlZUZvY3VzIiwiIl1dLG91dHB1dHM6e2Nka0ZvY3VzQ2hhbmdlOiJjZGtGb2N1c0NoYW5nZSJ9fSksdXouY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpjaH0se3R5cGU6cHp9XSx1ei5wcm9wRGVjb3JhdG9ycz17Y2RrRm9jdXNDaGFuZ2U6W3t0eXBlOl9ffV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIodXosW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoiW2Nka01vbml0b3JFbGVtZW50Rm9jdXNdLCBbY2RrTW9uaXRvclN1YnRyZWVGb2N1c10ifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Y2h9LHt0eXBlOnB6fV19KSx7Y2RrRm9jdXNDaGFuZ2U6W3t0eXBlOl9ffV19KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IGZ6PSJjZGstaGlnaC1jb250cmFzdC1ibGFjay1vbi13aGl0ZSIsZ3o9ImNkay1oaWdoLWNvbnRyYXN0LXdoaXRlLW9uLWJsYWNrIixoej0iY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIjtjbGFzcyBientjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuX3BsYXRmb3JtPXQsdGhpcy5fZG9jdW1lbnQ9ZX1nZXRIaWdoQ29udHJhc3RNb2RlKCl7aWYoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm4gMDtjb25zdCB0PXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3Quc3R5bGUuYmFja2dyb3VuZENvbG9yPSJyZ2IoMSwyLDMpIix0LnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsdGhpcy5fZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0KTtjb25zdCBlPXRoaXMuX2RvY3VtZW50LmRlZmF1bHRWaWV3fHx3aW5kb3csbj1lJiZlLmdldENvbXB1dGVkU3R5bGU/ZS5nZXRDb21wdXRlZFN0eWxlKHQpOm51bGwsbz0obiYmbi5iYWNrZ3JvdW5kQ29sb3J8fCIiKS5yZXBsYWNlKC8gL2csIiIpO3N3aXRjaCh0aGlzLl9kb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHQpLG8pe2Nhc2UicmdiKDAsMCwwKSI6cmV0dXJuIDI7Y2FzZSJyZ2IoMjU1LDI1NSwyNTUpIjpyZXR1cm4gMX1yZXR1cm4gMH1fYXBwbHlCb2R5SGlnaENvbnRyYXN0TW9kZUNzc0NsYXNzZXMoKXtpZih0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXImJnRoaXMuX2RvY3VtZW50LmJvZHkpe2NvbnN0IHQ9dGhpcy5fZG9jdW1lbnQuYm9keS5jbGFzc0xpc3Q7dC5yZW1vdmUoaHopLHQucmVtb3ZlKGZ6KSx0LnJlbW92ZShneik7Y29uc3QgZT10aGlzLmdldEhpZ2hDb250cmFzdE1vZGUoKTsxPT09ZT8odC5hZGQoaHopLHQuYWRkKGZ6KSk6Mj09PWUmJih0LmFkZChoeiksdC5hZGQoZ3opKX19fWJ6Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxieikodXMoZkkpLHVzKFVDKSl9LGJ6Lsm1cHJvdj1sbyh7ZmFjdG9yeTpmdW5jdGlvbiB0KCl7cmV0dXJuIG5ldyBieih1cyhmSSksdXMoVUMpKX0sdG9rZW46YnoscHJvdmlkZWRJbjoicm9vdCJ9KSxiei5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmZJfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbVUNdfV19XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGJ6LFt7dHlwZTpKbSxhcmdzOlt7cHJvdmlkZWRJbjoicm9vdCJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpmSX0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W1VDXX1dfV19KSxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIHl6e2NvbnN0cnVjdG9yKHQpe3QuX2FwcGx5Qm9keUhpZ2hDb250cmFzdE1vZGVDc3NDbGFzc2VzKCl9fXl6Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHx5eikodXMoYnopKX0seXouybVtb2Q9Wm8oe3R5cGU6eXp9KSx5ei7JtWluaj1jbyh7aW1wb3J0czpbW2dJLERJXV19KSx5ei5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmJ6fV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyh5eix7ZGVjbGFyYXRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuW3J6LHFJLHV6XX0saW1wb3J0czpmdW5jdGlvbigpe3JldHVybltnSSxESV19LGV4cG9ydHM6ZnVuY3Rpb24oKXtyZXR1cm5bcnoscUksdXpdfX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoeXosW3t0eXBlOmtfLGFyZ3M6W3tpbXBvcnRzOltnSSxESV0sZGVjbGFyYXRpb25zOltyeixxSSx1el0sZXhwb3J0czpbcnoscUksdXpdfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Ynp9XX0pLG51bGwpO2NvbnN0IF96PW5ldyBOcigiY2RrLWRpci1kb2MiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uIEN6KCl7cmV0dXJuIGdzKFVDKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovfSk7Y2xhc3MgTXp7Y29uc3RydWN0b3IodCl7aWYodGhpcy52YWx1ZT0ibHRyIix0aGlzLmNoYW5nZT1uZXcgQWIsdCl7Y29uc3QgZT10LmRvY3VtZW50RWxlbWVudD90LmRvY3VtZW50RWxlbWVudC5kaXI6bnVsbCxuPSh0LmJvZHk/dC5ib2R5LmRpcjpudWxsKXx8ZTt0aGlzLnZhbHVlPSJsdHIiPT09bnx8InJ0bCI9PT1uP246Imx0ciJ9fW5nT25EZXN0cm95KCl7dGhpcy5jaGFuZ2UuY29tcGxldGUoKX19TXouybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fE16KSh1cyhfeiw4KSl9LE16Lsm1cHJvdj1sbyh7ZmFjdG9yeTpmdW5jdGlvbiB0KCl7cmV0dXJuIG5ldyBNeih1cyhfeiw4KSl9LHRva2VuOk16LHByb3ZpZGVkSW46InJvb3QifSksTXouY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W196XX1dfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihNeixbe3R5cGU6Sm0sYXJnczpbe3Byb3ZpZGVkSW46InJvb3QifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltfel19XX1dfSksbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyB2entjb25zdHJ1Y3Rvcigpe3RoaXMuX2Rpcj0ibHRyIix0aGlzLl9pc0luaXRpYWxpemVkPSExLHRoaXMuY2hhbmdlPW5ldyBBYn1nZXQgZGlyKCl7cmV0dXJuIHRoaXMuX2Rpcn1zZXQgZGlyKHQpe2NvbnN0IGU9dGhpcy5fZGlyLG49dD90LnRvTG93ZXJDYXNlKCk6dDt0aGlzLl9yYXdEaXI9dCx0aGlzLl9kaXI9Imx0ciI9PT1ufHwicnRsIj09PW4/bjoibHRyIixlIT09dGhpcy5fZGlyJiZ0aGlzLl9pc0luaXRpYWxpemVkJiZ0aGlzLmNoYW5nZS5lbWl0KHRoaXMuX2Rpcil9Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMuZGlyfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuX2lzSW5pdGlhbGl6ZWQ9ITB9bmdPbkRlc3Ryb3koKXt0aGlzLmNoYW5nZS5jb21wbGV0ZSgpfX12ei7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8dnopfSx2ei7JtWRpcj1Kbyh7dHlwZTp2eixzZWxlY3RvcnM6W1siIiwiZGlyIiwiIl1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsyJmUmJk5tKCJkaXIiLG4uX3Jhd0Rpcil9LGlucHV0czp7ZGlyOiJkaXIifSxvdXRwdXRzOntjaGFuZ2U6ImRpckNoYW5nZSJ9LGV4cG9ydEFzOlsiZGlyIl0sZmVhdHVyZXM6W2loKFt7cHJvdmlkZTpNeix1c2VFeGlzdGluZzp2en1dKV19KSx2ei5wcm9wRGVjb3JhdG9ycz17Y2hhbmdlOlt7dHlwZTpfXyxhcmdzOlsiZGlyQ2hhbmdlIl19XSxkaXI6W3t0eXBlOnlffV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIodnosW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoiW2Rpcl0iLHByb3ZpZGVyczpbe3Byb3ZpZGU6TXosdXNlRXhpc3Rpbmc6dnp9XSxob3N0OnsiW2F0dHIuZGlyXSI6Il9yYXdEaXIifSxleHBvcnRBczoiZGlyIn1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW119KSx7Y2hhbmdlOlt7dHlwZTpfXyxhcmdzOlsiZGlyQ2hhbmdlIl19XSxkaXI6W3t0eXBlOnlffV19KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIHh6e314ei7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8eHopfSx4ei7JtW1vZD1abyh7dHlwZTp4en0pLHh6Lsm1aW5qPWNvKHt9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKHh6LHtkZWNsYXJhdGlvbnM6W3Z6XSxleHBvcnRzOlt2el19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHh6LFt7dHlwZTprXyxhcmdzOlt7ZXhwb3J0czpbdnpdLGRlY2xhcmF0aW9uczpbdnpdfV19XSxudWxsLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3QgT3o9bmV3IGJoKCIxMS4yLjEyIiksUHo9WyIqIixbWyJtYXQtb3B0aW9uIl0sWyJuZy1jb250YWluZXIiXV1dO2Z1bmN0aW9uIHd6KHQsZSl7aWYoMSZ0JiZ3dSgwLCJtYXQtcHNldWRvLWNoZWNrYm94Iiw0KSwyJnQpe2NvbnN0IHQ9THUoKTt2dSgic3RhdGUiLHQuc2VsZWN0ZWQ/ImNoZWNrZWQiOiJ1bmNoZWNrZWQiKSgiZGlzYWJsZWQiLHQuZGlzYWJsZWQpfX1mdW5jdGlvbiBreih0LGUpe2lmKDEmdCYmKE91KDAsInNwYW4iLDUpLE1mKDEpLFB1KCkpLDImdCl7Y29uc3QgdD1MdSgpO0pjKDEpLHhmKCIoIix0Lmdyb3VwLmxhYmVsLCIpIil9fW5ldyBiaCgiMTEuMi4xMiIpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3MgU3p7fVN6LlNUQU5EQVJEX0NVUlZFPSJjdWJpYy1iZXppZXIoMC40LDAuMCwwLjIsMSkiLFN6LkRFQ0VMRVJBVElPTl9DVVJWRT0iY3ViaWMtYmV6aWVyKDAuMCwwLjAsMC4yLDEpIixTei5BQ0NFTEVSQVRJT05fQ1VSVkU9ImN1YmljLWJlemllcigwLjQsMC4wLDEsMSkiLFN6LlNIQVJQX0NVUlZFPSJjdWJpYy1iZXppZXIoMC40LDAuMCwwLjYsMSkiO2NsYXNzIER6e31Eei5DT01QTEVYPSIzNzVtcyIsRHouRU5URVJJTkc9IjIyNW1zIixEei5FWElUSU5HPSIxOTVtcyI7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCBFej1uZXcgYmgoIjExLjIuMTIiKSxBej1uZXcgTnIoIm1hdC1zYW5pdHktY2hlY2tzIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbiBSeigpe3JldHVybiEwfX0pO2NsYXNzIFR6e2NvbnN0cnVjdG9yKHQsZSxuKXt0aGlzLl9oYXNEb25lR2xvYmFsQ2hlY2tzPSExLHRoaXMuX2RvY3VtZW50PW4sdC5fYXBwbHlCb2R5SGlnaENvbnRyYXN0TW9kZUNzc0NsYXNzZXMoKSx0aGlzLl9zYW5pdHlDaGVja3M9ZSx0aGlzLl9oYXNEb25lR2xvYmFsQ2hlY2tzfHwodGhpcy5fY2hlY2tEb2N0eXBlSXNEZWZpbmVkKCksdGhpcy5fY2hlY2tUaGVtZUlzUHJlc2VudCgpLHRoaXMuX2NoZWNrQ2RrVmVyc2lvbk1hdGNoKCksdGhpcy5faGFzRG9uZUdsb2JhbENoZWNrcz0hMCl9X2dldFdpbmRvdygpe2NvbnN0IHQ9dGhpcy5fZG9jdW1lbnQuZGVmYXVsdFZpZXd8fHdpbmRvdztyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHQmJnQ/dDpudWxsfV9jaGVja3NBcmVFbmFibGVkKCl7cmV0dXJuIHVDKCkmJiF0aGlzLl9pc1Rlc3RFbnYoKX1faXNUZXN0RW52KCl7Y29uc3QgdD10aGlzLl9nZXRXaW5kb3coKTtyZXR1cm4gdCYmKHQuX19rYXJtYV9ffHx0Lmphc21pbmUpfV9jaGVja0RvY3R5cGVJc0RlZmluZWQoKXt0aGlzLl9jaGVja3NBcmVFbmFibGVkKCkmJighMD09PXRoaXMuX3Nhbml0eUNoZWNrc3x8dGhpcy5fc2FuaXR5Q2hlY2tzLmRvY3R5cGUpJiYhdGhpcy5fZG9jdW1lbnQuZG9jdHlwZSYmY29uc29sZS53YXJuKCJDdXJyZW50IGRvY3VtZW50IGRvZXMgbm90IGhhdmUgYSBkb2N0eXBlLiBUaGlzIG1heSBjYXVzZSBzb21lIEFuZ3VsYXIgTWF0ZXJpYWwgY29tcG9uZW50cyBub3QgdG8gYmVoYXZlIGFzIGV4cGVjdGVkLiIpfV9jaGVja1RoZW1lSXNQcmVzZW50KCl7aWYoIXRoaXMuX2NoZWNrc0FyZUVuYWJsZWQoKXx8ITE9PT10aGlzLl9zYW5pdHlDaGVja3N8fCF0aGlzLl9zYW5pdHlDaGVja3MudGhlbWV8fCF0aGlzLl9kb2N1bWVudC5ib2R5fHwiZnVuY3Rpb24iIT10eXBlb2YgZ2V0Q29tcHV0ZWRTdHlsZSlyZXR1cm47Y29uc3QgdD10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0LmNsYXNzTGlzdC5hZGQoIm1hdC10aGVtZS1sb2FkZWQtbWFya2VyIiksdGhpcy5fZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0KTtjb25zdCBlPWdldENvbXB1dGVkU3R5bGUodCk7ZSYmIm5vbmUiIT09ZS5kaXNwbGF5JiZjb25zb2xlLndhcm4oIkNvdWxkIG5vdCBmaW5kIEFuZ3VsYXIgTWF0ZXJpYWwgY29yZSB0aGVtZS4gTW9zdCBNYXRlcmlhbCBjb21wb25lbnRzIG1heSBub3Qgd29yayBhcyBleHBlY3RlZC4gRm9yIG1vcmUgaW5mbyByZWZlciB0byB0aGUgdGhlbWluZyBndWlkZTogaHR0cHM6Ly9tYXRlcmlhbC5hbmd1bGFyLmlvL2d1aWRlL3RoZW1pbmciKSx0aGlzLl9kb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHQpfV9jaGVja0Nka1ZlcnNpb25NYXRjaCgpe3RoaXMuX2NoZWNrc0FyZUVuYWJsZWQoKSYmKCEwPT09dGhpcy5fc2FuaXR5Q2hlY2tzfHx0aGlzLl9zYW5pdHlDaGVja3MudmVyc2lvbikmJkV6LmZ1bGwhPT1Pei5mdWxsJiZjb25zb2xlLndhcm4oIlRoZSBBbmd1bGFyIE1hdGVyaWFsIHZlcnNpb24gKCIrRXouZnVsbCsiKSBkb2VzIG5vdCBtYXRjaCB0aGUgQW5ndWxhciBDREsgdmVyc2lvbiAoIitPei5mdWxsKyIpLlxuUGxlYXNlIGVuc3VyZSB0aGUgdmVyc2lvbnMgb2YgdGhlc2UgdHdvIHBhY2thZ2VzIGV4YWN0bHkgbWF0Y2guIil9fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KZnVuY3Rpb24gTnoodCl7cmV0dXJuIGNsYXNzIGV4dGVuZHMgdHtjb25zdHJ1Y3RvciguLi50KXtzdXBlciguLi50KSx0aGlzLl9kaXNhYmxlZD0hMX1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR9c2V0IGRpc2FibGVkKHQpe3RoaXMuX2Rpc2FibGVkPXJJKHQpfX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIEl6KHQsZSl7cmV0dXJuIGNsYXNzIGV4dGVuZHMgdHtjb25zdHJ1Y3RvciguLi50KXtzdXBlciguLi50KSx0aGlzLmRlZmF1bHRDb2xvcj1lLHRoaXMuY29sb3I9ZX1nZXQgY29sb3IoKXtyZXR1cm4gdGhpcy5fY29sb3J9c2V0IGNvbG9yKHQpe2NvbnN0IGU9dHx8dGhpcy5kZWZhdWx0Q29sb3I7ZSE9PXRoaXMuX2NvbG9yJiYodGhpcy5fY29sb3ImJnRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKGBtYXQtJHt0aGlzLl9jb2xvcn1gKSxlJiZ0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZChgbWF0LSR7ZX1gKSx0aGlzLl9jb2xvcj1lKX19fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiB6eih0KXtyZXR1cm4gY2xhc3MgZXh0ZW5kcyB0e2NvbnN0cnVjdG9yKC4uLnQpe3N1cGVyKC4uLnQpLHRoaXMuX2Rpc2FibGVSaXBwbGU9ITF9Z2V0IGRpc2FibGVSaXBwbGUoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZVJpcHBsZX1zZXQgZGlzYWJsZVJpcHBsZSh0KXt0aGlzLl9kaXNhYmxlUmlwcGxlPXJJKHQpfX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIEh6KHQsZT0wKXtyZXR1cm4gY2xhc3MgZXh0ZW5kcyB0e2NvbnN0cnVjdG9yKC4uLnQpe3N1cGVyKC4uLnQpLHRoaXMuX3RhYkluZGV4PWUsdGhpcy5kZWZhdWx0VGFiSW5kZXg9ZX1nZXQgdGFiSW5kZXgoKXtyZXR1cm4gdGhpcy5kaXNhYmxlZD8tMTp0aGlzLl90YWJJbmRleH1zZXQgdGFiSW5kZXgodCl7dGhpcy5fdGFiSW5kZXg9bnVsbCE9dD9zSSh0KTp0aGlzLmRlZmF1bHRUYWJJbmRleH19fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiBGeih0KXtyZXR1cm4gY2xhc3MgZXh0ZW5kcyB0e2NvbnN0cnVjdG9yKC4uLnQpe3N1cGVyKC4uLnQpLHRoaXMuZXJyb3JTdGF0ZT0hMSx0aGlzLnN0YXRlQ2hhbmdlcz1uZXcgeH11cGRhdGVFcnJvclN0YXRlKCl7Y29uc3QgdD10aGlzLmVycm9yU3RhdGUsZT0odGhpcy5lcnJvclN0YXRlTWF0Y2hlcnx8dGhpcy5fZGVmYXVsdEVycm9yU3RhdGVNYXRjaGVyKS5pc0Vycm9yU3RhdGUodGhpcy5uZ0NvbnRyb2w/dGhpcy5uZ0NvbnRyb2wuY29udHJvbDpudWxsLHRoaXMuX3BhcmVudEZvcm1Hcm91cHx8dGhpcy5fcGFyZW50Rm9ybSk7ZSE9PXQmJih0aGlzLmVycm9yU3RhdGU9ZSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCkpfX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIEx6KHQpe3JldHVybiBjbGFzcyBleHRlbmRzIHR7Y29uc3RydWN0b3IoLi4udCl7c3VwZXIoLi4udCksdGhpcy5faXNJbml0aWFsaXplZD0hMSx0aGlzLl9wZW5kaW5nU3Vic2NyaWJlcnM9W10sdGhpcy5pbml0aWFsaXplZD1uZXcgeSgodD0+e3RoaXMuX2lzSW5pdGlhbGl6ZWQ/dGhpcy5fbm90aWZ5U3Vic2NyaWJlcih0KTp0aGlzLl9wZW5kaW5nU3Vic2NyaWJlcnMucHVzaCh0KX0pKX1fbWFya0luaXRpYWxpemVkKCl7aWYodGhpcy5faXNJbml0aWFsaXplZCYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpKXRocm93IEVycm9yKCJUaGlzIGRpcmVjdGl2ZSBoYXMgYWxyZWFkeSBiZWVuIG1hcmtlZCBhcyBpbml0aWFsaXplZCBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgdHdpY2UuIik7dGhpcy5faXNJbml0aWFsaXplZD0hMCx0aGlzLl9wZW5kaW5nU3Vic2NyaWJlcnMuZm9yRWFjaCh0aGlzLl9ub3RpZnlTdWJzY3JpYmVyKSx0aGlzLl9wZW5kaW5nU3Vic2NyaWJlcnM9bnVsbH1fbm90aWZ5U3Vic2NyaWJlcih0KXt0Lm5leHQoKSx0LmNvbXBsZXRlKCl9fX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCi8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL1R6Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxUeikodXMoYnopLHVzKEF6LDgpLHVzKFVDKSl9LFR6Lsm1bW9kPVpvKHt0eXBlOlR6fSksVHouybVpbmo9Y28oe2ltcG9ydHM6W1t4el0seHpdfSksVHouY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpien0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltBel19XX0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W1VDXX1dfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhUeix7aW1wb3J0czpmdW5jdGlvbigpe3JldHVyblt4el19LGV4cG9ydHM6ZnVuY3Rpb24oKXtyZXR1cm5beHpdfX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoVHosW3t0eXBlOmtfLGFyZ3M6W3tpbXBvcnRzOlt4el0sZXhwb3J0czpbeHpdfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Ynp9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbQXpdfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltVQ119XX1dfSksbnVsbCk7Y29uc3QgQno9bmV3IE5yKCJNQVRfREFURV9MT0NBTEUiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uIFZ6KCl7cmV0dXJuIGdzKEJfKX19KTtjbGFzcyBqentjb25zdHJ1Y3Rvcigpe3RoaXMuX2xvY2FsZUNoYW5nZXM9bmV3IHgsdGhpcy5sb2NhbGVDaGFuZ2VzPXRoaXMuX2xvY2FsZUNoYW5nZXN9Z2V0VmFsaWREYXRlT3JOdWxsKHQpe3JldHVybiB0aGlzLmlzRGF0ZUluc3RhbmNlKHQpJiZ0aGlzLmlzVmFsaWQodCk/dDpudWxsfWRlc2VyaWFsaXplKHQpe3JldHVybiBudWxsPT10fHx0aGlzLmlzRGF0ZUluc3RhbmNlKHQpJiZ0aGlzLmlzVmFsaWQodCk/dDp0aGlzLmludmFsaWQoKX1zZXRMb2NhbGUodCl7dGhpcy5sb2NhbGU9dCx0aGlzLl9sb2NhbGVDaGFuZ2VzLm5leHQoKX1jb21wYXJlRGF0ZSh0LGUpe3JldHVybiB0aGlzLmdldFllYXIodCktdGhpcy5nZXRZZWFyKGUpfHx0aGlzLmdldE1vbnRoKHQpLXRoaXMuZ2V0TW9udGgoZSl8fHRoaXMuZ2V0RGF0ZSh0KS10aGlzLmdldERhdGUoZSl9c2FtZURhdGUodCxlKXtpZih0JiZlKXtsZXQgbj10aGlzLmlzVmFsaWQodCksbz10aGlzLmlzVmFsaWQoZSk7cmV0dXJuIG4mJm8/IXRoaXMuY29tcGFyZURhdGUodCxlKTpuPT1vfXJldHVybiB0PT1lfWNsYW1wRGF0ZSh0LGUsbil7cmV0dXJuIGUmJnRoaXMuY29tcGFyZURhdGUodCxlKTwwP2U6biYmdGhpcy5jb21wYXJlRGF0ZSh0LG4pPjA/bjp0fX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY29uc3QgVXo9bmV3IE5yKCJtYXQtZGF0ZS1mb3JtYXRzIik7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2xldCBXejt0cnl7V3o9InVuZGVmaW5lZCIhPXR5cGVvZiBJbnRsfWNhdGNoKHQpe1d6PSExfWNvbnN0IEd6PXtsb25nOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxzaG9ydDpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLG5hcnJvdzpbIkoiLCJGIiwiTSIsIkEiLCJNIiwiSiIsIkoiLCJBIiwiUyIsIk8iLCJOIiwiRCJdfSxZej1YeigzMSwodD0+U3RyaW5nKHQrMSkpKSxxej17bG9uZzpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sc2hvcnQ6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxuYXJyb3c6WyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl19LFp6PS9eXGR7NH0tXGR7Mn0tXGR7Mn0oPzpUXGR7Mn06XGR7Mn06XGR7Mn0oPzpcLlxkKyk/KD86WnwoPzooPzpcK3wtKVxkezJ9OlxkezJ9KSk/KT8kLztmdW5jdGlvbiBYeih0LGUpe2NvbnN0IG49QXJyYXkodCk7Zm9yKGxldCBvPTA7bzx0O28rKyluW29dPWUobyk7cmV0dXJuIG59Y2xhc3MgS3ogZXh0ZW5kcyBqentjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKCksdGhpcy51c2VVdGNGb3JEaXNwbGF5PSEwLHN1cGVyLnNldExvY2FsZSh0KSx0aGlzLnVzZVV0Y0ZvckRpc3BsYXk9IWUuVFJJREVOVCx0aGlzLl9jbGFtcERhdGU9ZS5UUklERU5UfHxlLkVER0V9Z2V0WWVhcih0KXtyZXR1cm4gdC5nZXRGdWxsWWVhcigpfWdldE1vbnRoKHQpe3JldHVybiB0LmdldE1vbnRoKCl9Z2V0RGF0ZSh0KXtyZXR1cm4gdC5nZXREYXRlKCl9Z2V0RGF5T2ZXZWVrKHQpe3JldHVybiB0LmdldERheSgpfWdldE1vbnRoTmFtZXModCl7aWYoV3ope2NvbnN0IGU9bmV3IEludGwuRGF0ZVRpbWVGb3JtYXQodGhpcy5sb2NhbGUse21vbnRoOnQsdGltZVpvbmU6InV0YyJ9KTtyZXR1cm4gWHooMTIsKHQ9PnRoaXMuX3N0cmlwRGlyZWN0aW9uYWxpdHlDaGFyYWN0ZXJzKHRoaXMuX2Zvcm1hdChlLG5ldyBEYXRlKDIwMTcsdCwxKSkpKSl9cmV0dXJuIEd6W3RdfWdldERhdGVOYW1lcygpe2lmKFd6KXtjb25zdCB0PW5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KHRoaXMubG9jYWxlLHtkYXk6Im51bWVyaWMiLHRpbWVab25lOiJ1dGMifSk7cmV0dXJuIFh6KDMxLChlPT50aGlzLl9zdHJpcERpcmVjdGlvbmFsaXR5Q2hhcmFjdGVycyh0aGlzLl9mb3JtYXQodCxuZXcgRGF0ZSgyMDE3LDAsZSsxKSkpKSl9cmV0dXJuIFl6fWdldERheU9mV2Vla05hbWVzKHQpe2lmKFd6KXtjb25zdCBlPW5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KHRoaXMubG9jYWxlLHt3ZWVrZGF5OnQsdGltZVpvbmU6InV0YyJ9KTtyZXR1cm4gWHooNywodD0+dGhpcy5fc3RyaXBEaXJlY3Rpb25hbGl0eUNoYXJhY3RlcnModGhpcy5fZm9ybWF0KGUsbmV3IERhdGUoMjAxNywwLHQrMSkpKSkpfXJldHVybiBxelt0XX1nZXRZZWFyTmFtZSh0KXtpZihXeil7Y29uc3QgZT1uZXcgSW50bC5EYXRlVGltZUZvcm1hdCh0aGlzLmxvY2FsZSx7eWVhcjoibnVtZXJpYyIsdGltZVpvbmU6InV0YyJ9KTtyZXR1cm4gdGhpcy5fc3RyaXBEaXJlY3Rpb25hbGl0eUNoYXJhY3RlcnModGhpcy5fZm9ybWF0KGUsdCkpfXJldHVybiBTdHJpbmcodGhpcy5nZXRZZWFyKHQpKX1nZXRGaXJzdERheU9mV2Vlaygpe3JldHVybiAwfWdldE51bURheXNJbk1vbnRoKHQpe3JldHVybiB0aGlzLmdldERhdGUodGhpcy5fY3JlYXRlRGF0ZVdpdGhPdmVyZmxvdyh0aGlzLmdldFllYXIodCksdGhpcy5nZXRNb250aCh0KSsxLDApKX1jbG9uZSh0KXtyZXR1cm4gbmV3IERhdGUodC5nZXRUaW1lKCkpfWNyZWF0ZURhdGUodCxlLG4pe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpe2lmKGU8MHx8ZT4xMSl0aHJvdyBFcnJvcihgSW52YWxpZCBtb250aCBpbmRleCAiJHtlfSIuIE1vbnRoIGluZGV4IGhhcyB0byBiZSBiZXR3ZWVuIDAgYW5kIDExLmApO2lmKG48MSl0aHJvdyBFcnJvcihgSW52YWxpZCBkYXRlICIke259Ii4gRGF0ZSBoYXMgdG8gYmUgZ3JlYXRlciB0aGFuIDAuYCl9bGV0IG89dGhpcy5fY3JlYXRlRGF0ZVdpdGhPdmVyZmxvdyh0LGUsbik7aWYoby5nZXRNb250aCgpIT1lJiYoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkpdGhyb3cgRXJyb3IoYEludmFsaWQgZGF0ZSAiJHtufSIgZm9yIG1vbnRoIHdpdGggaW5kZXggIiR7ZX0iLmApO3JldHVybiBvfXRvZGF5KCl7cmV0dXJuIG5ldyBEYXRlfXBhcnNlKHQpe3JldHVybiJudW1iZXIiPT10eXBlb2YgdD9uZXcgRGF0ZSh0KTp0P25ldyBEYXRlKERhdGUucGFyc2UodCkpOm51bGx9Zm9ybWF0KHQsZSl7aWYoIXRoaXMuaXNWYWxpZCh0KSl0aHJvdyBFcnJvcigiTmF0aXZlRGF0ZUFkYXB0ZXI6IENhbm5vdCBmb3JtYXQgaW52YWxpZCBkYXRlLiIpO2lmKFd6KXt0aGlzLl9jbGFtcERhdGUmJih0LmdldEZ1bGxZZWFyKCk8MXx8dC5nZXRGdWxsWWVhcigpPjk5OTkpJiYodD10aGlzLmNsb25lKHQpKS5zZXRGdWxsWWVhcihNYXRoLm1heCgxLE1hdGgubWluKDk5OTksdC5nZXRGdWxsWWVhcigpKSkpLGU9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHt0aW1lWm9uZToidXRjIn0pO2NvbnN0IG49bmV3IEludGwuRGF0ZVRpbWVGb3JtYXQodGhpcy5sb2NhbGUsZSk7cmV0dXJuIHRoaXMuX3N0cmlwRGlyZWN0aW9uYWxpdHlDaGFyYWN0ZXJzKHRoaXMuX2Zvcm1hdChuLHQpKX1yZXR1cm4gdGhpcy5fc3RyaXBEaXJlY3Rpb25hbGl0eUNoYXJhY3RlcnModC50b0RhdGVTdHJpbmcoKSl9YWRkQ2FsZW5kYXJZZWFycyh0LGUpe3JldHVybiB0aGlzLmFkZENhbGVuZGFyTW9udGhzKHQsMTIqZSl9YWRkQ2FsZW5kYXJNb250aHModCxlKXtsZXQgbj10aGlzLl9jcmVhdGVEYXRlV2l0aE92ZXJmbG93KHRoaXMuZ2V0WWVhcih0KSx0aGlzLmdldE1vbnRoKHQpK2UsdGhpcy5nZXREYXRlKHQpKTtyZXR1cm4gdGhpcy5nZXRNb250aChuKSE9KCh0aGlzLmdldE1vbnRoKHQpK2UpJTEyKzEyKSUxMiYmKG49dGhpcy5fY3JlYXRlRGF0ZVdpdGhPdmVyZmxvdyh0aGlzLmdldFllYXIobiksdGhpcy5nZXRNb250aChuKSwwKSksbn1hZGRDYWxlbmRhckRheXModCxlKXtyZXR1cm4gdGhpcy5fY3JlYXRlRGF0ZVdpdGhPdmVyZmxvdyh0aGlzLmdldFllYXIodCksdGhpcy5nZXRNb250aCh0KSx0aGlzLmdldERhdGUodCkrZSl9dG9Jc284NjAxKHQpe3JldHVyblt0LmdldFVUQ0Z1bGxZZWFyKCksdGhpcy5fMmRpZ2l0KHQuZ2V0VVRDTW9udGgoKSsxKSx0aGlzLl8yZGlnaXQodC5nZXRVVENEYXRlKCkpXS5qb2luKCItIil9ZGVzZXJpYWxpemUodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXtpZighdClyZXR1cm4gbnVsbDtpZihaei50ZXN0KHQpKXtsZXQgZT1uZXcgRGF0ZSh0KTtpZih0aGlzLmlzVmFsaWQoZSkpcmV0dXJuIGV9fXJldHVybiBzdXBlci5kZXNlcmlhbGl6ZSh0KX1pc0RhdGVJbnN0YW5jZSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIERhdGV9aXNWYWxpZCh0KXtyZXR1cm4haXNOYU4odC5nZXRUaW1lKCkpfWludmFsaWQoKXtyZXR1cm4gbmV3IERhdGUoTmFOKX1fY3JlYXRlRGF0ZVdpdGhPdmVyZmxvdyh0LGUsbil7Y29uc3Qgbz1uZXcgRGF0ZTtyZXR1cm4gby5zZXRGdWxsWWVhcih0LGUsbiksby5zZXRIb3VycygwLDAsMCwwKSxvfV8yZGlnaXQodCl7cmV0dXJuKCIwMCIrdCkuc2xpY2UoLTIpfV9zdHJpcERpcmVjdGlvbmFsaXR5Q2hhcmFjdGVycyh0KXtyZXR1cm4gdC5yZXBsYWNlKC9bXHUyMDBlXHUyMDBmXS9nLCIiKX1fZm9ybWF0KHQsZSl7Y29uc3Qgbj1uZXcgRGF0ZTtyZXR1cm4gbi5zZXRVVENGdWxsWWVhcihlLmdldEZ1bGxZZWFyKCksZS5nZXRNb250aCgpLGUuZ2V0RGF0ZSgpKSxuLnNldFVUQ0hvdXJzKGUuZ2V0SG91cnMoKSxlLmdldE1pbnV0ZXMoKSxlLmdldFNlY29uZHMoKSxlLmdldE1pbGxpc2Vjb25kcygpKSx0LmZvcm1hdChuKX19S3ouybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEt6KSh1cyhCeiw4KSx1cyhmSSkpfSxLei7JtXByb3Y9bG8oe3Rva2VuOkt6LGZhY3Rvcnk6S3ouybVmYWN9KSxLei5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbQnpdfV19LHt0eXBlOmZJfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihLeixbe3R5cGU6Sm19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltCel19XX0se3R5cGU6Zkl9XX0pLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3MgSnp7fUp6Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxKeil9LEp6Lsm1bW9kPVpvKHt0eXBlOkp6fSksSnouybVpbmo9Y28oe3Byb3ZpZGVyczpbe3Byb3ZpZGU6anosdXNlQ2xhc3M6S3p9XSxpbXBvcnRzOltbZ0ldXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oSnose2ltcG9ydHM6ZnVuY3Rpb24oKXtyZXR1cm5bZ0ldfX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoSnosW3t0eXBlOmtfLGFyZ3M6W3tpbXBvcnRzOltnSV0scHJvdmlkZXJzOlt7cHJvdmlkZTpqeix1c2VDbGFzczpLen1dfV19XSxudWxsLG51bGwpO2NvbnN0IFF6PXtwYXJzZTp7ZGF0ZUlucHV0Om51bGx9LGRpc3BsYXk6e2RhdGVJbnB1dDp7eWVhcjoibnVtZXJpYyIsbW9udGg6Im51bWVyaWMiLGRheToibnVtZXJpYyJ9LG1vbnRoWWVhckxhYmVsOnt5ZWFyOiJudW1lcmljIixtb250aDoic2hvcnQifSxkYXRlQTExeUxhYmVsOnt5ZWFyOiJudW1lcmljIixtb250aDoibG9uZyIsZGF5OiJudW1lcmljIn0sbW9udGhZZWFyQTExeUxhYmVsOnt5ZWFyOiJudW1lcmljIixtb250aDoibG9uZyJ9fX07Y2xhc3MgJHp7fSR6Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHwkeil9LCR6Lsm1bW9kPVpvKHt0eXBlOiR6fSksJHouybVpbmo9Y28oe3Byb3ZpZGVyczpbe3Byb3ZpZGU6VXosdXNlVmFsdWU6UXp9XSxpbXBvcnRzOltbSnpdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oJHose2ltcG9ydHM6W0p6XX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoJHosW3t0eXBlOmtfLGFyZ3M6W3tpbXBvcnRzOltKel0scHJvdmlkZXJzOlt7cHJvdmlkZTpVeix1c2VWYWx1ZTpRen1dfV19XSxudWxsLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3MgdEh7aXNFcnJvclN0YXRlKHQsZSl7cmV0dXJuISEodCYmdC5pbnZhbGlkJiYodC5kaXJ0eXx8ZSYmZS5zdWJtaXR0ZWQpKX19dEguybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHRIKX0sdEguybVwcm92PWxvKHt0b2tlbjp0SCxmYWN0b3J5OnRILsm1ZmFjfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYih0SCxbe3R5cGU6Sm19XSxudWxsLG51bGwpO2NsYXNzIGVIe2lzRXJyb3JTdGF0ZSh0LGUpe3JldHVybiEhKHQmJnQuaW52YWxpZCYmKHQudG91Y2hlZHx8ZSYmZS5zdWJtaXR0ZWQpKX19ZUguybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGVIKX0sZUguybVwcm92PWxvKHtmYWN0b3J5OmZ1bmN0aW9uIHQoKXtyZXR1cm4gbmV3IGVIfSx0b2tlbjplSCxwcm92aWRlZEluOiJyb290In0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoZUgsW3t0eXBlOkptLGFyZ3M6W3twcm92aWRlZEluOiJyb290In1dfV0sbnVsbCxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIG5Ie31uSC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8bkgpfSxuSC7JtWRpcj1Kbyh7dHlwZTpuSCxzZWxlY3RvcnM6W1siIiwibWF0LWxpbmUiLCIiXSxbIiIsIm1hdExpbmUiLCIiXV0saG9zdEF0dHJzOlsxLCJtYXQtbGluZSJdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihuSCxbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJbbWF0LWxpbmVdLCBbbWF0TGluZV0iLGhvc3Q6e2NsYXNzOiJtYXQtbGluZSJ9fV19XSxudWxsLG51bGwpO2NsYXNzIG9Ie31vSC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8b0gpfSxvSC7JtW1vZD1abyh7dHlwZTpvSH0pLG9ILsm1aW5qPWNvKHtpbXBvcnRzOltbVHpdLFR6XX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8ob0gse2RlY2xhcmF0aW9uczpbbkhdLGltcG9ydHM6W1R6XSxleHBvcnRzOltuSCxUel19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKG9ILFt7dHlwZTprXyxhcmdzOlt7aW1wb3J0czpbVHpdLGV4cG9ydHM6W25ILFR6XSxkZWNsYXJhdGlvbnM6W25IXX1dfV0sbnVsbCxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIGlIe2NvbnN0cnVjdG9yKHQsZSxuKXt0aGlzLl9yZW5kZXJlcj10LHRoaXMuZWxlbWVudD1lLHRoaXMuY29uZmlnPW4sdGhpcy5zdGF0ZT0zfWZhZGVPdXQoKXt0aGlzLl9yZW5kZXJlci5mYWRlT3V0UmlwcGxlKHRoaXMpfX1jb25zdCBhSD17ZW50ZXJEdXJhdGlvbjo0NTAsZXhpdER1cmF0aW9uOjQwMH0sckg9dkkoe3Bhc3NpdmU6ITB9KSxzSD1bIm1vdXNlZG93biIsInRvdWNoc3RhcnQiXSxsSD1bIm1vdXNldXAiLCJtb3VzZWxlYXZlIiwidG91Y2hlbmQiLCJ0b3VjaGNhbmNlbCJdO2NsYXNzIGNIe2NvbnN0cnVjdG9yKHQsZSxuLG8pe3RoaXMuX3RhcmdldD10LHRoaXMuX25nWm9uZT1lLHRoaXMuX2lzUG9pbnRlckRvd249ITEsdGhpcy5fYWN0aXZlUmlwcGxlcz1uZXcgU2V0LHRoaXMuX3BvaW50ZXJVcEV2ZW50c1JlZ2lzdGVyZWQ9ITEsby5pc0Jyb3dzZXImJih0aGlzLl9jb250YWluZXJFbGVtZW50PXBJKG4pKX1mYWRlSW5SaXBwbGUodCxlLG49e30pe2NvbnN0IG89dGhpcy5fY29udGFpbmVyUmVjdD10aGlzLl9jb250YWluZXJSZWN0fHx0aGlzLl9jb250YWluZXJFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGk9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGFIKSxuLmFuaW1hdGlvbik7bi5jZW50ZXJlZCYmKHQ9by5sZWZ0K28ud2lkdGgvMixlPW8udG9wK28uaGVpZ2h0LzIpO2NvbnN0IGE9bi5yYWRpdXN8fChmdW5jdGlvbiByKHQsZSxuKXtjb25zdCBvPU1hdGgubWF4KE1hdGguYWJzKHQtbi5sZWZ0KSxNYXRoLmFicyh0LW4ucmlnaHQpKSxpPU1hdGgubWF4KE1hdGguYWJzKGUtbi50b3ApLE1hdGguYWJzKGUtbi5ib3R0b20pKTtyZXR1cm4gTWF0aC5zcXJ0KG8qbytpKmkpfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8pKHQsZSxvKSxzPXQtby5sZWZ0LGw9ZS1vLnRvcCxjPWkuZW50ZXJEdXJhdGlvbixkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2QuY2xhc3NMaXN0LmFkZCgibWF0LXJpcHBsZS1lbGVtZW50IiksZC5zdHlsZS5sZWZ0PXMtYSsicHgiLGQuc3R5bGUudG9wPWwtYSsicHgiLGQuc3R5bGUuaGVpZ2h0PTIqYSsicHgiLGQuc3R5bGUud2lkdGg9MiphKyJweCIsbnVsbCE9bi5jb2xvciYmKGQuc3R5bGUuYmFja2dyb3VuZENvbG9yPW4uY29sb3IpLGQuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uPWAke2N9bXNgLHRoaXMuX2NvbnRhaW5lckVsZW1lbnQuYXBwZW5kQ2hpbGQoZCksKGZ1bmN0aW9uIHAodCl7d2luZG93LmdldENvbXB1dGVkU3R5bGUodCkuZ2V0UHJvcGVydHlWYWx1ZSgib3BhY2l0eSIpfSkoZCksZC5zdHlsZS50cmFuc2Zvcm09InNjYWxlKDEpIjtjb25zdCBtPW5ldyBpSCh0aGlzLGQsbik7cmV0dXJuIG0uc3RhdGU9MCx0aGlzLl9hY3RpdmVSaXBwbGVzLmFkZChtKSxuLnBlcnNpc3RlbnR8fCh0aGlzLl9tb3N0UmVjZW50VHJhbnNpZW50UmlwcGxlPW0pLHRoaXMuX3J1blRpbWVvdXRPdXRzaWRlWm9uZSgoKCk9Pntjb25zdCB0PW09PT10aGlzLl9tb3N0UmVjZW50VHJhbnNpZW50UmlwcGxlO20uc3RhdGU9MSxuLnBlcnNpc3RlbnR8fHQmJnRoaXMuX2lzUG9pbnRlckRvd258fG0uZmFkZU91dCgpfSksYyksbX1mYWRlT3V0UmlwcGxlKHQpe2NvbnN0IGU9dGhpcy5fYWN0aXZlUmlwcGxlcy5kZWxldGUodCk7aWYodD09PXRoaXMuX21vc3RSZWNlbnRUcmFuc2llbnRSaXBwbGUmJih0aGlzLl9tb3N0UmVjZW50VHJhbnNpZW50UmlwcGxlPW51bGwpLHRoaXMuX2FjdGl2ZVJpcHBsZXMuc2l6ZXx8KHRoaXMuX2NvbnRhaW5lclJlY3Q9bnVsbCksIWUpcmV0dXJuO2NvbnN0IG49dC5lbGVtZW50LG89T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGFIKSx0LmNvbmZpZy5hbmltYXRpb24pO24uc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uPWAke28uZXhpdER1cmF0aW9ufW1zYCxuLnN0eWxlLm9wYWNpdHk9IjAiLHQuc3RhdGU9Mix0aGlzLl9ydW5UaW1lb3V0T3V0c2lkZVpvbmUoKCgpPT57dC5zdGF0ZT0zLG4ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChuKX0pLG8uZXhpdER1cmF0aW9uKX1mYWRlT3V0QWxsKCl7dGhpcy5fYWN0aXZlUmlwcGxlcy5mb3JFYWNoKCh0PT50LmZhZGVPdXQoKSkpfWZhZGVPdXRBbGxOb25QZXJzaXN0ZW50KCl7dGhpcy5fYWN0aXZlUmlwcGxlcy5mb3JFYWNoKCh0PT57dC5jb25maWcucGVyc2lzdGVudHx8dC5mYWRlT3V0KCl9KSl9c2V0dXBUcmlnZ2VyRXZlbnRzKHQpe2NvbnN0IGU9cEkodCk7ZSYmZSE9PXRoaXMuX3RyaWdnZXJFbGVtZW50JiYodGhpcy5fcmVtb3ZlVHJpZ2dlckV2ZW50cygpLHRoaXMuX3RyaWdnZXJFbGVtZW50PWUsdGhpcy5fcmVnaXN0ZXJFdmVudHMoc0gpKX1oYW5kbGVFdmVudCh0KXsibW91c2Vkb3duIj09PXQudHlwZT90aGlzLl9vbk1vdXNlZG93bih0KToidG91Y2hzdGFydCI9PT10LnR5cGU/dGhpcy5fb25Ub3VjaFN0YXJ0KHQpOnRoaXMuX29uUG9pbnRlclVwKCksdGhpcy5fcG9pbnRlclVwRXZlbnRzUmVnaXN0ZXJlZHx8KHRoaXMuX3JlZ2lzdGVyRXZlbnRzKGxIKSx0aGlzLl9wb2ludGVyVXBFdmVudHNSZWdpc3RlcmVkPSEwKX1fb25Nb3VzZWRvd24odCl7Y29uc3QgZT1zeih0KSxuPXRoaXMuX2xhc3RUb3VjaFN0YXJ0RXZlbnQmJkRhdGUubm93KCk8dGhpcy5fbGFzdFRvdWNoU3RhcnRFdmVudCs4MDA7dGhpcy5fdGFyZ2V0LnJpcHBsZURpc2FibGVkfHxlfHxufHwodGhpcy5faXNQb2ludGVyRG93bj0hMCx0aGlzLmZhZGVJblJpcHBsZSh0LmNsaWVudFgsdC5jbGllbnRZLHRoaXMuX3RhcmdldC5yaXBwbGVDb25maWcpKX1fb25Ub3VjaFN0YXJ0KHQpe2lmKCF0aGlzLl90YXJnZXQucmlwcGxlRGlzYWJsZWQmJiFseih0KSl7dGhpcy5fbGFzdFRvdWNoU3RhcnRFdmVudD1EYXRlLm5vdygpLHRoaXMuX2lzUG9pbnRlckRvd249ITA7Y29uc3QgZT10LmNoYW5nZWRUb3VjaGVzO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKXRoaXMuZmFkZUluUmlwcGxlKGVbdF0uY2xpZW50WCxlW3RdLmNsaWVudFksdGhpcy5fdGFyZ2V0LnJpcHBsZUNvbmZpZyl9fV9vblBvaW50ZXJVcCgpe3RoaXMuX2lzUG9pbnRlckRvd24mJih0aGlzLl9pc1BvaW50ZXJEb3duPSExLHRoaXMuX2FjdGl2ZVJpcHBsZXMuZm9yRWFjaCgodD0+eyF0LmNvbmZpZy5wZXJzaXN0ZW50JiYoMT09PXQuc3RhdGV8fHQuY29uZmlnLnRlcm1pbmF0ZU9uUG9pbnRlclVwJiYwPT09dC5zdGF0ZSkmJnQuZmFkZU91dCgpfSkpKX1fcnVuVGltZW91dE91dHNpZGVab25lKHQsZT0wKXt0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCgpPT5zZXRUaW1lb3V0KHQsZSkpKX1fcmVnaXN0ZXJFdmVudHModCl7dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgoKT0+e3QuZm9yRWFjaCgodD0+e3RoaXMuX3RyaWdnZXJFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIodCx0aGlzLHJIKX0pKX0pKX1fcmVtb3ZlVHJpZ2dlckV2ZW50cygpe3RoaXMuX3RyaWdnZXJFbGVtZW50JiYoc0guZm9yRWFjaCgodD0+e3RoaXMuX3RyaWdnZXJFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodCx0aGlzLHJIKX0pKSx0aGlzLl9wb2ludGVyVXBFdmVudHNSZWdpc3RlcmVkJiZsSC5mb3JFYWNoKCh0PT57dGhpcy5fdHJpZ2dlckVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LHRoaXMsckgpfSkpKX19Y29uc3QgZEg9bmV3IE5yKCJtYXQtcmlwcGxlLWdsb2JhbC1vcHRpb25zIik7Y2xhc3MgcEh7Y29uc3RydWN0b3IodCxlLG4sbyxpKXt0aGlzLl9lbGVtZW50UmVmPXQsdGhpcy5fYW5pbWF0aW9uTW9kZT1pLHRoaXMucmFkaXVzPTAsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5faXNJbml0aWFsaXplZD0hMSx0aGlzLl9nbG9iYWxPcHRpb25zPW98fHt9LHRoaXMuX3JpcHBsZVJlbmRlcmVyPW5ldyBjSCh0aGlzLGUsdCxuKX1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR9c2V0IGRpc2FibGVkKHQpe3QmJnRoaXMuZmFkZU91dEFsbE5vblBlcnNpc3RlbnQoKSx0aGlzLl9kaXNhYmxlZD10LHRoaXMuX3NldHVwVHJpZ2dlckV2ZW50c0lmRW5hYmxlZCgpfWdldCB0cmlnZ2VyKCl7cmV0dXJuIHRoaXMuX3RyaWdnZXJ8fHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudH1zZXQgdHJpZ2dlcih0KXt0aGlzLl90cmlnZ2VyPXQsdGhpcy5fc2V0dXBUcmlnZ2VyRXZlbnRzSWZFbmFibGVkKCl9bmdPbkluaXQoKXt0aGlzLl9pc0luaXRpYWxpemVkPSEwLHRoaXMuX3NldHVwVHJpZ2dlckV2ZW50c0lmRW5hYmxlZCgpfW5nT25EZXN0cm95KCl7dGhpcy5fcmlwcGxlUmVuZGVyZXIuX3JlbW92ZVRyaWdnZXJFdmVudHMoKX1mYWRlT3V0QWxsKCl7dGhpcy5fcmlwcGxlUmVuZGVyZXIuZmFkZU91dEFsbCgpfWZhZGVPdXRBbGxOb25QZXJzaXN0ZW50KCl7dGhpcy5fcmlwcGxlUmVuZGVyZXIuZmFkZU91dEFsbE5vblBlcnNpc3RlbnQoKX1nZXQgcmlwcGxlQ29uZmlnKCl7cmV0dXJue2NlbnRlcmVkOnRoaXMuY2VudGVyZWQscmFkaXVzOnRoaXMucmFkaXVzLGNvbG9yOnRoaXMuY29sb3IsYW5pbWF0aW9uOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHRoaXMuX2dsb2JhbE9wdGlvbnMuYW5pbWF0aW9uKSwiTm9vcEFuaW1hdGlvbnMiPT09dGhpcy5fYW5pbWF0aW9uTW9kZT97ZW50ZXJEdXJhdGlvbjowLGV4aXREdXJhdGlvbjowfTp7fSksdGhpcy5hbmltYXRpb24pLHRlcm1pbmF0ZU9uUG9pbnRlclVwOnRoaXMuX2dsb2JhbE9wdGlvbnMudGVybWluYXRlT25Qb2ludGVyVXB9fWdldCByaXBwbGVEaXNhYmxlZCgpe3JldHVybiB0aGlzLmRpc2FibGVkfHwhIXRoaXMuX2dsb2JhbE9wdGlvbnMuZGlzYWJsZWR9X3NldHVwVHJpZ2dlckV2ZW50c0lmRW5hYmxlZCgpeyF0aGlzLmRpc2FibGVkJiZ0aGlzLl9pc0luaXRpYWxpemVkJiZ0aGlzLl9yaXBwbGVSZW5kZXJlci5zZXR1cFRyaWdnZXJFdmVudHModGhpcy50cmlnZ2VyKX1sYXVuY2godCxlPTAsbil7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0P3RoaXMuX3JpcHBsZVJlbmRlcmVyLmZhZGVJblJpcHBsZSh0LGUsT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHRoaXMucmlwcGxlQ29uZmlnKSxuKSk6dGhpcy5fcmlwcGxlUmVuZGVyZXIuZmFkZUluUmlwcGxlKDAsMCxPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdGhpcy5yaXBwbGVDb25maWcpLHQpKX19cEguybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHBIKShNdShjaCksTXUodEMpLE11KGZJKSxNdShkSCw4KSxNdShOdyw4KSl9LHBILsm1ZGlyPUpvKHt0eXBlOnBILHNlbGVjdG9yczpbWyIiLCJtYXQtcmlwcGxlIiwiIl0sWyIiLCJtYXRSaXBwbGUiLCIiXV0saG9zdEF0dHJzOlsxLCJtYXQtcmlwcGxlIl0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezImZSYmYWYoIm1hdC1yaXBwbGUtdW5ib3VuZGVkIixuLnVuYm91bmRlZCl9LGlucHV0czp7cmFkaXVzOlsibWF0UmlwcGxlUmFkaXVzIiwicmFkaXVzIl0sZGlzYWJsZWQ6WyJtYXRSaXBwbGVEaXNhYmxlZCIsImRpc2FibGVkIl0sdHJpZ2dlcjpbIm1hdFJpcHBsZVRyaWdnZXIiLCJ0cmlnZ2VyIl0sY29sb3I6WyJtYXRSaXBwbGVDb2xvciIsImNvbG9yIl0sdW5ib3VuZGVkOlsibWF0UmlwcGxlVW5ib3VuZGVkIiwidW5ib3VuZGVkIl0sY2VudGVyZWQ6WyJtYXRSaXBwbGVDZW50ZXJlZCIsImNlbnRlcmVkIl0sYW5pbWF0aW9uOlsibWF0UmlwcGxlQW5pbWF0aW9uIiwiYW5pbWF0aW9uIl19LGV4cG9ydEFzOlsibWF0UmlwcGxlIl19KSxwSC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmNofSx7dHlwZTp0Q30se3R5cGU6Zkl9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbZEhdfV19LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbTnddfV19XSxwSC5wcm9wRGVjb3JhdG9ycz17Y29sb3I6W3t0eXBlOnlfLGFyZ3M6WyJtYXRSaXBwbGVDb2xvciJdfV0sdW5ib3VuZGVkOlt7dHlwZTp5XyxhcmdzOlsibWF0UmlwcGxlVW5ib3VuZGVkIl19XSxjZW50ZXJlZDpbe3R5cGU6eV8sYXJnczpbIm1hdFJpcHBsZUNlbnRlcmVkIl19XSxyYWRpdXM6W3t0eXBlOnlfLGFyZ3M6WyJtYXRSaXBwbGVSYWRpdXMiXX1dLGFuaW1hdGlvbjpbe3R5cGU6eV8sYXJnczpbIm1hdFJpcHBsZUFuaW1hdGlvbiJdfV0sZGlzYWJsZWQ6W3t0eXBlOnlfLGFyZ3M6WyJtYXRSaXBwbGVEaXNhYmxlZCJdfV0sdHJpZ2dlcjpbe3R5cGU6eV8sYXJnczpbIm1hdFJpcHBsZVRyaWdnZXIiXX1dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHBILFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6IlttYXQtcmlwcGxlXSwgW21hdFJpcHBsZV0iLGV4cG9ydEFzOiJtYXRSaXBwbGUiLGhvc3Q6e2NsYXNzOiJtYXQtcmlwcGxlIiwiW2NsYXNzLm1hdC1yaXBwbGUtdW5ib3VuZGVkXSI6InVuYm91bmRlZCJ9fV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Y2h9LHt0eXBlOnRDfSx7dHlwZTpmSX0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltkSF19XX0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltOd119XX1dfSkse3JhZGl1czpbe3R5cGU6eV8sYXJnczpbIm1hdFJpcHBsZVJhZGl1cyJdfV0sZGlzYWJsZWQ6W3t0eXBlOnlfLGFyZ3M6WyJtYXRSaXBwbGVEaXNhYmxlZCJdfV0sdHJpZ2dlcjpbe3R5cGU6eV8sYXJnczpbIm1hdFJpcHBsZVRyaWdnZXIiXX1dLGNvbG9yOlt7dHlwZTp5XyxhcmdzOlsibWF0UmlwcGxlQ29sb3IiXX1dLHVuYm91bmRlZDpbe3R5cGU6eV8sYXJnczpbIm1hdFJpcHBsZVVuYm91bmRlZCJdfV0sY2VudGVyZWQ6W3t0eXBlOnlfLGFyZ3M6WyJtYXRSaXBwbGVDZW50ZXJlZCJdfV0sYW5pbWF0aW9uOlt7dHlwZTp5XyxhcmdzOlsibWF0UmlwcGxlQW5pbWF0aW9uIl19XX0pOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3MgbUh7fW1ILsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxtSCl9LG1ILsm1bW9kPVpvKHt0eXBlOm1IfSksbUguybVpbmo9Y28oe2ltcG9ydHM6W1tUeixnSV0sVHpdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhtSCx7ZGVjbGFyYXRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuW3BIXX0saW1wb3J0czpmdW5jdGlvbigpe3JldHVybltUeixnSV19LGV4cG9ydHM6ZnVuY3Rpb24oKXtyZXR1cm5bcEgsVHpdfX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIobUgsW3t0eXBlOmtfLGFyZ3M6W3tpbXBvcnRzOltUeixnSV0sZXhwb3J0czpbcEgsVHpdLGRlY2xhcmF0aW9uczpbcEhdfV19XSxudWxsLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3MgdUh7Y29uc3RydWN0b3IodCl7dGhpcy5fYW5pbWF0aW9uTW9kZT10LHRoaXMuc3RhdGU9InVuY2hlY2tlZCIsdGhpcy5kaXNhYmxlZD0hMX19dUguybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHVIKShNdShOdyw4KSl9LHVILsm1Y21wPVVvKHt0eXBlOnVILHNlbGVjdG9yczpbWyJtYXQtcHNldWRvLWNoZWNrYm94Il1dLGhvc3RBdHRyczpbMSwibWF0LXBzZXVkby1jaGVja2JveCJdLGhvc3RWYXJzOjgsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsyJmUmJmFmKCJtYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUiLCJpbmRldGVybWluYXRlIj09PW4uc3RhdGUpKCJtYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQiLCJjaGVja2VkIj09PW4uc3RhdGUpKCJtYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVkIixuLmRpc2FibGVkKSgiX21hdC1hbmltYXRpb24tbm9vcGFibGUiLCJOb29wQW5pbWF0aW9ucyI9PT1uLl9hbmltYXRpb25Nb2RlKX0saW5wdXRzOntzdGF0ZToic3RhdGUiLGRpc2FibGVkOiJkaXNhYmxlZCJ9LGRlY2xzOjAsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXt9LHN0eWxlczpbJy5tYXQtcHNldWRvLWNoZWNrYm94e3dpZHRoOjE2cHg7aGVpZ2h0OjE2cHg7Ym9yZGVyOjJweCBzb2xpZDtib3JkZXItcmFkaXVzOjJweDtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlO2ZsZXgtc2hyaW5rOjA7dHJhbnNpdGlvbjpib3JkZXItY29sb3IgOTBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAwLjEpLGJhY2tncm91bmQtY29sb3IgOTBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAwLjEpfS5tYXQtcHNldWRvLWNoZWNrYm94OjphZnRlcntwb3NpdGlvbjphYnNvbHV0ZTtvcGFjaXR5OjA7Y29udGVudDoiIjtib3JkZXItYm90dG9tOjJweCBzb2xpZCBjdXJyZW50Q29sb3I7dHJhbnNpdGlvbjpvcGFjaXR5IDkwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMC4xKX0ubWF0LXBzZXVkby1jaGVja2JveC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQsLm1hdC1wc2V1ZG8tY2hlY2tib3gubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRle2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudH0uX21hdC1hbmltYXRpb24tbm9vcGFibGUubWF0LXBzZXVkby1jaGVja2JveHt0cmFuc2l0aW9uOm5vbmU7YW5pbWF0aW9uOm5vbmV9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlLm1hdC1wc2V1ZG8tY2hlY2tib3g6OmFmdGVye3RyYW5zaXRpb246bm9uZX0ubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdH0ubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlOjphZnRlcnt0b3A6NXB4O2xlZnQ6MXB4O3dpZHRoOjEwcHg7b3BhY2l0eToxO2JvcmRlci1yYWRpdXM6MnB4fS5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQ6OmFmdGVye3RvcDoyLjRweDtsZWZ0OjFweDt3aWR0aDo4cHg7aGVpZ2h0OjNweDtib3JkZXItbGVmdDoycHggc29saWQgY3VycmVudENvbG9yO3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKTtvcGFjaXR5OjE7Ym94LXNpemluZzpjb250ZW50LWJveH1cbiddLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLHVILmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltOd119XX1dLHVILnByb3BEZWNvcmF0b3JzPXtzdGF0ZTpbe3R5cGU6eV99XSxkaXNhYmxlZDpbe3R5cGU6eV99XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYih1SCxbe3R5cGU6aF8sYXJnczpbe2VuY2Fwc3VsYXRpb246UG8uTm9uZSxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNoLHNlbGVjdG9yOiJtYXQtcHNldWRvLWNoZWNrYm94Iix0ZW1wbGF0ZToiIixob3N0OntjbGFzczoibWF0LXBzZXVkby1jaGVja2JveCIsIltjbGFzcy5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGVdIjonc3RhdGUgPT09ICJpbmRldGVybWluYXRlIicsIltjbGFzcy5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWRdIjonc3RhdGUgPT09ICJjaGVja2VkIicsIltjbGFzcy5tYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVkXSI6ImRpc2FibGVkIiwiW2NsYXNzLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlXSI6J19hbmltYXRpb25Nb2RlID09PSAiTm9vcEFuaW1hdGlvbnMiJ30sc3R5bGVzOlsnLm1hdC1wc2V1ZG8tY2hlY2tib3h7d2lkdGg6MTZweDtoZWlnaHQ6MTZweDtib3JkZXI6MnB4IHNvbGlkO2JvcmRlci1yYWRpdXM6MnB4O2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7ZmxleC1zaHJpbms6MDt0cmFuc2l0aW9uOmJvcmRlci1jb2xvciA5MG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDAuMSksYmFja2dyb3VuZC1jb2xvciA5MG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDAuMSl9Lm1hdC1wc2V1ZG8tY2hlY2tib3g6OmFmdGVye3Bvc2l0aW9uOmFic29sdXRlO29wYWNpdHk6MDtjb250ZW50OiIiO2JvcmRlci1ib3R0b206MnB4IHNvbGlkIGN1cnJlbnRDb2xvcjt0cmFuc2l0aW9uOm9wYWNpdHkgOTBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAwLjEpfS5tYXQtcHNldWRvLWNoZWNrYm94Lm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCwubWF0LXBzZXVkby1jaGVja2JveC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGV7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50fS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZS5tYXQtcHNldWRvLWNoZWNrYm94e3RyYW5zaXRpb246bm9uZTthbmltYXRpb246bm9uZX0uX21hdC1hbmltYXRpb24tbm9vcGFibGUubWF0LXBzZXVkby1jaGVja2JveDo6YWZ0ZXJ7dHJhbnNpdGlvbjpub25lfS5tYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGU6OmFmdGVye3RvcDo1cHg7bGVmdDoxcHg7d2lkdGg6MTBweDtvcGFjaXR5OjE7Ym9yZGVyLXJhZGl1czoycHh9Lm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZDo6YWZ0ZXJ7dG9wOjIuNHB4O2xlZnQ6MXB4O3dpZHRoOjhweDtoZWlnaHQ6M3B4O2JvcmRlci1sZWZ0OjJweCBzb2xpZCBjdXJyZW50Q29sb3I7dHJhbnNmb3JtOnJvdGF0ZSgtNDVkZWcpO29wYWNpdHk6MTtib3gtc2l6aW5nOmNvbnRlbnQtYm94fVxuJ119XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W053XX1dfV19KSx7c3RhdGU6W3t0eXBlOnlffV0sZGlzYWJsZWQ6W3t0eXBlOnlffV19KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIGZIe31mSC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8ZkgpfSxmSC7JtW1vZD1abyh7dHlwZTpmSH0pLGZILsm1aW5qPWNvKHtpbXBvcnRzOltbVHpdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oZkgse2RlY2xhcmF0aW9uczpbdUhdLGltcG9ydHM6W1R6XSxleHBvcnRzOlt1SF19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGZILFt7dHlwZTprXyxhcmdzOlt7aW1wb3J0czpbVHpdLGV4cG9ydHM6W3VIXSxkZWNsYXJhdGlvbnM6W3VIXX1dfV0sbnVsbCxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IGdIPW5ldyBOcigiTUFUX09QVElPTl9QQVJFTlRfQ09NUE9ORU5UIiksaEg9TnooCi8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzc3t9KTtsZXQgYkg9MDtjbGFzcyB5SCBleHRlbmRzIGhIe2NvbnN0cnVjdG9yKHQpe3ZhciBlO3N1cGVyKCksdGhpcy5fbGFiZWxJZD0ibWF0LW9wdGdyb3VwLWxhYmVsLSIrYkgrKyx0aGlzLl9pbmVydD1udWxsIT09KGU9bnVsbD09dD92b2lkIDA6dC5pbmVydEdyb3VwcykmJnZvaWQgMCE9PWUmJmV9fXlILsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHx5SCkoTXUoZ0gsOCkpfSx5SC7JtWRpcj1Kbyh7dHlwZTp5SCxpbnB1dHM6e2xhYmVsOiJsYWJlbCJ9LGZlYXR1cmVzOltnbV19KSx5SC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltnSF19LHt0eXBlOl9zfV19XSx5SC5wcm9wRGVjb3JhdG9ycz17bGFiZWw6W3t0eXBlOnlffV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoeUgsW3t0eXBlOmdffV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltnSF19LHt0eXBlOl9zfV19XX0pLHtsYWJlbDpbe3R5cGU6eV99XX0pO2NvbnN0IF9IPW5ldyBOcigiTWF0T3B0Z3JvdXAiKTtjbGFzcyBDSCBleHRlbmRzIHlIe31DSC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBNSChlfHxDSCl9LENILsm1Y21wPVVvKHt0eXBlOkNILHNlbGVjdG9yczpbWyJtYXQtb3B0Z3JvdXAiXV0saG9zdEF0dHJzOlsxLCJtYXQtb3B0Z3JvdXAiXSxob3N0VmFyczo1LGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MiZlJiYoTm0oInJvbGUiLG4uX2luZXJ0P251bGw6Imdyb3VwIikoImFyaWEtZGlzYWJsZWQiLG4uX2luZXJ0P251bGw6bi5kaXNhYmxlZC50b1N0cmluZygpKSgiYXJpYS1sYWJlbGxlZGJ5IixuLl9pbmVydD9udWxsOm4uX2xhYmVsSWQpLGFmKCJtYXQtb3B0Z3JvdXAtZGlzYWJsZWQiLG4uZGlzYWJsZWQpKX0saW5wdXRzOntkaXNhYmxlZDoiZGlzYWJsZWQifSxleHBvcnRBczpbIm1hdE9wdGdyb3VwIl0sZmVhdHVyZXM6W2loKFt7cHJvdmlkZTpfSCx1c2VFeGlzdGluZzpDSH1dKSxnbV0sbmdDb250ZW50U2VsZWN0b3JzOlsiKiIsIm1hdC1vcHRpb24sIG5nLWNvbnRhaW5lciJdLGRlY2xzOjQsdmFyczoyLGNvbnN0czpbWyJhcmlhLWhpZGRlbiIsInRydWUiLDEsIm1hdC1vcHRncm91cC1sYWJlbCIsMywiaWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKFZ1KFB6KSxPdSgwLCJzcGFuIiwwKSxNZigxKSxqdSgyKSxQdSgpLGp1KDMsMSkpLDImZSYmKHZ1KCJpZCIsbi5fbGFiZWxJZCksSmMoMSkseGYoIiIsbi5sYWJlbCwiICIpKX0sc3R5bGVzOlsiLm1hdC1vcHRncm91cC1sYWJlbHt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztsaW5lLWhlaWdodDo0OHB4O2hlaWdodDo0OHB4O3BhZGRpbmc6MCAxNnB4O3RleHQtYWxpZ246bGVmdDt0ZXh0LWRlY29yYXRpb246bm9uZTttYXgtd2lkdGg6MTAwJTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1vcHRncm91cC1sYWJlbFtkaXNhYmxlZF17Y3Vyc29yOmRlZmF1bHR9W2Rpcj1ydGxdIC5tYXQtb3B0Z3JvdXAtbGFiZWx7dGV4dC1hbGlnbjpyaWdodH0ubWF0LW9wdGdyb3VwLWxhYmVsIC5tYXQtaWNvbnttYXJnaW4tcmlnaHQ6MTZweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Lm1hdC1vcHRncm91cC1sYWJlbCAubWF0LWljb24gc3Zne3ZlcnRpY2FsLWFsaWduOnRvcH1bZGlyPXJ0bF0gLm1hdC1vcHRncm91cC1sYWJlbCAubWF0LWljb257bWFyZ2luLWxlZnQ6MTZweDttYXJnaW4tcmlnaHQ6MH1cbiJdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pO2NvbnN0IE1IPXZyKENIKTsoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKENILFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6Im1hdC1vcHRncm91cCIsZXhwb3J0QXM6Im1hdE9wdGdyb3VwIix0ZW1wbGF0ZTonPHNwYW4gY2xhc3M9Im1hdC1vcHRncm91cC1sYWJlbCIgYXJpYS1oaWRkZW49InRydWUiIFtpZF09Il9sYWJlbElkIj57eyBsYWJlbCB9fSA8bmctY29udGVudD48L25nLWNvbnRlbnQ+PC9zcGFuPlxuPG5nLWNvbnRlbnQgc2VsZWN0PSJtYXQtb3B0aW9uLCBuZy1jb250YWluZXIiPjwvbmctY29udGVudD5cbicsZW5jYXBzdWxhdGlvbjpQby5Ob25lLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2gsaW5wdXRzOlsiZGlzYWJsZWQiXSxob3N0OntjbGFzczoibWF0LW9wdGdyb3VwIiwiW2F0dHIucm9sZV0iOidfaW5lcnQgPyBudWxsIDogImdyb3VwIicsIlthdHRyLmFyaWEtZGlzYWJsZWRdIjoiX2luZXJ0ID8gbnVsbCA6IGRpc2FibGVkLnRvU3RyaW5nKCkiLCJbYXR0ci5hcmlhLWxhYmVsbGVkYnldIjoiX2luZXJ0ID8gbnVsbCA6IF9sYWJlbElkIiwiW2NsYXNzLm1hdC1vcHRncm91cC1kaXNhYmxlZF0iOiJkaXNhYmxlZCJ9LHByb3ZpZGVyczpbe3Byb3ZpZGU6X0gsdXNlRXhpc3Rpbmc6Q0h9XSxzdHlsZXM6WyIubWF0LW9wdGdyb3VwLWxhYmVse3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2xpbmUtaGVpZ2h0OjQ4cHg7aGVpZ2h0OjQ4cHg7cGFkZGluZzowIDE2cHg7dGV4dC1hbGlnbjpsZWZ0O3RleHQtZGVjb3JhdGlvbjpub25lO21heC13aWR0aDoxMDAlOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6ZGVmYXVsdH0ubWF0LW9wdGdyb3VwLWxhYmVsW2Rpc2FibGVkXXtjdXJzb3I6ZGVmYXVsdH1bZGlyPXJ0bF0gLm1hdC1vcHRncm91cC1sYWJlbHt0ZXh0LWFsaWduOnJpZ2h0fS5tYXQtb3B0Z3JvdXAtbGFiZWwgLm1hdC1pY29ue21hcmdpbi1yaWdodDoxNnB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0ubWF0LW9wdGdyb3VwLWxhYmVsIC5tYXQtaWNvbiBzdmd7dmVydGljYWwtYWxpZ246dG9wfVtkaXI9cnRsXSAubWF0LW9wdGdyb3VwLWxhYmVsIC5tYXQtaWNvbnttYXJnaW4tbGVmdDoxNnB4O21hcmdpbi1yaWdodDowfVxuIl19XX1dLG51bGwsbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpsZXQgdkg9MDtjbGFzcyB4SHtjb25zdHJ1Y3Rvcih0LGU9ITEpe3RoaXMuc291cmNlPXQsdGhpcy5pc1VzZXJJbnB1dD1lfX1jbGFzcyBPSHtjb25zdHJ1Y3Rvcih0LGUsbixvKXt0aGlzLl9lbGVtZW50PXQsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9ZSx0aGlzLl9wYXJlbnQ9bix0aGlzLmdyb3VwPW8sdGhpcy5fc2VsZWN0ZWQ9ITEsdGhpcy5fYWN0aXZlPSExLHRoaXMuX2Rpc2FibGVkPSExLHRoaXMuX21vc3RSZWNlbnRWaWV3VmFsdWU9IiIsdGhpcy5pZD0ibWF0LW9wdGlvbi0iK3ZIKyssdGhpcy5vblNlbGVjdGlvbkNoYW5nZT1uZXcgQWIsdGhpcy5fc3RhdGVDaGFuZ2VzPW5ldyB4fWdldCBtdWx0aXBsZSgpe3JldHVybiB0aGlzLl9wYXJlbnQmJnRoaXMuX3BhcmVudC5tdWx0aXBsZX1nZXQgc2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5fc2VsZWN0ZWR9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuZ3JvdXAmJnRoaXMuZ3JvdXAuZGlzYWJsZWR8fHRoaXMuX2Rpc2FibGVkfXNldCBkaXNhYmxlZCh0KXt0aGlzLl9kaXNhYmxlZD1ySSh0KX1nZXQgZGlzYWJsZVJpcHBsZSgpe3JldHVybiB0aGlzLl9wYXJlbnQmJnRoaXMuX3BhcmVudC5kaXNhYmxlUmlwcGxlfWdldCBhY3RpdmUoKXtyZXR1cm4gdGhpcy5fYWN0aXZlfWdldCB2aWV3VmFsdWUoKXtyZXR1cm4odGhpcy5fZ2V0SG9zdEVsZW1lbnQoKS50ZXh0Q29udGVudHx8IiIpLnRyaW0oKX1zZWxlY3QoKXt0aGlzLl9zZWxlY3RlZHx8KHRoaXMuX3NlbGVjdGVkPSEwLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRoaXMuX2VtaXRTZWxlY3Rpb25DaGFuZ2VFdmVudCgpKX1kZXNlbGVjdCgpe3RoaXMuX3NlbGVjdGVkJiYodGhpcy5fc2VsZWN0ZWQ9ITEsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCksdGhpcy5fZW1pdFNlbGVjdGlvbkNoYW5nZUV2ZW50KCkpfWZvY3VzKHQsZSl7Y29uc3Qgbj10aGlzLl9nZXRIb3N0RWxlbWVudCgpOyJmdW5jdGlvbiI9PXR5cGVvZiBuLmZvY3VzJiZuLmZvY3VzKGUpfXNldEFjdGl2ZVN0eWxlcygpe3RoaXMuX2FjdGl2ZXx8KHRoaXMuX2FjdGl2ZT0hMCx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9c2V0SW5hY3RpdmVTdHlsZXMoKXt0aGlzLl9hY3RpdmUmJih0aGlzLl9hY3RpdmU9ITEsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfWdldExhYmVsKCl7cmV0dXJuIHRoaXMudmlld1ZhbHVlfV9oYW5kbGVLZXlkb3duKHQpe3Qua2V5Q29kZSE9PXRJJiZ0LmtleUNvZGUhPT1uSXx8YUkodCl8fCh0aGlzLl9zZWxlY3RWaWFJbnRlcmFjdGlvbigpLHQucHJldmVudERlZmF1bHQoKSl9X3NlbGVjdFZpYUludGVyYWN0aW9uKCl7dGhpcy5kaXNhYmxlZHx8KHRoaXMuX3NlbGVjdGVkPSF0aGlzLm11bHRpcGxlfHwhdGhpcy5fc2VsZWN0ZWQsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCksdGhpcy5fZW1pdFNlbGVjdGlvbkNoYW5nZUV2ZW50KCEwKSl9X2dldEFyaWFTZWxlY3RlZCgpe3JldHVybiB0aGlzLnNlbGVjdGVkfHwhdGhpcy5tdWx0aXBsZSYmbnVsbH1fZ2V0VGFiSW5kZXgoKXtyZXR1cm4gdGhpcy5kaXNhYmxlZD8iLTEiOiIwIn1fZ2V0SG9zdEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50fW5nQWZ0ZXJWaWV3Q2hlY2tlZCgpe2lmKHRoaXMuX3NlbGVjdGVkKXtjb25zdCB0PXRoaXMudmlld1ZhbHVlO3QhPT10aGlzLl9tb3N0UmVjZW50Vmlld1ZhbHVlJiYodGhpcy5fbW9zdFJlY2VudFZpZXdWYWx1ZT10LHRoaXMuX3N0YXRlQ2hhbmdlcy5uZXh0KCkpfX1uZ09uRGVzdHJveSgpe3RoaXMuX3N0YXRlQ2hhbmdlcy5jb21wbGV0ZSgpfV9lbWl0U2VsZWN0aW9uQ2hhbmdlRXZlbnQodD0hMSl7dGhpcy5vblNlbGVjdGlvbkNoYW5nZS5lbWl0KG5ldyB4SCh0aGlzLHQpKX19T0guybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fE9IKShNdShjaCksTXUoSGgpLE11KHZvaWQgMCksTXUoeUgpKX0sT0guybVkaXI9Sm8oe3R5cGU6T0gsaW5wdXRzOntpZDoiaWQiLGRpc2FibGVkOiJkaXNhYmxlZCIsdmFsdWU6InZhbHVlIn0sb3V0cHV0czp7b25TZWxlY3Rpb25DaGFuZ2U6Im9uU2VsZWN0aW9uQ2hhbmdlIn19KSxPSC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmNofSx7dHlwZTpIaH0se3R5cGU6dm9pZCAwfSx7dHlwZTp5SH1dLE9ILnByb3BEZWNvcmF0b3JzPXt2YWx1ZTpbe3R5cGU6eV99XSxpZDpbe3R5cGU6eV99XSxkaXNhYmxlZDpbe3R5cGU6eV99XSxvblNlbGVjdGlvbkNoYW5nZTpbe3R5cGU6X199XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihPSCxbe3R5cGU6Z199XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Y2h9LHt0eXBlOkhofSx7dHlwZTp2b2lkIDB9LHt0eXBlOnlIfV19KSx7aWQ6W3t0eXBlOnlffV0sb25TZWxlY3Rpb25DaGFuZ2U6W3t0eXBlOl9ffV0sZGlzYWJsZWQ6W3t0eXBlOnlffV0sdmFsdWU6W3t0eXBlOnlffV19KTtjbGFzcyBQSCBleHRlbmRzIE9Ie2NvbnN0cnVjdG9yKHQsZSxuLG8pe3N1cGVyKHQsZSxuLG8pfX1mdW5jdGlvbiB3SCh0LGUsbil7aWYobi5sZW5ndGgpe2xldCBvPWUudG9BcnJheSgpLGk9bi50b0FycmF5KCksYT0wO2ZvcihsZXQgZT0wO2U8dCsxO2UrKylvW2VdLmdyb3VwJiZvW2VdLmdyb3VwPT09aVthXSYmYSsrO3JldHVybiBhfXJldHVybiAwfWZ1bmN0aW9uIGtIKHQsZSxuLG8pe3JldHVybiB0PG4/dDp0K2U+bitvP01hdGgubWF4KDAsdC1vK2UpOm59Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL1BILsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxQSCkoTXUoY2gpLE11KEhoKSxNdShnSCw4KSxNdShfSCw4KSl9LFBILsm1Y21wPVVvKHt0eXBlOlBILHNlbGVjdG9yczpbWyJtYXQtb3B0aW9uIl1dLGhvc3RBdHRyczpbInJvbGUiLCJvcHRpb24iLDEsIm1hdC1vcHRpb24iLCJtYXQtZm9jdXMtaW5kaWNhdG9yIl0saG9zdFZhcnM6MTIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJk51KCJjbGljayIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5fc2VsZWN0VmlhSW50ZXJhY3Rpb24oKX0pKSgia2V5ZG93biIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4uX2hhbmRsZUtleWRvd24oZSl9KSksMiZlJiYoa2YoImlkIixuLmlkKSxObSgidGFiaW5kZXgiLG4uX2dldFRhYkluZGV4KCkpKCJhcmlhLXNlbGVjdGVkIixuLl9nZXRBcmlhU2VsZWN0ZWQoKSkoImFyaWEtZGlzYWJsZWQiLG4uZGlzYWJsZWQudG9TdHJpbmcoKSksYWYoIm1hdC1zZWxlY3RlZCIsbi5zZWxlY3RlZCkoIm1hdC1vcHRpb24tbXVsdGlwbGUiLG4ubXVsdGlwbGUpKCJtYXQtYWN0aXZlIixuLmFjdGl2ZSkoIm1hdC1vcHRpb24tZGlzYWJsZWQiLG4uZGlzYWJsZWQpKX0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXSxmZWF0dXJlczpbZ21dLG5nQ29udGVudFNlbGVjdG9yczpbIioiXSxkZWNsczo1LHZhcnM6NCxjb25zdHM6W1siY2xhc3MiLCJtYXQtb3B0aW9uLXBzZXVkby1jaGVja2JveCIsMywic3RhdGUiLCJkaXNhYmxlZCIsNCwibmdJZiJdLFsxLCJtYXQtb3B0aW9uLXRleHQiXSxbImNsYXNzIiwiY2RrLXZpc3VhbGx5LWhpZGRlbiIsNCwibmdJZiJdLFsibWF0LXJpcHBsZSIsIiIsMSwibWF0LW9wdGlvbi1yaXBwbGUiLDMsIm1hdFJpcHBsZVRyaWdnZXIiLCJtYXRSaXBwbGVEaXNhYmxlZCJdLFsxLCJtYXQtb3B0aW9uLXBzZXVkby1jaGVja2JveCIsMywic3RhdGUiLCJkaXNhYmxlZCJdLFsxLCJjZGstdmlzdWFsbHktaGlkZGVuIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihWdSgpLFdtKDAsd3osMSwyLCJtYXQtcHNldWRvLWNoZWNrYm94IiwwKSxPdSgxLCJzcGFuIiwxKSxqdSgyKSxQdSgpLFdtKDMsa3osMiwxLCJzcGFuIiwyKSx3dSg0LCJkaXYiLDMpKSwyJmUmJih2dSgibmdJZiIsbi5tdWx0aXBsZSksSmMoMyksdnUoIm5nSWYiLG4uZ3JvdXAmJm4uZ3JvdXAuX2luZXJ0KSxKYygxKSx2dSgibWF0UmlwcGxlVHJpZ2dlciIsbi5fZ2V0SG9zdEVsZW1lbnQoKSkoIm1hdFJpcHBsZURpc2FibGVkIixuLmRpc2FibGVkfHxuLmRpc2FibGVSaXBwbGUpKX0sZGlyZWN0aXZlczpbYXYscEgsdUhdLHN0eWxlczpbIi5tYXQtb3B0aW9ue3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2xpbmUtaGVpZ2h0OjQ4cHg7aGVpZ2h0OjQ4cHg7cGFkZGluZzowIDE2cHg7dGV4dC1hbGlnbjpsZWZ0O3RleHQtZGVjb3JhdGlvbjpub25lO21heC13aWR0aDoxMDAlO3Bvc2l0aW9uOnJlbGF0aXZlO2N1cnNvcjpwb2ludGVyO291dGxpbmU6bm9uZTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O21heC13aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDthbGlnbi1pdGVtczpjZW50ZXI7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50fS5tYXQtb3B0aW9uW2Rpc2FibGVkXXtjdXJzb3I6ZGVmYXVsdH1bZGlyPXJ0bF0gLm1hdC1vcHRpb257dGV4dC1hbGlnbjpyaWdodH0ubWF0LW9wdGlvbiAubWF0LWljb257bWFyZ2luLXJpZ2h0OjE2cHg7dmVydGljYWwtYWxpZ246bWlkZGxlfS5tYXQtb3B0aW9uIC5tYXQtaWNvbiBzdmd7dmVydGljYWwtYWxpZ246dG9wfVtkaXI9cnRsXSAubWF0LW9wdGlvbiAubWF0LWljb257bWFyZ2luLWxlZnQ6MTZweDttYXJnaW4tcmlnaHQ6MH0ubWF0LW9wdGlvblthcmlhLWRpc2FibGVkPXRydWVdey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6ZGVmYXVsdH0ubWF0LW9wdGdyb3VwIC5tYXQtb3B0aW9uOm5vdCgubWF0LW9wdGlvbi1tdWx0aXBsZSl7cGFkZGluZy1sZWZ0OjMycHh9W2Rpcj1ydGxdIC5tYXQtb3B0Z3JvdXAgLm1hdC1vcHRpb246bm90KC5tYXQtb3B0aW9uLW11bHRpcGxlKXtwYWRkaW5nLWxlZnQ6MTZweDtwYWRkaW5nLXJpZ2h0OjMycHh9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LW9wdGlvbnttYXJnaW46MCAxcHh9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LW9wdGlvbi5tYXQtYWN0aXZle2JvcmRlcjpzb2xpZCAxcHggY3VycmVudENvbG9yO21hcmdpbjowfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1vcHRpb25bYXJpYS1kaXNhYmxlZD10cnVlXXtvcGFjaXR5Oi41fS5tYXQtb3B0aW9uLXRleHR7ZGlzcGxheTppbmxpbmUtYmxvY2s7ZmxleC1ncm93OjE7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9Lm1hdC1vcHRpb24gLm1hdC1vcHRpb24tcmlwcGxle3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmV9Lm1hdC1vcHRpb24tcHNldWRvLWNoZWNrYm94e21hcmdpbi1yaWdodDo4cHh9W2Rpcj1ydGxdIC5tYXQtb3B0aW9uLXBzZXVkby1jaGVja2JveHttYXJnaW4tbGVmdDo4cHg7bWFyZ2luLXJpZ2h0OjB9XG4iXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxQSC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmNofSx7dHlwZTpIaH0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltnSF19XX0se3R5cGU6Q0gsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W19IXX1dfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihQSCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJtYXQtb3B0aW9uIixleHBvcnRBczoibWF0T3B0aW9uIixob3N0Ontyb2xlOiJvcHRpb24iLCJbYXR0ci50YWJpbmRleF0iOiJfZ2V0VGFiSW5kZXgoKSIsIltjbGFzcy5tYXQtc2VsZWN0ZWRdIjoic2VsZWN0ZWQiLCJbY2xhc3MubWF0LW9wdGlvbi1tdWx0aXBsZV0iOiJtdWx0aXBsZSIsIltjbGFzcy5tYXQtYWN0aXZlXSI6ImFjdGl2ZSIsIltpZF0iOiJpZCIsIlthdHRyLmFyaWEtc2VsZWN0ZWRdIjoiX2dldEFyaWFTZWxlY3RlZCgpIiwiW2F0dHIuYXJpYS1kaXNhYmxlZF0iOiJkaXNhYmxlZC50b1N0cmluZygpIiwiW2NsYXNzLm1hdC1vcHRpb24tZGlzYWJsZWRdIjoiZGlzYWJsZWQiLCIoY2xpY2spIjoiX3NlbGVjdFZpYUludGVyYWN0aW9uKCkiLCIoa2V5ZG93bikiOiJfaGFuZGxlS2V5ZG93bigkZXZlbnQpIixjbGFzczoibWF0LW9wdGlvbiBtYXQtZm9jdXMtaW5kaWNhdG9yIn0sdGVtcGxhdGU6JzxtYXQtcHNldWRvLWNoZWNrYm94ICpuZ0lmPSJtdWx0aXBsZSIgY2xhc3M9Im1hdC1vcHRpb24tcHNldWRvLWNoZWNrYm94IlxuICAgIFtzdGF0ZV09InNlbGVjdGVkID8gXCdjaGVja2VkXCcgOiBcJ3VuY2hlY2tlZFwnIiBbZGlzYWJsZWRdPSJkaXNhYmxlZCI+PC9tYXQtcHNldWRvLWNoZWNrYm94PlxuXG48c3BhbiBjbGFzcz0ibWF0LW9wdGlvbi10ZXh0Ij48bmctY29udGVudD48L25nLWNvbnRlbnQ+PC9zcGFuPlxuXG5ceDNjIS0tIFNlZSBhMTF5IG5vdGVzIGluc2lkZSBvcHRncm91cC50cyBmb3IgY29udGV4dCBiZWhpbmQgdGhpcyBlbGVtZW50LiAtLVx4M2VcbjxzcGFuIGNsYXNzPSJjZGstdmlzdWFsbHktaGlkZGVuIiAqbmdJZj0iZ3JvdXAgJiYgZ3JvdXAuX2luZXJ0Ij4oe3sgZ3JvdXAubGFiZWwgfX0pPC9zcGFuPlxuXG48ZGl2IGNsYXNzPSJtYXQtb3B0aW9uLXJpcHBsZSIgbWF0LXJpcHBsZVxuICAgICBbbWF0UmlwcGxlVHJpZ2dlcl09Il9nZXRIb3N0RWxlbWVudCgpIlxuICAgICBbbWF0UmlwcGxlRGlzYWJsZWRdPSJkaXNhYmxlZCB8fCBkaXNhYmxlUmlwcGxlIj5cbjwvZGl2PlxuJyxlbmNhcHN1bGF0aW9uOlBvLk5vbmUsY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaCxzdHlsZXM6WyIubWF0LW9wdGlvbnt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztsaW5lLWhlaWdodDo0OHB4O2hlaWdodDo0OHB4O3BhZGRpbmc6MCAxNnB4O3RleHQtYWxpZ246bGVmdDt0ZXh0LWRlY29yYXRpb246bm9uZTttYXgtd2lkdGg6MTAwJTtwb3NpdGlvbjpyZWxhdGl2ZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOm5vbmU7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdzttYXgtd2lkdGg6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3g7YWxpZ24taXRlbXM6Y2VudGVyOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudH0ubWF0LW9wdGlvbltkaXNhYmxlZF17Y3Vyc29yOmRlZmF1bHR9W2Rpcj1ydGxdIC5tYXQtb3B0aW9ue3RleHQtYWxpZ246cmlnaHR9Lm1hdC1vcHRpb24gLm1hdC1pY29ue21hcmdpbi1yaWdodDoxNnB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0ubWF0LW9wdGlvbiAubWF0LWljb24gc3Zne3ZlcnRpY2FsLWFsaWduOnRvcH1bZGlyPXJ0bF0gLm1hdC1vcHRpb24gLm1hdC1pY29ue21hcmdpbi1sZWZ0OjE2cHg7bWFyZ2luLXJpZ2h0OjB9Lm1hdC1vcHRpb25bYXJpYS1kaXNhYmxlZD10cnVlXXstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1vcHRncm91cCAubWF0LW9wdGlvbjpub3QoLm1hdC1vcHRpb24tbXVsdGlwbGUpe3BhZGRpbmctbGVmdDozMnB4fVtkaXI9cnRsXSAubWF0LW9wdGdyb3VwIC5tYXQtb3B0aW9uOm5vdCgubWF0LW9wdGlvbi1tdWx0aXBsZSl7cGFkZGluZy1sZWZ0OjE2cHg7cGFkZGluZy1yaWdodDozMnB4fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1vcHRpb257bWFyZ2luOjAgMXB4fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1vcHRpb24ubWF0LWFjdGl2ZXtib3JkZXI6c29saWQgMXB4IGN1cnJlbnRDb2xvcjttYXJnaW46MH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtb3B0aW9uW2FyaWEtZGlzYWJsZWQ9dHJ1ZV17b3BhY2l0eTouNX0ubWF0LW9wdGlvbi10ZXh0e2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZsZXgtZ3JvdzoxO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS5tYXQtb3B0aW9uIC5tYXQtb3B0aW9uLXJpcHBsZXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czpub25lfS5tYXQtb3B0aW9uLXBzZXVkby1jaGVja2JveHttYXJnaW4tcmlnaHQ6OHB4fVtkaXI9cnRsXSAubWF0LW9wdGlvbi1wc2V1ZG8tY2hlY2tib3h7bWFyZ2luLWxlZnQ6OHB4O21hcmdpbi1yaWdodDowfVxuIl19XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpjaH0se3R5cGU6SGh9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbZ0hdfV19LHt0eXBlOkNILGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltfSF19XX1dfSksbnVsbCk7Y2xhc3MgU0h7fVNILsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxTSCl9LFNILsm1bW9kPVpvKHt0eXBlOlNIfSksU0guybVpbmo9Y28oe2ltcG9ydHM6W1ttSCxCdixUeixmSF1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhTSCx7ZGVjbGFyYXRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuW1BILENIXX0saW1wb3J0czpmdW5jdGlvbigpe3JldHVyblttSCxCdixUeixmSF19LGV4cG9ydHM6ZnVuY3Rpb24oKXtyZXR1cm5bUEgsQ0hdfX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoU0gsW3t0eXBlOmtfLGFyZ3M6W3tpbXBvcnRzOlttSCxCdixUeixmSF0sZXhwb3J0czpbUEgsQ0hdLGRlY2xhcmF0aW9uczpbUEgsQ0hdfV19XSxudWxsLG51bGwpO2NvbnN0IERIPVsibWF0LWJ1dHRvbiIsIiJdLEVIPVsiKiJdLEFIPSIubWF0LWJ1dHRvbiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5OjB9Lm1hdC1idXR0b246aG92ZXI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b246aG92ZXI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6LjA0fUBtZWRpYShob3Zlcjogbm9uZSl7Lm1hdC1idXR0b246aG92ZXI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b246aG92ZXI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6MH19Lm1hdC1idXR0b24sLm1hdC1pY29uLWJ1dHRvbiwubWF0LXN0cm9rZWQtYnV0dG9uLC5tYXQtZmxhdC1idXR0b257Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MDttaW4td2lkdGg6NjRweDtsaW5lLWhlaWdodDozNnB4O3BhZGRpbmc6MCAxNnB4O2JvcmRlci1yYWRpdXM6NHB4O292ZXJmbG93OnZpc2libGV9Lm1hdC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1pY29uLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LXN0cm9rZWQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtZmxhdC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWljb24tYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmxhdC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdH0ubWF0LWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWljb24tYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtZmxhdC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWZsYXQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi4xMn0ubWF0LWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LWljb24tYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtc3Ryb2tlZC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1mbGF0LWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LXJhaXNlZC1idXR0b257Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MDttaW4td2lkdGg6NjRweDtsaW5lLWhlaWdodDozNnB4O3BhZGRpbmc6MCAxNnB4O2JvcmRlci1yYWRpdXM6NHB4O292ZXJmbG93OnZpc2libGU7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsIDAsIDApO3RyYW5zaXRpb246YmFja2dyb3VuZCA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxib3gtc2hhZG93IDI4MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSl9Lm1hdC1yYWlzZWQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5tYXQtcmFpc2VkLWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtcmFpc2VkLWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouMTJ9Lm1hdC1yYWlzZWQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZS5tYXQtcmFpc2VkLWJ1dHRvbnt0cmFuc2l0aW9uOm5vbmU7YW5pbWF0aW9uOm5vbmV9Lm1hdC1zdHJva2VkLWJ1dHRvbntib3JkZXI6MXB4IHNvbGlkIGN1cnJlbnRDb2xvcjtwYWRkaW5nOjAgMTVweDtsaW5lLWhlaWdodDozNHB4fS5tYXQtc3Ryb2tlZC1idXR0b24gLm1hdC1idXR0b24tcmlwcGxlLm1hdC1yaXBwbGUsLm1hdC1zdHJva2VkLWJ1dHRvbiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e3RvcDotMXB4O2xlZnQ6LTFweDtyaWdodDotMXB4O2JvdHRvbTotMXB4fS5tYXQtZmFie2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb3NpdGlvbjpyZWxhdGl2ZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7Y3Vyc29yOnBvaW50ZXI7b3V0bGluZTpub25lO2JvcmRlcjpub25lOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDtkaXNwbGF5OmlubGluZS1ibG9jazt3aGl0ZS1zcGFjZTpub3dyYXA7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7dGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luOjA7bWluLXdpZHRoOjY0cHg7bGluZS1oZWlnaHQ6MzZweDtwYWRkaW5nOjAgMTZweDtib3JkZXItcmFkaXVzOjRweDtvdmVyZmxvdzp2aXNpYmxlO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLCAwLCAwKTt0cmFuc2l0aW9uOmJhY2tncm91bmQgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSksYm94LXNoYWRvdyAyODBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpO21pbi13aWR0aDowO2JvcmRlci1yYWRpdXM6NTAlO3dpZHRoOjU2cHg7aGVpZ2h0OjU2cHg7cGFkZGluZzowO2ZsZXgtc2hyaW5rOjB9Lm1hdC1mYWI6Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1mYWIubWF0LWJ1dHRvbi1kaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdH0ubWF0LWZhYi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtZmFiLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi4xMn0ubWF0LWZhYjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0uX21hdC1hbmltYXRpb24tbm9vcGFibGUubWF0LWZhYnt0cmFuc2l0aW9uOm5vbmU7YW5pbWF0aW9uOm5vbmV9Lm1hdC1mYWIgLm1hdC1idXR0b24td3JhcHBlcntwYWRkaW5nOjE2cHggMDtkaXNwbGF5OmlubGluZS1ibG9jaztsaW5lLWhlaWdodDoyNHB4fS5tYXQtbWluaS1mYWJ7Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MDttaW4td2lkdGg6NjRweDtsaW5lLWhlaWdodDozNnB4O3BhZGRpbmc6MCAxNnB4O2JvcmRlci1yYWRpdXM6NHB4O292ZXJmbG93OnZpc2libGU7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsIDAsIDApO3RyYW5zaXRpb246YmFja2dyb3VuZCA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxib3gtc2hhZG93IDI4MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7bWluLXdpZHRoOjA7Ym9yZGVyLXJhZGl1czo1MCU7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDtwYWRkaW5nOjA7ZmxleC1zaHJpbms6MH0ubWF0LW1pbmktZmFiOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtbWluaS1mYWIubWF0LWJ1dHRvbi1kaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdH0ubWF0LW1pbmktZmFiLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1taW5pLWZhYi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouMTJ9Lm1hdC1taW5pLWZhYjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0uX21hdC1hbmltYXRpb24tbm9vcGFibGUubWF0LW1pbmktZmFie3RyYW5zaXRpb246bm9uZTthbmltYXRpb246bm9uZX0ubWF0LW1pbmktZmFiIC5tYXQtYnV0dG9uLXdyYXBwZXJ7cGFkZGluZzo4cHggMDtkaXNwbGF5OmlubGluZS1ibG9jaztsaW5lLWhlaWdodDoyNHB4fS5tYXQtaWNvbi1idXR0b257cGFkZGluZzowO21pbi13aWR0aDowO3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7ZmxleC1zaHJpbms6MDtsaW5lLWhlaWdodDo0MHB4O2JvcmRlci1yYWRpdXM6NTAlfS5tYXQtaWNvbi1idXR0b24gaSwubWF0LWljb24tYnV0dG9uIC5tYXQtaWNvbntsaW5lLWhlaWdodDoyNHB4fS5tYXQtYnV0dG9uLXJpcHBsZS5tYXQtcmlwcGxlLC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6bm9uZTtib3JkZXItcmFkaXVzOmluaGVyaXR9Lm1hdC1idXR0b24tcmlwcGxlLm1hdC1yaXBwbGU6bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5OjA7dHJhbnNpdGlvbjpvcGFjaXR5IDIwMG1zIGN1YmljLWJlemllcigwLjM1LCAwLCAwLjI1LCAxKSxiYWNrZ3JvdW5kLWNvbG9yIDIwMG1zIGN1YmljLWJlemllcigwLjM1LCAwLCAwLjI1LCAxKX0uX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1idXR0b24tcmlwcGxlLXJvdW5ke2JvcmRlci1yYWRpdXM6NTAlO3otaW5kZXg6MX0ubWF0LWJ1dHRvbiAubWF0LWJ1dHRvbi13cmFwcGVyPiosLm1hdC1mbGF0LWJ1dHRvbiAubWF0LWJ1dHRvbi13cmFwcGVyPiosLm1hdC1zdHJva2VkLWJ1dHRvbiAubWF0LWJ1dHRvbi13cmFwcGVyPiosLm1hdC1yYWlzZWQtYnV0dG9uIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LWljb24tYnV0dG9uIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LWZhYiAubWF0LWJ1dHRvbi13cmFwcGVyPiosLm1hdC1taW5pLWZhYiAubWF0LWJ1dHRvbi13cmFwcGVyPip7dmVydGljYWwtYWxpZ246bWlkZGxlfS5tYXQtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5KSAubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbi1idXR0b24sLm1hdC1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kpIC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29uLWJ1dHRvbntkaXNwbGF5OmlubGluZS1mbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2ZvbnQtc2l6ZTppbmhlcml0O3dpZHRoOjIuNWVtO2hlaWdodDoyLjVlbX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYnV0dG9uLC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mbGF0LWJ1dHRvbiwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtcmFpc2VkLWJ1dHRvbiwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtaWNvbi1idXR0b24sLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZhYiwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtbWluaS1mYWJ7b3V0bGluZTpzb2xpZCAxcHh9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWJ1dHRvbi1iYXNlLmNkay1rZXlib2FyZC1mb2N1c2VkLC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1idXR0b24tYmFzZS5jZGstcHJvZ3JhbS1mb2N1c2Vke291dGxpbmU6c29saWQgM3B4fVxuIixSSD1bIm1hdC1idXR0b24iLCJtYXQtZmxhdC1idXR0b24iLCJtYXQtaWNvbi1idXR0b24iLCJtYXQtcmFpc2VkLWJ1dHRvbiIsIm1hdC1zdHJva2VkLWJ1dHRvbiIsIm1hdC1taW5pLWZhYiIsIm1hdC1mYWIiXSxUSD1JeihOeih6eihjbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLl9lbGVtZW50UmVmPXR9fSkpKTtjbGFzcyBOSCBleHRlbmRzIFRIe2NvbnN0cnVjdG9yKHQsZSxuKXtzdXBlcih0KSx0aGlzLl9mb2N1c01vbml0b3I9ZSx0aGlzLl9hbmltYXRpb25Nb2RlPW4sdGhpcy5pc1JvdW5kQnV0dG9uPXRoaXMuX2hhc0hvc3RBdHRyaWJ1dGVzKCJtYXQtZmFiIiwibWF0LW1pbmktZmFiIiksdGhpcy5pc0ljb25CdXR0b249dGhpcy5faGFzSG9zdEF0dHJpYnV0ZXMoIm1hdC1pY29uLWJ1dHRvbiIpO2Zvcihjb25zdCB0IG9mIFJIKXRoaXMuX2hhc0hvc3RBdHRyaWJ1dGVzKHQpJiZ0aGlzLl9nZXRIb3N0RWxlbWVudCgpLmNsYXNzTGlzdC5hZGQodCk7dC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoIm1hdC1idXR0b24tYmFzZSIpLHRoaXMuaXNSb3VuZEJ1dHRvbiYmKHRoaXMuY29sb3I9ImFjY2VudCIpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX2ZvY3VzTW9uaXRvci5tb25pdG9yKHRoaXMuX2VsZW1lbnRSZWYsITApfW5nT25EZXN0cm95KCl7dGhpcy5fZm9jdXNNb25pdG9yLnN0b3BNb25pdG9yaW5nKHRoaXMuX2VsZW1lbnRSZWYpfWZvY3VzKHQsZSl7dD90aGlzLl9mb2N1c01vbml0b3IuZm9jdXNWaWEodGhpcy5fZ2V0SG9zdEVsZW1lbnQoKSx0LGUpOnRoaXMuX2dldEhvc3RFbGVtZW50KCkuZm9jdXMoZSl9X2dldEhvc3RFbGVtZW50KCl7cmV0dXJuIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudH1faXNSaXBwbGVEaXNhYmxlZCgpe3JldHVybiB0aGlzLmRpc2FibGVSaXBwbGV8fHRoaXMuZGlzYWJsZWR9X2hhc0hvc3RBdHRyaWJ1dGVzKC4uLnQpe3JldHVybiB0LnNvbWUoKHQ9PnRoaXMuX2dldEhvc3RFbGVtZW50KCkuaGFzQXR0cmlidXRlKHQpKSl9fU5ILsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxOSCkoTXUoY2gpLE11KHB6KSxNdShOdyw4KSl9LE5ILsm1Y21wPVVvKHt0eXBlOk5ILHNlbGVjdG9yczpbWyJidXR0b24iLCJtYXQtYnV0dG9uIiwiIl0sWyJidXR0b24iLCJtYXQtcmFpc2VkLWJ1dHRvbiIsIiJdLFsiYnV0dG9uIiwibWF0LWljb24tYnV0dG9uIiwiIl0sWyJidXR0b24iLCJtYXQtZmFiIiwiIl0sWyJidXR0b24iLCJtYXQtbWluaS1mYWIiLCIiXSxbImJ1dHRvbiIsIm1hdC1zdHJva2VkLWJ1dHRvbiIsIiJdLFsiYnV0dG9uIiwibWF0LWZsYXQtYnV0dG9uIiwiIl1dLHZpZXdRdWVyeTpmdW5jdGlvbiB0KGUsbil7aWYoMSZlJiZXYihwSCwxKSwyJmUpe2xldCB0O1ViKHQ9WWIoKSkmJihuLnJpcHBsZT10LmZpcnN0KX19LGhvc3RBdHRyczpbMSwibWF0LWZvY3VzLWluZGljYXRvciJdLGhvc3RWYXJzOjUsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsyJmUmJihObSgiZGlzYWJsZWQiLG4uZGlzYWJsZWR8fG51bGwpLGFmKCJfbWF0LWFuaW1hdGlvbi1ub29wYWJsZSIsIk5vb3BBbmltYXRpb25zIj09PW4uX2FuaW1hdGlvbk1vZGUpKCJtYXQtYnV0dG9uLWRpc2FibGVkIixuLmRpc2FibGVkKSl9LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIixkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIixjb2xvcjoiY29sb3IifSxleHBvcnRBczpbIm1hdEJ1dHRvbiJdLGZlYXR1cmVzOltnbV0sYXR0cnM6REgsbmdDb250ZW50U2VsZWN0b3JzOkVILGRlY2xzOjQsdmFyczo1LGNvbnN0czpbWzEsIm1hdC1idXR0b24td3JhcHBlciJdLFsibWF0UmlwcGxlIiwiIiwxLCJtYXQtYnV0dG9uLXJpcHBsZSIsMywibWF0UmlwcGxlRGlzYWJsZWQiLCJtYXRSaXBwbGVDZW50ZXJlZCIsIm1hdFJpcHBsZVRyaWdnZXIiXSxbMSwibWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5Il1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihWdSgpLE91KDAsInNwYW4iLDApLGp1KDEpLFB1KCksd3UoMiwic3BhbiIsMSksd3UoMywic3BhbiIsMikpLDImZSYmKEpjKDIpLGFmKCJtYXQtYnV0dG9uLXJpcHBsZS1yb3VuZCIsbi5pc1JvdW5kQnV0dG9ufHxuLmlzSWNvbkJ1dHRvbiksdnUoIm1hdFJpcHBsZURpc2FibGVkIixuLl9pc1JpcHBsZURpc2FibGVkKCkpKCJtYXRSaXBwbGVDZW50ZXJlZCIsbi5pc0ljb25CdXR0b24pKCJtYXRSaXBwbGVUcmlnZ2VyIixuLl9nZXRIb3N0RWxlbWVudCgpKSl9LGRpcmVjdGl2ZXM6W3BIXSxzdHlsZXM6W0FIXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxOSC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmNofSx7dHlwZTpwen0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltOd119XX1dLE5ILnByb3BEZWNvcmF0b3JzPXtyaXBwbGU6W3t0eXBlOkZyLGFyZ3M6W3BIXX1dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKE5ILFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6ImJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1pY29uLWJ1dHRvbl0sXG4gICAgICAgICAgICAgYnV0dG9uW21hdC1mYWJdLCBidXR0b25bbWF0LW1pbmktZmFiXSwgYnV0dG9uW21hdC1zdHJva2VkLWJ1dHRvbl0sXG4gICAgICAgICAgICAgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0iLGV4cG9ydEFzOiJtYXRCdXR0b24iLGhvc3Q6eyJbYXR0ci5kaXNhYmxlZF0iOiJkaXNhYmxlZCB8fCBudWxsIiwiW2NsYXNzLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlXSI6J19hbmltYXRpb25Nb2RlID09PSAiTm9vcEFuaW1hdGlvbnMiJywiW2NsYXNzLm1hdC1idXR0b24tZGlzYWJsZWRdIjoiZGlzYWJsZWQiLGNsYXNzOiJtYXQtZm9jdXMtaW5kaWNhdG9yIn0sdGVtcGxhdGU6JzxzcGFuIGNsYXNzPSJtYXQtYnV0dG9uLXdyYXBwZXIiPjxuZy1jb250ZW50PjwvbmctY29udGVudD48L3NwYW4+XG48c3BhbiBtYXRSaXBwbGUgY2xhc3M9Im1hdC1idXR0b24tcmlwcGxlIlxuICAgICAgW2NsYXNzLm1hdC1idXR0b24tcmlwcGxlLXJvdW5kXT0iaXNSb3VuZEJ1dHRvbiB8fCBpc0ljb25CdXR0b24iXG4gICAgICBbbWF0UmlwcGxlRGlzYWJsZWRdPSJfaXNSaXBwbGVEaXNhYmxlZCgpIlxuICAgICAgW21hdFJpcHBsZUNlbnRlcmVkXT0iaXNJY29uQnV0dG9uIlxuICAgICAgW21hdFJpcHBsZVRyaWdnZXJdPSJfZ2V0SG9zdEVsZW1lbnQoKSI+PC9zcGFuPlxuPHNwYW4gY2xhc3M9Im1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSI+PC9zcGFuPlxuJyxpbnB1dHM6WyJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJjb2xvciJdLGVuY2Fwc3VsYXRpb246UG8uTm9uZSxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNoLHN0eWxlczpbIi5tYXQtYnV0dG9uIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6MH0ubWF0LWJ1dHRvbjpob3Zlcjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbjpob3Zlcjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouMDR9QG1lZGlhKGhvdmVyOiBub25lKXsubWF0LWJ1dHRvbjpob3Zlcjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbjpob3Zlcjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTowfX0ubWF0LWJ1dHRvbiwubWF0LWljb24tYnV0dG9uLC5tYXQtc3Ryb2tlZC1idXR0b24sLm1hdC1mbGF0LWJ1dHRvbntib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpwb2ludGVyO291dGxpbmU6bm9uZTtib3JkZXI6bm9uZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjowO21pbi13aWR0aDo2NHB4O2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7Ym9yZGVyLXJhZGl1czo0cHg7b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LWljb24tYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtc3Ryb2tlZC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1mbGF0LWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtaWNvbi1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5tYXQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWljb24tYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXN0cm9rZWQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1mbGF0LWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtZmxhdC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6LjEyfS5tYXQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtaWNvbi1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1zdHJva2VkLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LWZsYXQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtcmFpc2VkLWJ1dHRvbntib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpwb2ludGVyO291dGxpbmU6bm9uZTtib3JkZXI6bm9uZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjowO21pbi13aWR0aDo2NHB4O2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7Ym9yZGVyLXJhZGl1czo0cHg7b3ZlcmZsb3c6dmlzaWJsZTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJveC1zaGFkb3cgMjgwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKX0ubWF0LXJhaXNlZC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1yYWlzZWQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1yYWlzZWQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi4xMn0ubWF0LXJhaXNlZC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlLm1hdC1yYWlzZWQtYnV0dG9ue3RyYW5zaXRpb246bm9uZTthbmltYXRpb246bm9uZX0ubWF0LXN0cm9rZWQtYnV0dG9ue2JvcmRlcjoxcHggc29saWQgY3VycmVudENvbG9yO3BhZGRpbmc6MCAxNXB4O2xpbmUtaGVpZ2h0OjM0cHh9Lm1hdC1zdHJva2VkLWJ1dHRvbiAubWF0LWJ1dHRvbi1yaXBwbGUubWF0LXJpcHBsZSwubWF0LXN0cm9rZWQtYnV0dG9uIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7dG9wOi0xcHg7bGVmdDotMXB4O3JpZ2h0Oi0xcHg7Ym90dG9tOi0xcHh9Lm1hdC1mYWJ7Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MDttaW4td2lkdGg6NjRweDtsaW5lLWhlaWdodDozNnB4O3BhZGRpbmc6MCAxNnB4O2JvcmRlci1yYWRpdXM6NHB4O292ZXJmbG93OnZpc2libGU7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsIDAsIDApO3RyYW5zaXRpb246YmFja2dyb3VuZCA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxib3gtc2hhZG93IDI4MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7bWluLXdpZHRoOjA7Ym9yZGVyLXJhZGl1czo1MCU7d2lkdGg6NTZweDtoZWlnaHQ6NTZweDtwYWRkaW5nOjA7ZmxleC1zaHJpbms6MH0ubWF0LWZhYjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LWZhYi5tYXQtYnV0dG9uLWRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5tYXQtZmFiLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1mYWIuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6LjEyfS5tYXQtZmFiOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZS5tYXQtZmFie3RyYW5zaXRpb246bm9uZTthbmltYXRpb246bm9uZX0ubWF0LWZhYiAubWF0LWJ1dHRvbi13cmFwcGVye3BhZGRpbmc6MTZweCAwO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1taW5pLWZhYntib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpwb2ludGVyO291dGxpbmU6bm9uZTtib3JkZXI6bm9uZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjowO21pbi13aWR0aDo2NHB4O2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7Ym9yZGVyLXJhZGl1czo0cHg7b3ZlcmZsb3c6dmlzaWJsZTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJveC1zaGFkb3cgMjgwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTttaW4td2lkdGg6MDtib3JkZXItcmFkaXVzOjUwJTt3aWR0aDo0MHB4O2hlaWdodDo0MHB4O3BhZGRpbmc6MDtmbGV4LXNocmluazowfS5tYXQtbWluaS1mYWI6Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1taW5pLWZhYi5tYXQtYnV0dG9uLWRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5tYXQtbWluaS1mYWIuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LW1pbmktZmFiLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi4xMn0ubWF0LW1pbmktZmFiOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZS5tYXQtbWluaS1mYWJ7dHJhbnNpdGlvbjpub25lO2FuaW1hdGlvbjpub25lfS5tYXQtbWluaS1mYWIgLm1hdC1idXR0b24td3JhcHBlcntwYWRkaW5nOjhweCAwO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1pY29uLWJ1dHRvbntwYWRkaW5nOjA7bWluLXdpZHRoOjA7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDtmbGV4LXNocmluazowO2xpbmUtaGVpZ2h0OjQwcHg7Ym9yZGVyLXJhZGl1czo1MCV9Lm1hdC1pY29uLWJ1dHRvbiBpLC5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29ue2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1idXR0b24tcmlwcGxlLm1hdC1yaXBwbGUsLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czpub25lO2JvcmRlci1yYWRpdXM6aW5oZXJpdH0ubWF0LWJ1dHRvbi1yaXBwbGUubWF0LXJpcHBsZTpub3QoOmVtcHR5KXt0cmFuc2Zvcm06dHJhbnNsYXRlWigwKX0ubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgMjAwbXMgY3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuMjUsIDEpLGJhY2tncm91bmQtY29sb3IgMjAwbXMgY3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuMjUsIDEpfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e3RyYW5zaXRpb246bm9uZX0ubWF0LWJ1dHRvbi1yaXBwbGUtcm91bmR7Ym9yZGVyLXJhZGl1czo1MCU7ei1pbmRleDoxfS5tYXQtYnV0dG9uIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LWZsYXQtYnV0dG9uIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LXN0cm9rZWQtYnV0dG9uIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LXJhaXNlZC1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtaWNvbi1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtZmFiIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LW1pbmktZmFiIC5tYXQtYnV0dG9uLXdyYXBwZXI+Knt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Lm1hdC1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kpIC5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLWJ1dHRvbiwubWF0LWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSkgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb24tYnV0dG9ue2Rpc3BsYXk6aW5saW5lLWZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7Zm9udC1zaXplOmluaGVyaXQ7d2lkdGg6Mi41ZW07aGVpZ2h0OjIuNWVtfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1idXR0b24sLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZsYXQtYnV0dG9uLC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1yYWlzZWQtYnV0dG9uLC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1pY29uLWJ1dHRvbiwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtZmFiLC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1taW5pLWZhYntvdXRsaW5lOnNvbGlkIDFweH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYnV0dG9uLWJhc2UuY2RrLWtleWJvYXJkLWZvY3VzZWQsLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWJ1dHRvbi1iYXNlLmNkay1wcm9ncmFtLWZvY3VzZWR7b3V0bGluZTpzb2xpZCAzcHh9XG4iXX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmNofSx7dHlwZTpwen0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltOd119XX1dfSkse3JpcHBsZTpbe3R5cGU6RnIsYXJnczpbcEhdfV19KTtjbGFzcyBJSCBleHRlbmRzIE5Ie2NvbnN0cnVjdG9yKHQsZSxuKXtzdXBlcihlLHQsbil9X2hhbHREaXNhYmxlZEV2ZW50cyh0KXt0aGlzLmRpc2FibGVkJiYodC5wcmV2ZW50RGVmYXVsdCgpLHQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCkpfX1JSC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8SUgpKE11KHB6KSxNdShjaCksTXUoTncsOCkpfSxJSC7JtWNtcD1Vbyh7dHlwZTpJSCxzZWxlY3RvcnM6W1siYSIsIm1hdC1idXR0b24iLCIiXSxbImEiLCJtYXQtcmFpc2VkLWJ1dHRvbiIsIiJdLFsiYSIsIm1hdC1pY29uLWJ1dHRvbiIsIiJdLFsiYSIsIm1hdC1mYWIiLCIiXSxbImEiLCJtYXQtbWluaS1mYWIiLCIiXSxbImEiLCJtYXQtc3Ryb2tlZC1idXR0b24iLCIiXSxbImEiLCJtYXQtZmxhdC1idXR0b24iLCIiXV0saG9zdEF0dHJzOlsxLCJtYXQtZm9jdXMtaW5kaWNhdG9yIl0saG9zdFZhcnM6Nyxob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezEmZSYmTnUoImNsaWNrIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5faGFsdERpc2FibGVkRXZlbnRzKGUpfSkpLDImZSYmKE5tKCJ0YWJpbmRleCIsbi5kaXNhYmxlZD8tMTpuLnRhYkluZGV4fHwwKSgiZGlzYWJsZWQiLG4uZGlzYWJsZWR8fG51bGwpKCJhcmlhLWRpc2FibGVkIixuLmRpc2FibGVkLnRvU3RyaW5nKCkpLGFmKCJfbWF0LWFuaW1hdGlvbi1ub29wYWJsZSIsIk5vb3BBbmltYXRpb25zIj09PW4uX2FuaW1hdGlvbk1vZGUpKCJtYXQtYnV0dG9uLWRpc2FibGVkIixuLmRpc2FibGVkKSl9LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIixkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIixjb2xvcjoiY29sb3IiLHRhYkluZGV4OiJ0YWJJbmRleCJ9LGV4cG9ydEFzOlsibWF0QnV0dG9uIiwibWF0QW5jaG9yIl0sZmVhdHVyZXM6W2dtXSxhdHRyczpESCxuZ0NvbnRlbnRTZWxlY3RvcnM6RUgsZGVjbHM6NCx2YXJzOjUsY29uc3RzOltbMSwibWF0LWJ1dHRvbi13cmFwcGVyIl0sWyJtYXRSaXBwbGUiLCIiLDEsIm1hdC1idXR0b24tcmlwcGxlIiwzLCJtYXRSaXBwbGVEaXNhYmxlZCIsIm1hdFJpcHBsZUNlbnRlcmVkIiwibWF0UmlwcGxlVHJpZ2dlciJdLFsxLCJtYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXkiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKFZ1KCksT3UoMCwic3BhbiIsMCksanUoMSksUHUoKSx3dSgyLCJzcGFuIiwxKSx3dSgzLCJzcGFuIiwyKSksMiZlJiYoSmMoMiksYWYoIm1hdC1idXR0b24tcmlwcGxlLXJvdW5kIixuLmlzUm91bmRCdXR0b258fG4uaXNJY29uQnV0dG9uKSx2dSgibWF0UmlwcGxlRGlzYWJsZWQiLG4uX2lzUmlwcGxlRGlzYWJsZWQoKSkoIm1hdFJpcHBsZUNlbnRlcmVkIixuLmlzSWNvbkJ1dHRvbikoIm1hdFJpcHBsZVRyaWdnZXIiLG4uX2dldEhvc3RFbGVtZW50KCkpKX0sZGlyZWN0aXZlczpbcEhdLHN0eWxlczpbQUhdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLElILmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6cHp9LHt0eXBlOmNofSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W053XX1dfV0sSUgucHJvcERlY29yYXRvcnM9e3RhYkluZGV4Olt7dHlwZTp5X31dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKElILFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6ImFbbWF0LWJ1dHRvbl0sIGFbbWF0LXJhaXNlZC1idXR0b25dLCBhW21hdC1pY29uLWJ1dHRvbl0sIGFbbWF0LWZhYl0sXG4gICAgICAgICAgICAgYVttYXQtbWluaS1mYWJdLCBhW21hdC1zdHJva2VkLWJ1dHRvbl0sIGFbbWF0LWZsYXQtYnV0dG9uXSIsZXhwb3J0QXM6Im1hdEJ1dHRvbiwgbWF0QW5jaG9yIixob3N0OnsiW2F0dHIudGFiaW5kZXhdIjoiZGlzYWJsZWQgPyAtMSA6ICh0YWJJbmRleCB8fCAwKSIsIlthdHRyLmRpc2FibGVkXSI6ImRpc2FibGVkIHx8IG51bGwiLCJbYXR0ci5hcmlhLWRpc2FibGVkXSI6ImRpc2FibGVkLnRvU3RyaW5nKCkiLCIoY2xpY2spIjoiX2hhbHREaXNhYmxlZEV2ZW50cygkZXZlbnQpIiwiW2NsYXNzLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlXSI6J19hbmltYXRpb25Nb2RlID09PSAiTm9vcEFuaW1hdGlvbnMiJywiW2NsYXNzLm1hdC1idXR0b24tZGlzYWJsZWRdIjoiZGlzYWJsZWQiLGNsYXNzOiJtYXQtZm9jdXMtaW5kaWNhdG9yIn0saW5wdXRzOlsiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwiY29sb3IiXSx0ZW1wbGF0ZTonPHNwYW4gY2xhc3M9Im1hdC1idXR0b24td3JhcHBlciI+PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50Pjwvc3Bhbj5cbjxzcGFuIG1hdFJpcHBsZSBjbGFzcz0ibWF0LWJ1dHRvbi1yaXBwbGUiXG4gICAgICBbY2xhc3MubWF0LWJ1dHRvbi1yaXBwbGUtcm91bmRdPSJpc1JvdW5kQnV0dG9uIHx8IGlzSWNvbkJ1dHRvbiJcbiAgICAgIFttYXRSaXBwbGVEaXNhYmxlZF09Il9pc1JpcHBsZURpc2FibGVkKCkiXG4gICAgICBbbWF0UmlwcGxlQ2VudGVyZWRdPSJpc0ljb25CdXR0b24iXG4gICAgICBbbWF0UmlwcGxlVHJpZ2dlcl09Il9nZXRIb3N0RWxlbWVudCgpIj48L3NwYW4+XG48c3BhbiBjbGFzcz0ibWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5Ij48L3NwYW4+XG4nLGVuY2Fwc3VsYXRpb246UG8uTm9uZSxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNoLHN0eWxlczpbIi5tYXQtYnV0dG9uIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6MH0ubWF0LWJ1dHRvbjpob3Zlcjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbjpob3Zlcjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouMDR9QG1lZGlhKGhvdmVyOiBub25lKXsubWF0LWJ1dHRvbjpob3Zlcjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbjpob3Zlcjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTowfX0ubWF0LWJ1dHRvbiwubWF0LWljb24tYnV0dG9uLC5tYXQtc3Ryb2tlZC1idXR0b24sLm1hdC1mbGF0LWJ1dHRvbntib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpwb2ludGVyO291dGxpbmU6bm9uZTtib3JkZXI6bm9uZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjowO21pbi13aWR0aDo2NHB4O2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7Ym9yZGVyLXJhZGl1czo0cHg7b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LWljb24tYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtc3Ryb2tlZC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1mbGF0LWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtaWNvbi1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5tYXQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWljb24tYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXN0cm9rZWQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1mbGF0LWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtZmxhdC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6LjEyfS5tYXQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtaWNvbi1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1zdHJva2VkLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LWZsYXQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtcmFpc2VkLWJ1dHRvbntib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpwb2ludGVyO291dGxpbmU6bm9uZTtib3JkZXI6bm9uZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjowO21pbi13aWR0aDo2NHB4O2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7Ym9yZGVyLXJhZGl1czo0cHg7b3ZlcmZsb3c6dmlzaWJsZTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJveC1zaGFkb3cgMjgwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKX0ubWF0LXJhaXNlZC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1yYWlzZWQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1yYWlzZWQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi4xMn0ubWF0LXJhaXNlZC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlLm1hdC1yYWlzZWQtYnV0dG9ue3RyYW5zaXRpb246bm9uZTthbmltYXRpb246bm9uZX0ubWF0LXN0cm9rZWQtYnV0dG9ue2JvcmRlcjoxcHggc29saWQgY3VycmVudENvbG9yO3BhZGRpbmc6MCAxNXB4O2xpbmUtaGVpZ2h0OjM0cHh9Lm1hdC1zdHJva2VkLWJ1dHRvbiAubWF0LWJ1dHRvbi1yaXBwbGUubWF0LXJpcHBsZSwubWF0LXN0cm9rZWQtYnV0dG9uIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7dG9wOi0xcHg7bGVmdDotMXB4O3JpZ2h0Oi0xcHg7Ym90dG9tOi0xcHh9Lm1hdC1mYWJ7Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MDttaW4td2lkdGg6NjRweDtsaW5lLWhlaWdodDozNnB4O3BhZGRpbmc6MCAxNnB4O2JvcmRlci1yYWRpdXM6NHB4O292ZXJmbG93OnZpc2libGU7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsIDAsIDApO3RyYW5zaXRpb246YmFja2dyb3VuZCA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxib3gtc2hhZG93IDI4MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7bWluLXdpZHRoOjA7Ym9yZGVyLXJhZGl1czo1MCU7d2lkdGg6NTZweDtoZWlnaHQ6NTZweDtwYWRkaW5nOjA7ZmxleC1zaHJpbms6MH0ubWF0LWZhYjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LWZhYi5tYXQtYnV0dG9uLWRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5tYXQtZmFiLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1mYWIuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6LjEyfS5tYXQtZmFiOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZS5tYXQtZmFie3RyYW5zaXRpb246bm9uZTthbmltYXRpb246bm9uZX0ubWF0LWZhYiAubWF0LWJ1dHRvbi13cmFwcGVye3BhZGRpbmc6MTZweCAwO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1taW5pLWZhYntib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpwb2ludGVyO291dGxpbmU6bm9uZTtib3JkZXI6bm9uZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjowO21pbi13aWR0aDo2NHB4O2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7Ym9yZGVyLXJhZGl1czo0cHg7b3ZlcmZsb3c6dmlzaWJsZTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJveC1zaGFkb3cgMjgwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTttaW4td2lkdGg6MDtib3JkZXItcmFkaXVzOjUwJTt3aWR0aDo0MHB4O2hlaWdodDo0MHB4O3BhZGRpbmc6MDtmbGV4LXNocmluazowfS5tYXQtbWluaS1mYWI6Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1taW5pLWZhYi5tYXQtYnV0dG9uLWRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5tYXQtbWluaS1mYWIuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LW1pbmktZmFiLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi4xMn0ubWF0LW1pbmktZmFiOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZS5tYXQtbWluaS1mYWJ7dHJhbnNpdGlvbjpub25lO2FuaW1hdGlvbjpub25lfS5tYXQtbWluaS1mYWIgLm1hdC1idXR0b24td3JhcHBlcntwYWRkaW5nOjhweCAwO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1pY29uLWJ1dHRvbntwYWRkaW5nOjA7bWluLXdpZHRoOjA7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDtmbGV4LXNocmluazowO2xpbmUtaGVpZ2h0OjQwcHg7Ym9yZGVyLXJhZGl1czo1MCV9Lm1hdC1pY29uLWJ1dHRvbiBpLC5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29ue2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1idXR0b24tcmlwcGxlLm1hdC1yaXBwbGUsLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czpub25lO2JvcmRlci1yYWRpdXM6aW5oZXJpdH0ubWF0LWJ1dHRvbi1yaXBwbGUubWF0LXJpcHBsZTpub3QoOmVtcHR5KXt0cmFuc2Zvcm06dHJhbnNsYXRlWigwKX0ubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgMjAwbXMgY3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuMjUsIDEpLGJhY2tncm91bmQtY29sb3IgMjAwbXMgY3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuMjUsIDEpfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e3RyYW5zaXRpb246bm9uZX0ubWF0LWJ1dHRvbi1yaXBwbGUtcm91bmR7Ym9yZGVyLXJhZGl1czo1MCU7ei1pbmRleDoxfS5tYXQtYnV0dG9uIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LWZsYXQtYnV0dG9uIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LXN0cm9rZWQtYnV0dG9uIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LXJhaXNlZC1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtaWNvbi1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtZmFiIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LW1pbmktZmFiIC5tYXQtYnV0dG9uLXdyYXBwZXI+Knt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Lm1hdC1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kpIC5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLWJ1dHRvbiwubWF0LWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSkgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb24tYnV0dG9ue2Rpc3BsYXk6aW5saW5lLWZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7Zm9udC1zaXplOmluaGVyaXQ7d2lkdGg6Mi41ZW07aGVpZ2h0OjIuNWVtfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1idXR0b24sLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZsYXQtYnV0dG9uLC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1yYWlzZWQtYnV0dG9uLC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1pY29uLWJ1dHRvbiwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtZmFiLC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1taW5pLWZhYntvdXRsaW5lOnNvbGlkIDFweH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYnV0dG9uLWJhc2UuY2RrLWtleWJvYXJkLWZvY3VzZWQsLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWJ1dHRvbi1iYXNlLmNkay1wcm9ncmFtLWZvY3VzZWR7b3V0bGluZTpzb2xpZCAzcHh9XG4iXX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOnB6fSx7dHlwZTpjaH0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltOd119XX1dfSkse3RhYkluZGV4Olt7dHlwZTp5X31dfSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyB6SHt9ekguybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHpIKX0sekguybVtb2Q9Wm8oe3R5cGU6ekh9KSx6SC7JtWluaj1jbyh7aW1wb3J0czpbW21ILFR6XSxUel19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKHpILHtkZWNsYXJhdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm5bTkgsSUhdfSxpbXBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW21ILFR6XX0sZXhwb3J0czpmdW5jdGlvbigpe3JldHVybltOSCxJSCxUel19fSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYih6SCxbe3R5cGU6a18sYXJnczpbe2ltcG9ydHM6W21ILFR6XSxleHBvcnRzOltOSCxJSCxUel0sZGVjbGFyYXRpb25zOltOSCxJSF19XX1dLG51bGwsbnVsbCk7Y2xhc3MgSEh7fWZ1bmN0aW9uIEZIKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgdC5jb25uZWN0fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jbGFzcyBMSCBleHRlbmRzIEhIe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5fZGF0YT10fWNvbm5lY3QoKXtyZXR1cm4gdXQodGhpcy5fZGF0YSk/dGhpcy5fZGF0YTpaKHRoaXMuX2RhdGEpfWRpc2Nvbm5lY3QoKXt9fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY2xhc3MgQkh7YXBwbHlDaGFuZ2VzKHQsZSxuLG8saSl7dC5mb3JFYWNoT3BlcmF0aW9uKCgodCxvLGEpPT57bGV0IHIscztpZihudWxsPT10LnByZXZpb3VzSW5kZXgpe2NvbnN0IGk9bih0LG8sYSk7cj1lLmNyZWF0ZUVtYmVkZGVkVmlldyhpLnRlbXBsYXRlUmVmLGkuY29udGV4dCxpLmluZGV4KSxzPTF9ZWxzZSBudWxsPT1hPyhlLnJlbW92ZShvKSxzPTMpOihyPWUuZ2V0KG8pLGUubW92ZShyLGEpLHM9Mik7aSYmaSh7Y29udGV4dDpudWxsPT1yP3ZvaWQgMDpyLmNvbnRleHQsb3BlcmF0aW9uOnMscmVjb3JkOnR9KX0pKX1kZXRhY2goKXt9fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jbGFzcyBWSHtjb25zdHJ1Y3Rvcigpe3RoaXMudmlld0NhY2hlU2l6ZT0yMCx0aGlzLl92aWV3Q2FjaGU9W119YXBwbHlDaGFuZ2VzKHQsZSxuLG8saSl7dC5mb3JFYWNoT3BlcmF0aW9uKCgodCxhLHIpPT57bGV0IHMsbDtudWxsPT10LnByZXZpb3VzSW5kZXg/KHM9dGhpcy5faW5zZXJ0VmlldygoKCk9Pm4odCxhLHIpKSxyLGUsbyh0KSksbD1zPzE6MCk6bnVsbD09cj8odGhpcy5fZGV0YWNoQW5kQ2FjaGVWaWV3KGEsZSksbD0zKToocz10aGlzLl9tb3ZlVmlldyhhLHIsZSxvKHQpKSxsPTIpLGkmJmkoe2NvbnRleHQ6bnVsbD09cz92b2lkIDA6cy5jb250ZXh0LG9wZXJhdGlvbjpsLHJlY29yZDp0fSl9KSl9ZGV0YWNoKCl7Zm9yKGNvbnN0IHQgb2YgdGhpcy5fdmlld0NhY2hlKXQuZGVzdHJveSgpO3RoaXMuX3ZpZXdDYWNoZT1bXX1faW5zZXJ0Vmlldyh0LGUsbixvKXtjb25zdCBpPXRoaXMuX2luc2VydFZpZXdGcm9tQ2FjaGUoZSxuKTtpZihpKXJldHVybiB2b2lkKGkuY29udGV4dC4kaW1wbGljaXQ9byk7Y29uc3QgYT10KCk7cmV0dXJuIG4uY3JlYXRlRW1iZWRkZWRWaWV3KGEudGVtcGxhdGVSZWYsYS5jb250ZXh0LGEuaW5kZXgpfV9kZXRhY2hBbmRDYWNoZVZpZXcodCxlKXtjb25zdCBuPWUuZGV0YWNoKHQpO3RoaXMuX21heWJlQ2FjaGVWaWV3KG4sZSl9X21vdmVWaWV3KHQsZSxuLG8pe2NvbnN0IGk9bi5nZXQodCk7cmV0dXJuIG4ubW92ZShpLGUpLGkuY29udGV4dC4kaW1wbGljaXQ9byxpfV9tYXliZUNhY2hlVmlldyh0LGUpe2lmKHRoaXMuX3ZpZXdDYWNoZS5sZW5ndGg8dGhpcy52aWV3Q2FjaGVTaXplKXRoaXMuX3ZpZXdDYWNoZS5wdXNoKHQpO2Vsc2V7Y29uc3Qgbj1lLmluZGV4T2YodCk7LTE9PT1uP3QuZGVzdHJveSgpOmUucmVtb3ZlKG4pfX1faW5zZXJ0Vmlld0Zyb21DYWNoZSh0LGUpe2NvbnN0IG49dGhpcy5fdmlld0NhY2hlLnBvcCgpO3JldHVybiBuJiZlLmluc2VydChuLHQpLG58fG51bGx9fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jbGFzcyBqSHtjb25zdHJ1Y3Rvcih0PSExLGUsbj0hMCl7dGhpcy5fbXVsdGlwbGU9dCx0aGlzLl9lbWl0Q2hhbmdlcz1uLHRoaXMuX3NlbGVjdGlvbj1uZXcgU2V0LHRoaXMuX2Rlc2VsZWN0ZWRUb0VtaXQ9W10sdGhpcy5fc2VsZWN0ZWRUb0VtaXQ9W10sdGhpcy5jaGFuZ2VkPW5ldyB4LGUmJmUubGVuZ3RoJiYodD9lLmZvckVhY2goKHQ9PnRoaXMuX21hcmtTZWxlY3RlZCh0KSkpOnRoaXMuX21hcmtTZWxlY3RlZChlWzBdKSx0aGlzLl9zZWxlY3RlZFRvRW1pdC5sZW5ndGg9MCl9Z2V0IHNlbGVjdGVkKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGVkfHwodGhpcy5fc2VsZWN0ZWQ9QXJyYXkuZnJvbSh0aGlzLl9zZWxlY3Rpb24udmFsdWVzKCkpKSx0aGlzLl9zZWxlY3RlZH1zZWxlY3QoLi4udCl7dGhpcy5fdmVyaWZ5VmFsdWVBc3NpZ25tZW50KHQpLHQuZm9yRWFjaCgodD0+dGhpcy5fbWFya1NlbGVjdGVkKHQpKSksdGhpcy5fZW1pdENoYW5nZUV2ZW50KCl9ZGVzZWxlY3QoLi4udCl7dGhpcy5fdmVyaWZ5VmFsdWVBc3NpZ25tZW50KHQpLHQuZm9yRWFjaCgodD0+dGhpcy5fdW5tYXJrU2VsZWN0ZWQodCkpKSx0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoKX10b2dnbGUodCl7dGhpcy5pc1NlbGVjdGVkKHQpP3RoaXMuZGVzZWxlY3QodCk6dGhpcy5zZWxlY3QodCl9Y2xlYXIoKXt0aGlzLl91bm1hcmtBbGwoKSx0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoKX1pc1NlbGVjdGVkKHQpe3JldHVybiB0aGlzLl9zZWxlY3Rpb24uaGFzKHQpfWlzRW1wdHkoKXtyZXR1cm4gMD09PXRoaXMuX3NlbGVjdGlvbi5zaXplfWhhc1ZhbHVlKCl7cmV0dXJuIXRoaXMuaXNFbXB0eSgpfXNvcnQodCl7dGhpcy5fbXVsdGlwbGUmJnRoaXMuc2VsZWN0ZWQmJnRoaXMuX3NlbGVjdGVkLnNvcnQodCl9aXNNdWx0aXBsZVNlbGVjdGlvbigpe3JldHVybiB0aGlzLl9tdWx0aXBsZX1fZW1pdENoYW5nZUV2ZW50KCl7dGhpcy5fc2VsZWN0ZWQ9bnVsbCwodGhpcy5fc2VsZWN0ZWRUb0VtaXQubGVuZ3RofHx0aGlzLl9kZXNlbGVjdGVkVG9FbWl0Lmxlbmd0aCkmJih0aGlzLmNoYW5nZWQubmV4dCh7c291cmNlOnRoaXMsYWRkZWQ6dGhpcy5fc2VsZWN0ZWRUb0VtaXQscmVtb3ZlZDp0aGlzLl9kZXNlbGVjdGVkVG9FbWl0fSksdGhpcy5fZGVzZWxlY3RlZFRvRW1pdD1bXSx0aGlzLl9zZWxlY3RlZFRvRW1pdD1bXSl9X21hcmtTZWxlY3RlZCh0KXt0aGlzLmlzU2VsZWN0ZWQodCl8fCh0aGlzLl9tdWx0aXBsZXx8dGhpcy5fdW5tYXJrQWxsKCksdGhpcy5fc2VsZWN0aW9uLmFkZCh0KSx0aGlzLl9lbWl0Q2hhbmdlcyYmdGhpcy5fc2VsZWN0ZWRUb0VtaXQucHVzaCh0KSl9X3VubWFya1NlbGVjdGVkKHQpe3RoaXMuaXNTZWxlY3RlZCh0KSYmKHRoaXMuX3NlbGVjdGlvbi5kZWxldGUodCksdGhpcy5fZW1pdENoYW5nZXMmJnRoaXMuX2Rlc2VsZWN0ZWRUb0VtaXQucHVzaCh0KSl9X3VubWFya0FsbCgpe3RoaXMuaXNFbXB0eSgpfHx0aGlzLl9zZWxlY3Rpb24uZm9yRWFjaCgodD0+dGhpcy5fdW5tYXJrU2VsZWN0ZWQodCkpKX1fdmVyaWZ5VmFsdWVBc3NpZ25tZW50KHQpe2lmKHQubGVuZ3RoPjEmJiF0aGlzLl9tdWx0aXBsZSYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpKXRocm93KGZ1bmN0aW9uIGUoKXtyZXR1cm4gRXJyb3IoIkNhbm5vdCBwYXNzIG11bHRpcGxlIHZhbHVlcyBpbnRvIFNlbGVjdGlvbk1vZGVsIHdpdGggc2luZ2xlLXZhbHVlIG1vZGUuIil9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLykoKX19Y2xhc3MgVUh7Y29uc3RydWN0b3IoKXt0aGlzLl9saXN0ZW5lcnM9W119bm90aWZ5KHQsZSl7Zm9yKGxldCBuIG9mIHRoaXMuX2xpc3RlbmVycyluKHQsZSl9bGlzdGVuKHQpe3JldHVybiB0aGlzLl9saXN0ZW5lcnMucHVzaCh0KSwoKT0+e3RoaXMuX2xpc3RlbmVycz10aGlzLl9saXN0ZW5lcnMuZmlsdGVyKChlPT50IT09ZSkpfX1uZ09uRGVzdHJveSgpe3RoaXMuX2xpc3RlbmVycz1bXX19VUguybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFVIKX0sVUguybVwcm92PWxvKHtmYWN0b3J5OmZ1bmN0aW9uIHQoKXtyZXR1cm4gbmV3IFVIfSx0b2tlbjpVSCxwcm92aWRlZEluOiJyb290In0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoVUgsW3t0eXBlOkptLGFyZ3M6W3twcm92aWRlZEluOiJyb290In1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW119KSxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCi8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCBXSD1uZXcgTnIoIl9WaWV3UmVwZWF0ZXIiKSxHSD1bImNvbnRlbnRXcmFwcGVyIl0sWUg9bmV3IE5yKCJWSVJUVUFMX1NDUk9MTF9TVFJBVEVHWSIpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3MgcUh7Y29uc3RydWN0b3IodCxlLG4pe3RoaXMuX3Njcm9sbGVkSW5kZXhDaGFuZ2U9bmV3IHgsdGhpcy5zY3JvbGxlZEluZGV4Q2hhbmdlPXRoaXMuX3Njcm9sbGVkSW5kZXhDaGFuZ2UucGlwZShrZSgpKSx0aGlzLl92aWV3cG9ydD1udWxsLHRoaXMuX2l0ZW1TaXplPXQsdGhpcy5fbWluQnVmZmVyUHg9ZSx0aGlzLl9tYXhCdWZmZXJQeD1ufWF0dGFjaCh0KXt0aGlzLl92aWV3cG9ydD10LHRoaXMuX3VwZGF0ZVRvdGFsQ29udGVudFNpemUoKSx0aGlzLl91cGRhdGVSZW5kZXJlZFJhbmdlKCl9ZGV0YWNoKCl7dGhpcy5fc2Nyb2xsZWRJbmRleENoYW5nZS5jb21wbGV0ZSgpLHRoaXMuX3ZpZXdwb3J0PW51bGx9dXBkYXRlSXRlbUFuZEJ1ZmZlclNpemUodCxlLG4pe2lmKG48ZSYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpKXRocm93IEVycm9yKCJDREsgdmlydHVhbCBzY3JvbGw6IG1heEJ1ZmZlclB4IG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIG1pbkJ1ZmZlclB4Iik7dGhpcy5faXRlbVNpemU9dCx0aGlzLl9taW5CdWZmZXJQeD1lLHRoaXMuX21heEJ1ZmZlclB4PW4sdGhpcy5fdXBkYXRlVG90YWxDb250ZW50U2l6ZSgpLHRoaXMuX3VwZGF0ZVJlbmRlcmVkUmFuZ2UoKX1vbkNvbnRlbnRTY3JvbGxlZCgpe3RoaXMuX3VwZGF0ZVJlbmRlcmVkUmFuZ2UoKX1vbkRhdGFMZW5ndGhDaGFuZ2VkKCl7dGhpcy5fdXBkYXRlVG90YWxDb250ZW50U2l6ZSgpLHRoaXMuX3VwZGF0ZVJlbmRlcmVkUmFuZ2UoKX1vbkNvbnRlbnRSZW5kZXJlZCgpe31vblJlbmRlcmVkT2Zmc2V0Q2hhbmdlZCgpe31zY3JvbGxUb0luZGV4KHQsZSl7dGhpcy5fdmlld3BvcnQmJnRoaXMuX3ZpZXdwb3J0LnNjcm9sbFRvT2Zmc2V0KHQqdGhpcy5faXRlbVNpemUsZSl9X3VwZGF0ZVRvdGFsQ29udGVudFNpemUoKXt0aGlzLl92aWV3cG9ydCYmdGhpcy5fdmlld3BvcnQuc2V0VG90YWxDb250ZW50U2l6ZSh0aGlzLl92aWV3cG9ydC5nZXREYXRhTGVuZ3RoKCkqdGhpcy5faXRlbVNpemUpfV91cGRhdGVSZW5kZXJlZFJhbmdlKCl7aWYoIXRoaXMuX3ZpZXdwb3J0KXJldHVybjtjb25zdCB0PXRoaXMuX3ZpZXdwb3J0LmdldFJlbmRlcmVkUmFuZ2UoKSxlPXtzdGFydDp0LnN0YXJ0LGVuZDp0LmVuZH0sbj10aGlzLl92aWV3cG9ydC5nZXRWaWV3cG9ydFNpemUoKSxvPXRoaXMuX3ZpZXdwb3J0LmdldERhdGFMZW5ndGgoKTtsZXQgaT10aGlzLl92aWV3cG9ydC5tZWFzdXJlU2Nyb2xsT2Zmc2V0KCksYT10aGlzLl9pdGVtU2l6ZT4wP2kvdGhpcy5faXRlbVNpemU6MDtpZihlLmVuZD5vKXtjb25zdCB0PU1hdGguY2VpbChuL3RoaXMuX2l0ZW1TaXplKSxyPU1hdGgubWF4KDAsTWF0aC5taW4oYSxvLXQpKTthIT1yJiYoYT1yLGk9cip0aGlzLl9pdGVtU2l6ZSxlLnN0YXJ0PU1hdGguZmxvb3IoYSkpLGUuZW5kPU1hdGgubWF4KDAsTWF0aC5taW4obyxlLnN0YXJ0K3QpKX1jb25zdCByPWktZS5zdGFydCp0aGlzLl9pdGVtU2l6ZTtpZihyPHRoaXMuX21pbkJ1ZmZlclB4JiYwIT1lLnN0YXJ0KXtjb25zdCB0PU1hdGguY2VpbCgodGhpcy5fbWF4QnVmZmVyUHgtcikvdGhpcy5faXRlbVNpemUpO2Uuc3RhcnQ9TWF0aC5tYXgoMCxlLnN0YXJ0LXQpLGUuZW5kPU1hdGgubWluKG8sTWF0aC5jZWlsKGErKG4rdGhpcy5fbWluQnVmZmVyUHgpL3RoaXMuX2l0ZW1TaXplKSl9ZWxzZXtjb25zdCB0PWUuZW5kKnRoaXMuX2l0ZW1TaXplLShpK24pO2lmKHQ8dGhpcy5fbWluQnVmZmVyUHgmJmUuZW5kIT1vKXtjb25zdCBuPU1hdGguY2VpbCgodGhpcy5fbWF4QnVmZmVyUHgtdCkvdGhpcy5faXRlbVNpemUpO24+MCYmKGUuZW5kPU1hdGgubWluKG8sZS5lbmQrbiksZS5zdGFydD1NYXRoLm1heCgwLE1hdGguZmxvb3IoYS10aGlzLl9taW5CdWZmZXJQeC90aGlzLl9pdGVtU2l6ZSkpKX19dGhpcy5fdmlld3BvcnQuc2V0UmVuZGVyZWRSYW5nZShlKSx0aGlzLl92aWV3cG9ydC5zZXRSZW5kZXJlZENvbnRlbnRPZmZzZXQodGhpcy5faXRlbVNpemUqZS5zdGFydCksdGhpcy5fc2Nyb2xsZWRJbmRleENoYW5nZS5uZXh0KE1hdGguZmxvb3IoYSkpfX1mdW5jdGlvbiBaSCh0KXtyZXR1cm4gdC5fc2Nyb2xsU3RyYXRlZ3l9Y2xhc3MgWEh7Y29uc3RydWN0b3IoKXt0aGlzLl9pdGVtU2l6ZT0yMCx0aGlzLl9taW5CdWZmZXJQeD0xMDAsdGhpcy5fbWF4QnVmZmVyUHg9MjAwLHRoaXMuX3Njcm9sbFN0cmF0ZWd5PW5ldyBxSCh0aGlzLml0ZW1TaXplLHRoaXMubWluQnVmZmVyUHgsdGhpcy5tYXhCdWZmZXJQeCl9Z2V0IGl0ZW1TaXplKCl7cmV0dXJuIHRoaXMuX2l0ZW1TaXplfXNldCBpdGVtU2l6ZSh0KXt0aGlzLl9pdGVtU2l6ZT1zSSh0KX1nZXQgbWluQnVmZmVyUHgoKXtyZXR1cm4gdGhpcy5fbWluQnVmZmVyUHh9c2V0IG1pbkJ1ZmZlclB4KHQpe3RoaXMuX21pbkJ1ZmZlclB4PXNJKHQpfWdldCBtYXhCdWZmZXJQeCgpe3JldHVybiB0aGlzLl9tYXhCdWZmZXJQeH1zZXQgbWF4QnVmZmVyUHgodCl7dGhpcy5fbWF4QnVmZmVyUHg9c0kodCl9bmdPbkNoYW5nZXMoKXt0aGlzLl9zY3JvbGxTdHJhdGVneS51cGRhdGVJdGVtQW5kQnVmZmVyU2l6ZSh0aGlzLml0ZW1TaXplLHRoaXMubWluQnVmZmVyUHgsdGhpcy5tYXhCdWZmZXJQeCl9fVhILsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxYSCl9LFhILsm1ZGlyPUpvKHt0eXBlOlhILHNlbGVjdG9yczpbWyJjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQiLCJpdGVtU2l6ZSIsIiJdXSxpbnB1dHM6e2l0ZW1TaXplOiJpdGVtU2l6ZSIsbWluQnVmZmVyUHg6Im1pbkJ1ZmZlclB4IixtYXhCdWZmZXJQeDoibWF4QnVmZmVyUHgifSxmZWF0dXJlczpbaWgoW3twcm92aWRlOllILHVzZUZhY3Rvcnk6WkgsZGVwczpbSW4oKCgpPT5YSCkpXX1dKSxTaV19KSxYSC5wcm9wRGVjb3JhdG9ycz17aXRlbVNpemU6W3t0eXBlOnlffV0sbWluQnVmZmVyUHg6W3t0eXBlOnlffV0sbWF4QnVmZmVyUHg6W3t0eXBlOnlffV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoWEgsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoiY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0W2l0ZW1TaXplXSIscHJvdmlkZXJzOlt7cHJvdmlkZTpZSCx1c2VGYWN0b3J5OlpILGRlcHM6W0luKCgoKT0+WEgpKV19XX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW119KSx7aXRlbVNpemU6W3t0eXBlOnlffV0sbWluQnVmZmVyUHg6W3t0eXBlOnlffV0sbWF4QnVmZmVyUHg6W3t0eXBlOnlffV19KTtjbGFzcyBLSHtjb25zdHJ1Y3Rvcih0LGUsbil7dGhpcy5fbmdab25lPXQsdGhpcy5fcGxhdGZvcm09ZSx0aGlzLl9zY3JvbGxlZD1uZXcgeCx0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb249bnVsbCx0aGlzLl9zY3JvbGxlZENvdW50PTAsdGhpcy5zY3JvbGxDb250YWluZXJzPW5ldyBNYXAsdGhpcy5fZG9jdW1lbnQ9bn1yZWdpc3Rlcih0KXt0aGlzLnNjcm9sbENvbnRhaW5lcnMuaGFzKHQpfHx0aGlzLnNjcm9sbENvbnRhaW5lcnMuc2V0KHQsdC5lbGVtZW50U2Nyb2xsZWQoKS5zdWJzY3JpYmUoKCgpPT50aGlzLl9zY3JvbGxlZC5uZXh0KHQpKSkpfWRlcmVnaXN0ZXIodCl7Y29uc3QgZT10aGlzLnNjcm9sbENvbnRhaW5lcnMuZ2V0KHQpO2UmJihlLnVuc3Vic2NyaWJlKCksdGhpcy5zY3JvbGxDb250YWluZXJzLmRlbGV0ZSh0KSl9c2Nyb2xsZWQodD0yMCl7cmV0dXJuIHRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcj9uZXcgeSgoZT0+e3RoaXMuX2dsb2JhbFN1YnNjcmlwdGlvbnx8dGhpcy5fYWRkR2xvYmFsTGlzdGVuZXIoKTtjb25zdCBuPXQ+MD90aGlzLl9zY3JvbGxlZC5waXBlKG9lKHQpKS5zdWJzY3JpYmUoZSk6dGhpcy5fc2Nyb2xsZWQuc3Vic2NyaWJlKGUpO3JldHVybiB0aGlzLl9zY3JvbGxlZENvdW50KyssKCk9PntuLnVuc3Vic2NyaWJlKCksdGhpcy5fc2Nyb2xsZWRDb3VudC0tLHRoaXMuX3Njcm9sbGVkQ291bnR8fHRoaXMuX3JlbW92ZUdsb2JhbExpc3RlbmVyKCl9fSkpOlooKX1uZ09uRGVzdHJveSgpe3RoaXMuX3JlbW92ZUdsb2JhbExpc3RlbmVyKCksdGhpcy5zY3JvbGxDb250YWluZXJzLmZvckVhY2goKCh0LGUpPT50aGlzLmRlcmVnaXN0ZXIoZSkpKSx0aGlzLl9zY3JvbGxlZC5jb21wbGV0ZSgpfWFuY2VzdG9yU2Nyb2xsZWQodCxlKXtjb25zdCBuPXRoaXMuZ2V0QW5jZXN0b3JTY3JvbGxDb250YWluZXJzKHQpO3JldHVybiB0aGlzLnNjcm9sbGVkKGUpLnBpcGUoR3QoKHQ9PiF0fHxuLmluZGV4T2YodCk+LTEpKSl9Z2V0QW5jZXN0b3JTY3JvbGxDb250YWluZXJzKHQpe2NvbnN0IGU9W107cmV0dXJuIHRoaXMuc2Nyb2xsQ29udGFpbmVycy5mb3JFYWNoKCgobixvKT0+e3RoaXMuX3Njcm9sbGFibGVDb250YWluc0VsZW1lbnQobyx0KSYmZS5wdXNoKG8pfSkpLGV9X2dldFdpbmRvdygpe3JldHVybiB0aGlzLl9kb2N1bWVudC5kZWZhdWx0Vmlld3x8d2luZG93fV9zY3JvbGxhYmxlQ29udGFpbnNFbGVtZW50KHQsZSl7bGV0IG49cEkoZSksbz10LmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50O2Rve2lmKG49PW8pcmV0dXJuITB9d2hpbGUobj1uLnBhcmVudEVsZW1lbnQpO3JldHVybiExfV9hZGRHbG9iYWxMaXN0ZW5lcigpe3RoaXMuX2dsb2JhbFN1YnNjcmlwdGlvbj10aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCgpPT5WdCh0aGlzLl9nZXRXaW5kb3coKS5kb2N1bWVudCwic2Nyb2xsIikuc3Vic2NyaWJlKCgoKT0+dGhpcy5fc2Nyb2xsZWQubmV4dCgpKSkpKX1fcmVtb3ZlR2xvYmFsTGlzdGVuZXIoKXt0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb24mJih0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb249bnVsbCl9fUtILsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxLSCkodXModEMpLHVzKGZJKSx1cyhVQyw4KSl9LEtILsm1cHJvdj1sbyh7ZmFjdG9yeTpmdW5jdGlvbiB0KCl7cmV0dXJuIG5ldyBLSCh1cyh0QyksdXMoZkkpLHVzKFVDLDgpKX0sdG9rZW46S0gscHJvdmlkZWRJbjoicm9vdCJ9KSxLSC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOnRDfSx7dHlwZTpmSX0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltVQ119XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoS0gsW3t0eXBlOkptLGFyZ3M6W3twcm92aWRlZEluOiJyb290In1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOnRDfSx7dHlwZTpmSX0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltVQ119XX1dfSksbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyBKSHtjb25zdHJ1Y3Rvcih0LGUsbixvKXt0aGlzLmVsZW1lbnRSZWY9dCx0aGlzLnNjcm9sbERpc3BhdGNoZXI9ZSx0aGlzLm5nWm9uZT1uLHRoaXMuZGlyPW8sdGhpcy5fZGVzdHJveWVkPW5ldyB4LHRoaXMuX2VsZW1lbnRTY3JvbGxlZD1uZXcgeSgodD0+dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCgpPT5WdCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwic2Nyb2xsIikucGlwZSh1bih0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUodCkpKSkpfW5nT25Jbml0KCl7dGhpcy5zY3JvbGxEaXNwYXRjaGVyLnJlZ2lzdGVyKHRoaXMpfW5nT25EZXN0cm95KCl7dGhpcy5zY3JvbGxEaXNwYXRjaGVyLmRlcmVnaXN0ZXIodGhpcyksdGhpcy5fZGVzdHJveWVkLm5leHQoKSx0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKX1lbGVtZW50U2Nyb2xsZWQoKXtyZXR1cm4gdGhpcy5fZWxlbWVudFNjcm9sbGVkfWdldEVsZW1lbnRSZWYoKXtyZXR1cm4gdGhpcy5lbGVtZW50UmVmfXNjcm9sbFRvKHQpe2NvbnN0IGU9dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsbj10aGlzLmRpciYmInJ0bCI9PXRoaXMuZGlyLnZhbHVlO251bGw9PXQubGVmdCYmKHQubGVmdD1uP3QuZW5kOnQuc3RhcnQpLG51bGw9PXQucmlnaHQmJih0LnJpZ2h0PW4/dC5zdGFydDp0LmVuZCksbnVsbCE9dC5ib3R0b20mJih0LnRvcD1lLnNjcm9sbEhlaWdodC1lLmNsaWVudEhlaWdodC10LmJvdHRvbSksbiYmMCE9T0koKT8obnVsbCE9dC5sZWZ0JiYodC5yaWdodD1lLnNjcm9sbFdpZHRoLWUuY2xpZW50V2lkdGgtdC5sZWZ0KSwyPT1PSSgpP3QubGVmdD10LnJpZ2h0OjE9PU9JKCkmJih0LmxlZnQ9dC5yaWdodD8tdC5yaWdodDp0LnJpZ2h0KSk6bnVsbCE9dC5yaWdodCYmKHQubGVmdD1lLnNjcm9sbFdpZHRoLWUuY2xpZW50V2lkdGgtdC5yaWdodCksdGhpcy5fYXBwbHlTY3JvbGxUb09wdGlvbnModCl9X2FwcGx5U2Nyb2xsVG9PcHRpb25zKHQpe2NvbnN0IGU9dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7eEkoKT9lLnNjcm9sbFRvKHQpOihudWxsIT10LnRvcCYmKGUuc2Nyb2xsVG9wPXQudG9wKSxudWxsIT10LmxlZnQmJihlLnNjcm9sbExlZnQ9dC5sZWZ0KSl9bWVhc3VyZVNjcm9sbE9mZnNldCh0KXtjb25zdCBlPSJsZWZ0IixuPSJyaWdodCIsbz10aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtpZigidG9wIj09dClyZXR1cm4gby5zY3JvbGxUb3A7aWYoImJvdHRvbSI9PXQpcmV0dXJuIG8uc2Nyb2xsSGVpZ2h0LW8uY2xpZW50SGVpZ2h0LW8uc2Nyb2xsVG9wO2NvbnN0IGk9dGhpcy5kaXImJiJydGwiPT10aGlzLmRpci52YWx1ZTtyZXR1cm4ic3RhcnQiPT10P3Q9aT9uOmU6ImVuZCI9PXQmJih0PWk/ZTpuKSxpJiYyPT1PSSgpP3Q9PWU/by5zY3JvbGxXaWR0aC1vLmNsaWVudFdpZHRoLW8uc2Nyb2xsTGVmdDpvLnNjcm9sbExlZnQ6aSYmMT09T0koKT90PT1lP28uc2Nyb2xsTGVmdCtvLnNjcm9sbFdpZHRoLW8uY2xpZW50V2lkdGg6LW8uc2Nyb2xsTGVmdDp0PT1lP28uc2Nyb2xsTGVmdDpvLnNjcm9sbFdpZHRoLW8uY2xpZW50V2lkdGgtby5zY3JvbGxMZWZ0fX1KSC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8SkgpKE11KGNoKSxNdShLSCksTXUodEMpLE11KE16LDgpKX0sSkguybVkaXI9Sm8oe3R5cGU6Skgsc2VsZWN0b3JzOltbIiIsImNkay1zY3JvbGxhYmxlIiwiIl0sWyIiLCJjZGtTY3JvbGxhYmxlIiwiIl1dfSksSkguY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpjaH0se3R5cGU6S0h9LHt0eXBlOnRDfSx7dHlwZTpNeixkZWNvcmF0b3JzOlt7dHlwZTpfc31dfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihKSCxbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJbY2RrLXNjcm9sbGFibGVdLCBbY2RrU2Nyb2xsYWJsZV0ifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Y2h9LHt0eXBlOktIfSx7dHlwZTp0Q30se3R5cGU6TXosZGVjb3JhdG9yczpbe3R5cGU6X3N9XX1dfSksbnVsbCk7Y2xhc3MgUUh7Y29uc3RydWN0b3IodCxlLG4pe3RoaXMuX3BsYXRmb3JtPXQsdGhpcy5fY2hhbmdlPW5ldyB4LHRoaXMuX2NoYW5nZUxpc3RlbmVyPXQ9Pnt0aGlzLl9jaGFuZ2UubmV4dCh0KX0sdGhpcy5fZG9jdW1lbnQ9bixlLnJ1bk91dHNpZGVBbmd1bGFyKCgoKT0+e2lmKHQuaXNCcm93c2VyKXtjb25zdCB0PXRoaXMuX2dldFdpbmRvdygpO3QuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLl9jaGFuZ2VMaXN0ZW5lciksdC5hZGRFdmVudExpc3RlbmVyKCJvcmllbnRhdGlvbmNoYW5nZSIsdGhpcy5fY2hhbmdlTGlzdGVuZXIpfXRoaXMuY2hhbmdlKCkuc3Vic2NyaWJlKCgoKT0+dGhpcy5fdXBkYXRlVmlld3BvcnRTaXplKCkpKX0pKX1uZ09uRGVzdHJveSgpe2lmKHRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcil7Y29uc3QgdD10aGlzLl9nZXRXaW5kb3coKTt0LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdGhpcy5fY2hhbmdlTGlzdGVuZXIpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigib3JpZW50YXRpb25jaGFuZ2UiLHRoaXMuX2NoYW5nZUxpc3RlbmVyKX10aGlzLl9jaGFuZ2UuY29tcGxldGUoKX1nZXRWaWV3cG9ydFNpemUoKXt0aGlzLl92aWV3cG9ydFNpemV8fHRoaXMuX3VwZGF0ZVZpZXdwb3J0U2l6ZSgpO2NvbnN0IHQ9e3dpZHRoOnRoaXMuX3ZpZXdwb3J0U2l6ZS53aWR0aCxoZWlnaHQ6dGhpcy5fdmlld3BvcnRTaXplLmhlaWdodH07cmV0dXJuIHRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcnx8KHRoaXMuX3ZpZXdwb3J0U2l6ZT1udWxsKSx0fWdldFZpZXdwb3J0UmVjdCgpe2NvbnN0IHQ9dGhpcy5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCkse3dpZHRoOmUsaGVpZ2h0Om59PXRoaXMuZ2V0Vmlld3BvcnRTaXplKCk7cmV0dXJue3RvcDp0LnRvcCxsZWZ0OnQubGVmdCxib3R0b206dC50b3ArbixyaWdodDp0LmxlZnQrZSxoZWlnaHQ6bix3aWR0aDplfX1nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCl7aWYoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm57dG9wOjAsbGVmdDowfTtjb25zdCB0PXRoaXMuX2RvY3VtZW50LGU9dGhpcy5fZ2V0V2luZG93KCksbj10LmRvY3VtZW50RWxlbWVudCxvPW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJue3RvcDotby50b3B8fHQuYm9keS5zY3JvbGxUb3B8fGUuc2Nyb2xsWXx8bi5zY3JvbGxUb3B8fDAsbGVmdDotby5sZWZ0fHx0LmJvZHkuc2Nyb2xsTGVmdHx8ZS5zY3JvbGxYfHxuLnNjcm9sbExlZnR8fDB9fWNoYW5nZSh0PTIwKXtyZXR1cm4gdD4wP3RoaXMuX2NoYW5nZS5waXBlKG9lKHQpKTp0aGlzLl9jaGFuZ2V9X2dldFdpbmRvdygpe3JldHVybiB0aGlzLl9kb2N1bWVudC5kZWZhdWx0Vmlld3x8d2luZG93fV91cGRhdGVWaWV3cG9ydFNpemUoKXtjb25zdCB0PXRoaXMuX2dldFdpbmRvdygpO3RoaXMuX3ZpZXdwb3J0U2l6ZT10aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXI/e3dpZHRoOnQuaW5uZXJXaWR0aCxoZWlnaHQ6dC5pbm5lckhlaWdodH06e3dpZHRoOjAsaGVpZ2h0OjB9fX1RSC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8UUgpKHVzKGZJKSx1cyh0QyksdXMoVUMsOCkpfSxRSC7JtXByb3Y9bG8oe2ZhY3Rvcnk6ZnVuY3Rpb24gdCgpe3JldHVybiBuZXcgUUgodXMoZkkpLHVzKHRDKSx1cyhVQyw4KSl9LHRva2VuOlFILHByb3ZpZGVkSW46InJvb3QifSksUUguY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpmSX0se3R5cGU6dEN9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbVUNdfV19XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFFILFt7dHlwZTpKbSxhcmdzOlt7cHJvdmlkZWRJbjoicm9vdCJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpmSX0se3R5cGU6dEN9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbVUNdfV19XX0pLG51bGwpO2NvbnN0ICRIPSJ1bmRlZmluZWQiIT10eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lP3B0OmN0O2NsYXNzIHRGIGV4dGVuZHMgSkh7Y29uc3RydWN0b3IodCxlLG4sbyxpLGEscil7aWYoc3VwZXIodCxhLG4saSksdGhpcy5lbGVtZW50UmVmPXQsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9ZSx0aGlzLl9zY3JvbGxTdHJhdGVneT1vLHRoaXMuX2RldGFjaGVkU3ViamVjdD1uZXcgeCx0aGlzLl9yZW5kZXJlZFJhbmdlU3ViamVjdD1uZXcgeCx0aGlzLl9vcmllbnRhdGlvbj0idmVydGljYWwiLHRoaXMuc2Nyb2xsZWRJbmRleENoYW5nZT1uZXcgeSgodD0+dGhpcy5fc2Nyb2xsU3RyYXRlZ3kuc2Nyb2xsZWRJbmRleENoYW5nZS5zdWJzY3JpYmUoKGU9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCgpPT50aGlzLm5nWm9uZS5ydW4oKCgpPT50Lm5leHQoZSkpKSkpKSkpKSx0aGlzLnJlbmRlcmVkUmFuZ2VTdHJlYW09dGhpcy5fcmVuZGVyZWRSYW5nZVN1YmplY3QsdGhpcy5fdG90YWxDb250ZW50U2l6ZT0wLHRoaXMuX3RvdGFsQ29udGVudFdpZHRoPSIiLHRoaXMuX3RvdGFsQ29udGVudEhlaWdodD0iIix0aGlzLl9yZW5kZXJlZFJhbmdlPXtzdGFydDowLGVuZDowfSx0aGlzLl9kYXRhTGVuZ3RoPTAsdGhpcy5fdmlld3BvcnRTaXplPTAsdGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0PTAsdGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0TmVlZHNSZXdyaXRlPSExLHRoaXMuX2lzQ2hhbmdlRGV0ZWN0aW9uUGVuZGluZz0hMSx0aGlzLl9ydW5BZnRlckNoYW5nZURldGVjdGlvbj1bXSx0aGlzLl92aWV3cG9ydENoYW5nZXM9bC5FTVBUWSwhbyYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpKXRocm93IEVycm9yKCdFcnJvcjogY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0IHJlcXVpcmVzIHRoZSAiaXRlbVNpemUiIHByb3BlcnR5IHRvIGJlIHNldC4nKTt0aGlzLl92aWV3cG9ydENoYW5nZXM9ci5jaGFuZ2UoKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5jaGVja1ZpZXdwb3J0U2l6ZSgpfSkpfWdldCBvcmllbnRhdGlvbigpe3JldHVybiB0aGlzLl9vcmllbnRhdGlvbn1zZXQgb3JpZW50YXRpb24odCl7dGhpcy5fb3JpZW50YXRpb24hPT10JiYodGhpcy5fb3JpZW50YXRpb249dCx0aGlzLl9jYWxjdWxhdGVTcGFjZXJTaXplKCkpfW5nT25Jbml0KCl7c3VwZXIubmdPbkluaXQoKSx0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCgpPT57dGhpcy5fbWVhc3VyZVZpZXdwb3J0U2l6ZSgpLHRoaXMuX3Njcm9sbFN0cmF0ZWd5LmF0dGFjaCh0aGlzKSx0aGlzLmVsZW1lbnRTY3JvbGxlZCgpLnBpcGUoY24obnVsbCksb2UoMCwkSCkpLnN1YnNjcmliZSgoKCk9PnRoaXMuX3Njcm9sbFN0cmF0ZWd5Lm9uQ29udGVudFNjcm9sbGVkKCkpKSx0aGlzLl9tYXJrQ2hhbmdlRGV0ZWN0aW9uTmVlZGVkKCl9KSkpKX1uZ09uRGVzdHJveSgpe3RoaXMuZGV0YWNoKCksdGhpcy5fc2Nyb2xsU3RyYXRlZ3kuZGV0YWNoKCksdGhpcy5fcmVuZGVyZWRSYW5nZVN1YmplY3QuY29tcGxldGUoKSx0aGlzLl9kZXRhY2hlZFN1YmplY3QuY29tcGxldGUoKSx0aGlzLl92aWV3cG9ydENoYW5nZXMudW5zdWJzY3JpYmUoKSxzdXBlci5uZ09uRGVzdHJveSgpfWF0dGFjaCh0KXtpZih0aGlzLl9mb3JPZiYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpKXRocm93IEVycm9yKCJDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQgaXMgYWxyZWFkeSBhdHRhY2hlZC4iKTt0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKCk9Pnt0aGlzLl9mb3JPZj10LHRoaXMuX2Zvck9mLmRhdGFTdHJlYW0ucGlwZSh1bih0aGlzLl9kZXRhY2hlZFN1YmplY3QpKS5zdWJzY3JpYmUoKHQ9Pntjb25zdCBlPXQubGVuZ3RoO2UhPT10aGlzLl9kYXRhTGVuZ3RoJiYodGhpcy5fZGF0YUxlbmd0aD1lLHRoaXMuX3Njcm9sbFN0cmF0ZWd5Lm9uRGF0YUxlbmd0aENoYW5nZWQoKSksdGhpcy5fZG9DaGFuZ2VEZXRlY3Rpb24oKX0pKX0pKX1kZXRhY2goKXt0aGlzLl9mb3JPZj1udWxsLHRoaXMuX2RldGFjaGVkU3ViamVjdC5uZXh0KCl9Z2V0RGF0YUxlbmd0aCgpe3JldHVybiB0aGlzLl9kYXRhTGVuZ3RofWdldFZpZXdwb3J0U2l6ZSgpe3JldHVybiB0aGlzLl92aWV3cG9ydFNpemV9Z2V0UmVuZGVyZWRSYW5nZSgpe3JldHVybiB0aGlzLl9yZW5kZXJlZFJhbmdlfXNldFRvdGFsQ29udGVudFNpemUodCl7dGhpcy5fdG90YWxDb250ZW50U2l6ZSE9PXQmJih0aGlzLl90b3RhbENvbnRlbnRTaXplPXQsdGhpcy5fY2FsY3VsYXRlU3BhY2VyU2l6ZSgpLHRoaXMuX21hcmtDaGFuZ2VEZXRlY3Rpb25OZWVkZWQoKSl9c2V0UmVuZGVyZWRSYW5nZSh0KXsoCi8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpmdW5jdGlvbiBlKHQsbil7cmV0dXJuIHQuc3RhcnQ9PW4uc3RhcnQmJnQuZW5kPT1uLmVuZH0pKHRoaXMuX3JlbmRlcmVkUmFuZ2UsdCl8fCh0aGlzLl9yZW5kZXJlZFJhbmdlU3ViamVjdC5uZXh0KHRoaXMuX3JlbmRlcmVkUmFuZ2U9dCksdGhpcy5fbWFya0NoYW5nZURldGVjdGlvbk5lZWRlZCgoKCk9PnRoaXMuX3Njcm9sbFN0cmF0ZWd5Lm9uQ29udGVudFJlbmRlcmVkKCkpKSl9Z2V0T2Zmc2V0VG9SZW5kZXJlZENvbnRlbnRTdGFydCgpe3JldHVybiB0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXROZWVkc1Jld3JpdGU/bnVsbDp0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXR9c2V0UmVuZGVyZWRDb250ZW50T2Zmc2V0KHQsZT0idG8tc3RhcnQiKXtjb25zdCBuPSJob3Jpem9udGFsIj09dGhpcy5vcmllbnRhdGlvbixvPW4/IlgiOiJZIjtsZXQgaT1gdHJhbnNsYXRlJHtvfSgke051bWJlcigobiYmdGhpcy5kaXImJiJydGwiPT10aGlzLmRpci52YWx1ZT8tMToxKSp0KX1weClgO3RoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldD10LCJ0by1lbmQiPT09ZSYmKGkrPWAgdHJhbnNsYXRlJHtvfSgtMTAwJSlgLHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldE5lZWRzUmV3cml0ZT0hMCksdGhpcy5fcmVuZGVyZWRDb250ZW50VHJhbnNmb3JtIT1pJiYodGhpcy5fcmVuZGVyZWRDb250ZW50VHJhbnNmb3JtPWksdGhpcy5fbWFya0NoYW5nZURldGVjdGlvbk5lZWRlZCgoKCk9Pnt0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXROZWVkc1Jld3JpdGU/KHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldC09dGhpcy5tZWFzdXJlUmVuZGVyZWRDb250ZW50U2l6ZSgpLHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldE5lZWRzUmV3cml0ZT0hMSx0aGlzLnNldFJlbmRlcmVkQ29udGVudE9mZnNldCh0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXQpKTp0aGlzLl9zY3JvbGxTdHJhdGVneS5vblJlbmRlcmVkT2Zmc2V0Q2hhbmdlZCgpfSkpKX1zY3JvbGxUb09mZnNldCh0LGU9ImF1dG8iKXtjb25zdCBuPXtiZWhhdmlvcjplfTsiaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uP24uc3RhcnQ9dDpuLnRvcD10LHRoaXMuc2Nyb2xsVG8obil9c2Nyb2xsVG9JbmRleCh0LGU9ImF1dG8iKXt0aGlzLl9zY3JvbGxTdHJhdGVneS5zY3JvbGxUb0luZGV4KHQsZSl9bWVhc3VyZVNjcm9sbE9mZnNldCh0KXtyZXR1cm4gc3VwZXIubWVhc3VyZVNjcm9sbE9mZnNldCh0fHwoImhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbj8ic3RhcnQiOiJ0b3AiKSl9bWVhc3VyZVJlbmRlcmVkQ29udGVudFNpemUoKXtjb25zdCB0PXRoaXMuX2NvbnRlbnRXcmFwcGVyLm5hdGl2ZUVsZW1lbnQ7cmV0dXJuImhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbj90Lm9mZnNldFdpZHRoOnQub2Zmc2V0SGVpZ2h0fW1lYXN1cmVSYW5nZVNpemUodCl7cmV0dXJuIHRoaXMuX2Zvck9mP3RoaXMuX2Zvck9mLm1lYXN1cmVSYW5nZVNpemUodCx0aGlzLm9yaWVudGF0aW9uKTowfWNoZWNrVmlld3BvcnRTaXplKCl7dGhpcy5fbWVhc3VyZVZpZXdwb3J0U2l6ZSgpLHRoaXMuX3Njcm9sbFN0cmF0ZWd5Lm9uRGF0YUxlbmd0aENoYW5nZWQoKX1fbWVhc3VyZVZpZXdwb3J0U2l6ZSgpe2NvbnN0IHQ9dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7dGhpcy5fdmlld3BvcnRTaXplPSJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb24/dC5jbGllbnRXaWR0aDp0LmNsaWVudEhlaWdodH1fbWFya0NoYW5nZURldGVjdGlvbk5lZWRlZCh0KXt0JiZ0aGlzLl9ydW5BZnRlckNoYW5nZURldGVjdGlvbi5wdXNoKHQpLHRoaXMuX2lzQ2hhbmdlRGV0ZWN0aW9uUGVuZGluZ3x8KHRoaXMuX2lzQ2hhbmdlRGV0ZWN0aW9uUGVuZGluZz0hMCx0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCgpPT57dGhpcy5fZG9DaGFuZ2VEZXRlY3Rpb24oKX0pKSkpKX1fZG9DaGFuZ2VEZXRlY3Rpb24oKXt0aGlzLl9pc0NoYW5nZURldGVjdGlvblBlbmRpbmc9ITEsdGhpcy5fY29udGVudFdyYXBwZXIubmF0aXZlRWxlbWVudC5zdHlsZS50cmFuc2Zvcm09dGhpcy5fcmVuZGVyZWRDb250ZW50VHJhbnNmb3JtLHRoaXMubmdab25lLnJ1bigoKCk9PnRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKSk7Y29uc3QgdD10aGlzLl9ydW5BZnRlckNoYW5nZURldGVjdGlvbjt0aGlzLl9ydW5BZnRlckNoYW5nZURldGVjdGlvbj1bXTtmb3IoY29uc3QgZSBvZiB0KWUoKX1fY2FsY3VsYXRlU3BhY2VyU2l6ZSgpe3RoaXMuX3RvdGFsQ29udGVudEhlaWdodD0iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uPyIiOmAke3RoaXMuX3RvdGFsQ29udGVudFNpemV9cHhgLHRoaXMuX3RvdGFsQ29udGVudFdpZHRoPSJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb24/YCR7dGhpcy5fdG90YWxDb250ZW50U2l6ZX1weGA6IiJ9fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KZnVuY3Rpb24gZUYodCxlLG4pe2lmKCFuLmdldEJvdW5kaW5nQ2xpZW50UmVjdClyZXR1cm4gMDtjb25zdCBvPW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuImhvcml6b250YWwiPT09dD8ic3RhcnQiPT09ZT9vLmxlZnQ6by5yaWdodDoic3RhcnQiPT09ZT9vLnRvcDpvLmJvdHRvbX10Ri7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8dEYpKE11KGNoKSxNdShIaCksTXUodEMpLE11KFlILDgpLE11KE16LDgpLE11KEtIKSxNdShRSCkpfSx0Ri7JtWNtcD1Vbyh7dHlwZTp0RixzZWxlY3RvcnM6W1siY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0Il1dLHZpZXdRdWVyeTpmdW5jdGlvbiB0KGUsbil7aWYoMSZlJiZXYihHSCwzKSwyJmUpe2xldCB0O1ViKHQ9WWIoKSkmJihuLl9jb250ZW50V3JhcHBlcj10LmZpcnN0KX19LGhvc3RBdHRyczpbMSwiY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0Il0saG9zdFZhcnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezImZSYmYWYoImNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIiwiaG9yaXpvbnRhbCI9PT1uLm9yaWVudGF0aW9uKSgiY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLXZlcnRpY2FsIiwiaG9yaXpvbnRhbCIhPT1uLm9yaWVudGF0aW9uKX0saW5wdXRzOntvcmllbnRhdGlvbjoib3JpZW50YXRpb24ifSxvdXRwdXRzOntzY3JvbGxlZEluZGV4Q2hhbmdlOiJzY3JvbGxlZEluZGV4Q2hhbmdlIn0sZmVhdHVyZXM6W2loKFt7cHJvdmlkZTpKSCx1c2VFeGlzdGluZzp0Rn1dKSxnbV0sbmdDb250ZW50U2VsZWN0b3JzOlsiKiJdLGRlY2xzOjQsdmFyczo0LGNvbnN0czpbWzEsImNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXIiXSxbImNvbnRlbnRXcmFwcGVyIiwiIl0sWzEsImNkay12aXJ0dWFsLXNjcm9sbC1zcGFjZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKFZ1KCksT3UoMCwiZGl2IiwwLDEpLGp1KDIpLFB1KCksd3UoMywiZGl2IiwyKSksMiZlJiYoSmMoMyksb2YoIndpZHRoIixuLl90b3RhbENvbnRlbnRXaWR0aCkoImhlaWdodCIsbi5fdG90YWxDb250ZW50SGVpZ2h0KSl9LHN0eWxlczpbImNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydHtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmF1dG87Y29udGFpbjpzdHJpY3Q7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCk7d2lsbC1jaGFuZ2U6c2Nyb2xsLXBvc2l0aW9uOy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNofS5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVye3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDtjb250YWluOmNvbnRlbnR9W2Rpcj1ydGxdIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVye3JpZ2h0OjA7bGVmdDphdXRvfS5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24taG9yaXpvbnRhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcnttaW4taGVpZ2h0OjEwMCV9LmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPmRsOm5vdChbY2RrVmlydHVhbEZvcl0pLC5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24taG9yaXpvbnRhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj5vbDpub3QoW2Nka1ZpcnR1YWxGb3JdKSwuY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLWhvcml6b250YWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+dGFibGU6bm90KFtjZGtWaXJ0dWFsRm9yXSksLmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPnVsOm5vdChbY2RrVmlydHVhbEZvcl0pe3BhZGRpbmctbGVmdDowO3BhZGRpbmctcmlnaHQ6MDttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowO2JvcmRlci1sZWZ0LXdpZHRoOjA7Ym9yZGVyLXJpZ2h0LXdpZHRoOjA7b3V0bGluZTpub25lfS5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24tdmVydGljYWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXJ7bWluLXdpZHRoOjEwMCV9LmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi12ZXJ0aWNhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj5kbDpub3QoW2Nka1ZpcnR1YWxGb3JdKSwuY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLXZlcnRpY2FsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPm9sOm5vdChbY2RrVmlydHVhbEZvcl0pLC5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24tdmVydGljYWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+dGFibGU6bm90KFtjZGtWaXJ0dWFsRm9yXSksLmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi12ZXJ0aWNhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj51bDpub3QoW2Nka1ZpcnR1YWxGb3JdKXtwYWRkaW5nLXRvcDowO3BhZGRpbmctYm90dG9tOjA7bWFyZ2luLXRvcDowO21hcmdpbi1ib3R0b206MDtib3JkZXItdG9wLXdpZHRoOjA7Ym9yZGVyLWJvdHRvbS13aWR0aDowO291dGxpbmU6bm9uZX0uY2RrLXZpcnR1YWwtc2Nyb2xsLXNwYWNlcntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjFweDt3aWR0aDoxcHg7dHJhbnNmb3JtLW9yaWdpbjowIDB9W2Rpcj1ydGxdIC5jZGstdmlydHVhbC1zY3JvbGwtc3BhY2Vye3JpZ2h0OjA7bGVmdDphdXRvO3RyYW5zZm9ybS1vcmlnaW46MTAwJSAwfVxuIl0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksdEYuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpjaH0se3R5cGU6SGh9LHt0eXBlOnRDfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W1lIXX1dfSx7dHlwZTpNeixkZWNvcmF0b3JzOlt7dHlwZTpfc31dfSx7dHlwZTpLSH0se3R5cGU6UUh9XSx0Ri5wcm9wRGVjb3JhdG9ycz17b3JpZW50YXRpb246W3t0eXBlOnlffV0sc2Nyb2xsZWRJbmRleENoYW5nZTpbe3R5cGU6X199XSxfY29udGVudFdyYXBwZXI6W3t0eXBlOkZyLGFyZ3M6WyJjb250ZW50V3JhcHBlciIse3N0YXRpYzohMH1dfV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIodEYsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoiY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0Iix0ZW1wbGF0ZTonXHgzYyEtLVxuICBXcmFwIHRoZSByZW5kZXJlZCBjb250ZW50IGluIGFuIGVsZW1lbnQgdGhhdCB3aWxsIGJlIHVzZWQgdG8gb2Zmc2V0IGl0IGJhc2VkIG9uIHRoZSBzY3JvbGxcbiAgcG9zaXRpb24uXG4tLVx4M2VcbjxkaXYgI2NvbnRlbnRXcmFwcGVyIGNsYXNzPSJjZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyIj5cbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9kaXY+XG5ceDNjIS0tXG4gIFNwYWNlciB1c2VkIHRvIGZvcmNlIHRoZSBzY3JvbGxpbmcgY29udGFpbmVyIHRvIHRoZSBjb3JyZWN0IHNpemUgZm9yIHRoZSAqdG90YWwqIG51bWJlciBvZiBpdGVtc1xuICBzbyB0aGF0IHRoZSBzY3JvbGxiYXIgY2FwdHVyZXMgdGhlIHNpemUgb2YgdGhlIGVudGlyZSBkYXRhIHNldC5cbi0tXHgzZVxuPGRpdiBjbGFzcz0iY2RrLXZpcnR1YWwtc2Nyb2xsLXNwYWNlciJcbiAgICAgW3N0eWxlLndpZHRoXT0iX3RvdGFsQ29udGVudFdpZHRoIiBbc3R5bGUuaGVpZ2h0XT0iX3RvdGFsQ29udGVudEhlaWdodCI+PC9kaXY+XG4nLGhvc3Q6e2NsYXNzOiJjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQiLCJbY2xhc3MuY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLWhvcml6b250YWxdIjonb3JpZW50YXRpb24gPT09ICJob3Jpem9udGFsIicsIltjbGFzcy5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24tdmVydGljYWxdIjonb3JpZW50YXRpb24gIT09ICJob3Jpem9udGFsIid9LGVuY2Fwc3VsYXRpb246UG8uTm9uZSxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNoLHByb3ZpZGVyczpbe3Byb3ZpZGU6SkgsdXNlRXhpc3Rpbmc6dEZ9XSxzdHlsZXM6WyJjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnR7ZGlzcGxheTpibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzphdXRvO2NvbnRhaW46c3RyaWN0O3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApO3dpbGwtY2hhbmdlOnNjcm9sbC1wb3NpdGlvbjstd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzp0b3VjaH0uY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7Y29udGFpbjpjb250ZW50fVtkaXI9cnRsXSAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcntyaWdodDowO2xlZnQ6YXV0b30uY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLWhvcml6b250YWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXJ7bWluLWhlaWdodDoxMDAlfS5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24taG9yaXpvbnRhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj5kbDpub3QoW2Nka1ZpcnR1YWxGb3JdKSwuY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLWhvcml6b250YWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+b2w6bm90KFtjZGtWaXJ0dWFsRm9yXSksLmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPnRhYmxlOm5vdChbY2RrVmlydHVhbEZvcl0pLC5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24taG9yaXpvbnRhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj51bDpub3QoW2Nka1ZpcnR1YWxGb3JdKXtwYWRkaW5nLWxlZnQ6MDtwYWRkaW5nLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MDtib3JkZXItbGVmdC13aWR0aDowO2JvcmRlci1yaWdodC13aWR0aDowO291dGxpbmU6bm9uZX0uY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLXZlcnRpY2FsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVye21pbi13aWR0aDoxMDAlfS5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24tdmVydGljYWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+ZGw6bm90KFtjZGtWaXJ0dWFsRm9yXSksLmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi12ZXJ0aWNhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj5vbDpub3QoW2Nka1ZpcnR1YWxGb3JdKSwuY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLXZlcnRpY2FsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPnRhYmxlOm5vdChbY2RrVmlydHVhbEZvcl0pLC5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24tdmVydGljYWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+dWw6bm90KFtjZGtWaXJ0dWFsRm9yXSl7cGFkZGluZy10b3A6MDtwYWRkaW5nLWJvdHRvbTowO21hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOjA7Ym9yZGVyLXRvcC13aWR0aDowO2JvcmRlci1ib3R0b20td2lkdGg6MDtvdXRsaW5lOm5vbmV9LmNkay12aXJ0dWFsLXNjcm9sbC1zcGFjZXJ7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO2hlaWdodDoxcHg7d2lkdGg6MXB4O3RyYW5zZm9ybS1vcmlnaW46MCAwfVtkaXI9cnRsXSAuY2RrLXZpcnR1YWwtc2Nyb2xsLXNwYWNlcntyaWdodDowO2xlZnQ6YXV0bzt0cmFuc2Zvcm0tb3JpZ2luOjEwMCUgMH1cbiJdfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Y2h9LHt0eXBlOkhofSx7dHlwZTp0Q30se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltZSF19XX0se3R5cGU6TXosZGVjb3JhdG9yczpbe3R5cGU6X3N9XX0se3R5cGU6S0h9LHt0eXBlOlFIfV19KSx7c2Nyb2xsZWRJbmRleENoYW5nZTpbe3R5cGU6X199XSxvcmllbnRhdGlvbjpbe3R5cGU6eV99XSxfY29udGVudFdyYXBwZXI6W3t0eXBlOkZyLGFyZ3M6WyJjb250ZW50V3JhcHBlciIse3N0YXRpYzohMH1dfV19KTtjbGFzcyBuRntjb25zdHJ1Y3Rvcih0LGUsbixvLGksYSl7dGhpcy5fdmlld0NvbnRhaW5lclJlZj10LHRoaXMuX3RlbXBsYXRlPWUsdGhpcy5fZGlmZmVycz1uLHRoaXMuX3ZpZXdSZXBlYXRlcj1vLHRoaXMuX3ZpZXdwb3J0PWksdGhpcy52aWV3Q2hhbmdlPW5ldyB4LHRoaXMuX2RhdGFTb3VyY2VDaGFuZ2VzPW5ldyB4LHRoaXMuZGF0YVN0cmVhbT10aGlzLl9kYXRhU291cmNlQ2hhbmdlcy5waXBlKGNuKG51bGwpLChmdW5jdGlvbiByKCl7cmV0dXJuIHQ9PnQubGlmdChuZXcgUWUpfSkoKSxkbigoKFt0LGVdKT0+dGhpcy5fY2hhbmdlRGF0YVNvdXJjZSh0LGUpKSksYW4oMSkpLHRoaXMuX2RpZmZlcj1udWxsLHRoaXMuX25lZWRzVXBkYXRlPSExLHRoaXMuX2Rlc3Ryb3llZD1uZXcgeCx0aGlzLmRhdGFTdHJlYW0uc3Vic2NyaWJlKCh0PT57dGhpcy5fZGF0YT10LHRoaXMuX29uUmVuZGVyZWREYXRhQ2hhbmdlKCl9KSksdGhpcy5fdmlld3BvcnQucmVuZGVyZWRSYW5nZVN0cmVhbS5waXBlKHVuKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgodD0+e3RoaXMuX3JlbmRlcmVkUmFuZ2U9dCxhLnJ1bigoKCk9PnRoaXMudmlld0NoYW5nZS5uZXh0KHRoaXMuX3JlbmRlcmVkUmFuZ2UpKSksdGhpcy5fb25SZW5kZXJlZERhdGFDaGFuZ2UoKX0pKSx0aGlzLl92aWV3cG9ydC5hdHRhY2godGhpcyl9Z2V0IGNka1ZpcnR1YWxGb3JPZigpe3JldHVybiB0aGlzLl9jZGtWaXJ0dWFsRm9yT2Z9c2V0IGNka1ZpcnR1YWxGb3JPZih0KXt0aGlzLl9jZGtWaXJ0dWFsRm9yT2Y9dCxGSCh0KT90aGlzLl9kYXRhU291cmNlQ2hhbmdlcy5uZXh0KHQpOnRoaXMuX2RhdGFTb3VyY2VDaGFuZ2VzLm5leHQobmV3IExIKHV0KHQpP3Q6QXJyYXkuZnJvbSh0fHxbXSkpKX1nZXQgY2RrVmlydHVhbEZvclRyYWNrQnkoKXtyZXR1cm4gdGhpcy5fY2RrVmlydHVhbEZvclRyYWNrQnl9c2V0IGNka1ZpcnR1YWxGb3JUcmFja0J5KHQpe3RoaXMuX25lZWRzVXBkYXRlPSEwLHRoaXMuX2Nka1ZpcnR1YWxGb3JUcmFja0J5PXQ/KGUsbik9PnQoZSsodGhpcy5fcmVuZGVyZWRSYW5nZT90aGlzLl9yZW5kZXJlZFJhbmdlLnN0YXJ0OjApLG4pOnZvaWQgMH1zZXQgY2RrVmlydHVhbEZvclRlbXBsYXRlKHQpe3QmJih0aGlzLl9uZWVkc1VwZGF0ZT0hMCx0aGlzLl90ZW1wbGF0ZT10KX1nZXQgY2RrVmlydHVhbEZvclRlbXBsYXRlQ2FjaGVTaXplKCl7cmV0dXJuIHRoaXMuX3ZpZXdSZXBlYXRlci52aWV3Q2FjaGVTaXplfXNldCBjZGtWaXJ0dWFsRm9yVGVtcGxhdGVDYWNoZVNpemUodCl7dGhpcy5fdmlld1JlcGVhdGVyLnZpZXdDYWNoZVNpemU9c0kodCl9bWVhc3VyZVJhbmdlU2l6ZSh0LGUpe2lmKHQuc3RhcnQ+PXQuZW5kKXJldHVybiAwO2lmKCh0LnN0YXJ0PHRoaXMuX3JlbmRlcmVkUmFuZ2Uuc3RhcnR8fHQuZW5kPnRoaXMuX3JlbmRlcmVkUmFuZ2UuZW5kKSYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpKXRocm93IEVycm9yKCJFcnJvcjogYXR0ZW1wdGVkIHRvIG1lYXN1cmUgYW4gaXRlbSB0aGF0IGlzbid0IHJlbmRlcmVkLiIpO2NvbnN0IG49dC5zdGFydC10aGlzLl9yZW5kZXJlZFJhbmdlLnN0YXJ0LG89dC5lbmQtdC5zdGFydDtsZXQgaSxhO2ZvcihsZXQgdD0wO3Q8bzt0Kyspe2NvbnN0IGU9dGhpcy5fdmlld0NvbnRhaW5lclJlZi5nZXQodCtuKTtpZihlJiZlLnJvb3ROb2Rlcy5sZW5ndGgpe2k9YT1lLnJvb3ROb2Rlc1swXTticmVha319Zm9yKGxldCB0PW8tMTt0Pi0xO3QtLSl7Y29uc3QgZT10aGlzLl92aWV3Q29udGFpbmVyUmVmLmdldCh0K24pO2lmKGUmJmUucm9vdE5vZGVzLmxlbmd0aCl7YT1lLnJvb3ROb2Rlc1tlLnJvb3ROb2Rlcy5sZW5ndGgtMV07YnJlYWt9fXJldHVybiBpJiZhP2VGKGUsImVuZCIsYSktZUYoZSwic3RhcnQiLGkpOjB9bmdEb0NoZWNrKCl7aWYodGhpcy5fZGlmZmVyJiZ0aGlzLl9uZWVkc1VwZGF0ZSl7Y29uc3QgdD10aGlzLl9kaWZmZXIuZGlmZih0aGlzLl9yZW5kZXJlZEl0ZW1zKTt0P3RoaXMuX2FwcGx5Q2hhbmdlcyh0KTp0aGlzLl91cGRhdGVDb250ZXh0KCksdGhpcy5fbmVlZHNVcGRhdGU9ITF9fW5nT25EZXN0cm95KCl7dGhpcy5fdmlld3BvcnQuZGV0YWNoKCksdGhpcy5fZGF0YVNvdXJjZUNoYW5nZXMubmV4dCh2b2lkIDApLHRoaXMuX2RhdGFTb3VyY2VDaGFuZ2VzLmNvbXBsZXRlKCksdGhpcy52aWV3Q2hhbmdlLmNvbXBsZXRlKCksdGhpcy5fZGVzdHJveWVkLm5leHQoKSx0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKSx0aGlzLl92aWV3UmVwZWF0ZXIuZGV0YWNoKCl9X29uUmVuZGVyZWREYXRhQ2hhbmdlKCl7dGhpcy5fcmVuZGVyZWRSYW5nZSYmKHRoaXMuX3JlbmRlcmVkSXRlbXM9dGhpcy5fZGF0YS5zbGljZSh0aGlzLl9yZW5kZXJlZFJhbmdlLnN0YXJ0LHRoaXMuX3JlbmRlcmVkUmFuZ2UuZW5kKSx0aGlzLl9kaWZmZXJ8fCh0aGlzLl9kaWZmZXI9dGhpcy5fZGlmZmVycy5maW5kKHRoaXMuX3JlbmRlcmVkSXRlbXMpLmNyZWF0ZSgoKHQsZSk9PnRoaXMuY2RrVmlydHVhbEZvclRyYWNrQnk/dGhpcy5jZGtWaXJ0dWFsRm9yVHJhY2tCeSh0LGUpOmUpKSksdGhpcy5fbmVlZHNVcGRhdGU9ITApfV9jaGFuZ2VEYXRhU291cmNlKHQsZSl7cmV0dXJuIHQmJnQuZGlzY29ubmVjdCh0aGlzKSx0aGlzLl9uZWVkc1VwZGF0ZT0hMCxlP2UuY29ubmVjdCh0aGlzKTpaKCl9X3VwZGF0ZUNvbnRleHQoKXtjb25zdCB0PXRoaXMuX2RhdGEubGVuZ3RoO2xldCBlPXRoaXMuX3ZpZXdDb250YWluZXJSZWYubGVuZ3RoO2Zvcig7ZS0tOyl7Y29uc3Qgbj10aGlzLl92aWV3Q29udGFpbmVyUmVmLmdldChlKTtuLmNvbnRleHQuaW5kZXg9dGhpcy5fcmVuZGVyZWRSYW5nZS5zdGFydCtlLG4uY29udGV4dC5jb3VudD10LHRoaXMuX3VwZGF0ZUNvbXB1dGVkQ29udGV4dFByb3BlcnRpZXMobi5jb250ZXh0KSxuLmRldGVjdENoYW5nZXMoKX19X2FwcGx5Q2hhbmdlcyh0KXt0aGlzLl92aWV3UmVwZWF0ZXIuYXBwbHlDaGFuZ2VzKHQsdGhpcy5fdmlld0NvbnRhaW5lclJlZiwoKHQsZSxuKT0+dGhpcy5fZ2V0RW1iZWRkZWRWaWV3QXJncyh0LG4pKSwodD0+dC5pdGVtKSksdC5mb3JFYWNoSWRlbnRpdHlDaGFuZ2UoKHQ9Pnt0aGlzLl92aWV3Q29udGFpbmVyUmVmLmdldCh0LmN1cnJlbnRJbmRleCkuY29udGV4dC4kaW1wbGljaXQ9dC5pdGVtfSkpO2NvbnN0IGU9dGhpcy5fZGF0YS5sZW5ndGg7bGV0IG49dGhpcy5fdmlld0NvbnRhaW5lclJlZi5sZW5ndGg7Zm9yKDtuLS07KXtjb25zdCB0PXRoaXMuX3ZpZXdDb250YWluZXJSZWYuZ2V0KG4pO3QuY29udGV4dC5pbmRleD10aGlzLl9yZW5kZXJlZFJhbmdlLnN0YXJ0K24sdC5jb250ZXh0LmNvdW50PWUsdGhpcy5fdXBkYXRlQ29tcHV0ZWRDb250ZXh0UHJvcGVydGllcyh0LmNvbnRleHQpfX1fdXBkYXRlQ29tcHV0ZWRDb250ZXh0UHJvcGVydGllcyh0KXt0LmZpcnN0PTA9PT10LmluZGV4LHQubGFzdD10LmluZGV4PT09dC5jb3VudC0xLHQuZXZlbj10LmluZGV4JTI9PTAsdC5vZGQ9IXQuZXZlbn1fZ2V0RW1iZWRkZWRWaWV3QXJncyh0LGUpe3JldHVybnt0ZW1wbGF0ZVJlZjp0aGlzLl90ZW1wbGF0ZSxjb250ZXh0OnskaW1wbGljaXQ6dC5pdGVtLGNka1ZpcnR1YWxGb3JPZjp0aGlzLl9jZGtWaXJ0dWFsRm9yT2YsaW5kZXg6LTEsY291bnQ6LTEsZmlyc3Q6ITEsbGFzdDohMSxvZGQ6ITEsZXZlbjohMX0saW5kZXg6ZX19fW5GLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxuRikoTXUoWGgpLE11KFVoKSxNdShFaCksTXUoV0gpLE11KHRGLDQpLE11KHRDKSl9LG5GLsm1ZGlyPUpvKHt0eXBlOm5GLHNlbGVjdG9yczpbWyIiLCJjZGtWaXJ0dWFsRm9yIiwiIiwiY2RrVmlydHVhbEZvck9mIiwiIl1dLGlucHV0czp7Y2RrVmlydHVhbEZvck9mOiJjZGtWaXJ0dWFsRm9yT2YiLGNka1ZpcnR1YWxGb3JUcmFja0J5OiJjZGtWaXJ0dWFsRm9yVHJhY2tCeSIsY2RrVmlydHVhbEZvclRlbXBsYXRlOiJjZGtWaXJ0dWFsRm9yVGVtcGxhdGUiLGNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZToiY2RrVmlydHVhbEZvclRlbXBsYXRlQ2FjaGVTaXplIn0sZmVhdHVyZXM6W2loKFt7cHJvdmlkZTpXSCx1c2VDbGFzczpWSH1dKV19KSxuRi5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOlhofSx7dHlwZTpVaH0se3R5cGU6RWh9LHt0eXBlOlZILGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W1dIXX1dfSx7dHlwZTp0RixkZWNvcmF0b3JzOlt7dHlwZTpNc31dfSx7dHlwZTp0Q31dLG5GLnByb3BEZWNvcmF0b3JzPXtjZGtWaXJ0dWFsRm9yT2Y6W3t0eXBlOnlffV0sY2RrVmlydHVhbEZvclRyYWNrQnk6W3t0eXBlOnlffV0sY2RrVmlydHVhbEZvclRlbXBsYXRlOlt7dHlwZTp5X31dLGNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZTpbe3R5cGU6eV99XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihuRixbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJbY2RrVmlydHVhbEZvcl1bY2RrVmlydHVhbEZvck9mXSIscHJvdmlkZXJzOlt7cHJvdmlkZTpXSCx1c2VDbGFzczpWSH1dfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6WGh9LHt0eXBlOlVofSx7dHlwZTpFaH0se3R5cGU6VkgsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbV0hdfV19LHt0eXBlOnRGLGRlY29yYXRvcnM6W3t0eXBlOk1zfV19LHt0eXBlOnRDfV19KSx7Y2RrVmlydHVhbEZvck9mOlt7dHlwZTp5X31dLGNka1ZpcnR1YWxGb3JUcmFja0J5Olt7dHlwZTp5X31dLGNka1ZpcnR1YWxGb3JUZW1wbGF0ZTpbe3R5cGU6eV99XSxjZGtWaXJ0dWFsRm9yVGVtcGxhdGVDYWNoZVNpemU6W3t0eXBlOnlffV19KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIG9Ge31vRi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8b0YpfSxvRi7JtW1vZD1abyh7dHlwZTpvRn0pLG9GLsm1aW5qPWNvKHt9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKG9GLHtkZWNsYXJhdGlvbnM6W0pIXSxleHBvcnRzOltKSF19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKG9GLFt7dHlwZTprXyxhcmdzOlt7ZXhwb3J0czpbSkhdLGRlY2xhcmF0aW9uczpbSkhdfV19XSxudWxsLG51bGwpO2NsYXNzIGlGe31mdW5jdGlvbiBhRigpe3Rocm93IEVycm9yKCJIb3N0IGFscmVhZHkgaGFzIGEgcG9ydGFsIGF0dGFjaGVkIil9aUYuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGlGKX0saUYuybVtb2Q9Wm8oe3R5cGU6aUZ9KSxpRi7JtWluaj1jbyh7aW1wb3J0czpbW3h6LGdJLG9GXSx4eixvRl19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKGlGLHtkZWNsYXJhdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm5bWEgsbkYsdEZdfSxpbXBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW3h6LGdJLG9GXX0sZXhwb3J0czpmdW5jdGlvbigpe3JldHVyblt4eixvRixYSCxuRix0Rl19fSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihpRixbe3R5cGU6a18sYXJnczpbe2ltcG9ydHM6W3h6LGdJLG9GXSxleHBvcnRzOlt4eixvRixYSCxuRix0Rl0sZGVjbGFyYXRpb25zOltYSCxuRix0Rl19XX1dLG51bGwsbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyByRnthdHRhY2godCl7cmV0dXJuKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiYobnVsbD09dCYmKGZ1bmN0aW9uIGUoKXt0aHJvdyBFcnJvcigiQXR0ZW1wdGluZyB0byBhdHRhY2ggYSBwb3J0YWwgdG8gYSBudWxsIFBvcnRhbE91dGxldCIpfSkoKSx0Lmhhc0F0dGFjaGVkKCkmJmFGKCkpLHRoaXMuX2F0dGFjaGVkSG9zdD10LHQuYXR0YWNoKHRoaXMpfWRldGFjaCgpe2xldCB0PXRoaXMuX2F0dGFjaGVkSG9zdDtudWxsIT10Pyh0aGlzLl9hdHRhY2hlZEhvc3Q9bnVsbCx0LmRldGFjaCgpKTooInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJihmdW5jdGlvbiBlKCl7dGhyb3cgRXJyb3IoIkF0dGVtcHRpbmcgdG8gZGV0YWNoIGEgcG9ydGFsIHRoYXQgaXMgbm90IGF0dGFjaGVkIHRvIGEgaG9zdCIpfSkoKX1nZXQgaXNBdHRhY2hlZCgpe3JldHVybiBudWxsIT10aGlzLl9hdHRhY2hlZEhvc3R9c2V0QXR0YWNoZWRIb3N0KHQpe3RoaXMuX2F0dGFjaGVkSG9zdD10fX1jbGFzcyBzRiBleHRlbmRzIHJGe2NvbnN0cnVjdG9yKHQsZSxuLG8pe3N1cGVyKCksdGhpcy5jb21wb25lbnQ9dCx0aGlzLnZpZXdDb250YWluZXJSZWY9ZSx0aGlzLmluamVjdG9yPW4sdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9b319Y2xhc3MgbEYgZXh0ZW5kcyByRntjb25zdHJ1Y3Rvcih0LGUsbil7c3VwZXIoKSx0aGlzLnRlbXBsYXRlUmVmPXQsdGhpcy52aWV3Q29udGFpbmVyUmVmPWUsdGhpcy5jb250ZXh0PW59Z2V0IG9yaWdpbigpe3JldHVybiB0aGlzLnRlbXBsYXRlUmVmLmVsZW1lbnRSZWZ9YXR0YWNoKHQsZT10aGlzLmNvbnRleHQpe3JldHVybiB0aGlzLmNvbnRleHQ9ZSxzdXBlci5hdHRhY2godCl9ZGV0YWNoKCl7cmV0dXJuIHRoaXMuY29udGV4dD12b2lkIDAsc3VwZXIuZGV0YWNoKCl9fWNsYXNzIGNGIGV4dGVuZHMgckZ7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLmVsZW1lbnQ9dCBpbnN0YW5jZW9mIGNoP3QubmF0aXZlRWxlbWVudDp0fX1jbGFzcyBkRntjb25zdHJ1Y3Rvcigpe3RoaXMuX2lzRGlzcG9zZWQ9ITEsdGhpcy5hdHRhY2hEb21Qb3J0YWw9bnVsbH1oYXNBdHRhY2hlZCgpe3JldHVybiEhdGhpcy5fYXR0YWNoZWRQb3J0YWx9YXR0YWNoKHQpe3JldHVybigidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmKHR8fChmdW5jdGlvbiBlKCl7dGhyb3cgRXJyb3IoIk11c3QgcHJvdmlkZSBhIHBvcnRhbCB0byBhdHRhY2giKX0pKCksdGhpcy5oYXNBdHRhY2hlZCgpJiZhRigpLHRoaXMuX2lzRGlzcG9zZWQmJihmdW5jdGlvbiBuKCl7dGhyb3cgRXJyb3IoIlRoaXMgUG9ydGFsT3V0bGV0IGhhcyBhbHJlYWR5IGJlZW4gZGlzcG9zZWQiKX0pKCkpLHQgaW5zdGFuY2VvZiBzRj8odGhpcy5fYXR0YWNoZWRQb3J0YWw9dCx0aGlzLmF0dGFjaENvbXBvbmVudFBvcnRhbCh0KSk6dCBpbnN0YW5jZW9mIGxGPyh0aGlzLl9hdHRhY2hlZFBvcnRhbD10LHRoaXMuYXR0YWNoVGVtcGxhdGVQb3J0YWwodCkpOnRoaXMuYXR0YWNoRG9tUG9ydGFsJiZ0IGluc3RhbmNlb2YgY0Y/KHRoaXMuX2F0dGFjaGVkUG9ydGFsPXQsdGhpcy5hdHRhY2hEb21Qb3J0YWwodCkpOnZvaWQoKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiYoZnVuY3Rpb24gbygpe3Rocm93IEVycm9yKCJBdHRlbXB0aW5nIHRvIGF0dGFjaCBhbiB1bmtub3duIFBvcnRhbCB0eXBlLiBCYXNlUG9ydGFsT3V0bGV0IGFjY2VwdHMgZWl0aGVyIGEgQ29tcG9uZW50UG9ydGFsIG9yIGEgVGVtcGxhdGVQb3J0YWwuIil9KSgpKX1kZXRhY2goKXt0aGlzLl9hdHRhY2hlZFBvcnRhbCYmKHRoaXMuX2F0dGFjaGVkUG9ydGFsLnNldEF0dGFjaGVkSG9zdChudWxsKSx0aGlzLl9hdHRhY2hlZFBvcnRhbD1udWxsKSx0aGlzLl9pbnZva2VEaXNwb3NlRm4oKX1kaXNwb3NlKCl7dGhpcy5oYXNBdHRhY2hlZCgpJiZ0aGlzLmRldGFjaCgpLHRoaXMuX2ludm9rZURpc3Bvc2VGbigpLHRoaXMuX2lzRGlzcG9zZWQ9ITB9c2V0RGlzcG9zZUZuKHQpe3RoaXMuX2Rpc3Bvc2VGbj10fV9pbnZva2VEaXNwb3NlRm4oKXt0aGlzLl9kaXNwb3NlRm4mJih0aGlzLl9kaXNwb3NlRm4oKSx0aGlzLl9kaXNwb3NlRm49bnVsbCl9fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jbGFzcyBwRiBleHRlbmRzIGRGe2NvbnN0cnVjdG9yKHQsZSxuLG8saSl7c3VwZXIoKSx0aGlzLm91dGxldEVsZW1lbnQ9dCx0aGlzLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9ZSx0aGlzLl9hcHBSZWY9bix0aGlzLl9kZWZhdWx0SW5qZWN0b3I9byx0aGlzLmF0dGFjaERvbVBvcnRhbD10PT57aWYoIXRoaXMuX2RvY3VtZW50JiYoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkpdGhyb3cgRXJyb3IoIkNhbm5vdCBhdHRhY2ggRE9NIHBvcnRhbCB3aXRob3V0IF9kb2N1bWVudCBjb25zdHJ1Y3RvciBwYXJhbWV0ZXIiKTtjb25zdCBlPXQuZWxlbWVudDtpZighZS5wYXJlbnROb2RlJiYoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkpdGhyb3cgRXJyb3IoIkRPTSBwb3J0YWwgY29udGVudCBtdXN0IGJlIGF0dGFjaGVkIHRvIGEgcGFyZW50IG5vZGUuIik7Y29uc3Qgbj10aGlzLl9kb2N1bWVudC5jcmVhdGVDb21tZW50KCJkb20tcG9ydGFsIik7ZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShuLGUpLHRoaXMub3V0bGV0RWxlbWVudC5hcHBlbmRDaGlsZChlKSx0aGlzLl9hdHRhY2hlZFBvcnRhbD10LHN1cGVyLnNldERpc3Bvc2VGbigoKCk9PntuLnBhcmVudE5vZGUmJm4ucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoZSxuKX0pKX0sdGhpcy5fZG9jdW1lbnQ9aX1hdHRhY2hDb21wb25lbnRQb3J0YWwodCl7Y29uc3QgZT0odC5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJ8fHRoaXMuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcikucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkodC5jb21wb25lbnQpO2xldCBuO3JldHVybiB0LnZpZXdDb250YWluZXJSZWY/KG49dC52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChlLHQudmlld0NvbnRhaW5lclJlZi5sZW5ndGgsdC5pbmplY3Rvcnx8dC52aWV3Q29udGFpbmVyUmVmLmluamVjdG9yKSx0aGlzLnNldERpc3Bvc2VGbigoKCk9Pm4uZGVzdHJveSgpKSkpOihuPWUuY3JlYXRlKHQuaW5qZWN0b3J8fHRoaXMuX2RlZmF1bHRJbmplY3RvciksdGhpcy5fYXBwUmVmLmF0dGFjaFZpZXcobi5ob3N0VmlldyksdGhpcy5zZXREaXNwb3NlRm4oKCgpPT57dGhpcy5fYXBwUmVmLmRldGFjaFZpZXcobi5ob3N0Vmlldyksbi5kZXN0cm95KCl9KSkpLHRoaXMub3V0bGV0RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9nZXRDb21wb25lbnRSb290Tm9kZShuKSksdGhpcy5fYXR0YWNoZWRQb3J0YWw9dCxufWF0dGFjaFRlbXBsYXRlUG9ydGFsKHQpe2xldCBlPXQudmlld0NvbnRhaW5lclJlZixuPWUuY3JlYXRlRW1iZWRkZWRWaWV3KHQudGVtcGxhdGVSZWYsdC5jb250ZXh0KTtyZXR1cm4gbi5yb290Tm9kZXMuZm9yRWFjaCgodD0+dGhpcy5vdXRsZXRFbGVtZW50LmFwcGVuZENoaWxkKHQpKSksbi5kZXRlY3RDaGFuZ2VzKCksdGhpcy5zZXREaXNwb3NlRm4oKCgpPT57bGV0IHQ9ZS5pbmRleE9mKG4pOy0xIT09dCYmZS5yZW1vdmUodCl9KSksdGhpcy5fYXR0YWNoZWRQb3J0YWw9dCxufWRpc3Bvc2UoKXtzdXBlci5kaXNwb3NlKCksbnVsbCE9dGhpcy5vdXRsZXRFbGVtZW50LnBhcmVudE5vZGUmJnRoaXMub3V0bGV0RWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMub3V0bGV0RWxlbWVudCl9X2dldENvbXBvbmVudFJvb3ROb2RlKHQpe3JldHVybiB0Lmhvc3RWaWV3LnJvb3ROb2Rlc1swXX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NsYXNzIG1GIGV4dGVuZHMgbEZ7Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpfX1tRi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8bUYpKE11KFVoKSxNdShYaCkpfSxtRi7JtWRpcj1Kbyh7dHlwZTptRixzZWxlY3RvcnM6W1siIiwiY2RrUG9ydGFsIiwiIl1dLGV4cG9ydEFzOlsiY2RrUG9ydGFsIl0sZmVhdHVyZXM6W2dtXX0pLG1GLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6VWh9LHt0eXBlOlhofV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihtRixbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJbY2RrUG9ydGFsXSIsZXhwb3J0QXM6ImNka1BvcnRhbCJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpVaH0se3R5cGU6WGh9XX0pLG51bGwpO2NsYXNzIHVGIGV4dGVuZHMgbUZ7fXVGLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIGZGKGV8fHVGKX0sdUYuybVkaXI9Sm8oe3R5cGU6dUYsc2VsZWN0b3JzOltbIiIsImNkay1wb3J0YWwiLCIiXSxbIiIsInBvcnRhbCIsIiJdXSxleHBvcnRBczpbImNka1BvcnRhbCJdLGZlYXR1cmVzOltpaChbe3Byb3ZpZGU6bUYsdXNlRXhpc3Rpbmc6dUZ9XSksZ21dfSk7Y29uc3QgZkY9dnIodUYpOygidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIodUYsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoiW2Nkay1wb3J0YWxdLCBbcG9ydGFsXSIsZXhwb3J0QXM6ImNka1BvcnRhbCIscHJvdmlkZXJzOlt7cHJvdmlkZTptRix1c2VFeGlzdGluZzp1Rn1dfV19XSxudWxsLG51bGwpO2NsYXNzIGdGIGV4dGVuZHMgZEZ7Y29uc3RydWN0b3IodCxlLG4pe3N1cGVyKCksdGhpcy5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyPXQsdGhpcy5fdmlld0NvbnRhaW5lclJlZj1lLHRoaXMuX2lzSW5pdGlhbGl6ZWQ9ITEsdGhpcy5hdHRhY2hlZD1uZXcgQWIsdGhpcy5hdHRhY2hEb21Qb3J0YWw9dD0+e2lmKCF0aGlzLl9kb2N1bWVudCYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpKXRocm93IEVycm9yKCJDYW5ub3QgYXR0YWNoIERPTSBwb3J0YWwgd2l0aG91dCBfZG9jdW1lbnQgY29uc3RydWN0b3IgcGFyYW1ldGVyIik7Y29uc3QgZT10LmVsZW1lbnQ7aWYoIWUucGFyZW50Tm9kZSYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpKXRocm93IEVycm9yKCJET00gcG9ydGFsIGNvbnRlbnQgbXVzdCBiZSBhdHRhY2hlZCB0byBhIHBhcmVudCBub2RlLiIpO2NvbnN0IG49dGhpcy5fZG9jdW1lbnQuY3JlYXRlQ29tbWVudCgiZG9tLXBvcnRhbCIpO3Quc2V0QXR0YWNoZWRIb3N0KHRoaXMpLGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobixlKSx0aGlzLl9nZXRSb290Tm9kZSgpLmFwcGVuZENoaWxkKGUpLHRoaXMuX2F0dGFjaGVkUG9ydGFsPXQsc3VwZXIuc2V0RGlzcG9zZUZuKCgoKT0+e24ucGFyZW50Tm9kZSYmbi5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChlLG4pfSkpfSx0aGlzLl9kb2N1bWVudD1ufWdldCBwb3J0YWwoKXtyZXR1cm4gdGhpcy5fYXR0YWNoZWRQb3J0YWx9c2V0IHBvcnRhbCh0KXsoIXRoaXMuaGFzQXR0YWNoZWQoKXx8dHx8dGhpcy5faXNJbml0aWFsaXplZCkmJih0aGlzLmhhc0F0dGFjaGVkKCkmJnN1cGVyLmRldGFjaCgpLHQmJnN1cGVyLmF0dGFjaCh0KSx0aGlzLl9hdHRhY2hlZFBvcnRhbD10KX1nZXQgYXR0YWNoZWRSZWYoKXtyZXR1cm4gdGhpcy5fYXR0YWNoZWRSZWZ9bmdPbkluaXQoKXt0aGlzLl9pc0luaXRpYWxpemVkPSEwfW5nT25EZXN0cm95KCl7c3VwZXIuZGlzcG9zZSgpLHRoaXMuX2F0dGFjaGVkUG9ydGFsPW51bGwsdGhpcy5fYXR0YWNoZWRSZWY9bnVsbH1hdHRhY2hDb21wb25lbnRQb3J0YWwodCl7dC5zZXRBdHRhY2hlZEhvc3QodGhpcyk7Y29uc3QgZT1udWxsIT10LnZpZXdDb250YWluZXJSZWY/dC52aWV3Q29udGFpbmVyUmVmOnRoaXMuX3ZpZXdDb250YWluZXJSZWYsbj0odC5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJ8fHRoaXMuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcikucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkodC5jb21wb25lbnQpLG89ZS5jcmVhdGVDb21wb25lbnQobixlLmxlbmd0aCx0LmluamVjdG9yfHxlLmluamVjdG9yKTtyZXR1cm4gZSE9PXRoaXMuX3ZpZXdDb250YWluZXJSZWYmJnRoaXMuX2dldFJvb3ROb2RlKCkuYXBwZW5kQ2hpbGQoby5ob3N0Vmlldy5yb290Tm9kZXNbMF0pLHN1cGVyLnNldERpc3Bvc2VGbigoKCk9Pm8uZGVzdHJveSgpKSksdGhpcy5fYXR0YWNoZWRQb3J0YWw9dCx0aGlzLl9hdHRhY2hlZFJlZj1vLHRoaXMuYXR0YWNoZWQuZW1pdChvKSxvfWF0dGFjaFRlbXBsYXRlUG9ydGFsKHQpe3Quc2V0QXR0YWNoZWRIb3N0KHRoaXMpO2NvbnN0IGU9dGhpcy5fdmlld0NvbnRhaW5lclJlZi5jcmVhdGVFbWJlZGRlZFZpZXcodC50ZW1wbGF0ZVJlZix0LmNvbnRleHQpO3JldHVybiBzdXBlci5zZXREaXNwb3NlRm4oKCgpPT50aGlzLl92aWV3Q29udGFpbmVyUmVmLmNsZWFyKCkpKSx0aGlzLl9hdHRhY2hlZFBvcnRhbD10LHRoaXMuX2F0dGFjaGVkUmVmPWUsdGhpcy5hdHRhY2hlZC5lbWl0KGUpLGV9X2dldFJvb3ROb2RlKCl7Y29uc3QgdD10aGlzLl92aWV3Q29udGFpbmVyUmVmLmVsZW1lbnQubmF0aXZlRWxlbWVudDtyZXR1cm4gdC5ub2RlVHlwZT09PXQuRUxFTUVOVF9OT0RFP3Q6dC5wYXJlbnROb2RlfX1nRi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8Z0YpKE11KHJoKSxNdShYaCksTXUoVUMpKX0sZ0YuybVkaXI9Sm8oe3R5cGU6Z0Ysc2VsZWN0b3JzOltbIiIsImNka1BvcnRhbE91dGxldCIsIiJdXSxpbnB1dHM6e3BvcnRhbDpbImNka1BvcnRhbE91dGxldCIsInBvcnRhbCJdfSxvdXRwdXRzOnthdHRhY2hlZDoiYXR0YWNoZWQifSxleHBvcnRBczpbImNka1BvcnRhbE91dGxldCJdLGZlYXR1cmVzOltnbV19KSxnRi5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOnJofSx7dHlwZTpYaH0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W1VDXX1dfV0sZ0YucHJvcERlY29yYXRvcnM9e2F0dGFjaGVkOlt7dHlwZTpfX31dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGdGLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6IltjZGtQb3J0YWxPdXRsZXRdIixleHBvcnRBczoiY2RrUG9ydGFsT3V0bGV0IixpbnB1dHM6WyJwb3J0YWw6IGNka1BvcnRhbE91dGxldCJdfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6cmh9LHt0eXBlOlhofSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbVUNdfV19XX0pLHthdHRhY2hlZDpbe3R5cGU6X199XX0pO2NsYXNzIGhGIGV4dGVuZHMgZ0Z7fWhGLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIGJGKGV8fGhGKX0saEYuybVkaXI9Sm8oe3R5cGU6aEYsc2VsZWN0b3JzOltbIiIsImNka1BvcnRhbEhvc3QiLCIiXSxbIiIsInBvcnRhbEhvc3QiLCIiXV0saW5wdXRzOntwb3J0YWw6WyJjZGtQb3J0YWxIb3N0IiwicG9ydGFsIl19LGV4cG9ydEFzOlsiY2RrUG9ydGFsSG9zdCJdLGZlYXR1cmVzOltpaChbe3Byb3ZpZGU6Z0YsdXNlRXhpc3Rpbmc6aEZ9XSksZ21dfSk7Y29uc3QgYkY9dnIoaEYpOygidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoaEYsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoiW2Nka1BvcnRhbEhvc3RdLCBbcG9ydGFsSG9zdF0iLGV4cG9ydEFzOiJjZGtQb3J0YWxIb3N0IixpbnB1dHM6WyJwb3J0YWw6IGNka1BvcnRhbEhvc3QiXSxwcm92aWRlcnM6W3twcm92aWRlOmdGLHVzZUV4aXN0aW5nOmhGfV19XX1dLG51bGwsbnVsbCk7Y2xhc3MgeUZ7fXlGLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHx5Ril9LHlGLsm1bW9kPVpvKHt0eXBlOnlGfSkseUYuybVpbmo9Y28oe30pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oeUYse2RlY2xhcmF0aW9uczpbbUYsZ0YsdUYsaEZdLGV4cG9ydHM6W21GLGdGLHVGLGhGXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoeUYsW3t0eXBlOmtfLGFyZ3M6W3tleHBvcnRzOlttRixnRix1RixoRl0sZGVjbGFyYXRpb25zOlttRixnRix1RixoRl19XX1dLG51bGwsbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCBfRj14SSgpO2NsYXNzIENGe2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5fdmlld3BvcnRSdWxlcj10LHRoaXMuX3ByZXZpb3VzSFRNTFN0eWxlcz17dG9wOiIiLGxlZnQ6IiJ9LHRoaXMuX2lzRW5hYmxlZD0hMSx0aGlzLl9kb2N1bWVudD1lfWF0dGFjaCgpe31lbmFibGUoKXtpZih0aGlzLl9jYW5CZUVuYWJsZWQoKSl7Y29uc3QgdD10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7dGhpcy5fcHJldmlvdXNTY3JvbGxQb3NpdGlvbj10aGlzLl92aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKSx0aGlzLl9wcmV2aW91c0hUTUxTdHlsZXMubGVmdD10LnN0eWxlLmxlZnR8fCIiLHRoaXMuX3ByZXZpb3VzSFRNTFN0eWxlcy50b3A9dC5zdHlsZS50b3B8fCIiLHQuc3R5bGUubGVmdD1kSSgtdGhpcy5fcHJldmlvdXNTY3JvbGxQb3NpdGlvbi5sZWZ0KSx0LnN0eWxlLnRvcD1kSSgtdGhpcy5fcHJldmlvdXNTY3JvbGxQb3NpdGlvbi50b3ApLHQuY2xhc3NMaXN0LmFkZCgiY2RrLWdsb2JhbC1zY3JvbGxibG9jayIpLHRoaXMuX2lzRW5hYmxlZD0hMH19ZGlzYWJsZSgpe2lmKHRoaXMuX2lzRW5hYmxlZCl7Y29uc3QgdD10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsZT10LnN0eWxlLG49dGhpcy5fZG9jdW1lbnQuYm9keS5zdHlsZSxvPWUuc2Nyb2xsQmVoYXZpb3J8fCIiLGk9bi5zY3JvbGxCZWhhdmlvcnx8IiI7dGhpcy5faXNFbmFibGVkPSExLGUubGVmdD10aGlzLl9wcmV2aW91c0hUTUxTdHlsZXMubGVmdCxlLnRvcD10aGlzLl9wcmV2aW91c0hUTUxTdHlsZXMudG9wLHQuY2xhc3NMaXN0LnJlbW92ZSgiY2RrLWdsb2JhbC1zY3JvbGxibG9jayIpLF9GJiYoZS5zY3JvbGxCZWhhdmlvcj1uLnNjcm9sbEJlaGF2aW9yPSJhdXRvIiksd2luZG93LnNjcm9sbCh0aGlzLl9wcmV2aW91c1Njcm9sbFBvc2l0aW9uLmxlZnQsdGhpcy5fcHJldmlvdXNTY3JvbGxQb3NpdGlvbi50b3ApLF9GJiYoZS5zY3JvbGxCZWhhdmlvcj1vLG4uc2Nyb2xsQmVoYXZpb3I9aSl9fV9jYW5CZUVuYWJsZWQoKXtpZih0aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCJjZGstZ2xvYmFsLXNjcm9sbGJsb2NrIil8fHRoaXMuX2lzRW5hYmxlZClyZXR1cm4hMTtjb25zdCB0PXRoaXMuX2RvY3VtZW50LmJvZHksZT10aGlzLl92aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2l6ZSgpO3JldHVybiB0LnNjcm9sbEhlaWdodD5lLmhlaWdodHx8dC5zY3JvbGxXaWR0aD5lLndpZHRofX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovZnVuY3Rpb24gTUYoKXtyZXR1cm4gRXJyb3IoIlNjcm9sbCBzdHJhdGVneSBoYXMgYWxyZWFkeSBiZWVuIGF0dGFjaGVkLiIpfWNsYXNzIHZGe2NvbnN0cnVjdG9yKHQsZSxuLG8pe3RoaXMuX3Njcm9sbERpc3BhdGNoZXI9dCx0aGlzLl9uZ1pvbmU9ZSx0aGlzLl92aWV3cG9ydFJ1bGVyPW4sdGhpcy5fY29uZmlnPW8sdGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uPW51bGwsdGhpcy5fZGV0YWNoPSgpPT57dGhpcy5kaXNhYmxlKCksdGhpcy5fb3ZlcmxheVJlZi5oYXNBdHRhY2hlZCgpJiZ0aGlzLl9uZ1pvbmUucnVuKCgoKT0+dGhpcy5fb3ZlcmxheVJlZi5kZXRhY2goKSkpfX1hdHRhY2godCl7aWYodGhpcy5fb3ZlcmxheVJlZiYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpKXRocm93IE1GKCk7dGhpcy5fb3ZlcmxheVJlZj10fWVuYWJsZSgpe2lmKHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbilyZXR1cm47Y29uc3QgdD10aGlzLl9zY3JvbGxEaXNwYXRjaGVyLnNjcm9sbGVkKDApO3RoaXMuX2NvbmZpZyYmdGhpcy5fY29uZmlnLnRocmVzaG9sZCYmdGhpcy5fY29uZmlnLnRocmVzaG9sZD4xPyh0aGlzLl9pbml0aWFsU2Nyb2xsUG9zaXRpb249dGhpcy5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCkudG9wLHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj10LnN1YnNjcmliZSgoKCk9Pntjb25zdCB0PXRoaXMuX3ZpZXdwb3J0UnVsZXIuZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpLnRvcDtNYXRoLmFicyh0LXRoaXMuX2luaXRpYWxTY3JvbGxQb3NpdGlvbik+dGhpcy5fY29uZmlnLnRocmVzaG9sZD90aGlzLl9kZXRhY2goKTp0aGlzLl9vdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKCl9KSkpOnRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj10LnN1YnNjcmliZSh0aGlzLl9kZXRhY2gpfWRpc2FibGUoKXt0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb24mJih0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb249bnVsbCl9ZGV0YWNoKCl7dGhpcy5kaXNhYmxlKCksdGhpcy5fb3ZlcmxheVJlZj1udWxsfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY2xhc3MgeEZ7ZW5hYmxlKCl7fWRpc2FibGUoKXt9YXR0YWNoKCl7fX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovZnVuY3Rpb24gT0YodCxlKXtyZXR1cm4gZS5zb21lKChlPT50LmJvdHRvbTxlLnRvcHx8dC50b3A+ZS5ib3R0b218fHQucmlnaHQ8ZS5sZWZ0fHx0LmxlZnQ+ZS5yaWdodCkpfWZ1bmN0aW9uIFBGKHQsZSl7cmV0dXJuIGUuc29tZSgoZT0+dC50b3A8ZS50b3B8fHQuYm90dG9tPmUuYm90dG9tfHx0LmxlZnQ8ZS5sZWZ0fHx0LnJpZ2h0PmUucmlnaHQpKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY2xhc3Mgd0Z7Y29uc3RydWN0b3IodCxlLG4sbyl7dGhpcy5fc2Nyb2xsRGlzcGF0Y2hlcj10LHRoaXMuX3ZpZXdwb3J0UnVsZXI9ZSx0aGlzLl9uZ1pvbmU9bix0aGlzLl9jb25maWc9byx0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb249bnVsbH1hdHRhY2godCl7aWYodGhpcy5fb3ZlcmxheVJlZiYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpKXRocm93IE1GKCk7dGhpcy5fb3ZlcmxheVJlZj10fWVuYWJsZSgpe3RoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbnx8KHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj10aGlzLl9zY3JvbGxEaXNwYXRjaGVyLnNjcm9sbGVkKHRoaXMuX2NvbmZpZz90aGlzLl9jb25maWcuc2Nyb2xsVGhyb3R0bGU6MCkuc3Vic2NyaWJlKCgoKT0+e2lmKHRoaXMuX292ZXJsYXlSZWYudXBkYXRlUG9zaXRpb24oKSx0aGlzLl9jb25maWcmJnRoaXMuX2NvbmZpZy5hdXRvQ2xvc2Upe2NvbnN0IHQ9dGhpcy5fb3ZlcmxheVJlZi5vdmVybGF5RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx7d2lkdGg6ZSxoZWlnaHQ6bn09dGhpcy5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNpemUoKTtPRih0LFt7d2lkdGg6ZSxoZWlnaHQ6bixib3R0b206bixyaWdodDplLHRvcDowLGxlZnQ6MH1dKSYmKHRoaXMuZGlzYWJsZSgpLHRoaXMuX25nWm9uZS5ydW4oKCgpPT50aGlzLl9vdmVybGF5UmVmLmRldGFjaCgpKSkpfX0pKSl9ZGlzYWJsZSgpe3RoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbiYmKHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj1udWxsKX1kZXRhY2goKXt0aGlzLmRpc2FibGUoKSx0aGlzLl9vdmVybGF5UmVmPW51bGx9fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jbGFzcyBrRntjb25zdHJ1Y3Rvcih0LGUsbixvKXt0aGlzLl9zY3JvbGxEaXNwYXRjaGVyPXQsdGhpcy5fdmlld3BvcnRSdWxlcj1lLHRoaXMuX25nWm9uZT1uLHRoaXMubm9vcD0oKT0+bmV3IHhGLHRoaXMuY2xvc2U9dD0+bmV3IHZGKHRoaXMuX3Njcm9sbERpc3BhdGNoZXIsdGhpcy5fbmdab25lLHRoaXMuX3ZpZXdwb3J0UnVsZXIsdCksdGhpcy5ibG9jaz0oKT0+bmV3IENGKHRoaXMuX3ZpZXdwb3J0UnVsZXIsdGhpcy5fZG9jdW1lbnQpLHRoaXMucmVwb3NpdGlvbj10PT5uZXcgd0YodGhpcy5fc2Nyb2xsRGlzcGF0Y2hlcix0aGlzLl92aWV3cG9ydFJ1bGVyLHRoaXMuX25nWm9uZSx0KSx0aGlzLl9kb2N1bWVudD1vfX1rRi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8a0YpKHVzKEtIKSx1cyhRSCksdXModEMpLHVzKFVDKSl9LGtGLsm1cHJvdj1sbyh7ZmFjdG9yeTpmdW5jdGlvbiB0KCl7cmV0dXJuIG5ldyBrRih1cyhLSCksdXMoUUgpLHVzKHRDKSx1cyhVQykpfSx0b2tlbjprRixwcm92aWRlZEluOiJyb290In0pLGtGLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6S0h9LHt0eXBlOlFIfSx7dHlwZTp0Q30se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W1VDXX1dfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihrRixbe3R5cGU6Sm0sYXJnczpbe3Byb3ZpZGVkSW46InJvb3QifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6S0h9LHt0eXBlOlFIfSx7dHlwZTp0Q30se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W1VDXX1dfV19KSxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCi8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyBTRntjb25zdHJ1Y3Rvcih0KXtpZih0aGlzLnNjcm9sbFN0cmF0ZWd5PW5ldyB4Rix0aGlzLnBhbmVsQ2xhc3M9IiIsdGhpcy5oYXNCYWNrZHJvcD0hMSx0aGlzLmJhY2tkcm9wQ2xhc3M9ImNkay1vdmVybGF5LWRhcmstYmFja2Ryb3AiLHRoaXMuZGlzcG9zZU9uTmF2aWdhdGlvbj0hMSx0KXtjb25zdCBlPU9iamVjdC5rZXlzKHQpO2Zvcihjb25zdCBuIG9mIGUpdm9pZCAwIT09dFtuXSYmKHRoaXNbbl09dFtuXSl9fX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY2xhc3MgREZ7Y29uc3RydWN0b3IodCxlLG4sbyxpKXt0aGlzLm9mZnNldFg9bix0aGlzLm9mZnNldFk9byx0aGlzLnBhbmVsQ2xhc3M9aSx0aGlzLm9yaWdpblg9dC5vcmlnaW5YLHRoaXMub3JpZ2luWT10Lm9yaWdpblksdGhpcy5vdmVybGF5WD1lLm92ZXJsYXlYLHRoaXMub3ZlcmxheVk9ZS5vdmVybGF5WX19Y2xhc3MgRUZ7fWNsYXNzIEFGe2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5jb25uZWN0aW9uUGFpcj10LHRoaXMuc2Nyb2xsYWJsZVZpZXdQcm9wZXJ0aWVzPWV9fWZ1bmN0aW9uIFJGKHQsZSl7aWYoInRvcCIhPT1lJiYiYm90dG9tIiE9PWUmJiJjZW50ZXIiIT09ZSl0aHJvdyBFcnJvcihgQ29ubmVjdGVkUG9zaXRpb246IEludmFsaWQgJHt0fSAiJHtlfSIuIEV4cGVjdGVkICJ0b3AiLCAiYm90dG9tIiBvciAiY2VudGVyIi5gKX1mdW5jdGlvbiBURih0LGUpe2lmKCJzdGFydCIhPT1lJiYiZW5kIiE9PWUmJiJjZW50ZXIiIT09ZSl0aHJvdyBFcnJvcihgQ29ubmVjdGVkUG9zaXRpb246IEludmFsaWQgJHt0fSAiJHtlfSIuIEV4cGVjdGVkICJzdGFydCIsICJlbmQiIG9yICJjZW50ZXIiLmApfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9BRi5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOkRGfSx7dHlwZTpFRixkZWNvcmF0b3JzOlt7dHlwZTpfc31dfV07Y2xhc3MgTkZ7Y29uc3RydWN0b3IodCl7dGhpcy5fYXR0YWNoZWRPdmVybGF5cz1bXSx0aGlzLl9kb2N1bWVudD10fW5nT25EZXN0cm95KCl7dGhpcy5kZXRhY2goKX1hZGQodCl7dGhpcy5yZW1vdmUodCksdGhpcy5fYXR0YWNoZWRPdmVybGF5cy5wdXNoKHQpfXJlbW92ZSh0KXtjb25zdCBlPXRoaXMuX2F0dGFjaGVkT3ZlcmxheXMuaW5kZXhPZih0KTtlPi0xJiZ0aGlzLl9hdHRhY2hlZE92ZXJsYXlzLnNwbGljZShlLDEpLDA9PT10aGlzLl9hdHRhY2hlZE92ZXJsYXlzLmxlbmd0aCYmdGhpcy5kZXRhY2goKX19TkYuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fE5GKSh1cyhVQykpfSxORi7JtXByb3Y9bG8oe2ZhY3Rvcnk6ZnVuY3Rpb24gdCgpe3JldHVybiBuZXcgTkYodXMoVUMpKX0sdG9rZW46TkYscHJvdmlkZWRJbjoicm9vdCJ9KSxORi5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltVQ119XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoTkYsW3t0eXBlOkptLGFyZ3M6W3twcm92aWRlZEluOiJyb290In1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltVQ119XX1dfSksbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyBJRiBleHRlbmRzIE5Ge2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpLHRoaXMuX2tleWRvd25MaXN0ZW5lcj10PT57Y29uc3QgZT10aGlzLl9hdHRhY2hlZE92ZXJsYXlzO2ZvcihsZXQgbj1lLmxlbmd0aC0xO24+LTE7bi0tKWlmKGVbbl0uX2tleWRvd25FdmVudHMub2JzZXJ2ZXJzLmxlbmd0aD4wKXtlW25dLl9rZXlkb3duRXZlbnRzLm5leHQodCk7YnJlYWt9fX1hZGQodCl7c3VwZXIuYWRkKHQpLHRoaXMuX2lzQXR0YWNoZWR8fCh0aGlzLl9kb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLHRoaXMuX2tleWRvd25MaXN0ZW5lciksdGhpcy5faXNBdHRhY2hlZD0hMCl9ZGV0YWNoKCl7dGhpcy5faXNBdHRhY2hlZCYmKHRoaXMuX2RvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy5fa2V5ZG93bkxpc3RlbmVyKSx0aGlzLl9pc0F0dGFjaGVkPSExKX19SUYuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fElGKSh1cyhVQykpfSxJRi7JtXByb3Y9bG8oe2ZhY3Rvcnk6ZnVuY3Rpb24gdCgpe3JldHVybiBuZXcgSUYodXMoVUMpKX0sdG9rZW46SUYscHJvdmlkZWRJbjoicm9vdCJ9KSxJRi5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltVQ119XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoSUYsW3t0eXBlOkptLGFyZ3M6W3twcm92aWRlZEluOiJyb290In1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltVQ119XX1dfSksbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyB6RiBleHRlbmRzIE5Ge2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCksdGhpcy5fcGxhdGZvcm09ZSx0aGlzLl9jdXJzb3JTdHlsZUlzU2V0PSExLHRoaXMuX2NsaWNrTGlzdGVuZXI9dD0+e2NvbnN0IGU9dC5jb21wb3NlZFBhdGg/dC5jb21wb3NlZFBhdGgoKVswXTp0LnRhcmdldCxuPXRoaXMuX2F0dGFjaGVkT3ZlcmxheXMuc2xpY2UoKTtmb3IobGV0IG89bi5sZW5ndGgtMTtvPi0xO28tLSl7Y29uc3QgaT1uW29dO2lmKCEoaS5fb3V0c2lkZVBvaW50ZXJFdmVudHMub2JzZXJ2ZXJzLmxlbmd0aDwxKSYmaS5oYXNBdHRhY2hlZCgpKXtpZihpLm92ZXJsYXlFbGVtZW50LmNvbnRhaW5zKGUpKWJyZWFrO2kuX291dHNpZGVQb2ludGVyRXZlbnRzLm5leHQodCl9fX19YWRkKHQpe3N1cGVyLmFkZCh0KSx0aGlzLl9pc0F0dGFjaGVkfHwodGhpcy5fZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5fY2xpY2tMaXN0ZW5lciwhMCksdGhpcy5fZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsdGhpcy5fY2xpY2tMaXN0ZW5lciwhMCksdGhpcy5fcGxhdGZvcm0uSU9TJiYhdGhpcy5fY3Vyc29yU3R5bGVJc1NldCYmKHRoaXMuX2N1cnNvck9yaWdpbmFsVmFsdWU9dGhpcy5fZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IsdGhpcy5fZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3I9InBvaW50ZXIiLHRoaXMuX2N1cnNvclN0eWxlSXNTZXQ9ITApLHRoaXMuX2lzQXR0YWNoZWQ9ITApfWRldGFjaCgpe3RoaXMuX2lzQXR0YWNoZWQmJih0aGlzLl9kb2N1bWVudC5ib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLl9jbGlja0xpc3RlbmVyLCEwKSx0aGlzLl9kb2N1bWVudC5ib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51Iix0aGlzLl9jbGlja0xpc3RlbmVyLCEwKSx0aGlzLl9wbGF0Zm9ybS5JT1MmJnRoaXMuX2N1cnNvclN0eWxlSXNTZXQmJih0aGlzLl9kb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvcj10aGlzLl9jdXJzb3JPcmlnaW5hbFZhbHVlLHRoaXMuX2N1cnNvclN0eWxlSXNTZXQ9ITEpLHRoaXMuX2lzQXR0YWNoZWQ9ITEpfX16Ri7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8ekYpKHVzKFVDKSx1cyhmSSkpfSx6Ri7JtXByb3Y9bG8oe2ZhY3Rvcnk6ZnVuY3Rpb24gdCgpe3JldHVybiBuZXcgekYodXMoVUMpLHVzKGZJKSl9LHRva2VuOnpGLHByb3ZpZGVkSW46InJvb3QifSksekYuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbVUNdfV19LHt0eXBlOmZJfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYih6Rixbe3R5cGU6Sm0sYXJnczpbe3Byb3ZpZGVkSW46InJvb3QifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W1VDXX1dfSx7dHlwZTpmSX1dfSksbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCBIRj0hKCJ1bmRlZmluZWQiPT10eXBlb2Ygd2luZG93fHwhd2luZG93fHwhd2luZG93Ll9fa2FybWFfXyYmIXdpbmRvdy5qYXNtaW5lKTtjbGFzcyBGRntjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuX3BsYXRmb3JtPWUsdGhpcy5fZG9jdW1lbnQ9dH1uZ09uRGVzdHJveSgpe2NvbnN0IHQ9dGhpcy5fY29udGFpbmVyRWxlbWVudDt0JiZ0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KX1nZXRDb250YWluZXJFbGVtZW50KCl7cmV0dXJuIHRoaXMuX2NvbnRhaW5lckVsZW1lbnR8fHRoaXMuX2NyZWF0ZUNvbnRhaW5lcigpLHRoaXMuX2NvbnRhaW5lckVsZW1lbnR9X2NyZWF0ZUNvbnRhaW5lcigpe2NvbnN0IHQ9ImNkay1vdmVybGF5LWNvbnRhaW5lciI7aWYodGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyfHxIRil7Y29uc3QgZT10aGlzLl9kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAuJHt0fVtwbGF0Zm9ybT0ic2VydmVyIl0sIC4ke3R9W3BsYXRmb3JtPSJ0ZXN0Il1gKTtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyllW3RdLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZVt0XSl9Y29uc3QgZT10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtlLmNsYXNzTGlzdC5hZGQodCksSEY/ZS5zZXRBdHRyaWJ1dGUoInBsYXRmb3JtIiwidGVzdCIpOnRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcnx8ZS5zZXRBdHRyaWJ1dGUoInBsYXRmb3JtIiwic2VydmVyIiksdGhpcy5fZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlKSx0aGlzLl9jb250YWluZXJFbGVtZW50PWV9fUZGLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxGRikodXMoVUMpLHVzKGZJKSl9LEZGLsm1cHJvdj1sbyh7ZmFjdG9yeTpmdW5jdGlvbiB0KCl7cmV0dXJuIG5ldyBGRih1cyhVQyksdXMoZkkpKX0sdG9rZW46RkYscHJvdmlkZWRJbjoicm9vdCJ9KSxGRi5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltVQ119XX0se3R5cGU6Zkl9XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEZGLFt7dHlwZTpKbSxhcmdzOlt7cHJvdmlkZWRJbjoicm9vdCJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbVUNdfV19LHt0eXBlOmZJfV19KSxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIExGe2NvbnN0cnVjdG9yKHQsZSxuLG8saSxhLHIscyxjKXt0aGlzLl9wb3J0YWxPdXRsZXQ9dCx0aGlzLl9ob3N0PWUsdGhpcy5fcGFuZT1uLHRoaXMuX2NvbmZpZz1vLHRoaXMuX25nWm9uZT1pLHRoaXMuX2tleWJvYXJkRGlzcGF0Y2hlcj1hLHRoaXMuX2RvY3VtZW50PXIsdGhpcy5fbG9jYXRpb249cyx0aGlzLl9vdXRzaWRlQ2xpY2tEaXNwYXRjaGVyPWMsdGhpcy5fYmFja2Ryb3BFbGVtZW50PW51bGwsdGhpcy5fYmFja2Ryb3BDbGljaz1uZXcgeCx0aGlzLl9hdHRhY2htZW50cz1uZXcgeCx0aGlzLl9kZXRhY2htZW50cz1uZXcgeCx0aGlzLl9sb2NhdGlvbkNoYW5nZXM9bC5FTVBUWSx0aGlzLl9iYWNrZHJvcENsaWNrSGFuZGxlcj10PT50aGlzLl9iYWNrZHJvcENsaWNrLm5leHQodCksdGhpcy5fa2V5ZG93bkV2ZW50cz1uZXcgeCx0aGlzLl9vdXRzaWRlUG9pbnRlckV2ZW50cz1uZXcgeCxvLnNjcm9sbFN0cmF0ZWd5JiYodGhpcy5fc2Nyb2xsU3RyYXRlZ3k9by5zY3JvbGxTdHJhdGVneSx0aGlzLl9zY3JvbGxTdHJhdGVneS5hdHRhY2godGhpcykpLHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3k9by5wb3NpdGlvblN0cmF0ZWd5fWdldCBvdmVybGF5RWxlbWVudCgpe3JldHVybiB0aGlzLl9wYW5lfWdldCBiYWNrZHJvcEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fYmFja2Ryb3BFbGVtZW50fWdldCBob3N0RWxlbWVudCgpe3JldHVybiB0aGlzLl9ob3N0fWF0dGFjaCh0KXtsZXQgZT10aGlzLl9wb3J0YWxPdXRsZXQuYXR0YWNoKHQpO3JldHVybiF0aGlzLl9ob3N0LnBhcmVudEVsZW1lbnQmJnRoaXMuX3ByZXZpb3VzSG9zdFBhcmVudCYmdGhpcy5fcHJldmlvdXNIb3N0UGFyZW50LmFwcGVuZENoaWxkKHRoaXMuX2hvc3QpLHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kmJnRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kuYXR0YWNoKHRoaXMpLHRoaXMuX3VwZGF0ZVN0YWNraW5nT3JkZXIoKSx0aGlzLl91cGRhdGVFbGVtZW50U2l6ZSgpLHRoaXMuX3VwZGF0ZUVsZW1lbnREaXJlY3Rpb24oKSx0aGlzLl9zY3JvbGxTdHJhdGVneSYmdGhpcy5fc2Nyb2xsU3RyYXRlZ3kuZW5hYmxlKCksdGhpcy5fbmdab25lLm9uU3RhYmxlLnBpcGUoTmUoMSkpLnN1YnNjcmliZSgoKCk9Pnt0aGlzLmhhc0F0dGFjaGVkKCkmJnRoaXMudXBkYXRlUG9zaXRpb24oKX0pKSx0aGlzLl90b2dnbGVQb2ludGVyRXZlbnRzKCEwKSx0aGlzLl9jb25maWcuaGFzQmFja2Ryb3AmJnRoaXMuX2F0dGFjaEJhY2tkcm9wKCksdGhpcy5fY29uZmlnLnBhbmVsQ2xhc3MmJnRoaXMuX3RvZ2dsZUNsYXNzZXModGhpcy5fcGFuZSx0aGlzLl9jb25maWcucGFuZWxDbGFzcywhMCksdGhpcy5fYXR0YWNobWVudHMubmV4dCgpLHRoaXMuX2tleWJvYXJkRGlzcGF0Y2hlci5hZGQodGhpcyksdGhpcy5fY29uZmlnLmRpc3Bvc2VPbk5hdmlnYXRpb24mJih0aGlzLl9sb2NhdGlvbkNoYW5nZXM9dGhpcy5fbG9jYXRpb24uc3Vic2NyaWJlKCgoKT0+dGhpcy5kaXNwb3NlKCkpKSksdGhpcy5fb3V0c2lkZUNsaWNrRGlzcGF0Y2hlci5hZGQodGhpcyksZX1kZXRhY2goKXtpZighdGhpcy5oYXNBdHRhY2hlZCgpKXJldHVybjt0aGlzLmRldGFjaEJhY2tkcm9wKCksdGhpcy5fdG9nZ2xlUG9pbnRlckV2ZW50cyghMSksdGhpcy5fcG9zaXRpb25TdHJhdGVneSYmdGhpcy5fcG9zaXRpb25TdHJhdGVneS5kZXRhY2gmJnRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kuZGV0YWNoKCksdGhpcy5fc2Nyb2xsU3RyYXRlZ3kmJnRoaXMuX3Njcm9sbFN0cmF0ZWd5LmRpc2FibGUoKTtjb25zdCB0PXRoaXMuX3BvcnRhbE91dGxldC5kZXRhY2goKTtyZXR1cm4gdGhpcy5fZGV0YWNobWVudHMubmV4dCgpLHRoaXMuX2tleWJvYXJkRGlzcGF0Y2hlci5yZW1vdmUodGhpcyksdGhpcy5fZGV0YWNoQ29udGVudFdoZW5TdGFibGUoKSx0aGlzLl9sb2NhdGlvbkNoYW5nZXMudW5zdWJzY3JpYmUoKSx0aGlzLl9vdXRzaWRlQ2xpY2tEaXNwYXRjaGVyLnJlbW92ZSh0aGlzKSx0fWRpc3Bvc2UoKXtjb25zdCB0PXRoaXMuaGFzQXR0YWNoZWQoKTt0aGlzLl9wb3NpdGlvblN0cmF0ZWd5JiZ0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LmRpc3Bvc2UoKSx0aGlzLl9kaXNwb3NlU2Nyb2xsU3RyYXRlZ3koKSx0aGlzLmRldGFjaEJhY2tkcm9wKCksdGhpcy5fbG9jYXRpb25DaGFuZ2VzLnVuc3Vic2NyaWJlKCksdGhpcy5fa2V5Ym9hcmREaXNwYXRjaGVyLnJlbW92ZSh0aGlzKSx0aGlzLl9wb3J0YWxPdXRsZXQuZGlzcG9zZSgpLHRoaXMuX2F0dGFjaG1lbnRzLmNvbXBsZXRlKCksdGhpcy5fYmFja2Ryb3BDbGljay5jb21wbGV0ZSgpLHRoaXMuX2tleWRvd25FdmVudHMuY29tcGxldGUoKSx0aGlzLl9vdXRzaWRlUG9pbnRlckV2ZW50cy5jb21wbGV0ZSgpLHRoaXMuX291dHNpZGVDbGlja0Rpc3BhdGNoZXIucmVtb3ZlKHRoaXMpLHRoaXMuX2hvc3QmJnRoaXMuX2hvc3QucGFyZW50Tm9kZSYmKHRoaXMuX2hvc3QucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9ob3N0KSx0aGlzLl9ob3N0PW51bGwpLHRoaXMuX3ByZXZpb3VzSG9zdFBhcmVudD10aGlzLl9wYW5lPW51bGwsdCYmdGhpcy5fZGV0YWNobWVudHMubmV4dCgpLHRoaXMuX2RldGFjaG1lbnRzLmNvbXBsZXRlKCl9aGFzQXR0YWNoZWQoKXtyZXR1cm4gdGhpcy5fcG9ydGFsT3V0bGV0Lmhhc0F0dGFjaGVkKCl9YmFja2Ryb3BDbGljaygpe3JldHVybiB0aGlzLl9iYWNrZHJvcENsaWNrfWF0dGFjaG1lbnRzKCl7cmV0dXJuIHRoaXMuX2F0dGFjaG1lbnRzfWRldGFjaG1lbnRzKCl7cmV0dXJuIHRoaXMuX2RldGFjaG1lbnRzfWtleWRvd25FdmVudHMoKXtyZXR1cm4gdGhpcy5fa2V5ZG93bkV2ZW50c31vdXRzaWRlUG9pbnRlckV2ZW50cygpe3JldHVybiB0aGlzLl9vdXRzaWRlUG9pbnRlckV2ZW50c31nZXRDb25maWcoKXtyZXR1cm4gdGhpcy5fY29uZmlnfXVwZGF0ZVBvc2l0aW9uKCl7dGhpcy5fcG9zaXRpb25TdHJhdGVneSYmdGhpcy5fcG9zaXRpb25TdHJhdGVneS5hcHBseSgpfXVwZGF0ZVBvc2l0aW9uU3RyYXRlZ3kodCl7dCE9PXRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kmJih0aGlzLl9wb3NpdGlvblN0cmF0ZWd5JiZ0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LmRpc3Bvc2UoKSx0aGlzLl9wb3NpdGlvblN0cmF0ZWd5PXQsdGhpcy5oYXNBdHRhY2hlZCgpJiYodC5hdHRhY2godGhpcyksdGhpcy51cGRhdGVQb3NpdGlvbigpKSl9dXBkYXRlU2l6ZSh0KXt0aGlzLl9jb25maWc9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHRoaXMuX2NvbmZpZyksdCksdGhpcy5fdXBkYXRlRWxlbWVudFNpemUoKX1zZXREaXJlY3Rpb24odCl7dGhpcy5fY29uZmlnPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0aGlzLl9jb25maWcpLHtkaXJlY3Rpb246dH0pLHRoaXMuX3VwZGF0ZUVsZW1lbnREaXJlY3Rpb24oKX1hZGRQYW5lbENsYXNzKHQpe3RoaXMuX3BhbmUmJnRoaXMuX3RvZ2dsZUNsYXNzZXModGhpcy5fcGFuZSx0LCEwKX1yZW1vdmVQYW5lbENsYXNzKHQpe3RoaXMuX3BhbmUmJnRoaXMuX3RvZ2dsZUNsYXNzZXModGhpcy5fcGFuZSx0LCExKX1nZXREaXJlY3Rpb24oKXtjb25zdCB0PXRoaXMuX2NvbmZpZy5kaXJlY3Rpb247cmV0dXJuIHQ/InN0cmluZyI9PXR5cGVvZiB0P3Q6dC52YWx1ZToibHRyIn11cGRhdGVTY3JvbGxTdHJhdGVneSh0KXt0IT09dGhpcy5fc2Nyb2xsU3RyYXRlZ3kmJih0aGlzLl9kaXNwb3NlU2Nyb2xsU3RyYXRlZ3koKSx0aGlzLl9zY3JvbGxTdHJhdGVneT10LHRoaXMuaGFzQXR0YWNoZWQoKSYmKHQuYXR0YWNoKHRoaXMpLHQuZW5hYmxlKCkpKX1fdXBkYXRlRWxlbWVudERpcmVjdGlvbigpe3RoaXMuX2hvc3Quc2V0QXR0cmlidXRlKCJkaXIiLHRoaXMuZ2V0RGlyZWN0aW9uKCkpfV91cGRhdGVFbGVtZW50U2l6ZSgpe2lmKCF0aGlzLl9wYW5lKXJldHVybjtjb25zdCB0PXRoaXMuX3BhbmUuc3R5bGU7dC53aWR0aD1kSSh0aGlzLl9jb25maWcud2lkdGgpLHQuaGVpZ2h0PWRJKHRoaXMuX2NvbmZpZy5oZWlnaHQpLHQubWluV2lkdGg9ZEkodGhpcy5fY29uZmlnLm1pbldpZHRoKSx0Lm1pbkhlaWdodD1kSSh0aGlzLl9jb25maWcubWluSGVpZ2h0KSx0Lm1heFdpZHRoPWRJKHRoaXMuX2NvbmZpZy5tYXhXaWR0aCksdC5tYXhIZWlnaHQ9ZEkodGhpcy5fY29uZmlnLm1heEhlaWdodCl9X3RvZ2dsZVBvaW50ZXJFdmVudHModCl7dGhpcy5fcGFuZS5zdHlsZS5wb2ludGVyRXZlbnRzPXQ/IiI6Im5vbmUifV9hdHRhY2hCYWNrZHJvcCgpe2NvbnN0IHQ9ImNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmciO3RoaXMuX2JhY2tkcm9wRWxlbWVudD10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLl9iYWNrZHJvcEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiY2RrLW92ZXJsYXktYmFja2Ryb3AiKSx0aGlzLl9jb25maWcuYmFja2Ryb3BDbGFzcyYmdGhpcy5fdG9nZ2xlQ2xhc3Nlcyh0aGlzLl9iYWNrZHJvcEVsZW1lbnQsdGhpcy5fY29uZmlnLmJhY2tkcm9wQ2xhc3MsITApLHRoaXMuX2hvc3QucGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUodGhpcy5fYmFja2Ryb3BFbGVtZW50LHRoaXMuX2hvc3QpLHRoaXMuX2JhY2tkcm9wRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5fYmFja2Ryb3BDbGlja0hhbmRsZXIpLCJ1bmRlZmluZWQiIT10eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lP3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKCk9PntyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCgpPT57dGhpcy5fYmFja2Ryb3BFbGVtZW50JiZ0aGlzLl9iYWNrZHJvcEVsZW1lbnQuY2xhc3NMaXN0LmFkZCh0KX0pKX0pKTp0aGlzLl9iYWNrZHJvcEVsZW1lbnQuY2xhc3NMaXN0LmFkZCh0KX1fdXBkYXRlU3RhY2tpbmdPcmRlcigpe3RoaXMuX2hvc3QubmV4dFNpYmxpbmcmJnRoaXMuX2hvc3QucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzLl9ob3N0KX1kZXRhY2hCYWNrZHJvcCgpe2xldCB0LGU9dGhpcy5fYmFja2Ryb3BFbGVtZW50O2lmKCFlKXJldHVybjtsZXQgbj0oKT0+e2UmJihlLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLl9iYWNrZHJvcENsaWNrSGFuZGxlciksZS5yZW1vdmVFdmVudExpc3RlbmVyKCJ0cmFuc2l0aW9uZW5kIixuKSxlLnBhcmVudE5vZGUmJmUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlKSksdGhpcy5fYmFja2Ryb3BFbGVtZW50PT1lJiYodGhpcy5fYmFja2Ryb3BFbGVtZW50PW51bGwpLHRoaXMuX2NvbmZpZy5iYWNrZHJvcENsYXNzJiZ0aGlzLl90b2dnbGVDbGFzc2VzKGUsdGhpcy5fY29uZmlnLmJhY2tkcm9wQ2xhc3MsITEpLGNsZWFyVGltZW91dCh0KX07ZS5jbGFzc0xpc3QucmVtb3ZlKCJjZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nIiksdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgoKT0+e2UuYWRkRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmVuZCIsbil9KSksZS5zdHlsZS5wb2ludGVyRXZlbnRzPSJub25lIix0PXRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKCk9PnNldFRpbWVvdXQobiw1MDApKSl9X3RvZ2dsZUNsYXNzZXModCxlLG4pe2NvbnN0IG89dC5jbGFzc0xpc3Q7Y0koZSkuZm9yRWFjaCgodD0+e3QmJihuP28uYWRkKHQpOm8ucmVtb3ZlKHQpKX0pKX1fZGV0YWNoQ29udGVudFdoZW5TdGFibGUoKXt0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCgpPT57Y29uc3QgdD10aGlzLl9uZ1pvbmUub25TdGFibGUucGlwZSh1bihXdCh0aGlzLl9hdHRhY2htZW50cyx0aGlzLl9kZXRhY2htZW50cykpKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5fcGFuZSYmdGhpcy5faG9zdCYmMCE9PXRoaXMuX3BhbmUuY2hpbGRyZW4ubGVuZ3RofHwodGhpcy5fcGFuZSYmdGhpcy5fY29uZmlnLnBhbmVsQ2xhc3MmJnRoaXMuX3RvZ2dsZUNsYXNzZXModGhpcy5fcGFuZSx0aGlzLl9jb25maWcucGFuZWxDbGFzcywhMSksdGhpcy5faG9zdCYmdGhpcy5faG9zdC5wYXJlbnRFbGVtZW50JiYodGhpcy5fcHJldmlvdXNIb3N0UGFyZW50PXRoaXMuX2hvc3QucGFyZW50RWxlbWVudCx0aGlzLl9wcmV2aW91c0hvc3RQYXJlbnQucmVtb3ZlQ2hpbGQodGhpcy5faG9zdCkpLHQudW5zdWJzY3JpYmUoKSl9KSl9KSl9X2Rpc3Bvc2VTY3JvbGxTdHJhdGVneSgpe2NvbnN0IHQ9dGhpcy5fc2Nyb2xsU3RyYXRlZ3k7dCYmKHQuZGlzYWJsZSgpLHQuZGV0YWNoJiZ0LmRldGFjaCgpKX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NvbnN0IEJGPSJjZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94IixWRj0vKFtBLVphLXolXSspJC87Y2xhc3MgakZ7Y29uc3RydWN0b3IodCxlLG4sbyxpKXt0aGlzLl92aWV3cG9ydFJ1bGVyPWUsdGhpcy5fZG9jdW1lbnQ9bix0aGlzLl9wbGF0Zm9ybT1vLHRoaXMuX292ZXJsYXlDb250YWluZXI9aSx0aGlzLl9sYXN0Qm91bmRpbmdCb3hTaXplPXt3aWR0aDowLGhlaWdodDowfSx0aGlzLl9pc1B1c2hlZD0hMSx0aGlzLl9jYW5QdXNoPSEwLHRoaXMuX2dyb3dBZnRlck9wZW49ITEsdGhpcy5faGFzRmxleGlibGVEaW1lbnNpb25zPSEwLHRoaXMuX3Bvc2l0aW9uTG9ja2VkPSExLHRoaXMuX3ZpZXdwb3J0TWFyZ2luPTAsdGhpcy5fc2Nyb2xsYWJsZXM9W10sdGhpcy5fcHJlZmVycmVkUG9zaXRpb25zPVtdLHRoaXMuX3Bvc2l0aW9uQ2hhbmdlcz1uZXcgeCx0aGlzLl9yZXNpemVTdWJzY3JpcHRpb249bC5FTVBUWSx0aGlzLl9vZmZzZXRYPTAsdGhpcy5fb2Zmc2V0WT0wLHRoaXMuX2FwcGxpZWRQYW5lbENsYXNzZXM9W10sdGhpcy5wb3NpdGlvbkNoYW5nZXM9dGhpcy5fcG9zaXRpb25DaGFuZ2VzLHRoaXMuc2V0T3JpZ2luKHQpfWdldCBwb3NpdGlvbnMoKXtyZXR1cm4gdGhpcy5fcHJlZmVycmVkUG9zaXRpb25zfWF0dGFjaCh0KXtpZih0aGlzLl9vdmVybGF5UmVmJiZ0IT09dGhpcy5fb3ZlcmxheVJlZiYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpKXRocm93IEVycm9yKCJUaGlzIHBvc2l0aW9uIHN0cmF0ZWd5IGlzIGFscmVhZHkgYXR0YWNoZWQgdG8gYW4gb3ZlcmxheSIpO3RoaXMuX3ZhbGlkYXRlUG9zaXRpb25zKCksdC5ob3N0RWxlbWVudC5jbGFzc0xpc3QuYWRkKEJGKSx0aGlzLl9vdmVybGF5UmVmPXQsdGhpcy5fYm91bmRpbmdCb3g9dC5ob3N0RWxlbWVudCx0aGlzLl9wYW5lPXQub3ZlcmxheUVsZW1lbnQsdGhpcy5faXNEaXNwb3NlZD0hMSx0aGlzLl9pc0luaXRpYWxSZW5kZXI9ITAsdGhpcy5fbGFzdFBvc2l0aW9uPW51bGwsdGhpcy5fcmVzaXplU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fcmVzaXplU3Vic2NyaXB0aW9uPXRoaXMuX3ZpZXdwb3J0UnVsZXIuY2hhbmdlKCkuc3Vic2NyaWJlKCgoKT0+e3RoaXMuX2lzSW5pdGlhbFJlbmRlcj0hMCx0aGlzLmFwcGx5KCl9KSl9YXBwbHkoKXtpZih0aGlzLl9pc0Rpc3Bvc2VkfHwhdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKXJldHVybjtpZighdGhpcy5faXNJbml0aWFsUmVuZGVyJiZ0aGlzLl9wb3NpdGlvbkxvY2tlZCYmdGhpcy5fbGFzdFBvc2l0aW9uKXJldHVybiB2b2lkIHRoaXMucmVhcHBseUxhc3RQb3NpdGlvbigpO3RoaXMuX2NsZWFyUGFuZWxDbGFzc2VzKCksdGhpcy5fcmVzZXRPdmVybGF5RWxlbWVudFN0eWxlcygpLHRoaXMuX3Jlc2V0Qm91bmRpbmdCb3hTdHlsZXMoKSx0aGlzLl92aWV3cG9ydFJlY3Q9dGhpcy5fZ2V0TmFycm93ZWRWaWV3cG9ydFJlY3QoKSx0aGlzLl9vcmlnaW5SZWN0PXRoaXMuX2dldE9yaWdpblJlY3QoKSx0aGlzLl9vdmVybGF5UmVjdD10aGlzLl9wYW5lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2NvbnN0IHQ9dGhpcy5fb3JpZ2luUmVjdCxlPXRoaXMuX292ZXJsYXlSZWN0LG49dGhpcy5fdmlld3BvcnRSZWN0LG89W107bGV0IGk7Zm9yKGxldCBhIG9mIHRoaXMuX3ByZWZlcnJlZFBvc2l0aW9ucyl7bGV0IHI9dGhpcy5fZ2V0T3JpZ2luUG9pbnQodCxhKSxzPXRoaXMuX2dldE92ZXJsYXlQb2ludChyLGUsYSksbD10aGlzLl9nZXRPdmVybGF5Rml0KHMsZSxuLGEpO2lmKGwuaXNDb21wbGV0ZWx5V2l0aGluVmlld3BvcnQpcmV0dXJuIHRoaXMuX2lzUHVzaGVkPSExLHZvaWQgdGhpcy5fYXBwbHlQb3NpdGlvbihhLHIpO3RoaXMuX2NhbkZpdFdpdGhGbGV4aWJsZURpbWVuc2lvbnMobCxzLG4pP28ucHVzaCh7cG9zaXRpb246YSxvcmlnaW46cixvdmVybGF5UmVjdDplLGJvdW5kaW5nQm94UmVjdDp0aGlzLl9jYWxjdWxhdGVCb3VuZGluZ0JveFJlY3QocixhKX0pOighaXx8aS5vdmVybGF5Rml0LnZpc2libGVBcmVhPGwudmlzaWJsZUFyZWEpJiYoaT17b3ZlcmxheUZpdDpsLG92ZXJsYXlQb2ludDpzLG9yaWdpblBvaW50OnIscG9zaXRpb246YSxvdmVybGF5UmVjdDplfSl9aWYoby5sZW5ndGgpe2xldCB0PW51bGwsZT0tMTtmb3IoY29uc3QgbiBvZiBvKXtjb25zdCBvPW4uYm91bmRpbmdCb3hSZWN0LndpZHRoKm4uYm91bmRpbmdCb3hSZWN0LmhlaWdodCoobi5wb3NpdGlvbi53ZWlnaHR8fDEpO28+ZSYmKGU9byx0PW4pfXJldHVybiB0aGlzLl9pc1B1c2hlZD0hMSx2b2lkIHRoaXMuX2FwcGx5UG9zaXRpb24odC5wb3NpdGlvbix0Lm9yaWdpbil9aWYodGhpcy5fY2FuUHVzaClyZXR1cm4gdGhpcy5faXNQdXNoZWQ9ITAsdm9pZCB0aGlzLl9hcHBseVBvc2l0aW9uKGkucG9zaXRpb24saS5vcmlnaW5Qb2ludCk7dGhpcy5fYXBwbHlQb3NpdGlvbihpLnBvc2l0aW9uLGkub3JpZ2luUG9pbnQpfWRldGFjaCgpe3RoaXMuX2NsZWFyUGFuZWxDbGFzc2VzKCksdGhpcy5fbGFzdFBvc2l0aW9uPW51bGwsdGhpcy5fcHJldmlvdXNQdXNoQW1vdW50PW51bGwsdGhpcy5fcmVzaXplU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9ZGlzcG9zZSgpe3RoaXMuX2lzRGlzcG9zZWR8fCh0aGlzLl9ib3VuZGluZ0JveCYmVUYodGhpcy5fYm91bmRpbmdCb3guc3R5bGUse3RvcDoiIixsZWZ0OiIiLHJpZ2h0OiIiLGJvdHRvbToiIixoZWlnaHQ6IiIsd2lkdGg6IiIsYWxpZ25JdGVtczoiIixqdXN0aWZ5Q29udGVudDoiIn0pLHRoaXMuX3BhbmUmJnRoaXMuX3Jlc2V0T3ZlcmxheUVsZW1lbnRTdHlsZXMoKSx0aGlzLl9vdmVybGF5UmVmJiZ0aGlzLl9vdmVybGF5UmVmLmhvc3RFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQkYpLHRoaXMuZGV0YWNoKCksdGhpcy5fcG9zaXRpb25DaGFuZ2VzLmNvbXBsZXRlKCksdGhpcy5fb3ZlcmxheVJlZj10aGlzLl9ib3VuZGluZ0JveD1udWxsLHRoaXMuX2lzRGlzcG9zZWQ9ITApfXJlYXBwbHlMYXN0UG9zaXRpb24oKXtpZighdGhpcy5faXNEaXNwb3NlZCYmKCF0aGlzLl9wbGF0Zm9ybXx8dGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKSl7dGhpcy5fb3JpZ2luUmVjdD10aGlzLl9nZXRPcmlnaW5SZWN0KCksdGhpcy5fb3ZlcmxheVJlY3Q9dGhpcy5fcGFuZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLl92aWV3cG9ydFJlY3Q9dGhpcy5fZ2V0TmFycm93ZWRWaWV3cG9ydFJlY3QoKTtjb25zdCB0PXRoaXMuX2xhc3RQb3NpdGlvbnx8dGhpcy5fcHJlZmVycmVkUG9zaXRpb25zWzBdLGU9dGhpcy5fZ2V0T3JpZ2luUG9pbnQodGhpcy5fb3JpZ2luUmVjdCx0KTt0aGlzLl9hcHBseVBvc2l0aW9uKHQsZSl9fXdpdGhTY3JvbGxhYmxlQ29udGFpbmVycyh0KXtyZXR1cm4gdGhpcy5fc2Nyb2xsYWJsZXM9dCx0aGlzfXdpdGhQb3NpdGlvbnModCl7cmV0dXJuIHRoaXMuX3ByZWZlcnJlZFBvc2l0aW9ucz10LC0xPT09dC5pbmRleE9mKHRoaXMuX2xhc3RQb3NpdGlvbikmJih0aGlzLl9sYXN0UG9zaXRpb249bnVsbCksdGhpcy5fdmFsaWRhdGVQb3NpdGlvbnMoKSx0aGlzfXdpdGhWaWV3cG9ydE1hcmdpbih0KXtyZXR1cm4gdGhpcy5fdmlld3BvcnRNYXJnaW49dCx0aGlzfXdpdGhGbGV4aWJsZURpbWVuc2lvbnModD0hMCl7cmV0dXJuIHRoaXMuX2hhc0ZsZXhpYmxlRGltZW5zaW9ucz10LHRoaXN9d2l0aEdyb3dBZnRlck9wZW4odD0hMCl7cmV0dXJuIHRoaXMuX2dyb3dBZnRlck9wZW49dCx0aGlzfXdpdGhQdXNoKHQ9ITApe3JldHVybiB0aGlzLl9jYW5QdXNoPXQsdGhpc313aXRoTG9ja2VkUG9zaXRpb24odD0hMCl7cmV0dXJuIHRoaXMuX3Bvc2l0aW9uTG9ja2VkPXQsdGhpc31zZXRPcmlnaW4odCl7cmV0dXJuIHRoaXMuX29yaWdpbj10LHRoaXN9d2l0aERlZmF1bHRPZmZzZXRYKHQpe3JldHVybiB0aGlzLl9vZmZzZXRYPXQsdGhpc313aXRoRGVmYXVsdE9mZnNldFkodCl7cmV0dXJuIHRoaXMuX29mZnNldFk9dCx0aGlzfXdpdGhUcmFuc2Zvcm1PcmlnaW5Pbih0KXtyZXR1cm4gdGhpcy5fdHJhbnNmb3JtT3JpZ2luU2VsZWN0b3I9dCx0aGlzfV9nZXRPcmlnaW5Qb2ludCh0LGUpe2xldCBuLG87aWYoImNlbnRlciI9PWUub3JpZ2luWCluPXQubGVmdCt0LndpZHRoLzI7ZWxzZXtjb25zdCBvPXRoaXMuX2lzUnRsKCk/dC5yaWdodDp0LmxlZnQsaT10aGlzLl9pc1J0bCgpP3QubGVmdDp0LnJpZ2h0O249InN0YXJ0Ij09ZS5vcmlnaW5YP286aX1yZXR1cm4gbz0iY2VudGVyIj09ZS5vcmlnaW5ZP3QudG9wK3QuaGVpZ2h0LzI6InRvcCI9PWUub3JpZ2luWT90LnRvcDp0LmJvdHRvbSx7eDpuLHk6b319X2dldE92ZXJsYXlQb2ludCh0LGUsbil7bGV0IG8saTtyZXR1cm4gbz0iY2VudGVyIj09bi5vdmVybGF5WD8tZS53aWR0aC8yOiJzdGFydCI9PT1uLm92ZXJsYXlYP3RoaXMuX2lzUnRsKCk/LWUud2lkdGg6MDp0aGlzLl9pc1J0bCgpPzA6LWUud2lkdGgsaT0iY2VudGVyIj09bi5vdmVybGF5WT8tZS5oZWlnaHQvMjoidG9wIj09bi5vdmVybGF5WT8wOi1lLmhlaWdodCx7eDp0Lngrbyx5OnQueStpfX1fZ2V0T3ZlcmxheUZpdCh0LGUsbixvKXtjb25zdCBpPUdGKGUpO2xldHt4OmEseTpyfT10LHM9dGhpcy5fZ2V0T2Zmc2V0KG8sIngiKSxsPXRoaXMuX2dldE9mZnNldChvLCJ5Iik7cyYmKGErPXMpLGwmJihyKz1sKTtsZXQgYz0wLXIsZD1yK2kuaGVpZ2h0LW4uaGVpZ2h0LHA9dGhpcy5fc3VidHJhY3RPdmVyZmxvd3MoaS53aWR0aCwwLWEsYStpLndpZHRoLW4ud2lkdGgpLG09dGhpcy5fc3VidHJhY3RPdmVyZmxvd3MoaS5oZWlnaHQsYyxkKSx1PXAqbTtyZXR1cm57dmlzaWJsZUFyZWE6dSxpc0NvbXBsZXRlbHlXaXRoaW5WaWV3cG9ydDppLndpZHRoKmkuaGVpZ2h0PT09dSxmaXRzSW5WaWV3cG9ydFZlcnRpY2FsbHk6bT09PWkuaGVpZ2h0LGZpdHNJblZpZXdwb3J0SG9yaXpvbnRhbGx5OnA9PWkud2lkdGh9fV9jYW5GaXRXaXRoRmxleGlibGVEaW1lbnNpb25zKHQsZSxuKXtpZih0aGlzLl9oYXNGbGV4aWJsZURpbWVuc2lvbnMpe2NvbnN0IG89bi5ib3R0b20tZS55LGk9bi5yaWdodC1lLngsYT1XRih0aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpLm1pbkhlaWdodCkscj1XRih0aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpLm1pbldpZHRoKSxzPXQuZml0c0luVmlld3BvcnRIb3Jpem9udGFsbHl8fG51bGwhPXImJnI8PWk7cmV0dXJuKHQuZml0c0luVmlld3BvcnRWZXJ0aWNhbGx5fHxudWxsIT1hJiZhPD1vKSYmc31yZXR1cm4hMX1fcHVzaE92ZXJsYXlPblNjcmVlbih0LGUsbil7aWYodGhpcy5fcHJldmlvdXNQdXNoQW1vdW50JiZ0aGlzLl9wb3NpdGlvbkxvY2tlZClyZXR1cm57eDp0LngrdGhpcy5fcHJldmlvdXNQdXNoQW1vdW50LngseTp0LnkrdGhpcy5fcHJldmlvdXNQdXNoQW1vdW50Lnl9O2NvbnN0IG89R0YoZSksaT10aGlzLl92aWV3cG9ydFJlY3QsYT1NYXRoLm1heCh0Lngrby53aWR0aC1pLndpZHRoLDApLHI9TWF0aC5tYXgodC55K28uaGVpZ2h0LWkuaGVpZ2h0LDApLHM9TWF0aC5tYXgoaS50b3Atbi50b3AtdC55LDApLGw9TWF0aC5tYXgoaS5sZWZ0LW4ubGVmdC10LngsMCk7bGV0IGM9MCxkPTA7cmV0dXJuIGM9by53aWR0aDw9aS53aWR0aD9sfHwtYTp0Lng8dGhpcy5fdmlld3BvcnRNYXJnaW4/aS5sZWZ0LW4ubGVmdC10Lng6MCxkPW8uaGVpZ2h0PD1pLmhlaWdodD9zfHwtcjp0Lnk8dGhpcy5fdmlld3BvcnRNYXJnaW4/aS50b3Atbi50b3AtdC55OjAsdGhpcy5fcHJldmlvdXNQdXNoQW1vdW50PXt4OmMseTpkfSx7eDp0LngrYyx5OnQueStkfX1fYXBwbHlQb3NpdGlvbih0LGUpe2lmKHRoaXMuX3NldFRyYW5zZm9ybU9yaWdpbih0KSx0aGlzLl9zZXRPdmVybGF5RWxlbWVudFN0eWxlcyhlLHQpLHRoaXMuX3NldEJvdW5kaW5nQm94U3R5bGVzKGUsdCksdC5wYW5lbENsYXNzJiZ0aGlzLl9hZGRQYW5lbENsYXNzZXModC5wYW5lbENsYXNzKSx0aGlzLl9sYXN0UG9zaXRpb249dCx0aGlzLl9wb3NpdGlvbkNoYW5nZXMub2JzZXJ2ZXJzLmxlbmd0aCl7Y29uc3QgZT10aGlzLl9nZXRTY3JvbGxWaXNpYmlsaXR5KCksbj1uZXcgQUYodCxlKTt0aGlzLl9wb3NpdGlvbkNoYW5nZXMubmV4dChuKX10aGlzLl9pc0luaXRpYWxSZW5kZXI9ITF9X3NldFRyYW5zZm9ybU9yaWdpbih0KXtpZighdGhpcy5fdHJhbnNmb3JtT3JpZ2luU2VsZWN0b3IpcmV0dXJuO2NvbnN0IGU9dGhpcy5fYm91bmRpbmdCb3gucXVlcnlTZWxlY3RvckFsbCh0aGlzLl90cmFuc2Zvcm1PcmlnaW5TZWxlY3Rvcik7bGV0IG4sbz10Lm92ZXJsYXlZO249ImNlbnRlciI9PT10Lm92ZXJsYXlYPyJjZW50ZXIiOnRoaXMuX2lzUnRsKCk/InN0YXJ0Ij09PXQub3ZlcmxheVg/InJpZ2h0IjoibGVmdCI6InN0YXJ0Ij09PXQub3ZlcmxheVg/ImxlZnQiOiJyaWdodCI7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0KyspZVt0XS5zdHlsZS50cmFuc2Zvcm1PcmlnaW49YCR7bn0gJHtvfWB9X2NhbGN1bGF0ZUJvdW5kaW5nQm94UmVjdCh0LGUpe2NvbnN0IG49dGhpcy5fdmlld3BvcnRSZWN0LG89dGhpcy5faXNSdGwoKTtsZXQgaSxhLHIscyxsLGM7aWYoInRvcCI9PT1lLm92ZXJsYXlZKWE9dC55LGk9bi5oZWlnaHQtYSt0aGlzLl92aWV3cG9ydE1hcmdpbjtlbHNlIGlmKCJib3R0b20iPT09ZS5vdmVybGF5WSlyPW4uaGVpZ2h0LXQueSsyKnRoaXMuX3ZpZXdwb3J0TWFyZ2luLGk9bi5oZWlnaHQtcit0aGlzLl92aWV3cG9ydE1hcmdpbjtlbHNle2NvbnN0IGU9TWF0aC5taW4obi5ib3R0b20tdC55K24udG9wLHQueSksbz10aGlzLl9sYXN0Qm91bmRpbmdCb3hTaXplLmhlaWdodDtpPTIqZSxhPXQueS1lLGk+byYmIXRoaXMuX2lzSW5pdGlhbFJlbmRlciYmIXRoaXMuX2dyb3dBZnRlck9wZW4mJihhPXQueS1vLzIpfWlmKCJlbmQiPT09ZS5vdmVybGF5WCYmIW98fCJzdGFydCI9PT1lLm92ZXJsYXlYJiZvKWM9bi53aWR0aC10LngrdGhpcy5fdmlld3BvcnRNYXJnaW4scz10LngtdGhpcy5fdmlld3BvcnRNYXJnaW47ZWxzZSBpZigic3RhcnQiPT09ZS5vdmVybGF5WCYmIW98fCJlbmQiPT09ZS5vdmVybGF5WCYmbylsPXQueCxzPW4ucmlnaHQtdC54O2Vsc2V7Y29uc3QgZT1NYXRoLm1pbihuLnJpZ2h0LXQueCtuLmxlZnQsdC54KSxvPXRoaXMuX2xhc3RCb3VuZGluZ0JveFNpemUud2lkdGg7cz0yKmUsbD10LngtZSxzPm8mJiF0aGlzLl9pc0luaXRpYWxSZW5kZXImJiF0aGlzLl9ncm93QWZ0ZXJPcGVuJiYobD10Lngtby8yKX1yZXR1cm57dG9wOmEsbGVmdDpsLGJvdHRvbTpyLHJpZ2h0OmMsd2lkdGg6cyxoZWlnaHQ6aX19X3NldEJvdW5kaW5nQm94U3R5bGVzKHQsZSl7Y29uc3Qgbj10aGlzLl9jYWxjdWxhdGVCb3VuZGluZ0JveFJlY3QodCxlKTt0aGlzLl9pc0luaXRpYWxSZW5kZXJ8fHRoaXMuX2dyb3dBZnRlck9wZW58fChuLmhlaWdodD1NYXRoLm1pbihuLmhlaWdodCx0aGlzLl9sYXN0Qm91bmRpbmdCb3hTaXplLmhlaWdodCksbi53aWR0aD1NYXRoLm1pbihuLndpZHRoLHRoaXMuX2xhc3RCb3VuZGluZ0JveFNpemUud2lkdGgpKTtjb25zdCBvPXt9O2lmKHRoaXMuX2hhc0V4YWN0UG9zaXRpb24oKSlvLnRvcD1vLmxlZnQ9IjAiLG8uYm90dG9tPW8ucmlnaHQ9by5tYXhIZWlnaHQ9by5tYXhXaWR0aD0iIixvLndpZHRoPW8uaGVpZ2h0PSIxMDAlIjtlbHNle2NvbnN0IHQ9dGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKS5tYXhIZWlnaHQsaT10aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpLm1heFdpZHRoO28uaGVpZ2h0PWRJKG4uaGVpZ2h0KSxvLnRvcD1kSShuLnRvcCksby5ib3R0b209ZEkobi5ib3R0b20pLG8ud2lkdGg9ZEkobi53aWR0aCksby5sZWZ0PWRJKG4ubGVmdCksby5yaWdodD1kSShuLnJpZ2h0KSxvLmFsaWduSXRlbXM9ImNlbnRlciI9PT1lLm92ZXJsYXlYPyJjZW50ZXIiOiJlbmQiPT09ZS5vdmVybGF5WD8iZmxleC1lbmQiOiJmbGV4LXN0YXJ0IixvLmp1c3RpZnlDb250ZW50PSJjZW50ZXIiPT09ZS5vdmVybGF5WT8iY2VudGVyIjoiYm90dG9tIj09PWUub3ZlcmxheVk/ImZsZXgtZW5kIjoiZmxleC1zdGFydCIsdCYmKG8ubWF4SGVpZ2h0PWRJKHQpKSxpJiYoby5tYXhXaWR0aD1kSShpKSl9dGhpcy5fbGFzdEJvdW5kaW5nQm94U2l6ZT1uLFVGKHRoaXMuX2JvdW5kaW5nQm94LnN0eWxlLG8pfV9yZXNldEJvdW5kaW5nQm94U3R5bGVzKCl7VUYodGhpcy5fYm91bmRpbmdCb3guc3R5bGUse3RvcDoiMCIsbGVmdDoiMCIscmlnaHQ6IjAiLGJvdHRvbToiMCIsaGVpZ2h0OiIiLHdpZHRoOiIiLGFsaWduSXRlbXM6IiIsanVzdGlmeUNvbnRlbnQ6IiJ9KX1fcmVzZXRPdmVybGF5RWxlbWVudFN0eWxlcygpe1VGKHRoaXMuX3BhbmUuc3R5bGUse3RvcDoiIixsZWZ0OiIiLGJvdHRvbToiIixyaWdodDoiIixwb3NpdGlvbjoiIix0cmFuc2Zvcm06IiJ9KX1fc2V0T3ZlcmxheUVsZW1lbnRTdHlsZXModCxlKXtjb25zdCBuPXt9LG89dGhpcy5faGFzRXhhY3RQb3NpdGlvbigpLGk9dGhpcy5faGFzRmxleGlibGVEaW1lbnNpb25zLGE9dGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKTtpZihvKXtjb25zdCBvPXRoaXMuX3ZpZXdwb3J0UnVsZXIuZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpO1VGKG4sdGhpcy5fZ2V0RXhhY3RPdmVybGF5WShlLHQsbykpLFVGKG4sdGhpcy5fZ2V0RXhhY3RPdmVybGF5WChlLHQsbykpfWVsc2Ugbi5wb3NpdGlvbj0ic3RhdGljIjtsZXQgcj0iIixzPXRoaXMuX2dldE9mZnNldChlLCJ4IiksbD10aGlzLl9nZXRPZmZzZXQoZSwieSIpO3MmJihyKz1gdHJhbnNsYXRlWCgke3N9cHgpIGApLGwmJihyKz1gdHJhbnNsYXRlWSgke2x9cHgpYCksbi50cmFuc2Zvcm09ci50cmltKCksYS5tYXhIZWlnaHQmJihvP24ubWF4SGVpZ2h0PWRJKGEubWF4SGVpZ2h0KTppJiYobi5tYXhIZWlnaHQ9IiIpKSxhLm1heFdpZHRoJiYobz9uLm1heFdpZHRoPWRJKGEubWF4V2lkdGgpOmkmJihuLm1heFdpZHRoPSIiKSksVUYodGhpcy5fcGFuZS5zdHlsZSxuKX1fZ2V0RXhhY3RPdmVybGF5WSh0LGUsbil7bGV0IG89e3RvcDoiIixib3R0b206IiJ9LGk9dGhpcy5fZ2V0T3ZlcmxheVBvaW50KGUsdGhpcy5fb3ZlcmxheVJlY3QsdCk7dGhpcy5faXNQdXNoZWQmJihpPXRoaXMuX3B1c2hPdmVybGF5T25TY3JlZW4oaSx0aGlzLl9vdmVybGF5UmVjdCxuKSk7bGV0IGE9dGhpcy5fb3ZlcmxheUNvbnRhaW5lci5nZXRDb250YWluZXJFbGVtZW50KCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO3JldHVybiBpLnktPWEsImJvdHRvbSI9PT10Lm92ZXJsYXlZP28uYm90dG9tPXRoaXMuX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQtKGkueSt0aGlzLl9vdmVybGF5UmVjdC5oZWlnaHQpKyJweCI6by50b3A9ZEkoaS55KSxvfV9nZXRFeGFjdE92ZXJsYXlYKHQsZSxuKXtsZXQgbyxpPXtsZWZ0OiIiLHJpZ2h0OiIifSxhPXRoaXMuX2dldE92ZXJsYXlQb2ludChlLHRoaXMuX292ZXJsYXlSZWN0LHQpO3JldHVybiB0aGlzLl9pc1B1c2hlZCYmKGE9dGhpcy5fcHVzaE92ZXJsYXlPblNjcmVlbihhLHRoaXMuX292ZXJsYXlSZWN0LG4pKSxvPXRoaXMuX2lzUnRsKCk/ImVuZCI9PT10Lm92ZXJsYXlYPyJsZWZ0IjoicmlnaHQiOiJlbmQiPT09dC5vdmVybGF5WD8icmlnaHQiOiJsZWZ0IiwicmlnaHQiPT09bz9pLnJpZ2h0PXRoaXMuX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aC0oYS54K3RoaXMuX292ZXJsYXlSZWN0LndpZHRoKSsicHgiOmkubGVmdD1kSShhLngpLGl9X2dldFNjcm9sbFZpc2liaWxpdHkoKXtjb25zdCB0PXRoaXMuX2dldE9yaWdpblJlY3QoKSxlPXRoaXMuX3BhbmUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj10aGlzLl9zY3JvbGxhYmxlcy5tYXAoKHQ9PnQuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpKTtyZXR1cm57aXNPcmlnaW5DbGlwcGVkOlBGKHQsbiksaXNPcmlnaW5PdXRzaWRlVmlldzpPRih0LG4pLGlzT3ZlcmxheUNsaXBwZWQ6UEYoZSxuKSxpc092ZXJsYXlPdXRzaWRlVmlldzpPRihlLG4pfX1fc3VidHJhY3RPdmVyZmxvd3ModCwuLi5lKXtyZXR1cm4gZS5yZWR1Y2UoKCh0LGUpPT50LU1hdGgubWF4KGUsMCkpLHQpfV9nZXROYXJyb3dlZFZpZXdwb3J0UmVjdCgpe2NvbnN0IHQ9dGhpcy5fZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoLGU9dGhpcy5fZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCxuPXRoaXMuX3ZpZXdwb3J0UnVsZXIuZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpO3JldHVybnt0b3A6bi50b3ArdGhpcy5fdmlld3BvcnRNYXJnaW4sbGVmdDpuLmxlZnQrdGhpcy5fdmlld3BvcnRNYXJnaW4scmlnaHQ6bi5sZWZ0K3QtdGhpcy5fdmlld3BvcnRNYXJnaW4sYm90dG9tOm4udG9wK2UtdGhpcy5fdmlld3BvcnRNYXJnaW4sd2lkdGg6dC0yKnRoaXMuX3ZpZXdwb3J0TWFyZ2luLGhlaWdodDplLTIqdGhpcy5fdmlld3BvcnRNYXJnaW59fV9pc1J0bCgpe3JldHVybiJydGwiPT09dGhpcy5fb3ZlcmxheVJlZi5nZXREaXJlY3Rpb24oKX1faGFzRXhhY3RQb3NpdGlvbigpe3JldHVybiF0aGlzLl9oYXNGbGV4aWJsZURpbWVuc2lvbnN8fHRoaXMuX2lzUHVzaGVkfV9nZXRPZmZzZXQodCxlKXtyZXR1cm4ieCI9PT1lP251bGw9PXQub2Zmc2V0WD90aGlzLl9vZmZzZXRYOnQub2Zmc2V0WDpudWxsPT10Lm9mZnNldFk/dGhpcy5fb2Zmc2V0WTp0Lm9mZnNldFl9X3ZhbGlkYXRlUG9zaXRpb25zKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSl7aWYoIXRoaXMuX3ByZWZlcnJlZFBvc2l0aW9ucy5sZW5ndGgpdGhyb3cgRXJyb3IoIkZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneTogQXQgbGVhc3Qgb25lIHBvc2l0aW9uIGlzIHJlcXVpcmVkLiIpO3RoaXMuX3ByZWZlcnJlZFBvc2l0aW9ucy5mb3JFYWNoKCh0PT57VEYoIm9yaWdpblgiLHQub3JpZ2luWCksUkYoIm9yaWdpblkiLHQub3JpZ2luWSksVEYoIm92ZXJsYXlYIix0Lm92ZXJsYXlYKSxSRigib3ZlcmxheVkiLHQub3ZlcmxheVkpfSkpfX1fYWRkUGFuZWxDbGFzc2VzKHQpe3RoaXMuX3BhbmUmJmNJKHQpLmZvckVhY2goKHQ9PnsiIiE9PXQmJi0xPT09dGhpcy5fYXBwbGllZFBhbmVsQ2xhc3Nlcy5pbmRleE9mKHQpJiYodGhpcy5fYXBwbGllZFBhbmVsQ2xhc3Nlcy5wdXNoKHQpLHRoaXMuX3BhbmUuY2xhc3NMaXN0LmFkZCh0KSl9KSl9X2NsZWFyUGFuZWxDbGFzc2VzKCl7dGhpcy5fcGFuZSYmKHRoaXMuX2FwcGxpZWRQYW5lbENsYXNzZXMuZm9yRWFjaCgodD0+e3RoaXMuX3BhbmUuY2xhc3NMaXN0LnJlbW92ZSh0KX0pKSx0aGlzLl9hcHBsaWVkUGFuZWxDbGFzc2VzPVtdKX1fZ2V0T3JpZ2luUmVjdCgpe2NvbnN0IHQ9dGhpcy5fb3JpZ2luO2lmKHQgaW5zdGFuY2VvZiBjaClyZXR1cm4gdC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKHQgaW5zdGFuY2VvZiBFbGVtZW50KXJldHVybiB0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2NvbnN0IGU9dC53aWR0aHx8MCxuPXQuaGVpZ2h0fHwwO3JldHVybnt0b3A6dC55LGJvdHRvbTp0LnkrbixsZWZ0OnQueCxyaWdodDp0LngrZSxoZWlnaHQ6bix3aWR0aDplfX19ZnVuY3Rpb24gVUYodCxlKXtmb3IobGV0IG4gaW4gZSllLmhhc093blByb3BlcnR5KG4pJiYodFtuXT1lW25dKTtyZXR1cm4gdH1mdW5jdGlvbiBXRih0KXtpZigibnVtYmVyIiE9dHlwZW9mIHQmJm51bGwhPXQpe2NvbnN0W2Usbl09dC5zcGxpdChWRik7cmV0dXJuIG4mJiJweCIhPT1uP251bGw6cGFyc2VGbG9hdChlKX1yZXR1cm4gdHx8bnVsbH1mdW5jdGlvbiBHRih0KXtyZXR1cm57dG9wOk1hdGguZmxvb3IodC50b3ApLHJpZ2h0Ok1hdGguZmxvb3IodC5yaWdodCksYm90dG9tOk1hdGguZmxvb3IodC5ib3R0b20pLGxlZnQ6TWF0aC5mbG9vcih0LmxlZnQpLHdpZHRoOk1hdGguZmxvb3IodC53aWR0aCksaGVpZ2h0Ok1hdGguZmxvb3IodC5oZWlnaHQpfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY2xhc3MgWUZ7Y29uc3RydWN0b3IodCxlLG4sbyxpLGEscil7dGhpcy5fcHJlZmVycmVkUG9zaXRpb25zPVtdLHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3k9bmV3IGpGKG4sbyxpLGEscikud2l0aEZsZXhpYmxlRGltZW5zaW9ucyghMSkud2l0aFB1c2goITEpLndpdGhWaWV3cG9ydE1hcmdpbigwKSx0aGlzLndpdGhGYWxsYmFja1Bvc2l0aW9uKHQsZSksdGhpcy5vblBvc2l0aW9uQ2hhbmdlPXRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kucG9zaXRpb25DaGFuZ2VzfWdldCBwb3NpdGlvbnMoKXtyZXR1cm4gdGhpcy5fcHJlZmVycmVkUG9zaXRpb25zfWF0dGFjaCh0KXt0aGlzLl9vdmVybGF5UmVmPXQsdGhpcy5fcG9zaXRpb25TdHJhdGVneS5hdHRhY2godCksdGhpcy5fZGlyZWN0aW9uJiYodC5zZXREaXJlY3Rpb24odGhpcy5fZGlyZWN0aW9uKSx0aGlzLl9kaXJlY3Rpb249bnVsbCl9ZGlzcG9zZSgpe3RoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kuZGlzcG9zZSgpfWRldGFjaCgpe3RoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kuZGV0YWNoKCl9YXBwbHkoKXt0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LmFwcGx5KCl9cmVjYWxjdWxhdGVMYXN0UG9zaXRpb24oKXt0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LnJlYXBwbHlMYXN0UG9zaXRpb24oKX13aXRoU2Nyb2xsYWJsZUNvbnRhaW5lcnModCl7dGhpcy5fcG9zaXRpb25TdHJhdGVneS53aXRoU2Nyb2xsYWJsZUNvbnRhaW5lcnModCl9d2l0aEZhbGxiYWNrUG9zaXRpb24odCxlLG4sbyl7Y29uc3QgaT1uZXcgREYodCxlLG4sbyk7cmV0dXJuIHRoaXMuX3ByZWZlcnJlZFBvc2l0aW9ucy5wdXNoKGkpLHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kud2l0aFBvc2l0aW9ucyh0aGlzLl9wcmVmZXJyZWRQb3NpdGlvbnMpLHRoaXN9d2l0aERpcmVjdGlvbih0KXtyZXR1cm4gdGhpcy5fb3ZlcmxheVJlZj90aGlzLl9vdmVybGF5UmVmLnNldERpcmVjdGlvbih0KTp0aGlzLl9kaXJlY3Rpb249dCx0aGlzfXdpdGhPZmZzZXRYKHQpe3JldHVybiB0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LndpdGhEZWZhdWx0T2Zmc2V0WCh0KSx0aGlzfXdpdGhPZmZzZXRZKHQpe3JldHVybiB0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LndpdGhEZWZhdWx0T2Zmc2V0WSh0KSx0aGlzfXdpdGhMb2NrZWRQb3NpdGlvbih0KXtyZXR1cm4gdGhpcy5fcG9zaXRpb25TdHJhdGVneS53aXRoTG9ja2VkUG9zaXRpb24odCksdGhpc313aXRoUG9zaXRpb25zKHQpe3JldHVybiB0aGlzLl9wcmVmZXJyZWRQb3NpdGlvbnM9dC5zbGljZSgpLHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kud2l0aFBvc2l0aW9ucyh0aGlzLl9wcmVmZXJyZWRQb3NpdGlvbnMpLHRoaXN9c2V0T3JpZ2luKHQpe3JldHVybiB0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LnNldE9yaWdpbih0KSx0aGlzfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY29uc3QgcUY9ImNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyIjtjbGFzcyBaRntjb25zdHJ1Y3Rvcigpe3RoaXMuX2Nzc1Bvc2l0aW9uPSJzdGF0aWMiLHRoaXMuX3RvcE9mZnNldD0iIix0aGlzLl9ib3R0b21PZmZzZXQ9IiIsdGhpcy5fbGVmdE9mZnNldD0iIix0aGlzLl9yaWdodE9mZnNldD0iIix0aGlzLl9hbGlnbkl0ZW1zPSIiLHRoaXMuX2p1c3RpZnlDb250ZW50PSIiLHRoaXMuX3dpZHRoPSIiLHRoaXMuX2hlaWdodD0iIn1hdHRhY2godCl7Y29uc3QgZT10LmdldENvbmZpZygpO3RoaXMuX292ZXJsYXlSZWY9dCx0aGlzLl93aWR0aCYmIWUud2lkdGgmJnQudXBkYXRlU2l6ZSh7d2lkdGg6dGhpcy5fd2lkdGh9KSx0aGlzLl9oZWlnaHQmJiFlLmhlaWdodCYmdC51cGRhdGVTaXplKHtoZWlnaHQ6dGhpcy5faGVpZ2h0fSksdC5ob3N0RWxlbWVudC5jbGFzc0xpc3QuYWRkKHFGKSx0aGlzLl9pc0Rpc3Bvc2VkPSExfXRvcCh0PSIiKXtyZXR1cm4gdGhpcy5fYm90dG9tT2Zmc2V0PSIiLHRoaXMuX3RvcE9mZnNldD10LHRoaXMuX2FsaWduSXRlbXM9ImZsZXgtc3RhcnQiLHRoaXN9bGVmdCh0PSIiKXtyZXR1cm4gdGhpcy5fcmlnaHRPZmZzZXQ9IiIsdGhpcy5fbGVmdE9mZnNldD10LHRoaXMuX2p1c3RpZnlDb250ZW50PSJmbGV4LXN0YXJ0Iix0aGlzfWJvdHRvbSh0PSIiKXtyZXR1cm4gdGhpcy5fdG9wT2Zmc2V0PSIiLHRoaXMuX2JvdHRvbU9mZnNldD10LHRoaXMuX2FsaWduSXRlbXM9ImZsZXgtZW5kIix0aGlzfXJpZ2h0KHQ9IiIpe3JldHVybiB0aGlzLl9sZWZ0T2Zmc2V0PSIiLHRoaXMuX3JpZ2h0T2Zmc2V0PXQsdGhpcy5fanVzdGlmeUNvbnRlbnQ9ImZsZXgtZW5kIix0aGlzfXdpZHRoKHQ9IiIpe3JldHVybiB0aGlzLl9vdmVybGF5UmVmP3RoaXMuX292ZXJsYXlSZWYudXBkYXRlU2l6ZSh7d2lkdGg6dH0pOnRoaXMuX3dpZHRoPXQsdGhpc31oZWlnaHQodD0iIil7cmV0dXJuIHRoaXMuX292ZXJsYXlSZWY/dGhpcy5fb3ZlcmxheVJlZi51cGRhdGVTaXplKHtoZWlnaHQ6dH0pOnRoaXMuX2hlaWdodD10LHRoaXN9Y2VudGVySG9yaXpvbnRhbGx5KHQ9IiIpe3JldHVybiB0aGlzLmxlZnQodCksdGhpcy5fanVzdGlmeUNvbnRlbnQ9ImNlbnRlciIsdGhpc31jZW50ZXJWZXJ0aWNhbGx5KHQ9IiIpe3JldHVybiB0aGlzLnRvcCh0KSx0aGlzLl9hbGlnbkl0ZW1zPSJjZW50ZXIiLHRoaXN9YXBwbHkoKXtpZighdGhpcy5fb3ZlcmxheVJlZnx8IXRoaXMuX292ZXJsYXlSZWYuaGFzQXR0YWNoZWQoKSlyZXR1cm47Y29uc3QgdD10aGlzLl9vdmVybGF5UmVmLm92ZXJsYXlFbGVtZW50LnN0eWxlLGU9dGhpcy5fb3ZlcmxheVJlZi5ob3N0RWxlbWVudC5zdHlsZSxuPXRoaXMuX292ZXJsYXlSZWYuZ2V0Q29uZmlnKCkse3dpZHRoOm8saGVpZ2h0OmksbWF4V2lkdGg6YSxtYXhIZWlnaHQ6cn09bixzPSEoIjEwMCUiIT09byYmIjEwMHZ3IiE9PW98fGEmJiIxMDAlIiE9PWEmJiIxMDB2dyIhPT1hKSxsPSEoIjEwMCUiIT09aSYmIjEwMHZoIiE9PWl8fHImJiIxMDAlIiE9PXImJiIxMDB2aCIhPT1yKTt0LnBvc2l0aW9uPXRoaXMuX2Nzc1Bvc2l0aW9uLHQubWFyZ2luTGVmdD1zPyIwIjp0aGlzLl9sZWZ0T2Zmc2V0LHQubWFyZ2luVG9wPWw/IjAiOnRoaXMuX3RvcE9mZnNldCx0Lm1hcmdpbkJvdHRvbT10aGlzLl9ib3R0b21PZmZzZXQsdC5tYXJnaW5SaWdodD10aGlzLl9yaWdodE9mZnNldCxzP2UuanVzdGlmeUNvbnRlbnQ9ImZsZXgtc3RhcnQiOiJjZW50ZXIiPT09dGhpcy5fanVzdGlmeUNvbnRlbnQ/ZS5qdXN0aWZ5Q29udGVudD0iY2VudGVyIjoicnRsIj09PXRoaXMuX292ZXJsYXlSZWYuZ2V0Q29uZmlnKCkuZGlyZWN0aW9uPyJmbGV4LXN0YXJ0Ij09PXRoaXMuX2p1c3RpZnlDb250ZW50P2UuanVzdGlmeUNvbnRlbnQ9ImZsZXgtZW5kIjoiZmxleC1lbmQiPT09dGhpcy5fanVzdGlmeUNvbnRlbnQmJihlLmp1c3RpZnlDb250ZW50PSJmbGV4LXN0YXJ0Iik6ZS5qdXN0aWZ5Q29udGVudD10aGlzLl9qdXN0aWZ5Q29udGVudCxlLmFsaWduSXRlbXM9bD8iZmxleC1zdGFydCI6dGhpcy5fYWxpZ25JdGVtc31kaXNwb3NlKCl7aWYodGhpcy5faXNEaXNwb3NlZHx8IXRoaXMuX292ZXJsYXlSZWYpcmV0dXJuO2NvbnN0IHQ9dGhpcy5fb3ZlcmxheVJlZi5vdmVybGF5RWxlbWVudC5zdHlsZSxlPXRoaXMuX292ZXJsYXlSZWYuaG9zdEVsZW1lbnQsbj1lLnN0eWxlO2UuY2xhc3NMaXN0LnJlbW92ZShxRiksbi5qdXN0aWZ5Q29udGVudD1uLmFsaWduSXRlbXM9dC5tYXJnaW5Ub3A9dC5tYXJnaW5Cb3R0b209dC5tYXJnaW5MZWZ0PXQubWFyZ2luUmlnaHQ9dC5wb3NpdGlvbj0iIix0aGlzLl9vdmVybGF5UmVmPW51bGwsdGhpcy5faXNEaXNwb3NlZD0hMH19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NsYXNzIFhGe2NvbnN0cnVjdG9yKHQsZSxuLG8pe3RoaXMuX3ZpZXdwb3J0UnVsZXI9dCx0aGlzLl9kb2N1bWVudD1lLHRoaXMuX3BsYXRmb3JtPW4sdGhpcy5fb3ZlcmxheUNvbnRhaW5lcj1vfWdsb2JhbCgpe3JldHVybiBuZXcgWkZ9Y29ubmVjdGVkVG8odCxlLG4pe3JldHVybiBuZXcgWUYoZSxuLHQsdGhpcy5fdmlld3BvcnRSdWxlcix0aGlzLl9kb2N1bWVudCx0aGlzLl9wbGF0Zm9ybSx0aGlzLl9vdmVybGF5Q29udGFpbmVyKX1mbGV4aWJsZUNvbm5lY3RlZFRvKHQpe3JldHVybiBuZXcgakYodCx0aGlzLl92aWV3cG9ydFJ1bGVyLHRoaXMuX2RvY3VtZW50LHRoaXMuX3BsYXRmb3JtLHRoaXMuX292ZXJsYXlDb250YWluZXIpfX1YRi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8WEYpKHVzKFFIKSx1cyhVQyksdXMoZkkpLHVzKEZGKSl9LFhGLsm1cHJvdj1sbyh7ZmFjdG9yeTpmdW5jdGlvbiB0KCl7cmV0dXJuIG5ldyBYRih1cyhRSCksdXMoVUMpLHVzKGZJKSx1cyhGRikpfSx0b2tlbjpYRixwcm92aWRlZEluOiJyb290In0pLFhGLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6UUh9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltVQ119XX0se3R5cGU6Zkl9LHt0eXBlOkZGfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihYRixbe3R5cGU6Sm0sYXJnczpbe3Byb3ZpZGVkSW46InJvb3QifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6UUh9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltVQ119XX0se3R5cGU6Zkl9LHt0eXBlOkZGfV19KSxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmxldCBLRj0wO2NsYXNzIEpGe2NvbnN0cnVjdG9yKHQsZSxuLG8saSxhLHIscyxsLGMsZCl7dGhpcy5zY3JvbGxTdHJhdGVnaWVzPXQsdGhpcy5fb3ZlcmxheUNvbnRhaW5lcj1lLHRoaXMuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1uLHRoaXMuX3Bvc2l0aW9uQnVpbGRlcj1vLHRoaXMuX2tleWJvYXJkRGlzcGF0Y2hlcj1pLHRoaXMuX2luamVjdG9yPWEsdGhpcy5fbmdab25lPXIsdGhpcy5fZG9jdW1lbnQ9cyx0aGlzLl9kaXJlY3Rpb25hbGl0eT1sLHRoaXMuX2xvY2F0aW9uPWMsdGhpcy5fb3V0c2lkZUNsaWNrRGlzcGF0Y2hlcj1kfWNyZWF0ZSh0KXtjb25zdCBlPXRoaXMuX2NyZWF0ZUhvc3RFbGVtZW50KCksbj10aGlzLl9jcmVhdGVQYW5lRWxlbWVudChlKSxvPXRoaXMuX2NyZWF0ZVBvcnRhbE91dGxldChuKSxpPW5ldyBTRih0KTtyZXR1cm4gaS5kaXJlY3Rpb249aS5kaXJlY3Rpb258fHRoaXMuX2RpcmVjdGlvbmFsaXR5LnZhbHVlLG5ldyBMRihvLGUsbixpLHRoaXMuX25nWm9uZSx0aGlzLl9rZXlib2FyZERpc3BhdGNoZXIsdGhpcy5fZG9jdW1lbnQsdGhpcy5fbG9jYXRpb24sdGhpcy5fb3V0c2lkZUNsaWNrRGlzcGF0Y2hlcil9cG9zaXRpb24oKXtyZXR1cm4gdGhpcy5fcG9zaXRpb25CdWlsZGVyfV9jcmVhdGVQYW5lRWxlbWVudCh0KXtjb25zdCBlPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBlLmlkPSJjZGstb3ZlcmxheS0iK0tGKyssZS5jbGFzc0xpc3QuYWRkKCJjZGstb3ZlcmxheS1wYW5lIiksdC5hcHBlbmRDaGlsZChlKSxlfV9jcmVhdGVIb3N0RWxlbWVudCgpe2NvbnN0IHQ9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIHRoaXMuX292ZXJsYXlDb250YWluZXIuZ2V0Q29udGFpbmVyRWxlbWVudCgpLmFwcGVuZENoaWxkKHQpLHR9X2NyZWF0ZVBvcnRhbE91dGxldCh0KXtyZXR1cm4gdGhpcy5fYXBwUmVmfHwodGhpcy5fYXBwUmVmPXRoaXMuX2luamVjdG9yLmdldChfQykpLG5ldyBwRih0LHRoaXMuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcix0aGlzLl9hcHBSZWYsdGhpcy5faW5qZWN0b3IsdGhpcy5fZG9jdW1lbnQpfX1KRi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8SkYpKHVzKGtGKSx1cyhGRiksdXMocmgpLHVzKFhGKSx1cyhJRiksdXMoUXApLHVzKHRDKSx1cyhVQyksdXMoTXopLHVzKG9NKSx1cyh6RikpfSxKRi7JtXByb3Y9bG8oe3Rva2VuOkpGLGZhY3Rvcnk6SkYuybVmYWN9KSxKRi5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmtGfSx7dHlwZTpGRn0se3R5cGU6cmh9LHt0eXBlOlhGfSx7dHlwZTpJRn0se3R5cGU6UXB9LHt0eXBlOnRDfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbVUNdfV19LHt0eXBlOk16fSx7dHlwZTpvTX0se3R5cGU6ekZ9XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEpGLFt7dHlwZTpKbX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTprRn0se3R5cGU6RkZ9LHt0eXBlOnJofSx7dHlwZTpYRn0se3R5cGU6SUZ9LHt0eXBlOlFwfSx7dHlwZTp0Q30se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W1VDXX1dfSx7dHlwZTpNen0se3R5cGU6b019LHt0eXBlOnpGfV19KSxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IFFGPVt7b3JpZ2luWDoic3RhcnQiLG9yaWdpblk6ImJvdHRvbSIsb3ZlcmxheVg6InN0YXJ0IixvdmVybGF5WToidG9wIn0se29yaWdpblg6InN0YXJ0IixvcmlnaW5ZOiJ0b3AiLG92ZXJsYXlYOiJzdGFydCIsb3ZlcmxheVk6ImJvdHRvbSJ9LHtvcmlnaW5YOiJlbmQiLG9yaWdpblk6InRvcCIsb3ZlcmxheVg6ImVuZCIsb3ZlcmxheVk6ImJvdHRvbSJ9LHtvcmlnaW5YOiJlbmQiLG9yaWdpblk6ImJvdHRvbSIsb3ZlcmxheVg6ImVuZCIsb3ZlcmxheVk6InRvcCJ9XSwkRj1uZXcgTnIoImNkay1jb25uZWN0ZWQtb3ZlcmxheS1zY3JvbGwtc3RyYXRlZ3kiKTtjbGFzcyB0THtjb25zdHJ1Y3Rvcih0KXt0aGlzLmVsZW1lbnRSZWY9dH19dEwuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHRMKShNdShjaCkpfSx0TC7JtWRpcj1Kbyh7dHlwZTp0TCxzZWxlY3RvcnM6W1siIiwiY2RrLW92ZXJsYXktb3JpZ2luIiwiIl0sWyIiLCJvdmVybGF5LW9yaWdpbiIsIiJdLFsiIiwiY2RrT3ZlcmxheU9yaWdpbiIsIiJdXSxleHBvcnRBczpbImNka092ZXJsYXlPcmlnaW4iXX0pLHRMLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6Y2h9XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHRMLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6IltjZGstb3ZlcmxheS1vcmlnaW5dLCBbb3ZlcmxheS1vcmlnaW5dLCBbY2RrT3ZlcmxheU9yaWdpbl0iLGV4cG9ydEFzOiJjZGtPdmVybGF5T3JpZ2luIn1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmNofV19KSxudWxsKTtjbGFzcyBlTHtjb25zdHJ1Y3Rvcih0LGUsbixvLGkpe3RoaXMuX292ZXJsYXk9dCx0aGlzLl9kaXI9aSx0aGlzLl9oYXNCYWNrZHJvcD0hMSx0aGlzLl9sb2NrUG9zaXRpb249ITEsdGhpcy5fZ3Jvd0FmdGVyT3Blbj0hMSx0aGlzLl9mbGV4aWJsZURpbWVuc2lvbnM9ITEsdGhpcy5fcHVzaD0hMSx0aGlzLl9iYWNrZHJvcFN1YnNjcmlwdGlvbj1sLkVNUFRZLHRoaXMuX2F0dGFjaFN1YnNjcmlwdGlvbj1sLkVNUFRZLHRoaXMuX2RldGFjaFN1YnNjcmlwdGlvbj1sLkVNUFRZLHRoaXMuX3Bvc2l0aW9uU3Vic2NyaXB0aW9uPWwuRU1QVFksdGhpcy52aWV3cG9ydE1hcmdpbj0wLHRoaXMub3Blbj0hMSx0aGlzLmRpc2FibGVDbG9zZT0hMSx0aGlzLmJhY2tkcm9wQ2xpY2s9bmV3IEFiLHRoaXMucG9zaXRpb25DaGFuZ2U9bmV3IEFiLHRoaXMuYXR0YWNoPW5ldyBBYix0aGlzLmRldGFjaD1uZXcgQWIsdGhpcy5vdmVybGF5S2V5ZG93bj1uZXcgQWIsdGhpcy5vdmVybGF5T3V0c2lkZUNsaWNrPW5ldyBBYix0aGlzLl90ZW1wbGF0ZVBvcnRhbD1uZXcgbEYoZSxuKSx0aGlzLl9zY3JvbGxTdHJhdGVneUZhY3Rvcnk9byx0aGlzLnNjcm9sbFN0cmF0ZWd5PXRoaXMuX3Njcm9sbFN0cmF0ZWd5RmFjdG9yeSgpfWdldCBvZmZzZXRYKCl7cmV0dXJuIHRoaXMuX29mZnNldFh9c2V0IG9mZnNldFgodCl7dGhpcy5fb2Zmc2V0WD10LHRoaXMuX3Bvc2l0aW9uJiZ0aGlzLl91cGRhdGVQb3NpdGlvblN0cmF0ZWd5KHRoaXMuX3Bvc2l0aW9uKX1nZXQgb2Zmc2V0WSgpe3JldHVybiB0aGlzLl9vZmZzZXRZfXNldCBvZmZzZXRZKHQpe3RoaXMuX29mZnNldFk9dCx0aGlzLl9wb3NpdGlvbiYmdGhpcy5fdXBkYXRlUG9zaXRpb25TdHJhdGVneSh0aGlzLl9wb3NpdGlvbil9Z2V0IGhhc0JhY2tkcm9wKCl7cmV0dXJuIHRoaXMuX2hhc0JhY2tkcm9wfXNldCBoYXNCYWNrZHJvcCh0KXt0aGlzLl9oYXNCYWNrZHJvcD1ySSh0KX1nZXQgbG9ja1Bvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX2xvY2tQb3NpdGlvbn1zZXQgbG9ja1Bvc2l0aW9uKHQpe3RoaXMuX2xvY2tQb3NpdGlvbj1ySSh0KX1nZXQgZmxleGlibGVEaW1lbnNpb25zKCl7cmV0dXJuIHRoaXMuX2ZsZXhpYmxlRGltZW5zaW9uc31zZXQgZmxleGlibGVEaW1lbnNpb25zKHQpe3RoaXMuX2ZsZXhpYmxlRGltZW5zaW9ucz1ySSh0KX1nZXQgZ3Jvd0FmdGVyT3Blbigpe3JldHVybiB0aGlzLl9ncm93QWZ0ZXJPcGVufXNldCBncm93QWZ0ZXJPcGVuKHQpe3RoaXMuX2dyb3dBZnRlck9wZW49ckkodCl9Z2V0IHB1c2goKXtyZXR1cm4gdGhpcy5fcHVzaH1zZXQgcHVzaCh0KXt0aGlzLl9wdXNoPXJJKHQpfWdldCBvdmVybGF5UmVmKCl7cmV0dXJuIHRoaXMuX292ZXJsYXlSZWZ9Z2V0IGRpcigpe3JldHVybiB0aGlzLl9kaXI/dGhpcy5fZGlyLnZhbHVlOiJsdHIifW5nT25EZXN0cm95KCl7dGhpcy5fYXR0YWNoU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fZGV0YWNoU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fYmFja2Ryb3BTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9wb3NpdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX292ZXJsYXlSZWYmJnRoaXMuX292ZXJsYXlSZWYuZGlzcG9zZSgpfW5nT25DaGFuZ2VzKHQpe3RoaXMuX3Bvc2l0aW9uJiYodGhpcy5fdXBkYXRlUG9zaXRpb25TdHJhdGVneSh0aGlzLl9wb3NpdGlvbiksdGhpcy5fb3ZlcmxheVJlZi51cGRhdGVTaXplKHt3aWR0aDp0aGlzLndpZHRoLG1pbldpZHRoOnRoaXMubWluV2lkdGgsaGVpZ2h0OnRoaXMuaGVpZ2h0LG1pbkhlaWdodDp0aGlzLm1pbkhlaWdodH0pLHQub3JpZ2luJiZ0aGlzLm9wZW4mJnRoaXMuX3Bvc2l0aW9uLmFwcGx5KCkpLHQub3BlbiYmKHRoaXMub3Blbj90aGlzLl9hdHRhY2hPdmVybGF5KCk6dGhpcy5fZGV0YWNoT3ZlcmxheSgpKX1fY3JlYXRlT3ZlcmxheSgpe3RoaXMucG9zaXRpb25zJiZ0aGlzLnBvc2l0aW9ucy5sZW5ndGh8fCh0aGlzLnBvc2l0aW9ucz1RRik7Y29uc3QgdD10aGlzLl9vdmVybGF5UmVmPXRoaXMuX292ZXJsYXkuY3JlYXRlKHRoaXMuX2J1aWxkQ29uZmlnKCkpO3RoaXMuX2F0dGFjaFN1YnNjcmlwdGlvbj10LmF0dGFjaG1lbnRzKCkuc3Vic2NyaWJlKCgoKT0+dGhpcy5hdHRhY2guZW1pdCgpKSksdGhpcy5fZGV0YWNoU3Vic2NyaXB0aW9uPXQuZGV0YWNobWVudHMoKS5zdWJzY3JpYmUoKCgpPT50aGlzLmRldGFjaC5lbWl0KCkpKSx0LmtleWRvd25FdmVudHMoKS5zdWJzY3JpYmUoKHQ9Pnt0aGlzLm92ZXJsYXlLZXlkb3duLm5leHQodCksdC5rZXlDb2RlIT09ZUl8fHRoaXMuZGlzYWJsZUNsb3NlfHxhSSh0KXx8KHQucHJldmVudERlZmF1bHQoKSx0aGlzLl9kZXRhY2hPdmVybGF5KCkpfSkpLHRoaXMuX292ZXJsYXlSZWYub3V0c2lkZVBvaW50ZXJFdmVudHMoKS5zdWJzY3JpYmUoKHQ9Pnt0aGlzLm92ZXJsYXlPdXRzaWRlQ2xpY2submV4dCh0KX0pKX1fYnVpbGRDb25maWcoKXtjb25zdCB0PXRoaXMuX3Bvc2l0aW9uPXRoaXMucG9zaXRpb25TdHJhdGVneXx8dGhpcy5fY3JlYXRlUG9zaXRpb25TdHJhdGVneSgpLGU9bmV3IFNGKHtkaXJlY3Rpb246dGhpcy5fZGlyLHBvc2l0aW9uU3RyYXRlZ3k6dCxzY3JvbGxTdHJhdGVneTp0aGlzLnNjcm9sbFN0cmF0ZWd5LGhhc0JhY2tkcm9wOnRoaXMuaGFzQmFja2Ryb3B9KTtyZXR1cm4odGhpcy53aWR0aHx8MD09PXRoaXMud2lkdGgpJiYoZS53aWR0aD10aGlzLndpZHRoKSwodGhpcy5oZWlnaHR8fDA9PT10aGlzLmhlaWdodCkmJihlLmhlaWdodD10aGlzLmhlaWdodCksKHRoaXMubWluV2lkdGh8fDA9PT10aGlzLm1pbldpZHRoKSYmKGUubWluV2lkdGg9dGhpcy5taW5XaWR0aCksKHRoaXMubWluSGVpZ2h0fHwwPT09dGhpcy5taW5IZWlnaHQpJiYoZS5taW5IZWlnaHQ9dGhpcy5taW5IZWlnaHQpLHRoaXMuYmFja2Ryb3BDbGFzcyYmKGUuYmFja2Ryb3BDbGFzcz10aGlzLmJhY2tkcm9wQ2xhc3MpLHRoaXMucGFuZWxDbGFzcyYmKGUucGFuZWxDbGFzcz10aGlzLnBhbmVsQ2xhc3MpLGV9X3VwZGF0ZVBvc2l0aW9uU3RyYXRlZ3kodCl7Y29uc3QgZT10aGlzLnBvc2l0aW9ucy5tYXAoKHQ9Pih7b3JpZ2luWDp0Lm9yaWdpblgsb3JpZ2luWTp0Lm9yaWdpblksb3ZlcmxheVg6dC5vdmVybGF5WCxvdmVybGF5WTp0Lm92ZXJsYXlZLG9mZnNldFg6dC5vZmZzZXRYfHx0aGlzLm9mZnNldFgsb2Zmc2V0WTp0Lm9mZnNldFl8fHRoaXMub2Zmc2V0WSxwYW5lbENsYXNzOnQucGFuZWxDbGFzc3x8dm9pZCAwfSkpKTtyZXR1cm4gdC5zZXRPcmlnaW4odGhpcy5vcmlnaW4uZWxlbWVudFJlZikud2l0aFBvc2l0aW9ucyhlKS53aXRoRmxleGlibGVEaW1lbnNpb25zKHRoaXMuZmxleGlibGVEaW1lbnNpb25zKS53aXRoUHVzaCh0aGlzLnB1c2gpLndpdGhHcm93QWZ0ZXJPcGVuKHRoaXMuZ3Jvd0FmdGVyT3Blbikud2l0aFZpZXdwb3J0TWFyZ2luKHRoaXMudmlld3BvcnRNYXJnaW4pLndpdGhMb2NrZWRQb3NpdGlvbih0aGlzLmxvY2tQb3NpdGlvbikud2l0aFRyYW5zZm9ybU9yaWdpbk9uKHRoaXMudHJhbnNmb3JtT3JpZ2luU2VsZWN0b3IpfV9jcmVhdGVQb3NpdGlvblN0cmF0ZWd5KCl7Y29uc3QgdD10aGlzLl9vdmVybGF5LnBvc2l0aW9uKCkuZmxleGlibGVDb25uZWN0ZWRUbyh0aGlzLm9yaWdpbi5lbGVtZW50UmVmKTtyZXR1cm4gdGhpcy5fdXBkYXRlUG9zaXRpb25TdHJhdGVneSh0KSx0fV9hdHRhY2hPdmVybGF5KCl7dGhpcy5fb3ZlcmxheVJlZj90aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpLmhhc0JhY2tkcm9wPXRoaXMuaGFzQmFja2Ryb3A6dGhpcy5fY3JlYXRlT3ZlcmxheSgpLHRoaXMuX292ZXJsYXlSZWYuaGFzQXR0YWNoZWQoKXx8dGhpcy5fb3ZlcmxheVJlZi5hdHRhY2godGhpcy5fdGVtcGxhdGVQb3J0YWwpLHRoaXMuaGFzQmFja2Ryb3A/dGhpcy5fYmFja2Ryb3BTdWJzY3JpcHRpb249dGhpcy5fb3ZlcmxheVJlZi5iYWNrZHJvcENsaWNrKCkuc3Vic2NyaWJlKCh0PT57dGhpcy5iYWNrZHJvcENsaWNrLmVtaXQodCl9KSk6dGhpcy5fYmFja2Ryb3BTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9wb3NpdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMucG9zaXRpb25DaGFuZ2Uub2JzZXJ2ZXJzLmxlbmd0aD4wJiYodGhpcy5fcG9zaXRpb25TdWJzY3JpcHRpb249dGhpcy5fcG9zaXRpb24ucG9zaXRpb25DaGFuZ2VzLnBpcGUoaG4oKCgpPT50aGlzLnBvc2l0aW9uQ2hhbmdlLm9ic2VydmVycy5sZW5ndGg+MCkpKS5zdWJzY3JpYmUoKHQ9Pnt0aGlzLnBvc2l0aW9uQ2hhbmdlLmVtaXQodCksMD09PXRoaXMucG9zaXRpb25DaGFuZ2Uub2JzZXJ2ZXJzLmxlbmd0aCYmdGhpcy5fcG9zaXRpb25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX0pKSl9X2RldGFjaE92ZXJsYXkoKXt0aGlzLl9vdmVybGF5UmVmJiZ0aGlzLl9vdmVybGF5UmVmLmRldGFjaCgpLHRoaXMuX2JhY2tkcm9wU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fcG9zaXRpb25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX19ZUwuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGVMKShNdShKRiksTXUoVWgpLE11KFhoKSxNdSgkRiksTXUoTXosOCkpfSxlTC7JtWRpcj1Kbyh7dHlwZTplTCxzZWxlY3RvcnM6W1siIiwiY2RrLWNvbm5lY3RlZC1vdmVybGF5IiwiIl0sWyIiLCJjb25uZWN0ZWQtb3ZlcmxheSIsIiJdLFsiIiwiY2RrQ29ubmVjdGVkT3ZlcmxheSIsIiJdXSxpbnB1dHM6e3ZpZXdwb3J0TWFyZ2luOlsiY2RrQ29ubmVjdGVkT3ZlcmxheVZpZXdwb3J0TWFyZ2luIiwidmlld3BvcnRNYXJnaW4iXSxvcGVuOlsiY2RrQ29ubmVjdGVkT3ZlcmxheU9wZW4iLCJvcGVuIl0sZGlzYWJsZUNsb3NlOlsiY2RrQ29ubmVjdGVkT3ZlcmxheURpc2FibGVDbG9zZSIsImRpc2FibGVDbG9zZSJdLHNjcm9sbFN0cmF0ZWd5OlsiY2RrQ29ubmVjdGVkT3ZlcmxheVNjcm9sbFN0cmF0ZWd5Iiwic2Nyb2xsU3RyYXRlZ3kiXSxvZmZzZXRYOlsiY2RrQ29ubmVjdGVkT3ZlcmxheU9mZnNldFgiLCJvZmZzZXRYIl0sb2Zmc2V0WTpbImNka0Nvbm5lY3RlZE92ZXJsYXlPZmZzZXRZIiwib2Zmc2V0WSJdLGhhc0JhY2tkcm9wOlsiY2RrQ29ubmVjdGVkT3ZlcmxheUhhc0JhY2tkcm9wIiwiaGFzQmFja2Ryb3AiXSxsb2NrUG9zaXRpb246WyJjZGtDb25uZWN0ZWRPdmVybGF5TG9ja1Bvc2l0aW9uIiwibG9ja1Bvc2l0aW9uIl0sZmxleGlibGVEaW1lbnNpb25zOlsiY2RrQ29ubmVjdGVkT3ZlcmxheUZsZXhpYmxlRGltZW5zaW9ucyIsImZsZXhpYmxlRGltZW5zaW9ucyJdLGdyb3dBZnRlck9wZW46WyJjZGtDb25uZWN0ZWRPdmVybGF5R3Jvd0FmdGVyT3BlbiIsImdyb3dBZnRlck9wZW4iXSxwdXNoOlsiY2RrQ29ubmVjdGVkT3ZlcmxheVB1c2giLCJwdXNoIl0scG9zaXRpb25zOlsiY2RrQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9ucyIsInBvc2l0aW9ucyJdLG9yaWdpbjpbImNka0Nvbm5lY3RlZE92ZXJsYXlPcmlnaW4iLCJvcmlnaW4iXSxwb3NpdGlvblN0cmF0ZWd5OlsiY2RrQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9uU3RyYXRlZ3kiLCJwb3NpdGlvblN0cmF0ZWd5Il0sd2lkdGg6WyJjZGtDb25uZWN0ZWRPdmVybGF5V2lkdGgiLCJ3aWR0aCJdLGhlaWdodDpbImNka0Nvbm5lY3RlZE92ZXJsYXlIZWlnaHQiLCJoZWlnaHQiXSxtaW5XaWR0aDpbImNka0Nvbm5lY3RlZE92ZXJsYXlNaW5XaWR0aCIsIm1pbldpZHRoIl0sbWluSGVpZ2h0OlsiY2RrQ29ubmVjdGVkT3ZlcmxheU1pbkhlaWdodCIsIm1pbkhlaWdodCJdLGJhY2tkcm9wQ2xhc3M6WyJjZGtDb25uZWN0ZWRPdmVybGF5QmFja2Ryb3BDbGFzcyIsImJhY2tkcm9wQ2xhc3MiXSxwYW5lbENsYXNzOlsiY2RrQ29ubmVjdGVkT3ZlcmxheVBhbmVsQ2xhc3MiLCJwYW5lbENsYXNzIl0sdHJhbnNmb3JtT3JpZ2luU2VsZWN0b3I6WyJjZGtDb25uZWN0ZWRPdmVybGF5VHJhbnNmb3JtT3JpZ2luT24iLCJ0cmFuc2Zvcm1PcmlnaW5TZWxlY3RvciJdfSxvdXRwdXRzOntiYWNrZHJvcENsaWNrOiJiYWNrZHJvcENsaWNrIixwb3NpdGlvbkNoYW5nZToicG9zaXRpb25DaGFuZ2UiLGF0dGFjaDoiYXR0YWNoIixkZXRhY2g6ImRldGFjaCIsb3ZlcmxheUtleWRvd246Im92ZXJsYXlLZXlkb3duIixvdmVybGF5T3V0c2lkZUNsaWNrOiJvdmVybGF5T3V0c2lkZUNsaWNrIn0sZXhwb3J0QXM6WyJjZGtDb25uZWN0ZWRPdmVybGF5Il0sZmVhdHVyZXM6W1NpXX0pLGVMLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6SkZ9LHt0eXBlOlVofSx7dHlwZTpYaH0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6WyRGXX1dfSx7dHlwZTpNeixkZWNvcmF0b3JzOlt7dHlwZTpfc31dfV0sZUwucHJvcERlY29yYXRvcnM9e29yaWdpbjpbe3R5cGU6eV8sYXJnczpbImNka0Nvbm5lY3RlZE92ZXJsYXlPcmlnaW4iXX1dLHBvc2l0aW9uczpbe3R5cGU6eV8sYXJnczpbImNka0Nvbm5lY3RlZE92ZXJsYXlQb3NpdGlvbnMiXX1dLHBvc2l0aW9uU3RyYXRlZ3k6W3t0eXBlOnlfLGFyZ3M6WyJjZGtDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25TdHJhdGVneSJdfV0sb2Zmc2V0WDpbe3R5cGU6eV8sYXJnczpbImNka0Nvbm5lY3RlZE92ZXJsYXlPZmZzZXRYIl19XSxvZmZzZXRZOlt7dHlwZTp5XyxhcmdzOlsiY2RrQ29ubmVjdGVkT3ZlcmxheU9mZnNldFkiXX1dLHdpZHRoOlt7dHlwZTp5XyxhcmdzOlsiY2RrQ29ubmVjdGVkT3ZlcmxheVdpZHRoIl19XSxoZWlnaHQ6W3t0eXBlOnlfLGFyZ3M6WyJjZGtDb25uZWN0ZWRPdmVybGF5SGVpZ2h0Il19XSxtaW5XaWR0aDpbe3R5cGU6eV8sYXJnczpbImNka0Nvbm5lY3RlZE92ZXJsYXlNaW5XaWR0aCJdfV0sbWluSGVpZ2h0Olt7dHlwZTp5XyxhcmdzOlsiY2RrQ29ubmVjdGVkT3ZlcmxheU1pbkhlaWdodCJdfV0sYmFja2Ryb3BDbGFzczpbe3R5cGU6eV8sYXJnczpbImNka0Nvbm5lY3RlZE92ZXJsYXlCYWNrZHJvcENsYXNzIl19XSxwYW5lbENsYXNzOlt7dHlwZTp5XyxhcmdzOlsiY2RrQ29ubmVjdGVkT3ZlcmxheVBhbmVsQ2xhc3MiXX1dLHZpZXdwb3J0TWFyZ2luOlt7dHlwZTp5XyxhcmdzOlsiY2RrQ29ubmVjdGVkT3ZlcmxheVZpZXdwb3J0TWFyZ2luIl19XSxzY3JvbGxTdHJhdGVneTpbe3R5cGU6eV8sYXJnczpbImNka0Nvbm5lY3RlZE92ZXJsYXlTY3JvbGxTdHJhdGVneSJdfV0sb3Blbjpbe3R5cGU6eV8sYXJnczpbImNka0Nvbm5lY3RlZE92ZXJsYXlPcGVuIl19XSxkaXNhYmxlQ2xvc2U6W3t0eXBlOnlfLGFyZ3M6WyJjZGtDb25uZWN0ZWRPdmVybGF5RGlzYWJsZUNsb3NlIl19XSx0cmFuc2Zvcm1PcmlnaW5TZWxlY3Rvcjpbe3R5cGU6eV8sYXJnczpbImNka0Nvbm5lY3RlZE92ZXJsYXlUcmFuc2Zvcm1PcmlnaW5PbiJdfV0saGFzQmFja2Ryb3A6W3t0eXBlOnlfLGFyZ3M6WyJjZGtDb25uZWN0ZWRPdmVybGF5SGFzQmFja2Ryb3AiXX1dLGxvY2tQb3NpdGlvbjpbe3R5cGU6eV8sYXJnczpbImNka0Nvbm5lY3RlZE92ZXJsYXlMb2NrUG9zaXRpb24iXX1dLGZsZXhpYmxlRGltZW5zaW9uczpbe3R5cGU6eV8sYXJnczpbImNka0Nvbm5lY3RlZE92ZXJsYXlGbGV4aWJsZURpbWVuc2lvbnMiXX1dLGdyb3dBZnRlck9wZW46W3t0eXBlOnlfLGFyZ3M6WyJjZGtDb25uZWN0ZWRPdmVybGF5R3Jvd0FmdGVyT3BlbiJdfV0scHVzaDpbe3R5cGU6eV8sYXJnczpbImNka0Nvbm5lY3RlZE92ZXJsYXlQdXNoIl19XSxiYWNrZHJvcENsaWNrOlt7dHlwZTpfX31dLHBvc2l0aW9uQ2hhbmdlOlt7dHlwZTpfX31dLGF0dGFjaDpbe3R5cGU6X199XSxkZXRhY2g6W3t0eXBlOl9ffV0sb3ZlcmxheUtleWRvd246W3t0eXBlOl9ffV0sb3ZlcmxheU91dHNpZGVDbGljazpbe3R5cGU6X199XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihlTCxbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJbY2RrLWNvbm5lY3RlZC1vdmVybGF5XSwgW2Nvbm5lY3RlZC1vdmVybGF5XSwgW2Nka0Nvbm5lY3RlZE92ZXJsYXldIixleHBvcnRBczoiY2RrQ29ubmVjdGVkT3ZlcmxheSJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpKRn0se3R5cGU6VWh9LHt0eXBlOlhofSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbJEZdfV19LHt0eXBlOk16LGRlY29yYXRvcnM6W3t0eXBlOl9zfV19XX0pLHt2aWV3cG9ydE1hcmdpbjpbe3R5cGU6eV8sYXJnczpbImNka0Nvbm5lY3RlZE92ZXJsYXlWaWV3cG9ydE1hcmdpbiJdfV0sb3Blbjpbe3R5cGU6eV8sYXJnczpbImNka0Nvbm5lY3RlZE92ZXJsYXlPcGVuIl19XSxkaXNhYmxlQ2xvc2U6W3t0eXBlOnlfLGFyZ3M6WyJjZGtDb25uZWN0ZWRPdmVybGF5RGlzYWJsZUNsb3NlIl19XSxiYWNrZHJvcENsaWNrOlt7dHlwZTpfX31dLHBvc2l0aW9uQ2hhbmdlOlt7dHlwZTpfX31dLGF0dGFjaDpbe3R5cGU6X199XSxkZXRhY2g6W3t0eXBlOl9ffV0sb3ZlcmxheUtleWRvd246W3t0eXBlOl9ffV0sb3ZlcmxheU91dHNpZGVDbGljazpbe3R5cGU6X199XSxzY3JvbGxTdHJhdGVneTpbe3R5cGU6eV8sYXJnczpbImNka0Nvbm5lY3RlZE92ZXJsYXlTY3JvbGxTdHJhdGVneSJdfV0sb2Zmc2V0WDpbe3R5cGU6eV8sYXJnczpbImNka0Nvbm5lY3RlZE92ZXJsYXlPZmZzZXRYIl19XSxvZmZzZXRZOlt7dHlwZTp5XyxhcmdzOlsiY2RrQ29ubmVjdGVkT3ZlcmxheU9mZnNldFkiXX1dLGhhc0JhY2tkcm9wOlt7dHlwZTp5XyxhcmdzOlsiY2RrQ29ubmVjdGVkT3ZlcmxheUhhc0JhY2tkcm9wIl19XSxsb2NrUG9zaXRpb246W3t0eXBlOnlfLGFyZ3M6WyJjZGtDb25uZWN0ZWRPdmVybGF5TG9ja1Bvc2l0aW9uIl19XSxmbGV4aWJsZURpbWVuc2lvbnM6W3t0eXBlOnlfLGFyZ3M6WyJjZGtDb25uZWN0ZWRPdmVybGF5RmxleGlibGVEaW1lbnNpb25zIl19XSxncm93QWZ0ZXJPcGVuOlt7dHlwZTp5XyxhcmdzOlsiY2RrQ29ubmVjdGVkT3ZlcmxheUdyb3dBZnRlck9wZW4iXX1dLHB1c2g6W3t0eXBlOnlfLGFyZ3M6WyJjZGtDb25uZWN0ZWRPdmVybGF5UHVzaCJdfV0scG9zaXRpb25zOlt7dHlwZTp5XyxhcmdzOlsiY2RrQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9ucyJdfV0sb3JpZ2luOlt7dHlwZTp5XyxhcmdzOlsiY2RrQ29ubmVjdGVkT3ZlcmxheU9yaWdpbiJdfV0scG9zaXRpb25TdHJhdGVneTpbe3R5cGU6eV8sYXJnczpbImNka0Nvbm5lY3RlZE92ZXJsYXlQb3NpdGlvblN0cmF0ZWd5Il19XSx3aWR0aDpbe3R5cGU6eV8sYXJnczpbImNka0Nvbm5lY3RlZE92ZXJsYXlXaWR0aCJdfV0saGVpZ2h0Olt7dHlwZTp5XyxhcmdzOlsiY2RrQ29ubmVjdGVkT3ZlcmxheUhlaWdodCJdfV0sbWluV2lkdGg6W3t0eXBlOnlfLGFyZ3M6WyJjZGtDb25uZWN0ZWRPdmVybGF5TWluV2lkdGgiXX1dLG1pbkhlaWdodDpbe3R5cGU6eV8sYXJnczpbImNka0Nvbm5lY3RlZE92ZXJsYXlNaW5IZWlnaHQiXX1dLGJhY2tkcm9wQ2xhc3M6W3t0eXBlOnlfLGFyZ3M6WyJjZGtDb25uZWN0ZWRPdmVybGF5QmFja2Ryb3BDbGFzcyJdfV0scGFuZWxDbGFzczpbe3R5cGU6eV8sYXJnczpbImNka0Nvbm5lY3RlZE92ZXJsYXlQYW5lbENsYXNzIl19XSx0cmFuc2Zvcm1PcmlnaW5TZWxlY3Rvcjpbe3R5cGU6eV8sYXJnczpbImNka0Nvbm5lY3RlZE92ZXJsYXlUcmFuc2Zvcm1PcmlnaW5PbiJdfV19KTtjb25zdCBuTD17cHJvdmlkZTokRixkZXBzOltKRl0sdXNlRmFjdG9yeTpmdW5jdGlvbiBvTCh0KXtyZXR1cm4oKT0+dC5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oKX19OwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jbGFzcyBpTHt9aUwuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGlMKX0saUwuybVtb2Q9Wm8oe3R5cGU6aUx9KSxpTC7JtWluaj1jbyh7cHJvdmlkZXJzOltKRixuTF0saW1wb3J0czpbW3h6LHlGLGlGXSxpRl19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKGlMLHtkZWNsYXJhdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm5bZUwsdExdfSxpbXBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW3h6LHlGLGlGXX0sZXhwb3J0czpmdW5jdGlvbigpe3JldHVybltlTCx0TCxpRl19fSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihpTCxbe3R5cGU6a18sYXJnczpbe2ltcG9ydHM6W3h6LHlGLGlGXSxleHBvcnRzOltlTCx0TCxpRl0sZGVjbGFyYXRpb25zOltlTCx0TF0scHJvdmlkZXJzOltKRixuTF19XX1dLG51bGwsbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3MgYUwgZXh0ZW5kcyBGRntjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQsZSl9bmdPbkRlc3Ryb3koKXtzdXBlci5uZ09uRGVzdHJveSgpLHRoaXMuX2Z1bGxTY3JlZW5FdmVudE5hbWUmJnRoaXMuX2Z1bGxTY3JlZW5MaXN0ZW5lciYmdGhpcy5fZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLl9mdWxsU2NyZWVuRXZlbnROYW1lLHRoaXMuX2Z1bGxTY3JlZW5MaXN0ZW5lcil9X2NyZWF0ZUNvbnRhaW5lcigpe3N1cGVyLl9jcmVhdGVDb250YWluZXIoKSx0aGlzLl9hZGp1c3RQYXJlbnRGb3JGdWxsc2NyZWVuQ2hhbmdlKCksdGhpcy5fYWRkRnVsbHNjcmVlbkNoYW5nZUxpc3RlbmVyKCgoKT0+dGhpcy5fYWRqdXN0UGFyZW50Rm9yRnVsbHNjcmVlbkNoYW5nZSgpKSl9X2FkanVzdFBhcmVudEZvckZ1bGxzY3JlZW5DaGFuZ2UoKXt0aGlzLl9jb250YWluZXJFbGVtZW50JiYodGhpcy5nZXRGdWxsc2NyZWVuRWxlbWVudCgpfHx0aGlzLl9kb2N1bWVudC5ib2R5KS5hcHBlbmRDaGlsZCh0aGlzLl9jb250YWluZXJFbGVtZW50KX1fYWRkRnVsbHNjcmVlbkNoYW5nZUxpc3RlbmVyKHQpe2NvbnN0IGU9dGhpcy5fZ2V0RXZlbnROYW1lKCk7ZSYmKHRoaXMuX2Z1bGxTY3JlZW5MaXN0ZW5lciYmdGhpcy5fZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLHRoaXMuX2Z1bGxTY3JlZW5MaXN0ZW5lciksdGhpcy5fZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihlLHQpLHRoaXMuX2Z1bGxTY3JlZW5MaXN0ZW5lcj10KX1fZ2V0RXZlbnROYW1lKCl7aWYoIXRoaXMuX2Z1bGxTY3JlZW5FdmVudE5hbWUpe2NvbnN0IHQ9dGhpcy5fZG9jdW1lbnQ7dC5mdWxsc2NyZWVuRW5hYmxlZD90aGlzLl9mdWxsU2NyZWVuRXZlbnROYW1lPSJmdWxsc2NyZWVuY2hhbmdlIjp0LndlYmtpdEZ1bGxzY3JlZW5FbmFibGVkP3RoaXMuX2Z1bGxTY3JlZW5FdmVudE5hbWU9IndlYmtpdGZ1bGxzY3JlZW5jaGFuZ2UiOnQubW96RnVsbFNjcmVlbkVuYWJsZWQ/dGhpcy5fZnVsbFNjcmVlbkV2ZW50TmFtZT0ibW96ZnVsbHNjcmVlbmNoYW5nZSI6dC5tc0Z1bGxzY3JlZW5FbmFibGVkJiYodGhpcy5fZnVsbFNjcmVlbkV2ZW50TmFtZT0iTVNGdWxsc2NyZWVuQ2hhbmdlIil9cmV0dXJuIHRoaXMuX2Z1bGxTY3JlZW5FdmVudE5hbWV9Z2V0RnVsbHNjcmVlbkVsZW1lbnQoKXtjb25zdCB0PXRoaXMuX2RvY3VtZW50O3JldHVybiB0LmZ1bGxzY3JlZW5FbGVtZW50fHx0LndlYmtpdEZ1bGxzY3JlZW5FbGVtZW50fHx0Lm1vekZ1bGxTY3JlZW5FbGVtZW50fHx0Lm1zRnVsbHNjcmVlbkVsZW1lbnR8fG51bGx9fWFMLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxhTCkodXMoVUMpLHVzKGZJKSl9LGFMLsm1cHJvdj1sbyh7ZmFjdG9yeTpmdW5jdGlvbiB0KCl7cmV0dXJuIG5ldyBhTCh1cyhVQyksdXMoZkkpKX0sdG9rZW46YUwscHJvdmlkZWRJbjoicm9vdCJ9KSxhTC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltVQ119XX0se3R5cGU6Zkl9XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGFMLFt7dHlwZTpKbSxhcmdzOlt7cHJvdmlkZWRJbjoicm9vdCJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbVUNdfV19LHt0eXBlOmZJfV19KSxudWxsKTtjbGFzcyByTHt9ckwuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHJMKX0sckwuybVtb2Q9Wm8oe3R5cGU6ckx9KSxyTC7JtWluaj1jbyh7fSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihyTCxbe3R5cGU6a18sYXJnczpbe31dfV0sbnVsbCxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IHNMPW5ldyBTZXQ7bGV0IGxMO2NsYXNzIGNMe2NvbnN0cnVjdG9yKHQpe3RoaXMuX3BsYXRmb3JtPXQsdGhpcy5fbWF0Y2hNZWRpYT10aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXImJndpbmRvdy5tYXRjaE1lZGlhP3dpbmRvdy5tYXRjaE1lZGlhLmJpbmQod2luZG93KTpkTH1tYXRjaE1lZGlhKHQpe3JldHVybiB0aGlzLl9wbGF0Zm9ybS5XRUJLSVQmJihmdW5jdGlvbiBlKHQpe2lmKCFzTC5oYXModCkpdHJ5e2xMfHwobEw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKSxsTC5zZXRBdHRyaWJ1dGUoInR5cGUiLCJ0ZXh0L2NzcyIpLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobEwpKSxsTC5zaGVldCYmKGxMLnNoZWV0Lmluc2VydFJ1bGUoYEBtZWRpYSAke3R9IHsuZngtcXVlcnktdGVzdHsgfX1gLDApLHNMLmFkZCh0KSl9Y2F0Y2godCl7Y29uc29sZS5lcnJvcih0KX19KSh0KSx0aGlzLl9tYXRjaE1lZGlhKHQpfX1mdW5jdGlvbiBkTCh0KXtyZXR1cm57bWF0Y2hlczoiYWxsIj09PXR8fCIiPT09dCxtZWRpYTp0LGFkZExpc3RlbmVyOigpPT57fSxyZW1vdmVMaXN0ZW5lcjooKT0+e319fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jTC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8Y0wpKHVzKGZJKSl9LGNMLsm1cHJvdj1sbyh7ZmFjdG9yeTpmdW5jdGlvbiB0KCl7cmV0dXJuIG5ldyBjTCh1cyhmSSkpfSx0b2tlbjpjTCxwcm92aWRlZEluOiJyb290In0pLGNMLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6Zkl9XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGNMLFt7dHlwZTpKbSxhcmdzOlt7cHJvdmlkZWRJbjoicm9vdCJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpmSX1dfSksbnVsbCk7Y2xhc3MgcEx7Y29uc3RydWN0b3IodCxlKXt0aGlzLl9tZWRpYU1hdGNoZXI9dCx0aGlzLl96b25lPWUsdGhpcy5fcXVlcmllcz1uZXcgTWFwLHRoaXMuX2Rlc3Ryb3lTdWJqZWN0PW5ldyB4fW5nT25EZXN0cm95KCl7dGhpcy5fZGVzdHJveVN1YmplY3QubmV4dCgpLHRoaXMuX2Rlc3Ryb3lTdWJqZWN0LmNvbXBsZXRlKCl9aXNNYXRjaGVkKHQpe3JldHVybiBtTChjSSh0KSkuc29tZSgodD0+dGhpcy5fcmVnaXN0ZXJRdWVyeSh0KS5tcWwubWF0Y2hlcykpfW9ic2VydmUodCl7bGV0IGU9RHQobUwoY0kodCkpLm1hcCgodD0+dGhpcy5fcmVnaXN0ZXJRdWVyeSh0KS5vYnNlcnZhYmxlKSkpO3JldHVybiBlPUh0KGUucGlwZShOZSgxKSksZS5waXBlKHJuKDEpLGRlKDApKSksZS5waXBlKGh0KCh0PT57Y29uc3QgZT17bWF0Y2hlczohMSxicmVha3BvaW50czp7fX07cmV0dXJuIHQuZm9yRWFjaCgoKHttYXRjaGVzOnQscXVlcnk6bn0pPT57ZS5tYXRjaGVzPWUubWF0Y2hlc3x8dCxlLmJyZWFrcG9pbnRzW25dPXR9KSksZX0pKSl9X3JlZ2lzdGVyUXVlcnkodCl7aWYodGhpcy5fcXVlcmllcy5oYXModCkpcmV0dXJuIHRoaXMuX3F1ZXJpZXMuZ2V0KHQpO2NvbnN0IGU9dGhpcy5fbWVkaWFNYXRjaGVyLm1hdGNoTWVkaWEodCksbj17b2JzZXJ2YWJsZTpuZXcgeSgodD0+e2NvbnN0IG49ZT0+dGhpcy5fem9uZS5ydW4oKCgpPT50Lm5leHQoZSkpKTtyZXR1cm4gZS5hZGRMaXN0ZW5lcihuKSwoKT0+e2UucmVtb3ZlTGlzdGVuZXIobil9fSkpLnBpcGUoY24oZSksaHQoKCh7bWF0Y2hlczplfSk9Pih7cXVlcnk6dCxtYXRjaGVzOmV9KSkpLHVuKHRoaXMuX2Rlc3Ryb3lTdWJqZWN0KSksbXFsOmV9O3JldHVybiB0aGlzLl9xdWVyaWVzLnNldCh0LG4pLG59fWZ1bmN0aW9uIG1MKHQpe3JldHVybiB0Lm1hcCgodD0+dC5zcGxpdCgiLCIpKSkucmVkdWNlKCgodCxlKT0+dC5jb25jYXQoZSkpKS5tYXAoKHQ9PnQudHJpbSgpKSl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIHVMKHQsZSl7aWYoMSZ0KXtjb25zdCB0PUV1KCk7T3UoMCwiZGl2IiwxKSxPdSgxLCJidXR0b24iLDIpLE51KCJjbGljayIsKGZ1bmN0aW9uIGUoKXtyZXR1cm4gcmEodCksTHUoKS5hY3Rpb24oKX0pKSxNZigyKSxQdSgpLFB1KCl9aWYoMiZ0KXtjb25zdCB0PUx1KCk7SmMoMiksdmYodC5kYXRhLmFjdGlvbil9fWZ1bmN0aW9uIGZMKHQsZSl7fXBMLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxwTCkodXMoY0wpLHVzKHRDKSl9LHBMLsm1cHJvdj1sbyh7ZmFjdG9yeTpmdW5jdGlvbiB0KCl7cmV0dXJuIG5ldyBwTCh1cyhjTCksdXModEMpKX0sdG9rZW46cEwscHJvdmlkZWRJbjoicm9vdCJ9KSxwTC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmNMfSx7dHlwZTp0Q31dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIocEwsW3t0eXBlOkptLGFyZ3M6W3twcm92aWRlZEluOiJyb290In1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmNMfSx7dHlwZTp0Q31dfSksbnVsbCk7Y29uc3QgZ0w9bmV3IE5yKCJNYXRTbmFja0JhckRhdGEiKTtjbGFzcyBoTHtjb25zdHJ1Y3Rvcigpe3RoaXMucG9saXRlbmVzcz0iYXNzZXJ0aXZlIix0aGlzLmFubm91bmNlbWVudE1lc3NhZ2U9IiIsdGhpcy5kdXJhdGlvbj0wLHRoaXMuZGF0YT1udWxsLHRoaXMuaG9yaXpvbnRhbFBvc2l0aW9uPSJjZW50ZXIiLHRoaXMudmVydGljYWxQb3NpdGlvbj0iYm90dG9tIn19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NvbnN0IGJMPU1hdGgucG93KDIsMzEpLTE7Y2xhc3MgeUx7Y29uc3RydWN0b3IodCxlKXt0aGlzLl9vdmVybGF5UmVmPWUsdGhpcy5fYWZ0ZXJEaXNtaXNzZWQ9bmV3IHgsdGhpcy5fYWZ0ZXJPcGVuZWQ9bmV3IHgsdGhpcy5fb25BY3Rpb249bmV3IHgsdGhpcy5fZGlzbWlzc2VkQnlBY3Rpb249ITEsdGhpcy5jb250YWluZXJJbnN0YW5jZT10LHRoaXMub25BY3Rpb24oKS5zdWJzY3JpYmUoKCgpPT50aGlzLmRpc21pc3MoKSkpLHQuX29uRXhpdC5zdWJzY3JpYmUoKCgpPT50aGlzLl9maW5pc2hEaXNtaXNzKCkpKX1kaXNtaXNzKCl7dGhpcy5fYWZ0ZXJEaXNtaXNzZWQuY2xvc2VkfHx0aGlzLmNvbnRhaW5lckluc3RhbmNlLmV4aXQoKSxjbGVhclRpbWVvdXQodGhpcy5fZHVyYXRpb25UaW1lb3V0SWQpfWRpc21pc3NXaXRoQWN0aW9uKCl7dGhpcy5fb25BY3Rpb24uY2xvc2VkfHwodGhpcy5fZGlzbWlzc2VkQnlBY3Rpb249ITAsdGhpcy5fb25BY3Rpb24ubmV4dCgpLHRoaXMuX29uQWN0aW9uLmNvbXBsZXRlKCkpLGNsZWFyVGltZW91dCh0aGlzLl9kdXJhdGlvblRpbWVvdXRJZCl9Y2xvc2VXaXRoQWN0aW9uKCl7dGhpcy5kaXNtaXNzV2l0aEFjdGlvbigpfV9kaXNtaXNzQWZ0ZXIodCl7dGhpcy5fZHVyYXRpb25UaW1lb3V0SWQ9c2V0VGltZW91dCgoKCk9PnRoaXMuZGlzbWlzcygpKSxNYXRoLm1pbih0LGJMKSl9X29wZW4oKXt0aGlzLl9hZnRlck9wZW5lZC5jbG9zZWR8fCh0aGlzLl9hZnRlck9wZW5lZC5uZXh0KCksdGhpcy5fYWZ0ZXJPcGVuZWQuY29tcGxldGUoKSl9X2ZpbmlzaERpc21pc3MoKXt0aGlzLl9vdmVybGF5UmVmLmRpc3Bvc2UoKSx0aGlzLl9vbkFjdGlvbi5jbG9zZWR8fHRoaXMuX29uQWN0aW9uLmNvbXBsZXRlKCksdGhpcy5fYWZ0ZXJEaXNtaXNzZWQubmV4dCh7ZGlzbWlzc2VkQnlBY3Rpb246dGhpcy5fZGlzbWlzc2VkQnlBY3Rpb259KSx0aGlzLl9hZnRlckRpc21pc3NlZC5jb21wbGV0ZSgpLHRoaXMuX2Rpc21pc3NlZEJ5QWN0aW9uPSExfWFmdGVyRGlzbWlzc2VkKCl7cmV0dXJuIHRoaXMuX2FmdGVyRGlzbWlzc2VkfWFmdGVyT3BlbmVkKCl7cmV0dXJuIHRoaXMuY29udGFpbmVySW5zdGFuY2UuX29uRW50ZXJ9b25BY3Rpb24oKXtyZXR1cm4gdGhpcy5fb25BY3Rpb259fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jbGFzcyBfTHtjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuc25hY2tCYXJSZWY9dCx0aGlzLmRhdGE9ZX1hY3Rpb24oKXt0aGlzLnNuYWNrQmFyUmVmLmRpc21pc3NXaXRoQWN0aW9uKCl9Z2V0IGhhc0FjdGlvbigpe3JldHVybiEhdGhpcy5kYXRhLmFjdGlvbn19X0wuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fF9MKShNdSh5TCksTXUoZ0wpKX0sX0wuybVjbXA9VW8oe3R5cGU6X0wsc2VsZWN0b3JzOltbInNpbXBsZS1zbmFjay1iYXIiXV0saG9zdEF0dHJzOlsxLCJtYXQtc2ltcGxlLXNuYWNrYmFyIl0sZGVjbHM6Myx2YXJzOjIsY29uc3RzOltbImNsYXNzIiwibWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb24iLDQsIm5nSWYiXSxbMSwibWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb24iXSxbIm1hdC1idXR0b24iLCIiLDMsImNsaWNrIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihPdSgwLCJzcGFuIiksTWYoMSksUHUoKSxXbSgyLHVMLDMsMSwiZGl2IiwwKSksMiZlJiYoSmMoMSksdmYobi5kYXRhLm1lc3NhZ2UpLEpjKDEpLHZ1KCJuZ0lmIixuLmhhc0FjdGlvbikpfSxkaXJlY3RpdmVzOlthdixOSF0sc3R5bGVzOlsiLm1hdC1zaW1wbGUtc25hY2tiYXJ7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOmNlbnRlcjtsaW5lLWhlaWdodDoyMHB4O29wYWNpdHk6MX0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb257ZmxleC1zaHJpbms6MDttYXJnaW46LThweCAtOHB4IC04cHggOHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbiBidXR0b257bWF4LWhlaWdodDozNnB4O21pbi13aWR0aDowfVtkaXI9cnRsXSAubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb257bWFyZ2luLWxlZnQ6LThweDttYXJnaW4tcmlnaHQ6OHB4fVxuIl0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksX0wuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTp5TH0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W2dMXX1dfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihfTCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJzaW1wbGUtc25hY2stYmFyIix0ZW1wbGF0ZTonPHNwYW4+e3tkYXRhLm1lc3NhZ2V9fTwvc3Bhbj5cbjxkaXYgY2xhc3M9Im1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uIiAgKm5nSWY9Imhhc0FjdGlvbiI+XG4gIDxidXR0b24gbWF0LWJ1dHRvbiAoY2xpY2spPSJhY3Rpb24oKSI+e3tkYXRhLmFjdGlvbn19PC9idXR0b24+XG48L2Rpdj5cbicsZW5jYXBzdWxhdGlvbjpQby5Ob25lLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2gsaG9zdDp7Y2xhc3M6Im1hdC1zaW1wbGUtc25hY2tiYXIifSxzdHlsZXM6WyIubWF0LXNpbXBsZS1zbmFja2JhcntkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6Y2VudGVyO2xpbmUtaGVpZ2h0OjIwcHg7b3BhY2l0eToxfS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbntmbGV4LXNocmluazowO21hcmdpbjotOHB4IC04cHggLThweCA4cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uIGJ1dHRvbnttYXgtaGVpZ2h0OjM2cHg7bWluLXdpZHRoOjB9W2Rpcj1ydGxdIC5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbnttYXJnaW4tbGVmdDotOHB4O21hcmdpbi1yaWdodDo4cHh9XG4iXX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOnlMfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbZ0xdfV19XX0pLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3QgQ0w9e3NuYWNrQmFyU3RhdGU6S3goInN0YXRlIixbdE8oInZvaWQsIGhpZGRlbiIsJHgoe3RyYW5zZm9ybToic2NhbGUoMC44KSIsb3BhY2l0eTowfSkpLHRPKCJ2aXNpYmxlIiwkeCh7dHJhbnNmb3JtOiJzY2FsZSgxKSIsb3BhY2l0eToxfSkpLG5PKCIqID0+IHZpc2libGUiLEp4KCIxNTBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKSIpKSxuTygiKiA9PiB2b2lkLCAqID0+IGhpZGRlbiIsSngoIjc1bXMgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAxLCAxKSIsJHgoe29wYWNpdHk6MH0pKSldKX07Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NsYXNzIE1MIGV4dGVuZHMgZEZ7Y29uc3RydWN0b3IodCxlLG4sbyxpKXtzdXBlcigpLHRoaXMuX25nWm9uZT10LHRoaXMuX2VsZW1lbnRSZWY9ZSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1uLHRoaXMuX3BsYXRmb3JtPW8sdGhpcy5zbmFja0JhckNvbmZpZz1pLHRoaXMuX2Fubm91bmNlRGVsYXk9MTUwLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9vbkFubm91bmNlPW5ldyB4LHRoaXMuX29uRXhpdD1uZXcgeCx0aGlzLl9vbkVudGVyPW5ldyB4LHRoaXMuX2FuaW1hdGlvblN0YXRlPSJ2b2lkIix0aGlzLmF0dGFjaERvbVBvcnRhbD10PT4odGhpcy5fYXNzZXJ0Tm90QXR0YWNoZWQoKSx0aGlzLl9hcHBseVNuYWNrQmFyQ2xhc3NlcygpLHRoaXMuX3BvcnRhbE91dGxldC5hdHRhY2hEb21Qb3J0YWwodCkpLHRoaXMuX2xpdmU9ImFzc2VydGl2ZSIhPT1pLnBvbGl0ZW5lc3N8fGkuYW5ub3VuY2VtZW50TWVzc2FnZT8ib2ZmIj09PWkucG9saXRlbmVzcz8ib2ZmIjoicG9saXRlIjoiYXNzZXJ0aXZlIix0aGlzLl9wbGF0Zm9ybS5GSVJFRk9YJiYoInBvbGl0ZSI9PT10aGlzLl9saXZlJiYodGhpcy5fcm9sZT0ic3RhdHVzIiksImFzc2VydGl2ZSI9PT10aGlzLl9saXZlJiYodGhpcy5fcm9sZT0iYWxlcnQiKSl9YXR0YWNoQ29tcG9uZW50UG9ydGFsKHQpe3JldHVybiB0aGlzLl9hc3NlcnROb3RBdHRhY2hlZCgpLHRoaXMuX2FwcGx5U25hY2tCYXJDbGFzc2VzKCksdGhpcy5fcG9ydGFsT3V0bGV0LmF0dGFjaENvbXBvbmVudFBvcnRhbCh0KX1hdHRhY2hUZW1wbGF0ZVBvcnRhbCh0KXtyZXR1cm4gdGhpcy5fYXNzZXJ0Tm90QXR0YWNoZWQoKSx0aGlzLl9hcHBseVNuYWNrQmFyQ2xhc3NlcygpLHRoaXMuX3BvcnRhbE91dGxldC5hdHRhY2hUZW1wbGF0ZVBvcnRhbCh0KX1vbkFuaW1hdGlvbkVuZCh0KXtjb25zdHtmcm9tU3RhdGU6ZSx0b1N0YXRlOm59PXQ7aWYoKCJ2b2lkIj09PW4mJiJ2b2lkIiE9PWV8fCJoaWRkZW4iPT09bikmJnRoaXMuX2NvbXBsZXRlRXhpdCgpLCJ2aXNpYmxlIj09PW4pe2NvbnN0IHQ9dGhpcy5fb25FbnRlcjt0aGlzLl9uZ1pvbmUucnVuKCgoKT0+e3QubmV4dCgpLHQuY29tcGxldGUoKX0pKX19ZW50ZXIoKXt0aGlzLl9kZXN0cm95ZWR8fCh0aGlzLl9hbmltYXRpb25TdGF0ZT0idmlzaWJsZSIsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpLHRoaXMuX3NjcmVlblJlYWRlckFubm91bmNlKCkpfWV4aXQoKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9uU3RhdGU9ImhpZGRlbiIsdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgibWF0LWV4aXQiLCIiKSxjbGVhclRpbWVvdXQodGhpcy5fYW5ub3VuY2VUaW1lb3V0SWQpLHRoaXMuX29uRXhpdH1uZ09uRGVzdHJveSgpe3RoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLl9jb21wbGV0ZUV4aXQoKX1fY29tcGxldGVFeGl0KCl7dGhpcy5fbmdab25lLm9uTWljcm90YXNrRW1wdHkucGlwZShOZSgxKSkuc3Vic2NyaWJlKCgoKT0+e3RoaXMuX29uRXhpdC5uZXh0KCksdGhpcy5fb25FeGl0LmNvbXBsZXRlKCl9KSl9X2FwcGx5U25hY2tCYXJDbGFzc2VzKCl7Y29uc3QgdD10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsZT10aGlzLnNuYWNrQmFyQ29uZmlnLnBhbmVsQ2xhc3M7ZSYmKEFycmF5LmlzQXJyYXkoZSk/ZS5mb3JFYWNoKChlPT50LmNsYXNzTGlzdC5hZGQoZSkpKTp0LmNsYXNzTGlzdC5hZGQoZSkpLCJjZW50ZXIiPT09dGhpcy5zbmFja0JhckNvbmZpZy5ob3Jpem9udGFsUG9zaXRpb24mJnQuY2xhc3NMaXN0LmFkZCgibWF0LXNuYWNrLWJhci1jZW50ZXIiKSwidG9wIj09PXRoaXMuc25hY2tCYXJDb25maWcudmVydGljYWxQb3NpdGlvbiYmdC5jbGFzc0xpc3QuYWRkKCJtYXQtc25hY2stYmFyLXRvcCIpfV9hc3NlcnROb3RBdHRhY2hlZCgpe2lmKHRoaXMuX3BvcnRhbE91dGxldC5oYXNBdHRhY2hlZCgpJiYoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkpdGhyb3cgRXJyb3IoIkF0dGVtcHRpbmcgdG8gYXR0YWNoIHNuYWNrIGJhciBjb250ZW50IGFmdGVyIGNvbnRlbnQgaXMgYWxyZWFkeSBhdHRhY2hlZCIpfV9zY3JlZW5SZWFkZXJBbm5vdW5jZSgpe3RoaXMuX2Fubm91bmNlVGltZW91dElkfHx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCgpPT57dGhpcy5fYW5ub3VuY2VUaW1lb3V0SWQ9c2V0VGltZW91dCgoKCk9Pntjb25zdCB0PXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCJbYXJpYS1oaWRkZW5dIiksZT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcigiW2FyaWEtbGl2ZV0iKTtpZih0JiZlKXtsZXQgbj1udWxsO3RoaXMuX3BsYXRmb3JtLmlzQnJvd3NlciYmZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50JiZ0LmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpJiYobj1kb2N1bWVudC5hY3RpdmVFbGVtZW50KSx0LnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iKSxlLmFwcGVuZENoaWxkKHQpLG51bGw9PW58fG4uZm9jdXMoKSx0aGlzLl9vbkFubm91bmNlLm5leHQoKSx0aGlzLl9vbkFubm91bmNlLmNvbXBsZXRlKCl9fSksdGhpcy5fYW5ub3VuY2VEZWxheSl9KSl9fU1MLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxNTCkoTXUodEMpLE11KGNoKSxNdShIaCksTXUoZkkpLE11KGhMKSl9LE1MLsm1Y21wPVVvKHt0eXBlOk1MLHNlbGVjdG9yczpbWyJzbmFjay1iYXItY29udGFpbmVyIl1dLHZpZXdRdWVyeTpmdW5jdGlvbiB0KGUsbil7aWYoMSZlJiZXYihnRiwzKSwyJmUpe2xldCB0O1ViKHQ9WWIoKSkmJihuLl9wb3J0YWxPdXRsZXQ9dC5maXJzdCl9fSxob3N0QXR0cnM6WzEsIm1hdC1zbmFjay1iYXItY29udGFpbmVyIl0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezEmZSYmSXUoIkBzdGF0ZS5kb25lIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vbkFuaW1hdGlvbkVuZChlKX0pKSwyJmUmJlNmKCJAc3RhdGUiLG4uX2FuaW1hdGlvblN0YXRlKX0sZmVhdHVyZXM6W2dtXSxkZWNsczozLHZhcnM6Mixjb25zdHM6W1siYXJpYS1oaWRkZW4iLCJ0cnVlIl0sWyJjZGtQb3J0YWxPdXRsZXQiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKE91KDAsImRpdiIsMCksV20oMSxmTCwwLDAsIm5nLXRlbXBsYXRlIiwxKSxQdSgpLHd1KDIsImRpdiIpKSwyJmUmJihKYygyKSxObSgiYXJpYS1saXZlIixuLl9saXZlKSgicm9sZSIsbi5fcm9sZSkpfSxkaXJlY3RpdmVzOltnRl0sc3R5bGVzOlsiLm1hdC1zbmFjay1iYXItY29udGFpbmVye2JvcmRlci1yYWRpdXM6NHB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmJsb2NrO21hcmdpbjoyNHB4O21heC13aWR0aDozM3Z3O21pbi13aWR0aDozNDRweDtwYWRkaW5nOjE0cHggMTZweDttaW4taGVpZ2h0OjQ4cHg7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXJ9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXNuYWNrLWJhci1jb250YWluZXJ7Ym9yZGVyOnNvbGlkIDFweH0ubWF0LXNuYWNrLWJhci1oYW5kc2V0e3dpZHRoOjEwMCV9Lm1hdC1zbmFjay1iYXItaGFuZHNldCAubWF0LXNuYWNrLWJhci1jb250YWluZXJ7bWFyZ2luOjhweDttYXgtd2lkdGg6MTAwJTttaW4td2lkdGg6MDt3aWR0aDoxMDAlfVxuIl0sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbQ0wuc25hY2tCYXJTdGF0ZV19fSksTUwuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTp0Q30se3R5cGU6Y2h9LHt0eXBlOkhofSx7dHlwZTpmSX0se3R5cGU6aEx9XSxNTC5wcm9wRGVjb3JhdG9ycz17X3BvcnRhbE91dGxldDpbe3R5cGU6RnIsYXJnczpbZ0Yse3N0YXRpYzohMH1dfV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoTUwsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3Rvcjoic25hY2stYmFyLWNvbnRhaW5lciIsdGVtcGxhdGU6J1x4M2MhLS0gSW5pdGlhbGx5IGhvbGRzIHRoZSBzbmFjayBiYXIgY29udGVudCwgd2lsbCBiZSBlbXB0eSBhZnRlciBhbm5vdW5jaW5nIHRvIHNjcmVlbiByZWFkZXJzLiAtLVx4M2VcbjxkaXYgYXJpYS1oaWRkZW49InRydWUiPlxuICA8bmctdGVtcGxhdGUgY2RrUG9ydGFsT3V0bGV0PjwvbmctdGVtcGxhdGU+XG48L2Rpdj5cblxuXHgzYyEtLSBXaWxsIHJlY2VpdmUgdGhlIHNuYWNrIGJhciBjb250ZW50IGZyb20gdGhlIG5vbi1saXZlIGRpdiwgbW92ZSB3aWxsIGhhcHBlbiBhIHNob3J0IGRlbGF5IGFmdGVyIG9wZW5pbmcgLS1ceDNlXG48ZGl2IFthdHRyLmFyaWEtbGl2ZV09Il9saXZlIiBbYXR0ci5yb2xlXT0iX3JvbGUiPjwvZGl2PlxuJyxjaGFuZ2VEZXRlY3Rpb246eG8uRGVmYXVsdCxlbmNhcHN1bGF0aW9uOlBvLk5vbmUsYW5pbWF0aW9uczpbQ0wuc25hY2tCYXJTdGF0ZV0saG9zdDp7Y2xhc3M6Im1hdC1zbmFjay1iYXItY29udGFpbmVyIiwiW0BzdGF0ZV0iOiJfYW5pbWF0aW9uU3RhdGUiLCIoQHN0YXRlLmRvbmUpIjoib25BbmltYXRpb25FbmQoJGV2ZW50KSJ9LHN0eWxlczpbIi5tYXQtc25hY2stYmFyLWNvbnRhaW5lcntib3JkZXItcmFkaXVzOjRweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpibG9jazttYXJnaW46MjRweDttYXgtd2lkdGg6MzN2dzttaW4td2lkdGg6MzQ0cHg7cGFkZGluZzoxNHB4IDE2cHg7bWluLWhlaWdodDo0OHB4O3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zbmFjay1iYXItY29udGFpbmVye2JvcmRlcjpzb2xpZCAxcHh9Lm1hdC1zbmFjay1iYXItaGFuZHNldHt3aWR0aDoxMDAlfS5tYXQtc25hY2stYmFyLWhhbmRzZXQgLm1hdC1zbmFjay1iYXItY29udGFpbmVye21hcmdpbjo4cHg7bWF4LXdpZHRoOjEwMCU7bWluLXdpZHRoOjA7d2lkdGg6MTAwJX1cbiJdfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6dEN9LHt0eXBlOmNofSx7dHlwZTpIaH0se3R5cGU6Zkl9LHt0eXBlOmhMfV19KSx7X3BvcnRhbE91dGxldDpbe3R5cGU6RnIsYXJnczpbZ0Yse3N0YXRpYzohMH1dfV19KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIHZMe312TC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8dkwpfSx2TC7JtW1vZD1abyh7dHlwZTp2TH0pLHZMLsm1aW5qPWNvKHtpbXBvcnRzOltbaUwseUYsQnYsekgsVHpdLFR6XX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8odkwse2RlY2xhcmF0aW9uczpmdW5jdGlvbigpe3JldHVybltNTCxfTF19LGltcG9ydHM6ZnVuY3Rpb24oKXtyZXR1cm5baUwseUYsQnYsekgsVHpdfSxleHBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW01MLFR6XX19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHZMLFt7dHlwZTprXyxhcmdzOlt7aW1wb3J0czpbaUwseUYsQnYsekgsVHpdLGV4cG9ydHM6W01MLFR6XSxkZWNsYXJhdGlvbnM6W01MLF9MXSxlbnRyeUNvbXBvbmVudHM6W01MLF9MXX1dfV0sbnVsbCxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IHhMPW5ldyBOcigibWF0LXNuYWNrLWJhci1kZWZhdWx0LW9wdGlvbnMiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uIE9MKCl7cmV0dXJuIG5ldyBoTH19KTtjbGFzcyBQTHtjb25zdHJ1Y3Rvcih0LGUsbixvLGksYSl7dGhpcy5fb3ZlcmxheT10LHRoaXMuX2xpdmU9ZSx0aGlzLl9pbmplY3Rvcj1uLHRoaXMuX2JyZWFrcG9pbnRPYnNlcnZlcj1vLHRoaXMuX3BhcmVudFNuYWNrQmFyPWksdGhpcy5fZGVmYXVsdENvbmZpZz1hLHRoaXMuX3NuYWNrQmFyUmVmQXRUaGlzTGV2ZWw9bnVsbCx0aGlzLnNpbXBsZVNuYWNrQmFyQ29tcG9uZW50PV9MLHRoaXMuc25hY2tCYXJDb250YWluZXJDb21wb25lbnQ9TUwsdGhpcy5oYW5kc2V0Q3NzQ2xhc3M9Im1hdC1zbmFjay1iYXItaGFuZHNldCJ9Z2V0IF9vcGVuZWRTbmFja0JhclJlZigpe2NvbnN0IHQ9dGhpcy5fcGFyZW50U25hY2tCYXI7cmV0dXJuIHQ/dC5fb3BlbmVkU25hY2tCYXJSZWY6dGhpcy5fc25hY2tCYXJSZWZBdFRoaXNMZXZlbH1zZXQgX29wZW5lZFNuYWNrQmFyUmVmKHQpe3RoaXMuX3BhcmVudFNuYWNrQmFyP3RoaXMuX3BhcmVudFNuYWNrQmFyLl9vcGVuZWRTbmFja0JhclJlZj10OnRoaXMuX3NuYWNrQmFyUmVmQXRUaGlzTGV2ZWw9dH1vcGVuRnJvbUNvbXBvbmVudCh0LGUpe3JldHVybiB0aGlzLl9hdHRhY2godCxlKX1vcGVuRnJvbVRlbXBsYXRlKHQsZSl7cmV0dXJuIHRoaXMuX2F0dGFjaCh0LGUpfW9wZW4odCxlPSIiLG4pe2NvbnN0IG89T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHRoaXMuX2RlZmF1bHRDb25maWcpLG4pO3JldHVybiBvLmRhdGE9e21lc3NhZ2U6dCxhY3Rpb246ZX0sby5hbm5vdW5jZW1lbnRNZXNzYWdlPT09dCYmKG8uYW5ub3VuY2VtZW50TWVzc2FnZT12b2lkIDApLHRoaXMub3BlbkZyb21Db21wb25lbnQodGhpcy5zaW1wbGVTbmFja0JhckNvbXBvbmVudCxvKX1kaXNtaXNzKCl7dGhpcy5fb3BlbmVkU25hY2tCYXJSZWYmJnRoaXMuX29wZW5lZFNuYWNrQmFyUmVmLmRpc21pc3MoKX1uZ09uRGVzdHJveSgpe3RoaXMuX3NuYWNrQmFyUmVmQXRUaGlzTGV2ZWwmJnRoaXMuX3NuYWNrQmFyUmVmQXRUaGlzTGV2ZWwuZGlzbWlzcygpfV9hdHRhY2hTbmFja0JhckNvbnRhaW5lcih0LGUpe2NvbnN0IG49UXAuY3JlYXRlKHtwYXJlbnQ6ZSYmZS52aWV3Q29udGFpbmVyUmVmJiZlLnZpZXdDb250YWluZXJSZWYuaW5qZWN0b3J8fHRoaXMuX2luamVjdG9yLHByb3ZpZGVyczpbe3Byb3ZpZGU6aEwsdXNlVmFsdWU6ZX1dfSksbz1uZXcgc0YodGhpcy5zbmFja0JhckNvbnRhaW5lckNvbXBvbmVudCxlLnZpZXdDb250YWluZXJSZWYsbiksaT10LmF0dGFjaChvKTtyZXR1cm4gaS5pbnN0YW5jZS5zbmFja0JhckNvbmZpZz1lLGkuaW5zdGFuY2V9X2F0dGFjaCh0LGUpe2NvbnN0IG49T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sbmV3IGhMKSx0aGlzLl9kZWZhdWx0Q29uZmlnKSxlKSxvPXRoaXMuX2NyZWF0ZU92ZXJsYXkobiksaT10aGlzLl9hdHRhY2hTbmFja0JhckNvbnRhaW5lcihvLG4pLGE9bmV3IHlMKGksbyk7aWYodCBpbnN0YW5jZW9mIFVoKXtjb25zdCBlPW5ldyBsRih0LG51bGwseyRpbXBsaWNpdDpuLmRhdGEsc25hY2tCYXJSZWY6YX0pO2EuaW5zdGFuY2U9aS5hdHRhY2hUZW1wbGF0ZVBvcnRhbChlKX1lbHNle2NvbnN0IGU9dGhpcy5fY3JlYXRlSW5qZWN0b3IobixhKSxvPW5ldyBzRih0LHZvaWQgMCxlKSxyPWkuYXR0YWNoQ29tcG9uZW50UG9ydGFsKG8pO2EuaW5zdGFuY2U9ci5pbnN0YW5jZX1yZXR1cm4gdGhpcy5fYnJlYWtwb2ludE9ic2VydmVyLm9ic2VydmUoIihtYXgtd2lkdGg6IDU5OS45OHB4KSBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkiKS5waXBlKHVuKG8uZGV0YWNobWVudHMoKSkpLnN1YnNjcmliZSgodD0+e2NvbnN0IGU9by5vdmVybGF5RWxlbWVudC5jbGFzc0xpc3Q7dC5tYXRjaGVzP2UuYWRkKHRoaXMuaGFuZHNldENzc0NsYXNzKTplLnJlbW92ZSh0aGlzLmhhbmRzZXRDc3NDbGFzcyl9KSksbi5hbm5vdW5jZW1lbnRNZXNzYWdlJiZpLl9vbkFubm91bmNlLnN1YnNjcmliZSgoKCk9Pnt0aGlzLl9saXZlLmFubm91bmNlKG4uYW5ub3VuY2VtZW50TWVzc2FnZSxuLnBvbGl0ZW5lc3MpfSkpLHRoaXMuX2FuaW1hdGVTbmFja0JhcihhLG4pLHRoaXMuX29wZW5lZFNuYWNrQmFyUmVmPWEsdGhpcy5fb3BlbmVkU25hY2tCYXJSZWZ9X2FuaW1hdGVTbmFja0Jhcih0LGUpe3QuYWZ0ZXJEaXNtaXNzZWQoKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5fb3BlbmVkU25hY2tCYXJSZWY9PXQmJih0aGlzLl9vcGVuZWRTbmFja0JhclJlZj1udWxsKSxlLmFubm91bmNlbWVudE1lc3NhZ2UmJnRoaXMuX2xpdmUuY2xlYXIoKX0pKSx0aGlzLl9vcGVuZWRTbmFja0JhclJlZj8odGhpcy5fb3BlbmVkU25hY2tCYXJSZWYuYWZ0ZXJEaXNtaXNzZWQoKS5zdWJzY3JpYmUoKCgpPT57dC5jb250YWluZXJJbnN0YW5jZS5lbnRlcigpfSkpLHRoaXMuX29wZW5lZFNuYWNrQmFyUmVmLmRpc21pc3MoKSk6dC5jb250YWluZXJJbnN0YW5jZS5lbnRlcigpLGUuZHVyYXRpb24mJmUuZHVyYXRpb24+MCYmdC5hZnRlck9wZW5lZCgpLnN1YnNjcmliZSgoKCk9PnQuX2Rpc21pc3NBZnRlcihlLmR1cmF0aW9uKSkpfV9jcmVhdGVPdmVybGF5KHQpe2NvbnN0IGU9bmV3IFNGO2UuZGlyZWN0aW9uPXQuZGlyZWN0aW9uO2xldCBuPXRoaXMuX292ZXJsYXkucG9zaXRpb24oKS5nbG9iYWwoKTtjb25zdCBvPSJydGwiPT09dC5kaXJlY3Rpb24saT0ibGVmdCI9PT10Lmhvcml6b250YWxQb3NpdGlvbnx8InN0YXJ0Ij09PXQuaG9yaXpvbnRhbFBvc2l0aW9uJiYhb3x8ImVuZCI9PT10Lmhvcml6b250YWxQb3NpdGlvbiYmbyxhPSFpJiYiY2VudGVyIiE9PXQuaG9yaXpvbnRhbFBvc2l0aW9uO3JldHVybiBpP24ubGVmdCgiMCIpOmE/bi5yaWdodCgiMCIpOm4uY2VudGVySG9yaXpvbnRhbGx5KCksInRvcCI9PT10LnZlcnRpY2FsUG9zaXRpb24/bi50b3AoIjAiKTpuLmJvdHRvbSgiMCIpLGUucG9zaXRpb25TdHJhdGVneT1uLHRoaXMuX292ZXJsYXkuY3JlYXRlKGUpfV9jcmVhdGVJbmplY3Rvcih0LGUpe3JldHVybiBRcC5jcmVhdGUoe3BhcmVudDp0JiZ0LnZpZXdDb250YWluZXJSZWYmJnQudmlld0NvbnRhaW5lclJlZi5pbmplY3Rvcnx8dGhpcy5faW5qZWN0b3IscHJvdmlkZXJzOlt7cHJvdmlkZTp5TCx1c2VWYWx1ZTplfSx7cHJvdmlkZTpnTCx1c2VWYWx1ZTp0LmRhdGF9XX0pfX1QTC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8UEwpKHVzKEpGKSx1cyhheiksdXMoUXApLHVzKHBMKSx1cyhQTCwxMiksdXMoeEwpKX0sUEwuybVwcm92PWxvKHtmYWN0b3J5OmZ1bmN0aW9uIHQoKXtyZXR1cm4gbmV3IFBMKHVzKEpGKSx1cyhheiksdXMoSXApLHVzKHBMKSx1cyhQTCwxMiksdXMoeEwpKX0sdG9rZW46UEwscHJvdmlkZWRJbjp2TH0pLFBMLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6SkZ9LHt0eXBlOmF6fSx7dHlwZTpRcH0se3R5cGU6cEx9LHt0eXBlOlBMLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTpNc31dfSx7dHlwZTpoTCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOlt4TF19XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoUEwsW3t0eXBlOkptLGFyZ3M6W3twcm92aWRlZEluOnZMfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6SkZ9LHt0eXBlOmF6fSx7dHlwZTpRcH0se3R5cGU6cEx9LHt0eXBlOlBMLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTpNc31dfSx7dHlwZTpoTCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOlt4TF19XX1dfSksbnVsbCk7Y29uc3Qgd0w9L1tcXF4kLiorPygpW1xde318XS9nLGtMPSJcXHUwMDAwLVxcdTAwMjBcXHUwMDdmLVxcdTAwOWYiLFNMPW5ldyBSZWdFeHAoIig/OlthLXpBLVpdW2EtekEtWjAtOSsuLV17Mix9OlxcL1xcL3xkYXRhOnx3d3dcXC4pW15cXHMiK2tMKyciXXsyLH1bXlxccycra0wrIlwiJyl9XFxdLDo7LiE/XSIsImd1Iik7ZnVuY3Rpb24gREwodCl7cmV0dXJuKGZ1bmN0aW9uIGUodCxuKXtuLmZsYWdzLmluY2x1ZGVzKCJnIil8fChuPW5ldyBSZWdFeHAobixuLmZsYWdzKyJnIikpO2NvbnN0IG89W107bGV0IGk9MDtmb3IoY29uc3QgZSBvZiB0Lm1hdGNoQWxsKG4pKXtjb25zdCBuPWUuaW5kZXgsYT1lWzBdO24+aSYmby5wdXNoKHtpbmRleDppLHRleHQ6dC5zdWJzdHJpbmcoaSxuKSxtYXRjaGVzUmVnZXg6ITF9KSxvLnB1c2goe2luZGV4Om4sdGV4dDphLG1hdGNoZXNSZWdleDohMH0pLGk9bithLmxlbmd0aH1yZXR1cm4gdC5sZW5ndGg+aSYmby5wdXNoKHtpbmRleDppLHRleHQ6dC5zdWJzdHJpbmcoaSx0Lmxlbmd0aCksbWF0Y2hlc1JlZ2V4OiExfSksb30pKHQsU0wpLm1hcCgoKHttYXRjaGVzUmVnZXg6dCx0ZXh0OmV9KT0+KHtpc1VSTDp0LHRleHQ6ZX0pKSl9ZnVuY3Rpb24gRUwodCxlKXtpZigxJnQmJihrdSgwKSxNZigxKSxTdSgpKSwyJnQpe2NvbnN0IHQ9THUoKS4kaW1wbGljaXQ7SmMoMSkseGYoIiAiLHQudGV4dCwiICIpfX1mdW5jdGlvbiBBTCh0LGUpe2lmKDEmdCYmKE91KDAsImEiLDcpLE1mKDEpLFB1KCkpLDImdCl7Y29uc3QgdD1MdSgpLiRpbXBsaWNpdDtVdSgiaHJlZiIsdC50ZXh0LE9sKSxKYygxKSx2Zih0LnRleHQpfX1mdW5jdGlvbiBSTCh0LGUpe2lmKDEmdCYmKGt1KDApLFdtKDEsRUwsMiwxLCJuZy1jb250YWluZXIiLDUpLFdtKDIsQUwsMiwyLCJuZy10ZW1wbGF0ZSIsbnVsbCw2LEtiKSxTdSgpKSwyJnQpe2NvbnN0IHQ9ZS4kaW1wbGljaXQsbj1HbSgzKTtKYygxKSx2dSgibmdJZiIsIXQuaXNVUkwpKCJuZ0lmRWxzZSIsbil9fWZ1bmN0aW9uIFRMKHQsZSl7aWYoMSZ0KXtjb25zdCB0PUV1KCk7T3UoMCwiYnV0dG9uIiw4KSxOdSgiY2xpY2siLChmdW5jdGlvbiBlKCl7cmV0dXJuIHJhKHQpLEx1KCkub25BY3Rpb25CdXR0b25DbGlja2VkKCl9KSksTWYoMSksUHUoKX1pZigyJnQpe2NvbnN0IHQ9THUoKTtKYygxKSx4ZigiICIsdC5hbGVydC5mb2xsb3d1cEFjdGlvbi5sb2NhbGl6ZWRMYWJlbCwiICIpfX1jbGFzcyBOTHtjb25zdHJ1Y3Rvcih0LGUsbil7dGhpcy5zbmFja0JhclJlZj10LHRoaXMudW5rbm93bkRhdGE9ZSx0aGlzLnN0b3JlPW4sdGhpcy5zcGxpdEJ5VVJMPURMLHRoaXMuYWxlcnQ9ZX1vbkFjdGlvbkJ1dHRvbkNsaWNrZWQoKXtyZXR1cm4gclIodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt0aGlzLnNuYWNrQmFyUmVmLmRpc21pc3MoKTtjb25zdCB0PXlpZWxkIHRoaXMuYWxlcnQuZm9sbG93dXBBY3Rpb24uZ2V0Rm9sbG93dXBBY3Rpb24odGhpcy5zdG9yZSk7dGhpcy5zdG9yZS5kaXNwYXRjaCh0KX0pKX1vbkNsb3NlQnV0dG9uQ2xpY2tlZCgpe3RoaXMuc25hY2tCYXJSZWYuZGlzbWlzcygpfX1OTC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8TkwpKE11KHlMKSxNdShnTCksTXUoRWspKX0sTkwuybVjbXA9VW8oe3R5cGU6Tkwsc2VsZWN0b3JzOltbImFsZXJ0LWRpc3BsYXktc25hY2tiYXIiXV0sZGVjbHM6Nix2YXJzOjIsY29uc3RzOmZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIHQ9InVuZGVmaW5lZCIhPXR5cGVvZiBuZ0kxOG5DbG9zdXJlTW9kZSYmbmdJMThuQ2xvc3VyZU1vZGU/Z29vZy5nZXRNc2coIkRpc21pc3MiKTokbG9jYWxpemVgOkEgYnV0dG9uIHRvIGNsb3NlIHRoZSBzbmFja2JhciBtZXNzYWdl4pCfZWE0ZDlmZTYxNDIwYTNmY2U4MWNmNTRjNGM2MTVlM2MxOWM2NDZhNuKQnzE1MzYwODc1MTk3NDM3MDczNjI6RGlzbWlzc2AsW1sxLCJtZXNzYWdlIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjb250cm9scyJdLFsibWF0LWJ1dHRvbiIsIiIsImNsYXNzIiwiZm9sbG93dXAtYnV0dG9uIiwzLCJjbGljayIsNCwibmdJZiJdLFsibWF0LWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLHQsMSwiZGlzbWlzcy1idXR0b24iLDMsImNsaWNrIl0sWzQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsibGlua1BpZWNlIiwiIl0sWyJyZWwiLCJub3JlZmVycmVyIG5vb3BlbmVyIiwidGFyZ2V0IiwiX2JsYW5rIiwzLCJocmVmIl0sWyJtYXQtYnV0dG9uIiwiIiwxLCJmb2xsb3d1cC1idXR0b24iLDMsImNsaWNrIl1dfSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoT3UoMCwiZGl2IiwwKSxXbSgxLFJMLDQsMiwibmctY29udGFpbmVyIiwxKSxQdSgpLE91KDIsImRpdiIsMiksV20oMyxUTCwyLDEsImJ1dHRvbiIsMyksT3UoNCwiYnV0dG9uIiw0KSxOdSgiY2xpY2siLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub25DbG9zZUJ1dHRvbkNsaWNrZWQoKX0pKSxNZig1LCIgRGlzbWlzcyAiKSxQdSgpLFB1KCkpLDImZSYmKEpjKDEpLHZ1KCJuZ0Zvck9mIixuLnNwbGl0QnlVUkwobi5hbGVydC5sb2NhbGl6ZWRNZXNzYWdlKSksSmMoMiksdnUoIm5nSWYiLG4uYWxlcnQuZm9sbG93dXBBY3Rpb24pKX0sZGlyZWN0aXZlczpbb3YsYXYsTkhdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwfS5tZXNzYWdlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDthbGlnbi1zZWxmOmNlbnRlcjttYXJnaW46NXB4IDA7d29yZC1icmVhazpicmVhay13b3JkfS5tZXNzYWdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGFbX25nY29udGVudC0lQ09NUCVde2NvbG9yOmluaGVyaXR9LmNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7bWFyZ2luLWxlZnQ6YXV0b31idXR0b25bX25nY29udGVudC0lQ09NUCVde3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoTkwsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoiYWxlcnQtZGlzcGxheS1zbmFja2JhciIsdGVtcGxhdGVVcmw6Ii4vYWxlcnRfZGlzcGxheV9zbmFja2Jhcl9jb250YWluZXIubmcuaHRtbCIsc3R5bGVVcmxzOlsiLi9hbGVydF9kaXNwbGF5X3NuYWNrYmFyX2NvbnRhaW5lci5jc3MiXSxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6eUx9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltnTF19XX0se3R5cGU6RWt9XX0pLG51bGwpO2NsYXNzIElMe2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5zdG9yZT10LHRoaXMuc25hY2tCYXI9ZSx0aGlzLm5nVW5zdWJzY3JpYmU9bmV3IHh9bmdPbkluaXQoKXt0aGlzLnN0b3JlLnNlbGVjdChlUikucGlwZSh1bih0aGlzLm5nVW5zdWJzY3JpYmUpLEd0KCh0PT5Cb29sZWFuKHQpKSkpLnN1YnNjcmliZSgodD0+e3RoaXMuc2hvd0FsZXJ0KHQpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKSx0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKX1zaG93QWxlcnQodCl7dGhpcy5zbmFja0Jhci5vcGVuRnJvbUNvbXBvbmVudChOTCx7ZHVyYXRpb246NWUzLGhvcml6b250YWxQb3NpdGlvbjoic3RhcnQiLHZlcnRpY2FsUG9zaXRpb246ImJvdHRvbSIsZGF0YTp0fSl9fUlMLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxJTCkoTXUoRWspLE11KFBMKSl9LElMLsm1Y21wPVVvKHt0eXBlOklMLHNlbGVjdG9yczpbWyJhbGVydC1zbmFja2JhciJdXSxkZWNsczowLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7fSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKElMLFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6ImFsZXJ0LXNuYWNrYmFyIix0ZW1wbGF0ZToiIixjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6RWt9LHt0eXBlOlBMfV19KSxudWxsKTtjbGFzcyB6THt9ekwuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHpMKX0sekwuybVtb2Q9Wm8oe3R5cGU6ekx9KSx6TC7JtWluaj1jbyh7aW1wb3J0czpbW0J2LHpILHZMXV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKHpMLHtkZWNsYXJhdGlvbnM6W0lMLE5MXSxpbXBvcnRzOltCdix6SCx2TF0sZXhwb3J0czpbSUxdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYih6TCxbe3R5cGU6a18sYXJnczpbe2RlY2xhcmF0aW9uczpbSUwsTkxdLGV4cG9ydHM6W0lMXSxpbXBvcnRzOltCdix6SCx2TF0sZW50cnlDb21wb25lbnRzOltOTF19XX1dLG51bGwsbnVsbCk7Y2xhc3MgSEx7fUhMLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxITCl9LEhMLsm1bW9kPVpvKHt0eXBlOkhMfSksSEwuybVpbmo9Y28oe2ltcG9ydHM6W1t2QSx6TCxpUy5mb3JGZWF0dXJlKHRSLCROKSxMUy5mb3JGZWF0dXJlKFtKTl0pXV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKEhMLHtpbXBvcnRzOlt2QSx6TCxvUyxGU119KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEhMLFt7dHlwZTprXyxhcmdzOlt7aW1wb3J0czpbdkEsekwsaVMuZm9yRmVhdHVyZSh0UiwkTiksTFMuZm9yRmVhdHVyZShbSk5dKV19XX1dLG51bGwsbnVsbCk7Y29uc3QgRkw9WyIqIixbWyJtYXQtdG9vbGJhci1yb3ciXV1dLExMPUl6KGNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuX2VsZW1lbnRSZWY9dH19KTtjbGFzcyBCTHt9QkwuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEJMKX0sQkwuybVkaXI9Sm8oe3R5cGU6Qkwsc2VsZWN0b3JzOltbIm1hdC10b29sYmFyLXJvdyJdXSxob3N0QXR0cnM6WzEsIm1hdC10b29sYmFyLXJvdyJdLGV4cG9ydEFzOlsibWF0VG9vbGJhclJvdyJdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihCTCxbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJtYXQtdG9vbGJhci1yb3ciLGV4cG9ydEFzOiJtYXRUb29sYmFyUm93Iixob3N0OntjbGFzczoibWF0LXRvb2xiYXItcm93In19XX1dLG51bGwsbnVsbCk7Y2xhc3MgVkwgZXh0ZW5kcyBMTHtjb25zdHJ1Y3Rvcih0LGUsbil7c3VwZXIodCksdGhpcy5fcGxhdGZvcm09ZSx0aGlzLl9kb2N1bWVudD1ufW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX3BsYXRmb3JtLmlzQnJvd3NlciYmKHRoaXMuX2NoZWNrVG9vbGJhck1peGVkTW9kZXMoKSx0aGlzLl90b29sYmFyUm93cy5jaGFuZ2VzLnN1YnNjcmliZSgoKCk9PnRoaXMuX2NoZWNrVG9vbGJhck1peGVkTW9kZXMoKSkpKX1fY2hlY2tUb29sYmFyTWl4ZWRNb2Rlcygpe3RoaXMuX3Rvb2xiYXJSb3dzLmxlbmd0aCYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZBcnJheS5mcm9tKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jaGlsZE5vZGVzKS5maWx0ZXIoKHQ9PiEodC5jbGFzc0xpc3QmJnQuY2xhc3NMaXN0LmNvbnRhaW5zKCJtYXQtdG9vbGJhci1yb3ciKSkpKS5maWx0ZXIoKHQ9PnQubm9kZVR5cGUhPT0odGhpcy5fZG9jdW1lbnQ/dGhpcy5fZG9jdW1lbnQuQ09NTUVOVF9OT0RFOjgpKSkuc29tZSgodD0+ISghdC50ZXh0Q29udGVudHx8IXQudGV4dENvbnRlbnQudHJpbSgpKSkpJiYoZnVuY3Rpb24gdCgpe3Rocm93IEVycm9yKCJNYXRUb29sYmFyOiBBdHRlbXB0aW5nIHRvIGNvbWJpbmUgZGlmZmVyZW50IHRvb2xiYXIgbW9kZXMuIEVpdGhlciBzcGVjaWZ5IG11bHRpcGxlIGA8bWF0LXRvb2xiYXItcm93PmAgZWxlbWVudHMgZXhwbGljaXRseSBvciBqdXN0IHBsYWNlIGNvbnRlbnQgaW5zaWRlIG9mIGEgYDxtYXQtdG9vbGJhcj5gIGZvciBhIHNpbmdsZSByb3cuIil9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLykoKX19VkwuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFZMKShNdShjaCksTXUoZkkpLE11KFVDKSl9LFZMLsm1Y21wPVVvKHt0eXBlOlZMLHNlbGVjdG9yczpbWyJtYXQtdG9vbGJhciJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbiB0KGUsbixvKXtpZigxJmUmJkdiKG8sQkwsMSksMiZlKXtsZXQgdDtVYih0PVliKCkpJiYobi5fdG9vbGJhclJvd3M9dCl9fSxob3N0QXR0cnM6WzEsIm1hdC10b29sYmFyIl0saG9zdFZhcnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezImZSYmYWYoIm1hdC10b29sYmFyLW11bHRpcGxlLXJvd3MiLG4uX3Rvb2xiYXJSb3dzLmxlbmd0aD4wKSgibWF0LXRvb2xiYXItc2luZ2xlLXJvdyIsMD09PW4uX3Rvb2xiYXJSb3dzLmxlbmd0aCl9LGlucHV0czp7Y29sb3I6ImNvbG9yIn0sZXhwb3J0QXM6WyJtYXRUb29sYmFyIl0sZmVhdHVyZXM6W2dtXSxuZ0NvbnRlbnRTZWxlY3RvcnM6WyIqIiwibWF0LXRvb2xiYXItcm93Il0sZGVjbHM6Mix2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKFZ1KEZMKSxqdSgwKSxqdSgxLDEpKX0sc3R5bGVzOlsiLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXRvb2xiYXJ7b3V0bGluZTpzb2xpZCAxcHh9Lm1hdC10b29sYmFyLXJvdywubWF0LXRvb2xiYXItc2luZ2xlLXJvd3tkaXNwbGF5OmZsZXg7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6MCAxNnB4O3dpZHRoOjEwMCU7ZmxleC1kaXJlY3Rpb246cm93O2FsaWduLWl0ZW1zOmNlbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1hdC10b29sYmFyLW11bHRpcGxlLXJvd3N7ZGlzcGxheTpmbGV4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47d2lkdGg6MTAwJX1cbiJdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLFZMLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6Y2h9LHt0eXBlOmZJfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbVUNdfV19XSxWTC5wcm9wRGVjb3JhdG9ycz17X3Rvb2xiYXJSb3dzOlt7dHlwZTp6cixhcmdzOltCTCx7ZGVzY2VuZGFudHM6ITB9XX1dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFZMLFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6Im1hdC10b29sYmFyIixleHBvcnRBczoibWF0VG9vbGJhciIsdGVtcGxhdGU6JzxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjxuZy1jb250ZW50IHNlbGVjdD0ibWF0LXRvb2xiYXItcm93Ij48L25nLWNvbnRlbnQ+XG4nLGlucHV0czpbImNvbG9yIl0saG9zdDp7Y2xhc3M6Im1hdC10b29sYmFyIiwiW2NsYXNzLm1hdC10b29sYmFyLW11bHRpcGxlLXJvd3NdIjoiX3Rvb2xiYXJSb3dzLmxlbmd0aCA+IDAiLCJbY2xhc3MubWF0LXRvb2xiYXItc2luZ2xlLXJvd10iOiJfdG9vbGJhclJvd3MubGVuZ3RoID09PSAwIn0sY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaCxlbmNhcHN1bGF0aW9uOlBvLk5vbmUsc3R5bGVzOlsiLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXRvb2xiYXJ7b3V0bGluZTpzb2xpZCAxcHh9Lm1hdC10b29sYmFyLXJvdywubWF0LXRvb2xiYXItc2luZ2xlLXJvd3tkaXNwbGF5OmZsZXg7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6MCAxNnB4O3dpZHRoOjEwMCU7ZmxleC1kaXJlY3Rpb246cm93O2FsaWduLWl0ZW1zOmNlbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1hdC10b29sYmFyLW11bHRpcGxlLXJvd3N7ZGlzcGxheTpmbGV4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47d2lkdGg6MTAwJX1cbiJdfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Y2h9LHt0eXBlOmZJfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbVUNdfV19XX0pLHtfdG9vbGJhclJvd3M6W3t0eXBlOnpyLGFyZ3M6W0JMLHtkZXNjZW5kYW50czohMH1dfV19KTtjbGFzcyBqTHt9ZnVuY3Rpb24gVUwodCxlKXsxJnQmJmp1KDApfWpMLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxqTCl9LGpMLsm1bW9kPVpvKHt0eXBlOmpMfSksakwuybVpbmo9Y28oe2ltcG9ydHM6W1tUel0sVHpdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhqTCx7ZGVjbGFyYXRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuW1ZMLEJMXX0saW1wb3J0czpmdW5jdGlvbigpe3JldHVybltUel19LGV4cG9ydHM6ZnVuY3Rpb24oKXtyZXR1cm5bVkwsQkwsVHpdfX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoakwsW3t0eXBlOmtfLGFyZ3M6W3tpbXBvcnRzOltUel0sZXhwb3J0czpbVkwsQkwsVHpdLGRlY2xhcmF0aW9uczpbVkwsQkxdfV19XSxudWxsLG51bGwpO2NvbnN0IFdMPVsiKiJdO2Z1bmN0aW9uIEdMKHQsZSl7fWNvbnN0IFlMPWZ1bmN0aW9uKHQpe3JldHVybnthbmltYXRpb25EdXJhdGlvbjp0fX0scUw9ZnVuY3Rpb24odCxlKXtyZXR1cm57dmFsdWU6dCxwYXJhbXM6ZX19LFpMPVsidGFiQm9keVdyYXBwZXIiXSxYTD1bInRhYkhlYWRlciJdO2Z1bmN0aW9uIEtMKHQsZSl7fWZ1bmN0aW9uIEpMKHQsZSl7MSZ0JiZXbSgwLEtMLDAsMCwibmctdGVtcGxhdGUiLDkpLDImdCYmdnUoImNka1BvcnRhbE91dGxldCIsTHUoKS4kaW1wbGljaXQudGVtcGxhdGVMYWJlbCl9ZnVuY3Rpb24gUUwodCxlKXsxJnQmJk1mKDApLDImdCYmdmYoTHUoKS4kaW1wbGljaXQudGV4dExhYmVsKX1mdW5jdGlvbiAkTCh0LGUpe2lmKDEmdCl7Y29uc3QgdD1FdSgpO091KDAsImRpdiIsNiksTnUoImNsaWNrIiwoZnVuY3Rpb24gbigpe3JhKHQpO2NvbnN0IG89ZS4kaW1wbGljaXQsaT1lLmluZGV4LGE9THUoKSxyPUdtKDEpO3JldHVybiBhLl9oYW5kbGVDbGljayhvLHIsaSl9KSkoImNka0ZvY3VzQ2hhbmdlIiwoZnVuY3Rpb24gbihvKXtyYSh0KTtjb25zdCBpPWUuaW5kZXg7cmV0dXJuIEx1KCkuX3RhYkZvY3VzQ2hhbmdlZChvLGkpfSkpLE91KDEsImRpdiIsNyksV20oMixKTCwxLDEsIm5nLXRlbXBsYXRlIiw4KSxXbSgzLFFMLDEsMSwibmctdGVtcGxhdGUiLDgpLFB1KCksUHUoKX1pZigyJnQpe2NvbnN0IHQ9ZS4kaW1wbGljaXQsbj1lLmluZGV4LG89THUoKTthZigibWF0LXRhYi1sYWJlbC1hY3RpdmUiLG8uc2VsZWN0ZWRJbmRleD09biksdnUoImlkIixvLl9nZXRUYWJMYWJlbElkKG4pKSgiZGlzYWJsZWQiLHQuZGlzYWJsZWQpKCJtYXRSaXBwbGVEaXNhYmxlZCIsdC5kaXNhYmxlZHx8by5kaXNhYmxlUmlwcGxlKSxObSgidGFiSW5kZXgiLG8uX2dldFRhYkluZGV4KHQsbikpKCJhcmlhLXBvc2luc2V0IixuKzEpKCJhcmlhLXNldHNpemUiLG8uX3RhYnMubGVuZ3RoKSgiYXJpYS1jb250cm9scyIsby5fZ2V0VGFiQ29udGVudElkKG4pKSgiYXJpYS1zZWxlY3RlZCIsby5zZWxlY3RlZEluZGV4PT1uKSgiYXJpYS1sYWJlbCIsdC5hcmlhTGFiZWx8fG51bGwpKCJhcmlhLWxhYmVsbGVkYnkiLCF0LmFyaWFMYWJlbCYmdC5hcmlhTGFiZWxsZWRieT90LmFyaWFMYWJlbGxlZGJ5Om51bGwpLEpjKDIpLHZ1KCJuZ0lmIix0LnRlbXBsYXRlTGFiZWwpLEpjKDEpLHZ1KCJuZ0lmIiwhdC50ZW1wbGF0ZUxhYmVsKX19ZnVuY3Rpb24gdEIodCxlKXtpZigxJnQpe2NvbnN0IHQ9RXUoKTtPdSgwLCJtYXQtdGFiLWJvZHkiLDEwKSxOdSgiX29uQ2VudGVyZWQiLChmdW5jdGlvbiBlKCl7cmV0dXJuIHJhKHQpLEx1KCkuX3JlbW92ZVRhYkJvZHlXcmFwcGVySGVpZ2h0KCl9KSkoIl9vbkNlbnRlcmluZyIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIHJhKHQpLEx1KCkuX3NldFRhYkJvZHlXcmFwcGVySGVpZ2h0KG4pfSkpLFB1KCl9aWYoMiZ0KXtjb25zdCB0PWUuJGltcGxpY2l0LG49ZS5pbmRleCxvPUx1KCk7YWYoIm1hdC10YWItYm9keS1hY3RpdmUiLG8uc2VsZWN0ZWRJbmRleD09biksdnUoImlkIixvLl9nZXRUYWJDb250ZW50SWQobikpKCJjb250ZW50Iix0LmNvbnRlbnQpKCJwb3NpdGlvbiIsdC5wb3NpdGlvbikoIm9yaWdpbiIsdC5vcmlnaW4pKCJhbmltYXRpb25EdXJhdGlvbiIsby5hbmltYXRpb25EdXJhdGlvbiksTm0oImFyaWEtbGFiZWxsZWRieSIsby5fZ2V0VGFiTGFiZWxJZChuKSl9fWNvbnN0IGVCPVsidGFiTGlzdENvbnRhaW5lciJdLG5CPVsidGFiTGlzdCJdLG9CPVsibmV4dFBhZ2luYXRvciJdLGlCPVsicHJldmlvdXNQYWdpbmF0b3IiXSxhQj1uZXcgTnIoIk1hdElua0JhclBvc2l0aW9uZXIiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uIHJCKCl7cmV0dXJuIHQ9Pih7bGVmdDp0Pyh0Lm9mZnNldExlZnR8fDApKyJweCI6IjAiLHdpZHRoOnQ/KHQub2Zmc2V0V2lkdGh8fDApKyJweCI6IjAifSl9fSk7Y2xhc3Mgc0J7Y29uc3RydWN0b3IodCxlLG4sbyl7dGhpcy5fZWxlbWVudFJlZj10LHRoaXMuX25nWm9uZT1lLHRoaXMuX2lua0JhclBvc2l0aW9uZXI9bix0aGlzLl9hbmltYXRpb25Nb2RlPW99YWxpZ25Ub0VsZW1lbnQodCl7dGhpcy5zaG93KCksInVuZGVmaW5lZCIhPXR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWU/dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgoKT0+e3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKCk9PnRoaXMuX3NldFN0eWxlcyh0KSkpfSkpOnRoaXMuX3NldFN0eWxlcyh0KX1zaG93KCl7dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLnZpc2liaWxpdHk9InZpc2libGUifWhpZGUoKXt0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIn1fc2V0U3R5bGVzKHQpe2NvbnN0IGU9dGhpcy5faW5rQmFyUG9zaXRpb25lcih0KSxuPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtuLnN0eWxlLmxlZnQ9ZS5sZWZ0LG4uc3R5bGUud2lkdGg9ZS53aWR0aH19c0IuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHNCKShNdShjaCksTXUodEMpLE11KGFCKSxNdShOdyw4KSl9LHNCLsm1ZGlyPUpvKHt0eXBlOnNCLHNlbGVjdG9yczpbWyJtYXQtaW5rLWJhciJdXSxob3N0QXR0cnM6WzEsIm1hdC1pbmstYmFyIl0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezImZSYmYWYoIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIiwiTm9vcEFuaW1hdGlvbnMiPT09bi5fYW5pbWF0aW9uTW9kZSl9fSksc0IuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpjaH0se3R5cGU6dEN9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOlthQl19XX0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltOd119XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoc0IsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoibWF0LWluay1iYXIiLGhvc3Q6e2NsYXNzOiJtYXQtaW5rLWJhciIsIltjbGFzcy5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZV0iOiJfYW5pbWF0aW9uTW9kZSA9PT0gJ05vb3BBbmltYXRpb25zJyJ9fV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Y2h9LHt0eXBlOnRDfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbYUJdfV19LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbTnddfV19XX0pLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3QgbEI9bmV3IE5yKCJNYXRUYWJDb250ZW50Iik7Y2xhc3MgY0J7Y29uc3RydWN0b3IodCl7dGhpcy50ZW1wbGF0ZT10fX1jQi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8Y0IpKE11KFVoKSl9LGNCLsm1ZGlyPUpvKHt0eXBlOmNCLHNlbGVjdG9yczpbWyIiLCJtYXRUYWJDb250ZW50IiwiIl1dLGZlYXR1cmVzOltpaChbe3Byb3ZpZGU6bEIsdXNlRXhpc3Rpbmc6Y0J9XSldfSksY0IuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpVaH1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoY0IsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoiW21hdFRhYkNvbnRlbnRdIixwcm92aWRlcnM6W3twcm92aWRlOmxCLHVzZUV4aXN0aW5nOmNCfV19XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpVaH1dfSksbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCBkQj1uZXcgTnIoIk1hdFRhYkxhYmVsIik7Y2xhc3MgcEIgZXh0ZW5kcyBtRnt9cEIuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbUIoZXx8cEIpfSxwQi7JtWRpcj1Kbyh7dHlwZTpwQixzZWxlY3RvcnM6W1siIiwibWF0LXRhYi1sYWJlbCIsIiJdLFsiIiwibWF0VGFiTGFiZWwiLCIiXV0sZmVhdHVyZXM6W2loKFt7cHJvdmlkZTpkQix1c2VFeGlzdGluZzpwQn1dKSxnbV19KTtjb25zdCBtQj12cihwQik7KCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihwQixbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJbbWF0LXRhYi1sYWJlbF0sIFttYXRUYWJMYWJlbF0iLHByb3ZpZGVyczpbe3Byb3ZpZGU6ZEIsdXNlRXhpc3Rpbmc6cEJ9XX1dfV0sbnVsbCxudWxsKTtjb25zdCB1Qj1OeigKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNze30pLGZCPW5ldyBOcigiTUFUX1RBQl9HUk9VUCIpO2NsYXNzIGdCIGV4dGVuZHMgdUJ7Y29uc3RydWN0b3IodCxlKXtzdXBlcigpLHRoaXMuX3ZpZXdDb250YWluZXJSZWY9dCx0aGlzLl9jbG9zZXN0VGFiR3JvdXA9ZSx0aGlzLnRleHRMYWJlbD0iIix0aGlzLl9jb250ZW50UG9ydGFsPW51bGwsdGhpcy5fc3RhdGVDaGFuZ2VzPW5ldyB4LHRoaXMucG9zaXRpb249bnVsbCx0aGlzLm9yaWdpbj1udWxsLHRoaXMuaXNBY3RpdmU9ITF9Z2V0IHRlbXBsYXRlTGFiZWwoKXtyZXR1cm4gdGhpcy5fdGVtcGxhdGVMYWJlbH1zZXQgdGVtcGxhdGVMYWJlbCh0KXt0aGlzLl9zZXRUZW1wbGF0ZUxhYmVsSW5wdXQodCl9Z2V0IGNvbnRlbnQoKXtyZXR1cm4gdGhpcy5fY29udGVudFBvcnRhbH1uZ09uQ2hhbmdlcyh0KXsodC5oYXNPd25Qcm9wZXJ0eSgidGV4dExhYmVsIil8fHQuaGFzT3duUHJvcGVydHkoImRpc2FibGVkIikpJiZ0aGlzLl9zdGF0ZUNoYW5nZXMubmV4dCgpfW5nT25EZXN0cm95KCl7dGhpcy5fc3RhdGVDaGFuZ2VzLmNvbXBsZXRlKCl9bmdPbkluaXQoKXt0aGlzLl9jb250ZW50UG9ydGFsPW5ldyBsRih0aGlzLl9leHBsaWNpdENvbnRlbnR8fHRoaXMuX2ltcGxpY2l0Q29udGVudCx0aGlzLl92aWV3Q29udGFpbmVyUmVmKX1fc2V0VGVtcGxhdGVMYWJlbElucHV0KHQpe3QmJih0aGlzLl90ZW1wbGF0ZUxhYmVsPXQpfX1nQi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8Z0IpKE11KFhoKSxNdShmQikpfSxnQi7JtWNtcD1Vbyh7dHlwZTpnQixzZWxlY3RvcnM6W1sibWF0LXRhYiJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbiB0KGUsbixvKXtpZigxJmUmJihHYihvLGRCLDEpLEdiKG8sbEIsMyxVaCkpLDImZSl7bGV0IHQ7VWIodD1ZYigpKSYmKG4udGVtcGxhdGVMYWJlbD10LmZpcnN0KSxVYih0PVliKCkpJiYobi5fZXhwbGljaXRDb250ZW50PXQuZmlyc3QpfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJldiKFVoLDMpLDImZSl7bGV0IHQ7VWIodD1ZYigpKSYmKG4uX2ltcGxpY2l0Q29udGVudD10LmZpcnN0KX19LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIix0ZXh0TGFiZWw6WyJsYWJlbCIsInRleHRMYWJlbCJdLGFyaWFMYWJlbDpbImFyaWEtbGFiZWwiLCJhcmlhTGFiZWwiXSxhcmlhTGFiZWxsZWRieTpbImFyaWEtbGFiZWxsZWRieSIsImFyaWFMYWJlbGxlZGJ5Il19LGV4cG9ydEFzOlsibWF0VGFiIl0sZmVhdHVyZXM6W2dtLFNpXSxuZ0NvbnRlbnRTZWxlY3RvcnM6V0wsZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKFZ1KCksV20oMCxVTCwxLDAsIm5nLXRlbXBsYXRlIikpfSxlbmNhcHN1bGF0aW9uOjJ9KSxnQi5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOlhofSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbZkJdfV19XSxnQi5wcm9wRGVjb3JhdG9ycz17dGVtcGxhdGVMYWJlbDpbe3R5cGU6SHIsYXJnczpbZEJdfV0sX2V4cGxpY2l0Q29udGVudDpbe3R5cGU6SHIsYXJnczpbbEIse3JlYWQ6VWgsc3RhdGljOiEwfV19XSxfaW1wbGljaXRDb250ZW50Olt7dHlwZTpGcixhcmdzOltVaCx7c3RhdGljOiEwfV19XSx0ZXh0TGFiZWw6W3t0eXBlOnlfLGFyZ3M6WyJsYWJlbCJdfV0sYXJpYUxhYmVsOlt7dHlwZTp5XyxhcmdzOlsiYXJpYS1sYWJlbCJdfV0sYXJpYUxhYmVsbGVkYnk6W3t0eXBlOnlfLGFyZ3M6WyJhcmlhLWxhYmVsbGVkYnkiXX1dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGdCLFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6Im1hdC10YWIiLHRlbXBsYXRlOiJceDNjIS0tIENyZWF0ZSBhIHRlbXBsYXRlIGZvciB0aGUgY29udGVudCBvZiB0aGUgPG1hdC10YWI+IHNvIHRoYXQgd2UgY2FuIGdyYWIgYSByZWZlcmVuY2UgdG8gdGhpc1xuICAgIFRlbXBsYXRlUmVmIGFuZCB1c2UgaXQgaW4gYSBQb3J0YWwgdG8gcmVuZGVyIHRoZSB0YWIgY29udGVudCBpbiB0aGUgYXBwcm9wcmlhdGUgcGxhY2UgaW4gdGhlXG4gICAgdGFiLWdyb3VwLiAtLVx4M2VcbjxuZy10ZW1wbGF0ZT48bmctY29udGVudD48L25nLWNvbnRlbnQ+PC9uZy10ZW1wbGF0ZT5cbiIsaW5wdXRzOlsiZGlzYWJsZWQiXSxjaGFuZ2VEZXRlY3Rpb246eG8uRGVmYXVsdCxlbmNhcHN1bGF0aW9uOlBvLk5vbmUsZXhwb3J0QXM6Im1hdFRhYiJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpYaH0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W2ZCXX1dfV19KSx7dGV4dExhYmVsOlt7dHlwZTp5XyxhcmdzOlsibGFiZWwiXX1dLHRlbXBsYXRlTGFiZWw6W3t0eXBlOkhyLGFyZ3M6W2RCXX1dLF9leHBsaWNpdENvbnRlbnQ6W3t0eXBlOkhyLGFyZ3M6W2xCLHtyZWFkOlVoLHN0YXRpYzohMH1dfV0sX2ltcGxpY2l0Q29udGVudDpbe3R5cGU6RnIsYXJnczpbVWgse3N0YXRpYzohMH1dfV0sYXJpYUxhYmVsOlt7dHlwZTp5XyxhcmdzOlsiYXJpYS1sYWJlbCJdfV0sYXJpYUxhYmVsbGVkYnk6W3t0eXBlOnlfLGFyZ3M6WyJhcmlhLWxhYmVsbGVkYnkiXX1dfSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCBoQj17dHJhbnNsYXRlVGFiOkt4KCJ0cmFuc2xhdGVUYWIiLFt0TygiY2VudGVyLCB2b2lkLCBsZWZ0LW9yaWdpbi1jZW50ZXIsIHJpZ2h0LW9yaWdpbi1jZW50ZXIiLCR4KHt0cmFuc2Zvcm06Im5vbmUifSkpLHRPKCJsZWZ0IiwkeCh7dHJhbnNmb3JtOiJ0cmFuc2xhdGUzZCgtMTAwJSwgMCwgMCkiLG1pbkhlaWdodDoiMXB4In0pKSx0TygicmlnaHQiLCR4KHt0cmFuc2Zvcm06InRyYW5zbGF0ZTNkKDEwMCUsIDAsIDApIixtaW5IZWlnaHQ6IjFweCJ9KSksbk8oIiogPT4gbGVmdCwgKiA9PiByaWdodCwgbGVmdCA9PiBjZW50ZXIsIHJpZ2h0ID0+IGNlbnRlciIsSngoInt7YW5pbWF0aW9uRHVyYXRpb259fSBjdWJpYy1iZXppZXIoMC4zNSwgMCwgMC4yNSwgMSkiKSksbk8oInZvaWQgPT4gbGVmdC1vcmlnaW4tY2VudGVyIixbJHgoe3RyYW5zZm9ybToidHJhbnNsYXRlM2QoLTEwMCUsIDAsIDApIn0pLEp4KCJ7e2FuaW1hdGlvbkR1cmF0aW9ufX0gY3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuMjUsIDEpIildKSxuTygidm9pZCA9PiByaWdodC1vcmlnaW4tY2VudGVyIixbJHgoe3RyYW5zZm9ybToidHJhbnNsYXRlM2QoMTAwJSwgMCwgMCkifSksSngoInt7YW5pbWF0aW9uRHVyYXRpb259fSBjdWJpYy1iZXppZXIoMC4zNSwgMCwgMC4yNSwgMSkiKV0pXSl9OwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jbGFzcyBiQiBleHRlbmRzIGdGe2NvbnN0cnVjdG9yKHQsZSxuLG8pe3N1cGVyKHQsZSxvKSx0aGlzLl9ob3N0PW4sdGhpcy5fY2VudGVyaW5nU3ViPWwuRU1QVFksdGhpcy5fbGVhdmluZ1N1Yj1sLkVNUFRZfW5nT25Jbml0KCl7c3VwZXIubmdPbkluaXQoKSx0aGlzLl9jZW50ZXJpbmdTdWI9dGhpcy5faG9zdC5fYmVmb3JlQ2VudGVyaW5nLnBpcGUoY24odGhpcy5faG9zdC5faXNDZW50ZXJQb3NpdGlvbih0aGlzLl9ob3N0Ll9wb3NpdGlvbikpKS5zdWJzY3JpYmUoKHQ9Pnt0JiYhdGhpcy5oYXNBdHRhY2hlZCgpJiZ0aGlzLmF0dGFjaCh0aGlzLl9ob3N0Ll9jb250ZW50KX0pKSx0aGlzLl9sZWF2aW5nU3ViPXRoaXMuX2hvc3QuX2FmdGVyTGVhdmluZ0NlbnRlci5zdWJzY3JpYmUoKCgpPT57dGhpcy5kZXRhY2goKX0pKX1uZ09uRGVzdHJveSgpe3N1cGVyLm5nT25EZXN0cm95KCksdGhpcy5fY2VudGVyaW5nU3ViLnVuc3Vic2NyaWJlKCksdGhpcy5fbGVhdmluZ1N1Yi51bnN1YnNjcmliZSgpfX1iQi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8YkIpKE11KHJoKSxNdShYaCksTXUoSW4oKCgpPT5fQikpKSxNdShVQykpfSxiQi7JtWRpcj1Kbyh7dHlwZTpiQixzZWxlY3RvcnM6W1siIiwibWF0VGFiQm9keUhvc3QiLCIiXV0sZmVhdHVyZXM6W2dtXX0pLGJCLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6cmh9LHt0eXBlOlhofSx7dHlwZTpfQixkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltJbigoKCk9Pl9CKSldfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltVQ119XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoYkIsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoiW21hdFRhYkJvZHlIb3N0XSJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpyaH0se3R5cGU6WGh9LHt0eXBlOl9CLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W0luKCgoKT0+X0IpKV19XX0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W1VDXX1dfV19KSxudWxsKTtjbGFzcyB5Qntjb25zdHJ1Y3Rvcih0LGUsbil7dGhpcy5fZWxlbWVudFJlZj10LHRoaXMuX2Rpcj1lLHRoaXMuX2RpckNoYW5nZVN1YnNjcmlwdGlvbj1sLkVNUFRZLHRoaXMuX3RyYW5zbGF0ZVRhYkNvbXBsZXRlPW5ldyB4LHRoaXMuX29uQ2VudGVyaW5nPW5ldyBBYix0aGlzLl9iZWZvcmVDZW50ZXJpbmc9bmV3IEFiLHRoaXMuX2FmdGVyTGVhdmluZ0NlbnRlcj1uZXcgQWIsdGhpcy5fb25DZW50ZXJlZD1uZXcgQWIoITApLHRoaXMuYW5pbWF0aW9uRHVyYXRpb249IjUwMG1zIixlJiYodGhpcy5fZGlyQ2hhbmdlU3Vic2NyaXB0aW9uPWUuY2hhbmdlLnN1YnNjcmliZSgodD0+e3RoaXMuX2NvbXB1dGVQb3NpdGlvbkFuaW1hdGlvblN0YXRlKHQpLG4ubWFya0ZvckNoZWNrKCl9KSkpLHRoaXMuX3RyYW5zbGF0ZVRhYkNvbXBsZXRlLnBpcGUoa2UoKCh0LGUpPT50LmZyb21TdGF0ZT09PWUuZnJvbVN0YXRlJiZ0LnRvU3RhdGU9PT1lLnRvU3RhdGUpKSkuc3Vic2NyaWJlKCh0PT57dGhpcy5faXNDZW50ZXJQb3NpdGlvbih0LnRvU3RhdGUpJiZ0aGlzLl9pc0NlbnRlclBvc2l0aW9uKHRoaXMuX3Bvc2l0aW9uKSYmdGhpcy5fb25DZW50ZXJlZC5lbWl0KCksdGhpcy5faXNDZW50ZXJQb3NpdGlvbih0LmZyb21TdGF0ZSkmJiF0aGlzLl9pc0NlbnRlclBvc2l0aW9uKHRoaXMuX3Bvc2l0aW9uKSYmdGhpcy5fYWZ0ZXJMZWF2aW5nQ2VudGVyLmVtaXQoKX0pKX1zZXQgcG9zaXRpb24odCl7dGhpcy5fcG9zaXRpb25JbmRleD10LHRoaXMuX2NvbXB1dGVQb3NpdGlvbkFuaW1hdGlvblN0YXRlKCl9bmdPbkluaXQoKXsiY2VudGVyIj09dGhpcy5fcG9zaXRpb24mJm51bGwhPXRoaXMub3JpZ2luJiYodGhpcy5fcG9zaXRpb249dGhpcy5fY29tcHV0ZVBvc2l0aW9uRnJvbU9yaWdpbih0aGlzLm9yaWdpbikpfW5nT25EZXN0cm95KCl7dGhpcy5fZGlyQ2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fdHJhbnNsYXRlVGFiQ29tcGxldGUuY29tcGxldGUoKX1fb25UcmFuc2xhdGVUYWJTdGFydGVkKHQpe2NvbnN0IGU9dGhpcy5faXNDZW50ZXJQb3NpdGlvbih0LnRvU3RhdGUpO3RoaXMuX2JlZm9yZUNlbnRlcmluZy5lbWl0KGUpLGUmJnRoaXMuX29uQ2VudGVyaW5nLmVtaXQodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodCl9X2dldExheW91dERpcmVjdGlvbigpe3JldHVybiB0aGlzLl9kaXImJiJydGwiPT09dGhpcy5fZGlyLnZhbHVlPyJydGwiOiJsdHIifV9pc0NlbnRlclBvc2l0aW9uKHQpe3JldHVybiJjZW50ZXIiPT10fHwibGVmdC1vcmlnaW4tY2VudGVyIj09dHx8InJpZ2h0LW9yaWdpbi1jZW50ZXIiPT10fV9jb21wdXRlUG9zaXRpb25BbmltYXRpb25TdGF0ZSh0PXRoaXMuX2dldExheW91dERpcmVjdGlvbigpKXt0aGlzLl9wb3NpdGlvbj10aGlzLl9wb3NpdGlvbkluZGV4PDA/Imx0ciI9PXQ/ImxlZnQiOiJyaWdodCI6dGhpcy5fcG9zaXRpb25JbmRleD4wPyJsdHIiPT10PyJyaWdodCI6ImxlZnQiOiJjZW50ZXIifV9jb21wdXRlUG9zaXRpb25Gcm9tT3JpZ2luKHQpe2NvbnN0IGU9dGhpcy5fZ2V0TGF5b3V0RGlyZWN0aW9uKCk7cmV0dXJuImx0ciI9PWUmJnQ8PTB8fCJydGwiPT1lJiZ0PjA/ImxlZnQtb3JpZ2luLWNlbnRlciI6InJpZ2h0LW9yaWdpbi1jZW50ZXIifX15Qi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8eUIpKE11KGNoKSxNdShNeiw4KSxNdShIaCkpfSx5Qi7JtWRpcj1Kbyh7dHlwZTp5QixpbnB1dHM6e2FuaW1hdGlvbkR1cmF0aW9uOiJhbmltYXRpb25EdXJhdGlvbiIscG9zaXRpb246InBvc2l0aW9uIixfY29udGVudDpbImNvbnRlbnQiLCJfY29udGVudCJdLG9yaWdpbjoib3JpZ2luIn0sb3V0cHV0czp7X29uQ2VudGVyaW5nOiJfb25DZW50ZXJpbmciLF9iZWZvcmVDZW50ZXJpbmc6Il9iZWZvcmVDZW50ZXJpbmciLF9hZnRlckxlYXZpbmdDZW50ZXI6Il9hZnRlckxlYXZpbmdDZW50ZXIiLF9vbkNlbnRlcmVkOiJfb25DZW50ZXJlZCJ9fSkseUIuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpjaH0se3R5cGU6TXosZGVjb3JhdG9yczpbe3R5cGU6X3N9XX0se3R5cGU6SGh9XSx5Qi5wcm9wRGVjb3JhdG9ycz17X29uQ2VudGVyaW5nOlt7dHlwZTpfX31dLF9iZWZvcmVDZW50ZXJpbmc6W3t0eXBlOl9ffV0sX2FmdGVyTGVhdmluZ0NlbnRlcjpbe3R5cGU6X199XSxfb25DZW50ZXJlZDpbe3R5cGU6X199XSxfY29udGVudDpbe3R5cGU6eV8sYXJnczpbImNvbnRlbnQiXX1dLG9yaWdpbjpbe3R5cGU6eV99XSxhbmltYXRpb25EdXJhdGlvbjpbe3R5cGU6eV99XSxwb3NpdGlvbjpbe3R5cGU6eV99XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYih5Qixbe3R5cGU6Z199XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Y2h9LHt0eXBlOk16LGRlY29yYXRvcnM6W3t0eXBlOl9zfV19LHt0eXBlOkhofV19KSx7X29uQ2VudGVyaW5nOlt7dHlwZTpfX31dLF9iZWZvcmVDZW50ZXJpbmc6W3t0eXBlOl9ffV0sX2FmdGVyTGVhdmluZ0NlbnRlcjpbe3R5cGU6X199XSxfb25DZW50ZXJlZDpbe3R5cGU6X199XSxhbmltYXRpb25EdXJhdGlvbjpbe3R5cGU6eV99XSxwb3NpdGlvbjpbe3R5cGU6eV99XSxfY29udGVudDpbe3R5cGU6eV8sYXJnczpbImNvbnRlbnQiXX1dLG9yaWdpbjpbe3R5cGU6eV99XX0pO2NsYXNzIF9CIGV4dGVuZHMgeUJ7Y29uc3RydWN0b3IodCxlLG4pe3N1cGVyKHQsZSxuKX19X0IuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fF9CKShNdShjaCksTXUoTXosOCksTXUoSGgpKX0sX0IuybVjbXA9VW8oe3R5cGU6X0Isc2VsZWN0b3JzOltbIm1hdC10YWItYm9keSJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24gdChlLG4pe2lmKDEmZSYmV2IoZ0YsMSksMiZlKXtsZXQgdDtVYih0PVliKCkpJiYobi5fcG9ydGFsSG9zdD10LmZpcnN0KX19LGhvc3RBdHRyczpbMSwibWF0LXRhYi1ib2R5Il0sZmVhdHVyZXM6W2dtXSxkZWNsczozLHZhcnM6Nixjb25zdHM6W1siY2RrU2Nyb2xsYWJsZSIsIiIsMSwibWF0LXRhYi1ib2R5LWNvbnRlbnQiXSxbImNvbnRlbnQiLCIiXSxbIm1hdFRhYkJvZHlIb3N0IiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihPdSgwLCJkaXYiLDAsMSksTnUoIkB0cmFuc2xhdGVUYWIuc3RhcnQiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLl9vblRyYW5zbGF0ZVRhYlN0YXJ0ZWQoZSl9KSkoIkB0cmFuc2xhdGVUYWIuZG9uZSIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4uX3RyYW5zbGF0ZVRhYkNvbXBsZXRlLm5leHQoZSl9KSksV20oMixHTCwwLDAsIm5nLXRlbXBsYXRlIiwyKSxQdSgpKSwyJmUmJnZ1KCJAdHJhbnNsYXRlVGFiIixoYigzLHFMLG4uX3Bvc2l0aW9uLGdiKDEsWUwsbi5hbmltYXRpb25EdXJhdGlvbikpKX0sZGlyZWN0aXZlczpbYkJdLHN0eWxlczpbIi5tYXQtdGFiLWJvZHktY29udGVudHtoZWlnaHQ6MTAwJTtvdmVyZmxvdzphdXRvfS5tYXQtdGFiLWdyb3VwLWR5bmFtaWMtaGVpZ2h0IC5tYXQtdGFiLWJvZHktY29udGVudHtvdmVyZmxvdzpoaWRkZW59XG4iXSxlbmNhcHN1bGF0aW9uOjIsZGF0YTp7YW5pbWF0aW9uOltoQi50cmFuc2xhdGVUYWJdfX0pLF9CLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6Y2h9LHt0eXBlOk16LGRlY29yYXRvcnM6W3t0eXBlOl9zfV19LHt0eXBlOkhofV0sX0IucHJvcERlY29yYXRvcnM9e19wb3J0YWxIb3N0Olt7dHlwZTpGcixhcmdzOltnRl19XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihfQixbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJtYXQtdGFiLWJvZHkiLHRlbXBsYXRlOic8ZGl2IGNsYXNzPSJtYXQtdGFiLWJvZHktY29udGVudCIgI2NvbnRlbnRcbiAgICAgW0B0cmFuc2xhdGVUYWJdPSJ7XG4gICAgICAgIHZhbHVlOiBfcG9zaXRpb24sXG4gICAgICAgIHBhcmFtczoge2FuaW1hdGlvbkR1cmF0aW9uOiBhbmltYXRpb25EdXJhdGlvbn1cbiAgICAgfSJcbiAgICAgKEB0cmFuc2xhdGVUYWIuc3RhcnQpPSJfb25UcmFuc2xhdGVUYWJTdGFydGVkKCRldmVudCkiXG4gICAgIChAdHJhbnNsYXRlVGFiLmRvbmUpPSJfdHJhbnNsYXRlVGFiQ29tcGxldGUubmV4dCgkZXZlbnQpIlxuICAgICBjZGtTY3JvbGxhYmxlPlxuICA8bmctdGVtcGxhdGUgbWF0VGFiQm9keUhvc3Q+PC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxuJyxlbmNhcHN1bGF0aW9uOlBvLk5vbmUsY2hhbmdlRGV0ZWN0aW9uOnhvLkRlZmF1bHQsYW5pbWF0aW9uczpbaEIudHJhbnNsYXRlVGFiXSxob3N0OntjbGFzczoibWF0LXRhYi1ib2R5In0sc3R5bGVzOlsiLm1hdC10YWItYm9keS1jb250ZW50e2hlaWdodDoxMDAlO292ZXJmbG93OmF1dG99Lm1hdC10YWItZ3JvdXAtZHluYW1pYy1oZWlnaHQgLm1hdC10YWItYm9keS1jb250ZW50e292ZXJmbG93OmhpZGRlbn1cbiJdfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Y2h9LHt0eXBlOk16LGRlY29yYXRvcnM6W3t0eXBlOl9zfV19LHt0eXBlOkhofV19KSx7X3BvcnRhbEhvc3Q6W3t0eXBlOkZyLGFyZ3M6W2dGXX1dfSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCBDQj1uZXcgTnIoIk1BVF9UQUJTX0NPTkZJRyIpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9sZXQgTUI9MDtjbGFzcyB2Qnt9Y29uc3QgeEI9SXooenooY2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5fZWxlbWVudFJlZj10fX0pLCJwcmltYXJ5Iik7Y2xhc3MgT0IgZXh0ZW5kcyB4Qntjb25zdHJ1Y3Rvcih0LGUsbixvKXtzdXBlcih0KSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1lLHRoaXMuX2FuaW1hdGlvbk1vZGU9byx0aGlzLl90YWJzPW5ldyBUYix0aGlzLl9pbmRleFRvU2VsZWN0PTAsdGhpcy5fdGFiQm9keVdyYXBwZXJIZWlnaHQ9MCx0aGlzLl90YWJzU3Vic2NyaXB0aW9uPWwuRU1QVFksdGhpcy5fdGFiTGFiZWxTdWJzY3JpcHRpb249bC5FTVBUWSx0aGlzLl9zZWxlY3RlZEluZGV4PW51bGwsdGhpcy5oZWFkZXJQb3NpdGlvbj0iYWJvdmUiLHRoaXMuc2VsZWN0ZWRJbmRleENoYW5nZT1uZXcgQWIsdGhpcy5mb2N1c0NoYW5nZT1uZXcgQWIsdGhpcy5hbmltYXRpb25Eb25lPW5ldyBBYix0aGlzLnNlbGVjdGVkVGFiQ2hhbmdlPW5ldyBBYighMCksdGhpcy5fZ3JvdXBJZD1NQisrLHRoaXMuYW5pbWF0aW9uRHVyYXRpb249biYmbi5hbmltYXRpb25EdXJhdGlvbj9uLmFuaW1hdGlvbkR1cmF0aW9uOiI1MDBtcyIsdGhpcy5kaXNhYmxlUGFnaW5hdGlvbj0hKCFufHxudWxsPT1uLmRpc2FibGVQYWdpbmF0aW9uKSYmbi5kaXNhYmxlUGFnaW5hdGlvbix0aGlzLmR5bmFtaWNIZWlnaHQ9ISghbnx8bnVsbD09bi5keW5hbWljSGVpZ2h0KSYmbi5keW5hbWljSGVpZ2h0fWdldCBkeW5hbWljSGVpZ2h0KCl7cmV0dXJuIHRoaXMuX2R5bmFtaWNIZWlnaHR9c2V0IGR5bmFtaWNIZWlnaHQodCl7dGhpcy5fZHluYW1pY0hlaWdodD1ySSh0KX1nZXQgc2VsZWN0ZWRJbmRleCgpe3JldHVybiB0aGlzLl9zZWxlY3RlZEluZGV4fXNldCBzZWxlY3RlZEluZGV4KHQpe3RoaXMuX2luZGV4VG9TZWxlY3Q9c0kodCxudWxsKX1nZXQgYW5pbWF0aW9uRHVyYXRpb24oKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9uRHVyYXRpb259c2V0IGFuaW1hdGlvbkR1cmF0aW9uKHQpe3RoaXMuX2FuaW1hdGlvbkR1cmF0aW9uPS9eXGQrJC8udGVzdCh0KT90KyJtcyI6dH1nZXQgYmFja2dyb3VuZENvbG9yKCl7cmV0dXJuIHRoaXMuX2JhY2tncm91bmRDb2xvcn1zZXQgYmFja2dyb3VuZENvbG9yKHQpe2NvbnN0IGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O2UuY2xhc3NMaXN0LnJlbW92ZShgbWF0LWJhY2tncm91bmQtJHt0aGlzLmJhY2tncm91bmRDb2xvcn1gKSx0JiZlLmNsYXNzTGlzdC5hZGQoYG1hdC1iYWNrZ3JvdW5kLSR7dH1gKSx0aGlzLl9iYWNrZ3JvdW5kQ29sb3I9dH1uZ0FmdGVyQ29udGVudENoZWNrZWQoKXtjb25zdCB0PXRoaXMuX2luZGV4VG9TZWxlY3Q9dGhpcy5fY2xhbXBUYWJJbmRleCh0aGlzLl9pbmRleFRvU2VsZWN0KTtpZih0aGlzLl9zZWxlY3RlZEluZGV4IT10KXtjb25zdCBlPW51bGw9PXRoaXMuX3NlbGVjdGVkSW5kZXg7aWYoIWUpe3RoaXMuc2VsZWN0ZWRUYWJDaGFuZ2UuZW1pdCh0aGlzLl9jcmVhdGVDaGFuZ2VFdmVudCh0KSk7Y29uc3QgZT10aGlzLl90YWJCb2R5V3JhcHBlci5uYXRpdmVFbGVtZW50O2Uuc3R5bGUubWluSGVpZ2h0PWUuY2xpZW50SGVpZ2h0KyJweCJ9UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKCk9Pnt0aGlzLl90YWJzLmZvckVhY2goKChlLG4pPT5lLmlzQWN0aXZlPW49PT10KSksZXx8KHRoaXMuc2VsZWN0ZWRJbmRleENoYW5nZS5lbWl0KHQpLHRoaXMuX3RhYkJvZHlXcmFwcGVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUubWluSGVpZ2h0PSIiKX0pKX10aGlzLl90YWJzLmZvckVhY2goKChlLG4pPT57ZS5wb3NpdGlvbj1uLXQsbnVsbD09dGhpcy5fc2VsZWN0ZWRJbmRleHx8MCE9ZS5wb3NpdGlvbnx8ZS5vcmlnaW58fChlLm9yaWdpbj10LXRoaXMuX3NlbGVjdGVkSW5kZXgpfSkpLHRoaXMuX3NlbGVjdGVkSW5kZXghPT10JiYodGhpcy5fc2VsZWN0ZWRJbmRleD10LHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLl9zdWJzY3JpYmVUb0FsbFRhYkNoYW5nZXMoKSx0aGlzLl9zdWJzY3JpYmVUb1RhYkxhYmVscygpLHRoaXMuX3RhYnNTdWJzY3JpcHRpb249dGhpcy5fdGFicy5jaGFuZ2VzLnN1YnNjcmliZSgoKCk9PntpZih0aGlzLl9jbGFtcFRhYkluZGV4KHRoaXMuX2luZGV4VG9TZWxlY3QpPT09dGhpcy5fc2VsZWN0ZWRJbmRleCl7Y29uc3QgdD10aGlzLl90YWJzLnRvQXJyYXkoKTtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKylpZih0W2VdLmlzQWN0aXZlKXt0aGlzLl9pbmRleFRvU2VsZWN0PXRoaXMuX3NlbGVjdGVkSW5kZXg9ZTticmVha319dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KSl9X3N1YnNjcmliZVRvQWxsVGFiQ2hhbmdlcygpe3RoaXMuX2FsbFRhYnMuY2hhbmdlcy5waXBlKGNuKHRoaXMuX2FsbFRhYnMpKS5zdWJzY3JpYmUoKHQ9Pnt0aGlzLl90YWJzLnJlc2V0KHQuZmlsdGVyKCh0PT50Ll9jbG9zZXN0VGFiR3JvdXA9PT10aGlzKSkpLHRoaXMuX3RhYnMubm90aWZ5T25DaGFuZ2VzKCl9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLl90YWJzLmRlc3Ryb3koKSx0aGlzLl90YWJzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fdGFiTGFiZWxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1yZWFsaWduSW5rQmFyKCl7dGhpcy5fdGFiSGVhZGVyJiZ0aGlzLl90YWJIZWFkZXIuX2FsaWduSW5rQmFyVG9TZWxlY3RlZFRhYigpfV9mb2N1c0NoYW5nZWQodCl7dGhpcy5mb2N1c0NoYW5nZS5lbWl0KHRoaXMuX2NyZWF0ZUNoYW5nZUV2ZW50KHQpKX1fY3JlYXRlQ2hhbmdlRXZlbnQodCl7Y29uc3QgZT1uZXcgdkI7cmV0dXJuIGUuaW5kZXg9dCx0aGlzLl90YWJzJiZ0aGlzLl90YWJzLmxlbmd0aCYmKGUudGFiPXRoaXMuX3RhYnMudG9BcnJheSgpW3RdKSxlfV9zdWJzY3JpYmVUb1RhYkxhYmVscygpe3RoaXMuX3RhYkxhYmVsU3Vic2NyaXB0aW9uJiZ0aGlzLl90YWJMYWJlbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3RhYkxhYmVsU3Vic2NyaXB0aW9uPVd0KC4uLnRoaXMuX3RhYnMubWFwKCh0PT50Ll9zdGF0ZUNoYW5nZXMpKSkuc3Vic2NyaWJlKCgoKT0+dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpKX1fY2xhbXBUYWJJbmRleCh0KXtyZXR1cm4gTWF0aC5taW4odGhpcy5fdGFicy5sZW5ndGgtMSxNYXRoLm1heCh0fHwwLDApKX1fZ2V0VGFiTGFiZWxJZCh0KXtyZXR1cm5gbWF0LXRhYi1sYWJlbC0ke3RoaXMuX2dyb3VwSWR9LSR7dH1gfV9nZXRUYWJDb250ZW50SWQodCl7cmV0dXJuYG1hdC10YWItY29udGVudC0ke3RoaXMuX2dyb3VwSWR9LSR7dH1gfV9zZXRUYWJCb2R5V3JhcHBlckhlaWdodCh0KXtpZighdGhpcy5fZHluYW1pY0hlaWdodHx8IXRoaXMuX3RhYkJvZHlXcmFwcGVySGVpZ2h0KXJldHVybjtjb25zdCBlPXRoaXMuX3RhYkJvZHlXcmFwcGVyLm5hdGl2ZUVsZW1lbnQ7ZS5zdHlsZS5oZWlnaHQ9dGhpcy5fdGFiQm9keVdyYXBwZXJIZWlnaHQrInB4Iix0aGlzLl90YWJCb2R5V3JhcHBlci5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCYmKGUuc3R5bGUuaGVpZ2h0PXQrInB4Iil9X3JlbW92ZVRhYkJvZHlXcmFwcGVySGVpZ2h0KCl7Y29uc3QgdD10aGlzLl90YWJCb2R5V3JhcHBlci5uYXRpdmVFbGVtZW50O3RoaXMuX3RhYkJvZHlXcmFwcGVySGVpZ2h0PXQuY2xpZW50SGVpZ2h0LHQuc3R5bGUuaGVpZ2h0PSIiLHRoaXMuYW5pbWF0aW9uRG9uZS5lbWl0KCl9X2hhbmRsZUNsaWNrKHQsZSxuKXt0LmRpc2FibGVkfHwodGhpcy5zZWxlY3RlZEluZGV4PWUuZm9jdXNJbmRleD1uKX1fZ2V0VGFiSW5kZXgodCxlKXtyZXR1cm4gdC5kaXNhYmxlZD9udWxsOnRoaXMuc2VsZWN0ZWRJbmRleD09PWU/MDotMX1fdGFiRm9jdXNDaGFuZ2VkKHQsZSl7dCYmKHRoaXMuX3RhYkhlYWRlci5mb2N1c0luZGV4PWUpfX1PQi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8T0IpKE11KGNoKSxNdShIaCksTXUoQ0IsOCksTXUoTncsOCkpfSxPQi7JtWRpcj1Kbyh7dHlwZTpPQixpbnB1dHM6e2hlYWRlclBvc2l0aW9uOiJoZWFkZXJQb3NpdGlvbiIsYW5pbWF0aW9uRHVyYXRpb246ImFuaW1hdGlvbkR1cmF0aW9uIixkaXNhYmxlUGFnaW5hdGlvbjoiZGlzYWJsZVBhZ2luYXRpb24iLGR5bmFtaWNIZWlnaHQ6ImR5bmFtaWNIZWlnaHQiLHNlbGVjdGVkSW5kZXg6InNlbGVjdGVkSW5kZXgiLGJhY2tncm91bmRDb2xvcjoiYmFja2dyb3VuZENvbG9yIn0sb3V0cHV0czp7c2VsZWN0ZWRJbmRleENoYW5nZToic2VsZWN0ZWRJbmRleENoYW5nZSIsZm9jdXNDaGFuZ2U6ImZvY3VzQ2hhbmdlIixhbmltYXRpb25Eb25lOiJhbmltYXRpb25Eb25lIixzZWxlY3RlZFRhYkNoYW5nZToic2VsZWN0ZWRUYWJDaGFuZ2UifSxmZWF0dXJlczpbZ21dfSksT0IuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpjaH0se3R5cGU6SGh9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltDQl19LHt0eXBlOl9zfV19LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbTnddfV19XSxPQi5wcm9wRGVjb3JhdG9ycz17ZHluYW1pY0hlaWdodDpbe3R5cGU6eV99XSxzZWxlY3RlZEluZGV4Olt7dHlwZTp5X31dLGhlYWRlclBvc2l0aW9uOlt7dHlwZTp5X31dLGFuaW1hdGlvbkR1cmF0aW9uOlt7dHlwZTp5X31dLGRpc2FibGVQYWdpbmF0aW9uOlt7dHlwZTp5X31dLGJhY2tncm91bmRDb2xvcjpbe3R5cGU6eV99XSxzZWxlY3RlZEluZGV4Q2hhbmdlOlt7dHlwZTpfX31dLGZvY3VzQ2hhbmdlOlt7dHlwZTpfX31dLGFuaW1hdGlvbkRvbmU6W3t0eXBlOl9ffV0sc2VsZWN0ZWRUYWJDaGFuZ2U6W3t0eXBlOl9ffV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoT0IsW3t0eXBlOmdffV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmNofSx7dHlwZTpIaH0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W0NCXX0se3R5cGU6X3N9XX0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltOd119XX1dfSkse2hlYWRlclBvc2l0aW9uOlt7dHlwZTp5X31dLHNlbGVjdGVkSW5kZXhDaGFuZ2U6W3t0eXBlOl9ffV0sZm9jdXNDaGFuZ2U6W3t0eXBlOl9ffV0sYW5pbWF0aW9uRG9uZTpbe3R5cGU6X199XSxzZWxlY3RlZFRhYkNoYW5nZTpbe3R5cGU6X199XSxhbmltYXRpb25EdXJhdGlvbjpbe3R5cGU6eV99XSxkaXNhYmxlUGFnaW5hdGlvbjpbe3R5cGU6eV99XSxkeW5hbWljSGVpZ2h0Olt7dHlwZTp5X31dLHNlbGVjdGVkSW5kZXg6W3t0eXBlOnlffV0sYmFja2dyb3VuZENvbG9yOlt7dHlwZTp5X31dfSk7Y2xhc3MgUEIgZXh0ZW5kcyBPQntjb25zdHJ1Y3Rvcih0LGUsbixvKXtzdXBlcih0LGUsbixvKX19UEIuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFBCKShNdShjaCksTXUoSGgpLE11KENCLDgpLE11KE53LDgpKX0sUEIuybVjbXA9VW8oe3R5cGU6UEIsc2VsZWN0b3JzOltbIm1hdC10YWItZ3JvdXAiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24gdChlLG4sbyl7aWYoMSZlJiZHYihvLGdCLDEpLDImZSl7bGV0IHQ7VWIodD1ZYigpKSYmKG4uX2FsbFRhYnM9dCl9fSx2aWV3UXVlcnk6ZnVuY3Rpb24gdChlLG4pe2lmKDEmZSYmKFdiKFpMLDEpLFdiKFhMLDEpKSwyJmUpe2xldCB0O1ViKHQ9WWIoKSkmJihuLl90YWJCb2R5V3JhcHBlcj10LmZpcnN0KSxVYih0PVliKCkpJiYobi5fdGFiSGVhZGVyPXQuZmlyc3QpfX0saG9zdEF0dHJzOlsxLCJtYXQtdGFiLWdyb3VwIl0saG9zdFZhcnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezImZSYmYWYoIm1hdC10YWItZ3JvdXAtZHluYW1pYy1oZWlnaHQiLG4uZHluYW1pY0hlaWdodCkoIm1hdC10YWItZ3JvdXAtaW52ZXJ0ZWQtaGVhZGVyIiwiYmVsb3ciPT09bi5oZWFkZXJQb3NpdGlvbil9LGlucHV0czp7Y29sb3I6ImNvbG9yIixkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIn0sZXhwb3J0QXM6WyJtYXRUYWJHcm91cCJdLGZlYXR1cmVzOltpaChbe3Byb3ZpZGU6ZkIsdXNlRXhpc3Rpbmc6UEJ9XSksZ21dLGRlY2xzOjYsdmFyczo3LGNvbnN0czpbWzMsInNlbGVjdGVkSW5kZXgiLCJkaXNhYmxlUmlwcGxlIiwiZGlzYWJsZVBhZ2luYXRpb24iLCJpbmRleEZvY3VzZWQiLCJzZWxlY3RGb2N1c2VkSW5kZXgiXSxbInRhYkhlYWRlciIsIiJdLFsiY2xhc3MiLCJtYXQtdGFiLWxhYmVsIG1hdC1mb2N1cy1pbmRpY2F0b3IiLCJyb2xlIiwidGFiIiwibWF0VGFiTGFiZWxXcmFwcGVyIiwiIiwibWF0LXJpcHBsZSIsIiIsImNka01vbml0b3JFbGVtZW50Rm9jdXMiLCIiLDMsImlkIiwibWF0LXRhYi1sYWJlbC1hY3RpdmUiLCJkaXNhYmxlZCIsIm1hdFJpcHBsZURpc2FibGVkIiwiY2xpY2siLCJjZGtGb2N1c0NoYW5nZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsIm1hdC10YWItYm9keS13cmFwcGVyIl0sWyJ0YWJCb2R5V3JhcHBlciIsIiJdLFsicm9sZSIsInRhYnBhbmVsIiwzLCJpZCIsIm1hdC10YWItYm9keS1hY3RpdmUiLCJjb250ZW50IiwicG9zaXRpb24iLCJvcmlnaW4iLCJhbmltYXRpb25EdXJhdGlvbiIsIl9vbkNlbnRlcmVkIiwiX29uQ2VudGVyaW5nIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbInJvbGUiLCJ0YWIiLCJtYXRUYWJMYWJlbFdyYXBwZXIiLCIiLCJtYXQtcmlwcGxlIiwiIiwiY2RrTW9uaXRvckVsZW1lbnRGb2N1cyIsIiIsMSwibWF0LXRhYi1sYWJlbCIsIm1hdC1mb2N1cy1pbmRpY2F0b3IiLDMsImlkIiwiZGlzYWJsZWQiLCJtYXRSaXBwbGVEaXNhYmxlZCIsImNsaWNrIiwiY2RrRm9jdXNDaGFuZ2UiXSxbMSwibWF0LXRhYi1sYWJlbC1jb250ZW50Il0sWzMsIm5nSWYiXSxbMywiY2RrUG9ydGFsT3V0bGV0Il0sWyJyb2xlIiwidGFicGFuZWwiLDMsImlkIiwiY29udGVudCIsInBvc2l0aW9uIiwib3JpZ2luIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJfb25DZW50ZXJlZCIsIl9vbkNlbnRlcmluZyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoT3UoMCwibWF0LXRhYi1oZWFkZXIiLDAsMSksTnUoImluZGV4Rm9jdXNlZCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4uX2ZvY3VzQ2hhbmdlZChlKX0pKSgic2VsZWN0Rm9jdXNlZEluZGV4IiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5zZWxlY3RlZEluZGV4PWV9KSksV20oMiwkTCw0LDE0LCJkaXYiLDIpLFB1KCksT3UoMywiZGl2IiwzLDQpLFdtKDUsdEIsMSw4LCJtYXQtdGFiLWJvZHkiLDUpLFB1KCkpLDImZSYmKHZ1KCJzZWxlY3RlZEluZGV4IixuLnNlbGVjdGVkSW5kZXh8fDApKCJkaXNhYmxlUmlwcGxlIixuLmRpc2FibGVSaXBwbGUpKCJkaXNhYmxlUGFnaW5hdGlvbiIsbi5kaXNhYmxlUGFnaW5hdGlvbiksSmMoMiksdnUoIm5nRm9yT2YiLG4uX3RhYnMpLEpjKDEpLGFmKCJfbWF0LWFuaW1hdGlvbi1ub29wYWJsZSIsIk5vb3BBbmltYXRpb25zIj09PW4uX2FuaW1hdGlvbk1vZGUpLEpjKDIpLHZ1KCJuZ0Zvck9mIixuLl90YWJzKSl9LGRpcmVjdGl2ZXM6ZnVuY3Rpb24oKXtyZXR1cm5bQUIsb3Ysa0IscEgsdXosYXYsZ0YsX0JdfSxzdHlsZXM6WyIubWF0LXRhYi1ncm91cHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5tYXQtdGFiLWdyb3VwLm1hdC10YWItZ3JvdXAtaW52ZXJ0ZWQtaGVhZGVye2ZsZXgtZGlyZWN0aW9uOmNvbHVtbi1yZXZlcnNlfS5tYXQtdGFiLWxhYmVse2hlaWdodDo0OHB4O3BhZGRpbmc6MCAyNHB4O2N1cnNvcjpwb2ludGVyO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvcGFjaXR5Oi42O21pbi13aWR0aDoxNjBweDt0ZXh0LWFsaWduOmNlbnRlcjtkaXNwbGF5OmlubGluZS1mbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO3doaXRlLXNwYWNlOm5vd3JhcDtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXRhYi1sYWJlbDpmb2N1c3tvdXRsaW5lOm5vbmV9Lm1hdC10YWItbGFiZWw6Zm9jdXM6bm90KC5tYXQtdGFiLWRpc2FibGVkKXtvcGFjaXR5OjF9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXRhYi1sYWJlbDpmb2N1c3tvdXRsaW5lOmRvdHRlZCAycHg7b3V0bGluZS1vZmZzZXQ6LTJweH0ubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZHtvcGFjaXR5Oi41fS5tYXQtdGFiLWxhYmVsIC5tYXQtdGFiLWxhYmVsLWNvbnRlbnR7ZGlzcGxheTppbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXB9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXRhYi1sYWJlbHtvcGFjaXR5OjF9QG1lZGlhKG1heC13aWR0aDogNTk5cHgpey5tYXQtdGFiLWxhYmVse3BhZGRpbmc6MCAxMnB4fX1AbWVkaWEobWF4LXdpZHRoOiA5NTlweCl7Lm1hdC10YWItbGFiZWx7cGFkZGluZzowIDEycHh9fS5tYXQtdGFiLWdyb3VwW21hdC1zdHJldGNoLXRhYnNdPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbHtmbGV4LWJhc2lzOjA7ZmxleC1ncm93OjF9Lm1hdC10YWItYm9keS13cmFwcGVye3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbjtkaXNwbGF5OmZsZXg7dHJhbnNpdGlvbjpoZWlnaHQgNTAwbXMgY3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuMjUsIDEpfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZS5tYXQtdGFiLWJvZHktd3JhcHBlcnt0cmFuc2l0aW9uOm5vbmU7YW5pbWF0aW9uOm5vbmV9Lm1hdC10YWItYm9keXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmJsb2NrO292ZXJmbG93OmhpZGRlbjtmbGV4LWJhc2lzOjEwMCV9Lm1hdC10YWItYm9keS5tYXQtdGFiLWJvZHktYWN0aXZle3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93LXg6aGlkZGVuO292ZXJmbG93LXk6YXV0bzt6LWluZGV4OjE7ZmxleC1ncm93OjF9Lm1hdC10YWItZ3JvdXAubWF0LXRhYi1ncm91cC1keW5hbWljLWhlaWdodCAubWF0LXRhYi1ib2R5Lm1hdC10YWItYm9keS1hY3RpdmV7b3ZlcmZsb3cteTpoaWRkZW59XG4iXSxlbmNhcHN1bGF0aW9uOjJ9KSxQQi5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmNofSx7dHlwZTpIaH0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W0NCXX0se3R5cGU6X3N9XX0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltOd119XX1dLFBCLnByb3BEZWNvcmF0b3JzPXtfYWxsVGFiczpbe3R5cGU6enIsYXJnczpbZ0Ise2Rlc2NlbmRhbnRzOiEwfV19XSxfdGFiQm9keVdyYXBwZXI6W3t0eXBlOkZyLGFyZ3M6WyJ0YWJCb2R5V3JhcHBlciJdfV0sX3RhYkhlYWRlcjpbe3R5cGU6RnIsYXJnczpbInRhYkhlYWRlciJdfV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoUEIsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoibWF0LXRhYi1ncm91cCIsZXhwb3J0QXM6Im1hdFRhYkdyb3VwIix0ZW1wbGF0ZTonPG1hdC10YWItaGVhZGVyICN0YWJIZWFkZXJcbiAgICAgICAgICAgICAgIFtzZWxlY3RlZEluZGV4XT0ic2VsZWN0ZWRJbmRleCB8fCAwIlxuICAgICAgICAgICAgICAgW2Rpc2FibGVSaXBwbGVdPSJkaXNhYmxlUmlwcGxlIlxuICAgICAgICAgICAgICAgW2Rpc2FibGVQYWdpbmF0aW9uXT0iZGlzYWJsZVBhZ2luYXRpb24iXG4gICAgICAgICAgICAgICAoaW5kZXhGb2N1c2VkKT0iX2ZvY3VzQ2hhbmdlZCgkZXZlbnQpIlxuICAgICAgICAgICAgICAgKHNlbGVjdEZvY3VzZWRJbmRleCk9InNlbGVjdGVkSW5kZXggPSAkZXZlbnQiPlxuICA8ZGl2IGNsYXNzPSJtYXQtdGFiLWxhYmVsIG1hdC1mb2N1cy1pbmRpY2F0b3IiIHJvbGU9InRhYiIgbWF0VGFiTGFiZWxXcmFwcGVyIG1hdC1yaXBwbGUgY2RrTW9uaXRvckVsZW1lbnRGb2N1c1xuICAgICAgICpuZ0Zvcj0ibGV0IHRhYiBvZiBfdGFiczsgbGV0IGkgPSBpbmRleCJcbiAgICAgICBbaWRdPSJfZ2V0VGFiTGFiZWxJZChpKSJcbiAgICAgICBbYXR0ci50YWJJbmRleF09Il9nZXRUYWJJbmRleCh0YWIsIGkpIlxuICAgICAgIFthdHRyLmFyaWEtcG9zaW5zZXRdPSJpICsgMSJcbiAgICAgICBbYXR0ci5hcmlhLXNldHNpemVdPSJfdGFicy5sZW5ndGgiXG4gICAgICAgW2F0dHIuYXJpYS1jb250cm9sc109Il9nZXRUYWJDb250ZW50SWQoaSkiXG4gICAgICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09InNlbGVjdGVkSW5kZXggPT0gaSJcbiAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT0idGFiLmFyaWFMYWJlbCB8fCBudWxsIlxuICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09IighdGFiLmFyaWFMYWJlbCAmJiB0YWIuYXJpYUxhYmVsbGVkYnkpID8gdGFiLmFyaWFMYWJlbGxlZGJ5IDogbnVsbCJcbiAgICAgICBbY2xhc3MubWF0LXRhYi1sYWJlbC1hY3RpdmVdPSJzZWxlY3RlZEluZGV4ID09IGkiXG4gICAgICAgW2Rpc2FibGVkXT0idGFiLmRpc2FibGVkIlxuICAgICAgIFttYXRSaXBwbGVEaXNhYmxlZF09InRhYi5kaXNhYmxlZCB8fCBkaXNhYmxlUmlwcGxlIlxuICAgICAgIChjbGljayk9Il9oYW5kbGVDbGljayh0YWIsIHRhYkhlYWRlciwgaSkiXG4gICAgICAgKGNka0ZvY3VzQ2hhbmdlKT0iX3RhYkZvY3VzQ2hhbmdlZCgkZXZlbnQsIGkpIj5cblxuXG4gICAgPGRpdiBjbGFzcz0ibWF0LXRhYi1sYWJlbC1jb250ZW50Ij5cbiAgICAgIFx4M2MhLS0gSWYgdGhlcmUgaXMgYSBsYWJlbCB0ZW1wbGF0ZSwgdXNlIGl0LiAtLVx4M2VcbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09InRhYi50ZW1wbGF0ZUxhYmVsIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtjZGtQb3J0YWxPdXRsZXRdPSJ0YWIudGVtcGxhdGVMYWJlbCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgIFx4M2MhLS0gSWYgdGhlcmUgaXMgbm90IGEgbGFiZWwgdGVtcGxhdGUsIGZhbGwgYmFjayB0byB0aGUgdGV4dCBsYWJlbC4gLS1ceDNlXG4gICAgICA8bmctdGVtcGxhdGUgW25nSWZdPSIhdGFiLnRlbXBsYXRlTGFiZWwiPnt7dGFiLnRleHRMYWJlbH19PC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L21hdC10YWItaGVhZGVyPlxuXG48ZGl2XG4gIGNsYXNzPSJtYXQtdGFiLWJvZHktd3JhcHBlciJcbiAgW2NsYXNzLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlXT0iX2FuaW1hdGlvbk1vZGUgPT09IFwnTm9vcEFuaW1hdGlvbnNcJyJcbiAgI3RhYkJvZHlXcmFwcGVyPlxuICA8bWF0LXRhYi1ib2R5IHJvbGU9InRhYnBhbmVsIlxuICAgICAgICAgICAgICAgKm5nRm9yPSJsZXQgdGFiIG9mIF90YWJzOyBsZXQgaSA9IGluZGV4IlxuICAgICAgICAgICAgICAgW2lkXT0iX2dldFRhYkNvbnRlbnRJZChpKSJcbiAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09Il9nZXRUYWJMYWJlbElkKGkpIlxuICAgICAgICAgICAgICAgW2NsYXNzLm1hdC10YWItYm9keS1hY3RpdmVdPSJzZWxlY3RlZEluZGV4ID09IGkiXG4gICAgICAgICAgICAgICBbY29udGVudF09InRhYi5jb250ZW50ISJcbiAgICAgICAgICAgICAgIFtwb3NpdGlvbl09InRhYi5wb3NpdGlvbiEiXG4gICAgICAgICAgICAgICBbb3JpZ2luXT0idGFiLm9yaWdpbiJcbiAgICAgICAgICAgICAgIFthbmltYXRpb25EdXJhdGlvbl09ImFuaW1hdGlvbkR1cmF0aW9uIlxuICAgICAgICAgICAgICAgKF9vbkNlbnRlcmVkKT0iX3JlbW92ZVRhYkJvZHlXcmFwcGVySGVpZ2h0KCkiXG4gICAgICAgICAgICAgICAoX29uQ2VudGVyaW5nKT0iX3NldFRhYkJvZHlXcmFwcGVySGVpZ2h0KCRldmVudCkiPlxuICA8L21hdC10YWItYm9keT5cbjwvZGl2PlxuJyxlbmNhcHN1bGF0aW9uOlBvLk5vbmUsY2hhbmdlRGV0ZWN0aW9uOnhvLkRlZmF1bHQsaW5wdXRzOlsiY29sb3IiLCJkaXNhYmxlUmlwcGxlIl0scHJvdmlkZXJzOlt7cHJvdmlkZTpmQix1c2VFeGlzdGluZzpQQn1dLGhvc3Q6e2NsYXNzOiJtYXQtdGFiLWdyb3VwIiwiW2NsYXNzLm1hdC10YWItZ3JvdXAtZHluYW1pYy1oZWlnaHRdIjoiZHluYW1pY0hlaWdodCIsIltjbGFzcy5tYXQtdGFiLWdyb3VwLWludmVydGVkLWhlYWRlcl0iOidoZWFkZXJQb3NpdGlvbiA9PT0gImJlbG93Iid9LHN0eWxlczpbIi5tYXQtdGFiLWdyb3Vwe2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59Lm1hdC10YWItZ3JvdXAubWF0LXRhYi1ncm91cC1pbnZlcnRlZC1oZWFkZXJ7ZmxleC1kaXJlY3Rpb246Y29sdW1uLXJldmVyc2V9Lm1hdC10YWItbGFiZWx7aGVpZ2h0OjQ4cHg7cGFkZGluZzowIDI0cHg7Y3Vyc29yOnBvaW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O29wYWNpdHk6LjY7bWluLXdpZHRoOjE2MHB4O3RleHQtYWxpZ246Y2VudGVyO2Rpc3BsYXk6aW5saW5lLWZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7d2hpdGUtc3BhY2U6bm93cmFwO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtdGFiLWxhYmVsOmZvY3Vze291dGxpbmU6bm9uZX0ubWF0LXRhYi1sYWJlbDpmb2N1czpub3QoLm1hdC10YWItZGlzYWJsZWQpe29wYWNpdHk6MX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtdGFiLWxhYmVsOmZvY3Vze291dGxpbmU6ZG90dGVkIDJweDtvdXRsaW5lLW9mZnNldDotMnB4fS5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHR9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVke29wYWNpdHk6LjV9Lm1hdC10YWItbGFiZWwgLm1hdC10YWItbGFiZWwtY29udGVudHtkaXNwbGF5OmlubGluZS1mbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO3doaXRlLXNwYWNlOm5vd3JhcH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtdGFiLWxhYmVse29wYWNpdHk6MX1AbWVkaWEobWF4LXdpZHRoOiA1OTlweCl7Lm1hdC10YWItbGFiZWx7cGFkZGluZzowIDEycHh9fUBtZWRpYShtYXgtd2lkdGg6IDk1OXB4KXsubWF0LXRhYi1sYWJlbHtwYWRkaW5nOjAgMTJweH19Lm1hdC10YWItZ3JvdXBbbWF0LXN0cmV0Y2gtdGFic10+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVse2ZsZXgtYmFzaXM6MDtmbGV4LWdyb3c6MX0ubWF0LXRhYi1ib2R5LXdyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6aGlkZGVuO2Rpc3BsYXk6ZmxleDt0cmFuc2l0aW9uOmhlaWdodCA1MDBtcyBjdWJpYy1iZXppZXIoMC4zNSwgMCwgMC4yNSwgMSl9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlLm1hdC10YWItYm9keS13cmFwcGVye3RyYW5zaXRpb246bm9uZTthbmltYXRpb246bm9uZX0ubWF0LXRhYi1ib2R5e3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO2Rpc3BsYXk6YmxvY2s7b3ZlcmZsb3c6aGlkZGVuO2ZsZXgtYmFzaXM6MTAwJX0ubWF0LXRhYi1ib2R5Lm1hdC10YWItYm9keS1hY3RpdmV7cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3cteDpoaWRkZW47b3ZlcmZsb3cteTphdXRvO3otaW5kZXg6MTtmbGV4LWdyb3c6MX0ubWF0LXRhYi1ncm91cC5tYXQtdGFiLWdyb3VwLWR5bmFtaWMtaGVpZ2h0IC5tYXQtdGFiLWJvZHkubWF0LXRhYi1ib2R5LWFjdGl2ZXtvdmVyZmxvdy15OmhpZGRlbn1cbiJdfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Y2h9LHt0eXBlOkhofSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbQ0JdfSx7dHlwZTpfc31dfSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W053XX1dfV19KSx7X2FsbFRhYnM6W3t0eXBlOnpyLGFyZ3M6W2dCLHtkZXNjZW5kYW50czohMH1dfV0sX3RhYkJvZHlXcmFwcGVyOlt7dHlwZTpGcixhcmdzOlsidGFiQm9keVdyYXBwZXIiXX1dLF90YWJIZWFkZXI6W3t0eXBlOkZyLGFyZ3M6WyJ0YWJIZWFkZXIiXX1dfSk7Y29uc3Qgd0I9TnooCi8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzc3t9KTtjbGFzcyBrQiBleHRlbmRzIHdCe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5lbGVtZW50UmVmPXR9Zm9jdXMoKXt0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpfWdldE9mZnNldExlZnQoKXtyZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0TGVmdH1nZXRPZmZzZXRXaWR0aCgpe3JldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aH19a0IuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGtCKShNdShjaCkpfSxrQi7JtWRpcj1Kbyh7dHlwZTprQixzZWxlY3RvcnM6W1siIiwibWF0VGFiTGFiZWxXcmFwcGVyIiwiIl1dLGhvc3RWYXJzOjMsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsyJmUmJihObSgiYXJpYS1kaXNhYmxlZCIsISFuLmRpc2FibGVkKSxhZigibWF0LXRhYi1kaXNhYmxlZCIsbi5kaXNhYmxlZCkpfSxpbnB1dHM6e2Rpc2FibGVkOiJkaXNhYmxlZCJ9LGZlYXR1cmVzOltnbV19KSxrQi5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmNofV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihrQixbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJbbWF0VGFiTGFiZWxXcmFwcGVyXSIsaW5wdXRzOlsiZGlzYWJsZWQiXSxob3N0OnsiW2NsYXNzLm1hdC10YWItZGlzYWJsZWRdIjoiZGlzYWJsZWQiLCJbYXR0ci5hcmlhLWRpc2FibGVkXSI6IiEhZGlzYWJsZWQifX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmNofV19KSxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IFNCPXZJKHtwYXNzaXZlOiEwfSk7Y2xhc3MgREJ7Y29uc3RydWN0b3IodCxlLG4sbyxpLGEscil7dGhpcy5fZWxlbWVudFJlZj10LHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPWUsdGhpcy5fdmlld3BvcnRSdWxlcj1uLHRoaXMuX2Rpcj1vLHRoaXMuX25nWm9uZT1pLHRoaXMuX3BsYXRmb3JtPWEsdGhpcy5fYW5pbWF0aW9uTW9kZT1yLHRoaXMuX3Njcm9sbERpc3RhbmNlPTAsdGhpcy5fc2VsZWN0ZWRJbmRleENoYW5nZWQ9ITEsdGhpcy5fZGVzdHJveWVkPW5ldyB4LHRoaXMuX3Nob3dQYWdpbmF0aW9uQ29udHJvbHM9ITEsdGhpcy5fZGlzYWJsZVNjcm9sbEFmdGVyPSEwLHRoaXMuX2Rpc2FibGVTY3JvbGxCZWZvcmU9ITAsdGhpcy5fc3RvcFNjcm9sbGluZz1uZXcgeCx0aGlzLmRpc2FibGVQYWdpbmF0aW9uPSExLHRoaXMuX3NlbGVjdGVkSW5kZXg9MCx0aGlzLnNlbGVjdEZvY3VzZWRJbmRleD1uZXcgQWIsdGhpcy5pbmRleEZvY3VzZWQ9bmV3IEFiLGkucnVuT3V0c2lkZUFuZ3VsYXIoKCgpPT57VnQodC5uYXRpdmVFbGVtZW50LCJtb3VzZWxlYXZlIikucGlwZSh1bih0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5fc3RvcEludGVydmFsKCl9KSl9KSl9Z2V0IHNlbGVjdGVkSW5kZXgoKXtyZXR1cm4gdGhpcy5fc2VsZWN0ZWRJbmRleH1zZXQgc2VsZWN0ZWRJbmRleCh0KXt0PXNJKHQpLHRoaXMuX3NlbGVjdGVkSW5kZXghPXQmJih0aGlzLl9zZWxlY3RlZEluZGV4Q2hhbmdlZD0hMCx0aGlzLl9zZWxlY3RlZEluZGV4PXQsdGhpcy5fa2V5TWFuYWdlciYmdGhpcy5fa2V5TWFuYWdlci51cGRhdGVBY3RpdmVJdGVtKHQpKX1uZ0FmdGVyVmlld0luaXQoKXtWdCh0aGlzLl9wcmV2aW91c1BhZ2luYXRvci5uYXRpdmVFbGVtZW50LCJ0b3VjaHN0YXJ0IixTQikucGlwZSh1bih0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5faGFuZGxlUGFnaW5hdG9yUHJlc3MoImJlZm9yZSIpfSkpLFZ0KHRoaXMuX25leHRQYWdpbmF0b3IubmF0aXZlRWxlbWVudCwidG91Y2hzdGFydCIsU0IpLnBpcGUodW4odGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgoKT0+e3RoaXMuX2hhbmRsZVBhZ2luYXRvclByZXNzKCJhZnRlciIpfSkpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe2NvbnN0IHQ9dGhpcy5fZGlyP3RoaXMuX2Rpci5jaGFuZ2U6WihudWxsKSxlPXRoaXMuX3ZpZXdwb3J0UnVsZXIuY2hhbmdlKDE1MCksbj0oKT0+e3RoaXMudXBkYXRlUGFnaW5hdGlvbigpLHRoaXMuX2FsaWduSW5rQmFyVG9TZWxlY3RlZFRhYigpfTt0aGlzLl9rZXlNYW5hZ2VyPW5ldyBWSSh0aGlzLl9pdGVtcykud2l0aEhvcml6b250YWxPcmllbnRhdGlvbih0aGlzLl9nZXRMYXlvdXREaXJlY3Rpb24oKSkud2l0aEhvbWVBbmRFbmQoKS53aXRoV3JhcCgpLHRoaXMuX2tleU1hbmFnZXIudXBkYXRlQWN0aXZlSXRlbSh0aGlzLl9zZWxlY3RlZEluZGV4KSwidW5kZWZpbmVkIiE9dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZT9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUobik6bigpLFd0KHQsZSx0aGlzLl9pdGVtcy5jaGFuZ2VzKS5waXBlKHVuKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKCk9Pnt0aGlzLl9uZ1pvbmUucnVuKCgoKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbihuKSkpLHRoaXMuX2tleU1hbmFnZXIud2l0aEhvcml6b250YWxPcmllbnRhdGlvbih0aGlzLl9nZXRMYXlvdXREaXJlY3Rpb24oKSl9KSksdGhpcy5fa2V5TWFuYWdlci5jaGFuZ2UucGlwZSh1bih0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKHQ9Pnt0aGlzLmluZGV4Rm9jdXNlZC5lbWl0KHQpLHRoaXMuX3NldFRhYkZvY3VzKHQpfSkpfW5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpe3RoaXMuX3RhYkxhYmVsQ291bnQhPXRoaXMuX2l0ZW1zLmxlbmd0aCYmKHRoaXMudXBkYXRlUGFnaW5hdGlvbigpLHRoaXMuX3RhYkxhYmVsQ291bnQ9dGhpcy5faXRlbXMubGVuZ3RoLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKSx0aGlzLl9zZWxlY3RlZEluZGV4Q2hhbmdlZCYmKHRoaXMuX3Njcm9sbFRvTGFiZWwodGhpcy5fc2VsZWN0ZWRJbmRleCksdGhpcy5fY2hlY2tTY3JvbGxpbmdDb250cm9scygpLHRoaXMuX2FsaWduSW5rQmFyVG9TZWxlY3RlZFRhYigpLHRoaXMuX3NlbGVjdGVkSW5kZXhDaGFuZ2VkPSExLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKSx0aGlzLl9zY3JvbGxEaXN0YW5jZUNoYW5nZWQmJih0aGlzLl91cGRhdGVUYWJTY3JvbGxQb3NpdGlvbigpLHRoaXMuX3Njcm9sbERpc3RhbmNlQ2hhbmdlZD0hMSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9kZXN0cm95ZWQubmV4dCgpLHRoaXMuX2Rlc3Ryb3llZC5jb21wbGV0ZSgpLHRoaXMuX3N0b3BTY3JvbGxpbmcuY29tcGxldGUoKX1faGFuZGxlS2V5ZG93bih0KXtpZighYUkodCkpc3dpdGNoKHQua2V5Q29kZSl7Y2FzZSB0STpjYXNlIG5JOnRoaXMuZm9jdXNJbmRleCE9PXRoaXMuc2VsZWN0ZWRJbmRleCYmKHRoaXMuc2VsZWN0Rm9jdXNlZEluZGV4LmVtaXQodGhpcy5mb2N1c0luZGV4KSx0aGlzLl9pdGVtU2VsZWN0ZWQodCkpO2JyZWFrO2RlZmF1bHQ6dGhpcy5fa2V5TWFuYWdlci5vbktleWRvd24odCl9fV9vbkNvbnRlbnRDaGFuZ2VzKCl7Y29uc3QgdD10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudGV4dENvbnRlbnQ7dCE9PXRoaXMuX2N1cnJlbnRUZXh0Q29udGVudCYmKHRoaXMuX2N1cnJlbnRUZXh0Q29udGVudD10fHwiIix0aGlzLl9uZ1pvbmUucnVuKCgoKT0+e3RoaXMudXBkYXRlUGFnaW5hdGlvbigpLHRoaXMuX2FsaWduSW5rQmFyVG9TZWxlY3RlZFRhYigpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSkpKX11cGRhdGVQYWdpbmF0aW9uKCl7dGhpcy5fY2hlY2tQYWdpbmF0aW9uRW5hYmxlZCgpLHRoaXMuX2NoZWNrU2Nyb2xsaW5nQ29udHJvbHMoKSx0aGlzLl91cGRhdGVUYWJTY3JvbGxQb3NpdGlvbigpfWdldCBmb2N1c0luZGV4KCl7cmV0dXJuIHRoaXMuX2tleU1hbmFnZXI/dGhpcy5fa2V5TWFuYWdlci5hY3RpdmVJdGVtSW5kZXg6MH1zZXQgZm9jdXNJbmRleCh0KXt0aGlzLl9pc1ZhbGlkSW5kZXgodCkmJnRoaXMuZm9jdXNJbmRleCE9PXQmJnRoaXMuX2tleU1hbmFnZXImJnRoaXMuX2tleU1hbmFnZXIuc2V0QWN0aXZlSXRlbSh0KX1faXNWYWxpZEluZGV4KHQpe2lmKCF0aGlzLl9pdGVtcylyZXR1cm4hMDtjb25zdCBlPXRoaXMuX2l0ZW1zP3RoaXMuX2l0ZW1zLnRvQXJyYXkoKVt0XTpudWxsO3JldHVybiEhZSYmIWUuZGlzYWJsZWR9X3NldFRhYkZvY3VzKHQpe2lmKHRoaXMuX3Nob3dQYWdpbmF0aW9uQ29udHJvbHMmJnRoaXMuX3Njcm9sbFRvTGFiZWwodCksdGhpcy5faXRlbXMmJnRoaXMuX2l0ZW1zLmxlbmd0aCl7dGhpcy5faXRlbXMudG9BcnJheSgpW3RdLmZvY3VzKCk7Y29uc3QgZT10aGlzLl90YWJMaXN0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsbj10aGlzLl9nZXRMYXlvdXREaXJlY3Rpb24oKTtlLnNjcm9sbExlZnQ9Imx0ciI9PW4/MDplLnNjcm9sbFdpZHRoLWUub2Zmc2V0V2lkdGh9fV9nZXRMYXlvdXREaXJlY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGlyJiYicnRsIj09PXRoaXMuX2Rpci52YWx1ZT8icnRsIjoibHRyIn1fdXBkYXRlVGFiU2Nyb2xsUG9zaXRpb24oKXtpZih0aGlzLmRpc2FibGVQYWdpbmF0aW9uKXJldHVybjtjb25zdCB0PXRoaXMuc2Nyb2xsRGlzdGFuY2UsZT0ibHRyIj09PXRoaXMuX2dldExheW91dERpcmVjdGlvbigpPy10OnQ7dGhpcy5fdGFiTGlzdC5uYXRpdmVFbGVtZW50LnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlWCgke01hdGgucm91bmQoZSl9cHgpYCwodGhpcy5fcGxhdGZvcm0uVFJJREVOVHx8dGhpcy5fcGxhdGZvcm0uRURHRSkmJih0aGlzLl90YWJMaXN0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdD0wKX1nZXQgc2Nyb2xsRGlzdGFuY2UoKXtyZXR1cm4gdGhpcy5fc2Nyb2xsRGlzdGFuY2V9c2V0IHNjcm9sbERpc3RhbmNlKHQpe3RoaXMuX3Njcm9sbFRvKHQpfV9zY3JvbGxIZWFkZXIodCl7cmV0dXJuIHRoaXMuX3Njcm9sbFRvKHRoaXMuX3Njcm9sbERpc3RhbmNlKygiYmVmb3JlIj09dD8tMToxKSp0aGlzLl90YWJMaXN0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGgvMyl9X2hhbmRsZVBhZ2luYXRvckNsaWNrKHQpe3RoaXMuX3N0b3BJbnRlcnZhbCgpLHRoaXMuX3Njcm9sbEhlYWRlcih0KX1fc2Nyb2xsVG9MYWJlbCh0KXtpZih0aGlzLmRpc2FibGVQYWdpbmF0aW9uKXJldHVybjtjb25zdCBlPXRoaXMuX2l0ZW1zP3RoaXMuX2l0ZW1zLnRvQXJyYXkoKVt0XTpudWxsO2lmKCFlKXJldHVybjtjb25zdCBuPXRoaXMuX3RhYkxpc3RDb250YWluZXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCx7b2Zmc2V0TGVmdDpvLG9mZnNldFdpZHRoOml9PWUuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O2xldCBhLHI7Imx0ciI9PXRoaXMuX2dldExheW91dERpcmVjdGlvbigpPyhhPW8scj1hK2kpOihyPXRoaXMuX3RhYkxpc3QubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aC1vLGE9ci1pKTtjb25zdCBzPXRoaXMuc2Nyb2xsRGlzdGFuY2UsbD10aGlzLnNjcm9sbERpc3RhbmNlK247YTxzP3RoaXMuc2Nyb2xsRGlzdGFuY2UtPXMtYSs2MDpyPmwmJih0aGlzLnNjcm9sbERpc3RhbmNlKz1yLWwrNjApfV9jaGVja1BhZ2luYXRpb25FbmFibGVkKCl7aWYodGhpcy5kaXNhYmxlUGFnaW5hdGlvbil0aGlzLl9zaG93UGFnaW5hdGlvbkNvbnRyb2xzPSExO2Vsc2V7Y29uc3QgdD10aGlzLl90YWJMaXN0Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsV2lkdGg+dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO3R8fCh0aGlzLnNjcm9sbERpc3RhbmNlPTApLHQhPT10aGlzLl9zaG93UGFnaW5hdGlvbkNvbnRyb2xzJiZ0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSx0aGlzLl9zaG93UGFnaW5hdGlvbkNvbnRyb2xzPXR9fV9jaGVja1Njcm9sbGluZ0NvbnRyb2xzKCl7dGhpcy5kaXNhYmxlUGFnaW5hdGlvbj90aGlzLl9kaXNhYmxlU2Nyb2xsQWZ0ZXI9dGhpcy5fZGlzYWJsZVNjcm9sbEJlZm9yZT0hMDoodGhpcy5fZGlzYWJsZVNjcm9sbEJlZm9yZT0wPT10aGlzLnNjcm9sbERpc3RhbmNlLHRoaXMuX2Rpc2FibGVTY3JvbGxBZnRlcj10aGlzLnNjcm9sbERpc3RhbmNlPT10aGlzLl9nZXRNYXhTY3JvbGxEaXN0YW5jZSgpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX1fZ2V0TWF4U2Nyb2xsRGlzdGFuY2UoKXtyZXR1cm4gdGhpcy5fdGFiTGlzdC5uYXRpdmVFbGVtZW50LnNjcm9sbFdpZHRoLXRoaXMuX3RhYkxpc3RDb250YWluZXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aHx8MH1fYWxpZ25JbmtCYXJUb1NlbGVjdGVkVGFiKCl7Y29uc3QgdD10aGlzLl9pdGVtcyYmdGhpcy5faXRlbXMubGVuZ3RoP3RoaXMuX2l0ZW1zLnRvQXJyYXkoKVt0aGlzLnNlbGVjdGVkSW5kZXhdOm51bGwsZT10P3QuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Om51bGw7ZT90aGlzLl9pbmtCYXIuYWxpZ25Ub0VsZW1lbnQoZSk6dGhpcy5faW5rQmFyLmhpZGUoKX1fc3RvcEludGVydmFsKCl7dGhpcy5fc3RvcFNjcm9sbGluZy5uZXh0KCl9X2hhbmRsZVBhZ2luYXRvclByZXNzKHQsZSl7ZSYmbnVsbCE9ZS5idXR0b24mJjAhPT1lLmJ1dHRvbnx8KHRoaXMuX3N0b3BJbnRlcnZhbCgpLFp0KDY1MCwxMDApLnBpcGUodW4oV3QodGhpcy5fc3RvcFNjcm9sbGluZyx0aGlzLl9kZXN0cm95ZWQpKSkuc3Vic2NyaWJlKCgoKT0+e2NvbnN0e21heFNjcm9sbERpc3RhbmNlOmUsZGlzdGFuY2U6bn09dGhpcy5fc2Nyb2xsSGVhZGVyKHQpOygwPT09bnx8bj49ZSkmJnRoaXMuX3N0b3BJbnRlcnZhbCgpfSkpKX1fc2Nyb2xsVG8odCl7aWYodGhpcy5kaXNhYmxlUGFnaW5hdGlvbilyZXR1cm57bWF4U2Nyb2xsRGlzdGFuY2U6MCxkaXN0YW5jZTowfTtjb25zdCBlPXRoaXMuX2dldE1heFNjcm9sbERpc3RhbmNlKCk7cmV0dXJuIHRoaXMuX3Njcm9sbERpc3RhbmNlPU1hdGgubWF4KDAsTWF0aC5taW4oZSx0KSksdGhpcy5fc2Nyb2xsRGlzdGFuY2VDaGFuZ2VkPSEwLHRoaXMuX2NoZWNrU2Nyb2xsaW5nQ29udHJvbHMoKSx7bWF4U2Nyb2xsRGlzdGFuY2U6ZSxkaXN0YW5jZTp0aGlzLl9zY3JvbGxEaXN0YW5jZX19fURCLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxEQikoTXUoY2gpLE11KEhoKSxNdShRSCksTXUoTXosOCksTXUodEMpLE11KGZJKSxNdShOdyw4KSl9LERCLsm1ZGlyPUpvKHt0eXBlOkRCLGlucHV0czp7ZGlzYWJsZVBhZ2luYXRpb246ImRpc2FibGVQYWdpbmF0aW9uIn19KSxEQi5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmNofSx7dHlwZTpIaH0se3R5cGU6UUh9LHt0eXBlOk16LGRlY29yYXRvcnM6W3t0eXBlOl9zfV19LHt0eXBlOnRDfSx7dHlwZTpmSX0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltOd119XX1dLERCLnByb3BEZWNvcmF0b3JzPXtkaXNhYmxlUGFnaW5hdGlvbjpbe3R5cGU6eV99XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihEQixbe3R5cGU6Z199XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Y2h9LHt0eXBlOkhofSx7dHlwZTpRSH0se3R5cGU6TXosZGVjb3JhdG9yczpbe3R5cGU6X3N9XX0se3R5cGU6dEN9LHt0eXBlOmZJfSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W053XX1dfV19KSx7ZGlzYWJsZVBhZ2luYXRpb246W3t0eXBlOnlffV19KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIEVCIGV4dGVuZHMgREJ7Y29uc3RydWN0b3IodCxlLG4sbyxpLGEscil7c3VwZXIodCxlLG4sbyxpLGEsciksdGhpcy5fZGlzYWJsZVJpcHBsZT0hMX1nZXQgZGlzYWJsZVJpcHBsZSgpe3JldHVybiB0aGlzLl9kaXNhYmxlUmlwcGxlfXNldCBkaXNhYmxlUmlwcGxlKHQpe3RoaXMuX2Rpc2FibGVSaXBwbGU9ckkodCl9X2l0ZW1TZWxlY3RlZCh0KXt0LnByZXZlbnREZWZhdWx0KCl9fUVCLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxFQikoTXUoY2gpLE11KEhoKSxNdShRSCksTXUoTXosOCksTXUodEMpLE11KGZJKSxNdShOdyw4KSl9LEVCLsm1ZGlyPUpvKHt0eXBlOkVCLGlucHV0czp7ZGlzYWJsZVJpcHBsZToiZGlzYWJsZVJpcHBsZSJ9LGZlYXR1cmVzOltnbV19KSxFQi5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmNofSx7dHlwZTpIaH0se3R5cGU6UUh9LHt0eXBlOk16LGRlY29yYXRvcnM6W3t0eXBlOl9zfV19LHt0eXBlOnRDfSx7dHlwZTpmSX0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltOd119XX1dLEVCLnByb3BEZWNvcmF0b3JzPXtkaXNhYmxlUmlwcGxlOlt7dHlwZTp5X31dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEVCLFt7dHlwZTpnX31dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpjaH0se3R5cGU6SGh9LHt0eXBlOlFIfSx7dHlwZTpNeixkZWNvcmF0b3JzOlt7dHlwZTpfc31dfSx7dHlwZTp0Q30se3R5cGU6Zkl9LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbTnddfV19XX0pLHtkaXNhYmxlUmlwcGxlOlt7dHlwZTp5X31dfSk7Y2xhc3MgQUIgZXh0ZW5kcyBFQntjb25zdHJ1Y3Rvcih0LGUsbixvLGksYSxyKXtzdXBlcih0LGUsbixvLGksYSxyKX19QUIuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEFCKShNdShjaCksTXUoSGgpLE11KFFIKSxNdShNeiw4KSxNdSh0QyksTXUoZkkpLE11KE53LDgpKX0sQUIuybVjbXA9VW8oe3R5cGU6QUIsc2VsZWN0b3JzOltbIm1hdC10YWItaGVhZGVyIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uIHQoZSxuLG8pe2lmKDEmZSYmR2IobyxrQiwwKSwyJmUpe2xldCB0O1ViKHQ9WWIoKSkmJihuLl9pdGVtcz10KX19LHZpZXdRdWVyeTpmdW5jdGlvbiB0KGUsbil7aWYoMSZlJiYoV2Ioc0IsMyksV2IoZUIsMyksV2IobkIsMyksV2Iob0IsMSksV2IoaUIsMSkpLDImZSl7bGV0IHQ7VWIodD1ZYigpKSYmKG4uX2lua0Jhcj10LmZpcnN0KSxVYih0PVliKCkpJiYobi5fdGFiTGlzdENvbnRhaW5lcj10LmZpcnN0KSxVYih0PVliKCkpJiYobi5fdGFiTGlzdD10LmZpcnN0KSxVYih0PVliKCkpJiYobi5fbmV4dFBhZ2luYXRvcj10LmZpcnN0KSxVYih0PVliKCkpJiYobi5fcHJldmlvdXNQYWdpbmF0b3I9dC5maXJzdCl9fSxob3N0QXR0cnM6WzEsIm1hdC10YWItaGVhZGVyIl0saG9zdFZhcnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezImZSYmYWYoIm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY29udHJvbHMtZW5hYmxlZCIsbi5fc2hvd1BhZ2luYXRpb25Db250cm9scykoIm1hdC10YWItaGVhZGVyLXJ0bCIsInJ0bCI9PW4uX2dldExheW91dERpcmVjdGlvbigpKX0saW5wdXRzOntzZWxlY3RlZEluZGV4OiJzZWxlY3RlZEluZGV4In0sb3V0cHV0czp7c2VsZWN0Rm9jdXNlZEluZGV4OiJzZWxlY3RGb2N1c2VkSW5kZXgiLGluZGV4Rm9jdXNlZDoiaW5kZXhGb2N1c2VkIn0sZmVhdHVyZXM6W2dtXSxuZ0NvbnRlbnRTZWxlY3RvcnM6V0wsZGVjbHM6MTMsdmFyczo4LGNvbnN0czpbWyJhcmlhLWhpZGRlbiIsInRydWUiLCJtYXQtcmlwcGxlIiwiIiwxLCJtYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIiwibWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1iZWZvcmUiLCJtYXQtZWxldmF0aW9uLXo0IiwzLCJtYXRSaXBwbGVEaXNhYmxlZCIsImNsaWNrIiwibW91c2Vkb3duIiwidG91Y2hlbmQiXSxbInByZXZpb3VzUGFnaW5hdG9yIiwiIl0sWzEsIm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiJdLFsxLCJtYXQtdGFiLWxhYmVsLWNvbnRhaW5lciIsMywia2V5ZG93biJdLFsidGFiTGlzdENvbnRhaW5lciIsIiJdLFsicm9sZSIsInRhYmxpc3QiLDEsIm1hdC10YWItbGlzdCIsMywiY2RrT2JzZXJ2ZUNvbnRlbnQiXSxbInRhYkxpc3QiLCIiXSxbMSwibWF0LXRhYi1sYWJlbHMiXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsIm1hdC1yaXBwbGUiLCIiLDEsIm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24iLCJtYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWFmdGVyIiwibWF0LWVsZXZhdGlvbi16NCIsMywibWF0UmlwcGxlRGlzYWJsZWQiLCJtb3VzZWRvd24iLCJjbGljayIsInRvdWNoZW5kIl0sWyJuZXh0UGFnaW5hdG9yIiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihWdSgpLE91KDAsImRpdiIsMCwxKSxOdSgiY2xpY2siLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uX2hhbmRsZVBhZ2luYXRvckNsaWNrKCJiZWZvcmUiKX0pKSgibW91c2Vkb3duIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5faGFuZGxlUGFnaW5hdG9yUHJlc3MoImJlZm9yZSIsZSl9KSkoInRvdWNoZW5kIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLl9zdG9wSW50ZXJ2YWwoKX0pKSx3dSgyLCJkaXYiLDIpLFB1KCksT3UoMywiZGl2IiwzLDQpLE51KCJrZXlkb3duIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5faGFuZGxlS2V5ZG93bihlKX0pKSxPdSg1LCJkaXYiLDUsNiksTnUoImNka09ic2VydmVDb250ZW50IiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLl9vbkNvbnRlbnRDaGFuZ2VzKCl9KSksT3UoNywiZGl2Iiw3KSxqdSg4KSxQdSgpLHd1KDksIm1hdC1pbmstYmFyIiksUHUoKSxQdSgpLE91KDEwLCJkaXYiLDgsOSksTnUoIm1vdXNlZG93biIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4uX2hhbmRsZVBhZ2luYXRvclByZXNzKCJhZnRlciIsZSl9KSkoImNsaWNrIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLl9oYW5kbGVQYWdpbmF0b3JDbGljaygiYWZ0ZXIiKX0pKSgidG91Y2hlbmQiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uX3N0b3BJbnRlcnZhbCgpfSkpLHd1KDEyLCJkaXYiLDIpLFB1KCkpLDImZSYmKGFmKCJtYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIixuLl9kaXNhYmxlU2Nyb2xsQmVmb3JlKSx2dSgibWF0UmlwcGxlRGlzYWJsZWQiLG4uX2Rpc2FibGVTY3JvbGxCZWZvcmV8fG4uZGlzYWJsZVJpcHBsZSksSmMoNSksYWYoIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIiwiTm9vcEFuaW1hdGlvbnMiPT09bi5fYW5pbWF0aW9uTW9kZSksSmMoNSksYWYoIm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQiLG4uX2Rpc2FibGVTY3JvbGxBZnRlciksdnUoIm1hdFJpcHBsZURpc2FibGVkIixuLl9kaXNhYmxlU2Nyb2xsQWZ0ZXJ8fG4uZGlzYWJsZVJpcHBsZSkpfSxkaXJlY3RpdmVzOltwSCxTSSxzQl0sc3R5bGVzOlsnLm1hdC10YWItaGVhZGVye2Rpc3BsYXk6ZmxleDtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmU7ZmxleC1zaHJpbms6MH0ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbnstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpub25lO2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO21pbi13aWR0aDozMnB4O2N1cnNvcjpwb2ludGVyO3otaW5kZXg6Mjstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dG91Y2gtYWN0aW9uOm5vbmV9Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY29udHJvbHMtZW5hYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbntkaXNwbGF5OmZsZXh9Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tYmVmb3JlLC5tYXQtdGFiLWhlYWRlci1ydGwgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tYWZ0ZXJ7cGFkZGluZy1sZWZ0OjRweH0ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1iZWZvcmUgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1oZWFkZXItcnRsIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWFmdGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257dHJhbnNmb3JtOnJvdGF0ZSgtMTM1ZGVnKX0ubWF0LXRhYi1oZWFkZXItcnRsIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWJlZm9yZSwubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1hZnRlcntwYWRkaW5nLXJpZ2h0OjRweH0ubWF0LXRhYi1oZWFkZXItcnRsIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWJlZm9yZSAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWFmdGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyl9Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjJweCAycHggMCAwO2NvbnRlbnQ6IiI7aGVpZ2h0OjhweDt3aWR0aDo4cHh9Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWR7Ym94LXNoYWRvdzpub25lO2N1cnNvcjpkZWZhdWx0fS5tYXQtdGFiLWxpc3R7ZmxleC1ncm93OjE7cG9zaXRpb246cmVsYXRpdmU7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gNTAwbXMgY3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuMjUsIDEpfS5tYXQtaW5rLWJhcntwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206MDtoZWlnaHQ6MnB4O3RyYW5zaXRpb246NTAwbXMgY3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuMjUsIDEpfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZS5tYXQtaW5rLWJhcnt0cmFuc2l0aW9uOm5vbmU7YW5pbWF0aW9uOm5vbmV9Lm1hdC10YWItZ3JvdXAtaW52ZXJ0ZWQtaGVhZGVyIC5tYXQtaW5rLWJhcntib3R0b206YXV0bzt0b3A6MH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtaW5rLWJhcntvdXRsaW5lOnNvbGlkIDJweDtoZWlnaHQ6MH0ubWF0LXRhYi1sYWJlbHN7ZGlzcGxheTpmbGV4fVttYXQtYWxpZ24tdGFicz1jZW50ZXJdPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbHN7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bbWF0LWFsaWduLXRhYnM9ZW5kXT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWxze2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0ubWF0LXRhYi1sYWJlbC1jb250YWluZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZ3JvdzoxO292ZXJmbG93OmhpZGRlbjt6LWluZGV4OjF9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlLm1hdC10YWItbGlzdHt0cmFuc2l0aW9uOm5vbmU7YW5pbWF0aW9uOm5vbmV9Lm1hdC10YWItbGFiZWx7aGVpZ2h0OjQ4cHg7cGFkZGluZzowIDI0cHg7Y3Vyc29yOnBvaW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O29wYWNpdHk6LjY7bWluLXdpZHRoOjE2MHB4O3RleHQtYWxpZ246Y2VudGVyO2Rpc3BsYXk6aW5saW5lLWZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7d2hpdGUtc3BhY2U6bm93cmFwO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtdGFiLWxhYmVsOmZvY3Vze291dGxpbmU6bm9uZX0ubWF0LXRhYi1sYWJlbDpmb2N1czpub3QoLm1hdC10YWItZGlzYWJsZWQpe29wYWNpdHk6MX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtdGFiLWxhYmVsOmZvY3Vze291dGxpbmU6ZG90dGVkIDJweDtvdXRsaW5lLW9mZnNldDotMnB4fS5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHR9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVke29wYWNpdHk6LjV9Lm1hdC10YWItbGFiZWwgLm1hdC10YWItbGFiZWwtY29udGVudHtkaXNwbGF5OmlubGluZS1mbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO3doaXRlLXNwYWNlOm5vd3JhcH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtdGFiLWxhYmVse29wYWNpdHk6MX1AbWVkaWEobWF4LXdpZHRoOiA1OTlweCl7Lm1hdC10YWItbGFiZWx7bWluLXdpZHRoOjcycHh9fVxuJ10sZW5jYXBzdWxhdGlvbjoyfSksQUIuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpjaH0se3R5cGU6SGh9LHt0eXBlOlFIfSx7dHlwZTpNeixkZWNvcmF0b3JzOlt7dHlwZTpfc31dfSx7dHlwZTp0Q30se3R5cGU6Zkl9LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbTnddfV19XSxBQi5wcm9wRGVjb3JhdG9ycz17X2l0ZW1zOlt7dHlwZTp6cixhcmdzOltrQix7ZGVzY2VuZGFudHM6ITF9XX1dLF9pbmtCYXI6W3t0eXBlOkZyLGFyZ3M6W3NCLHtzdGF0aWM6ITB9XX1dLF90YWJMaXN0Q29udGFpbmVyOlt7dHlwZTpGcixhcmdzOlsidGFiTGlzdENvbnRhaW5lciIse3N0YXRpYzohMH1dfV0sX3RhYkxpc3Q6W3t0eXBlOkZyLGFyZ3M6WyJ0YWJMaXN0Iix7c3RhdGljOiEwfV19XSxfbmV4dFBhZ2luYXRvcjpbe3R5cGU6RnIsYXJnczpbIm5leHRQYWdpbmF0b3IiXX1dLF9wcmV2aW91c1BhZ2luYXRvcjpbe3R5cGU6RnIsYXJnczpbInByZXZpb3VzUGFnaW5hdG9yIl19XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihBQixbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJtYXQtdGFiLWhlYWRlciIsdGVtcGxhdGU6JzxkaXYgY2xhc3M9Im1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gbWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1iZWZvcmUgbWF0LWVsZXZhdGlvbi16NCJcbiAgICAgI3ByZXZpb3VzUGFnaW5hdG9yXG4gICAgIGFyaWEtaGlkZGVuPSJ0cnVlIlxuICAgICBtYXQtcmlwcGxlIFttYXRSaXBwbGVEaXNhYmxlZF09Il9kaXNhYmxlU2Nyb2xsQmVmb3JlIHx8IGRpc2FibGVSaXBwbGUiXG4gICAgIFtjbGFzcy5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkXT0iX2Rpc2FibGVTY3JvbGxCZWZvcmUiXG4gICAgIChjbGljayk9Il9oYW5kbGVQYWdpbmF0b3JDbGljayhcJ2JlZm9yZVwnKSJcbiAgICAgKG1vdXNlZG93bik9Il9oYW5kbGVQYWdpbmF0b3JQcmVzcyhcJ2JlZm9yZVwnLCAkZXZlbnQpIlxuICAgICAodG91Y2hlbmQpPSJfc3RvcEludGVydmFsKCkiPlxuICA8ZGl2IGNsYXNzPSJtYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24iPjwvZGl2PlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9Im1hdC10YWItbGFiZWwtY29udGFpbmVyIiAjdGFiTGlzdENvbnRhaW5lciAoa2V5ZG93bik9Il9oYW5kbGVLZXlkb3duKCRldmVudCkiPlxuICA8ZGl2XG4gICAgI3RhYkxpc3RcbiAgICBjbGFzcz0ibWF0LXRhYi1saXN0IlxuICAgIFtjbGFzcy5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZV09Il9hbmltYXRpb25Nb2RlID09PSBcJ05vb3BBbmltYXRpb25zXCciXG4gICAgcm9sZT0idGFibGlzdCJcbiAgICAoY2RrT2JzZXJ2ZUNvbnRlbnQpPSJfb25Db250ZW50Q2hhbmdlcygpIj5cbiAgICA8ZGl2IGNsYXNzPSJtYXQtdGFiLWxhYmVscyI+XG4gICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG4gICAgPG1hdC1pbmstYmFyPjwvbWF0LWluay1iYXI+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9Im1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gbWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1hZnRlciBtYXQtZWxldmF0aW9uLXo0IlxuICAgICAjbmV4dFBhZ2luYXRvclxuICAgICBhcmlhLWhpZGRlbj0idHJ1ZSJcbiAgICAgbWF0LXJpcHBsZSBbbWF0UmlwcGxlRGlzYWJsZWRdPSJfZGlzYWJsZVNjcm9sbEFmdGVyIHx8IGRpc2FibGVSaXBwbGUiXG4gICAgIFtjbGFzcy5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkXT0iX2Rpc2FibGVTY3JvbGxBZnRlciJcbiAgICAgKG1vdXNlZG93bik9Il9oYW5kbGVQYWdpbmF0b3JQcmVzcyhcJ2FmdGVyXCcsICRldmVudCkiXG4gICAgIChjbGljayk9Il9oYW5kbGVQYWdpbmF0b3JDbGljayhcJ2FmdGVyXCcpIlxuICAgICAodG91Y2hlbmQpPSJfc3RvcEludGVydmFsKCkiPlxuICA8ZGl2IGNsYXNzPSJtYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24iPjwvZGl2PlxuPC9kaXY+XG4nLGlucHV0czpbInNlbGVjdGVkSW5kZXgiXSxvdXRwdXRzOlsic2VsZWN0Rm9jdXNlZEluZGV4IiwiaW5kZXhGb2N1c2VkIl0sZW5jYXBzdWxhdGlvbjpQby5Ob25lLGNoYW5nZURldGVjdGlvbjp4by5EZWZhdWx0LGhvc3Q6e2NsYXNzOiJtYXQtdGFiLWhlYWRlciIsIltjbGFzcy5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNvbnRyb2xzLWVuYWJsZWRdIjoiX3Nob3dQYWdpbmF0aW9uQ29udHJvbHMiLCJbY2xhc3MubWF0LXRhYi1oZWFkZXItcnRsXSI6Il9nZXRMYXlvdXREaXJlY3Rpb24oKSA9PSAncnRsJyJ9LHN0eWxlczpbJy5tYXQtdGFiLWhlYWRlcntkaXNwbGF5OmZsZXg7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlO2ZsZXgtc2hyaW5rOjB9Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb257LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6bm9uZTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjttaW4td2lkdGg6MzJweDtjdXJzb3I6cG9pbnRlcjt6LWluZGV4OjI7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O3RvdWNoLWFjdGlvbjpub25lfS5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNvbnRyb2xzLWVuYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb257ZGlzcGxheTpmbGV4fS5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWJlZm9yZSwubWF0LXRhYi1oZWFkZXItcnRsIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWFmdGVye3BhZGRpbmctbGVmdDo0cHh9Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tYmVmb3JlIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItaGVhZGVyLXJ0bCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1hZnRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue3RyYW5zZm9ybTpyb3RhdGUoLTEzNWRlZyl9Lm1hdC10YWItaGVhZGVyLXJ0bCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1iZWZvcmUsLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tYWZ0ZXJ7cGFkZGluZy1yaWdodDo0cHh9Lm1hdC10YWItaGVhZGVyLXJ0bCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1iZWZvcmUgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1hZnRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpfS5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDoycHggMnB4IDAgMDtjb250ZW50OiIiO2hlaWdodDo4cHg7d2lkdGg6OHB4fS5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVke2JveC1zaGFkb3c6bm9uZTtjdXJzb3I6ZGVmYXVsdH0ubWF0LXRhYi1saXN0e2ZsZXgtZ3JvdzoxO3Bvc2l0aW9uOnJlbGF0aXZlO3RyYW5zaXRpb246dHJhbnNmb3JtIDUwMG1zIGN1YmljLWJlemllcigwLjM1LCAwLCAwLjI1LCAxKX0ubWF0LWluay1iYXJ7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjA7aGVpZ2h0OjJweDt0cmFuc2l0aW9uOjUwMG1zIGN1YmljLWJlemllcigwLjM1LCAwLCAwLjI1LCAxKX0uX21hdC1hbmltYXRpb24tbm9vcGFibGUubWF0LWluay1iYXJ7dHJhbnNpdGlvbjpub25lO2FuaW1hdGlvbjpub25lfS5tYXQtdGFiLWdyb3VwLWludmVydGVkLWhlYWRlciAubWF0LWluay1iYXJ7Ym90dG9tOmF1dG87dG9wOjB9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWluay1iYXJ7b3V0bGluZTpzb2xpZCAycHg7aGVpZ2h0OjB9Lm1hdC10YWItbGFiZWxze2Rpc3BsYXk6ZmxleH1bbWF0LWFsaWduLXRhYnM9Y2VudGVyXT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWxze2p1c3RpZnktY29udGVudDpjZW50ZXJ9W21hdC1hbGlnbi10YWJzPWVuZF0+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsc3tqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9Lm1hdC10YWItbGFiZWwtY29udGFpbmVye2Rpc3BsYXk6ZmxleDtmbGV4LWdyb3c6MTtvdmVyZmxvdzpoaWRkZW47ei1pbmRleDoxfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZS5tYXQtdGFiLWxpc3R7dHJhbnNpdGlvbjpub25lO2FuaW1hdGlvbjpub25lfS5tYXQtdGFiLWxhYmVse2hlaWdodDo0OHB4O3BhZGRpbmc6MCAyNHB4O2N1cnNvcjpwb2ludGVyO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvcGFjaXR5Oi42O21pbi13aWR0aDoxNjBweDt0ZXh0LWFsaWduOmNlbnRlcjtkaXNwbGF5OmlubGluZS1mbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO3doaXRlLXNwYWNlOm5vd3JhcDtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXRhYi1sYWJlbDpmb2N1c3tvdXRsaW5lOm5vbmV9Lm1hdC10YWItbGFiZWw6Zm9jdXM6bm90KC5tYXQtdGFiLWRpc2FibGVkKXtvcGFjaXR5OjF9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXRhYi1sYWJlbDpmb2N1c3tvdXRsaW5lOmRvdHRlZCAycHg7b3V0bGluZS1vZmZzZXQ6LTJweH0ubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZHtvcGFjaXR5Oi41fS5tYXQtdGFiLWxhYmVsIC5tYXQtdGFiLWxhYmVsLWNvbnRlbnR7ZGlzcGxheTppbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXB9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXRhYi1sYWJlbHtvcGFjaXR5OjF9QG1lZGlhKG1heC13aWR0aDogNTk5cHgpey5tYXQtdGFiLWxhYmVse21pbi13aWR0aDo3MnB4fX1cbiddfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Y2h9LHt0eXBlOkhofSx7dHlwZTpRSH0se3R5cGU6TXosZGVjb3JhdG9yczpbe3R5cGU6X3N9XX0se3R5cGU6dEN9LHt0eXBlOmZJfSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W053XX1dfV19KSx7X2l0ZW1zOlt7dHlwZTp6cixhcmdzOltrQix7ZGVzY2VuZGFudHM6ITF9XX1dLF9pbmtCYXI6W3t0eXBlOkZyLGFyZ3M6W3NCLHtzdGF0aWM6ITB9XX1dLF90YWJMaXN0Q29udGFpbmVyOlt7dHlwZTpGcixhcmdzOlsidGFiTGlzdENvbnRhaW5lciIse3N0YXRpYzohMH1dfV0sX3RhYkxpc3Q6W3t0eXBlOkZyLGFyZ3M6WyJ0YWJMaXN0Iix7c3RhdGljOiEwfV19XSxfbmV4dFBhZ2luYXRvcjpbe3R5cGU6RnIsYXJnczpbIm5leHRQYWdpbmF0b3IiXX1dLF9wcmV2aW91c1BhZ2luYXRvcjpbe3R5cGU6RnIsYXJnczpbInByZXZpb3VzUGFnaW5hdG9yIl19XX0pOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3MgUkIgZXh0ZW5kcyBEQntjb25zdHJ1Y3Rvcih0LGUsbixvLGksYSxyKXtzdXBlcih0LG8saSxlLG4sYSxyKSx0aGlzLl9kaXNhYmxlUmlwcGxlPSExLHRoaXMuY29sb3I9InByaW1hcnkifWdldCBiYWNrZ3JvdW5kQ29sb3IoKXtyZXR1cm4gdGhpcy5fYmFja2dyb3VuZENvbG9yfXNldCBiYWNrZ3JvdW5kQ29sb3IodCl7Y29uc3QgZT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0O2UucmVtb3ZlKGBtYXQtYmFja2dyb3VuZC0ke3RoaXMuYmFja2dyb3VuZENvbG9yfWApLHQmJmUuYWRkKGBtYXQtYmFja2dyb3VuZC0ke3R9YCksdGhpcy5fYmFja2dyb3VuZENvbG9yPXR9Z2V0IGRpc2FibGVSaXBwbGUoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZVJpcHBsZX1zZXQgZGlzYWJsZVJpcHBsZSh0KXt0aGlzLl9kaXNhYmxlUmlwcGxlPXJJKHQpfV9pdGVtU2VsZWN0ZWQoKXt9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5faXRlbXMuY2hhbmdlcy5waXBlKGNuKG51bGwpLHVuKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKCk9Pnt0aGlzLnVwZGF0ZUFjdGl2ZUxpbmsoKX0pKSxzdXBlci5uZ0FmdGVyQ29udGVudEluaXQoKX11cGRhdGVBY3RpdmVMaW5rKCl7aWYoIXRoaXMuX2l0ZW1zKXJldHVybjtjb25zdCB0PXRoaXMuX2l0ZW1zLnRvQXJyYXkoKTtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKylpZih0W2VdLmFjdGl2ZSlyZXR1cm4gdGhpcy5zZWxlY3RlZEluZGV4PWUsdm9pZCB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTt0aGlzLnNlbGVjdGVkSW5kZXg9LTEsdGhpcy5faW5rQmFyLmhpZGUoKX19UkIuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFJCKShNdShjaCksTXUoTXosOCksTXUodEMpLE11KEhoKSxNdShRSCksTXUoZkkpLE11KE53LDgpKX0sUkIuybVkaXI9Sm8oe3R5cGU6UkIsaW5wdXRzOntjb2xvcjoiY29sb3IiLGJhY2tncm91bmRDb2xvcjoiYmFja2dyb3VuZENvbG9yIixkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIn0sZmVhdHVyZXM6W2dtXX0pLFJCLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6Y2h9LHt0eXBlOk16LGRlY29yYXRvcnM6W3t0eXBlOl9zfV19LHt0eXBlOnRDfSx7dHlwZTpIaH0se3R5cGU6UUh9LHt0eXBlOmZJfSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W053XX1dfV0sUkIucHJvcERlY29yYXRvcnM9e2JhY2tncm91bmRDb2xvcjpbe3R5cGU6eV99XSxkaXNhYmxlUmlwcGxlOlt7dHlwZTp5X31dLGNvbG9yOlt7dHlwZTp5X31dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFJCLFt7dHlwZTpnX31dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpjaH0se3R5cGU6TXosZGVjb3JhdG9yczpbe3R5cGU6X3N9XX0se3R5cGU6dEN9LHt0eXBlOkhofSx7dHlwZTpRSH0se3R5cGU6Zkl9LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbTnddfV19XX0pLHtjb2xvcjpbe3R5cGU6eV99XSxiYWNrZ3JvdW5kQ29sb3I6W3t0eXBlOnlffV0sZGlzYWJsZVJpcHBsZTpbe3R5cGU6eV99XX0pO2NsYXNzIFRCIGV4dGVuZHMgUkJ7Y29uc3RydWN0b3IodCxlLG4sbyxpLGEscil7c3VwZXIodCxlLG4sbyxpLGEscil9fVRCLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxUQikoTXUoY2gpLE11KE16LDgpLE11KHRDKSxNdShIaCksTXUoUUgpLE11KGZJKSxNdShOdyw4KSl9LFRCLsm1Y21wPVVvKHt0eXBlOlRCLHNlbGVjdG9yczpbWyIiLCJtYXQtdGFiLW5hdi1iYXIiLCIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24gdChlLG4sbyl7aWYoMSZlJiZHYihvLHpCLDEpLDImZSl7bGV0IHQ7VWIodD1ZYigpKSYmKG4uX2l0ZW1zPXQpfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJihXYihzQiwzKSxXYihlQiwzKSxXYihuQiwzKSxXYihvQiwxKSxXYihpQiwxKSksMiZlKXtsZXQgdDtVYih0PVliKCkpJiYobi5faW5rQmFyPXQuZmlyc3QpLFViKHQ9WWIoKSkmJihuLl90YWJMaXN0Q29udGFpbmVyPXQuZmlyc3QpLFViKHQ9WWIoKSkmJihuLl90YWJMaXN0PXQuZmlyc3QpLFViKHQ9WWIoKSkmJihuLl9uZXh0UGFnaW5hdG9yPXQuZmlyc3QpLFViKHQ9WWIoKSkmJihuLl9wcmV2aW91c1BhZ2luYXRvcj10LmZpcnN0KX19LGhvc3RBdHRyczpbMSwibWF0LXRhYi1uYXYtYmFyIiwibWF0LXRhYi1oZWFkZXIiXSxob3N0VmFyczoxMCxob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezImZSYmYWYoIm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY29udHJvbHMtZW5hYmxlZCIsbi5fc2hvd1BhZ2luYXRpb25Db250cm9scykoIm1hdC10YWItaGVhZGVyLXJ0bCIsInJ0bCI9PW4uX2dldExheW91dERpcmVjdGlvbigpKSgibWF0LXByaW1hcnkiLCJ3YXJuIiE9PW4uY29sb3ImJiJhY2NlbnQiIT09bi5jb2xvcikoIm1hdC1hY2NlbnQiLCJhY2NlbnQiPT09bi5jb2xvcikoIm1hdC13YXJuIiwid2FybiI9PT1uLmNvbG9yKX0saW5wdXRzOntjb2xvcjoiY29sb3IifSxleHBvcnRBczpbIm1hdFRhYk5hdkJhciIsIm1hdFRhYk5hdiJdLGZlYXR1cmVzOltnbV0sYXR0cnM6WyJtYXQtdGFiLW5hdi1iYXIiLCIiXSxuZ0NvbnRlbnRTZWxlY3RvcnM6V0wsZGVjbHM6MTMsdmFyczo4LGNvbnN0czpbWyJhcmlhLWhpZGRlbiIsInRydWUiLCJtYXQtcmlwcGxlIiwiIiwxLCJtYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIiwibWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1iZWZvcmUiLCJtYXQtZWxldmF0aW9uLXo0IiwzLCJtYXRSaXBwbGVEaXNhYmxlZCIsImNsaWNrIiwibW91c2Vkb3duIiwidG91Y2hlbmQiXSxbInByZXZpb3VzUGFnaW5hdG9yIiwiIl0sWzEsIm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiJdLFsxLCJtYXQtdGFiLWxpbmstY29udGFpbmVyIiwzLCJrZXlkb3duIl0sWyJ0YWJMaXN0Q29udGFpbmVyIiwiIl0sWzEsIm1hdC10YWItbGlzdCIsMywiY2RrT2JzZXJ2ZUNvbnRlbnQiXSxbInRhYkxpc3QiLCIiXSxbMSwibWF0LXRhYi1saW5rcyJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwibWF0LXJpcHBsZSIsIiIsMSwibWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiIsIm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tYWZ0ZXIiLCJtYXQtZWxldmF0aW9uLXo0IiwzLCJtYXRSaXBwbGVEaXNhYmxlZCIsIm1vdXNlZG93biIsImNsaWNrIiwidG91Y2hlbmQiXSxbIm5leHRQYWdpbmF0b3IiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKFZ1KCksT3UoMCwiZGl2IiwwLDEpLE51KCJjbGljayIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5faGFuZGxlUGFnaW5hdG9yQ2xpY2soImJlZm9yZSIpfSkpKCJtb3VzZWRvd24iLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLl9oYW5kbGVQYWdpbmF0b3JQcmVzcygiYmVmb3JlIixlKX0pKSgidG91Y2hlbmQiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uX3N0b3BJbnRlcnZhbCgpfSkpLHd1KDIsImRpdiIsMiksUHUoKSxPdSgzLCJkaXYiLDMsNCksTnUoImtleWRvd24iLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLl9oYW5kbGVLZXlkb3duKGUpfSkpLE91KDUsImRpdiIsNSw2KSxOdSgiY2RrT2JzZXJ2ZUNvbnRlbnQiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uX29uQ29udGVudENoYW5nZXMoKX0pKSxPdSg3LCJkaXYiLDcpLGp1KDgpLFB1KCksd3UoOSwibWF0LWluay1iYXIiKSxQdSgpLFB1KCksT3UoMTAsImRpdiIsOCw5KSxOdSgibW91c2Vkb3duIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5faGFuZGxlUGFnaW5hdG9yUHJlc3MoImFmdGVyIixlKX0pKSgiY2xpY2siLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uX2hhbmRsZVBhZ2luYXRvckNsaWNrKCJhZnRlciIpfSkpKCJ0b3VjaGVuZCIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5fc3RvcEludGVydmFsKCl9KSksd3UoMTIsImRpdiIsMiksUHUoKSksMiZlJiYoYWYoIm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQiLG4uX2Rpc2FibGVTY3JvbGxCZWZvcmUpLHZ1KCJtYXRSaXBwbGVEaXNhYmxlZCIsbi5fZGlzYWJsZVNjcm9sbEJlZm9yZXx8bi5kaXNhYmxlUmlwcGxlKSxKYyg1KSxhZigiX21hdC1hbmltYXRpb24tbm9vcGFibGUiLCJOb29wQW5pbWF0aW9ucyI9PT1uLl9hbmltYXRpb25Nb2RlKSxKYyg1KSxhZigibWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCIsbi5fZGlzYWJsZVNjcm9sbEFmdGVyKSx2dSgibWF0UmlwcGxlRGlzYWJsZWQiLG4uX2Rpc2FibGVTY3JvbGxBZnRlcnx8bi5kaXNhYmxlUmlwcGxlKSl9LGRpcmVjdGl2ZXM6W3BILFNJLHNCXSxzdHlsZXM6WycubWF0LXRhYi1oZWFkZXJ7ZGlzcGxheTpmbGV4O292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZTtmbGV4LXNocmluazowfS5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5Om5vbmU7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7bWluLXdpZHRoOjMycHg7Y3Vyc29yOnBvaW50ZXI7ei1pbmRleDoyOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDt0b3VjaC1hY3Rpb246bm9uZX0ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jb250cm9scy1lbmFibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9ue2Rpc3BsYXk6ZmxleH0ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1iZWZvcmUsLm1hdC10YWItaGVhZGVyLXJ0bCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1hZnRlcntwYWRkaW5nLWxlZnQ6NHB4fS5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWJlZm9yZSAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLWhlYWRlci1ydGwgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tYWZ0ZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbnt0cmFuc2Zvcm06cm90YXRlKC0xMzVkZWcpfS5tYXQtdGFiLWhlYWRlci1ydGwgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tYmVmb3JlLC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWFmdGVye3BhZGRpbmctcmlnaHQ6NHB4fS5tYXQtdGFiLWhlYWRlci1ydGwgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tYmVmb3JlIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tYWZ0ZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbnt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKX0ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6MnB4IDJweCAwIDA7Y29udGVudDoiIjtoZWlnaHQ6OHB4O3dpZHRoOjhweH0ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZHtib3gtc2hhZG93Om5vbmU7Y3Vyc29yOmRlZmF1bHR9Lm1hdC10YWItbGlzdHtmbGV4LWdyb3c6MTtwb3NpdGlvbjpyZWxhdGl2ZTt0cmFuc2l0aW9uOnRyYW5zZm9ybSA1MDBtcyBjdWJpYy1iZXppZXIoMC4zNSwgMCwgMC4yNSwgMSl9Lm1hdC10YWItbGlua3N7ZGlzcGxheTpmbGV4fVttYXQtYWxpZ24tdGFicz1jZW50ZXJdPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmtze2p1c3RpZnktY29udGVudDpjZW50ZXJ9W21hdC1hbGlnbi10YWJzPWVuZF0+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGlua3N7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5tYXQtaW5rLWJhcntwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206MDtoZWlnaHQ6MnB4O3RyYW5zaXRpb246NTAwbXMgY3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuMjUsIDEpfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZS5tYXQtaW5rLWJhcnt0cmFuc2l0aW9uOm5vbmU7YW5pbWF0aW9uOm5vbmV9Lm1hdC10YWItZ3JvdXAtaW52ZXJ0ZWQtaGVhZGVyIC5tYXQtaW5rLWJhcntib3R0b206YXV0bzt0b3A6MH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtaW5rLWJhcntvdXRsaW5lOnNvbGlkIDJweDtoZWlnaHQ6MH0ubWF0LXRhYi1saW5rLWNvbnRhaW5lcntkaXNwbGF5OmZsZXg7ZmxleC1ncm93OjE7b3ZlcmZsb3c6aGlkZGVuO3otaW5kZXg6MX0ubWF0LXRhYi1saW5re2hlaWdodDo0OHB4O3BhZGRpbmc6MCAyNHB4O2N1cnNvcjpwb2ludGVyO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvcGFjaXR5Oi42O21pbi13aWR0aDoxNjBweDt0ZXh0LWFsaWduOmNlbnRlcjtkaXNwbGF5OmlubGluZS1mbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO3doaXRlLXNwYWNlOm5vd3JhcDt2ZXJ0aWNhbC1hbGlnbjp0b3A7dGV4dC1kZWNvcmF0aW9uOm5vbmU7cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6aGlkZGVuOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudH0ubWF0LXRhYi1saW5rOmZvY3Vze291dGxpbmU6bm9uZX0ubWF0LXRhYi1saW5rOmZvY3VzOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC10YWItbGluazpmb2N1c3tvdXRsaW5lOmRvdHRlZCAycHg7b3V0bGluZS1vZmZzZXQ6LTJweH0ubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHR9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7b3BhY2l0eTouNX0ubWF0LXRhYi1saW5rIC5tYXQtdGFiLWxhYmVsLWNvbnRlbnR7ZGlzcGxheTppbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXB9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXRhYi1saW5re29wYWNpdHk6MX1bbWF0LXN0cmV0Y2gtdGFic10gLm1hdC10YWItbGlua3tmbGV4LWJhc2lzOjA7ZmxleC1ncm93OjF9Lm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVke3BvaW50ZXItZXZlbnRzOm5vbmV9QG1lZGlhKG1heC13aWR0aDogNTk5cHgpey5tYXQtdGFiLWxpbmt7bWluLXdpZHRoOjcycHh9fVxuJ10sZW5jYXBzdWxhdGlvbjoyfSksVEIuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpjaH0se3R5cGU6TXosZGVjb3JhdG9yczpbe3R5cGU6X3N9XX0se3R5cGU6dEN9LHt0eXBlOkhofSx7dHlwZTpRSH0se3R5cGU6Zkl9LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbTnddfV19XSxUQi5wcm9wRGVjb3JhdG9ycz17X2l0ZW1zOlt7dHlwZTp6cixhcmdzOltJbigoKCk9PnpCKSkse2Rlc2NlbmRhbnRzOiEwfV19XSxfaW5rQmFyOlt7dHlwZTpGcixhcmdzOltzQix7c3RhdGljOiEwfV19XSxfdGFiTGlzdENvbnRhaW5lcjpbe3R5cGU6RnIsYXJnczpbInRhYkxpc3RDb250YWluZXIiLHtzdGF0aWM6ITB9XX1dLF90YWJMaXN0Olt7dHlwZTpGcixhcmdzOlsidGFiTGlzdCIse3N0YXRpYzohMH1dfV0sX25leHRQYWdpbmF0b3I6W3t0eXBlOkZyLGFyZ3M6WyJuZXh0UGFnaW5hdG9yIl19XSxfcHJldmlvdXNQYWdpbmF0b3I6W3t0eXBlOkZyLGFyZ3M6WyJwcmV2aW91c1BhZ2luYXRvciJdfV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoVEIsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoiW21hdC10YWItbmF2LWJhcl0iLGV4cG9ydEFzOiJtYXRUYWJOYXZCYXIsIG1hdFRhYk5hdiIsaW5wdXRzOlsiY29sb3IiXSx0ZW1wbGF0ZTonPGRpdiBjbGFzcz0ibWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiBtYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWJlZm9yZSBtYXQtZWxldmF0aW9uLXo0IlxuICAgICAjcHJldmlvdXNQYWdpbmF0b3JcbiAgICAgYXJpYS1oaWRkZW49InRydWUiXG4gICAgIG1hdC1yaXBwbGUgW21hdFJpcHBsZURpc2FibGVkXT0iX2Rpc2FibGVTY3JvbGxCZWZvcmUgfHwgZGlzYWJsZVJpcHBsZSJcbiAgICAgW2NsYXNzLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWRdPSJfZGlzYWJsZVNjcm9sbEJlZm9yZSJcbiAgICAgKGNsaWNrKT0iX2hhbmRsZVBhZ2luYXRvckNsaWNrKFwnYmVmb3JlXCcpIlxuICAgICAobW91c2Vkb3duKT0iX2hhbmRsZVBhZ2luYXRvclByZXNzKFwnYmVmb3JlXCcsICRldmVudCkiXG4gICAgICh0b3VjaGVuZCk9Il9zdG9wSW50ZXJ2YWwoKSI+XG4gIDxkaXYgY2xhc3M9Im1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiI+PC9kaXY+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz0ibWF0LXRhYi1saW5rLWNvbnRhaW5lciIgI3RhYkxpc3RDb250YWluZXIgKGtleWRvd24pPSJfaGFuZGxlS2V5ZG93bigkZXZlbnQpIj5cbiAgPGRpdlxuICAgIGNsYXNzPSJtYXQtdGFiLWxpc3QiXG4gICAgW2NsYXNzLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlXT0iX2FuaW1hdGlvbk1vZGUgPT09IFwnTm9vcEFuaW1hdGlvbnNcJyJcbiAgICAjdGFiTGlzdFxuICAgIChjZGtPYnNlcnZlQ29udGVudCk9Il9vbkNvbnRlbnRDaGFuZ2VzKCkiPlxuICAgIDxkaXYgY2xhc3M9Im1hdC10YWItbGlua3MiPlxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICAgIDxtYXQtaW5rLWJhcj48L21hdC1pbmstYmFyPlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPSJtYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIG1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tYWZ0ZXIgbWF0LWVsZXZhdGlvbi16NCJcbiAgICAgI25leHRQYWdpbmF0b3JcbiAgICAgYXJpYS1oaWRkZW49InRydWUiXG4gICAgIG1hdC1yaXBwbGUgW21hdFJpcHBsZURpc2FibGVkXT0iX2Rpc2FibGVTY3JvbGxBZnRlciB8fCBkaXNhYmxlUmlwcGxlIlxuICAgICBbY2xhc3MubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZF09Il9kaXNhYmxlU2Nyb2xsQWZ0ZXIiXG4gICAgIChtb3VzZWRvd24pPSJfaGFuZGxlUGFnaW5hdG9yUHJlc3MoXCdhZnRlclwnLCAkZXZlbnQpIlxuICAgICAoY2xpY2spPSJfaGFuZGxlUGFnaW5hdG9yQ2xpY2soXCdhZnRlclwnKSJcbiAgICAgKHRvdWNoZW5kKT0iX3N0b3BJbnRlcnZhbCgpIj5cbiAgPGRpdiBjbGFzcz0ibWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uIj48L2Rpdj5cbjwvZGl2PlxuJyxob3N0OntjbGFzczoibWF0LXRhYi1uYXYtYmFyIG1hdC10YWItaGVhZGVyIiwiW2NsYXNzLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY29udHJvbHMtZW5hYmxlZF0iOiJfc2hvd1BhZ2luYXRpb25Db250cm9scyIsIltjbGFzcy5tYXQtdGFiLWhlYWRlci1ydGxdIjoiX2dldExheW91dERpcmVjdGlvbigpID09ICdydGwnIiwiW2NsYXNzLm1hdC1wcmltYXJ5XSI6J2NvbG9yICE9PSAid2FybiIgJiYgY29sb3IgIT09ICJhY2NlbnQiJywiW2NsYXNzLm1hdC1hY2NlbnRdIjonY29sb3IgPT09ICJhY2NlbnQiJywiW2NsYXNzLm1hdC13YXJuXSI6J2NvbG9yID09PSAid2FybiInfSxlbmNhcHN1bGF0aW9uOlBvLk5vbmUsY2hhbmdlRGV0ZWN0aW9uOnhvLkRlZmF1bHQsc3R5bGVzOlsnLm1hdC10YWItaGVhZGVye2Rpc3BsYXk6ZmxleDtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmU7ZmxleC1zaHJpbms6MH0ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbnstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpub25lO2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO21pbi13aWR0aDozMnB4O2N1cnNvcjpwb2ludGVyO3otaW5kZXg6Mjstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dG91Y2gtYWN0aW9uOm5vbmV9Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY29udHJvbHMtZW5hYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbntkaXNwbGF5OmZsZXh9Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tYmVmb3JlLC5tYXQtdGFiLWhlYWRlci1ydGwgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tYWZ0ZXJ7cGFkZGluZy1sZWZ0OjRweH0ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1iZWZvcmUgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1oZWFkZXItcnRsIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWFmdGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257dHJhbnNmb3JtOnJvdGF0ZSgtMTM1ZGVnKX0ubWF0LXRhYi1oZWFkZXItcnRsIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWJlZm9yZSwubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1hZnRlcntwYWRkaW5nLXJpZ2h0OjRweH0ubWF0LXRhYi1oZWFkZXItcnRsIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWJlZm9yZSAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWFmdGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyl9Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjJweCAycHggMCAwO2NvbnRlbnQ6IiI7aGVpZ2h0OjhweDt3aWR0aDo4cHh9Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWR7Ym94LXNoYWRvdzpub25lO2N1cnNvcjpkZWZhdWx0fS5tYXQtdGFiLWxpc3R7ZmxleC1ncm93OjE7cG9zaXRpb246cmVsYXRpdmU7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gNTAwbXMgY3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuMjUsIDEpfS5tYXQtdGFiLWxpbmtze2Rpc3BsYXk6ZmxleH1bbWF0LWFsaWduLXRhYnM9Y2VudGVyXT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rc3tqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVttYXQtYWxpZ24tdGFicz1lbmRdPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmtze2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0ubWF0LWluay1iYXJ7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjA7aGVpZ2h0OjJweDt0cmFuc2l0aW9uOjUwMG1zIGN1YmljLWJlemllcigwLjM1LCAwLCAwLjI1LCAxKX0uX21hdC1hbmltYXRpb24tbm9vcGFibGUubWF0LWluay1iYXJ7dHJhbnNpdGlvbjpub25lO2FuaW1hdGlvbjpub25lfS5tYXQtdGFiLWdyb3VwLWludmVydGVkLWhlYWRlciAubWF0LWluay1iYXJ7Ym90dG9tOmF1dG87dG9wOjB9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWluay1iYXJ7b3V0bGluZTpzb2xpZCAycHg7aGVpZ2h0OjB9Lm1hdC10YWItbGluay1jb250YWluZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZ3JvdzoxO292ZXJmbG93OmhpZGRlbjt6LWluZGV4OjF9Lm1hdC10YWItbGlua3toZWlnaHQ6NDhweDtwYWRkaW5nOjAgMjRweDtjdXJzb3I6cG9pbnRlcjtib3gtc2l6aW5nOmJvcmRlci1ib3g7b3BhY2l0eTouNjttaW4td2lkdGg6MTYwcHg7dGV4dC1hbGlnbjpjZW50ZXI7ZGlzcGxheTppbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXA7dmVydGljYWwtYWxpZ246dG9wO3RleHQtZGVjb3JhdGlvbjpub25lO3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbjstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnR9Lm1hdC10YWItbGluazpmb2N1c3tvdXRsaW5lOm5vbmV9Lm1hdC10YWItbGluazpmb2N1czpub3QoLm1hdC10YWItZGlzYWJsZWQpe29wYWNpdHk6MX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtdGFiLWxpbms6Zm9jdXN7b3V0bGluZTpkb3R0ZWQgMnB4O291dGxpbmUtb2Zmc2V0Oi0ycHh9Lm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVke29wYWNpdHk6LjV9Lm1hdC10YWItbGluayAubWF0LXRhYi1sYWJlbC1jb250ZW50e2Rpc3BsYXk6aW5saW5lLWZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7d2hpdGUtc3BhY2U6bm93cmFwfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC10YWItbGlua3tvcGFjaXR5OjF9W21hdC1zdHJldGNoLXRhYnNdIC5tYXQtdGFiLWxpbmt7ZmxleC1iYXNpczowO2ZsZXgtZ3JvdzoxfS5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZHtwb2ludGVyLWV2ZW50czpub25lfUBtZWRpYShtYXgtd2lkdGg6IDU5OXB4KXsubWF0LXRhYi1saW5re21pbi13aWR0aDo3MnB4fX1cbiddfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Y2h9LHt0eXBlOk16LGRlY29yYXRvcnM6W3t0eXBlOl9zfV19LHt0eXBlOnRDfSx7dHlwZTpIaH0se3R5cGU6UUh9LHt0eXBlOmZJfSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W053XX1dfV19KSx7X2l0ZW1zOlt7dHlwZTp6cixhcmdzOltJbigoKCk9PnpCKSkse2Rlc2NlbmRhbnRzOiEwfV19XSxfaW5rQmFyOlt7dHlwZTpGcixhcmdzOltzQix7c3RhdGljOiEwfV19XSxfdGFiTGlzdENvbnRhaW5lcjpbe3R5cGU6RnIsYXJnczpbInRhYkxpc3RDb250YWluZXIiLHtzdGF0aWM6ITB9XX1dLF90YWJMaXN0Olt7dHlwZTpGcixhcmdzOlsidGFiTGlzdCIse3N0YXRpYzohMH1dfV0sX25leHRQYWdpbmF0b3I6W3t0eXBlOkZyLGFyZ3M6WyJuZXh0UGFnaW5hdG9yIl19XSxfcHJldmlvdXNQYWdpbmF0b3I6W3t0eXBlOkZyLGFyZ3M6WyJwcmV2aW91c1BhZ2luYXRvciJdfV19KTtjb25zdCBOQj1Ieih6eihOeihjbGFzc3t9KSkpO2NsYXNzIElCIGV4dGVuZHMgTkJ7Y29uc3RydWN0b3IodCxlLG4sbyxpLGEpe3N1cGVyKCksdGhpcy5fdGFiTmF2QmFyPXQsdGhpcy5lbGVtZW50UmVmPWUsdGhpcy5fZm9jdXNNb25pdG9yPWksdGhpcy5faXNBY3RpdmU9ITEsdGhpcy5yaXBwbGVDb25maWc9bnx8e30sdGhpcy50YWJJbmRleD1wYXJzZUludChvKXx8MCwiTm9vcEFuaW1hdGlvbnMiPT09YSYmKHRoaXMucmlwcGxlQ29uZmlnLmFuaW1hdGlvbj17ZW50ZXJEdXJhdGlvbjowLGV4aXREdXJhdGlvbjowfSl9Z2V0IGFjdGl2ZSgpe3JldHVybiB0aGlzLl9pc0FjdGl2ZX1zZXQgYWN0aXZlKHQpe3JJKHQpIT09dGhpcy5faXNBY3RpdmUmJih0aGlzLl9pc0FjdGl2ZT10LHRoaXMuX3RhYk5hdkJhci51cGRhdGVBY3RpdmVMaW5rKCkpfWdldCByaXBwbGVEaXNhYmxlZCgpe3JldHVybiB0aGlzLmRpc2FibGVkfHx0aGlzLmRpc2FibGVSaXBwbGV8fHRoaXMuX3RhYk5hdkJhci5kaXNhYmxlUmlwcGxlfHwhIXRoaXMucmlwcGxlQ29uZmlnLmRpc2FibGVkfWZvY3VzKCl7dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9mb2N1c01vbml0b3IubW9uaXRvcih0aGlzLmVsZW1lbnRSZWYpfW5nT25EZXN0cm95KCl7dGhpcy5fZm9jdXNNb25pdG9yLnN0b3BNb25pdG9yaW5nKHRoaXMuZWxlbWVudFJlZil9fUlCLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxJQikoTXUoUkIpLE11KGNoKSxNdShkSCw4KSxPcigidGFiaW5kZXgiKSxNdShweiksTXUoTncsOCkpfSxJQi7JtWRpcj1Kbyh7dHlwZTpJQixpbnB1dHM6e2FjdGl2ZToiYWN0aXZlIn0sZmVhdHVyZXM6W2dtXX0pLElCLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6UkJ9LHt0eXBlOmNofSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W2RIXX1dfSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6UnIsYXJnczpbInRhYmluZGV4Il19XX0se3R5cGU6cHp9LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbTnddfV19XSxJQi5wcm9wRGVjb3JhdG9ycz17YWN0aXZlOlt7dHlwZTp5X31dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKElCLFt7dHlwZTpnX31dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpSQn0se3R5cGU6Y2h9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbZEhdfV19LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpScixhcmdzOlsidGFiaW5kZXgiXX1dfSx7dHlwZTpwen0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltOd119XX1dfSkse2FjdGl2ZTpbe3R5cGU6eV99XX0pO2NsYXNzIHpCIGV4dGVuZHMgSUJ7Y29uc3RydWN0b3IodCxlLG4sbyxpLGEscixzKXtzdXBlcih0LGUsaSxhLHIscyksdGhpcy5fdGFiTGlua1JpcHBsZT1uZXcgY0godGhpcyxuLGUsbyksdGhpcy5fdGFiTGlua1JpcHBsZS5zZXR1cFRyaWdnZXJFdmVudHMoZS5uYXRpdmVFbGVtZW50KX1uZ09uRGVzdHJveSgpe3N1cGVyLm5nT25EZXN0cm95KCksdGhpcy5fdGFiTGlua1JpcHBsZS5fcmVtb3ZlVHJpZ2dlckV2ZW50cygpfX16Qi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8ekIpKE11KFRCKSxNdShjaCksTXUodEMpLE11KGZJKSxNdShkSCw4KSxPcigidGFiaW5kZXgiKSxNdShweiksTXUoTncsOCkpfSx6Qi7JtWRpcj1Kbyh7dHlwZTp6QixzZWxlY3RvcnM6W1siIiwibWF0LXRhYi1saW5rIiwiIl0sWyIiLCJtYXRUYWJMaW5rIiwiIl1dLGhvc3RBdHRyczpbMSwibWF0LXRhYi1saW5rIiwibWF0LWZvY3VzLWluZGljYXRvciJdLGhvc3RWYXJzOjcsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsyJmUmJihObSgiYXJpYS1jdXJyZW50IixuLmFjdGl2ZT8icGFnZSI6bnVsbCkoImFyaWEtZGlzYWJsZWQiLG4uZGlzYWJsZWQpKCJ0YWJJbmRleCIsbi50YWJJbmRleCksYWYoIm1hdC10YWItZGlzYWJsZWQiLG4uZGlzYWJsZWQpKCJtYXQtdGFiLWxhYmVsLWFjdGl2ZSIsbi5hY3RpdmUpKX0saW5wdXRzOntkaXNhYmxlZDoiZGlzYWJsZWQiLGRpc2FibGVSaXBwbGU6ImRpc2FibGVSaXBwbGUiLHRhYkluZGV4OiJ0YWJJbmRleCJ9LGV4cG9ydEFzOlsibWF0VGFiTGluayJdLGZlYXR1cmVzOltnbV19KSx6Qi5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOlRCfSx7dHlwZTpjaH0se3R5cGU6dEN9LHt0eXBlOmZJfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W2RIXX1dfSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6UnIsYXJnczpbInRhYmluZGV4Il19XX0se3R5cGU6cHp9LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbTnddfV19XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHpCLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6IlttYXQtdGFiLWxpbmtdLCBbbWF0VGFiTGlua10iLGV4cG9ydEFzOiJtYXRUYWJMaW5rIixpbnB1dHM6WyJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCJdLGhvc3Q6e2NsYXNzOiJtYXQtdGFiLWxpbmsgbWF0LWZvY3VzLWluZGljYXRvciIsIlthdHRyLmFyaWEtY3VycmVudF0iOidhY3RpdmUgPyAicGFnZSIgOiBudWxsJywiW2F0dHIuYXJpYS1kaXNhYmxlZF0iOiJkaXNhYmxlZCIsIlthdHRyLnRhYkluZGV4XSI6InRhYkluZGV4IiwiW2NsYXNzLm1hdC10YWItZGlzYWJsZWRdIjoiZGlzYWJsZWQiLCJbY2xhc3MubWF0LXRhYi1sYWJlbC1hY3RpdmVdIjoiYWN0aXZlIn19XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpUQn0se3R5cGU6Y2h9LHt0eXBlOnRDfSx7dHlwZTpmSX0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltkSF19XX0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOlJyLGFyZ3M6WyJ0YWJpbmRleCJdfV19LHt0eXBlOnB6fSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W053XX1dfV19KSxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIEhCe31IQi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8SEIpfSxIQi7JtW1vZD1abyh7dHlwZTpIQn0pLEhCLsm1aW5qPWNvKHtpbXBvcnRzOltbQnYsVHoseUYsbUgsREkseXpdLFR6XX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oSEIse2RlY2xhcmF0aW9uczpmdW5jdGlvbigpe3JldHVybltQQixwQixnQixzQixrQixUQix6QixfQixiQixBQixjQl19LGltcG9ydHM6ZnVuY3Rpb24oKXtyZXR1cm5bQnYsVHoseUYsbUgsREkseXpdfSxleHBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW1R6LFBCLHBCLGdCLFRCLHpCLGNCXX19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEhCLFt7dHlwZTprXyxhcmdzOlt7aW1wb3J0czpbQnYsVHoseUYsbUgsREkseXpdLGV4cG9ydHM6W1R6LFBCLHBCLGdCLFRCLHpCLGNCXSxkZWNsYXJhdGlvbnM6W1BCLHBCLGdCLHNCLGtCLFRCLHpCLF9CLGJCLEFCLGNCXX1dfV0sbnVsbCxudWxsKTtjb25zdCBGQj1bInVuZGVybGluZSJdLExCPVsiY29ubmVjdGlvbkNvbnRhaW5lciJdLEJCPVsiaW5wdXRDb250YWluZXIiXSxWQj1bImxhYmVsIl07ZnVuY3Rpb24gakIodCxlKXsxJnQmJihrdSgwKSxPdSgxLCJkaXYiLDE0KSx3dSgyLCJkaXYiLDE1KSx3dSgzLCJkaXYiLDE2KSx3dSg0LCJkaXYiLDE3KSxQdSgpLE91KDUsImRpdiIsMTgpLHd1KDYsImRpdiIsMTUpLHd1KDcsImRpdiIsMTYpLHd1KDgsImRpdiIsMTcpLFB1KCksU3UoKSl9ZnVuY3Rpb24gVUIodCxlKXsxJnQmJihPdSgwLCJkaXYiLDE5KSxqdSgxLDEpLFB1KCkpfWZ1bmN0aW9uIFdCKHQsZSl7aWYoMSZ0JiYoa3UoMCksanUoMSwyKSxPdSgyLCJzcGFuIiksTWYoMyksUHUoKSxTdSgpKSwyJnQpe2NvbnN0IHQ9THUoMik7SmMoMyksdmYodC5fY29udHJvbC5wbGFjZWhvbGRlcil9fWZ1bmN0aW9uIEdCKHQsZSl7MSZ0JiZqdSgwLDMsWyIqbmdTd2l0Y2hDYXNlIiwidHJ1ZSJdKX1mdW5jdGlvbiBZQih0LGUpezEmdCYmKE91KDAsInNwYW4iLDIzKSxNZigxLCIgKiIpLFB1KCkpfWZ1bmN0aW9uIHFCKHQsZSl7aWYoMSZ0KXtjb25zdCB0PUV1KCk7T3UoMCwibGFiZWwiLDIwLDIxKSxOdSgiY2RrT2JzZXJ2ZUNvbnRlbnQiLChmdW5jdGlvbiBlKCl7cmV0dXJuIHJhKHQpLEx1KCkudXBkYXRlT3V0bGluZUdhcCgpfSkpLFdtKDIsV0IsNCwxLCJuZy1jb250YWluZXIiLDEyKSxXbSgzLEdCLDEsMCwibmctY29udGVudCIsMTIpLFdtKDQsWUIsMiwwLCJzcGFuIiwyMiksUHUoKX1pZigyJnQpe2NvbnN0IHQ9THUoKTthZigibWF0LWVtcHR5Iix0Ll9jb250cm9sLmVtcHR5JiYhdC5fc2hvdWxkQWx3YXlzRmxvYXQoKSkoIm1hdC1mb3JtLWZpZWxkLWVtcHR5Iix0Ll9jb250cm9sLmVtcHR5JiYhdC5fc2hvdWxkQWx3YXlzRmxvYXQoKSkoIm1hdC1hY2NlbnQiLCJhY2NlbnQiPT10LmNvbG9yKSgibWF0LXdhcm4iLCJ3YXJuIj09dC5jb2xvciksdnUoImNka09ic2VydmVDb250ZW50RGlzYWJsZWQiLCJvdXRsaW5lIiE9dC5hcHBlYXJhbmNlKSgiaWQiLHQuX2xhYmVsSWQpKCJuZ1N3aXRjaCIsdC5faGFzTGFiZWwoKSksTm0oImZvciIsdC5fY29udHJvbC5pZCkoImFyaWEtb3ducyIsdC5fY29udHJvbC5pZCksSmMoMiksdnUoIm5nU3dpdGNoQ2FzZSIsITEpLEpjKDEpLHZ1KCJuZ1N3aXRjaENhc2UiLCEwKSxKYygxKSx2dSgibmdJZiIsIXQuaGlkZVJlcXVpcmVkTWFya2VyJiZ0Ll9jb250cm9sLnJlcXVpcmVkJiYhdC5fY29udHJvbC5kaXNhYmxlZCl9fWZ1bmN0aW9uIFpCKHQsZSl7MSZ0JiYoT3UoMCwiZGl2IiwyNCksanUoMSw0KSxQdSgpKX1mdW5jdGlvbiBYQih0LGUpe2lmKDEmdCYmKE91KDAsImRpdiIsMjUsMjYpLHd1KDIsInNwYW4iLDI3KSxQdSgpKSwyJnQpe2NvbnN0IHQ9THUoKTtKYygyKSxhZigibWF0LWFjY2VudCIsImFjY2VudCI9PXQuY29sb3IpKCJtYXQtd2FybiIsIndhcm4iPT10LmNvbG9yKX19ZnVuY3Rpb24gS0IodCxlKXsxJnQmJihPdSgwLCJkaXYiKSxqdSgxLDUpLFB1KCkpLDImdCYmdnUoIkB0cmFuc2l0aW9uTWVzc2FnZXMiLEx1KCkuX3N1YnNjcmlwdEFuaW1hdGlvblN0YXRlKX1mdW5jdGlvbiBKQih0LGUpe2lmKDEmdCYmKE91KDAsImRpdiIsMzEpLE1mKDEpLFB1KCkpLDImdCl7Y29uc3QgdD1MdSgyKTt2dSgiaWQiLHQuX2hpbnRMYWJlbElkKSxKYygxKSx2Zih0LmhpbnRMYWJlbCl9fWZ1bmN0aW9uIFFCKHQsZSl7aWYoMSZ0JiYoT3UoMCwiZGl2IiwyOCksV20oMSxKQiwyLDIsImRpdiIsMjkpLGp1KDIsNiksd3UoMywiZGl2IiwzMCksanUoNCw3KSxQdSgpKSwyJnQpe2NvbnN0IHQ9THUoKTt2dSgiQHRyYW5zaXRpb25NZXNzYWdlcyIsdC5fc3Vic2NyaXB0QW5pbWF0aW9uU3RhdGUpLEpjKDEpLHZ1KCJuZ0lmIix0LmhpbnRMYWJlbCl9fWNvbnN0ICRCPVsiKiIsW1siIiwibWF0UHJlZml4IiwiIl1dLFtbIm1hdC1wbGFjZWhvbGRlciJdXSxbWyJtYXQtbGFiZWwiXV0sW1siIiwibWF0U3VmZml4IiwiIl1dLFtbIm1hdC1lcnJvciJdXSxbWyJtYXQtaGludCIsMywiYWxpZ24iLCJlbmQiXV0sW1sibWF0LWhpbnQiLCJhbGlnbiIsImVuZCJdXV07bGV0IHRWPTA7Y29uc3QgZVY9bmV3IE5yKCJNYXRFcnJvciIpO2NsYXNzIG5We2NvbnN0cnVjdG9yKCl7dGhpcy5pZD0ibWF0LWVycm9yLSIrdFYrK319blYuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fG5WKX0sblYuybVkaXI9Sm8oe3R5cGU6blYsc2VsZWN0b3JzOltbIm1hdC1lcnJvciJdXSxob3N0QXR0cnM6WyJyb2xlIiwiYWxlcnQiLDEsIm1hdC1lcnJvciJdLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsyJmUmJk5tKCJpZCIsbi5pZCl9LGlucHV0czp7aWQ6ImlkIn0sZmVhdHVyZXM6W2loKFt7cHJvdmlkZTplVix1c2VFeGlzdGluZzpuVn1dKV19KSxuVi5wcm9wRGVjb3JhdG9ycz17aWQ6W3t0eXBlOnlffV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoblYsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoibWF0LWVycm9yIixob3N0OntjbGFzczoibWF0LWVycm9yIixyb2xlOiJhbGVydCIsIlthdHRyLmlkXSI6ImlkIn0scHJvdmlkZXJzOlt7cHJvdmlkZTplVix1c2VFeGlzdGluZzpuVn1dfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5bXX0pLHtpZDpbe3R5cGU6eV99XX0pOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3Qgb1Y9e3RyYW5zaXRpb25NZXNzYWdlczpLeCgidHJhbnNpdGlvbk1lc3NhZ2VzIixbdE8oImVudGVyIiwkeCh7b3BhY2l0eToxLHRyYW5zZm9ybToidHJhbnNsYXRlWSgwJSkifSkpLG5PKCJ2b2lkID0+IGVudGVyIixbJHgoe29wYWNpdHk6MCx0cmFuc2Zvcm06InRyYW5zbGF0ZVkoLTVweCkifSksSngoIjMwMG1zIGN1YmljLWJlemllcigwLjU1LCAwLCAwLjU1LCAwLjIpIildKV0pfTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY2xhc3MgaVZ7fWZ1bmN0aW9uIGFWKHQpe3JldHVybiBFcnJvcihgQSBoaW50IHdhcyBhbHJlYWR5IGRlY2xhcmVkIGZvciAnYWxpZ249IiR7dH0iJy5gKX1pVi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8aVYpfSxpVi7JtWRpcj1Kbyh7dHlwZTppVn0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoaVYsW3t0eXBlOmdffV0sbnVsbCxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmxldCByVj0wO2NvbnN0IHNWPW5ldyBOcigiTWF0SGludCIpO2NsYXNzIGxWe2NvbnN0cnVjdG9yKCl7dGhpcy5hbGlnbj0ic3RhcnQiLHRoaXMuaWQ9Im1hdC1oaW50LSIrclYrK319bFYuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGxWKX0sbFYuybVkaXI9Sm8oe3R5cGU6bFYsc2VsZWN0b3JzOltbIm1hdC1oaW50Il1dLGhvc3RBdHRyczpbMSwibWF0LWhpbnQiXSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MiZlJiYoTm0oImlkIixuLmlkKSgiYWxpZ24iLG51bGwpLGFmKCJtYXQtZm9ybS1maWVsZC1oaW50LWVuZCIsImVuZCI9PT1uLmFsaWduKSl9LGlucHV0czp7YWxpZ246ImFsaWduIixpZDoiaWQifSxmZWF0dXJlczpbaWgoW3twcm92aWRlOnNWLHVzZUV4aXN0aW5nOmxWfV0pXX0pLGxWLnByb3BEZWNvcmF0b3JzPXthbGlnbjpbe3R5cGU6eV99XSxpZDpbe3R5cGU6eV99XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihsVixbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJtYXQtaGludCIsaG9zdDp7Y2xhc3M6Im1hdC1oaW50IiwiW2NsYXNzLm1hdC1mb3JtLWZpZWxkLWhpbnQtZW5kXSI6J2FsaWduID09PSAiZW5kIicsIlthdHRyLmlkXSI6ImlkIiwiW2F0dHIuYWxpZ25dIjoibnVsbCJ9LHByb3ZpZGVyczpbe3Byb3ZpZGU6c1YsdXNlRXhpc3Rpbmc6bFZ9XX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW119KSx7YWxpZ246W3t0eXBlOnlffV0saWQ6W3t0eXBlOnlffV19KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIGNWe31jVi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8Y1YpfSxjVi7JtWRpcj1Kbyh7dHlwZTpjVixzZWxlY3RvcnM6W1sibWF0LWxhYmVsIl1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihjVixbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJtYXQtbGFiZWwifV19XSxudWxsLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3MgZFZ7fWRWLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxkVil9LGRWLsm1ZGlyPUpvKHt0eXBlOmRWLHNlbGVjdG9yczpbWyJtYXQtcGxhY2Vob2xkZXIiXV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGRWLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6Im1hdC1wbGFjZWhvbGRlciJ9XX1dLG51bGwsbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCBwVj1uZXcgTnIoIk1hdFByZWZpeCIpO2NsYXNzIG1We31tVi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8bVYpfSxtVi7JtWRpcj1Kbyh7dHlwZTptVixzZWxlY3RvcnM6W1siIiwibWF0UHJlZml4IiwiIl1dLGZlYXR1cmVzOltpaChbe3Byb3ZpZGU6cFYsdXNlRXhpc3Rpbmc6bVZ9XSldfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihtVixbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJbbWF0UHJlZml4XSIscHJvdmlkZXJzOlt7cHJvdmlkZTpwVix1c2VFeGlzdGluZzptVn1dfV19XSxudWxsLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3QgdVY9bmV3IE5yKCJNYXRTdWZmaXgiKTtjbGFzcyBmVnt9ZlYuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGZWKX0sZlYuybVkaXI9Sm8oe3R5cGU6ZlYsc2VsZWN0b3JzOltbIiIsIm1hdFN1ZmZpeCIsIiJdXSxmZWF0dXJlczpbaWgoW3twcm92aWRlOnVWLHVzZUV4aXN0aW5nOmZWfV0pXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoZlYsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoiW21hdFN1ZmZpeF0iLHByb3ZpZGVyczpbe3Byb3ZpZGU6dVYsdXNlRXhpc3Rpbmc6ZlZ9XX1dfV0sbnVsbCxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmxldCBnVj0wO2NvbnN0IGhWPUl6KGNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuX2VsZW1lbnRSZWY9dH19LCJwcmltYXJ5IiksYlY9bmV3IE5yKCJNQVRfRk9STV9GSUVMRF9ERUZBVUxUX09QVElPTlMiKSx5Vj1uZXcgTnIoIk1hdEZvcm1GaWVsZCIpO2NsYXNzIF9WIGV4dGVuZHMgaFZ7Y29uc3RydWN0b3IodCxlLG4sbyxpLGEscixzKXtzdXBlcih0KSx0aGlzLl9lbGVtZW50UmVmPXQsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9ZSx0aGlzLl9kaXI9byx0aGlzLl9kZWZhdWx0cz1pLHRoaXMuX3BsYXRmb3JtPWEsdGhpcy5fbmdab25lPXIsdGhpcy5fb3V0bGluZUdhcENhbGN1bGF0aW9uTmVlZGVkSW1tZWRpYXRlbHk9ITEsdGhpcy5fb3V0bGluZUdhcENhbGN1bGF0aW9uTmVlZGVkT25TdGFibGU9ITEsdGhpcy5fZGVzdHJveWVkPW5ldyB4LHRoaXMuX3Nob3dBbHdheXNBbmltYXRlPSExLHRoaXMuX3N1YnNjcmlwdEFuaW1hdGlvblN0YXRlPSIiLHRoaXMuX2hpbnRMYWJlbD0iIix0aGlzLl9oaW50TGFiZWxJZD0ibWF0LWhpbnQtIitnVisrLHRoaXMuX2xhYmVsSWQ9Im1hdC1mb3JtLWZpZWxkLWxhYmVsLSIrZ1YrKyx0aGlzLmZsb2F0TGFiZWw9dGhpcy5fZ2V0RGVmYXVsdEZsb2F0TGFiZWxTdGF0ZSgpLHRoaXMuX2FuaW1hdGlvbnNFbmFibGVkPSJOb29wQW5pbWF0aW9ucyIhPT1zLHRoaXMuYXBwZWFyYW5jZT1pJiZpLmFwcGVhcmFuY2U/aS5hcHBlYXJhbmNlOiJsZWdhY3kiLHRoaXMuX2hpZGVSZXF1aXJlZE1hcmtlcj0hKCFpfHxudWxsPT1pLmhpZGVSZXF1aXJlZE1hcmtlcikmJmkuaGlkZVJlcXVpcmVkTWFya2VyfWdldCBhcHBlYXJhbmNlKCl7cmV0dXJuIHRoaXMuX2FwcGVhcmFuY2V9c2V0IGFwcGVhcmFuY2UodCl7Y29uc3QgZT10aGlzLl9hcHBlYXJhbmNlO3RoaXMuX2FwcGVhcmFuY2U9dHx8dGhpcy5fZGVmYXVsdHMmJnRoaXMuX2RlZmF1bHRzLmFwcGVhcmFuY2V8fCJsZWdhY3kiLCJvdXRsaW5lIj09PXRoaXMuX2FwcGVhcmFuY2UmJmUhPT10JiYodGhpcy5fb3V0bGluZUdhcENhbGN1bGF0aW9uTmVlZGVkT25TdGFibGU9ITApfWdldCBoaWRlUmVxdWlyZWRNYXJrZXIoKXtyZXR1cm4gdGhpcy5faGlkZVJlcXVpcmVkTWFya2VyfXNldCBoaWRlUmVxdWlyZWRNYXJrZXIodCl7dGhpcy5faGlkZVJlcXVpcmVkTWFya2VyPXJJKHQpfV9zaG91bGRBbHdheXNGbG9hdCgpe3JldHVybiJhbHdheXMiPT09dGhpcy5mbG9hdExhYmVsJiYhdGhpcy5fc2hvd0Fsd2F5c0FuaW1hdGV9X2NhbkxhYmVsRmxvYXQoKXtyZXR1cm4ibmV2ZXIiIT09dGhpcy5mbG9hdExhYmVsfWdldCBoaW50TGFiZWwoKXtyZXR1cm4gdGhpcy5faGludExhYmVsfXNldCBoaW50TGFiZWwodCl7dGhpcy5faGludExhYmVsPXQsdGhpcy5fcHJvY2Vzc0hpbnRzKCl9Z2V0IGZsb2F0TGFiZWwoKXtyZXR1cm4ibGVnYWN5IiE9PXRoaXMuYXBwZWFyYW5jZSYmIm5ldmVyIj09PXRoaXMuX2Zsb2F0TGFiZWw/ImF1dG8iOnRoaXMuX2Zsb2F0TGFiZWx9c2V0IGZsb2F0TGFiZWwodCl7dCE9PXRoaXMuX2Zsb2F0TGFiZWwmJih0aGlzLl9mbG9hdExhYmVsPXR8fHRoaXMuX2dldERlZmF1bHRGbG9hdExhYmVsU3RhdGUoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9Z2V0IF9jb250cm9sKCl7cmV0dXJuIHRoaXMuX2V4cGxpY2l0Rm9ybUZpZWxkQ29udHJvbHx8dGhpcy5fY29udHJvbE5vblN0YXRpY3x8dGhpcy5fY29udHJvbFN0YXRpY31zZXQgX2NvbnRyb2wodCl7dGhpcy5fZXhwbGljaXRGb3JtRmllbGRDb250cm9sPXR9Z2V0TGFiZWxJZCgpe3JldHVybiB0aGlzLl9oYXNGbG9hdGluZ0xhYmVsKCk/dGhpcy5fbGFiZWxJZDpudWxsfWdldENvbm5lY3RlZE92ZXJsYXlPcmlnaW4oKXtyZXR1cm4gdGhpcy5fY29ubmVjdGlvbkNvbnRhaW5lclJlZnx8dGhpcy5fZWxlbWVudFJlZn1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLl92YWxpZGF0ZUNvbnRyb2xDaGlsZCgpO2NvbnN0IHQ9dGhpcy5fY29udHJvbDt0LmNvbnRyb2xUeXBlJiZ0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZChgbWF0LWZvcm0tZmllbGQtdHlwZS0ke3QuY29udHJvbFR5cGV9YCksdC5zdGF0ZUNoYW5nZXMucGlwZShjbihudWxsKSkuc3Vic2NyaWJlKCgoKT0+e3RoaXMuX3ZhbGlkYXRlUGxhY2Vob2xkZXJzKCksdGhpcy5fc3luY0Rlc2NyaWJlZEJ5SWRzKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KSksdC5uZ0NvbnRyb2wmJnQubmdDb250cm9sLnZhbHVlQ2hhbmdlcyYmdC5uZ0NvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUodW4odGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgoKT0+dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpKSx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCgpPT57dGhpcy5fbmdab25lLm9uU3RhYmxlLnBpcGUodW4odGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgoKT0+e3RoaXMuX291dGxpbmVHYXBDYWxjdWxhdGlvbk5lZWRlZE9uU3RhYmxlJiZ0aGlzLnVwZGF0ZU91dGxpbmVHYXAoKX0pKX0pKSxXdCh0aGlzLl9wcmVmaXhDaGlsZHJlbi5jaGFuZ2VzLHRoaXMuX3N1ZmZpeENoaWxkcmVuLmNoYW5nZXMpLnN1YnNjcmliZSgoKCk9Pnt0aGlzLl9vdXRsaW5lR2FwQ2FsY3VsYXRpb25OZWVkZWRPblN0YWJsZT0hMCx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pKSx0aGlzLl9oaW50Q2hpbGRyZW4uY2hhbmdlcy5waXBlKGNuKG51bGwpKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5fcHJvY2Vzc0hpbnRzKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KSksdGhpcy5fZXJyb3JDaGlsZHJlbi5jaGFuZ2VzLnBpcGUoY24obnVsbCkpLnN1YnNjcmliZSgoKCk9Pnt0aGlzLl9zeW5jRGVzY3JpYmVkQnlJZHMoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pKSx0aGlzLl9kaXImJnRoaXMuX2Rpci5jaGFuZ2UucGlwZSh1bih0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCgpPT57ImZ1bmN0aW9uIj09dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZT90aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCgpPT57cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgoKT0+dGhpcy51cGRhdGVPdXRsaW5lR2FwKCkpKX0pKTp0aGlzLnVwZGF0ZU91dGxpbmVHYXAoKX0pKX1uZ0FmdGVyQ29udGVudENoZWNrZWQoKXt0aGlzLl92YWxpZGF0ZUNvbnRyb2xDaGlsZCgpLHRoaXMuX291dGxpbmVHYXBDYWxjdWxhdGlvbk5lZWRlZEltbWVkaWF0ZWx5JiZ0aGlzLnVwZGF0ZU91dGxpbmVHYXAoKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9zdWJzY3JpcHRBbmltYXRpb25TdGF0ZT0iZW50ZXIiLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKX1uZ09uRGVzdHJveSgpe3RoaXMuX2Rlc3Ryb3llZC5uZXh0KCksdGhpcy5fZGVzdHJveWVkLmNvbXBsZXRlKCl9X3Nob3VsZEZvcndhcmQodCl7Y29uc3QgZT10aGlzLl9jb250cm9sP3RoaXMuX2NvbnRyb2wubmdDb250cm9sOm51bGw7cmV0dXJuIGUmJmVbdF19X2hhc1BsYWNlaG9sZGVyKCl7cmV0dXJuISEodGhpcy5fY29udHJvbCYmdGhpcy5fY29udHJvbC5wbGFjZWhvbGRlcnx8dGhpcy5fcGxhY2Vob2xkZXJDaGlsZCl9X2hhc0xhYmVsKCl7cmV0dXJuISghdGhpcy5fbGFiZWxDaGlsZE5vblN0YXRpYyYmIXRoaXMuX2xhYmVsQ2hpbGRTdGF0aWMpfV9zaG91bGRMYWJlbEZsb2F0KCl7cmV0dXJuIHRoaXMuX2NhbkxhYmVsRmxvYXQoKSYmKHRoaXMuX2NvbnRyb2wmJnRoaXMuX2NvbnRyb2wuc2hvdWxkTGFiZWxGbG9hdHx8dGhpcy5fc2hvdWxkQWx3YXlzRmxvYXQoKSl9X2hpZGVDb250cm9sUGxhY2Vob2xkZXIoKXtyZXR1cm4ibGVnYWN5Ij09PXRoaXMuYXBwZWFyYW5jZSYmIXRoaXMuX2hhc0xhYmVsKCl8fHRoaXMuX2hhc0xhYmVsKCkmJiF0aGlzLl9zaG91bGRMYWJlbEZsb2F0KCl9X2hhc0Zsb2F0aW5nTGFiZWwoKXtyZXR1cm4gdGhpcy5faGFzTGFiZWwoKXx8ImxlZ2FjeSI9PT10aGlzLmFwcGVhcmFuY2UmJnRoaXMuX2hhc1BsYWNlaG9sZGVyKCl9X2dldERpc3BsYXllZE1lc3NhZ2VzKCl7cmV0dXJuIHRoaXMuX2Vycm9yQ2hpbGRyZW4mJnRoaXMuX2Vycm9yQ2hpbGRyZW4ubGVuZ3RoPjAmJnRoaXMuX2NvbnRyb2wuZXJyb3JTdGF0ZT8iZXJyb3IiOiJoaW50In1fYW5pbWF0ZUFuZExvY2tMYWJlbCgpe3RoaXMuX2hhc0Zsb2F0aW5nTGFiZWwoKSYmdGhpcy5fY2FuTGFiZWxGbG9hdCgpJiYodGhpcy5fYW5pbWF0aW9uc0VuYWJsZWQmJnRoaXMuX2xhYmVsJiYodGhpcy5fc2hvd0Fsd2F5c0FuaW1hdGU9ITAsVnQodGhpcy5fbGFiZWwubmF0aXZlRWxlbWVudCwidHJhbnNpdGlvbmVuZCIpLnBpcGUoTmUoMSkpLnN1YnNjcmliZSgoKCk9Pnt0aGlzLl9zaG93QWx3YXlzQW5pbWF0ZT0hMX0pKSksdGhpcy5mbG9hdExhYmVsPSJhbHdheXMiLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX1fdmFsaWRhdGVQbGFjZWhvbGRlcnMoKXtpZih0aGlzLl9jb250cm9sLnBsYWNlaG9sZGVyJiZ0aGlzLl9wbGFjZWhvbGRlckNoaWxkJiYoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkpCi8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwp0aHJvdyhmdW5jdGlvbiB0KCl7cmV0dXJuIEVycm9yKCJQbGFjZWhvbGRlciBhdHRyaWJ1dGUgYW5kIGNoaWxkIGVsZW1lbnQgd2VyZSBib3RoIHNwZWNpZmllZC4iKX0pKCl9X3Byb2Nlc3NIaW50cygpe3RoaXMuX3ZhbGlkYXRlSGludHMoKSx0aGlzLl9zeW5jRGVzY3JpYmVkQnlJZHMoKX1fdmFsaWRhdGVIaW50cygpe2lmKHRoaXMuX2hpbnRDaGlsZHJlbiYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpKXtsZXQgdCxlO3RoaXMuX2hpbnRDaGlsZHJlbi5mb3JFYWNoKChuPT57aWYoInN0YXJ0Ij09PW4uYWxpZ24pe2lmKHR8fHRoaXMuaGludExhYmVsKXRocm93IGFWKCJzdGFydCIpO3Q9bn1lbHNlIGlmKCJlbmQiPT09bi5hbGlnbil7aWYoZSl0aHJvdyBhVigiZW5kIik7ZT1ufX0pKX19X2dldERlZmF1bHRGbG9hdExhYmVsU3RhdGUoKXtyZXR1cm4gdGhpcy5fZGVmYXVsdHMmJnRoaXMuX2RlZmF1bHRzLmZsb2F0TGFiZWx8fCJhdXRvIn1fc3luY0Rlc2NyaWJlZEJ5SWRzKCl7aWYodGhpcy5fY29udHJvbCl7bGV0IHQ9W107aWYodGhpcy5fY29udHJvbC51c2VyQXJpYURlc2NyaWJlZEJ5JiYic3RyaW5nIj09dHlwZW9mIHRoaXMuX2NvbnRyb2wudXNlckFyaWFEZXNjcmliZWRCeSYmdC5wdXNoKC4uLnRoaXMuX2NvbnRyb2wudXNlckFyaWFEZXNjcmliZWRCeS5zcGxpdCgiICIpKSwiaGludCI9PT10aGlzLl9nZXREaXNwbGF5ZWRNZXNzYWdlcygpKXtjb25zdCBlPXRoaXMuX2hpbnRDaGlsZHJlbj90aGlzLl9oaW50Q2hpbGRyZW4uZmluZCgodD0+InN0YXJ0Ij09PXQuYWxpZ24pKTpudWxsLG49dGhpcy5faGludENoaWxkcmVuP3RoaXMuX2hpbnRDaGlsZHJlbi5maW5kKCh0PT4iZW5kIj09PXQuYWxpZ24pKTpudWxsO2U/dC5wdXNoKGUuaWQpOnRoaXMuX2hpbnRMYWJlbCYmdC5wdXNoKHRoaXMuX2hpbnRMYWJlbElkKSxuJiZ0LnB1c2gobi5pZCl9ZWxzZSB0aGlzLl9lcnJvckNoaWxkcmVuJiZ0LnB1c2goLi4udGhpcy5fZXJyb3JDaGlsZHJlbi5tYXAoKHQ9PnQuaWQpKSk7dGhpcy5fY29udHJvbC5zZXREZXNjcmliZWRCeUlkcyh0KX19X3ZhbGlkYXRlQ29udHJvbENoaWxkKCl7aWYoIXRoaXMuX2NvbnRyb2wmJigidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSl0aHJvdyhmdW5jdGlvbiB0KCl7cmV0dXJuIEVycm9yKCJtYXQtZm9ybS1maWVsZCBtdXN0IGNvbnRhaW4gYSBNYXRGb3JtRmllbGRDb250cm9sLiIpfSkoKX11cGRhdGVPdXRsaW5lR2FwKCl7Y29uc3QgdD10aGlzLl9sYWJlbD90aGlzLl9sYWJlbC5uYXRpdmVFbGVtZW50Om51bGw7aWYoIm91dGxpbmUiIT09dGhpcy5hcHBlYXJhbmNlfHwhdHx8IXQuY2hpbGRyZW4ubGVuZ3RofHwhdC50ZXh0Q29udGVudC50cmltKCkpcmV0dXJuO2lmKCF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpcmV0dXJuO2lmKCF0aGlzLl9pc0F0dGFjaGVkVG9ET00oKSlyZXR1cm4gdm9pZCh0aGlzLl9vdXRsaW5lR2FwQ2FsY3VsYXRpb25OZWVkZWRJbW1lZGlhdGVseT0hMCk7bGV0IGU9MCxuPTA7Y29uc3Qgbz10aGlzLl9jb25uZWN0aW9uQ29udGFpbmVyUmVmLm5hdGl2ZUVsZW1lbnQsaT1vLnF1ZXJ5U2VsZWN0b3JBbGwoIi5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0IiksYT1vLnF1ZXJ5U2VsZWN0b3JBbGwoIi5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcCIpO2lmKHRoaXMuX2xhYmVsJiZ0aGlzLl9sYWJlbC5uYXRpdmVFbGVtZW50LmNoaWxkcmVuLmxlbmd0aCl7Y29uc3QgaT1vLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKDA9PT1pLndpZHRoJiYwPT09aS5oZWlnaHQpcmV0dXJuIHRoaXMuX291dGxpbmVHYXBDYWxjdWxhdGlvbk5lZWRlZE9uU3RhYmxlPSEwLHZvaWQodGhpcy5fb3V0bGluZUdhcENhbGN1bGF0aW9uTmVlZGVkSW1tZWRpYXRlbHk9ITEpO2NvbnN0IGE9dGhpcy5fZ2V0U3RhcnRFbmQoaSkscj10LmNoaWxkcmVuLHM9dGhpcy5fZ2V0U3RhcnRFbmQoclswXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSk7bGV0IGw9MDtmb3IobGV0IHQ9MDt0PHIubGVuZ3RoO3QrKylsKz1yW3RdLm9mZnNldFdpZHRoO2U9TWF0aC5hYnMocy1hKS01LG49bD4wPy43NSpsKzEwOjB9Zm9yKGxldCB0PTA7dDxpLmxlbmd0aDt0KyspaVt0XS5zdHlsZS53aWR0aD1gJHtlfXB4YDtmb3IobGV0IHQ9MDt0PGEubGVuZ3RoO3QrKylhW3RdLnN0eWxlLndpZHRoPWAke259cHhgO3RoaXMuX291dGxpbmVHYXBDYWxjdWxhdGlvbk5lZWRlZE9uU3RhYmxlPXRoaXMuX291dGxpbmVHYXBDYWxjdWxhdGlvbk5lZWRlZEltbWVkaWF0ZWx5PSExfV9nZXRTdGFydEVuZCh0KXtyZXR1cm4gdGhpcy5fZGlyJiYicnRsIj09PXRoaXMuX2Rpci52YWx1ZT90LnJpZ2h0OnQubGVmdH1faXNBdHRhY2hlZFRvRE9NKCl7Y29uc3QgdD10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7aWYodC5nZXRSb290Tm9kZSl7Y29uc3QgZT10LmdldFJvb3ROb2RlKCk7cmV0dXJuIGUmJmUhPT10fXJldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY29udGFpbnModCl9fV9WLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxfVikoTXUoY2gpLE11KEhoKSxNdShjaCksTXUoTXosOCksTXUoYlYsOCksTXUoZkkpLE11KHRDKSxNdShOdyw4KSl9LF9WLsm1Y21wPVVvKHt0eXBlOl9WLHNlbGVjdG9yczpbWyJtYXQtZm9ybS1maWVsZCJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbiB0KGUsbixvKXtpZigxJmUmJihHYihvLGlWLDEpLEdiKG8saVYsMyksR2IobyxjViwxKSxHYihvLGNWLDMpLEdiKG8sZFYsMSksR2IobyxlViwxKSxHYihvLHNWLDEpLEdiKG8scFYsMSksR2Iobyx1ViwxKSksMiZlKXtsZXQgdDtVYih0PVliKCkpJiYobi5fY29udHJvbE5vblN0YXRpYz10LmZpcnN0KSxVYih0PVliKCkpJiYobi5fY29udHJvbFN0YXRpYz10LmZpcnN0KSxVYih0PVliKCkpJiYobi5fbGFiZWxDaGlsZE5vblN0YXRpYz10LmZpcnN0KSxVYih0PVliKCkpJiYobi5fbGFiZWxDaGlsZFN0YXRpYz10LmZpcnN0KSxVYih0PVliKCkpJiYobi5fcGxhY2Vob2xkZXJDaGlsZD10LmZpcnN0KSxVYih0PVliKCkpJiYobi5fZXJyb3JDaGlsZHJlbj10KSxVYih0PVliKCkpJiYobi5faGludENoaWxkcmVuPXQpLFViKHQ9WWIoKSkmJihuLl9wcmVmaXhDaGlsZHJlbj10KSxVYih0PVliKCkpJiYobi5fc3VmZml4Q2hpbGRyZW49dCl9fSx2aWV3UXVlcnk6ZnVuY3Rpb24gdChlLG4pe2lmKDEmZSYmKFdiKEZCLDEpLFdiKExCLDMpLFdiKEJCLDEpLFdiKFZCLDEpKSwyJmUpe2xldCB0O1ViKHQ9WWIoKSkmJihuLnVuZGVybGluZVJlZj10LmZpcnN0KSxVYih0PVliKCkpJiYobi5fY29ubmVjdGlvbkNvbnRhaW5lclJlZj10LmZpcnN0KSxVYih0PVliKCkpJiYobi5faW5wdXRDb250YWluZXJSZWY9dC5maXJzdCksVWIodD1ZYigpKSYmKG4uX2xhYmVsPXQuZmlyc3QpfX0saG9zdEF0dHJzOlsxLCJtYXQtZm9ybS1maWVsZCJdLGhvc3RWYXJzOjQwLGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MiZlJiZhZigibWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZCIsInN0YW5kYXJkIj09bi5hcHBlYXJhbmNlKSgibWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIiwiZmlsbCI9PW4uYXBwZWFyYW5jZSkoIm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSIsIm91dGxpbmUiPT1uLmFwcGVhcmFuY2UpKCJtYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSIsImxlZ2FjeSI9PW4uYXBwZWFyYW5jZSkoIm1hdC1mb3JtLWZpZWxkLWludmFsaWQiLG4uX2NvbnRyb2wuZXJyb3JTdGF0ZSkoIm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCIsbi5fY2FuTGFiZWxGbG9hdCgpKSgibWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IixuLl9zaG91bGRMYWJlbEZsb2F0KCkpKCJtYXQtZm9ybS1maWVsZC1oYXMtbGFiZWwiLG4uX2hhc0Zsb2F0aW5nTGFiZWwoKSkoIm1hdC1mb3JtLWZpZWxkLWhpZGUtcGxhY2Vob2xkZXIiLG4uX2hpZGVDb250cm9sUGxhY2Vob2xkZXIoKSkoIm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIixuLl9jb250cm9sLmRpc2FibGVkKSgibWF0LWZvcm0tZmllbGQtYXV0b2ZpbGxlZCIsbi5fY29udHJvbC5hdXRvZmlsbGVkKSgibWF0LWZvY3VzZWQiLG4uX2NvbnRyb2wuZm9jdXNlZCkoIm5nLXVudG91Y2hlZCIsbi5fc2hvdWxkRm9yd2FyZCgidW50b3VjaGVkIikpKCJuZy10b3VjaGVkIixuLl9zaG91bGRGb3J3YXJkKCJ0b3VjaGVkIikpKCJuZy1wcmlzdGluZSIsbi5fc2hvdWxkRm9yd2FyZCgicHJpc3RpbmUiKSkoIm5nLWRpcnR5IixuLl9zaG91bGRGb3J3YXJkKCJkaXJ0eSIpKSgibmctdmFsaWQiLG4uX3Nob3VsZEZvcndhcmQoInZhbGlkIikpKCJuZy1pbnZhbGlkIixuLl9zaG91bGRGb3J3YXJkKCJpbnZhbGlkIikpKCJuZy1wZW5kaW5nIixuLl9zaG91bGRGb3J3YXJkKCJwZW5kaW5nIikpKCJfbWF0LWFuaW1hdGlvbi1ub29wYWJsZSIsIW4uX2FuaW1hdGlvbnNFbmFibGVkKX0saW5wdXRzOntjb2xvcjoiY29sb3IiLGZsb2F0TGFiZWw6ImZsb2F0TGFiZWwiLGFwcGVhcmFuY2U6ImFwcGVhcmFuY2UiLGhpZGVSZXF1aXJlZE1hcmtlcjoiaGlkZVJlcXVpcmVkTWFya2VyIixoaW50TGFiZWw6ImhpbnRMYWJlbCJ9LGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl0sZmVhdHVyZXM6W2loKFt7cHJvdmlkZTp5Vix1c2VFeGlzdGluZzpfVn1dKSxnbV0sbmdDb250ZW50U2VsZWN0b3JzOlsiKiIsIlttYXRQcmVmaXhdIiwibWF0LXBsYWNlaG9sZGVyIiwibWF0LWxhYmVsIiwiW21hdFN1ZmZpeF0iLCJtYXQtZXJyb3IiLCJtYXQtaGludDpub3QoW2FsaWduPSdlbmQnXSkiLCJtYXQtaGludFthbGlnbj0nZW5kJ10iXSxkZWNsczoxNSx2YXJzOjgsY29uc3RzOltbMSwibWF0LWZvcm0tZmllbGQtd3JhcHBlciJdLFsxLCJtYXQtZm9ybS1maWVsZC1mbGV4IiwzLCJjbGljayJdLFsiY29ubmVjdGlvbkNvbnRhaW5lciIsIiJdLFs0LCJuZ0lmIl0sWyJjbGFzcyIsIm1hdC1mb3JtLWZpZWxkLXByZWZpeCIsNCwibmdJZiJdLFsxLCJtYXQtZm9ybS1maWVsZC1pbmZpeCJdLFsiaW5wdXRDb250YWluZXIiLCIiXSxbMSwibWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciJdLFsiY2xhc3MiLCJtYXQtZm9ybS1maWVsZC1sYWJlbCIsMywiY2RrT2JzZXJ2ZUNvbnRlbnREaXNhYmxlZCIsImlkIiwibWF0LWVtcHR5IiwibWF0LWZvcm0tZmllbGQtZW1wdHkiLCJtYXQtYWNjZW50IiwibWF0LXdhcm4iLCJuZ1N3aXRjaCIsImNka09ic2VydmVDb250ZW50Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCIsNCwibmdJZiJdLFsiY2xhc3MiLCJtYXQtZm9ybS1maWVsZC11bmRlcmxpbmUiLDQsIm5nSWYiXSxbMSwibWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXIiLDMsIm5nU3dpdGNoIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFsiY2xhc3MiLCJtYXQtZm9ybS1maWVsZC1oaW50LXdyYXBwZXIiLDQsIm5nU3dpdGNoQ2FzZSJdLFsxLCJtYXQtZm9ybS1maWVsZC1vdXRsaW5lIl0sWzEsIm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQiXSxbMSwibWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAiXSxbMSwibWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQiXSxbMSwibWF0LWZvcm0tZmllbGQtb3V0bGluZSIsIm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2siXSxbMSwibWF0LWZvcm0tZmllbGQtcHJlZml4Il0sWzEsIm1hdC1mb3JtLWZpZWxkLWxhYmVsIiwzLCJjZGtPYnNlcnZlQ29udGVudERpc2FibGVkIiwiaWQiLCJuZ1N3aXRjaCIsImNka09ic2VydmVDb250ZW50Il0sWyJsYWJlbCIsIiJdLFsiY2xhc3MiLCJtYXQtcGxhY2Vob2xkZXItcmVxdWlyZWQgbWF0LWZvcm0tZmllbGQtcmVxdWlyZWQtbWFya2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLDEsIm1hdC1wbGFjZWhvbGRlci1yZXF1aXJlZCIsIm1hdC1mb3JtLWZpZWxkLXJlcXVpcmVkLW1hcmtlciJdLFsxLCJtYXQtZm9ybS1maWVsZC1zdWZmaXgiXSxbMSwibWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lIl0sWyJ1bmRlcmxpbmUiLCIiXSxbMSwibWF0LWZvcm0tZmllbGQtcmlwcGxlIl0sWzEsIm1hdC1mb3JtLWZpZWxkLWhpbnQtd3JhcHBlciJdLFsiY2xhc3MiLCJtYXQtaGludCIsMywiaWQiLDQsIm5nSWYiXSxbMSwibWF0LWZvcm0tZmllbGQtaGludC1zcGFjZXIiXSxbMSwibWF0LWhpbnQiLDMsImlkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihWdSgkQiksT3UoMCwiZGl2IiwwKSxPdSgxLCJkaXYiLDEsMiksTnUoImNsaWNrIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5fY29udHJvbC5vbkNvbnRhaW5lckNsaWNrJiZuLl9jb250cm9sLm9uQ29udGFpbmVyQ2xpY2soZSl9KSksV20oMyxqQiw5LDAsIm5nLWNvbnRhaW5lciIsMyksV20oNCxVQiwyLDAsImRpdiIsNCksT3UoNSwiZGl2Iiw1LDYpLGp1KDcpLE91KDgsInNwYW4iLDcpLFdtKDkscUIsNSwxNiwibGFiZWwiLDgpLFB1KCksUHUoKSxXbSgxMCxaQiwyLDAsImRpdiIsOSksUHUoKSxXbSgxMSxYQiwzLDQsImRpdiIsMTApLE91KDEyLCJkaXYiLDExKSxXbSgxMyxLQiwyLDEsImRpdiIsMTIpLFdtKDE0LFFCLDUsMiwiZGl2IiwxMyksUHUoKSxQdSgpKSwyJmUmJihKYygzKSx2dSgibmdJZiIsIm91dGxpbmUiPT1uLmFwcGVhcmFuY2UpLEpjKDEpLHZ1KCJuZ0lmIixuLl9wcmVmaXhDaGlsZHJlbi5sZW5ndGgpLEpjKDUpLHZ1KCJuZ0lmIixuLl9oYXNGbG9hdGluZ0xhYmVsKCkpLEpjKDEpLHZ1KCJuZ0lmIixuLl9zdWZmaXhDaGlsZHJlbi5sZW5ndGgpLEpjKDEpLHZ1KCJuZ0lmIiwib3V0bGluZSIhPW4uYXBwZWFyYW5jZSksSmMoMSksdnUoIm5nU3dpdGNoIixuLl9nZXREaXNwbGF5ZWRNZXNzYWdlcygpKSxKYygxKSx2dSgibmdTd2l0Y2hDYXNlIiwiZXJyb3IiKSxKYygxKSx2dSgibmdTd2l0Y2hDYXNlIiwiaGludCIpKX0sZGlyZWN0aXZlczpbYXYsY3YsZHYsU0ldLHN0eWxlczpbIi5tYXQtZm9ybS1maWVsZHtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmxlZnR9W2Rpcj1ydGxdIC5tYXQtZm9ybS1maWVsZHt0ZXh0LWFsaWduOnJpZ2h0fS5tYXQtZm9ybS1maWVsZC13cmFwcGVye3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtZm9ybS1maWVsZC1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6YmFzZWxpbmU7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjEwMCV9Lm1hdC1mb3JtLWZpZWxkLXByZWZpeCwubWF0LWZvcm0tZmllbGQtc3VmZml4e3doaXRlLXNwYWNlOm5vd3JhcDtmbGV4Om5vbmU7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1mb3JtLWZpZWxkLWluZml4e2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246cmVsYXRpdmU7ZmxleDphdXRvO21pbi13aWR0aDowO3dpZHRoOjE4MHB4fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWluZml4e2JvcmRlci1pbWFnZTpsaW5lYXItZ3JhZGllbnQodHJhbnNwYXJlbnQsIHRyYW5zcGFyZW50KX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcntwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7Ym94LXNpemluZzpjb250ZW50LWJveDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO292ZXJmbG93OmhpZGRlbjtwb2ludGVyLWV2ZW50czpub25lfVtkaXI9cnRsXSAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcntsZWZ0OmF1dG87cmlnaHQ6MH0ubWF0LWZvcm0tZmllbGQtbGFiZWx7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO2ZvbnQ6aW5oZXJpdDtwb2ludGVyLWV2ZW50czpub25lO3dpZHRoOjEwMCU7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7b3ZlcmZsb3c6aGlkZGVuO3RyYW5zZm9ybS1vcmlnaW46MCAwO3RyYW5zaXRpb246dHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGNvbG9yIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLHdpZHRoIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO2Rpc3BsYXk6bm9uZX1bZGlyPXJ0bF0gLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybS1vcmlnaW46MTAwJSAwO2xlZnQ6YXV0bztyaWdodDowfS5tYXQtZm9ybS1maWVsZC1lbXB0eS5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWx7ZGlzcGxheTpibG9ja30ubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbDotd2Via2l0LWF1dG9maWxsKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtkaXNwbGF5Om5vbmV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbDotd2Via2l0LWF1dG9maWxsKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtkaXNwbGF5OmJsb2NrO3RyYW5zaXRpb246bm9uZX0ubWF0LWlucHV0LXNlcnZlcjpmb2N1cysubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1pbnB1dC1zZXJ2ZXJbcGxhY2Vob2xkZXJdOm5vdCg6cGxhY2Vob2xkZXItc2hvd24pKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtkaXNwbGF5Om5vbmV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcjpmb2N1cysubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcltwbGFjZWhvbGRlcl06bm90KDpwbGFjZWhvbGRlci1zaG93bikrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2Rpc3BsYXk6YmxvY2t9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsOm5vdCgubWF0LWZvcm0tZmllbGQtZW1wdHkpe3RyYW5zaXRpb246bm9uZX0ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjEwMCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2Zvcm06c2NhbGUzZCgxLCAxLjAwMDEsIDEpfS5tYXQtZm9ybS1maWVsZC1yaXBwbGV7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3dpZHRoOjEwMCU7dHJhbnNmb3JtLW9yaWdpbjo1MCU7dHJhbnNmb3JtOnNjYWxlWCgwLjUpO29wYWNpdHk6MDt0cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgMzAwbXMgY3ViaWMtYmV6aWVyKDAuNTUsIDAsIDAuNTUsIDAuMil9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUsLm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtvcGFjaXR5OjE7dHJhbnNmb3JtOm5vbmU7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gMzAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSksb3BhY2l0eSAxMDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxiYWNrZ3JvdW5kLWNvbG9yIDMwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcntwb3NpdGlvbjphYnNvbHV0ZTtib3gtc2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6MTAwJTtvdmVyZmxvdzpoaWRkZW59Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyIC5tYXQtaWNvbiwubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWljb257d2lkdGg6MWVtO2hlaWdodDoxZW07Zm9udC1zaXplOmluaGVyaXQ7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9Lm1hdC1mb3JtLWZpZWxkLWhpbnQtd3JhcHBlcntkaXNwbGF5OmZsZXh9Lm1hdC1mb3JtLWZpZWxkLWhpbnQtc3BhY2Vye2ZsZXg6MSAwIDFlbX0ubWF0LWVycm9ye2Rpc3BsYXk6YmxvY2t9Lm1hdC1mb3JtLWZpZWxkLWNvbnRyb2wtd3JhcHBlcntwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LWZvcm0tZmllbGQtaGludC1lbmR7b3JkZXI6MX0ubWF0LWZvcm0tZmllbGQuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWZvcm0tZmllbGQtcmlwcGxle3RyYW5zaXRpb246bm9uZX1cbiIsJy5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLWZsZXh7Ym9yZGVyLXJhZGl1czo0cHggNHB4IDAgMDtwYWRkaW5nOi43NWVtIC43NWVtIDAgLjc1ZW19LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1mbGV4e291dGxpbmU6c29saWQgMXB4fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZTo6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206MDtoZWlnaHQ6MXB4O3dpZHRoOjEwMCV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtcmlwcGxle2JvdHRvbTowO2hlaWdodDoycHh9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7aGVpZ2h0OjA7Ym9yZGVyLXRvcDpzb2xpZCAycHh9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbDpub3QoLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkKSAubWF0LWZvcm0tZmllbGQtZmxleDpob3Zlcn4ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7b3BhY2l0eToxO3RyYW5zZm9ybTpub25lO3RyYW5zaXRpb246b3BhY2l0eSA2MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlOm5vdCgubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQpIC5tYXQtZm9ybS1maWVsZC1mbGV4OmhvdmVyfi5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmUgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJ7cGFkZGluZzowIDFlbX1cbicsJy5tYXQtaW5wdXQtZWxlbWVudHtmb250OmluaGVyaXQ7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtjb2xvcjpjdXJyZW50Q29sb3I7Ym9yZGVyOm5vbmU7b3V0bGluZTpub25lO3BhZGRpbmc6MDttYXJnaW46MDt3aWR0aDoxMDAlO21heC13aWR0aDoxMDAlO3ZlcnRpY2FsLWFsaWduOmJvdHRvbTt0ZXh0LWFsaWduOmluaGVyaXQ7Ym94LXNpemluZzpjb250ZW50LWJveH0ubWF0LWlucHV0LWVsZW1lbnQ6LW1vei11aS1pbnZhbGlke2JveC1zaGFkb3c6bm9uZX0ubWF0LWlucHV0LWVsZW1lbnQ6Oi1tcy1jbGVhciwubWF0LWlucHV0LWVsZW1lbnQ6Oi1tcy1yZXZlYWx7ZGlzcGxheTpub25lfS5tYXQtaW5wdXQtZWxlbWVudCwubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtc2VhcmNoLWNhbmNlbC1idXR0b24sLm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uLC5tYXQtaW5wdXQtZWxlbWVudDo6LXdlYmtpdC1zZWFyY2gtcmVzdWx0cy1idXR0b24sLm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LXNlYXJjaC1yZXN1bHRzLWRlY29yYXRpb257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9Lm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LWNvbnRhY3RzLWF1dG8tZmlsbC1idXR0b24sLm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LWNhcHMtbG9jay1pbmRpY2F0b3IsLm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LWNyZWRlbnRpYWxzLWF1dG8tZmlsbC1idXR0b257dmlzaWJpbGl0eTpoaWRkZW59Lm1hdC1pbnB1dC1lbGVtZW50W3R5cGU9ZGF0ZV0sLm1hdC1pbnB1dC1lbGVtZW50W3R5cGU9ZGF0ZXRpbWVdLC5tYXQtaW5wdXQtZWxlbWVudFt0eXBlPWRhdGV0aW1lLWxvY2FsXSwubWF0LWlucHV0LWVsZW1lbnRbdHlwZT1tb250aF0sLm1hdC1pbnB1dC1lbGVtZW50W3R5cGU9d2Vla10sLm1hdC1pbnB1dC1lbGVtZW50W3R5cGU9dGltZV17bGluZS1oZWlnaHQ6MX0ubWF0LWlucHV0LWVsZW1lbnRbdHlwZT1kYXRlXTo6YWZ0ZXIsLm1hdC1pbnB1dC1lbGVtZW50W3R5cGU9ZGF0ZXRpbWVdOjphZnRlciwubWF0LWlucHV0LWVsZW1lbnRbdHlwZT1kYXRldGltZS1sb2NhbF06OmFmdGVyLC5tYXQtaW5wdXQtZWxlbWVudFt0eXBlPW1vbnRoXTo6YWZ0ZXIsLm1hdC1pbnB1dC1lbGVtZW50W3R5cGU9d2Vla106OmFmdGVyLC5tYXQtaW5wdXQtZWxlbWVudFt0eXBlPXRpbWVdOjphZnRlcntjb250ZW50OiIgIjt3aGl0ZS1zcGFjZTpwcmU7d2lkdGg6MXB4fS5tYXQtaW5wdXQtZWxlbWVudDo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbiwubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtY2FsZW5kYXItcGlja2VyLWluZGljYXRvciwubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtY2xlYXItYnV0dG9ue2ZvbnQtc2l6ZTouNzVlbX0ubWF0LWlucHV0LWVsZW1lbnQ6OnBsYWNlaG9sZGVyey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt0cmFuc2l0aW9uOmNvbG9yIDQwMG1zIDEzMy4zMzMzMzMzMzMzbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1pbnB1dC1lbGVtZW50OjpwbGFjZWhvbGRlcjotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7LW1zLXVzZXItc2VsZWN0OnRleHR9Lm1hdC1pbnB1dC1lbGVtZW50OjotbW96LXBsYWNlaG9sZGVyey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt0cmFuc2l0aW9uOmNvbG9yIDQwMG1zIDEzMy4zMzMzMzMzMzMzbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1pbnB1dC1lbGVtZW50OjotbW96LXBsYWNlaG9sZGVyOi1tcy1pbnB1dC1wbGFjZWhvbGRlcnstbXMtdXNlci1zZWxlY3Q6dGV4dH0ubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3RyYW5zaXRpb246Y29sb3IgNDAwbXMgMTMzLjMzMzMzMzMzMzNtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXI6LW1zLWlucHV0LXBsYWNlaG9sZGVyey1tcy11c2VyLXNlbGVjdDp0ZXh0fS5tYXQtaW5wdXQtZWxlbWVudDotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3RyYW5zaXRpb246Y29sb3IgNDAwbXMgMTMzLjMzMzMzMzMzMzNtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LWlucHV0LWVsZW1lbnQ6LW1zLWlucHV0LXBsYWNlaG9sZGVyOi1tcy1pbnB1dC1wbGFjZWhvbGRlcnstbXMtdXNlci1zZWxlY3Q6dGV4dH0ubWF0LWZvcm0tZmllbGQtaGlkZS1wbGFjZWhvbGRlciAubWF0LWlucHV0LWVsZW1lbnQ6OnBsYWNlaG9sZGVye2NvbG9yOnRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpub25lfS5tYXQtZm9ybS1maWVsZC1oaWRlLXBsYWNlaG9sZGVyIC5tYXQtaW5wdXQtZWxlbWVudDo6LW1vei1wbGFjZWhvbGRlcntjb2xvcjp0cmFuc3BhcmVudCAhaW1wb3J0YW50Oy13ZWJraXQtdGV4dC1maWxsLWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246bm9uZX0ubWF0LWZvcm0tZmllbGQtaGlkZS1wbGFjZWhvbGRlciAubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6dHJhbnNwYXJlbnQgIWltcG9ydGFudDstd2Via2l0LXRleHQtZmlsbC1jb2xvcjp0cmFuc3BhcmVudDt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1mb3JtLWZpZWxkLWhpZGUtcGxhY2Vob2xkZXIgLm1hdC1pbnB1dC1lbGVtZW50Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjp0cmFuc3BhcmVudCAhaW1wb3J0YW50Oy13ZWJraXQtdGV4dC1maWxsLWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246bm9uZX10ZXh0YXJlYS5tYXQtaW5wdXQtZWxlbWVudHtyZXNpemU6dmVydGljYWw7b3ZlcmZsb3c6YXV0b310ZXh0YXJlYS5tYXQtaW5wdXQtZWxlbWVudC5jZGstdGV4dGFyZWEtYXV0b3NpemV7cmVzaXplOm5vbmV9dGV4dGFyZWEubWF0LWlucHV0LWVsZW1lbnR7cGFkZGluZzoycHggMDttYXJnaW46LTJweCAwfXNlbGVjdC5tYXQtaW5wdXQtZWxlbWVudHstbW96LWFwcGVhcmFuY2U6bm9uZTstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTtwb3NpdGlvbjpyZWxhdGl2ZTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2Rpc3BsYXk6aW5saW5lLWZsZXg7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmctdG9wOjFlbTt0b3A6LTFlbTttYXJnaW4tYm90dG9tOi0xZW19c2VsZWN0Lm1hdC1pbnB1dC1lbGVtZW50OjotbXMtZXhwYW5ke2Rpc3BsYXk6bm9uZX1zZWxlY3QubWF0LWlucHV0LWVsZW1lbnQ6Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9c2VsZWN0Lm1hdC1pbnB1dC1lbGVtZW50Om5vdCg6ZGlzYWJsZWQpe2N1cnNvcjpwb2ludGVyfXNlbGVjdC5tYXQtaW5wdXQtZWxlbWVudDo6LW1zLXZhbHVle2NvbG9yOmluaGVyaXQ7YmFja2dyb3VuZDpub25lfS5tYXQtZm9jdXNlZCAuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIHNlbGVjdC5tYXQtaW5wdXQtZWxlbWVudDo6LW1zLXZhbHVle2NvbG9yOmluaGVyaXR9Lm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb250ZW50OiIiO3dpZHRoOjA7aGVpZ2h0OjA7Ym9yZGVyLWxlZnQ6NXB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yaWdodDo1cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXRvcDo1cHggc29saWQ7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtyaWdodDowO21hcmdpbi10b3A6LTIuNXB4O3BvaW50ZXItZXZlbnRzOm5vbmV9W2Rpcj1ydGxdIC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0IC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7cmlnaHQ6YXV0bztsZWZ0OjB9Lm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QgLm1hdC1pbnB1dC1lbGVtZW50e3BhZGRpbmctcmlnaHQ6MTVweH1bZGlyPXJ0bF0gLm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QgLm1hdC1pbnB1dC1lbGVtZW50e3BhZGRpbmctcmlnaHQ6MDtwYWRkaW5nLWxlZnQ6MTVweH0ubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdCAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcnttYXgtd2lkdGg6Y2FsYygxMDAlIC0gMTBweCl9Lm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7bWFyZ2luLXRvcDotNXB4fS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVye21hcmdpbi10b3A6LTEwcHh9XG4nLCIubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTpwZXJzcGVjdGl2ZSgxMDBweCk7LW1zLXRyYW5zZm9ybTpub25lfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbiwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb257d2lkdGg6MWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbi1idXR0b24sLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29uLWJ1dHRvbntmb250OmluaGVyaXQ7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLWJ1dHRvbiAubWF0LWljb24sLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29uLWJ1dHRvbiAubWF0LWljb257Zm9udC1zaXplOmluaGVyaXR9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7aGVpZ2h0OjFweH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2hlaWdodDowO2JvcmRlci10b3A6c29saWQgMXB4fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtcmlwcGxle3RvcDowO2hlaWdodDoycHg7b3ZlcmZsb3c6aGlkZGVufS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7aGVpZ2h0OjA7Ym9yZGVyLXRvcDpzb2xpZCAycHh9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1wb3NpdGlvbjowO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtib3JkZXItdG9wLXN0eWxlOmRvdHRlZDtib3JkZXItdG9wLXdpZHRoOjJweH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtaW52YWxpZDpub3QoLm1hdC1mb2N1c2VkKSAubWF0LWZvcm0tZmllbGQtcmlwcGxle2hlaWdodDoxcHh9XG4iLCIubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC13cmFwcGVye21hcmdpbjouMjVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLWZsZXh7cGFkZGluZzowIC43NWVtIDAgLjc1ZW07bWFyZ2luLXRvcDotMC4yNWVtO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLXByZWZpeCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1zdWZmaXh7dG9wOi4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmV7ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3RvcDouMjVlbTtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb2ludGVyLWV2ZW50czpub25lfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmR7Ym9yZGVyOjFweCBzb2xpZCBjdXJyZW50Q29sb3I7bWluLXdpZHRoOjVweH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0e2JvcmRlci1yYWRpdXM6NXB4IDAgMCA1cHg7Ym9yZGVyLXJpZ2h0LXN0eWxlOm5vbmV9W2Rpcj1ydGxdIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnR7Ym9yZGVyLXJpZ2h0LXN0eWxlOnNvbGlkO2JvcmRlci1sZWZ0LXN0eWxlOm5vbmU7Ym9yZGVyLXJhZGl1czowIDVweCA1cHggMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZHtib3JkZXItcmFkaXVzOjAgNXB4IDVweCAwO2JvcmRlci1sZWZ0LXN0eWxlOm5vbmU7ZmxleC1ncm93OjF9W2Rpcj1ydGxdIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5ke2JvcmRlci1sZWZ0LXN0eWxlOnNvbGlkO2JvcmRlci1yaWdodC1zdHlsZTpub25lO2JvcmRlci1yYWRpdXM6NXB4IDAgMCA1cHh9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXB7Ym9yZGVyLXJhZGl1czouMDAwMDAxcHg7Ym9yZGVyOjFweCBzb2xpZCBjdXJyZW50Q29sb3I7Ym9yZGVyLWxlZnQtc3R5bGU6bm9uZTtib3JkZXItcmlnaHQtc3R5bGU6bm9uZX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2Fwe2JvcmRlci10b3AtY29sb3I6dHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tvcGFjaXR5OjB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljayAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcHtib3JkZXItd2lkdGg6MnB4fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgMTAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljaywubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2t7b3BhY2l0eToxfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmU6bm90KC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCkgLm1hdC1mb3JtLWZpZWxkLWZsZXg6aG92ZXIgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmV7b3BhY2l0eTowO3RyYW5zaXRpb246b3BhY2l0eSA2MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lOm5vdCgubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQpIC5tYXQtZm9ybS1maWVsZC1mbGV4OmhvdmVyIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre29wYWNpdHk6MX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcntwYWRkaW5nOjAgMWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUuX21hdC1hbmltYXRpb24tbm9vcGFibGU6bm90KC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCkgLm1hdC1mb3JtLWZpZWxkLWZsZXg6aG92ZXJ+Lm1hdC1mb3JtLWZpZWxkLW91dGxpbmUsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZSwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0LC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5kLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2Fwe3RyYW5zaXRpb246bm9uZX1cbiIsIi5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtZm9ybS1maWVsZC1mbGV4e3BhZGRpbmctdG9wOi43NWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7aGVpZ2h0OjFweH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7aGVpZ2h0OjA7Ym9yZGVyLXRvcDpzb2xpZCAxcHh9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtib3R0b206MDtoZWlnaHQ6MnB4fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtoZWlnaHQ6MDtib3JkZXItdG9wOnNvbGlkIDJweH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JhY2tncm91bmQtcG9zaXRpb246MDtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtib3JkZXItdG9wLXN0eWxlOmRvdHRlZDtib3JkZXItdG9wLXdpZHRoOjJweH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZDpub3QoLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkKSAubWF0LWZvcm0tZmllbGQtZmxleDpob3Zlcn4ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7b3BhY2l0eToxO3RyYW5zZm9ybTpub25lO3RyYW5zaXRpb246b3BhY2l0eSA2MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZC5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZTpub3QoLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkKSAubWF0LWZvcm0tZmllbGQtZmxleDpob3Zlcn4ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7dHJhbnNpdGlvbjpub25lfVxuIl0sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbb1YudHJhbnNpdGlvbk1lc3NhZ2VzXX0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxfVi5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmNofSx7dHlwZTpIaH0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W2NoXX1dfSx7dHlwZTpNeixkZWNvcmF0b3JzOlt7dHlwZTpfc31dfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W2JWXX1dfSx7dHlwZTpmSX0se3R5cGU6dEN9LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbTnddfV19XSxfVi5wcm9wRGVjb3JhdG9ycz17YXBwZWFyYW5jZTpbe3R5cGU6eV99XSxoaWRlUmVxdWlyZWRNYXJrZXI6W3t0eXBlOnlffV0saGludExhYmVsOlt7dHlwZTp5X31dLGZsb2F0TGFiZWw6W3t0eXBlOnlffV0sdW5kZXJsaW5lUmVmOlt7dHlwZTpGcixhcmdzOlsidW5kZXJsaW5lIl19XSxfY29ubmVjdGlvbkNvbnRhaW5lclJlZjpbe3R5cGU6RnIsYXJnczpbImNvbm5lY3Rpb25Db250YWluZXIiLHtzdGF0aWM6ITB9XX1dLF9pbnB1dENvbnRhaW5lclJlZjpbe3R5cGU6RnIsYXJnczpbImlucHV0Q29udGFpbmVyIl19XSxfbGFiZWw6W3t0eXBlOkZyLGFyZ3M6WyJsYWJlbCJdfV0sX2NvbnRyb2xOb25TdGF0aWM6W3t0eXBlOkhyLGFyZ3M6W2lWXX1dLF9jb250cm9sU3RhdGljOlt7dHlwZTpIcixhcmdzOltpVix7c3RhdGljOiEwfV19XSxfbGFiZWxDaGlsZE5vblN0YXRpYzpbe3R5cGU6SHIsYXJnczpbY1ZdfV0sX2xhYmVsQ2hpbGRTdGF0aWM6W3t0eXBlOkhyLGFyZ3M6W2NWLHtzdGF0aWM6ITB9XX1dLF9wbGFjZWhvbGRlckNoaWxkOlt7dHlwZTpIcixhcmdzOltkVl19XSxfZXJyb3JDaGlsZHJlbjpbe3R5cGU6enIsYXJnczpbZVYse2Rlc2NlbmRhbnRzOiEwfV19XSxfaGludENoaWxkcmVuOlt7dHlwZTp6cixhcmdzOltzVix7ZGVzY2VuZGFudHM6ITB9XX1dLF9wcmVmaXhDaGlsZHJlbjpbe3R5cGU6enIsYXJnczpbcFYse2Rlc2NlbmRhbnRzOiEwfV19XSxfc3VmZml4Q2hpbGRyZW46W3t0eXBlOnpyLGFyZ3M6W3VWLHtkZXNjZW5kYW50czohMH1dfV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoX1YsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGV4cG9ydEFzOiJtYXRGb3JtRmllbGQiLHRlbXBsYXRlOic8ZGl2IGNsYXNzPSJtYXQtZm9ybS1maWVsZC13cmFwcGVyIj5cbiAgPGRpdiBjbGFzcz0ibWF0LWZvcm0tZmllbGQtZmxleCIgI2Nvbm5lY3Rpb25Db250YWluZXJcbiAgICAgICAoY2xpY2spPSJfY29udHJvbC5vbkNvbnRhaW5lckNsaWNrICYmIF9jb250cm9sLm9uQ29udGFpbmVyQ2xpY2soJGV2ZW50KSI+XG5cbiAgICBceDNjIS0tIE91dGxpbmUgdXNlZCBmb3Igb3V0bGluZSBhcHBlYXJhbmNlLiAtLVx4M2VcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPSJhcHBlYXJhbmNlID09IFwnb3V0bGluZVwnIj5cbiAgICAgIDxkaXYgY2xhc3M9Im1hdC1mb3JtLWZpZWxkLW91dGxpbmUiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJtYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0Ij48L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0ibWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAiPjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJtYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZCI+PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9Im1hdC1mb3JtLWZpZWxkLW91dGxpbmUgbWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljayI+XG4gICAgICAgIDxkaXYgY2xhc3M9Im1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQiPjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJtYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcCI+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9Im1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5kIj48L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPGRpdiBjbGFzcz0ibWF0LWZvcm0tZmllbGQtcHJlZml4IiAqbmdJZj0iX3ByZWZpeENoaWxkcmVuLmxlbmd0aCI+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9IlttYXRQcmVmaXhdIj48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPSJtYXQtZm9ybS1maWVsZC1pbmZpeCIgI2lucHV0Q29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuXG4gICAgICA8c3BhbiBjbGFzcz0ibWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciI+XG4gICAgICAgIFx4M2MhLS0gV2UgYWRkIGFyaWEtb3ducyBhcyBhIHdvcmthcm91bmQgZm9yIGFuIGlzc3VlIGluIEpBV1MgJiBOVkRBIHdoZXJlIHRoZSBsYWJlbCBpc25cJ3RcbiAgICAgICAgICAgICByZWFkIGlmIGl0IGNvbWVzIGJlZm9yZSB0aGUgY29udHJvbCBpbiB0aGUgRE9NLiAtLVx4M2VcbiAgICAgICAgPGxhYmVsIGNsYXNzPSJtYXQtZm9ybS1maWVsZC1sYWJlbCJcbiAgICAgICAgICAgICAgIChjZGtPYnNlcnZlQ29udGVudCk9InVwZGF0ZU91dGxpbmVHYXAoKSJcbiAgICAgICAgICAgICAgIFtjZGtPYnNlcnZlQ29udGVudERpc2FibGVkXT0iYXBwZWFyYW5jZSAhPSBcJ291dGxpbmVcJyJcbiAgICAgICAgICAgICAgIFtpZF09Il9sYWJlbElkIlxuICAgICAgICAgICAgICAgW2F0dHIuZm9yXT0iX2NvbnRyb2wuaWQiXG4gICAgICAgICAgICAgICBbYXR0ci5hcmlhLW93bnNdPSJfY29udHJvbC5pZCJcbiAgICAgICAgICAgICAgIFtjbGFzcy5tYXQtZW1wdHldPSJfY29udHJvbC5lbXB0eSAmJiAhX3Nob3VsZEFsd2F5c0Zsb2F0KCkiXG4gICAgICAgICAgICAgICBbY2xhc3MubWF0LWZvcm0tZmllbGQtZW1wdHldPSJfY29udHJvbC5lbXB0eSAmJiAhX3Nob3VsZEFsd2F5c0Zsb2F0KCkiXG4gICAgICAgICAgICAgICBbY2xhc3MubWF0LWFjY2VudF09ImNvbG9yID09IFwnYWNjZW50XCciXG4gICAgICAgICAgICAgICBbY2xhc3MubWF0LXdhcm5dPSJjb2xvciA9PSBcJ3dhcm5cJyJcbiAgICAgICAgICAgICAgICNsYWJlbFxuICAgICAgICAgICAgICAgKm5nSWY9Il9oYXNGbG9hdGluZ0xhYmVsKCkiXG4gICAgICAgICAgICAgICBbbmdTd2l0Y2hdPSJfaGFzTGFiZWwoKSI+XG5cbiAgICAgICAgICBceDNjIS0tIEBicmVha2luZy1jaGFuZ2UgOC4wLjAgcmVtb3ZlIGluIGZhdm9yIG9mIG1hdC1sYWJlbCBlbGVtZW50IGFuIHBsYWNlaG9sZGVyIGF0dHIuIC0tXHgzZVxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT0iZmFsc2UiPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PSJtYXQtcGxhY2Vob2xkZXIiPjwvbmctY29udGVudD5cbiAgICAgICAgICAgIDxzcGFuPnt7X2NvbnRyb2wucGxhY2Vob2xkZXJ9fTwvc3Bhbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD0ibWF0LWxhYmVsIiAqbmdTd2l0Y2hDYXNlPSJ0cnVlIj48L25nLWNvbnRlbnQ+XG5cbiAgICAgICAgICBceDNjIS0tIEBicmVha2luZy1jaGFuZ2UgOC4wLjAgcmVtb3ZlIGBtYXQtcGxhY2Vob2xkZXItcmVxdWlyZWRgIGNsYXNzIC0tXHgzZVxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBjbGFzcz0ibWF0LXBsYWNlaG9sZGVyLXJlcXVpcmVkIG1hdC1mb3JtLWZpZWxkLXJlcXVpcmVkLW1hcmtlciJcbiAgICAgICAgICAgIGFyaWEtaGlkZGVuPSJ0cnVlIlxuICAgICAgICAgICAgKm5nSWY9IiFoaWRlUmVxdWlyZWRNYXJrZXIgJiYgX2NvbnRyb2wucmVxdWlyZWQgJiYgIV9jb250cm9sLmRpc2FibGVkIj4mIzMyOyo8L3NwYW4+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPSJtYXQtZm9ybS1maWVsZC1zdWZmaXgiICpuZ0lmPSJfc3VmZml4Q2hpbGRyZW4ubGVuZ3RoIj5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD0iW21hdFN1ZmZpeF0iPjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgXHgzYyEtLSBVbmRlcmxpbmUgdXNlZCBmb3IgbGVnYWN5LCBzdGFuZGFyZCwgYW5kIGJveCBhcHBlYXJhbmNlcy4gLS1ceDNlXG4gIDxkaXYgY2xhc3M9Im1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSIgI3VuZGVybGluZVxuICAgICAgICpuZ0lmPSJhcHBlYXJhbmNlICE9IFwnb3V0bGluZVwnIj5cbiAgICA8c3BhbiBjbGFzcz0ibWF0LWZvcm0tZmllbGQtcmlwcGxlIlxuICAgICAgICAgIFtjbGFzcy5tYXQtYWNjZW50XT0iY29sb3IgPT0gXCdhY2NlbnRcJyJcbiAgICAgICAgICBbY2xhc3MubWF0LXdhcm5dPSJjb2xvciA9PSBcJ3dhcm5cJyI+PC9zcGFuPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPSJtYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlciJcbiAgICAgICBbbmdTd2l0Y2hdPSJfZ2V0RGlzcGxheWVkTWVzc2FnZXMoKSI+XG4gICAgPGRpdiAqbmdTd2l0Y2hDYXNlPSJcJ2Vycm9yXCciIFtAdHJhbnNpdGlvbk1lc3NhZ2VzXT0iX3N1YnNjcmlwdEFuaW1hdGlvblN0YXRlIj5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD0ibWF0LWVycm9yIj48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPSJtYXQtZm9ybS1maWVsZC1oaW50LXdyYXBwZXIiICpuZ1N3aXRjaENhc2U9IlwnaGludFwnIlxuICAgICAgW0B0cmFuc2l0aW9uTWVzc2FnZXNdPSJfc3Vic2NyaXB0QW5pbWF0aW9uU3RhdGUiPlxuICAgICAgXHgzYyEtLSBUT0RPKG1tYWxlcmJhKTogdXNlIGFuIGFjdHVhbCA8bWF0LWhpbnQ+IG9uY2UgYWxsIHNlbGVjdG9ycyBhcmUgc3dpdGNoZWQgdG8gbWF0LSogLS1ceDNlXG4gICAgICA8ZGl2ICpuZ0lmPSJoaW50TGFiZWwiIFtpZF09Il9oaW50TGFiZWxJZCIgY2xhc3M9Im1hdC1oaW50Ij57e2hpbnRMYWJlbH19PC9kaXY+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9Im1hdC1oaW50Om5vdChbYWxpZ249XCdlbmRcJ10pIj48L25nLWNvbnRlbnQ+XG4gICAgICA8ZGl2IGNsYXNzPSJtYXQtZm9ybS1maWVsZC1oaW50LXNwYWNlciI+PC9kaXY+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9Im1hdC1oaW50W2FsaWduPVwnZW5kXCddIj48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLGFuaW1hdGlvbnM6W29WLnRyYW5zaXRpb25NZXNzYWdlc10saG9zdDp7Y2xhc3M6Im1hdC1mb3JtLWZpZWxkIiwiW2NsYXNzLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmRdIjonYXBwZWFyYW5jZSA9PSAic3RhbmRhcmQiJywiW2NsYXNzLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbF0iOidhcHBlYXJhbmNlID09ICJmaWxsIicsIltjbGFzcy5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVdIjonYXBwZWFyYW5jZSA9PSAib3V0bGluZSInLCJbY2xhc3MubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3ldIjonYXBwZWFyYW5jZSA9PSAibGVnYWN5IicsIltjbGFzcy5tYXQtZm9ybS1maWVsZC1pbnZhbGlkXSI6Il9jb250cm9sLmVycm9yU3RhdGUiLCJbY2xhc3MubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0XSI6Il9jYW5MYWJlbEZsb2F0KCkiLCJbY2xhc3MubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0XSI6Il9zaG91bGRMYWJlbEZsb2F0KCkiLCJbY2xhc3MubWF0LWZvcm0tZmllbGQtaGFzLWxhYmVsXSI6Il9oYXNGbG9hdGluZ0xhYmVsKCkiLCJbY2xhc3MubWF0LWZvcm0tZmllbGQtaGlkZS1wbGFjZWhvbGRlcl0iOiJfaGlkZUNvbnRyb2xQbGFjZWhvbGRlcigpIiwiW2NsYXNzLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkXSI6Il9jb250cm9sLmRpc2FibGVkIiwiW2NsYXNzLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsZWRdIjoiX2NvbnRyb2wuYXV0b2ZpbGxlZCIsIltjbGFzcy5tYXQtZm9jdXNlZF0iOiJfY29udHJvbC5mb2N1c2VkIiwiW2NsYXNzLm5nLXVudG91Y2hlZF0iOidfc2hvdWxkRm9yd2FyZCgidW50b3VjaGVkIiknLCJbY2xhc3MubmctdG91Y2hlZF0iOidfc2hvdWxkRm9yd2FyZCgidG91Y2hlZCIpJywiW2NsYXNzLm5nLXByaXN0aW5lXSI6J19zaG91bGRGb3J3YXJkKCJwcmlzdGluZSIpJywiW2NsYXNzLm5nLWRpcnR5XSI6J19zaG91bGRGb3J3YXJkKCJkaXJ0eSIpJywiW2NsYXNzLm5nLXZhbGlkXSI6J19zaG91bGRGb3J3YXJkKCJ2YWxpZCIpJywiW2NsYXNzLm5nLWludmFsaWRdIjonX3Nob3VsZEZvcndhcmQoImludmFsaWQiKScsIltjbGFzcy5uZy1wZW5kaW5nXSI6J19zaG91bGRGb3J3YXJkKCJwZW5kaW5nIiknLCJbY2xhc3MuX21hdC1hbmltYXRpb24tbm9vcGFibGVdIjoiIV9hbmltYXRpb25zRW5hYmxlZCJ9LGlucHV0czpbImNvbG9yIl0sZW5jYXBzdWxhdGlvbjpQby5Ob25lLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2gscHJvdmlkZXJzOlt7cHJvdmlkZTp5Vix1c2VFeGlzdGluZzpfVn1dLHN0eWxlczpbIi5tYXQtZm9ybS1maWVsZHtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmxlZnR9W2Rpcj1ydGxdIC5tYXQtZm9ybS1maWVsZHt0ZXh0LWFsaWduOnJpZ2h0fS5tYXQtZm9ybS1maWVsZC13cmFwcGVye3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtZm9ybS1maWVsZC1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6YmFzZWxpbmU7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjEwMCV9Lm1hdC1mb3JtLWZpZWxkLXByZWZpeCwubWF0LWZvcm0tZmllbGQtc3VmZml4e3doaXRlLXNwYWNlOm5vd3JhcDtmbGV4Om5vbmU7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1mb3JtLWZpZWxkLWluZml4e2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246cmVsYXRpdmU7ZmxleDphdXRvO21pbi13aWR0aDowO3dpZHRoOjE4MHB4fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWluZml4e2JvcmRlci1pbWFnZTpsaW5lYXItZ3JhZGllbnQodHJhbnNwYXJlbnQsIHRyYW5zcGFyZW50KX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcntwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7Ym94LXNpemluZzpjb250ZW50LWJveDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO292ZXJmbG93OmhpZGRlbjtwb2ludGVyLWV2ZW50czpub25lfVtkaXI9cnRsXSAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcntsZWZ0OmF1dG87cmlnaHQ6MH0ubWF0LWZvcm0tZmllbGQtbGFiZWx7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO2ZvbnQ6aW5oZXJpdDtwb2ludGVyLWV2ZW50czpub25lO3dpZHRoOjEwMCU7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7b3ZlcmZsb3c6aGlkZGVuO3RyYW5zZm9ybS1vcmlnaW46MCAwO3RyYW5zaXRpb246dHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGNvbG9yIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLHdpZHRoIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO2Rpc3BsYXk6bm9uZX1bZGlyPXJ0bF0gLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybS1vcmlnaW46MTAwJSAwO2xlZnQ6YXV0bztyaWdodDowfS5tYXQtZm9ybS1maWVsZC1lbXB0eS5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWx7ZGlzcGxheTpibG9ja30ubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbDotd2Via2l0LWF1dG9maWxsKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtkaXNwbGF5Om5vbmV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbDotd2Via2l0LWF1dG9maWxsKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtkaXNwbGF5OmJsb2NrO3RyYW5zaXRpb246bm9uZX0ubWF0LWlucHV0LXNlcnZlcjpmb2N1cysubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1pbnB1dC1zZXJ2ZXJbcGxhY2Vob2xkZXJdOm5vdCg6cGxhY2Vob2xkZXItc2hvd24pKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtkaXNwbGF5Om5vbmV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcjpmb2N1cysubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcltwbGFjZWhvbGRlcl06bm90KDpwbGFjZWhvbGRlci1zaG93bikrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2Rpc3BsYXk6YmxvY2t9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsOm5vdCgubWF0LWZvcm0tZmllbGQtZW1wdHkpe3RyYW5zaXRpb246bm9uZX0ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjEwMCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2Zvcm06c2NhbGUzZCgxLCAxLjAwMDEsIDEpfS5tYXQtZm9ybS1maWVsZC1yaXBwbGV7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3dpZHRoOjEwMCU7dHJhbnNmb3JtLW9yaWdpbjo1MCU7dHJhbnNmb3JtOnNjYWxlWCgwLjUpO29wYWNpdHk6MDt0cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgMzAwbXMgY3ViaWMtYmV6aWVyKDAuNTUsIDAsIDAuNTUsIDAuMil9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUsLm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtvcGFjaXR5OjE7dHJhbnNmb3JtOm5vbmU7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gMzAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSksb3BhY2l0eSAxMDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxiYWNrZ3JvdW5kLWNvbG9yIDMwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcntwb3NpdGlvbjphYnNvbHV0ZTtib3gtc2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6MTAwJTtvdmVyZmxvdzpoaWRkZW59Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyIC5tYXQtaWNvbiwubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWljb257d2lkdGg6MWVtO2hlaWdodDoxZW07Zm9udC1zaXplOmluaGVyaXQ7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9Lm1hdC1mb3JtLWZpZWxkLWhpbnQtd3JhcHBlcntkaXNwbGF5OmZsZXh9Lm1hdC1mb3JtLWZpZWxkLWhpbnQtc3BhY2Vye2ZsZXg6MSAwIDFlbX0ubWF0LWVycm9ye2Rpc3BsYXk6YmxvY2t9Lm1hdC1mb3JtLWZpZWxkLWNvbnRyb2wtd3JhcHBlcntwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LWZvcm0tZmllbGQtaGludC1lbmR7b3JkZXI6MX0ubWF0LWZvcm0tZmllbGQuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWZvcm0tZmllbGQtcmlwcGxle3RyYW5zaXRpb246bm9uZX1cbiIsJy5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLWZsZXh7Ym9yZGVyLXJhZGl1czo0cHggNHB4IDAgMDtwYWRkaW5nOi43NWVtIC43NWVtIDAgLjc1ZW19LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1mbGV4e291dGxpbmU6c29saWQgMXB4fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZTo6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206MDtoZWlnaHQ6MXB4O3dpZHRoOjEwMCV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtcmlwcGxle2JvdHRvbTowO2hlaWdodDoycHh9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7aGVpZ2h0OjA7Ym9yZGVyLXRvcDpzb2xpZCAycHh9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbDpub3QoLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkKSAubWF0LWZvcm0tZmllbGQtZmxleDpob3Zlcn4ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7b3BhY2l0eToxO3RyYW5zZm9ybTpub25lO3RyYW5zaXRpb246b3BhY2l0eSA2MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlOm5vdCgubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQpIC5tYXQtZm9ybS1maWVsZC1mbGV4OmhvdmVyfi5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmUgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJ7cGFkZGluZzowIDFlbX1cbicsJy5tYXQtaW5wdXQtZWxlbWVudHtmb250OmluaGVyaXQ7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtjb2xvcjpjdXJyZW50Q29sb3I7Ym9yZGVyOm5vbmU7b3V0bGluZTpub25lO3BhZGRpbmc6MDttYXJnaW46MDt3aWR0aDoxMDAlO21heC13aWR0aDoxMDAlO3ZlcnRpY2FsLWFsaWduOmJvdHRvbTt0ZXh0LWFsaWduOmluaGVyaXQ7Ym94LXNpemluZzpjb250ZW50LWJveH0ubWF0LWlucHV0LWVsZW1lbnQ6LW1vei11aS1pbnZhbGlke2JveC1zaGFkb3c6bm9uZX0ubWF0LWlucHV0LWVsZW1lbnQ6Oi1tcy1jbGVhciwubWF0LWlucHV0LWVsZW1lbnQ6Oi1tcy1yZXZlYWx7ZGlzcGxheTpub25lfS5tYXQtaW5wdXQtZWxlbWVudCwubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtc2VhcmNoLWNhbmNlbC1idXR0b24sLm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uLC5tYXQtaW5wdXQtZWxlbWVudDo6LXdlYmtpdC1zZWFyY2gtcmVzdWx0cy1idXR0b24sLm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LXNlYXJjaC1yZXN1bHRzLWRlY29yYXRpb257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9Lm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LWNvbnRhY3RzLWF1dG8tZmlsbC1idXR0b24sLm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LWNhcHMtbG9jay1pbmRpY2F0b3IsLm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LWNyZWRlbnRpYWxzLWF1dG8tZmlsbC1idXR0b257dmlzaWJpbGl0eTpoaWRkZW59Lm1hdC1pbnB1dC1lbGVtZW50W3R5cGU9ZGF0ZV0sLm1hdC1pbnB1dC1lbGVtZW50W3R5cGU9ZGF0ZXRpbWVdLC5tYXQtaW5wdXQtZWxlbWVudFt0eXBlPWRhdGV0aW1lLWxvY2FsXSwubWF0LWlucHV0LWVsZW1lbnRbdHlwZT1tb250aF0sLm1hdC1pbnB1dC1lbGVtZW50W3R5cGU9d2Vla10sLm1hdC1pbnB1dC1lbGVtZW50W3R5cGU9dGltZV17bGluZS1oZWlnaHQ6MX0ubWF0LWlucHV0LWVsZW1lbnRbdHlwZT1kYXRlXTo6YWZ0ZXIsLm1hdC1pbnB1dC1lbGVtZW50W3R5cGU9ZGF0ZXRpbWVdOjphZnRlciwubWF0LWlucHV0LWVsZW1lbnRbdHlwZT1kYXRldGltZS1sb2NhbF06OmFmdGVyLC5tYXQtaW5wdXQtZWxlbWVudFt0eXBlPW1vbnRoXTo6YWZ0ZXIsLm1hdC1pbnB1dC1lbGVtZW50W3R5cGU9d2Vla106OmFmdGVyLC5tYXQtaW5wdXQtZWxlbWVudFt0eXBlPXRpbWVdOjphZnRlcntjb250ZW50OiIgIjt3aGl0ZS1zcGFjZTpwcmU7d2lkdGg6MXB4fS5tYXQtaW5wdXQtZWxlbWVudDo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbiwubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtY2FsZW5kYXItcGlja2VyLWluZGljYXRvciwubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtY2xlYXItYnV0dG9ue2ZvbnQtc2l6ZTouNzVlbX0ubWF0LWlucHV0LWVsZW1lbnQ6OnBsYWNlaG9sZGVyey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt0cmFuc2l0aW9uOmNvbG9yIDQwMG1zIDEzMy4zMzMzMzMzMzMzbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1pbnB1dC1lbGVtZW50OjpwbGFjZWhvbGRlcjotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7LW1zLXVzZXItc2VsZWN0OnRleHR9Lm1hdC1pbnB1dC1lbGVtZW50OjotbW96LXBsYWNlaG9sZGVyey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt0cmFuc2l0aW9uOmNvbG9yIDQwMG1zIDEzMy4zMzMzMzMzMzMzbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1pbnB1dC1lbGVtZW50OjotbW96LXBsYWNlaG9sZGVyOi1tcy1pbnB1dC1wbGFjZWhvbGRlcnstbXMtdXNlci1zZWxlY3Q6dGV4dH0ubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3RyYW5zaXRpb246Y29sb3IgNDAwbXMgMTMzLjMzMzMzMzMzMzNtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXI6LW1zLWlucHV0LXBsYWNlaG9sZGVyey1tcy11c2VyLXNlbGVjdDp0ZXh0fS5tYXQtaW5wdXQtZWxlbWVudDotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3RyYW5zaXRpb246Y29sb3IgNDAwbXMgMTMzLjMzMzMzMzMzMzNtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LWlucHV0LWVsZW1lbnQ6LW1zLWlucHV0LXBsYWNlaG9sZGVyOi1tcy1pbnB1dC1wbGFjZWhvbGRlcnstbXMtdXNlci1zZWxlY3Q6dGV4dH0ubWF0LWZvcm0tZmllbGQtaGlkZS1wbGFjZWhvbGRlciAubWF0LWlucHV0LWVsZW1lbnQ6OnBsYWNlaG9sZGVye2NvbG9yOnRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpub25lfS5tYXQtZm9ybS1maWVsZC1oaWRlLXBsYWNlaG9sZGVyIC5tYXQtaW5wdXQtZWxlbWVudDo6LW1vei1wbGFjZWhvbGRlcntjb2xvcjp0cmFuc3BhcmVudCAhaW1wb3J0YW50Oy13ZWJraXQtdGV4dC1maWxsLWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246bm9uZX0ubWF0LWZvcm0tZmllbGQtaGlkZS1wbGFjZWhvbGRlciAubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6dHJhbnNwYXJlbnQgIWltcG9ydGFudDstd2Via2l0LXRleHQtZmlsbC1jb2xvcjp0cmFuc3BhcmVudDt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1mb3JtLWZpZWxkLWhpZGUtcGxhY2Vob2xkZXIgLm1hdC1pbnB1dC1lbGVtZW50Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjp0cmFuc3BhcmVudCAhaW1wb3J0YW50Oy13ZWJraXQtdGV4dC1maWxsLWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246bm9uZX10ZXh0YXJlYS5tYXQtaW5wdXQtZWxlbWVudHtyZXNpemU6dmVydGljYWw7b3ZlcmZsb3c6YXV0b310ZXh0YXJlYS5tYXQtaW5wdXQtZWxlbWVudC5jZGstdGV4dGFyZWEtYXV0b3NpemV7cmVzaXplOm5vbmV9dGV4dGFyZWEubWF0LWlucHV0LWVsZW1lbnR7cGFkZGluZzoycHggMDttYXJnaW46LTJweCAwfXNlbGVjdC5tYXQtaW5wdXQtZWxlbWVudHstbW96LWFwcGVhcmFuY2U6bm9uZTstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTtwb3NpdGlvbjpyZWxhdGl2ZTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2Rpc3BsYXk6aW5saW5lLWZsZXg7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmctdG9wOjFlbTt0b3A6LTFlbTttYXJnaW4tYm90dG9tOi0xZW19c2VsZWN0Lm1hdC1pbnB1dC1lbGVtZW50OjotbXMtZXhwYW5ke2Rpc3BsYXk6bm9uZX1zZWxlY3QubWF0LWlucHV0LWVsZW1lbnQ6Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9c2VsZWN0Lm1hdC1pbnB1dC1lbGVtZW50Om5vdCg6ZGlzYWJsZWQpe2N1cnNvcjpwb2ludGVyfXNlbGVjdC5tYXQtaW5wdXQtZWxlbWVudDo6LW1zLXZhbHVle2NvbG9yOmluaGVyaXQ7YmFja2dyb3VuZDpub25lfS5tYXQtZm9jdXNlZCAuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIHNlbGVjdC5tYXQtaW5wdXQtZWxlbWVudDo6LW1zLXZhbHVle2NvbG9yOmluaGVyaXR9Lm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb250ZW50OiIiO3dpZHRoOjA7aGVpZ2h0OjA7Ym9yZGVyLWxlZnQ6NXB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yaWdodDo1cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXRvcDo1cHggc29saWQ7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtyaWdodDowO21hcmdpbi10b3A6LTIuNXB4O3BvaW50ZXItZXZlbnRzOm5vbmV9W2Rpcj1ydGxdIC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0IC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7cmlnaHQ6YXV0bztsZWZ0OjB9Lm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QgLm1hdC1pbnB1dC1lbGVtZW50e3BhZGRpbmctcmlnaHQ6MTVweH1bZGlyPXJ0bF0gLm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QgLm1hdC1pbnB1dC1lbGVtZW50e3BhZGRpbmctcmlnaHQ6MDtwYWRkaW5nLWxlZnQ6MTVweH0ubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdCAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcnttYXgtd2lkdGg6Y2FsYygxMDAlIC0gMTBweCl9Lm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7bWFyZ2luLXRvcDotNXB4fS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVye21hcmdpbi10b3A6LTEwcHh9XG4nLCIubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTpwZXJzcGVjdGl2ZSgxMDBweCk7LW1zLXRyYW5zZm9ybTpub25lfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbiwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb257d2lkdGg6MWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbi1idXR0b24sLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29uLWJ1dHRvbntmb250OmluaGVyaXQ7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLWJ1dHRvbiAubWF0LWljb24sLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29uLWJ1dHRvbiAubWF0LWljb257Zm9udC1zaXplOmluaGVyaXR9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7aGVpZ2h0OjFweH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2hlaWdodDowO2JvcmRlci10b3A6c29saWQgMXB4fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtcmlwcGxle3RvcDowO2hlaWdodDoycHg7b3ZlcmZsb3c6aGlkZGVufS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7aGVpZ2h0OjA7Ym9yZGVyLXRvcDpzb2xpZCAycHh9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1wb3NpdGlvbjowO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtib3JkZXItdG9wLXN0eWxlOmRvdHRlZDtib3JkZXItdG9wLXdpZHRoOjJweH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtaW52YWxpZDpub3QoLm1hdC1mb2N1c2VkKSAubWF0LWZvcm0tZmllbGQtcmlwcGxle2hlaWdodDoxcHh9XG4iLCIubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC13cmFwcGVye21hcmdpbjouMjVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLWZsZXh7cGFkZGluZzowIC43NWVtIDAgLjc1ZW07bWFyZ2luLXRvcDotMC4yNWVtO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLXByZWZpeCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1zdWZmaXh7dG9wOi4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmV7ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3RvcDouMjVlbTtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb2ludGVyLWV2ZW50czpub25lfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmR7Ym9yZGVyOjFweCBzb2xpZCBjdXJyZW50Q29sb3I7bWluLXdpZHRoOjVweH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0e2JvcmRlci1yYWRpdXM6NXB4IDAgMCA1cHg7Ym9yZGVyLXJpZ2h0LXN0eWxlOm5vbmV9W2Rpcj1ydGxdIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnR7Ym9yZGVyLXJpZ2h0LXN0eWxlOnNvbGlkO2JvcmRlci1sZWZ0LXN0eWxlOm5vbmU7Ym9yZGVyLXJhZGl1czowIDVweCA1cHggMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZHtib3JkZXItcmFkaXVzOjAgNXB4IDVweCAwO2JvcmRlci1sZWZ0LXN0eWxlOm5vbmU7ZmxleC1ncm93OjF9W2Rpcj1ydGxdIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5ke2JvcmRlci1sZWZ0LXN0eWxlOnNvbGlkO2JvcmRlci1yaWdodC1zdHlsZTpub25lO2JvcmRlci1yYWRpdXM6NXB4IDAgMCA1cHh9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXB7Ym9yZGVyLXJhZGl1czouMDAwMDAxcHg7Ym9yZGVyOjFweCBzb2xpZCBjdXJyZW50Q29sb3I7Ym9yZGVyLWxlZnQtc3R5bGU6bm9uZTtib3JkZXItcmlnaHQtc3R5bGU6bm9uZX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2Fwe2JvcmRlci10b3AtY29sb3I6dHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tvcGFjaXR5OjB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljayAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcHtib3JkZXItd2lkdGg6MnB4fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgMTAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljaywubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2t7b3BhY2l0eToxfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmU6bm90KC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCkgLm1hdC1mb3JtLWZpZWxkLWZsZXg6aG92ZXIgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmV7b3BhY2l0eTowO3RyYW5zaXRpb246b3BhY2l0eSA2MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lOm5vdCgubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQpIC5tYXQtZm9ybS1maWVsZC1mbGV4OmhvdmVyIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre29wYWNpdHk6MX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcntwYWRkaW5nOjAgMWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUuX21hdC1hbmltYXRpb24tbm9vcGFibGU6bm90KC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCkgLm1hdC1mb3JtLWZpZWxkLWZsZXg6aG92ZXJ+Lm1hdC1mb3JtLWZpZWxkLW91dGxpbmUsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZSwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0LC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5kLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2Fwe3RyYW5zaXRpb246bm9uZX1cbiIsIi5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtZm9ybS1maWVsZC1mbGV4e3BhZGRpbmctdG9wOi43NWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7aGVpZ2h0OjFweH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7aGVpZ2h0OjA7Ym9yZGVyLXRvcDpzb2xpZCAxcHh9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtib3R0b206MDtoZWlnaHQ6MnB4fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtoZWlnaHQ6MDtib3JkZXItdG9wOnNvbGlkIDJweH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JhY2tncm91bmQtcG9zaXRpb246MDtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtib3JkZXItdG9wLXN0eWxlOmRvdHRlZDtib3JkZXItdG9wLXdpZHRoOjJweH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZDpub3QoLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkKSAubWF0LWZvcm0tZmllbGQtZmxleDpob3Zlcn4ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7b3BhY2l0eToxO3RyYW5zZm9ybTpub25lO3RyYW5zaXRpb246b3BhY2l0eSA2MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZC5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZTpub3QoLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkKSAubWF0LWZvcm0tZmllbGQtZmxleDpob3Zlcn4ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7dHJhbnNpdGlvbjpub25lfVxuIl19XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpjaH0se3R5cGU6SGh9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltjaF19XX0se3R5cGU6TXosZGVjb3JhdG9yczpbe3R5cGU6X3N9XX0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltiVl19XX0se3R5cGU6Zkl9LHt0eXBlOnRDfSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W053XX1dfV19KSx7ZmxvYXRMYWJlbDpbe3R5cGU6eV99XSxhcHBlYXJhbmNlOlt7dHlwZTp5X31dLGhpZGVSZXF1aXJlZE1hcmtlcjpbe3R5cGU6eV99XSxoaW50TGFiZWw6W3t0eXBlOnlffV0sdW5kZXJsaW5lUmVmOlt7dHlwZTpGcixhcmdzOlsidW5kZXJsaW5lIl19XSxfY29ubmVjdGlvbkNvbnRhaW5lclJlZjpbe3R5cGU6RnIsYXJnczpbImNvbm5lY3Rpb25Db250YWluZXIiLHtzdGF0aWM6ITB9XX1dLF9pbnB1dENvbnRhaW5lclJlZjpbe3R5cGU6RnIsYXJnczpbImlucHV0Q29udGFpbmVyIl19XSxfbGFiZWw6W3t0eXBlOkZyLGFyZ3M6WyJsYWJlbCJdfV0sX2NvbnRyb2xOb25TdGF0aWM6W3t0eXBlOkhyLGFyZ3M6W2lWXX1dLF9jb250cm9sU3RhdGljOlt7dHlwZTpIcixhcmdzOltpVix7c3RhdGljOiEwfV19XSxfbGFiZWxDaGlsZE5vblN0YXRpYzpbe3R5cGU6SHIsYXJnczpbY1ZdfV0sX2xhYmVsQ2hpbGRTdGF0aWM6W3t0eXBlOkhyLGFyZ3M6W2NWLHtzdGF0aWM6ITB9XX1dLF9wbGFjZWhvbGRlckNoaWxkOlt7dHlwZTpIcixhcmdzOltkVl19XSxfZXJyb3JDaGlsZHJlbjpbe3R5cGU6enIsYXJnczpbZVYse2Rlc2NlbmRhbnRzOiEwfV19XSxfaGludENoaWxkcmVuOlt7dHlwZTp6cixhcmdzOltzVix7ZGVzY2VuZGFudHM6ITB9XX1dLF9wcmVmaXhDaGlsZHJlbjpbe3R5cGU6enIsYXJnczpbcFYse2Rlc2NlbmRhbnRzOiEwfV19XSxfc3VmZml4Q2hpbGRyZW46W3t0eXBlOnpyLGFyZ3M6W3VWLHtkZXNjZW5kYW50czohMH1dfV19KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIENWe31DVi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8Q1YpfSxDVi7JtW1vZD1abyh7dHlwZTpDVn0pLENWLsm1aW5qPWNvKHtpbXBvcnRzOltbQnYsVHosREldLFR6XX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oQ1Yse2RlY2xhcmF0aW9uczpmdW5jdGlvbigpe3JldHVybltuVixfVixsVixjVixkVixtVixmVl19LGltcG9ydHM6ZnVuY3Rpb24oKXtyZXR1cm5bQnYsVHosREldfSxleHBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW1R6LG5WLF9WLGxWLGNWLGRWLG1WLGZWXX19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKENWLFt7dHlwZTprXyxhcmdzOlt7ZGVjbGFyYXRpb25zOltuVixfVixsVixjVixkVixtVixmVl0saW1wb3J0czpbQnYsVHosREldLGV4cG9ydHM6W1R6LG5WLF9WLGxWLGNWLGRWLG1WLGZWXX1dfV0sbnVsbCxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZSBBbmd1bGFyIHYxMS4yLjE0CiAgICAgKiAoYykgMjAxMC0yMDIxIEdvb2dsZSBMTEMuIGh0dHBzOi8vYW5ndWxhci5pby8KICAgICAqIExpY2Vuc2U6IE1JVAogICAgICovCmNsYXNzIE1We31jb25zdCB2Vj1uZXcgTnIoIk5nVmFsdWVBY2Nlc3NvciIpLHhWPXtwcm92aWRlOnZWLHVzZUV4aXN0aW5nOkluKCgoKT0+T1YpKSxtdWx0aTohMH07Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NsYXNzIE9WIGV4dGVuZHMgTVZ7Y29uc3RydWN0b3IodCxlKXtzdXBlcigpLHRoaXMuX3JlbmRlcmVyPXQsdGhpcy5fZWxlbWVudFJlZj1lLHRoaXMub25DaGFuZ2U9dD0+e30sdGhpcy5vblRvdWNoZWQ9KCk9Pnt9fXdyaXRlVmFsdWUodCl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCJjaGVja2VkIix0KX1yZWdpc3Rlck9uQ2hhbmdlKHQpe3RoaXMub25DaGFuZ2U9dH1yZWdpc3Rlck9uVG91Y2hlZCh0KXt0aGlzLm9uVG91Y2hlZD10fXNldERpc2FibGVkU3RhdGUodCl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCJkaXNhYmxlZCIsdCl9fU9WLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxPVikoTXUodWgpLE11KGNoKSl9LE9WLsm1ZGlyPUpvKHt0eXBlOk9WLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJjaGVja2JveCIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwiY2hlY2tib3giLCJmb3JtQ29udHJvbCIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwiY2hlY2tib3giLCJuZ01vZGVsIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MSZlJiZOdSgiY2hhbmdlIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vbkNoYW5nZShlLnRhcmdldC5jaGVja2VkKX0pKSgiYmx1ciIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vblRvdWNoZWQoKX0pKX0sZmVhdHVyZXM6W2loKFt4Vl0pLGdtXX0pLE9WLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6dWh9LHt0eXBlOmNofV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihPVixbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJpbnB1dFt0eXBlPWNoZWNrYm94XVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9Y2hlY2tib3hdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPWNoZWNrYm94XVtuZ01vZGVsXSIsaG9zdDp7IihjaGFuZ2UpIjoib25DaGFuZ2UoJGV2ZW50LnRhcmdldC5jaGVja2VkKSIsIihibHVyKSI6Im9uVG91Y2hlZCgpIn0scHJvdmlkZXJzOlt4Vl19XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTp1aH0se3R5cGU6Y2h9XX0pLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3QgUFY9e3Byb3ZpZGU6dlYsdXNlRXhpc3Rpbmc6SW4oKCgpPT5rVikpLG11bHRpOiEwfSx3Vj1uZXcgTnIoIkNvbXBvc2l0aW9uRXZlbnRNb2RlIik7Y2xhc3Mga1Z7Y29uc3RydWN0b3IodCxlLG4pe3RoaXMuX3JlbmRlcmVyPXQsdGhpcy5fZWxlbWVudFJlZj1lLHRoaXMuX2NvbXBvc2l0aW9uTW9kZT1uLHRoaXMub25DaGFuZ2U9dD0+e30sdGhpcy5vblRvdWNoZWQ9KCk9Pnt9LHRoaXMuX2NvbXBvc2luZz0hMSxudWxsPT10aGlzLl9jb21wb3NpdGlvbk1vZGUmJih0aGlzLl9jb21wb3NpdGlvbk1vZGU9IShmdW5jdGlvbiBvKCl7Y29uc3QgdD1qQygpP2pDKCkuZ2V0VXNlckFnZW50KCk6IiI7cmV0dXJuL2FuZHJvaWQgKFxkKykvLnRlc3QodC50b0xvd2VyQ2FzZSgpKX0pKCkpfXdyaXRlVmFsdWUodCl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCJ2YWx1ZSIsbnVsbD09dD8iIjp0KX1yZWdpc3Rlck9uQ2hhbmdlKHQpe3RoaXMub25DaGFuZ2U9dH1yZWdpc3Rlck9uVG91Y2hlZCh0KXt0aGlzLm9uVG91Y2hlZD10fXNldERpc2FibGVkU3RhdGUodCl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCJkaXNhYmxlZCIsdCl9X2hhbmRsZUlucHV0KHQpeyghdGhpcy5fY29tcG9zaXRpb25Nb2RlfHx0aGlzLl9jb21wb3NpdGlvbk1vZGUmJiF0aGlzLl9jb21wb3NpbmcpJiZ0aGlzLm9uQ2hhbmdlKHQpfV9jb21wb3NpdGlvblN0YXJ0KCl7dGhpcy5fY29tcG9zaW5nPSEwfV9jb21wb3NpdGlvbkVuZCh0KXt0aGlzLl9jb21wb3Npbmc9ITEsdGhpcy5fY29tcG9zaXRpb25Nb2RlJiZ0aGlzLm9uQ2hhbmdlKHQpfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmZ1bmN0aW9uIFNWKHQpe3JldHVybiBudWxsPT10fHwwPT09dC5sZW5ndGh9ZnVuY3Rpb24gRFYodCl7cmV0dXJuIG51bGwhPXQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGh9a1YuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGtWKShNdSh1aCksTXUoY2gpLE11KHdWLDgpKX0sa1YuybVkaXI9Sm8oe3R5cGU6a1Ysc2VsZWN0b3JzOltbImlucHV0IiwiZm9ybUNvbnRyb2xOYW1lIiwiIiwzLCJ0eXBlIiwiY2hlY2tib3giXSxbInRleHRhcmVhIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyJpbnB1dCIsImZvcm1Db250cm9sIiwiIiwzLCJ0eXBlIiwiY2hlY2tib3giXSxbInRleHRhcmVhIiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwibmdNb2RlbCIsIiIsMywidHlwZSIsImNoZWNrYm94Il0sWyJ0ZXh0YXJlYSIsIm5nTW9kZWwiLCIiXSxbIiIsIm5nRGVmYXVsdENvbnRyb2wiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJk51KCJpbnB1dCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4uX2hhbmRsZUlucHV0KGUudGFyZ2V0LnZhbHVlKX0pKSgiYmx1ciIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vblRvdWNoZWQoKX0pKSgiY29tcG9zaXRpb25zdGFydCIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5fY29tcG9zaXRpb25TdGFydCgpfSkpKCJjb21wb3NpdGlvbmVuZCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4uX2NvbXBvc2l0aW9uRW5kKGUudGFyZ2V0LnZhbHVlKX0pKX0sZmVhdHVyZXM6W2loKFtQVl0pXX0pLGtWLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6dWh9LHt0eXBlOmNofSx7dHlwZTpCb29sZWFuLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOlt3Vl19XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoa1YsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIixob3N0OnsiKGlucHV0KSI6IiRhbnkodGhpcykuX2hhbmRsZUlucHV0KCRldmVudC50YXJnZXQudmFsdWUpIiwiKGJsdXIpIjoib25Ub3VjaGVkKCkiLCIoY29tcG9zaXRpb25zdGFydCkiOiIkYW55KHRoaXMpLl9jb21wb3NpdGlvblN0YXJ0KCkiLCIoY29tcG9zaXRpb25lbmQpIjoiJGFueSh0aGlzKS5fY29tcG9zaXRpb25FbmQoJGV2ZW50LnRhcmdldC52YWx1ZSkifSxwcm92aWRlcnM6W1BWXX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOnVofSx7dHlwZTpjaH0se3R5cGU6Qm9vbGVhbixkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbd1ZdfV19XX0pLG51bGwpO2NvbnN0IEVWPW5ldyBOcigiTmdWYWxpZGF0b3JzIiksQVY9bmV3IE5yKCJOZ0FzeW5jVmFsaWRhdG9ycyIpLFJWPS9eKD89LnsxLDI1NH0kKSg/PS57MSw2NH1AKVthLXpBLVowLTkhIyQlJicqKy89P15fYHt8fX4tXSsoPzpcLlthLXpBLVowLTkhIyQlJicqKy89P15fYHt8fX4tXSspKkBbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8oPzpcLlthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPykqJC87Y2xhc3MgVFZ7c3RhdGljIG1pbih0KXtyZXR1cm4oZnVuY3Rpb24gZSh0KXtyZXR1cm4gZT0+e2lmKFNWKGUudmFsdWUpfHxTVih0KSlyZXR1cm4gbnVsbDtjb25zdCBuPXBhcnNlRmxvYXQoZS52YWx1ZSk7cmV0dXJuIWlzTmFOKG4pJiZuPHQ/e21pbjp7bWluOnQsYWN0dWFsOmUudmFsdWV9fTpudWxsfX0pKHQpfXN0YXRpYyBtYXgodCl7cmV0dXJuKGZ1bmN0aW9uIGUodCl7cmV0dXJuIGU9PntpZihTVihlLnZhbHVlKXx8U1YodCkpcmV0dXJuIG51bGw7Y29uc3Qgbj1wYXJzZUZsb2F0KGUudmFsdWUpO3JldHVybiFpc05hTihuKSYmbj50P3ttYXg6e21heDp0LGFjdHVhbDplLnZhbHVlfX06bnVsbH19KSh0KX1zdGF0aWMgcmVxdWlyZWQodCl7cmV0dXJuIE5WKHQpfXN0YXRpYyByZXF1aXJlZFRydWUodCl7cmV0dXJuIElWKHQpfXN0YXRpYyBlbWFpbCh0KXtyZXR1cm4gelYodCl9c3RhdGljIG1pbkxlbmd0aCh0KXtyZXR1cm4gSFYodCl9c3RhdGljIG1heExlbmd0aCh0KXtyZXR1cm4gRlYodCl9c3RhdGljIHBhdHRlcm4odCl7cmV0dXJuIExWKHQpfXN0YXRpYyBudWxsVmFsaWRhdG9yKHQpe3JldHVybiBudWxsfXN0YXRpYyBjb21wb3NlKHQpe3JldHVybiBZVih0KX1zdGF0aWMgY29tcG9zZUFzeW5jKHQpe3JldHVybiBaVih0KX19ZnVuY3Rpb24gTlYodCl7cmV0dXJuIFNWKHQudmFsdWUpP3tyZXF1aXJlZDohMH06bnVsbH1mdW5jdGlvbiBJVih0KXtyZXR1cm4hMD09PXQudmFsdWU/bnVsbDp7cmVxdWlyZWQ6ITB9fWZ1bmN0aW9uIHpWKHQpe3JldHVybiBTVih0LnZhbHVlKXx8UlYudGVzdCh0LnZhbHVlKT9udWxsOntlbWFpbDohMH19ZnVuY3Rpb24gSFYodCl7cmV0dXJuIGU9PlNWKGUudmFsdWUpfHwhRFYoZS52YWx1ZSk/bnVsbDplLnZhbHVlLmxlbmd0aDx0P3ttaW5sZW5ndGg6e3JlcXVpcmVkTGVuZ3RoOnQsYWN0dWFsTGVuZ3RoOmUudmFsdWUubGVuZ3RofX06bnVsbH1mdW5jdGlvbiBGVih0KXtyZXR1cm4gZT0+RFYoZS52YWx1ZSkmJmUudmFsdWUubGVuZ3RoPnQ/e21heGxlbmd0aDp7cmVxdWlyZWRMZW5ndGg6dCxhY3R1YWxMZW5ndGg6ZS52YWx1ZS5sZW5ndGh9fTpudWxsfWZ1bmN0aW9uIExWKHQpe2lmKCF0KXJldHVybiBCVjtsZXQgZSxuO3JldHVybiJzdHJpbmciPT10eXBlb2YgdD8obj0iIiwiXiIhPT10LmNoYXJBdCgwKSYmKG4rPSJeIiksbis9dCwiJCIhPT10LmNoYXJBdCh0Lmxlbmd0aC0xKSYmKG4rPSIkIiksZT1uZXcgUmVnRXhwKG4pKToobj10LnRvU3RyaW5nKCksZT10KSx0PT57aWYoU1YodC52YWx1ZSkpcmV0dXJuIG51bGw7Y29uc3Qgbz10LnZhbHVlO3JldHVybiBlLnRlc3Qobyk/bnVsbDp7cGF0dGVybjp7cmVxdWlyZWRQYXR0ZXJuOm4sYWN0dWFsVmFsdWU6b319fX1mdW5jdGlvbiBCVih0KXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBWVih0KXtyZXR1cm4gbnVsbCE9dH1mdW5jdGlvbiBqVih0KXtjb25zdCBlPUF1KHQpP1J0KHQpOnQ7aWYoIVR1KGUpJiYoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkpdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCB2YWxpZGF0b3IgdG8gcmV0dXJuIFByb21pc2Ugb3IgT2JzZXJ2YWJsZS4iKTtyZXR1cm4gZX1mdW5jdGlvbiBVVih0KXtsZXQgZT17fTtyZXR1cm4gdC5mb3JFYWNoKCh0PT57ZT1udWxsIT10P09iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSx0KTplfSkpLDA9PT1PYmplY3Qua2V5cyhlKS5sZW5ndGg/bnVsbDplfWZ1bmN0aW9uIFdWKHQsZSl7cmV0dXJuIGUubWFwKChlPT5lKHQpKSl9ZnVuY3Rpb24gR1YodCl7cmV0dXJuIHQubWFwKCh0PT4oZnVuY3Rpb24gZSh0KXtyZXR1cm4hdC52YWxpZGF0ZX0pKHQpP3Q6ZT0+dC52YWxpZGF0ZShlKSkpfWZ1bmN0aW9uIFlWKHQpe2lmKCF0KXJldHVybiBudWxsO2NvbnN0IGU9dC5maWx0ZXIoVlYpO3JldHVybiAwPT1lLmxlbmd0aD9udWxsOmZ1bmN0aW9uKHQpe3JldHVybiBVVihXVih0LGUpKX19ZnVuY3Rpb24gcVYodCl7cmV0dXJuIG51bGwhPXQ/WVYoR1YodCkpOm51bGx9ZnVuY3Rpb24gWlYodCl7aWYoIXQpcmV0dXJuIG51bGw7Y29uc3QgZT10LmZpbHRlcihWVik7cmV0dXJuIDA9PWUubGVuZ3RoP251bGw6ZnVuY3Rpb24odCl7cmV0dXJuIEx0KFdWKHQsZSkubWFwKGpWKSkucGlwZShodChVVikpfX1mdW5jdGlvbiBYVih0KXtyZXR1cm4gbnVsbCE9dD9aVihHVih0KSk6bnVsbH1mdW5jdGlvbiBLVih0LGUpe3JldHVybiBudWxsPT09dD9bZV06QXJyYXkuaXNBcnJheSh0KT9bLi4udCxlXTpbdCxlXX1mdW5jdGlvbiBKVih0KXtyZXR1cm4gdC5fcmF3VmFsaWRhdG9yc31mdW5jdGlvbiBRVih0KXtyZXR1cm4gdC5fcmF3QXN5bmNWYWxpZGF0b3JzfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jbGFzcyAkVntjb25zdHJ1Y3Rvcigpe3RoaXMuX3Jhd1ZhbGlkYXRvcnM9W10sdGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzPVtdLHRoaXMuX29uRGVzdHJveUNhbGxiYWNrcz1bXX1nZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC52YWx1ZTpudWxsfWdldCB2YWxpZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnZhbGlkOm51bGx9Z2V0IGludmFsaWQoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5pbnZhbGlkOm51bGx9Z2V0IHBlbmRpbmcoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5wZW5kaW5nOm51bGx9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuZGlzYWJsZWQ6bnVsbH1nZXQgZW5hYmxlZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmVuYWJsZWQ6bnVsbH1nZXQgZXJyb3JzKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuZXJyb3JzOm51bGx9Z2V0IHByaXN0aW5lKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wucHJpc3RpbmU6bnVsbH1nZXQgZGlydHkoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5kaXJ0eTpudWxsfWdldCB0b3VjaGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wudG91Y2hlZDpudWxsfWdldCBzdGF0dXMoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5zdGF0dXM6bnVsbH1nZXQgdW50b3VjaGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wudW50b3VjaGVkOm51bGx9Z2V0IHN0YXR1c0NoYW5nZXMoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5zdGF0dXNDaGFuZ2VzOm51bGx9Z2V0IHZhbHVlQ2hhbmdlcygpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnZhbHVlQ2hhbmdlczpudWxsfWdldCBwYXRoKCl7cmV0dXJuIG51bGx9X3NldFZhbGlkYXRvcnModCl7dGhpcy5fcmF3VmFsaWRhdG9ycz10fHxbXSx0aGlzLl9jb21wb3NlZFZhbGlkYXRvckZuPXFWKHRoaXMuX3Jhd1ZhbGlkYXRvcnMpfV9zZXRBc3luY1ZhbGlkYXRvcnModCl7dGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzPXR8fFtdLHRoaXMuX2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbj1YVih0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMpfWdldCB2YWxpZGF0b3IoKXtyZXR1cm4gdGhpcy5fY29tcG9zZWRWYWxpZGF0b3JGbnx8bnVsbH1nZXQgYXN5bmNWYWxpZGF0b3IoKXtyZXR1cm4gdGhpcy5fY29tcG9zZWRBc3luY1ZhbGlkYXRvckZufHxudWxsfV9yZWdpc3Rlck9uRGVzdHJveSh0KXt0aGlzLl9vbkRlc3Ryb3lDYWxsYmFja3MucHVzaCh0KX1faW52b2tlT25EZXN0cm95Q2FsbGJhY2tzKCl7dGhpcy5fb25EZXN0cm95Q2FsbGJhY2tzLmZvckVhY2goKHQ9PnQoKSkpLHRoaXMuX29uRGVzdHJveUNhbGxiYWNrcz1bXX1yZXNldCh0KXt0aGlzLmNvbnRyb2wmJnRoaXMuY29udHJvbC5yZXNldCh0KX1oYXNFcnJvcih0LGUpe3JldHVybiEhdGhpcy5jb250cm9sJiZ0aGlzLmNvbnRyb2wuaGFzRXJyb3IodCxlKX1nZXRFcnJvcih0LGUpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmdldEVycm9yKHQsZSk6bnVsbH19JFYuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fCRWKX0sJFYuybVkaXI9Sm8oe3R5cGU6JFZ9KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIHRqIGV4dGVuZHMgJFZ7Z2V0IGZvcm1EaXJlY3RpdmUoKXtyZXR1cm4gbnVsbH1nZXQgcGF0aCgpe3JldHVybiBudWxsfX10ai7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBlaihlfHx0ail9LHRqLsm1ZGlyPUpvKHt0eXBlOnRqLGZlYXR1cmVzOltnbV19KTtjb25zdCBlaj12cih0aik7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NsYXNzIG5qIGV4dGVuZHMgJFZ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3BhcmVudD1udWxsLHRoaXMubmFtZT1udWxsLHRoaXMudmFsdWVBY2Nlc3Nvcj1udWxsfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY2xhc3Mgb2p7Y29uc3RydWN0b3IodCl7dGhpcy5fY2Q9dH1pcyh0KXt2YXIgZSxuO3JldHVybiEhKG51bGw9PT0obj1udWxsPT09KGU9dGhpcy5fY2QpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmNvbnRyb2wpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuW3RdKX19Y29uc3QgaWo9eyJbY2xhc3MubmctdW50b3VjaGVkXSI6J2lzKCJ1bnRvdWNoZWQiKScsIltjbGFzcy5uZy10b3VjaGVkXSI6J2lzKCJ0b3VjaGVkIiknLCJbY2xhc3MubmctcHJpc3RpbmVdIjonaXMoInByaXN0aW5lIiknLCJbY2xhc3MubmctZGlydHldIjonaXMoImRpcnR5IiknLCJbY2xhc3MubmctdmFsaWRdIjonaXMoInZhbGlkIiknLCJbY2xhc3MubmctaW52YWxpZF0iOidpcygiaW52YWxpZCIpJywiW2NsYXNzLm5nLXBlbmRpbmddIjonaXMoInBlbmRpbmciKSd9O2NsYXNzIGFqIGV4dGVuZHMgb2p7Y29uc3RydWN0b3IodCl7c3VwZXIodCl9fWFqLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxhaikoTXUobmosMikpfSxhai7JtWRpcj1Kbyh7dHlwZTphaixzZWxlY3RvcnM6W1siIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyIiLCJuZ01vZGVsIiwiIl0sWyIiLCJmb3JtQ29udHJvbCIsIiJdXSxob3N0VmFyczoxNCxob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezImZSYmYWYoIm5nLXVudG91Y2hlZCIsbi5pcygidW50b3VjaGVkIikpKCJuZy10b3VjaGVkIixuLmlzKCJ0b3VjaGVkIikpKCJuZy1wcmlzdGluZSIsbi5pcygicHJpc3RpbmUiKSkoIm5nLWRpcnR5IixuLmlzKCJkaXJ0eSIpKSgibmctdmFsaWQiLG4uaXMoInZhbGlkIikpKCJuZy1pbnZhbGlkIixuLmlzKCJpbnZhbGlkIikpKCJuZy1wZW5kaW5nIixuLmlzKCJwZW5kaW5nIikpfSxmZWF0dXJlczpbZ21dfSksYWouY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpuaixkZWNvcmF0b3JzOlt7dHlwZTpDc31dfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihhaixbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSIsaG9zdDppan1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOm5qLGRlY29yYXRvcnM6W3t0eXBlOkNzfV19XX0pLG51bGwpO2NsYXNzIHJqIGV4dGVuZHMgb2p7Y29uc3RydWN0b3IodCl7c3VwZXIodCl9fXJqLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxyaikoTXUodGosMTApKX0scmouybVkaXI9Sm8oe3R5cGU6cmosc2VsZWN0b3JzOltbIiIsImZvcm1Hcm91cE5hbWUiLCIiXSxbIiIsImZvcm1BcnJheU5hbWUiLCIiXSxbIiIsIm5nTW9kZWxHcm91cCIsIiJdLFsiIiwiZm9ybUdyb3VwIiwiIl0sWyJmb3JtIiwzLCJuZ05vRm9ybSIsIiJdLFsiIiwibmdGb3JtIiwiIl1dLGhvc3RWYXJzOjE0LGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MiZlJiZhZigibmctdW50b3VjaGVkIixuLmlzKCJ1bnRvdWNoZWQiKSkoIm5nLXRvdWNoZWQiLG4uaXMoInRvdWNoZWQiKSkoIm5nLXByaXN0aW5lIixuLmlzKCJwcmlzdGluZSIpKSgibmctZGlydHkiLG4uaXMoImRpcnR5IikpKCJuZy12YWxpZCIsbi5pcygidmFsaWQiKSkoIm5nLWludmFsaWQiLG4uaXMoImludmFsaWQiKSkoIm5nLXBlbmRpbmciLG4uaXMoInBlbmRpbmciKSl9LGZlYXR1cmVzOltnbV19KSxyai5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOnRqLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTpDc31dfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihyaixbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIixob3N0OmlqfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6dGosZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOkNzfV19XX0pLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3Qgc2o9J1xuICAgIDxkaXYgW2Zvcm1Hcm91cF09Im15R3JvdXAiPlxuICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT0iZmlyc3ROYW1lIj5cbiAgICA8L2Rpdj5cblxuICAgIEluIHlvdXIgY2xhc3M6XG5cbiAgICB0aGlzLm15R3JvdXAgPSBuZXcgRm9ybUdyb3VwKHtcbiAgICAgICBmaXJzdE5hbWU6IG5ldyBGb3JtQ29udHJvbCgpXG4gICAgfSk7Jyxsaj0nXG4gICAgPGRpdiBbZm9ybUdyb3VwXT0ibXlHcm91cCI+XG4gICAgICAgPGRpdiBmb3JtR3JvdXBOYW1lPSJwZXJzb24iPlxuICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9ImZpcnN0TmFtZSI+XG4gICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICBJbiB5b3VyIGNsYXNzOlxuXG4gICAgdGhpcy5teUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgICAgcGVyc29uOiBuZXcgRm9ybUdyb3VwKHsgZmlyc3ROYW1lOiBuZXcgRm9ybUNvbnRyb2woKSB9KVxuICAgIH0pOycsY2o9J1xuICAgIDxmb3JtPlxuICAgICAgIDxkaXYgbmdNb2RlbEdyb3VwPSJwZXJzb24iPlxuICAgICAgICAgIDxpbnB1dCBbKG5nTW9kZWwpXT0icGVyc29uLm5hbWUiIG5hbWU9ImZpcnN0TmFtZSI+XG4gICAgICAgPC9kaXY+XG4gICAgPC9mb3JtPic7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NsYXNzIGRqe3N0YXRpYyBjb250cm9sUGFyZW50RXhjZXB0aW9uKCl7dGhyb3cgbmV3IEVycm9yKGBmb3JtQ29udHJvbE5hbWUgbXVzdCBiZSB1c2VkIHdpdGggYSBwYXJlbnQgZm9ybUdyb3VwIGRpcmVjdGl2ZS4gIFlvdSdsbCB3YW50IHRvIGFkZCBhIGZvcm1Hcm91cFxuICAgICAgIGRpcmVjdGl2ZSBhbmQgcGFzcyBpdCBhbiBleGlzdGluZyBGb3JtR3JvdXAgaW5zdGFuY2UgKHlvdSBjYW4gY3JlYXRlIG9uZSBpbiB5b3VyIGNsYXNzKS5cblxuICAgICAgRXhhbXBsZTpcblxuICAgICAgJHtzan1gKX1zdGF0aWMgbmdNb2RlbEdyb3VwRXhjZXB0aW9uKCl7dGhyb3cgbmV3IEVycm9yKGBmb3JtQ29udHJvbE5hbWUgY2Fubm90IGJlIHVzZWQgd2l0aCBhbiBuZ01vZGVsR3JvdXAgcGFyZW50LiBJdCBpcyBvbmx5IGNvbXBhdGlibGUgd2l0aCBwYXJlbnRzXG4gICAgICAgdGhhdCBhbHNvIGhhdmUgYSAiZm9ybSIgcHJlZml4OiBmb3JtR3JvdXBOYW1lLCBmb3JtQXJyYXlOYW1lLCBvciBmb3JtR3JvdXAuXG5cbiAgICAgICBPcHRpb24gMTogIFVwZGF0ZSB0aGUgcGFyZW50IHRvIGJlIGZvcm1Hcm91cE5hbWUgKHJlYWN0aXZlIGZvcm0gc3RyYXRlZ3kpXG5cbiAgICAgICAgJHtsan1cblxuICAgICAgICBPcHRpb24gMjogVXNlIG5nTW9kZWwgaW5zdGVhZCBvZiBmb3JtQ29udHJvbE5hbWUgKHRlbXBsYXRlLWRyaXZlbiBzdHJhdGVneSlcblxuICAgICAgICAke2NqfWApfXN0YXRpYyBtaXNzaW5nRm9ybUV4Y2VwdGlvbigpe3Rocm93IG5ldyBFcnJvcihgZm9ybUdyb3VwIGV4cGVjdHMgYSBGb3JtR3JvdXAgaW5zdGFuY2UuIFBsZWFzZSBwYXNzIG9uZSBpbi5cblxuICAgICAgIEV4YW1wbGU6XG5cbiAgICAgICAke3NqfWApfXN0YXRpYyBncm91cFBhcmVudEV4Y2VwdGlvbigpe3Rocm93IG5ldyBFcnJvcihgZm9ybUdyb3VwTmFtZSBtdXN0IGJlIHVzZWQgd2l0aCBhIHBhcmVudCBmb3JtR3JvdXAgZGlyZWN0aXZlLiAgWW91J2xsIHdhbnQgdG8gYWRkIGEgZm9ybUdyb3VwXG4gICAgICBkaXJlY3RpdmUgYW5kIHBhc3MgaXQgYW4gZXhpc3RpbmcgRm9ybUdyb3VwIGluc3RhbmNlICh5b3UgY2FuIGNyZWF0ZSBvbmUgaW4geW91ciBjbGFzcykuXG5cbiAgICAgIEV4YW1wbGU6XG5cbiAgICAgICR7bGp9YCl9c3RhdGljIGFycmF5UGFyZW50RXhjZXB0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCdmb3JtQXJyYXlOYW1lIG11c3QgYmUgdXNlZCB3aXRoIGEgcGFyZW50IGZvcm1Hcm91cCBkaXJlY3RpdmUuICBZb3VcJ2xsIHdhbnQgdG8gYWRkIGEgZm9ybUdyb3VwXG4gICAgICAgZGlyZWN0aXZlIGFuZCBwYXNzIGl0IGFuIGV4aXN0aW5nIEZvcm1Hcm91cCBpbnN0YW5jZSAoeW91IGNhbiBjcmVhdGUgb25lIGluIHlvdXIgY2xhc3MpLlxuXG4gICAgICAgIEV4YW1wbGU6XG5cbiAgICAgICAgXG4gICAgPGRpdiBbZm9ybUdyb3VwXT0ibXlHcm91cCI+XG4gICAgICA8ZGl2IGZvcm1BcnJheU5hbWU9ImNpdGllcyI+XG4gICAgICAgIDxkaXYgKm5nRm9yPSJsZXQgY2l0eSBvZiBjaXR5QXJyYXkuY29udHJvbHM7IGluZGV4IGFzIGkiPlxuICAgICAgICAgIDxpbnB1dCBbZm9ybUNvbnRyb2xOYW1lXT0iaSI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICBJbiB5b3VyIGNsYXNzOlxuXG4gICAgdGhpcy5jaXR5QXJyYXkgPSBuZXcgRm9ybUFycmF5KFtuZXcgRm9ybUNvbnRyb2woXCdTRlwnKV0pO1xuICAgIHRoaXMubXlHcm91cCA9IG5ldyBGb3JtR3JvdXAoe1xuICAgICAgY2l0aWVzOiB0aGlzLmNpdHlBcnJheVxuICAgIH0pOycpfXN0YXRpYyBkaXNhYmxlZEF0dHJXYXJuaW5nKCl7Y29uc29sZS53YXJuKCJcbiAgICAgIEl0IGxvb2tzIGxpa2UgeW91J3JlIHVzaW5nIHRoZSBkaXNhYmxlZCBhdHRyaWJ1dGUgd2l0aCBhIHJlYWN0aXZlIGZvcm0gZGlyZWN0aXZlLiBJZiB5b3Ugc2V0IGRpc2FibGVkIHRvIHRydWVcbiAgICAgIHdoZW4geW91IHNldCB1cCB0aGlzIGNvbnRyb2wgaW4geW91ciBjb21wb25lbnQgY2xhc3MsIHRoZSBkaXNhYmxlZCBhdHRyaWJ1dGUgd2lsbCBhY3R1YWxseSBiZSBzZXQgaW4gdGhlIERPTSBmb3JcbiAgICAgIHlvdS4gV2UgcmVjb21tZW5kIHVzaW5nIHRoaXMgYXBwcm9hY2ggdG8gYXZvaWQgJ2NoYW5nZWQgYWZ0ZXIgY2hlY2tlZCcgZXJyb3JzLlxuXG4gICAgICBFeGFtcGxlOlxuICAgICAgZm9ybSA9IG5ldyBGb3JtR3JvdXAoe1xuICAgICAgICBmaXJzdDogbmV3IEZvcm1Db250cm9sKHt2YWx1ZTogJ05hbmN5JywgZGlzYWJsZWQ6IHRydWV9LCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAgICAgICAgbGFzdDogbmV3IEZvcm1Db250cm9sKCdEcmV3JywgVmFsaWRhdG9ycy5yZXF1aXJlZClcbiAgICAgIH0pO1xuICAgICIpfXN0YXRpYyBuZ01vZGVsV2FybmluZyh0KXtjb25zb2xlLndhcm4oYFxuICAgIEl0IGxvb2tzIGxpa2UgeW91J3JlIHVzaW5nIG5nTW9kZWwgb24gdGhlIHNhbWUgZm9ybSBmaWVsZCBhcyAke3R9LlxuICAgIFN1cHBvcnQgZm9yIHVzaW5nIHRoZSBuZ01vZGVsIGlucHV0IHByb3BlcnR5IGFuZCBuZ01vZGVsQ2hhbmdlIGV2ZW50IHdpdGhcbiAgICByZWFjdGl2ZSBmb3JtIGRpcmVjdGl2ZXMgaGFzIGJlZW4gZGVwcmVjYXRlZCBpbiBBbmd1bGFyIHY2IGFuZCB3aWxsIGJlIHJlbW92ZWRcbiAgICBpbiBhIGZ1dHVyZSB2ZXJzaW9uIG9mIEFuZ3VsYXIuXG5cbiAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzLCBzZWUgb3VyIEFQSSBkb2NzIGhlcmU6XG4gICAgaHR0cHM6Ly9hbmd1bGFyLmlvL2FwaS9mb3Jtcy8keyJmb3JtQ29udHJvbCI9PT10PyJGb3JtQ29udHJvbERpcmVjdGl2ZSI6IkZvcm1Db250cm9sTmFtZSJ9I3VzZS13aXRoLW5nbW9kZWxcbiAgICBgKX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIHBqKHQsZSl7cmV0dXJuWy4uLmUucGF0aCx0XX1mdW5jdGlvbiBtaih0LGUpeygidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmKHR8fF9qKGUsIkNhbm5vdCBmaW5kIGNvbnRyb2wgd2l0aCIpLGUudmFsdWVBY2Nlc3Nvcnx8X2ooZSwiTm8gdmFsdWUgYWNjZXNzb3IgZm9yIGZvcm0gY29udHJvbCB3aXRoIikpLGdqKHQsZSwhMCksZS52YWx1ZUFjY2Vzc29yLndyaXRlVmFsdWUodC52YWx1ZSksKGZ1bmN0aW9uIG4odCxlKXtlLnZhbHVlQWNjZXNzb3IucmVnaXN0ZXJPbkNoYW5nZSgobj0+e3QuX3BlbmRpbmdWYWx1ZT1uLHQuX3BlbmRpbmdDaGFuZ2U9ITAsdC5fcGVuZGluZ0RpcnR5PSEwLCJjaGFuZ2UiPT09dC51cGRhdGVPbiYmYmoodCxlKX0pKX0pKHQsZSksKGZ1bmN0aW9uIG8odCxlKXtjb25zdCBuPSh0LG4pPT57ZS52YWx1ZUFjY2Vzc29yLndyaXRlVmFsdWUodCksbiYmZS52aWV3VG9Nb2RlbFVwZGF0ZSh0KX07dC5yZWdpc3Rlck9uQ2hhbmdlKG4pLGUuX3JlZ2lzdGVyT25EZXN0cm95KCgoKT0+e3QuX3VucmVnaXN0ZXJPbkNoYW5nZShuKX0pKX0pKHQsZSksKGZ1bmN0aW9uIGkodCxlKXtlLnZhbHVlQWNjZXNzb3IucmVnaXN0ZXJPblRvdWNoZWQoKCgpPT57dC5fcGVuZGluZ1RvdWNoZWQ9ITAsImJsdXIiPT09dC51cGRhdGVPbiYmdC5fcGVuZGluZ0NoYW5nZSYmYmoodCxlKSwic3VibWl0IiE9PXQudXBkYXRlT24mJnQubWFya0FzVG91Y2hlZCgpfSkpfSkodCxlKSwoZnVuY3Rpb24gYSh0LGUpe2lmKGUudmFsdWVBY2Nlc3Nvci5zZXREaXNhYmxlZFN0YXRlKXtjb25zdCBuPXQ9PntlLnZhbHVlQWNjZXNzb3Iuc2V0RGlzYWJsZWRTdGF0ZSh0KX07dC5yZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2UobiksZS5fcmVnaXN0ZXJPbkRlc3Ryb3koKCgpPT57dC5fdW5yZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2Uobil9KSl9fSkodCxlKX1mdW5jdGlvbiB1aih0LGUsbj0hMCl7Y29uc3Qgbz0oKT0+e24mJigidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmKGZ1bmN0aW9uIHQoZSl7X2ooZSwiVGhlcmUgaXMgbm8gRm9ybUNvbnRyb2wgaW5zdGFuY2UgYXR0YWNoZWQgdG8gZm9ybSBjb250cm9sIGVsZW1lbnQgd2l0aCIpfSkoZSl9O2UudmFsdWVBY2Nlc3NvciYmKGUudmFsdWVBY2Nlc3Nvci5yZWdpc3Rlck9uQ2hhbmdlKG8pLGUudmFsdWVBY2Nlc3Nvci5yZWdpc3Rlck9uVG91Y2hlZChvKSksaGoodCxlLCEwKSx0JiYoZS5faW52b2tlT25EZXN0cm95Q2FsbGJhY2tzKCksdC5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UoKCgpPT57fSkpKX1mdW5jdGlvbiBmaih0LGUpe3QuZm9yRWFjaCgodD0+e3QucmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZSYmdC5yZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKGUpfSkpfWZ1bmN0aW9uIGdqKHQsZSxuKXtjb25zdCBvPUpWKHQpO251bGwhPT1lLnZhbGlkYXRvcj90LnNldFZhbGlkYXRvcnMoS1YobyxlLnZhbGlkYXRvcikpOiJmdW5jdGlvbiI9PXR5cGVvZiBvJiZ0LnNldFZhbGlkYXRvcnMoW29dKTtjb25zdCBpPVFWKHQpO2lmKG51bGwhPT1lLmFzeW5jVmFsaWRhdG9yP3Quc2V0QXN5bmNWYWxpZGF0b3JzKEtWKGksZS5hc3luY1ZhbGlkYXRvcikpOiJmdW5jdGlvbiI9PXR5cGVvZiBpJiZ0LnNldEFzeW5jVmFsaWRhdG9ycyhbaV0pLG4pe2NvbnN0IG49KCk9PnQudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO2ZqKGUuX3Jhd1ZhbGlkYXRvcnMsbiksZmooZS5fcmF3QXN5bmNWYWxpZGF0b3JzLG4pfX1mdW5jdGlvbiBoaih0LGUsbil7bGV0IG89ITE7aWYobnVsbCE9PXQpe2lmKG51bGwhPT1lLnZhbGlkYXRvcil7Y29uc3Qgbj1KVih0KTtpZihBcnJheS5pc0FycmF5KG4pJiZuLmxlbmd0aD4wKXtjb25zdCBpPW4uZmlsdGVyKCh0PT50IT09ZS52YWxpZGF0b3IpKTtpLmxlbmd0aCE9PW4ubGVuZ3RoJiYobz0hMCx0LnNldFZhbGlkYXRvcnMoaSkpfX1pZihudWxsIT09ZS5hc3luY1ZhbGlkYXRvcil7Y29uc3Qgbj1RVih0KTtpZihBcnJheS5pc0FycmF5KG4pJiZuLmxlbmd0aD4wKXtjb25zdCBpPW4uZmlsdGVyKCh0PT50IT09ZS5hc3luY1ZhbGlkYXRvcikpO2kubGVuZ3RoIT09bi5sZW5ndGgmJihvPSEwLHQuc2V0QXN5bmNWYWxpZGF0b3JzKGkpKX19fWlmKG4pe2NvbnN0IHQ9KCk9Pnt9O2ZqKGUuX3Jhd1ZhbGlkYXRvcnMsdCksZmooZS5fcmF3QXN5bmNWYWxpZGF0b3JzLHQpfXJldHVybiBvfWZ1bmN0aW9uIGJqKHQsZSl7dC5fcGVuZGluZ0RpcnR5JiZ0Lm1hcmtBc0RpcnR5KCksdC5zZXRWYWx1ZSh0Ll9wZW5kaW5nVmFsdWUse2VtaXRNb2RlbFRvVmlld0NoYW5nZTohMX0pLGUudmlld1RvTW9kZWxVcGRhdGUodC5fcGVuZGluZ1ZhbHVlKSx0Ll9wZW5kaW5nQ2hhbmdlPSExfWZ1bmN0aW9uIHlqKHQsZSl7bnVsbCE9dHx8InVuZGVmaW5lZCIhPXR5cGVvZiBuZ0Rldk1vZGUmJiFuZ0Rldk1vZGV8fF9qKGUsIkNhbm5vdCBmaW5kIGNvbnRyb2wgd2l0aCIpLGdqKHQsZSwhMSl9ZnVuY3Rpb24gX2oodCxlKXtsZXQgbjt0aHJvdyBuPXQucGF0aC5sZW5ndGg+MT9gcGF0aDogJyR7dC5wYXRoLmpvaW4oIiAtPiAiKX0nYDp0LnBhdGhbMF0/YG5hbWU6ICcke3QucGF0aH0nYDoidW5zcGVjaWZpZWQgbmFtZSBhdHRyaWJ1dGUiLG5ldyBFcnJvcihgJHtlfSAke259YCl9ZnVuY3Rpb24gQ2oodCxlKXtpZighdC5oYXNPd25Qcm9wZXJ0eSgibW9kZWwiKSlyZXR1cm4hMTtjb25zdCBuPXQubW9kZWw7cmV0dXJuISFuLmlzRmlyc3RDaGFuZ2UoKXx8IU9iamVjdC5pcyhlLG4uY3VycmVudFZhbHVlKX1mdW5jdGlvbiBNaih0LGUpe3QuX3N5bmNQZW5kaW5nQ29udHJvbHMoKSxlLmZvckVhY2goKHQ9Pntjb25zdCBlPXQuY29udHJvbDsic3VibWl0Ij09PWUudXBkYXRlT24mJmUuX3BlbmRpbmdDaGFuZ2UmJih0LnZpZXdUb01vZGVsVXBkYXRlKGUuX3BlbmRpbmdWYWx1ZSksZS5fcGVuZGluZ0NoYW5nZT0hMSl9KSl9ZnVuY3Rpb24gdmoodCxlKXtpZighZSlyZXR1cm4gbnVsbDtsZXQgbixvLGk7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSl8fCJ1bmRlZmluZWQiIT10eXBlb2YgbmdEZXZNb2RlJiYhbmdEZXZNb2RlfHxfaih0LCJWYWx1ZSBhY2Nlc3NvciB3YXMgbm90IHByb3ZpZGVkIGFzIGFuIGFycmF5IGZvciBmb3JtIGNvbnRyb2wgd2l0aCIpLGUuZm9yRWFjaCgoZT0+e2UuY29uc3RydWN0b3I9PT1rVj9uPWU6KGZ1bmN0aW9uIGEodCl7cmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZih0LmNvbnN0cnVjdG9yKT09PU1WfSkoZSk/KG8mJigidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmX2oodCwiTW9yZSB0aGFuIG9uZSBidWlsdC1pbiB2YWx1ZSBhY2Nlc3NvciBtYXRjaGVzIGZvcm0gY29udHJvbCB3aXRoIiksbz1lKTooaSYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZfaih0LCJNb3JlIHRoYW4gb25lIGN1c3RvbSB2YWx1ZSBhY2Nlc3NvciBtYXRjaGVzIGZvcm0gY29udHJvbCB3aXRoIiksaT1lKX0pKSxpfHxvfHxufHwoKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZfaih0LCJObyB2YWxpZCB2YWx1ZSBhY2Nlc3NvciBmb3IgZm9ybSBjb250cm9sIHdpdGgiKSxudWxsKX1mdW5jdGlvbiB4aih0LGUpe2NvbnN0IG49dC5pbmRleE9mKGUpO24+LTEmJnQuc3BsaWNlKG4sMSl9ZnVuY3Rpb24gT2oodCxlLG4sbyl7Im5ldmVyIiE9PW8mJigobnVsbCE9PW8mJiJvbmNlIiE9PW98fGUuX25nTW9kZWxXYXJuaW5nU2VudE9uY2UpJiYoImFsd2F5cyIhPT1vfHxuLl9uZ01vZGVsV2FybmluZ1NlbnQpfHwoZGoubmdNb2RlbFdhcm5pbmcodCksZS5fbmdNb2RlbFdhcm5pbmdTZW50T25jZT0hMCxuLl9uZ01vZGVsV2FybmluZ1NlbnQ9ITApKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY29uc3QgUGo9IlZBTElEIix3aj0iSU5WQUxJRCIsa2o9IlBFTkRJTkciLFNqPSJESVNBQkxFRCI7ZnVuY3Rpb24gRGoodCl7cmV0dXJuKFRqKHQpP3QudmFsaWRhdG9yczp0KXx8bnVsbH1mdW5jdGlvbiBFaih0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT9xVih0KTp0fHxudWxsfWZ1bmN0aW9uIEFqKHQsZSl7cmV0dXJuKFRqKGUpP2UuYXN5bmNWYWxpZGF0b3JzOnQpfHxudWxsfWZ1bmN0aW9uIFJqKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP1hWKHQpOnR8fG51bGx9ZnVuY3Rpb24gVGoodCl7cmV0dXJuIG51bGwhPXQmJiFBcnJheS5pc0FycmF5KHQpJiYib2JqZWN0Ij09dHlwZW9mIHR9Y2xhc3MgTmp7Y29uc3RydWN0b3IodCxlKXt0aGlzLl9oYXNPd25QZW5kaW5nQXN5bmNWYWxpZGF0b3I9ITEsdGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlPSgpPT57fSx0aGlzLl9wYXJlbnQ9bnVsbCx0aGlzLnByaXN0aW5lPSEwLHRoaXMudG91Y2hlZD0hMSx0aGlzLl9vbkRpc2FibGVkQ2hhbmdlPVtdLHRoaXMuX3Jhd1ZhbGlkYXRvcnM9dCx0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnM9ZSx0aGlzLl9jb21wb3NlZFZhbGlkYXRvckZuPUVqKHRoaXMuX3Jhd1ZhbGlkYXRvcnMpLHRoaXMuX2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbj1Saih0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMpfWdldCB2YWxpZGF0b3IoKXtyZXR1cm4gdGhpcy5fY29tcG9zZWRWYWxpZGF0b3JGbn1zZXQgdmFsaWRhdG9yKHQpe3RoaXMuX3Jhd1ZhbGlkYXRvcnM9dGhpcy5fY29tcG9zZWRWYWxpZGF0b3JGbj10fWdldCBhc3luY1ZhbGlkYXRvcigpe3JldHVybiB0aGlzLl9jb21wb3NlZEFzeW5jVmFsaWRhdG9yRm59c2V0IGFzeW5jVmFsaWRhdG9yKHQpe3RoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycz10aGlzLl9jb21wb3NlZEFzeW5jVmFsaWRhdG9yRm49dH1nZXQgcGFyZW50KCl7cmV0dXJuIHRoaXMuX3BhcmVudH1nZXQgdmFsaWQoKXtyZXR1cm4gdGhpcy5zdGF0dXM9PT1Qan1nZXQgaW52YWxpZCgpe3JldHVybiB0aGlzLnN0YXR1cz09PXdqfWdldCBwZW5kaW5nKCl7cmV0dXJuIHRoaXMuc3RhdHVzPT1ran1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5zdGF0dXM9PT1Tan1nZXQgZW5hYmxlZCgpe3JldHVybiB0aGlzLnN0YXR1cyE9PVNqfWdldCBkaXJ0eSgpe3JldHVybiF0aGlzLnByaXN0aW5lfWdldCB1bnRvdWNoZWQoKXtyZXR1cm4hdGhpcy50b3VjaGVkfWdldCB1cGRhdGVPbigpe3JldHVybiB0aGlzLl91cGRhdGVPbj90aGlzLl91cGRhdGVPbjp0aGlzLnBhcmVudD90aGlzLnBhcmVudC51cGRhdGVPbjoiY2hhbmdlIn1zZXRWYWxpZGF0b3JzKHQpe3RoaXMuX3Jhd1ZhbGlkYXRvcnM9dCx0aGlzLl9jb21wb3NlZFZhbGlkYXRvckZuPUVqKHQpfXNldEFzeW5jVmFsaWRhdG9ycyh0KXt0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnM9dCx0aGlzLl9jb21wb3NlZEFzeW5jVmFsaWRhdG9yRm49UmoodCl9Y2xlYXJWYWxpZGF0b3JzKCl7dGhpcy52YWxpZGF0b3I9bnVsbH1jbGVhckFzeW5jVmFsaWRhdG9ycygpe3RoaXMuYXN5bmNWYWxpZGF0b3I9bnVsbH1tYXJrQXNUb3VjaGVkKHQ9e30pe3RoaXMudG91Y2hlZD0hMCx0aGlzLl9wYXJlbnQmJiF0Lm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQubWFya0FzVG91Y2hlZCh0KX1tYXJrQWxsQXNUb3VjaGVkKCl7dGhpcy5tYXJrQXNUb3VjaGVkKHtvbmx5U2VsZjohMH0pLHRoaXMuX2ZvckVhY2hDaGlsZCgodD0+dC5tYXJrQWxsQXNUb3VjaGVkKCkpKX1tYXJrQXNVbnRvdWNoZWQodD17fSl7dGhpcy50b3VjaGVkPSExLHRoaXMuX3BlbmRpbmdUb3VjaGVkPSExLHRoaXMuX2ZvckVhY2hDaGlsZCgodD0+e3QubWFya0FzVW50b3VjaGVkKHtvbmx5U2VsZjohMH0pfSkpLHRoaXMuX3BhcmVudCYmIXQub25seVNlbGYmJnRoaXMuX3BhcmVudC5fdXBkYXRlVG91Y2hlZCh0KX1tYXJrQXNEaXJ0eSh0PXt9KXt0aGlzLnByaXN0aW5lPSExLHRoaXMuX3BhcmVudCYmIXQub25seVNlbGYmJnRoaXMuX3BhcmVudC5tYXJrQXNEaXJ0eSh0KX1tYXJrQXNQcmlzdGluZSh0PXt9KXt0aGlzLnByaXN0aW5lPSEwLHRoaXMuX3BlbmRpbmdEaXJ0eT0hMSx0aGlzLl9mb3JFYWNoQ2hpbGQoKHQ9Pnt0Lm1hcmtBc1ByaXN0aW5lKHtvbmx5U2VsZjohMH0pfSkpLHRoaXMuX3BhcmVudCYmIXQub25seVNlbGYmJnRoaXMuX3BhcmVudC5fdXBkYXRlUHJpc3RpbmUodCl9bWFya0FzUGVuZGluZyh0PXt9KXt0aGlzLnN0YXR1cz1raiwhMSE9PXQuZW1pdEV2ZW50JiZ0aGlzLnN0YXR1c0NoYW5nZXMuZW1pdCh0aGlzLnN0YXR1cyksdGhpcy5fcGFyZW50JiYhdC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Lm1hcmtBc1BlbmRpbmcodCl9ZGlzYWJsZSh0PXt9KXtjb25zdCBlPXRoaXMuX3BhcmVudE1hcmtlZERpcnR5KHQub25seVNlbGYpO3RoaXMuc3RhdHVzPVNqLHRoaXMuZXJyb3JzPW51bGwsdGhpcy5fZm9yRWFjaENoaWxkKChlPT57ZS5kaXNhYmxlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7b25seVNlbGY6ITB9KSl9KSksdGhpcy5fdXBkYXRlVmFsdWUoKSwhMSE9PXQuZW1pdEV2ZW50JiYodGhpcy52YWx1ZUNoYW5nZXMuZW1pdCh0aGlzLnZhbHVlKSx0aGlzLnN0YXR1c0NoYW5nZXMuZW1pdCh0aGlzLnN0YXR1cykpLHRoaXMuX3VwZGF0ZUFuY2VzdG9ycyhPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3NraXBQcmlzdGluZUNoZWNrOmV9KSksdGhpcy5fb25EaXNhYmxlZENoYW5nZS5mb3JFYWNoKCh0PT50KCEwKSkpfWVuYWJsZSh0PXt9KXtjb25zdCBlPXRoaXMuX3BhcmVudE1hcmtlZERpcnR5KHQub25seVNlbGYpO3RoaXMuc3RhdHVzPVBqLHRoaXMuX2ZvckVhY2hDaGlsZCgoZT0+e2UuZW5hYmxlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7b25seVNlbGY6ITB9KSl9KSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6dC5lbWl0RXZlbnR9KSx0aGlzLl91cGRhdGVBbmNlc3RvcnMoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtza2lwUHJpc3RpbmVDaGVjazplfSkpLHRoaXMuX29uRGlzYWJsZWRDaGFuZ2UuZm9yRWFjaCgodD0+dCghMSkpKX1fdXBkYXRlQW5jZXN0b3JzKHQpe3RoaXMuX3BhcmVudCYmIXQub25seVNlbGYmJih0aGlzLl9wYXJlbnQudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh0KSx0LnNraXBQcmlzdGluZUNoZWNrfHx0aGlzLl9wYXJlbnQuX3VwZGF0ZVByaXN0aW5lKCksdGhpcy5fcGFyZW50Ll91cGRhdGVUb3VjaGVkKCkpfXNldFBhcmVudCh0KXt0aGlzLl9wYXJlbnQ9dH11cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHQ9e30pe3RoaXMuX3NldEluaXRpYWxTdGF0dXMoKSx0aGlzLl91cGRhdGVWYWx1ZSgpLHRoaXMuZW5hYmxlZCYmKHRoaXMuX2NhbmNlbEV4aXN0aW5nU3Vic2NyaXB0aW9uKCksdGhpcy5lcnJvcnM9dGhpcy5fcnVuVmFsaWRhdG9yKCksdGhpcy5zdGF0dXM9dGhpcy5fY2FsY3VsYXRlU3RhdHVzKCksdGhpcy5zdGF0dXMhPT1QaiYmdGhpcy5zdGF0dXMhPT1ranx8dGhpcy5fcnVuQXN5bmNWYWxpZGF0b3IodC5lbWl0RXZlbnQpKSwhMSE9PXQuZW1pdEV2ZW50JiYodGhpcy52YWx1ZUNoYW5nZXMuZW1pdCh0aGlzLnZhbHVlKSx0aGlzLnN0YXR1c0NoYW5nZXMuZW1pdCh0aGlzLnN0YXR1cykpLHRoaXMuX3BhcmVudCYmIXQub25seVNlbGYmJnRoaXMuX3BhcmVudC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHQpfV91cGRhdGVUcmVlVmFsaWRpdHkodD17ZW1pdEV2ZW50OiEwfSl7dGhpcy5fZm9yRWFjaENoaWxkKChlPT5lLl91cGRhdGVUcmVlVmFsaWRpdHkodCkpKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe29ubHlTZWxmOiEwLGVtaXRFdmVudDp0LmVtaXRFdmVudH0pfV9zZXRJbml0aWFsU3RhdHVzKCl7dGhpcy5zdGF0dXM9dGhpcy5fYWxsQ29udHJvbHNEaXNhYmxlZCgpP1NqOlBqfV9ydW5WYWxpZGF0b3IoKXtyZXR1cm4gdGhpcy52YWxpZGF0b3I/dGhpcy52YWxpZGF0b3IodGhpcyk6bnVsbH1fcnVuQXN5bmNWYWxpZGF0b3IodCl7aWYodGhpcy5hc3luY1ZhbGlkYXRvcil7dGhpcy5zdGF0dXM9a2osdGhpcy5faGFzT3duUGVuZGluZ0FzeW5jVmFsaWRhdG9yPSEwO2NvbnN0IGU9alYodGhpcy5hc3luY1ZhbGlkYXRvcih0aGlzKSk7dGhpcy5fYXN5bmNWYWxpZGF0aW9uU3Vic2NyaXB0aW9uPWUuc3Vic2NyaWJlKChlPT57dGhpcy5faGFzT3duUGVuZGluZ0FzeW5jVmFsaWRhdG9yPSExLHRoaXMuc2V0RXJyb3JzKGUse2VtaXRFdmVudDp0fSl9KSl9fV9jYW5jZWxFeGlzdGluZ1N1YnNjcmlwdGlvbigpe3RoaXMuX2FzeW5jVmFsaWRhdGlvblN1YnNjcmlwdGlvbiYmKHRoaXMuX2FzeW5jVmFsaWRhdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcj0hMSl9c2V0RXJyb3JzKHQsZT17fSl7dGhpcy5lcnJvcnM9dCx0aGlzLl91cGRhdGVDb250cm9sc0Vycm9ycyghMSE9PWUuZW1pdEV2ZW50KX1nZXQodCl7cmV0dXJuKGZ1bmN0aW9uIGUodCxuLG8pe2lmKG51bGw9PW4pcmV0dXJuIG51bGw7aWYoQXJyYXkuaXNBcnJheShuKXx8KG49bi5zcGxpdChvKSksQXJyYXkuaXNBcnJheShuKSYmMD09PW4ubGVuZ3RoKXJldHVybiBudWxsO2xldCBpPXQ7cmV0dXJuIG4uZm9yRWFjaCgodD0+e2k9aSBpbnN0YW5jZW9mIHpqP2kuY29udHJvbHMuaGFzT3duUHJvcGVydHkodCk/aS5jb250cm9sc1t0XTpudWxsOmkgaW5zdGFuY2VvZiBIaiYmaS5hdCh0KXx8bnVsbH0pKSxpfSkodGhpcyx0LCIuIil9Z2V0RXJyb3IodCxlKXtjb25zdCBuPWU/dGhpcy5nZXQoZSk6dGhpcztyZXR1cm4gbiYmbi5lcnJvcnM/bi5lcnJvcnNbdF06bnVsbH1oYXNFcnJvcih0LGUpe3JldHVybiEhdGhpcy5nZXRFcnJvcih0LGUpfWdldCByb290KCl7bGV0IHQ9dGhpcztmb3IoO3QuX3BhcmVudDspdD10Ll9wYXJlbnQ7cmV0dXJuIHR9X3VwZGF0ZUNvbnRyb2xzRXJyb3JzKHQpe3RoaXMuc3RhdHVzPXRoaXMuX2NhbGN1bGF0ZVN0YXR1cygpLHQmJnRoaXMuc3RhdHVzQ2hhbmdlcy5lbWl0KHRoaXMuc3RhdHVzKSx0aGlzLl9wYXJlbnQmJnRoaXMuX3BhcmVudC5fdXBkYXRlQ29udHJvbHNFcnJvcnModCl9X2luaXRPYnNlcnZhYmxlcygpe3RoaXMudmFsdWVDaGFuZ2VzPW5ldyBBYix0aGlzLnN0YXR1c0NoYW5nZXM9bmV3IEFifV9jYWxjdWxhdGVTdGF0dXMoKXtyZXR1cm4gdGhpcy5fYWxsQ29udHJvbHNEaXNhYmxlZCgpP1NqOnRoaXMuZXJyb3JzP3dqOnRoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcnx8dGhpcy5fYW55Q29udHJvbHNIYXZlU3RhdHVzKGtqKT9rajp0aGlzLl9hbnlDb250cm9sc0hhdmVTdGF0dXMod2opP3dqOlBqfV9hbnlDb250cm9sc0hhdmVTdGF0dXModCl7cmV0dXJuIHRoaXMuX2FueUNvbnRyb2xzKChlPT5lLnN0YXR1cz09PXQpKX1fYW55Q29udHJvbHNEaXJ0eSgpe3JldHVybiB0aGlzLl9hbnlDb250cm9scygodD0+dC5kaXJ0eSkpfV9hbnlDb250cm9sc1RvdWNoZWQoKXtyZXR1cm4gdGhpcy5fYW55Q29udHJvbHMoKHQ9PnQudG91Y2hlZCkpfV91cGRhdGVQcmlzdGluZSh0PXt9KXt0aGlzLnByaXN0aW5lPSF0aGlzLl9hbnlDb250cm9sc0RpcnR5KCksdGhpcy5fcGFyZW50JiYhdC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Ll91cGRhdGVQcmlzdGluZSh0KX1fdXBkYXRlVG91Y2hlZCh0PXt9KXt0aGlzLnRvdWNoZWQ9dGhpcy5fYW55Q29udHJvbHNUb3VjaGVkKCksdGhpcy5fcGFyZW50JiYhdC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Ll91cGRhdGVUb3VjaGVkKHQpfV9pc0JveGVkVmFsdWUodCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT09dCYmMj09PU9iamVjdC5rZXlzKHQpLmxlbmd0aCYmInZhbHVlImluIHQmJiJkaXNhYmxlZCJpbiB0fV9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSh0KXt0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2U9dH1fc2V0VXBkYXRlU3RyYXRlZ3kodCl7VGoodCkmJm51bGwhPXQudXBkYXRlT24mJih0aGlzLl91cGRhdGVPbj10LnVwZGF0ZU9uKX1fcGFyZW50TWFya2VkRGlydHkodCl7cmV0dXJuIXQmJiEoIXRoaXMuX3BhcmVudHx8IXRoaXMuX3BhcmVudC5kaXJ0eSkmJiF0aGlzLl9wYXJlbnQuX2FueUNvbnRyb2xzRGlydHkoKX19Y2xhc3MgSWogZXh0ZW5kcyBOantjb25zdHJ1Y3Rvcih0PW51bGwsZSxuKXtzdXBlcihEaihlKSxBaihuLGUpKSx0aGlzLl9vbkNoYW5nZT1bXSx0aGlzLl9hcHBseUZvcm1TdGF0ZSh0KSx0aGlzLl9zZXRVcGRhdGVTdHJhdGVneShlKSx0aGlzLl9pbml0T2JzZXJ2YWJsZXMoKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe29ubHlTZWxmOiEwLGVtaXRFdmVudDohIW59KX1zZXRWYWx1ZSh0LGU9e30pe3RoaXMudmFsdWU9dGhpcy5fcGVuZGluZ1ZhbHVlPXQsdGhpcy5fb25DaGFuZ2UubGVuZ3RoJiYhMSE9PWUuZW1pdE1vZGVsVG9WaWV3Q2hhbmdlJiZ0aGlzLl9vbkNoYW5nZS5mb3JFYWNoKCh0PT50KHRoaXMudmFsdWUsITEhPT1lLmVtaXRWaWV3VG9Nb2RlbENoYW5nZSkpKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoZSl9cGF0Y2hWYWx1ZSh0LGU9e30pe3RoaXMuc2V0VmFsdWUodCxlKX1yZXNldCh0PW51bGwsZT17fSl7dGhpcy5fYXBwbHlGb3JtU3RhdGUodCksdGhpcy5tYXJrQXNQcmlzdGluZShlKSx0aGlzLm1hcmtBc1VudG91Y2hlZChlKSx0aGlzLnNldFZhbHVlKHRoaXMudmFsdWUsZSksdGhpcy5fcGVuZGluZ0NoYW5nZT0hMX1fdXBkYXRlVmFsdWUoKXt9X2FueUNvbnRyb2xzKHQpe3JldHVybiExfV9hbGxDb250cm9sc0Rpc2FibGVkKCl7cmV0dXJuIHRoaXMuZGlzYWJsZWR9cmVnaXN0ZXJPbkNoYW5nZSh0KXt0aGlzLl9vbkNoYW5nZS5wdXNoKHQpfV91bnJlZ2lzdGVyT25DaGFuZ2UodCl7eGoodGhpcy5fb25DaGFuZ2UsdCl9cmVnaXN0ZXJPbkRpc2FibGVkQ2hhbmdlKHQpe3RoaXMuX29uRGlzYWJsZWRDaGFuZ2UucHVzaCh0KX1fdW5yZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2UodCl7eGoodGhpcy5fb25EaXNhYmxlZENoYW5nZSx0KX1fZm9yRWFjaENoaWxkKHQpe31fc3luY1BlbmRpbmdDb250cm9scygpe3JldHVybiEoInN1Ym1pdCIhPT10aGlzLnVwZGF0ZU9ufHwodGhpcy5fcGVuZGluZ0RpcnR5JiZ0aGlzLm1hcmtBc0RpcnR5KCksdGhpcy5fcGVuZGluZ1RvdWNoZWQmJnRoaXMubWFya0FzVG91Y2hlZCgpLCF0aGlzLl9wZW5kaW5nQ2hhbmdlKXx8KHRoaXMuc2V0VmFsdWUodGhpcy5fcGVuZGluZ1ZhbHVlLHtvbmx5U2VsZjohMCxlbWl0TW9kZWxUb1ZpZXdDaGFuZ2U6ITF9KSwwKSl9X2FwcGx5Rm9ybVN0YXRlKHQpe3RoaXMuX2lzQm94ZWRWYWx1ZSh0KT8odGhpcy52YWx1ZT10aGlzLl9wZW5kaW5nVmFsdWU9dC52YWx1ZSx0LmRpc2FibGVkP3RoaXMuZGlzYWJsZSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OiExfSk6dGhpcy5lbmFibGUoe29ubHlTZWxmOiEwLGVtaXRFdmVudDohMX0pKTp0aGlzLnZhbHVlPXRoaXMuX3BlbmRpbmdWYWx1ZT10fX1jbGFzcyB6aiBleHRlbmRzIE5qe2NvbnN0cnVjdG9yKHQsZSxuKXtzdXBlcihEaihlKSxBaihuLGUpKSx0aGlzLmNvbnRyb2xzPXQsdGhpcy5faW5pdE9ic2VydmFibGVzKCksdGhpcy5fc2V0VXBkYXRlU3RyYXRlZ3koZSksdGhpcy5fc2V0VXBDb250cm9scygpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OiEhbn0pfXJlZ2lzdGVyQ29udHJvbCh0LGUpe3JldHVybiB0aGlzLmNvbnRyb2xzW3RdP3RoaXMuY29udHJvbHNbdF06KHRoaXMuY29udHJvbHNbdF09ZSxlLnNldFBhcmVudCh0aGlzKSxlLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSh0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UpLGUpfWFkZENvbnRyb2wodCxlKXt0aGlzLnJlZ2lzdGVyQ29udHJvbCh0LGUpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpLHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSgpfXJlbW92ZUNvbnRyb2wodCl7dGhpcy5jb250cm9sc1t0XSYmdGhpcy5jb250cm9sc1t0XS5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UoKCgpPT57fSkpLGRlbGV0ZSB0aGlzLmNvbnRyb2xzW3RdLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpLHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSgpfXNldENvbnRyb2wodCxlKXt0aGlzLmNvbnRyb2xzW3RdJiZ0aGlzLmNvbnRyb2xzW3RdLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSgoKCk9Pnt9KSksZGVsZXRlIHRoaXMuY29udHJvbHNbdF0sZSYmdGhpcy5yZWdpc3RlckNvbnRyb2wodCxlKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UoKX1jb250YWlucyh0KXtyZXR1cm4gdGhpcy5jb250cm9scy5oYXNPd25Qcm9wZXJ0eSh0KSYmdGhpcy5jb250cm9sc1t0XS5lbmFibGVkfXNldFZhbHVlKHQsZT17fSl7dGhpcy5fY2hlY2tBbGxWYWx1ZXNQcmVzZW50KHQpLE9iamVjdC5rZXlzKHQpLmZvckVhY2goKG49Pnt0aGlzLl90aHJvd0lmQ29udHJvbE1pc3NpbmcobiksdGhpcy5jb250cm9sc1tuXS5zZXRWYWx1ZSh0W25dLHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ZS5lbWl0RXZlbnR9KX0pKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoZSl9cGF0Y2hWYWx1ZSh0LGU9e30pe251bGwhPXQmJihPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChuPT57dGhpcy5jb250cm9sc1tuXSYmdGhpcy5jb250cm9sc1tuXS5wYXRjaFZhbHVlKHRbbl0se29ubHlTZWxmOiEwLGVtaXRFdmVudDplLmVtaXRFdmVudH0pfSkpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShlKSl9cmVzZXQodD17fSxlPXt9KXt0aGlzLl9mb3JFYWNoQ2hpbGQoKChuLG8pPT57bi5yZXNldCh0W29dLHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ZS5lbWl0RXZlbnR9KX0pKSx0aGlzLl91cGRhdGVQcmlzdGluZShlKSx0aGlzLl91cGRhdGVUb3VjaGVkKGUpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShlKX1nZXRSYXdWYWx1ZSgpe3JldHVybiB0aGlzLl9yZWR1Y2VDaGlsZHJlbih7fSwoKHQsZSxuKT0+KHRbbl09ZSBpbnN0YW5jZW9mIElqP2UudmFsdWU6ZS5nZXRSYXdWYWx1ZSgpLHQpKSl9X3N5bmNQZW5kaW5nQ29udHJvbHMoKXtsZXQgdD10aGlzLl9yZWR1Y2VDaGlsZHJlbighMSwoKHQsZSk9PiEhZS5fc3luY1BlbmRpbmdDb250cm9scygpfHx0KSk7cmV0dXJuIHQmJnRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITB9KSx0fV90aHJvd0lmQ29udHJvbE1pc3NpbmcodCl7aWYoIU9iamVjdC5rZXlzKHRoaXMuY29udHJvbHMpLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlxuICAgICAgICBUaGVyZSBhcmUgbm8gZm9ybSBjb250cm9scyByZWdpc3RlcmVkIHdpdGggdGhpcyBncm91cCB5ZXQuIElmIHlvdSdyZSB1c2luZyBuZ01vZGVsLFxuICAgICAgICB5b3UgbWF5IHdhbnQgdG8gY2hlY2sgbmV4dCB0aWNrIChlLmcuIHVzZSBzZXRUaW1lb3V0KS5cbiAgICAgICIpO2lmKCF0aGlzLmNvbnRyb2xzW3RdKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgZm9ybSBjb250cm9sIHdpdGggbmFtZTogJHt0fS5gKX1fZm9yRWFjaENoaWxkKHQpe09iamVjdC5rZXlzKHRoaXMuY29udHJvbHMpLmZvckVhY2goKGU9Pntjb25zdCBuPXRoaXMuY29udHJvbHNbZV07biYmdChuLGUpfSkpfV9zZXRVcENvbnRyb2xzKCl7dGhpcy5fZm9yRWFjaENoaWxkKCh0PT57dC5zZXRQYXJlbnQodGhpcyksdC5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UodGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKX0pKX1fdXBkYXRlVmFsdWUoKXt0aGlzLnZhbHVlPXRoaXMuX3JlZHVjZVZhbHVlKCl9X2FueUNvbnRyb2xzKHQpe2Zvcihjb25zdCBlIG9mIE9iamVjdC5rZXlzKHRoaXMuY29udHJvbHMpKXtjb25zdCBuPXRoaXMuY29udHJvbHNbZV07aWYodGhpcy5jb250YWlucyhlKSYmdChuKSlyZXR1cm4hMH1yZXR1cm4hMX1fcmVkdWNlVmFsdWUoKXtyZXR1cm4gdGhpcy5fcmVkdWNlQ2hpbGRyZW4oe30sKCh0LGUsbik9PigoZS5lbmFibGVkfHx0aGlzLmRpc2FibGVkKSYmKHRbbl09ZS52YWx1ZSksdCkpKX1fcmVkdWNlQ2hpbGRyZW4odCxlKXtsZXQgbj10O3JldHVybiB0aGlzLl9mb3JFYWNoQ2hpbGQoKCh0LG8pPT57bj1lKG4sdCxvKX0pKSxufV9hbGxDb250cm9sc0Rpc2FibGVkKCl7Zm9yKGNvbnN0IHQgb2YgT2JqZWN0LmtleXModGhpcy5jb250cm9scykpaWYodGhpcy5jb250cm9sc1t0XS5lbmFibGVkKXJldHVybiExO3JldHVybiBPYmplY3Qua2V5cyh0aGlzLmNvbnRyb2xzKS5sZW5ndGg+MHx8dGhpcy5kaXNhYmxlZH1fY2hlY2tBbGxWYWx1ZXNQcmVzZW50KHQpe3RoaXMuX2ZvckVhY2hDaGlsZCgoKGUsbik9PntpZih2b2lkIDA9PT10W25dKXRocm93IG5ldyBFcnJvcihgTXVzdCBzdXBwbHkgYSB2YWx1ZSBmb3IgZm9ybSBjb250cm9sIHdpdGggbmFtZTogJyR7bn0nLmApfSkpfX1jbGFzcyBIaiBleHRlbmRzIE5qe2NvbnN0cnVjdG9yKHQsZSxuKXtzdXBlcihEaihlKSxBaihuLGUpKSx0aGlzLmNvbnRyb2xzPXQsdGhpcy5faW5pdE9ic2VydmFibGVzKCksdGhpcy5fc2V0VXBkYXRlU3RyYXRlZ3koZSksdGhpcy5fc2V0VXBDb250cm9scygpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OiEhbn0pfWF0KHQpe3JldHVybiB0aGlzLmNvbnRyb2xzW3RdfXB1c2godCl7dGhpcy5jb250cm9scy5wdXNoKHQpLHRoaXMuX3JlZ2lzdGVyQ29udHJvbCh0KSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UoKX1pbnNlcnQodCxlKXt0aGlzLmNvbnRyb2xzLnNwbGljZSh0LDAsZSksdGhpcy5fcmVnaXN0ZXJDb250cm9sKGUpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpfXJlbW92ZUF0KHQpe3RoaXMuY29udHJvbHNbdF0mJnRoaXMuY29udHJvbHNbdF0uX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKCgoKT0+e30pKSx0aGlzLmNvbnRyb2xzLnNwbGljZSh0LDEpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpfXNldENvbnRyb2wodCxlKXt0aGlzLmNvbnRyb2xzW3RdJiZ0aGlzLmNvbnRyb2xzW3RdLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSgoKCk9Pnt9KSksdGhpcy5jb250cm9scy5zcGxpY2UodCwxKSxlJiYodGhpcy5jb250cm9scy5zcGxpY2UodCwwLGUpLHRoaXMuX3JlZ2lzdGVyQ29udHJvbChlKSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCksdGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKCl9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLmNvbnRyb2xzLmxlbmd0aH1zZXRWYWx1ZSh0LGU9e30pe3RoaXMuX2NoZWNrQWxsVmFsdWVzUHJlc2VudCh0KSx0LmZvckVhY2goKCh0LG4pPT57dGhpcy5fdGhyb3dJZkNvbnRyb2xNaXNzaW5nKG4pLHRoaXMuYXQobikuc2V0VmFsdWUodCx7b25seVNlbGY6ITAsZW1pdEV2ZW50OmUuZW1pdEV2ZW50fSl9KSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KGUpfXBhdGNoVmFsdWUodCxlPXt9KXtudWxsIT10JiYodC5mb3JFYWNoKCgodCxuKT0+e3RoaXMuYXQobikmJnRoaXMuYXQobikucGF0Y2hWYWx1ZSh0LHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ZS5lbWl0RXZlbnR9KX0pKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoZSkpfXJlc2V0KHQ9W10sZT17fSl7dGhpcy5fZm9yRWFjaENoaWxkKCgobixvKT0+e24ucmVzZXQodFtvXSx7b25seVNlbGY6ITAsZW1pdEV2ZW50OmUuZW1pdEV2ZW50fSl9KSksdGhpcy5fdXBkYXRlUHJpc3RpbmUoZSksdGhpcy5fdXBkYXRlVG91Y2hlZChlKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoZSl9Z2V0UmF3VmFsdWUoKXtyZXR1cm4gdGhpcy5jb250cm9scy5tYXAoKHQ9PnQgaW5zdGFuY2VvZiBJaj90LnZhbHVlOnQuZ2V0UmF3VmFsdWUoKSkpfWNsZWFyKCl7dGhpcy5jb250cm9scy5sZW5ndGg8MXx8KHRoaXMuX2ZvckVhY2hDaGlsZCgodD0+dC5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UoKCgpPT57fSkpKSksdGhpcy5jb250cm9scy5zcGxpY2UoMCksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCkpfV9zeW5jUGVuZGluZ0NvbnRyb2xzKCl7bGV0IHQ9dGhpcy5jb250cm9scy5yZWR1Y2UoKCh0LGUpPT4hIWUuX3N5bmNQZW5kaW5nQ29udHJvbHMoKXx8dCksITEpO3JldHVybiB0JiZ0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe29ubHlTZWxmOiEwfSksdH1fdGhyb3dJZkNvbnRyb2xNaXNzaW5nKHQpe2lmKCF0aGlzLmNvbnRyb2xzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlxuICAgICAgICBUaGVyZSBhcmUgbm8gZm9ybSBjb250cm9scyByZWdpc3RlcmVkIHdpdGggdGhpcyBhcnJheSB5ZXQuIElmIHlvdSdyZSB1c2luZyBuZ01vZGVsLFxuICAgICAgICB5b3UgbWF5IHdhbnQgdG8gY2hlY2sgbmV4dCB0aWNrIChlLmcuIHVzZSBzZXRUaW1lb3V0KS5cbiAgICAgICIpO2lmKCF0aGlzLmF0KHQpKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgZm9ybSBjb250cm9sIGF0IGluZGV4ICR7dH1gKX1fZm9yRWFjaENoaWxkKHQpe3RoaXMuY29udHJvbHMuZm9yRWFjaCgoKGUsbik9Pnt0KGUsbil9KSl9X3VwZGF0ZVZhbHVlKCl7dGhpcy52YWx1ZT10aGlzLmNvbnRyb2xzLmZpbHRlcigodD0+dC5lbmFibGVkfHx0aGlzLmRpc2FibGVkKSkubWFwKCh0PT50LnZhbHVlKSl9X2FueUNvbnRyb2xzKHQpe3JldHVybiB0aGlzLmNvbnRyb2xzLnNvbWUoKGU9PmUuZW5hYmxlZCYmdChlKSkpfV9zZXRVcENvbnRyb2xzKCl7dGhpcy5fZm9yRWFjaENoaWxkKCh0PT50aGlzLl9yZWdpc3RlckNvbnRyb2wodCkpKX1fY2hlY2tBbGxWYWx1ZXNQcmVzZW50KHQpe3RoaXMuX2ZvckVhY2hDaGlsZCgoKGUsbik9PntpZih2b2lkIDA9PT10W25dKXRocm93IG5ldyBFcnJvcihgTXVzdCBzdXBwbHkgYSB2YWx1ZSBmb3IgZm9ybSBjb250cm9sIGF0IGluZGV4OiAke259LmApfSkpfV9hbGxDb250cm9sc0Rpc2FibGVkKCl7Zm9yKGNvbnN0IHQgb2YgdGhpcy5jb250cm9scylpZih0LmVuYWJsZWQpcmV0dXJuITE7cmV0dXJuIHRoaXMuY29udHJvbHMubGVuZ3RoPjB8fHRoaXMuZGlzYWJsZWR9X3JlZ2lzdGVyQ29udHJvbCh0KXt0LnNldFBhcmVudCh0aGlzKSx0Ll9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSh0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UpfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY29uc3QgRmo9e3Byb3ZpZGU6dGosdXNlRXhpc3Rpbmc6SW4oKCgpPT5CaikpfSxMaj1Qcm9taXNlLnJlc29sdmUobnVsbCk7Y2xhc3MgQmogZXh0ZW5kcyB0antjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKCksdGhpcy5zdWJtaXR0ZWQ9ITEsdGhpcy5fZGlyZWN0aXZlcz1bXSx0aGlzLm5nU3VibWl0PW5ldyBBYix0aGlzLmZvcm09bmV3IHpqKHt9LHFWKHQpLFhWKGUpKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9zZXRVcGRhdGVTdHJhdGVneSgpfWdldCBmb3JtRGlyZWN0aXZlKCl7cmV0dXJuIHRoaXN9Z2V0IGNvbnRyb2woKXtyZXR1cm4gdGhpcy5mb3JtfWdldCBwYXRoKCl7cmV0dXJuW119Z2V0IGNvbnRyb2xzKCl7cmV0dXJuIHRoaXMuZm9ybS5jb250cm9sc31hZGRDb250cm9sKHQpe0xqLnRoZW4oKCgpPT57Y29uc3QgZT10aGlzLl9maW5kQ29udGFpbmVyKHQucGF0aCk7dC5jb250cm9sPWUucmVnaXN0ZXJDb250cm9sKHQubmFtZSx0LmNvbnRyb2wpLG1qKHQuY29udHJvbCx0KSx0LmNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSksdGhpcy5fZGlyZWN0aXZlcy5wdXNoKHQpfSkpfWdldENvbnRyb2wodCl7cmV0dXJuIHRoaXMuZm9ybS5nZXQodC5wYXRoKX1yZW1vdmVDb250cm9sKHQpe0xqLnRoZW4oKCgpPT57Y29uc3QgZT10aGlzLl9maW5kQ29udGFpbmVyKHQucGF0aCk7ZSYmZS5yZW1vdmVDb250cm9sKHQubmFtZSkseGoodGhpcy5fZGlyZWN0aXZlcyx0KX0pKX1hZGRGb3JtR3JvdXAodCl7TGoudGhlbigoKCk9Pntjb25zdCBlPXRoaXMuX2ZpbmRDb250YWluZXIodC5wYXRoKSxuPW5ldyB6aih7fSk7eWoobix0KSxlLnJlZ2lzdGVyQ29udHJvbCh0Lm5hbWUsbiksbi51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KX0pKX1yZW1vdmVGb3JtR3JvdXAodCl7TGoudGhlbigoKCk9Pntjb25zdCBlPXRoaXMuX2ZpbmRDb250YWluZXIodC5wYXRoKTtlJiZlLnJlbW92ZUNvbnRyb2wodC5uYW1lKX0pKX1nZXRGb3JtR3JvdXAodCl7cmV0dXJuIHRoaXMuZm9ybS5nZXQodC5wYXRoKX11cGRhdGVNb2RlbCh0LGUpe0xqLnRoZW4oKCgpPT57dGhpcy5mb3JtLmdldCh0LnBhdGgpLnNldFZhbHVlKGUpfSkpfXNldFZhbHVlKHQpe3RoaXMuY29udHJvbC5zZXRWYWx1ZSh0KX1vblN1Ym1pdCh0KXtyZXR1cm4gdGhpcy5zdWJtaXR0ZWQ9ITAsTWoodGhpcy5mb3JtLHRoaXMuX2RpcmVjdGl2ZXMpLHRoaXMubmdTdWJtaXQuZW1pdCh0KSwhMX1vblJlc2V0KCl7dGhpcy5yZXNldEZvcm0oKX1yZXNldEZvcm0odCl7dGhpcy5mb3JtLnJlc2V0KHQpLHRoaXMuc3VibWl0dGVkPSExfV9zZXRVcGRhdGVTdHJhdGVneSgpe3RoaXMub3B0aW9ucyYmbnVsbCE9dGhpcy5vcHRpb25zLnVwZGF0ZU9uJiYodGhpcy5mb3JtLl91cGRhdGVPbj10aGlzLm9wdGlvbnMudXBkYXRlT24pfV9maW5kQ29udGFpbmVyKHQpe3JldHVybiB0LnBvcCgpLHQubGVuZ3RoP3RoaXMuZm9ybS5nZXQodCk6dGhpcy5mb3JtfX1Cai7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8QmopKE11KEVWLDEwKSxNdShBViwxMCkpfSxCai7JtWRpcj1Kbyh7dHlwZTpCaixzZWxlY3RvcnM6W1siZm9ybSIsMywibmdOb0Zvcm0iLCIiLDMsImZvcm1Hcm91cCIsIiJdLFsibmctZm9ybSJdLFsiIiwibmdGb3JtIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MSZlJiZOdSgic3VibWl0IiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vblN1Ym1pdChlKX0pKSgicmVzZXQiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub25SZXNldCgpfSkpfSxpbnB1dHM6e29wdGlvbnM6WyJuZ0Zvcm1PcHRpb25zIiwib3B0aW9ucyJdfSxvdXRwdXRzOntuZ1N1Ym1pdDoibmdTdWJtaXQifSxleHBvcnRBczpbIm5nRm9ybSJdLGZlYXR1cmVzOltpaChbRmpdKSxnbV19KSxCai5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOkFycmF5LGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTpDc30se3R5cGU6eXMsYXJnczpbRVZdfV19LHt0eXBlOkFycmF5LGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTpDc30se3R5cGU6eXMsYXJnczpbQVZdfV19XSxCai5wcm9wRGVjb3JhdG9ycz17b3B0aW9uczpbe3R5cGU6eV8sYXJnczpbIm5nRm9ybU9wdGlvbnMiXX1dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEJqLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6ImZvcm06bm90KFtuZ05vRm9ybV0pOm5vdChbZm9ybUdyb3VwXSksbmctZm9ybSxbbmdGb3JtXSIscHJvdmlkZXJzOltGal0saG9zdDp7IihzdWJtaXQpIjoib25TdWJtaXQoJGV2ZW50KSIsIihyZXNldCkiOiJvblJlc2V0KCkifSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczoibmdGb3JtIn1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkFycmF5LGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTpDc30se3R5cGU6eXMsYXJnczpbRVZdfV19LHt0eXBlOkFycmF5LGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTpDc30se3R5cGU6eXMsYXJnczpbQVZdfV19XX0pLHtvcHRpb25zOlt7dHlwZTp5XyxhcmdzOlsibmdGb3JtT3B0aW9ucyJdfV19KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIFZqIGV4dGVuZHMgdGp7bmdPbkluaXQoKXt0aGlzLl9jaGVja1BhcmVudFR5cGUoKSx0aGlzLmZvcm1EaXJlY3RpdmUuYWRkRm9ybUdyb3VwKHRoaXMpfW5nT25EZXN0cm95KCl7dGhpcy5mb3JtRGlyZWN0aXZlJiZ0aGlzLmZvcm1EaXJlY3RpdmUucmVtb3ZlRm9ybUdyb3VwKHRoaXMpfWdldCBjb250cm9sKCl7cmV0dXJuIHRoaXMuZm9ybURpcmVjdGl2ZS5nZXRGb3JtR3JvdXAodGhpcyl9Z2V0IHBhdGgoKXtyZXR1cm4gcGoobnVsbD09dGhpcy5uYW1lP3RoaXMubmFtZTp0aGlzLm5hbWUudG9TdHJpbmcoKSx0aGlzLl9wYXJlbnQpfWdldCBmb3JtRGlyZWN0aXZlKCl7cmV0dXJuIHRoaXMuX3BhcmVudD90aGlzLl9wYXJlbnQuZm9ybURpcmVjdGl2ZTpudWxsfV9jaGVja1BhcmVudFR5cGUoKXt9fVZqLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIGpqKGV8fFZqKX0sVmouybVkaXI9Sm8oe3R5cGU6VmosZmVhdHVyZXM6W2dtXX0pO2NvbnN0IGpqPXZyKFZqKTsoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFZqLFt7dHlwZTpnX31dLG51bGwsbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyBVantzdGF0aWMgbW9kZWxQYXJlbnRFeGNlcHRpb24oKXt0aHJvdyBuZXcgRXJyb3IoYFxuICAgICAgbmdNb2RlbCBjYW5ub3QgYmUgdXNlZCB0byByZWdpc3RlciBmb3JtIGNvbnRyb2xzIHdpdGggYSBwYXJlbnQgZm9ybUdyb3VwIGRpcmVjdGl2ZS4gIFRyeSB1c2luZ1xuICAgICAgZm9ybUdyb3VwJ3MgcGFydG5lciBkaXJlY3RpdmUgImZvcm1Db250cm9sTmFtZSIgaW5zdGVhZC4gIEV4YW1wbGU6XG5cbiAgICAgICR7c2p9XG5cbiAgICAgIE9yLCBpZiB5b3UnZCBsaWtlIHRvIGF2b2lkIHJlZ2lzdGVyaW5nIHRoaXMgZm9ybSBjb250cm9sLCBpbmRpY2F0ZSB0aGF0IGl0J3Mgc3RhbmRhbG9uZSBpbiBuZ01vZGVsT3B0aW9uczpcblxuICAgICAgRXhhbXBsZTpcblxuICAgICAgXG4gICAgPGRpdiBbZm9ybUdyb3VwXT0ibXlHcm91cCI+XG4gICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT0iZmlyc3ROYW1lIj5cbiAgICAgICA8aW5wdXQgWyhuZ01vZGVsKV09InNob3dNb3JlQ29udHJvbHMiIFtuZ01vZGVsT3B0aW9uc109IntzdGFuZGFsb25lOiB0cnVlfSI+XG4gICAgPC9kaXY+XG4gIGApfXN0YXRpYyBmb3JtR3JvdXBOYW1lRXhjZXB0aW9uKCl7dGhyb3cgbmV3IEVycm9yKGBcbiAgICAgIG5nTW9kZWwgY2Fubm90IGJlIHVzZWQgdG8gcmVnaXN0ZXIgZm9ybSBjb250cm9scyB3aXRoIGEgcGFyZW50IGZvcm1Hcm91cE5hbWUgb3IgZm9ybUFycmF5TmFtZSBkaXJlY3RpdmUuXG5cbiAgICAgIE9wdGlvbiAxOiBVc2UgZm9ybUNvbnRyb2xOYW1lIGluc3RlYWQgb2YgbmdNb2RlbCAocmVhY3RpdmUgc3RyYXRlZ3kpOlxuXG4gICAgICAke2xqfVxuXG4gICAgICBPcHRpb24gMjogIFVwZGF0ZSBuZ01vZGVsJ3MgcGFyZW50IGJlIG5nTW9kZWxHcm91cCAodGVtcGxhdGUtZHJpdmVuIHN0cmF0ZWd5KTpcblxuICAgICAgJHtjan1gKX1zdGF0aWMgbWlzc2luZ05hbWVFeGNlcHRpb24oKXt0aHJvdyBuZXcgRXJyb3IoJ0lmIG5nTW9kZWwgaXMgdXNlZCB3aXRoaW4gYSBmb3JtIHRhZywgZWl0aGVyIHRoZSBuYW1lIGF0dHJpYnV0ZSBtdXN0IGJlIHNldCBvciB0aGUgZm9ybVxuICAgICAgY29udHJvbCBtdXN0IGJlIGRlZmluZWQgYXMgXCdzdGFuZGFsb25lXCcgaW4gbmdNb2RlbE9wdGlvbnMuXG5cbiAgICAgIEV4YW1wbGUgMTogPGlucHV0IFsobmdNb2RlbCldPSJwZXJzb24uZmlyc3ROYW1lIiBuYW1lPSJmaXJzdCI+XG4gICAgICBFeGFtcGxlIDI6IDxpbnB1dCBbKG5nTW9kZWwpXT0icGVyc29uLmZpcnN0TmFtZSIgW25nTW9kZWxPcHRpb25zXT0ie3N0YW5kYWxvbmU6IHRydWV9Ij4nKX1zdGF0aWMgbW9kZWxHcm91cFBhcmVudEV4Y2VwdGlvbigpe3Rocm93IG5ldyBFcnJvcihgXG4gICAgICBuZ01vZGVsR3JvdXAgY2Fubm90IGJlIHVzZWQgd2l0aCBhIHBhcmVudCBmb3JtR3JvdXAgZGlyZWN0aXZlLlxuXG4gICAgICBPcHRpb24gMTogVXNlIGZvcm1Hcm91cE5hbWUgaW5zdGVhZCBvZiBuZ01vZGVsR3JvdXAgKHJlYWN0aXZlIHN0cmF0ZWd5KTpcblxuICAgICAgJHtsan1cblxuICAgICAgT3B0aW9uIDI6ICBVc2UgYSByZWd1bGFyIGZvcm0gdGFnIGluc3RlYWQgb2YgdGhlIGZvcm1Hcm91cCBkaXJlY3RpdmUgKHRlbXBsYXRlLWRyaXZlbiBzdHJhdGVneSk6XG5cbiAgICAgICR7Y2p9YCl9fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jb25zdCBXaj17cHJvdmlkZTp0aix1c2VFeGlzdGluZzpJbigoKCk9PkdqKSl9O2NsYXNzIEdqIGV4dGVuZHMgVmp7Y29uc3RydWN0b3IodCxlLG4pe3N1cGVyKCksdGhpcy5fcGFyZW50PXQsdGhpcy5fc2V0VmFsaWRhdG9ycyhlKSx0aGlzLl9zZXRBc3luY1ZhbGlkYXRvcnMobil9X2NoZWNrUGFyZW50VHlwZSgpe3RoaXMuX3BhcmVudCBpbnN0YW5jZW9mIEdqfHx0aGlzLl9wYXJlbnQgaW5zdGFuY2VvZiBCanx8InVuZGVmaW5lZCIhPXR5cGVvZiBuZ0Rldk1vZGUmJiFuZ0Rldk1vZGV8fFVqLm1vZGVsR3JvdXBQYXJlbnRFeGNlcHRpb24oKX19R2ouybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEdqKShNdSh0aiw1KSxNdShFViwxMCksTXUoQVYsMTApKX0sR2ouybVkaXI9Sm8oe3R5cGU6R2osc2VsZWN0b3JzOltbIiIsIm5nTW9kZWxHcm91cCIsIiJdXSxpbnB1dHM6e25hbWU6WyJuZ01vZGVsR3JvdXAiLCJuYW1lIl19LGV4cG9ydEFzOlsibmdNb2RlbEdyb3VwIl0sZmVhdHVyZXM6W2loKFtXal0pLGdtXX0pLEdqLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6dGosZGVjb3JhdG9yczpbe3R5cGU6dnN9LHt0eXBlOk1zfV19LHt0eXBlOkFycmF5LGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTpDc30se3R5cGU6eXMsYXJnczpbRVZdfV19LHt0eXBlOkFycmF5LGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTpDc30se3R5cGU6eXMsYXJnczpbQVZdfV19XSxHai5wcm9wRGVjb3JhdG9ycz17bmFtZTpbe3R5cGU6eV8sYXJnczpbIm5nTW9kZWxHcm91cCJdfV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoR2osW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoiW25nTW9kZWxHcm91cF0iLHByb3ZpZGVyczpbV2pdLGV4cG9ydEFzOiJuZ01vZGVsR3JvdXAifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6dGosZGVjb3JhdG9yczpbe3R5cGU6dnN9LHt0eXBlOk1zfV19LHt0eXBlOkFycmF5LGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTpDc30se3R5cGU6eXMsYXJnczpbRVZdfV19LHt0eXBlOkFycmF5LGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTpDc30se3R5cGU6eXMsYXJnczpbQVZdfV19XX0pLHtuYW1lOlt7dHlwZTp5XyxhcmdzOlsibmdNb2RlbEdyb3VwIl19XX0pOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3QgWWo9e3Byb3ZpZGU6bmosdXNlRXhpc3Rpbmc6SW4oKCgpPT5aaikpfSxxaj1Qcm9taXNlLnJlc29sdmUobnVsbCk7Y2xhc3MgWmogZXh0ZW5kcyBuantjb25zdHJ1Y3Rvcih0LGUsbixvKXtzdXBlcigpLHRoaXMuY29udHJvbD1uZXcgSWosdGhpcy5fcmVnaXN0ZXJlZD0hMSx0aGlzLnVwZGF0ZT1uZXcgQWIsdGhpcy5fcGFyZW50PXQsdGhpcy5fc2V0VmFsaWRhdG9ycyhlKSx0aGlzLl9zZXRBc3luY1ZhbGlkYXRvcnMobiksdGhpcy52YWx1ZUFjY2Vzc29yPXZqKHRoaXMsbyl9bmdPbkNoYW5nZXModCl7dGhpcy5fY2hlY2tGb3JFcnJvcnMoKSx0aGlzLl9yZWdpc3RlcmVkfHx0aGlzLl9zZXRVcENvbnRyb2woKSwiaXNEaXNhYmxlZCJpbiB0JiZ0aGlzLl91cGRhdGVEaXNhYmxlZCh0KSxDaih0LHRoaXMudmlld01vZGVsKSYmKHRoaXMuX3VwZGF0ZVZhbHVlKHRoaXMubW9kZWwpLHRoaXMudmlld01vZGVsPXRoaXMubW9kZWwpfW5nT25EZXN0cm95KCl7dGhpcy5mb3JtRGlyZWN0aXZlJiZ0aGlzLmZvcm1EaXJlY3RpdmUucmVtb3ZlQ29udHJvbCh0aGlzKX1nZXQgcGF0aCgpe3JldHVybiB0aGlzLl9wYXJlbnQ/cGoodGhpcy5uYW1lLHRoaXMuX3BhcmVudCk6W3RoaXMubmFtZV19Z2V0IGZvcm1EaXJlY3RpdmUoKXtyZXR1cm4gdGhpcy5fcGFyZW50P3RoaXMuX3BhcmVudC5mb3JtRGlyZWN0aXZlOm51bGx9dmlld1RvTW9kZWxVcGRhdGUodCl7dGhpcy52aWV3TW9kZWw9dCx0aGlzLnVwZGF0ZS5lbWl0KHQpfV9zZXRVcENvbnRyb2woKXt0aGlzLl9zZXRVcGRhdGVTdHJhdGVneSgpLHRoaXMuX2lzU3RhbmRhbG9uZSgpP3RoaXMuX3NldFVwU3RhbmRhbG9uZSgpOnRoaXMuZm9ybURpcmVjdGl2ZS5hZGRDb250cm9sKHRoaXMpLHRoaXMuX3JlZ2lzdGVyZWQ9ITB9X3NldFVwZGF0ZVN0cmF0ZWd5KCl7dGhpcy5vcHRpb25zJiZudWxsIT10aGlzLm9wdGlvbnMudXBkYXRlT24mJih0aGlzLmNvbnRyb2wuX3VwZGF0ZU9uPXRoaXMub3B0aW9ucy51cGRhdGVPbil9X2lzU3RhbmRhbG9uZSgpe3JldHVybiF0aGlzLl9wYXJlbnR8fCEoIXRoaXMub3B0aW9uc3x8IXRoaXMub3B0aW9ucy5zdGFuZGFsb25lKX1fc2V0VXBTdGFuZGFsb25lKCl7bWoodGhpcy5jb250cm9sLHRoaXMpLHRoaXMuY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KX1fY2hlY2tGb3JFcnJvcnMoKXt0aGlzLl9pc1N0YW5kYWxvbmUoKXx8dGhpcy5fY2hlY2tQYXJlbnRUeXBlKCksdGhpcy5fY2hlY2tOYW1lKCl9X2NoZWNrUGFyZW50VHlwZSgpeygidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmKCEodGhpcy5fcGFyZW50IGluc3RhbmNlb2YgR2opJiZ0aGlzLl9wYXJlbnQgaW5zdGFuY2VvZiBWaj9Vai5mb3JtR3JvdXBOYW1lRXhjZXB0aW9uKCk6dGhpcy5fcGFyZW50IGluc3RhbmNlb2YgR2p8fHRoaXMuX3BhcmVudCBpbnN0YW5jZW9mIEJqfHxVai5tb2RlbFBhcmVudEV4Y2VwdGlvbigpKX1fY2hlY2tOYW1lKCl7dGhpcy5vcHRpb25zJiZ0aGlzLm9wdGlvbnMubmFtZSYmKHRoaXMubmFtZT10aGlzLm9wdGlvbnMubmFtZSksdGhpcy5faXNTdGFuZGFsb25lKCl8fHRoaXMubmFtZXx8InVuZGVmaW5lZCIhPXR5cGVvZiBuZ0Rldk1vZGUmJiFuZ0Rldk1vZGV8fFVqLm1pc3NpbmdOYW1lRXhjZXB0aW9uKCl9X3VwZGF0ZVZhbHVlKHQpe3FqLnRoZW4oKCgpPT57dGhpcy5jb250cm9sLnNldFZhbHVlKHQse2VtaXRWaWV3VG9Nb2RlbENoYW5nZTohMX0pfSkpfV91cGRhdGVEaXNhYmxlZCh0KXtjb25zdCBlPXQuaXNEaXNhYmxlZC5jdXJyZW50VmFsdWUsbj0iIj09PWV8fGUmJiJmYWxzZSIhPT1lO3FqLnRoZW4oKCgpPT57biYmIXRoaXMuY29udHJvbC5kaXNhYmxlZD90aGlzLmNvbnRyb2wuZGlzYWJsZSgpOiFuJiZ0aGlzLmNvbnRyb2wuZGlzYWJsZWQmJnRoaXMuY29udHJvbC5lbmFibGUoKX0pKX19WmouybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFpqKShNdSh0aiw5KSxNdShFViwxMCksTXUoQVYsMTApLE11KHZWLDEwKSl9LFpqLsm1ZGlyPUpvKHt0eXBlOlpqLHNlbGVjdG9yczpbWyIiLCJuZ01vZGVsIiwiIiwzLCJmb3JtQ29udHJvbE5hbWUiLCIiLDMsImZvcm1Db250cm9sIiwiIl1dLGlucHV0czp7bmFtZToibmFtZSIsaXNEaXNhYmxlZDpbImRpc2FibGVkIiwiaXNEaXNhYmxlZCJdLG1vZGVsOlsibmdNb2RlbCIsIm1vZGVsIl0sb3B0aW9uczpbIm5nTW9kZWxPcHRpb25zIiwib3B0aW9ucyJdfSxvdXRwdXRzOnt1cGRhdGU6Im5nTW9kZWxDaGFuZ2UifSxleHBvcnRBczpbIm5nTW9kZWwiXSxmZWF0dXJlczpbaWgoW1lqXSksZ20sU2ldfSksWmouY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTp0aixkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6dnN9XX0se3R5cGU6QXJyYXksZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOkNzfSx7dHlwZTp5cyxhcmdzOltFVl19XX0se3R5cGU6QXJyYXksZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOkNzfSx7dHlwZTp5cyxhcmdzOltBVl19XX0se3R5cGU6QXJyYXksZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOkNzfSx7dHlwZTp5cyxhcmdzOlt2Vl19XX1dLFpqLnByb3BEZWNvcmF0b3JzPXtuYW1lOlt7dHlwZTp5X31dLGlzRGlzYWJsZWQ6W3t0eXBlOnlfLGFyZ3M6WyJkaXNhYmxlZCJdfV0sbW9kZWw6W3t0eXBlOnlfLGFyZ3M6WyJuZ01vZGVsIl19XSxvcHRpb25zOlt7dHlwZTp5XyxhcmdzOlsibmdNb2RlbE9wdGlvbnMiXX1dLHVwZGF0ZTpbe3R5cGU6X18sYXJnczpbIm5nTW9kZWxDaGFuZ2UiXX1dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFpqLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6IltuZ01vZGVsXTpub3QoW2Zvcm1Db250cm9sTmFtZV0pOm5vdChbZm9ybUNvbnRyb2xdKSIscHJvdmlkZXJzOltZal0sZXhwb3J0QXM6Im5nTW9kZWwifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6dGosZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnZzfV19LHt0eXBlOkFycmF5LGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTpDc30se3R5cGU6eXMsYXJnczpbRVZdfV19LHt0eXBlOkFycmF5LGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTpDc30se3R5cGU6eXMsYXJnczpbQVZdfV19LHt0eXBlOkFycmF5LGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTpDc30se3R5cGU6eXMsYXJnczpbdlZdfV19XX0pLHt1cGRhdGU6W3t0eXBlOl9fLGFyZ3M6WyJuZ01vZGVsQ2hhbmdlIl19XSxuYW1lOlt7dHlwZTp5X31dLGlzRGlzYWJsZWQ6W3t0eXBlOnlfLGFyZ3M6WyJkaXNhYmxlZCJdfV0sbW9kZWw6W3t0eXBlOnlfLGFyZ3M6WyJuZ01vZGVsIl19XSxvcHRpb25zOlt7dHlwZTp5XyxhcmdzOlsibmdNb2RlbE9wdGlvbnMiXX1dfSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyBYant9WGouybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFhqKX0sWGouybVkaXI9Sm8oe3R5cGU6WGosc2VsZWN0b3JzOltbImZvcm0iLDMsIm5nTm9Gb3JtIiwiIiwzLCJuZ05hdGl2ZVZhbGlkYXRlIiwiIl1dLGhvc3RBdHRyczpbIm5vdmFsaWRhdGUiLCIiXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoWGosW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoiZm9ybTpub3QoW25nTm9Gb3JtXSk6bm90KFtuZ05hdGl2ZVZhbGlkYXRlXSkiLGhvc3Q6e25vdmFsaWRhdGU6IiJ9fV19XSxudWxsLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3QgS2o9e3Byb3ZpZGU6dlYsdXNlRXhpc3Rpbmc6SW4oKCgpPT5KaikpLG11bHRpOiEwfTtjbGFzcyBKaiBleHRlbmRzIE1We2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIoKSx0aGlzLl9yZW5kZXJlcj10LHRoaXMuX2VsZW1lbnRSZWY9ZSx0aGlzLm9uQ2hhbmdlPXQ9Pnt9LHRoaXMub25Ub3VjaGVkPSgpPT57fX13cml0ZVZhbHVlKHQpe3RoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwidmFsdWUiLG51bGw9PXQ/IiI6dCl9cmVnaXN0ZXJPbkNoYW5nZSh0KXt0aGlzLm9uQ2hhbmdlPWU9Pnt0KCIiPT1lP251bGw6cGFyc2VGbG9hdChlKSl9fXJlZ2lzdGVyT25Ub3VjaGVkKHQpe3RoaXMub25Ub3VjaGVkPXR9c2V0RGlzYWJsZWRTdGF0ZSh0KXt0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsImRpc2FibGVkIix0KX19SmouybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEpqKShNdSh1aCksTXUoY2gpKX0sSmouybVkaXI9Sm8oe3R5cGU6Smosc2VsZWN0b3JzOltbImlucHV0IiwidHlwZSIsIm51bWJlciIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwibnVtYmVyIiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwidHlwZSIsIm51bWJlciIsIm5nTW9kZWwiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJk51KCJpbnB1dCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25DaGFuZ2UoZS50YXJnZXQudmFsdWUpfSkpKCJibHVyIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uVG91Y2hlZCgpfSkpfSxmZWF0dXJlczpbaWgoW0tqXSksZ21dfSksSmouY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTp1aH0se3R5cGU6Y2h9XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEpqLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIixob3N0OnsiKGlucHV0KSI6Im9uQ2hhbmdlKCRldmVudC50YXJnZXQudmFsdWUpIiwiKGJsdXIpIjoib25Ub3VjaGVkKCkifSxwcm92aWRlcnM6W0tqXX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOnVofSx7dHlwZTpjaH1dfSksbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCBRaj17cHJvdmlkZTp2Vix1c2VFeGlzdGluZzpJbigoKCk9PmVVKSksbXVsdGk6ITB9O2NsYXNzICRqe30kai7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8JGopfSwkai7JtW1vZD1abyh7dHlwZTokan0pLCRqLsm1aW5qPWNvKHt9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKCRqLFt7dHlwZTprX31dLG51bGwsbnVsbCk7Y2xhc3MgdFV7Y29uc3RydWN0b3IoKXt0aGlzLl9hY2Nlc3NvcnM9W119YWRkKHQsZSl7dGhpcy5fYWNjZXNzb3JzLnB1c2goW3QsZV0pfXJlbW92ZSh0KXtmb3IobGV0IGU9dGhpcy5fYWNjZXNzb3JzLmxlbmd0aC0xO2U+PTA7LS1lKWlmKHRoaXMuX2FjY2Vzc29yc1tlXVsxXT09PXQpcmV0dXJuIHZvaWQgdGhpcy5fYWNjZXNzb3JzLnNwbGljZShlLDEpfXNlbGVjdCh0KXt0aGlzLl9hY2Nlc3NvcnMuZm9yRWFjaCgoZT0+e3RoaXMuX2lzU2FtZUdyb3VwKGUsdCkmJmVbMV0hPT10JiZlWzFdLmZpcmVVbmNoZWNrKHQudmFsdWUpfSkpfV9pc1NhbWVHcm91cCh0LGUpe3JldHVybiEhdFswXS5jb250cm9sJiZ0WzBdLl9wYXJlbnQ9PT1lLl9jb250cm9sLl9wYXJlbnQmJnRbMV0ubmFtZT09PWUubmFtZX19dFUuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHRVKX0sdFUuybVwcm92PWxvKHtmYWN0b3J5OmZ1bmN0aW9uIHQoKXtyZXR1cm4gbmV3IHRVfSx0b2tlbjp0VSxwcm92aWRlZEluOiRqfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYih0VSxbe3R5cGU6Sm0sYXJnczpbe3Byb3ZpZGVkSW46JGp9XX1dLChmdW5jdGlvbigpe3JldHVybltdfSksbnVsbCk7Y2xhc3MgZVUgZXh0ZW5kcyBNVntjb25zdHJ1Y3Rvcih0LGUsbixvKXtzdXBlcigpLHRoaXMuX3JlbmRlcmVyPXQsdGhpcy5fZWxlbWVudFJlZj1lLHRoaXMuX3JlZ2lzdHJ5PW4sdGhpcy5faW5qZWN0b3I9byx0aGlzLm9uQ2hhbmdlPSgpPT57fSx0aGlzLm9uVG91Y2hlZD0oKT0+e319bmdPbkluaXQoKXt0aGlzLl9jb250cm9sPXRoaXMuX2luamVjdG9yLmdldChuaiksdGhpcy5fY2hlY2tOYW1lKCksdGhpcy5fcmVnaXN0cnkuYWRkKHRoaXMuX2NvbnRyb2wsdGhpcyl9bmdPbkRlc3Ryb3koKXt0aGlzLl9yZWdpc3RyeS5yZW1vdmUodGhpcyl9d3JpdGVWYWx1ZSh0KXt0aGlzLl9zdGF0ZT10PT09dGhpcy52YWx1ZSx0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsImNoZWNrZWQiLHRoaXMuX3N0YXRlKX1yZWdpc3Rlck9uQ2hhbmdlKHQpe3RoaXMuX2ZuPXQsdGhpcy5vbkNoYW5nZT0oKT0+e3QodGhpcy52YWx1ZSksdGhpcy5fcmVnaXN0cnkuc2VsZWN0KHRoaXMpfX1maXJlVW5jaGVjayh0KXt0aGlzLndyaXRlVmFsdWUodCl9cmVnaXN0ZXJPblRvdWNoZWQodCl7dGhpcy5vblRvdWNoZWQ9dH1zZXREaXNhYmxlZFN0YXRlKHQpe3RoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwiZGlzYWJsZWQiLHQpfV9jaGVja05hbWUoKXt0aGlzLm5hbWUmJnRoaXMuZm9ybUNvbnRyb2xOYW1lJiZ0aGlzLm5hbWUhPT10aGlzLmZvcm1Db250cm9sTmFtZSYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiYoZnVuY3Rpb24gdCgpe3Rocm93IG5ldyBFcnJvcignXG4gICAgICBJZiB5b3UgZGVmaW5lIGJvdGggYSBuYW1lIGFuZCBhIGZvcm1Db250cm9sTmFtZSBhdHRyaWJ1dGUgb24geW91ciByYWRpbyBidXR0b24sIHRoZWlyIHZhbHVlc1xuICAgICAgbXVzdCBtYXRjaC4gRXg6IDxpbnB1dCB0eXBlPSJyYWRpbyIgZm9ybUNvbnRyb2xOYW1lPSJmb29kIiBuYW1lPSJmb29kIj5cbiAgICAnKX0pKCksIXRoaXMubmFtZSYmdGhpcy5mb3JtQ29udHJvbE5hbWUmJih0aGlzLm5hbWU9dGhpcy5mb3JtQ29udHJvbE5hbWUpfX1lVS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8ZVUpKE11KHVoKSxNdShjaCksTXUodFUpLE11KFFwKSl9LGVVLsm1ZGlyPUpvKHt0eXBlOmVVLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJyYWRpbyIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwicmFkaW8iLCJmb3JtQ29udHJvbCIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwicmFkaW8iLCJuZ01vZGVsIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MSZlJiZOdSgiY2hhbmdlIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uQ2hhbmdlKCl9KSkoImJsdXIiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub25Ub3VjaGVkKCl9KSl9LGlucHV0czp7bmFtZToibmFtZSIsZm9ybUNvbnRyb2xOYW1lOiJmb3JtQ29udHJvbE5hbWUiLHZhbHVlOiJ2YWx1ZSJ9LGZlYXR1cmVzOltpaChbUWpdKSxnbV19KSxlVS5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOnVofSx7dHlwZTpjaH0se3R5cGU6dFV9LHt0eXBlOlFwfV0sZVUucHJvcERlY29yYXRvcnM9e25hbWU6W3t0eXBlOnlffV0sZm9ybUNvbnRyb2xOYW1lOlt7dHlwZTp5X31dLHZhbHVlOlt7dHlwZTp5X31dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGVVLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6ImlucHV0W3R5cGU9cmFkaW9dW2Zvcm1Db250cm9sTmFtZV0saW5wdXRbdHlwZT1yYWRpb11bZm9ybUNvbnRyb2xdLGlucHV0W3R5cGU9cmFkaW9dW25nTW9kZWxdIixob3N0OnsiKGNoYW5nZSkiOiJvbkNoYW5nZSgpIiwiKGJsdXIpIjoib25Ub3VjaGVkKCkifSxwcm92aWRlcnM6W1FqXX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOnVofSx7dHlwZTpjaH0se3R5cGU6dFV9LHt0eXBlOlFwfV19KSx7bmFtZTpbe3R5cGU6eV99XSxmb3JtQ29udHJvbE5hbWU6W3t0eXBlOnlffV0sdmFsdWU6W3t0eXBlOnlffV19KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IG5VPXtwcm92aWRlOnZWLHVzZUV4aXN0aW5nOkluKCgoKT0+b1UpKSxtdWx0aTohMH07Y2xhc3Mgb1UgZXh0ZW5kcyBNVntjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKCksdGhpcy5fcmVuZGVyZXI9dCx0aGlzLl9lbGVtZW50UmVmPWUsdGhpcy5vbkNoYW5nZT10PT57fSx0aGlzLm9uVG91Y2hlZD0oKT0+e319d3JpdGVWYWx1ZSh0KXt0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsInZhbHVlIixwYXJzZUZsb2F0KHQpKX1yZWdpc3Rlck9uQ2hhbmdlKHQpe3RoaXMub25DaGFuZ2U9ZT0+e3QoIiI9PWU/bnVsbDpwYXJzZUZsb2F0KGUpKX19cmVnaXN0ZXJPblRvdWNoZWQodCl7dGhpcy5vblRvdWNoZWQ9dH1zZXREaXNhYmxlZFN0YXRlKHQpe3RoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwiZGlzYWJsZWQiLHQpfX1vVS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8b1UpKE11KHVoKSxNdShjaCkpfSxvVS7JtWRpcj1Kbyh7dHlwZTpvVSxzZWxlY3RvcnM6W1siaW5wdXQiLCJ0eXBlIiwicmFuZ2UiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwidHlwZSIsInJhbmdlIiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwidHlwZSIsInJhbmdlIiwibmdNb2RlbCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezEmZSYmTnUoImNoYW5nZSIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25DaGFuZ2UoZS50YXJnZXQudmFsdWUpfSkpKCJpbnB1dCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25DaGFuZ2UoZS50YXJnZXQudmFsdWUpfSkpKCJibHVyIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uVG91Y2hlZCgpfSkpfSxmZWF0dXJlczpbaWgoW25VXSksZ21dfSksb1UuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTp1aH0se3R5cGU6Y2h9XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKG9VLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6ImlucHV0W3R5cGU9cmFuZ2VdW2Zvcm1Db250cm9sTmFtZV0saW5wdXRbdHlwZT1yYW5nZV1bZm9ybUNvbnRyb2xdLGlucHV0W3R5cGU9cmFuZ2VdW25nTW9kZWxdIixob3N0OnsiKGNoYW5nZSkiOiJvbkNoYW5nZSgkZXZlbnQudGFyZ2V0LnZhbHVlKSIsIihpbnB1dCkiOiJvbkNoYW5nZSgkZXZlbnQudGFyZ2V0LnZhbHVlKSIsIihibHVyKSI6Im9uVG91Y2hlZCgpIn0scHJvdmlkZXJzOltuVV19XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTp1aH0se3R5cGU6Y2h9XX0pLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3QgaVU9bmV3IE5yKCJOZ01vZGVsV2l0aEZvcm1Db250cm9sV2FybmluZyIpLGFVPXtwcm92aWRlOm5qLHVzZUV4aXN0aW5nOkluKCgoKT0+clUpKX07Y2xhc3MgclUgZXh0ZW5kcyBuantjb25zdHJ1Y3Rvcih0LGUsbixvKXtzdXBlcigpLHRoaXMuX25nTW9kZWxXYXJuaW5nQ29uZmlnPW8sdGhpcy51cGRhdGU9bmV3IEFiLHRoaXMuX25nTW9kZWxXYXJuaW5nU2VudD0hMSx0aGlzLl9zZXRWYWxpZGF0b3JzKHQpLHRoaXMuX3NldEFzeW5jVmFsaWRhdG9ycyhlKSx0aGlzLnZhbHVlQWNjZXNzb3I9dmoodGhpcyxuKX1zZXQgaXNEaXNhYmxlZCh0KXsoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRqLmRpc2FibGVkQXR0cldhcm5pbmcoKX1uZ09uQ2hhbmdlcyh0KXtpZih0aGlzLl9pc0NvbnRyb2xDaGFuZ2VkKHQpKXtjb25zdCBlPXQuZm9ybS5wcmV2aW91c1ZhbHVlO2UmJnVqKGUsdGhpcywhMSksbWoodGhpcy5mb3JtLHRoaXMpLHRoaXMuY29udHJvbC5kaXNhYmxlZCYmdGhpcy52YWx1ZUFjY2Vzc29yLnNldERpc2FibGVkU3RhdGUmJnRoaXMudmFsdWVBY2Nlc3Nvci5zZXREaXNhYmxlZFN0YXRlKCEwKSx0aGlzLmZvcm0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSl9Q2oodCx0aGlzLnZpZXdNb2RlbCkmJigoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJk9qKCJmb3JtQ29udHJvbCIsclUsdGhpcyx0aGlzLl9uZ01vZGVsV2FybmluZ0NvbmZpZyksdGhpcy5mb3JtLnNldFZhbHVlKHRoaXMubW9kZWwpLHRoaXMudmlld01vZGVsPXRoaXMubW9kZWwpfW5nT25EZXN0cm95KCl7dGhpcy5mb3JtJiZ1aih0aGlzLmZvcm0sdGhpcywhMSl9Z2V0IHBhdGgoKXtyZXR1cm5bXX1nZXQgY29udHJvbCgpe3JldHVybiB0aGlzLmZvcm19dmlld1RvTW9kZWxVcGRhdGUodCl7dGhpcy52aWV3TW9kZWw9dCx0aGlzLnVwZGF0ZS5lbWl0KHQpfV9pc0NvbnRyb2xDaGFuZ2VkKHQpe3JldHVybiB0Lmhhc093blByb3BlcnR5KCJmb3JtIil9fXJVLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxyVSkoTXUoRVYsMTApLE11KEFWLDEwKSxNdSh2ViwxMCksTXUoaVUsOCkpfSxyVS7JtWRpcj1Kbyh7dHlwZTpyVSxzZWxlY3RvcnM6W1siIiwiZm9ybUNvbnRyb2wiLCIiXV0saW5wdXRzOntpc0Rpc2FibGVkOlsiZGlzYWJsZWQiLCJpc0Rpc2FibGVkIl0sZm9ybTpbImZvcm1Db250cm9sIiwiZm9ybSJdLG1vZGVsOlsibmdNb2RlbCIsIm1vZGVsIl19LG91dHB1dHM6e3VwZGF0ZToibmdNb2RlbENoYW5nZSJ9LGV4cG9ydEFzOlsibmdGb3JtIl0sZmVhdHVyZXM6W2loKFthVV0pLGdtLFNpXX0pLHJVLl9uZ01vZGVsV2FybmluZ1NlbnRPbmNlPSExLHJVLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6QXJyYXksZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOkNzfSx7dHlwZTp5cyxhcmdzOltFVl19XX0se3R5cGU6QXJyYXksZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOkNzfSx7dHlwZTp5cyxhcmdzOltBVl19XX0se3R5cGU6QXJyYXksZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOkNzfSx7dHlwZTp5cyxhcmdzOlt2Vl19XX0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltpVV19XX1dLHJVLnByb3BEZWNvcmF0b3JzPXtmb3JtOlt7dHlwZTp5XyxhcmdzOlsiZm9ybUNvbnRyb2wiXX1dLGlzRGlzYWJsZWQ6W3t0eXBlOnlfLGFyZ3M6WyJkaXNhYmxlZCJdfV0sbW9kZWw6W3t0eXBlOnlfLGFyZ3M6WyJuZ01vZGVsIl19XSx1cGRhdGU6W3t0eXBlOl9fLGFyZ3M6WyJuZ01vZGVsQ2hhbmdlIl19XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihyVSxbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJbZm9ybUNvbnRyb2xdIixwcm92aWRlcnM6W2FVXSxleHBvcnRBczoibmdGb3JtIn1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkFycmF5LGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTpDc30se3R5cGU6eXMsYXJnczpbRVZdfV19LHt0eXBlOkFycmF5LGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTpDc30se3R5cGU6eXMsYXJnczpbQVZdfV19LHt0eXBlOkFycmF5LGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTpDc30se3R5cGU6eXMsYXJnczpbdlZdfV19LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbaVVdfV19XX0pLHt1cGRhdGU6W3t0eXBlOl9fLGFyZ3M6WyJuZ01vZGVsQ2hhbmdlIl19XSxpc0Rpc2FibGVkOlt7dHlwZTp5XyxhcmdzOlsiZGlzYWJsZWQiXX1dLGZvcm06W3t0eXBlOnlfLGFyZ3M6WyJmb3JtQ29udHJvbCJdfV0sbW9kZWw6W3t0eXBlOnlfLGFyZ3M6WyJuZ01vZGVsIl19XX0pOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3Qgc1U9e3Byb3ZpZGU6dGosdXNlRXhpc3Rpbmc6SW4oKCgpPT5sVSkpfTtjbGFzcyBsVSBleHRlbmRzIHRqe2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIoKSx0aGlzLnZhbGlkYXRvcnM9dCx0aGlzLmFzeW5jVmFsaWRhdG9ycz1lLHRoaXMuc3VibWl0dGVkPSExLHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZT0oKT0+dGhpcy5fdXBkYXRlRG9tVmFsdWUoKSx0aGlzLmRpcmVjdGl2ZXM9W10sdGhpcy5mb3JtPW51bGwsdGhpcy5uZ1N1Ym1pdD1uZXcgQWIsdGhpcy5fc2V0VmFsaWRhdG9ycyh0KSx0aGlzLl9zZXRBc3luY1ZhbGlkYXRvcnMoZSl9bmdPbkNoYW5nZXModCl7dGhpcy5fY2hlY2tGb3JtUHJlc2VudCgpLHQuaGFzT3duUHJvcGVydHkoImZvcm0iKSYmKHRoaXMuX3VwZGF0ZVZhbGlkYXRvcnMoKSx0aGlzLl91cGRhdGVEb21WYWx1ZSgpLHRoaXMuX3VwZGF0ZVJlZ2lzdHJhdGlvbnMoKSx0aGlzLl9vbGRGb3JtPXRoaXMuZm9ybSl9bmdPbkRlc3Ryb3koKXt0aGlzLmZvcm0mJihoaih0aGlzLmZvcm0sdGhpcywhMSksdGhpcy5mb3JtLl9vbkNvbGxlY3Rpb25DaGFuZ2U9PT10aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UmJnRoaXMuZm9ybS5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UoKCgpPT57fSkpKX1nZXQgZm9ybURpcmVjdGl2ZSgpe3JldHVybiB0aGlzfWdldCBjb250cm9sKCl7cmV0dXJuIHRoaXMuZm9ybX1nZXQgcGF0aCgpe3JldHVybltdfWFkZENvbnRyb2wodCl7Y29uc3QgZT10aGlzLmZvcm0uZ2V0KHQucGF0aCk7cmV0dXJuIG1qKGUsdCksZS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KSx0aGlzLmRpcmVjdGl2ZXMucHVzaCh0KSxlfWdldENvbnRyb2wodCl7cmV0dXJuIHRoaXMuZm9ybS5nZXQodC5wYXRoKX1yZW1vdmVDb250cm9sKHQpe3VqKHQuY29udHJvbHx8bnVsbCx0LCExKSx4aih0aGlzLmRpcmVjdGl2ZXMsdCl9YWRkRm9ybUdyb3VwKHQpe3RoaXMuX3NldFVwRm9ybUNvbnRhaW5lcih0KX1yZW1vdmVGb3JtR3JvdXAodCl7dGhpcy5fY2xlYW5VcEZvcm1Db250YWluZXIodCl9Z2V0Rm9ybUdyb3VwKHQpe3JldHVybiB0aGlzLmZvcm0uZ2V0KHQucGF0aCl9YWRkRm9ybUFycmF5KHQpe3RoaXMuX3NldFVwRm9ybUNvbnRhaW5lcih0KX1yZW1vdmVGb3JtQXJyYXkodCl7dGhpcy5fY2xlYW5VcEZvcm1Db250YWluZXIodCl9Z2V0Rm9ybUFycmF5KHQpe3JldHVybiB0aGlzLmZvcm0uZ2V0KHQucGF0aCl9dXBkYXRlTW9kZWwodCxlKXt0aGlzLmZvcm0uZ2V0KHQucGF0aCkuc2V0VmFsdWUoZSl9b25TdWJtaXQodCl7cmV0dXJuIHRoaXMuc3VibWl0dGVkPSEwLE1qKHRoaXMuZm9ybSx0aGlzLmRpcmVjdGl2ZXMpLHRoaXMubmdTdWJtaXQuZW1pdCh0KSwhMX1vblJlc2V0KCl7dGhpcy5yZXNldEZvcm0oKX1yZXNldEZvcm0odCl7dGhpcy5mb3JtLnJlc2V0KHQpLHRoaXMuc3VibWl0dGVkPSExfV91cGRhdGVEb21WYWx1ZSgpe3RoaXMuZGlyZWN0aXZlcy5mb3JFYWNoKCh0PT57Y29uc3QgZT10LmNvbnRyb2wsbj10aGlzLmZvcm0uZ2V0KHQucGF0aCk7ZSE9PW4mJih1aihlfHxudWxsLHQpLG4gaW5zdGFuY2VvZiBJaiYmKG1qKG4sdCksdC5jb250cm9sPW4pKX0pKSx0aGlzLmZvcm0uX3VwZGF0ZVRyZWVWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSl9X3NldFVwRm9ybUNvbnRhaW5lcih0KXtjb25zdCBlPXRoaXMuZm9ybS5nZXQodC5wYXRoKTt5aihlLHQpLGUudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSl9X2NsZWFuVXBGb3JtQ29udGFpbmVyKHQpe2lmKHRoaXMuZm9ybSl7Y29uc3QgZT10aGlzLmZvcm0uZ2V0KHQucGF0aCk7ZSYmKGZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gaGoodCxuLCExKX0pKGUsdCkmJmUudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSl9fV91cGRhdGVSZWdpc3RyYXRpb25zKCl7dGhpcy5mb3JtLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSh0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UpLHRoaXMuX29sZEZvcm0mJnRoaXMuX29sZEZvcm0uX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKCgoKT0+e30pKX1fdXBkYXRlVmFsaWRhdG9ycygpe2dqKHRoaXMuZm9ybSx0aGlzLCExKSx0aGlzLl9vbGRGb3JtJiZoaih0aGlzLl9vbGRGb3JtLHRoaXMsITEpfV9jaGVja0Zvcm1QcmVzZW50KCl7dGhpcy5mb3JtfHwidW5kZWZpbmVkIiE9dHlwZW9mIG5nRGV2TW9kZSYmIW5nRGV2TW9kZXx8ZGoubWlzc2luZ0Zvcm1FeGNlcHRpb24oKX19bFUuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGxVKShNdShFViwxMCksTXUoQVYsMTApKX0sbFUuybVkaXI9Sm8oe3R5cGU6bFUsc2VsZWN0b3JzOltbIiIsImZvcm1Hcm91cCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezEmZSYmTnUoInN1Ym1pdCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25TdWJtaXQoZSl9KSkoInJlc2V0IiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uUmVzZXQoKX0pKX0saW5wdXRzOntmb3JtOlsiZm9ybUdyb3VwIiwiZm9ybSJdfSxvdXRwdXRzOntuZ1N1Ym1pdDoibmdTdWJtaXQifSxleHBvcnRBczpbIm5nRm9ybSJdLGZlYXR1cmVzOltpaChbc1VdKSxnbSxTaV19KSxsVS5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOkFycmF5LGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTpDc30se3R5cGU6eXMsYXJnczpbRVZdfV19LHt0eXBlOkFycmF5LGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTpDc30se3R5cGU6eXMsYXJnczpbQVZdfV19XSxsVS5wcm9wRGVjb3JhdG9ycz17Zm9ybTpbe3R5cGU6eV8sYXJnczpbImZvcm1Hcm91cCJdfV0sbmdTdWJtaXQ6W3t0eXBlOl9ffV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIobFUsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLHByb3ZpZGVyczpbc1VdLGhvc3Q6eyIoc3VibWl0KSI6Im9uU3VibWl0KCRldmVudCkiLCIocmVzZXQpIjoib25SZXNldCgpIn0sZXhwb3J0QXM6Im5nRm9ybSJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpBcnJheSxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6Q3N9LHt0eXBlOnlzLGFyZ3M6W0VWXX1dfSx7dHlwZTpBcnJheSxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6Q3N9LHt0eXBlOnlzLGFyZ3M6W0FWXX1dfV19KSx7Zm9ybTpbe3R5cGU6eV8sYXJnczpbImZvcm1Hcm91cCJdfV0sbmdTdWJtaXQ6W3t0eXBlOl9ffV19KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IGNVPXtwcm92aWRlOnRqLHVzZUV4aXN0aW5nOkluKCgoKT0+ZFUpKX07Y2xhc3MgZFUgZXh0ZW5kcyBWantjb25zdHJ1Y3Rvcih0LGUsbil7c3VwZXIoKSx0aGlzLl9wYXJlbnQ9dCx0aGlzLl9zZXRWYWxpZGF0b3JzKGUpLHRoaXMuX3NldEFzeW5jVmFsaWRhdG9ycyhuKX1fY2hlY2tQYXJlbnRUeXBlKCl7dVUodGhpcy5fcGFyZW50KSYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkai5ncm91cFBhcmVudEV4Y2VwdGlvbigpfX1kVS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8ZFUpKE11KHRqLDEzKSxNdShFViwxMCksTXUoQVYsMTApKX0sZFUuybVkaXI9Sm8oe3R5cGU6ZFUsc2VsZWN0b3JzOltbIiIsImZvcm1Hcm91cE5hbWUiLCIiXV0saW5wdXRzOntuYW1lOlsiZm9ybUdyb3VwTmFtZSIsIm5hbWUiXX0sZmVhdHVyZXM6W2loKFtjVV0pLGdtXX0pLGRVLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6dGosZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnZzfSx7dHlwZTpNc31dfSx7dHlwZTpBcnJheSxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6Q3N9LHt0eXBlOnlzLGFyZ3M6W0VWXX1dfSx7dHlwZTpBcnJheSxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6Q3N9LHt0eXBlOnlzLGFyZ3M6W0FWXX1dfV0sZFUucHJvcERlY29yYXRvcnM9e25hbWU6W3t0eXBlOnlfLGFyZ3M6WyJmb3JtR3JvdXBOYW1lIl19XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihkVSxbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0iLHByb3ZpZGVyczpbY1VdfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6dGosZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnZzfSx7dHlwZTpNc31dfSx7dHlwZTpBcnJheSxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6Q3N9LHt0eXBlOnlzLGFyZ3M6W0VWXX1dfSx7dHlwZTpBcnJheSxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6Q3N9LHt0eXBlOnlzLGFyZ3M6W0FWXX1dfV19KSx7bmFtZTpbe3R5cGU6eV8sYXJnczpbImZvcm1Hcm91cE5hbWUiXX1dfSk7Y29uc3QgcFU9e3Byb3ZpZGU6dGosdXNlRXhpc3Rpbmc6SW4oKCgpPT5tVSkpfTtjbGFzcyBtVSBleHRlbmRzIHRqe2NvbnN0cnVjdG9yKHQsZSxuKXtzdXBlcigpLHRoaXMuX3BhcmVudD10LHRoaXMuX3NldFZhbGlkYXRvcnMoZSksdGhpcy5fc2V0QXN5bmNWYWxpZGF0b3JzKG4pfW5nT25Jbml0KCl7dGhpcy5fY2hlY2tQYXJlbnRUeXBlKCksdGhpcy5mb3JtRGlyZWN0aXZlLmFkZEZvcm1BcnJheSh0aGlzKX1uZ09uRGVzdHJveSgpe3RoaXMuZm9ybURpcmVjdGl2ZSYmdGhpcy5mb3JtRGlyZWN0aXZlLnJlbW92ZUZvcm1BcnJheSh0aGlzKX1nZXQgY29udHJvbCgpe3JldHVybiB0aGlzLmZvcm1EaXJlY3RpdmUuZ2V0Rm9ybUFycmF5KHRoaXMpfWdldCBmb3JtRGlyZWN0aXZlKCl7cmV0dXJuIHRoaXMuX3BhcmVudD90aGlzLl9wYXJlbnQuZm9ybURpcmVjdGl2ZTpudWxsfWdldCBwYXRoKCl7cmV0dXJuIHBqKG51bGw9PXRoaXMubmFtZT90aGlzLm5hbWU6dGhpcy5uYW1lLnRvU3RyaW5nKCksdGhpcy5fcGFyZW50KX1fY2hlY2tQYXJlbnRUeXBlKCl7dVUodGhpcy5fcGFyZW50KSYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkai5hcnJheVBhcmVudEV4Y2VwdGlvbigpfX1mdW5jdGlvbiB1VSh0KXtyZXR1cm4hKHQgaW5zdGFuY2VvZiBkVXx8dCBpbnN0YW5jZW9mIGxVfHx0IGluc3RhbmNlb2YgbVUpfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9tVS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8bVUpKE11KHRqLDEzKSxNdShFViwxMCksTXUoQVYsMTApKX0sbVUuybVkaXI9Sm8oe3R5cGU6bVUsc2VsZWN0b3JzOltbIiIsImZvcm1BcnJheU5hbWUiLCIiXV0saW5wdXRzOntuYW1lOlsiZm9ybUFycmF5TmFtZSIsIm5hbWUiXX0sZmVhdHVyZXM6W2loKFtwVV0pLGdtXX0pLG1VLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6dGosZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnZzfSx7dHlwZTpNc31dfSx7dHlwZTpBcnJheSxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6Q3N9LHt0eXBlOnlzLGFyZ3M6W0VWXX1dfSx7dHlwZTpBcnJheSxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6Q3N9LHt0eXBlOnlzLGFyZ3M6W0FWXX1dfV0sbVUucHJvcERlY29yYXRvcnM9e25hbWU6W3t0eXBlOnlfLGFyZ3M6WyJmb3JtQXJyYXlOYW1lIl19XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihtVSxbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJbZm9ybUFycmF5TmFtZV0iLHByb3ZpZGVyczpbcFVdfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6dGosZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnZzfSx7dHlwZTpNc31dfSx7dHlwZTpBcnJheSxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6Q3N9LHt0eXBlOnlzLGFyZ3M6W0VWXX1dfSx7dHlwZTpBcnJheSxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6Q3N9LHt0eXBlOnlzLGFyZ3M6W0FWXX1dfV19KSx7bmFtZTpbe3R5cGU6eV8sYXJnczpbImZvcm1BcnJheU5hbWUiXX1dfSk7Y29uc3QgZlU9e3Byb3ZpZGU6bmosdXNlRXhpc3Rpbmc6SW4oKCgpPT5nVSkpfTtjbGFzcyBnVSBleHRlbmRzIG5qe2NvbnN0cnVjdG9yKHQsZSxuLG8saSl7c3VwZXIoKSx0aGlzLl9uZ01vZGVsV2FybmluZ0NvbmZpZz1pLHRoaXMuX2FkZGVkPSExLHRoaXMudXBkYXRlPW5ldyBBYix0aGlzLl9uZ01vZGVsV2FybmluZ1NlbnQ9ITEsdGhpcy5fcGFyZW50PXQsdGhpcy5fc2V0VmFsaWRhdG9ycyhlKSx0aGlzLl9zZXRBc3luY1ZhbGlkYXRvcnMobiksdGhpcy52YWx1ZUFjY2Vzc29yPXZqKHRoaXMsbyl9c2V0IGlzRGlzYWJsZWQodCl7KCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkai5kaXNhYmxlZEF0dHJXYXJuaW5nKCl9bmdPbkNoYW5nZXModCl7dGhpcy5fYWRkZWR8fHRoaXMuX3NldFVwQ29udHJvbCgpLENqKHQsdGhpcy52aWV3TW9kZWwpJiYoKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZPaigiZm9ybUNvbnRyb2xOYW1lIixnVSx0aGlzLHRoaXMuX25nTW9kZWxXYXJuaW5nQ29uZmlnKSx0aGlzLnZpZXdNb2RlbD10aGlzLm1vZGVsLHRoaXMuZm9ybURpcmVjdGl2ZS51cGRhdGVNb2RlbCh0aGlzLHRoaXMubW9kZWwpKX1uZ09uRGVzdHJveSgpe3RoaXMuZm9ybURpcmVjdGl2ZSYmdGhpcy5mb3JtRGlyZWN0aXZlLnJlbW92ZUNvbnRyb2wodGhpcyl9dmlld1RvTW9kZWxVcGRhdGUodCl7dGhpcy52aWV3TW9kZWw9dCx0aGlzLnVwZGF0ZS5lbWl0KHQpfWdldCBwYXRoKCl7cmV0dXJuIHBqKG51bGw9PXRoaXMubmFtZT90aGlzLm5hbWU6dGhpcy5uYW1lLnRvU3RyaW5nKCksdGhpcy5fcGFyZW50KX1nZXQgZm9ybURpcmVjdGl2ZSgpe3JldHVybiB0aGlzLl9wYXJlbnQ/dGhpcy5fcGFyZW50LmZvcm1EaXJlY3RpdmU6bnVsbH1fY2hlY2tQYXJlbnRUeXBlKCl7KCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiYoISh0aGlzLl9wYXJlbnQgaW5zdGFuY2VvZiBkVSkmJnRoaXMuX3BhcmVudCBpbnN0YW5jZW9mIFZqP2RqLm5nTW9kZWxHcm91cEV4Y2VwdGlvbigpOnRoaXMuX3BhcmVudCBpbnN0YW5jZW9mIGRVfHx0aGlzLl9wYXJlbnQgaW5zdGFuY2VvZiBsVXx8dGhpcy5fcGFyZW50IGluc3RhbmNlb2YgbVV8fGRqLmNvbnRyb2xQYXJlbnRFeGNlcHRpb24oKSl9X3NldFVwQ29udHJvbCgpe3RoaXMuX2NoZWNrUGFyZW50VHlwZSgpLHRoaXMuY29udHJvbD10aGlzLmZvcm1EaXJlY3RpdmUuYWRkQ29udHJvbCh0aGlzKSx0aGlzLmNvbnRyb2wuZGlzYWJsZWQmJnRoaXMudmFsdWVBY2Nlc3Nvci5zZXREaXNhYmxlZFN0YXRlJiZ0aGlzLnZhbHVlQWNjZXNzb3Iuc2V0RGlzYWJsZWRTdGF0ZSghMCksdGhpcy5fYWRkZWQ9ITB9fWdVLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxnVSkoTXUodGosMTMpLE11KEVWLDEwKSxNdShBViwxMCksTXUodlYsMTApLE11KGlVLDgpKX0sZ1UuybVkaXI9Sm8oe3R5cGU6Z1Usc2VsZWN0b3JzOltbIiIsImZvcm1Db250cm9sTmFtZSIsIiJdXSxpbnB1dHM6e2lzRGlzYWJsZWQ6WyJkaXNhYmxlZCIsImlzRGlzYWJsZWQiXSxuYW1lOlsiZm9ybUNvbnRyb2xOYW1lIiwibmFtZSJdLG1vZGVsOlsibmdNb2RlbCIsIm1vZGVsIl19LG91dHB1dHM6e3VwZGF0ZToibmdNb2RlbENoYW5nZSJ9LGZlYXR1cmVzOltpaChbZlVdKSxnbSxTaV19KSxnVS5fbmdNb2RlbFdhcm5pbmdTZW50T25jZT0hMSxnVS5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOnRqLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp2c30se3R5cGU6TXN9XX0se3R5cGU6QXJyYXksZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOkNzfSx7dHlwZTp5cyxhcmdzOltFVl19XX0se3R5cGU6QXJyYXksZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOkNzfSx7dHlwZTp5cyxhcmdzOltBVl19XX0se3R5cGU6QXJyYXksZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOkNzfSx7dHlwZTp5cyxhcmdzOlt2Vl19XX0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltpVV19XX1dLGdVLnByb3BEZWNvcmF0b3JzPXtuYW1lOlt7dHlwZTp5XyxhcmdzOlsiZm9ybUNvbnRyb2xOYW1lIl19XSxpc0Rpc2FibGVkOlt7dHlwZTp5XyxhcmdzOlsiZGlzYWJsZWQiXX1dLG1vZGVsOlt7dHlwZTp5XyxhcmdzOlsibmdNb2RlbCJdfV0sdXBkYXRlOlt7dHlwZTpfXyxhcmdzOlsibmdNb2RlbENoYW5nZSJdfV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoZ1UsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLHByb3ZpZGVyczpbZlVdfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6dGosZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnZzfSx7dHlwZTpNc31dfSx7dHlwZTpBcnJheSxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6Q3N9LHt0eXBlOnlzLGFyZ3M6W0VWXX1dfSx7dHlwZTpBcnJheSxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6Q3N9LHt0eXBlOnlzLGFyZ3M6W0FWXX1dfSx7dHlwZTpBcnJheSxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6Q3N9LHt0eXBlOnlzLGFyZ3M6W3ZWXX1dfSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W2lVXX1dfV19KSx7dXBkYXRlOlt7dHlwZTpfXyxhcmdzOlsibmdNb2RlbENoYW5nZSJdfV0saXNEaXNhYmxlZDpbe3R5cGU6eV8sYXJnczpbImRpc2FibGVkIl19XSxuYW1lOlt7dHlwZTp5XyxhcmdzOlsiZm9ybUNvbnRyb2xOYW1lIl19XSxtb2RlbDpbe3R5cGU6eV8sYXJnczpbIm5nTW9kZWwiXX1dfSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCBoVT17cHJvdmlkZTp2Vix1c2VFeGlzdGluZzpJbigoKCk9PnlVKSksbXVsdGk6ITB9O2Z1bmN0aW9uIGJVKHQsZSl7cmV0dXJuIG51bGw9PXQ/YCR7ZX1gOihlJiYib2JqZWN0Ij09dHlwZW9mIGUmJihlPSJPYmplY3QiKSxgJHt0fTogJHtlfWAuc2xpY2UoMCw1MCkpfWNsYXNzIHlVIGV4dGVuZHMgTVZ7Y29uc3RydWN0b3IodCxlKXtzdXBlcigpLHRoaXMuX3JlbmRlcmVyPXQsdGhpcy5fZWxlbWVudFJlZj1lLHRoaXMuX29wdGlvbk1hcD1uZXcgTWFwLHRoaXMuX2lkQ291bnRlcj0wLHRoaXMub25DaGFuZ2U9dD0+e30sdGhpcy5vblRvdWNoZWQ9KCk9Pnt9LHRoaXMuX2NvbXBhcmVXaXRoPU9iamVjdC5pc31zZXQgY29tcGFyZVdpdGgodCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJigidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSl0aHJvdyBuZXcgRXJyb3IoYGNvbXBhcmVXaXRoIG11c3QgYmUgYSBmdW5jdGlvbiwgYnV0IHJlY2VpdmVkICR7SlNPTi5zdHJpbmdpZnkodCl9YCk7dGhpcy5fY29tcGFyZVdpdGg9dH13cml0ZVZhbHVlKHQpe3RoaXMudmFsdWU9dDtjb25zdCBlPXRoaXMuX2dldE9wdGlvbklkKHQpO251bGw9PWUmJnRoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwic2VsZWN0ZWRJbmRleCIsLTEpO2NvbnN0IG49YlUoZSx0KTt0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsInZhbHVlIixuKX1yZWdpc3Rlck9uQ2hhbmdlKHQpe3RoaXMub25DaGFuZ2U9ZT0+e3RoaXMudmFsdWU9dGhpcy5fZ2V0T3B0aW9uVmFsdWUoZSksdCh0aGlzLnZhbHVlKX19cmVnaXN0ZXJPblRvdWNoZWQodCl7dGhpcy5vblRvdWNoZWQ9dH1zZXREaXNhYmxlZFN0YXRlKHQpe3RoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwiZGlzYWJsZWQiLHQpfV9yZWdpc3Rlck9wdGlvbigpe3JldHVybih0aGlzLl9pZENvdW50ZXIrKykudG9TdHJpbmcoKX1fZ2V0T3B0aW9uSWQodCl7Zm9yKGNvbnN0IGUgb2YgQXJyYXkuZnJvbSh0aGlzLl9vcHRpb25NYXAua2V5cygpKSlpZih0aGlzLl9jb21wYXJlV2l0aCh0aGlzLl9vcHRpb25NYXAuZ2V0KGUpLHQpKXJldHVybiBlO3JldHVybiBudWxsfV9nZXRPcHRpb25WYWx1ZSh0KXtjb25zdCBlPShmdW5jdGlvbiBuKHQpe3JldHVybiB0LnNwbGl0KCI6IilbMF19KSh0KTtyZXR1cm4gdGhpcy5fb3B0aW9uTWFwLmhhcyhlKT90aGlzLl9vcHRpb25NYXAuZ2V0KGUpOnR9fXlVLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHx5VSkoTXUodWgpLE11KGNoKSl9LHlVLsm1ZGlyPUpvKHt0eXBlOnlVLHNlbGVjdG9yczpbWyJzZWxlY3QiLCJmb3JtQ29udHJvbE5hbWUiLCIiLDMsIm11bHRpcGxlIiwiIl0sWyJzZWxlY3QiLCJmb3JtQ29udHJvbCIsIiIsMywibXVsdGlwbGUiLCIiXSxbInNlbGVjdCIsIm5nTW9kZWwiLCIiLDMsIm11bHRpcGxlIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MSZlJiZOdSgiY2hhbmdlIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vbkNoYW5nZShlLnRhcmdldC52YWx1ZSl9KSkoImJsdXIiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub25Ub3VjaGVkKCl9KSl9LGlucHV0czp7Y29tcGFyZVdpdGg6ImNvbXBhcmVXaXRoIn0sZmVhdHVyZXM6W2loKFtoVV0pLGdtXX0pLHlVLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6dWh9LHt0eXBlOmNofV0seVUucHJvcERlY29yYXRvcnM9e2NvbXBhcmVXaXRoOlt7dHlwZTp5X31dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHlVLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6InNlbGVjdDpub3QoW211bHRpcGxlXSlbZm9ybUNvbnRyb2xOYW1lXSxzZWxlY3Q6bm90KFttdWx0aXBsZV0pW2Zvcm1Db250cm9sXSxzZWxlY3Q6bm90KFttdWx0aXBsZV0pW25nTW9kZWxdIixob3N0OnsiKGNoYW5nZSkiOiJvbkNoYW5nZSgkZXZlbnQudGFyZ2V0LnZhbHVlKSIsIihibHVyKSI6Im9uVG91Y2hlZCgpIn0scHJvdmlkZXJzOltoVV19XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTp1aH0se3R5cGU6Y2h9XX0pLHtjb21wYXJlV2l0aDpbe3R5cGU6eV99XX0pO2NsYXNzIF9Ve2NvbnN0cnVjdG9yKHQsZSxuKXt0aGlzLl9lbGVtZW50PXQsdGhpcy5fcmVuZGVyZXI9ZSx0aGlzLl9zZWxlY3Q9bix0aGlzLl9zZWxlY3QmJih0aGlzLmlkPXRoaXMuX3NlbGVjdC5fcmVnaXN0ZXJPcHRpb24oKSl9c2V0IG5nVmFsdWUodCl7bnVsbCE9dGhpcy5fc2VsZWN0JiYodGhpcy5fc2VsZWN0Ll9vcHRpb25NYXAuc2V0KHRoaXMuaWQsdCksdGhpcy5fc2V0RWxlbWVudFZhbHVlKGJVKHRoaXMuaWQsdCkpLHRoaXMuX3NlbGVjdC53cml0ZVZhbHVlKHRoaXMuX3NlbGVjdC52YWx1ZSkpfXNldCB2YWx1ZSh0KXt0aGlzLl9zZXRFbGVtZW50VmFsdWUodCksdGhpcy5fc2VsZWN0JiZ0aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpfV9zZXRFbGVtZW50VmFsdWUodCl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LCJ2YWx1ZSIsdCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9zZWxlY3QmJih0aGlzLl9zZWxlY3QuX29wdGlvbk1hcC5kZWxldGUodGhpcy5pZCksdGhpcy5fc2VsZWN0LndyaXRlVmFsdWUodGhpcy5fc2VsZWN0LnZhbHVlKSl9fV9VLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxfVSkoTXUoY2gpLE11KHVoKSxNdSh5VSw5KSl9LF9VLsm1ZGlyPUpvKHt0eXBlOl9VLHNlbGVjdG9yczpbWyJvcHRpb24iXV0saW5wdXRzOntuZ1ZhbHVlOiJuZ1ZhbHVlIix2YWx1ZToidmFsdWUifX0pLF9VLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6Y2h9LHt0eXBlOnVofSx7dHlwZTp5VSxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6dnN9XX1dLF9VLnByb3BEZWNvcmF0b3JzPXtuZ1ZhbHVlOlt7dHlwZTp5XyxhcmdzOlsibmdWYWx1ZSJdfV0sdmFsdWU6W3t0eXBlOnlfLGFyZ3M6WyJ2YWx1ZSJdfV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoX1UsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3Rvcjoib3B0aW9uIn1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmNofSx7dHlwZTp1aH0se3R5cGU6eVUsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnZzfV19XX0pLHtuZ1ZhbHVlOlt7dHlwZTp5XyxhcmdzOlsibmdWYWx1ZSJdfV0sdmFsdWU6W3t0eXBlOnlfLGFyZ3M6WyJ2YWx1ZSJdfV19KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IENVPXtwcm92aWRlOnZWLHVzZUV4aXN0aW5nOkluKCgoKT0+dlUpKSxtdWx0aTohMH07ZnVuY3Rpb24gTVUodCxlKXtyZXR1cm4gbnVsbD09dD9gJHtlfWA6KCJzdHJpbmciPT10eXBlb2YgZSYmKGU9YCcke2V9J2ApLGUmJiJvYmplY3QiPT10eXBlb2YgZSYmKGU9Ik9iamVjdCIpLGAke3R9OiAke2V9YC5zbGljZSgwLDUwKSl9Y2xhc3MgdlUgZXh0ZW5kcyBNVntjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKCksdGhpcy5fcmVuZGVyZXI9dCx0aGlzLl9lbGVtZW50UmVmPWUsdGhpcy5fb3B0aW9uTWFwPW5ldyBNYXAsdGhpcy5faWRDb3VudGVyPTAsdGhpcy5vbkNoYW5nZT10PT57fSx0aGlzLm9uVG91Y2hlZD0oKT0+e30sdGhpcy5fY29tcGFyZVdpdGg9T2JqZWN0LmlzfXNldCBjb21wYXJlV2l0aCh0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpKXRocm93IG5ldyBFcnJvcihgY29tcGFyZVdpdGggbXVzdCBiZSBhIGZ1bmN0aW9uLCBidXQgcmVjZWl2ZWQgJHtKU09OLnN0cmluZ2lmeSh0KX1gKTt0aGlzLl9jb21wYXJlV2l0aD10fXdyaXRlVmFsdWUodCl7bGV0IGU7aWYodGhpcy52YWx1ZT10LEFycmF5LmlzQXJyYXkodCkpe2NvbnN0IG49dC5tYXAoKHQ9PnRoaXMuX2dldE9wdGlvbklkKHQpKSk7ZT0odCxlKT0+e3QuX3NldFNlbGVjdGVkKG4uaW5kZXhPZihlLnRvU3RyaW5nKCkpPi0xKX19ZWxzZSBlPSh0LGUpPT57dC5fc2V0U2VsZWN0ZWQoITEpfTt0aGlzLl9vcHRpb25NYXAuZm9yRWFjaChlKX1yZWdpc3Rlck9uQ2hhbmdlKHQpe3RoaXMub25DaGFuZ2U9ZT0+e2NvbnN0IG49W107aWYodm9pZCAwIT09ZS5zZWxlY3RlZE9wdGlvbnMpe2NvbnN0IHQ9ZS5zZWxlY3RlZE9wdGlvbnM7Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspe2NvbnN0IG89dC5pdGVtKGUpLGk9dGhpcy5fZ2V0T3B0aW9uVmFsdWUoby52YWx1ZSk7bi5wdXNoKGkpfX1lbHNle2NvbnN0IHQ9ZS5vcHRpb25zO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKXtjb25zdCBvPXQuaXRlbShlKTtpZihvLnNlbGVjdGVkKXtjb25zdCB0PXRoaXMuX2dldE9wdGlvblZhbHVlKG8udmFsdWUpO24ucHVzaCh0KX19fXRoaXMudmFsdWU9bix0KG4pfX1yZWdpc3Rlck9uVG91Y2hlZCh0KXt0aGlzLm9uVG91Y2hlZD10fXNldERpc2FibGVkU3RhdGUodCl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCJkaXNhYmxlZCIsdCl9X3JlZ2lzdGVyT3B0aW9uKHQpe2NvbnN0IGU9KHRoaXMuX2lkQ291bnRlcisrKS50b1N0cmluZygpO3JldHVybiB0aGlzLl9vcHRpb25NYXAuc2V0KGUsdCksZX1fZ2V0T3B0aW9uSWQodCl7Zm9yKGNvbnN0IGUgb2YgQXJyYXkuZnJvbSh0aGlzLl9vcHRpb25NYXAua2V5cygpKSlpZih0aGlzLl9jb21wYXJlV2l0aCh0aGlzLl9vcHRpb25NYXAuZ2V0KGUpLl92YWx1ZSx0KSlyZXR1cm4gZTtyZXR1cm4gbnVsbH1fZ2V0T3B0aW9uVmFsdWUodCl7Y29uc3QgZT0oZnVuY3Rpb24gbih0KXtyZXR1cm4gdC5zcGxpdCgiOiIpWzBdfSkodCk7cmV0dXJuIHRoaXMuX29wdGlvbk1hcC5oYXMoZSk/dGhpcy5fb3B0aW9uTWFwLmdldChlKS5fdmFsdWU6dH19dlUuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHZVKShNdSh1aCksTXUoY2gpKX0sdlUuybVkaXI9Sm8oe3R5cGU6dlUsc2VsZWN0b3JzOltbInNlbGVjdCIsIm11bHRpcGxlIiwiIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyJzZWxlY3QiLCJtdWx0aXBsZSIsIiIsImZvcm1Db250cm9sIiwiIl0sWyJzZWxlY3QiLCJtdWx0aXBsZSIsIiIsIm5nTW9kZWwiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJk51KCJjaGFuZ2UiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLm9uQ2hhbmdlKGUudGFyZ2V0KX0pKSgiYmx1ciIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vblRvdWNoZWQoKX0pKX0saW5wdXRzOntjb21wYXJlV2l0aDoiY29tcGFyZVdpdGgifSxmZWF0dXJlczpbaWgoW0NVXSksZ21dfSksdlUuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTp1aH0se3R5cGU6Y2h9XSx2VS5wcm9wRGVjb3JhdG9ycz17Y29tcGFyZVdpdGg6W3t0eXBlOnlffV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIodlUsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3Rvcjoic2VsZWN0W211bHRpcGxlXVtmb3JtQ29udHJvbE5hbWVdLHNlbGVjdFttdWx0aXBsZV1bZm9ybUNvbnRyb2xdLHNlbGVjdFttdWx0aXBsZV1bbmdNb2RlbF0iLGhvc3Q6eyIoY2hhbmdlKSI6Im9uQ2hhbmdlKCRldmVudC50YXJnZXQpIiwiKGJsdXIpIjoib25Ub3VjaGVkKCkifSxwcm92aWRlcnM6W0NVXX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOnVofSx7dHlwZTpjaH1dfSkse2NvbXBhcmVXaXRoOlt7dHlwZTp5X31dfSk7Y2xhc3MgeFV7Y29uc3RydWN0b3IodCxlLG4pe3RoaXMuX2VsZW1lbnQ9dCx0aGlzLl9yZW5kZXJlcj1lLHRoaXMuX3NlbGVjdD1uLHRoaXMuX3NlbGVjdCYmKHRoaXMuaWQ9dGhpcy5fc2VsZWN0Ll9yZWdpc3Rlck9wdGlvbih0aGlzKSl9c2V0IG5nVmFsdWUodCl7bnVsbCE9dGhpcy5fc2VsZWN0JiYodGhpcy5fdmFsdWU9dCx0aGlzLl9zZXRFbGVtZW50VmFsdWUoTVUodGhpcy5pZCx0KSksdGhpcy5fc2VsZWN0LndyaXRlVmFsdWUodGhpcy5fc2VsZWN0LnZhbHVlKSl9c2V0IHZhbHVlKHQpe3RoaXMuX3NlbGVjdD8odGhpcy5fdmFsdWU9dCx0aGlzLl9zZXRFbGVtZW50VmFsdWUoTVUodGhpcy5pZCx0KSksdGhpcy5fc2VsZWN0LndyaXRlVmFsdWUodGhpcy5fc2VsZWN0LnZhbHVlKSk6dGhpcy5fc2V0RWxlbWVudFZhbHVlKHQpfV9zZXRFbGVtZW50VmFsdWUodCl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LCJ2YWx1ZSIsdCl9X3NldFNlbGVjdGVkKHQpe3RoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCwic2VsZWN0ZWQiLHQpfW5nT25EZXN0cm95KCl7dGhpcy5fc2VsZWN0JiYodGhpcy5fc2VsZWN0Ll9vcHRpb25NYXAuZGVsZXRlKHRoaXMuaWQpLHRoaXMuX3NlbGVjdC53cml0ZVZhbHVlKHRoaXMuX3NlbGVjdC52YWx1ZSkpfX14VS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8eFUpKE11KGNoKSxNdSh1aCksTXUodlUsOSkpfSx4VS7JtWRpcj1Kbyh7dHlwZTp4VSxzZWxlY3RvcnM6W1sib3B0aW9uIl1dLGlucHV0czp7bmdWYWx1ZToibmdWYWx1ZSIsdmFsdWU6InZhbHVlIn19KSx4VS5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmNofSx7dHlwZTp1aH0se3R5cGU6dlUsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnZzfV19XSx4VS5wcm9wRGVjb3JhdG9ycz17bmdWYWx1ZTpbe3R5cGU6eV8sYXJnczpbIm5nVmFsdWUiXX1dLHZhbHVlOlt7dHlwZTp5XyxhcmdzOlsidmFsdWUiXX1dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHhVLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6Im9wdGlvbiJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpjaH0se3R5cGU6dWh9LHt0eXBlOnZVLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp2c31dfV19KSx7bmdWYWx1ZTpbe3R5cGU6eV8sYXJnczpbIm5nVmFsdWUiXX1dLHZhbHVlOlt7dHlwZTp5XyxhcmdzOlsidmFsdWUiXX1dfSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCBPVT17cHJvdmlkZTpFVix1c2VFeGlzdGluZzpJbigoKCk9PndVKSksbXVsdGk6ITB9LFBVPXtwcm92aWRlOkVWLHVzZUV4aXN0aW5nOkluKCgoKT0+a1UpKSxtdWx0aTohMH07Y2xhc3Mgd1V7Y29uc3RydWN0b3IoKXt0aGlzLl9yZXF1aXJlZD0hMX1nZXQgcmVxdWlyZWQoKXtyZXR1cm4gdGhpcy5fcmVxdWlyZWR9c2V0IHJlcXVpcmVkKHQpe3RoaXMuX3JlcXVpcmVkPW51bGwhPXQmJiExIT09dCYmImZhbHNlIiE9YCR7dH1gLHRoaXMuX29uQ2hhbmdlJiZ0aGlzLl9vbkNoYW5nZSgpfXZhbGlkYXRlKHQpe3JldHVybiB0aGlzLnJlcXVpcmVkP05WKHQpOm51bGx9cmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZSh0KXt0aGlzLl9vbkNoYW5nZT10fX13VS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8d1UpfSx3VS7JtWRpcj1Kbyh7dHlwZTp3VSxzZWxlY3RvcnM6W1siIiwicmVxdWlyZWQiLCIiLCJmb3JtQ29udHJvbE5hbWUiLCIiLDMsInR5cGUiLCJjaGVja2JveCJdLFsiIiwicmVxdWlyZWQiLCIiLCJmb3JtQ29udHJvbCIsIiIsMywidHlwZSIsImNoZWNrYm94Il0sWyIiLCJyZXF1aXJlZCIsIiIsIm5nTW9kZWwiLCIiLDMsInR5cGUiLCJjaGVja2JveCJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MiZlJiZObSgicmVxdWlyZWQiLG4ucmVxdWlyZWQ/IiI6bnVsbCl9LGlucHV0czp7cmVxdWlyZWQ6InJlcXVpcmVkIn0sZmVhdHVyZXM6W2loKFtPVV0pXX0pLHdVLnByb3BEZWNvcmF0b3JzPXtyZXF1aXJlZDpbe3R5cGU6eV99XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYih3VSxbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiI6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sTmFtZV0sOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtmb3JtQ29udHJvbF0sOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtuZ01vZGVsXSIscHJvdmlkZXJzOltPVV0saG9zdDp7IlthdHRyLnJlcXVpcmVkXSI6J3JlcXVpcmVkID8gIiIgOiBudWxsJ319XX1dLChmdW5jdGlvbigpe3JldHVybltdfSkse3JlcXVpcmVkOlt7dHlwZTp5X31dfSk7Y2xhc3Mga1UgZXh0ZW5kcyB3VXt2YWxpZGF0ZSh0KXtyZXR1cm4gdGhpcy5yZXF1aXJlZD9JVih0KTpudWxsfX1rVS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBTVShlfHxrVSl9LGtVLsm1ZGlyPUpvKHt0eXBlOmtVLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJjaGVja2JveCIsInJlcXVpcmVkIiwiIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJjaGVja2JveCIsInJlcXVpcmVkIiwiIiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwidHlwZSIsImNoZWNrYm94IiwicmVxdWlyZWQiLCIiLCJuZ01vZGVsIiwiIl1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsyJmUmJk5tKCJyZXF1aXJlZCIsbi5yZXF1aXJlZD8iIjpudWxsKX0sZmVhdHVyZXM6W2loKFtQVV0pLGdtXX0pO2NvbnN0IFNVPXZyKGtVKTsoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGtVLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6ImlucHV0W3R5cGU9Y2hlY2tib3hdW3JlcXVpcmVkXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9Y2hlY2tib3hdW3JlcXVpcmVkXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1jaGVja2JveF1bcmVxdWlyZWRdW25nTW9kZWxdIixwcm92aWRlcnM6W1BVXSxob3N0OnsiW2F0dHIucmVxdWlyZWRdIjoncmVxdWlyZWQgPyAiIiA6IG51bGwnfX1dfV0sbnVsbCxudWxsKTtjb25zdCBEVT17cHJvdmlkZTpFVix1c2VFeGlzdGluZzpJbigoKCk9PkVVKSksbXVsdGk6ITB9O2NsYXNzIEVVe2NvbnN0cnVjdG9yKCl7dGhpcy5fZW5hYmxlZD0hMX1zZXQgZW1haWwodCl7dGhpcy5fZW5hYmxlZD0iIj09PXR8fCEwPT09dHx8InRydWUiPT09dCx0aGlzLl9vbkNoYW5nZSYmdGhpcy5fb25DaGFuZ2UoKX12YWxpZGF0ZSh0KXtyZXR1cm4gdGhpcy5fZW5hYmxlZD96Vih0KTpudWxsfXJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UodCl7dGhpcy5fb25DaGFuZ2U9dH19RVUuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEVVKX0sRVUuybVkaXI9Sm8oe3R5cGU6RVUsc2VsZWN0b3JzOltbIiIsImVtYWlsIiwiIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyIiLCJlbWFpbCIsIiIsImZvcm1Db250cm9sIiwiIl0sWyIiLCJlbWFpbCIsIiIsIm5nTW9kZWwiLCIiXV0saW5wdXRzOntlbWFpbDoiZW1haWwifSxmZWF0dXJlczpbaWgoW0RVXSldfSksRVUucHJvcERlY29yYXRvcnM9e2VtYWlsOlt7dHlwZTp5X31dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEVVLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6IltlbWFpbF1bZm9ybUNvbnRyb2xOYW1lXSxbZW1haWxdW2Zvcm1Db250cm9sXSxbZW1haWxdW25nTW9kZWxdIixwcm92aWRlcnM6W0RVXX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW119KSx7ZW1haWw6W3t0eXBlOnlffV19KTtjb25zdCBBVT17cHJvdmlkZTpFVix1c2VFeGlzdGluZzpJbigoKCk9PlJVKSksbXVsdGk6ITB9O2NsYXNzIFJVe2NvbnN0cnVjdG9yKCl7dGhpcy5fdmFsaWRhdG9yPUJWfW5nT25DaGFuZ2VzKHQpeyJtaW5sZW5ndGgiaW4gdCYmKHRoaXMuX2NyZWF0ZVZhbGlkYXRvcigpLHRoaXMuX29uQ2hhbmdlJiZ0aGlzLl9vbkNoYW5nZSgpKX12YWxpZGF0ZSh0KXtyZXR1cm4gbnVsbD09dGhpcy5taW5sZW5ndGg/bnVsbDp0aGlzLl92YWxpZGF0b3IodCl9cmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZSh0KXt0aGlzLl9vbkNoYW5nZT10fV9jcmVhdGVWYWxpZGF0b3IoKXt0aGlzLl92YWxpZGF0b3I9SFYoIm51bWJlciI9PXR5cGVvZiB0aGlzLm1pbmxlbmd0aD90aGlzLm1pbmxlbmd0aDpwYXJzZUludCh0aGlzLm1pbmxlbmd0aCwxMCkpfX1SVS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8UlUpfSxSVS7JtWRpcj1Kbyh7dHlwZTpSVSxzZWxlY3RvcnM6W1siIiwibWlubGVuZ3RoIiwiIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyIiLCJtaW5sZW5ndGgiLCIiLCJmb3JtQ29udHJvbCIsIiJdLFsiIiwibWlubGVuZ3RoIiwiIiwibmdNb2RlbCIsIiJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MiZlJiZObSgibWlubGVuZ3RoIixuLm1pbmxlbmd0aD9uLm1pbmxlbmd0aDpudWxsKX0saW5wdXRzOnttaW5sZW5ndGg6Im1pbmxlbmd0aCJ9LGZlYXR1cmVzOltpaChbQVVdKSxTaV19KSxSVS5wcm9wRGVjb3JhdG9ycz17bWlubGVuZ3RoOlt7dHlwZTp5X31dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFJVLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6IlttaW5sZW5ndGhdW2Zvcm1Db250cm9sTmFtZV0sW21pbmxlbmd0aF1bZm9ybUNvbnRyb2xdLFttaW5sZW5ndGhdW25nTW9kZWxdIixwcm92aWRlcnM6W0FVXSxob3N0OnsiW2F0dHIubWlubGVuZ3RoXSI6Im1pbmxlbmd0aCA/IG1pbmxlbmd0aCA6IG51bGwifX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW119KSx7bWlubGVuZ3RoOlt7dHlwZTp5X31dfSk7Y29uc3QgVFU9e3Byb3ZpZGU6RVYsdXNlRXhpc3Rpbmc6SW4oKCgpPT5OVSkpLG11bHRpOiEwfTtjbGFzcyBOVXtjb25zdHJ1Y3Rvcigpe3RoaXMuX3ZhbGlkYXRvcj1CVn1uZ09uQ2hhbmdlcyh0KXsibWF4bGVuZ3RoImluIHQmJih0aGlzLl9jcmVhdGVWYWxpZGF0b3IoKSx0aGlzLl9vbkNoYW5nZSYmdGhpcy5fb25DaGFuZ2UoKSl9dmFsaWRhdGUodCl7cmV0dXJuIG51bGwhPXRoaXMubWF4bGVuZ3RoP3RoaXMuX3ZhbGlkYXRvcih0KTpudWxsfXJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UodCl7dGhpcy5fb25DaGFuZ2U9dH1fY3JlYXRlVmFsaWRhdG9yKCl7dGhpcy5fdmFsaWRhdG9yPUZWKCJudW1iZXIiPT10eXBlb2YgdGhpcy5tYXhsZW5ndGg/dGhpcy5tYXhsZW5ndGg6cGFyc2VJbnQodGhpcy5tYXhsZW5ndGgsMTApKX19TlUuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fE5VKX0sTlUuybVkaXI9Sm8oe3R5cGU6TlUsc2VsZWN0b3JzOltbIiIsIm1heGxlbmd0aCIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiIiwibWF4bGVuZ3RoIiwiIiwiZm9ybUNvbnRyb2wiLCIiXSxbIiIsIm1heGxlbmd0aCIsIiIsIm5nTW9kZWwiLCIiXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezImZSYmTm0oIm1heGxlbmd0aCIsbi5tYXhsZW5ndGg/bi5tYXhsZW5ndGg6bnVsbCl9LGlucHV0czp7bWF4bGVuZ3RoOiJtYXhsZW5ndGgifSxmZWF0dXJlczpbaWgoW1RVXSksU2ldfSksTlUucHJvcERlY29yYXRvcnM9e21heGxlbmd0aDpbe3R5cGU6eV99XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihOVSxbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJbbWF4bGVuZ3RoXVtmb3JtQ29udHJvbE5hbWVdLFttYXhsZW5ndGhdW2Zvcm1Db250cm9sXSxbbWF4bGVuZ3RoXVtuZ01vZGVsXSIscHJvdmlkZXJzOltUVV0saG9zdDp7IlthdHRyLm1heGxlbmd0aF0iOiJtYXhsZW5ndGggPyBtYXhsZW5ndGggOiBudWxsIn19XX1dLChmdW5jdGlvbigpe3JldHVybltdfSkse21heGxlbmd0aDpbe3R5cGU6eV99XX0pO2NvbnN0IElVPXtwcm92aWRlOkVWLHVzZUV4aXN0aW5nOkluKCgoKT0+elUpKSxtdWx0aTohMH07Y2xhc3MgelV7Y29uc3RydWN0b3IoKXt0aGlzLl92YWxpZGF0b3I9QlZ9bmdPbkNoYW5nZXModCl7InBhdHRlcm4iaW4gdCYmKHRoaXMuX2NyZWF0ZVZhbGlkYXRvcigpLHRoaXMuX29uQ2hhbmdlJiZ0aGlzLl9vbkNoYW5nZSgpKX12YWxpZGF0ZSh0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdG9yKHQpfXJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UodCl7dGhpcy5fb25DaGFuZ2U9dH1fY3JlYXRlVmFsaWRhdG9yKCl7dGhpcy5fdmFsaWRhdG9yPUxWKHRoaXMucGF0dGVybil9fXpVLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHx6VSl9LHpVLsm1ZGlyPUpvKHt0eXBlOnpVLHNlbGVjdG9yczpbWyIiLCJwYXR0ZXJuIiwiIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyIiLCJwYXR0ZXJuIiwiIiwiZm9ybUNvbnRyb2wiLCIiXSxbIiIsInBhdHRlcm4iLCIiLCJuZ01vZGVsIiwiIl1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsyJmUmJk5tKCJwYXR0ZXJuIixuLnBhdHRlcm4/bi5wYXR0ZXJuOm51bGwpfSxpbnB1dHM6e3BhdHRlcm46InBhdHRlcm4ifSxmZWF0dXJlczpbaWgoW0lVXSksU2ldfSkselUucHJvcERlY29yYXRvcnM9e3BhdHRlcm46W3t0eXBlOnlffV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoelUsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoiW3BhdHRlcm5dW2Zvcm1Db250cm9sTmFtZV0sW3BhdHRlcm5dW2Zvcm1Db250cm9sXSxbcGF0dGVybl1bbmdNb2RlbF0iLHByb3ZpZGVyczpbSVVdLGhvc3Q6eyJbYXR0ci5wYXR0ZXJuXSI6InBhdHRlcm4gPyBwYXR0ZXJuIDogbnVsbCJ9fV19XSwoZnVuY3Rpb24oKXtyZXR1cm5bXX0pLHtwYXR0ZXJuOlt7dHlwZTp5X31dfSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCBIVT1bWGosX1UseFUsa1YsSmosb1UsT1YseVUsdlUsZVUsYWoscmosd1UsUlUsTlUselUsa1UsRVVdLEZVPVtaaixHaixCal0sTFU9W3JVLGxVLGdVLGRVLG1VXTtjbGFzcyBCVXt9QlUuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEJVKX0sQlUuybVtb2Q9Wm8oe3R5cGU6QlV9KSxCVS7JtWluaj1jbyh7aW1wb3J0czpbWyRqXV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKEJVLHtkZWNsYXJhdGlvbnM6W1hqLF9VLHhVLGtWLEpqLG9VLE9WLHlVLHZVLGVVLGFqLHJqLHdVLFJVLE5VLHpVLGtVLEVVXSxpbXBvcnRzOlskal0sZXhwb3J0czpbWGosX1UseFUsa1YsSmosb1UsT1YseVUsdlUsZVUsYWoscmosd1UsUlUsTlUselUsa1UsRVVdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihCVSxbe3R5cGU6a18sYXJnczpbe2RlY2xhcmF0aW9uczpIVSxpbXBvcnRzOlskal0sZXhwb3J0czpIVX1dfV0sbnVsbCxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIFZVe31WVS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8VlUpfSxWVS7JtW1vZD1abyh7dHlwZTpWVX0pLFZVLsm1aW5qPWNvKHtpbXBvcnRzOltCVV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKFZVLHtkZWNsYXJhdGlvbnM6W1pqLEdqLEJqXSxleHBvcnRzOltCVSxaaixHaixCal19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFZVLFt7dHlwZTprXyxhcmdzOlt7ZGVjbGFyYXRpb25zOkZVLGV4cG9ydHM6W0JVLEZVXX1dfV0sbnVsbCxudWxsKTtjbGFzcyBqVXtzdGF0aWMgd2l0aENvbmZpZyh0KXtyZXR1cm57bmdNb2R1bGU6alUscHJvdmlkZXJzOlt7cHJvdmlkZTppVSx1c2VWYWx1ZTp0Lndhcm5Pbk5nTW9kZWxXaXRoRm9ybUNvbnRyb2x9XX19fWpVLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxqVSl9LGpVLsm1bW9kPVpvKHt0eXBlOmpVfSksalUuybVpbmo9Y28oe2ltcG9ydHM6W0JVXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oalUse2RlY2xhcmF0aW9uczpbclUsbFUsZ1UsZFUsbVVdLGV4cG9ydHM6W0JVLHJVLGxVLGdVLGRVLG1VXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoalUsW3t0eXBlOmtfLGFyZ3M6W3tkZWNsYXJhdGlvbnM6W0xVXSxleHBvcnRzOltCVSxMVV19XX1dLG51bGwsbnVsbCk7Y2xhc3MgVVV7Z3JvdXAodCxlPW51bGwpe2NvbnN0IG49dGhpcy5fcmVkdWNlQ29udHJvbHModCk7bGV0IG8saT1udWxsLGE9bnVsbDtyZXR1cm4gbnVsbCE9ZSYmKCgKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmZ1bmN0aW9uIHIodCl7cmV0dXJuIHZvaWQgMCE9PXQuYXN5bmNWYWxpZGF0b3JzfHx2b2lkIDAhPT10LnZhbGlkYXRvcnN8fHZvaWQgMCE9PXQudXBkYXRlT259KShlKT8oaT1udWxsIT1lLnZhbGlkYXRvcnM/ZS52YWxpZGF0b3JzOm51bGwsYT1udWxsIT1lLmFzeW5jVmFsaWRhdG9ycz9lLmFzeW5jVmFsaWRhdG9yczpudWxsLG89bnVsbCE9ZS51cGRhdGVPbj9lLnVwZGF0ZU9uOnZvaWQgMCk6KGk9bnVsbCE9ZS52YWxpZGF0b3I/ZS52YWxpZGF0b3I6bnVsbCxhPW51bGwhPWUuYXN5bmNWYWxpZGF0b3I/ZS5hc3luY1ZhbGlkYXRvcjpudWxsKSksbmV3IHpqKG4se2FzeW5jVmFsaWRhdG9yczphLHVwZGF0ZU9uOm8sdmFsaWRhdG9yczppfSl9Y29udHJvbCh0LGUsbil7cmV0dXJuIG5ldyBJaih0LGUsbil9YXJyYXkodCxlLG4pe2NvbnN0IG89dC5tYXAoKHQ9PnRoaXMuX2NyZWF0ZUNvbnRyb2wodCkpKTtyZXR1cm4gbmV3IEhqKG8sZSxuKX1fcmVkdWNlQ29udHJvbHModCl7Y29uc3QgZT17fTtyZXR1cm4gT2JqZWN0LmtleXModCkuZm9yRWFjaCgobj0+e2Vbbl09dGhpcy5fY3JlYXRlQ29udHJvbCh0W25dKX0pKSxlfV9jcmVhdGVDb250cm9sKHQpe3JldHVybiB0IGluc3RhbmNlb2YgSWp8fHQgaW5zdGFuY2VvZiB6anx8dCBpbnN0YW5jZW9mIEhqP3Q6QXJyYXkuaXNBcnJheSh0KT90aGlzLmNvbnRyb2wodFswXSx0Lmxlbmd0aD4xP3RbMV06bnVsbCx0Lmxlbmd0aD4yP3RbMl06bnVsbCk6dGhpcy5jb250cm9sKHQpfX1VVS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8VVUpfSxVVS7JtXByb3Y9bG8oe2ZhY3Rvcnk6ZnVuY3Rpb24gdCgpe3JldHVybiBuZXcgVVV9LHRva2VuOlVVLHByb3ZpZGVkSW46alV9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFVVLFt7dHlwZTpKbSxhcmdzOlt7cHJvdmlkZWRJbjpqVX1dfV0sbnVsbCxudWxsKSwKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCm5ldyBiaCgiMTEuMi4xNCIpO2NvbnN0IFdVPVsidHJpZ2dlciJdLEdVPVsicGFuZWwiXTtmdW5jdGlvbiBZVSh0LGUpe2lmKDEmdCYmKE91KDAsInNwYW4iLDgpLE1mKDEpLFB1KCkpLDImdCl7Y29uc3QgdD1MdSgpO0pjKDEpLHZmKHQucGxhY2Vob2xkZXIpfX1mdW5jdGlvbiBxVSh0LGUpe2lmKDEmdCYmKE91KDAsInNwYW4iLDEyKSxNZigxKSxQdSgpKSwyJnQpe2NvbnN0IHQ9THUoMik7SmMoMSksdmYodC50cmlnZ2VyVmFsdWUpfX1mdW5jdGlvbiBaVSh0LGUpezEmdCYmanUoMCwwLFsiKm5nU3dpdGNoQ2FzZSIsInRydWUiXSl9ZnVuY3Rpb24gWFUodCxlKXsxJnQmJihPdSgwLCJzcGFuIiw5KSxXbSgxLHFVLDIsMSwic3BhbiIsMTApLFdtKDIsWlUsMSwwLCJuZy1jb250ZW50IiwxMSksUHUoKSksMiZ0JiYodnUoIm5nU3dpdGNoIiwhIUx1KCkuY3VzdG9tVHJpZ2dlciksSmMoMiksdnUoIm5nU3dpdGNoQ2FzZSIsITApKX1mdW5jdGlvbiBLVSh0LGUpe2lmKDEmdCl7Y29uc3QgdD1FdSgpO091KDAsImRpdiIsMTMpLE91KDEsImRpdiIsMTQsMTUpLE51KCJAdHJhbnNmb3JtUGFuZWwuZG9uZSIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIHJhKHQpLEx1KCkuX3BhbmVsRG9uZUFuaW1hdGluZ1N0cmVhbS5uZXh0KG4udG9TdGF0ZSl9KSkoImtleWRvd24iLChmdW5jdGlvbiBlKG4pe3JldHVybiByYSh0KSxMdSgpLl9oYW5kbGVLZXlkb3duKG4pfSkpLGp1KDMsMSksUHUoKSxQdSgpfWlmKDImdCl7Y29uc3QgdD1MdSgpO3Z1KCJAdHJhbnNmb3JtUGFuZWxXcmFwIix2b2lkIDApLEpjKDEpLHdmKCJtYXQtc2VsZWN0LXBhbmVsICIsdC5fZ2V0UGFuZWxUaGVtZSgpLCIiKSxvZigidHJhbnNmb3JtLW9yaWdpbiIsdC5fdHJhbnNmb3JtT3JpZ2luKSgiZm9udC1zaXplIix0Ll90cmlnZ2VyRm9udFNpemUsInB4IiksdnUoIm5nQ2xhc3MiLHQucGFuZWxDbGFzcykoIkB0cmFuc2Zvcm1QYW5lbCIsdC5tdWx0aXBsZT8ic2hvd2luZy1tdWx0aXBsZSI6InNob3dpbmciKSxObSgiaWQiLHQuaWQrIi1wYW5lbCIpKCJhcmlhLW11bHRpc2VsZWN0YWJsZSIsdC5tdWx0aXBsZSkoImFyaWEtbGFiZWwiLHQuYXJpYUxhYmVsfHxudWxsKSgiYXJpYS1sYWJlbGxlZGJ5Iix0Ll9nZXRQYW5lbEFyaWFMYWJlbGxlZGJ5KCkpfX1jb25zdCBKVT1bW1sibWF0LXNlbGVjdC10cmlnZ2VyIl1dLCIqIl0sUVU9e3RyYW5zZm9ybVBhbmVsV3JhcDpLeCgidHJhbnNmb3JtUGFuZWxXcmFwIixbbk8oIiogPT4gdm9pZCIsaU8oIkB0cmFuc2Zvcm1QYW5lbCIsW29PKCldLHtvcHRpb25hbDohMH0pKV0pLHRyYW5zZm9ybVBhbmVsOkt4KCJ0cmFuc2Zvcm1QYW5lbCIsW3RPKCJ2b2lkIiwkeCh7dHJhbnNmb3JtOiJzY2FsZVkoMC44KSIsbWluV2lkdGg6IjEwMCUiLG9wYWNpdHk6MH0pKSx0Tygic2hvd2luZyIsJHgoe29wYWNpdHk6MSxtaW5XaWR0aDoiY2FsYygxMDAlICsgMzJweCkiLHRyYW5zZm9ybToic2NhbGVZKDEpIn0pKSx0Tygic2hvd2luZy1tdWx0aXBsZSIsJHgoe29wYWNpdHk6MSxtaW5XaWR0aDoiY2FsYygxMDAlICsgNjRweCkiLHRyYW5zZm9ybToic2NhbGVZKDEpIn0pKSxuTygidm9pZCA9PiAqIixKeCgiMTIwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSkiKSksbk8oIiogPT4gdm9pZCIsSngoIjEwMG1zIDI1bXMgbGluZWFyIiwkeCh7b3BhY2l0eTowfSkpKV0pfTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmxldCAkVT0wO2NvbnN0IHRXPTI1NixlVz1uZXcgTnIoIm1hdC1zZWxlY3Qtc2Nyb2xsLXN0cmF0ZWd5Iiksblc9bmV3IE5yKCJNQVRfU0VMRUNUX0NPTkZJRyIpLG9XPXtwcm92aWRlOmVXLGRlcHM6W0pGXSx1c2VGYWN0b3J5OmZ1bmN0aW9uIGlXKHQpe3JldHVybigpPT50LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpfX07Y2xhc3MgYVd7Y29uc3RydWN0b3IodCxlKXt0aGlzLnNvdXJjZT10LHRoaXMudmFsdWU9ZX19Y29uc3Qgclc9enooSHooTnooRnooY2xhc3N7Y29uc3RydWN0b3IodCxlLG4sbyxpKXt0aGlzLl9lbGVtZW50UmVmPXQsdGhpcy5fZGVmYXVsdEVycm9yU3RhdGVNYXRjaGVyPWUsdGhpcy5fcGFyZW50Rm9ybT1uLHRoaXMuX3BhcmVudEZvcm1Hcm91cD1vLHRoaXMubmdDb250cm9sPWl9fSkpKSksc1c9bmV3IE5yKCJNYXRTZWxlY3RUcmlnZ2VyIik7Y2xhc3MgbFd7fWxXLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxsVyl9LGxXLsm1ZGlyPUpvKHt0eXBlOmxXLHNlbGVjdG9yczpbWyJtYXQtc2VsZWN0LXRyaWdnZXIiXV0sZmVhdHVyZXM6W2loKFt7cHJvdmlkZTpzVyx1c2VFeGlzdGluZzpsV31dKV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGxXLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6Im1hdC1zZWxlY3QtdHJpZ2dlciIscHJvdmlkZXJzOlt7cHJvdmlkZTpzVyx1c2VFeGlzdGluZzpsV31dfV19XSxudWxsLG51bGwpO2NsYXNzIGNXIGV4dGVuZHMgcld7Y29uc3RydWN0b3IodCxlLG4sbyxpLGEscixzLGwsYyxkLHAsbSx1KXt2YXIgZixnLGg7c3VwZXIoaSxvLHIscyxjKSx0aGlzLl92aWV3cG9ydFJ1bGVyPXQsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9ZSx0aGlzLl9uZ1pvbmU9bix0aGlzLl9kaXI9YSx0aGlzLl9wYXJlbnRGb3JtRmllbGQ9bCx0aGlzLm5nQ29udHJvbD1jLHRoaXMuX2xpdmVBbm5vdW5jZXI9bSx0aGlzLl9kZWZhdWx0T3B0aW9ucz11LHRoaXMuX3BhbmVsT3Blbj0hMSx0aGlzLl9jb21wYXJlV2l0aD0odCxlKT0+dD09PWUsdGhpcy5fdWlkPSJtYXQtc2VsZWN0LSIrJFUrKyx0aGlzLl90cmlnZ2VyQXJpYUxhYmVsbGVkQnk9bnVsbCx0aGlzLl9kZXN0cm95PW5ldyB4LHRoaXMuX29uQ2hhbmdlPSgpPT57fSx0aGlzLl9vblRvdWNoZWQ9KCk9Pnt9LHRoaXMuX3ZhbHVlSWQ9Im1hdC1zZWxlY3QtdmFsdWUtIiskVSsrLHRoaXMuX3BhbmVsRG9uZUFuaW1hdGluZ1N0cmVhbT1uZXcgeCx0aGlzLl9vdmVybGF5UGFuZWxDbGFzcz0obnVsbD09PShmPXRoaXMuX2RlZmF1bHRPcHRpb25zKXx8dm9pZCAwPT09Zj92b2lkIDA6Zi5vdmVybGF5UGFuZWxDbGFzcyl8fCIiLHRoaXMuX2ZvY3VzZWQ9ITEsdGhpcy5jb250cm9sVHlwZT0ibWF0LXNlbGVjdCIsdGhpcy5fcmVxdWlyZWQ9ITEsdGhpcy5fbXVsdGlwbGU9ITEsdGhpcy5fZGlzYWJsZU9wdGlvbkNlbnRlcmluZz1udWxsIT09KGg9bnVsbD09PShnPXRoaXMuX2RlZmF1bHRPcHRpb25zKXx8dm9pZCAwPT09Zz92b2lkIDA6Zy5kaXNhYmxlT3B0aW9uQ2VudGVyaW5nKSYmdm9pZCAwIT09aCYmaCx0aGlzLmFyaWFMYWJlbD0iIix0aGlzLm9wdGlvblNlbGVjdGlvbkNoYW5nZXM9RnQoKCgpPT57Y29uc3QgdD10aGlzLm9wdGlvbnM7cmV0dXJuIHQ/dC5jaGFuZ2VzLnBpcGUoY24odCksZG4oKCgpPT5XdCguLi50Lm1hcCgodD0+dC5vblNlbGVjdGlvbkNoYW5nZSkpKSkpKTp0aGlzLl9uZ1pvbmUub25TdGFibGUucGlwZShOZSgxKSxkbigoKCk9PnRoaXMub3B0aW9uU2VsZWN0aW9uQ2hhbmdlcykpKX0pKSx0aGlzLm9wZW5lZENoYW5nZT1uZXcgQWIsdGhpcy5fb3BlbmVkU3RyZWFtPXRoaXMub3BlbmVkQ2hhbmdlLnBpcGUoR3QoKHQ9PnQpKSxodCgoKCk9Pnt9KSkpLHRoaXMuX2Nsb3NlZFN0cmVhbT10aGlzLm9wZW5lZENoYW5nZS5waXBlKEd0KCh0PT4hdCkpLGh0KCgoKT0+e30pKSksdGhpcy5zZWxlY3Rpb25DaGFuZ2U9bmV3IEFiLHRoaXMudmFsdWVDaGFuZ2U9bmV3IEFiLHRoaXMubmdDb250cm9sJiYodGhpcy5uZ0NvbnRyb2wudmFsdWVBY2Nlc3Nvcj10aGlzKSxudWxsIT0obnVsbD09dT92b2lkIDA6dS50eXBlYWhlYWREZWJvdW5jZUludGVydmFsKSYmKHRoaXMuX3R5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWw9dS50eXBlYWhlYWREZWJvdW5jZUludGVydmFsKSx0aGlzLl9zY3JvbGxTdHJhdGVneUZhY3Rvcnk9cCx0aGlzLl9zY3JvbGxTdHJhdGVneT10aGlzLl9zY3JvbGxTdHJhdGVneUZhY3RvcnkoKSx0aGlzLnRhYkluZGV4PXBhcnNlSW50KGQpfHwwLHRoaXMuaWQ9dGhpcy5pZH1nZXQgZm9jdXNlZCgpe3JldHVybiB0aGlzLl9mb2N1c2VkfHx0aGlzLl9wYW5lbE9wZW59Z2V0IHBsYWNlaG9sZGVyKCl7cmV0dXJuIHRoaXMuX3BsYWNlaG9sZGVyfXNldCBwbGFjZWhvbGRlcih0KXt0aGlzLl9wbGFjZWhvbGRlcj10LHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX1nZXQgcmVxdWlyZWQoKXtyZXR1cm4gdGhpcy5fcmVxdWlyZWR9c2V0IHJlcXVpcmVkKHQpe3RoaXMuX3JlcXVpcmVkPXJJKHQpLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX1nZXQgbXVsdGlwbGUoKXtyZXR1cm4gdGhpcy5fbXVsdGlwbGV9c2V0IG11bHRpcGxlKHQpe2lmKHRoaXMuX3NlbGVjdGlvbk1vZGVsJiYoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkpCi8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwp0aHJvdyhmdW5jdGlvbiBlKCl7cmV0dXJuIEVycm9yKCJDYW5ub3QgY2hhbmdlIGBtdWx0aXBsZWAgbW9kZSBvZiBzZWxlY3QgYWZ0ZXIgaW5pdGlhbGl6YXRpb24uIil9KSgpO3RoaXMuX211bHRpcGxlPXJJKHQpfWdldCBkaXNhYmxlT3B0aW9uQ2VudGVyaW5nKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVPcHRpb25DZW50ZXJpbmd9c2V0IGRpc2FibGVPcHRpb25DZW50ZXJpbmcodCl7dGhpcy5fZGlzYWJsZU9wdGlvbkNlbnRlcmluZz1ySSh0KX1nZXQgY29tcGFyZVdpdGgoKXtyZXR1cm4gdGhpcy5fY29tcGFyZVdpdGh9c2V0IGNvbXBhcmVXaXRoKHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiYoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkpdGhyb3coZnVuY3Rpb24gZSgpe3JldHVybiBFcnJvcigiYGNvbXBhcmVXaXRoYCBtdXN0IGJlIGEgZnVuY3Rpb24uIil9KSgpO3RoaXMuX2NvbXBhcmVXaXRoPXQsdGhpcy5fc2VsZWN0aW9uTW9kZWwmJnRoaXMuX2luaXRpYWxpemVTZWxlY3Rpb24oKX1nZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5fdmFsdWV9c2V0IHZhbHVlKHQpeyh0IT09dGhpcy5fdmFsdWV8fHRoaXMuX211bHRpcGxlJiZBcnJheS5pc0FycmF5KHQpKSYmKHRoaXMub3B0aW9ucyYmdGhpcy5fc2V0U2VsZWN0aW9uQnlWYWx1ZSh0KSx0aGlzLl92YWx1ZT10KX1nZXQgdHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCgpe3JldHVybiB0aGlzLl90eXBlYWhlYWREZWJvdW5jZUludGVydmFsfXNldCB0eXBlYWhlYWREZWJvdW5jZUludGVydmFsKHQpe3RoaXMuX3R5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWw9c0kodCl9Z2V0IGlkKCl7cmV0dXJuIHRoaXMuX2lkfXNldCBpZCh0KXt0aGlzLl9pZD10fHx0aGlzLl91aWQsdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfW5nT25Jbml0KCl7dGhpcy5fc2VsZWN0aW9uTW9kZWw9bmV3IGpIKHRoaXMubXVsdGlwbGUpLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKSx0aGlzLl9wYW5lbERvbmVBbmltYXRpbmdTdHJlYW0ucGlwZShrZSgpLHVuKHRoaXMuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUoKCgpPT50aGlzLl9wYW5lbERvbmVBbmltYXRpbmcodGhpcy5wYW5lbE9wZW4pKSl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5faW5pdEtleU1hbmFnZXIoKSx0aGlzLl9zZWxlY3Rpb25Nb2RlbC5jaGFuZ2VkLnBpcGUodW4odGhpcy5fZGVzdHJveSkpLnN1YnNjcmliZSgodD0+e3QuYWRkZWQuZm9yRWFjaCgodD0+dC5zZWxlY3QoKSkpLHQucmVtb3ZlZC5mb3JFYWNoKCh0PT50LmRlc2VsZWN0KCkpKX0pKSx0aGlzLm9wdGlvbnMuY2hhbmdlcy5waXBlKGNuKG51bGwpLHVuKHRoaXMuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5fcmVzZXRPcHRpb25zKCksdGhpcy5faW5pdGlhbGl6ZVNlbGVjdGlvbigpfSkpfW5nRG9DaGVjaygpe2NvbnN0IHQ9dGhpcy5fZ2V0VHJpZ2dlckFyaWFMYWJlbGxlZGJ5KCk7aWYodCE9PXRoaXMuX3RyaWdnZXJBcmlhTGFiZWxsZWRCeSl7Y29uc3QgZT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7dGhpcy5fdHJpZ2dlckFyaWFMYWJlbGxlZEJ5PXQsdD9lLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbGxlZGJ5Iix0KTplLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1sYWJlbGxlZGJ5Iil9dGhpcy5uZ0NvbnRyb2wmJnRoaXMudXBkYXRlRXJyb3JTdGF0ZSgpfW5nT25DaGFuZ2VzKHQpe3QuZGlzYWJsZWQmJnRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKSx0LnR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwmJnRoaXMuX2tleU1hbmFnZXImJnRoaXMuX2tleU1hbmFnZXIud2l0aFR5cGVBaGVhZCh0aGlzLl90eXBlYWhlYWREZWJvdW5jZUludGVydmFsKX1uZ09uRGVzdHJveSgpe3RoaXMuX2Rlc3Ryb3kubmV4dCgpLHRoaXMuX2Rlc3Ryb3kuY29tcGxldGUoKSx0aGlzLnN0YXRlQ2hhbmdlcy5jb21wbGV0ZSgpfXRvZ2dsZSgpe3RoaXMucGFuZWxPcGVuP3RoaXMuY2xvc2UoKTp0aGlzLm9wZW4oKX1vcGVuKCl7dGhpcy5fY2FuT3BlbigpJiYodGhpcy5fcGFuZWxPcGVuPSEwLHRoaXMuX2tleU1hbmFnZXIud2l0aEhvcml6b250YWxPcmllbnRhdGlvbihudWxsKSx0aGlzLl9oaWdobGlnaHRDb3JyZWN0T3B0aW9uKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfWNsb3NlKCl7dGhpcy5fcGFuZWxPcGVuJiYodGhpcy5fcGFuZWxPcGVuPSExLHRoaXMuX2tleU1hbmFnZXIud2l0aEhvcml6b250YWxPcmllbnRhdGlvbih0aGlzLl9pc1J0bCgpPyJydGwiOiJsdHIiKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSx0aGlzLl9vblRvdWNoZWQoKSl9d3JpdGVWYWx1ZSh0KXt0aGlzLnZhbHVlPXR9cmVnaXN0ZXJPbkNoYW5nZSh0KXt0aGlzLl9vbkNoYW5nZT10fXJlZ2lzdGVyT25Ub3VjaGVkKHQpe3RoaXMuX29uVG91Y2hlZD10fXNldERpc2FibGVkU3RhdGUodCl7dGhpcy5kaXNhYmxlZD10LHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX1nZXQgcGFuZWxPcGVuKCl7cmV0dXJuIHRoaXMuX3BhbmVsT3Blbn1nZXQgc2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5tdWx0aXBsZT90aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZDp0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZFswXX1nZXQgdHJpZ2dlclZhbHVlKCl7aWYodGhpcy5lbXB0eSlyZXR1cm4iIjtpZih0aGlzLl9tdWx0aXBsZSl7Y29uc3QgdD10aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZC5tYXAoKHQ9PnQudmlld1ZhbHVlKSk7cmV0dXJuIHRoaXMuX2lzUnRsKCkmJnQucmV2ZXJzZSgpLHQuam9pbigiLCAiKX1yZXR1cm4gdGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWRbMF0udmlld1ZhbHVlfV9pc1J0bCgpe3JldHVybiEhdGhpcy5fZGlyJiYicnRsIj09PXRoaXMuX2Rpci52YWx1ZX1faGFuZGxlS2V5ZG93bih0KXt0aGlzLmRpc2FibGVkfHwodGhpcy5wYW5lbE9wZW4/dGhpcy5faGFuZGxlT3BlbktleWRvd24odCk6dGhpcy5faGFuZGxlQ2xvc2VkS2V5ZG93bih0KSl9X2hhbmRsZUNsb3NlZEtleWRvd24odCl7Y29uc3QgZT10LmtleUNvZGUsbj1lPT09aUl8fGU9PT1vSXx8Mzc9PT1lfHwzOT09PWUsbz1lPT09dEl8fGU9PT1uSSxpPXRoaXMuX2tleU1hbmFnZXI7aWYoIWkuaXNUeXBpbmcoKSYmbyYmIWFJKHQpfHwodGhpcy5tdWx0aXBsZXx8dC5hbHRLZXkpJiZuKXQucHJldmVudERlZmF1bHQoKSx0aGlzLm9wZW4oKTtlbHNlIGlmKCF0aGlzLm11bHRpcGxlKXtjb25zdCBlPXRoaXMuc2VsZWN0ZWQ7aS5vbktleWRvd24odCk7Y29uc3Qgbj10aGlzLnNlbGVjdGVkO24mJmUhPT1uJiZ0aGlzLl9saXZlQW5ub3VuY2VyLmFubm91bmNlKG4udmlld1ZhbHVlLDFlNCl9fV9oYW5kbGVPcGVuS2V5ZG93bih0KXtjb25zdCBlPXRoaXMuX2tleU1hbmFnZXIsbj10LmtleUNvZGUsbz1uPT09aUl8fG49PT1vSSxpPWUuaXNUeXBpbmcoKTtpZihvJiZ0LmFsdEtleSl0LnByZXZlbnREZWZhdWx0KCksdGhpcy5jbG9zZSgpO2Vsc2UgaWYoaXx8biE9PXRJJiZuIT09bkl8fCFlLmFjdGl2ZUl0ZW18fGFJKHQpKWlmKCFpJiZ0aGlzLl9tdWx0aXBsZSYmNjU9PT1uJiZ0LmN0cmxLZXkpe3QucHJldmVudERlZmF1bHQoKTtjb25zdCBlPXRoaXMub3B0aW9ucy5zb21lKCh0PT4hdC5kaXNhYmxlZCYmIXQuc2VsZWN0ZWQpKTt0aGlzLm9wdGlvbnMuZm9yRWFjaCgodD0+e3QuZGlzYWJsZWR8fChlP3Quc2VsZWN0KCk6dC5kZXNlbGVjdCgpKX0pKX1lbHNle2NvbnN0IG49ZS5hY3RpdmVJdGVtSW5kZXg7ZS5vbktleWRvd24odCksdGhpcy5fbXVsdGlwbGUmJm8mJnQuc2hpZnRLZXkmJmUuYWN0aXZlSXRlbSYmZS5hY3RpdmVJdGVtSW5kZXghPT1uJiZlLmFjdGl2ZUl0ZW0uX3NlbGVjdFZpYUludGVyYWN0aW9uKCl9ZWxzZSB0LnByZXZlbnREZWZhdWx0KCksZS5hY3RpdmVJdGVtLl9zZWxlY3RWaWFJbnRlcmFjdGlvbigpfV9vbkZvY3VzKCl7dGhpcy5kaXNhYmxlZHx8KHRoaXMuX2ZvY3VzZWQ9ITAsdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpKX1fb25CbHVyKCl7dGhpcy5fZm9jdXNlZD0hMSx0aGlzLmRpc2FibGVkfHx0aGlzLnBhbmVsT3Blbnx8KHRoaXMuX29uVG91Y2hlZCgpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKSl9X29uQXR0YWNoZWQoKXt0aGlzLm92ZXJsYXlEaXIucG9zaXRpb25DaGFuZ2UucGlwZShOZSgxKSkuc3Vic2NyaWJlKCgoKT0+e3RoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKSx0aGlzLl9wb3NpdGlvbmluZ1NldHRsZWQoKX0pKX1fZ2V0UGFuZWxUaGVtZSgpe3JldHVybiB0aGlzLl9wYXJlbnRGb3JtRmllbGQ/YG1hdC0ke3RoaXMuX3BhcmVudEZvcm1GaWVsZC5jb2xvcn1gOiIifWdldCBlbXB0eSgpe3JldHVybiF0aGlzLl9zZWxlY3Rpb25Nb2RlbHx8dGhpcy5fc2VsZWN0aW9uTW9kZWwuaXNFbXB0eSgpfV9pbml0aWFsaXplU2VsZWN0aW9uKCl7UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKCk9Pnt0aGlzLl9zZXRTZWxlY3Rpb25CeVZhbHVlKHRoaXMubmdDb250cm9sP3RoaXMubmdDb250cm9sLnZhbHVlOnRoaXMuX3ZhbHVlKSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCl9KSl9X3NldFNlbGVjdGlvbkJ5VmFsdWUodCl7aWYodGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWQuZm9yRWFjaCgodD0+dC5zZXRJbmFjdGl2ZVN0eWxlcygpKSksdGhpcy5fc2VsZWN0aW9uTW9kZWwuY2xlYXIoKSx0aGlzLm11bHRpcGxlJiZ0KXtpZighQXJyYXkuaXNBcnJheSh0KSYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpKXRocm93KGZ1bmN0aW9uIGUoKXtyZXR1cm4gRXJyb3IoIlZhbHVlIG11c3QgYmUgYW4gYXJyYXkgaW4gbXVsdGlwbGUtc2VsZWN0aW9uIG1vZGUuIil9KSgpO3QuZm9yRWFjaCgodD0+dGhpcy5fc2VsZWN0VmFsdWUodCkpKSx0aGlzLl9zb3J0VmFsdWVzKCl9ZWxzZXtjb25zdCBlPXRoaXMuX3NlbGVjdFZhbHVlKHQpO2U/dGhpcy5fa2V5TWFuYWdlci51cGRhdGVBY3RpdmVJdGVtKGUpOnRoaXMucGFuZWxPcGVufHx0aGlzLl9rZXlNYW5hZ2VyLnVwZGF0ZUFjdGl2ZUl0ZW0oLTEpfXRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfV9zZWxlY3RWYWx1ZSh0KXtjb25zdCBlPXRoaXMub3B0aW9ucy5maW5kKChlPT57aWYodGhpcy5fc2VsZWN0aW9uTW9kZWwuaXNTZWxlY3RlZChlKSlyZXR1cm4hMTt0cnl7cmV0dXJuIG51bGwhPWUudmFsdWUmJnRoaXMuX2NvbXBhcmVXaXRoKGUudmFsdWUsdCl9Y2F0Y2godCl7cmV0dXJuKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZjb25zb2xlLndhcm4odCksITF9fSkpO3JldHVybiBlJiZ0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3QoZSksZX1faW5pdEtleU1hbmFnZXIoKXt0aGlzLl9rZXlNYW5hZ2VyPW5ldyBCSSh0aGlzLm9wdGlvbnMpLndpdGhUeXBlQWhlYWQodGhpcy5fdHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCkud2l0aFZlcnRpY2FsT3JpZW50YXRpb24oKS53aXRoSG9yaXpvbnRhbE9yaWVudGF0aW9uKHRoaXMuX2lzUnRsKCk/InJ0bCI6Imx0ciIpLndpdGhIb21lQW5kRW5kKCkud2l0aEFsbG93ZWRNb2RpZmllcktleXMoWyJzaGlmdEtleSJdKSx0aGlzLl9rZXlNYW5hZ2VyLnRhYk91dC5waXBlKHVuKHRoaXMuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5wYW5lbE9wZW4mJighdGhpcy5tdWx0aXBsZSYmdGhpcy5fa2V5TWFuYWdlci5hY3RpdmVJdGVtJiZ0aGlzLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0uX3NlbGVjdFZpYUludGVyYWN0aW9uKCksdGhpcy5mb2N1cygpLHRoaXMuY2xvc2UoKSl9KSksdGhpcy5fa2V5TWFuYWdlci5jaGFuZ2UucGlwZSh1bih0aGlzLl9kZXN0cm95KSkuc3Vic2NyaWJlKCgoKT0+e3RoaXMuX3BhbmVsT3BlbiYmdGhpcy5wYW5lbD90aGlzLl9zY3JvbGxPcHRpb25JbnRvVmlldyh0aGlzLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW1JbmRleHx8MCk6dGhpcy5fcGFuZWxPcGVufHx0aGlzLm11bHRpcGxlfHwhdGhpcy5fa2V5TWFuYWdlci5hY3RpdmVJdGVtfHx0aGlzLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0uX3NlbGVjdFZpYUludGVyYWN0aW9uKCl9KSl9X3Jlc2V0T3B0aW9ucygpe2NvbnN0IHQ9V3QodGhpcy5vcHRpb25zLmNoYW5nZXMsdGhpcy5fZGVzdHJveSk7dGhpcy5vcHRpb25TZWxlY3Rpb25DaGFuZ2VzLnBpcGUodW4odCkpLnN1YnNjcmliZSgodD0+e3RoaXMuX29uU2VsZWN0KHQuc291cmNlLHQuaXNVc2VySW5wdXQpLHQuaXNVc2VySW5wdXQmJiF0aGlzLm11bHRpcGxlJiZ0aGlzLl9wYW5lbE9wZW4mJih0aGlzLmNsb3NlKCksdGhpcy5mb2N1cygpKX0pKSxXdCguLi50aGlzLm9wdGlvbnMubWFwKCh0PT50Ll9zdGF0ZUNoYW5nZXMpKSkucGlwZSh1bih0KSkuc3Vic2NyaWJlKCgoKT0+e3RoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX0pKX1fb25TZWxlY3QodCxlKXtjb25zdCBuPXRoaXMuX3NlbGVjdGlvbk1vZGVsLmlzU2VsZWN0ZWQodCk7bnVsbCE9dC52YWx1ZXx8dGhpcy5fbXVsdGlwbGU/KG4hPT10LnNlbGVjdGVkJiYodC5zZWxlY3RlZD90aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3QodCk6dGhpcy5fc2VsZWN0aW9uTW9kZWwuZGVzZWxlY3QodCkpLGUmJnRoaXMuX2tleU1hbmFnZXIuc2V0QWN0aXZlSXRlbSh0KSx0aGlzLm11bHRpcGxlJiYodGhpcy5fc29ydFZhbHVlcygpLGUmJnRoaXMuZm9jdXMoKSkpOih0LmRlc2VsZWN0KCksdGhpcy5fc2VsZWN0aW9uTW9kZWwuY2xlYXIoKSxudWxsIT10aGlzLnZhbHVlJiZ0aGlzLl9wcm9wYWdhdGVDaGFuZ2VzKHQudmFsdWUpKSxuIT09dGhpcy5fc2VsZWN0aW9uTW9kZWwuaXNTZWxlY3RlZCh0KSYmdGhpcy5fcHJvcGFnYXRlQ2hhbmdlcygpLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX1fc29ydFZhbHVlcygpe2lmKHRoaXMubXVsdGlwbGUpe2NvbnN0IHQ9dGhpcy5vcHRpb25zLnRvQXJyYXkoKTt0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zb3J0KCgoZSxuKT0+dGhpcy5zb3J0Q29tcGFyYXRvcj90aGlzLnNvcnRDb21wYXJhdG9yKGUsbix0KTp0LmluZGV4T2YoZSktdC5pbmRleE9mKG4pKSksdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfX1fcHJvcGFnYXRlQ2hhbmdlcyh0KXtsZXQgZT1udWxsO2U9dGhpcy5tdWx0aXBsZT90aGlzLnNlbGVjdGVkLm1hcCgodD0+dC52YWx1ZSkpOnRoaXMuc2VsZWN0ZWQ/dGhpcy5zZWxlY3RlZC52YWx1ZTp0LHRoaXMuX3ZhbHVlPWUsdGhpcy52YWx1ZUNoYW5nZS5lbWl0KGUpLHRoaXMuX29uQ2hhbmdlKGUpLHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQodGhpcy5fZ2V0Q2hhbmdlRXZlbnQoZSkpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfV9oaWdobGlnaHRDb3JyZWN0T3B0aW9uKCl7dGhpcy5fa2V5TWFuYWdlciYmKHRoaXMuZW1wdHk/dGhpcy5fa2V5TWFuYWdlci5zZXRGaXJzdEl0ZW1BY3RpdmUoKTp0aGlzLl9rZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0odGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWRbMF0pKX1fY2FuT3Blbigpe3ZhciB0O3JldHVybiF0aGlzLl9wYW5lbE9wZW4mJiF0aGlzLmRpc2FibGVkJiYobnVsbD09PSh0PXRoaXMub3B0aW9ucyl8fHZvaWQgMD09PXQ/dm9pZCAwOnQubGVuZ3RoKT4wfWZvY3VzKHQpe3RoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cyh0KX1fZ2V0UGFuZWxBcmlhTGFiZWxsZWRieSgpe3ZhciB0O2lmKHRoaXMuYXJpYUxhYmVsKXJldHVybiBudWxsO2NvbnN0IGU9bnVsbD09PSh0PXRoaXMuX3BhcmVudEZvcm1GaWVsZCl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuZ2V0TGFiZWxJZCgpO3JldHVybiB0aGlzLmFyaWFMYWJlbGxlZGJ5PyhlP2UrIiAiOiIiKSt0aGlzLmFyaWFMYWJlbGxlZGJ5OmV9X2dldEFyaWFBY3RpdmVEZXNjZW5kYW50KCl7cmV0dXJuIHRoaXMucGFuZWxPcGVuJiZ0aGlzLl9rZXlNYW5hZ2VyJiZ0aGlzLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0/dGhpcy5fa2V5TWFuYWdlci5hY3RpdmVJdGVtLmlkOm51bGx9X2dldFRyaWdnZXJBcmlhTGFiZWxsZWRieSgpe3ZhciB0O2lmKHRoaXMuYXJpYUxhYmVsKXJldHVybiBudWxsO2NvbnN0IGU9bnVsbD09PSh0PXRoaXMuX3BhcmVudEZvcm1GaWVsZCl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuZ2V0TGFiZWxJZCgpO2xldCBuPShlP2UrIiAiOiIiKSt0aGlzLl92YWx1ZUlkO3JldHVybiB0aGlzLmFyaWFMYWJlbGxlZGJ5JiYobis9IiAiK3RoaXMuYXJpYUxhYmVsbGVkYnkpLG59X3BhbmVsRG9uZUFuaW1hdGluZyh0KXt0aGlzLm9wZW5lZENoYW5nZS5lbWl0KHQpfXNldERlc2NyaWJlZEJ5SWRzKHQpe3RoaXMuX2FyaWFEZXNjcmliZWRieT10LmpvaW4oIiAiKX1vbkNvbnRhaW5lckNsaWNrKCl7dGhpcy5mb2N1cygpLHRoaXMub3BlbigpfWdldCBzaG91bGRMYWJlbEZsb2F0KCl7cmV0dXJuIHRoaXMuX3BhbmVsT3Blbnx8IXRoaXMuZW1wdHl8fHRoaXMuX2ZvY3VzZWQmJiEhdGhpcy5fcGxhY2Vob2xkZXJ9fWNXLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxjVykoTXUoUUgpLE11KEhoKSxNdSh0QyksTXUoZUgpLE11KGNoKSxNdShNeiw4KSxNdShCaiw4KSxNdShsVSw4KSxNdSh5Viw4KSxNdShuaiwxMCksT3IoInRhYmluZGV4IiksTXUoZVcpLE11KGF6KSxNdShuVyw4KSl9LGNXLsm1ZGlyPUpvKHt0eXBlOmNXLHZpZXdRdWVyeTpmdW5jdGlvbiB0KGUsbil7aWYoMSZlJiYoV2IoV1UsMSksV2IoR1UsMSksV2IoZUwsMSkpLDImZSl7bGV0IHQ7VWIodD1ZYigpKSYmKG4udHJpZ2dlcj10LmZpcnN0KSxVYih0PVliKCkpJiYobi5wYW5lbD10LmZpcnN0KSxVYih0PVliKCkpJiYobi5vdmVybGF5RGlyPXQuZmlyc3QpfX0saW5wdXRzOnthcmlhTGFiZWw6WyJhcmlhLWxhYmVsIiwiYXJpYUxhYmVsIl0saWQ6ImlkIixwbGFjZWhvbGRlcjoicGxhY2Vob2xkZXIiLHJlcXVpcmVkOiJyZXF1aXJlZCIsbXVsdGlwbGU6Im11bHRpcGxlIixkaXNhYmxlT3B0aW9uQ2VudGVyaW5nOiJkaXNhYmxlT3B0aW9uQ2VudGVyaW5nIixjb21wYXJlV2l0aDoiY29tcGFyZVdpdGgiLHZhbHVlOiJ2YWx1ZSIsdHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbDoidHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCIscGFuZWxDbGFzczoicGFuZWxDbGFzcyIsYXJpYUxhYmVsbGVkYnk6WyJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhTGFiZWxsZWRieSJdLGVycm9yU3RhdGVNYXRjaGVyOiJlcnJvclN0YXRlTWF0Y2hlciIsc29ydENvbXBhcmF0b3I6InNvcnRDb21wYXJhdG9yIn0sb3V0cHV0czp7b3BlbmVkQ2hhbmdlOiJvcGVuZWRDaGFuZ2UiLF9vcGVuZWRTdHJlYW06Im9wZW5lZCIsX2Nsb3NlZFN0cmVhbToiY2xvc2VkIixzZWxlY3Rpb25DaGFuZ2U6InNlbGVjdGlvbkNoYW5nZSIsdmFsdWVDaGFuZ2U6InZhbHVlQ2hhbmdlIn0sZmVhdHVyZXM6W2dtLFNpXX0pLGNXLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6UUh9LHt0eXBlOkhofSx7dHlwZTp0Q30se3R5cGU6ZUh9LHt0eXBlOmNofSx7dHlwZTpNeixkZWNvcmF0b3JzOlt7dHlwZTpfc31dfSx7dHlwZTpCaixkZWNvcmF0b3JzOlt7dHlwZTpfc31dfSx7dHlwZTpsVSxkZWNvcmF0b3JzOlt7dHlwZTpfc31dfSx7dHlwZTpfVixkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbeVZdfV19LHt0eXBlOm5qLGRlY29yYXRvcnM6W3t0eXBlOkNzfSx7dHlwZTpfc31dfSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6UnIsYXJnczpbInRhYmluZGV4Il19XX0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W2VXXX1dfSx7dHlwZTphen0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltuV119XX1dLGNXLnByb3BEZWNvcmF0b3JzPXt0cmlnZ2VyOlt7dHlwZTpGcixhcmdzOlsidHJpZ2dlciJdfV0scGFuZWw6W3t0eXBlOkZyLGFyZ3M6WyJwYW5lbCJdfV0sb3ZlcmxheURpcjpbe3R5cGU6RnIsYXJnczpbZUxdfV0scGFuZWxDbGFzczpbe3R5cGU6eV99XSxwbGFjZWhvbGRlcjpbe3R5cGU6eV99XSxyZXF1aXJlZDpbe3R5cGU6eV99XSxtdWx0aXBsZTpbe3R5cGU6eV99XSxkaXNhYmxlT3B0aW9uQ2VudGVyaW5nOlt7dHlwZTp5X31dLGNvbXBhcmVXaXRoOlt7dHlwZTp5X31dLHZhbHVlOlt7dHlwZTp5X31dLGFyaWFMYWJlbDpbe3R5cGU6eV8sYXJnczpbImFyaWEtbGFiZWwiXX1dLGFyaWFMYWJlbGxlZGJ5Olt7dHlwZTp5XyxhcmdzOlsiYXJpYS1sYWJlbGxlZGJ5Il19XSxlcnJvclN0YXRlTWF0Y2hlcjpbe3R5cGU6eV99XSx0eXBlYWhlYWREZWJvdW5jZUludGVydmFsOlt7dHlwZTp5X31dLHNvcnRDb21wYXJhdG9yOlt7dHlwZTp5X31dLGlkOlt7dHlwZTp5X31dLG9wZW5lZENoYW5nZTpbe3R5cGU6X199XSxfb3BlbmVkU3RyZWFtOlt7dHlwZTpfXyxhcmdzOlsib3BlbmVkIl19XSxfY2xvc2VkU3RyZWFtOlt7dHlwZTpfXyxhcmdzOlsiY2xvc2VkIl19XSxzZWxlY3Rpb25DaGFuZ2U6W3t0eXBlOl9ffV0sdmFsdWVDaGFuZ2U6W3t0eXBlOl9ffV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoY1csW3t0eXBlOmdffV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOlFIfSx7dHlwZTpIaH0se3R5cGU6dEN9LHt0eXBlOmVIfSx7dHlwZTpjaH0se3R5cGU6TXosZGVjb3JhdG9yczpbe3R5cGU6X3N9XX0se3R5cGU6QmosZGVjb3JhdG9yczpbe3R5cGU6X3N9XX0se3R5cGU6bFUsZGVjb3JhdG9yczpbe3R5cGU6X3N9XX0se3R5cGU6X1YsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W3lWXX1dfSx7dHlwZTpuaixkZWNvcmF0b3JzOlt7dHlwZTpDc30se3R5cGU6X3N9XX0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOlJyLGFyZ3M6WyJ0YWJpbmRleCJdfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltlV119XX0se3R5cGU6YXp9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbblddfV19XX0pLHthcmlhTGFiZWw6W3t0eXBlOnlfLGFyZ3M6WyJhcmlhLWxhYmVsIl19XSxvcGVuZWRDaGFuZ2U6W3t0eXBlOl9ffV0sX29wZW5lZFN0cmVhbTpbe3R5cGU6X18sYXJnczpbIm9wZW5lZCJdfV0sX2Nsb3NlZFN0cmVhbTpbe3R5cGU6X18sYXJnczpbImNsb3NlZCJdfV0sc2VsZWN0aW9uQ2hhbmdlOlt7dHlwZTpfX31dLHZhbHVlQ2hhbmdlOlt7dHlwZTpfX31dLGlkOlt7dHlwZTp5X31dLHBsYWNlaG9sZGVyOlt7dHlwZTp5X31dLHJlcXVpcmVkOlt7dHlwZTp5X31dLG11bHRpcGxlOlt7dHlwZTp5X31dLGRpc2FibGVPcHRpb25DZW50ZXJpbmc6W3t0eXBlOnlffV0sY29tcGFyZVdpdGg6W3t0eXBlOnlffV0sdmFsdWU6W3t0eXBlOnlffV0sdHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbDpbe3R5cGU6eV99XSx0cmlnZ2VyOlt7dHlwZTpGcixhcmdzOlsidHJpZ2dlciJdfV0scGFuZWw6W3t0eXBlOkZyLGFyZ3M6WyJwYW5lbCJdfV0sb3ZlcmxheURpcjpbe3R5cGU6RnIsYXJnczpbZUxdfV0scGFuZWxDbGFzczpbe3R5cGU6eV99XSxhcmlhTGFiZWxsZWRieTpbe3R5cGU6eV8sYXJnczpbImFyaWEtbGFiZWxsZWRieSJdfV0sZXJyb3JTdGF0ZU1hdGNoZXI6W3t0eXBlOnlffV0sc29ydENvbXBhcmF0b3I6W3t0eXBlOnlffV19KTtjbGFzcyBkVyBleHRlbmRzIGNXe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9zY3JvbGxUb3A9MCx0aGlzLl90cmlnZ2VyRm9udFNpemU9MCx0aGlzLl90cmFuc2Zvcm1PcmlnaW49InRvcCIsdGhpcy5fb2Zmc2V0WT0wLHRoaXMuX3Bvc2l0aW9ucz1be29yaWdpblg6InN0YXJ0IixvcmlnaW5ZOiJ0b3AiLG92ZXJsYXlYOiJzdGFydCIsb3ZlcmxheVk6InRvcCJ9LHtvcmlnaW5YOiJzdGFydCIsb3JpZ2luWToiYm90dG9tIixvdmVybGF5WDoic3RhcnQiLG92ZXJsYXlZOiJib3R0b20ifV19X2NhbGN1bGF0ZU92ZXJsYXlTY3JvbGwodCxlLG4pe2NvbnN0IG89dGhpcy5fZ2V0SXRlbUhlaWdodCgpO3JldHVybiBNYXRoLm1pbihNYXRoLm1heCgwLG8qdC1lK28vMiksbil9bmdPbkluaXQoKXtzdXBlci5uZ09uSW5pdCgpLHRoaXMuX3ZpZXdwb3J0UnVsZXIuY2hhbmdlKCkucGlwZSh1bih0aGlzLl9kZXN0cm95KSkuc3Vic2NyaWJlKCgoKT0+e3RoaXMucGFuZWxPcGVuJiYodGhpcy5fdHJpZ2dlclJlY3Q9dGhpcy50cmlnZ2VyLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfSkpfW9wZW4oKXtzdXBlci5fY2FuT3BlbigpJiYoc3VwZXIub3BlbigpLHRoaXMuX3RyaWdnZXJSZWN0PXRoaXMudHJpZ2dlci5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHRoaXMuX3RyaWdnZXJGb250U2l6ZT1wYXJzZUludChnZXRDb21wdXRlZFN0eWxlKHRoaXMudHJpZ2dlci5uYXRpdmVFbGVtZW50KS5mb250U2l6ZXx8IjAiKSx0aGlzLl9jYWxjdWxhdGVPdmVybGF5UG9zaXRpb24oKSx0aGlzLl9uZ1pvbmUub25TdGFibGUucGlwZShOZSgxKSkuc3Vic2NyaWJlKCgoKT0+e3RoaXMuX3RyaWdnZXJGb250U2l6ZSYmdGhpcy5vdmVybGF5RGlyLm92ZXJsYXlSZWYmJnRoaXMub3ZlcmxheURpci5vdmVybGF5UmVmLm92ZXJsYXlFbGVtZW50JiYodGhpcy5vdmVybGF5RGlyLm92ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQuc3R5bGUuZm9udFNpemU9YCR7dGhpcy5fdHJpZ2dlckZvbnRTaXplfXB4YCl9KSkpfV9zY3JvbGxPcHRpb25JbnRvVmlldyh0KXtjb25zdCBlPXdIKHQsdGhpcy5vcHRpb25zLHRoaXMub3B0aW9uR3JvdXBzKSxuPXRoaXMuX2dldEl0ZW1IZWlnaHQoKTt0aGlzLnBhbmVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wPWtIKCh0K2UpKm4sbix0aGlzLnBhbmVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wLHRXKX1fcG9zaXRpb25pbmdTZXR0bGVkKCl7dGhpcy5fY2FsY3VsYXRlT3ZlcmxheU9mZnNldFgoKSx0aGlzLnBhbmVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wPXRoaXMuX3Njcm9sbFRvcH1fcGFuZWxEb25lQW5pbWF0aW5nKHQpe3RoaXMucGFuZWxPcGVuP3RoaXMuX3Njcm9sbFRvcD0wOih0aGlzLm92ZXJsYXlEaXIub2Zmc2V0WD0wLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKSxzdXBlci5fcGFuZWxEb25lQW5pbWF0aW5nKHQpfV9nZXRDaGFuZ2VFdmVudCh0KXtyZXR1cm4gbmV3IGFXKHRoaXMsdCl9X2NhbGN1bGF0ZU92ZXJsYXlPZmZzZXRYKCl7Y29uc3QgdD10aGlzLm92ZXJsYXlEaXIub3ZlcmxheVJlZi5vdmVybGF5RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxlPXRoaXMuX3ZpZXdwb3J0UnVsZXIuZ2V0Vmlld3BvcnRTaXplKCksbj10aGlzLl9pc1J0bCgpLG89dGhpcy5tdWx0aXBsZT81NjozMjtsZXQgaTtpZih0aGlzLm11bHRpcGxlKWk9NDA7ZWxzZSBpZih0aGlzLmRpc2FibGVPcHRpb25DZW50ZXJpbmcpaT0xNjtlbHNle2xldCB0PXRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGVkWzBdfHx0aGlzLm9wdGlvbnMuZmlyc3Q7aT10JiZ0Lmdyb3VwPzMyOjE2fW58fChpKj0tMSk7Y29uc3QgYT0wLSh0LmxlZnQraS0obj9vOjApKSxyPXQucmlnaHQraS1lLndpZHRoKyhuPzA6byk7YT4wP2krPWErODpyPjAmJihpLT1yKzgpLHRoaXMub3ZlcmxheURpci5vZmZzZXRYPU1hdGgucm91bmQoaSksdGhpcy5vdmVybGF5RGlyLm92ZXJsYXlSZWYudXBkYXRlUG9zaXRpb24oKX1fY2FsY3VsYXRlT3ZlcmxheU9mZnNldFkodCxlLG4pe2NvbnN0IG89dGhpcy5fZ2V0SXRlbUhlaWdodCgpLGk9KG8tdGhpcy5fdHJpZ2dlclJlY3QuaGVpZ2h0KS8yLGE9TWF0aC5mbG9vcih0Vy9vKTtsZXQgcjtyZXR1cm4gdGhpcy5kaXNhYmxlT3B0aW9uQ2VudGVyaW5nPzA6KHI9MD09PXRoaXMuX3Njcm9sbFRvcD90Km86dGhpcy5fc2Nyb2xsVG9wPT09bj8odC0odGhpcy5fZ2V0SXRlbUNvdW50KCktYSkpKm8rKG8tKHRoaXMuX2dldEl0ZW1Db3VudCgpKm8tdFcpJW8pOmUtby8yLE1hdGgucm91bmQoLTEqci1pKSl9X2NoZWNrT3ZlcmxheVdpdGhpblZpZXdwb3J0KHQpe2NvbnN0IGU9dGhpcy5fZ2V0SXRlbUhlaWdodCgpLG49dGhpcy5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNpemUoKSxvPXRoaXMuX3RyaWdnZXJSZWN0LnRvcC04LGk9bi5oZWlnaHQtdGhpcy5fdHJpZ2dlclJlY3QuYm90dG9tLTgsYT1NYXRoLmFicyh0aGlzLl9vZmZzZXRZKSxyPU1hdGgubWluKHRoaXMuX2dldEl0ZW1Db3VudCgpKmUsdFcpLWEtdGhpcy5fdHJpZ2dlclJlY3QuaGVpZ2h0O3I+aT90aGlzLl9hZGp1c3RQYW5lbFVwKHIsaSk6YT5vP3RoaXMuX2FkanVzdFBhbmVsRG93bihhLG8sdCk6dGhpcy5fdHJhbnNmb3JtT3JpZ2luPXRoaXMuX2dldE9yaWdpbkJhc2VkT25PcHRpb24oKX1fYWRqdXN0UGFuZWxVcCh0LGUpe2NvbnN0IG49TWF0aC5yb3VuZCh0LWUpO3RoaXMuX3Njcm9sbFRvcC09bix0aGlzLl9vZmZzZXRZLT1uLHRoaXMuX3RyYW5zZm9ybU9yaWdpbj10aGlzLl9nZXRPcmlnaW5CYXNlZE9uT3B0aW9uKCksdGhpcy5fc2Nyb2xsVG9wPD0wJiYodGhpcy5fc2Nyb2xsVG9wPTAsdGhpcy5fb2Zmc2V0WT0wLHRoaXMuX3RyYW5zZm9ybU9yaWdpbj0iNTAlIGJvdHRvbSAwcHgiKX1fYWRqdXN0UGFuZWxEb3duKHQsZSxuKXtjb25zdCBvPU1hdGgucm91bmQodC1lKTtpZih0aGlzLl9zY3JvbGxUb3ArPW8sdGhpcy5fb2Zmc2V0WSs9byx0aGlzLl90cmFuc2Zvcm1PcmlnaW49dGhpcy5fZ2V0T3JpZ2luQmFzZWRPbk9wdGlvbigpLHRoaXMuX3Njcm9sbFRvcD49bilyZXR1cm4gdGhpcy5fc2Nyb2xsVG9wPW4sdGhpcy5fb2Zmc2V0WT0wLHZvaWQodGhpcy5fdHJhbnNmb3JtT3JpZ2luPSI1MCUgdG9wIDBweCIpfV9jYWxjdWxhdGVPdmVybGF5UG9zaXRpb24oKXtjb25zdCB0PXRoaXMuX2dldEl0ZW1IZWlnaHQoKSxlPXRoaXMuX2dldEl0ZW1Db3VudCgpLG49TWF0aC5taW4oZSp0LHRXKSxvPWUqdC1uO2xldCBpO2k9dGhpcy5lbXB0eT8wOk1hdGgubWF4KHRoaXMub3B0aW9ucy50b0FycmF5KCkuaW5kZXhPZih0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZFswXSksMCksaSs9d0goaSx0aGlzLm9wdGlvbnMsdGhpcy5vcHRpb25Hcm91cHMpO2NvbnN0IGE9bi8yO3RoaXMuX3Njcm9sbFRvcD10aGlzLl9jYWxjdWxhdGVPdmVybGF5U2Nyb2xsKGksYSxvKSx0aGlzLl9vZmZzZXRZPXRoaXMuX2NhbGN1bGF0ZU92ZXJsYXlPZmZzZXRZKGksYSxvKSx0aGlzLl9jaGVja092ZXJsYXlXaXRoaW5WaWV3cG9ydChvKX1fZ2V0T3JpZ2luQmFzZWRPbk9wdGlvbigpe2NvbnN0IHQ9dGhpcy5fZ2V0SXRlbUhlaWdodCgpLGU9KHQtdGhpcy5fdHJpZ2dlclJlY3QuaGVpZ2h0KS8yO3JldHVybmA1MCUgJHtNYXRoLmFicyh0aGlzLl9vZmZzZXRZKS1lK3QvMn1weCAwcHhgfV9nZXRJdGVtSGVpZ2h0KCl7cmV0dXJuIDMqdGhpcy5fdHJpZ2dlckZvbnRTaXplfV9nZXRJdGVtQ291bnQoKXtyZXR1cm4gdGhpcy5vcHRpb25zLmxlbmd0aCt0aGlzLm9wdGlvbkdyb3Vwcy5sZW5ndGh9fWRXLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIHBXKGV8fGRXKX0sZFcuybVjbXA9VW8oe3R5cGU6ZFcsc2VsZWN0b3JzOltbIm1hdC1zZWxlY3QiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24gdChlLG4sbyl7aWYoMSZlJiYoR2IobyxzVywxKSxHYihvLFBILDEpLEdiKG8sX0gsMSkpLDImZSl7bGV0IHQ7VWIodD1ZYigpKSYmKG4uY3VzdG9tVHJpZ2dlcj10LmZpcnN0KSxVYih0PVliKCkpJiYobi5vcHRpb25zPXQpLFViKHQ9WWIoKSkmJihuLm9wdGlvbkdyb3Vwcz10KX19LGhvc3RBdHRyczpbInJvbGUiLCJjb21ib2JveCIsImFyaWEtYXV0b2NvbXBsZXRlIiwibm9uZSIsImFyaWEtaGFzcG9wdXAiLCJ0cnVlIiwxLCJtYXQtc2VsZWN0Il0saG9zdFZhcnM6MjAsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJk51KCJrZXlkb3duIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5faGFuZGxlS2V5ZG93bihlKX0pKSgiZm9jdXMiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uX29uRm9jdXMoKX0pKSgiYmx1ciIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5fb25CbHVyKCl9KSksMiZlJiYoTm0oImlkIixuLmlkKSgidGFiaW5kZXgiLG4udGFiSW5kZXgpKCJhcmlhLWNvbnRyb2xzIixuLnBhbmVsT3Blbj9uLmlkKyItcGFuZWwiOm51bGwpKCJhcmlhLWV4cGFuZGVkIixuLnBhbmVsT3BlbikoImFyaWEtbGFiZWwiLG4uYXJpYUxhYmVsfHxudWxsKSgiYXJpYS1yZXF1aXJlZCIsbi5yZXF1aXJlZC50b1N0cmluZygpKSgiYXJpYS1kaXNhYmxlZCIsbi5kaXNhYmxlZC50b1N0cmluZygpKSgiYXJpYS1pbnZhbGlkIixuLmVycm9yU3RhdGUpKCJhcmlhLWRlc2NyaWJlZGJ5IixuLl9hcmlhRGVzY3JpYmVkYnl8fG51bGwpKCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnQiLG4uX2dldEFyaWFBY3RpdmVEZXNjZW5kYW50KCkpLGFmKCJtYXQtc2VsZWN0LWRpc2FibGVkIixuLmRpc2FibGVkKSgibWF0LXNlbGVjdC1pbnZhbGlkIixuLmVycm9yU3RhdGUpKCJtYXQtc2VsZWN0LXJlcXVpcmVkIixuLnJlcXVpcmVkKSgibWF0LXNlbGVjdC1lbXB0eSIsbi5lbXB0eSkoIm1hdC1zZWxlY3QtbXVsdGlwbGUiLG4ubXVsdGlwbGUpKX0saW5wdXRzOntkaXNhYmxlZDoiZGlzYWJsZWQiLGRpc2FibGVSaXBwbGU6ImRpc2FibGVSaXBwbGUiLHRhYkluZGV4OiJ0YWJJbmRleCJ9LGV4cG9ydEFzOlsibWF0U2VsZWN0Il0sZmVhdHVyZXM6W2loKFt7cHJvdmlkZTppVix1c2VFeGlzdGluZzpkV30se3Byb3ZpZGU6Z0gsdXNlRXhpc3Rpbmc6ZFd9XSksZ21dLG5nQ29udGVudFNlbGVjdG9yczpbIm1hdC1zZWxlY3QtdHJpZ2dlciIsIioiXSxkZWNsczo5LHZhcnM6MTIsY29uc3RzOltbImNkay1vdmVybGF5LW9yaWdpbiIsIiIsMSwibWF0LXNlbGVjdC10cmlnZ2VyIiwzLCJjbGljayJdLFsib3JpZ2luIiwiY2RrT3ZlcmxheU9yaWdpbiIsInRyaWdnZXIiLCIiXSxbMSwibWF0LXNlbGVjdC12YWx1ZSIsMywibmdTd2l0Y2giXSxbImNsYXNzIiwibWF0LXNlbGVjdC1wbGFjZWhvbGRlciBtYXQtc2VsZWN0LW1pbi1saW5lIiw0LCJuZ1N3aXRjaENhc2UiXSxbImNsYXNzIiwibWF0LXNlbGVjdC12YWx1ZS10ZXh0IiwzLCJuZ1N3aXRjaCIsNCwibmdTd2l0Y2hDYXNlIl0sWzEsIm1hdC1zZWxlY3QtYXJyb3ctd3JhcHBlciJdLFsxLCJtYXQtc2VsZWN0LWFycm93Il0sWyJjZGstY29ubmVjdGVkLW92ZXJsYXkiLCIiLCJjZGtDb25uZWN0ZWRPdmVybGF5TG9ja1Bvc2l0aW9uIiwiIiwiY2RrQ29ubmVjdGVkT3ZlcmxheUhhc0JhY2tkcm9wIiwiIiwiY2RrQ29ubmVjdGVkT3ZlcmxheUJhY2tkcm9wQ2xhc3MiLCJjZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcCIsMywiY2RrQ29ubmVjdGVkT3ZlcmxheVBhbmVsQ2xhc3MiLCJjZGtDb25uZWN0ZWRPdmVybGF5U2Nyb2xsU3RyYXRlZ3kiLCJjZGtDb25uZWN0ZWRPdmVybGF5T3JpZ2luIiwiY2RrQ29ubmVjdGVkT3ZlcmxheU9wZW4iLCJjZGtDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25zIiwiY2RrQ29ubmVjdGVkT3ZlcmxheU1pbldpZHRoIiwiY2RrQ29ubmVjdGVkT3ZlcmxheU9mZnNldFkiLCJiYWNrZHJvcENsaWNrIiwiYXR0YWNoIiwiZGV0YWNoIl0sWzEsIm1hdC1zZWxlY3QtcGxhY2Vob2xkZXIiLCJtYXQtc2VsZWN0LW1pbi1saW5lIl0sWzEsIm1hdC1zZWxlY3QtdmFsdWUtdGV4dCIsMywibmdTd2l0Y2giXSxbImNsYXNzIiwibWF0LXNlbGVjdC1taW4tbGluZSIsNCwibmdTd2l0Y2hEZWZhdWx0Il0sWzQsIm5nU3dpdGNoQ2FzZSJdLFsxLCJtYXQtc2VsZWN0LW1pbi1saW5lIl0sWzEsIm1hdC1zZWxlY3QtcGFuZWwtd3JhcCJdLFsicm9sZSIsImxpc3Rib3giLCJ0YWJpbmRleCIsIi0xIiwzLCJuZ0NsYXNzIiwia2V5ZG93biJdLFsicGFuZWwiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pe2lmKDEmZSYmKFZ1KEpVKSxPdSgwLCJkaXYiLDAsMSksTnUoImNsaWNrIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLnRvZ2dsZSgpfSkpLE91KDMsImRpdiIsMiksV20oNCxZVSwyLDEsInNwYW4iLDMpLFdtKDUsWFUsMywyLCJzcGFuIiw0KSxQdSgpLE91KDYsImRpdiIsNSksd3UoNywiZGl2Iiw2KSxQdSgpLFB1KCksV20oOCxLVSw0LDE0LCJuZy10ZW1wbGF0ZSIsNyksTnUoImJhY2tkcm9wQ2xpY2siLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uY2xvc2UoKX0pKSgiYXR0YWNoIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLl9vbkF0dGFjaGVkKCl9KSkoImRldGFjaCIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5jbG9zZSgpfSkpKSwyJmUpe2NvbnN0IHQ9R20oMSk7Tm0oImFyaWEtb3ducyIsbi5wYW5lbE9wZW4/bi5pZCsiLXBhbmVsIjpudWxsKSxKYygzKSx2dSgibmdTd2l0Y2giLG4uZW1wdHkpLE5tKCJpZCIsbi5fdmFsdWVJZCksSmMoMSksdnUoIm5nU3dpdGNoQ2FzZSIsITApLEpjKDEpLHZ1KCJuZ1N3aXRjaENhc2UiLCExKSxKYygzKSx2dSgiY2RrQ29ubmVjdGVkT3ZlcmxheVBhbmVsQ2xhc3MiLG4uX292ZXJsYXlQYW5lbENsYXNzKSgiY2RrQ29ubmVjdGVkT3ZlcmxheVNjcm9sbFN0cmF0ZWd5IixuLl9zY3JvbGxTdHJhdGVneSkoImNka0Nvbm5lY3RlZE92ZXJsYXlPcmlnaW4iLHQpKCJjZGtDb25uZWN0ZWRPdmVybGF5T3BlbiIsbi5wYW5lbE9wZW4pKCJjZGtDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25zIixuLl9wb3NpdGlvbnMpKCJjZGtDb25uZWN0ZWRPdmVybGF5TWluV2lkdGgiLG51bGw9PW4uX3RyaWdnZXJSZWN0P251bGw6bi5fdHJpZ2dlclJlY3Qud2lkdGgpKCJjZGtDb25uZWN0ZWRPdmVybGF5T2Zmc2V0WSIsbi5fb2Zmc2V0WSl9fSxkaXJlY3RpdmVzOlt0TCxjdixkdixlTCxwdix0dl0sc3R5bGVzOlsnLm1hdC1zZWxlY3R7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MTAwJTtvdXRsaW5lOm5vbmV9Lm1hdC1zZWxlY3QtdHJpZ2dlcntkaXNwbGF5OmlubGluZS10YWJsZTtjdXJzb3I6cG9pbnRlcjtwb3NpdGlvbjpyZWxhdGl2ZTtib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1zZWxlY3QtZGlzYWJsZWQgLm1hdC1zZWxlY3QtdHJpZ2dlcnstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1zZWxlY3QtdmFsdWV7ZGlzcGxheTp0YWJsZS1jZWxsO21heC13aWR0aDowO3dpZHRoOjEwMCU7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwfS5tYXQtc2VsZWN0LXZhbHVlLXRleHR7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS5tYXQtc2VsZWN0LWFycm93LXdyYXBwZXJ7ZGlzcGxheTp0YWJsZS1jZWxsO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtc2VsZWN0LWFycm93LXdyYXBwZXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LXNlbGVjdC1hcnJvdy13cmFwcGVye3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0yNSUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkLm1hdC1mb3JtLWZpZWxkLWhhcy1sYWJlbCAubWF0LXNlbGVjdDpub3QoLm1hdC1zZWxlY3QtZW1wdHkpIC5tYXQtc2VsZWN0LWFycm93LXdyYXBwZXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1zZWxlY3QubWF0LXNlbGVjdC1lbXB0eSAubWF0LXNlbGVjdC1hcnJvdy13cmFwcGVye3RyYW5zaXRpb246dHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtc2VsZWN0Lm1hdC1zZWxlY3QtZW1wdHkgLm1hdC1zZWxlY3QtYXJyb3ctd3JhcHBlcnt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1zZWxlY3QtYXJyb3d7d2lkdGg6MDtoZWlnaHQ6MDtib3JkZXItbGVmdDo1cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0OjVweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItdG9wOjVweCBzb2xpZDttYXJnaW46MCA0cHh9Lm1hdC1zZWxlY3QtcGFuZWwtd3JhcHtmbGV4LWJhc2lzOjEwMCV9Lm1hdC1zZWxlY3QtcGFuZWx7bWluLXdpZHRoOjExMnB4O21heC13aWR0aDoyODBweDtvdmVyZmxvdzphdXRvOy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNoO3BhZGRpbmctdG9wOjA7cGFkZGluZy1ib3R0b206MDttYXgtaGVpZ2h0OjI1NnB4O21pbi13aWR0aDoxMDAlO2JvcmRlci1yYWRpdXM6NHB4O291dGxpbmU6MH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc2VsZWN0LXBhbmVse291dGxpbmU6c29saWQgMXB4fS5tYXQtc2VsZWN0LXBhbmVsIC5tYXQtb3B0Z3JvdXAtbGFiZWwsLm1hdC1zZWxlY3QtcGFuZWwgLm1hdC1vcHRpb257Zm9udC1zaXplOmluaGVyaXQ7bGluZS1oZWlnaHQ6M2VtO2hlaWdodDozZW19Lm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LXNlbGVjdDpub3QoLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkKSAubWF0LWZvcm0tZmllbGQtZmxleHtjdXJzb3I6cG9pbnRlcn0ubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtc2VsZWN0IC5tYXQtZm9ybS1maWVsZC1sYWJlbHt3aWR0aDpjYWxjKDEwMCUgLSAxOHB4KX0ubWF0LXNlbGVjdC1wbGFjZWhvbGRlcnt0cmFuc2l0aW9uOmNvbG9yIDQwMG1zIDEzMy4zMzMzMzMzMzMzbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtc2VsZWN0LXBsYWNlaG9sZGVye3RyYW5zaXRpb246bm9uZX0ubWF0LWZvcm0tZmllbGQtaGlkZS1wbGFjZWhvbGRlciAubWF0LXNlbGVjdC1wbGFjZWhvbGRlcntjb2xvcjp0cmFuc3BhcmVudDstd2Via2l0LXRleHQtZmlsbC1jb2xvcjp0cmFuc3BhcmVudDt0cmFuc2l0aW9uOm5vbmU7ZGlzcGxheTpibG9ja30ubWF0LXNlbGVjdC1taW4tbGluZTplbXB0eTo6YmVmb3Jle2NvbnRlbnQ6IiAiO3doaXRlLXNwYWNlOnByZTt3aWR0aDoxcHh9XG4nXSxlbmNhcHN1bGF0aW9uOjIsZGF0YTp7YW5pbWF0aW9uOltRVS50cmFuc2Zvcm1QYW5lbFdyYXAsUVUudHJhbnNmb3JtUGFuZWxdfSxjaGFuZ2VEZXRlY3Rpb246MH0pLGRXLnByb3BEZWNvcmF0b3JzPXtvcHRpb25zOlt7dHlwZTp6cixhcmdzOltQSCx7ZGVzY2VuZGFudHM6ITB9XX1dLG9wdGlvbkdyb3Vwczpbe3R5cGU6enIsYXJnczpbX0gse2Rlc2NlbmRhbnRzOiEwfV19XSxjdXN0b21UcmlnZ2VyOlt7dHlwZTpIcixhcmdzOltzV119XX07Y29uc3QgcFc9dnIoZFcpOygidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoZFcsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoibWF0LXNlbGVjdCIsZXhwb3J0QXM6Im1hdFNlbGVjdCIsdGVtcGxhdGU6J1x4M2MhLS1cbiBOb3RlIHRoYXQgdGhlIHNlbGVjdCB0cmlnZ2VyIGVsZW1lbnQgc3BlY2lmaWVzIGBhcmlhLW93bnNgIHBvaW50aW5nIHRvIHRoZSBsaXN0Ym94IG92ZXJsYXkuXG4gV2hpbGUgYXJpYS1vd25zIGlzIG5vdCByZXF1aXJlZCBmb3IgdGhlIEFSSUEgMS4yIGByb2xlPSJjb21ib2JveCJgIGludGVyYWN0aW9uIHBhdHRlcm4sXG4gaXQgZml4ZXMgYW4gaXNzdWUgd2l0aCBWb2ljZU92ZXIgd2hlbiB0aGUgc2VsZWN0IGFwcGVhcnMgaW5zaWRlIG9mIGFuIGBhcmlhLW1vZGVsPSJ0cnVlImBcbiBlbGVtZW50IChlLmcuIGEgZGlhbG9nKS4gV2l0aG91dCB0aGlzIGBhcmlhLW93bnNgLCB0aGUgYGFyaWEtbW9kYWxgIG9uIGEgZGlhbG9nIHByZXZlbnRzXG4gVm9pY2VPdmVyIGZyb20gInNlZWluZyIgdGhlIHNlbGVjdFwncyBsaXN0Ym94IG92ZXJsYXkgZm9yIGFyaWEtYWN0aXZlZGVzY2VuZGFudC5cbiBVc2luZyBgYXJpYS1vd25zYCByZS1wYXJlbnRzIHRoZSBzZWxlY3Qgb3ZlcmxheSBzbyB0aGF0IGl0IHdvcmtzIGFnYWluLlxuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9jb21wb25lbnRzL2lzc3Vlcy8yMDY5NFxuLS1ceDNlXG48ZGl2IGNkay1vdmVybGF5LW9yaWdpblxuICAgICBbYXR0ci5hcmlhLW93bnNdPSJwYW5lbE9wZW4gPyBpZCArIFwnLXBhbmVsXCcgOiBudWxsIlxuICAgICBjbGFzcz0ibWF0LXNlbGVjdC10cmlnZ2VyIlxuICAgICAoY2xpY2spPSJ0b2dnbGUoKSJcbiAgICAgI29yaWdpbj0iY2RrT3ZlcmxheU9yaWdpbiJcbiAgICAgI3RyaWdnZXI+XG4gIDxkaXYgY2xhc3M9Im1hdC1zZWxlY3QtdmFsdWUiIFtuZ1N3aXRjaF09ImVtcHR5IiBbYXR0ci5pZF09Il92YWx1ZUlkIj5cbiAgICA8c3BhbiBjbGFzcz0ibWF0LXNlbGVjdC1wbGFjZWhvbGRlciBtYXQtc2VsZWN0LW1pbi1saW5lIiAqbmdTd2l0Y2hDYXNlPSJ0cnVlIj57e3BsYWNlaG9sZGVyfX08L3NwYW4+XG4gICAgPHNwYW4gY2xhc3M9Im1hdC1zZWxlY3QtdmFsdWUtdGV4dCIgKm5nU3dpdGNoQ2FzZT0iZmFsc2UiIFtuZ1N3aXRjaF09IiEhY3VzdG9tVHJpZ2dlciI+XG4gICAgICA8c3BhbiBjbGFzcz0ibWF0LXNlbGVjdC1taW4tbGluZSIgKm5nU3dpdGNoRGVmYXVsdD57e3RyaWdnZXJWYWx1ZX19PC9zcGFuPlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PSJtYXQtc2VsZWN0LXRyaWdnZXIiICpuZ1N3aXRjaENhc2U9InRydWUiPjwvbmctY29udGVudD5cbiAgICA8L3NwYW4+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9Im1hdC1zZWxlY3QtYXJyb3ctd3JhcHBlciI+PGRpdiBjbGFzcz0ibWF0LXNlbGVjdC1hcnJvdyI+PC9kaXY+PC9kaXY+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlXG4gIGNkay1jb25uZWN0ZWQtb3ZlcmxheVxuICBjZGtDb25uZWN0ZWRPdmVybGF5TG9ja1Bvc2l0aW9uXG4gIGNka0Nvbm5lY3RlZE92ZXJsYXlIYXNCYWNrZHJvcFxuICBjZGtDb25uZWN0ZWRPdmVybGF5QmFja2Ryb3BDbGFzcz0iY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AiXG4gIFtjZGtDb25uZWN0ZWRPdmVybGF5UGFuZWxDbGFzc109Il9vdmVybGF5UGFuZWxDbGFzcyJcbiAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlTY3JvbGxTdHJhdGVneV09Il9zY3JvbGxTdHJhdGVneSJcbiAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlPcmlnaW5dPSJvcmlnaW4iXG4gIFtjZGtDb25uZWN0ZWRPdmVybGF5T3Blbl09InBhbmVsT3BlbiJcbiAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlQb3NpdGlvbnNdPSJfcG9zaXRpb25zIlxuICBbY2RrQ29ubmVjdGVkT3ZlcmxheU1pbldpZHRoXT0iX3RyaWdnZXJSZWN0Py53aWR0aCEiXG4gIFtjZGtDb25uZWN0ZWRPdmVybGF5T2Zmc2V0WV09Il9vZmZzZXRZIlxuICAoYmFja2Ryb3BDbGljayk9ImNsb3NlKCkiXG4gIChhdHRhY2gpPSJfb25BdHRhY2hlZCgpIlxuICAoZGV0YWNoKT0iY2xvc2UoKSI+XG4gIDxkaXYgY2xhc3M9Im1hdC1zZWxlY3QtcGFuZWwtd3JhcCIgW0B0cmFuc2Zvcm1QYW5lbFdyYXBdPlxuICAgIDxkaXZcbiAgICAgICNwYW5lbFxuICAgICAgcm9sZT0ibGlzdGJveCJcbiAgICAgIHRhYmluZGV4PSItMSJcbiAgICAgIGNsYXNzPSJtYXQtc2VsZWN0LXBhbmVsIHt7IF9nZXRQYW5lbFRoZW1lKCkgfX0iXG4gICAgICBbYXR0ci5pZF09ImlkICsgXCctcGFuZWxcJyJcbiAgICAgIFthdHRyLmFyaWEtbXVsdGlzZWxlY3RhYmxlXT0ibXVsdGlwbGUiXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT0iYXJpYUxhYmVsIHx8IG51bGwiXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPSJfZ2V0UGFuZWxBcmlhTGFiZWxsZWRieSgpIlxuICAgICAgW25nQ2xhc3NdPSJwYW5lbENsYXNzIlxuICAgICAgW0B0cmFuc2Zvcm1QYW5lbF09Im11bHRpcGxlID8gXCdzaG93aW5nLW11bHRpcGxlXCcgOiBcJ3Nob3dpbmdcJyJcbiAgICAgIChAdHJhbnNmb3JtUGFuZWwuZG9uZSk9Il9wYW5lbERvbmVBbmltYXRpbmdTdHJlYW0ubmV4dCgkZXZlbnQudG9TdGF0ZSkiXG4gICAgICBbc3R5bGUudHJhbnNmb3JtT3JpZ2luXT0iX3RyYW5zZm9ybU9yaWdpbiJcbiAgICAgIFtzdHlsZS5mb250LXNpemUucHhdPSJfdHJpZ2dlckZvbnRTaXplIlxuICAgICAgKGtleWRvd24pPSJfaGFuZGxlS2V5ZG93bigkZXZlbnQpIj5cbiAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuJyxpbnB1dHM6WyJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCJdLGVuY2Fwc3VsYXRpb246UG8uTm9uZSxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNoLGhvc3Q6e3JvbGU6ImNvbWJvYm94IiwiYXJpYS1hdXRvY29tcGxldGUiOiJub25lIiwiYXJpYS1oYXNwb3B1cCI6InRydWUiLGNsYXNzOiJtYXQtc2VsZWN0IiwiW2F0dHIuaWRdIjoiaWQiLCJbYXR0ci50YWJpbmRleF0iOiJ0YWJJbmRleCIsIlthdHRyLmFyaWEtY29udHJvbHNdIjoncGFuZWxPcGVuID8gaWQgKyAiLXBhbmVsIiA6IG51bGwnLCJbYXR0ci5hcmlhLWV4cGFuZGVkXSI6InBhbmVsT3BlbiIsIlthdHRyLmFyaWEtbGFiZWxdIjoiYXJpYUxhYmVsIHx8IG51bGwiLCJbYXR0ci5hcmlhLXJlcXVpcmVkXSI6InJlcXVpcmVkLnRvU3RyaW5nKCkiLCJbYXR0ci5hcmlhLWRpc2FibGVkXSI6ImRpc2FibGVkLnRvU3RyaW5nKCkiLCJbYXR0ci5hcmlhLWludmFsaWRdIjoiZXJyb3JTdGF0ZSIsIlthdHRyLmFyaWEtZGVzY3JpYmVkYnldIjoiX2FyaWFEZXNjcmliZWRieSB8fCBudWxsIiwiW2F0dHIuYXJpYS1hY3RpdmVkZXNjZW5kYW50XSI6Il9nZXRBcmlhQWN0aXZlRGVzY2VuZGFudCgpIiwiW2NsYXNzLm1hdC1zZWxlY3QtZGlzYWJsZWRdIjoiZGlzYWJsZWQiLCJbY2xhc3MubWF0LXNlbGVjdC1pbnZhbGlkXSI6ImVycm9yU3RhdGUiLCJbY2xhc3MubWF0LXNlbGVjdC1yZXF1aXJlZF0iOiJyZXF1aXJlZCIsIltjbGFzcy5tYXQtc2VsZWN0LWVtcHR5XSI6ImVtcHR5IiwiW2NsYXNzLm1hdC1zZWxlY3QtbXVsdGlwbGVdIjoibXVsdGlwbGUiLCIoa2V5ZG93bikiOiJfaGFuZGxlS2V5ZG93bigkZXZlbnQpIiwiKGZvY3VzKSI6Il9vbkZvY3VzKCkiLCIoYmx1cikiOiJfb25CbHVyKCkifSxhbmltYXRpb25zOltRVS50cmFuc2Zvcm1QYW5lbFdyYXAsUVUudHJhbnNmb3JtUGFuZWxdLHByb3ZpZGVyczpbe3Byb3ZpZGU6aVYsdXNlRXhpc3Rpbmc6ZFd9LHtwcm92aWRlOmdILHVzZUV4aXN0aW5nOmRXfV0sc3R5bGVzOlsnLm1hdC1zZWxlY3R7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MTAwJTtvdXRsaW5lOm5vbmV9Lm1hdC1zZWxlY3QtdHJpZ2dlcntkaXNwbGF5OmlubGluZS10YWJsZTtjdXJzb3I6cG9pbnRlcjtwb3NpdGlvbjpyZWxhdGl2ZTtib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1zZWxlY3QtZGlzYWJsZWQgLm1hdC1zZWxlY3QtdHJpZ2dlcnstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1zZWxlY3QtdmFsdWV7ZGlzcGxheTp0YWJsZS1jZWxsO21heC13aWR0aDowO3dpZHRoOjEwMCU7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwfS5tYXQtc2VsZWN0LXZhbHVlLXRleHR7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS5tYXQtc2VsZWN0LWFycm93LXdyYXBwZXJ7ZGlzcGxheTp0YWJsZS1jZWxsO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtc2VsZWN0LWFycm93LXdyYXBwZXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LXNlbGVjdC1hcnJvdy13cmFwcGVye3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0yNSUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkLm1hdC1mb3JtLWZpZWxkLWhhcy1sYWJlbCAubWF0LXNlbGVjdDpub3QoLm1hdC1zZWxlY3QtZW1wdHkpIC5tYXQtc2VsZWN0LWFycm93LXdyYXBwZXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1zZWxlY3QubWF0LXNlbGVjdC1lbXB0eSAubWF0LXNlbGVjdC1hcnJvdy13cmFwcGVye3RyYW5zaXRpb246dHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtc2VsZWN0Lm1hdC1zZWxlY3QtZW1wdHkgLm1hdC1zZWxlY3QtYXJyb3ctd3JhcHBlcnt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1zZWxlY3QtYXJyb3d7d2lkdGg6MDtoZWlnaHQ6MDtib3JkZXItbGVmdDo1cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0OjVweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItdG9wOjVweCBzb2xpZDttYXJnaW46MCA0cHh9Lm1hdC1zZWxlY3QtcGFuZWwtd3JhcHtmbGV4LWJhc2lzOjEwMCV9Lm1hdC1zZWxlY3QtcGFuZWx7bWluLXdpZHRoOjExMnB4O21heC13aWR0aDoyODBweDtvdmVyZmxvdzphdXRvOy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNoO3BhZGRpbmctdG9wOjA7cGFkZGluZy1ib3R0b206MDttYXgtaGVpZ2h0OjI1NnB4O21pbi13aWR0aDoxMDAlO2JvcmRlci1yYWRpdXM6NHB4O291dGxpbmU6MH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc2VsZWN0LXBhbmVse291dGxpbmU6c29saWQgMXB4fS5tYXQtc2VsZWN0LXBhbmVsIC5tYXQtb3B0Z3JvdXAtbGFiZWwsLm1hdC1zZWxlY3QtcGFuZWwgLm1hdC1vcHRpb257Zm9udC1zaXplOmluaGVyaXQ7bGluZS1oZWlnaHQ6M2VtO2hlaWdodDozZW19Lm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LXNlbGVjdDpub3QoLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkKSAubWF0LWZvcm0tZmllbGQtZmxleHtjdXJzb3I6cG9pbnRlcn0ubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtc2VsZWN0IC5tYXQtZm9ybS1maWVsZC1sYWJlbHt3aWR0aDpjYWxjKDEwMCUgLSAxOHB4KX0ubWF0LXNlbGVjdC1wbGFjZWhvbGRlcnt0cmFuc2l0aW9uOmNvbG9yIDQwMG1zIDEzMy4zMzMzMzMzMzMzbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtc2VsZWN0LXBsYWNlaG9sZGVye3RyYW5zaXRpb246bm9uZX0ubWF0LWZvcm0tZmllbGQtaGlkZS1wbGFjZWhvbGRlciAubWF0LXNlbGVjdC1wbGFjZWhvbGRlcntjb2xvcjp0cmFuc3BhcmVudDstd2Via2l0LXRleHQtZmlsbC1jb2xvcjp0cmFuc3BhcmVudDt0cmFuc2l0aW9uOm5vbmU7ZGlzcGxheTpibG9ja30ubWF0LXNlbGVjdC1taW4tbGluZTplbXB0eTo6YmVmb3Jle2NvbnRlbnQ6IiAiO3doaXRlLXNwYWNlOnByZTt3aWR0aDoxcHh9XG4nXX1dfV0sbnVsbCx7b3B0aW9uczpbe3R5cGU6enIsYXJnczpbUEgse2Rlc2NlbmRhbnRzOiEwfV19XSxvcHRpb25Hcm91cHM6W3t0eXBlOnpyLGFyZ3M6W19ILHtkZXNjZW5kYW50czohMH1dfV0sY3VzdG9tVHJpZ2dlcjpbe3R5cGU6SHIsYXJnczpbc1ddfV19KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIG1Xe31mdW5jdGlvbiB1Vyh0LGUpe2lmKDEmdCl7Y29uc3QgdD1FdSgpO091KDAsInNwYW4iLDUpLE51KCJjbGljayIsKGZ1bmN0aW9uIGUobil7cmEodCk7Y29uc3Qgbz1MdSgpLiRpbXBsaWNpdDtyZXR1cm4gTHUoKS5vbkFjdGl2ZVBsdWdpblNlbGVjdGlvbihuLG8uaWQpfSkpLE1mKDEpLFB1KCl9aWYoMiZ0KXtjb25zdCB0PUx1KCkuJGltcGxpY2l0O05tKCJkYXRhLXBsdWdpbi1pZCIsdC5pZCksSmMoMSkseGYoIiAiLHQudGFiX25hbWUsIiAiKX19ZnVuY3Rpb24gZlcodCxlKXsxJnQmJihPdSgwLCJtYXQtdGFiIiwzKSxXbSgxLHVXLDIsMiwibmctdGVtcGxhdGUiLDQpLFB1KCkpLDImdCYmdnUoImRpc2FibGVkIiwhZS4kaW1wbGljaXQuZW5hYmxlZCl9ZnVuY3Rpb24gZ1codCxlKXtpZigxJnQmJihPdSgwLCJtYXQtb3B0aW9uIiw5KSxNZigxKSxQdSgpKSwyJnQpe2NvbnN0IHQ9ZS4kaW1wbGljaXQ7dnUoInZhbHVlIix0LmlkKSxObSgiZGF0YS1wbHVnaW4taWQiLHQuaWQpLEpjKDEpLHhmKCIgIix0LnRhYl9uYW1lLCIgIil9fWZ1bmN0aW9uIGhXKHQsZSl7aWYoMSZ0KXtjb25zdCB0PUV1KCk7T3UoMCwibWF0LWZvcm0tZmllbGQiLDYpLE91KDEsIm1hdC1sYWJlbCIpLE1mKDIsIkluYWN0aXZlIiksUHUoKSxPdSgzLCJtYXQtc2VsZWN0Iiw3KSxOdSgic2VsZWN0aW9uQ2hhbmdlIiwoZnVuY3Rpb24gZShuKXtyZXR1cm4gcmEodCksTHUoKS5vbkRpc2FibGVkUGx1Z2luU2VsZWN0aW9uQ2hhbmdlZChuKX0pKSxXbSg0LGdXLDIsMywibWF0LW9wdGlvbiIsOCksUHUoKSxQdSgpfWlmKDImdCl7Y29uc3QgdD1MdSgpO0pjKDMpLHZ1KCJ2YWx1ZSIsdC5zZWxlY3RlZFBsdWdpbiksSmMoMSksdnUoIm5nRm9yT2YiLHQuZGlzYWJsZWRQbHVnaW5zKX19bVcuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fG1XKX0sbVcuybVtb2Q9Wm8oe3R5cGU6bVd9KSxtVy7JtWluaj1jbyh7cHJvdmlkZXJzOltvV10saW1wb3J0czpbW0J2LGlMLFNILFR6XSxvRixDVixTSCxUel19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKG1XLHtkZWNsYXJhdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm5bZFcsbFddfSxpbXBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW0J2LGlMLFNILFR6XX0sZXhwb3J0czpmdW5jdGlvbigpe3JldHVybltvRixDVixkVyxsVyxTSCxUel19fSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihtVyxbe3R5cGU6a18sYXJnczpbe2ltcG9ydHM6W0J2LGlMLFNILFR6XSxleHBvcnRzOltvRixDVixkVyxsVyxTSCxUel0sZGVjbGFyYXRpb25zOltkVyxsV10scHJvdmlkZXJzOltvV119XX1dLG51bGwsbnVsbCk7Y2xhc3MgYld7Y29uc3RydWN0b3IoKXt0aGlzLm9uUGx1Z2luU2VsZWN0aW9uQ2hhbmdlZD1uZXcgQWJ9Z2V0QWN0aXZlUGx1Z2luSW5kZXgoKXtyZXR1cm4gdGhpcy5hY3RpdmVQbHVnaW5zLmZpbmRJbmRleCgoKHtpZDp0fSk9PnQ9PT10aGlzLnNlbGVjdGVkUGx1Z2luKSl9b25BY3RpdmVQbHVnaW5TZWxlY3Rpb24odCxlKXt0LnN0b3BQcm9wYWdhdGlvbigpLHRoaXMub25QbHVnaW5TZWxlY3Rpb25DaGFuZ2VkLmVtaXQoZSl9b25EaXNhYmxlZFBsdWdpblNlbGVjdGlvbkNoYW5nZWQodCl7dGhpcy5vblBsdWdpblNlbGVjdGlvbkNoYW5nZWQuZW1pdCh0LnZhbHVlKX19YlcuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGJXKX0sYlcuybVjbXA9VW8oe3R5cGU6Ylcsc2VsZWN0b3JzOltbInBsdWdpbi1zZWxlY3Rvci1jb21wb25lbnQiXV0saW5wdXRzOnthY3RpdmVQbHVnaW5zOiJhY3RpdmVQbHVnaW5zIixkaXNhYmxlZFBsdWdpbnM6ImRpc2FibGVkUGx1Z2lucyIsc2VsZWN0ZWRQbHVnaW46InNlbGVjdGVkUGx1Z2luIn0sb3V0cHV0czp7b25QbHVnaW5TZWxlY3Rpb25DaGFuZ2VkOiJvblBsdWdpblNlbGVjdGlvbkNoYW5nZWQifSxkZWNsczozLHZhcnM6Myxjb25zdHM6W1siYW5pbWF0aW9uRHVyYXRpb24iLCIxMDBtcyIsMSwiYWN0aXZlLXBsdWdpbi1saXN0IiwzLCJzZWxlY3RlZEluZGV4Il0sWzMsImRpc2FibGVkIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImZsb2F0TGFiZWwiLCJuZXZlciIsNCwibmdJZiJdLFszLCJkaXNhYmxlZCJdLFsibWF0LXRhYi1sYWJlbCIsIiJdLFsxLCJwbHVnaW4tbmFtZSIsMywiY2xpY2siXSxbImZsb2F0TGFiZWwiLCJuZXZlciJdLFszLCJ2YWx1ZSIsInNlbGVjdGlvbkNoYW5nZSJdLFszLCJ2YWx1ZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsInZhbHVlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihPdSgwLCJtYXQtdGFiLWdyb3VwIiwwKSxXbSgxLGZXLDIsMSwibWF0LXRhYiIsMSksUHUoKSxXbSgyLGhXLDUsMiwibWF0LWZvcm0tZmllbGQiLDIpKSwyJmUmJih2dSgic2VsZWN0ZWRJbmRleCIsbi5nZXRBY3RpdmVQbHVnaW5JbmRleCgpKSxKYygxKSx2dSgibmdGb3JPZiIsbi5hY3RpdmVQbHVnaW5zKSxKYygxKSx2dSgibmdJZiIsbi5kaXNhYmxlZFBsdWdpbnMubGVuZ3RoPjApKX0sZGlyZWN0aXZlczpbUEIsb3YsYXYsZ0IscEIsX1YsY1YsZFcsUEhdLHN0eWxlczpbJy5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHh9Lm1hdC1oMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaGVhZGxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTVweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZ1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjA1ZW07bWFyZ2luOjAgMCA1NnB4fS5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAwNWVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXJhaXNlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdHJva2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmxhdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZhYltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbWluaS1mYWJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4fS5tYXQtY2FyZC1zdWJ0aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGVja2JveC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvb3Rlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgdHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIzZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LjU0MTY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2NjY2NjY3ZW0pfUBtZWRpYSBwcmludHsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjJlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouMjVlbSAwIC43NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxZW0gMCAxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMiksIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi0wLjA2MjVlbX0ubWF0LW1lbnUtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci12ZXJ0aWNhbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGFiLWxpbmtbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MH0ubWF0LXRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5Om5vbmV9LmNkay12aXN1YWxseS1oaWRkZW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjZ9LmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV0sIC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3hbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2tbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHt9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7fS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOi13ZWJraXQtYXV0b2ZpbGwpe2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZVtfbmdjb250ZW50LSVDT01QJV17cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fS5tYXQtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfVtfbmdob3N0LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4OjEgMSBhdXRvO2ZvbnQtc2l6ZToxNHB4O2hlaWdodDoxMDAlO292ZXJmbG93OmhpZGRlbn1tYXQtZm9ybS1maWVsZFtfbmdjb250ZW50LSVDT01QJV17ZmxleDowIDA7bWFyZ2luLXRvcDo1cHg7d2lkdGg6MTMwcHh9bWF0LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgbWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV0sIG1hdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjUwMDt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9LmFjdGl2ZS1wbHVnaW4tbGlzdFtfbmdjb250ZW50LSVDT01QJV17YWxpZ24tc2VsZjpzdHJldGNoO2ZsZXg6MSAxIGF1dG87b3ZlcmZsb3c6aGlkZGVufS5wbHVnaW4tbmFtZVtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6aW5saW5lLWZsZXg7aGVpZ2h0OjEwMCU7anVzdGlmeS1jb250ZW50OmNlbnRlcjtwYWRkaW5nOjAgMTJweDt3aWR0aDoxMDAlfVtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QubWF0LXByaW1hcnkgLm1hdC10YWItbGlzdCAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3J9W19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCAubWF0LXRhYi1sYWJlbCwgW19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCAubWF0LXRhYi1saW5re2NvbG9yOmluaGVyaXQ7b3BhY2l0eTouN31bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IC5tYXQtdGFiLWxhYmVsLm1hdC10YWItbGFiZWwtYWN0aXZlLCBbX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IC5tYXQtdGFiLWxpbmsubWF0LXRhYi1sYWJlbC1hY3RpdmV7b3BhY2l0eToxfVtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6Y3VycmVudENvbG9yfVtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWR7dmlzaWJpbGl0eTpoaWRkZW59W19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCAubWF0LXRhYi1kaXNhYmxlZHtkaXNwbGF5Om5vbmV9W19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCAubWF0LXRhYi1oZWFkZXIsIFtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgLm1hdC10YWItbGFiZWxzLCBbX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IC5tYXQtdGFiLWxhYmVse2hlaWdodDoxMDAlfVtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgLm1hdC10YWItbGFiZWx7bWluLXdpZHRoOjQ4cHg7cGFkZGluZzowO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX1bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IC5tYXQtdGFiLWxhYmVsLWNvbnRlbnR7aGVpZ2h0OjEwMCV9W19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCBtYXQtdGFiLWhlYWRlciAubWF0LXRhYi1saXN0e3BhZGRpbmc6MCAzNnB4fVtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgbWF0LXRhYi1oZWFkZXI+OmZpcnN0LWNoaWxkLCBbX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IG1hdC10YWItaGVhZGVyPi5tYXQtdGFiLWxhYmVsLWNvbnRhaW5lciwgW19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCBtYXQtdGFiLWhlYWRlcj46bGFzdC1jaGlsZHtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MH1bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IG1hdC10YWItaGVhZGVyPjpmaXJzdC1jaGlsZCwgW19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCBtYXQtdGFiLWhlYWRlcj4ubWF0LXRhYi1sYWJlbC1jb250YWluZXJ7bGVmdDowfVtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgbWF0LXRhYi1oZWFkZXI+Omxhc3QtY2hpbGQsIFtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgbWF0LXRhYi1oZWFkZXI+Lm1hdC10YWItbGFiZWwtY29udGFpbmVye3JpZ2h0OjB9W19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCBtYXQtdGFiLWhlYWRlcj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbntiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IG1hdC10YWItaGVhZGVyPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9ue2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH0nXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoYlcsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoicGx1Z2luLXNlbGVjdG9yLWNvbXBvbmVudCIsdGVtcGxhdGVVcmw6Ii4vcGx1Z2luX3NlbGVjdG9yX2NvbXBvbmVudC5uZy5odG1sIixzdHlsZVVybHM6WyIuL3BsdWdpbl9zZWxlY3Rvcl9jb21wb25lbnQuY3NzIl19XX1dLG51bGwse2FjdGl2ZVBsdWdpbnM6W3t0eXBlOnlffV0sZGlzYWJsZWRQbHVnaW5zOlt7dHlwZTp5X31dLHNlbGVjdGVkUGx1Z2luOlt7dHlwZTp5X31dLG9uUGx1Z2luU2VsZWN0aW9uQ2hhbmdlZDpbe3R5cGU6X199XX0pO2NvbnN0IHlXPXprKHBBLCh0PT5PYmplY3Qua2V5cyh0KS5tYXAoKGU9Pk9iamVjdC5hc3NpZ24oe30se2lkOmV9LHRbZV0pKSkpKSxfVz16ayh5VywodD0+dC5maWx0ZXIoKHQ9PiF0LmVuYWJsZWQpKSkpO2NsYXNzIENXe2NvbnN0cnVjdG9yKHQpe3RoaXMuc3RvcmU9dCx0aGlzLmFjdGl2ZVBsdWdpbiQ9dGhpcy5zdG9yZS5waXBlKFJrKGRBKSksdGhpcy5wbHVnaW5zJD10aGlzLnN0b3JlLnBpcGUoUmsoeVcpKSx0aGlzLmRpc2FibGVkUGx1Z2lucyQ9dGhpcy5zdG9yZS5waXBlKFJrKF9XKSl9b25QbHVnaW5TZWxlY3Rpb25DaGFuZ2UodCl7dGhpcy5zdG9yZS5kaXNwYXRjaChWRSh7cGx1Z2luOnR9KSl9fWZ1bmN0aW9uIE1XKHQsZSl7fUNXLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxDVykoTXUoRWspKX0sQ1cuybVjbXA9VW8oe3R5cGU6Q1csc2VsZWN0b3JzOltbInBsdWdpbi1zZWxlY3RvciJdXSxkZWNsczo0LHZhcnM6OSxjb25zdHM6W1szLCJhY3RpdmVQbHVnaW5zIiwiZGlzYWJsZWRQbHVnaW5zIiwic2VsZWN0ZWRQbHVnaW4iLCJvblBsdWdpblNlbGVjdGlvbkNoYW5nZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKE91KDAsInBsdWdpbi1zZWxlY3Rvci1jb21wb25lbnQiLDApLE51KCJvblBsdWdpblNlbGVjdGlvbkNoYW5nZWQiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLm9uUGx1Z2luU2VsZWN0aW9uQ2hhbmdlKGUpfSkpLE9iKDEsImFzeW5jIiksT2IoMiwiYXN5bmMiKSxPYigzLCJhc3luYyIpLFB1KCkpLDImZSYmdnUoImFjdGl2ZVBsdWdpbnMiLFBiKDEsMyxuLnBsdWdpbnMkKSkoImRpc2FibGVkUGx1Z2lucyIsUGIoMiw1LG4uZGlzYWJsZWRQbHVnaW5zJCkpKCJzZWxlY3RlZFBsdWdpbiIsUGIoMyw3LG4uYWN0aXZlUGx1Z2luJCkpfSxkaXJlY3RpdmVzOltiV10scGlwZXM6W012XSxlbmNhcHN1bGF0aW9uOjJ9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKENXLFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6InBsdWdpbi1zZWxlY3RvciIsdGVtcGxhdGU6J1xuICAgIDxwbHVnaW4tc2VsZWN0b3ItY29tcG9uZW50XG4gICAgICBbYWN0aXZlUGx1Z2luc109InBsdWdpbnMkIHwgYXN5bmMiXG4gICAgICBbZGlzYWJsZWRQbHVnaW5zXT0iZGlzYWJsZWRQbHVnaW5zJCB8IGFzeW5jIlxuICAgICAgW3NlbGVjdGVkUGx1Z2luXT0iYWN0aXZlUGx1Z2luJCB8IGFzeW5jIlxuICAgICAgKG9uUGx1Z2luU2VsZWN0aW9uQ2hhbmdlZCk9Im9uUGx1Z2luU2VsZWN0aW9uQ2hhbmdlKCRldmVudCkiXG4gICAgPjwvcGx1Z2luLXNlbGVjdG9yLWNvbXBvbmVudD5cbiAgJ31dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkVrfV19KSxudWxsKTtjbGFzcyB2V3tjb25zdHJ1Y3Rvcigpe3RoaXMucm9sZT0iZGlhbG9nIix0aGlzLnBhbmVsQ2xhc3M9IiIsdGhpcy5oYXNCYWNrZHJvcD0hMCx0aGlzLmJhY2tkcm9wQ2xhc3M9IiIsdGhpcy5kaXNhYmxlQ2xvc2U9ITEsdGhpcy53aWR0aD0iIix0aGlzLmhlaWdodD0iIix0aGlzLm1heFdpZHRoPSI4MHZ3Iix0aGlzLmRhdGE9bnVsbCx0aGlzLmFyaWFEZXNjcmliZWRCeT1udWxsLHRoaXMuYXJpYUxhYmVsbGVkQnk9bnVsbCx0aGlzLmFyaWFMYWJlbD1udWxsLHRoaXMuYXV0b0ZvY3VzPSEwLHRoaXMucmVzdG9yZUZvY3VzPSEwLHRoaXMuY2xvc2VPbk5hdmlnYXRpb249ITB9fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jb25zdCB4Vz17ZGlhbG9nQ29udGFpbmVyOkt4KCJkaWFsb2dDb250YWluZXIiLFt0Tygidm9pZCwgZXhpdCIsJHgoe29wYWNpdHk6MCx0cmFuc2Zvcm06InNjYWxlKDAuNykifSkpLHRPKCJlbnRlciIsJHgoe3RyYW5zZm9ybToibm9uZSJ9KSksbk8oIiogPT4gZW50ZXIiLEp4KCIxNTBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKSIsJHgoe3RyYW5zZm9ybToibm9uZSIsb3BhY2l0eToxfSkpKSxuTygiKiA9PiB2b2lkLCAqID0+IGV4aXQiLEp4KCI3NW1zIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKSIsJHgoe29wYWNpdHk6MH0pKSldKX07Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIE9XKCl7dGhyb3cgRXJyb3IoIkF0dGVtcHRpbmcgdG8gYXR0YWNoIGRpYWxvZyBjb250ZW50IGFmdGVyIGNvbnRlbnQgaXMgYWxyZWFkeSBhdHRhY2hlZCIpfWNsYXNzIFBXIGV4dGVuZHMgZEZ7Y29uc3RydWN0b3IodCxlLG4sbyxpLGEpe3N1cGVyKCksdGhpcy5fZWxlbWVudFJlZj10LHRoaXMuX2ZvY3VzVHJhcEZhY3Rvcnk9ZSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1uLHRoaXMuX2NvbmZpZz1pLHRoaXMuX2ZvY3VzTW9uaXRvcj1hLHRoaXMuX2FuaW1hdGlvblN0YXRlQ2hhbmdlZD1uZXcgQWIsdGhpcy5fZWxlbWVudEZvY3VzZWRCZWZvcmVEaWFsb2dXYXNPcGVuZWQ9bnVsbCx0aGlzLl9jbG9zZUludGVyYWN0aW9uVHlwZT1udWxsLHRoaXMuYXR0YWNoRG9tUG9ydGFsPXQ9Pih0aGlzLl9wb3J0YWxPdXRsZXQuaGFzQXR0YWNoZWQoKSYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZPVygpLHRoaXMuX3BvcnRhbE91dGxldC5hdHRhY2hEb21Qb3J0YWwodCkpLHRoaXMuX2FyaWFMYWJlbGxlZEJ5PWkuYXJpYUxhYmVsbGVkQnl8fG51bGwsdGhpcy5fZG9jdW1lbnQ9b31faW5pdGlhbGl6ZVdpdGhBdHRhY2hlZENvbnRlbnQoKXt0aGlzLl9zZXR1cEZvY3VzVHJhcCgpLHRoaXMuX2NhcHR1cmVQcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQoKSx0aGlzLl9mb2N1c0RpYWxvZ0NvbnRhaW5lcigpfWF0dGFjaENvbXBvbmVudFBvcnRhbCh0KXtyZXR1cm4gdGhpcy5fcG9ydGFsT3V0bGV0Lmhhc0F0dGFjaGVkKCkmJigidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmT1coKSx0aGlzLl9wb3J0YWxPdXRsZXQuYXR0YWNoQ29tcG9uZW50UG9ydGFsKHQpfWF0dGFjaFRlbXBsYXRlUG9ydGFsKHQpe3JldHVybiB0aGlzLl9wb3J0YWxPdXRsZXQuaGFzQXR0YWNoZWQoKSYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZPVygpLHRoaXMuX3BvcnRhbE91dGxldC5hdHRhY2hUZW1wbGF0ZVBvcnRhbCh0KX1fcmVjYXB0dXJlRm9jdXMoKXt0aGlzLl9jb250YWluc0ZvY3VzKCl8fCghdGhpcy5fY29uZmlnLmF1dG9Gb2N1c3x8IXRoaXMuX2ZvY3VzVHJhcC5mb2N1c0luaXRpYWxFbGVtZW50KCkpJiZ0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKX1fdHJhcEZvY3VzKCl7dGhpcy5fY29uZmlnLmF1dG9Gb2N1cz90aGlzLl9mb2N1c1RyYXAuZm9jdXNJbml0aWFsRWxlbWVudFdoZW5SZWFkeSgpOnRoaXMuX2NvbnRhaW5zRm9jdXMoKXx8dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCl9X3Jlc3RvcmVGb2N1cygpe2NvbnN0IHQ9dGhpcy5fZWxlbWVudEZvY3VzZWRCZWZvcmVEaWFsb2dXYXNPcGVuZWQ7aWYodGhpcy5fY29uZmlnLnJlc3RvcmVGb2N1cyYmdCYmImZ1bmN0aW9uIj09dHlwZW9mIHQuZm9jdXMpe2NvbnN0IGU9dGhpcy5fZ2V0QWN0aXZlRWxlbWVudCgpLG49dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O2UmJmUhPT10aGlzLl9kb2N1bWVudC5ib2R5JiZlIT09biYmIW4uY29udGFpbnMoZSl8fCh0aGlzLl9mb2N1c01vbml0b3I/KHRoaXMuX2ZvY3VzTW9uaXRvci5mb2N1c1ZpYSh0LHRoaXMuX2Nsb3NlSW50ZXJhY3Rpb25UeXBlKSx0aGlzLl9jbG9zZUludGVyYWN0aW9uVHlwZT1udWxsKTp0LmZvY3VzKCkpfXRoaXMuX2ZvY3VzVHJhcCYmdGhpcy5fZm9jdXNUcmFwLmRlc3Ryb3koKX1fc2V0dXBGb2N1c1RyYXAoKXt0aGlzLl9mb2N1c1RyYXA9dGhpcy5fZm9jdXNUcmFwRmFjdG9yeS5jcmVhdGUodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KX1fY2FwdHVyZVByZXZpb3VzbHlGb2N1c2VkRWxlbWVudCgpe3RoaXMuX2RvY3VtZW50JiYodGhpcy5fZWxlbWVudEZvY3VzZWRCZWZvcmVEaWFsb2dXYXNPcGVuZWQ9dGhpcy5fZ2V0QWN0aXZlRWxlbWVudCgpKX1fZm9jdXNEaWFsb2dDb250YWluZXIoKXt0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMmJnRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpfV9jb250YWluc0ZvY3VzKCl7Y29uc3QgdD10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsZT10aGlzLl9nZXRBY3RpdmVFbGVtZW50KCk7cmV0dXJuIHQ9PT1lfHx0LmNvbnRhaW5zKGUpfV9nZXRBY3RpdmVFbGVtZW50KCl7dmFyIHQ7Y29uc3QgZT10aGlzLl9kb2N1bWVudC5hY3RpdmVFbGVtZW50O3JldHVybihudWxsPT09KHQ9bnVsbD09ZT92b2lkIDA6ZS5zaGFkb3dSb290KXx8dm9pZCAwPT09dD92b2lkIDA6dC5hY3RpdmVFbGVtZW50KXx8ZX19UFcuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFBXKShNdShjaCksTXUoWUkpLE11KEhoKSxNdShVQyw4KSxNdSh2VyksTXUocHopKX0sUFcuybVkaXI9Sm8oe3R5cGU6UFcsdmlld1F1ZXJ5OmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJldiKGdGLDMpLDImZSl7bGV0IHQ7VWIodD1ZYigpKSYmKG4uX3BvcnRhbE91dGxldD10LmZpcnN0KX19LGZlYXR1cmVzOltnbV19KSxQVy5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmNofSx7dHlwZTpZSX0se3R5cGU6SGh9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbVUNdfV19LHt0eXBlOnZXfSx7dHlwZTpwen1dLFBXLnByb3BEZWNvcmF0b3JzPXtfcG9ydGFsT3V0bGV0Olt7dHlwZTpGcixhcmdzOltnRix7c3RhdGljOiEwfV19XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihQVyxbe3R5cGU6Z199XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Y2h9LHt0eXBlOllJfSx7dHlwZTpIaH0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltVQ119XX0se3R5cGU6dld9LHt0eXBlOnB6fV19KSx7X3BvcnRhbE91dGxldDpbe3R5cGU6RnIsYXJnczpbZ0Yse3N0YXRpYzohMH1dfV19KTtjbGFzcyB3VyBleHRlbmRzIFBXe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9zdGF0ZT0iZW50ZXIifV9vbkFuaW1hdGlvbkRvbmUoe3RvU3RhdGU6dCx0b3RhbFRpbWU6ZX0peyJlbnRlciI9PT10Pyh0aGlzLl90cmFwRm9jdXMoKSx0aGlzLl9hbmltYXRpb25TdGF0ZUNoYW5nZWQubmV4dCh7c3RhdGU6Im9wZW5lZCIsdG90YWxUaW1lOmV9KSk6ImV4aXQiPT09dCYmKHRoaXMuX3Jlc3RvcmVGb2N1cygpLHRoaXMuX2FuaW1hdGlvblN0YXRlQ2hhbmdlZC5uZXh0KHtzdGF0ZToiY2xvc2VkIix0b3RhbFRpbWU6ZX0pKX1fb25BbmltYXRpb25TdGFydCh7dG9TdGF0ZTp0LHRvdGFsVGltZTplfSl7ImVudGVyIj09PXQ/dGhpcy5fYW5pbWF0aW9uU3RhdGVDaGFuZ2VkLm5leHQoe3N0YXRlOiJvcGVuaW5nIix0b3RhbFRpbWU6ZX0pOiJleGl0IiE9PXQmJiJ2b2lkIiE9PXR8fHRoaXMuX2FuaW1hdGlvblN0YXRlQ2hhbmdlZC5uZXh0KHtzdGF0ZToiY2xvc2luZyIsdG90YWxUaW1lOmV9KX1fc3RhcnRFeGl0QW5pbWF0aW9uKCl7dGhpcy5fc3RhdGU9ImV4aXQiLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfX13Vy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBrVyhlfHx3Vyl9LHdXLsm1Y21wPVVvKHt0eXBlOndXLHNlbGVjdG9yczpbWyJtYXQtZGlhbG9nLWNvbnRhaW5lciJdXSxob3N0QXR0cnM6WyJ0YWJpbmRleCIsIi0xIiwiYXJpYS1tb2RhbCIsInRydWUiLDEsIm1hdC1kaWFsb2ctY29udGFpbmVyIl0saG9zdFZhcnM6Nixob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezEmZSYmSXUoIkBkaWFsb2dDb250YWluZXIuc3RhcnQiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLl9vbkFuaW1hdGlvblN0YXJ0KGUpfSkpKCJAZGlhbG9nQ29udGFpbmVyLmRvbmUiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLl9vbkFuaW1hdGlvbkRvbmUoZSl9KSksMiZlJiYoa2YoImlkIixuLl9pZCksTm0oInJvbGUiLG4uX2NvbmZpZy5yb2xlKSgiYXJpYS1sYWJlbGxlZGJ5IixuLl9jb25maWcuYXJpYUxhYmVsP251bGw6bi5fYXJpYUxhYmVsbGVkQnkpKCJhcmlhLWxhYmVsIixuLl9jb25maWcuYXJpYUxhYmVsKSgiYXJpYS1kZXNjcmliZWRieSIsbi5fY29uZmlnLmFyaWFEZXNjcmliZWRCeXx8bnVsbCksU2YoIkBkaWFsb2dDb250YWluZXIiLG4uX3N0YXRlKSl9LGZlYXR1cmVzOltnbV0sZGVjbHM6MSx2YXJzOjAsY29uc3RzOltbImNka1BvcnRhbE91dGxldCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiZXbSgwLE1XLDAsMCwibmctdGVtcGxhdGUiLDApfSxkaXJlY3RpdmVzOltnRl0sc3R5bGVzOlsiLm1hdC1kaWFsb2ctY29udGFpbmVye2Rpc3BsYXk6YmxvY2s7cGFkZGluZzoyNHB4O2JvcmRlci1yYWRpdXM6NHB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdzphdXRvO291dGxpbmU6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO21pbi1oZWlnaHQ6aW5oZXJpdDttYXgtaGVpZ2h0OmluaGVyaXR9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWRpYWxvZy1jb250YWluZXJ7b3V0bGluZTpzb2xpZCAxcHh9Lm1hdC1kaWFsb2ctY29udGVudHtkaXNwbGF5OmJsb2NrO21hcmdpbjowIC0yNHB4O3BhZGRpbmc6MCAyNHB4O21heC1oZWlnaHQ6NjV2aDtvdmVyZmxvdzphdXRvOy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNofS5tYXQtZGlhbG9nLXRpdGxle21hcmdpbjowIDAgMjBweDtkaXNwbGF5OmJsb2NrfS5tYXQtZGlhbG9nLWFjdGlvbnN7cGFkZGluZzo4cHggMDtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7bWluLWhlaWdodDo1MnB4O2FsaWduLWl0ZW1zOmNlbnRlcjtib3gtc2l6aW5nOmNvbnRlbnQtYm94O21hcmdpbi1ib3R0b206LTI0cHh9Lm1hdC1kaWFsb2ctYWN0aW9uc1thbGlnbj1lbmRde2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0ubWF0LWRpYWxvZy1hY3Rpb25zW2FsaWduPWNlbnRlcl17anVzdGlmeS1jb250ZW50OmNlbnRlcn0ubWF0LWRpYWxvZy1hY3Rpb25zIC5tYXQtYnV0dG9uLWJhc2UrLm1hdC1idXR0b24tYmFzZSwubWF0LWRpYWxvZy1hY3Rpb25zIC5tYXQtbWRjLWJ1dHRvbi1iYXNlKy5tYXQtbWRjLWJ1dHRvbi1iYXNle21hcmdpbi1sZWZ0OjhweH1bZGlyPXJ0bF0gLm1hdC1kaWFsb2ctYWN0aW9ucyAubWF0LWJ1dHRvbi1iYXNlKy5tYXQtYnV0dG9uLWJhc2UsW2Rpcj1ydGxdIC5tYXQtZGlhbG9nLWFjdGlvbnMgLm1hdC1tZGMtYnV0dG9uLWJhc2UrLm1hdC1tZGMtYnV0dG9uLWJhc2V7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6OHB4fVxuIl0sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbeFcuZGlhbG9nQ29udGFpbmVyXX19KTtjb25zdCBrVz12cih3Vyk7KCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYih3Vyxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJtYXQtZGlhbG9nLWNvbnRhaW5lciIsdGVtcGxhdGU6IjxuZy10ZW1wbGF0ZSBjZGtQb3J0YWxPdXRsZXQ+PC9uZy10ZW1wbGF0ZT5cbiIsZW5jYXBzdWxhdGlvbjpQby5Ob25lLGNoYW5nZURldGVjdGlvbjp4by5EZWZhdWx0LGFuaW1hdGlvbnM6W3hXLmRpYWxvZ0NvbnRhaW5lcl0saG9zdDp7Y2xhc3M6Im1hdC1kaWFsb2ctY29udGFpbmVyIix0YWJpbmRleDoiLTEiLCJhcmlhLW1vZGFsIjoidHJ1ZSIsIltpZF0iOiJfaWQiLCJbYXR0ci5yb2xlXSI6Il9jb25maWcucm9sZSIsIlthdHRyLmFyaWEtbGFiZWxsZWRieV0iOiJfY29uZmlnLmFyaWFMYWJlbCA/IG51bGwgOiBfYXJpYUxhYmVsbGVkQnkiLCJbYXR0ci5hcmlhLWxhYmVsXSI6Il9jb25maWcuYXJpYUxhYmVsIiwiW2F0dHIuYXJpYS1kZXNjcmliZWRieV0iOiJfY29uZmlnLmFyaWFEZXNjcmliZWRCeSB8fCBudWxsIiwiW0BkaWFsb2dDb250YWluZXJdIjoiX3N0YXRlIiwiKEBkaWFsb2dDb250YWluZXIuc3RhcnQpIjoiX29uQW5pbWF0aW9uU3RhcnQoJGV2ZW50KSIsIihAZGlhbG9nQ29udGFpbmVyLmRvbmUpIjoiX29uQW5pbWF0aW9uRG9uZSgkZXZlbnQpIn0sc3R5bGVzOlsiLm1hdC1kaWFsb2ctY29udGFpbmVye2Rpc3BsYXk6YmxvY2s7cGFkZGluZzoyNHB4O2JvcmRlci1yYWRpdXM6NHB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdzphdXRvO291dGxpbmU6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO21pbi1oZWlnaHQ6aW5oZXJpdDttYXgtaGVpZ2h0OmluaGVyaXR9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWRpYWxvZy1jb250YWluZXJ7b3V0bGluZTpzb2xpZCAxcHh9Lm1hdC1kaWFsb2ctY29udGVudHtkaXNwbGF5OmJsb2NrO21hcmdpbjowIC0yNHB4O3BhZGRpbmc6MCAyNHB4O21heC1oZWlnaHQ6NjV2aDtvdmVyZmxvdzphdXRvOy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNofS5tYXQtZGlhbG9nLXRpdGxle21hcmdpbjowIDAgMjBweDtkaXNwbGF5OmJsb2NrfS5tYXQtZGlhbG9nLWFjdGlvbnN7cGFkZGluZzo4cHggMDtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7bWluLWhlaWdodDo1MnB4O2FsaWduLWl0ZW1zOmNlbnRlcjtib3gtc2l6aW5nOmNvbnRlbnQtYm94O21hcmdpbi1ib3R0b206LTI0cHh9Lm1hdC1kaWFsb2ctYWN0aW9uc1thbGlnbj1lbmRde2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0ubWF0LWRpYWxvZy1hY3Rpb25zW2FsaWduPWNlbnRlcl17anVzdGlmeS1jb250ZW50OmNlbnRlcn0ubWF0LWRpYWxvZy1hY3Rpb25zIC5tYXQtYnV0dG9uLWJhc2UrLm1hdC1idXR0b24tYmFzZSwubWF0LWRpYWxvZy1hY3Rpb25zIC5tYXQtbWRjLWJ1dHRvbi1iYXNlKy5tYXQtbWRjLWJ1dHRvbi1iYXNle21hcmdpbi1sZWZ0OjhweH1bZGlyPXJ0bF0gLm1hdC1kaWFsb2ctYWN0aW9ucyAubWF0LWJ1dHRvbi1iYXNlKy5tYXQtYnV0dG9uLWJhc2UsW2Rpcj1ydGxdIC5tYXQtZGlhbG9nLWFjdGlvbnMgLm1hdC1tZGMtYnV0dG9uLWJhc2UrLm1hdC1tZGMtYnV0dG9uLWJhc2V7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6OHB4fVxuIl19XX1dLG51bGwsbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpsZXQgU1c9MDtjbGFzcyBEV3tjb25zdHJ1Y3Rvcih0LGUsbj0ibWF0LWRpYWxvZy0iK1NXKyspe3RoaXMuX292ZXJsYXlSZWY9dCx0aGlzLl9jb250YWluZXJJbnN0YW5jZT1lLHRoaXMuaWQ9bix0aGlzLmRpc2FibGVDbG9zZT10aGlzLl9jb250YWluZXJJbnN0YW5jZS5fY29uZmlnLmRpc2FibGVDbG9zZSx0aGlzLl9hZnRlck9wZW5lZD1uZXcgeCx0aGlzLl9hZnRlckNsb3NlZD1uZXcgeCx0aGlzLl9iZWZvcmVDbG9zZWQ9bmV3IHgsdGhpcy5fc3RhdGU9MCxlLl9pZD1uLGUuX2FuaW1hdGlvblN0YXRlQ2hhbmdlZC5waXBlKEd0KCh0PT4ib3BlbmVkIj09PXQuc3RhdGUpKSxOZSgxKSkuc3Vic2NyaWJlKCgoKT0+e3RoaXMuX2FmdGVyT3BlbmVkLm5leHQoKSx0aGlzLl9hZnRlck9wZW5lZC5jb21wbGV0ZSgpfSkpLGUuX2FuaW1hdGlvblN0YXRlQ2hhbmdlZC5waXBlKEd0KCh0PT4iY2xvc2VkIj09PXQuc3RhdGUpKSxOZSgxKSkuc3Vic2NyaWJlKCgoKT0+e2NsZWFyVGltZW91dCh0aGlzLl9jbG9zZUZhbGxiYWNrVGltZW91dCksdGhpcy5fZmluaXNoRGlhbG9nQ2xvc2UoKX0pKSx0LmRldGFjaG1lbnRzKCkuc3Vic2NyaWJlKCgoKT0+e3RoaXMuX2JlZm9yZUNsb3NlZC5uZXh0KHRoaXMuX3Jlc3VsdCksdGhpcy5fYmVmb3JlQ2xvc2VkLmNvbXBsZXRlKCksdGhpcy5fYWZ0ZXJDbG9zZWQubmV4dCh0aGlzLl9yZXN1bHQpLHRoaXMuX2FmdGVyQ2xvc2VkLmNvbXBsZXRlKCksdGhpcy5jb21wb25lbnRJbnN0YW5jZT1udWxsLHRoaXMuX292ZXJsYXlSZWYuZGlzcG9zZSgpfSkpLHQua2V5ZG93bkV2ZW50cygpLnBpcGUoR3QoKHQ9PnQua2V5Q29kZT09PWVJJiYhdGhpcy5kaXNhYmxlQ2xvc2UmJiFhSSh0KSkpKS5zdWJzY3JpYmUoKHQ9Pnt0LnByZXZlbnREZWZhdWx0KCksRVcodGhpcywia2V5Ym9hcmQiKX0pKSx0LmJhY2tkcm9wQ2xpY2soKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5kaXNhYmxlQ2xvc2U/dGhpcy5fY29udGFpbmVySW5zdGFuY2UuX3JlY2FwdHVyZUZvY3VzKCk6RVcodGhpcywibW91c2UiKX0pKX1jbG9zZSh0KXt0aGlzLl9yZXN1bHQ9dCx0aGlzLl9jb250YWluZXJJbnN0YW5jZS5fYW5pbWF0aW9uU3RhdGVDaGFuZ2VkLnBpcGUoR3QoKHQ9PiJjbG9zaW5nIj09PXQuc3RhdGUpKSxOZSgxKSkuc3Vic2NyaWJlKChlPT57dGhpcy5fYmVmb3JlQ2xvc2VkLm5leHQodCksdGhpcy5fYmVmb3JlQ2xvc2VkLmNvbXBsZXRlKCksdGhpcy5fb3ZlcmxheVJlZi5kZXRhY2hCYWNrZHJvcCgpLHRoaXMuX2Nsb3NlRmFsbGJhY2tUaW1lb3V0PXNldFRpbWVvdXQoKCgpPT50aGlzLl9maW5pc2hEaWFsb2dDbG9zZSgpKSxlLnRvdGFsVGltZSsxMDApfSkpLHRoaXMuX3N0YXRlPTEsdGhpcy5fY29udGFpbmVySW5zdGFuY2UuX3N0YXJ0RXhpdEFuaW1hdGlvbigpfWFmdGVyT3BlbmVkKCl7cmV0dXJuIHRoaXMuX2FmdGVyT3BlbmVkfWFmdGVyQ2xvc2VkKCl7cmV0dXJuIHRoaXMuX2FmdGVyQ2xvc2VkfWJlZm9yZUNsb3NlZCgpe3JldHVybiB0aGlzLl9iZWZvcmVDbG9zZWR9YmFja2Ryb3BDbGljaygpe3JldHVybiB0aGlzLl9vdmVybGF5UmVmLmJhY2tkcm9wQ2xpY2soKX1rZXlkb3duRXZlbnRzKCl7cmV0dXJuIHRoaXMuX292ZXJsYXlSZWYua2V5ZG93bkV2ZW50cygpfXVwZGF0ZVBvc2l0aW9uKHQpe2xldCBlPXRoaXMuX2dldFBvc2l0aW9uU3RyYXRlZ3koKTtyZXR1cm4gdCYmKHQubGVmdHx8dC5yaWdodCk/dC5sZWZ0P2UubGVmdCh0LmxlZnQpOmUucmlnaHQodC5yaWdodCk6ZS5jZW50ZXJIb3Jpem9udGFsbHkoKSx0JiYodC50b3B8fHQuYm90dG9tKT90LnRvcD9lLnRvcCh0LnRvcCk6ZS5ib3R0b20odC5ib3R0b20pOmUuY2VudGVyVmVydGljYWxseSgpLHRoaXMuX292ZXJsYXlSZWYudXBkYXRlUG9zaXRpb24oKSx0aGlzfXVwZGF0ZVNpemUodD0iIixlPSIiKXtyZXR1cm4gdGhpcy5fb3ZlcmxheVJlZi51cGRhdGVTaXplKHt3aWR0aDp0LGhlaWdodDplfSksdGhpcy5fb3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpLHRoaXN9YWRkUGFuZWxDbGFzcyh0KXtyZXR1cm4gdGhpcy5fb3ZlcmxheVJlZi5hZGRQYW5lbENsYXNzKHQpLHRoaXN9cmVtb3ZlUGFuZWxDbGFzcyh0KXtyZXR1cm4gdGhpcy5fb3ZlcmxheVJlZi5yZW1vdmVQYW5lbENsYXNzKHQpLHRoaXN9Z2V0U3RhdGUoKXtyZXR1cm4gdGhpcy5fc3RhdGV9X2ZpbmlzaERpYWxvZ0Nsb3NlKCl7dGhpcy5fc3RhdGU9Mix0aGlzLl9vdmVybGF5UmVmLmRpc3Bvc2UoKX1fZ2V0UG9zaXRpb25TdHJhdGVneSgpe3JldHVybiB0aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpLnBvc2l0aW9uU3RyYXRlZ3l9fWZ1bmN0aW9uIEVXKHQsZSxuKXtyZXR1cm4gdm9pZCAwIT09dC5fY29udGFpbmVySW5zdGFuY2UmJih0Ll9jb250YWluZXJJbnN0YW5jZS5fY2xvc2VJbnRlcmFjdGlvblR5cGU9ZSksdC5jbG9zZShuKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY29uc3QgQVc9bmV3IE5yKCJNYXREaWFsb2dEYXRhIiksUlc9bmV3IE5yKCJtYXQtZGlhbG9nLWRlZmF1bHQtb3B0aW9ucyIpLFRXPW5ldyBOcigibWF0LWRpYWxvZy1zY3JvbGwtc3RyYXRlZ3kiKSxOVz17cHJvdmlkZTpUVyxkZXBzOltKRl0sdXNlRmFjdG9yeTpmdW5jdGlvbiBJVyh0KXtyZXR1cm4oKT0+dC5zY3JvbGxTdHJhdGVnaWVzLmJsb2NrKCl9fTtjbGFzcyB6V3tjb25zdHJ1Y3Rvcih0LGUsbixvLGksYSxyLHMsbCl7dGhpcy5fb3ZlcmxheT10LHRoaXMuX2luamVjdG9yPWUsdGhpcy5fZGVmYXVsdE9wdGlvbnM9bix0aGlzLl9wYXJlbnREaWFsb2c9byx0aGlzLl9vdmVybGF5Q29udGFpbmVyPWksdGhpcy5fZGlhbG9nUmVmQ29uc3RydWN0b3I9cix0aGlzLl9kaWFsb2dDb250YWluZXJUeXBlPXMsdGhpcy5fZGlhbG9nRGF0YVRva2VuPWwsdGhpcy5fb3BlbkRpYWxvZ3NBdFRoaXNMZXZlbD1bXSx0aGlzLl9hZnRlckFsbENsb3NlZEF0VGhpc0xldmVsPW5ldyB4LHRoaXMuX2FmdGVyT3BlbmVkQXRUaGlzTGV2ZWw9bmV3IHgsdGhpcy5fYXJpYUhpZGRlbkVsZW1lbnRzPW5ldyBNYXAsdGhpcy5hZnRlckFsbENsb3NlZD1GdCgoKCk9PnRoaXMub3BlbkRpYWxvZ3MubGVuZ3RoP3RoaXMuX2dldEFmdGVyQWxsQ2xvc2VkKCk6dGhpcy5fZ2V0QWZ0ZXJBbGxDbG9zZWQoKS5waXBlKGNuKHZvaWQgMCkpKSksdGhpcy5fc2Nyb2xsU3RyYXRlZ3k9YX1nZXQgb3BlbkRpYWxvZ3MoKXtyZXR1cm4gdGhpcy5fcGFyZW50RGlhbG9nP3RoaXMuX3BhcmVudERpYWxvZy5vcGVuRGlhbG9nczp0aGlzLl9vcGVuRGlhbG9nc0F0VGhpc0xldmVsfWdldCBhZnRlck9wZW5lZCgpe3JldHVybiB0aGlzLl9wYXJlbnREaWFsb2c/dGhpcy5fcGFyZW50RGlhbG9nLmFmdGVyT3BlbmVkOnRoaXMuX2FmdGVyT3BlbmVkQXRUaGlzTGV2ZWx9X2dldEFmdGVyQWxsQ2xvc2VkKCl7Y29uc3QgdD10aGlzLl9wYXJlbnREaWFsb2c7cmV0dXJuIHQ/dC5fZ2V0QWZ0ZXJBbGxDbG9zZWQoKTp0aGlzLl9hZnRlckFsbENsb3NlZEF0VGhpc0xldmVsfW9wZW4odCxlKXtpZigoZT0oZnVuY3Rpb24gbih0LGUpe3JldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZSksdCl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLykoZSx0aGlzLl9kZWZhdWx0T3B0aW9uc3x8bmV3IHZXKSkuaWQmJnRoaXMuZ2V0RGlhbG9nQnlJZChlLmlkKSYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpKXRocm93IEVycm9yKGBEaWFsb2cgd2l0aCBpZCAiJHtlLmlkfSIgZXhpc3RzIGFscmVhZHkuIFRoZSBkaWFsb2cgaWQgbXVzdCBiZSB1bmlxdWUuYCk7Y29uc3Qgbz10aGlzLl9jcmVhdGVPdmVybGF5KGUpLGk9dGhpcy5fYXR0YWNoRGlhbG9nQ29udGFpbmVyKG8sZSksYT10aGlzLl9hdHRhY2hEaWFsb2dDb250ZW50KHQsaSxvLGUpO3JldHVybiB0aGlzLm9wZW5EaWFsb2dzLmxlbmd0aHx8dGhpcy5faGlkZU5vbkRpYWxvZ0NvbnRlbnRGcm9tQXNzaXN0aXZlVGVjaG5vbG9neSgpLHRoaXMub3BlbkRpYWxvZ3MucHVzaChhKSxhLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKCgoKT0+dGhpcy5fcmVtb3ZlT3BlbkRpYWxvZyhhKSkpLHRoaXMuYWZ0ZXJPcGVuZWQubmV4dChhKSxpLl9pbml0aWFsaXplV2l0aEF0dGFjaGVkQ29udGVudCgpLGF9Y2xvc2VBbGwoKXt0aGlzLl9jbG9zZURpYWxvZ3ModGhpcy5vcGVuRGlhbG9ncyl9Z2V0RGlhbG9nQnlJZCh0KXtyZXR1cm4gdGhpcy5vcGVuRGlhbG9ncy5maW5kKChlPT5lLmlkPT09dCkpfW5nT25EZXN0cm95KCl7dGhpcy5fY2xvc2VEaWFsb2dzKHRoaXMuX29wZW5EaWFsb2dzQXRUaGlzTGV2ZWwpLHRoaXMuX2FmdGVyQWxsQ2xvc2VkQXRUaGlzTGV2ZWwuY29tcGxldGUoKSx0aGlzLl9hZnRlck9wZW5lZEF0VGhpc0xldmVsLmNvbXBsZXRlKCl9X2NyZWF0ZU92ZXJsYXkodCl7Y29uc3QgZT10aGlzLl9nZXRPdmVybGF5Q29uZmlnKHQpO3JldHVybiB0aGlzLl9vdmVybGF5LmNyZWF0ZShlKX1fZ2V0T3ZlcmxheUNvbmZpZyh0KXtjb25zdCBlPW5ldyBTRih7cG9zaXRpb25TdHJhdGVneTp0aGlzLl9vdmVybGF5LnBvc2l0aW9uKCkuZ2xvYmFsKCksc2Nyb2xsU3RyYXRlZ3k6dC5zY3JvbGxTdHJhdGVneXx8dGhpcy5fc2Nyb2xsU3RyYXRlZ3koKSxwYW5lbENsYXNzOnQucGFuZWxDbGFzcyxoYXNCYWNrZHJvcDp0Lmhhc0JhY2tkcm9wLGRpcmVjdGlvbjp0LmRpcmVjdGlvbixtaW5XaWR0aDp0Lm1pbldpZHRoLG1pbkhlaWdodDp0Lm1pbkhlaWdodCxtYXhXaWR0aDp0Lm1heFdpZHRoLG1heEhlaWdodDp0Lm1heEhlaWdodCxkaXNwb3NlT25OYXZpZ2F0aW9uOnQuY2xvc2VPbk5hdmlnYXRpb259KTtyZXR1cm4gdC5iYWNrZHJvcENsYXNzJiYoZS5iYWNrZHJvcENsYXNzPXQuYmFja2Ryb3BDbGFzcyksZX1fYXR0YWNoRGlhbG9nQ29udGFpbmVyKHQsZSl7Y29uc3Qgbj1RcC5jcmVhdGUoe3BhcmVudDplJiZlLnZpZXdDb250YWluZXJSZWYmJmUudmlld0NvbnRhaW5lclJlZi5pbmplY3Rvcnx8dGhpcy5faW5qZWN0b3IscHJvdmlkZXJzOlt7cHJvdmlkZTp2Vyx1c2VWYWx1ZTplfV19KSxvPW5ldyBzRih0aGlzLl9kaWFsb2dDb250YWluZXJUeXBlLGUudmlld0NvbnRhaW5lclJlZixuLGUuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyKTtyZXR1cm4gdC5hdHRhY2gobykuaW5zdGFuY2V9X2F0dGFjaERpYWxvZ0NvbnRlbnQodCxlLG4sbyl7Y29uc3QgaT1uZXcgdGhpcy5fZGlhbG9nUmVmQ29uc3RydWN0b3IobixlLG8uaWQpO2lmKHQgaW5zdGFuY2VvZiBVaCllLmF0dGFjaFRlbXBsYXRlUG9ydGFsKG5ldyBsRih0LG51bGwseyRpbXBsaWNpdDpvLmRhdGEsZGlhbG9nUmVmOml9KSk7ZWxzZXtjb25zdCBuPXRoaXMuX2NyZWF0ZUluamVjdG9yKG8saSxlKSxhPWUuYXR0YWNoQ29tcG9uZW50UG9ydGFsKG5ldyBzRih0LG8udmlld0NvbnRhaW5lclJlZixuKSk7aS5jb21wb25lbnRJbnN0YW5jZT1hLmluc3RhbmNlfXJldHVybiBpLnVwZGF0ZVNpemUoby53aWR0aCxvLmhlaWdodCkudXBkYXRlUG9zaXRpb24oby5wb3NpdGlvbiksaX1fY3JlYXRlSW5qZWN0b3IodCxlLG4pe2NvbnN0IG89dCYmdC52aWV3Q29udGFpbmVyUmVmJiZ0LnZpZXdDb250YWluZXJSZWYuaW5qZWN0b3IsaT1be3Byb3ZpZGU6dGhpcy5fZGlhbG9nQ29udGFpbmVyVHlwZSx1c2VWYWx1ZTpufSx7cHJvdmlkZTp0aGlzLl9kaWFsb2dEYXRhVG9rZW4sdXNlVmFsdWU6dC5kYXRhfSx7cHJvdmlkZTp0aGlzLl9kaWFsb2dSZWZDb25zdHJ1Y3Rvcix1c2VWYWx1ZTplfV07cmV0dXJuIXQuZGlyZWN0aW9ufHxvJiZvLmdldChNeixudWxsKXx8aS5wdXNoKHtwcm92aWRlOk16LHVzZVZhbHVlOnt2YWx1ZTp0LmRpcmVjdGlvbixjaGFuZ2U6WigpfX0pLFFwLmNyZWF0ZSh7cGFyZW50Om98fHRoaXMuX2luamVjdG9yLHByb3ZpZGVyczppfSl9X3JlbW92ZU9wZW5EaWFsb2codCl7Y29uc3QgZT10aGlzLm9wZW5EaWFsb2dzLmluZGV4T2YodCk7ZT4tMSYmKHRoaXMub3BlbkRpYWxvZ3Muc3BsaWNlKGUsMSksdGhpcy5vcGVuRGlhbG9ncy5sZW5ndGh8fCh0aGlzLl9hcmlhSGlkZGVuRWxlbWVudHMuZm9yRWFjaCgoKHQsZSk9Pnt0P2Uuc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsdCk6ZS5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIil9KSksdGhpcy5fYXJpYUhpZGRlbkVsZW1lbnRzLmNsZWFyKCksdGhpcy5fZ2V0QWZ0ZXJBbGxDbG9zZWQoKS5uZXh0KCkpKX1faGlkZU5vbkRpYWxvZ0NvbnRlbnRGcm9tQXNzaXN0aXZlVGVjaG5vbG9neSgpe2NvbnN0IHQ9dGhpcy5fb3ZlcmxheUNvbnRhaW5lci5nZXRDb250YWluZXJFbGVtZW50KCk7aWYodC5wYXJlbnRFbGVtZW50KXtjb25zdCBlPXQucGFyZW50RWxlbWVudC5jaGlsZHJlbjtmb3IobGV0IG49ZS5sZW5ndGgtMTtuPi0xO24tLSl7bGV0IG89ZVtuXTtvPT09dHx8IlNDUklQVCI9PT1vLm5vZGVOYW1lfHwiU1RZTEUiPT09by5ub2RlTmFtZXx8by5oYXNBdHRyaWJ1dGUoImFyaWEtbGl2ZSIpfHwodGhpcy5fYXJpYUhpZGRlbkVsZW1lbnRzLnNldChvLG8uZ2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIpKSxvLnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCJ0cnVlIikpfX19X2Nsb3NlRGlhbG9ncyh0KXtsZXQgZT10Lmxlbmd0aDtmb3IoO2UtLTspdFtlXS5jbG9zZSgpfX16Vy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8elcpKE11KEpGKSxNdShRcCksTXUodm9pZCAwKSxNdSh2b2lkIDApLE11KEZGKSxNdSh2b2lkIDApLE11KFVyKSxNdShVciksTXUoTnIpKX0selcuybVkaXI9Sm8oe3R5cGU6eld9KSx6Vy5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOkpGfSx7dHlwZTpRcH0se3R5cGU6dm9pZCAwfSx7dHlwZTp2b2lkIDB9LHt0eXBlOkZGfSx7dHlwZTp2b2lkIDB9LHt0eXBlOlVyfSx7dHlwZTpVcn0se3R5cGU6TnJ9XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHpXLFt7dHlwZTpnX31dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpKRn0se3R5cGU6UXB9LHt0eXBlOnZvaWQgMH0se3R5cGU6dm9pZCAwfSx7dHlwZTpGRn0se3R5cGU6dm9pZCAwfSx7dHlwZTpVcn0se3R5cGU6VXJ9LHt0eXBlOk5yfV19KSxudWxsKTtjbGFzcyBIVyBleHRlbmRzIHpXe2NvbnN0cnVjdG9yKHQsZSxuLG8saSxhLHIpe3N1cGVyKHQsZSxvLGEscixpLERXLHdXLEFXKX19SFcuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEhXKSh1cyhKRiksdXMoUXApLHVzKG9NLDgpLHVzKFJXLDgpLHVzKFRXKSx1cyhIVywxMiksdXMoRkYpKX0sSFcuybVwcm92PWxvKHt0b2tlbjpIVyxmYWN0b3J5OkhXLsm1ZmFjfSksSFcuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpKRn0se3R5cGU6UXB9LHt0eXBlOm9NLGRlY29yYXRvcnM6W3t0eXBlOl9zfV19LHt0eXBlOnZXLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltSV119XX0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W1RXXX1dfSx7dHlwZTpIVyxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6TXN9XX0se3R5cGU6RkZ9XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEhXLFt7dHlwZTpKbX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpKRn0se3R5cGU6UXB9LHt0eXBlOm9NLGRlY29yYXRvcnM6W3t0eXBlOl9zfV19LHt0eXBlOnZXLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltSV119XX0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W1RXXX1dfSx7dHlwZTpIVyxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6TXN9XX0se3R5cGU6RkZ9XX0pLG51bGwpO2xldCBGVz0wO2NsYXNzIExXe2NvbnN0cnVjdG9yKHQsZSxuKXt0aGlzLmRpYWxvZ1JlZj10LHRoaXMuX2VsZW1lbnRSZWY9ZSx0aGlzLl9kaWFsb2c9bix0aGlzLnR5cGU9ImJ1dHRvbiJ9bmdPbkluaXQoKXt0aGlzLmRpYWxvZ1JlZnx8KHRoaXMuZGlhbG9nUmVmPVVXKHRoaXMuX2VsZW1lbnRSZWYsdGhpcy5fZGlhbG9nLm9wZW5EaWFsb2dzKSl9bmdPbkNoYW5nZXModCl7Y29uc3QgZT10Ll9tYXREaWFsb2dDbG9zZXx8dC5fbWF0RGlhbG9nQ2xvc2VSZXN1bHQ7ZSYmKHRoaXMuZGlhbG9nUmVzdWx0PWUuY3VycmVudFZhbHVlKX1fb25CdXR0b25DbGljayh0KXtFVyh0aGlzLmRpYWxvZ1JlZiwwPT09dC5zY3JlZW5YJiYwPT09dC5zY3JlZW5ZPyJrZXlib2FyZCI6Im1vdXNlIix0aGlzLmRpYWxvZ1Jlc3VsdCl9fUxXLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxMVykoTXUoRFcsOCksTXUoY2gpLE11KEhXKSl9LExXLsm1ZGlyPUpvKHt0eXBlOkxXLHNlbGVjdG9yczpbWyIiLCJtYXQtZGlhbG9nLWNsb3NlIiwiIl0sWyIiLCJtYXREaWFsb2dDbG9zZSIsIiJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MSZlJiZOdSgiY2xpY2siLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLl9vbkJ1dHRvbkNsaWNrKGUpfSkpLDImZSYmTm0oImFyaWEtbGFiZWwiLG4uYXJpYUxhYmVsfHxudWxsKSgidHlwZSIsbi50eXBlKX0saW5wdXRzOnt0eXBlOiJ0eXBlIixkaWFsb2dSZXN1bHQ6WyJtYXQtZGlhbG9nLWNsb3NlIiwiZGlhbG9nUmVzdWx0Il0sYXJpYUxhYmVsOlsiYXJpYS1sYWJlbCIsImFyaWFMYWJlbCJdLF9tYXREaWFsb2dDbG9zZTpbIm1hdERpYWxvZ0Nsb3NlIiwiX21hdERpYWxvZ0Nsb3NlIl19LGV4cG9ydEFzOlsibWF0RGlhbG9nQ2xvc2UiXSxmZWF0dXJlczpbU2ldfSksTFcuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpEVyxkZWNvcmF0b3JzOlt7dHlwZTpfc31dfSx7dHlwZTpjaH0se3R5cGU6SFd9XSxMVy5wcm9wRGVjb3JhdG9ycz17YXJpYUxhYmVsOlt7dHlwZTp5XyxhcmdzOlsiYXJpYS1sYWJlbCJdfV0sdHlwZTpbe3R5cGU6eV99XSxkaWFsb2dSZXN1bHQ6W3t0eXBlOnlfLGFyZ3M6WyJtYXQtZGlhbG9nLWNsb3NlIl19XSxfbWF0RGlhbG9nQ2xvc2U6W3t0eXBlOnlfLGFyZ3M6WyJtYXREaWFsb2dDbG9zZSJdfV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoTFcsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoiW21hdC1kaWFsb2ctY2xvc2VdLCBbbWF0RGlhbG9nQ2xvc2VdIixleHBvcnRBczoibWF0RGlhbG9nQ2xvc2UiLGhvc3Q6eyIoY2xpY2spIjoiX29uQnV0dG9uQ2xpY2soJGV2ZW50KSIsIlthdHRyLmFyaWEtbGFiZWxdIjoiYXJpYUxhYmVsIHx8IG51bGwiLCJbYXR0ci50eXBlXSI6InR5cGUifX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkRXLGRlY29yYXRvcnM6W3t0eXBlOl9zfV19LHt0eXBlOmNofSx7dHlwZTpIV31dfSkse3R5cGU6W3t0eXBlOnlffV0sZGlhbG9nUmVzdWx0Olt7dHlwZTp5XyxhcmdzOlsibWF0LWRpYWxvZy1jbG9zZSJdfV0sYXJpYUxhYmVsOlt7dHlwZTp5XyxhcmdzOlsiYXJpYS1sYWJlbCJdfV0sX21hdERpYWxvZ0Nsb3NlOlt7dHlwZTp5XyxhcmdzOlsibWF0RGlhbG9nQ2xvc2UiXX1dfSk7Y2xhc3MgQld7Y29uc3RydWN0b3IodCxlLG4pe3RoaXMuX2RpYWxvZ1JlZj10LHRoaXMuX2VsZW1lbnRSZWY9ZSx0aGlzLl9kaWFsb2c9bix0aGlzLmlkPSJtYXQtZGlhbG9nLXRpdGxlLSIrRlcrK31uZ09uSW5pdCgpe3RoaXMuX2RpYWxvZ1JlZnx8KHRoaXMuX2RpYWxvZ1JlZj1VVyh0aGlzLl9lbGVtZW50UmVmLHRoaXMuX2RpYWxvZy5vcGVuRGlhbG9ncykpLHRoaXMuX2RpYWxvZ1JlZiYmUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKCk9Pntjb25zdCB0PXRoaXMuX2RpYWxvZ1JlZi5fY29udGFpbmVySW5zdGFuY2U7dCYmIXQuX2FyaWFMYWJlbGxlZEJ5JiYodC5fYXJpYUxhYmVsbGVkQnk9dGhpcy5pZCl9KSl9fUJXLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxCVykoTXUoRFcsOCksTXUoY2gpLE11KEhXKSl9LEJXLsm1ZGlyPUpvKHt0eXBlOkJXLHNlbGVjdG9yczpbWyIiLCJtYXQtZGlhbG9nLXRpdGxlIiwiIl0sWyIiLCJtYXREaWFsb2dUaXRsZSIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1kaWFsb2ctdGl0bGUiXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MiZlJiZrZigiaWQiLG4uaWQpfSxpbnB1dHM6e2lkOiJpZCJ9LGV4cG9ydEFzOlsibWF0RGlhbG9nVGl0bGUiXX0pLEJXLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6RFcsZGVjb3JhdG9yczpbe3R5cGU6X3N9XX0se3R5cGU6Y2h9LHt0eXBlOkhXfV0sQlcucHJvcERlY29yYXRvcnM9e2lkOlt7dHlwZTp5X31dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEJXLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6IlttYXQtZGlhbG9nLXRpdGxlXSwgW21hdERpYWxvZ1RpdGxlXSIsZXhwb3J0QXM6Im1hdERpYWxvZ1RpdGxlIixob3N0OntjbGFzczoibWF0LWRpYWxvZy10aXRsZSIsIltpZF0iOiJpZCJ9fV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6RFcsZGVjb3JhdG9yczpbe3R5cGU6X3N9XX0se3R5cGU6Y2h9LHt0eXBlOkhXfV19KSx7aWQ6W3t0eXBlOnlffV19KTtjbGFzcyBWV3t9VlcuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFZXKX0sVlcuybVkaXI9Sm8oe3R5cGU6Vlcsc2VsZWN0b3JzOltbIiIsIm1hdC1kaWFsb2ctY29udGVudCIsIiJdLFsibWF0LWRpYWxvZy1jb250ZW50Il0sWyIiLCJtYXREaWFsb2dDb250ZW50IiwiIl1dLGhvc3RBdHRyczpbMSwibWF0LWRpYWxvZy1jb250ZW50Il19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFZXLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6IlttYXQtZGlhbG9nLWNvbnRlbnRdLCBtYXQtZGlhbG9nLWNvbnRlbnQsIFttYXREaWFsb2dDb250ZW50XSIsaG9zdDp7Y2xhc3M6Im1hdC1kaWFsb2ctY29udGVudCJ9fV19XSxudWxsLG51bGwpO2NsYXNzIGpXe31mdW5jdGlvbiBVVyh0LGUpe2xldCBuPXQubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50O2Zvcig7biYmIW4uY2xhc3NMaXN0LmNvbnRhaW5zKCJtYXQtZGlhbG9nLWNvbnRhaW5lciIpOyluPW4ucGFyZW50RWxlbWVudDtyZXR1cm4gbj9lLmZpbmQoKHQ9PnQuaWQ9PT1uLmlkKSk6bnVsbH0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovalcuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGpXKX0salcuybVkaXI9Sm8oe3R5cGU6alcsc2VsZWN0b3JzOltbIiIsIm1hdC1kaWFsb2ctYWN0aW9ucyIsIiJdLFsibWF0LWRpYWxvZy1hY3Rpb25zIl0sWyIiLCJtYXREaWFsb2dBY3Rpb25zIiwiIl1dLGhvc3RBdHRyczpbMSwibWF0LWRpYWxvZy1hY3Rpb25zIl19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGpXLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6IlttYXQtZGlhbG9nLWFjdGlvbnNdLCBtYXQtZGlhbG9nLWFjdGlvbnMsIFttYXREaWFsb2dBY3Rpb25zXSIsaG9zdDp7Y2xhc3M6Im1hdC1kaWFsb2ctYWN0aW9ucyJ9fV19XSxudWxsLG51bGwpO2NsYXNzIFdXe31XVy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8V1cpfSxXVy7JtW1vZD1abyh7dHlwZTpXV30pLFdXLsm1aW5qPWNvKHtwcm92aWRlcnM6W0hXLE5XXSxpbXBvcnRzOltbaUwseUYsVHpdLFR6XX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oV1cse2RlY2xhcmF0aW9uczpmdW5jdGlvbigpe3JldHVyblt3VyxMVyxCVyxqVyxWV119LGltcG9ydHM6ZnVuY3Rpb24oKXtyZXR1cm5baUwseUYsVHpdfSxleHBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW3dXLExXLEJXLFZXLGpXLFR6XX19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFdXLFt7dHlwZTprXyxhcmdzOlt7aW1wb3J0czpbaUwseUYsVHpdLGV4cG9ydHM6W3dXLExXLEJXLFZXLGpXLFR6XSxkZWNsYXJhdGlvbnM6W3dXLExXLEJXLGpXLFZXXSxwcm92aWRlcnM6W0hXLE5XXSxlbnRyeUNvbXBvbmVudHM6W3dXXX1dfV0sbnVsbCxudWxsKTtjbGFzcyBHV3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuX2RvY3VtZW50PWU7Y29uc3Qgbj10aGlzLl90ZXh0YXJlYT10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpLG89bi5zdHlsZTtvLnBvc2l0aW9uPSJmaXhlZCIsby50b3A9by5vcGFjaXR5PSIwIixvLmxlZnQ9Ii05OTllbSIsbi5zZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiwidHJ1ZSIpLG4udmFsdWU9dCx0aGlzLl9kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG4pfWNvcHkoKXtjb25zdCB0PXRoaXMuX3RleHRhcmVhO2xldCBlPSExO3RyeXtpZih0KXtjb25zdCBuPXRoaXMuX2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7dC5zZWxlY3QoKSx0LnNldFNlbGVjdGlvblJhbmdlKDAsdC52YWx1ZS5sZW5ndGgpLGU9dGhpcy5fZG9jdW1lbnQuZXhlY0NvbW1hbmQoImNvcHkiKSxuJiZuLmZvY3VzKCl9fWNhdGNoKHQpe31yZXR1cm4gZX1kZXN0cm95KCl7Y29uc3QgdD10aGlzLl90ZXh0YXJlYTt0JiYodC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCksdGhpcy5fdGV4dGFyZWE9dm9pZCAwKX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NsYXNzIFlXe2NvbnN0cnVjdG9yKHQpe3RoaXMuX2RvY3VtZW50PXR9Y29weSh0KXtjb25zdCBlPXRoaXMuYmVnaW5Db3B5KHQpLG49ZS5jb3B5KCk7cmV0dXJuIGUuZGVzdHJveSgpLG59YmVnaW5Db3B5KHQpe3JldHVybiBuZXcgR1codCx0aGlzLl9kb2N1bWVudCl9fVlXLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxZVykodXMoVUMpKX0sWVcuybVwcm92PWxvKHtmYWN0b3J5OmZ1bmN0aW9uIHQoKXtyZXR1cm4gbmV3IFlXKHVzKFVDKSl9LHRva2VuOllXLHByb3ZpZGVkSW46InJvb3QifSksWVcuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbVUNdfV19XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFlXLFt7dHlwZTpKbSxhcmdzOlt7cHJvdmlkZWRJbjoicm9vdCJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbVUNdfV19XX0pLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3QgcVc9bmV3IE5yKCJDREtfQ09QWV9UT19DTElQQk9BUkRfQ09ORklHIik7Y2xhc3MgWld7Y29uc3RydWN0b3IodCxlLG4pe3RoaXMuX2NsaXBib2FyZD10LHRoaXMuX25nWm9uZT1lLHRoaXMudGV4dD0iIix0aGlzLmF0dGVtcHRzPTEsdGhpcy5jb3BpZWQ9bmV3IEFiLHRoaXMuX3BlbmRpbmc9bmV3IFNldCxuJiZudWxsIT1uLmF0dGVtcHRzJiYodGhpcy5hdHRlbXB0cz1uLmF0dGVtcHRzKX1jb3B5KHQ9dGhpcy5hdHRlbXB0cyl7aWYodD4xKXtsZXQgZT10O2NvbnN0IG49dGhpcy5fY2xpcGJvYXJkLmJlZ2luQ29weSh0aGlzLnRleHQpO3RoaXMuX3BlbmRpbmcuYWRkKG4pO2NvbnN0IG89KCk9Pntjb25zdCB0PW4uY29weSgpO3R8fCEtLWV8fHRoaXMuX2Rlc3Ryb3llZD8odGhpcy5fY3VycmVudFRpbWVvdXQ9bnVsbCx0aGlzLl9wZW5kaW5nLmRlbGV0ZShuKSxuLmRlc3Ryb3koKSx0aGlzLmNvcGllZC5lbWl0KHQpKTp0aGlzLl9jdXJyZW50VGltZW91dD10aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCgpPT5zZXRUaW1lb3V0KG8sMSkpKX07bygpfWVsc2UgdGhpcy5jb3BpZWQuZW1pdCh0aGlzLl9jbGlwYm9hcmQuY29weSh0aGlzLnRleHQpKX1uZ09uRGVzdHJveSgpe3RoaXMuX2N1cnJlbnRUaW1lb3V0JiZjbGVhclRpbWVvdXQodGhpcy5fY3VycmVudFRpbWVvdXQpLHRoaXMuX3BlbmRpbmcuZm9yRWFjaCgodD0+dC5kZXN0cm95KCkpKSx0aGlzLl9wZW5kaW5nLmNsZWFyKCksdGhpcy5fZGVzdHJveWVkPSEwfX1aVy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8WlcpKE11KFlXKSxNdSh0QyksTXUocVcsOCkpfSxaVy7JtWRpcj1Kbyh7dHlwZTpaVyxzZWxlY3RvcnM6W1siIiwiY2RrQ29weVRvQ2xpcGJvYXJkIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MSZlJiZOdSgiY2xpY2siLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uY29weSgpfSkpfSxpbnB1dHM6e3RleHQ6WyJjZGtDb3B5VG9DbGlwYm9hcmQiLCJ0ZXh0Il0sYXR0ZW1wdHM6WyJjZGtDb3B5VG9DbGlwYm9hcmRBdHRlbXB0cyIsImF0dGVtcHRzIl19LG91dHB1dHM6e2NvcGllZDoiY2RrQ29weVRvQ2xpcGJvYXJkQ29waWVkIn19KSxaVy5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOllXfSx7dHlwZTp0Q30se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltxV119XX1dLFpXLnByb3BEZWNvcmF0b3JzPXt0ZXh0Olt7dHlwZTp5XyxhcmdzOlsiY2RrQ29weVRvQ2xpcGJvYXJkIl19XSxhdHRlbXB0czpbe3R5cGU6eV8sYXJnczpbImNka0NvcHlUb0NsaXBib2FyZEF0dGVtcHRzIl19XSxjb3BpZWQ6W3t0eXBlOl9fLGFyZ3M6WyJjZGtDb3B5VG9DbGlwYm9hcmRDb3BpZWQiXX1dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFpXLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6IltjZGtDb3B5VG9DbGlwYm9hcmRdIixob3N0OnsiKGNsaWNrKSI6ImNvcHkoKSJ9fV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6WVd9LHt0eXBlOnRDfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W3FXXX1dfV19KSx7dGV4dDpbe3R5cGU6eV8sYXJnczpbImNka0NvcHlUb0NsaXBib2FyZCJdfV0sYXR0ZW1wdHM6W3t0eXBlOnlfLGFyZ3M6WyJjZGtDb3B5VG9DbGlwYm9hcmRBdHRlbXB0cyJdfV0sY29waWVkOlt7dHlwZTpfXyxhcmdzOlsiY2RrQ29weVRvQ2xpcGJvYXJkQ29waWVkIl19XX0pOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3MgWFd7fWZ1bmN0aW9uIEtXKHQpe3JldHVybiBFcnJvcihgVW5hYmxlIHRvIGZpbmQgaWNvbiB3aXRoIHRoZSBuYW1lICIke3R9ImApfWZ1bmN0aW9uIEpXKHQpe3JldHVybiBFcnJvcihgVGhlIFVSTCBwcm92aWRlZCB0byBNYXRJY29uUmVnaXN0cnkgd2FzIG5vdCB0cnVzdGVkIGFzIGEgcmVzb3VyY2UgVVJMIHZpYSBBbmd1bGFyJ3MgRG9tU2FuaXRpemVyLiBBdHRlbXB0ZWQgVVJMIHdhcyAiJHt0fSIuYCl9ZnVuY3Rpb24gUVcodCl7cmV0dXJuIEVycm9yKGBUaGUgbGl0ZXJhbCBwcm92aWRlZCB0byBNYXRJY29uUmVnaXN0cnkgd2FzIG5vdCB0cnVzdGVkIGFzIHNhZmUgSFRNTCBieSBBbmd1bGFyJ3MgRG9tU2FuaXRpemVyLiBBdHRlbXB0ZWQgbGl0ZXJhbCB3YXMgIiR7dH0iLmApfVhXLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxYVyl9LFhXLsm1bW9kPVpvKHt0eXBlOlhXfSksWFcuybVpbmo9Y28oe30pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oWFcse2RlY2xhcmF0aW9uczpbWlddLGV4cG9ydHM6W1pXXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoWFcsW3t0eXBlOmtfLGFyZ3M6W3tkZWNsYXJhdGlvbnM6W1pXXSxleHBvcnRzOltaV119XX1dLG51bGwsbnVsbCk7Y2xhc3MgJFd7Y29uc3RydWN0b3IodCxlLG4pe3RoaXMudXJsPXQsdGhpcy5zdmdUZXh0PWUsdGhpcy5vcHRpb25zPW59fWNsYXNzIHRHe2NvbnN0cnVjdG9yKHQsZSxuLG8pe3RoaXMuX2h0dHBDbGllbnQ9dCx0aGlzLl9zYW5pdGl6ZXI9ZSx0aGlzLl9lcnJvckhhbmRsZXI9byx0aGlzLl9zdmdJY29uQ29uZmlncz1uZXcgTWFwLHRoaXMuX2ljb25TZXRDb25maWdzPW5ldyBNYXAsdGhpcy5fY2FjaGVkSWNvbnNCeVVybD1uZXcgTWFwLHRoaXMuX2luUHJvZ3Jlc3NVcmxGZXRjaGVzPW5ldyBNYXAsdGhpcy5fZm9udENzc0NsYXNzZXNCeUFsaWFzPW5ldyBNYXAsdGhpcy5fcmVzb2x2ZXJzPVtdLHRoaXMuX2RlZmF1bHRGb250U2V0Q2xhc3M9Im1hdGVyaWFsLWljb25zIix0aGlzLl9kb2N1bWVudD1ufWFkZFN2Z0ljb24odCxlLG4pe3JldHVybiB0aGlzLmFkZFN2Z0ljb25Jbk5hbWVzcGFjZSgiIix0LGUsbil9YWRkU3ZnSWNvbkxpdGVyYWwodCxlLG4pe3JldHVybiB0aGlzLmFkZFN2Z0ljb25MaXRlcmFsSW5OYW1lc3BhY2UoIiIsdCxlLG4pfWFkZFN2Z0ljb25Jbk5hbWVzcGFjZSh0LGUsbixvKXtyZXR1cm4gdGhpcy5fYWRkU3ZnSWNvbkNvbmZpZyh0LGUsbmV3ICRXKG4sbnVsbCxvKSl9YWRkU3ZnSWNvblJlc29sdmVyKHQpe3JldHVybiB0aGlzLl9yZXNvbHZlcnMucHVzaCh0KSx0aGlzfWFkZFN2Z0ljb25MaXRlcmFsSW5OYW1lc3BhY2UodCxlLG4sbyl7Y29uc3QgaT10aGlzLl9zYW5pdGl6ZXIuc2FuaXRpemUoeGwuSFRNTCxuKTtpZighaSl0aHJvdyBRVyhuKTtyZXR1cm4gdGhpcy5fYWRkU3ZnSWNvbkNvbmZpZyh0LGUsbmV3ICRXKCIiLGksbykpfWFkZFN2Z0ljb25TZXQodCxlKXtyZXR1cm4gdGhpcy5hZGRTdmdJY29uU2V0SW5OYW1lc3BhY2UoIiIsdCxlKX1hZGRTdmdJY29uU2V0TGl0ZXJhbCh0LGUpe3JldHVybiB0aGlzLmFkZFN2Z0ljb25TZXRMaXRlcmFsSW5OYW1lc3BhY2UoIiIsdCxlKX1hZGRTdmdJY29uU2V0SW5OYW1lc3BhY2UodCxlLG4pe3JldHVybiB0aGlzLl9hZGRTdmdJY29uU2V0Q29uZmlnKHQsbmV3ICRXKGUsbnVsbCxuKSl9YWRkU3ZnSWNvblNldExpdGVyYWxJbk5hbWVzcGFjZSh0LGUsbil7Y29uc3Qgbz10aGlzLl9zYW5pdGl6ZXIuc2FuaXRpemUoeGwuSFRNTCxlKTtpZighbyl0aHJvdyBRVyhlKTtyZXR1cm4gdGhpcy5fYWRkU3ZnSWNvblNldENvbmZpZyh0LG5ldyAkVygiIixvLG4pKX1yZWdpc3RlckZvbnRDbGFzc0FsaWFzKHQsZT10KXtyZXR1cm4gdGhpcy5fZm9udENzc0NsYXNzZXNCeUFsaWFzLnNldCh0LGUpLHRoaXN9Y2xhc3NOYW1lRm9yRm9udEFsaWFzKHQpe3JldHVybiB0aGlzLl9mb250Q3NzQ2xhc3Nlc0J5QWxpYXMuZ2V0KHQpfHx0fXNldERlZmF1bHRGb250U2V0Q2xhc3ModCl7cmV0dXJuIHRoaXMuX2RlZmF1bHRGb250U2V0Q2xhc3M9dCx0aGlzfWdldERlZmF1bHRGb250U2V0Q2xhc3MoKXtyZXR1cm4gdGhpcy5fZGVmYXVsdEZvbnRTZXRDbGFzc31nZXRTdmdJY29uRnJvbVVybCh0KXtjb25zdCBlPXRoaXMuX3Nhbml0aXplci5zYW5pdGl6ZSh4bC5SRVNPVVJDRV9VUkwsdCk7aWYoIWUpdGhyb3cgSlcodCk7Y29uc3Qgbj10aGlzLl9jYWNoZWRJY29uc0J5VXJsLmdldChlKTtyZXR1cm4gbj9aKGVHKG4pKTp0aGlzLl9sb2FkU3ZnSWNvbkZyb21Db25maWcobmV3ICRXKHQsbnVsbCkpLnBpcGUoX24oKHQ9PnRoaXMuX2NhY2hlZEljb25zQnlVcmwuc2V0KGUsdCkpKSxodCgodD0+ZUcodCkpKSl9Z2V0TmFtZWRTdmdJY29uKHQsZT0iIil7Y29uc3Qgbj1uRyhlLHQpO2xldCBvPXRoaXMuX3N2Z0ljb25Db25maWdzLmdldChuKTtpZihvKXJldHVybiB0aGlzLl9nZXRTdmdGcm9tQ29uZmlnKG8pO2lmKG89dGhpcy5fZ2V0SWNvbkNvbmZpZ0Zyb21SZXNvbHZlcnMoZSx0KSxvKXJldHVybiB0aGlzLl9zdmdJY29uQ29uZmlncy5zZXQobixvKSx0aGlzLl9nZXRTdmdGcm9tQ29uZmlnKG8pO2NvbnN0IGk9dGhpcy5faWNvblNldENvbmZpZ3MuZ2V0KGUpO3JldHVybiBpP3RoaXMuX2dldFN2Z0Zyb21JY29uU2V0Q29uZmlncyh0LGkpOlgoS1cobikpfW5nT25EZXN0cm95KCl7dGhpcy5fcmVzb2x2ZXJzPVtdLHRoaXMuX3N2Z0ljb25Db25maWdzLmNsZWFyKCksdGhpcy5faWNvblNldENvbmZpZ3MuY2xlYXIoKSx0aGlzLl9jYWNoZWRJY29uc0J5VXJsLmNsZWFyKCl9X2dldFN2Z0Zyb21Db25maWcodCl7cmV0dXJuIHQuc3ZnVGV4dD9aKGVHKHRoaXMuX3N2Z0VsZW1lbnRGcm9tQ29uZmlnKHQpKSk6dGhpcy5fbG9hZFN2Z0ljb25Gcm9tQ29uZmlnKHQpLnBpcGUoaHQoKHQ9PmVHKHQpKSkpfV9nZXRTdmdGcm9tSWNvblNldENvbmZpZ3ModCxlKXtjb25zdCBuPXRoaXMuX2V4dHJhY3RJY29uV2l0aE5hbWVGcm9tQW55U2V0KHQsZSk7cmV0dXJuIG4/WihuKTpMdChlLmZpbHRlcigodD0+IXQuc3ZnVGV4dCkpLm1hcCgodD0+dGhpcy5fbG9hZFN2Z0ljb25TZXRGcm9tQ29uZmlnKHQpLnBpcGUocmUoKGU9Pntjb25zdCBuPXRoaXMuX3Nhbml0aXplci5zYW5pdGl6ZSh4bC5SRVNPVVJDRV9VUkwsdC51cmwpO3JldHVybiB0aGlzLl9lcnJvckhhbmRsZXIuaGFuZGxlRXJyb3IobmV3IEVycm9yKGBMb2FkaW5nIGljb24gc2V0IFVSTDogJHtufSBmYWlsZWQ6ICR7ZS5tZXNzYWdlfWApKSxaKG51bGwpfSkpKSkpKS5waXBlKGh0KCgoKT0+e2NvbnN0IG49dGhpcy5fZXh0cmFjdEljb25XaXRoTmFtZUZyb21BbnlTZXQodCxlKTtpZighbil0aHJvdyBLVyh0KTtyZXR1cm4gbn0pKSl9X2V4dHJhY3RJY29uV2l0aE5hbWVGcm9tQW55U2V0KHQsZSl7Zm9yKGxldCBuPWUubGVuZ3RoLTE7bj49MDtuLS0pe2NvbnN0IG89ZVtuXTtpZihvLnN2Z1RleHQmJm8uc3ZnVGV4dC5pbmRleE9mKHQpPi0xKXtjb25zdCBlPXRoaXMuX3N2Z0VsZW1lbnRGcm9tQ29uZmlnKG8pLG49dGhpcy5fZXh0cmFjdFN2Z0ljb25Gcm9tU2V0KGUsdCxvLm9wdGlvbnMpO2lmKG4pcmV0dXJuIG59fXJldHVybiBudWxsfV9sb2FkU3ZnSWNvbkZyb21Db25maWcodCl7cmV0dXJuIHRoaXMuX2ZldGNoSWNvbih0KS5waXBlKF9uKChlPT50LnN2Z1RleHQ9ZSkpLGh0KCgoKT0+dGhpcy5fc3ZnRWxlbWVudEZyb21Db25maWcodCkpKSl9X2xvYWRTdmdJY29uU2V0RnJvbUNvbmZpZyh0KXtyZXR1cm4gdC5zdmdUZXh0P1oobnVsbCk6dGhpcy5fZmV0Y2hJY29uKHQpLnBpcGUoX24oKGU9PnQuc3ZnVGV4dD1lKSkpfV9leHRyYWN0U3ZnSWNvbkZyb21TZXQodCxlLG4pe2NvbnN0IG89dC5xdWVyeVNlbGVjdG9yKGBbaWQ9IiR7ZX0iXWApO2lmKCFvKXJldHVybiBudWxsO2NvbnN0IGk9by5jbG9uZU5vZGUoITApO2lmKGkucmVtb3ZlQXR0cmlidXRlKCJpZCIpLCJzdmciPT09aS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXJldHVybiB0aGlzLl9zZXRTdmdBdHRyaWJ1dGVzKGksbik7aWYoInN5bWJvbCI9PT1pLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpcmV0dXJuIHRoaXMuX3NldFN2Z0F0dHJpYnV0ZXModGhpcy5fdG9TdmdFbGVtZW50KGkpLG4pO2NvbnN0IGE9dGhpcy5fc3ZnRWxlbWVudEZyb21TdHJpbmcoIjxzdmc+PC9zdmc+Iik7cmV0dXJuIGEuYXBwZW5kQ2hpbGQoaSksdGhpcy5fc2V0U3ZnQXR0cmlidXRlcyhhLG4pfV9zdmdFbGVtZW50RnJvbVN0cmluZyh0KXtjb25zdCBlPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpO2UuaW5uZXJIVE1MPXQ7Y29uc3Qgbj1lLnF1ZXJ5U2VsZWN0b3IoInN2ZyIpO2lmKCFuKXRocm93IEVycm9yKCI8c3ZnPiB0YWcgbm90IGZvdW5kIik7cmV0dXJuIG59X3RvU3ZnRWxlbWVudCh0KXtjb25zdCBlPXRoaXMuX3N2Z0VsZW1lbnRGcm9tU3RyaW5nKCI8c3ZnPjwvc3ZnPiIpLG49dC5hdHRyaWJ1dGVzO2ZvcihsZXQgdD0wO3Q8bi5sZW5ndGg7dCsrKXtjb25zdHtuYW1lOm8sdmFsdWU6aX09blt0XTsiaWQiIT09byYmZS5zZXRBdHRyaWJ1dGUobyxpKX1mb3IobGV0IG49MDtuPHQuY2hpbGROb2Rlcy5sZW5ndGg7bisrKXQuY2hpbGROb2Rlc1tuXS5ub2RlVHlwZT09PXRoaXMuX2RvY3VtZW50LkVMRU1FTlRfTk9ERSYmZS5hcHBlbmRDaGlsZCh0LmNoaWxkTm9kZXNbbl0uY2xvbmVOb2RlKCEwKSk7cmV0dXJuIGV9X3NldFN2Z0F0dHJpYnV0ZXModCxlKXtyZXR1cm4gdC5zZXRBdHRyaWJ1dGUoImZpdCIsIiIpLHQuc2V0QXR0cmlidXRlKCJoZWlnaHQiLCIxMDAlIiksdC5zZXRBdHRyaWJ1dGUoIndpZHRoIiwiMTAwJSIpLHQuc2V0QXR0cmlidXRlKCJwcmVzZXJ2ZUFzcGVjdFJhdGlvIiwieE1pZFlNaWQgbWVldCIpLHQuc2V0QXR0cmlidXRlKCJmb2N1c2FibGUiLCJmYWxzZSIpLGUmJmUudmlld0JveCYmdC5zZXRBdHRyaWJ1dGUoInZpZXdCb3giLGUudmlld0JveCksdH1fZmV0Y2hJY29uKHQpe3ZhciBlO2NvbnN0e3VybDpuLG9wdGlvbnM6b309dCxpPW51bGwhPT0oZT1udWxsPT1vP3ZvaWQgMDpvLndpdGhDcmVkZW50aWFscykmJnZvaWQgMCE9PWUmJmU7aWYoIXRoaXMuX2h0dHBDbGllbnQpdGhyb3coZnVuY3Rpb24gYSgpe3JldHVybiBFcnJvcigiQ291bGQgbm90IGZpbmQgSHR0cENsaWVudCBwcm92aWRlciBmb3IgdXNlIHdpdGggQW5ndWxhciBNYXRlcmlhbCBpY29ucy4gUGxlYXNlIGluY2x1ZGUgdGhlIEh0dHBDbGllbnRNb2R1bGUgZnJvbSBAYW5ndWxhci9jb21tb24vaHR0cCBpbiB5b3VyIGFwcCBpbXBvcnRzLiIpfSkoKTtpZihudWxsPT1uKXRocm93IEVycm9yKGBDYW5ub3QgZmV0Y2ggaWNvbiBmcm9tIFVSTCAiJHtufSIuYCk7Y29uc3Qgcj10aGlzLl9zYW5pdGl6ZXIuc2FuaXRpemUoeGwuUkVTT1VSQ0VfVVJMLG4pO2lmKCFyKXRocm93IEpXKG4pO2NvbnN0IHM9dGhpcy5faW5Qcm9ncmVzc1VybEZldGNoZXMuZ2V0KHIpO2lmKHMpcmV0dXJuIHM7Y29uc3QgbD10aGlzLl9odHRwQ2xpZW50LmdldChyLHtyZXNwb25zZVR5cGU6InRleHQiLHdpdGhDcmVkZW50aWFsczppfSkucGlwZSgoZnVuY3Rpb24gYyh0KXtyZXR1cm4gZT0+ZS5saWZ0KG5ldyBCZSh0KSl9KSgoKCk9PnRoaXMuX2luUHJvZ3Jlc3NVcmxGZXRjaGVzLmRlbGV0ZShyKSkpLG9uKCkpO3JldHVybiB0aGlzLl9pblByb2dyZXNzVXJsRmV0Y2hlcy5zZXQocixsKSxsfV9hZGRTdmdJY29uQ29uZmlnKHQsZSxuKXtyZXR1cm4gdGhpcy5fc3ZnSWNvbkNvbmZpZ3Muc2V0KG5HKHQsZSksbiksdGhpc31fYWRkU3ZnSWNvblNldENvbmZpZyh0LGUpe2NvbnN0IG49dGhpcy5faWNvblNldENvbmZpZ3MuZ2V0KHQpO3JldHVybiBuP24ucHVzaChlKTp0aGlzLl9pY29uU2V0Q29uZmlncy5zZXQodCxbZV0pLHRoaXN9X3N2Z0VsZW1lbnRGcm9tQ29uZmlnKHQpe2lmKCF0LnN2Z0VsZW1lbnQpe2NvbnN0IGU9dGhpcy5fc3ZnRWxlbWVudEZyb21TdHJpbmcodC5zdmdUZXh0KTt0aGlzLl9zZXRTdmdBdHRyaWJ1dGVzKGUsdC5vcHRpb25zKSx0LnN2Z0VsZW1lbnQ9ZX1yZXR1cm4gdC5zdmdFbGVtZW50fV9nZXRJY29uQ29uZmlnRnJvbVJlc29sdmVycyh0LGUpe2ZvcihsZXQgbz0wO288dGhpcy5fcmVzb2x2ZXJzLmxlbmd0aDtvKyspe2NvbnN0IGk9dGhpcy5fcmVzb2x2ZXJzW29dKGUsdCk7aWYoaSlyZXR1cm4obj1pKS51cmwmJm4ub3B0aW9ucz9uZXcgJFcoaS51cmwsbnVsbCxpLm9wdGlvbnMpOm5ldyAkVyhpLG51bGwpfXZhciBuOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi99fWZ1bmN0aW9uIGVHKHQpe3JldHVybiB0LmNsb25lTm9kZSghMCl9ZnVuY3Rpb24gbkcodCxlKXtyZXR1cm4gdCsiOiIrZX10Ry7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8dEcpKHVzKHFELDgpLHVzKFN4KSx1cyhVQyw4KSx1cyhFbCkpfSx0Ry7JtXByb3Y9bG8oe2ZhY3Rvcnk6ZnVuY3Rpb24gdCgpe3JldHVybiBuZXcgdEcodXMocUQsOCksdXMoU3gpLHVzKFVDLDgpLHVzKEVsKSl9LHRva2VuOnRHLHByb3ZpZGVkSW46InJvb3QifSksdEcuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpxRCxkZWNvcmF0b3JzOlt7dHlwZTpfc31dfSx7dHlwZTpTeH0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltVQ119XX0se3R5cGU6RWx9XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHRHLFt7dHlwZTpKbSxhcmdzOlt7cHJvdmlkZWRJbjoicm9vdCJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpxRCxkZWNvcmF0b3JzOlt7dHlwZTpfc31dfSx7dHlwZTpTeH0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltVQ119XX0se3R5cGU6RWx9XX0pLG51bGwpLG5ldyBfcyxuZXcgTXMsbmV3IF9zLG5ldyBfcztjb25zdCBvRz1JeihjbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLl9lbGVtZW50UmVmPXR9fSksaUc9bmV3IE5yKCJtYXQtaWNvbi1sb2NhdGlvbiIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24gYUcoKXtjb25zdCB0PWdzKFVDKSxlPXQ/dC5sb2NhdGlvbjpudWxsO3JldHVybntnZXRQYXRobmFtZTooKT0+ZT9lLnBhdGhuYW1lK2Uuc2VhcmNoOiIifX19KSxyRz1bImNsaXAtcGF0aCIsImNvbG9yLXByb2ZpbGUiLCJzcmMiLCJjdXJzb3IiLCJmaWxsIiwiZmlsdGVyIiwibWFya2VyIiwibWFya2VyLXN0YXJ0IiwibWFya2VyLW1pZCIsIm1hcmtlci1lbmQiLCJtYXNrIiwic3Ryb2tlIl0sc0c9ckcubWFwKCh0PT5gWyR7dH1dYCkpLmpvaW4oIiwgIiksbEc9L151cmxcKFsnIl0/IyguKj8pWyciXT9cKSQvO2NsYXNzIGNHIGV4dGVuZHMgb0d7Y29uc3RydWN0b3IodCxlLG4sbyxpKXtzdXBlcih0KSx0aGlzLl9pY29uUmVnaXN0cnk9ZSx0aGlzLl9sb2NhdGlvbj1vLHRoaXMuX2Vycm9ySGFuZGxlcj1pLHRoaXMuX2lubGluZT0hMSx0aGlzLl9jdXJyZW50SWNvbkZldGNoPWwuRU1QVFksbnx8dC5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCJ0cnVlIil9Z2V0IGlubGluZSgpe3JldHVybiB0aGlzLl9pbmxpbmV9c2V0IGlubGluZSh0KXt0aGlzLl9pbmxpbmU9ckkodCl9Z2V0IHN2Z0ljb24oKXtyZXR1cm4gdGhpcy5fc3ZnSWNvbn1zZXQgc3ZnSWNvbih0KXt0IT09dGhpcy5fc3ZnSWNvbiYmKHQ/dGhpcy5fdXBkYXRlU3ZnSWNvbih0KTp0aGlzLl9zdmdJY29uJiZ0aGlzLl9jbGVhclN2Z0VsZW1lbnQoKSx0aGlzLl9zdmdJY29uPXQpfWdldCBmb250U2V0KCl7cmV0dXJuIHRoaXMuX2ZvbnRTZXR9c2V0IGZvbnRTZXQodCl7Y29uc3QgZT10aGlzLl9jbGVhbnVwRm9udFZhbHVlKHQpO2UhPT10aGlzLl9mb250U2V0JiYodGhpcy5fZm9udFNldD1lLHRoaXMuX3VwZGF0ZUZvbnRJY29uQ2xhc3NlcygpKX1nZXQgZm9udEljb24oKXtyZXR1cm4gdGhpcy5fZm9udEljb259c2V0IGZvbnRJY29uKHQpe2NvbnN0IGU9dGhpcy5fY2xlYW51cEZvbnRWYWx1ZSh0KTtlIT09dGhpcy5fZm9udEljb24mJih0aGlzLl9mb250SWNvbj1lLHRoaXMuX3VwZGF0ZUZvbnRJY29uQ2xhc3NlcygpKX1fc3BsaXRJY29uTmFtZSh0KXtpZighdClyZXR1cm5bIiIsIiJdO2NvbnN0IGU9dC5zcGxpdCgiOiIpO3N3aXRjaChlLmxlbmd0aCl7Y2FzZSAxOnJldHVyblsiIixlWzBdXTtjYXNlIDI6cmV0dXJuIGU7ZGVmYXVsdDp0aHJvdyBFcnJvcihgSW52YWxpZCBpY29uIG5hbWU6ICIke3R9ImApfX1uZ09uSW5pdCgpe3RoaXMuX3VwZGF0ZUZvbnRJY29uQ2xhc3NlcygpfW5nQWZ0ZXJWaWV3Q2hlY2tlZCgpe2NvbnN0IHQ9dGhpcy5fZWxlbWVudHNXaXRoRXh0ZXJuYWxSZWZlcmVuY2VzO2lmKHQmJnQuc2l6ZSl7Y29uc3QgdD10aGlzLl9sb2NhdGlvbi5nZXRQYXRobmFtZSgpO3QhPT10aGlzLl9wcmV2aW91c1BhdGgmJih0aGlzLl9wcmV2aW91c1BhdGg9dCx0aGlzLl9wcmVwZW5kUGF0aFRvUmVmZXJlbmNlcyh0KSl9fW5nT25EZXN0cm95KCl7dGhpcy5fY3VycmVudEljb25GZXRjaC51bnN1YnNjcmliZSgpLHRoaXMuX2VsZW1lbnRzV2l0aEV4dGVybmFsUmVmZXJlbmNlcyYmdGhpcy5fZWxlbWVudHNXaXRoRXh0ZXJuYWxSZWZlcmVuY2VzLmNsZWFyKCl9X3VzaW5nRm9udEljb24oKXtyZXR1cm4hdGhpcy5zdmdJY29ufV9zZXRTdmdFbGVtZW50KHQpe3RoaXMuX2NsZWFyU3ZnRWxlbWVudCgpO2NvbnN0IGU9dC5xdWVyeVNlbGVjdG9yQWxsKCJzdHlsZSIpO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKWVbdF0udGV4dENvbnRlbnQrPSIgIjtjb25zdCBuPXRoaXMuX2xvY2F0aW9uLmdldFBhdGhuYW1lKCk7dGhpcy5fcHJldmlvdXNQYXRoPW4sdGhpcy5fY2FjaGVDaGlsZHJlbldpdGhFeHRlcm5hbFJlZmVyZW5jZXModCksdGhpcy5fcHJlcGVuZFBhdGhUb1JlZmVyZW5jZXMobiksdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKHQpfV9jbGVhclN2Z0VsZW1lbnQoKXtjb25zdCB0PXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtsZXQgZT10LmNoaWxkTm9kZXMubGVuZ3RoO2Zvcih0aGlzLl9lbGVtZW50c1dpdGhFeHRlcm5hbFJlZmVyZW5jZXMmJnRoaXMuX2VsZW1lbnRzV2l0aEV4dGVybmFsUmVmZXJlbmNlcy5jbGVhcigpO2UtLTspe2NvbnN0IG49dC5jaGlsZE5vZGVzW2VdOzE9PT1uLm5vZGVUeXBlJiYic3ZnIiE9PW4ubm9kZU5hbWUudG9Mb3dlckNhc2UoKXx8dC5yZW1vdmVDaGlsZChuKX19X3VwZGF0ZUZvbnRJY29uQ2xhc3Nlcygpe2lmKCF0aGlzLl91c2luZ0ZvbnRJY29uKCkpcmV0dXJuO2NvbnN0IHQ9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LGU9dGhpcy5mb250U2V0P3RoaXMuX2ljb25SZWdpc3RyeS5jbGFzc05hbWVGb3JGb250QWxpYXModGhpcy5mb250U2V0KTp0aGlzLl9pY29uUmVnaXN0cnkuZ2V0RGVmYXVsdEZvbnRTZXRDbGFzcygpO2UhPXRoaXMuX3ByZXZpb3VzRm9udFNldENsYXNzJiYodGhpcy5fcHJldmlvdXNGb250U2V0Q2xhc3MmJnQuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLl9wcmV2aW91c0ZvbnRTZXRDbGFzcyksZSYmdC5jbGFzc0xpc3QuYWRkKGUpLHRoaXMuX3ByZXZpb3VzRm9udFNldENsYXNzPWUpLHRoaXMuZm9udEljb24hPXRoaXMuX3ByZXZpb3VzRm9udEljb25DbGFzcyYmKHRoaXMuX3ByZXZpb3VzRm9udEljb25DbGFzcyYmdC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuX3ByZXZpb3VzRm9udEljb25DbGFzcyksdGhpcy5mb250SWNvbiYmdC5jbGFzc0xpc3QuYWRkKHRoaXMuZm9udEljb24pLHRoaXMuX3ByZXZpb3VzRm9udEljb25DbGFzcz10aGlzLmZvbnRJY29uKX1fY2xlYW51cEZvbnRWYWx1ZSh0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/dC50cmltKCkuc3BsaXQoIiAiKVswXTp0fV9wcmVwZW5kUGF0aFRvUmVmZXJlbmNlcyh0KXtjb25zdCBlPXRoaXMuX2VsZW1lbnRzV2l0aEV4dGVybmFsUmVmZXJlbmNlcztlJiZlLmZvckVhY2goKChlLG4pPT57ZS5mb3JFYWNoKChlPT57bi5zZXRBdHRyaWJ1dGUoZS5uYW1lLGB1cmwoJyR7dH0jJHtlLnZhbHVlfScpYCl9KSl9KSl9X2NhY2hlQ2hpbGRyZW5XaXRoRXh0ZXJuYWxSZWZlcmVuY2VzKHQpe2NvbnN0IGU9dC5xdWVyeVNlbGVjdG9yQWxsKHNHKSxuPXRoaXMuX2VsZW1lbnRzV2l0aEV4dGVybmFsUmVmZXJlbmNlcz10aGlzLl9lbGVtZW50c1dpdGhFeHRlcm5hbFJlZmVyZW5jZXN8fG5ldyBNYXA7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0KyspckcuZm9yRWFjaCgobz0+e2NvbnN0IGk9ZVt0XSxhPWkuZ2V0QXR0cmlidXRlKG8pLHI9YT9hLm1hdGNoKGxHKTpudWxsO2lmKHIpe2xldCB0PW4uZ2V0KGkpO3R8fCh0PVtdLG4uc2V0KGksdCkpLHQucHVzaCh7bmFtZTpvLHZhbHVlOnJbMV19KX19KSl9X3VwZGF0ZVN2Z0ljb24odCl7aWYodGhpcy5fc3ZnTmFtZXNwYWNlPW51bGwsdGhpcy5fc3ZnTmFtZT1udWxsLHRoaXMuX2N1cnJlbnRJY29uRmV0Y2gudW5zdWJzY3JpYmUoKSx0KXtjb25zdFtlLG5dPXRoaXMuX3NwbGl0SWNvbk5hbWUodCk7ZSYmKHRoaXMuX3N2Z05hbWVzcGFjZT1lKSxuJiYodGhpcy5fc3ZnTmFtZT1uKSx0aGlzLl9jdXJyZW50SWNvbkZldGNoPXRoaXMuX2ljb25SZWdpc3RyeS5nZXROYW1lZFN2Z0ljb24obixlKS5waXBlKE5lKDEpKS5zdWJzY3JpYmUoKHQ9PnRoaXMuX3NldFN2Z0VsZW1lbnQodCkpLCh0PT57dGhpcy5fZXJyb3JIYW5kbGVyLmhhbmRsZUVycm9yKG5ldyBFcnJvcihgRXJyb3IgcmV0cmlldmluZyBpY29uICR7ZX06JHtufSEgJHt0Lm1lc3NhZ2V9YCkpfSkpfX19Y0cuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGNHKShNdShjaCksTXUodEcpLE9yKCJhcmlhLWhpZGRlbiIpLE11KGlHKSxNdShFbCkpfSxjRy7JtWNtcD1Vbyh7dHlwZTpjRyxzZWxlY3RvcnM6W1sibWF0LWljb24iXV0saG9zdEF0dHJzOlsicm9sZSIsImltZyIsMSwibWF0LWljb24iLCJub3RyYW5zbGF0ZSJdLGhvc3RWYXJzOjcsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsyJmUmJihObSgiZGF0YS1tYXQtaWNvbi10eXBlIixuLl91c2luZ0ZvbnRJY29uKCk/ImZvbnQiOiJzdmciKSgiZGF0YS1tYXQtaWNvbi1uYW1lIixuLl9zdmdOYW1lfHxuLmZvbnRJY29uKSgiZGF0YS1tYXQtaWNvbi1uYW1lc3BhY2UiLG4uX3N2Z05hbWVzcGFjZXx8bi5mb250U2V0KSxhZigibWF0LWljb24taW5saW5lIixuLmlubGluZSkoIm1hdC1pY29uLW5vLWNvbG9yIiwicHJpbWFyeSIhPT1uLmNvbG9yJiYiYWNjZW50IiE9PW4uY29sb3ImJiJ3YXJuIiE9PW4uY29sb3IpKX0saW5wdXRzOntjb2xvcjoiY29sb3IiLGlubGluZToiaW5saW5lIixzdmdJY29uOiJzdmdJY29uIixmb250U2V0OiJmb250U2V0Iixmb250SWNvbjoiZm9udEljb24ifSxleHBvcnRBczpbIm1hdEljb24iXSxmZWF0dXJlczpbZ21dLG5nQ29udGVudFNlbGVjdG9yczpbIioiXSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoVnUoKSxqdSgwKSl9LHN0eWxlczpbIi5tYXQtaWNvbntiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7ZmlsbDpjdXJyZW50Q29sb3I7aGVpZ2h0OjI0cHg7d2lkdGg6MjRweH0ubWF0LWljb24ubWF0LWljb24taW5saW5le2ZvbnQtc2l6ZTppbmhlcml0O2hlaWdodDppbmhlcml0O2xpbmUtaGVpZ2h0OmluaGVyaXQ7d2lkdGg6aW5oZXJpdH1bZGlyPXJ0bF0gLm1hdC1pY29uLXJ0bC1taXJyb3J7dHJhbnNmb3JtOnNjYWxlKC0xLCAxKX0ubWF0LWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSkgLm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24sLm1hdC1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kpIC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29ue2Rpc3BsYXk6YmxvY2t9Lm1hdC1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kpIC5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLWJ1dHRvbiAubWF0LWljb24sLm1hdC1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kpIC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29uLWJ1dHRvbiAubWF0LWljb257bWFyZ2luOmF1dG99XG4iXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxjRy5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmNofSx7dHlwZTp0R30se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOlJyLGFyZ3M6WyJhcmlhLWhpZGRlbiJdfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltpR119XX0se3R5cGU6RWx9XSxjRy5wcm9wRGVjb3JhdG9ycz17aW5saW5lOlt7dHlwZTp5X31dLHN2Z0ljb246W3t0eXBlOnlffV0sZm9udFNldDpbe3R5cGU6eV99XSxmb250SWNvbjpbe3R5cGU6eV99XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihjRyxbe3R5cGU6aF8sYXJnczpbe3RlbXBsYXRlOiI8bmctY29udGVudD48L25nLWNvbnRlbnQ+IixzZWxlY3RvcjoibWF0LWljb24iLGV4cG9ydEFzOiJtYXRJY29uIixpbnB1dHM6WyJjb2xvciJdLGhvc3Q6e3JvbGU6ImltZyIsY2xhc3M6Im1hdC1pY29uIG5vdHJhbnNsYXRlIiwiW2F0dHIuZGF0YS1tYXQtaWNvbi10eXBlXSI6J191c2luZ0ZvbnRJY29uKCkgPyAiZm9udCIgOiAic3ZnIicsIlthdHRyLmRhdGEtbWF0LWljb24tbmFtZV0iOiJfc3ZnTmFtZSB8fCBmb250SWNvbiIsIlthdHRyLmRhdGEtbWF0LWljb24tbmFtZXNwYWNlXSI6Il9zdmdOYW1lc3BhY2UgfHwgZm9udFNldCIsIltjbGFzcy5tYXQtaWNvbi1pbmxpbmVdIjoiaW5saW5lIiwiW2NsYXNzLm1hdC1pY29uLW5vLWNvbG9yXSI6J2NvbG9yICE9PSAicHJpbWFyeSIgJiYgY29sb3IgIT09ICJhY2NlbnQiICYmIGNvbG9yICE9PSAid2FybiInfSxlbmNhcHN1bGF0aW9uOlBvLk5vbmUsY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaCxzdHlsZXM6WyIubWF0LWljb257YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZpbGw6Y3VycmVudENvbG9yO2hlaWdodDoyNHB4O3dpZHRoOjI0cHh9Lm1hdC1pY29uLm1hdC1pY29uLWlubGluZXtmb250LXNpemU6aW5oZXJpdDtoZWlnaHQ6aW5oZXJpdDtsaW5lLWhlaWdodDppbmhlcml0O3dpZHRoOmluaGVyaXR9W2Rpcj1ydGxdIC5tYXQtaWNvbi1ydGwtbWlycm9ye3RyYW5zZm9ybTpzY2FsZSgtMSwgMSl9Lm1hdC1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kpIC5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLC5tYXQtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5KSAubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbntkaXNwbGF5OmJsb2NrfS5tYXQtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5KSAubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29uLC5tYXQtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5KSAubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29ue21hcmdpbjphdXRvfVxuIl19XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpjaH0se3R5cGU6dEd9LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpScixhcmdzOlsiYXJpYS1oaWRkZW4iXX1dfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbaUddfV19LHt0eXBlOkVsfV19KSx7aW5saW5lOlt7dHlwZTp5X31dLHN2Z0ljb246W3t0eXBlOnlffV0sZm9udFNldDpbe3R5cGU6eV99XSxmb250SWNvbjpbe3R5cGU6eV99XX0pOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3MgZEd7fWRHLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxkRyl9LGRHLsm1bW9kPVpvKHt0eXBlOmRHfSksZEcuybVpbmo9Y28oe2ltcG9ydHM6W1tUel0sVHpdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhkRyx7ZGVjbGFyYXRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuW2NHXX0saW1wb3J0czpmdW5jdGlvbigpe3JldHVybltUel19LGV4cG9ydHM6ZnVuY3Rpb24oKXtyZXR1cm5bY0csVHpdfX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoZEcsW3t0eXBlOmtfLGFyZ3M6W3tpbXBvcnRzOltUel0sZXhwb3J0czpbY0csVHpdLGRlY2xhcmF0aW9uczpbY0ddfV19XSxudWxsLG51bGwpO2NsYXNzIHBHe2NvbnN0cnVjdG9yKHQpe3RoaXMuZGlhbG9nUmVmPXQsdGhpcy50ZW5zb3Jib2FyZERvdERldlVybD0iaHR0cHM6Ly90ZW5zb3Jib2FyZC5kZXYvP3V0bV9zb3VyY2U9dGVuc29yYm9hcmQifW9uQ2xvc2UoKXt0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpfWdldENvbW1hbmRUZXh0KCl7cmV0dXJuIHRoaXMubG9nZGlyPyJ0ZW5zb3Jib2FyZCBkZXYgdXBsb2FkIC0tbG9nZGlyIFxcXG4gICAgJyIrdGhpcy5sb2dkaXIucmVwbGFjZSgvJy9nLCInXFwnJyIpKyInIjoidGVuc29yYm9hcmQgZGV2IHVwbG9hZCAtLWxvZ2RpciB7bG9nZGlyfSJ9fXBHLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxwRykoTXUoRFcpKX0scEcuybVjbXA9VW8oe3R5cGU6cEcsc2VsZWN0b3JzOltbInRiZGV2LXVwbG9hZC1kaWFsb2ctY29tcG9uZW50Il1dLGlucHV0czp7bG9nZGlyOiJsb2dkaXIifSxkZWNsczoyMSx2YXJzOjQsY29uc3RzOltbInRhcmdldCIsIl9ibGFuayIsInJlbCIsIm5vcmVmZXJyZXIgbm9vcGVuZXIiLDEsImFuY2hvci10ZXh0IiwzLCJocmVmIl0sWzEsImNvbW1hbmQiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsInRpdGxlIiwiQ2xpY2sgdG8gY29weSB0aGUgY29tbWFuZCIsMSwiY29tbWFuZC1jb3B5IiwzLCJjZGtDb3B5VG9DbGlwYm9hcmQiXSxbInN2Z0ljb24iLCJjb250ZW50X2NvcHlfMjRweCJdLFsxLCJib3R0b20tYnV0dG9ucyJdLFsibWF0LWZsYXQtYnV0dG9uIiwiIiwxLCJjbG9zZS1idXR0b24iLDMsImNsaWNrIl0sWyJtYXQtZmxhdC1idXR0b24iLCIiLCJ0YXJnZXQiLCJfYmxhbmsiLCJyZWwiLCJub3JlZmVycmVyIG5vb3BlbmVyIiwxLCJsZWFybi1tb3JlLWJ1dHRvbiIsMywiaHJlZiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoT3UoMCwiaDMiKSxNZigxLCJVcGxvYWQgdG8gVGVuc29yQm9hcmQuZGV2IiksUHUoKSxPdSgyLCJwIiksT3UoMywiYSIsMCksTWYoNCwiIFRlbnNvckJvYXJkLmRldiIpLFB1KCksTWYoNSwiIGVuYWJsZXMgeW91IHRvIGVhc2lseSBob3N0LCB0cmFjaywgYW5kIHNoYXJlIHlvdXIgTUwgZXhwZXJpbWVudHMgd2l0aCBldmVyeW9uZS4gWW91IGNhbiBzaGFyZSBhIGxpbmsgdG8gdGhlIHVwbG9hZGVkIFRlbnNvckJvYXJkIGluIHBhcGVycywgYmxvZyBwb3N0cywgYW5kIHNvY2lhbCBtZWRpYS4gVGhpcyBjYW4gc2hvd2Nhc2UgdGhlIHJlc3VsdHMgbW9yZSBlZmZlY3RpdmVseSBhbmQgaGVscHMgcmVwcm9kdWNpYmlsaXR5LlxuIiksUHUoKSxPdSg2LCJwIiksTWYoNywiVG8gdXBsb2FkIGEgbG9nZGlyIHRvIFRlbnNvckJvYXJkLmRldiwgcnVuIHRoZSBjb21tYW5kOiIpLFB1KCksT3UoOCwiZGl2IiwxKSxPdSg5LCJwcmUiKSxPdSgxMCwiY29kZSIpLE1mKDExKSxQdSgpLFB1KCksT3UoMTIsImJ1dHRvbiIsMiksd3UoMTMsIm1hdC1pY29uIiwzKSxQdSgpLFB1KCksT3UoMTQsInAiKSxNZigxNSwiIE9ubHkgY2VydGFpbiBwbHVnaW5zIGFyZSBjdXJyZW50bHkgc3VwcG9ydGVkLiBVcGxvYWRlZCBUZW5zb3JCb2FyZHMgYXJlIHB1YmxpYyBhbmQgdmlzaWJsZSB0byBldmVyeW9uZTsgZG8gbm90IHVwbG9hZCBzZW5zaXRpdmUgZGF0YS5cbiIpLFB1KCksT3UoMTYsImRpdiIsNCksT3UoMTcsImJ1dHRvbiIsNSksTnUoImNsaWNrIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uQ2xvc2UoKX0pKSxNZigxOCwiIENsb3NlICIpLFB1KCksT3UoMTksImEiLDYpLE1mKDIwLCIgTGVhcm4gbW9yZSAiKSxQdSgpLFB1KCkpLDImZSYmKEpjKDMpLFV1KCJocmVmIixuLnRlbnNvcmJvYXJkRG90RGV2VXJsLE9sKSxKYyg4KSx2ZihuLmdldENvbW1hbmRUZXh0KCkpLEpjKDEpLHZ1KCJjZGtDb3B5VG9DbGlwYm9hcmQiLG4uZ2V0Q29tbWFuZFRleHQoKSksSmMoNyksVXUoImhyZWYiLG4udGVuc29yYm9hcmREb3REZXZVcmwsT2wpKX0sZGlyZWN0aXZlczpbTkgsWlcsY0csSUhdLHN0eWxlczpbJy5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHh9Lm1hdC1oMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaGVhZGxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTVweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZ1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjA1ZW07bWFyZ2luOjAgMCA1NnB4fS5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAwNWVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXJhaXNlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdHJva2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmxhdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZhYltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbWluaS1mYWJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4fS5tYXQtY2FyZC1zdWJ0aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGVja2JveC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvb3Rlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgdHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIzZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LjU0MTY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2NjY2NjY3ZW0pfUBtZWRpYSBwcmludHsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjJlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouMjVlbSAwIC43NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxZW0gMCAxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMiksIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi0wLjA2MjVlbX0ubWF0LW1lbnUtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci12ZXJ0aWNhbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGFiLWxpbmtbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MH0ubWF0LXRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5Om5vbmV9LmNkay12aXN1YWxseS1oaWRkZW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjZ9LmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV0sIC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3hbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2tbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHt9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7fS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOi13ZWJraXQtYXV0b2ZpbGwpe2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZVtfbmdjb250ZW50LSVDT01QJV17cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fS5tYXQtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfWRpdltfbmdjb250ZW50LSVDT01QJV0sIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjoxNnB4IDB9W19uZ2hvc3QtJUNPTVAlXSA+IFtfbmdjb250ZW50LSVDT01QJV06Zmlyc3QtY2hpbGR7bWFyZ2luLXRvcDowfVtfbmdob3N0LSVDT01QJV0gPiBbX25nY29udGVudC0lQ09NUCVdOmxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfWgzW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDA7bGluZS1oZWlnaHQ6MS41fXBbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiMyMTIxMjE7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MS41fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojZmZmfS5hbmNob3ItdGV4dFtfbmdjb250ZW50LSVDT01QJV17dGV4dC1kZWNvcmF0aW9uOm5vbmV9LmNvbW1hbmRbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kOiNmNWY2Zjc7Ym9yZGVyLXJhZGl1czo0cHg7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO3BhZGRpbmc6MnB4IDEycHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmNvbW1hbmRbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuY29tbWFuZFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojNjE2MTYxfXByZVtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3cteDphdXRvfWNvZGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjEuNX0uYm90dG9tLWJ1dHRvbnNbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5jbG9zZS1idXR0b25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO21hcmdpbi1yaWdodDo4cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmNsb3NlLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5jbG9zZS1idXR0b25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfVtfbmdob3N0LSVDT01QJV0gICAubGVhcm4tbW9yZS1idXR0b25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOiMxOTc2ZDI7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5sZWFybi1tb3JlLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzQyYTVmNX0nXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIocEcsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoidGJkZXYtdXBsb2FkLWRpYWxvZy1jb21wb25lbnQiLHRlbXBsYXRlVXJsOiIuL3RiZGV2X3VwbG9hZF9kaWFsb2dfY29tcG9uZW50Lm5nLmh0bWwiLHN0eWxlVXJsczpbIi4vdGJkZXZfdXBsb2FkX2RpYWxvZ19jb21wb25lbnQuY3NzIl19XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpEV31dfSkse2xvZ2Rpcjpbe3R5cGU6eV99XX0pO2NvbnN0IG1HPXprKG1BLCh0PT50LmRhdGFfbG9jYXRpb24pKTtjbGFzcyB1R3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXQsdGhpcy5sb2dkaXIkPXRoaXMuc3RvcmUucGlwZShSayhtRykpfX1mdW5jdGlvbiBmRyh0LGUpe2lmKDEmdCl7Y29uc3QgdD1FdSgpO091KDAsImJ1dHRvbiIsMSksTnUoImNsaWNrIiwoZnVuY3Rpb24gZSgpe3JldHVybiByYSh0KSxMdSgpLm9wZW5EaWFsb2coKX0pKSxPdSgxLCJzcGFuIiwyKSx3dSgyLCJtYXQtaWNvbiIsMyksTWYoMywiIFVwbG9hZCAiKSxQdSgpLFB1KCl9fXVHLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHx1RykoTXUoRWspKX0sdUcuybVjbXA9VW8oe3R5cGU6dUcsc2VsZWN0b3JzOltbInRiZGV2LXVwbG9hZC1kaWFsb2ciXV0sZGVjbHM6Mix2YXJzOjMsY29uc3RzOltbMywibG9nZGlyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJih3dSgwLCJ0YmRldi11cGxvYWQtZGlhbG9nLWNvbXBvbmVudCIsMCksT2IoMSwiYXN5bmMiKSksMiZlJiZ2dSgibG9nZGlyIixQYigxLDEsbi5sb2dkaXIkKSl9LGRpcmVjdGl2ZXM6W3BHXSxwaXBlczpbTXZdLGVuY2Fwc3VsYXRpb246Mn0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIodUcsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoidGJkZXYtdXBsb2FkLWRpYWxvZyIsdGVtcGxhdGU6J1xuICAgIDx0YmRldi11cGxvYWQtZGlhbG9nLWNvbXBvbmVudFxuICAgICAgW2xvZ2Rpcl09ImxvZ2RpciQgfCBhc3luYyJcbiAgICA+PC90YmRldi11cGxvYWQtZGlhbG9nLWNvbXBvbmVudD5cbiAgJ31dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkVrfV19KSxudWxsKTtjb25zdCBnRz1bImxvY2FsaG9zdCIsIjEyNy4wLjAuMSJdO2NsYXNzIGhHe2NvbnN0cnVjdG9yKHQsZSl7dGhpcy53aW5kb3c9dCx0aGlzLmRpYWxvZz1lLHRoaXMuc2hvd249Z0cuaW5jbHVkZXModC5sb2NhdGlvbi5ob3N0bmFtZSl9b3BlbkRpYWxvZygpe3RoaXMuZGlhbG9nLm9wZW4odUcse3dpZHRoOiI1NjBweCJ9KX19aEcuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGhHKShNdSgid2luZG93IiksTXUoSFcpKX0saEcuybVjbXA9VW8oe3R5cGU6aEcsc2VsZWN0b3JzOltbInRiZGV2LXVwbG9hZC1idXR0b24iXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezImZSYmYWYoInNob3duIixuLnNob3duKX0sZGVjbHM6MSx2YXJzOjEsY29uc3RzOltbIm1hdC1zdHJva2VkLWJ1dHRvbiIsIiIsMywiY2xpY2siLDQsIm5nSWYiXSxbIm1hdC1zdHJva2VkLWJ1dHRvbiIsIiIsMywiY2xpY2siXSxbMSwiYnV0dG9uLWNvbnRlbnRzIl0sWyJzdmdJY29uIiwiaW5mb19vdXRsaW5lXzI0cHgiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmV20oMCxmRyw0LDAsImJ1dHRvbiIsMCksMiZlJiZ2dSgibmdJZiIsbi5zaG93bil9LGRpcmVjdGl2ZXM6W2F2LE5ILGNHXSxzdHlsZXM6WycubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1iYWRnZS1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo5cHh9Lm1hdC1iYWRnZS1sYXJnZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4fS5tYXQtaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWhlYWRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAyNHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE1cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjgzKS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1oNltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC42NykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtYm9keS1zdHJvbmdbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MCAwIDEycHh9Lm1hdC1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FwdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTJweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6MzAwIDExMnB4LzExMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wNWVtO21hcmdpbjowIDAgNTZweH0ubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNTZweC81NnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMmVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNDVweC80OHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMDVlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDM0cHgvNDBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1yYWlzZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3Ryb2tlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZsYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mYWJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW1pbmktZmFiW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtYnV0dG9uLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FyZC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjBweH0ubWF0LWNhcmQtc3VidGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hlY2tib3gtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC10cmFpbGluZy1pY29uLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC1yZW1vdmUubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxOHB4fS5tYXQtdGFibGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWhlYWRlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb290ZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jYWxlbmRhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FsZW5kYXItYm9keVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYWxlbmRhci1wZXJpb2QtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWRpYWxvZy10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTI1O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTUwJTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjVlbTt3aWR0aDoxLjVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW07bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41ZW0gMDtib3JkZXItdG9wOi44NDM3NWVtIHNvbGlkIHRyYW5zcGFyZW50fS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3RvcDotMC44NDM3NWVtO3BhZGRpbmctdG9wOi44NDM3NWVtfS5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjc1JTttYXJnaW4tdG9wOi42NjY2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNzkxNjY2NjY2N2VtKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAycHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyM2VtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzUzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi41NDE2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNjY2NjY2NjY2N2VtKX1AbWVkaWEgcHJpbnR7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIyZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIxZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMmVtKSBzY2FsZSgwLjc1KX19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjI1ZW0gMCAuNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4wOTM3NWVtO21hcmdpbi10b3A6LTAuNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MWVtIDAgMWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjg0Mzc1ZW07bWFyZ2luLXRvcDotMC4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH1pbnB1dC5tYXQtaW5wdXQtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDotMC4wNjI1ZW19Lm1hdC1tZW51LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1wYWdpbmF0b3JbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXBhZ2luYXRvci1wYWdlLXNpemVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3RbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXN0ZXBwZXItdmVydGljYWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc3RlcC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0Om5vcm1hbH0ubWF0LXN0ZXAtbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRhYi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjB9Lm1hdC10b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTZweH0ubWF0LW9wdGdyb3VwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LXNpbXBsZS1zbmFja2Jhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbltfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRyZWVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbmVzdGVkLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4fS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVdOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtcmlwcGxlLm1hdC1yaXBwbGUtdW5ib3VuZGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6NTAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7dHJhbnNmb3JtOnNjYWxlKDApfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpub25lfS5jZGstdmlzdWFsbHktaGlkZGVuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7bGVmdDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmVtcHR5e2Rpc3BsYXk6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LXBhbmVbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOmF1dG87Ym94LXNpemluZzpib3JkZXItYm94O3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7bWF4LXdpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlfS5jZGstb3ZlcmxheS1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKTtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5Oi42fS5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjMyKX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTowfS5jZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO292ZXJmbG93LXk6c2Nyb2xsfUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnR7fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5ke30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxse2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCAwcyAxbXN9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06bm90KDotd2Via2l0LWF1dG9maWxsKXthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIDBzIDFtc310ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemVbX25nY29udGVudC0lQ09NUCVde3Jlc2l6ZTpub25lfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmdbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OmF1dG8gIWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW4gIWltcG9ydGFudH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nLWZpcmVmb3hbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OjAgIWltcG9ydGFudH0ubWF0LWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX1bX25naG9zdC0lQ09NUCVdICAgYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwO2JvcmRlcjoxcHggc29saWQgI2ViZWJlYn1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBidXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9LmJ1dHRvbi1jb250ZW50c1tfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9bWF0LWljb25bX25nY29udGVudC0lQ09NUCVde21hcmdpbi1yaWdodDo2cHh9J119KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGhHLFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6InRiZGV2LXVwbG9hZC1idXR0b24iLHRlbXBsYXRlVXJsOiIuL3RiZGV2X3VwbG9hZF9idXR0b25fY29tcG9uZW50Lm5nLmh0bWwiLHN0eWxlVXJsczpbIi4vdGJkZXZfdXBsb2FkX2J1dHRvbl9jb21wb25lbnQuY3NzIl19XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpXaW5kb3csZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbIndpbmRvdyJdfV19LHt0eXBlOkhXfV19KSx7c2hvd246W3t0eXBlOkNfLGFyZ3M6WyJjbGFzcy5zaG93biJdfV19KTtjb25zdCBiRz1bIioiXTtmdW5jdGlvbiB5Ryh0LGUpe2lmKDEmdCl7Y29uc3QgdD1FdSgpO091KDAsImRpdiIsMCksTnUoImtleWRvd24iLChmdW5jdGlvbiBlKG4pe3JldHVybiByYSh0KSxMdSgpLl9oYW5kbGVLZXlkb3duKG4pfSkpKCJjbGljayIsKGZ1bmN0aW9uIGUoKXtyZXR1cm4gcmEodCksTHUoKS5jbG9zZWQuZW1pdCgiY2xpY2siKX0pKSgiQHRyYW5zZm9ybU1lbnUuc3RhcnQiLChmdW5jdGlvbiBlKG4pe3JldHVybiByYSh0KSxMdSgpLl9vbkFuaW1hdGlvblN0YXJ0KG4pfSkpKCJAdHJhbnNmb3JtTWVudS5kb25lIiwoZnVuY3Rpb24gZShuKXtyZXR1cm4gcmEodCksTHUoKS5fb25BbmltYXRpb25Eb25lKG4pfSkpLE91KDEsImRpdiIsMSksanUoMiksUHUoKSxQdSgpfWlmKDImdCl7Y29uc3QgdD1MdSgpO3Z1KCJpZCIsdC5wYW5lbElkKSgibmdDbGFzcyIsdC5fY2xhc3NMaXN0KSgiQHRyYW5zZm9ybU1lbnUiLHQuX3BhbmVsQW5pbWF0aW9uU3RhdGUpLE5tKCJhcmlhLWxhYmVsIix0LmFyaWFMYWJlbHx8bnVsbCkoImFyaWEtbGFiZWxsZWRieSIsdC5hcmlhTGFiZWxsZWRieXx8bnVsbCkoImFyaWEtZGVzY3JpYmVkYnkiLHQuYXJpYURlc2NyaWJlZGJ5fHxudWxsKX19Y29uc3QgX0c9e3RyYW5zZm9ybU1lbnU6S3goInRyYW5zZm9ybU1lbnUiLFt0Tygidm9pZCIsJHgoe29wYWNpdHk6MCx0cmFuc2Zvcm06InNjYWxlKDAuOCkifSkpLG5PKCJ2b2lkID0+IGVudGVyIixKeCgiMTIwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSkiLCR4KHtvcGFjaXR5OjEsdHJhbnNmb3JtOiJzY2FsZSgxKSJ9KSkpLG5PKCIqID0+IHZvaWQiLEp4KCIxMDBtcyAyNW1zIGxpbmVhciIsJHgoe29wYWNpdHk6MH0pKSldKSxmYWRlSW5JdGVtczpLeCgiZmFkZUluSXRlbXMiLFt0Tygic2hvd2luZyIsJHgoe29wYWNpdHk6MX0pKSxuTygidm9pZCA9PiAqIixbJHgoe29wYWNpdHk6MH0pLEp4KCI0MDBtcyAxMDBtcyBjdWJpYy1iZXppZXIoMC41NSwgMCwgMC41NSwgMC4yKSIpXSldKX0sQ0c9bmV3IE5yKCJNYXRNZW51Q29udGVudCIpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jbGFzcyBNR3tjb25zdHJ1Y3Rvcih0LGUsbixvLGksYSxyKXt0aGlzLl90ZW1wbGF0ZT10LHRoaXMuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1lLHRoaXMuX2FwcFJlZj1uLHRoaXMuX2luamVjdG9yPW8sdGhpcy5fdmlld0NvbnRhaW5lclJlZj1pLHRoaXMuX2RvY3VtZW50PWEsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9cix0aGlzLl9hdHRhY2hlZD1uZXcgeH1hdHRhY2godD17fSl7dGhpcy5fcG9ydGFsfHwodGhpcy5fcG9ydGFsPW5ldyBsRih0aGlzLl90ZW1wbGF0ZSx0aGlzLl92aWV3Q29udGFpbmVyUmVmKSksdGhpcy5kZXRhY2goKSx0aGlzLl9vdXRsZXR8fCh0aGlzLl9vdXRsZXQ9bmV3IHBGKHRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcix0aGlzLl9hcHBSZWYsdGhpcy5faW5qZWN0b3IpKTtjb25zdCBlPXRoaXMuX3RlbXBsYXRlLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuX291dGxldC5vdXRsZXRFbGVtZW50LGUpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmJiZ0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSx0aGlzLl9wb3J0YWwuYXR0YWNoKHRoaXMuX291dGxldCx0KSx0aGlzLl9hdHRhY2hlZC5uZXh0KCl9ZGV0YWNoKCl7dGhpcy5fcG9ydGFsLmlzQXR0YWNoZWQmJnRoaXMuX3BvcnRhbC5kZXRhY2goKX1uZ09uRGVzdHJveSgpe3RoaXMuX291dGxldCYmdGhpcy5fb3V0bGV0LmRpc3Bvc2UoKX19TUcuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fE1HKShNdShVaCksTXUocmgpLE11KF9DKSxNdShRcCksTXUoWGgpLE11KFVDKSxNdShIaCkpfSxNRy7JtWRpcj1Kbyh7dHlwZTpNRyxzZWxlY3RvcnM6W1sibmctdGVtcGxhdGUiLCJtYXRNZW51Q29udGVudCIsIiJdXSxmZWF0dXJlczpbaWgoW3twcm92aWRlOkNHLHVzZUV4aXN0aW5nOk1HfV0pXX0pLE1HLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6VWh9LHt0eXBlOnJofSx7dHlwZTpfQ30se3R5cGU6UXB9LHt0eXBlOlhofSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbVUNdfV19LHt0eXBlOkhofV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihNRyxbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJuZy10ZW1wbGF0ZVttYXRNZW51Q29udGVudF0iLHByb3ZpZGVyczpbe3Byb3ZpZGU6Q0csdXNlRXhpc3Rpbmc6TUd9XX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOlVofSx7dHlwZTpyaH0se3R5cGU6X0N9LHt0eXBlOlFwfSx7dHlwZTpYaH0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W1VDXX1dfSx7dHlwZTpIaH1dfSksbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCB2Rz1uZXcgTnIoIk1BVF9NRU5VX1BBTkVMIikseEc9enooTnooCi8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzc3t9KSk7Y2xhc3MgT0cgZXh0ZW5kcyB4R3tjb25zdHJ1Y3Rvcih0LGUsbixvKXtzdXBlcigpLHRoaXMuX2VsZW1lbnRSZWY9dCx0aGlzLl9mb2N1c01vbml0b3I9bix0aGlzLl9wYXJlbnRNZW51PW8sdGhpcy5yb2xlPSJtZW51aXRlbSIsdGhpcy5faG92ZXJlZD1uZXcgeCx0aGlzLl9mb2N1c2VkPW5ldyB4LHRoaXMuX2hpZ2hsaWdodGVkPSExLHRoaXMuX3RyaWdnZXJzU3VibWVudT0hMSxvJiZvLmFkZEl0ZW0mJm8uYWRkSXRlbSh0aGlzKX1mb2N1cyh0LGUpe3RoaXMuX2ZvY3VzTW9uaXRvciYmdD90aGlzLl9mb2N1c01vbml0b3IuZm9jdXNWaWEodGhpcy5fZ2V0SG9zdEVsZW1lbnQoKSx0LGUpOnRoaXMuX2dldEhvc3RFbGVtZW50KCkuZm9jdXMoZSksdGhpcy5fZm9jdXNlZC5uZXh0KHRoaXMpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX2ZvY3VzTW9uaXRvciYmdGhpcy5fZm9jdXNNb25pdG9yLm1vbml0b3IodGhpcy5fZWxlbWVudFJlZiwhMSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9mb2N1c01vbml0b3ImJnRoaXMuX2ZvY3VzTW9uaXRvci5zdG9wTW9uaXRvcmluZyh0aGlzLl9lbGVtZW50UmVmKSx0aGlzLl9wYXJlbnRNZW51JiZ0aGlzLl9wYXJlbnRNZW51LnJlbW92ZUl0ZW0mJnRoaXMuX3BhcmVudE1lbnUucmVtb3ZlSXRlbSh0aGlzKSx0aGlzLl9ob3ZlcmVkLmNvbXBsZXRlKCksdGhpcy5fZm9jdXNlZC5jb21wbGV0ZSgpfV9nZXRUYWJJbmRleCgpe3JldHVybiB0aGlzLmRpc2FibGVkPyItMSI6IjAifV9nZXRIb3N0RWxlbWVudCgpe3JldHVybiB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnR9X2NoZWNrRGlzYWJsZWQodCl7dGhpcy5kaXNhYmxlZCYmKHQucHJldmVudERlZmF1bHQoKSx0LnN0b3BQcm9wYWdhdGlvbigpKX1faGFuZGxlTW91c2VFbnRlcigpe3RoaXMuX2hvdmVyZWQubmV4dCh0aGlzKX1nZXRMYWJlbCgpe3ZhciB0LGU7Y29uc3Qgbj10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xvbmVOb2RlKCEwKSxvPW4ucXVlcnlTZWxlY3RvckFsbCgibWF0LWljb24sIC5tYXRlcmlhbC1pY29ucyIpO2ZvcihsZXQgZT0wO2U8by5sZW5ndGg7ZSsrKXtjb25zdCBuPW9bZV07bnVsbD09PSh0PW4ucGFyZW50Tm9kZSl8fHZvaWQgMD09PXR8fHQucmVtb3ZlQ2hpbGQobil9cmV0dXJuKG51bGw9PT0oZT1uLnRleHRDb250ZW50KXx8dm9pZCAwPT09ZT92b2lkIDA6ZS50cmltKCkpfHwiIn19T0cuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fE9HKShNdShjaCksTXUoVUMpLE11KHB6KSxNdSh2Ryw4KSl9LE9HLsm1Y21wPVVvKHt0eXBlOk9HLHNlbGVjdG9yczpbWyIiLCJtYXQtbWVudS1pdGVtIiwiIl1dLGhvc3RBdHRyczpbMSwibWF0LWZvY3VzLWluZGljYXRvciJdLGhvc3RWYXJzOjEwLGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MSZlJiZOdSgiY2xpY2siLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLl9jaGVja0Rpc2FibGVkKGUpfSkpKCJtb3VzZWVudGVyIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLl9oYW5kbGVNb3VzZUVudGVyKCl9KSksMiZlJiYoTm0oInJvbGUiLG4ucm9sZSkoInRhYmluZGV4IixuLl9nZXRUYWJJbmRleCgpKSgiYXJpYS1kaXNhYmxlZCIsbi5kaXNhYmxlZC50b1N0cmluZygpKSgiZGlzYWJsZWQiLG4uZGlzYWJsZWR8fG51bGwpLGFmKCJtYXQtbWVudS1pdGVtIiwhMCkoIm1hdC1tZW51LWl0ZW0taGlnaGxpZ2h0ZWQiLG4uX2hpZ2hsaWdodGVkKSgibWF0LW1lbnUtaXRlbS1zdWJtZW51LXRyaWdnZXIiLG4uX3RyaWdnZXJzU3VibWVudSkpfSxpbnB1dHM6e2Rpc2FibGVkOiJkaXNhYmxlZCIsZGlzYWJsZVJpcHBsZToiZGlzYWJsZVJpcHBsZSIscm9sZToicm9sZSJ9LGV4cG9ydEFzOlsibWF0TWVudUl0ZW0iXSxmZWF0dXJlczpbZ21dLGF0dHJzOlsibWF0LW1lbnUtaXRlbSIsIiJdLG5nQ29udGVudFNlbGVjdG9yczpiRyxkZWNsczoyLHZhcnM6Mixjb25zdHM6W1sibWF0UmlwcGxlIiwiIiwxLCJtYXQtbWVudS1yaXBwbGUiLDMsIm1hdFJpcHBsZURpc2FibGVkIiwibWF0UmlwcGxlVHJpZ2dlciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoVnUoKSxqdSgwKSx3dSgxLCJkaXYiLDApKSwyJmUmJihKYygxKSx2dSgibWF0UmlwcGxlRGlzYWJsZWQiLG4uZGlzYWJsZVJpcHBsZXx8bi5kaXNhYmxlZCkoIm1hdFJpcHBsZVRyaWdnZXIiLG4uX2dldEhvc3RFbGVtZW50KCkpKX0sZGlyZWN0aXZlczpbcEhdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLE9HLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6Y2h9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltVQ119XX0se3R5cGU6cHp9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOlt2R119LHt0eXBlOl9zfV19XSxPRy5wcm9wRGVjb3JhdG9ycz17cm9sZTpbe3R5cGU6eV99XSxfY2hlY2tEaXNhYmxlZDpbe3R5cGU6TV8sYXJnczpbImNsaWNrIixbIiRldmVudCJdXX1dLF9oYW5kbGVNb3VzZUVudGVyOlt7dHlwZTpNXyxhcmdzOlsibW91c2VlbnRlciJdfV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoT0csW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoiW21hdC1tZW51LWl0ZW1dIixleHBvcnRBczoibWF0TWVudUl0ZW0iLGlucHV0czpbImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSJdLGhvc3Q6eyJbYXR0ci5yb2xlXSI6InJvbGUiLCJbY2xhc3MubWF0LW1lbnUtaXRlbV0iOiJ0cnVlIiwiW2NsYXNzLm1hdC1tZW51LWl0ZW0taGlnaGxpZ2h0ZWRdIjoiX2hpZ2hsaWdodGVkIiwiW2NsYXNzLm1hdC1tZW51LWl0ZW0tc3VibWVudS10cmlnZ2VyXSI6Il90cmlnZ2Vyc1N1Ym1lbnUiLCJbYXR0ci50YWJpbmRleF0iOiJfZ2V0VGFiSW5kZXgoKSIsIlthdHRyLmFyaWEtZGlzYWJsZWRdIjoiZGlzYWJsZWQudG9TdHJpbmcoKSIsIlthdHRyLmRpc2FibGVkXSI6ImRpc2FibGVkIHx8IG51bGwiLGNsYXNzOiJtYXQtZm9jdXMtaW5kaWNhdG9yIn0sY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaCxlbmNhcHN1bGF0aW9uOlBvLk5vbmUsdGVtcGxhdGU6JzxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjxkaXYgY2xhc3M9Im1hdC1tZW51LXJpcHBsZSIgbWF0UmlwcGxlXG4gICAgIFttYXRSaXBwbGVEaXNhYmxlZF09ImRpc2FibGVSaXBwbGUgfHwgZGlzYWJsZWQiXG4gICAgIFttYXRSaXBwbGVUcmlnZ2VyXT0iX2dldEhvc3RFbGVtZW50KCkiPlxuPC9kaXY+XG4nfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Y2h9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltVQ119XX0se3R5cGU6cHp9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOlt2R119LHt0eXBlOl9zfV19XX0pLHtyb2xlOlt7dHlwZTp5X31dLF9jaGVja0Rpc2FibGVkOlt7dHlwZTpNXyxhcmdzOlsiY2xpY2siLFsiJGV2ZW50Il1dfV0sX2hhbmRsZU1vdXNlRW50ZXI6W3t0eXBlOk1fLGFyZ3M6WyJtb3VzZWVudGVyIl19XX0pOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3QgUEc9bmV3IE5yKCJtYXQtbWVudS1kZWZhdWx0LW9wdGlvbnMiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uIHdHKCl7cmV0dXJue292ZXJsYXBUcmlnZ2VyOiExLHhQb3NpdGlvbjoiYWZ0ZXIiLHlQb3NpdGlvbjoiYmVsb3ciLGJhY2tkcm9wQ2xhc3M6ImNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wIn19fSk7bGV0IGtHPTA7Y2xhc3MgU0d7Y29uc3RydWN0b3IodCxlLG4pe3RoaXMuX2VsZW1lbnRSZWY9dCx0aGlzLl9uZ1pvbmU9ZSx0aGlzLl9kZWZhdWx0T3B0aW9ucz1uLHRoaXMuX3hQb3NpdGlvbj10aGlzLl9kZWZhdWx0T3B0aW9ucy54UG9zaXRpb24sdGhpcy5feVBvc2l0aW9uPXRoaXMuX2RlZmF1bHRPcHRpb25zLnlQb3NpdGlvbix0aGlzLl9kaXJlY3REZXNjZW5kYW50SXRlbXM9bmV3IFRiLHRoaXMuX3RhYlN1YnNjcmlwdGlvbj1sLkVNUFRZLHRoaXMuX2NsYXNzTGlzdD17fSx0aGlzLl9wYW5lbEFuaW1hdGlvblN0YXRlPSJ2b2lkIix0aGlzLl9hbmltYXRpb25Eb25lPW5ldyB4LHRoaXMub3ZlcmxheVBhbmVsQ2xhc3M9dGhpcy5fZGVmYXVsdE9wdGlvbnMub3ZlcmxheVBhbmVsQ2xhc3N8fCIiLHRoaXMuYmFja2Ryb3BDbGFzcz10aGlzLl9kZWZhdWx0T3B0aW9ucy5iYWNrZHJvcENsYXNzLHRoaXMuX292ZXJsYXBUcmlnZ2VyPXRoaXMuX2RlZmF1bHRPcHRpb25zLm92ZXJsYXBUcmlnZ2VyLHRoaXMuX2hhc0JhY2tkcm9wPXRoaXMuX2RlZmF1bHRPcHRpb25zLmhhc0JhY2tkcm9wLHRoaXMuY2xvc2VkPW5ldyBBYix0aGlzLmNsb3NlPXRoaXMuY2xvc2VkLHRoaXMucGFuZWxJZD0ibWF0LW1lbnUtcGFuZWwtIitrRysrfWdldCB4UG9zaXRpb24oKXtyZXR1cm4gdGhpcy5feFBvc2l0aW9ufXNldCB4UG9zaXRpb24odCl7ImJlZm9yZSI9PT10fHwiYWZ0ZXIiPT09dHx8InVuZGVmaW5lZCIhPXR5cGVvZiBuZ0Rldk1vZGUmJiFuZ0Rldk1vZGV8fChmdW5jdGlvbiBlKCl7dGhyb3cgRXJyb3IoJ3hQb3NpdGlvbiB2YWx1ZSBtdXN0IGJlIGVpdGhlciBcJ2JlZm9yZVwnIG9yIGFmdGVyXCcuXG4gICAgICBFeGFtcGxlOiA8bWF0LW1lbnUgeFBvc2l0aW9uPSJiZWZvcmUiICNtZW51PSJtYXRNZW51Ij48L21hdC1tZW51PicpfSkoKSx0aGlzLl94UG9zaXRpb249dCx0aGlzLnNldFBvc2l0aW9uQ2xhc3NlcygpfWdldCB5UG9zaXRpb24oKXtyZXR1cm4gdGhpcy5feVBvc2l0aW9ufXNldCB5UG9zaXRpb24odCl7ImFib3ZlIj09PXR8fCJiZWxvdyI9PT10fHwidW5kZWZpbmVkIiE9dHlwZW9mIG5nRGV2TW9kZSYmIW5nRGV2TW9kZXx8KGZ1bmN0aW9uIGUoKXt0aHJvdyBFcnJvcigneVBvc2l0aW9uIHZhbHVlIG11c3QgYmUgZWl0aGVyIFwnYWJvdmVcJyBvciBiZWxvd1wnLlxuICAgICAgRXhhbXBsZTogPG1hdC1tZW51IHlQb3NpdGlvbj0iYWJvdmUiICNtZW51PSJtYXRNZW51Ij48L21hdC1tZW51PicpfSkoKSx0aGlzLl95UG9zaXRpb249dCx0aGlzLnNldFBvc2l0aW9uQ2xhc3NlcygpfWdldCBvdmVybGFwVHJpZ2dlcigpe3JldHVybiB0aGlzLl9vdmVybGFwVHJpZ2dlcn1zZXQgb3ZlcmxhcFRyaWdnZXIodCl7dGhpcy5fb3ZlcmxhcFRyaWdnZXI9ckkodCl9Z2V0IGhhc0JhY2tkcm9wKCl7cmV0dXJuIHRoaXMuX2hhc0JhY2tkcm9wfXNldCBoYXNCYWNrZHJvcCh0KXt0aGlzLl9oYXNCYWNrZHJvcD1ySSh0KX1zZXQgcGFuZWxDbGFzcyh0KXtjb25zdCBlPXRoaXMuX3ByZXZpb3VzUGFuZWxDbGFzcztlJiZlLmxlbmd0aCYmZS5zcGxpdCgiICIpLmZvckVhY2goKHQ9Pnt0aGlzLl9jbGFzc0xpc3RbdF09ITF9KSksdGhpcy5fcHJldmlvdXNQYW5lbENsYXNzPXQsdCYmdC5sZW5ndGgmJih0LnNwbGl0KCIgIikuZm9yRWFjaCgodD0+e3RoaXMuX2NsYXNzTGlzdFt0XT0hMH0pKSx0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NOYW1lPSIiKX1nZXQgY2xhc3NMaXN0KCl7cmV0dXJuIHRoaXMucGFuZWxDbGFzc31zZXQgY2xhc3NMaXN0KHQpe3RoaXMucGFuZWxDbGFzcz10fW5nT25Jbml0KCl7dGhpcy5zZXRQb3NpdGlvbkNsYXNzZXMoKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLl91cGRhdGVEaXJlY3REZXNjZW5kYW50cygpLHRoaXMuX2tleU1hbmFnZXI9bmV3IFZJKHRoaXMuX2RpcmVjdERlc2NlbmRhbnRJdGVtcykud2l0aFdyYXAoKS53aXRoVHlwZUFoZWFkKCkud2l0aEhvbWVBbmRFbmQoKSx0aGlzLl90YWJTdWJzY3JpcHRpb249dGhpcy5fa2V5TWFuYWdlci50YWJPdXQuc3Vic2NyaWJlKCgoKT0+dGhpcy5jbG9zZWQuZW1pdCgidGFiIikpKSx0aGlzLl9kaXJlY3REZXNjZW5kYW50SXRlbXMuY2hhbmdlcy5waXBlKGNuKHRoaXMuX2RpcmVjdERlc2NlbmRhbnRJdGVtcyksZG4oKHQ9Pld0KC4uLnQubWFwKCh0PT50Ll9mb2N1c2VkKSkpKSkpLnN1YnNjcmliZSgodD0+dGhpcy5fa2V5TWFuYWdlci51cGRhdGVBY3RpdmVJdGVtKHQpKSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9kaXJlY3REZXNjZW5kYW50SXRlbXMuZGVzdHJveSgpLHRoaXMuX3RhYlN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuY2xvc2VkLmNvbXBsZXRlKCl9X2hvdmVyZWQoKXtyZXR1cm4gdGhpcy5fZGlyZWN0RGVzY2VuZGFudEl0ZW1zLmNoYW5nZXMucGlwZShjbih0aGlzLl9kaXJlY3REZXNjZW5kYW50SXRlbXMpLGRuKCh0PT5XdCguLi50Lm1hcCgodD0+dC5faG92ZXJlZCkpKSkpKX1hZGRJdGVtKHQpe31yZW1vdmVJdGVtKHQpe31faGFuZGxlS2V5ZG93bih0KXtjb25zdCBlPXQua2V5Q29kZSxuPXRoaXMuX2tleU1hbmFnZXI7c3dpdGNoKGUpe2Nhc2UgZUk6YUkodCl8fCh0LnByZXZlbnREZWZhdWx0KCksdGhpcy5jbG9zZWQuZW1pdCgia2V5ZG93biIpKTticmVhaztjYXNlIDM3OnRoaXMucGFyZW50TWVudSYmImx0ciI9PT10aGlzLmRpcmVjdGlvbiYmdGhpcy5jbG9zZWQuZW1pdCgia2V5ZG93biIpO2JyZWFrO2Nhc2UgMzk6dGhpcy5wYXJlbnRNZW51JiYicnRsIj09PXRoaXMuZGlyZWN0aW9uJiZ0aGlzLmNsb3NlZC5lbWl0KCJrZXlkb3duIik7YnJlYWs7ZGVmYXVsdDplIT09b0kmJmUhPT1pSXx8bi5zZXRGb2N1c09yaWdpbigia2V5Ym9hcmQiKSxuLm9uS2V5ZG93bih0KX19Zm9jdXNGaXJzdEl0ZW0odD0icHJvZ3JhbSIpe3RoaXMubGF6eUNvbnRlbnQ/dGhpcy5fbmdab25lLm9uU3RhYmxlLnBpcGUoTmUoMSkpLnN1YnNjcmliZSgoKCk9PnRoaXMuX2ZvY3VzRmlyc3RJdGVtKHQpKSk6dGhpcy5fZm9jdXNGaXJzdEl0ZW0odCl9X2ZvY3VzRmlyc3RJdGVtKHQpe2NvbnN0IGU9dGhpcy5fa2V5TWFuYWdlcjtpZihlLnNldEZvY3VzT3JpZ2luKHQpLnNldEZpcnN0SXRlbUFjdGl2ZSgpLCFlLmFjdGl2ZUl0ZW0mJnRoaXMuX2RpcmVjdERlc2NlbmRhbnRJdGVtcy5sZW5ndGgpe2xldCB0PXRoaXMuX2RpcmVjdERlc2NlbmRhbnRJdGVtcy5maXJzdC5fZ2V0SG9zdEVsZW1lbnQoKS5wYXJlbnRFbGVtZW50O2Zvcig7dDspe2lmKCJtZW51Ij09PXQuZ2V0QXR0cmlidXRlKCJyb2xlIikpe3QuZm9jdXMoKTticmVha310PXQucGFyZW50RWxlbWVudH19fXJlc2V0QWN0aXZlSXRlbSgpe3RoaXMuX2tleU1hbmFnZXIuc2V0QWN0aXZlSXRlbSgtMSl9c2V0RWxldmF0aW9uKHQpe2NvbnN0IGU9YG1hdC1lbGV2YXRpb24teiR7TWF0aC5taW4oNCt0LDI0KX1gLG49T2JqZWN0LmtleXModGhpcy5fY2xhc3NMaXN0KS5maW5kKCh0PT50LnN0YXJ0c1dpdGgoIm1hdC1lbGV2YXRpb24teiIpKSk7biYmbiE9PXRoaXMuX3ByZXZpb3VzRWxldmF0aW9ufHwodGhpcy5fcHJldmlvdXNFbGV2YXRpb24mJih0aGlzLl9jbGFzc0xpc3RbdGhpcy5fcHJldmlvdXNFbGV2YXRpb25dPSExKSx0aGlzLl9jbGFzc0xpc3RbZV09ITAsdGhpcy5fcHJldmlvdXNFbGV2YXRpb249ZSl9c2V0UG9zaXRpb25DbGFzc2VzKHQ9dGhpcy54UG9zaXRpb24sZT10aGlzLnlQb3NpdGlvbil7Y29uc3Qgbj10aGlzLl9jbGFzc0xpc3Q7blsibWF0LW1lbnUtYmVmb3JlIl09ImJlZm9yZSI9PT10LG5bIm1hdC1tZW51LWFmdGVyIl09ImFmdGVyIj09PXQsblsibWF0LW1lbnUtYWJvdmUiXT0iYWJvdmUiPT09ZSxuWyJtYXQtbWVudS1iZWxvdyJdPSJiZWxvdyI9PT1lfV9zdGFydEFuaW1hdGlvbigpe3RoaXMuX3BhbmVsQW5pbWF0aW9uU3RhdGU9ImVudGVyIn1fcmVzZXRBbmltYXRpb24oKXt0aGlzLl9wYW5lbEFuaW1hdGlvblN0YXRlPSJ2b2lkIn1fb25BbmltYXRpb25Eb25lKHQpe3RoaXMuX2FuaW1hdGlvbkRvbmUubmV4dCh0KSx0aGlzLl9pc0FuaW1hdGluZz0hMX1fb25BbmltYXRpb25TdGFydCh0KXt0aGlzLl9pc0FuaW1hdGluZz0hMCwiZW50ZXIiPT09dC50b1N0YXRlJiYwPT09dGhpcy5fa2V5TWFuYWdlci5hY3RpdmVJdGVtSW5kZXgmJih0LmVsZW1lbnQuc2Nyb2xsVG9wPTApfV91cGRhdGVEaXJlY3REZXNjZW5kYW50cygpe3RoaXMuX2FsbEl0ZW1zLmNoYW5nZXMucGlwZShjbih0aGlzLl9hbGxJdGVtcykpLnN1YnNjcmliZSgodD0+e3RoaXMuX2RpcmVjdERlc2NlbmRhbnRJdGVtcy5yZXNldCh0LmZpbHRlcigodD0+dC5fcGFyZW50TWVudT09PXRoaXMpKSksdGhpcy5fZGlyZWN0RGVzY2VuZGFudEl0ZW1zLm5vdGlmeU9uQ2hhbmdlcygpfSkpfX1TRy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8U0cpKE11KGNoKSxNdSh0QyksTXUoUEcpKX0sU0cuybVkaXI9Sm8oe3R5cGU6U0csY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24gdChlLG4sbyl7aWYoMSZlJiYoR2IobyxDRywxKSxHYihvLE9HLDEpLEdiKG8sT0csMCkpLDImZSl7bGV0IHQ7VWIodD1ZYigpKSYmKG4ubGF6eUNvbnRlbnQ9dC5maXJzdCksVWIodD1ZYigpKSYmKG4uX2FsbEl0ZW1zPXQpLFViKHQ9WWIoKSkmJihuLml0ZW1zPXQpfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJldiKFVoLDEpLDImZSl7bGV0IHQ7VWIodD1ZYigpKSYmKG4udGVtcGxhdGVSZWY9dC5maXJzdCl9fSxpbnB1dHM6e2JhY2tkcm9wQ2xhc3M6ImJhY2tkcm9wQ2xhc3MiLHhQb3NpdGlvbjoieFBvc2l0aW9uIix5UG9zaXRpb246InlQb3NpdGlvbiIsb3ZlcmxhcFRyaWdnZXI6Im92ZXJsYXBUcmlnZ2VyIixoYXNCYWNrZHJvcDoiaGFzQmFja2Ryb3AiLHBhbmVsQ2xhc3M6WyJjbGFzcyIsInBhbmVsQ2xhc3MiXSxjbGFzc0xpc3Q6ImNsYXNzTGlzdCIsYXJpYUxhYmVsOlsiYXJpYS1sYWJlbCIsImFyaWFMYWJlbCJdLGFyaWFMYWJlbGxlZGJ5OlsiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYUxhYmVsbGVkYnkiXSxhcmlhRGVzY3JpYmVkYnk6WyJhcmlhLWRlc2NyaWJlZGJ5IiwiYXJpYURlc2NyaWJlZGJ5Il19LG91dHB1dHM6e2Nsb3NlZDoiY2xvc2VkIixjbG9zZToiY2xvc2UifX0pLFNHLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6Y2h9LHt0eXBlOnRDfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbUEddfV19XSxTRy5wcm9wRGVjb3JhdG9ycz17X2FsbEl0ZW1zOlt7dHlwZTp6cixhcmdzOltPRyx7ZGVzY2VuZGFudHM6ITB9XX1dLGJhY2tkcm9wQ2xhc3M6W3t0eXBlOnlffV0sYXJpYUxhYmVsOlt7dHlwZTp5XyxhcmdzOlsiYXJpYS1sYWJlbCJdfV0sYXJpYUxhYmVsbGVkYnk6W3t0eXBlOnlfLGFyZ3M6WyJhcmlhLWxhYmVsbGVkYnkiXX1dLGFyaWFEZXNjcmliZWRieTpbe3R5cGU6eV8sYXJnczpbImFyaWEtZGVzY3JpYmVkYnkiXX1dLHhQb3NpdGlvbjpbe3R5cGU6eV99XSx5UG9zaXRpb246W3t0eXBlOnlffV0sdGVtcGxhdGVSZWY6W3t0eXBlOkZyLGFyZ3M6W1VoXX1dLGl0ZW1zOlt7dHlwZTp6cixhcmdzOltPRyx7ZGVzY2VuZGFudHM6ITF9XX1dLGxhenlDb250ZW50Olt7dHlwZTpIcixhcmdzOltDR119XSxvdmVybGFwVHJpZ2dlcjpbe3R5cGU6eV99XSxoYXNCYWNrZHJvcDpbe3R5cGU6eV99XSxwYW5lbENsYXNzOlt7dHlwZTp5XyxhcmdzOlsiY2xhc3MiXX1dLGNsYXNzTGlzdDpbe3R5cGU6eV99XSxjbG9zZWQ6W3t0eXBlOl9ffV0sY2xvc2U6W3t0eXBlOl9ffV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoU0csW3t0eXBlOmdffV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmNofSx7dHlwZTp0Q30se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W1BHXX1dfV19KSx7YmFja2Ryb3BDbGFzczpbe3R5cGU6eV99XSxjbG9zZWQ6W3t0eXBlOl9ffV0sY2xvc2U6W3t0eXBlOl9ffV0seFBvc2l0aW9uOlt7dHlwZTp5X31dLHlQb3NpdGlvbjpbe3R5cGU6eV99XSxvdmVybGFwVHJpZ2dlcjpbe3R5cGU6eV99XSxoYXNCYWNrZHJvcDpbe3R5cGU6eV99XSxwYW5lbENsYXNzOlt7dHlwZTp5XyxhcmdzOlsiY2xhc3MiXX1dLGNsYXNzTGlzdDpbe3R5cGU6eV99XSxfYWxsSXRlbXM6W3t0eXBlOnpyLGFyZ3M6W09HLHtkZXNjZW5kYW50czohMH1dfV0sYXJpYUxhYmVsOlt7dHlwZTp5XyxhcmdzOlsiYXJpYS1sYWJlbCJdfV0sYXJpYUxhYmVsbGVkYnk6W3t0eXBlOnlfLGFyZ3M6WyJhcmlhLWxhYmVsbGVkYnkiXX1dLGFyaWFEZXNjcmliZWRieTpbe3R5cGU6eV8sYXJnczpbImFyaWEtZGVzY3JpYmVkYnkiXX1dLHRlbXBsYXRlUmVmOlt7dHlwZTpGcixhcmdzOltVaF19XSxpdGVtczpbe3R5cGU6enIsYXJnczpbT0cse2Rlc2NlbmRhbnRzOiExfV19XSxsYXp5Q29udGVudDpbe3R5cGU6SHIsYXJnczpbQ0ddfV19KTtjbGFzcyBERyBleHRlbmRzIFNHe2NvbnN0cnVjdG9yKHQsZSxuKXtzdXBlcih0LGUsbil9fURHLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxERykoTXUoY2gpLE11KHRDKSxNdShQRykpfSxERy7JtWNtcD1Vbyh7dHlwZTpERyxzZWxlY3RvcnM6W1sibWF0LW1lbnUiXV0saG9zdFZhcnM6Myxob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezImZSYmTm0oImFyaWEtbGFiZWwiLG51bGwpKCJhcmlhLWxhYmVsbGVkYnkiLG51bGwpKCJhcmlhLWRlc2NyaWJlZGJ5IixudWxsKX0sZXhwb3J0QXM6WyJtYXRNZW51Il0sZmVhdHVyZXM6W2loKFt7cHJvdmlkZTp2Ryx1c2VFeGlzdGluZzpER31dKSxnbV0sbmdDb250ZW50U2VsZWN0b3JzOmJHLGRlY2xzOjEsdmFyczowLGNvbnN0czpbWyJ0YWJpbmRleCIsIi0xIiwicm9sZSIsIm1lbnUiLDEsIm1hdC1tZW51LXBhbmVsIiwzLCJpZCIsIm5nQ2xhc3MiLCJrZXlkb3duIiwiY2xpY2siXSxbMSwibWF0LW1lbnUtY29udGVudCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoVnUoKSxXbSgwLHlHLDMsNiwibmctdGVtcGxhdGUiKSl9LGRpcmVjdGl2ZXM6W3R2XSxzdHlsZXM6WydtYXQtbWVudXtkaXNwbGF5Om5vbmV9Lm1hdC1tZW51LXBhbmVse21pbi13aWR0aDoxMTJweDttYXgtd2lkdGg6MjgwcHg7b3ZlcmZsb3c6YXV0bzstd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzp0b3VjaDttYXgtaGVpZ2h0OmNhbGMoMTAwdmggLSA0OHB4KTtib3JkZXItcmFkaXVzOjRweDtvdXRsaW5lOjA7bWluLWhlaWdodDo2NHB4fS5tYXQtbWVudS1wYW5lbC5uZy1hbmltYXRpbmd7cG9pbnRlci1ldmVudHM6bm9uZX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtbWVudS1wYW5lbHtvdXRsaW5lOnNvbGlkIDFweH0ubWF0LW1lbnUtY29udGVudDpub3QoOmVtcHR5KXtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbWVudS1pdGVtey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2xpbmUtaGVpZ2h0OjQ4cHg7aGVpZ2h0OjQ4cHg7cGFkZGluZzowIDE2cHg7dGV4dC1hbGlnbjpsZWZ0O3RleHQtZGVjb3JhdGlvbjpub25lO21heC13aWR0aDoxMDAlO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtbWVudS1pdGVtOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtbWVudS1pdGVtW2Rpc2FibGVkXXtjdXJzb3I6ZGVmYXVsdH1bZGlyPXJ0bF0gLm1hdC1tZW51LWl0ZW17dGV4dC1hbGlnbjpyaWdodH0ubWF0LW1lbnUtaXRlbSAubWF0LWljb257bWFyZ2luLXJpZ2h0OjE2cHg7dmVydGljYWwtYWxpZ246bWlkZGxlfS5tYXQtbWVudS1pdGVtIC5tYXQtaWNvbiBzdmd7dmVydGljYWwtYWxpZ246dG9wfVtkaXI9cnRsXSAubWF0LW1lbnUtaXRlbSAubWF0LWljb257bWFyZ2luLWxlZnQ6MTZweDttYXJnaW4tcmlnaHQ6MH0ubWF0LW1lbnUtaXRlbVtkaXNhYmxlZF17cG9pbnRlci1ldmVudHM6bm9uZX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtbWVudS1pdGVte21hcmdpbi10b3A6MXB4fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1tZW51LWl0ZW0uY2RrLXByb2dyYW0tZm9jdXNlZCwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtbWVudS1pdGVtLmNkay1rZXlib2FyZC1mb2N1c2VkLC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1tZW51LWl0ZW0taGlnaGxpZ2h0ZWR7b3V0bGluZTpkb3R0ZWQgMXB4fS5tYXQtbWVudS1pdGVtLXN1Ym1lbnUtdHJpZ2dlcntwYWRkaW5nLXJpZ2h0OjMycHh9Lm1hdC1tZW51LWl0ZW0tc3VibWVudS10cmlnZ2VyOjphZnRlcnt3aWR0aDowO2hlaWdodDowO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6NXB4IDAgNXB4IDVweDtib3JkZXItY29sb3I6dHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgY3VycmVudENvbG9yO2NvbnRlbnQ6IiI7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtyaWdodDoxNnB4O3RyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpfVtkaXI9cnRsXSAubWF0LW1lbnUtaXRlbS1zdWJtZW51LXRyaWdnZXJ7cGFkZGluZy1yaWdodDoxNnB4O3BhZGRpbmctbGVmdDozMnB4fVtkaXI9cnRsXSAubWF0LW1lbnUtaXRlbS1zdWJtZW51LXRyaWdnZXI6OmFmdGVye3JpZ2h0OmF1dG87bGVmdDoxNnB4O3RyYW5zZm9ybTpyb3RhdGVZKDE4MGRlZykgdHJhbnNsYXRlWSgtNTAlKX1idXR0b24ubWF0LW1lbnUtaXRlbXt3aWR0aDoxMDAlfS5tYXQtbWVudS1pdGVtIC5tYXQtbWVudS1yaXBwbGV7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6bm9uZX1cbiddLGVuY2Fwc3VsYXRpb246MixkYXRhOnthbmltYXRpb246W19HLnRyYW5zZm9ybU1lbnUsX0cuZmFkZUluSXRlbXNdfSxjaGFuZ2VEZXRlY3Rpb246MH0pLERHLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6Y2h9LHt0eXBlOnRDfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbUEddfV19XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKERHLFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6Im1hdC1tZW51Iix0ZW1wbGF0ZTonPG5nLXRlbXBsYXRlPlxuICA8ZGl2XG4gICAgY2xhc3M9Im1hdC1tZW51LXBhbmVsIlxuICAgIFtpZF09InBhbmVsSWQiXG4gICAgW25nQ2xhc3NdPSJfY2xhc3NMaXN0IlxuICAgIChrZXlkb3duKT0iX2hhbmRsZUtleWRvd24oJGV2ZW50KSJcbiAgICAoY2xpY2spPSJjbG9zZWQuZW1pdChcJ2NsaWNrXCcpIlxuICAgIFtAdHJhbnNmb3JtTWVudV09Il9wYW5lbEFuaW1hdGlvblN0YXRlIlxuICAgIChAdHJhbnNmb3JtTWVudS5zdGFydCk9Il9vbkFuaW1hdGlvblN0YXJ0KCRldmVudCkiXG4gICAgKEB0cmFuc2Zvcm1NZW51LmRvbmUpPSJfb25BbmltYXRpb25Eb25lKCRldmVudCkiXG4gICAgdGFiaW5kZXg9Ii0xIlxuICAgIHJvbGU9Im1lbnUiXG4gICAgW2F0dHIuYXJpYS1sYWJlbF09ImFyaWFMYWJlbCB8fCBudWxsIlxuICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09ImFyaWFMYWJlbGxlZGJ5IHx8IG51bGwiXG4gICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09ImFyaWFEZXNjcmliZWRieSB8fCBudWxsIj5cbiAgICA8ZGl2IGNsYXNzPSJtYXQtbWVudS1jb250ZW50Ij5cbiAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuJyxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNoLGVuY2Fwc3VsYXRpb246UG8uTm9uZSxleHBvcnRBczoibWF0TWVudSIsaG9zdDp7IlthdHRyLmFyaWEtbGFiZWxdIjoibnVsbCIsIlthdHRyLmFyaWEtbGFiZWxsZWRieV0iOiJudWxsIiwiW2F0dHIuYXJpYS1kZXNjcmliZWRieV0iOiJudWxsIn0sYW5pbWF0aW9uczpbX0cudHJhbnNmb3JtTWVudSxfRy5mYWRlSW5JdGVtc10scHJvdmlkZXJzOlt7cHJvdmlkZTp2Ryx1c2VFeGlzdGluZzpER31dLHN0eWxlczpbJ21hdC1tZW51e2Rpc3BsYXk6bm9uZX0ubWF0LW1lbnUtcGFuZWx7bWluLXdpZHRoOjExMnB4O21heC13aWR0aDoyODBweDtvdmVyZmxvdzphdXRvOy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNoO21heC1oZWlnaHQ6Y2FsYygxMDB2aCAtIDQ4cHgpO2JvcmRlci1yYWRpdXM6NHB4O291dGxpbmU6MDttaW4taGVpZ2h0OjY0cHh9Lm1hdC1tZW51LXBhbmVsLm5nLWFuaW1hdGluZ3twb2ludGVyLWV2ZW50czpub25lfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1tZW51LXBhbmVse291dGxpbmU6c29saWQgMXB4fS5tYXQtbWVudS1jb250ZW50Om5vdCg6ZW1wdHkpe3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9Lm1hdC1tZW51LWl0ZW17LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpwb2ludGVyO291dGxpbmU6bm9uZTtib3JkZXI6bm9uZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7bGluZS1oZWlnaHQ6NDhweDtoZWlnaHQ6NDhweDtwYWRkaW5nOjAgMTZweDt0ZXh0LWFsaWduOmxlZnQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7bWF4LXdpZHRoOjEwMCU7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1tZW51LWl0ZW06Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1tZW51LWl0ZW1bZGlzYWJsZWRde2N1cnNvcjpkZWZhdWx0fVtkaXI9cnRsXSAubWF0LW1lbnUtaXRlbXt0ZXh0LWFsaWduOnJpZ2h0fS5tYXQtbWVudS1pdGVtIC5tYXQtaWNvbnttYXJnaW4tcmlnaHQ6MTZweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Lm1hdC1tZW51LWl0ZW0gLm1hdC1pY29uIHN2Z3t2ZXJ0aWNhbC1hbGlnbjp0b3B9W2Rpcj1ydGxdIC5tYXQtbWVudS1pdGVtIC5tYXQtaWNvbnttYXJnaW4tbGVmdDoxNnB4O21hcmdpbi1yaWdodDowfS5tYXQtbWVudS1pdGVtW2Rpc2FibGVkXXtwb2ludGVyLWV2ZW50czpub25lfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1tZW51LWl0ZW17bWFyZ2luLXRvcDoxcHh9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LW1lbnUtaXRlbS5jZGstcHJvZ3JhbS1mb2N1c2VkLC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1tZW51LWl0ZW0uY2RrLWtleWJvYXJkLWZvY3VzZWQsLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LW1lbnUtaXRlbS1oaWdobGlnaHRlZHtvdXRsaW5lOmRvdHRlZCAxcHh9Lm1hdC1tZW51LWl0ZW0tc3VibWVudS10cmlnZ2Vye3BhZGRpbmctcmlnaHQ6MzJweH0ubWF0LW1lbnUtaXRlbS1zdWJtZW51LXRyaWdnZXI6OmFmdGVye3dpZHRoOjA7aGVpZ2h0OjA7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDo1cHggMCA1cHggNXB4O2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudCB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCBjdXJyZW50Q29sb3I7Y29udGVudDoiIjtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3JpZ2h0OjE2cHg7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSl9W2Rpcj1ydGxdIC5tYXQtbWVudS1pdGVtLXN1Ym1lbnUtdHJpZ2dlcntwYWRkaW5nLXJpZ2h0OjE2cHg7cGFkZGluZy1sZWZ0OjMycHh9W2Rpcj1ydGxdIC5tYXQtbWVudS1pdGVtLXN1Ym1lbnUtdHJpZ2dlcjo6YWZ0ZXJ7cmlnaHQ6YXV0bztsZWZ0OjE2cHg7dHJhbnNmb3JtOnJvdGF0ZVkoMTgwZGVnKSB0cmFuc2xhdGVZKC01MCUpfWJ1dHRvbi5tYXQtbWVudS1pdGVte3dpZHRoOjEwMCV9Lm1hdC1tZW51LWl0ZW0gLm1hdC1tZW51LXJpcHBsZXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czpub25lfVxuJ119XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpjaH0se3R5cGU6dEN9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltQR119XX1dfSksbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCBFRz1uZXcgTnIoIm1hdC1tZW51LXNjcm9sbC1zdHJhdGVneSIpLEFHPXtwcm92aWRlOkVHLGRlcHM6W0pGXSx1c2VGYWN0b3J5OmZ1bmN0aW9uIFJHKHQpe3JldHVybigpPT50LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpfX0sVEc9dkkoe3Bhc3NpdmU6ITB9KTtjbGFzcyBOR3tjb25zdHJ1Y3Rvcih0LGUsbixvLGksYSxyLHMpe3RoaXMuX292ZXJsYXk9dCx0aGlzLl9lbGVtZW50PWUsdGhpcy5fdmlld0NvbnRhaW5lclJlZj1uLHRoaXMuX21lbnVJdGVtSW5zdGFuY2U9YSx0aGlzLl9kaXI9cix0aGlzLl9mb2N1c01vbml0b3I9cyx0aGlzLl9vdmVybGF5UmVmPW51bGwsdGhpcy5fbWVudU9wZW49ITEsdGhpcy5fY2xvc2luZ0FjdGlvbnNTdWJzY3JpcHRpb249bC5FTVBUWSx0aGlzLl9ob3ZlclN1YnNjcmlwdGlvbj1sLkVNUFRZLHRoaXMuX21lbnVDbG9zZVN1YnNjcmlwdGlvbj1sLkVNUFRZLHRoaXMuX2hhbmRsZVRvdWNoU3RhcnQ9dD0+e2x6KHQpfHwodGhpcy5fb3BlbmVkQnk9InRvdWNoIil9LHRoaXMuX29wZW5lZEJ5PXZvaWQgMCx0aGlzLnJlc3RvcmVGb2N1cz0hMCx0aGlzLm1lbnVPcGVuZWQ9bmV3IEFiLHRoaXMub25NZW51T3Blbj10aGlzLm1lbnVPcGVuZWQsdGhpcy5tZW51Q2xvc2VkPW5ldyBBYix0aGlzLm9uTWVudUNsb3NlPXRoaXMubWVudUNsb3NlZCx0aGlzLl9zY3JvbGxTdHJhdGVneT1vLHRoaXMuX3BhcmVudE1hdGVyaWFsTWVudT1pIGluc3RhbmNlb2YgU0c/aTp2b2lkIDAsZS5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMuX2hhbmRsZVRvdWNoU3RhcnQsVEcpLGEmJihhLl90cmlnZ2Vyc1N1Ym1lbnU9dGhpcy50cmlnZ2Vyc1N1Ym1lbnUoKSl9Z2V0IF9kZXByZWNhdGVkTWF0TWVudVRyaWdnZXJGb3IoKXtyZXR1cm4gdGhpcy5tZW51fXNldCBfZGVwcmVjYXRlZE1hdE1lbnVUcmlnZ2VyRm9yKHQpe3RoaXMubWVudT10fWdldCBtZW51KCl7cmV0dXJuIHRoaXMuX21lbnV9c2V0IG1lbnUodCl7dCE9PXRoaXMuX21lbnUmJih0aGlzLl9tZW51PXQsdGhpcy5fbWVudUNsb3NlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdCYmKHQhPT10aGlzLl9wYXJlbnRNYXRlcmlhbE1lbnV8fCJ1bmRlZmluZWQiIT10eXBlb2YgbmdEZXZNb2RlJiYhbmdEZXZNb2RlfHwoZnVuY3Rpb24gZSgpe3Rocm93IEVycm9yKCJtYXRNZW51VHJpZ2dlckZvcjogbWVudSBjYW5ub3QgY29udGFpbiBpdHMgb3duIHRyaWdnZXIuIEFzc2lnbiBhIG1lbnUgdGhhdCBpcyBub3QgYSBwYXJlbnQgb2YgdGhlIHRyaWdnZXIgb3IgbW92ZSB0aGUgdHJpZ2dlciBvdXRzaWRlIG9mIHRoZSBtZW51LiIpfSkoKSx0aGlzLl9tZW51Q2xvc2VTdWJzY3JpcHRpb249dC5jbG9zZS5zdWJzY3JpYmUoKHQ9Pnt0aGlzLl9kZXN0cm95TWVudSh0KSwiY2xpY2siIT09dCYmInRhYiIhPT10fHwhdGhpcy5fcGFyZW50TWF0ZXJpYWxNZW51fHx0aGlzLl9wYXJlbnRNYXRlcmlhbE1lbnUuY2xvc2VkLmVtaXQodCl9KSkpKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLl9jaGVja01lbnUoKSx0aGlzLl9oYW5kbGVIb3ZlcigpfW5nT25EZXN0cm95KCl7dGhpcy5fb3ZlcmxheVJlZiYmKHRoaXMuX292ZXJsYXlSZWYuZGlzcG9zZSgpLHRoaXMuX292ZXJsYXlSZWY9bnVsbCksdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMuX2hhbmRsZVRvdWNoU3RhcnQsVEcpLHRoaXMuX21lbnVDbG9zZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2Nsb3NpbmdBY3Rpb25zU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5faG92ZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1nZXQgbWVudU9wZW4oKXtyZXR1cm4gdGhpcy5fbWVudU9wZW59Z2V0IGRpcigpe3JldHVybiB0aGlzLl9kaXImJiJydGwiPT09dGhpcy5fZGlyLnZhbHVlPyJydGwiOiJsdHIifXRyaWdnZXJzU3VibWVudSgpe3JldHVybiEoIXRoaXMuX21lbnVJdGVtSW5zdGFuY2V8fCF0aGlzLl9wYXJlbnRNYXRlcmlhbE1lbnUpfXRvZ2dsZU1lbnUoKXtyZXR1cm4gdGhpcy5fbWVudU9wZW4/dGhpcy5jbG9zZU1lbnUoKTp0aGlzLm9wZW5NZW51KCl9b3Blbk1lbnUoKXtpZih0aGlzLl9tZW51T3BlbilyZXR1cm47dGhpcy5fY2hlY2tNZW51KCk7Y29uc3QgdD10aGlzLl9jcmVhdGVPdmVybGF5KCksZT10LmdldENvbmZpZygpO3RoaXMuX3NldFBvc2l0aW9uKGUucG9zaXRpb25TdHJhdGVneSksZS5oYXNCYWNrZHJvcD1udWxsPT10aGlzLm1lbnUuaGFzQmFja2Ryb3A/IXRoaXMudHJpZ2dlcnNTdWJtZW51KCk6dGhpcy5tZW51Lmhhc0JhY2tkcm9wLHQuYXR0YWNoKHRoaXMuX2dldFBvcnRhbCgpKSx0aGlzLm1lbnUubGF6eUNvbnRlbnQmJnRoaXMubWVudS5sYXp5Q29udGVudC5hdHRhY2godGhpcy5tZW51RGF0YSksdGhpcy5fY2xvc2luZ0FjdGlvbnNTdWJzY3JpcHRpb249dGhpcy5fbWVudUNsb3NpbmdBY3Rpb25zKCkuc3Vic2NyaWJlKCgoKT0+dGhpcy5jbG9zZU1lbnUoKSkpLHRoaXMuX2luaXRNZW51KCksdGhpcy5tZW51IGluc3RhbmNlb2YgU0cmJnRoaXMubWVudS5fc3RhcnRBbmltYXRpb24oKX1jbG9zZU1lbnUoKXt0aGlzLm1lbnUuY2xvc2UuZW1pdCgpfWZvY3VzKHQsZSl7dGhpcy5fZm9jdXNNb25pdG9yJiZ0P3RoaXMuX2ZvY3VzTW9uaXRvci5mb2N1c1ZpYSh0aGlzLl9lbGVtZW50LHQsZSk6dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKGUpfV9kZXN0cm95TWVudSh0KXtpZighdGhpcy5fb3ZlcmxheVJlZnx8IXRoaXMubWVudU9wZW4pcmV0dXJuO2NvbnN0IGU9dGhpcy5tZW51O3RoaXMuX2Nsb3NpbmdBY3Rpb25zU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fb3ZlcmxheVJlZi5kZXRhY2goKSwhdGhpcy5yZXN0b3JlRm9jdXN8fCJrZXlkb3duIiE9PXQmJnRoaXMuX29wZW5lZEJ5JiZ0aGlzLnRyaWdnZXJzU3VibWVudSgpfHx0aGlzLmZvY3VzKHRoaXMuX29wZW5lZEJ5KSx0aGlzLl9vcGVuZWRCeT12b2lkIDAsZSBpbnN0YW5jZW9mIFNHPyhlLl9yZXNldEFuaW1hdGlvbigpLGUubGF6eUNvbnRlbnQ/ZS5fYW5pbWF0aW9uRG9uZS5waXBlKEd0KCh0PT4idm9pZCI9PT10LnRvU3RhdGUpKSxOZSgxKSx1bihlLmxhenlDb250ZW50Ll9hdHRhY2hlZCkpLnN1YnNjcmliZSh7bmV4dDooKT0+ZS5sYXp5Q29udGVudC5kZXRhY2goKSxjb21wbGV0ZTooKT0+dGhpcy5fc2V0SXNNZW51T3BlbighMSl9KTp0aGlzLl9zZXRJc01lbnVPcGVuKCExKSk6KHRoaXMuX3NldElzTWVudU9wZW4oITEpLGUubGF6eUNvbnRlbnQmJmUubGF6eUNvbnRlbnQuZGV0YWNoKCkpfV9pbml0TWVudSgpe3RoaXMubWVudS5wYXJlbnRNZW51PXRoaXMudHJpZ2dlcnNTdWJtZW51KCk/dGhpcy5fcGFyZW50TWF0ZXJpYWxNZW51OnZvaWQgMCx0aGlzLm1lbnUuZGlyZWN0aW9uPXRoaXMuZGlyLHRoaXMuX3NldE1lbnVFbGV2YXRpb24oKSx0aGlzLm1lbnUuZm9jdXNGaXJzdEl0ZW0odGhpcy5fb3BlbmVkQnl8fCJwcm9ncmFtIiksdGhpcy5fc2V0SXNNZW51T3BlbighMCl9X3NldE1lbnVFbGV2YXRpb24oKXtpZih0aGlzLm1lbnUuc2V0RWxldmF0aW9uKXtsZXQgdD0wLGU9dGhpcy5tZW51LnBhcmVudE1lbnU7Zm9yKDtlOyl0KyssZT1lLnBhcmVudE1lbnU7dGhpcy5tZW51LnNldEVsZXZhdGlvbih0KX19X3NldElzTWVudU9wZW4odCl7dGhpcy5fbWVudU9wZW49dCx0aGlzLl9tZW51T3Blbj90aGlzLm1lbnVPcGVuZWQuZW1pdCgpOnRoaXMubWVudUNsb3NlZC5lbWl0KCksdGhpcy50cmlnZ2Vyc1N1Ym1lbnUoKSYmKHRoaXMuX21lbnVJdGVtSW5zdGFuY2UuX2hpZ2hsaWdodGVkPXQpfV9jaGVja01lbnUoKXt0aGlzLm1lbnV8fCJ1bmRlZmluZWQiIT10eXBlb2YgbmdEZXZNb2RlJiYhbmdEZXZNb2RlfHwoCi8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpmdW5jdGlvbiB0KCl7dGhyb3cgRXJyb3IoJ21hdE1lbnVUcmlnZ2VyRm9yOiBtdXN0IHBhc3MgaW4gYW4gbWF0LW1lbnUgaW5zdGFuY2UuXG5cbiAgICBFeGFtcGxlOlxuICAgICAgPG1hdC1tZW51ICNtZW51PSJtYXRNZW51Ij48L21hdC1tZW51PlxuICAgICAgPGJ1dHRvbiBbbWF0TWVudVRyaWdnZXJGb3JdPSJtZW51Ij48L2J1dHRvbj4nKX0pKCl9X2NyZWF0ZU92ZXJsYXkoKXtpZighdGhpcy5fb3ZlcmxheVJlZil7Y29uc3QgdD10aGlzLl9nZXRPdmVybGF5Q29uZmlnKCk7dGhpcy5fc3Vic2NyaWJlVG9Qb3NpdGlvbnModC5wb3NpdGlvblN0cmF0ZWd5KSx0aGlzLl9vdmVybGF5UmVmPXRoaXMuX292ZXJsYXkuY3JlYXRlKHQpLHRoaXMuX292ZXJsYXlSZWYua2V5ZG93bkV2ZW50cygpLnN1YnNjcmliZSgpfXJldHVybiB0aGlzLl9vdmVybGF5UmVmfV9nZXRPdmVybGF5Q29uZmlnKCl7cmV0dXJuIG5ldyBTRih7cG9zaXRpb25TdHJhdGVneTp0aGlzLl9vdmVybGF5LnBvc2l0aW9uKCkuZmxleGlibGVDb25uZWN0ZWRUbyh0aGlzLl9lbGVtZW50KS53aXRoTG9ja2VkUG9zaXRpb24oKS53aXRoR3Jvd0FmdGVyT3BlbigpLndpdGhUcmFuc2Zvcm1PcmlnaW5PbigiLm1hdC1tZW51LXBhbmVsLCAubWF0LW1kYy1tZW51LXBhbmVsIiksYmFja2Ryb3BDbGFzczp0aGlzLm1lbnUuYmFja2Ryb3BDbGFzc3x8ImNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wIixwYW5lbENsYXNzOnRoaXMubWVudS5vdmVybGF5UGFuZWxDbGFzcyxzY3JvbGxTdHJhdGVneTp0aGlzLl9zY3JvbGxTdHJhdGVneSgpLGRpcmVjdGlvbjp0aGlzLl9kaXJ9KX1fc3Vic2NyaWJlVG9Qb3NpdGlvbnModCl7dGhpcy5tZW51LnNldFBvc2l0aW9uQ2xhc3NlcyYmdC5wb3NpdGlvbkNoYW5nZXMuc3Vic2NyaWJlKCh0PT57dGhpcy5tZW51LnNldFBvc2l0aW9uQ2xhc3Nlcygic3RhcnQiPT09dC5jb25uZWN0aW9uUGFpci5vdmVybGF5WD8iYWZ0ZXIiOiJiZWZvcmUiLCJ0b3AiPT09dC5jb25uZWN0aW9uUGFpci5vdmVybGF5WT8iYmVsb3ciOiJhYm92ZSIpfSkpfV9zZXRQb3NpdGlvbih0KXtsZXRbZSxuXT0iYmVmb3JlIj09PXRoaXMubWVudS54UG9zaXRpb24/WyJlbmQiLCJzdGFydCJdOlsic3RhcnQiLCJlbmQiXSxbbyxpXT0iYWJvdmUiPT09dGhpcy5tZW51LnlQb3NpdGlvbj9bImJvdHRvbSIsInRvcCJdOlsidG9wIiwiYm90dG9tIl0sW2Escl09W28saV0sW3MsbF09W2Usbl0sYz0wO3RoaXMudHJpZ2dlcnNTdWJtZW51KCk/KGw9ZT0iYmVmb3JlIj09PXRoaXMubWVudS54UG9zaXRpb24/InN0YXJ0IjoiZW5kIixuPXM9ImVuZCI9PT1lPyJzdGFydCI6ImVuZCIsYz0iYm90dG9tIj09PW8/ODotOCk6dGhpcy5tZW51Lm92ZXJsYXBUcmlnZ2VyfHwoYT0idG9wIj09PW8/ImJvdHRvbSI6InRvcCIscj0idG9wIj09PWk/ImJvdHRvbSI6InRvcCIpLHQud2l0aFBvc2l0aW9ucyhbe29yaWdpblg6ZSxvcmlnaW5ZOmEsb3ZlcmxheVg6cyxvdmVybGF5WTpvLG9mZnNldFk6Y30se29yaWdpblg6bixvcmlnaW5ZOmEsb3ZlcmxheVg6bCxvdmVybGF5WTpvLG9mZnNldFk6Y30se29yaWdpblg6ZSxvcmlnaW5ZOnIsb3ZlcmxheVg6cyxvdmVybGF5WTppLG9mZnNldFk6LWN9LHtvcmlnaW5YOm4sb3JpZ2luWTpyLG92ZXJsYXlYOmwsb3ZlcmxheVk6aSxvZmZzZXRZOi1jfV0pfV9tZW51Q2xvc2luZ0FjdGlvbnMoKXtjb25zdCB0PXRoaXMuX292ZXJsYXlSZWYuYmFja2Ryb3BDbGljaygpLGU9dGhpcy5fb3ZlcmxheVJlZi5kZXRhY2htZW50cygpO3JldHVybiBXdCh0LHRoaXMuX3BhcmVudE1hdGVyaWFsTWVudT90aGlzLl9wYXJlbnRNYXRlcmlhbE1lbnUuY2xvc2VkOlooKSx0aGlzLl9wYXJlbnRNYXRlcmlhbE1lbnU/dGhpcy5fcGFyZW50TWF0ZXJpYWxNZW51Ll9ob3ZlcmVkKCkucGlwZShHdCgodD0+dCE9PXRoaXMuX21lbnVJdGVtSW5zdGFuY2UpKSxHdCgoKCk9PnRoaXMuX21lbnVPcGVuKSkpOlooKSxlKX1faGFuZGxlTW91c2Vkb3duKHQpe3N6KHQpfHwodGhpcy5fb3BlbmVkQnk9MD09PXQuYnV0dG9uPyJtb3VzZSI6dm9pZCAwLHRoaXMudHJpZ2dlcnNTdWJtZW51KCkmJnQucHJldmVudERlZmF1bHQoKSl9X2hhbmRsZUtleWRvd24odCl7Y29uc3QgZT10LmtleUNvZGU7ZSE9PXRJJiZlIT09bkl8fCh0aGlzLl9vcGVuZWRCeT0ia2V5Ym9hcmQiKSx0aGlzLnRyaWdnZXJzU3VibWVudSgpJiYoMzk9PT1lJiYibHRyIj09PXRoaXMuZGlyfHwzNz09PWUmJiJydGwiPT09dGhpcy5kaXIpJiYodGhpcy5fb3BlbmVkQnk9ImtleWJvYXJkIix0aGlzLm9wZW5NZW51KCkpfV9oYW5kbGVDbGljayh0KXt0aGlzLnRyaWdnZXJzU3VibWVudSgpPyh0LnN0b3BQcm9wYWdhdGlvbigpLHRoaXMub3Blbk1lbnUoKSk6dGhpcy50b2dnbGVNZW51KCl9X2hhbmRsZUhvdmVyKCl7dGhpcy50cmlnZ2Vyc1N1Ym1lbnUoKSYmdGhpcy5fcGFyZW50TWF0ZXJpYWxNZW51JiYodGhpcy5faG92ZXJTdWJzY3JpcHRpb249dGhpcy5fcGFyZW50TWF0ZXJpYWxNZW51Ll9ob3ZlcmVkKCkucGlwZShHdCgodD0+dD09PXRoaXMuX21lbnVJdGVtSW5zdGFuY2UmJiF0LmRpc2FibGVkKSksYmUoMCxjdCkpLnN1YnNjcmliZSgoKCk9Pnt0aGlzLl9vcGVuZWRCeT0ibW91c2UiLHRoaXMubWVudSBpbnN0YW5jZW9mIFNHJiZ0aGlzLm1lbnUuX2lzQW5pbWF0aW5nP3RoaXMubWVudS5fYW5pbWF0aW9uRG9uZS5waXBlKE5lKDEpLGJlKDAsY3QpLHVuKHRoaXMuX3BhcmVudE1hdGVyaWFsTWVudS5faG92ZXJlZCgpKSkuc3Vic2NyaWJlKCgoKT0+dGhpcy5vcGVuTWVudSgpKSk6dGhpcy5vcGVuTWVudSgpfSkpKX1fZ2V0UG9ydGFsKCl7cmV0dXJuIHRoaXMuX3BvcnRhbCYmdGhpcy5fcG9ydGFsLnRlbXBsYXRlUmVmPT09dGhpcy5tZW51LnRlbXBsYXRlUmVmfHwodGhpcy5fcG9ydGFsPW5ldyBsRih0aGlzLm1lbnUudGVtcGxhdGVSZWYsdGhpcy5fdmlld0NvbnRhaW5lclJlZikpLHRoaXMuX3BvcnRhbH19TkcuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fE5HKShNdShKRiksTXUoY2gpLE11KFhoKSxNdShFRyksTXUodkcsOCksTXUoT0csMTApLE11KE16LDgpLE11KHB6KSl9LE5HLsm1ZGlyPUpvKHt0eXBlOk5HLHNlbGVjdG9yczpbWyIiLCJtYXQtbWVudS10cmlnZ2VyLWZvciIsIiJdLFsiIiwibWF0TWVudVRyaWdnZXJGb3IiLCIiXV0saG9zdEF0dHJzOlsiYXJpYS1oYXNwb3B1cCIsInRydWUiLDEsIm1hdC1tZW51LXRyaWdnZXIiXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MSZlJiZOdSgibW91c2Vkb3duIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5faGFuZGxlTW91c2Vkb3duKGUpfSkpKCJrZXlkb3duIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5faGFuZGxlS2V5ZG93bihlKX0pKSgiY2xpY2siLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLl9oYW5kbGVDbGljayhlKX0pKSwyJmUmJk5tKCJhcmlhLWV4cGFuZGVkIixuLm1lbnVPcGVufHxudWxsKSgiYXJpYS1jb250cm9scyIsbi5tZW51T3Blbj9uLm1lbnUucGFuZWxJZDpudWxsKX0saW5wdXRzOntyZXN0b3JlRm9jdXM6WyJtYXRNZW51VHJpZ2dlclJlc3RvcmVGb2N1cyIsInJlc3RvcmVGb2N1cyJdLF9kZXByZWNhdGVkTWF0TWVudVRyaWdnZXJGb3I6WyJtYXQtbWVudS10cmlnZ2VyLWZvciIsIl9kZXByZWNhdGVkTWF0TWVudVRyaWdnZXJGb3IiXSxtZW51OlsibWF0TWVudVRyaWdnZXJGb3IiLCJtZW51Il0sbWVudURhdGE6WyJtYXRNZW51VHJpZ2dlckRhdGEiLCJtZW51RGF0YSJdfSxvdXRwdXRzOnttZW51T3BlbmVkOiJtZW51T3BlbmVkIixvbk1lbnVPcGVuOiJvbk1lbnVPcGVuIixtZW51Q2xvc2VkOiJtZW51Q2xvc2VkIixvbk1lbnVDbG9zZToib25NZW51Q2xvc2UifSxleHBvcnRBczpbIm1hdE1lbnVUcmlnZ2VyIl19KSxORy5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOkpGfSx7dHlwZTpjaH0se3R5cGU6WGh9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltFR119XX0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W3ZHXX0se3R5cGU6X3N9XX0se3R5cGU6T0csZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOkNzfV19LHt0eXBlOk16LGRlY29yYXRvcnM6W3t0eXBlOl9zfV19LHt0eXBlOnB6fV0sTkcucHJvcERlY29yYXRvcnM9e19kZXByZWNhdGVkTWF0TWVudVRyaWdnZXJGb3I6W3t0eXBlOnlfLGFyZ3M6WyJtYXQtbWVudS10cmlnZ2VyLWZvciJdfV0sbWVudTpbe3R5cGU6eV8sYXJnczpbIm1hdE1lbnVUcmlnZ2VyRm9yIl19XSxtZW51RGF0YTpbe3R5cGU6eV8sYXJnczpbIm1hdE1lbnVUcmlnZ2VyRGF0YSJdfV0scmVzdG9yZUZvY3VzOlt7dHlwZTp5XyxhcmdzOlsibWF0TWVudVRyaWdnZXJSZXN0b3JlRm9jdXMiXX1dLG1lbnVPcGVuZWQ6W3t0eXBlOl9ffV0sb25NZW51T3Blbjpbe3R5cGU6X199XSxtZW51Q2xvc2VkOlt7dHlwZTpfX31dLG9uTWVudUNsb3NlOlt7dHlwZTpfX31dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKE5HLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6IlttYXQtbWVudS10cmlnZ2VyLWZvcl0sIFttYXRNZW51VHJpZ2dlckZvcl0iLGhvc3Q6e2NsYXNzOiJtYXQtbWVudS10cmlnZ2VyIiwiYXJpYS1oYXNwb3B1cCI6InRydWUiLCJbYXR0ci5hcmlhLWV4cGFuZGVkXSI6Im1lbnVPcGVuIHx8IG51bGwiLCJbYXR0ci5hcmlhLWNvbnRyb2xzXSI6Im1lbnVPcGVuID8gbWVudS5wYW5lbElkIDogbnVsbCIsIihtb3VzZWRvd24pIjoiX2hhbmRsZU1vdXNlZG93bigkZXZlbnQpIiwiKGtleWRvd24pIjoiX2hhbmRsZUtleWRvd24oJGV2ZW50KSIsIihjbGljaykiOiJfaGFuZGxlQ2xpY2soJGV2ZW50KSJ9LGV4cG9ydEFzOiJtYXRNZW51VHJpZ2dlciJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpKRn0se3R5cGU6Y2h9LHt0eXBlOlhofSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbRUddfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOlt2R119LHt0eXBlOl9zfV19LHt0eXBlOk9HLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTpDc31dfSx7dHlwZTpNeixkZWNvcmF0b3JzOlt7dHlwZTpfc31dfSx7dHlwZTpwen1dfSkse3Jlc3RvcmVGb2N1czpbe3R5cGU6eV8sYXJnczpbIm1hdE1lbnVUcmlnZ2VyUmVzdG9yZUZvY3VzIl19XSxtZW51T3BlbmVkOlt7dHlwZTpfX31dLG9uTWVudU9wZW46W3t0eXBlOl9ffV0sbWVudUNsb3NlZDpbe3R5cGU6X199XSxvbk1lbnVDbG9zZTpbe3R5cGU6X199XSxfZGVwcmVjYXRlZE1hdE1lbnVUcmlnZ2VyRm9yOlt7dHlwZTp5XyxhcmdzOlsibWF0LW1lbnUtdHJpZ2dlci1mb3IiXX1dLG1lbnU6W3t0eXBlOnlfLGFyZ3M6WyJtYXRNZW51VHJpZ2dlckZvciJdfV0sbWVudURhdGE6W3t0eXBlOnlfLGFyZ3M6WyJtYXRNZW51VHJpZ2dlckRhdGEiXX1dfSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyBJR3t9SUcuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fElHKX0sSUcuybVtb2Q9Wm8oe3R5cGU6SUd9KSxJRy7JtWluaj1jbyh7cHJvdmlkZXJzOltBR10saW1wb3J0czpbVHpdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhJRyx7ZGVjbGFyYXRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuW05HLE1HXX0sZXhwb3J0czpmdW5jdGlvbigpe3JldHVybltORyxNRyxUel19fSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihJRyxbe3R5cGU6a18sYXJnczpbe2V4cG9ydHM6W05HLE1HLFR6XSxkZWNsYXJhdGlvbnM6W05HLE1HXSxwcm92aWRlcnM6W0FHXX1dfV0sbnVsbCxudWxsKTtjbGFzcyB6R3t9ZnVuY3Rpb24gSEcodCxlKXsxJnQmJnd1KDAsIm1hdC1pY29uIiw4KX1mdW5jdGlvbiBGRyh0LGUpezEmdCYmd3UoMCwibWF0LWljb24iLDkpfWZ1bmN0aW9uIExHKHQsZSl7MSZ0JiZ3dSgwLCJtYXQtaWNvbiIsMTApfXZhciBCRzt6Ry7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8ekcpfSx6Ry7JtW1vZD1abyh7dHlwZTp6R30pLHpHLsm1aW5qPWNvKHtwcm92aWRlcnM6W0FHXSxpbXBvcnRzOltbQnYsVHosbUgsaUwsSUddLG9GLFR6LElHXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oekcse2RlY2xhcmF0aW9uczpmdW5jdGlvbigpe3JldHVybltERyxPR119LGltcG9ydHM6ZnVuY3Rpb24oKXtyZXR1cm5bQnYsVHosbUgsaUwsSUddfSxleHBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW29GLFR6LERHLE9HLElHXX19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHpHLFt7dHlwZTprXyxhcmdzOlt7aW1wb3J0czpbQnYsVHosbUgsaUwsSUddLGV4cG9ydHM6W29GLFR6LERHLE9HLElHXSxkZWNsYXJhdGlvbnM6W0RHLE9HXSxwcm92aWRlcnM6W0FHXX1dfV0sbnVsbCxudWxsKSwoZnVuY3Rpb24odCl7dFt0LkRFRkFVTFQ9MF09IkRFRkFVTFQiLHRbdC5EQVJLX01PREVfT049MV09IkRBUktfTU9ERV9PTiIsdFt0LkRBUktfTU9ERV9PRkY9Ml09IkRBUktfTU9ERV9PRkYifSkoQkd8fChCRz17fSkpO2NsYXNzIFZHe2NvbnN0cnVjdG9yKCl7dGhpcy5EYXJrTW9kZU92ZXJyaWRlPUJHLHRoaXMub25PdmVycmlkZUNoYW5nZWQ9bmV3IEFifWdldEJ1dHRvblRpdGxlKCl7bGV0IHQ7c3dpdGNoKHRoaXMuZGFya01vZGVPdmVycmlkZSl7Y2FzZSBCRy5ERUZBVUxUOnQ9IkJyb3dzZXIgZGVmYXVsdCI7YnJlYWs7Y2FzZSBCRy5EQVJLX01PREVfT046dD0iRGFyayBtb2RlIjticmVhaztjYXNlIEJHLkRBUktfTU9ERV9PRkY6dD0iTGlnaHQgbW9kZSJ9cmV0dXJuYEN1cnJlbnQgbW9kZTogWyR7dH1dLiBTd2l0Y2ggYmV0d2VlbiBicm93c2VyIGRlZmF1bHQsIGxpZ2h0LCBvciBkYXJrIHRoZW1lLmB9fVZHLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxWRyl9LFZHLsm1Y21wPVVvKHt0eXBlOlZHLHNlbGVjdG9yczpbWyJhcHAtaGVhZGVyLWRhcmstbW9kZS10b2dnbGUtY29tcG9uZW50Il1dLGlucHV0czp7ZGFya01vZGVPdmVycmlkZToiZGFya01vZGVPdmVycmlkZSJ9LG91dHB1dHM6e29uT3ZlcnJpZGVDaGFuZ2VkOiJvbk92ZXJyaWRlQ2hhbmdlZCJ9LGRlY2xzOjE1LHZhcnM6Nixjb25zdHM6W1sibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsIk1lbnUgZm9yIGNoYW5naW5nIGxpZ2h0IG9yIGRhcmsgdGhlbWUiLDMsIm1hdE1lbnVUcmlnZ2VyRm9yIiwibmdTd2l0Y2giLCJ0aXRsZSJdLFsic3ZnSWNvbiIsImJyaWdodG5lc3NfNl8yNHB4Iiw0LCJuZ1N3aXRjaENhc2UiXSxbInN2Z0ljb24iLCJsaWdodF9tb2RlXzI0cHgiLDQsIm5nU3dpdGNoQ2FzZSJdLFsic3ZnSWNvbiIsImRhcmtfbW9kZV8yNHB4Iiw0LCJuZ1N3aXRjaENhc2UiXSxbIm1lbnUiLCJtYXRNZW51Il0sWyJtYXQtbWVudS1pdGVtIiwiIiwidGl0bGUiLCJTZXQgdGhlIHRoZW1lIHRvIG1hdGNoIHRoZSBkZWZhdWx0IG1vZGUgaW4gdGhlIGJyb3dzZXIuIiwzLCJjbGljayJdLFsibWF0LW1lbnUtaXRlbSIsIiIsInRpdGxlIiwiRm9yY2UgbGlnaHQgVGVuc29yQm9hcmQgdGhlbWUuIiwzLCJjbGljayJdLFsibWF0LW1lbnUtaXRlbSIsIiIsInRpdGxlIiwiRm9yY2UgZGFyayBUZW5zb3JCb2FyZCB0aGVtZS4iLDMsImNsaWNrIl0sWyJzdmdJY29uIiwiYnJpZ2h0bmVzc182XzI0cHgiXSxbInN2Z0ljb24iLCJsaWdodF9tb2RlXzI0cHgiXSxbInN2Z0ljb24iLCJkYXJrX21vZGVfMjRweCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoT3UoMCwiYnV0dG9uIiwwKSxXbSgxLEhHLDEsMCwibWF0LWljb24iLDEpLFdtKDIsRkcsMSwwLCJtYXQtaWNvbiIsMiksV20oMyxMRywxLDAsIm1hdC1pY29uIiwzKSxQdSgpLE91KDQsIm1hdC1tZW51IixudWxsLDQpLE91KDYsImJ1dHRvbiIsNSksTnUoImNsaWNrIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uT3ZlcnJpZGVDaGFuZ2VkLmVtaXQobi5EYXJrTW9kZU92ZXJyaWRlLkRFRkFVTFQpfSkpLE91KDcsImxhYmVsIiksTWYoOCwiQnJvd3NlciBkZWZhdWx0IiksUHUoKSxQdSgpLE91KDksImJ1dHRvbiIsNiksTnUoImNsaWNrIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uT3ZlcnJpZGVDaGFuZ2VkLmVtaXQobi5EYXJrTW9kZU92ZXJyaWRlLkRBUktfTU9ERV9PRkYpfSkpLE91KDEwLCJsYWJlbCIpLE1mKDExLCJMaWdodCIpLFB1KCksUHUoKSxPdSgxMiwiYnV0dG9uIiw3KSxOdSgiY2xpY2siLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub25PdmVycmlkZUNoYW5nZWQuZW1pdChuLkRhcmtNb2RlT3ZlcnJpZGUuREFSS19NT0RFX09OKX0pKSxPdSgxMywibGFiZWwiKSxNZigxNCwiRGFyayIpLFB1KCksUHUoKSxQdSgpKSwyJmUmJih2dSgibWF0TWVudVRyaWdnZXJGb3IiLEdtKDUpKSgibmdTd2l0Y2giLG4uZGFya01vZGVPdmVycmlkZSkoInRpdGxlIixuLmdldEJ1dHRvblRpdGxlKCkpLEpjKDEpLHZ1KCJuZ1N3aXRjaENhc2UiLG4uRGFya01vZGVPdmVycmlkZS5ERUZBVUxUKSxKYygxKSx2dSgibmdTd2l0Y2hDYXNlIixuLkRhcmtNb2RlT3ZlcnJpZGUuREFSS19NT0RFX09GRiksSmMoMSksdnUoIm5nU3dpdGNoQ2FzZSIsbi5EYXJrTW9kZU92ZXJyaWRlLkRBUktfTU9ERV9PTikpfSxkaXJlY3RpdmVzOltOSCxORyxjdixkdixERyxPRyxjR10sZW5jYXBzdWxhdGlvbjoyfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihWRyxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJhcHAtaGVhZGVyLWRhcmstbW9kZS10b2dnbGUtY29tcG9uZW50Iix0ZW1wbGF0ZTonXG4gICAgPGJ1dHRvblxuICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPSJtZW51IlxuICAgICAgYXJpYS1sYWJlbD0iTWVudSBmb3IgY2hhbmdpbmcgbGlnaHQgb3IgZGFyayB0aGVtZSJcbiAgICAgIFtuZ1N3aXRjaF09ImRhcmtNb2RlT3ZlcnJpZGUiXG4gICAgICBbdGl0bGVdPSJnZXRCdXR0b25UaXRsZSgpIlxuICAgID5cbiAgICAgIDxtYXQtaWNvblxuICAgICAgICAqbmdTd2l0Y2hDYXNlPSJEYXJrTW9kZU92ZXJyaWRlLkRFRkFVTFQiXG4gICAgICAgIHN2Z0ljb249ImJyaWdodG5lc3NfNl8yNHB4IlxuICAgICAgPjwvbWF0LWljb24+XG4gICAgICA8bWF0LWljb25cbiAgICAgICAgKm5nU3dpdGNoQ2FzZT0iRGFya01vZGVPdmVycmlkZS5EQVJLX01PREVfT0ZGIlxuICAgICAgICBzdmdJY29uPSJsaWdodF9tb2RlXzI0cHgiXG4gICAgICA+PC9tYXQtaWNvbj5cbiAgICAgIDxtYXQtaWNvblxuICAgICAgICAqbmdTd2l0Y2hDYXNlPSJEYXJrTW9kZU92ZXJyaWRlLkRBUktfTU9ERV9PTiJcbiAgICAgICAgc3ZnSWNvbj0iZGFya19tb2RlXzI0cHgiXG4gICAgICA+PC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8bWF0LW1lbnUgI21lbnU9Im1hdE1lbnUiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBtYXQtbWVudS1pdGVtXG4gICAgICAgIHRpdGxlPSJTZXQgdGhlIHRoZW1lIHRvIG1hdGNoIHRoZSBkZWZhdWx0IG1vZGUgaW4gdGhlIGJyb3dzZXIuIlxuICAgICAgICAoY2xpY2spPSJvbk92ZXJyaWRlQ2hhbmdlZC5lbWl0KERhcmtNb2RlT3ZlcnJpZGUuREVGQVVMVCkiXG4gICAgICA+XG4gICAgICAgIDxsYWJlbD5Ccm93c2VyIGRlZmF1bHQ8L2xhYmVsPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIG1hdC1tZW51LWl0ZW1cbiAgICAgICAgdGl0bGU9IkZvcmNlIGxpZ2h0IFRlbnNvckJvYXJkIHRoZW1lLiJcbiAgICAgICAgKGNsaWNrKT0ib25PdmVycmlkZUNoYW5nZWQuZW1pdChEYXJrTW9kZU92ZXJyaWRlLkRBUktfTU9ERV9PRkYpIlxuICAgICAgPlxuICAgICAgICA8bGFiZWw+TGlnaHQ8L2xhYmVsPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIG1hdC1tZW51LWl0ZW1cbiAgICAgICAgdGl0bGU9IkZvcmNlIGRhcmsgVGVuc29yQm9hcmQgdGhlbWUuIlxuICAgICAgICAoY2xpY2spPSJvbk92ZXJyaWRlQ2hhbmdlZC5lbWl0KERhcmtNb2RlT3ZlcnJpZGUuREFSS19NT0RFX09OKSJcbiAgICAgID5cbiAgICAgICAgPGxhYmVsPkRhcms8L2xhYmVsPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9tYXQtbWVudT5cbiAgJ31dfV0sbnVsbCx7ZGFya01vZGVPdmVycmlkZTpbe3R5cGU6eV99XSxvbk92ZXJyaWRlQ2hhbmdlZDpbe3R5cGU6X199XX0pO2NsYXNzIGpHe2NvbnN0cnVjdG9yKHQpe3RoaXMuc3RvcmU9dCx0aGlzLmRhcmtNb2RlT3ZlcnJpZGUkPXRoaXMuc3RvcmUuc2VsZWN0KHZFKS5waXBlKGh0KCh0PT5udWxsPT09dD9CRy5ERUZBVUxUOnQ/QkcuREFSS19NT0RFX09OOkJHLkRBUktfTU9ERV9PRkYpKSl9Y2hhbmdlRGFya01vZGUodCl7bGV0IGU9bnVsbDtzd2l0Y2godCl7Y2FzZSBCRy5ERUZBVUxUOmU9bnVsbDticmVhaztjYXNlIEJHLkRBUktfTU9ERV9PRkY6ZT0hMTticmVhaztjYXNlIEJHLkRBUktfTU9ERV9PTjplPSEwfXRoaXMuc3RvcmUuZGlzcGF0Y2godFQoe2VuYWJsZURhcmtNb2RlOmV9KSl9fWpHLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxqRykoTXUoRWspKX0sakcuybVjbXA9VW8oe3R5cGU6akcsc2VsZWN0b3JzOltbImFwcC1oZWFkZXItZGFyay1tb2RlLXRvZ2dsZSJdXSxkZWNsczoyLHZhcnM6Myxjb25zdHM6W1szLCJkYXJrTW9kZU92ZXJyaWRlIiwib25PdmVycmlkZUNoYW5nZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKE91KDAsImFwcC1oZWFkZXItZGFyay1tb2RlLXRvZ2dsZS1jb21wb25lbnQiLDApLE51KCJvbk92ZXJyaWRlQ2hhbmdlZCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4uY2hhbmdlRGFya01vZGUoZSl9KSksT2IoMSwiYXN5bmMiKSxQdSgpKSwyJmUmJnZ1KCJkYXJrTW9kZU92ZXJyaWRlIixQYigxLDEsbi5kYXJrTW9kZU92ZXJyaWRlJCkpfSxkaXJlY3RpdmVzOltWR10scGlwZXM6W012XSxlbmNhcHN1bGF0aW9uOjJ9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGpHLFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6ImFwcC1oZWFkZXItZGFyay1tb2RlLXRvZ2dsZSIsdGVtcGxhdGU6J1xuICAgIDxhcHAtaGVhZGVyLWRhcmstbW9kZS10b2dnbGUtY29tcG9uZW50XG4gICAgICBbZGFya01vZGVPdmVycmlkZV09ImRhcmtNb2RlT3ZlcnJpZGUkIHwgYXN5bmMiXG4gICAgICAob25PdmVycmlkZUNoYW5nZWQpPSJjaGFuZ2VEYXJrTW9kZSgkZXZlbnQpIlxuICAgID5cbiAgICA8L2FwcC1oZWFkZXItZGFyay1tb2RlLXRvZ2dsZS1jb21wb25lbnQ+XG4gICd9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpFa31dfSksbnVsbCk7Y29uc3QgVUc9emsocEEsZEEsKCh0LGUpPT4hKCFlfHwhdFtlXSkmJnRbZV0uZGlzYWJsZV9yZWxvYWQpKTtjbGFzcyBXR3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXQsdGhpcy5yZWxvYWREaXNhYmxlZCQ9dGhpcy5zdG9yZS5zZWxlY3QoVUcpLHRoaXMuaXNSZWxvYWRpbmckPXRoaXMuc3RvcmUuc2VsZWN0KGxBKS5waXBlKGNlKHRoaXMucmVsb2FkRGlzYWJsZWQkKSxodCgoKFt0LGVdKT0+IWUmJnQ9PT1CRS5MT0FESU5HKSkpLHRoaXMubGFzdExvYWRlZFRpbWVJbk1zJD10aGlzLnN0b3JlLnNlbGVjdChjQSl9dHJpZ2dlclJlbG9hZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goV0UoKSl9Z2V0UmVsb2FkVGl0bGUodCl7cmV0dXJuIHQ/YExhc3QgVXBkYXRlZDogJHt0fWA6IkxvYWRpbmcuLi4ifX1XRy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8V0cpKE11KEVrKSl9LFdHLsm1Y21wPVVvKHt0eXBlOldHLHNlbGVjdG9yczpbWyJhcHAtaGVhZGVyLXJlbG9hZCJdXSxkZWNsczo2LHZhcnM6MTMsY29uc3RzOltbIm1hdC1pY29uLWJ1dHRvbiIsIiIsMSwicmVsb2FkLWJ1dHRvbiIsMywidGl0bGUiLCJkaXNhYmxlZCIsImNsaWNrIl0sWyJzdmdJY29uIiwicmVmcmVzaF8yNHB4IiwxLCJyZWZyZXNoLWljb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKE91KDAsImJ1dHRvbiIsMCksTnUoImNsaWNrIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLnRyaWdnZXJSZWxvYWQoKX0pKSxPYigxLCJhc3luYyIpLE9iKDIsImRhdGUiKSxPYigzLCJhc3luYyIpLE9iKDQsImFzeW5jIiksd3UoNSwibWF0LWljb24iLDEpLFB1KCkpLDImZSYmKGFmKCJsb2FkaW5nIixQYigxLDQsbi5pc1JlbG9hZGluZyQpKSx2dSgidGl0bGUiLG4uZ2V0UmVsb2FkVGl0bGUod2IoMiw2LFBiKDMsOSxuLmxhc3RMb2FkZWRUaW1lSW5NcyQpLCJtZWRpdW0iKSkpKCJkaXNhYmxlZCIsUGIoNCwxMSxuLnJlbG9hZERpc2FibGVkJCkpKX0sZGlyZWN0aXZlczpbTkgsY0ddLHBpcGVzOltNdix3dl0sc3R5bGVzOlsiLnJlbG9hZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAucmVmcmVzaC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgfVxuXG4gICAgICAucmVsb2FkLWJ1dHRvbi5sb2FkaW5nW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIGFuaW1hdGlvbjogcm90YXRlIDJzIGxpbmVhciBpbmZpbml0ZTtcbiAgICAgIH1cblxuICAgICAgQGtleWZyYW1lcyByb3RhdGUge1xuICAgICAgICAwJSB7XG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XG4gICAgICAgIH1cbiAgICAgICAgNTAlIHtcbiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO1xuICAgICAgICB9XG4gICAgICAgIDEwMCUge1xuICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XG4gICAgICAgIH1cbiAgICAgIH0iXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoV0csW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoiYXBwLWhlYWRlci1yZWxvYWQiLHRlbXBsYXRlOidcbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz0icmVsb2FkLWJ1dHRvbiJcbiAgICAgIFtjbGFzcy5sb2FkaW5nXT0iaXNSZWxvYWRpbmckIHwgYXN5bmMiXG4gICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgIChjbGljayk9InRyaWdnZXJSZWxvYWQoKSJcbiAgICAgIFt0aXRsZV09ImdldFJlbG9hZFRpdGxlKGxhc3RMb2FkZWRUaW1lSW5NcyQgfCBhc3luYyB8IGRhdGU6IFwnbWVkaXVtXCcpIlxuICAgICAgW2Rpc2FibGVkXT0icmVsb2FkRGlzYWJsZWQkIHwgYXN5bmMiXG4gICAgPlxuICAgICAgPG1hdC1pY29uIGNsYXNzPSJyZWZyZXNoLWljb24iIHN2Z0ljb249InJlZnJlc2hfMjRweCI+PC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgJyxzdHlsZXM6WyJcbiAgICAgIC5yZWxvYWQtYnV0dG9uLFxuICAgICAgLnJlZnJlc2gtaWNvbiB7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgfVxuXG4gICAgICAucmVsb2FkLWJ1dHRvbi5sb2FkaW5nIHtcbiAgICAgICAgYW5pbWF0aW9uOiByb3RhdGUgMnMgbGluZWFyIGluZmluaXRlO1xuICAgICAgfVxuXG4gICAgICBAa2V5ZnJhbWVzIHJvdGF0ZSB7XG4gICAgICAgIDAlIHtcbiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcbiAgICAgICAgfVxuICAgICAgICA1MCUge1xuICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XG4gICAgICAgIH1cbiAgICAgICAgMTAwJSB7XG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICJdfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6RWt9XX0pLG51bGwpO2NvbnN0IEdHPSJzZXR0aW5ncyIsWUc9e3N0YXRlOkJFLkxPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6RGF0ZS5ub3coKSxzZXR0aW5nczp7cmVsb2FkUGVyaW9kSW5NczozZTQscmVsb2FkRW5hYmxlZDohMSxwYWdlU2l6ZToxMn19LHFHPUZrKEdHKSxaRz16ayhxRywodD0+dC5zdGF0ZSkpLFhHPXprKHFHLCh0PT50LnNldHRpbmdzLnJlbG9hZEVuYWJsZWQpKSxLRz16ayhxRywodD0+dC5zZXR0aW5ncy5yZWxvYWRQZXJpb2RJbk1zKSksSkc9emsocUcsKHQ9PnQuc2V0dGluZ3MucGFnZVNpemUpKSxRRz1XdygiW1NldHRpbmdzXSBSZWxvYWQgRW5hYmxlIFRvZ2dsZWQiKSwkRz1XdygiW1NldHRpbmdzXSBSZWxvYWQgUGVyaW9kIENoYW5nZSIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHRZPVd3KCJbU2V0dGluZ3NdIFBhZ2UgU2l6ZSBDaGFuZ2UiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KTtmdW5jdGlvbiBlWSh0KXtyZXR1cm4gdC5zdGF0ZSE9PUJFLk5PVF9MT0FERUQmJnQuc3RhdGUhPT1CRS5MT0FESU5HfWNvbnN0IG5ZPW1TKFlHLHBTKFFHLCh0PT5lWSh0KT9PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3NldHRpbmdzOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LnNldHRpbmdzKSx7cmVsb2FkRW5hYmxlZDohdC5zZXR0aW5ncy5yZWxvYWRFbmFibGVkfSl9KTp0KSkscFMoJEcsKCh0LHtwZXJpb2RJbk1zOmV9KT0+e2lmKCFlWSh0KSlyZXR1cm4gdDtjb25zdCBuPWU+PTNlND9lOnQuc2V0dGluZ3MucmVsb2FkUGVyaW9kSW5NcztyZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtzZXR0aW5nczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5zZXR0aW5ncykse3JlbG9hZFBlcmlvZEluTXM6bn0pfSl9KSkscFModFksKCh0LHtzaXplOmV9KT0+e2lmKCFlWSh0KSlyZXR1cm4gdDtjb25zdCBuPWU+MD9lOnQuc2V0dGluZ3MucGFnZVNpemU7cmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7c2V0dGluZ3M6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuc2V0dGluZ3MpLHtwYWdlU2l6ZTpufSl9KX0pKSxwUyhQUiwoKHQse3BhcnRpYWxTZXR0aW5nczplfSk9Pntjb25zdCBuPXt9O3JldHVybiBOdW1iZXIuaXNGaW5pdGUoZS5wYWdlU2l6ZSkmJmUucGFnZVNpemU+MCYmKG4ucGFnZVNpemU9ZS5wYWdlU2l6ZSksImJvb2xlYW4iPT10eXBlb2YgZS5hdXRvUmVsb2FkJiYobi5yZWxvYWRFbmFibGVkPWUuYXV0b1JlbG9hZCksTnVtYmVyLmlzRmluaXRlKGUuYXV0b1JlbG9hZFBlcmlvZEluTXMpJiZlLmF1dG9SZWxvYWRQZXJpb2RJbk1zPjNlNCYmKG4ucmVsb2FkUGVyaW9kSW5Ncz1lLmF1dG9SZWxvYWRQZXJpb2RJbk1zKSxPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3NldHRpbmdzOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LnNldHRpbmdzKSxuKX0pfSkpKTtmdW5jdGlvbiBvWSh0LGUpe3JldHVybiBuWSh0LGUpfWNvbnN0IGlZPVsiaW5wdXQiXSxhWT1mdW5jdGlvbigpe3JldHVybntlbnRlckR1cmF0aW9uOjE1MH19LHJZPW5ldyBOcigibWF0LWNoZWNrYm94LWRlZmF1bHQtb3B0aW9ucyIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24gc1koKXtyZXR1cm57Y29sb3I6ImFjY2VudCIsY2xpY2tBY3Rpb246ImNoZWNrLWluZGV0ZXJtaW5hdGUifX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovfSk7bGV0IGxZPTA7Y29uc3QgY1k9e2NvbG9yOiJhY2NlbnQiLGNsaWNrQWN0aW9uOiJjaGVjay1pbmRldGVybWluYXRlIn0sZFk9e3Byb3ZpZGU6dlYsdXNlRXhpc3Rpbmc6SW4oKCgpPT51WSkpLG11bHRpOiEwfTtjbGFzcyBwWXt9Y29uc3QgbVk9SHooSXooenooTnooY2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5fZWxlbWVudFJlZj10fX0pKSkpO2NsYXNzIHVZIGV4dGVuZHMgbVl7Y29uc3RydWN0b3IodCxlLG4sbyxpLGEscil7c3VwZXIodCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9ZSx0aGlzLl9mb2N1c01vbml0b3I9bix0aGlzLl9uZ1pvbmU9byx0aGlzLl9hbmltYXRpb25Nb2RlPWEsdGhpcy5fb3B0aW9ucz1yLHRoaXMuYXJpYUxhYmVsPSIiLHRoaXMuYXJpYUxhYmVsbGVkYnk9bnVsbCx0aGlzLl91bmlxdWVJZD0ibWF0LWNoZWNrYm94LSIrICsrbFksdGhpcy5pZD10aGlzLl91bmlxdWVJZCx0aGlzLmxhYmVsUG9zaXRpb249ImFmdGVyIix0aGlzLm5hbWU9bnVsbCx0aGlzLmNoYW5nZT1uZXcgQWIsdGhpcy5pbmRldGVybWluYXRlQ2hhbmdlPW5ldyBBYix0aGlzLl9vblRvdWNoZWQ9KCk9Pnt9LHRoaXMuX2N1cnJlbnRBbmltYXRpb25DbGFzcz0iIix0aGlzLl9jdXJyZW50Q2hlY2tTdGF0ZT0wLHRoaXMuX2NvbnRyb2xWYWx1ZUFjY2Vzc29yQ2hhbmdlRm49KCk9Pnt9LHRoaXMuX2NoZWNrZWQ9ITEsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5faW5kZXRlcm1pbmF0ZT0hMSx0aGlzLl9vcHRpb25zPXRoaXMuX29wdGlvbnN8fGNZLHRoaXMuY29sb3I9dGhpcy5kZWZhdWx0Q29sb3I9dGhpcy5fb3B0aW9ucy5jb2xvcnx8Y1kuY29sb3IsdGhpcy50YWJJbmRleD1wYXJzZUludChpKXx8MH1nZXQgaW5wdXRJZCgpe3JldHVybmAke3RoaXMuaWR8fHRoaXMuX3VuaXF1ZUlkfS1pbnB1dGB9Z2V0IHJlcXVpcmVkKCl7cmV0dXJuIHRoaXMuX3JlcXVpcmVkfXNldCByZXF1aXJlZCh0KXt0aGlzLl9yZXF1aXJlZD1ySSh0KX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9mb2N1c01vbml0b3IubW9uaXRvcih0aGlzLl9lbGVtZW50UmVmLCEwKS5zdWJzY3JpYmUoKHQ9Pnt0fHxQcm9taXNlLnJlc29sdmUoKS50aGVuKCgoKT0+e3RoaXMuX29uVG91Y2hlZCgpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSkpfSkpLHRoaXMuX3N5bmNJbmRldGVybWluYXRlKHRoaXMuX2luZGV0ZXJtaW5hdGUpfW5nQWZ0ZXJWaWV3Q2hlY2tlZCgpe31uZ09uRGVzdHJveSgpe3RoaXMuX2ZvY3VzTW9uaXRvci5zdG9wTW9uaXRvcmluZyh0aGlzLl9lbGVtZW50UmVmKX1nZXQgY2hlY2tlZCgpe3JldHVybiB0aGlzLl9jaGVja2VkfXNldCBjaGVja2VkKHQpe3QhPXRoaXMuY2hlY2tlZCYmKHRoaXMuX2NoZWNrZWQ9dCx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfXNldCBkaXNhYmxlZCh0KXtjb25zdCBlPXJJKHQpO2UhPT10aGlzLmRpc2FibGVkJiYodGhpcy5fZGlzYWJsZWQ9ZSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9Z2V0IGluZGV0ZXJtaW5hdGUoKXtyZXR1cm4gdGhpcy5faW5kZXRlcm1pbmF0ZX1zZXQgaW5kZXRlcm1pbmF0ZSh0KXtjb25zdCBlPXQhPXRoaXMuX2luZGV0ZXJtaW5hdGU7dGhpcy5faW5kZXRlcm1pbmF0ZT1ySSh0KSxlJiYodGhpcy5fdHJhbnNpdGlvbkNoZWNrU3RhdGUodGhpcy5faW5kZXRlcm1pbmF0ZT8zOnRoaXMuY2hlY2tlZD8xOjIpLHRoaXMuaW5kZXRlcm1pbmF0ZUNoYW5nZS5lbWl0KHRoaXMuX2luZGV0ZXJtaW5hdGUpKSx0aGlzLl9zeW5jSW5kZXRlcm1pbmF0ZSh0aGlzLl9pbmRldGVybWluYXRlKX1faXNSaXBwbGVEaXNhYmxlZCgpe3JldHVybiB0aGlzLmRpc2FibGVSaXBwbGV8fHRoaXMuZGlzYWJsZWR9X29uTGFiZWxUZXh0Q2hhbmdlKCl7dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpfXdyaXRlVmFsdWUodCl7dGhpcy5jaGVja2VkPSEhdH1yZWdpc3Rlck9uQ2hhbmdlKHQpe3RoaXMuX2NvbnRyb2xWYWx1ZUFjY2Vzc29yQ2hhbmdlRm49dH1yZWdpc3Rlck9uVG91Y2hlZCh0KXt0aGlzLl9vblRvdWNoZWQ9dH1zZXREaXNhYmxlZFN0YXRlKHQpe3RoaXMuZGlzYWJsZWQ9dH1fZ2V0QXJpYUNoZWNrZWQoKXtyZXR1cm4gdGhpcy5jaGVja2VkPyJ0cnVlIjp0aGlzLmluZGV0ZXJtaW5hdGU/Im1peGVkIjoiZmFsc2UifV90cmFuc2l0aW9uQ2hlY2tTdGF0ZSh0KXtsZXQgZT10aGlzLl9jdXJyZW50Q2hlY2tTdGF0ZSxuPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtpZihlIT09dCYmKHRoaXMuX2N1cnJlbnRBbmltYXRpb25DbGFzcy5sZW5ndGg+MCYmbi5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuX2N1cnJlbnRBbmltYXRpb25DbGFzcyksdGhpcy5fY3VycmVudEFuaW1hdGlvbkNsYXNzPXRoaXMuX2dldEFuaW1hdGlvbkNsYXNzRm9yQ2hlY2tTdGF0ZVRyYW5zaXRpb24oZSx0KSx0aGlzLl9jdXJyZW50Q2hlY2tTdGF0ZT10LHRoaXMuX2N1cnJlbnRBbmltYXRpb25DbGFzcy5sZW5ndGg+MCkpe24uY2xhc3NMaXN0LmFkZCh0aGlzLl9jdXJyZW50QW5pbWF0aW9uQ2xhc3MpO2NvbnN0IHQ9dGhpcy5fY3VycmVudEFuaW1hdGlvbkNsYXNzO3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKCk9PntzZXRUaW1lb3V0KCgoKT0+e24uY2xhc3NMaXN0LnJlbW92ZSh0KX0pLDFlMyl9KSl9fV9lbWl0Q2hhbmdlRXZlbnQoKXtjb25zdCB0PW5ldyBwWTt0LnNvdXJjZT10aGlzLHQuY2hlY2tlZD10aGlzLmNoZWNrZWQsdGhpcy5fY29udHJvbFZhbHVlQWNjZXNzb3JDaGFuZ2VGbih0aGlzLmNoZWNrZWQpLHRoaXMuY2hhbmdlLmVtaXQodCksdGhpcy5faW5wdXRFbGVtZW50JiYodGhpcy5faW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2hlY2tlZD10aGlzLmNoZWNrZWQpfXRvZ2dsZSgpe3RoaXMuY2hlY2tlZD0hdGhpcy5jaGVja2VkfV9vbklucHV0Q2xpY2sodCl7dmFyIGU7Y29uc3Qgbj1udWxsPT09KGU9dGhpcy5fb3B0aW9ucyl8fHZvaWQgMD09PWU/dm9pZCAwOmUuY2xpY2tBY3Rpb247dC5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLmRpc2FibGVkfHwibm9vcCI9PT1uP3RoaXMuZGlzYWJsZWR8fCJub29wIiE9PW58fCh0aGlzLl9pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5jaGVja2VkPXRoaXMuY2hlY2tlZCx0aGlzLl9pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5pbmRldGVybWluYXRlPXRoaXMuaW5kZXRlcm1pbmF0ZSk6KHRoaXMuaW5kZXRlcm1pbmF0ZSYmImNoZWNrIiE9PW4mJlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCgpPT57dGhpcy5faW5kZXRlcm1pbmF0ZT0hMSx0aGlzLmluZGV0ZXJtaW5hdGVDaGFuZ2UuZW1pdCh0aGlzLl9pbmRldGVybWluYXRlKX0pKSx0aGlzLnRvZ2dsZSgpLHRoaXMuX3RyYW5zaXRpb25DaGVja1N0YXRlKHRoaXMuX2NoZWNrZWQ/MToyKSx0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoKSl9Zm9jdXModCxlKXt0P3RoaXMuX2ZvY3VzTW9uaXRvci5mb2N1c1ZpYSh0aGlzLl9pbnB1dEVsZW1lbnQsdCxlKTp0aGlzLl9pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cyhlKX1fb25JbnRlcmFjdGlvbkV2ZW50KHQpe3Quc3RvcFByb3BhZ2F0aW9uKCl9X2dldEFuaW1hdGlvbkNsYXNzRm9yQ2hlY2tTdGF0ZVRyYW5zaXRpb24odCxlKXtpZigiTm9vcEFuaW1hdGlvbnMiPT09dGhpcy5fYW5pbWF0aW9uTW9kZSlyZXR1cm4iIjtsZXQgbj0iIjtzd2l0Y2godCl7Y2FzZSAwOmlmKDE9PT1lKW49InVuY2hlY2tlZC1jaGVja2VkIjtlbHNle2lmKDMhPWUpcmV0dXJuIiI7bj0idW5jaGVja2VkLWluZGV0ZXJtaW5hdGUifWJyZWFrO2Nhc2UgMjpuPTE9PT1lPyJ1bmNoZWNrZWQtY2hlY2tlZCI6InVuY2hlY2tlZC1pbmRldGVybWluYXRlIjticmVhaztjYXNlIDE6bj0yPT09ZT8iY2hlY2tlZC11bmNoZWNrZWQiOiJjaGVja2VkLWluZGV0ZXJtaW5hdGUiO2JyZWFrO2Nhc2UgMzpuPTE9PT1lPyJpbmRldGVybWluYXRlLWNoZWNrZWQiOiJpbmRldGVybWluYXRlLXVuY2hlY2tlZCJ9cmV0dXJuYG1hdC1jaGVja2JveC1hbmltLSR7bn1gfV9zeW5jSW5kZXRlcm1pbmF0ZSh0KXtjb25zdCBlPXRoaXMuX2lucHV0RWxlbWVudDtlJiYoZS5uYXRpdmVFbGVtZW50LmluZGV0ZXJtaW5hdGU9dCl9fXVZLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHx1WSkoTXUoY2gpLE11KEhoKSxNdShweiksTXUodEMpLE9yKCJ0YWJpbmRleCIpLE11KE53LDgpLE11KHJZLDgpKX0sdVkuybVjbXA9VW8oe3R5cGU6dVksc2VsZWN0b3JzOltbIm1hdC1jaGVja2JveCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24gdChlLG4pe2lmKDEmZSYmKFdiKGlZLDEpLFdiKHBILDEpKSwyJmUpe2xldCB0O1ViKHQ9WWIoKSkmJihuLl9pbnB1dEVsZW1lbnQ9dC5maXJzdCksVWIodD1ZYigpKSYmKG4ucmlwcGxlPXQuZmlyc3QpfX0saG9zdEF0dHJzOlsxLCJtYXQtY2hlY2tib3giXSxob3N0VmFyczoxMixob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezImZSYmKGtmKCJpZCIsbi5pZCksTm0oInRhYmluZGV4IixudWxsKSxhZigibWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUiLG4uaW5kZXRlcm1pbmF0ZSkoIm1hdC1jaGVja2JveC1jaGVja2VkIixuLmNoZWNrZWQpKCJtYXQtY2hlY2tib3gtZGlzYWJsZWQiLG4uZGlzYWJsZWQpKCJtYXQtY2hlY2tib3gtbGFiZWwtYmVmb3JlIiwiYmVmb3JlIj09bi5sYWJlbFBvc2l0aW9uKSgiX21hdC1hbmltYXRpb24tbm9vcGFibGUiLCJOb29wQW5pbWF0aW9ucyI9PT1uLl9hbmltYXRpb25Nb2RlKSl9LGlucHV0czp7ZGlzYWJsZVJpcHBsZToiZGlzYWJsZVJpcHBsZSIsY29sb3I6ImNvbG9yIix0YWJJbmRleDoidGFiSW5kZXgiLGFyaWFMYWJlbDpbImFyaWEtbGFiZWwiLCJhcmlhTGFiZWwiXSxhcmlhTGFiZWxsZWRieTpbImFyaWEtbGFiZWxsZWRieSIsImFyaWFMYWJlbGxlZGJ5Il0saWQ6ImlkIixsYWJlbFBvc2l0aW9uOiJsYWJlbFBvc2l0aW9uIixuYW1lOiJuYW1lIixyZXF1aXJlZDoicmVxdWlyZWQiLGNoZWNrZWQ6ImNoZWNrZWQiLGRpc2FibGVkOiJkaXNhYmxlZCIsaW5kZXRlcm1pbmF0ZToiaW5kZXRlcm1pbmF0ZSIsYXJpYURlc2NyaWJlZGJ5OlsiYXJpYS1kZXNjcmliZWRieSIsImFyaWFEZXNjcmliZWRieSJdLHZhbHVlOiJ2YWx1ZSJ9LG91dHB1dHM6e2NoYW5nZToiY2hhbmdlIixpbmRldGVybWluYXRlQ2hhbmdlOiJpbmRldGVybWluYXRlQ2hhbmdlIn0sZXhwb3J0QXM6WyJtYXRDaGVja2JveCJdLGZlYXR1cmVzOltpaChbZFldKSxnbV0sbmdDb250ZW50U2VsZWN0b3JzOlsiKiJdLGRlY2xzOjE3LHZhcnM6MjAsY29uc3RzOltbMSwibWF0LWNoZWNrYm94LWxheW91dCJdLFsibGFiZWwiLCIiXSxbMSwibWF0LWNoZWNrYm94LWlubmVyLWNvbnRhaW5lciJdLFsidHlwZSIsImNoZWNrYm94IiwxLCJtYXQtY2hlY2tib3gtaW5wdXQiLCJjZGstdmlzdWFsbHktaGlkZGVuIiwzLCJpZCIsInJlcXVpcmVkIiwiY2hlY2tlZCIsImRpc2FibGVkIiwidGFiSW5kZXgiLCJjaGFuZ2UiLCJjbGljayJdLFsiaW5wdXQiLCIiXSxbIm1hdFJpcHBsZSIsIiIsMSwibWF0LWNoZWNrYm94LXJpcHBsZSIsIm1hdC1mb2N1cy1pbmRpY2F0b3IiLDMsIm1hdFJpcHBsZVRyaWdnZXIiLCJtYXRSaXBwbGVEaXNhYmxlZCIsIm1hdFJpcHBsZVJhZGl1cyIsIm1hdFJpcHBsZUNlbnRlcmVkIiwibWF0UmlwcGxlQW5pbWF0aW9uIl0sWzEsIm1hdC1yaXBwbGUtZWxlbWVudCIsIm1hdC1jaGVja2JveC1wZXJzaXN0ZW50LXJpcHBsZSJdLFsxLCJtYXQtY2hlY2tib3gtZnJhbWUiXSxbMSwibWF0LWNoZWNrYm94LWJhY2tncm91bmQiXSxbInZlcnNpb24iLCIxLjEiLCJmb2N1c2FibGUiLCJmYWxzZSIsInZpZXdCb3giLCIwIDAgMjQgMjQiLDAsInhtbCIsInNwYWNlIiwicHJlc2VydmUiLDEsIm1hdC1jaGVja2JveC1jaGVja21hcmsiXSxbImZpbGwiLCJub25lIiwic3Ryb2tlIiwid2hpdGUiLCJkIiwiTTQuMSwxMi43IDksMTcuNiAyMC4zLDYuMyIsMSwibWF0LWNoZWNrYm94LWNoZWNrbWFyay1wYXRoIl0sWzEsIm1hdC1jaGVja2JveC1taXhlZG1hcmsiXSxbMSwibWF0LWNoZWNrYm94LWxhYmVsIiwzLCJjZGtPYnNlcnZlQ29udGVudCJdLFsiY2hlY2tib3hMYWJlbCIsIiJdLFsyLCJkaXNwbGF5Iiwibm9uZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7aWYoMSZlJiYoVnUoKSxPdSgwLCJsYWJlbCIsMCwxKSxPdSgyLCJzcGFuIiwyKSxPdSgzLCJpbnB1dCIsMyw0KSxOdSgiY2hhbmdlIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5fb25JbnRlcmFjdGlvbkV2ZW50KGUpfSkpKCJjbGljayIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4uX29uSW5wdXRDbGljayhlKX0pKSxQdSgpLE91KDUsInNwYW4iLDUpLHd1KDYsInNwYW4iLDYpLFB1KCksd3UoNywic3BhbiIsNyksT3UoOCwic3BhbiIsOCksSGEoKSxPdSg5LCJzdmciLDkpLHd1KDEwLCJwYXRoIiwxMCksUHUoKSxGYSgpLHd1KDExLCJzcGFuIiwxMSksUHUoKSxQdSgpLE91KDEyLCJzcGFuIiwxMiwxMyksTnUoImNka09ic2VydmVDb250ZW50IiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLl9vbkxhYmVsVGV4dENoYW5nZSgpfSkpLE91KDE0LCJzcGFuIiwxNCksTWYoMTUsIsKgIiksUHUoKSxqdSgxNiksUHUoKSxQdSgpKSwyJmUpe2NvbnN0IHQ9R20oMSksZT1HbSgxMyk7Tm0oImZvciIsbi5pbnB1dElkKSxKYygyKSxhZigibWF0LWNoZWNrYm94LWlubmVyLWNvbnRhaW5lci1uby1zaWRlLW1hcmdpbiIsIWUudGV4dENvbnRlbnR8fCFlLnRleHRDb250ZW50LnRyaW0oKSksSmMoMSksdnUoImlkIixuLmlucHV0SWQpKCJyZXF1aXJlZCIsbi5yZXF1aXJlZCkoImNoZWNrZWQiLG4uY2hlY2tlZCkoImRpc2FibGVkIixuLmRpc2FibGVkKSgidGFiSW5kZXgiLG4udGFiSW5kZXgpLE5tKCJ2YWx1ZSIsbi52YWx1ZSkoIm5hbWUiLG4ubmFtZSkoImFyaWEtbGFiZWwiLG4uYXJpYUxhYmVsfHxudWxsKSgiYXJpYS1sYWJlbGxlZGJ5IixuLmFyaWFMYWJlbGxlZGJ5KSgiYXJpYS1jaGVja2VkIixuLl9nZXRBcmlhQ2hlY2tlZCgpKSgiYXJpYS1kZXNjcmliZWRieSIsbi5hcmlhRGVzY3JpYmVkYnkpLEpjKDIpLHZ1KCJtYXRSaXBwbGVUcmlnZ2VyIix0KSgibWF0UmlwcGxlRGlzYWJsZWQiLG4uX2lzUmlwcGxlRGlzYWJsZWQoKSkoIm1hdFJpcHBsZVJhZGl1cyIsMjApKCJtYXRSaXBwbGVDZW50ZXJlZCIsITApKCJtYXRSaXBwbGVBbmltYXRpb24iLGZiKDE5LGFZKSl9fSxkaXJlY3RpdmVzOltwSCxTSV0sc3R5bGVzOlsiQGtleWZyYW1lcyBtYXQtY2hlY2tib3gtZmFkZS1pbi1iYWNrZ3JvdW5kezAle29wYWNpdHk6MH01MCV7b3BhY2l0eToxfX1Aa2V5ZnJhbWVzIG1hdC1jaGVja2JveC1mYWRlLW91dC1iYWNrZ3JvdW5kezAlLDUwJXtvcGFjaXR5OjF9MTAwJXtvcGFjaXR5OjB9fUBrZXlmcmFtZXMgbWF0LWNoZWNrYm94LXVuY2hlY2tlZC1jaGVja2VkLWNoZWNrbWFyay1wYXRoezAlLDUwJXtzdHJva2UtZGFzaG9mZnNldDoyMi45MTAyNTl9NTAle2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMC4xKX0xMDAle3N0cm9rZS1kYXNob2Zmc2V0OjB9fUBrZXlmcmFtZXMgbWF0LWNoZWNrYm94LXVuY2hlY2tlZC1pbmRldGVybWluYXRlLW1peGVkbWFya3swJSw2OC4yJXt0cmFuc2Zvcm06c2NhbGVYKDApfTY4LjIle2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKDAsIDAsIDAsIDEpfTEwMCV7dHJhbnNmb3JtOnNjYWxlWCgxKX19QGtleWZyYW1lcyBtYXQtY2hlY2tib3gtY2hlY2tlZC11bmNoZWNrZWQtY2hlY2ttYXJrLXBhdGh7ZnJvbXthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLjQsIDAsIDEsIDEpO3N0cm9rZS1kYXNob2Zmc2V0OjB9dG97c3Ryb2tlLWRhc2hvZmZzZXQ6LTIyLjkxMDI1OX19QGtleWZyYW1lcyBtYXQtY2hlY2tib3gtY2hlY2tlZC1pbmRldGVybWluYXRlLWNoZWNrbWFya3tmcm9te2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMC4xKTtvcGFjaXR5OjE7dHJhbnNmb3JtOnJvdGF0ZSgwZGVnKX10b3tvcGFjaXR5OjA7dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyl9fUBrZXlmcmFtZXMgbWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtY2hlY2tlZC1jaGVja21hcmt7ZnJvbXthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLjE0LCAwLCAwLCAxKTtvcGFjaXR5OjA7dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyl9dG97b3BhY2l0eToxO3RyYW5zZm9ybTpyb3RhdGUoMzYwZGVnKX19QGtleWZyYW1lcyBtYXQtY2hlY2tib3gtY2hlY2tlZC1pbmRldGVybWluYXRlLW1peGVkbWFya3tmcm9te2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMC4xKTtvcGFjaXR5OjA7dHJhbnNmb3JtOnJvdGF0ZSgtNDVkZWcpfXRve29wYWNpdHk6MTt0cmFuc2Zvcm06cm90YXRlKDBkZWcpfX1Aa2V5ZnJhbWVzIG1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLWNoZWNrZWQtbWl4ZWRtYXJre2Zyb217YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoMC4xNCwgMCwgMCwgMSk7b3BhY2l0eToxO3RyYW5zZm9ybTpyb3RhdGUoMGRlZyl9dG97b3BhY2l0eTowO3RyYW5zZm9ybTpyb3RhdGUoMzE1ZGVnKX19QGtleWZyYW1lcyBtYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS11bmNoZWNrZWQtbWl4ZWRtYXJrezAle2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246bGluZWFyO29wYWNpdHk6MTt0cmFuc2Zvcm06c2NhbGVYKDEpfTMyLjglLDEwMCV7b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZVgoMCl9fS5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCwubWF0LWNoZWNrYm94LWZyYW1le3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6MnB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb2ludGVyLWV2ZW50czpub25lfS5tYXQtY2hlY2tib3h7ZGlzcGxheTppbmxpbmUtYmxvY2s7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJveC1zaGFkb3cgMjgwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTtjdXJzb3I6cG9pbnRlcjstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnR9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlLm1hdC1jaGVja2JveHt0cmFuc2l0aW9uOm5vbmU7YW5pbWF0aW9uOm5vbmV9Lm1hdC1jaGVja2JveCAubWF0LXJpcHBsZS1lbGVtZW50Om5vdCgubWF0LWNoZWNrYm94LXBlcnNpc3RlbnQtcmlwcGxlKXtvcGFjaXR5Oi4xNn0ubWF0LWNoZWNrYm94LWxheW91dHstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7Y3Vyc29yOmluaGVyaXQ7YWxpZ24taXRlbXM6YmFzZWxpbmU7dmVydGljYWwtYWxpZ246bWlkZGxlO2Rpc3BsYXk6aW5saW5lLWZsZXg7d2hpdGUtc3BhY2U6bm93cmFwfS5tYXQtY2hlY2tib3gtbGFiZWx7LXdlYmtpdC11c2VyLXNlbGVjdDphdXRvOy1tb3otdXNlci1zZWxlY3Q6YXV0bzstbXMtdXNlci1zZWxlY3Q6YXV0bzt1c2VyLXNlbGVjdDphdXRvfS5tYXQtY2hlY2tib3gtaW5uZXItY29udGFpbmVye2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxNnB4O2xpbmUtaGVpZ2h0OjA7bWFyZ2luOmF1dG87bWFyZ2luLXJpZ2h0OjhweDtvcmRlcjowO3Bvc2l0aW9uOnJlbGF0aXZlO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aGl0ZS1zcGFjZTpub3dyYXA7d2lkdGg6MTZweDtmbGV4LXNocmluazowfVtkaXI9cnRsXSAubWF0LWNoZWNrYm94LWlubmVyLWNvbnRhaW5lcnttYXJnaW4tbGVmdDo4cHg7bWFyZ2luLXJpZ2h0OmF1dG99Lm1hdC1jaGVja2JveC1pbm5lci1jb250YWluZXItbm8tc2lkZS1tYXJnaW57bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MH0ubWF0LWNoZWNrYm94LWZyYW1le2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpib3JkZXItY29sb3IgOTBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAwLjEpO2JvcmRlci13aWR0aDoycHg7Ym9yZGVyLXN0eWxlOnNvbGlkfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWNoZWNrYm94LWZyYW1le3RyYW5zaXRpb246bm9uZX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtY2hlY2tib3guY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1jaGVja2JveC1mcmFtZXtib3JkZXItc3R5bGU6ZG90dGVkfS5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTppbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3RyYW5zaXRpb246YmFja2dyb3VuZC1jb2xvciA5MG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDAuMSksb3BhY2l0eSA5MG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDAuMSk7LXdlYmtpdC1wcmludC1jb2xvci1hZGp1c3Q6ZXhhY3Q7Y29sb3ItYWRqdXN0OmV4YWN0fS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7dHJhbnNpdGlvbjpub25lfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1jaGVja2JveCAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YmFja2dyb3VuZDpub25lfS5tYXQtY2hlY2tib3gtcGVyc2lzdGVudC1yaXBwbGV7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3RyYW5zZm9ybTpub25lfS5tYXQtY2hlY2tib3gtaW5uZXItY29udGFpbmVyOmhvdmVyIC5tYXQtY2hlY2tib3gtcGVyc2lzdGVudC1yaXBwbGV7b3BhY2l0eTouMDR9Lm1hdC1jaGVja2JveC5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWNoZWNrYm94LXBlcnNpc3RlbnQtcmlwcGxle29wYWNpdHk6LjEyfS5tYXQtY2hlY2tib3gtcGVyc2lzdGVudC1yaXBwbGUsLm1hdC1jaGVja2JveC5tYXQtY2hlY2tib3gtZGlzYWJsZWQgLm1hdC1jaGVja2JveC1pbm5lci1jb250YWluZXI6aG92ZXIgLm1hdC1jaGVja2JveC1wZXJzaXN0ZW50LXJpcHBsZXtvcGFjaXR5OjB9QG1lZGlhKGhvdmVyOiBub25lKXsubWF0LWNoZWNrYm94LWlubmVyLWNvbnRhaW5lcjpob3ZlciAubWF0LWNoZWNrYm94LXBlcnNpc3RlbnQtcmlwcGxle2Rpc3BsYXk6bm9uZX19Lm1hdC1jaGVja2JveC1jaGVja21hcmt7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MTAwJX0ubWF0LWNoZWNrYm94LWNoZWNrbWFyay1wYXRoe3N0cm9rZS1kYXNob2Zmc2V0OjIyLjkxMDI1OTtzdHJva2UtZGFzaGFycmF5OjIyLjkxMDI1OTtzdHJva2Utd2lkdGg6Mi4xMzMzMzMzMzMzcHh9LmNkay1oaWdoLWNvbnRyYXN0LWJsYWNrLW9uLXdoaXRlIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJrLXBhdGh7c3Ryb2tlOiMwMDAgIWltcG9ydGFudH0ubWF0LWNoZWNrYm94LW1peGVkbWFya3t3aWR0aDpjYWxjKDEwMCUgLSA2cHgpO2hlaWdodDoycHg7b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZVgoMCkgcm90YXRlKDBkZWcpO2JvcmRlci1yYWRpdXM6MnB4fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1jaGVja2JveC1taXhlZG1hcmt7aGVpZ2h0OjA7Ym9yZGVyLXRvcDpzb2xpZCAycHg7bWFyZ2luLXRvcDoycHh9Lm1hdC1jaGVja2JveC1sYWJlbC1iZWZvcmUgLm1hdC1jaGVja2JveC1pbm5lci1jb250YWluZXJ7b3JkZXI6MTttYXJnaW4tbGVmdDo4cHg7bWFyZ2luLXJpZ2h0OmF1dG99W2Rpcj1ydGxdIC5tYXQtY2hlY2tib3gtbGFiZWwtYmVmb3JlIC5tYXQtY2hlY2tib3gtaW5uZXItY29udGFpbmVye21hcmdpbi1sZWZ0OmF1dG87bWFyZ2luLXJpZ2h0OjhweH0ubWF0LWNoZWNrYm94LWNoZWNrZWQgLm1hdC1jaGVja2JveC1jaGVja21hcmt7b3BhY2l0eToxfS5tYXQtY2hlY2tib3gtY2hlY2tlZCAubWF0LWNoZWNrYm94LWNoZWNrbWFyay1wYXRoe3N0cm9rZS1kYXNob2Zmc2V0OjB9Lm1hdC1jaGVja2JveC1jaGVja2VkIC5tYXQtY2hlY2tib3gtbWl4ZWRtYXJre3RyYW5zZm9ybTpzY2FsZVgoMSkgcm90YXRlKC00NWRlZyl9Lm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJre29wYWNpdHk6MDt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKX0ubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUgLm1hdC1jaGVja2JveC1jaGVja21hcmstcGF0aHtzdHJva2UtZGFzaG9mZnNldDowfS5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSAubWF0LWNoZWNrYm94LW1peGVkbWFya3tvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlWCgxKSByb3RhdGUoMGRlZyl9Lm1hdC1jaGVja2JveC11bmNoZWNrZWQgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9Lm1hdC1jaGVja2JveC1kaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtY2hlY2tib3gtZGlzYWJsZWR7b3BhY2l0eTouNX0ubWF0LWNoZWNrYm94LWFuaW0tdW5jaGVja2VkLWNoZWNrZWQgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2FuaW1hdGlvbjoxODBtcyBsaW5lYXIgMG1zIG1hdC1jaGVja2JveC1mYWRlLWluLWJhY2tncm91bmR9Lm1hdC1jaGVja2JveC1hbmltLXVuY2hlY2tlZC1jaGVja2VkIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJrLXBhdGh7YW5pbWF0aW9uOjE4MG1zIGxpbmVhciAwbXMgbWF0LWNoZWNrYm94LXVuY2hlY2tlZC1jaGVja2VkLWNoZWNrbWFyay1wYXRofS5tYXQtY2hlY2tib3gtYW5pbS11bmNoZWNrZWQtaW5kZXRlcm1pbmF0ZSAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YW5pbWF0aW9uOjE4MG1zIGxpbmVhciAwbXMgbWF0LWNoZWNrYm94LWZhZGUtaW4tYmFja2dyb3VuZH0ubWF0LWNoZWNrYm94LWFuaW0tdW5jaGVja2VkLWluZGV0ZXJtaW5hdGUgLm1hdC1jaGVja2JveC1taXhlZG1hcmt7YW5pbWF0aW9uOjkwbXMgbGluZWFyIDBtcyBtYXQtY2hlY2tib3gtdW5jaGVja2VkLWluZGV0ZXJtaW5hdGUtbWl4ZWRtYXJrfS5tYXQtY2hlY2tib3gtYW5pbS1jaGVja2VkLXVuY2hlY2tlZCAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YW5pbWF0aW9uOjE4MG1zIGxpbmVhciAwbXMgbWF0LWNoZWNrYm94LWZhZGUtb3V0LWJhY2tncm91bmR9Lm1hdC1jaGVja2JveC1hbmltLWNoZWNrZWQtdW5jaGVja2VkIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJrLXBhdGh7YW5pbWF0aW9uOjkwbXMgbGluZWFyIDBtcyBtYXQtY2hlY2tib3gtY2hlY2tlZC11bmNoZWNrZWQtY2hlY2ttYXJrLXBhdGh9Lm1hdC1jaGVja2JveC1hbmltLWNoZWNrZWQtaW5kZXRlcm1pbmF0ZSAubWF0LWNoZWNrYm94LWNoZWNrbWFya3thbmltYXRpb246OTBtcyBsaW5lYXIgMG1zIG1hdC1jaGVja2JveC1jaGVja2VkLWluZGV0ZXJtaW5hdGUtY2hlY2ttYXJrfS5tYXQtY2hlY2tib3gtYW5pbS1jaGVja2VkLWluZGV0ZXJtaW5hdGUgLm1hdC1jaGVja2JveC1taXhlZG1hcmt7YW5pbWF0aW9uOjkwbXMgbGluZWFyIDBtcyBtYXQtY2hlY2tib3gtY2hlY2tlZC1pbmRldGVybWluYXRlLW1peGVkbWFya30ubWF0LWNoZWNrYm94LWFuaW0taW5kZXRlcm1pbmF0ZS1jaGVja2VkIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJre2FuaW1hdGlvbjo1MDBtcyBsaW5lYXIgMG1zIG1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLWNoZWNrZWQtY2hlY2ttYXJrfS5tYXQtY2hlY2tib3gtYW5pbS1pbmRldGVybWluYXRlLWNoZWNrZWQgLm1hdC1jaGVja2JveC1taXhlZG1hcmt7YW5pbWF0aW9uOjUwMG1zIGxpbmVhciAwbXMgbWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtY2hlY2tlZC1taXhlZG1hcmt9Lm1hdC1jaGVja2JveC1hbmltLWluZGV0ZXJtaW5hdGUtdW5jaGVja2VkIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHthbmltYXRpb246MTgwbXMgbGluZWFyIDBtcyBtYXQtY2hlY2tib3gtZmFkZS1vdXQtYmFja2dyb3VuZH0ubWF0LWNoZWNrYm94LWFuaW0taW5kZXRlcm1pbmF0ZS11bmNoZWNrZWQgLm1hdC1jaGVja2JveC1taXhlZG1hcmt7YW5pbWF0aW9uOjMwMG1zIGxpbmVhciAwbXMgbWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtdW5jaGVja2VkLW1peGVkbWFya30ubWF0LWNoZWNrYm94LWlucHV0e2JvdHRvbTowO2xlZnQ6NTAlfS5tYXQtY2hlY2tib3ggLm1hdC1jaGVja2JveC1yaXBwbGV7cG9zaXRpb246YWJzb2x1dGU7bGVmdDpjYWxjKDUwJSAtIDIwcHgpO3RvcDpjYWxjKDUwJSAtIDIwcHgpO2hlaWdodDo0MHB4O3dpZHRoOjQwcHg7ei1pbmRleDoxO3BvaW50ZXItZXZlbnRzOm5vbmV9XG4iXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSx1WS5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmNofSx7dHlwZTpIaH0se3R5cGU6cHp9LHt0eXBlOnRDfSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6UnIsYXJnczpbInRhYmluZGV4Il19XX0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltOd119XX0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltyWV19XX1dLHVZLnByb3BEZWNvcmF0b3JzPXthcmlhTGFiZWw6W3t0eXBlOnlfLGFyZ3M6WyJhcmlhLWxhYmVsIl19XSxhcmlhTGFiZWxsZWRieTpbe3R5cGU6eV8sYXJnczpbImFyaWEtbGFiZWxsZWRieSJdfV0sYXJpYURlc2NyaWJlZGJ5Olt7dHlwZTp5XyxhcmdzOlsiYXJpYS1kZXNjcmliZWRieSJdfV0saWQ6W3t0eXBlOnlffV0scmVxdWlyZWQ6W3t0eXBlOnlffV0sbGFiZWxQb3NpdGlvbjpbe3R5cGU6eV99XSxuYW1lOlt7dHlwZTp5X31dLGNoYW5nZTpbe3R5cGU6X199XSxpbmRldGVybWluYXRlQ2hhbmdlOlt7dHlwZTpfX31dLHZhbHVlOlt7dHlwZTp5X31dLF9pbnB1dEVsZW1lbnQ6W3t0eXBlOkZyLGFyZ3M6WyJpbnB1dCJdfV0scmlwcGxlOlt7dHlwZTpGcixhcmdzOltwSF19XSxjaGVja2VkOlt7dHlwZTp5X31dLGRpc2FibGVkOlt7dHlwZTp5X31dLGluZGV0ZXJtaW5hdGU6W3t0eXBlOnlffV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIodVksW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoibWF0LWNoZWNrYm94Iix0ZW1wbGF0ZTonPGxhYmVsIFthdHRyLmZvcl09ImlucHV0SWQiIGNsYXNzPSJtYXQtY2hlY2tib3gtbGF5b3V0IiAjbGFiZWw+XG4gIDxzcGFuIGNsYXNzPSJtYXQtY2hlY2tib3gtaW5uZXItY29udGFpbmVyIlxuICAgICAgIFtjbGFzcy5tYXQtY2hlY2tib3gtaW5uZXItY29udGFpbmVyLW5vLXNpZGUtbWFyZ2luXT0iIWNoZWNrYm94TGFiZWwudGV4dENvbnRlbnQgfHwgIWNoZWNrYm94TGFiZWwudGV4dENvbnRlbnQudHJpbSgpIj5cbiAgICA8aW5wdXQgI2lucHV0XG4gICAgICAgICAgIGNsYXNzPSJtYXQtY2hlY2tib3gtaW5wdXQgY2RrLXZpc3VhbGx5LWhpZGRlbiIgdHlwZT0iY2hlY2tib3giXG4gICAgICAgICAgIFtpZF09ImlucHV0SWQiXG4gICAgICAgICAgIFtyZXF1aXJlZF09InJlcXVpcmVkIlxuICAgICAgICAgICBbY2hlY2tlZF09ImNoZWNrZWQiXG4gICAgICAgICAgIFthdHRyLnZhbHVlXT0idmFsdWUiXG4gICAgICAgICAgIFtkaXNhYmxlZF09ImRpc2FibGVkIlxuICAgICAgICAgICBbYXR0ci5uYW1lXT0ibmFtZSJcbiAgICAgICAgICAgW3RhYkluZGV4XT0idGFiSW5kZXgiXG4gICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPSJhcmlhTGFiZWwgfHwgbnVsbCJcbiAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT0iYXJpYUxhYmVsbGVkYnkiXG4gICAgICAgICAgIFthdHRyLmFyaWEtY2hlY2tlZF09Il9nZXRBcmlhQ2hlY2tlZCgpIlxuICAgICAgICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT0iYXJpYURlc2NyaWJlZGJ5IlxuICAgICAgICAgICAoY2hhbmdlKT0iX29uSW50ZXJhY3Rpb25FdmVudCgkZXZlbnQpIlxuICAgICAgICAgICAoY2xpY2spPSJfb25JbnB1dENsaWNrKCRldmVudCkiPlxuICAgIDxzcGFuIG1hdFJpcHBsZSBjbGFzcz0ibWF0LWNoZWNrYm94LXJpcHBsZSBtYXQtZm9jdXMtaW5kaWNhdG9yIlxuICAgICAgICAgW21hdFJpcHBsZVRyaWdnZXJdPSJsYWJlbCJcbiAgICAgICAgIFttYXRSaXBwbGVEaXNhYmxlZF09Il9pc1JpcHBsZURpc2FibGVkKCkiXG4gICAgICAgICBbbWF0UmlwcGxlUmFkaXVzXT0iMjAiXG4gICAgICAgICBbbWF0UmlwcGxlQ2VudGVyZWRdPSJ0cnVlIlxuICAgICAgICAgW21hdFJpcHBsZUFuaW1hdGlvbl09IntlbnRlckR1cmF0aW9uOiAxNTB9Ij5cbiAgICAgIDxzcGFuIGNsYXNzPSJtYXQtcmlwcGxlLWVsZW1lbnQgbWF0LWNoZWNrYm94LXBlcnNpc3RlbnQtcmlwcGxlIj48L3NwYW4+XG4gICAgPC9zcGFuPlxuICAgIDxzcGFuIGNsYXNzPSJtYXQtY2hlY2tib3gtZnJhbWUiPjwvc3Bhbj5cbiAgICA8c3BhbiBjbGFzcz0ibWF0LWNoZWNrYm94LWJhY2tncm91bmQiPlxuICAgICAgPHN2ZyB2ZXJzaW9uPSIxLjEiXG4gICAgICAgICAgIGZvY3VzYWJsZT0iZmFsc2UiXG4gICAgICAgICAgIGNsYXNzPSJtYXQtY2hlY2tib3gtY2hlY2ttYXJrIlxuICAgICAgICAgICB2aWV3Qm94PSIwIDAgMjQgMjQiXG4gICAgICAgICAgIHhtbDpzcGFjZT0icHJlc2VydmUiPlxuICAgICAgICA8cGF0aCBjbGFzcz0ibWF0LWNoZWNrYm94LWNoZWNrbWFyay1wYXRoIlxuICAgICAgICAgICAgICBmaWxsPSJub25lIlxuICAgICAgICAgICAgICBzdHJva2U9IndoaXRlIlxuICAgICAgICAgICAgICBkPSJNNC4xLDEyLjcgOSwxNy42IDIwLjMsNi4zIi8+XG4gICAgICA8L3N2Zz5cbiAgICAgIFx4M2MhLS0gRWxlbWVudCBmb3IgcmVuZGVyaW5nIHRoZSBpbmRldGVybWluYXRlIHN0YXRlIGNoZWNrYm94LiAtLVx4M2VcbiAgICAgIDxzcGFuIGNsYXNzPSJtYXQtY2hlY2tib3gtbWl4ZWRtYXJrIj48L3NwYW4+XG4gICAgPC9zcGFuPlxuICA8L3NwYW4+XG4gIDxzcGFuIGNsYXNzPSJtYXQtY2hlY2tib3gtbGFiZWwiICNjaGVja2JveExhYmVsIChjZGtPYnNlcnZlQ29udGVudCk9Il9vbkxhYmVsVGV4dENoYW5nZSgpIj5cbiAgICBceDNjIS0tIEFkZCBhbiBpbnZpc2libGUgc3BhbiBzbyBKQVdTIGNhbiByZWFkIHRoZSBsYWJlbCAtLVx4M2VcbiAgICA8c3BhbiBzdHlsZT0iZGlzcGxheTpub25lIj4mbmJzcDs8L3NwYW4+XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICA8L3NwYW4+XG48L2xhYmVsPlxuJyxleHBvcnRBczoibWF0Q2hlY2tib3giLGhvc3Q6e2NsYXNzOiJtYXQtY2hlY2tib3giLCJbaWRdIjoiaWQiLCJbYXR0ci50YWJpbmRleF0iOiJudWxsIiwiW2NsYXNzLm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlXSI6ImluZGV0ZXJtaW5hdGUiLCJbY2xhc3MubWF0LWNoZWNrYm94LWNoZWNrZWRdIjoiY2hlY2tlZCIsIltjbGFzcy5tYXQtY2hlY2tib3gtZGlzYWJsZWRdIjoiZGlzYWJsZWQiLCJbY2xhc3MubWF0LWNoZWNrYm94LWxhYmVsLWJlZm9yZV0iOidsYWJlbFBvc2l0aW9uID09ICJiZWZvcmUiJywiW2NsYXNzLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlXSI6Il9hbmltYXRpb25Nb2RlID09PSAnTm9vcEFuaW1hdGlvbnMnIn0scHJvdmlkZXJzOltkWV0saW5wdXRzOlsiZGlzYWJsZVJpcHBsZSIsImNvbG9yIiwidGFiSW5kZXgiXSxlbmNhcHN1bGF0aW9uOlBvLk5vbmUsY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaCxzdHlsZXM6WyJAa2V5ZnJhbWVzIG1hdC1jaGVja2JveC1mYWRlLWluLWJhY2tncm91bmR7MCV7b3BhY2l0eTowfTUwJXtvcGFjaXR5OjF9fUBrZXlmcmFtZXMgbWF0LWNoZWNrYm94LWZhZGUtb3V0LWJhY2tncm91bmR7MCUsNTAle29wYWNpdHk6MX0xMDAle29wYWNpdHk6MH19QGtleWZyYW1lcyBtYXQtY2hlY2tib3gtdW5jaGVja2VkLWNoZWNrZWQtY2hlY2ttYXJrLXBhdGh7MCUsNTAle3N0cm9rZS1kYXNob2Zmc2V0OjIyLjkxMDI1OX01MCV7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAwLjEpfTEwMCV7c3Ryb2tlLWRhc2hvZmZzZXQ6MH19QGtleWZyYW1lcyBtYXQtY2hlY2tib3gtdW5jaGVja2VkLWluZGV0ZXJtaW5hdGUtbWl4ZWRtYXJrezAlLDY4LjIle3RyYW5zZm9ybTpzY2FsZVgoMCl9NjguMiV7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoMCwgMCwgMCwgMSl9MTAwJXt0cmFuc2Zvcm06c2NhbGVYKDEpfX1Aa2V5ZnJhbWVzIG1hdC1jaGVja2JveC1jaGVja2VkLXVuY2hlY2tlZC1jaGVja21hcmstcGF0aHtmcm9te2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKDAuNCwgMCwgMSwgMSk7c3Ryb2tlLWRhc2hvZmZzZXQ6MH10b3tzdHJva2UtZGFzaG9mZnNldDotMjIuOTEwMjU5fX1Aa2V5ZnJhbWVzIG1hdC1jaGVja2JveC1jaGVja2VkLWluZGV0ZXJtaW5hdGUtY2hlY2ttYXJre2Zyb217YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAwLjEpO29wYWNpdHk6MTt0cmFuc2Zvcm06cm90YXRlKDBkZWcpfXRve29wYWNpdHk6MDt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKX19QGtleWZyYW1lcyBtYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS1jaGVja2VkLWNoZWNrbWFya3tmcm9te2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKDAuMTQsIDAsIDAsIDEpO29wYWNpdHk6MDt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKX10b3tvcGFjaXR5OjE7dHJhbnNmb3JtOnJvdGF0ZSgzNjBkZWcpfX1Aa2V5ZnJhbWVzIG1hdC1jaGVja2JveC1jaGVja2VkLWluZGV0ZXJtaW5hdGUtbWl4ZWRtYXJre2Zyb217YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAwLjEpO29wYWNpdHk6MDt0cmFuc2Zvcm06cm90YXRlKC00NWRlZyl9dG97b3BhY2l0eToxO3RyYW5zZm9ybTpyb3RhdGUoMGRlZyl9fUBrZXlmcmFtZXMgbWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtY2hlY2tlZC1taXhlZG1hcmt7ZnJvbXthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLjE0LCAwLCAwLCAxKTtvcGFjaXR5OjE7dHJhbnNmb3JtOnJvdGF0ZSgwZGVnKX10b3tvcGFjaXR5OjA7dHJhbnNmb3JtOnJvdGF0ZSgzMTVkZWcpfX1Aa2V5ZnJhbWVzIG1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLXVuY2hlY2tlZC1taXhlZG1hcmt7MCV7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpsaW5lYXI7b3BhY2l0eToxO3RyYW5zZm9ybTpzY2FsZVgoMSl9MzIuOCUsMTAwJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlWCgwKX19Lm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLC5tYXQtY2hlY2tib3gtZnJhbWV7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czoycHg7Ym94LXNpemluZzpib3JkZXItYm94O3BvaW50ZXItZXZlbnRzOm5vbmV9Lm1hdC1jaGVja2JveHtkaXNwbGF5OmlubGluZS1ibG9jazt0cmFuc2l0aW9uOmJhY2tncm91bmQgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSksYm94LXNoYWRvdyAyODBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpO2N1cnNvcjpwb2ludGVyOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudH0uX21hdC1hbmltYXRpb24tbm9vcGFibGUubWF0LWNoZWNrYm94e3RyYW5zaXRpb246bm9uZTthbmltYXRpb246bm9uZX0ubWF0LWNoZWNrYm94IC5tYXQtcmlwcGxlLWVsZW1lbnQ6bm90KC5tYXQtY2hlY2tib3gtcGVyc2lzdGVudC1yaXBwbGUpe29wYWNpdHk6LjE2fS5tYXQtY2hlY2tib3gtbGF5b3V0ey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6aW5oZXJpdDthbGlnbi1pdGVtczpiYXNlbGluZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7ZGlzcGxheTppbmxpbmUtZmxleDt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1hdC1jaGVja2JveC1sYWJlbHstd2Via2l0LXVzZXItc2VsZWN0OmF1dG87LW1vei11c2VyLXNlbGVjdDphdXRvOy1tcy11c2VyLXNlbGVjdDphdXRvO3VzZXItc2VsZWN0OmF1dG99Lm1hdC1jaGVja2JveC1pbm5lci1jb250YWluZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjE2cHg7bGluZS1oZWlnaHQ6MDttYXJnaW46YXV0bzttYXJnaW4tcmlnaHQ6OHB4O29yZGVyOjA7cG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwtYWxpZ246bWlkZGxlO3doaXRlLXNwYWNlOm5vd3JhcDt3aWR0aDoxNnB4O2ZsZXgtc2hyaW5rOjB9W2Rpcj1ydGxdIC5tYXQtY2hlY2tib3gtaW5uZXItY29udGFpbmVye21hcmdpbi1sZWZ0OjhweDttYXJnaW4tcmlnaHQ6YXV0b30ubWF0LWNoZWNrYm94LWlubmVyLWNvbnRhaW5lci1uby1zaWRlLW1hcmdpbnttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowfS5tYXQtY2hlY2tib3gtZnJhbWV7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDt0cmFuc2l0aW9uOmJvcmRlci1jb2xvciA5MG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDAuMSk7Ym9yZGVyLXdpZHRoOjJweDtib3JkZXItc3R5bGU6c29saWR9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtY2hlY2tib3gtZnJhbWV7dHJhbnNpdGlvbjpub25lfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1jaGVja2JveC5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWNoZWNrYm94LWZyYW1le2JvcmRlci1zdHlsZTpkb3R0ZWR9Lm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmlubGluZS1mbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIDkwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMC4xKSxvcGFjaXR5IDkwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMC4xKTstd2Via2l0LXByaW50LWNvbG9yLWFkanVzdDpleGFjdDtjb2xvci1hZGp1c3Q6ZXhhY3R9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHt0cmFuc2l0aW9uOm5vbmV9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWNoZWNrYm94IC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kOm5vbmV9Lm1hdC1jaGVja2JveC1wZXJzaXN0ZW50LXJpcHBsZXtkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7dHJhbnNmb3JtOm5vbmV9Lm1hdC1jaGVja2JveC1pbm5lci1jb250YWluZXI6aG92ZXIgLm1hdC1jaGVja2JveC1wZXJzaXN0ZW50LXJpcHBsZXtvcGFjaXR5Oi4wNH0ubWF0LWNoZWNrYm94LmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtY2hlY2tib3gtcGVyc2lzdGVudC1yaXBwbGV7b3BhY2l0eTouMTJ9Lm1hdC1jaGVja2JveC1wZXJzaXN0ZW50LXJpcHBsZSwubWF0LWNoZWNrYm94Lm1hdC1jaGVja2JveC1kaXNhYmxlZCAubWF0LWNoZWNrYm94LWlubmVyLWNvbnRhaW5lcjpob3ZlciAubWF0LWNoZWNrYm94LXBlcnNpc3RlbnQtcmlwcGxle29wYWNpdHk6MH1AbWVkaWEoaG92ZXI6IG5vbmUpey5tYXQtY2hlY2tib3gtaW5uZXItY29udGFpbmVyOmhvdmVyIC5tYXQtY2hlY2tib3gtcGVyc2lzdGVudC1yaXBwbGV7ZGlzcGxheTpub25lfX0ubWF0LWNoZWNrYm94LWNoZWNrbWFya3t0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxMDAlfS5tYXQtY2hlY2tib3gtY2hlY2ttYXJrLXBhdGh7c3Ryb2tlLWRhc2hvZmZzZXQ6MjIuOTEwMjU5O3N0cm9rZS1kYXNoYXJyYXk6MjIuOTEwMjU5O3N0cm9rZS13aWR0aDoyLjEzMzMzMzMzMzNweH0uY2RrLWhpZ2gtY29udHJhc3QtYmxhY2stb24td2hpdGUgLm1hdC1jaGVja2JveC1jaGVja21hcmstcGF0aHtzdHJva2U6IzAwMCAhaW1wb3J0YW50fS5tYXQtY2hlY2tib3gtbWl4ZWRtYXJre3dpZHRoOmNhbGMoMTAwJSAtIDZweCk7aGVpZ2h0OjJweDtvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlWCgwKSByb3RhdGUoMGRlZyk7Ym9yZGVyLXJhZGl1czoycHh9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWNoZWNrYm94LW1peGVkbWFya3toZWlnaHQ6MDtib3JkZXItdG9wOnNvbGlkIDJweDttYXJnaW4tdG9wOjJweH0ubWF0LWNoZWNrYm94LWxhYmVsLWJlZm9yZSAubWF0LWNoZWNrYm94LWlubmVyLWNvbnRhaW5lcntvcmRlcjoxO21hcmdpbi1sZWZ0OjhweDttYXJnaW4tcmlnaHQ6YXV0b31bZGlyPXJ0bF0gLm1hdC1jaGVja2JveC1sYWJlbC1iZWZvcmUgLm1hdC1jaGVja2JveC1pbm5lci1jb250YWluZXJ7bWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6OHB4fS5tYXQtY2hlY2tib3gtY2hlY2tlZCAubWF0LWNoZWNrYm94LWNoZWNrbWFya3tvcGFjaXR5OjF9Lm1hdC1jaGVja2JveC1jaGVja2VkIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJrLXBhdGh7c3Ryb2tlLWRhc2hvZmZzZXQ6MH0ubWF0LWNoZWNrYm94LWNoZWNrZWQgLm1hdC1jaGVja2JveC1taXhlZG1hcmt7dHJhbnNmb3JtOnNjYWxlWCgxKSByb3RhdGUoLTQ1ZGVnKX0ubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUgLm1hdC1jaGVja2JveC1jaGVja21hcmt7b3BhY2l0eTowO3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpfS5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSAubWF0LWNoZWNrYm94LWNoZWNrbWFyay1wYXRoe3N0cm9rZS1kYXNob2Zmc2V0OjB9Lm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlIC5tYXQtY2hlY2tib3gtbWl4ZWRtYXJre29wYWNpdHk6MTt0cmFuc2Zvcm06c2NhbGVYKDEpIHJvdGF0ZSgwZGVnKX0ubWF0LWNoZWNrYm94LXVuY2hlY2tlZCAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ubWF0LWNoZWNrYm94LWRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1jaGVja2JveC1kaXNhYmxlZHtvcGFjaXR5Oi41fS5tYXQtY2hlY2tib3gtYW5pbS11bmNoZWNrZWQtY2hlY2tlZCAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YW5pbWF0aW9uOjE4MG1zIGxpbmVhciAwbXMgbWF0LWNoZWNrYm94LWZhZGUtaW4tYmFja2dyb3VuZH0ubWF0LWNoZWNrYm94LWFuaW0tdW5jaGVja2VkLWNoZWNrZWQgLm1hdC1jaGVja2JveC1jaGVja21hcmstcGF0aHthbmltYXRpb246MTgwbXMgbGluZWFyIDBtcyBtYXQtY2hlY2tib3gtdW5jaGVja2VkLWNoZWNrZWQtY2hlY2ttYXJrLXBhdGh9Lm1hdC1jaGVja2JveC1hbmltLXVuY2hlY2tlZC1pbmRldGVybWluYXRlIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHthbmltYXRpb246MTgwbXMgbGluZWFyIDBtcyBtYXQtY2hlY2tib3gtZmFkZS1pbi1iYWNrZ3JvdW5kfS5tYXQtY2hlY2tib3gtYW5pbS11bmNoZWNrZWQtaW5kZXRlcm1pbmF0ZSAubWF0LWNoZWNrYm94LW1peGVkbWFya3thbmltYXRpb246OTBtcyBsaW5lYXIgMG1zIG1hdC1jaGVja2JveC11bmNoZWNrZWQtaW5kZXRlcm1pbmF0ZS1taXhlZG1hcmt9Lm1hdC1jaGVja2JveC1hbmltLWNoZWNrZWQtdW5jaGVja2VkIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHthbmltYXRpb246MTgwbXMgbGluZWFyIDBtcyBtYXQtY2hlY2tib3gtZmFkZS1vdXQtYmFja2dyb3VuZH0ubWF0LWNoZWNrYm94LWFuaW0tY2hlY2tlZC11bmNoZWNrZWQgLm1hdC1jaGVja2JveC1jaGVja21hcmstcGF0aHthbmltYXRpb246OTBtcyBsaW5lYXIgMG1zIG1hdC1jaGVja2JveC1jaGVja2VkLXVuY2hlY2tlZC1jaGVja21hcmstcGF0aH0ubWF0LWNoZWNrYm94LWFuaW0tY2hlY2tlZC1pbmRldGVybWluYXRlIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJre2FuaW1hdGlvbjo5MG1zIGxpbmVhciAwbXMgbWF0LWNoZWNrYm94LWNoZWNrZWQtaW5kZXRlcm1pbmF0ZS1jaGVja21hcmt9Lm1hdC1jaGVja2JveC1hbmltLWNoZWNrZWQtaW5kZXRlcm1pbmF0ZSAubWF0LWNoZWNrYm94LW1peGVkbWFya3thbmltYXRpb246OTBtcyBsaW5lYXIgMG1zIG1hdC1jaGVja2JveC1jaGVja2VkLWluZGV0ZXJtaW5hdGUtbWl4ZWRtYXJrfS5tYXQtY2hlY2tib3gtYW5pbS1pbmRldGVybWluYXRlLWNoZWNrZWQgLm1hdC1jaGVja2JveC1jaGVja21hcmt7YW5pbWF0aW9uOjUwMG1zIGxpbmVhciAwbXMgbWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtY2hlY2tlZC1jaGVja21hcmt9Lm1hdC1jaGVja2JveC1hbmltLWluZGV0ZXJtaW5hdGUtY2hlY2tlZCAubWF0LWNoZWNrYm94LW1peGVkbWFya3thbmltYXRpb246NTAwbXMgbGluZWFyIDBtcyBtYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS1jaGVja2VkLW1peGVkbWFya30ubWF0LWNoZWNrYm94LWFuaW0taW5kZXRlcm1pbmF0ZS11bmNoZWNrZWQgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2FuaW1hdGlvbjoxODBtcyBsaW5lYXIgMG1zIG1hdC1jaGVja2JveC1mYWRlLW91dC1iYWNrZ3JvdW5kfS5tYXQtY2hlY2tib3gtYW5pbS1pbmRldGVybWluYXRlLXVuY2hlY2tlZCAubWF0LWNoZWNrYm94LW1peGVkbWFya3thbmltYXRpb246MzAwbXMgbGluZWFyIDBtcyBtYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS11bmNoZWNrZWQtbWl4ZWRtYXJrfS5tYXQtY2hlY2tib3gtaW5wdXR7Ym90dG9tOjA7bGVmdDo1MCV9Lm1hdC1jaGVja2JveCAubWF0LWNoZWNrYm94LXJpcHBsZXtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OmNhbGMoNTAlIC0gMjBweCk7dG9wOmNhbGMoNTAlIC0gMjBweCk7aGVpZ2h0OjQwcHg7d2lkdGg6NDBweDt6LWluZGV4OjE7cG9pbnRlci1ldmVudHM6bm9uZX1cbiJdfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Y2h9LHt0eXBlOkhofSx7dHlwZTpwen0se3R5cGU6dEN9LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpScixhcmdzOlsidGFiaW5kZXgiXX1dfSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W053XX1dfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W3JZXX1dfV19KSx7YXJpYUxhYmVsOlt7dHlwZTp5XyxhcmdzOlsiYXJpYS1sYWJlbCJdfV0sYXJpYUxhYmVsbGVkYnk6W3t0eXBlOnlfLGFyZ3M6WyJhcmlhLWxhYmVsbGVkYnkiXX1dLGlkOlt7dHlwZTp5X31dLGxhYmVsUG9zaXRpb246W3t0eXBlOnlffV0sbmFtZTpbe3R5cGU6eV99XSxjaGFuZ2U6W3t0eXBlOl9ffV0saW5kZXRlcm1pbmF0ZUNoYW5nZTpbe3R5cGU6X199XSxyZXF1aXJlZDpbe3R5cGU6eV99XSxjaGVja2VkOlt7dHlwZTp5X31dLGRpc2FibGVkOlt7dHlwZTp5X31dLGluZGV0ZXJtaW5hdGU6W3t0eXBlOnlffV0sYXJpYURlc2NyaWJlZGJ5Olt7dHlwZTp5XyxhcmdzOlsiYXJpYS1kZXNjcmliZWRieSJdfV0sdmFsdWU6W3t0eXBlOnlffV0sX2lucHV0RWxlbWVudDpbe3R5cGU6RnIsYXJnczpbImlucHV0Il19XSxyaXBwbGU6W3t0eXBlOkZyLGFyZ3M6W3BIXX1dfSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCBmWT17cHJvdmlkZTpFVix1c2VFeGlzdGluZzpJbigoKCk9PmdZKSksbXVsdGk6ITB9O2NsYXNzIGdZIGV4dGVuZHMga1V7fWdZLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIGhZKGV8fGdZKX0sZ1kuybVkaXI9Sm8oe3R5cGU6Z1ksc2VsZWN0b3JzOltbIm1hdC1jaGVja2JveCIsInJlcXVpcmVkIiwiIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyJtYXQtY2hlY2tib3giLCJyZXF1aXJlZCIsIiIsImZvcm1Db250cm9sIiwiIl0sWyJtYXQtY2hlY2tib3giLCJyZXF1aXJlZCIsIiIsIm5nTW9kZWwiLCIiXV0sZmVhdHVyZXM6W2loKFtmWV0pLGdtXX0pO2NvbnN0IGhZPXZyKGdZKTsoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGdZLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6Im1hdC1jaGVja2JveFtyZXF1aXJlZF1bZm9ybUNvbnRyb2xOYW1lXSxcbiAgICAgICAgICAgICBtYXQtY2hlY2tib3hbcmVxdWlyZWRdW2Zvcm1Db250cm9sXSwgbWF0LWNoZWNrYm94W3JlcXVpcmVkXVtuZ01vZGVsXSIscHJvdmlkZXJzOltmWV19XX1dLG51bGwsbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyBiWXt9YlkuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGJZKX0sYlkuybVtb2Q9Wm8oe3R5cGU6Yll9KSxiWS7JtWluaj1jbyh7fSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhiWSx7ZGVjbGFyYXRpb25zOltnWV0sZXhwb3J0czpbZ1ldfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihiWSxbe3R5cGU6a18sYXJnczpbe2V4cG9ydHM6W2dZXSxkZWNsYXJhdGlvbnM6W2dZXX1dfV0sbnVsbCxudWxsKTtjbGFzcyB5WXt9eVkuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHlZKX0seVkuybVtb2Q9Wm8oe3R5cGU6eVl9KSx5WS7JtWluaj1jbyh7aW1wb3J0czpbW21ILFR6LERJLGJZXSxUeixiWV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKHlZLHtkZWNsYXJhdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm5bdVldfSxpbXBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW21ILFR6LERJLGJZXX0sZXhwb3J0czpmdW5jdGlvbigpe3JldHVyblt1WSxUeixiWV19fSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYih5WSxbe3R5cGU6a18sYXJnczpbe2ltcG9ydHM6W21ILFR6LERJLGJZXSxleHBvcnRzOlt1WSxUeixiWV0sZGVjbGFyYXRpb25zOlt1WV19XX1dLG51bGwsbnVsbCk7Y29uc3QgX1k9dkkoe3Bhc3NpdmU6ITB9KTtjbGFzcyBDWXtjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuX3BsYXRmb3JtPXQsdGhpcy5fbmdab25lPWUsdGhpcy5fbW9uaXRvcmVkRWxlbWVudHM9bmV3IE1hcH1tb25pdG9yKHQpe2lmKCF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpcmV0dXJuIFU7Y29uc3QgZT1wSSh0KSxuPXRoaXMuX21vbml0b3JlZEVsZW1lbnRzLmdldChlKTtpZihuKXJldHVybiBuLnN1YmplY3Q7Y29uc3Qgbz1uZXcgeCxpPSJjZGstdGV4dC1maWVsZC1hdXRvZmlsbGVkIixhPXQ9PnsiY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQiIT09dC5hbmltYXRpb25OYW1lfHxlLmNsYXNzTGlzdC5jb250YWlucyhpKT8iY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIj09PXQuYW5pbWF0aW9uTmFtZSYmZS5jbGFzc0xpc3QuY29udGFpbnMoaSkmJihlLmNsYXNzTGlzdC5yZW1vdmUoaSksdGhpcy5fbmdab25lLnJ1bigoKCk9Pm8ubmV4dCh7dGFyZ2V0OnQudGFyZ2V0LGlzQXV0b2ZpbGxlZDohMX0pKSkpOihlLmNsYXNzTGlzdC5hZGQoaSksdGhpcy5fbmdab25lLnJ1bigoKCk9Pm8ubmV4dCh7dGFyZ2V0OnQudGFyZ2V0LGlzQXV0b2ZpbGxlZDohMH0pKSkpfTtyZXR1cm4gdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgoKT0+e2UuYWRkRXZlbnRMaXN0ZW5lcigiYW5pbWF0aW9uc3RhcnQiLGEsX1kpLGUuY2xhc3NMaXN0LmFkZCgiY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkIil9KSksdGhpcy5fbW9uaXRvcmVkRWxlbWVudHMuc2V0KGUse3N1YmplY3Q6byx1bmxpc3RlbjooKT0+e2UucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYW5pbWF0aW9uc3RhcnQiLGEsX1kpfX0pLG99c3RvcE1vbml0b3JpbmcodCl7Y29uc3QgZT1wSSh0KSxuPXRoaXMuX21vbml0b3JlZEVsZW1lbnRzLmdldChlKTtuJiYobi51bmxpc3RlbigpLG4uc3ViamVjdC5jb21wbGV0ZSgpLGUuY2xhc3NMaXN0LnJlbW92ZSgiY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkIiksZS5jbGFzc0xpc3QucmVtb3ZlKCJjZGstdGV4dC1maWVsZC1hdXRvZmlsbGVkIiksdGhpcy5fbW9uaXRvcmVkRWxlbWVudHMuZGVsZXRlKGUpKX1uZ09uRGVzdHJveSgpe3RoaXMuX21vbml0b3JlZEVsZW1lbnRzLmZvckVhY2goKCh0LGUpPT50aGlzLnN0b3BNb25pdG9yaW5nKGUpKSl9fUNZLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxDWSkodXMoZkkpLHVzKHRDKSl9LENZLsm1cHJvdj1sbyh7ZmFjdG9yeTpmdW5jdGlvbiB0KCl7cmV0dXJuIG5ldyBDWSh1cyhmSSksdXModEMpKX0sdG9rZW46Q1kscHJvdmlkZWRJbjoicm9vdCJ9KSxDWS5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmZJfSx7dHlwZTp0Q31dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoQ1ksW3t0eXBlOkptLGFyZ3M6W3twcm92aWRlZEluOiJyb290In1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmZJfSx7dHlwZTp0Q31dfSksbnVsbCk7Y2xhc3MgTVl7Y29uc3RydWN0b3IodCxlKXt0aGlzLl9lbGVtZW50UmVmPXQsdGhpcy5fYXV0b2ZpbGxNb25pdG9yPWUsdGhpcy5jZGtBdXRvZmlsbD1uZXcgQWJ9bmdPbkluaXQoKXt0aGlzLl9hdXRvZmlsbE1vbml0b3IubW9uaXRvcih0aGlzLl9lbGVtZW50UmVmKS5zdWJzY3JpYmUoKHQ9PnRoaXMuY2RrQXV0b2ZpbGwuZW1pdCh0KSkpfW5nT25EZXN0cm95KCl7dGhpcy5fYXV0b2ZpbGxNb25pdG9yLnN0b3BNb25pdG9yaW5nKHRoaXMuX2VsZW1lbnRSZWYpfX1NWS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8TVkpKE11KGNoKSxNdShDWSkpfSxNWS7JtWRpcj1Kbyh7dHlwZTpNWSxzZWxlY3RvcnM6W1siIiwiY2RrQXV0b2ZpbGwiLCIiXV0sb3V0cHV0czp7Y2RrQXV0b2ZpbGw6ImNka0F1dG9maWxsIn19KSxNWS5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmNofSx7dHlwZTpDWX1dLE1ZLnByb3BEZWNvcmF0b3JzPXtjZGtBdXRvZmlsbDpbe3R5cGU6X199XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihNWSxbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJbY2RrQXV0b2ZpbGxdIn1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmNofSx7dHlwZTpDWX1dfSkse2Nka0F1dG9maWxsOlt7dHlwZTpfX31dfSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyB2WXtjb25zdHJ1Y3Rvcih0LGUsbixvKXt0aGlzLl9lbGVtZW50UmVmPXQsdGhpcy5fcGxhdGZvcm09ZSx0aGlzLl9uZ1pvbmU9bix0aGlzLl9kZXN0cm95ZWQ9bmV3IHgsdGhpcy5fZW5hYmxlZD0hMCx0aGlzLl9wcmV2aW91c01pblJvd3M9LTEsdGhpcy5fZG9jdW1lbnQ9byx0aGlzLl90ZXh0YXJlYUVsZW1lbnQ9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LHRoaXMuX21lYXN1cmluZ0NsYXNzPWUuRklSRUZPWD8iY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZy1maXJlZm94IjoiY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZyJ9Z2V0IG1pblJvd3MoKXtyZXR1cm4gdGhpcy5fbWluUm93c31zZXQgbWluUm93cyh0KXt0aGlzLl9taW5Sb3dzPXNJKHQpLHRoaXMuX3NldE1pbkhlaWdodCgpfWdldCBtYXhSb3dzKCl7cmV0dXJuIHRoaXMuX21heFJvd3N9c2V0IG1heFJvd3ModCl7dGhpcy5fbWF4Um93cz1zSSh0KSx0aGlzLl9zZXRNYXhIZWlnaHQoKX1nZXQgZW5hYmxlZCgpe3JldHVybiB0aGlzLl9lbmFibGVkfXNldCBlbmFibGVkKHQpe3Q9ckkodCksdGhpcy5fZW5hYmxlZCE9PXQmJigodGhpcy5fZW5hYmxlZD10KT90aGlzLnJlc2l6ZVRvRml0Q29udGVudCghMCk6dGhpcy5yZXNldCgpKX1fc2V0TWluSGVpZ2h0KCl7Y29uc3QgdD10aGlzLm1pblJvd3MmJnRoaXMuX2NhY2hlZExpbmVIZWlnaHQ/dGhpcy5taW5Sb3dzKnRoaXMuX2NhY2hlZExpbmVIZWlnaHQrInB4IjpudWxsO3QmJih0aGlzLl90ZXh0YXJlYUVsZW1lbnQuc3R5bGUubWluSGVpZ2h0PXQpfV9zZXRNYXhIZWlnaHQoKXtjb25zdCB0PXRoaXMubWF4Um93cyYmdGhpcy5fY2FjaGVkTGluZUhlaWdodD90aGlzLm1heFJvd3MqdGhpcy5fY2FjaGVkTGluZUhlaWdodCsicHgiOm51bGw7dCYmKHRoaXMuX3RleHRhcmVhRWxlbWVudC5zdHlsZS5tYXhIZWlnaHQ9dCl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyJiYodGhpcy5faW5pdGlhbEhlaWdodD10aGlzLl90ZXh0YXJlYUVsZW1lbnQuc3R5bGUuaGVpZ2h0LHRoaXMucmVzaXplVG9GaXRDb250ZW50KCksdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgoKT0+e1Z0KHRoaXMuX2dldFdpbmRvdygpLCJyZXNpemUiKS5waXBlKG9lKDE2KSx1bih0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCgpPT50aGlzLnJlc2l6ZVRvRml0Q29udGVudCghMCkpKX0pKSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9kZXN0cm95ZWQubmV4dCgpLHRoaXMuX2Rlc3Ryb3llZC5jb21wbGV0ZSgpfV9jYWNoZVRleHRhcmVhTGluZUhlaWdodCgpe2lmKHRoaXMuX2NhY2hlZExpbmVIZWlnaHQpcmV0dXJuO2xldCB0PXRoaXMuX3RleHRhcmVhRWxlbWVudC5jbG9uZU5vZGUoITEpO3Qucm93cz0xLHQuc3R5bGUucG9zaXRpb249ImFic29sdXRlIix0LnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiIsdC5zdHlsZS5ib3JkZXI9Im5vbmUiLHQuc3R5bGUucGFkZGluZz0iMCIsdC5zdHlsZS5oZWlnaHQ9IiIsdC5zdHlsZS5taW5IZWlnaHQ9IiIsdC5zdHlsZS5tYXhIZWlnaHQ9IiIsdC5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIix0aGlzLl90ZXh0YXJlYUVsZW1lbnQucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0KSx0aGlzLl9jYWNoZWRMaW5lSGVpZ2h0PXQuY2xpZW50SGVpZ2h0LHRoaXMuX3RleHRhcmVhRWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpLHRoaXMuX3NldE1pbkhlaWdodCgpLHRoaXMuX3NldE1heEhlaWdodCgpfW5nRG9DaGVjaygpe3RoaXMuX3BsYXRmb3JtLmlzQnJvd3NlciYmdGhpcy5yZXNpemVUb0ZpdENvbnRlbnQoKX1yZXNpemVUb0ZpdENvbnRlbnQodD0hMSl7aWYoIXRoaXMuX2VuYWJsZWQpcmV0dXJuO2lmKHRoaXMuX2NhY2hlVGV4dGFyZWFMaW5lSGVpZ2h0KCksIXRoaXMuX2NhY2hlZExpbmVIZWlnaHQpcmV0dXJuO2NvbnN0IGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LG49ZS52YWx1ZTtpZighdCYmdGhpcy5fbWluUm93cz09PXRoaXMuX3ByZXZpb3VzTWluUm93cyYmbj09PXRoaXMuX3ByZXZpb3VzVmFsdWUpcmV0dXJuO2NvbnN0IG89ZS5wbGFjZWhvbGRlcjtlLmNsYXNzTGlzdC5hZGQodGhpcy5fbWVhc3VyaW5nQ2xhc3MpLGUucGxhY2Vob2xkZXI9IiIsZS5zdHlsZS5oZWlnaHQ9ZS5zY3JvbGxIZWlnaHQtNCsicHgiLGUuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLl9tZWFzdXJpbmdDbGFzcyksZS5wbGFjZWhvbGRlcj1vLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKCk9PnsidW5kZWZpbmVkIiE9dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZT9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCgpPT50aGlzLl9zY3JvbGxUb0NhcmV0UG9zaXRpb24oZSkpKTpzZXRUaW1lb3V0KCgoKT0+dGhpcy5fc2Nyb2xsVG9DYXJldFBvc2l0aW9uKGUpKSl9KSksdGhpcy5fcHJldmlvdXNWYWx1ZT1uLHRoaXMuX3ByZXZpb3VzTWluUm93cz10aGlzLl9taW5Sb3dzfXJlc2V0KCl7dm9pZCAwIT09dGhpcy5faW5pdGlhbEhlaWdodCYmKHRoaXMuX3RleHRhcmVhRWxlbWVudC5zdHlsZS5oZWlnaHQ9dGhpcy5faW5pdGlhbEhlaWdodCl9X25vb3BJbnB1dEhhbmRsZXIoKXt9X2dldERvY3VtZW50KCl7cmV0dXJuIHRoaXMuX2RvY3VtZW50fHxkb2N1bWVudH1fZ2V0V2luZG93KCl7cmV0dXJuIHRoaXMuX2dldERvY3VtZW50KCkuZGVmYXVsdFZpZXd8fHdpbmRvd31fc2Nyb2xsVG9DYXJldFBvc2l0aW9uKHQpe2NvbnN0e3NlbGVjdGlvblN0YXJ0OmUsc2VsZWN0aW9uRW5kOm59PXQsbz10aGlzLl9nZXREb2N1bWVudCgpO3RoaXMuX2Rlc3Ryb3llZC5pc1N0b3BwZWR8fG8uYWN0aXZlRWxlbWVudCE9PXR8fHQuc2V0U2VsZWN0aW9uUmFuZ2UoZSxuKX19dlkuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHZZKShNdShjaCksTXUoZkkpLE11KHRDKSxNdShVQyw4KSl9LHZZLsm1ZGlyPUpvKHt0eXBlOnZZLHNlbGVjdG9yczpbWyJ0ZXh0YXJlYSIsImNka1RleHRhcmVhQXV0b3NpemUiLCIiXV0saG9zdEF0dHJzOlsicm93cyIsIjEiLDEsImNkay10ZXh0YXJlYS1hdXRvc2l6ZSJdLGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MSZlJiZOdSgiaW5wdXQiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uX25vb3BJbnB1dEhhbmRsZXIoKX0pKX0saW5wdXRzOnttaW5Sb3dzOlsiY2RrQXV0b3NpemVNaW5Sb3dzIiwibWluUm93cyJdLG1heFJvd3M6WyJjZGtBdXRvc2l6ZU1heFJvd3MiLCJtYXhSb3dzIl0sZW5hYmxlZDpbImNka1RleHRhcmVhQXV0b3NpemUiLCJlbmFibGVkIl19LGV4cG9ydEFzOlsiY2RrVGV4dGFyZWFBdXRvc2l6ZSJdfSksdlkuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpjaH0se3R5cGU6Zkl9LHt0eXBlOnRDfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W1VDXX1dfV0sdlkucHJvcERlY29yYXRvcnM9e21pblJvd3M6W3t0eXBlOnlfLGFyZ3M6WyJjZGtBdXRvc2l6ZU1pblJvd3MiXX1dLG1heFJvd3M6W3t0eXBlOnlfLGFyZ3M6WyJjZGtBdXRvc2l6ZU1heFJvd3MiXX1dLGVuYWJsZWQ6W3t0eXBlOnlfLGFyZ3M6WyJjZGtUZXh0YXJlYUF1dG9zaXplIl19XSxfbm9vcElucHV0SGFuZGxlcjpbe3R5cGU6TV8sYXJnczpbImlucHV0Il19XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYih2WSxbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJ0ZXh0YXJlYVtjZGtUZXh0YXJlYUF1dG9zaXplXSIsZXhwb3J0QXM6ImNka1RleHRhcmVhQXV0b3NpemUiLGhvc3Q6e2NsYXNzOiJjZGstdGV4dGFyZWEtYXV0b3NpemUiLHJvd3M6IjEifX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmNofSx7dHlwZTpmSX0se3R5cGU6dEN9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbVUNdfV19XX0pLHttaW5Sb3dzOlt7dHlwZTp5XyxhcmdzOlsiY2RrQXV0b3NpemVNaW5Sb3dzIl19XSxtYXhSb3dzOlt7dHlwZTp5XyxhcmdzOlsiY2RrQXV0b3NpemVNYXhSb3dzIl19XSxlbmFibGVkOlt7dHlwZTp5XyxhcmdzOlsiY2RrVGV4dGFyZWFBdXRvc2l6ZSJdfV0sX25vb3BJbnB1dEhhbmRsZXI6W3t0eXBlOk1fLGFyZ3M6WyJpbnB1dCJdfV19KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIHhZe314WS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8eFkpfSx4WS7JtW1vZD1abyh7dHlwZTp4WX0pLHhZLsm1aW5qPWNvKHtpbXBvcnRzOltbZ0ldXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oeFkse2RlY2xhcmF0aW9uczpmdW5jdGlvbigpe3JldHVybltNWSx2WV19LGltcG9ydHM6ZnVuY3Rpb24oKXtyZXR1cm5bZ0ldfSxleHBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW01ZLHZZXX19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHhZLFt7dHlwZTprXyxhcmdzOlt7ZGVjbGFyYXRpb25zOltNWSx2WV0saW1wb3J0czpbZ0ldLGV4cG9ydHM6W01ZLHZZXX1dfV0sbnVsbCxudWxsKTtjbGFzcyBPWSBleHRlbmRzIHZZe2dldCBtYXRBdXRvc2l6ZU1pblJvd3MoKXtyZXR1cm4gdGhpcy5taW5Sb3dzfXNldCBtYXRBdXRvc2l6ZU1pblJvd3ModCl7dGhpcy5taW5Sb3dzPXR9Z2V0IG1hdEF1dG9zaXplTWF4Um93cygpe3JldHVybiB0aGlzLm1heFJvd3N9c2V0IG1hdEF1dG9zaXplTWF4Um93cyh0KXt0aGlzLm1heFJvd3M9dH1nZXQgbWF0QXV0b3NpemUoKXtyZXR1cm4gdGhpcy5lbmFibGVkfXNldCBtYXRBdXRvc2l6ZSh0KXt0aGlzLmVuYWJsZWQ9dH1nZXQgbWF0VGV4dGFyZWFBdXRvc2l6ZSgpe3JldHVybiB0aGlzLmVuYWJsZWR9c2V0IG1hdFRleHRhcmVhQXV0b3NpemUodCl7dGhpcy5lbmFibGVkPXR9fU9ZLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIFBZKGV8fE9ZKX0sT1kuybVkaXI9Sm8oe3R5cGU6T1ksc2VsZWN0b3JzOltbInRleHRhcmVhIiwibWF0LWF1dG9zaXplIiwiIl0sWyJ0ZXh0YXJlYSIsIm1hdFRleHRhcmVhQXV0b3NpemUiLCIiXV0saG9zdEF0dHJzOlsicm93cyIsIjEiLDEsImNkay10ZXh0YXJlYS1hdXRvc2l6ZSIsIm1hdC1hdXRvc2l6ZSJdLGlucHV0czp7Y2RrQXV0b3NpemVNaW5Sb3dzOiJjZGtBdXRvc2l6ZU1pblJvd3MiLGNka0F1dG9zaXplTWF4Um93czoiY2RrQXV0b3NpemVNYXhSb3dzIixtYXRBdXRvc2l6ZU1pblJvd3M6Im1hdEF1dG9zaXplTWluUm93cyIsbWF0QXV0b3NpemVNYXhSb3dzOiJtYXRBdXRvc2l6ZU1heFJvd3MiLG1hdEF1dG9zaXplOlsibWF0LWF1dG9zaXplIiwibWF0QXV0b3NpemUiXSxtYXRUZXh0YXJlYUF1dG9zaXplOiJtYXRUZXh0YXJlYUF1dG9zaXplIn0sZXhwb3J0QXM6WyJtYXRUZXh0YXJlYUF1dG9zaXplIl0sZmVhdHVyZXM6W2dtXX0pLE9ZLnByb3BEZWNvcmF0b3JzPXttYXRBdXRvc2l6ZU1pblJvd3M6W3t0eXBlOnlffV0sbWF0QXV0b3NpemVNYXhSb3dzOlt7dHlwZTp5X31dLG1hdEF1dG9zaXplOlt7dHlwZTp5XyxhcmdzOlsibWF0LWF1dG9zaXplIl19XSxtYXRUZXh0YXJlYUF1dG9zaXplOlt7dHlwZTp5X31dfTtjb25zdCBQWT12cihPWSk7KCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihPWSxbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJ0ZXh0YXJlYVttYXQtYXV0b3NpemVdLCB0ZXh0YXJlYVttYXRUZXh0YXJlYUF1dG9zaXplXSIsZXhwb3J0QXM6Im1hdFRleHRhcmVhQXV0b3NpemUiLGlucHV0czpbImNka0F1dG9zaXplTWluUm93cyIsImNka0F1dG9zaXplTWF4Um93cyJdLGhvc3Q6e2NsYXNzOiJjZGstdGV4dGFyZWEtYXV0b3NpemUgbWF0LWF1dG9zaXplIixyb3dzOiIxIn19XX1dLG51bGwse21hdEF1dG9zaXplTWluUm93czpbe3R5cGU6eV99XSxtYXRBdXRvc2l6ZU1heFJvd3M6W3t0eXBlOnlffV0sbWF0QXV0b3NpemU6W3t0eXBlOnlfLGFyZ3M6WyJtYXQtYXV0b3NpemUiXX1dLG1hdFRleHRhcmVhQXV0b3NpemU6W3t0eXBlOnlffV19KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IHdZPW5ldyBOcigiTUFUX0lOUFVUX1ZBTFVFX0FDQ0VTU09SIiksa1k9WyJidXR0b24iLCJjaGVja2JveCIsImZpbGUiLCJoaWRkZW4iLCJpbWFnZSIsInJhZGlvIiwicmFuZ2UiLCJyZXNldCIsInN1Ym1pdCJdOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9sZXQgU1k9MDtjb25zdCBEWT1GeihjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsbixvKXt0aGlzLl9kZWZhdWx0RXJyb3JTdGF0ZU1hdGNoZXI9dCx0aGlzLl9wYXJlbnRGb3JtPWUsdGhpcy5fcGFyZW50Rm9ybUdyb3VwPW4sdGhpcy5uZ0NvbnRyb2w9b319KTtjbGFzcyBFWSBleHRlbmRzIERZe2NvbnN0cnVjdG9yKHQsZSxuLG8saSxhLHIscyxsLGMpe3N1cGVyKGEsbyxpLG4pLHRoaXMuX2VsZW1lbnRSZWY9dCx0aGlzLl9wbGF0Zm9ybT1lLHRoaXMubmdDb250cm9sPW4sdGhpcy5fYXV0b2ZpbGxNb25pdG9yPXMsdGhpcy5fZm9ybUZpZWxkPWMsdGhpcy5fdWlkPSJtYXQtaW5wdXQtIitTWSsrLHRoaXMuZm9jdXNlZD0hMSx0aGlzLnN0YXRlQ2hhbmdlcz1uZXcgeCx0aGlzLmNvbnRyb2xUeXBlPSJtYXQtaW5wdXQiLHRoaXMuYXV0b2ZpbGxlZD0hMSx0aGlzLl9kaXNhYmxlZD0hMSx0aGlzLl9yZXF1aXJlZD0hMSx0aGlzLl90eXBlPSJ0ZXh0Iix0aGlzLl9yZWFkb25seT0hMSx0aGlzLl9uZXZlckVtcHR5SW5wdXRUeXBlcz1bImRhdGUiLCJkYXRldGltZSIsImRhdGV0aW1lLWxvY2FsIiwibW9udGgiLCJ0aW1lIiwid2VlayJdLmZpbHRlcigodD0+YkkoKS5oYXModCkpKTtjb25zdCBkPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxwPWQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTt0aGlzLl9pbnB1dFZhbHVlQWNjZXNzb3I9cnx8ZCx0aGlzLl9wcmV2aW91c05hdGl2ZVZhbHVlPXRoaXMudmFsdWUsdGhpcy5pZD10aGlzLmlkLGUuSU9TJiZsLnJ1bk91dHNpZGVBbmd1bGFyKCgoKT0+e3QubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsKHQ9PntsZXQgZT10LnRhcmdldDtlLnZhbHVlfHxlLnNlbGVjdGlvblN0YXJ0fHxlLnNlbGVjdGlvbkVuZHx8KGUuc2V0U2VsZWN0aW9uUmFuZ2UoMSwxKSxlLnNldFNlbGVjdGlvblJhbmdlKDAsMCkpfSkpfSkpLHRoaXMuX2lzU2VydmVyPSF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIsdGhpcy5faXNOYXRpdmVTZWxlY3Q9InNlbGVjdCI9PT1wLHRoaXMuX2lzVGV4dGFyZWE9InRleHRhcmVhIj09PXAsdGhpcy5faXNOYXRpdmVTZWxlY3QmJih0aGlzLmNvbnRyb2xUeXBlPWQubXVsdGlwbGU/Im1hdC1uYXRpdmUtc2VsZWN0LW11bHRpcGxlIjoibWF0LW5hdGl2ZS1zZWxlY3QiKX1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5uZ0NvbnRyb2wmJm51bGwhPT10aGlzLm5nQ29udHJvbC5kaXNhYmxlZD90aGlzLm5nQ29udHJvbC5kaXNhYmxlZDp0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQodCl7dGhpcy5fZGlzYWJsZWQ9ckkodCksdGhpcy5mb2N1c2VkJiYodGhpcy5mb2N1c2VkPSExLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKSl9Z2V0IGlkKCl7cmV0dXJuIHRoaXMuX2lkfXNldCBpZCh0KXt0aGlzLl9pZD10fHx0aGlzLl91aWR9Z2V0IHJlcXVpcmVkKCl7cmV0dXJuIHRoaXMuX3JlcXVpcmVkfXNldCByZXF1aXJlZCh0KXt0aGlzLl9yZXF1aXJlZD1ySSh0KX1nZXQgdHlwZSgpe3JldHVybiB0aGlzLl90eXBlfXNldCB0eXBlKHQpe3RoaXMuX3R5cGU9dHx8InRleHQiLHRoaXMuX3ZhbGlkYXRlVHlwZSgpLCF0aGlzLl9pc1RleHRhcmVhJiZiSSgpLmhhcyh0aGlzLl90eXBlKSYmKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC50eXBlPXRoaXMuX3R5cGUpfWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLl9pbnB1dFZhbHVlQWNjZXNzb3IudmFsdWV9c2V0IHZhbHVlKHQpe3QhPT10aGlzLnZhbHVlJiYodGhpcy5faW5wdXRWYWx1ZUFjY2Vzc29yLnZhbHVlPXQsdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpKX1nZXQgcmVhZG9ubHkoKXtyZXR1cm4gdGhpcy5fcmVhZG9ubHl9c2V0IHJlYWRvbmx5KHQpe3RoaXMuX3JlYWRvbmx5PXJJKHQpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX3BsYXRmb3JtLmlzQnJvd3NlciYmdGhpcy5fYXV0b2ZpbGxNb25pdG9yLm1vbml0b3IodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KS5zdWJzY3JpYmUoKHQ9Pnt0aGlzLmF1dG9maWxsZWQ9dC5pc0F1dG9maWxsZWQsdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfSkpfW5nT25DaGFuZ2VzKCl7dGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfW5nT25EZXN0cm95KCl7dGhpcy5zdGF0ZUNoYW5nZXMuY29tcGxldGUoKSx0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXImJnRoaXMuX2F1dG9maWxsTW9uaXRvci5zdG9wTW9uaXRvcmluZyh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpfW5nRG9DaGVjaygpe3RoaXMubmdDb250cm9sJiZ0aGlzLnVwZGF0ZUVycm9yU3RhdGUoKSx0aGlzLl9kaXJ0eUNoZWNrTmF0aXZlVmFsdWUoKSx0aGlzLl9kaXJ0eUNoZWNrUGxhY2Vob2xkZXIoKX1mb2N1cyh0KXt0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXModCl9X2ZvY3VzQ2hhbmdlZCh0KXt0PT09dGhpcy5mb2N1c2VkfHx0aGlzLnJlYWRvbmx5JiZ0fHwodGhpcy5mb2N1c2VkPXQsdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpKX1fb25JbnB1dCgpe31fZGlydHlDaGVja1BsYWNlaG9sZGVyKCl7dmFyIHQsZTtjb25zdCBuPShudWxsPT09KGU9bnVsbD09PSh0PXRoaXMuX2Zvcm1GaWVsZCl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuX2hpZGVDb250cm9sUGxhY2Vob2xkZXIpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmNhbGwodCkpP251bGw6dGhpcy5wbGFjZWhvbGRlcjtpZihuIT09dGhpcy5fcHJldmlvdXNQbGFjZWhvbGRlcil7Y29uc3QgdD10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7dGhpcy5fcHJldmlvdXNQbGFjZWhvbGRlcj1uLG4/dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIixuKTp0LnJlbW92ZUF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiKX19X2RpcnR5Q2hlY2tOYXRpdmVWYWx1ZSgpe2NvbnN0IHQ9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlO3RoaXMuX3ByZXZpb3VzTmF0aXZlVmFsdWUhPT10JiYodGhpcy5fcHJldmlvdXNOYXRpdmVWYWx1ZT10LHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKSl9X3ZhbGlkYXRlVHlwZSgpe2lmKGtZLmluZGV4T2YodGhpcy5fdHlwZSk+LTEmJigidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSkKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCnRocm93KGZ1bmN0aW9uIHQoZSl7cmV0dXJuIEVycm9yKGBJbnB1dCB0eXBlICIke2V9IiBpc24ndCBzdXBwb3J0ZWQgYnkgbWF0SW5wdXQuYCl9KSh0aGlzLl90eXBlKX1faXNOZXZlckVtcHR5KCl7cmV0dXJuIHRoaXMuX25ldmVyRW1wdHlJbnB1dFR5cGVzLmluZGV4T2YodGhpcy5fdHlwZSk+LTF9X2lzQmFkSW5wdXQoKXtsZXQgdD10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudmFsaWRpdHk7cmV0dXJuIHQmJnQuYmFkSW5wdXR9Z2V0IGVtcHR5KCl7cmV0dXJuISh0aGlzLl9pc05ldmVyRW1wdHkoKXx8dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlfHx0aGlzLl9pc0JhZElucHV0KCl8fHRoaXMuYXV0b2ZpbGxlZCl9Z2V0IHNob3VsZExhYmVsRmxvYXQoKXtpZih0aGlzLl9pc05hdGl2ZVNlbGVjdCl7Y29uc3QgdD10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsZT10Lm9wdGlvbnNbMF07cmV0dXJuIHRoaXMuZm9jdXNlZHx8dC5tdWx0aXBsZXx8IXRoaXMuZW1wdHl8fCEhKHQuc2VsZWN0ZWRJbmRleD4tMSYmZSYmZS5sYWJlbCl9cmV0dXJuIHRoaXMuZm9jdXNlZHx8IXRoaXMuZW1wdHl9c2V0RGVzY3JpYmVkQnlJZHModCl7dC5sZW5ndGg/dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgiYXJpYS1kZXNjcmliZWRieSIsdC5qb2luKCIgIikpOnRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtZGVzY3JpYmVkYnkiKX1vbkNvbnRhaW5lckNsaWNrKCl7dGhpcy5mb2N1c2VkfHx0aGlzLmZvY3VzKCl9fUVZLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxFWSkoTXUoY2gpLE11KGZJKSxNdShuaiwxMCksTXUoQmosOCksTXUobFUsOCksTXUoZUgpLE11KHdZLDEwKSxNdShDWSksTXUodEMpLE11KHlWLDgpKX0sRVkuybVkaXI9Sm8oe3R5cGU6RVksc2VsZWN0b3JzOltbImlucHV0IiwibWF0SW5wdXQiLCIiXSxbInRleHRhcmVhIiwibWF0SW5wdXQiLCIiXSxbInNlbGVjdCIsIm1hdE5hdGl2ZUNvbnRyb2wiLCIiXSxbImlucHV0IiwibWF0TmF0aXZlQ29udHJvbCIsIiJdLFsidGV4dGFyZWEiLCJtYXROYXRpdmVDb250cm9sIiwiIl1dLGhvc3RBdHRyczpbMSwibWF0LWlucHV0LWVsZW1lbnQiLCJtYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sIl0saG9zdFZhcnM6OSxob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezEmZSYmTnUoImZvY3VzIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLl9mb2N1c0NoYW5nZWQoITApfSkpKCJibHVyIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLl9mb2N1c0NoYW5nZWQoITEpfSkpKCJpbnB1dCIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5fb25JbnB1dCgpfSkpLDImZSYmKGtmKCJkaXNhYmxlZCIsbi5kaXNhYmxlZCkoInJlcXVpcmVkIixuLnJlcXVpcmVkKSxObSgiaWQiLG4uaWQpKCJkYXRhLXBsYWNlaG9sZGVyIixuLnBsYWNlaG9sZGVyKSgicmVhZG9ubHkiLG4ucmVhZG9ubHkmJiFuLl9pc05hdGl2ZVNlbGVjdHx8bnVsbCkoImFyaWEtaW52YWxpZCIsbi5lcnJvclN0YXRlJiYhbi5lbXB0eSkoImFyaWEtcmVxdWlyZWQiLG4ucmVxdWlyZWQpLGFmKCJtYXQtaW5wdXQtc2VydmVyIixuLl9pc1NlcnZlcikpfSxpbnB1dHM6e2lkOiJpZCIsZGlzYWJsZWQ6ImRpc2FibGVkIixyZXF1aXJlZDoicmVxdWlyZWQiLHR5cGU6InR5cGUiLHZhbHVlOiJ2YWx1ZSIscmVhZG9ubHk6InJlYWRvbmx5IixwbGFjZWhvbGRlcjoicGxhY2Vob2xkZXIiLGVycm9yU3RhdGVNYXRjaGVyOiJlcnJvclN0YXRlTWF0Y2hlciIsdXNlckFyaWFEZXNjcmliZWRCeTpbImFyaWEtZGVzY3JpYmVkYnkiLCJ1c2VyQXJpYURlc2NyaWJlZEJ5Il19LGV4cG9ydEFzOlsibWF0SW5wdXQiXSxmZWF0dXJlczpbaWgoW3twcm92aWRlOmlWLHVzZUV4aXN0aW5nOkVZfV0pLGdtLFNpXX0pLEVZLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6Y2h9LHt0eXBlOmZJfSx7dHlwZTpuaixkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6Q3N9XX0se3R5cGU6QmosZGVjb3JhdG9yczpbe3R5cGU6X3N9XX0se3R5cGU6bFUsZGVjb3JhdG9yczpbe3R5cGU6X3N9XX0se3R5cGU6ZUh9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6Q3N9LHt0eXBlOnlzLGFyZ3M6W3dZXX1dfSx7dHlwZTpDWX0se3R5cGU6dEN9LHt0eXBlOl9WLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOlt5Vl19XX1dLEVZLnByb3BEZWNvcmF0b3JzPXtkaXNhYmxlZDpbe3R5cGU6eV99XSxpZDpbe3R5cGU6eV99XSxwbGFjZWhvbGRlcjpbe3R5cGU6eV99XSxyZXF1aXJlZDpbe3R5cGU6eV99XSx0eXBlOlt7dHlwZTp5X31dLGVycm9yU3RhdGVNYXRjaGVyOlt7dHlwZTp5X31dLHVzZXJBcmlhRGVzY3JpYmVkQnk6W3t0eXBlOnlfLGFyZ3M6WyJhcmlhLWRlc2NyaWJlZGJ5Il19XSx2YWx1ZTpbe3R5cGU6eV99XSxyZWFkb25seTpbe3R5cGU6eV99XSxfZm9jdXNDaGFuZ2VkOlt7dHlwZTpNXyxhcmdzOlsiZm9jdXMiLFsidHJ1ZSJdXX0se3R5cGU6TV8sYXJnczpbImJsdXIiLFsiZmFsc2UiXV19XSxfb25JbnB1dDpbe3R5cGU6TV8sYXJnczpbImlucHV0Il19XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihFWSxbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLFxuICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixleHBvcnRBczoibWF0SW5wdXQiLGhvc3Q6e2NsYXNzOiJtYXQtaW5wdXQtZWxlbWVudCBtYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sIiwiW2NsYXNzLm1hdC1pbnB1dC1zZXJ2ZXJdIjoiX2lzU2VydmVyIiwiW2F0dHIuaWRdIjoiaWQiLCJbYXR0ci5kYXRhLXBsYWNlaG9sZGVyXSI6InBsYWNlaG9sZGVyIiwiW2Rpc2FibGVkXSI6ImRpc2FibGVkIiwiW3JlcXVpcmVkXSI6InJlcXVpcmVkIiwiW2F0dHIucmVhZG9ubHldIjoicmVhZG9ubHkgJiYgIV9pc05hdGl2ZVNlbGVjdCB8fCBudWxsIiwiW2F0dHIuYXJpYS1pbnZhbGlkXSI6ImVycm9yU3RhdGUgJiYgIWVtcHR5IiwiW2F0dHIuYXJpYS1yZXF1aXJlZF0iOiJyZXF1aXJlZCJ9LHByb3ZpZGVyczpbe3Byb3ZpZGU6aVYsdXNlRXhpc3Rpbmc6RVl9XX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmNofSx7dHlwZTpmSX0se3R5cGU6bmosZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOkNzfV19LHt0eXBlOkJqLGRlY29yYXRvcnM6W3t0eXBlOl9zfV19LHt0eXBlOmxVLGRlY29yYXRvcnM6W3t0eXBlOl9zfV19LHt0eXBlOmVIfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOkNzfSx7dHlwZTp5cyxhcmdzOlt3WV19XX0se3R5cGU6Q1l9LHt0eXBlOnRDfSx7dHlwZTpfVixkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbeVZdfV19XX0pLHtpZDpbe3R5cGU6eV99XSxkaXNhYmxlZDpbe3R5cGU6eV99XSxyZXF1aXJlZDpbe3R5cGU6eV99XSx0eXBlOlt7dHlwZTp5X31dLHZhbHVlOlt7dHlwZTp5X31dLHJlYWRvbmx5Olt7dHlwZTp5X31dLF9mb2N1c0NoYW5nZWQ6W3t0eXBlOk1fLGFyZ3M6WyJmb2N1cyIsWyJ0cnVlIl1dfSx7dHlwZTpNXyxhcmdzOlsiYmx1ciIsWyJmYWxzZSJdXX1dLF9vbklucHV0Olt7dHlwZTpNXyxhcmdzOlsiaW5wdXQiXX1dLHBsYWNlaG9sZGVyOlt7dHlwZTp5X31dLGVycm9yU3RhdGVNYXRjaGVyOlt7dHlwZTp5X31dLHVzZXJBcmlhRGVzY3JpYmVkQnk6W3t0eXBlOnlfLGFyZ3M6WyJhcmlhLWRlc2NyaWJlZGJ5Il19XX0pOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3MgQVl7fWZ1bmN0aW9uIFJZKHQsZSl7aWYoMSZ0JiYoT3UoMCwibWF0LWVycm9yIiksTWYoMSksUHUoKSksMiZ0KXtjb25zdCB0PUx1KCk7SmMoMSkseGYoIiBSZWxvYWQgcGVyaW9kIGhhcyB0byBiZSBtaW5pbXVtIG9mICIsdC5NSU5fUkVMT0FEX1BFUklPRF9JTl9TLCIgc2Vjb25kcy4gIil9fWZ1bmN0aW9uIFRZKHQsZSl7MSZ0JiYoT3UoMCwibWF0LWVycm9yIiksTWYoMSwiIFBhZ2Ugc2l6ZSBoYXMgdG8gYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyLiAiKSxQdSgpKX1BWS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8QVkpfSxBWS7JtW1vZD1abyh7dHlwZTpBWX0pLEFZLsm1aW5qPWNvKHtwcm92aWRlcnM6W2VIXSxpbXBvcnRzOltbeFksQ1YsVHpdLHhZLENWXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oQVkse2RlY2xhcmF0aW9uczpmdW5jdGlvbigpe3JldHVybltFWSxPWV19LGltcG9ydHM6ZnVuY3Rpb24oKXtyZXR1cm5beFksQ1YsVHpdfSxleHBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW3hZLENWLEVZLE9ZXX19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEFZLFt7dHlwZTprXyxhcmdzOlt7ZGVjbGFyYXRpb25zOltFWSxPWV0saW1wb3J0czpbeFksQ1YsVHpdLGV4cG9ydHM6W3hZLENWLEVZLE9ZXSxwcm92aWRlcnM6W2VIXX1dfV0sbnVsbCxudWxsKTtjbGFzcyBOWXtjb25zdHJ1Y3Rvcigpe3RoaXMucmVsb2FkVG9nZ2xlZD1uZXcgQWIsdGhpcy5yZWxvYWRQZXJpb2RJbk1zQ2hhbmdlZD1uZXcgQWIsdGhpcy5wYWdlU2l6ZUNoYW5nZWQ9bmV3IEFiLHRoaXMuTUlOX1JFTE9BRF9QRVJJT0RfSU5fUz0zMCx0aGlzLnJlbG9hZFBlcmlvZENvbnRyb2w9bmV3IElqKHRoaXMuTUlOX1JFTE9BRF9QRVJJT0RfSU5fUyxbVFYucmVxdWlyZWQsVFYubWluKHRoaXMuTUlOX1JFTE9BRF9QRVJJT0RfSU5fUyldKSx0aGlzLnBhZ2luYXRpb25Db250cm9sPW5ldyBJaigxLFtUVi5yZXF1aXJlZCxUVi5taW4oMSksdD0+e2NvbnN0IGU9TnVtYmVyKHQudmFsdWUpO3JldHVybiBNYXRoLnJvdW5kKGUpPT09dC52YWx1ZT9udWxsOntpbnRlZ2VyOnt2YWx1ZTp0LnZhbHVlfX19XSksdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyB4fW5nT25Jbml0KCl7dGhpcy5yZWxvYWRQZXJpb2RDb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKHVuKHRoaXMubmdVbnN1YnNjcmliZSksZGUoNTAwKSxHdCgoKCk9PnRoaXMucmVsb2FkUGVyaW9kQ29udHJvbC52YWxpZCkpKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5yZWxvYWRQZXJpb2RDb250cm9sLnZhbGlkJiZ0aGlzLnJlbG9hZFBlcmlvZEluTXNDaGFuZ2VkLmVtaXQoMWUzKnRoaXMucmVsb2FkUGVyaW9kQ29udHJvbC52YWx1ZSl9KSksdGhpcy5wYWdpbmF0aW9uQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZSh1bih0aGlzLm5nVW5zdWJzY3JpYmUpLGRlKDUwMCksR3QoKCgpPT50aGlzLnBhZ2luYXRpb25Db250cm9sLnZhbGlkKSkpLnN1YnNjcmliZSgoKCk9Pnt0aGlzLnBhZ2VTaXplQ2hhbmdlZC5lbWl0KHRoaXMucGFnaW5hdGlvbkNvbnRyb2wudmFsdWUpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKSx0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKX1uZ09uQ2hhbmdlcyh0KXtpZih0LnJlbG9hZFBlcmlvZEluTXMpe2NvbnN0IGU9dC5yZWxvYWRQZXJpb2RJbk1zO2UucHJldmlvdXNWYWx1ZSE9PWUuY3VycmVudFZhbHVlJiZ0aGlzLnJlbG9hZFBlcmlvZENvbnRyb2wuc2V0VmFsdWUoZS5jdXJyZW50VmFsdWUvMWUzKX1pZih0LnJlbG9hZEVuYWJsZWQmJih0LnJlbG9hZEVuYWJsZWQuY3VycmVudFZhbHVlP3RoaXMucmVsb2FkUGVyaW9kQ29udHJvbC5lbmFibGUoKTp0aGlzLnJlbG9hZFBlcmlvZENvbnRyb2wuZGlzYWJsZSgpKSx0LnBhZ2VTaXplKXtjb25zdCBlPXQucGFnZVNpemU7ZS5wcmV2aW91c1ZhbHVlIT09ZS5jdXJyZW50VmFsdWUmJnRoaXMucGFnaW5hdGlvbkNvbnRyb2wuc2V0VmFsdWUoZS5jdXJyZW50VmFsdWUpfX1vblJlbG9hZFRvZ2dsZSgpe3RoaXMucmVsb2FkVG9nZ2xlZC5lbWl0KCl9fU5ZLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxOWSl9LE5ZLsm1Y21wPVVvKHt0eXBlOk5ZLHNlbGVjdG9yczpbWyJzZXR0aW5ncy1kaWFsb2ctY29tcG9uZW50Il1dLGlucHV0czp7cmVsb2FkRW5hYmxlZDoicmVsb2FkRW5hYmxlZCIscmVsb2FkUGVyaW9kSW5NczoicmVsb2FkUGVyaW9kSW5NcyIscGFnZVNpemU6InBhZ2VTaXplIn0sb3V0cHV0czp7cmVsb2FkVG9nZ2xlZDoicmVsb2FkVG9nZ2xlZCIscmVsb2FkUGVyaW9kSW5Nc0NoYW5nZWQ6InJlbG9hZFBlcmlvZEluTXNDaGFuZ2VkIixwYWdlU2l6ZUNoYW5nZWQ6InBhZ2VTaXplQ2hhbmdlZCJ9LGZlYXR1cmVzOltTaV0sZGVjbHM6MTQsdmFyczo1LGNvbnN0czpbWzEsInJlbG9hZC10b2dnbGUiXSxbMywiY2hlY2tlZCIsImNoYW5nZSJdLFsibWF0SW5wdXQiLCIiLCJ0eXBlIiwibnVtYmVyIiwicGxhY2Vob2xkZXIiLCJSZWxvYWQgUGVyaW9kIiwxLCJyZWxvYWQtcGVyaW9kIiwzLCJmb3JtQ29udHJvbCJdLFs0LCJuZ0lmIl0sWyJtYXRJbnB1dCIsIiIsInR5cGUiLCJudW1iZXIiLCJwbGFjZWhvbGRlciIsIlBhZ2luYXRpb24gTGltaXQiLDEsInBhZ2Utc2l6ZSIsMywiZm9ybUNvbnRyb2wiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKE91KDAsImgzIiksTWYoMSwiU2V0dGluZ3MiKSxQdSgpLE91KDIsImRpdiIpLE91KDMsImRpdiIsMCksT3UoNCwibWF0LWNoZWNrYm94IiwxKSxOdSgiY2hhbmdlIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uUmVsb2FkVG9nZ2xlKCl9KSksTWYoNSwiUmVsb2FkIGRhdGEiKSxQdSgpLFB1KCksT3UoNiwiZGl2IiksT3UoNywibWF0LWZvcm0tZmllbGQiKSx3dSg4LCJpbnB1dCIsMiksUHUoKSxXbSg5LFJZLDIsMSwibWF0LWVycm9yIiwzKSxQdSgpLFB1KCksT3UoMTAsImRpdiIpLE91KDExLCJtYXQtZm9ybS1maWVsZCIpLHd1KDEyLCJpbnB1dCIsNCksUHUoKSxXbSgxMyxUWSwyLDAsIm1hdC1lcnJvciIsMyksUHUoKSksMiZlJiYoSmMoNCksdnUoImNoZWNrZWQiLG4ucmVsb2FkRW5hYmxlZCksSmMoNCksdnUoImZvcm1Db250cm9sIixuLnJlbG9hZFBlcmlvZENvbnRyb2wpLEpjKDEpLHZ1KCJuZ0lmIixuLnJlbG9hZFBlcmlvZENvbnRyb2wuaGFzRXJyb3IoIm1pbiIpfHxuLnJlbG9hZFBlcmlvZENvbnRyb2wuaGFzRXJyb3IoInJlcXVpcmVkIikpLEpjKDMpLHZ1KCJmb3JtQ29udHJvbCIsbi5wYWdpbmF0aW9uQ29udHJvbCksSmMoMSksdnUoIm5nSWYiLG4ucGFnaW5hdGlvbkNvbnRyb2wuaW52YWxpZCkpfSxkaXJlY3RpdmVzOlt1WSxfVixFWSxKaixrVixhaixyVSxhdixuVl0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSB7XG4gIGZvbnQtc2l6ZTogMTVweDtcbn1cblxuW19uZ2hvc3QtJUNPTVAlXSAgICA+IGRpdltfbmdjb250ZW50LSVDT01QJV0ge1xuICBtYXJnaW46IDEwcHggMDtcbn1cblxuW19uZ2hvc3QtJUNPTVAlXSAgICA+IFtfbmdjb250ZW50LSVDT01QJV06Zmlyc3QtY2hpbGQge1xuICBtYXJnaW4tdG9wOiAwO1xufVxuXG5bX25naG9zdC0lQ09NUCVdICAgID4gW19uZ2NvbnRlbnQtJUNPTVAlXTpsYXN0LWNoaWxkIHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cblxuaDNbX25nY29udGVudC0lQ09NUCVdIHtcbiAgZm9udC1zaXplOiAyMHB4O1xufVxuXG4ucmVsb2FkLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICBtYXJnaW4tYm90dG9tOiAxMHB4O1xufSJdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihOWSxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJzZXR0aW5ncy1kaWFsb2ctY29tcG9uZW50Iix0ZW1wbGF0ZTonXG4gICAgPGgzPlNldHRpbmdzPC9oMz5cbiAgICA8ZGl2PlxuICAgICAgPGRpdiBjbGFzcz0icmVsb2FkLXRvZ2dsZSI+XG4gICAgICAgIDxtYXQtY2hlY2tib3ggW2NoZWNrZWRdPSJyZWxvYWRFbmFibGVkIiAoY2hhbmdlKT0ib25SZWxvYWRUb2dnbGUoKSJcbiAgICAgICAgICA+UmVsb2FkIGRhdGE8L21hdC1jaGVja2JveFxuICAgICAgICA+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGNsYXNzPSJyZWxvYWQtcGVyaW9kIlxuICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgIHR5cGU9Im51bWJlciJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJSZWxvYWQgUGVyaW9kIlxuICAgICAgICAgICAgW2Zvcm1Db250cm9sXT0icmVsb2FkUGVyaW9kQ29udHJvbCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgKm5nSWY9IlxuICAgICAgICAgICAgcmVsb2FkUGVyaW9kQ29udHJvbC5oYXNFcnJvcihcJ21pblwnKSB8fFxuICAgICAgICAgICAgcmVsb2FkUGVyaW9kQ29udHJvbC5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpXG4gICAgICAgICAgIlxuICAgICAgICA+XG4gICAgICAgICAgUmVsb2FkIHBlcmlvZCBoYXMgdG8gYmUgbWluaW11bSBvZlxuICAgICAgICAgIHt7IE1JTl9SRUxPQURfUEVSSU9EX0lOX1MgfX0gc2Vjb25kcy5cbiAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2PlxuICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICBjbGFzcz0icGFnZS1zaXplIlxuICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPSJQYWdpbmF0aW9uIExpbWl0IlxuICAgICAgICAgIFtmb3JtQ29udHJvbF09InBhZ2luYXRpb25Db250cm9sIlxuICAgICAgICAvPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDxtYXQtZXJyb3IgKm5nSWY9InBhZ2luYXRpb25Db250cm9sLmludmFsaWQiPlxuICAgICAgICBQYWdlIHNpemUgaGFzIHRvIGJlIGEgcG9zaXRpdmUgaW50ZWdlci5cbiAgICAgIDwvbWF0LWVycm9yPlxuICAgIDwvZGl2PlxuICAnLHN0eWxlVXJsczpbIi4vc2V0dGluZ3NfZGlhbG9nX2NvbXBvbmVudC5jc3MiXX1dfV0sbnVsbCx7cmVsb2FkRW5hYmxlZDpbe3R5cGU6eV99XSxyZWxvYWRQZXJpb2RJbk1zOlt7dHlwZTp5X31dLHBhZ2VTaXplOlt7dHlwZTp5X31dLHJlbG9hZFRvZ2dsZWQ6W3t0eXBlOl9ffV0scmVsb2FkUGVyaW9kSW5Nc0NoYW5nZWQ6W3t0eXBlOl9ffV0scGFnZVNpemVDaGFuZ2VkOlt7dHlwZTpfX31dfSk7Y2xhc3MgSVl7Y29uc3RydWN0b3IodCl7dGhpcy5zdG9yZT10LHRoaXMucmVsb2FkRW5hYmxlZCQ9dGhpcy5zdG9yZS5zZWxlY3QoWEcpLHRoaXMucmVsb2FkUGVyaW9kSW5NcyQ9dGhpcy5zdG9yZS5zZWxlY3QoS0cpLHRoaXMucGFnZVNpemUkPXRoaXMuc3RvcmUuc2VsZWN0KEpHKX1vblJlbG9hZFRvZ2dsZWQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKFFHKCkpfW9uUmVsb2FkUGVyaW9kSW5Nc0NoYW5nZWQodCl7dGhpcy5zdG9yZS5kaXNwYXRjaCgkRyh7cGVyaW9kSW5Nczp0fSkpfW9uUGFnZVNpemVDaGFuZ2VkKHQpe3RoaXMuc3RvcmUuZGlzcGF0Y2godFkoe3NpemU6dH0pKX19SVkuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fElZKShNdShFaykpfSxJWS7JtWNtcD1Vbyh7dHlwZTpJWSxzZWxlY3RvcnM6W1sic2V0dGluZ3MtZGlhbG9nIl1dLGRlY2xzOjQsdmFyczo5LGNvbnN0czpbWzMsInJlbG9hZEVuYWJsZWQiLCJyZWxvYWRQZXJpb2RJbk1zIiwicGFnZVNpemUiLCJyZWxvYWRUb2dnbGVkIiwicmVsb2FkUGVyaW9kSW5Nc0NoYW5nZWQiLCJwYWdlU2l6ZUNoYW5nZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKE91KDAsInNldHRpbmdzLWRpYWxvZy1jb21wb25lbnQiLDApLE51KCJyZWxvYWRUb2dnbGVkIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uUmVsb2FkVG9nZ2xlZCgpfSkpKCJyZWxvYWRQZXJpb2RJbk1zQ2hhbmdlZCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25SZWxvYWRQZXJpb2RJbk1zQ2hhbmdlZChlKX0pKSgicGFnZVNpemVDaGFuZ2VkIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vblBhZ2VTaXplQ2hhbmdlZChlKX0pKSxPYigxLCJhc3luYyIpLE9iKDIsImFzeW5jIiksT2IoMywiYXN5bmMiKSxQdSgpKSwyJmUmJnZ1KCJyZWxvYWRFbmFibGVkIixQYigxLDMsbi5yZWxvYWRFbmFibGVkJCkpKCJyZWxvYWRQZXJpb2RJbk1zIixQYigyLDUsbi5yZWxvYWRQZXJpb2RJbk1zJCkpKCJwYWdlU2l6ZSIsUGIoMyw3LG4ucGFnZVNpemUkKSl9LGRpcmVjdGl2ZXM6W05ZXSxwaXBlczpbTXZdLGVuY2Fwc3VsYXRpb246Mn0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoSVksW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3Rvcjoic2V0dGluZ3MtZGlhbG9nIix0ZW1wbGF0ZTonXG4gICAgPHNldHRpbmdzLWRpYWxvZy1jb21wb25lbnRcbiAgICAgIFtyZWxvYWRFbmFibGVkXT0icmVsb2FkRW5hYmxlZCQgfCBhc3luYyJcbiAgICAgIFtyZWxvYWRQZXJpb2RJbk1zXT0icmVsb2FkUGVyaW9kSW5NcyQgfCBhc3luYyJcbiAgICAgIFtwYWdlU2l6ZV09InBhZ2VTaXplJCB8IGFzeW5jIlxuICAgICAgKHJlbG9hZFRvZ2dsZWQpPSJvblJlbG9hZFRvZ2dsZWQoKSJcbiAgICAgIChyZWxvYWRQZXJpb2RJbk1zQ2hhbmdlZCk9Im9uUmVsb2FkUGVyaW9kSW5Nc0NoYW5nZWQoJGV2ZW50KSJcbiAgICAgIChwYWdlU2l6ZUNoYW5nZWQpPSJvblBhZ2VTaXplQ2hhbmdlZCgkZXZlbnQpIlxuICAgID48L3NldHRpbmdzLWRpYWxvZy1jb21wb25lbnQ+XG4gICd9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpFa31dfSksbnVsbCk7Y2xhc3Mgell7Y29uc3RydWN0b3IodCl7dGhpcy5kaWFsb2c9dH1pc0J1dHRvbkRpc2FibGVkKCl7cmV0dXJuIHRoaXMuc2V0dGluZ3NMb2FkU3RhdGU9PT1CRS5OT1RfTE9BREVEfHx0aGlzLnNldHRpbmdzTG9hZFN0YXRlPT09QkUuTE9BRElOR31vcGVuRGlhbG9nKCl7dGhpcy5kaWFsb2cub3BlbihJWSx7d2lkdGg6IjQwMHB4In0pfX16WS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8elkpKE11KEhXKSl9LHpZLsm1Y21wPVVvKHt0eXBlOnpZLHNlbGVjdG9yczpbWyJzZXR0aW5ncy1idXR0b24tY29tcG9uZW50Il1dLGlucHV0czp7c2V0dGluZ3NMb2FkU3RhdGU6InNldHRpbmdzTG9hZFN0YXRlIn0sZGVjbHM6Mix2YXJzOjEsY29uc3RzOltbIm1hdC1pY29uLWJ1dHRvbiIsIiIsMywiZGlzYWJsZWQiLCJjbGljayJdLFsic3ZnSWNvbiIsInNldHRpbmdzXzI0cHgiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKE91KDAsImJ1dHRvbiIsMCksTnUoImNsaWNrIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9wZW5EaWFsb2coKX0pKSx3dSgxLCJtYXQtaWNvbiIsMSksUHUoKSksMiZlJiZ2dSgiZGlzYWJsZWQiLG4uaXNCdXR0b25EaXNhYmxlZCgpKX0sZGlyZWN0aXZlczpbTkgsY0ddLGVuY2Fwc3VsYXRpb246Mn0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoelksW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3Rvcjoic2V0dGluZ3MtYnV0dG9uLWNvbXBvbmVudCIsdGVtcGxhdGU6J1xuICAgIDxidXR0b25cbiAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgW2Rpc2FibGVkXT0iaXNCdXR0b25EaXNhYmxlZCgpIlxuICAgICAgKGNsaWNrKT0ib3BlbkRpYWxvZygpIlxuICAgID5cbiAgICAgIDxtYXQtaWNvbiBzdmdJY29uPSJzZXR0aW5nc18yNHB4Ij48L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICAnfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6SFd9XX0pLHtzZXR0aW5nc0xvYWRTdGF0ZTpbe3R5cGU6eV99XX0pO2NsYXNzIEhZe2NvbnN0cnVjdG9yKHQpe3RoaXMuc3RvcmU9dCx0aGlzLnNldHRpbmdzTG9hZFN0YXRlJD10aGlzLnN0b3JlLnNlbGVjdChaRyl9fUhZLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxIWSkoTXUoRWspKX0sSFkuybVjbXA9VW8oe3R5cGU6SFksc2VsZWN0b3JzOltbInNldHRpbmdzLWJ1dHRvbiJdXSxkZWNsczoyLHZhcnM6Myxjb25zdHM6W1szLCJzZXR0aW5nc0xvYWRTdGF0ZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYod3UoMCwic2V0dGluZ3MtYnV0dG9uLWNvbXBvbmVudCIsMCksT2IoMSwiYXN5bmMiKSksMiZlJiZ2dSgic2V0dGluZ3NMb2FkU3RhdGUiLFBiKDEsMSxuLnNldHRpbmdzTG9hZFN0YXRlJCkpfSxkaXJlY3RpdmVzOlt6WV0scGlwZXM6W012XSxlbmNhcHN1bGF0aW9uOjJ9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEhZLFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6InNldHRpbmdzLWJ1dHRvbiIsdGVtcGxhdGU6J1xuICAgIDxzZXR0aW5ncy1idXR0b24tY29tcG9uZW50XG4gICAgICBbc2V0dGluZ3NMb2FkU3RhdGVdPSJzZXR0aW5nc0xvYWRTdGF0ZSQgfCBhc3luYyJcbiAgICA+PC9zZXR0aW5ncy1idXR0b24tY29tcG9uZW50PlxuICAnfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6RWt9XX0pLG51bGwpO2NsYXNzIEZZe31GWS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8RlkpfSxGWS7JtWNtcD1Vbyh7dHlwZTpGWSxzZWxlY3RvcnM6W1siYXBwLWhlYWRlciJdXSxkZWNsczoxMCx2YXJzOjAsY29uc3RzOltbMSwiYnJhbmQiXSxbMSwicGx1Z2lucyJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiaHJlZiIsImh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCIsInJlbCIsIm5vb3BlbmVyIG5vcmVmZXJyZXIiLCJ0YXJnZXQiLCJfYmxhbmsiLCJhcmlhLWxhYmVsIiwiSGVscCIsMSwicmVhZG1lIl0sWyJzdmdJY29uIiwiaGVscF9vdXRsaW5lXzI0cHgiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKE91KDAsIm1hdC10b29sYmFyIiksT3UoMSwic3BhbiIsMCksTWYoMiwiVGVuc29yQm9hcmQiKSxQdSgpLHd1KDMsInBsdWdpbi1zZWxlY3RvciIsMSksd3UoNCwidGJkZXYtdXBsb2FkLWJ1dHRvbiIpLHd1KDUsImFwcC1oZWFkZXItZGFyay1tb2RlLXRvZ2dsZSIpLHd1KDYsImFwcC1oZWFkZXItcmVsb2FkIiksd3UoNywic2V0dGluZ3MtYnV0dG9uIiksT3UoOCwiYSIsMiksd3UoOSwibWF0LWljb24iLDMpLFB1KCksUHUoKSl9LGRpcmVjdGl2ZXM6W1ZMLENXLGhHLGpHLFdHLEhZLElILGNHXSxzdHlsZXM6WycubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1iYWRnZS1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo5cHh9Lm1hdC1iYWRnZS1sYXJnZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4fS5tYXQtaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWhlYWRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAyNHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE1cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjgzKS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1oNltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC42NykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtYm9keS1zdHJvbmdbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MCAwIDEycHh9Lm1hdC1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FwdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTJweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6MzAwIDExMnB4LzExMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wNWVtO21hcmdpbjowIDAgNTZweH0ubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNTZweC81NnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMmVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNDVweC80OHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMDVlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDM0cHgvNDBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1yYWlzZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3Ryb2tlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZsYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mYWJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW1pbmktZmFiW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtYnV0dG9uLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FyZC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjBweH0ubWF0LWNhcmQtc3VidGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hlY2tib3gtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC10cmFpbGluZy1pY29uLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC1yZW1vdmUubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxOHB4fS5tYXQtdGFibGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWhlYWRlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb290ZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jYWxlbmRhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FsZW5kYXItYm9keVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYWxlbmRhci1wZXJpb2QtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWRpYWxvZy10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTI1O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTUwJTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjVlbTt3aWR0aDoxLjVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW07bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41ZW0gMDtib3JkZXItdG9wOi44NDM3NWVtIHNvbGlkIHRyYW5zcGFyZW50fS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3RvcDotMC44NDM3NWVtO3BhZGRpbmctdG9wOi44NDM3NWVtfS5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjc1JTttYXJnaW4tdG9wOi42NjY2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNzkxNjY2NjY2N2VtKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAycHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyM2VtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzUzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi41NDE2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNjY2NjY2NjY2N2VtKX1AbWVkaWEgcHJpbnR7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIyZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIxZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMmVtKSBzY2FsZSgwLjc1KX19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjI1ZW0gMCAuNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4wOTM3NWVtO21hcmdpbi10b3A6LTAuNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MWVtIDAgMWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjg0Mzc1ZW07bWFyZ2luLXRvcDotMC4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH1pbnB1dC5tYXQtaW5wdXQtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDotMC4wNjI1ZW19Lm1hdC1tZW51LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1wYWdpbmF0b3JbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXBhZ2luYXRvci1wYWdlLXNpemVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3RbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXN0ZXBwZXItdmVydGljYWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc3RlcC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0Om5vcm1hbH0ubWF0LXN0ZXAtbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRhYi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjB9Lm1hdC10b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTZweH0ubWF0LW9wdGdyb3VwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LXNpbXBsZS1zbmFja2Jhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbltfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRyZWVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbmVzdGVkLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4fS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVdOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtcmlwcGxlLm1hdC1yaXBwbGUtdW5ib3VuZGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6NTAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7dHJhbnNmb3JtOnNjYWxlKDApfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpub25lfS5jZGstdmlzdWFsbHktaGlkZGVuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7bGVmdDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmVtcHR5e2Rpc3BsYXk6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LXBhbmVbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOmF1dG87Ym94LXNpemluZzpib3JkZXItYm94O3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7bWF4LXdpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlfS5jZGstb3ZlcmxheS1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKTtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5Oi42fS5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjMyKX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTowfS5jZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO292ZXJmbG93LXk6c2Nyb2xsfUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnR7fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5ke30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxse2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCAwcyAxbXN9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06bm90KDotd2Via2l0LWF1dG9maWxsKXthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIDBzIDFtc310ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemVbX25nY29udGVudC0lQ09NUCVde3Jlc2l6ZTpub25lfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmdbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OmF1dG8gIWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW4gIWltcG9ydGFudH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nLWZpcmVmb3hbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OjAgIWltcG9ydGFudH0ubWF0LWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX1tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2NvbG9yOiNmZmY7ZGlzcGxheTpmbGV4O2hlaWdodDo2NHB4O292ZXJmbG93OmhpZGRlbjt3aWR0aDoxMDAlfXRiZGV2LXVwbG9hZC1idXR0b24uc2hvd25bX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDhweCAwIDE2cHh9LmJyYW5kW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnJlYWRtZVtfbmdjb250ZW50LSVDT01QJV0sIGFwcC1oZWFkZXItcmVsb2FkW19uZ2NvbnRlbnQtJUNPTVAlXSwgc2V0dGluZ3MtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjAgMCBhdXRvfS5icmFuZFtfbmdjb250ZW50LSVDT01QJV17bGV0dGVyLXNwYWNpbmc6LTAuMDI1ZW07bWFyZ2luLWxlZnQ6MTBweDt0ZXh0LXJlbmRlcmluZzpvcHRpbWl6ZUxlZ2liaWxpdHl9LnBsdWdpbnNbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleDoxIDEgYXV0bztmb250LXNpemU6MTRweDtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59J119KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEZZLFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6ImFwcC1oZWFkZXIiLHRlbXBsYXRlOidcbiAgICA8bWF0LXRvb2xiYXI+XG4gICAgICA8c3BhbiBjbGFzcz0iYnJhbmQiPlRlbnNvckJvYXJkPC9zcGFuPlxuICAgICAgPHBsdWdpbi1zZWxlY3RvciBjbGFzcz0icGx1Z2lucyI+PC9wbHVnaW4tc2VsZWN0b3I+XG4gICAgICA8dGJkZXYtdXBsb2FkLWJ1dHRvbj48L3RiZGV2LXVwbG9hZC1idXR0b24+XG4gICAgICA8YXBwLWhlYWRlci1kYXJrLW1vZGUtdG9nZ2xlPjwvYXBwLWhlYWRlci1kYXJrLW1vZGUtdG9nZ2xlPlxuICAgICAgPGFwcC1oZWFkZXItcmVsb2FkPjwvYXBwLWhlYWRlci1yZWxvYWQ+XG4gICAgICA8c2V0dGluZ3MtYnV0dG9uPjwvc2V0dGluZ3MtYnV0dG9uPlxuICAgICAgPGFcbiAgICAgICAgY2xhc3M9InJlYWRtZSJcbiAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCJcbiAgICAgICAgcmVsPSJub29wZW5lciBub3JlZmVycmVyIlxuICAgICAgICB0YXJnZXQ9Il9ibGFuayJcbiAgICAgICAgYXJpYS1sYWJlbD0iSGVscCJcbiAgICAgID5cbiAgICAgICAgPG1hdC1pY29uIHN2Z0ljb249ImhlbHBfb3V0bGluZV8yNHB4Ij48L21hdC1pY29uPlxuICAgICAgPC9hPlxuICAgIDwvbWF0LXRvb2xiYXI+XG4gICcsc3R5bGVVcmxzOlsiaGVhZGVyX2NvbXBvbmVudC5jc3MiXX1dfV0sbnVsbCxudWxsKTtjb25zdCBMWT1bInJvdXRlQ29udGFpbmVyIl07Y2xhc3MgQll7Y29uc3RydWN0b3IodCl7dGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9dH1uZ09uQ2hhbmdlcyh0KXtjb25zdCBlPXQuYWN0aXZlTmdDb21wb25lbnQ7aWYoZSYmKHRoaXMucm91dGVDb250YWluZXIuY2xlYXIoKSxlLmN1cnJlbnRWYWx1ZSkpe2NvbnN0IHQ9dGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoZS5jdXJyZW50VmFsdWUpO3RoaXMucm91dGVDb250YWluZXIuY3JlYXRlQ29tcG9uZW50KHQpfX19QlkuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEJZKShNdShyaCkpfSxCWS7JtWNtcD1Vbyh7dHlwZTpCWSxzZWxlY3RvcnM6W1sicm91dGVyLW91dGxldC1jb21wb25lbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJldiKExZLDMsWGgpLDImZSl7bGV0IHQ7VWIodD1ZYigpKSYmKG4ucm91dGVDb250YWluZXI9dC5maXJzdCl9fSxpbnB1dHM6e2FjdGl2ZU5nQ29tcG9uZW50OiJhY3RpdmVOZ0NvbXBvbmVudCJ9LGZlYXR1cmVzOltTaV0sZGVjbHM6Mix2YXJzOjAsY29uc3RzOltbInJvdXRlQ29udGFpbmVyIiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJkR1KDAsbnVsbCwwKX0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihCWSxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJyb3V0ZXItb3V0bGV0LWNvbXBvbmVudCIsdGVtcGxhdGU6IiA8bmctY29udGFpbmVyICNyb3V0ZUNvbnRhaW5lcj48L25nLWNvbnRhaW5lcj4gIixjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6cmh9XX0pLHtyb3V0ZUNvbnRhaW5lcjpbe3R5cGU6RnIsYXJnczpbInJvdXRlQ29udGFpbmVyIix7c3RhdGljOiEwLHJlYWQ6WGh9XX1dLGFjdGl2ZU5nQ29tcG9uZW50Olt7dHlwZTp5X31dfSk7Y2xhc3MgVll7Y29uc3RydWN0b3IodCxlKXt0aGlzLnN0b3JlPXQsdGhpcy5yZWdpc3RyeT1lLHRoaXMuYWN0aXZlTmdDb21wb25lbnQkPUR0KFt0aGlzLnN0b3JlLnNlbGVjdChfRCksdGhpcy5zdG9yZS5zZWxlY3QoQ0QpXSkucGlwZShodCgoKFt0LGVdKT0+dD9udWxsIT09ZSYmWVMoZS5yb3V0ZUtpbmQsZS5wYXJhbXMpIT09WVModC5yb3V0ZUtpbmQsdC5wYXJhbXMpP251bGw6dGhpcy5yZWdpc3RyeS5nZXROZ0NvbXBvbmVudEJ5Um91dGVLaW5kKHQucm91dGVLaW5kKTpudWxsKSkpfX12YXIgalk7VlkuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFZZKShNdShFayksTXUoaEQpKX0sVlkuybVjbXA9VW8oe3R5cGU6Vlksc2VsZWN0b3JzOltbInJvdXRlci1vdXRsZXQiXV0sZGVjbHM6Mix2YXJzOjMsY29uc3RzOltbMywiYWN0aXZlTmdDb21wb25lbnQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKHd1KDAsInJvdXRlci1vdXRsZXQtY29tcG9uZW50IiwwKSxPYigxLCJhc3luYyIpKSwyJmUmJnZ1KCJhY3RpdmVOZ0NvbXBvbmVudCIsUGIoMSwxLG4uYWN0aXZlTmdDb21wb25lbnQkKSl9LGRpcmVjdGl2ZXM6W0JZXSxwaXBlczpbTXZdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoVlksW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3Rvcjoicm91dGVyLW91dGxldCIsdGVtcGxhdGU6J1xuICAgIDxyb3V0ZXItb3V0bGV0LWNvbXBvbmVudFxuICAgICAgW2FjdGl2ZU5nQ29tcG9uZW50XT0iYWN0aXZlTmdDb21wb25lbnQkIHwgYXN5bmMiXG4gICAgPjwvcm91dGVyLW91dGxldC1jb21wb25lbnQ+XG4gICcsY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkVrfSx7dHlwZTpoRH1dfSksbnVsbCksKGZ1bmN0aW9uKHQpe3RbdC5BQ1RJVkVfUExVR0lOPTBdPSJBQ1RJVkVfUExVR0lOIn0pKGpZfHwoalk9e30pKTtjbGFzcyBVWXtjb25zdHJ1Y3Rvcih0KXt0aGlzLmRlZXBMaW5rZXI9dCx0aGlzLm9uSGFzaENoYW5nZT10aGlzLm9uSGFzaENoYW5nZWRJbXBsLmJpbmQodGhpcyksdGhpcy5vblZhbHVlQ2hhbmdlPW5ldyBBYn1vbkhhc2hDaGFuZ2VkSW1wbCgpe2NvbnN0IHQ9dGhpcy5kZWVwTGlua2VyLmdldFBsdWdpbklkKCk7dCE9PXRoaXMuYWN0aXZlUGx1Z2luSWQmJnRoaXMub25WYWx1ZUNoYW5nZS5lbWl0KHtwcm9wOmpZLkFDVElWRV9QTFVHSU4sdmFsdWU6dH0pfW5nT25Jbml0KCl7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImhhc2hjaGFuZ2UiLHRoaXMub25IYXNoQ2hhbmdlKX1uZ09uRGVzdHJveSgpe3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIix0aGlzLm9uSGFzaENoYW5nZSl9bmdPbkNoYW5nZXModCl7aWYodC5hY3RpdmVQbHVnaW5JZCl7Y29uc3QgZT10LmFjdGl2ZVBsdWdpbklkO3RoaXMuZGVlcExpbmtlci5zZXRQbHVnaW5JZChudWxsPT09ZS5jdXJyZW50VmFsdWU/IiI6ZS5jdXJyZW50VmFsdWUse2RlZmF1bHRWYWx1ZToiIix1c2VMb2NhdGlvblJlcGxhY2U6bnVsbD09PWUucHJldmlvdXNWYWx1ZXx8ZS5maXJzdENoYW5nZX0pfX19VVkuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFVZKShNdShiQSkpfSxVWS7JtWNtcD1Vbyh7dHlwZTpVWSxzZWxlY3RvcnM6W1siaGFzaC1zdG9yYWdlLWNvbXBvbmVudCJdXSxpbnB1dHM6e2FjdGl2ZVBsdWdpbklkOiJhY3RpdmVQbHVnaW5JZCJ9LG91dHB1dHM6e29uVmFsdWVDaGFuZ2U6Im9uVmFsdWVDaGFuZ2UifSxmZWF0dXJlczpbU2ldLGRlY2xzOjAsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXt9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoVVksW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoiaGFzaC1zdG9yYWdlLWNvbXBvbmVudCIsdGVtcGxhdGU6IiIsY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmJBfV19KSx7YWN0aXZlUGx1Z2luSWQ6W3t0eXBlOnlffV0sb25WYWx1ZUNoYW5nZTpbe3R5cGU6X199XX0pO2NsYXNzIFdZe2NvbnN0cnVjdG9yKHQpe3RoaXMuc3RvcmU9dCx0aGlzLmFjdGl2ZVBsdWdpbklkJD10aGlzLnN0b3JlLnBpcGUoUmsoZEEpKX1vblZhbHVlQ2hhbmdlZCh0KXtzd2l0Y2godC5wcm9wKXtjYXNlIGpZLkFDVElWRV9QTFVHSU46dGhpcy5zdG9yZS5kaXNwYXRjaChqRSh7cGx1Z2luOnQudmFsdWV9KSl9fX1XWS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8V1kpKE11KEVrKSl9LFdZLsm1Y21wPVVvKHt0eXBlOldZLHNlbGVjdG9yczpbWyJoYXNoLXN0b3JhZ2UiXV0sZGVjbHM6Mix2YXJzOjMsY29uc3RzOltbMywiYWN0aXZlUGx1Z2luSWQiLCJvblZhbHVlQ2hhbmdlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihPdSgwLCJoYXNoLXN0b3JhZ2UtY29tcG9uZW50IiwwKSxOdSgib25WYWx1ZUNoYW5nZSIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25WYWx1ZUNoYW5nZWQoZSl9KSksT2IoMSwiYXN5bmMiKSxQdSgpKSwyJmUmJnZ1KCJhY3RpdmVQbHVnaW5JZCIsUGIoMSwxLG4uYWN0aXZlUGx1Z2luSWQkKSl9LGRpcmVjdGl2ZXM6W1VZXSxwaXBlczpbTXZdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0ge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfSJdLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihXWSxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJoYXNoLXN0b3JhZ2UiLHRlbXBsYXRlOidcbiAgICA8aGFzaC1zdG9yYWdlLWNvbXBvbmVudFxuICAgICAgW2FjdGl2ZVBsdWdpbklkXT0iYWN0aXZlUGx1Z2luSWQkIHwgYXN5bmMiXG4gICAgICAob25WYWx1ZUNoYW5nZSk9Im9uVmFsdWVDaGFuZ2VkKCRldmVudCkiXG4gICAgPlxuICAgIDwvaGFzaC1zdG9yYWdlLWNvbXBvbmVudD5cbiAgJyxzdHlsZXM6WyJcbiAgICAgIDpob3N0IHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH1cbiAgICAiXSxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6RWt9XX0pLG51bGwpO2NsYXNzIEdZe25nT25DaGFuZ2VzKHQpe3QudGl0bGUmJihmdW5jdGlvbiBlKHQpe2RvY3VtZW50LnRpdGxlPXR9KSh0LnRpdGxlLmN1cnJlbnRWYWx1ZSl9fUdZLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxHWSl9LEdZLsm1Y21wPVVvKHt0eXBlOkdZLHNlbGVjdG9yczpbWyJwYWdlLXRpdGxlLWNvbXBvbmVudCJdXSxpbnB1dHM6e3RpdGxlOiJ0aXRsZSJ9LGZlYXR1cmVzOltTaV0sZGVjbHM6MCx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pe30sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihHWSxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJwYWdlLXRpdGxlLWNvbXBvbmVudCIsdGVtcGxhdGU6IiIsY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sbnVsbCx7dGl0bGU6W3t0eXBlOnlffV19KTtjb25zdCBZWT0iVGVuc29yQm9hcmQiO2NsYXNzIHFZe2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5zdG9yZT10LHRoaXMuY3VzdG9tQnJhbmROYW1lPWUsdGhpcy5nZXRFeHBlcmltZW50SWQkPXRoaXMuc3RvcmUuc2VsZWN0KHhEKS5waXBlKGh0KCh0PT5udWxsPT10P3ZvaWQgMDp0WzBdKSkpLHRoaXMuZXhwZXJpbWVudE5hbWUkPXRoaXMuZ2V0RXhwZXJpbWVudElkJC5waXBlKEd0KEJvb2xlYW4pLFR0KCh0PT50aGlzLnN0b3JlLnNlbGVjdChpUix7ZXhwZXJpbWVudElkOnR9KSkpLGh0KCh0PT50P3QubmFtZTpudWxsKSkpLHRoaXMudGl0bGUkPXRoaXMuc3RvcmUuc2VsZWN0KG1BKS5waXBlKGNlKHRoaXMuc3RvcmUuc2VsZWN0KE1EKSx0aGlzLmV4cGVyaW1lbnROYW1lJCksaHQoKChbdCxlLG5dKT0+e2NvbnN0IG89dGhpcy5jdXN0b21CcmFuZE5hbWV8fFlZO3JldHVybiB0LndpbmRvd190aXRsZT90LndpbmRvd190aXRsZTplPT09alMuRVhQRVJJTUVOVCYmbj9gJHtufSAtICR7b31gOm99KSksY24odGhpcy5jdXN0b21CcmFuZE5hbWV8fFlZKSxrZSgpKX19cVkuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHFZKShNdShFayksTXUoSUUsOCkpfSxxWS7JtWNtcD1Vbyh7dHlwZTpxWSxzZWxlY3RvcnM6W1sicGFnZS10aXRsZSJdXSxkZWNsczoyLHZhcnM6Myxjb25zdHM6W1szLCJ0aXRsZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYod3UoMCwicGFnZS10aXRsZS1jb21wb25lbnQiLDApLE9iKDEsImFzeW5jIikpLDImZSYmdnUoInRpdGxlIixQYigxLDEsbi50aXRsZSQpKX0sZGlyZWN0aXZlczpbR1ldLHBpcGVzOltNdl0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHFZLFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6InBhZ2UtdGl0bGUiLHRlbXBsYXRlOidcbiAgICA8cGFnZS10aXRsZS1jb21wb25lbnQgW3RpdGxlXT0idGl0bGUkIHwgYXN5bmMiPjwvcGFnZS10aXRsZS1jb21wb25lbnQ+XG4gICcsc3R5bGVzOlsiXG4gICAgICA6aG9zdCB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9XG4gICAgIl0sY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkVrfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W0lFXX1dfV19KSxudWxsKTtjbGFzcyBaWXtjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXQsdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyB4LHRoaXMuZ2V0UGFnZVNpemUkPXRoaXMuc3RvcmUucGlwZShSayhKRykpLHRoaXMucGFnaW5hdGVkVmlld1N0b3JlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRmLXBhZ2luYXRlZC12aWV3LXN0b3JlIikudGZfcGFnaW5hdGVkX3ZpZXd9bmdPbkluaXQoKXt0aGlzLmdldFBhZ2VTaXplJC5waXBlKHVuKHRoaXMubmdVbnN1YnNjcmliZSksa2UoKSkuc3Vic2NyaWJlKCh0PT57dGhpcy5wYWdpbmF0ZWRWaWV3U3RvcmUuc2V0TGltaXQodCl9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpfX1aWS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8WlkpKE11KEVrKSl9LFpZLsm1Y21wPVVvKHt0eXBlOlpZLHNlbGVjdG9yczpbWyJzZXR0aW5ncy1wb2x5bWVyLWludGVyb3AiXV0sZGVjbHM6MCx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pe30sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihaWSxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJzZXR0aW5ncy1wb2x5bWVyLWludGVyb3AiLHRlbXBsYXRlOiIiLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2h9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpFa31dfSksbnVsbCk7Y2xhc3MgWFl7Y29uc3RydWN0b3IodCl7dC5zZWxlY3QoTUUpLnN1YnNjcmliZSgodD0+e2RvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnRvZ2dsZSgiZGFyay1tb2RlIix0KX0pKX19WFkuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFhZKShNdShFaykpfSxYWS7JtWNtcD1Vbyh7dHlwZTpYWSxzZWxlY3RvcnM6W1siZGFyay1tb2RlLXN1cHBvcnRlciJdXSxkZWNsczowLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7fSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoWFksW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoiZGFyay1tb2RlLXN1cHBvcnRlciIsdGVtcGxhdGU6IiIsc3R5bGVzOlsiXG4gICAgICA6aG9zdCB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9XG4gICAgIl0sY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkVrfV19KSxudWxsKTtjbGFzcyBLWXtjb25zdHJ1Y3Rvcih0KXt0aGlzLnZjUmVmPXR9fUtZLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxLWSkoTXUoWGgpKX0sS1kuybVjbXA9VW8oe3R5cGU6S1ksc2VsZWN0b3JzOltbInRiLXdlYmFwcCJdXSxkZWNsczo4LHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYod3UoMCwiYXBwLWhlYWRlciIpLE91KDEsIm1haW4iKSx3dSgyLCJyb3V0ZXItb3V0bGV0IiksUHUoKSx3dSgzLCJhbGVydC1zbmFja2JhciIpLHd1KDQsImhhc2gtc3RvcmFnZSIpLHd1KDUsInBhZ2UtdGl0bGUiKSx3dSg2LCJzZXR0aW5ncy1wb2x5bWVyLWludGVyb3AiKSx3dSg3LCJkYXJrLW1vZGUtc3VwcG9ydGVyIikpfSxkaXJlY3RpdmVzOltGWSxWWSxJTCxXWSxxWSxaWSxYWV0sc3R5bGVzOlsnLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEycHg7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtYmFkZ2Utc21hbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6OXB4fS5tYXQtYmFkZ2UtbGFyZ2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweH0ubWF0LWgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1oZWFkbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMjRweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNnB4LzI4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNXB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC44MykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtaDZbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuNjcpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWJvZHktc3Ryb25nW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjAgMCAxMnB4fS5tYXQtc21hbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDEycHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjMwMCAxMTJweC8xMTJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDVlbTttYXJnaW46MCAwIDU2cHh9Lm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDU2cHgvNTZweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDJlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDQ1cHgvNDhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDA1ZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAzNHB4LzQwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDY0cHh9Lm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcmFpc2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0cm9rZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mbGF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmFiW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1taW5pLWZhYltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWJ1dHRvbi10b2dnbGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhcmQtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjIwcHh9Lm1hdC1jYXJkLXN1YnRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2hlY2tib3hbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNoZWNrYm94LWxheW91dFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoZWNrYm94LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoyNHB4fS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtdHJhaWxpbmctaWNvbi5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtcmVtb3ZlLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MThweH0ubWF0LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1oZWFkZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2VsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9vdGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2FsZW5kYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhbGVuZGFyLWJvZHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxM3B4fS5tYXQtY2FsZW5kYXItYm9keS1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FsZW5kYXItcGVyaW9kLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo0MDB9Lm1hdC1kaWFsb2ctdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjEyNTtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE1MCU7bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS41ZW07d2lkdGg6MS41ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNWVtIDA7Ym9yZGVyLXRvcDouODQzNzVlbSBzb2xpZCB0cmFuc3BhcmVudH0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6LTAuODQzNzVlbTtwYWRkaW5nLXRvcDouODQzNzVlbX0ubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo3NSU7bWFyZ2luLXRvcDouNjY2NjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjc5MTY2NjY2NjdlbSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNDM3NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMnB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjNlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM1MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjI4MTI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDouNTQxNjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjY2NjY2NjY2NjdlbSl9QG1lZGlhIHByaW50ey5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMmVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMWVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTJlbSkgc2NhbGUoMC43NSl9fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi4yNWVtIDAgLjc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMDkzNzVlbTttYXJnaW4tdG9wOi0wLjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjFlbSAwIDFlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS44NDM3NWVtO21hcmdpbi10b3A6LTAuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9aW5wdXQubWF0LWlucHV0LWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LTAuMDYyNWVtfS5tYXQtbWVudS1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtcGFnaW5hdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweH0ubWF0LXJhZGlvLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW19Lm1hdC1zbGlkZS10b2dnbGUtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdGVwcGVyLWhvcml6b250YWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXN0ZXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXN0ZXAtc3ViLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDpub3JtYWx9Lm1hdC1zdGVwLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LXN0ZXAtbGFiZWwtc2VsZWN0ZWRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRhYi1ncm91cFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdGFiLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10YWItbGlua1tfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowfS5tYXQtdG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB4O3BhZGRpbmctdG9wOjZweDtwYWRkaW5nLWJvdHRvbTo2cHh9Lm1hdC10b29sdGlwLWhhbmRzZXRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9Lm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE2cHh9Lm1hdC1vcHRncm91cC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1zaW1wbGUtc25hY2tiYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweH0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb25bX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjE7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo1MDB9Lm1hdC10cmVlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW5lc3RlZC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjQwMDtmb250LXNpemU6MTRweH0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmVtcHR5KXt0cmFuc2Zvcm06dHJhbnNsYXRlWigwKX0ubWF0LXJpcHBsZS5tYXQtcmlwcGxlLXVuYm91bmRlZFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItcmFkaXVzOjUwJTtwb2ludGVyLWV2ZW50czpub25lO3RyYW5zaXRpb246b3BhY2l0eSx0cmFuc2Zvcm0gMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpO3RyYW5zZm9ybTpzY2FsZSgwKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6bm9uZX0uY2RrLXZpc3VhbGx5LWhpZGRlbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjA7Y2xpcDpyZWN0KDAgMCAwIDApO2hlaWdodDoxcHg7bWFyZ2luOi0xcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwO291dGxpbmU6MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb2ludGVyLWV2ZW50czpub25lO3RvcDowO2xlZnQ6MDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTplbXB0eXtkaXNwbGF5Om5vbmV9LmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1wYW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czphdXRvO2JveC1zaXppbmc6Ym9yZGVyLWJveDt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O21heC13aWR0aDoxMDAlO21heC1oZWlnaHQ6MTAwJX0uY2RrLW92ZXJsYXktYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO3otaW5kZXg6MTAwMDtwb2ludGVyLWV2ZW50czphdXRvOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDt0cmFuc2l0aW9uOm9wYWNpdHkgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSk7b3BhY2l0eTowfS5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjF9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAuY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTouNn0uY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4zMil9LmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MH0uY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWluLXdpZHRoOjFweDttaW4taGVpZ2h0OjFweH0uY2RrLWdsb2JhbC1zY3JvbGxibG9ja1tfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7d2lkdGg6MTAwJTtvdmVyZmxvdy15OnNjcm9sbH1Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0e31Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZHt9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbHthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQgMHMgMW1zfS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOm5vdCg6LXdlYmtpdC1hdXRvZmlsbCl7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCAwcyAxbXN9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplW19uZ2NvbnRlbnQtJUNPTVAlXXtyZXNpemU6bm9uZX10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDphdXRvICFpbXBvcnRhbnQ7b3ZlcmZsb3c6aGlkZGVuICFpbXBvcnRhbnR9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZy1maXJlZm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDowICFpbXBvcnRhbnR9Lm1hdC1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtbWRjLWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9aHRtbFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90byxzYW5zLXNlcmlmO2hlaWdodDoxMDAlO21hcmdpbjowO3BhZGRpbmc6MH1bX25naG9zdC0lQ09NUCVde2JhY2tncm91bmQ6I2Y1ZjVmNTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2hlaWdodDoxMDAlfWFwcC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2JveC1zaGFkb3c6MCAxcHggM3B4IDNweCByZ2JhKDAsMCwwLC4yNSk7ZmxleDowIDA7ei1pbmRleDoxfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIGFwcC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBhcHAtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3gtc2hhZG93OjAgMXB4IDNweCAzcHggcmdiYSgyNTUsMjU1LDI1NSwuMSl9bWFpbltfbmdjb250ZW50LSVDT01QJV17ZmxleC1ncm93OjE7b3ZlcmZsb3c6YXV0b30nXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoS1ksW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoidGItd2ViYXBwIix0ZW1wbGF0ZVVybDoiLi9hcHBfY29udGFpbmVyLm5nLmh0bWwiLHN0eWxlVXJsczpbIi4vYXBwX2NvbnRhaW5lci5jc3MiXX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOlhofV19KSxudWxsKTtjbGFzcyBKWXtjb25zdHJ1Y3Rvcih0LGUsbil7dGhpcy5zdG9yZT10LHRoaXMubG9jYXRpb249ZSx0aGlzLmFwcFJvb3RQcm92aWRlcj1uLHRoaXMucGF0aG5hbWU9bnVsbH1oYW5kbGVDbGljayh0KXshdGhpcy5wYXRobmFtZXx8dC5jdHJsS2V5fHx0Lm1ldGFLZXl8fCh0LnByZXZlbnREZWZhdWx0KCksdC5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLnN0b3JlLmRpc3BhdGNoKGVEKHtwYXRobmFtZTp0aGlzLnBhdGhuYW1lfSkpKX1nZXQgaHJlZigpe3JldHVybiB0aGlzLnBhdGhuYW1lP3RoaXMuYXBwUm9vdFByb3ZpZGVyLmdldEFic1BhdGhuYW1lV2l0aEFwcFJvb3QodGhpcy5sb2NhdGlvbi5nZXRGdWxsUGF0aEZyb21Sb3V0ZU9yTmF2KHtwYXRobmFtZTp0aGlzLnBhdGhuYW1lfSkpOm51bGx9c2V0IHJvdXRlckxpbmsodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0JiYodD1bdF0pLDA9PT10Lmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigicm91dGVMaW5rIHNob3VsZCBoYXZlIHByb3BlciBwYXRoLiBHb3Qgbm90aGluZy4iKTtjb25zdCBlPVsuLi50XS5qb2luKCIvIik7dGhpcy5wYXRobmFtZT1lLmVuZHNXaXRoKCIvIik/ZTplKyIvIn19SlkuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEpZKShNdShFayksTXUoWlMpLE11KFhTKSl9LEpZLsm1ZGlyPUpvKHt0eXBlOkpZLHNlbGVjdG9yczpbWyJhIiwicm91dGVyTGluayIsIiJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MSZlJiZOdSgiY2xpY2siLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLmhhbmRsZUNsaWNrKGUpfSkpLDImZSYmTm0oImhyZWYiLG4uaHJlZixPbCl9LGlucHV0czp7cm91dGVyTGluazoicm91dGVyTGluayJ9fSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihKWSxbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJhW3JvdXRlckxpbmtdIn1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkVrfSx7dHlwZTpaU30se3R5cGU6WFN9XX0pLHtoYW5kbGVDbGljazpbe3R5cGU6TV8sYXJnczpbImNsaWNrIixbIiRldmVudCJdXX1dLGhyZWY6W3t0eXBlOkNfLGFyZ3M6WyJhdHRyLmhyZWYiXX1dLHJvdXRlckxpbms6W3t0eXBlOnlffV19KTtjbGFzcyBRWXt9UVkuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFFZKX0sUVkuybVtb2Q9Wm8oe3R5cGU6UVl9KSxRWS7JtWluaj1jbyh7aW1wb3J0czpbW0J2LCRTLFFTLGhEXV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKFFZLHtkZWNsYXJhdGlvbnM6W1ZZLEJZLEpZXSxpbXBvcnRzOltCdiwkUyxRUyxoRF0sZXhwb3J0czpbVlksSlldfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihRWSxbe3R5cGU6a18sYXJnczpbe2ltcG9ydHM6W0J2LCRTLFFTLGhEXSxleHBvcnRzOltWWSxKWV0sZGVjbGFyYXRpb25zOltWWSxCWSxKWV19XX1dLG51bGwsbnVsbCk7Y2xhc3MgJFl7fSRZLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHwkWSl9LCRZLsm1bW9kPVpvKHt0eXBlOiRZfSksJFkuybVpbmo9Y28oe30pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oJFkse2RlY2xhcmF0aW9uczpbWFldLGV4cG9ydHM6W1hZXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoJFksW3t0eXBlOmtfLGFyZ3M6W3tkZWNsYXJhdGlvbnM6W1hZXSxleHBvcnRzOltYWV19XX1dLG51bGwsbnVsbCk7Y2xhc3MgdHF7fXRxLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHx0cSl9LHRxLsm1bW9kPVpvKHt0eXBlOnRxfSksdHEuybVpbmo9Y28oe3Byb3ZpZGVyczpbe3Byb3ZpZGU6YkEsdXNlQ2xhc3M6X0F9XX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIodHEsW3t0eXBlOmtfLGFyZ3M6W3twcm92aWRlcnM6W3twcm92aWRlOmJBLHVzZUNsYXNzOl9BfV19XX1dLG51bGwsbnVsbCk7Y2xhc3MgZXF7fWVxLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxlcSl9LGVxLsm1bW9kPVpvKHt0eXBlOmVxfSksZXEuybVpbmo9Y28oe2ltcG9ydHM6W1tCdix0cV1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhlcSx7ZGVjbGFyYXRpb25zOltXWSxVWV0saW1wb3J0czpbQnYsdHFdLGV4cG9ydHM6W1dZXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoZXEsW3t0eXBlOmtfLGFyZ3M6W3tkZWNsYXJhdGlvbnM6W1dZLFVZXSxleHBvcnRzOltXWV0saW1wb3J0czpbQnYsdHFdfV19XSxudWxsLG51bGwpO2NsYXNzIG5xe31ucS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8bnEpfSxucS7JtW1vZD1abyh7dHlwZTpucX0pLG5xLsm1aW5qPWNvKHtpbXBvcnRzOltbQnZdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8obnEse2RlY2xhcmF0aW9uczpbcVksR1ldLGltcG9ydHM6W0J2XSxleHBvcnRzOltxWV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKG5xLFt7dHlwZTprXyxhcmdzOlt7ZGVjbGFyYXRpb25zOltxWSxHWV0sZXhwb3J0czpbcVldLGltcG9ydHM6W0J2XX1dfV0sbnVsbCxudWxsKTtjb25zdCBvcT17aWQ6VVMsbmFtZToiIixzdGFydF90aW1lOjB9LGlxPW1TKHtleHBlcmltZW50TWFwOntbb3EuaWRdOm9xfX0pO2Z1bmN0aW9uIGFxKHQsZSl7cmV0dXJuIGhrKHtkYXRhOmlxfSkodCxlKX1jbGFzcyBycXt9cnEuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHJxKX0scnEuybVtb2Q9Wm8oe3R5cGU6cnF9KSxycS7JtWluaj1jbyh7aW1wb3J0czpbW2lTLmZvckZlYXR1cmUoblIsYXEpXV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKHJxLHtpbXBvcnRzOltvU119KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHJxLFt7dHlwZTprXyxhcmdzOlt7aW1wb3J0czpbaVMuZm9yRmVhdHVyZShuUixhcSldfV19XSxudWxsLG51bGwpO2NsYXNzIHNxe31mdW5jdGlvbiBscSgpe3JldHVybiB6ayhYRywodD0+KHthdXRvUmVsb2FkOnR9KSkpfWZ1bmN0aW9uIGNxKCl7cmV0dXJuIHprKEtHLCh0PT4oe2F1dG9SZWxvYWRQZXJpb2RJbk1zOnR9KSkpfWZ1bmN0aW9uIGRxKCl7cmV0dXJuIHprKEpHLCh0PT4oe3BhZ2VTaXplOnR9KSkpfXNxLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxzcSl9LHNxLsm1bW9kPVpvKHt0eXBlOnNxfSksc3EuybVpbmo9Y28oe2ltcG9ydHM6W1tCdixWVSxqVSx6SCx5WSxXVyxkRyxBWV1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhzcSx7ZGVjbGFyYXRpb25zOlt6WSxIWSxOWSxJWSxaWV0saW1wb3J0czpbQnYsVlUsalUsekgseVksV1csZEcsQVldLGV4cG9ydHM6W3pZLEhZLElZLFpZXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoc3EsW3t0eXBlOmtfLGFyZ3M6W3tkZWNsYXJhdGlvbnM6W3pZLEhZLE5ZLElZLFpZXSxleHBvcnRzOlt6WSxIWSxJWSxaWV0sZW50cnlDb21wb25lbnRzOltJWV0saW1wb3J0czpbQnYsVlUsalUsekgseVksV1csZEcsQVldfV19XSxudWxsLG51bGwpO2NsYXNzIHBxe31wcS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8cHEpfSxwcS7JtW1vZD1abyh7dHlwZTpwcX0pLHBxLsm1aW5qPWNvKHtpbXBvcnRzOltbaVMuZm9yRmVhdHVyZShHRyxvWSksa1IuZGVmaW5lR2xvYmFsU2V0dGluZyhscSksa1IuZGVmaW5lR2xvYmFsU2V0dGluZyhjcSksa1IuZGVmaW5lR2xvYmFsU2V0dGluZyhkcSldLHNxXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8ocHEse2ltcG9ydHM6W29TLGtSLGtSLGtSXSxleHBvcnRzOltzcV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHBxLFt7dHlwZTprXyxhcmdzOlt7ZXhwb3J0czpbc3FdLGltcG9ydHM6W2lTLmZvckZlYXR1cmUoR0csb1kpLGtSLmRlZmluZUdsb2JhbFNldHRpbmcobHEpLGtSLmRlZmluZUdsb2JhbFNldHRpbmcoY3EpLGtSLmRlZmluZUdsb2JhbFNldHRpbmcoZHEpXX1dfV0sbnVsbCxudWxsKTtjbGFzcyBtcXt9bXEuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fG1xKX0sbXEuybVtb2Q9Wm8oe3R5cGU6bXF9KSxtcS7JtWluaj1jbyh7cHJvdmlkZXJzOlt7cHJvdmlkZToid2luZG93Iix1c2VWYWx1ZTp3aW5kb3d9XSxpbXBvcnRzOltbWFcsQnYsekgsV1csZEddXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8obXEse2RlY2xhcmF0aW9uczpbaEcscEcsdUddLGltcG9ydHM6W1hXLEJ2LHpILFdXLGRHXSxleHBvcnRzOltoR119KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKG1xLFt7dHlwZTprXyxhcmdzOlt7ZGVjbGFyYXRpb25zOltoRyxwRyx1R10sZXhwb3J0czpbaEddLGVudHJ5Q29tcG9uZW50czpbdUddLGltcG9ydHM6W1hXLEJ2LHpILFdXLGRHXSxwcm92aWRlcnM6W3twcm92aWRlOiJ3aW5kb3ciLHVzZVZhbHVlOndpbmRvd31dfV19XSxudWxsLG51bGwpO2NsYXNzIHVxe311cS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8dXEpfSx1cS7JtW1vZD1abyh7dHlwZTp1cX0pLHVxLsm1aW5qPWNvKHtwcm92aWRlcnM6W10saW1wb3J0czpbW3pILGRHLEhCLGpMLG1XLHpHLEJ2LENBLHBxLG1xXV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKHVxLHtkZWNsYXJhdGlvbnM6W1ZHLGpHLEZZLGJXLENXLFdHXSxpbXBvcnRzOlt6SCxkRyxIQixqTCxtVyx6RyxCdixDQSxwcSxtcV0sZXhwb3J0czpbakcsRlksQ1csV0ddfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYih1cSxbe3R5cGU6a18sYXJnczpbe2RlY2xhcmF0aW9uczpbVkcsakcsRlksYlcsQ1csV0ddLGV4cG9ydHM6W2pHLEZZLENXLFdHXSxwcm92aWRlcnM6W10saW1wb3J0czpbekgsZEcsSEIsakwsbVcsekcsQnYsQ0EscHEsbXFdfV19XSxudWxsLG51bGwpO2NsYXNzIGZxe2NvbnN0cnVjdG9yKHQsZSl7Y29uc3Qgbj10LmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybCgiLi9pY29uX2J1bmRsZS5zdmciKTtlLmFkZFN2Z0ljb25TZXQobil9fWZxLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxmcSkodXMoU3gpLHVzKHRHKSl9LGZxLsm1bW9kPVpvKHt0eXBlOmZxfSksZnEuybVpbmo9Y28oe2ltcG9ydHM6W1tkR11dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhmcSx7aW1wb3J0czpbZEddfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihmcSxbe3R5cGU6a18sYXJnczpbe2ltcG9ydHM6W2RHXX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOlN4fSx7dHlwZTp0R31dfSksbnVsbCk7Y29uc3QgZ3E9bmV3IE5yKCJbcGx1Z2luc10gUGx1Z2luIHJlZ2lzdHJ5IGNvbmZpZyIpLGhxPW5ldyBNYXA7Y2xhc3MgYnF7Y29uc3RydWN0b3IodCl7aWYoIXQpcmV0dXJuO2NvbnN0IGU9bmV3IFNldCh0Lm1hcCgodD0+dC5wbHVnaW5OYW1lKSkpO2NvbnNvbGUuYXNzZXJ0KGUuc2l6ZT09PXQubGVuZ3RoLCJDYW5ub3QgcmVnaXN0ZXIgdGhlIHNhbWUgcGx1Z2luIG11bHRpcGxlIHRpbWVzLiIpO2Zvcihjb25zdCBlIG9mIHQpe2NvbnN0e3BsdWdpbk5hbWU6dCxjb21wb25lbnRDbGFzczpufT1lO2hxLnNldCh0LG4pfX1zdGF0aWMgZm9yUGx1Z2luKHQsZSl7cmV0dXJue25nTW9kdWxlOmJxLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z3EsbXVsdGk6ITAsdXNlVmFsdWU6e3BsdWdpbk5hbWU6dCxjb21wb25lbnRDbGFzczplfX1dfX1nZXRDb21wb25lbnQodCl7cmV0dXJuIGhxLmdldCh0KXx8bnVsbH19YnEuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGJxKSh1cyhncSw4KSl9LGJxLsm1bW9kPVpvKHt0eXBlOmJxfSksYnEuybVpbmo9Y28oe30pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoYnEsW3t0eXBlOmtfLGFyZ3M6W3t9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W2dxXX1dfV19KSxudWxsKTtjbGFzcyB5cXtjb25zdHJ1Y3Rvcih0KXt0aGlzLmh0dHA9dCx0aGlzLmh0dHBQYXRoUHJlZml4PSJkYXRhL3BsdWdpbi9kZWJ1Z2dlci12MiJ9ZmV0Y2hSdW5zKCl7cmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5odHRwUGF0aFByZWZpeCsiL3J1bnMiKX1mZXRjaEV4ZWN1dGlvbkRpZ2VzdHModCxlLG4pe3JldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuaHR0cFBhdGhQcmVmaXgrIi9leGVjdXRpb24vZGlnZXN0cyIse3BhcmFtczp7cnVuOnQsYmVnaW46U3RyaW5nKGUpLGVuZDpTdHJpbmcobil9fSl9ZmV0Y2hFeGVjdXRpb25EYXRhKHQsZSxuKXtyZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLmh0dHBQYXRoUHJlZml4KyIvZXhlY3V0aW9uL2RhdGEiLHtwYXJhbXM6e3J1bjp0LGJlZ2luOlN0cmluZyhlKSxlbmQ6U3RyaW5nKG4pfX0pfWZldGNoR3JhcGhFeGVjdXRpb25EaWdlc3RzKHQsZSxuLG8pe2lmKHZvaWQgMCE9PW8pdGhyb3cgbmV3IEVycm9yKCJ0cmFjZV9pZCBpcyBub3QgaW1wbGVtZW50ZWQgZm9yIGZldGNoR3JhcGhFeGVjdXRpb25EaWdlc3RzKCkgeWV0Iik7cmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5odHRwUGF0aFByZWZpeCsiL2dyYXBoX2V4ZWN1dGlvbi9kaWdlc3RzIix7cGFyYW1zOntydW46dCxiZWdpbjpTdHJpbmcoZSksZW5kOlN0cmluZyhuKX19KX1mZXRjaEdyYXBoRXhlY3V0aW9uRGF0YSh0LGUsbixvKXtpZih2b2lkIDAhPT1vKXRocm93IG5ldyBFcnJvcigidHJhY2VfaWQgaXMgbm90IGltcGxlbWVudGVkIGZvciBmZXRjaEdyYXBoRXhlY3V0aW9uRGF0YSgpIHlldCIpO3JldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuaHR0cFBhdGhQcmVmaXgrIi9ncmFwaF9leGVjdXRpb24vZGF0YSIse3BhcmFtczp7cnVuOnQsYmVnaW46U3RyaW5nKGUpLGVuZDpTdHJpbmcobil9fSl9ZmV0Y2hHcmFwaE9wSW5mbyh0LGUsbil7cmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5odHRwUGF0aFByZWZpeCsiL2dyYXBocy9vcF9pbmZvIix7cGFyYW1zOntydW46dCxncmFwaF9pZDplLG9wX25hbWU6bn19KX1mZXRjaFNvdXJjZUZpbGVMaXN0KHQpe3JldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuaHR0cFBhdGhQcmVmaXgrIi9zb3VyY2VfZmlsZXMvbGlzdCIse3BhcmFtczp7cnVuOnR9fSl9ZmV0Y2hTb3VyY2VGaWxlKHQsZSl7cmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5odHRwUGF0aFByZWZpeCsiL3NvdXJjZV9maWxlcy9maWxlIix7cGFyYW1zOntydW46dCxpbmRleDpTdHJpbmcoZSl9fSl9ZmV0Y2hTdGFja0ZyYW1lcyh0LGUpe3JldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuaHR0cFBhdGhQcmVmaXgrIi9zdGFja19mcmFtZXMvc3RhY2tfZnJhbWVzIix7cGFyYW1zOntydW46dCxzdGFja19mcmFtZV9pZHM6ZS5qb2luKCIsIil9fSkucGlwZShodCgodD0+KHtzdGFja19mcmFtZXM6dC5zdGFja19mcmFtZXMubWFwKCh0PT4oZnVuY3Rpb24gZSh0KXtyZXR1cm57aG9zdF9uYW1lOnRbMF0sZmlsZV9wYXRoOnRbMV0sbGluZW5vOnRbMl0sZnVuY3Rpb25fbmFtZTp0WzNdfX0pKHQpKSl9KSkpKX1mZXRjaEFsZXJ0cyh0LGUsbixvKXtjb25zdCBpPXtydW46dCxiZWdpbjpTdHJpbmcoZSksZW5kOlN0cmluZyhuKX07cmV0dXJuIHZvaWQgMCE9PW8mJihpLmFsZXJ0X3R5cGU9byksdGhpcy5odHRwLmdldCh0aGlzLmh0dHBQYXRoUHJlZml4KyIvYWxlcnRzIix7cGFyYW1zOml9KX19eXEuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHlxKSh1cyhFRSkpfSx5cS7JtXByb3Y9bG8oe3Rva2VuOnlxLGZhY3Rvcnk6eXEuybVmYWN9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHlxLFt7dHlwZTpKbX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpFRX1dfSksbnVsbCk7Y2xhc3MgX3F7fV9xLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxfcSl9LF9xLsm1bW9kPVpvKHt0eXBlOl9xfSksX3EuybVpbmo9Y28oe3Byb3ZpZGVyczpbeXFdLGltcG9ydHM6W1tBRV1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhfcSx7aW1wb3J0czpbQUVdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihfcSxbe3R5cGU6a18sYXJnczpbe2ltcG9ydHM6W0FFXSxwcm92aWRlcnM6W3lxXX1dfV0sbnVsbCxudWxsKTtjbGFzcyBDcXt9Q3EuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fENxKX0sQ3EuybVjbXA9VW8oe3R5cGU6Q3Esc2VsZWN0b3JzOltbImluYWN0aXZlLWNvbXBvbmVudCJdXSxkZWNsczo1NCx2YXJzOjAsY29uc3RzOltbMSwiY29udGFpbmVyIl0sWzEsInRpdGxlIl0sWzEsImNvZGUiXSxbMSwiYXJnIl0sWzEsImV4aGliaXRzLWNvbnRhaW5lciJdLFsxLCJleGhpYml0Il0sWzEsInNjcmVlbnNob3QiXSxbInNyYyIsImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBVFlBQUFFMkNBWUFBQURydkw2cEFBQW95SHBVV0hSU1lYY2djSEp2Wm1sc1pTQjBlWEJsSUdWNGFXWUFBSGphclp4cGRoeTVjb1gvWXhWZUF1WmhPUmdDNTNnSFhyNi9pMkpyZW1xcm4rMVdpNlNLeFV3a0VIR0hRSURPL3VzL3Ivc1AvaHV0WlpkTDYzWFU2dmt2anp6aTVJdnVQLytOOXpINC9ENisvMUw5K2lyOC9Mcjc5bzNJNTZSM2ZyN1I1dWR6bUx4ZXZ2L0FYL2NJNitmWFhmLzZUdXhmRi9yNkJoZitqRUIzMXRmbngwSHlldnk4SHZMWGhZWjl2cWlqdHgrSHVyNHV0TC9lK0lieTlUZC9HOWJuay83dGZucWhNVXVuY0tNVW82V1EvUHVZUHlOSW43K1R2KzE5akx3djhOcE1LUVgzK2ZSMU1TYmtwOGY3NjdQM1AwN1FUNVA4MTFmdTE5bi85dFV2a3gvbjErdnBsN21zWDNQazYrKy9FY292cjZkdnQ0ay9oY08zRWNXZnYzRjd6UC95T0Y5Lzd6MzlYdnM4M2N5VkdhMWZFZlVtKzY4WjBoc1hVNTdlajFYK05QNFd2bTd2eitCUDk5TnZsdno0N1JkL2RoZ2hzaXJYaFJ4T21PRUdlNTkzMkF3eFI0dU56ekh1bU41clBiVTQ0azVhcDZ3LzRjYVdSanFwczI0N21tUE5jb3JmeGhMZWZjZTczdzZkTzUvQVcyUGdZbHJxdi8zai9xZHYvanQvM0wxYlV4UjgvelpYakNzcXJobUdWazRmZVJkTEVPN1h1cFUzd1gvOStWcCsvMFA4RUtxc1lIblQzSG5BNmRmbkVxdUU3N0dWM2pvbjNsZjQvRm5qNE5yNXVnQlR4TDBMZ3dtSkZmQTFwQkpxOEMzR0ZnTHoyRm1neWNoanluR3hBcUdVZUJoa3pDblY2RnJzVWZmbVoxcDQ3NDBsMXFpWHdTWVdvcVJLYm5WV2FMSllPUmZpcCtWT0RNMlNTaTZsMU5KS2QyV1VXVlBOdGRSYVd4WEl6WlphYnFYVjFscHZvODJlZXU2bDE5NTY3NlBQRVVjQ0E4dW9vNDAreHBnenVzbU5KdGVhdkgveXlvb3JyYnpLcXF1dHZzYWFtL0RaZVpkZGQ5dDlqejFQUE9rQUU2ZWVkdm9aWjFwd0JsSll0bUxWbW5VYk5pK3hkdFBOdDl4NjIrMTMzUGx0MWI1VzlWLysvQnVyRnI1V0xiNlYwdnZhdDFYalZkZmFYNWNJZ3BPaU5XUEZZZzZzZU5NS0VOQlJhK1o3eURscTViUm1ma1NTb2tRR1diUTI3Z1N0R0V1WUxjUnl3N2UxKzc1eS8yamRYT24vYU4zaW4xYk9hZW4rUDFiT3NYVC91bTYvV2JVam50dHZ4VDVacURuMWlleTdaWnk0M0k1eDFUTG50SmxhUzJYdUZYTUxhWmVRV3oyMXJucUJrOXZQTHQzSHhyZTZaNVlQbk1Na0hMOXlQYUhvUXIybWZPUHhFM2hmcGQwMTAyRnBrNTZ5TTQ2OVRyNjUzMVVZTFpjRy84NDhPN1JqM0xTc3VGZFk1dG8wbml1bGZYbmtsdkkrbnFRc0J3QmRmVzhtZGQ4V29tK3NaT285NTU3KzRvWWtLTDlsbmpaakp5RDVPSFZ6bTZXdVdjNWNaWmVUSnludnpmTzQyWWM2Um84UnJTR1NQbmxNUzIzbmNRbTFmSS9DeGFVZVRpM3dkZHNnd3RwMzdicHV5TVhhWWJKcnYxWUE3dVhUYWNiVDVkRGEzS3pEQ20weWY1VXhNMzNiNVFrOWhGMW40YVozU1JTRXMyOGZ6V0k2Vm1lSXlXeHM0MXErcmg3V09DMGFWekRpdUsvR1BCRVF3U21KQ09uK3hFUmFZOTdNMEViYnZoeml0bmF5b0xHRVBNSnN1MXBpa1FmZ05jdGw2WHNJMXRmTmxoMXozRzhvZHBLRndjTWh1eTZQNGxFVFFPSHVNNDJ5N0I3TlNDSU9UN3A5WHlZL0hPWDJRaUsxZlJaejFIWUVPWGlZZmtyTithUmx1L2hWZlIrUm1HUnR5VEk3blptb2ljZzcvdVp5RDhHOUR6azZFb05vc2FHUGFneDVaUktOY1laOFd6bjdpQXZQOWJQWktHWWtKdmNOUE5EMW5ZYytQQ1J3UFkxUXlIRHRhdFhjNnJYQ3hKZEpiWk9STWhlVmRMQithMHVSbXhJUmhjbGsyT2UwYm9jdzdpeUVKK1p6Vk1EeWdmK2R4TjJZZXNycnIvWFR5Tmk5V3BuNTlNMDAzV09OQlNZVkV2ZFY2QmF1SFBaS0RETldHeFZZS2JlNFdFY1NjR3crRTZFa3hzbkowQk05dEJLWXQ2QWJWejFPR2d1Z0lmZnZIRVQ2SkZvTDR3UWN6bUN5Szh6V1NLTWFod2ZIeUdHR2txWUdFTllCVG5PRGpNdGNaeEZZMmJZVmNBT1FJMklodDd1TnBTUkY5a1JDZENZWVBPVHJHeUEvVnJjdVltSGNYYStGblJseU9Zblp0VkRTM2p3T29kcHRTZkFrd1U4eU55NloxWGpBS2FCWXVaK3doYlVrRkFoYUEvUkpGdm8rUVFWYkF6Q3ViU2NGb3lka0pwTi9iaUhtSElIT3R3dWh0bmRPZTBtRXdRZkxHOGhSMHdnbEt4UkoyMkp4RTFDRGZONFRlcmRid0VER3lQVldkRHN0QUdPMkM4TGI2Qy9tUmdQTG1KaDRnS3JXenlTbWdmNEZGbGZ3ajVjSlVGRGtLa3dPa1hQbmNZMVpKZ0tQRVZhZ0c2blFvSlNJZGtzeGQ4VlFPMW15K1M0a21TMkZ4QllFVk5ZdWx5UWtZNUZRL2lFTWI2Y1FqdU9za3hKaWxGZ0RNb3p3OEtZQkdWRTZSaGl4MWhJOXQyOWtYeWRLWWp5ekxsWWhJMnVZeXBHQ2dlTTFBWGZlR3lBMDg5T2txSnRNZW1mMGkxd0hNRjYrZjI0a0pNaEZoRVhRaWpnQ0hiRU81QnY4dUMvNUltSWxCZ09NQ21vQ2cyUDdUYWlCM0FFQUJWdFJtSk1GSmlTenFHSEFLYTd1QVVPUEJwcDBCbVNRNGdVTklSTmZZUDFGVk56Yy9ENEFkMEdlb28wclV1MENZUkFCVHlxV3UyazRVQlR0dFhoV0l3Uk5yQXN4RGpKM3JkMVg3Y0lLaFd1VEtTQVNlU0JtSDBpWXl0V05zQWFoaHJtamxTV1ZXQ0x6MnpKRU9zWTlGUTZyd3ZiZWJWOGlrRXVrc2xseUxOQ05zemFBNktZSjN5MkxBY3kydVJnMHlaaFdtdWlVeGhVRUFMVlpJbFFQY01UVkd6UlBzdkxvbXhDY0Z4QWFyV1JDd3RhMUNFbTZUUGdRdXhpL2phNnYrQUFlR3NRaXF3MThJdHBZUjBKZU9Dd1dBVWxMWXVyMktzTUkwbzRuSU5YTjVUU1kraHhaOVhQNUZwZGNDbGVnc0VQSFlHSmg0VWoyVWxZZy9OcmxHbk1zSm1NalZMaFpZRVhUbG1JREZWbVd4SlNqb3pBT3hCY3EyWVBsVVU0M041SFUvWWFGdi8vczlFVUd0a3NtYXJvQWRPOExCWkVFWnlJbGRrSlE5VEJyUlI4Y1VyYklYb01QTWszTVNnT3pab0ZGN0JJWEZ6RllHcU5ackJ4NnlMTmVnRXNpbi9xR3VJS3VqaHpQSFRteVJIQ0VCcmxtRWpSOGU5VGxrT2RubGF0WlBhdW53d2ZqbmR3OEkxb1dkQWI3b3lNazQ5QmVxWEhQR01sbEVtT1VSc0FNTkV3MzVxaEFud0J5T2NnOGtET1RtMnY0WXdVaGdLSElCS1VGcENEUEMvcXh0UDU2VUdSc1lMOEZDUThnTFRtSW5wOHhLWkF1ZE1DSThzT1hmQU9vQUxrOERnK1Z6amFXcDBwSG5BZVI2Q2xtNWFUWmk1WFRGOW0vejE3RUoxbU1jb2w1QXgxTUplQU93Y3E5NEIyUlBRZ0pRaGpVSHVnVnBCeU1kQVc0QUdXVU9IUHRqZ0k4Ly9LeVhtM0tBd3h3MlFOUVFocVFOOEZTWC9ub0ViR1c1V0E5MGE3TXJYY0xXMlZvU2lJeUNla3ZySCtUeEtvRXpnMWkxMFpXMkRwRzhnellkM2Q0STI4bWdYVWhjcVJkajBOaWlYZVFCbVErUzVvQnExU1FDUFBGdk1JRXpHNUZvclNSK0loRzVCd2lPeXRtRTdDQXJKODdPVGlJTllSbHhLOXozNW1ZOTdvV0lnZm9aa2FnTVM3TTRJQUpjQzRkbnBtQmNvdUw2WWRIdHRla3VDQnNxdWVBSk9RMnF5bnhESHNzekFEWVRIREJCd2huSHBVdkNJY05tUFlKODJFSWdoSXpTTnd2aDYyL3FGc3doYWVUa0NJMFlDeFNIV3lYK3I5RFRtS0JUajBiOEVBNHMrNHNDeCtoYzUrUmFYdkRJb2hoWTdxMTVIeGo0SnBLWVdhR3lVRVV5RHFzUmt4MTY1M0Z1TUlXeFhWRnpFR1pDSTJUSlhoZFFoekFXNENwdUFIeVpSUm9OQVlML1JnUDI1RVJnWGtvOEdmZWltK1VRMGZBTGNLU2pPQ0JRYkx0OW43Z2F2Q1RzZkRjbmpTMTlBWlZpSG5NRm9NZjh4UkJHcWc1R0JEZmcrbDZ3MDFKd203MHUxdGdXRldnWENSekp2MlJOUTJHSjlZbmlMbXc1MFJySmtpTXlRVnAwb0pLa1RRcXNzMG5Kb1ltM0JVRi9FQzk2TVlFU1VORzgwenh6UkRBakd0b09MdXFkVitFMkVsZDZvSDVLS3JUbGZEMTJZVmZYdmoxTTg4Qmtac25DbGp5eG1JeVVGSzN5dG9OTFE4cXNVK0Uxc0I0SUZnMnVoOCtSQkloRDhrZVJEaHZ3UzB1RkFUMlUrYXBpcThObzFnRFZnWHJwZVVETTJGSWMwQ2V4OUMwcCtQQkw2SVJUYTRNK2Qyckt5ZEV5bnhnalIwQ2JrRWFNQWRWeXd1SnJMeGRzNDdzeFh6aVVnbG1GbjRsd0JrN0FkSGphSnNQYlMydXdHQU54b0JlMGFHUUY3QkdISGtVb2ljeFR3ZlJWRUVCQUlvaXY0cEZpZkR0S3c0bjRTMEdFOXdKZFZnUmJEdG5zOEI0aWFUS1FITVhKWUlXNnZJc1RLN2hpdURDblFGSkpneTloN2NHUzBHNXhGdkp2cWFFaDNJbVNiZEltYXFVYU0xeDM0cmNRUGZpSTlDSHZVYUZqdzNtc2hLQWd4aEg1c0hPQURrMEVGUEFxUjVWaGRmWDB2SnhaZ2VNRWk2YnFTTWZFUzlkdzdFYjVDTWxSN2tkN0RQSVY3SUJHN3RFQ1pmd0dnMEZIQWNUZmdqQTdiQSt0NkpNSTR4dGsrbkVUbHkvSUkyRGwwMVpNcjBVNG5VRG5TajlQVUg5S2prUDlWd0VKaTVoZ0crT3Q2QVlLdmlCYkNETU10UW1kc3prdXlvdGQrRXZzWDVRTUltUDZpWDRXWktPOVFlbE8yQVo4VHU1T0d3NVVBeWgrUVpSamd1WGJpQk5kRWwrR3c2S0M0MUVrbTlpT1pBODFhOVIwWnk0TGloQWhXMVdGb0lrc1J2RSt5aTF3Vmt6TjJSakJ0K3d0Z1NTS2d1NkczR3lBZU83aENsSFZvaGJvWWFpYkpCTlJ3QTI1bzdjUmxlU3UxYzJoY1ZsWmdGZzFwMHhtT1Myblp3TmFnR0lXQlhRRWlXRlk2N2dzRExaVFRDOE5WVkJ5SDl1TFdGM3lId01mVlJkMTBmSWxEQkRCYWFTNWxCUS9lN216alEyd0xaQzE3OFoyei8rcnZzZnZvM2dIWmkzeWRSVUtMczJTUkNNak9GRXZDcER5TWs0VHdEemVuVG80SHQ1dEJWNU51Z2FUTjk4WjRtMjhZZnBDV0pzZjg4a2ZTakk2Z1QrSWtUQ1NJQXl1cmJzQnRnNWVETmwvR1Z0d1dxMURaVjFnZytkamhDend6eXBOb04wUWI1K2dMWFV2dlFWMmdYMlJWa3RlVXlFVnBtcVFudkJKOCtHaWNkKzRUd2J1blFUMndENUJXdHlSQThOVkJ2UFF5RGpJOUFhcjhhQVJXQXNqdHh2Q0VWNEVHL2pzUkZIUWtRQ0UrZWgwVi9CS2tsRFhCWFFNT0ZYVVZwZ0ZtU25Za1p2cW03OGJrU0FkRVNuSTZUSnhiaE5QbkxqcGcyc0JKY2JNbWc5TTA5aU56eTI3Y0JGSFhaVThnUjl4M1NyYXNFaUJsYnd4U1g0SlcwWGtDbmtlSW1JeGJMRkgrVEU1Q21aS1dWRkdzY2pqM0V1NEFnRElZTFIyQ1VPcEEvS0RLMkxZdVk5ZXlxdXF5MzQ0RjVMQjhPbFM3eVBjV0xJN2kxRWRnRzFmbFZyT0ttR2pPOHBRV212Mm5pSU54Z3g0N1RRUXd2elhQd3dINkpRaW9zNDNCKzQrRDdnQlBCSTZYTlJyb0NJR2ZLb3FSSWNoRWc0aVFCaC9ZSmxuUFRLRUJsU0NIWURLaHhra29UR2ozaE93V3lSU3dnejNtODVTQmtmQ0ZBZWhWczJwb21YcWt6OVFFQTErQUlLQmZ6TlhjZ2NqVGtoTXE4S0NuNGtraGhBUnBYckRQQzh5Qnk4eEFGTVpCYk9aSmNxZjRkd3c1aWhDdEVoSkMzeENRWlBSb3ZiNTJhQU92Zm43ZkJLMFZjQmpWRndQSjJuSXc1c1Y3UVhERUpBRUVFb3ZnaHk0bW1OTWJKUzRhcllTcnFxL25zbVM0WDVneDhMZW42QUg3dE1CV2Jnc2ZkVzlSUGtoc2tOa0x3NVl0Y0JKY3kyYXF3TlQwR3VIZFlEcFRWeG1zd2ZBRlFCK29reElRTHc0N1YyOEpNMXhER2VjRkYzR2VyT3ljV0FCT011aUdnRUVLcHF5Sm1RYXdOSzZVT0tHbUlqRXJhUGVFOUd2YmhDWFRsM01wSjFOSW5maW9oQTJ5MWtQSzRSK1lJTTQ1MVFUdVhmQ0hPVkVaSmtQSlBVV2RJTE1HUkJySHlyN0FWNkhVNjRyVHBaS213dlZITVNiSGV4ZWd1Ym5VT3ZTT25FeHpFUVl5dDY4WkxIQ1NBTGlXK0NCQVZNanNZWm5zNldqYnZJQVVNV2NHTXlxd2tIa1FnZUVpcXF2ZkNvd1BpUmVjSlRkZVViZ2dMaU9vUUl5UzNUVkYzUXM3QWl2ak9mczkvU29tMjRDMHNhSVllTG9tem5WVUhIRURrejVxeDYrZXg1QXhlcVEvaFpnWkZ3dE5raCtjZzZUR050VFNWZjhOeS9FaDJvZytoRFBiK3FKdlluUU12R2NyRUVRN1Y0THllOXRodTRicHhEd0EyZ1ZWQkJYcFZuTXYvakoxWHJCODJEWnlGSVhpL0JlQkx1QlRXSFlxL0llaVFVb3dMOHhkam5xSnlBZEF0RitRRlFza1pqU0NWRHJVaTNoSEt6RElGZ3NqekNvOHJ3a3ozanF0VEh1RjNEaVdPRThheFlIdXlvU0lKVVZIWDU3clZBUTYzOVVCMXNUT3ZvU0RqR0JrNys2NHZOdFU4MGdJMkhHdWhBeE5yVlpzRUowbVBNSUJHS0NHeHlwZmRnTFM3UHRVT2RxZ2hweDhaam9WUjNOMlRocks1Q1krT0JDTG8xdnkvMVJTRXlEY2tXK0RmakIrOUlqZmpBbFM5QnVsNEVuYnhpNVNHWVF4ZUc5N1crcUN5Vzl2YUVrcis5K0U4Ly9lMUhCYnZ1NjZkYlRLbytCRlJ4cmR0dlpCQjhwdklNTVlrNlJHYUdxKzJkRmpzcVRvVm5ySStzWFJmVjE0aUZHQkZ6cXQwZTZkTktsdGpXcm9CQzhFck5HUUJ6dURzMGIzRDAxZzVFT3BYcHFxck40TFFyVjNmaUNvS2lvM3VnUmtnVTBUb0FjOUlyUkJGWnNpelBnek1XOHhUVktyQTJrSTU4SHNhNkU1a1dyMHNKc0FocnFCb0N2MGtoSkhTV2FvbS9HMWw0U3ZQb1ZjVUpXWHVGSmdFWUdmQlV4TVpma2grZm04WXowb2g0TEFoY29rSkpQV21URVBDejEyNnFhbzNaZ3lhRVFCeXd6Q0lFbmZhMnQwcFI4QXlhUEwzU2tYUXljcnFYbXlLWWx5T3d3cGZvWTc1R09hSkFtREVZdmdGZEx5U3V3OTVGV0VGVnRneUt4YXpCTFBUOGxtYkU2U0hyUzBoZVZYU2dIWW1lc1FZcklhako1dkZZVnNiTC9ZNkVZWnA0eHVhS2VSRW1hQ1pCbnlsODhHYWtZekR1Yzg2SThQQ0FYQkdWYm5obUtpZzlxeHl6bkJtQVBCSGpxRmtUbXNCNVZzaUoxeVF5WmNaaE9TZ1RFSUFXeUhRVmZ4b3d3a3dEV0VBMHN1NG13SVhVVEhQQ21vQ3RxclJra3JnS0xESTVHV0FUeHN0UGhxT1hWWkJDN1Rpc1FZQitONmtFWlJ0TEtoUkVScU8vRm9NbGdRRThucFh3dy9zeE5pZ1E5cTRxeXV3bG1FWW1abm1SSHNsOU1rZENTK1VWeEwzMkV1NitNQ0wzYkNRSElRajFRYVg0aEE1dXBKTHhVRUhpRjRhdXpLMDI2Z3hGempLRGc3V2NqRE1uNDdSWmh0c2srdkYzQ1AyTDVnQ3A0WjJsblFrMEhpRmZNVERjcTRvcVhjWjBxdXdudlFJOVZOZ1hsa2xoeTZGY1pET0crdzZicHlEL3NMcEhtdy9ZeUNDcjI3WTIrSFpQK3lMWUkwTUh1Q2RpaEF0Z0V3blpDVjVXeEFoQktLT1hDcEZhWW9GaVgzS1FpdVEvT1lLZVpRV1FQT3BBV054ODVZdmIzdW81V05JVGcwRjZtWkl3aXFvMWhRZ0pTeG1OdDBKV0Z0RXZjaFRXa3JQeWkxd0QxSGU4ZW1ORVJuVnQyMTdwcTRrTVpoNFlFcm9maEJ5bDk2WktWZGNtTWhJSTVRMHFJNXo4d1dBNGVWNjBDN09aNE1vcnpVVEt6anVKeTUyYXNPWUU3UndpUnJURkZBTEVLSmxlVlV5T2pjV2ZSQ1pNU3c2U01RUGdERis3Y21IUFgzY2MvdnpaL2MwM1htSFNFNXcvU04ydmN1VXZyNnBIakNkeXFreWtsTENXYzJ6c1hjS0dJN25nUXBBRGEzRWFHTnFUZ2xKSUFwL0FzUU5OVW1QVHRyK3hGancrOHZnUUZSMVFnTkd5N0dZQ1FsUmd5MHdTcnArOGdlSUlERHlzb1RwMjJFOGNXMGZqc2M0TkVHNTRmVGZsV3JWbkpqZFZ0RHRkRDdKTEdhaUV2ZDZ5akpzQjdKaWhzSGJ2R2RPaktobWtzeUNUS05VK0hIU3Y0bVF3d0dtK1RYK3l0V0VqTmhtSm9vRngxZ3MxZkZHVDd1SG5rTmZKdzNLZElHVmNtRDB1aE1iY0lpaE1pQm5XYThtS1NxV055dU9CbVZmS0hCMkROc1pUdHpXSWtSclgxUDRLdUt4U0xmZU9yazN5R1dtTzMxUHhrZmpSTmh6RDV6NEJMd3BtSXp1MVZjZlBBSDJxRFFOSFFObFJ1d3hRYzNLSkhxZ0ZjZUdscXQyVTNobHdXREZCZkhoRzFJZ0s5eVNqdE93YkFnbU9oMk0yVUxza0xGUUppRi9GT2JsMm1WVFVJWXpieHVFeVRMTlhwcVBGVkpBUFN1NVc0T0JscXBLUkZkclNhZHBKQ1VjNGdpaTczU25BTU1DR3hzR081MUs4NGFvWEQ4Zno1M2FzN1BISVNGeFlWRkJTRldoRm5odEd4WkJtTWdXOGQraUpnVTBHQjRIYXVyRmZBQVBNcG5JZlFzMlBpWHNhVUFiVXJGS0FxY2hVYnhsM2VoVTNWQXcxZExzakVNdFpTRVVpSitNU3h6YjhPalBVQ0lQSmRHT3d5cCtLbFh4MmYzckQrNXpiVTBFL0VWejgrVlgzZVRtckN3RTFMTXdIU0dTM2VWazg4c2M4NC9NYkVkcjBkTDVvaWVBZWlKbmJTWnBUbVNCQWlIeXBRL1VtVm8ybGVjME9zb21nY3VTeFFTNGl2aWdVSFNxL0JrL1VSdUlaQThDaXdRR21iWkVJaFZvNW9seXV0MGxzRUJCWFNKVFd5VzBydDhRY1RmU3piYWZTMWxGVHlXaVZjRlJSQ1c3V1B1a2NRbEdZa3JRUDVFd0k2UGtCQUlqMTRHbUdoanhBU0VPdUN6RUt3ajVmalFyS2hRa2k2azBiaFR3L2RBNnBRSnZFZzk1VENUNlVOTStMV1VyeUhLai9oaFFuVFJ6QWpPSkNaR1FZYTZtS2ZER0pBQk42Zld0UEVmTzhrdTJDTGtFOU1PY2dRNUJwU1ZQa1dERUxyWTZ0elFPeTVMeVo1NUg5djQvV244L3UvNHJXbitqUWhWNkFJTjVlaUJEN3Y0bW1EZmVlRWJCdjJCWSthL0RhR3BvenY2NGVkSzUzMGhqd040WW1MTWdXYVlwcmtPL3J1SlZVK3V6cFpLK2V5Ym04ZHVteTloQ0taRG82bmlraDVUcjZ3cW5KRE5nWnVCVDFUWGpWN0dBWGRXQVl3dnVvMVlEQUF5bjR1WWxuRGIxTDNsUVZZVkdDL2FJYk54WUMyTFBYK1lBeFJLUGFSZTBsaExsS3Y5TURSaDZVMkVXOVVvQUF4dXlxazJHczBodTJaOVpTRnBOUjBVY3NPSk1Xc1dUQXdsak1RRk43QlJKK3FXbWt5NldpQWZqT1BnVDR4QVZtK0JvSXhvYmg0OUNUQ1B2dXdCY0dweDNxSExzdUxxL1oxUWdKbXRYTmNzRmFEWHZLYW5BWFZSWFUwem0xU2RCVTVzWFRJMG1Td3pLamgwL3RYYjA2blZERXR2TG9VTVpSRlloSHIxZWx2ZkRLNHZCdlVMK05qT3dabDhsRUE2cEx4bUhJNzl1MmV3VngrYkpqcjNxdkhXdkVJYWxMOGlCOUcxQnZ0Y2JwVlFkZm9BSitBZnI3Q2tEM3Z3N2xueU5ZWXZRM0lmeEx4ZTJIRVA0UjRJZ1RNTEloWG10UmkxNk8rR1A4ZUN5TDljWktWNVF2RDQ5VnE3YXJIRGlDMEJQQlhxVWNuRUJDQTdJQTBGbU1XQWh0bDNPaHMydGxQVnZIZktwWEVnRWF1am9zSnJvWTB1RTJQVmVWWm1CTkVBakVTMHVYWkFXWENoc3A1UnJVTXR6eDlBb2RtQ2hPUk9ZR2FJOHdWOXhWUUdCK0pEZXAvSml2akZocVRNQ0RmUnpIM1JJV016MkNIS2dZVFFXOGhUaE9GUVcwc0dUb0R6K3h5bDBOZmFCY1VrK2IvaTRRRG43VVprZGhOUkhTWXpnVkdEZnordmJhMFVmaFU2WEVEQmIrNzlwemozSFhyZFJWcVZjRGtMU2U0aDZpR3JFd3dJREFaTVBQVUhwN1pTcDhSWWpTWGdKbDhsTjdudHlsbzVIMHM0Qzh1cW53ZkpnV0ZhdHRxUDJOVkdwZ2RuNmRZdkF5d2tyOWt0cTNTeUpuaUFPUm9KMkRBOTFqUWZFVEpLUnlRclk5WTcxNFhsRDRZcDNkWkxWbXVuNnBsUTJsc3hUejFZTUc2clVpc0M3U1hwMTd2cXV2aTFFQWFVbm1VQW9HeGM2VHMvTFplUXpLM2xQY2J6cTNFQ2ZtRk8vZUZrL3pRd3I4S2NMZFAwMkJQMldBKzY2NUp6RkFrQmIxZEJncUdYYUN0dmREOUxZd0hOQWlHTWVIb3ViVlg2RGQvUXUyQTNTWVpnVDB4dWdGbWUwQTZrMFlMMnJuSGlTREg4cFNHR3NuL1ZXZG1XV25NaWdzZ0RndlNkMkNXNW9XVFF4b0V2cEZFQmRHWk9INTMyUUVNb0RmVkhvbEpxd2tOVlduMVlkRHprRXBFdi8xcXB6ZUVZSmphZGRoRXBuVnQ2Rk95MnEzUklYY0FSbW45bzZJMnlFc1o5eXY1OGdWYlEva0dsbHBobll6U1pLbHU1Y2hHZ3IzSzRYbkFSejVCbUc2TXRrMmNOWXdpWFpReUFpOE9DRGd1QXBFUHRST2NORE9mVExSUk9CYytMcklEWGlDSkgwYWRITGd6akNaYXJDL2c4cjFYQmdzWmd4alBtNW45ZmlOT3pMZUQ4SERpNjlmUzVWRXlHRTh6NHAxcVFuQjM5WHdlUlBMSVFIUDhoWGIwSjE2TlJ3alYvRnRta3BwaUgxU0tsMzFjUUh2eHljbXpBaDRGV2JnNG55bnlnN0UrVkJoYkRRUHdpK0diOEFJcGtmb3JqSUQ2UTFXb2F5RERoUGNYdFJBaHNJMjZXdnRwNWRaQTA0VkZjZWpxWDlwa0NwcTA1N05aZGJ1OWxmeHZyM0pES3NYaUp3cGFnR00yaVZJMmtKSzVvV1FoNGYwOEE1b0JhV3BDV1BDNkFDbnF3aFRWby9waG1NQndTVWRwZE0xVVR2Y1hmWDZCb1l2aENTZUFvU2VjM3oyM0h0Vm5YUjF0Q3ByNG5EMG1EVWNFRWE3NHRYQjFqVDd0NDM0Zi96Wi9jMDMvbkVIUVBjUlZSRVdUS3VlOENITGtyU0IxWkJCVmFVaWdLMEFLT1I0K29XaGdEcmQ4TEZKN0V4ZnFBTlpvMi9xY0FuQ3lxdWlGcjJha2hIS1JITHlhaWxSNDJwR2plRmFNSGRvS0J3ZFlsNGRIT0ZEN1RndEorOWNCK0hpdFZtTzk4UjJ0L3FxVk1nUE5Xek85Yng4WGdnUndjTHhPRGJBQ3A5L2tDQTRjaUk1NGlDemYvNFllSnJxQXQ3STRsN1UxeFl5RDZ2K1gzZ0xndEttcVRRTGtTbzJKWkVKOFM2Nnprd1o1bGlubjFqOHJrTTROWWxRaDdZbFZpbmkrNXEzNnAyS2Z2U2FRZmJocUtyWXlKNWR5MmNYSWRma3VFbUJVUHZDZU12S1hXM1lzQkxZZnVZOUlIYU9PdXlnQWpYTFFabHhuMC9IRjNDR2NpZC84VHpadTJ6dzVGb3lKK3JnWGMxNFoxUTV3UjZwNkZqS1ZJc2hkcDgxU0RMQ1pLR0Z2WGJ6UXkxeitFdWZuSHlrUi9oOStyOVJXbG1OOGlnT2kxUFpScVozYmF0VUJjNGVMS2k2TDBFMWtrQWRPOUFaQ0J1M2s5S056V3Q3cTZrM2w4eGdtdFdsSGRRdWh1TzRBV1M4SW1Jc2pxbStEa0hrckZ1Z1RCZWEwemVienZmWExYSzBjdW9OcS85V1luei83UDV2aWZFOUw5eTN4QWo0Uk9RL0RpbURtQWlURVY0RElsNjN2K1JJbURINVpkT1JNZVNacm5lZTE5TS9uSURBTnI0RGFRTDlxMXVNREF0TDRxbCtkaGplUDhSckJuSTJYQ0N6MWlRTHB0cE1rQ0RFZm5OZUxlc0l5c0p0Tzl4MmNZeFJPOUhNY28zcXRjY3E0MzRhY1lQZ1ltSURaQlFHTE1GZFdTaHR2K0NFQVRaN0hlbllHcEJkNTE5QWFSUjhLd2pEWVF1RkFmYm1nbEdHNzVPMHEwNDhxTzl5cVhZR0d1c3d5WFJYeDBSSXU2QkdXZmpiQXFGOGNNUVdrQVRxNDlldWRvWkJzVFBjUGh2dU5KUFVHVis3dFdIcHB6YitIZTdFOTVuZ09TUURvMndyOTc1MEtJWG9RZGRsRlVSaWJ3ZmszV0JwcXFxV29Va3dNQk5ZelVHbGlOSWN6d0JyQU11Z016bE50QUxTNnBEMUt1WWExTkpLVUhKNWJOWk40RDVLTnV5dFhzUWJNcE9nMHgrWW1taWVhYjd2dUNUMnBUSXo0R01KbUczRTR0WDJQTXQ1WHU4ekNTaU5oc3IwT2dUME5udkZFVWdBNXNoVXBCM3Ewb3dhNTZ2aXF2VmxGNTNDUEZzTlNpVE0rbkRIVUNFclZKUm5Kd3F6Q3VyKzFWMmNIZXRvZy8xNkNab2ttdHFyMGl6L3FJenovYlA3VFgzbmQ5V2RIMTk3cFIzTUpkYXU3cFhSYVlBSnk3K0JYaWtWTW1mc2pBaTFRZndVc21ab245bE9RSEdvS0ZpMHAzTFFZSFY0U2UzUzFCYXJuWGZzdEF2cXdrZi9xbHFwWGkva0lkWmF4dVlNc1NiWEJ4NW0wZUdLaVVBQ0pra1VRRnoxUTNCT0xaT3EvamdTcFduL0hOcVdKQXZpQUxSVWxaa1lhbVFGL2RXb1JGamhQR1RSMUxhaFJsa05IVFdGWmpqekhBY1RsWTVHclZqcFJwQ0NtK1I0bTdlOTB3N1ZKeHpHOTlFa1pROXNGWS9DcE5TbVBXbFpCTGRoa0tyeG9QMzk4QWRpcW5vV0s3eVpZUEhhbndzSlZPSEhkQmYxSXZZZ1p3dW5RYTJEL0sxSFVKdlUyNXZHYXlsL2JieERYYmg3YVljUXlGaVlrS0YyT2dGV3JYSmpUQ05jcTYzUnF0YW5UdlFXWnd3OG9xRG02K0RSOWdTdTRTSjhIbVRob2RZTlFXWW9QZGpHQ1pZTENJSkFvYWt5VFNaS20zcW5iVTBVZG1aQTZ0QU42ajVnK1JFUUdSTkhITVUrSUNwbVQ3M3RpR3F6dHFPMk45b3BVWEtQVUlhZWRYNHRxV1c5ZFo5ZjR4M3FLZXJmQ1p5UTcwRmdDQzNSbUZ4Q3g0VlcvNXlwMWxGd1NVaHNJL2JXU1NZam50WHBpK3lkYitXbTltNlV6RldWVlJ3TE1oblFqeGsvZ0hKWEd5eXBPdS9DSEVKSWt1L2RhWThMVFlHczFvYks3QzNxekp0d2oxemd2ZTBsSzU0bmdRVTZtWWNXNnRsWG5Td2RQSWZPa0xGc0h1NC9Gek9vR3JKT3dPbUlVMUVMNjZoSzQ2UGpCZHRRUUhVUDFNM1N4dUxybitTQm5vRUlrbFRBaXNzcUhrMDFQWU1XMHVPTUNRT3BwblVnbm9qQllDTm1vVDNlcGZYc0M3QmNHNVZtekI3NENBQ0dGcHdLcGR5Zmh3cmEybEhKQzhHRTZsVmp2NDVZUnBEMW5SbHAwa293M0lycVFkd3FNUFNrWXpYdm9JNUxCRHJXZzJBR2pEVFFGZFdzaVl3anUzbHN4V3NpS0ZGK2hiUWhqeit0bkJlVjNsRVEyN1RwaFJWZHFhdEJ3VlRvZ2oySzlpQjErby9rMDZteXJoYWNQeHc2ZUovZHJ5L005THVkMi9FM3I3T2VxSnVHbDNPZWh3R3NWSVpZdGhJY3FiTmhwWXlrVXdGRVhLNXFHQXlxZE1FM3BpTmpxRkI3dS9OcU1EYlpCdnhhOE5ORDE3dkwvY2s2TWpqMU9FaUJialZvUytzT25ZOVVwSVdHNkQxRmlLQitWQWxFd3BwL2RLZDhKV1lqL09FSkxrbFRuZW5EMGxpb1IzWkp2VzFCRnErVC93RktVNnBsakJqeUJCdEU3c3Z2dWxXSWEvUnBtOEFOWVVGV3ZnWGRFcGtaOEVDOElna200cFVNVzhHdnJqT01ZYXNyQ0FEUTBTQUFEMzJFYmh6S3BsNVFRS0FuajAwRUdHTXg5VnV5Nk9yMXdIbGxIV3U5d042Vkt1OWxJS1hxYStVTndKUmpQZFNUcno2bnJhMFMxVUVLUU9WNVo1L29SQkRRZ3A3Z3lOb2lPV1dscG9TMnBXaGJKWXNPUWp1OGJxaGRsbk9oWDh0V1I3anN2Rnc3czZ6ejZJUzJDRncxQWVndnFXYVRYNmRSd0JLaTBPZnJpWWhadmZsSmhqQXh2MXEyT3NMTVY4M21yOU9DcEFRbWN0b2RKVVRlYlIxbkpLbTZqblF3ejZCV3l1YlVkcmluQXFkbWdIcngrSk1sQlpzZ1YvV0E0THEzZlB4bEZDU2Nlb0o3ZjNRRVovS2Rxak9YSXpwQ1U2azZuZ3ByYWpTS2tuMldkZm9MMnBpdnNxNU5nMlpiQWd6M1BKcGtxK3FGRWFRbDZkVVBTVTR2OVVsai9PUFY0UXhGL2xUZm9qYjgwSHVHeG9NVFpvU3BKMitwWUhsOGpXRkxUV2JjOGJVRU9mSmJKMTZBRVNPSmwxcEljQVozRTBYYTF6cWZRajVDT3dlVUtnWXBNOWNYczR4ZXJWRERWZUVlZ25MSTZsZHEwakdmNUYrUE9nQ0t3UENBVFh6dDE4aEtLT2tkU24wSFVPTWVDUmZlV05Ld0paRkx4ZmZQdEhHSVVlNzBDME9ISGdLRnJPT0hPb1h4cmltMkFMTlJPR3IzVVJkTWZtMzdPZ0JVTTRiUGZXN1pzRHM2akR0MUlyUEtQbzFJTW5ENXc0cnNxZTBySXAyNWI2bzJ2T08vK00ycmZqRUdpdlNBKzYrT2hiR3NDeXR3R2ZSZ0RVR0pGZ09HTFJsOEFIZXkzTWp0dzgrbEYxczZqd2xwNDRhSWFsWFEzSzA2SnNQVWtpSjg1SnVIUkFPUGp4Nm9pek1CSHlHMk9vUzlQQXlXc0d2VnA4NG5JYWdRTmI0NmozTWsrSEJyeUUxQ2ZhcHd5OUJFdDR4WVBRVjRrSUpPUHlwUUZCMFAxVzdUaHZrQlpsUjhFbGNXTG9SOWtsYkRxZjBCbG45Q1kzN2lnN3RDWGJDWXlKYXRWbGxoRTZGQko0ZVpFeDN6RzJBR3l6KzBWMkllb0YwQmtVMHVCektBbjJMd09wYW1rM2g0U3ZEbzZLd25ZWTJoVklPS2dFMEt0S21BWFZ0VzZUY0RzV1NjamtzT25ocEpvVUtqam9TK3ZnZlVTSEpFQWg1Nlh2Vm5EMEMzNlZpZ05JeUtGc0Fxcm5vZG5SYnM2dFhJMWxxR0owYVh6SHRPU3NlWFJ5bHV2aE1ES2VvYWdWVTY3OGpNdWtYblVMWVJFc2dpdUpqNXlmbWRrOUZPVEkwNHlxc3lzN3F4dFJQc0pKU2hBclZTVjBtRmhlUFdyNjI1NnQ3UHFobnZaRStiQS93MXFidEtuU2lpSnBBY3lPa2dJdUh0VkRjSlJ5YzVNc0dUbVlaeUZFOXhERFd1RVFvb3RLUTZkYml2WmZNcGJWVEc4VHJZcitvMWRKeW1XK0NsS3ZQQUhnWTBKamtxNExFdWRVMlRyb3I1T0tzaVZoeUtlckRQZm5aV1I0eUJST0tDdDhIUzFGUSs5UXNJTWhuOGRqOVZxaVBSWjFDSHRhb1hxQVVKVDlQdnFDRFJnSE5XaTRUU3IySkk2cUVFYWhrZFdWUlAyYS95QSs5Y0RXUU83ZkhMdnBPNEJFL1NNYnNkbWVXVnRCc2NNSlVIWWEwVEkvNkMyVk9IWC9Ec3dPVzRiNGNCTzRvOE5rblFxOU5HTnBOYTNsL2ZLTm1nTTJNQTF3RjhWVkt4TEFSdEZhYkZlQ1BCQ2srUEwwbUszdTVmK1g2dDE0TkNXSHkwQjZScXFQcnhkVjkxM00ybnhuWHZ0OEh5NiszVjRNWUFqclF5bksvRGpKTHdFUnRRNitmNHE5cml3TkpmeTRkcFpLVVpNWVgxdFQ3R1VjeThaVldoYTBvSkJwQWtMY0dpdWc2NURHOEkrdDBOREV2S2YrbjNWRFMxMzZvU0VnUk5iWVhQK1Q0Y0hjZ1QxZEdpWHNKUWxCZkkzWGNtMGRUT05QeCtIY1U2VG4zZWhvcllweDZOaVNUZjJ1a0RNSnZPVm1vZlVJQ3ZYN1lCWlZicFZjRU9VZTYxSjQ0Q3VNeXhtMTd0T1BoczlCYjZCQXA4OUlPS2FXckMwV1pQbDNnRjE4QTRSTmRhOEJLbzYwZFBIUytONkFFbHN0TzJWd096V2FEWHVRdHZYMi9JMFVTR0tOUGlpam9CSDFHRW9LRWVHUThFOFJIeGFxV2FSQmpMa1Z3UlBML3FCYTVOT3h3NGYvMCtEWlYyZWxFbEFSYUVFb1BNVTlwUGhPRmR1Vi9mWDdVQTJUMEJXM2o5SmloU0xFMUNGOXV1T3ErbDN4UVE5QnQrNXRhdnBqQVUzMmc2RTN1Zkw3MEhVYmtNUzBWMHhLNytvL2RUcjU2b0k5ZjhHeFJsVGhFK1RTNVNwZThoUVlwcTRPblJ2VjNTUUQwL3JFWlFYd3h4YWc3dW5Jb1FKQ3BmcUtYNjg3c2ZqbjZ6Q1c5YThBc29kWmR5R3JRaDlYRWRXK2NLY2xUYnNrNEdBYTZPV2ZTTVl1aFg2YWh6WDRwMWZCMGdJTWFBQ0l1U25UbXJaQnJIZk16NzJWZmxXZFJ2dEl3bmRYM2ppZkRxYW1OcUtNQUlUT3R3SWlLVm1OK1cvWTZDZkdndmFnOTZwUFNNNEg2U0Z5eUR3TlUwNS9DQ0FkRFdXWkNzTGR3dWNhSGZ6aFdDVHFxb2s2UWhNVmo4aGJoQytwYWpYeUtoQmhCMVdPZ2IyTGdWbkZ3cTRrNlRxczR0cG5hdFhaWitwWWM2NS9WZHNhNU9DNkpsbU9oY2xVZ3JhYWNDa0dvK2VUMmpBeEszMnM5WDBMbU5kRmpOZ1JObnBwcnlROGR3MVN5Y1ZDTXNQREpKa0xYRnFaTnhPakx6MTYvTWNnaUU5ZmVWSVJ3ajV0VDlOOUN1dGhqZzZ0MTRBQUFCZzJsRFExQkpRME1nY0hKdlptbHNaUUFBZUp4OWtUMUl3MEFjeFY5VHBhSVZCVHVJT0dTb1RoWkVSUnkxQ2tXb0VHcUZWaDFNTHYyQ0pnMUppb3VqNEZwdzhHT3g2dURpckt1RHF5QUlmb0E0T1RvcHVraUovMHNLTFdJOE9PN0h1M3VQdTNlQVVDOHp6ZW9ZQnpUZE5sT0p1SmpKcm9xaFY0UWdvQjg5Q01qTU11WWtLUW5mOFhXUEFGL3ZZanpMLzl5Zm8xZk5XUXdJaU1TenpEQnQ0ZzNpNlUzYjRMeFBIR0ZGV1NVK0p4NHo2WUxFajF4WFBIN2pYSEJaNEprUk01MmFKNDRRaTRVMlZ0cVlGVTJOZUlvNHFtbzY1UXNaajFYT1c1eTFjcFUxNzhsZkdNN3BLOHRjcHptTUJCYXhCQWtpRkZSUlFoazJZclRxcEZoSTBYN2N4ei9rK2lWeUtlUXFnWkZqQVJWb2tGMC8rQi84N3RiS1QwNTRTZUU0MFBuaU9COGpRR2dYYU5RYzUvdlljUm9uUVBBWnVOSmIva29kbVBra3ZkYlNva2RBM3pad2NkM1NsRDNnY2djWWZESmtVM2FsSUUwaG53ZmV6K2lic3NEQUxkQzk1dlhXM01mcEE1Q21ycEkzd01FaE1GcWc3SFdmZDNlMTkvYnZtV1ovUDhhN2NtTHcwWHh2QUFBQUJtSkxSMFFBL3dEL0FQK2d2YWVUQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFCM1JKVFVVSDVBY0NFQjhmQlZ4SHRBQUFJQUJKUkVGVWVOcnNuWGw4Vk9XOS85L1BtUzA3a0lXd2hNVUVBUkVFcEFXMEltb1JwWXExaUZXdy9rVEZ1clNpWGNDNjBOcUNYYkQxdXR3cVdtcXhyZEQySXJkWHNiVEk5WXBMQ3lpaVV0a0RFUklnZXpLVFdjK2M4L3orbUhNbUo1TUppeUlrOEx4ZnIvTUtaQ1l6a3pOblB2bnVYL0g5cjEzQW1xMVZSSDE5R1RieFp1WmQrQUczejF0RjBSMnJXRHR2R0ZETGlobmptTGRoSElzK1dNNzBQS0Q4R2E2NDlGSEtMMTNNOW1jbjA0cWZGYlBHTXUvTjBTellzSndiaXV6dlJ5bGZzWUNIRnIvQzVqMEJmSVZuTWY3bWU3aW1iZ0YzL0M3S3pHVWJXVGllTGtrNEhPYkFnUVBVMU5SUVYxZEhZMk1qVFUxTkJBSUJXbHBhQ0FhRGhNTmh3dUV3MFdpVWFEUktMQllqRm91aDZ6cTZyaE9QeDVPSFlSakpyNFpoWUpxbTg5L0NORTJjaDVUUy9pcWtsTmdISUZLL0FrZ3BoZlhTazE5VHZpZDI3ZHBWWEZCUTBOdm44eFc3WEs1aVRkT0tORTByRUVMa0F6MkFQQ0ZFSHBBTlpBR1pnTmM2WElCbVBaNEpHRURNT3NKQUNBaEtLZjJBWDByWkpLVnNrRkxXRzRaUnArdDZkU1FTcVRsNDhPREJrU05IMWxpUEl4MUh1LzhMSVZKdnM3OEhJSVVRN2I0NkRxbHBHa0lJTkUxTFBhVEw1Y0xsY3FGcEd2YS8zVzUzOHF0OWVEd2UzRzQzaG1IUXZYdDNmRDRmUHArUHpNeE1Nak16eWM3T0ppY25oOXpjWExwMzcwNlBIajBvTEN5a1o4K2U5T25UaDh6TXpHTzQ2dnlzbXp1Sm16ZFBaZFhhK1F4RGtZcDkwYmVlc2hXekdEdnZUVVl2Mk1EeVZtWDZISWl5YnM1WWJsNVZ4QjJyMWpLdmk3MDdzVmlNQXdjT2NPalFJZXJxNm1ob2FLQ3BxUW0vMzU4VXRGQW9SQ1FTSVJLSkhGSFFuR0xtUEV6VEZMYkFwWWhaR3lHenhja3BVcW1DNWZ4L1RVM040SnljbkVGdXQ3dE0wN1JTSWNSQUljUUFZQUNRMFVsT2N3VFlKNlg4eERUTkNzTXc5c1ppc1QyTmpZM2xBd1lNMkowaWNQSXdndGRPQUczaEUwSzBFVHBOMDJTcXlGbkNsaFE1NStFVU41ZkxoV0VZNU9YbDRmVjY4WHE5K0h3K01qSXl5TWpJSUNzckt5bHdlWGw1ZE8vZW5mejhmQW9MQytuVnF4ZDkrdlRCNi9VZVZ0QzJybmlSbDk1Y3hZcFZsUXhiOENyTGJ5aFJLcFlHZHkzUWFsaHRaZkh2MWhQakxDNGNYM1RjQkd6ck0zTlpWaktQK1ZOTDhObmZMVi9CNG5VQjZEdVZTN3VZcU8zZnY1OURodzVSVzF0TGZYMDlqWTJOK1AxK0FvRkFVdERDNGZCaEJVM1g5YVIxbGlwcTZjVE10c3BzWWJQL0tLVVJzamIvMzdWclY4OCtmZnFNOEhnOEkxd3UxOWxDaUxPQnN5RDVWblJtTW9EQlFvakJ0cEI0dlY1eWNuSXdUVE1LYkROTmMyczhIdDhhRG9jLzNybHo1OGZqeG8ycnN5eEZLUk1uU3RyL2Q0cWNsRklLSWV6N0pBWE9NSXlrOVdaYmM5WWhPaEk1cDdDWnBvbW1hWGc4SGp3ZUQxNnZsM0E0ak0vbkl4UUtFUXdHYVdscElSQUk0UGY3YVdwcW9yR3hrWWFHQm1wcmErblZxeGY5K3ZYcitMTzA2Z2wrdDc2SWNUYy95Wk5LMURxMjJJWmNjRDJUSnc2amlGbzJyMXZEQjFWUWV2TlNWczRmVDk1eGVZcEtWc3lheHJ3My9mUWROWkdKbzB2QXY1WDFyMnhnVDZ3dlZ5NWV5Wk9UaTdyRXlhcXVybTduZGpZM055ZmRUcWVnUlNLUmRvSjJCQ3ROMkc1bmlxQ0pEcXl5ZGhiWnRkZGU2MXF5Wk1rWE16SXl2dUJ5dWNZSUljNEZCcDltMS9RdTB6VGYxM1Y5czkvdmYvL3JYLy82Kyt2V3JUTWQ0cFlVT1NHRW1jNmlTMmZOYVpvbTAxaHh1Rnl1TmlJbnBTUXJLeXZwbmpvRnp1djFKcTIzek14TXNyS3lrdTVwdDI3ZDJybW54Y1hGU3FFK3JiQjkvNmF2c0c3OU51cklwYkJzTkZOdm5zYzkwNGNkSjFHenFXWDlpMCt3ZU5rNk5wZFhFYUNRMHZHVHVmbWVlN2hoZE9jWHRlYm1acXFxcXBKV1dqcTNNMTBjVGRkMVlyRlkwa0pMRTBjVHpqaGFHc3RNcEltWDJWYVorTjczdnVkNitPR0hML0Q1Zk9kcG1uYStFT0k4SUVkZDFtMW9rVkt1ajhmajZ3T0J3TWE3N3Jwci9WLys4cGQ0R3FFem5hNnJRK1NjY1RtWmFzbWx4TitrbEpLTWpJeDJzVGV2MTVzVXVJN2liMDczdEtpb2lGNjlldEczYjErNmRldW0zc1hQR21OVHRLTHJPdnYzNzI5anBUVTFOU1d0dEtPSm82VkxEdGlDbG1LZEpkMU1oMFdHVThpa2xGcERROE93bkp5Y2kxd3UxNFZDaUltQXV1cVA4ZStVYVpwdjZicitkblYxOWRzREJ3N2Nib2xiTzZ2T2FkSFoxcHZ6MzNhQ3dTbHlVa3A4UHA5TWwxeEl0ZDdTeGQ5czY2MTc5KzV0ckxkKy9mcmg4WGpVdTZlRTdiTng2TkFoS2lzcjJ5VUhuRzZuTFdxMmxXWmJhRWNyYUlaaEpOMU0welE3RkxOUUtIU3gxK3VkcEduYUpHQ0VlbmVPSy8rT3grT3YrLzMrTndvTEM5OG1rY1UxVThXdUk1R3prdzIydXdyZzlYcVRGbHhIQW1kYmNMYjFab3ViMHoxTlRTNlVsSlRRcTFjdjlZNHBZVHQyZ3NFZysvYnQ0OENCQTFSWFY2ZE5EaHlwZkNQRjdSUXBpUUduZFNaU0xMU2ttSVhENFNsZXIzZUtFR0lLMEZlOU15ZUVLc013L2hFSUJOYm01K2V2cGJWY0phM0lPV055dHFzSzRIYTdwYk04eEJhNUkxbHZxZTVwYm00dWVYbDU5T2pSZzRLQ0FvcUxpK25UcHcvOSsvY25PenRidlZ0SzJJNk8vZnYzSjYwMFp5d3RYWElnTlphV3hrbzdrcUNKMUpoWk1CaTh4T2Z6WFNXRXVGS0pXYWNRdWRWTlRVMnJpNHFLYkV1dWpjaWxXbkgydngzdWFUdUJjN3ZkSFFxYzAzcExUUzZreHQ1S1Nrb09rejFWS0dFREFvRUFuM3p5Q1ZWVlZXMnN0T2JtNWpZMWFVZFpaQ3RzMTlOMk53OWpuV21OalkzRGMzSnl2cVpwMnRXZ2FpMDdLZHRpc2RnckJ3NGMrRnRwYWVsV2g4QVpEcEZ6eHViYVdIRjI5dFFXT1V2WVpEcjNOTlY2YzlhKzJabFQyM3JyMjdjdkF3WU1JRGMzVjcxRFN0amFXMmwyZ2lCZHhyT2pFZzViMU5JSm1yTkx3Q2xvdHBpdFdyVXFZOUtrU2RlNjNlN3BRb2pMMUdYWWRUQk5jMDBvRkhyNXFhZWVldVhCQng4TUEvR09SQzZkd0RscjROSUpuQzF1SFpXR3BHWk83Y1NDc3Q2VXNBRVFDb1hZdTNkdnV3U0JiYVcxdExRa1kybEg2Qnc0bktBSnA5dloxTlEwSWpzNyt6cE4wNjREMUpYWXhmOG02cnIrMHY3OSsvODZhTkNnYlE1WDFVaDFWUjBDSjQ4a2NCMWxUdTNZVzA1T1R0SjZTMDBzbkhIR0dXUmxaYWwzNW5RVnRvTUhEeVpkejVxYW1qWUpnaVBWcFRsRUxhMmdXUVcxYmR6TlVDZzB4ZXYxemhCQ1hLc3V1VlBTaWx2WjFOVDBVbUZoNGV0U3lyZ1F3aWx3aHRPQ3M0WE9HWWRMRmJpT1ltL3A2dDVzMTdSbno1NUoxN1IzNzk2bi9YdmlQcDErV2NNd0tDOHZaOSsrZlJ3OGVERFpFdFhjM0l6Zjd5Y1lEQ1pGTFJxTnB1MGVzQVhORVVkTEsyZzMzbmlqYThtU0pUZTYzZTRiZ1F2VXgvL1VSZE8wYWZuNStkTmlzZGc3TzNmdS9QTXR0OXp5MHNhTkcrT1dtMnBJS2R0bFZnM0RrS1pwU2szVDdGaXNkSllFeGVOeDZTd1hzajBFWnlqRS9xTnIveEVPaFVMSmRxMnlzakpjTHBjU3RsT2RwcVltOXV6WjB5YnI2V3lKT2xLeGJScTNVemk2QkpLQ3RtblRwdHdSSTBiTWNybGNONkZxems0djkwZUlMMlZuWjMvcFgvLzYxemNqa2NqeVpjdVcvZVcyMjI3elc5WmJ2Q09CazFKS1I2RzJVK0JrYWd1ZXM5ZjRTQUpYV2xwSzkrN2RsU3Q2cWxKWldVbEZSUVdWbFpWcGE5UFNGZHNleGtwTEcwUGJ0bTFiajdLeXNsdGNMdGN0d0NEMU1ULzlNQXlEeXNwS0Jnd1lZSCtyUEJLSi9PR1ZWMTc1ODNYWFhkZG9XM0QyWWNYZ3pIUXhPR2ZkbTlNOVRTMExzWXQ2MDlXOGxaU1VNSERnUUVwS1NwU3duVXBJS2RtNWN5ZWZmUEpKc3VEMmNGblAxQTZDRHR4T084dXBTU25GaHg5K21IZldXV2ZOZHJsY3M0RXk5ZkZXd3VZUU5wczk0WEQ0OTMvNjA1K1czM3JycmMxSEVEalQwWFNmMnJrZzAzVXNkSlExdFF0NkJ3d1l3T0RCZzdHNkpaU3dkV1VDZ1FDN2QrOU94dE5xYW1xU1dVOW53VzBIcnFkSWJZVktzZEswK2ZQbnUrYlBuLzlObDh2MVRWVDkyUWw4WXc5QjlRNW9xSUJ3VStJQXlPeWVPUElIUXZFUXlPM1ZtWVROL2tPN0xSUUt2ZkQxcjM5OTJlclZxMk9Xd05raVp6b0V6a3kxM3B3QzUvRjRaRWY5cHM1cElmbjUrZlRzMlpQZXZYdlR2MzkvQmcwYWROclV2SjJTd2xaZFhVMTVlVG43OSsvbjRNR0Q3VW81VXVOcHpvQnNPcmZUVGd6WVdjNUlKSEs5eCtPNUV4aW5sT1lFMFZBQnU5Y2x2aDROK1FOaDBNVEUxMDRpYkE2QjIrajMrNWQyNzk3OUZTR0VuaUp3N1Z4VVJ3ZURUTFhlVW12ZVVndDY3WktRM3IxNzA2OWZQOHJLeWs2TGNVaW5YUEtnb3FLaVRaTEFucHZXVVR6TmFhWFpnVm1uMitsSURHaWhVT2dTcjlkN2w5WHlwRGhSYlBrclZIMTQ3RUs0c1FMNmpvSVJYKzFjMW9RUVk3dDE2emJXTUl3cmEycHFsdmJ1M2Z1ZlRvRkxUVExZQ1FacldJSk1tZDluLy8rb2tneVJTSVJ3T016QWdRT1ZzSFdWZU5xT0hUdllzMmRQc2pYS0hqUFVVVHl0QTllem5kdlowTkF3T0M4djcxdENpRHVVeXB4QTRoSFk4RUxDL2Z5MFZIMlFjRmZQdlE3Y0daM3ExOU0wN1N1OWV2WDZTaXdXVy9MeHh4Ly9mdlRvMGVVT2diUExSQXpBTkUzVHRQZGIyTmxUdTJYUEtXNnBJbWNud0ZMRkxSS0pNR1RJa0ZNMjduWktDRnM0SEdiSGpoMVVWRlMwNmZlMDY5TTZpcWVsV21tV3FDWGR6bG16WnJtZWUrNjV1MTB1MXh4QXpXRSswV3hZQ29IcTQrUEd2djluR0h0VHAvdzFQUjdQN0ZHalJrMEpCb1BQVHBndzRmZWJOMitPQWJwbHZXbTJpeXFsTk8xeDVsWUNTenFISzZRS1hMcFNFV2ZZeFJhM1kxc2tvNFR0aE5EWTJNak9uVHVwcUtoSURvUjBUdVZJVjU5bS9SVnppcHJUU3RPa2xDSVVDazMyK1h6M0FsOVdDbk9TM00vaklXcE9jZHZ5UDUzT0xYWFFOeXNyNnlmdnZ2dnV4VFUxTlV0NjkrNzlsaEFpNW5CUEJhMDlxVExGZ25NS25FeTNGQ2lkZTJwWEFRd2VQSmdlUFhxY1lzTG1YOEdNVWZQWWtIc052L3Z3VVNaMm9SZGZYVjNkcHB6RGJtSlBWM1RyS09VUXRubWV4a3JUS2lzcmV4VVhGOStyYWRwM2xMcWNKQm9xamoybWRyUnVhZCtSSnpTaDhDbmMwNHQ3OWVwMWNUUWEvZlhycjcvK3V5bFRwaHl5M0ZQTktYQ0pYVFRDN01oNmM3aXFISTJiT25qdzRGTXFxZEJsTGJiOSsvZXphOWN1UHZua2syUTVoN09USUYyU0lOVktNd3pEYWFWcGtVaGt1c2ZqK1E0d1JxbkxTV1RYRzYzLzFnL3gwSS8vd2JJR0dEZmo2eXlma0FrWVZINjRpWWRlM2N2NnlnaGtaak42NUFqbVRSL0NhS3NIUExwL053dFdiT0dWdlg0Q1pGQTZ1RDkzVEIvTDlOM3JZT3pBVG44S3ZGN3Z0eTY3N0xMejYrdnJueTBvS0ZndGhIQlo3cW51aUwwSlovd3RqY0IxR0h0THRlQnNnZXZ5VTBMODVheDdaUm51U2FQbXNRY2c4QkkzbDY1ajVrc2JXVmkybFJjWFBNVGlOVnVwaXZyb08yd2lOODlmeUMyajh6ckZheTh2TDJmMzd0MUpVYlBMT1ZLYjJEc1NOV2ZHVTBxcFZWZFg5eXNvS1BpdUVPSXVwU29ubWNBaGFQd2srZCt0cjI5a1JVUEt0ZnZ4djVqeGJEbFZlQ2dkV0l5dm9aWU42OWN6b3g3V2ZtY0lKYzE3bWZQNE83d1doc0xpWW9iUnpJYXRPNW4zZUl5OEg3cVlmTmFoazFMbmRxd0lJVWJuNStjdmpzVml2M25ublhlZXYvamlpeXVGRUpyRFBZMWp0ZkxaazBUc3pLbFQzSnhiejV6TGcrellzbk80UXl3V282eXNLOWFabDdOaXpod1dyZG1HMzVlTGUrYk1DL25kc2plcDhwWnk2UTNYY0dtUm4zVVB6V0wrS2o5OUw1ek9IU1hsdkxKc0ZRdG4rY2xidTVUcEozbXAxUGJ0MjVPRnQ4NmV6OE5rUG9XejE5TlJsNlpKS1VVa0Vwbm04WGkrQjN4QnFVcG5pQzlzYi8xMy9RNFd2TnBJTE9VdVc3ZldFczNMNXNJckxtZnBoQndJN1diV0Q5N2h6YjM3V0I4YXd1U0tmV3oxWk5CMzJGaFczbm9HUmJUdy9LS1hXRmhSeGFxOU1MbStva3NJbTQzSDQ3bHQ0c1NKWTJwcmF4Y1hGUld0c1dKdm1pVnF0dlZHd25DVHFkYWJTSW5Ea2VxaU9qZW4yUUkzZE9qUUxuYmhSS0hvR3VZdm44cmt2Qlc0YjVsM0phOHRlNU1xMzJobXpyK1RpWlR6VEhrZFVNclVlZk9aTnl6S3BXY3RadFdlWFBMOE9MWXJuMWlrbEh6ODhjZnMzcjI3emNKaWUydVVQWmtqSlVtUUttckplTnIyN2R1N2w1V1ZmVi9UdEhsS1RUb1I5UlhXUDJLcytlc0hiS0FINHdhMnNLRkNUOTVsL0xWZlkyTzZBVkFlTDNrZXlCczVrYmRHcG50d0Yza2VTendIanU5U3AwVUljVzVoWWVGemtVamtpVC8rOFkrL25UMTdkcU5sdmVtMGpzZ3liRUZ6eHQ3c1FhZE9jVXRkKzVnUXVTaE5GZS95NXlmMlVqanJQM2xzNXRsZHFCeGtHTlBuRDdPTnQzUXh0akltWGptS0o3Wjl3T0lyeDdKbTFIakdYM29OTSsrWnpMQ1Q1SW5xdXM3SEgzK2M3Q1pJTGJ4TkxlZXcwdG1wV2M5a2dpQVlERjdvOC9ubUNpRW1LeVhwWkZndFV0RzltMWl3S1VMZkN5WnljM3hkRzJHenFmMXdFd3ZlYTZaMmJ4VWI0aGxjZU8wb0pqczMxQjNhelVPdlZsRlpmNGoxRlJwOXg0emxqc0ZBUE5wbFQ0L1A1N3ZuNXB0dlBudlNwRW5QRGh3NDhGMHI5aGF6WEZNaGhEQVNobHByM00zcG1xWk1Fa2tJV3p4QzNkNHR2TDUvUHdmOEp1Nk1Ya3lkdklNUFA0eHo5dGxuZDhtMWYybVRCOFB1WE03YTBTdFl0dXcxMXExZng3SkhYMlBaNzY1azhkb25tWHlDeFMwU2lhUVZOYnZ3TnQwK0FvZWxsdXA2YXJGWTdIYVh5M1VmMEVlcFNDY2swZ3cwOC96eTNWUmw5dU9KcTN1UnR5TDlYZjE3OTdGcWt6L3huN3h1REN0T3FjZnkxN0ptVXdWMUFPNXNocDNSTGJFSS9MTVUvSFlDTkUyYk5HREFnR0Yrdi84LzgvTHkvZ3hvbG51YXROeHdKQlpzajhleTNvVGxzbUthVVJxcnlxbHRDcU9qNGMzcnlhQnpoelAyM0hNNFM2dGc1ODZFcTNyMjJXZVRrWkhSdGM0UmdNL3lVYU5Sd0wrZVorYk1aZEZyZWN4OGNpbXZibHpMUTZPQXVuV3MybnhpWDF3d0dPU2pqejQ2YkoxYVNseE54R0l4WWZkOFdtYTJacHFtVmxWVjFTY2Vqei9tY3JtZVVLTFd1YW45MTBZV1Y4SzRxOGN5OVRDVHJzdXUvaHA3bnY0R0crNDlpN05DMVN4KzlsK3NDVG51TVBnOE5qNTlFOXNXWE13MUJVRmVXL0U2aS9ZYXA4cHA2cE9ibS92VGFEUjYvNnBWcTBxa2xCbldSOWtMZUtTVUxpbWxabC8vVmd4TjJONU1KQklSNFdBejFRMGhvcVlnbytnTVJvNFl6QmtGR2VqTk5SdzRjSUNLaWdwMjd0ekpSeDk5UkRBWTdHSVdtNitJdkZ3Z3NJWUYwMlpSdm5BaGViVnJXTFZxSFZzclAyQnlTUzNyeWdGdkdhTk9ZTElrRUFpMHNkU2NMVksyb0RuSGQ5dXVwMVdmMWlickdRd0dKL2g4dnZ1RUVKY3EyZWprWkJpcytMOERCSUFOeTEraWRIbnJUUnVXLzRVSis3L0NxNWQ1cWRWZDVCWGtVT1J4VVRSNEdOZVViR05oUlMwYnFtRmlmZ3VWWVFOZlhqZEtzc0JYMEorWnc3SjVxVHJJNXAwdGNNN2dVK1owZWIzZTJWT21UQ25kdTNmdk0yZWNjY1o3VnR6TlRpd0lJWVJobXFacEwzaHVHM2R6aVc3ZE1tVkxNRUs0ZWpjYmF6OGh0N0F2WldjT1lxakRYYldQczg4K3U4dE1CM0hqbThnOTg2OWs2NEkxN0NrdnB5cGF3cDFQTHNYLzBBSit0KzUzTEk1NUtUenJVdTZZdDVCYlRsQlRVWE56YzFMVTdHYjIrdnI2ZHU3bllUS2Z5WGhhTkJyOWh0dnR2aDgxL0xGcmtObVRzalA3Y0tFajVGRmJlWWh0ZnBQYzRtTEdueUZZcy94bDVtMkZjVE8reHZJSk9SQnE0SU1HQUMrRm1WQzUvblV1L1o5R2NzZGN6RnUzOWllUE1PWFZZVUFqTDgvYjZYcEdqNE5yZXNtQUFRTUdORFEwUEpXZm4vK0s1WnFLRk5jVVo5ek5Gam1QSjFOMEwrd21QZWdFQTM2YWF6L2hnOW9xYXVPWGNxSFYyZURzVVQzNzdMUHAxcTFiMTRpeGxVMS9rclhUbmQ4ZXo1M1B2c3FkSitFRk5UVTFmV3BSY3lRSnRGdHV1Y1cxZVBIaUgyaWE5aUNuMlc2SExrM0JjQ1pmZXluT3JNNzYzLytabWVzakRMdGtJbytlbDBtdHB5K0ZXL2V6WWZuTFRIb3ZIMTkxTGR2OGtIdm1FS2IyZ2hMUEVNYXRXYytHVGV1WVZGMUVtZDdNaG1vVDh2b3hjMWdtRkE4OTVVNmJFS0tzUjQ4ZXZ3eUZRbjNHangrLzVLT1BQdEljMXB0dWlWa3k3aGFQeDl0a1RLWFhLM01LZWxQWUcyTEJJTzVvTTQyTnliS1JOc2ZaWjUvZDZVZU9kNm9QZkdOajR4RkZMWjM3bVpva09IVG9VTCtDZ29MN2hSQ3psVkowTVlxSEp1YXVIWWFpTDB4a09adFlzR1l2NjNkVlEyWWU0eTRZd2Z5ckJ5VW1GUlFNNGRsN1hTeGFzWVUxZTZ2WlFBWm5EVHVMTzZhUFlXbzNvR0RncVhyMjNKbVptZlBlZSsrOTR0ZGZmLzAzbDE5K2VhVnR1Vm5XVzl5K1k3cWtRdUtMajh6Y0FqSmxDODNONllYTkZyZk8zRi9hYVFaTk9rWE56bjdhb3VhTXFhV3gxT3pXS00wMFRSRUlCTDZRbVpuNWdKcVoxb1hac0xSTjk4RnhwY2NBR0RmcmMzbm9veDAwZVNJd0RHUDF6cDA3Rnc4Yk5td0xFTFd5cGpxUVhBK29hWm9VUXBqV2RGNXA3VlNRenBIajlrVGU3dDI3VTFCUVFLOWV2WklES3p1enVIVUtpODNwZnFhSzJ1SGNUNnZmTStsK2hzUGh5N3hlNzRPb3liWmRtek12Z28wdmZINlBmUnJnY3JtbURCMDZ0S0N5c3ZMcGtwS1N0NnhFZ20yNUlZVEFtVlN3ZzI2dGxsc3lGc2ZoakovaHc0ZDNTcmYwcEF1Yk0xSGdGTFhHeHNhMEV6cFMzTStrcUVXajBSbHV0L3RCNEV5bERGMmMvSUdKS1J6SGU4SkhKNS9zOFRuRTNjYjI2ZE1udjY2dTdxbkN3c0svU1NtZFNRVWRSMUxCSVdEU2NsM2JxVms2Z1JOQ01IejQ4RTZYVURpcHd1WXM2WERHMUd4Uk81ejc2UlMxV0N4Mmg4dmxlb2lUMXZDbE9PNk11QnI4aDQ3ZlRMWWVBeEtQZVpvaGhCaFVVRkR3VUZOVFUwNzM3dDMveTJHNXRRbEYyZUlXajhmVGlsdEhvbVlmSTBhTTZGU2xJQ2ROMklMQllJZUpnalIxYXNLNTQ5TXBhcnF1ejlVMDdTRWdRNm5CS2NhNFdjZG5pbTZQQVREbSt0UDVUQloxNjladGZrdExTM1pPVHM3dm5XNnBVN1RTaVp1ZFhFZ1Z0RlJoMHpTTkVTTkdrSjJkM1NsK1llMWtQS216VGVvb3NwL0N1VUhLanFrOS9mVFRIbDNYZjZocDJrSWxhcWNvN2d6NDBoMEpGL0t6dUovalpwMXl0V3VmZ296czdPd0hRcUhRN1ZkZWVXVzJvMVBCQTdpdFRnV1hhWnJDTUF6aDZGSWdHbzBLKy9NWURBYngrLzAwTlRWUlgxL1BvVU9IcUt5c3BMeThuSTgvL3BoSUpOSXBmbG5Yd3c4L2ZFS2ZVTmQxL3YzdmY3Y1pQZVMwMUZKaWFzTGV5RzRuQ3FTVTR0MTMzODM1eWxlKzhpTk4wMzZnUHYybkFjVkRFN0d4VUpQVlMzcVVWdG81VjUvUUtSNVNTdngrZjZldThmSjRQT2RObXpZTmw4dTFkZDI2ZGZFT3BuZklOSWtEa2VxU09wcnMyeHhGUlVXNFhLN1RSOWlrbEd6WnNxV05xS1hiSkpVNmRzZ3BhanQyN09neGRPalFIMnFhOWwzMWlUK055T3dPSmFNU0l1ZkxTVGhLbmd5SVdUMk11Y1dRWFpnUXNpR1RvUFNDeE0rY1FMcUNzQUc0M2U2eDU1OS92aWd1THQ3K3Q3LzlUWGRtUmpzU042Y0FPdXZaVWdYTy9scGNYSHhTUng2ZDBCaGJSNzJmVHZlem81SU9LYVVvTHk4djZOKy8vNE5DaUx2VkovMDBKYmRYNGxBTmNwOEpuODkzKzIyMzNhWjV2ZDRsdDk5K2V5MjB4czRjVnBsaEdJYnRhYlZKS0RqamE4NDRtOHZsd3Q1YVAzejQ4Rk5mMk96SnR4Mk5IanBNOFczU1VsT2lwbEFjVjNHNzdhYWJiaUlhalQ0M1o4NmNCcWRsbGs3Y2NHUkxPeEsyVkhFN1daTjRUNGdyV2w1ZW50d21kZkRnd1E3SGVhY3I2YkJqYXBiN09VZGRqb3JPU2xkeFJWUGMwakVqUjQ2VVFvaC92L25tbTRabGpiVnpTMVBFcmwyOHpYa09uTzZweStVaVB6Ly8xTFBZOXUvZmY5UXh0WFIxYWs4Ly9iUm41TWlSRDJxYWRvLzY2Q2dVeDUrTWpJemJIM2pnZ2ZpbVRadWVYYjE2TmVrc045TTBEV2d0QmJIS1JlVGgzRkdYeTRYVnBuWEN0MTk5cnNKV1hWMmRYSkdYdW5qbGNERTFaNTNhN05tekg5UTA3ZnZxOGxNb1BqOHlNek8vdFdMRmlsaDJkdlp2YlVGemlKdkVXdEpzK2FiSm1Kc1FRanJkVU9kaHU2TzJ1SjNJdmFXZm03RFpHOXFkN21kSDQ3eFRZMm9weGJjUHFzdE9vZmo4eWNySytrNGdFSWprNXViK2tiWlpVcGxheEd0L1h5U1FIY1haYkt2TkZyY1QxVFQvdVFoYk9CeHVJMnIyNHBYbTV1YkR1cC9XS085a201VFZVYUJRS0U0UU9UazUzMmxzYkF6MTZORmpwV1cxU1ZKaWJKYTRPUzAySVlTUXRxZzVCYzYyMkd4aE8rZWNjOGpNek94NndpYWxaTWVPSGUxMkZLUmFhdFkyS2VjU1kreUZLOUZvZEliVis2azZDaFNLRTB0RzkrN2Q1MVJYVndlTGk0di9MaFA5VjIwKzMvWlhlMkNsWmEyMXNkeWNGcHZUSmZYNWZJd2NPZkp6cjNFNzdzTG1GTFhVN0tlOTk3T2p5YmVtYVlwd09IeVpOYVZETmJRckZDZUhvcUtpb3J2Mjd0M3JQK09NTS82Wllyblo4VGE3OUFPSG9BbE4wMlJIY1RaYjJESXlNajczTXBEakttd1ZGUlhzMmJPSHFxcXFwS1dXNm40NnVncElLZXZRQW9IQUY2eDVhbXIwa0VKeEVoRkNET3Jmdi8vdG16ZHZiaG85ZXZUSGx1V1duTnNtaEdoanRaR1NJVTJOczduZGJ0eHVOMTZ2RjYvWFMwWkdCZ01IRHV6OHdsWmRYWjBVdGVycTZxU28yZjJmRHZlelRhdVVjNXgzWm1ibUE2Z2hrUXBGcDBEVHRDK09HREZpOXNxVkt4K2RObTFhbFVQY3BHTjJHNlpwbW5hbU5KM1Zac2ZhbkJsU2UwTHY1NVVwUFM3Q0ZnZ0VrcE02cXF1cjJ6UzFPMk5xNmNvNnBKVGlsbHR1Y1ZrN0N0UTRiNFdpRStGeXVTNi80b29yYW9jT0hmclk5dTNielJSeHN6T24wdDRxYjR1Yk01bGdXMnoyVjYvWG0zUkpzN0t5UHBjNWJwOVoyS1NVN1ZxbG5KWmF1cWIyMUF6bzRzV0xmNkFXcnlnVW5ST3YxM3ZqdSsrK1c1T2JtL3Q3UzlETUZIR1RxWmxTVGRQYVdHN3BTajk4UGgrWm1abU1HalhxdUNjVFByT3c3ZHk1azMzNzlpWExPbzVtVFY1S0J2UWJxbFpOb2VqYzVPVGszRk5kWFgyb3VMajQ3NENaeGkxdEUzT3p5ajZTNG5hNFdGdFdWaFpEaGd6cFBNSldXVm5acmxhdGcxWXAwbVZBZzhIZ0JHdVpzZHI3cVZCMGJ0eEZSVVYzYk4yNjlkQ3dZY1BldDZ3ejIwcHJseW1OeCtPeW80TGRkTEcyN094c1NrcU8zMGIyVHkwb1RVMU5hV3ZWT2hBMWtiS2xYVHR3NEVBZm44OTNIMm9BalVMUkpSQkNsQTBlUFBpV0YxOTg4Y0FOTjl4d3dPR1NKaTI0bFBxMnBFdWFUdGljNHBhVmxVVk9UczV4R3lEZy9qVDdHdzNUWk0rL3QxSzVldy9WKzZ0b09GUkRjMzA5Z2FabVF2NEFrV0NJU0NoRU5CSkJqOFNFcnNlSTYzRmhHcWFRTWlGc1BUM2hlYUpwMzZYcWNsR2NuRStwQmk0UGFKN0V3RXB2dGpvblI0SEw1YnA0MnJScEZjQlR0TWJiVE5Ja0UxTEZ6WmxJY0xxa3prVEN5SkVqajh2MDNVOWxzWlh2L1lUS3FvTlUxOVRSME5CSXM5OVBTMHVRVUNoTU9CSWhFbzBTamNYUVk3clE0M0hpY1NNeE5saEtJU1ZhckhyMzdVS0l1OVJsb2pocFNCUGlVU0FLc1JZSU5VSkdMbVRrMmQ2VW9nTXlNakp1cnErdnJ5Z29LUGdyWUhTVVRCQkNTRHZlbG1xNU9kMVJwN0RsNU9Rd2VQRGdFeTlzQjZ0cjJGZFp4YUhxV3VvYkdtbHE5aE1JdEJBTWhRaUZJMFFpVWFMUkdIcE1KeUZxY1JJeE5TbWtsQ0pZdGUxQ2w4dDFuN284RkoxTDZBd0lONEVlaHB5ZUNZdE8wU0g1K2ZsM2JOMjZ0Y0tLdDVrcGg1UlN5b1MyQ2VMeGVESTdHbzFHNlVqY01qTXprK1Vmdlh2M1BuSENGZ3FGK1dSL0pRY1AxVkJiWDA5alV6TW9NaklCQUFBZ0FFbEVRVlQrUUFzdFNWR0xFSTNGaU9reDlIaGM2UEU0aHRFNmdtajdodi90N3ZQNTVnSjkxS1doNkpURW8rQS9tQkEzbCtkemY3cDE2OVoxbWwvOW9vc3VPcGE3OXdadUF2YVNpTEcxRVRaQVdpVmRwbUVZeE9OeEdZdkZSRFFhbGZhMnE1YVdsdVMycStycWFxcXFxcWlvcUdEbnpwMlVsWldSa2ZIcFc4V1BTZGoyN3R0UDFjRnFhdXRzVVF2UUVuUllhckVZc1ppT3JzZUZyc2N4REJORFdpNG9pTEl6Qm54ZndHVDE2VkYwYXN3NGhPb1R1eFZPQUdWbmZyYSt5ZkpkMndIdzlmM2lwMzZNYU5XN0FGU2QrZVN4L05nbFlUTzJiVkQ1OTM5TFlxdThnWjFJQUNrUVVrZ3BNRTFKWEVMVWdHQmNhQ0ltTldKb0lvSkxoSENKSUc2WEg3ZXJDWStuRG8vM0VBY1haWEhHR1dkdzVtMGZmYXJmNTZqdDdmMVZCNmlzT2toTmJSMzFqVTAwK3dNRVdvS0V3bUVpNFVSY0xSYUxFZE4xZEQxTzNEQXdERk5JTXhGWGl4emNPVTNUdEhucVU2UG9NcGJiMGE3Nk80M0oxTHpmZW5mZ2p5ZVFtTVRqQTd5V3dlU1NTSmNFVFNLRmlSUUdramdtT2dZeDRrUmxuSWpVQ2Nzb1FUTkt3QXpUYUFTcGkvdXByYTJscHFibVU3K3VveEsyUUVzTCt5c1BjS2ltbHZyNlJwcWIvUVJhV2hMSkFxZW9XZFphc2w3TnlvQlc3M2l2bjhmai9wNjZEQlJkaW5CeklzbWdPTHhQNnVrKzY5bWlXYjA3RURkTmdtWTZ4RTJYcGtpS0d6b1JxUk9TVVZyTUNINGpUR004bUhSUFc0eFB0NEQ1cUZ6UlQvWlZjYUM2aHJyNkJocWJFM0cxWURCTXlKRUJqU1dTQmJhb1lab1NLYVdRU0swZ3Y4ZDNnUytvUytBVTh0YWFZd1NlMjBIa1g5VVlWYUV1OFpwZGZiUEpPSzhudWQ4Y2d0Yk5leFEvSVJON1MzMjVKKzAxZi9MWEozbUdhL241MWIxUDl0bkQ5L09iS0xpaWpzWXhMeE9PdGQ0aUVLTXZ6UnZ4ZFdyNXRlMlNTakNFTTVrQTBrUktBeE1CYU5JUUxpR2tTMnE0aFlaYnV2Q1lVYnpDamM5d296VTNrNW1aU2FVZVlhanIyRVB5UjdUWTlsY2RwT3JnSVdycjZtbXdrZ1dKREtpenNWMXY2NEphR2RDRUM3cHJ1aXJ0T1BYd1AvRXh3UlY3dTR5b0FSaFZRWUlyOXVKLzR1T2oveUU5ck43c284Q25lVzUrYitCUEpqZ3NOaS9nQWR3U3FRR2FCR0ZDV3BjMEtuWENVcmRjMGdoK3Y1K21waVlPNlUwYzBCdVByOFVXRElhb1BIQ1E2dG82R2hxYWt2VnF3WkF0YWpHaWxxakY0M0VSTjZ3c3FPV0NWbjY4dnBmSDQvNk9ldHRQUFNML3F1bXlyejI2cWY3bzd4eVBkc25mc2ZvZmovRFMzbUlLM0g1YUdnTzRoMDFrY0dBTGU1cjhOSWVMR2YrTm16aTM2UGhtZlh0NXV0MEVmSnpPYXBOSUNVS2FTRk1BQmxMR3BTazBZVWczY2FKb3VIRVJsaTY4cGhzUkROTGMzRXl0SGlWSHk2QzdLNHNzelhkOExMWkV2VnBOc2w3TkZyVkVFVzRzVVlTYkdCaHB1YUFtcGpSdEYxUVVGeFhkQzR4Uk1uQnFJUU02WmtPMHk3NStvemFNR2RDUDhwZnR1akcyZU9HWCtPcnM3M0xydHk4blkrTmE2cys5Z3h2dWVKQ1pZLzI4dmE3aXVEK2ZRSXdDcGx0V213L3dTaXZXWm1tTklHRzFZVnR0Y1dtSUdBWXhhUkNWT2hFWkl5U2poRUloV2xwYWFJd0hxWTM3cVlvMUhCOVg5RkIxTFFjT1ZWTmIxNUFvN1docG9TVVlJaHdKRTdXS2NHTkphODJ3dXd2c0xLZ0lIZGd4V2RPRXN0Wk9RVVN1cDJ2L0FvWkU2K3Evd3hIeGtKMmJtMWdha3BsUGRrNHgvZnNsZnVlYzNFemlrYy9OeGY3bUgvLzR4M1BUdUtSMmxsU2taa25qR09qRWlVa3JVMnJxUkNJUlFxRVFUVWFJK25pQVEzb3pOYnIvc3dtYkhvOWJMbWc5RFZacHh5ZnZyT0t2ZjkvQTN1WW9rVmcwVVlTcjY4U2pBZEhVN0Nlc3QzWVh6SnB4amN2bjlkNmI3ckUzLy9SNlNzKzdseGNQcE54UTl6SXp6cHZHUSsrbGNSMys3eWVNdldrWjVVcFRUaU95eVBqMUxmVForVFd5Q3gwWDdJVHp5Rjk5QzcxMzNrM3ZkNjZueHpmN3Q3bUlqM1M3NHZPblQ1OCtNd2VJN2hrT3E4MWpoYjAwYWNYYVpFTFlFdUxXSmtzYUowSkMyTUxoY0tJRUpCNmlMaDdnb041SVhCcWZYdGlTcFIwTmpUVDUvYlFFZzBSMEEwdy9GZVhWaEdLNm5RVWxiaVJNZGRsYWlLczk5L2pQN3dhKzNPR3p4ajVrMGE5ZXAvYW9YbUlMYTFaOVFNblVTeWhUMTh6cFl4Vk9ta0MzUzFNYTAwdkhrUC8wQ0Z3Yi8wbjlWWCtrN3BkMXVPKytuTzVmeXpxNjJ4VW5CRTNUSnE0KzR3ZFRIVmFicDFYY3BJdWt1TFc2cERwRzRwQnhZbEluR28wU2lVUUlHaEg4Um9qR2VJdmxralorT21GcjlnYzRjS2c2VWRyUjFKem9BdzJHaU1STnBBRFpjcENxeG9qZEJ5cmloa3k0MTFJS3BCUU41UjhNZHJsY2N3NzdyRG5aOE1aL3N1aWZMVWQraFhWdjg5SjdnNWg1VVM5MXhad3U1UFluNzRFQkdLOVZZanBDZWU1SlorS3AzVW56STl1SmJXOUUvKzgzYWRuZ3dqZXA3MUhkcmpoeGRITmwzZlRINHR2N09jV050clZ0d2xuYjVyVGFZc1NKeFdKRW8xRkNNa2FMR2FIWkNGRWZiNkU2M2tUQUNCKzdzRlVkU0hRWE5EUTJPVnFtd3NUaUpyaTdrWjhoQ2RmWEVkVGoxdURJNUtRU0laRmFYcDc0MXVabFB5bVpObmt5cFdNbU0vYWFlU3o2Wjl2QW4zZmdWZHd6R1Y3NjZYTnNQa0lNdXZhTnY3UDVDNWN6dWZCdzRyZVB6VnYyNFZmWFV5Y1RxQjU0Si9URjdTd0RHM3NSUmUvZFFON1lqa2JUdVBEY1BZSE11azAwLzNmYlVwTDQwdi9pME9WdkVZdWwvSWpQZFZTM2QwVUdYRDNuVTlXd0ZWODJqMXN2c3djM25zbVZjKy9tSEd0UHNmdWNPL251Tjg0NXhrYzBpUDdnZVE2TWFGdkRkaGo2bnA4eitHcFNFd2xDdUt4RFF4TkpxODFJSkJLSVc0a0VYZGVKeFdLRVpZeVFHU1ZnUkdpS0I2azdveS9oMzF4RXo5ZHZTaDVGLzNGbXUza3NiY285cW12ck9GUlRTNTA5dGNOcW1RcEhvc1RpRWt4QlpsRTNYQWVhOERlN1JKYTN0UThVaVFnZjJINUozYXI1ZDh4Nk5zWU5QMXZDczROaDYvS2ZNK2YreHpocjFVS21KaS93ZkNaLzc5dHN1T2JuUFBUY1ZieDZkMGV6SmcveHlpdjdHRDlyTEhuMnR3Njh6WUtmTG1OenJEL1gzUDF0SmdlZVk4N1NGc3A2dDdENXFWRTgrdFJNaHZtVXBweHd2SVZrL2VKaXNrdmp4RmYraytZTlJYVDd5Wm13SjRycmdiRkV2dk15TGRzTnFOcEg1TlVvK3A0T1lpVkR4OUo5R29SdS9RQzlhRkpLQ01OQU9nVFFOV0VjT2VPaVJPN2JkM1MzbnlZYzJGZkJDOC8reHhIdk4rbUtyL0hGOHk4NnFzZjBYVFNRZ3VlbUFoQmF1WTJtSDZ3OThzOW9ucHZlNlBmQU94ZnQvK2ttSUc0ZGlYNVNwQW5DTkVHQXhBQnBJSVdPSVYzRUVaYXdSV1Nja0JuREp5SmtHbDZhbTNiUXdCZW85NFNURzY1aWRhT1E3T3BZMkE0Y1RHUkJtNXFhQ2JRa0NuSERZYXNJMTVCSWFhRExESEo5UWpSR3drUTBqOUJNS1VpOE9NM3I5ZDZWZDk2M1diazhuN0krT1FCTW5IRTV3NVl0NDRNS21EckM4V1NGbHpELzdwZVo5S3ZIZVA2YXA3a2xYU0g0M3RkNTZlQW81cDJmay96VytxWEw0UGJIV2RsN0s0c2V1SXNadWRONTlybXJLQVBXLy9SZVh0bzVrMkVqbE02YzhMakt0UFBKcW4yVDJ2dGlaUHppTW9xdTkrUC8xbjhUM2dQaWExZFJjRVVQV3JiWFFkVWVBai9hMDhHajlDRDdKeU1Rci82ZHdJY0dUT3JBb252Z2VncG41Q044Y2VJci8wSHozMExIY1B1cFQ1LytBN24va1NlTzYyTkczNmpnd09Dbmp2bm5TbjA5cndIK0RlaUFMcVdNQzd2T1RhS1I2RXJBQk9LWVVwTkN4SVVoUlR5ZXNOcGtuQWh1UW1iQ0pXMm9yR0hIZFM4UXp5aG1lR2EvSTd1aSs2dGFYZEJtZjhJRlRmU0JKa1lSNllZRWFSQ1B4OEhud3lVa2hoN0hxdkxSN3YvYnJ1dUZFRmY2Q25Pby9jZGpUTHZ5U29hZU41blN5LzZERGJFWTZUek9rdW5mNXA2QnUzbmlwMytuTXMzdFcxZjlIZjlGVnpIZVlZSDV2RkM1WXg5YmQrNm1QT29sTDdDUHlnQkFDLzVBNG5iRmlVZjY0NGlpSG5oSEZlUHJDMmJNaDZjdzhXWm9lUzVrNE1qWkxOZjFFOGp0K3duK1grNXpXRjd0WFNMOXViOVJlKzFmYVBqaEx1U2tTZlM0cWNjeDNLNDRrYmlFZHRtbWdUKzV3T0dTZWxwcjI1SWRDWmhPbDVURTlGMWQxNU5kQ1JFWlMzUWxHR0dhakNCMWV1Q3dIUWx1Z0ppdWM2aTZwdFVGRGJaT3c3WHIxZUptUXRpTWVGekVEWUhISllRUk40VmhDbTFvWHFGTGM3bnZCQ2hmOWhDelh1ckZ3bC85bnFsRDh2RUYvczZNeWM5MThQU0R1T1dCcTNocDFuTXNlbU42cXF5eDdCOHhKdjlzRkU3UGN2VGRQK0RLNTVieHU0cEIzUHlySll5dWY1bTUzNzZMeGJRUUhUaUxKNGVvaStta0NOdmYzc0JmZEQ3Wk0rTEVubnFWNW0wOXlQdVBhUlRsdVlCcUFuY2RJWnZsTFNiN213UFFpcURIUDB1dHYySnVCTkR0Lys0a2ErbC9VZnVyT2l1bTJraThEdUxiNnpEUDZrdkJ0S0c0WC9nWDhXVE05UWkzSzA0b1BUM2RyaDJoOWY3WEZ2T2dibGx1VHBkVWdwQVNhVnJpSnVQU0ZDSWVseTZYQ3gwelVRSWlkY0ptakJZalFyTVdwc0Zvb1VadnBzaWRoMGU0MGd2YkFhc1h0TEdweVdwd1Q4eFlpOW9ON3JwTzNBQ2thWThqd2hRdU5CRVhwcFRDazkvdm04QTRhR0h6UDNlVE4rYWJUQitTbjNpR1FBdUh5dy80UnN4aS9wV3ZjL05UeThpTmVaTWxIZEgzWG1hTjd4S1dwcnFWdnY1TXZmc0hURTI2dEZmeDVBdFhFWTJDVDhYV1RpSWhvaStzSmZxQy9mOEEvaHYzZ2RjRnNhT29QWXJWMFRKN09TR254VDNxZkFwL2trWHcxcldFOS9qeFBuQTkzVXUzMFREN3c2Ukl5U2lKbkJzdXZBOWNlNWpiRlNjdFRJSDQ0cklCZDA4ZXNmZUJWVW1YRkd5WDFHcTVRaVJNcDBUNWg1WVlUb2t1VFhSY1JORUp5eGcrMDBPTEViRUtkMXM0cERmUnoxdlEvam5Ea1FpSGFscG5yTFVFZzRuQmtkRldhMDNYZGVKU0lqR0ZFVTh1T2haQ0NIRk5XZSs4RmlHK21YaTRITW9HNWxQM3IyVTgvOC9kYkgzdjd6eDAvMUkraUVHMFEzWExZZUxkMytaU2dnUmFyM0xXdmJTUm9pc3ZaOWhSbmp3bGFwMlVWRkhyVzBydXo4L0RWOWpleFRUMzFCSGY3ampxb2hDTkpyNWZGMFBmV0ljWU40YThiNWJpTHUyQlo5Slk4cTdJSXY3V25rVDErbUZ2VjV4TWVyaXpyNzA3NTh1NXBEVElKMXhScWFWMkpCaUdJUXpEd0ZrQ2ttaVVqeEUwSXdTczhVYTF1cCtJMmI0OVRtdFhzNVpjbmRjcWFyb2V4N0NHajVpbWFTMW1RVWlFZUd6dTJObGVXdlZuOU8wLzVLRVJoM2ppZTdjeDdZRVYrQytieGN6aE9VVHJEMU96Vm5nSjgrOGUyZnFITmZBMkwvMnpGOWRjMWw5ZEVhY2FmZnVUT2FrVVg5OWpMOEdRYS8rUCtoL3VRWHh0RWtWLy93YUZQeTVGdnJxV3hsOVdIOVh0aXBPSFFBeTlzK2VsbDlLMmFMZE5INmxkdEdzbWhBM0RTSlIvNk5MdUpVMklXOGgyU1kwUTlVWUwxWHBUKytmNzV6OWVZbGQ1UmJzRkxmNFd5eVZ0M1R3bG90SEVMb080WVFocFNtM3Jodi9OSDF4MnhqdHduSnNDRHJ6TjgvL01ZZXIwVVJTcGE2SlRjbURjeTEzNjlmZlpjTlV4bUJzRGp1cHVobUZRV1ZuSmdBRURqdnFodS9ET2d3NTU0NDAzMHY5aGtuTFBILzd3aHp1ZWYvNzVPaUFJaElDd0VDSm11YWlHRU1LMHRsbEphOUdMdExkWTJjdGVjbkp5Nk5hdEcvbjUrUlFYRjFOU1VzS2dRWVBhN0VodzE5VzNyMW16VnVjbHJEVnIwMVE4Ym1CWTFwcVVDWFV0R3pqZ2x1TXVhZ0I5THVDVzZVbzhGS2MrRXlkTzdEU3ZwWFV0Nk9kRzZhaFJveVk5Ly96eksrMVlteEJDeHlyL0VFS1lRb2prbWo3bjNsRjdXM3hPVGc1NWVYbms1K2RUVkZSRTc5Njk2ZCsvUDRNR0RhS3NyRldLTkhzcFN6RG9xRm16ZHhmWW9tYjV1NlpwQ3ROcW5kcjBmNnR5WFM3dEZuVnBLaFNLbzZWYnQyN1h6SjA3TnpmcGprcnBzZHpScEV1YVdOZHBDbXU3bGJCTFB4THJCeEt0VnZhbUs3L2ZUMk5qSXpVMU5ZUkNyZldLbWoxbkxSUU90NDc1dHVKcXVwNFV0bmJXMm9oaFEyWUJnOVJiZFhyaTZwVjFlcngyemFYZTdPT0lFS0xzdnZ2dXU1ajJTUVNYbEZKTFRONld3alJOTEdGTDFyVFo0bVkzeU5zejIrd1Zmb2NPSFdwOTJ4SWRCZ2tYTkdLTitVNjRvRHB4bzYyMUppMXI3Y2F2WCsxeXVWdzNxYmZwOU1VM3BxRHJ2dll2RkI2RENxcGFrZU5OZm43K1YwdExTNzFwckRiTnR0b3NjV3RudGRuaVpvODFDZ2FEQkFJQkdoc2JxYTJ0SlJKSkxIL1JuTmFhTXd0cUQ0ODBEQVBUTUszbExBbHJiY21UaTI0RVZPUFNhVXplUFdlVGRYVi9YSDJ6dTQ2bDFqZUw3T2xua0RkbjJOSC9rQ2RUdmRuSDMybzcrKzIzMzU1d05GYmI0U3czcDlYVzNOemN4bXB6Si9ZWFJOUEcxaEsxSkNhR1phMVpGcHZtZHJ0dlZHL1A2WTNXelV2MyswZWQ0cDlBRGJ3NTZzMytIQ2d1THI0Q2VOTVN0cGlVMGkyRWNKTklKR2d5Z2JES1BxUmhHQ0llajh2VVdGc2tFbWxqdGRYVjFWRlNVb0xiS3VXd2Q0SW1sVEZ1MVpFWXBvRXBKVkpLSklqUXdSMVRnQXZVVzZNNDVjbnNCa0o4L3M5akduQm9LN1RVbkRaYnNUUTRiK2VyaTBjTnZ1S09qWmJGNWtGS0hZRkxTZ3dTaGhTbU5ER2tnU0YxNG1hVXVCRW1IZytpeHdQRVlrMUVvZzJFSXpXMGhBL1FIUHlFK3BiZEhQTC9PeUZzeVdMY3VHMnRHUmkyRzJwS3BKbFl6Z0pTZUQyZUdlcUtWNXp5dUgzZ3kvdjhueWZVQ0pXYlFRK2RkcWQ0WU4vaVNjQUhTYXNOUEVJU1IwZ1hDRk1paFpSZ1Npa053OFF3VE9LR2lXNFk2THBCVEk4VDFYWENrU2pCY0pSQU1FeFRvSVc2eG1hMGFDVGhndXB4dlcwVzFISkRyYVFCVWlLYTltNFpJWVM0VmwzMWlsUGJuSEJCVHM4VDgxd3ROYWVscUFGNDNPNnIvdmUzQy9zbExiWkVuQzFsTndLWVVnb2pFV3NUY1NNUis5ZU5PSG84VGl5bUU0MVo0aFlLMHh3STBkQVVRSE9XZHlRTGNXMFgxRFFUYm1qQ1d0T3lzN091VTFlOTRwUzMxUEo2SitKcko0TG1BNmYxNlI0N1lzaUZwR3l6UWxvWlVva21wUlNtbEppbXhMQVRDYmE0eFExaThUalJtRTRrR2lNWWlSSUlobWdNQk5HU1RlNU9VVXRhYTNiQ0FMSHFUNy9MMERSTkNadmkxRVM0d0pzTnViMFMvejVSbk9hYjVuT3lNcTZZT1dWQ2htMjFTVnZjRXJQYUJJbVpSaUpodFVrTXd4UUpsOVNhL3FISGllbHhJcGJWMWhLTzRBOEUwZXdzcUc2NW9IYlNJR210V1NVZWt5NjY0RnFnbi9vRUtFNE5JZE1TMXBrM0I3SUxvWHNKYmZiOG5TaTY4RUxtNDBUSm8zTnZIWmZHSFhWSjBLUzBoWTJrMVJZM1RPSnhFOTIyMnZSV3F5MFVqaElJaFhIcnVJbmp4c0JGWEFvTUtZUWhCWVlsYUpacWF1N0MwdWtuSkVPa1VDaE9LM29XZEw4RWVOdGh0Ym1GeElXUVd1SXZrSlJTSWd3cE1Vd3BEZE1RY2NPUXR1V214MU9zdGxBRXJkVU5qU2RIaFNSYXA2UjlpTWJHeHVGQ2lNdlVXNkJRZEQyaWIvNkdvWGU4ek5aTyt2cmNMdGNsYTVjc1NFMGl1Q3lyTFRuT1NKclNLdGcxTGN1dE5kWm1KeElTVmxzRWQ3SnV6UkkyTTlrVG1oQTFRT1RrNUh4TlhSNEt4UW1rOGpXdXVQTVZ0clYrL01udE9aREowNmN4ZjBvSmh5MUVhZHpGaS8vclovejBNU2R3eWZndUhycnhLWmFsamtiem5NdmlsYk9ZZklTZi91THd3ZU9BVDFLc05oMkJoaVJSK2lHUXBta2xFcXpTRHp0ODFqYldGbXNWdHRha2dUWEZ3elJ0TjFSb21uYTF1dElVaWhPTVp4QUxmanVIRzNvQTZGUnVXczJjUjU5aWJ2YVBlUGJDd3pUeU4yN2pkOHVxeUx0OERHVW50SEhDemFVUFBzYXo0NC85SjNPek15Y0IvMDNiT0pzYlpOeXFraGFtRldzelRGTWFpVDVTbVlpM0dlaEdhNnd0SEkyaHBicWc5b0hWaUJvTUJpOEJocW1yVEtFNHFTcEh5WmdwM0R4RVovT1dHaXIvNTFkdDNjdnFONWcyN1JmODhyK2VZZXdEYjdCSDM4WGMyUTh6ZDVOMXUxN05TNC8vaWduVDVqRDArb1hNV1Z1ZDNFVVNyZHpFUS9jL3pNaHAzMlhvamIvZzloVzdxTFZ1Vy8vNGc0ejkwWitaZS84dm1IVGpmWXk4NHhtZTMzNk1kWGV4U3A2WjgxMnVXRnFaZU03R1RkeCsvWVBjL3FhMTRyejZJeFkrOE1qUVFmMzZEYlVFcmRVZGxiaE1LVFhEbENKdW1DSnFtQmlteE5RakhLenpVeCt6eXovQzdQN3czN3k1UDhUdURXK2gyYUtXTHI0R0NKL1BkNVc2cUJTS2s0MU83ZlozV0xiRHc3QWgrWlJjT0k3Uk5SK3h5bHJSV3Z2K1Iyd3RPWmV2WFhzbkczOTZFYVdlTTNsMHljTThPc2I2OFpvcWFvZC9nMWRYL29xMXM0dFp2K1JsMXJRQXNRb1dMZndMVzRmY3dOcVZqL0hoenliaFc3MkVPYXZyazg5Y1Z4bm0wbnZ2WSswZkZySjBURDJMWG5nL0tYeEhoYmVFVys2OUNQNytaMTZzOUxQdU55dlpQUHdxRmw2WUI3RUtGdnpvUlRZUHVZN1gvL3I0ZWM0NG03UXlvNENtQ1NGY0FqQk5Jb2JFTUVGQ011YVdHSzBHcG1IUzgreHpFNjZvdy8zRWJuYTNEazBJY2FXNnFCU0trNkZsdTVuLy8rWXdQeGxqNjh2RTZiT1pQeWtQT0lkcmhxeGs4WnVWekN2Tlo5MzZLc291dks3am1GcmZjN2xqVWpGNVFONlljeWg3K2cxcWd4RGQ4VFlyZ2lONGR1YVppVEg4SldPWVAvMGRKcXgrbi9JcGx3SlFPT0pMVEM1T1dJMmpSNVRBK21vcUljM1kvaml2UFRLSFVzZDNMcnpuNXl5ZGxJV3ZkQXFQWHI2TkdRdWZKQzlZd3J3bngxRUVSTGU4d1lyZ0NKNmNlU2I5dkZ3Q0xFMjEyb1JJZENJZ2hLbUJRRXJNaFBVbFRNT1VpVGliaGlIQnRGeFNkNnExWnJ1aGdBaUh3MU9BdnVvS1V5aE9kb3d0bFR3bWZ2bE1Gcnk4amZMcCtieTJJNThyYnlzK1dxODI0WUxxRUcwTUVDMCtpeExIMkxtaW52bjRHcXM3dE1wOG55ckc1bUhZVnk5aTlNc3ZVdjdsNjVodS9VN1JSaitCcGdwdXYvNTlnRDREQnZRZjhja24rOTVyRzJkREJ3UVNJWVFRbWtDYTFoUnowelN0amdRd3BVd0ttNVlxYXBhbEJpQzhYdThVZFhVcEZKMlRvdkZqR1YzelBzdit2b1hOSmVPWVduTHNqK0hya1ltdnVwcktXT3YzYW1zYWlQWW9QczZMbEVLc1g3YWF6U1VEOEwyMW1oZXR4V0crbkR4eWUzNko1U3NmWS92S3g5aSs4aisrbUdxeFNkbmFpV0JLaVNHbE1HV3FLMm9tRnBTYWlkSVB6UkkwZTZpYnNNczhMRGRVQ1p0QzBWbkpPWXRyaGpmdzRyS1BLSmt3Z3FTdWVUUHhFYUt5NmNoQmZ0K0lpNWp1Zlo5Rnl5cW9CYUxWbTFpd29vclJVODQ5cnFVaTBTMnZNUGV0Zk9ZOU9JZEh2K3huMGVOdlV3bjRobzlsTWh0WnRLSUNQNUNoTjE2VVlxMGxWL1JKcEdaYW9tYUNFRWlpRVYzb1JweHd3RTlkSEtTWnFHdHpweVlOYkRjMEZBcGRyTnhRaGFJems4WEVTWVB3YmZCejVYakhxUGFTYzdqNTNIZDQ2TTRmcyszQmhUeDZ1SWZ3RG1UZWo3L09nbDh2WmRJMFA5SHNmQ1orZFRaUFR2azBvOS9ieDlqZ0xCYTlNSWtQZnIyQm9objNjVU94QjJaTVkvSTlMekIzOVZrc256S01oVCtleG9KZkwyWENNajlSYjE2ZnkyWitlOGcvbHYzbmh5VDdSbkZKbVJnWmpoQkNBeUdsa0Y2WElLcEhPVmdmdytWeTQ5TWtwbFgrSVhyMjdFazBHaFd4V0l4NFBDNU0wOVNrbEM1ZDEzK21hZHAzMU1XalVCd2RuMmF2S0IrditteVcwS1kvTW1sNUNjdC9lUkVscDhoNURJWWlTM0xHWHZzaTBBSUVnS0NBTUlLb1FPaENZR2hDbUc2WEpyMGVGejZ2UjJiNnZHVDZmR1JsK3NqT3pFQkx6WWFTcUYvVE5FMmJwQzVWaGFMekVtMnM0UGtWMnlqNThybW5qS2dCWkdYNnprdm5pbUxOYWNOdXM1SlNKRG9SVEd1RmdaSHNSTkJTaW5LUlVvcUdob1pocUdVdENrWG5aYy9MWEhIck03elU0eW9XVHNrN3BYNDFJY1RacTUvNVVlOE94RTFJaVVDQ0thMU1xTE9IMURyY3FRM3ZKSHBETDFKWGprTFJpU205aXJVclQ5M2ErVEZubnprTTJHOExtd1NYa0dnSTIyS1RRb0tVZHUrb2RkaGJyWkpaVVZwSEZBbVh5M1dodW5JVUNzWEpvbnRlemlqTFNrdE8ra2djc2xXcnBOMC9LcE9WSFlaMWFLa1cyL2UrOXoyWEVHS2lPclVLaGVKazRYRzd6aHQ1WnIrVWh2aGtuSzExbEJHV0t5cmJ1cU5haWh2S3d3OC9mQUhRVFoxYWhVSnhFdW4yL0NQZkxYVmFiVExSRkovWUZpL0JtcTZMdEVRdE9kTElhYkZaQ0ovUGQ1NDZwd3FGNG1SVFd0SnJTSHRYRkszVkhVMFlaYVoxR0xJMUVhbzV5enhJekY0N1g1MVNoVUp4c3NuSnpqekhZYkcxS2Z1dzlVcGFXVkpwN1Q4MlpHS3NrV1piYTFKS2NlMjExN3FFRU1waVV5Z1VKeDIzeS9XRkFiM3lYU2tXbThzU05FMUtCRmh4dGpidWFHdU1UUUJpeVpJbFh3UnkxQ2xWS0JTZHdXaGI5dWg5L1oyaUpxMTlvemhXOHlYaWJNNmFOb2ZGQnBDUmtmRUZkUzRWQ2tWbjRjd0JmZHNrRUdnYlp5TTF6aWFsaVNuTlZ1VWpVYjgyUnAxS2hVTFJXZWlXbXpXRWRzbUR0bkUySEhFMjAweTBXYmtkWTRxRUVPSmNkU29WQ2tWbndlTjJENmQ5akMzWkw0cXpuaTNwanJaYWJPemF0YXNuTUZpZFNvVkMwVmtRUWd6NjVmZG01WFFrYmlSVUxWblBacnVsZG94TjlPblRSelc5S3hTS1RzZWw1NS9ieHhJeWErQWtHaEpoVDlXVldKVWRWaGVDbEk3c2dzZmpVY0ttVUNnNkhYMkxDL283ckxSMnRXeFlJNHhhdXhBU3dvYVVVcmhjcnJQVktWUW9GSjJObkt6TU14eWkxa2JZckRoYndpT1ZDTXNWRlpyZEl5cUVVTUttVUNnNkhSNlBlMUNLcUxrY0ZodXQ0cFpJSU5pdUtOWWR6bEtuVUtGUWREWTBJWVk0ckxUMkpSOXBFZ2dhSUdwcWFnWnp1SFdCQ29WQ2NTU3FOekYzem9NTW5Yb2ZjOWJyeC9PUmZTc2Z2Ny9RS1dqU21zZEdzdVREVGlBNExMYWNuSnhCNmwxUktFNVgvTHg0L3k5WVZBbFV2OEcwNzc5QjVURS9oczZhRi83Q3VwNVhzZmFsWC9Ea2VFL2JtN2UveElRYmw3SW05dWxlNGREU2ZrV2tMZEsxT3hBU2dxYnJCdUc0WmJHNTNlNHk5ZVlxRktjcExidDRzM0VnRjVaQTdaWnRSSWNQK2hUTFljTFVOdXFVakJqVVpxdDhrdEtMZUhMZUZNWjdQOTFMTE95UlY1ekdIUlZ0RHlrTTB4UzZBVzRwcGRBMHJWUzl1d3JGNmNaVzV0NzZJdXVDWWVwaUhqYmYrQkhSWUlDb3Q1SUpOZGV4ZHQ0NWJlTlRzVXBlZlByUExGNWZSUzJaRER0M0NndnZ1b0JoT1pVODgvMW5lR0pIbk5pT1JZeGRQWlpuRjEvRGFPZlA3bGpMN1kvb1BQcW5iekQremQ4d2NobmNVQnBtM1k1cWFtT1pUTHpwTmg2ZFZJeXY4VzFtM1BvT2VSZG1Vcm05Z2RvbUtQdnlOQmJjT0tSUFcwc3RHVjhUSmxKb2dHN2F4bU0wNFlvS0lRYXFOMW1oT04wWXhxTy9mWVNWTS9veWF1WjMyZmlIT2R4Uk1vajV6enpDVzZtaVJvZzFqei9ERTQxamVIYkpZMnhmY2lmWEJGY3o2L0ZOMUZMQ25iKzhqL25EM1l5NmFSNGJVMFV0SFRVTk1HVVdhMy83Q0cvZE81RDFTMTVtVFV1cmE4endHMWk1K0dFMlBqT05vdlV2OHBNM1E3MHR5Nnk5dUFGU0NPRjJpY1FkM043RURVS0lBZXBOVmloT1IzUzI3Z2hRZGtZeHRGVHlRYXd2dzNxa2MxZTNzR3g5SnROdnVvaGhPVUJPQ1RmY05vNjg5OTloWGVPbmVOcWVaM0hOaU1UYXdMelNNeW1MTlZBYnRHOHM1c0l4QlFsaDdYRU9kMHpJWmVNN08wbzZFRFY3c1Fza0J4VkozTllOU3RnVWl0T015dFhQTUdOWkpmNm1NR3g1a0hXRXFRdDYySHhyQlRjLytEM3VkQWFvbXZ6VVVrQnBUNmM0OWFXRWo5alRDUFQ0REMvRXlqTkVkU0JOREs2b09BLytIZW1YWXJFSkNacEltYVpyeTV1MmE5ZXVZaUJEdmMwS3hlbEZ5WlE3ZWV1WmFZenYreVdXL3VFUlhwMTVKbWRkZFRjYmY1c2lhZ0RkOHlpaW5qMDFiZDNKV3ZJbzdmSDV2czdLeWdiSXpzMzQyYnhiY2pxMDJGTFFDZ29LZXF1M1dLRTRUYW1wb0prdkJxQUFBQ0FBU1VSQlZMeTRoREtnZkU4OUphWEY2ZStYTTRLWjQ4T3NlT0Z0dHJZQUxaVzh1UFFOYXMvOUVoT1B1N0JWc2VwL0svQUQwY3EzZWVMTk1PTW5uTWtYQjUrUjV4Q3kxbnEyRktScDR2YjVmTVhxM1ZVb1RrLzhsUTFRTW9ZOC9KUlhlaWliNHVuZ25sbE12dmRPYXAvK003Tm1yOFFmeTZScy9CU2V2V3NNUmNmOVZlV1NWN21hYWRmdm9qS1d4K2dwTi9Eb3BEeWFkL2ZJNjhCYWExMUdKUkNHYVVnUmpVYnY5SHE5VDZ1M1dLSDRiQmlHUVdWbEpRTUdIRVBJK3VOVjZzUTVhWHliR2JlK3o1Vy9uY01OS1paZ1pYWGRnbjVmdnZrZElHQWZBa0lJSWdJUkV3SkRFOEowYVpwMGE1cFdwTTZtUXFIbzdHUmwrUEljYm1nYlM4MDU1UU1rbXFacEJlcVVLUlNLem83WDQyNFhZeU5kakExd0N5SHkxU2xUS0JTZGdoNFhzSHpsQldsdmNydmJDRnY3UXlKc21kUDRiQlVvQ29WQ2NVSndhVm82VjVRMlZwdFZxS3NCZWVxVUtSU0t6bzZtaVJ6U3hkWmtHM0VURXRDRUVFcllGQXBGcDBlSTlzS1dhcm5aWFZVYWtLMU9tVUtoNlBUQ2x0QXFwL3VacHV0QUpvVXRTNTB5aFVMUkJTeTJ6QlJSYzJpZWJDTndHcENwVHBsQ29lZ0NaQnpHRFcxanRXbWs3YWRYS0JTS1RvZTN2WGVhVHRaUXdxWlFLSTZHRUp0WFBNT0U2Ny9MME8rL1J2bkpFN1oyQ1lOMkFpZGI1NGNyRklwVGxTMS9adExDajRpaXMyN1JRdVp1K2hRYnBDcmY0YUZsZmlZL3ZKRHR2N3lVNDdja3BaNTEvL01HYTZxUDZzNnV3MWhzMWtaNE1HbHRTMUFvRktjb1d6ZFZVRFJtSUQ2cWVHMVBNUmNPOFJ6N2d6UTJVSnZkbHd1SEh1OWNZd092clZqTmEwZTNGa3ZyMEVxelRMWEVKbmdRVWtxcDNucUY0clBUMmFaN2xQL1BrOHhZVVlXL1NjZlhQUk9mbmxqYVVwamRrNXQvM0g2WVpPMm1sNW43bTNkWVg2UGo2M2ttMDJkOW5mbmpDNGl1WDhxRXh6K2lMZ2k1MlptTW4zMGZ6MDVxVy80YXJkekVnbCsvd2lzNy9FU3ppNW40MVdrc25ING1SY0M2UmZjeE4zczJHNzkxWnVMTzYzL0QwTi9rcy96SGVTeTRmeTFibThLUW5Vdlo1YmZ4NmxjcjB5NXplZlMyY3lnQnhQQ3AwNEFnaWVrZWZxQUZDQXFJU3RDQk9DQTFFcGFiUXFFNHhTajc2aHcyL3ZZbXB2WThoMGQvK3dodjNYc09mUytjemNZL3BKbVFXL2thc3g3OWlKSlo4L2h3NVM5WWUxcys2eDVmd3FJOTRCcy9pNDBQanFPdys3azgrYWRIMm9rYXNRb1dMZndMVzRmY3dOcVZqL0hoenliaFc3MkVPYXZyRC84Q1N5NWw1UjltTTcxN0psUG5Qc0tyc3daYU43UmY1dkxRV2orSDFTcVJtQk9lR01xbW9RR0d1Z1FVaWxPVW1pcktldzVpbUJmS3QxZFROcnh2MnJ0dFh2ME9sY09uTUc5OEFUNDhGSTJaeXJ6aERheFlYWEhFcDRodWVac1Z3UkhNbTVtdzBId2xZNWcvdlMrYlY3Ly9LWk1NN1plNXJIOXJHLzcyV3RXK1Y5VENEY1JJcmxOUUtCU25CbHQ1Nkk2L3NLYkpUMTBzazJrM3JrN3NETTEraEFudlQrUFZlV1BhTkluWE5vYkpLeTV3ZkMrTGtwSmMvSlgxUkJtWXNvb3ZSZGdhQTBTTHoycXpLTG1vWno2K3htcHFqOE52a2xqbUVzYWYwS3FqUXVNWTdxeFFLTG9LdzFpNCtHR1dmam1mQys5NmtJMS9tTVhVbmlNU0xtbUtxQUVVOWNqRVgxMlBQL2tkbmNxYUFIazlDZzRyYWdDK0hwbjRxcXVwZENoSmJVMEQwUjdGaWJIaG43R2d6RnJtUWw1N3JaSXBYOXNJVzFoZEJBckZxVWlJOG1vb0s4bUN4bXJLdmNXVWRTQXlvNmQ4aVpKL3IyWFJKajlSRW9tRUo5N1BaL3FVZ1VkOEZ0K0lpNWp1Zlo5Rnl5cW9CYUxWbTFpd29vclJVODZsRENncHljZS81U1BXTitwRUd5dDRmbldGUTZFOCtMdzZ0VFgxUkpQZlM3L01KUThpUi9Wcnk0UXJHbElYZ0VKeEt0TEFCNVVGbkZVQzdLMml0dWVnanV2UFNpNWw2ZHd3YzMvekNDTWZzYktpOTg1bVh1bFJQSTEzSVBOKy9IVVcvSG9wazZiNWlXYm5NL0dyczNseVNtSTRkOW5sMTNIUGxxWGMvdi9XRWUwK2dLa2o4c2xOL25CZnJwa3lrRm0vZVlSSmUrN2tyWm5RMFRJWEtXVTRqWFhtK0w5QUNJa3BUU21rbEI4QUk5VkZvRkI4TnRReWwrUEFZWmE1bUZKdWNZMjQ2b2UwbG5zNEY3cEVCVUlYZ3JnbWhLbEpLZjNxYkNvVWlzNk9sTEtsWTJ2Tm5wMmJRQU9Vc0NrVWlrNlBhY29XaDRESmRJSm1lYVM0cFpSTlFnaDExaFFLeGNubk1NdGNETU1JSE1aaWMrb2FtcFN5UVoxTmhVTFIyWWtiaGovRllwUHB4VTJnU1NucjFTbFRLQlNkbldoTTkzZmdma3JIdWdNQU5NTXc2dFFwVXlnVW5aMVFKQnFnZld4TnRuZEVRZE4xdlZxZE1vVkMwZGxwOGdjN2NrV1RZbWRuQzl5UlNLUW1KeWRIblRXRm9oUHh5WUVhZFJKUytHRDdua0RIb2lhdEZhT0pRV3p1Z3djUEhpd3NMRlJuVGFIb1JBem8wMU9kaEJTcTZ4dnRjZy9URmpXUjhENmw3WUlLSWRBMGdUWnk1TWdhanJZSFM2RlFLRTRPa2JtL1dobzZqQ3Y2Lzl0NzgvaW82bnYvLy9VNTIreExsc2tlRWhLV0VFUkFLK0R2aWxoLzZOV3FiUzlZV3JTOVNsdSthUHVyMUc4TDFRcTl0cUJ0b2N0RmJ5dFdyMWhic0ZxZ1ZXcFJSQlRVRmxjVU5TeWFSQ0FRUXNqQ3pHU1ptWFBPNS9mSG5IUHltWk16U2JCc3d1ZjFlQndUQW1hWk0vUE02NzE5M3RUYUNZKytvM2IzODhlTmk0dnJUQldsOUlBTlpEcmozREpFRExCUlN1aysvdEJ4Y1hHZHFkSjAvYUFOYWhsdXpkeVliQVNrYWJEcHV2NHhmK2k0dUxqT1ZDV1Rhck9EWTNOcytTQWt2Zk9BYXByV3lCODZMaTZ1TTFYeDdwNW1oeEEwYSt1SGxLWmhza0ZSK041a0xpNnVNMEVwYkZqNkE4eC9UVTMvc1dBYWZuN0haMW94aEJ3YklTUmRHUVZBT3pvNjZ2bUR5Y1YxWmluUjlCWVczWGszeGw5M0cycSs5a3NzMk56RW5ESTdORURVYlg0ZWEzZWZyTE5rVzdCcDdTdlkzbkdpUDYrTTZ4YjlDcnZXL1JMdkxCZ0hCVUJEL2I0MkJtWTIxMmFPVXhIcnZ3SUFXbEZSOFJGd25JOFpGeGZYeVZQeVF5eForaVIyVk0zQStzZC9oczBMejBmVHd3OWd3ZmJqZ1ZRUGRyeXdFV3Yybkt6VC8xdXdiczFMMk5aeGNqNjdTNUVSVEFlU2lUdSt2N3pEN3RRSW9JTms5TFNsQ3dna0hZcWExbTRYZ0FuOEdjWEZkZm9WM2Y0U05tQVNIcDE3ZnZvNDczRlhZT24xYitPYXA5NUQ2NVRKaURpY05MdHA2Zi9Ga3NMYjhQTGNTdXg0OU9lWTkydzdvbDBxa251V1lmempBT1FSV0h6ZlhGeWZBMFEzUDRCSmF5VmNWOWlPSFEzdGFGVktjZjNjRzdGNFN2bzQ3OFMyaHpCK1RTSFdyL3c4YWdFQUgyTFIxeDVHOUxzL3gzMFh0dUNSTysvRGlrWVZpVlFQdHY3d0IxZ053RFg4YWp6KzA4dXlIeitlb1c1c1g3c2FTNTdhaGZvdUlGZzJCblBtZmhtM2pnczYvRnU2eHdZMUhZQk9BUW9LQ3FTM3ZoTmlMQmFsZWpySGhuUmx0RTRRQkE0MkxxNHpRRTBOTFVEVlpBTXFhVldQcmtUd3FROVJqOG5wN1U4RGFPTE5QOERyTjBleCtzNjdzVzdLUXF6L1FsNy9mOVNwWXNLaS80dmxaVEphdHorS0dmKzlHbFVyYnNPTmhZTjlkNFg0K2svdndkZXhFL05tUEkzcWV4Y05iVGNDRzJhL3RSNjNQUVVzL09uUGNYMVpDblViZjQrYjcxbVA2b2R2eHBXMkNVOWQxK3ZSUDdlbUE5Q0oyWlJMUVRWS0lZR0FDQ0lFUWdnRlFGVlZyZU5QSnk2dU0wT0pMaFV1UmNwY2ZlZVQ0RXFwSnk1blZEQUNVOHJTSzRValU2N0dEUVVmNDIvdm5hSUR0UlVacmxRUFdqdWlpTUtMMnF1L2ljMFB6TUkwaDdGMVhVdnVRLy84R2hPQ0Vpb1FBSlJDQTFNOEFFQjdlbm8rNEU4bkxxNHpReTZmaEVUU0JyRXVGUWxaR25UUDV5ZFRBR1U1UUxUejFHempkSTJiZ2NlL093YTcxanlBNlYrNUM5UC9hejAydEtpT1AxdXlOMzdRQmpRTjlwWVBRaWhKVDhKVFF2cEdxdWpldlhzNTJMaTR6aEJWMXhRQ2V6NUVYVVo0Mm9SbzJVZ2poeVVEU0NGeHd0YWR4OURVQWdURG5qUjRGQm11Vk9xa1ZSUVRMUzFJakw0TTkvMTBFVjcvMDEyNGIyb1BWdDY5R21zZENoSFI5Z010QnNBMEJtckdaVlJFS1FVRklCQ1N2a3ppVFo0OCtTaUFEL2xUaW92ckRIQnNGMXlCNitYWHNlU2hPdFRIdTlHNit5VXNXTnVPSzc4d0xwMWZ5eWxGYmNGQi9PM2xKa1NSUXV2dTU3SHFmZFgyV1R3b3k1RlIvL1l1MUNlQlJEeUtLQXZDSXp1eGFYYzNnQlRxTnorTlZVY3FjYTJadkI5ZWllcU9YZmpiZTkwQXVsRzMrU1ZzNnJSL2wwR1U1YlJqKzl0TmlBS0lkblFQR1lTdDI1L0FOWGMrZ1UwdEtRQmVSQW9EY0NYN2c3UTNnWStPSGQ3Wmc2eXRIdWxMcHdDSUFKbWtpd2hXOFFDQXJ1djYyNElnak9SUEt5NnUweXlsRWdzWHpjS1MzenlKYTJhM0ErRlNYSG5EclZnK3hXdjhnekxNLy9abG1QZmZ2OEtFMzhzb1BlOENYSGxlQUUwWm4wVEd0SnRtNE1wN25zWTFNNThFd2hXWWY5ZjNjR3VOOGRjK0wzWTkvaXRNZXE4ZDBaeEtYTC93eHI3Q1FlRy9ZZWxOSCtLMmV4WmhWZEtEQ1pkZWdDbWw5bSt5RXJmTW5ZeDV2L2tWSnZ3ZUNKVCtHKzY3YnlhbURhSFh2K3dMTitQQmp2Vlk5djBmNExZdXdGVlFpZXUvZTZOUjRlMXIwS1dVZnVBVWhwSjBWVlNuNmVQWEFFS29MS2JkR2lFRVJCUkZXZGQxQ1lEYzA5TnpxOHZsK2hsL1ZuRnhIYjgrVFF1VG81c2Z3S1NuUitDWis2NFlZbnZHNmRIaG94Mi9MTDdzUDE5RmVrbHlISmxMa25zQmtoSUlWRUtJTGdrQ1ZTU0JLb3FjenJHWmxkRm9OUG8yZjNweWNYR2RLZHJkY0dDZnphMnhPVFpLakpFcW96R1hrblNPalFwc25EcHIxcXkzRFNweWNYRnhuVzdGdi9hRDVTM0lySVJtZ00yOENDR1VrTDRUZENWQ2lIRktPUFN0VzdmcWxOTHRoSkRwL0RIbDRqcDdGWngrSzNhZjRhOXlWZFBlYW1ydDdBYzFZNVNLQXNSd2JlYU1hQnBxYkI4YmpMZTZxcXJiK1czbjR1STYzWXJHdTk5M0NFUFpjSlNtWTFCWWJvMlk3UjdHSDZpWlo0dkZZcS96aDVTTGkrdDBhKy9IQnhzR2dockpPRG1YUUNCR0g1c2dJQ1BIQmtELzFyZSt0UjNBTWY2d2NuRnhuVVlkKzhhaVh6ZGxnWnBEamcyVUNBU0NRS2dnR0k2TkVYM3l5U2RWWGRkZjVvOHJGeGVYa3lnOStWOGpwYXF2MVRVZVlzTlFOUk51Zldld01lRW5DQkVnRUNGZFBDQ0VtSDF1RklDZVNxVmVjYmxjMS9KYnlNWEZCYVM3WVErblBEaVNVS0NCSUo3UVR1clhhMnRyMjVrdERLWHBBZ0tsNXRRQkNGS1VBRlFFcUFpcWkybXdBVll2bTA0cHBTMHRMYThNR3phTTMwMHVMaTdvRk5nUkN3S3VBUHg1UWZoOGZoU2U1Sy81NFVkL3IzZUFtZ1pBTTFsRkNLRkVFQ0FJQW1SWmhxSzQ0SEs1NEhhNzA4Y1dtWVVEMDdGVlZsYnVCdkErdjZWY1hGeUhVMjdBRlVCaFVRbDhQdjhwQ0hWcDNkeHZmcjNORm9hcUJ0UnNSeGFaUFd5Q2tWOUxnMDRRQkFGTW5zMkNtNnFxVy9ndDVlTGlPcEpRNEE4RVQ5blg2K3JxZWczT3ViVytpbWpha0JrdEhnSUVnY0NDbWloWTdSNW1LQXJqZjlTajBlaEwvSlp5Y1ozYm9oVFFxSkRkcWJWdHg4cnZmUVdmdS94aVRML3FQL0REdnpjREFKcWYvQ1l1dmVSaTQvb20vdHc4OUs5WlgvOVJIVEx6YTdiQ0FYVExpQm1UQm9JZ2dCaFFFd1VSa3VuWUdMaFJTcW1lbjUvL2lwN2V2bHpLYnk4WDE3a3BRb0I0VXN1U1U0dmg1ZnNXNDFsOEN5dWUrZytNVkdLSUlRQUFLSjcxTUxaOUlZRkUrOSt4NE1abmp1ZExIcnIyYzFmdHQ0V2d4bVVQUXlrMFZZY2twNkVtc283TnNHOU9TMGMxVGRPZTQ3ZVdpNHZMV2MzNDRNTWthcS8rSEVZR0FMZ0NDTEJINExwY2NCM251dUtlbnA1dDJkd2FJZENRc1hLUFVsM1hxSjUyYkZRUVJJaUNDRkh2N08vWXpMbFJBSG9zRnRzY0RvZS96bThnRnhjWEUzOWk0NTMvaWZ0M0pKR01KNEZmWEl2UC9RS0FNZ1YzL25rSnBycUc5amxlKytNeVBQamtkdXlQS3lpYWVBM21mZis3eU85c2ZOY0dOYXR3WUxSNTZBUklBODM0VE1sNEhPM3hPQVJQQkZWbFBvakVuUWFiZWVtNm5nRzMzTnpjelR3YzVlTGl5bFFlcnY3cE03Z2FlN0h5aHJuWS8vVy80ZDdweDdlSllkK1RQOENQLzE2Qk94L2NoS201Y2J5MjhuYjgrSHUvUGZUZTFwODBHc1pLdFlNTmxPb2doSUlRS2dvaVJLSWhxUko0d2lFRWpUWVBVUlFnZW5JZ3BDMmNrREV2eXBSVWRVM1ROdklieWNYRmRlSzBGeHYvK2lGcXYvcGRUQzEyQWE0OFRMN2xHNWg0OU9tWDRKaGI2ejlLUlVoNk94VWhBREhDVUVFVUlZb2lSRW1DSUlxaTVkak1rQlI5Ky91MHpzNU9Eall1THE0VHFIYTB0L3RSVkJ6bys1Q3JBZ0Z2MjQ1c1lhZ0Z0NHcyRHdBZ1NFTXRYUTBWUlJHU0tLYkJac0tOZ1pyVnp4YUpSRjVCZWtzOEZ4Y1gxd2xRTG5KejR6amNGck0rUW51Yjkvem1qUVAyYW1qS2hCckpQREhYT0NrMy9mK3lVQk5GQ1pJVzY2dUttbStaWTR5c0FkUmtNcm1CM3d3dUxxNVBySXcxZ2FOdzlSZEhvdTZSMytMbDVnU0FOcnp5MndkZVF2OUpnNHpDZ1hXd3BNRW9RUlJBb05ORWtrSVVDWFFLU0pJSWljWWdzWTZOeWJVUnBqcXFIVHAwNk8rVmxaVUwrZDNoNHVJYWlwcWYvQ2ErZkYvZnF1SjNicndZOXdPWTlNTk4rTVhuQXFpWTlYUDhWOXNTM0QvdlN2dzRya0FMalhqWHdhM1pHM01wVE9NbENCQmtCWDZ0Ry9HT0kyanNKSkQ5WlJpWG13TTVNQkpreElnUjZPM3RSVzl2TDBra0VraWxVa1JWVmFMcnVrQXBsWkRlek9wU1ZmV1BnaUJjeVc4WkY1ZXpQazFicW9ZcVNvRzNZMkVVVnB5OHJaeXFxcjQ0dktKc0pZQmU5RzJqTXE5dVFrZ0NRSW9Rb2hKQ2RGRVVxU1RKVkZFVXVOd3U2bmE3NFhGNzRQVjY0ZlA3RVF3RUlFaVNaRHEyak9xb1BSenQ3dTUrbWo5MXViak9MUkVDU0VSSFY5ZkoyL0hVM0h6b1ZZY1FOQVZBSllSa2JxVXkyQ1FJQWtSUm9GWnVUUkloU1JKa1NZS3NLSDNGQTNzUndWWWQxZSsvLy80TkFBN3dXODNGZFc2cFFFbWdLM1p5RHRXbWxEYjkxNDhXNzJMQWxyS0ZvVHJNSTRyTW5RYlcyRlFmdHlSUlNvTk5scUVvU3A5alkvTnNnaUNBb2FNT1FMdnJycnQ2VXFuVU9uNmJ1YmpPTFJVcENkQkVIRWVhbTA2NGM0dkg0ODg5dittNWxKTmJBNGc5djVhR216RVhhb2VhSk11UUZRVXVsd3VTSktVL2FQd2pLb29pMFRTTkNvSUFUZE1vNDlyVUF3Y08vTFdxcXVxNy9GWnpjWjFiNGVnRmdTaU9KTHB4dUMyTzJGRVJYY2tUYzRMdUs2Kzg4bllXdDZZQzFCeDhUM09JR3RKMWFKcEdOVTJGcXFhUVNvbElKa1ZJdlNKNlpRazlMcVVQYkV5dWpRMUhNMlpIUjR3WXNVdFYxZldDSU16Z3Q1dUw2OXlDVzZGYlJhRTdCa3FCekZVcG4weUpaT3B2bHkxYWROVG0xRklBVWdSUVFjd3dGRlFnb0NJQlpCRlFKTUN0RUhnVXdPc0N2RzRnNEFWQ2ZpQTNDQlRrQUlJc3k3QzVOdGdINDQxUkt3M3BTUVFlam5KeG5lT1FPeEhhM1hqZ1ZRZTNsdEhta2JGaXp6aDNUUlRUb2Fna2lwQWtFYklrUXBZa0tJb010MHVCMStQdUE1c29pdVpiYW9hbHpKSGhWblUwUHo5L0M2WDBWWDU3dWJpNFBxazBUZDgrWWViOHhnSGNtdFozL2xyYVhJbUVVRkVnRUFXUlNxSUlVVXpEVFpZa0tMSUV0eUxENDNiQjczVkRVQlFGc2l6RDd0eHNEYnRXRVFHQTJ0WFY5UVMvTlZ4Y1hKOVVCdzYzdmpDQVcxTU50NmFUOUpaM0toQkFFSWpoMUFSSWttQTROUkdLTE1GbHVUVVhBbDVQSDlnY2lnam1pRlhHN0NnQWJmcjA2ZXNvcFh6WkN4Y1gxM0ZMcDdSdTZsZS8vMzRXdDJiTWgvWVZEZEpnTTl5YUtGRFRxYVhiTzJ4dXplTkdNT0NENEhLNWtBVnVHYTZORFVkZmYvMTF0YmUzOTNGK2k3aTR1STVYUjlvNm4yMXE3V1NobGpTdU5OU0llWkpIdW45Tk1QWWFtQzBlYkc1TmtmcmNtcy90UXNEblJZNGRiRGE0c2E3TlBoaXZybG16NWtrQTlmdzJjWEZ4RFZXVTBvWWYzZitISFlPRW9kWkp1UVJBMnEwSkVNVjBiazJTUk1paVpCVU1YSVpiODNrOUNBVzh5QTBISUhnOEhqakJ6VlloWlVOU0RZQTJkKzdjYUc5djd4LzRyZUxpNGhxcVdqdWlHeDVhOTN6Q3lhMFJJR1VVRFRUQVBFZ3k3ZGhFVVRDS0JRSmtVWVFzRzdrMTJZQ2F4NFdBejROd3dJLzhuRkFhYkc2M3UxODRtcVg5STZQMVk4T0dEVThBYU9DM2k0dUxhd2h1clhIWncwKytaWU1hNjlqNldqelNSUU1JaEVDMGlnWnB0MmJPaENxeURMZExoc2Vsd08vMUlCVHdJUzhjUUZGZURnU2Z6d2UzMjIyNU5oWnc5dFlQVzY1Ti9mS1h2OXpSMDlQekdMOWxYRnhjZzdxMTltTlAvL0t4cDN0dElhanAxbFNRdmhWN3Bsc1RCVUxUYmkwZGhxYUJsbGtKOVhuY0NQZzh5QW1tM1pva2lSRDhmais4WG0rR2F6dWUxbzgvL2VsUGoxTksrUW03WEZ4Y0E3bTFQWGYvNW85dk9rRE5kRzBPTFI1RzBVQVVqUllQZXpPdURLL2JCYi9QY0d1aEFJcnljd0FBUWlBUWdNL25nejBrWmVEbTFQcGhWVWkvOFkxdkhPdnU3djQ5djNWY1hGeloxTnphL3ZRRFR6NDNXRzR0b3lGWE1OeWFKQXEwSDlRVUdSNlhLOE90UlhKRGNCdUxUSVZ3T0F6V3RRMVFKYzNxMm1iTm1yV0dVdm82djMxY1hGeDI2YnIrNXZSdi9IQ0hBOVFHY0d1QUtCQklnamxkMERkaDRKSmx1SlYwTTY3ZjUwRTQ0RU5lT0lpaS9GenJhd281T1RrSUJvT1dhM1BLdGJHdWpka2FiMjFyM3JoeFl6SWFqVDdLYnlFWEY1ZGREVTJIbjluVmVFakY0SlZRSFNCVVNCOGtTVVZCZ0NTSmhsdExRMDJSbWZZT2p4dEJueGM1d1FBS2NzUHdldnAybXdyNStma0loOE1JQkFMd2VyMFczRXpITmxUWEZnNkhOK2k2L25kK0c3bTR1RXlsVlBYNWtaK2J0OHZCcVEzdTFzUk10eVliQlFPUDJ4aWQ4bmtRRHZxUW54TkVVU1FuNCtzS0JRVUZ5TTNOUlRBWWhOL3Z0M0p0RGhNSkE3azJsUkNTT25Ma0NIZHRYRnhjbG5ic3F0K0V6R1pjQzJ5R1cxT0g2dFpjVm51SE1Ucmw5eUkzRkVCQlhoZytqenNUYkNVbEpjalB6MGRPVGc3TVFzSlFjbTFtTVlGMWJjWEZ4ZjlJcFZJUDg5dkp4Y1hWMWRPN1p2THM3eCt3UVMyUnphMEpSaVhVeWEwcHNnU1h5Mnp2Y0NIZzkxcnRIU1dSdkg1ZlcvQjRQQ2dxS2tKZVhoNUNvVkRXUW9KVGhkVGUxMFlJU1gzd3dRZVBBVGpJYnlzWDE3a3JDaHo4NitaL2JvTnp3WUIxYXhsOWExWWwxTzdXRktOZzRIYW4yenY4WHVTRmdpakt6NEhIcmZRSEd3Q1VsSlFnRW9tQUxTUjR2VjY0WEM1a0c1TFBsbXViT0hGaWZYZDM5NFA4MW5KeG5iczZjclRqeWEvZSthc09tMVBMNnRaSWhsc1RNODVaY3lreVhJb0NyMXVCejJzVURFSUJSSEpES0NuSWMvejZBZ0FvaW9LaW9pSmtLeVRZcXFUVW5FcXdyK2d6WGR2VXFWTWYwM1g5Ulg1N3ViZ0drZUk3NjM0a1ZkTmUvc3lYYm50akNHNU5NOXlhYms0WlNFYmZXcjhxcUhFeWJzQ2JidS9JRHdkUkZNbUZJa3Zad1FZQTVlWGxNQXNKWmtqcVZFaGdoK1NaR1ZLZGRXMDdkdXhJSGpseWhPZmF1TGdHVTZqa3JQdVJkdTVwZkthcHRkTStYWkFBa0NETUJpckRyZW5FT2tTU1dFNU50bzFOZVR6cGszSE4wenNLOHNJb0w4clArajBJN0IvTWtOUjBiUVAwdGxtdWpabElZSjFicXJpNCtPVmtNdmtiL3N6bDRocEFrWkZubFd1THhyc2Z2WERXN1I4YmJvMkZXdC9BZS8vejFxaElDRTBQdUlzMGZTcXVuT0hXMGhNR1hvU0Rma1J5c29lZ2ptQXJMQ3pNR3BJNmpGdFJTWkl5Q2dtc2F5T0VKTGRzMmJLS1VycURQM3U1dUxLSUNFRDFwVUJPQlNCN1B0VS9pcTdUZHgvNDB6UDJnb0dWV3lOQTBneEJtZlBXcUdDRm9HbW9aWnlLNnhTQzV1ZWlNQzg4NFBmU0wwQXRMUzFGZTNzN290RW80dkU0ZW5wNmtFZ2trRXdta1V3bWtVcWxvS29xVkZXRnBtblFOQTI2cm9OWjA2ZFJTZ1VBNnRWWFgzMjRyYTN0d2R6YzNKWDhHY3pGbGMxZWlFREp1RS85ai9IaG5qM3I3L2p2eCtJT1VFczdOa0xTQlFOQ05DTjlSUVZSaENqTGtGd3VTQzRYWkk4SGl0Y0xsOThQZHpBSWJ6Z01mMTRlZ29XRnlCMDJEQVVqUnFCMDNEZ2dGQnE2WXdPQVVDZ0VwOTYyTEkyN0dTRXBISnAyOC9MeU5xWlNxWWY0czVlTDYreFZQQjVmWFZOVHM0Y0pRVE9nUmdoaDErcnBBTktOdUtKSXpWWXlXWmFoR0p2YzNXNDNQQjRQZkQ0ZkFvRUFjbkp5a0orZmo1S1NFb1FHZ1pvajJJQjBJY0hzYldPSDVMUE5rdHFhZG5WQ2lOVnBUQWhKdmZycXE0OVFTdC9tdDUrTDYreVRydXZ2UFByb295K2lmMTZOaFZyS01Ec2FJVVEzSnBpc3RaOG0xRXl3ZVR3ZWVMMWUrUDEraE1OaDVPWGxvYWlvQ09YbDVVTXp3VTRmbEdVWlpXVmxLQ3dzN0ZjbGRUaHhkNkJDZ2dvZzlkblBmcmFwcmEyTmg2TmNYR2VoOXV6WnMvNDczL2xPTkdzSTJ0ZTNabXgySjFuZG11blVQQjRQL0g0L1FxRVFjbk56VVZoWWlMS3lNc2l5UEtUdlNjcjJGMFZGUmVqbzZFQTBHa1ZYVjFmV1hCdWJaOU4xbmVxNmJtNjEwaWlseEhCdFFpUVMyZFRiMjd2QzVYTE41MDhGTHE2elE4ZU9IWHU0dHJaMjd3QnV6ZG8rWmJnMWFvTE5iUGhublpycDF2eCtQNExCSUhKeWNoQ0pSRkJTVW9LaW9xSWhmMS9TUUg4NWJOZ3dkSFoySWhhTG9idTdPd051WmdIQnVLaXU2OFJXU0tBQWRFcXBWU1g5NHgvLytMOXo1c3daS3dqQ2RQNlU0T0lDOXUzYjk2bjkzbFZWZmVtZWUrNTUyUWExWHB0Ynk4aXJBYUNFRU90ekdDWUlBSkRHUnZxdHdSSHJZOGY3V0EwSU5wL1BoN0t5TXN1MWRYZDNXMkJMcFZKMjEwWTFUU082cmxQakc5TU54MmJtMjRSdmZ2T2JIZE9uVDMrd29xS2lGa0FKZjFwem5ldXFxS2o0dEg3cnphKysrdXFHVmF0VzlUaUVvTDJ3RlF5TXZKcHVPRFZxT0RScTV0TE1Ja0U0SEVadWJpNEtDZ3BRVmxhR3Fxb3ExTmJXRGptM05pU3dBZWxDd3JGanh5elgxdHZibXdFM3R2WERDRWRCMDRMUjEwWW9wV29hemtTb3JLeDhJeHFOL2s4Z0VMaVhQNjI1dUQ2ZE9uanc0Qjh2dWVTU0pnTnFMTkRzSWFocVRpWVJRcXk4bXIxWTRIYTdMY0FGZzBIazV1WWlFb21ndExUMHVLRUdaQ2tlT1AxV1lWdEEyRUY1V3dzSWRSaVNaOGV0VW9TUVpEQVlmQ0taVFBLUkt5NnVNMVIxUzZhaXF1cG1ySTMyLzd0NFBMNjZyS3pzYldTMmRsZ2hxQzJ2WmtITlZnV2wyYURHdG5aOFVrYzdKTEFGQW9HTUZwQlFLT1E0bFdDRG0xa2x6UmlTTngrSTU1OS8vbUZkMTdmd3B4QVhWMXJSdXJWWU11OGFUQjFmZzZxcUdveWZOQjJ6Rnp5Q3JhMW56dmVvcXVyV2xTdFhib0Z6QmRTQUcwMVNTbFZLcWFicnVxNXBtcTVwT3RWaHVUV3FLQXBFdFF2dDdURWs1WFE0R2dnRUVBcUZNbG83QW9IQUovbytwYUgrdy9MeWNzZHBCSWRjVzdhUUZFYk9UU1dFSksrOTl0cERqWTJORDFSVVZGUVFRcXI1MDVyclhGYnIxZ1dZUFc4ZEdvSVRjTzMxODNGREtSRGJ0UTBiTml6Rm5LMnZZY1V6RCtLNnlPbjlIaW1sRGR1M2IzOTZ3WUlGTVljUXRCZnBJZmNrcFdiQmdHaUVwRWVuS05WcEt0R0RoTWVIZ0dHQ3hHZ3ptbzhvQ05lY2x3RTFNNy8yU1VMUTR3WWJBQXdmUHR5eFF1b3daa1YxWFNkbVpRTUExWFdkYlFFaGhCQmgrUERoYjdhM3Q5K2ZrNVB6aStQOVhyaTR6aDZydGhYTEZxeERRMlFtVnExZmpta1d3RzdGTFRjc3dZeVpxN0JrMlZaY3VYd2FYS2ZSckRVMk5xNlpPblZxazgydFpZYWdsS1lMQmtUUVJNSHFWNE1rYU9qdVNhRTNucUJDWGhBdWx3dWlMSUFRRVc1dlptdEhhV2twaGc4Zi9pOTlzOEx4L0dPdjE0dUtpZ29VRnhkbkhFeVo1ZFJkS3N0eXY1RFVOcFdReU0zTjNkRFQwL01yL3V6bU9uZTV0Z1liamlxNGRQNUMwU0F4c2dBQUlBQkpSRUZVQm1wcEJTZmVnc1VMYnNDVmtRUmFiZm12WmFzWFlNYlVHbFNOWDRDdGFkK0hyUS9jaGhsVHg2T21xZ28xazY3QnpVczJvU25CZk1LdHQyRjgxWFFzV3JzYWkyWlB4L2lhS3RTTW40b1pDOWFpemlHZmxxamZnRVd6cDJQc2lJcUhxcXVyMzJlY1dpOTdFVUlTWUErUVRKL2NvWnVOdUxMTEI3OGtVSUhxSUhvNzluN3dBZDQ3bEFRaGNieS82Uzk0NUsvdkl4V0pvUGpJVTVnemF3NXUvLzJmY05zMWsxQlROUlZMNmdCc21vZWFxa2xZc0Qzeis5dTZZRHlxYXVaaEUvdkJwcTNINzVLS2k0c0hkRzFtT01xR3BHWUxpQkdhc3ZrMkFZQXdaY3FVaDk5ODg4MUNXWlp2NGs5enJuTk5kYS90UUJLMXVHS0tVNndad2JSYmwySmF2NDl2dzhwbFZiamkrdmxZVkZXTGFrU3hkZEVNekZtVHdPUWI1bVBwQkJkYVgxdUhsYXR1d2V6b0ttek9jSHNOV0xOb0ZhNmRQeC8zelE4aXVtMFZscTFjaU5sUkZ6WS9lQjM2dm92dFdIWnpIU28rKy9rbjlyZjhnKzFYNnhlQ3NsQURvRk1LU296RlQrbThtZ0ovVVNtS3ZWNzRQQkp5eHBZQnh4cnd3V0UzeGw0eEhSZVBIb054UlVVWTVnMUJrUko0ZnZrS2pMbjJSc3lmV1lXSkVRQk5RM2UvQzJiUCtXVGhYM1YxTmVMeGVOYjJEd1pzR1NFcHBaVHF1bTV2QVNFN2QrNFV0bXpaOHREMDZkTUxSRkc4bWovVnVjNGRKZERhR2dXVUNDSXMxNkt0YUdXZEZsd0lSb0lNbkVveDg3NzFXRDR0YVB6N1RWaXhIWmh3eTRONGRPSEU5TCs3L2pwRVdpZGg0YWEvWWZ2eWFRd2NGVXhlL0RqdXU5SDRnbE9tb0N3eEhUTlhyY0NxdXV1d3NMYnZhNDYvODRuTm56bXk0ZmtOOFI2blhqVjdGVlFsQXRHaFU1MVNuYVpTS1ZBSVVFUVpzaXhUYTdqZGx3NDlKYmtadTQ1NFVUbHVJaTQ1dndMRHk4cFFmU3k5UnEvcWxzZXhmbUh0Y1lmZWRTdVhZTjNCcWs4R05sRVVVVlZWMVE5czdEU0NiY3lLbUlVRUkrZkdGaE1JSVVTNDZxcXJtdXJxNmxiVzFOVGtFVUltOFNjODE3a0N0a1FpRFJFWDh5cmV2dVFhM0xEdWFOOEhBak94NnQzbERKeXFNWGxpa0lsWnI4VHl6VmZhUG5jUTFXVVJZSHNyb2dtZ2p4SXVSTW9pR2RDY09QTTZWSzFhaWUwN1dvRmE4KzhtdkZXdTdIMTYvdno1VVZ0T3JjZTRlbTM5YXVsR1hJbFFVSjFxdWs3VlpDK090U2RvM09WSFVYa0llVVpyUnlBUWdCU1ZJWW91QlBNTHJXWmM4VjBDSUlEYXliV2ZJSjlZajYxYkc0QXhDejU1d2o0Y0RxT3lzdEtDVzdZS0tldmNUTGdaVXdrZ2hKakZCSUVRUW1wcmE5OXJhbXI2YlVsSlNTNGhaQVIvMG5PZC9US0JaZ0RPZURYWDNuSWZWbDJiQUJERnRtWHpzV29vb1ZpMERtdFhyTUNhVGR0UmR6Q0dwR1hRcXROSUdvZ1VaVlVvQTFEZjBBUWdBa3BSMzlQVDl1ZDdaMTdWWW9OYVh3V1V5YXNadVhNcnJ5YkxMaXJMTW1SQnAycWlGL0dlT0pvYlBnTDFUY2Jra3JSamt6c1VTSklMNGNJU1ZGWldJaHdPLzR1UFpTc2FXZ0ZsWXZXL1Zva3NLeXV6QnVSWnVHWEx0UmxRTTRlL3pMQlVNeDRjQWtBb0t5dDcrZWpSby9mbjVlVXRBaERoVDN5dXN4MXNrVWdRU0RhaHFSVkFtZUcxcXFkZ1dqVUFSTkc2U2hsQ2pxa09EOHllZ2VXdEV6Rm40WElzckM1RDBBWFVyYndaQ3pjTjFUdGFPbnFndlh2MTRjT3ZOQ0p6c0wzWElhK1dNdk5xNWpKMWRyckE3WGJEazErRVNpV0ZwcjM3Y0tUaE1EQ2hDams1T1ZEYVhaQWtEL0xMS2xCV1ZuWkNIOVYvdWNWaTFLaFJHYTZORFVudEozOVFTdGw4bTI0T3d4cmhLU0dFRUVvcHljL1AvM3RuWjZjL0ZBb3RCdURtVDM2dXMxbTFsMDVFWU0xVy9HMVRFNzcrOVUvNEF0K3hCbXQyQVpldWVCQ0xyK3NMVVJQQklRWjA5ZStnQ1VDa3FxejM0TUdEcTY1ZThYWWQrdG82elBDVGRXdjlRbEJDcUs0bWswaUpMbmg5TWhSRnNmSnEza0FleXZNUG9MTXRpVlFnalB6OGZMaU91cUVvUGhSVmpSclNMd0Fna1VIZi9vcWdLZ0lrbTVxT3I5M0RTWVFRakJneHdwcE15TS9QdHlZVDdHTlhaZ3VJYmZHeU9YSmx0b0FrQVNUQzRmQ2Z1N3E2ZUJzSTExbXY0TFJiY0gxcEV1K3NXSUJINmhMOXdxdlcxdVFRN0ZZQ1VRQ0pLUFAvSitydy9JNVd1eHNERUVOOVhUMGJ3MkxUcWswNGlER1lNZ29QR2VOU0xOUjZHYmhsbkxGbXZuN05maldCZ0ZJOWhTVHBLeFo0dlY3NFBDbkU0Z1NDUHc5bGhma29LaXBDUldFSWlxSWdtU1NELzN5UkNDS0lvYjYrS2VQbmU2MHV4dnlqYWt5YlZnWHNXbk5pbW1JRGdRQ3FxNnY3RlJJMFRjczJJRDlZTVlGUVNvbmY3MytzdTd2YjQvRjRidWRQZjY2ek54cWRpSVVQTGtMZDdLVllPbU02bnIvdVNsdzZwaFE0Mm9EWE5tM0F0b1lBSnR3eUV4TUh0SDNYNHNyOGRWaTNaRGJtTlZ5SmFyUml4NllOMkhFd0NTQ0tSQlFBVTJ2WXRYdzJaalJjajJzbjVPUG9hMnV3K205SEViNzA5Z2QvTUtuZ0h3Nmhadzh5anlPeU9UV3pFVmVpYmg4UTYwclMrTkVXSkx1RHlBbW4wQk5ydzc3Mk5yUW5YYWllUGhVWEdJZEdqblNOUXVpSkxWaXpaQWx3eGFXNDdzWnBLQnZvNXl0ZGhWWExic2E4Z3pNeHdYVVE3MnphZ09jYkFEQ0w0R3R2V1l5WkcrYWN1Rzcvd3NKQ3gxeWJxcXBzUDF0R1dNb1dFNHhQbzluRDBsbXpaajM4NXovL1dYRzczZC9tcndDdXM1WnR0Vi9INDV0cjhjaXlGVml6ZFMxV3JJc2hxZVNqcW5ZYWJsazVIL092ckI2NFNoaWNocVdQTDROcjBRcHNXTDBTVzExVm1ITDlmWGg4d3ZOWXRMSUpCNW44SFJEQUZZc1dvMnpiQ3F4YzBvQ29xeFFqcjczN2tmcFhmN2tWL2FjS3JCQ1VFQ1FvTlZmb1dWRHJhOEtWWlNpS2o1YUdLSHFpY2NSN1kyZzlITU5SUVVHNHNBcFRwMTZPYS85dEpFcExTMUZWVllYeXkrL0U0amVic1d6REtxeG96Y2UwRzZjTkRQOUhseUc2WUFVMnJWcU9yWUVxVEx4dU1aWk5YSUdGR3pJZmgrV1Byd1JoRDNJN0VkcTllemQyNzk2TnhzWkdIRHAwQ0VlT0hFRjdlM3ZHMFVjR0FBa0RRR0wwdXdrQVJFcXBCRUFHNEtLVXVuLzBveCtGZi9qREg5N2ljcm5tOFpjQTE1a3FUZFBRMU5SMFpwK3h0dlUyakorekZkTld2WXY3REk3RVlySGZmL3ZiMzk3OGh6LzhvWWR4WlQwQXVvMjNQWVFRcTJCQWpHMVQ3UGxxek5IZTFobHI1dnluZWI1YVNVa0poZzhmanBxYUd0VFUxSnpVSC9PRXoyZU9IajNhQ2tudDdSOVpYSnQ1NGk2UVdTbTF3dEtmL09Rbm5aRkk1T0c1YytjS0xwZHJMbjhKY1hHZEdNVmlzVDhzWHJ4NGl3RzFKQU8xSGdacS9VN0RkYXFBc3NVQ244L25lTHgzWldVbFJvOGVmZEovcmhNT05rSUlSbzhlYllITjN2cWhhWnAxNUMrVGI4dFdLYlUrNTNlKzg1MDJSVkVldnVtbW04RGh4c1YxWXFDMmRPblN6U3RXck9oQ1pxR0FiY0RObGxmVEJVRmdOMHhSY3hHTC9jQkkwNjJaVUdPUEJ2L1VnQTBBUEI0UFJvMGExYTlwMTliUDFxK1lZTGcwMDdXeGNDT0VFREp2M3J6V1JDTHh1N2x6NStwdXQ1dUhwVnhjbjFESjd0anZGeTlldkdVQXFMRk9yZC9xUE9QQVNHcDNhdWJLdkZBb1pCMFlXVnhjaklxS0Nvd2FOUW9lejZuWmRpL2VmZmZkSitVVG13ZFFtbkF6SzZRczNHelhZQmluQUxCeDQ4WVVJZVQ5aXkrK1dKVmxtWTllY1oweG9wUWlHbzJlZ0E3Nms2aktxM0hEelRjODh2U3kvMi9MNzM3M3UrNXNUZzBPa3dWc29jQ0Vtc3Zsb3V3SnVQYVZlV2FoWU15WU1jalB6ejlsUCtaSlBRT3RzTEN3M3pTQ1E0VVVUSjdOcXBRQ2dHMWdIb1FRVUVxeGRPbFN2UFhXV3crdVhiczI2ZlY2ZVNzSUY5Y1ExZEhSOGVBVlYxeXg5YTIzM2twbWMycXdIVVBFVmo4eks2QjlUczNjMnM3bTFJcUtpbEJSVVlHUkkwZWlzTER3bFA2Y0ovMXd4L0x5OGd6WHhrNGoyRjFiK3BjZUpRQ29xcW9tM0RRMkxEWGh0bkhqUnZoOHZ2K054V0s5ZnIvL2R2QUpCUzZ1Z2RUYjJ0cjZVRUZCd1QvUS8vVGJnYUNtRVVJMG9lOElvcXpoWnpBWVJEaWNuaW9vS2lyQ3NHSERyT2I5VTYxVGNtcHRkWFYxMXVQRG1WTjJUVHR2NWRwVVZUWC96aEZ1QUJBSUJQN1kwZEhSSFE2SGJ3T2ZMZVhpY3RMUmd3Y1ByakltQ3RqWnp4NWIrT2tJTldiQmNRYlVuRmJubVZBckx5L0hpQkVqVUYxOWVrNzlQMlhIY2RmVTFHVGJpK0RvM0V5NEFlbitvQUhnUm5OeWN0YTN0TFIwUlNLUmIvRlRRYmk0d0JxRit2cjYrdFVqUjQ2c0c4U3BKYkpCamMycFpRcy9uYUIyc252VnpnaXdBY0RZc1dQN3dTMEwyQ3k0bVFtM2JIQXovMXhZV1Boc1kyTmpkTml3WWZNRVFiaUlQNlc1em5WcG12Yld1KysrKytjTEw3eXdFZjFuUHdkcjZiQ2dObGhPellSYVlXRWh5c3ZMVVYxZGpiRmp4NTdXbi8yVWdvMFFnckZqeDJaMWJRNi9iVmdINXdnMzQvTlNTaWtkUG56NFAzYnMyTkU1YnR5NGI0cWllQlYvYW5PZDhUcjJ1NVB5YVZNcGJmT1diYnVldm1ybS9TMU0rR21mL2V3aHhycThUS2hSalJCS1JZRlFVYUJVbG5USW9nNlhwTUl0cS9BcUtmamRTUVE5Q1lTOVBjanpkNkV3RkVkNVhoVFZoWjBZVzk0R0VuMzkzQUViQU1peWJNRnRFTWZHNXR1eXdZMGFINmRtYURweDRzUVAxcTlmdi95YWE2NXBWUlRsYS95VnczV3VxYnM3K2NURGoyMTdmdjRkZjQ0T0FMVmVBaVJBWUt0K1FpTUVhYWlKaE1xeUFFVVc0WEpKMU8yVzRmVW84UGxjQ1BqZENJZTh5TXYxbzZnd2hQTFNYRlFQTDhEWW1sTElrbmphSDRQVHN2TE83WFpqN05peGpuazIxcTJ4SVNraEJLbFVLbjBVU1ByLzAvcllsdW5jWnN5WWNiQ21wdVpYYjd6eHhoRy8zejhmZkxVZjE3a2h0YTA5L3RENGYvdXZsdzgyeCswN0N0anoxRXlvMlp3YWRJR0FDZ0toa2dFMVdSYVE2RXpRenFBTFkzTFNVQXNHR0tnVmhGQldtb3ZxNFJHTUhWTUN0MXMrSXg2STAvYUM5L2w4RnR6c1lMT0hwWVFRYXVUVDdLMGc5Z2tGYXNKdDkrN2RlaUFRZUt5bHBlVndKQks1aFM5bDVqcFR0ZjJlKzNIejBmOFg3LzY2OWhQdkRhV1VOalR1TzdxbWVzS2k5NUc1VGFyZmVXb00xTlNCb0tZb0luVXBJcWlRUkZLUjRmZTVFVENobHVkSFVVR3dEMm8xcGZCNVhhaC85cC9Zbmo4T04zN0c3L0JkeHJIMXZtZXc1T245YUlwSmlJd2JoOFUvbVk0clM4NGlzQUhwYzl6R2poM3I2TmpZdkJ4Ny93YUJHMldkR3dCYVdGajRiRjFkM2VGUm8wWjlYUlRGei9LWEVkZFpaOU5VYmV2Mk54cWVubnIxTDV5V0dkdVA4MDZBOUIzcDNRYzFRZ1VCVkpJRUtrdkVnSm9NdDF1QUpoS0lMaGNDQVRkeVdLZFcxZ2UxUU1BTlFFWGRjNjlnWlVtVkk5aGFuMzBHdHowdFllbGp0K082a2w1cy9kRWF6THZqRFd4KzdDS1VuVTFnQTRCUUtHVEJiUkNvOVlPYmtXOWp6M096Z0diQVRRZWcxOWJXdnIxNjllcERNMmJNK05qdGRzL2hMd1d1TTFXSlo5ZGgvSVBBamFNVDJMcXpEYTFKRjZiZE5oUExQNThIRjFxdzdEL1dZUHZvS3JqMnRLQXBsb0JZTldiMWVTUFZMYis1NXk4eFpMWnoyTU5QYSs2VFVxUUVRalFRNkNiVVJBRlVUZWswbWRRQlFxZ2dFNVNWeXZCNlJHZ1MwTzEyR1ZEelFEdTBIMzk2TG9aTzNZdnlDOGZqaHo4ZWp1dUMrN0hrUDU3QzJrTWFZbGlEU1hzdXdlTVBYNFMrTUVuRmp1Y09JZmp2czNCZGlRVEFqMmx6eHFINkt4OWllK3dpWEorb3c3eXZiRVhrWjdkaTZXZk9BckFCNlkxWEE1V0hUY0FSUXN5TEVrS0ltWE16YzIyNnJsTzJ2NDExYmpmZWVPTWhBUGUzdGJWOW5KdWJld3VBWXY0eTRqb2pkZWdZY05jc2JQNlpIOUZYbjhIME8xN0Nwcy9PeEhVQkFFaWdWUm1EOVgvNVFuUHk0LzEvTEp0d3o5dGIrNWFxSkJtSXNVZDVKd2hCa2xLa1FLQUtJQm9JTklHQUVvSG9va0JBVXhyVmlJQ2NQQmYxU3hUdHJRbTBkSXNvSzNCQmxRVW8zblQ0NlRuNk1WYnZDdUsySDgvQXZNdHo4ZkZqeitMbWIyOUc1QzlYWWZGZmJzV0UyMytOWlNVMzRPVUY5aEdxWHJUR1ZFUktHQ2VYNzBjRXZXZzlDbUQ0TU54eTE3OGpPTzRzY1d5bWNuSnlNdURHUUt3ZjJPek9EUUJoNWtyN09UY0F1dUhlYUY1ZTNsL3I2dW8rSGpWcTFFMmlLRjdPWDBWY1o1eEtxakRUQ09XQ280ZWhPdmtHV21NQUFnQWdvbVp5eFV0N3QzKzQ0WktyZnRHRWdiZXo5OXBDVHhWSWg1NkVRQmNFUWdXQlFKSUlKUnBCVWdjbGdnaVgzNFVSdVVFb1hpK0NBUWtwUlVEVTcwTnhnUXYxcjNXaCtrdWZ4N3pMaHlFbjdFWE9iWmZodXFmWFljMC9wbVBLWUltZWZxc2JSQUFxWWtrQThHUGlaLzFuVHlocWg5dDU1NTNYRDJvRFFJNlN0UHJsM0N3YjE5Y09Zb2FtV20xdDdkcy8rOW5QR3Ivem5lL3M4bnE5L01oeHJqTlhSalVoWVd4ajZVbHBENy95Mk5xWEgzNXVXNDh0bjlaLzd5ZVFwRUNLV0ZDRER2UkJUUlFKbFNRQ1dSS2dlQ1hxN2traDJ0Nk56clllQkNLNU9ML1lqWnl3Z3FSYlJHY29pUEl5TnhwVUwyb3ZISUdjc05kTUpxR3FSTVh6UjNzeDZMaTJZditBQmtCQ1FEbnhEOXNaMXdZUkRvZUhCRGQ3V0dxK2J4eU5wSnRBWTRvS09pSEVkRzc2SFhmY29kOXh4eDMvZStEQWdiMmxwYVUzRTBJbThsY1IxNWtxcXROM2R1MDVzdjd1VnhyM0FvMnFRejR0dzZVUmdpU29CVFNORUdpZzBFRkFCWkZRU1NCVWt0THRISW9pVWdrRXZrSS95djBLZkxLTzVvK080dDJtZkV3WTRVZlNJNkV0TndjanF2TVFyWGdmcjBaMTVqdUxvK0dvaEVqK1lHZFF1QkhKbDlCNktBNGdsUDdRMFRoYTRVUGtKSnhtSkp5Sk56RVVDbUhjdUhFWU9YSWtoZzBiaHVMaVlrUWlFZVRrNUdSYjdVY1ZSUUd6Mm84eXEvMDA0NHoyRklBa0lTUkJDREhQYys4dUx5L2Z1bTdkdWgvMjl2YXU0aThmcmpOUnFxNnRmdkdKTGY5VE8vbC9kaU56ejZmMVBHWXVhMFVlTloyYWNaWmEraGM4Mjg0aEdJMjNJbExIZXJDL1RZWHNkU09VNDBlK1g0TGk4Nkc0S0loOG40SkFRVDdHamFuQkYyY1BSOTJxRjdEaGtBcWdGenNlMllvTkdJTWIvaDhKZ0FTWFMwS2k3UmhhRS8wOTFKVExoaUg2M0hhc2JWU0J4REZzV3ZVTzZzZU53cFJBR3BBN1hteEFmZUlzZFd5bUFvRUF4bzBiQjBFUUhDOUNpUDJ0NWR4U3FaUlpNV1dMQ3BRSlRVMzNwZ0hRdnZTbEx6VUIrRTFUVTlQT2twS1Ntd2doRS9qTGlldDBTOWZwdXgvV3Q2OWYrK0diZTdEc1RaVUpQWk9PTG8yQkdhVjkrd2xJdWo5TkZ5aEZTdGRwVDFLRXp5dENVU1RxZGtsd3UyWGtqMUNnSEl6aG5UZmpvS0tNZ29waG1IMVZHU3JLdlVnRVhEaFlXb0pBd0kzQTU3K0FCNDgrZ3lYLytXc3NpRW1JakI2RHhiK1pqaWxHeUR6bCtuRW91K01wVFAzUFMvRE1FeGVEYlI0Tlh2WHZlUERRYzFnMDk5ZFlaUFN4M2ZlVGllbFdqNlA3c2ZKSFcxSDJtMXV4K1B4Ly9iRTc0VnVxVHJSNmUzdnh3UWNmb0w2K0hnY09ITURodzRkeDlPaFJkSFoySWhxTm9xdXJ5OXA4bFVna3pGMExoTmwrQlYzWENhVlVNQzhqYXlrQmtDbWxpcEhKY0FGd3JWcTFLakpyMXF6cnZWN3YvK0V2TGE3ajBTZmFVcFZsVmpRYTYzbjBnZjk5Y2RzZGR6OFZSMStCZ0IyUFlzUFFkT2dKTnZRa09rSC9Jb0VzQ1pCbGticVV0THZ5dUdWNHZhNk1pWUw4dkFDS0NrSW9MOHV4eHFUT2xJbUNUNzFqc3lKenR4dm5uMzgrUkZIc2Q3SHV6ZWJnc2hVVktKTjdNNHNLT3RKVlV3MkFPbWZPSEczT25Ea1A3ZDI3OTYycXFxb2JSRkdjeGwreVhLY3M3RlQxbDNlK2YrQ1pDeSs3OTJNRFVuYVh4dWJVa2dSSVprd1JvSzgvelhCcVZCU1lJb0VpVWtXUjRIYkpjQnRROC90Y0NBWTh5QWw1a1ovSHpINVdGV0RzbUROajl2T3NBeHVRSHB3ZlAzNDhKRW5xQnpiN1d3WjJWQkFFSWdnQ1ZGV2x6TDZGOU42L3Z0RFVxQlFSelF4TkFhaWpSbzE2ZmNTSUVUdGZmLzMxNjNKeWNtNENVTXBmZGx3blM1VGk0SkhXWTA5K1p0cFAzbWhLejNteVVFczRYRWtIbDlZWGVwcVRCR0pma1NEdDFHUzQzUkxjYmdVK2IzcjJNeFR3SUJ6MklXSkNyU3dYSTRZWFl1eVlVcHlDaFZMbkx0aUFkSHZIZWVlZEIwbVNqZ2R3L1NxbWhCQnFoS1pnblp1WmQwTjZHNzBHUVAzb280L1UzTnpjOVJzM2Juempzc3N1KzZMYjdiNkp2d1M1VHFoQy93ZGRYVjFyL3ZyWHYyNzc2bGZuZFF6aTBneWdFUk5vS2VNWHNYVitHck9iQUpJa09lNzhORSsrdGUvOVpJL3pQcDJIUko1VFlETlZVMU1EV1piTkNpaU1OV0NPSWFvSk4rTXRZZUFHUFMzclNDU3pnZGZKdlYxOTlkV05BSDViVjFmMzZzaVJJMmRLa3ZUdi9CWEo5YThxbFVvOXYyUEhqazJUSjA4K3dBQXRHOVNTRE5SVTlBMndteEdIdFd6Rk9NYmJmSjFRUlZGZ1B5RFNoRnB1Ym03R2lyelRlWnozT1EwMklMMUR3V3p2TUM4V2NFNmhxWEhEcmRDVXFacGFybzBKVFRYR3ZWbFBvdHJhMnJjQXZOL1UxUFJDY1hIeGwvaEp2VnlmUkxxdXY5blEwUERNeUpFamQ1bS9QRzFBU3pxNHRKU0RTOU9aaXhxLzJMTkN6ZXYxd3V2MUloQUlXSHMvQ3dvS0xLaU5IRG55dEN4ZTRXQmpWRjVlbmdFMzgyYWFvYXJkeFJtZ3MrQ1dTcVVvSWNRODhOSmVXTkFad0dXNE53Q3Bzckt5RnkrODhNSi9QdnZzczFmbTVlVjlpUkJTdzErdVhJUG4wZWllNXVibXA2ZFBuNzVqMTY1ZEtwTWZZM05wN051a0RXb3E4MHZYQXBxNUVrOFVSZmFYUFhXNVhCbFFNNWV1bUhzL0k1RUlTa3BLckdYR3AzcEYzc25VU1Z1WWZDcGsybW1uZkp6NWRvQnhMSHRhMUp3cmhRRTRHSEN6R24xTjJBSFFtNXVidGVYTGx6ZWtVcWtYTHJqZ2dtYTMyMTFDQ01uaEw5OXpHbHlPQzVNcHBZMnRyYTJQTFZ5NDhFK3paOC9lZi9Ub1Vic3I2M2RrTjlMTFZYcnQrVFJtY2JIVFJuWW9pa0lWUmVtWFMyT0J4aTVkcWE2dVB1WExqTGxqRzRKeWNuSncvdm5udy96dHhFd2daT1RoMkN1UlNEaUdwb3g3TTRmckJWdDRxZ0ZRamZBMEJTQjE3NzMzSnUrOTk5Ni9MRjI2OUlWdmYvdmIwME9oMEV4K3FDV1hBYlNHMXRiV0RjdVdMWHZybDcvOFpTK1RHM1BLcGJGaGFBcnA0NFZVUW1CR0N4cEEra1lGQVVwQWFQcXBTa0JCUUNtb1RnRktDWFFLYURxRnBnT3FScEhTZ0pRR0pGV0toQW9rVWtCdmlxQW5SYkQ3b3dNQURweFZqLzJuMnJHWmttVVpoWVdGanFlQURISGUxRzdnekJONzJSTkM3TlZUeTcwQjBMWnMyWkw0K2M5L3ZyZTd1L3Y1Q3k2NG9Nbmo4ZVFTUWdyNHkvdmNjMnpCWUxDdXBhWGxEOS83M3ZjZW56MTdkdU0vLy9uUFhnZUgxbStucHkybnBoSmlnZERJcDZXZmk0UUlFQVdSaXBJSVNUSnlhYklNUlVuL2NuZTUzWEM3UGZCNmZmRDUvQWdFQXdpRndzakp5VVYrcEFERnhTVW9IellNVmRVaklFbnlXWGt2enZqSmcrUFZ4eDkvaklhR0JqUTFOVmxUQ2gwZEhZaEdvNGpGWXVqdTdrWjNkemQ2ZTN1UlNDU1FUQ2JOVGZXRVhlcXM2em94TCtOeE1xY1cyTWtGaVZJcUE1Q1JQcnZBdXFxcXFwUlhYbmxsYW1GaDRUV0NJRnpNWC9abnY1TEo1UFkzM25qamhhOTg1U3Z2TnpVMW1TTk5yRU96RndneUhKb3gwOHlNUWhIemx5aGxLNTVtb1l3dEVHUXJFcGp0SEdiNFdWWldocXFxS2xSV1ZwN1Y5K0tzVzNKU1dWa0pqOGRqRHNlYmVZZWhGQmlvVVUwbHFxcGE0YW5aOTJhNk5TTTgxUWNJVDVNQWxJYUdCcVdrcE9RRkFOdjI3dDA3b2JLeWNyb3N5NS9uTC8relQ0bEU0bSs3ZCs5K2RjS0VDWTBNek5pd00ra0FOUloycWdFMXE5cHBnSTJheFFIanVVbVo1NjRGTkRPbnhoWUovSDUvUms2dHVMall5cW1kVFVXQ2N3WnNBRkJZV0FpdjEyc0J6dTEyZzMwUzJPSFcyOXRyQVM2WlRHYkx2VkZLS1dIUGVEUFBkMk9lbUNuRHdWbUFBNkNNR2pYcWRRRHZ2UERDQzA5TW1qVHBVci9mZncxd3dvOTU1enExWVdkVExCWjc3c1VYWDN6N2kxLzg0dEVzUUhPQ211bk9yR0YxSTQrbTI2dWRCdFJnVmp6TjU2dVRTek9oWmk4VW1PMGNadU50SUJBNEorN1BXUmVLMm5NZWUvZnV4YjU5KzNEbzBDRzB0TFNndmIzZEdxQ1B4K1BXQUwwWm1ocEQ5RWdtazFCVjFYUnZHZUdwc1hoR29KUVN3OEdaNGFsNXNTRXFHNnJLQUpRYmJyakJ2WHo1OHNrRkJRV1hTNUxFVC9IOUZFbFYxUmNQSERqdzZ1MjMzNzdycWFlZVNnMFJhQ2s3MEFDMktKQUJNOTJjZDJiRFR0YWx5YklNdHBYRFBra1FEb2VSbTV1THdzTENqSFlPOG1tZGorSmdjMVpUVXhNKy92aGpORFUxb2FXbEJXMXRiUVBtM2N6Y1d5cVZnbmxLQ0FNNFlxd01KT3cxQU9Da0xJQ1RBY2liTjI4dXYraWlpeVlIQW9IcHZCL3VqUDBGdWFlenMvT2xiZHUydmZ2RkwzNnhqUUdTRTlCU1dZQ20yb0ZtSG54cWhwdDJsOFlDemV4UE0xM2FRUG0wdkx3OEZCWVdvcXlzREpXVmxTZ3JPL2VDZzNNQ2JBRFEyZG1aVVZSb2JXMUZSMGNIamgwN2hsZ3NaaDEvMU52YjYxUllnQUUyWXJvM0ZuQk1nWUVGSEZ0a0VBMEhaNGRjeHZYZWUrL1ZWRmRYWCt6eGVDNEhVTUtSY2xwaGRxaTd1L3VsdXJxNkhaTW1UZHFQdmlyNFlFQ3o1ODVZVjJjUE9hbDVJQU9UNDJWZEdqdnI2Umg2c2syMzdNeW5XU1N3OTlSeHNKMkYwalFOOWZYMTJMOS9QNXFibTlIYTJvcTJ0alljTzNiTU90dXRxNnZMT3R1dHQ3YzNBMjRPN3MwTVQ4MHozd1lDM0ZBZ1ozNU0ycjE3OTdpS2lvcUwzRzczWlJ4eXB3NW1QVDA5Mno3NjZLTjN4NDhmMzJnTEY1MkFwZzRSWnYyQUJtc1BCeWdSQ0JSWjdoZDJzaTdOTEJDNFhDNXIzdFBuOHlFWURDSVVDaUV2THcrUlNNVEtwMVZYVjBNVXhYUDJYcDVUWURQVjNOeU1mZnYyNGVEQmd6aHk1RWhHYUJxUHh5MjRzWWRYc25CakFjY1VGd1lDSERIQUpqaUVxWklOYXJMdFk5TE9uVHRIVjFWVlRmQjZ2UmNUUXNaeUJKMDQ2YnBlMTlYVjlkcWVQWHZxTHJyb0l0YVo2UXlZQmdLYXlnQk5wWlNxUnFYYzZuRTBONld4UURNcm5icXVVMEVRNFhhNytnSE5IbnA2UEo1K1EreG02RmxRVUlEUzBsSlVWRlNndUpodmxqd253UVlBM2QzZGFHeHN6T2gzYTI5dng3Rmp4eENQeHhHUHh5MjRPWVdtV2NKVEMzQU9PVGpDT0xpTVhCd0RPQ2ZRWmZ6ZHhvMGJpeSs4OE1MYWNEZzhRWmJsaTJGdHh1QWFvbzZsVXFuWDJ0cmFkdjd6bi8rc256RmpScHNCSUgwQWQrWUVOZmFFalg3RkFNYWhXYmt6Tm9kbUZnWTBUWWNvaXZENXZPendlci9RMDRTYTMrL3YxOHBoaHA3RGh3K0gxK3ZsZC9oY0JwdXBBd2NPNE1DQkF6aDA2QkJhVzFzSHJKcXlvYWt0OXpZWTRNQVdHV3lRTTUyY0dhYUtkcGc1QVE2QU9INzhlUG1SUng2cHFxcXFHdTMzKzgrWEpPa3pBUHo4YVoyaHVLcXFiMFdqMGZmMzd0M2I4STF2ZktPcHJxNnUzK1NJTFhUTUJqUVdadXovbzl1QVpqazA0NElkYUdiWXFhb2FGU1VKQWI4dkEyaHNiMXEycXFjNXhGNWVYbjdXbk1yQndYWUNGWXZGck5DVXJacWE3czFwcjBJVzk1WUJPRjNYN1ZWVVpBbFQ3WkF6UTFVckwrY0FOc24yZDJKRlJZVzRaczJhWVNOSGpxd0toVUtqWlZrK2p4QXk0aHpMazMyVVRDWS82T2pvK0dqMzd0Mzd2dmExcjdVME5UWHBObGZtNU02eXVUVHI3OHhtYk52bnlJQ1p6YUdCclhLYXgybXhoWUZrU29Va1NRaUhnaGt1elF3OTdRMjNiTlhUREQzUGxkNDBEclovd2IyeFZWUFR2Y1Zpc2F3OWJ3NjVOd3R3cG5zeklXY1BVeG5BT1lXcTluQlZ0QUhPNlgzUmZ2M2lGNy93WDNIRkZTV2xwYVhEL0g3L2NGbVdSd2lDTUJyV0t0NVByUks2cnU5SkpwUDFzVmhzMy83OSt3OCs5OXh6TFhmZGRWZVBDWmhCWUpZTmFobnZNODRzSTh4a1EwM1k1b21adzAySXBRaVhBQUFHR1VsRVFWUXRtREV1alRLTnRrZ2tVNUFrR1htNTRheTlhWUZBSU1PbG1hRW5kMmtjYkVOV1YxY1g5dS9mYnpYMDJudmVzaFVXc2dGTzA3VEJBR2QzY1NiZ2lBUGtCQWZJRGZhKzZPQUdoZlhyMStmWDFOUkU4dlB6Qy8xK2Y0a3N5OFdpS0pZUlFzb3g2RXJ2VTZaZVN1a0JUZE1PSnBQSjVuZzgzbnpreUpIV3VycTZ0aTkvK2NzZFlBNG1HQVJtMlJ5YTQvdjI1RDhMTS9RdEFLSnNNY0IwWndBZ1NWSS9vTEY5YVd4eG9LYzNtVDdFb1NDL1g0SEFxVGV0cEtRRXc0WU5nOC9uNHk5V0RyYmoxK0hEaC9zVkZ1enV6ZDdVYTA0c09MZzNxL2VOQlp5bWFTYll3UFRDd2NIRjJTRm5BWXFCM0dDWFlIdGZzTDF2NWY5Ky9ldGYrOGVOR3hjc0tpb0toa0tob05mckRTcUtFcFFrS1NpS1lsQVFCRDhoeEU4SThSRkNQQVlJelFNQXpNOEpCZ3pXMmpoS2FRK2x0SXRTR3RkMVBhNXBXa3hWMVdnaWtZaDJkM2ZIT2pzN284M056YkdkTzNmR0Z5eFkwTTNBaTlwQVJnZUFtVzV6V05wZ2wvMjh2V3d3WTBGbXVqTm1TeG9GQUVWUkxKalpXamd5aWdPeUxLTzdKd2xGVVZCU1hHQTEyOXBkR2xzZ0tDb3E0aTlPRHJaL1RhbFV5aW9zSERseXhOcG5PdFNtM3FFQ3p1YmlXQWMzRU9RY1ljZE1Qd2dEUUUxMEFKdjlZci9PUUJjYzN0cmZ6MGlET2J6UHZoM29zb1BNZm1WemFmM2VONDkrZDRMWVlEQXozN2Z0MUlBb2lxQ1V3dVZ5WlFXYXZlSVo3K3FGeStWQ3hiRFNqR2JiY0RpTS9QeDhGQlFVV0FVQ1daYjVpNUtEN2NUcDJMRmpPSGp3WUwvYzIxRDYzb3laVTN0NG1oR21HdTdOZ3B3eHpXQ0Zxc3g5c3Vma2lBT0Vzc0ZPeUFJemNRaGdZd0VuT0VCdElNQU5CRGM3ME9BQXNZRWNtcDdGcmRrVCs0TkNqQ2tBVUZ1WWFjTE1LZ1F3RmM2TUhSdWlLRkpLS2R4dWR3YlFKRW15SEpxOU9CQ05kY1B0OFdEVWlPSDlLcDVGUlVVb0xTMUZLTVE3ZWpqWVRxSmFXbG95M0JzN2tqVlFhMGcyOThhMmg1alZVNXVMQXpOMGI3bzNlMDRPRG81dVVPRFpxckZPUUJzSWJzZmozSTRIYk1jVGRqb0NqcWxPWmdVWUF5OFdubUJ6WnVhZjJUQ1RYUTdFQUkyeXVUUktLYnhlYjFhWFptL2g2SXgyd2V2MTRmenphcXh6MDB5WGRpNGNMOFRCZGdicHdJRURsbnR6S2k3WXE2ZE9yU0dwVk1weWJqYkFRZGQxNGdBNDFzbkJGcXJhM1p6OXozWW9aWFZpRHVFdUdRUnMyVnliUFNTbEE4QnRJTURwVG45bW9EU1FzN1AvUHhsZmkvMnpMZFNFM1puWmdFWnRsVTdyYkQ5ZDErSHorUVpzdEdWblBOczZZZ2dFZ3BneWFhTGwwbmkxazRQdHRDbVpUT0xRb1VQOWlndHNlRHBZL20wQTl6WWc1TXhpQStQazdHNE9XUnlkSFVSTzE2RE9qQTJIVDBhT3piWlVodzRSZVBZTHRpUGRZUWVaM1pXWnpvekpuMldGbVIxcUp0ZzBUVU13R0J4d2FKMXR0RzA1ZWd6aGNBNnV1UHdTbEpTVVFGRVUvdUxpWUR2OTZ1bnA2UmVlc3RYVG9iU0gyT0ZtbTJCd21rZTFRNDV0SFlGRFhnNDJLTUhCMldFQUp6YlVmSm9UekxJNXRxRVdFdXlBd3dBQWd4MWM5andaa3krRExXOW0zME9iQVRPMmZZTmQxRzNQcFdtYWhuQTRuSFcrMDZ4Mm1tSG53Y1B0eUk4VTRMSkwrSXJhRXltSlB3VC9tandlRDZxcnExRlVWSVREaHc5bkROV3orVGNUY0hZSE4xRDExQUZ3bE1uREVSdmdxQTEwNWtWTm9GRkt6Y01HMlY5b2c0TEtDWVlEd0d5b3B4blNvVUxPWVMwaWJDRWwrMjh6M21lY21TUElISUJHN1V1M0J3TWFlMm1haHB5Y25INWIxOW1qaGN5aDlhS2lJa0NxNXk4aURyWXpWejZmRDlYVjFTZ3VMdTZYZjJQYlEreUFzOCtlWm1rUGNRcFJxUWsxVGRPcy9Kc1Q2RXpBTWE3T2hGMC8xODVBYkRCb1pRUFlKd1ZiVnNBeEo3LzIwYmdQZHJBNXNneUkyY0xNZmlBek42amJROC9Cd2s1N0RzMjhWRlZGZm42K2RheVFIV2htSG8wUHEzT3dmYXJrOVhwUlZWV0ZrcElTSy8vVzF0YVcwZi9tVkVFOUhnZG5DMDh6M0J5YmczTndjSGJZbVhCajMyWkFqLzI3VTVIQ1lCMlg3V1A5NEdWNzZ3Z3hCNkJsNU5CWXFObkR6c0VjbWoySDVuYTdrVXFsVUZKU2t0R1BscGVYWnpYWnV0MXUvaUxoWVB2MHl1MTJXOGN5c3dVR3RvTEtBdTU0Y25BTzdzMnBUY1FPdW40RkI5UFoyUUhIL0preVJRblcxZldqbWhQOGh1TFVuTTdoWnovR2dzdm14dXp1TEFObWJJdEdsdnlaWTdnNVZJZG16NkdaVXdPcFZBcVZsWlhJeWNuSm1CcVFKUDVTTzVYNi93SEYxRm5aOGoxaXh3QUFBQUJKUlU1RXJrSmdnZz09Il0sWzEsImRlc2NyaXB0aW9uIl0sWyJzcmMiLCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVRZQUFBRTJDQVlBQUFEcnZMNnBBQUJNQzNwVVdIUlNZWGNnY0hKdlptbHNaU0IwZVhCbElHVjRhV1lBQUhqYXJmMVp0aVc1bFdVTC9rc3JvZ2tpcUFSb0Rpb1o0L1VnbTU5ejRpaU5SdEk5SXZ4bG1sSUwzbnV1Rk1BdTF0b1ZydjMvK1grKzYzLzlyLy8xdktta0srVzNsbGJLelgrcHBSWTYvNmozNzc5Mi9uenVkUDQ4LzhYeTUxL1B2Mzc5K3VzYmdiK2puL3g5NCsyL3Y1L08xL00vZitBZjkzakd2Mzc5cW4rK0UrcWZDLzM1QmhmK1BZRjM5dC9yN3cvSjE4UHY2MC82YzZHMmYvOG9yYjUvZjlUeDUwTHp6d2ZQby96NW5mNTZyTjlmL3Yvclg3N3dza29yYzZNWXdvNVB2TStmNmZjRThmZTc4L3M5ZndZKzkvQzFIbU1zRjM4OThmMXpNUmJrWDE3dkgzL2Y5OThYNkY4VytSLy91djU5OWYvNjE3OHRmdWgvdmg3L2JTM0xuelc2eTMvOWpTZi8yOWZqWDdjSi95SU9mejFSK05kdjNDSEYvM2lkUDcrL2I5WHYyNyszNjBoaFMrV1BSSjNGZnY1eEdUNDRXUEo0ZnF6dzYrVjM1dC92K2RYNFZlOStUN1o4M2ZNZS9KcFBld0s3OGwxUGV0YlRuKy9aNSsvNVRCNHhoUjFlL2c1aGhuaStWdU1iV3BqUmZVcitlcjd3eGhaWHJPemJEUHRpNjFJTWZ6M0xjKzdienYzbVU3bnpldmhvZUxpWVcvM2YvcnIrZDkvOG4veTZ2bSs2Uk05ZC8xb3JuaXNvMXp5R08rZWZmSW9OZWI0Lys1YlBBdi9qMTUvdHYvOG1QNGdxTzVqUE1sZGVzTi9qZDRtUm4zL0tWano3SFBsYzV1K2ZDajNYdS81Y2dDWGkzcG1IZVNJN2NKY241cWM4OXh2Qyt6eXNZMldET2s4ZVlncURIWGh5RG91SFJGNWlDZGNiYXZEZS9NejduTStHSEVyd3k5Z21OaUxIZ201VmRxaXpXU2xsNU9kTkZSbnFPZWFVY3k3NXpmWEtMZmNTU3lxNWxQSVdqVngvNDV2ZS9KYjNmZXZiM2w1alRUWFhVdDlhYTZ1OWhSYXhnYm1WOXJiYVd1czlYSjBiZGE3VitYem5LeU9NT05MSW80eDMxTkZHbjRqUFREUFBNdDlaWjV0OWhSVVhabUtWOWE2NjJ1cjd1VGFXWXFlZGQ5bnZycnZ0L2lGclgvelNsNy95dlYvOTJ0Zi8yclUvdS9vZnYvNEh1L2I4MmJWd2RzclB2WC90R2wrOTN2Y2ZsM2cwSjlrOVk4ZENldGp4MXgxQW9JTjdkdGNucGVET3VXZDNDeWhGRGp4a2RtK3U5YmhqYkdIYVQ4amY4OWZlL1hQbi9xLzI3Y3IxLzJyZnd2OXA1eTYzN3Y4Zk8zZXhkZis1Yi8vRnJpMzkzRHc3OXROQzEvU09hQitmNmFGZS9MNXYvdmpyYng2cDdwN0w2SG4xa1dkZXFhTWk5NzdmRjRmeWNObVpZbjkzdjFOWU82VXZocFRlSzliUWE4Wk81YStOc2Q1N2JOYzhzRFp2K3VwVDhGclBkcW5penBVMXJuMitiWS82MUw3ak84dkhoM2R1VjRtNHlCRXdaWVZscjJGekU0eGYvN2hvU3l6QnlPL3FmYzMwM2pQdzFud1hieHZZMGR4YS9ZbytPbzc3WXNPL09ubVorTDVmcVd6RDJobWZIc1lJdmV5TVJ3UUlQTHhsbmFPdHROTllMZk9jdVlYTXBuN0lFd0pVcjRFUlhwWG5DcW4xUFYvZXVlYjFmbThyOWV1MWpQWStYMEVvSXErNVcxOGRPOU16Ky9IdVozQ2hOMjA4d1hzOTdCNHVvdll2NTQ4djFQeWw4ZDFuVC9IZ2RjZTYyVS8ycnFlRW9JNVVTd2hydHZmRncxUldaQjNkdWNvN25sMTR6VmxIaWp6TllBay8xQUlkd0g0OXBha01uMUw1N2Z6bCtaWEpvOFZudDd6MnF1K2VIMXRjVUpGNWYzM3R3ZDUrTWRZNzl6QlN1dG1kOTVsMXphVVhXdC9kZWNiOERsNXZmVWhQV09OYisvbG1yeXU5Kzd0NGlxeDQ3UGNwNzNkdmZNSEx6OHhSMm14WXlQZDk0c2F2enBCdjlndWREM2ZKZGFQckc2ZjI3SW5FUFN0Y0kwMWVrajhpdCtvKzloZm5qWmNiM3JPbFhka3lkaTZ1Kzlzam9Wbzk4WWc3c0lNWWx6SkNyU0d4L1JPUmFDbjB2VldudVQ3V2xsdVArYjBvM1U0RnVZajM3clBpZFhkZ0M5QzV3YzY5TGgxWHcvWWdGL25DUG9Ua3hTcHFGbmZ4L2R0dXdiL1hOOC8vZjNwaHM1Nm5aVFM3M1RFMmZYZ1liM2kvMkhkZUk2MXJMRjRtM1BWTHJHRmlEenNPS2JjUmUvdFFjT0J1VzJOZ21DYmJ3Zjh3Vm14VGIvRWJvV0Nwa0tuVTN0d3ZmTk5DTXdjN0hWSkJxZ2VHQjdBQXNwdklGelp1YllUanJldkxBMlVaZS9LWU55L2xEU0pyMitabXQ2K05UajF6RlV4YlExYjd5bHZkZjdGSTkrQlJFS0cxUUl4ejhyRTNIRDBzV0krZXhoeiticXYwOWFDMDJpYmM1NDVlTGN6R005MnJwcktScjRhdGlieDFmN25MZzB6c2pxbGFxN1FXTUZBcGxkcnZ2TGdPeUw5aXhQWWNEeVlaUk5YQlZ4R2JJaTVlNmR0UC9saFdWZ3ZKU2JraU1hM3hrYlhxTE9sN0VOUVhGVTF4UWlFKzNqUnJUQkhWK21Jd3NBWCtMOFRCNXM0K1o4UWZvTHgzVGhnbDlCZ2wzOXc5THBUM2V3RjZvUTlzZHJ2ZFl2UVQrTVhiOCsrWSsxMnd6YkgzdDk1alloZmkzZG8zSzR2Q1U5MjVZVTE0aFRsQi9yRXNsdnZDek1YTmpzeGNucFI3VFJqcThLUTNJSU1kTHFDSHV3dUxneWZJZzQwYWhlY2N1d0ZXeHV4bGxZU0hBRVRVbVBKNGNrVFVKMnBYc084VDNMcmJmTit1TUxIM3JPUERzaURzdlBsdUdBM1cwVjNFcDdFay9VWXZMcGE1cE1ETEQyMUw0c1ZRSUM1MmYvNTRYaXhmd2dFTlJHVy8yTitNU3FMMGZLNDJibzZ3aDgwRjl0VzRZNHQ1cnJjTzFCem5zSEJ5dURLRUR1L1YwZmZZNTUxS0tNL0h2MnY1VUY5TU9UOHhQOXhGM0R2anhhRlpHNXVYRTUvQUFLWStzRTY4YnVVdlRENWVBdUY4ZTZxajNCT0ZCbVVETmpGeGVYd0ZiVVlpTXo3andXV3ZoUnRwWGg5bm05N2FlbVpWMFFoV0Z2SEg2bUtHZmVmQk15TmhyNUx4ZklNbmEvVjQzdlcxV2E5SEN5S3c1eG5SRnN4NUx3RkJ3STY2L0E4K0d5ZVJ0SWpOVmVUYkJiRFBXN0RTN0ZoVDBsNFpwRnVNVVFOS1lIa2p0cFJYeTFoUlZpYS82RCtDV1ZyR2tDTSsrR0YwclFxbnY3bGJTWURSa2p2T1pWelNndzlHOElZUlpzVUF5VlhDOXVJZG1VSmxrSjVVUGtES2hpdjBnWWdqSDBYUDlXSE1jWWhMYTMwOXFPVVJwWFhqejlhSDJyZHYrWUg3UXhLaEVBVVFrR0NtTENieXhZOGhBN21pTkI4cnpSODM5dll0MTFzbkYwY0pWd2U4N2JleUl3cmRNeFl1ODFiZXNONVR3SUF2akJxMnIyYzgyQXg0eHc5UitmYis4Q0s4SytnQTRJSVJ3b2hqOFlCbGoyNmQ3V3Y3Z3gwTkVNOUNLRUZCS0M2QzhHMFdQN0o2SDc0Qng5QVJodXZHQ29SM0RGejBERHpqM1dOUkZWa3NTQUtQMnBDRDJZb2NXQlB6WWNBQk9Ed1M5OGFWWWtqdzdSSGp2M2paamRGSndDVllJVGRhZU8xajlNZUdaUDM5SnhyS3picC83NUdma0F1N2dZWlhEUGVGN2VVaURTZ3hwRVRsUlZ0QkZHOTlYTlZieGVkR1BDdTdFU2FlVDBjTGF2eGFqZ3BPeGcxaTBGOEFPeVlVQlh1ZlVQQUtlQSswbGdzQXk5Qlp4SGgvZ3hYTEdLRGVubmV5K3FrOEQ1Z25nVGg1SWxaUWczYTlFL1BMT3BaUFUrbEs3YWNDSDBabDYzc3JlYlQwRnFBVzBvaWZIamp5K1FEWXBqR0NxcmlpM1R3WFFHdlA5dUVBRmV3RjZzR2xjR0hVRkNlUGlSTTVndDJ3VDAvSEZVajlVRHBzVlB0dXR2RURmTU9Obm5JMW5BWXFnM0haQmJERjVvQWZzVnFaalgzQU9NMTM1MllWZzg0LzhYMlFYY3dsL2pHT3dpYmphUkhBZENIdFNGbGNRVU1PbW4vVGdpRUNWc1E0b1VBcWNvQktsSXhqdUpWdGRBaVpQOGdETkFFdUwySGdsYTVibUlOb0taTVF4M0dXSGhkWGdhWW85WU92QmdLK0dHTitQSlNXbG55UzF3c1pnY1gvSWNaM25lbWFGVE8xVmU4bXdjZER4L3VOMEZYV1RjU1IwVXpFSFMvT1ZvTlhjcGh6QXdyeGlZSEwzQ3c3TnFpVks3SUhXTGdHL0FNN0k3MW9PU3Yxdks3eWc1NkhoZy9EK0FZd05nUVB1UHNoZWVLdG1yazVxcFVnVFB2cTZCUXdJUmVjV0FJeklBZ29QcThGT1lZYUpZZ0hkMEh5SjJDVkhaL0lGWmoxdzNOdnZBSGZPVngrWFZpbXg4akpDeVg1eDllUHZ5NTFQVEtHOWZzQUZ1VHZINW5IcHYzdEo2Ly85ei82cno5NW5SL2RvK1M3WWd4N2F0aWVDSnFjWTJKT1lTbUk2SVBSaFphQzlMRGZDR25MRUlDWEhTcWlrZC9iWHZOSUs5Ymh4ZTIvOCtBQWRMVCtZeVYrMzRCRitDMlY5MEFaVE5ETnphS2F6eTNuVGhjQ09QRnlvTCtBSG1GdFhpQXI2b082SHVUSFBrSms4Z3NkMkYySGt6SHU3S0M0SFVCWC9mUERNMStMN1VHNzN4VUVkZy9NQU1VT01zOGN2VFdrWmVEbWNXOTR1dyt2SkU2TGdNUTNkamowRFJBZlJqb3VjSERCR1dPQnNac05nY0dBaHhlNENLWm1LYmduZG0wQWNnR2JQR3BNY1dnVEVxaDFwTHVCYWhOeTNPTjFieTRGcWNHUGJSWm5vQzJzQk9hUGp3VEpJSzQrUkZ3WVZvbEhHYkFqckxEUlQ0aGpiM3VQdmRhbzMyWG9DdUFxb0ZMUDBTelVEWjRjV0JBWU5adGJFbWF2cy8wTkdaMDRwcG1mTU1TbjdEUFVHMk4wZi9tcWNHdUFKZENndmtwSmlobjNCUHY0S3A0NUQ1eCtydHh6ZGhGWVNWS01oQ0dhK203czBvSTJMNjU5VFRRU1NsamZJVHBpalhDV2NUenBHOUQvUGxnMWVQNkh6TUNTeDFmeGRqc0hIQlppMVdTUkQyNityUEZnMkxqekIrd0FqZUJESUFqdm01OThLQVIrQWxTR0NQWENZdDBpL1RkTTlMNjlBVjVRUlNKdzZ3UmtYeGVxSGZSVUJidUJ0SDFmKzRQSEFPOXhZNWphRVZoZ0lkWXN3bmcvWE5QODhEdm9pQnl4QXRUWnp5dGovUnF3SDZ6K3BNQnQ1ZUxuaDFHS0cvekE0K1hJM21ON2VDM2VuMzFubFo4TUZvcEE4WTRGRGUwRnNiRWZRRTJlQTFvQjJVS3FOb1JpcHdSNVlVZUN6QXVVOG9DY01KNll4QWc5d3RtaHVDelhEZVNTb2x6RlhjZkRBWFIxbkJtbUpibzNwaWd3TGVnZnNBR1V6dTQwT0lBc21wL2xIYll1YWNKOU1XUGh1WDc4ck9MdG9KYTd2MndUb3BCNWQ1VDFabFZ1VER1MjFUQUdEQjZ6Q1ppTE9NQ2huMDI4WGtxbzdydzZJQnRFaGs0VWJTK09DSGpUV1V6OENZNUJ6b1RvWWVqaE14MUVDQk9GVGtpMjJNNEhhQVhrZkRSc0NUM283eDRzUFJzeThLcUdIOUNXRFBERGMyRW5CTU0za09jYjJBQnNUeEFuZWowZUwyRE1XYjN5WG1VamU5c2NBekNzMyt4U3llOUJoMi9HdjdGRU9OWlZXUkxqYnM4TFRPa2JHN0x3ZExPQWpockVtblcvUU5aWWlpQlpLdm5CaVJvMUFhYkEyTytXSDNYemhNTEV2RGpZd3JPM0ZjTXFBRng0Q2VqdlpRM3ZjcTNxSG1TbGNIVE1Sb1hpSkw0SUJJMlNZdkFOc0czaGpZYVNBdHlJaWdXaTlPb0gxUW53ejQyS0hDWVBtTUpVOFNCcnZTQjZsQi9oNEw2YlZjS0pZYzRDQ2kwWkc1V05CY0hOVzdXOTN3RWhoRzdzQzRJTDlrSFV3ZGY1L011ZGcrT3pZcENxZ0kxR1lQa1NXTmVRNHR3dk9CZWJuc0V1aGlSUVhBUzhYNENZZ0YvQUM1YU5QT0NLdFZ0VG1NRHl1ZXlvVGw4R0NtS29idzRxY3BlMnNtNExFUXlWRndQNnNUZ1lEVVFNdFVSY3VUZXlFUnFNSE13R2FoQ2xWR3c4SGtxdml6MWx6WkNNelRibWdUSFJoT1BicjVNNkFhQXZzUld3Qm16NUhTZ2RjQ0RmMjNIdXJDRzYvQUVPY0pPZjRmWVhIS2tDQVg0MmN1Sy9UVUpwRU1ieFo0TmJJZnBZZm9CV1FMNXF5TytFTFhXOERsNElLNDJkbCtrQkdQazhKQUtXaVZLOXo1VmcrVGphdHU3ZHE2ckFOcUlEckdMSUlqak1icm1CS3dOZXQ5bkhKUDJHb2Y3alNmN3hJTmVmSjBFUCtyR0tCbjBFMVh5SzNVRkl2N3hPZkplMWhnMFhTRFBZQzhWaWRlSmROSjYzRHYzS01GZE1yczVBRXQxUWJYNmcxSUpBWTdaaGM0akFnNmJmZmNsWnZ2TG4xbmp4OVAzejl0ZmY3eDgvd0sxb0F5TEtBcDBGN1N2ajBnRzZCbG1rUWMzb21ORS9CYlBINTJ1WXROd3ZURnFTaWhiSWZ4TkFnOEZiZERGbHNDOE1EUG4rak9nbTZhQ3hJSmdqdHBVdE5jUjlGbjIwY0NVOFVPQ3hmRGZNTnFBVi93YWlEcytJUU9JQWoxUm1jYWI1T1NMellzV2hWTU9jNE4vQ0dwZHhqZFlibmdIZmNvUmdISkFsc1AwRHQvNXRmLzdyN2JuKzJoOHQvd0NCNEN6eWcvK0YzK0JaRjZRSEd3YnN5TFZnT2xJNFVjVWJwTERuMFU4ajZTakx0YkNRYStiS0MwekRCZ0hsWWRNYjJzYzJicnhVbEZzY29MNm1pQXQrTm5CNzZBQVB4eGFEVEZoWUxPUytIeUQ5MHpvdktNM0xFM3M0MEV5TWJOREh3MGw1NmdlSzYxN2lZOS96cW8veDhyMzdUMW11dTVRNzdxckZFeGd2dlB0RUd5RzFrcTRURTRPWHlScll1eE9kVG51QU96NXN6RjVWNW84Q2xIcE5IQ0hLWFRMd3B3Q1RFSVEzd25OQnFCQVVLSGRmVDNCdEIxNk42L085VlFXdWZDTHlUT3dydXJrMEk0anlQV0RBS0JSbW1MWHBFU0tNbTB3UlVJSGx1Q1Zhc21EZUh5dUUxUVVsU1lDZVZlSEtHM2YwakF1RU53d2FHTjFIWmhkcUpOVjh4MmQ4R0JRTWJPblF3aGhpVWRrTldBL2o4SzlCbEtYeGI2dUVkU0hOTUdtRG5Ed2prZzFkZ0thT2IyWWM3YU5aNkJXeWdLeGxLTXFlMHFHeXNaUEdwa1BTbmlKVkkxMUd6bHBubFg1N1d4dE9RQWdIcW1oUWQ3T3JyQ0Uvelpla3B4aGhRK25pdXNERmNaVGdLL2pLVlJzVzJEVDMvYXBMb3J4dkYwWFlUQVJNc3FPQ09JcVYyc2J3c3pOQTA2NVMzRkJsdkRyUGlud1lRS2g0aW5yamJpclVxT25raGlRS1JJKzNpUk1VQTdQN01zdUNnWTN6Qjd3Z2VSR29rbVlBOEVNbzZoVkVRaER1bGNGUCsyQTE0T3YzYmlRYVVpd0kzem5pOHlGbkgxcXc4Ym52QjVUaEpoK1dISk5UOEpoVHhKYkJIK3JzUE9xNGpTMFhWZzI4T1NlMGMrQWpqQUZEUW5HdllHTjR4c2RGY2VHWXpGWnJpZERRQzE3OExwZGQwYTA0RGZnUnEyaUFrNFZQT0dXZUZ3K3dZaDlyNTJXQXc0MVBPck9HRUppb3h0NWY0Snh0M0NFMGJyaGtMM2xVMEUweUFZQVRPK0lYUG53c1duaVhiNlBhS1R6b2Z0WG56VGRXZ05LYVY5MjRiMURZbDJ0Q3NjRE1DTzhOOFgxZ05pdHh1N3FCT3hEdS9EN2dINU1uY0RVdzJNMXRBQXREM1dueE1qUTBaY2NRNm9DdHdEd2x0UmlTZ0dEK0kzUmZzVTFQaHRpKzBFaDBialhFUndlUVZvc2dqU2RmQVMxeVlUZGVlRWltOTZ0MTI1aUNEREsrTzdnVWZ3cnZpMGEwUUxJYkMzaFhjekdGSmZwKzBQN2tSWkJnby9PUEllMG5KYUF6QXNVK0JoMHkwZzNPM2RLQ1J6ZGw0bjdNOVFCSmNWTy9uQkpMbks4aEdETGtnUkZwaUJ2YWJqRHhSSStCSlZKWUVGWXZFcGtRVVNIZUQ1SEZ0Y016dExwUVg2U3FYeGlVa1JBRVZnRi9OdlBocjF0bkFMaUlRcldGSEdKM3NSY0w4OGJydzlJU3VBaWZlWnM0ZUJhVWFGKzZTendIMndTSGhvYTJwMFlBUENKeWcwL3lFWGJJTDZ6dzQ0RmZTQ0FmUUdLNWIwYnVRZjVnUlJ6WkJYcGNieXFEYjQwSi94NzhSalc1aEtIbkFxb0VSeGovdUxHendNY25MK0g0L1Z2aXB4cWdXeXc0K0tpYXQ5ZWNpWE1OdjJoMHFrYkpid0J4bnR1ZzI5MTF5WWFsMEg1WTJtNXhQWGxHSlFIbHVNU01ZS0tOMFVSV09oQnFwaStFYm5YTjFwMXJ0K2FTR2d5SkFQaVVaY05oY1MrTWNZakJqRW9HUkZTd1pQOFA0UlBuLzIzZE1BaDhNR09ySS9BaG9vV1ovOTdYZVBhZEowK0s4VzhtcGRDeEpkbXl4Q2ViSkdXZkRURmhGZmNHNjBNUEJDYi9manNFOHNjRDQ2VTR4bi9lL2NGVFlDbnJNSTJrU0p0clN5Y3FBaitCZE1TVGhHTFhhOCt4Ui9OK3JZZnhYcCtGTGJWalAxSFIyOWcxUk9NRi9KZit6OXVkdTAyREFGdDRPdXVCRUR3UTNuUGh1d0JQRjhKZkUzZ2Y0SVE1eDhzVUF3SjREM3dxZnROMFg2eVloMSt1RDdNWmtzOHdOL0tCUWdCVnh0RFdYUHpiVDZZdllpaTNBZnp2WkFsOTE3TWdmeTBIK0pnSGlUZHdQT0NDc1cyNDFsWngxWERrKzJLSHh6M2h1cmp6cmFpQk5iV3ZrbzErdGg0OGhkbHIvNGViWFArNFN6NFNBVWptM1lFR2FMVUxEOFpENFRDWXVMc09UOG5uOFYvQS9NdDJBQTdteWZMaGZDN2diUnpZNTR4dmVqNFVHb3ZzbXM2VGpmM1hCL2pidHYvTGU4WWFRUDRzRFJ3REl3Rml3b1ZrVGZHSjZXQXlHOXVDRFVIWlFaZEdrYnFrNWUrN2gvWEMrdlN4TDBnNldvbFV5dEFOT09LWEkyWVZNWmJzakNkQzVORkY3REc4NTMyQnYrQTVKS2RYNUMvcXZrenhLWkQ0YnpZQUlpU016bFdhTnF1R3pqaUNGQkZZQnJvcVg5RUdoWm54UkRqdzl5OVFXaWFROFNyQ3VmRUhtcU9WRTRxTFA4VWxRNUFiMmdRVktDK1diVXYvYnBPRnoxR0NabUprUDloUmRIYysxNUJjR01xQnd0enhYdWptTU04SzFvVE5taHpCaEpaM2M5Rzh6d2FBUlQ0enRaQWhQMzFqUExBb2x6NXZtT21ZK0lOOUloRGNqMlhHeDZmNjRXNHhsU2JKd0NhTlp3UTVyY0x5c3VLc25RVmxHYVRSOTJYQWNuMG1ia3J2WEFWbmhJaU1lbWRaRlR1QzZaOW8wSy9LWmZMcTIxZ1lQamF6UWRVOHZrWVN1cjRUeGlQd1hpYlJYK09kNFBScFRka1RQak5VOG9yZXNaWGJJQnY4MzJqWlNRVWE2Q3JyYWV3UHFMWUI4aDgwZnhnOWovMEJFTEd6Y24xY1NHZGpKcVprakNQU1ZVSWhpREFTemNydllPWTRocThIdkVnNzlZbHd1ME1sUHJqbGhMc1ZUR1FHcFVXcjZmZ1paQzByS1ZQSlI2WndhOXorUzVnU3J2Mll6bEE0VFRWSGxwMVZnU3hiaHZDTGFZSDd1NVVqM0RzTmdCNTcyTER5TDh4UlB3aGdCdFVDTFo1OVJlQWxaQ0dEeE9SNG90MjNJWGxKWklodkxTdkRxMXFZNlFTbjJFeUFDK3lETlRTK1h2UEo1RDJtNlJ0MExCWFRHY2FvOFMxY1RFdHV2WU4wVlN5cytjUEhyRU9WWUlOZ2p2UWtCSjM3NDIyeGtkZnptSFNva3gzQVdJeGpXOFBQKzhLanVPTWI0SU1MaElDSUFIQlJhTVRydFdnbWZnQXpBQW52SFBjRlJ2QmJxSk5xdytzaGpMTjNKQjhvQmwrdGVMWnZRZUdXZ1k3OEdMSlMvLys2NDdtZnlVejkweERpb3lUb2RjVHg0TEFnL2pIaGJzVmhpVjJER0NCSCtIU1RnUG5GVTZNQmo5OFB4a3UrZmpYOE5ONW5BblhhKzVqNkJDV0M4WEEyUXFCUWpBTHhMbENXdUZHa2x2QlhKOWxkQVErZ3laR0tNT3JpVVlCd0E0dUREdDVZVThnQ05HcURBU3JZTytYNFlMYVEvMmNOOXEwY0hnYktRWW5CNFA2NUVKaUpQZnBiamtIY0QwQkt0NG5vWDhidnh4VWp5cHpMNFlxWUdmalJCL1FCNUpna1MrOER3Uy9YMXdjWUtpMWVDU2tDSWdMU3A3YnpPWWtIeGRtNm9CdWptdzB5Z3preGozbGpKdzJyOFB3WStyb25oaTNrb1o1dU1XMHlWN3RNdTNmTE9VQ0NTR1FVdExlbDdSUm5Md1AzM1NEaFNVekdYOHIrMHZGSGpPVUh1TTNscERSK2JQN0J1ZTRIQk1iM3Y2YVIrcjJNMG94d3ZMb0JNVFJlQS9xTzBsYVVITitiSVNuV3ZTQ2tCaTd4aVR4L1J5eXl0VXlnRi9CQnJnQ2h1azRCTlVDTHI0RGg0YTVKTk5KTWVrUlVKUFZYVHplTnpnRmFVNDl2d2lJaWdZWWhlU3VVdmNSa3JBNXZQWUJJMGJEY1l4WVJRbnhGODVQc1RyQktSY3FLalZZTnhoaStoN1JCcnhLTHNWV2NTTVhaWW1DeExqaTdjcTlmREtDVUN3c0NyVGdMRmtvK1A0UVJnT2dCL2pDL3JBK0FBNXVCYU93RjhBY0NBcUVtR2phd0pwZ1M3aHRHWFNCL2ZLSkpBTmxOUlJSV3g2RVpOK0RkYmpsQ040akJicUhYVm9weHp3UytFbTZNdjczNEJVK0hHRm1PdHdZdzRzRk9mTUhhRlRnak1tNGxqd2dKbSszV205RUFxeVFnR080WXVDaGVoSzNkMjByZnVBQUZ0UjVCNFBkU0g3SDRIK2dQQUc3cXE4UGxBK3hyak00aWxjejZXRHRpNlZHMFhNRDgyZ2N1aEd3K3hnQS85dVhCcVBQS3JHUnNRMFdDa3FOZ3dMSnlGcTJlOVFQUW16cWYzSVJyWVJMcTFhQVBrSU1ialc4dzluTFNveDlXRVhPSDgrTDN4cDRNakg5OVRmbnZDbWZsZmdLYzIwVFc4YjRqWHRFUTFYbVg4UDZXTUJzVndIWkIzVzVqN29BdGtDTW9CRVNVZ2hsQlNCR2NXNS95R3ZaK2tKNThJWmEzRjBMZVlEd3NVTG9iajlqUjduYkNFam1mdEJhMElxQjdWaXhpa3RrTHNhakpVdlBGT05lejJKWEw1SGREaTRlbEFZY1ZRU0JBRWF3S3lHNXVFSXFBUWJMQVhtQUxjQjVJc01WU1pSbzltWmVSUVpacytkN28xUnJzY0RReXRBeWU2VG0ybVFjNG82Vi9vby83TTBzeEFhdDgwWW9qci9kZE1JV2VyZUVTTW9kYWNJbzMxczJ5aHdTQTJQR1lpUnRuQXhQY2x2NEJDbnZkRFU4Q1dNMElHRVJ0dGdzTGJFUkdlSmg3TlErRlBxTG5HTFo2U20wQXl0V0VOSStYWXNaNkEvQkFoVkNqOVZoU2NHUHVNQWlBQ0o4SDZHRFdMWnJiUndicVFoYkJUK1UrSmRrWnNqMXcyaGJJWTdBTndBRDhkVVliRnkzZ3llT2FXSWVOQi84c21RSlUxMnJBUWIyTTNDSVhnekhmSVJHc3RlbDYxamRYby9pbXdaRHFWSkc0TmkremY1dDdmNERLOXZaaTZHcytJRHVYR0E2QUlOekJNT1g5amZHcjNMOTNISllWQ3NuTnY3SnFMMDhVNzdSUHJTRWdoMGV0cHJjTTJRd2xQT0NkTUtVR2kzQWNpYlY5bXFVTXhnaTNWZWdBc1g1cVF5K3NNcFRLekUweUNtbHBPbERBU2dZeGlMY0hZbVJFeitvQjYzYkFRUjBFanMxN0UzSTF1blVYRDd0V1VUME1NRGZNMnpJelh1M1JqbjI4UGpDaFdTZG9jQTJ2MExSZFlMM0JUc09WbGNOVmVYYkFON3EydDZVVkpvWUFZNy9rUE1TZWEvbyswTGREQTVCa05CYy9oSERMQkxKNTcySlFOb1lUdVYyc2tmZ0llUVludkJWUVBqSkVKQmpEZkRBZ3dMTStoNldURmVqRzZrSUYrNHVBRnhZWkV6YjdBeUR1YjduMkN4UkZiZ0EyWnJSYTNOTTBtcFV2Z0IzaklkKzB3SEVhY0R2NTBSUGJUMzU1TEdReEh3VDJvR3RUSjQxTzdveHQ0WGRTcmpWOGVLWUVlOENXM01naVd4V01WdFlwU2VhS0FsM1E2N1FjTmdmcklRM001WEkva0JaV2hFdmkrcE5PYW9mT3ZyQVh0NFdsNzdES3cyenVsRHVlY0hzM2pKaGVFT0ZsTmVTZnJFUFYxa2JyUmZqaUwxZUwwVFNDekplZzVjbXlhYXRXMUFSNWk2V2UrME1KY0R3Zy93Y0VCUy9PMll2MXRuR01PTS8zUmErbjRSS1RaRHdRV0FBRDJ3empyMmd4Z0xWalNpVk1qQVc4MHZydkh2YmZuMVZUYlREelZ5TVJiaFpDN3d3UVp6L0RaWmhMYVR4MW1LZzlHS0Nua0tCKzBEUTBLV0NacGd5bDUxTyswR1JCVmpKTlhBZG1Ca0lGQTQvcENtd0NnQWhROWVpcXpCQWExZWFudnYvcXFmNDgvbC9KalQ4dk1QSmwwZnc2M3dJcEhCdUZtQlJjNllrQ2hjT3RjenN4M21DVUVvcWJtb0YxSE9EM0V6TGp3Zmw2MVhkMFBJckhrVEVBeWR4OFNzZ0tsSHQxMDEyc2dyeTk3TU1OMTFxditCV29CL01HQjdNb3NLT3EyWVA4VDR2cUJDalZOSElDL21KdThzbGdKK1N2WWVzQVFCYXZKUFBxa05NTUdKbFkrRzRjQjNka08wRDY2VWI0ZmtwUWZsVnN1azZBblJVMXI3c2FUelhiOGF6YjZrRTRMRitZRFNkWjhnVUJZTjlnUmV3WXptSGpBbmx6WEhFQ3lHUFo1MHdnbmhNUldzYWVIMnM1Z1IxQVZaYm13Nyt4YXZsYjEwa1BRRnh1cUhUYkp0T01oVUFzc0grUHhaTGhHMko4bnE3OEl4bjExNk1kMGpST1U4bUZoRXR1VDJ6OXMwSmxHUWxvL3JpUDBIbzB2NkkxSHZoTXN6bTV6aUFWVXZqNXMwNDg0dXFYRnVqR3dUYXd1dVdrMVlMbFZYaE5pQXQyQmM2RUh3WlNscHdOQ2NrT0FpNGlXL0J6M2hIT0JBYStEQTdNZitUSlhPWHh5NkQ5YzVYLzgyVitVT2JGb1lsc29rYjVRWTRPMjhERUE2QlNNTXp5enZITFZvbS9oQ213aHBGWnhWQnV1OFFDNjgxYW5DUkNBd0ZqUHRFMXl4NEVJVkNiKzFldkx1ZEZzd0xNQmljZnNSd3dDQUFsUUJQNkF2Y01tbGFXaDFkRDlMRmFzb01yS1hRNG5BZEVpSWdpaWpDQS9QNWFmVjVERWMxQThuZGFackNTMnR3aGZZYnlCMUNwVFB3R0YxNUdPSU5PMDRRRmFONW1rLy9wcW8wT3AvMUxPTlAzV3pZWWJJNTJKeVRRL1lpamJMTmtKcGZTdEpRQlMyTWR2dVd5ZVJvZEttMWo4VnpzbUc1Z1dNTkNza0R1UFdhUzJ4c1BBMzBYaUdyRy9YSVIvQU9Zb2dQTit1RVcxb1ZEN0VMZ0JhOW45T2VuWWN0V2pHS2NnL1VWclUwNDlyT2EvbnZITzFjdk8wVVArRGFjTDVRWHNIbi85SE9mcEhnL0pGTmptdUl2NEcySjJIRzEvVFV6S1RWM0RmQ01acFBZNWJidUNlZTAxSHh1Q0NPNkZxcmRWY2JPY1VDMkpKZzNlMW13WllrTW9CMUVqZ3V3akJta2lnQmFZR1kwNXpIcmZVUlR2M0VwT1hIVzMxNTgzQlVlUE8yQ1lUMStYN1BraEZkQWhJOFh4VWppUW5oM05nTHppRU8yL21GZUZyN3hxaFhrcjc0OXVNME9vUVF2c1Y3TE5FblpBOXFDRmJFYWN6MW1IaXhtZk15K1ZlUHQ3T29ET1k0NjBQRWZxd01xdjMreWhHRndFYlg4K1FDVytBdmF3YWp2MzRMWk9IQk4yelVSdTN0TGFSQXZaQmJNaEttd3pjc2FJOGpEampnUkMxOTdmV2Y4UUkvc0t5eENYdnZsWW16NytsanhhaTJMelNSWlBwdngwYmZ0TGkvT0FlLzE5dnNFVlgydUIzS04yMnRZbTEydEFVSEYwVHN3TUo2Mnd3M1JSVjU4V2M5a2p1WlRwbUlwa0M0QlNZVGdQbmlhaWRtTDJDalFLMWJpQkdhbXhkNUFMeE4xMml6OGVRbWdKTU5LcGxUdmFtMEFVTHNBWTRWWXRoeFptd0pJKzdSKzRLenZUNUxsdDdzWEx0UTBtWjRudlBCUGxobWJ6MlpJK0FNcktWNkRackhoRnYxSTBvSEttUFFuVnd0ajd0ZmkvejJ1ekRmYk5vQWM1ZytUdlVheE9raFpKQUFUQ0xZbHhYeHlXZmlXK2t6SXJFVlFBZnJiakI1YW9IOHRnQVVnSVNCZDFlUjlZWGRuTFR3RkdQUzI1OHNWV0pZSmdqS0xKWW80WHcwVlZoWEEvaHBWZzNkY3I5MFhjZ0owcWhpUmg4RStXaXBUTGpPQ1NOZW9keHNOaWRnYlc4bHF2OFppbzQwVnBXTlN4b1BzWHRrNkJIemQrMkJ5Z2xIQitTdkFRYmFCRzQvMTNValQ5QVhaZDVNSXNCbXJkTmtIYkhoa2I4Q2J6OVhNVkcxb3h5bTNoc3MrVm1qRENrQjdvSE13R3JUaWZubkJ0NTMvaSt3OHdJZkM0NWI3eTgrbzJKUUpZcHQyUFVCcWpvdkVmaUVxN0NuSU52Q0R2QWI4aTMxL0Nnd01lbXY1MHdPaGd5c0F2bkpHMEFPWUxkNlhqMnpqajdsTWtOakhtMWRiUWxsTGtWMHhEbjRiZGhrbm1vK2t0bWJlRklsNVBvc1dSQzZQRHZKVEVjNDJjbWZ3RDQ3TnFzTXRSOVNzeFpQWHQwVUxGTmpFZmJOYVVNSUw1OU1qOHV3S283dXlyWFFEeTEveUNDZ1M1aXpmS1ExZkIwYkFRMmJjOTJNczB0b1JNMVJ2ejZlMUNkTTVnRkxSeXFyN21paE5BcXdIaVNEMk5PT2EwaTgzYW1yZjZrbzA1OWxOeW1SZWZwWmZkVmNDYzMwTFd3a2wrdVVnc1VVL2ExT3M5VWtuUFduOVpZVDkzeWM2Rk4vL3ZOamY3bm51ZUV3dHlCWklhY0V2bG9WZGVMSFJvVC80K1JmOEJhS0d0UmdOQk12SUNic0I5OWZvaUltUmIwNlVOVi90Ly9LTy83d2grQVlUdml4RHJTYTg3YzVGYWEzd1NSSFBnREIydUdjSGZleW84N3J4QXljYTlWb2hnYW5VdW9TVFBaQWduU0lDRVlOZUNRWlpRSGw5TmE2UC83VDdnMGMyM1JsaHNSRGZvVnRLRWR4eGVqOHdVYk5ZSklXaFJ5Y0JlQmxrYlJFdHZoOVl4N1hjL0lCMVEyM1JWOVFPbWRQNk50OEQwcCtSLzJVN0ZwK0hwRTE0NUVKYjhaSmNHOFp4d1NXVEtkaGZLOVFHWHFIcEZ2MW1TR0RoU3NzTU1wU1l4MEJoaDJuYlVYRExCWE13Wmg0R2NRVVJ6ekJuY1dCTHNYQ25tVHAvMFVVOGNMYXdEM2lDOEQzUmN0YmJMUFJ0bjJOUGFMaWhTalFScWxXUTdGUWI3OXZTblpHemQxbHpjb3YzT2g5ZkZVS2F0dlY1Q1JObk1NeGtxc0VHNjlnQ1hzVU9UdnZQcnJzZ0hiYStueHdQL3k0ejdPM0RBV1hRUW4wcFc0YmMvT3FScFU1NGw5UFJDcjh3QXdlbnVOc1YwQXRydU5Lako3NFBUbjRWb2JFTUFVRXQ4ZjRiUkpPZko3MFdMNXJBd3loQUt1dmRyWm01YlhpNUxNTXg3V3I0OUhQYnJIdVozUzVsaUxpdG9XWWR6Ly9rODM3QlVoYWtJRFpBVmx0OCtFRXFMNzBremdHaWpWTkRIbitVWloyWUNzOVhzbDAxdHNXODJVNndiOThMNjQ3ODNnYVFSb21vVk5peEE5Z25iZ21pZ3hldnZCeUdOZHZMdGF6N2U1QzlPN1lLbEY2R1RTZlMxSzF1Wkd0aE11aW1WWE8zelpHWHdBQXRPRzA0M1M0NFdJaTE0QWFBeStoSlRtaWpkYlVOVkZ6SGZvN0dTeGE4R2dhQ1MvRXlrSnBxWVVlMFR0Z1FOV3NIZU9rZDN3cUJ3NDNWOXJKSkEzRTBoSG9IYlBtOHhRc1p0cnB2T1N6dmsyYTZVS014dWpLQVkwRWlZSkJXQmtQanpLMmNlcEtWTEtCQjhLMXJRTXBDTWRVL2JCL2IvdUJudzlZRnYzaGF0Sm5Gc29rQXhjM0JlUmYzcjlidVJuZnRkc2FpUG5iZEJRdFJjbzg4S0x4MlFwTXR0T0VScmxvd1hKYUw1ZklyNGx0VzRDZjRLeXNRQkZiVHd2VngrbTROUDBBZlpoSjNSQi9KZm9udEY2NXBFQ3lDUEFNN3lRNmR2SVVKSWR1T3JkaFd1RzhiWG80K2RvakhpWjBsYkRJMDZaVVRBQ2NhaUMzYkNZVWtBOWNBQ3ZNR2wvSmNHS2JIUWtUK0Z5SFpFMkNMYnpzWGh1R2hTSjkxcHNrY0J1UWVNUHE5eTQ2QnZaZUZFVHh3MDZIanZMQitFN2VRd3BrZmczSkdheFhTeEQ4Nm9jTW5xVkNjKzdITE9kMFhUSFBxUjVMSkt2WUhEeFAxMHlDR1lZSHpLb2FnNUErMVlRVWVwOGRnVEIzK1lldkdON1hJNzNkZnRqbEE2Y3FKTTBGVTY3QktwMzVyMWV3NjFjOE12c2g0L1lDQnFNbHNBQ0RsRVdBQXd1NDA4MVY5bTJ3N245NzBzL2UxL0JyWDVtNkdsUnFMZ0sycDVvd2UrTTNhVWxOSkZMU2ExWURlRyt3RytWdkdZNzdIM21BMGtLZDVnRlZmaXZZTVRzdUVPeUsxb3kzaEZRT2FkZmpXMmUzYkpCNm9kd1BKcm1KVlNtT0RiNlhSdmNCbnJiQ2JuWlh3M1c3VmtCR0s3TndJNjdRRm90RTFLOUFkSU9MSE5oVjgvelRpakUxOGJQSkh5SGwrOERPU1p2a2IzcVRaK1hCcXRZQkdwdy84Tlo3UDB4a0gyWGsvTDFoM1h3NmpFTk4rMDU3Sk5uUWt4WWc2R0JuUUFZNDNhMmZhK2IxMXhVRjJEWFlBVU5wNTNwTFY5M2RmMXRXZWR0MWhXNER4WTc0Tk9zTU5JSXdmYm5uV2hCV1BCZ1FRZUFQb0ZkWlJtcGp6VFNrT25TbFUxTmdzUDVBQTYxZ3RLOGJITkVsclZwZWwvekJoUm5kcjBoNThBTnBuV1hsLzkvWktYSGpZZUtvVnJ4V3RJUWkxc0JlZ1k2Zzdvb0FPZ1RkZmROT3VOaXo5YWNROWxCMVViVHZMQnpFQWgyQzVYeXZWNTc3YStCV1pEbXNQZGJ0bXhnUG10cUFaN1o4QmoxOVY4bXQxQ0FvZ285c0YycmJtYTZRNVAxNEkwYmp6MDRDY3ZHK3lwdmdCdFg4RkRXVDVnTDQxb0dHUHIvdVlxYnF0Uzc3TmVlZFdPZzdJZlBuMS9xcnhoNE5jOERsUEhJWURwb0hvejNRREtzSnF1dFJnak1lSW5WV3RwcFFOa3RoaW5ubjUrVnc0QlR1UldBdWNyQ0pxdEJOMStVNWhFbTRjQjJBUExONm0zS2dDcUw0cVU3Y0Y0U2lJVVVCem5sZTI2djdyanJWd3B0T3ZJanR1eWZnN3NYamdlREFHdUczaDY3Q2p1T1JpTlFPMFl1c1owMzc3aGpkY1dDS00xTVFzN1JhNEsvY0ZhQ0diZ3FLVEdMVFVZYkZJOVFiRmZraVY3UENKb0NORXIvRkpmTUtLRjVhZGwwSUoyVXRjb0ROTE9tK0thaTV6NmFjRkhYc045YmVieFhqTXRPTUM4Y0w1N2RIdDlXUTN3b1VUc2Nwaldlc0lXMlB2UU9vTDA3Vk1jdHBtanBHMGZBVCtEN1JmV2VVd2lZQVhlaHhLMEZLSEp0Y0xrTm1xZVNxdzl2MUFsRjQ3eVJxdXhraE5ONHhnZWJ3c09laVgrTmZEVXE1VHBldGJQalpqM2VXeWxla3RQNmxGZ3NISHhoTGk5eE8yQlVuL0pyTFBBd3dqK3JvS3FCNXVHUmRtbmhSMGhIM285NFZmL0xhanZuZ0ExdGU1Tm05SmVpSk10L2xJYS9WUS9mYldkVHVNQnZDVjlPV2dNRVF1Yjl0Zys4YlRzc3ZSeGdRdzlPbi9LRnpEZkgwMndqenN0dWtuczVxc1h4Qms4WDc3QVBvTndaNGlnNDFEdjlBZnE0cmlabHRmRUhKSTNEajVpbVpqV0RTZ3haTlBCOGs3ZVV3YjZONWs4M0VDOUo3WUp0YmlUbGMxeExiakVjVFhDb2J5TEhOMm16VjVPdVRPTWxKOVg1ejJHSlFUMjRoQUFXTWtDYkxDRG9BWnRpb0NKbTAyNFFGdmwyTnFESWFGVTRzTWpnY293bVpWOTNVeU5MeFVzRFNqbi9BOWdORWVSejV4L1I4K01qVjRqaFZ3QkUyMjlRbDZISVRQdVFnVG12U2c3VEV1bHVPRWt1b25BRDVZSFAvUXJWNXpoQXZDYkR3K0FUeFo3aTdFd2p3Q2NEQWVlbDVuTmZRT2w3MldOVnZMSG5XMjNqamo1NVFTU0REbU5waUtyS2U2NmdSMGJMbEIrT0VxQmdoNUpKTjZFOU1BNmRhd0xXTXhXRmNnQnNZODNGYStOMXcrWkFiYk5MdVc2Yk5DTEM1OFZiWlFxanFKQjVjSEFnSzJodzFndHlZa3VndjVzWnFrVDhFTU9qMDZTQXlpNEpnTmk5YmdReG5sQWtuQU5CQ0xHMUF2OXVqSUdSRHh1d0xpL3FIengrWTFhUjBQaiswelBsVW4ydzZrUU9vVHB2UERKSnRZMFgxdHl4ZmduY1hDT0V6dGdJc0FLOUgzZnFyUkM3b2hjUi9WK241OGJNYUJRTCtlSUZuWXAyOHJhd3M2QUdvTHE0OFZBb2RmV2xyOUV0TEhTMWg2K0oxRjVnYnZ2NGlEZEREYkFTOXpTSFl5c2s3b0FCQUhyQUFWeGM5ejlSSE5LNE1WeXd0d0dNRVVCMjRmSzNTZnlVaC9YVk42YnpEMng1WEdMMExBQ2x4bjJKSlZhNWhhczByclYzUno2bDMvN2N2RzBITDlieTU1L2ZPYS83OWQ4dnF2SHZQL3pTV3YvLzJiczd5b0lpUTBZRzV2YStLRTBpZjZrSDRMZVRjY24zRklKejhzZyt6MytJL0wvQ3lIY3hCK3RzTXNwZTIrTVBlZ252ZmY0SUJUdTN6OSs5Y05IdjBYTDJ1ZEpPWUZOZDZJbzUxVXVmMW8xN0xNOUF1WFExdWdaSmdpZkNkVzBNTG5Qait3SWh3cGgybzhoSFd3Wk85VEZHMW0xQ1RvaDBRVHVEV3JOc3ZWM20wUEtmYndYTisrS0J6eHJLNFpvR1pWc0RVZUQ3dXd3cHdPdlVHWjRKSExrbmowUmtoczZPYjZiT2I3ckhVR1c1U0JaZGhXZ3pWNzlEc2VheHNVL09JeDNWWnliSXRoYjl1QkhQMFJzRG1mSTVRc3EzN3QrZnF3elJsc2lFTkV4Wko5YXYxNUxJUUFEZk0xVE1vQ2htclA3Q2ZBQW42R21kakU2YlNEMUM4c2FJZkR0RlFDak8wV2pqdEQ3eGpPTjd6THJqSEwvWUp4TlNjZzdRRGdkdnJNNTJ3MTUwN0FDWnBnRk9XSENzT3VvZzJyZU96UDhIODUxWnJSQnVwa21mVm5kYUxmMUNkRE81Rkt5STNKMHUva3RpNFdDNE1KN3Rxd1NDaUNwc2R3ZExGMHlkaTVmdmZPUHB3ellaQkE4UWtJeUM0bDJ5QUNIaUdZcDUxbjlscTNsWDdjRWtNcHhiUXF4Z2Q3VHFPRkpYcXV6MGtmbWRHRUFkejFjTXJIbUR3c0hONlBpdVR1OXA5Q1dNVHh3MlZEN1NQR1pqeXVaUlVHRnlpcDJhdzE4QU1CcDFLQlIxQkV4ZkNiVmlBNDYwTU90VXdhaFZPZkc1emZ4ZzRub3phVzRTNG43U1FMR3V4VWorQXNiUE50UlFxK3JEM3c0eXZjZ29xU3dRYThUY1R4NXo4Vm8zc3NpZFp0WU1PeHBILzl6Zk82RzlYSmZBQnJLT2Q2KzJrNlpZc0ZLamY3QnZDMFZ1aXpNc1FhVllBOGtFYWkxRSt2L3lmYTNXQk9tT1NMVHp5N0NFLzhlRFVUZElvanFNbm04NDRvZ2M1aWJhQkI1eVhzYWY4RlBnWFFCNUp1eHJUZ0NwSzc1THlPamg5YSs4cllvd25LZi9LcDFFZ1dQeWN1RVIxamd4cW5XRXl6Qk9kQ0RXdlljVTdnOVR3aDNSVStMRlYyVE5hRmxDYzI2OHVIcVlJZGRGK0RIWjIrSDhBR2pKWWN1bW1GRFI1OGRoT2lmaFZENHJnWk5JbWRYSmRSSWhNUW9KaU5YSDJ2cERuZXpyNTY0WDRxVjA4akE2YWRXY1crckZTY0ZLZ0REWTVYbTg0OEt0bW8zOWRPSTlkMkxnK3lETDhRbTIyTVUxYjlUMjJ0ZzV6QTNOemxEbVhQMCtBMnNKbVFLR3U4OXJwMHE5QWpPT1pHSmV5N0dNQWdlSkRCTXJHM1JvRFhXYzZGM2ZPa3VrOXgyTnJQbVRsa3JSRlk1bkxTaGZrdExyRGhmMWdpVUt3OXJvNGNhbGhHN004d0NnUVlTaCs2RDIxaC9leGJDZllKWXRjL2N5QVhhQkwvMEU5UzFwQ1ZMc0ZhdFdMT3o1UkR3VmFjVVlmOU9mV2RJZzZ6UVFzQXI3a3JnSVFTeDNWaW5MRllDZHJ2VmNvOWZHM2N1SE1FNnNNWGlnR3RaQVZBZkQ2UXJ6MHM2N1NQYUtqR3I5UXpYVGFyWlhZQk84SnRSc0MyZDJmZzJhMThRMWJ0ZVVnZENXZEo0VkNBYlg4WTJ4a21ycVpOMlBZMFQyUy95Qm03QnVGN0R4NTZONHNrUTg2aVZNU3UyS2pGbi9kb0xMSnhOaU5ucDZNcG41U01jMENRYkpocXNMYnZrTjdxYUtUMWE4MEY5Wm5ZUEpNNVdqVmRtaUhoblo5dk1lUG53bE1iaU1iWmNuMlB5d1FlNzRrdk5uUTUyc24rTzUzUWNWdFlBc2NFYXA0c2NqMnp3Nnh6Y3ppRjB4ak9hdy9SS2RBUDlKNmp5cE5ZNTJVMzFRamxRY1N4VHJFa3kzcHU3MitGNlBQc1dqRDhUcmw3TFNacnR4TjJIcmp0ZGFmakQ4dy9yejJqdFZIZHlISjJobDl1em5jS1JVTGZUNWs5aG5qeDJmdXhiUGlaaGc2YzZ3VmQvL25YZWlxYkhjVmg0ZWRuL3dYNm9iSUgrK2JMWTVQeGQ0dnBIWGgxaGlnYUhyVmMwMExDbmk5WEptRUxNL3R1YkxMYk8zUjNqSThpblo2K2tuT3k3dXhrcEZoNEcyQUpCaW80ZCtwR3E4Nk9MOW1SUGRZMkNaY1BVQXBzeHJJajdOREtZRWtHUGhkYmJWSHJOSXI5dnBGcnB2WWFjc0NsWUFaUlpCemVaWWtRSnBkZnh0anc2Z2dYcERTYmNJeEFHa0dXeVFNY0UwYldHVWRMaWV0Mkx5Sy9xWnJEUi9pdkh0OWpkNFdEZVZ2Q3NoeXlkaGVuRmpxV1l0c0Q4Q0MyR2FZNzdhZVAwYkdNRmlmYUFZeHd3SG4yOVNURnlqSTJRelN2UmFaV3RGblpDV000Q1ZVYkh4elhOL01OSTMyek5YeHMxVDR6Ry9qQmJ1bm1sYzR3UDd1VExhRnc3aGxMNTU3ajNuU01mQXREWWVVc2l6OC95NTk1OU9lTVQwVFJxMmxBVEVtNEZvNm5JMXloTzIvcVBVbUo5U3dzbXoyR1RrZUM3VXdzTnM0aldyeWFMVWFTejhDRjdER2NKclhMZDdHcEFkRWNmQmljQlNiQWU3Q3I5Mm1CZ0pEZ3pzemtETXpZc2xyRE1rellDaUp1bEd3WVlhaldLRjdSOFpOdlNoTllaREwvTnhjeXNxbjZLQTBscEZ1ZG5mWjhuZ0dnYjNST1N2dWdheGpqTUhyQUZrSkY0V3UzMC92TWlnS2dINmpxWjBzTTJtd3I4R09zekM3MVlWTDJzZllyNUk3VzI1WGk0Rm9NZkovOXNvL0hvVzdRK2ZLY1dBSzJIbmdGRkhvNmNtckxTM1JpREFidlVEVTg4SXZCc3NEVEVHZVZRdS8yWHY5KzE2YzVqTEtPdi9jOGZZYm1ZL3lYai83NnN2NzY4SHV0OTlkVy8xOSsyb28ybTJZY3MyRTIwWG04dU05OU85UmdSSXhMZXh6WFluRUZGZzhuc2o0aHB5WGIrMUVOWUFzWmZ5QkJmTWRVdXZsak9rdXRtalVCeWlLbXhjRmZyOVdhVmVMMzNkVnFKZENRUFBxSGplS2ZSTUZwZEJIQ0c3ZGF6YWhzTXFBRU5FaC9taW02NGNocEVnb2R4dVUxaDhvNHRndGJheGNNTG1WYnhCckFSc3ZlZFdjVW1WZDAxSWR3ekVsc2dGZm5XWHd2YkpnMVNoWnhPbm9EVmNkdk81bkYydVFIWTVmNEY1UTRkSWUxMmd6bkZJVzdDZzJSSFQ2emJLaTNjdmU3T202a3h0amRWRXdGTmxhaHRvUnhWa3lpcWZmZEg1Tmh3QlV3eTBRSFR2QjQyQzJCcDhyMloyS1BCdHVHR1J5T3RJTHl4OU15UEgvVk0vdXpFRktKRjlDZU52UDNoeS90TU1nc084c2F1cFBhL296aytYM2l6L2Vmdnk3WC8zNDVuRUw5MTd2NTdiL3VkZjF1OXU4WCszT3pZWnY3KzRBNXdWbzRHSUM1ZnRZSmV1dTBBSm5RUWNEYm50ZWZCV25sdjdqZC8rM0xPWFhwTW1nSkttR2xMVEhGQm1sZklVYWZVb1ZYaGhYQ1g5N3o5ZGFIeGN0RGFobFAvTkZSRFRndDAvU25nK1kzWFhTViswOWxKazl3aXNrUTAxT3lqSE0zRHY0Q2NFYzZVVDRINTVuM2h1RmFIeEZRMnBGTzJXaHp1RkpDbVVCM1RsdnFqckxVNFJ6QVA3czVxWk1NZ1AwKy9UUGJacmV2ZFJ3MzhEcGV1Nlh0dUJIczJENnIwK2RaZk50Sy96enM3MUZ0MVhQU2I5UmxPaThRZC9SYVpmZllmRjJ1VXV1WVozelV2RSt6VE5vQ01qMDJTL0hzcms1N3lBTm9CUHk1bmFXS0FZZEFSTjFXL2NmY0U1RC9mejRKcE5zaEtkRVorZEJ1YTN1TElkb2MwWFZuWUJRMEpGbjNaSjNLWjA5NXU4Qkx2cXdlSXI0aUhpOW9tOG5FYnlaVEozek1OaVY4VzBOZzdFWlhkRWFNelp6M3dOb0tqSzVvYk1GSm1OYitQK0FTcDVjMHAwM01GSVVXay9mb2o2MjExWEc0SVFHUU1USHhWR25nMjRlOWZXVmNqOFBFQnRwbEZCaW9hT1U4Zmo5aGtuTUZhNHJOeStoeWhkMTJjWnpTRkJra0VCN290STZZdWcyMGw2MVYzU1lDUG4xTTFZMG5ldXhtNDRraXZpZndvbkQxM2NOcnRQZ2RDYnJqcXQ0T2NWYjZNRXRmdll6em5xNnp4eXBIVUtqMW5lY2dDZXhLa0gvYjBkUUJHZFpKWWUxNFRJK1hlREIzRDg0WFI4NFNMVlRFZEFBT3lFamx4NElEY2Ezc2M5ekZzbitUSmNNM2RTSENWZ2Ewejh1U1FHN3NTSVIvekNmSEhUbWtDY0M1Q2p6ZXdZZmdGNFVrR3ZBM2JlSElqZkE2d2hoOFVSMXVCcjIwUUxJMWdLVXpYKzFydHUzTStsN0FvNTFyeHIyWDRSQ2JvMWFSa2JYeHE2Und0eDNmaEMxWmpyYnNOdDA2bXJUWkpoMHV4eCtFaEg4RklJSUNiOGU2R01rNEpZb3hPeGtITUhVYjRyUnJhY3ZHckJoNlBXakRnbjBUREVqOGhZWVg2Yk1KV3JNWUMzTDE4R0pwREljQlliZC9NNkRPZkkvYlFWcE9ZZ05RU0hZVjd3ZVozMjFkZGErVFJuZWtLcHdqTy9kMU9FWWt2bzREZGhqK0djRTBucnV5dUdjMkZvRFNzckU3OVpxbFdPV2N3dkR1bk9ZNE15dXpnL0dCYXdyaTQ5em1NNGhrbEYvaG5vYlVtSVVzSHdQZ3pDelRTaGlDQmRHLzBFaFFITlRWdVRaQ25MYVBWZXY2dVhRN1p2Nk1lVisyemZJU29oZHJZVnQzSUlLbGFyQktRT2pGN2pkc2UvSkpIL2t4OStuamNkemN0b0tGMVRlU2J3R1Vsc2lBRkFyOG1DT2Jwb1k3dEFjb0VDNlA0bkE2aHVVTXAxUlNaQXUxL1pWTXZHY3k3ZW5yZDlhVk9lbmwrUS9RUWg3dHBIczYzaFk1WWRmczNPZS9aYk1pVW1TZ1dDNEQvTXZSbWppSFg2RDMzNGtyNlZKTVhyWlNMRmdLMWlzaXM3a0RqNDA3T2t3aE9CaXVRSHZDeWVNNW9VTHNhbkhhWWd1ZEZ2QnQzUUo3S2tWdlR0aVMrRmwyczY1ZG0wMDF3UmpQNUhtZHZNdWwzcE1iZzBBNTNXN0FPRHFJWTlvTEVneldMSHZjc2pLNk16QUE4Ym84cldHaVhzVmhQZ2tFYmwwd0dJR2ZldTM5QSt0SDUyMWlEcjVwODJNcGdoRWJwTzFTYmJhUGFnSXVQcEhuTktYY25QLytBdmRaVVpPUTJRNTlGSGFoM0V1MzdieVFWTGNRMEs0SkdOeGZZNnNReVBjNHhYOGJYU1U3TmdCNUI4ZFEyQnpDbDE5WDNjd29QdEVDQjE4K1FVMjNTWmIzUWw4dytzV3VKMjluSGF3VG1DcytvVGtZMzk2WmFuK2VrUmhkcTEzOWF4Z3lmUzN5UDJWTWQ3b3YwVlpsMjUyNlpnc05FcThZdjZmZGFUazN4dk9Gd3EvQkhxWUU3Ri9SbWhTbk85OUdmZmNKbjF4bzl3ZU4rRHl5Qld6czNNdHpwc2lYbm1pUnFaMGsyUmR5dE42L0pJTnQ0UG5uOUtyckgrT3JUS0RDR1ROY1o3RzVEaWMwL0dYenRPYzFGQ3YxK002MkpnWlB3UVo4VHRSeElqUU9NYldyQkFzNllNUGZWL0swWVE3U1o5UTFzejBRNHJVMTNwYk9Jay93WFNFUUsycHJFdHVLeW1wRTBhekxtY2VtaW02TXFIUFFVU3hXODhYcllhdTFOZEdPdTU0ek1vQjJzOEFzVnJIYkdHeGcvL2hJNHdNMlgvekViZ1dLZHVielduSUwvd3c0clhMR0w3L0FzQWFZRlpwaG84YXRNTllEWlhHMlJsRVFQbEJMdXh5MVpXOHlaSHBiWFZ4US9TQmN5cGEvcy8rc2lpMHNFK1Z6cUluaXNrOVN6V0J4YzJnNE9qNDMwSzh0eStudEdKeVc3ejdPdUxUekZsS0NKUGRqZHJHWThqMEVGa3A0VzhnVzdTMHZkalZhN3ZhT0s1WnNsNS9sbHVaYkxWcEhzT3B2c3VGdGRHSGdZdkNkR3ZjWm5aZFRuSXlRNjNJOVR3Sk5ZQWluL1pPNk94bGQwVU5VTVIwYTR1a1ZSdHFHRXdhaHFvZ2J6Z1FENUtEdzRXd3g0SktqVkR3bTVESzAvMWl0Q1RNMWh1ZjhWNHdHckFUcVlEN0U2Z04rMnFrZ0huNnc5bTVOUDJER0huVlBJempMT1Y5R2N3VmF4YzRzWHVqTVZpeUNZWFNXbDEvT202MU9sd3ptTVQzSVkySnRicTRNamlwWWFSczdXN3lTSmN3V2UzZ1NUN2RkeHE2Wnp3SkI1Nzg3MkRlbHoyS1U3cUJvVzVSOXdBWVE4WkFKamJyenZMN0w3cDdITWo5ci9lMVl6YzV0QmtMd0FqZHd4RzVlNEtUZGNmZm5EQlI3MjdOczEra2tnS2xsRnRTb0g1TG9kSGVZUFU0ME9lcjZYbzdkNG9HcUk1UU02emxWeGxaT0FGV1Foajl2cWc2akFzS01BWjVCQ0s4Y3ExV2p4OHJaTGZJdHAvS2lBT09NZER6YW5mcDYwalRnbUFxUW96alV5cWJGS0RjbzQ0VGpyN2dkTlpSQWpzYWg4Q0dhTlJ2MzdQVzMwdmFjS3VBRXlSSzVQZThlSGd2UERYTy80YlI0bm5rV0YwaU1hK05ieTRCMHoxMnRyTm0ybnpza0paaitCM0k1dTk2aFA5aU1kaVl1QThHclUwT0FBVHJxV2ZCcjRjbkcrZmM2UlgrYWZGYmx6QUZ3aERsNjVVU284Zm9zemFsYzFlbkhqNTJjRS92blJ2Q0NrSnJQU2FMZENiMjJ3L01Hd2VnaDdCZFcvc3lGRllxWkpXdmwxcnc2dE43REVTQWFxS2I5cEkrVHR1TzRUa2xqUGlOdGVYVUhFUlM3a3M0RzhNcjl6SVhVVE85VHkrR0V0MkszK1BLNEJZQklldkZ2MElQTGVwZDU2dGlzcGtBRnN4bDJHM2lUNGNWMHlwMUJ5S2MxcmhlYkdCOXIyRUcraUFZd3J0NW5jUDNGYXRnNmNzVFplcTBqMEZiTW1pZHF2L1RKZzVmL2paMCtFWXBkQnliQzNwdS82Y0FGTk1oT3JuQW9POThZOVVGcDU2K3QrKzNoc3gzODN5NTUzTVcvL0JUN2Z2MVRxSjczRGhXYzhadGZZckZyLy9kTDVwOVgvdHZQOFBRT3g1N3JPbTJUKzBhZHNSdFNhdERGdWoxbUFTY2QyK256WDh0SjFyRmdYdS84cGpQTzRIWkduYk9qMmpodmVQMXpYWDd2S0VQOVBlLy83UG11ZjMzQWZ6eGZCQXkxVlJ5bSs4QVQrMnRhYmp2SXltcmhRMXl6aFdUM2hIZ0hlKzh2Si9hbDkwK2IxOUVXREdob1dIL2tlK1V6Z2p3QWRvS1JHbmI5SElqenJDK2ZTanFMYUNOUTlKa1hacVpGQi9zdW85Vm5Ndmo0NEVleHZ0bm9mTFVrc1owT2lnZU54Rm5EUkR5MkIzNjZmS0w2RnVOL09NaHpSb1V6MVZ5YU5OZzdRTy9lVHA1ajllMVhyTGFpbndwcGlFVURuajhOV2pyMGZjMTRDY3YzWGF2Vlg1djA5MXRJQ2E3elVESXdkd3RPUUFnVGtRZC9ZV3FEWFp2WWs5Y1JCbVU3Ui9nSTZjMGFtV3Q1REV6djRUU3p3Q3Fpc3RZYkJ0Ti9Ob0VOY1VYVnZ3V25yR0VmdjM0N0ZOUVJjSjQwOGE1d2RZODYrdXhmOEFYT21GdkxWbmZ3K0ozdDZ6Nk92SE0yY1hWMkpaWUVZTHVhQ25lT0g5aW5GaVZmbHFQYVRIeE9mTE4xSU5qQ2J3SUVQYmYwZnZ4NjUrQjJtQ3Nza29YUnhlcFE0KzFHdzlLUksvdjd2OXVoSXlmYnlzOVpCV2pmb3FNWnJDMndXVDJmVXlhSDFYVk8vLzh6YXVXY0paWnhwZTB0OGJJWXhrazUzUW01TmlUb3pWNGpNN2dBOGU5WDg2L3lvUUFxTXErRGV3TDBKUHNFdUFOYytuR3c5OFVLZUpsdDdRRTNQNE94c3pkK2s0ZXN4TjRobUNGM1l6cmRvc2o4Y1p2eFdGenVYSWJqeDVEMHF6dkdjejhuaUtIdnJUYm1aTFBpYk13Wk1tcXpUZ2Rhb25RQlJ1bm8zZjQ2WGRKdW1uRG5DY1Z0VHF0K3pWREpIZU1haGp5QmRmYW1PRWpRR0M4S2dWbSsyN2JjYWxxQ09VNWVFRGZhOFJQR3doY28rS3IxeklhWVFxVG1DSU8yeHVOSktmSUttNVF4SXUxZEh0amxxVkZHMEl5L0EvS2NNeFZDZGd5RXNSR1dZWTFpQXl0SzQ4UUE1NDJiQzdZTFlOdEo2SW1ZemRQV0tqaW1DMTBkaXJlc0szRGUza25Jd1duWm1OZFl6YXRCeHNGQkdCMTlaUWUzalh6T0ZzV0ZoWFBnbUFIV1J6RGtsT3BxLzQ1VEJWN0lTZ2NlNHpsWE94cnlaL1N1cDJ2QWR4T0FFTjRJYnVGQy9PY2NEUWRjUEwybWF1TnBIcFpRWVFYcVBuWCtzTmd6NldlOURqVEJ2TDRPRUpsUS9XV0I5N1pIUERudTFRbW1BOUtQNlFBQ2R0WURhY0pwclFlcGdFSmc5QUtJSlRzWFpNOEhON2xnSlU5ZTZEWTR5NVkrYkxUSFVEUlBXektHSEhqR3gzSnBRZloyd0Jpa0pqdEVibjNPemJiSDdBN2I0SlBSRmRUVzdybGx6WnFKdzVGc3REdmI5OERaUEJPdzVXankzOU5WMkRVNzNMZW54bGh3NGlHc096bnpGdkF5RUIzbnpOZ0RjM3VjWEMvL01ndmJ3cVl5L3ZUVHJyK1pzNXovL3ExLy9jNFptbW5hMElIWXcrRjRTOVNRem5sc0ZqSlZxRGtneTU0OUozNGoxL0VjMVZOdFFSdW5yZ1loVHNueDBKYmNJQWpiM3JMVkZwN2Y4ZXpEYWNUMWdqMEQ4bkowSU1ZcGJiSkw1VDBaaVBramR1Q2svKzdyRzNRS0NhczlOb2Nwc0pvNVFKNnFjMlphc01FNnozTjQwV3RJTldHN25qNGQ2M3BtVE5zMGRRcElteFgvQUc4ZStZa1hGc3l3OFRZMWZsc045ajk4cG1LZmZCd0RtcldPcTBxMVNxOGZFSmVlRnhLQVpRNnZoWXlmQjl2QkFaYjcxb0tWQWw4emNPdEpUWFo1UEU0WnhvUlg2eUtBMG0xRDBXMHlkNmJTaVNMWFgyVFlzMjRNVW5pNG5tTWg0NWxZZ3BOMHJ2Q0p1K1Z3cllWN21WYm9POW9SOFppdjRZUHFxQmN3Tjl0NG5qLy82YS8vRFFhM21lc2M5MlVtNk1oTHZJNjRIR0ZoMWY0cFNQSGZ2aTU5M2JxcWZCRC9hMEdEVll0V21zQUVlcnlLM1NnQTh3cTczc1hJMkZxZUJ3QnlIQTcvZENZemJNMDVkbllreE5xQ25pT1krUmVkUDVLaENJVzROZHJzV0xJWWY4azFrM05qMlYvRGljTW12QS9XMEkyS25LbXJ3VnJuNHJGY0ZsSTRJZVdrMWEvL05xL3VtWGIyWWV1NFVZY3prQW9HNGxRVXlQUDBFS1VCV2hTTTQ4UHlKZkMrblV4Z0JiZlJRS2VncmVuOFM2T1pnODEzcUxlVkx2czljNnN0MDlKYWFFL0RtOUY5UXdZWE1LTURUQ1FRY0xKdUlIS2hoUG11VGxWL25DTnVCMkg5bkwvRXowaEwwam5BemtIb0EvNTlnNGJnSW13aE8zWG5BdXBvNW4wL1IxNkJOWndVTmswR2RTbmU2N3dMUkpBMTNBWnJzRWlHcnozaVlJQXNjNGNjODNPbUwvczlTbUczcG1jdW5CcG0yTFZJQmF2bHFaaUlQSTZTSGZIY1NLZytUc3ltclZHSHVZam53b0FCY1l6ZExOU2dUVXc4cmcvbytTNEw4WjdIdHVuaTNOeHNPKzNub0JnYjd5d1pibmZCVEJlanAvQitUS2FuQVZUcmhMTjFFL0djM2dPZ3ZIZkZjSDlHSEVCaVdGV0xXSVlENDdkRE1MbjE2N2xOc0U3ZUJGMnp2QitIZXRjS0JuRzBlUDg4eEk3bk5HY1RuMmRZWi9mbnlDdVB3b0hTL3M3SWFyZ293K1hoSEp5RXE3SC8rM01NdHVld05tZTA0QzdSWUtSb2ZSVWJ3U1dkVStRWXpISnlMYTloeUF6QkJlMTRFa091bDNQSFc3V1h3bmx0ck84SHRrYWVuWWtsbFB0ekdpT2dFUTd4MDd4UExPM1FobmVkempsWTUwVDdiNFBtT3g2bGdmLzliMzdVb0hZOThZVHFKSlhpYVdmQlRuZFcxTUM0VSs2c25KYm1lOUFkZ3Y3OEFOV050Sm5nRzhsTUNWemRtd0h0SEFFenpsR1JxNkRZb0RHbkREZjcweE13cVlLUW5EWDdIQ0x0eU5LN2ZkWFRPejA1OWN4M1FmcnJjRHlEZHJMQUxJRDdEbEQ1S3J1bXhKeUlpWlRIczE4OFpRL2s3YUc0dytIK3dTRkw4VDdCbHBvZHZnZUtWNTVQZHZCclRxcXpXMHhvNFBTNjRjUkZEMGV0UUtLNlBDUFM4U3hkc3V5cjhrOUFoVlUvejMwYUFUeWYwN3A0YkVudjdUcUpGOUNsZzJhVmllaWg1WkM5UitvdkI3REJBb2RRN0hBby9WUWEyMEpsMVE4bTBIR0pTTjFiQUtOcm56TW5vR0JCL1p1Ty9Cb3ZiQnNEYWsyZFo1M1lsb3ZpUEFHaTFQM0JkZWJWb2pPZXc0YkphNWZwL2pySzQwUUtYTXp6TEQzZEVna0oydTNhVC9ZemRyUGxZR2d3RkovSmY1MTNXcitUKzIrWGRZSDNPZHJIQks1UlRNdTFxb25pWUR0TFlWMkFOcERJSTJKL0JBeGt6RlliY3dkbDJpQ1lFY2hUc1c4OThmQW93SGxLWmw2bkhqaFFFMlZ6aXA1OXlSQ2RmV3V0djJqRjdqNk5uTk9CZFpDdmpvWHN2NGtoeTlFUDZWK1Z3b2cvTUJiejI2b0htb0phV2NFRG5XMTVsWDBYNXp4N0NvTVRiMDZ4Mll1dUJ5VVZNMncweFZOdVlyQUZyVnJwNDZrdGtBZnJHZi8yaWtlSGpnWmQ5emxDcHRXRDZJc1RLb0taaXZ2YnhUa1ljWGhnQVlUVUh1dlg4ZGU1ZUE0Wmh0VVUrdHhXaUdEQjM4dVdCQ2R3Mld0NzZ2L3pMMGJDNHRaUWYyWHAzNS8zenZpUCtEcGtPR0liWXJubFpmMTBIcS9MZzJYUVZDZlFUSDRZeEZxc1Q0Mi9uaFljMWZyZlhmcmtyWUtEMDY4bCtMWnRBUmlNT0ZyZGhqbVl4NDk1Mk5BNTZRNi9GZlJYNW91dHpFUHpEVnhDQVlQdE9pYkFMMzJDZ1NlRGpZNmJEeDRQZ0dMQ2NzN1p3STdBZkR6cEdMVjUwMWgydUtmYndmYnY4YTNnVzZoV0hGYzk3V2FtZE9YeVJWeGN6UzNvZjdjVkVjT2h3Q2ExQzQ3S2s1QTlabU1iZ0JxZVZYc0x1a3l3T0hJWExDbjdpNmJjUHFjdEd0TXNRVXAwVGlscUo2ZDVvMzJtSXg4blY1YUQ1aEgrYUlOem1QUDZwU29GYXNIMHROT2YwMkQ5bHFOM25kRWI0enJUbWMyc3RUT1l6VURmNDRtb3poN3BKeTN6b212ak50MWpxV0p4aXFPbE0veVk4MU1xSy9VQXBSMm1XVytQdXdSSEZEdGNBQmt0Z2ZkZTV5SzNQL05xZVVpWThNblF6TlNkQzJTZStINHdBTHVlU1BHTXU4YmtNYjdaREJlT3VucWVGTXpRTXQxNENtRytDd2RXSCtjQ3ZtVTFzQTk0Mm41YnozNTF2TUE2WTF3ODBleHhMay8rZFZNOGY4N1Z3c0J0VDY0QmRGMVdUTnVRNy9HQXJMT1QvZmM1SE9aOHRCNjNQSm9ub0p3SVRzQzdyNG9yaTU1NitwMVJxeDdNbU9EOVZyRkFRSjBYamJleWlMLzhUUzA5Ly91RkJNZm1hUXBPZFRRRVpxT0RTZnVURVR4RFVDOU1qR2JaZVFmSXlHMEZuUU9tSEhhMFR6cXQ1Tjg1UHRaZEZhZXMyMEg0bi9wLzZVS2RvL0NkdlAzZks4M2ZadkFXUkhMYUJUM2w3VTM0eFZvZFRGQTgzdkp6T1BuNzRnKzNaL253bzlwS2VJaGQzazZVQ3c1OXkwaVEyNDM4VktNcjAyTlZzSDhuVHZTZTA3V2hDajFZRGNvbnJuaHFUWkRrVTNuVG5aNTRzeUxvd0x6UElRT2oyVzZKRUU4bktOcDhiM0d5SWJieU9Ea1poZ0RvU0pjTkx0YVBXVG0yaHZQaGtzZmtnYUVmaDhNSEo1YS9uZ3I2Mmd6ZG5PMnBMM0w2cVJXWW5yV0J2RUhYMzlmanc4VHhqL044K1Jtbk8rQ0lkYVpXN0s3b3NNOXUvUTRPK3daMk8zcjhPY1Z5ZUFCMmFEcE00RG9oRkFDNStHVTYyZ0ZnNWJBZ2c5UFJVOEtEeHhFNS9NekRUNnl0aE94Nzh0M3lhRGxJaEFLUzhQMC8wb0tjTjFOaWdHWkQxMkU2cmNhSjJxK05EaW44OHRIMmJpZlU4UFdjS1N1dGNlWEpRdWRRN3N0Y2RRd1oxbStlZHppdVl0M0NRanZSRGV1Yks1SXh6eE9UdzMyV09UQWxveDhrMGV1SUtET28xck1Ta1dYZFRJRkkyS2xSREpuK0NpdzFUTTZlM3RGRGZLM3g3UmFFYnVNTDJHSGtkVHYwc1RuWjY4OWswN25QSVhNZTBwREZhR3hyR3lmVmhLa2YyOWxtRW1qUFMweW1mOHpqLzg0N0F1cjlacks4QzFPQmVTMmUrUHhyZ2JRbXBKNGhua1hHNlFHTjFWbmlGaVpoNHExbWZteDF4S2ZiakhRNldLWm52enpid1ZPNGpUZWVmQjJ2M2U5d3N1YU9uclJvekJTVnc1ejVUQTdBaHZyMWc5YnZEeVhEdFhtMldKYVlwdGtTQW96bU90SGZFNmxONFFHbHpwRkdOcFFBOHl3TEhSNjEzaDJpM0o1cXM0SDlXTTZybFdBODV0M1J5eGgyUUdNTW5qMm1EeDNRVUIyY1d5eWVsdVp0TEhnemNlRXVPNURXSkNPc3RsMW53aXcyMi9PL3krZTVndmFOVEpkbHRHTTVrY1BuOUkwNkNPSjJCb09EWWhUTlpGdnJPUXNsTFk5eWFpZjV4MjRhWGJIeHFXbmVUdnJPWkp3elJ0WFk3V25BVmt4Z0V1SDEvdGpkalZMakE2dERGSk1CYnE5L2gyTWhEcEhTWEVIZWx0bjltTTVSV3g3QXhMN1pHOHU3MnJpaHF6WWN1YkgybDlVZXJ6bnpjelM5REdlbk03YXBXZk53Q2xkVzV6WGY5M1I4WTVGd21kbkdHNk9BbnZzVHo3SGZGK1ROZ2pWTFM1cjhJdU81N3p3OGRDSmo2UlpiWUNWRkVoMDYrUTAzalgzVElYZ3YrWkJkcDlhd3Z4N2VpZzJ3RU1hS0pydzZUMlgwZEZwMyttWHJZVDh1Q01IQ3VaZmxvUjNZeDlJTlpUM3VnTW5UeTAxWVo5Nzk0TW51NVpFWUNJQnpSb1NrRm0rSm9MZkYzR2RtMWhsbzdSQ3d1czhCMzFhN2xQWmRBUy9aN00wS1R0d2Q5em5zT1ZuVHREekJRalY5ekN1YkVuUzRQUGFlYjJlSHdsYjcxN09uRmZlK0w5dWpIVCtGM21WUDMrck9CdkRjUC90WHduTU9WUExRR0E5eHFpYmcyRi9KWnZmSWVnK3R3YXpwZjY1ekxDckk1ZnIvQXBZVHFBOGFKZXJZQUFBQmcybERRMUJKUTBNZ2NISnZabWxzWlFBQWVKeDlrVDFJdzBBY3hWOVRwYUlWQlR1SU9HU29UaFpFUlJ5MUNrV29FR3FGVmgxTUx2MkNKZzFKaW91ajRGcHc4R094NnVEaXJLdURxeUFJZm9BNE9Ub3B1a2lKLzBzS0xXSThPTzdIdTN1UHUzZUFVQzh6emVvWUJ6VGRObE9KdUpqSnJvcWhWNFFnb0I4OUNNak1NdVlrS1FuZjhYV1BBRi92WWp6TC85eWZvMWZOV1F3SWlNU3p6REJ0NGczaTZVM2I0THhQSEdGRldTVStKeDR6NllMRWoxeFhQSDdqWEhCWjRKa1JNNTJhSjQ0UWk0VTJWdHFZRlUyTmVJbzRxbW82NVFzWmoxWE9XNXkxY3BVMTc4bGZHTTdwSzh0Y3B6bU1CQmF4QkFraUZGUlJRaGsyWXJUcXBGaEkwWDdjeHovaytpVnlLZVFxZ1pGakFSVm9rRjAvK0IvODd0YktUMDU0U2VFNDBQbmlPQjhqUUdnWGFOUWM1L3ZZY1JvblFQQVp1TkpiL2tvZG1Qa2t2ZGJTb2tkQTN6WndjZDNTbEQzZ2NnY1lmREprVTNhbElFMGhud2ZleitpYnNzREFMZEM5NXZYVzNNZnBBNUNtcnBJM3dNRWhNRnFnN0hXZmQzZTE5L2J2bVdaL1A4YTdjbUx3MFh4dkFBQUFCbUpMUjBRQS93RC9BUCtndmFlVEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQjNSSlRVVUg1QWNDRUNRU1IxL1VNUUFBSUFCSlJFRlVlTnJzWFdkNEZGWGJ2cy9NMW5UU0V3SkpxRUtvU3ErQ1NGRXNLS0orb29DZ2lJclN1d2d2dlNnZFFTa1dSSDFGUklvRkMvS0NnQ0NDUWlDMGtKQzJ1OGx1eXZhZGNyNGZPek5zR29ZU2l1eHpYWE50c2p1N00zUG1uSHVlZWorRVVvcTdWZjc4ODArTUdERUNmLy85TjhMRHc5R3paMC9FeHNiaXE2Kyt3dG16WndFQUd6ZHV4T3paczVHYm00dEhIMzBVTE1zaUpDUUVhOWFzQVFEczNic1hJMGVPeE9uVHA1R1ltSWhHalJyaHQ5OSt3OWl4WTJHejJiQjU4MllVRmhiaTBVY2ZoZHZ0aHNQaHdOR2pSMkV5bVFBQW9hR2hTRTVPaGlpSzRIa2VnaUFvcjRJZ1FCUkYzNytKS0lydzNTaWw4aXVobEVMZUFKQ3lyd0JBS1NYUzVTdXZaZDRqNTg2ZGk0bUlpSWpUYXJVeExNdkdNQXdUeFRCTUJDRWtIRUFOQUNHRWtCQUFnUUFDQU9nQmFLU05CY0JJdnljQ0VBQjRwTTBKd0FIQVRpa3RBVkJDS1MyaWxGb29wV1pCRUFvNGpqTzZYQzVUWGw1ZVh2UG16VTNTNzFDZnJkei9oSkN5bjhudkFRQWxoSlI3OWRrb3d6QWdoSUJobUxJYlpWa1dMTXVDWVJqSWY2dFVLdVZWM3RScU5kUnFOVFFhRFRRYURiUmFMYlJhTGZSNlBmUjZQUUlEQXhFVUZJVGc0R0NFaFlXaFJvMGFpSXlNUkhSME5PTGo0M0g0OEdIVXJYOFAvSEpqaE56TndIWTk0dkY0a0p1YkM0UEJnSUtDQWxnc0ZoUVZGYUdrcEFRMm13MTJ1eDBPaHdNdWx3c3Vsd3R1dHhzZWp3Y2Vqd2NjeDRIak9QQThYMnFUQWN4M0UwV1J5QUJYQnN4S0FabjhmeGtBS3dWWXZ2OXYyN2F0Z1Y2dnI4ZXliRjJHWWVvQVNDS0VKQUpJQktDN1RZYlpCZUFTcFRTVFVwb2hpdUpGanVQU3JWYnJoUUVEQnB5WHdjMEgyQ29EdkhJQVNBaWgwbmhSRUhKNVlBZ3BCWHkrSU9jTGVtWEJ6aGYwZk1GT3A5ZERwOVVpTkRRVU1URXhDc0NGaElRZ0xDd000ZUhoaUl5TVJFWkdCdHEyN3dTMVd1MWZYSDVndTNZWk9YSWtWcTVjZVZ1ZFUzUjB0RmZOcVFETVpLMU1CamI1M3NtYW1pOTQrZjYvYi8vQjZKalkyS1pxdGJvcHd6QXBoSkFVQUkwQWFPL3dXK2dHY0ZvVXhWT0NJSnh5dVp5cDZSZlNVeC9wMjZkQTBoUjlRVTBzQTRDZ2xDci9YMEdqbzRSaHdCQUdERVBBTURLWU1aUmgyQXBCalZXeFVLblVVS3RVVUtuVjBLalZFaGdTcURVYTFFcElRRUJBQUFJREF4RWNISXlRa0JEVXFGRURPVGs1YU5xc0pRUkJRRXhNakIrWi9NQjI4OFJvTkNJM054Y21rd2tGQlFVb0xDeEVjWEV4ckZZcmJEWWJIQTRIbkU2bm9xV1YxZEQrUVVzanN0bFpCdEI4TmJOUzJsaFpVSHU0N3lQczRuZVd0TmJwZEswWWhybVBFSEl2Z0FaMzJXMDZKNHJpbjdrNVdjYzBHdldmWThlTStYUHYzcjJpRDlpSmxRQ2VaTVlTU2dnb1FFQklaU0RIZ0dFWnNBd0RobUZwS1lCVHNWQ3hsN1UybFd5aXF0VVFSUkhCd1VHSWlJaUFYcTlIUUVDQVlwNGFqVWJVYjNBUGFrZ2FYR3hNTENLam92eUx6ZzlzMVNmRnhjWEl5Y21Cd1dCQWZuNStoV2FuMCttRTArbUUyKzFXekU2TzQrRHhlTUR6ZkNsUTgvR2pFVjgvV2dXYUdhbkFYNlpvWm1QSGptVWZlK3p4VHVHUlVlMkRnb0k3RUVMYUF3ankzekhBYnJmQldsS01WdmZkYTZPVUh1SjUvcERWYWozODZxdXZIdnJpaXk5NFFraFpvQk1yTW0zTGFIRzBsRitPVWNBTkxNdUFZYjBncDJKWnNMN2dKZ0Vjd3pCZ2lGY3pMK3QvTTV2TnFGVTdDYUdob1Y0VE5TSUMwZEhSaUl1TFEzQndpUCtHK29IdHhnbkhjY2pLeWlxbHBSVVZGU2xhV2xYOGFHVzFORms3OHcwT3lKcVpiR2I2YUdTK3ZqSkNLV1VzRmt2am9LQ2crMW1XN1FLUXJrZU9IQW1OVDZqdHYxa1ZTRzdPSmJScDNicmNjK3JRNzRmM1JVWEg3aThveU4vZnZtM3JOQW5VS3RMcXhFcEE3cklteHpDVUlUNGFITXVDbGJXNGN0cWJDcUlnSWpJeVFna3c2SFE2NkhRNkZCVVZJUzZ1SmdLREFoRWNISUxRMEZCRmU0dUppVVZ3VUJDeXN6Smh0OXNxdmQ3QXdDQWtKZGRGU0dqb0xSdnprdUppWkZ5OGNNdlBVM1czVFhaS0tRd0dBMHdtRTNoQmdNMXFyWEEvaThVQ2s4bFVTanV6MisyS2R1WUxaUDhBWWhWR05XV0h2MlQvZ1BqNHg4cUNtY1BoNktiUmFIb3dETk1EUUZQZjgzUTZIWDRFcTBTY2pnckhKdFR0Y3ZiVmFyVjlhOVpNd0tYc3ZKTTh6LzlpczlsK2JaclNhRDhoRUh5QmpsSmFUcU9UL0hNQUlaU0lJa1JDd0lnTUJNSlFoaEhBc2d4aEdCWXN6MUtlNWFGU1NSb2NwNElnOExEWnROQm9OSXAyNzNLNVVGSlNBcTFPRDZmTHEvazdITjY1WnJOYVVWSlNnaUpMQVFJREF4RVdGblpGTFRYajRnVTBhM0h2TFJ2emkrbm40WERZLzFHYnJ1N3pWTjF0b0hiczJER0FNQWdNQ2taZ1lCQmlZa3Z2NDNBNGtKT1REYmVIQjhlTDRBUVJna2doVWlpdkZLVDBSbEZtbzZBVUVDbUZLRklpS3BGTDcxYld4S1NVRWlxWm1jUWJybU9jVG1jZmpVYlRoeERTQjBETmE3M21IM2YvZ0kwYjFzTmtNaUkrUGg0ZmIvb001ODZkeGRBaGc1UjlKazJaaG9jZWV2aHV4YjhtS3BXcVNWaFkyQnRaT1hrNWdpRDhZTGZiZjBwcDFPQW55VndWS2dVNVNpa0ZvZDRBS3dVaElrU1JRQkI4QUk1bHdmTXNXQlZQVmJ3S29pakE0WENBNHppbzFXckZYV0czMjZFcExsYUFUblp0T0J4MjJPdzJGSmlNQ0EwTmhjMW1RMlJrSkhRNlhhV2djU3ZsbjBEdFpwM25YUVZzQm9NQklBeWlZK0lxTmwxeWM1R1htd3RUdmdsbXN4bEZoWVdLSDgzaHNNTXBtNTF1Tnp4dU56eWNCNXhIMHRaNEh4OGFMMEFRZU1uY0ZDR0tzc2xKQ2FVaUtBVUJLTGxzY25yLy8rMjNBOTBURTJzL0doOGYzL2Q2d016M2VoYk1uNHVacythZ2RlczJLQ2twQVFEVXExY2ZQLzc4S3dEZ3BhR0RxMjI4TjZ4Zmg4Y2U3NGVJaUloeTU3VnN5VHM0Y2VKdmFEUWE5SGl3RjBhOCtocFlsZ1VBWkdkblk4V3lKVGh4OGdTMFdpMTY5dXlGbDRlUFVENnZEcEdPV2ZQRXlSTXZhclhhRjZkTW5aWXpkTmpMMzludDl1K2FOV20wWHdJNG9ZelpXbGFMazRJUElrU1JnU2dTeWdnQ0JJWUZLekJFWUhtSW9raWRUbWM1WUhNNEhGQ3JOVjVYaGpTLzNHNDNuRTRYSEE0bkNpMEZFdEE1WUxmYkVSRVJnY2pJU0w5YTdnYzJ3R1RLUjJCUWNMbjNiVFlic3JPenZEbHArZm13RkZwUVhDVDcwUzVITzkwdUY5d2VOenh1anhmVU9BNDh4NEZUQUkwSEx3Y0VGRkFUSlRDVEUyaTlJQ2FibWFkT24yMFNFQmpZajJHWXgrMTJXK1A4L0h6RXg4ZmZrT3M5azNZYWtaR1I2Tml4RXdBb0M0RVFBcTFXcS94ZFhmTGh4dlhvM0tWTE9XQ2I4ZlkwTkduU0ZQK1pQUmZGUlVVWU0vcE4xRXlvaVg3OW5vUW9pcGcwWVJ5NmRYOEFzK2JNZzhsb3hMaXhveEFWRlkzK1R3Mm9sdk9zNUpnMW82S2loL1YvYXNDd3JCekQ2YzRkMiszNHoreTUzNzR3OFA5T0FSQWs3VTBneEt1WVg5YmtLS1dVVUVJRVNpa2hvaWhTUWtRSUFrTloxdXVPY0xsY1VLbFVWQTRxcWRWcXVGd3VxTlIyeWFYaDlkTzZQUjdKWEhXaHVLaFEwZVpjTGhjY0RnY2NEZ2Vpb3FLZzErdXY2YnEvMnZJbDNsdTlFai85c2hjQThNckx3MkN4V0VxNVl5Wk5ub0llRC9ZRUFKdytmUXE3ZHU1QTgrWXQ4R0RQWHRXK1hoZk1uNHR2ZCsxVTV1anJJOTlFLzZjR0lEMDlIVXZlWFl5UzRpSUVoNFJpNHFUSnFGWEw2MmMrZU9BM3JGbXordTRDTmw3Z0VSZ1lWRVo3eUVGdVRpNk1SaVBNWm04S2gxZExzMTcycDhuUlRvL2tVL1BJL2pRdnFBazhENTczRFFnSXZta2FwSFJBQU14SEgzK2k2OXlsNjFNc3kvWW5oUFR5ZGFyYVNvcXUrenFQSHorR0dkT25LWnJBNDQ5NnpjeCtUL1RIb01GRHF2UWJodzRld01vVnkyRXc1Q0V4TVFsanhvNUhTcE1teXVkN2Y5MkREUnZXSWQ5a1FreHNMSVlQSDRGMjdUc0FBRWErL2lxeUxtVUNBRWEvK1FaVUtoWUpDYld3Y3ZVYWlLS0lybDI3NGVHK2ZhSFZhaEVkRTROV3JWdmo3Smt6eW1LcUVSNk81d1lPaEVhalFVS3RXdWpZcVRQUzBrNVgyN3lvd2pFYkVVSWF4Y2JHVHJpVW5iZmI2WFJzbnpIOXJSMmZmYmJaQ1lDWE5EY1o3QlNRazMxeGhGQlE2alZUS2FYVTdYYUQ1M2tpQlJVb3ovTnd1OTFnV1JWNE5RK092K3l6NWFSZ2xMV2tSQWxNZVR5ZVVnQVhHUmxab2ZZbWlpSVloaW4zTndEazVlWGgyMTA3UysyLzV2MTF5dDl1bHd0REJyK0FqcDA2QXdCV3IxcUo5UFFMY05qdHFGZXYvdFhaK2syYUtJbnNWenJIc3Y5YnpHYTh0K1lETkU1SktmV2RXZjk1RzZOR2pVSHpGaTJ4YStjT0xGKzJGSXNXdnd1WHk0bUZDK1poNWVxMVlPNG1ZUE1ORkRpZFRwdzVjd1puejU3RnhZdnB5TTdPUWw1ZUh2THpUUXJBRlJjWHd5cVpvamE3SFE2N0EwNkgweWRYelEyMzIwM2NiZy94QmhFODRIbU9TRGxwUkJSRlJoUkZobExLVWtyWjFOTm5tMmRjeXA3ZHJmc0RKMVFxMVFlK29PYXJQVjZ2dEdqUkV0dTI3OEtibzhhZ1pzMEViTnUrQzl1Mjc2b3lxRjA0Zng1dlRadUNFYSs5amwzZjdjWlRBNTdHbU5GdndHUTBBZ0F5TXpNd2U5Wk1USnc0QlR1Ly9RR1BQUElZcGs2ZERJZmtyRit4Y2pXMmJkOEZBRml5YkRtMmJkK0ZsYXU5SldnTXcrQzVnYzhqTEt5RzE5bDhNUjBIZnZzTmJkdTJVN1RLRlN0WFE2ZlRLeFA5K0xGamFOYXNlYlhOaTZzNUppR2taMEJBNE1vRmk5N1pYNzlCZ3lscjMxL1hqRktxaFRmaFdRTkFEVkFWcFZRbDMzZDVIa2h6Z25BY1J6eVNOdVp5dVlqTDVTSXlXRG1kVGpnZFRqanNEdGpzZHRoc05saWx3SlhOWmtOeGNURUtDd3RoTnB0aE1wbVFsNWVIckt3c1hMcDBDVzYzV3puUEkwY09ZK3JraWVBNERoYUxCUzhOSFZKS0cxdTBjRDVHdnZGbXBXUHkzWGZmb2xQbkxvbzJPT3lsbDdING5TV29VN2Z1Vlk5dlNFZ0lOQnBOaFordFgvYytObis2Q1FCdzRzVGZlUE9OMThzOWNNcjZ5Ujk5N0hFMGI5RVNBSERQUFkxZ2xnQXpMeThQWVdFMVVMTm16YnN2S3VvMVNZM0l6c3FXbmlMNUtDeTA0TUtGQzlqOXcvZm8xdTBCdUZ4T09GMnV5NmFucEtWbFptWWdyRVlORUVJZzhEemhlYStHNXZHNElRZ0NZVlVxOEJ4SFpKSE56ZDY5Ky9SWis4SDZaL2Y5Yis5VEgyN2NBSTdqVUxkZVBVeWFQRVZaVExlVDdOeTVIVjN2NzZhWXNMMzdQSVR2dnR1RjNidC93TURuWDBCRVJDUTJiUHdZdFdwNzFmOUhIbjBNUzVlOGc2eXNTMmpZc0dyMWpxa25UMkwwcUpGd3VWeTR2MXQzZE9sNmY0WDdyWGx2RmZRQkFYam80YjQzN2ZxcmNreENTSzJJOEloUlFjSEJvekt6Y3JlV2xCUi8xVFNsMFM4QTRhWElxaUJwYllLdkJnZUE4anhQR1lhUjh4ZXBsTmRJR0lZQkw2Z29ML2dtY1h2OXQwNkhvMVErcEt6UmVSUnoxV3VtUmtsSnZhMWF0Y2F2ZTM3QnpCblRrWk9UalNlZmZBcmhFa2hzLzJZYjZ0YXRoMGFOVXlvMXpiZCs5U1VXTG41WGVhOHlZTHBlZWZiL0JtTDBxRGRnTmhkZzMvLytoMWx6NWlxZm1TMW1USjgyQldhTEdXM2F0TVhvTWVPZzFXclJyOStUeWo1ZmZQNFpldmJ1RFFDSWpZMkR4V0pHZW5yNjNhV3hpYUtJOVBRTE9IUG1qS1NsWFVKZVhoNU1KaFBPcEtXQjUzbGN5cnFrVkJMSWVXcE9oeE5PbHhPVVVuamNIdUp4dTB0cGFGTGFCcUdpeUJCQ0dFb3AwKytKSjFVWExsNGFQRzc4aEIrN2RMMS9xOWxzZm1yRjhtVjRkK2t5ZlBMcFoxQ3IxTmo2MVZlM2JaQWxMcTYwbjY5MjdTUVlESGtBZ0tDZ0lCdzkrZ2VHdnp3VXp6MzdOQWEvTUZBWjM2cEtTcE1tMlAzVEhueng1VmJrNWVWaHcvcDE1ZmI1K0tNUDhmdnZoekIzN255b1ZEZm5HVnpWWTFKS1lTbTBJQ2d3Q0F6RFBCRVdWdVBUUzlsNVc5TE9ubisyZWZNV2VrcXBEcGVKQVh3MU9JWlN5Z2lDd1BBOFQzaWVKeHpIRVo3bjVjQUJjYnZjeE9WeWVWTS9IRTRsVjFJT0h2QThyMVFzaElhR1FxL1h3MlF5SVRjM0YxbFpXVWhQdndCS0tZWVBINEUvai80QnJVYXJnTFRSYU1DTzdkOWcyTENYS3IyMjMvYnZRMUp5SGNUR3hsM1hXUGJ1M1J2OSsvZEhmSHc4T25Ub2dQNzkrNk54NDhhbDlna0tDc0lycjd5S0wvLzdCYnAxNzE3cXdUaCsvRVM4OCs1U2JQcjBjNWpOWm55OWRVdXA3Mjc1OHI4b01CZmdxYWVlQmdEbzlYcE1uaklOOCtmTnZuczB0cUtpSXB3L2Z4NnNTZ3RUdmhFV3N6Yy96V3IxbXBwWldaY1FHeGVIM053Y3hNVEVLRTlDUTE0ZU9JNERJUVNVVXNKeEhnQUVITWNSUWVDQjBqV2FaUE5uWHdRdldqaC84SktseXdjUlFwb2VQSGdBOCtZdkJCVkZ2REZxdEdLQ05iem5IdVRsNWQ2V1l4VVRFd05EWGw2cDkzSnlzdEd5cFRmdmFOLy85dUxUVFo5Z3lkTGxTS2hWQ3dEUXBWUDdpclNhY21EbmRybnczWGZmb2srZmg2RFY2UkFYRjRjZVBSN0UvdjM3eWszYUgzZi9nR1VyVnQyMGhOT3JPZWFSSTRlaFVhdlJvR0ZEMyt2dEdCZ1kySEg3em05ZmRydmRuMzM5OVZmL25UQnViQWtoUkpCOGNiSVdwL2ppQkVHZ2xGSXFpaUk0am9NZ2lKUmxSUWlpUUFSQm9JSktnQ0I0UWM4M0o5SnV0ME9qMFVDbjB5bmxXYkwvN2Z5NTh5aklMOENhTmFzdzhQbEJPSHNtRFF2bXo4V2t5Vk94YzhjT1dHMVd2REw4SllCNHlSeUdESG9lYTlaK0FLMlVRdkxGNTUvaDVWZEdYUGQ0ZnYvOTl3Q0FEaDA2SUNNakE3bTU1ZWY3aFFzWE1IL2VIUHhuMWh4czNMQU90Uk9UOFBERGZTRUlBbHEwdkZjeGhYdjI3SVhEdi8rdWZPL1hQYi9neHg5L3dMdExscGVLbHJkcjN3SHQybmU0T3pTMjdPeHNuRHg1RWxsWldjakt1b1M4M0R5WVRKZURCVWFEQVlJZ0lpZ3dDRVdGaFlvZnJTQS9INElnSUNRa2xHaTFPa0lwaFNBSWhCZDRJZ2c4WVNRQndEejVaUC93aTVuWll6dDE3bklvSmpaMmNkcnBVMDJ6c2k0QkFKS1NraEVWSFkzT25ic29pM3ZIam0vUW84ZUR0eTZRSXBrNkFFQWx5aVFaaEI3dSt3ajI3dDJEdzRkL0I4L3orT1dYbjVGNjhnUjY5dks2Qk0xbU13Z0JHSlpGY1hHUjRpT2hZdWtxbHJqNGVCdzZlQkFjeHlGZm9tblNhTFg0NU9PUDhQbm5tOEZ4SElxS0NyRnYzLy9RckZtenk2YndqdTNZOXZWV0xGMitVakdmcXQzOHJ1SXgzVzQzZmo5MEVQUG56Y0h3VjE1RllHQmdSWURlUktmVHpYbjIyZWUrUDM4aFk4VHE5OVpHU1JxY2xsS3FvWlNxZlRVNHlRL0xlTWtQZU1MeEhQRUdEZHpFN1hZVGw4c05INTljS2UzTmJyZkRLaVh4eXI2M3JLeExPSFRvQU9yVXFZdHUzUi9BdE9rem9ORm9ZYkZZTUhUWVMvajhpeTNZK05FbldMTjJIVFFhRFRaKzlJa0NhcWRQbllMYjQ2bFduNmF2SFAzakNDWk5ub3I3dTNYSHUwdFg0RlRxU1ZCS1VWeGNqQmNHL3ArU29uVDgrREVrSlNjcmYzLzA0VWJNWDdDb3d2RUgvdVhwSHBSU25EMTdGcG1abVFyRkVLdFNvNlM0QkZhYkZRNjdIUTZuRTlrNTJRZ0kwRXZPVjRMaTRtSVFoc0RsY2hPMVdnVVA1NEVvQ2dCQWZPaUJHQURraHg5L0NibDBLWFBZZ2YzN2hqRU1VeGNBT25ic2pJTUhEeUl3TUJDZE8zY3RadzdQbVRNTER6elFvMUlmUjNWTDJRVGRCZlBuWXNIOHVYaXdaeSs4TlgwRzZ0ZHZnTGRuenNKN3ExZkNrSmVIMm9tSldMajRYY1JJMmN4OUhub1lKMCtld05BaEw0QmxWWGpzOFg2b1g3OEJMSVdXVXNjWk0yWWNGaTlhNkgwUzE2Nk5kUnMrZ2thandZS0ZpN0Z5eFRKODhmbG5VS3ZWNkhwL053d2EvQ0lBUUJBRUxGcm9OUU9mZmJwL2FUTngwK2JyTm84cWtxb2VjK1JycjRJUUlERXhDV1BIVFZCOGtGZVF1bHFkYmtiZlJ4NTlvY2VEUFQvK1p0dlhuNDBiTzdwWTF0NGsvNXVpeFhsVFE0aElLQVgxVnFoUVFSUWhpZ0xoZVI0c3kxSzVjcVVpaWl2NVlXVXc1S0ZHalhBMGFOQVFaOCtlZ2NQaHdKaXg0NnFVMnZQNVo1L2lxUnVjVm5QZ3dJRktQeHZ3OURQSzN4RVJFUmcvWVJJQUlEdzhIQzhPRzRiWFh4ME9Tb0hrT25YUTd3bXZiMjMrdkRsd3U5MFk1Uk5vbVByVzIyalFvQ0VLQ3kxNGVkalFmMit0cU5WcXhmbno1M0hwMG1VLzJsOS8vUVdHVmNGdXM4SHVrNXVXbG5iNnN2WkNLZFJxTmRIcGRMQmFyVEx2RnBHSUlBbkRNSVJTeWlRbEpiRjc5dTUvbVdYWmwzLzY2Y2ZHKy8rM0Z6UCtNeHNBa0o2ZWpubHpaeU1vTUJDRFh4eUs1czFiS09lMWJPbTc0RGdPNDhaUHJEZ2llUzROWGJ0MnJmSjE3dDI3MTA5UVdJbFVOcGEzY014T3A1NDQvdEh5NWNzM2YvZmRkeDRKNEJRVEZkN2FWUG1WeXNYMkRNTlFRUkFVL2plVlNrVlpsb1ZhcllaS3BWTElMV1hUTkNtNWpzVDNKcEZaeHNTZ1pzMEVKQ2NubFV0M3V0Rnk4TGYvVlhuZjloMjdWTnQ1L0NzMU5xUFJpQXNYTGlBcnk1dkM0VXNFeWJBcXJ6UFc2WVRMN1lMZGJnZlA4NGlPaVFIUGNYQzZYTVJodDROaFdSQkNpQ0FJY2k2YUV1VThmZWI4TXk4TS9MOFJScU94Ylh4OFBQTEsrQTdxMUtrRHU4Mkdnb0o4TkcxNjJjVGEvT2ttbU0xbXpKZzU2NFpkcTE0ZjRFZXdxeHliV3pobWpXclVDSisvYytmT0owcEtTajRNQ3d2YlFRamhmQUZPMHVLSVY0c0RwVlNnb2xTckovbmpJSW9pVWFsVTFKY1ZSdGJhQUlLaW9pTHdISzhrKzdyZGJyaGRMcmhjVGlRbEpsVXJIVkpBUUdDVnlxb0NBZ0tyZGFEL2RjQ1drWkdCOVBSMFpHZG5LMG1CY3RLdDFXb0Z3N0JLS29mSDQ0SEZiSUZLcFlMYjVTWTh6NE5LQmVyZXRBMkdpQ0pQQkVFZ0FKZzJiZHAyZjJmSjBsY0RBd1A3VHBveUZWTW5UMFNOOEhDb1ZDd0N5aXlXanAwNm82UzRTRWsyTkJvTldQUGVLaVFrMU1LUVFkNG9Jc093MlBqUko5ZDF2U3pMd202M1ZmdVQrRTRUdTgxYWFRa1djNHZHekc2emdsV3BRQWhwRXhvYTJrWVFoTDRtaytuRHVMaTRBNFFRamxMS0UwSmtnQk5CSUlKQ2hDZ3FCSm1pNk0wYWthbXRSRkZVekZNQTBPbjBzSmFVZUZOQ2VEa2xoTHRjeWVCeXcrbHlvWllVOUxuUmtseW4zajhXd2djRUJDSzVUcjFxSGV0L2pTbEtLY1daTTJlUW5wNk9uSndjR0kxR2hXWklydmZNeWNrQllSZ3ZLMGVwc2lpZWVOazRlRi82SUZsTFkwNmtwalVJRGc1K2pSRHl5cTB5bnlvSDhreVlMUmJFeE1iNzBjeFhhemZrSWpJeUFvbTF5MU02WldSbXdteSsrV05tTk9RaUlpSUNTWW1sejRuanVIV3BxYWtmdDJ6WjhnSUFEZ0F2UlZJVkg1ek1IK2ZMQ2VkRGNFbkxtcVV5SlpJY01aVlRROExEd3hFVkZZVzR1RGpVcmwyN1drdnFicVg4S3pRMnVZb2dJeU5EQVRXejJZemk0bUtmSW5ZSDNHNDNSRXA5eTZJSXovUGdCUjZpUWl0RUNRVWxvSlQwZjJvQXUzRFJPeU5abG4wRFFNTE51SmFnNE9DcjJqOHhzVGJ5ODAwd0duSVJGQnh5MTJ0dWRwc1ZOcHNWQXM5WENHb0FrSlNZQ0pQcDVvMlpmRTZpSUpRRE5RQlFxOVhEV3JSbzBjZHV0Ni90M0xueng4ZU9IZlBJQUFkdmtNcTNBRi9oaHBOQmptRVlJdm5mcUV4Ujd0dGNSZ1k0WDlaZXVlZEN3NFlOcjduVzlIYVdPMTVqS3l3c3hObXpaNVU4R1Y4T3RiSmtrSVdGaGZCV0MvRGdLdGZTR0FEazNJV01uaHFOWmhTQUIyN21vblM3bldqV3RPbFZhNnNYTXpKaHNaZ2g4Q0pjcnJ1VG8wMnZEd0REc29pTWlFUmlZcTEvMUVZeU15OGh2NkFBQWk5VTI1anA5UUZnVmFvS05iV0tSQlRGUFNhVGFWMWNYTncrUW9odmdJR1hORGRCQWpSUkRpNndMRXQ5d0l5cTFlcFNKSmErUFJia0JqSnlkNnlrcENRMGFOQUFOV3JVOEFQYmJXTnVHSTJsMGpsazJ1NktHRzdkYmpmc2RqdGNMaGNSS1lVZ0VVRXFXaHFsQktETWthUEhZcU9pb2tjUlFrYmY3T3N4R2ZNUUZ4dUR1TGc0K09YdUZvL0hzK3FYWDM3WjJLZFBINE1VWUpBMU9NRW5jaXFERzVXMU5WbFRVNnZWVkc0QldCYmNmRTNTK1BoNEpDWW1va0dEQnYrcUpqSjNyQ21hbFpXRmMrZk9JVE16VTBubjhHMnVJdE82K0RMZENvSkFQQjZ1SXZZTkJnQno0ZUtsL2lxVmFqU0ErMjdtdFRqc050aXNKUUNvSDlUOEFnRFFhRFN2OWVyVnE0UFpiRjRiRVJIeEhTR0VsY0NOODhsL0kxNGxUeFI5R3Y1UUg2cDVXbG11VzJWMXA5VVZWUEFEV3hYa3dvVUxPSC8rdkFKcWNqcEgyZVlxWmVpN0NjZHhBS2g4MCtVdVQ4eTJiZHRxaFlTRWpNbThlUDdWbTMwdHdjSEJVS2xVaUkrUFEyeHNySDlGKytXeU9VVkl5L0R3OERVZWorZUQzMzc3YlVPM2J0MnlDU0dNYkpwU1NubGNabDRXdlY0SjZoc3BKYjVSMDdMcElUSjl2UysxdmNmalFkMXJZUER3QTl0MVNscGFtcEo0SzNlTktpekZkT3NvQzJyRXB4ZUI0a3VEVkRuZ2RydWZVS3ZWWXdHMDhpOGx2OXlPb2xhclgrcmF0ZXQ5K2ZuNWE2S2lvblpMdmpkR0FqVlplNU5UUWNwcWIrWFNRc3BXTHZoMlRwTUI3cDU3N3V5a2I1S1JrWEZIbktoY0hpVUhDWHo5YVdXMU5KOU9VY1JiV096dERDV25jRkJLeWM4Ly94eVdtSmc0am1HWUNmNmw0NWM3eVBlMmJPdldyZXNuVFpwVUNNRGprK0FyeVA0M3VXcEJTZ254OWIxUjN3b0Z1ZlZmVUZCUU9iK2JIRlM0VTlOQlZJbUppYmY5U1hJY2g5VFVWTVYzVmxHSHFBcTZRdmwyVS9jRk5jWnV0M2ZSYXJYakNTRTkvVXZGTDNlWXZEbCsvUGlVWjU1NVptMVNVdElSQUN3QU9YcEtVSnJKRjZJb2doQWlsMlFSbWYrdHJJYm1XMlR2Y0RoZ3RWcFJWRlNFbEpRVXFOVnF2eWw2bzhYbGNpRTFOVlVwa1pLckNYeGI0aWs5Q1NUQ1BWbFRrMDFQQ2RnWVNpbmo4WGlHc3l3N0VZQS9vOVV2ZDZRd0ROTWpNVEd4Y1VsSnljcVFrSkF2QURDU2VTb25sWmNLTE1nV0QvVUtrYXNYZlByWTRrckY5U2twS1pWMnhicHRUZEhiT2QzRGJyZVhBcld5MVFSbEd4YkwvalRKL0pUclBCbFJGRWx1Ym01OGRIVDBCRUxJcS82bDRaZmIxZDFpTUJoZ05Kb2dDQUpzTnVzL2ZvZm4rWFZIamh4Wk4zbnk1RnhKYzVNckY1VGllcCs4TjBpcElYSVNyNUx6Sm5lbUwxdWxFQjBkalpvMWF5STVPZm0yQUxmZzRCQ3dMSVBvNk9nclpoRGN0aHFiMVdxdEZOUmtobHU1OTZKdmtFQUdOWi9JSjJPMzJ6dHJ0ZHFKaEpBSC9jdkhMN2NycUIwN2Rnd1VSS21HcUdKVzJiRDZEUnZYNmRydGdmYzZ0R3Z6QndBRzNzaXBUSURxcFVYeS9rT2x2cmRlalkxU0wwT1MxQWRYM3VRZXVvSkl3UXNVSEMvQzdSR1FtSnlBb0tCYlg5bGl0OXVRbTJkQWJsNGU3cnYzM2pzSDJJcUxpeFZRazR2WnpXWnpoWnBhSlpGUHhaL21kcnNIcWxTcXlRRHErWmVQWDI1WE1SZ01vQ0RYVkwvS01FejNXclZxSjU1TVRWdlJKT1dlSGFDVW9ZQnYzdzFCb2dzUnZiRUFDc2tDQmJ6cmhDb21xUnhSbGN4VVVhUVFxUlJOcFNJYU5taUk0SkNRV3pwV2dZRkJDQXdNZ3NtWUI0UEJVR0dhMUczRm9QdkREeitnZmZ2MmlJbUpRZGV1WFRGaHdnVHMyYk5IWWVpb0tBTHFWdm9QZUgxcTBzYUlvcWlhUDMvK2xQVDA5TFhmZi8vOWJRTnFQTTlqMUtoUmlJNk9SbWhvS0lZUEg2NTBkL0xMM1NzbVV6NkNncThMTU9xR2hvVXRQbmYrNHZDRzl6UUtBS0NUdW1mSlBSZFlTc0ZTS25mTEVnalBjL0J3bkplcDErV1dlaXg0dTJOWnJWWVVGeFhCWWpIRFpEUWhKeWNIR1Jjdkl1MU1Ha3FLaTIrTE1Rc01Db1pSNnB4V1Z0Z1pNMmJjRmllNWQrOWU5T3paRXlrcEtYamdnUWVRbEpTRW9xSWlIRDU4V0k3c0tJQlcxdnlVdFRRdnRiTEFwS1NrMVByODg4L25kdTNhZGN5QUFRT1lrSkFRZE9uUzViYTR6b2tUSjJMYnRtMzQ5Tk5QOGV5enoyTHAwcVU0ZGVvVUhudnNNZi9xdm9zbE56Y1hOY0lqcnZwN3AwK2xZdDVVN01lSEFBQWdBRWxFUVZTYzJlalZ1dzhBTUNxMXV1T3ovL2RjU0t2V2JTNTh2ZlVyQitCVjNTb3pmeWxBY0xtUnQyU08wc3VicEtrVkZPVGowTUdES0N3c1JFUkVCSUtDZ3FIVDZmRDExMTloL3R6WjJMWnRLd290aFdncG1ZYjUrZmw0YTlvVWJONjhDVC8vOUJPYU5HMkswTkF3QU1CZmZ4M0h0Q21Uc0hYckZody85aWRhdDJsN1RWMndOQm9Ock5aaXhGZmdhN3R0VE5HMWE5ZWlhZE9tZU9hWlo1Q1ZsUVZDQ0ZxMmJJbUNnZ0tjT1hNR0tTa3BsU1hlbGdvU1BQamdnNjBhTldvMHBWdTNibjNsbTNlN2lOMXV4NnBWcTdCcDB5YUZtdWo5OTk5SHo1NDlzV0RCZ2dxYjN2cmw3aENydFFUUjEyQ0dOcnluRWQ2ZStaOVM3Nm5WNmtGZHVuU0ovdVhYLzYzcGZuK1hFNVJTUmtJM3hUU1ZzVTBVQkpHWGZHMkE5OVVMZUJLd2dlSkMrZ1Z3SEFlV1lSRVJFWUdNakF4UUFJR0JnZGk2WlF2V2ZyQWVHbzBHWThlOGlTTkhEcU4xNnpaWXZXb0Z1bmQvQUgwZmVSUi8vSEVFQytiTnhhcjMxb0xuZWN5Yk13dnpGeTVHVWxJeTFuM2c3U3Y2MHN2RHIybmNmSHNGMzNhbWFGRlJFZXgyTzNKeWNuRGh3b1ZTUHJYRXhFUWtKaVlxS1IxMnV4MzUrZm1rc0xBUU5wdU51Rnd1SWdnQ0k0b2lrNVNVMVB2SEgzOWNzbno1OHI2RUVIVHAwZ1ZIang3RlcyKzloWGJ0dkExNTI3VnJoOW16WjZONzkrNElDQWhBdlhyMThQMzMzMlBac21WSVNFaEFhR2dvaGcwYnBoRDNVVW94Yjk0ODFLOWZIeHFOQmhFUkVSZzBhQkRzZGpzOEhnK2FObTJLQngrOEhKUFl0R2tUdEZvdGpoOC9EZ0RvMzc4L1dyWHlGalVjTzNZTVRxZXpGTjlhNTg3ZVR0c0hEeDcwcjI2L2xCT3oyWXl4WTBaaDBQUC9oOEdEQnVMM1E5NTVrcDJkalFIOW44Q1QvUjdGcURkR2x2ck81SW5qTVdUUTgzMW0vMmZHMUpTVWxDNEFkS0RVdDVFTUs0b2lLNjhicFlrTXg2R2twSmdZREhsZVFrcW50M0Z6WkdRa0dqWm9DSTFXZzVLU0V1VG01aUF6SXdPN2YvZ0JLVTJhSUNEQVM3SmFJNndHL3BMbS9WOS9IVWVYTHQ1NUhob2FpclMwMC9CNFBERGs1VUduMXlNcHlkdVlKVHc4SEg4ZFAzYkR4KzJXYTJ4eW9LQmR1M2I0OXR0dk1YZnVYTVRGeFNFa0pBUjZ2UjR5MTd1YzBtRTJtd2tBcUZRcVFpbVZ1NjR6VnF2MVdZMUdNN1Z2Mzc3MUd6WnNpRVdMRm9GaEdMUnYzeDZQUFBJSXBreVpvaHh6L3Z6NTJMRmpCenAxNm9SWFhua0YvZnIxdytPUFA0N1RwMC9qMUtsVDZOYXRHeDU2NkNFODhjUVRXTFZxRlJZdVhJak5temVqY2VQR09INzhPQVlPSElqbXpadGp6Smd4K1BEREQ5R3VYVHQ4OHNrbjZONjlPMGFPSEltWk0yZWlSWXNXQ3JBVkZoWUNBSEp5Y2hSdzlIbTZJaUlpQXRuWjJmNVY3SmR5OHNYbm05R3NXVE1NR3Z3aTB0UFRzWHJWQ3JSdDF4NEpDUW40NzVhdE9IZnVMT2JPTGswMVAyL0JJbWx0RmJVWi90TFE4QTgvK21URjRFSFBmeXNwTWtTeVRqa0tDTjRIT0JHbGZGNFFRcWhLcFNKdXQ5dXJ4QUdnb0NDRWdkdmxnczFtUTc0cEh3QkJabVlHQWdJQ2NQRmlPbFlzV3dwQkZCQXMrUW1MaTR1aDFlbXdZL3MzK09tbjNkQm9OTERaYkNncEtZRldxNFhINDhIS0ZjdVFtNXVMb3FLaUd6NXV0MVJqODAzcEVFVVJBd2NPUk4yNmRXRXltWERxMUNrY1BYb1VxYW1wS0NrcGdkdnRSa2xKQ1pIQVFJbjRNQXpEQkFjSHYvTGxsMTh1MG1nMDllV0dGenFkRGhxTkJvUVFoVmxVbG43OStxRmJ0MjVRcTlWNDRva240SEs1TUhmdVhBUUhCNk50MjdabzBxUUpVbE5UQVFCSlNVbFl2MzQ5K3ZUcGc4VEVSRHoyMkdQbzJyV3I4dmw5OTkySFNaTW1ZZno0OFJneVpBaWFOR21DQ1JNdVYyazk4OHd6R0RIQzI2UFI0WEJVbUF1azFXcWxEbGwrOFV0cGFkMm1MWDcrNlVkODlPRkd1RjB1TEg1blNaVytKNG9pWnM1NEd3LzNmYlRlQXowZW5IWXE3ZHdBQURwcDAxQksxYUJVQllBRktLT2tSd0dFWlZYZ09BL3h1RDArcmY3c2NIczhjRGdjc0JSYWtKOXZRbEZSRVU3OC9SZkdqeHVENTU1L0FkMjZsYVl1bkRkbkZqSXlMbUx4TzB1aDFXcExLVE5qUnIrSnhvMVRNUEtOTjZ0bDNHNFpzUGttMzhvcEhTNlhDM1hxMUVHclZxM1F1SEZqUkVSRVFCQUVHSTFHNG5hN0pYWU83eE5IemxIak9HNThTa3JLZ3RUVTFDcDNxUEF0STVNSFBDRWhvWlJUVWdhYXZuMzdvbmJ0MnBnNWN5YWVlKzQ1dEdqUkF0OTk5NTNVT01NcjA2ZFBSMFJFQlBiczJZT1BQLzVZNlhOUVZ2UjZQVHdlVDduMzNXNTNwZjBSL1hLWEExdnJObGk1YWcxcUppVGc0NDgyNHUyM3BsYnBlK3ZYdlErZFRvZUJ6NzhBQUZIQndjRnZmZjNOOXNFQTlCSzRhUWtoYWtLSWlsTEtBbUI4QW5DRTQzaDRPQTlSSXFaT0p6aVBGK2hLaW90aHNWamdjYnRSWEZLQ3h4OS9BZ1FFSmRZU2hJYUZLZVpuaDQ2ZE1QS05VVkNyMWZCNFBBcHpiMGx4TVVhUEdZZmVmUjZDeStWQ21QU2RPeDdZZk11a3NyT3prWk9UZ3kxYnR1RGl4WXRLbmhySGNkRHI5UWdKQ1NHQWwvN2JGOVJXcjE2dDVqaHVPc013czBWUjFKWHRPSDVGKzF0VjNnS3ZyTmgzeVpJbDZOQ2hBekl6TTlHaFF3ZXNYYnNXdlh2M0xyV1AwV2hFVGs0T0tLWDQ5ZGRmS3oxdVFrSUNYQzVYS2RXYjR6aVl6V2JVckZuVHY0cjlVazdteloyTncwY09vMGVQQnpGNXlqUWNPblFRL3pUWDkrL2ZoNzIvL29vcFU5L3luZGU2SmsyYVRybjMzbnVITjJ2V1BCQlNPZ2lsVkEwcEhRUUFTMFdSOER4SEJJRW5QRmM2SFlUbmViamRic1drVkdzMGNEZ2NLQ2pJeDhXTDZkajl3L2RvMUxneEFLQkZpNWJLZWY1NTlDaVNrcEtoMFdnUUd4ZUgwTEF3YUNVTGF2KytmV2plb3NXZDcyT1RDOXA5YXorTGlvcVFuNThQaDhPQjVPUmszK1JiSW1zNGN2czdBR1RuenAxQlBYdjJuTW93ekxpaW9pS2NPblVLUTRjT3JmQjQxOHRPc0dUSkVreWVQQmt6Wjg1VTNzdkl5Q2dWd1h6cHBaZlFva1VMOU92WEQ2TkhqMGJQbmowckJLcVdMVnRDcjlkajM3NTllT1NSUjZSSnVCOE13eWpCRGIvNHhWY0dEbndCaXhjdndPZWJQNFVvaWhnemRqd1loa0YyZGpiR2pIb0RIT2RCY1hFeEJ2Ui9BdmZlZHg4bVRaNktsY3VYd3VWeTRiVVJMeXUvczNMMVdnUUhCMlBCb25kR3Y3Tm9vYWFnSUg5ZGJtNnUvSVNWbzZXOHROWUViMk1zd2V0aWsvYmhlWUY2T0s4NUNnSUVCd1VqTGk0ZW4yN3lkcEsvOTk3N0VCd2NESjduOGVwckl6Ri8zaHg4K2Q4dm9OZnJNWEh5RkVXcG1ETDFMY3lhTlFPY2gwT3RXclV3WWRLVU94dllLS1hseXFUazZHZHljakxPbnorUDFOUlVCQVFFUUJBRXVOM2Vwd1FoUkNiVEl5a3BLVFZtejU0OU5TSWk0azIxV28wcFU2WWdKQ1FFQXdaVTNMMDZLQ2dJQnc4ZXhLRkRoNjRKUE1MRHczSGd3QUhrNXVaQ0VBUXNYTGdRcDA2ZFFsT3BMOEg2OWV1eFo4OGUvUDMzMzZoWHJ4NDJiZHFFbDE1NkNkOSsreTBBNFBQUFAwZGhZU0ZHakJpQndNQkFEQjA2RksrLy9qcUNnNE9oMFdnd2ZQaHdEQmt5Qk9IaDRmNVY3SmR5VXF0MmJTeGJ2cXBDN2YrL1c3WlcrSjNQLy90VnBiOTN6ejJOOE1INmphKzUzVzdWNWs4M3JadisxbFN6dExaOGxBRUdsSXFDS0RLbHdDMG9LQWdhclVhMm5rQkFVQ01zREVsSlNZaUlpRUJNVEN3eU16TEFzaXdhTjA2cDFCL1l0R2t6ckgxL2ZiV08yMDAxUmE5VTBCNFVGSVRZMkZpSW9paWJvMFFHTlpabENhV1VYTGh3SWVMNzc3OS9LeTR1N3MwSEhuZ0FYYnAwZ1ZhcnhmNzkreXUxMDE5NzdUVWNPSEFBZ3djUHZxWnozckJoQTBwS1NsQzNibDIwYTljT05wc05reVpOd3A5Ly9vbXNyQ3lNR1RNR1U2ZE9SWU1HRGNBd0RENzQ0QVA4K09PUDJMQmhBd0JneTVZdFdMLys4azFjdkhneEhucm9JVHorK09QbzI3Y3Y3ci8vZml4YnRzeS9ndjF5VTBXcjFRNS9idURBbCtjdFdCUUZRQ3RWS2FpOXlvNVNwVUJFMFp0NTRHM0E3QTBvdU4zZUtnV0h3K0UxU3lXZm04bGtRbTV1TGpJeU1uRDJ6SmxiZW4wM2pkMGpMUzBOYVdscFNvczh1WnVVWENibHkzeGJKdm1XVUVySm1UTm5hdFNwVStjdFFzaEkvN1FzTGFJb0lpUHpFaXdXQ3dSQmdNdDVkNVpvNmZSNnNDeUw4Qm9SU0VxcVhXa1FSN1lldkdObUJzOVgzNWpwOUhxb1ZDcEVoRWNnS2FseTdzTzllL2VpYnYyYnoxcnJjYnMvMkxUcGsvZmZuajdOQXNCRkNIRkRhUnhEQkVJZ0VNSW9EV1BVYWhYVUdnM1ZhcVMrcFFFQkNBb01STERVemk4aUloS3hzYkdvWGJzMjZ0YXJqM3IxcXJlYXNiSSt2RGZGRkpWN0ZKVGxVNU03U1IwL2Z0eTNRb0Q0MnYzU0ZsU3ZYcjJwQVA3Vm9HWXdHSzY2VTVEYjdjRmZmLzBGVnFWQ2NFaW92NitvM1liQ29rSVVITTFIaStZdG9OR29Ld1MxUC80NENvWmxFUlJjL1dObXQ5dGd0bGlRWDVDUDFxMnV6RUNmYy9QekdWL3ExcTI3ZUhISWkycy8zTGhCV1lkZTA5UmJZZ1dJZ2loU1VHOHhQQlVFa1FpOFFKVnU4ejRrbFU2SEEzYTdEVlpyQ1lvS2kyQXVLQ2lWY1hBanBlWVZmcmZhZ1Mwcks2dFVqNEt5M2RrZERnZHExNjZ0YUdvZWo2ZFU3ZWZxMWF2Vnc0WU5tOG93ekp2d1N6bkpNK1NCVmFuOG5lQWxrWmtmaklaYzVPYmxJcWtDaHVpTEdabGdXUGFtalpudk9XVm1Ya0xpRmZxTDFreEl1QlhETm56cXRPbDhSa2JHMmwvMy9GS1poaXRjQmp1UlVpb1NTc3YzVWVBbFpsNlBoNFBMNDgyQkk0UWcvaVpIL2FzVjJJeEdvOUlpcjJ6amxRbzZTWkdLdU5Ra1VCdm5YN0lWaTduQWpLQ1FVUDlBbEpHZzRCQVVGSmdyQkRhTHhZTGdXekJtUWNFaEtEQVhYQkhZYnBrWnI5Tzk5djRINnowTjZpV3ZsN1ZhT2FCQXZkRUZLcGJLTXlFVUlBUWdjbGQ2RUVMQWVNa3N3VEFzV0phRmlsVkI1VFZmRVJVVmRlY0RtOXloWFc2Umw1K2ZYeW1kZDFtZm1tL3lMY013VS8zTHRESS9FU0FJd2wxdmZsYW1KUlVYV1NyODdGYU5XV0JnRUlvTExkZjAzWkxpWW1SY3ZBQzczWGJGMzA5S3JvdVEwR3NEYmIxZVB6cnQ3QVhYUFEzcWJwTHdUSmxxUG1NblhtN2Z4MUdPOHhBSitFQVlBc0l3RXJBeFlGa0dLcFhDMWd1TlJvUFEwTkE3RjlpY1RtY3BVQ3ZMcDFZSlNhVGNmSVZJdlFsZVlSaG0ycFVYOXRWVEtkOXVVbFdxNDRxRUVNRHA5SE81VlRvUEsrRzV1NVhCbFd1OVh4ZlR6OFBoc0Y5eEg3dmRob3lMRjlDc3hiM1hBYjZCbzArZU91Tm8wcmpoVmg5UW8yVTBPQkVBRlVXUjhEeFBuVTRIWVZtV01vU0FFQVlNUXlDWE5ubzNGVlJxTlRScURSbzFibnhUS01adk9MQlJTbkhtekJtbFRaNGMvU3lycVpXSmZzcU5KUmlKOWZaWmxtV253VnY2VWVseHJwRksrYmFUcWxBZFg2djh1UHNIYk55d0hpYVRFZkh4OGZoNDAyYzRkKzRzaGc0WnBPd3phY28wUFBUUXczNGt2STNsbjBETmR5NWRyMVVhR2hyNnhyRy9UdHBiTm0veXZhKzJWZ2JjQUVDa2xIcDlhcHlIZUhzclhBWTJobVhCTWhLd3lWcWJWb1BHalZPcXZhM2ZEUWMyWDFBcjI4ellicmRYU09mdDYxZHpPcDI5VkNyVlZBQlhOTWl2aDByNWRqU2Ivb25xK0Zva056Y1hDK2JQeGN4WmM5QzZkUnVVbEpRQUFPclZxNDhmZi80VkFQRFMwTUhWZGwwYjFxL0RZNC8zSzhWbUlwL1hzaVh2NE1TSnY2SFJhTkRqd1Y0WThlcHJZRmtXZ0plU1o4V3lKVGh4OGdTMFdpMTY5dXlGbDRlUFVENnZEdm1uWTNicDFCNXF0UnFFTUVoS1NzS1FvY1BRc1dPbmZ5dU9Sa1ZFUkx5NmN1WEtrdGRmZi8xQUdjMk5Fa0tvOUQrUm0yRHhIT2ZsSW1jSUpRd0JReVEvbTZTNUtjQ20xa0NyMGFKZS9mclZlZ0UzTkVFM0l5TUQ2ZW5wbGVhcHlkUkRVb3M4K0xMZlVrb1pxOVhhU3FQUlRBWHdqMWQ5QTZpVWJ6K0F1d0xWOFRVOVpOSk9Jekl5RWgwN2RvSkdvMUhLd0FnaFNtZWk2bnh5ZnJoeFBTd1djN24zWjd3OURUVVRFdkQxTnp2eC9nY2JjT2pnQVd6ZnZnMkFOeWR2MG9SeGFORHdIbXo3WmlkV3JGaU52Yi91d2RkYnY2cTI4NnpxTVZldVhvTWR1NzdEa0tIRHNIamhmR3o5YXNzdG1TZUVFTng3NzczbzJiTW5ldlRvZ2ZqNHEzdTRDNEtBMzM3Ymo4a1R4eU03SzZ1eVk5U0xpb29hdm1EQmdzYVM1U1RUakt1VnVsSks1VzcwaE9kNThKdzM5Y05US3ZYRGpzS2lRdnowNDI2c1hmTWU1cytmZy8zNzl5RkxPbTdXcFVzWStmcXJlUGFacHpCbTFCc29LaXBVenVHakR6Zml1V2VmeGpOUDk4ZXVuVHR1amNabU5Cb1ZVRE1halFxb3libHF2bDNhZlRxMEs2Qm1NQmhxNmZYNktRRGFWdlhtL051YzVvR0JRYkJacjU5UC92anhZNWd4ZlJvOEVzM000NDk2emN4K1QvVEhvTUZEcXZRYmh3NGV3TW9WeTJFdzVDRXhNUWxqeG81SFNwTW15dWQ3ZjkyRERSdldJZDlrUWt4c0xJWVBINEYyN1RzQUFFYSsvaXF5TG1VQ0FFYS8rUVpVS2hZSkNiV3djdlVhaUtLSXJsMjc0ZUcrZmFIVmFoRWRFNE5XclZzcm1lb1dpd1Uxd3NQeDNNQ0IwR2cwU0toVkN4MDdkVVphMnVscUcvZXJPYVplcjBmSGpwMmduaklOYjArZmhsNjkrOXgwWnBiazVHU3dMSXZkdTNkRHE5V2llL2Z1eU0vUGg4UitVd3F3NVNSbDM3L2ZmT04xMUt4WkU2ZFBuNElnQ2xjQzBOYUppWW5EeG80ZHUraWRkOTdKa2JVMkg1K2JIR0FRQlVFRUlieTM3cEV3bERBTUNFUEFzQXh5YzNOQkNNRURQWG9BbEdMRCtuV29WNzgrOURvZGxpNTVCNDg5M2c4OWVqeUlMejcvRE8rdFhvWEpVNmJoeEltL3ZYTnM0MGR3dTkwWVBud1lXdDU3WDVWQi9JWm9iRmFyVldIcThLMy9sRHUzWHltdGcxSktYbnp4UlRZaUltSXlJYVJ2MVk5WmNrTW5pOWxzeHVSSkUvRGNzMDlqM3R6WnR3emNLcU02dmhwcDBhSWx0bTNmaFRkSGpVSE5tZ25ZdG4wWHRtM2ZWV1ZRdTNEK1BONmFOZ1VqWG5zZHU3N2JqYWNHUEkweG85K0FTZEltTXpNek1IdldURXljT0FVN3YvMEJqenp5R0taT25hdzBwVm14Y2pXMmJkOEZBRml5YkRtMmJkK0ZsYXZYZUNjY3crQzVnYzhqTEt5RzF5bCtNUjBIZnZzTmJkdDY2M2dqSXlPeFl1VnE2SFI2WlVFZVAzWU16Wm8xcjdZeHY1Wmp0bTdURmg2T3V5V2xRNUdSa2NqTnpWVjhYYUlvb2thTkdxWDJPWExrTUtaT25naU80MkN4V1BEUzBDR3dXTHdSMlhlWExNUGtLZE9xcEJnd0ROUDd2dnZ1R3h3VEU2T1h0RGFmMGl1d0FCaHZSemlSdUZ3dTRuSzV3SEVlWWpHYmtaZWJDNWZUaGVMaUlnUUdCcUtrcEFRcXRScUNJQ0QxNUFsa1pHWWdMZTIwY3U4ZmVyZ3ZEdjkrQ0FCdy90eFp0R2paRWxxZERpR2hvV2pmdmdQK09ITDQ1cG1pbE5KeVZRVyttcHB2Qk5TM1E3dHZCSFRObWpXVENDSERic1JOLzJyTGwzanUyYWZ4N0ROUFlmNjhPWEM3WEZYNjN2dHIzOE05OXpUQ3A1OTlnYkhqTGhORm1veEc3Tnl4L2E1eVZPL2N1UjFkNysrR2poMDdRYXZWb25lZmgzQlBvMGJZdmZzSEFFQkVSQ1EyYlB3WWpWTlN3REFNSG5uME1YQWVEN0t5TGxYNUdLa25UNkpuajI0WTlQeHp1S2RSSTNUcGVuK0YrNjE1YnhYMEFRRjQ2T0crTiszNnEzSk1RZ2pDYTRURGR2M08rcXNXalVZRFFSQVFFUkdCVHAwNlFSVEZVa1NPQU5DcVZXdUVSMFJnNW96cEdEdm1UZlI3NGttRmFPRnFHNmVvVktybkZ5MWFOQkJlTGpkZmsxUWxZUWdqVWtvWWhvSEg0eUUybXcwdWw0c0VCZ2JDN1haRHBWTEJZTWlEMVdwRmRuWTJDZ3N0eU0zTlJXNU9EaUlqb3lBbkJSODZlQUJXcTNjODY5U3RoNk4vSEZFb2tsSlRUOEptczkwOFlEdDc5aXd1WGJxa3BIVlVwZmRubVFqb3dCdVZxM2JpeE4vWXN1Vy9XUHZCZW55NitRc3dESVAxNjlkVjZidm56NTFEaDQ0ZHk5MzQvUHg4N05qeHpWMEZiQWFEQVhGeHBWWCsycldUWUREa0FmQ3lQQnc5K2dlR3Z6d1V6ejM3TkFhL01GRFJkS29xS1UyYVlQZFBlL0RGbDF1Umw1ZUhEUlhjcDQ4LytoQy8vMzRJYytmT3I1QkRyenFrcXNla2xNSlNhRUhRTFhLSEpDY25vMUdqUnZqdHQ5K1VvRkJaNEIwK2ZBVCtQUG9IdEJydGRUMFk5SG85Qmc0YytLYkJZT2haZ2IvTnE3bDUvVzBNSVFTQ0lFQ3Qxa0FRQk9MeHVCRVVGQXhlRUhENDkwTTRmU29WRE1QQTRYREFaREtoVjYvZStPYWJyekZrOFBOSVRUMkp3RUJ2LzRUbXpWdWdaNjgrR1BuNkNFeWZOZ1VCK2dEb0EvUTN4OGVXbloxZExsZk50MVRLQjlSUVVRVFVicmQzbHBvWjM1QlphN05hRVJRVWpJQ0FBREFNZ3hlSHZvU0xGOU9seFpxSFJRc1hJTjlrUkdoWURZd2JQd0dKaVVuNCtlZWY4Tjh2UGtObVppYm16cGtGalVhRDU1NTdIbDI2M28rbFM5N0JzVCtQd21Bd1lQakxYcjYzdGUrdng0YjE2L0RubjBkaE5CaVEwcVFKTHFaZlFHUlVOTjU1ZHlrb3BWaTlhaVgrK09Nd09BK0g5aDA2NHJYWFI0SlNpbkZqUnVIK2J0M3h5S09QNGNTSnZ6Rm45bit3YnYySHQwVjNiVitKaVltQklTK3YxSHM1T2RsbzJkS2Jpckx2ZjN2eDZhWlBzR1RwY2lUVXFnWEFHeldzYUhHVkJUdTN5NFh2dnZzV2ZmbzhCSzFPaDdpNE9QVG84U0QyNzk5WGFyOHRYLzRYUCs3K0FjdFdyTHJtaE5PcmxhczU1cEVqaDZGUnE5R2dZY09iZm4ra3NrUDgrZWVmQUFDV1pjdFJ5OXRzTm93ZlB3WURueCtFczJmU3NHRCtYRXlhUFBXYWdrVk9weE5idG14UkFYamxyNy8rTWpSdjN2eFB5ZGNtU3Y0MkpXSktLU1VNdzhMamNWT24wOXVVbmpBTW9xS2lFQkFRQUoxT2g3Ly8rZ3VpSU1KaU1VTWJGNC9uWHhpTUJnMGE0bUo2T2k1bFppckhmVzdnODNodTRQTUFnSmVHdllpNmRhdGVVSC9OR2x0UlVWR0Z1V3FWZ0JvcDA2V2R5YzNOamRkcXRSTnhBenUwdDI3VEZqVnIxc1RMdzE3RTExdTNRS2ZUb1hYck5nQ0FPYk5ub1dmUFh2aDQwMmQ0L29WQm1DNVJMRC93UUErc2ZYODlhdGFNeDdTM1ptRHQrK3NWczJqVTZMR1lNSEVLa3BLVHNmYjk5YVU0cE5xMmJZY1pNMmNoTXpNREgzMnlHWmN5TTJHeFdHQTBHaEFZR0lBTkd6L0d4NXMySS9Ya0NSdy9mZ3lFRUV5Wk5oMmZidm9ZYVdtbk1YZk9MRXg3NisxYkJtclMvZkJxSDZLb2FOSUE4SERmUjdCMzd4NGNQdnc3ZUo3SEw3LzhqTlNUSjlDelZ5L0ZIMGtJd0xBc2lvdUxzUG5UVGRMdmxHYUtpWXVQeDZHREI4RnhIUEpOSnE4MnJOWGlrNDgvd3VlZmJ3YkhjU2dxS3NTK2ZmOURzMmJOTHB2Q083WmoyOWRic1hUNXlwdkdVMWZWWTdyZGJ2eCs2Q0RtejV1RDRhKzhla3NvM2ZQejh4V0EwbWcwQ0FzTEs5Y1E1Y0tGOCtqYXRSdis3N21CbURaOUJqUWFyZUpqdXc2cFc3OSsvUmRIalJvVlc1Ry9qVkxLTUF6RHlGUmpIbzhISE04UnpzUEI0M2JEWVhmZ3pKa3ppSXFLZ3QxaFIxRlJFUW9LQ21BMEdQREhIMGV3Zk5rU1BQbFVhVjVGanVPdzZaT1BRWWlYeDYxYU5UWkJFSkNlbnE0RUMzd2pvQldrZFpBeWFSMkVVc3BFUjBkUElJUThlQ052dUVxbHdveVpzM0Q2VkNxKy9mWmJESDVoSUdiTm5vczZkZXZpN0prMDlGemhKZXhyMDZZdDNuVzVZRElhRVIxemJXbTlXcTBXT3IxZU1Wc0RBdlRnT1E2eHNYR0lqSXpDeEFsandUSXNERWF2MzlIcm00ckE2REhqOFBxcnIrRDVGd2FqU1pPbXR3VFV5aWJvTHBnL0Z3dm16OFdEUFh2aHJla3pVTDkrQTd3OWN4YmVXNzBTaHJ3ODFFNU14TUxGN3lJbXhwdGYxK2VoaDNIeTVBa01IZklDV0ZhRnh4N3ZoL3IxRzhCU3BseG96Smh4V0x4b0lUWnVXSWZhdFd0ajNZYVBvTkZvc0dEaFlxeGNzUXhmZlA0WjFHbzF1dDdmRFlNR3Y2ak1yVVVMdldiZ3MwLzNMMjBtYnRxTTJOaTRHejRlVlQzbXlOZGVCU0ZBWW1JU3hvNmJjRVB6MklLRGc2dThiMFpHQnNMQ3d0Q2pSdzhBd1BIang4djEwbWpldkFXYU4yK2hySXV4NDhiZklQL3J6bTZ0VzdmT0FMRENSMnNUQVZCQ2lEZEdTa1VxMTR2eVBFOFp3cEFTYXdubE9RNmhvV0dJam9tRjNXNkhXcVdHV3EzR3JsMDd3RElzbm5yNmFiU1hJdXVBbCtKOCtkSjMwYng1Uzh4ZnNMaENiYk95Y2JzbVlQT05nRmJHcVZZRzFHUUdBTGxjYWpnaDVOVWJQVUZQbno0Rm5VNkhSbzFUMEtoeENyNzl0akUrK0dBdDVzMWJvSmhHaXBuRU1LQzQ4VngwZi8xMUhMdDI3c0RTWlN1ZzFla3dZM3JwcWpDSHd3RzFXZzJYeTFudEFOYXJkeCs1UTNncHFWKy9BZjYzLzhwOVREdDI3RlRwd3RWcXRaajIxdHVsM3F1bzRXMmJ0dTBxWkhtdFY3OCtsaTVmV2VGdnN5eUx2ZnNPM0ZTZ3I4b3gvMm04YnNRNTJPMjJLa1VxNWFxYjY1VlBQL3ZpbXI2blZxdUhiTml3SWVQRkYxL2NCaS9GcmtnQktyV1NwL0NtZ1lpaUtGS0JGOEFURG9FQkFVU3IxVkdkWGdlMzJ3V253MXVOb0ZLcjBLMWJkOFRHeHFGV3Jkckl5TGlJT25YcUFnQTZkZXFNVHAwNlYzb2VkcHUxVWovb1ZadWllWGw1Q2dXUmIxcEhCUkZRK0lDYW9xM1o3Zll1TE10T3JJN0prWFhwRWhiT253ZTczVnQrWWk0b1FHaG9LTFE2SGVvM2FJZ2ZwYWplSDM4Y2dWcWxRblQwUDJ0cm9hR2hLTWd2cUxDN1ZFVmlOcHVoMSt1aDFtaVFuNS92ellXU2lva05oank4dDNvbDN2OWdBdzcvL2p1T1hFWDR1bkxIYmdEOGNuVmpjeXZIckxKalIwZEh3M0dGV3VlQWdLcVp2RlhkNzNwL0t5Z282SlYzMzMyM2hSSk1rSnJDeUNhcG5BSWlpZ0xoZVFFY3o0UGpQUEI0WkFaZUZ4d09CK3cyRzBxS1M3d012UGxHS2JtL2FrbnFkcHNWMGRIUjF3OXNEb2VqRkZ2SFB3UUx5aVhocHFXbGhXbTEydkVBcXFVT3FtZXYzdWpjcFN0ZUh2WWlubjNtS2FTZVBJSFhSM3BwM0taT200NXZkKzNFNEVFRHNYSDlPc3o0ejV3cU9WSVRhdFZDMjNidDhQU0FKL0hDd0dkaE5CcXV1SCtuVHAyaDArdngxSlA5TUgzYUZOU3RWeDkydXgwOHoyUG0yOVB4MHN1dm9GYnQycGo2MXR0WXZIRCtkZnM5NUNlOVg4cFArc3BLc0poYk5HWjJteFZzSlJwR1hGd2NLQldSYjh5cjhOeVM2OVQ3UjlBS0NBaEVjcDBieDFqN0Q4ZU1pNCtQSC9UQ0M0TnF5T0JHeTRNYlF5a2xvaWdRZ2VmQmNiemtiL1BBN1hMQjVYVEM3bkRBYXJPaXVMZ0lGck1GSnFNUjJWblpTbCtGeXNiUlpNZ0ZDQ290UDd3cWF2RFUxRlNrcGFVaE16TlRxUVgxTlVWOUtneUlyTFZKdmpWR29pR2F4VERNaEJzeDZMZUtTcm02cFRLcTQ4cjlMWmt3V3l4K29za3lZalRrSWpJeUFvbTF5M09mWldSbXdteSsrV05tTk9RaUlpSUNTVmZnWXpPWlREQVlET0I1SGxicjdjOVc0M0s1VnZYdTNYczlBSWUwdVFCNENDRWNBSjRRSWhKQ1JJbGFYS1l2b2xxdGwxbzhJQ0FBZ1lHQkNBNE9SbzBhTlJBUkVZRzR1RGpVcmwwYnljbko1VFhGNEdDb1ZTckV4c1pXcXExZGxZOHRLeXNMMmRuWk1KbE1NSnZORlFZTFBCNVB1ZFFPT1ZqZ2NybWV1RkdnZHJYTzFqdEpydmE2RWhOckl6L2ZCS01oVjJFNXVkczFOWnZOQ29Ibkt3UTFBRWhLVElUSmRQUEdURDRuVVJDdUNHcXlTWHFsQlhzYnltdFpXVmxuYTlXcXRWZjJ0eEZDbElBQ0FIaFpQd2hrY0ZPcFZOQm9OTkJxdGREcjlRcXdoWWFHSWp3OEhGRlJVWWlMaTBPZE9uVlFTMG9udWxxcEVyQlpyVmFsc3FBc3FQbldnUHFtZHZpYW9FYWpzWlphclI1N3E1eXRkOUtpdk5wRVZFSUlXclZxaFlzWm1iQll6Q2l5V09CeTNaMGNiWHA5QUJpV1JXUkVKQklUcjd3ZzJyUnVqY3pNUzhndktLaldNZFByQThDcVZQK29xZDNKVXJObXpjRmZmdm5sMmFlZWVpb2JsNk9rTXJCUk9aTGdKYWZrS2NNd2hHVlp5cklzWEM1WEtTSktHZXdDQWdJUUhKdGcwTndBQUNBQVNVUkJWQnlNc0xDd2ExSmlxclNLWk5QVE53bTNnc29DWDFDVHF3c0lwWlNKaUlnWUE2RFZqUnpNNk9ob0dBekdmeDJ3eGNkZmZUb0RJUVIxa3BOUUp6bkpiNE5lcGJhYitDOEZtNXNwaEpDV2ZmdjJIUUJnRlFCQjZvL2dqWlpLcEpUd0VsTlNDZHpBY1p3Q2JpcVZxa0p3Q3d3TVJFaElDSnI0a0M5VVZmNHhlSkNWbFlXY25CekZuMVlacUYzQkJPMWZIYWtkaXJQVlpJRGpEbmVlTyt3MnJ6TVU5SVp4c2ZuRkx6ZFRkRHJka096czdNNlF5cTBvcFJwSXlidStnUVJCRUlnRWJBcHV5QjJ1SEJMTlVVbUpOMHFhbjUrUG5Kd2NoZUxvaG1sc2RydTl3bncxWDhKSUdkaDRuaTluZ21ablo4ZXExZXJSMVRXWTk5NTdMNHhHSTR3bUU2d2x4WGNrTmJqc0RFMUlxSG1uK1ZiODRwZFNFaDhmUDJqanhvMnBRNFlNRVNSL20rQnJscFkxU2FYcUJPcExSR20zMnhXdFRRNHNoSVNFSUR3OC9LcXFQSzRJYkdYejFjcEVQbjN6MVNveVFVbE1UTXdvQVBkVjUyREd4TVJjZFM5T3YvakZMOVZpa3JZWU1HQkEveUZEaG53QWdQY3hTUVhKSkJYaFpkMVZURktHWVloS3BhSXlDNGh2WUtHb3FLaVVyNjFSbzBaVkI3Wk1uNkpUWDhuUHo4ZVpNMmRLTVhlVTlhK1ZEUno0Y3F5bHBhWDF6TXJLR3UyLzNYN3h5MTBsTCsvWnMrZG90MjdkRHN2Z0JpbFNLaGZMUzAxZzVLcDVoVlB1Y3Zlcnk2WnFXVE8xcWkzOFZJbGhQNVI3aytNRjVGL01BbkVhUU54bUVFOHhDR2NESTloQkJCY2d1QURCNDkxRWpsQlJBQ2dsOGpiNC85cXc5YVAzalBMZlk3LzQ1ZTZUaEdiaS85VkxydkgzK1l1RlBBQ0JBQUpBWmJPVWdSZk5BQ3FDaWp5RjZDWVFYQlNDQXhDc0lJSU9qR0FCNGZKQlBMa2c3a3dRNXpuQWxvcjQ1RnBRcS82NTkwV0Z3WU9zYkFzTXBtS1lMVFlVRlR0aHM3bmdjTHJoZEhKd3V6bDRQRHc4SEErT0Y4RHpJZ1NCUWhRcFJFb0pCWmozbHcwZUNlQUIveTMyaTErdVRTaTljOCtkWlptdWgvZE1md1J5SU1FYlJKQURDU3lWaUNsRmtVSVFLSGhlQk1jTDhIQThQQjRlYmpjSHA1T0R3K21HemVaQ1ViRVRab3NOQmxNeExtVlZyVktubkkrdHVNU0ozTHdpRkJSWVVWamtnTlhxaE4zaEJUV1htNFBidzhQakVjQnhBbmhlSkx4QUlRaVVpSlFTVUJETHhYY2JzQ3p6aG45cStzVXZWeWNpQlF5V1NKZ0t3eUNJTEd4M2RqcmlvQVVMRmh5Wk9ISGlSYTlKNmcwbWVFMVNpSklGU2tSS3dBdUVjZ0pEUER4TDNad0tUbzhhTnBjYUpVNHRDbTA2RkZqMU1CWUZJdHNjQkVOeENQSks0bEFuZ1VOY2VBRXFxNG9zQjJ3NXVZVXc1WmZBVW1oSGlkVUptOTBOaDlNRGw4c2pnUm9QanVQQisycHJGS0FVaEFKTVNJaitOUUFKL21ucUY3OWNIYWdkTzFjZllNTVFGSEpuOThtVnBHWkM3ZVRISjA2Y3VCb0FEMitFVkg0VlFRZ0Z2RzM4Q0NFZ1VyTmxJdEVkc1NvMVZDbzFWR29OMUJvdE5Gb2R0TG9BaUNRUXhUWTE4b29Ta0djT3c3MzF6MWNJYnFWTVVXTitDUXpHWWhSWWJDZ3Fkc0JxYzhIaDhNRHA0dUJ5eTZBbXlDWW80YjBtS0tFaUpaU0NPUEpXZENlRXZQSnZtbkRqcG0zQi9YM2Z1V0cveC9NQ1JrMytBdEgxeGlHMDlwc1lQbW9USEE2UGYyWGY1V0lvakFUWU1NVEV4djlya3M2MVd1MmdQYi91YTQ3TFZPSWFTdUZESmU3Tm5oQkZrUWlDQUY3Z0NjOTVBd2VjNS8vWk8rL3dLS28yaXY5bXRtVlRJRTE2Q1VoSGFWSkUwQUFmVWtSQkJDc2xJQWdxTFlMU2xkNkQ5TjVFcFNnSWlpQktFWkFlbENJSVVnVUVFdEo3c21WbXZqOW1kNUpOSXlCTjJmTTgrMEIyWm5idTNwMTU1MjMzSENzV3F3V0xROFpQMVQ1SUpENHVqdVNVRkhRNkErZ0tjelBlTDlkenV4aTJHeEVKUk1jbWs1Q2dHclhVTkF2cEdkYk12SnJEc05udHNtQzNPMEpRR1VFQkFSQ05Sc1A3N2tzMGZ3d2JzNUZOUC96T3VzOTZzV2wxSDNidStaTitnOWU2SitZUlIxUjhvZitjVGk1QXVmTGxPMlF4YkFaUURHU3FXNG5PMWpCSmxnWEpMbUczMndXYjNaWlpGYlZtVmtWVFVsSklURXdrTGphV3lKdVJlUHY0M3Rxdy9YMDlUZzFCNDFKSlRFb2pKZFZDZXBxVmpBd2JGb3VqV0pEcHJTRkpNcktzT0FzY1lrYlV2RGNFZ1JmZGwyamVTRTIxTUcvcGJzTEdkeUM0Y1NXQ0cxZGk4YXpPckZ4emtKaFlOL1hRb3dwRkFVblMzNUduZHViMEh3d012ZmNwN1ROblRoTTJiWXJHYWVqRXhvM2ZFTkxsTFVLNmRuSVI1SW1Pam1iZ0J3TjR1M3ZYbGkxYXRtcE1GaXB4UlZIVUlvS2lpQTdtSHhSSHE0Y2syYlYyRHlmRlVZYWo1U00xTlpYazVDU05Vand4TVFtN3JNKzEwQ0lDV0cxMk5RU05UU0VoS1kza0ZBdHBhUmJTblViTldUQ3dTOWp0a21DWFpDUVp4N0lweEk4L2FxMHo2SFh2UGVnTDVPbm1rd2tkOWhYQmJjSUlxakdjSnhxTzRmdXRKN1R0ZFp0TVpQallqVlN0UDRyaWxUL2k3UGxJTEJZYll5WnZwbnpORVhnVTdVTzlwaFBac2R0VktOZG1rK2dkK2lYZUpmdFR2UEpIZkRwdmUrWVBHSlBNSzUwWDRsZjJBN3hMOXVlRlYrZHc0VktVdHIxajEwWFViVElSZ0dPLy8wMTZ1bzNnUnBXMDdjODJWRVh2RDRaZmROL2hqeWdFQVZMU2hEczZ0bktWcW93YU0vYWVqbS8rdkxrc1c3cUVTeGN2YWlTdUFGZXZYbUhEK3ZVc1dMU1VaY3RYY3VMRU1ZMDhkZjY4T1RScjlqOVdmcjZLZDk5Ny8xVVBEN09ITXh6RlVTRVZCRUVIT0kyYnl0c21TVWlPVlV3Mm13MnJMWXV5ZkhvNnFTbXBKQ2FxSVdsMFZCUUppVkt1T1RZOXdJMGJDVVRISkJPZmtFcFNrbG9GVFhPMGRsaXNkcXlhcHliaHFJSTZ2RFUxRFAxNDhFdTlLS0NDKzczR2dtVy9zSFY5UDVvOVY0WE5QLzdPSzEwV2Nuam5VR3JYVUJjN3o1aS9rNVVMdW1FeTZxbFVvU2c5KzMzQmp6di9ZT0duYjFHcFFsR1dmcjZQRjE2ZHcvRzlJNmxXUmVYck9uRDRJdVhLQm5CMHp3aU9ucmhLajM2ZlU4akhUTSt1alFrZDlqVVdxNDN3bjRjQzBHL3dWNFM4OXhuN2YxSVptanEycTBOOGdscmV1aDZSZ05Hb0o4QS84OGxzTU9nSThQZmkybzBFOXgzdVJnN0V4c1l5Y2NJNFlxS2pFRVNSOTk3clE0T25HM0x0MmpVR2h2YkhaclBpNit2SGlwVmZaS1k3aG56RWpSdlhBVlYweWRQTGl6VnIxd0VxcmYrY1dUTklURXJFMzgrZndVT0hhVm9XQU91Ky9vb05HOVpyK3dQMGZLY1hScU9Sc0dsVFhNYjIrNGtUUEZXM0xwNmVudGp0ZHZ4OC9UaHgvRGoxNnRYbnhJbmpmUENCU3VqajYrdGJyMFNKNGkwdVhicTBHYkE1WGxvaFFWRVUyUkdTT2xZa1NPaDBkdXgyR3phYkhxdk4wYWlibms2YVNRMUpFeElTaUltTndXVEl2YWRObjU1dTFYcldFcE95VkVFMW8rYklxemx5YTQ0UTFPbXRDU2YyZlZ4SXB4TjdQU3dYd2xzZDY5SHNPWldBOHNWV05XamVwQ29MbC8vQ29wbXE5bVdiRmsveVdudVZhQ1F1UHBYUFZoOWcxWklldk5SYVZmMmVOcTRqaDM3OWl5bXpmbUxsQWxVNXZWalJRaXliMHhXVHlVQ2xDa1g1N2ZnVjVpemVSYyt1amJsOE5aYlNKZjBvV2R3UFQwOGp5K2QyNWRxTmVHMDhiM1NvcC8wL0xkMktoNGMrbHlTckhvdlY3cjZMM2NpQnI5YXVwa2FOR29SMGU1dExseTR4Zjk0Y0dqemRrRktsU3ZIMStnMmNQMytPaWVQSHVSd3phY28wQUJJVEUrajlUZzgrR1BnaG9NcjJUUncvbHZFVEoxTzhlSEYrK25FckMrYlBZL1NZek9OcjFxcVZnM2s0TDRIbHhNUkVQRHc4aUk2T1p0S0VjVWl5aEk4alQ1aVltSWpKdzRQdk4zM0hqaDNiOFBUMGZMVkh6M2YyTEZ1NnhPbzBiSTVWQ1pJajM2YklpaUlJYWtpcTJDVzdZTFByRkwwekpEV29JV2w2ZWpxcHFTbHFTQm9majBFdmtwNHVZemE3amxHOEVhbUdvUEdKbVQxckdlbVpCUU9iemRtemx0VmJBOW5oclZXdFhMd25VTzFodVJEcTFIU2xvYWxlcFRpbnp0elEvcTc0ZU9aQzh6Tm5JNUJsaFliMXlyc2MwL2pwQ3Z4eEpsTlhzMjd0SUV3bWcvWjMvYWZLOGVlNVNHUlpac2lBbG56LzQrOEVQajZRTnEvTjRic2ZUbEM5U3U3TXJHWVBBMWFybE9OOWk4V09sNmZSZlJlN2tRUDE2amRnNTQ3dHJQeHNCWmFNRE1LbXp5alFjYklzTTJiMEtOcTgySmI2OWRWZzZxKy9Mbkh0MnQ4TUh6cVk3aUZkV0wzNlM2SnV1dW9MVktwVW1WYzZkQ3p3K0U2Zi9vT1JJNGJ5VHU5M2FkclV0U2QvMG9SeFhMNzhGMkhUWjJJeW1hcDA2OTdqZVZ3S0NZNEtxWm9TRTFDOU5tUlpRckpMU0hhN1F5dEJyWkphTFJZeUxCbWtwNlZyaFlURXhFUnVSQ2JtOU5qVW5yVVVraHplV3JyVFc3TTRRbEJuejVva0M1SmQ5ZGFjemJobndzZjQ2WFJpejRmcFFwQ3phVnRtV096b2RKbkYzNndHSkx1Vnovb1pXWVYramRuY1hiMWVSSzhYRVVXUnRpL1U1UHFaS1h5LzlYZCszUGtIdzhkK3kveGx1em04WXhpZTJZeFZxUkorWkdUWVNFaE13N2V3cDVhL2k0MUxwV1J4WC9kZDdFWk93MWF2UG5QbkxTVDhTRGlmcjF5QjBXaGt6TGdKdHp4dTJkTEZlSGg0MExsTDF5eTVZaHZGaWhWekNWdi9DUW9YTGt4R1JnWmgwMmRTcUZBaFRwdzRUbUZmWDIzYk00MGEwNkpsSzgxYkxGNjgrS3U5ZXIyN2MvSGloZFlzNGFpZExMeHRMbDZiWFJKMGRydmlVaVcxV0VqUFNDYzFOWTNrNUdUME9vR29hSmxpUlF2aDVXbks5TmhpWXBOSlNFeFhlOWJTclZyQndLWlZRZVZNYjAxV3ZUVm5idTN4Y28rOURUeitNRjBJNFVjdnUveDk2TWdsYXRmSW5VMjFZdmtpNlBVaUI0OWNjbm4vUVBoRnFsVEt6RHVjdmVENlZEdCs4bStxVlZZSklZZU0yc0Q1aTFGMGVlTnBWaTNwd2Y2ZlB1TFU2UnNjUDVtVFE2cDJqZEtZelFiMkhqaXZ2YmZ2MEFWRVVlRHBiRjZqRzI0QVRKbzRudkFqNFRSdi9qekRoby9rMEtHRExnL2QzTEJ2MzE3MjdON044QkVmdXdnV1ZhaFFnYVNrSkg3WnMxdkx0MzIvNlR1WFk4K2ZQOGZHamQ4VWFHeFAxcWlCMVdyRlpESWhTUklIRCt5blppMVZ5N1JXcmRyYU9JLys5aHRCUWVVd21VemwrL1R0MTV4c1JZVHNYcHZzOU5yVVFrSm1sZFNtQ2k5Yk1qSklUMWR6YlNrcEtjVEVKaE41MDlWcjA4Y25xQ3NNVWgzZW1zVmlVOWRzT1VOUW04TmJrMXk5dGQvMkRQZlI2Y1MzSDdxY3hJWmZlYWIrNHp6ZnRDb3JWaDNnNU9ucnJGclNJOWQ5Zlh3ODZOZXJHWU5HcnNmYnkwU2xDa1ZaL3VWK0RvWmZZdXJXRDdYOS9qaHpnNFhMOS9EdTI4RWMvdlV2NWl6YXhkSTVYUnhHTDVJK0g2NWhYdGliQlBoN3NXTFZBYnk5VFpwaFhQdk5FZUlUMG5pdlJ6QmVYaVo2ZEdsTTM4RnI4Zkh4d0dqUTB6djBTN3AzZWdaL1B5LzNYZXhHRG5UdTNKV3dzQ21zWGIwS1daWVpPT2dqUkZGMEtSNGtKaWJ5V3NkWHFQUFVVd3dkTm9LNXMyZVNrWkZCbi9jeVU5OXo1eS9DeDhlSFNWT21NZlBUNlN4YXVBQlBUMDhHWmhOU1BuYjBLQnMycktkOSt3NjNIRnZac2tHMGI5K0JkM3YxUkVIaDJXZURxVmV2UGdEdjkrbkg1RWtUV1BmMVY1ak5ab1lNR3c2QW43OS9oL2F2ZE5pK2NjTTNOc0RxTUc1MlZHVXJsVzFYYmRwMTVOcFVyeTFybGRSaXRXcTliVG9SNGhNa29xS1RLVjdVVjR1U2hGbVRYK1ZHUkR4Uk1jbkV4NmVTbUt3dWVrOU5zMnBMcVRJc2ttQzFTdGp0aWlESmlxZ29pTmJvK2YxME9qSHNZYm9Jbm00K21TZXFsdURDWDlFY09uS0pHdFZMTVgxOFI1NTlSbTJwcU50a0lpKzNxY25Jajlwb3gxaXRka2FPLzQ0dnZqcEVRbUk2dFo0c3pmaVJiZmxmc01yOTlPSEk5Wnc1RjRHZnJ5Yy8vM0lXblU1a2FHZ3IrcnpUQkZEYlBRWU0vWXJ0dTg2UW5KSkJuWnBsbURhMkE0MmVWbVhRT25aZHhPV3JzZnk2ZTdnam4yWWpkTmpYclBubUNLSWcwTEZkSFdaUGVRTVBENFA3TG42RXNlZDQ1ZitrNmxwdWlJK1BuMWpqaWFyZkF5bEFLcEFtQ0lJRlZkM0s3bEMxa25VNm5XSXdHakVaVFlxSGh3a1BzeGxQc3lkZTNsNzQrQlRDdDdBdm9nZ05hMG1VRDNxTWFsVktVRDVJcFRVU3hvOTh5WFVabGNON1MwMnprcDVoSlNQREpsaXNFamFiSWtpU0xNZ3lZdWZYNitrL1c5RGpNUERrdzJiWVdqV3Z6dWloTHoyeU40aWlnQ0M0di92RE1tY0YvZXhIeWJBcGl2SkhvNFlOM3YvNzc2c3BEdU9XSmdoQ09tQkJsZXlUUkZHVVJWRlVEQWFEb2hKUGVpZ2VIaDZZUGMxNGVucmg3ZTFONFVLRkVRU0Zlay9LbENubFQ2VUt4YWo1UkdrOFBBem9VeHk1dFl3TUcxWkwxdFVGV1JhNVordGJXenFuVzVlSHphaGxoK0RiKzEvM2cwZWVtMGJSSXJlL3JFWlM5RnlPcWt4OGtoNUpGc2xJZnpSVnFqek1ablNpZ244aE8wRkZ6aUlLZWJmUXlBcGNpYWxNYklJSlNkYmRzemxUeHlRVFdOaEMyY2ZPM3RMSVhiOTI3Vkg0cWFvdldMajQyUmZidE5ycHlMWFpGRVd4Z1dBWEJMV1FJTXV5QUNnMm15M1RJT0pZNlNTckt4VThUQ2ExdVRsRklqRXBrOW9vcUV3Zyt0UTBpNE81STF0dVRaS1JKRm1RSk1XeHlrQjlvU0RxOWJvdUQvMVRJV0hSSTNFenA5djkrUDFDS2ZRR0Qzd0t1M1ZGVTFOVGlFOU9JaWFoS2pVZnY0cEpuNWlyVWZ2MTNCUG85T2I3TW1lcHFTbkVKaWNSRmY4RTlTcWR5dGU0bFN6MWFCRGpGQzlSb2czd2k4T3dXUUc5SUtESDBkZUdxbXdscU12UUJRVUVRUlFFUlJUVmJnUlJwOE5pdFNLZ2tKb21rWnljUVh4Q0dqRXh5WlFxNFllWW5tNVR2VFdyU3lNdWRydUVKTWxxSmRSQm5xU0FrSFp6Ym11ZzhjTTRXWWQyREgza3d0REl1Q0xvRFI3L0tWYUlmd0l2TDIrS0ZpdUJUdTlCUkZ6dWlsK1hvNnVoMDV2djI1eGxqc25NbFpqS3VBR2lLRGJjcy9kQUxUSkpLQTJLb3VoUUs2U3FOVk1VRkVWV0s2U3lNNHJNdXBaVWxTUklUN2VSa3BwQllsSWFzZkdwUkVZbElhWnJQR3RxejVyTkxtR1hIRWJOR1lKbU1uZ0lSb1B1VGZmUDh2QWdOdEgwbjJTRitLZnc5aWxFVEtJcDEyMXhpZm9ITW1mZVBvV0lTVEM1Znh3SFNwY3VuYjMxdzhuOG9YT3lmamhvalpBbHRmM0Q3bGdrYjdmWnNEcGFRTkl6cktTbVdVbE95U0FoSVkyWTJHVDBGa3NtZWFUV3M2Ym0xZ1MxYjAxeFdFNkVoQ3N6bnhRRTRkWGJDZ2tmNFdUMnZaNGZTZFloeVRxM3A1YUhsNVFZSDRzc2d5aTZ6dmVEbWpOMVRIRjM5SnNuSlNaeSthK0xwT2Fqb2V2bDVVMVF1Y2NwVkxqd1hSbnZ2VDZud1dCb3UvYXI5Vis5OFhySEMyUlNoK3NGUWJBN3dsRlpsZXhUQkVtU0ZVbVNCTWt1S1U2dnpXNnpBUW9XaTB4NnVwWFVWQXVKeWVuRXhhV2lWM05yV1pkTnlRNXZUVmFMQmdvNCtkYTh2RXl2RjJUQS96R0s0M3Y3RlBjRW5VNmlpRzlDdmxUSHVVRW5Tbzlzb2FBZ1NFOVBkekZxb0JxVUJ6bG42ZWxwZC9RZysrdlNCZExTVXZQZEp6VTFoY3QvWGFSR3JUcDNaYXozNDV5MTY5UitEcmlhSmRkbWRYaHRrcUtvdVRaRmtSVlZ4VXB5cFRheTJ4RlFzRmdsTWl3MjFXdEx6aUErTVExOUZ2MENOYTltenl3YXlBNVhFQVZoODFkOVBFUlJlTDBnUnUwL1JuRjh6NUdhbWtKRWdsKytWTWQzaXUzYmZtTEY4bVZFUmQya1JJa1NmUDdsR3M2ZlAwZVA3aUhhUGtPSGorU0ZGOXE0ZjRpSEdMY3lNRm12cFgvVE9UMDl2ZHEwZTduOSt1KyszV2pKekxWaEV3UkVVQnk1TmtGUUZCbEpraFZKbGdTN3VrZ2V1OTJHQUZpdE1oa1dHK25wVmxKU00waEtTa2VmblVEU25pVzNsblg1VlBPbTFWNEZTdDlxb0ZrcGp0MG9lSWppNWVYTnpVaVptL0YrRlBPUHZ5dWZlK1BHRGFaTW5zaVljUk9vVjY4K1NVbEpBRlNvVUpIdE8zY0Q4RTZQYnZmc2V5MWZ0cFIyTDdjbklDQWd4N2htelpqT3laTy9ZelFhYWY1OFM5NTd2NC9HS25IdDJqWG16SnJCeVZNbk1abE10R2pSa2w2OTM4dkJPbkUzY2F0elB0ZTRJUWFEQVVFUUNRb0tvbnVQbmpScTFOaDk4ZjV6bEJyNThhZ0czMzI3Y1JmYUVpdEZEMEttUG9KS0lhNWt6YldwaStRbFFNRnFrN0ZZN0dSWWJLU2xxN2syMFJtQ1NwS2MyZUloWjdaNDRHengwT2tLdE9UL3YwcHhmRi9DMG55b2p1OEVaLzg4UTJCZ0lJMGFOY1pvTkJJWUdPZ0l4d1JNSmhNbWs4bGxMZUhkeG1jcmxoRVhGNXZqL2RHalJsS3lWQ2syZnJlWnhVdVdjK2pnQVRadCtsYjErR1dab1lNL3BGTGxLbno3M1dibXpKblBudDI3MkxqaG0zczJ6b0tlYys3OGhYeS9aU3ZkZS9Ra2JPcGtObnl6L29GY0o0SWdVS2RPSFZxMGFFSHo1czBwVWVMMm5BaEprdGkvZngvRGhuekV0Yi8vdmk4cGdiRmpSdkhXRzYvUnZWc1h6cHcrclczNysrcFZ4bzhiMDR3czFWRWM2MGVkREx1U0pBbVNKQW1LSWd1U2F0d0VwN0N5SktrUnA5VnFkL0hhTk1QbTB0NGhPU20vMVJhUCtLc3puaEFFV3Q3cUMvd1RpbU0zVk04dEw2cmoyOEh4NDhkNHVXMGJwazJkVEdSa0pDKzNiY1BMYmR1dzhyTVZCZjZNUXdjUDBQbXROMmplTEpnZTNVUDQ0OVFwbCsxN2R1OGlwR3NuWG1qMVBOMjdkZUhRd1FQYXRuNTkzK2ZsdG1wbys4R0EvcnpjdGcxOTMzOVhNeUxCd1UzcEd0SU5rOGxFa2FKRnFWdXZIdWZPbmdVZ0xpNE9QMzkvT25YdWpORm9wRlRwMGpScS9DeC8vbm5tbnMzNzdaelRiRGJUcUZGamhnMGZ5WkxGQzEwWVplOFh5cFVyaDA2blk5dTJiZXpkdTVlYU5XdGlNQmh5TmRpNS9YOUEvNzc4c21jM1o4NmNScEtsMnpwMzQ4YU4wZXYxZVQ0Z2N2dDczZGRmNGVucHllcTFYek40OEZER2p4dUQ0cmpJWjg2WXpzdnRYMm0yWnUyNjBtVFRId1YwZ2lBSW9pZzYxNDRpYXpVQVNYczVxZFdzRmpzWkdUYlMwcXlJem9LQlhTc1lPTFVNdEtLQjRPM2wwYjVnVDVJN3B6aDJRMFZLcXZDUGMyeTFhdFhtMjAxYkdCQTZrSklsUy9IdHBpMTh1MmtMSWQyNkYrajRpeGN1OFBISTRielhweTlidG03ajFkZGVaK0FIL1RYdXJpdFhMak4rM0JpR0RCbk81aDkrNHFXWDJqRml4RERTMHRTay9KeTU4L2wyMHhZQVpzeWF6YmVidGpCMy9rSUFSRkdrVStjdStQcXFudWxmZjEzaXdQNzlOR2p3TkFDQmdZSE1tVHNmRHcremRuTWNQM2FNR2pWcTNyTTV2NU56MXF2ZkFLdk5waG5rKzRuQXdFQnUzTGpoY0NaVWlpMC9QMWRQLzhpUmNFWU1HNExOWmlNdUxvNTNlblFuTGs0VkcvNTB4aXlHRFI5NVJ3NUlRRUJBbmw3K2h3TkRPWDdzcUdiTUZzeWY1N2llem11L2I5VnExVEVhalZ5N3BucUs1OCtmbzBHRHA2bFZ1MWFEWEx3MkVSQVZCVUVRQkxYdFE4bGFSSEMwZ05pemVtMTIwak9zaUhaSjFzUlpuR0dvckdTeWVLQW9naWdLTC8rVEgyTFF3RkJlNjlpZWtDNXYwYlh6bTJ6Wi9MMlcxM2l0NHl1MGIvY2kzVVB1N1dLRzdpRmR1SGp4OW5RRnR2MzBJNjkxZklVWFdyZGc5cXk4Q2Y1MjdOak82RTlHL21lTTYrYk5td2h1MHBSR2pScGpNcGxvMWZvRnFsU3R5amFIa0VkQVFDRExWM3hPdGVyVkVVV1JsOXEydzJhMTh2ZmZWd3Q4amo5T25hSkY4NmFFZE9sRWxhcFZlUzY0U2E3N0xWd3dEN09uSnkrMHVYODZRUVU1cHlBSStQdjVrNUo2LzBWNGpFWWpraVFSRUJCQTQ4YU5rV1VaazhtMVA2NXUzWHI0QndRd1p2UW5EQm80Z1BhdmRNRGYzMTg3L2w2Z1Q5LytUSnd3bnJselpyUDFoeTEwNmFvV3FCNnZVSUZmOXV4QmxtVXVYYnJFelp1UnBDU3I4L2I0NHhYWXMzc1hYbDdlemJNWk5YMm1jY3ZzYVZOa1J6anExRWVRVk1kTVZaS1hzRmh0cEdmWUVMTVlOYTFnSUN1QW8yaVFHakczR1hlQklmZWpJY05ZK2NWcTVzeGJ3T2NyVjNEcDBpV04zbmhxMktjUDVRM2VvbVVydmw2L2dXN2QzdVpSUW1Sa0pNV0x1K1p0eXBRSklqSlNaUlgyOXZibXQ5OStwWGV2SG5SNjgzVzZkZTJjYXlpU0g2by84UVRiZHV6aXEzVWJpSWlJY0ZFNGN1THpsWjl4K1BBaEprNmNuR2Y0YzdkUjBITXFpa0pjZkJ6ZUR5anRVcTVjT2FwV3JjcisvZnUxb2xCMnc5dTc5M3NjL2UxWFRFYlRQM293bU0xbU9uYnNTTWVPSFRFWURMUnIxNDZPSFR2eTJHT1B1ZXozZUlVSzZqM3oxUnA2OVg2WFFvWFVYUHVycjcyQlRxK2plN2N1ZlBINVozaDdlMlAyVkwzalFSOE81dWVmZC9KMjk2NVZ1b2FFVkhFWXM2eDVOcDJpS0NwWG0zTTFnaXdqT1VOVFdkWTZPbFN2VGNKaXNhR1hzcXd5Y0RUa09zTlFBTUZrMHJlOW16OUk0Y0srUFBGa0RTNWVPRS81OG5tVEt5WW1KakI1NGdTaW9xS3cyMjEwNnR4VlkrTThjK1kwTTJkTUp6MHRqU0pGaXpGMDJBZ3RNYjU3MTgrc1h2MGxsb3dNcWoveEpCOE0vRkRMUCt6NmVTZGpSMzlNZW5vR2ZmdjExN3lFYjlhdlU1UFhpa0xUWnYralcvY2V0L3dlUjQ2RTgrbjBhWWlDU01sU0pmRTBlMnJiOGh0RDgyYkI5Qi93QVV1WExFSlI0UHN0V3g4NncxYTBhRkVpSXlKYzNydCsvUnExYTZ1OVNudC8yY09xTDc5Z3hzelpsQ3F0RnNxZmE5d3cxNXNydTdHelpHU3dkZXNQdEc3OUFpWVBENG9YTDA3ejVzK3piOTllbC8zV3IvdWE3ZHQrWXRhY2VYZXQ0ZlJXdUoxekhqa1NqdEZnb0ZMbCs3OUV5bXExWXJmYk9YcFVEZnQwT2gwV2k4VTFwWkdTd2tjZkRhUnpseERPbmYyVEtaTW5NblRZaURzcUZxV25wN04rdlZvb2FkZXVIVC84OEFOWkY2ZG5qWEIyNy9xWjhSTW1NVDFzR2hNbVRhWlNwY3FZeldhR0Roc0JRRkpTRW0rODFvRVNKVW9DVUtwMGFUNmRNY3R4Myt4cStQbktsWDlrTld5Q0lEakNVVVhJR25xcktUTUpSUkdRSkFXN1hmWGFiRFk3Rm90ZERVVlZiMDBXSEVVRFRhaEZVUlJSRUlTN0dnTkVSMFZ4NnVUdlZLbFNOZC85enAwN3gvK2FQOCt5RlN1Wk0zY0JzMmJPd09wWUd6YnE0eEdFaGc3azh5L1g4TXd6alZpeWFJR1dyMW0vZmgxejVzeG41UmVyQWZoaHkyYnRNMzE4ZkZqNXhXcEdqeG5IL1BsekFaVlliL1BtVFN4Y3RKUWx5ejdqdDk5K1k5ZlBPL01kbThWaVljSzRNWXdhUFpZdlY2K2xUT215MnJaYmpjRnV0eE1WRmNXNmI3NWwvVGNiSDVqeGNuWnZBeWl5ak4xdTE0eFFteGRmWXMrZVhZU0hIOFp1dC9Qenp6djU0OVJKV3JSVTYwZXhzYkVJQW9nNkhZbUpDYXhlOWFYamMxeXJIc1ZMbE9EUXdZUFliRGFpbzFSSlFxUEp4QmVmcjJUdDJ0WFliRFlTRXVMWnUvY1hhdFNva1JrS2Y3K0piemR1WU9ic3VWcjRkTS9EN3dLZTAyS3hjUGpRUVNaUG1rRHZkOS9IeSt2K0U0UkdSMGRyQnNwb05PTHI2MHRDZ3F2SzJjV0xGd2dPYnNwYm5Ub3o4cFBSR0kwbUxjZDJyM0R5NUVrK25UR0w1NEtiTU9MalQvanQxeU11MjVPU2twZzJkVEl2dnRRMlJ6ajg5OTlYV2JaMGNiTXNJYWhXUkhCNGJLSWdDQzdMckZRYU5kbFJJM0ROdGVuVlNxaXNlV3V5eW1FcEFFSjY1THpXUU1tNzhhV25oMDNGN0dIR2FETFNwMjkvU3BjcGsrLytOV3ZXWXZteUpXemI5aU02blI2TEpZUGs1R1FTNHVQeDl2YWhhclhxQUx6VXRoMU5telVENFBEaFExejcreXJ2OW41SGU3SjVlL3RrNWgwYzdKNVZxMVhURXVIaDRZZDQvdm1XbU0ycWEvemlpeThSSG42WXBzMytsK2ZZcmw2OXdtT1BGZEdNYzVWcTFkajN5NTRDalFHZ2EwaTNlNWJuS0FpeU4raE9tVHlSS1pNbjhueUxsbno4eVdncVZxekVxREhqV0RCL0xwRVJFWlFwVzVhcFlaOXFNbTJ0WDJqRHFWTW42ZEc5S3pxZG5uWXZ0NmRpeFVyRXhidmVPQU1IZmtqWXRLbXNXTDZVTW1YS3NIVDVTb3hHSTFPbWhqRjN6aXkrV3JzR2c4RkFjSk9taERqQ2ZVbVNtRFpWRFFQZmZOMjF3K2p6TDFkVHJGanh1ejRmQlQxbnZ6N3ZJd2dxYyt5Z0R3ZmZ0VDQyUlFGdno0S1h3aTlmdm95dnJ5L05temNINFBqeDQxaXQxaHozdzYyQXVRQUFJQUJKUkVGVVQ4MmFLazIzWHE5blVEYW0zRHZGZDk5OWwzY3VQY3M1YXRXcVRhMWF0YlcvRnk5YXdPNWR1L2hmOCtkekZMSDY5M3VmbE9RVVFycS9YV0wwMlBGUE5ubXUwYS9aOG13MlFiWGt6bkJVVVlzSU1vS2dlbXlTbzFiZ3pMWHBKYWZ5bEhQNWxKcGJBeENNUmwzcnUzWHhEUHB3c0VZYlhCQ3NYYk1LdTgzT2xLblRFUVJCYXg5d2hqaE9HQXdHL1B6VUo2ek5haU80U1ZOTmJpeS94Ry9XRUNtcmR5NElnbGFLemkrL2tsZXphRUhHSUdaZjUzT1AwTEpWYTFxMnl2a1RWcXhZaVYvMkhjejMyRWFOR3VkNTQ1cE1Ka1orUE1ybHZYZDY1ZVMvcTkvZ2FiNWV2eUhIK3hVcVZtVG03TG01ZnJaT3AyUFAzZ1AzMWRBWDVKeTNtcTkvQWtFQXZjNU9hbXBLZ1NxVmlxSnc3Tml4ZjN6ZVZXdSt1bTl6M0t2M2UvVHFuYnVtK3V3NTg3T21LdW9CeDdPRm83cHM0YWlneUxJaVNYWkVRVVNTQk1maWdreXZUWlNkWWFpakdxcVN1V2xoYUdzZUVLS2pZL0QyOFVZUUJJNGZQMFpTVWhLS29sQzZUQm1TazVNNWYvNGNBRC85dUZVVGNxMVh2ejQvNzl6SjlldXFXT3pPblRzNGVmTDNmTTlUdDI1OXRtL2JSbnA2T2phYmpSKzJiS2Erb3pTZEY4cVdEU0k2T2xvcnVVZmN5SlQzdTVNeC9KTW52VGxMYnMrTjdFbHZ6eHc5Z1E5NnpuSWJFMEFSM3dSU2svTVd6ZmIwTEZqSVc5RDk3dVpuM2Mxem1qdzhtbVR6MXB3OWJhTGo1U0RsVUFSSmtoQUV1eUE3bzg0c1hwdGVDME1WQlNWTEdKb1dNYmZwM1FwRDgwSitnaFN2dmZZNlk4ZU00b2N0VzZoY3BRb1ZLbFlrTVNHQndNQkF4b3diejZkaDA3QllMQVErRnNpUW9XcGlza3FWcXZUclA0Q2hnei9FWnJkUkxxZ2NnNGNPeTNjTVQ5V3RTOHRXclhtM2wxb3dlUGE1SmpSdDJreExoaTVkc3BpVTFCUmtTV0xmM3IxMDZSckNTMjNiTVhUNENFWU1HNEtmdno5NnZVNHJIdHpKR1A3SmsxNFU1UUkvNlI4bHBLWWtJNHB5anA1QWRjNmtCekpucVNuSjZFUXAxejdGWXY1eDNJajFKeXBTd2N2SEw4Zll5cFd2Y010RjZaNmVYcFFyWCtHdWpmZEJuQk1vc1gzSHJzclBOMjk2Z2l3MFJrNmpwaG8yQkZtV0hlNGJTTEtnZFhZNEs2UkNrVUF6RnF0ZHNGcGw3SklpeUtwWWk4NFdzMkNTS0FvZjNPNm9IaVh1OW51QmkrZi9KTGhXd1pzK0wwZFZKamE1a0h0dGJqYmNqTHhCUUtFa2doN0xPWmVYb3lzVG0zVC81eXkvTVRtOXlhajRRa1RHQjJDVGpLUStvc1F0NmVucFMxdTNicjBLVlE4aEdWWHdKZDBoK0dJVEJDUlJGR1NEWGxDTVJoR1RVYStZUFF5WXpRWTh6U2E4dkV6b25XR29rb1hKUTFFVVVSU0Y1dmM2Q2VwR1RuaDdLcmZGMTFVbThEeFI4ZFc1R1hrRGJ4ODNOWGhxU2pJcEtjblliUm1VQ1RpWGV5b2g4Q3hSY1UvZXR6bHpqa215cDFNMjhHeStIbmhSL3lTSytpYzk0cUk4U2tQZ3F5emhxTTdCOXFGV1J4RWNDK05CbGhWRlZwdDJGVWxTMUFxcFhVS2ZyU2tYQllTNHl6T3FjUWRpTGJlYkJIVWo1dzJnMTlsdjY0SVdSWm02bGM1d09ib3ljWWxXRXVMaXlNaDROQi8xWnJNbm9pZ1RVTmhHMmNmT0lRcEtudGRwdlVvbnVSSlRtWmdFeXoyZE03UFpFNTBvRWVCcm9XemcyUUwvdG84eU9hc2dDTlczcnU5YnZIWEh1WDlweGsxQmgrRElzWUVnS0tyTmttWFViZzVIWmRUNTBxdlUzOW5XaG5wN05MblRRUlh4VFNBaUljRnQyTzRBS1NtSmxQUzdmY29pVWJCVHZzZ2ZsQy9pbHQrN0hjTVI5TmhaZ2g1N09PVDMzSERGVTdXQ3FnRi9PdzJiQWpvaGF3RkJ6YlVwaXFOTlRYS3NSbkQwdHlFNnZEVUJiVzBvZ2s0VW43dlRBUlh6ajBPUkVvaTZlWTIwQjdDTzd0K0l0TlFVb2lLdWdwUklVYjkveHNYMmFEL3BINzQ1Y3h1MU80T3ZyMmN0MUtLQm5zd0NnaXIwb3RHcEtZS3NJRGk4TmtHV2xTd2VtNU9leU9HeERlclhUQ2NJQlArVEgvS3BTcGU0R2UvRHpmZ0FraE9OcEtTNmY2aTg0TzBGQnAyVlVvRnhGUEZOY2srSUcyNEFCcjJ1WWMzcXhRd24vb2pVWndsSFJRUkVCVVVBUVZBVXh4SXJ4Ykc0d0VHN0pza3lncGRaSjlqc2lpQ3AxVkF4K2Zyc3BwNW00NC91cVhYRERUY2VKSTZldU5MbnFlQ0pwOGhTSFJVRTBnR3JJQWcyUVVEV2FkVlJIUjRtdmVMaFljQnNOcUszUzFrV3ZpdUtjRE1xc2VIOTZveDN3dzAzM01qVGF6UG9LZ04vWmcxRkZRVlJFRkE3T0JDUVpRVzdCSUpOUmhEc2FzZ29nT0RoNFNIYTdYWkJVUlJSVVJTZDNXN2ZKQWpDOCs1cGRjTU5OeDRrN0hiN2JvUEJNREdMeDVZaUNFSXFZQkVFd1NvSWdpUUlncXpYNnhXajBhZzQ2TzRWczltTTZGd1hxU2lLOE9xcnIrb0VRV2pvbmxJMzNIRGpRVU92MTljdFc3WnMxc0tCVmtCd09HS3VWRVpaWG9MUmFCUWxTUklWUmRFbEppWTI5UGIyM3VXZVVqZmN1UDlRRklYSXlFaHUzb3hDa2lSU1VwSWYrVGs1ZGVwVTc3NTkrNTUxZW15T1Y3b2dDRmJBN3ZUYWREcWRvdGZyTVJnTWlzbGtRcCtWeWNMRHc2T3UrL0p5dzQwSFk5U09IVHVHZ3FDdGhuRHI4WUt2LzJQbGdRdGthZnR3a0U5cWpUU0NJQ0FJQXFLb1E2L1hvOWNiTWhlV0FvSk9wM3ZxMy9qbFEwTkRhZFdxVllIMlRVbEpRUkFFZHUvZWZjZm5xMVdyRnBNblQ3N1R2QUdob2FFVUtWS0V3b1VMMDd0M2IwMEV4WTFIRjVHUmtTZ0lGQzFXd3QzY25nVStQajZWczRXaG9wTjRNcXZ0VWhtSlpMV2ZUWkhWSEp0em5hZ2dDSFhjVTNsdk1XellNRFp0MnNTNmRldll0R2tUTzNmdXBGKy9mdTZKZWNRUkZSWHQxdVBOQlFhRDRRbHk1dGl5R1RVRmxXNU5RVkZrRkZuV2R1RDgrZk5GZ0VydXFieDNTRTFOWmQ2OGVZU0ZoUkVjSEV4d2NEQ0xGeTltNWNxVnhNVEV1Q2ZvRVlZa1NYZmtxWjA1L1FjRFEvdmY4L0dkT1hPYXNHbFQyTzVRS25OaTQ4WnZDT255RmlGZE83a0k4a1JIUnpQd2d3R0VkTzFFM3o3dmNmWHFGVzNiaVJQSDZmbDJON3FGZEdiMEp5UHoxV1lWQktIQ3lJOUhlZWRqM0FBRUhBc05uTTI2enFxb1VLSkVpU2YvS3hmSmQ5OTlSLzM2OVRHYnpYaDVlZEc4ZVhQT25YTmxldmpsbDErb1ZxMGFIaDRlTkd2V2pMLysra3ZiSnNzeVk4ZU9wWFRwMG5oN2U5T29VU1AyNzkrZjY3bWlvNk41NVpWWDhQUHp3OXZibXhkZWVJRUxGeTVvMndNREEvbndRNVZOOTlpeFk2U25weE1jbkxtdzQ5bG5ud1hnNE1HRDdydjdFVVp5OHAydE9xbGNwU3FqeG95OXAyT2JQMjh1eTVZdTRkTEZpeTVHNk9yVksyeFl2NTRGaTVheWJQbEtUcHc0eHBFajRZNWo1dENzMmY5WStma3F1blYvbXltVEptcXBtRWtUeGpIeWsxRjh0dkpMU3BVdW8ybG01SVZubndzdTRUQmtMb1NUanJCVVc0R2dLbGlwWHB2bTBoa01oditFWWZ2OTk5OTU1WlZYNk55NU0yZk9uR0hIamgzY3ZIbFRNeTVPekpvMWkwbVRKbkg4K0hHOHZiMXAxcXlacHJ3emNlSkVsaXhad3BJbFN6aDU4aVFkT25TZ2VmUG1uTTFGSERjME5CU0x4VUo0ZURqSGpoMURsbVZDUWpMMUJBWU5HcVJ4MDErL2ZoMmowVWhBUUVCV1Y1dUFnQUN1WGJ2bXZydmR5SUhZMkZnR0RRd2xwTXRiZEF2cHpPRkQ2Z1BRcWNuYm9YMWJRdnU3cGpLR0RmbEk5YUs2dkVXN2wxN2d6VGRlMWJaZHZIaVIwUDU5NmQ2dEM0TStHTURObTVFdXg2NzcraXVYL1FGNnZ0T0xzT2t6S1AvNDQ2NzMyb2tUUEZXM0xwNmVLc21xbjY4Zko0NGYxN3l5NTU1VEgrQ0ZDeGZtenovUFlMVmFpWXlJd01Oc0ppaW9IQUQrL3Y2Y09KNC96WG54WXNYS1pERnFqanhiMW5CVXlReEoxVHdiZWxCNzJIUTZYZlgvd29XZ0tBcWZmdm9wL2Z1cjdubFFVQkFoSVNFc1dMREFaYjlQUHZtRWR1M2FBYkJpeFFwS2xTckY1czJiZWVtbGw1ZzhlVExMbHkvWENoSURCdzVrMTY1ZHpKdzVNOGZuWEw1OG1kS2xTMU95WkVrOFBUMVp2bnk1aTVFYU5peVRQVGN0TFEwUEQ0OGNZemFaVERuazA5eHdBK0NydGF1cFVhTUdJZDNlNXRLbFM4eWZONGNHVHpmVU5IblBuei9IeFBIalhJNlpOR1Vhb0VwWTluNm5oNmEvWWJWYW1UaCtMT01uVHFaNDhlTDg5T05XRnN5ZngrZ3htY2ZYckZVcmg1NUhYc0pEaVltSmVIaDRFQjBkemFRSjQ1QmtDUjlIbmpBeE1SR1Rod2ZmYi9xT0hUdTJZVFFhU1VsSklTa3BDWlBKaE5WcVplNmNXZHk0Y1NPSHdsWjJlSGw3bDh0aTFCd0dUaEVkRkFPT1hqYWN0UUpGVVJSQjcyeHlFd1RoUDJIWWF0YXNTVUJBQU5PblQrZk1tVE9jUFh1V1gzLzlsYUpGWFl2bmpSdG5DcFVFQkFSUXZueDUvdmpqRDU1ODhrbFNVMVBwMXEwYmI3K2RLWlJzdFZwZGpuRml5SkFodlBubW13UUdCdEswYVZOZWZQRkZ1bmJ0bXV2WXpHWnpEalVoVUNYZEhvU01teHNQUCtyVmI4Q2NXVE1BZ2ZyMUd4QTJmVWFCanBObG1UR2pSOUhteGJiVXI5OEFVS1VocjEzN20rRkRCNnY3S0RKZTJmUUtLbFdxVEtWS0JkZEtQWDM2RDQ2TkdFcm9CNE00KytlZlhNeVNocGswWVJ3QmdZR0VUWi9KcXgxZWRqR0lBejhZd0lzdnZrU0hqcTh5WXRqUWZNOWhNQmdxWk11dDVjeXhvYUNBVmtEUVoyNmc2bi9oUWpoNDhDRE5taldqU1pNbU5HM2FsTmRlZTQzdzhIQ1dMbDJhNzFOSXI5ZGpOQm8xcmMwMWE5WlF2YnFycmMvTjIycmJ0aTNYcjEvbisrKy81OGNmZjJUNDhPSE1ueitmdzRjUGF5NjZFNlZLbFNJakk0T0VoQVI4ZlgwQnNObHN4TWJHVXJKa1NmZGQ3RVpPdzFhdlBuUG5MU1Q4U0RpZnIxeUIwV2hrekxnSnR6eHUyZExGZUhoNDBMbEw1a1BXWnJOUnJGZ3hWcXo4NHE2TXJYRGh3bVJrWkJBMmZTYUZDaFhpeEluakZIWmMxNFVMRithWlJvMDFrWE5WaHRLYlFvVUtrWlNZeUlTSlUzajg4Y2M1ZS9aUDdWN0lDNElnVk02U1c4dWFaOHRlUUZDY0JRUVJFS0tpb2lvQnB2L0NoYkJnd1FMcTE2L1AxcTFiR1R4NE1DMWF0T0RHalJzNUpQV3k1c3VTazVPNWVQRWkxYXRYcDN6NThwaE1KaTVjdUVDRkNoVzAxNkpGaTlpeVpVdXVIdHY1OCtmcDBxVUxxMWF0WXYvKy9adzZkWXJqamx4RFZ0U3VYUnV6MmN6ZXZabXE1L3YyN1VNVVJaNSsrbW4zWGV4R0RreWFPSjd3SStFMGIvNDh3NGFQNU5DaGd5N1NrYmxoMzc2OTdObTltK0VqUG5hUnFxeFFvUUpKU1VuOHNtZTNsbS83ZnBPclR1ajU4K2ZZdVBHYkFvM3R5Um8xc0ZxdG1Fd21KRW5pNElIOTFLeWxhcG5XcWxWYkcrZlIzMzRqS0tnY1JxT1JZc1dMVTlqWEY1UERzZGkzZDY5MlRENHdMVjY2UERBWGc2YjFzQUZaUERaSGpzM2IyN3ZDZitWQzhQZjNaK2ZPblp3OGVaS1NKVXV5YnQwNmxpMWJocCtmbjh0KzQ4ZVBwM0hqeHZqNitoSWFHa3JGaWhWcDNibzFvaWd5Y09CQXhvNGRTN0ZpeFdqWXNDSHIxNjlueG93WmJOKytQY2Y1enA0OVM1OCtmWmczYng0QkFRR3NXTEVDYjI5dnFsUlJCVzBtVFpwRTdkcTFhZFdxRlY1ZVh2VG8wWU8rZmZ2aTQrT0QwV2lrZCsvZWRPL2UvYjRwbnJ2eDcwTG56bDBKQzV2QzJ0V3JrR1daZ1lNK1FoVEZmQlhlNXM2ZVNVWkdCbjNlNjZWOXp0ejVpL0R4OFdIU2xHbk0vSFE2aXhZdXdOUFRrNEhaaEpTUEhUM0toZzNyYWQrK3d5M0hWclpzRU8zYmQrRGRYajFSVUhqMjJXQk5PL2o5UHYyWVBHa0M2NzcrQ3JQWnpKQmh3N1hJYVBpSWp4azNialEycTQzU3BVc3plT2p3VzU2clFvV0tqd0hYYy9mWUhEb2hHcmVrZ2lDS29vZkZZaG1nMStzbi8xdC8vTkRRVVA3ODgwOSsvUEZIWW1OajZkbXpKenQzN3NSZ01QRFVVMC94eGh0djBMTm5UNjVldllxdnJ5OCtQajVNblRxVmxTdFg4dmZmZjlPb1VTTVdMbHhJR1ljNnZjMW1ZOHlZTVh6MjJXZkV4TVJRdVhKbFB2bmtFenAwNk9CNEd0WGlqVGZlWU9qUW9VUkhSek5nd0FDMmI5OU9jbkl5ZGVyVVlkcTBhVFJxMUFoUTJ6MjZkZXRHV0ZpWWxrOExEUTFselpvMWlLSkl4NDRkbVQxN2RxNWhyaHVQRHZiczJlTldkOHNIY2JHeFlUVnJWTitPdW1iVStVb1RCQ0VEVlNsZUVrVlJYVE5xTUNpQ0lBaG11OTArVXhURlh1N3BjOE1OdDJGN0dKR1JucjY2WW9WeVgyUXpiS2xaREp0ZEVFUlpweE1WdmNHZzZCM0p1YUIvNnhlZU4yOGVmZnYyL1UvOGVKR1JrVG1xdHdXQkxNdGN2bktWdUxnNEpFa2lJLzNSWEh2cVlUYWowK253OXdzZ0tLZ00rUkdtS29yaW1MTlk3UFo3TjJjZVpqTjZ2WjRBL3dDQ2dzcmVjdi9yN243R1hDRkpVbkVjVGJsWlg0cWlwaEhWN2c0WldRYkpMaUVJZ3VBcHkvSlJvTEo3K3Y1OXNGaXNuRGh4QXAxZTc5WVZCVkpUVTBoSlRrS1M3TlNxV1F1ajBaQ3JVZnYxMTk4UWRicjdveXZxR0pNc1M5U3JXOWZ0c2QwQkZFVTVYNlpVOFEvSUpKMTBFazg2cWNMdGpuQlUwZXYxaXJPNlVOWTlkZjlPUkVSR29OUHIzYXdRRG5oNWVWTzBXQWwwT2owM0ltN2t1czlmbDY4ZzZuVDNiYzZjWXhKRkhWZXVYSFZmdEhjQVFSQktaL1BZc3YvZnBWbFhQSC8rZkZIQW5ibitseUkySnRiTkNwRUx2SDBLRVJNVG0rdTJ1TGk0QnpKbjNqNkZpSWwxa3gzY2FWVC95ZWd4M3VUWjh1SFViUUZRMEFjRUJCUjN6OW0vMVQyL2MxYUlSOEZ6UzB5SXkzWGJnNW96THk5dkV1UGo3dWpZcE1SRUx2OTFrZFI4dEhxOXZMd0pLdmM0aFFvWGZtRHpmaS9IV2JWS3RVSkFUQzdlbXZPT3dObjZvVGVaVEVYdi9nM25wamd1S0h4OENxSFRpUlFwVW9UaXhXL3ZHU01Ja0o3dUpxbk1DK2w1RUhnK3lPTEtuZjVlZjEyNlFGcGEvZ0s5cWFrcFhQN3JJalZxUFRoYXhYczV6c2VLRkNtVTNWdHpGQThFMTNCVVVmUTZuZTZ1R2pZM3hmSHRJelUxaFJzUmtkeUlpT0NwT25mM290eSs3U2RXTEY5R1ZOUk5TcFFvd2VkZnJ1SDgrWFAwNko3SlFESjArRWhlZUtHTis0ZDRpSEVyWTVIMVd2cXZqck5Rb1VLRnNoZ3daM091NEZnTW56V1NFZlNpS0Q1Mk43OVlWb3BqTndvZW9uaDVlUk4xTTRMSXlFaUtGU3QyVno3M3hvMGJUSms4a1RIakpsQ3ZYbjJTa2xUT3J3b1ZLcko5NTI0QTN1blI3WjU5citYTGx0THU1Zll1TkUzT2NjMmFNWjJUSjMvSGFEVFMvUG1XdlBkK0g0MVY0dHExYTh5Wk5ZT1RwMDVpTXBsbzBhSWx2WHEvbDROMTRtN2lWdWQ4cm5GRERBWURnaUFTRkJSRTl4NDlhZFNvc2Z2aXZZOHdtejBLdVJxMUhDL0gwa2tGVVJURmdMdDVjamZGOFQ4d2NONCszTHg1ODY1OTN0ay96eEFZR0VpalJvMHhHbzBFQmdZNlFsZ0Jod2FqeTFyQ3U0M1BWaXdqTGk1bkFuLzBxSkdVTEZXS2pkOXRadkdTNVJ3NmVJQk5tNzRGMUo2OG9ZTS9wRkxsS256NzNXYm16Sm5QbnQyNzJMamhtM3Myem9LZWMrNzhoWHkvWlN2ZGUvUWtiT3BrTm55ei9vRmNKNElnVUtkT0hWcTBhRUh6NXMwcFVlTDJuSWlEQi9ZVDByVVRyNy82Q2pNK0RkUFdkTnBzTnNLbVRTR2t5MXQwRCtuQ3ZuMlphNXJ6WThTOWQ1Rk1LcHUrKzVhaGcxWGFKWVBCbU4xakUzRVVEckpHakZhckZWRVFoTHU2U05HZHpQNW5ucHRka3Y3eDV4dy9mb3lYMjdaaDJ0VEpSRVpHOG5MYk5yemN0ZzByUDF0UjRNODRkUEFBbmQ5NmcrYk5ndW5SUFlRL1RwMXkyYjVuOXk1Q3VuYmloVmJQMDcxYkZ3NGRQS0J0NjlmM2ZWNXVxNGEySHd6b3o4dHQyOUQzL1hjMUl4SWMzSlN1SWQwd21Vd1VLVnFVdXZYcWNjNUJTaEFYRjRlZnZ6K2RPbmZHYURSU3FuUnBHalYrbGovL1BIUFA1djEyem1rMm0yblVxREhEaG85a3llS0YrZEphM3l1VUsxY09uVTdIdG0zYjJMdDNMelZyMXNSZ01PUnFzTFAvUHlNam5hbFRKakZ4MGxSV3IxMUhURXdNMjM3NkVZQ3RQMndoSXlPRGxWK3NadnFNV2N5ZSthbm01ZWZGaUZzUVBQSEVFOXBETmI4eFp2MDdKaWFHZDNwMDU4S0Y4OXJ2b05mckMrWGhxV2t2V1piUjYvV0lnTi9kblBRN3BUaDJRMFZLOGo4dnROU3FWWnR2TjIxaFFPaEFTcFlzeGJlYnR2RHRwaTJFZE90ZW9PTXZYcmpBeHlPSDgxNmZ2bXpadW8xWFgzdWRnUi8wSjhyaFRWNjVjcG54NDhZd1pNaHdOdi93RXkrOTFJNFJJNFpwYWx0ejVzN24yMDBxRThxTVdiUDVkdE1XNXM1ZkNJQW9pblRxM0FWZlgvV3krK3V2U3h6WXY1OEdEVlIyazhEQVFPYk1uWStIaDFtNzBJOGZPMGFOR2pYdjJaemZ5VG5yMVcrQTFXYlREUEw5UkdCZ0lEZHUzTkE4RkZtV2M1QThIRGtTem9oaFE3RFpiTVRGeGZGT2orN0V4Y1VSRVJHQnI2OGZKVXVXUktmVDBhcFZhdzRmUGdTb3JMZlBQdnVjNDNjU01CaU1uRHQzVnR1V0d5TnVBWE5qZVpKVkxsdTZXS01HUDNueWR3YjBWMWNSK2ZyNjhzV3FOWVIweStSRTFPbDB1WVdpdUlhaHFrY3JBdmM4Ymh3ME1KVFhPcllucE10YmRPMzhKbHMyZjYvbE5WN3IrQXJ0MjcxSTk1QXU5M1FNM1VPNmNQSGl4ZHM2WnR0UFAvSmF4MWQ0b1hVTFpzL0ttK0J2eDQ3dGpQNWs1SC9HdUc3ZXZJbmdKazFwMUtneEpwT0pWcTFmb0VyVnFteHpDSGtFQkFTeWZNWG5WS3RlSFZFVWVhbHRPMnhXSzMvL1hmRG0wejlPbmFKRjg2YUVkT2xFbGFwVmVTNjRTYTc3TFZ3d0Q3T25KeSswZWZHK2ZmK0NuRk1RQlB6OS9FbDVBTWw2bzlHSUpFa0VCQVRRdUhGalpGbkdaSEpsSGF0YnR4NytBUUdNR2YwSmd3WU9vUDBySGZEMzk2ZFlzZUxFeGNWeTZkSWw3SFk3NGVIaHBLU28zOEhKaUh2cTFFbUdEUDRRbzhsSVltS2l0czNKaUR0M3ppeU5FZmVmNHMyM09yTnIxOC9NbVQyVGNXTkcwN2RmZjZkM2xpT25LZ2lDZHo2NU5SY2pweGNFNGI0a3hENGFNb3g2OWVxVG1KaEFyNTV2VTdXYXluMldGNzN4dzRBV0xWdlJvbVVydnY1cUxaR1JFWStNMXhnWkdVbUZDaFZkM2l0VEpraWJBMjl2YjNaczM4YjQ4V05JU1U3Sk02eklEOVdmZUlKdE8zWVJFUkhCSngrUFlQbXlwZlI4eDVXSDRmT1ZuM0g0OENIbXpKbVBYcSsvTDkrOW9PZFVGSVc0K0RpOEgxRGF4Um1PN3QrL24xcTU4SmtKZ2tEdjN1L3h4dXNkS1ZPbXJHYWt6V1l6dzRhUFpQS2s4WTdmdFN5ZVpyTjIzUGZmYnlJOVBaMUprNmN4ZSthbkxwK1pGeU51WG1qVnFoWGUzdXI4T1BPQXAwK2Y1dlRwMDlvKzN0N2V2UHZ1KzN3UTJvODMzK3BFNWNwNUx5c1RSZEU3bnpCVU0ybzJtdzA5Y0Y4NXFRc1g5dVdKSjJ0dzhjSjV5cGN2bitkK2lZa0pUSjQ0Z2Fpb0tPeDJHNTA2ZDlYWU9NK2NPYzNNR2ROSlQwdWpTTkZpREIwMlFvdmhkKy82bWRXcnY4U1NrVUgxSjU3a2c0RWZhdm1IWFQvdlpPem9qMGxQejZCdnYvNmFsL0ROK25WcThscFJhTnJzZjNUcjN1T1czK1BJa1hBK25UNE5VUkFwV2Fva251Wk10dHo4eHRDOFdURDlCM3pBMGlXTFVCVDRmc3ZXaDg2d0ZTMWFsTWdJVjBOKy9mbzFhdGRXVzFIMi9yS0hWVjkrd1l5WnN5bFZ1alNnVmcxenU3bXlHenRMUmdaYnQvNUE2OVl2WVBMd29Iang0alJ2L3J4TG9ocGcvYnF2MmI3dEoyYk5tWGZmR2s1djU1eEhqb1JqTkJpb1ZQbitMN0cyV3EzWTdYYU9IajNxRE5GeWFHYWtwS1R3MFVjRDZkd2xoSE5uLzJUSzVJa01IVFlDUVJCNHV1RXpQTjN3R1VmdWJLNUdTMSs0Y0dITVpqTmp4MDFBRkVVc0ZndUZIZk9RRnlOdWZ2anhSelYzOTh3enozRDU4bVV0ZkhaSmUxeTh5T1JKRXhnN2JnSXJsaStsVE5rZzJ1VHRLWHRsTTJKWmpKcVFOV1JGQkR6djU0OFNIUlhGcVpPL1U2Vksva3prNTg2ZDQzL05uMmZaaXBYTW1idUFXVE5uWUxWYXNWcXRqUHA0QktHaEEvbjh5elU4ODB3amxpeGFvT1ZyMXE5Zng1dzU4MW41eFdvQWZ0aXlXZnRNSHg4ZlZuNnhtdEZqeGpGLy9seEFKZGJidkhrVEN4Y3RaY215ei9qdHQ5L1k5ZlBPZk1kbXNWaVlNRzRNbzBhUDVjdlZheWxUT25PcDdhM0dZTGZiaVlxS1l0MDMzN0wrbTQwUHpIalo3WGFOQmwyUlpleDJ1MmFFMnJ6NEVudjI3Q0k4L0RCMnU1MmZmOTdKSDZkTzBxSmxTMEJWVGhJRUVIVTZFaE1UdEJ5SklydXlGQmN2VVlKREJ3OWlzOW1Jam9wU3d5aVRpUzgrWDhuYXRhdXgyV3drSk1TemQrOHYxS2hSSXpNVS9uNFQzMjdjd016WmMrOGJBV2RCejJteFdEaDg2Q0NUSjAyZzk3dnZQeEN0aXVqb2FLMmFiVFFhOGZYMXpTR0ljdkhpQllLRG0vSldwODZNL0dRMFJxT0p1RGpYVlErSER4MWt4NDV0V2c5anJWcTFzZHZ0aUtKSVFrSThGeTllcEZMRlN0cTIzQmh4L3lsKysvVUlRNGVOb0VuVFpudzZjdzZuL3ppVmcrMDZ5NFBTbk0yb1pYMkd1cFQzOVlENWZ2d1kwOE9tWXZZd1l6UVo2ZE8zUDZVZHBJNTVvV2JOV2l4ZnRvUnQyMzVFcDlOanNXU1FuSnhNUW53ODN0NCtWSzJtNmhHODFMWWRUWnMxVTMrb3c0ZTQ5dmRWM3UzOVRwYW5pazltM3NIQjdsbTFXalV0RVI0ZWZvam5uMitKMmVHT3YvamlTNFNISDZacHMvL2xPYmFyVjYvdzJHTkZOT05jcFZvMTl2MnlwMEJqQU9nYTB1MnVYQlIzaXV3TnVsTW1UMlRLNUlrODM2SWxIMzh5bW9vVkt6RnF6RGdXeko5TFpFUUVaY3FXWldyWXB4UXRxdmJYdFg2aERhZE9uYVJIOTY3b2RIcmF2ZHllaWhVckVaZHR1ZERBZ1I4U05tMnEraVF1VTRhbHkxZGlOQnFaTWpXTXVYTm04ZFhhTlJnTUJvS2JOTldTeEpJa01XM3FaUFI2UFcrKzN0RTFUUHh5TmNXSzNmMFZnQVU5Wjc4Kzd5TUlLblBzb0E4SDM5VStOaDhmbndMdmUvbnlaWHg5ZlRWWngrUEhqK2RJNU5lc1dZdWFOV3RwK2FwQldaaHk0K1BqNk5XekI2VkxsMmJpcENrOFZxU0k5cnVlTzNkT3kzZjNHeENxZWE1NU1lSVdCQWNPSE1oejIydXZ2Nkg5UHlBZ2dJOEc1eXZzNHBGUEdPcXdjQ0tTSktFSDdzc2ROdWpEd1JwdGNFR3dkczBxN0RZN1U2Wk9SeEFFclgzQWFaNmRNQmdNK1BtcFQxaWIxVVp3azZhYTNGaCtpZCtzSVZMV1ZpNUJFUEo4WW1UTnIrVFZMRnFRTWVUSEUzWTMwYkpWYTFxMmFwM2ovWW9WSy9ITHZ2d0ZtaHMxYXB6bmpXc3ltUmo1OFNpWDk5N3AxVHZIZnZVYlBNM1g2emZrZUw5Q3hZck1uRDAzMTgvVzZYVHMyWHZndmhyNmdwenpWdk4xTjhhUW1wcFNvRllwNStxZU80V2Zuei9yY29rV3NodkFyQWdNREN5d1F0YmRSRUJBZ0ZaaHo4VldDZG50Z1NDQVRxZTJlenc0MXlGZmR6c0dieDl2QkVIZytQRmpKQ1Vsb1NnS3BjdVVJVGs1bWZQblZXWDNuMzdjU3RpMEtRRFVxMStmbjNmdTVQcjE2d0RzM0xtRGt5ZC96L2M4ZGV2V1ovdTJiYVNucDJPejJmaGh5MmJxTjhoZldLVnMyU0NpbzZPMW5FRkVsdHpCbll6aG44QnM5c1NOMjV1YkJ6bG5lWjI3U0pFaXBPV3pwdHJUczJBaGIwSDN1MWU0eCtNMDV1S3BDVW8ycjgwWml1b2UxQ1RrSjBqeDJtdXZNM2JNS0g3WXNvWEtWYXBRb1dKRkVoTVNDQXdNWk15NDhYd2FOZzJMeFVMZ1k0RU1HVHBDRFFtclZLVmYvd0VNSGZ3aE5ydU5ja0hsR0R4MFdMNWplS3B1WFZxMmFzMjd2ZFNDd2JQUE5hRnBVelcwM2ZiVGp5eGRzcGlVMUJSa1NXTGYzcjEwNlJyQ1MyM2JNWFQ0Q0VZTUc0S2Z2ejk2dlU0ckh0ekpHTzdYay81UlFtcEtjcDVldGZpQTVpdzFKUmxkSHBYVzRzV0xFeEVSUWZUTkNEeTlmWEtNclZ6NUNyZGNZTzdwNlVXNThnOVdsK2tlajFPWG04ZVdXOTVOVUc0VmQ5MG1qaDQ5U3BGaWJvM01PMFZVNUhYcTNNWkMrTXVYcnhBYkYrZGVtNXNOTnlOdkVCZ1lRTmxjY3JtWHIxd2hOdmIrejluTnlCc0VCQVFRVkRidi9ISlVWQlNSa1pIWTdYYVNrOTJzT05uUnBFbVQ5a0FhS29OdUVwbWlMaFkwN1FOQnZ1dk5RVzRQNHA4OTBXKzNYNnRzMlRKRVIwY2pudHFQQUFBZ0FFbEVRVlJ4TS9LR214cmNNWWNwS2NsSWRudXVSZzBncUd4Wm9xTHUzNXc1eHlSTFVyNUd6Um1TRm5Fazg5M0lGZG5EVHNHWll4TUVRVjExSUlxQ29DaUtoTHBFNGE0Z0lpS0N5TWliUEZiVXpWOTUrOTdhRFVxVUtIN2I3QjZLb3ZEWDVTdkV4Y1VpMldVeU1oNU5qamF6MlJOUnB5TXdJSkN5WlV2ZmNvSC9sU3RYaVk2SlFiSkw5MnpPekdaUGRIcjlMVDAxTndvRVdSQ0Vqa0JxRm84dFJSQ0VWTUFpQ0lKTkVBUzdLSXFLb0NpS0ZURGM3WEJVRUhWNGVYbmo2ZmJjYm9rMGg5Z0hLTGNWaHJyaHhpTUdteUFJcjJjeGJNbEFzaUFJYVVCR1ZzT21CKzY2WWF0VHB3NDNiOTdrWmxRVXlVbUpiZ2JkZk9EdDQ0TkJyNmRVcVpMdUVNUU5OL0tIdGFBN09nM2JYYThSRnkxYTlJNDBNdDF3d3cwM0NtallsR3ovYWhDQmRQZDh1ZUdHRy84Q1pCVFlZN3R5NVlwYkRjUU5OOXg0NktFb1Nub3UzcG1pT0JSZG5KMXJpcUlvK3JKbHk2YTZwOHdOTjl4NDJDSExjbXFXMEZNemNObmJQUVJCUUZRVXhVMTU2NFliYnZ3YlBMYnN6SlpLdHY5cmYrdFJlMEhjY01PTkIzL2p1dlY0ODRIZGJrL0pZc0NVTEtHb2tqVVVsV1VadmFJb0NmZFNxY2dOTjl3b21GRno2L0htRDR2RmtweWJ4K1pxdnpKRDBiaEhiWUpLbFNwRnRXclZjaFdqOFBiMjVyUFBQcnVYVHgxQ1EwTXBVcVFJaFFzWHBuZnYzcG9JaWh1UExyTHE4YnFYSStaNTd5Umw4OWdVY21uMUFOV3d4VDZLazNUbXpCa21UWnAwMzg4N2JOZ3dObTNheExwMTY5aTBhUk03ZCs2a1g3OSs3cXYyRVlkYmovZldzRnF0U1ZrOHRWenlhNExLclNpQUtFbFN6S000U2VYS2xXUGl4SW1jT1hQbXZwMHpOVFdWZWZQbUVSWVdSbkJ3TU1IQndTeGV2SmlWSzFjU0V4UGp2bklmWWR5cEh1K1owMzh3TUxUL2ZYQUVUaE0yYlFyYkhVcGxUbXpjK0EwaFhkNGlwR3NubGk5YnFyMmZuOER5aVJQSDZmbDJON3FGZEdiMEp5TUxyTTJhbnA2V2pHdFRicmJxcU5OZkE5Rm1zOTE4RkMrazNyMTdVNzE2ZGQ1NTU1MThHWFBYcjEvUGswOCtpZGxzcG5yMTZpeGR1dFJsKzg4Ly8weWRPblV3bTgzVXExZVBzTEF3RjNIWXdNQkFQdnhRWmRNOWR1d1k2ZW5wQkFjSGE5dWZmZlpaQUE0ZVBPaSt1eDloM0trZWIrVXFWUmsxWnV3OUhkdjhlWE5adG5RSmx5NWVkREZDVjY5ZVljUDY5U3hZdEpSbHkxZHk0c1F4amh3SmR4eVR1OEN5M1c1bjBvUnhqUHhrRkordC9KSlNwY3RvbWhtM1FsSmlVbDZoYUk0VkNQcU1qSXlvVzZuTi9CZWgwK2xZc21RSkRSbzBZTkdpUmJ6NzdyczU5dG03ZHkrZE9uVmk5dXpadEdyVmlxTkhqOUs3ZDI5ME9oM2R1M2ZuNHNXTHRHblRocjU5KzdKbXpScCsrZVVYK3Zmdjd5THdNV2pRSUdyWHJnM0E5ZXZYTVJxTkJBUUVhTnNOQmdNQkFRRmN1M2JOZlhlN2tRT3hzYkZNbkRDT21PZ29CRkhrdmZmNjBPRHBoaTRrcmI2K2ZxeFkrVVZtdW1QSVI5eTRvVEk0SnlRazRPbmx4WnExNndCVkZXck9yQmtrSmlYaTcrZlA0S0hETkMwTGdIVmZmOFdHRGV1MS9RRjZ2dE1MbzlHb01WVTc4ZnVKRXp4VnR5NmVucDdZN1hiOGZQMDRjZnc0OWVyVjU4U0o0M3p3d1NEQVZXQTU2dVpOUE14bWdvTEtBZUR2NzgvUE8zY1VhQzV1UnQxTUxvQlJVd0QwRVJFUkVYbkp6Ly9YOGRSVFR4RWFHc3FRSVVObzI3YXRwbjNveElRSkUralJvd2U5ZTZ0OC9tWExsdVhTcFV0TW5UcVY3dDI3czNEaFFxcFVxY0swYWRQVXAyZmx5cHc4ZVpMVnExZTc1TlNjU0V0THc4UERJOGM0VENaVER2azBOOXdBK0dydGFtclVxRUZJdDdlNWRPa1M4K2ZOb2NIVERTbFZxbFNlbXJ5VHBxalhZMkppQXIzZjZhSHBiMWl0VmlhT0g4djRpWk1wWHJ3NFAvMjRsUVh6NXpGNlRPYnhOV3ZWeXNFOG5KZndrRk5nT1RvNm1ra1R4aUhKRWo2T1BHRldnZVVkTzdacEFzdEpTVW1ZVENhc1ZpdHo1OHppeG8wYk9SUzI4ZzY3VHp2YlBlUzhQRFZuTUNyV3JGa3ppdHRZZy9WZnc5aXhZd2tJQ0tCdjM3NDV0cDA2ZFlwbHk1Ymg3ZTJ0dlVhT0hNbUZDeGVRSkluang0OVR2NzZyUUUyalJvM3lQSmZaYk02MUVtdXhXQjZJakpzYkR6L3ExVy9BemgzYldmblpDaXdaR1FVV1ZKRmxtVEdqUjlIbXhiYlVyOThBVUtVaHIxMzdtK0ZEQjlNOXBBdXJWMytwcWJVNVVhbFNaVjdwMExIQTR6dDkrZzlHamhqS083M2ZwV2xUVjJXM1NSUEdjZm55WDRSTm4rbWlWSitZbU1qQUR3WlFyVnAxK3ZVZlVOQlRaVXdZUHpZdG4xQlVNM1NDb0Rib0Fsd0ZLajJLRjQ2bnB5Y0xGeTZrWmN1V2JOem9xdHhqdDlzWk5HZ1FiNy85ZG83alJGRkVyOWZuRUFUT0wxOVhxbFFwTWpJeVNFaEl3TmZYRjFCVnEyTmpZeWxaMGsybjdrWXVocTFlZmViT1cwajRrWEErWDdrQ285SEltSEVUYm5uY3NxV0w4ZkR3b0hPWHJ0cDdOcHVOWXNXS3VZU3Qvd1NGQ3hjbUl5T0RzT2t6S1ZTb0VDZE9IS2V3NDdyT1MyQzVVS0ZDSkNVbU1tSGlGQjUvL0hIT252MVR1eGZ5ZzZJb2YyY3pZSElXenkzbi9ha2VvMXg1bEMrZUZpMWEwTGx6Wi9yMjdhdUpDQU5VcTFhTmt5ZFBVcUZDQmUxMTRNQUJaczJhaFNBSVBQbmtreHc1Y3NUbHM3TC9uUlcxYTlmR2JEYXpkMittNnZtK2Zmc1FSWkdubjM3YWZSZTdrUU9USm80bi9FZzR6WnMvejdEaEl6bDA2R0NPaDJsMjdOdTNsejI3ZHpOOHhNY3V6YXNWS2xRZ0tTbUpYL2JzMXZKdDMyLzZ6dVhZOCtmUHNYSGpOd1VhMjVNMWFtQzFXakdaVEVpU3hNRUQrNmxaUzlVeXpVdGd1Vmp4NGhUMjljWGtDRy8zN2QyckhaTWZKRW02bnMybzVlR3RxZjBlZWtDUlpmbHlYb28randwbXpKaEIxYXBWWFhKZFE0WU1vVldyVm93ZVBacE9uVHB4K3ZScCt2ZnZ6OENCQXdIbzI3Y3ZzMmZQWnVqUW9iejk5dHNjT25TSUJRc1d1SVNWa3laTm9uYnQyclJxMVFvdkx5OTY5T2hCMzc1OThmSHh3V2cwMHJ0M2I3cDM3MzdmRk0vZCtIZWhjK2V1aElWTlllM3FWY2l5ek1CQkh5R0tZcjRLYjNObnp5UWpJNE0rNy9YU1BtZnUvRVg0K1Bnd2FjbzBabjQ2blVVTEYrRHA2Y25BYkRxaXg0NGVaY09HOWJSdjMrR1dZeXRiTm9qMjdUdndicStlS0NnOCsyeXdwaDJjbDhDeVhxOW4rSWlQR1RkdU5EYXJqZEtsU3pONDZLM0ZsMjAyVzBRdUhwdWlxdSs1ZW0yQ2dDSUlndUNka1pIUnoyZzBUbnhVTHBaU3BVb1JHaHFxdFdFNDhjVVhYOUMxYTFkV3JGaEJ0MjdkQUZpMWFoVVRKMDdrd29VTEZDdFdqSjQ5ZXpKeTVFanRTZmpUVHo4eGNPQkFMbHk0UU8zYXRXblFvQUhyMTYvWGRFVURBd1BwMXEwYllXRmhXajR0TkRTVU5XdldJSW9pSFR0MlpQYnMyYmtXRmR4NGRMQm56eDRlcjFqRlBSRjVJQ1ltNXRQYU5aLzRCVmRhOEJRbkxUZ3FiYmdraXFLczArbFZ3NWFVbE5URzI5dDdyWHY2Ymc4blQ1NGtMUzJOQmcwYWFPK05IajJhSDM3NGdmRHc4UHMyRGxtV3VYemxLbkZ4Y1VpU1JFYjZvN2xFeThOc1JxZlQ0ZThYUUZCUUdVUlJ6QzluNDVpeldPejJlemRuSG1ZemVyMmVBUDhBZ29MS3VnM2JIZUxzbjM4T2EvNi9KcWZKS2VTU0RqaWs5MFJKRkVWWnI5Y3Bla0NKajQrLytDajBza21TZE52eWR2bmRHQmN1WEtCTGx5NnNXcldLV3JWcWNmTGtTZWJObThmdzRjUEpqUGNManNqSXlOdW1VN2RZckp3NGNRS2RYbzlQb2NKdStiM1VGT0lUNG9uNUxacGFOV3RoTkJweS9lMSsvZlUzUkowT2I1OTdQMmVwcVNuRXhzVVJIUk5OdmJwMTg5MzN1cnVmTVZjY09uZ2dsc3lDZ1ZZNGNEQjdPRUpSQlFVRldaWVJCRUh3Qkl6L1orKzc0NXVvLy8rZmQ1ZGNkdmVtcFlXMkRGR2dTQUUvRkJGL2JCemdGMFVGUkN4WWtDRWdJaFFVRkdRclFnc2lVNUNsSUdKWkFySmt5aXBZaG15UTBxYnBidE9SY1hlL1AyNDBTZE5Tb0dYbTlYaEVhZFpkM25mM3ZOZDhQbG1XMVFOUXVKYnc3bXpxMUtsWXZIZ3gwdExTRUJ3Y2pMaTRPSXdlUGJwU2I2RTY3V0dKL3o3cXhvc1RleUVzdEx5WGRPMzZEZVRtNWo0VXdXUWZiMitFT3BIaGMzbHNsZCsvUTJvRjlBRXZZMkIwQ0VWTEFKZ0ZvV1NHSkVsT0pwTnhKTXFTY1JkYzYzZjNGaDhmait2WHI4TmtNdUhxMWFzWU0yYk1Bd00xQU1qT3luWU5UenN4cmM0TldWbk8rUjF5Y25JZXlwcHBkVzdJeW5iTkJOOURxdVVpN0ZzOGJGczk3SXNISW9PdTZKMnpMSHZldFlTUGwzSGN2UTlQUCttbTBXakJza3lGS1ltSHNXWWFqUmFNbFhFZG5MczBpOFZ5RmVYNzF4ejcySGgyRHdIY1pBUkJjQnpIY1ZhcjlYeEZveE11ZXpTTklJQ1NFaGVYVzBWV1VnSFAzY01zcnR6cjhTckl6OGVONjFkUlZHU3NGRGpENm9URHpkMzlvZjIrbXRoUG83SHdwaE5BSytleEVVU1o3b0ZNZktHa3BPU2NDOWdxODQ1NDJtYUR3UUFydzhCWVdEMjB6VnF0RGpLNURINit2Z2dNREt6Mi9kNjFjd2VXTDFzS2d5RURRVUZCV0xscUxTNWZ2b1RZL3Yyazk0eU5uNEN1WGJ1NUR2SWpiTmV2WFVGeGNlWDBQa1ZGUnR5NGZoV05telo3b3Ziejl1MjAydzZBeGdCZ2hhSkJ1WWNJYkFEQVhicDA2VngwZExUckRLb0ExSktUa3dHQ2hFYXI0Mm1iQTZydis0dUtqRWpYWnlBOVBSM05tbFhmU1ptV2xvWVowNmZpeThsZkl6cTZCUW9LZUdxY2lJaEk3TnE5RHdBd01QYjlHbHUzWlV1WDRQWHVQZXpZVE1UOW1qdm5HNlNrL0FPYXB0RytReWNNL21pSU5IeWRtcHFLaExsemtISTJCUXFGQWgwN2RzS0hjWU5SazAza2Q5cm1pekV2UUM2WGd5QkloSVdGb1gvc0FMUnVIZlBBenNFN2dZWHR1ZlF3clNiMmMvKyt2UmtDYURFaXFObDdiYnlYQmx1VktoSGxXclpzbVFYZ3Nndkd5cHRlcndjSUVuNytnVFdTbTlGb3RQRHpEd1JBSUQwOXZkcSs5K0svRitEajQ0UFdyV05BMDdURUUwY1FCQlFLQlJRS0JXcFM3K0xINVV1UmsxTStnVDlwNGdUVUNnN0diNzl2d2FMRnkzRDB5R0VrSlcwQ3dQZmtqUjB6R3ZYcU44Q20zN2NnSVdFQjl1L2JpOTgyL2xwaisxblZiU1l1V0lqTlc3ZWpmK3dBeko0NUhSdC8zZUM2T0dyZXFiZ3ljOGEwa3NyQ1VJSVFRbEhZaDZJUTNzQ3lMSHVLSk1sSTEzTGFtOEdRQ1kxV1YrUGIwZWpjWURBWTdqc2tQWDA2R1pPK21BQ3oyWXppNG1KMGY0MFBNM3U4MFJQOTN1OWZwZTg0ZXVRd0VoUG1RYTlQUjJob0dFWjk4aWthUGZ1czdWMFV5NVl0UWFiQkFQK0FBTVRGRFVhckYvNEhBQmcyOUNQY0VoaFRSMzQ4SERJWmhlRGdFQ1F1V0FpV1pkRzJiVHQwZStVVktCUUsrUG43bzNsME5DNWR2QWlBcjFoNmVubWhkNTgrb0drYXdTRWhhQjNUQnYvK1czTkYrN3ZacGtxbFF1dldNWkRIVDhERUx5YWdVK2N1angwekM4TXdPSHIwQ0xZay9ZNGhRNGNqT0NRRUFEOGtQL2U3YjVIeXp4bVFKSVhZZ1I4aUpvWW5RczNNek1TMHFWT1FuWjBGbmM0Tll6NGJpOXExUXl2ZERrRVFpSXFLZ28rUEQxaVd4Zm56NTVHV2xsYmwvVnp4NDNMOHNYM2JPV2RoS0FDVzR6aTJMTDlHY0NBSXZrRzlvRUFxSGdBQVo3RllraFVLUlM4WGxObWJsYkUra0NxYVJxT0ZzU0R2dnIrbmFkTW9iRXJhaWgxL2JNZktGVDlpOWRxZjcrcnpWNjljd2VjVDRqSHBxeWxvM2p3YWUvZnN4cWlSdy9IVHFyWHc4L2ZIelpzM01HWHlsNWc3Yno0YU5HeUlUYjl0eFBqeDQ3QjV5M2FvMVdva0pDNlF3cmM1YytjaE1yS01PSVlrU2ZUdTA3Y3NKM1A5R2c0Zk9vU1BodkMwVVQ0K1B0TG5SVy9xZEhJeVh1L2VvOGJXL1Y2MkdkMmlKY3dXQ3k1ZHZJaW9aczBleWZPV1pWbXA5Y2oyM3g4UEg0cGF0V3Jod29YellHd3F4OXUzYlVWcGFTbFcvTFFHT1RrNUdQUmhMQm8zYmdJM056ZUpFZmVWVjEvRGlSUEhNV1BhVk16Ly9vZEt0MStuVGgxUUZJV2RPM2RDb1ZEZzVaZGZSbVptSml3V2k5Tjl0UDA3SmVVZjdOKzNGN05tZjN2bGhWYlJqbUdvYlk0TklvQVJBamhydFZxKzNVTk13aFVVRkp4eXdWaDVxNjVDUVpXMlpUUSs5Tis3WlVzUzJyN1VEcTFieDBDaFVLQnpsNjVvMExBaGRncDg5OTdlUGxpMmZDV2VhZFFJSkVuaTFkZGVoOFZzeHExYi8xVjVHK2ZPbmtYSDl1M1FyMjl2TkdqWUVDKzJmY25wK3haK1B4OHF0UnBkdTczeXdINS9WYlpKRUFTOFBMMWdMREkra3VmczhlUEhNSDdjWjdCWUxNakp5Y0hBMlA3SXllRUY2YjZkTXhmajRpZVV1MW1mT1hNYWJkcThLTnlBQ01qbE5DNWR1aWk5OXVLTFBLVzlMU1B1blc0WW9vZkdjZnhFZ0tlbnA5MTdsaTVaSkZHRHA2VDhnNCtIOHplNEs1Y3ZvV2xVRkc3eHJyK3R0OFk0Q1VmQmNad0VjSEk1YmRlZ3k3MzExbHVud0hmMnVxd1NPM1BtTkRwMWVCbDVlYm1TaDlPdjc3dFBWRTR4TU5DK0s3OTI3VERvOVh6K1Q2dlY0dVRKRTRqN01CYTkzK21GOTkvckk5MXRxMnFObm4wV08vL2NpNS9YYjBSNmVycWRFSWhvSzFmOGlMLy9Qb3FwVTZkWDJ5amNuYXlxMitRNERqbTVPZEErb2oyRXpadEh3OHZiRzE5TytnS2ZqUG9ZUGQ3NFA0bEI1azZNdUdmUHB1Q3pNYU5CSzJqazUrZExyNG1NdUlrSmN5VkczTXFNcG1rd0RBTnZiMi9FeE1TQVpWazd3a2tBZU9mZFB0aTdkdzhTNW4ySHlWOU93dEJodkRCTjNmQUluRHh4M0RoMHlFY1pEaUdvSGJBSllGWk8xSVVVa3NjY0FIYi8vdjBzeDNGSFhkQjFaeXNwS2NHYTFhdWZ5Ti9tNys4UHZVTVI0L2J0VklrYi84QmYrN0Y2MVUvNC9QTkpXTDMyNXdwRFhZSWd5b0dkcWJRVW0zN2JDRk1wVDlvY0dCaUk5dTA3NE15WjAzYnYyN0QrRit6YXVRTnp2a3Q0WUgxWmQ3UE40OGVQZ1piTFVhOSsvWWR5ZkRwMjdDZzlIRm1jeGJXUGl4dU1VeWRQUUVFcnF1enhidDZjaE9YTGxtTGE5RmtJZGNpaFZjU0llNmR3dEdIRGhqaDA2SkJVbGJjMXJWYUxRWU0rd3ZwZmZrYTdsMTlHL2ZyOFdGbVRKazNSdmtPbmt3WkRSbVdneHBiTmlZckJLSy96UU1LZU41eTFXcTB1WUt2aUFkdTdaN2ZrM3R2YXZyMTc4T0hBRDlDdjc3dVlPV09hbEZOSVMwdkRvQThIb1BjN3ZUQnI1blFwcWY5UThvWldxMFNxeWJFc3JGYXJCRUxkWG5rVisvZnZ4YkZqZjhOcXRXTFBudDA0ZHpZRkhUdDFBc0FMakJBRVFGSVU4dlB6cEZDQ1krM0pUQU9EZ25EMHlCRllMQlprR2d6OFhWeWh3RThyVjJEZHVqV3dXQ3pJeTh2RmdRTi9vWEhqeG1XaDhPWWtiUHB0STc2YmwvakFlT3FxdWsyVHlZUy9qeDdCOUdsZkkyN1FSdytsY0pDUmtZR2RPM2RLRDJkTU1rYWpFWjkrT2dwOSt2WkRRRUFBWmt5ZldpbTdzeGhpZW5oNFlOYnNiK0hsNVFXVHlRUjNBZUJGUnR4aHcwZEFMcGRMakxpVm1kbHNoc2xrd3NHREIyRXltVUJSVkRsdGo2dFhyMkw2dEsveDFlU3ZjZlRJWVd6ZHVrVjY3ZFZYWHp2ckpBeGxiSE5zb21OR0VJU1VxM056ZDRkTUtJOXlvbHRYV0ZoNHpFVjZlR2RUcXpYbzJLa0xWcTlhaVM1ZHlnRHErdlZyMkxCaFBSSVNGa0NoVkdMbWpHbll0blVMWHUvZUEzUG5mSVAySFRxaTU1dHY0ZGpmUjNIbzRJR0hzdStPRGJvenBrL0ZqT2xUMGFGakozeit4U1JFUnRiRHhDOG40L3NGaWRDbnA2TjJhQ2htenY1Vzh0aTZkTzJHczJkVEVOdi9QVkNVREs5Mzc0SEl5SHJJeWJVSCtWR2pSbVAyckpsWXZtd0phdGV1alNYTFZvQ21hY3lZT1J1SkNYUHg4N3Exa012bGFQdFNPL1I3bjZkZlp4Z0dzMmJ5WWVBN3ZleTU5MWV1V29PQWdPcHZZcTdxTm9jTitRZ0V3Uk1zZmpKNnpBUHRZN3RidTNyMUN0cTJiWWQzZS9lQjFXckYzTy9tSUNjbnAxeFBvYTAxYlJxRmMrZk9naVJKNU9YbDR1clZxNmduRkg0cVlzU3R6REl6TSszQ1h3OFBqM0xDTFNkUEhNZlljZVB4ZlBQbWVLNXhFeXhidWhoZHUzWURRUkM0ZHYzYXRZcEFEUTVUQnlSSlFTYWpZRFlERkVtVlRSNklIdHRISDMxMGROMjZkZmtBM0Yzd1ZibTk4WDg5MGE5dmI0azFGQUQrL3Zzb1VtLzloMEZ4QTZXN2xsWm9GVWxKK1FjVEJVV2c4SWlhNzZycDFMa0xPblh1VXU3NXlNaDYrT3RnNVRxbXJWdkhWSGpoS2hRS1RQaDhvdDF6QXorTUsvZStGaTFiNFpjTkc4czlIeEVaaWUvbUpUcjlib3Fpc1AvQTRRZDZIS3V5elR1dDEvMmFUbGU5N1VSTm1qUkZreVk4NWJaTUpzTW5Ea3k1enF4TDEyNjRkT2tTK3ZmanE5YkRQaDRoaGVRVk1lSldaamR1M0lDSGh3ZmF0MjhQQURoOStuUzVnc05idmQ2Vy91M3Q3WTFQeDR5VlVuNXhBMk5UbllJYVFiRGdPSllUakNSSmppUUpqaUJJYUxWYUxqYzNoL2ZZYkhPaXYvenlpM1hObWpVSFNKSjh4UVZkRlJ0QkVGQ3BWSGlqWjArc1dsVW1qbUV4VzlEMnBYYVM1Smxqd3JrbUcySmQ5dmdhUlZFb0tqSSswT0Y4eDl4b1pRRG80K05UWllVczIvTTlPVG41bnZiTllySDhyZGZyYmNOUXF3aHVCQTl1bkRSbFFKSWdDQklrU1lCV0tPRHU3c0VYRHh4bXJsaUx4WExRZGFyZEdkZ0FvRWYzTjNBNzlaYjBmSFNMRnRpemU3ZEVEYjU3OTU5SVNmbEhjdWUzYjl2S2g0TkNHZjErVGFWU3V3N0dYYTdOdzF5emlyYnQ1K2VIWW1OaHBhbVBxcVpJSG5hS3BqcmVsNXViKzA4bFlhaERLQ3FNVXBFa1NJSUVTWkpTVlJSQ0lvNEZ3R1ZrWkxpQXJZcW1VQ3JScDI5WnZxcEJnNFlZTnZ4ampCMHpHbS8zNm9rL2QrNUFjSEF3QUdENGlGSFl1ZU1QOUg2bkY3WnQyd3F5R21ZZnhUdTl5K3l0eUZoWTRXd3ArWkRXck1oWUNLcUNGcExBd0VCd0hJdk1qSFNuKzFhbmJzUWR3VUN0MXFCTzNZaUh1dTdWdForblRwNjQ2Z1RVeEVlWm1BdEI4SVVza2lnRE5aSUVvVktwQ0t2VlNyQXNTM0ljUjNFY0p3ZWdZRmwySDRCblhaY0ljUExVS2ZnSDNML3U1NFVMNTFHclZqRGMzTnl3Wjg5dWJOKzJGYk5tZjJ2M25nejliVHgvRjUzc04yN2NSSGFPaTBIWDBUTDBhZkR4OFVabzdmSnN0UStMZFpobjlmVkdtQk1HWGRFTUJnUDBlajJzVmlzS0gyQmorS05rSE1lZGI5ZXUzU1R3SWkyMjRpMUZBSW9KZ2hBMERnaUdJQWlXSkVtT29palFOTTNSTkEyRlFnRVpINTlLZVI4cEhMVmFyWHRrTXBrTDJBRElxaW4vVVZwU2lqR2pSL0hLNzFvdFBoczdydHdkWFM2WDM5VjNob2JXUm1hbUFSbjZOR2gxYmk3TkEyTWhqTVpDTUZhclUxQURnTERRVUJnTUQyN054SDFpR2FaU1VCTkRVajgvdjZmNkdCWVdGdjROSjdrMUFJd1lWWXF0SGhSRlFTNlhnNlpwS0pWS0tKVktxRlFxRUZxdGxyQllMQVRETUFUTHNoVEhjUlFBT2lzcjYyVXZMNitOTGxnRDB0UFRrYTdQRUJnNGFzNE1HZWtJRFBDLzZ5RjRqdU53L2NaTjVPUmtnN0d5S0MxOU9za25WU28xU0lxQ2o3Y1BRa05EN2xpb3VYbnpQMlJtWllHeE1qVzJaaXFWR3BSTWRrZFB6V1ZsZHVMRWlVK2pvNk92QWloR21jYUJrU0NJSXNHTE13djZCZ3hGVVp4Y0x1Y1VDZ1dVU2lXblZDcWhWcXRCdUxtNUVXYXpXUVEyMjNCVXliSnNNb0JhcnFVR1RwMUtCa0VRMEdoMVVGZnpIYjY0eUFoallRRUFybHI1MkZ6bXNzY3dERTBqU1hLa1RSaHFDMndsQUVvSmdyRFJFS1U0bXFZbFlGT3BWRkNyMVh3b1NwSWt4ekNNYlNqS0FXQVlodGxCVWRRSHJ1VUdtaldMUW5wNk9neUdUQlFXNUZYYnNMcE9wNE5NSmtOUVVDQUNBZ0pjQysyeXA5cEtTa3IrZ24wMTFDNFVkY0Fvb1llTnh6Q1NKRUZSRkNpS0tzdXhpVzBmd2xBcEM0QXRMQ3o4MDhQRHd3VnNnZ1VHQnRZSWZiZkxYT1l5M3E1Y3VYTEdBZFNzQUt3RVFkaTFlaEFPZld3aW9Jbi9Kc1h5cURoblpkUFR4bnA1ZWYwSjRMWnJ1VjNtTXBjOWlEQzBTWk1tMXdYd3NqbzhHRnRRQXdCYjdMSUZONHFpSUdOWmx1TTRyb3h0MHNaakE4QmV1M1p0TzBWUkExekw3aktYdWF5R3c5QjlqcDZhQTZpSnpMbWNHRjBLUEc4Y3d6QmdHQVpXcXhVV2l3VXloVUloa3JSSjAvOEMyTEVBR0hkMzkrM2UzdDR1WUhPWnkxeFdvM2I4K1BIa1NzSlFpZEZEOU5Ca01obmtjam1Fd2dIRXdvRldxd1ZwRzV2YWNMTko0YWl2cis5QnVGVGlYZVl5bDlWc0dIcXhSWXNXL3ptQW1nVVZNSG80NXRha0VGUW00eDgyRlFXQ0pFbU9aVmxDaUdGRnNRVEdiRFp2cG1tNm9XdjVYZWF5R3IyNG9kZnJrWkZoQU1Nd01CcWZuc21Ed3NMQ2ZiQnZ5cFVlSE1lSmpia2l3U1JZbHVVc0ZndHNkQS9BY1p3VWpzcHNQVGJCYStPSU1vVVhGZ0NUbHBhMkxTd3NiSXpyMUhPWnkyb08xSktUazhHQmtLWWgvSitpMzc5enh4OW5uSGhyVnZEVEJuYkVraVJKY3BSTUJscE9RNkdnb1ZBcW9WS3FvRktyb0ZGcm9OUHB5a0pSVzNCekRFZnIxcTE3bm1YWm5VL2FZaVltSmtLcFZEN1FiVnF0Vm93WU1RSitmbjV3ZDNkSFhGd2Npb3VMWFZmMlUyNTZ2UjRjQ1BnSEJEMTFZM0ZXcTNWdjdBZnZaOXNBbThYQmF5c2Zob29ENzdaaEtDV0RUQzZIWEM0SEtaUEpSRkRqYkR3MnpvYnRnd1hBRkJjWEo3bE92L3UzY2VQR0lTa3BDZXZYcjBkU1VoSjI3OTZOWWNPR3VSYm1LVGVESVJOYW5kdFQrZHZUMDlNT09RbEJMYWk0ZjAxb3hpVTVpaFNBVGNibjErUXlHZVEwWFJhS09oWVJDSUt3YS8xSVNFallQRzdjdU04QWhMaE93M3V6b3FJaXpKOC9INnRXclVMYnRyeVUyYUpGaTlDeFkwZk1tREZEVW1wMzJkTm5ETVBjazZkMjRmdzVMRjcwQTc3OWJsNk43dCtGQytleGRjdG1OR25TRkIwNmRwS2UvKzIzWDdGcDQ2OEFRYUJ0MjNiNElKWnZvS2hNWVBuTW1kTkltUHNkckl3VllhRmhxZGV1WDcvZzRLMUpZYWlJUDQ0TnVTUkZnaVFkdkRXaFNrclRkSm5IWmh1S2l1R29qZGZHakI4L3ZzUmlzZno2dEoxd2E5ZXVSWk1tVGFCU3FWQzNibDNNbTJkL0F1M1pzd2ZObWpXRFNxVkNkSFEwWnMrZWJRZFFQWHYyUlBQbXpRRUF5Y25KS0NrcGtVQU5BTnEwNFpXMmp4dzU0cnE2bjJJckxDeTRwOC9WYjlBUUU3Lzhxa2IzYmNIOFJDeGRzaGpYcmw1RlVWR1I5UHgvLzkzRXhnMGI4UDBQUzdCMDJRcWNPWk9NNDhlUENaL2hCWlpYckZ5TjkvdC9nQm5UcGtxcG1HbGZUOGFFTHliaXh4V3I0T1BydDJQdm50MFdaOTRhUU5oWFJFVndJMGxRdHVOVEFxako1SExJUmRvaXNUd3F2SW1qS0lwZ0dJWWpTUklNdzBoNU5nRFdXN2R1YmFwYnQrNklwK1ZrKyttbm54QWJHNHR2dnZrR25UdDN4bDkvL1lYaHc0ZERyVlpqd0lBQnVIcjFLcnAxNjRhaFE0ZGk3ZHExMHV1MnlrVTllL1pFYmk2dlAzcjc5bTNRTkcwbnFDR1h5K0h0N1kzVTFGVFgxZTJ5Y3BhZG5ZMnBYMDlHVnFZQkJFbGk4T0FoYU5ucUJhU21wbUxVaU9Hd1dNenc4UERFOGhWbDlQVGpQdnNVYVduOHdGQmVYaDdVR2czV3Jsc1BnRmVGU3BnN0Iva0YrZkR5OU1LWXNlTWtrUjRBV1AvTHo5aTRjWVAwZmdBWU1QQkQwRFNOMmJObTJPM2JQMmZPNFBubXphRldxMkcxV3VIcDRZa3pwMDhqT3JvRnpwdzVqWkVqUHdGZ0w3QnN5TWlBVXFWQ1dGZ2QwYk03VllHM1ppVUlNYjlHY0FEQkVRQkhrQ1JIa1NSSWt1S2tTRk1NUXdWdlRhRlFsZ0diVGE3Tk5oeTFteDJOaUlpNFlMVmFONUlrK2NiVGNGSjk4ODAzK09DREQ2UWNXR1JrSkc3Y3VJSEpreWRqd0lBQldMaHdJUm8wYUlCWnMyYnhkOC82OVpHU2tvSTFhOVpJMy9IMjIyVmlGY1hGeFU2TEZRcUZvcHdzbWN0Y0JnQS9yMXVEeG8wYm85LzdIK0RhdFd0WU1EOEJMVnU5Z09EZ1lQeXlZU011WDc2RXFWTW0yMzFtMmd6K2ZNelB6MFBjd0ZoSmY4TnNObVBxbEs4d1plcDBCQVlHWXNjZjIvSDlndm1ZOVBqTzdyUUFBQ0FBU1VSQlZHWFo1NXMwYlZxT2VmaE9Bc3VabVptWTl2VmtNQ3dEblpBbnRCVlkvdlBQblpMQWNrRkJBUlFLQmN4bU0rWis5KzJXWlVzWFp6bDRhcmJnSm9TaDRQaUhXRFN3U1ovSnlydzFXbWpXVmFtVUlPVnlPUnk4TmpnT3hndTlJZ3dBSmk4djc2a0pSOCtmUDQ4WFhuakI3cm1ZbUJqODk5OS9NQnFOT0gzNmREbXgydGF0VzFmNGZTcVZxcHhLRDhCclZUNE1mVXFYUGZvVzNhSWxkdis1Q3l0K1hBNVRhV21WQlZWWWxzV1hreWFpMnl1dm9VV0xsZ0I0YWNqVTFGdUlIenNHL2Z2MXhabzFxMkRJeUxEN1hMMTY5ZkhHLy9XOGkydmtIQ2FNSDR1QmNZUFFydDMvc3dmWUNnU1c4L1B6TVdya3gvQnc5empreEZ1ekxScEliQjYydVRXS3NnbERaUlJrTXJtTnQ2YUFTcVdHVEFRMnNXdFhERWNwaXVJRUhVSGIyVkhHeDhkbkQ4TXdod2lDYVAya24xUXFsY3JwQ1NQK1h5YVRsVk02cjB5VU5qZzRHS1dscGNqTHk0T0hod2NBd0dLeElEczdHN1ZxdVdqdlhPWUUyS0piSUhIK1FodzdmZ3dyVnl3SFRkUDRjdkxYZC96YzBpV0xvRlFxMGFmdmU5SnpGb3NGQVFFQmRtSHIvWmk3dXp0S1Mwc3grNXZ2NE9ibWhqTm5Uc05kT0s5RmdlV09uVHBMM3FKV3E0V2JteHNLOHZNeGVjcTBveSsvMU9aNkpkNmEyTHZHbG5WcENHRW9qMUdTUXlhWHlVREw1YUFWQ2lpVktxZzFhcEEwVFVNdTlINVVFSkxhRlJFQVdJdUtpbjUrR2s2cWhnMGJsa3ZxSHo1OEdJR0JnWEJ6YzhOenp6Mkg0OGVQMjczdStMZXRSVVZGUWFWUzRjQ0JNcUhrZ3djUGdpUkp0R3JWeW5VVnU2eWNUWnM2QmNlT0gwUDc5aDB3TG40Q2poNDlVdTVtNm1nSER4N0EvbjM3RUQvK2N6c1c0WWlJQ0JRVUZPQ3YvZnVrZk52bXBOL3RQbnY1OGlYODlsdlZnckxuR2plRzJXeUdRcUVBd3pBNGN2Z1FtalRsdFV3ckVsZ09DQXlFdTRjSDhuSnpkMWZrclFHRUhac0hRTmg0YkdWNU5jck9XMU5BcVZCQ3JWWkJxOUZDSmdKYlJVVUVtN1lQYVJLaGZmdjJ2eDQ1Y3VSRGdpQWVlMDBFbG1YeHh4OS9sSHUrYmR1MmlJK1BSOCtlUGZIc3M4K2ljK2ZPT0hqd0lPYk1tWU9KRTNteDRLRkRoMkxldkhrWU8zWXNQdmpnQXh3OWVoVGZmLys5WFZpNWJ0MDY1T2JtWXZEZ3dkQm9OSWlOamNYUW9VT2gwK2xBMHpUaTR1TFF2MzkvU1RIYlpTNnp0VDU5M3NQczJUT3diczFxc0N5TFVaOThDcElrN1lvSCtmbjVlS3ZuRzJqMi9QTVlPMjQ4RXVkOWg5TFNVZ3daL0tIMFBZa0xmb0JPcDhPMEdiUHczYmZmNEllRjMwT3RWbU9VZzQ1bzhxbFQyTGh4QTNyMCtMODc3bHRvYUJoNjlQZy9EUHB3QURod2FOT21yU1FlWHBIQXNrd213N2o0Q2VkZmU2WHIyUXE4TlF0QmlLQW1GQTBJOE40YVJZSWlLVTRtVlVMbFV0OGFyYUNoVkNtaEZpWVBpSjQ5ZXlJL1B4K0ZoWVVvS2lwQ2NYRXhTa3BLWURLWkNKUEpCQnM5QkpMak9Ca0FPUUJsVVZIUkFKVks5ZlhqZk5Ja0ppWlcyQng3L2ZwMWhJV0ZZZG15WlpneFl3WnUzTGlCc0xBd0RCOCtIRU9HREpIZXQyUEhEb3dhTlFwWHJseEJWRlFVV3Jac2lRMGJOa2k2b2oxNzlzU05HemR3NHNRSktaODJZc1FJckYyN0ZpUkpvbWZQbnBnM2I5NERuNEJ3MmFObCsvZnZSM2hrZzZmaXR4b01obStmajJwOEJEejl0NmhyWUFSUEJWNUNFRVFwRDNDRWxWZWhvamlaVENZcVVIRzJUQjRhclJZNm5RNmVucDd3OGZGRlVGQVF3c0xDUVBUdTNSdDVlWGtvS0NoQVVWRVJpb3FLVUZKU2d0TFNVcGhNSnNKc05zTnF0WklzeXhJMmVnajA0c1dMdldKalkvOEFFUDYwbm93cEtTa29MaTVHeTVZdHBlY21UWnFFYmR1MjRkaXhZdy9VNjd4eDh6L2s1T1NBWVJpVWxqeWRJMXBLbFFvVVJjSEwweHRoWWJVbDhsUm54bkdjc0diWnNGcHJiczJVS2hWa01obTh2YndSRmhiNjFBTWJ4M0hYUGhzemV1TGFOYXVMQUpTZ1ROZkFDRjVhcndTQVdRQTJScERXWTRWd2sxTW9GZnhjcUVvRnRVWURuVllMTjNkM2VIbDV3OS9mRDhIQklRaVBpSUJNcFZLaHBLUUVORTNEYkRaRExwZkRZckU0VmtodFExSUdBRE53NE1DQzNyMTcvNlJVS2ljOWpnczhiTmd3SkNZbTNzOEJ3cFVyVjlDM2IxK3NYcjBhVFpzMlJVcEtDdWJQbjQvNGVON3R2cE5La3FQcDlYcjQrOS9kNkxQSlpNYVpNMmRBeVdUUXVibTc1UGVLak1qTnkwWFd5VXcwYmRJVU5DMTNldXhPbkRnSmtxS2cxZFg4bWhVVkdaR2RrNFBNckV4RUM4M2FGZG50Sjd5Zk1UYzNkL1BhTmF0Tk5pR29XUVF5QUJZT1lBZ0hiUVB4UHh6SGdXTTVzQ3dMbG1WNUpnK0J6Y05xdGNCaXNjQmlOc05zTXZQQXBsUXFVVkpTWXBkcms4bGtzRnF0b0NnS0RNT0E0emlKTnB6ak9BWUFzM256NXAvZmZQUE45d0RVZmR3V09DRWhBUWtKQ2ZmMUhUMTY5RUI4ZkR4R2pCaUJ0TFEwQkFjSDQ5TlBQOFhISDM4c1hVQTFiZW42ZEZBeW1Vc3dXVENOUmd1TlJvc01mUnJTMHRNUUZscmVTN3ArNHlaSWlucGdhMmE3VHpkdi9vZlFTbVQ0YWdVSFA4bmUydldsUzVlY2RBQTFtOXhhV1l0SEdhRWtCYmxNMUEzbHE1Nml0NmJWYXVIdTdnNVBUeS80K2ZraE9EZ1lkY1BEMGFqUnN5QTFHZzJVU2lVVUNnVm9tb1p0TVVFb0lvQ2lLTTZtbjAxcy9iRDI2dFVydDZTa1pPWFRmQ0hGeDhmait2WHJNSmxNdUhyMUtzYU1HVk5wQ0ZUZGxwMlYvZFFPVDFkbVdwMGJzckt5bmI2V2s1UHpVTlpNcTNORFZuYldVM3RNc3JPemt4WXZXbGdLKzRLQkNHNFNrNGR0aXdjZmlwS2daQlJIVVE3TnVNS1VnVnF0a2tETzI4c2JNcGtNcEZhcmhWcXRobEtweEwyMGZxeGJ0MjR0eDNFdWh0MkhjZ2U4OStIcHA4RnpZMW5HNldzUGE4MDBHaTBZSy9PVW5xdmN4VzltenpyaEJOVEVmRm81d1JaZTZaMTBtQWZsUjZma0FxaXBWRXBvTkJxNHVibkJ3OU1Udm42K0FBQ1pUcWVUS3FKQ3djQXUxeWFUeVRpcjFVb3dET08wWVRjMk5qYi9yYmZlV3FIUmFLWS80UWNHZXIwZUJvTUJWb2FCc2JCNjJFMjFXaDFrY2huOGZIM3ZXdHFQSUlDU0VoZVhXMFZXVWdIUDNjTXNydHpyOFNLU00wSE1Ud2F1NU4zYmhpTTh3QTJKQWhmbFd5Mi9veUEvSHpldVgwVlJrYkZTSUErckV3NDNkM2RrWkdRa3JmcHBSWVc1TlRocHlDVkprdVA3MW1TY1RFYnhvQ2FUZzZiTGRBNTRqUU1kNzYxNSswQ2g0THNMWkI0ZUhpZ29LSURSYUpTcW9XYXpXUUkzcTlVS21Vd0dobUhFcEozVTB5YmsycXh2dmZYV21pMWJ0cnhCRUVTTEp4WFVrcE9UQVlLRVJxdmoyVTJyVWR1NHFNaUlkSDBHMHRQVHExMEpmdGZPSFZpK2JDa01oZ3dFQlFWaDVhcTF1SHo1RW1MNzk1UGVNelorQXJwMjdlWkN3a2ZaRXBPQnEzbjMvdmtyZVNEbUo0TmIwckZhZHVmNnRTc29MaTY2NDNsOTQvcFZQTnU0NllsM2VyMlo3QVRVbkhwcmtKaHliWWZjNVpETDVKRFRmRE91UXFHQVVxV0NSc05QTTNoNjhYazIwV1NlbnA3SXk4dERZV0doYlE4YmFKcm1xd3dPWHBzTjY0ZWsxcng5KzNaelFVSEJqKzd1N2s4a3NPbjFlb0FnNGVkZk0yTEpZbkxab0U5RGVucDZ0WWt5cDZXbFljYjBxZmh5OHRlSWptNkJnZ0tlR2ljaUloSzdkdThEQUF5TWZiL0cxbTNaMGlWNHZYc1BPellUY2IvbXp2a0dLU24vZ0tacHRPL1FDWU0vR2lJTlg2ZW1waUpoN2h5a25FMkJRcUZBeDQ2ZDhHSGM0SExEMmRWcGQ5cm1pekV2UUM2WGd5QkloSVdGb1gvc0FMUnVIZlBBemtIaWZrRE5CdHlxeSs0RWFyYmc5dC9ObTF1dlhMbHN2WU8zeHBUUHJWR1FVUlFualU3SjVUd2RPRTJYZVdzNkxkdzlQT0R0N1dNM0FrbjYrUGpBdzhNRE9wME9hclVhS3BVS0NvVkN5clU1eTdjNXk3VjVlSGhzWmxsMjI1TUliQVpESmpSYVhjM25ZSFJ1TUJnTTFmWjlGLys5QUI4Zkg3UnVIUU9hcGlXZU9JSWdvRkR3ZDcyN2JVbTVHL3R4K1ZMazVKUlA0RSthT0FHMWdvUHgyKzlic0dqeE1odzljaGhKU1pzQThEMTVZOGVNUnIzNkRiRHA5eTFJU0ZpQS9mdjI0cmVOTmNlOVVOVnRKaTVZaU0xYnQ2Ti83QURNbmprZEczL2Q0UElrNzJCV3EzVlhtNWdYTGpqeDFDcjAxa2c3YjYwTTFPVENQS2hDcVlSS3hjdnN1YnU1dzh2VEMvNDIzaG9Ba0g1K2Z2RHk4b0tibXh1MFdpM0U5Zyt4U21vRGJKd05oYmpkaUJYNGFYeUx3V0Q0OFlrOE9JejFnU1NiTlJvdHJGYnJmWC9QNmRQSjZQNWFOOHlhT1IxNnZSN2RYK3VHN3E5MXc0b2ZsMWY1TzQ0ZU9Zdys3NzZOOWkrM1JXei9mamgzOXF6ZDYvdjM3VVcvOTNxamErY082UDkrWHh3OWNsaDZiZGpRajlEOU5UNjBIZm54Y0hSL3JSdUdmalJJQXBHMmJkdmh2WDd2UTZGUXdNL2ZIODJqbzNIcDRrVUFmTVhTMDhzTHZmdjBBVTNUQ0E0SlFldVlOdmozMzVxclQ5M05ObFVxRlZxM2pzRzQrQWxZdkdpaEhmSGlrMkJGUlVWSStuMFR4bzRaWFQwaDYvWHJPMkUvRTJvSGJCekhXVG1PWXppT1kxbVc1UWhBOHRaS1NvcTVUSU1CcWJkdW9hQ2dvSXk5UTZtQ1JxT0dRcUhBZ3ZtSk9IandMNmpVYW50Z0N3b0tnbytQRHp3OVBhSFQ2ZURZL2xGSmxiU2MxeFlZR0hqWVlyRXNlZEtBcmJvS0JWWGFsdEY0MzkvUnRHa1VOaVZ0eGNjalJxRldyV0JzU3RxS1RVbGIwZS85L2xYNi9OVXJWL0Q1aEhnTUhqSVVXN2Z2eEp0djljS29rY01saXB1Yk4yOWd5dVF2OGRsbjhkaXliUWRlZmZWMWpCOC9UaEtsU1VoY2dFMUpXd0VBYytiT3c2YWtyVWhjc0pBLzRVZ1N2ZnYwaFllSHAzRGlYOFBoUTRmUXNpVlBBdURqNDRPRXhBVlFLbFVTRUo1T1RrYmp4azFxYk0zdlpadlJMVnJDYkxGSWdQdzRtZU1RdmZoM1ZsWVdCc2IyeDVVcmw2dmxSbEphV3JwbS9Qanh0eHhBemVUb3JmRmpVenllTUF3RGtxVEFzZ3dzRmdzL1NSQWVqc3lzVExBY0I2VkNDWlhRM25IczJGRW9sVXE0dWJtWDJ6YXBVcWtRRUJBQWIyOXZ1THU3dzdiOW96S3Z6VmxmRzBFUWxuUG56cTBFY052bGhEKyt0bVZMRXRxKzFBNnRXOGRBb1ZDZ2M1ZXVhTkN3SVhidTNBRUE4UGIyd2JMbEsvRk1vMFlnU1JLdnZ2WTZMR1l6YnQzNnI4cmJPSGYyTERxMmI0ZCtmWHVqUWNPR2VMSHRTMDdmdC9ENytWQ3AxZWphN1pVSDl2dXJzazJDSU9EbDZRVmprZkhST1hBRW9QMGdDbTZqL3dkQ0tZUHF0ZnB3RzljR2hKdkM3bTJqUjQzQTZlUlRBSGpHM084WHpBY0FlSGg0NEtmVmE5SHYvUStxWTI5dUh6dDI3SzhLUERYYjNqVVc0SE5yRkVWeEhNZHhGRVdCWlZsT29WQUl3KzBxZUh0NXdXZ3NoRW9vR09UbDVjRnNNdUhGRjErRVhGNSt1b1FFZ0tDZ0lQajYrc0xUMHhOdWJtN1FhRFJRcTlWU0hzWVpBMGhGdWJhb3FLaXJ4Y1hGUHp6cEYzL1h6aDFRV1Boa0N0cnE5WG9FQnRwMzVkZXVIUWE5UGgwQW9OVnFjZkxrQ2NSOUdJdmU3L1RDKysvMWNlb0pWR2FObm4wV08vL2NpNS9YYjBSNmVqcVdMUzN2Nks5YzhTUCsvdnNvcGs2ZERwbE05a0IrZTFXM3lYRWNjbkp6b0gyRWVnaVZIU05BcU9SZ2Mwcmd2ZlExcU45b2lOSS9yOEw5VTN2cXhDRkRoMlBxMTFPUW1EQVAyN2R0UmQvMytBcTVlRzFYaCtYbDVmMlNtSmlZNitDcG1aem4xaml1VE1vWWtNa29LSlJLbU0xbVVDU1BOY1hGeFNBSVFuQzZGRGg4NkJBR0RJaUR6czE1bzdVTTRLbC9Bd0lDa0pPVFUySHJoOFZpRVdheXJKekE5c0d4TEF1Q0lGaU80d2piWEZ1Yk5tMVdIajkrdkIxSmt1MWMvcy9qWi83Ky90Q25wOXZmZm0rbklpcUtiMFU1OE5kK3JGNzFFK1o4TncvQklieG8yWXN4THpqMWFoekJ6bFJhaXUzYnQ2RkxsNjVRS0pVSURBeEUrL1lkY1BEZ0FidjNiVmovQzNidDNJRzVDZlBoNXU3K1FINzMzV3p6K1BGam9PVnkxS3RmLzRFZkgwWHJFTGpIdnlqOWJmazNFN21mN0lTOG5qZEt0bDJHOVhvdWRNTmJJbmZrRHBpUHAwSDdnWDBMVVhoRUJEcDI2b3lWSzVaajVxeHY0T1oyNzFNWWNya2M3ZHJaWCtZN2R1dzRNSHIwNk9OVjhOWVlBVDlZcTlYS0NaRWdLSm1NVXlxVUlBa0NOMjVjbDRZSGVEWVBEVTZmVHNaTDdWNUd2UVlOOE8vRkN4VURHd0NFaElRZ0t5dkxhZXVIQ0d3aXVERU1JejJFR1ZJV0FDSDJ0U1VuSjVzTkJzT1NnSUNBcHhMWWZ0MnducS95Y1J6YXZmei84SDcvV0FCOG04TlhrNzVBWVdFaG1rWkY0ZERCQTFJdTZrR2JiWkdDWTFsWXJWWnB3cVRiSzY5aXlPQTRkT2pVQ2MyYVBZKy8vdHFQYzJkVDhOblljUUI0Z1JHQ0FFaUtRbjUrSHJadTJTSjhqLzFzYkdCUUVJNGVPWUs2ZGNPUmw1c0xYejgvMEFvRmZscTVBdm41ZVhpM2QxOFVGUmx4NE1CZmFOS2tMSisxWlhNU052MjJFWE1UNWo4d25ycXFidE5rTXVGMDhpbk1tREVOY1lNK2VpaVU3cVpEdDJEb3RycjhNYjJlQzdxSlArVFArY0Y2TXcrcVYrdkJjamtiY0RndU8zZjhnWDE3OTJESzE5UHd6ZXhaK0hyYWROU3JkMjhBYmJGWXNIT252WmI2dFd2WHRoWVVGRGhPRjRnZVd6bUdYSXFpUUZJVXdIRlMzNnhjTGtkQVlDQTBHZzEwV2gzKytlY00vUDBEUU5NS1hMMXlCWVVGaGJqNDd3WGs1R1NESkVuSTVYTDBldnVkOHNBbWhxUzV1Ym5JejgrSDBXaEVjWEV4VENhVEhialplbTBNdzNBY3gwRjRTTk1JQUN5QmdZRUhUQ2JUZkpxbWh6eE5vSlo4NmhTMmJFbkN3aCtXZ0tJb2ZESnFCRUpEdzlEdTVmK0h1WE8rUWZzT0hkSHp6YmR3N08rak9PVGdwVHdvYzJ6UW5URjlLbVpNbjRvT0hUdmg4eThtSVRLeUhpWitPUm5mTDBpRVBqMGR0VU5ETVhQMnQ1S2FVWmV1M1hEMmJBcGkrNzhIaXBMaDllNDlFQmxaRHptNU9YYmJHVFZxTkdiUG1vbmx5NWFnZHUzYVdMSnNCV2lheG95WnM1R1lNQmMvcjFzTHVWeU90aSsxay9JNkRNTmcxa3crREh5bmx6MzMvc3BWYXhBUVVQMjloRlhkNXJBaEg0RWdlSUxGVDBhUGVhQjliRld4a3UyWDRmYkovMEQ1cUpIVmV5TTBiejREOTg5aWtEL2pvTjM3VWxKUzhPMmN1ZkR6OTRlYnV6dE9uamgrejhCV2JoOUtTbjRjTjI3Y0RRRzh6STRGQTFRd1pRQ0FzMWdzMEdpMW5OeEd3MEF1cDVHV25nYVpUSVk2ZGVyQ3o4OFAwMmZPUm9QNkRlRGo2NHVGMzgrSFZxdXpBN1Z5d09idjc0L3M3R3prNWVWSndDYU9XWWtlbTQzWDVoaVMyazBqRUFSaDNyTm56L0pPblRyOWp5Q0lxS2NGMkk0ZE80b09IVHBKellLdnZQSXFqaDM3RysxZS9uOUlTZmtIRXdWRm9QQ0l5QnJmbDA2ZHU2QlQ1eTdsbm8rTXJJZS9EbGF1WTlxNmRVeUZGNjVDb2NDRXp5ZmFQVGZ3dzdoeTcydlJzaFYrMmJDeDNQTVJrWkg0YnA1enlpaUtvckQvd09FSGVzeXFzczA3cmRmOW1rNVhEWDJTREllQ21ZZWtQNDNMVHdQTFQ1ZDcyeWMyckxsTm0wYWhhZFBxdVR3NWpqdnp4eDkvT0JZTWJITnJaaW0zUmhDc1FQbk5XYTFXRGdDVVNpV24wK21rV2RDaW9tSmN1bmdSL3Y0QjZOQ3hFOC9rSVV3WStQaFdQaHBXTGp0YXExYXRjcmsyMFdOejhOcWtjSlJsV1Z2VmVJYmpPQktBdFV1WEx2cnM3T3dmdkx5OEZqNU5YcHR0ejZ2QVl5Y2xuR3V5SWRabGo2OVJGSVdpSXVNalFXamc3ZTE5VHltU3RMUzBqV3ZYcmpVNkFUV1RIYWp4bkdzc1FZQWpTWktuOXBielBXcmkySlNDcHVIdDVZWDY5ZXNMdEVTKzhQRHdnSStQajkxa3pxREJ6Z1BDY3Z3Njd1N3VjTmJiVmtIakxpZlNHMVhVdE92dDdiM2RZckVzZmxwTzBPYk5XMkRYenAwb0tTbUJ4V0xCdHExYjBFTG8wV3JhTkFyYnQvRW56T1ZMMWRQL3BGS3BYYWh3bDJ2ek1OZXNvbTM3K2ZtaDJGaHhsWjBMOTdoL2o2b2F2a00wdGRvK3QxaGFXcnA2NU1pUkYyMUNVSk9EdDJaWE1DQUlnaU9FWm44WnJ6akZ5ZVV5WVJhVWxtWkIrU0YzZ1NYWDJ4disvZ0dTZHVsZGVXd0FYMGdRdlRaYnFuQkhyODIyaUNCNmJTeGZCbU9FU2lsSkVBUjE2TkNoWlczYnRuMmVJSWhtVDlLRk0rQ0RmaUFFN2pWZlh6OGtKQzdBODgyYm8xUG5MaGowSVY4d2FQUGlTMmpYN21VQXdQQVJvL0RseE0veDY0YjFDSStJNEJPbVQ5Q2QvbEd5SW1OaGhhMEw1RU5hc3lKaklhZ0tXa2dDQXdPUm5wNk96SXgwcUFXaUJUc2JHZ1V1TWZtZVowYTVjQTlnYVBWbGhPclVqWkFHNFRtT083MW56NTY5VHZKcXR1MGRqa1VEZm5SS0hKdVN5eUNYQzU0YkxZNU5sUTI1ZTNsNndjL1hyOG95bFU1WFdTNlhJemc0Mks2SVlFdHBKSWFpanUwZlRnb0pWZ0NXZHUzYXBXWm1aaTcwOGZGWjlEaGVKRm9uK1k5dGYreXE4UDI5M242blhESVRBUEx5Y2pGejlyZHdjM1BEbmoyN1VWSlNVcVZ0M1Nsc3lNN0pjUUdiZ3htTmhmRHg5WEg2bW8rUE43S3pIL3lhR1kyRjVRZ0JiSzFaczJZd0dBelE2L1VvS3N5Mzc1UFVBaGhiRzBEdCs5aURiT0J5ZHZWZEYxb050Rm9OYnQ2OHVmSEhIMzhzcUNnRWhZT3lPNStWRVpUdk9BNGN5M0ljeTRKbEdUQ01sWDlZTGJCYXpMQ1lTMkV4bDhKVVdneFRhUkZ1WHI5eTc4QUdBQUVCQWNqTnpiWHoycHpsMm13OU5vZENndWkxV1FpQ0lIMTlmWGVXbHBiT1ZTZ1VIejl1RjRtc211N3dwU1dsR0RONkZLLzhydFZLN1JPMmQzUm5YZFNWV1dob2JXUm1HcENoVDROVzUrYlNQREFXd21nc0JHTzFJclMyY3hBSUN3MkZ3ZkRnMWt6Y0o1WmhFQlphT1RENStmblowZTg4NnBhZm43L2twWmRldWxTUnQwWVFoQWhzREVFUWpNamNJYXBPMFRRTmxVb2xlR2RsZE45ZVhsN3c5UzFUbldyUW9BRWFObXhZOVd1MnNoZHIxNjVkWVYrYm85ZkdzaXpoVUVnb1Z5VmR0V3JWMHY3OSt6Y2lTYkw5NDNTeCtQbjVJVjJmY2Q4WFFGU3pabGk0cU9KUjJxSWlJd0lEN2s3TWhTQUlORy9lSE5kdjNFUk9UamJ5Y25KUVd2cDBraytxVkdxUUZBVWZieCtFaG9aVSt0NFcwZEc0ZWZNL1pHWmwxZWlhcVZScVVESVp2TDI5N3docWo1dFpyZFo5RXlkT1BPQUFhcVVpc0FtZ1pwOVhFN1FNUkNWM3VWek95ZVZseEpHMkFPZmg0UUZ2YjI4RUJBU2dkdTI3V3p2aVRvSWp0Mjdkd3ZuejUzSHQyaldrcHFiQ1lEQWdKeWRIQWp4SExWSUI5QWlXWlFtV1pTbU80eWp3V3FRMHgzSEtHemR1dEFvTkRaMEw0TEZTSHpsMUtoa0VRVUNqMVVGZHpYZjQ0aUlqaklVRkFMaHFKNXAwbWN0cXlOSVBIVG8wT3lZbTVwWUFaQ1hnTlVLTFlLOFBhaXVseDloNmF3cUZncFAwUVRXODBMR0hod2U4dkd6RVdlcld4VFBQUElPUWtKQzdpN0x1OUlhUWtCQkpVTmt4MStiWStpSEtZbkc4MlU0a1dIbm5naUREd3NLT0Z4UVVKT3AwdXFtUDAxRnMxaXdLNmVucE1CZ3lVVmlRVnkwc0hBRGZ2eVNUeVJBVUZJaUFnQURYNWVLeXg4SnUzNzY5S2lZbUpsVUlNOFhRczlSSkNHb1Z2RFZwMEYwaWpSUkNVVnVhYjFHL1FBeEZhOVdxZGRlZ1ZpVmc0L000b1U1emJVNTYyc1JDZ21Odm16aHVaU0VJZ25KemMvdlpaRExWcFdsNndPTjBNQU1EQTZ1TjNkWmxMbnRjeldnMHJnNE9EajRGKzlZT3h4RFVZaE9Dc3M1QzBJcEFqVmQxOTBGUVVCQkNRMFB2YVIrcnBCT24wK2tRRWhKaVIyOWt5N2dyRHFrSy9XMTJ2VzJDMXliMXRva0xzV3ZYcmlVc3krNXhuU1l1YzlsamxWZmJ2M0Rod2oxd1hnR1ZQRFk0eklNSzVKR2NMYWpSQXNXM0dJN3FkS0lvQzU5WEN3a0p1ZWVKRE5uTm16ZXJqb0k4VlpIVDdubnhPZkYxNFNFbThGaWhBNThRd2UyVlYxNUpPM0Rnd1BjaElTR2hBTUpkcDR6TFhQWm9HOGR4MTA2Y09KSDA2YWVmRmpvSlFjdUJtaUNBYkNlblo0c2ZGZUVJTCtSQ2dtVlozQTArMlFIYjNiaDZ2cjYrVGljUmJBU1dZVU1mVHBoTUpoQUVBVUc2VDJvQklmaGZSTFpwMCtaRVRrNU9ncWVuNSt5cWhzVXVjNW5MSG82emR1M2F0VFZ2dnZsbXFvTzM1aXdFdGRxMmRvamhwOER2S0JVTXRGcXRYZWdwVmo4akl5UFJ1SEZqcU5YM1BpRnlWMkNpVnFzUkdocGFib2EwZ3ZsUmptVlpRaXdrY0J6SENnVUYyNmtFMHN2TGEzTnhjWEdRU3FVYTR6cDNYT2F5UjlPeXM3TVhoNGVIbjdYeDFFcHRId1JCbUd4QnpURUVGU1FHeXVYVmJNSE5WOURXRFEwTnZTOVF1MnRnQS9nRWVrVjhiYzdHck1UR1hRSGNPR0VxUWN5M2tRRElWcTFhTFRseDRvUy9YQzd2NXpxRlhQWVVoM3JRNi9YSXlEQ0FZUmdZalk4R1EzTnBhZW5QNzc3N3JtMi9XcmtRbE9NNENkUTRqbU1GUmx5T1pWbU9ZUmc3dmo4eHNoTWZZcFZVb1ZCQXJWWkRMcGZqMHFWTER4YllBQ0E4UE56cHFKV1RhUVJPNkdjVFI2M0VXVkxiRmhEaW4zLytJZmZzMmJPNGZmdjJmaFJGZFhHZDRpNTdHa0V0T1RrWkhBaHBHc0wvRWRndmk4WHk1MDhyVit6S3ljbXhPQUUxMndrRGZteUtJRmdDWVBsMEZLL2VMakIzY0VvbEw4U2kwV2o1bmpWM0QzaDVlOEhmUHdDMWdvTVJYamRjMHRHNFg3dW5iNkFvQ25YcjFrVndjREQ4L2YzaDVlVmxWeWxWS3BXMitUZE9aQUt4VmJZUzNGVXIrQllRYytmT25WTXZYYnEwa09PNFk0L3pDYnBwMHlZb2xjcUtFeFZXSzBhTUdBRS9Qeis0dTdzakxpNU9VbmR5MmROcmVyMGVIQWo0QndROU1tTnhMTXVlUEhUd1lOTEVMeVlVT09UVVNvUkhxUjJvU1hSRUpGZStDbHArdWtEbnBvT0hoNmRFUlZRN05MUmFRTzJlZ1EzZ0ZXM0N3c0lRRkJRRVIyMVNKeXBYb3BxelhRdUlBN2labm5ubW1aUzB0TFFGSE1kZGVWSlA0SEhqeGlFcEtRbnIxNjlIVWxJU2R1L2VqV0hEaHJtdTdLZmNESVpNYUhWdWo4eitjQngzOWR5NWMrdjc5bmtud3dIVWJDdWdKanRRRTNyV1NGS2FCNFZjSnVma3RDaDBySUJLWlQ5bDRPUGpBLytBQUlTRTFMNHY3WVZxQXpZQUNBNE9SbWhvS0FJREF5WCt0a3JBRGJiOWJRSi9tMFFsTGp4TXdjSEJCM0p5Y2hJQVpENXBKMjlSVVJIbXo1K1AyYk5ubzIzYnRtamJ0aTBXTFZxRUZTdFdJQ3NyeTNWMVA4WEdNTXc5ZVdvWHpwL0RxQkhEcTN0M3NtN2V2TG02YStjTzEyRS8yRzRIYkFSQldEaU9zNGlDeHh6SENSeHJGRWVRSklxS2pNak56VUdtd1FBQ3ZOaTBScTJHMldUQ2diLyt3cFl0bS9IbnJwM3c5dmF1OXNiMysvYjc2dFdyaDlxMWEwdmc1dUhoWVNmaFp3TnVZa2dxOXNPeHprSlNBQ1lmSDU5dCtmbjUzd2tMV0tQV3FsVXJUSmt5QlMrLy9ETFVhalVpSWlMd3h4OS9ZTzdjdVFnT0RvYTd1enNHREJnZ3FTMk5HREVDblR0M3R2dU83dDI3WTlDZ1FVNi92MmZQbm1qZXZEa0FJRGs1R1NVbEpXamJ0cTMwZXBzMmJRQUFSNDRjY1YzZFQ3RVZGaGJjMCtmcU4yaUlpVjkrVloyN1VxclhweTl2MDdyVmVaUzFkWlRhaEo2OHQyYlgya0V5SkVteEhNZXg0RGpJWkJUTUpoTlVLalVYRWxJYi9nRUJTRTlQaDFxdGdWcWpRVXJLUDNqbDFWY3hldlFZUkVSRTR2Q2hROVcrbnZmZE8wWVFCQ0lpSXB3cVdqbXJqb290SUFBSUFFNkxDUnpIa1I0ZUh1dU5ScU5HbzlIRTEvUkpOWDM2ZEd6ZXZCa3hNVEVZTkdnUWV2VG9nZTdkdStQQ2hRczRmLzQ4MnJWcmg2NWR1K0tOTjk2NDYrL3UyYk1uY25OekFRQzNiOThHVGROMm5GeHl1UnplM3Q1SVRVMTFYZDB1SzJmWjJkbVkrdlZrWkdVYVFKQWtCZzhlZ3BhdFhrQnFhaXBHalJnT2k4VU1EdzlQTEYveFUxbTY0N05Qa1piR2E1Ym41ZVZCcmRGZzdicjFBSUNyVjY4aVllNGM1QmZrdzh2VEMyUEdqcE5FZWdCZytiS2xpNy80ZlB3cEIxQXJ0UUUzdmxnQVdJUnJsaVVJc0FSSmNBUkhnT000VGlhVGdXVlp6dDNESFFxRkFnUkJRSitlRHJWS0RZcWlvRmFyVWI5QlF3VFZxb1dpSWlNT0hUejRNcm5Fd0FBQUlBQkpSRUZVNkFFYndJOWNoWWVIbHlPakZNdThUZ2JrYmZ2YklJU2s0bVNDQ0c2RVZxdGRXVnhjckZLcFZDTnI4dVRwMGFPSHBJMzR4aHR2WU5teVpaZzZkU3AwT2gxYXRteUpaNTk5RnVmT25ic25ZSHY3N2JlbGZ4Y1hGenN0TENnVUNwaE1KdGRWN0xKeTl2TzZOV2pjdURINnZmOEJybDI3aGdYekU5Q3kxUXNJRGc3R0x4czI0dkxsUzVnNlpiTGRaNmJObUFVQXlNL1BROXpBV0l3Y05Sb0FZRGFiTVhYS1Y1Z3lkVG9DQXdPeDQ0L3QrSDdCZkV3U0JJYnk4L04rK09MejhZZWRoSjRsZDhpcmNTekRpRlJsa010cFVad0ZSVVZGTUFwc3hrb1ZINzFwdEZyNCt2cGkrN2F0eU0vUFIxNWUzcU1KYkFDdmNHVkxJVzdidEd2anNkbjJ0VW5neHBhcDZqSUMwRW5nOXRaYmJ5MVp2MzQ5clZRcWEwekd6M2I2UXFGUVNQbEQwV2lhcmhiZ1VhbFVNSnZONVo0M21Vd1BSWi9TWlkrK1JiZG9pWVM1Y3dBUWFOR2lKV1ovTTZkS24yTlpGbDlPbW9odXI3eUdGaTFhQWdDdVg3K0cxTlJiaUIvTDk4S3pIQXVOb0YxUVdGaTQ3SjFlYisxSCtha0MreERVUmtKUEZEdG1HSWFUeStVYzc1eUFvMm1lTERYVFlJQkdvMFYwZEF2OC9mZFJ1THQ3UUtWVWdtVlpyUGh4T1hyMWVoc05uM2tHNDhlTmZYU0JEUURDd3NMc3RCRWNweEZzaUNoaDQ2MXhBdmlKa3drUW12MUFFQVN4WmNzV1l0cTBhVXZpNCtObENvVWlyaVpPSHBrVEh2cUsxS1NjUFcreFdLcTBuZURnWUpTV2xpSXZMdzhlSGg3U1o3T3pzNnZNNWU2eXB3ellvbHNnY2Y1Q0hEdCtEQ3RYTEFkTjAvaHk4dGQzL056U0pZdWdWQ3JScCs5N2R1ZHBRRUNBWGRnS0FFYWpjY1dFK0hGN1UxTCtjZXhUY3dRMU96WmNvZG1lb3hVS2pwYkxZYlpZUUpFa2FJVUNGRVhCMTljWGRlclVoYnU3QndpQ1FHQlFJSFJhSFJpckZSTStuNGp3OEhCY3ZQaXZkQzA4c3NBR0FQWHIxeStuUmVvWWpqcDRiU0s5RVd4eWJveVFneU1JZ2lDKyt1cXJQRjlmM3lVREJ3NGtGUXJGd0lkNW90RTBYYzUxdm5UcFVwVTRvNktpb3FCU3FYRGd3QUc4K3VxckFJQ0RCdytDSkVtMGF0WEtkUlc3ckp4Tm16b0YwUzFhb24zN0RtZ1IzUUp2OXV3QmxtVXI3ZmM2ZVBBQTl1L2JoNFdMbHRqZGlDTWlJbEJRVUlDLzl1L0RpMjFmd3RXclYzSHE1SW1menA0OXUyZmp4ZzBsTnA1YWljUERSQkNFV2NpcDJiSGhNaXpMeVNnWlpESTVTa3BLT0hjdmJ5aVZTdWgwYmxBbytQK1hta3I1SnR4YXdRZ0xEVU5BWUNBVU5NM3Y2NEVEYU5LMDZhTVBiQVJCb0g3OStoS3dPWHBzRE1QWWVteTI0QVpoRkFOQ3ZzM3VPNGNORzVaTjAvU1NmdjM2NFdHQ1c4dVdMVEY3OW13c1c3WU16WnMzeDZKRmk1Q2VubDdoKzlldFc0ZmMzRndNSGp3WUdvMEdzYkd4R0RwMEtIUTZIV2lhUmx4Y0hQcjM3dzh2THkvWFZleXljdGFuejN1WVBYc0cxcTFaRFpabE1lcVRUMEdTcEYzeElEOC9IMi8xZkFQTm5uOGVZOGVOUitLODcxQmFXb29oZ3orVXZpZHh3US9RNlhTWU5tTVd2dnYyRy95dzhIdlFOUDJUaDZmbm54dlcvMUlFKzBLQmJRT3V5WEVPVk9wWG95Z1FESU9Ta21LVWxwWndhclVhbmw1ZVVLbFVxRmUvUG03ZXVJR2pSdzlEcDlPaDE5dnZJaVE0QlBYcTEwZjgrTTh4ZWZJa1dNd1doSVNFWU16WStFY2YyTVJjVXIxNjlld3FwTGE1TmlHdlZxNllBUHRLcVMyNEVRUkJFSEZ4Y1prbWsyblJ3SUVEV2FWU0dmY3dUclRYWDM4ZEkwZU94T2pSbzhHeUxQcjE2NGNCQXdhZ3ROUjVaOHFHRFJ0dzQ4WU5EQjQ4R0FBd2UvWnNXSzFXZE8vZUhTUkpvbWZQbnBnN2Q2N3JDbmFaVXd1cFhSdHo1ODEzbXRiNFpjTkc1emZUWDM2dDhQc2FOR2lJaFl1V3dHZzBycGcxYzhhZVpVc1hWd1Jxa3FjbWdocEprZ3hRUmhvcG95aE9ybFNDcGhVYzMzd3JpTEtvTlhCemQwZGtaQ1Q4L1B3UUZGUUxZWFhxb0c1NE9KUktKWjU3cmpGK1dMUzBSdGZ0anBvSDkyTVpHUms0ZCs0Y3JseTVndFRVVk9qMWVtUm5aNWZUU3hCQ1YwSUFRRUpnNFNVNGppTnROQlBrSE1jcEFDZ25USmpnSGg4Zkg2dFNxWWE0VG4wK1VYemo1bi9JeWNrQnd6QW9MWGs2UjdTVUtoVW9pb0tYcHpmQ3dtcFhHcTV4SENlc1dUYXMxcHBiTTZWS0JabE1CbTh2YjRTRlZVd1J0bi8vZm9SSE5uZ2c2MVJZV0xoc1F2eTR2VGJocHpOUXMyWHNzSWlNSFdKelBVWEpPSUhlbXdjMXBiMjRzYWRubWNwVWFGZ1k2dGR2QUY5ZjN3ZDJMdFFvQjVxL3YzKzU0WGduRlZMWTVObWtTcWx3d2RyMnVJbUZCVXlaTWdVblQ1NzhZY09HRFdhMVduM1ByU0FkT25UQW4zLysrY2hjbUhxOUh2NytkemY2YkRLWmNlYk1HVkF5R1hSdTdpNzV2U0lqY3ZOeWtYVXlFMDJiTklWWW9YTUV0Uk1uVG9La0tHaDFOYjltUlVWR1pPZmtJRE1yRTlGQ3MzWkZkcnVHK3hrTENncCtHRHBrOFA1TGx5NmFLd00xbEZWQUpUMVFnVGhXVUpvaUlJeE9TYXdkSkNWUWYxTVU1RElaeFBsUXRWSUZzOGxVNDcvdGdRRWJ3SXZCaU9CV1dYVlVySkFLdld5YzFXb1Z3WTJ4RFV0RmNOdStmVHMwR3MzU3dzTENVcTFXT3hLQThtNzNiZGV1WFkvOWhaeXVUd2NsazhFL0lBZ3VBelFhTFRRYUxUTDBhVWhMVDBPWUV5TFY2emR1Z3FTb0I3Wm10dnQwOCtaL0NLMUVocStXVFp0Uk5WdHBkbmIyNGxZdG14OUdlZmJiaWp3MUt3aUNJUUNHRUR3MUdVVnhNcG5ncVlsRDdXbzF0Qm9OZEhha2tZR29YVHNVa1pHUkNBMExlK0Rud1FOaHJRMFBENjlJWUZrQ09KdTdxWlJyczFxdDRtdE93UTBBZERyZHF0emMzR0lQRDQvaEFIeWZ0Z3M1T3lzYldqZDNGNkk1bUZibmhxeXNiS2ZBbHBPVEE5MURXRE90emcxWjJWbVZBbHNOV1paZW43NDgrdm1vVTdDZi9YVDAwdXhCRFFLb0VTUkhFaVJIa1FKYkIyMURHQ25NZjJvRnZRSStCUFZEclZwOFh1MWhnTm9EQXpZK2FkbkFLYkE1ZW0yaTV5YUNHOEFQQ0ZjQ2JweW5wK2ZHakl5TUlsOWYzNDhJZ29oNFdpNWVqcnYzNGVtbndYUEx6OHR4K3RyRFdqT05Sb3Y4M0p4NytpeVJuQWxpZmpKdzVlNjY5RGx3VjIrYXNsYTMvbS95K1R0NGFxWnlvRVlJb0VZU0FndXVESEk1elNsb2thbERBRFdKQmRjTGJqb2RMT1pTNU9WbUl6TkRnOHlNTktmckVGWW5IRzd1N284L3NBRkFvMGFOeW9GYkJjQW1nWnVZY0tzSTNNUy8vZjM5LzdoKy9YcEI3ZHExNDBpU2pLNStFT0haVFEwR0E2d01BMk5oOWJDYmFyVTZ5T1F5K0FtMHlIZDFzaE5BU1ltTHk2MGlLNm1BNSs1aEZsZnUrWGdsSmdOWDd3N1VXSEFuejVYY1d0ODVkZloxbEovOXRHL3BzTXVwbFFjMW1RQnF0SUwzMUJ5TEJhTElzZFZpZ29lSFI2WEs3VVZGUnR5NGZoV05telo3TW9DTklBZzBhdFNvUXEvTkdaalllSEJPd1UzNFhvN2pPSzVPblRxSGs1T1Q4NTU3N3JrQkZFVjFyazVRUzA1T0JnZ1NHcTJPWnpldFJtM2pvaUlqMHZVWlNFOVByM1lsK0YwN2QyRDVzcVV3R0RJUUZCU0VsYXZXNHZMbFM0anRYOGJDUGpaK0FycDI3ZVpDd2tmWWlMc0VOUXZIL0htdzhHSlNuNHlGR1RiaHArUHNaNGtBYXVaeU9UVTdVSk9ERmdTT2xRcEJMay9qV0FIMVEyQlFFSXdGZVpXQ211MDUvMFNFb3FMSjVYSUozTzdnc2RubTJ5b0NOM0h3bGhORDA2aW9xSE1iTjI2YzFhMWJ0MHlhcHZ0V3h6N3I5WHFBSU9Iblh6Tml5V0p5MmFCUFEzcDZlclZ4VTZXbHBXSEc5S240Y3ZMWGlJNXVnWUlDbmhvbklpSVN1M2J2QXdBTWpIMi94bzcxc3FWTDhIcjNIblpzSnVKK3paM3pEVkpTL2dGTjAyamZvUk1HZnpRRUZFVUJBRkpUVTVFd2R3NVN6cVpBb1ZDZ1k4ZE8rREJ1c1BSNlRkaWR0dmxpekF1UXkrVWdDQkpoWVdIb0h6c0FyVnZIUEpxZUttditlVTMyb1YxZjVQMVdVQW1vbGZQVUJBTFlDa0NONzFWVHFrUVJGbDBacVBueGJSMWhvV0hJejh1dTBlTlVWU01meGthVlNpVWFOV3FFOFBCd0JBY0hTMExNdGx4dVlyT2ZRcUdReEZWbE1obG5JOFRNMkhLNUNUbUNVZ0FsYjd6eHh1MG1UWnA4YXpRYXZ4RmV2eTh6R0RLaDBlcHFmRjAwT2pjWURJWnErNzZMLzE2QWo0OFBXcmVPQVUzVDhQSHhrVHhuUVFxdHdwblk2ckFmbHk5RlRrNTJ1ZWNuVFp5QVdzSEIrTzMzTFZpMGVCbU9Iam1NcEtSTmZQakVzaGc3WmpUcTFXK0FUYjl2UVVMQ0F1emZ0eGUvYmZ5MXh2YXpxdHRNWExBUW03ZHVSLy9ZQVpnOWN6bzIvcnJob1Z5MDNqOTJoOXZvLzBsL2V5VjBoYkpUQkFCWWM2MUYzN2UrTnZIM0wvSit5M2ZJcFJVTGo3THFweTJvZ1dCZ1UvMmtLRms1VUFNSFpHWm1vcmk0V01xcCtmcjZJaWd3Q0tHaFlhaFh2ejVvWVZSS1BNK2FOV3VHamgwN29uMzc5Z2dLdXJzcTlJb2ZsNlAzTzczd2RxK2UyTHBsYzVrM2FyRmc5cXdaNk5mM1hmVHYxeGNIRHg1NCtCNWJtWmVpUWFOR2pad054WmNMUzBXeFZkaFVTNFVUMG5GQ2dSUEQwbi8vL1pmVjZYUXJNekl5OUw2K3ZvTUlncmhuVVdZclkzMGd5V2FOUmd0andmMVR1Sncrbll4SlgweUEyV3hHY1hFeHVyL0doNWs5M3VpSmZ1LzNyOUozSEQxeUdJa0o4NkRYcHlNME5BeWpQdmtValo1OVZucDkvNzY5V0xac0NUSU5CdmdIQkNBdWJqQmF2Y0JmYk1PR2ZvUmIvL0ZDdHlNL0hnNlpqRUp3Y0FnU0Z5d0V5N0pvMjdZZHVyM3lDaFFLQmZ6OC9kRThPaHFYTGw0RXdGY3NQYjI4MEx0UEg5QTBqZUNRRUxTT2FZTi8vNzFRWSt0K045dFVxVlJvM1RvRzh2Z0ptUGpGQkhUcTNPV2hNTE5vK2pTR2NWa3kySndTSVp6aHJ2MW56bHJ6d3MydnpzSmVUY29abjVvUWZoSldnQk5CamVVZEJ0S21VQ0RuYUtGUWtKK2ZEMFpRbXFKcEdsNWVaWjVhYUJnUGFvNlNlWFhxMUFGRlVkaTVjeWNVQ2dWZWZ2bGxaR1ptMnBGR09NNjlpbitucFB6RG4yUExWOEJrTWlFdWJnQ2ltajJQb0tBZ2JOKzJGYVdscFZqeDB4cms1T1JnMElleGFOeTRpVVF0bnA2ZS9uQThOdEYwT3AxVHo4M1QweE02bmM0WnhiaWRNSXlvbitEZ3Vaa0Z6NjBVUUxHL3YvOGYvLzc3N3lTR1lmYmU2MzVXVjZHZ1N0c3kzbi91b1duVEtHeEsyb3FQUjR4Q3JWckIySlMwRlp1U3RsWVoxSzVldVlMUEo4Umo4SkNoMkxwOUo5NThxeGRHalJ3T1EwWUdBT0RtelJ1WU12bExmUFpaUExaczI0RlhYMzBkNDhlUGswUnBFaElYWUZQU1ZnREFuTG56c0NscEt4SVhMT1JEQkpKRTd6NTk0ZUhoQ1lDbjBqbDg2QkJhdHVSSkFIeDhmSkNRdUFCS3BVbzYwVThuSjZOeDR5WTF0dWIzc3Mzb0ZpMWh0bGdrUUg3UVpqbHJnUGJENS9rYkwydmQvL2Z0Yy9OZnVQbFZDdXdaYjRzZEhxVUUvekFEaEFVRXlrQ056K3h3VnF1Rms4bDVDdis4dkh6STVES29WQ3JVQ2F1RHFHYlB3OHZiRzFxdEZyNitmcnluRmhhRyt2WHFRNnZWT2wzWHRMUTB5VmxoV1JhZW5wNTI3MW02WkJIV3JGNEZBRWhKK1FjZkR4OEtBTGh5K1JLYVJrVkJvVlRDemQwZEw3endQNXc0enVzOG5UbHpHbTNhdkNpY1R3VGtjaHFYTHBVZGgxa3pwejljWUFNQWQzZDNDZHhDUWtMc3dPME9GT08yWVNrcmhLYmluVW9FdHhJQXhjODg4OHlwbjMvK2VVcHBhZWx5VnhyNnpyWmxTeExhdnRRT3JWdkhRS0ZRb0hPWHJtalFzQ0YyN3R6QmgwTGVQbGkyZktVa2xmYnFhNi9EWWpiajFxMy9xcnlOYzJmUG9tUDdkdWpYdHpjYU5HeUlGOXUrNVBSOUM3K2ZENVZhamE3ZFhubGd2NzhxMnlRSUFsNmVYakRXY0JLOHdodmd5ak5RZFk1QWlTZTFPdUhYNVN1Ny9UYm1sZ09vT1FKYkNRR1VBb1NaZjhCS0NLcFNKTUNSSURpYXBqbVNKRkZTWE13VkZCVEEzY01kT3EyT24vMTBjNE83dXp0VUtoWGMzTno0bkpvQWFyb0tSRmhvbWdiRE1QRDI5a1pNVEF4WWxwWDREa1Y3NTkwKzJMdDNEeExtZllmSlgwN0MwR0c4ZmtQZDhBaWNQSEVjUnFNUkJRVUZPSGZ1ckhUVHo4L1BoMUtweE5tektmaHN6R2pRQ2hyNStma0FnS1RmTnlFOFBPTGhoYUsyNXVIaGdVYU5HbFY2RW9uL0Z4NGNRUkNFeFdMaGJPc01MTXR5dHYxdFlsZ0tnT3ZkdTNjYWdJVHM3T3diWGw1ZWd3RGNjNGIrd29YemlCc1lpMlhMVnlJaU1oSkxseXpHNXFSTmtwZFNrWDAzNXhzY1BuUUlPVGs1bURqcFM3UjVzZTBqQ1d4NnZSNFJFWkYyejlXdUhRYTlubWN4MFdxMStIUFhUa3laOGlXTWhVYTdNS0txMXVqWlo3SHp6NzFJVDAvSEY1K1B4N0tsU3pCZzRJZDI3MW01NGtmOC9mZFJKQ1FzY01xWlZ4TlcxVzF5SEllYzNCeG9IMUlQSVZka1NiODhmL2VxaHNlR25NSXhpZnhSQkRaVEJhR25CZUJFcFhhR0FNRUp3QVlLQkNlWHk2RlVxcmk4dkZ4UWxBd0IvZ0ZDOVZNSE56YzNlSGw1UWEvWHdOUExTd2cvRzl5eEYwME1SdzhkT29TbVR1aUp0Rm90QmczNkNDTkhETU03Ny9aRy9mcjh2R3lUSmszUnNWTVhEQnM2R081dTdsQ3IxRkNwVmRMbk5tOU9Ra2xKQ2FaTm40VjUzMzBMQU1qSTBHTnowdTlJblAvOW93RnNBT0RwNldrSGJqWWdWZzdZeEdPTHNpWmV3bWF1VkFRNmFhNE5BQ3VTNG5sN2UyODZmLzc4alhyMTZ2V2pLT3JsZTkxZnVWeU92LzdhajRqSVNCdytWRFhPOWhFalA4R0lrWjlnbk1CZytxaWF2NzgvOUE1VVRMZHZweUlxaW05Rk9mRFhmcXhlOVJQbWZEY1B3UUlQM1lzeEx6aTlJVG1DbmFtMEZOdTNiME9YTGwyaFVDb1JHQmlJOXUwN2xFc0FiMWovQzNidDNJRzVDZk5ydEpIelhyZDUvUGd4MEhJNTZ0V3YvOENQajVXeDd2dGJmMzV6dHgvalUxR0pPcnQ5Z1lDUWV0UUFnaVVKZ2lWQWNDVEhnZ0xKeVVCQ0pwTnorZmw1Y0hOM0IyTzF3bURJd0xQUE5TNmJLUER6aFZ2cUxmajYrcUYrL2YvZjNwbkhSMVhlKy8vem5HWDJ5YjRNeVlTRWtJUmN0dUNsd3JWaVhTNHVWRnNwdUsrWHFxMC8vZlc2SWxhOXJiVjFCWmNxeXExNlJhdTFldVVWYmRVZjlkNjZ3cjBnb2xHSkNZUWtKQ1FrSVNHUVpTYVptYk04dnovT2VVNmVPWmxKUUFGSnpQTjZIZVprTXBNWnpweDVuODkzTDBmcUtNZUlOWnY5N0xQUEFCanppTzJkcUJzYUd2REEvZmZpbnQvZWk3WFBQWXZKaFVVNDIxVEtsMTUyT1M2OXpFaHN1T2JxbjJMcTFCTEx5bk83M2JqbnQvZENFQVJFbzFHa3BxYmlyVGZmUkgrb0g5ZisvSnB2M3hTMXcyM216SmtvS1NsQlFVRkIzRmkvMU5SVXkrZm1kcnVaYVVyWjNGS2JXY3I4Ym9yTk5CMWdwdW1xVmF2dUhoZ1llUExydnRkL21ENERIMys4Q1hWMU94RGcwak0rM3J3Sks1YmZZdjM4NkNPcnZyWG8yWWhmRHJPN01RQlFYYmZhU2dIQTJlZjhDQjkrK0Q2MmJQa1lxcXJpdmZmZXhWZlYyM0RHbVdjQ01BYU1FQUlJb29qZTNoN0xSMEwxK0tEUHBMdzhiTjYwQ1lxaW9NdU05anFjVHJ6NHh4Znd5aXN2UTFFVTlQUWN3SVlOSDJIMjdObERwdkNiZjhVYnIxZmlzY2RYSDdVK2RRZjdtdEZvRkI5djNvUUg3cjhYUDcvMnVxTWVPT2pUQnArOS9mSGZyVDM3YjNlTVpub09BSWlZMDZSaUFCUkN6SUhHRkxvZ2lWUWtBcFVnVUJrQ0hFU2toQUIrZndyeTg0T1lWdjRQY0xuY2NMdmN5TWpJUkU1T0R2THo4cEdlbG82OHZMeFJvUVlZRVZRbVJCd09COUxTMG9ZMWFmMTA2eWU0L1pkMzRwUlRUOE1qanoyQm1xK3E0NEtIaXFMZ3BSZi9DRUtBV2JObVd6NWsxUXhrOVBRY1FFTkRBOHBLeTNEVjFkZmdsVmZYWWUwTEx4NDdpbzAzUzJmT25EbE1zWTJ3VVdJc0VFS3NOdU9ta3FOY2dxL09lclFEMEcrLy9YYjk5dHR2LzQrV2xwYTYvUHo4ZnlHRUhIY283OU1oeS9CNlBIanhqeTlnd1VrbjRhdnFiV1BHaDJaUDBIM3dnZnZ3NEFQMzRmUXp6c1MvL2VwdWxKYVc0ZGUvK1MzV1BMVWFIZTN0bUZ4WWlJZFdQV0pOTTFyMHc3TlJYYjBOVnkyN0FxSW80ZHpGUDBGcGFSbjIyOHFGYnI3NVZxeGErWkJ4Slo0OEdjOCs5d0ljRGdjZWZHZ1ZWai94ZTd6NnlwOGh5ekpPUHVWVVhQa3ZQd1ZnNUNtdWZPZ0JTSktFaXk4OEw5NU1mT2xsQkFLSFA1ZndZRi96RjlkZkIwS0F3c0lpM0hMcmJVYzFqMDBIL2J3aHNyZnlsSmI3NnRBNGxPSmtVMnJXTGNGUUh6VUFSaVVCaUE1UUtnQlVwSVJLZ2dCUkEyUWlVaWNrT05QU2gyby9mVDRVRkJRTTVhbVpnWUlkTzdZUGkzNG1XMDFOVFVoTFM4UENoUXNCQUo5Ly92bXdtUjhYWERnMDdDZ3pNeFBMYnh1YWY3Qng0d1k4L3RnanFLZzREZzg4dU1xQzVLSWZubzI2dWpvc3U5SlFjNys0NGNaaENsczZGcjk0cWFtcG1EVnJsdFVPaFJCaTNmTDczSDBXM0FCUXJxcEI1M3h3aVV4VHJhQ2c0TVBYWG51dDdweHp6cm5BNVhJdE85ajNxS2dxVHZ2bmhmajlZNC9naGh0dnhoL1dQSFhNSGNjenoxcUVNODlhTk96KzB0SXlmTFJ4NURtbUo1NjRJT2tYMStsMDRxNS8rM1hjZmRmOGJIamZ6M256L3lsaE04U1MwbEk4OXZqcWhIOWJGRVY4dU9GL2orcHhPcGpYSE8xNGZkUGw5eWZQa3h3SWgvLzAycjRQMzcvclFHVWZaM3JHRWdITjlLY3BBRFdnUmcyZ0VRcWRnRklDUWtVUUtpb2FKQUF5a1F5b1FZYmI0ekdTYi8xRFByWHM3QndqcGNQTVUvdmU5dzYrV3RHcTJQbWFhOEdDazdCZ3dVbkQ3cGNrQ2JmY3VuekU1eDZUWUdNZk5BODMrNVlBY0JiY0ZFV2hab1VDSDFTZ1hLVUNVMjhhQU8zODg4OXZCZkJrYTJ2cmwzbDVlVmNTUWtadHdxNXJHcjUvNGdJME5UWEZSWG9FVVlSK0JKdDNUcXp4dVVSUlJEZ2Npc3VYMUhYOWkxMjdkbFdlOG9NVGQ0QkxaeG9CYWpFeXBOSllkdzZkQUdhUWdFQUVvUklFeUJBc3FMa2d3K1gwd09QendlZnpXVDYxbkJ5alRLcW9NSEdlV3FMbDhYZ3hNQkErcU1jZHlTVWR5eCsyMSt2RjdObXpJWXFpdFkwQ09tb3FPQll4dFFjVm1HMnEyMDFUQUZvd0dQeGc3ZHExWDExd3dRWG5lVHllbjQzMi9qSXlNdkIvZi9HdjZPZnkzUEx6ZzlqZDNJUllMQWFxNjZpdHJVRmhZZEVSTzBadXQyZUNDb2Q0Ykw3Tlk1YnN0WE55Y3REUnNkY0NXeWpVLy93ZlgzaitvL3Z2dXpka1UybDg1SlBmZUtpWlppZDBFMmpVaUh3S1ZBS0JURVRxZ0FnSFpMaUlETGZEQTA5SkRueG1TZ2VER3QvOTFwNm1rV3hOS1M3QnJzYjZFZUhtOFhneHBiamt1d3Myd0NpL3NzUE5EcmtFSmlwVGIvWXFCY3I1M3BocHFwdW1xUVpBWGJac21iWnMyYkpuNnVycVBpMHVMcjVFRk1WRHlzbkl5OHZEcWFmOU15Ni85Q0trcEtSYVpVeEFmTHJIVjlYYjhNVGp2OGY5RHp5RXFTVmYvME5PZEtXZldFRFlITktiYUFuZjBqRUxoL29oSmtraG1UUnBFdHJiMjlIUjFycGhkMHZyMjB1WExHNUtvdEo0bnhvTGpNV0dWSm94UmNxNGNCczFuNElnVWtrU0lVbG1odzZIREFkckVtbk9LR0Q5MUN6ek16L2Z5Rk9iVm41SXFUWXBxYW1vT0c3dXQvNzVIOUdaQjRkelVVcXQrUWt0TFMzbzZPaEFWMWNYZW5wNjBOdmJpM0E0akhBNGpFZ2t3by8vSTl6Z1pxTHJPcHVsUUFDd2VRcWlDWGlaVXVvQTRBRGdCT0FzS1NseGJkbXk1VWVOdTNaZG1SczRPb00vOTNic3dkeEQ2UERSMU5TTTd2MzdKenJvRGp1T2Jjakt5a1JoZ2s0VFRjM042TzQrK3Nkc2IwY2JNak16VVpTZzBTU2xkRTluWitkL3pwa3o1NU9Pamc3RkJyVm9Jb1VHSzlwSlZCaU5JVFRURXFGc015dDBJRWtTSk1tYVV3QW5CemFQeHdPLzM0KzB0RFJrWkdRZ056Y1grZm41bURKbHloR3RKZjVPS3phTHdJUmc1c3laN0FNYXB0enN0K1kyTEdKS0NLRW0zTUFyTjJhYXdwaEdyd0ZRNit2cjFZeU1qTW9ubjN6eWt3VS9PR1Z4UmtibWxVZjZpaTdMOGlFOXA3QndNcnE2T3JHM293MCtmOHJFeklOUVAwS2hmbWlxbWhCcUFGQlVXSWpPenFOM3pOaDcwalV0SWRUQzRmRExiN3p4eGtlWFhYYlpnVkZVV3BSVGFOWkVkbE9sYVNiTWRBNW1Sc2RiMmRiSzI4MzFValBiZVdkblp5TVFDR0R5NU1rb0tTbEJlWG41bUQ0UHhveGk0MWREUXdQcTYrdlIzTnlNOXZaMjdOdTNEL3YzNzBkZlh4OUNvUkRDNFRBR0J3Y3Q1V2JPWENEY0dFQmV2UW1tZWhOTTBFc0FKRTY5V1FydS9RODJWRXdwTGw0cWl1S1pSK0wvMWJtM0haTUN1WWZjdG9oU2lsMU56ZGkvdnh1YXFpTVMrVzQybjNTN1BSQkVFVm1aV1Nnc0xCaFZiVFEzNzBiWHZuM1FWTzJJSFRPMzJ3TlJraElxTlVWUi9ydXFxdXEvNXMrZjM4SUJMUm5VRXBtZDZwRFphUUhObUUxZ0FzMG9aSTlYYUY2djE0SmFSa1lHc3JLeU1HblNKQlFXRnFLa3BBUlRwMDRkOCtmQ21BUWJBTFMwdEdEbnpwMFczRG83TzNIZ3dBSDA5dmFpdjc4ZkF3TUQvR2kvWVhEVE5JMll3NXZabUQ4R04yYWVzcEYvTWc4M0FNNVBQcTFha0pPVGUvN2g2dFE3RUE0aDFOOEhnQjcyUnBNVDY5aGJ1cTV2Yld4c2ZMdTB0TFRXVkZ4MmxSWkxvTktVQkNwTjV6WnFXakJKb2VZeDB6bjgxbnlDZENQeWFVS3R0TFFVQldZbHlWaGYwbGg5NHdVRkJUQ3JEbUFXeFZ1M2ljeFYwMFNsZ2lBUVFSQ2dLQW9saExDR2wvYkFnaFVwSllRdzA5UTZBWStmZTl6N0pTVWxteDUrK09FelVsSlN6aWVFZkczZDd2ZjdJVWtTOHZJbUlSQUlUSHpyeC9HaWxPNW9iMi8vNjhLRkM2dHFhMnNaek95K3RKak5oOFpEelJZY3NJWVhVMUVVcVNpSzF2ZEJsbVhLZXU0eHFIbTlYZ3RxUnBEQWJEdFVXSWl5c3JKREh2MDRBYllqdEhKemM4R2FVUEtBU3dRMXp2ZkdaaUVTUlZGQUNHRUp2WlFPRFRYVmJXa2hHZ0RWbkcrcW1QNDM1ZHh6ejMzcmpqdnUrUERXVzI4OVBTMHQ3WHhDU1BIRTEzZGlKUURhcnE2dXJyL2VmZmZkVzllc1dSUGxUTWxZQXRPVDNTcDJzNU9kaTh5WHhpYXkyMVdhTE1zVzBPeFFZd0VDbHM1UlZGU0Vzckt5WWUyRXhyd3AydFRVTk9iL0U1RklCSTJOalZhMGROKytmVmEwTkJRS1lXQmdBSU9EZzRoR281WlphaGJvRWxZenljeFNMbXBLYkthcFNDbVZtSW5LK2Q4Y0FKeTMzSEpMeWhWWFhMRXdKU1ZsNlRkcGFqbXh4aFhRR3ZmdjMvL21talZyUG4zMjJXY2pIS0NVSkVDTGNiQ3pSenVaVXJPaW5jejg1S3dVcTlzMFUydDhvQ0ExTlJWcGFXbm0zTThBQ2dvS1VGeGNESmZMTmU2Ty9aajFzU1U0aWJCanh3NDBOalppejU0OTJMdDNyd1U0RmxSZ2dPUDlic3ozeGdHT21GMTlDZk8vSVQ0MVJJUVJYRWdFT01meTVjdjlLMWFzT0RVakkrTmNRc2lNaWEvM2Q5S0hWdFBaMmZtM1gvM3FWMVhQUFBOTWRBU2cyVGZGTkR0VkRtWWFiM2JhVlpxcDFPS0FsaWp5eVlER1VqbUtpNHN4YmRxME1adk84WjBCRzF0TlRVMW9iR3hFYTJ1cnBkNE9IRGlBdnI2K3BFR0ZCSUdGdU1ncFUyOE1jaGpLZlVzS3VPTGlZc2ZHalJ0UHlzM05QVnNRaEJNbXZ1N2pmMm1hdHJtbHBlWGRrMDQ2cWJxMXRaWEJpUWVhY2hCQVk4K3pBZ01BS0IveFpDcU5EeEFrQ3hLa3hFMW5EeUFZREtLNHVCaEYzOUlnNHdrZjI5ZGNSVVZGZkZ1ak9CL2NLQUVHZGlWazZvMXFtbWJsdmNITWRUUFZXMXh3d2VaL2l3RndORFkyT3ZMeTh0NEY4RkZkWGQyY29xS2loYklzLzNqaTZ6LytWalFhZld2Nzl1My9NMmZPbkYwY3pIaVZGa3NBTlNVSjBQamdRRnlTTGEvU2VMUFQ0WEFNODZjeDA1TlA1eWdvS01EVXFWUEhWWkRnT3dNMndBZ3E4SDNiWEM0WCtKUEFEcmRJSkdJQkxoYUxXWkZUQmpjdXVFRDRrWCtzUXdpTWZDSVZnR0lxT0F0d0FCeGxaV1ZiQUh6KzdydnZ2anB2M3J3ZitIeStzd0VFSjVBd3BsMGZyZjM5L2UrOC8vNzdueTFldkhoZkVxQWxncG95a2tJekw1aDhsQjRzcHNXdGtKVHlBQUFUVGtsRVFWVG1CdWk2VG5WZGg2WnBWbDh5UlZHc0JIV202QndPQjhMaE1OeHVOL3I3KzlIYjI0dnQyN2RqKy9idGgrVVkrUDBwRUVYQlNobVpNRVdQb3QrdHJxNE96YzNOYUd0cnc5NjllN0YvLy80Ui9XNW1LVmJDNEFLWDFBdlROR1dsV1hGQkJwdUp5cHVxTWdESEpaZGM0bHE1Y3VYOG5KeWMweVJKT20wQ0UyTm5xYXI2Zmt0THkvL2NkTk5OdFgvNXkxK1Vnd1Nha2dCbzlxQUFnNWxPaUFDanhsT2dnaWhDRWtXSXJDUktraUU3WkRoa0I0eXA3S1pTYzd2aDhYcmg5L21Sa21xTXhzdkt5a0p1SUlCZzBBZ1NIQWwvV3BqTHdaeDdET1Znaml1d1hYVFJSWGoxMVZkeC9mWFhZL1hxb1g1ZnJhMnRhR3Bxd2cwMzNJRFBQdnNNNTU1N0xnb0tDcEw2M2JpRVhwaCt0NUdDQzJRVXdFbEpBQ2NEa0JjdFdsU3dkdTNhK1RrNU9RdS9TVDdjeERxaUY4Z2RQVDA5SDN6MDBVZGZMRjY4dUp1RFVpS2dLVW1BcGlZRG10a2prREpmR2hFRWlLWXZUUlFOb0VteVdSb2xPeUE3SEhDYVVITzdYSERINWFnWjZSeFoyZG1tK1RuNXFLaXB6cjN0eUpzVU9HWnlNY2VkS1NyTE10NTQ0dzA4OGNRVDFoVXFHQXhDRUFSVVYxY0RNRHAxQmdLQllUNDRleTVjTEJhREtJcFFGSVZsZFpORTVxbk5COGM2aFFpbWlTcHhKcXBrbnZBVzJOYXZYMThmQ0FTYUFieStiZHUyOHFsVHA1N2dkcnRQQXpCUjFmN3R3cXh0WUdEZ2c1cWFtcXA1OCtidFpqN1Znd0FhdjZtbVF0TVNtWndNYUlJZ1VFcXBtVjlwSk5xS2tnaEpaTFdlRW1UWllTZzFGaVJ3R3BGUHR4bjU5UHVOeUdkR1pnWnlzbk9SbDVlSHlZV0YxcXpOSTcyOFBqLzI3dDA3QWJZanRSWXNXSUFOR3paZ3k1WXRtRDkvdm5YL3hvMGJNV2ZPSEd6ZHV0VXE5alVuemNjQkxod09XMEdHU0NSaUFjNVViOVFlWE5CMW5ROHdKQW95YUFCRTg0b3RVVW9aMk94S1RwNDFhOWJuQUw0QzhQejI3ZHRuRlJZV0h1OXl1VTZaZ056Umc5bmc0T0JIOWZYMVgxUlVWT3ppMVZVU29La0hDYk9FUU9NREE3cXVVMW1XTVV5bHhabWVUcmo0ZEE2dkY3Rm9GRnMvK1FRWFgzSUpNak96a0dPbWN4UVZUWWtiUlB4TlYyMXREZDUrNjAxVVZNekI2V2NNTDVYMmVuMEk5ZmNlTTUvbHVBTmJSa1lHVGozMVZGUldWc2FCYmQyNmRiamdnZ3Z3NmFlZkloZ01vclMwRkI2UEJ6VTFOYWlzckVSUFR3L2NiamZLeTh1Um41K1B3Y0ZCU0pLRW5UdDNZdCsrZmRhZ0UwbVNhR1ptSmtSUkpLRlFDSkZJaElxaUNOYXhGd0FSUmRFQ25LN3JnbWwyaUdia1ZEUlBmR2FtU2dsQUo1V1hsMjhGOERtQXRWOSsrZVcwNHVMaU9SNlA1NFNKM0xqRHUzUmRyd21Id3gvdjJMR2o1dmpqaitlVm1jNkJhU1NncVJ6UTdPWW1pNXpUWkVCajZSdXFxc0xoY0VCa0hUa2swNEpnS3MzaGhOTTEzUFQwcDZSZ3puSEhJUmljYktSekZBU1JrM040bzU1UFBia2FqWTBOR0FpSGg0MWw1TmZSSEN6K25RTWJBQ3hkdWhRUFAvd3dIbnp3UVFEQTRPQWcxcTlmajVVclYyTEZpaFZJVDAvSDdObXpVVmRYaCtlZmZ4NlhYSElKQ2dvS1VGdGJpemZmZkJPeUxDTVlER0wzN3QzbzZ1cENhV2twWkZsR1QwOFA5dXpaZzRHQkFhU21wdEpZTElaSUpFSjBYWWZYNjZXYXBpRVNpVURYZFNwSkV1R2lxTVM4V2dzMk01V3ZhT0EzSG5UUzdObXp2ekNWM0t2cjE2K2ZOSGZ1M09scGFXbHpaRmsrQVVEcUJKNE9hZlVxaXZKeGQzZjNsNXMyYldwWXNtUkpONFlpa2NuVVdTS284UjAyVk50emRVNmhVYjQvR2t1d0ZTd2ZtaEhCRkFTQk9wMHVQajhOc3NNQmdSRHMzcjBibXFwQ2xDVE1ualViK2NFZ0tBWCszOXR2UVJBRXBLZG40SkhISHJlc2tGK3VXSTYydGowQWdKNmVIbmk4WHZ6NWxkY0FHSjF4bnZqOW8ranQ2MFZHZWdadXUvMlgxcEFlQUhqdFAxOUZaZVU2Ni9FQWNQVTFQNFBENGNDcWxRK09tUTk1WElKdDhlTEZ1TzY2NjFCZFhZMlpNMmRpL2ZyMW1ENTlPZ29MQzYzSGVEd2V2UHp5eTdqNDRvdHg3YlhYb3EydERjRmdFS0ZRQ0pzMmJVSkZSUVZ5YzNQaDkvdVJsWldGU0NRQ244K0hmZnYyUWRNMHVOMXVSQ0lSQUtEcDZla1FCTUV5VVZWVmhTaUtiTllDaTZJUzB6UVZ6UHNZNEVUeml5S1pxazYwUVk0SG5iUm8wYUpkQUZvQS9MMmlva0orN3JubmlvdUxpNmY1Zkw3WmtpUjlEOEJFSzEyYmtGQlY5ZE8rdnI3cXVycTZ4cXV1dXFxMXBxWkd0eWt6eldZNkpnTWFEelArT2JyTjNMUVVtcmtoR2RCWXp6UkNDRnd1MXpDVnRxZHREM0t5Y3pCOXhneW9xb3J0dGJXWS8wOG5JRDA5SGQvLy9vbUl4YUo0OVpVL1l4bzMzL1QrQjFjYUJPL3R3Yyt2dVFvMzNYd3JBR1BPNTMyL3V3ZS91KzhCVEpvMENlLzhiVDNXUFBVazd2N05iNjNuVnN5Wk02enpzTVBoR0hNZityak5ZMXV3WUFGZWYvMTF6Snc1RSt2V3JjTjU1NTAzN0hIVjFkWG82dXBDWldVbHVNbFcwSFVkMmRuWmNMbGNhR3hzeE02ZE82MDBFVVZSa0pLU0FxL1hpNEVCbzRlWDMrK0hwbWxVVlZVTURnNFNWVlVoeTdLVmEyUkdVVmsrRWpYSGFRMVRjS2FaYWxVMmNKQkxCRHZwaXkrK2tPYk9uVnNOWUR1QXR3b0xDOFdYWDM1NWNtbHBhWEZxYXVvMFdaWm5Fa0pLdmtzVW81VFd4Mkt4cnc0Y09GQy9mZnYyNXNzdnYzeHZhMnVyYmxObGlkUlpNcFZtL1k0bFk5ditCdTgzaXpNM2VhQnhDZUJ4UUdNS2pSQUN0OGM5bE1aaG1wN0JZQUYyMXUxQVcxc2JTa3BLY01sbGx5RWozWWg2QmdJQlJLTlJ1TjN1UkNZMmZuUDNyM0gyT1QvR3ZIbUdTMmJYcmthMHRyYmdEbk5ndDA1MWVHMURWY3JLcHFHc2JOcVlQdytrOFhxQ0wxMjZGR3ZYcnNWdHQ5Mkd0OTkrRy9mZWUrK3d4NmlxaWx0dXVRVS8vYWt4MDdLOXZkMXFPUzZLSXQ1NDR3Mjg4ODQ3S0M0dXh1VEprekZqeGd4VVZWVkJraVQ0ZkQ1cmlJdlg2N1ZTUTJSWnB0Rm9GRTZuazVqUlUycUxvREt3V1ZQc0thVzZlUitEbkFBalJZQXZ3QmR0Z0J1MjM5emNMSjU0NG9rN0FOUURlQmVBdUdyVkt0L3BwNStlbDUrZlA5bm44MDJSWmJsRUVJUnBNSHJMamVVVjFYVjlSeXdXYStqdjcyL2V2WHYzbm5mZWVXZnZuWGZlT1FndUoyd0VtQ1dEV3R3K3A4eml6RXliT3FNMm9GRytrd3pmWWNZT05MWUJnTmZqalE4UWVEekl5OHZIak9uVGNhQ25CenZyZHFDOXJRMDMzblFMSnVYbElTOHZEenQzMWlVOE9QL3g3Tk53dVZ5NDdQSXJyUHNVUlVFZ0VNRGFGMTRjOXhlNGNRdTJKVXVXNE1ZYmI4VFRUeitOc3JJeVRKa3laZGhqcGsrZmptM2J0cUhFSEtaU1VsS0NaNTU1QmhzM2JzUlZWMTJGVFpzMlllSENoVml3WUlHVjg3WjU4MmE0M1c3NC9YNXJxclhYNjdVaXB3NkhnNWtWbEc5b3FXa2FCRUdncXFxQ1VncFJGQ21sbEpoQkI4S3BPRlo0VHpqSUNTYmtoQVNRRzNILzFsdHZIUVRRRGFDR00zMkZ5c3JLclBMeTh1eXNyS3hjbjgrWEo4dnlKRkVVZzRTUUFnREhTcnVIQ0tXMFJkTzBQYkZZckQwVUNyVjNkbloyMWRUVWRGOTQ0WVVITUpTZHI0OENzMlFLTGVFK0J6UGREak1NRFFDaXlkUlpJcURaaXRhdGpVWGpBY0RuOThlVlJ2bDhQbXpkK2dtbVRTdkhxYWVlQnJmYmpYdC9kdyttbFpmRDUwdnVjZGk0Y1FNKy9PQUQvUHZUejhZbDVaYVVsS0N2cnc4ZmZmZ0JmbkR5S1dob2FFRE5WOVg0MFkvUHRSNnpjMmNkcXF1MzRTYy9XVG9CdG1OeEJZTkJ6SnMzRDNmZGRSZnV2UFBPaEk5WnNXSUZ6anJyTE54OTk5MjQ5TkpMVVZOVGcrWExsK1BtbTIvR2pCa3prSldWaFk2T0R2ajlmaWlLZ3ZmZWV3K1JTQVN5TENNOVBSMzc5eHVUejMwK24xV3h3RTVTdDlzTlZWV3hmLzkrcWlnS2ZENGZKRWtpZzRPRDBEU05NajhHU3hjUkJJRVYyNE1CYmdUSVdZQ3lkUjBaYWVPVGg0VWxTNVlNQU5qRC9WMzJHdVRSUngvMXpabzFLeVVRQ0tTa3BxYW1lRHllRklmRGtTSkpVb29vaWltQ0lQZ0lJVDVDaUpjUTRqWkJ5Qm9Bc05jQ0J3WnJiQnlsZEpCU0dxYVVoblJkRDJtYTFxK3FhbDgwR3UwYkdCam83K25wNld0dmIrLy84c3N2UTh1WEx4L2c0RVZ0SUtNandFeTNLU3h0dEkxMTBVZ0FzamlZOFNBRFM2ZzFwNlR4NWlhRG1hMnRVQnpRV044MHA5TUpTaWxTVTFOdHJidFRjZFpaUDhTNzcvNDNHaHZxNFhRNmNlZGR2NExQNTBOcmF5dHV2dkZmb1NneDlQYjI0b0x6bHVBZjU4N0Y3Yis4RTZzZmZ3eVJTQVRYLzUraENaS3JuL29EL0g0LzduOXdKUjU3NUdIODRkL1h3T1B4NEdiYjRPR3F6ejVEWmVXNk1RKzJjVmQ1b0tvcTFxMWJCd0JZdVhJbGJydnROalEwTktDNDJPZ0JLVWtTWG5ycEpWeDAwVVVBZ0QvOTZVKzQ3Nzc3VUY5ZmowQWdnS3V2dmhwMzNYVVhDQ0hZc21VTHJyNzZhdFRXMXNMajhhQzgzSml2V0ZWVmhXWExscUcydGhaLy8vdmZzWGp4WXF0cVlkZXVYV2h1YmtaRlJRVVVSY0hPblR1aHFpcUN3U0NibG9YdTdtNm0xQ0FJQWp1eENlZUxzeURIOWhOQUxnNTJuSm9URW9Fc3dUNS9tMmpqWDJla0RRbHU3ZnR4YnJBRSsvenRTSnNkWlBZdG1Vb2J0czhHOXlTQzJHZ3dZL3UyeHFVSEJUUmVwZkhOSUh0NmVqQnBVajY4UGkvOGZuTytwMW5BbnBzYlFINSsvaUdOd2ZzMlZzUE83VGo1NUpNbndEWldWbTl2TC9iczJXUDUzK3oxcG14NGpMMlpKVmR6Q200TW9GVzh6TXhVUHNqQXlyVzRzaTMrY3lJMjBNVkJqbElRZ0E2RDNTSCtuQWhzUE9DRUJGQWJDWEFqd2MwT05DU0EyRWdLVFUraTF1eU8vVkVoWm5zOTNtL0dZR2JkY3FhbmZYQTN0WGR0WmpCenVkeElTZkVQYXdMSkZGcDNkemNLSmhkWnpTQXpNak90NG5LL1AyVk1mRStPSmJDTkcxUDBoQk5Pd09iTm04ZGNFSSsveUtTbXBqTHpsSEpkSEFqWDNZRVFRdUpVSEl4eGdjVHcwMEVBQ0VrRUpVb2gyS0JIUmdIYVNIQTdGT1YyS0dBN0ZMTXpHZUNvRFdnakFVeTNBd3dnbEJCUWdJQVFDMlFHekFRQkFqRWhKZ29RK1JJb3RobWxVRU5xVFpZaENBUUNJVkExRGRtcHFjTWFRZnI5ZmhCQ0VBd0dvV2thZkQ0L1VsTlM0ZlY0MGRmYmg3N2V2bVArUk00UEhsdk5hc1lOMkRadDJuVFVYb3NmMk56ZDNSM1h5REljRG8vVXFkZFNib3FpV01yTlZHOThEU3JoRkJ6bGxCeTdwVFpUbGNGRTU5VWRyN0lJQVVrRVBRNlNvNEZNR0FWb3lhQkdFa0I4TkxWR2t5aTNaS0JqY05KSGVnNXo5ck9ac3B6elA1RXFzOEdNUUJEWTdGcUJDc0x3bVJxU0pCbGdrMlRJSnRRY1pxS3QwK0dBcnV1UUpCbVptWmxXNVFCckJDbUtJb3FMcHlMYm5FVXdzU2JBZHRSWFFVRUJjbk56MGRiV1puWHBUV1Nlc280aEl3R08zeGpZUm9NY0J6aG9ta1lKa3hoRFFJdURqVTNoeFVHUFN6MFpCakRUdEIwSlpFZlN4MmI3bVNtcHBNQ2ppWjdQZGM3QXNIMkQ5Z2JRQ0FFQkFSRUlGUWhCbkRvekZCb1ZCUUdDS0VLMFEwMlNJRW5NcDJaQVRYWTQ0SkJsT0V5ejA2Z3FFQ0dLQWdLQmdOV3VteldDbEdVWjAyZk1PT1NCMlJOckFteUhkVGtjRGhRVkZWbUE2K3pzdE5xUTkvVDBvTCsvZjBUL1d6TEFjZjQzcTRNSUR6a3VpZGlDbkdtZUluNjRQYS9jQ0V4QVlRaDJJT3c3bmd4WU5wVTNxaitOc24wNmltSWoxczNCUUc0VTRQRS9HK1lqLzNkc1RuOEFvTHBPSVFnQ0RKNFJhdlkvQTdHVW1jQUZCa1RUN0RSdmVZVW1Nb1hHQWMxVWFQSEJBVGM4SHNPWHBpb0tKaytlYkxYclp0T2lvdEhvaUZBalZWMGdUMVlCOVQySC8yUXVTUU85L2pqUTQ3SW53RFllRjZVVUhSMGQ2T3pzaEtwcGgxVFVHNGxFME4vZmI1bWpiRXZXeUpKdGxBSTZwWkFrQ1U2bmN5VEFRZE0wdnByQmdwd2dpS0JVcDdwT1RjRHBvQlNnb0t6OUtnQkNUUENaMzNlWUlCd09LaTZnUkVhNWpkdTNlSFZ3L1F6cElTcTUrRGVmNEhkY3poWmwrYytpS0ZyUFllYWxwbWtRUldrWXpBaWZnMmI0enl5b2plWkhrMDJ6MCtGd3d1RjB4QUhONHhtYXZENFE3a2RwYVNseWNuSVFDQVRnOVhvUDdnUmJYUVUwOUJ5WkU3KytCK1RKS3RCbno1Z0EyM2lFV2xWVkZVQUVlSDErZUwwKzVINk4xbEtEZzRQbzdPeEVkL2MrOUppVDZmdjYreEFPaFJBT0QyQndjQUNSd1FnaTBRaGlwbm9iR0J4RUpESUlWVkdNcTNwaTh6UnVZNHBOVlZWSWtnUmRwMFNuT3FpdXd3Q2NNUnFWUldWTkFCRFo0WUJ1bXJxTVJ5eTZOOFFuQWs3TklZbDV5WU1TQjJHQ2pnSTJBa0tTQWk0T1dQR1A0MzRtaEplYW9KUmFkWmpzLzBnSU1TcEVIQTdtTzZNTWFoYk1ERC9hY0xOelJLQ3h0a0l1dU53dXVOMGVlTDBlZUgwK3BKanBHMm5wNlFqMzk2S2lvZ0llaitlUXppdHlwS0RHd1czQ0ZCMkhxNk9qQXlBQ2NuSy9XYmRSdDl1TndzSkNCQUs1Nk9yc1F2ZCtNN2pRMjJ1WnB3TURZUXdNR0RDTFJxTndlenlJeFdMbzcrdUZKRWx3dTkwam1xaE10V21hQmtWUklFbnlVSkJoQ0c1RVZZMi80WFE2emNlWS9qaFJoSzRiMWxzMEdqV1VpaWhpeUpaRkhOZ1NwQVF4Zm1Bb2RrRVRYaXlTdGFObWJhRGkxWlQxUEdyL3ZablF6SVBOQWxnQ3B6OElJZEEwRFE2SHd3SWFNeThCd09sd3hxZHFpSUwxR1ZGSzRUTHJORjF1RjBSUndoZWZWMWwvMStQeG9LUzBGSG1abVhIcEczYUY1dmY3a1pLYWl2VDBkR1JtWkNJN0p4dXR1NXNPR1dvVGF3SnNYM3QxZG5iQjYvTWZ0ci9uZExvUUxDaEFZTklrTS9ldDIxSncvZjM5Q0lWREdEQVYzT0JnQk5Gb0JBNVp4dURnQUh3KzM0ZytPSDZMeFdLUVpVZGNBYjhKT0txR0ZCQkM0UGY3VFJWSENhVTZkTXBNVm1vTXJ5RUNaRW5pL1hTY3YyN0lGY1lCei9xSERPME5neDhiTkdLREcxVlYxWUlWcFlDbXFTQ0VRaENNYWd4RlVVQUVBWkpvdkNkVlZhRHJsQnJGNGtNcXpYTDYyemFCR0NhbXBxblU1WElOeXpkajRPS2hGZ3FGRUFxRlVGdzhGUzYzRzNzN090RFd0Z2V6WnMwR1UzM2ZPMzRlMHRMUzBOZlhoK3B0WDhMcGNHTEd6Rmx3bXdyTjQvWEE1L1daTGJvTmhaYVJrWW5zN096RG1seWIrZnhpS05XZDZGdjF2d0NBakNkK2lJRzM2aEI1cHo3cGMvelhIUS9uS1VYWWQ0SFJqc2g3K1d4SVU5TFJlOCtIQi8yNm96V2JQSmJXL3djYUx0Ynd1T0xUcXdBQUFBQkpSVTVFcmtKZ2dnPT0iXSxbInNyYyIsImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBVFlBQUFFMkNBWUFBQURydkw2cEFBQktvbnBVV0hSU1lYY2djSEp2Wm1sc1pTQjBlWEJsSUdWNGFXWUFBSGphcloxdGx1VzRyV1gvYXhSdkNCSy9PUnp4UTJ2MURIcjR2VGNqczF4VnRsLzdyVzZYcXlJejRzYTlFZ2tjbkFNQzBMWC85Ly82cnYvNnIvOTZTbXZoU3JtMjBrdTUrVi9xcVllWFA3VDc1My85L1BlNTAvbnYrVjhzdi83MC9QWDcxeDgvQ0h5TnZ2TG5CL1g5K2ZxOGZELy80eGQrZjhZei92cjlxLzM2U1dpLzN1alhEM2pqbnl2d2svM3ordk5GOHYzdzgvMG4vWHFqdm4vK1VIcXJmNzdVOGV1TjVxOFhua3Y1OVcvNjQ3Sit2dmozNnkvZnFLelN5bnhRREdISEo5N252K25uQ3VMUHZ5Ly8xdlBmd091ZUdQbnpFOXQxdnZ5K0pSYmtMN2YzKyt0OS8zbUIvckxJdi85MC9YMzEvL2pUM3hZL3ZMKytILysybHVYWEd0M2xYLy9neVgvN2Z2empZOEpmek9HUEt3cC8vY0VZNlo5djU5ZS8zN2ZhOSsyZnUzdFRZVVhMTDRzNmkvMzhmaHRlT0ZqeWVINnQ4RS9sMzh5ZjYvbW44MCs3MzN1eTVldWU5K0NmK2ZRbnNDdmY5YVJuUGUvelBmdDhuYy9rRWxQWW9mSTFoQm5pK1Y2TE5mUXdvL3VVL09mNVFvMDlydGpZeXhuMnhmYWxHUDY0bHVkOGJqK2ZONS9HSjYrSGw0YUhOM3Y0bFgvN3ovWGYvZkIvOHMvMWZkTWxldTcyeDFweFhVRzc1akxjT2YvTHE5aUQ1L3UxYi9rczhPOS9mbTMvL1NmN3dWVFp3WHlXdVhHRDd6MSszbUxrNXgrMkZjOCtSMTZYK2ZxenljOVYxNjgzWUluNDdNekZQSkVkdU1zVDgxT2V1NFpRbjRkMWJHelF5NVdIbU1KZ0I1NmN3K0lpUTRxeGhLdUdGdnhzZnFjKzU3VWhoeEw4TnRqRVJ1Ulk4SzNHRHIxc1Zrb1orNm1wWVVOdmpqbmxuRXV1dVYyNTU3ZkVra291cGRRaXlMMDExbFJ6TGJYV1ZudDlXMnlwNVZaYWJhMzE5dmJRSXhpWWUrbTF0OTc3KzRicjVZTmUzdXZsOVMvZkdXSEVrVVllWmRUUlJoL3Z4SHhtbW5tV1dXZWJmYjRyckxpQWlWVldYVzMxOWU3bjJpREZUanZ2c3V0dXUrLzN3OWErK0tVdmYrV3JYL3Y2OS82eGE3OTI5Wi8rK1IvczJ2TnIxOExaS1Y5WC85ZzF2bnZWK3ZzdEh1RWt1MmZzV0VnUE8xN2RBUXc2dUdkM2UxSUs3cHg3ZHZlQVUrVEFSV2IzNWxxUE84WVdwdjJFL0QxLzdOMC9kdTQvMnJjcnQvOW8zOEwvYmVjdXQrNy94ODVkYk4wLzc5dS8yTFZsbkp0bngzNjgwRFc5STk3SGE5N0FGWDFqZmZ5MXhDKy84YXZqMjdOdVlkSWYvK2MvdlY3dlo3LzE0VjdMdStwVGMwaWx2V3h1SEozTEdIUGlWMmxFTDJXL2laZU1IZExYV255NWc5bldNKzg5cmpCbkhMdTJKKzg2ZHN4ZmU0RzZiK3kxVjU0SmU5cVR6MXExMzJ2dDhYQWZNKzkzalRWQ0duenVFL29NcVY1UDQ2MG02NFgxM1h2WG1RWTJzTCtZNy81OE5lMzY4TE9ZNTczbUhwM3RIUFVlVDhwanMyT0EvOHN1WWxUWFRLTFZzK2FxTDhRa3gwMTRmZGZMT25RdU1lVEJubGJXSjR6U0FmWTN6L3FOVk4vd0xTeHJmaVhPWEVlNklEVjEzaXhHYlFtRDdrU1ozc3Yzc01GZjNTekdIUHh4eGEvTkw5eGNudjR6b0NGMThxNnh6b0J6enE5ZGJlV1MwbUtkWnI1SHVWc1A3UHNjUUg3ZnE0VTFTMXhoclB0TCtWc1kwRno0UVk5NXJ4cHEzeVd3RVNtWHE3U0hQZmxxNXVhTU4rdTcyWXpPNjl6WWY3UDV6OHlyY1RIQVFTejl1MGNxMXpEZ3hidVV0UWF3d3EyRnVQRWpEQk96aldzVXRqbHlLWFBFL1BJSkJjZC9CNSs4NDZoY3lvTWg4R3ZYR01lcS9qdUwreGMvbTZXTVdQYVk4Y09wOTJ6ZkZkWXFIZmVPaWJET1BXTWJLVXhYcHNjMlYvYlcxajYzK1h3dllQL0hXMk10SWJBaFJQcjJmQmVoL1FGOUZtQ0NLZlc1dWNmK3hsQXg0bWVYd1hLWDhSVSt2UlI4OHlQQ1l5ZnRUZmViV250NVQ4eDlyblcxOHVVSmlIM0huTXFMRFg3LzdncStmdlBpcjZWdngvcHhRVEdOc0h0Ym9PUDFzb1A4dFh3UkFNSzd1VXBRRE44SEZVYm5mbk1BU2NTczJPVis3N05lYkNBYUJSZi81bzlYNzY5ZVVoNHV2dGZ2aWQvWi9mMDFYZUZsaTJyQldwNVpndWF5ODRRbUxqeGs4LzZzSWV5R1QzMjBsVEJodFlTVHhJY2tQUXgzL1BhajV3NXNhb1JudlBWaks3aitZNWNkTUs2d0JSY3UxZGJmTC9MaGtYZTRObEc2bDhhT0R1Z1NLMVJUK2JCalhqbEhMOXQ3WHZ5aEZaYWtoNmZuRzJzTEtRZnViNy9TNzdyRzgxNnBqRldlZC9JcGdHdHZCQUt3R09OLzhsdnpSK0J2TlU3d2xML09BejR6cHhiM3lDek1malRIY1dOVTE4TTlWWnowVGJNMjdoNUhlOWRSRUptOWxJN0pMbExBMTBKZ0pmK2R5VjcvdVQwL1h2SEtHdzRYSmpmTkJSY2lUK2NlcERVM3hqZUJWVHhhT2xwRHdUS0pydlV0R3lOczd5N2xHNERBZ3BEbGN2ZlJpbXZFUlk5S0dKMVZUSG9IVjlRelZERUJwcE9RcHJrV1ByVHp5ZzF1d25uNC8vZXlpckVOWUpLVjRwNzUwekQyQVR2c3lWcFB2OHJUZExXT05RSlFmT0p1OGRDdXpYczloQzhDWWt4RXhNZFBHUnU4aWdSVklta3BzZDBFOC9SaUd2dGEvVTQ1Z28rZG5jZW5TOFpRSGx5clB4MThZSjltNUJjcWNjWlBXcVcrWHd0N0VqSW4vc1J2YmFJQWNZMzd3RnJaNWtCRVh1bmV4TS8rZU5zdmlBT3lEZEIxMTRKb1drRERBMFpoTWMvZ2QwZHEvVDdzRysrNVFPRmtWRFdDRFlKYzIxWGt4ZWkrQXRCa1FoUG9jRStDL2lEK3M3SjFQanZpOXgzR1V4OUR6cTQ1WFdQaTd2RVJFTURZeGtKeStiemxuQVQrR3JtaU1jcXp1TTNiMEFRUmdPaDhIU3dCL2lOK0dTQXJmTzlLOFNVOGNodjh6U1VocW1DNjVka3BHOGJBSlZaLzg0dG44VEdMbGdGckl4Vy9qemtsc0FFeUVhK1JGb3NPUUk2YXhTaG9GUHpxL25hQU9zQzI5b2RZTFFOQ1JkUWpYb3pBSGNBaXFtamEwaUljZjVOMXV6Wk9DSVpGU0VlcXdENlVZMGxDcHRZRGpFU1FzUzhpVFNHNFZqQ3NOTDZ1dlo4SmZNU1ZoYkV2dlZkSmE5OGd3ZDczT3dpM2tXQ2VYdXc4QXk4ZjcvSHRZcEM1VTJFbFo5dkljYkFLLzBPTHNWdllQcHp0SmtDK2hPUWJ1cGQwcHp1dnRVSW0zTDdiQ3dVRVNzejVXYmxCSE91SFMzUFJtTUtRSlJMU1lERWZzQkhZTlJ5K2x3eDI5bHN0QmJ6aVFSdkN4d2RqZmRBVUdDQXh6VVdGeExWYUNPRmpBOURneFFmZFpITUpKUmU2ekhDQ3pSUGVJVWg0TjVmUDRzUDFRSFo0M3MwTnNVNHBEYUltZG5BTEJqS24vdjVjRmplVzR4VXlSR2krSFhMWUMvNkN4QUtWY0NQOGpoc2hxT1pudndUbXNEYjJuRURWaVRNUVplL2FpWDdZS0phdjhJdlF4ZzVtOTRGNVlFejNCOW9BRzRtTDc4QXc5S2pnM1VSMGRoNEVaM1hlbk5oWjNwZGJ4V1Q3M250ZFMzNUJOQW9ZZDRzRHozZzdMdnBKQS9BYUtCWnZnQk1YMW4yOVdNbWNIZGJSY3lDWUpTVlc1WGQ2dmZTZVJQZ0k4QnRDOWF1ZHdDZ211QTZsSS83Y0IvV1FCa0FNWkJLK1dONVFGd3FoNUFGWTFjNlBCbS9VZVBsczNuWGlWckVNcENCMG5vMURYMWVNSXh2bmVvTkpnZ0VMcmM2YWFrdWJWWGxZbDRWbEJRSWtiTXJOVGMwZFJjZWtHZ2hvcUljMmMrdDU0b2tUTXdBdVFBYmVlMkUxaTFENlFNWUMwZ0NxU2VSWUY4eXVtU0tBanFVcUhpQkljQTU1R1ZFd3NaUlFwRGsvc0creElZU3JDVTBCUjNadVdncHNZY0w1MkRYQXZHdktQVWFpQXdJS2x3V3BXSFB6UGZ3V1ZCTmtqdEF3VENPV2I3NWdub3QrUWhXdndLbnJ2bnJDbTlZTDJ6VHlQVFVBeklRTDRESmtkQVdYRGdxaFBrQ1laMjNlSFJ3QmFOeHEyR3JxT0FnN2VvUFpnQWg0RHVKcWh2ZFRqVE5xc0JjSlhURENSSFI5Mk1EcFp3Z09OMkU3dzhwQmF3SXpEbG9ENEhvQjVIQ0xVREo0OVFiV0N4VGlBb24reUFEczVlMndpL0tDbkVRWGpIYjM1eDR2Q3h6QlVvSUlXOHJXb1VXZ3IwUWIvSE9OcEJXai8xaXhUdUJoWSsrcHo1NTBHeXNFUnR4dzVwNGpJVGRPSWhpVUFFSjhBL0lRclNlVmhZWUpRanM3N0gyK2NDUXVHWDhrSEJDOE96aUZIRzBoSmNJc1lWTWdMdGd2VXFVU1A5VU1GMFFwanU4dUh4NnNXZ256WXpIblU4SGtyK2NLeHpkU0FUeVREWUlrVHJidWdUQUNQQldUZnJHcmhHOWVMOUhLUDZKTStSTkdVSlArNnk5MWJpWEJzN2lxZ0o0QzFBSExoUVJDVmdTa1RKUTlZa2U0TE5RUHZJa2RKb0NPaWxJNUNkR0FrOVVYaEk0RUtaeDgrOEdHT3Q4WHFwYkN5OW9EVTVDS3lwSzFXY2VGZlV3WXdyY0NvaFg5M1JNc0VIN29Uc0FFMGJtOEFRZ3dDTVBwVWJSQjBJM0ZMNlFFbklhMHNNdDN2ZEFrMzBOY2hLR3lwSERhSmpYZXQxSWJVK3FUaTlrOVpKZ2Y5UGcxakhrRkV6S0dHNktGNzdJaDF3bmhSNmoxcGlEampTVU9vTklORkJwckJ5R08vK0JaZXN6NzVjNTFGUlRsQm9sYklPSmwvQnBKeDFaZUVjditqSTEzbDQrQ3dvRVk5TEsyUkVWZXlKMHZUTjBQWVZNSkZ4MlRhd2d4Z2pPWWl4SHRQSUNrQzdjWUgrOFA0bjFMVGY2OU4wNnZqZ1RtVW1oZ0M0dUh3NEVvMkNUT0FnRUQ2aUJWbnd1R1JZLzh0Z3MwakhzaEJGQUZEZmNObUVyMmN4QzRpK0J1S3F5ejZnTW43cUFRd1pOb2puYzExU3ZtR0hDOHVIRVJYZ2tNYnN4RzVNaUdZUUpRZmt0NkFOZTM0VkhObldjTkRpRDFrMVpFNDM1dk96RnA0akFENGNmSHNoTUp3aEpnNVRBRkZ1ZjgxZ0E4TUNlRFVkc0dJbHk1SnhPYUl4THAyRHN3Q3NrTW5zQjhMdmdBZkp4OU53b013UHJlSU4zTnZSQzdNZU1YTzRiRVRwWWZQdjZDZzF3Rmk4VjExd1RyZWdzYjJVYTRaSE1nQmFvZWlXc3VGYU5KWExNOHBCTnA5dEVvbU1lSUNlRDd5ckd6bDZWbEtURS9TRFpMUDVFUWdBdmsrTlhqbDJaRzRBZGxvQk80U0NWU3dmaUlJWlYvdi81RU16UklpVWVYSm1wT0JkNElZOHpyVFJnOGtRVyt6VzlYV0dFMFJUSkN4NGVKRWdBZ2R3SHlmRk41WHpFUzFQNDlzRnpvMzNvRVFaWWxYeTBaN0RHTDczTzdJakljVGNsNnZRQ0l2MDRVYmtab2ZpV1BEMUkrRXlTQmVBUEhiZnpwWFFpSkhTNTBZTTY5dzJ2TC9neTZCUFBLVnZ4YURoY2pFWWhRaWIyYmdJQUNzemhQVFRkUnFiRzF5QVFXdEpsaGYvZzczeFhIUzVBQmJLUXMxbzZqQ095QVVpb3plYkF3RVRWZlJnMzZTWWczS0czSk4rdk5HN1h3Qk5qZDRIS0krTUFQY2FraTVIQnRERGVqKzlnempHS1lNTVRKaUFBZzI1MzRYRmtOL0NHR2hjVmRFMHZlQ2s2azViY2lLLzF6UWR5RWx5VHFIYTcyNVVHWVFESHp1Wkcvb25wQjVZclNmUkNUZlVOR1lkWTNuSFBJWkFKeUQvNmNYendLQm9uUGNTUEFGWnJQZTRaVndqakdxTVh3U2lSOE5QRE94U0N6cXZENXI1YVZnSWlZUkpNVVJENWU4YjRxUHZpN0Y1TUM3MGNvYnhncGtwQXJZaStoS1lxTHBkOGs0aU4zK21IcGtLcWdac201aEhQa2xYbHYrSXFadEk0NzhUMkUyMjlidi83cFFoQWVLUEJ6SmdGU1lZNnNDT3h0QzNoM0FLSUQyaWplUmxsVys4R0xIaVJSdXZobDZUdWNLK0pWaElZTU9VSU9RRFVLWlA4TExNaG1sWEJzeURBaHlqd21sNy8rdGp2WDkzdHpjTkVjRGp2bURiaWhuUk9Pai9hUmZrYzJDeVoxQ0dEYmtERndGeFNxSzV2VUsxOVpGL3JtSVJ3VDdMeFRqMlpNRldmMkZpYi9uWk01S0J3b1FIamQzQlpzOWc5ei9jZEZzVWJiSzY4WksvbHUxRTh3ek8raDYwSzh3R3o4RFZuUmVLOGxyMFZheE5kTUw2UnU5M0diNlVXV2huakJmRk9ycHNyVVpWa1VoWEdFb2YzOXEwOG1aa2kxVFgraUxZQWErWEo5dUtKOW05dG1IV0NGSGJxeVppRFdvTGlBZkN6SENBZFlZcWNtdkJGUUQzK0R0MmJzR1Y0SHFRYW4wS2tROWc0VE80bW50eUpDUy93M1Y4SUs2TEd4d2poWXJGQU5mOHArSUJVeWVSR3VDdEVUTVlWQThKUjJtME1DODkrQi9YNTF3K2FnS093T2tmZE81dUtXeW1pZ0JBdnFMR2dLNE01MW44djQvdXlvZjc2UWp6MEc5cEN4alNoQzdNWVB3UisyRk9XTnIvRCtjUFRTRzhDR1ZtZ05KWHQvQlZZRyswUEJoeUdoQk53N0lUUEJBR1dxUlAveHFvMGdhWmdZNFA3ZUFEaWtBVFZ5N2VlRnR1NnQ5b0pPUWM0RkZSZzZ2UHJGMU1HZVhUL0UrZ1BxcGc5V2h0U0ZnQU8rQ0llWjNJc0t4RjdRUWVMMWN6d2ptM3NzQ01pQ2VxdlRvNVM0aHprbjJRMXZuRG82SFZva2hxc0x3VFRDMkFNRDJSZWhuc1dBTTNTbzJ3ZnRoeVpBR0Q1MzVYbjVWYVFsd211bXdtMFFOTUNGQ0QzQ05jdnU3RE1lRFV5T1pqNzdoeDdoNU5nSFV0SXMyRHNWaUliS2JDb2FWcDBDTWFoNWpBUDNmVEZMZUJVRWxpZ0hQK1NTTC9VdWxrelEzcmZISEpBT1VDeDZxdHkwY3lrQWVyc1hreVVUR0J6L0dnYXZoR1ErWndQbEhGaW5RLy9RTy9EQlYva0hjR1djQWRuVTRHNGdhekRCNFE3eWxqQmJyamRyLzNnL1AyTDFrVzltc0JBU1k2RllSTTEzNFpLWURmc2lBUUV2Q1NkOENqc1BpM2lmMjBUSVJHczh4T3pyZy8zaWhxQlBXRENMWVdvTUFOdmI3QmJMU3B5RzFTQ1FRRjVBR0NkcEd5Zi96TG1pVEovMkZjK3VJRnEvVHZtRnJNZGZPQm54eVdWTFc3RHZpVkVpa2VEeEExV0ZtMFhzaEhVQjV6QnJOTUdFMW02UE13aFJZRTB6dzVuUUhlemFEVmplSUJOdmpBNzU3cDhVNzRSakxQT2szUGQ0YnUrZlVCUlordlRHY3ZrbHY4bzlJbkJQNkErcEpKdmhrVmhCSXhkVGhCRGVneEJRTnFKa0lBaUdqLy80blR0ajhOKytWTHJmQ2JYdzU0VkJCUk9pR3dHQTViTmx2QzF2VE9BSkNpelRjWVowb2dJQjdtTmxaUTR2dGc4ZWdZVlFRUzQrZUtiTmRpRGNDYXNEQnpSTjVCRjlOK1dKVnVtSFBSVitCTWk4VC9tTWZxbDUxQzBiZWZkRVd3K3dybmt3QXkwRTR3bGhEeHdUaTBEVFdINHczRXZvWXovWkhSVjJCN3d6ZUkyd04rbnJZa1RQcjVROWlwWEYvektNaW5qL0lnTUJYV3hwdGladjczampvL0dDYVd5ZktRSzJjMEVUTDZ3Tklib251eFhEQUptTzNHa1JodEZ1ZHJpYWFrVko4NVkzOFNTWlJNZEF1RnpJVTN4dVhtK2VaMTRtYWowQnd5YUEvY3dPc3NxbUdFQlNMbjFnR2JlSG1oTkdVUU1CQ1ViS3k3aVUwUlZqTmNDU0FuZ0VhcmtzbWRYQUlWajNDblNqREpJL3hjeUJUR1F6TzZJOEI1MlIxZHk0YUdndUszZEFHa0JvL1dMVm9rZXFzczlzRHU0eFZ5QVBVR1crejhSK3NmUjFrc0VwbjNPdUFGQTB6NFYwanFtU2UrS0JFYWkvMG9WMVlGZkxCK2VEUFlNV3c2UUZ3UWQyakl3YmdOczM0RnFMSFlNSVJZVHZzOGRraitIUjE0S05OYzJkVDlDYkg4d285Qzk0Nk5XTS8rSXNzY25ySktCREx3TFhORjVvbm1lQmhJWkJuT3JKek9pUnpnTTZSaERrMzlpSmMwaG9FeDEzckhDOFdhYld2VytjQlRoN01pVFovRHJ4SVJIS3NEZENkb05ZOFJWSEtBRHo5cXpRUThlNUlBTlEvTytjbGo0QkdZQjhSSTQ4QVJUbmdyRW4zQnlGalJEYnJQaUZxK1VZQVdoQ1RabGRvd3d2OGNqTTJGNDNsMkMrK2I2SnQ4MWNYczluZllnb0EwWUlQZ0xzUU5wM2VmenRTVEJHMEhDYjZhSFdMSjV3dWtpN1JzKzhBYlNIVDRXRFpVVHBqU2NYZVlmcFhUNGNXQ3hnTnB1MWM0UVZFc0M1YTZ5ZHBSdjZnam93UG1xOGtuRUpOQURnNG5uQkIxT1FxZDBJbklEWUFzbS9xNThqTU5nMFBnakh3Tzg4cW5qalMrd0pVQjh3Q2c3WElKVlFIVURRT0xsMm5oMEhuYXpmbkh4YTdkWkUrS1hpWk1FY2p3b2MzdjZrS2tYNkNCQUxGaDFNc1dXdUFsVDk5b3ZwNEFiZklwUmcyMWdYNkh2bDBuTkpyWXNCSC94K21VZ3o1bnhvSG9nVkxHc1MzeXN3aGd4aGRTcUxGRTUwY2tzc0JZQkExK2ZpTS9PVFFDVElEUGpKZFhzWWlEMjl0YjFjVW9RYnd1WFBnY09ReTZBRmN5dG1nN2NudVI5V2g2eUx2Qkc4Q1JhYk1wSDlQV3dITzVkUUI1VDlGNUk2S21NZGt4Zy9DWnVZSGF2SkhzTjcwTFlZbzZ4bXNtdmZuYzA4WUtGcEhBVDRJTEVzRlIvVk52RVBzLzlraDZ3S09yT2hQelBXNFdGRGZXRHhlRG5zazhWTzdnWDZFd2FTWVdhK2NVbFI4WHR6U1dBcVhBNFhHY3Jld2QzazduRVE3N21RME85M2t0K3MvY1ZHSnBPa2tmODAxaGFWUWNTSXJpRU96SjVpeEN3OHpHTWNkYzdtQnZWU3ZORUxqOWlOQy9NcDJORURTOWtmWVFMVzBJRW1OSWVxSGw0VWpLVGJzeWJRdE4xNFdJdFlLMzhEcVRJYldHY2tKbVF6T0pjNmVucTRiVjFUelBMaURqUlg3TndFVFVvSk8wTGFjaG1JZkZuRmtxRkdrd090c3h6M1NvVVB2Z2pkY0FzVXlrbER3VEF3Tnk3VkUwK1dNSjZERytKc2d3MXpmNnNRdXNmTjlkK2Ztc0xqekd6S2ZsektRY0IvUXk5Z0o3RDNpZWEya3FZQWN1RlFBaHozeTZZb1AwOWNmMzBsM0RlTFQyN1l5Z3Qzdm9KT25ZMzloSTVVZ3A4Rnl1UVA2czc3d2lMeEI0SCtlVmpvZ28vaWIzdzFpSnVQQkxPSlYxaDI4SXY1V3lJN3NhaXVUckErQlJpeXZtYXhnV3lXV0liUVJnZ2h6bDVwNVZnUW1tWFVBc3NoaVZmUHBwb3RaeWp6M21iNVpHS3lnUVEvQWhNQVgwU2UvczV0VEVJSEVXY3JOV0dQT1cwMEgwSHJDOWZIdldZaURCYnZNWEQ3elZsdVM0OStjUllzOEpBV3YvNm1MWWg1L0l6bC8zNFkwT1Y1RUpkcmpVekdWcTJBeUlxUUxuRnFQNVVSNkJ6ZTMrTnBmQVU0Ky9XRFg5OW1PL2pCWmRWcU9uVUdlRW8za2Zld3ljU2pZS2tTenJKWTBZRGRBT2x3NUtWVCt4UGpuWnc2UVF1UTNPa0NRYUxSazlqbUFjTk0yWElsd2pZVXR2MmNTU1NEQXpIOHNXNGwrZG9Kbm52dUZzdDRUNlZKd3RlZ1RTVnNYcTJjWXk4TlJkd2ZGMi9RUWdkbWVBZ3VtTTM4UmVqSmhLVkhWd2w3KzlRcGlBYnprSXNZSU9oRU0vdGFFdW9HU01FOVZPc2VwN0xOZzQwSXJBWGhYbTRGa3JIcW5xeHREQno5QkI2aDlFSEM0QW5JVWoxOW9TVmpHd29DdkdpZXRkMFZydWpCN0NzMzBFL2VmRnNUZ1Q1Q1Q4WXhQWUx1VUdiYzRnVnlJK292L05iNlppd0paNE1ZV2N3NHhXYVZJandobitOd1pDZmlsMGpiUVhZbzk3cFlmZ2drNUFuVUp1S0JEb1ZZQUhzWWFncmVzSGwrRGl5VzVzY0JlRmh3U2FqVEczT0ZFOHdQMHZhdWE5MWNFaUlkY0s0cHZxYU1NWUxDQnNDWDJQM2pKQURMMTBYbUFNZ1JDRGNSZ3N1SGZTV0oyZ0l1TGd0N0lLZTNDSkNlMTN3anZqYlVDcDRhcWhMWnlqcFpKalllUU5NZXUwa0V6d3E0ZHpaMUxld0k0WlZiZ29SWVZRYlAzZENXNWYyZ1FSY1hrenlJQXdkeFYvUU0xTWxVVEFnblNuYlBrdkJzRER4Y3hJbHVMdWdHL2tDTmVKTGpyeUkvSUJwWnZWY2ptTTNnZ2t5VEk0VnpOdm15YmNDRnJLU3lJTmZSZDZnMUJGRXFUMHFZeDRDZG0zajF2Qnl1WkNHSmxIYXREd0dSY0ZIcmJLWlZYTkdqUWV5SnYxOGVGTTdpZ2ZYTEN5dVlnNTU4MkZ3UUZ2a0x1VFdCZzBJcGFYSi9jSXQ4dng2MGJqMHpHOU83U2RmcnVTWGphRTlNNyszcWNHVDlubnRDTEt6VllnOENieFB1VWFmbFkwMHJHcGlBRlJnRUJUZ2dhaTdBajVUQ1ZpWDI1Mlk5RFNYRTdJWnk1QmZoSjU0eEVtMkkxTkUxaDdFSGF3THdqQUlwK0Y3dkJ2NWFMamFQeFNkQWg2Y3ZyTUxqdVY4NnoyUnBSZXQ4ZWc4TURQYThDSENzQVJqU0lBNHhudFNoWlNQek10ZXdQbFFDV0RndGxVaXNNazZWd1pOUUxDK0J1UlBBOHBzOEl3Q05SM3JpMXVnOW8wSnllMnlkKzJYVm1qVTcwQ1BJUW1GaGtYZ3h3bTFhTE83SVBPVlJyRHU4RkRLNGdyQzA1Yjc4ZzZTMi9xTDE3MUlabm16NnRLcGtla3FIQ3NFaXNQYmFNaUNEN3hLVDhXb1kwSWhHR1NMK1l6VVJUSVJWZzR2dzI5ZkRqNkFzME5FR3UxK285S1A5UHp5WXkzeVFjMzE3d0tXZE5lUVRzb2RJSWlNUjEzRi9sQ29Xdks4eWRydk5hWUVHWFBDRzB6WlBYOTZBcDJZcjFtQm1XQnAweWxNbWdpWnVpc1FHS3daMytwMWpQbXdjcUlXQUZDQm40RFNTSzFIWlBJV25hUStoNFVQeVdVN1NNUC9rMFdnbGRPSHVPeGRVQjN0L2QwakF2RTQyQi9mUzRNRFpMeEQ0SmxweWU3S044V1lnazRpQW12M3dLSWdyOGR3Q0NmWWlXNTExRXpvZU5OcEY4SjRQU0pIUTBGNWt4S1BqQjg1akRBblJBdU41OWNKRFkxNVBnWEI5aE1zODVZSEVHZUJDMkxocWhmbUQrT3o3U3F3dmhKVDFqRStjMzcwOFd1ZTlFYWRWczRKaEdkQytVMWgxa3R5OUtPeDE5Q3RDTVZYRXBadGl5ZFkyQTRnbTF2c0E3Vm9hdC9rMjRlelR4aHZHM2l4WHdpOEpaTU55TzI0blhFUWYxTDVITCtZZmVWdDhJbkROQ09mUUJ1dVpWU2pkMCtpWndrOGQyd3hBeU1PMno0Z2ZIWkhiTUVoQ0N0ekhZZ0ZZVEZ2TjBtTkMxU0wyVmlVT3VMSUhqTnJpa3cxZlN3WmlZdDBIMENvd3VZSEFyUkd3WUJFQnNudnlsZWFNdVp6SGNsOVdlbHFJU3h5dHcwekhucm4vOEpaa2FZRkhJT003b3NqRFRIRDVaRVJZMGZNVkR2Mk5NSElBMllpTWgyMThZRDVzNjJSbldNbnp0Y0ozNEsyUTVHRFJIZXJvNXcyYXF2cHdFV0lGSENUOC9PRFAzNFpYRXd3ZVpEaTBMQ05GRTJ3N0FlZzNXRWFBQlBJSSsraVhCOUNLeVlOS1hOeVRTY2lKdVJURVp4andOWXZaaVpaRWJpQlpvMGsvbkNtejM1OTVTRlBYVnVBVFlxRURFTWdXOFE4enc1RC91QWlZNFpYNVZpZ1RkbW9SVDhBaXBiMmdLeTQ0WnVhS0NITUE2aXVmSDBiN1l2RU9ZZTlGejJHY2dNSE9saW53VGxDQTVkNFFjOU5YM2wwOStRVkRDUUR4YXJDb2hrNUE3dktHajNtS2x3L0hlT0Rsbms5K2ZncHk1ejBWM0hDOVlnVU11QldoTFZrakJCZ0dlSVFOVjlBRFVXUEppUTVIK014UTBVV2MvenduaFBkZ0hjWGNSUkVDaVRGcllYZ0VxUnVIUnZQaXhsY05uaktoQklnenNtSVFHSnd3YzVnc3ZIemhpTVAxZ0x2NFpaMzhCVGMzOS9aSTV5UkhhbHdXNkdaTUhPV3dNbmFER09KdGxmeVlKaDZJNTRscm5tOWtzMWMxSGNrN1gxNWlFYUhKM0w0VEYzNnhteXhreTNCN0FKV3dWNENRRE0rekJvOFFvRktLQ0NJUDhyOWR6Mms2b2loWk1vdFZnRkd2UlJuelFwNjQ3NW13bGphTW9pZ25QZHY0dXZLZExRSEtTdWNqVXJmMjB2cVNHeTNBbFFIakE1cGt6dVpOT0czMEhWK1BlamV1VDNUeXlKN3cwME1GbzJBY2pVMW0vL2tLQXB2M0JkUzlLU3RWTEpmMGlDQmYrU2xXVnVMVlpoQ3g1M21EcUFVL2dZZGJRVzdlZnB0T1dOWGFNNnYyVGY0cytTclVDbXFRaUlEemdwV1diWEVac1N5S0RwMlZHM3dHWVQ2WmpLOWY1ZFZkaFdOdHdjWk0wU0tvYm5odkRCNEF3cEZEdk41SC80R2VJK3pGU1U5MFhXZ2dUU3BIZUFraDVCdDA1aDFkb21xbEZ0d1VpRVAzWWFIcWpWUXYweUxGbnBVdmVvWnJ3aGh2KzFEQjhPd01zQzU3aXhEcTMydWxkaXQ0YkpGb0tURm15OFNJT1UyeWVPcGNMUnhKMW95cVdaRFZxa1pXNjMzTW9pcmRjT0JzMGNCandrT3JUNS90RG55RzlTb1FqWGhKYVYrMldlOENtRnMzdFhCYlYyZHhocFdQZUxGNVNuTVkxVkRIZHFOTXNhRjlKNlFKRWhlWGJOalJTYmhtT050VTdySjVzRHJpNC9Ra1pYbFloZmhBNVFIOXczd1ZvdlN6RlNGOEN2bHFRb2RYak1zNmxUWk9xNDh4MUNvL1VNNktHcVR3dWIvTmxYT0R5MmFnUkJodjVpM1IvamFOUUZiT3I1ZDJIVWpyMXNUMDkvRU0veFJYbmFRak1SRCsxUWpnWEhBTG51L0JzT1J0dUJEclY2eW16eWNmY3BkTC95REc0WlZKYmMvVkVDcDlPMjQyWlFGZzVJZGRzUjZNT0llRVlZa3c2Qml5cm9RdmhKTXJ1anl3eGdDMng2WkZhWlVzOWtWK2N1R2JXQkhiOXliUHVvcThXOGU3N1pSQkVjSkVWT29DQUpkMDNkOUo5QUtFSGx3UFAxVkZDS1MrWmdKaGFVSEx0M2o0c1cxdjJ3QlJvSkhZUDR1QnVYbSsvcXpMRTFsM2lrMEJ2RHBvMTB6TlFEUnY2eWNhUE5hVHdHTGhIZ1NZU01hL0NETm8yWHJWY1lYM2duZGREWjVQSU1TSVh1dmhlejVIMHVobnFIQ3N5end2SnZ3TjNyUGV3U0tmMjFSRVZrZmVrSDZDLzNvQXV3c3oyZ1ZDWVM4RWl3cnFZQUxaSlBPNHQxazJjQk0xaUh3SFlTMVg5elQxMjFCWTFtWS9Ia1N0RnllK2Jtemh0bHAydmVWV2I0YjJlVUx3SlF0UTlvc1VqQjllQ0dVS2NBQ2JIOWdRYzRhbklNbmNhSlNsWEF0MitMelFHbUV5V3ZFSGtQWU9WeUVTWTQ5Sk5meHBCekFXNVRCNmhMdkNVVjhFbkdrc3BHU0RSSnk0RDc5RkJKVTVVZUlzdHZtYkV1QWVqYjJ2cHVwTk1scVRYQzEzeHpxZ1U0UUZsdlFKMWRPU3VTL0xKSW5GbUVVbERJQVVjSHZUVzNWd3o3bjNXbGdza05naUQ2SWZFZXk5VHhVenFxdFkzeVl2aEFaY2lOK2Zia3dyZVRFbjhRRXdlSHN3bzNNYmdMY0ZtaG1pVGdSQXNZQm5BMTVrOUFGZlhHbndaVmxXYlVrWjhmdFU4eUs0Q1drS3FTZXRVM2VBSUlIUXNqQVQxUTJKOEtnakRmUk1oNTI3NTJ3eUNBalBQdFgwbGlUZU54b2RhZFYzdHRpaERvM05JdW0wakRLNVNuZUZKVnU4MnQ4eVRkZC9ubXI2dDVrbUlES25DK1BJcDRwKzNoN1lXYzVhMm8wL1AyaHV2L0hhai94Ly8zcjlKeS9FUUwrbXRBNjdib3MzUWR4NDloZXNjdU5tZXkvdUQ2V1BDbEQwZ1JJNXFxNEpaY0dNd2VrSEdxdlVvMVpQcVJwRVEraDNqMUh2dHFmczUwTkN3Snl6WjkrUXpXbDUvcFEwMitGUW9Sa1YvUE13YnMzWHVrRUxPT3A5aWh5TjE3Q1E1Rm51YThmV1pTbWVhRnR0QVNsVGtZWXJSUTgxS3NJaHZ4V3FBU0VBZzFCZEhnaWlrcERXdUdERFh3bGhmcnVuaS9oYjl5bFF0R1RXZzdueVUxYVIwS3daTmcwclRzMDJtdnNoVUJERlRPNWE4RSs0R3FqNXRPMjdhVmZmMmdvc3Q3SHBTNEsxUVo2QTV4eGJoOHBDUHN4L1ZHTFBUMFo1ZWtoeWpyYjVVSlFtU2ljL1Z3YWxyTHQ2ckZJREFQNWhQTmpVTC9PQm1tbEFmdFdBTkovOFZ3SHhwT3ZmQ0FoOGIySGY0QXVJWkdGRUJsRHVjenh1a3lBK3JFSjhna1NtVFVqUnhZNWk1eDU5MjdrUVpDV3RleWpYSUVVR3ptcllHelovZWZCK0UycUl3LzNlN0d1MEgrV3p5YUxlMTRaenhlR2gycHVoNXpnczRkM0RENXM3b2gxZ0ZqYTFJaUdDMHNMNHRnYklVc0lVSVZpSnV3ZHc3Y3kwemhEbW1LeGxKd3hvUmVqVkl4SU1UeS9raUlWOHZtTDhBazZnVndhRmRIK0laaERyNS9TWFhjdmFEc0RMaW9JNzlvRkhHWnRaSHl0eE5od0VqSUpDOHRiYlZ1TzFMSDM4aW9NS0NPTHBOYVYrM2VkMCtnNzRRclRPOUFVb3VXVVRHUGFDVEl0Tmk4ZUdxNEdIMktiY0ZQSG9ZZWhMa0xESkcxVmFMOHU4eHZzaG5UejVObWNhMzNkYVM1VE5pc3JncDgxTHJNT3cyQzE2VjRRTG5EZDUvdGVuRFJscFhqOFY1NmxteTdyWTdoMWdDY05PRUg0WC80UVVQZk93SmE4TTl2amFIT1JaU05WTzdaUE8vSGhkL0lkdHZLc25udUZXQVZiN3Y0TG50REpjWEJtdzl1aFZDUmM4cmJmWGdNQXk4ZVVNc0Z1cWtQTUZ0Vlh6QXJDc2Q3RTBJd1I3MUJJWHhNb2pRU2UveHR2aTR6REw1NjBRaUk1ck51MGh4Zzk5d0VhTnEyY0N1Y0s1bjQ2Qi9tcEFvMldQS203ZEtVNTc1bEZCSDRUL0ZWYzJGdTBwZWJ3Sm9xZVdGWnBEN0VldFFCclNZNDN4NmYrSW1DQ0tGcDV2VFkwbzVYa1h2TG9wcWdEenoycEtZak1xUzFVSDJNdVBoTHB2blB3b3Q5SHdvcG93RHVMYU9aMTRCU0MyRktLQmF5eGdEUzRNSDhNK0pXRlFvS2RCNXVCSFpaNXlTbUo4Wm1NOFhtTEZZTHhzT3BvanRQSGVmTWNRRGtMY0xnOUFjWHVtSW1TbzJjNVhTejJuYVlGbFVTTUJCYU9UUVdlcjBFR0swV1hucVgrYis5NW93enNFOWJrbEpETWFoOHhjNHliWFNnUmw3ZzNlYkRrYVpsVGE1dzVQdTA3Wk9LVDZkNXZ3WGFhTk1EM0NPWXJmUGpVK1BkU2Z2Rkh4WE1RU0dzbnB0bExIWE0yclhuNHRuRVI2b0dtZTZuRXhHdE9hWURTTnhWYnZ1b25YWU53Z1NBSXkxMk41VkxSYVB4TjFZR3hRTFN3cnZLYjRQUWMxdEkxNFRxZms3MkFHTG05REgyNkNxVmlZNXBuQ2xjL0Z3c3B2MDBlQk5VZmNOL2p6WStEeFhKTGJRbVRZOXhUUGVkZmNrR25yVHRHWllEeDB6MmtDbDZtZG5RNlBNTnRkVDRLbm1PRjVmNTFNL1NYRDg1M1dRZkg1QjUwUE5qc0w1UHBUZnVjSHRYL3lPei9ablpQYnNUVG5qK3pPN3h3T1FlZVAxSTdpRDZlVmV1SVVpeFY1YlpuL1VMakk3WjBscUY4TGxtRVppZE50WitZdHN3a1NTTVc3WndMRVBKSGhRdWg3QklBMnR3U0FuUXNtdzNNRnltMGtpV3pUR3NCR1BOM0ZNbDM3a2lyeExSTUk4YlRhUFcwY0Y1UUxYcVhZUnpCK3RwL2NNdEQ1M3RZNnZUYXZJcEpaUHhRb1FvWXJnQ2w3T3BXRzRpS0FyYTBDOGRkMFpVOTlpRjA0dDVvVXJ3aFdMdGhzQURZUUVvcWRMUTJaYzAvelJWdFRXcXphOE9BcFlMb1FkaFF1Sk5hZ2dneUdvNFNJaUo2akhXbUJVUFBVc3lUQlJDUWhaRUcxVjhSRDhmcmNUOCsvZlRMMWdzbWlZdkMzaytNaWltV1BkajBJRlZDdDlhMGIzMzhMZ3NQdXJXSFJIQ3JWRSsvYk9IQVRpcjhYY2R4TlRyS2lxSWFBWnhlNDlsZHFCcEc1ZUpqMU1uOUlyR3V2OVNQZGNvQTJyZkN5UldVb1hiNlJHNkxHUGxMUDgwYUI2VnREbGl3ditPYnRNUnErdk9SQ2FPRlRJem05Wlg2S3JNZGFvS0UyMUJHaFFyN1FyVVJpT0RoTEVrOXVHQ1FZZDdZUkZDVEJZZmtRQy9ROXM3TVNpQVY5OFZhNEdMYUVVV3picUV1OTJHSG9VN2NZSENIK0pxakVBcXFFWnB5WXo1QXMrMm53ZWpQYWIzREtRaUpZUnoweFB1VlVickZyWDdhZERTbldMVWZGTllqMnBkc2xBSnN3aHJNUkhtczBlY3lLL0xENVNTMzkycERubFhSRnQzOWhrOG1TSG1TTUtRTTdaSzFvYlRicDNnZEo4LzNIVjZ6NkJwMGhML2plSFo1b0RjRzhMM1ljaTl6Mzk0eTFJVDVyUTdGd3RpT0NXVXlUSkpXTCtDeU5lSDRUNG1DYlNEdDBlS2F2OFdhb0kvajNwMERLSnNqTVpTUTRoYjIrbUNwQXNDd3o2bTlWWjI1RFZKdldYWnNWcmVFemJNVVBMbkRaMTczNkdDWUlocXpOWG1ZWUwzelp5dExrb1lLdEZYcVNMYzNFQ0FESG1seHJrakMzdUxsSkZydXNaVTlMTEJrVnVvc0ZCN2pTeVc2Q2pmWnpkb2hWd2UvdEJPcjdIdGF3b3hJZUs3WkNMbVlQaU80WHEyTXUxS1JLOWppR1RjUENoMG1mYW9iWlRuWEwxNkVOeGZROS9Bb0RZWGZoTlhnMEcvVlk4ZGl1MC9xUzJUdjdwOUVxV0JDM1pYZFZ1QWZFeFdLdEdON3ErWkx1YTllYmRTK0liTWlrV2Nxa3BvV043T1VwYURTaFM0ejdxZmdiME5PRDJLUEdPM1FwNDJOM3BvWTkyZEZwQ2pRQ3NNbVpTOEQrd1B0L3VpVFp1MDYwWUM5WWVWdUg0UE8rMnRCRGxBUFdRN2Vub0VPM2hpWDdHNTVyZEZIMUUxYjdaUVVjM2dXdTRvZ2Y4Tlh0dFFuMkNPR25ZSWNqYTlnUlpQdXc5UlY3d0ZBa2xpZUt6OWNHZVJpaDNhdklhSFMwNGFoQ01oYmFOMzBlUzhjQlZUcDVMSHZPaUJnSUxXTEd3QnBxcS9DY2lZOXdrWjhXZjltWGg3TURiOHFMaEJvSFpqeFZ0RDBaQW5qYkJvMENaeHNBeG1FNUNsU0hCYnVmKy9Ub1JHTTRscDFodUJxTjgwRkt0dUVBRGRSKzhvK0xxSXFvUUZuY2xreDN4VjUyUnNyQ1B0aWpVNlpzVWU1VDltVWhaVFJ4aXluWEUreTM4cnoyMCtLRVcwTmoyVmpDWXZZOHN2MzVMOE5oV1orQ2E2WExHa2tMRGdQQjFKemViU1YwaFJ0dkR6R3NFYlR2UGllUEZrL040dW5SdCszSlVzc3h3eTQyKzBCR29jb3ZzWThvQkxDZHMvSWJ6bUVueU5MMnVFZVcwOGtoaFZVM0VmdHVBQVQvdGtldnl1RVF3ZDB5eHVIQkl2WVI3dHdxQk1DVCtmZ2tHM3JzNWcvOFB4RllIUDB3alZlWVN6THA5VVhBQXVqajkzRHlDNXJPajl3QVNGUDd3QzlpUk1JNHQrVlhIWE8zOE9KOTdqUVZpdkt3YytDRExUbE9BV00weTlIV2hTTEhKZ25wbnB0OU50MjJFdTdYSTJnLzJLSnAyeFVnSlhhcUNxU1BSN3AyT0Nkb0tWS2pnYVhodWV5R3g1a3hudWVyZzdqM3ZkK3BvdzBUVWJCNGp5U0JKT1NqWlorYkFMdk1QVUhvZ0tKNWl2UHg3NGJ3ZS9OeUhsaDdmaVo1Z0tyQTZZQXduVGFkYXBVMnY0VmZQeGp1UkpUQTMrMHBPdDIzN054cDRCcmo4aUlkSldFZFFuNklZZzRtd1I3NXRJRFdBNjdpK296Y0lOeEk3Q0pYSUFtMHN2QlVvVG04QUtPNlRsVVFIL0M2U3QzMHBiTmlHaXlEaFpYL2VsWmhKVEdMeDRJRTV4NndVNTVXNVJ2NVorbWFKeUtYZlRBQkxPdFdjTUdTMFozb1BrU2d4Uml3VGxRM0RERTYxYU1OOTZoNmhBUGdqMmRwUURZMVFkakNGWnVOWThsNDVrZ25HYUNESnJUY1J3VmFUNjRSNDhja3JTejc4MS9rM0dBenB2TFdDd0k5WlJ0UVpEemdCa0FncjdZWFk2Tld3VXZtTXpwRzFwK1QxUS9OQTdISFJvRGFSSkxHbmdXSDMvRkRhM3VKSHNSS0xUQkNuNU5kc3M4UDNxemJuZ3lMNElJVkFZWHdMc094cHdtZU9nMGMvYnYrakk1UVNHVEp6YkpNQTJxeU5BRHU5SjBnbDg1UWc1dXR1Z1cyZldhQUNGV3ZSd0g5VWhSOEFXRnpHci82R2dSZEM5bWlaMzJZZFNLOFlVRElVM1BGSnBXd1FidUJUbkV4ZnRRMlRtQmY5c09xT0Jya0NNTS9yYU9KUnJQR09KcEYxZyswM2VKZUdGU3h6aEl6OEt3ZXY2eEhrVGxLSlVsa1VmVm5KNGQ1M2drenQxN0hBenhFc0gyUXhWNWNhd3EzS05JZVI4bDRvQUpGQStnZk1MdStaNG9JNEdMSGJMUnAxcmlZUFZHNms0NXNpZitmY2JIeDQyWHpyNEhOUW1Uczhic2lVSm1zbCtINm9ZamRkUFNSY3BZZDN3TG5Qb1RjWmxKTG05My9aWVZycW56T3kxWGFZYmJqaGJERytzWW5nT3BKbm4rcml0ZjNUQk1yc0kzSERubUVZQnFuWlVpQ041RWhqN0tud0tCN2htcGVyS0F6Wmo3TFd1QWN4NUJlbTBtc2owQVdsUXBXMjJHVG1rSXlUWnRsVHBFMEROdUtYbXRQVTNOa0lXeWd5Vk4xbzNxYTA3SUNnS3RzWjU0T1FJRWtLRmJybUt0MGxrMHdqSjRwUWhGb3RUMitYaXpHK094YnJRdFVZRFhzclZtd2htRGJPOXUxZ2FWcWpTbmZYQkdHVXgzWTByRlI4Rzg1RU1WVlRSQ3RhU3J5ak9xeGhPTk1BYnFqZmNvZjlMM1pSYk9reVkxTGcvVEJxVzdMZng5bDF5bll1NjBPT3J0bTlTcWFuSHUxZHJWVm0yS1JYb252SVR0bWI2Y2ZGSmJTTnJHSXEzalhUNjZ3bnVFaHBwRHVkWUh3ZDdZQjlrVzl0cG9KTzl1NVFzUFhlTDZ1QklJOUlJb2VqTnloQU1zVUVPd2JGc0hXM3ZkSlplRWlQNk1WdUd0VWlBWE1kekluQW1kcDQ0ZGF4Ny9YUC95cjhvZnJmMXovQUg1YU9HUVpPM2JOeFJJZEg1dVhuUkFUUFVpOVpUWGJpbXJ6RGNzVGQvVGRBaEpxc2xFWE0vRmtEbmNoZGp2S3hzazVZWjVFMC8xYzUvVGFPc3p1U0pMUUdzUTdHeS81M0czbGFuRHdUYldIQWxjZml1OVJGcGJaaTUwdDNTaUJXQTVYc0VsYWlaUS9ITHlhRWljUUkvQk9TTWJWYjQ5Umt0VlFOc2VjbVQ1SVpNK0phbStZSnlMV1pOaUZnV0JpdTM0ZDQ3SmNuVEFTVGQzT0JWWERWenhDaHBKVmh3MHNQcU5uQzhuUElGRDkrSDVzbnJON0ZTVDJZb1pWT3RnenIzSll4eTBsZEJwQjk4RFpRVGhIdllQMUVWM0xkUk1aK0trZHlkbUVTTG1Lc3pYZ251Z3hqRG9IbEYrSGVFR1F1aE11Y0xzVnovVEQxMFdxVDdKUE1IdUF3R3VzNWp3ZGlTK1dqVXFyNHlIYUZQU0QxUkIyNFh5MUlna3NjSnEyWHp1OElKeVkrazAvMWNsLzBwNlJjZVE2MkFWTHp3Rit5N3lKY253aVc5QnRXUHlRRE9xK0FDRXl0VzM5MWpRTGpabUF2aXhpa2w5Tlc3WnNIMEN1VjhkL25lRlVMMWorVFJ1OTJOd1A3bzA5bVIwN2RiYjNaNHQyUkJTak00dlZaYytaUlFEbFJmek5jZG1SQmJXeGxmTzBRcldmd1hOSVdkNGd2dXhjRWpHKzNFVTlKSjFDMnV6cHRISktRaFNWQ00zaGQ2RE51S1hYWnVmQUFWc3VBQlRlM3g1T0lnbnNkbHF4bHh6Z1lGMUIxYldKeE9hVkliVTJBRjFsOE9sY20yVWFKWEo5ZGJQLzdIN0MwTHVwQzlNTlQ3Y3NoTldwOXM4OUZnNG9Lci9LZmdDb2hQaXJFWG1iTGQ0bXVyVmlHeWVkYVRvOVJiSlBmZndhN21IN0RQQU1TN0ZFWHJFMHpzZ1IxTk00TTFsZ3lyZWpSQ3A0UjZnd0dXSFZ4dlQ4dWhMV3FpMkg2QnRIM2ppSllscm5pWnNjb3BneXdZS1lNNi8zN3J6YWdRaE9hdUd1c1BlcThzOW13KzYxU2lVbzFRUWR0M3ZlbkdNaHlHS1U0WkVtaEFmayszSzRia3ZkTElqWjBhYks5NXlMejI3d05Zc0wrL1BZRGtGRE9QTzA4bFNnY2tmVlJZZDVSdXZkVUtTWGM0bFFsSXVBZzNpQU41eENjU3MrWCtnQVNoakw2bDRKS0FwZmY1VFh3WUtqS20zeTNGOWhOZVBGTzhPNzdHeDB5b1ZETk12SGhVQUE4UFhGeDhFbnAyT0F5bnRTOEN3aWEyZEZyeVB2SE5YRzMxQVQ0TkZXNGtEemw3eU9FRFhVaytha0F1NXo2aEU5TU5zcXlZMjZzeWkxdjkwalYvemI3aGRFMmszc1ArMnVOZG16MjI0ejVPS01LUUdQNmkwUUtrUTRPMEtTczhLU1V5ekRaK0hFTXpkRTFhcFMvZVZhZXptdkFDT0h3cnlaQzI0UUVIQUExMTJXNmVKZGtIQTdXZVA0R1hsa1NYeXc2cmJhQUV1WVF6c0wvazRKR1N0c3h6UWd2bXhQc0Z0NjJXQnUzUzUwVmNpcUd5cndnV2JOMlg2d2dkNHRjV0JYNEJiN0ptUURzRGR4OFN4c3MxNGRVL0N1TUZ1WW5LM2VqdmNzelpZdlFMTnpnNDdVTzNVaCtod3FFN2VEWjc5bmRxbWQvYkF2cStteEhKUVgvby9Mb3BvN24yRm5mSmxJczFqT1hMUElXdzUyTm0raDBwbGVsMVBnTEloK29ZSndBeFR4K0lnY0x3cDFPYXZGZ0dGeXhoUG1ZcFI0aTNYSmFhTmx4NWswWjRGWHlwYyttZXhhYVNkWHgzNVVzM1phcDZNeVc5V2hsbW5LZFVZSVd0RDdoTStJWVNQNDh0QWM1UUhQdG44bUJpZURmQjY2bm82TVd3NkpxRjNPbkgzc3hjMjREQjVwM1F5TVp6WUhYa0E5VXdJUjdaL3RGOXEybTU0bWFuK0NsbnEyT212bWxNNTBCd1FrU3dOTlJXNUhYam9FeGdoSlJMSlJIUm8vbGFRNExTUXhlcnBSN0pERWUrNkdmSHFKSzhFYVdPazNOM1I3S1o5OVJxZmt2cGpmeERiUTVOeThReit1RnUvdGRKZEtHRnpPN0pDa1RZZnVlWVJwMjhjMExYeWZZdHlLMk9HTnEvT01uSzRRUFQ2NHR6SGdzZ0VTSVpzd1l0VGdhNi81czdtWnluSTBTL1VkSFFzWXNCSFR1VFNkS0JSTXZ6d3FEWENVaU9JMHBHdEd1MFl0T0IyM2c4TEVIWWRSc01VT1FhbTh1L2xLTE96R2daRktFS0JvQ2drS21LRWhlcUhvY0ZrOGJMK1VmZ05MbTl0R01rZEx3UjZ4azk2emhjTmVSN2Z1MHg0NVp4amxKRHNCdTBSK3MyalgvMU5Mem9aaXoxZnpjaEp6OUFEanpPT0RIU0VEMGlNdnpXTTVHY0IyUVBndTI0Y202aGtiQ2VkSWVkbGxrMDgrdFNja3JYTzBWaE5CYlg5NzBVN0padjl6V284YXZKWE5CYUFDWDk3WFlpU3JkbzFWdHNWQWRYck5aK29BTGtKSWNtN0hlckl0N2NYWlFleE5pK3V6d1JBUEZtV3lsQTVjbDllWnNMQVNld0RmZ0prN2JUZkV0Vm4xT3Q1bytsSXl0dmRqVWYzS1lJQjE1UkNGYm5jTGhLZnAyVW9FaTVuU2l6Vmx0Nkp4L3dGZ0s5Qm5pOWo0TzdIS28rL0hVdlY2Y3EzQm9jcjJjeFMwUElqaTRCYXU2Sndxb0FHaXVkTzdtOHF6aHAwZGR3NGVETXhCWTNnOGtZK1kxcTNPTWp0bi9xZkhjMkZlUkROOTcvRElNVE1oMFBsNHRmYnJjZklJOHF6ZVZnRGNRUEhKODVnNUtJNERhZjloTWN2MSt3OThORzcyUmFVT1hCRFQ3eTlhaDh2YnJQZVlhSFBIQjVVelZUT1kzM1FqVUMvd3hNOUJBYWRlL3U0T2hTVnNPaEhyNlU2N08rZFcyQW9CMVNQSEl5U3l3d0N5cmpmL2lpMEo1bS9iQ1FSaW52R29lNnhwZXRLcWVaVFdaOHV2OUFYRkRsTkFISFkxaUQzczlwdUFDZmxNNVFYeDZ1WHM4ZWRNTVlDUERZSlJzZSsxbmxFM2RzMXVhRjZBa2lUbk5jQmliaWR4dmE3L0diTmlsc2Z4MSsxQ040VFRBV0RuVWJROWMvdkJYZ3hibzcwTkoxK3pTTzh3N1dMeGJIZXdYaWV1bnVvYVhCZi8xZnUzdllnT29iMm5rNHNjNmZYWnhJdzlnT2RGZUVNeERLQ3NPUmpxTTFMYi9QMFI5d2g2anI3emVMV2o4c3FwS3Q3Mm9pQ1duTGxjRllOZ1ZtZ2VURmhhdE02QXJoYndwK2JzUTJ1S0FJRFBDdnorMU12bzhqcUhwWG9WMXFJVUQvMXdOY2NkalhiS3kyRU9DWVd4UGZNbUppQXJwc1dObnZUZlo3ejNHeTZvMkQraFVScEswTDlxeWhjelE3NkowS3poR1c3V1hZb0pPMzN4NXN1RmN3VFY0L2dqTzJtS1F5VDNHVm50L0RuSXZQVXpVdVpodmFQZE9aSy9nYmRPcS84UVJRNXlRV1VUbDkya1plOEVhMm5DRFM5OEFYTEgyRVhWcFMxMDRUUXZUUk9iTUNNSCtVNUZwM2w0cTJhdXR3SEpBV3RJRHJSR0ZoYWJSQWg2emxvdEhsdHVod0U0d29hVmN6ajI3enFWdzhYQkRsUHJCV0JEZEExRmFQU1F5ZnFRR1J5TUxRNVh1TjFZRGpFdWpvU2RpZGR0MXBQZFc2WnhQNURXNTNhWTVyNmNFMXljaCtjMFJNelowNXB3TDJBU29zL2xwRE12ZFlHZjZSeVI4Z2M0K1RJTnptZG1TN2tKN2M5anliQ2VhSGNySzJxZ3Nya1BpY2oyZU52OEJKb0JCd25tOWp3dWNKWm82ZEdSSGl3Z2xNVXN1SThGV1phbmVJNTYwcnVaYnpnMUJEcTBDclJ0V3Bqd09wak4vQzRYSGR3U0lPV3hOR1E2NDhHcFYrdUtFRElmcllHMlFwQk9PeDJtSlR2TlVZTFd1Nk8zeStlUGNNQ2l1TDJkK0NBa0wraUNyVU1FREpoLytkZ2tEeENjelNCYjNQbFJ2RnNEQVgwTzlaU2lPc242N2JjbnF0bnhWQjJ1UFpKam0wR2JaWTN4aGRzL3MyUWtxN01XSWNUM0dlTmJZY2g1Yi9tUE8yVzFsbWVQVmc3ZERoTUowMkViYzhwNklSYmx1VHcyaTA3QTR6NHJmTlJCamtHVkg1MHpiOVlnclE3dk1WVU10MEpFSjhoRjZpQ2I5U0tJVFdoYlNlbWFMcDFIZHBBS3p6aXFoK2pCSTh4enlieE5VZzQ3VE0yVGRXeEVQaHlNdmc3WmNkWm5YSkM5aXdYTUdYNzBkc2Z0b1Q2Uk11aGFoN281RStBSTR0Y3lXQmFEbjVtSlBLVjFEbnE1WHlzRWlyMEZuU3VLWjc0SFJMUFlyVTBnOXNoWGQrTzMrNHlDdzdJa0p3Y2Y0MkVxMHRMMFBURS9iT0hCMmVaK3kzVnNidU8waHpIeDRhM1pydXhnT0V6YlRtM3I1bStWZGJLczMrSWw1elRDVkk3c2FNN05ubm5ad2ZKNUVqUk85aUtBUXdUWkRXS3hXbDkzd3VGZy80YWQ1Y0ZheERPNDdNT09paFZ3enNnOFIrL3pxaTNyanpiTmdkWFJtbVJFYVkybjZQdUZTamduU2ZZUXpvbU9mZVFZQktMTXJ2a3p3YzdPOFp3dngrNmY0ZllQQkVuY2VDVkt6NmxXVGFZcm0yMnBjVFJMRWRBOTJxdjFNYzVVdUNIYTIvNzJCUnNCTEIxMkFLNklIcFBMeHJQZjVCeGNCMGJaZUJmdEZMR1V6RWNCNUZkZXRVMzJFQmZMM1J4ZmlicTZBUElVcmI2MDJUNmZLZEtRdkFBdlk0M3Q1cTAyeWNWNVlPcWdYUHVzRERXcjlWcU44Slg5Ni9raTJJVFZVRDdVWVZvWG9QVG5zajMvYnR5Q2pjWWorUnFjeXpxTnh5NGJlZVhqbU1uYlUyV2c0eHFLci9zZFVYMktRSzAycnNleXA3eDNFSitSQ0M5ZlFLdmw1QitSZkczSG5kc1JsQWEzUXdBSW1WMUxKdmVlNHVobFFrUkc3N3dKS1pmc0NLM3pPUWZVWnlxbXd6QnRWMHFFTkxZV3VGeW1kcXFqVnNEc3dqM3NFdXd0Tmxub3RDS3ovVTZmSFVzbURPZGVHb2Z6czNlZDVzNm5kYXI3REdRTVcwbGVpTFErZ2NOUjJGeG9IUjBBZStDSVFMNkhTY1Y0RHgrWUUyWmVrYWtZRnJJS3NpY0xiQVpnRzdUdFJMN09JNEdzQkhwUTBRNmk5akVSblVoNFNtbE45Y1ZmcWZ4N1F1ZVFEaTk0VlFuRURvb01UdFhhbFNEREd0blBDb0lRMFZsc0E3V0gvMjg5WTV3czRmbHI2SFlpYzJ0U0FLRHdUSHpHQTlBczF5bnV0Q29wK2N3SVQvQlJiYXVlMlJaT0luSjhxVnhQbW50T1dKeEpqaUpiQlZWeGp1Q1FacWlDeTdaclowK1lQWWxPUkF5RVlQU2lGTHQxL2dWY3h6bDNzVFhrT1pPNG5NMW9sL1FaTHNSclBNKy93blF1SElEQ0lqcHVibHVKdno1QnpKNzZoQjYzTk5LWlhPOHI2eHZkWTRKa2Q1QkpxK0swYnJ0OHRtTS9Tbldvc01PRE1ERTA0SEppM0YyRHg0WFA4ckV2NXU4ZHd1TlFMdE1QM1Q2K25LeGJDY04raGl2RGIvT1ppZXVBR1FkT1pQMklHOTVvMWZjOHBNcVNwdFBicmZKVGdBWWZLR052a3ZPUnQwOGJtUmYyMFcxdHNMVHlTK0VwNDNhYzRuTzYvWjFJdnUwd1I3WEU2dXhpL05tU2FmNis3UUo4N0dpUzVUaXVHSmJrZFVySGlwTzJUanNoUHR1enRVMVdQRVZreG1zamtHY3NIdGE0eks5anBHQXhYRGtoWlY5V2hMUFFZMGhDUWZaWW5DOXZuc2xHRDBlblRvOE5MU3MyZUxDZ3RpRUxGa1FQTUJxL1FrM0VkS0VTQjl4M09HRy9PcXpiYytVN08vUU1FbXA5b3pNNVlYVk83UWtlM1Rrc0lVNGZJd005WklOWm16SHFaUmRldDM0WldVVTBIUVNheDBJQUVCMU9qSGtSOGZGQzNPWG4rVlV6TmJPd1RuTTJnZVRJN0dYZG5OUFBWdFdqOSsxSjhubUVUc3NlMVRUc09ZbWlxWnpKenQxQ1VqYkVrbGxJZ2hKcm5tZGJGUWRMWGVNOG1DRytDQ3M3M1ZzOFBVNTludEgwSGl3RmorM251VDByTjYyRWhxY2lxT2Vwc2JGWFFXUkNpd3l1M2NkVkNJUGd6SFNLbDlVVmhBLzdqWHlhRlZ4M255Rnh6dWNiRXVGRGFnZUNFZlJweHJLTEdNY0cxZWM4eG9WRkM1Wk1ycy8yVWdMSFo4TmRQc09hc3NZL0hPQVNwSnk5clFjZGhjL3NjeGg1V1JUOUFsa2VqQklDMkZySHJmTFNSY0NQOHVVV3dta25URTZPVjJEWTRGT3JKZzZkcmFkSDhDdlhxeGMvbmd3QXpNMm5YWlNOcEd2eWhHYUNncUJLV0o0d2xCTVVYck1hUGxmRE05MDVMYm5rWFV1NUhCeTFidDRob0ltY1EvUVltanhySDVBZGJzV1p5Q1U1QnM0SGpIbVVPOC9NaG16cnVNaGt3K0FMaHdUbXBKcnJnMVRwSDE4MVRMTnlNU0FmSVlUck5uK0VKWVIwQ29vOXdmS3dhNXhuUnRnd05DcVJGbnJpMEhtSFBVcmhjdjJpVTFvY2cyL2VIdk5uKzNCY1p6S2tkVW94WGdMa1poY01sT3E0TTB6NzRrMVpNMGNxUDdhR212WlhnSG00cEVOeDAzMDVUZUZrK2U0enN2UjliU2diVS9WT2pFZHNGd3d5M3phMm4yZVpmT1laNEp1dzVtQnZHMDd4Uk1mN1EyeFlSQ2RlV3B3Umc4Zmp6dUQwRVNMVG04TWpyd290ZEVobFErWkRmMTVQVTZFaHpZbmgzMm1FZGNLTUZkM2JpZ1VucDhYNzFORi90amxMTTFnT3BDalVhSnVIUkhSL1owNDNHR0MzeUxmOW44blFuUkVNSGk2Zkt2Nzl5VUJBdE1VRjMxYTRxYnFMYklTMVU3dHZITVhpVitkT090TEQ2aE5ZS2lFL3p1REpPRCtOTWpaN1BzOVAxOC9JSDJ3RXNMK2NZZ1NYeHRpakU4RXNOVHd0enE4QS9kMjJ4ei8yQ0hUMnhPWVdKQ09PQzJFR1grNC9xc2FKL1E3YlFRQlpvWWNHdWxXdTFlb3ZyTkU1cnRzcFI1OFliTVVMN0tBNm8vaDk2NWxydVRCTTFOWUdOODhBbkR0Z0E4RmhtUWpONlNEb0JlWkRCTE9QQmJEakhFTHdWZDVjZlltT3RwVUNUUUkzMm1kSTBoZlNaVzF2UDQvVklhcER4bDZrOW52TEFCT29LZkt1TTdOQ1BMQ2p2eUsxUk9xZWJjOTQ3QWhTdDkvWHVPMlVLSStqTW53Q0RqUXUyKzRFUEtsV05OdG4ydkl5dkVrdmRxVEVwUTROanQwN3ovMGc0TmpDTUIyK0RuVERtQkQwVHNmM0lWQnpnTnZRNi9ZemhsTmFycnBTbFVHZnUrZkZ6UUhGODhVZzQ4ZXRvV0E4Z0Ivd016dk1hem5WL0E3d3RxcnE3czZVZW4xMmhGMVF2TmR0SVZwWUJNa0owNnNGVE1SUkw3TzRsaFUyczhDQjJIWUdhRXF3VC9YZmFZSHljTWl4K1gzNGtNSk1KQjBPbkxjNDByWnJLZmdIclhGV2c2ak4rL3U0SE1UNjRjL2JLR2VXRFFKamdZeGo3NTA2aGlna0RGbkZBNEttZVZ0NURGZThRQllZOUxkNklNNWo4SGJUelBFTjA2MGQ4d1VvUFhFa2ZpMFBQUWlrUVA3eTJRanMybXpCL0ZWS2xudllIeDU4T0E5czNQeVNUVWZ1UjhGMUxBODNDVmk0TXdkTDMyOXdZcFd4M2o2K24vS29hdU1wck5idXNuNmU4VE1PaFhYV1BRcjljUWQ5TEJEczBVa25acG50MDRBOXFLelk0b25hOGF6VHFkZDVYczR3N2FhelFJd2tGQ0RwQUJBZ3dybWNyK2Mwc3BYWnpJdG11QnNSb0RvVUdnMmY1RGFuWWRFNUVkRklMbXFkZ3ZCbWR0RHhkTU5YMVdvTnZROXVFUWliZGFESlBEWHJMVUxiL0RESGVTYmFldzFqd3VOa2Z2aml5YXRidEdkQnVQWER5Tkg3VjVuYzU4RCs0UFMxQndMNUZvamg2WkU1VTdReHlONWZINVBuVThoWVRaOFFVY3lyQnlLb1RkWUJIKzRQd1luSTVxTWVzek95YlNhMU5zcHNNU0NUbk1kK2ZVS3lVMzU4SXBVUEV3aU9rcldiL05UaFkxQ0ZOVmJrMkZQc09CM0VySlZxYi9JNUtwYVB5S3pMTloxQWMwb2RvNDl1eUVGUXhxOFFDZmVaeER6RVRaOVQxcVd6RG5UY0hxQzlmRnIwak0wbjZPd0ZyUWxPRFN2MmZTVnJWc3JwaE1WSlVOZG55Q0NZMElGTUk5NlEySnc4M2o3UGw0eU9XSzhSZWZMQklaL3d0WHhTSGphVW0rb1o3N1FySldQeFhFNXhVQ3dLMUFlc2JLT1NUZkdPZlBtNlJQbk1nY1Y2ek5VU3d5MnNIaVhhTzB2NFNJTVhPZVFTTkR4SjB0UDRmYWJhcWZGaC9zdGFKQUlDdi9ZNGJ6dDlWeFlwSkZVTzBYWXVUenE1L25rb3UvSEExT3hKTEh2MnZKMjBCN05wNXJQR012QnhYeXhGZ3ZvdER3NlhCK2pGYnMrNStsaU8zTGZRR2VkSXArcmVzckc1N3VqYzNZM2RPc1lmWSsvZXZvTzE3OHZCRW5leUJBTWk1RUFSOWJRZEx1TzBjeW05enpSVnJNc0RUc05nUm01NkcvYlFtQ1k3UVlQRnZzRVczcHdMSkZaOVRrYVdJamh6eEVmdlFXS2NBdS80Y1hqVk5nZnBXU0ZyWFdkQnF2dUFoNG9kWHdnNmZvWFA1UHF3Ryt4b0JuejZ0SVJidE04aU9hU3BPZmZVc2JtT2tuak91SXpwdWZBY3lyZnc1c3NScnl5SkZQUFhzOU13eUdrVHVNODZlVEUrWU5iNXo0NHI4ZnpFZG9UUHlBdjRQVTVYbVYxMjRPZ0NxM2R1TUxuSWJDdG8rOGdGQUZtazFEcXpvM3pvbk95TEJlUm1wYU1lUmNGSnpUNlpQdnVlaTQxblM1N1hHdTNndVkvVFdRQlRLSGVGVjY5dFRaa0greW9taTJ6T2M5dWVIY2JuUXgvMEZ4K08xYS8zVENpMTFNaE9ZR0lIckxIN2JDZXJzdGxESjhkVkoraDZ6T2ZEUFJ3bGtwMDVXbndLVFBJdVRkMWNJN3BYenpQeVQ1bGVObHc2M2dKRzlxQUNsSENQTGZ0UWlzOENoalBQenc0NTYxRWNWcGxmUi9aZTJJbFBuWU9heEF3bjgzZ1pjSWdvQy9UNnlWcURiUFk4bktkZHpXb3Yrc05LQjRQUjgvajRGeTVzK3JBN2EzRjhvcFoxbXltY1pGeDAzTnVwdC9ZeGRQMHRVSDY4OVIxbldwV0hOdXdLTXVXUjBRTUhNNjdydTAvNUtmdnpoVlZPVnQvU041RFVKOFE1VU1hSFBWaHFOTXlVbU9xTHhCK1dtWS8zc1ljSWU3YTJYWTZYZGlpaWJXNDQ2ODlNWkd3YXh2dTVKeU9jeHpqc2JmL1RZMTdmTWp1YkN5Q2J6bW00bXdlYjR6cVJPL2xZWWVodzhyR1B5OVF3Nkg2eXNkc0gxK0syNTdBMjJoWmpoMlV4a3hOOWhBOE1FWmVFK0RwcmJOa3NrYU1QOCswK29jN1JURWZ3TGl2R2lJUmVDbmJoOFlIc3Zwc3ljSnc2RUlzZjVWUFNjNWxXVUxmNllMdm5IR0RZZUswY1JKN0FUeDdpQmN5TDNmUkpJdzQveFBNOUtYMGo3bHJzdXpsbmxsZER5dmlJaGVjMkxZMjVmUEZNQncvTFRyNWdmWVJUaHdnMnhBZTIydGtFNk96aFUrSFdjdjY0bytTMG8yMWZvTW1qZTV4SGU1YndGSityTVFGbHgxaDlCSE1mK3VSakhHQlIrZGVvcWZ2MHo1aVlQWDRNSGprU3gvTnFXR1VqMkcySEREcmdLeE5wWVhIZFpwWGlRNWtMdU9DY3NtYndSUUlhWHl5ejhEUGZlb204NlZjL0k0cnF0YXdmTmVxMFVqMkEzYkk0eDBjMzJibnNRMTdzUUQxUHViS3BHTnN3N3p6MlJiU1lSaFdIbnBxdDRyY3RteVo4RW9BbXhCYjVacnFia0Izbk14NWJhWHdpeE9jakhoM0RpVHBzRnVnQ2xzMnVNcXR3eTdiU0JEbjNzRGg4RWdCUHdQaFRUeVBCNVBuZG5WN0ZFdnYvZVo4eGg3Tjk3Q0tNU0NHZkFGc0pSaDZiblRHcll6cTVQWHVzV1oyQ0dJZlBkNElGL3IzaGtkVzR0a2Q0UG43cmtZR2JxSExlRU84QzZ6QllFMm5FVFpPZ1RqcVJRVHNJQ1hlSzJlZWNkc2M2eExhdVUxV3JCWml0T2dQYmEyMU9GL1NRenZHM1ZreGd1WHRHQjVXZHB5Q2RWdjd1V0NZVFV5THNlQzRIV0ZydFlNdEtkQW9RaXNRSjYrTnpOQ3ZZOFp5Ukt3NDh4UUNoYThnY09LTlpWQ3VLZ2s4cGZYekNRRlhLcnZBNUU5OE8yZXpqQjZyOXZpamY1VE4vRytLMU9QeTZPOG9TVW5JN0dyOURlN0Y4SStEc25tV2o5VDJmeHlpTEhJb0ZnSSs2OEo1NzRTeE8zYTdMNThQNGJKMEEvcjNxcFNSQi9FenhlUnFSZlFJVHhoaUFWcGpGbUQ3Y2JKdTI5Umpma3Ywelh1MDdCeCtPNXhDK2ZXNVdQdW1vZWNvWUVWOEFjcnYyUExOTWtHZndSVlpLVU1TSnN5VWlIakhHMTltSHFUdSszeDZUSHM2elNhQmV3SWZEK29vUGRBNzJISCtWdXh6V0o5bXBCdXQzakh5MnJRekYzQ3JvYW1JZm1MdWRNTUNOUWRSc3IvQTVqNXMzdzJCWnZldk1BU2svbGNTT0xEelBKNFdPTCtOR3NSbHlxRHpmWGoyMUR6NDJPUHRvaWNma2NiU21mSjJ6MjR1bEhvN0U1aXFRaWhha1R4K1RHcERlTXoxQzJVZjR6QjMxNWZOVUxQVzUyK05qcVo5NysxeW5ZQkhVNHlOVG5UUnpwamVpYzMwR2VmbDV4dGdwSC9MSkFzUVk0N3dkYVdDVkE0SldjVFRwTU4zdHdUVC9zbXU3VjgrKytDN3JBRGtFOXg3SENWaHc4bnBnN0lPcEhYWG84eHA5cU9PcC92Rmh5TDRZazM3VTA5RkJremJIM2FnREJ4dXdXdDI0T2thMU5XQWxqMElSRkQ2emFaWUdlWHJpT2NDM1dKL2xyY3VXdSs4ODdheWZydjdoZ2FYajhweStWeUptZDVxSEljMldyampNd0dNZ0tCZlUyTm84eStVcjB2aStjVnVqOCtWNGcyMEJrMCtzdzRZOWh1WENpVUdPVFhmcUdwVFpKeUY1K2o1Zm43c21mOXYyNHpxeC93VDR1dXBWUEhJZ05IZ1c1SUZ1UDdNOXZvUkxmZFZIRDhHSUFmZnNBY1I5R3ZlVEQwQWJCZG1IQTN5UGVlRVhMZEtHbTRyN29aN1BYRWY4QkNKdm5ScXY5eG1OVnQxR0h3NTlocDFqSDhSdEsxVXNpMkZsZllidERENnB3bno3emhIRWM1enpycWRRREJhbWhTenA1NW56WmFzWnZvRTVMZ25rNFpUSnMxdmxmRW5UY1h6ejFKZEVINXhta2lEeUJxOUQ4ckZqYkljRmwvTE94ZldiZzdRbXloSFdEd1NCejc0L2JxZjduR09zNnZVMHdRZk5BUm5Pckx0dDVhaHE2L2M4eFdQZU9UbmNzMFdUZkZZcjNSNHBwek9nVHp6QlJ5NnJuQUNFODh5MEp3MldNcW1uaStOOWJhYXhlOENHZm9tQ3d3THMvZmc4ZXpZVlBCeGtyaXRhZ1dDVGdnY3pQVHZFMzRkdUpwK2ltQjJ3ZFNyMVgydlpBRUZqNkRlQXpXS2F4SWR3UHpBM3Uza2lvdU02RDFKS1g1cWVmTXRLdWRKbGhwdG8ySDFNd1p1ZHR3WEVxdWVjOHd1YXNXT0FyR08rNjdRamkrVytQaDkvKzRxVEZpVzBEaUI2U05LRzAvaHR6MFc0d3BpMlJsODN1NUVTOGdQZHlmWjRQb2lSR2J2aVpibWxOWWFXZkZvbGlMQllwalNmZDNZRjRPdUVGTHVYMXZESnUydlk4dTJENnQvMlpXUUlkdTVVbTN3VkM5VzZjK1J0OGJQWkdtZGp5WjNZeEJyYk1YdGI3dm42Q0hFY3cvUDU2cEFWYktsWk9rQzQ1SXJTOVZrTWRkdVVaOE5Fc04za3RrTjN3YmJsN0dCcFF3QzJuZzArbm9vNDhqaWFyOGRqN0xVQVp2OFBQUGZ2RWE2TzBVNEFBQUdEYVVORFVFbERReUJ3Y205bWFXeGxBQUI0bkgyUlBVakRRQnpGWDFPbG9oVUZPNGc0WktoT0ZrUkZITFVLUmFnUWFvVldIVXd1L1lJbURVbUtpNlBnV25Ed1k3SHE0T0tzcTRPcklBaCtnRGc1T2ltNlNJbi9Td290WWp3NDdzZTdlNCs3ZDRCUUx6UE42aGdITk4wMlU0bTRtTW11aXFGWGhDQ2dIejBJeU13eTVpUXBDZC94ZFk4QVgrOWlQTXYvM0oralY4MVpEQWlJeExQTU1HM2lEZUxwVGR2Z3ZFOGNZVVZaSlQ0bkhqUHBnc1NQWEZjOGZ1TmNjRm5nbVJFem5ab25qaENMaFRaVzJwZ1ZUWTE0aWppcWFqcmxDeG1QVmM1Ym5MVnlsVFh2eVY4WXp1a3J5MXluT1l3RUZyRUVDU0lVVkZGQ0dUWml0T3FrV0VqUmZ0ekhQK1Q2SlhJcDVDcUJrV01CRldpUVhULzRIL3p1MXNwUFRuaEo0VGpRK2VJNEh5TkFhQmRvMUJ6bis5aHhHaWRBOEJtNDBsditTaDJZK1NTOTF0S2lSMERmTm5CeDNkS1VQZUJ5QnhoOE1tUlRkcVVnVFNHZkI5N1A2SnV5d01BdDBMM205ZGJjeCtrRGtLYXVramZBd1NFd1dxRHNkWjkzZDdYMzl1K1pabjgveHJ0eVl2RFJmRzhBQUFBR1lrdEhSQUQvQVA4QS82QzlwNU1BQUFBSmNFaFpjd0FBQ3hNQUFBc1RBUUNhbkJnQUFBQUhkRWxOUlFma0J3SVJFZytzaDBPcUFBQWdBRWxFUVZSNDJ1eGRkM2dVMWQ1K3oyekxwdmVFa0lSaUNDMFFhZ2hkT3FHSU5CRkVVY0VHSW9JRnBQaGh1VjdBY20zWDNwQXJLZ29pSUNBaXZZbDBFa3BDU085bGU1dlptZlA5c1R2RDdHWkRVVVRVL1QzUFBKdmR6Y3llT1hQbW5mZlhDYVVVZnZudFlyUFpVRjVlanVycWF0VFcxa0tuMDBHdjE4TmtNc0ZzTnNOaXNjQm1zOEZtczhIaGNNRGhjSUJsV2JBc0M0N2p3SEVjbkU2bnRQRThMNzN5UEE5QkVPUi9FMEVRSU44b3BlSXJvWlJDM0FBUTcxY0FvSlFTOTlDbFY2L1BTRjVlWGx4VVZGUVRqVVlUcDFBbzRoaUdpV0VZSm9vUUVna2dBa0FvSVNRVVFCQ0FRQUJhQUdyM3BnREF1SThuQU9BQnNPN05Cc0FLd0VJcE5RSXdVa3IxbE5KNlNta2R6L08xSE1kVjJlMzI2b3FLaW9yMDlQUnE5M0dvYkd2d25oRGkvWjM0R1FCUVFraURWOWxHR1lZQklRUU13MEFRQktqVmFqQU1BNFpocUVLaGdFS2hBTU13RVA5V0twWFNxN2lwVkNxb1ZDcW8xV3FvMVdwb05CcG9OQnBvdFZwb3RWb0VCUVVoT0RnWUlTRWhDQThQUjBSRUJLS2pveEViRzR1RWhBUm90VnIvelhRZGhmaUI3YmNKeTdJb0x5OUhaV1VsYW10clVWOWZENzFlRDZQUktBR2ExV3FGM1c2SDNXNi9JcURKd1V5K0NZSkFSSUR6QWpNUElCUEJTUTVTM29BbGYxOWRYWjBhSEJ5Y29sUXFiMkVZcGlVaHBEa2hwQm1BWmdBQ2JwSnB0Z01vcHBRV0NZSlF5UE44QWN1eUYzVTZYWDZ6WnMwdWVBRWN2UXpnTlFCQUVmZ0lJUjVBUnltbFNxVlNCRFlKME9RZ0o5L2s0TllZd0FVRUJDQWdJQUNCZ1lFU3dJV0doaUk4UEJ5UmtaR0lqbzVHZkh3OEVoSVNvRmFyL1RlWEg5aitIQ2twS1VGbFpTVnFhbXBRVjFjSG5VNEhvOUVJazhra0Fack5acnNzb0hFY0o3RXpiMUR6QldZaUt4T0JUYngyUG9ETTQzMWVYbDVzUWtKQ0I1VksxVUdoVUxRbmhMUUgwQmFBNXE5OERYaWVkNVNXbHA1TlNrbzY0M1E2ejloc3RwemMzTnljSGoxNjFMcVpvaHpVQkRkVDgyQjIza0FuQXBzSWFDS2J1eExJaWFDbVVDaWdVcWt1QzNCYXJWWUN1SkNRRUlTR2hpSWlJZ0pSVVZHSWlZbEJmSHc4a3BLUy9EZVpIOWh1bkZSVlZUVlFPdzBHZzZSMnlnSE5icmMzQUxRcnNEUWlxcDFlZ0VZYVlXVU5HTm5FaVJNVkgzMzBVZmVBZ0lCdUNvV2lLeUdrQzREVXYrTzE0SGtlcGFXbGFOYXNtZmRYZVlJZ0hPTTQ3cmpSYUR4Mnh4MTNITnU5ZTdjZ0F6c0o5QWdoZ2plamN3TmJBemJITUF6MUFYQlFLQlQwU3V4TkRuQWlleE1CVGxSUHc4TENHcWluY1hGeC9wdk9EMngvbkJnTUJwU1ZsVWtzelpmYTZjdU94bkVjV0phVkdKb1BPeHFSMjlGOE1EUGl3MTRtc2pMeXhCTlBLSll1WGRwSG85SDBaQmltRnlHa0o0RGdmOEkxdVF5d2VZdVpVbnJJNlhRZU1wbE1oMmZPbkhsb3pabzFUaDlBSjRqQTVnWTA2c011UjcyWm5KZjlqWHJiMzBRR3AxYXJKWUJyelA0bVYwOUY5dGEwYVZPRWhZWDViMEkvc0YwLzRUZ09KU1VsSGl4TnI5ZExMTzFxN0dpK25BTWlvSG14TTBuTmxERXl5SUdNVXNyVTE5ZTNDdzRPdmxXaFVQUWpoUFFIOEk5YzlkY0FiQTJlVTRJZzdPVTRibDlWVmRXKzVzMmJuM09EV3dOV0oyZDBJbnVUL3kwNkdPUWdKd0pjWTg2Rks5bmZSUFlXSGg3dXdkNlNrcEtnVXFuOE42VWYySDZmVkZaV29yUzB0SUZ6UUs1MmlxQW1zalNSb1YwdG9QRThMNm1aZ2lBMENtWldxM1dBV3EwZXpERE1ZQUFkL0ZmbmR3R2J0MlE3bmM0ZFJxTnhWM1IwOUQ2NHZMaUNOOWcxQm5JTXcwanFxa0tob0ZjTGNDS0RFOW1iQ0c1eTlkVGJ1WkNZbUlqNCtIai94ZmNEMjdXTHhXSkJjWEV4eXN2TFVWVlY1ZE01Y0tYd0RTKzFrM2c1QnVUc2pIZ3hOQW5NYkRaYmxscXR6aUtFWkFGbzZyOHlOMFRLZUo3LzBXUXliWStNak55T1MrRXFQa0ZPcHE1NnFLb2lpL1B5b05JcnNUZHY5ZFRidVJBWEY0ZUVoQVFrSnljaktDaklmN1g4d0haMVVsSlNJckUwdVMzTmwzUEEyNWJtZzZWZENkQ0l0ODNNWXJFTTFHZzB0eEZDUnZuQjdLWUF1UzE2dlg1TFRFeU15T1E4UU02YnhjbEFybEdBVXlxVmpRS2NuTDE1T3hlOGJXK0ppWWwrNzZrZjJDNHZKcE1KUlVWRktDc3I4MkJwQm9QQkl5YnRLb05zaWFoNml1cm1aZGdabzlQcDBvS0RnOGN5REhNN2dIYitKWGxUeWxtV1pUZVdsNWR2YnRteTVSa1p3UEV5a0tPeTF3WXNUcTZtdW9HTlhrMXdyenoyVGZTY2l1eXRhZE9tYU5hc0dVSkNRdnhYeUE5c0RWbWE2Q0R3NWZGc0xJUkRCRFZmZ0NiUEVwQURtZ2htbXpadENoZzhlUEJFcFZJNWdSQXl6TDhNL3pvaUNNSTJxOVc2NGEyMzN0cTRhTkVpR3dDbkhPUmtMRTRRMlp1M211b1ZIdUlCY0NLNE5SWWE0dTA1RlIwTGZ2Ym1CellBZ05WcVJVRkJRUU1IZ2NqU3pHYXpaRXU3UXViQTVRQ055TlZPdlY3ZklTZ29hQkxETUpNQStGZmlYL3laeUhIYzJwS1NrdlVwS1Nsblphb3E3NjJxeWdDT1hnbmdMaGZZcTlWcUVSd2NMTEUzYjhkQ2l4WXRFQmdZNkw4eS8xUmdxNmlva0ZUUDZ1cHFEd2ZCbGVMU1pLRG1FOURjQWJVZTZxYlZhczFTcTlXVENTRVQvVXZ1YjhuaTF1bjErclhSMGRFNzNBeE9EbkM4THpWVkZpYlNBT0FhczczNWluc1RWZFBZMkZoSk5XM1NwTWsvL3Bvby8wa255L004OHZQelVWeGNqSXFLQ2lrbHltQXd3R2cwd21LeFNLRG1jRGg4WmcrSWdDYXpvL2tFdEx2dnZsdngwVWNmM2ExVUt1OEcwTWQvKy85OWhXR1ljWkdSa2VONG50OXZzVmkrSGp4NDhOckRodzg3UlpDamxEYndyUEk4VHdWQm9HTGlQYy96VkI0UzVIUTZxVHhjU05RUTVLWVE4YUVyUG9TdFZpdk1aak5NSmhOdXVlVVdLQlNLZnk1akt5d3MvRWVjcU5GbzlBbG9vc2RUcm5aZXpvN21TK1dVc1RPeWFkT21rTmF0VzkrclVDaW13Ujl6OW84VVNtbTJ3K0g0Y3YzNjlXc1dMRmhnSklUd01pYlhRRTJWc1RodkJuZForNXRjUFJVRGU4V2MweVpObWlBNU9SbWhvYUgvVEdEak9PNXZmNUpsWldVb0xDeVV2SjVpQm9HMzZ0bFlHSWVYMmtsa2FVOFNxR1ZuWjBlMGJObnlmb1ZDY1QrQUZQL3Q3UmNBK1hhN2ZkV21UWnUrbmpKbGlzNUxUZVhkNENhcHFPNWdYeXJQUWZWV1QzMkZoWGluWkVWSFIwdGUwK2JObTZOcDAzOWU1TkRmMnNaR0tVVnViaTZLaW9xa2dOdkxlVDI5TXdnYVVUdEZMeWRES1NVblQ1NE1iZHUyN1F5RlFqRUR3QzMrZTlrdlB1U2l6V2I3L0t1dnZ2cHkrdlRwaHNzQkhDRkVrQ1hkZTJjdVVGOFpDNDE1VGNXQTNtYk5taUUxTlJYdWJBay9zUDJWeFdReTRjS0ZDNUw2V1YxZExYazk1UUczamVSNUV1OVVLQzlQSjdOa3lSTEZraVZMSGxRb0ZBL0NIMy9tbDZ0NzBKNjFXcTByNzdqamp0VmJ0bXhoM1FBbnFhZ3lnQlBrSGxUdjFDeVZTa1VieXplVnE2V1JrWkdJalkyVjFOS1VsSlIvVE16YjN4TFlxcXFxa0orZmo1S1NFbFJVVkRRSTVmQk9YcGZiMUx4WW1vZGpRUFJ5MnUzMk8xVXExU01BZXZodlY3LzhCb0E3YkRRYVB3c1BEOTlJQ09HOEFNNmJ3VkZaQmdQMVptL2VNVy9lQWIxaVNFaVRKazJRbEpTRVcyNjU1UjlSRHVsdjV4VXRMQ3pFeFlzWFBlTFQ1TG1lM3NucmNwWW1PZ3JrYXFmTWpzWllyZGFCYXJWNnBqdmx5UzkrK1cxc2dwQ01zTEN3REo3blIxVlhWMy9XcEVtVEEzS0E4L2FpOGp4UDNRSkJFS2hYL1Q3eFBYeDVVVVd6aXVoRnRkdnRzTmxzYU42OHVSL1kvaXIydFBQbnorUGl4WXVOT2drdVU5bTJBVXVUcTUzMTlmV3BvYUdoc3dnaEQvdHZTNzljTDJFWVprUjhmUHdJbG1VL3lzbkorYnh6NTg3NU1vQVR3MFI0QUlJZ0NJTFkzOEs5VVRGbFR3NXUzaUFuT3NDOHdjMXV0Nk4xNjlaL1c3dmIzd0xZYkRZYnpwOC83K0g1bE1lbk5XWlA4MlpwYmxDVDFNNTc3NzFYOGNFSEg4eFdLQlNQQVVqMDM0cCsrU05FcFZMTjZOU3BVNWJGWW5tL2I5KytueDgvZnB3RndMblpHeU9xcUpSU3FSaW0yNEZGNWNVVnZBSE91MXF6SE9CWWxwWEE3ZS9ZU09ZdkQydzZuUTY1dWJrb0xDeVVDa0xLcTNMNEtnYnBmb3JKUVUzTzBoaEtLYkZhclVNMUdzM2pBQWI1YnoyLzNBQnBHaGdZK1B5dnYvNDZvTHE2K3FNbVRacnNKWVN3TXZXVTRGSk9LdlZpY0hLQW83NmFBdmxTVDhVb2dOVFVWRVJFUlBpQjdXYVJxcW9xajNBT01ZbmRWNFZiV1NnSEVlbTVENWJHbEphV3hzZkZ4VDNPTU14Yy83M21sejlCUFIwUUh4OC93T0Z3L0hmSGpoMmZabVZsVmJyVlUwWU9jSzRLNWtSb2pMM0pWRlZjalpxYW1wcjZ0M0lxL0dXQnJhU2tCSGw1ZVNncUtwTENPZVROVlh3NUNieFpHcy96Y3BiRzJPMzJDU3FWYW03cHVlTmR5eDNCeUVodmRWT2RjMzE5UFdwcmE1R2FtdXBIZ0wrQTZQVjZiTnEwQ1E2SEE0TUdEYm9tZzcxYXJaNDFiTml3WG5WMWRlOUhSVVZ0SVlRbzNPb3BKN085RWJuOVRRNXdMTXNTbG1VYnRiMTVNemlPNDFCVFV3T3oyUXdBaUlpSVFPdldyWDgzOFNnb0tBQUF4TWZIWDlYNVYxUlV3T0Z3L0c3bkJ0UG9ONndlbnl4N0VvUDdaeUlqc3o4ZVdmZ3F5a3pPbTJMQjVPZm40OHlaTXg1eGFwZlltZzdGRjg3ZzJKRmZrWjJkZzhMaU1saHNkamdjRGlJQ25EczFpZ2lDd0FpQ29LaXNyRXgyT3AydnFWU3Evd0hvdXZvLzgzRFB3bmR1aW5NOWZQZ3czbnp6VFFEQWtTTkg4TnByci8ycFkvZzl3bkVjQmcwYUJJUEI4S2VONFhyTDJiTm5ZYmZiRzN6dWREb3hZY0lFRkJVVklUQXdFRmFyOVpxUFRRanBIQmtaK1I3THNvdDM3TmpSakZJYVFDblZ3TldZV2tVcFZWQktGWUlnS0FSQllIaWVKMDZuazdBc0M1UEpCS1BSU0VRdnFEeVAxR0F3U0ZXaUt5b3FVRnhjakFzWEx1RFFvVVA0K09PUDhmYmJiLy9tZGZiU1N5L2h6Smt6QUlDQ2dnS3NXN2NPSzFhc3dLcFZxNjVxUFd6WnNzWG4vMTdyZW1nVTJMWjk4Q3hlL0hRM1JrNS9CdiszNEQ3ay9mZ2VIbm4yNHo5OUlaMDdkdzVuejU1RmZuNitSN1Zia2ExVkZlY2h2NlFheXNCUWhBUUhnSE5ZU0gyOW5vaU16YzNVaUNBSUlrc2JGeDBkL1JVaFpPYk4rTlQvOHNzdmtaR1I4YmNZZzBxbHd2dnZ2LytidWk3ZERQUGdTK2JNbVlPU2twSUduK2ZsNVlFUWdrV0xGbUh5NU1sbzE2N2Q3NW0zQi9yMzcvL2ZFeWRPWkFIUXd0VVRWZ1EzcFJ2Z0dCSGMzTDAwQ00vemNEZ2N4RzYzRXhIY0xCWUxUQ1lUVHA0OGlZS0NBdFRVMUVqOVBWaVd4Wmd4WXpCdzRNRGZORTZUeVlUZHUzZWpUWnMyQUlETXpFeXNXTEVDdDkxMjJ3MWZENDBDVzFGUkVVaEVjMHlaTkFZamI3OFhMeTkvRWNPNkpNRUpRRjk0RkhQdm40Q01qRXpjTnZraDdENVhCUUE0dXY1TkRNKzZGM2syQUhEaXhZZEc0dUZsWDdwNStVbE15aHFPZDcvWWlEbFRiMGRtUmlZKzIxM29ZbUNIdnNjOTQ0WWlJNk1YcGo3NkhQSnJIU0p0eE5aUGxtUDBnTDdJN0RzWUR5NTRCYWZQblVOQlFZSFVEcys3SjBGRmVUWEFxQkFhRkFDVldrdlVTZ1dvNEhTQm10TkpPSTVsbkU0bjAyUEFpUEJ2OXAxNVFhVlNmUW1nMjRGdjM4VHcvcjB3OExaN2NMalFKS2V1SG1OWTh1WWFPRzdRVFdNMEduSDI3Rm4wNkhFcER0aHF0V0xldkhubzM3OC9IbnZzTVRnY3J0R1l6V1k4OWRSVEdEcDBLQ1pObW9SVHAwNEJBTDc0NGdzOCt1aWpHREJnQUJZdlhveXNyQ3pNbVROSGJMcU10V3ZYWXVUSWtjakt5dkw1cFBRMWhsOSsrUVhqeDQvSDRNR0RzV1RKRXRoc05nQkFiVzB0WnMrZWpheXNMSXdmUHg2Ly9QS0x0TTlkZDkyRmtTTkhZczZjT1pLNkk4cW5uMzZLNGNPSFk4aVFJWGp0dGRmZ0hUVHVQWWJ2di84ZTc3MzNudlQ5NmRPbnNXREJBb2twTFZ1MkRFT0hEc1hZc1dPbE1aak5aa3lmUGgydnYvNDZoZ3daZ29rVEo2S29xQWdBOE1JTEwyRC8vdjNTOFZhdlhvM1ZxMWRmOXRyczJiTUhFeWRPUkdscEtlYk9uWXVKRXlkaTU4NmRBSUNubjM0YVR6enhCQ29xS2pCeDRrUk1uRGdSTE10ZTluanIxNi9INjYrL2poa3pacUJmdjM1WXVuU3BOQS9MbHkvSHFGR2p1aXhjdVBDRFhidDJ6ZjN3d3crakthVUJBRFNVVWhXbFZDa0lncExuZVViYzNNQkdEQVlEYW10clVWdGJTMncyRzNRNkhVNmZQZzJqMFlqczdHeHMyN1lOUjQ4ZVJXVmxKY3JLeWxCUVVJRGk0bUxVMWRWSnY1K1hsNGQ3N3JrSGdpQkk0NTA5ZXphT0hqM3FjUTRiTjI3RXFGR2p3RERNRmRmMjVkYkR1WFBuTUdIQ0JBd1lNQUNmZnZycEZkZmtoUXNYTUhQbVREend3QVBvMzc4L0ZpNWNDTWgwYzQrdDhzUUc5R2pmRXAxNmpjRFNWOTdCNlJMWGlWTGVnRmtqT3FIN3NHbjRidE42ekpwd0sxcjNtSUFTTzhXdWorZWpSWXMrT0dtbW9KVERJNE5TTUd6Mlc2NzlxdmVoUzRzV2FObTZFMmJNbTQ5Rjg1L0Uzbnd6K0xvVEdOQytKVVkvK0N3MnJGK04wVDNiWXRUanJuMU9yRnVHbGkzYVl2N3JLL0hLMGpsSWlvbEMxclFuTUgvK2ZFeWZQaDNqeG8zRDRNR0RrWm1aaVk0ZE95STFOUlVhQlFGUmFoQVpHVWxDUWtLSVZxc2xhcldhVVNxVkN1S3lLYXBYcmZsMjhPSUhSLy9Zc20wZmVxeWFvNDdTUGJSclNnczY5cUdsZFAzYWxYUll0MVRhZXNUamxGSktUNnhiUmx1MmFFdWZlZXQvZE8ybksyaW5sSlowMmJvVDlFYklxbFdyNk50dnZ5MjkvL0hISDJuLy92MXBXVmtaZFRnYzlNNDc3NlJyMTY2bGxGSzZZTUVDK3E5Ly9Zc0tna0FQSHo1TWUvVG9RYTFXSzMzOTlkZnBmLzd6SDNya3lCRTZkT2hReW5FYzdkV3JGNjJ0cmFVSER4NmtJMGVPcEhxOW51cjFlanBreUJCNjh1VEp5NDVCcDlQUjd0MjcwN05uejFLZTUrbkNoUXZwRzIrOFFTbWw5UDMzMzZlZmYvNDVwWlRTUTRjTzBYNzkra243bVV3bWFqUWFhWHA2T2pVWUROTG41OCtmcC8zNjlhTVdpNFZhTEJZNlpjb1Urc3N2djF4MkREVTFOYlIzNzk2VTR6aEtLYVZMbGl5aGE5YXNvWlJTK3ZycnI5T25uMzZhT3AxT2V2YnNXWnFabVVudGRqczFHQXcwSlNXRkhqaHdnRkpLNllvVksrajgrZk9sZVowNWM2WjAvR0hEaHRIQ3dzS3J1a1pEaGd5aHVibTVEVDQvY2VJRUhUTm16RlZmNjQ4Ly9wamVkdHR0VktmVFViUFpUQWNPSEVoLy9mVlhTaW1sTnB1TkdvMUdPbVBHRFByamp6OVNudWQvS2l3c25BQ2dHWUFtQUtJSUlXRUFnZ0FFTUF5akpvUW9DU0VLdFZyTkJBUUVFQUFrTEN5TXhNZkhJems1R1FFQkFXamV2RGt5TXpNeGVQQmdqQnMzRHRPblQ4ZjgrZlB4MEVNUFllREFnVGgrL0RoWWxnV2xGR1BHak1IT25UdEJLY1c1YytmUXQyOWZPSjFPRDh3WU4yNGN5c3JLR21ESnA1OStpdWVmZjk3ak03ZXFqUFQwZEJnTUJ1bnpqei8rR0dQSGpvWFpiRVpWVlJVeU16T1JuWjN0c2UrcVZhdnc5dHR2Uys5UG56Nk5ybDI3b3F5c0RGYXJGUk1uVG15Y3NjV2xqOGJXcmQvanZxd08yUC9OZXhnemVBZysrZmtjaE9JRDJISFdnSWtQUG8zYlI0N0Jvc2Z1Qmx0OUZMdFAxbDhWQ3huMTZISjgrT295dkxqc1pmUnBHWVNDZzd0UmFHVXdmZDRpakI0ekdXKzgrd0ZtanV2dGVnSjh2d0UwTEFGOHhSbmtGQmtRb0hEaTlQR2pVcHlhZDBpSHpXWURUeWtnOEI2cXA4dnJLVEFVVU14K1k5UERVeWVPWDdsay9zeWhHbnNadHUzT1JmNnZoMURQQitEQnA1L0JtSEgzWUdDWGhFdFBvZTgzQUJGSlNGQVlVV1VMUkdJRWcxMjc5dDBReHJaMjdWcU1HemZPNDdNMmJkb2dJU0VCYXJVYTNicDFRMFZGQlFEZ3A1OSt3b3daTTBBSVFmZnUzWkdjbkl3VEowNEFnRlIxTlNRa0JFcWxFa0ZCUVdCWkZwczNiMGFUSmsyd2R1MWFyRjI3RmpFeE1UaDA2TkJseDNENDhHRjA2TkFCYmRxMEFjTXdXTEJnQWNhUEh3OEFtREZqQmhJU0V2RDIyMjlqNTg2ZHFLbXBrZllUZjk4N0lEUXVMZzRxbFFydnZQTU9UcDgralpVclZ6WlFNYnpIRUIwZGpTNWR1bUQzN3QxZ1dSYTdkKy9HcUZHdVpKQWZmdmdCSVNFaFdMbHlKUTRjT0FDR1lYRCsvSGxwREQxNzlnUUFaR1Jrb0tyS3BXa01IRGdRT1RrNTBPbDBPSG55Sk9MaTRxNUhXNzlybHU3ZHV5TThQQnhCUVVGbzM3NDlLaXNyQVFBQkFRRUlDUW1SNnFzeERETzRXYk5tYjN6enpUZFQzS3BwZ0tpYUFoQlZVd1VBUnN5ZUlZUVF0eU9OMk8xMjhEd1B1OTB1cWFaNnZSNTFkWFZTWUx2UmFFUnViaTVPblRvRnU5Mk9HVE5tNFBQUFB3Y0FmUFhWVjdqbm5uczg2cjNsNXVZaUpDUUVDUWtKVjNXdWphMEhBT2pjdVRPQ2dvSVFHeHVMWWNPR2VURC94dTZMaElRRUpDUWtRS3ZWNHE2Nzdtb00yRmhzVy9NWjloY3llR3p4TW16YnN4ZTNkMURobGRmZWQzbFFBR2cwcnVhdEt2Y3J4L0x1ZlFYSUdHc0RDZmVLbDJFNUJ3QUZOQnFYZzdaRmVoOWs5ZTNzb3B3bUN6aWJIaGZPbjBkaFlSSENrMUlSRzZLOFhQY29Ra0VJcFlKVU84M3A1QmllNTVuaXZPMEp2VnEyZUMxQXEzMERRSUpTbzRZQ0FNZXo0Snc4QUFXVW1vWk9ZcnZORGlYRG82YXlFcFdWMWVpU05RVlp2ZHJlRUZ0aWVIajRaYXVoTWd3anFRc2N4MEdqMFVqZmFiWGFLNm8vTnBzTm9hR2gwaloyN0ZqMDZkUG5zbVBnT0E1cXRWcDZIeElTSXBYRmVlMjExN0IrL1hyMDZORURJMGFNdUtyekRBc0x3OGFORzVHYW1vcHZ2dmtHdzRZTlExbFoyUlhuWWVyVXFmajIyMit4ZmZ0MkRCbzBTQW95dGRsc2lJeU1sTTVwN3R5NVB1ZFFQbmRLcFJMang0L0g5OTkvajNYcjF1R3V1Kzc2MDIxM2hCQmNJWTg3UWExV3Z6Uno1c3huTm0zYWxDaXFwaktBRTRHTmNkdVRJUWdDY1FmbkVrRVFpTVBoOEhBcTZQVjY2ZDZ5V0N3b0xDeVV3SzF2Mzc3SXo4L0h1WFBuc0czYk5reWFOTWxqTUd2V3JNR0VDUk91K3p5bzFXcklTNnRkelgyaDBXZ2FBellsanYrNEVrOHRlQlo3VCthanRMUVFlclByeGxFMDY0Wk8wU3I4c081L0tDd3R4YW92TndDQkxkR3RZd3ppWStJQTFPR1hnOW5JUDdrTEY2cjVLdzY4WlpjTVJDaFliUHBtSGNwSzgvRFl1RXowdnVkRm1Fd21ORW0rQlpiYUtnaWg4YmlsWlRNb0JSWUJha1dET0RWM3hWdkNzaXdVaEFCVUlDekxFWjduR1VHZ3pOQ0hYKzNYcEhubWg1bnR3MmJ1MnJnRzU0cEw4ZTJxTmJDUUVHUjBhWTFiT25SRUlDeFl2Mm9kQ3M4ZnhjbThPbWw4ZlhyM0JLZlhJU0VqQ3c4L09BMXQ0c09Ra2RIbEQxL1lhOWFzd1IxMzNIRk5UL3N0VzdaSWJ2YnM3R3gwN05qeGl2dFVWVlZoekpneG1EQmhBbHEzYnUyeFlIeU5vWFBuempoNjlDajBlcjMwUHg5ODhJSGt0UjAzYmh5NmQrOHVxUWxYa2wyN2R1SGxsMS9HYmJmZGhsZGVlUVZ0MjdiRndZTUhyemdQM2J0M1IybHBLVmF1WElrcFU2WkluMmRrWklCbFdVeVlNQUVUSmt4QVFrTENWUVdmVHBvMENldlhyOGZodzRldnlYaXUxV3BSVjFmM3A0QmZlbm82amg0OU9xTlhyMTR2RlJRVTlQRGxXQUNnRUFTQkVkbWI2RFdsbE1LWFUwSE0xckhaYkZJSi9ieThQSnc5ZXhhVEprM0NvNDgraXFGRGgzcFVDZUU0RHJ0MjdjTFFvVU92eTNrVkZoYUNVZ3FIdzRIZHUzZWpRNGNPVjF3UE9wMU9zamYvOU5OUGpjV3hNWGpzcGYraWV2NUN6QmczQkJ3Rm9sdDJ3Y3N2ejRGUzNRVExYdjhYWnM1N0hnUDdyWUk2ckNtZWVlVnRwSVVDR0h3blJxVjlnK1VQMzRaUFcvZERpNlpoMEYzaEpEVEovZkhLMGdmeDFMOFhvZSs3SEtLYWQ4VnpDNmZnOU9uVGlPNDRCSm10TCtEbmJ6NEQ2K1NoMElhZ1pZb0dBWEI2eDZoSjhXbFFLQWdSQkNJSVBBSEFESjc0eU5UWC8rL2had2pScGl4NCtYVVVQVElQSTI3dEIwVkFCTzViK2hxR3R0SUNHSW9sRHc3QnN4OCtqUjlYeDZKOXdxV3FvOE1mZmg2UGx6NkJOeDZmZ3VVOEVOMnFLMTdxUHhsQStCKzJZRm1XeFo0OWV5U0QrTlhJMHFWTE1YUG1UR3phdEFrVkZSVll1blRwRlcvbzhlUEg0L1RwMDhqS3lrSk1UQXdVQ29YazVtOXNEQWtKQ1pnN2R5NG1USmlBbUpnWUFKRGM3ak5tek1EQ2hRc1JHeHVMMk5oWUNJSUFnOEdBc0xBd2pCczNEdlgxOVRDWlRCZzFhaFNDZ29Ld1pjc1daR1ptWXZYcTFSZ3pab3pyd2FsUVNEZkk1ZWFCRUlLSkV5ZGl5NVl0U0VtNVZOZHo0Y0tGZVBUUlJ6RjI3RmhRU3RHdVhidXI4cWFLUFFOYXRXb0ZwZkxxd3p1blRwMktPWFBtb0huejVoZzllalNtVHAxNjNkZkQ4ODgvangwN2RxQzJ0aGJIamgzRFN5KzloUGZmZngrdFc3ZkcxS2xUTVdyVXFJRnhjWEhOQmcwYTlOYlBQLys4MFoyR0phL3N6QU1BcFZSd3gyNUNvVkJRa1JDbzFXb2FIeDhQczltTVU2ZE9TV3p4czg4K1EvdjI3VEZ5NUVnSWdvQTJiZHFndUxnWTk5NTdyOGY0ZnY3NVovVHQyOWVEeVFQQWhnMGI4TnBycjhGa01zSHBkT0xubjMvR0k0ODhna21USmpXNkhrU1FHanQyTFBSNlBYcjA2Q0daRHk2M0hod09CKzY5OTE0cDlPYUtaWXRZaHdsV0I0UHdVSy9PMDRJVDlYbzlna09qb2ZaWUJ3TDA5WG9FUjBaZVUvU3Z3RHFnTjlzQUJqaWJrK01SemxGZFhZWGFlaDBjTmx1RGJBSTVxTW15Q0pocGQwOVZMUC9QZnhkRWh3Y3Rna2Nnc210ODJ1QndhTlNlaE5WbTBRUEtZR2g5cUtTc3d3S2pqVWQwK0I5ZmF2bnMyYk00Y3VRSTdyNzc3bXZldDY2dURxR2hvVkNwVkZlOWo4MW1BOGR4SG1Xa3J6UUdsbVZoTnBzUkdSblpZSUhaYkRhRWgxOGI4SnRNSmhCQ0VCd2NmRjNtd1dBd1FLMVcvKzQ4eUNsVHBqU0l1OXU0Y2FPSDUwL3NrWEdsY3k0dUxzWWpqenppOFZuNzl1MnhZc1dLM3p5K21wb2FhTFZhTUF5RGYvM3JYODdFeE1UWDNudnZ2WTlPblRwbGQ2ZGtjZTdONmE3ekpoQkNCSGtoUzQxR0E3VmFUY1hhYm1McEk3Rm9aVlJVRk9MajQyRTBHcEdUazROVnExWjVuT3VubjM2S1BuMzZvRldyNnhmUUxpYnJ5ME5CR2xzUDJkblpXTGh3SWI3Nzdqdm85WHBFUmtiZVhQWFlkRG9kY3J4QVRYUVNpTTFXNU4yalpLQW1yNXZHVkZaV0prVkZSVDFEQ0prQnYvamxieXFDSU9EdXUrOUcwNlpOd2ZNOFRwMDZoYSsvL2hvaElTRXJkK3pZOGVIdzRjTkxDU0VPTDNEanZjQk5LajB1Z3B1OEc1WUlicVdscFNnb0tNQ3NXYlBRcDA4ZnRHL2YvcWJKTHhXQmJjT0dEWmNZL2MwQ2JISlFLeWtwOFFBMWVjTVZIMHhOVEkxaUJFRWdKcE9wbTFhclhlaXZtZWFYZndxNFpXZG53MjYzSXowOVhYSWc4VHkvSlRjMzk3MTI3ZHFkQnVDUXNUZW51N2tNNys2eElJaU5ZK1RnSnBZY0Y3MlhZZzIzbEpRVXFXRGx6UUp1VnFzVmhZV0ZIa0hRTndXdzZmVjZaR2RuK3dRMWthbjVVajlsV1FTRVVzclliTFpoYXJWNkVmeVZiZjNpRjFCS0Q1ZVhsNytUbUppNDF3dmNPRGU0U2N6TlhYNjhBYmcxcHBhSzRKYVdsbmJOWm9jYklYOTZFcnpCWVBESjFIUTZuYzhLSFY3cXB3UnFEb2Rqc2xLcFhBU2dsWDlKKzhVdnJrcTlDUWtKa2JXMXRXOUZSMGR2cHBReXhCVTRSaWlsSE54T0JjR2RVdUFtT1JRdXh3UDFBWlMrZmdOcGFXbS9LUzNxYnd0c0pwUEpwMDFOQkxYTHFaOXlVR05aOW1HRlFyRVlRSXgvT2Z2Rkx4N0FreElWRmJWWXI5Y0hoNGVIZitNdWQwUzhOVFlSM0p4T3AwOXdhd3pVeEsxRGh3NDNWYU1ZNXMvNllZdkYwcWlqd0VjVFk5SVlxSEVjOTVSQ29WanVCN1hHN1EvMzNYZmZUVFdtd3NKQy9OVWFkYi84OHN2bzNiczNoZzRkS3FVYVRaNDhHWk1uVDhiMDZkT3YrKy90Mzc4ZjE3SG5iMHhZV05nU3M5bDhMd0N0TEpoWG5xa2daU2s0blU3aXJscEpSN1FBQUNBQVNVUkJWTk1tSmREYmJEYVBRTjY2dWpvcGVUNC9QeDg1T1Rtd1dDdzRlL2FzbE5IaExmUG16Wk15WlJxVHpaczNTeGtPZnpsZ3M5dnQxK0w5SlBJT1VxSk43WjEzM2xGeEhQY3N3ekF2d3BWUzRoY2Z3dk04amh3NWNsT042Y1VYWDRURllwSGVHNDFHeko0OSs2YWR3NU1uVDJMTGxpMzQ2YWVmc0czYk5uVHExQWtxbFFxdnZQSUtubnZ1dWVzK3Z6VTFOVmkrZlBrMWhlejRrb3NYTCtLNTU1NFQzd1lFQlFVdHJLeXNmRWlqMFFRMUFtNEtRUkNJdlB5UnU5S3VCRzRXaXdWR283RlJjSHZpaVNjOFVxM2tjdXJVS2FsZ1FtTlNXVmtwRlNmNFM2bWlITWRkMXZ2cFpWTVRjejRoTDhmeTY2Ky9CcWVucHk5aUdPYkp2eU1ZSFRod0FNMmJOOGYrL2ZzUkZ4ZUh2bjM3U2psMVpyTVoyN2R2QndEMDZkTUgwZEhSMG43bDVlWFl0MjhmSWlNak1YRGdRSjlWRms2ZE9nV05SaU1WRWF5dHJjWE9uVHNSR0JpSWZ2MzZlYWdUUjQ4ZVJWNWVIdnIxNjRmYzNGemNldXV0a2xxeWI5OCtsSmVYbzNmdjNraE12TlFPb3F5c0RQdjI3VU5vYUNnR0Roem9rZVlGdUxJaWFtcHEwTDU5ZXdCQVRrNE96cDQ5aTkyN2QyUGJ0bTBBZ0w1OSswcnhaOFhGeFRodzRBQ1NrNVBScTFjdkNRZ3ZYTGlBbUpnWTdOKy9INm1wcWVqU3Bjc1Z4MEFweGQ2OWUxRlJVWUdlUFhzaU9UbFoyaWNuSndkUlVWRW9MUzFGYm00dSt2WHJoOFRFUk96Y3VST0hEaDFDUkVRRTl1M2JCN1ZhTGMxRDA2Wk5ZVEtaR21XbGh3NGRRbEpTRW5yMTZnVkNDSTRkTzRiVTFGUm90VnFjUG4wYW5UcDF3b1VMRnhBWUdPaVJZN2x1M1RxTUhUdjJpdXZoK1BIamlJNk9SbEpTRWdCSWViT0RCZzNDc1dQSGNQVG9VZXphdFVzS2NCMDZkQ2kwV3UzYzFxMWJxNGNORy9iUnl5Ky9ySGVybEtMZHplbFdTM2wzcVh4UkxZWEQ0U0NDSUZDajBRaTFXbzNFeEVRUFZaUVFncEtTRWdRRUJIalkyOFRyNTZ0czA5R2pSNUdibTR0dTNicDV4TUFKZ29BZE8zYWd2cjRlUTRZTWtZNzN5eSsvb0UyYk5nZ0xDd1BMc2podzRJQjBMZXgyTzdadDJ3YWxVb2wyN2RyZFdNWkdLZlVBTlhreXUzZlRGVmx2QWc5UU8zLytmRVI2ZXZyU3Z5dW9BYTR5T2s4KytTVDBlajJXTFZzbVpRUG9kRHJjZHR0dEtDMHRSV0ZoSVVhUEhvM2EybG9Bd0xGanh6QnAwaVRvOVhwczNyd1pEenp3UUlQamJ0bXlCZlBuejVmQThPTEZpNWc0Y2FLVS9EMW16QmdwTFdYMTZ0VjQrdW1uWVRRYXNXalJJano5OU5NZUtzWFhYMzhObzlHSUtWT21JRHM3R3dCdy9QaHgzSDMzM1RBYWpkaTVjeWNtVDU3Y3dEYXpidDA2andUbXVybzZsSmFXUWhBRUZCVVZvYWlvU0xUellPZk9uWGpnZ1FkZ3NWanc3cnZ2U29Hc3BhV2xtRFZyRnQ1NDR3M29kRHJNbWpVTHUzYnR1dUlZNXMyYmh5KysrQUlta3dsVHAwNzFLRlcwYXRVcVRKOCtIZSsrK3k1eWNuSlFYKzhxNmxCU1VvS2FtaHJZYkRZVUZSV2h0TFQwaXRkdjU4NmR1TysrKzJDeFdQRFJSeDlKa2ZJYk4yN0VrU05IY1Bic1dUenh4Qk1BZ1BmZmY5OURQYU9VNHZ2dnY4ZnR0OTkreGZWdy92eDVQUC84ODlML2JkMjZGWjkvL2prWWhrRjFkVFVxS3l2QnNxdzByNkt3TER2TDRYQThQSEhpeEdnQVl2RktGUUNsSUFnS0FBcEtLV0ZaVmxKTFRTWVRxcXFxWUxGWVVGMWRqWnljSEEvbVZsVlZoYTFidDZKZHUzYkl5Y2tCcFJSbnpwekIrUEhqVVYxZGpjOC8vOXhqN2w1OTlWVzgvdnJyc0ZxdGVPU1JSN0JqeHc3cHV3MGJOdURvMGFNNGZmbzB4b3daSTdINzVjdVhTeVlNbzlHSUo1OThVZ0xDcVZPbll2djI3Y2pQejNkbGZ6Uld0dWlQMkU2ZlBvMXZ2LzBXcjd6eUN1Yk5tNGVwVTZkaTVNaVI2Tk9uRHpwMTZvVFUxRlFrSlNVaE5qWVc0ZUhoSkNnb2lHZzBHa2FwVkNvVUNvV3lzTEF3VGhDRU4rbmZYSVlQSDA2enM3TXBwWlNXbHBiU0RoMDZVS2ZUU1d0cmErbXhZOGNvcFpTeUxFdG56SmhCdDJ6WlFpbWw5UDc3NzZlYk5tMmk3dExRZE1HQ0JWU24wMUdqMFVqVDB0TG8xcTFiNlpBaFEyaFZWWlgwTzZXbHBmVE1tVFBTOGJLeXN1anAwNmNwcFpUMjc5OWZHa041ZVRudDNyMDdwWlRTNDhlUDB4RWpSbEJYTldwS3Yvbm1HL3JVVTA5UlNpbjk5Tk5QNmV6WnM2blQ2WlMrczlsczB1OEpna0N6c3JLb1RxZnpPTithbWhyYXRXdlhCdk13ZVBCZ2FRd1dpNFYyN3R5Wk9od09tcE9UUXdjTkdpU040WU1QUHFEUFBmZmNaY2R3NXN3WmV1dXR0MUt4UitldVhidm8rUEhqcGQrYVAzOCtmZjc1NTMxZWowMmJOdEZaczJiNS9NNW9OTktPSFR0NmZEWnExQ2g2K1BCaFNpbWxITWZSbmoxNzB2ejhmUHJkZDkvUmQ5NTVoMzc0NFlkMDRNQ0J0TEt5a280ZE85WmpqbzRjT2RMZ3R4cGJEM2E3bldaa1pORGk0bUpLS2FWMzNua24zYkZqeDJWTEp4a01CcHFXbGtZNWpxTjJ1LzJEMmJOblp3Qm9BU0FCUUJTQVVFSklJTU13R2dCS2htRVVHbzJHSVlTUXdNQkFFaHNiaTRTRUJEQU1nMDZkT3FGUG56NFlPWElrSmsrZWpDWk5tbURGaWhYNDl0dHZwUnA1SDMvOHNYVC85K3ZYRC9uNSthaXNyRVJHUmdic2Rqc29wVGg0OENDbVRKa2lsUzFhdEdpUnRNLzA2ZE94ZnYxNlVFb3hkdXhZbkRoeEFwUlMxTlRVb0d2WHJxQ1U0cGRmZnNHSUVTTWdzc3kzM25ycnhxbWk1ODZkdzRVTEZ5VDFVOTd6VTdTcE5SSjhLekcxNU9Ua1JZU1EyZmdIaUppdjJMUnBVekFNQTZQUmlKQ1FFS3hldlJvclZxeEFhR2dvY25KeXBDZDdZV0docEY0U1F2RHZmLzhiZ012emJMZmJNWC8rZlBUczJWUEs3d1JjcFdPZWYvNTVXQ3dXQkFjSG82S2lBanpQUzZ4SVBKN2MxcE9ibTR2eThuS01IRGxTc3VHMWJldXFkako1OG1RVUZSVmgyTEJoU0UxTnhiUnAweEFRY01uOGVlVElFYVNrcEZ4VjNCUFA4OGpQejhkVFR6M2xNVjR4K1Y2cjFVcnFlWEJ3c0ZUSnBMRXhGQlFVb0czYnRwSjZucGFXSnRYakYrVjZwUVJkdkhoUlVyMlVTaVhhdEdtRHdzSkNwS2VuWStmT25YQTRISmc2ZFNvT0hqd0lwVkxwTVVlTkpYbjdXZzhSRVJHWU9uVXFWcTFhaGNtVEo2T21wZ2I5Ky9lL3FyWGwzaDRZTjI0Yzl1N2QrOEdKRXlmcXZiVXJkODRvTCthWDhqeFBXWllWKy8vQlpyTkphbWg1ZVRsaVkyTlJYVjBObFVvRmhVS0IwNmRQUytXazVPc29QejhmRm90RlVyY0ZRZkJZRTNMelJXcHFxa2UxRjE5U1ZsYm0wU05WcFZMZEdHREx6OC8zQ1dvK0tuUTBDT2tRYldvdFdyVDR4NENhWEl4R0kxaVdSWEJ3TUxaczJRS2owWWd2djNSVkpYNzAwVWVsLzR1T2prWkZSWVdVRUw1bnp4NTA3OTdkNVNGaUdHemV2Qm56NXMzRGUrKzlKK1Vycmw2OUdvbUppVml5WkFrQWVLZy9VVkZScUt5czlMQ2ZpWiszYmR2V1o0WFp2THc4UFB6d3czajIyV2R4N05neFBQamdnOWkyYlJ1aW9xSXVlOU1TUWp5cXN3S0FRcUZBZUhnNFB2endRNmtza2lpaSt1MUxHaHREVEV5TXh3MVNWbGJtQWZMWFU4VGZFcHZ1aUwvVnZIbHpWRlpXSWpBd0VJTUdEY0xpeFlzOUdxWllMQlljUDM1Y2VpaGRhVDBBcmlUOEVTTkdnR1ZaVEpzMnpjT3U2bXRldlVXdFZqL1FwazBiWWRTb1VlKy8rT0tMYUF6Y1JBRGlPRTRLQlJFZEFZUVFYTHg0RWQyNmRVTnRiUzBVQ29Ya1FEaCsvRGg2OSs0dEhVOWNROUhSMGRpMGFaTlBPN0I4ek9YbDVjak16QlRIS2ozQTVDYU9xS2lvQnVyOEh3NXNKU1VsVXRNVmI2Ym1iVlB6RmRMeHpqdnZxTnlPZ2puL0pFQjc3NzMzTUdYS0ZLeGF0UW9qUm95QVNxVkNiR3lzVkErcnVMZ1l1M2J0a2tyc1RKczJUZktrNWVibTRxdXZ2c0tHRFJ2Z2REcWhWcXVSa0pDQXQ5NTZDN2ZmZmp2YXRXdUgvdjM3SXlZbUJsdTNic1dPSFR0dzRzUUpuRGx6UnJLeFRabzBDUXNYTHNTRER6N29rWVBYdDI5ZnZQTEtLM2oxMVZmUnYzOS83Tml4QTBsSlNaZzhlVEtPSERtQ2JkdTJZYzZjT2FpcHFZRmFyWmFldm1MbGlPWExsemM0MS9Ed2NDZ1VDbnoxMVZkbzBxUUoyclZyaDVpWUdEend3QU9ZTTJjTzVzMmJoN3E2T216WnNnWC8vZTkvTHp0dmpZMmhhOWV1SUlUZzdiZmZSa1pHQnBZdFc5YWdTc1cxZXBzM2JOZ0F1OTBPanVQdzNYZmZJVFEwRklNR0RjTDk5OStQSlV1VzRNa25uOFRldlhzUkZoYUd0TFEwRUVJUUdCaUl0bTNiSWprNUdVVkZSUjc5QURadjNvemh3NGY3dk5sOXJRZkExVTFxOE9EQjJMQmhBL2J0OHl5QW1wU1VoT0xpWXZ6d3d3OElDQWlRQU1KYkZBckZRd3NYTG5UdTNMbnovZjM3OXpld2k3cmY4NElnU0hGdWxGTGljRGdvSVFUeXB1TjZ2VjRDdHRUVVZMejc3cnVJakl5RXpXWkRjWEV4QUtCMTY5Wm8zcnc1RmkxYWhQSGp4K1BZc1dPd1dDeVlPM2V1TkE5ZHUzYUZ5V1RDL3YzN3NYanhZZ0JBMTY1ZDhmbm5uOFBoY09DSEgzNlF4cGVabVluLys3Ly93M3Z2dllkV3JWcGh6Wm8xVUN4ZHV2UVB1em1ycXFwd3p0MmpRTjdNMkdBd2VCU0k5RTZUa3NlcHJWKy9mZ25ETUF2K1NhRDJ4UmRmWU5Tb1VUaDQ4Q0JhdEdpQnVYUG5RcVZTSVRFeEVZbUppZGkzYngvaTQrTXhZY0lFUkVWRklURXhFYTFhdFVKU1VwS3JGcFZTaVJkZWVFSHlMQ29VQ25UdjNoMUJRVUhvMGFNSHpwdzVnL1QwZExScjF3NHFsUXFIRGgxQ1dsb2FoZzRkaW9TRUJNVEV4Q0FqSXdOV3F4VkhqaHhCdDI3ZGNPalFJVXlmUGgwS2hRSzMzWFliY25OemNmVG9VYlJwMHdZVEprd0F3ekJJVDA5SFVGQVFkdTdjQ1l2RmdzV0xGMHU5S3RldFc0Y21UWnBJSGpxNU1BeURYcjE2WWQrK2ZhaW9xRUJhV2hwQ1EwT2xpcktpK2pacjFpeUpxUVFHQm5yVTZZcUxpME9MRmkwYUhRTWhCQ05IamtSMmRqYU9IeitPaVJNbk5tZ3kwckpsUzhUR3h2cThKbEZSVVEwOGQ5dTNiNGZGWWtHM2J0MWdNQmpnZERxUm5wNk85UFIwaElXRllmdjI3WWlLaXNLenp6NHJsZlNKaUloQXQyN2RFQjBkamVqb2FHUm1aa3FlNk9lZWV3NlBQLzU0Z3lqK3h0YURuRHcwYjk0Y0F3WU04TmhQcTlXaVk4ZU8yTE5uRDNRNkhUcDE2b1NBZ0FBb0ZBcDA2OVpOK3Ird3NEQjA3Tmd4NDg0Nzc3Uy85TkpMcDJXTVQwUTRLcXFjY2lhblZDcUo2TlFLQ1FueHFLUkNLVVZrWkNTYU5XdUdFeWRPSUNrcENWbFpXVWhMUzROV3EwVldWaGFxcTZ0eDhPQkJ4TWJHNHQ1Nzc1WFU3ZDY5ZXlNdkx3OWxaV1Y0OXRsbkplOTF0MjdkVUZwYWlweWNIRXlhTkFteHNiSG8ycldyVk9ycThPSERxS3FxUW54OC9CK1hLNnJUNlpDZG5lM0Ixcnl6Q3J6RE91UnhhbUx3clR0T3pTOSs4Y3NORUxQWi9PK1FrSkQvQWJDNUs0TTRBTENRVlFZUmMwdVZTaVYxTTJJcTVwV0tTZk1SRVJGU1htbHljakpTVWxLUWxwWjJ3NUxtL3hCVjFHYXpTUjNhS3lvcVVGdGJLN1hIdTV6NnlmTTg1R2xTRE1NczlpODF2L2pseGtsd2NQQmNuVTVuallpSVdPZG1aaFR1V0RhdjlDdnFJblhFbGFORkNHVVlCZ3pEZ0JBQzhXK2xVZ21WU2dWM2NqMDZkdXo0dTJ2ay9TbkFSaW5GK2ZQblVWaFk2S0YreXF0MGlCNVFlWkZJdDZ1V0VSUGEzYm1mL293Q3Yvamx4a3BBZUhqNFkxVlZWWmE0dUxpdDFKVmM2bTF2Zzd1SGd1QjBPa1hQcUFoeUlJUklkalp4RXdGT285RWdQVDNkWnhPWG14clk1S0FtTmpJV0hRVVdpK1d5bFc4RlFTQTJtMjJZdTBxSFAvZlRMMzc1Y3lRbUppWm1aa0ZCZ2JGRml4WUh2SmdiQlVBRlFSQzlvNUFCR2hHTFY0cWJITlJFWUFzSUNKQ2FLdjhsZ0syd3NCQVhMMTVFV1ZtWlQwZUIzVzV2a0ZVZ0MrdGdUQ1pUTjNjOU5YL3BJYi80NVU4VVFraEtjbkx5UThlUEg5ZDM3dHc1eDgzY1JKV1VpbjBSUk5ZR21ZTkJWRVc5R1p0U3FZUmFyWVphclpiNm12NVJjdDI4b2xWVlZaSmRyYnk4M0tkZHJURVBxRmpPT3pRMDlDVkN5RUQvc3ZLTFgyNEtjR3NhRXhNVDJxbFRwOU5mZi8yMXpRMWVrcWNVUG1xMnVWVlM4Vy81NTVCL0xvYSt5SHRjWEZmR2RqMWFoNW5OWnB3NWMwWmlhMklPcUhlYlBJZkQ0ZUVCRmRYUHUrNjZTd0hnbWZyNmVuODViNy80NWVhUzRabVptVFVwS1NtdlhiaHdRWkF4TjFmNmdmc1A5eXZjV1FuRW5VSUgrZVowT3FYTlhUVUU3ZHExKzBQQVRmbDdhejVSU3BHWGw0Zmk0bUpVVkZRMHNLczFWdExiN1N3Z0FKaGx5NVl0Y0RxZE42VHhpdGhUMGJ2cXhKWEVZckVnTUZBTFFoai9VdmZMUDQyNTNiMTE2OWJxbEpTVXo5MDRKc2pCalJBUnh3VEs4enpoT0k2NmFSc1Z2YVJ5RmRYYlk5cStmZnZyN2t4UUJnVUYvcTRENU9YbG9iYTJCbnE5RG1hekNWYXJCWGE3cEhMS0tuUTRpUmlkTFBlQTF0YldUSFU3QzI2SThMd1RUaWVQYXoxdm5VNkh5TWlJYStvNWFUQVlFUklTN0RPUzNDOSsrU3RKVUZEZ25QejhDNVczM0pLeUZZQTNjNVArVHhBRWdlZDVPSjFPS0JRTTRUaU9LcFZLaWFIWjdUWllyUmFZelNibzlUclUxdGFnb3FMOHVyYnVBd0RsdGR5bzNsSldWb2F5c25KVVY5ZWd2bDRIZzhFSXM3bEJqd0kzdUVtZ1J0eFVsZFRXMXZRTkNBaDRCamV3THB6cmFTSGd0NXkzYUFDOVdqR1pUQWdMQzhYdm1XTy8rT1VtRVdWOGZQekR4NDhmcSt6Y3Vjc3hYOHpOL1VvRVFRRFA4NVRqbkdBWXppdmtRd21WU2cyMVdnT05KZ0JhYlNDQ2dvSVJHaHJhSUNmNGR3MjJzV3FYVjVMUzhqSWNQM3NCT25kR2djRndLYW5kYkxiQWJMV0J2UVJzSWxzanZDQVFLbENtcUtnd0lTZ29hRDZBbEJ0THF4a3B6dVphVlc1NWN1OGZ0YzhmSWZwamU2Qm9sb0dRcUJzVEZrZzVPNncxOVZCR1JFT2pWUU53b21Mckp0aHNnS3BwR3lSbHRQbGIzT20vWlY1dGhUbXdPS01SblJMWHlIL1lVYlhqTUNKdjdRZVZtK2c3aWs2ajdGZytBSUxZUWFNUkhNcGN4N0ZFSURvbDRXcDN1YVYxNjliM3IxeTVzbnphdEdubEFNUkFYZkdWaXA1U251ZmhEdHFWUWtBdWVVY3Q3dEFQdGJzVGxoYkJ3VUVJQ3d1N3BxWXdqdEpjR0l4YXhMWkxhbkJPeW10V2s2Z1ZpejdZZ1AxRjVTQjFaU2l2cVVmWHVGQW9MU1pZTEdhVWxKV2hzTjRNd3RrZ0NFQ0lFc1RwZE1MSmNjVEJPUW5nc3F1OWsydCsrcm40K0NIa1QxaVFsT0thMVVNeFArNWE5dnN0Ky93UlV2TFpjZ1JOL2d4aHZRUC84TitxMi9ZWkRyL3lKYlROV3NCUlZvQm04OTlGbS81SlVBVUV3bkp1Tjg0ZHFFS3p6SFovQzJEN0xmTnFPTEFHaGZwTXhLYU9iSXpuSS8rOXp4RFk5MVpvM0VTZlVXcWcxZ2JnNHRzdlFKMStHMExERzY2bnl1OC9Sc0R0YVFpTDhSeEx3ZnRMb2V6MUdKSTZSRGJZeDN6aVI1UVlPaU0yTmZGYU5KNEI0OGFOSzV3MmJkcGJNdFlteUZnYjRJcHpnMXNscFF6REVJV0NvUTZIQWtxbGF4TXpFZFRxUzIzK2dvT0QwYkZqeDZzbUFwYmptM0gyVkJMaTA1bzFPS2RyQnphbzBUK3REWG8yRFVGaG9ScTc5cFppN3prZHVrY29ZTmJYNFdLZEZZbmhnZUR0UUVWMUhURXJsVkFJVG5DdUNHVkNBTVpTbS8vUXlEZjJ6TXpKVEVYSEc1eGJJRGRpL2pZMWx2bkQ5d0VFVURCdzZxdkEwU0FFUm5oNmpTZ0VFREN3VjVWRDBJUWpNUHpTWXJaWGxZSlhoaUlvS3ZUU0Rxd2RvQVRPdW1vSW1qQUVoSHFtdERpTmRiQVpIUWlNaTRkQzlkdEJtQy9kai8yTFY2TEgybzFvMGl3VUVHeXcxbk5nR0EzaUI0OUFNRk9PL0FLTGova1E0S2lwQnNjcEVKUVFBOCtISFE5YmVRVUVWVEFDWThJOXZxTU9LOHhWdGRERXhFR3QxZHhrOCtyN25BalBnVG9GVUtzQk5nc1FIQmZoT1Q1bkRQcCsreG1JYkk2MHpkcWhlYk4ycVB4b0NZQ0dhNWM2bldqLzNDb1FaY1BQemFjT1FObHFPb2dRRGlpVjBqaW80RVQ4N2ZNUUwvdnMwakE0V01zcndFVEdJU0JRMDJDdDhFYkhmVlVWVllWeFRlTFdBK0I5cWFTQ0lBaUVFT3AwT3NFd0JBNGJKWVF3MUtYQktLRlV1dE9zVkdvRWFOUlFPT3pRS0xVSURRMTEyOXNFMkNyTFFRTWlQYTREQUhDNktuQWtCRVRnUUoyOE5CL3ljMUplcXplaW9xSWVhazZQa3FwSzFOWFZnemhaMk13bVdOUXExT29NSUFvQ2NDNjdtb0pRY0N3TEVFcW9xNlk2c1ZoTS9aVE91dmtjbzBTd2tvQ1FHdzFzbHdEdXR6QzJhOW52dCt3REFPZWZtWWlMdVNvd1NpV0V5b3NJdm4waCtzNGQ3ZnJTZUFycit6K0RwR0V4cUR5bEE4dzZkUGprSnpSTE11TFFmVk5SWjQyRXlsSUdrallSdDc0Nkd5b0dvRTRPaFcvTlI3RktBWHZCR2NUUFhvSHVkN2tLRWhiKzUxR2MzRlNDaU9ZUk1GNm9ROFozR3hFclBkd2RPUG5rVEtnR3pVSzdyQzVYWGhzL3JJZXErd1FrTkhlckU0cEFCTW55UndnVlFIbkJhejZxc1hQd2VMQXhMYUdDQVNaZEtQcXUraENSTVJwUVV6SDJUTGtIOXRDV1VBczYyQk1HSXV0VlYwaysvZTdQc1dmUkp3aHRtd0o3MlVVa1Ava0oyZzFzZnBQTWErUG5CSUdIOGVlVjJIN2dLekNXTXFEMW5SajR4aXdvQVZTdSt5OU9mYmtEK21OMUdIeG1MeUs5c1pyakFIaXVKL2JzejlqOS9FZXduUDRWcmQvZWk3YTNObkdwWk1jMllkL0xYOENTVXdKUzhEaktQOUVpK3JaSDBHVnlQd0JsT0hEM2s5QVZua2ZJN1l2Ui8rbExwZHJ0dVh1d2U5WWlNRTFhZ1MzTVE5eERMNkhiWFgxOXJaV0g5eHpJTHV6WEsrMllTeFdsQWtBRVVTMTF1MGtKejdKdzJ1MVVTUWpzT2gzNDZIZzNhMU9DNk10UTlRdUxXcFVkUWVwZ1hGVCtpSUIzWGtDZ3ZReDV6endITnJRWlVIOFJRVVBub3ZjVDQwQWc0T0pyczNGeVl5SENZalhnV0FkSW0yVDNmSGllMHpVQm05VnFsY0k2YW12cm9LK3Z4dkhDU3NRRmg3cmFjOW5zSUx3QW85RUdvOE5KRkZRQUZTaWhEQWhEd0l4YnNpTDhrVFU3bjZxdjB5ZE1HejhZS2VvL1F4SDliY0QyZS9hN1poRGxuWEJHOXNLb2o1NENNZVhoaDh6eHFKZ3lBZ254U2hldnFEa0ZSZVptakY3ZUVRQUxKNnRFMWVvM1VhWHFoOUhmTDRiQ2FjQ3VJWm5JMnpNTzdRY2tBcndUeXJRc0RINXVDcHpsZTdGK3dCSzBHcmNMRVlIVk9QZmhYbVRzT29XRU9BQk9GandqZjlnSU1KdzZBazE3M1ZXZGcrWENCUVFuOTJ6OGY2a0F3ZWtOYkJIb3MzNDcxQ0V1NnA3M3doU2MrV29YK2o0MkhPWURQNkErYkRER2ZlRXFoTW16ckxSdjRlY2ZvTm5UbjZIVEdOZlRuV2VGSzQ3eHhzMXI0K2NFZ1ljVnlSajc3WnRRQ3dic0hOUUQrWWZ1UUp1ZXNXZ3lmZzZhakIrTEg5cE1kQU9ZMS9pZEhFQTlnVTNUYmpDR2ZqVVlSKzdxQnRCTGF5Mnc2MmdNL1dvMGp0L2ZHNm83MzBMYTBHVFprUkxSNTh1dlVQTCtZN2hRVDJYSHMrTElZM09Rc09CcmRCemNHb0xwUERiM200SDZNWHNSRmRKZ3JUUmhxV0xhc21YL0xsaXc0Qm1CVWdpRVFJRE1ZMG9wQlFVRXlpaWcwQVpRRlp6RVhGdER0YUdCVUNqc0lDd0xjMTAxNG9lUFJHeUxKb2lMamtadFJRVjIvdWRWSkkxOEdjTm5EUUdjT3V3WU9BQ2w0MGFpcWZvUWpuNXlBVU1QYjBWNGtJRGo5dzlHbGZTZzlEeW5hM0xYRlJRVW9Lek1uUU5hWDR1REo4N0FvUXBDc3NJSnM5a09qbVVoY0FLYzFFbkFTNG50RUFRUVFhREVrZHpweWJuOTJ3MnRMem1QVjdjZndhalVFWWhUd1M4K0pMWlBMMWVublpCV2lHa0QxSjhxUjBLOGUzRnFVbkhMNkk2U2FVQ3BCblFuVHlLdTc1TlFBSUF5REUxNnQwZjE2ZFBBQUpmOUpLNm5xNHFwTXFFN29xSXVvajdmam9nT2tZanZHWWtqRDB4RDhwQitpQjg0RFBIdDVmYVdRUFQvNmRRZmZLWU1xamUrZzl6dmRzTm10b090TGtLSXU1eTBOcTBybUZNUFlOY2NCK0o2ZEVYeXlKRUlVcnZucDJjdkhQalhMRGpQamtCVWozNUlIdERsSnBwWFphUG5CQUJSbVpsUU13Q1lNTVIzYjRYNjdHeWc1MDJRY0dQS1JYVzJEWXE5MytEWVFaZHFUcDJsMEJXWUVkWFI1MW9aT0h2MjdMTUxGanp6c1ZzbDViM3NiZFNOMEpUbmVUQXFCZ0xsaWMzT1VxVkNBY0p5Y0FaR1FDQXNqRVlqTkJvTkFtc0tVSCtzQ0h6MGVoeXIvd1VVQU90MG9ENm5CQkdxTTJEU01oQWV4QUJnRU4rM0o2ck9OTGFxcnRaUVdsS0MwdEpTVkZkWG9hNnVGa2RPbkVLSlE0SFdvVXJZN2E1cUhWUVFJSEFjR01KQXpRQzhRQWxBQ2FXVW1mYjhmOFpOSGRybjZaN040ekd5YngrMDV3cXhyZERpUjdCRzZjVmx2dE1HNGZkRmtCRDNsVmVpODBmYjBIdnhkS2k1TXV3ZlB4UjV4MnArODFHRFdqYUhzYUQ0bXZheDdGK0pneCtmUkpkMy9vZVJXN2FnNi8xRDNkb01vRXpzZ2RIN2ZrTEtrRTR3N1ZxRkgyNS9ES3g3djZZUHZJd1JYNjVBZUh3QXppKzVCNGZlMzNIVHpPdmx6c25uWG96aUpsbDBBcUNLUlB6SUxDUm1aU0VwYXlSNmZMb1dUVzhKYkhTdEJBWUd6aW9wS2U0TFZ5VWVEYVZVRFZmNGxvSlNxcUFBUXlsMTl5cmx3UVBnT0JZczY0Q0Q0OEJCZ05WcWhjbGtoc0ZnUUYyZERqcU9BZHVxTFVpWExrakt5a0tYTi8rSGxGN1hGZ3B5VmNCbU1wazhlb0FlUDNVS1o0d1VIYUkwWU8wMjJPME9zS3dEQ2dDVXRST0hLMmFOVUVFZ0JHQ3Fxa3FUUWdQVlR4VFZHbHpUWnplZ3hFSVFIT0NQNzJwTXF2Y2VjQmtyVEhtb09RZEVkcnk4U3o0aXZRT3E5dTRGRHdCT0F5cjI1eUJTVm1HMjZ1QmVsL0czL0ZmVTZWb2hxa1VBQUJhc1JVQlVSaiswbS9jc1V2ckZ3cGd2NytMTkl1Zi81dUQ4OXF0amJRbWp4NEhkdHhwbEJRYjNmV0tGcGRwd3llMFVHUW0yckFST3VYbWpyQXdCcmRJUkhoTUVDQmFVL2JUM2txSGFaQUxDNHBBNGFnSzZ2N1lVeXBKenNMcDNaazBtQk4zU0NTbjNQb3hPRDk0Ry9ibThtMlplTDNkT0FGQzNieDlZd1hXOHlsL3pFTmtoN2VyY2RwSGhzRnloc1ltM0tEVWFzSFgxVi9mUElXMFEyOW9HcXlrY3NkMjZJclpiVjRTM2FBWlZFSFBadGRLMGFkTjd2L2xtVFJNUjNBQkk0QWFBb1FMUHVPeHRUc0lUUUhCeWhHVTVPRGduV040Sm04MFZ0T3NDTnc2MGFTREtDcXRnaXdpSHRuVXFvbHEzaERva0VFR2RPb0JtSDRiZUlnQndvbkx2d2NiUCsyck8xNVhZN2k0WVdWT0tBM21Wc0xGMjdDbTNRV0R0Z0FBa0JDbmhwQ0FxeHRXOUJ0UlZoNDRCbUtpb3VIbVBqdXpkN1lGdk4rTG9rUmpvYTJ1UjBMRW5SaVJwL0FqV2lDaHFEK0xIY1hlQXI3NkkwQWRlY051QkdwZjRPeDlIM0E5MzRvY1JKNkN5bFlHa1BZUlcvUytwbGR6SkxkZzZjU3ZzQldmUWZNbGJjRG1hcXJGcjJGandDYWxRb3g1Rzh5MFlPRlFlaXNHaGN0TTNVTWNPUit2QkhhOThFeVgzUjc5L1Q4SCsyL3Nqb0VVTE9FcUxrZkxTYW5RWTZuSW1hTHFNUkt1V1gyRjl0OTdRZEJtQjBSOHNRdFNnU1ZDL2RSZTJURHdLeGxhUGdPaExEZ0R6d2YvaDU4VmZJcUpOQzlnS3ppQjY1Z0tFdWFmaDdJSTdVSFJSaTVBWU5YUzUxZWo2d2VNM3pid0tsemtuQU5BcXl2SFQ3ZVBBV01yQWRIb010MlJFQWREaDREMzNRRmZ2Z05GUWdRUGpSa09wYllFK2E5K0UyTUs2OWR6NTJQbllPT1F2RFViN2w3OUVxNTRKeUZ2eEtQTDJGTUdhV3cxU2NpOEtYOU1pYmZuL2tOemV0VmZ5UFE5ajF4T1BvT3lURU1UZCtUUXlwZzlHN2RaM2NQanRMV0FyTDhMQi9Zck4rMWVpeVgwTDBYbDhUM1I3ODNYc2ZuQXFTdDVMZ1pLcmhkbVNnQ0UvZll6Z3k2d1ZRa2puVWFORzNRSGd2ektWbEhmVFZJRlNTZ1dua3dvQVZTclZjRHFkNERpT0VKNm5uRUJodDl2ZHdidXV5aDlSUFFlZ2F2dEtiRHorRTNJaUF4QmxEVVBmRGQ4akpyNHZ1ajdRRWo4UEc0N1FXQzE0cW5FMURBUWFuQk9oR21uUWdRQUFJQUJKUkVGVVZMaWlDaW9tdUplV2l1V0k2cURYRzN4MW1YSW51SE9FNXdWQ0tWWFk3YmFKS3BYcWZ5N3JMNGR5Z3dVYWJSQ2l0SCtPY2EyNnVob3N5eUV4OGRxb2JYWjJEbEpUVzBtMTYvK29mUURnN0ZPalllbTZGQjJISllJVGdoRVVGWFRWKzdyQ0VrSVFGTlV3ME5GUlV3a2hJQlRha0VBUDljTldXUWtuVkFpT2o4SDFjT2RRMWdwemVUVlVNZkVJQ0xxS2VCNkJoYW00RXVyWUJHZ0NsVjVmV1dHcHJJVXFJaFlCSVo3SFlnMDFjQmdjQ0V4SWhFSjVrODNyWmM0SkFIaExIV3hteGl2YzQyWVJBZGJ5VWxCTkJJS2lRcTU2clpTVmxjMU5URXphQmNBQ1YybHhPNldVSllSdzdyTGl2SGRKY2ExV2k4REFRQVFGQlNFa0pBVGg0V0dJakl4Q2JHd3M0a0lEMGF4WkszVHVuWW5rcEV0QnVHeGRGWnhNTUFJamduNGJZN05ZTENndExVVlZsYnkybWdrV2k5V2REM29wYmNycGxISkJpU0M0Z25CTFMwdmlWU3JWM0V1UFN4VVNJc1BobDZzVGRVUWMxTmU0VDBCYzQ4R1dtcGg0bjlZSWJYekNkUjAzVVFjaTVGcHFiVEZxaERSUGJ1U3JRSVFrKy81T0hSWURkZGhOT3ErWE9TY0FVQVJGSVRqb1psMTVEQUlUa3E5NXJTUWtKRXo3OU5OUGN1Njc3MzRlQUE5UWliWGhVb0ZLTVplVUtoUUt3cklzZFdVa0tLQlNLV0d4cUtUT1lvR0JXaGhZTzhwS1N4RVZHWW1nSU5lRXFhT3VmUDB1YTJPNzFJVEYxVEpQQkRWWGFXOEhIQTRXSE9lUk1pVjZRZ21sbE1URnhUME9vS3Nmb3E1TkVtZjhIMUp1VGZGUGhIOWUvMUpDQ09sMHh4MTNUSERiMlRTVVF1NUlZRVJja0dVbGdPTTR3bkVzSEE0V2Ryc0ROcHNORm92Vm5TU3ZSMTFkTFNvcks2WFdmVmR0VzJ6c2k4cktTcS95M2lhWXpSYlliRllQcHNheW5GUmpTUkI0S2NIZGFyVU1aUmhtcnY5eVg3dUV0TzdtbndUL3ZQNGxKVEF3OE1IYzNQTkhVMU5iSHdiZ2RERzNTN1kyU0lueVVyb1ZXSmFEUXNGS1NmSTJtd3BtczlxZEpLOURVRkFRUWtOREVSRVJnZmo0K0t2a25ENkU0emd2RmRSVlc4MW1zOEptczd1OW9LeFUybHV1Z2xKS3liMzNUbE5vTkpySC9aZlpMMzc1NTBuTGxpMm5wS1NreUQya0tqZUpZdUFPL3hBRU1RVEVDYWZUU1RpT0E4dUtyTTBPbTgwS3M5a01nOEdJK3ZwNlZGVlZvN1MwRkZkYlA5SW5zTGxDTzZyY0txaEJxck5tczhtWkd1dlJBZHBkSlpOUVNwa1BQdmhnTm9CQi9rdDg3VkpkWFkzUzBqTC9SUGpsTHlzS2hhTC80Y08vakJhQmpWS3FFc0dOVXFxZ2xETHU2dGx5bFZUQ0ZZZkRCVzZYNnJZWjNDcHBGVXBLU240YnNCa01CbmZQZ2hyb2RIcVlUSzYyZVdMTFBIbU5OYWVUSS9JdVV3QklmWDFkcWtLaGVNeC9lZjNpbDMrdVJFUkVUTnV5WlhPU0Y3aEpzVzBBaUNBSU10YkdTYXpOVlpEUzdyYTNXV0F5R2FIVDZWRmJXNFB5OG5JWURJWnJCelo1aHlsWGVXOExyRlpQVURPYXpLZzFtS0EzV1dGak9ibkRnQkU0NjZ4WE51eE1YTEJ1TC9hV21TNGQyR25ITjdzUDRjbXZ0dUhmMjArZ3lrSDlWLzk2aTlPQzJ0UG5YY0drdjFNcVZyK0FnKzl2dSs1RDVDdC94WTdaeXozR2FEaTJIY2VXek1lKzJYTng1cnU5RUg3WEx3alFuOWlQOHgrK2d4TnZyb1RENjd1cXJTdHhjUFpqT1BMS2g3QmFaYi9rck1PKysyZkM1RStHdVY3UzlOWmJiNzNkRFd3ZVFic2lhL04wSkhneU54SGNyRlliekdZTGpFYVhTbHBkWFkyeXF3aFM5Z0MycXFvcVZGWld1aExjM1hGcUxoWFVKck9yMldHdzJNRVFWeUVQd2NrUnB5dG1qVmdORlFObmY3VDVZUzRxRVNOYi9qOTc1eDBmUlozLy8rZk1sdXhtMDNzMmdTUWtoQllnR0NEU0lRS0NvS0FDSXZZR25PVzhzNWV2RFU4NXozTHF6M1lxbGtOUkViRmdwQmNGUktRSENNMlFoUFJlTjl0bmZuL3NKdGtVVWhDVTAzazl6QU96bTVuNXpPZnptZmU4Nit0dDRLSDN2dUZBdldzTGY1VCtIVXR6Yk13ZE1Zamcyanh1WHZIenI5ekFDdHJBZEpRdDF6N2FWSGIwcTJSa1hSbVd5dHF6UHNUakx6MUw4TVV6OFN3aXl2bGlKWDdESnhFM1l4VFpqOTlNNW9iY1gzR0ZLakpmZUlYcXpEMWt2dnB4aTdtbzN2dzJQL3pqYTZMblhvZTJhQ09iN251MXVjSktIVXpNRUMwSDN0K2c3S096QkoxT2QwTm01dUhCSGxyYjZhS2tMYlMybHY2Mnhxb0VsMGxhWGw1QmNYRXhKU1VsWFJkc2hZV3VaaXpWMVZVdFRGQ3IxWUxOMWlqWUpQeTl0WUpXRkJBRkJORlZ4aThBWXVISjdOdVArTVZ5LzZqZWpFbStnTGtKQWl2MkZ3QldOaHd1NGRaSkl4a2FFOEg4UzBkZ1AzYVVnMlpsOGM4V2lyNWV3djZYbHVLb084bmh4WXZadi9oNXFpcWtSaWxGMXB2UHMvMk9POW43OGhJYVRGMTdwY2gxaFJ4YS9BamI3MzJFZ294OFQ2bEg5anN2c2YyT085bjkwcEtXbWsrSGd2Y0l4OWFhaUp2Y3A4WEhnNTk1ZzRSTEp4STFjUmFSS1NHWUNvdC94VXdFTS9LajVhVGVmdzJ0S3pDelAxeEs3TUtINlRGcUdJTVdQWUw5dS85UzVtSFZSTTIrbk9ML3ZvZEZlZU9lTmZUdTNmdEtXZ1lSTkI3bWFLUFcxbFJMNmhsSXNObXNXSzB0VGRMcTZpckt5c29vTEN6cW1tREx5M01WdUxlT2dycE1VRmRhaDBlVDQrYUFnU3VDSzFvczVybkh5NnVuSjBTRTRHeW81MVNkbGNTSUVJNlhWZ0ZPSEpLTVN1VytuS2hDSmRkenN0S3VyUHhaZ2svL1lZU05HWUtvQ1NJNExZMnd0TEhvOWE3NVB2SDBBbzd1cVNIK3RsdlI1RzlrdzkwdmRrbGJMbHJ4R2VvaDA0aWRFTWRQMTh5anZNSUJPTWk0ZXc2L1pEcEpXREFmSC9NZU52NzEzMTA2WDkzUFAyQlBISTdmYWJJcmk1Y3RJanUzRi8wdUgzWU9ac2hDOWRFOC9Qc25Vbi95R0RhdlJBSWl5cW5KYW5hWGlCRXBCSWw3S2M2eUtSdnFMRUd0VmwrY241ODNtcWJjdG1aZlcyTkRKemVkZUl0QWdrdTQyZDM1YlcyanBLV2xKZVRsNVhjczJHdzJHOFhGcmxyUTZ1cHF0d25hNEJFRlBVMTZoOU1weUxJczN2SFFZeXFOUnZNWHM4Mkd0MWJGcDJ2V2NzMktuOUZyMU5UYUhZQTNJK0tEV1BGakJtWDFEYXpkdW85Y1djQnNkU2dyZjViZzIzc1F4bUZKaUxvQUlsSlRNYWFtb3ZNR0tDTjc1UzZTSG4yY2lPUmtCaTU2Rk9lNjVWVFVkMzVPLzZsWDAzZktLS0ttMzBiOE1DYzVHektRUzNkeWJLT1RvWXZ1SWlneGtmaTc3MFhjc1lLcWhzN1BWM3Z5Sklib21IYS9hOWkvZ20ydjdTTnQrUkw4Zk04Rmxib0pteGxVbW1LMlRCeExabm91YWowNDZqek5CaDk4WW5UVVpSVXJHK29zSWpJeWNuWktTb3JPcmJXMUNTUTBtcVh0cFgrNHRMYkdLR21EMnlTdHByeThuT0xpSW15MjlsOUNhcGNKV3RpaUg2aXIvck94WktwWlcydE14SFU2bmE0MmRwSWtDSUlndlBMMFkvT0JWTDFXUzRQSnlkWFRMK0VTcDVxOU96ZmpwM0hWaE40Mll3cld0VHU1ZldrV0EvdjBaWHpRQ2J3VmRvOXpEMGMxRGRYK2VJZTUxU1R2VVBTKzFWZ3FnVTc2MUJvOGtpSDF4a2pLSzh0eGxOWml0UlN5NjlZYm05UjlyNlFrc0FLZFVQL0xPT0EwTk9rVk83WVJjUEZzQWtQUEZWZThBYTBlblBZSUp2NjBEMDFJRUQ4c0JyV3Z2dTJmU2s1bDM1eEZpS0k0Yk0yYTFaTkRROE8rQmV6dUh3ZHVXbkZjeWJ1Q3V5OXBrNXp4MU5xMFdsY2dRYWR6QlJLcXFocE4wa0ppMnluZlU1dk41aVk2SWxjdHFHZVQ0NWI1YWc2SFEzQUxOY0h1Y0FtMWpBUDcvVlFxMVh5QVBxR0IvSEswSE5Gck1LSEE4ZUp5RW51NE9oSnB2UU80NS9LTDNTNmFRaVpzOCtYK1VJVmw4dXp1SUFGQmNyYWtIRk1INEIxUVEwT3BEZUswWUNyRFhCZUFMcWdMT282SHI4dGNXSVIrc0JGMW1BRXZRenlqUHY0VVF6ZmZTMzZSY1pnM3RKK0hGRFR4V3BKc29lMGJrU1g1NEIySXp2ZlhGRmZxQ09qZmc1ck00K2d1R0FhbURLcEx3eGdRNzl2Q1hHMG9NQkVTRjludUdKeGFmd3lCdnNvK094UFBaM0R3N0VjZWVmajdaNTlkYkFQc3NpdzczQXdnVHJmVzFxSjFuOXN5bEp1anBEWjNsTFRSSksyaG9zSVZTQWdQRDBldmIvbUNFcHZvaUtvYTIrYzFlRFE4dGpiV2d1SndOUHJXSE5oc0RnQUJXUmIyMURodVhiYi9WSCtBMkw1OTZWZWJ3L1BiVDdCbC8xNCt6WktabGV3cUhpNDZsY3RIZTA2dzZlQXgvcjUwRTRNdUhFcWNJdGZPc2xJU2c2LzZCSm52ZlVIZXVnMDBtQUJDaWIxaUdJZWUrUWZGR2ZzNStNUmlWSlBuRU96VCtlbHExbjdNMFRYYktmajJIYkwyYU9nNXNUOUNXQ3A5eHRyNDhmN25LZDZmUWRIbU5leCs0WjB1cFpqNGpSaUprTGtIVXpzZWlNcE5Lem0rZW5lN3grMjVkZ3piWDE3VjVXa28rdllqam55K0FhZTluS3dQUGlSNyt5RUFlbDEzUFRsdlBFUHU5enM1OFBpemFLWmNTNmhIRWIxY2NZQnkweUFpK3JUVkdnL2NNWVh2bjEydTdMRXpoQ0FJZmUrNzc3NUp0SzFHOEV6OWFKRzA2M0EwK3ZXYlRWS0x4VlZMV2xkWDU4NXRLMjgza0tDYU8vY3FqOXkxS21wcmE5cHBlbXpGWm5PRllwME9SeE43eHlQdmZSYWs5dlo1M1NwcWc0WkhCNEhLaTdSK1VSdzRsa1ZHcFpNN0x4M0hNSGVmUTZmTndwYk1iUGFYMURJd2FUQVBqSW5uOStBTk5abE1PSjBTZm41KzNUcXV0TFNNNE9EZ2J2VUlQWk5qem5SOHJ0M2pqWEhTaFppT0hxUWh2d2pEd0F2UmV3c0VqNW1NcXV3d2VhdTNJTWFPWlBpamYwSGJoWDRUd2VNbVl6dXdscExNV2dZKy9VL0NZL3dBa2ZBcE0xQ1ZIaVF2ZlFPMWhiVUVqeHhMVUZ4azU1Ukgra2pzR1V1cDhSNURXSytXTEMrU3RRRjFXQ3hCY2ExcUFhVmlEdi96Yll4M1BFWlliTmVZWWFwKzJrUkRyWmF3NFFNUkdreUlmajBKN20xRUYzY0JJVkYyVHFXdlJZZ2V6ZkJIRnFEVk5JKzY2SlBYYU9nMW5jUXg3ZmM5OVJzd2pPRDRTRVZLbmFuT3JOTVpOUnJOK2syYk5sdHgxNDgyVW9rTGd0RFlXZDZ6azV3Z2lnS2lxSEwvaU80T1Z5cDNseXMxV3EwV25jNkxvS0NnRnZSZ3dqZmZmTzNSeTZCUnVOVzZtVHdhazNQTldDeU5YR3NPd2VsMGlySXNpemFiOVY2VlN2WHMvOUxrbnU5OGJHYzZ2djhWMkxJMnNQSHBINW44d2VOZGVySFpNcjVnMVNNL00rUGI1emluSGxsSEJWdXUrQXVEUHZ5VW9FQlJrVUxuQ05YVjFmOEtEQXhhaVl1enpTUUlRZ011RDYxTkVBU0hJQWlTU3FXU0dqbmJkRG92V2FmVDQrMnR4MkF3NE9Qamk1K2ZIMEZCZ1lTR2hoRVZaU1F1TG83Ky9mc1RIeC9mYklwNkJnemNaSkdOR2hwMnU4T3RFam9GZDNwSFUrblVuajI3ZlZVcTFjM0tVaW5vRHJUeEU1bmFSYUVHb0UyYXdlVmZMZWFjaDVuVXdZei9acmtpMU00eC9QMzlyN3ovL3Z0OEc4MVJkNFJVUmF0U0szZHVHdzZISzFKcXR6dXcyZXdlVVZKWGJsdGpJS0cwdEpTR2h1YlF2T2dxY3E5dlpYcTJ6RmxyajJ0dDRNQ0JOd0lLdVpXQ2N3dFJqYWhXaE0wZnlOY1cvK0NERDA1d0M3WjJmVzJ0T2R2YTVyWlpXd1FTWEVYeXJrQkMwN1pwV2VUZW1LL1dOaExxWnU0UUFPRzY2NjVWcVZTcUc1UmxVcUJBUVhjUkZCUTBvMWV2WHRwMnREYXhVV3Z6cUVob3lwMXREaVI0a2xJMkZzbTcwajhzRm90THNMbTBOVmVSZXp0Q3paT1NxRWxiZS9mZGQ2OERCaXBMZFBiaEl0VlRVZ29VL0tHMXRnSGJ0bTBkMHhXdHJYM05yVkc0TlJiSnQwei9BQkJicG5mWVd2alduRTZuTzIrdG1Sa1hFTlZxOVhYSzhweEx3ZWFuVElTQ1B6VEN3OE9udVFWYW85YW1waFVaWldNMVFxTU1hdWxyczUwMi9jUGhjS0J1ckFkdDFOWWE4OVdhS3d5YWZHdTRLYituQXFPcmEydXBzWXRFQmZyUXJndkVLWU9xZFFLQWs2S3FPZ3pldnZoNXFaVFZQUTJLMTN4S1ZiRVZNYVFYZmFhUDZkSXh0dndqbEJTSzlCamVwOHZYc1JjZklXdk56OGhBK01RckNJbytWNXFpaE9Sb1cwMHFxTlZucFN0V2l5dFY1Wkt6dDR4ZUYzV0RCcnd1bjJOZmJFUUNBbE12SnFKZjEraW5LN2F2UnRWN0hBRmgzbDIrVk1YV2RFcXp5aEYwNGNUUG5jTFpTdVdVR2lvbzNMSU5xMG5FZU9tbDZIVy8zWDQxbmRoTnJUV1V5S1NZTGg4aml1S0k0OGVQSmJzcHhCdUw0KzF1cmMzcE5rZWJORGFuMDRuRFpzRlVYNDlUcTRYUVNMeTh2RnJWa1RacWJTV0lybnJRNWdvREQyMnRUY0FBRUxScTI5VjMvZnNEcHIzMUxYLy82RXRHdjdTQ0hhV045WFpXbnZ2b0MwWSs5UjhTRmkzSHMwVFZZYXBnL2lzZnNlQ3p6Vno2NGxJK1BGS21TTERUUU9WbFFGTnpoRDJ2Zk43bFl4cjJmY3UrRDlaMnp5UVF0V2dNQm9vL2VaSEN6S3B6ZGorbjNubVlsU2xEV1ptU3pDZkdhRDRmTXBTVktVUForTVJIditxOCtSOHQ1c2lHSXkxZm5RVzcrUG1GLzNidlJLSWFqY0ZBNWRvUHlmN3hlSmNQeTM3ak1Zb09WWGZ2VWw1NnRHSTUrNTk2bmJOWGF1OWc5MDJYOE11bVE1aEx5NUhPSVR2SndZZHVvcml3NVFVcU55MGo4OHRkM1Q1WGJHenNSRTl6dEZXRVZHZ2RTSEE2blRobEdXdDFPZldWZFUwVkNXYXpwVWxyYzlXUmxpRTJVaEo1Q2pWM2hZRm4wQUJabG9YcTZxcUJna283ZThHc21XeC9ZQjRyNzc2T0IvcDdzV2pEd2NaSGtza2pMMlRWZ290by9lNWY5ZjJQMVBVY3pEY0xMMmZsTlVONSthdnRWQ2owTU8waWRNS2w5SnFjZW5ydHJLS0UybE9GT051WlAyZERIWFg1cGJTaDhaUnNtRTdsWURGWm1qNVNoOFVUUDNzV2dWRytwMzFnR3ZKUFVWOVN4YStoQmUxNTIzUE1PckNmV1FkVzRlY2R5S2kxKzVsMVlEOFRuN3EyZVhpU1M3TXo1ZWRncWJOMHJxRTRISmlPSGFEbVZEbVN3MEdiOXJpU2picWNmT3kyTG13eVF3UzlaczhpTlBFMHJlVWNOa3o1cHpCVnRNL2NhaTB0eEZ6VDBNNWExRkNiazk5aW5RS0hweEUvNHlKT0YraVZMQ1pxYzNLd05saTZPTHNTa2lPZnNuMGlTWXNlcFA5ZmJzRGdvVUE2VFJYVW5jcHZkNi9JQUE0TGRUazVYWm9ueWVHZ2V1Y1dURFUyMTV5M3UvZUsyeks5dUs5aGJXaFpjcUxSYUM3YnVIRkREdytOcmNrY2JmSzF1VnNPdUlRYWd1anREUm9WRG1kakxha0h0VkZkRGFVNTJSUms1NkgyVE85b0xwdHk0blJLU0ZLenhnYUlCb1BoS2hCSjh1amczalBJSDB0SkkvMlFtaUc5b3FBbXA4MFU3c2dxWk1KRll3RUlqdWxGUDhkV2RwWTV1U1JjTVVtN1k5THR2R29NWmVaSXZIMGxxck1iU0gzL0U2TDZ1SnJ1Mmc2dlpzMnN6V2lvd3F3Znh1UlBua2V2QmZPeExXeWUveUFxWXlMVzdPTkUzUDR2aGw4L3JzTXJ5WFc1YkprOUQ0dHZMN1J5Slphb1NVeDdwYmsvaiszWUpyWXVXazd5RzI4UjdQOHI3K3JJbDN5eTRITVNldFZSVmlSaHIzSXdldjFhTEovZXcvSFNrVnowMkN6QXdwYVIvWWo5T0pzWXpRN1cvZTFGTENjT1lqYzhSZlYzQVJoR3ptSE1QWFBjNW1nV1c2NmJpNjJ1bnVwU1B5YXZYMEhBR1ZyWjloUHJXSFhOMC9qMjdvVlVmaElwYmpvWHZmRWdXcmRneW43MVhuTFZLaXpabVVUZS9SS3AxNDhISkU2OTh3aTdsL3lFZjN3UXRmbDJSbjY0alBEWWpnZFJ2Zmw5TmovNEx2NzlFN0FVWkJIejRGSUdUSXpyOEppODkvN0I0VzkyVWx0VHhFL3o1cUpXQnpEcy9YY0o5b1dDOXg3aHB6ZTJFUkFYU0hXdWpaR2ZmVXBrbkd1eENwZmN6NEdkRW1MMkxwd2FiNnoreWN6ODVKK25kUTJVci9zUHU5OWVRMTIybVlwN3J1YUVRVVhQK1UvUmYvSUFBTXo3dm1iOXRjdVJLbjVCNm5NTlU5KytGeFZRdldNNVA5ejlQUG8rZlRFZCs0WEVmN3piZEF6QThPR3BZNEZUYnEzTkJySU5CQld5N0pSbFdaUkFscHhPV1JCRTFHcVg1aVpMTW9Ma2JKSCswVkJ5Z3IwcnZpUXkya2lKMUlDNnRXK3QwVkhuMHRhYVRkQnZ2LzFXSjRyaVZTMVgzY1I3TzdPWU0rbXlUcmFIbGJJNkJ5UDhSRjc0YkEzSm8wY1I3Z05sdFdZSTkxSGtWZGNOR1lhOHV3YXRyK3NCS2ZyZ0VmYS9zNUtvRjI1eHpYSzFscWxydjhTZ3M3SDdxbEZrZnIyZmxObUo3UDdyMzRoKzdETUdUZXlEVkhlTTc4YmVTc1hsV3dudTREbXIzNTVPVmZBVXJ2ajRNZGZidUJVOWpMT3VsSXI5aDdDZEpYdEtQckdId0JjMmt6cmNDQTRMVHFEd2RDWjA5QWltckZqQjhTZm1VaFgzZDFKdmJLbmRTcVVtQnE3OW1tQi9rZDFYRFNmMyt5d0Nwc2VmbVZzZ2FnU1gvcmdWalJyQXdyWXBROG5kUFovZXcxMHZFKzNnUzVuNDFEd2NoVnY1YXNKakpNN2FnaUY3TlR2L2M0eUxOMi9DejFlay9JdG4rT241OTVuK2VzZXRRTEtYdmt2Y294K1FQS00zSU9Ic2doYlY0K2JINlhIektWWWxYTTNJRlNzSWFzeGtyc3ZnNTMrdVovUzJyWVNINmNoLy9XNTJQZmMrbDczVi9IS3Eybm1VU3phdEl5QlloOU5pNmREZkdUSjVBVk1tTDJEcmhEaWlYdjJjWHIxYnBreWJIVVl1LytZNTFKWWMwZ2ZOcEt6aVhpSjhDOWw1K3o5SVdycVJYa21oMlBPMzhQWE1wNGlidUJ3M1ZTQStQb1pwOCtiTlc3RnMyVEtyeXh4Rkl5RGJaUkFGd2ZXZjRDS3p4ZWwweWs2blU1QWxXUmFjVG5jdHFic0JqQ0dBNk5temlJd01wMmZQQ05TTlVWQ1hHZXIwU1BGbzZWK2JPSEhpYktDNXo3eGs1L1V2VnVOSVNHVkIvK0N1ZW5VdzZEUm9SRUdSVVdlSW11MHJ5Znc0SFZORkhZN3FFcVMremU4YVE4cG9ERG9BTFNHamgzSDh3Q0dZQXFXSHpLaTJmczdlSFNBaklUdnlxY3F1SjNqUTZWOHErcVFVeEl6YjJISzNsZkRVRkhwT200YkJvekpNUDNRdWN3N1BQWHMzRm5NaHZZYTdUVUcxN2xmVkVhdmlrd2oyZHoxNGh1aEk2cXFyei9oY2dtamh4UE9MeWQ5NUFMdFZ3cHhUUzBCbERlQVNiT0VqUnJtR2JCeEdjUEJKS3JNc21IZHZBMi9JZXZsWlZ3djB5aFBVSFBUQzZYWWVuUTVoSTBieTR6TjM0RGh5Q2NHcFkrazU0WUl6SHJmbFdBYm1xR0dFaGJtaUNCRmp4MUM3TkwzRkdBSW16aVRBWGN1dDB2MjZhRU5neWhCWGRZZ3VBa05JRFpaYWNKYnZvcnpHaTZBdi8wUFZsNEJrUnF6TXBLWUs5TTBpSS9yNTUvK1Z1bXpac3MyTjVxanNNa2NkSUR0bEdjbmxiNU5rU1hLMjB0ZzhvcVJhTThVL2JhR2lwcDRDalJmcVJoUFU2V3lkNHRHY2tBdUlhclZxbHNmN21rOVhyV2FyR01mN1UvdlRlVjY0RjZHK2FzcHFuZnhseGtWQUEvK3BoMUEvdlNLcE9yWThXN29xVHE1ank2UExHZmZGZndtTERhYnE2eGZaOHJXdEl3WFBkUkpORUJIVHB1TGpYcWdlVTZmakcrL2Q0YlhVMGFsY3VtMDlSVnUzVXZqTlV0TGZXY3ZNelcraFBVZTNLdW9OcDlsSFV0Ty9jaGQ1U1FWUEIxWTNpaGJhZTkxbXYvb1ErYVVwakYyMkNKMjNtdDNYRFVPVzVOT2Z3WDA5cjVqQlJFMmQ2djU4S2oxdkRtZ3hsUGF1RlhYYjgxeVN0cCtpclQ5eDdMSHJLYnp1VlVZdFNEdG4yMHZyYy9hZVAwRThUZEdiZnpSUlU2YzJsY1QxbURhN2pWc2dMQ3dzRGRqV3l0Zm1tYkFydTFJL1hKUkdzb3dnT0oyeVMyYTUzR2hWbVlkQk5qSmdTaHJSUFl5SXpjbTR6dmJTTzVCbFdhaXFxa3dTQk9IaVJuOVordnIxZkZZWHdqdFhwalNwbEoxdG1aR0pSallmeXdhZ0xQY2t4OVNScElZcS9yWFR6bGh3Q09yeVhFd2Vjc3RlVklRYzJaZmcyR0RBUWQ2NmxvMUhUSHUyVVc4QnNGRytiUmVoQXdlQmIxL0MrcGhwcUFzZ2JHZ0tZVU5UQ0lpTFFXTm9Yamh0U0FoMUJTMGJxRGpxNnNBL25PanBzeGoyMHBPbzg0N2k2ZnUxWlcxbCsxMFBVMWwzN3ViQUt5Q0FCamY5czdQNEFKVkZMY21SMUhvRGxzcnlzL2VnaHdSaE90V1NicnFob0lDQUljUFFlYXR4Vmh5aWFHZExQcm1TSFZ0ZDgxVzRpNHFxM2dUSDZRZ1pQaHByMWlIMC9ZWTB6Ym1mTWFoWm1CbUMwRHFLTVZXMWxOUzJ1am9NOGNrazNMaVE1UG1YVVgzMHhCbmZpNjdQSUhRRnV5Z3RkUVVoaW4vWWlsL3k0Ri9OcUtQMjFXTXI3MW9FWFJVM2pCQnlzUnBpbStjaExncE5xN2VqV3ExTzI3QmhmWTkyQkp1cTBXSnNsRWVTSkNFTDRMRFpXblMyc3BnYUVQejljVGl0MUpkbm8yNFVhbTJyREpxQ0JvS1BqOC9semNaMENZczNaVkdyOHlMdFdWZW9YUnZhaSswTEp3RHc1TnNma0Y1c284N21ZTWFpSlNRTkhzYUhNd1l4ZmN3b3ZudG5GWmU5ZVpLYXFscitldmswZ3BVU3dOTUx0ckFSREo0Wnd1b0xSNkEycG5EeHQ2K2hIellWSTIremV1WmN0R0lkdXFDUWxvSWdTT0tIV1planBncUw3MFFtenhnRXdOQlhYK2I3K2RlUzkxWUNhbnM1OVNZams5WXZhU0xRN1hYTFBXeTYrVDYrZkY5SDNOOWZKUG5Lb2RUditJaU4vL2NKZ1gzak1HZG5Fbkw3US9oN3ZKU2Q1U2ZKL3V3clloNWJUTkE1U244TG1YZ0Zxbi9PSVgzbVQ2ajlJdEdGdE5SempKZGZ6OUZiSCtLYjFhL2dOLzU2eGo5NjdhKzZYdlRjQlp5WU41K1ZJOThrNHBxSEdIbkhOR0t1dVpYMUN4WlF0M0VnbGhyUUo3UmtYYkVmV00yYTJXdXdaR2NTKzlqL0k4QWJHRENWMUp1MnMzN0NPUHo3eFdJK2xZM2ZwUTh5OXA1TDNVOXlUd2JmZHhGYjAwYWc4b3RoVFBvS2duM2d5RU56eUQycHh6ZFVTOVh4VWxMZS90dVozNHp2SUZJZnVwanQweWZqSHg5TWRiYU5rWjhzK3RWcmtuRFRRcmJmUFpOZi9BM0UzUDBTQTZjbmRmQ21NSkw2MmtOc3ZXa0tKK0w3SWxlVllnbEtaZnBIaTlvSTJHSERocVVDdVo3Q1RaWmx1K0NLa0VxeUlMak5VUW1WbHc3SlZFOVZ0Z2xiWURqYVdDOTA0VVpxTTM4aXEvd2tKWUlPWWZEZ3dlNytCbVlzRm90Z3RWcXgyKzJDdytFUTNDRlhsZFBwMkFQMFB4dTJWVWxWUFhxREFUL3Q3Nk90bmUrMFJaM0RnU2svSDFWZ0JEcERXNytJczZHT2hsb0xQaEdocmN3ZGlZYkNmR1N2UUF6QlhaTkVrcTBCVTNFNW1zQXdkTDY2MzJXOVpKdUordEk2dktNaitMMzBlMmRESFEybE5YajNqRWJWenN2WVdsYU1wUE5ENzl2U3ZKY3NKa3lsRlhpRlJhRFZkVzBQMkdyS3NOWlk4VFpHb3pvTGxDWk9VdzBORlNhOG80M3RqdjIzY2FuWU1PVVhJL3FIb1BkdlA1bFpsdVdqb3FpNkE2Z0g2bkJSR3BrQmk0QmdGMFRCS1FpQ3BGYXJaWTFHSTN0NWVhSFQ2V1M5WG8rM3Q3ZUwwc2hiajQ5V1QxalBIaTZOcmRrRWJkYlljQ2ZJbVV6MWFXZEhxTGtjSHVHQlNyblFyelFHTUVUSG5sNzk5L2JGMTl1MzNibjNOdmJzM21wcHZmSHQyZk4zdlZ0QmE4QTMydkM3amtIbDdZdHZCNmthWHFIdFZ5cUlPZ08rUGJzM2RxMS9LRnIvc3poMmd6KytCdi9mZDh1S1dneWQ3Q05CRVBvZVBKalJkK0RBUWZ2Ym1LUElUbVFrUVJBRVNYSnBiWTJCQk04NlVvY2tJMm5WMkd3V3hNYkdMTTI1YTgzK05VRHc4dks2VEJFbUNoUW9PTmVJajQ4ZjBjb1ViYzM0UVhPWmxZU243UElza0xkYWJZZ2V2alhCN1ZzVFBCeDJvaUFJMDVVcFY2QkF3Ym1HWHE5UG83bjZvTjBXZmE0ZnFaSDVRMmloc1RWMXRySTFhbXlTUitEQXBha0JndG5jTUJXSVVxWmNnUUlGdndHTVI0OGVHVWpMOHFwR3hvL0cxRE5Ca2p5TDQ1czF0MmIyanliQjFvWnp6ZVhlMEdxbktuUDkyNkswdEpUOC9BSmxJaFQ4S1JFVEV6UE1VMk56bTZPcVZ1Wm9DNjQyTjRWNEM2MU5kQWNNbWxTN3hnUGRacWdpMkJRb1VQQ2JRYWZUalcrbHJiVm5qcmFRV2EwRENYYTdIZEhUREczVTFBQ2hvY0Uwb1gwejFNbk9qTU1zV3JtQmU1ZHY0djE5dVI3MEt6SlplWGw4dW0wdnIyNDhTSzNIVVE1ckE5c1BIZWV0alR0Wm5sbWlyT0J2aUVQM1hjR0pIY1hud1Vna2ZyNTZQQVduL2poemF5dk5wYnF3NGd5UHJtUGJaWmRTMnFYRGJWUmxITUorRmhoeGFqY3RZY01UUzgvcVBNZ05GWlFleVczeitjL1hqQ1V2cDN2bWFFYkdnVDRlV2xzTGphM3hweVZYbTlRbVFpcTJNa1B4TUVNbnRyODM2L2hxYnlGOVltUEV6UktVQUFBZ0FFbEVRVlM0dEg4VW03ZHM0UEVmR2tkdTVyMzFlemhTWE1KYlAyUzJFR3lsZVRtOHN6ZWIvYitjNUl0amltRDdMV0V0SzhCdXRwMEhJeEdKbnJjUXY4QS9rT3RnMVN2c1diTCtqQVc5cFNBUFIxZTZUVlBPanF0dnBOcDhGbDR2cGtvYXlzNHUvNTZVK3dNYi92cGltODh0ZVRuWTdkMDdWNjlldlpJOU5iYlRtS040bXFQTldwdExzS21ibzZHTlRCNHVNMVFVeGZZRm14akE0aHNuTmYwYTJGREdYL2Jud3RoWXdKdG5icDRKTlRsOGMzQm5TekdjMEo4UEV2cXplc05hUHFoVGhNMjVRUFhPZEk0dlg0OGREUUVqcDlIL3l2Rk5TYnEyNHFQc2UreDF6RlpmRXY5Mk55RkdYOEJDM3JJUEtkcDdGTHRkVGZDa1dmU1pub29BVlArY1RtV2xub1k5RzZpcEZJbTc2WGFNU2U0aWRVY2QyZSsvUStIK2szakZENkgvd3B2dzl1NDQrOU4wNkFkT3JOb09vaGJ2MGEwRWI4NStNcGQ4Z3FuYWlpRitDSDBYM3RBNUEreHB4bEN6ZHcxRkJmNzB2WFFFQUpXYlYxSWxKUkovVVJKbDZ6NmlRVzJrY25NNkZtY3dDZlB2SURUVzMvMndsM0w4blhlb3lDckJrRFNPL3JkY2lWYmRxSTJVY2VLOTl5ZzdVb0JYejBRU2JyNlZBUDlxTWw5K240bzlHZFRWbGJGL2NUWkNaREtEYjNSNWJ4d1ZXUng5OTBPcVQ5VVNNUFl5K2wyVjVrNHd0cEgzMFZ1YzJubVNnTFRKZEVVQnEveCtCYWQrM0kvWlZNT0pGeFpUb0JXSm5MT1E4SGgvMS9tV3ZVdmVqcU9valFra3pwL2ZWTmplc1FKWXpiR1huNlU4dTRySVdUZlRhMHkvSnMwdy8vUDN5UHZoRUtxSVJCSVhkbjYrM0E5ZW92TGdBZVRpWFBZdFhveWdDcVQzM3hZMmtTYVlUK3hrOTVKUHNYdEZNK0NldS9Gemw3Qlk4ak00OXM3SDFGVTdDSjE2TllsVGhpSUEzdDdlSTREUFdwdWlqZVlvc2lRNUpVbkE2VVFscW1WSkl3bE91MDAyMWRSZ2t5UXNYdDZJalZMUG5aU0xMQ05VVmxiMHA0dk5XbzZVbHBOb0RGR2t5dThNdVdRbkcrWS9UK2pNYStsejNSVUk1cG9XUklBbmwzOUY2Q1d6Q2RCbHMvWEIxNXBNb1pwQ08xR3pyNlAzdkdrVXZYSTdCOWNjQTZCbVZ6bzcvdlk0bXBScHhFN293WTZycjZXaVJnSWNaTnc5aDE4eW5TUXNtSStQZVE4Yi8vcnZUaDlRVFhnc1lXbWpLZm44VlZxU2JUU3c4NmJyY2ZhNW1IN3piOFEvUU1MYTZSdis5R1B3Nnp1SXdsZnY0OFR1UW14Wlcvbmg0ZjhRTUNqUnBmT3MvNHdkRDd4STRPUzVHQk1kYkxuMlRzd09seFd5ODVvWmxKbU1KTjUySXh6OWpCK2VXOTVrb2Z3MDd6SUtDbjFKdUcwKzRiMjhxTTJ0QkxVdndlUFM4RThNUXh2ZGw3QzBOTUtISnJwdktaOHRNK2ZRRUpCQ245dXVvdjdiWjluOXdYWUFTajU5bGwyZkhpTHVwaHNSOXEya3JMRHp5bjVkM0VEQzBsSlJhNzBJSEpOR1dOcDRmSUpjbklpRlN4NWoxNmNaeE41ME13R2FrNnlmZDErWG1IbnIxbjFLUStTRnhNOGN5YUU3cnlMM21JdEVNK3U1djdCL1ZUYXhOODBuTkt5VXpkYzkxT241L0llT0lXUllFdmhHRUo2V1J0aTRDOTAwVHk2dE5HZEZPc1paMTZBdDNjSlB6eTl6T2JSSzk3TnU1aTJJZ3liUlo5NWxGTDU4QjRjM1pRR3VaaStyVjM4WDJaNmZEVmtXWkFSQkVBUVFhSEtqT2UxV25LalJCSWVpRGRDaGJsM3dqcXMyZEh4WEhxWlQyWWQ1ODdDVGQrN3NwMGlXMzl0NzFWQ0p3NkZIYjR3bUpENkNrT1NXMzhkZGR5ZlJJL29qUjExTnh1VWZZQU8waERMZ3J6ZFJzWDgvNW1vYi9vUGlLTjkxRUthNCtpWUVYSHdOZmFhTUFrWVJ0K0k5Y2pjZEkyaFVKY2MyT3BtNDZ5NThOQkIwOTcxa3BWNUxWY085QkhkQS9hOE43WWt4MU1ndmJUUTdLNVpxSzRGaFlRUU1TQ0o0WUhMblFyeDBad2RqTURMeXRhZFpjOHR0NUJocTZmdmlSd1NITnBjelJjNWJTT3lZWVRCbU1Ma2ZEaUIvYnhVeDZ2WGtsdmRuNXIxWG93TDg3NzJEcjJlOGp1WFJPWWdacThrcFR1REtyMjUzTVpza045ZEdocWVtWWo4VVFaazJIbU5xTXlkYzFmcmwxQmluTWY2R2k1R0JRWGZkeUtwRlh6SDh4bEhrcmxoSjc3OStqZkdDT0l6OTcrZkVoMWQyZXIvZVBmdmczZE1YalVaSFNHb3FvWVptb1pHOTRpdjZQdlE5eGdzaUlQa0pjcFplUU1HSmw0anIzWEVKbCthQ1MwbStLZzBCNkRmek0zTFRmeUFtZmpCSGx1d2llZE9QaElhb2tmdmZUKzdTRVJSbE9ZaUpQMzE5VjBEU01IeFYrUWlHdkJiejBJamVDLytPY1dnZ2dmWlpySHJPVlY5ZThQbjdhTWJmU3Y5cG81R0FnUXV1WU1meWRKTFNYSngxS1NrcC9ZRThUM05VRUlTbVpGMEVRVUFVWlVIRXBaaHB2TkQ1YW5BNnJOZ0ZMNWRnYSt6dTN2aWpVcW5HZGpiWkZVVTVMUGo4QUl0dW1FbWlRYWxtLzcyaGlwdkV5SHN5T0hEbkhING90R0s4NXUrTWVHQnVVMzJsVjZDcjVGM1FhUkVjRGlUQVdaSEoraGszNFQxeUtnRVIvalFVMXlQNU5GTlNlMGVFTnYyL1BqU002c29TSEtYbFdDMkY3THIxeGlZYUhxK2tKTEFDM21jeThrQ0d2Zm9NKzE5OW1DLytua2ZBaU1zWThjcVQrSGF3cHh5bFJSMk9RZGRuUERHSml6aGVNSmp4bzFvMkdOR0hOZEovYS9FMit0TlFYazJEc3hpcE1vTnROOXpZUEtvQjhVaUF0YkFZVFV4OHQraWE2b3Z6Y1J6ZHc1WWJtdnNuQlBjZTdqcGZhUjFCWVdGdVZTd0NROEN2S1FnMVl5azFvMnUwbU1SQURHRmdxNndET3VaSTFJVkZOYmtwZE1Zd0dySXFvYVlJczluTW9YdHY1V2pUbStBQ1ZOamM4dVhNL0tycVFKZFRWYVZSSVZ1dHJwRVhGV0Q2OFFpYmI5amNyUGtOYVM1eUNnZ0lTQVkyZUdocnJoOEJBVmtXSktkVGtKMlNJSW9xSkVtU0hlWmFvYWJVS2h0OGZCRjB0cllhMjczMzNxc1NCS0ZEM3VpNmlnSnUrV2diZDg2ZHdiZ0liMFdxbkJkUTAvT1dCK2w1eTRQWVNqTllOMjQyUmRmT0pkcllnZTltNHdvY1EyNWc3TDl1QitENEU3dndERmcyRkRjMzNER1hsZUoxWVRqcU1BMWVobmhHZmZ3cEJ2WFpHWG5nbUZsTUdETUwyVkxGam5tVE9mN2RIRkptbjU0MVFoMFcyZUVZeXI5NWtkenFJY1QzK29XZlg5L0FxRHVhM2NYbTRrSWdCYkRSVUZoRFpFZ0EzdW9JVkpHcFRQanN0VGFGOWpaakJQYmNuZGdrbXVqQVBTRUlBbktyN2lrK0VkRjRwWVF5OGIySDJ3cVVjSC9NcGFWQUhGaUtNVlU3dWl3Z0JGRnExZHRCank1TWo2V3dISHBIZ0ZTRnFSU01YYUJic1pRV0lMczFHVXRoS2Q0UlFlQWZqdDdnejVDM2xoRWVlQWJLU2plNnlPZ2pqZmhmTkpPSlQ3ZlB5S0xSYUVZTUhqeEljK0JBUnF0RVhVRjA2V3VDZ0N6aHROdVJOR3JzWmdzYW4yQjBZZjdvdkhXb1c1bWhQUG5rRTZPQjAxZk4ydXU0YzBrNnV1ZytWQlprczdRQVZQb0E1aVc3aWx5M0h6akV5WXB5ckU0elgyN1BJQ0U4a3FrSm9VZ04xU3c3Y0lyRHA2b3B0VWtzM1FHcEEvcVI2S2RSWk5KWmdDMXJPMGMyRlJDWk9nQkgvazZzMmhoOEFqb3hjYUo2MExBbm5ZS2ZSMFB4TG81OXV3Lzk5RXVhZ3hGclArYm9ta0g0T2c2UnZjL0ErRmY2SVBoTDlCbHI0OGY3bjJmZ0RSY2pWeFZTc0NlUElmZmQxaUg3UnRYKzdaaHFySmhOVGlwM2JrRjl5b3VRMUJIb2RLVWMvTmNLZ3NhTlJFc2w5YVYyZ21QQ094eTNFSlo2MmpFNHM3YXo3UjlyR2ZYTk40VDRsckYreWh4T3BQYW45MUNYaEMvNjVDMXlVaU1Rc2xkVFlyK1FZUmNFb2hXbjB0UDNSYlkvczRRK2w2YmlLRHhHU2JiRUJYK1pqWGJRVkdJai9zMzIvM3VEL25QSFlzdmRneHc1aVo3dTgvbkg5NlhxZzY4NE9UUUliV2dNMGNQN0VUaHBEajR2WE03UGIvWW1ia3dpNXF4RFZKdkNHRFJ2SWpGenJtVGJxNHNKQ2JtZHFxL2VvTDZyY28wUUFtSWNuSGh6S2Ria1NBSlNSdU1ickNOdTFreCtldkZKQW53WFVyL3BBMm9pcGhIVnUzUDkwcjQzblgyZlhZd3hvb1lqM3h4bHlLZmpRZTFMdjVzR3N2dXVoMG4rNnpXbzdlVVViZHBQd21QMzBCbUJ2eW82SG4zQk14ejZmQlgrZ1VHRWp4L1ZGSHhwRDFHemIrVEFKWDhobzM4SXhnRkc2bzd1eE9xVFROOUxoalVwY08rOTkzNnZsSlNVUXpRM1UxWUpJQ0lJSXJMc1JFWkFGR1JabHBGRkFidTVGbHVEQnJtNkZKVmFyUmJjaWJrQ0lENzExSk5YaTZKNGVoK2JaS2ZLcGlMY29NRmlkMkN4TzdDS1dvWkhCd0Z3TFBjVWVWWTFRMk5Ed2VGQXJmY2xLY3dYMlZyUEQ5bGwrUGdIMGkvSUc0dmRRVlI0QkJINjM1YU14bVF5NFhSSzNXNUtYRnBhUm5Cd01DcVY2cHdlYzZialEzQlN0V3M3UlpzMlUxc3FNSERSMDRRYW03ZWpiNzhVRElIdTZKWW1nTEJoL2RIMUhFeGdVQTA1WDY3QmpKR2syMlpqNkpGQVlGdzROYnZTY2NSY2hMNXNENlhIVFF4OCtwK0U5L0FGUk1LbnpFQlZlcEM4OUEzVUZ0WVNQSElzUVhHUkhYTG1sNjFiU2RYeGZIeVRVaEZyQ3pFWGxPQnpRU282THpCbkhhQm8weWJLRHVjUWZjdWpKSTVONkZSN09kMFl5cmR2Sm5UMlh6RDJqVURRQmhBNW9pOFZod3NKR1JoUHhmcFAwSTJkaStQZ0pxcktmRWg1N2duOEEzUWdlQkYxMlV4c1I3ZVR2KzRIVEZWMndzYU93ejhxQkFRdm9pK2JnVDE3Si9scmY4RHFDTUE0WVFRNmI5ZFRxNDBkVEVpVVFQWGg0MWpNV3NJSDl3YU5IejFuVEtMdTU4MFViTnlLMWFvbFl1eDRmTU44TVF3WWdhK1lUKzQzbTlHTm1VMU1TaStDaGc3RnExTlpKQkkrTVExYjFpSHE4L0xSeFNWakNOTGhlOEU0Zk9RQ1RxMWFqODBRei9Cbkg4YmczYmtxYlJpZWhsZkJ6K1QvbkVYQy9jOFNrK3dTMUVHakw4RkhLQ0l2L1R1cXNvcnh1MkEwWWYxaU9pY2k5Z29uYW13L2FqSU9ZUzZzeG45NENvM01aQUhKSTlDN0RUdkJONXl3UVFtSWhraGlMeGxCeFpZMUZHNzdDWWNZVE9UWTBYZ0hORnVBZXIwKzY3bm5uanVCcTkrb0hYQUk0QUNjZ0NRSW9peXFSRmtRQk5SZU9sU1NFNm5CZ3RvUWlLRFQ2VVJQN2pXSHcvNk5JQWlUL3FpYXpmbk94M2FtNHp2YnlIMzlkckpOa3hqL3dPVi9tTFUvY3YrbG1GS2VaT2pjRkVYRi94K0F3K0hZb3RGb242V1pvNjFlRUFRVFlCVUV3U1lJelJ4dFdxMkxvODNMeThYUkpyb1RjcEZsV1pnOWU1WktFSVFSeXBRcThBcUx3eWNpNkE5MVQ3cVlSTHhERkovdy80elhXSzBlR2hNVDB4dzRhTmxNV1d4MG43bVNkUnQvWEtscmFzODBqM2ZmZlhjWW9QVERVMERFN1B1SitJUGRVOXlkTHlvTCs3OEZuMlhMUHU0NWF0VG9ZelQzUUJEZGFSK05wVldDTE11eUxEZm40MHFTMUt5eEFlaDB1cUhLWENwUW9PQjhRZS9ldlh1NWhacG4ya2VqWUtPbHh1YnExU0pKVXN2Q1VwVktwVGdmemlMQ3drSzdGVGdBTUJnTStQbjVLcE9uUUFIZzcrL2ZwNVVaS25yOENLMDBOeVRKUldtazlxQXBFZ1JCdUVDWnlyTXAyTUs2Zll6QllGQW1Ub0VDTnpRYVRSSnRmV3lOeGZCTlRCK2VSZkdlR2hzblRod1BBeEs3ZXNIcTJscHlLK3B4bkM0bno5bTJxYXpWYkNhM3JCcXpRMVpXVElFQ0JaMUNFSVNFRjE1NDNxZWxZSk5ibTZOQ2N6NnVSL0FBRUl4R1k1ZUszcEhxdWV1VkZleTFhd24zY2xKbzEvUHY2NmN4SWt3UFdIbnVvMi81T3F1Y1VpbUFMVTlkUmJUN3NQZFhydVNOekRwNkJIaVJWMlZod1JXWGNPdUFNR1hsRkNoUTBDRW1UWnBrQkNwb0lweEVGQVFFRDgwTmFQYTF5YktFdXRGRzFXaTBYUk5zb29ZRnMyYVMxTU9WMXI3eXUxVXMybkNRMWZPR0F5b21qN3lRV3llYW1mam1uaGFIalVnZHhUVXp3OUdLa0g5MEQ1TlhiT1B5QVZkMFV0R21RSUdDUHp1aW9xSjZBcGx1UWRhaWN4VnRvcU11NFNhNkpaMmdVb2tEdW5ZWnJ5YWhCdEF6eUI5TEU4K01taUc5b2dqV3Q4MTg3aHNWM2xSckZ4YmtoK2l3WTVXVVJWT2dRRUhIOFBIeGlmTVFhcTFiOGpYbHNyazdXQ0ZKa3RDVTVDWUl3b0J1WDlGdTRyMmRXY3hKN2R1TmcyUSsyWHFRWWNPVE1DcWtJQW9VS09nRUdvMG1vWlZRYStGamE1Mm9LOHR5VXdtWUFIU1BWRTJ5OC9vWHEzRWtwTEtnZjljTnloMC9iK1hqY2o5ZW1EUkFXVEVGQ2hSMENsRVUrM2hvYVc2aEpudWFvOUFpZ09BU2JFSnBhVWtpNE5YMVN6bjVkTlZxdG9weHZESzFQMTFWdkE1bTdPS3huMnA1NTdvMGdoVlNEd1VLRkhRTlhpdFhmaEhpSWR4RVdhWUZoNlJuQUVHV1hla2UrUGo0SkhUOUdqTHA2OWZ6V1YwSTcxeVpncjZMVXUzRThRUDhmVk1CYjl3MGhSaHZ4UVpWb0VCQjE5RzNiOTlRVHArazZ5SFVYT2FvR2hEVWFuVjhsNjlnTG1IeHBpeHFkVjZrUGV1aStkV0c5bUw3d2drQVBQbjJCNlFYMjZpek9aaXhhQWxKZzRmeDRZeEIvR2YxRGdvclJhNTUrVVAzaWZTOGQ5ODhCdXFWUlZPZ1FFSEhDQWtKRFc5cmpyYlUyanpNVVZrUUJFSHZjTmhmRmtWeC9wOWhnbjVMMmlJRkNoU2NIWmpONW1YZTNvYWx1T2lMNm9BNk40V1JCYkFMZ3VBUVJWRlNxOVd5UnFPUlJRQkJFR0tWcVZPZ1FNSDVDbzFHRStuV3lzVFRtS0tlYVIrdUx3UkJpRkdtVG9FQ0JlY3JWQ3BWOUdtRW11QWgzQUFaa0p1K1ZBU2JBZ1VLemxzSWd0Q2psY1lteUhLTGxBOTM5UUhJTW9nblRod1BCM1RLMUNsUW9PQThodTdmLzM3SnAzT056V1dPaXNIQndaSEtuQ2xRb09COHg4Q0JBLzA4QkZtYmRJOUdvU2JMTXFLWGwxZjRtVnprVEdpTHpPWUdjc3VxTWRuL1BMUkZzdVJBa3BTaVdBVUtmaTBpSWlMOFRxT3R0ZjVCclZLcHVpZll6cEMyNktPdlZ2TG1VUlBodmxvS0swM2NPR01xQ3dmOXdaWEZ3azBzVDc0ZVZZOElaSnNGcjdnVWhyLzRFaEc5T3k5Qk0rMyttZ1BiSFl5OCswcGxSeXRRQVBqNys3ZlcyRTVuaWdxaUtJcWgzVHE3bTdabyt3UHpXSG4zZFR6UTM0dEZHdzY2djNUUkZxMWFjQkd0eWEydm5EcWQ3UTlkeDhvN3JpTDkycUc4K3MxUFZQd1pWc01ya1VsN2RqUDc0SDc2RG5Hdy9mLytYNHV2SFRWbDFPWVhJN1hROGlUc3hkbVVIdndGeWRFOWpVOEdjRmlveThuQmJwUGM1M045WjZzcW83NjBwczB4OXBveWFrL2w0N0FwbXFXQzh4ZmUzdDUrcHhGcVRkVGdqYVZWYWxFVXUwbUo1a1ZTaitheTBwNUIvbGhLV3RJV1VaUFQ1aWk5UjBkWUNWQ3J4QTRiN1A3eG9DWnNlQXFXelVkeEFpb3NISHY2TGc1dnlNTS9WRU50YlJBVFBsdENRR0FkTytmZlJzV0pIQnJLSk5iTjNRVUJTVXg0OTBtOEtDUzk3K1VNMzdPVFVBTlVmcm1ZYmVzTlhQYkdYMTBLNHBMN09iQlRRc3plaFZQampkVS9tWm1mL0pPOU42VlNJUXhCTmxYVGNEU0RpTCsveFlpYnh3S1EvY0pDOW4yVFMyQnNFTFcvbEhQaHFyV0VOKzBJQy92L3ZnRDFSWGVSTkYzcDg2UGc5NFZXcSszVXgrYlcyRkFMZ25EbXpTTWJhWXNtWGRhbFAvOXB6eTVlM1pYTnlRb3IvNWgzS1VGL2h0V1E2aWpldElscVN3MG5YL3VDdUd1ZVFnVlViM2lQakIwYUx0dTRCaTgxNUx3OG4zMXZyV0xDdzVkejRic3JxUG51VlRaL1pXWEsyL2QzNjNKVk80OXl5YVoxQkFUcmNGb3NUYXV1NlRlVkNRL093TEo3R1YvZXU0emhONDlGUlNsSGwvekloVnN5TUlZRERodk9GbVc4RWpXSDl1RTFzRnA1cWhUOC9xcUJXdTFIeDc0MW9WbU5nTUF6ZTJDN1QxczBzRzgvbmpMR3NHM3ZIbDdkdUorTGJoM1BINzUxaVZSTDhhcHZFWXFQVWFNZnl1UWJKZ0pRdG4wN0drUXlGLzhEQ2JEblZsQmxQUVQ4dXM3ckFSTm5FaERzeXQ1UjZacXplTUtHREFaQUZ4Mk5XRjJOSFZBUlJNU0lJSGJmZGdNOUo0MGxJdTFpSWdaRWV5ci9qRnVmb1R4UkNzNExxRlNxZGt4UkdSQ0UxZzRaRWZEci9pWE9qTGJJWVBDaGQyUVlOMDBkalYvK01YNnMrQk5FUjlWUkpQLzdKY1orc29wZWtjZlk5VnA2MCtRYmtsS0ptanFWSGxPbjBtdmhJNHg5L0phdVNNcm01V3NuSkszMWFaOVZRRkM3VjBsc2FSNFBlWGNkby83dkZyVDJBclpmT1prVGU4dVVKMGpCZVFsUkZIMW80MXRyV1ZMbC9neFJFSVJ1Q3JZem9TMlNLS294TmYxV1dWcE1ua05Mb083UDVHVVQ2WGYvQTVRc2VaN0tHb25RVVNPcHpUeUJmM0lLWVVOVENCczZHRU5Rcy82cTlqVmdMNitrcGVqeXhjdW5sb2JDQnBmV3QyL1ByeHlURFp0SkluajRXUHJmOHpnSlk4T296U3BwOGYzaEorN20yQVpGYTFQdyswTVFCSjlPVE5BbVhqWTFkTk1hUENQYW9yNjhzdlF6dHB0MWhPcEZjaXRNekpsK0VVUC9aQzAwTmJGcDlCMy9MQWYvazg2NEIyNGxhY2ZkcEkrYlRFQ3ZjT3B6ZnlIcWpwZEl1V3FFUzd0Tm1Vb2tOL0xOdUlsb0lsSzQ2TFBuME9GTDcrc25zWFBXeFJ4TENFZHJFTUhuMTR5b2xDMFhYNDdUbUlpV1NtcnI0MG1iM04vamV6dkYzMzZPTm13S2ZTWU9VcDRzQmIrM1lEUFFzdWk5VGFvSHpSSk9LZ0NNdjhYQVRBMG1LaXdPZ24xOU1XaCtIN0xKODQyMnlHbXFvYUdxRG4yWUViVzJhM05pTFN0RTBnV2c5L1UrQ3lPUU1CY1g0MENEVDBUb255eFNyZUIvREVXQ0lDNEVUTGlvaTJxQmVrRVF6SUJWRUFTN0lBaE9sVW9scVlIZmpPclI0RzNBNEsyc2ppZFVCbjk4RGY3ZE9zWXI5R3kraDBUMEVVWmxJUlQ4TDBEWGdSbnFBVmZ3UUdGT1ZLQkF3ZjhDV3N1cWRnME1XVVlSYkFvVUtQaWZFbXh0QWdidENiaEcvbkFGQ2hRb09OK2g2a0JqYXlIZ0dzc1NGSndESERwMEdKdk5wa3lFQWdWbkIySkhXbHA3ZjZoQWdRSUYvd3NRT3ZrZFFCQ0JibEk2T05tWmNaaEZLemR3Ny9KTnZMOHZsMmFkUkNZckw0OVB0KzNsMVkwSHFXM3ZjSWVKOXpmK3hKYjhHbVdKT29LdG1NeC9QVWZlL3R6ZjVmSy92SFF2NlpkTVl2bm9HMmc0aDljeFo2U1RQdjFTVmc0Znd0SHY4My9YS2EvUE9vU3BSdEd3ejJOMFdWYUpnTE43cDY3anE3MkY5SW1ONGRMK1VXemVzb0hIZjhocDNLYTh0MzRQUjRwTGVPdUh6SFlGMitvdDIzamp4d3kyRk5RcXk5VFJRN2JqYXc1OXNKVDkvL255ZDdsK3dqMHZNdTJUNXhHcktqbVhoVy82UWRPWTl1MHFlaVY1NDdEK3ZyUkpKNTVaUVBiT1ltWHpuYjl3bmtaYmE2TzFxUUVib09tNmxSdkE0aHNuTmYwYTJGREdYL2Jud3RoWXdKdG5icDRKTlRsOGMzQm5tME5yaTdOWld1akQ3RGp2YzZvRi9CR1F0M29OdmU1OWlQeVhQNmJXOWpmOHVoQzdydDZaenZIbDY3R2pJV0RrTlBwZk9iNXB4VTFIdG5OczJUZVlheVg4TDd5WWZsZFBSSVdGdkdVZlVyVDNLSGE3bXVCSnMrZ3pQYlhUSk4ySzdhdklYZjBqRFZVbWZBZU5vZTlOczJsa3BhcmJ1NDdTbWlDOFNuNGlkK3RSZk1aY3dlQzVhV2Y4Z2k3NWJpblphM2VCWHhUeHR5d2tOTmJGMlNBM2xITHM3WGNvUDFHRWx6R0dYamNzSkRqYXhRSm9PcnlWSXgrdXhHb1Y4UmswbHY2M3pPaHdnMXV6ZG5GaytRWktqcFlqcm5nVHh4NC8vRVplU3E5eFNVM25PN2IwSzh4V0xWRnpieVEydFE4QWhWKzhnMndjUk9sM0t6RmJmVW44MjkyRUdGMWpzT2JzSjNQSko1aXFyUmppaDlCMzRRM29kUjNmRTVnNDhmcFNncWRjU002U3BWZ2N2dlQ1Mi8wRUd3M0tBK0cyWTdxanNmMHEzZnRJYVRtSnhwQXU3RkViejMzN013dW5Ec05MU1cvdlpLNnF5RitYVGVUVU9VUW1scERmQlMxQ0x0bkpodm5QRXpyeld2cGNkd1dDdWFaSjA3SWNXY09hZVErZ0czb3hmVzZhZzFEVzZENm9vNmJRVHRUczYrZzlieHBGcjl6T3dUWEhPcjFXWFZZdWdXblQ2YmZnZXFUTXovamhtWSthdjl1M25yMzMvWTFUMlY3RXpKcUoybEYzeGhwZjlZYlgrT0haZEtMbTNreGtuSk10Vjk1RXJmdU5lUHpaMjhrdkRLVHY3UXVKSE5JRFM2VzdGdG1Xei9mejdzSTdiUTU5YjVtTEhoT09UcTZqRG9vaUxDME43eEFEUG9NdUpDd3REZis0OE9hNXUvNVJmTkpta25ERk9JN2VlejNaQjZzQUtQcm1YWFkrOXlHaGw4d21RSmZOMWdkZmM1K3hnWjAzWFkreno4WDBtMzhqL2dFU1Zudm45d1Ftc2w1N2tSLy83elg4UjE1TTlLZ0VMT1YxeXZOd2VzRW10L3EzaGNabTVneXBpMDVsSCtiTncwN2V1Yk5mcDMvNzg4NGRWUGRJWm15b2xuM0tBblVJYThaR0tueFNDVGRxa2RMR2NHVHRPdnFQdWI1aldkaFFpY09oUjIrTUppUStncERrNXU5eWxyNU42SFdQMG4rR1MzTUtTUjdtL2lhVUFYKzlpWXI5K3pGWDIvQWZGRWY1cm9Nd3BVK0gxNHE5L25acWoreW5wcUFjLzZUK0hGdXhHN2kyK1cyWmtNYUloMjlEQUtKL3hUemtMbDlCM08wdjBXUEVCVEJpRUlVckI1SDNVejREMHFLeFZsYWlpUXJCTDc0dklRT1NQTForTlZhVENsMVlCSUdENGdnZU5LelQ2NmdDalJoVGpaU0U2TkVrRHNHWTJyTjU3dDcvRDJFM1BFU3ZzY09RZ2I2emg1R2R2b200Z1M3SzlyanI3aVI2Ukgva3FLdkp1UHdEYklBV0s1WnFLNEZoWVFRTVNDSjRZSEtYN3NuMWlKcnBjKzl6eEE4TlZoNkV0ckIwUjJNN0k2dXdvaWlIQlo4ZllORU5VMGswZEJKY3RWWHdqNDNaREEzWHNQN3dTVTdXMk1rckxPWlFoVWxacW5aUXVHNHRHcjJGbzYrL1FVVmVQV1ZyMTJMdDdPR01tOFRJZThaejRNNDVMQitjeXJaL2ZkcmtrREFYRk9BYkY5ZldZVkdSeWRxME5ESlhyS2ZxMEdFYWl1dVJISjN0SFJPN3I3K1lINS85TDVYN0QxT1hYWVJrczdWNFpmb21KcDZWbWxOTFpTWGVJV0ZONzJCOVdDQ1cwbklBK2p6d0FsNTVYL1B0aUtGOGZjbTFGSjV3RTgzN0pESHlwZHM0K2VRQ3ZoaVF6S1lIWHNicU9QTXhtRW9LS2Z2eVRiYmNjQ1BmMzNBanYveFlqazl3czJub0ZlaGlJUkIwV2dTSHcrM2REbVRZcTg5US9zN0RmREV3bVhXM1BrNmRTZXIwbmx3TEdZSnZ2Q0xVMnJWS1pObmNqbmJXbmtFZ3EzRVZsSFlMZFJVRjNQTFJOdTZjTzROeEVWMG8vcFJWakIwWVMyN3VLWEtCN0hvNzl0SlNUbFRFa2hTcytBOWF2NVR5MTI4bGZNSzlxQXhhVkgxSEVwRCtUd29PbXVnMXNLTzVVdFB6bGdmcGVjdUQyRW96V0RkdU5rWFh6aVhhQ1BvZVVaUmtad010TmV2S2pTdHdETG1Cc2YrNjNXWGVQYkdMVXkya3BSclI0V2l4YytUOEhadzRITUdWZTE1R0M5UnVlSTNET3pKZGRIK05iOHN6U0NJUzFDcWtSbnZORFYxUUVBM2xwVUJQd0lHNXRBcS9NSmZid3l2MkFpNTg2MlBBUWRiaUJleC9hd1hHRnhjQUVIN1pRc0l2VzRpekpwOHQweWFRcy9jRytnenZvbEhTcXIrRUlkeEk1T2g3R0hIYm1HN2RUK0NZV1V3WU13dlpVc1dPZVpNNS90MGNVbVluZFhoUGRESi90b3BpYkE0dmZNSUQvNnlDemVRaHpEcjBjS2hsV2E0VmhHNjhYKzExM0xra0hWMTBIeW9Mc2xsYUFDcDlBUE9TWGVyNzlnT0hPRmxSanRWcDVzdnRHU1NFUnpJMUlaVDdab3h2T3NVckgrZFRsVENJeXhOREZUbldXb3ZLLzVIQzNKNU12ZSsycG9DQmZQQXI4amQrVDYrQmw1eGVLYzdhenBGTkJVU21Ec0NSdnhPck5nYWZBTGZwZU0xOERzOTdpc3g0SFdGeHZwUituMEhjWGJmZ0hkV0RoajNwRlB3OEdvcDNjZXpiZmVpbmUxekRweGVoc1VWa3ZQQWhFWDBpTVU2ZGpDNHdDbS96UWJMVzdTRFlZT0x3cXg4RFEzNzFmWWVtam1EWGYxL0JJRTNDZjlDRmhNU0YwblBPTERZOCtTL0M0eDVDeWxwTmZsRWlGMS9vTXRteVAzZ1ZvZWN3ZkVNMVZKekl3eWY1S3JjcGNZZ0R5L1lRUGlZRm9TYUxCcE12dmwxMHZ2djFUdURZOG5meEZjZmlIVGVJME40UnhONndnTU0zUE1iUnlDY0o2ZWxIOWQ0ZkVIdlBvTmVvdUE3T1ZNckJmNjBnYU54SXRGUlNYMm9uT01ibHMrdm9uanJETDA5ZVQyYnBTR1o5OXVTZlZiRFZkNkN0dFJCMnFpZWVlT0pLUVJBU3UrN1l0bE5sVXhGdTBHQ3hPN0RZSFZoRkxjT2pYUjBNanVXZUlzK3FabWhzS0RnY3FQVytKSVg1dGpsTmRIZzRzWDYvZmJjT3Npd0FBQ0FBU1VSQlZBTjZrOG1FMHluaDU5YzlmczNTMGpLQ2c0TlJxVlRuOUJoclFTSHF2c1Bva1J6ZjlKbDNsQkdIWFVOby85Z09WQjRuVmJ1MlU3UnBNN1dsQWdNWFBVMm8wV1VtcVVNVGlCazNnSksxNlJUL2ZBaDk3MVRDQjhiaTFYTXdnVUUxNUh5NUJqTkdrbTZiamFGSEFvRnhqUjBaTlJndnZnanpzUXdzSlNZQ2hxYWc5UTdGbUJwTHdjb3ZxY3F0cDk5ZHQrTWRIa1Y0Y3JQNTZSVVo3M0dPcnNFM2VRdytZaVcxV2Jtb0l4UHhqd3hBMzJzWW9VWWJwNzVLeDFRZnhKQi9MaUlvMUVWRzQ2ak1wV2pUWmtwKzNJY2hkUzdKdDE2Q1NnUkVnZHFNSFJSdDJVVGxMMVVrUHZnMDBmM0N1cVpsRFJ1UDJseE0zUzg1NEJkRllHd1k2ckFFWXNiMHBuaE5Pc1UvSFVEd2pjVTRiamc2Z3l2TzZ0c3ZCVU9nZXg5ckFnZ2I1bUtVTm1jZG9HalRKc29PNXhCOXk2TWtqazBBNlBDZVhOQVNOR3dvV25YN1l6VDBIa3pvZ05nLzUwdmY2VHo2OU5QLytCbFhFTUhhK0s4Z0NIYkFLUWlDSkFpQ0xBaUNMRGlkam85RVViem16ekk1dnlVZjI3bmljRk9nNEUvcHBMRllWdXIxM3YrbExSOWJBeTM0MkVSSmxHVzVVcGt5QlFvVW5POXdPQnkxSGlhbmZIcGZtNEFveTNLRk1tVUtGQ2c0MzJHMVdodkxsVm9MdERZQ1RuUTZuZVhLbENsUW9PQjhSME5EUXgwdGszSlBHeDBWN1haN2lUSmw1d1poWWFIZENod29VS0RnOUtpdXJqNmRLZG9rN0JvelBFU0x4VktxVE5tNUVteGhpbUJUb09Bc29haW9xSzYxUUJPRU5tVlZzaUNBV0ZSVVhIUkcwck8ybHR5S2VoeW5JMlJ3dHRJUUpSbUhVMnI2a2FRL3o0TEk3bngwdVIzV2xkTVZ1elY5TGlrYldvRUNnSXlNZy9YdVIwTnFGbTVDTzQrUGdIcnc0TUdsa3VTMDRPb0Ewem1rZXU1NlpRVjc3VnJDdlp3VTJ2WDgrL3BwakFqVEExYWUrK2hidnM0cXAxUUtZTXRUVnpYVkNuNjFialdQN0NqQXo1MmdNL3JDVWJ4d1VlSWZmelZxOXZERnBIOHo0K2NuU0I5d0Q1TU9yMnBxNUpxLzVCNU8xa3lnbi9FQUI0NGtNUEdwdVUySGJadVFST3lIaHlpOEo1blFwM2ZUcTU5YTJka0svc3l3M0gvLy9RMGRtS0l0L0cyTlQ4c3BvR3RTUnRTd1lOWk1rbnE0MHRwWGZyZUtSUnNPc25yZWNFREY1SkVYY3V0RU14UGZiTnVsZk9xRUNidzRQa0ZaSWdVS0ZIVFA2cEhsdkZZQ1RQTFEzRnJxYTRLQTZEcEc3Z1pOcTFlVFVBUG9HZVNQcGFuR1Q4MlFYbEVFNjl2WExxcXJxOWh5Sklmc0dzdWZhRWtFVkY1ZWdJaEtyMjlSSEM2cXZCQzFJb0pLaGRncTFWelU2MEVFMFV2djRqbFdvT0JQREtmVFdkQktxTFh5dFFteUlBZzBCZy9VZ0N4SlVzNFpPYm50SnQ3Ym1jV2NTWmQxK3FjYUx4MzJrbkpXN1M5aDYvSjFUSjh5aGNjOTZHSCtzUEMvZ011M0xnSGcwdDNMVzN4bHZIRXhybGJGMDJoTnhUanF1MTBBOVBoNGg3S3JGZnpwWWJQWml0clIyTnBOK1JBRVFWWURzdFBwek82MllKUHN2UDdGYWh3SnFTem8zem5OeXJRSmFVeHovMzlaN21FbXZMZWQ2eS9vU2F4R1dUUUZDaFIwalByNitxSjJUTkRUK3RsRXR6UTgyVTNGa0U5WHJXYXJHTWNyVS90M3U5VlZhSFFrVVk1NlRpbjg0QW9VS09nQ1NrdEx5K2lDajYzUkhCVUJ1YXFxS3F2cmw1QkpYNytleitwQ2VPZktGUFJpMTQ2cHJEYzMvWloxN0NRRittRDYrQ2dMcGtDQmdzNlJtWmxaNFNITXBFNU1VUVJCRUx3QnJTUTVpd0d2VHE5Z0xtYjBvaStvMVhuaEpib2NkZHJRWG14Zk9BR0FKOS8rZ1BSaUcxVm1CLzU2TDVJR0QrUERHUU80NzVYMzJPUHd3Vjhqa1ZjcmNlL3NxY3pyRS9LYlQ5QnZ5ZTZoUUlHQ3N3S3JJSWpYNG1walVJK0wyYU5PRUlSNjkyYzJRUkFjb2lnNlZTcFIxbWcwc2lBSWd0NHQyTFlBeWVkdWJCSmwxZldZblFMaEFiNTQvVTRKK1lwZ1U2RGdmd3VTSkdXb1ZPcEZ1Tm9ZZUFvMms0ZGdjN29FbTByV2FEUnlZNDZCTEVsU3BpaUs1MUN3aVlRRytDbXJwRUNCZ203QlpyTmwwZGEzMXRySEpudVlvWWlDSU1pQTdIQTRNcFVwVktCQXdmbUd1cnE2M0hZRVdwT1ByWFVPVzFQd0FKRE5adk5oWlFvVktGQnd2dUhVcVZNRnJRU2FrOU9rZkRRS3VjYVlwbno4K0FsRnNDbFFvT0M4dzlxMTYwcmNnc3ZwSWRUYXBIczBtYUdpNEtvOEFPVFUxTlJ5U1hLZUFIci9wcU4rNTlLMm4xMXdOYVRNVTFaVWdZSS9PV1JaL3VYUlJ4ODF0elpEM1hSRm5wcWFoM0FUbTRyZ1pVQ1NKR212S0lxOS84Z1Q1VldUaTZvd0U2cTcxNVRXNzlRcFJNY0pVQ3NzR3dvVS9GYXcyZXlIMnpWRFpTUUVXUUpCUnBaQmxtUkJsaEdjSURqa3B1QUJnR3kzMi9kMWZpa25Pek1PczJqbEJ1NWR2b24zOStWaWE1YXZaT1hsOGVtMnZieTY4U0MxclczbC9CeWUrWElqOTYzWXpFZVpoWCs2UlNyZnQ1bXhUMzdSNHJPVDI3NWwrcjlXdC92M1A2NVp3ZWpaZDVFODYxSDIxbmg4NGFobDBaUC9ZTkFWZDNQSjRxOS8yNXR3RkhQdFRROHk5SXFGWFB2R0QxMCs3SVVuSCtHL2U2dTZkYWxsLzNtTjBkZituZWdaejNBMjJWQy9XN242LzdOMzduRlIxZm4vZjU0ekY0WmhHRVlZWUVSRVJGSkRSRU15SkRVemM4M016Rnh6eTh5MXNqSXoxM1ZiYTExei9mVTF0MjI3bUd0bWRqTXoxOHpNVE0xWU5EUFh5c3pJQzVrUklSSWlJZ3pETU16bGZINS96SVVad0d2cVZzNzc4VGdQWmM3bDh6bm44em12ODc2K1BwelI3SE0zc0t1b2xCTXRLTC9talpmSkdUV1pubVAvU2NWNWUvQXU5dTByeHRhTW4yLzVpMDh6NS8xdnoraEtCYXRmcCsrNDZhUmQrd2QyMjg1aEZ4VWJVNmJQNDREOTNKRUlIcmZhRHJaaWhnYjcyUENUVFVwSXlGSlQ4QUIvWk5ScXRlNDZkZWZyV0xPcm5DNnBIYmdob3gyYnQrUXphMnVKYjJjREwzLzRCZnNyanJCbzY3NFFZRHRXZG9EZnZicU51TGJKREwwMEdkbmx2dWlBemUyb3AvUm9iY2h2c1IweXVPdnFMcTBjWGNmc2Y3N0h6UGxQc252Vi81RWQwN1NuL0xPUGVMazhnWjJybjJYOXd6ZGUySnRRVzFqMnl0K1pOeXFMR3J2cjlFSDlhQ1ZXdStlTW1ycjFuc2xzV3pnSmRhMlZjL0dxNUc5NGo0SUR4eml3NXh1cTdjZVovL0phcWs1bkd0cExHWDcvaTdTNk9JaTltQmt2RnJKczZiUHNYdlpITE9mdHdkY3ljZEpjaXBvUjQxaXJxNm11ZDUzUmxRYU92SjF0Uy85Q2txdnV4RVN4WnlHRm05YXlyMDBXbmZYbmpvNm1xUGpRRDgyMHRXQWZtNUQ4NE9ZRE9GK3FoMUFIMjZtalI5K3lhL1BtQWh0dzRtSW4yY1RqNDY4Ti9ObkdmcFQ3ZHY4QS9WTUJQZjgzWVFUVWxyRDI2MDlEVGx1eGJSZlhEUnJJdmJsSkZ4V1lPWTRmNXNtWDExSmNyMlZvdWk3a0M3enN0YmNvc2lwWUxzME9PV2ZudHYrdzVzdHZLYXgyczNybFcyeFRSVEx4enB0SmliU3orTVYzMkxYM2F4eFZHdVk4dDR6WWpwbE1HOWJ6WjNHdmJsc1ZpMWZtcy92N0NoU2RrZEUzM2NEZ2pQZ21jQ3Y5aG9mbXZJbE5uOENVMzQrZ2E1eTMwTVYrL0RBTDN0aklubklibWJsOW1UcThGNmRLZzFZYWpyTm8yWHZzK1A0WXNZbUpqQnM5Z3V5MitwTy8wQU91WXRuS3RiejhTU0ZibERVOE5QNG16S2Z3TEd6NVlCMzVYeGRqclQvTUU4OHRRNC9NcldQSGtORkdKdi85dFd6Wjh5MWxqZ2FXdlBRbWVsMGMwKzYrRHRNSnI5YkkwdGMzVWVPcTVxQTlnYUdkbkt6OC9CalQ3NytkakRnTnV6Ly9oQlVGZXlpdmJTRHQwaDVNSFhNMUpnM3MvdTltVnUwOFNJbTlua1dMbG1IUlNBeTk0VWJ5VWcwK0JiNktKeGNzWnM5UkdELzJ0d3k0cE0xUEdFUTd5OTlZdzZadmptRHBlQWxUYnh1S3hRZFVaVVc3ZVdMRlJ5aHRraG1lRlk4anRoUERlN1FMV0hLTC9sM0FyVk9mRHJIdVZpeC9CMk5xZTlaLzhDbTZ4STVNLy8zMVdIeDFtRFVsKzFtMjMwbU85a2VXRkJTUjBPa3laazY0Q2owdTFxOWV4Nm92ZnJDOXNXSHJrV1phbWdkUWhOY2M5Vk9EQzBsQ0tJcUNyY0dEcmRHRjdITzZDVUQ1NktPUEZDSEVqak41RHZzcnEraWNkS3JTS0JkN1MydUpFY2U1Yy9GYjNQcnlCajc0b2VaaThCQXdmZHBzRHVxN01HbFlOc3ZleVEvYXB5STdweWRkdFVkWmxCK2FRcGpjSVowaHVkMHdTUkhrNVdZekpLODdSZzJBaHQ2OUx5T3ZjeUlHY3lKRHJzeW0vNlZ0VDlvRDY2RUR6Rm40SnJPYmJadUt6djNpWk03cUNxcTFDWXkvWlRoais3Vm42b04vWVh0Vms1YTI1SjB0REJvMmhOeW9IeG55aHhleEF6UWNaZFNFUjZtTTZjeVVXNitoWk5QclRQLzMxNmRzYThuOHAxaC9KSnBwZDl6STBPNEpWQjF2T09VNXhRZjJzK09IT3BMajQwblFPZGoweWQ0V3BsMXpTZXQ4S1VONlg0Sk9ZNlQvbGRrTXViSW5DVHJ2aTVuZTlWS0c1S1NqMHhrWWVHVTJneS92Y2dvYTZrYVd2dkltY3FmZWxIKzhuTVY3dGVSR1ZmREV1MThCY0xDa2dwd3I4NWcyZGdnY0tHRE1zNXNBU0VycHhKQXJNNGpWYU9qZE81c2hWMTVHU3BzbTZGKzk3aitrOWVyTHNJNkMwWDk1aVovQ0xmSHFNLzlnZm1FOUUyOGRSdXlQWHpENHJ5dTg2bEZ0TVVNbnpTY2w5eXBHOXpJeWJmWjhWbjhaWk5EYmZtRFRnU2o2ZG9zT0FiWlZiNzdCak5jL1ovU282NGl0M01uSXVVMnVrNW9maXBqOTVIUE0vMjhOSTYrL2lsU2RDd2RRc0h3SlU5NzlqdHQrZTkwWFRwZGJhY1VFOVp1aGlpS0VrUERxYlkxdUJZMUdUWXhlRzRpS0JzRE43WGJ2MEdnMGcwN25JWlIrdjVmbjkzcDRjZktscC9vTVlITzVXYi92Q00rUEdZYXQvQnNtdkxhUmpnK040ZGRNRHE1VTdHWEY5M0hzZVdrZ0ZobG0zdDZmVVIvNEg3ZE1ScmNNNU1PNzRmdlE4eXp0TzJCcHI4T2dpU0NuVndhWkFhMUNRODhlR2FqTGQyTW9qNlJ2ZHNhcExVZU5sZ1J6U3gzQ29EbjNOVzM2bEV5bUQ2L2hzMisrd3laTVpDUTQrR3hmTlhuOXZWcmJtTnQreStEc1M2RG5IYno4MW4xc09UeUoxRDBGN0V2c3c2clJWeUFEYys0Y1NzYlRXNWwvUy9lVHRsVjkzSXErYlF4cHFSM28yU1h0dFBvbkd5ek1lK1ErWHA3N0RFTm0zQWRGM3lPZndtcEs2ZGlKbERnM1dtMDB1ZGtaSWFabWFxZExTSTJwUnhjUlRWNTJ4a2swdGVEdldSeUQrbDJLODBNelNxL0xHT0NwWjlVWDNvL01xTi9lUlBHM0J5bjZzWmJNcnFuTVgxY0VEQ2FoWFFvSjdmUVlOVnF5c3pQSWFhYVlEaHgySFNQN1pNRGwwY3hlT0k4U0oyU2NWZVZmRFV2WDcyZm1xNCtRbDZJaHI5TTRsdlNmeTI3N3JjZ2ZmNEl6YXhEVGgzaXRnd2xYZjBoaDhFZnR4ekxLWXhKSWFVVUR2dmZPMituZlBZYitLV05ZK0p0RkZEOTZFMm0rNCt5R05CYlBIT00xRWZNQUZKYS8vekZUSmovSFpSMjFlMW94UXoyQVI1Szg0Q1lFSUNIOGE3cW8xU29pSXlKUSszSS9oUGNnSWVycTZqNkxqWTA5NVNNNDltTUo5N3oxRlhQdUdFSG5xRlBaMUdyMGFoalcrekpTalpGZ3pLSlAxSFkrSzdmL3FvSE5XVk9MclUwY1p0L2pzY1RHQXhkMlVUQTVRb2ZGM05JME1lcFBIZDFkdHVCSlpxN2REOGc4OGR4OFJuZUpQUG1IYmxjK2cyYSt5NUJCdVNSRXFhbXllM0M0bS93L3lXYmZ2SktOV0dKY1ZOWTBJbGRXWWozNERTTWZQQlE0cm5mSFMxSGdwSFJZOTk1L1A0OHNXRUgyc05mUkpYWmsvditieXNDT0p5L1pTK3ZVQVlBaE4xOVBFbURzMnZIQ1R3cFpqVm9HV2FWQzFraG9aUlgyUmdFME1IUEtJMndScVF6cVpvSGpWVGhjcHhlQk54dDk5NjFXb1ZhNVVjUloreEtvckRWZ01mdElFaU5OSkVUWktEOE82dG9hTE9ZbVd2K0UySmpRanppZ3lGSXJGOVdRbE9BN05pYVdCTWxLcFIzU2ZGMU83cGpjek8vVlNFVlZJME1zSmc2VWZGdmNHcWdGKzllRWQwT1NaYlFvMURjNHNOa2RoUGpZQUdYU3BQdDNyRmp4WmkwUWM2TDdyenQybUR1WGJXUHltQnU1eXFJL2pTZW1vV09pQVpmYkhYZ01MbytFUnY1MUwwMm5qVFZoUEg2TUtnVXNNbFJVSGIzd1ByN3FvNnovNlBNV3p2Y2hwbFF5MjBhZjlOeXhrNmN6ZHZJSjdrMmp4dUVLRFFhc2VtY0RJeWRPWmQ2SVRvQ0w0aTN2aE93dnE2b0N6S0JZcWFqVmtSUWJRWEpDQWdsWmJkajQxTmdUYURncVpMZW5SVVRTMUw0ekMvOCtDL0N3YlA0L21QbmFGcmJQSG41YXo2UnJ0elBNYUpJbFpNVnp4Z0VNbTdXV0tyc2cxWElhdXR5UGUxbjRUUnlsSHp5SUFTaloralpQZkZFU2RJQUUwcG12N3VhMDJ5Zy8za2h5dXppYWtjK2pWU2s0Z29kUWJTQWh4a1pGbFF0U05HQ3ZvYkxlUUZJYjBKbmpLZDNXRlBNdHF6Z0tRZDhSWFdJOENjY3JLVmNnVFE1MVE1VWZxWUVVRTlSV1V5bU1tSU1nUTI0QmhoRll6QkdVVjlUVVB2cjRNMlVuQUxXUWtpclpWM0VRcWRQU1Jxc1JHaFZlalMxSXhNcVZLOTNMbDcveHNTekx3MXAzbDlVeCthWDMwU1Yzb2Zydzk3eCtHRlNSSm03dDZhWDUvdVNyUFJRZnE2TFIwOEE3bnhTU250aVc2OUxqdWJIWHBVd28rQzg5alRuVUh6N0k1NHFGdjdhTCtGVURtNXlRd2EzcHg1anh3bVltWDJIaXNUYytob1MrWHNDcFBjcTJmWWNwUGZBajlxTnE4dis3RzFOQ01qbWR6aTJWazZsVGR4Yi9yZnM1djdlczd0MG9ldWtkRm1mcFNVMXV6K0FlSFVocGw4Q0tyVnZZMlZWaTM4Y2ZzUDRISlVRalgvbkcyd3hPR1UzbHArOVQycUVmZmR2SzZFMERTVnYwQ05OZWE4ZXRWNlJRV1ZMTUhuc2JIaHFaNHowcHFoMEQyaDlqenZNYkdOekp6TUNCbHhPcmhsWC9YZ1h0dXRMWnJHYm45NVdrWjE1ei9nWlNuMGhYZFJrTFZueEVYdHNvY2k3UDRYUys1eHZmWE15WWRSNXM3ODA0OVJKd01mRWtPYjVqMlVkN3lORTdlT0tsRHduTmxUZVIwZDdEb3FVYnFleG1KaU1yaTdRMnA3WTNDemU5emVWemQvSHRaODhTdW94U0RQMTdSUEhVb3JjcDcyVWhMNjhQeVFZVDQ0WmV5bVBQTGlYMnp2NXNXL1VtdXY1WDAxTVBjcjkrSkQ4OWsrbXZwWkFUV2NXcm54NGhOM2h3amVrTTdsakw5cUlHMGpKQ05mdEZMeThqTS9JM2JGKzFrdVJyQjVCK1VrVlU1dGJyKzNIUDh5OTlldkQ3OG1BejFCMENic0svTXFXdlJsUW8xRHNFa2lTanVEMm8xR3ExSklSQUNDSDV0SC81NFljZlRsQ3IxYTM3MlJRWHg1MHFFcU0wT0Z4dUhDNDNqYktXM3NsZU0rT2JIMG81MUtnbUp6VWUzRzdVa2RGa0prUmpUa3lpbTc2UkRWLy93STlLSkErUDZFY25neHAydmRteWpiYmRJYW43ZVptampkWGxLSFZIMGV2MVozUmViVzB0MGRIUnlQS1poTEpWRE9pWHc0R2RPL2pQL3FQY2Njc3dPcVVra2R1NUxiYUtVbFordklkYUtab2VTVkdVVmxSaDE1ckk3aGdNYkZwNlpYY21xaFVOUHlvdWdaeU84Zjh6ME5hWlV4amMxY2dYUlQ5UXI0bWhkM29pR2QyekVPVUhlUHVqUXFJdTdjdTkxM1NrVTNwblV0cDRQMkRYWDNVNS84bmZ6QTlTSWd2K2ZDdUprU3JRUkhIemIzTDQ5c3N2V2ZmSlYxUTZ0UXpzY3hrZDR2UUJOOFkxQTNMNDhidGlTcW9hNk5HakM5RnFzTmRVc09tVFhlUi9mb0NVN0VITXZqV1hpUE8xNkkyazR6Zjl1MUY4c0pqaThtT2tYWnBCZkdUUW9HZ005T21SU212dmEzeFNDbGQxVHdreXExWDA2SkZPSkpEY3NSUEpNVnAwSmpPWFhaTEc0T3kyckZ1L2xjL0xHbmhnd2syMGl6ZlRyMXY3d0F0L1ZiOWVWSlY4ejdlSGo1S1lrazU3azlZWFhPaElla0pVWU03a1pIY2gyRHNVYmJZd29OY2xOSGNrOUwzeUN1b3JTdmp1eCtPa2RlMUdnbDZpWisvZTZLdS9aK1htTDlFa1o3TGd3WnVJMWtpZ01YTFRvQ3dPZkYxRWpiNDkvUklhT0dycXlnM2RMWUg3U2hCVkxOaFZ6MjE5T2dhQ0J5dmZmSThieG81aWUvNFdHaTBaTEhqZ0JxSTBUYzlPWnpMVE96MDBTYVpqOTU3RVdnKzk4ODcydlljQUo5QUlPSHovT2dHWEgrQlVzcXlvSkFtMVNrWlJCRTYzQjZjaUllbDBPdG50ZGt0Q0NGa0lvUkpDYUV0S3Z1K2VrcEt5N1lLOElSZTRwS3IyMjg5eGwrOGpMdTdNS2c5S1MwdEpTa3BDSGE0OENNdEZLa1hmZkVkcXAwNm9uY2U1OWZkL1pPak1weG5mUGNoajVhcGgxTDFQTWVmWjJXUVlaTURKcUJ2R01YYlJDa2FjR2YwaDcrUnZ2Mi9rSCtiOVNDZ0htMDJDZWlRYUpTU25KT0dSSkVsUnk3TFFxbVVSb2RVUUVhRVIvdUNCa0NRSjRZMHZDRUJKVGUxWXBDaWVQVUJtZURqREVwYXdBR3o5Y0EzalpwZWhTSkVNSFRXSmNkMmJ1ZUUxSmxhOU5DZkVMNWpldFJPeFo3aGdreUxFdnBGL21IZXNtUm5xcG1XNmg1QjhPV3orSUtoS2tsSEpFbXBabGdueXN3WEF6ZTEyRjZqVjZsOGRzTGtqWW5ESHBrRkM0cG1ac0xVU0lqNFZOT0ZsdGNKeWNjckVPUzh3OFF6UG1mZmFXMmZjVHIydC90TVQrTlk4U0pJWDFDUUVrb1FreTk0SXMxcUxTcU5GMWtZZ1IrZ0M2UjVJa3VSVDJyeUlhTFZhdDhUR3hrNzV0UTJPUjJmQ0pVZEJ3cG5weG8yVkxrVDhKUkNtQmc5TFdNNnJmRk82Y3graGFSNXV3Q05KVXBER0ppRkpzcEJrRlpKS2c2elJJbXQxeUZvZHFnaDlrOGJXTEo5Tk1admp0eW1LNXpEUTdyemVSZmJ2V3Y3V3RudDRkTU1TbG90UWhCRGxsMS9ldTdTWkNlcmZmSlJGVWdocnJpekxnVTJsVXFGU3lWNWdrMlZaZUR5ZVlGTlVBQjZQeC9PQlNxV2FjRjd2Sk15N0ZwYXdoTVVuRFEwTlcxdlQxb0syRUI0MldaYUZIOE84d09ZRk43azFqYzJQakhWMXR2d1RkYURHYXVXSFk3WVRzd040UXRPZkZVWEI3UW5kZnZXaVZMTmk4U0lXTFZyRSt1MUZ2N3JicXlrdll2V0s1U3hmZHlFQzZFNEtWcSttMG5FUnZOMk9LdGJuZjNiQzNmdTJiNlN3TkxUV2V2ZVdOUlJWdEY0bFdsbThrNVhMbDdObXkrNW04OVBKWndWcldiNXNHWHRLbTdoNFBpdFlUNVh6ZjNQckJ3OSs5MVV6VUhNRDdsQXpsQllhV3hPZ3FWQ3AxRjVnODI4UTREWVNnQkliRzVzUEhBNTlHRFllZVBwVnJsKzBqajhzZTRlK1Q2M2l2NVgrQXVSRy9yN3NiZkwrOWdMcGMxWlNGampKeFVQL2VvMis4M3piNHk5ejZjd2xmRlFqZnVVelZNWmdNRkM2NHkwV3J0N3hpK3U5dTJRTG82YzgxZnBPNng0RzVWM1A5cUpTS2lwck9QK2ZLVHRQVEh1UXdvdUFPMkhkTTM5aS9iNFRFNld0WC93d3E3ZVhoZnkyOGRXL3MrMkF0U1ZHbG13aWQrQ2Q3Q2t0bzdJNjlPR3RuZmQ3N24zaWJjcktLN0RhbTJvN2JIdldNSDMreHYrSkdkcWpSNC92ZmVEVjNBeHRLcVh5RllZR1k1Y1gwSm8ydFUrRms1clNQaVFoU1NoQ0NBVlFQQjdQQnBWS2RWZlR1NnJobmxFanlHenZMUk5admY0OTV1Ui96WVpiZXdNcUJ1ZmxjdGVnQmdZOS8wVlFselU4K2NEdkEzK1ZGMzNKeU0zSDZXT1NmdVc0Wm1MWXJXUFJWWDlDWWNrSnRKN0tNbXJjT2xLYk02UW9Uc3BLeTVBTlpwTE1vVFdRRGxzMTVaVld6RW5KR0hYbkthOU9VWERVbExGcCsxZTQzVzZRWmRUKzVHUkZ3VnEwazFMTFFPYk5uTzZkV0tkMVRVQUdlMDBWbFRaSVRXNjZaNmU5aHJJS0swbXBLZWlDTCtaMlVGSldpU1hsREpkdVZKeVVsWmFqajdVUWE5U0ZkS0t5ckJTMzNreFNyT0gwQU41aHBjb0dsbGd0WmVVMUpDVmJtdTdYTjA0NmN4Sm1RMmc3MVJYbFdKMXFVbElzSWM5SEFSUzdsYklxRzhrcFNhR0p2YzVTNWkzWnljTGRyN1I0ZUJXbHBlak1MV20vRkxlYjZVcytRYTJXVzFoSnhUdDJZT2g3QzdPbVQwT1cxU0huYk4rK2czRlROak41Y0doKzVzRHhrNWlhL1FDbFU0YVFjZ0ZqWlhhN2Zjc0pmR3VlSVArYUFnRWZXOEFNOVd0c2FyVUt0VnFOMm1lUEVteVMrc0tqQ3VDcHFhblpFQmNYMXdSc1JKRFp2cWtVS2lVMkJzY1JmNkd6bXN2UzJrRnR5VWx2NEsyZGV4bVdmVFVYZFh4UnNURjMvQTI4V3VnbVJWOURsYkV2RzljOGowVUg5cklkREI1MEc3cjBuc2pXTW1MNzM4K0t4OFlCc09YVnYzRFgzUFZrWmFaUWV1QUFNNVovenFnc3d6bnYzaE9UaDdOKzV3L1lEbFF4YU1oMXFPVkVGcTVkUm1jZFBEWnhDSnQySDZibVlBMURobHlIbkhvVkc1Zk1QQ1c0amUvZEJuMy9DV3pOMzRKZWRqQmd5Z3M4TVNHUHRmTWZaT3FDcldSME5sTlUyc2lyYTliVE44MklyWFE3Z3diOURsMTZGZzZIaTVvZ2pxRXhtWkdNV3RYQXFLNVFzMk1KWGFkK1NzV09Gd0U0c0cwcG84Yy9TbXpuTEp4VkpReWE5aUt6eC9UR1hyNkwwU051bzhxWUJsVUhTQjN4S010bmp6MXB2OGZudHFYRW5FdnBycy9vbXRzSGEvRlg5Sno0QWdzbURhUnkzeVpHanJrZmJYSUdOUWYzTVhENjh6dzVjUkJRd2Npc2ZsUW1kQ2FXR2c1VW0xaTUvbTJ5TERvMlBuTTNqNnc5UWl5TjJLdUtjR2JjeWZZVnN3THZRa25CS2lvNi80YVFJWFZXTVduRU5XeXJTY0NFQTdldG1zRkRmSXB6NFRwR1RudVdvbDNibUw3OFc2WU9TZmFkVk1XVWtiOWo1OEVERkZmS0RCbXlHVXZ1TFN4NzdDNUt0eTVqd3B6WEtOcFZqcUg4TnRZOXBXUGNySmNZMTk5YkZvbXhKNE03bDdPcW9JUnBRMUl2MkN1eGI5LytMMDlpaGdacGJLRkJneVlUMUd1R3F0VnFTRTV1aDlsc2xxS2pvNldJaUFoWnJWYXJaRm5XU0pJVUtVbVNVWktrQkNHVWZVSW9vc1htckJQM1BmT1NXTGozYU9qdk5jV2k1NnczeGFGV3puSFZIUko1czVlSy9RMnRYTzhDYkVlT1ZJaERodzZkOFhsZmYvMjFhR3gwbkZXYkh6NTNqN2orankrSC9QYkRCMCtLeEY2M2lGcVBJb1J3aUQ5ZmY2bDQ4SVd0UWdoRi9PZTVlOFhWOXkwTUhCdmM3dTJYeFloWFByZjYvbmFLeGtiM1Nkdis4YVBGb20xaW9raHN0ajM2eG1lbjdIZkQxOHRGVEs4N1d0MTMvUE9YUmVLVjk1elJjN2lqVjVTNDVyNW5oTXQvL1FhN3FQMXFsVWpzZUpYNHZ0WjdIMSs4TVVQMHVuMnVFRUlSejk3ZFIvenU4VFhlOXI1YUlXS2tSUEhoajk1emIra1dJZDdhNyt2TGZ4ZUx4Q3Z1OUxiaktoTlh0NDhYcjN4UzVtdlhMWTRkcnhGQ0tPTFJtN3VMKzU3Tjl4MVhKVzdzMWs2OCs2Mzk1SDIrSWxHOHRkOHBYdnZ6OWVMMmY2d1J4ejVaSXJyOWRvNFF3aVorZjNrNzhmZjM5d2doRk9HcDNTTjZ0YjlVZkZIckhjL2EycWJydnZibjY4VHR2dnZZOFBTZG9sMi9lMFc5VUlSb09DaDZ0V2tuUGo3YTFONWJmN3RGM1BqdzBwQStmUEhHSTZManRkTkVvMUNFYUNnVlY3WFRpRWZmTEF3NTVzL1hkeEJQYnlodE9XL2ZuQ1Y2M1BGRXEvZjJ4K3M3aU9jK0xHOTEzK3NQM3lodStkdktDL1plS29xbkNCZ05EQWNHQWJsQU55QlZrcVFFSHhaRnlyS3NVYXZWcW9pSUNEazZPbG95bTgxU2NuSTcwdFBUeWNyS29rK2ZQbHg3N2JXb1pWbmxqeWhJc2l3TFJWRWtYeERCYjQ1Nm5FN25lMXF0TnBSMFRYSHhyN2MzNEU2L2duc3lUcjg4YWR2Ty9jUmYycFd1T2k1cTJiWHJTM3IydlFhakRLQmx3T0E4SHR1NUd5YjJKYk4zZnc3TS9UUGo1Ukw2NXZWbDVNaWgrSW1rQmd6c3k1eTdidVRBeU92b08yZ29RL05PenNsbTZYOFg1UlYzL1d4OGptUEdqZzJZWGpxZGpoM2JDbEQwc0dqdVg3elRxcXFJUGJ0MEtNQ3VuWHNZT01GTEdtREtHa0JQODZrTlh2ZUJiWHdtOTJadFhsS2d6VmlURWFoa3k5WUR4Sm8vWU1hTUQ3MDZqZHRCNGU0U2hxZDNQY2tWOVJnTWFqQWFNQmxpTVJqdE9PdzJzTzVqeTI0N2NzSHJ6TmpxTlJXZDdsTDJITFNSbmExang2b25XYmppUXlxdERtb3Fpa2tkZFhQZ2lqMXplNk1IMENXUm1sQkRWUTNnczhxcnE2c3dKWWV5Z1JUdS9wSzhBWGQ2dFRwZE1nUHowcys3VDlNWWE2S3E3TUk1Tkd0cWFyYlFzdElneEJTVkpFa0pyQnNhRWcwTjhxMnAxV2cwR3E4cDJzd2NGVkpUdHE0Q2VNckx5OWVucHFZK0ZCVHlaTVY3Ry9oWTdzZ3IxMlZ3MnJYSFNpTXJzU09ncEFBQUlBQkpSRUZVZHhZemNzUkZsdUp4aHNYWkNiM0hzRzkzTGdYNUJheGUramVlWExHZGZXdm5JZ01Ubm55WC9ydTJVYkJsQ3pORzlXUDN3bzk0Wk1TSkMwUXFkNnhnOEwxL2IvSDd1Tm12TVcxRTFvVVBwaGhia2c5WTBub3hZb1IvN1lZYkdUVTU5cFNQek92Vjh6cnRGRVZwZXRGUGVxS2VBVU52b25lQzk2OFJJMjRrSlQzbDlBWlA5akZFZU9FVFVGQzBaZ2FQdkpFVTJYKzltMG5ycktkOHkwSW1MUGlDL0kzdjBUWEJ3UG9uNzJSK1JSTVVxZVVUKzBXTkpoTldxN1dWUHNnWGRLUnNWaXNtaytHQ3RiZDE2OGRmTlFNMTEwbk1VQkdhdHhia1cvTUJtK3hQYUdzQ3R3QlZlQ0E2bXBiV2FaK2lLSnQ4c1F2ZS8vQkQvbDFuNXNXYmV4RjVCcy83NkEvZjhJbW5MY1BUREJjVnJsbGkyMUpjWEJMeWxjM092b3pkMi82RFZRRndzbVhqZG5KeWVnWW1sU0VobFJHM1RtRHhNdzlUc1c4L0RwOEQyV3ExazU3ZG40blRadkhRK0w3czJYZmdwRzJiczRlemZ0MTdyR3UyM1RXNDZ5bjdyZFhwVUtxcmZIMDhmVm4yeEJUbUxzMC9yV096K3c2azZzQlhKR1gySmpjM2w5emNYTko4UVlYczNKNFViUEdta3RRVWJtRlhWVk5IWXMxR1NrdThrY0VkMjNZRW5xMDZ2Uys5bGM5WUdZZ2FLdFRVV0lFRUJ2UlA1bUNGTTlCT2RrYm5Wb0gyOUZTYVRBWm0yQ20xeGdhdWw1bWVodEVnVTFGYVNrTFhYblJOTUlCaVkrMjZndE8rYkU1MkwvYnRDYVdLejg2K2pPMWJ0bmxYZzNPVWtiLzk0UG4zZCszWlEwNTJ6Z1Y1UDl4dTkrWVJJMFljQ3dJMkZ5MFRjNE55MTZTUVpOeGczNXBHbzBhcjFhSldxOVYrVVBORlIyVWhTUXJOelZHN3ZXR3R3UkExbUlZalBGN3dIVlpkQkFQbjd2ZStBUEZwZkhMdjFRRE1YdndxNzFjNHFYTzZ1WEhPUzJUMnVKelhidlJxQm05L3ZwOSt2WHBoa2k4cVhDTnorQVR5WHI2SnRLNXZrVFgwUHRZK05abVVRUk9ac3Z4OWNuS3VJa1ZucGNyWW40M2p2R2JYWnl0bU0vR1pqOG5zbWtKeDRXNG1QZktTMTNUQnpVUERlN0JMU1NmSjZLU3d4TTN5OVlOUHJtOW85U1FsbjkzTEs2Y1BaR3J2WjhuSnVneWpJWlZsQmUvUTlUUXV0V1BUVyt4Tzc4d2o0MDdOTUcvTUdzSGlTUjh4c0dkM3VtYW1VMVZ5a0s2ai9zYXJNMGR4MXlOL1orWGczekZnNjRzNDNZTGtJRk4wM01TN0dUcStINXV5T21NeFJ5RGpXL3RCbmNTaTVmOWd6TGlyV05ZMUU2V3FqRUZUbjJmbW1ONDhOUDhWeG82OG5aemx5VmkwRGc2V0NaWnQzVXJPV1ZIZzZabjM2a3VNSG5NRGE1L3FpczVaU2FtdEhmazdWNUUxZER6bUo2NG5iL0NuNk94VldCTFNUdnVxNllOR1lwaDJHd2NkaitGZit5ZHIxQlNHTGIyR25MeHJpWlZkS09ZbW1wK1haOS9CeS9uRkZPK3JRRmR5RTZzZTB6Tmo0WHNNeXpLZS9ZUzFIMkRqTGlQTGw2VmZrUGZqMEtHeVQxb3hRVjBuTUVPRkpNbEIwZEFtVGMydnJXbTFXcVJ1M2JyUjBOQkFRME1EalkwT3FiSFJpY3Zsa2hSRmtSVkZrWVVRYWtEN2YvLzNtUEhoaHgvZUJyVC9KWU5NWldVbFRxZUw1T1F6cXhUYnMyY3ZuVHRmZ3ZZYzE0cldWSlZqZFd0SnNZUytYVTY3bGZMS2Frd0pTWmowMmhiblZOdGxVcEl0cUg4bEh3bTN3MFo1UlJXeGxpUU1PbTN3RHNyS3FraElTVWJiN0Y1dFZlWFlNR0l4dDJJQktFN0tTOHZSbVMzRUdrSWR1dFVWcFRqUVk3R1l6NEdCcDFCUlZncTZXQ3pCYVRtS2s5S1Njb3lXWkV6Nk0wdkpXVDdySm5hblBjd1Q0M3VIdEZOWlhvYk9sSFJhdE80L1JiWXZtY2FUcFRtc25uUCtYVVpDaUxLYmJocjU1M2ZmZmRkT0UwV1JEYkJKa21USHk4UG1sQ1RKTGN1eUlzdXlvdEZvUkVTRWxvZ0luWWlNakNReU1wS29xQ2dNQmdOR281SFkyRFpJUFhyMHdHNjMwOURRZ01QaGtCb2JHM0c1WEZJempqWU5vR3RzZER5aTBXaW1ob0V0TEdFNWY2SllpMW02cVlUeG93YitUOW92V1BVcTZVUEdrV0k0LzE5TnE5WDZVa3lNNlFPZ2dWRHV0WHBKa2hvQWh5UkpMa21Tdk54cmFyWHdBbHNFT3AwWDJQUjZQVkZSVVVSSFJ4TVRFME5jWEp6WEZQV2JveXFWU3FoVUtzbmo4UWhabHZCNFJIQ0psZnZRb1VOcjB0TFNwb2FuWGxoK1BWTEQ4b1hMcUc3Rmoyako3TXVvQVJkK3pWYlptTWI0VVduL3N5Y3ljTlQ0QzliVzVzMWJkalh6clozUXZ5YkxrdkNibno2c0NqSkIxV2kxR2lJaUlvaU0xUG1CVFVXUXI4MFhIWlh4eGtZRDBWRWxQZjJTL1c2M2E3VXN5eVBETDBSWWZoMWk0dFpKazhPUDRYOGdqWTJONjBhTUdGRkZxRi9OQmJna1NRcXdlUkNvRFExbDhRakdMcjl2VGFlTElESlNqNnpSYUFJSEJLZCtCQmZHK3dJSkhyeVZDRytIaHlRc1lRbkxUNVdpb3FKUFd0SFdnb01HbnRZb2lwcW5lR2cwR2pRYUxWcHRCRHFkRHIwK0FHeWFRTGpVcitLcFZMSm96dllCZU16bStBSWh4Q2ZoWVFsTFdNSnl0dUx4ZUhiMDdIblo5eWZSMWxxd2VhaFVUV2FvRjZ2VXFOV2FGdHFhd1JDRldxdlZvTkY0YlZTWHk0dUFicmNiYjBXQ2dxSW9BWEFUUW5nQWQzMTkvYi9kaW5KbHJVdW1YUnRENjVFNWp3QlZzeUozajR2eTR6WWlvZ3pFUllZcHRuL09zcnRnTlRzT1ZJSXVpWEhqaDZNUFA1S3duRU01ZEtqc1B5ZlIxdnlNdVVwb3Nic3F4QVQxNDViZnQ2YlRlUU1KMGRIUnFMVmFMUnFORnJYYTJVb1F3ZDFpb1JmQWs5SWw4KzFMSDV3N01USENrMW51aXVUcGNkZlRKeUVTTDIzUk90Nzlyb3BLeGNTV3Y5MkN2eVQzeUtGdkdiOXNHM0dXZUk1WEhxVnpyenorT2FnTGNuaU1XNVh5SFRCbkN5eWE4YjlwWDZ2VFk1QXJtZnJRRzR3SUExdFl6cUVvaXJLdlg3KytlMXJYMXBxVzFzTy9ZSXNrQ1ZtV1dna2ErRTFRdjdZV2ljRVFoZEVZZ3h3UkVZRlhhL09hcEUzZ0p2dTBOam1Rck9zSHR1UGxoOXo1RDl6MDV1b0hiK2VoakFqbTVIL3Q2N0tYdHVpOWU2NmgrUnJqYjJ6OWxPNTVWN1BzOThONGQ5SzFmTHA1TzE4MVhDUUQ2ZnZYV2dWbEZhSDc3RFZRWEVySVN1ZUtBclp5MkxvTDNHN09hUFZ2QmU5VUtTa0d1ek8wQTdicWx1MmZTREx5aGpCMjlGQk9GUEYzTzZ3VUY1ZGdkN2JzWEUxbEdTV2w1YlRZcFRncEt5bW12TW9hZnJzdllxbXNyTnhZVm5ZNEdOU2NCTllMRFNtaFVrSzF0ZUNnZ2Q4RWJkTFdvcUs4MmxxYk5pYmtpQWdkV20yRXp3SFhsTUdyVXFtRnZ5SWhLSWpnYXd6Mzh1WExWd0xmcGNURzRHZ01wUzJLaTJ5WlFHalFhbEg1bDdPWEFMVVdnK3JpR01qK0ZwajJFT1FOZ3VHRFlJR3ZPRzN4RE9qWkg2Wk1nS3plVUZUdC9mMmhNVEJ1TnBSc2dTRkRZUEFZOE8waTF3eTdmUnlFZTFaQXo3Rk43ZVF2Z0FGallIQXVqQmtMMlNPOHY4OFlDVU5Hd3NneE1DZ2JKaS84aVdicTJtZm8zTGtYVTZiY1E5Zk9QVmk1bzlTM3g4bVRFNitoNzlBN21EcjU5L1RNSG81L2o3MXNCMzB6TG1YODVEOHhmdVMxakptNU5QeUdYNFFpaENpZU5ldlJMMDloaHJZb2VQZVZUWW5nOUE0dnNFVVFFYUh6SmVrYWlJbUpJVFkyRm5Wa3BJNkdCcTg2NTNScWZMNDJkZk1JYWJCSjZnRThkOTg5MFhyYjZCR3Z2L3pwZDdOSFh6djhsRGQweDNYWDhNRHJteGhmdkpmcVl6WGNPZnBhTHJsWWNsM2RFdFd4Z2owK1ptYUhBNHJYdzJOYm9YQVhtTlN3ZGk0ODlCU3NmUXllWEFrSDE4Q0lGWkMvNHN5YTJya05kdTZHRExPM25jQ0hKUk5XellHYUhaQTZFWjZaQkdlVnY2NVVNbTNTLytPeHRkOXdhN2FaZmF0bU0yRGFZNHpZdmhodHpXNFdyTEt5cGVwelVtVlFuTTZBdHJwanpWSzBBLzlFL3NKN3ZSRG9kSWJmOG90UWpoNDkrdDZMTDc3WTJKcTJKa21TM3d6MTBFVC9MVUlqb2NHZ3BpVWlRa3RrcEM2Z3JabE1Kc3ptZU9USVNEMDZuWTRtWDV1R1prbTd3ZWtmSWFrZmsyYiszNy9kNlZjVW53NXQwWmJQdnFCU1orR2VxN0s1NS9KMnZKRy9rd0EvNWE5ZFpNR3RRWnFWVGdmYnRvQWVtRGNUWnN5QWpidGhUK0ZQYjZyblVDK28rZHZ4UzU2dk9zZVVBcnBxYjNyMzJUbi9DaW0wWnpBZzI5dEl4c0JCcUFzL3AxUUJqT24wVDY5a3pMRGJtZnZNSW5hWDFRVEFNN04zZnc2c2VaenhrMmV3WlBrNmJJbzYvSlpmZk5yYTkwODg4Y1FYelVBdFdHTnJrZUxSSE5SYSt0WjB2a2lvSVZCMVlMRWtJa2RGNmRIcEl2SDYyclQ0bzZTaHFSOHFFUVJxQ3Q0SXFmdVYrYzhjLy91QWprdFBIUUJvWk9XbjMzTGJ0VmZTSjlYQzlmMzYwczFWd3FhUytvc0UyTUJvYU9rTFMra0pJMFo0dDNIVFlOVVRaK2F6VTl3dDl4bFBVUHNjWU1vNW45RWFPWmFsMi9jeWYvb3R5Qlc3R056N2NyYVdlVFV6THhYVFI0ekk2OHpXcFg4amIvUk1sUEM3ZnJGcGEydi8rYytuSE0xTVVMKzIxdW9TZThFWUZGeGg0TlhXV3ZyV3pHWXphclVhMldBd29OZEhobWh0VFVtNzZ0YTQybnpnSm5ra1NYS3ZXYm5pVFNIRS9wUGZrZ3BEaElvZnFtcTlMNlNqbGtQMUVnYmR4ZnZWN2o4QURoUkMxeHpJemZWdUtVRjE4SG9qV0N0RGd3b0FDVVlvOVRIeWJQdnNQSGZTWU1ic0xxZWtPcWdYU1psazZmZXhaVmNWQVBzSzhuRm5YZTdsSkhQYXNMcjE5QjQ0akJuekZqSWkzVUZSaVZjM1BERVZVMWd1RW0zdG05bXpaKzlzQmRTY1FmNjFWbEk4WkVKTHAwSzFOYjArc3BtMjVtVStVVWRIRzZtcnE2TyszbzdEMFVCall5Tk9weGFOeG9YTDVVS3RWZ3UzMnkxNVBCNmhlTU56UWdnVUVJb1FlQ1pNdUxQMmhUckxhenVtWERjUFRreGJOUG42SzdsNzFYdDhzVE9lbXFvcWtyTDZNRFJvN1lTTFRkS0d3c3l0a0pNRm1lbmVLT2JRaDJEdU9COSs1SHI1a2JPeXdKQUVHemRDTERCaEl0dzFDQloyQmJNQk9KL1VkdXBVWnM4YXlxMDl1NkEzcGJGaSs0ZGtHaXc4dGVDdmpCclpoK1daYWV6WlY4NkM1ZTk3MlYxckN1bWZlenZtakN6a21oSnFFc1l3TDlmTC9YdGlLcWF3WEF6eTQ0OC9ybjMrK1VXbjhxMkZKT1FHMFJLSmxxQVdFV0QxaUk0MjBxWk5HK0xqNDlINS9DL1NhNis5U21scEtSVVZSemgycklxYW1scnE2cXpZYlBXbnkvcWh2ZTY2SWZwMTY5YXRraVNwOTBudnp1T2l2TGFlaU1pby8xbUM3cytOM2NOaGc0cHFzRmhBZDVxWHJxNEVSUWRtNC85dW9yb2ROc29xcWtoSVRrRWZuS0d0T0ttb0tNZXROcEdjRUVweGZUSXFwckQ4ZWtWUmxKMlptZDJmMnI5L3Z3TXZpMGU5YjdNQmRoK0xoL04wV0R3TUJpK1FtVXd4eE1XWnNWZ1NTVWxKNFpKTExxRkhqeDdvOWQ3UHBicE5temJVMU5SUVYyZkRicStub2NGQlkyTUVXcTBUbDhzYklWV3JWY0x0OXJOK3lIZzhua0N5THVEWnNHR2owMnExdmhvVEUzTnlZRk5wU0lvMWhVYzZTSFFHU0QxRHJTczI0WC9mYjdYT1FHcHJIWmUxV0pKU1d6MUhxemVTbW1vTUQvcEZKc1hGeGUvdjM3L2Z6YWtqb1FwTnE3djd0TFhtdnJVSUg0T0hWMXN6R3IzYVdrSkNRZ0RVQUdTejJZekpaQ0k2Mm9CZUgwVmtwSTZJaUFpZnI2MTFmMXRRMUNLdytJTEoxT1k5UlZIV2g0Y3hMR0VKaTE5Y0x0ZUhsMXpTZVg4elFEdWxiNjAxdjVwR293M1FFdW4xVVVSSEczenBIZWFBYnkwQWJBa0ppY1RHeG1JMHhtQXdST0ZOLzRpZ3FTSkI3VXNCVVlrZ0N2R1FFaXU4aXk2NEtpc3JYdzBQWlZqQ0VoYS9mUG5sbDVzSVRjWU5BSnRQVzNPZlhGdlROS3NIYlNwME54cTl5YmdKQ1lsRVJVV0ZBbHRTVWx2TVpqTnQycGlJam80bU5QMGpJa2hyMHpTUGtyYlEydHEyVGRydWNybVdoSWN6TEdFSlMzMTkvZklycnNnOTFBelVHaytrcmZtWDFHdGVOdVduSkRwUmVrZFNVdHVXSHBISXlFZ3NGZ3R4Y1hIRXhNVGdUZi93SnUxR1JHaDlLU0FCY3pTNHpFbzBxeUYxUzVMazJydDM3MUxnOEs5dGtESXp1NFZwd2NNU2x0TVVJY1RoTld2V2JHMU5VMnVtcllYa3JiVVdDZlZYR1BpNTFwcW5kMFJHUnJZRU5vQ2twQ1RpNCtOcDA2WU5ScU9ScUtnbzlQcElJaUw4NEtZNWJWL2JaWmRsZjJlMzIxOElEMjFZd25MeFNtVmw1Y3F4WTI4LzNreFRPNkcyZGlMZm10Y0UxUklSNGMxWkN3NFl4TWZIazVTVTFHcjczblhJdFZvc0ZxOUo2ZzBrUktQWDZ3T0JCSzAySWxoekU0b1FPTjBlNGZZb1FoRk5yQjkrZE83YUkzdnBzL21GbTBNNEhOd08zdnBvQjlOWGJPTHgvTjBjYVJUaDBROUxXSDZGNG5hN1A4N0p5Zm44TkxTMWtLWDEvTlVGdmxRUFh5VlVSRkRBSUxnZTFJekYwdmFFVmxRZ0FhbDkrMlQ4Z1lTWUdDTUdnd0YvSFdtdzFxYlJ5RGpkb05ab1VLbFVJQVRDMXprL3VCMDZlTUM1WU1OL2x3UUQyN0wzMS9ONmlaTXhmYktJc3g1aXdxclB3aVUxWVFuTHIxQUtDd3ZmTHlzNzNMeTZvQkZvREFZMUg2QXB3VFdoVFZIUUptMHR0QjdVR0FnWXRHK2ZmTUkraEZRT0ppVzFKVDQrSHBPcERkSFJYcE0wTXRKcmtqWnBiVHJNYmFLRklUS0NDSzFHcUZTeThHSmJ3RmIyU0JLdWcwL2Q5N0hMNmZ5WDk4cU41Tzg5d2wzWDVwSFR3Y0xFRy9yZytxYUlyeHZDa3lBc1lmazFpZFZxZmJWWHI1d1NIM2dGZzFwd3dYdHp2aldmdHFacVJWdlRoVlFZbUV4K0U3VHRTZnNSQW15SmlZbFlMQmJNNWpoTXBoaWZTZW9GTjUydXlSejFSVW1GV3ExR0JOR0xOR2x0a2h0d2Jpc29lRVVJOFNWNGNDc0NsY3JYbkt4Q0pXd1VWN3ZDTXlFc1lmbVZpS0lvWHozLy9LTG1BWU9BYjAyU0pDZXQrOVo4SnFoR05HbHJUV1ZUM3B5MWFFeW1HTXhtYjhBZ01USHg5SUVOb0YyN2RpUWtKUGh5MjR3WURGR0JJbmsvQTRnL2tBQUtpcEJRYTlRQklrcEpDakJndXNkZE43VGkrUEhqTDRDZVBwMWlXYlc5a0tNMk94OTgvQ1UvQ0ltR1JuZDROb1FsTEw4UytmYmJiMWZQbURIRDFncW8rVFUyUDZnRnAzaTBXSEdxaWJuRFgrUWU1VnZoUFphRWhBVGF0VHQxT1dRTFlJdUppU0VwS1Ftek9kNlgyOVpra2dhRG15eEJuY01qZEhvOUdwV3ExYVJkSk1rVkYyZmU0SEs1WHJ6N3hpRjA1d2lUWHQvQXAwb2lBMkpWNkhWaFRxNndoT1hYSURhYjdZMnVYUy85SnNnRWJXeW1yYldhak5zVU1OQ0k1cUFXV3VUdUpaQk1Ta29pSmlibWxQMXBGVm5hdDI5UGRYVTFWcXVWK3ZwNlh5RjhJMDZuRTZmVGlhT2huaU8yUm93bUUycVBrOFpHQlVWUkVFSUlSVkVVRUI0aGtDU1FrU1RWSjU5ODh2SlZWMTNWYTlwTnY4a0djTmVWYy9XMmFQNFVIMTZwS2l4aCtSV1lvTHRmZmZXMXphMzQxWUpCellVMzE5VWpTWkxTUEJtM3lhOFdXalpsTUVTSEZMeTNiOS8rdFByVUtyQnBOQnFTazVPcHJhM0ZacXZEYnJmamNEaThsRWFPQnI0K1ZvY3FNZ3BKdUdod0s4SXRKRW10VWdraEZEd2U4TklhU1lvQU53TFgxVmNQTE52ejVhNUZYM3FpRmlkcEZkNzUrSE95Y252VE1ZeHJZUW5MTDE2KytlYWIxUTg4OElEMUpDWm9pMlJjMzZwVExkSTd2SDYxbGxIUXhNUUVrcE9UMFdoT0R6Uk95S2Rxc1ZpYUplNUcrMnBKSTRtUGk4T2tqd0NWQ2ttbFFwSzlxQ3ZMS2lGSkNDUkpTSkt2WWwvQ0pVbVNNL095N0UybEpTWFByaTg2VE0vZWZYbDZjT2Z3akFoTFdIN2hVbHRidXlRam85dUJrMmhyZm1Eeis5WjhBWU1BcUlVdzRucWpvUDVhME9pUVJOem1oZTVuckxINUpTVWxKWWpTeU82ak5Hb2tQVm54Y2JiWnFLKzMwOURRSUJvYkd5V1B4NE5hcmNiajhRaWZCQlpabGlUSm1WaFQrdEtNMy8rK215ekxnOEpUSWl4aCtXV0wyKzNlOHVpanN6OXVCbW9PbW5MV1RoUUZEVFpCaFplMUk1ZzhVdTh6UVUwK0U5UkNTa3JLR2ZYdHBBejRVVkZSSkNjbms1aVk0RXZjamNGZ0NDNlVid29tK0d1N1ZMNUFnbitwUG9JcUV1NjY2KzdqaHc0ZGVnRW9EMCtMc0lUbEZ5MC9mdnJwcCs4OSsreXpEYTJZb0k1bUptaWd3aUEwWUtBV3dacWF2OERkWUlnT0xLUG5OMEdiczNmOEpJME52SUdFMnRyYWdOWVc4TFU1dmRUaGJyY2J0OXVOeCtOQlVacUNDRUlJZk9BbUNTSGNnQ1JKa3B5YTJ2RnpxN1YyUVhSMDlOenczQWhMV0g2WmN2anc0V1Y5Ky9Zcjg0RlhNS0ExTjBIZFFSVUdvbWxSbHRCZ2diL0FQU3JLNEV2dGFFTjh2RGUxNDNRREJtY0ViQUFkT25Ud1JVaHRORFEwME5qb3dPbDA0bkk1ZzRETmpjZmpFUjZQUndvR09KL1dKdmxNVXBja1NTcWpNZWJmalkyT05LMVdlMWQ0aW9RbExMOHNzZGxzYnlRbnQ5OUZhR3BIY3hQVVJXalpWQXNUdElsakxiakFQWlNPcUVPSERtZlZ4OU5hakMwNk9wcjI3ZHNIMFJzRk0rNzZxeEw4eEpTYVU1bWtUcUR4d3cvemx5aUtVaENlSm1FSnl5OUgzRzczUjRzV0xTcWc5UWhvUUdNN21RbnFCeld0TnFKWmRZR0JtQmhUZ0k2b2ZmdjJSRWRIbjFVL1R6dER0bjM3OWxpdDNrVmVRclUydjBucXdlUHg0UEVvSnpKSkVVSklQdFhVT1d6WXNQTHZ2eTkrdmtPSDFBNlNSS2Z3bEFsTFdIN2VJb1FvM3JGang5by8vZW1odWxaTVVBY3RBd2FlRTV1Z1hrMU5wNHYwc1hiNE9kYThCZTdKeWNsblpZS2VrY2JtbDQ0ZE85S3VuVGNGSkZLdkIwMGsrcWlvSUdMS0NMUWFEWklzQzFubFgwaytoRzAzRUVpUUpNblpzV1BhenBxYTQ4L1Jjdm5NaTBhc3BYdFl2MjNQdWJuTzluMFhwTS9iMXErZ3pQcHpmNjZ3ZnR1RmFzMU93Zm90T0g4aGM2VzVmTFpwTlFlclQva0t1b3UvL3UveWZ2MzZselhUMWxvelFmMkp1TDdxQXE4SnF0SDR0YlZRdjVxL1pLcE5tMWppNCtOcDF5NkpqaDA3L3FSN09pTmcwK3YxZEdodjVxMVBDbm45NnpJK0tTbG4wM2VWTktpOU5ySWtQSlJVMTNITTdzUnFkd2k3UzBGV3FZVXNTMEtTVUJUaFhZdFVDT0VXQXBja1NZMnhzWEh2TlRRMFBQVkxBYUluSm85a1c5bTVJMXlxTE16bm1aVmJmdkoxeWo5YnhTTUwxMTZRZTFydzBPL1o4VE9QYTFjV3dqTXJXM2xPTytEZWVlZTJyZDByNS9Ga3dVRzB2NUM1MGx4ZW5uTS8yNHB0SnozbTJMSHFGOU43OU4wVHBLazVnamRKa2hxRFFhM0pCSldFU3FVV1hsRFRpaFBWZ1hyejFjeTBiWnRFaHc0ZFFsYWNPdS9BQnRDMlhYc20vbTRNODM4L2dnZHVHRVMvOWtiMjF6aUppb3JDRUIzRHBSM2FrWjZVUUx1RU5raEN3WVdNTEt1RUlvUUFTY2l5djFCZStCa0FHbk56YzVlNFhLN1hmZ0grQlFxM2ZVaFpqVGRvRWlyZUNhdzRiQlFYbCtJTW1zLzJtaXFLaTB1d3UwTW51YUlvcEE2WnpNYjVrMXU5bHNOV1JVbFoxWm4xMFc2bHBMU2lCZGVkdzFaRFNYRXhOb2Y3RE83SnUzNW9jVWtwZG1mTEY3U21zb3lLNnBZdmhLMnF2TlYrSzA0N0pjWEZWRm50NTNXY0ZBVlNoOERHK1MxL3Q1WEQxbDNnZG52L0R0bnZnSklTc0xlaWVpbDQ3WXFTNHViNzdUejV4QnRNbWpUMmx6VlhGQ2RsSlNYWVdoblg1dU5rdDl2LzNhTkhqK0I4dFJZbUtDMVRPM3hyR0toRU1NZGE4MkNCbnppeUtWK3RQVzNidHYzSmMrQXNxdEFqdUs1dlQ3NzZTc1p1YnlERmtzQ250ZFVZREJHNFhHNGtXY2FHZ3NmalFhMVJDNkZTUzJvWkhJMU9aRmtTRWlLUUFpSzhLU0JTWWVIWGNrRkJ3WXVEQmcxS1VLbFUxLzBjUWExdzNUTk1lK1pkQ2cvYTJYM1hkU3d4cUJrMjlaOU1IWllGd0t2VGIyUjFUVWNxUDlzTWVoM3F6SnZadG1RR1Q5dzdpR1c3UGFRbDZOaXpyNXpacjc3TjJMN3BnSU5aNDRhVFgvZ050cXo3MkxOc1JxQ3RSVk4vdzRvRGNhamR4Nms2V0VqSzZNZFpPMi84S2Z0WVhiaUdBWU0rUUVjMUZmbzhDdFkvVDRJV1ZzNFp5NnpWMzlNNTFjekJ3aUxHUC9FR0Q0M0tPZVU5clZ2d0lGT2Uya1JHVm1mS0R4UXpkKzBYREVuMzZpWExabzluc2ZVSSszYnVZdXJMLzJINnNFeHdWek5yL00yc0xGSkkwZHVwTnZSbTNlcC9ZZEZCeGU0MURCNzFKMUl5czdCVkhpUjcvTk04TlhIZ2VSbXJXZU1ndnhCc1diQm5XZFB2RDQyQmJVVlFVZ0ZEaGdDeHNISWx4QUk3VnNMNEdaQ2VDUWVLWU81eUdKWGpQUzkvQWN6WkJycURZTlZDalFtS2ZBdE5Pb3JXVTJEUFlVbWE3aGN6VjVTYWc0d2MvQnNxREYyUjdRMDRLcDNrK3ZZMUg2ZWV0LzhqUDgzMXpZZUhEeDl1TFZldE5STlVDYTRGOWE4SnF0Rm9SZE1xVTVHQk90Q1lHQk94c1hFa0ppYVNuTnllVHAzT2tidGRDT1dzdHVQSHEvbDQ4d2YwdjJVODE5My9aKzY3N3o1R2ovNHQxMTU3TFZkY2NRV2RMMGxETnNRUmIybExiR3diU1ZLcEpKVldLMHV5ckpKa1dRTlNCSklVSlVtU1NaS2tSS0REdm4xN2h5dUs1MU52d2NMNTJZNGNxUkNIRGgwNjYvTnY2eEVsM3RydmJQSDdLMys4WHNUM0dpVitySGNMSVJUUjBHZ1hRaWlpdHJZbWNNejNHNTRRSGE2ZEduTGUvcmRtaVc2M3pRMzU3ZmtIcnhHWDN6WlhlSVFpWEljTFJMdTRLOFFQbnBQM2EvOWJzNFNtWFQ5eHFFRVJRampFSDMvVFVmenA5YzlhOUtGdS95b1IzK1ZtVVgrS2U2cjlhcFdJYTNlRjJIL000ZjJ0c1VZY3IvUGUyeTNkVk9LUEwyNFhRaWhpNzc5bmlrNDN6QkJDS0dMemM1TkVqNXNmRVkxQ0VVSzR4ZE4zWHluKzhPSTIzL081VHR6eGo3V0I2emMyT2s3K3JCdjNpVDV0RTBWaVl1aDI5ZjN6VDJ1YzlyK2xpRzYzdGZ6OTIzY1UwZTJXME44OFJ4WFJLVkVSbnh6Mi92M2p4NHBvMzA4Ukx0LytENTlUUkdRN1Jldzk2djI3b2FIcDNDOWVteUc2Lys2eFg5UmNlZmZ4c2FMZmZkN24ySGhraCtnVXFSS3ZmRjdkWXB6Y2J0Zk85OTViK3dEd1cyQTRNQmpvQzJRRFhZRU9raVFsK3Q3aEtGbVdJMVFxbFVhdFZxc2lJaUprZzhFZ3hjYkdTbTNidGlVdHJTT1ptZDI0NG9vcnVQYmFheGs5K3JmY2Q5OTkvTzF2ZitPVlYxN200NCszY3Z4NDlWbmpVZlB0ckhtRFRNWW90dXd0SnJKYkg0YkZleWd2Sy9ORlNOMDBOdFJ6eU9yQ2toaUh4dDJJUTNpRUpNbVNKS3VFMS95V0ZDRjVrTHhxcXdUSWtpUkpHUm5kdmk0ck83UXdLU2twVnBLazlGOWFJR0R3eUZ1eDZMM1d2VTdyL1lKWEZHNWk4ak92Y0tDc0dzVlJSYVdjZDFyWDZwMlhpd3pJU2NtWW5kVlluWUR1NU9lazVWNU5zZzVBUy8rQmVTemN1UnZHNW1BcjNjbU1lZjlpOThFS0ZMZU5tbW9qVnVCa1hveGRPd3BJSFhRelhXTjluaU90RVpPMlNkSHZuZWRWWjVKU1VyQlZmUTdBMXEyYjBkcHptRFhqWVFCS1MreFU2QXFCUExMNzltUEc1RDl4YjhWbjVQWHR6NmhoZ3pqcG1sL2FybXd2Ly9HQ2pGdkpkaWhYdzVyNXNOWnJwV0hkNHkyUDhSZnk5QndLR1didi8zVkI0MUJaZlJTak1ma1hOVmQyN2Z5Yy9pT25leDl6UWc1OU00eUJmVTNqOU9sM1NXMlQzbnAwK3YxSG1nVUtnaU9nSi9DcnlhSnBCWGQvc0tBcEFtb3dHSHhyZ3JZaEljRmJCNXFhbW9ySlpEcG5ZM3FXd09aaHhYc2IyQk9md3hQWEdQaitteUtjUGxvamg3Mk9UNDdXMFM0NW1XakZRWDI5MXo4Z3ExUklzcG9JTGNMamNlTlVFRWlTZ2k5eDF3OXd5Y250UDY2cU92cGNYRnpjVENEK2x3UnNPcU9obWJPcGtGR2ovc3BqNno5Z1dIWUs5bDFMc1V6NDhQUUdSZzRhR3ZuTUhkQ0szNE9xVkRGaCtHME1XL1FoOHdkbm9xN2NnaVh6cno4NURDMEg5OC9uckZLQXJOeHJHVEhZOTAwYWNTUEdoRlFBc2tiTVlGL09jUEkzRmJCMDNuMHMzZkpIOHArNTk4UU5PQTh5SXUrM2xEVHJhTmRoRDdEaXNRbm5mT3lNeVRCeVJOUGZJOGRBUXZCK1krdm5tWTNSMk96V1g5WmNrZVhXM0hUQjQxUzE3UFYvdi9IZzlQdS9KN1N3M2RHS1h5MUE5UjIwMkxId3J3bmFNZ0pxOEFVTHZQeHFiZHQ2azNDVGs1UFA2WGllQmJBSjN2L3dRLzVkWjJicDczcGhrQVdlaGdZY0RnY09XdzNyZGh3ak9TMmRSQnhZcmJWNHpGTmlBQUFnQUVsRVFWU0JVcXVveUFoUjV4U1NUcTFHOGJnQlNaRWxDUUY0Q3hTOC9qWWhoR1EyeDYrdnFUbHVpSW1KK2V1cDlaUUxLd2FqbnFyS2F1aWFjT3FEcThzb1ZhZlF0MmNLTXJCK3pidTQwWiszdmhYdjJFeVpZemJKT2lmYkNyYVRNL1lQNEs2a3ROcEkvN3hNMU1DTzlldXBWRTU5VDltNUF5bVo4dytLcXFkNHRUYTNsUnFIQVpQaHhQR21BZjJ2NXFGdHhXVFBHdXZWeGhRN1ZUWGV4cXhXSzdISkdZeWVrRUZ1a3B1OEo0dE9malBhVkJhdmZZL212bTJ0NGFkOTFmVkdzRlo2dmR6K3laK2FCNFpTa0ZPaHQ0OUFvcXJxOUNaZTE1NDVsRCt6QVNlMDBFQi9ybk9sZDA0djVtM2JDcmRtNGF6Y3liWWlLd044KzZ4V3E2TkJpbm5sd1VmKzN6NmEwam9jUUVNSXFMVk03ZkJyYThIOGFxSzF5Z0wvS2xOdDIxcElTZWxBNTg3bm51bm56SUd0NFFpUEYzeUhWUmZCd0xuN0FWQkZXM2lxZHdxRmhWOXlTTkdpUG5LTWIreDF1QnZzdE5GSFl0YnBpRFhGVUgva21LaHY5RWpDSTRSS3JaWmsvTVNVSWZXa2toQkNOcG5hdkdXejFVVkZSVVU5OG5NQ3RnbVQvc0Q0Q1ZleDJHUmd6Q012OHRESW5pYytPR1VBVS9JZXBXL3VOYVFaRk13cDhZRUhYckZqQmFPbS93dDdWUWtsVlRKOSs3NVA1ckFIV1RSajFGbjN6V0wyTUhiUTFhaXBwdEk0bElMUjJhQlZtRDZoTThOeis5QXpXWStjMUI2TGZPcDdNbWFONE5VWkh6RTBwd2NaV1oycExDM2xzWldmTWpqOXhBYmtnSWx6R1ByWmI4bnNlU1VaS1NZT0hpaG04b0wzdVhlUWdiVlBqT2V4OVVmSlNJMWxYMkVSanl4OCs1UlRNeUhwekwvaUZUdGcxSFN3VjBGSkZmVHRDNW5EWUpIUDM1NlVDNE9BckN3d0pNSEdqUkJyaHVYellWeWVOM2hnTFFkdER1UXZPbzBQWGMraDVMa2ZaV3VaazBISjJsL0VYQmx5N3l4ZUhuUTl1UU0vUU8xMFliUTBxYVBMSHYzZGkvYy9zMkZYTTFCekJJR2J0eGEwbFdDQmY2RmpYd1JVdEJZQmpZa3hCZFl0YU44K2hmVDBUa2lTZE03ZlUwbUljNU5uYytUSUVmYnUzY3QzMzMzSG9VTmxIRGxTd2JGanh6aCt2SWE2dWpycTY3MUY5UFgxRFRoZFRzbnRMYUNYUEI2UEpJU1FmWnNhMEFCYUlZUU9pTFRiNisrSmpJejh3N202NGNyS1NweE9GOG5KN1M0WUdGYVZsZURXbTdIRUdzNTdXMjY3bGZJYUI4bEpDU0c1UERXVlpkZ3drSnh3WmhxUDIyR2p2TElhc3lVWnZmYjBzb1BzTlpWVVdkMVlrcExRQm4wNkhiWXF5cXRzV0pKU1R2dGFGMUlVTjVTVmdkRU1wak1ZcW0xTHBqSy9OSStWYzBiL2d1YUttL0xTY2t4QjQzcjgrUEVYWW1QanRqUXpQUnNBdSs5ZnI5WW1TVTdKbTJRZkFEWmZaWUUvVDAwMEFacUI2R2h2L1dkY1hCeUppUmJhdDArbVU2ZE9kT3ZXN1pTTHNweXRxR2JQZnZUY21HZ0dBNUlrMGRqb0xZNTN1ZnlGOFFxSzR2R1hXUGxEc1Q1UUZVMi9CZHU2WHMwTmdLKysrbXJQeUpFalVhdlZ2YzlGUCt2cjYvRjRGSXduY3BxY0I5RWJUUmdpdFJla0xWa1RRVXgwRk0yL2dib29JOGFvTTdmcVpiV1dtSmdZTktyVC82cHFkRkhFeEVTamFvWmRhcTJlTmliVEdWM3JRb29rUTR3SmRHYzRWQ2xadldrOFhFYlhIbDFSL1dMbWlreDAwTGpXMXRhK1BHalF0WnQvL1BGSFZ5dkE1azNDOWZuVkpFbHlOVE0vQTZEbU56LzlDeHo3QXdWdDJyVHhyVm5RTm1CK25tdS8yamtJSHJRdXFhbXBPQndPbkU0dnJaSGI3UXBRR25rOGlnL2t2R0RXQkdwQ2VKTWxGY1ZYVjRvUXd1VjN1cTFiOTc3MCtPUHpsanp5eU1QcWlJaUllN2hvcFlibEM1ZFIzWXFDYmNuc3k2Z0JQUW5MLzBqVXNZd2ROK0lYTzFmcTZ1cGVlK0NCQnpaLzhjVVh6ZlBVbWtETkd3SDFhMm9lZk13ZC9naG84d1JjYndUVW42c1d1c0pVV2xwSFVsTlR6KytRbk9zTGR1blN4Y2ZaNWd5a2YvZ0w1UDJhbTI4VFFnaWYxa1pBbFZNVTRXY0NrZncrdHpsejV0VEV4NXVYM0gzMzNYSkVSTVRkRitmYlkrTFdTWlBESUJLV2N6cFg2dXJxWHYvclgyY1Z2UDc2c29ZZ1RhMGhlUE9ER2tHVkJiSXN0UllCRGZqVnZJU1JocUFhMElSQVdrZVhMbDNPLzdmbW5Ldnpra1NYTGwxb2JHejA4Ylc1L0Z4dEFjMnRLWkZPQklHYlFBaWgrSWhBUWt4VVNaSjQ0SUVweDdSYTdaSTc3cmlEaXhmY3doS1djeWQxZFhXdlAvYllZL25QUHZ0c1BhR0Jnb0EvelFkcUlmbHFYaE5VYmhFQjlTL0UwcHd3MHB1cjFwYlUxQTUwNmRMbHZBUUx6anV3QVVSR1J0SzVjK2NnV2lPdjF0YmthL09hcEQ2ejFBOXV3cWVsK1NPbHdlQW1TUkxTUGZmY2U3U3hzWEh4M1hmZnJlaDB1bnZDVXpNc1lUbHJVSHZ0cjMrZFZYQVNVR3VRcE5CVnBvS1h6Z3VPZ0RacGFrMEp1REV4eG9CZnpaK3Ixcmx6WnlJakl5L0kvWjJ6NEVGcjRLYlQ2UUxnNXZINHdTM0ExZWJYMnZ5YkQ4YkZpWFJCQWJCaHcwYVhKRWw3K3ZUSmRXczBtak1PS1B3dmdnZGhDY3ZQU1dwcmExK2VQSGx5d2VMRkw5cFBwS25SU21WQkU2akp3ci9BY1dnRU5LckZlZ1YrbjlxbGwxNksyV3krWVBkNEZqRjNENThXN21YTzZueit1TEtBVjc3OEljQkQxVmhmdy9LUFBtWEd2emZ4bDNlM1U2eEVjY2tsbDlDaFF3b0o1amdhRkluRDlZM1VDSzF2ZFhsOThPcnlRcVBSb0ZLcGhUK0QyUjkxb1luRHJSRndQUGJZWTdVMzN6enFCYnZkL3ZTRm5oUUg5K3lrMm5HdXJ1WmszNjdkMkU0NzQ2YWNrVG0vNGNCWkVIOVpLNG9wT2dQMmgyMnZQc0s5VDY3NTJiK2tJM09ncUpYbnNXOFhaL0JjVDBmY3pMdHJORnRLN0QvcHVaNUtLa3VMS0trOFM3STc5d0dHWk45TTJVa09PWDc4K0F2WFhETW9QOGluMWtKVG95VU5VWEJodTQrR0tOU25GaG1wOXlYZ2Vxc0s0dVBOV0N4dDZkQWhoVXN1dWVTOHBYV2NPMkJUNmxpenE1d3VxUjI0SWFNZG03ZmtNMnRyQ1FBL0ZKZndkYjNNMWQwN2t4MHJlT0NGVlJ3MnRDVTlQWjFvblliOURSTDFIc0VSUllQUmFNUmdhRVpTNlFNM3Rkb1BibDV5eW1ZRWxZMkFZOE9HRGZWUlVZYVhiRGJiNDc2QnVTQXllK3pWRkpTY0sxN01TaVlPdllraSsra0RZV2xKTWM2emVHRS9XL1U0MHhlc08rM2piVFZIcWFpeS9leUJiZnhVU0dobEZrOGN5aGs4MTlNWXFSMUxXVkdSUnY5VS9VOTZycWVTdGZQL3dMelZoV2Y5b1N3cExqMVJ1WnpqNk5Hano4WEd4bTBKaW42ZURxaDVKRW55K0lNRkxjM1BVTEpJZjFXQm40SW9QVDM5SnpIaFhqZ2ZtMnppOGZIWEJ2NXNZei9LZmJ0L2dQNnBkTzdlazhlNysvZWtzbXZ2ZnJaK1g4MUQyWjF3dVFZU2s5Q085emV1cDZEY2dja2srY3pTUU5vSFByOWF3TmZtZHVNckpjVVQ3SFB6cFlRQUVCMXRYSGI4ZUxYZFpESk40VHpXbHBidVhNZmlOWjlTV09IRS9zeWo3RGJMNUk2NG0yRTUzakxwZlZ0WHMyVDUrMWpsTm95NWR5cURzcnc1T29xOWdrWFB6R2RIMFdGaWt6c3k3dDVwWktjWTJaMi9qRlZidnFERVZzT2lPWC9Gb3BVWk91NFA1SFUrZFFMdDd2eWx6RisxbVlTTXE1ZytiVHdtTmJpdFpTeGU5REs3aTc1SDBjY3hlc0lVQm1lbmdMT2NwK1krejg0ZHV6aGdyV1Rtek8vUUpmZGk1cjBqQWk5RC9zckZyTnI0QlJqYU1tckNKQWIxOVBYZFdjMlN1WSt3N2VBeGhrMzRJNlA2K2twZjNGWldMSnpQcHAzZmt0RDVjcVpPbXhRbzZONjNiVFdMbHI2UERTMFpBMjVpMnEyRE9SK3B1UHUyd3ZKTjNobmNPK1Rad0tvdFVHS0RSWFBBb29XaDR5RFAxL1h0NjJEWkduQWJZT0kweVBGWHVUdmdtUVV3WkRBc1hnQjJBMHlmQmVtKzRYaDE4UXNNSC90QzA3MmM0cm5hcXc2d1lQNGk5cFRVa2pub3Qwd2ROeVJRY3JWajNXSmVYZjFmbkZvamVjTnY0NjZodlZHcTlqSG4vN2QzN3VGUmxIZjcvOHpzSVp2TlpyTXNJUWtoaVRGZ2lDSEVpQmdSSXlJaUlsSkVSS1NJaUpRaVdxcldvclZLS1M4dlB6elVJcVVVclZJOElaNFFFUkVwSXFVVUVSQVJNVWFNTWNRUVlnZ2hoR1d6MmV6T3p2UDdZL1l3dXptQWVLSytQdGMxMTU1blptZWV1ZWYrbnU3dndoZll0YldDdXJLL002dm1uNlFWWHNhTWNZTlB3TkpjTEYvNENCdEx2MkxJMkl1amtheWhnb1VMRjFOV2Zhd2hQam45cVNjZWZXQTMwYldmTFRIbVo3dWdwbXR3SEFWcWtVQkJBb21KMGFDbVZSWDArdlpraUw1ellJc1puOVkza0p0K1Z0c1AvTWVwT0tJeUtUVUpnTHk4UEJSRm9WdEtOK0piV2toT1J1ZHJDeTFoOEFxREcwQWcwQ200aVM1ZG5Lc09IYXByN3RhdDIyM2ZsU3FJUFNPUDRjTnRiSC94RVlwS0xtTkl0cG0wRE0xUFY3NWhFU1B1ZkkwRmkvNlhaRjhsTThaY3hkSnQ3MU9jWW1icGZUZXl6bmNGODJhT283NXlEdzBOYnNpeWs5NnJIOE10RnRZc2VaSGlJVmVRYjRPczVKTklvRldxV1BaeU9RL2Uva3RXekwrRHlYTXNySjQzSGw5OUpZMldiQ2JmTmdwZi9XNXVHMzBaUzNkK3lzQVVPNE9HWG9IczJrMWxiUitHRDc4QzJSYXBYWHh4OWczTTIyWm53Wnhic1hwcUtOMVhIZ2EyTFM4L3g4Z2xEekVoZXhzVHh0NU1jZlc3WkprVkhweHlCWnZOVnpEN3pqc29YZmtvSXlZM3N1dmwyVkMzbFJIai80Y0Z6LzZkYkx1UGJYczB3Y3ZPZ0czYnFzZlpzUGRRek0yeks3ZmRONE9VVG1ablNqWU1Id3BUUjhQWWV5RXQrTjMwWGpEY0FtdVdRUEVRZ3NjMWFGNHZnNmxQd01KSGdGb1lQd3cyN1lFc1N4RFk1c0c2N1RCMU10QUlqUzdBQWREQSt2V1YzRGV2VUhmbGRISmNQZFdNSFh3RitWTWY0dlpSYVN5Yit4dG1laXdzbWo2WXh0MHJHRDN6RlpZdmV3aUgyc0R1YXMyTWxhMHBEQjErQmQ3eURjaFpGekI4ZUJIVzVCTTNDVjQ1N3hjczNKdkJvdnQreWJwRjkxS2hvMnR6cHY2TStuTm5mWEg5OWJiblI0NjhKbFQ3R1p1bkZscGFPd0sxVUZWQlorYW5CbXBkU1V0TEpUTXprMTY5ZXBLWGwvZURNZmx2Qkd6Vit6L2hzVThDUERuajdGaDdsV2ZXYkNUdTdBRmMyU011L0c2ZlBuMUlUMDhub2JtWjFGUTZDaUlFdnkwRWhLT2xIWUliYUlDWW1wcTJmdi8rL2E2c3JNeGJaRmsrLzlzK1VJNjBYcFNrOVNMTlppUy8veUJLOGlLSGJ1bkN2ekJ4MXF1TUtNa0Qrak4xNkZPc1dMdUw0aWtEYVd4b3dKcVZRazV1QVVXRlJib0xNNStVYkR0MnM0VitKU1gwUDlrS0d0bkt6TGx6S000MlVqajN0NlNNZWc3WHZQSFlldzFpNXFROGR1N1pqVnROSVQvZHpjN2R0UXdja1VYL2toS2E5cVNUYk02bHBLUkVCNUxWTEZ5OGxRVjd2bVJZbGhrb1J2Y3BCU052Wk5xb0lVQXhBMmY5bWIyMWtHWFp5c0oxQ3Bzcjd5WGJEUDN1K3dOUDlQb1pwWjdaNUxzYmFGS3NwR1JrMFM4M25YNzlUL3gzTEE0bmFXbHRiaU1ZVDBEemtyT2dKQXRzeHJhQWw1SU5kalAwS3lIcXVDNTZCTzU2QWdZSDkydjAwN0I2Szl3K05QZ0ZEOXk3Q0lha3gyeXNxWkpLVndiWitpSmIyZGJoY1MxYit5eGxHZGV3Y3Zvb1pHRHV2YmVTZjgrTExKbytHRzlESTZyRlJscEdOZ1ZaL1FnZkltc3lKU1VsN0Z2dHBLbFhVZlI1NnRoaHdQSVZHNW01NmlBREM2d1V6NzJISmF2L0VQR25IV3I4b0xYVi9jcklrVGZ1cDIzdHA2NUVpbGFKamtITllEQUlrOG1JMld6U2dWcHNVWHVvWENvelhDNzFRNDVUQnJZalgxVnh5eXNmTWZlbTBlUW02R2VoWU1PbWpieDZQSm5sTnhaRzNhMGxTU0k3TzV2RTR5NHlNOUNab21xVU9ScGFqOGJnb0RQbUJoSWFlUlBpekRQUDNQYmhoN3ViK3ZidE85VmdNQXovdmc1aWRYVXRaWXQveDY1blEvL1d3dENoMnZQcGMvL09mYlArbDM2NTkyUEpLR0xSc3FjWWt2Y05va055Q3VsQmVtSkp5OERhVkU4ajBMVDFhWVpPZnBUaFk2NG14VzZtd2EzZzlaMGd5dUN1cFVaTkl5ZXIvUktlWkljelBFM01aZ1ZGQVc5ZERZM2VHdTRjZDAza2UwWG5vSHJCMkdza3o4N2F6YXhKVjFCZTQyWDQxUHQ1Zk03a1RuWFhiSTRVMHRKaXZpSGJ2NU04cE9wYVdEb0xWdW1JY1QvOWhoeVFtOTZ1WXhsRi9qcmIrUkpYNlhiR2pQNDAvRjV4M2tXb1FQclF5VHc0cG9LcEl5K2syaVV6K2Q1SG1ULzlWS2RxRTNYMUZqS1NOYitmTVMwTlozQS8vWDcveG9zbjNyN214aG0zSHRLWm4zcFFDeGUxUzdSUjZvZ0JOUk1tVTNzTldFS3kzbTFCN2Z2SVZmdldnZTM0a1lQOFl2bFdab3kvbWt2U29wMnA3NzczSC83eXVjelROMStNdlozQ09ZUFJnQ09ySnozUEZLaHFJSWF0aFlBczVHOExtNlFkZ1ZzSURVWElORDMzM0g2ZnJGcjE2cCt1dXVxcXcyYXorY1p2UGRvaXk2Z3hZdmxaV1JrVVRmOGI5NDVxYXdVN2NvcFpzdUlOUUdINXJKOHphOEZ5dGoxeFp5UjJJNnR0dFBjN0Q5N1VVMU9yVUpSanhGdFhnOGVaUVRMd3hMTEhHRFByS1I2YzNBL3dVYm5tejdFNzNtYS9zYVdUSWRkUldlMmpWOWJKMVNlYTB6Sncybko1ZXUxYllmTlBQNTFHelpqTHFCbHpjZFh0Wm5EaDVXeWVPcGxoblpRRVZ1N1p3dHB0QjJKV2swcnhpQ0hZdjRselRtN2IweUFySGNZc2h2RUZYek9VNXNnbXgxSkhUUVAwU3VHRXh6VXIvUXhTQnFTeWZ1VzhkclpoWThyc2hVeVp2WkQ2MGxVVURmdzlVNllPcDVkUlA3OU9OampsSUQzRlMwMkRCOUtzS0hWMU5LclE0dkc4OU5qU2Y3eDl4eDEvY0hVQ2FsNmRXYXFQZnJZQnRVaGhlN3hPcWNPdTYxV1FHaXhzejZGUG56NllUS1lmUEtqMDlZSE5mNXdaLzNnVFMwWnZHZy91NTdtRFlJaDNNS0VvaS8zbGU3ajFyYys1NGRMK3JQOUFpK3ljZGNhWkRFaFBSUFUwc2VLamFqNnBidUtJVDJWdk55ZjJ0RFBJVUtOOWJEcFFDejBYSWF2VDc5ZHkyYlJFWHdJUmJBc3pRaUdFRUdQR1hIc3dMeTl2d2Z2djc2eTMyV3gzOEMwbUl1Zm45Mkw1b2dWWVJoYlFxM0FnK1ZsT3B0NzVLNGJmOVV0eXpQOURybE5tNTZiMTVJeTZoNkg1ZGxZKy9pQmtEeVEzemN5dWZWWDA2bitUM25BaVAwZmg4UVZQVU44L2cvd0JROGc1a1o5TjliSmd6aXhTYmgvRml2bC9adGpFMzJFRHNyS3plWEh0OCt3cWtpbGI5d1RyeWhYMEtsZTV1WDNZdmVRbFhoeVFqQ010aCtFREM4Q1l4WjB6U3JocnlxMHNtUE1yck40YTlqWGFtRHF1NDE0RWNsb0pkdzcxTVhuNkhHWk5Id1dOTmF6ZFhzWGMyYmZqSzkvTW92WFZEQ2twd2xPOWxRWnpEdG5PenYvTzhDbXpHWDRLdXBHN3QwS2pGMXcrMkw0Skdxd3djSEJFRlRnL0J4NWZBUFg5SVg4QTVDVEQ3VE5oNmpTd3pkZUNDbHZXdytEYm9kOEpDWFFhdzRhbXNHMTdPWU5IUld1SHRYZGM4MGRPSW1mdXBkeTFJSThKUS9LcEw5OURxVHVOZTZhTW9HcnJhbGFWK3hqY0w1ZmEzYnVRczdKSjFzM092RjVuOCtDS2Y3QXF3MDF5Umg2RCtuWG1Ncll4Y2VKdzVzKytuNno3ZnM2YVJZOG94eFhseVV0emUvL25VTnNlQlhwQTgwcVMxQ3FFYUNmNVZoOG9NSWFZbW9pUEQ1bWZOaDFUMDBBdDFLdWdUNTgrV0N5bmgzemkxMC9RVmYwYzlSbElUVERoOVN0NC9RcXRzcG5pRENmSG0xdXcybXlZUkNEOFdWSVhKemxKRmtTcm15MzdEMk5MNnNMWlRpdCtJWkdYbTR2VEtGQVVCVldObEZ1cHFnaWJvanF5Um9pOUNkSGgzZ2xKa2dRZ0dob2ExQWNlZUtEc3R0dHVyYkphclQwbFNYTENOMC9RTFI1eUZVcmRQajZ0cUNLK1J4OXkwNVBvMm5NQVZ4WTVXZlBxcTJ4K3Z3eHJabCtHWG53ZWlYRXlub1pLTnF6L0p4czM3eVNyWkRKemZqMmFPRGxDRVM0WmNTVU41WHY0Zkg4MXFiMzZrOW4xQkJORFRtWFVzRE40L3BtVk9NLzlPUS9kTTU0NEdmSXZ1QlJSdFlOWDMvZ1hDZjNHTVgxMEVUMzdGSk9WckdWNkorV2N4NEFzaWQwZmZVcWR4OHpGNTJtTzNZSkxSNU5ycWVPMVYxL240Mm9YRncrOWd1eFU3ZGc0TTNwVGtKTWEzdGMreFJlVEhDOVRNbW9jbHJvUFdiVnFIWjhlT0VhL1M0WnlUcThlR0NTRkQ3ZjlpdzNyLzBuWlZ4Si9XUEFvNS9WSS9FNG03dHN2dzBjVjBQZENjQitFNmhvNGQxQUUyQzRaQVEzbDhQbCtTTzBGbVYwaDYxd1kwQjFXdlFvN1BvSzBQakQ0ZkxBWUlyZjVBUU1ocnAzdFpYZnhNK2ZwWFV3YmUwblUrKzBlVjFNUzE0Njdpcy9mWGMvYXR6WlIzeHJIa0tIRE9DUFZqb3lYN1p2ZjVxMzE3L0JsU3pjZS9zc0RuSmtVT2VlWjU1WndWdHd4UGl3cngyMTBjbjUrZHFmSDRleUxobUUvOUFFdnJYdTNNbWZ3MVkrdFgvblkrODNIajNlazBLRlA1L0FGQVMwcStUWTIraGxxdmhJZnI1bWZpWW4yb0FTUkpoU3BCUXA2VVZCUWdNMW00M1FaMzVvZTI2bU9ZOGVPVVZwYVNrWEZGeHc0Y0lDNnVqcU9IR21JMFhGckNSYld0K0x6K1NSL1VNdE5WVlZKVmRXUW5wc0JNS0RwdVptRUVIRm9jOVJTVnZaSlVXNXU3aFNEd1hEcEQ2SEg5dFA0TVF3UGQ0NitrbEVMMzJKSXR2VzAyak5GVWY2OWZmdjJOUjAwTSs2Z1Q0SHdDMEZBbHVXQVB2bTIvVHkxV0YyMVVFcUhGdjBzS0NnZ0tTbnB0RG9teGg5NkI1S1NrdWpUcDQvTzlOU2JsbEZFVFUvZkpOQjZKMmltYWRqSklVSit0NkJacWdKcWZuNmYzYzgvLzN6dG1ESFhWQUUzbjg2WFQvbXVUZXl0YW16bkV6dkR4ZzdqcDBLd0gycFlXYmo2MzkvN1ZuME5GYXpadktmZHozS0xoNUxqTkQ3LytPT1BiN3I3N251T0U1M09FV3QrNnR2aytTVkpEa2dTcXI1TXFyMktnbENlV3F6NXFSZUxQTjFBN2JRQU5nQ0h3MEdmUHZrNlVKTjBqMUlZNENSSkNpMUNraVJKODdrcFFVQlRVVlVoOVBsdElaOGJJRzY0NFlaYTRLK2ZmYmF2eW1wTm1BNTBQeDB2bjR5OEl1d1o3VVF6WlNPMm45RGwvOXd3MmpNWVZHS2pIYnZxSzdmSHRUd3hNVHNrNDYxUDU5Q2JvTzMxL2d3QUFhMnlSMWJiTDJqWGZHb2g4ek1VL2RTWVdnalU4ci9WemxJL09tQUQ2TktsU3pEM0pRSm1Hb2lGbUpzVWZoM0wzQUJKVlNVVlZDa0VhbnJtQnFoQjlpWjY5ODVidlduVHBxcnUzZE51TWhnTVEwNjNFMksxT2JIK2hHQS9qZEQ5ekd3aEpTYlJUMUdVelR0MjdIaWpwT1RpR2pydnpxNnZKR2l2OFVxb3FYR2Jpb0pJOG0xSGdZSjh1blRwY3RvZXQrOU0zZU5VUm54OFBIYTdQYXpmRmdva2hMSTZPZ2dhZEpZd0U3WnRRd0FIaUdlZWVlYXcxV3JkMGE5ZlA4K3BLSVQ4Tkg0YVA5UTRkdXpZMHZ2dXUvLzFXMjY1NVlqTzlEeFJ6V2RVTWJ0T2VpZ21uY09pNjlJZUt6Mms5Nm4xT2ExQkRVNkQ0RUVISjQ5UFBpbmppeSsrb0tibUFIVjFoemh5NUFoTlRVMjRYQzZhbTV2eGVEenRCQlQ4S0VvZ0ZGQ0lEU29ZMFlJS1pvSkJCU0R1d0lIcWkzdjA2REZaa3FSemY3cHNmaHFuNjFCVmRjOW5uMzIyS2orL1QzbVFwY1g2MC9RbWFKVHBpU2JqSFdKcUl0TFEyRVRIUGpXOStSbk4xRTVIbjlxM3h0aWFYQzRPdWYzWUxHWmtQV2NLS05RMkhzTWpETmpNMFJtNnJTMHRIR3hxSmk0dURwUGNNZEd5V0N3NEhJNXdUOUxvNmdUQ3ZyaVk1R2FwSS9JV1NnSFJtNmFoMTQ4Kyt1akJnb0tDblRrNU9YNmowZmk5ZzV1cnVwUjNQcTduckt5VWsvK1J0NTVWYTNiUTgrd3p2M0h6a05OcFZPM2R5dnAzdGxEWFlpR25SOWZ2ZndkTzhiaHVYZnNpY2xvQjlyanZacmZjYnZmelR6NjU5T1dSSTBjZXBQMTZUMzBxaDFmcXVPZW5ydTdUSEdacVF2Rmh0am13MnhKSVRJdzBYd2xKRDRWVU9nb0tDazZZSnJWM3l6b0NYWHVTYUpaQWJlVEZKNTloNi91N3FQZlpPQ3Z6KzlOaisvbytOdFhOci8reWt0MStNNmx4QVdyOThUdzY2U291VEltbjV2T1B1ZTdGSFRnZGRqeXU0M1R2MVplL1gxZE1vZ3hQclZyRmtyTGpaRHJpT0hEVXl5MWpSakMxVDhjWGMySmlJbjM3OWtXV1pXVFpFSHlNTEpLa2Y0d0VGQ1JKd3UvM2kyQ0ZnaEJDb0twcVZDQWhxUEdtQ2swNkpIRGRkZU5xZ0wvVjFCelltNTZlZnBNa1NkOXFaNVQxUzJkUmtUNmVHU1BhcHJ6WDc5M0l3ZzFHUnBRVW5Qd0tQVlhNZjNBcGc4Y013ZmxmQkZ4NzFpeGtWV01CY3ljUGJmTlozYlluR0RUbE9hWlAvaGx5aXVjNzI0ZmE3Uzh6ZDdQQzQvZE8rSmFPcThxS0JYOWtWTUY0TXI3bGtMV3FxaDk5L3ZubnEvTHl6djVNeDlKaU83TjN4TklVU1pJQ1FxaXFFQWpaYUZJTkJnT1JFcWxJbmxyZG9hOHdkYzBpTVRFeHFxQTlVaWFsVlJRa0pDUjBmbCtvM3N6a1dTK3daY3VJa0ljUW04M0czZzFQc2JiQ3dvaUJlYWN4c01rbWJoazdtb0pNTFJxeWF0MGJ6TjM0TVc5TktNYnFUT2ZWMzk1RXV0V0U2bk16YWNGenZGU2V4OVE4T3hkZWNCRTNqRTdGTEVQTnZnOFl0bklyMS9RWlEyZjM1WVNFQkFvTEM5Rk9pSXpCMEI3SVNVRmdrd21LVTZKRlRQM0JvRUs0SVROaHBOTVlteXBKVWlpb29BS0JqSXpNelU4OXRleVRjZVBHamJWYXJkUGF2WHMyMVZQdlVzbktTb3M2ZUNyZ2RUWFE0SmJKU285Y0ZxcWlVRjMyQWFXK0lTaUtnaXdia2VYd3hDVjcrQXpXanpTMnVWamNqZlg0ekU3c3NvYzZ0MHhHaWozOG1XTHZ4ODd0eTl0VUFDbEtkQ21PYkRSR3ZxUDZxS211d1pLY1RyTE5FcnM1a0ZYcXFxc3dPdEpKdG4vNzJlT3FxbEJYOVFtN2ErenRIQWVGbmR2ZW85L1lXN2huNW5oazQ4bE5TOFhyb3JxMmtiU01tRDZsS3FpS20rcmFKdEt6TThLMXFxcXE0cTZ0WU10dWIzQWZ0RGwwd3VQcWRkSGdoalNubVpyYUp0SXowc0xmVVJTVlJScy9iVk8wcnlwS1ZDUlQvMzhCbXVxcWNjdjJObjFlUTJvb0IvZVhQLzIzZjZ6WThzRC9tK3NtRWlEUWwwZnB6ZEQyVEU5VmtpUlZWVFhyUktnaXVwbXgyWXdzeThSWnJKaGtpRSt3NFhBNHRNVnV3MktPSXkwOWc5emNzNElWQldadER0VTJrcDZSUmtOTk5iYTBMS3k2VS9Yc3dnY1lNdmwvSXRGNzJjSElDUk94Tkw3TDNxb083dEZOOWRTNUZMS3kwcU91SjhYcnBxYTJIa2RLT283WStSbzhTbzIxMWZnc3pxZ2VyS3JQUTNWdHc2bEVSZU1veUl4dzdpeG5FdDVEZmdDY1hTTXdKWnNUeUxBYmFmRnBGMXRlajRpQ1pvclRqcXo0YVQyUnBrM1FMSTJBbXlFRzVDS3NMY0xncEJEQVNaSWtpZERGSGdRNGdTNWkyZzU3VTI2K2VVcmc1cHVuUEZsZS90a0hPVGs1RXd3R3d5V2hnL24wZlQ5bnp1cEs4dE5rS3R6cHJGNzNFdm5KWmxZL2NpT3pWaDdBYmpRZ2U2b3hGOTNDdW1Vek1WZHZZZmlVLzZWbTMyNmFiSGRUc2NwSjl1QWJXVHByRXVCbDlxUlJiTno3R2U3Q1d5bGRIbXhWN3Q1RGJ0YlBLQ2pKWS92ZVJnYjBTMlBmN3IzTVcvMHhZNG9jckh4NEJvK3YyY0cyS2lmVk5XOFRKdmMxV3hnKy92Nmc0cWFQMHAyN1diVDlLSlA2MmFndjI4Q1k4Yi9DbkpGUFUwVVpRMlkreGlQVE5OYWtsTDZJWS94elRNazl4dFlhZ2FkUlljV3VIZlQ3TnFQNDNuSW1qZm9WWmRXbFZMbTNNWHozQzFoeUwyZnRrbnZBVmNyNHNiK2h2THlVR25VWHc3Yy9ROUhvTzNoa3hzZ1Rzcjh4TS81R2ZtRU9lMHRyZWVURk54azNJSXVtN1V2Sm1mQVlSU2xXTEZhRmZlNTBObXg4aFY3Mkp1NFpmejFiOTFWUVZhY3lmUGg3NER5SGwxOStCQ2QwZUZ3bkQraE9WZklBcW5mdkpHL0FoYmdxUDZKbzJ0OVpmTnNReWpjczViYUhuMmZ2OXUwczJkUEMySEQxazR1N3h2Mk1YZlVhdEZYdjI4M1FXYSt3N000UnFLNUtwbzI5anQwZUp3NWZQUlQ4bkxYTDdnMVdUTlJ4Y1dyLy81d3hyT2pORjVhdnErcUFwZW5OVUY4UTBIeDZsaGE2YVV0YXVFM0VtUXlpVlZFSjlmMDBHK0dyMm9Pb0JoUHlWNGVRVkxBbUp0RzFxNU5Ebi95SDF5czlaR2VrOFB3enk3bmwwWmM1N3p3THkrKzlodm1ibXJHN1A4V1ljUjQyNVN2cWs2OWs5OHR6Z3BkSFBTKytYTWJzZTA4MkZ1ZmxpYWN4dkRnQUFDQUFTVVJCVkh0djRwRjFWZVNtbUtsMEpiTnEvU3ZrT1kxc2ZmbytKai84TmdXNTZWU1hsVEx3dHIrdytNN2dmR2phUlhiZXJZd2RuY3FHWFVkUVhJM01XL01SK2FXUE1QemhMUlE1QkUxTnRlZzZScDNDNGp2T3JRdi93WkpQRHJmNXJIWi9LUmZPZjRVRDN0amZCWGg2NVVvbXYvbngxOXFXcWdiNCtPTzl2UGJhYXl4YTlCZnV1Ky8zL1BLWHYrUzY2OFl5Yk5nd0xycG9JRVZGUmVUbDlTWTdPNXZ1M2J1VG5Kd3NKU1VsU1FrSlZpa3VMazQybVV3R2c4RmdsR1haSk10eW5DUkpWa21TRWlWSjZpSkpVZ3FRQWVRQVp3TkZ2WHIxR3REWWVPVC9DYUhXTkgrNlNuVHRmcUhZMzZ3SUlWVHh0MTlkS241Mi83TkNDRlc4OXFjYlJMY0xKb3ZqQVZVSWY0TzQrdXl1NHFrZERVSUlWUWloaWlkL2U0VzQ1YkV0NGRmNjVkTlhab3MrTjh5UHZIZDh0emlyeDZYaXNGREV6ZWNsaVgrODN5aGVlK0FHOGF2SE5rVytjM2lMNk5Iak1uRzRuZlVKb1lwM0h2dTFPUGZxZTdUOUVXNXg4L2s5eEVOdmxnb2hWQkU0VmlyT3l6eGJmSEJNKzY3LzR4WENZT2dpbm5xM1d2dTkzeU5hL08ydlZ3aFZ2UC84YkpHYW1ocXpkQmRQL3J1Mnc5K0VscmYvK2d0eDFlK1d0ZnZaRzMrNlNWejd4eFVuWEljUXFoQ0JPbkZwank3aStRL3FoUkNxK09TVjJhTGJoVk5GcTFERjBmZWVFSWI0czhTT3cxNGhoQ3IrL011THhFMFByUTMvOXZQWDVvcysxODl1ZjczdEhOZWJMa2dWcjN6cUU4Lzg3aXB4NDU5V2l5UHZMaFY5cnB1cis1MVBYTjhuUWJ6eWVmdjcrdFdISzBYdjNpWGk0K0QrUEhYM1ZlTEszeTRUQWFFS0lUemlqc3ZPRW45NXAxcW9hcUNtcnU2akJUTDhIQmdMakFhdUFpNEhCZ0VYQUVYQnVaa0RaRWlTbEJLY3U0bVNKRmxsV1k2VFpkbGtNQmlNSnBQSllKUWxHY2tnSmRrVEpBa2taMnAzc3JPelNYUEVZYktuY3RGRkE3bDg4UG1ZSkNpNWVoTDMzZmQ3SG5yb0lWNTc3VFUrL25ndnJyS1ZkT3Q5TGMxQzVibmZYYzJ2SDl2TWwyODhUT1pWZHlJQzVaeDc1aVVjQ2w2ZmdmM3I2Tkw5TWc2M2MrMisvZGRidU9xM3k2TGUrK0xOaDhtODhBYU8rclhYci8rLzYvblovU3NRUXVYNHNTWUNvZlVlM1U3UHJ1ZnlSZkI3NHVoT3pqQ1orTU1MdTRMcjh0TFNxdkRwSzNPSlAvTUtEcldxQ09INkJubHNxcCsvdmZvV1NxOEx1Q1UvMnFCc2J2eUtXMS8rZ1B0dnVJYU1HSWZxZXp2L3cvTU5kbDZZOHZYMG1pUkpvcUNnQUtQUmlORm93R0F3aGhtY0xPc2ZvM3h4WWIrYkpDa2g5aVpVVlEwcmh1allXNmkvUWlERTNpb3FLaFNucyt1cXQ5NWE5MzdYUTl0SE93ZGNlbE4yVUNsMjZKRExtUC9FYm1BaUFNV0RCbUdUQWRuSjRJRTU3TnBkeXVUaVFhZDBhR1diSFJzeWRvY2R1ODJPeldiRDdUazVtZTdxcmM4eWZVazU2N2E4b2UyUHE0ek5lenpJbTU3ajNpMGE4L1FwMVpSV3VPblhUNlB3NXB4QmpCOFlsT0F3V3VqTUVPMC9ZUTUxRStiOHNNNjYycjNzOWVRek9GaTluajlrS01iSnY2WmFoV1RBbmorUS9zbWFBVHBrME1Vc1c3c0xHSEdLRzdOaXN4bkJic05oYzJLemUvQ2U1TG53TlpReWJ2ejl6SC94WHhRRTkyZlR4aTM0Y3JPNTc5N1BBQ2gzcXh4NWYvdUtGVisxYnBrNDhjYWpKMkJwb1JwUG55UkpvVFNPZ0M3cUtmVDVhVDdGTDR4eDhaamo0akViUEtMVkQ5YXU4YmdQK2VuYW96dDJleEoyZXlLWjl0MGtkVTJoUjQ4TUVrUWpMeTVkVEhXREIxVngwOVJvSjlTQndXNnpZM1hZY2RvOElOdXc0aWJrRGZVMk5lQ3hPemhab3I5MTg3K3hJdlBnck45ckhMZXlubEx2SG1BOGFsTUY5OTcxSjNhV1ZlRlZmZFM3RzJod1EwNW81Wlo4Sm8zdEYzeGh4aEwwTldUM3Y0QVVNNER0VklFdHdJdHZ2TVYvNURONTZzcjhLR3V5MWQzQXJjOXU1TnFycitLcXJPaE0wNC8zdnM4ZnRydjR4OVFSZEQxRlpaTzh2RHhDemsrajBZakJFQUs2aUptcStlSEN2amdSZkpTQ0VWR2RiellLNEZRZHdJWEFMUUFvVjE0NVlqK3dKUE95WDc2cktNcTFScVB4aXBOeEtuL3pJVWRzOVpOWW5hZDJOK09uL0puRnEvOUZMNGN4dkIrcU9abGhZNjRtSzdpcTBhT3ZKU2MzVXU4b1cyMmNyRmR0NytvRlRKcnpYSnYzNzMzOG40d2ZrTUtQYjhqaGg4alpPQWxaSWFXSjI4ZmZRTW5zcHhoVGxCYTF2Z0ZEcjJaa2dRMUZVZDQrNjZ4ZUc2Wk9IWGRnZVFUUU9nSTF2WTlOMFptZVlYOXhxRStJTEJ1RTBTRHdla0gxdWtWRGF6TUlnYi9GUzBLQ2pUaXpqTWxxbzB1WExqaWREcXhHaWE2cFBlaDVabGZtL2ZJUFhMOXNNOU9IRldDczMweGF3UjlpL20zN2M5Sml0MlAydUhCQjI4Q0wzTjdWb1pKVmRER2pSNGR1L2xjejFaRUJLTnczNldvc2s1NW53eE9ETUZOTmNmSkYwZFBmYXNQU0RuTEpzdkViQkE4UXZQbjIyN3gwUEpsbmYzNGU4YnFkVmp4TjNQSFVlZ1lPR2NhTnZhUC8zdWZsSC9HYlRRZFo4b3VSbkdIOVppcjRQWHYyeEd3MkJ3SE9pTWtVRFhEdE1MY2d3RWxTUkhvOFVxRVFZbTI2d0VKQXg5N0NrK2pBTzA5K1lESTlXVnBUYytDZHQ5L1plRjIvL2xQQ1NyMDd0MnpCclU3R3BqYXllVnNsbzZaR1pLUnRWaHVORGZYZjdmWG5xMmY2dUJzWStlQUxETXZYSFh0N0FVUHlQVlM3bkl3YnJrbnV1QnNhTU5wTzdSemtEWnZLMnY3ajJzeGNaOHFKUS9sV2F5SU5EViszbzVPUGhUT25ZeDB5ZzJramduZnA5QUlLcldWczN0M0FoSDdKbEczYWlGSjRQbGt5ZUFCWDJWWjJOZmdvVGphemFjdC82Ti92OTVGOXNOdHcxZGVnOEYyVzNhZ3N2ZWRHYWdwL3paSUpBNkkrR1RKMElLOStYck5yMHVDU04zdWZsZnRwNk9ZWkEyanRnSnJrbHlRTitJUVFBUUVCT1p4d2l4b0lxQUxKZ05sb0VrYWpFZUZyQnRra3pzaE0xd1FpWlM4ZmYvWVZSbHNpNmFsZCtkenRvVnUzYmppdFhnNDJCUmllY1NiNXVRa2NjWGRsME1BQ2pNRDJkZXVvUDhuN3M1emRqMExmUHNvYW9TUUcyZEtjM2FuY1dCVWxFejlvOENYTW1mOFplZjN2UWJzSEs1cHNQaDZxcXoxTUxTbkdMRVBWcGpYc1BZV21YVi8vM0xZYzRvRk5YK0N5eERGa3ZxWVFhdTZXdzd2VEwyWEhoeCt5c2U0NEg3eStsbis4SG1RSGx3L2ovZ0daL1AydDk2aHRsTGxoNFRQQkZjV3piT1lFK3A1aS85VE16RXdkdUpuUWtnMk5ZVk0xbXNXRmdVNElJYVJnUGFtUXBFQW9WeTRjV05DeHR4REFSYkUzd0orUmtma3YyUmovM3I4L2VYNllFT0k2SUMrRlNvWU51Z3lqcHdaenllK1pNQ0J5ZG9lTnY0VkY0MzVGMGVvSHlCdDJDeS9PbjByZDloY1pPL052ZUJxcXFHcVFLU2w1azRLUmQvRDRqRTcwdDd6N0dEZnNsOVI2WGRUWFZ6T3k1R0xNR1JlejhjWDUxRzk2a2VXNzZpaWNlek12ejlWTzdid1YvMlprdnBVSG4vNEg0OGIvakRVTDhyRDQ2cWwyOTJEanJwVmtuTUp4TjF2dFpGaFBMYStoLzhoSk9CNi9nWUtpRjNBV1hjT1dwMmVkRkxCdFhQa2NqclJSRVdDVDAxaXcrQStNSFhNaEt3cHlLQzJyWmZHS056R2pBWnM5emM2OUl5L0ZhbFVwZDJldzdwR0lRbTM2Z05FTTVSb0tDOC9EbG40QjY5Y3Z3ZG5KY2Uxc3pKOTJCZXZLM095cjlMQjMzRVVzdERwWXNPcE5pdTE3ZVhEUmVzaXJvVi9SMzdUcllPWmYrZU1ORjMwMjlCZXoxdnlxNzZBUGV6OGNVSFJSVEwwaWh5K1dvVW5nRjVvYWh4S2NoMm9FMUNRaHl3aEZFVUpJTW1hemRqMGNiM1lKYzBKeXVBdWMxZXJFWVR5QXF6V080dUtMYUZqM1QxNSt6VVc4MFlTemF6d1pQZlBJN05tTG1WTnlHVFhnUW9veXJNanBtYVNkN1AxUHptRGM2Q3pXYjloRHlmam9iS21DVVZNWXVPd2Fjdkplb1hERXJheFpNSU9jRWJjemE4dk45Qzg4bjRKZTZWUlY3bVBFUFU4eWY5SWdicnR6QWxPSFg4Q3lnalM4MXU3ME9vV2NwdE95OHVEcmpLTkhqMUplWGs1VjFaZlUxdFpTWDE5UFkrTVJtcHFPQldXUFFsVUtMWGk5clhnOEhudytIMEtva3RhaFhpRVFDRWpCL2d1aGFnVXBXTEVnQjhIZkNCaURWUXNtdE1vRk14QjMzMzIvVHp6YlVuSDU2c0ExMXkyL2EyaE9nMWNtSStWMHpDNVRxYXVwQm91VHRPUWZoMGFJNG5WVFU5ZEFTa1lXMW1DK1JkUDJwZVROL0lEYVRYK2lwczVGZWt3YXdROHhoQkQ3RHg4K3ZHYk9uRG03SG52czhWYWRLZWxyeC9RTVBmcURFVTlGdDZoNlgxcXdpb0JnMG0zUWVqR0hHaGxqc1VTNnMydXF0NGs0SEVrNG5WMUpTZWxLdk5uQzJlZWNSMkdmM2xFbFVrMzFOYml4dFVsRk9kRndsYTJoWk1ZR2RtNWFmTkt1RGErN2licEdGMmxwR1ZoMEtUdnV4bm9hUERKWkdjbW4xT1hNK044K3VidDA2VUpoWVNGeGNYSEV4Wm5EZHl3OWc5TXpOeUhVVUljckljdCtTWlpsRkVVUmdVQVVld3NWMThzeDVta0FVSUxtcVIvd3o1Ly9nQTk0cmZjZzhZNzN6dUZEZTNSTHVoYm9lZm9kS1ptMGpPd2ZsZmZMYUxHUm5kMitZb0JzdHBHVlpmdWhBYTN5OE9IRGJ6ejg4TU1mL1BuUEM3dzZnUEozQUdpeGdRRkZIeHdJQXBzSWxVVUY1YnZSUUUzTFR3dFdFMFNCbXMybXFkNG1KWVg2RTJnZDJyT3pzK25kdXpmeDhkRm1reU1sZzFQSjlySG5qMkxoakVacVhTbzVKNm5yYnJFNXlMYTEzWnJObVlMdEcvQ0QvM3JHcHB0RWZQYlpaMVJXN3VmZ3dSb09IVHBFUTBPa3Z0VHRkdVB4ZUhDNWp0SFM0a1VJZ2MvbncrZno0ZmY3SlVWcGw3MUpRZ2c1Q0hDaG1sTkRrTDJaZ3V6TnJGL3V2bnRtNHU5Kzk3dExuVTduMVpJazllR244ZjJ5dUtZYXR1eHpNV1JBL2cvSGpWVzFyTDYrZnYzczJYLzg4TWtubjJ6dEJOQmlGMzhRMU5vRE5EMm9oVmxhRU5SRU1FY052ZVJRQk5UMDFRU3A5T2lSUVU3T21mVHUzZnNIYjdyeVhZMGZEYkNGUmxWVkZaV1ZsZFRVMUZCWFYwZERnNmJHNjNJZDQvaHhOMGVQSHNYajhTQ0VDQmJRdCtMeitmSDcvU0ZsM2lCekMwaXFLcVJnNURSa29vWkNRZ2FkZWRvdXdPWGs1SmkzYnYzUHhhbXBxVmZKc256aFQ1RHo0eCtCUUdEN2dRTTE3MXg4Y1VscFRjMUJKU1l3MEJtbzZRRXQ3RWNMVlE4QVFoL3hiTXZTVEpqTmNlZ1ZiNjFXZmQxbnBKRnhSa1lHT1RrNVpHZG4vNmpQaGZISDlvZXlzN09KajQvSFlva25MaTRPc3prdUhHUXdHazBFQWdGa1dVWUlvVE5UV3pFWURLRTdZWWk5aVVBZ2dDUkpvYnkza0VrcXh3WVhZc3hUSDJDdXJLdzBwNmYzZUFmWVVsNytXVkYyZHZaUWs4azA2cWZMLzhjM1dsdGIxKzdidCsvZG9xSno5K3ZBVE0vU2ZPMkFtcjhEUUF2b1VqakNabWNzU3pNYWpVR1dwb0dheFdMUnlYZ25ZTE1sa3BTVWhOT3BseDNLb21mUEhGSlRVMy8wNThUNFkveFRxYW1wV0szV0lNQlpzRmdpQUJjSUtCZ01CbFJWRFVkUXZWNWpDTnp3K1h4Q2x1WDJmRzhpYUpyR1JrOERCSnRpb0lYaVRYcUFBOHk1dWIxM0FudmVlV2ZqUzhYRkZ3eXkyUkt1Z2xNS1N2NDBUaC9YUjgzeDQ4Zi8rYTkvYmQ0OWV2VG9oZzRBclQxUTgzZkcwRG95TzBNc3JYM1RVKzlQMDRJRVNVa09uRTRuS1NuZDZONjlPMWxaWjlDclYwOFNFeFAvVDV5ZlV6WkZtMXd1anZsbGVuU3hSUmNBQnhScWp4N0hFSjlBYWtKMHI4cVdGZy8xYmgvSmppUVNUTkwzTWZrb0x5L255eSsxaU9taFEvVWNPRkROMGFOTnFHb0F0MXVMbUxhMFJKckZ0TGEyNHZmNzhQbTBoakU2M3h1aDVqRnFRS0FLSVFmYm1ZWk0xSTU4Y0hwVDFRU1lKMHlZWVBuVG54NitJQ1VsWllqUmFPeFF4WGZQNXRWWThvYVJsM2J5elVOcXk2QkNnVUdGUDY2SldyRnJNMnBHTWJuaFk2R2lLRkZsNWhpREUvRkVKY2lxcXVxSzM2TStvYjZtR3AvWjBTWWkyTlJRUTZNYjB0TFQvblhvWU0yN3Yvbk5iejU5L2ZYWC9TY0phUDUyQUMzUUFVTlRRL1hPd1FBQjBTd3Qwcnk0clQ4dG9xUG1kR3BCZ3ZUMGRNNDQ0d3h5YzNPL1UzOWE5ZDZ0dUoyRjVHZWNIaEgzNzAyMmFQbnFWVHkycjVuVVJETzFqYzFNdnZwS3BoZCt0MjBISkVtaWQrL2VKQ1FrQlBONTR2SDcvUmdNUmxRMUVKWGtHNWs4QmxwYmpSZ01QdngrdjlDK0wwdUtFa0JSRktINEF2aFZGVWtTS3RwTk5hd1dFc3gzTXdRbmE0akJHWU9BNWdzQjI0b1ZLMXBYckZqeEwyRHJ4bzF2UDNYKytlZGZrSmlZT0ZTU3BDaGRsL1ZQUDBUeWxBRmZDOWoyYllNVmpUOHVZRk5kNVV5Wit2OVlzZjN0OEhzcjU5M0F4QWZYayt5d2hhZnlJMnMrWW55L1JvcHQ1ekp2MzFHR3Q4ZUpQV1VVcEJWZ0gvY3cyNWZPakFCWHhWYkdqYnVKV21NR2RxVWV1ZkJtdGo1OUQzanJ1V1BDMVordC9zUzNPY25RL05ISG41WWYwWUZTZTREbTd3RFFsQk1BbW1nL09HREFhRFRwcFlhSWl6TVRGMmRweDUrbUtkNTI3WnBNYW1vcUdSazkyUDM2WXR6WExhTDNkeHdrc0NrMWpKbStsbTFySDhSOEdzeVpVMkJzclpRZWFJbVNMWHF5S1pXM0poVFRlT1FJM25oN2xHelI0TkUzTURYUFRrdXJqL2c0N1M4ZjJiK1hpNS8vZ3YvTXVvYnZTMDZ3cWFtSnlzcjlsSmFXVWx0YlN5QVE0T2pSUm80ZDA0SUtzZmx1UVdYZVVOUVVSVkh3Ky8xUzgvRUFmalZBbkRrU1BkVUZHQ1Foa0tGTmtNRVFaSERHR0JZWHRYejg4ZDY4bmoxN1hoZ2ZIejlFVlpSMFZjZENUZ29BVkcyUmpUR01KVWhoM0kzUTVJT010SzhKTEY2b3FvV01iQWlsR25tYW9LNFIwcktJa3E0SjFiNVVWMEZ5QmxoMXMxenhRblVkWkdXM3ZhT3F3YzlTMHFOL0E3QngwVFNXTkE1aDFaenhPbUQ3T1F0ckxtSHI0OU5qMWxSRi8wNkFyWEx0ZzR4ZHNndDMyV0UyVi95YmRDT0FtMG45ZTJLZjloS0xwdzBHb0xTMHJQYk1NOC9ZL05KRDB6Nzh4ZisrVUIzeXFaNEVvT2tYSmNqUUF1MlpuQVNGVDRNMXpURm1wd0dEd1JSc1dteWlJOU16SVNHQlJKc1ZDWWt1S2VuMHpNNElCZ2t5eWM3SzRwRnBBM0ZNZnBPN1JtUkh5MWdCN29aYUdyeG1zak9TMjh5VnhycHFGR3N5S2Zib202cW5xWjY2Smk5cDZSblJVbEg0bUQ2b0Q0TVh2cy80Zmo5OGc1ZnZUYllvQkdxaFkyYzB5SHlmZ1dhSHc4RTU1eFRTMnVyRlpES2hLSDdpNHkzRXhWbUNRUWJORWR2Y2JNSm9iTUZrTXVMMWFpek81L1BoYi9WenBNRWdWRldSQkFxdHJZcVE1QUJtazRxRUpIeCtEZHhDUVFaWkRnY1pBa0pnQUNsWXhTTkN6SzBOeVBYdFc3Z0grQVI0K29JTEx1aDc0TE1QejcvN2hZckJkdzdQU0QrWi96aHRPT3lxZ093SnNIcGU1UDE3eDhBZUdWUTNWSmZDMEZtdytMWVRyKy9wbWJDcUNlcDNBbFl3RnNEV3BmRHdkRmkrQjNKU29MUU01andORTB2QXZRY3l4c0hJWEdod3daNDYyTElMY3UxUXR4c0dqNGFNUXUyZjc5c01XNXNnRzlqK01reStGM29WUVBrK21MOEN4dllQd3lFclZyek82RVVQZnl2ellNM3FOeGc2NFZHOFM2OWw3ZllHcHBVazQ5MjNudFVWV2V5WmZFbXR4K1BaVWxIeHhVZm5uSFBPZmoyNzZnRFEyZ08yMEh1aG9GSWdER2l5ckVwQ3FHcW9JemdJSkVrWVRTWU1zaVM4TFMzSTVnUzZXT1BBM3l3YWpyckl6TTdHYXRGQXpXS0pJeTR1MUpIZFNrS0NqWGpKemVzdnY0RTE3UXppMUdaU2lzZng1SnpCMkJwMk0yNzhQWlR2cWNGWWVSTWJGbGtaTVA1dTVrMGRCa29qc3lkZnk4djdWTEtzSGhwdHhheGQ5VGZTTERCelJDYmJQSDB4bWczVVYrNWw5T3puZUhDeVZzLzU0dHdibVBWeUpZVzlrcW5ZVjg4VFczY3dJSXlKWmthTnVvZ2xMNjlsZkwrSlVjZmNWYmFlQ2ZjOHk3emxLeWh5bkxiQXBoditacGJ0K0lKeGw3Y045bjFWOVNsYmpqbDVXVmN6dXYyRDkxbjAvbjRxajdReWI4TFB2bmYxVjRQQlFNK2VQWW1McytEenRXSzFKZ1M3WE1jQ25KbVdGaTJLMnRyYXFvR2IwY2NaMlVhTzF2bUZLK0NuUzZJV1BRMEVBcUxGRndCSnhXeFNoYXFxa3FJZ0NSQ1NGSTZpQmdDREpLR0FaQWhPZkdQUVREVzJBM1RHSFR0MjdBTDIvT2JLcktjdTIvdFI3NXljbkNLcjFYcGhaN2x4U3pmQTJvV3d0SjF5VEZzQnJKd0xUZHNoZXhvc3ZPM2tUdjcyUGJCM082Ulp3UnZzQ2pqOVliZ242RXFwV2crRDU4TEVEY0U3ZWgzY3N4TUtIWERQY0ZpNUVlNGJBdy9mQzJNZmhIa1RvR29EOU5vWXZNazF3TVRiNGRuZE1EQWQ2clpDOFYwd2VrdHcvM3dWN0N5MWMzdEIyeXVpZE0xZkdGcnhxamFSMHk1ZzlmSjVuV2U4cTNXc1hsZkY3SG45OGRSZXl1TnIxekYxNE1TeThnLzM3ZkIwY1pUMWpEUG9tWm1xWTFtZEFacWlZMmVLSHN3a0NUWFlsRmhvaWd1U2tHUkpHTU9SVG9sV2I2dFFoWUY0czRuNE9CT05UY2RGZ0hpT0hXc2hMYXNuU2JiNHNEOHQwajNLaXMybXFkMGUrYlNVaEw0amVmaXVjZlRva1U1NmVqcFpXVm1RbTh2R2plT1pOZlpzSEpPZlorYkk3UEJoMlB6NGJOWjRMMkx2cm5tWVVWazQ3UkllWHI2TkJWTUhhaVJnd0RqV1BUd1pUL1ZHZXZXL20ybmpkNUJqcVdQSjRzMHMyM3VRUVdtQTRzTVhZMHdVRmhheDY4R2RoQlJ2d3JjbVZ4MjdkbjJFMi9mZkVCVTlCZG1pdm5sbjh6L3BaN0IxOXdjc2VtY1BsMDBkVE1JUFFGTlRVbEp3T3J1UW1KaUl6WllRRlVIVkp0RngzRzR6WnJPSGxoYU40WVZNMDJhekQ4bHZ4R0x4aTJCZ1FmSzRGUXltZ0RBYXRSNE5BVVVWSUNSWkRrZFJKUTNraEJ5OFVPVGdoV0FJbXFuaHNxMTJnTTVZV0hqT1IwRW05OUpiYjYzcmZ0NTU1K1U3SEk0aWs4bDBJWEJTblRVR0J2WC9IRmxnYVFRM25GUjIrYkF4R3FnQllYbVl1cjB3WXlHVTEyZ21aTDF1Z3R0eU5WQUR5TXFDVU8vblhidGg5dFBhOCt5QmtCR2NlVlhib05ZSXF4ZkJHa0QxZ2FzVWFvRXNBRmNEalVZSGpuYmNqRG1Ecm1QeG5LREV0OUYyUXQ5TzQvYTFsS1pkZHV6OHJvRWQ5VVhGZTkrWjlOY3ZEQTlOUGhMeWtYYkN6dG9ETmIzQ1JyVHZERlNCcEdxUFFvUjdic2l5TU1nSTdZYW9DSkMwM3BFR0l4YUxSUmlOUnRLTmNQQndBL2JVYkxwM3Rlc0NCQnFvMld6UnFSelpDZWZ6K3FLVlBMc3lnV0hEUnBCYmRHS2h4eTFiL29YWjA1L1o5LzQrNkRid1VHZlpDMmpBTm1TUVpvNWJzd1pTYkM5bGQ1VkNUbDR5UXdZbGM5dTRheGczOGpJR0R4L0ZvTUtzcVBYYW5RNWM5VWZhYk04NVlESjFkWk5QZDFNVVRsVzJLQ0hCeGxrSk5zNjZzb1EzNXE1ZzI1Rkx1THpyRDVQNWJMVmE2ZE9uRDNhN25jVEVSQklTYkZpdFZxeldlSnFhTkFibmRzZGhOamRqTnB2d2VrMTR2YTBjTnhzeDRDYytQdXg3RTdMa0IyTkFNcHMxQnVkcjFSaWNMR3NwSW9HQVFKS0ZoQWdIN0tUZ1hWM1dtSnprMS9uaURERWdwd2M2WTFCQzZRQ3c4Wnh6Q2szTGxqMlZrNU56Wm0rYnpWWm9OQnI3US90OWxjT0tMbCt6OE00U0crUnl3OWl4TUc4ZGpPd0hudDJRTnFXZDdjUnNTemFDVDRuNEl2U2VYWHNHakJrZGVUMW1QSVFGa093TzdJb0xseGRpNlpqVmtVNWUzZ2wxOU4yS29uemdjcmxLRno3K1ZPV1JEN2ZYMk0zTDFSaG1Gb2p4ZzNVRWFIb3cwLzlHMWZ2UGdvMGlWVWxDSUJDeUxLTUdBa0tXRGFoS3F4RElKTm9UTVp1TUhHdHNFQWFUQmw0bWt3bVA1d2l5TE9Ieks5Z1NiY1RIdE1RTDlmbDBPcDEwNjVaQ2V2cUZiTHZtSmo3NzlGTldQZnNnZjMzdEE4cld6Tzg4S2d3VURyaWMwY09DZ2d1anI4YWVrbjFDcUpqejh2dU0zcjZGTFpzMk1ISEkrVHk0N21NbUZFZWtxdHhOTG16TzA2T0QxZmNrVzZUeTFiRVd1aWRwL0t5eHZvNERpcGt1bGgrK25DTXpNeE9Id3hFRU9Gc1k0T0xqajJLeGFPQ21CUlphTUpsYU9CWm53b0NQaEFSanFHS0JoRGdqTHNVdkxIWURpaThndVlXQ3lSd1FKbGtsRUFqZzk2dElraURZVHliVTZGbHZwc3JCQzhRZ1NWSTQ2S0FEdWZiQXp2alJSM3VONTUxM1hpbXdEMWg3eGhsbkdHNGI5WHhXcStHc0hKOHZxYmZKWkNxUUpLblh0M3JBR3FIYUNDVkYyazZ2VzMxUzZtUU1HZ2pyMThDSUdiQjNQZFFvRWZabXF3WTVHNHFEUVkyR0JoMkdtWE1wem0ya3ROeERZZUdKbzhOQ2lBcFZpRStPSHE2cjJGeXg3OHNiYjV4MHFLYW1SbzFoWmUyeHM0NVlXdml6b05LTEVyTU9WUWloVDlVUVdndGNTY2d5QkZTRXdXQkE4ZnVGd1dSQ1ZWb3htT0t4eHNjSmd4UkFVU0UrVG10N0o3eE5mSFZNMEsrNG1PcTlIMURqeXViOE5JY3U0VllmOWRUcVBidDI2VUpxang2Y2ZlNkZETy9uSUcza2MzZzFsNmpHb0MwVzZoc2EwTHlaMmhnODZGTHUyVnBKdjlrVE5aYXJlbWhvaXR4cU5tM1p4TXlSVS9CVWIyT25xNEFGMlViQWg4dXRValJ3S0VVRGg5SlUray9LeW10QkIyeGxaYVVVOVcvTEdOM2xtNWd4ZnhYM0xGcE12djEwQmJaVGtpMUs1Uy9QdmNTN0xSYTZ4Y3Q4ZWFTWmNTTXZvMy9DYVFIdUpDWW1VbEJRUUZKU2tnN2dFckJhRzJscWlzZGljUkVYMTB4Y25KbkdPRE1tNGNWbU05SGFxa1ZOMHpKOXVDdE0xQi8ySTFSRnlHWUZlNElpQlpON2hkY2JRRGFxUWhhcUZFcjAxUVVhUWlBWFpuSEJ2RGcvMGJseGhoaUFhL1A4eXkrL05QenVyeVdmQVJWeEMza0hNRHp5eUo5c2g1b3VUMDkwOWNocWJiV2RhUkttWGlEM1JsTW8rZm9qQzI0ZkNDVURJTWNHeVZrbk40bnVlaGhHajRIOHBaRGJIN0tDZHFPY0RDc1d3YVNCV3ZEQVZRdm0vckR4OFloVGV1eTRLMWk1ZmlNVENrZEZoK2VGK016cjlYNXgvUGp4TDZ1cnF3Lys4NThiRHQxLy8vMHRnRHFoWDdvNEFaaDFCR3F4ejhOTDhQeEVKZElHMndNSmlLUnJJRWxDUXNKb2tJUmYwZEtLZksxZVRPWTRMQ1pWSEdseWM3akJDMExDYUpBd3g4VmpOY1BlZlhYazlSdElhbGM3R1lNdjR1Mk5PL0hrOXlhN1czSlFsY05KdDI3ZHdxVlJtWm1aYkhyaUxpNWUrQjhLOHJLbzNMdUgyKzc3QjNyNEh6dnRONHlkZGdNYkY5c1pQUGwvV0RCakJJT256V1hFenVzb0tMcUkvQ3dIRmVXVnpGajhKdE9IYW1TL2FmdkxEQnI2R2syVnBVeDYrQmx5TEFCMWpDKytGSGRHUG5ZYXFIVG5zbVprWVJSNVdidm0zNHlkTzYvTnVmZldsL1BNTXk4eDhjSHZEOWkrMTFyUlprOHpSN3dLWFJNVFNUREpQd2lJMWRmWDQvUDV5Y2pvMGY0K05qZFRYVjBkVHVnOWNpUlVhK29LeXlDMXRHaSt0OVpXYnhEY3RIcFRqOXVISWhTRXFxV0hoSXJxUTlVTHdScFVnaldvb1VKN1FrQ25lNVNEZ0NmcmxwQ01raUdtQ2ZTSm5odGlmdy9JcTFhOW1weVhsOWN0T2JsYnFzMldrRzR5bWJvYkRJWU1TWkl5MnhwOWJVZEREU2hXU1B1YUVTQkZBV29oYXlpVWwwZnNabFdCbWhxd0o0TWpZa3g3aFJBSFdnL3ZPamh3K0IrL1dySDI2YStVeHZyRFpXVmxSNjYvZnZ4UklocDY0ZlNKRHNDc0k0Ylc0Zk5ROGJudTkvb1VqWENxUnVneDJCMHRxTllzaVpCY3ZXNkpsRU1aWkFRUzFnUWJscmhRbmFjNUdQRU1CUWdTd3Uzd3VuUnhoRmxhS0RpZ2I0WG44N2lvclcvVU9qcFpUejZMek5OVVQ0TkxJUzA5SFhQdzdqUnplQ2JaTTk5bllxR0NZbkdTSEpYdW9kSlFXNHNiTTFucEtkR3BJL3ZXTW5ENk9yWnZYb0wxTkNBclA3b2krRzhLYktGUlYxY1hMS1EvUkVQRFlSb2JHNE1hYnhHbEVJK24vWW9Gdjk4ZnpuM1RWeTRFQW9vVUNLaGhnQXNFMUNDd3FhaHFHTlRRTWJxT1FDNE1VREdxSTUwdGNzeHpPZVo1YUJ2U280OHVzUFh0MjllZWxwWm1UMHBLc2x1dFZydlpiTFlialVhN3dXQ3d5N0pza3lUSkprbFNnaVJKOFVFZ0RBa0FHSFRldFJBdytHcTM0cHY1TE41emU0dVdiYStKNXZRSndyM3dsNm83RUFnY1Z4VEYxZHJhNnZKNFBNZWJtcHBjWDMzMTFmRzllejkyMzMzMzNSNGRlSWtZSUJPZGIrLzA0Z0FBQzh4SlJFRlVnSmtleURwaWFsRkxKMEFXQldaNklBT0VMRXRDNjVJbVlURElPa0NUTVJpTXNaVURSQkp0MjFZUWFNbTJtaUpIWXFJOXpOS1NrN3NGdTdGck9XcmY1UWdCMjR5aFgyODcrN2F0cGNGUlRFbis2U0VQL3hPd2RaYk40dmR6NE1DQnNJQ2xKb04wbEdQSFhPMktXRWFyaGZpQ0FLZTBBM0FSRnFkMXVsZEQ1VnJFTUxqT1FLNWRzTk9WZDhtZGdKcWhIV0NMWGZUYjZXeWhuY2ZZNTlGTzJyYlA5WStkTGJGQUZydDB4TkxhUEE5SnY3Y0hZaWNDczlEem1KNGFVZXlzTGFDRlFDMVN1TjZSR0dSU2toMkhvd3ZKeVYxeHlHNys4MkVsRG1jWERJYm8vdlQ5aDQxblFPNjMyMTE5Mzg3TldIc05KTXRwL3ErK3puOEN0cE1ZeDQ0ZDQrREJnOVRWMVhINGNJaTlSWFRlbXBzOU92TTBVclVRcVRtTkJyaEFJQkJscHFxcUdnVnlRcWlTcW9xd3FVcTQ0Yk9RaEVBUGRGSTdJQlFEVU1LZ1ZVTzB5OUk2QXplcEE0Q1Qyd0cxemdDdU0zQ0xCVFRhQWJIT0dKcmFBVnVMZXEybDJraWRnbGpRWjZick54djJtNFhBTEdocVNraFNOSmpwUUUyRUZHUDBnR1kwUmhoYXFIcWdiVjZhVFZmbkdmR2w5ZWpSZzZTa0pINGEzM2xVOVAvZVNFcEtJaWtwaWE1ZHUxSmIreFgxOVllQ09tOUhneVZaeDRNRjljM2hnbnF2VjErU3BXZHZJUk0xRUtVZW9nbGNCZ2dFVkZSVkZVR1FFNnFxU3FGK00xcS9CcUpZWFBBQ2ptVjBPZ0NTWkVtS0JUd2hCd0d5TTBEckROeStEblA3T3NEMmRjek9kZ0V1Q0VpZEFoalJ6YkxEb0tyM21ZVmVCd0V0aXBscFFDYUgyajZLRUZPTDFIWWF3d3JPRVpZV3FSNndSS1Z3aEZoYUVsMjZkQ0U1T1ptVWxGVFMwN3YvbjVBWCtnbllmdUJSV3ZvSnVibG5rWnFheW9FRE5kVFZmY1hodzRjNWN1UklsSkJseUR6Vks0Ym9hMDQxMzVzR2NvRkFHT0FJQkFKNmlTUkp4K0JFaE1tSjBLT0lNVlhSUjFjamJGeEk3WU5TRk5oRmZhY2RjMWM2QWJCMXhOcGlUVkxSQ2JoMUJuQnFlNjkxb05RWnM0djlUZFMyOUs5alRFMWtXZFlGQS9TQVppQ2t1aEVMYUFaRGhLSHBpOWJiVTdiVnpNNklFR1RYcmwyRExLMDdtWmsvS1ZyOUJHdy93TWpNekNBMU5ZWGEydHF3U205Yjg3UTVHRndJQVp3dnh2L1docjJGQWd4QmtGTTdCRGtkd0JITjVxUllvSXQ2M3M1bmJaWmdIbDBuekV4TDB2b3VmV3hCMW5XeVRLNmpCYjFwR2ZPYTlsaFppSm5wL0dmdGdGbkk3RFIyd3RMMGZqUnpVQk13WGljQ0dXMTJodFJ0MDlQVE1adk5QMTFnUHd5d0JkaXhkeC8vclBpS1k0cE13Vms5dWVIY016QURyYzFOdkxyck0vYldIY05nc1RHeXVKQUx1OGNrd2l2TlBQWHZqem16OTlrTXp2anY5UjJZeldheXM3TkpUVTF0WTU3cW82ZlIvamM5ZytzNGVxb29Db3EvbFpaV0NZdFppZ0k1WGJDaFBaQWowaVlWS2ZaUlZWVWtXUTRKMk1ReU96cGhZcnJYVWtqVzYyVEJyQ1BHRnZXZUNOblpKMlp5ZEFKZ2tkOExJVlJWWURESVVVeE01eTlEbjZJUkMyYWh3SUMrQ2JlZW9YVVc3WXo0MFN4dC9HaWhhR2VzMlJuYlVLVzlVYllic29xZzNaYXc3aW9tVEhtWXhTdVc0TlJkMWJYbGU1QlQ4a2x6ZkR1QTZTbGR4ZUM1dTlqNTh2eHZ2SjRoYzNleC9SVFdjekwvNlJUMDJJNnplbmN0UllYWnBKcFZscjI5a2MrT1g4YURnN0w1c3JLS2o1dGxMdTJiaS92SVFYNzk5NVVzdm1NaUE3cEVOdlBXNXEwc2VlOUxyckwxK0s4R3R0Q0lqNCtuWjg4YzB0SlNxYXVybzc2K1BtaWU2djF2SVlCcmFTT0wxRkgwdExuaENJY2JBK1JrcGVqVFE0VE9ENmNIT1lSUWhSWndVQWtHSHNKQUY3ek9KU0VFa2l3alJjQ09rMkZkTWNCM0lqQTcyWEtTTnFhcGlQdzRDcVJDN0tvanRxY0h4UER6NFA4ekdBemg5Mk1DQUVRZVk4Rk0xalhkMWdPYUlkaVl1Nk5vWjdTc1VFaUZRd08waUIrdGE5ZXVwS1Nra0phV0ZwV1BkcUl4YlFRc3JJRCs3UlROclZzeUI4dUE4VkdnQnJEa3ZwL2ptUHhXVkJIOE43cWhweFZ3KzZSdm50S2hlbDFVVlI4K3BkK2V6SC82K3NBbU8zaGc4dVhobDEwOGg3bDF6NWN3S0p2Y3ZrVTgwRGYwU1RhN1AvbVVMZnNiR2RCRk94Q3V1djA4VjJ2anVqT3RlSDVrMURjaElZR2VQWHZTdlh2M2NQVDBTTzFuUFAvQ2UvUXRLY0hlY2h6WG9VbzJmVkpMbjc2NUpMUzJCQU1Nc1F6T3k0RXZ2cURwV0ROQ0VSdzVjZ1JWTXBHUzRvUkFnSURpNWZEaFkxaXRSbkhNNVVKRnhwN2tRQloreWVWeW93UzBXSUlwemlKTVJna2hCQUcvRDE4Z0lBQkpsZzFJaE1CT1JWRlVMU0NocXFDeGxwTUZyVFlBcGtYWXBUQ2xDNmJrSTdjdmNpakMzd21CclBiOVlGNFlZWUFLN20yUTFXbUFKSVFxaE5CK0wwa3lScU1oQkhBRUZEOENDVW5Xb3BRaFVBdjRXMUV4b3JTMkVoQmd0ZG14eHBuQ1FOWk8yZ1p0ZldudE16U3Q3MEFRMEl6eDdQbkVTdTRaTm5ac1M2UmJUaEkzVDNTUTNrM3pveDJ0U09OdnoxaHh5VEIrT2d3dEJEeXdjQkdNdnhQU0xPQ3JoMGVlaFJsM1FlVW1XTGtacXR6dytGeElNOE9JU1RBd040UVNqU3grNGwvY3RXVnArT0EybFc5andiTnZzYm0wSHN2eVA5TzAzVUhlNEd1Wk9GUnJabHk1Y3kxYm01SkpxZDNDaTVzK0lYZkl6N2x2OG5BcWQyM2c2WmZmb3JxdWtmVGM4NWx4KzNUUzdScE1ySHY2WWJaVkhNZWFkWDdVaWF6WXZvYnRqWGE4ZXphd3RlSUlJNmY4bHJFbHVTZHgxZmhZdldRZWEzWitTYitSTjNIYjJCSmtvTDU4TzB1ZlhVVjU5U0djR2IyWmR2dWQ1S1ZaVC9pZlZFODl5eFl2Wm12cEFiNXgrdituOVEza3ByZVRTK00vVHNVUmxUNnBRVmFtK25obzdVNm1YM2srY1QvT2psK0FWbHlmazVQRE9lZWNRLzY1Z3pqSDBjQ0xHOHZJeWtwangvbzFtRFB5eVV4THBWdTNGSktUdStKME9uRTR1b1RMdWV4Mk82azlNa2gxSmlLWkUwaExTeU0xcFNzSlZvMEJ4TWNaY0x1UGMrUm9NM2FIRTd2Tmd0RWNSNXhSRnJJcFR0aVRrb1F0d1N4OExjMWdER2EwV3pRNUpzMDJNd21UeVNTTVJxTXdHaVFSQkFoaE1CcUUxc1JCVWcwR2d5ckxjbnRMSUxpRUd2ZEdMNXIybkNKSmtxWjRvZFZWaGwvSExBRkprZ0t5SkFWa1dRNG15V3JybG1VcHZCMkJVSVdHdW1wd3U2ckJZRkFsdEk1TkpwTlJTS2hDQ2FqQ2FEUUtrOGtrVENhek1FaUlnQ3AwaXJOeGlJQkNhMnVyc0NRa0NwdFpGbTdYY1JFWHIvbS9Jbzc5NEhHT2o4ZHF0WEM4c1o1RGh3NVJWMWRIYlcwdEJ3OGU1S3NqYnV4Mk8wbEpTVGdjWFlKK3NxNTA2NVpDYW1vcTZjbmRlVzlMQm1VTlozRDk5VGswN3N4bFcxMCs1NXh6RGtwRkR0ZmVhYVZrTEV3YUNYZU5nWjMxZ0JXeWZERHBIazBzZE5ZVWNLV0JYWWIwWGpCOE9Eak5VRHhFZTU2bHUrUjg1WnZZS2ZkblFIcUVwMWlTc3hnMi9BcXlVMnowNm5jeHc0ZGZRYjllRVZtL3lwMXZjdCswWDdDcXdzTDRpZGRqVlZ3QVZGV1UwMnZBbGR4KzF4MWt1ZDlqMkpSNVljR0N2SDZES2NrSzhNaXlOMktBN1ExbVRMc2J0V0FvRTRabU1uM3N6VlNmaEVSUjArNVZiSEQxWXZxVWExazkrem9XYjZnRW9LYXlBbWQrQ1hmZWRRY2xLWWNZTnVJVzNDZjZUNnFMR1NNdVpsMk5uV20zMy9ITmdnZlYrei9oc1U4Q1BEbmo3RmlpeVROck5oSjM5Z0N1N0tHVkpPN2M4UjVObVVVTTZtYm13LzhEemt1THhVSjJkalozTFg2QlR5Ky9tTWNmLzRER3pKSE12dTRTM0M1OWlvaW5UWW1XMVpxSVRiaW85UGpKeU1pSTlzRVp0Um1UY1ZadkVnMUNaNlphTU1mN2FQWTBvMGp4eUhLTFVERVFGMmRHbU0zRVdWUWFXcjJTMFJ4SG5DRm9zaXFDRnE5ZnhOc1NrSVdndGFVWlJZRFJhQ1Jpd1lxUU9Sb21Xa0VpRmtXK2hORGlwcW8vQUxLTWpDb0ZBbUF3R0pHbGprMVFqV1JKK0gwK0pJTVJveHg1RDBBRUFnUWtDWXNsTHNxa05KdE5CQlNGZ0Nvd0dtUjhBVUZjbkJsSmtwRXNGcFFXRjY1V1NWZ3NjV0Z6cy9XNGhDa3VpV1NuQTFsSzRIaGxMWEpjUFBGR2ZiV0FQakFnMDJwTEpJNW9jOVNjMkFXbnMwdVVEMDNmU01WT0VpYWpnOS8rMFVtLzFHNTBQNTdLcXpWR0xCWll1aEFtem9JUkpkci9uem9VVnF5RjRpa3daaFpzSGdGanhrQlRDbXdNeXBxbFpHdUwzUXo5U3RxYW9yWGxWVmh5TXFOa1hTek9ERXBLTWxpZllzV1JYMHhKU1Z1enpaaDNCWS9QdXgwWkdCNThiOGo0R2RSVzdHVnZlUTBaaGVkUzkreGJOQUxKUUU1aE1TbStNdVJsYlUzSWdwRTNNbTNVRUtDWWdiUCt6TjVhVFNtNTA1RStpUG4zanNjQnpKcHhEZmU4dUlyYmg4MmszL0NKWkZmdlkwOVpKZVplNTJDcGZJQUtOeFIxOHA5Y3UxZXp2RGFQbXMwenNRUC9IM2l4Z0ptUU81d3VBQUFBQUVsRlRrU3VRbUNDIl0sWzEsImRldGFpbHMtY29udGFpbmVyIl0sWzEsImRldGFpbHMiXSxbImhyZWYiLCJodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9hcGlfZG9jcy9weXRob24vdGYvZGVidWdnaW5nL2V4cGVyaW1lbnRhbC9lbmFibGVfZHVtcF9kZWJ1Z19pbmZvIiwidGFyZ2V0IiwiYmxhbmsiLCJyZWwiLCJub3JlZmVycmVyIG5vb3BlbmVyIl0sWyJocmVmIiwiaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvYXBpX2RvY3MvcHl0aG9uL3RmL2RlYnVnZ2luZyIsInRhcmdldCIsImJsYW5rIiwicmVsIiwibm9yZWZlcnJlciBub29wZW5lciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoT3UoMCwiZGl2IiwwKSxPdSgxLCJkaXYiLDEpLE1mKDIsIkRlYnVnZ2VyIFYyIGlzIGluYWN0aXZlIGJlY2F1c2Ugbm8gZGF0YSBpcyBhdmFpbGFibGUuIiksUHUoKSxPdSgzLCJkaXYiKSxNZig0LCJUbyB1c2UgdGhlIGRlYnVnZ2VyLCIpLFB1KCksT3UoNSwiZGl2IiksT3UoNiwib2wiKSxPdSg3LCJsaSIpLE1mKDgsIiBBZGQgdGhlIGZvbGxvd2luZyBsaW5lIHRvIHRoZSBiZWdpbm5pbmcgb2YgeW91ciBwcm9ncmFtOiAiKSxPdSg5LCJkaXYiLDIpLE91KDEwLCJzcGFuIiksTWYoMTEsInRmLmRlYnVnZ2luZy5leHBlcmltZW50YWwuZW5hYmxlX2R1bXBfZGVidWdfaW5mbygiKSxQdSgpLE91KDEyLCJzcGFuIiwzKSxNZigxMywibG9nZGlyIiksUHUoKSxNZigxNCwiLCAiKSxPdSgxNSwic3BhbiIsMyksTWYoMTYsJ3RlbnNvcl9kZWJ1Z19tb2RlPSJGVUxMX0hFQUxUSCInKSxQdSgpLE1mKDE3LCIsICIpLE91KDE4LCJzcGFuIiwzKSxNZigxOSwiY2lyY3VsYXJfYnVmZmVyX3NpemU9LTEiKSxQdSgpLE91KDIwLCJzcGFuIiksTWYoMjEsIikiKSxQdSgpLFB1KCksUHUoKSxPdSgyMiwibGkiKSxNZigyMywiUmUtcnVuIHRoZSBwcm9ncmFtLiIpLFB1KCksUHUoKSxQdSgpLE91KDI0LCJkaXYiLDQpLE91KDI1LCJkaXYiLDUpLE91KDI2LCJkaXYiLDYpLHd1KDI3LCJpbWciLDcpLFB1KCksT3UoMjgsImRpdiIsOCksTWYoMjksIkF1dG8tYWxlcnRzIGZvciBwcm9ibGVtcyBmb3VuZCIpLFB1KCksUHUoKSxPdSgzMCwiZGl2Iiw1KSxPdSgzMSwiZGl2Iiw2KSx3dSgzMiwiaW1nIiw5KSxQdSgpLE91KDMzLCJkaXYiLDgpLE1mKDM0LCIgSW50ZWdyYXRlZCBkZWJ1Z2dpbmcgdG8gdHJhY2UgcHJvYmxlbXMgdG8gdGhlaXIgY2F1c2VzICIpLFB1KCksUHUoKSxPdSgzNSwiZGl2Iiw1KSxPdSgzNiwiZGl2Iiw2KSx3dSgzNywiaW1nIiwxMCksUHUoKSxPdSgzOCwiZGl2Iiw4KSxNZigzOSwiTGluayBsb2cgdG8gY29kZSIpLFB1KCksUHUoKSxQdSgpLE91KDQwLCJkaXYiLDExKSxPdSg0MSwiZGl2IiwxMiksTWYoNDIsIiBUaGUgbG9nIGRpcmVjdG9yeSBtdXN0IGNvbnRhaW4gVGVuc29yRmxvdyBEZWJ1Z2dlciAoVjIpIGRhdGEuIHRmLmRlYnVnZ2luZy5leHBlcmltZW50YWwuZW5hYmxlX2R1bXBfZGVidWdfaW5mbygpIHdpbGwgY29sbGVjdCB0ZW5zb3IgZGF0YSwgZ3JhcGggc3RydWN0dXJlcywgdGhlIGFzc29jaWF0ZWQgc3RhY2sgdHJhY2VzLCBhbmQgc291cmNlIGNvZGUgdG8gdGhlIHNwZWNpZmljZWQgZGlyZWN0b3J5IGxvZ2RpciBhcyB0aGUgaW5zdHJ1bWVudGVkIFRlbnNvckZsb3cgcHJvZ3JhbSBleGVjdXRlcy4gIiksUHUoKSxPdSg0MywiZGl2IiwxMiksT3UoNDQsImRpdiIpLE1mKDQ1LCIgU2VlICIpLE91KDQ2LCJhIiwxMyksTWYoNDcsIiBkb2N1bWVudGF0aW9uICIpLFB1KCksTWYoNDgsIiBvZiB0aGUgUHl0aG9uIEFQSSBvZiBEZWJ1Z2dlciBWMi4gIiksUHUoKSxPdSg0OSwiZGl2IiksTWYoNTAsIiBTZWUgIiksT3UoNTEsImEiLDE0KSxNZig1MiwiIGhlcmUgIiksUHUoKSxNZig1MywiIGZvciBvdGhlciBUZW5zb3JGbG93IGRlYnVnZ2luZyBBUElzLiAiKSxQdSgpLFB1KCksUHUoKSxQdSgpKX0sc3R5bGVzOlsiLmFyZ1tfbmdjb250ZW50LSVDT01QJV0ge1xuICBjb2xvcjogbGlnaHRibHVlO1xuICBmb250LXN0eWxlOiBpdGFsaWM7XG4gIG1hcmdpbjogMnB4O1xufVxuXG4uY29kZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJywgbW9ub3NwYWNlO1xuICBtYXJnaW46IDEwcHg7XG59XG5cbi5jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdIHtcbiAgaGVpZ2h0OiAxMDAlO1xuICBmb250LWZhbWlseTogUm9ib3RvO1xuICBmb250LXNpemU6IDE1cHg7XG4gIG92ZXJmbG93LXk6IGF1dG87XG4gIHBhZGRpbmc6IDUwcHg7XG59XG5cbi5kZXRhaWxzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0ge1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgd2lkdGg6IDEwMCU7XG59XG5cbi5kZXRhaWxzW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgbWFyZ2luOiAxMHB4IDYwcHg7XG4gIHdpZHRoOiA1MCU7XG59XG5cbi5leGhpYml0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0ge1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB3aWR0aDogMTAwJTtcbn1cblxuLmV4aGliaXRbX25nY29udGVudC0lQ09NUCVdIHtcbiAgYWxpZ24tY29udGVudDogY2VudGVyO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1hcmdpbjogMTBweCA2MHB4O1xuICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuICB3aWR0aDogMzEwcHg7XG59XG5cbi5leGhpYml0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kZXNjcmlwdGlvbltfbmdjb250ZW50LSVDT01QJV0ge1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB3aWR0aDogMzEwcHg7XG59XG5cbi5leGhpYml0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zY3JlZW5zaG90W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNhbnZhc1tfbmdjb250ZW50LSVDT01QJV0ge1xuICBoZWlnaHQ6IDIwMHB4O1xuICB3aWR0aDogMTAwJTtcbn1cblxuLnRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGZvbnQtc2l6ZTogMTM1JTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIG1hcmdpbi1ib3R0b206IDI1cHg7XG59Il19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKENxLFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6ImluYWN0aXZlLWNvbXBvbmVudCIsdGVtcGxhdGVVcmw6Ii4vaW5hY3RpdmVfY29tcG9uZW50Lm5nLmh0bWwiLHN0eWxlVXJsczpbIi4vaW5hY3RpdmVfY29tcG9uZW50LmNzcyJdfV19XSxudWxsLG51bGwpO2NsYXNzIE1xe2NvbnN0cnVjdG9yKHQpe3RoaXMuc3RvcmU9dH19TXEuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fE1xKShNdShFaykpfSxNcS7JtWNtcD1Vbyh7dHlwZTpNcSxzZWxlY3RvcnM6W1sidGYtZGVidWdnZXItdjItaW5hY3RpdmUiXV0sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmd3UoMCwiaW5hY3RpdmUtY29tcG9uZW50Iil9LGRpcmVjdGl2ZXM6W0NxXSxlbmNhcHN1bGF0aW9uOjJ9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKE1xLFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6InRmLWRlYnVnZ2VyLXYyLWluYWN0aXZlIix0ZW1wbGF0ZToiIDxpbmFjdGl2ZS1jb21wb25lbnQ+PC9pbmFjdGl2ZS1jb21wb25lbnQ+ICJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpFa31dfSksbnVsbCk7Y29uc3QgdnE9V3coIltEZWJ1Z2dlcl0gRGVidWdnZXIgTG9hZGVkIikseHE9V3coIltEZWJ1Z2dlcl0gRGVidWdnZXIgVW5sb2FkZWQiKSxPcT1XdygiW0RlYnVnZ2VyXSBBIE5ldyBEZWJ1Z2dlciBEYXRhIFBvbGxpbmcgRXZlbnQgQmVnaW5zIiksUHE9V3coIltEZWJ1Z2dlcl0gRGVidWdnZXIgUnVucyBSZXF1ZXN0ZWQiKSx3cT1XdygiW0RlYnVnZ2VyXSBEZWJ1Z2dlciBSdW5zIExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGtxPVd3KCJbRGVidWdnZXJdIERlYnVnZ2VyIFJ1bnMgUmVxdWVzdCBGYWlsZWQiKSxTcT1XdygiW0RlYnVnZ2VyXSBOdW1iZXIgYW5kIEJyZWFrZG93biBvZiBBbGVydHMgUmVxdWVzdGVkIiksRHE9V3coIltEZWJ1Z2dlcl0gTnVtYmVyIGFuZCBCcmVha2Rvd24gb2YgQWxlcnRzIExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLEVxPVd3KCJbRGVidWdnZXJdIEFsZXJ0cyBEYXRhIG9mIGFuIEFsZXJ0VHlwZSBJcyBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxBcT1XdygiW0RlYnVnZ2VyXSBBbGVydCBUeXBlIEZvY3VzIFRvZ2dsZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxScT1XdygiW0RlYnVnZ2VyXSBOdW1iZXIgb2YgVG9wLUxldmVsIEV4ZWN1dGlvbnMgUmVxdWVzdGVkIiksVHE9V3coIltEZWJ1Z2dlcl0gTnVtYmVyIG9mIFRvcC1MZXZlbCBFeGVjdXRpb25zIExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLE5xPVd3KCJbRGVidWdnZXJdIEV4ZWN1dGlvbkRpZ2VzdHMgUmVxdWVzdGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksSXE9V3coIltEZWJ1Z2dlcl0gRXhlY3V0aW9uRGlnZXN0cyBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSx6cT1XdygiW0RlYnVnZ2VyXSBTY3JvbGwgTGVmdHdhcmQgb24gdGhlIEV4ZWN1dGlvbiBUaW1lbGluZSIpLEhxPVd3KCJbRGVidWdnZXJdIFNjcm9sbCBSaWdodHdhcmQgb24gdGhlIEV4ZWN1dGlvbiBUaW1lbGluZSIpLEZxPVd3KCJbRGVidWdnZXJdIFNjcm9sbCB0aGUgRXhlY3V0aW9uIFRpbWVsaW5lIHRvIEdpdmVuIEluZGV4Iix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksTHE9V3coIltEZWJ1Z2dlcl0gRXhlY3V0aW9uIERhdGEgT2JqZWN0cyBCZWluZyBGb2N1c2VkIE9uIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksQnE9V3coIltEZWJ1Z2dlcl0gRXhlY3V0aW9uIERhdGEgT2JqZWN0cyBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxWcT1XdygiW0RlYnVnZ2VyXSBOdW1iZXIgb2YgSW50cmEtR3JhcGggRXhlY3V0aW9ucyBSZXF1ZXN0ZWQiKSxqcT1XdygiW0RlYnVnZ2VyXSBOdW1iZXIgb2YgSW50cmEtR3JhcGggRXhlY3V0aW9ucyBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxVcT1XdygiW0RlYnVnZ2VyXSBJbnRyYS1HcmFwaCBFeGVjdXRpb24gRGF0YSBSZXF1ZXN0ZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxXcT1XdygiW0RlYnVnZ2VyXSBJbnRyYS1HcmFwaCBFeGVjdXRpb24gRGF0YSBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxHcT1XdygiW0RlYnVnZ2VyXSBTY3JvbGwgSW50cmEtR3JhcGggRXhlY3V0aW9uIExpc3QgdG8gR2l2ZW4gSW5kZXgiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxZcT1XdygiW0RlYnVnZ2VyXSBHcmFwaCBFeGVjdXRpb24gaXMgRm9jdXNlZCBPbiIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHFxPVd3KCJbRGVidWdnZXJdIEdyYXBoIE9wIElzIEZvY3VzZWQgT24iLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxacT1XdygiW0RlYnVnZ2VyXSBHcmFwaCBPcCBJbmZvIFJlcXVlc3RlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFhxPVd3KCJbRGVidWdnZXJdIEdyYXBoIE9wIEluZm8gTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksS3E9V3coIltEZWJ1Z2dlcl0gU291cmNlIEZpbGUgTGlzdCBSZXF1ZXN0ZWQuIiksSnE9V3coIltEZWJ1Z2dlcl0gU291cmNlIEZpbGUgTGlzdCBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxRcT1XdygiW0RlYnVnZ2VyXSBTb3VyY2UgRmlsZSBMaW5lIElzIEZvY3VzZWQgb24iLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSwkcT1XdygiW0RlYnVnZ2VyXSBTb3VyY2UgRmlsZSBSZXF1ZXN0ZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSx0Wj1XdygiW0RlYnVnZ2VyXSBTb3VyY2UgRmlsZSBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxlWj1XdygiW0RlYnVnZ2VyXSBBIFNldCBvZiBTdGFjayBGcmFtZXMgSGF2ZSBCZWVuIExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLG5aPSJkZWJ1Z2dlciI7dmFyIG9aLGlaLGFaO2Z1bmN0aW9uIHJaKHQpe2lmKG51bGw9PT10LmNvZGVMb2NhdGlvbkZvY3VzVHlwZSlyZXR1cm4gbnVsbDtsZXQgZT1bXTtpZih0LmNvZGVMb2NhdGlvbkZvY3VzVHlwZT09PWFaLkVYRUNVVElPTil7Y29uc3R7Zm9jdXNJbmRleDpuLGV4ZWN1dGlvbkRhdGE6b309dC5leGVjdXRpb25zO2lmKG51bGw9PT1ufHx2b2lkIDA9PT1vW25dKXJldHVybiBudWxsO2U9b1tuXS5zdGFja19mcmFtZV9pZHN9ZWxzZXtpZihudWxsPT09dC5ncmFwaHMuZm9jdXNlZE9wKXJldHVybiBudWxsO2NvbnN0e2dyYXBoSWQ6bixvcE5hbWU6b309dC5ncmFwaHMuZm9jdXNlZE9wO2lmKHZvaWQgMD09PXQuZ3JhcGhzLm9wc1tuXXx8IXQuZ3JhcGhzLm9wc1tuXS5oYXMobykpcmV0dXJuIG51bGw7ZT10LmdyYXBocy5vcHNbbl0uZ2V0KG8pLnN0YWNrX2ZyYW1lX2lkc31jb25zdCBuPVtdO2Zvcihjb25zdCBvIG9mIGUpe2lmKG51bGw9PXQuc3RhY2tGcmFtZXNbb10pcmV0dXJuIG51bGw7bi5wdXNoKHQuc3RhY2tGcmFtZXNbb10pfXJldHVybiBufWZ1bmN0aW9uIHNaKHQsZSl7cmV0dXJuIHQuZmluZEluZGV4KCh0PT50Lmhvc3RfbmFtZT09PWUuaG9zdF9uYW1lJiZ0LmZpbGVfcGF0aD09PWUuZmlsZV9wYXRoKSl9ZnVuY3Rpb24gbFoodCxlLG4pe2lmKGU+PW4pdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBiZWdpbiB0byBiZSBsZXNzIHRoYW4gZW5kLCBidXQgZ290IGJlZ2luPSR7ZX0sIGVuZD0ke259YCk7cmV0dXJuIHQuZmluZEluZGV4KCh0PT50LmJlZ2luPT09ZSYmdC5lbmQ9PT1uKSl9ZnVuY3Rpb24gY1oodCl7Y29uc3QgZT10LnNvdXJjZUNvZGUuZm9jdXNMaW5lU3BlYztpZighdC5zdGlja1RvQm90dG9tbW9zdEZyYW1lSW5Gb2N1c2VkRmlsZSlyZXR1cm4gZTtjb25zdCBuPXJaKHQpO2lmKG51bGw9PT1uKXJldHVybiBlO2NvbnN0IG89KGZ1bmN0aW9uIGkodCxlKXtpZihudWxsPT09ZSlyZXR1cm4gbnVsbDtmb3IobGV0IG49dC5sZW5ndGgtMTtuPj0wOy0tbil7Y29uc3Qgbz10W25dLHtob3N0X25hbWU6aSxmaWxlX3BhdGg6YX09bztpZihpPT09ZS5ob3N0X25hbWUmJmE9PT1lLmZpbGVfcGF0aClyZXR1cm4gb31yZXR1cm4gbnVsbH0pKG4sZSk7cmV0dXJuIG51bGw9PT1vP2U6b30hKGZ1bmN0aW9uKHQpe3RbdC5VTlNQRUNJRklFRD0wXT0iVU5TUEVDSUZJRUQiLHRbdC5OT19URU5TT1I9MV09Ik5PX1RFTlNPUiIsdFt0LkNVUlRfSEVBTFRIPTJdPSJDVVJUX0hFQUxUSCIsdFt0LkNPTkNJU0VfSEVBTFRIPTNdPSJDT05DSVNFX0hFQUxUSCIsdFt0LkZVTExfSEVBTFRIPTRdPSJGVUxMX0hFQUxUSCIsdFt0LlNIQVBFPTVdPSJTSEFQRSIsdFt0LkZVTExfTlVNRVJJQ1M9Nl09IkZVTExfTlVNRVJJQ1MiLHRbdC5GVUxMX1RFTlNPUj03XT0iRlVMTF9URU5TT1IiLHRbdC5SRURVQ0VfSU5GX05BTl9USFJFRV9TTE9UUz04XT0iUkVEVUNFX0lORl9OQU5fVEhSRUVfU0xPVFMifSkob1p8fChvWj17fSkpLChmdW5jdGlvbih0KXt0LkZVTkNUSU9OX1JFQ09NUElMRV9BTEVSVD0iRnVuY3Rpb25SZWNvbXBpbGVzQWxlcnQiLHQuSU5GX05BTl9BTEVSVD0iSW5mTmFuQWxlcnQiLHQuVEVOU09SX1NIQVBFX0FMRVJUPSJUZW5zb3JTaGFwZUFsZXJ0In0pKGlafHwoaVo9e30pKSwoZnVuY3Rpb24odCl7dFt0LkVYRUNVVElPTj0wXT0iRVhFQ1VUSU9OIix0W3QuR1JBUEhfT1BfQ1JFQVRJT049MV09IkdSQVBIX09QX0NSRUFUSU9OIn0pKGFafHwoYVo9e30pKTtjb25zdCBkWj1tUyh7cnVuczp7fSxydW5zTG9hZGVkOntzdGF0ZTpCRS5OT1RfTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpudWxsfSxhY3RpdmVSdW5JZDpudWxsLGxhc3REYXRhUG9sbE9uc2V0VGltZU1zOi0xLGxhc3ROb25FbXB0eVBvbGxEYXRhVGltZU1zOjEsYWxlcnRzOnthbGVydHNMb2FkZWQ6e3N0YXRlOkJFLk5PVF9MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOm51bGx9LG51bUFsZXJ0czowLGFsZXJ0c0JyZWFrZG93bjp7fSxhbGVydHM6e30sZXhlY3V0aW9uSW5kaWNlczp7fSxncmFwaEV4ZWN1dGlvbkluZGljZXM6e30sZm9jdXNUeXBlOm51bGx9LGV4ZWN1dGlvbnM6KGZ1bmN0aW9uIHBaKCl7cmV0dXJue251bUV4ZWN1dGlvbnNMb2FkZWQ6e3N0YXRlOkJFLk5PVF9MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOm51bGx9LGV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQ6e2xvYWRpbmdSYW5nZXM6W10sbnVtRXhlY3V0aW9uczowLHBhZ2VMb2FkZWRTaXplczp7fX0sZGlzcGxheUNvdW50OjUwLHBhZ2VTaXplOjEwMCxzY3JvbGxCZWdpbkluZGV4OjAsZm9jdXNJbmRleDpudWxsLGV4ZWN1dGlvbkRpZ2VzdHM6e30sZXhlY3V0aW9uRGF0YTp7fX19KSgpLGdyYXBoRXhlY3V0aW9uczooZnVuY3Rpb24gbVooKXtyZXR1cm57bnVtRXhlY3V0aW9uc0xvYWRlZDp7c3RhdGU6QkUuTk9UX0xPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6bnVsbH0sZXhlY3V0aW9uRGlnZXN0c0xvYWRlZDp7bG9hZGluZ1JhbmdlczpbXSxudW1FeGVjdXRpb25zOjAscGFnZUxvYWRlZFNpemVzOnt9fSxkaXNwbGF5Q291bnQ6MTAwLHBhZ2VTaXplOjIwMCxzY3JvbGxCZWdpbkluZGV4OjAsZm9jdXNJbmRleDpudWxsLGdyYXBoRXhlY3V0aW9uRGlnZXN0czp7fSxncmFwaEV4ZWN1dGlvbkRhdGFMb2FkaW5nUGFnZXM6W10sZ3JhcGhFeGVjdXRpb25EYXRhUGFnZUxvYWRlZFNpemVzOnt9LGdyYXBoRXhlY3V0aW9uRGF0YTp7fX19KSgpLGdyYXBoczp7b3BzOnt9LGxvYWRpbmdPcHM6e30sZm9jdXNlZE9wOm51bGx9LHN0YWNrRnJhbWVzOnt9LGNvZGVMb2NhdGlvbkZvY3VzVHlwZTpudWxsLHN0aWNrVG9Cb3R0b21tb3N0RnJhbWVJbkZvY3VzZWRGaWxlOiExLHNvdXJjZUNvZGU6e3NvdXJjZUZpbGVMaXN0TG9hZGVkOntzdGF0ZTpCRS5OT1RfTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpudWxsfSxzb3VyY2VGaWxlTGlzdDpbXSxmaWxlQ29udGVudHM6W10sZm9jdXNMaW5lU3BlYzpudWxsfX0scFMoUHEsKHQ9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7cnVuc0xvYWRlZDpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5ydW5zTG9hZGVkKSx7c3RhdGU6QkUuTE9BRElOR30pfSkpKSxwUyhrcSwodD0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtydW5zTG9hZGVkOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LnJ1bnNMb2FkZWQpLHtzdGF0ZTpCRS5GQUlMRUR9KX0pKSkscFMod3EsKCh0LHtydW5zOmV9KT0+e2NvbnN0IG49T2JqZWN0LmtleXMoZSksbz1uLmxlbmd0aD4wJiZudWxsPT09dC5hY3RpdmVSdW5JZDtyZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtsYXN0Tm9uRW1wdHlQb2xsRGF0YVRpbWVNczpvP0RhdGUubm93KCk6dC5sYXN0Tm9uRW1wdHlQb2xsRGF0YVRpbWVNcyxydW5zOmUscnVuc0xvYWRlZDp7c3RhdGU6QkUuTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpEYXRlLm5vdygpfSxhY3RpdmVSdW5JZDpuLmxlbmd0aD4wP25bMF06bnVsbH0pfSkpLHBTKE9xLCh0PT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2xhc3REYXRhUG9sbE9uc2V0VGltZU1zOkRhdGUubm93KCl9KSkpLHBTKFNxLCh0PT5udWxsPT09dC5hY3RpdmVSdW5JZD90Ok9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7YWxlcnRzOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LmFsZXJ0cykse2FsZXJ0c0xvYWRlZDpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5hbGVydHMuYWxlcnRzTG9hZGVkKSx7c3RhdGU6QkUuTE9BRElOR30pfSl9KSkpLHBTKERxLCgodCx7bnVtQWxlcnRzOmUsYWxlcnRzQnJlYWtkb3duOm59KT0+e2lmKG51bGw9PT10LmFjdGl2ZVJ1bklkKXJldHVybiB0O2NvbnN0IG89ZT50LmFsZXJ0cy5udW1BbGVydHM7cmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7bGFzdE5vbkVtcHR5UG9sbERhdGFUaW1lTXM6bz9EYXRlLm5vdygpOnQubGFzdE5vbkVtcHR5UG9sbERhdGFUaW1lTXMsYWxlcnRzOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LmFsZXJ0cykse2FsZXJ0c0xvYWRlZDpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5hbGVydHMuYWxlcnRzTG9hZGVkKSx7c3RhdGU6QkUuTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpEYXRlLm5vdygpfSksbnVtQWxlcnRzOmUsYWxlcnRzQnJlYWtkb3duOm59KX0pfSkpLHBTKEVxLCgodCx7bnVtQWxlcnRzOmUsYWxlcnRzQnJlYWtkb3duOm4sYWxlcnRUeXBlOm8sYmVnaW46aSxhbGVydHM6YX0pPT57aWYobnVsbD09PXQuYWN0aXZlUnVuSWQpcmV0dXJuIHQ7Y29uc3Qgcj17fSxzPXQuYWxlcnRzLmV4ZWN1dGlvbkluZGljZXNbb10/dC5hbGVydHMuZXhlY3V0aW9uSW5kaWNlc1tvXS5zbGljZSgpOltdLGw9dC5hbGVydHMuZ3JhcGhFeGVjdXRpb25JbmRpY2VzW29dP3QuYWxlcnRzLmdyYXBoRXhlY3V0aW9uSW5kaWNlc1tvXS5zbGljZSgpOltdO2ZvcihsZXQgdD0wO3Q8YS5sZW5ndGg7Kyt0KXtjb25zdCBlPWkrdCxuPWFbdF07aWYocltlXT1uLG4uYWxlcnRfdHlwZT09PWlaLklORl9OQU5fQUxFUlQpe2NvbnN0IHQ9bjtzW2VdPXQuZXhlY3V0aW9uX2luZGV4LG51bGwhPT10LmdyYXBoX2V4ZWN1dGlvbl90cmFjZV9pbmRleCYmKGxbZV09dC5ncmFwaF9leGVjdXRpb25fdHJhY2VfaW5kZXgpfX12b2lkIDAhPT10LmFsZXJ0cy5hbGVydHNbb10mJk9iamVjdC5hc3NpZ24ocix0LmFsZXJ0cy5hbGVydHNbb10pO2xldCBjPXQuZXhlY3V0aW9ucy5zY3JvbGxCZWdpbkluZGV4LGQ9dC5ncmFwaEV4ZWN1dGlvbnMuZm9jdXNJbmRleDtpZihvPT09aVouSU5GX05BTl9BTEVSVCYmMD09PWkpe2NvbnN0IGU9YVswXTtjPU1hdGgubWF4KDAsZS5leGVjdXRpb25faW5kZXgtTWF0aC5mbG9vcih0LmV4ZWN1dGlvbnMuZGlzcGxheUNvdW50LzIpKSxudWxsIT09ZS5ncmFwaF9leGVjdXRpb25fdHJhY2VfaW5kZXgmJihkPWUuZ3JhcGhfZXhlY3V0aW9uX3RyYWNlX2luZGV4KX1yZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtleGVjdXRpb25zOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LmV4ZWN1dGlvbnMpLHtzY3JvbGxCZWdpbkluZGV4OmN9KSxncmFwaEV4ZWN1dGlvbnM6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuZ3JhcGhFeGVjdXRpb25zKSx7Zm9jdXNJbmRleDpkfSksYWxlcnRzOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LmFsZXJ0cykse2FsZXJ0c0xvYWRlZDpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5hbGVydHMuYWxlcnRzTG9hZGVkKSx7c3RhdGU6QkUuTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpEYXRlLm5vdygpfSksbnVtQWxlcnRzOmUsYWxlcnRzQnJlYWtkb3duOm4sYWxlcnRzOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LmFsZXJ0cy5hbGVydHMpLHtbb106cn0pLGV4ZWN1dGlvbkluZGljZXM6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuYWxlcnRzLmV4ZWN1dGlvbkluZGljZXMpLHtbb106c30pLGdyYXBoRXhlY3V0aW9uSW5kaWNlczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5hbGVydHMuZ3JhcGhFeGVjdXRpb25JbmRpY2VzKSx7W29dOmx9KX0pfSl9KSkscFMoQXEsKCh0LHthbGVydFR5cGU6ZX0pPT57Y29uc3Qgbj1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2FsZXJ0czpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5hbGVydHMpLHtmb2N1c1R5cGU6dC5hbGVydHMuZm9jdXNUeXBlPT09ZT9udWxsOmV9KX0pLG89bi5hbGVydHMuZm9jdXNUeXBlO2lmKG51bGwhPT1vKXtjb25zdCB0PW4uYWxlcnRzLmV4ZWN1dGlvbkluZGljZXNbb118fFtdO3ZvaWQgMCE9PXRbMF0mJihuLmV4ZWN1dGlvbnM9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LG4uZXhlY3V0aW9ucykse3Njcm9sbEJlZ2luSW5kZXg6TWF0aC5tYXgoMCxOdW1iZXIodFswXSktTWF0aC5mbG9vcihuLmV4ZWN1dGlvbnMuZGlzcGxheUNvdW50LzIpKX0pKX1yZXR1cm4gbn0pKSxwUyhScSwodD0+bnVsbD09PXQuYWN0aXZlUnVuSWQ/dDpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2V4ZWN1dGlvbnM6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuZXhlY3V0aW9ucykse251bUV4ZWN1dGlvbnNMb2FkZWQ6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuZXhlY3V0aW9ucy5udW1FeGVjdXRpb25zTG9hZGVkKSx7c3RhdGU6QkUuTE9BRElOR30pfSl9KSkpLHBTKFRxLCgodCx7bnVtRXhlY3V0aW9uczplfSk9PntpZihudWxsPT09dC5hY3RpdmVSdW5JZClyZXR1cm4gdDtjb25zdCBuPWU+dC5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQubnVtRXhlY3V0aW9ucyxvPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7bGFzdE5vbkVtcHR5UG9sbERhdGFUaW1lTXM6bj9EYXRlLm5vdygpOnQubGFzdE5vbkVtcHR5UG9sbERhdGFUaW1lTXMsZXhlY3V0aW9uczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5leGVjdXRpb25zKSx7bnVtRXhlY3V0aW9uc0xvYWRlZDpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5leGVjdXRpb25zLm51bUV4ZWN1dGlvbnNMb2FkZWQpLHtzdGF0ZTpCRS5MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOkRhdGUubm93KCl9KSxleGVjdXRpb25EaWdlc3RzTG9hZGVkOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LmV4ZWN1dGlvbnMuZXhlY3V0aW9uRGlnZXN0c0xvYWRlZCkse251bUV4ZWN1dGlvbnM6ZX0pfSl9KTtyZXR1cm4gZT4wJiZudWxsPT09dC5leGVjdXRpb25zLmZvY3VzSW5kZXgmJihvLmV4ZWN1dGlvbnMuZm9jdXNJbmRleD0wKSxvfSkpLHBTKE5xLCgodCxlKT0+e2lmKG51bGw9PT10LmFjdGl2ZVJ1bklkKXJldHVybiB0O2NvbnN0IG49Wy4uLnQuZXhlY3V0aW9ucy5leGVjdXRpb25EaWdlc3RzTG9hZGVkLmxvYWRpbmdSYW5nZXNdO3JldHVybi0xPT09bFoobixlLmJlZ2luLGUuZW5kKSYmbi5wdXNoKHtiZWdpbjplLmJlZ2luLGVuZDplLmVuZH0pLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7ZXhlY3V0aW9uczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5leGVjdXRpb25zKSx7ZXhlY3V0aW9uRGlnZXN0c0xvYWRlZDpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQpLHtsb2FkaW5nUmFuZ2VzOm59KX0pfSl9KSkscFMoSXEsKCh0LGUpPT57aWYobnVsbD09PXQuYWN0aXZlUnVuSWQpcmV0dXJuIHQ7Y29uc3Qgbj1bLi4udC5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQubG9hZGluZ1Jhbmdlc10sbz1sWihuLGUuYmVnaW4sZS5lbmQpOy0xIT09byYmbi5zcGxpY2UobywxKTtjb25zdCBpPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7ZXhlY3V0aW9uczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5leGVjdXRpb25zKSx7ZXhlY3V0aW9uRGlnZXN0c0xvYWRlZDpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQpLHtudW1FeGVjdXRpb25zOmUubnVtX2RpZ2VzdHMsbG9hZGluZ1JhbmdlczpufSksZXhlY3V0aW9uRGlnZXN0czpPYmplY3QuYXNzaWduKHt9LHQuZXhlY3V0aW9ucy5leGVjdXRpb25EaWdlc3RzKX0pfSk7Zm9yKGxldCB0PWUuYmVnaW47dDxlLmVuZDsrK3QpaS5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNbdF09ZS5leGVjdXRpb25fZGlnZXN0c1t0LWUuYmVnaW5dO2lmKGUuZW5kPmUuYmVnaW4pe2NvbnN0IG49ZS5iZWdpbi90LmV4ZWN1dGlvbnMucGFnZVNpemU7aS5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQucGFnZUxvYWRlZFNpemVzPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxpLmV4ZWN1dGlvbnMuZXhlY3V0aW9uRGlnZXN0c0xvYWRlZC5wYWdlTG9hZGVkU2l6ZXMpLHtbbl06ZS5lbmQtZS5iZWdpbn0pfXJldHVybiBpfSkpLHBTKHpxLCh0PT57aWYobnVsbD09PXQuYWN0aXZlUnVuSWQpcmV0dXJuIHQ7bGV0IGU9dC5leGVjdXRpb25zLnNjcm9sbEJlZ2luSW5kZXg7cmV0dXJuIGU+MCYmZS0tLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7ZXhlY3V0aW9uczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5leGVjdXRpb25zKSx7c2Nyb2xsQmVnaW5JbmRleDplfSl9KX0pKSxwUyhIcSwodD0+e2lmKG51bGw9PT10LmFjdGl2ZVJ1bklkKXJldHVybiB0O2xldCBlPXQuZXhlY3V0aW9ucy5zY3JvbGxCZWdpbkluZGV4O3JldHVybiBlK3QuZXhlY3V0aW9ucy5kaXNwbGF5Q291bnQrMTw9dC5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQubnVtRXhlY3V0aW9ucyYmZSsrLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7ZXhlY3V0aW9uczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5leGVjdXRpb25zKSx7c2Nyb2xsQmVnaW5JbmRleDplfSl9KX0pKSxwUyhGcSwoKHQsZSk9PntpZihlLmluZGV4PDB8fCFOdW1iZXIuaXNJbnRlZ2VyKGUuaW5kZXgpKXRocm93IG5ldyBFcnJvcihgQXR0ZW1wdCB0byBzY3JvbGwgdG8gbmVnYXRpdmUgb3Igbm9uLWludGVnZXIgZXhlY3V0aW9uIGluZGV4ICgke2UuaW5kZXh9KWApO2NvbnN0e2Rpc3BsYXlDb3VudDpufT10LmV4ZWN1dGlvbnMse251bUV4ZWN1dGlvbnM6b309dC5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQ7aWYoZS5pbmRleD5NYXRoLm1heCgwLG8tbikpdGhyb3cgbmV3IEVycm9yKGBBdHRlbXB0IHRvIHNjcm9sbCB0byBleGVjdXRpb24gaW5kZXggKCR7ZS5pbmRleH0pLCB3aGljaCBleGNlZWRzIG1heGltdW0gYWxsb3dlZCBpbmRleCAobnVtRXhlY3V0aW9ucz0ke299OyBkaXNwbGF5Q291bnQ9JHtufSlgKTtyZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtleGVjdXRpb25zOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LmV4ZWN1dGlvbnMpLHtzY3JvbGxCZWdpbkluZGV4OmUuaW5kZXh9KX0pfSkpLHBTKExxLCgodCxlKT0+e2NvbnN0IG49T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtleGVjdXRpb25zOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LmV4ZWN1dGlvbnMpLHtmb2N1c0luZGV4OnQuZXhlY3V0aW9ucy5zY3JvbGxCZWdpbkluZGV4K2UuZGlzcGxheUluZGV4fSksY29kZUxvY2F0aW9uRm9jdXNUeXBlOmFaLkVYRUNVVElPTixzb3VyY2VDb2RlOk9iamVjdC5hc3NpZ24oe30sdC5zb3VyY2VDb2RlKX0pO3JldHVybiBuLnNvdXJjZUNvZGUuZm9jdXNMaW5lU3BlYz1jWihuKSxufSkpLHBTKEJxLCgodCxlKT0+e2lmKG51bGw9PT10LmFjdGl2ZVJ1bklkKXJldHVybiB0O2NvbnN0IG49T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtleGVjdXRpb25zOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LmV4ZWN1dGlvbnMpLHtleGVjdXRpb25EYXRhOk9iamVjdC5hc3NpZ24oe30sdC5leGVjdXRpb25zLmV4ZWN1dGlvbkRhdGEpfSl9KTtmb3IobGV0IHQ9ZS5iZWdpbjt0PGUuZW5kOysrdCluLmV4ZWN1dGlvbnMuZXhlY3V0aW9uRGF0YVt0XT1lLmV4ZWN1dGlvbnNbdC1lLmJlZ2luXTtyZXR1cm4gbn0pKSxwUyhWcSwodD0+bnVsbD09PXQuYWN0aXZlUnVuSWQ/dDpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2dyYXBoRXhlY3V0aW9uczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5ncmFwaEV4ZWN1dGlvbnMpLHtudW1FeGVjdXRpb25zTG9hZGVkOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LmdyYXBoRXhlY3V0aW9ucy5udW1FeGVjdXRpb25zTG9hZGVkKSx7c3RhdGU6QkUuTE9BRElOR30pfSl9KSkpLHBTKGpxLCgodCx7bnVtR3JhcGhFeGVjdXRpb25zOmV9KT0+e2lmKG51bGw9PT10LmFjdGl2ZVJ1bklkKXJldHVybiB0O2NvbnN0IG49ZT50LmdyYXBoRXhlY3V0aW9ucy5leGVjdXRpb25EaWdlc3RzTG9hZGVkLm51bUV4ZWN1dGlvbnMsbz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2xhc3ROb25FbXB0eVBvbGxEYXRhVGltZU1zOm4/RGF0ZS5ub3coKTp0Lmxhc3ROb25FbXB0eVBvbGxEYXRhVGltZU1zLGdyYXBoRXhlY3V0aW9uczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5ncmFwaEV4ZWN1dGlvbnMpLHtudW1FeGVjdXRpb25zTG9hZGVkOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LmdyYXBoRXhlY3V0aW9ucy5udW1FeGVjdXRpb25zTG9hZGVkKSx7c3RhdGU6QkUuTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpEYXRlLm5vdygpfSksZXhlY3V0aW9uRGlnZXN0c0xvYWRlZDpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5ncmFwaEV4ZWN1dGlvbnMuZXhlY3V0aW9uRGlnZXN0c0xvYWRlZCkse251bUV4ZWN1dGlvbnM6ZX0pfSl9KTtyZXR1cm4gZT4wJiZudWxsPT09dC5ncmFwaEV4ZWN1dGlvbnMuZm9jdXNJbmRleCYmKG8uZ3JhcGhFeGVjdXRpb25zLmZvY3VzSW5kZXg9MCksb30pKSxwUyhVcSwoKHQse3BhZ2VJbmRleDplfSk9PntpZihudWxsPT09dC5hY3RpdmVSdW5JZClyZXR1cm4gdDtjb25zdCBuPXQuZ3JhcGhFeGVjdXRpb25zLmdyYXBoRXhlY3V0aW9uRGF0YUxvYWRpbmdQYWdlcy5zbGljZSgpO3JldHVybi0xPT09bi5pbmRleE9mKGUpJiZuLnB1c2goZSksT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtncmFwaEV4ZWN1dGlvbnM6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuZ3JhcGhFeGVjdXRpb25zKSx7Z3JhcGhFeGVjdXRpb25EYXRhTG9hZGluZ1BhZ2VzOm59KX0pfSkpLHBTKFdxLCgodCxlKT0+e2lmKG51bGw9PT10LmFjdGl2ZVJ1bklkKXJldHVybiB0O2NvbnN0e3BhZ2VTaXplOm59PXQuZ3JhcGhFeGVjdXRpb25zLG89dC5ncmFwaEV4ZWN1dGlvbnMuZ3JhcGhFeGVjdXRpb25EYXRhTG9hZGluZ1BhZ2VzLnNsaWNlKCksaT1PYmplY3QuYXNzaWduKHt9LHQuZ3JhcGhFeGVjdXRpb25zLmdyYXBoRXhlY3V0aW9uRGF0YVBhZ2VMb2FkZWRTaXplcyksYT1PYmplY3QuYXNzaWduKHt9LHQuZ3JhcGhFeGVjdXRpb25zLmdyYXBoRXhlY3V0aW9uRGF0YSk7Zm9yKGxldCB0PWUuYmVnaW47dDxlLmVuZDsrK3Qpe2NvbnN0IHI9TWF0aC5mbG9vcih0L24pOy0xIT09by5pbmRleE9mKHIpJiZvLnNwbGljZShvLmluZGV4T2YociksMSksdm9pZCAwPT09aVtyXSYmKGlbcl09MCksdm9pZCAwPT09YVt0XSYmaVtyXSsrLGFbdF09ZS5ncmFwaF9leGVjdXRpb25zW3QtZS5iZWdpbl19cmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7Z3JhcGhFeGVjdXRpb25zOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LmdyYXBoRXhlY3V0aW9ucykse2dyYXBoRXhlY3V0aW9uRGF0YUxvYWRpbmdQYWdlczpvLGdyYXBoRXhlY3V0aW9uRGF0YVBhZ2VMb2FkZWRTaXplczppLGdyYXBoRXhlY3V0aW9uRGF0YTphfSl9KX0pKSxwUyhHcSwoKHQsZSk9PntpZihlLmluZGV4PDB8fCFOdW1iZXIuaXNJbnRlZ2VyKGUuaW5kZXgpKXRocm93IG5ldyBFcnJvcihgQXR0ZW1wdCB0byBzY3JvbGwgdG8gbmVnYXRpdmUgb3Igbm9uLWludGVnZXIgZ3JhcGgtZXhlY3V0aW9uIGluZGV4ICgke2UuaW5kZXh9KWApO3JldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2dyYXBoRXhlY3V0aW9uczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5ncmFwaEV4ZWN1dGlvbnMpLHtzY3JvbGxCZWdpbkluZGV4OmUuaW5kZXh9KX0pfSkpLHBTKFlxLCgodCxlKT0+dVoodCxlLmdyYXBoX2lkLGUub3BfbmFtZSxlLmluZGV4KSkpLHBTKHFxLCgodCxlKT0+dVoodCxlLmdyYXBoX2lkLGUub3BfbmFtZSkpKSxwUyhacSwoKHQsZSk9Pntjb25zdHtncmFwaF9pZDpuLG9wX25hbWU6b309ZSxpPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7Z3JhcGhzOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LmdyYXBocykse2xvYWRpbmdPcHM6T2JqZWN0LmFzc2lnbih7fSx0LmdyYXBocy5sb2FkaW5nT3BzKX0pfSk7cmV0dXJuIHZvaWQgMD09PWkuZ3JhcGhzLmxvYWRpbmdPcHNbbl0mJihpLmdyYXBocy5sb2FkaW5nT3BzW25dPW5ldyBNYXApLGkuZ3JhcGhzLmxvYWRpbmdPcHNbbl0uaGFzKG8pfHxpLmdyYXBocy5sb2FkaW5nT3BzW25dLnNldChvLEJFLkxPQURJTkcpLGl9KSkscFMoWHEsKCh0LGUpPT57Y29uc3R7Z3JhcGhPcEluZm9SZXNwb25zZTpufT1lLHtncmFwaF9pZHM6b309bixpPW9bby5sZW5ndGgtMV0sYT1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2dyYXBoczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5ncmFwaHMpLHtvcHM6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuZ3JhcGhzLm9wcykse1tpXTpuZXcgTWFwKHQuZ3JhcGhzLm9wc1tpXSl9KSxsb2FkaW5nT3BzOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LmdyYXBocy5sb2FkaW5nT3BzKSx7W2ldOm5ldyBNYXAodC5ncmFwaHMubG9hZGluZ09wc1tpXSl9KX0pfSk7Zm9yKGNvbnN0IHQgb2Ygbi5pbnB1dHMpdC5kYXRhJiZhLmdyYXBocy5vcHNbaV0uc2V0KHQub3BfbmFtZSx0LmRhdGEpO2ZvcihsZXQgdD0wO3Q8bi5jb25zdW1lcnMubGVuZ3RoOysrdClmb3IoY29uc3QgZSBvZiBuLmNvbnN1bWVyc1t0XSllLmRhdGEmJmEuZ3JhcGhzLm9wc1tpXS5zZXQoZS5vcF9uYW1lLGUuZGF0YSk7cmV0dXJuIGEuZ3JhcGhzLm9wc1tpXS5zZXQobi5vcF9uYW1lLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxuKSx7aW5wdXRzOm4uaW5wdXRzLm1hcCgodD0+KHtvcF9uYW1lOnQub3BfbmFtZSxvdXRwdXRfc2xvdDp0Lm91dHB1dF9zbG90fSkpKSxjb25zdW1lcnM6bi5jb25zdW1lcnMubWFwKCh0PT50Lm1hcCgodD0+KHtvcF9uYW1lOnQub3BfbmFtZSxpbnB1dF9zbG90OnQuaW5wdXRfc2xvdH0pKSkpKX0pKSxhLmdyYXBocy5sb2FkaW5nT3BzW2ldLnNldChuLm9wX25hbWUsQkUuTE9BREVEKSxhfSkpLHBTKEtxLCh0PT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3NvdXJjZUNvZGU6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuc291cmNlQ29kZSkse3NvdXJjZUZpbGVMaXN0TG9hZGVkOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LnNvdXJjZUNvZGUuc291cmNlRmlsZUxpc3RMb2FkZWQpLHtzdGF0ZTpCRS5MT0FESU5HfSl9KX0pKSkscFMoSnEsKCh0LGUpPT57dmFyIG47Y29uc3Qgbz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3NvdXJjZUNvZGU6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuc291cmNlQ29kZSkse3NvdXJjZUZpbGVMaXN0TG9hZGVkOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LnNvdXJjZUNvZGUuc291cmNlRmlsZUxpc3RMb2FkZWQpLHtzdGF0ZTpCRS5MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOkRhdGUubm93KCl9KSxzb3VyY2VGaWxlTGlzdDplLnNvdXJjZUZpbGVzLGZpbGVDb250ZW50czp0LnNvdXJjZUNvZGUuZmlsZUNvbnRlbnRzLnNsaWNlKCl9KX0pLGk9ZS5zb3VyY2VGaWxlcy5sZW5ndGgse2ZpbGVDb250ZW50czphfT1vLnNvdXJjZUNvZGU7Zm9yKGxldCBlPTA7ZTxpOysrZSlhW2VdPW51bGwhPT0obj10LnNvdXJjZUNvZGUuZmlsZUNvbnRlbnRzW2VdKSYmdm9pZCAwIT09bj9uOntsb2FkU3RhdGU6QkUuTk9UX0xPQURFRCxsaW5lczpudWxsfTtyZXR1cm4gb30pKSxwUyhRcSwoKHQsZSk9Pntjb25zdCBuPXJaKHQpLG89T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtzb3VyY2VDb2RlOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LnNvdXJjZUNvZGUpLHtmb2N1c0xpbmVTcGVjOmUuc3RhY2tGcmFtZX0pfSk7cmV0dXJuIG51bGwhPT1uJiYoby5zdGlja1RvQm90dG9tbW9zdEZyYW1lSW5Gb2N1c2VkRmlsZT0oZnVuY3Rpb24gaSh0LGUpe2xldCBuPS0xLG89LTE7aWYodC5mb3JFYWNoKCgoe2ZpbGVfcGF0aDp0LGxpbmVubzppfSxhKT0+e3Q9PT1lLmZpbGVfcGF0aCYmKG89YSxpPT09ZS5saW5lbm8mJihuPWEpKX0pKSwtMT09PW4pdGhyb3cgbmV3IEVycm9yKGBTdGFjayBmcmFtZSAke0pTT04uc3RyaW5naWZ5KGUpfSBpcyBub3QgZm91bmQuYCk7cmV0dXJuIG49PT1vfSkobixlLnN0YWNrRnJhbWUpKSxvfSkpLHBTKCRxLCgodCxlKT0+e2NvbnN0IG49T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtzb3VyY2VDb2RlOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LnNvdXJjZUNvZGUpLHtmaWxlQ29udGVudHM6dC5zb3VyY2VDb2RlLmZpbGVDb250ZW50cy5zbGljZSgpfSl9KSxvPXNaKG4uc291cmNlQ29kZS5zb3VyY2VGaWxlTGlzdCxlKTtpZighKG8+PTApKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgdGhlIGZvbGxvd2luZyBmaWxlIGluIGZpbGUgbGlzdDogaG9zdF9uYW1lPSIke2UuaG9zdF9uYW1lfSIsIGZpbGVfcGF0aD0iJHtlLmZpbGVfcGF0aH0iYCk7cmV0dXJuIG4uc291cmNlQ29kZS5maWxlQ29udGVudHMuc3BsaWNlKG8sMSxPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sbi5zb3VyY2VDb2RlLmZpbGVDb250ZW50c1tvXSkse2xvYWRTdGF0ZTpCRS5MT0FESU5HfSkpLG59KSkscFModFosKCh0LGUpPT57Y29uc3Qgbj1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3NvdXJjZUNvZGU6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuc291cmNlQ29kZSkse2ZpbGVDb250ZW50czp0LnNvdXJjZUNvZGUuZmlsZUNvbnRlbnRzLnNsaWNlKCl9KX0pLG89c1oobi5zb3VyY2VDb2RlLnNvdXJjZUZpbGVMaXN0LGUpO2lmKCEobz49MCkpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCB0aGUgZm9sbG93aW5nIGZpbGUgaW4gZmlsZSBsaXN0OiBob3N0X25hbWU9IiR7ZS5ob3N0X25hbWV9IiwgZmlsZV9wYXRoPSIke2UuZmlsZV9wYXRofSJgKTtyZXR1cm4gbi5zb3VyY2VDb2RlLmZpbGVDb250ZW50cy5zcGxpY2UobywxLHtsb2FkU3RhdGU6QkUuTE9BREVELGxpbmVzOmUubGluZXN9KSxufSkpLHBTKGVaLCgodCxlKT0+e2lmKG51bGw9PT10LmFjdGl2ZVJ1bklkKXJldHVybiB0O2NvbnN0IG49T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtzdGFja0ZyYW1lczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5zdGFja0ZyYW1lcyksZS5zdGFja0ZyYW1lcyksc291cmNlQ29kZTpPYmplY3QuYXNzaWduKHt9LHQuc291cmNlQ29kZSl9KTtyZXR1cm4gbi5zb3VyY2VDb2RlLmZvY3VzTGluZVNwZWM9Y1oobiksbn0pKSk7ZnVuY3Rpb24gdVoodCxlLG4sbyl7Y29uc3QgaT1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2dyYXBoczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5ncmFwaHMpLHtmb2N1c2VkT3A6e2dyYXBoSWQ6ZSxvcE5hbWU6bn19KSxjb2RlTG9jYXRpb25Gb2N1c1R5cGU6YVouR1JBUEhfT1BfQ1JFQVRJT04sc291cmNlQ29kZTpPYmplY3QuYXNzaWduKHt9LHQuc291cmNlQ29kZSl9KTtyZXR1cm4gaS5zb3VyY2VDb2RlLmZvY3VzTGluZVNwZWM9Y1ooaSksdm9pZCAwIT09byYmKGkuZ3JhcGhFeGVjdXRpb25zPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LmdyYXBoRXhlY3V0aW9ucykse2ZvY3VzSW5kZXg6b30pKSxpfWZ1bmN0aW9uIGZaKHQsZSl7cmV0dXJuIGRaKHQsZSl9Y29uc3QgZ1o9RmsoblopLGhaPXprKGdaLCh0PT50LnJ1bnMpKSxiWj16ayhnWiwodD0+dC5ydW5zTG9hZGVkKSkseVo9emsoZ1osKHQ9PnQuYWN0aXZlUnVuSWQpKSxfWj16ayhnWiwodD0+dC5sYXN0RGF0YVBvbGxPbnNldFRpbWVNcy10Lmxhc3ROb25FbXB0eVBvbGxEYXRhVGltZU1zKSksQ1o9emsoZ1osKHQ9PnQuYWxlcnRzKSksTVo9emsoQ1osKHQ9PnQuYWxlcnRzTG9hZGVkKSksdlo9emsoQ1osKHQ9PnQubnVtQWxlcnRzKSkseFo9emsoQ1osKHQ9PnQuZm9jdXNUeXBlKSksT1o9emsoQ1osKHQ9Pm51bGw9PT10LmZvY3VzVHlwZT8wOnQuYWxlcnRzQnJlYWtkb3duW3QuZm9jdXNUeXBlXXx8MCkpLFBaPXprKENaLCh0PT5udWxsPT09dC5mb2N1c1R5cGV8fHZvaWQgMD09PXQuYWxlcnRzW3QuZm9jdXNUeXBlXT9udWxsOnQuYWxlcnRzW3QuZm9jdXNUeXBlXSkpLHdaPXprKENaLCh0PT50LmFsZXJ0c0JyZWFrZG93bikpLGtaPXprKGdaLCh0PT50LmV4ZWN1dGlvbnMpKSxTWj16ayhrWiwodD0+dC5udW1FeGVjdXRpb25zTG9hZGVkKSksRFo9emsoa1osKHQ9PnQuZXhlY3V0aW9uRGlnZXN0c0xvYWRlZCkpLEVaPXprKGtaLCh0PT50LmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQubnVtRXhlY3V0aW9ucykpLEFaPXprKGtaLCh0PT50LnNjcm9sbEJlZ2luSW5kZXgpKSxSWj16ayhrWiwodD0+dC5wYWdlU2l6ZSkpLFRaPXprKGtaLCh0PT50LmRpc3BsYXlDb3VudCkpLE5aPXprKGtaLCh0PT57Y29uc3QgZT1bXTtmb3IobGV0IG49dC5zY3JvbGxCZWdpbkluZGV4O248dC5zY3JvbGxCZWdpbkluZGV4K3QuZGlzcGxheUNvdW50OysrbillLnB1c2gobiBpbiB0LmV4ZWN1dGlvbkRpZ2VzdHM/dC5leGVjdXRpb25EaWdlc3RzW25dOm51bGwpO3JldHVybiBlfSkpLElaPXprKGdaLCh0PT50LmdyYXBoRXhlY3V0aW9ucykpLHpaPXprKElaLCh0PT50Lm51bUV4ZWN1dGlvbnNMb2FkZWQpKSxIWj16ayhnWiwodD0+dC5ncmFwaEV4ZWN1dGlvbnMuZXhlY3V0aW9uRGlnZXN0c0xvYWRlZC5udW1FeGVjdXRpb25zKSksRlo9emsoSVosKHQ9PnQuc2Nyb2xsQmVnaW5JbmRleCkpLExaPXprKElaLCh0PT50LmRpc3BsYXlDb3VudCkpLEJaPXprKElaLCh0PT50LnBhZ2VTaXplKSksVlo9emsoSVosKHQ9PnQuZ3JhcGhFeGVjdXRpb25EYXRhTG9hZGluZ1BhZ2VzKSksalo9emsoSVosKHQ9PnQuZ3JhcGhFeGVjdXRpb25EYXRhUGFnZUxvYWRlZFNpemVzKSksVVo9emsoSVosKHQ9PnQuZ3JhcGhFeGVjdXRpb25EYXRhKSksV1o9emsoSVosKHQ9PnQuZm9jdXNJbmRleCkpLEdaPXprKGdaLCh0PT50LmdyYXBocykpLFlaPXprKEdaLCh0PT57Y29uc3R7Zm9jdXNlZE9wOmUsb3BzOm59PXQ7cmV0dXJuIG51bGw9PT1lfHx2b2lkIDA9PT1uW2UuZ3JhcGhJZF0/bnVsbDpuW2UuZ3JhcGhJZF0uZ2V0KGUub3BOYW1lKXx8bnVsbH0pKSxxWj16ayhHWiwodD0+e2NvbnN0e2ZvY3VzZWRPcDplLG9wczpufT10O2lmKG51bGwhPT1lJiZ2b2lkIDAhPT1uW2UuZ3JhcGhJZF0mJm5bZS5ncmFwaElkXS5oYXMoZS5vcE5hbWUpKXtjb25zdCB0PW5bZS5ncmFwaElkXSx7aW5wdXRzOm99PXQuZ2V0KGUub3BOYW1lKTtyZXR1cm4gby5tYXAoKGU9Pntjb25zdCBuPU9iamVjdC5hc3NpZ24oe30sZSk7cmV0dXJuIHQuaGFzKGUub3BfbmFtZSkmJihuLmRhdGE9dC5nZXQoZS5vcF9uYW1lKSksbn0pKX1yZXR1cm4gbnVsbH0pKSxaWj16ayhXWixVWixxWiwoKHQsZSxuKT0+e2lmKG51bGw9PT10fHxudWxsPT09bilyZXR1cm4gbnVsbDtjb25zdCBvPW4ubWFwKCh0PT4hMSkpLGk9W107aWYoMD09PW4ubGVuZ3RoKXJldHVybiBpO2NvbnN0IGE9ZVt0XS5ncmFwaF9pZCxyPU1hdGgubWF4KDAsdC0yMDApO2ZvcihsZXQgcz10LTE7cz49cjstLXMpaWYodm9pZCAwIT09ZVtzXSlmb3IobGV0IHQ9MDt0PG4ubGVuZ3RoJiYob1t0XXx8ZVtzXS5ncmFwaF9pZCE9PWF8fGVbc10ub3BfbmFtZSE9PW5bdF0ub3BfbmFtZXx8ZVtzXS5vdXRwdXRfc2xvdCE9PW5bdF0ub3V0cHV0X3Nsb3R8fChpLnB1c2gocyksb1t0XT0hMCxpLmxlbmd0aCE9PW4ubGVuZ3RoKSk7Kyt0KTtyZXR1cm4gaX0pKSxYWj16ayhHWiwodD0+e2NvbnN0e2ZvY3VzZWRPcDplLG9wczpufT10O2lmKG51bGwhPT1lJiZ2b2lkIDAhPT1uW2UuZ3JhcGhJZF0mJm5bZS5ncmFwaElkXS5oYXMoZS5vcE5hbWUpKXtjb25zdCB0PW5bZS5ncmFwaElkXSx7Y29uc3VtZXJzOm99PXQuZ2V0KGUub3BOYW1lKTtyZXR1cm4gby5tYXAoKGU9PmUubWFwKChlPT57Y29uc3Qgbj1PYmplY3QuYXNzaWduKHt9LGUpO3JldHVybiB0LmhhcyhlLm9wX25hbWUpJiYobi5kYXRhPXQuZ2V0KGUub3BfbmFtZSkpLG59KSkpKX1yZXR1cm4gbnVsbH0pKSxLWj16ayhnWiwodD0+e2NvbnN0IGU9dC5leGVjdXRpb25zLnNjcm9sbEJlZ2luSW5kZXgsbj10LmV4ZWN1dGlvbnMuc2Nyb2xsQmVnaW5JbmRleCt0LmV4ZWN1dGlvbnMuZGlzcGxheUNvdW50LG89bmV3IEFycmF5KG4tZSkuZmlsbChudWxsKSxpPXQuYWxlcnRzLmZvY3VzVHlwZTtpZihudWxsPT09aSlyZXR1cm4gbztjb25zdCBhPXQuYWxlcnRzLmV4ZWN1dGlvbkluZGljZXNbaV07aWYodm9pZCAwPT09YSlyZXR1cm4gbztmb3IobGV0IGk9ZTtpPG47KytpKWEuaW5jbHVkZXMoaSkmJihvW2ktZV09dC5hbGVydHMuZm9jdXNUeXBlKTtyZXR1cm4gb30pKSxKWj16ayhnWiwodD0+dC5leGVjdXRpb25zKSksUVo9emsoSlosKHQ9PnQuZm9jdXNJbmRleCkpLCRaPXprKEpaLCh0PT57aWYobnVsbD09PXQuZm9jdXNJbmRleClyZXR1cm4gbnVsbDtjb25zdHtmb2N1c0luZGV4OmUsc2Nyb2xsQmVnaW5JbmRleDpuLGRpc3BsYXlDb3VudDpvfT10O3JldHVybiBlPG58fGU+PW4rbz9udWxsOmUtbn0pKSx0WD16ayhKWiwodD0+dC5leGVjdXRpb25EYXRhKSksZVg9emsoZ1osKHQ9PnQuZ3JhcGhzLmxvYWRpbmdPcHMpKSxuWD16ayhnWiwodD0+dC5zdGFja0ZyYW1lcykpLG9YPXprKEpaLCh0PT57Y29uc3R7Zm9jdXNJbmRleDplLGV4ZWN1dGlvbkRhdGE6bn09dDtyZXR1cm4gbnVsbD09PWV8fHZvaWQgMD09PW5bZV0/bnVsbDpuW2VdfSkpLGlYPXprKGdaLFFaLG9YLFlaLCgodCxlLG4sbyk9Pntjb25zdHtjb2RlTG9jYXRpb25Gb2N1c1R5cGU6aX09dDtyZXR1cm4gbnVsbD09PWk/bnVsbDppPT09YVouRVhFQ1VUSU9OP251bGw9PT1lfHxudWxsPT09bj9udWxsOntjb2RlTG9jYXRpb25UeXBlOmFaLkVYRUNVVElPTixvcFR5cGU6bi5vcF90eXBlLGV4ZWN1dGlvbkluZGV4OmV9Om51bGw9PT1vP251bGw6e2NvZGVMb2NhdGlvblR5cGU6YVouR1JBUEhfT1BfQ1JFQVRJT04sb3BUeXBlOm8ub3BfdHlwZSxvcE5hbWU6by5vcF9uYW1lfX0pKSxhWD16ayhnWixyWiksclg9emsoZ1osKHQ9PnQuc291cmNlQ29kZSkpLHNYPXprKHJYLCh0PT50LnNvdXJjZUZpbGVMaXN0TG9hZGVkKSk7emsoclgsKHQ9PnQuc291cmNlRmlsZUxpc3QpKTtjb25zdCBsWD16ayhyWCwodD0+e2NvbnN0e3NvdXJjZUZpbGVMaXN0OmUsZm9jdXNMaW5lU3BlYzpufT10O3JldHVybiBudWxsPT09bj8tMTpzWihlLG4pfSkpLGNYPXprKHJYLGxYLCgodCxlKT0+LTE9PT1lP251bGw6dC5maWxlQ29udGVudHNbZV18fG51bGwpKSxkWD16ayhnWiwodD0+dC5zb3VyY2VDb2RlLmZvY3VzTGluZVNwZWMpKSxwWD16ayhnWiwodD0+dC5zdGlja1RvQm90dG9tbW9zdEZyYW1lSW5Gb2N1c2VkRmlsZSkpLG1YPWZ1bmN0aW9uKHQpe3JldHVyblt0XX07ZnVuY3Rpb24gdVgodCxlKXtpZigxJnQpe2NvbnN0IHQ9RXUoKTtPdSgwLCJkaXYiLDcpLE51KCJjbGljayIsKGZ1bmN0aW9uIG4oKXtyYSh0KTtjb25zdCBvPWUuJGltcGxpY2l0O3JldHVybiBMdSgpLm9uVG9nZ2xlRm9jdXNUeXBlLmVtaXQoby50eXBlKX0pKSxPdSgxLCJkaXYiLDgpLE1mKDIpLFB1KCksT3UoMywiZGl2Iiw5KSxNZig0KSxQdSgpLHd1KDUsImRpdiIpLFB1KCl9aWYoMiZ0KXtjb25zdCB0PWUuJGltcGxpY2l0LG49THUoKTt2dSgibmdDbGFzcyIsZ2IoNCxtWCx0LnR5cGU9PT1uLmZvY3VzVHlwZT8iZm9jdXMiOiIiKSksSmMoMiksdmYodC5kaXNwbGF5TmFtZSksSmMoMiksT2YoIiAiLHQuZGlzcGxheVN5bWJvbCwiOiAiLHQuY291bnQsIiAiKX19Y2xhc3MgZlh7Y29uc3RydWN0b3IoKXt0aGlzLm51bUFsZXJ0cz0wLHRoaXMuYWxlcnRzQnJlYWtkb3duPVtdLHRoaXMuZm9jdXNUeXBlPW51bGwsdGhpcy5vblRvZ2dsZUZvY3VzVHlwZT1uZXcgQWJ9fWZYLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxmWCl9LGZYLsm1Y21wPVVvKHt0eXBlOmZYLHNlbGVjdG9yczpbWyJhbGVydHMtY29tcG9uZW50Il1dLGlucHV0czp7bnVtQWxlcnRzOiJudW1BbGVydHMiLGFsZXJ0c0JyZWFrZG93bjoiYWxlcnRzQnJlYWtkb3duIixmb2N1c1R5cGU6ImZvY3VzVHlwZSJ9LG91dHB1dHM6e29uVG9nZ2xlRm9jdXNUeXBlOiJvblRvZ2dsZUZvY3VzVHlwZSJ9LGRlY2xzOjEwLHZhcnM6NSxjb25zdHM6W1sxLCJhbGVydHMtY29udGFpbmVyIl0sWzEsImRlYnVnZ2luZy10aXRsZSJdLFsxLCJudW0tYWxlcnRzLWNvbnRhaW5lciJdLFsxLCJudW0tYWxlcnRzLWxhYmVsIl0sWzEsIm51bS1hbGVydHMtdmFsdWUiLDMsIm5nQ2xhc3MiXSxbMSwiYWxlcnRzLWJyZWFrZG93bi1jb250YWluZXIiXSxbImNsYXNzIiwiYWxlcnRzLWJyZWFrZG93bi10eXBlIiwzLCJuZ0NsYXNzIiwiY2xpY2siLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJhbGVydHMtYnJlYWtkb3duLXR5cGUiLDMsIm5nQ2xhc3MiLCJjbGljayJdLFsxLCJhbGVydC10eXBlLW5hbWUiXSxbMSwiYWxlcnQtdHlwZS1jb3VudCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoT3UoMCwiZGl2IiwwKSxPdSgxLCJkaXYiLDEpLE1mKDIsIkRlYnVnZ2luZyIpLFB1KCksT3UoMywiZGl2IiwyKSxPdSg0LCJkaXYiLDMpLE1mKDUsIkFsZXJ0cyIpLFB1KCksT3UoNiwiZGl2Iiw0KSxNZig3KSxQdSgpLFB1KCksT3UoOCwiZGl2Iiw1KSxXbSg5LHVYLDYsNiwiZGl2Iiw2KSxQdSgpLFB1KCkpLDImZSYmKEpjKDYpLHZ1KCJuZ0NsYXNzIixnYigzLG1YLG4ubnVtQWxlcnRzPjA/Im5vbi16ZXJvIjoiIikpLEpjKDEpLHhmKCIgIixuLm51bUFsZXJ0cywiICIpLEpjKDIpLHZ1KCJuZ0Zvck9mIixuLmFsZXJ0c0JyZWFrZG93bikpfSxkaXJlY3RpdmVzOlt0dixvdl0sc3R5bGVzOlsiLmFsZXJ0cy1icmVha2Rvd24tY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGZvbnQtc2l6ZTogMTNweDtcbiAgcGFkZGluZzogMTBweCAxMHB4IDEwcHg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLmFsZXJ0cy1icmVha2Rvd24tdHlwZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICBib3JkZXItcmFkaXVzOiAwIDEwcHggMTBweCAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBhZGRpbmc6IDZweCAwIDZweCA1MHB4O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuXG4uYWxlcnRzLWJyZWFrZG93bi10eXBlLmZvY3VzW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmVlZTA7XG59XG5cbi5hbGVydHMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGZvbnQtZmFtaWx5OiAnUm9ib3RvJywgQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtcbn1cblxuLmFsZXJ0LXR5cGUtY291bnRbX25nY29udGVudC0lQ09NUCVdIHtcbiAgXG4gIGJhY2tncm91bmQtY29sb3I6ICNlNTI1OTI7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgY29sb3I6ICNmZmY7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcGFkZGluZzogM3B4O1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHJpZ2h0OiAyMHB4O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuXG4uYWxlcnQtdHlwZS1uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcGFkZGluZzogM3B4O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuXG4uZGVidWdnaW5nLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGZvbnQtc2l6ZTogMThweDtcbn1cblxuLm51bS1hbGVydHMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBwYWRkaW5nOiAxMHB4IDEwcHggMTBweCAzMHB4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi5udW0tYWxlcnRzLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgZm9udC1zaXplOiAxM3B4O1xufVxuXG4ubnVtLWFsZXJ0cy12YWx1ZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICBib3JkZXItcmFkaXVzOiAxMnB4O1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGZvbnQtc2l6ZTogMTNweDtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgbGluZS1oZWlnaHQ6IDI0cHg7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgcmlnaHQ6IDIwcHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgd2lkdGg6IDI0cHg7XG59XG5cbi5udW0tYWxlcnRzLXZhbHVlLm5vbi16ZXJvW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmI3ODA7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufSJdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihmWCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJhbGVydHMtY29tcG9uZW50Iix0ZW1wbGF0ZVVybDoiLi9hbGVydHNfY29tcG9uZW50Lm5nLmh0bWwiLHN0eWxlVXJsczpbIi4vYWxlcnRzX2NvbXBvbmVudC5jc3MiXX1dfV0sbnVsbCx7bnVtQWxlcnRzOlt7dHlwZTp5X31dLGFsZXJ0c0JyZWFrZG93bjpbe3R5cGU6eV99XSxmb2N1c1R5cGU6W3t0eXBlOnlffV0sb25Ub2dnbGVGb2N1c1R5cGU6W3t0eXBlOl9ffV19KTtjb25zdCBnWD17W2laLkZVTkNUSU9OX1JFQ09NUElMRV9BTEVSVF06e2Rpc3BsYXlOYW1lOiJGdW5jdGlvbiByZWNvbXBpbGVzIixkaXNwbGF5U3ltYm9sOiJDIn0sW2laLklORl9OQU5fQUxFUlRdOntkaXNwbGF5TmFtZToiTmFOL+KIniIsZGlzcGxheVN5bWJvbDoi4oieIn0sW2laLlRFTlNPUl9TSEFQRV9BTEVSVF06e2Rpc3BsYXlOYW1lOiJUZW5zb3Igc2hhcGUiLGRpc3BsYXlTeW1ib2w6IuKWoCJ9fTtjbGFzcyBoWHtjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXQsdGhpcy5udW1BbGVydHMkPXRoaXMuc3RvcmUucGlwZShSayh2WikpLHRoaXMuYWxlcnRzQnJlYWtkb3duJD10aGlzLnN0b3JlLnBpcGUoUmsoemsod1osKHQ9Pntjb25zdCBlPU9iamVjdC5rZXlzKHQpO3JldHVybiBlLnNvcnQoKSxlLm1hcCgoZT0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt0eXBlOmV9LGdYW2VdKSx7Y291bnQ6dFtlXX0pKSl9KSkpKSx0aGlzLmZvY3VzVHlwZSQ9dGhpcy5zdG9yZS5waXBlKFJrKHhaKSl9b25Ub2dnbGVGb2N1c1R5cGUodCl7dGhpcy5zdG9yZS5kaXNwYXRjaChBcSh7YWxlcnRUeXBlOnR9KSl9fWhYLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxoWCkoTXUoRWspKX0saFguybVjbXA9VW8oe3R5cGU6aFgsc2VsZWN0b3JzOltbInRmLWRlYnVnZ2VyLXYyLWFsZXJ0cyJdXSxkZWNsczo0LHZhcnM6OSxjb25zdHM6W1szLCJudW1BbGVydHMiLCJhbGVydHNCcmVha2Rvd24iLCJmb2N1c1R5cGUiLCJvblRvZ2dsZUZvY3VzVHlwZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoT3UoMCwiYWxlcnRzLWNvbXBvbmVudCIsMCksTnUoIm9uVG9nZ2xlRm9jdXNUeXBlIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vblRvZ2dsZUZvY3VzVHlwZShlKX0pKSxPYigxLCJhc3luYyIpLE9iKDIsImFzeW5jIiksT2IoMywiYXN5bmMiKSxQdSgpKSwyJmUmJnZ1KCJudW1BbGVydHMiLFBiKDEsMyxuLm51bUFsZXJ0cyQpKSgiYWxlcnRzQnJlYWtkb3duIixQYigyLDUsbi5hbGVydHNCcmVha2Rvd24kKSkoImZvY3VzVHlwZSIsUGIoMyw3LG4uZm9jdXNUeXBlJCkpfSxkaXJlY3RpdmVzOltmWF0scGlwZXM6W012XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGhYLFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6InRmLWRlYnVnZ2VyLXYyLWFsZXJ0cyIsdGVtcGxhdGU6J1xuICAgIDxhbGVydHMtY29tcG9uZW50XG4gICAgICBbbnVtQWxlcnRzXT0ibnVtQWxlcnRzJCB8IGFzeW5jIlxuICAgICAgW2FsZXJ0c0JyZWFrZG93bl09ImFsZXJ0c0JyZWFrZG93biQgfCBhc3luYyJcbiAgICAgIFtmb2N1c1R5cGVdPSJmb2N1c1R5cGUkIHwgYXN5bmMiXG4gICAgICAob25Ub2dnbGVGb2N1c1R5cGUpPSJvblRvZ2dsZUZvY3VzVHlwZSgkZXZlbnQpIlxuICAgID5cbiAgICA8L2FsZXJ0cy1jb21wb25lbnQ+XG4gICcsY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkVrfV19KSxudWxsKTtjb25zdCBiWD1bInNsaWRlcldyYXBwZXIiXSx5WD12SSh7cGFzc2l2ZTohMX0pLF9YPXtwcm92aWRlOnZWLHVzZUV4aXN0aW5nOkluKCgoKT0+dlgpKSxtdWx0aTohMH07Y2xhc3MgQ1h7fWNvbnN0IE1YPUh6KEl6KE56KGNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuX2VsZW1lbnRSZWY9dH19KSwiYWNjZW50IikpO2NsYXNzIHZYIGV4dGVuZHMgTVh7Y29uc3RydWN0b3IodCxlLG4sbyxpLGEscixzKXtzdXBlcih0KSx0aGlzLl9mb2N1c01vbml0b3I9ZSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1uLHRoaXMuX2Rpcj1vLHRoaXMuX25nWm9uZT1hLHRoaXMuX2FuaW1hdGlvbk1vZGU9cyx0aGlzLl9pbnZlcnQ9ITEsdGhpcy5fbWF4PTEwMCx0aGlzLl9taW49MCx0aGlzLl9zdGVwPTEsdGhpcy5fdGh1bWJMYWJlbD0hMSx0aGlzLl90aWNrSW50ZXJ2YWw9MCx0aGlzLl92YWx1ZT1udWxsLHRoaXMuX3ZlcnRpY2FsPSExLHRoaXMuY2hhbmdlPW5ldyBBYix0aGlzLmlucHV0PW5ldyBBYix0aGlzLnZhbHVlQ2hhbmdlPW5ldyBBYix0aGlzLm9uVG91Y2hlZD0oKT0+e30sdGhpcy5fcGVyY2VudD0wLHRoaXMuX2lzU2xpZGluZz0hMSx0aGlzLl9pc0FjdGl2ZT0hMSx0aGlzLl90aWNrSW50ZXJ2YWxQZXJjZW50PTAsdGhpcy5fc2xpZGVyRGltZW5zaW9ucz1udWxsLHRoaXMuX2NvbnRyb2xWYWx1ZUFjY2Vzc29yQ2hhbmdlRm49KCk9Pnt9LHRoaXMuX2RpckNoYW5nZVN1YnNjcmlwdGlvbj1sLkVNUFRZLHRoaXMuX3BvaW50ZXJEb3duPXQ9Pnt0aGlzLmRpc2FibGVkfHx0aGlzLl9pc1NsaWRpbmd8fCF4WCh0KSYmMCE9PXQuYnV0dG9ufHx0aGlzLl9uZ1pvbmUucnVuKCgoKT0+e2NvbnN0IGU9dGhpcy52YWx1ZSxuPU9YKHQpO3RoaXMuX2lzU2xpZGluZz0hMCx0aGlzLl9sYXN0UG9pbnRlckV2ZW50PXQsdC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2ZvY3VzSG9zdEVsZW1lbnQoKSx0aGlzLl9vbk1vdXNlZW50ZXIoKSx0aGlzLl9iaW5kR2xvYmFsRXZlbnRzKHQpLHRoaXMuX2ZvY3VzSG9zdEVsZW1lbnQoKSx0aGlzLl91cGRhdGVWYWx1ZUZyb21Qb3NpdGlvbihuKSx0aGlzLl92YWx1ZU9uU2xpZGVTdGFydD1lLGUhPXRoaXMudmFsdWUmJnRoaXMuX2VtaXRJbnB1dEV2ZW50KCl9KSl9LHRoaXMuX3BvaW50ZXJNb3ZlPXQ9PntpZih0aGlzLl9pc1NsaWRpbmcpe3QucHJldmVudERlZmF1bHQoKTtjb25zdCBlPXRoaXMudmFsdWU7dGhpcy5fbGFzdFBvaW50ZXJFdmVudD10LHRoaXMuX3VwZGF0ZVZhbHVlRnJvbVBvc2l0aW9uKE9YKHQpKSxlIT10aGlzLnZhbHVlJiZ0aGlzLl9lbWl0SW5wdXRFdmVudCgpfX0sdGhpcy5fcG9pbnRlclVwPXQ9Pnt0aGlzLl9pc1NsaWRpbmcmJih0LnByZXZlbnREZWZhdWx0KCksdGhpcy5fcmVtb3ZlR2xvYmFsRXZlbnRzKCksdGhpcy5faXNTbGlkaW5nPSExLHRoaXMuX3ZhbHVlT25TbGlkZVN0YXJ0PT10aGlzLnZhbHVlfHx0aGlzLmRpc2FibGVkfHx0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoKSx0aGlzLl92YWx1ZU9uU2xpZGVTdGFydD10aGlzLl9sYXN0UG9pbnRlckV2ZW50PW51bGwpfSx0aGlzLl93aW5kb3dCbHVyPSgpPT57dGhpcy5fbGFzdFBvaW50ZXJFdmVudCYmdGhpcy5fcG9pbnRlclVwKHRoaXMuX2xhc3RQb2ludGVyRXZlbnQpfSx0aGlzLl9kb2N1bWVudD1yLHRoaXMudGFiSW5kZXg9cGFyc2VJbnQoaSl8fDAsYS5ydW5PdXRzaWRlQW5ndWxhcigoKCk9Pntjb25zdCBlPXQubmF0aXZlRWxlbWVudDtlLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsdGhpcy5fcG9pbnRlckRvd24seVgpLGUuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdGhpcy5fcG9pbnRlckRvd24seVgpfSkpfWdldCBpbnZlcnQoKXtyZXR1cm4gdGhpcy5faW52ZXJ0fXNldCBpbnZlcnQodCl7dGhpcy5faW52ZXJ0PXJJKHQpfWdldCBtYXgoKXtyZXR1cm4gdGhpcy5fbWF4fXNldCBtYXgodCl7dGhpcy5fbWF4PXNJKHQsdGhpcy5fbWF4KSx0aGlzLl9wZXJjZW50PXRoaXMuX2NhbGN1bGF0ZVBlcmNlbnRhZ2UodGhpcy5fdmFsdWUpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfWdldCBtaW4oKXtyZXR1cm4gdGhpcy5fbWlufXNldCBtaW4odCl7dGhpcy5fbWluPXNJKHQsdGhpcy5fbWluKSxudWxsPT09dGhpcy5fdmFsdWUmJih0aGlzLnZhbHVlPXRoaXMuX21pbiksdGhpcy5fcGVyY2VudD10aGlzLl9jYWxjdWxhdGVQZXJjZW50YWdlKHRoaXMuX3ZhbHVlKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX1nZXQgc3RlcCgpe3JldHVybiB0aGlzLl9zdGVwfXNldCBzdGVwKHQpe3RoaXMuX3N0ZXA9c0kodCx0aGlzLl9zdGVwKSx0aGlzLl9zdGVwJTEhPTAmJih0aGlzLl9yb3VuZFRvRGVjaW1hbD10aGlzLl9zdGVwLnRvU3RyaW5nKCkuc3BsaXQoIi4iKS5wb3AoKS5sZW5ndGgpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfWdldCB0aHVtYkxhYmVsKCl7cmV0dXJuIHRoaXMuX3RodW1iTGFiZWx9c2V0IHRodW1iTGFiZWwodCl7dGhpcy5fdGh1bWJMYWJlbD1ySSh0KX1nZXQgdGlja0ludGVydmFsKCl7cmV0dXJuIHRoaXMuX3RpY2tJbnRlcnZhbH1zZXQgdGlja0ludGVydmFsKHQpe3RoaXMuX3RpY2tJbnRlcnZhbD0iYXV0byI9PT10PyJhdXRvIjoibnVtYmVyIj09dHlwZW9mIHR8fCJzdHJpbmciPT10eXBlb2YgdD9zSSh0LHRoaXMuX3RpY2tJbnRlcnZhbCk6MH1nZXQgdmFsdWUoKXtyZXR1cm4gbnVsbD09PXRoaXMuX3ZhbHVlJiYodGhpcy52YWx1ZT10aGlzLl9taW4pLHRoaXMuX3ZhbHVlfXNldCB2YWx1ZSh0KXtpZih0IT09dGhpcy5fdmFsdWUpe2xldCBlPXNJKHQpO3RoaXMuX3JvdW5kVG9EZWNpbWFsJiZlIT09dGhpcy5taW4mJmUhPT10aGlzLm1heCYmKGU9cGFyc2VGbG9hdChlLnRvRml4ZWQodGhpcy5fcm91bmRUb0RlY2ltYWwpKSksdGhpcy5fdmFsdWU9ZSx0aGlzLl9wZXJjZW50PXRoaXMuX2NhbGN1bGF0ZVBlcmNlbnRhZ2UodGhpcy5fdmFsdWUpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfX1nZXQgdmVydGljYWwoKXtyZXR1cm4gdGhpcy5fdmVydGljYWx9c2V0IHZlcnRpY2FsKHQpe3RoaXMuX3ZlcnRpY2FsPXJJKHQpfWdldCBkaXNwbGF5VmFsdWUoKXtyZXR1cm4gdGhpcy5kaXNwbGF5V2l0aD90aGlzLmRpc3BsYXlXaXRoKHRoaXMudmFsdWUpOnRoaXMuX3JvdW5kVG9EZWNpbWFsJiZ0aGlzLnZhbHVlJiZ0aGlzLnZhbHVlJTEhPTA/dGhpcy52YWx1ZS50b0ZpeGVkKHRoaXMuX3JvdW5kVG9EZWNpbWFsKTp0aGlzLnZhbHVlfHwwfWZvY3VzKHQpe3RoaXMuX2ZvY3VzSG9zdEVsZW1lbnQodCl9Ymx1cigpe3RoaXMuX2JsdXJIb3N0RWxlbWVudCgpfWdldCBwZXJjZW50KCl7cmV0dXJuIHRoaXMuX2NsYW1wKHRoaXMuX3BlcmNlbnQpfV9zaG91bGRJbnZlcnRBeGlzKCl7cmV0dXJuIHRoaXMudmVydGljYWw/IXRoaXMuaW52ZXJ0OnRoaXMuaW52ZXJ0fV9pc01pblZhbHVlKCl7cmV0dXJuIDA9PT10aGlzLnBlcmNlbnR9X2dldFRodW1iR2FwKCl7cmV0dXJuIHRoaXMuZGlzYWJsZWQ/Nzp0aGlzLl9pc01pblZhbHVlKCkmJiF0aGlzLnRodW1iTGFiZWw/dGhpcy5faXNBY3RpdmU/MTA6NzowfV9nZXRUcmFja0JhY2tncm91bmRTdHlsZXMoKXtjb25zdCB0PXRoaXMudmVydGljYWw/YDEsICR7MS10aGlzLnBlcmNlbnR9LCAxYDoxLXRoaXMucGVyY2VudCsiLCAxLCAxIjtyZXR1cm57dHJhbnNmb3JtOmB0cmFuc2xhdGUke3RoaXMudmVydGljYWw/IlkiOiJYIn0oJHt0aGlzLl9zaG91bGRJbnZlcnRNb3VzZUNvb3JkcygpPyItIjoiIn0ke3RoaXMuX2dldFRodW1iR2FwKCl9cHgpIHNjYWxlM2QoJHt0fSlgfX1fZ2V0VHJhY2tGaWxsU3R5bGVzKCl7Y29uc3QgdD10aGlzLnBlcmNlbnQsZT10aGlzLnZlcnRpY2FsP2AxLCAke3R9LCAxYDpgJHt0fSwgMSwgMWA7cmV0dXJue3RyYW5zZm9ybTpgdHJhbnNsYXRlJHt0aGlzLnZlcnRpY2FsPyJZIjoiWCJ9KCR7dGhpcy5fc2hvdWxkSW52ZXJ0TW91c2VDb29yZHMoKT8iIjoiLSJ9JHt0aGlzLl9nZXRUaHVtYkdhcCgpfXB4KSBzY2FsZTNkKCR7ZX0pYCxkaXNwbGF5OjA9PT10PyJub25lIjoiIn19X2dldFRpY2tzQ29udGFpbmVyU3R5bGVzKCl7cmV0dXJue3RyYW5zZm9ybTpgdHJhbnNsYXRlJHt0aGlzLnZlcnRpY2FsPyJZIjoiWCJ9KCR7dGhpcy52ZXJ0aWNhbHx8InJ0bCIhPXRoaXMuX2dldERpcmVjdGlvbigpPyItIjoiIn0ke3RoaXMuX3RpY2tJbnRlcnZhbFBlcmNlbnQvMioxMDB9JSlgfX1fZ2V0VGlja3NTdHlsZXMoKXtsZXQgdD0xMDAqdGhpcy5fdGlja0ludGVydmFsUGVyY2VudCxlPXtiYWNrZ3JvdW5kU2l6ZTp0aGlzLnZlcnRpY2FsP2AycHggJHt0fSVgOmAke3R9JSAycHhgLHRyYW5zZm9ybTpgdHJhbnNsYXRlWigwKSB0cmFuc2xhdGUke3RoaXMudmVydGljYWw/IlkiOiJYIn0oJHt0aGlzLnZlcnRpY2FsfHwicnRsIiE9dGhpcy5fZ2V0RGlyZWN0aW9uKCk/IiI6Ii0ifSR7dC8yfSUpJHt0aGlzLnZlcnRpY2FsfHwicnRsIiE9dGhpcy5fZ2V0RGlyZWN0aW9uKCk/IiI6IiByb3RhdGUoMTgwZGVnKSJ9YH07aWYodGhpcy5faXNNaW5WYWx1ZSgpJiZ0aGlzLl9nZXRUaHVtYkdhcCgpKXtjb25zdCB0PXRoaXMuX3Nob3VsZEludmVydEF4aXMoKTtsZXQgbjtuPXRoaXMudmVydGljYWw/dD8iQm90dG9tIjoiVG9wIjp0PyJSaWdodCI6IkxlZnQiLGVbYHBhZGRpbmcke259YF09YCR7dGhpcy5fZ2V0VGh1bWJHYXAoKX1weGB9cmV0dXJuIGV9X2dldFRodW1iQ29udGFpbmVyU3R5bGVzKCl7Y29uc3QgdD10aGlzLl9zaG91bGRJbnZlcnRBeGlzKCk7cmV0dXJue3RyYW5zZm9ybTpgdHJhbnNsYXRlJHt0aGlzLnZlcnRpY2FsPyJZIjoiWCJ9KC0kezEwMCooKCJydGwiIT10aGlzLl9nZXREaXJlY3Rpb24oKXx8dGhpcy52ZXJ0aWNhbD90OiF0KT90aGlzLnBlcmNlbnQ6MS10aGlzLnBlcmNlbnQpfSUpYH19X3Nob3VsZEludmVydE1vdXNlQ29vcmRzKCl7Y29uc3QgdD10aGlzLl9zaG91bGRJbnZlcnRBeGlzKCk7cmV0dXJuInJ0bCIhPXRoaXMuX2dldERpcmVjdGlvbigpfHx0aGlzLnZlcnRpY2FsP3Q6IXR9X2dldERpcmVjdGlvbigpe3JldHVybiB0aGlzLl9kaXImJiJydGwiPT10aGlzLl9kaXIudmFsdWU/InJ0bCI6Imx0ciJ9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fZm9jdXNNb25pdG9yLm1vbml0b3IodGhpcy5fZWxlbWVudFJlZiwhMCkuc3Vic2NyaWJlKCh0PT57dGhpcy5faXNBY3RpdmU9ISF0JiYia2V5Ym9hcmQiIT09dCx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCl9KSksdGhpcy5fZGlyJiYodGhpcy5fZGlyQ2hhbmdlU3Vic2NyaXB0aW9uPXRoaXMuX2Rpci5jaGFuZ2Uuc3Vic2NyaWJlKCgoKT0+e3RoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSkpKX1uZ09uRGVzdHJveSgpe2NvbnN0IHQ9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIix0aGlzLl9wb2ludGVyRG93bix5WCksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0Iix0aGlzLl9wb2ludGVyRG93bix5WCksdGhpcy5fbGFzdFBvaW50ZXJFdmVudD1udWxsLHRoaXMuX3JlbW92ZUdsb2JhbEV2ZW50cygpLHRoaXMuX2ZvY3VzTW9uaXRvci5zdG9wTW9uaXRvcmluZyh0aGlzLl9lbGVtZW50UmVmKSx0aGlzLl9kaXJDaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1fb25Nb3VzZWVudGVyKCl7dGhpcy5kaXNhYmxlZHx8KHRoaXMuX3NsaWRlckRpbWVuc2lvbnM9dGhpcy5fZ2V0U2xpZGVyRGltZW5zaW9ucygpLHRoaXMuX3VwZGF0ZVRpY2tJbnRlcnZhbFBlcmNlbnQoKSl9X29uRm9jdXMoKXt0aGlzLl9zbGlkZXJEaW1lbnNpb25zPXRoaXMuX2dldFNsaWRlckRpbWVuc2lvbnMoKSx0aGlzLl91cGRhdGVUaWNrSW50ZXJ2YWxQZXJjZW50KCl9X29uQmx1cigpe3RoaXMub25Ub3VjaGVkKCl9X29uS2V5ZG93bih0KXtpZih0aGlzLmRpc2FibGVkfHxhSSh0KSlyZXR1cm47Y29uc3QgZT10aGlzLnZhbHVlO3N3aXRjaCh0LmtleUNvZGUpe2Nhc2UgMzM6dGhpcy5faW5jcmVtZW50KDEwKTticmVhaztjYXNlIDM0OnRoaXMuX2luY3JlbWVudCgtMTApO2JyZWFrO2Nhc2UgMzU6dGhpcy52YWx1ZT10aGlzLm1heDticmVhaztjYXNlIDM2OnRoaXMudmFsdWU9dGhpcy5taW47YnJlYWs7Y2FzZSAzNzp0aGlzLl9pbmNyZW1lbnQoInJ0bCI9PXRoaXMuX2dldERpcmVjdGlvbigpPzE6LTEpO2JyZWFrO2Nhc2Ugb0k6dGhpcy5faW5jcmVtZW50KDEpO2JyZWFrO2Nhc2UgMzk6dGhpcy5faW5jcmVtZW50KCJydGwiPT10aGlzLl9nZXREaXJlY3Rpb24oKT8tMToxKTticmVhaztjYXNlIGlJOnRoaXMuX2luY3JlbWVudCgtMSk7YnJlYWs7ZGVmYXVsdDpyZXR1cm59ZSE9dGhpcy52YWx1ZSYmKHRoaXMuX2VtaXRJbnB1dEV2ZW50KCksdGhpcy5fZW1pdENoYW5nZUV2ZW50KCkpLHRoaXMuX2lzU2xpZGluZz0hMCx0LnByZXZlbnREZWZhdWx0KCl9X29uS2V5dXAoKXt0aGlzLl9pc1NsaWRpbmc9ITF9X2dldFdpbmRvdygpe3JldHVybiB0aGlzLl9kb2N1bWVudC5kZWZhdWx0Vmlld3x8d2luZG93fV9iaW5kR2xvYmFsRXZlbnRzKHQpe2NvbnN0IGU9dGhpcy5fZG9jdW1lbnQsbj14WCh0KSxvPW4/InRvdWNoZW5kIjoibW91c2V1cCI7ZS5hZGRFdmVudExpc3RlbmVyKG4/InRvdWNobW92ZSI6Im1vdXNlbW92ZSIsdGhpcy5fcG9pbnRlck1vdmUseVgpLGUuYWRkRXZlbnRMaXN0ZW5lcihvLHRoaXMuX3BvaW50ZXJVcCx5WCksbiYmZS5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGNhbmNlbCIsdGhpcy5fcG9pbnRlclVwLHlYKTtjb25zdCBpPXRoaXMuX2dldFdpbmRvdygpO3ZvaWQgMCE9PWkmJmkmJmkuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsdGhpcy5fd2luZG93Qmx1cil9X3JlbW92ZUdsb2JhbEV2ZW50cygpe2NvbnN0IHQ9dGhpcy5fZG9jdW1lbnQ7dC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHRoaXMuX3BvaW50ZXJNb3ZlLHlYKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHRoaXMuX3BvaW50ZXJVcCx5WCksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLHRoaXMuX3BvaW50ZXJNb3ZlLHlYKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIix0aGlzLl9wb2ludGVyVXAseVgpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hjYW5jZWwiLHRoaXMuX3BvaW50ZXJVcCx5WCk7Y29uc3QgZT10aGlzLl9nZXRXaW5kb3coKTt2b2lkIDAhPT1lJiZlJiZlLnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLHRoaXMuX3dpbmRvd0JsdXIpfV9pbmNyZW1lbnQodCl7dGhpcy52YWx1ZT10aGlzLl9jbGFtcCgodGhpcy52YWx1ZXx8MCkrdGhpcy5zdGVwKnQsdGhpcy5taW4sdGhpcy5tYXgpfV91cGRhdGVWYWx1ZUZyb21Qb3NpdGlvbih0KXtpZighdGhpcy5fc2xpZGVyRGltZW5zaW9ucylyZXR1cm47bGV0IGU9dGhpcy5fY2xhbXAoKCh0aGlzLnZlcnRpY2FsP3QueTp0LngpLSh0aGlzLnZlcnRpY2FsP3RoaXMuX3NsaWRlckRpbWVuc2lvbnMudG9wOnRoaXMuX3NsaWRlckRpbWVuc2lvbnMubGVmdCkpLyh0aGlzLnZlcnRpY2FsP3RoaXMuX3NsaWRlckRpbWVuc2lvbnMuaGVpZ2h0OnRoaXMuX3NsaWRlckRpbWVuc2lvbnMud2lkdGgpKTtpZih0aGlzLl9zaG91bGRJbnZlcnRNb3VzZUNvb3JkcygpJiYoZT0xLWUpLDA9PT1lKXRoaXMudmFsdWU9dGhpcy5taW47ZWxzZSBpZigxPT09ZSl0aGlzLnZhbHVlPXRoaXMubWF4O2Vsc2V7Y29uc3QgdD10aGlzLl9jYWxjdWxhdGVWYWx1ZShlKSxuPU1hdGgucm91bmQoKHQtdGhpcy5taW4pL3RoaXMuc3RlcCkqdGhpcy5zdGVwK3RoaXMubWluO3RoaXMudmFsdWU9dGhpcy5fY2xhbXAobix0aGlzLm1pbix0aGlzLm1heCl9fV9lbWl0Q2hhbmdlRXZlbnQoKXt0aGlzLl9jb250cm9sVmFsdWVBY2Nlc3NvckNoYW5nZUZuKHRoaXMudmFsdWUpLHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKSx0aGlzLmNoYW5nZS5lbWl0KHRoaXMuX2NyZWF0ZUNoYW5nZUV2ZW50KCkpfV9lbWl0SW5wdXRFdmVudCgpe3RoaXMuaW5wdXQuZW1pdCh0aGlzLl9jcmVhdGVDaGFuZ2VFdmVudCgpKX1fdXBkYXRlVGlja0ludGVydmFsUGVyY2VudCgpe2lmKHRoaXMudGlja0ludGVydmFsJiZ0aGlzLl9zbGlkZXJEaW1lbnNpb25zKWlmKCJhdXRvIj09dGhpcy50aWNrSW50ZXJ2YWwpe2xldCB0PXRoaXMudmVydGljYWw/dGhpcy5fc2xpZGVyRGltZW5zaW9ucy5oZWlnaHQ6dGhpcy5fc2xpZGVyRGltZW5zaW9ucy53aWR0aCxlPU1hdGguY2VpbCgzMC8odCp0aGlzLnN0ZXAvKHRoaXMubWF4LXRoaXMubWluKSkpO3RoaXMuX3RpY2tJbnRlcnZhbFBlcmNlbnQ9ZSp0aGlzLnN0ZXAvdH1lbHNlIHRoaXMuX3RpY2tJbnRlcnZhbFBlcmNlbnQ9dGhpcy50aWNrSW50ZXJ2YWwqdGhpcy5zdGVwLyh0aGlzLm1heC10aGlzLm1pbil9X2NyZWF0ZUNoYW5nZUV2ZW50KHQ9dGhpcy52YWx1ZSl7bGV0IGU9bmV3IENYO3JldHVybiBlLnNvdXJjZT10aGlzLGUudmFsdWU9dCxlfV9jYWxjdWxhdGVQZXJjZW50YWdlKHQpe3JldHVybigodHx8MCktdGhpcy5taW4pLyh0aGlzLm1heC10aGlzLm1pbil9X2NhbGN1bGF0ZVZhbHVlKHQpe3JldHVybiB0aGlzLm1pbit0Kih0aGlzLm1heC10aGlzLm1pbil9X2NsYW1wKHQsZT0wLG49MSl7cmV0dXJuIE1hdGgubWF4KGUsTWF0aC5taW4odCxuKSl9X2dldFNsaWRlckRpbWVuc2lvbnMoKXtyZXR1cm4gdGhpcy5fc2xpZGVyV3JhcHBlcj90aGlzLl9zbGlkZXJXcmFwcGVyLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk6bnVsbH1fZm9jdXNIb3N0RWxlbWVudCh0KXt0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXModCl9X2JsdXJIb3N0RWxlbWVudCgpe3RoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5ibHVyKCl9d3JpdGVWYWx1ZSh0KXt0aGlzLnZhbHVlPXR9cmVnaXN0ZXJPbkNoYW5nZSh0KXt0aGlzLl9jb250cm9sVmFsdWVBY2Nlc3NvckNoYW5nZUZuPXR9cmVnaXN0ZXJPblRvdWNoZWQodCl7dGhpcy5vblRvdWNoZWQ9dH1zZXREaXNhYmxlZFN0YXRlKHQpe3RoaXMuZGlzYWJsZWQ9dH19ZnVuY3Rpb24geFgodCl7cmV0dXJuInQiPT09dC50eXBlWzBdfWZ1bmN0aW9uIE9YKHQpe2NvbnN0IGU9eFgodCk/dC50b3VjaGVzWzBdfHx0LmNoYW5nZWRUb3VjaGVzWzBdOnQ7cmV0dXJue3g6ZS5jbGllbnRYLHk6ZS5jbGllbnRZfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovdlguybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHZYKShNdShjaCksTXUocHopLE11KEhoKSxNdShNeiw4KSxPcigidGFiaW5kZXgiKSxNdSh0QyksTXUoVUMpLE11KE53LDgpKX0sdlguybVjbXA9VW8oe3R5cGU6dlgsc2VsZWN0b3JzOltbIm1hdC1zbGlkZXIiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJldiKGJYLDEpLDImZSl7bGV0IHQ7VWIodD1ZYigpKSYmKG4uX3NsaWRlcldyYXBwZXI9dC5maXJzdCl9fSxob3N0QXR0cnM6WyJyb2xlIiwic2xpZGVyIiwxLCJtYXQtc2xpZGVyIiwibWF0LWZvY3VzLWluZGljYXRvciJdLGhvc3RWYXJzOjI5LGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MSZlJiZOdSgiZm9jdXMiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uX29uRm9jdXMoKX0pKSgiYmx1ciIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5fb25CbHVyKCl9KSkoImtleWRvd24iLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLl9vbktleWRvd24oZSl9KSkoImtleXVwIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLl9vbktleXVwKCl9KSkoIm1vdXNlZW50ZXIiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uX29uTW91c2VlbnRlcigpfSkpKCJzZWxlY3RzdGFydCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIGUucHJldmVudERlZmF1bHQoKX0pKSwyJmUmJihrZigidGFiSW5kZXgiLG4udGFiSW5kZXgpLE5tKCJhcmlhLWRpc2FibGVkIixuLmRpc2FibGVkKSgiYXJpYS12YWx1ZW1heCIsbi5tYXgpKCJhcmlhLXZhbHVlbWluIixuLm1pbikoImFyaWEtdmFsdWVub3ciLG4udmFsdWUpKCJhcmlhLXZhbHVldGV4dCIsbnVsbD09bi52YWx1ZVRleHQ/bi5kaXNwbGF5VmFsdWU6bi52YWx1ZVRleHQpKCJhcmlhLW9yaWVudGF0aW9uIixuLnZlcnRpY2FsPyJ2ZXJ0aWNhbCI6Imhvcml6b250YWwiKSxhZigibWF0LXNsaWRlci1kaXNhYmxlZCIsbi5kaXNhYmxlZCkoIm1hdC1zbGlkZXItaGFzLXRpY2tzIixuLnRpY2tJbnRlcnZhbCkoIm1hdC1zbGlkZXItaG9yaXpvbnRhbCIsIW4udmVydGljYWwpKCJtYXQtc2xpZGVyLWF4aXMtaW52ZXJ0ZWQiLG4uX3Nob3VsZEludmVydEF4aXMoKSkoIm1hdC1zbGlkZXItaW52ZXJ0LW1vdXNlLWNvb3JkcyIsbi5fc2hvdWxkSW52ZXJ0TW91c2VDb29yZHMoKSkoIm1hdC1zbGlkZXItc2xpZGluZyIsbi5faXNTbGlkaW5nKSgibWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nIixuLnRodW1iTGFiZWwpKCJtYXQtc2xpZGVyLXZlcnRpY2FsIixuLnZlcnRpY2FsKSgibWF0LXNsaWRlci1taW4tdmFsdWUiLG4uX2lzTWluVmFsdWUoKSkoIm1hdC1zbGlkZXItaGlkZS1sYXN0LXRpY2siLG4uZGlzYWJsZWR8fG4uX2lzTWluVmFsdWUoKSYmbi5fZ2V0VGh1bWJHYXAoKSYmbi5fc2hvdWxkSW52ZXJ0QXhpcygpKSgiX21hdC1hbmltYXRpb24tbm9vcGFibGUiLCJOb29wQW5pbWF0aW9ucyI9PT1uLl9hbmltYXRpb25Nb2RlKSl9LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIixjb2xvcjoiY29sb3IiLHRhYkluZGV4OiJ0YWJJbmRleCIsaW52ZXJ0OiJpbnZlcnQiLG1heDoibWF4IixtaW46Im1pbiIsdmFsdWU6InZhbHVlIixzdGVwOiJzdGVwIix0aHVtYkxhYmVsOiJ0aHVtYkxhYmVsIix0aWNrSW50ZXJ2YWw6InRpY2tJbnRlcnZhbCIsdmVydGljYWw6InZlcnRpY2FsIixkaXNwbGF5V2l0aDoiZGlzcGxheVdpdGgiLHZhbHVlVGV4dDoidmFsdWVUZXh0In0sb3V0cHV0czp7Y2hhbmdlOiJjaGFuZ2UiLGlucHV0OiJpbnB1dCIsdmFsdWVDaGFuZ2U6InZhbHVlQ2hhbmdlIn0sZXhwb3J0QXM6WyJtYXRTbGlkZXIiXSxmZWF0dXJlczpbaWgoW19YXSksZ21dLGRlY2xzOjEzLHZhcnM6Nixjb25zdHM6W1sxLCJtYXQtc2xpZGVyLXdyYXBwZXIiXSxbInNsaWRlcldyYXBwZXIiLCIiXSxbMSwibWF0LXNsaWRlci10cmFjay13cmFwcGVyIl0sWzEsIm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZCIsMywibmdTdHlsZSJdLFsxLCJtYXQtc2xpZGVyLXRyYWNrLWZpbGwiLDMsIm5nU3R5bGUiXSxbMSwibWF0LXNsaWRlci10aWNrcy1jb250YWluZXIiLDMsIm5nU3R5bGUiXSxbMSwibWF0LXNsaWRlci10aWNrcyIsMywibmdTdHlsZSJdLFsxLCJtYXQtc2xpZGVyLXRodW1iLWNvbnRhaW5lciIsMywibmdTdHlsZSJdLFsxLCJtYXQtc2xpZGVyLWZvY3VzLXJpbmciXSxbMSwibWF0LXNsaWRlci10aHVtYiJdLFsxLCJtYXQtc2xpZGVyLXRodW1iLWxhYmVsIl0sWzEsIm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoT3UoMCwiZGl2IiwwLDEpLE91KDIsImRpdiIsMiksd3UoMywiZGl2IiwzKSx3dSg0LCJkaXYiLDQpLFB1KCksT3UoNSwiZGl2Iiw1KSx3dSg2LCJkaXYiLDYpLFB1KCksT3UoNywiZGl2Iiw3KSx3dSg4LCJkaXYiLDgpLHd1KDksImRpdiIsOSksT3UoMTAsImRpdiIsMTApLE91KDExLCJzcGFuIiwxMSksTWYoMTIpLFB1KCksUHUoKSxQdSgpLFB1KCkpLDImZSYmKEpjKDMpLHZ1KCJuZ1N0eWxlIixuLl9nZXRUcmFja0JhY2tncm91bmRTdHlsZXMoKSksSmMoMSksdnUoIm5nU3R5bGUiLG4uX2dldFRyYWNrRmlsbFN0eWxlcygpKSxKYygxKSx2dSgibmdTdHlsZSIsbi5fZ2V0VGlja3NDb250YWluZXJTdHlsZXMoKSksSmMoMSksdnUoIm5nU3R5bGUiLG4uX2dldFRpY2tzU3R5bGVzKCkpLEpjKDEpLHZ1KCJuZ1N0eWxlIixuLl9nZXRUaHVtYkNvbnRhaW5lclN0eWxlcygpKSxKYyg1KSx2ZihuLmRpc3BsYXlWYWx1ZSkpfSxkaXJlY3RpdmVzOltndl0sc3R5bGVzOlsnLm1hdC1zbGlkZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246cmVsYXRpdmU7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6OHB4O291dGxpbmU6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Lm1hdC1zbGlkZXI6bm90KC5tYXQtc2xpZGVyLWRpc2FibGVkKTphY3RpdmUsLm1hdC1zbGlkZXIubWF0LXNsaWRlci1zbGlkaW5nOm5vdCgubWF0LXNsaWRlci1kaXNhYmxlZCl7Y3Vyc29yOi13ZWJraXQtZ3JhYmJpbmc7Y3Vyc29yOmdyYWJiaW5nfS5tYXQtc2xpZGVyLXdyYXBwZXJ7cG9zaXRpb246YWJzb2x1dGU7LXdlYmtpdC1wcmludC1jb2xvci1hZGp1c3Q6ZXhhY3Q7Y29sb3ItYWRqdXN0OmV4YWN0fS5tYXQtc2xpZGVyLXRyYWNrLXdyYXBwZXJ7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO292ZXJmbG93OmhpZGRlbn0ubWF0LXNsaWRlci10cmFjay1maWxse3Bvc2l0aW9uOmFic29sdXRlO3RyYW5zZm9ybS1vcmlnaW46MCAwO3RyYW5zaXRpb246dHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJhY2tncm91bmQtY29sb3IgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZHtwb3NpdGlvbjphYnNvbHV0ZTt0cmFuc2Zvcm0tb3JpZ2luOjEwMCUgMTAwJTt0cmFuc2l0aW9uOnRyYW5zZm9ybSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxiYWNrZ3JvdW5kLWNvbG9yIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5tYXQtc2xpZGVyLXRpY2tzLWNvbnRhaW5lcntwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7dG9wOjA7b3ZlcmZsb3c6aGlkZGVufS5tYXQtc2xpZGVyLXRpY2tze2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdDtiYWNrZ3JvdW5kLWNsaXA6Y29udGVudC1ib3g7Ym94LXNpemluZzpib3JkZXItYm94O29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1zbGlkZXItdGh1bWItY29udGFpbmVye3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTt0cmFuc2l0aW9uOnRyYW5zZm9ybSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LXNsaWRlci1mb2N1cy1yaW5ne3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjMwcHg7aGVpZ2h0OjMwcHg7Ym9yZGVyLXJhZGl1czo1MCU7dHJhbnNmb3JtOnNjYWxlKDApO29wYWNpdHk6MDt0cmFuc2l0aW9uOnRyYW5zZm9ybSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxiYWNrZ3JvdW5kLWNvbG9yIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLG9wYWNpdHkgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1zbGlkZXIuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1zbGlkZXItZm9jdXMtcmluZywubWF0LXNsaWRlci5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7dHJhbnNmb3JtOnNjYWxlKDEpO29wYWNpdHk6MX0ubWF0LXNsaWRlcjpub3QoLm1hdC1zbGlkZXItZGlzYWJsZWQpOm5vdCgubWF0LXNsaWRlci1zbGlkaW5nKSAubWF0LXNsaWRlci10aHVtYi1sYWJlbCwubWF0LXNsaWRlcjpub3QoLm1hdC1zbGlkZXItZGlzYWJsZWQpOm5vdCgubWF0LXNsaWRlci1zbGlkaW5nKSAubWF0LXNsaWRlci10aHVtYntjdXJzb3I6LXdlYmtpdC1ncmFiO2N1cnNvcjpncmFifS5tYXQtc2xpZGVyLXRodW1ie3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0Oi0xMHB4O2JvdHRvbTotMTBweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6MjBweDtoZWlnaHQ6MjBweDtib3JkZXI6M3B4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yYWRpdXM6NTAlO3RyYW5zZm9ybTpzY2FsZSgwLjcpO3RyYW5zaXRpb246dHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJhY2tncm91bmQtY29sb3IgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSksYm9yZGVyLWNvbG9yIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2Rpc3BsYXk6bm9uZTthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoyOHB4O2hlaWdodDoyOHB4O2JvcmRlci1yYWRpdXM6NTAlO3RyYW5zaXRpb246dHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJvcmRlci1yYWRpdXMgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSksYmFja2dyb3VuZC1jb2xvciA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse291dGxpbmU6c29saWQgMXB4fS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7ei1pbmRleDoxO29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1zbGlkZXItc2xpZGluZyAubWF0LXNsaWRlci10cmFjay1maWxsLC5tYXQtc2xpZGVyLXNsaWRpbmcgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZCwubWF0LXNsaWRlci1zbGlkaW5nIC5tYXQtc2xpZGVyLXRodW1iLWNvbnRhaW5lcnt0cmFuc2l0aW9uLWR1cmF0aW9uOjBtc30ubWF0LXNsaWRlci1oYXMtdGlja3MgLm1hdC1zbGlkZXItd3JhcHBlcjo6YWZ0ZXJ7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItd2lkdGg6MDtib3JkZXItc3R5bGU6c29saWQ7b3BhY2l0eTowO3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LXNsaWRlci1oYXMtdGlja3MuY2RrLWZvY3VzZWQ6bm90KC5tYXQtc2xpZGVyLWhpZGUtbGFzdC10aWNrKSAubWF0LXNsaWRlci13cmFwcGVyOjphZnRlciwubWF0LXNsaWRlci1oYXMtdGlja3M6aG92ZXI6bm90KC5tYXQtc2xpZGVyLWhpZGUtbGFzdC10aWNrKSAubWF0LXNsaWRlci13cmFwcGVyOjphZnRlcntvcGFjaXR5OjF9Lm1hdC1zbGlkZXItaGFzLXRpY2tzLmNkay1mb2N1c2VkOm5vdCgubWF0LXNsaWRlci1kaXNhYmxlZCkgLm1hdC1zbGlkZXItdGlja3MsLm1hdC1zbGlkZXItaGFzLXRpY2tzOmhvdmVyOm5vdCgubWF0LXNsaWRlci1kaXNhYmxlZCkgLm1hdC1zbGlkZXItdGlja3N7b3BhY2l0eToxfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcgLm1hdC1zbGlkZXItZm9jdXMtcmluZ3tkaXNwbGF5Om5vbmV9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtkaXNwbGF5OmZsZXh9Lm1hdC1zbGlkZXItYXhpcy1pbnZlcnRlZCAubWF0LXNsaWRlci10cmFjay1maWxse3RyYW5zZm9ybS1vcmlnaW46MTAwJSAxMDAlfS5tYXQtc2xpZGVyLWF4aXMtaW52ZXJ0ZWQgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZHt0cmFuc2Zvcm0tb3JpZ2luOjAgMH0ubWF0LXNsaWRlcjpub3QoLm1hdC1zbGlkZXItZGlzYWJsZWQpLmNkay1mb2N1c2VkLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyAubWF0LXNsaWRlci10aHVtYnt0cmFuc2Zvcm06c2NhbGUoMCl9Lm1hdC1zbGlkZXI6bm90KC5tYXQtc2xpZGVyLWRpc2FibGVkKS5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtib3JkZXItcmFkaXVzOjUwJSA1MCUgMH0ubWF0LXNsaWRlcjpub3QoLm1hdC1zbGlkZXItZGlzYWJsZWQpLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7b3BhY2l0eToxfS5tYXQtc2xpZGVyOm5vdCgubWF0LXNsaWRlci1kaXNhYmxlZCkuY2RrLW1vdXNlLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXI6bm90KC5tYXQtc2xpZGVyLWRpc2FibGVkKS5jZGstdG91Y2gtZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYiwubWF0LXNsaWRlcjpub3QoLm1hdC1zbGlkZXItZGlzYWJsZWQpLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWJ7Ym9yZGVyLXdpZHRoOjJweDt0cmFuc2Zvcm06c2NhbGUoMSl9Lm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItZm9jdXMtcmluZ3t0cmFuc2Zvcm06c2NhbGUoMCk7b3BhY2l0eTowfS5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRodW1ie2JvcmRlci13aWR0aDo0cHg7dHJhbnNmb3JtOnNjYWxlKDAuNSl9Lm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7ZGlzcGxheTpub25lfS5tYXQtc2xpZGVyLWhvcml6b250YWx7aGVpZ2h0OjQ4cHg7bWluLXdpZHRoOjEyOHB4fS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItd3JhcHBlcntoZWlnaHQ6MnB4O3RvcDoyM3B4O2xlZnQ6OHB4O3JpZ2h0OjhweH0ubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXdyYXBwZXI6OmFmdGVye2hlaWdodDoycHg7Ym9yZGVyLWxlZnQtd2lkdGg6MnB4O3JpZ2h0OjA7dG9wOjB9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10cmFjay13cmFwcGVye2hlaWdodDoycHg7d2lkdGg6MTAwJX0ubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRyYWNrLWZpbGx7aGVpZ2h0OjJweDt3aWR0aDoxMDAlO3RyYW5zZm9ybTpzY2FsZVgoMCl9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke2hlaWdodDoycHg7d2lkdGg6MTAwJTt0cmFuc2Zvcm06c2NhbGVYKDEpfS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdGlja3MtY29udGFpbmVye2hlaWdodDoycHg7d2lkdGg6MTAwJX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdGlja3MtY29udGFpbmVye2hlaWdodDowO291dGxpbmU6c29saWQgMnB4O3RvcDoxcHh9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10aWNrc3toZWlnaHQ6MnB4O3dpZHRoOjEwMCV9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10aHVtYi1jb250YWluZXJ7d2lkdGg6MTAwJTtoZWlnaHQ6MDt0b3A6NTAlfS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItZm9jdXMtcmluZ3t0b3A6LTE1cHg7cmlnaHQ6LTE1cHh9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtyaWdodDotMTRweDt0b3A6LTQwcHg7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMjZweCkgc2NhbGUoMC4wMSkgcm90YXRlKDQ1ZGVnKX0ubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7dHJhbnNmb3JtOnJvdGF0ZSgtNDVkZWcpfS5tYXQtc2xpZGVyLWhvcml6b250YWwuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXNsaWRlci1ob3Jpem9udGFsLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zbGlkZXItaG9yaXpvbnRhbC5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e3RyYW5zZm9ybTpub25lfS5tYXQtc2xpZGVyLXZlcnRpY2Fse3dpZHRoOjQ4cHg7bWluLWhlaWdodDoxMjhweH0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci13cmFwcGVye3dpZHRoOjJweDt0b3A6OHB4O2JvdHRvbTo4cHg7bGVmdDoyM3B4fS5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXdyYXBwZXI6OmFmdGVye3dpZHRoOjJweDtib3JkZXItdG9wLXdpZHRoOjJweDtib3R0b206MDtsZWZ0OjB9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdHJhY2std3JhcHBlcntoZWlnaHQ6MTAwJTt3aWR0aDoycHh9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdHJhY2stZmlsbHtoZWlnaHQ6MTAwJTt3aWR0aDoycHg7dHJhbnNmb3JtOnNjYWxlWSgwKX0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke2hlaWdodDoxMDAlO3dpZHRoOjJweDt0cmFuc2Zvcm06c2NhbGVZKDEpfS5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXRpY2tzLWNvbnRhaW5lcnt3aWR0aDoycHg7aGVpZ2h0OjEwMCV9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10aWNrcy1jb250YWluZXJ7d2lkdGg6MDtvdXRsaW5lOnNvbGlkIDJweDtsZWZ0OjFweH0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci1mb2N1cy1yaW5ne2JvdHRvbTotMTVweDtsZWZ0Oi0xNXB4fS5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXRpY2tze3dpZHRoOjJweDtoZWlnaHQ6MTAwJX0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10aHVtYi1jb250YWluZXJ7aGVpZ2h0OjEwMCU7d2lkdGg6MDtsZWZ0OjUwJX0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10aHVtYnstd2Via2l0LWJhY2tmYWNlLXZpc2liaWxpdHk6aGlkZGVuO2JhY2tmYWNlLXZpc2liaWxpdHk6aGlkZGVufS5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2JvdHRvbTotMTRweDtsZWZ0Oi00MHB4O3RyYW5zZm9ybTp0cmFuc2xhdGVYKDI2cHgpIHNjYWxlKDAuMDEpIHJvdGF0ZSgtNDVkZWcpfS5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyl9Lm1hdC1zbGlkZXItdmVydGljYWwuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7dHJhbnNmb3JtOnJvdGF0ZSgtNDVkZWcpfVtkaXI9cnRsXSAubWF0LXNsaWRlci13cmFwcGVyOjphZnRlcntsZWZ0OjA7cmlnaHQ6YXV0b31bZGlyPXJ0bF0gLm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10cmFjay1maWxse3RyYW5zZm9ybS1vcmlnaW46MTAwJSAxMDAlfVtkaXI9cnRsXSAubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7dHJhbnNmb3JtLW9yaWdpbjowIDB9W2Rpcj1ydGxdIC5tYXQtc2xpZGVyLWhvcml6b250YWwubWF0LXNsaWRlci1heGlzLWludmVydGVkIC5tYXQtc2xpZGVyLXRyYWNrLWZpbGx7dHJhbnNmb3JtLW9yaWdpbjowIDB9W2Rpcj1ydGxdIC5tYXQtc2xpZGVyLWhvcml6b250YWwubWF0LXNsaWRlci1heGlzLWludmVydGVkIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7dHJhbnNmb3JtLW9yaWdpbjoxMDAlIDEwMCV9Lm1hdC1zbGlkZXIuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1zbGlkZXItdHJhY2stZmlsbCwubWF0LXNsaWRlci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5kLC5tYXQtc2xpZGVyLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtc2xpZGVyLXRpY2tzLC5tYXQtc2xpZGVyLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtc2xpZGVyLXRodW1iLWNvbnRhaW5lciwubWF0LXNsaWRlci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LXNsaWRlci1mb2N1cy1yaW5nLC5tYXQtc2xpZGVyLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtc2xpZGVyLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLC5tYXQtc2xpZGVyLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHQsLm1hdC1zbGlkZXIuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1zbGlkZXItaGFzLXRpY2tzIC5tYXQtc2xpZGVyLXdyYXBwZXI6OmFmdGVye3RyYW5zaXRpb246bm9uZX1cbiddLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLHZYLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6Y2h9LHt0eXBlOnB6fSx7dHlwZTpIaH0se3R5cGU6TXosZGVjb3JhdG9yczpbe3R5cGU6X3N9XX0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOlJyLGFyZ3M6WyJ0YWJpbmRleCJdfV19LHt0eXBlOnRDfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbVUNdfV19LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbTnddfV19XSx2WC5wcm9wRGVjb3JhdG9ycz17aW52ZXJ0Olt7dHlwZTp5X31dLG1heDpbe3R5cGU6eV99XSxtaW46W3t0eXBlOnlffV0sc3RlcDpbe3R5cGU6eV99XSx0aHVtYkxhYmVsOlt7dHlwZTp5X31dLHRpY2tJbnRlcnZhbDpbe3R5cGU6eV99XSx2YWx1ZTpbe3R5cGU6eV99XSxkaXNwbGF5V2l0aDpbe3R5cGU6eV99XSx2YWx1ZVRleHQ6W3t0eXBlOnlffV0sdmVydGljYWw6W3t0eXBlOnlffV0sY2hhbmdlOlt7dHlwZTpfX31dLGlucHV0Olt7dHlwZTpfX31dLHZhbHVlQ2hhbmdlOlt7dHlwZTpfX31dLF9zbGlkZXJXcmFwcGVyOlt7dHlwZTpGcixhcmdzOlsic2xpZGVyV3JhcHBlciJdfV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIodlgsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoibWF0LXNsaWRlciIsZXhwb3J0QXM6Im1hdFNsaWRlciIscHJvdmlkZXJzOltfWF0saG9zdDp7Iihmb2N1cykiOiJfb25Gb2N1cygpIiwiKGJsdXIpIjoiX29uQmx1cigpIiwiKGtleWRvd24pIjoiX29uS2V5ZG93bigkZXZlbnQpIiwiKGtleXVwKSI6Il9vbktleXVwKCkiLCIobW91c2VlbnRlcikiOiJfb25Nb3VzZWVudGVyKCkiLCIoc2VsZWN0c3RhcnQpIjoiJGV2ZW50LnByZXZlbnREZWZhdWx0KCkiLGNsYXNzOiJtYXQtc2xpZGVyIG1hdC1mb2N1cy1pbmRpY2F0b3IiLHJvbGU6InNsaWRlciIsIlt0YWJJbmRleF0iOiJ0YWJJbmRleCIsIlthdHRyLmFyaWEtZGlzYWJsZWRdIjoiZGlzYWJsZWQiLCJbYXR0ci5hcmlhLXZhbHVlbWF4XSI6Im1heCIsIlthdHRyLmFyaWEtdmFsdWVtaW5dIjoibWluIiwiW2F0dHIuYXJpYS12YWx1ZW5vd10iOiJ2YWx1ZSIsIlthdHRyLmFyaWEtdmFsdWV0ZXh0XSI6InZhbHVlVGV4dCA9PSBudWxsID8gZGlzcGxheVZhbHVlIDogdmFsdWVUZXh0IiwiW2F0dHIuYXJpYS1vcmllbnRhdGlvbl0iOid2ZXJ0aWNhbCA/ICJ2ZXJ0aWNhbCIgOiAiaG9yaXpvbnRhbCInLCJbY2xhc3MubWF0LXNsaWRlci1kaXNhYmxlZF0iOiJkaXNhYmxlZCIsIltjbGFzcy5tYXQtc2xpZGVyLWhhcy10aWNrc10iOiJ0aWNrSW50ZXJ2YWwiLCJbY2xhc3MubWF0LXNsaWRlci1ob3Jpem9udGFsXSI6IiF2ZXJ0aWNhbCIsIltjbGFzcy5tYXQtc2xpZGVyLWF4aXMtaW52ZXJ0ZWRdIjoiX3Nob3VsZEludmVydEF4aXMoKSIsIltjbGFzcy5tYXQtc2xpZGVyLWludmVydC1tb3VzZS1jb29yZHNdIjoiX3Nob3VsZEludmVydE1vdXNlQ29vcmRzKCkiLCJbY2xhc3MubWF0LXNsaWRlci1zbGlkaW5nXSI6Il9pc1NsaWRpbmciLCJbY2xhc3MubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nXSI6InRodW1iTGFiZWwiLCJbY2xhc3MubWF0LXNsaWRlci12ZXJ0aWNhbF0iOiJ2ZXJ0aWNhbCIsIltjbGFzcy5tYXQtc2xpZGVyLW1pbi12YWx1ZV0iOiJfaXNNaW5WYWx1ZSgpIiwiW2NsYXNzLm1hdC1zbGlkZXItaGlkZS1sYXN0LXRpY2tdIjoiZGlzYWJsZWQgfHwgX2lzTWluVmFsdWUoKSAmJiBfZ2V0VGh1bWJHYXAoKSAmJiBfc2hvdWxkSW52ZXJ0QXhpcygpIiwiW2NsYXNzLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlXSI6J19hbmltYXRpb25Nb2RlID09PSAiTm9vcEFuaW1hdGlvbnMiJ30sdGVtcGxhdGU6JzxkaXYgY2xhc3M9Im1hdC1zbGlkZXItd3JhcHBlciIgI3NsaWRlcldyYXBwZXI+XG4gIDxkaXYgY2xhc3M9Im1hdC1zbGlkZXItdHJhY2std3JhcHBlciI+XG4gICAgPGRpdiBjbGFzcz0ibWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5kIiBbbmdTdHlsZV09Il9nZXRUcmFja0JhY2tncm91bmRTdHlsZXMoKSI+PC9kaXY+XG4gICAgPGRpdiBjbGFzcz0ibWF0LXNsaWRlci10cmFjay1maWxsIiBbbmdTdHlsZV09Il9nZXRUcmFja0ZpbGxTdHlsZXMoKSI+PC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJtYXQtc2xpZGVyLXRpY2tzLWNvbnRhaW5lciIgW25nU3R5bGVdPSJfZ2V0VGlja3NDb250YWluZXJTdHlsZXMoKSI+XG4gICAgPGRpdiBjbGFzcz0ibWF0LXNsaWRlci10aWNrcyIgW25nU3R5bGVdPSJfZ2V0VGlja3NTdHlsZXMoKSI+PC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJtYXQtc2xpZGVyLXRodW1iLWNvbnRhaW5lciIgW25nU3R5bGVdPSJfZ2V0VGh1bWJDb250YWluZXJTdHlsZXMoKSI+XG4gICAgPGRpdiBjbGFzcz0ibWF0LXNsaWRlci1mb2N1cy1yaW5nIj48L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJtYXQtc2xpZGVyLXRodW1iIj48L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJtYXQtc2xpZGVyLXRodW1iLWxhYmVsIj5cbiAgICAgIDxzcGFuIGNsYXNzPSJtYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHQiPnt7ZGlzcGxheVZhbHVlfX08L3NwYW4+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLGlucHV0czpbImRpc2FibGVkIiwiY29sb3IiLCJ0YWJJbmRleCJdLGVuY2Fwc3VsYXRpb246UG8uTm9uZSxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNoLHN0eWxlczpbJy5tYXQtc2xpZGVye2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjhweDtvdXRsaW5lOm5vbmU7dmVydGljYWwtYWxpZ246bWlkZGxlfS5tYXQtc2xpZGVyOm5vdCgubWF0LXNsaWRlci1kaXNhYmxlZCk6YWN0aXZlLC5tYXQtc2xpZGVyLm1hdC1zbGlkZXItc2xpZGluZzpub3QoLm1hdC1zbGlkZXItZGlzYWJsZWQpe2N1cnNvcjotd2Via2l0LWdyYWJiaW5nO2N1cnNvcjpncmFiYmluZ30ubWF0LXNsaWRlci13cmFwcGVye3Bvc2l0aW9uOmFic29sdXRlOy13ZWJraXQtcHJpbnQtY29sb3ItYWRqdXN0OmV4YWN0O2NvbG9yLWFkanVzdDpleGFjdH0ubWF0LXNsaWRlci10cmFjay13cmFwcGVye3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDtvdmVyZmxvdzpoaWRkZW59Lm1hdC1zbGlkZXItdHJhY2stZmlsbHtwb3NpdGlvbjphYnNvbHV0ZTt0cmFuc2Zvcm0tb3JpZ2luOjAgMDt0cmFuc2l0aW9uOnRyYW5zZm9ybSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxiYWNrZ3JvdW5kLWNvbG9yIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7cG9zaXRpb246YWJzb2x1dGU7dHJhbnNmb3JtLW9yaWdpbjoxMDAlIDEwMCU7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSksYmFja2dyb3VuZC1jb2xvciA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LXNsaWRlci10aWNrcy1jb250YWluZXJ7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3RvcDowO292ZXJmbG93OmhpZGRlbn0ubWF0LXNsaWRlci10aWNrc3tiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQ7YmFja2dyb3VuZC1jbGlwOmNvbnRlbnQtYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDtvcGFjaXR5OjA7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5tYXQtc2xpZGVyLXRodW1iLWNvbnRhaW5lcntwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjE7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1zbGlkZXItZm9jdXMtcmluZ3twb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDozMHB4O2hlaWdodDozMHB4O2JvcmRlci1yYWRpdXM6NTAlO3RyYW5zZm9ybTpzY2FsZSgwKTtvcGFjaXR5OjA7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSksYmFja2dyb3VuZC1jb2xvciA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5tYXQtc2xpZGVyLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmcsLm1hdC1zbGlkZXIuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LXNsaWRlci1mb2N1cy1yaW5ne3RyYW5zZm9ybTpzY2FsZSgxKTtvcGFjaXR5OjF9Lm1hdC1zbGlkZXI6bm90KC5tYXQtc2xpZGVyLWRpc2FibGVkKTpub3QoLm1hdC1zbGlkZXItc2xpZGluZykgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwsLm1hdC1zbGlkZXI6bm90KC5tYXQtc2xpZGVyLWRpc2FibGVkKTpub3QoLm1hdC1zbGlkZXItc2xpZGluZykgLm1hdC1zbGlkZXItdGh1bWJ7Y3Vyc29yOi13ZWJraXQtZ3JhYjtjdXJzb3I6Z3JhYn0ubWF0LXNsaWRlci10aHVtYntwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDotMTBweDtib3R0b206LTEwcHg7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjIwcHg7aGVpZ2h0OjIwcHg7Ym9yZGVyOjNweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItcmFkaXVzOjUwJTt0cmFuc2Zvcm06c2NhbGUoMC43KTt0cmFuc2l0aW9uOnRyYW5zZm9ybSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxiYWNrZ3JvdW5kLWNvbG9yIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJvcmRlci1jb2xvciA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LXNsaWRlci10aHVtYi1sYWJlbHtkaXNwbGF5Om5vbmU7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MjhweDtoZWlnaHQ6MjhweDtib3JkZXItcmFkaXVzOjUwJTt0cmFuc2l0aW9uOnRyYW5zZm9ybSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxib3JkZXItcmFkaXVzIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJhY2tncm91bmQtY29sb3IgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtvdXRsaW5lOnNvbGlkIDFweH0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e3otaW5kZXg6MTtvcGFjaXR5OjA7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5tYXQtc2xpZGVyLXNsaWRpbmcgLm1hdC1zbGlkZXItdHJhY2stZmlsbCwubWF0LXNsaWRlci1zbGlkaW5nIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmQsLm1hdC1zbGlkZXItc2xpZGluZyAubWF0LXNsaWRlci10aHVtYi1jb250YWluZXJ7dHJhbnNpdGlvbi1kdXJhdGlvbjowbXN9Lm1hdC1zbGlkZXItaGFzLXRpY2tzIC5tYXQtc2xpZGVyLXdyYXBwZXI6OmFmdGVye2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXdpZHRoOjA7Ym9yZGVyLXN0eWxlOnNvbGlkO29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1zbGlkZXItaGFzLXRpY2tzLmNkay1mb2N1c2VkOm5vdCgubWF0LXNsaWRlci1oaWRlLWxhc3QtdGljaykgLm1hdC1zbGlkZXItd3JhcHBlcjo6YWZ0ZXIsLm1hdC1zbGlkZXItaGFzLXRpY2tzOmhvdmVyOm5vdCgubWF0LXNsaWRlci1oaWRlLWxhc3QtdGljaykgLm1hdC1zbGlkZXItd3JhcHBlcjo6YWZ0ZXJ7b3BhY2l0eToxfS5tYXQtc2xpZGVyLWhhcy10aWNrcy5jZGstZm9jdXNlZDpub3QoLm1hdC1zbGlkZXItZGlzYWJsZWQpIC5tYXQtc2xpZGVyLXRpY2tzLC5tYXQtc2xpZGVyLWhhcy10aWNrczpob3Zlcjpub3QoLm1hdC1zbGlkZXItZGlzYWJsZWQpIC5tYXQtc2xpZGVyLXRpY2tze29wYWNpdHk6MX0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7ZGlzcGxheTpub25lfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7ZGlzcGxheTpmbGV4fS5tYXQtc2xpZGVyLWF4aXMtaW52ZXJ0ZWQgLm1hdC1zbGlkZXItdHJhY2stZmlsbHt0cmFuc2Zvcm0tb3JpZ2luOjEwMCUgMTAwJX0ubWF0LXNsaWRlci1heGlzLWludmVydGVkIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7dHJhbnNmb3JtLW9yaWdpbjowIDB9Lm1hdC1zbGlkZXI6bm90KC5tYXQtc2xpZGVyLWRpc2FibGVkKS5jZGstZm9jdXNlZC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcgLm1hdC1zbGlkZXItdGh1bWJ7dHJhbnNmb3JtOnNjYWxlKDApfS5tYXQtc2xpZGVyOm5vdCgubWF0LXNsaWRlci1kaXNhYmxlZCkuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7Ym9yZGVyLXJhZGl1czo1MCUgNTAlIDB9Lm1hdC1zbGlkZXI6bm90KC5tYXQtc2xpZGVyLWRpc2FibGVkKS5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e29wYWNpdHk6MX0ubWF0LXNsaWRlcjpub3QoLm1hdC1zbGlkZXItZGlzYWJsZWQpLmNkay1tb3VzZS1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtc2xpZGVyOm5vdCgubWF0LXNsaWRlci1kaXNhYmxlZCkuY2RrLXRvdWNoLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXI6bm90KC5tYXQtc2xpZGVyLWRpc2FibGVkKS5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1ie2JvcmRlci13aWR0aDoycHg7dHJhbnNmb3JtOnNjYWxlKDEpfS5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7dHJhbnNmb3JtOnNjYWxlKDApO29wYWNpdHk6MH0ubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10aHVtYntib3JkZXItd2lkdGg6NHB4O3RyYW5zZm9ybTpzY2FsZSgwLjUpfS5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2Rpc3BsYXk6bm9uZX0ubWF0LXNsaWRlci1ob3Jpem9udGFse2hlaWdodDo0OHB4O21pbi13aWR0aDoxMjhweH0ubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXdyYXBwZXJ7aGVpZ2h0OjJweDt0b3A6MjNweDtsZWZ0OjhweDtyaWdodDo4cHh9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci13cmFwcGVyOjphZnRlcntoZWlnaHQ6MnB4O2JvcmRlci1sZWZ0LXdpZHRoOjJweDtyaWdodDowO3RvcDowfS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdHJhY2std3JhcHBlcntoZWlnaHQ6MnB4O3dpZHRoOjEwMCV9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10cmFjay1maWxse2hlaWdodDoycHg7d2lkdGg6MTAwJTt0cmFuc2Zvcm06c2NhbGVYKDApfS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZHtoZWlnaHQ6MnB4O3dpZHRoOjEwMCU7dHJhbnNmb3JtOnNjYWxlWCgxKX0ubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRpY2tzLWNvbnRhaW5lcntoZWlnaHQ6MnB4O3dpZHRoOjEwMCV9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRpY2tzLWNvbnRhaW5lcntoZWlnaHQ6MDtvdXRsaW5lOnNvbGlkIDJweDt0b3A6MXB4fS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdGlja3N7aGVpZ2h0OjJweDt3aWR0aDoxMDAlfS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdGh1bWItY29udGFpbmVye3dpZHRoOjEwMCU7aGVpZ2h0OjA7dG9wOjUwJX0ubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7dG9wOi0xNXB4O3JpZ2h0Oi0xNXB4fS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7cmlnaHQ6LTE0cHg7dG9wOi00MHB4O3RyYW5zZm9ybTp0cmFuc2xhdGVZKDI2cHgpIHNjYWxlKDAuMDEpIHJvdGF0ZSg0NWRlZyl9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKX0ubWF0LXNsaWRlci1ob3Jpem9udGFsLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zbGlkZXItaG9yaXpvbnRhbC5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYi1sYWJlbCwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc2xpZGVyLWhvcml6b250YWwuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dHt0cmFuc2Zvcm06bm9uZX0ubWF0LXNsaWRlci12ZXJ0aWNhbHt3aWR0aDo0OHB4O21pbi1oZWlnaHQ6MTI4cHh9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItd3JhcHBlcnt3aWR0aDoycHg7dG9wOjhweDtib3R0b206OHB4O2xlZnQ6MjNweH0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci13cmFwcGVyOjphZnRlcnt3aWR0aDoycHg7Ym9yZGVyLXRvcC13aWR0aDoycHg7Ym90dG9tOjA7bGVmdDowfS5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXRyYWNrLXdyYXBwZXJ7aGVpZ2h0OjEwMCU7d2lkdGg6MnB4fS5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXRyYWNrLWZpbGx7aGVpZ2h0OjEwMCU7d2lkdGg6MnB4O3RyYW5zZm9ybTpzY2FsZVkoMCl9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZHtoZWlnaHQ6MTAwJTt3aWR0aDoycHg7dHJhbnNmb3JtOnNjYWxlWSgxKX0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10aWNrcy1jb250YWluZXJ7d2lkdGg6MnB4O2hlaWdodDoxMDAlfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdGlja3MtY29udGFpbmVye3dpZHRoOjA7b3V0bGluZTpzb2xpZCAycHg7bGVmdDoxcHh9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItZm9jdXMtcmluZ3tib3R0b206LTE1cHg7bGVmdDotMTVweH0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10aWNrc3t3aWR0aDoycHg7aGVpZ2h0OjEwMCV9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdGh1bWItY29udGFpbmVye2hlaWdodDoxMDAlO3dpZHRoOjA7bGVmdDo1MCV9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdGh1bWJ7LXdlYmtpdC1iYWNrZmFjZS12aXNpYmlsaXR5OmhpZGRlbjtiYWNrZmFjZS12aXNpYmlsaXR5OmhpZGRlbn0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtib3R0b206LTE0cHg7bGVmdDotNDBweDt0cmFuc2Zvcm06dHJhbnNsYXRlWCgyNnB4KSBzY2FsZSgwLjAxKSByb3RhdGUoLTQ1ZGVnKX0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpfS5tYXQtc2xpZGVyLXZlcnRpY2FsLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKX1bZGlyPXJ0bF0gLm1hdC1zbGlkZXItd3JhcHBlcjo6YWZ0ZXJ7bGVmdDowO3JpZ2h0OmF1dG99W2Rpcj1ydGxdIC5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdHJhY2stZmlsbHt0cmFuc2Zvcm0tb3JpZ2luOjEwMCUgMTAwJX1bZGlyPXJ0bF0gLm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke3RyYW5zZm9ybS1vcmlnaW46MCAwfVtkaXI9cnRsXSAubWF0LXNsaWRlci1ob3Jpem9udGFsLm1hdC1zbGlkZXItYXhpcy1pbnZlcnRlZCAubWF0LXNsaWRlci10cmFjay1maWxse3RyYW5zZm9ybS1vcmlnaW46MCAwfVtkaXI9cnRsXSAubWF0LXNsaWRlci1ob3Jpem9udGFsLm1hdC1zbGlkZXItYXhpcy1pbnZlcnRlZCAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke3RyYW5zZm9ybS1vcmlnaW46MTAwJSAxMDAlfS5tYXQtc2xpZGVyLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtc2xpZGVyLXRyYWNrLWZpbGwsLm1hdC1zbGlkZXIuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZCwubWF0LXNsaWRlci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LXNsaWRlci10aWNrcywubWF0LXNsaWRlci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LXNsaWRlci10aHVtYi1jb250YWluZXIsLm1hdC1zbGlkZXIuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1zbGlkZXItZm9jdXMtcmluZywubWF0LXNsaWRlci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LXNsaWRlci10aHVtYiwubWF0LXNsaWRlci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LXNsaWRlci10aHVtYi1sYWJlbCwubWF0LXNsaWRlci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0LC5tYXQtc2xpZGVyLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtc2xpZGVyLWhhcy10aWNrcyAubWF0LXNsaWRlci13cmFwcGVyOjphZnRlcnt0cmFuc2l0aW9uOm5vbmV9XG4nXX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmNofSx7dHlwZTpwen0se3R5cGU6SGh9LHt0eXBlOk16LGRlY29yYXRvcnM6W3t0eXBlOl9zfV19LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpScixhcmdzOlsidGFiaW5kZXgiXX1dfSx7dHlwZTp0Q30se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W1VDXX1dfSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W053XX1dfV19KSx7Y2hhbmdlOlt7dHlwZTpfX31dLGlucHV0Olt7dHlwZTpfX31dLHZhbHVlQ2hhbmdlOlt7dHlwZTpfX31dLGludmVydDpbe3R5cGU6eV99XSxtYXg6W3t0eXBlOnlffV0sbWluOlt7dHlwZTp5X31dLHZhbHVlOlt7dHlwZTp5X31dLHN0ZXA6W3t0eXBlOnlffV0sdGh1bWJMYWJlbDpbe3R5cGU6eV99XSx0aWNrSW50ZXJ2YWw6W3t0eXBlOnlffV0sdmVydGljYWw6W3t0eXBlOnlffV0sZGlzcGxheVdpdGg6W3t0eXBlOnlffV0sdmFsdWVUZXh0Olt7dHlwZTp5X31dLF9zbGlkZXJXcmFwcGVyOlt7dHlwZTpGcixhcmdzOlsic2xpZGVyV3JhcHBlciJdfV19KTtjbGFzcyBQWHt9UFguybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFBYKX0sUFguybVtb2Q9Wm8oe3R5cGU6UFh9KSxQWC7JtWluaj1jbyh7aW1wb3J0czpbW0J2LFR6XSxUel19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKFBYLHtkZWNsYXJhdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm5bdlhdfSxpbXBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW0J2LFR6XX0sZXhwb3J0czpmdW5jdGlvbigpe3JldHVyblt2WCxUel19fSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihQWCxbe3R5cGU6a18sYXJnczpbe2ltcG9ydHM6W0J2LFR6XSxleHBvcnRzOlt2WCxUel0sZGVjbGFyYXRpb25zOlt2WF19XX1dLG51bGwsbnVsbCk7Y29uc3Qgd1g9ezE5OiJmbG9hdDE2IiwxOiJmbG9hdDMyIiwyOiJmbG9hdDY0IiwzOiJpbnQzMiIsNDoidWludDgiLDE3OiJ1aW50MTYiLDIyOiJ1aW50MzIiLDIzOiJ1aW50NjQiLDU6ImludDE2Iiw2OiJpbnQ4Iiw3OiJzdHJpbmciLDg6ImNvbXBsZXg2NCIsMTg6ImNvbXBsZXgxMjgiLDk6ImludDY0IiwxMDoiYm9vbCIsMTE6InFpbnQ4IiwxMjoicXVpbnQ4IiwxNToicWludDE2IiwxNjoicXVpbnQxNiIsMTM6InFpbnQzMiIsMTQ6ImJmbG9hdDE2IiwyMDoicmVzb3VyY2UiLDIxOiJ2YXJpYW50IiwxMTk6ImZsb2F0MTZfcmVmIiwxMDE6ImZsb2F0MzJfcmVmIiwxMDI6ImZsb2F0NjRfcmVmIiwxMDM6ImludDMyX3JlZiIsMTIyOiJ1aW50MzJfcmVmIiwxMDQ6InVpbnQ4X3JlZiIsMTE3OiJ1aW50MTZfcmVmIiwxMDU6ImludDE2X3JlZiIsMTA2OiJpbnQ4X3JlZiIsMTA3OiJzdHJpbmdfcmVmIiwxMDg6ImNvbXBsZXg2NF9yZWYiLDExODoiY29tcGxleDEyOF9yZWYiLDEwOToiaW50NjRfcmVmIiwxMjM6InVpbnQ2NF9yZWYiLDExMDoiYm9vbF9yZWYiLDExMToicWludDhfcmVmIiwxMTI6InF1aW50OF9yZWYiLDExNToicWludDE2X3JlZiIsMTE2OiJxdWludDE2X3JlZiIsMTEzOiJxaW50MzJfcmVmIiwxMTQ6ImJmbG9hdDE2X3JlZiIsMTIwOiJyZXNvdXJjZV9yZWYiLDEyMToidmFyaWFudF9yZWYifTtmdW5jdGlvbiBrWCh0KXtjb25zdHt0ZW5zb3JEZWJ1Z01vZGU6ZSxhcnJheTpufT10O3N3aXRjaChlKXtjYXNlIG9aLk5PX1RFTlNPUjppZihudWxsIT09bil0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWRseSByZWNlaXZlZCBub24tbnVsbCBkZWJ1Zy10ZW5zb3ItdmFsdWUgYXJyYXkgdW5kZXIgTk9fVEVOU09SIG1vZGUiKTtyZXR1cm57fTtjYXNlIG9aLkNVUlRfSEVBTFRIOmlmKG51bGw9PT1ufHwyIT09bi5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKGBVbmRlciBDVVJUX0hFQUxUSCBtb2RlLCBleHBlY3RlZCBkZWJ1Zy10ZW5zb3ItdmFsdWUgYXJyYXkgdG8gaGF2ZSBsZW5ndGggMiwgYnV0IGdvdCAke0pTT04uc3RyaW5naWZ5KG4pfWApO3JldHVybntoYXNJbmZPck5hTjpCb29sZWFuKG5bMV0pfTtjYXNlIG9aLkNPTkNJU0VfSEVBTFRIOntpZihudWxsPT09bnx8NSE9PW4ubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgVW5kZXIgQ09OQ0lTRV9IRUFMVEggbW9kZSwgZXhwZWN0ZWQgZGVidWctdGVuc29yLXZhbHVlIGFycmF5IHRvIGhhdmUgbGVuZ3RoIDUsIGJ1dCBnb3QgJHtKU09OLnN0cmluZ2lmeShuKX1gKTtjb25zdCB0PXtzaXplOm5bMV19O3JldHVybiBuWzJdPjAmJih0Lm51bU5lZ2F0aXZlSW5mcz1uWzJdKSxuWzNdPjAmJih0Lm51bVBvc2l0aXZlSW5mcz1uWzNdKSxuWzRdPjAmJih0Lm51bU5hTnM9bls0XSksdH1jYXNlIG9aLlNIQVBFOntpZihudWxsPT09bnx8MTAhPT1uLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoYFVuZGVyIFNIQVBFIG1vZGUsIGV4cGVjdGVkIGRlYnVnLXRlbnNvci12YWx1ZSBhcnJheSB0byBoYXZlIGxlbmd0aCAxMCwgYnV0IGdvdCAke0pTT04uc3RyaW5naWZ5KG4pfWApO2NvbnN0IHQ9blsyXTtsZXQgZT1uLnNsaWNlKDQsTWF0aC5taW4oNCt0LG4ubGVuZ3RoKSk7cmV0dXJuIGUubGVuZ3RoPHQmJihlPW5ldyBBcnJheSh0LWUubGVuZ3RoKS5jb25jYXQoZSkpLHtkdHlwZTp3WFtuWzFdXSxyYW5rOnQsc2l6ZTpuWzNdLHNoYXBlOmV9fWNhc2Ugb1ouRlVMTF9IRUFMVEg6e2lmKG51bGw9PT1ufHwxMSE9PW4ubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgVW5kZXIgRlVMTF9IRUFMVEggbW9kZSwgZXhwZWN0ZWQgZGVidWctdGVuc29yLXZhbHVlIGFycmF5IHRvIGhhdmUgbGVuZ3RoIDExLCBidXQgZ290ICR7SlNPTi5zdHJpbmdpZnkobil9YCk7Y29uc3QgdD17ZHR5cGU6d1hbblsyXV0scmFuazpuWzNdLHNpemU6bls0XX07cmV0dXJuIG5bNV0+MCYmKHQubnVtTmVnYXRpdmVJbmZzPW5bNV0pLG5bNl0+MCYmKHQubnVtUG9zaXRpdmVJbmZzPW5bNl0pLG5bN10+MCYmKHQubnVtTmFOcz1uWzddKSxuWzhdPjAmJih0Lm51bU5lZ2F0aXZlRmluaXRlcz1uWzhdKSxuWzldPjAmJih0Lm51bVplcm9zPW5bOV0pLG5bMTBdPjAmJih0Lm51bVBvc2l0aXZlRmluaXRlcz1uWzEwXSksdH1jYXNlIG9aLkZVTExfVEVOU09SOmlmKG51bGwhPT1uKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZGx5IHJlY2VpdmVkIG5vbi1udWxsIGRlYnVnLXRlbnNvci12YWx1ZSBhcnJheSB1bmRlciBGVUxMX1RFTlNPUiBtb2RlIik7cmV0dXJue307ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFVucmVjb2duaXplZCB0ZW5zb3JEZWJ1Z01vZGU6ICR7ZX1gKX19Y29uc3QgU1g9Iltfbmdob3N0LSVDT01QJV0ge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNlM2U1ZTg7XG4gICAgYm9yZGVyOiAxcHggc29saWQgI2MwYzBjMDtcbiAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubycsIG1vbm9zcGFjZTtcbiAgICBoZWlnaHQ6IDE0cHg7XG4gICAgbGluZS1oZWlnaHQ6IDE0cHg7XG4gICAgbWFyZ2luOiAwIDJweDtcbiAgICBwYWRkaW5nOiAxcHggM3B4O1xuICAgIHdpZHRoOiBtYXgtY29udGVudDtcbiAgfSI7ZnVuY3Rpb24gRFgodCxlKXsxJnQmJnd1KDAsImRpdiIsNCl9ZnVuY3Rpb24gRVgodCxlKXtpZigxJnQmJihPdSgwLCJkaXYiLDcpLE91KDEsInNwYW4iLDgpLE1mKDIsIk5hTiIpLFB1KCksT3UoMywic3BhbiIsOSksTWYoNCksUHUoKSxQdSgpKSwyJnQpe2NvbnN0IHQ9THUoMik7SmMoNCkseGYoIsOXIix0Lm51bU5hTnMsIiIpfX1mdW5jdGlvbiBBWCh0LGUpe2lmKDEmdCYmKE91KDAsImRpdiIsNyksT3UoMSwic3BhbiIsOCksTWYoMiwiLeKIniIpLFB1KCksT3UoMywic3BhbiIsOSksTWYoNCksUHUoKSxQdSgpKSwyJnQpe2NvbnN0IHQ9THUoMik7SmMoNCkseGYoIsOXIix0Lm51bU5lZ2F0aXZlSW5mcywiIil9fWZ1bmN0aW9uIFJYKHQsZSl7aWYoMSZ0JiYoT3UoMCwiZGl2Iiw3KSxPdSgxLCJzcGFuIiw4KSxNZigyLCIr4oieIiksUHUoKSxPdSgzLCJzcGFuIiw5KSxNZig0KSxQdSgpLFB1KCkpLDImdCl7Y29uc3QgdD1MdSgyKTtKYyg0KSx4Zigiw5ciLHQubnVtUG9zaXRpdmVJbmZzLCIiKX19ZnVuY3Rpb24gVFgodCxlKXtpZigxJnQmJihPdSgwLCJkaXYiLDcpLE91KDEsInNwYW4iLDEwKSxNZigyLCItIiksUHUoKSxPdSgzLCJzcGFuIiw5KSxNZig0KSxQdSgpLFB1KCkpLDImdCl7Y29uc3QgdD1MdSgyKTtKYyg0KSx4Zigiw5ciLHQubnVtTmVnYXRpdmVGaW5pdGVzLCIiKX19ZnVuY3Rpb24gTlgodCxlKXtpZigxJnQmJihPdSgwLCJkaXYiLDcpLE91KDEsInNwYW4iLDEwKSxNZigyLCIwIiksUHUoKSxPdSgzLCJzcGFuIiw5KSxNZig0KSxQdSgpLFB1KCkpLDImdCl7Y29uc3QgdD1MdSgyKTtKYyg0KSx4Zigiw5ciLHQubnVtWmVyb3MsIiIpfX1mdW5jdGlvbiBJWCh0LGUpe2lmKDEmdCYmKE91KDAsImRpdiIsNyksT3UoMSwic3BhbiIsMTApLE1mKDIsIisiKSxQdSgpLE91KDMsInNwYW4iLDkpLE1mKDQpLFB1KCksUHUoKSksMiZ0KXtjb25zdCB0PUx1KDIpO0pjKDQpLHhmKCLDlyIsdC5udW1Qb3NpdGl2ZUZpbml0ZXMsIiIpfX1mdW5jdGlvbiB6WCh0LGUpe2lmKDEmdCYmKE91KDAsImRpdiIsNSksV20oMSxFWCw1LDEsImRpdiIsNiksV20oMixBWCw1LDEsImRpdiIsNiksV20oMyxSWCw1LDEsImRpdiIsNiksV20oNCxUWCw1LDEsImRpdiIsNiksV20oNSxOWCw1LDEsImRpdiIsNiksV20oNixJWCw1LDEsImRpdiIsNiksUHUoKSksMiZ0KXtjb25zdCB0PUx1KCk7SmMoMSksdnUoIm5nSWYiLHZvaWQgMCE9PXQubnVtTmFOcyYmdC5udW1OYU5zPjApLEpjKDEpLHZ1KCJuZ0lmIix2b2lkIDAhPT10Lm51bU5lZ2F0aXZlSW5mcyYmdC5udW1OZWdhdGl2ZUluZnM+MCksSmMoMSksdnUoIm5nSWYiLHZvaWQgMCE9PXQubnVtUG9zaXRpdmVJbmZzJiZ0Lm51bVBvc2l0aXZlSW5mcz4wKSxKYygxKSx2dSgibmdJZiIsdm9pZCAwIT09dC5udW1OZWdhdGl2ZUZpbml0ZXMmJnQubnVtTmVnYXRpdmVGaW5pdGVzPjApLEpjKDEpLHZ1KCJuZ0lmIix2b2lkIDAhPT10Lm51bVplcm9zJiZ0Lm51bVplcm9zPjApLEpjKDEpLHZ1KCJuZ0lmIix2b2lkIDAhPT10Lm51bVBvc2l0aXZlRmluaXRlcyYmdC5udW1Qb3NpdGl2ZUZpbml0ZXM+MCl9fWNvbnN0IEhYPWZ1bmN0aW9uKHQpe3JldHVyblsiY29udGFpbmVyIix0XX07ZnVuY3Rpb24gRlgodCxlKXsxJnQmJnd1KDAsImRlYnVnLXRlbnNvci1kdHlwZSIsNSksMiZ0JiZ2dSgiZHR5cGUiLEx1KCkuZGVidWdUZW5zb3JWYWx1ZS5kdHlwZSl9ZnVuY3Rpb24gTFgodCxlKXsxJnQmJnd1KDAsImRlYnVnLXRlbnNvci1yYW5rIiw2KSwyJnQmJnZ1KCJyYW5rIixMdSgpLmRlYnVnVGVuc29yVmFsdWUucmFuayl9ZnVuY3Rpb24gQlgodCxlKXsxJnQmJnd1KDAsImRlYnVnLXRlbnNvci1zaGFwZSIsNyksMiZ0JiZ2dSgic2hhcGUiLEx1KCkuZGVidWdUZW5zb3JWYWx1ZS5zaGFwZSl9ZnVuY3Rpb24gVlgodCxlKXsxJnQmJnd1KDAsImRlYnVnLXRlbnNvci1oYXMtaW5mLW9yLW5hbiIsOCksMiZ0JiZ2dSgiaGFzSW5mT3JOYU4iLEx1KCkuZGVidWdUZW5zb3JWYWx1ZS5oYXNJbmZPck5hTil9ZnVuY3Rpb24galgodCxlKXtpZigxJnQmJnd1KDAsImRlYnVnLXRlbnNvci1udW1lcmljLWJyZWFrZG93biIsOSksMiZ0KXtjb25zdCB0PUx1KCk7VXUoInNpemUiLHQuZGVidWdUZW5zb3JWYWx1ZS5zaXplKSx2dSgibnVtTmVnYXRpdmVJbmZzIix0LmRlYnVnVGVuc29yVmFsdWUubnVtTmVnYXRpdmVJbmZzKSgibnVtUG9zaXRpdmVJbmZzIix0LmRlYnVnVGVuc29yVmFsdWUubnVtUG9zaXRpdmVJbmZzKSgibnVtTmFOcyIsdC5kZWJ1Z1RlbnNvclZhbHVlLm51bU5hTnMpKCJudW1OZWdhdGl2ZUZpbml0ZXMiLHQuZGVidWdUZW5zb3JWYWx1ZS5udW1OZWdhdGl2ZUZpbml0ZXMpKCJudW1aZXJvcyIsdC5kZWJ1Z1RlbnNvclZhbHVlLm51bVplcm9zKSgibnVtUG9zaXRpdmVGaW5pdGVzIix0LmRlYnVnVGVuc29yVmFsdWUubnVtUG9zaXRpdmVGaW5pdGVzKX19Y29uc3QgVVg9IlxuICA6aG9zdCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2UzZTVlODtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjYzBjMGMwO1xuICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJywgbW9ub3NwYWNlO1xuICAgIGhlaWdodDogMTRweDtcbiAgICBsaW5lLWhlaWdodDogMTRweDtcbiAgICBtYXJnaW46IDAgMnB4O1xuICAgIHBhZGRpbmc6IDFweCAzcHg7XG4gICAgd2lkdGg6IG1heC1jb250ZW50O1xuICB9XG4iO2NsYXNzIFdYe31XWC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8V1gpfSxXWC7JtWNtcD1Vbyh7dHlwZTpXWCxzZWxlY3RvcnM6W1siZGVidWctdGVuc29yLWR0eXBlIl1dLGlucHV0czp7ZHR5cGU6ImR0eXBlIn0sZGVjbHM6MSx2YXJzOjEsdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmTWYoMCksMiZlJiZ4ZigiICIsbi5kdHlwZSwiICIpfSxzdHlsZXM6W1NYXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoV1gsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoiZGVidWctdGVuc29yLWR0eXBlIix0ZW1wbGF0ZToiIHt7IGR0eXBlIH19ICIsc3R5bGVzOltVWF19XX1dLG51bGwse2R0eXBlOlt7dHlwZTp5X31dfSk7Y2xhc3MgR1h7fUdYLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxHWCl9LEdYLsm1Y21wPVVvKHt0eXBlOkdYLHNlbGVjdG9yczpbWyJkZWJ1Zy10ZW5zb3ItcmFuayJdXSxpbnB1dHM6e3Jhbms6InJhbmsifSxkZWNsczoxLHZhcnM6MSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiZNZigwKSwyJmUmJnhmKCIgIixuLnJhbmssIkQgIil9LHN0eWxlczpbU1hdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihHWCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJkZWJ1Zy10ZW5zb3ItcmFuayIsdGVtcGxhdGU6IiB7eyByYW5rIH19RCAiLHN0eWxlczpbVVhdfV19XSxudWxsLHtyYW5rOlt7dHlwZTp5X31dfSk7Y2xhc3MgWVh7Z2V0IHNoYXBlU3RyaW5nKCl7cmV0dXJuIlsiK3RoaXMuc2hhcGUubWFwKCh0PT52b2lkIDA9PT10PyI/IjpTdHJpbmcodCkpKS5qb2luKCIsIikrIl0ifX1ZWC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8WVgpfSxZWC7JtWNtcD1Vbyh7dHlwZTpZWCxzZWxlY3RvcnM6W1siZGVidWctdGVuc29yLXNoYXBlIl1dLGlucHV0czp7c2hhcGU6InNoYXBlIn0sZGVjbHM6MSx2YXJzOjEsdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmTWYoMCksMiZlJiZ4ZigiIHNoYXBlOiIsbi5zaGFwZVN0cmluZywiICIpfSxzdHlsZXM6W1NYXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoWVgsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoiZGVidWctdGVuc29yLXNoYXBlIix0ZW1wbGF0ZToiIHNoYXBlOnt7IHNoYXBlU3RyaW5nIH19ICIsc3R5bGVzOltVWF19XX1dLG51bGwse3NoYXBlOlt7dHlwZTp5X31dfSk7Y2xhc3MgcVh7Z2V0IGJyZWFrZG93bkV4aXN0cygpe3JldHVybiB2b2lkIDAhPT10aGlzLm51bU5hTnN8fHZvaWQgMCE9PXRoaXMubnVtTmVnYXRpdmVJbmZzfHx2b2lkIDAhPT10aGlzLm51bVBvc2l0aXZlSW5mc3x8dm9pZCAwIT09dGhpcy5udW1OZWdhdGl2ZUZpbml0ZXN8fHZvaWQgMCE9PXRoaXMubnVtWmVyb3N8fHZvaWQgMCE9PXRoaXMubnVtUG9zaXRpdmVGaW5pdGVzfX1xWC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8cVgpfSxxWC7JtWNtcD1Vbyh7dHlwZTpxWCxzZWxlY3RvcnM6W1siZGVidWctdGVuc29yLW51bWVyaWMtYnJlYWtkb3duIl1dLGlucHV0czp7c2l6ZToic2l6ZSIsbnVtTmFOczoibnVtTmFOcyIsbnVtTmVnYXRpdmVJbmZzOiJudW1OZWdhdGl2ZUluZnMiLG51bVBvc2l0aXZlSW5mczoibnVtUG9zaXRpdmVJbmZzIixudW1OZWdhdGl2ZUZpbml0ZXM6Im51bU5lZ2F0aXZlRmluaXRlcyIsbnVtWmVyb3M6Im51bVplcm9zIixudW1Qb3NpdGl2ZUZpbml0ZXM6Im51bVBvc2l0aXZlRmluaXRlcyJ9LGRlY2xzOjcsdmFyczozLGNvbnN0czpbWzEsInNpemUiXSxbMSwic2l6ZS12YWx1ZSJdLFsiY2xhc3MiLCJicmVhayIsNCwibmdJZiJdLFsiY2xhc3MiLCJicmVha2Rvd24iLDQsIm5nSWYiXSxbMSwiYnJlYWsiXSxbMSwiYnJlYWtkb3duIl0sWyJjbGFzcyIsImNhdGVnb3J5Iiw0LCJuZ0lmIl0sWzEsImNhdGVnb3J5Il0sWzEsImNhdGVnb3J5LXRhZyIsImluZmluaXRlIl0sWzEsImNhdGVnb3J5LWNvdW50Il0sWzEsImNhdGVnb3J5LXRhZyIsImZpbml0ZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoT3UoMCwiZGl2IiwwKSxPdSgxLCJzcGFuIiksTWYoMiwic2l6ZToiKSxQdSgpLE91KDMsInNwYW4iLDEpLE1mKDQpLFB1KCksUHUoKSxXbSg1LERYLDEsMCwiZGl2IiwyKSxXbSg2LHpYLDcsNiwiZGl2IiwzKSksMiZlJiYoSmMoNCksdmYobi5zaXplKSxKYygxKSx2dSgibmdJZiIsbi5icmVha2Rvd25FeGlzdHMpLEpjKDEpLHZ1KCJuZ0lmIixuLmJyZWFrZG93bkV4aXN0cykpfSxkaXJlY3RpdmVzOlthdl0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlM2U1ZTg7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNjMGMwYzA7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgICAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubycsIG1vbm9zcGFjZTtcbiAgICAgICAgZm9udC1zaXplOiAxMHB4O1xuICAgICAgICBtYXJnaW46IDAgMnB4O1xuICAgICAgICBwYWRkaW5nOiAxcHg7XG4gICAgICB9XG4gICAgICAuYnJlYWtbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgZmxleC1iYXNpczogMTAwJTtcbiAgICAgICAgd2lkdGg6IDA7XG4gICAgICB9XG4gICAgICAuc2l6ZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgaGVpZ2h0OiAxMXB4O1xuICAgICAgICBsaW5lLWhlaWdodDogMTFweDtcbiAgICAgICAgbWFyZ2luOiAwIDNweDtcbiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICAgIH1cbiAgICAgIC5icmVha2Rvd25bX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4xMik7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGhlaWdodDogMTFweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDExcHg7XG4gICAgICAgIHBhZGRpbmc6IDJweDtcbiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICAgIH1cbiAgICAgIC5jYXRlZ29yeVtfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAycHg7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiA0cHg7XG4gICAgICAgIG1hcmdpbi10b3A6IDJweDtcbiAgICAgICAgaGVpZ3RoOiAxMDAlO1xuICAgICAgICB3aWR0aDogbWF4LWNvbnRlbnQ7XG4gICAgICB9XG4gICAgICAuY2F0ZWdvcnktdGFnW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgICAgICAgcGFkZGluZzogMCAycHg7XG4gICAgICB9XG4gICAgICAuZmluaXRlW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNhYWE7XG4gICAgICAgIGNvbG9yOiAjZmVmZWZlO1xuICAgICAgfVxuICAgICAgLmluZmluaXRlW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlNTI1OTI7XG4gICAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgfSJdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihxWCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJkZWJ1Zy10ZW5zb3ItbnVtZXJpYy1icmVha2Rvd24iLHRlbXBsYXRlOidcbiAgICA8ZGl2IGNsYXNzPSJzaXplIj5cbiAgICAgIDxzcGFuPnNpemU6PC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9InNpemUtdmFsdWUiPnt7IHNpemUgfX08L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj0iYnJlYWtkb3duRXhpc3RzIiBjbGFzcz0iYnJlYWsiPjwvZGl2PlxuICAgIDxkaXYgKm5nSWY9ImJyZWFrZG93bkV4aXN0cyIgY2xhc3M9ImJyZWFrZG93biI+XG4gICAgICA8ZGl2ICpuZ0lmPSJudW1OYU5zICE9PSB1bmRlZmluZWQgJiYgbnVtTmFOcyA+IDAiIGNsYXNzPSJjYXRlZ29yeSI+XG4gICAgICAgIDxzcGFuIGNsYXNzPSJjYXRlZ29yeS10YWcgaW5maW5pdGUiPk5hTjwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9ImNhdGVnb3J5LWNvdW50Ij7Dl3t7IG51bU5hTnMgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nSWY9Im51bU5lZ2F0aXZlSW5mcyAhPT0gdW5kZWZpbmVkICYmIG51bU5lZ2F0aXZlSW5mcyA+IDAiXG4gICAgICAgIGNsYXNzPSJjYXRlZ29yeSJcbiAgICAgID5cbiAgICAgICAgPHNwYW4gY2xhc3M9ImNhdGVnb3J5LXRhZyBpbmZpbml0ZSI+LeKInjwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9ImNhdGVnb3J5LWNvdW50Ij7Dl3t7IG51bU5lZ2F0aXZlSW5mcyB9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj0ibnVtUG9zaXRpdmVJbmZzICE9PSB1bmRlZmluZWQgJiYgbnVtUG9zaXRpdmVJbmZzID4gMCJcbiAgICAgICAgY2xhc3M9ImNhdGVnb3J5IlxuICAgICAgPlxuICAgICAgICA8c3BhbiBjbGFzcz0iY2F0ZWdvcnktdGFnIGluZmluaXRlIj4r4oiePC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz0iY2F0ZWdvcnktY291bnQiPsOXe3sgbnVtUG9zaXRpdmVJbmZzIH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPSJudW1OZWdhdGl2ZUZpbml0ZXMgIT09IHVuZGVmaW5lZCAmJiBudW1OZWdhdGl2ZUZpbml0ZXMgPiAwIlxuICAgICAgICBjbGFzcz0iY2F0ZWdvcnkiXG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzPSJjYXRlZ29yeS10YWcgZmluaXRlIj4tPC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz0iY2F0ZWdvcnktY291bnQiPsOXe3sgbnVtTmVnYXRpdmVGaW5pdGVzIH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPSJudW1aZXJvcyAhPT0gdW5kZWZpbmVkICYmIG51bVplcm9zID4gMCIgY2xhc3M9ImNhdGVnb3J5Ij5cbiAgICAgICAgPHNwYW4gY2xhc3M9ImNhdGVnb3J5LXRhZyBmaW5pdGUiPjA8L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPSJjYXRlZ29yeS1jb3VudCI+w5d7eyBudW1aZXJvcyB9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj0ibnVtUG9zaXRpdmVGaW5pdGVzICE9PSB1bmRlZmluZWQgJiYgbnVtUG9zaXRpdmVGaW5pdGVzID4gMCJcbiAgICAgICAgY2xhc3M9ImNhdGVnb3J5IlxuICAgICAgPlxuICAgICAgICA8c3BhbiBjbGFzcz0iY2F0ZWdvcnktdGFnIGZpbml0ZSI+Kzwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9ImNhdGVnb3J5LWNvdW50Ij7Dl3t7IG51bVBvc2l0aXZlRmluaXRlcyB9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAnLHN0eWxlczpbIlxuICAgICAgOmhvc3Qge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTNlNWU4O1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjYzBjMGMwO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nLCBtb25vc3BhY2U7XG4gICAgICAgIGZvbnQtc2l6ZTogMTBweDtcbiAgICAgICAgbWFyZ2luOiAwIDJweDtcbiAgICAgICAgcGFkZGluZzogMXB4O1xuICAgICAgfVxuICAgICAgLmJyZWFrIHtcbiAgICAgICAgZmxleC1iYXNpczogMTAwJTtcbiAgICAgICAgd2lkdGg6IDA7XG4gICAgICB9XG4gICAgICAuc2l6ZSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBoZWlnaHQ6IDExcHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxMXB4O1xuICAgICAgICBtYXJnaW46IDAgM3B4O1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgICAgfVxuICAgICAgLmJyZWFrZG93biB7XG4gICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMTIpO1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBoZWlnaHQ6IDExcHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxMXB4O1xuICAgICAgICBwYWRkaW5nOiAycHg7XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICB9XG4gICAgICAuY2F0ZWdvcnkge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAycHg7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiA0cHg7XG4gICAgICAgIG1hcmdpbi10b3A6IDJweDtcbiAgICAgICAgaGVpZ3RoOiAxMDAlO1xuICAgICAgICB3aWR0aDogbWF4LWNvbnRlbnQ7XG4gICAgICB9XG4gICAgICAuY2F0ZWdvcnktdGFnIHtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4O1xuICAgICAgICBwYWRkaW5nOiAwIDJweDtcbiAgICAgIH1cbiAgICAgIC5maW5pdGUge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjYWFhO1xuICAgICAgICBjb2xvcjogI2ZlZmVmZTtcbiAgICAgIH1cbiAgICAgIC5pbmZpbml0ZSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlNTI1OTI7XG4gICAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgfVxuICAgICJdfV19XSxudWxsLHtzaXplOlt7dHlwZTp5X31dLG51bU5hTnM6W3t0eXBlOnlffV0sbnVtTmVnYXRpdmVJbmZzOlt7dHlwZTp5X31dLG51bVBvc2l0aXZlSW5mczpbe3R5cGU6eV99XSxudW1OZWdhdGl2ZUZpbml0ZXM6W3t0eXBlOnlffV0sbnVtWmVyb3M6W3t0eXBlOnlffV0sbnVtUG9zaXRpdmVGaW5pdGVzOlt7dHlwZTp5X31dfSk7Y2xhc3MgWlh7Z2V0IGluZm9TdHJpbmcoKXtyZXR1cm4gdGhpcy5oYXNJbmZPck5hTj8iSGFzIOKIni9OYU4iOiJObyDiiJ4vTmFOIn19WlguybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFpYKX0sWlguybVjbXA9VW8oe3R5cGU6Wlgsc2VsZWN0b3JzOltbImRlYnVnLXRlbnNvci1oYXMtaW5mLW9yLW5hbiJdXSxpbnB1dHM6e2hhc0luZk9yTmFOOiJoYXNJbmZPck5hTiJ9LGRlY2xzOjIsdmFyczo0LGNvbnN0czpbWzMsIm5nQ2xhc3MiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKE91KDAsImRpdiIsMCksTWYoMSksUHUoKSksMiZlJiYodnUoIm5nQ2xhc3MiLGdiKDIsSFgsbi5oYXNJbmZPck5hTj8iaGFzLWluZi1vci1uYW4iOiIiKSksSmMoMSkseGYoIiAiLG4uaW5mb1N0cmluZywiICIpKX0sZGlyZWN0aXZlczpbdHZdLHN0eWxlczpbIi5jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2UzZTVlODtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2MwYzBjMDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgICBjb2xvcjogIzY2NjY2NjtcbiAgICAgICAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubycsIG1vbm9zcGFjZTtcbiAgICAgICAgaGVpZ2h0OiAxNHB4O1xuICAgICAgICBsaW5lLWhlaWdodDogMTRweDtcbiAgICAgICAgbWFyZ2luOiAwIDJweDtcbiAgICAgICAgcGFkZGluZzogMXB4IDNweDtcbiAgICAgICAgd2lkdGg6IG1heC1jb250ZW50O1xuICAgICAgfVxuICAgICAgLmhhcy1pbmYtb3ItbmFuW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlNTI1OTI7XG4gICAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgfSJdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihaWCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJkZWJ1Zy10ZW5zb3ItaGFzLWluZi1vci1uYW4iLHRlbXBsYXRlOiJcbiAgICA8ZGl2IFtuZ0NsYXNzXT1cIlsnY29udGFpbmVyJywgaGFzSW5mT3JOYU4gPyAnaGFzLWluZi1vci1uYW4nIDogJyddXCI+XG4gICAgICB7eyBpbmZvU3RyaW5nIH19XG4gICAgPC9kaXY+XG4gICIsc3R5bGVzOlsiXG4gICAgICAuY29udGFpbmVyIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2UzZTVlODtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2MwYzBjMDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgICBjb2xvcjogIzY2NjY2NjtcbiAgICAgICAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubycsIG1vbm9zcGFjZTtcbiAgICAgICAgaGVpZ2h0OiAxNHB4O1xuICAgICAgICBsaW5lLWhlaWdodDogMTRweDtcbiAgICAgICAgbWFyZ2luOiAwIDJweDtcbiAgICAgICAgcGFkZGluZzogMXB4IDNweDtcbiAgICAgICAgd2lkdGg6IG1heC1jb250ZW50O1xuICAgICAgfVxuICAgICAgLmhhcy1pbmYtb3ItbmFuIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2U1MjU5MjtcbiAgICAgICAgY29sb3I6ICNmZmY7XG4gICAgICB9XG4gICAgIl19XX1dLG51bGwse2hhc0luZk9yTmFOOlt7dHlwZTp5X31dfSk7Y2xhc3MgWFh7fVhYLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxYWCl9LFhYLsm1Y21wPVVvKHt0eXBlOlhYLHNlbGVjdG9yczpbWyJkZWJ1Zy10ZW5zb3ItdmFsdWUiXV0saW5wdXRzOntkZWJ1Z1RlbnNvclZhbHVlOiJkZWJ1Z1RlbnNvclZhbHVlIn0sZGVjbHM6NSx2YXJzOjUsY29uc3RzOltbMywiZHR5cGUiLDQsIm5nSWYiXSxbMywicmFuayIsNCwibmdJZiJdLFszLCJzaGFwZSIsNCwibmdJZiJdLFszLCJoYXNJbmZPck5hTiIsNCwibmdJZiJdLFszLCJzaXplIiwibnVtTmVnYXRpdmVJbmZzIiwibnVtUG9zaXRpdmVJbmZzIiwibnVtTmFOcyIsIm51bU5lZ2F0aXZlRmluaXRlcyIsIm51bVplcm9zIiwibnVtUG9zaXRpdmVGaW5pdGVzIiw0LCJuZ0lmIl0sWzMsImR0eXBlIl0sWzMsInJhbmsiXSxbMywic2hhcGUiXSxbMywiaGFzSW5mT3JOYU4iXSxbMywic2l6ZSIsIm51bU5lZ2F0aXZlSW5mcyIsIm51bVBvc2l0aXZlSW5mcyIsIm51bU5hTnMiLCJudW1OZWdhdGl2ZUZpbml0ZXMiLCJudW1aZXJvcyIsIm51bVBvc2l0aXZlRmluaXRlcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoV20oMCxGWCwxLDEsImRlYnVnLXRlbnNvci1kdHlwZSIsMCksV20oMSxMWCwxLDEsImRlYnVnLXRlbnNvci1yYW5rIiwxKSxXbSgyLEJYLDEsMSwiZGVidWctdGVuc29yLXNoYXBlIiwyKSxXbSgzLFZYLDEsMSwiZGVidWctdGVuc29yLWhhcy1pbmYtb3ItbmFuIiwzKSxXbSg0LGpYLDEsNywiZGVidWctdGVuc29yLW51bWVyaWMtYnJlYWtkb3duIiw0KSksMiZlJiYodnUoIm5nSWYiLHZvaWQgMCE9PW4uZGVidWdUZW5zb3JWYWx1ZS5kdHlwZSksSmMoMSksdnUoIm5nSWYiLHZvaWQgMCE9PW4uZGVidWdUZW5zb3JWYWx1ZS5yYW5rKSxKYygxKSx2dSgibmdJZiIsdm9pZCAwIT09bi5kZWJ1Z1RlbnNvclZhbHVlLnNoYXBlKSxKYygxKSx2dSgibmdJZiIsdm9pZCAwIT09bi5kZWJ1Z1RlbnNvclZhbHVlLmhhc0luZk9yTmFOKSxKYygxKSx2dSgibmdJZiIsdm9pZCAwIT09bi5kZWJ1Z1RlbnNvclZhbHVlLnNpemUpKX0sZGlyZWN0aXZlczpbYXYsV1gsR1gsWVgsWlgscVhdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0ge1xuICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC13cmFwOiBub3dyYXA7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gICAgICB9XG4gICAgICBkZWJ1Zy10ZW5zb3ItbnVtZXJpYy1icmVha2Rvd25bX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgfSJdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihYWCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJkZWJ1Zy10ZW5zb3ItdmFsdWUiLHRlbXBsYXRlOidcbiAgICA8ZGVidWctdGVuc29yLWR0eXBlXG4gICAgICAqbmdJZj0iZGVidWdUZW5zb3JWYWx1ZS5kdHlwZSAhPT0gdW5kZWZpbmVkIlxuICAgICAgW2R0eXBlXT0iZGVidWdUZW5zb3JWYWx1ZS5kdHlwZSJcbiAgICA+XG4gICAgPC9kZWJ1Zy10ZW5zb3ItZHR5cGU+XG4gICAgPGRlYnVnLXRlbnNvci1yYW5rXG4gICAgICAqbmdJZj0iZGVidWdUZW5zb3JWYWx1ZS5yYW5rICE9PSB1bmRlZmluZWQiXG4gICAgICBbcmFua109ImRlYnVnVGVuc29yVmFsdWUucmFuayJcbiAgICA+XG4gICAgPC9kZWJ1Zy10ZW5zb3ItcmFuaz5cbiAgICA8ZGVidWctdGVuc29yLXNoYXBlXG4gICAgICAqbmdJZj0iZGVidWdUZW5zb3JWYWx1ZS5zaGFwZSAhPT0gdW5kZWZpbmVkIlxuICAgICAgW3NoYXBlXT0iZGVidWdUZW5zb3JWYWx1ZS5zaGFwZSJcbiAgICA+XG4gICAgPC9kZWJ1Zy10ZW5zb3Itc2hhcGU+XG4gICAgPGRlYnVnLXRlbnNvci1oYXMtaW5mLW9yLW5hblxuICAgICAgKm5nSWY9ImRlYnVnVGVuc29yVmFsdWUuaGFzSW5mT3JOYU4gIT09IHVuZGVmaW5lZCJcbiAgICAgIFtoYXNJbmZPck5hTl09ImRlYnVnVGVuc29yVmFsdWUuaGFzSW5mT3JOYU4iXG4gICAgPlxuICAgIDwvZGVidWctdGVuc29yLWhhcy1pbmYtb3ItbmFuPlxuICAgIDxkZWJ1Zy10ZW5zb3ItbnVtZXJpYy1icmVha2Rvd25cbiAgICAgICpuZ0lmPSJkZWJ1Z1RlbnNvclZhbHVlLnNpemUgIT09IHVuZGVmaW5lZCJcbiAgICAgIHNpemU9Int7IGRlYnVnVGVuc29yVmFsdWUuc2l6ZSB9fSJcbiAgICAgIFtudW1OZWdhdGl2ZUluZnNdPSJkZWJ1Z1RlbnNvclZhbHVlLm51bU5lZ2F0aXZlSW5mcyJcbiAgICAgIFtudW1Qb3NpdGl2ZUluZnNdPSJkZWJ1Z1RlbnNvclZhbHVlLm51bVBvc2l0aXZlSW5mcyJcbiAgICAgIFtudW1OYU5zXT0iZGVidWdUZW5zb3JWYWx1ZS5udW1OYU5zIlxuICAgICAgW251bU5lZ2F0aXZlRmluaXRlc109ImRlYnVnVGVuc29yVmFsdWUubnVtTmVnYXRpdmVGaW5pdGVzIlxuICAgICAgW251bVplcm9zXT0iZGVidWdUZW5zb3JWYWx1ZS5udW1aZXJvcyJcbiAgICAgIFtudW1Qb3NpdGl2ZUZpbml0ZXNdPSJkZWJ1Z1RlbnNvclZhbHVlLm51bVBvc2l0aXZlRmluaXRlcyJcbiAgICA+XG4gICAgPC9kZWJ1Zy10ZW5zb3ItbnVtZXJpYy1icmVha2Rvd24+XG4gICcsc3R5bGVzOlsiXG4gICAgICA6aG9zdCB7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LXdyYXA6IG5vd3JhcDtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgdmVydGljYWwtYWxpZ246IHRvcDtcbiAgICAgIH1cbiAgICAgIGRlYnVnLXRlbnNvci1udW1lcmljLWJyZWFrZG93biB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIH1cbiAgICAiXX1dfV0sbnVsbCx7ZGVidWdUZW5zb3JWYWx1ZTpbe3R5cGU6eV99XX0pO2NvbnN0IEtYPWZ1bmN0aW9uKHQsZSl7cmV0dXJue3RlbnNvckRlYnVnTW9kZTp0LGFycmF5OmV9fTtmdW5jdGlvbiBKWCh0LGUpe2lmKDEmdCYmKE91KDAsImRpdiIsMTIpLE91KDEsImRpdiIsMTMpLE1mKDIpLFB1KCksT3UoMywiZGl2IiwxNCksd3UoNCwiZGVidWctdGVuc29yLXZhbHVlIiwxNSksUHUoKSxQdSgpKSwyJnQpe2NvbnN0IHQ9ZS4kaW1wbGljaXQsbj1lLmluZGV4LG89THUoMyk7SmMoMikseGYoIk91dHB1dCBzbG90ICIsbiwiOiIpLEpjKDIpLHZ1KCJkZWJ1Z1RlbnNvclZhbHVlIixvLnBhcnNlRGVidWdUZW5zb3JWYWx1ZShoYigyLEtYLG8udGVuc29yRGVidWdNb2RlLHQpKSl9fWZ1bmN0aW9uIFFYKHQsZSl7aWYoMSZ0JiYoT3UoMCwiZGl2IiwxMCksV20oMSxKWCw1LDUsImRpdiIsMTEpLFB1KCkpLDImdCl7Y29uc3QgdD1MdSgyKTtKYygxKSx2dSgibmdGb3JPZiIsdC5kZWJ1Z1RlbnNvclZhbHVlcyl9fWZ1bmN0aW9uICRYKHQsZSl7aWYoMSZ0JiYoT3UoMCwiZGl2IiksT3UoMSwiZGl2IiksT3UoMiwiZGl2IiwzKSxPdSgzLCJzcGFuIiw0KSxNZig0LCIgT3A6ICIpLFB1KCksT3UoNSwic3BhbiIsNSksTWYoNiksUHUoKSxQdSgpLE91KDcsImRpdiIsMyksT3UoOCwic3BhbiIsNCksTWYoOSwiICMgb2YgaW5wdXQgdGVuc29yczogIiksUHUoKSxPdSgxMCwic3BhbiIsNiksTWYoMTEpLFB1KCksUHUoKSxPdSgxMiwiZGl2IiwzKSxPdSgxMywic3BhbiIsNCksTWYoMTQsIiAjIG9mIG91dHB1dCB0ZW5zb3JzOiAiKSxQdSgpLE91KDE1LCJzcGFuIiw3KSxNZigxNiksUHUoKSxPdSgxNywic3BhbiIsOCksTWYoMTgpLFB1KCksUHUoKSxXbSgxOSxRWCwyLDEsImRpdiIsOSksUHUoKSxQdSgpKSwyJnQpe2NvbnN0IHQ9THUoKTtKYyg2KSx4ZigiICIsdC5mb2N1c2VkRXhlY3V0aW9uRGF0YS5vcF90eXBlLCIgIiksSmMoNSkseGYoIiAiLG51bGw9PXQuZm9jdXNlZEV4ZWN1dGlvbkRhdGEuaW5wdXRfdGVuc29yX2lkcz8wOnQuZm9jdXNlZEV4ZWN1dGlvbkRhdGEuaW5wdXRfdGVuc29yX2lkcy5sZW5ndGgsIiAiKSxKYyg1KSx4ZigiICIsbnVsbD09dC5mb2N1c2VkRXhlY3V0aW9uRGF0YS5vdXRwdXRfdGVuc29yX2lkcz8wOnQuZm9jdXNlZEV4ZWN1dGlvbkRhdGEub3V0cHV0X3RlbnNvcl9pZHMubGVuZ3RoLCIgIiksSmMoMikseGYoIiAoZGVidWcgbW9kZTogIix0LlRlbnNvckRlYnVnTW9kZVt0LnRlbnNvckRlYnVnTW9kZV0sIikgIiksSmMoMSksdnUoIm5nSWYiLHQuaGFzRGVidWdUZW5zb3JWYWx1ZXMpfX1mdW5jdGlvbiB0Syh0LGUpe31jbGFzcyBlS3tjb25zdHJ1Y3Rvcigpe3RoaXMudGVuc29yRGVidWdNb2RlPW9aLlVOU1BFQ0lGSUVELHRoaXMuaGFzRGVidWdUZW5zb3JWYWx1ZXM9ITEsdGhpcy5kZWJ1Z1RlbnNvclZhbHVlcz1udWxsLHRoaXMuZGVidWdUZW5zb3JEdHlwZXM9bnVsbCx0aGlzLlRlbnNvckRlYnVnTW9kZT1vWix0aGlzLnBhcnNlRGVidWdUZW5zb3JWYWx1ZT1rWH19ZUsuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGVLKX0sZUsuybVjbXA9VW8oe3R5cGU6ZUssc2VsZWN0b3JzOltbImV4ZWN1dGlvbi1kYXRhLWNvbXBvbmVudCJdXSxpbnB1dHM6e2ZvY3VzZWRFeGVjdXRpb25JbmRleDoiZm9jdXNlZEV4ZWN1dGlvbkluZGV4Iixmb2N1c2VkRXhlY3V0aW9uRGF0YToiZm9jdXNlZEV4ZWN1dGlvbkRhdGEiLHRlbnNvckRlYnVnTW9kZToidGVuc29yRGVidWdNb2RlIixoYXNEZWJ1Z1RlbnNvclZhbHVlczoiaGFzRGVidWdUZW5zb3JWYWx1ZXMiLGRlYnVnVGVuc29yVmFsdWVzOiJkZWJ1Z1RlbnNvclZhbHVlcyIsZGVidWdUZW5zb3JEdHlwZXM6ImRlYnVnVGVuc29yRHR5cGVzIn0sZGVjbHM6Nyx2YXJzOjMsY29uc3RzOltbMSwiZm9jdXMtZXhlY3V0aW9uLWNvbnRhaW5lciJdLFs0LCJuZ0lmIiwibmdJZkVsc2UiXSxbImxvYWRpbmdfc2VjdGlvbiIsIiJdLFsxLCJleGVjdXRpb24tZGF0YS1maWVsZCJdLFsxLCJleGVjdXRpb24tZGF0YS1rZXkiXSxbMSwiZXhlY3V0aW9uLWRhdGEtdmFsdWUiLCJvcC10eXBlIl0sWzEsImV4ZWN1dGlvbi1kYXRhLXZhbHVlIiwiaW5wdXQtdGVuc29ycyJdLFsxLCJleGVjdXRpb24tZGF0YS12YWx1ZSIsIm91dHB1dC10ZW5zb3JzIl0sWzEsImV4ZWN1dGlvbi1kYXRhLXZhbHVlIl0sWyJjbGFzcyIsIm91dHB1dC1zbG90cyIsNCwibmdJZiJdLFsxLCJvdXRwdXQtc2xvdHMiXSxbImNsYXNzIiwib3V0cHV0LXNsb3QtY29udGFpbmVyIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwib3V0cHV0LXNsb3QtY29udGFpbmVyIl0sWzEsIm91dHB1dC1zbG90LW51bWJlciJdLFsxLCJvdXRwdXQtc2xvdC1kZWJ1Zy10ZW5zb3ItdmFsdWUiXSxbMywiZGVidWdUZW5zb3JWYWx1ZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7aWYoMSZlJiYoT3UoMCwiZGl2IiwwKSxPdSgxLCJkaXYiKSxPdSgyLCJzcGFuIiksTWYoMyksUHUoKSxQdSgpLFdtKDQsJFgsMjAsNSwiZGl2IiwxKSxXbSg1LHRLLDAsMCwibmctdGVtcGxhdGUiLG51bGwsMixLYiksUHUoKSksMiZlKXtjb25zdCB0PUdtKDYpO0pjKDMpLHhmKCIgUHl0aG9uIEV4ZWN1dGlvbiAjIixuLmZvY3VzZWRFeGVjdXRpb25JbmRleCwiICIpLEpjKDEpLHZ1KCJuZ0lmIixudWxsIT09bi5mb2N1c2VkRXhlY3V0aW9uRGF0YSkoIm5nSWZFbHNlIix0KX19LGRpcmVjdGl2ZXM6W2F2LG92LFhYXSxzdHlsZXM6WycubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1iYWRnZS1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo5cHh9Lm1hdC1iYWRnZS1sYXJnZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4fS5tYXQtaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWhlYWRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAyNHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE1cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjgzKS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1oNltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC42NykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtYm9keS1zdHJvbmdbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MCAwIDEycHh9Lm1hdC1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FwdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTJweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6MzAwIDExMnB4LzExMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wNWVtO21hcmdpbjowIDAgNTZweH0ubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNTZweC81NnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMmVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNDVweC80OHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMDVlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDM0cHgvNDBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1yYWlzZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3Ryb2tlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZsYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mYWJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW1pbmktZmFiW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtYnV0dG9uLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FyZC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjBweH0ubWF0LWNhcmQtc3VidGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hlY2tib3gtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC10cmFpbGluZy1pY29uLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC1yZW1vdmUubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxOHB4fS5tYXQtdGFibGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWhlYWRlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb290ZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jYWxlbmRhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FsZW5kYXItYm9keVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYWxlbmRhci1wZXJpb2QtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWRpYWxvZy10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTI1O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTUwJTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjVlbTt3aWR0aDoxLjVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW07bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41ZW0gMDtib3JkZXItdG9wOi44NDM3NWVtIHNvbGlkIHRyYW5zcGFyZW50fS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3RvcDotMC44NDM3NWVtO3BhZGRpbmctdG9wOi44NDM3NWVtfS5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjc1JTttYXJnaW4tdG9wOi42NjY2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNzkxNjY2NjY2N2VtKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAycHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyM2VtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzUzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi41NDE2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNjY2NjY2NjY2N2VtKX1AbWVkaWEgcHJpbnR7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIyZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIxZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMmVtKSBzY2FsZSgwLjc1KX19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjI1ZW0gMCAuNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4wOTM3NWVtO21hcmdpbi10b3A6LTAuNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MWVtIDAgMWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjg0Mzc1ZW07bWFyZ2luLXRvcDotMC4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH1pbnB1dC5tYXQtaW5wdXQtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDotMC4wNjI1ZW19Lm1hdC1tZW51LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1wYWdpbmF0b3JbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXBhZ2luYXRvci1wYWdlLXNpemVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3RbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXN0ZXBwZXItdmVydGljYWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc3RlcC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0Om5vcm1hbH0ubWF0LXN0ZXAtbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRhYi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjB9Lm1hdC10b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTZweH0ubWF0LW9wdGdyb3VwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LXNpbXBsZS1zbmFja2Jhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbltfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRyZWVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbmVzdGVkLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4fS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVdOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtcmlwcGxlLm1hdC1yaXBwbGUtdW5ib3VuZGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6NTAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7dHJhbnNmb3JtOnNjYWxlKDApfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpub25lfS5jZGstdmlzdWFsbHktaGlkZGVuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7bGVmdDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmVtcHR5e2Rpc3BsYXk6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LXBhbmVbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOmF1dG87Ym94LXNpemluZzpib3JkZXItYm94O3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7bWF4LXdpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlfS5jZGstb3ZlcmxheS1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKTtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5Oi42fS5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjMyKX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTowfS5jZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO292ZXJmbG93LXk6c2Nyb2xsfUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnR7fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5ke30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxse2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCAwcyAxbXN9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06bm90KDotd2Via2l0LWF1dG9maWxsKXthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIDBzIDFtc310ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemVbX25nY29udGVudC0lQ09NUCVde3Jlc2l6ZTpub25lfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmdbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OmF1dG8gIWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW4gIWltcG9ydGFudH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nLWZpcmVmb3hbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OjAgIWltcG9ydGFudH0ubWF0LWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0uZGVidWctdGVuc29yLXZhbHVlcy10YWJsZVtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0uZGVidWctdGVuc29yLXZhbHVlcy10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICB0ZFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgIzAwMDt0ZXh0LWFsaWduOmxlZnR9LmRlYnVnLXRlbnNvci12YWx1ZXMtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246bGVmdH0uZXhlY3V0aW9uLWRhdGEtZmllbGRbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcH0uZXhlY3V0aW9uLWRhdGEta2V5W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9jazttYXgtd2lkdGg6MTIwcHg7dGV4dC1hbGlnbjpyaWdodDt3aWR0aDoxMjBweH0uZXhlY3V0aW9uLWRhdGEtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1sZWZ0OjEwcHh9LmZvY3VzLWV4ZWN1dGlvbi1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmY2M4MDtib3JkZXItcmFkaXVzOjRweDtmb250LXNpemU6MTJweDtoZWlnaHQ6MTIwcHg7cGFkZGluZzo1cHg7d2lkdGg6MzYwcHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmZvY3VzLWV4ZWN1dGlvbi1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZm9jdXMtZXhlY3V0aW9uLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZTY1MTAwfS5vdXRwdXQtc2xvdHNbX25nY29udGVudC0lQ09NUCVde2hlaWdodDo2MHB4O292ZXJmbG93LXg6YXV0bztvdmVyZmxvdy15OmF1dG99Lm91dHB1dC1zbG90LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgI2ViZWJlYjttYXJnaW4tdG9wOjVweDtwYWRkaW5nOjJweCAwO3ZlcnRpY2FsLWFsaWduOnRvcH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAub3V0cHV0LXNsb3QtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm91dHB1dC1zbG90LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgIzU1NX0ub3V0cHV0LXNsb3QtbnVtYmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmJsb2NrO2ZvbnQtZmFtaWx5OiJSb2JvdG8gTW9ubyIsbW9ub3NwYWNlfS5vdXRwdXQtc2xvdC1kZWJ1Zy10ZW5zb3ItdmFsdWVbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjNweCAwIDNweCAzMHB4fS5vdXRwdXQtdGVuc29yc1tfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDo1cHh9J119KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGVLLFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6ImV4ZWN1dGlvbi1kYXRhLWNvbXBvbmVudCIsdGVtcGxhdGVVcmw6Ii4vZXhlY3V0aW9uX2RhdGFfY29tcG9uZW50Lm5nLmh0bWwiLHN0eWxlVXJsczpbIi4vZXhlY3V0aW9uX2RhdGFfY29tcG9uZW50LmNzcyJdfV19XSxudWxsLHtmb2N1c2VkRXhlY3V0aW9uSW5kZXg6W3t0eXBlOnlffV0sZm9jdXNlZEV4ZWN1dGlvbkRhdGE6W3t0eXBlOnlffV0sdGVuc29yRGVidWdNb2RlOlt7dHlwZTp5X31dLGhhc0RlYnVnVGVuc29yVmFsdWVzOlt7dHlwZTp5X31dLGRlYnVnVGVuc29yVmFsdWVzOlt7dHlwZTp5X31dLGRlYnVnVGVuc29yRHR5cGVzOlt7dHlwZTp5X31dfSk7Y29uc3Qgbks9IlVua25vd24gZHR5cGUiO2NsYXNzIG9Le2NvbnN0cnVjdG9yKHQpe3RoaXMuc3RvcmU9dCx0aGlzLmZvY3VzZWRFeGVjdXRpb25EYXRhJD10aGlzLnN0b3JlLnBpcGUoUmsob1gpKSx0aGlzLnRlbnNvckRlYnVnTW9kZSQ9dGhpcy5zdG9yZS5waXBlKFJrKHprKG9YLCh0PT5udWxsPT09dD9vWi5VTlNQRUNJRklFRDp0LnRlbnNvcl9kZWJ1Z19tb2RlKSkpKSx0aGlzLmhhc0RlYnVnVGVuc29yVmFsdWVzJD10aGlzLnN0b3JlLnBpcGUoUmsoemsob1gsKHQ9PntpZihudWxsPT09dHx8bnVsbD09PXQuZGVidWdfdGVuc29yX3ZhbHVlcylyZXR1cm4hMTtmb3IoY29uc3QgZSBvZiB0LmRlYnVnX3RlbnNvcl92YWx1ZXMpaWYobnVsbCE9PWUmJmUubGVuZ3RoPjApcmV0dXJuITA7cmV0dXJuITF9KSkpKSx0aGlzLmRlYnVnVGVuc29yVmFsdWVzJD10aGlzLnN0b3JlLnBpcGUoUmsoemsob1gsKHQ9Pm51bGw9PT10P251bGw6dC5kZWJ1Z190ZW5zb3JfdmFsdWVzKSkpKSx0aGlzLmRlYnVnVGVuc29yRHR5cGVzJD10aGlzLnN0b3JlLnBpcGUoUmsoemsob1gsKHQ9PntpZihudWxsPT09dHx8bnVsbD09PXQuZGVidWdfdGVuc29yX3ZhbHVlcylyZXR1cm4gbnVsbDtpZih0LnRlbnNvcl9kZWJ1Z19tb2RlIT09b1ouRlVMTF9IRUFMVEgmJnQudGVuc29yX2RlYnVnX21vZGUhPT1vWi5TSEFQRSlyZXR1cm4gbnVsbDtjb25zdCBlPVtdO2Zvcihjb25zdCBuIG9mIHQuZGVidWdfdGVuc29yX3ZhbHVlcylpZihudWxsPT09billLnB1c2gobkspO2Vsc2V7Y29uc3Qgbz1TdHJpbmcodC50ZW5zb3JfZGVidWdfbW9kZT09PW9aLkZVTExfSEVBTFRIP25bMl06blsxXSk7ZS5wdXNoKHdYW29dfHxuSyl9cmV0dXJuIGV9KSkpKX19ZnVuY3Rpb24gaUsodCxlKXtpZigxJnQpe2NvbnN0IHQ9RXUoKTtPdSgwLCJtYXQtc2xpZGVyIiwxMSksTnUoImlucHV0IiwoZnVuY3Rpb24gZShuKXtyZXR1cm4gcmEodCksTHUoMikub25TbGlkZXJDaGFuZ2UuZW1pdChuLnZhbHVlKX0pKSxQdSgpfWlmKDImdCl7Y29uc3QgdD1MdSgyKTt2dSgibWluIiwwKSgibWF4Iix0LnNjcm9sbEJlZ2luSW5kZXhVcHBlckxpbWl0KSgidmFsdWUiLHQuc2Nyb2xsQmVnaW5JbmRleCl9fWZ1bmN0aW9uIGFLKHQsZSl7aWYoMSZ0KXtjb25zdCB0PUV1KCk7T3UoMCwiZGl2Iiw2KSxPdSgxLCJidXR0b24iLDcpLE51KCJjbGljayIsKGZ1bmN0aW9uIGUoKXtyZXR1cm4gcmEodCksTHUoKS5vbk5hdmlnYXRlTGVmdC5lbWl0KCl9KSksTWYoMiwiIDwgIiksUHUoKSxPdSgzLCJkaXYiLDgpLE1mKDQpLFB1KCksT3UoNSwiYnV0dG9uIiw5KSxOdSgiY2xpY2siLChmdW5jdGlvbiBlKCl7cmV0dXJuIHJhKHQpLEx1KCkub25OYXZpZ2F0ZVJpZ2h0LmVtaXQoKX0pKSxNZig2LCIgPiAiKSxQdSgpLFdtKDcsaUssMSwzLCJtYXQtc2xpZGVyIiwxMCksUHUoKX1pZigyJnQpe2NvbnN0IHQ9THUoKTtKYyg0KSxQZigiICIsdC5zY3JvbGxCZWdpbkluZGV4LCIgfiAiLHQuc2Nyb2xsQmVnaW5JbmRleCt0LmRpc3BsYXlDb3VudC0xLCIgb2YgIix0Lm51bUV4ZWN1dGlvbnMsIiAiKSxKYygzKSx2dSgibmdJZiIsdC5zY3JvbGxCZWdpbkluZGV4VXBwZXJMaW1pdD4wKX19b0suybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fG9LKShNdShFaykpfSxvSy7JtWNtcD1Vbyh7dHlwZTpvSyxzZWxlY3RvcnM6W1sidGYtZGVidWdnZXItdjItZXhlY3V0aW9uLWRhdGEiXV0saW5wdXRzOntmb2N1c2VkRXhlY3V0aW9uSW5kZXg6ImZvY3VzZWRFeGVjdXRpb25JbmRleCJ9LGRlY2xzOjYsdmFyczoxNixjb25zdHM6W1szLCJmb2N1c2VkRXhlY3V0aW9uSW5kZXgiLCJmb2N1c2VkRXhlY3V0aW9uRGF0YSIsInRlbnNvckRlYnVnTW9kZSIsImhhc0RlYnVnVGVuc29yVmFsdWVzIiwiZGVidWdUZW5zb3JWYWx1ZXMiLCJkZWJ1Z1RlbnNvckR0eXBlcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYod3UoMCwiZXhlY3V0aW9uLWRhdGEtY29tcG9uZW50IiwwKSxPYigxLCJhc3luYyIpLE9iKDIsImFzeW5jIiksT2IoMywiYXN5bmMiKSxPYig0LCJhc3luYyIpLE9iKDUsImFzeW5jIikpLDImZSYmdnUoImZvY3VzZWRFeGVjdXRpb25JbmRleCIsbi5mb2N1c2VkRXhlY3V0aW9uSW5kZXgpKCJmb2N1c2VkRXhlY3V0aW9uRGF0YSIsUGIoMSw2LG4uZm9jdXNlZEV4ZWN1dGlvbkRhdGEkKSkoInRlbnNvckRlYnVnTW9kZSIsUGIoMiw4LG4udGVuc29yRGVidWdNb2RlJCkpKCJoYXNEZWJ1Z1RlbnNvclZhbHVlcyIsUGIoMywxMCxuLmhhc0RlYnVnVGVuc29yVmFsdWVzJCkpKCJkZWJ1Z1RlbnNvclZhbHVlcyIsUGIoNCwxMixuLmRlYnVnVGVuc29yVmFsdWVzJCkpKCJkZWJ1Z1RlbnNvckR0eXBlcyIsUGIoNSwxNCxuLmRlYnVnVGVuc29yRHR5cGVzJCkpfSxkaXJlY3RpdmVzOltlS10scGlwZXM6W012XSxlbmNhcHN1bGF0aW9uOjJ9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKG9LLFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6InRmLWRlYnVnZ2VyLXYyLWV4ZWN1dGlvbi1kYXRhIix0ZW1wbGF0ZTonXG4gICAgPGV4ZWN1dGlvbi1kYXRhLWNvbXBvbmVudFxuICAgICAgW2ZvY3VzZWRFeGVjdXRpb25JbmRleF09ImZvY3VzZWRFeGVjdXRpb25JbmRleCJcbiAgICAgIFtmb2N1c2VkRXhlY3V0aW9uRGF0YV09ImZvY3VzZWRFeGVjdXRpb25EYXRhJCB8IGFzeW5jIlxuICAgICAgW3RlbnNvckRlYnVnTW9kZV09InRlbnNvckRlYnVnTW9kZSQgfCBhc3luYyJcbiAgICAgIFtoYXNEZWJ1Z1RlbnNvclZhbHVlc109Imhhc0RlYnVnVGVuc29yVmFsdWVzJCB8IGFzeW5jIlxuICAgICAgW2RlYnVnVGVuc29yVmFsdWVzXT0iZGVidWdUZW5zb3JWYWx1ZXMkIHwgYXN5bmMiXG4gICAgICBbZGVidWdUZW5zb3JEdHlwZXNdPSJkZWJ1Z1RlbnNvckR0eXBlcyQgfCBhc3luYyJcbiAgICA+PC9leGVjdXRpb24tZGF0YS1jb21wb25lbnQ+XG4gICd9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpFa31dfSkse2ZvY3VzZWRFeGVjdXRpb25JbmRleDpbe3R5cGU6eV99XX0pO2NvbnN0IHJLPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm5bdCxlLG5dfTtmdW5jdGlvbiBzSyh0LGUpe2lmKDEmdCl7Y29uc3QgdD1FdSgpO091KDAsImRpdiIsMTQpLE51KCJjbGljayIsKGZ1bmN0aW9uIG4oKXtyYSh0KTtjb25zdCBvPWUuaW5kZXg7cmV0dXJuIEx1KDIpLm9uRXhlY3V0aW9uRGlnZXN0Q2xpY2tlZC5lbWl0KG8pfSkpLE91KDEsImRpdiIsMTUpLE1mKDIpLFB1KCksUHUoKX1pZigyJnQpe2NvbnN0IHQ9ZS4kaW1wbGljaXQsbj1lLmluZGV4LG89THUoMik7SmMoMSksVXUoInRpdGxlIix0Lm9wX3R5cGUpLHZ1KCJuZ0NsYXNzIixiYigzLHJLLHQuaXNfZ3JhcGg/ImZ1bmMtZ3JhcGgtZXhlY3V0aW9uIjoiIixuPT09by5mb2N1c2VkRXhlY3V0aW9uRGlzcGxheUluZGV4PyJmb2N1c2VkIjoiIixvLmRpc3BsYXlGb2N1c2VkQWxlcnRUeXBlc1tuXXx8IiIpKSxKYygxKSx4ZigiICIsdC5zaG9ydF9vcF90eXBlLCIgIil9fWZ1bmN0aW9uIGxLKHQsZSl7aWYoMSZ0JiYoT3UoMCwiZGl2IiwxMiksV20oMSxzSywzLDcsImRpdiIsMTMpLFB1KCkpLDImdCl7Y29uc3QgdD1MdSgpO0pjKDEpLHZ1KCJuZ0Zvck9mIix0LmRpc3BsYXlFeGVjdXRpb25EaWdlc3RzKX19ZnVuY3Rpb24gY0sodCxlKXtpZigxJnQmJihrdSgwKSx3dSgxLCJ0Zi1kZWJ1Z2dlci12Mi1leGVjdXRpb24tZGF0YSIsMTYpLFN1KCkpLDImdCl7Y29uc3QgdD1MdSgpO0pjKDEpLHZ1KCJmb2N1c2VkRXhlY3V0aW9uSW5kZXgiLHQuZm9jdXNlZEV4ZWN1dGlvbkluZGV4KX19Y2xhc3MgZEt7Y29uc3RydWN0b3IoKXt0aGlzLmFjdGl2ZVJ1bklkPW51bGwsdGhpcy5sb2FkaW5nTnVtRXhlY3V0aW9ucz0hMSx0aGlzLm51bUV4ZWN1dGlvbnM9MCx0aGlzLnNjcm9sbEJlZ2luSW5kZXg9MCx0aGlzLnNjcm9sbEJlZ2luSW5kZXhVcHBlckxpbWl0PTAsdGhpcy5wYWdlU2l6ZT0wLHRoaXMuZGlzcGxheUNvdW50PTAsdGhpcy5kaXNwbGF5RXhlY3V0aW9uRGlnZXN0cz1bXSx0aGlzLmRpc3BsYXlGb2N1c2VkQWxlcnRUeXBlcz1bXSx0aGlzLmZvY3VzZWRFeGVjdXRpb25JbmRleD1udWxsLHRoaXMuZm9jdXNlZEV4ZWN1dGlvbkRpc3BsYXlJbmRleD1udWxsLHRoaXMuZm9jdXNlZEV4ZWN1dGlvbkRhdGE9bnVsbCx0aGlzLm9uTmF2aWdhdGVMZWZ0PW5ldyBBYix0aGlzLm9uTmF2aWdhdGVSaWdodD1uZXcgQWIsdGhpcy5vbkV4ZWN1dGlvbkRpZ2VzdENsaWNrZWQ9bmV3IEFiLHRoaXMub25TbGlkZXJDaGFuZ2U9bmV3IEFifX1kSy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8ZEspfSxkSy7JtWNtcD1Vbyh7dHlwZTpkSyxzZWxlY3RvcnM6W1sidGltZWxpbmUtY29tcG9uZW50Il1dLGlucHV0czp7YWN0aXZlUnVuSWQ6ImFjdGl2ZVJ1bklkIixsb2FkaW5nTnVtRXhlY3V0aW9uczoibG9hZGluZ051bUV4ZWN1dGlvbnMiLG51bUV4ZWN1dGlvbnM6Im51bUV4ZWN1dGlvbnMiLHNjcm9sbEJlZ2luSW5kZXg6InNjcm9sbEJlZ2luSW5kZXgiLHNjcm9sbEJlZ2luSW5kZXhVcHBlckxpbWl0OiJzY3JvbGxCZWdpbkluZGV4VXBwZXJMaW1pdCIscGFnZVNpemU6InBhZ2VTaXplIixkaXNwbGF5Q291bnQ6ImRpc3BsYXlDb3VudCIsZGlzcGxheUV4ZWN1dGlvbkRpZ2VzdHM6ImRpc3BsYXlFeGVjdXRpb25EaWdlc3RzIixkaXNwbGF5Rm9jdXNlZEFsZXJ0VHlwZXM6ImRpc3BsYXlGb2N1c2VkQWxlcnRUeXBlcyIsZm9jdXNlZEV4ZWN1dGlvbkluZGV4OiJmb2N1c2VkRXhlY3V0aW9uSW5kZXgiLGZvY3VzZWRFeGVjdXRpb25EaXNwbGF5SW5kZXg6ImZvY3VzZWRFeGVjdXRpb25EaXNwbGF5SW5kZXgiLGZvY3VzZWRFeGVjdXRpb25EYXRhOiJmb2N1c2VkRXhlY3V0aW9uRGF0YSJ9LG91dHB1dHM6e29uTmF2aWdhdGVMZWZ0OiJvbk5hdmlnYXRlTGVmdCIsb25OYXZpZ2F0ZVJpZ2h0OiJvbk5hdmlnYXRlUmlnaHQiLG9uRXhlY3V0aW9uRGlnZXN0Q2xpY2tlZDoib25FeGVjdXRpb25EaWdlc3RDbGlja2VkIixvblNsaWRlckNoYW5nZToib25TbGlkZXJDaGFuZ2UifSxkZWNsczo5LHZhcnM6NCxjb25zdHM6W1sxLCJ0aW1lbGluZS10aXRsZSJdLFsxLCJleGVjdXRpb24tY291bnQiXSxbMSwidG9wLWxldmVsLWV4ZWN1dGlvbnMiXSxbImNsYXNzIiwibmF2aWdhdGlvbi1zZWN0aW9uIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImV4ZWN1dGlvbi10aW1lbGluZSIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzEsIm5hdmlnYXRpb24tc2VjdGlvbiJdLFsibWF0LWJ1dHRvbiIsIiIsMSwibmF2aWdhdGlvbi1idXR0b24tbGVmdCIsMywiY2xpY2siXSxbMSwibmF2aWdhdGlvbi1wb3NpdGlvbi1pbmZvIl0sWyJtYXQtYnV0dG9uIiwiIiwxLCJuYXZpZ2F0aW9uLWJ1dHRvbi1yaWdodCIsMywiY2xpY2siXSxbImNsYXNzIiwidGltZWxpbmUtc2xpZGVyIiwic3RlcCIsIjEiLDMsIm1pbiIsIm1heCIsInZhbHVlIiwiaW5wdXQiLDQsIm5nSWYiXSxbInN0ZXAiLCIxIiwxLCJ0aW1lbGluZS1zbGlkZXIiLDMsIm1pbiIsIm1heCIsInZhbHVlIiwiaW5wdXQiXSxbMSwiZXhlY3V0aW9uLXRpbWVsaW5lIl0sWzMsImNsaWNrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywiY2xpY2siXSxbMSwiZXhlY3V0aW9uLWRpZ2VzdCIsMywibmdDbGFzcyIsInRpdGxlIl0sWzMsImZvY3VzZWRFeGVjdXRpb25JbmRleCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoT3UoMCwiZGl2IiksT3UoMSwiZGl2IiwwKSxNZigyLCIgUHl0aG9uIEV4ZWN1dGlvbiBUaW1lbGluZSAiKSxPdSgzLCJzcGFuIiwxKSxNZig0KSxQdSgpLFB1KCksT3UoNSwiZGl2IiwyKSxXbSg2LGFLLDgsNCwiZGl2IiwzKSxXbSg3LGxLLDIsMSwiZGl2Iiw0KSxXbSg4LGNLLDIsMSwibmctY29udGFpbmVyIiw1KSxQdSgpLFB1KCkpLDImZSYmKEpjKDQpLHhmKCIgKCIsbi5udW1FeGVjdXRpb25zLCIpICIpLEpjKDIpLHZ1KCJuZ0lmIixuLm51bUV4ZWN1dGlvbnMpLEpjKDEpLHZ1KCJuZ0lmIixuLm51bUV4ZWN1dGlvbnMpLEpjKDEpLHZ1KCJuZ0lmIixudWxsIT09bi5hY3RpdmVSdW5JZCYmbnVsbCE9PW4uZm9jdXNlZEV4ZWN1dGlvbkluZGV4KSl9LGRpcmVjdGl2ZXM6W2F2LE5ILHZYLG92LHR2LG9LXSxzdHlsZXM6WyIuZXhlY3V0aW9uLWRpZ2VzdFtfbmdjb250ZW50LSVDT01QJV0ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTNlNWU4O1xuICBib3JkZXI6IDFweCBzb2xpZCAjYzBjMGMwO1xuICBjb2xvcjogIzQyNTA2NjtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBmb250LXNpemU6IDEwcHg7XG4gIGhlaWdodDogMTVweDtcbiAgcGFkZGluZzogMXB4O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIHdpZHRoOiAxMnB4O1xufVxuXG4uZXhlY3V0aW9uLWRpZ2VzdC5mdW5jLWdyYXBoLWV4ZWN1dGlvbltfbmdjb250ZW50LSVDT01QJV0ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzdkYmY1O1xuICBjb2xvcjogIzRlNTY2NDtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG5cbi5leGVjdXRpb24tZGlnZXN0LmZvY3VzZWRbX25nY29udGVudC0lQ09NUCVdIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZDRiMztcbiAgYm9yZGVyOiAxcHggc29saWQgIzAwMDtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5cbi5leGVjdXRpb24tZGlnZXN0LkluZk5hbkFsZXJ0W19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlNTI1OTI7XG4gIGNvbG9yOiAjZmZmO1xufVxuXG5cbi5leGVjdXRpb24tZGlnZXN0W19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlciB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICMwMDA7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuXG4uZXhlY3V0aW9uLXRpbWVsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIG92ZXJmbG93LXg6IGhpZGRlbjtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgd2lkdGg6IDEwMCU7XG4gIG1hcmdpbi10b3A6IDVweDtcbiAgbWFyZ2luLWJvdHRvbTogNXB4O1xufVxuXG4udGltZWxpbmUtc2xpZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgaGVpZ2h0OiA0OHB4O1xuICBsZWZ0OiAzNDBweDsgXG4gIHBhZGRpbmc6IDA7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgcmlnaHQ6IDQwcHg7XG59XG5cbiAgLnRpbWVsaW5lLXNsaWRlciAubWF0LXNsaWRlci10aHVtYiB7XG4gIGJvcmRlci1yYWRpdXM6IDVweDtcbiAgcmlnaHQ6IC00MHB4O1xuICB3aWR0aDogODBweDtcbn1cblxuXG4ubmF2aWdhdGlvbi1wb3NpdGlvbi1pbmZvW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBmb250LXNpemU6IDE0cHg7XG4gIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG4gIG1heC13aWR0aDogMjAwcHg7XG4gIHBhZGRpbmctbGVmdDogMTBweDtcbiAgcGFkZGluZy1yaWdodDogMTBweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuXG4ubmF2aWdhdGlvbi1zZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGhlaWdodDogNDhweDtcbiAgbGluZS1oZWlnaHQ6IDQ4cHg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgd2lkdGg6IDEwMCU7XG59Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGRLLFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6InRpbWVsaW5lLWNvbXBvbmVudCIsdGVtcGxhdGVVcmw6Ii4vdGltZWxpbmVfY29tcG9uZW50Lm5nLmh0bWwiLHN0eWxlVXJsczpbIi4vdGltZWxpbmVfY29tcG9uZW50LmNzcyJdLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2h9XX1dLG51bGwse2FjdGl2ZVJ1bklkOlt7dHlwZTp5X31dLGxvYWRpbmdOdW1FeGVjdXRpb25zOlt7dHlwZTp5X31dLG51bUV4ZWN1dGlvbnM6W3t0eXBlOnlffV0sc2Nyb2xsQmVnaW5JbmRleDpbe3R5cGU6eV99XSxzY3JvbGxCZWdpbkluZGV4VXBwZXJMaW1pdDpbe3R5cGU6eV99XSxwYWdlU2l6ZTpbe3R5cGU6eV99XSxkaXNwbGF5Q291bnQ6W3t0eXBlOnlffV0sZGlzcGxheUV4ZWN1dGlvbkRpZ2VzdHM6W3t0eXBlOnlffV0sZGlzcGxheUZvY3VzZWRBbGVydFR5cGVzOlt7dHlwZTp5X31dLGZvY3VzZWRFeGVjdXRpb25JbmRleDpbe3R5cGU6eV99XSxmb2N1c2VkRXhlY3V0aW9uRGlzcGxheUluZGV4Olt7dHlwZTp5X31dLGZvY3VzZWRFeGVjdXRpb25EYXRhOlt7dHlwZTp5X31dLG9uTmF2aWdhdGVMZWZ0Olt7dHlwZTpfX31dLG9uTmF2aWdhdGVSaWdodDpbe3R5cGU6X199XSxvbkV4ZWN1dGlvbkRpZ2VzdENsaWNrZWQ6W3t0eXBlOl9ffV0sb25TbGlkZXJDaGFuZ2U6W3t0eXBlOl9ffV19KTtjb25zdCBwSz1bIl9fZm9yd2FyZF8iLCJfX2JhY2t3YXJkXyIsIl9faW5mZXJlbmNlXyJdO2NsYXNzIG1Le2NvbnN0cnVjdG9yKHQpe3RoaXMuc3RvcmU9dCx0aGlzLmFjdGl2ZVJ1bklkJD10aGlzLnN0b3JlLnBpcGUoUmsoeVopKSx0aGlzLmxvYWRpbmdOdW1FeGVjdXRpb25zJD10aGlzLnN0b3JlLnBpcGUoUmsoemsoU1osKHQ9PnQuc3RhdGU9PUJFLkxPQURJTkcpKSkpLHRoaXMuc2Nyb2xsQmVnaW5JbmRleCQ9dGhpcy5zdG9yZS5waXBlKFJrKEFaKSksdGhpcy5zY3JvbGxCZWdpbkluZGV4VXBwZXJMaW1pdCQ9dGhpcy5zdG9yZS5waXBlKFJrKHprKEVaLFRaLCgodCxlKT0+TWF0aC5tYXgoMCx0LWUpKSkpKSx0aGlzLnBhZ2VTaXplJD10aGlzLnN0b3JlLnBpcGUoUmsoUlopKSx0aGlzLmRpc3BsYXlDb3VudCQ9dGhpcy5zdG9yZS5waXBlKFJrKFRaKSksdGhpcy5kaXNwbGF5RXhlY3V0aW9uRGlnZXN0cyQ9dGhpcy5zdG9yZS5waXBlKFJrKHprKE5aLCh0PT50Lm1hcCgodD0+KGZ1bmN0aW9uIGUodCxuPTEpe2lmKCF0KXJldHVybntvcF90eXBlOiIoTi9BKSIsc2hvcnRfb3BfdHlwZToiLi4iLGlzX2dyYXBoOiExfTtjb25zdCBvPXBLLmZpbHRlcigoZT0+dC5vcF90eXBlLnN0YXJ0c1dpdGgoZSkpKTtpZihvLmxlbmd0aCl7Y29uc3QgZT10Lm9wX3R5cGUuc2xpY2Uob1swXS5sZW5ndGgpO3JldHVybntvcF90eXBlOnQub3BfdHlwZSxzaG9ydF9vcF90eXBlOmUuc2xpY2UoMCxuKSxpc19ncmFwaDohMH19cmV0dXJue29wX3R5cGU6dC5vcF90eXBlLHNob3J0X29wX3R5cGU6dC5vcF90eXBlLnNsaWNlKDAsbiksaXNfZ3JhcGg6ITF9fSkodCkpKSkpKSksdGhpcy5kaXNwbGF5Rm9jdXNlZEFsZXJ0VHlwZXMkPXRoaXMuc3RvcmUucGlwZShSayhLWikpLHRoaXMuZm9jdXNlZEV4ZWN1dGlvbkluZGV4JD10aGlzLnN0b3JlLnBpcGUoUmsoUVopKSx0aGlzLmZvY3VzZWRFeGVjdXRpb25EaXNwbGF5SW5kZXgkPXRoaXMuc3RvcmUucGlwZShSaygkWikpLHRoaXMubnVtRXhlY3V0aW9ucyQ9dGhpcy5zdG9yZS5waXBlKFJrKEVaKSl9b25OYXZpZ2F0ZUxlZnQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKHpxKCkpfW9uTmF2aWdhdGVSaWdodCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goSHEoKSl9b25FeGVjdXRpb25EaWdlc3RDbGlja2VkKHQpe3RoaXMuc3RvcmUuZGlzcGF0Y2goTHEoe2Rpc3BsYXlJbmRleDp0fSkpfW9uU2xpZGVyQ2hhbmdlKHQpe3RoaXMuc3RvcmUuZGlzcGF0Y2goRnEoe2luZGV4OnR9KSl9fWZ1bmN0aW9uIHVLKHQsZSl7MSZ0JiYoT3UoMCwic3BhbiIpLE1mKDEsIiBPdXRwdXQgIiksUHUoKSl9ZnVuY3Rpb24gZksodCxlKXsxJnQmJihPdSgwLCJzcGFuIiksTWYoMSwiIElucHV0ICIpLFB1KCkpfWZ1bmN0aW9uIGdLKHQsZSl7aWYoMSZ0JiYoT3UoMCwiZGl2Iiw2KSxPdSgxLCJzcGFuIiw3KSxXbSgyLHVLLDIsMCwic3BhbiIsOCksV20oMyxmSywyLDAsInNwYW4iLDgpLFB1KCksTWYoNCksUHUoKSksMiZ0KXtjb25zdCB0PUx1KCk7SmMoMSksdnUoIm5nU3dpdGNoIix0LmtpbmQpLEpjKDEpLHZ1KCJuZ1N3aXRjaENhc2UiLCJpbnB1dCIpLEpjKDEpLHZ1KCJuZ1N3aXRjaENhc2UiLCJjb25zdW1lciIpLEpjKDEpLHhmKCIgc2xvdDogIix0LnNsb3QsIiAiKX19ZnVuY3Rpb24gaEsodCxlKXtpZigxJnQmJihPdSgwLCJkaXYiLDkpLE1mKDEpLFB1KCkpLDImdCl7Y29uc3QgdD1MdSgpO0pjKDEpLHhmKCIgIix0Lm9wRGF0YS5vcF90eXBlLCIgIil9fWZ1bmN0aW9uIGJLKHQsZSl7MSZ0JiYoT3UoMCwic3BhbiIsMTApLE1mKDEsIiAoT3AgaW5mbyB1bmF2YWlsYWJsZS4pICIpLFB1KCkpfW1LLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxtSykoTXUoRWspKX0sbUsuybVjbXA9VW8oe3R5cGU6bUssc2VsZWN0b3JzOltbInRmLWRlYnVnZ2VyLXYyLXRpbWVsaW5lIl1dLGRlY2xzOjEyLHZhcnM6MzMsY29uc3RzOltbMywiYWN0aXZlUnVuSWQiLCJsb2FkaW5nTnVtRXhlY3V0aW9ucyIsIm51bUV4ZWN1dGlvbnMiLCJzY3JvbGxCZWdpbkluZGV4Iiwic2Nyb2xsQmVnaW5JbmRleFVwcGVyTGltaXQiLCJwYWdlU2l6ZSIsImRpc3BsYXlDb3VudCIsImRpc3BsYXlFeGVjdXRpb25EaWdlc3RzIiwiZGlzcGxheUZvY3VzZWRBbGVydFR5cGVzIiwiZm9jdXNlZEV4ZWN1dGlvbkluZGV4IiwiZm9jdXNlZEV4ZWN1dGlvbkRpc3BsYXlJbmRleCIsIm9uTmF2aWdhdGVMZWZ0Iiwib25OYXZpZ2F0ZVJpZ2h0Iiwib25FeGVjdXRpb25EaWdlc3RDbGlja2VkIiwib25TbGlkZXJDaGFuZ2UiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKE91KDAsInRpbWVsaW5lLWNvbXBvbmVudCIsMCksTnUoIm9uTmF2aWdhdGVMZWZ0IiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uTmF2aWdhdGVMZWZ0KCl9KSkoIm9uTmF2aWdhdGVSaWdodCIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vbk5hdmlnYXRlUmlnaHQoKX0pKSgib25FeGVjdXRpb25EaWdlc3RDbGlja2VkIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vbkV4ZWN1dGlvbkRpZ2VzdENsaWNrZWQoZSl9KSkoIm9uU2xpZGVyQ2hhbmdlIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vblNsaWRlckNoYW5nZShlKX0pKSxPYigxLCJhc3luYyIpLE9iKDIsImFzeW5jIiksT2IoMywiYXN5bmMiKSxPYig0LCJhc3luYyIpLE9iKDUsImFzeW5jIiksT2IoNiwiYXN5bmMiKSxPYig3LCJhc3luYyIpLE9iKDgsImFzeW5jIiksT2IoOSwiYXN5bmMiKSxPYigxMCwiYXN5bmMiKSxPYigxMSwiYXN5bmMiKSxQdSgpKSwyJmUmJnZ1KCJhY3RpdmVSdW5JZCIsUGIoMSwxMSxuLmFjdGl2ZVJ1bklkJCkpKCJsb2FkaW5nTnVtRXhlY3V0aW9ucyIsUGIoMiwxMyxuLmxvYWRpbmdOdW1FeGVjdXRpb25zJCkpKCJudW1FeGVjdXRpb25zIixQYigzLDE1LG4ubnVtRXhlY3V0aW9ucyQpKSgic2Nyb2xsQmVnaW5JbmRleCIsUGIoNCwxNyxuLnNjcm9sbEJlZ2luSW5kZXgkKSkoInNjcm9sbEJlZ2luSW5kZXhVcHBlckxpbWl0IixQYig1LDE5LG4uc2Nyb2xsQmVnaW5JbmRleFVwcGVyTGltaXQkKSkoInBhZ2VTaXplIixQYig2LDIxLG4ucGFnZVNpemUkKSkoImRpc3BsYXlDb3VudCIsUGIoNywyMyxuLmRpc3BsYXlDb3VudCQpKSgiZGlzcGxheUV4ZWN1dGlvbkRpZ2VzdHMiLFBiKDgsMjUsbi5kaXNwbGF5RXhlY3V0aW9uRGlnZXN0cyQpKSgiZGlzcGxheUZvY3VzZWRBbGVydFR5cGVzIixQYig5LDI3LG4uZGlzcGxheUZvY3VzZWRBbGVydFR5cGVzJCkpKCJmb2N1c2VkRXhlY3V0aW9uSW5kZXgiLFBiKDEwLDI5LG4uZm9jdXNlZEV4ZWN1dGlvbkluZGV4JCkpKCJmb2N1c2VkRXhlY3V0aW9uRGlzcGxheUluZGV4IixQYigxMSwzMSxuLmZvY3VzZWRFeGVjdXRpb25EaXNwbGF5SW5kZXgkKSl9LGRpcmVjdGl2ZXM6W2RLXSxwaXBlczpbTXZdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIobUssW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoidGYtZGVidWdnZXItdjItdGltZWxpbmUiLHRlbXBsYXRlOidcbiAgICA8dGltZWxpbmUtY29tcG9uZW50XG4gICAgICBbYWN0aXZlUnVuSWRdPSJhY3RpdmVSdW5JZCQgfCBhc3luYyJcbiAgICAgIFtsb2FkaW5nTnVtRXhlY3V0aW9uc109ImxvYWRpbmdOdW1FeGVjdXRpb25zJCB8IGFzeW5jIlxuICAgICAgW251bUV4ZWN1dGlvbnNdPSJudW1FeGVjdXRpb25zJCB8IGFzeW5jIlxuICAgICAgW3Njcm9sbEJlZ2luSW5kZXhdPSJzY3JvbGxCZWdpbkluZGV4JCB8IGFzeW5jIlxuICAgICAgW3Njcm9sbEJlZ2luSW5kZXhVcHBlckxpbWl0XT0ic2Nyb2xsQmVnaW5JbmRleFVwcGVyTGltaXQkIHwgYXN5bmMiXG4gICAgICBbcGFnZVNpemVdPSJwYWdlU2l6ZSQgfCBhc3luYyJcbiAgICAgIFtkaXNwbGF5Q291bnRdPSJkaXNwbGF5Q291bnQkIHwgYXN5bmMiXG4gICAgICBbZGlzcGxheUV4ZWN1dGlvbkRpZ2VzdHNdPSJkaXNwbGF5RXhlY3V0aW9uRGlnZXN0cyQgfCBhc3luYyJcbiAgICAgIFtkaXNwbGF5Rm9jdXNlZEFsZXJ0VHlwZXNdPSJkaXNwbGF5Rm9jdXNlZEFsZXJ0VHlwZXMkIHwgYXN5bmMiXG4gICAgICBbZm9jdXNlZEV4ZWN1dGlvbkluZGV4XT0iZm9jdXNlZEV4ZWN1dGlvbkluZGV4JCB8IGFzeW5jIlxuICAgICAgW2ZvY3VzZWRFeGVjdXRpb25EaXNwbGF5SW5kZXhdPSJmb2N1c2VkRXhlY3V0aW9uRGlzcGxheUluZGV4JCB8IGFzeW5jIlxuICAgICAgKG9uTmF2aWdhdGVMZWZ0KT0ib25OYXZpZ2F0ZUxlZnQoKSJcbiAgICAgIChvbk5hdmlnYXRlUmlnaHQpPSJvbk5hdmlnYXRlUmlnaHQoKSJcbiAgICAgIChvbkV4ZWN1dGlvbkRpZ2VzdENsaWNrZWQpPSJvbkV4ZWN1dGlvbkRpZ2VzdENsaWNrZWQoJGV2ZW50KSJcbiAgICAgIChvblNsaWRlckNoYW5nZSk9Im9uU2xpZGVyQ2hhbmdlKCRldmVudCkiXG4gICAgPjwvdGltZWxpbmUtY29tcG9uZW50PlxuICAnLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2h9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpFa31dfSksbnVsbCk7Y29uc3QgeUs9ZnVuY3Rpb24odCl7cmV0dXJuW3RdfTtjbGFzcyBfS3tjb25zdHJ1Y3Rvcigpe3RoaXMub25PcE5hbWVDbGljaz1uZXcgQWJ9fWZ1bmN0aW9uIENLKHQsZSl7aWYoMSZ0KXtjb25zdCB0PUV1KCk7T3UoMCwiZGl2IiwxMyksT3UoMSwiZGl2IiwxNCksTWYoMiksUHUoKSxPdSgzLCJncmFwaC1vcCIsMTUpLE51KCJvbk9wTmFtZUNsaWNrIiwoZnVuY3Rpb24gZShuKXtyYSh0KTtjb25zdCBvPUx1KDMpO3JldHVybiBvLm9uR3JhcGhPcE5hdmlnYXRlLmVtaXQoe29wX25hbWU6bi5vcF9uYW1lLGdyYXBoX2lkOm8uZ3JhcGhJZH0pfSkpLFB1KCksUHUoKX1pZigyJnQpe2NvbnN0IHQ9ZS4kaW1wbGljaXQsbj1lLmluZGV4O0pjKDIpLHhmKCJJbnB1dCBzbG90ICIsbiwiOiIpLEpjKDEpLHZ1KCJraW5kIiwiaW5wdXQiKSgib3BOYW1lIix0Lm9wX25hbWUpKCJzbG90Iix0Lm91dHB1dF9zbG90KSgib3BEYXRhIix0LmRhdGEpfX1mdW5jdGlvbiBNSyh0LGUpe2lmKDEmdCYmKE91KDAsImRpdiIsMTEpLE91KDEsImRpdiIpLFdtKDIsQ0ssNCw1LCJkaXYiLDEyKSxQdSgpLFB1KCkpLDImdCl7Y29uc3QgdD1MdSgyKTtKYygyKSx2dSgibmdGb3JPZiIsdC5pbnB1dE9wcyl9fWZ1bmN0aW9uIHZLKHQsZSl7MSZ0JiYoT3UoMCwiZGl2IiwxNiksTWYoMSwiIChUaGlzIG9wIGhhcyBubyBpbnB1dCB0ZW5zb3IuKSAiKSxQdSgpKX1mdW5jdGlvbiB4Syh0LGUpe2lmKDEmdCl7Y29uc3QgdD1FdSgpO091KDAsImRpdiIsMjMpLE91KDEsImdyYXBoLW9wIiwxNSksTnUoIm9uT3BOYW1lQ2xpY2siLChmdW5jdGlvbiBlKG4pe3JhKHQpO2NvbnN0IG89THUoNCk7cmV0dXJuIG8ub25HcmFwaE9wTmF2aWdhdGUuZW1pdCh7b3BfbmFtZTpuLm9wX25hbWUsZ3JhcGhfaWQ6by5ncmFwaElkfSl9KSksUHUoKSxQdSgpfWlmKDImdCl7Y29uc3QgdD1lLiRpbXBsaWNpdDtKYygxKSx2dSgia2luZCIsImNvbnN1bWVyIikoIm9wTmFtZSIsdC5vcF9uYW1lKSgic2xvdCIsdC5pbnB1dF9zbG90KSgib3BEYXRhIix0LmRhdGEpfX1mdW5jdGlvbiBPSyh0LGUpe2lmKDEmdCYmKE91KDAsImRpdiIsMTkpLE91KDEsImRpdiIsMjApLE1mKDIpLE91KDMsInNwYW4iKSxxZyg0LDIxKSxQdSgpLE1mKDUsIikgIiksUHUoKSxXbSg2LHhLLDIsNCwiZGl2IiwyMiksUHUoKSksMiZ0KXtjb25zdCB0PWUuJGltcGxpY2l0LG49ZS5pbmRleDtKYygyKSxPZigiIE91dHB1dCBzbG90ICIsbiwiOiAoIix0Lmxlbmd0aCwiICIpLEpjKDIpLFpnKHQubGVuZ3RoKSxYZyg0KSxKYygyKSx2dSgibmdGb3JPZiIsdCl9fWZ1bmN0aW9uIFBLKHQsZSl7aWYoMSZ0JiYoT3UoMCwiZGl2IiwxNyksT3UoMSwiZGl2IiksV20oMixPSyw3LDQsImRpdiIsMTgpLFB1KCksUHUoKSksMiZ0KXtjb25zdCB0PUx1KDIpO0pjKDIpLHZ1KCJuZ0Zvck9mIix0LmNvbnN1bWVyT3BzKX19ZnVuY3Rpb24gd0sodCxlKXtpZigxJnQmJihPdSgwLCJkaXYiLDI0KSxNZigxKSxPdSgyLCJzcGFuIikscWcoMywyNSksUHUoKSxNZig0LCIgYW5kIG5vIGNvbnN1bWVyLikgIiksUHUoKSksMiZ0KXtjb25zdCB0PUx1KDIpO0pjKDEpLHhmKCIgKFRoaXMgb3AgaGFzICIsdC5vcEluZm8uY29uc3VtZXJzLmxlbmd0aCwiIG91dHB1dCAiKSxKYygyKSxaZyh0Lm9wSW5mby5jb25zdW1lcnMubGVuZ3RoKSxYZygzKX19ZnVuY3Rpb24ga0sodCxlKXtpZigxJnQpe2NvbnN0IHQ9RXUoKTtPdSgwLCJkaXYiKSxXbSgxLE1LLDMsMSwiZGl2Iiw0KSxXbSgyLHZLLDIsMCwibmctdGVtcGxhdGUiLG51bGwsNSxLYiksT3UoNCwiZGl2Iiw2KSxPdSg1LCJkaXYiLDcpLE1mKDYsIk9wOiIpLFB1KCksT3UoNywiZ3JhcGgtb3AiLDgpLE51KCJvbk9wTmFtZUNsaWNrIiwoZnVuY3Rpb24gZShuKXtyYSh0KTtjb25zdCBvPUx1KCk7cmV0dXJuIG8ub25HcmFwaE9wTmF2aWdhdGUuZW1pdCh7b3BfbmFtZTpuLm9wX25hbWUsZ3JhcGhfaWQ6by5ncmFwaElkfSl9KSksUHUoKSxQdSgpLFdtKDgsUEssMywxLCJkaXYiLDkpLFdtKDksd0ssNSwyLCJuZy10ZW1wbGF0ZSIsbnVsbCwxMCxLYiksUHUoKX1pZigyJnQpe2NvbnN0IHQ9R20oMyksZT1HbSgxMCksbj1MdSgpO0pjKDEpLHZ1KCJuZ0lmIixuLmlucHV0T3BzLmxlbmd0aD4wKSgibmdJZkVsc2UiLHQpLEpjKDYpLHZ1KCJraW5kIiwic2VsZiIpKCJvcE5hbWUiLG4ub3BJbmZvLm9wX25hbWUpKCJvcERhdGEiLG4ub3BJbmZvKSxKYygxKSx2dSgibmdJZiIsbi50b3RhbE51bUNvbnN1bWVycz4wKSgibmdJZkVsc2UiLGUpfX1mdW5jdGlvbiBTSyh0LGUpezEmdCYmKE91KDAsInNwYW4iLDI2KSxNZigxLCIgKE9wIGluZm8gdW5hdmFpbGFibGUuKSAiKSxQdSgpKX1mdW5jdGlvbiBESyh0LGUpezEmdCYmKE91KDAsImRpdiIsMjcpLE1mKDEsIiBObyBncmFwaCBvcCBzZWxlY3RlZC4gQ2xpY2sgYSB0ZW5zb3IgbmFtZSBpbiB0aGUgR3JhcGggRXhlY3V0aW9ucyB0YWJsZSB0byB2aWV3IHRoZSBuZWlnaGJvcmhvb2Qgb2YgdGhlIHRlbnNvcidzIG9wIGluIGl0cyBncmFwaC4gIiksUHUoKSl9X0suybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fF9LKX0sX0suybVjbXA9VW8oe3R5cGU6X0ssc2VsZWN0b3JzOltbImdyYXBoLW9wIl1dLGlucHV0czp7a2luZDoia2luZCIsb3BOYW1lOiJvcE5hbWUiLHNsb3Q6InNsb3QiLG9wRGF0YToib3BEYXRhIn0sb3V0cHV0czp7b25PcE5hbWVDbGljazoib25PcE5hbWVDbGljayJ9LGRlY2xzOjksdmFyczo3LGNvbnN0czpbWzEsIm9wLWNvbnRhaW5lciJdLFsxLCJpbnB1dC10ZW5zb3ItbmFtZSJdLFsxLCJvcC1uYW1lIiwzLCJuZ0NsYXNzIiwiY2xpY2siXSxbImNsYXNzIiwic2xvdCIsNCwibmdJZiJdLFsiY2xhc3MiLCJvcC10eXBlIiw0LCJuZ0lmIiwibmdJZkVsc2UiXSxbIm9wSW5mb01pc3NpbmciLCIiXSxbMSwic2xvdCJdLFszLCJuZ1N3aXRjaCJdLFs0LCJuZ1N3aXRjaENhc2UiXSxbMSwib3AtdHlwZSJdLFsxLCJvcC1pbmZvLW1pc3NpbmciXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pe2lmKDEmZSYmKE91KDAsImJ1dHRvbiIsMCksT3UoMSwiZGl2IiwxKSxPdSgyLCJidXR0b24iLDIpLE51KCJjbGljayIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vbk9wTmFtZUNsaWNrLmVtaXQoe29wX25hbWU6bi5vcE5hbWV9KX0pKSxPdSgzLCJzcGFuIiksTWYoNCksUHUoKSxQdSgpLFdtKDUsZ0ssNSw0LCJkaXYiLDMpLFB1KCksV20oNixoSywyLDEsImRpdiIsNCksV20oNyxiSywyLDAsIm5nLXRlbXBsYXRlIixudWxsLDUsS2IpLFB1KCkpLDImZSl7Y29uc3QgdD1HbSg4KTtKYygyKSx2dSgibmdDbGFzcyIsZ2IoNSx5Sywic2VsZiI9PT1uLmtpbmQ/InNlbGYtb3AtbmFtZSI6IiIpKSxKYygyKSx2ZihuLm9wTmFtZSksSmMoMSksdnUoIm5nSWYiLCJzZWxmIiE9PW4ua2luZCksSmMoMSksdnUoIm5nSWYiLHZvaWQgMCE9PW4ub3BEYXRhKSgibmdJZkVsc2UiLHQpfX0sZGlyZWN0aXZlczpbdHYsYXYsY3YsZHZdLHN0eWxlczpbJy5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHh9Lm1hdC1oMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaGVhZGxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTVweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZ1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjA1ZW07bWFyZ2luOjAgMCA1NnB4fS5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAwNWVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXJhaXNlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdHJva2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmxhdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZhYltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbWluaS1mYWJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4fS5tYXQtY2FyZC1zdWJ0aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGVja2JveC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvb3Rlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgdHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIzZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LjU0MTY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2NjY2NjY3ZW0pfUBtZWRpYSBwcmludHsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjJlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouMjVlbSAwIC43NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxZW0gMCAxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMiksIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi0wLjA2MjVlbX0ubWF0LW1lbnUtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci12ZXJ0aWNhbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGFiLWxpbmtbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MH0ubWF0LXRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5Om5vbmV9LmNkay12aXN1YWxseS1oaWRkZW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjZ9LmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV0sIC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3hbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2tbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHt9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7fS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOi13ZWJraXQtYXV0b2ZpbGwpe2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZVtfbmdjb250ZW50LSVDT01QJV17cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fS5tYXQtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfS5vcC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCAub3AtbmFtZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6aW5oZXJpdDtiYWNrZ3JvdW5kLWNvbG9yOmluaGVyaXR9Lm9wLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjJweCBzb2xpZCAjZWJlYmViO2JvcmRlci1yYWRpdXM6NHB4O2JveC1zaGFkb3c6MXB4IDNweCAjZWVlO2N1cnNvcjpwb2ludGVyO21hcmdpbjowIDVweCAwIDA7cGFkZGluZzoycHggNnB4O3RleHQtYWxpZ246cmlnaHQ7d2lkdGg6MjAwcHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm9wLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5vcC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjoycHggc29saWQgIzU1NX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAub3AtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm9wLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym94LXNoYWRvdzoxcHggM3B4ICM3NTc1NzV9Lm9wLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXN7b3V0bGluZTowfS5vcC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmhvdmVye2JvcmRlcjoycHggc29saWQgI2ZmZDNiMn0ub3AtaW5mby1taXNzaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpncmF5fS5vcC1uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6bm9uZTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmlubGluZS1ibG9jaztvdmVyZmxvdy13cmFwOmFueXdoZXJlO3BhZGRpbmc6MDt0ZXh0LWFsaWduOnJpZ2h0O3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7d2hpdGUtc3BhY2U6cHJlLXdyYXB9Lm9wLW5hbWVbX25nY29udGVudC0lQ09NUCVdOmZvY3Vze291dGxpbmU6MH0ub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZWNlZmYxO2JvcmRlcjoxcHggc29saWQgI2ViZWJlYjtib3JkZXItcmFkaXVzOjRweDtmb250LWZhbWlseToiUm9ib3RvIE1vbm8iLG1vbm9zcGFjZTtmb250LXNpemU6MTBweDtoZWlnaHQ6MTRweDtsaW5lLWhlaWdodDoxNHB4O3BhZGRpbmc6MXB4IDNweDt3aWR0aDptYXgtY29udGVudDtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tdG9wOjNweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5vcC10eXBlW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MXB4IHNvbGlkICM1NTV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojNDU1YTY0fS5zZWxmLW9wLW5hbWVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OmJvbGQ7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LnNsb3RbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnNsb3RbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuc2xvdFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9J119KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKF9LLFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6ImdyYXBoLW9wIix0ZW1wbGF0ZVVybDoiZ3JhcGhfb3BfY29tcG9uZW50Lm5nLmh0bWwiLHN0eWxlVXJsczpbIi4vZ3JhcGhfb3BfY29tcG9uZW50LmNzcyJdfV19XSxudWxsLHtraW5kOlt7dHlwZTp5X31dLG9wTmFtZTpbe3R5cGU6eV99XSxzbG90Olt7dHlwZTp5X31dLG9wRGF0YTpbe3R5cGU6eV99XSxvbk9wTmFtZUNsaWNrOlt7dHlwZTpfX31dfSk7Y2xhc3MgRUt7Y29uc3RydWN0b3IoKXt0aGlzLm9uR3JhcGhPcE5hdmlnYXRlPW5ldyBBYn1nZXQgZ3JhcGhJZCgpe3JldHVybiB0aGlzLm9wSW5mby5ncmFwaF9pZHNbdGhpcy5vcEluZm8uZ3JhcGhfaWRzLmxlbmd0aC0xXX1nZXQgdG90YWxOdW1Db25zdW1lcnMoKXtyZXR1cm4gdGhpcy5jb25zdW1lck9wcy5yZWR1Y2UoKCh0LGUpPT50K2UubGVuZ3RoKSwwKX19RUsuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEVLKX0sRUsuybVjbXA9VW8oe3R5cGU6RUssc2VsZWN0b3JzOltbImdyYXBoLWNvbXBvbmVudCJdXSxpbnB1dHM6e29wSW5mbzoib3BJbmZvIixpbnB1dE9wczoiaW5wdXRPcHMiLGNvbnN1bWVyT3BzOiJjb25zdW1lck9wcyJ9LG91dHB1dHM6e29uR3JhcGhPcE5hdmlnYXRlOiJvbkdyYXBoT3BOYXZpZ2F0ZSJ9LGRlY2xzOjksdmFyczoyLGNvbnN0czpmdW5jdGlvbigpe2xldCB0LGUsbixvO3JldHVybiB0PSJ1bmRlZmluZWQiIT10eXBlb2YgbmdJMThuQ2xvc3VyZU1vZGUmJm5nSTE4bkNsb3N1cmVNb2RlP2dvb2cuZ2V0TXNnKCJ7VkFSX1BMVVJBTCwgcGx1cmFsLCA9MCB7Y29uc3VtZXJ9ID0xIHtjb25zdW1lcn0gb3RoZXIge2NvbnN1bWVyc319Iik6JGxvY2FsaXplYDrikJ9mZTU1ZjliMTkzZWEyMGFhZTViNTYzNWU2OGQ5Mzg2NTAzODQ3NzQ24pCfNDk1NTEzMzc0MDg0MTI5OTg1MTp7VkFSX1BMVVJBTCwgcGx1cmFsLCA9MCB7Y29uc3VtZXJ9ID0xIHtjb25zdW1lcn0gb3RoZXIge2NvbnN1bWVyc319YCx0PUtnKHQse1ZBUl9QTFVSQUw6Iu+/vTDvv70ifSksZT0idW5kZWZpbmVkIiE9dHlwZW9mIG5nSTE4bkNsb3N1cmVNb2RlJiZuZ0kxOG5DbG9zdXJlTW9kZT9nb29nLmdldE1zZygiIHskaWN1fSIse2ljdTp0fSk6JGxvY2FsaXplYDrikJ9iYWE0NjBlMmYyYjg1N2UyNjI5MmIyNDZmYzE4YWUwZWE5YjVlNTM34pCfNTU1NjM0MDM0Mzg1MDE2NTUxNjogJHt0fTpJQ1U6YCxuPSJ1bmRlZmluZWQiIT10eXBlb2YgbmdJMThuQ2xvc3VyZU1vZGUmJm5nSTE4bkNsb3N1cmVNb2RlP2dvb2cuZ2V0TXNnKCJ7VkFSX1BMVVJBTCwgcGx1cmFsLCA9MCB7dGVuc29yfSA9MSB7dGVuc29yfSBvdGhlciB7dGVuc29yc319Iik6JGxvY2FsaXplYDrikJ82YWE3NWY2MjdlMGRjMTYxNTBlZjQ0ODQ2NGUwYzg1N2FhYTBkYzE44pCfNTE1NjcxMjkzNTE1MDU4Njg3ODp7VkFSX1BMVVJBTCwgcGx1cmFsLCA9MCB7dGVuc29yfSA9MSB7dGVuc29yfSBvdGhlciB7dGVuc29yc319YCxuPUtnKG4se1ZBUl9QTFVSQUw6Iu+/vTDvv70ifSksbz0idW5kZWZpbmVkIiE9dHlwZW9mIG5nSTE4bkNsb3N1cmVNb2RlJiZuZ0kxOG5DbG9zdXJlTW9kZT9nb29nLmdldE1zZygiIHskaWN1fSIse2ljdTpufSk6JGxvY2FsaXplYDrikJ84OTM0NzZjMmM0MjFjZWU0NzY2M2M5NzMyZmE0MWE3NTBkM2E3M2Rm4pCfMjQ2MDY3MDUzNzM1MTYyNjM0OiAke259OklDVTpgLFtbMSwiZ3JhcGgtc3RydWN0dXJlLWNvbnRhaW5lciJdLFs0LCJuZ0lmIiwibmdJZkVsc2UiXSxbIm9wSW5mb01pc3NpbmciLCIiXSxbIm5vT3BGb2N1c2VkIiwiIl0sWyJjbGFzcyIsImlucHV0cy1jb250YWluZXIiLDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsibm9JbnB1dHMiLCIiXSxbMSwic2VsZi1vcC1jb250YWluZXIiXSxbMSwic2VsZi1vcC1oZWFkZXIiXSxbMywia2luZCIsIm9wTmFtZSIsIm9wRGF0YSIsIm9uT3BOYW1lQ2xpY2siXSxbImNsYXNzIiwiY29uc3VtZXJzLWNvbnRhaW5lciIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJub0NvbnN1bWVycyIsIiJdLFsxLCJpbnB1dHMtY29udGFpbmVyIl0sWyJjbGFzcyIsImlucHV0LW9wLXNlY3Rpb24iLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJpbnB1dC1vcC1zZWN0aW9uIl0sWzEsImlucHV0LXNsb3QtaGVhZGVyIl0sWzMsImtpbmQiLCJvcE5hbWUiLCJzbG90Iiwib3BEYXRhIiwib25PcE5hbWVDbGljayJdLFsxLCJpbnB1dHMtY29udGFpbmVyIiwibm8taW5wdXRzLWluZGljYXRvciJdLFsxLCJjb25zdW1lcnMtY29udGFpbmVyIl0sWyJjbGFzcyIsInNsb3QtY29uc3VtZXJzLWNvbnRhaW5lciIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsInNsb3QtY29uc3VtZXJzLWNvbnRhaW5lciJdLFsxLCJzbG90LWNvbnN1bWVycy1oZWFkZXIiXSxlLFsiY2xhc3MiLCJjb25zdW1lci1zZWN0aW9uIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY29uc3VtZXItc2VjdGlvbiJdLFsxLCJvcC1jb25zdW1lcnMtY29udGFpbmVyIl0sbyxbMSwib3AtaW5mby1taXNzaW5nIl0sWzEsIm5vLW9wLWZvY3VzZWQiXV19LHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJihPdSgwLCJkaXYiKSxPdSgxLCJkaXYiKSxNZigyLCJHcmFwaCBTdHJ1Y3R1cmUiKSxQdSgpLE91KDMsImRpdiIsMCksV20oNCxrSywxMSw3LCJkaXYiLDEpLFB1KCksV20oNSxTSywyLDAsIm5nLXRlbXBsYXRlIixudWxsLDIsS2IpLFdtKDcsREssMiwwLCJuZy10ZW1wbGF0ZSIsbnVsbCwzLEtiKSxQdSgpKSwyJmUpe2NvbnN0IHQ9R20oOCk7SmMoNCksdnUoIm5nSWYiLG51bGwhPW4ub3BJbmZvKSgibmdJZkVsc2UiLHQpfX0sZGlyZWN0aXZlczpbYXYsX0ssb3ZdLHN0eWxlczpbJy5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHh9Lm1hdC1oMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaGVhZGxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTVweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZ1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjA1ZW07bWFyZ2luOjAgMCA1NnB4fS5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAwNWVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXJhaXNlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdHJva2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmxhdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZhYltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbWluaS1mYWJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4fS5tYXQtY2FyZC1zdWJ0aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGVja2JveC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvb3Rlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgdHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIzZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LjU0MTY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2NjY2NjY3ZW0pfUBtZWRpYSBwcmludHsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjJlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouMjVlbSAwIC43NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxZW0gMCAxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMiksIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi0wLjA2MjVlbX0ubWF0LW1lbnUtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci12ZXJ0aWNhbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGFiLWxpbmtbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MH0ubWF0LXRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5Om5vbmV9LmNkay12aXN1YWxseS1oaWRkZW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjZ9LmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV0sIC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3hbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2tbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHt9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7fS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOi13ZWJraXQtYXV0b2ZpbGwpe2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZVtfbmdjb250ZW50LSVDT01QJV17cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fS5tYXQtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfVtfbmdob3N0LSVDT01QJV17b3ZlcmZsb3cteTphdXRvfS5jb25zdW1lcnMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbTo1cHg7b3ZlcmZsb3cteDphdXRvO3doaXRlLXNwYWNlOm5vd3JhcH0uY29uc3VtZXItc2VjdGlvbltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpibG9jazttYXJnaW46NXB4IDB9LmdyYXBoLXN0cnVjdHVyZS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O292ZXJmbG93LXk6YXV0bzt3aGl0ZS1zcGFjZTpub3dyYXB9LmlucHV0cy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjEyKTttYXJnaW4tdG9wOjVweDtvdmVyZmxvdy14OmF1dG87cGFkZGluZy1ib3R0b206MDt3aGl0ZS1zcGFjZTpub3dyYXB9LmlucHV0LW9wLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yaWdodDoxcHggc29saWQgcmdiYSgwLDAsMCwuMTIpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1yaWdodDo1cHg7cGFkZGluZy1ib3R0b206NXB4fS5pbnB1dC1zbG90LWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZmZmMDk5O21hcmdpbi1ib3R0b206NXB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5pbnB1dC1zbG90LWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5pbnB1dC1zbG90LWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZTY1MTAwfS5pbnB1dC10ZW5zb3ItbmFtZVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpibG9jazt3aGl0ZS1zcGFjZTpub3dyYXB9Lm5vLW9wLWZvY3VzZWRbX25nY29udGVudC0lQ09NUCVde2NvbG9yOmdyYXk7Zm9udC1mYW1pbHk6IlJvYm90byIsQXJpYWwsSGVsdmV0aWNhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEzcHg7d2hpdGUtc3BhY2U6bm9ybWFsfS5zZWxmLW9wLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6Ym9sZDttYXJnaW4tYm90dG9tOjVweH0uc2VsZi1vcC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjEyKTtwYWRkaW5nLWJvdHRvbTo1cHh9LnNsb3QtY29uc3VtZXJzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCByZ2JhKDAsMCwwLC4xMik7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXJpZ2h0OjVweDtwYWRkaW5nLXRvcDo1cHg7dmVydGljYWwtYWxpZ246dG9wfS5zbG90LWNvbnN1bWVycy1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcH0nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoRUssW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoiZ3JhcGgtY29tcG9uZW50Iix0ZW1wbGF0ZVVybDoiLi9ncmFwaF9jb21wb25lbnQubmcuaHRtbCIsc3R5bGVVcmxzOlsiLi9ncmFwaF9jb21wb25lbnQuY3NzIl0sY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sbnVsbCx7b3BJbmZvOlt7dHlwZTp5X31dLGlucHV0T3BzOlt7dHlwZTp5X31dLGNvbnN1bWVyT3BzOlt7dHlwZTp5X31dLG9uR3JhcGhPcE5hdmlnYXRlOlt7dHlwZTpfX31dfSk7Y2xhc3MgQUt7Y29uc3RydWN0b3IodCl7dGhpcy5zdG9yZT10LHRoaXMub3BJbmZvJD10aGlzLnN0b3JlLnBpcGUoUmsoWVopKSx0aGlzLmlucHV0T3BzJD10aGlzLnN0b3JlLnBpcGUoUmsocVopKSx0aGlzLmNvbnN1bWVyT3BzJD10aGlzLnN0b3JlLnBpcGUoUmsoWFopKX1vbkdyYXBoT3BOYXZpZ2F0ZSh0KXt0aGlzLnN0b3JlLmRpc3BhdGNoKHFxKHQpKX19ZnVuY3Rpb24gUksodCxlKXsxJnQmJihPdSgwLCJkaXYiLDEyKSxNZigxLCLilrYiKSxQdSgpKX1BSy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8QUspKE11KEVrKSl9LEFLLsm1Y21wPVVvKHt0eXBlOkFLLHNlbGVjdG9yczpbWyJ0Zi1kZWJ1Z2dlci12Mi1ncmFwaCJdXSxkZWNsczo0LHZhcnM6OSxjb25zdHM6W1szLCJvcEluZm8iLCJpbnB1dE9wcyIsImNvbnN1bWVyT3BzIiwib25HcmFwaE9wTmF2aWdhdGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKE91KDAsImdyYXBoLWNvbXBvbmVudCIsMCksTnUoIm9uR3JhcGhPcE5hdmlnYXRlIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vbkdyYXBoT3BOYXZpZ2F0ZShlKX0pKSxPYigxLCJhc3luYyIpLE9iKDIsImFzeW5jIiksT2IoMywiYXN5bmMiKSxQdSgpKSwyJmUmJnZ1KCJvcEluZm8iLFBiKDEsMyxuLm9wSW5mbyQpKSgiaW5wdXRPcHMiLFBiKDIsNSxuLmlucHV0T3BzJCkpKCJjb25zdW1lck9wcyIsUGIoMyw3LG4uY29uc3VtZXJPcHMkKSl9LGRpcmVjdGl2ZXM6W0VLXSxwaXBlczpbTXZdLGVuY2Fwc3VsYXRpb246Mn0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoQUssW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoidGYtZGVidWdnZXItdjItZ3JhcGgiLHRlbXBsYXRlOidcbiAgICA8Z3JhcGgtY29tcG9uZW50XG4gICAgICBbb3BJbmZvXT0ib3BJbmZvJCB8IGFzeW5jIlxuICAgICAgW2lucHV0T3BzXT0iaW5wdXRPcHMkIHwgYXN5bmMiXG4gICAgICBbY29uc3VtZXJPcHNdPSJjb25zdW1lck9wcyQgfCBhc3luYyJcbiAgICAgIChvbkdyYXBoT3BOYXZpZ2F0ZSk9Im9uR3JhcGhPcE5hdmlnYXRlKCRldmVudCkiXG4gICAgPjwvZ3JhcGgtY29tcG9uZW50PlxuICAnfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6RWt9XX0pLG51bGwpO2NvbnN0IFRLPWZ1bmN0aW9uKHQsZSl7cmV0dXJue3RlbnNvckRlYnVnTW9kZTp0LGFycmF5OmV9fTtmdW5jdGlvbiBOSyh0LGUpe2lmKDEmdCYmd3UoMCwiZGVidWctdGVuc29yLXZhbHVlIiwxNyksMiZ0KXtjb25zdCB0PUx1KDIpLiRpbXBsaWNpdCxlPUx1KDIpO3Z1KCJkZWJ1Z1RlbnNvclZhbHVlIixlLnBhcnNlRGVidWdUZW5zb3JWYWx1ZShoYigxLFRLLGUuZ3JhcGhFeGVjdXRpb25EYXRhW3RdLnRlbnNvcl9kZWJ1Z19tb2RlLGUuZ3JhcGhFeGVjdXRpb25EYXRhW3RdLmRlYnVnX3RlbnNvcl92YWx1ZSkpKX19ZnVuY3Rpb24gSUsodCxlKXtpZigxJnQpe2NvbnN0IHQ9RXUoKTtPdSgwLCJkaXYiKSxPdSgxLCJkaXYiLDEzKSxPdSgyLCJidXR0b24iLDE0KSxOdSgiY2xpY2siLChmdW5jdGlvbiBlKCl7cmEodCk7Y29uc3Qgbj1MdSgpLiRpbXBsaWNpdCxvPUx1KDIpO3JldHVybiBvLm9uVGVuc29yTmFtZUNsaWNrLmVtaXQoe2luZGV4Om4sZ3JhcGhfaWQ6by5ncmFwaEV4ZWN1dGlvbkRhdGFbbl0uZ3JhcGhfaWQsb3BfbmFtZTpvLmdyYXBoRXhlY3V0aW9uRGF0YVtuXS5vcF9uYW1lfSl9KSksTWYoMyksUHUoKSxPdSg0LCJkaXYiLDE1KSxNZig1KSxQdSgpLFB1KCksV20oNixOSywxLDQsImRlYnVnLXRlbnNvci12YWx1ZSIsMTYpLFB1KCl9aWYoMiZ0KXtjb25zdCB0PUx1KCkuJGltcGxpY2l0LGU9THUoMik7SmMoMiksVXUoInRpdGxlIixlLmdldFRlbnNvck5hbWUodCkpLEpjKDEpLHhmKCIgIixlLmdldFRlbnNvck5hbWUodCksIiAiKSxKYygyKSx2ZihlLmdyYXBoRXhlY3V0aW9uRGF0YVt0XS5vcF90eXBlKSxKYygxKSx2dSgibmdJZiIsbnVsbCE9PWUuZ3JhcGhFeGVjdXRpb25EYXRhW3RdLmRlYnVnX3RlbnNvcl92YWx1ZSl9fWZ1bmN0aW9uIHpLKHQsZSl7MSZ0JiYoT3UoMCwiZGl2IiwxOCksTWYoMSwiIExvYWRpbmcuLi4gIiksUHUoKSl9Y29uc3QgSEs9ZnVuY3Rpb24odCl7cmV0dXJueyJpbnB1dC1vZi1mb2N1cyI6dH19O2Z1bmN0aW9uIEZLKHQsZSl7aWYoMSZ0JiYoT3UoMCwiZGl2Iiw1KSxPdSgxLCJkaXYiLDYpLE91KDIsImRpdiIsNyksV20oMyxSSywyLDAsImRpdiIsOCksTWYoNCksUHUoKSxXbSg1LElLLDcsNCwiZGl2Iiw5KSxXbSg2LHpLLDIsMCwibmctdGVtcGxhdGUiLDEwLDExLEtiKSxQdSgpLFB1KCkpLDImdCl7Y29uc3QgdD1lLiRpbXBsaWNpdCxuPUdtKDcpLG89THUoMik7SmMoMSksdnUoIm5nQ2xhc3MiLGdiKDUsSEssby5pc0lucHV0T2ZGb2N1cyh0KSkpLEpjKDIpLHZ1KCJuZ0lmIix0PT09by5mb2N1c0luZGV4KSxKYygxKSx4ZigiICIsdCwiICIpLEpjKDEpLHZ1KCJuZ0lmIixvLmdyYXBoRXhlY3V0aW9uRGF0YVt0XSkoIm5nSWZFbHNlIixuKX19ZnVuY3Rpb24gTEsodCxlKXtpZigxJnQpe2NvbnN0IHQ9RXUoKTtPdSgwLCJjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQiLDMpLE51KCJzY3JvbGxlZEluZGV4Q2hhbmdlIiwoZnVuY3Rpb24gZShuKXtyZXR1cm4gcmEodCksTHUoKS5vblNjcm9sbGVkSW5kZXhDaGFuZ2UuZW1pdChuKX0pKSxXbSgxLEZLLDgsNywiZGl2Iiw0KSxQdSgpfWlmKDImdCl7Y29uc3QgdD1MdSgpO0pjKDEpLHZ1KCJjZGtWaXJ0dWFsRm9yT2YiLHQuZ3JhcGhFeGVjdXRpb25JbmRpY2VzKX19Y2xhc3MgQkt7Y29uc3RydWN0b3IoKXt0aGlzLm9uU2Nyb2xsZWRJbmRleENoYW5nZT1uZXcgQWIsdGhpcy5vblRlbnNvck5hbWVDbGljaz1uZXcgQWIsdGhpcy5wYXJzZURlYnVnVGVuc29yVmFsdWU9a1gsdGhpcy5URVNUX09OTFk9e2dldFZpZXdQb3J0OigpPT50aGlzLnZpZXdQb3J0fX1uZ09uQ2hhbmdlcyh0KXtpZih0aGlzLnZpZXdQb3J0JiZ0LmZvY3VzSW5kZXgmJm51bGwhPT10LmZvY3VzSW5kZXguY3VycmVudFZhbHVlKXtjb25zdCBlPXRoaXMudmlld1BvcnQuZ2V0UmVuZGVyZWRSYW5nZSgpLG49dC5mb2N1c0luZGV4LmN1cnJlbnRWYWx1ZSxvPU1hdGgucm91bmQoKGUuZW5kLWUuc3RhcnQpLzMpLGk9TWF0aC5tYXgobi1vLDApO3RoaXMudmlld1BvcnQuc2Nyb2xsVG9JbmRleChpLG4+PWUuc3RhcnQmJm48ZS5lbmQ/InNtb290aCI6dm9pZCAwKX19Z2V0VGVuc29yTmFtZSh0KXtyZXR1cm5gJHt0aGlzLmdyYXBoRXhlY3V0aW9uRGF0YVt0XS5vcF9uYW1lfToke3RoaXMuZ3JhcGhFeGVjdXRpb25EYXRhW3RdLm91dHB1dF9zbG90fWB9aXNJbnB1dE9mRm9jdXModCl7cmV0dXJuIG51bGwhPT10aGlzLmZvY3VzSW5wdXRJbmRpY2VzJiZ0aGlzLmZvY3VzSW5wdXRJbmRpY2VzLmluY2x1ZGVzKHQpfX1CSy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8QkspfSxCSy7JtWNtcD1Vbyh7dHlwZTpCSyxzZWxlY3RvcnM6W1siZ3JhcGgtZXhlY3V0aW9ucy1jb21wb25lbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJldiKHRGLDEpLDImZSl7bGV0IHQ7VWIodD1ZYigpKSYmKG4udmlld1BvcnQ9dC5maXJzdCl9fSxpbnB1dHM6e251bUdyYXBoRXhlY3V0aW9uczoibnVtR3JhcGhFeGVjdXRpb25zIixncmFwaEV4ZWN1dGlvbkRhdGE6ImdyYXBoRXhlY3V0aW9uRGF0YSIsZ3JhcGhFeGVjdXRpb25JbmRpY2VzOiJncmFwaEV4ZWN1dGlvbkluZGljZXMiLGZvY3VzSW5kZXg6ImZvY3VzSW5kZXgiLGZvY3VzSW5wdXRJbmRpY2VzOiJmb2N1c0lucHV0SW5kaWNlcyJ9LG91dHB1dHM6e29uU2Nyb2xsZWRJbmRleENoYW5nZToib25TY3JvbGxlZEluZGV4Q2hhbmdlIixvblRlbnNvck5hbWVDbGljazoib25UZW5zb3JOYW1lQ2xpY2sifSxmZWF0dXJlczpbU2ldLGRlY2xzOjQsdmFyczoyLGNvbnN0czpbWzEsImdyYXBoLWV4ZWN1dGlvbnMtY29udGFpbmVyIl0sWzEsImdyYXBoLWV4ZWN1dGlvbnMtdGl0bGUiXSxbIml0ZW1TaXplIiwiMzgiLCJjbGFzcyIsImdyYXBoLWV4ZWN1dGlvbnMtdmlld3BvcnQiLDMsInNjcm9sbGVkSW5kZXhDaGFuZ2UiLDQsIm5nSWYiXSxbIml0ZW1TaXplIiwiMzgiLDEsImdyYXBoLWV4ZWN1dGlvbnMtdmlld3BvcnQiLDMsInNjcm9sbGVkSW5kZXhDaGFuZ2UiXSxbImNsYXNzIiwidGVuc29yLWNvbnRhaW5lciIsNCwiY2RrVmlydHVhbEZvciIsImNka1ZpcnR1YWxGb3JPZiJdLFsxLCJ0ZW5zb3ItY29udGFpbmVyIl0sWzEsInRlbnNvci1pdGVtIiwzLCJuZ0NsYXNzIl0sWzEsImdyYXBoLWV4ZWN1dGlvbi1pbmRleCJdLFsiY2xhc3MiLCJncmFwaC1leGVjdXRpb24tZm9jdXMiLDQsIm5nSWYiXSxbNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJjbGFzcyIsInRlbnNvci1pdGVtIl0sWyJkYXRhTG9hZGluZyIsIiJdLFsxLCJncmFwaC1leGVjdXRpb24tZm9jdXMiXSxbMSwidGVuc29yLW5hbWUtYW5kLW9wLXR5cGUiXSxbMSwidGVuc29yLW5hbWUiLDMsInRpdGxlIiwiY2xpY2siXSxbMSwib3AtdHlwZSJdLFszLCJkZWJ1Z1RlbnNvclZhbHVlIiw0LCJuZ0lmIl0sWzMsImRlYnVnVGVuc29yVmFsdWUiXSxbMSwibG9hZGluZy1zcGlubmVyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihPdSgwLCJkaXYiLDApLE91KDEsImRpdiIsMSksTWYoMiksUHUoKSxXbSgzLExLLDIsMSwiY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0IiwyKSxQdSgpKSwyJmUmJihKYygyKSx4ZigiIEdyYXBoIEV4ZWN1dGlvbnMgKCIsbi5udW1HcmFwaEV4ZWN1dGlvbnMsIikgIiksSmMoMSksdnUoIm5nSWYiLG51bGwhPT1uLm51bUdyYXBoRXhlY3V0aW9ucyYmbi5udW1HcmFwaEV4ZWN1dGlvbnM+MCkpfSxkaXJlY3RpdmVzOlthdix0RixYSCxuRix0dixYWF0sc3R5bGVzOlsnLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEycHg7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtYmFkZ2Utc21hbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6OXB4fS5tYXQtYmFkZ2UtbGFyZ2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweH0ubWF0LWgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1oZWFkbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMjRweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNnB4LzI4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNXB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC44MykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtaDZbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuNjcpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWJvZHktc3Ryb25nW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjAgMCAxMnB4fS5tYXQtc21hbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDEycHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjMwMCAxMTJweC8xMTJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDVlbTttYXJnaW46MCAwIDU2cHh9Lm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDU2cHgvNTZweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDJlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDQ1cHgvNDhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDA1ZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAzNHB4LzQwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDY0cHh9Lm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcmFpc2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0cm9rZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mbGF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmFiW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1taW5pLWZhYltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWJ1dHRvbi10b2dnbGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhcmQtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjIwcHh9Lm1hdC1jYXJkLXN1YnRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2hlY2tib3hbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNoZWNrYm94LWxheW91dFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoZWNrYm94LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoyNHB4fS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtdHJhaWxpbmctaWNvbi5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtcmVtb3ZlLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MThweH0ubWF0LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1oZWFkZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2VsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9vdGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2FsZW5kYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhbGVuZGFyLWJvZHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxM3B4fS5tYXQtY2FsZW5kYXItYm9keS1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FsZW5kYXItcGVyaW9kLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo0MDB9Lm1hdC1kaWFsb2ctdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjEyNTtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE1MCU7bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS41ZW07d2lkdGg6MS41ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNWVtIDA7Ym9yZGVyLXRvcDouODQzNzVlbSBzb2xpZCB0cmFuc3BhcmVudH0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6LTAuODQzNzVlbTtwYWRkaW5nLXRvcDouODQzNzVlbX0ubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo3NSU7bWFyZ2luLXRvcDouNjY2NjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjc5MTY2NjY2NjdlbSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNDM3NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMnB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjNlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM1MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjI4MTI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDouNTQxNjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjY2NjY2NjY2NjdlbSl9QG1lZGlhIHByaW50ey5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMmVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMWVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTJlbSkgc2NhbGUoMC43NSl9fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi4yNWVtIDAgLjc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMDkzNzVlbTttYXJnaW4tdG9wOi0wLjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjFlbSAwIDFlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS44NDM3NWVtO21hcmdpbi10b3A6LTAuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9aW5wdXQubWF0LWlucHV0LWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LTAuMDYyNWVtfS5tYXQtbWVudS1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtcGFnaW5hdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweH0ubWF0LXJhZGlvLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW19Lm1hdC1zbGlkZS10b2dnbGUtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdGVwcGVyLWhvcml6b250YWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXN0ZXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXN0ZXAtc3ViLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDpub3JtYWx9Lm1hdC1zdGVwLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LXN0ZXAtbGFiZWwtc2VsZWN0ZWRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRhYi1ncm91cFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdGFiLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10YWItbGlua1tfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowfS5tYXQtdG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB4O3BhZGRpbmctdG9wOjZweDtwYWRkaW5nLWJvdHRvbTo2cHh9Lm1hdC10b29sdGlwLWhhbmRzZXRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9Lm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE2cHh9Lm1hdC1vcHRncm91cC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1zaW1wbGUtc25hY2tiYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweH0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb25bX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjE7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo1MDB9Lm1hdC10cmVlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW5lc3RlZC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjQwMDtmb250LXNpemU6MTRweH0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmVtcHR5KXt0cmFuc2Zvcm06dHJhbnNsYXRlWigwKX0ubWF0LXJpcHBsZS5tYXQtcmlwcGxlLXVuYm91bmRlZFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItcmFkaXVzOjUwJTtwb2ludGVyLWV2ZW50czpub25lO3RyYW5zaXRpb246b3BhY2l0eSx0cmFuc2Zvcm0gMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpO3RyYW5zZm9ybTpzY2FsZSgwKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6bm9uZX0uY2RrLXZpc3VhbGx5LWhpZGRlbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjA7Y2xpcDpyZWN0KDAgMCAwIDApO2hlaWdodDoxcHg7bWFyZ2luOi0xcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwO291dGxpbmU6MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb2ludGVyLWV2ZW50czpub25lO3RvcDowO2xlZnQ6MDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTplbXB0eXtkaXNwbGF5Om5vbmV9LmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1wYW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czphdXRvO2JveC1zaXppbmc6Ym9yZGVyLWJveDt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O21heC13aWR0aDoxMDAlO21heC1oZWlnaHQ6MTAwJX0uY2RrLW92ZXJsYXktYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO3otaW5kZXg6MTAwMDtwb2ludGVyLWV2ZW50czphdXRvOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDt0cmFuc2l0aW9uOm9wYWNpdHkgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSk7b3BhY2l0eTowfS5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjF9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAuY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTouNn0uY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4zMil9LmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MH0uY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWluLXdpZHRoOjFweDttaW4taGVpZ2h0OjFweH0uY2RrLWdsb2JhbC1zY3JvbGxibG9ja1tfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7d2lkdGg6MTAwJTtvdmVyZmxvdy15OnNjcm9sbH1Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0e31Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZHt9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbHthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQgMHMgMW1zfS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOm5vdCg6LXdlYmtpdC1hdXRvZmlsbCl7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCAwcyAxbXN9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplW19uZ2NvbnRlbnQtJUNPTVAlXXtyZXNpemU6bm9uZX10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDphdXRvICFpbXBvcnRhbnQ7b3ZlcmZsb3c6aGlkZGVuICFpbXBvcnRhbnR9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZy1maXJlZm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDowICFpbXBvcnRhbnR9Lm1hdC1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtbWRjLWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9LmdyYXBoLWV4ZWN1dGlvbnMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItbGVmdDoxcHggc29saWQgI2ViZWJlYjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2hlaWdodDoxMDAlO21hcmdpbi1sZWZ0OjhweDtwYWRkaW5nLWxlZnQ6MTBweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZ3JhcGgtZXhlY3V0aW9ucy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JhcGgtZXhlY3V0aW9ucy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjNTU1fS5ncmFwaC1leGVjdXRpb24tZm9jdXNbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5ncmFwaC1leGVjdXRpb24taW5kZXhbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZy1yaWdodDo0cHg7dGV4dC1hbGlnbjpyaWdodDt3aWR0aDo0MHB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5ncmFwaC1leGVjdXRpb24taW5kZXhbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JhcGgtZXhlY3V0aW9uLWluZGV4W19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0uZ3JhcGgtZXhlY3V0aW9ucy10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Ym94LXNoYWRvdzowIDVweCAzcHggLTNweCAjY2NjO3BhZGRpbmctYm90dG9tOjVweH0uZ3JhcGgtZXhlY3V0aW9ucy12aWV3cG9ydFtfbmdjb250ZW50LSVDT01QJV17ZmxleC1ncm93OjE7Zm9udC1zaXplOjEycHg7d2lkdGg6MTAwJTtvdmVyZmxvdy14OmhpZGRlbn0uaW5wdXQtb2YtZm9jdXNbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmZjA5OX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuaW5wdXQtb2YtZm9jdXNbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuaW5wdXQtb2YtZm9jdXNbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2U2NTEwMH0ubG9hZGluZy1zcGlubmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9ja30ub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZWNlZmYxO2JvcmRlcjoxcHggc29saWQgI2ViZWJlYjtib3JkZXItcmFkaXVzOjRweDtmb250LWZhbWlseToiUm9ib3RvIE1vbm8iLG1vbm9zcGFjZTtmb250LXNpemU6MTBweDtoZWlnaHQ6MTRweDtsaW5lLWhlaWdodDoxNHB4O3BhZGRpbmc6MXB4IDNweDt3aWR0aDptYXgtY29udGVudDtkaXJlY3Rpb246cnRsO2Rpc3BsYXk6YmxvY2t9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjFweCBzb2xpZCAjNTU1fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5vcC10eXBlW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzQ1NWE2NH0udGVuc29yLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0udGVuc29yLWl0ZW1bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDpub3dyYXA7aGVpZ2h0OjM4cHg7bGluZS1oZWlnaHQ6MzhweDt0ZXh0LWFsaWduOmxlZnQ7dmVydGljYWwtYWxpZ246bWlkZGxlO3doaXRlLXNwYWNlOm5vd3JhcDt3aWR0aDoxMDAlfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC50ZW5zb3ItaXRlbVtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC50ZW5zb3ItaXRlbVtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX0udGVuc29yLW5hbWVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyOm5vbmU7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOmluaGVyaXQ7Y3Vyc29yOnBvaW50ZXI7ZGlyZWN0aW9uOnJ0bDtkaXNwbGF5OmJsb2NrO2hlaWdodDoxNnB4O2xpbmUtaGVpZ2h0OjE2cHg7bWFyZ2luOjJweCAwIDFweDttYXgtd2lkdGg6Y2FsYygxMDAlIC0gMnB4KTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowIDJweDt0ZXh0LWFsaWduOnJpZ2h0O3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXB9LnRlbnNvci1uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1c3tvdXRsaW5lOjFweCBzb2xpZCAjYzZjYWQxfS50ZW5zb3ItbmFtZS1hbmQtb3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV17ZGlyZWN0aW9uOnJ0bDtkaXNwbGF5OmlubGluZS1ibG9jaztvdmVyZmxvdzpoaWRkZW47cGFkZGluZy1yaWdodDo4cHg7dGV4dC1hbGlnbjpyaWdodDt3aWR0aDoyNDBweH1kZWJ1Zy10ZW5zb3ItdmFsdWVbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbjoycHggMH0nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoQkssW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoiZ3JhcGgtZXhlY3V0aW9ucy1jb21wb25lbnQiLHRlbXBsYXRlVXJsOiIuL2dyYXBoX2V4ZWN1dGlvbnNfY29tcG9uZW50Lm5nLmh0bWwiLHN0eWxlVXJsczpbIi4vZ3JhcGhfZXhlY3V0aW9uc19jb21wb25lbnQuY3NzIl0sY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sbnVsbCx7bnVtR3JhcGhFeGVjdXRpb25zOlt7dHlwZTp5X31dLGdyYXBoRXhlY3V0aW9uRGF0YTpbe3R5cGU6eV99XSxncmFwaEV4ZWN1dGlvbkluZGljZXM6W3t0eXBlOnlffV0sZm9jdXNJbmRleDpbe3R5cGU6eV99XSxmb2N1c0lucHV0SW5kaWNlczpbe3R5cGU6eV99XSxvblNjcm9sbGVkSW5kZXhDaGFuZ2U6W3t0eXBlOl9ffV0sb25UZW5zb3JOYW1lQ2xpY2s6W3t0eXBlOl9ffV0sdmlld1BvcnQ6W3t0eXBlOkZyLGFyZ3M6W3RGLHtzdGF0aWM6ITF9XX1dfSk7Y2xhc3MgVkt7Y29uc3RydWN0b3IodCl7dGhpcy5zdG9yZT10LHRoaXMubnVtR3JhcGhFeGVjdXRpb25zJD10aGlzLnN0b3JlLnBpcGUoUmsoSFopKSx0aGlzLmdyYXBoRXhlY3V0aW9uRGF0YSQ9dGhpcy5zdG9yZS5waXBlKFJrKFVaKSksdGhpcy5ncmFwaEV4ZWN1dGlvbkluZGljZXMkPXRoaXMuc3RvcmUucGlwZShSayh6ayhIWiwodD0+MD09PXQ/bnVsbDpBcnJheS5mcm9tKHtsZW5ndGg6dH0pLm1hcCgoKHQsZSk9PmUpKSkpKSksdGhpcy5mb2N1c0luZGV4JD10aGlzLnN0b3JlLnBpcGUoUmsoV1opKSx0aGlzLmZvY3VzSW5wdXRJbmRpY2VzJD10aGlzLnN0b3JlLnBpcGUoUmsoWlopKX1vblNjcm9sbGVkSW5kZXhDaGFuZ2UodCl7dGhpcy5zdG9yZS5kaXNwYXRjaChHcSh7aW5kZXg6dH0pKX1vblRlbnNvck5hbWVDbGljayh0KXt0aGlzLnN0b3JlLmRpc3BhdGNoKFlxKHQpKX19VksuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFZLKShNdShFaykpfSxWSy7JtWNtcD1Vbyh7dHlwZTpWSyxzZWxlY3RvcnM6W1sidGYtZGVidWdnZXItdjItZ3JhcGgtZXhlY3V0aW9ucyJdXSxkZWNsczo2LHZhcnM6MTUsY29uc3RzOltbMywibnVtR3JhcGhFeGVjdXRpb25zIiwiZ3JhcGhFeGVjdXRpb25EYXRhIiwiZ3JhcGhFeGVjdXRpb25JbmRpY2VzIiwiZm9jdXNJbmRleCIsImZvY3VzSW5wdXRJbmRpY2VzIiwib25TY3JvbGxlZEluZGV4Q2hhbmdlIiwib25UZW5zb3JOYW1lQ2xpY2siXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKE91KDAsImdyYXBoLWV4ZWN1dGlvbnMtY29tcG9uZW50IiwwKSxOdSgib25TY3JvbGxlZEluZGV4Q2hhbmdlIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vblNjcm9sbGVkSW5kZXhDaGFuZ2UoZSl9KSkoIm9uVGVuc29yTmFtZUNsaWNrIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vblRlbnNvck5hbWVDbGljayhlKX0pKSxPYigxLCJhc3luYyIpLE9iKDIsImFzeW5jIiksT2IoMywiYXN5bmMiKSxPYig0LCJhc3luYyIpLE9iKDUsImFzeW5jIiksUHUoKSksMiZlJiZ2dSgibnVtR3JhcGhFeGVjdXRpb25zIixQYigxLDUsbi5udW1HcmFwaEV4ZWN1dGlvbnMkKSkoImdyYXBoRXhlY3V0aW9uRGF0YSIsUGIoMiw3LG4uZ3JhcGhFeGVjdXRpb25EYXRhJCkpKCJncmFwaEV4ZWN1dGlvbkluZGljZXMiLFBiKDMsOSxuLmdyYXBoRXhlY3V0aW9uSW5kaWNlcyQpKSgiZm9jdXNJbmRleCIsUGIoNCwxMSxuLmZvY3VzSW5kZXgkKSkoImZvY3VzSW5wdXRJbmRpY2VzIixQYig1LDEzLG4uZm9jdXNJbnB1dEluZGljZXMkKSl9LGRpcmVjdGl2ZXM6W0JLXSxwaXBlczpbTXZdLGVuY2Fwc3VsYXRpb246Mn0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoVkssW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoidGYtZGVidWdnZXItdjItZ3JhcGgtZXhlY3V0aW9ucyIsdGVtcGxhdGU6J1xuICAgIDxncmFwaC1leGVjdXRpb25zLWNvbXBvbmVudFxuICAgICAgW251bUdyYXBoRXhlY3V0aW9uc109Im51bUdyYXBoRXhlY3V0aW9ucyQgfCBhc3luYyJcbiAgICAgIFtncmFwaEV4ZWN1dGlvbkRhdGFdPSJncmFwaEV4ZWN1dGlvbkRhdGEkIHwgYXN5bmMiXG4gICAgICBbZ3JhcGhFeGVjdXRpb25JbmRpY2VzXT0iZ3JhcGhFeGVjdXRpb25JbmRpY2VzJCB8IGFzeW5jIlxuICAgICAgW2ZvY3VzSW5kZXhdPSJmb2N1c0luZGV4JCB8IGFzeW5jIlxuICAgICAgW2ZvY3VzSW5wdXRJbmRpY2VzXT0iZm9jdXNJbnB1dEluZGljZXMkIHwgYXN5bmMiXG4gICAgICAob25TY3JvbGxlZEluZGV4Q2hhbmdlKT0ib25TY3JvbGxlZEluZGV4Q2hhbmdlKCRldmVudCkiXG4gICAgICAob25UZW5zb3JOYW1lQ2xpY2spPSJvblRlbnNvck5hbWVDbGljaygkZXZlbnQpIlxuICAgID48L2dyYXBoLWV4ZWN1dGlvbnMtY29tcG9uZW50PlxuICAnfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6RWt9XX0pLG51bGwpO2NvbnN0IGpLPWZ1bmN0aW9uIFVLKCl7cmV0dXJuIHdpbmRvd307ZnVuY3Rpb24gV0sodCl7Y29uc3QgZT1qSygpLnJlcXVpcmU7cmV0dXJuIG5ldyBQcm9taXNlKChuPT57ZSh0LG4pfSkpfWZ1bmN0aW9uIEdLKCl7cmV0dXJuIHJSKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD1qSygpO2lmKHZvaWQgMD09PXQubW9uYWNvKXtpZighdC5yZXF1aXJlKXRocm93IG5ldyBFcnJvcigibG9hZE1vbmFjbygpIGZhaWxlZCBiZWNhdXNlIGZ1bmN0aW9uIHJlcXVpcmUoKSBpcyB1bmF2YWlsYWJsZSIpO3QucmVxdWlyZS5jb25maWcoe3BhdGhzOnt2czoiL3RmLWltcG9ydHMvdnMifX0pLHlpZWxkIFdLKFsidnMvZWRpdG9yL2VkaXRvci5tYWluIl0pLHlpZWxkIFdLKFsidnMvcHl0aG9uL3B5dGhvbi5jb250cmlidXRpb24iXSl9fSkpfWZ1bmN0aW9uIFlLKHQpe3JldHVybiB0PyJ2cy1kYXJrIjoidnMifWNsYXNzIHFLe2NvbnN0cnVjdG9yKHQpe3RoaXMucmVzaXplRXZlbnREZWJvdW5jZVBlcmlvZEluTXM9MTAwLHRoaXMub25SZXNpemU9bmV3IEFiLHRoaXMubmdVbnN1YnNjcmliZSQ9bmV3IHgsdGhpcy5vblJlc2l6ZSQ9bmV3IHg7Y29uc3QgZT1uZXcgUmVzaXplT2JzZXJ2ZXIoKCgpPT57dGhpcy5vblJlc2l6ZSQubmV4dCgpfSkpO2Uub2JzZXJ2ZSh0Lm5hdGl2ZUVsZW1lbnQpLHRoaXMubmdVbnN1YnNjcmliZSQuc3Vic2NyaWJlKCgoKT0+e2UudW5vYnNlcnZlKHQubmF0aXZlRWxlbWVudCl9KSl9bmdPbkluaXQoKXt0aGlzLm9uUmVzaXplJC5waXBlKHJuKDEpLGRlKHRoaXMucmVzaXplRXZlbnREZWJvdW5jZVBlcmlvZEluTXMpLHVuKHRoaXMubmdVbnN1YnNjcmliZSQpKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5vblJlc2l6ZS5lbWl0KCl9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLm5nVW5zdWJzY3JpYmUkLm5leHQoKSx0aGlzLm5nVW5zdWJzY3JpYmUkLmNvbXBsZXRlKCl9fXFLLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxxSykoTXUoY2gpKX0scUsuybVkaXI9Sm8oe3R5cGU6cUssc2VsZWN0b3JzOltbIiIsImRldGVjdFJlc2l6ZSIsIiJdXSxpbnB1dHM6e3Jlc2l6ZUV2ZW50RGVib3VuY2VQZXJpb2RJbk1zOiJyZXNpemVFdmVudERlYm91bmNlUGVyaW9kSW5NcyJ9LG91dHB1dHM6e29uUmVzaXplOiJvblJlc2l6ZSJ9fSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihxSyxbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJbZGV0ZWN0UmVzaXplXSJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpjaH1dfSkse3Jlc2l6ZUV2ZW50RGVib3VuY2VQZXJpb2RJbk1zOlt7dHlwZTp5X31dLG9uUmVzaXplOlt7dHlwZTpfX31dfSk7Y29uc3QgWks9WyJjb2RlVmlld2VyQ29udGFpbmVyIl07Y2xhc3MgWEt7Y29uc3RydWN0b3IoKXt0aGlzLmxpbmVzPW51bGwsdGhpcy5mb2N1c2VkTGluZW5vPW51bGwsdGhpcy5tb25hY289bnVsbCx0aGlzLmVkaXRvcj1udWxsLHRoaXMuZGVjb3JhdGlvbnM9W10sdGhpcy5SRVNJWkVfREVCT1VOQ0VfSU5URVJWQUxfTVM9NTB9b25SZXNpemUoKXt0aGlzLmVkaXRvciYmdGhpcy5lZGl0b3IubGF5b3V0KCl9bmdPbkNoYW5nZXModCl7dmFyIGU7aWYobnVsbD09PXRoaXMubW9uYWNvKXJldHVybjtjb25zdCBuPXQubW9uYWNvJiZudWxsPT09dGhpcy5lZGl0b3I7bnVsbD09PXRoaXMuZWRpdG9yJiYodGhpcy5lZGl0b3I9dGhpcy5tb25hY28uZWRpdG9yLmNyZWF0ZSh0aGlzLmNvZGVWaWV3ZXJDb250YWluZXIubmF0aXZlRWxlbWVudCx7dmFsdWU6KG51bGwhPT0oZT10aGlzLmxpbmVzKSYmdm9pZCAwIT09ZT9lOltdKS5qb2luKCJcbiIpLGxhbmd1YWdlOiJweXRob24iLHJlYWRPbmx5OiEwLGZvbnRTaXplOjEwLG1pbmltYXA6e2VuYWJsZWQ6ITB9LHRoZW1lOllLKHRoaXMudXNlRGFya01vZGUpfSkpLHQubGluZXMmJnRoaXMubGluZXMmJnRoaXMuZWRpdG9yLnNldFZhbHVlKHRoaXMubGluZXMuam9pbigiXG4iKSk7Y29uc3Qgbz1ufHx0LmZvY3VzZWRMaW5lbm8/dGhpcy5mb2N1c2VkTGluZW5vOm51bGw7aWYobyYmdGhpcy5saW5lcyl7dGhpcy5lZGl0b3IucmV2ZWFsTGluZUluQ2VudGVyKG8sdGhpcy5tb25hY28uZWRpdG9yLlNjcm9sbFR5cGUuU21vb3RoKTtjb25zdCB0PXRoaXMubGluZXNbby0xXS5sZW5ndGg7dGhpcy5kZWNvcmF0aW9ucz10aGlzLmVkaXRvci5kZWx0YURlY29yYXRpb25zKHRoaXMuZGVjb3JhdGlvbnMsW3tyYW5nZTpuZXcgdGhpcy5tb25hY28uUmFuZ2UobywxLG8sMSksb3B0aW9uczp7aXNXaG9sZUxpbmU6ITAsbGluZXNEZWNvcmF0aW9uc0NsYXNzTmFtZToiaGlnaGxpZ2h0LWd1dHRlciJ9fSx7cmFuZ2U6bmV3IHRoaXMubW9uYWNvLlJhbmdlKG8sMSxvLHQrMSksb3B0aW9uczp7aW5saW5lQ2xhc3NOYW1lOiJoaWdobGlnaHQtbGluZSJ9fV0pfXQudXNlRGFya01vZGUmJnRoaXMubW9uYWNvLmVkaXRvci5zZXRUaGVtZShZSyh0aGlzLnVzZURhcmtNb2RlKSl9fVhLLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxYSyl9LFhLLsm1Y21wPVVvKHt0eXBlOlhLLHNlbGVjdG9yczpbWyJzb3VyY2UtY29kZS1jb21wb25lbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJldiKFpLLDMsY2gpLDImZSl7bGV0IHQ7VWIodD1ZYigpKSYmKG4uY29kZVZpZXdlckNvbnRhaW5lcj10LmZpcnN0KX19LGlucHV0czp7bGluZXM6ImxpbmVzIixmb2N1c2VkTGluZW5vOiJmb2N1c2VkTGluZW5vIixtb25hY286Im1vbmFjbyIsdXNlRGFya01vZGU6InVzZURhcmtNb2RlIn0sZmVhdHVyZXM6W1NpXSxkZWNsczoyLHZhcnM6MSxjb25zdHM6W1siZGV0ZWN0UmVzaXplIiwiIiwxLCJjb2RlLXZpZXdlci1jb250YWluZXIiLDMsInJlc2l6ZUV2ZW50RGVib3VuY2VQZXJpb2RJbk1zIiwib25SZXNpemUiXSxbImNvZGVWaWV3ZXJDb250YWluZXIiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKE91KDAsImRpdiIsMCwxKSxOdSgib25SZXNpemUiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub25SZXNpemUoKX0pKSxQdSgpKSwyJmUmJnZ1KCJyZXNpemVFdmVudERlYm91bmNlUGVyaW9kSW5NcyIsbi5SRVNJWkVfREVCT1VOQ0VfSU5URVJWQUxfTVMpfSxkaXJlY3RpdmVzOltxS10sc3R5bGVzOlsiLmNvZGUtdmlld2VyLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0ge1xuICBoZWlnaHQ6IDEwMCU7XG59XG5cbltfbmdob3N0LSVDT01QJV0gICAgIC5oaWdobGlnaHQtZ3V0dGVyIHtcbiAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDExMSwgMCwgMC43KTtcbiAgd2lkdGg6IDVweCAhaW1wb3J0YW50O1xufVxuXG5bX25naG9zdC0lQ09NUCVdICAgICAuaGlnaGxpZ2h0LWxpbmUge1xuICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMTExLCAwLCAwLjMpO1xufSJdLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihYSyxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJzb3VyY2UtY29kZS1jb21wb25lbnQiLHRlbXBsYXRlVXJsOiIuL3NvdXJjZV9jb2RlX2NvbXBvbmVudC5uZy5odG1sIixzdHlsZVVybHM6WyIuL3NvdXJjZV9jb2RlX2NvbXBvbmVudC5jc3MiXSxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSxudWxsLHtsaW5lczpbe3R5cGU6eV99XSxmb2N1c2VkTGluZW5vOlt7dHlwZTp5X31dLG1vbmFjbzpbe3R5cGU6eV99XSx1c2VEYXJrTW9kZTpbe3R5cGU6eV99XSxjb2RlVmlld2VyQ29udGFpbmVyOlt7dHlwZTpGcixhcmdzOlsiY29kZVZpZXdlckNvbnRhaW5lciIse3N0YXRpYzohMCxyZWFkOmNofV19XX0pO2NsYXNzIEtLe2NvbnN0cnVjdG9yKCl7dGhpcy5saW5lcz1udWxsLHRoaXMuZm9jdXNlZExpbmVubz1udWxsLHRoaXMudXNlRGFya01vZGU9ITEsdGhpcy5tb25hY28kPW51bGx9bmdPbkluaXQoKXt0aGlzLm1vbmFjbyQ9UnQoR0soKSkucGlwZShodCgoKCk9PndpbmRvdy5tb25hY28pKSl9fWZ1bmN0aW9uIEpLKHQsZSl7aWYoMSZ0JiYoT3UoMCwiZGl2Iiw2KSxNZigxKSxQdSgpKSwyJnQpe2NvbnN0IHQ9THUoKTtKYygxKSx4ZigiICIsdC5mb2N1c2VkU291cmNlTGluZVNwZWMuZmlsZV9wYXRoLCIgIil9fWZ1bmN0aW9uIFFLKHQsZSl7MSZ0JiYoT3UoMCwiZGl2Iiw3KSxNZigxLCIgTm8gZmlsZSBzZWxlY3RlZC4gQ2xpY2sgYSBsaW5lIG51bWJlciBpbiB0aGUgU3RhY2sgVHJhY2Ugc2VjdGlvbiB0byBzaG93IHRoZSBzb3VyY2UgY29kZS4gIiksUHUoKSl9ZnVuY3Rpb24gJEsodCxlKXtpZigxJnQmJnd1KDAsInNvdXJjZS1jb2RlIiw4KSwyJnQpe2NvbnN0IHQ9THUoKTt2dSgibGluZXMiLHQuZm9jdXNlZFNvdXJjZUZpbGVDb250ZW50LmxpbmVzKSgiZm9jdXNlZExpbmVubyIsdC5mb2N1c2VkU291cmNlTGluZVNwZWMubGluZW5vKSgidXNlRGFya01vZGUiLHQudXNlRGFya01vZGUpfX1LSy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8S0spfSxLSy7JtWNtcD1Vbyh7dHlwZTpLSyxzZWxlY3RvcnM6W1sic291cmNlLWNvZGUiXV0saW5wdXRzOntsaW5lczoibGluZXMiLGZvY3VzZWRMaW5lbm86ImZvY3VzZWRMaW5lbm8iLHVzZURhcmtNb2RlOiJ1c2VEYXJrTW9kZSJ9LGRlY2xzOjIsdmFyczo2LGNvbnN0czpbWzMsImxpbmVzIiwiZm9jdXNlZExpbmVubyIsIm1vbmFjbyIsInVzZURhcmtNb2RlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJih3dSgwLCJzb3VyY2UtY29kZS1jb21wb25lbnQiLDApLE9iKDEsImFzeW5jIikpLDImZSYmdnUoImxpbmVzIixuLmxpbmVzKSgiZm9jdXNlZExpbmVubyIsbi5mb2N1c2VkTGluZW5vKSgibW9uYWNvIixQYigxLDQsbi5tb25hY28kKSkoInVzZURhcmtNb2RlIixuLnVzZURhcmtNb2RlKX0sZGlyZWN0aXZlczpbWEtdLHBpcGVzOltNdl0sZW5jYXBzdWxhdGlvbjoyfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihLSyxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJzb3VyY2UtY29kZSIsdGVtcGxhdGU6J1xuICAgIDxzb3VyY2UtY29kZS1jb21wb25lbnRcbiAgICAgIFtsaW5lc109ImxpbmVzIlxuICAgICAgW2ZvY3VzZWRMaW5lbm9dPSJmb2N1c2VkTGluZW5vIlxuICAgICAgW21vbmFjb109Im1vbmFjbyQgfCBhc3luYyJcbiAgICAgIFt1c2VEYXJrTW9kZV09InVzZURhcmtNb2RlIlxuICAgID48L3NvdXJjZS1jb2RlLWNvbXBvbmVudD5cbiAgJ31dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW119KSx7bGluZXM6W3t0eXBlOnlffV0sZm9jdXNlZExpbmVubzpbe3R5cGU6eV99XSx1c2VEYXJrTW9kZTpbe3R5cGU6eV99XX0pO2NsYXNzIHRKe2NvbnN0cnVjdG9yKCl7dGhpcy5mb2N1c2VkU291cmNlRmlsZUNvbnRlbnQ9bnVsbCx0aGlzLmZvY3VzZWRTb3VyY2VMaW5lU3BlYz1udWxsfX10Si7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8dEopfSx0Si7JtWNtcD1Vbyh7dHlwZTp0SixzZWxlY3RvcnM6W1sic291cmNlLWZpbGVzLWNvbXBvbmVudCJdXSxpbnB1dHM6e2ZvY3VzZWRTb3VyY2VGaWxlQ29udGVudDoiZm9jdXNlZFNvdXJjZUZpbGVDb250ZW50Iixmb2N1c2VkU291cmNlTGluZVNwZWM6ImZvY3VzZWRTb3VyY2VMaW5lU3BlYyIsdXNlRGFya01vZGU6InVzZURhcmtNb2RlIn0sZGVjbHM6OCx2YXJzOjMsY29uc3RzOltbMSwic291cmNlLWZpbGVzLWNvbnRhaW5lciJdLFsxLCJoZWFkZXItc2VjdGlvbiJdLFsxLCJ0aXRsZS10YWciXSxbImNsYXNzIiwiZmlsZS1sYWJlbCIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJub0ZpbGVTZWxlY3RlZCIsIiJdLFszLCJsaW5lcyIsImZvY3VzZWRMaW5lbm8iLCJ1c2VEYXJrTW9kZSIsNCwibmdJZiJdLFsxLCJmaWxlLWxhYmVsIl0sWzEsIm5vLWZpbGUtc2VsZWN0ZWQiXSxbMywibGluZXMiLCJmb2N1c2VkTGluZW5vIiwidXNlRGFya01vZGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pe2lmKDEmZSYmKE91KDAsImRpdiIsMCksT3UoMSwiZGl2IiwxKSxPdSgyLCJkaXYiLDIpLE1mKDMsIlNvdXJjZSBDb2RlIiksUHUoKSxXbSg0LEpLLDIsMSwiZGl2IiwzKSxXbSg1LFFLLDIsMCwibmctdGVtcGxhdGUiLG51bGwsNCxLYiksUHUoKSxXbSg3LCRLLDEsMywic291cmNlLWNvZGUiLDUpLFB1KCkpLDImZSl7Y29uc3QgdD1HbSg2KTtKYyg0KSx2dSgibmdJZiIsbnVsbCE9PW4uZm9jdXNlZFNvdXJjZUxpbmVTcGVjKSgibmdJZkVsc2UiLHQpLEpjKDMpLHZ1KCJuZ0lmIixudWxsIT09bi5mb2N1c2VkU291cmNlRmlsZUNvbnRlbnQmJm51bGwhPT1uLmZvY3VzZWRTb3VyY2VMaW5lU3BlYyYmbnVsbCE9PW4uZm9jdXNlZFNvdXJjZUZpbGVDb250ZW50LmxpbmVzKX19LGRpcmVjdGl2ZXM6W2F2LEtLXSxzdHlsZXM6WycubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1iYWRnZS1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo5cHh9Lm1hdC1iYWRnZS1sYXJnZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4fS5tYXQtaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWhlYWRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAyNHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE1cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjgzKS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1oNltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC42NykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtYm9keS1zdHJvbmdbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MCAwIDEycHh9Lm1hdC1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FwdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTJweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6MzAwIDExMnB4LzExMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wNWVtO21hcmdpbjowIDAgNTZweH0ubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNTZweC81NnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMmVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNDVweC80OHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMDVlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDM0cHgvNDBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1yYWlzZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3Ryb2tlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZsYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mYWJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW1pbmktZmFiW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtYnV0dG9uLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FyZC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjBweH0ubWF0LWNhcmQtc3VidGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hlY2tib3gtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC10cmFpbGluZy1pY29uLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC1yZW1vdmUubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxOHB4fS5tYXQtdGFibGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWhlYWRlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb290ZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jYWxlbmRhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FsZW5kYXItYm9keVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYWxlbmRhci1wZXJpb2QtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWRpYWxvZy10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTI1O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTUwJTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjVlbTt3aWR0aDoxLjVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW07bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41ZW0gMDtib3JkZXItdG9wOi44NDM3NWVtIHNvbGlkIHRyYW5zcGFyZW50fS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3RvcDotMC44NDM3NWVtO3BhZGRpbmctdG9wOi44NDM3NWVtfS5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjc1JTttYXJnaW4tdG9wOi42NjY2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNzkxNjY2NjY2N2VtKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAycHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyM2VtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzUzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi41NDE2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNjY2NjY2NjY2N2VtKX1AbWVkaWEgcHJpbnR7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIyZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIxZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMmVtKSBzY2FsZSgwLjc1KX19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjI1ZW0gMCAuNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4wOTM3NWVtO21hcmdpbi10b3A6LTAuNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MWVtIDAgMWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjg0Mzc1ZW07bWFyZ2luLXRvcDotMC4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH1pbnB1dC5tYXQtaW5wdXQtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDotMC4wNjI1ZW19Lm1hdC1tZW51LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1wYWdpbmF0b3JbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXBhZ2luYXRvci1wYWdlLXNpemVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3RbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXN0ZXBwZXItdmVydGljYWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc3RlcC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0Om5vcm1hbH0ubWF0LXN0ZXAtbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRhYi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjB9Lm1hdC10b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTZweH0ubWF0LW9wdGdyb3VwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LXNpbXBsZS1zbmFja2Jhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbltfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRyZWVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbmVzdGVkLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4fS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVdOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtcmlwcGxlLm1hdC1yaXBwbGUtdW5ib3VuZGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6NTAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7dHJhbnNmb3JtOnNjYWxlKDApfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpub25lfS5jZGstdmlzdWFsbHktaGlkZGVuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7bGVmdDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmVtcHR5e2Rpc3BsYXk6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LXBhbmVbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOmF1dG87Ym94LXNpemluZzpib3JkZXItYm94O3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7bWF4LXdpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlfS5jZGstb3ZlcmxheS1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKTtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5Oi42fS5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjMyKX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTowfS5jZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO292ZXJmbG93LXk6c2Nyb2xsfUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnR7fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5ke30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxse2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCAwcyAxbXN9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06bm90KDotd2Via2l0LWF1dG9maWxsKXthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIDBzIDFtc310ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemVbX25nY29udGVudC0lQ09NUCVde3Jlc2l6ZTpub25lfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmdbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OmF1dG8gIWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW4gIWltcG9ydGFudH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nLWZpcmVmb3hbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OjAgIWltcG9ydGFudH0ubWF0LWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0uaGVhZGVyLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7ZGlzcGxheTpmbGV4O2hlaWdodDoyNHB4O3BhZGRpbmctYm90dG9tOjZweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2hpdGUtc3BhY2U6bm93cmFwO3dpZHRoOjEwMCV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmhlYWRlci1zZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmhlYWRlci1zZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fS5maWxlLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXdlaWdodDpub3JtYWw7d2hpdGUtc3BhY2U6bm9ybWFsO292ZXJmbG93LXdyYXA6YW55d2hlcmU7b3ZlcmZsb3cteTphdXRvO3BhZGRpbmc6MCAyMHB4fS5uby1maWxlLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9jaztjb2xvcjojNjY2O3BhZGRpbmc6MCAyMHB4O3doaXRlLXNwYWNlOm5vcm1hbH0uc291cmNlLWZpbGVzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmb250LWZhbWlseToiUm9ib3RvIE1vbm8iLG1vbm9zcGFjZTtmb250LXNpemU6MTBweDtoZWlnaHQ6MTAwJX0udGl0bGUtdGFnW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXdlaWdodDpib2xkO2hlaWdodDoxMDAlO3BhZGRpbmctbGVmdDo2cHg7dmVydGljYWwtYWxpZ246dG9wfXNvdXJjZS1jb2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4LWdyb3c6MTt3aWR0aDoxMDAlfSddfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYih0Sixbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJzb3VyY2UtZmlsZXMtY29tcG9uZW50Iix0ZW1wbGF0ZVVybDoiLi9zb3VyY2VfZmlsZXNfY29tcG9uZW50Lm5nLmh0bWwiLHN0eWxlVXJsczpbIi4vc291cmNlX2ZpbGVzX2NvbXBvbmVudC5jc3MiXX1dfV0sbnVsbCx7Zm9jdXNlZFNvdXJjZUZpbGVDb250ZW50Olt7dHlwZTp5X31dLGZvY3VzZWRTb3VyY2VMaW5lU3BlYzpbe3R5cGU6eV99XSx1c2VEYXJrTW9kZTpbe3R5cGU6eV99XX0pO2NsYXNzIGVKe2NvbnN0cnVjdG9yKHQpe3RoaXMuc3RvcmU9dCx0aGlzLmZvY3VzZWRTb3VyY2VGaWxlQ29udGVudCQ9dGhpcy5zdG9yZS5zZWxlY3QoY1gpLHRoaXMuZm9jdXNlZFNvdXJjZUxpbmVTcGVjJD10aGlzLnN0b3JlLnNlbGVjdChkWCksdGhpcy51c2VEYXJrTW9kZSQ9dGhpcy5zdG9yZS5zZWxlY3QoTUUpfX1lSi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8ZUopKE11KEVrKSl9LGVKLsm1Y21wPVVvKHt0eXBlOmVKLHNlbGVjdG9yczpbWyJ0Zi1kZWJ1Z2dlci12Mi1zb3VyY2UtZmlsZXMiXV0sZGVjbHM6NCx2YXJzOjksY29uc3RzOltbMywiZm9jdXNlZFNvdXJjZUZpbGVDb250ZW50IiwiZm9jdXNlZFNvdXJjZUxpbmVTcGVjIiwidXNlRGFya01vZGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKHd1KDAsInNvdXJjZS1maWxlcy1jb21wb25lbnQiLDApLE9iKDEsImFzeW5jIiksT2IoMiwiYXN5bmMiKSxPYigzLCJhc3luYyIpKSwyJmUmJnZ1KCJmb2N1c2VkU291cmNlRmlsZUNvbnRlbnQiLFBiKDEsMyxuLmZvY3VzZWRTb3VyY2VGaWxlQ29udGVudCQpKSgiZm9jdXNlZFNvdXJjZUxpbmVTcGVjIixQYigyLDUsbi5mb2N1c2VkU291cmNlTGluZVNwZWMkKSkoInVzZURhcmtNb2RlIixQYigzLDcsbi51c2VEYXJrTW9kZSQpKX0sZGlyZWN0aXZlczpbdEpdLHBpcGVzOltNdl0sZW5jYXBzdWxhdGlvbjoyfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihlSixbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJ0Zi1kZWJ1Z2dlci12Mi1zb3VyY2UtZmlsZXMiLHRlbXBsYXRlOidcbiAgICA8c291cmNlLWZpbGVzLWNvbXBvbmVudFxuICAgICAgW2ZvY3VzZWRTb3VyY2VGaWxlQ29udGVudF09ImZvY3VzZWRTb3VyY2VGaWxlQ29udGVudCQgfCBhc3luYyJcbiAgICAgIFtmb2N1c2VkU291cmNlTGluZVNwZWNdPSJmb2N1c2VkU291cmNlTGluZVNwZWMkIHwgYXN5bmMiXG4gICAgICBbdXNlRGFya01vZGVdPSJ1c2VEYXJrTW9kZSQgfCBhc3luYyJcbiAgICA+PC9zb3VyY2UtZmlsZXMtY29tcG9uZW50PlxuICAnfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6RWt9XX0pLG51bGwpO2NvbnN0IG5KPVsic3RhY2tGcmFtZUFycmF5Il07ZnVuY3Rpb24gb0oodCxlKXtpZigxJnQmJihPdSgwLCJzcGFuIiwxMyksTWYoMSksUHUoKSksMiZ0KXtjb25zdCB0PUx1KDMpO0pjKDEpLHhmKCIgIyIsdC5leGVjdXRpb25JbmRleCwiOiAiKX19ZnVuY3Rpb24gaUoodCxlKXtpZigxJnQmJihPdSgwLCJzcGFuIiwxNCksTWYoMSksUHUoKSksMiZ0KXtjb25zdCB0PUx1KDMpO0pjKDEpLHhmKCIgIix0Lm9wVHlwZSwiICIpfX1mdW5jdGlvbiBhSih0LGUpe2lmKDEmdCYmKE91KDAsImRpdiIpLE1mKDEsIiBFYWdlciBleGVjdXRpb24gIiksV20oMixvSiwyLDEsInNwYW4iLDExKSxXbSgzLGlKLDIsMSwic3BhbiIsMTIpLFB1KCkpLDImdCl7Y29uc3QgdD1MdSgyKTtKYygyKSx2dSgibmdJZiIsbnVsbCE9PXQub3BUeXBlKSxKYygxKSx2dSgibmdJZiIsbnVsbCE9PXQub3BUeXBlKX19ZnVuY3Rpb24gckoodCxlKXtpZigxJnQmJihPdSgwLCJzcGFuIiwxNiksTWYoMSksUHUoKSksMiZ0KXtjb25zdCB0PUx1KDMpO0pjKDEpLHhmKCcgIicsdC5vcE5hbWUsJyIgJyl9fWZ1bmN0aW9uIHNKKHQsZSl7aWYoMSZ0JiYoT3UoMCwic3BhbiIsMTQpLE1mKDEpLFB1KCkpLDImdCl7Y29uc3QgdD1MdSgzKTtKYygxKSx4ZigiICIsdC5vcFR5cGUsIiAiKX19ZnVuY3Rpb24gbEoodCxlKXtpZigxJnQmJihPdSgwLCJkaXYiKSxNZigxLCIgQ3JlYXRpb24gb2YgZ3JhcGggb3AgIiksV20oMixySiwyLDEsInNwYW4iLDE1KSxXbSgzLHNKLDIsMSwic3BhbiIsMTIpLFB1KCkpLDImdCl7Y29uc3QgdD1MdSgyKTtKYygyKSx2dSgibmdJZiIsbnVsbCE9PXQub3BOYW1lKSxKYygxKSx2dSgibmdJZiIsbnVsbCE9PXQub3BUeXBlKX19ZnVuY3Rpb24gY0oodCxlKXtpZigxJnQmJihPdSgwLCJzcGFuIiwxNyksTWYoMSksUHUoKSksMiZ0KXtjb25zdCB0PUx1KDIpO0pjKDEpLHhmKCIgKEhvc3QgbmFtZTogIix0LnN0YWNrRnJhbWVzRm9yRGlzcGxheVswXS5ob3N0X25hbWUsIikgIil9fWZ1bmN0aW9uIGRKKHQsZSl7aWYoMSZ0JiYoT3UoMCwiZGl2Iiw3KSxPdSgxLCJzcGFuIiksT3UoMiwic3BhbiIsOCksV20oMyxhSiw0LDIsImRpdiIsOSksV20oNCxsSiw0LDIsImRpdiIsOSksUHUoKSxQdSgpLE91KDUsImRpdiIpLFdtKDYsY0osMiwxLCJzcGFuIiwxMCksUHUoKSxQdSgpKSwyJnQpe2NvbnN0IHQ9THUoKTtKYygyKSx2dSgibmdTd2l0Y2giLHQuY29kZUxvY2F0aW9uVHlwZSksSmMoMSksdnUoIm5nU3dpdGNoQ2FzZSIsdC5Db2RlTG9jYXRpb25UeXBlLkVYRUNVVElPTiksSmMoMSksdnUoIm5nU3dpdGNoQ2FzZSIsdC5Db2RlTG9jYXRpb25UeXBlLkdSQVBIX09QX0NSRUFUSU9OKSxKYygyKSx2dSgibmdJZiIsbnVsbCE9PXQuc3RhY2tGcmFtZXNGb3JEaXNwbGF5JiZ0LnN0YWNrRnJhbWVzRm9yRGlzcGxheS5sZW5ndGg+MCl9fWZ1bmN0aW9uIHBKKHQsZSl7MSZ0JiYoT3UoMCwiZGl2IiwxOCksTWYoMSwiIENsaWNrIGFuIGVhZ2VyIGV4ZWN1dGlvbiBvciBncmFwaCBvcCB0byBzaG93IGl0cyBvcmlnaW5hbCBzdGFjayB0cmFjZS4gIiksUHUoKSl9ZnVuY3Rpb24gbUoodCxlKXsxJnQmJihPdSgwLCJkaXYiLDI4KSxNZigxLCIg4qSTICIpLFB1KCkpfWNvbnN0IHVKPWZ1bmN0aW9uKHQsZSl7cmV0dXJuW3QsZV19O2Z1bmN0aW9uIGZKKHQsZSl7aWYoMSZ0KXtjb25zdCB0PUV1KCk7T3UoMCwiZGl2IiwyMiksT3UoMSwiZGl2IiwyMyksTWYoMiksUHUoKSxPdSgzLCJkaXYiLDI0KSxXbSg0LG1KLDIsMCwiZGl2IiwyNSksT3UoNSwiZGl2IiwyNiksTnUoImNsaWNrIiwoZnVuY3Rpb24gbigpe3JhKHQpO2NvbnN0IG89ZS4kaW1wbGljaXQ7cmV0dXJuIEx1KDIpLm9uU291cmNlTGluZUNsaWNrZWQuZW1pdChvKX0pKSxNZig2KSxQdSgpLE91KDcsImRpdiIsMjcpLE1mKDgpLFB1KCksUHUoKSxQdSgpfWlmKDImdCl7Y29uc3QgdD1lLiRpbXBsaWNpdCxuPUx1KDIpO3Z1KCJuZ0NsYXNzIixoYig2LHVKLHQuYmVsb25nc1RvRm9jdXNlZEZpbGU/ImZvY3VzZWQtZmlsZSI6IiIsdC5mb2N1c2VkPyJmb2N1c2VkLXN0YWNrLWZyYW1lIjoiIikpLEpjKDEpLFV1KCJ0aXRsZSIsdC5maWxlX3BhdGgpLEpjKDEpLHhmKCIgIix0LmNvbmNpc2VfZmlsZV9wYXRoLCIgIiksSmMoMiksdnUoIm5nSWYiLG4uc3RpY2tUb0JvdHRvbW1vc3RGcmFtZUluRm9jdXNlZEZpbGUmJnQuZm9jdXNlZCksSmMoMikseGYoIiBMaW5lICIsdC5saW5lbm8sIiAiKSxKYygyKSx4ZigiICIsdC5mdW5jdGlvbl9uYW1lLCIgIil9fWZ1bmN0aW9uIGdKKHQsZSl7aWYoMSZ0JiYoT3UoMCwiZGl2IiwxOSwyMCksV20oMixmSiw5LDksImRpdiIsMjEpLFB1KCkpLDImdCl7Y29uc3QgdD1MdSgpO0pjKDIpLHZ1KCJuZ0Zvck9mIix0LnN0YWNrRnJhbWVzRm9yRGlzcGxheSl9fWZ1bmN0aW9uIGhKKHQsZSl7fWNsYXNzIGJKe2NvbnN0cnVjdG9yKCl7dGhpcy5zdGFja0ZyYW1lc0ZvckRpc3BsYXk9bnVsbCx0aGlzLm9uU291cmNlTGluZUNsaWNrZWQ9bmV3IEFiLHRoaXMuQ29kZUxvY2F0aW9uVHlwZT1hWn1uZ0FmdGVyVmlld0NoZWNrZWQoKXtpZih2b2lkIDA9PT10aGlzLnN0YWNrRnJhbWVBcnJheSlyZXR1cm47Y29uc3QgdD10aGlzLnN0YWNrRnJhbWVBcnJheS5uYXRpdmVFbGVtZW50LGU9dC5xdWVyeVNlbGVjdG9yKCIuZm9jdXNlZC1zdGFjay1mcmFtZSIpO2lmKG51bGwhPT1lKXJldHVybiB2b2lkIHRoaXMuc2Nyb2xsVG9FbGVtZW50KHQsZSk7Y29uc3Qgbj10LnF1ZXJ5U2VsZWN0b3IoIi5zdGFjay1mcmFtZS1jb250YWluZXI6bGFzdC1jaGlsZCIpO251bGwhPT1uJiZ0aGlzLnNjcm9sbFRvRWxlbWVudCh0LG4pfXNjcm9sbFRvRWxlbWVudCh0LGUpe3Quc2Nyb2xsVG9wPWUub2Zmc2V0VG9wfX1iSi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8YkopfSxiSi7JtWNtcD1Vbyh7dHlwZTpiSixzZWxlY3RvcnM6W1sic3RhY2stdHJhY2UtY29tcG9uZW50Il1dLHZpZXdRdWVyeTpmdW5jdGlvbiB0KGUsbil7aWYoMSZlJiZXYihuSiwxKSwyJmUpe2xldCB0O1ViKHQ9WWIoKSkmJihuLnN0YWNrRnJhbWVBcnJheT10LmZpcnN0KX19LGlucHV0czp7Y29kZUxvY2F0aW9uVHlwZToiY29kZUxvY2F0aW9uVHlwZSIsb3BUeXBlOiJvcFR5cGUiLG9wTmFtZToib3BOYW1lIixleGVjdXRpb25JbmRleDoiZXhlY3V0aW9uSW5kZXgiLHN0aWNrVG9Cb3R0b21tb3N0RnJhbWVJbkZvY3VzZWRGaWxlOiJzdGlja1RvQm90dG9tbW9zdEZyYW1lSW5Gb2N1c2VkRmlsZSIsc3RhY2tGcmFtZXNGb3JEaXNwbGF5OiJzdGFja0ZyYW1lc0ZvckRpc3BsYXkifSxvdXRwdXRzOntvblNvdXJjZUxpbmVDbGlja2VkOiJvblNvdXJjZUxpbmVDbGlja2VkIn0sZGVjbHM6MTAsdmFyczo0LGNvbnN0czpbWzEsInN0YWNrLXRyYWNlLWNvbnRhaW5lciJdLFsxLCJzdGFjay10cmFjZS1oZWFkZXIiXSxbMSwic3RhY2stdHJhY2UtdGl0bGUiXSxbImNsYXNzIiwic3RhY2stdHJhY2UtYXV4LWluZm8iLDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsibm9TdGFja1RyYWNlIiwiIl0sWyJjbGFzcyIsInN0YWNrLWZyYW1lLWFycmF5Iiw0LCJuZ0lmIiwibmdJZkVsc2UiXSxbImxvYWRpbmdTZWN0aW9uIiwiIl0sWzEsInN0YWNrLXRyYWNlLWF1eC1pbmZvIl0sWzEsImNvZGUtbG9jYXRpb24tb3JpZ2luIiwzLCJuZ1N3aXRjaCJdLFs0LCJuZ1N3aXRjaENhc2UiXSxbImNsYXNzIiwic3RhY2stdHJhY2UtaG9zdC1uYW1lIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImVhZ2VyLWV4ZWN1dGlvbi1pbmRleCIsNCwibmdJZiJdLFsiY2xhc3MiLCJvcC10eXBlIiw0LCJuZ0lmIl0sWzEsImVhZ2VyLWV4ZWN1dGlvbi1pbmRleCJdLFsxLCJvcC10eXBlIl0sWyJjbGFzcyIsIm9wLW5hbWUiLDQsIm5nSWYiXSxbMSwib3AtbmFtZSJdLFsxLCJzdGFjay10cmFjZS1ob3N0LW5hbWUiXSxbMSwic3RhY2stdHJhY2UtYXV4LWluZm8iLCJuby1zdGFjay10cmFjZSJdLFsxLCJzdGFjay1mcmFtZS1hcnJheSJdLFsic3RhY2tGcmFtZUFycmF5IiwiIl0sWyJjbGFzcyIsInN0YWNrLWZyYW1lLWNvbnRhaW5lciIsMywibmdDbGFzcyIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsInN0YWNrLWZyYW1lLWNvbnRhaW5lciIsMywibmdDbGFzcyJdLFsxLCJzdGFjay1mcmFtZS1maWxlLXBhdGgiLDMsInRpdGxlIl0sWzEsInN0YWNrLWZyYW1lLWxpbmVuby1mdW5jdGlvbiJdLFsiY2xhc3MiLCJzdGljay10by1ib3R0b21tb3N0LWluZGljYXRvciIsInRpdGxlIiwiU3RpY2tpbmcgdG8gdGhlIGJvdHRvbW1vc3QgZnJhbWUgaW4gdGhlIGN1cnJlbnQgc291cmNlIGZpbGUgd2hlbiBuYXZpZ2F0aW5nIGV4ZWN1dGlvbnMgYW5kIGdyYXBoIG9wcy4gVG8gcmVtb3ZlIHRoaXMgc3RpY2tpbmcsIGNsaWNrIGFueSBub24tYm90dG9tbW9zdCBzdGFjayBmcmFtZS4iLDQsIm5nSWYiXSxbMSwic3RhY2stZnJhbWUtbGluZW5vIiwzLCJjbGljayJdLFsxLCJzdGFjay1mcmFtZS1mdW5jdGlvbiJdLFsidGl0bGUiLCJTdGlja2luZyB0byB0aGUgYm90dG9tbW9zdCBmcmFtZSBpbiB0aGUgY3VycmVudCBzb3VyY2UgZmlsZSB3aGVuIG5hdmlnYXRpbmcgZXhlY3V0aW9ucyBhbmQgZ3JhcGggb3BzLiBUbyByZW1vdmUgdGhpcyBzdGlja2luZywgY2xpY2sgYW55IG5vbi1ib3R0b21tb3N0IHN0YWNrIGZyYW1lLiIsMSwic3RpY2stdG8tYm90dG9tbW9zdC1pbmRpY2F0b3IiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pe2lmKDEmZSYmKE91KDAsImRpdiIsMCksT3UoMSwiZGl2IiwxKSxPdSgyLCJzcGFuIiwyKSxNZigzLCIgU3RhY2sgVHJhY2UgIiksUHUoKSxXbSg0LGRKLDcsNCwiZGl2IiwzKSxXbSg1LHBKLDIsMCwibmctdGVtcGxhdGUiLG51bGwsNCxLYiksUHUoKSxXbSg3LGdKLDMsMSwiZGl2Iiw1KSxXbSg4LGhKLDAsMCwibmctdGVtcGxhdGUiLG51bGwsNixLYiksUHUoKSksMiZlKXtjb25zdCB0PUdtKDYpLGU9R20oOSk7SmMoNCksdnUoIm5nSWYiLG51bGwhPT1uLmNvZGVMb2NhdGlvblR5cGUpKCJuZ0lmRWxzZSIsdCksSmMoMyksdnUoIm5nSWYiLG51bGwhPT1uLnN0YWNrRnJhbWVzRm9yRGlzcGxheSkoIm5nSWZFbHNlIixlKX19LGRpcmVjdGl2ZXM6W2F2LGN2LGR2LG92LHR2XSxzdHlsZXM6WycubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1iYWRnZS1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo5cHh9Lm1hdC1iYWRnZS1sYXJnZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4fS5tYXQtaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWhlYWRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAyNHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE1cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjgzKS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1oNltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC42NykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtYm9keS1zdHJvbmdbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MCAwIDEycHh9Lm1hdC1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FwdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTJweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6MzAwIDExMnB4LzExMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wNWVtO21hcmdpbjowIDAgNTZweH0ubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNTZweC81NnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMmVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNDVweC80OHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMDVlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDM0cHgvNDBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1yYWlzZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3Ryb2tlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZsYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mYWJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW1pbmktZmFiW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtYnV0dG9uLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FyZC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjBweH0ubWF0LWNhcmQtc3VidGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hlY2tib3gtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC10cmFpbGluZy1pY29uLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC1yZW1vdmUubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxOHB4fS5tYXQtdGFibGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWhlYWRlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb290ZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jYWxlbmRhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FsZW5kYXItYm9keVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYWxlbmRhci1wZXJpb2QtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWRpYWxvZy10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTI1O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTUwJTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjVlbTt3aWR0aDoxLjVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW07bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41ZW0gMDtib3JkZXItdG9wOi44NDM3NWVtIHNvbGlkIHRyYW5zcGFyZW50fS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3RvcDotMC44NDM3NWVtO3BhZGRpbmctdG9wOi44NDM3NWVtfS5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjc1JTttYXJnaW4tdG9wOi42NjY2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNzkxNjY2NjY2N2VtKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAycHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyM2VtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzUzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi41NDE2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNjY2NjY2NjY2N2VtKX1AbWVkaWEgcHJpbnR7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIyZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIxZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMmVtKSBzY2FsZSgwLjc1KX19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjI1ZW0gMCAuNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4wOTM3NWVtO21hcmdpbi10b3A6LTAuNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MWVtIDAgMWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjg0Mzc1ZW07bWFyZ2luLXRvcDotMC4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH1pbnB1dC5tYXQtaW5wdXQtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDotMC4wNjI1ZW19Lm1hdC1tZW51LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1wYWdpbmF0b3JbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXBhZ2luYXRvci1wYWdlLXNpemVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3RbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXN0ZXBwZXItdmVydGljYWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc3RlcC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0Om5vcm1hbH0ubWF0LXN0ZXAtbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRhYi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjB9Lm1hdC10b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTZweH0ubWF0LW9wdGdyb3VwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LXNpbXBsZS1zbmFja2Jhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbltfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRyZWVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbmVzdGVkLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4fS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVdOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtcmlwcGxlLm1hdC1yaXBwbGUtdW5ib3VuZGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6NTAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7dHJhbnNmb3JtOnNjYWxlKDApfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpub25lfS5jZGstdmlzdWFsbHktaGlkZGVuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7bGVmdDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmVtcHR5e2Rpc3BsYXk6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LXBhbmVbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOmF1dG87Ym94LXNpemluZzpib3JkZXItYm94O3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7bWF4LXdpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlfS5jZGstb3ZlcmxheS1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKTtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5Oi42fS5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjMyKX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTowfS5jZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO292ZXJmbG93LXk6c2Nyb2xsfUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnR7fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5ke30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxse2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCAwcyAxbXN9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06bm90KDotd2Via2l0LWF1dG9maWxsKXthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIDBzIDFtc310ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemVbX25nY29udGVudC0lQ09NUCVde3Jlc2l6ZTpub25lfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmdbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OmF1dG8gIWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW4gIWltcG9ydGFudH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nLWZpcmVmb3hbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OjAgIWltcG9ydGFudH0ubWF0LWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0uZm9jdXNlZC1maWxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDpib2xkfS5mb2N1c2VkLXN0YWNrLWZyYW1lW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDExMSwwLC4zKX0ubm8tc3RhY2stdHJhY2VbX25nY29udGVudC0lQ09NUCVde2NvbG9yOmdyYXl9Lm9wLW5hbWVbX25nY29udGVudC0lQ09NUCVde3dvcmQtd3JhcDphbnl3aGVyZX0ub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZWNlZmYxO2JvcmRlcjoxcHggc29saWQgI2ViZWJlYjtib3JkZXItcmFkaXVzOjRweDtmb250LWZhbWlseToiUm9ib3RvIE1vbm8iLG1vbm9zcGFjZTtmb250LXNpemU6MTBweDtoZWlnaHQ6MTRweDtsaW5lLWhlaWdodDoxNHB4O3BhZGRpbmc6MXB4IDNweDt3aWR0aDptYXgtY29udGVudH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5vcC10eXBlW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MXB4IHNvbGlkICM1NTV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojNDU1YTY0fS5zdGFjay1mcmFtZS1hcnJheVtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3cteDpoaWRkZW47b3ZlcmZsb3cteTphdXRvO3dpZHRoOmNhbGMoMTAwJSAtIDhweCl9LnN0YWNrLWZyYW1lLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2EwYTBhMH0uc3RhY2stZnJhbWUtZmlsZS1wYXRoW19uZ2NvbnRlbnQtJUNPTVAlXXttYXgtd2lkdGg6MTgwcHg7d2lkdGg6MTgwcHh9LnN0YWNrLWZyYW1lLWxpbmVuby1mdW5jdGlvbltfbmdjb250ZW50LSVDT01QJV17dGV4dC1hbGlnbjpyaWdodDt3aGl0ZS1zcGFjZTpub3dyYXB9LnN0YWNrLWZyYW1lLWZ1bmN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9jazttYXgtd2lkdGg6MjAwcHg7cGFkZGluZy1sZWZ0OjEwcHg7dGV4dC1hbGlnbjpsZWZ0O3doaXRlLXNwYWNlOm5vcm1hbDt3aWR0aDoyMDBweDt3b3JkLXdyYXA6YW55d2hlcmV9LnN0YWNrLWZyYW1lLWxpbmVub1tfbmdjb250ZW50LSVDT01QJV17Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWF4LXdpZHRoOjgwcHg7dGV4dC1hbGlnbjpsZWZ0O3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7d2lkdGg6ODBweH0uc3RhY2stdHJhY2UtYXV4LWluZm9bX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6MTVweDtwYWRkaW5nLWxlZnQ6MjRweH0uc3RhY2stdHJhY2UtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItbGVmdDoxcHggc29saWQgI2ViZWJlYjtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpmbGV4O2ZsZXgtZmxvdzpjb2x1bW47Zm9udC1zaXplOjEwcHg7Zm9udC1mYW1pbHk6IlJvYm90byBNb25vIixtb25vc3BhY2U7aGVpZ2h0OjEwMCU7bWFyZ2luLWxlZnQ6OHB4O21heC1oZWlnaHQ6MzYwcHg7b3ZlcmZsb3cteDpoaWRkZW47b3ZlcmZsb3cteTpoaWRkZW47cGFkZGluZy1sZWZ0OjhweDt3aWR0aDoxMDAlfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zdGFjay10cmFjZS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuc3RhY2stdHJhY2UtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItbGVmdDoxcHggc29saWQgIzU1NX0uc3RhY2stdHJhY2UtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3gtc2hhZG93OjAgNXB4IDNweCAtM3B4ICNjY2M7cGFkZGluZy1ib3R0b206M3B4fS5zdGFjay10cmFjZS1ob3N0LW5hbWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOmdyYXl9LnN0YWNrLXRyYWNlLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDpib2xkfS5zdGljay10by1ib3R0b21tb3N0LWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC13ZWlnaHQ6Ym9sZDtmb250LXNpemU6MTJweDtwYWRkaW5nLXJpZ2h0OjNweH0nXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoYkosW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3Rvcjoic3RhY2stdHJhY2UtY29tcG9uZW50Iix0ZW1wbGF0ZVVybDoiLi9zdGFja190cmFjZV9jb21wb25lbnQubmcuaHRtbCIsc3R5bGVVcmxzOlsiLi9zdGFja190cmFjZV9jb21wb25lbnQuY3NzIl19XX1dLG51bGwse2NvZGVMb2NhdGlvblR5cGU6W3t0eXBlOnlffV0sb3BUeXBlOlt7dHlwZTp5X31dLG9wTmFtZTpbe3R5cGU6eV99XSxleGVjdXRpb25JbmRleDpbe3R5cGU6eV99XSxzdGlja1RvQm90dG9tbW9zdEZyYW1lSW5Gb2N1c2VkRmlsZTpbe3R5cGU6eV99XSxzdGFja0ZyYW1lc0ZvckRpc3BsYXk6W3t0eXBlOnlffV0sb25Tb3VyY2VMaW5lQ2xpY2tlZDpbe3R5cGU6X199XSxzdGFja0ZyYW1lQXJyYXk6W3t0eXBlOkZyLGFyZ3M6WyJzdGFja0ZyYW1lQXJyYXkiXX1dfSk7Y2xhc3MgeUp7Y29uc3RydWN0b3IodCl7dGhpcy5zdG9yZT10LHRoaXMuY29kZUxvY2F0aW9uVHlwZSQ9dGhpcy5zdG9yZS5waXBlKFJrKHprKGlYLCh0PT5udWxsPT09dD9udWxsOnQuY29kZUxvY2F0aW9uVHlwZSkpKSksdGhpcy5vcFR5cGUkPXRoaXMuc3RvcmUucGlwZShSayh6ayhpWCwodD0+bnVsbD09PXQ/bnVsbDp0Lm9wVHlwZSkpKSksdGhpcy5vcE5hbWUkPXRoaXMuc3RvcmUucGlwZShSayh6ayhpWCwodD0+bnVsbD09PXR8fHQuY29kZUxvY2F0aW9uVHlwZSE9PWFaLkdSQVBIX09QX0NSRUFUSU9OP251bGw6dC5vcE5hbWUpKSkpLHRoaXMuZXhlY3V0aW9uSW5kZXgkPXRoaXMuc3RvcmUucGlwZShSayh6ayhpWCwodD0+bnVsbD09PXR8fHQuY29kZUxvY2F0aW9uVHlwZSE9PWFaLkVYRUNVVElPTj9udWxsOnQuZXhlY3V0aW9uSW5kZXgpKSkpLHRoaXMuc3RpY2tUb0JvdHRvbW1vc3RGcmFtZUluRm9jdXNlZEZpbGUkPXRoaXMuc3RvcmUucGlwZShSayhwWCkpLHRoaXMuc3RhY2tGcmFtZXNGb3JEaXNwbGF5JD10aGlzLnN0b3JlLnBpcGUoUmsoemsoYVgsZFgsKCh0LGUpPT57aWYobnVsbD09PXQpcmV0dXJuIG51bGw7Y29uc3Qgbj1bXTtmb3IoY29uc3QgbyBvZiB0KXtjb25zdHtob3N0X25hbWU6dCxmaWxlX3BhdGg6aSxsaW5lbm86YSxmdW5jdGlvbl9uYW1lOnJ9PW8scz1pLnNwbGl0KCIvIiksbD1udWxsIT09ZSYmdD09PWUuaG9zdF9uYW1lJiZpPT09ZS5maWxlX3BhdGg7bi5wdXNoKHtob3N0X25hbWU6dCxmaWxlX3BhdGg6aSxjb25jaXNlX2ZpbGVfcGF0aDpzW3MubGVuZ3RoLTFdLGxpbmVubzphLGZ1bmN0aW9uX25hbWU6cixiZWxvbmdzVG9Gb2N1c2VkRmlsZTpsLGZvY3VzZWQ6bCYmYT09PWUubGluZW5vfSl9cmV0dXJuIG59KSkpKX1vblNvdXJjZUxpbmVDbGlja2VkKHQpe2NvbnN0e2hvc3RfbmFtZTplLGZpbGVfcGF0aDpuLGxpbmVubzpvLGZ1bmN0aW9uX25hbWU6aX09dDt0aGlzLnN0b3JlLmRpc3BhdGNoKFFxKHtzdGFja0ZyYW1lOntob3N0X25hbWU6ZSxmaWxlX3BhdGg6bixsaW5lbm86byxmdW5jdGlvbl9uYW1lOml9fSkpfX1mdW5jdGlvbiBfSih0LGUpezEmdCYmd3UoMCwidGYtZGVidWdnZXItdjItaW5hY3RpdmUiKX1mdW5jdGlvbiBDSih0LGUpezEmdCYmKE91KDAsImRpdiIsMyksd3UoMSwidGYtZGVidWdnZXItdjItYWxlcnRzIiksT3UoMiwiZGl2Iiw0KSx3dSgzLCJ0Zi1kZWJ1Z2dlci12Mi10aW1lbGluZSIpLHd1KDQsInRmLWRlYnVnZ2VyLXYyLWdyYXBoIiksUHUoKSx3dSg1LCJ0Zi1kZWJ1Z2dlci12Mi1ncmFwaC1leGVjdXRpb25zIiksUHUoKSxPdSg2LCJkaXYiLDUpLHd1KDcsInRmLWRlYnVnZ2VyLXYyLXNvdXJjZS1maWxlcyIpLHd1KDgsInRmLWRlYnVnZ2VyLXYyLXN0YWNrLXRyYWNlIiksUHUoKSl9eUouybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHlKKShNdShFaykpfSx5Si7JtWNtcD1Vbyh7dHlwZTp5SixzZWxlY3RvcnM6W1sidGYtZGVidWdnZXItdjItc3RhY2stdHJhY2UiXV0sZGVjbHM6Nyx2YXJzOjE4LGNvbnN0czpbWzMsImNvZGVMb2NhdGlvblR5cGUiLCJvcFR5cGUiLCJvcE5hbWUiLCJleGVjdXRpb25JbmRleCIsInN0aWNrVG9Cb3R0b21tb3N0RnJhbWVJbkZvY3VzZWRGaWxlIiwic3RhY2tGcmFtZXNGb3JEaXNwbGF5Iiwib25Tb3VyY2VMaW5lQ2xpY2tlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoT3UoMCwic3RhY2stdHJhY2UtY29tcG9uZW50IiwwKSxOdSgib25Tb3VyY2VMaW5lQ2xpY2tlZCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25Tb3VyY2VMaW5lQ2xpY2tlZChlKX0pKSxPYigxLCJhc3luYyIpLE9iKDIsImFzeW5jIiksT2IoMywiYXN5bmMiKSxPYig0LCJhc3luYyIpLE9iKDUsImFzeW5jIiksT2IoNiwiYXN5bmMiKSxQdSgpKSwyJmUmJnZ1KCJjb2RlTG9jYXRpb25UeXBlIixQYigxLDYsbi5jb2RlTG9jYXRpb25UeXBlJCkpKCJvcFR5cGUiLFBiKDIsOCxuLm9wVHlwZSQpKSgib3BOYW1lIixQYigzLDEwLG4ub3BOYW1lJCkpKCJleGVjdXRpb25JbmRleCIsUGIoNCwxMixuLmV4ZWN1dGlvbkluZGV4JCkpKCJzdGlja1RvQm90dG9tbW9zdEZyYW1lSW5Gb2N1c2VkRmlsZSIsUGIoNSwxNCxuLnN0aWNrVG9Cb3R0b21tb3N0RnJhbWVJbkZvY3VzZWRGaWxlJCkpKCJzdGFja0ZyYW1lc0ZvckRpc3BsYXkiLFBiKDYsMTYsbi5zdGFja0ZyYW1lc0ZvckRpc3BsYXkkKSl9LGRpcmVjdGl2ZXM6W2JKXSxwaXBlczpbTXZdLGVuY2Fwc3VsYXRpb246Mn0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoeUosW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoidGYtZGVidWdnZXItdjItc3RhY2stdHJhY2UiLHRlbXBsYXRlOidcbiAgICA8c3RhY2stdHJhY2UtY29tcG9uZW50XG4gICAgICBbY29kZUxvY2F0aW9uVHlwZV09ImNvZGVMb2NhdGlvblR5cGUkIHwgYXN5bmMiXG4gICAgICBbb3BUeXBlXT0ib3BUeXBlJCB8IGFzeW5jIlxuICAgICAgW29wTmFtZV09Im9wTmFtZSQgfCBhc3luYyJcbiAgICAgIFtleGVjdXRpb25JbmRleF09ImV4ZWN1dGlvbkluZGV4JCB8IGFzeW5jIlxuICAgICAgW3N0aWNrVG9Cb3R0b21tb3N0RnJhbWVJbkZvY3VzZWRGaWxlXT0iXG4gICAgICAgIHN0aWNrVG9Cb3R0b21tb3N0RnJhbWVJbkZvY3VzZWRGaWxlJCB8IGFzeW5jXG4gICAgICAiXG4gICAgICBbc3RhY2tGcmFtZXNGb3JEaXNwbGF5XT0ic3RhY2tGcmFtZXNGb3JEaXNwbGF5JCB8IGFzeW5jIlxuICAgICAgKG9uU291cmNlTGluZUNsaWNrZWQpPSJvblNvdXJjZUxpbmVDbGlja2VkKCRldmVudCkiXG4gICAgPjwvc3RhY2stdHJhY2UtY29tcG9uZW50PlxuICAnfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6RWt9XX0pLG51bGwpO2NsYXNzIE1Ke2NvbnN0cnVjdG9yKCl7dGhpcy5ydW5zPXt9LHRoaXMucnVuSWRzPVtdLHRoaXMuYWN0aXZlUnVuSWQ9bnVsbH19TUouybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fE1KKX0sTUouybVjbXA9VW8oe3R5cGU6TUosc2VsZWN0b3JzOltbImRlYnVnZ2VyLWNvbXBvbmVudCJdXSxpbnB1dHM6e3J1bnM6InJ1bnMiLHJ1bklkczoicnVuSWRzIixhY3RpdmVSdW5JZDoiYWN0aXZlUnVuSWQifSxkZWNsczo0LHZhcnM6Mixjb25zdHM6W1sxLCJkZWJ1Z2dlci1jb250YWluZXIiXSxbNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJkYXRhQXZhaWxhYmxlIiwiIl0sWzEsInRvcC1zZWN0aW9uIl0sWzEsInRvcC1jZW50ZXItc2VjdGlvbiJdLFsxLCJib3R0b20tc2VjdGlvbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7aWYoMSZlJiYoT3UoMCwiZGl2IiwwKSxXbSgxLF9KLDEsMCwidGYtZGVidWdnZXItdjItaW5hY3RpdmUiLDEpLFdtKDIsQ0osOSwwLCJuZy10ZW1wbGF0ZSIsbnVsbCwyLEtiKSxQdSgpKSwyJmUpe2NvbnN0IHQ9R20oMyk7SmMoMSksdnUoIm5nSWYiLDA9PT1uLnJ1bklkcy5sZW5ndGgpKCJuZ0lmRWxzZSIsdCl9fSxkaXJlY3RpdmVzOlthdixNcSxoWCxtSyxBSyxWSyxlSix5Sl0sc3R5bGVzOlsnLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEycHg7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtYmFkZ2Utc21hbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6OXB4fS5tYXQtYmFkZ2UtbGFyZ2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweH0ubWF0LWgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1oZWFkbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMjRweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNnB4LzI4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNXB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC44MykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtaDZbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuNjcpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWJvZHktc3Ryb25nW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjAgMCAxMnB4fS5tYXQtc21hbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDEycHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjMwMCAxMTJweC8xMTJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDVlbTttYXJnaW46MCAwIDU2cHh9Lm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDU2cHgvNTZweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDJlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDQ1cHgvNDhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDA1ZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAzNHB4LzQwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDY0cHh9Lm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcmFpc2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0cm9rZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mbGF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmFiW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1taW5pLWZhYltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWJ1dHRvbi10b2dnbGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhcmQtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjIwcHh9Lm1hdC1jYXJkLXN1YnRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2hlY2tib3hbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNoZWNrYm94LWxheW91dFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoZWNrYm94LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoyNHB4fS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtdHJhaWxpbmctaWNvbi5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtcmVtb3ZlLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MThweH0ubWF0LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1oZWFkZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2VsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9vdGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2FsZW5kYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhbGVuZGFyLWJvZHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxM3B4fS5tYXQtY2FsZW5kYXItYm9keS1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FsZW5kYXItcGVyaW9kLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo0MDB9Lm1hdC1kaWFsb2ctdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjEyNTtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE1MCU7bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS41ZW07d2lkdGg6MS41ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNWVtIDA7Ym9yZGVyLXRvcDouODQzNzVlbSBzb2xpZCB0cmFuc3BhcmVudH0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6LTAuODQzNzVlbTtwYWRkaW5nLXRvcDouODQzNzVlbX0ubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo3NSU7bWFyZ2luLXRvcDouNjY2NjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjc5MTY2NjY2NjdlbSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNDM3NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMnB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjNlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM1MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjI4MTI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDouNTQxNjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjY2NjY2NjY2NjdlbSl9QG1lZGlhIHByaW50ey5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMmVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMWVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTJlbSkgc2NhbGUoMC43NSl9fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi4yNWVtIDAgLjc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMDkzNzVlbTttYXJnaW4tdG9wOi0wLjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjFlbSAwIDFlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS44NDM3NWVtO21hcmdpbi10b3A6LTAuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9aW5wdXQubWF0LWlucHV0LWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LTAuMDYyNWVtfS5tYXQtbWVudS1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtcGFnaW5hdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweH0ubWF0LXJhZGlvLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW19Lm1hdC1zbGlkZS10b2dnbGUtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdGVwcGVyLWhvcml6b250YWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXN0ZXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXN0ZXAtc3ViLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDpub3JtYWx9Lm1hdC1zdGVwLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LXN0ZXAtbGFiZWwtc2VsZWN0ZWRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRhYi1ncm91cFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdGFiLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10YWItbGlua1tfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowfS5tYXQtdG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB4O3BhZGRpbmctdG9wOjZweDtwYWRkaW5nLWJvdHRvbTo2cHh9Lm1hdC10b29sdGlwLWhhbmRzZXRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9Lm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE2cHh9Lm1hdC1vcHRncm91cC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1zaW1wbGUtc25hY2tiYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweH0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb25bX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjE7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo1MDB9Lm1hdC10cmVlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW5lc3RlZC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjQwMDtmb250LXNpemU6MTRweH0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmVtcHR5KXt0cmFuc2Zvcm06dHJhbnNsYXRlWigwKX0ubWF0LXJpcHBsZS5tYXQtcmlwcGxlLXVuYm91bmRlZFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItcmFkaXVzOjUwJTtwb2ludGVyLWV2ZW50czpub25lO3RyYW5zaXRpb246b3BhY2l0eSx0cmFuc2Zvcm0gMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpO3RyYW5zZm9ybTpzY2FsZSgwKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6bm9uZX0uY2RrLXZpc3VhbGx5LWhpZGRlbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjA7Y2xpcDpyZWN0KDAgMCAwIDApO2hlaWdodDoxcHg7bWFyZ2luOi0xcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwO291dGxpbmU6MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb2ludGVyLWV2ZW50czpub25lO3RvcDowO2xlZnQ6MDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTplbXB0eXtkaXNwbGF5Om5vbmV9LmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1wYW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czphdXRvO2JveC1zaXppbmc6Ym9yZGVyLWJveDt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O21heC13aWR0aDoxMDAlO21heC1oZWlnaHQ6MTAwJX0uY2RrLW92ZXJsYXktYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO3otaW5kZXg6MTAwMDtwb2ludGVyLWV2ZW50czphdXRvOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDt0cmFuc2l0aW9uOm9wYWNpdHkgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSk7b3BhY2l0eTowfS5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjF9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAuY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTouNn0uY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4zMil9LmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MH0uY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWluLXdpZHRoOjFweDttaW4taGVpZ2h0OjFweH0uY2RrLWdsb2JhbC1zY3JvbGxibG9ja1tfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7d2lkdGg6MTAwJTtvdmVyZmxvdy15OnNjcm9sbH1Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0e31Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZHt9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbHthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQgMHMgMW1zfS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOm5vdCg6LXdlYmtpdC1hdXRvZmlsbCl7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCAwcyAxbXN9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplW19uZ2NvbnRlbnQtJUNPTVAlXXtyZXNpemU6bm9uZX10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDphdXRvICFpbXBvcnRhbnQ7b3ZlcmZsb3c6aGlkZGVuICFpbXBvcnRhbnR9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZy1maXJlZm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDowICFpbXBvcnRhbnR9Lm1hdC1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtbWRjLWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9LmJvdHRvbS1zZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyLXRvcDoxcHggc29saWQgI2ViZWJlYjtkaXNwbGF5OmZsZXg7ZmxleC1ncm93OjE7aGVpZ2h0OjM0JTtwYWRkaW5nLXRvcDo2cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmJvdHRvbS1zZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmJvdHRvbS1zZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItdG9wOjFweCBzb2xpZCAjNTU1fS5kZWJ1Z2dlci1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JveC1zaXppbmc6Ym9yZGVyLWJveDtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59LnRvcC1zZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpmbGV4O2ZsZXgtZ3JvdzoxO2hlaWdodDo2NiU7cGFkZGluZzo2cHggMH10Zi1kZWJ1Z2dlci12Mi1hbGVydHNbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yaWdodDoxcHggc29saWQgI2ViZWJlYjtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6MTBweDttaW4td2lkdGg6MTYwcHg7d2lkdGg6Y2FsYygxNSUgLSAxMXB4KX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICB0Zi1kZWJ1Z2dlci12Mi1hbGVydHNbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICB0Zi1kZWJ1Z2dlci12Mi1hbGVydHNbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yaWdodDoxcHggc29saWQgIzU1NX10Zi1kZWJ1Z2dlci12Mi1ncmFwaC1leGVjdXRpb25zW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9jaztmbGV4LWdyb3c6MTttaW4td2lkdGg6NTQwcHg7d2lkdGg6NTQwcHh9dGYtZGVidWdnZXItdjItc291cmNlLWZpbGVzW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MTAwJTt3aWR0aDo3MCV9dGYtZGVidWdnZXItdjItc3RhY2stdHJhY2VbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZsZXgtZ3JvdzoxO2hlaWdodDoxMDAlO21pbi13aWR0aDo1NDBweDt3aWR0aDo1NDBweH0udG9wLWNlbnRlci1zZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9jaztvdmVyZmxvdzphdXRvO3dpZHRoOjU1JX10Zi1kZWJ1Z2dlci12Mi10aW1lbGluZVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpibG9ja310Zi1kZWJ1Z2dlci12Mi1ncmFwaFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgI2ViZWJlYjtkaXNwbGF5OmJsb2NrO21hcmdpbi10b3A6NXB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIHRmLWRlYnVnZ2VyLXYyLWdyYXBoW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgdGYtZGVidWdnZXItdjItZ3JhcGhbX25nY29udGVudC0lQ09NUCVde2JvcmRlci10b3A6MXB4IHNvbGlkICM1NTV9J10sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKE1KLFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6ImRlYnVnZ2VyLWNvbXBvbmVudCIsdGVtcGxhdGVVcmw6Ii4vZGVidWdnZXJfY29tcG9uZW50Lm5nLmh0bWwiLHN0eWxlVXJsczpbIi4vZGVidWdnZXJfY29tcG9uZW50LmNzcyJdLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2h9XX1dLG51bGwse3J1bnM6W3t0eXBlOnlffV0scnVuSWRzOlt7dHlwZTp5X31dLGFjdGl2ZVJ1bklkOlt7dHlwZTp5X31dfSk7Y2xhc3Mgdkp7Y29uc3RydWN0b3IodCl7dGhpcy5zdG9yZT10LHRoaXMucnVucyQ9dGhpcy5zdG9yZS5waXBlKFJrKGhaKSksdGhpcy5ydW5zSWRzJD10aGlzLnN0b3JlLnBpcGUoUmsoemsoaFosKHQ9Pk9iamVjdC5rZXlzKHQpKSkpKSx0aGlzLmFjdGl2ZVJ1bklkJD10aGlzLnN0b3JlLnBpcGUoUmsoeVopKX1uZ09uSW5pdCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2godnEoKSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN0b3JlLmRpc3BhdGNoKHhxKCkpfX12Si7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8dkopKE11KEVrKSl9LHZKLsm1Y21wPVVvKHt0eXBlOnZKLHNlbGVjdG9yczpbWyJ0Zi1kZWJ1Z2dlci12MiJdXSxkZWNsczo0LHZhcnM6OSxjb25zdHM6W1szLCJydW5zIiwicnVuSWRzIiwiYWN0aXZlUnVuSWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKHd1KDAsImRlYnVnZ2VyLWNvbXBvbmVudCIsMCksT2IoMSwiYXN5bmMiKSxPYigyLCJhc3luYyIpLE9iKDMsImFzeW5jIikpLDImZSYmdnUoInJ1bnMiLFBiKDEsMyxuLnJ1bnMkKSkoInJ1bklkcyIsUGIoMiw1LG4ucnVuc0lkcyQpKSgiYWN0aXZlUnVuSWQiLFBiKDMsNyxuLmFjdGl2ZVJ1bklkJCkpfSxkaXJlY3RpdmVzOltNSl0scGlwZXM6W012XSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIH0iXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIodkosW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoidGYtZGVidWdnZXItdjIiLHRlbXBsYXRlOidcbiAgICA8ZGVidWdnZXItY29tcG9uZW50XG4gICAgICBbcnVuc109InJ1bnMkIHwgYXN5bmMiXG4gICAgICBbcnVuSWRzXT0icnVuc0lkcyQgfCBhc3luYyJcbiAgICAgIFthY3RpdmVSdW5JZF09ImFjdGl2ZVJ1bklkJCB8IGFzeW5jIlxuICAgID48L2RlYnVnZ2VyLWNvbXBvbmVudD5cbiAgJyxzdHlsZXM6WyJcbiAgICAgIDpob3N0IHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIH1cbiAgICAiXX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkVrfV19KSxudWxsKTtjb25zdCB4Sj0iZGVidWdnZXItdjIiO2Z1bmN0aW9uIE9KKHQsZSxuLG8saSl7aWYobjw9MHx8IU51bWJlci5pc0ludGVnZXIobikpdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBhZ2VTaXplOiAke259YCk7aWYoZT5vKXRocm93IG5ldyBFcnJvcihgZW5kIGluZGV4ICgke2V9KSBleGNlZWRzIHRvdGFsIG51bWJlciBvZiBpdGVtcyAoJHtvfSlgKTtpZihlLXQ+bil0aHJvdyBuZXcgRXJyb3IoImJlZ2luLWVuZCBzcGFuIGV4Y2VlZHMgcGFnZSBzaXplLCB3aGljaCBpcyBub3QgYWxsb3dlZCIpO2NvbnN0IGE9W10scj1NYXRoLmZsb29yKHQvbik7KCEociBpbiBpKXx8aVtyXTxuJiZyKm4raVtyXTxvKSYmYS5wdXNoKHIpO2NvbnN0IHM9TWF0aC5mbG9vcigoZS0xKS9uKTtyZXR1cm4gcyE9PXImJighKHMgaW4gaSl8fHMqbitpW3NdPGUmJmU8bykmJmEucHVzaChzKSxhfWNsYXNzIFBKe2NvbnN0cnVjdG9yKHQsZSxuKXt0aGlzLmFjdGlvbnMkPXQsdGhpcy5zdG9yZT1lLHRoaXMuZGF0YVNvdXJjZT1uLHRoaXMubG9hZERhdGEkPWdTKCgoKT0+e2NvbnN0IHQ9dGhpcy5sb2FkRGVidWdnZXJSdW5zKFd0KHRoaXMub25EZWJ1Z2dlckRhdGFQb2xsKCksdGhpcy5vbkNvcmVSZWxvYWQoKSkpLnBpcGUob24oKSksZT10aGlzLmxvYWRTb3VyY2VGaWxlTGlzdCh0KSxuPXRoaXMuY3JlYXRlTnVtRXhlY3V0aW9uTG9hZGVyKHQpLG89dGhpcy5jcmVhdGVOdW1BbGVydHNBbmRCcmVha2Rvd25Mb2FkZXIodCksaT10aGlzLm9uQWxlcnRUeXBlRm9jdXNlZCgpLGE9dGhpcy5mZXRjaEV4ZWN1dGlvbkRpZ2VzdHNGb3JBbGVydFR5cGVGb2N1cyhpKSxyPXRoaXMuY3JlYXRlSW5pdGlhbEV4ZWN1dGlvbkRldGVjdG9yKG4pLnBpcGUob24oKSkscz10aGlzLmNyZWF0ZUV4ZWN1dGlvbkRpZ2VzdExvYWRlcihXdCh0aGlzLm9uRXhlY3V0aW9uU2Nyb2xsKCksdGhpcy5jcmVhdGVJbml0aWFsRXhlY3V0aW9uRGlnZXN0KHIpLGEpKSxsPXRoaXMuY3JlYXRlRXhlY3V0aW9uRGF0YUFuZFN0YWNrRnJhbWVzTG9hZGVyKFd0KHRoaXMub25FeGVjdXRpb25EaWdlc3RGb2N1c2VkKCksci5waXBlKGtuKHRoaXMuc3RvcmUuc2VsZWN0KHlaKSx0aGlzLnN0b3JlLnNlbGVjdCh0WCkpLGh0KCgoWyx0LGVdKT0+KHthY3RpdmVSdW5JZDp0LGxvYWRlZEV4ZWN1dGlvbkRhdGE6ZSxmb2N1c0luZGV4OjB9KSkpKSkpO3JldHVybiBXdChvLHMsbCx0aGlzLmNyZWF0ZU51bUdyYXBoRXhlY3V0aW9uTG9hZGVyKHQpLGUsdGhpcy5vblNvdXJjZUZpbGVGb2N1c2VkKCksdGhpcy5sb2FkR3JhcGhFeGVjdXRpb25QYWdlcyh0aGlzLm9uR3JhcGhFeGVjdXRpb25TY3JvbGwoKSksdGhpcy5sb2FkR3JhcGhPcFN0YWNrRnJhbWVzKHRoaXMubG9hZEdyYXBoT3BJbmZvKCkpKS5waXBlKGh0KCgoKT0+KHt9KSkpKX0pLHtkaXNwYXRjaDohMX0pfW9uRGVidWdnZXJEYXRhUG9sbCgpe3JldHVybiB0aGlzLmFjdGlvbnMkLnBpcGUoeFModnEpLGRuKCh0PT4oZnVuY3Rpb24gZSh0LG4sbyl7cmV0dXJuIHQucGlwZSgoZnVuY3Rpb24gaSh0KXtyZXR1cm4gZT0+ZS5saWZ0KG5ldyB0bih0KSl9KSgodD0+dC5waXBlKGtuKG4pLChmdW5jdGlvbiBlKHQsbil7cmV0dXJuIG4/ZT0+bmV3IHhlKGUsbikubGlmdChuZXcgTWUodCkpOmU9PmUubGlmdChuZXcgTWUodCkpfSkoKChbLHRdKT0+WnQodCkpKSkpKSx1bihvKSxodCgoKCk9Pnt9KSkpfSkoWih0KSx0aGlzLnN0b3JlLnNlbGVjdChfWikucGlwZShodCgodD0+KGZ1bmN0aW9uIGUodCl7cmV0dXJuIHQ+NmU0PzZlNDp0PjRlMz90OjJlM30pKHQpKSkpLHRoaXMuYWN0aW9ucyQucGlwZSh4Uyh4cSkpKSkpLF9uKCgoKT0+dGhpcy5zdG9yZS5kaXNwYXRjaChPcSgpKSkpLGh0KCgoKT0+e30pKSl9b25Db3JlUmVsb2FkKCl7cmV0dXJuIFd0KHRoaXMuYWN0aW9ucyQucGlwZSh4UyhXRSxHRSkpLHRoaXMuYWN0aW9ucyQucGlwZSh4UyhWRSkpLnBpcGUoa24odGhpcy5zdG9yZS5zZWxlY3QoYlopKSxHdCgoKFssdF0pPT50LnN0YXRlPT09QkUuTk9UX0xPQURFRHx8dC5zdGF0ZT09PUJFLkZBSUxFRCYmbnVsbD09PXQubGFzdExvYWRlZFRpbWVJbk1zKSkpKS5waXBlKGtuKHRoaXMuc3RvcmUuc2VsZWN0KGRBKSksR3QoKChbLHRdKT0+dD09PXhKKSksX24oKCgpPT50aGlzLnN0b3JlLmRpc3BhdGNoKE9xKCkpKSksaHQoKCgpPT57fSkpKX1sb2FkRGVidWdnZXJSdW5zKHQpe3JldHVybiB0LnBpcGUoa24odGhpcy5zdG9yZS5zZWxlY3QoYlopKSxHdCgoKFsse3N0YXRlOnR9XSk9PnQhPT1CRS5MT0FESU5HKSksX24oKCgpPT50aGlzLnN0b3JlLmRpc3BhdGNoKFBxKCkpKSksVHQoKCgpPT50aGlzLmRhdGFTb3VyY2UuZmV0Y2hSdW5zKCkucGlwZShfbigodD0+e3RoaXMuc3RvcmUuZGlzcGF0Y2god3Eoe3J1bnM6dH0pKX0pKSxodCgoKCk9Pnt9KSkpKSkpfWNyZWF0ZU51bUV4ZWN1dGlvbkxvYWRlcih0KXtyZXR1cm4gdC5waXBlKGtuKHRoaXMuc3RvcmUuc2VsZWN0KGhaKSx0aGlzLnN0b3JlLnNlbGVjdChTWikpLEd0KCgoWyx0LGVdKT0+T2JqZWN0LmtleXModCkubGVuZ3RoPjAmJmUuc3RhdGUhPT1CRS5MT0FESU5HKSksX24oKCgpPT50aGlzLnN0b3JlLmRpc3BhdGNoKFJxKCkpKSksVHQoKChbLHRdKT0+e2NvbnN0IGU9T2JqZWN0LmtleXModClbMF07cmV0dXJuIHRoaXMuZGF0YVNvdXJjZS5mZXRjaEV4ZWN1dGlvbkRpZ2VzdHMoZSwwLDApLnBpcGUoX24oKHQ9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKFRxKHtudW1FeGVjdXRpb25zOnQubnVtX2RpZ2VzdHN9KSl9KSksaHQoKCgpPT57fSkpKX0pKSl9Y3JlYXRlTnVtR3JhcGhFeGVjdXRpb25Mb2FkZXIodCl7cmV0dXJuIHQucGlwZShrbih0aGlzLnN0b3JlLnNlbGVjdChoWiksdGhpcy5zdG9yZS5zZWxlY3QoelopKSxHdCgoKFssdCxlXSk9Pk9iamVjdC5rZXlzKHQpLmxlbmd0aD4wJiZlLnN0YXRlIT09QkUuTE9BRElORykpLF9uKCgoKT0+dGhpcy5zdG9yZS5kaXNwYXRjaChWcSgpKSkpLFR0KCgoWyx0XSk9Pntjb25zdCBlPU9iamVjdC5rZXlzKHQpWzBdO3JldHVybiB0aGlzLmRhdGFTb3VyY2UuZmV0Y2hHcmFwaEV4ZWN1dGlvbkRpZ2VzdHMoZSwwLDApLnBpcGUoX24oKHQ9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKGpxKHtudW1HcmFwaEV4ZWN1dGlvbnM6dC5udW1fZGlnZXN0c30pKX0pKSxodCgoKCk9Pnt9KSkpfSkpKX1jcmVhdGVOdW1BbGVydHNBbmRCcmVha2Rvd25Mb2FkZXIodCl7cmV0dXJuIHQucGlwZShrbih0aGlzLnN0b3JlLnNlbGVjdChoWiksdGhpcy5zdG9yZS5zZWxlY3QoTVopKSxHdCgoKFssdCxlXSk9Pk9iamVjdC5rZXlzKHQpLmxlbmd0aD4wJiZlLnN0YXRlIT09QkUuTE9BRElORykpLF9uKCgoKT0+dGhpcy5zdG9yZS5kaXNwYXRjaChTcSgpKSkpLFR0KCgoWyx0XSk9Pntjb25zdCBlPU9iamVjdC5rZXlzKHQpWzBdO3JldHVybiB0aGlzLmRhdGFTb3VyY2UuZmV0Y2hBbGVydHMoZSwwLDApLnBpcGUoX24oKHQ9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKERxKHtudW1BbGVydHM6dC5udW1fYWxlcnRzLGFsZXJ0c0JyZWFrZG93bjp0LmFsZXJ0c19icmVha2Rvd259KSl9KSksaHQoKCgpPT57fSkpKX0pKSl9Y3JlYXRlSW5pdGlhbEV4ZWN1dGlvbkRldGVjdG9yKHQpe3JldHVybiB0LnBpcGUoa24odGhpcy5zdG9yZS5zZWxlY3QoRVopLHRoaXMuc3RvcmUuc2VsZWN0KERaKSksR3QoKChbLHQsZV0pPT50PjAmJjA9PT1PYmplY3Qua2V5cyhlLnBhZ2VMb2FkZWRTaXplcykubGVuZ3RoKSksaHQoKCgpPT57fSkpKX1jcmVhdGVJbml0aWFsRXhlY3V0aW9uRGlnZXN0KHQpe3JldHVybiB0LnBpcGUoa24odGhpcy5zdG9yZS5zZWxlY3QoRVopLHRoaXMuc3RvcmUuc2VsZWN0KHlaKSx0aGlzLnN0b3JlLnNlbGVjdChSWikpLEd0KCgoWywsdF0pPT5udWxsIT09dCkpLGh0KCgoWyx0LGUsbl0pPT4oe2JlZ2luOjAsZW5kOk1hdGgubWluKHQsbikscnVuSWQ6ZX0pKSkpfW9uRXhlY3V0aW9uU2Nyb2xsKCl7cmV0dXJuIHRoaXMuYWN0aW9ucyQucGlwZSh4Uyh6cSxIcSxGcSksa24odGhpcy5zdG9yZS5zZWxlY3QoeVopLHRoaXMuc3RvcmUuc2VsZWN0KEFaKSx0aGlzLnN0b3JlLnNlbGVjdChFWiksdGhpcy5zdG9yZS5zZWxlY3QoVFopLHRoaXMuc3RvcmUuc2VsZWN0KFJaKSksR3QoKChbdF0pPT5udWxsIT09dCkpLGh0KCgoWyx0LGUsbixvLGldKT0+KHtydW5JZDp0LGJlZ2luOmUsZW5kOk1hdGgubWluKG4sZStvKSxwYWdlU2l6ZTppfSkpKSxrbih0aGlzLnN0b3JlLnNlbGVjdChEWikpLGh0KCgoW3QsZV0pPT4oe3Byb3BzOnQsbG9hZGVkOmUsbWlzc2luZ1BhZ2VzOk9KKHQuYmVnaW4sdC5lbmQsdC5wYWdlU2l6ZSxlLm51bUV4ZWN1dGlvbnMsZS5wYWdlTG9hZGVkU2l6ZXMpfSkpKSxHdCgoKHttaXNzaW5nUGFnZXM6dH0pPT50Lmxlbmd0aD4wKSksaHQoKCh7cHJvcHM6dCxsb2FkZWQ6ZSxtaXNzaW5nUGFnZXM6bn0pPT57Y29uc3R7cnVuSWQ6byxwYWdlU2l6ZTppfT10O3JldHVybntiZWdpbjpuWzBdKmksZW5kOk1hdGgubWluKGUubnVtRXhlY3V0aW9ucywobltuLmxlbmd0aC0xXSsxKSppKSxydW5JZDpvfX0pKSl9Y3JlYXRlRXhlY3V0aW9uRGlnZXN0TG9hZGVyKHQpe3JldHVybiB0LnBpcGUoa24odGhpcy5zdG9yZS5zZWxlY3QoRFopKSxHdCgoKFt7YmVnaW46dCxlbmQ6ZX0sbl0pPT5lPnQmJiEoZnVuY3Rpb24gbyh0LGUsbil7aWYoZT49bil0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGJlZ2luIHRvIGJlIGxlc3MgdGhhbiBlbmQsIGJ1dCBnb3QgYmVnaW49JHtlfSwgZW5kPSR7bn1gKTtyZXR1cm4tMSE9PXQuZmluZEluZGV4KCh0PT50LmJlZ2luPj1lJiZ0LmVuZDw9bikpfSkobi5sb2FkaW5nUmFuZ2VzLHQsZSkpKSxfbigoKFt7YmVnaW46dCxlbmQ6ZX1dKT0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goTnEoe2JlZ2luOnQsZW5kOmV9KSl9KSksVHQoKChbe3J1bklkOnQsYmVnaW46ZSxlbmQ6bn1dKT0+dGhpcy5kYXRhU291cmNlLmZldGNoRXhlY3V0aW9uRGlnZXN0cyh0LGUsbikucGlwZShfbigodD0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goSXEodCkpfSkpLGh0KCgoKT0+e30pKSkpKSl9b25FeGVjdXRpb25EaWdlc3RGb2N1c2VkKCl7cmV0dXJuIHRoaXMuYWN0aW9ucyQucGlwZSh4UyhMcSksa24odGhpcy5zdG9yZS5zZWxlY3QoeVopLHRoaXMuc3RvcmUuc2VsZWN0KHRYKSx0aGlzLnN0b3JlLnNlbGVjdChBWikpLGh0KCgoW3QsZSxuLG9dKT0+KHthY3RpdmVSdW5JZDplLGxvYWRlZEV4ZWN1dGlvbkRhdGE6bixmb2N1c0luZGV4Om8rdC5kaXNwbGF5SW5kZXh9KSkpKX1jcmVhdGVFeGVjdXRpb25EYXRhQW5kU3RhY2tGcmFtZXNMb2FkZXIodCl7cmV0dXJuIHQucGlwZShHdCgoKHthY3RpdmVSdW5JZDp0LGxvYWRlZEV4ZWN1dGlvbkRhdGE6ZSxmb2N1c0luZGV4Om59KT0+bnVsbCE9PXQmJm51bGwhPT1uJiZ2b2lkIDA9PT1lW25dKSksVHQoKCh7YWN0aXZlUnVuSWQ6dCxmb2N1c0luZGV4OmV9KT0+e2NvbnN0IG49ZSxvPW4rMTtyZXR1cm4gdGhpcy5kYXRhU291cmNlLmZldGNoRXhlY3V0aW9uRGF0YSh0LG4sbykucGlwZShfbigodD0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goQnEodCkpfSkpLGh0KCh0PT4oe2V4ZWN1dGlvbkRhdGE6dCxiZWdpbjpuLGVuZDpvfSkpKSl9KSksaHQoKCh7ZXhlY3V0aW9uRGF0YTp0fSk9PnQuZXhlY3V0aW9uc1swXSkpLGtuKHRoaXMuc3RvcmUuc2VsZWN0KHlaKSx0aGlzLnN0b3JlLnNlbGVjdChuWCkpLEd0KCgoW3QsZSxuXSk9PntpZihudWxsPT09ZSlyZXR1cm4hMTtmb3IoY29uc3QgZSBvZiB0LnN0YWNrX2ZyYW1lX2lkcylpZih2b2lkIDA9PT1uW2VdKXJldHVybiEwO3JldHVybiExfSkpLFR0KCgoW3QsZV0pPT57Y29uc3Qgbj10LnN0YWNrX2ZyYW1lX2lkcztyZXR1cm4gdGhpcy5kYXRhU291cmNlLmZldGNoU3RhY2tGcmFtZXMoZSxuKS5waXBlKF9uKCh0PT57Y29uc3QgZT17fTtmb3IobGV0IG89MDtvPG4ubGVuZ3RoOysrbyllW25bb11dPXQuc3RhY2tfZnJhbWVzW29dO3RoaXMuc3RvcmUuZGlzcGF0Y2goZVooe3N0YWNrRnJhbWVzOmV9KSl9KSksaHQoKCgpPT57fSkpKX0pKSl9b25HcmFwaEV4ZWN1dGlvblNjcm9sbCgpe3JldHVybiB0aGlzLmFjdGlvbnMkLnBpcGUoeFMoR3EpLGRlKDEwMCksa24odGhpcy5zdG9yZS5zZWxlY3QoeVopLHRoaXMuc3RvcmUuc2VsZWN0KEhaKSx0aGlzLnN0b3JlLnNlbGVjdChGWikpLEd0KCgoWyx0LGVdKT0+bnVsbCE9PXQmJmU+MCkpLGh0KCgoWyx0LGUsbl0pPT4oe3J1bklkOnQsbnVtR3JhcGhFeGVjdXRpb25zOmUsc2Nyb2xsQmVnaW5JbmRleDpufSkpKSxrbih0aGlzLnN0b3JlLnNlbGVjdChCWiksdGhpcy5zdG9yZS5zZWxlY3QoTFopLHRoaXMuc3RvcmUuc2VsZWN0KFZaKSx0aGlzLnN0b3JlLnNlbGVjdChqWikpLGh0KCgoW3tydW5JZDp0LG51bUdyYXBoRXhlY3V0aW9uczplLHNjcm9sbEJlZ2luSW5kZXg6bn0sbyxpLGEscl0pPT57bGV0IHM9T0oobixNYXRoLm1pbihuK2ksZSksbyxlLHIpO3JldHVybiBzPXMuZmlsdGVyKCh0PT4tMT09PWEuaW5kZXhPZih0KSkpLHtydW5JZDp0LG1pc3NpbmdQYWdlczpzLHBhZ2VTaXplOm8sbnVtR3JhcGhFeGVjdXRpb25zOmV9fSkpKX1sb2FkR3JhcGhFeGVjdXRpb25QYWdlcyh0KXtyZXR1cm4gdC5waXBlKEd0KCgoe21pc3NpbmdQYWdlczp0fSk9PnQubGVuZ3RoPjApKSxfbigoKHttaXNzaW5nUGFnZXM6dH0pPT57dC5mb3JFYWNoKCh0PT57dGhpcy5zdG9yZS5kaXNwYXRjaChVcSh7cGFnZUluZGV4OnR9KSl9KSl9KSksVHQoKCh7cnVuSWQ6dCxtaXNzaW5nUGFnZXM6ZSxwYWdlU2l6ZTpuLG51bUdyYXBoRXhlY3V0aW9uczpvfSk9Pntjb25zdCBpPWVbMF0qbixhPU1hdGgubWluKChlW2UubGVuZ3RoLTFdKzEpKm4sbyk7cmV0dXJuIHRoaXMuZGF0YVNvdXJjZS5mZXRjaEdyYXBoRXhlY3V0aW9uRGF0YSh0LGksYSkucGlwZShfbigodD0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goV3EodCkpfSkpLGh0KCgoKT0+e30pKSl9KSkpfWxvYWRHcmFwaE9wSW5mbygpe3JldHVybiB0aGlzLmFjdGlvbnMkLnBpcGUoeFMocXEsWXEpLGtuKHRoaXMuc3RvcmUuc2VsZWN0KHlaKSx0aGlzLnN0b3JlLnNlbGVjdChlWCkpLEd0KCgoW3QsZSxuXSk9Pntjb25zdHtncmFwaF9pZDpvLG9wX25hbWU6aX09dDtyZXR1cm4hKG51bGw9PT1lfHx2b2lkIDAhPT1uW29dJiZuW29dLmhhcyhpKSYmKG5bb10uZ2V0KGkpPT09QkUuTE9BRElOR3x8bltvXS5nZXQoaSk9PT1CRS5MT0FERUQpKX0pKSxfbigoKFt7Z3JhcGhfaWQ6dCxvcF9uYW1lOmV9XSk9PnRoaXMuc3RvcmUuZGlzcGF0Y2goWnEoe2dyYXBoX2lkOnQsb3BfbmFtZTplfSkpKSksVHQoKChbdCxlXSk9Pntjb25zdHtncmFwaF9pZDpuLG9wX25hbWU6b309dDtyZXR1cm4gdGhpcy5kYXRhU291cmNlLmZldGNoR3JhcGhPcEluZm8oZSxuLG8pLnBpcGUoX24oKHQ9PnRoaXMuc3RvcmUuZGlzcGF0Y2goWHEoe2dyYXBoT3BJbmZvUmVzcG9uc2U6dH0pKSkpLGh0KCh0PT4oe3J1bklkOmUsc3RhY2tGcmFtZUlkczp0LnN0YWNrX2ZyYW1lX2lkc30pKSkpfSkpKX1sb2FkR3JhcGhPcFN0YWNrRnJhbWVzKHQpe3JldHVybiB0LnBpcGUoa24odGhpcy5zdG9yZS5zZWxlY3QoblgpKSxodCgoKFt7cnVuSWQ6dCxzdGFja0ZyYW1lSWRzOmV9LG5dKT0+KHtydW5JZDp0LG1pc3NpbmdTdGFja0ZyYW1lSWRzOmUuZmlsdGVyKCh0PT52b2lkIDA9PT1uW3RdKSl9KSkpLEd0KCgoe3J1bklkOnQsbWlzc2luZ1N0YWNrRnJhbWVJZHM6ZX0pPT5udWxsIT09dCYmZS5sZW5ndGg+MCkpLFR0KCgoe3J1bklkOnQsbWlzc2luZ1N0YWNrRnJhbWVJZHM6ZX0pPT50aGlzLmRhdGFTb3VyY2UuZmV0Y2hTdGFja0ZyYW1lcyh0LGUpLnBpcGUoX24oKHQ9Pntjb25zdCBuPXt9O2ZvcihsZXQgbz0wO288ZS5sZW5ndGg7KytvKW5bZVtvXV09dC5zdGFja19mcmFtZXNbb107dGhpcy5zdG9yZS5kaXNwYXRjaChlWih7c3RhY2tGcmFtZXM6bn0pKX0pKSxodCgoKCk9Pnt9KSkpKSkpfW9uQWxlcnRUeXBlRm9jdXNlZCgpe3JldHVybiB0aGlzLmFjdGlvbnMkLnBpcGUoeFMoQXEpLGtuKHRoaXMuc3RvcmUuc2VsZWN0KHlaKSx0aGlzLnN0b3JlLnNlbGVjdCh4WiksdGhpcy5zdG9yZS5zZWxlY3QoT1opLHRoaXMuc3RvcmUuc2VsZWN0KFBaKSx0aGlzLnN0b3JlLnNlbGVjdChNWikpLEd0KCgoWyx0LGUsbixvLGldKT0+bnVsbCE9PXQmJm51bGwhPT1lJiZuPjAmJihudWxsPT09b3x8T2JqZWN0LmtleXMobykubGVuZ3RoPG4pJiZpLnN0YXRlIT09QkUuTE9BRElORykpLF9uKCgoKT0+dGhpcy5zdG9yZS5kaXNwYXRjaChTcSgpKSkpLFR0KCgoWyx0LGVdKT0+dGhpcy5kYXRhU291cmNlLmZldGNoQWxlcnRzKHQsMCwtMSxlKSkpLF9uKCgoe251bV9hbGVydHM6dCxhbGVydHNfYnJlYWtkb3duOmUsYWxlcnRfdHlwZTpuLGJlZ2luOm8sZW5kOmksYWxlcnRzOmF9KT0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goRXEoe251bUFsZXJ0czp0LGFsZXJ0c0JyZWFrZG93bjplLGFsZXJ0VHlwZTpuLGJlZ2luOm8sZW5kOmksYWxlcnRzOmF9KSl9KSkpfWZldGNoRXhlY3V0aW9uRGlnZXN0c0ZvckFsZXJ0VHlwZUZvY3VzKHQpe3JldHVybiB0LnBpcGUoa24odGhpcy5zdG9yZS5zZWxlY3QoUlopLHRoaXMuc3RvcmUuc2VsZWN0KFRaKSx0aGlzLnN0b3JlLnNlbGVjdChFWiksdGhpcy5zdG9yZS5zZWxlY3QoRFopLHRoaXMuc3RvcmUuc2VsZWN0KHlaKSksaHQoKChbdCxlLG4sbyxpLGFdKT0+e2NvbnN0IHI9dC5hbGVydHNbMF0uZXhlY3V0aW9uX2luZGV4LHM9T0ooTWF0aC5tYXgoMCxyLU1hdGguZmxvb3Iobi8yKSksTWF0aC5taW4ocitNYXRoLmZsb29yKG4vMiksbyksZSxvLGkucGFnZUxvYWRlZFNpemVzKTtyZXR1cm4gMD09PXMubGVuZ3RoP3tydW5JZDphLGJlZ2luOjAsZW5kOjB9OntydW5JZDphLGJlZ2luOnNbMF0qZSxlbmQ6TWF0aC5taW4oaS5udW1FeGVjdXRpb25zLChzW3MubGVuZ3RoLTFdKzEpKmUpfX0pKSl9bG9hZFNvdXJjZUZpbGVMaXN0KHQpe3JldHVybiB0LnBpcGUoa24odGhpcy5zdG9yZS5zZWxlY3QoeVopLHRoaXMuc3RvcmUuc2VsZWN0KHNYKSksR3QoKChbLHQsZV0pPT5udWxsIT09dCYmZS5zdGF0ZSE9PUJFLkxPQURJTkcpKSxfbigoKCk9PnRoaXMuc3RvcmUuZGlzcGF0Y2goS3EoKSkpKSxUdCgoKFssdF0pPT50aGlzLmRhdGFTb3VyY2UuZmV0Y2hTb3VyY2VGaWxlTGlzdCh0KS5waXBlKF9uKCh0PT57Y29uc3QgZT1bXTt0LmZvckVhY2goKChbdCxuXSk9PntlLnB1c2goe2hvc3RfbmFtZTp0LGZpbGVfcGF0aDpufSl9KSksdGhpcy5zdG9yZS5kaXNwYXRjaChKcSh7c291cmNlRmlsZXM6ZX0pKX0pKSxodCgoKCk9Pnt9KSkpKSkpfW9uU291cmNlRmlsZUZvY3VzZWQoKXtyZXR1cm4gdGhpcy5hY3Rpb25zJC5waXBlKHhTKFFxKSxrbih0aGlzLnN0b3JlLnNlbGVjdCh5WiksdGhpcy5zdG9yZS5zZWxlY3QobFgpLHRoaXMuc3RvcmUuc2VsZWN0KGNYKSksaHQoKChbdCxlLG4sb10pPT4oe3J1bklkOmUsc3RhY2tGcmFtZTp0LnN0YWNrRnJhbWUsZmlsZUluZGV4Om4sZmlsZUNvbnRlbnQ6b30pKSksR3QoKCh7cnVuSWQ6dCxmaWxlQ29udGVudDplfSk9Pm51bGwhPT10JiZudWxsIT09ZSYmZS5sb2FkU3RhdGU9PT1CRS5OT1RfTE9BREVEKSksX24oKCh7c3RhY2tGcmFtZTp0fSk9PnRoaXMuc3RvcmUuZGlzcGF0Y2goJHEoe2hvc3RfbmFtZTp0Lmhvc3RfbmFtZSxmaWxlX3BhdGg6dC5maWxlX3BhdGh9KSkpKSxUdCgoKHtmaWxlSW5kZXg6dCxydW5JZDplfSk9PnRoaXMuZGF0YVNvdXJjZS5mZXRjaFNvdXJjZUZpbGUoZSx0KS5waXBlKF9uKCh0PT57dGhpcy5zdG9yZS5kaXNwYXRjaCh0Wih0KSl9KSksaHQoKCgpPT57fSkpKSkpKX19UEouybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFBKKSh1cyh2UyksdXMoRWspLHVzKHlxKSl9LFBKLsm1cHJvdj1sbyh7dG9rZW46UEosZmFjdG9yeTpQSi7JtWZhY30pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoUEosW3t0eXBlOkptfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOnZTfSx7dHlwZTpFa30se3R5cGU6eXF9XX0pLG51bGwpO2NsYXNzIHdKe313Si7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8d0opfSx3Si7JtW1vZD1abyh7dHlwZTp3Sn0pLHdKLsm1aW5qPWNvKHtpbXBvcnRzOltbQnZdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8od0ose2RlY2xhcmF0aW9uczpbZlgsaFhdLGltcG9ydHM6W0J2XSxleHBvcnRzOltoWF19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHdKLFt7dHlwZTprXyxhcmdzOlt7ZGVjbGFyYXRpb25zOltmWCxoWF0saW1wb3J0czpbQnZdLGV4cG9ydHM6W2hYXX1dfV0sbnVsbCxudWxsKTtjbGFzcyBrSnt9a0ouybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGtKKX0sa0ouybVtb2Q9Wm8oe3R5cGU6a0p9KSxrSi7JtWluaj1jbyh7aW1wb3J0czpbW0J2XV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKGtKLHtkZWNsYXJhdGlvbnM6W0VLLF9LLEFLXSxpbXBvcnRzOltCdl0sZXhwb3J0czpbQUtdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihrSixbe3R5cGU6a18sYXJnczpbe2RlY2xhcmF0aW9uczpbRUssX0ssQUtdLGltcG9ydHM6W0J2XSxleHBvcnRzOltBS119XX1dLG51bGwsbnVsbCk7Y2xhc3MgU0p7fVNKLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxTSil9LFNKLsm1bW9kPVpvKHt0eXBlOlNKfSksU0ouybVpbmo9Y28oe2ltcG9ydHM6W1tCdl1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhTSix7ZGVjbGFyYXRpb25zOltXWCxaWCxxWCxHWCxZWCxYWF0saW1wb3J0czpbQnZdLGV4cG9ydHM6W1hYXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoU0osW3t0eXBlOmtfLGFyZ3M6W3tkZWNsYXJhdGlvbnM6W1dYLFpYLHFYLEdYLFlYLFhYXSxpbXBvcnRzOltCdl0sZXhwb3J0czpbWFhdfV19XSxudWxsLG51bGwpO2NsYXNzIERKe31ESi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8REopfSxESi7JtW1vZD1abyh7dHlwZTpESn0pLERKLsm1aW5qPWNvKHtpbXBvcnRzOltbQnYsU0osaUZdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oREose2RlY2xhcmF0aW9uczpbQkssVktdLGltcG9ydHM6W0J2LFNKLGlGXSxleHBvcnRzOltWS119KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKERKLFt7dHlwZTprXyxhcmdzOlt7ZGVjbGFyYXRpb25zOltCSyxWS10saW1wb3J0czpbQnYsU0osaUZdLGV4cG9ydHM6W1ZLXX1dfV0sbnVsbCxudWxsKTtjbGFzcyBFSnt9RUouybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEVKKX0sRUouybVtb2Q9Wm8oe3R5cGU6RUp9KSxFSi7JtWluaj1jbyh7fSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhFSix7ZGVjbGFyYXRpb25zOltDcSxNcV0sZXhwb3J0czpbTXFdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihFSixbe3R5cGU6a18sYXJnczpbe2RlY2xhcmF0aW9uczpbQ3EsTXFdLGV4cG9ydHM6W01xXX1dfV0sbnVsbCxudWxsKTtjbGFzcyBBSnt9QUouybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEFKKX0sQUouybVtb2Q9Wm8oe3R5cGU6QUp9KSxBSi7JtWluaj1jbyh7fSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhBSix7ZGVjbGFyYXRpb25zOltxS10sZXhwb3J0czpbcUtdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihBSixbe3R5cGU6a18sYXJnczpbe2V4cG9ydHM6W3FLXSxkZWNsYXJhdGlvbnM6W3FLXX1dfV0sbnVsbCxudWxsKTtjb25zdCBSSj1bImNvZGVWaWV3ZXJDb250YWluZXIiXTtjbGFzcyBUSntjb25zdHJ1Y3Rvcigpe3RoaXMuZmlyc3RUZXh0PW51bGwsdGhpcy5zZWNvbmRUZXh0PW51bGwsdGhpcy5yZW5kZXJTaWRlQnlTaWRlPSEwLHRoaXMubW9uYWNvPW51bGwsdGhpcy5lZGl0b3I9bnVsbCx0aGlzLlJFU0laRV9ERUJPVU5DRV9JTlRFUlZBTF9NUz01MH1vblJlc2l6ZSgpe3RoaXMuZWRpdG9yJiZ0aGlzLmVkaXRvci5sYXlvdXQoKX1uZ09uQ2hhbmdlcyh0KXtpZighdGhpcy5tb25hY28pcmV0dXJuO2NvbnN0IGU9IXRoaXMuZWRpdG9yO2UmJih0aGlzLmVkaXRvcj10aGlzLm1vbmFjby5lZGl0b3IuY3JlYXRlRGlmZkVkaXRvcih0aGlzLmNvZGVWaWV3ZXJDb250YWluZXIubmF0aXZlRWxlbWVudCx7cmVhZE9ubHk6ITAsZm9udFNpemU6MTAsbWluaW1hcDp7ZW5hYmxlZDohMH0scmVuZGVyU2lkZUJ5U2lkZTp0aGlzLnJlbmRlclNpZGVCeVNpZGUsdGhlbWU6WUsodGhpcy51c2VEYXJrTW9kZSl9KSksKGV8fHQuZmlyc3RUZXh0fHx0LnNlY29uZFRleHQpJiZ0aGlzLmVkaXRvci5zZXRNb2RlbCh7b3JpZ2luYWw6dGhpcy5tb25hY28uZWRpdG9yLmNyZWF0ZU1vZGVsKHRoaXMuZmlyc3RUZXh0fHwiIiksbW9kaWZpZWQ6dGhpcy5tb25hY28uZWRpdG9yLmNyZWF0ZU1vZGVsKHRoaXMuc2Vjb25kVGV4dHx8IiIpfSksdC5yZW5kZXJTaWRlQnlTaWRlJiZ0aGlzLmVkaXRvci51cGRhdGVPcHRpb25zKHtyZW5kZXJTaWRlQnlTaWRlOnRoaXMucmVuZGVyU2lkZUJ5U2lkZX0pLHQudXNlRGFya01vZGUmJnRoaXMubW9uYWNvLmVkaXRvci5zZXRUaGVtZShZSyh0aGlzLnVzZURhcmtNb2RlKSl9fVRKLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxUSil9LFRKLsm1Y21wPVVvKHt0eXBlOlRKLHNlbGVjdG9yczpbWyJzb3VyY2UtY29kZS1kaWZmLWNvbXBvbmVudCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24gdChlLG4pe2lmKDEmZSYmV2IoUkosMyxjaCksMiZlKXtsZXQgdDtVYih0PVliKCkpJiYobi5jb2RlVmlld2VyQ29udGFpbmVyPXQuZmlyc3QpfX0saW5wdXRzOntmaXJzdFRleHQ6ImZpcnN0VGV4dCIsc2Vjb25kVGV4dDoic2Vjb25kVGV4dCIscmVuZGVyU2lkZUJ5U2lkZToicmVuZGVyU2lkZUJ5U2lkZSIsbW9uYWNvOiJtb25hY28iLHVzZURhcmtNb2RlOiJ1c2VEYXJrTW9kZSJ9LGZlYXR1cmVzOltTaV0sZGVjbHM6Mix2YXJzOjEsY29uc3RzOltbImRldGVjdFJlc2l6ZSIsIiIsMSwiY29kZS12aWV3ZXItY29udGFpbmVyIiwzLCJyZXNpemVFdmVudERlYm91bmNlUGVyaW9kSW5NcyIsIm9uUmVzaXplIl0sWyJjb2RlVmlld2VyQ29udGFpbmVyIiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihPdSgwLCJkaXYiLDAsMSksTnUoIm9uUmVzaXplIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uUmVzaXplKCl9KSksUHUoKSksMiZlJiZ2dSgicmVzaXplRXZlbnREZWJvdW5jZVBlcmlvZEluTXMiLG4uUkVTSVpFX0RFQk9VTkNFX0lOVEVSVkFMX01TKX0sZGlyZWN0aXZlczpbcUtdLHN0eWxlczpbIi5jb2RlLXZpZXdlci1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgfSJdLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihUSixbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJzb3VyY2UtY29kZS1kaWZmLWNvbXBvbmVudCIsdGVtcGxhdGU6J1xuICAgIDxkaXZcbiAgICAgICNjb2RlVmlld2VyQ29udGFpbmVyXG4gICAgICBjbGFzcz0iY29kZS12aWV3ZXItY29udGFpbmVyIlxuICAgICAgZGV0ZWN0UmVzaXplXG4gICAgICBbcmVzaXplRXZlbnREZWJvdW5jZVBlcmlvZEluTXNdPSJSRVNJWkVfREVCT1VOQ0VfSU5URVJWQUxfTVMiXG4gICAgICAob25SZXNpemUpPSJvblJlc2l6ZSgpIlxuICAgID48L2Rpdj5cbiAgJyxzdHlsZXM6WyJcbiAgICAgIC5jb2RlLXZpZXdlci1jb250YWluZXIge1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICB9XG4gICAgIl0sY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sbnVsbCx7Zmlyc3RUZXh0Olt7dHlwZTp5X31dLHNlY29uZFRleHQ6W3t0eXBlOnlffV0scmVuZGVyU2lkZUJ5U2lkZTpbe3R5cGU6eV99XSxtb25hY286W3t0eXBlOnlffV0sdXNlRGFya01vZGU6W3t0eXBlOnlffV0sY29kZVZpZXdlckNvbnRhaW5lcjpbe3R5cGU6RnIsYXJnczpbImNvZGVWaWV3ZXJDb250YWluZXIiLHtzdGF0aWM6ITAscmVhZDpjaH1dfV19KTtjbGFzcyBOSntjb25zdHJ1Y3Rvcigpe3RoaXMuZmlyc3RUZXh0PW51bGwsdGhpcy5zZWNvbmRUZXh0PW51bGwsdGhpcy5yZW5kZXJTaWRlQnlTaWRlPSEwLHRoaXMudXNlRGFya01vZGU9ITEsdGhpcy5tb25hY28kPW51bGx9bmdPbkluaXQoKXt0aGlzLm1vbmFjbyQ9UnQoR0soKSkucGlwZShodCgoKCk9PndpbmRvdy5tb25hY28pKSl9fU5KLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxOSil9LE5KLsm1Y21wPVVvKHt0eXBlOk5KLHNlbGVjdG9yczpbWyJzb3VyY2UtY29kZS1kaWZmIl1dLGlucHV0czp7Zmlyc3RUZXh0OiJmaXJzdFRleHQiLHNlY29uZFRleHQ6InNlY29uZFRleHQiLHJlbmRlclNpZGVCeVNpZGU6InJlbmRlclNpZGVCeVNpZGUiLHVzZURhcmtNb2RlOiJ1c2VEYXJrTW9kZSJ9LGRlY2xzOjIsdmFyczo3LGNvbnN0czpbWzMsImZpcnN0VGV4dCIsInNlY29uZFRleHQiLCJyZW5kZXJTaWRlQnlTaWRlIiwibW9uYWNvIiwidXNlRGFya01vZGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKHd1KDAsInNvdXJjZS1jb2RlLWRpZmYtY29tcG9uZW50IiwwKSxPYigxLCJhc3luYyIpKSwyJmUmJnZ1KCJmaXJzdFRleHQiLG4uZmlyc3RUZXh0KSgic2Vjb25kVGV4dCIsbi5zZWNvbmRUZXh0KSgicmVuZGVyU2lkZUJ5U2lkZSIsbi5yZW5kZXJTaWRlQnlTaWRlKSgibW9uYWNvIixQYigxLDUsbi5tb25hY28kKSkoInVzZURhcmtNb2RlIixuLnVzZURhcmtNb2RlKX0sZGlyZWN0aXZlczpbVEpdLHBpcGVzOltNdl0sc3R5bGVzOlsic291cmNlLWNvZGUtZGlmZi1jb21wb25lbnRbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoTkosW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3Rvcjoic291cmNlLWNvZGUtZGlmZiIsdGVtcGxhdGU6J1xuICAgIDxzb3VyY2UtY29kZS1kaWZmLWNvbXBvbmVudFxuICAgICAgW2ZpcnN0VGV4dF09ImZpcnN0VGV4dCJcbiAgICAgIFtzZWNvbmRUZXh0XT0ic2Vjb25kVGV4dCJcbiAgICAgIFtyZW5kZXJTaWRlQnlTaWRlXT0icmVuZGVyU2lkZUJ5U2lkZSJcbiAgICAgIFttb25hY29dPSJtb25hY28kIHwgYXN5bmMiXG4gICAgICBbdXNlRGFya01vZGVdPSJ1c2VEYXJrTW9kZSJcbiAgICA+PC9zb3VyY2UtY29kZS1kaWZmLWNvbXBvbmVudD5cbiAgJyxzdHlsZXM6WyJcbiAgICAgIHNvdXJjZS1jb2RlLWRpZmYtY29tcG9uZW50IHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIH1cbiAgICAiXSxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSxudWxsLHtmaXJzdFRleHQ6W3t0eXBlOnlffV0sc2Vjb25kVGV4dDpbe3R5cGU6eV99XSxyZW5kZXJTaWRlQnlTaWRlOlt7dHlwZTp5X31dLHVzZURhcmtNb2RlOlt7dHlwZTp5X31dfSk7Y2xhc3MgSUp7fUlKLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxJSil9LElKLsm1bW9kPVpvKHt0eXBlOklKfSksSUouybVpbmo9Y28oe2ltcG9ydHM6W1tCdixBSl1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhJSix7ZGVjbGFyYXRpb25zOltYSyxLSyxUSixOSl0saW1wb3J0czpbQnYsQUpdLGV4cG9ydHM6W0tLLE5KXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoSUosW3t0eXBlOmtfLGFyZ3M6W3tkZWNsYXJhdGlvbnM6W1hLLEtLLFRKLE5KXSxpbXBvcnRzOltCdixBSl0sZXhwb3J0czpbS0ssTkpdfV19XSxudWxsLG51bGwpO2NsYXNzIHpKe316Si7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8ekopfSx6Si7JtW1vZD1abyh7dHlwZTp6Sn0pLHpKLsm1aW5qPWNvKHtpbXBvcnRzOltbQnYsSUpdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oekose2RlY2xhcmF0aW9uczpbdEosZUpdLGltcG9ydHM6W0J2LElKXSxleHBvcnRzOltlSl19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHpKLFt7dHlwZTprXyxhcmdzOlt7ZGVjbGFyYXRpb25zOlt0SixlSl0saW1wb3J0czpbQnYsSUpdLGV4cG9ydHM6W2VKXX1dfV0sbnVsbCxudWxsKTtjbGFzcyBISnt9SEouybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEhKKX0sSEouybVtb2Q9Wm8oe3R5cGU6SEp9KSxISi7JtWluaj1jbyh7aW1wb3J0czpbW0J2LElKXV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKEhKLHtkZWNsYXJhdGlvbnM6W2JKLHlKXSxpbXBvcnRzOltCdixJSl0sZXhwb3J0czpbeUpdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihISixbe3R5cGU6a18sYXJnczpbe2RlY2xhcmF0aW9uczpbYkoseUpdLGltcG9ydHM6W0J2LElKXSxleHBvcnRzOlt5Sl19XX1dLG51bGwsbnVsbCk7Y2xhc3MgRkp7fUZKLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxGSil9LEZKLsm1bW9kPVpvKHt0eXBlOkZKfSksRkouybVpbmo9Y28oe2ltcG9ydHM6W1tCdixTSl1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhGSix7ZGVjbGFyYXRpb25zOltlSyxvS10saW1wb3J0czpbQnYsU0pdLGV4cG9ydHM6W29LXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoRkosW3t0eXBlOmtfLGFyZ3M6W3tkZWNsYXJhdGlvbnM6W2VLLG9LXSxpbXBvcnRzOltCdixTSl0sZXhwb3J0czpbb0tdfV19XSxudWxsLG51bGwpO2NsYXNzIExKe31MSi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8TEopfSxMSi7JtW1vZD1abyh7dHlwZTpMSn0pLExKLsm1aW5qPWNvKHtpbXBvcnRzOltbQnYsRkosekgsUFhdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oTEose2RlY2xhcmF0aW9uczpbZEssbUtdLGltcG9ydHM6W0J2LEZKLHpILFBYXSxleHBvcnRzOlttS119KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKExKLFt7dHlwZTprXyxhcmdzOlt7ZGVjbGFyYXRpb25zOltkSyxtS10saW1wb3J0czpbQnYsRkosekgsUFhdLGV4cG9ydHM6W21LXX1dfV0sbnVsbCxudWxsKTtjbGFzcyBCSnt9QkouybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEJKKX0sQkouybVtb2Q9Wm8oe3R5cGU6Qkp9KSxCSi7JtWluaj1jbyh7aW1wb3J0czpbW3dKLEJ2LENBLERKLGtKLEVKLHpKLEhKLF9xLExKLGlTLmZvckZlYXR1cmUoblosZlopLExTLmZvckZlYXR1cmUoW1BKXSksYnEuZm9yUGx1Z2luKHhKLHZKKV1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhCSix7ZGVjbGFyYXRpb25zOltNSix2Sl0saW1wb3J0czpbd0osQnYsQ0EsREosa0osRUosekosSEosX3EsTEosb1MsRlMsYnFdLGV4cG9ydHM6W3ZKXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoQkosW3t0eXBlOmtfLGFyZ3M6W3tkZWNsYXJhdGlvbnM6W01KLHZKXSxpbXBvcnRzOlt3SixCdixDQSxESixrSixFSix6SixISixfcSxMSixpUy5mb3JGZWF0dXJlKG5aLGZaKSxMUy5mb3JGZWF0dXJlKFtQSl0pLGJxLmZvclBsdWdpbih4Six2SildLGV4cG9ydHM6W3ZKXSxlbnRyeUNvbXBvbmVudHM6W3ZKXX1dfV0sbnVsbCxudWxsKTtjb25zdCBWSj1XdygiW01ldHJpY3NdIE1ldHJpY3MgVGFnIE1ldGFkYXRhIFJlcXVlc3RlZCIpLGpKPVd3KCJbTWV0cmljc10gTWV0cmljcyBUYWcgTWV0YWRhdGEgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksVUo9V3coIltNZXRyaWNzXSBNZXRyaWNzIFRhZyBNZXRhZGF0YSBGYWlsZWQiKSxXSj1XdygiW01ldHJpY3NdIE1ldHJpY3MgU2V0dGluZ3MgQ2hhbmdlIFRvb2x0aXAiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KTtXdygiW01ldHJpY3NdIE1ldHJpY3MgU2V0dGluZ3MgVG9nZ2xlIFNob3cgRGF0YSBEb3dubG9hZCIpO2NvbnN0IEdKPVd3KCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5nIFRvZ2dsZSBJZ25vcmUgT3V0bGllciIpLFlKPVd3KCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5nIENoYW5nZSBYIEF4aXMgVHlwZSIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHFKPVd3KCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5nIENoYW5nZSBTY2FsYXIgU21vb3RoaW5nIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksWko9V3coIltNZXRyaWNzXSBNZXRyaWNzIFNldHRpbmcgUGFydGl0aW9uIE5vbiBNb25vdG9uaWMgWCBUb2dnbGVkIiksWEo9V3coIltNZXRyaWNzXSBNZXRyaWNzIFNldHRpbmcgQ2hhbmdlIEltYWdlIEJyaWdodG5lc3MiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxLSj1XdygiW01ldHJpY3NdIE1ldHJpY3MgU2V0dGluZyBDaGFuZ2UgSW1hZ2UgQ29udHJhc3QiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxKSj1XdygiW01ldHJpY3NdIEltYWdlIEJyaWdodG5lc3MgU2V0dGluZyBSZXNldCIpLFFKPVd3KCJbTWV0cmljc10gSW1hZ2UgQ29udHJhc3QgU2V0dGluZyBSZXNldCIpLCRKPVd3KCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5nIFRvZ2dsZSBJbWFnZSBTaG93IEFjdHVhbCBTaXplIiksdFE9V3coIltNZXRyaWNzXSBNZXRyaWNzIFNldHRpbmcgQ2hhbmdlIEhpc3RvZ3JhbSBNb2RlIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksZVE9V3coIltNZXRyaWNzXSBNdWx0aXBsZSBUaW1lIFNlcmllcyBSZXF1ZXN0ZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxuUT1XdygiW01ldHJpY3NdIEZldGNoIFRpbWUgU2VyaWVzIFJlcXVlc3QgRmFpbGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksb1E9V3coIltNZXRyaWNzXSBGZXRjaCBUaW1lIFNlcmllcyBSZXNwb25zZSBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxpUT1XdygiW01ldHJpY3NdIENhcmQgVmlzaWJpbGl0eSBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksYVE9V3coIltNZXRyaWNzXSBDYXJkIFN0ZXAgU2xpZGVyIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxyUT1XdygiW01ldHJpY3NdIFRhZyBGaWx0ZXIgQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHNRPVd3KCJbTWV0cmljc10gTWV0cmljcyBUYWcgR3JvdXAgRXhwYW5zaW9uIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxsUT1XdygiW01ldHJpY3NdIENhcmQgUGluIFN0YXRlIFRvZ2dsZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxjUT1XdygiW01ldHJpY3NdIExpbmtlZCBUaW1lIFNlbGVjdGlvbiBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksZFE9V3coIltNZXRyaWNzXSBMaW5rZWQgVGltZSBTZWxlY3Rpb24gQ2xlYXJlZCIpO2Z1bmN0aW9uIHBRKHQsZSl7Y29uc3Qgbj17fTtmb3IoY29uc3QgbyBvZiBPYmplY3Qua2V5cyh0KSluW29dPWUodFtvXSxvKTtyZXR1cm4gbn1mdW5jdGlvbiBtUSh0LGUsbil7Y29uc3R7cGx1Z2luOm8sdGFnOmkscnVuSWQ6YSxzYW1wbGU6cn09ZVt0XSxzPXBUKG4sbyxpLHIpO2lmKHMpe2lmKG51bGwhPT1hJiZzLnJ1blRvU2VyaWVzLmhhc093blByb3BlcnR5KGEpKXtjb25zdCB0PXMucnVuVG9TZXJpZXNbYV0ubGVuZ3RoO3JldHVybiB0PjA/dC0xOm51bGx9Y29uc3QgdD1PYmplY3QudmFsdWVzKHMucnVuVG9TZXJpZXMpLm1hcCgodD0+dC5sZW5ndGgpKTtpZih0Lmxlbmd0aClyZXR1cm4gTWF0aC5tYXgoLi4udCktMX1yZXR1cm4gbnVsbH1mdW5jdGlvbiB1USh0LGUsbixvKXtjb25zdCBpPU9iamVjdC5hc3NpZ24oe30sZSk7Zm9yKGNvbnN0IGEgaW4gdCl7aWYoIXQuaGFzT3duUHJvcGVydHkoYSkpY29udGludWU7Y29uc3Qgcj1tUShhLHQsbik7aWYobnVsbD09PXIpe2UuaGFzT3duUHJvcGVydHkoYSkmJihpW2FdPW51bGwpO2NvbnRpbnVlfWNvbnN0IHM9ZS5oYXNPd25Qcm9wZXJ0eShhKT9lW2FdOm51bGwsbD1tUShhLHQsbyksYz1udWxsIT09cyYmcz09PWwsZD1udWxsPT09c3x8YzsobnVsbCE9PXMmJnM+cnx8ZCkmJihpW2FdPXIpfXJldHVybiBpfWZ1bmN0aW9uIGZRKHQpe2NvbnN0IGU9cFEodC5ydW5Ub0xvYWRTdGF0ZSwodD0+dD09PUJFLkxPQURJTkc/QkUuTE9BRElORzpCRS5OT1RfTE9BREVEKSk7cmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7cnVuVG9Mb2FkU3RhdGU6ZX0pfWZ1bmN0aW9uIGdRKHQsZSxuLG8pe3JldHVybiBKU09OLnN0cmluZ2lmeShbdCxlLG58fCIiLG9dKX1jb25zdHtpbml0aWFsU3RhdGU6aFEscmVkdWNlcnM6YlF9PU9OKHt0YWdNZXRhZGF0YUxvYWRlZDpCRS5OT1RfTE9BREVELHRhZ01ldGFkYXRhOntzY2FsYXJzOnt0YWdEZXNjcmlwdGlvbnM6e30sdGFnVG9SdW5zOnt9fSxoaXN0b2dyYW1zOnt0YWdEZXNjcmlwdGlvbnM6e30sdGFnVG9SdW5zOnt9fSxpbWFnZXM6e3RhZ0Rlc2NyaXB0aW9uczp7fSx0YWdSdW5TYW1wbGVkSW5mbzp7fX19LGNhcmRMaXN0OltdLGNhcmRUb1Bpbm5lZENvcHk6bmV3IE1hcCxwaW5uZWRDYXJkVG9PcmlnaW5hbDpuZXcgTWFwLHVucmVzb2x2ZWRJbXBvcnRlZFBpbm5lZENhcmRzOltdLGNhcmRNZXRhZGF0YU1hcDp7fSxjYXJkU3RlcEluZGV4Ont9LHRhZ0ZpbHRlcjoiIix0YWdHcm91cEV4cGFuZGVkOm5ldyBNYXAsc2VsZWN0ZWRUaW1lOm51bGx9LHt0aW1lU2VyaWVzRGF0YTp7c2NhbGFyczp7fSxoaXN0b2dyYW1zOnt9LGltYWdlczp7fX0sc2V0dGluZ3M6Q1Qsc2V0dGluZ092ZXJyaWRlczp7fSx2aXNpYmxlQ2FyZHM6bmV3IFNldH0sKHQ9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7dmlzaWJsZUNhcmRzOm5ldyBTZXR9KSkpLHlRPWhRLF9RPW1TKGhRLHBTKHRELCgodCx7cm91dGVLaW5kOmUscGFydGlhbFN0YXRlOm59KT0+e2lmKGUhPT1qUy5FWFBFUklNRU5UJiZlIT09alMuQ09NUEFSRV9FWFBFUklNRU5UKXJldHVybiB0O2NvbnN0IG89bmV3IFNldDtmb3IoY29uc3QgZSBvZiB0LnBpbm5lZENhcmRUb09yaWdpbmFsLmtleXMoKSl7Y29uc3R7cGx1Z2luOm4sdGFnOmkscnVuSWQ6YSxzYW1wbGU6cn09dC5jYXJkTWV0YWRhdGFNYXBbZV07by5hZGQoZ1EobixpLGEscikpfWNvbnN0IGk9bixhPVtdO2Zvcihjb25zdCBlIG9mWy4uLnQudW5yZXNvbHZlZEltcG9ydGVkUGlubmVkQ2FyZHMsLi4uaS5tZXRyaWNzLnBpbm5lZENhcmRzXSl7Y29uc3QgdD1nUShlLnBsdWdpbixlLnRhZyxlLnJ1bklkLGUuc2FtcGxlKTtvLmhhcyh0KXx8KG8uYWRkKHQpLGEucHVzaChlKSl9Y29uc3Qgcj1oVChhLHQuY2FyZExpc3QsdC5jYXJkTWV0YWRhdGFNYXAsdC5jYXJkVG9QaW5uZWRDb3B5LHQucGlubmVkQ2FyZFRvT3JpZ2luYWwsdC5jYXJkU3RlcEluZGV4KSxzPWkubWV0cmljcy5zbW9vdGhpbmc7bGV0IGw9dC5zZXR0aW5nT3ZlcnJpZGVzO2lmKE51bWJlci5pc0Zpbml0ZShzKSYmbnVsbCE9PXMpe2NvbnN0IGU9TWF0aC5tYXgoMCxNYXRoLm1pbiguOTk5LE51bWJlcihzLnRvUHJlY2lzaW9uKDMpKSkpO2w9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuc2V0dGluZ092ZXJyaWRlcykse3NjYWxhclNtb290aGluZzplfSl9cmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHIpLHtzZXR0aW5nT3ZlcnJpZGVzOmx9KX0pKSxwUyhQUiwoKHQse3BhcnRpYWxTZXR0aW5nczplfSk9Pntjb25zdCBuPXt9O2lmKGUudG9vbHRpcFNvcnRTdHJpbmcpc3dpdGNoKGUudG9vbHRpcFNvcnRTdHJpbmcpe2Nhc2UgbFIuQVNDRU5ESU5HOm4udG9vbHRpcFNvcnQ9bFIuQVNDRU5ESU5HO2JyZWFrO2Nhc2UgbFIuREVTQ0VORElORzpuLnRvb2x0aXBTb3J0PWxSLkRFU0NFTkRJTkc7YnJlYWs7Y2FzZSBsUi5ERUZBVUxUOm4udG9vbHRpcFNvcnQ9bFIuREVGQVVMVDticmVhaztjYXNlIGxSLk5FQVJFU1Q6bi50b29sdGlwU29ydD1sUi5ORUFSRVNUfXJldHVybiJib29sZWFuIj09dHlwZW9mIGUuaWdub3JlT3V0bGllcnMmJihuLmlnbm9yZU91dGxpZXJzPWUuaWdub3JlT3V0bGllcnMpLCJudW1iZXIiPT10eXBlb2YgZS5zY2FsYXJTbW9vdGhpbmcmJihuLnNjYWxhclNtb290aGluZz1lLnNjYWxhclNtb290aGluZyksT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtzZXR0aW5nczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5zZXR0aW5ncyksbil9KX0pKSxwUyhHRSxXRSwodD0+e2NvbnN0IGU9dC50YWdNZXRhZGF0YUxvYWRlZD09PUJFLkxPQURJTkc/QkUuTE9BRElORzpCRS5OT1RfTE9BREVELG49cFEodC50aW1lU2VyaWVzRGF0YSwoKHQsZSk9PnBRKHQsKHQ9Pm1SKGUpP3BRKHQsKHQ9PmZRKHQpKSk6ZlEodCkpKSkpO3JldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3RhZ01ldGFkYXRhTG9hZGVkOmUsdGltZVNlcmllc0RhdGE6bn0pfSkpLHBTKFZKLCh0PT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3RhZ01ldGFkYXRhTG9hZGVkOkJFLkxPQURJTkd9KSkpLHBTKFVKLCh0PT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3RhZ01ldGFkYXRhTG9hZGVkOkJFLkZBSUxFRH0pKSkscFMoakosKCh0LHt0YWdNZXRhZGF0YTplfSk9Pntjb25zdCBuPXtzY2FsYXJzOk1RKGUsc1IuU0NBTEFSUyksaGlzdG9ncmFtczpNUShlLHNSLkhJU1RPR1JBTVMpLGltYWdlczplW3NSLklNQUdFU119LG89T2JqZWN0LmFzc2lnbih7fSx0LmNhcmRNZXRhZGF0YU1hcCksaT0oZnVuY3Rpb24gYSh0KXtjb25zdCBlPVtdO2ZvcihsZXQgbiBvZiBPYmplY3Qua2V5cyh0KSl7Y29uc3Qgbz1uO2xldCBpO2lmKG1SKG8pKXtpZighZlIobykpdGhyb3cgbmV3IEVycm9yKCJNdWx0aS1ydW4sIHNhbXBsZWQgcGx1Z2luIHN1cHBvcnQgbm90IHlldCBpbXBsZW1lbnRlZCIpO3tjb25zdCBuPXRbb10udGFnUnVuU2FtcGxlZEluZm87Zm9yKGNvbnN0IHQgb2YgT2JqZWN0LmtleXMobikpZm9yKGNvbnN0IGkgb2YgT2JqZWN0LmtleXMoblt0XSkpe2NvbnN0e21heFNhbXBsZXNQZXJTdGVwOmF9PW5bdF1baV07Zm9yKGxldCBuPTA7bjxhO24rKyllLnB1c2goe3BsdWdpbjpvLHRhZzp0LHJ1bklkOmksc2FtcGxlOm59KX19fWVsc2UgaWYoZlIobykpe2k9dFtvXS50YWdUb1J1bnM7Zm9yKGNvbnN0IHQgb2YgT2JqZWN0LmtleXMoaSkpZm9yKGNvbnN0IG4gb2YgaVt0XSllLnB1c2goe3BsdWdpbjpvLHRhZzp0LHJ1bklkOm59KX1lbHNle2k9dFtvXS50YWdUb1J1bnM7Zm9yKGNvbnN0IHQgb2YgT2JqZWN0LmtleXMoaSkpZS5wdXNoKHtwbHVnaW46byx0YWc6dCxydW5JZDpudWxsfSl9fXJldHVybiBlfSkobikscj1bXTtmb3IoY29uc3QgZSBvZiBpKXtjb25zdCBuPXVUKGUpO3QuY2FyZE1ldGFkYXRhTWFwLmhhc093blByb3BlcnR5KG4pfHwob1tuXT1lLHIucHVzaChuKSl9Y29uc3Qgcz1bLi4udC5jYXJkTGlzdCwuLi5yXSxsPWhUKHQudW5yZXNvbHZlZEltcG9ydGVkUGlubmVkQ2FyZHMscixvLHQuY2FyZFRvUGlubmVkQ29weSx0LnBpbm5lZENhcmRUb09yaWdpbmFsLHQuY2FyZFN0ZXBJbmRleCk7cmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLGwpLHt0YWdNZXRhZGF0YUxvYWRlZDpCRS5MT0FERUQsdGFnTWV0YWRhdGE6bixjYXJkTGlzdDpzfSl9KSkscFMoclEsKCh0LHt0YWdGaWx0ZXI6ZX0pPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3RhZ0ZpbHRlcjplfSkpKSxwUyhXSiwoKHQse3NvcnQ6ZX0pPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3NldHRpbmdPdmVycmlkZXM6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuc2V0dGluZ092ZXJyaWRlcykse3Rvb2x0aXBTb3J0OmV9KX0pKSkscFMoR0osKHQ9Pnt2YXIgZTtjb25zdCBuPSEobnVsbCE9PShlPXQuc2V0dGluZ092ZXJyaWRlcy5pZ25vcmVPdXRsaWVycykmJnZvaWQgMCE9PWU/ZTp0LnNldHRpbmdzLmlnbm9yZU91dGxpZXJzKTtyZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtzZXR0aW5nT3ZlcnJpZGVzOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LnNldHRpbmdPdmVycmlkZXMpLHtpZ25vcmVPdXRsaWVyczpufSl9KX0pKSxwUyhZSiwoKHQse3hBeGlzVHlwZTplfSk9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7c2V0dGluZ092ZXJyaWRlczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5zZXR0aW5nT3ZlcnJpZGVzKSx7eEF4aXNUeXBlOmV9KX0pKSkscFMocUosKCh0LHtzbW9vdGhpbmc6ZX0pPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3NldHRpbmdPdmVycmlkZXM6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuc2V0dGluZ092ZXJyaWRlcykse3NjYWxhclNtb290aGluZzplfSl9KSkpLHBTKFpKLCh0PT57dmFyIGU7Y29uc3Qgbj0hKG51bGwhPT0oZT10LnNldHRpbmdPdmVycmlkZXMuc2NhbGFyUGFydGl0aW9uTm9uTW9ub3RvbmljWCkmJnZvaWQgMCE9PWU/ZTp0LnNldHRpbmdzLnNjYWxhclBhcnRpdGlvbk5vbk1vbm90b25pY1gpO3JldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3NldHRpbmdPdmVycmlkZXM6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuc2V0dGluZ092ZXJyaWRlcykse3NjYWxhclBhcnRpdGlvbk5vbk1vbm90b25pY1g6bn0pfSl9KSkscFMoWEosKCh0LHticmlnaHRuZXNzSW5NaWxsaTplfSk9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7c2V0dGluZ092ZXJyaWRlczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5zZXR0aW5nT3ZlcnJpZGVzKSx7aW1hZ2VCcmlnaHRuZXNzSW5NaWxsaTplfSl9KSkpLHBTKEtKLCgodCx7Y29udHJhc3RJbk1pbGxpOmV9KT0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtzZXR0aW5nT3ZlcnJpZGVzOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LnNldHRpbmdPdmVycmlkZXMpLHtpbWFnZUNvbnRyYXN0SW5NaWxsaTplfSl9KSkpLHBTKEpKLCh0PT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3NldHRpbmdPdmVycmlkZXM6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuc2V0dGluZ092ZXJyaWRlcykse2ltYWdlQnJpZ2h0bmVzc0luTWlsbGk6dm9pZCAwfSl9KSkpLHBTKFFKLCh0PT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3NldHRpbmdPdmVycmlkZXM6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuc2V0dGluZ092ZXJyaWRlcykse2ltYWdlQ29udHJhc3RJbk1pbGxpOnZvaWQgMH0pfSkpKSxwUygkSiwodD0+e3ZhciBlO2NvbnN0IG49IShudWxsIT09KGU9dC5zZXR0aW5nT3ZlcnJpZGVzLmltYWdlU2hvd0FjdHVhbFNpemUpJiZ2b2lkIDAhPT1lP2U6dC5zZXR0aW5ncy5pbWFnZVNob3dBY3R1YWxTaXplKTtyZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtzZXR0aW5nT3ZlcnJpZGVzOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LnNldHRpbmdPdmVycmlkZXMpLHtpbWFnZVNob3dBY3R1YWxTaXplOm59KX0pfSkpLHBTKHRRLCgodCx7aGlzdG9ncmFtTW9kZTplfSk9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7c2V0dGluZ092ZXJyaWRlczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5zZXR0aW5nT3ZlcnJpZGVzKSx7aGlzdG9ncmFtTW9kZTplfSl9KSkpLHBTKGVRLCgodCx7cmVxdWVzdHM6ZX0pPT57aWYoIWUubGVuZ3RoKXJldHVybiB0O2NvbnN0IG49T2JqZWN0LmFzc2lnbih7fSx0LnRpbWVTZXJpZXNEYXRhKTtmb3IoY29uc3QgbyBvZiBlKXtjb25zdHtwbHVnaW46ZSx0YWc6aSxzYW1wbGU6YX09bztuW2VdPW1UKG4sZSxpLGEpO2NvbnN0IHI9cFQobixlLGksYSkscz1nUihvKT9bby5ydW5JZF06Z1QodC50YWdNZXRhZGF0YSxlLGksYSk7ci5ydW5Ub0xvYWRTdGF0ZT1mVChCRS5MT0FESU5HLHMsci5ydW5Ub0xvYWRTdGF0ZSl9cmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7dGltZVNlcmllc0RhdGE6bn0pfSkpLHBTKG5RLCgodCx7cmVxdWVzdDplfSk9Pntjb25zdCBuPU9iamVjdC5hc3NpZ24oe30sdC50aW1lU2VyaWVzRGF0YSkse3BsdWdpbjpvLHRhZzppLHNhbXBsZTphfT1lO25bb109bVQobixvLGksYSk7Y29uc3Qgcj1wVChuLG8saSxhKSxzPWdSKGUpP1tlLnJ1bklkXTpnVCh0LnRhZ01ldGFkYXRhLG8saSxhKTtyZXR1cm4gci5ydW5Ub0xvYWRTdGF0ZT1mVChCRS5GQUlMRUQscyxyLnJ1blRvTG9hZFN0YXRlKSxPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3RpbWVTZXJpZXNEYXRhOm59KX0pKSxwUyhvUSwoKHQse3Jlc3BvbnNlOmV9KT0+e2NvbnN0IG49T2JqZWN0LmFzc2lnbih7fSx0LnRpbWVTZXJpZXNEYXRhKSx7cGx1Z2luOm8sdGFnOmkscnVuSWQ6YSxzYW1wbGU6cn09ZTtuW29dPW1UKG4sbyxpLHIpO2NvbnN0IHM9cFQobixvLGkscik7aWYoYlIoZSkpe2NvbnN0IGU9YT9bYV06Z1QodC50YWdNZXRhZGF0YSxvLGkscik7cy5ydW5Ub0xvYWRTdGF0ZT1mVChCRS5GQUlMRUQsZSxzLnJ1blRvTG9hZFN0YXRlKX1lbHNle2NvbnN0IHQ9ZS5ydW5Ub1NlcmllcztzLnJ1blRvU2VyaWVzPU9iamVjdC5hc3NpZ24oe30scy5ydW5Ub1Nlcmllcykscy5ydW5Ub0xvYWRTdGF0ZT1PYmplY3QuYXNzaWduKHt9LHMucnVuVG9Mb2FkU3RhdGUpO2Zvcihjb25zdCBlIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShlKSYmKHMucnVuVG9TZXJpZXNbZV09dFtlXSxzLnJ1blRvTG9hZFN0YXRlW2VdPUJFLkxPQURFRCl9cmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7dGltZVNlcmllc0RhdGE6bixjYXJkU3RlcEluZGV4OnVRKHQuY2FyZE1ldGFkYXRhTWFwLHQuY2FyZFN0ZXBJbmRleCxuLHQudGltZVNlcmllc0RhdGEpfSl9KSkscFMoYVEsKCh0LHtjYXJkSWQ6ZSxzdGVwSW5kZXg6bn0pPT57Y29uc3Qgbz1tUShlLHQuY2FyZE1ldGFkYXRhTWFwLHQudGltZVNlcmllc0RhdGEpO2xldCBpPW47cmV0dXJuIG51bGw9PT1vP2k9bnVsbDpuPm8mJihpPW8pLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7Y2FyZFN0ZXBJbmRleDpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5jYXJkU3RlcEluZGV4KSx7W2VdOml9KX0pfSkpLHBTKHNRLCgodCx7dGFnR3JvdXA6ZX0pPT57Y29uc3Qgbj1uZXcgTWFwKHQudGFnR3JvdXBFeHBhbmRlZCk7cmV0dXJuIG4uc2V0KGUsIW4uZ2V0KGUpKSxPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3RhZ0dyb3VwRXhwYW5kZWQ6bn0pfSkpLHBTKGlRLCgodCx7ZW50ZXJlZENhcmRzOmUsZXhpdGVkQ2FyZHM6bn0pPT57aWYoMD09PWUuc2l6ZSYmMD09PW4uc2l6ZSlyZXR1cm4gdDtjb25zdCBvPW5ldyBTZXQodC52aXNpYmxlQ2FyZHMpO3JldHVybiBlLmZvckVhY2goKHQ9PntvLmFkZCh0KX0pKSxuLmZvckVhY2goKHQ9PntpZihvLmRlbGV0ZSh0KSxlLmhhcyh0KSl0aHJvdyBuZXcgRXJyb3IoIkEgJ2NhcmRWaXNpYmlsaXR5Q2hhbmdlZCcgd2l0aCBhbiBpbnZhbGlkIHBheWxvYWQgY29udGFpbnMgb3ZlcmxhcHBpbmcgc2V0cyIpfSkpLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7dmlzaWJsZUNhcmRzOm99KX0pKSxwUyhsUSwoKHQse2NhcmRJZDplfSk9Pntjb25zdCBuPXQucGlubmVkQ2FyZFRvT3JpZ2luYWwuaGFzKGUpLG89IW4mJiF0LmNhcmRUb1Bpbm5lZENvcHkuaGFzKGUpO2lmKG8mJiF5VCh0KSlyZXR1cm4gdDtsZXQgaT1uZXcgTWFwKHQuY2FyZFRvUGlubmVkQ29weSksYT1uZXcgTWFwKHQucGlubmVkQ2FyZFRvT3JpZ2luYWwpLHI9T2JqZWN0LmFzc2lnbih7fSx0LmNhcmRNZXRhZGF0YU1hcCkscz1PYmplY3QuYXNzaWduKHt9LHQuY2FyZFN0ZXBJbmRleCk7aWYobil7Y29uc3Qgbj10LnBpbm5lZENhcmRUb09yaWdpbmFsLmdldChlKTtpLmRlbGV0ZShuKSxhLmRlbGV0ZShlKSxkZWxldGUgcltlXSxkZWxldGUgc1tlXX1lbHNlIGlmKG8pe2NvbnN0IHQ9YlQoZSxpLGEscyxyKTtpPXQuY2FyZFRvUGlubmVkQ29weSxhPXQucGlubmVkQ2FyZFRvT3JpZ2luYWwscj10LmNhcmRNZXRhZGF0YU1hcCxzPXQuY2FyZFN0ZXBJbmRleH1lbHNle2NvbnN0IG49dC5jYXJkVG9QaW5uZWRDb3B5LmdldChlKTtpLmRlbGV0ZShlKSxhLmRlbGV0ZShuKSxkZWxldGUgcltuXSxkZWxldGUgc1tuXX1yZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtjYXJkTWV0YWRhdGFNYXA6cixjYXJkU3RlcEluZGV4OnMsY2FyZFRvUGlubmVkQ29weTppLHBpbm5lZENhcmRUb09yaWdpbmFsOmF9KX0pKSxwUyhjUSwoKHQsZSk9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7c2VsZWN0ZWRUaW1lOntzdGFydDp7c3RlcDplLnN0YXJ0U3RlcCx3YWxsVGltZTplLnN0YXJ0V2FsbFRpbWV9LGVuZDp2b2lkIDA9PT1lLmVuZFN0ZXB8fHZvaWQgMD09PWUuZW5kV2FsbFRpbWU/bnVsbDp7c3RlcDplLmVuZFN0ZXAsd2FsbFRpbWU6ZS5lbmRXYWxsVGltZX19fSkpKSxwUyhkUSwodD0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtzZWxlY3RlZFRpbWU6bnVsbH0pKSkpO2Z1bmN0aW9uIENRKHQsZSl7cmV0dXJuIFNOKF9RLGJRKSh0LGUpfWZ1bmN0aW9uIE1RKHQsZSl7cmV0dXJue3RhZ0Rlc2NyaXB0aW9uczp0W2VdLnRhZ0Rlc2NyaXB0aW9ucyx0YWdUb1J1bnM6dlEodFtlXS5ydW5UYWdJbmZvKX19ZnVuY3Rpb24gdlEodCl7Y29uc3QgZT17fTtmb3IoY29uc3QgbiBpbiB0KWZvcihjb25zdCBvIG9mIHRbbl0pZVtvXT1bLi4uZVtvXXx8W10sbl07cmV0dXJuIGV9Y29uc3QgeFE9emsoT1Qsa1QsKCh0LGUsbik9PmU/T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHtsb2FkU3RhdGU6dCxpZDpufSk6bnVsbCkpLE9RPVd3KCJbTWV0cmljcyBFZmZlY3RzXSBJbml0Iik7Y2xhc3MgUFF7Y29uc3RydWN0b3IodCxlLG4pe3RoaXMuYWN0aW9ucyQ9dCx0aGlzLnN0b3JlPWUsdGhpcy5kYXRhU291cmNlPW4sdGhpcy5kYXNoYm9hcmRTaG93bldpdGhvdXREYXRhJD10aGlzLmFjdGlvbnMkLnBpcGUoeFMoT1EsVkUsb0QpLGtuKHRoaXMuc3RvcmUuc2VsZWN0KGRBKSx0aGlzLnN0b3JlLnNlbGVjdCh2VCkpLEd0KCgoWyx0LGVdKT0+dD09PWRSJiZlPT09QkUuTk9UX0xPQURFRCkpKSx0aGlzLnJlbG9hZFJlcXVlc3RlZFdoaWxlU2hvd24kPXRoaXMuYWN0aW9ucyQucGlwZSh4UyhHRSxXRSksa24odGhpcy5zdG9yZS5zZWxlY3QoZEEpKSxHdCgoKFssdF0pPT50PT09ZFIpKSksdGhpcy5sb2FkVGFnTWV0YWRhdGEkPVd0KHRoaXMuZGFzaGJvYXJkU2hvd25XaXRob3V0RGF0YSQsdGhpcy5yZWxvYWRSZXF1ZXN0ZWRXaGlsZVNob3duJCkucGlwZShrbih0aGlzLnN0b3JlLnNlbGVjdCh2VCksdGhpcy5zdG9yZS5zZWxlY3QoeEQpKSxHdCgoKFssdCxlXSk9PnQhPT1CRS5MT0FESU5HJiZudWxsIT09ZSkpLF9uKCgoKT0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goVkooKSl9KSksZG4oKChbLCx0XSk9PnRoaXMuZGF0YVNvdXJjZS5mZXRjaFRhZ01ldGFkYXRhKHQpLnBpcGUoX24oKHQ9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKGpKKHt0YWdNZXRhZGF0YTp0fSkpfSkpLHJlKCgoKT0+KHRoaXMuc3RvcmUuZGlzcGF0Y2goVUooKSksWihudWxsKSkpKSkpKSksdGhpcy52aXNpYmxlQ2FyZHNXaXRob3V0RGF0YUNoYW5nZWQkPXRoaXMuYWN0aW9ucyQucGlwZSh4UyhpUSksZG4oKCgpPT50aGlzLmdldFZpc2libGVDYXJkRmV0Y2hJbmZvcygpLnBpcGUoTmUoMSkpKSksaHQoKHQ9PnQuZmlsdGVyKCh0PT50LmxvYWRTdGF0ZT09PUJFLk5PVF9MT0FERUQpKSkpKSx0aGlzLnZpc2libGVDYXJkc1JlbG9hZGVkJD10aGlzLnJlbG9hZFJlcXVlc3RlZFdoaWxlU2hvd24kLnBpcGUoZG4oKCgpPT50aGlzLmdldFZpc2libGVDYXJkRmV0Y2hJbmZvcygpLnBpcGUoTmUoMSkpKSksaHQoKHQ9PnQuZmlsdGVyKCh0PT50LmxvYWRTdGF0ZSE9PUJFLkxPQURJTkcpKSkpKSx0aGlzLmxvYWRUaW1lU2VyaWVzJD1XdCh0aGlzLnZpc2libGVDYXJkc1dpdGhvdXREYXRhQ2hhbmdlZCQsdGhpcy52aXNpYmxlQ2FyZHNSZWxvYWRlZCQpLnBpcGUoR3QoKHQ9PnQubGVuZ3RoPjApKSxrbih0aGlzLnN0b3JlLnNlbGVjdCh4RCkucGlwZShHdCgodD0+bnVsbCE9PXQpKSkpLFR0KCgoW3QsZV0pPT50aGlzLmZldGNoVGltZVNlcmllc0ZvckNhcmRzKHQsZSkpKSksdGhpcy5kYXRhRWZmZWN0cyQ9Z1MoKCgpPT5XdCh0aGlzLmxvYWRUYWdNZXRhZGF0YSQsdGhpcy5sb2FkVGltZVNlcmllcyQpKSx7ZGlzcGF0Y2g6ITF9KX1uZ3J4T25Jbml0RWZmZWN0cygpe3JldHVybiBPUSgpfWdldFZpc2libGVDYXJkRmV0Y2hJbmZvcygpe3JldHVybiB0aGlzLnN0b3JlLnNlbGVjdChEVCkucGlwZShkbigodD0+dC5zaXplP0x0KFsuLi50XS5tYXAoKHQ9PnRoaXMuc3RvcmUuc2VsZWN0KHhRLHQpLnBpcGUoTmUoMSkpKSkpOlooW10pKSksaHQoKHQ9PnQuZmlsdGVyKEJvb2xlYW4pKSkpfWZldGNoVGltZVNlcmllcyh0KXtyZXR1cm4gdGhpcy5kYXRhU291cmNlLmZldGNoVGltZVNlcmllcyhbdF0pLnBpcGUoX24oKHQ9Pntjb25zdCBlPXQuZmlsdGVyKGJSKTtlLmxlbmd0aCYmY29uc29sZS5lcnJvcigiVGltZSBzZXJpZXMgcmVzcG9uc2UgY29udGFpbmVkIGVycm9yczoiLGUpLHRoaXMuc3RvcmUuZGlzcGF0Y2gob1Eoe3Jlc3BvbnNlOnRbMF19KSl9KSkscmUoKCgpPT4odGhpcy5zdG9yZS5kaXNwYXRjaChuUSh7cmVxdWVzdDp0fSkpLFoobnVsbCkpKSkpfWZldGNoVGltZVNlcmllc0ZvckNhcmRzKHQsZSl7cmV0dXJuIFoodC5tYXAoKHQ9Pntjb25zdHtwbHVnaW46bix0YWc6byxydW5JZDppLHNhbXBsZTphfT10O3JldHVybiBmUihuKT97cGx1Z2luOm4sdGFnOm8sc2FtcGxlOmEscnVuSWQ6aX06e3BsdWdpbjpuLHRhZzpvLHNhbXBsZTphLGV4cGVyaW1lbnRJZHM6ZX19KSkpLnBpcGUoX24oKHQ9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKGVRKHtyZXF1ZXN0czp0fSkpfSkpLFR0KCh0PT5XdCguLi50Lm1hcCgodD0+dGhpcy5mZXRjaFRpbWVTZXJpZXModCkpKSkpKSl9fVBRLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxQUSkodXModlMpLHVzKEVrKSx1cyhoUikpfSxQUS7JtXByb3Y9bG8oe3Rva2VuOlBRLGZhY3Rvcnk6UFEuybVmYWN9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFBRLFt7dHlwZTpKbX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTp2U30se3R5cGU6RWt9LHt0eXBlOmhSfV19KSxudWxsKTtjb25zdCB3UT1uZXcgTnIoIk1ldHJpY3MgU3RvcmUgQ29uZmlnIiksa1E9bmV3IE5yKCJNZXRyaWNzIEluaXRpYWwgU2V0dGluZ3MgQ29uZmlnIik7ZnVuY3Rpb24gU1EodCl7cmV0dXJuIHQ/e2luaXRpYWxTdGF0ZTpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30seVEpLHtzZXR0aW5nczp0fSl9Ontpbml0aWFsU3RhdGU6eVF9fXZhciBEUTshKGZ1bmN0aW9uKHQpe3QuQ0hFQ0tCT1g9ImNoZWNrYm94Iix0LlJVTl9OQU1FPSJydW5fbmFtZSIsdC5FWFBFUklNRU5UX05BTUU9ImV4cGVyaW1lbnRfbmFtZSIsdC5SVU5fQ09MT1I9InJ1bl9jb2xvciJ9KShEUXx8KERRPXt9KSk7Y29uc3QgRVE9RmsoeEEpLEFRPXprKEVRLCgodCxlKT0+e2NvbnN0IG49W107Zm9yKGNvbnN0IG8gb2YgZSl0LnNwZWNzW29dJiZuLnB1c2godC5zcGVjc1tvXS5ocGFyYW0uZGVmYXVsdEZpbHRlcnMpO3JldHVybiBHQShuKX0pKSxSUT16ayhBUSxFUSwoKHQsZSxuKT0+e3ZhciBvO2NvbnN0IGk9V0EobiksYT1lLmZpbHRlcnNbaV07cmV0dXJuIG5ldyBNYXAoWy4uLnQsLi4ubnVsbCE9PShvPW51bGw9PWE/dm9pZCAwOmEuaHBhcmFtcykmJnZvaWQgMCE9PW8/bzpbXV0pfSkpLFRRPXprKEVRLCgodCxlKT0+e2NvbnN0IG49W107Zm9yKGNvbnN0IG8gb2YgZSl0LnNwZWNzW29dJiZuLnB1c2godC5zcGVjc1tvXS5tZXRyaWMuZGVmYXVsdEZpbHRlcnMpO3JldHVybiBZQShuKX0pKSxOUT16ayhUUSxFUSwoKHQsZSxuKT0+e3ZhciBvO2NvbnN0IGk9V0EobiksYT1lLmZpbHRlcnNbaV07cmV0dXJuIG5ldyBNYXAoWy4uLnQsLi4ubnVsbCE9PShvPW51bGw9PWE/dm9pZCAwOmEubWV0cmljcykmJnZvaWQgMCE9PW8/bzpbXV0pfSkpLElRPXprKEVRLCgodCxlKT0+KGZ1bmN0aW9uIG4oLi4udCl7Y29uc3QgZT1uZXcgTWFwLG49bmV3IE1hcCxvPW5ldyBNYXAsaT1uZXcgTWFwLGE9W107Zm9yKGNvbnN0IHIgb2YgdCl7Zm9yKGNvbnN0IHQgb2Ygci5ocGFyYW1zKWlmKG4uaGFzKHQubmFtZSl8fG4uc2V0KHQubmFtZSxuZXcgU2V0KSxuLmdldCh0Lm5hbWUpLmFkZCh0LmRpc3BsYXlOYW1lKSxlLmhhcyh0Lm5hbWUpKXtjb25zdCBuPWUuZ2V0KHQubmFtZSksbz10O2lmKG4udHlwZSE9PW8udHlwZSYmYS5wdXNoKGBIcGFyYW0sICR7by5uYW1lfSwgdHlwZXMgaGF2ZSB0byBtYXRjaC4gR290OiAke24udHlwZX0gdnMuICR7by50eXBlfWApLG4uZG9tYWluLnR5cGU9PT1MQS5JTlRFUlZBTCYmby5kb21haW4udHlwZT09PUxBLklOVEVSVkFMKW4uZG9tYWluLm1pblZhbHVlPT09by5kb21haW4ubWluVmFsdWUmJm4uZG9tYWluLm1heFZhbHVlPT09by5kb21haW4ubWF4VmFsdWV8fGEucHVzaChgSHBhcmFtLCAke28ubmFtZX0sIGRvbWFpbnMgaGF2ZSB0byBtYXRjaC4gR290OiAke24uZG9tYWlufSB2cy4gJHtvLmRvbWFpbn1gKTtlbHNlIGlmKG4uZG9tYWluLnR5cGU9PT1MQS5ESVNDUkVURSYmby5kb21haW4udHlwZT09PUxBLkRJU0NSRVRFKXtjb25zdCB0PW5ldyBTZXQoWy4uLm4uZG9tYWluLnZhbHVlcywuLi5vLmRvbWFpbi52YWx1ZXNdKTtuLmRvbWFpbi52YWx1ZXMubGVuZ3RoPT09by5kb21haW4udmFsdWVzLmxlbmd0aCYmbi5kb21haW4udmFsdWVzLmxlbmd0aD09PXQuc2l6ZXx8YS5wdXNoKGBIcGFyYW0sICR7by5uYW1lfSwgZG9tYWlucyBoYXZlIHRvIG1hdGNoLiBHb3Q6ICR7bi5kb21haW59IHZzLiAke28uZG9tYWlufWApfWVsc2UgYS5wdXNoKGBIcGFyYW0sICR7by5uYW1lfSwgZG9tYWlucyBoYXZlIHRvIG1hdGNoLiBHb3Q6ICR7bi5kb21haW59IHZzLiAke28uZG9tYWlufWApfWVsc2UgZS5zZXQodC5uYW1lLE9iamVjdC5hc3NpZ24oe30sdCkpO2Zvcihjb25zdCB0IG9mIHIubWV0cmljcylpZihpLmhhcyh0LnRhZyl8fGkuc2V0KHQudGFnLG5ldyBTZXQpLGkuZ2V0KHQudGFnKS5hZGQodC5kaXNwbGF5TmFtZSksby5oYXModC50YWcpKXtjb25zdCBlPW8uZ2V0KHQudGFnKSxuPXQ7ZS5kYXRhc2V0VHlwZSE9PW4uZGF0YXNldFR5cGUmJmEucHVzaChgTWV0cmljLCAke24udGFnfSwgZGF0YXNldFR5cGVzIGhhdmUgdG8gbWF0Y2guIEdvdDogJHtlLmRhdGFzZXRUeXBlfSB2cy4gJHtuLmRhdGFzZXRUeXBlfWApfWVsc2Ugby5zZXQodC50YWcsT2JqZWN0LmFzc2lnbih7fSx0KSl9aWYoYS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKGBWYWxpZGF0aW9uIGVycm9yOlxuJHthLmpvaW4oIlxuIil9YCk7cmV0dXJue2hwYXJhbXM6Wy4uLmVdLm1hcCgoKFt0LGVdKT0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHtkaXNwbGF5TmFtZTpbLi4ubi5nZXQodCldLmpvaW4oIiBvciAiKX0pKSksbWV0cmljczpbLi4ub10ubWFwKCgoW3QsZV0pPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZSkse2Rpc3BsYXlOYW1lOlsuLi5pLmdldCh0KV0uam9pbigiIG9yICIpfSkpKX19KSguLi5lLmV4cGVyaW1lbnRJZHMubWFwKChlPT57Y29uc3Qgbj10LnNwZWNzW2VdO3JldHVybiBuP3tocGFyYW1zOm4uaHBhcmFtLnNwZWNzLG1ldHJpY3M6bi5tZXRyaWMuc3BlY3N9Om51bGx9KSkuZmlsdGVyKEJvb2xlYW4pKSkpLHpRPXt0b29sdGlwU3RhdGU6S3goInN0YXRlIixbdE8oImluaXRpYWwsIHZvaWQsIGhpZGRlbiIsJHgoe29wYWNpdHk6MCx0cmFuc2Zvcm06InNjYWxlKDApIn0pKSx0TygidmlzaWJsZSIsJHgoe3RyYW5zZm9ybToic2NhbGUoMSkifSkpLG5PKCIqID0+IHZpc2libGUiLEp4KCIyMDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKSIsZU8oWyR4KHtvcGFjaXR5OjAsdHJhbnNmb3JtOiJzY2FsZSgwKSIsb2Zmc2V0OjB9KSwkeCh7b3BhY2l0eTouNSx0cmFuc2Zvcm06InNjYWxlKDAuOTkpIixvZmZzZXQ6LjV9KSwkeCh7b3BhY2l0eToxLHRyYW5zZm9ybToic2NhbGUoMSkiLG9mZnNldDoxfSldKSkpLG5PKCIqID0+IGhpZGRlbiIsSngoIjEwMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpIiwkeCh7b3BhY2l0eTowfSkpKV0pfSxIUT12SSh7cGFzc2l2ZTohMH0pO2Z1bmN0aW9uIEZRKHQpe3JldHVybiBFcnJvcihgVG9vbHRpcCBwb3NpdGlvbiAiJHt0fSIgaXMgaW52YWxpZC5gKX1jb25zdCBMUT1uZXcgTnIoIm1hdC10b29sdGlwLXNjcm9sbC1zdHJhdGVneSIpLEJRPXtwcm92aWRlOkxRLGRlcHM6W0pGXSx1c2VGYWN0b3J5OmZ1bmN0aW9uIFZRKHQpe3JldHVybigpPT50LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbih7c2Nyb2xsVGhyb3R0bGU6MjB9KX19LGpRPW5ldyBOcigibWF0LXRvb2x0aXAtZGVmYXVsdC1vcHRpb25zIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbiBVUSgpe3JldHVybntzaG93RGVsYXk6MCxoaWRlRGVsYXk6MCx0b3VjaGVuZEhpZGVEZWxheToxNTAwfX19KTtjbGFzcyBXUXtjb25zdHJ1Y3Rvcih0LGUsbixvLGksYSxyLHMsbCxjLGQscCl7dGhpcy5fb3ZlcmxheT10LHRoaXMuX2VsZW1lbnRSZWY9ZSx0aGlzLl9zY3JvbGxEaXNwYXRjaGVyPW4sdGhpcy5fdmlld0NvbnRhaW5lclJlZj1vLHRoaXMuX25nWm9uZT1pLHRoaXMuX3BsYXRmb3JtPWEsdGhpcy5fYXJpYURlc2NyaWJlcj1yLHRoaXMuX2ZvY3VzTW9uaXRvcj1zLHRoaXMuX2Rpcj1jLHRoaXMuX2RlZmF1bHRPcHRpb25zPWQsdGhpcy5fcG9zaXRpb249ImJlbG93Iix0aGlzLl9kaXNhYmxlZD0hMSx0aGlzLl92aWV3SW5pdGlhbGl6ZWQ9ITEsdGhpcy5fcG9pbnRlckV4aXRFdmVudHNJbml0aWFsaXplZD0hMSx0aGlzLnNob3dEZWxheT10aGlzLl9kZWZhdWx0T3B0aW9ucy5zaG93RGVsYXksdGhpcy5oaWRlRGVsYXk9dGhpcy5fZGVmYXVsdE9wdGlvbnMuaGlkZURlbGF5LHRoaXMudG91Y2hHZXN0dXJlcz0iYXV0byIsdGhpcy5fbWVzc2FnZT0iIix0aGlzLl9wYXNzaXZlTGlzdGVuZXJzPVtdLHRoaXMuX2Rlc3Ryb3llZD1uZXcgeCx0aGlzLl9oYW5kbGVLZXlkb3duPXQ9Pnt0aGlzLl9pc1Rvb2x0aXBWaXNpYmxlKCkmJnQua2V5Q29kZT09PWVJJiYhYUkodCkmJih0LnByZXZlbnREZWZhdWx0KCksdC5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLl9uZ1pvbmUucnVuKCgoKT0+dGhpcy5oaWRlKDApKSkpfSx0aGlzLl9zY3JvbGxTdHJhdGVneT1sLGQmJihkLnBvc2l0aW9uJiYodGhpcy5wb3NpdGlvbj1kLnBvc2l0aW9uKSxkLnRvdWNoR2VzdHVyZXMmJih0aGlzLnRvdWNoR2VzdHVyZXM9ZC50b3VjaEdlc3R1cmVzKSksaS5ydW5PdXRzaWRlQW5ndWxhcigoKCk9PntlLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy5faGFuZGxlS2V5ZG93bil9KSl9Z2V0IHBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX3Bvc2l0aW9ufXNldCBwb3NpdGlvbih0KXt0IT09dGhpcy5fcG9zaXRpb24mJih0aGlzLl9wb3NpdGlvbj10LHRoaXMuX292ZXJsYXlSZWYmJih0aGlzLl91cGRhdGVQb3NpdGlvbigpLHRoaXMuX3Rvb2x0aXBJbnN0YW5jZSYmdGhpcy5fdG9vbHRpcEluc3RhbmNlLnNob3coMCksdGhpcy5fb3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpKSl9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfXNldCBkaXNhYmxlZCh0KXt0aGlzLl9kaXNhYmxlZD1ySSh0KSx0aGlzLl9kaXNhYmxlZD90aGlzLmhpZGUoMCk6dGhpcy5fc2V0dXBQb2ludGVyRW50ZXJFdmVudHNJZk5lZWRlZCgpfWdldCBtZXNzYWdlKCl7cmV0dXJuIHRoaXMuX21lc3NhZ2V9c2V0IG1lc3NhZ2UodCl7dGhpcy5fYXJpYURlc2NyaWJlci5yZW1vdmVEZXNjcmlwdGlvbih0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsdGhpcy5fbWVzc2FnZSwidG9vbHRpcCIpLHRoaXMuX21lc3NhZ2U9bnVsbCE9dD9TdHJpbmcodCkudHJpbSgpOiIiLCF0aGlzLl9tZXNzYWdlJiZ0aGlzLl9pc1Rvb2x0aXBWaXNpYmxlKCk/dGhpcy5oaWRlKDApOih0aGlzLl9zZXR1cFBvaW50ZXJFbnRlckV2ZW50c0lmTmVlZGVkKCksdGhpcy5fdXBkYXRlVG9vbHRpcE1lc3NhZ2UoKSx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKCk9Pnt0aGlzLl9hcmlhRGVzY3JpYmVyLmRlc2NyaWJlKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCx0aGlzLm1lc3NhZ2UsInRvb2x0aXAiKX0pKX0pKSl9Z2V0IHRvb2x0aXBDbGFzcygpe3JldHVybiB0aGlzLl90b29sdGlwQ2xhc3N9c2V0IHRvb2x0aXBDbGFzcyh0KXt0aGlzLl90b29sdGlwQ2xhc3M9dCx0aGlzLl90b29sdGlwSW5zdGFuY2UmJnRoaXMuX3NldFRvb2x0aXBDbGFzcyh0aGlzLl90b29sdGlwQ2xhc3MpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX3ZpZXdJbml0aWFsaXplZD0hMCx0aGlzLl9zZXR1cFBvaW50ZXJFbnRlckV2ZW50c0lmTmVlZGVkKCksdGhpcy5fZm9jdXNNb25pdG9yLm1vbml0b3IodGhpcy5fZWxlbWVudFJlZikucGlwZSh1bih0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKHQ9Pnt0PyJrZXlib2FyZCI9PT10JiZ0aGlzLl9uZ1pvbmUucnVuKCgoKT0+dGhpcy5zaG93KCkpKTp0aGlzLl9uZ1pvbmUucnVuKCgoKT0+dGhpcy5oaWRlKDApKSl9KSl9bmdPbkRlc3Ryb3koKXtjb25zdCB0PXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtjbGVhclRpbWVvdXQodGhpcy5fdG91Y2hzdGFydFRpbWVvdXQpLHRoaXMuX292ZXJsYXlSZWYmJih0aGlzLl9vdmVybGF5UmVmLmRpc3Bvc2UoKSx0aGlzLl90b29sdGlwSW5zdGFuY2U9bnVsbCksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLl9oYW5kbGVLZXlkb3duKSx0aGlzLl9wYXNzaXZlTGlzdGVuZXJzLmZvckVhY2goKChbZSxuXSk9Pnt0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZSxuLEhRKX0pKSx0aGlzLl9wYXNzaXZlTGlzdGVuZXJzLmxlbmd0aD0wLHRoaXMuX2Rlc3Ryb3llZC5uZXh0KCksdGhpcy5fZGVzdHJveWVkLmNvbXBsZXRlKCksdGhpcy5fYXJpYURlc2NyaWJlci5yZW1vdmVEZXNjcmlwdGlvbih0LHRoaXMubWVzc2FnZSwidG9vbHRpcCIpLHRoaXMuX2ZvY3VzTW9uaXRvci5zdG9wTW9uaXRvcmluZyh0KX1zaG93KHQ9dGhpcy5zaG93RGVsYXkpe2lmKHRoaXMuZGlzYWJsZWR8fCF0aGlzLm1lc3NhZ2V8fHRoaXMuX2lzVG9vbHRpcFZpc2libGUoKSYmIXRoaXMuX3Rvb2x0aXBJbnN0YW5jZS5fc2hvd1RpbWVvdXRJZCYmIXRoaXMuX3Rvb2x0aXBJbnN0YW5jZS5faGlkZVRpbWVvdXRJZClyZXR1cm47Y29uc3QgZT10aGlzLl9jcmVhdGVPdmVybGF5KCk7dGhpcy5fZGV0YWNoKCksdGhpcy5fcG9ydGFsPXRoaXMuX3BvcnRhbHx8bmV3IHNGKEdRLHRoaXMuX3ZpZXdDb250YWluZXJSZWYpLHRoaXMuX3Rvb2x0aXBJbnN0YW5jZT1lLmF0dGFjaCh0aGlzLl9wb3J0YWwpLmluc3RhbmNlLHRoaXMuX3Rvb2x0aXBJbnN0YW5jZS5hZnRlckhpZGRlbigpLnBpcGUodW4odGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgoKT0+dGhpcy5fZGV0YWNoKCkpKSx0aGlzLl9zZXRUb29sdGlwQ2xhc3ModGhpcy5fdG9vbHRpcENsYXNzKSx0aGlzLl91cGRhdGVUb29sdGlwTWVzc2FnZSgpLHRoaXMuX3Rvb2x0aXBJbnN0YW5jZS5zaG93KHQpfWhpZGUodD10aGlzLmhpZGVEZWxheSl7dGhpcy5fdG9vbHRpcEluc3RhbmNlJiZ0aGlzLl90b29sdGlwSW5zdGFuY2UuaGlkZSh0KX10b2dnbGUoKXt0aGlzLl9pc1Rvb2x0aXBWaXNpYmxlKCk/dGhpcy5oaWRlKCk6dGhpcy5zaG93KCl9X2lzVG9vbHRpcFZpc2libGUoKXtyZXR1cm4hIXRoaXMuX3Rvb2x0aXBJbnN0YW5jZSYmdGhpcy5fdG9vbHRpcEluc3RhbmNlLmlzVmlzaWJsZSgpfV9jcmVhdGVPdmVybGF5KCl7aWYodGhpcy5fb3ZlcmxheVJlZilyZXR1cm4gdGhpcy5fb3ZlcmxheVJlZjtjb25zdCB0PXRoaXMuX3Njcm9sbERpc3BhdGNoZXIuZ2V0QW5jZXN0b3JTY3JvbGxDb250YWluZXJzKHRoaXMuX2VsZW1lbnRSZWYpLGU9dGhpcy5fb3ZlcmxheS5wb3NpdGlvbigpLmZsZXhpYmxlQ29ubmVjdGVkVG8odGhpcy5fZWxlbWVudFJlZikud2l0aFRyYW5zZm9ybU9yaWdpbk9uKCIubWF0LXRvb2x0aXAiKS53aXRoRmxleGlibGVEaW1lbnNpb25zKCExKS53aXRoVmlld3BvcnRNYXJnaW4oOCkud2l0aFNjcm9sbGFibGVDb250YWluZXJzKHQpO3JldHVybiBlLnBvc2l0aW9uQ2hhbmdlcy5waXBlKHVuKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgodD0+e3RoaXMuX3Rvb2x0aXBJbnN0YW5jZSYmdC5zY3JvbGxhYmxlVmlld1Byb3BlcnRpZXMuaXNPdmVybGF5Q2xpcHBlZCYmdGhpcy5fdG9vbHRpcEluc3RhbmNlLmlzVmlzaWJsZSgpJiZ0aGlzLl9uZ1pvbmUucnVuKCgoKT0+dGhpcy5oaWRlKDApKSl9KSksdGhpcy5fb3ZlcmxheVJlZj10aGlzLl9vdmVybGF5LmNyZWF0ZSh7ZGlyZWN0aW9uOnRoaXMuX2Rpcixwb3NpdGlvblN0cmF0ZWd5OmUscGFuZWxDbGFzczoibWF0LXRvb2x0aXAtcGFuZWwiLHNjcm9sbFN0cmF0ZWd5OnRoaXMuX3Njcm9sbFN0cmF0ZWd5KCl9KSx0aGlzLl91cGRhdGVQb3NpdGlvbigpLHRoaXMuX292ZXJsYXlSZWYuZGV0YWNobWVudHMoKS5waXBlKHVuKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKCk9PnRoaXMuX2RldGFjaCgpKSksdGhpcy5fb3ZlcmxheVJlZn1fZGV0YWNoKCl7dGhpcy5fb3ZlcmxheVJlZiYmdGhpcy5fb3ZlcmxheVJlZi5oYXNBdHRhY2hlZCgpJiZ0aGlzLl9vdmVybGF5UmVmLmRldGFjaCgpLHRoaXMuX3Rvb2x0aXBJbnN0YW5jZT1udWxsfV91cGRhdGVQb3NpdGlvbigpe2NvbnN0IHQ9dGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKS5wb3NpdGlvblN0cmF0ZWd5LGU9dGhpcy5fZ2V0T3JpZ2luKCksbj10aGlzLl9nZXRPdmVybGF5UG9zaXRpb24oKTt0LndpdGhQb3NpdGlvbnMoW09iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlLm1haW4pLG4ubWFpbiksT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUuZmFsbGJhY2spLG4uZmFsbGJhY2spXSl9X2dldE9yaWdpbigpe2NvbnN0IHQ9IXRoaXMuX2Rpcnx8Imx0ciI9PXRoaXMuX2Rpci52YWx1ZSxlPXRoaXMucG9zaXRpb247bGV0IG47aWYoImFib3ZlIj09ZXx8ImJlbG93Ij09ZSluPXtvcmlnaW5YOiJjZW50ZXIiLG9yaWdpblk6ImFib3ZlIj09ZT8idG9wIjoiYm90dG9tIn07ZWxzZSBpZigiYmVmb3JlIj09ZXx8ImxlZnQiPT1lJiZ0fHwicmlnaHQiPT1lJiYhdCluPXtvcmlnaW5YOiJzdGFydCIsb3JpZ2luWToiY2VudGVyIn07ZWxzZSBpZigiYWZ0ZXIiPT1lfHwicmlnaHQiPT1lJiZ0fHwibGVmdCI9PWUmJiF0KW49e29yaWdpblg6ImVuZCIsb3JpZ2luWToiY2VudGVyIn07ZWxzZSBpZigidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKXRocm93IEZRKGUpO2NvbnN0e3g6byx5Oml9PXRoaXMuX2ludmVydFBvc2l0aW9uKG4ub3JpZ2luWCxuLm9yaWdpblkpO3JldHVybnttYWluOm4sZmFsbGJhY2s6e29yaWdpblg6byxvcmlnaW5ZOml9fX1fZ2V0T3ZlcmxheVBvc2l0aW9uKCl7Y29uc3QgdD0hdGhpcy5fZGlyfHwibHRyIj09dGhpcy5fZGlyLnZhbHVlLGU9dGhpcy5wb3NpdGlvbjtsZXQgbjtpZigiYWJvdmUiPT1lKW49e292ZXJsYXlYOiJjZW50ZXIiLG92ZXJsYXlZOiJib3R0b20ifTtlbHNlIGlmKCJiZWxvdyI9PWUpbj17b3ZlcmxheVg6ImNlbnRlciIsb3ZlcmxheVk6InRvcCJ9O2Vsc2UgaWYoImJlZm9yZSI9PWV8fCJsZWZ0Ij09ZSYmdHx8InJpZ2h0Ij09ZSYmIXQpbj17b3ZlcmxheVg6ImVuZCIsb3ZlcmxheVk6ImNlbnRlciJ9O2Vsc2UgaWYoImFmdGVyIj09ZXx8InJpZ2h0Ij09ZSYmdHx8ImxlZnQiPT1lJiYhdCluPXtvdmVybGF5WDoic3RhcnQiLG92ZXJsYXlZOiJjZW50ZXIifTtlbHNlIGlmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpdGhyb3cgRlEoZSk7Y29uc3R7eDpvLHk6aX09dGhpcy5faW52ZXJ0UG9zaXRpb24obi5vdmVybGF5WCxuLm92ZXJsYXlZKTtyZXR1cm57bWFpbjpuLGZhbGxiYWNrOntvdmVybGF5WDpvLG92ZXJsYXlZOml9fX1fdXBkYXRlVG9vbHRpcE1lc3NhZ2UoKXt0aGlzLl90b29sdGlwSW5zdGFuY2UmJih0aGlzLl90b29sdGlwSW5zdGFuY2UubWVzc2FnZT10aGlzLm1lc3NhZ2UsdGhpcy5fdG9vbHRpcEluc3RhbmNlLl9tYXJrRm9yQ2hlY2soKSx0aGlzLl9uZ1pvbmUub25NaWNyb3Rhc2tFbXB0eS5waXBlKE5lKDEpLHVuKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKCk9Pnt0aGlzLl90b29sdGlwSW5zdGFuY2UmJnRoaXMuX292ZXJsYXlSZWYudXBkYXRlUG9zaXRpb24oKX0pKSl9X3NldFRvb2x0aXBDbGFzcyh0KXt0aGlzLl90b29sdGlwSW5zdGFuY2UmJih0aGlzLl90b29sdGlwSW5zdGFuY2UudG9vbHRpcENsYXNzPXQsdGhpcy5fdG9vbHRpcEluc3RhbmNlLl9tYXJrRm9yQ2hlY2soKSl9X2ludmVydFBvc2l0aW9uKHQsZSl7cmV0dXJuImFib3ZlIj09PXRoaXMucG9zaXRpb258fCJiZWxvdyI9PT10aGlzLnBvc2l0aW9uPyJ0b3AiPT09ZT9lPSJib3R0b20iOiJib3R0b20iPT09ZSYmKGU9InRvcCIpOiJlbmQiPT09dD90PSJzdGFydCI6InN0YXJ0Ij09PXQmJih0PSJlbmQiKSx7eDp0LHk6ZX19X3NldHVwUG9pbnRlckVudGVyRXZlbnRzSWZOZWVkZWQoKXshdGhpcy5fZGlzYWJsZWQmJnRoaXMubWVzc2FnZSYmdGhpcy5fdmlld0luaXRpYWxpemVkJiYhdGhpcy5fcGFzc2l2ZUxpc3RlbmVycy5sZW5ndGgmJih0aGlzLl9wbGF0Zm9ybVN1cHBvcnRzTW91c2VFdmVudHMoKT90aGlzLl9wYXNzaXZlTGlzdGVuZXJzLnB1c2goWyJtb3VzZWVudGVyIiwoKT0+e3RoaXMuX3NldHVwUG9pbnRlckV4aXRFdmVudHNJZk5lZWRlZCgpLHRoaXMuc2hvdygpfV0pOiJvZmYiIT09dGhpcy50b3VjaEdlc3R1cmVzJiYodGhpcy5fZGlzYWJsZU5hdGl2ZUdlc3R1cmVzSWZOZWNlc3NhcnkoKSx0aGlzLl9wYXNzaXZlTGlzdGVuZXJzLnB1c2goWyJ0b3VjaHN0YXJ0IiwoKT0+e3RoaXMuX3NldHVwUG9pbnRlckV4aXRFdmVudHNJZk5lZWRlZCgpLGNsZWFyVGltZW91dCh0aGlzLl90b3VjaHN0YXJ0VGltZW91dCksdGhpcy5fdG91Y2hzdGFydFRpbWVvdXQ9c2V0VGltZW91dCgoKCk9PnRoaXMuc2hvdygpKSw1MDApfV0pKSx0aGlzLl9hZGRMaXN0ZW5lcnModGhpcy5fcGFzc2l2ZUxpc3RlbmVycykpfV9zZXR1cFBvaW50ZXJFeGl0RXZlbnRzSWZOZWVkZWQoKXtpZih0aGlzLl9wb2ludGVyRXhpdEV2ZW50c0luaXRpYWxpemVkKXJldHVybjt0aGlzLl9wb2ludGVyRXhpdEV2ZW50c0luaXRpYWxpemVkPSEwO2NvbnN0IHQ9W107aWYodGhpcy5fcGxhdGZvcm1TdXBwb3J0c01vdXNlRXZlbnRzKCkpdC5wdXNoKFsibW91c2VsZWF2ZSIsKCk9PnRoaXMuaGlkZSgpXSxbIndoZWVsIix0PT50aGlzLl93aGVlbExpc3RlbmVyKHQpXSk7ZWxzZSBpZigib2ZmIiE9PXRoaXMudG91Y2hHZXN0dXJlcyl7dGhpcy5fZGlzYWJsZU5hdGl2ZUdlc3R1cmVzSWZOZWNlc3NhcnkoKTtjb25zdCBlPSgpPT57Y2xlYXJUaW1lb3V0KHRoaXMuX3RvdWNoc3RhcnRUaW1lb3V0KSx0aGlzLmhpZGUodGhpcy5fZGVmYXVsdE9wdGlvbnMudG91Y2hlbmRIaWRlRGVsYXkpfTt0LnB1c2goWyJ0b3VjaGVuZCIsZV0sWyJ0b3VjaGNhbmNlbCIsZV0pfXRoaXMuX2FkZExpc3RlbmVycyh0KSx0aGlzLl9wYXNzaXZlTGlzdGVuZXJzLnB1c2goLi4udCl9X2FkZExpc3RlbmVycyh0KXt0LmZvckVhY2goKChbdCxlXSk9Pnt0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0LGUsSFEpfSkpfV9wbGF0Zm9ybVN1cHBvcnRzTW91c2VFdmVudHMoKXtyZXR1cm4hdGhpcy5fcGxhdGZvcm0uSU9TJiYhdGhpcy5fcGxhdGZvcm0uQU5EUk9JRH1fd2hlZWxMaXN0ZW5lcih0KXtpZih0aGlzLl9pc1Rvb2x0aXBWaXNpYmxlKCkpe2NvbnN0IGU9KHRoaXMuX2RvY3VtZW50fHxkb2N1bWVudCkuZWxlbWVudEZyb21Qb2ludCh0LmNsaWVudFgsdC5jbGllbnRZKSxuPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtlPT09bnx8bi5jb250YWlucyhlKXx8dGhpcy5oaWRlKCl9fV9kaXNhYmxlTmF0aXZlR2VzdHVyZXNJZk5lY2Vzc2FyeSgpe2NvbnN0IHQ9dGhpcy50b3VjaEdlc3R1cmVzO2lmKCJvZmYiIT09dCl7Y29uc3QgZT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsbj1lLnN0eWxlOygib24iPT09dHx8IklOUFVUIiE9PWUubm9kZU5hbWUmJiJURVhUQVJFQSIhPT1lLm5vZGVOYW1lKSYmKG4udXNlclNlbGVjdD1uLm1zVXNlclNlbGVjdD1uLndlYmtpdFVzZXJTZWxlY3Q9bi5Nb3pVc2VyU2VsZWN0PSJub25lIiksIm9uIiE9PXQmJmUuZHJhZ2dhYmxlfHwobi53ZWJraXRVc2VyRHJhZz0ibm9uZSIpLG4udG91Y2hBY3Rpb249Im5vbmUiLG4ud2Via2l0VGFwSGlnaGxpZ2h0Q29sb3I9InRyYW5zcGFyZW50In19fVdRLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxXUSkoTXUoSkYpLE11KGNoKSxNdShLSCksTXUoWGgpLE11KHRDKSxNdShmSSksTXUoekkpLE11KHB6KSxNdShMUSksTXUoTXosOCksTXUoalEsOCksTXUoVUMpKX0sV1EuybVkaXI9Sm8oe3R5cGU6V1Esc2VsZWN0b3JzOltbIiIsIm1hdFRvb2x0aXAiLCIiXV0saG9zdEF0dHJzOlsxLCJtYXQtdG9vbHRpcC10cmlnZ2VyIl0saW5wdXRzOntzaG93RGVsYXk6WyJtYXRUb29sdGlwU2hvd0RlbGF5Iiwic2hvd0RlbGF5Il0saGlkZURlbGF5OlsibWF0VG9vbHRpcEhpZGVEZWxheSIsImhpZGVEZWxheSJdLHRvdWNoR2VzdHVyZXM6WyJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsInRvdWNoR2VzdHVyZXMiXSxwb3NpdGlvbjpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsInBvc2l0aW9uIl0sZGlzYWJsZWQ6WyJtYXRUb29sdGlwRGlzYWJsZWQiLCJkaXNhYmxlZCJdLG1lc3NhZ2U6WyJtYXRUb29sdGlwIiwibWVzc2FnZSJdLHRvb2x0aXBDbGFzczpbIm1hdFRvb2x0aXBDbGFzcyIsInRvb2x0aXBDbGFzcyJdfSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0pLFdRLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6SkZ9LHt0eXBlOmNofSx7dHlwZTpLSH0se3R5cGU6WGh9LHt0eXBlOnRDfSx7dHlwZTpmSX0se3R5cGU6ekl9LHt0eXBlOnB6fSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbTFFdfV19LHt0eXBlOk16LGRlY29yYXRvcnM6W3t0eXBlOl9zfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbalFdfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltVQ119XX1dLFdRLnByb3BEZWNvcmF0b3JzPXtwb3NpdGlvbjpbe3R5cGU6eV8sYXJnczpbIm1hdFRvb2x0aXBQb3NpdGlvbiJdfV0sZGlzYWJsZWQ6W3t0eXBlOnlfLGFyZ3M6WyJtYXRUb29sdGlwRGlzYWJsZWQiXX1dLHNob3dEZWxheTpbe3R5cGU6eV8sYXJnczpbIm1hdFRvb2x0aXBTaG93RGVsYXkiXX1dLGhpZGVEZWxheTpbe3R5cGU6eV8sYXJnczpbIm1hdFRvb2x0aXBIaWRlRGVsYXkiXX1dLHRvdWNoR2VzdHVyZXM6W3t0eXBlOnlfLGFyZ3M6WyJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyJdfV0sbWVzc2FnZTpbe3R5cGU6eV8sYXJnczpbIm1hdFRvb2x0aXAiXX1dLHRvb2x0aXBDbGFzczpbe3R5cGU6eV8sYXJnczpbIm1hdFRvb2x0aXBDbGFzcyJdfV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoV1EsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoiW21hdFRvb2x0aXBdIixleHBvcnRBczoibWF0VG9vbHRpcCIsaG9zdDp7Y2xhc3M6Im1hdC10b29sdGlwLXRyaWdnZXIifX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkpGfSx7dHlwZTpjaH0se3R5cGU6S0h9LHt0eXBlOlhofSx7dHlwZTp0Q30se3R5cGU6Zkl9LHt0eXBlOnpJfSx7dHlwZTpwen0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W0xRXX1dfSx7dHlwZTpNeixkZWNvcmF0b3JzOlt7dHlwZTpfc31dfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W2pRXX1dfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbVUNdfV19XX0pLHtzaG93RGVsYXk6W3t0eXBlOnlfLGFyZ3M6WyJtYXRUb29sdGlwU2hvd0RlbGF5Il19XSxoaWRlRGVsYXk6W3t0eXBlOnlfLGFyZ3M6WyJtYXRUb29sdGlwSGlkZURlbGF5Il19XSx0b3VjaEdlc3R1cmVzOlt7dHlwZTp5XyxhcmdzOlsibWF0VG9vbHRpcFRvdWNoR2VzdHVyZXMiXX1dLHBvc2l0aW9uOlt7dHlwZTp5XyxhcmdzOlsibWF0VG9vbHRpcFBvc2l0aW9uIl19XSxkaXNhYmxlZDpbe3R5cGU6eV8sYXJnczpbIm1hdFRvb2x0aXBEaXNhYmxlZCJdfV0sbWVzc2FnZTpbe3R5cGU6eV8sYXJnczpbIm1hdFRvb2x0aXAiXX1dLHRvb2x0aXBDbGFzczpbe3R5cGU6eV8sYXJnczpbIm1hdFRvb2x0aXBDbGFzcyJdfV19KTtjbGFzcyBHUXtjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuX2NoYW5nZURldGVjdG9yUmVmPXQsdGhpcy5fYnJlYWtwb2ludE9ic2VydmVyPWUsdGhpcy5fdmlzaWJpbGl0eT0iaW5pdGlhbCIsdGhpcy5fY2xvc2VPbkludGVyYWN0aW9uPSExLHRoaXMuX29uSGlkZT1uZXcgeCx0aGlzLl9pc0hhbmRzZXQ9dGhpcy5fYnJlYWtwb2ludE9ic2VydmVyLm9ic2VydmUoIihtYXgtd2lkdGg6IDU5OS45OHB4KSBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCksIChtYXgtd2lkdGg6IDk1OS45OHB4KSBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIil9c2hvdyh0KXt0aGlzLl9oaWRlVGltZW91dElkJiYoY2xlYXJUaW1lb3V0KHRoaXMuX2hpZGVUaW1lb3V0SWQpLHRoaXMuX2hpZGVUaW1lb3V0SWQ9bnVsbCksdGhpcy5fY2xvc2VPbkludGVyYWN0aW9uPSEwLHRoaXMuX3Nob3dUaW1lb3V0SWQ9c2V0VGltZW91dCgoKCk9Pnt0aGlzLl92aXNpYmlsaXR5PSJ2aXNpYmxlIix0aGlzLl9zaG93VGltZW91dElkPW51bGwsdGhpcy5fbWFya0ZvckNoZWNrKCl9KSx0KX1oaWRlKHQpe3RoaXMuX3Nob3dUaW1lb3V0SWQmJihjbGVhclRpbWVvdXQodGhpcy5fc2hvd1RpbWVvdXRJZCksdGhpcy5fc2hvd1RpbWVvdXRJZD1udWxsKSx0aGlzLl9oaWRlVGltZW91dElkPXNldFRpbWVvdXQoKCgpPT57dGhpcy5fdmlzaWJpbGl0eT0iaGlkZGVuIix0aGlzLl9oaWRlVGltZW91dElkPW51bGwsdGhpcy5fbWFya0ZvckNoZWNrKCl9KSx0KX1hZnRlckhpZGRlbigpe3JldHVybiB0aGlzLl9vbkhpZGV9aXNWaXNpYmxlKCl7cmV0dXJuInZpc2libGUiPT09dGhpcy5fdmlzaWJpbGl0eX1uZ09uRGVzdHJveSgpe3RoaXMuX29uSGlkZS5jb21wbGV0ZSgpfV9hbmltYXRpb25TdGFydCgpe3RoaXMuX2Nsb3NlT25JbnRlcmFjdGlvbj0hMX1fYW5pbWF0aW9uRG9uZSh0KXtjb25zdCBlPXQudG9TdGF0ZTsiaGlkZGVuIiE9PWV8fHRoaXMuaXNWaXNpYmxlKCl8fHRoaXMuX29uSGlkZS5uZXh0KCksInZpc2libGUiIT09ZSYmImhpZGRlbiIhPT1lfHwodGhpcy5fY2xvc2VPbkludGVyYWN0aW9uPSEwKX1faGFuZGxlQm9keUludGVyYWN0aW9uKCl7dGhpcy5fY2xvc2VPbkludGVyYWN0aW9uJiZ0aGlzLmhpZGUoMCl9X21hcmtGb3JDaGVjaygpe3RoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfX1HUS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8R1EpKE11KEhoKSxNdShwTCkpfSxHUS7JtWNtcD1Vbyh7dHlwZTpHUSxzZWxlY3RvcnM6W1sibWF0LXRvb2x0aXAtY29tcG9uZW50Il1dLGhvc3RBdHRyczpbImFyaWEtaGlkZGVuIiwidHJ1ZSJdLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJk51KCJjbGljayIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5faGFuZGxlQm9keUludGVyYWN0aW9uKCl9KSwhMSxYbCkoImF1eGNsaWNrIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLl9oYW5kbGVCb2R5SW50ZXJhY3Rpb24oKX0pLCExLFhsKSwyJmUmJm9mKCJ6b29tIiwidmlzaWJsZSI9PT1uLl92aXNpYmlsaXR5PzE6bnVsbCl9LGRlY2xzOjMsdmFyczo3LGNvbnN0czpbWzEsIm1hdC10b29sdGlwIiwzLCJuZ0NsYXNzIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJihPdSgwLCJkaXYiLDApLE51KCJAc3RhdGUuc3RhcnQiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uX2FuaW1hdGlvblN0YXJ0KCl9KSkoIkBzdGF0ZS5kb25lIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5fYW5pbWF0aW9uRG9uZShlKX0pKSxPYigxLCJhc3luYyIpLE1mKDIpLFB1KCkpLDImZSl7bGV0IHQ9bnVsbDthZigibWF0LXRvb2x0aXAtaGFuZHNldCIsbnVsbD09KHQ9UGIoMSw1LG4uX2lzSGFuZHNldCkpP251bGw6dC5tYXRjaGVzKSx2dSgibmdDbGFzcyIsbi50b29sdGlwQ2xhc3MpKCJAc3RhdGUiLG4uX3Zpc2liaWxpdHkpLEpjKDIpLHZmKG4ubWVzc2FnZSl9fSxkaXJlY3RpdmVzOlt0dl0scGlwZXM6W012XSxzdHlsZXM6WyIubWF0LXRvb2x0aXAtcGFuZWx7cG9pbnRlci1ldmVudHM6bm9uZSAhaW1wb3J0YW50fS5tYXQtdG9vbHRpcHtjb2xvcjojZmZmO2JvcmRlci1yYWRpdXM6NHB4O21hcmdpbjoxNHB4O21heC13aWR0aDoyNTBweDtwYWRkaW5nLWxlZnQ6OHB4O3BhZGRpbmctcmlnaHQ6OHB4O292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC10b29sdGlwe291dGxpbmU6c29saWQgMXB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0e21hcmdpbjoyNHB4O3BhZGRpbmctbGVmdDoxNnB4O3BhZGRpbmctcmlnaHQ6MTZweH1cbiJdLGVuY2Fwc3VsYXRpb246MixkYXRhOnthbmltYXRpb246W3pRLnRvb2x0aXBTdGF0ZV19LGNoYW5nZURldGVjdGlvbjowfSksR1EuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpIaH0se3R5cGU6cEx9XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEdRLFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6Im1hdC10b29sdGlwLWNvbXBvbmVudCIsdGVtcGxhdGU6JzxkaXYgY2xhc3M9Im1hdC10b29sdGlwIlxuICAgICBbbmdDbGFzc109InRvb2x0aXBDbGFzcyJcbiAgICAgW2NsYXNzLm1hdC10b29sdGlwLWhhbmRzZXRdPSIoX2lzSGFuZHNldCB8IGFzeW5jKT8ubWF0Y2hlcyJcbiAgICAgW0BzdGF0ZV09Il92aXNpYmlsaXR5IlxuICAgICAoQHN0YXRlLnN0YXJ0KT0iX2FuaW1hdGlvblN0YXJ0KCkiXG4gICAgIChAc3RhdGUuZG9uZSk9Il9hbmltYXRpb25Eb25lKCRldmVudCkiPnt7bWVzc2FnZX19PC9kaXY+XG4nLGVuY2Fwc3VsYXRpb246UG8uTm9uZSxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNoLGFuaW1hdGlvbnM6W3pRLnRvb2x0aXBTdGF0ZV0saG9zdDp7IltzdHlsZS56b29tXSI6J192aXNpYmlsaXR5ID09PSAidmlzaWJsZSIgPyAxIDogbnVsbCcsIihib2R5OmNsaWNrKSI6InRoaXMuX2hhbmRsZUJvZHlJbnRlcmFjdGlvbigpIiwiKGJvZHk6YXV4Y2xpY2spIjoidGhpcy5faGFuZGxlQm9keUludGVyYWN0aW9uKCkiLCJhcmlhLWhpZGRlbiI6InRydWUifSxzdHlsZXM6WyIubWF0LXRvb2x0aXAtcGFuZWx7cG9pbnRlci1ldmVudHM6bm9uZSAhaW1wb3J0YW50fS5tYXQtdG9vbHRpcHtjb2xvcjojZmZmO2JvcmRlci1yYWRpdXM6NHB4O21hcmdpbjoxNHB4O21heC13aWR0aDoyNTBweDtwYWRkaW5nLWxlZnQ6OHB4O3BhZGRpbmctcmlnaHQ6OHB4O292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC10b29sdGlwe291dGxpbmU6c29saWQgMXB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0e21hcmdpbjoyNHB4O3BhZGRpbmctbGVmdDoxNnB4O3BhZGRpbmctcmlnaHQ6MTZweH1cbiJdfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6SGh9LHt0eXBlOnBMfV19KSxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIFlRe31mdW5jdGlvbiBxUSh0LGUpe2lmKDEmdCYmKE91KDAsIm1hdC1vcHRpb24iLDE5KSxNZigxKSxQdSgpKSwyJnQpe2NvbnN0IHQ9ZS4kaW1wbGljaXQ7dnUoInZhbHVlIix0KSxKYygxKSx4ZigiICIsdCwiICIpfX1mdW5jdGlvbiBaUSh0LGUpe2lmKDEmdCl7Y29uc3QgdD1FdSgpO091KDAsIm1hdC1mb3JtLWZpZWxkIiwxNiksT3UoMSwibWF0LXNlbGVjdCIsMTcpLE51KCJzZWxlY3Rpb25DaGFuZ2UiLChmdW5jdGlvbiBlKG4pe3JldHVybiByYSh0KSxMdSgyKS5fY2hhbmdlUGFnZVNpemUobi52YWx1ZSl9KSksV20oMixxUSwyLDIsIm1hdC1vcHRpb24iLDE4KSxQdSgpLFB1KCl9aWYoMiZ0KXtjb25zdCB0PUx1KDIpO3Z1KCJhcHBlYXJhbmNlIix0Ll9mb3JtRmllbGRBcHBlYXJhbmNlKSgiY29sb3IiLHQuY29sb3IpLEpjKDEpLHZ1KCJ2YWx1ZSIsdC5wYWdlU2l6ZSkoImRpc2FibGVkIix0LmRpc2FibGVkKSgiYXJpYS1sYWJlbCIsdC5faW50bC5pdGVtc1BlclBhZ2VMYWJlbCksSmMoMSksdnUoIm5nRm9yT2YiLHQuX2Rpc3BsYXllZFBhZ2VTaXplT3B0aW9ucyl9fWZ1bmN0aW9uIFhRKHQsZSl7aWYoMSZ0JiYoT3UoMCwiZGl2IiwyMCksTWYoMSksUHUoKSksMiZ0KXtjb25zdCB0PUx1KDIpO0pjKDEpLHZmKHQucGFnZVNpemUpfX1mdW5jdGlvbiBLUSh0LGUpe2lmKDEmdCYmKE91KDAsImRpdiIsMTIpLE91KDEsImRpdiIsMTMpLE1mKDIpLFB1KCksV20oMyxaUSwzLDYsIm1hdC1mb3JtLWZpZWxkIiwxNCksV20oNCxYUSwyLDEsImRpdiIsMTUpLFB1KCkpLDImdCl7Y29uc3QgdD1MdSgpO0pjKDIpLHhmKCIgIix0Ll9pbnRsLml0ZW1zUGVyUGFnZUxhYmVsLCIgIiksSmMoMSksdnUoIm5nSWYiLHQuX2Rpc3BsYXllZFBhZ2VTaXplT3B0aW9ucy5sZW5ndGg+MSksSmMoMSksdnUoIm5nSWYiLHQuX2Rpc3BsYXllZFBhZ2VTaXplT3B0aW9ucy5sZW5ndGg8PTEpfX1mdW5jdGlvbiBKUSh0LGUpe2lmKDEmdCl7Y29uc3QgdD1FdSgpO091KDAsImJ1dHRvbiIsMjEpLE51KCJjbGljayIsKGZ1bmN0aW9uIGUoKXtyZXR1cm4gcmEodCksTHUoKS5maXJzdFBhZ2UoKX0pKSxIYSgpLE91KDEsInN2ZyIsNyksd3UoMiwicGF0aCIsMjIpLFB1KCksUHUoKX1pZigyJnQpe2NvbnN0IHQ9THUoKTt2dSgibWF0VG9vbHRpcCIsdC5faW50bC5maXJzdFBhZ2VMYWJlbCkoIm1hdFRvb2x0aXBEaXNhYmxlZCIsdC5fcHJldmlvdXNCdXR0b25zRGlzYWJsZWQoKSkoIm1hdFRvb2x0aXBQb3NpdGlvbiIsImFib3ZlIikoImRpc2FibGVkIix0Ll9wcmV2aW91c0J1dHRvbnNEaXNhYmxlZCgpKSxObSgiYXJpYS1sYWJlbCIsdC5faW50bC5maXJzdFBhZ2VMYWJlbCl9fWZ1bmN0aW9uIFFRKHQsZSl7aWYoMSZ0KXtjb25zdCB0PUV1KCk7SGEoKSxGYSgpLE91KDAsImJ1dHRvbiIsMjMpLE51KCJjbGljayIsKGZ1bmN0aW9uIGUoKXtyZXR1cm4gcmEodCksTHUoKS5sYXN0UGFnZSgpfSkpLEhhKCksT3UoMSwic3ZnIiw3KSx3dSgyLCJwYXRoIiwyNCksUHUoKSxQdSgpfWlmKDImdCl7Y29uc3QgdD1MdSgpO3Z1KCJtYXRUb29sdGlwIix0Ll9pbnRsLmxhc3RQYWdlTGFiZWwpKCJtYXRUb29sdGlwRGlzYWJsZWQiLHQuX25leHRCdXR0b25zRGlzYWJsZWQoKSkoIm1hdFRvb2x0aXBQb3NpdGlvbiIsImFib3ZlIikoImRpc2FibGVkIix0Ll9uZXh0QnV0dG9uc0Rpc2FibGVkKCkpLE5tKCJhcmlhLWxhYmVsIix0Ll9pbnRsLmxhc3RQYWdlTGFiZWwpfX1ZUS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8WVEpfSxZUS7JtW1vZD1abyh7dHlwZTpZUX0pLFlRLsm1aW5qPWNvKHtwcm92aWRlcnM6W0JRXSxpbXBvcnRzOltbeXosQnYsaUwsVHpdLFR6LG9GXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oWVEse2RlY2xhcmF0aW9uczpmdW5jdGlvbigpe3JldHVybltXUSxHUV19LGltcG9ydHM6ZnVuY3Rpb24oKXtyZXR1cm5beXosQnYsaUwsVHpdfSxleHBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW1dRLEdRLFR6LG9GXX19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFlRLFt7dHlwZTprXyxhcmdzOlt7aW1wb3J0czpbeXosQnYsaUwsVHpdLGV4cG9ydHM6W1dRLEdRLFR6LG9GXSxkZWNsYXJhdGlvbnM6W1dRLEdRXSxlbnRyeUNvbXBvbmVudHM6W0dRXSxwcm92aWRlcnM6W0JRXX1dfV0sbnVsbCxudWxsKTtjbGFzcyAkUXtjb25zdHJ1Y3Rvcigpe3RoaXMuY2hhbmdlcz1uZXcgeCx0aGlzLml0ZW1zUGVyUGFnZUxhYmVsPSJJdGVtcyBwZXIgcGFnZToiLHRoaXMubmV4dFBhZ2VMYWJlbD0iTmV4dCBwYWdlIix0aGlzLnByZXZpb3VzUGFnZUxhYmVsPSJQcmV2aW91cyBwYWdlIix0aGlzLmZpcnN0UGFnZUxhYmVsPSJGaXJzdCBwYWdlIix0aGlzLmxhc3RQYWdlTGFiZWw9Ikxhc3QgcGFnZSIsdGhpcy5nZXRSYW5nZUxhYmVsPSh0LGUsbik9PntpZigwPT1ufHwwPT1lKXJldHVybmAwIG9mICR7bn1gO2NvbnN0IG89dCplO3JldHVybmAke28rMX0g4oCTICR7bzwobj1NYXRoLm1heChuLDApKT9NYXRoLm1pbihvK2Usbik6bytlfSBvZiAke259YH19fSRRLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHwkUSl9LCRRLsm1cHJvdj1sbyh7ZmFjdG9yeTpmdW5jdGlvbiB0KCl7cmV0dXJuIG5ldyAkUX0sdG9rZW46JFEscHJvdmlkZWRJbjoicm9vdCJ9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKCRRLFt7dHlwZTpKbSxhcmdzOlt7cHJvdmlkZWRJbjoicm9vdCJ9XX1dLChmdW5jdGlvbigpe3JldHVybltdfSksbnVsbCk7Y29uc3QgdCQ9e3Byb3ZpZGU6JFEsZGVwczpbW25ldyBfcyxuZXcgTXMsJFFdXSx1c2VGYWN0b3J5OmZ1bmN0aW9uIGUkKHQpe3JldHVybiB0fHxuZXcgJFF9fSxuJD1uZXcgTnIoIk1BVF9QQUdJTkFUT1JfREVGQVVMVF9PUFRJT05TIiksbyQ9TnooTHooY2xhc3N7fSkpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jbGFzcyBpJCBleHRlbmRzIG8ke2NvbnN0cnVjdG9yKHQsZSxuKXtpZihzdXBlcigpLHRoaXMuX2ludGw9dCx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1lLHRoaXMuX3BhZ2VJbmRleD0wLHRoaXMuX2xlbmd0aD0wLHRoaXMuX3BhZ2VTaXplT3B0aW9ucz1bXSx0aGlzLl9oaWRlUGFnZVNpemU9ITEsdGhpcy5fc2hvd0ZpcnN0TGFzdEJ1dHRvbnM9ITEsdGhpcy5wYWdlPW5ldyBBYix0aGlzLl9pbnRsQ2hhbmdlcz10LmNoYW5nZXMuc3Vic2NyaWJlKCgoKT0+dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpKSxuKXtjb25zdHtwYWdlU2l6ZTp0LHBhZ2VTaXplT3B0aW9uczplLGhpZGVQYWdlU2l6ZTpvLHNob3dGaXJzdExhc3RCdXR0b25zOml9PW47bnVsbCE9dCYmKHRoaXMuX3BhZ2VTaXplPXQpLG51bGwhPWUmJih0aGlzLl9wYWdlU2l6ZU9wdGlvbnM9ZSksbnVsbCE9byYmKHRoaXMuX2hpZGVQYWdlU2l6ZT1vKSxudWxsIT1pJiYodGhpcy5fc2hvd0ZpcnN0TGFzdEJ1dHRvbnM9aSl9fWdldCBwYWdlSW5kZXgoKXtyZXR1cm4gdGhpcy5fcGFnZUluZGV4fXNldCBwYWdlSW5kZXgodCl7dGhpcy5fcGFnZUluZGV4PU1hdGgubWF4KHNJKHQpLDApLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5fbGVuZ3RofXNldCBsZW5ndGgodCl7dGhpcy5fbGVuZ3RoPXNJKHQpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfWdldCBwYWdlU2l6ZSgpe3JldHVybiB0aGlzLl9wYWdlU2l6ZX1zZXQgcGFnZVNpemUodCl7dGhpcy5fcGFnZVNpemU9TWF0aC5tYXgoc0kodCksMCksdGhpcy5fdXBkYXRlRGlzcGxheWVkUGFnZVNpemVPcHRpb25zKCl9Z2V0IHBhZ2VTaXplT3B0aW9ucygpe3JldHVybiB0aGlzLl9wYWdlU2l6ZU9wdGlvbnN9c2V0IHBhZ2VTaXplT3B0aW9ucyh0KXt0aGlzLl9wYWdlU2l6ZU9wdGlvbnM9KHR8fFtdKS5tYXAoKHQ9PnNJKHQpKSksdGhpcy5fdXBkYXRlRGlzcGxheWVkUGFnZVNpemVPcHRpb25zKCl9Z2V0IGhpZGVQYWdlU2l6ZSgpe3JldHVybiB0aGlzLl9oaWRlUGFnZVNpemV9c2V0IGhpZGVQYWdlU2l6ZSh0KXt0aGlzLl9oaWRlUGFnZVNpemU9ckkodCl9Z2V0IHNob3dGaXJzdExhc3RCdXR0b25zKCl7cmV0dXJuIHRoaXMuX3Nob3dGaXJzdExhc3RCdXR0b25zfXNldCBzaG93Rmlyc3RMYXN0QnV0dG9ucyh0KXt0aGlzLl9zaG93Rmlyc3RMYXN0QnV0dG9ucz1ySSh0KX1uZ09uSW5pdCgpe3RoaXMuX2luaXRpYWxpemVkPSEwLHRoaXMuX3VwZGF0ZURpc3BsYXllZFBhZ2VTaXplT3B0aW9ucygpLHRoaXMuX21hcmtJbml0aWFsaXplZCgpfW5nT25EZXN0cm95KCl7dGhpcy5faW50bENoYW5nZXMudW5zdWJzY3JpYmUoKX1uZXh0UGFnZSgpe2lmKCF0aGlzLmhhc05leHRQYWdlKCkpcmV0dXJuO2NvbnN0IHQ9dGhpcy5wYWdlSW5kZXg7dGhpcy5wYWdlSW5kZXgrKyx0aGlzLl9lbWl0UGFnZUV2ZW50KHQpfXByZXZpb3VzUGFnZSgpe2lmKCF0aGlzLmhhc1ByZXZpb3VzUGFnZSgpKXJldHVybjtjb25zdCB0PXRoaXMucGFnZUluZGV4O3RoaXMucGFnZUluZGV4LS0sdGhpcy5fZW1pdFBhZ2VFdmVudCh0KX1maXJzdFBhZ2UoKXtpZighdGhpcy5oYXNQcmV2aW91c1BhZ2UoKSlyZXR1cm47Y29uc3QgdD10aGlzLnBhZ2VJbmRleDt0aGlzLnBhZ2VJbmRleD0wLHRoaXMuX2VtaXRQYWdlRXZlbnQodCl9bGFzdFBhZ2UoKXtpZighdGhpcy5oYXNOZXh0UGFnZSgpKXJldHVybjtjb25zdCB0PXRoaXMucGFnZUluZGV4O3RoaXMucGFnZUluZGV4PXRoaXMuZ2V0TnVtYmVyT2ZQYWdlcygpLTEsdGhpcy5fZW1pdFBhZ2VFdmVudCh0KX1oYXNQcmV2aW91c1BhZ2UoKXtyZXR1cm4gdGhpcy5wYWdlSW5kZXg+PTEmJjAhPXRoaXMucGFnZVNpemV9aGFzTmV4dFBhZ2UoKXtjb25zdCB0PXRoaXMuZ2V0TnVtYmVyT2ZQYWdlcygpLTE7cmV0dXJuIHRoaXMucGFnZUluZGV4PHQmJjAhPXRoaXMucGFnZVNpemV9Z2V0TnVtYmVyT2ZQYWdlcygpe3JldHVybiB0aGlzLnBhZ2VTaXplP01hdGguY2VpbCh0aGlzLmxlbmd0aC90aGlzLnBhZ2VTaXplKTowfV9jaGFuZ2VQYWdlU2l6ZSh0KXtjb25zdCBlPXRoaXMucGFnZUluZGV4O3RoaXMucGFnZUluZGV4PU1hdGguZmxvb3IodGhpcy5wYWdlSW5kZXgqdGhpcy5wYWdlU2l6ZS90KXx8MCx0aGlzLnBhZ2VTaXplPXQsdGhpcy5fZW1pdFBhZ2VFdmVudChlKX1fbmV4dEJ1dHRvbnNEaXNhYmxlZCgpe3JldHVybiB0aGlzLmRpc2FibGVkfHwhdGhpcy5oYXNOZXh0UGFnZSgpfV9wcmV2aW91c0J1dHRvbnNEaXNhYmxlZCgpe3JldHVybiB0aGlzLmRpc2FibGVkfHwhdGhpcy5oYXNQcmV2aW91c1BhZ2UoKX1fdXBkYXRlRGlzcGxheWVkUGFnZVNpemVPcHRpb25zKCl7dGhpcy5faW5pdGlhbGl6ZWQmJih0aGlzLnBhZ2VTaXplfHwodGhpcy5fcGFnZVNpemU9MCE9dGhpcy5wYWdlU2l6ZU9wdGlvbnMubGVuZ3RoP3RoaXMucGFnZVNpemVPcHRpb25zWzBdOjUwKSx0aGlzLl9kaXNwbGF5ZWRQYWdlU2l6ZU9wdGlvbnM9dGhpcy5wYWdlU2l6ZU9wdGlvbnMuc2xpY2UoKSwtMT09PXRoaXMuX2Rpc3BsYXllZFBhZ2VTaXplT3B0aW9ucy5pbmRleE9mKHRoaXMucGFnZVNpemUpJiZ0aGlzLl9kaXNwbGF5ZWRQYWdlU2l6ZU9wdGlvbnMucHVzaCh0aGlzLnBhZ2VTaXplKSx0aGlzLl9kaXNwbGF5ZWRQYWdlU2l6ZU9wdGlvbnMuc29ydCgoKHQsZSk9PnQtZSkpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX1fZW1pdFBhZ2VFdmVudCh0KXt0aGlzLnBhZ2UuZW1pdCh7cHJldmlvdXNQYWdlSW5kZXg6dCxwYWdlSW5kZXg6dGhpcy5wYWdlSW5kZXgscGFnZVNpemU6dGhpcy5wYWdlU2l6ZSxsZW5ndGg6dGhpcy5sZW5ndGh9KX19aSQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGkkKShNdSgkUSksTXUoSGgpLE11KHZvaWQgMCkpfSxpJC7JtWRpcj1Kbyh7dHlwZTppJCxpbnB1dHM6e3BhZ2VJbmRleDoicGFnZUluZGV4IixsZW5ndGg6Imxlbmd0aCIscGFnZVNpemU6InBhZ2VTaXplIixwYWdlU2l6ZU9wdGlvbnM6InBhZ2VTaXplT3B0aW9ucyIsaGlkZVBhZ2VTaXplOiJoaWRlUGFnZVNpemUiLHNob3dGaXJzdExhc3RCdXR0b25zOiJzaG93Rmlyc3RMYXN0QnV0dG9ucyIsY29sb3I6ImNvbG9yIn0sb3V0cHV0czp7cGFnZToicGFnZSJ9LGZlYXR1cmVzOltnbV19KSxpJC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOiRRfSx7dHlwZTpIaH0se3R5cGU6dm9pZCAwfV0saSQucHJvcERlY29yYXRvcnM9e2NvbG9yOlt7dHlwZTp5X31dLHBhZ2VJbmRleDpbe3R5cGU6eV99XSxsZW5ndGg6W3t0eXBlOnlffV0scGFnZVNpemU6W3t0eXBlOnlffV0scGFnZVNpemVPcHRpb25zOlt7dHlwZTp5X31dLGhpZGVQYWdlU2l6ZTpbe3R5cGU6eV99XSxzaG93Rmlyc3RMYXN0QnV0dG9uczpbe3R5cGU6eV99XSxwYWdlOlt7dHlwZTpfX31dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGkkLFt7dHlwZTpnX31dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTokUX0se3R5cGU6SGh9LHt0eXBlOnZvaWQgMH1dfSkse3BhZ2U6W3t0eXBlOl9ffV0scGFnZUluZGV4Olt7dHlwZTp5X31dLGxlbmd0aDpbe3R5cGU6eV99XSxwYWdlU2l6ZTpbe3R5cGU6eV99XSxwYWdlU2l6ZU9wdGlvbnM6W3t0eXBlOnlffV0saGlkZVBhZ2VTaXplOlt7dHlwZTp5X31dLHNob3dGaXJzdExhc3RCdXR0b25zOlt7dHlwZTp5X31dLGNvbG9yOlt7dHlwZTp5X31dfSk7Y2xhc3MgYSQgZXh0ZW5kcyBpJHtjb25zdHJ1Y3Rvcih0LGUsbil7c3VwZXIodCxlLG4pLG4mJm51bGwhPW4uZm9ybUZpZWxkQXBwZWFyYW5jZSYmKHRoaXMuX2Zvcm1GaWVsZEFwcGVhcmFuY2U9bi5mb3JtRmllbGRBcHBlYXJhbmNlKX19YSQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGEkKShNdSgkUSksTXUoSGgpLE11KG4kLDgpKX0sYSQuybVjbXA9VW8oe3R5cGU6YSQsc2VsZWN0b3JzOltbIm1hdC1wYWdpbmF0b3IiXV0saG9zdEF0dHJzOlsicm9sZSIsImdyb3VwIiwxLCJtYXQtcGFnaW5hdG9yIl0saW5wdXRzOntkaXNhYmxlZDoiZGlzYWJsZWQifSxleHBvcnRBczpbIm1hdFBhZ2luYXRvciJdLGZlYXR1cmVzOltnbV0sZGVjbHM6MTQsdmFyczoxNCxjb25zdHM6W1sxLCJtYXQtcGFnaW5hdG9yLW91dGVyLWNvbnRhaW5lciJdLFsxLCJtYXQtcGFnaW5hdG9yLWNvbnRhaW5lciJdLFsiY2xhc3MiLCJtYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZSIsNCwibmdJZiJdLFsxLCJtYXQtcGFnaW5hdG9yLXJhbmdlLWFjdGlvbnMiXSxbMSwibWF0LXBhZ2luYXRvci1yYW5nZS1sYWJlbCJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwibWF0LXBhZ2luYXRvci1uYXZpZ2F0aW9uLWZpcnN0IiwzLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFBvc2l0aW9uIiwiZGlzYWJsZWQiLCJjbGljayIsNCwibmdJZiJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwidHlwZSIsImJ1dHRvbiIsMSwibWF0LXBhZ2luYXRvci1uYXZpZ2F0aW9uLXByZXZpb3VzIiwzLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFBvc2l0aW9uIiwiZGlzYWJsZWQiLCJjbGljayJdLFsidmlld0JveCIsIjAgMCAyNCAyNCIsImZvY3VzYWJsZSIsImZhbHNlIiwxLCJtYXQtcGFnaW5hdG9yLWljb24iXSxbImQiLCJNMTUuNDEgNy40MUwxNCA2bC02IDYgNiA2IDEuNDEtMS40MUwxMC44MyAxMnoiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsInR5cGUiLCJidXR0b24iLDEsIm1hdC1wYWdpbmF0b3ItbmF2aWdhdGlvbi1uZXh0IiwzLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFBvc2l0aW9uIiwiZGlzYWJsZWQiLCJjbGljayJdLFsiZCIsIk0xMCA2TDguNTkgNy40MSAxMy4xNyAxMmwtNC41OCA0LjU5TDEwIDE4bDYtNnoiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsInR5cGUiLCJidXR0b24iLCJjbGFzcyIsIm1hdC1wYWdpbmF0b3ItbmF2aWdhdGlvbi1sYXN0IiwzLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFBvc2l0aW9uIiwiZGlzYWJsZWQiLCJjbGljayIsNCwibmdJZiJdLFsxLCJtYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZSJdLFsxLCJtYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZS1sYWJlbCJdLFsiY2xhc3MiLCJtYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZS1zZWxlY3QiLDMsImFwcGVhcmFuY2UiLCJjb2xvciIsNCwibmdJZiJdLFsiY2xhc3MiLCJtYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZS12YWx1ZSIsNCwibmdJZiJdLFsxLCJtYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZS1zZWxlY3QiLDMsImFwcGVhcmFuY2UiLCJjb2xvciJdLFszLCJ2YWx1ZSIsImRpc2FibGVkIiwiYXJpYS1sYWJlbCIsInNlbGVjdGlvbkNoYW5nZSJdLFszLCJ2YWx1ZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsInZhbHVlIl0sWzEsIm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplLXZhbHVlIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJ0eXBlIiwiYnV0dG9uIiwxLCJtYXQtcGFnaW5hdG9yLW5hdmlnYXRpb24tZmlyc3QiLDMsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwUG9zaXRpb24iLCJkaXNhYmxlZCIsImNsaWNrIl0sWyJkIiwiTTE4LjQxIDE2LjU5TDEzLjgyIDEybDQuNTktNC41OUwxNyA2bC02IDYgNiA2ek02IDZoMnYxMkg2eiJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwidHlwZSIsImJ1dHRvbiIsMSwibWF0LXBhZ2luYXRvci1uYXZpZ2F0aW9uLWxhc3QiLDMsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwUG9zaXRpb24iLCJkaXNhYmxlZCIsImNsaWNrIl0sWyJkIiwiTTUuNTkgNy40MUwxMC4xOCAxMmwtNC41OSA0LjU5TDcgMThsNi02LTYtNnpNMTYgNmgydjEyaC0yeiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoT3UoMCwiZGl2IiwwKSxPdSgxLCJkaXYiLDEpLFdtKDIsS1EsNSwzLCJkaXYiLDIpLE91KDMsImRpdiIsMyksT3UoNCwiZGl2Iiw0KSxNZig1KSxQdSgpLFdtKDYsSlEsMyw1LCJidXR0b24iLDUpLE91KDcsImJ1dHRvbiIsNiksTnUoImNsaWNrIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLnByZXZpb3VzUGFnZSgpfSkpLEhhKCksT3UoOCwic3ZnIiw3KSx3dSg5LCJwYXRoIiw4KSxQdSgpLFB1KCksRmEoKSxPdSgxMCwiYnV0dG9uIiw5KSxOdSgiY2xpY2siLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ubmV4dFBhZ2UoKX0pKSxIYSgpLE91KDExLCJzdmciLDcpLHd1KDEyLCJwYXRoIiwxMCksUHUoKSxQdSgpLFdtKDEzLFFRLDMsNSwiYnV0dG9uIiwxMSksUHUoKSxQdSgpLFB1KCkpLDImZSYmKEpjKDIpLHZ1KCJuZ0lmIiwhbi5oaWRlUGFnZVNpemUpLEpjKDMpLHhmKCIgIixuLl9pbnRsLmdldFJhbmdlTGFiZWwobi5wYWdlSW5kZXgsbi5wYWdlU2l6ZSxuLmxlbmd0aCksIiAiKSxKYygxKSx2dSgibmdJZiIsbi5zaG93Rmlyc3RMYXN0QnV0dG9ucyksSmMoMSksdnUoIm1hdFRvb2x0aXAiLG4uX2ludGwucHJldmlvdXNQYWdlTGFiZWwpKCJtYXRUb29sdGlwRGlzYWJsZWQiLG4uX3ByZXZpb3VzQnV0dG9uc0Rpc2FibGVkKCkpKCJtYXRUb29sdGlwUG9zaXRpb24iLCJhYm92ZSIpKCJkaXNhYmxlZCIsbi5fcHJldmlvdXNCdXR0b25zRGlzYWJsZWQoKSksTm0oImFyaWEtbGFiZWwiLG4uX2ludGwucHJldmlvdXNQYWdlTGFiZWwpLEpjKDMpLHZ1KCJtYXRUb29sdGlwIixuLl9pbnRsLm5leHRQYWdlTGFiZWwpKCJtYXRUb29sdGlwRGlzYWJsZWQiLG4uX25leHRCdXR0b25zRGlzYWJsZWQoKSkoIm1hdFRvb2x0aXBQb3NpdGlvbiIsImFib3ZlIikoImRpc2FibGVkIixuLl9uZXh0QnV0dG9uc0Rpc2FibGVkKCkpLE5tKCJhcmlhLWxhYmVsIixuLl9pbnRsLm5leHRQYWdlTGFiZWwpLEpjKDMpLHZ1KCJuZ0lmIixuLnNob3dGaXJzdExhc3RCdXR0b25zKSl9LGRpcmVjdGl2ZXM6W2F2LE5ILFdRLF9WLGRXLG92LFBIXSxzdHlsZXM6WyIubWF0LXBhZ2luYXRvcntkaXNwbGF5OmJsb2NrfS5tYXQtcGFnaW5hdG9yLW91dGVyLWNvbnRhaW5lcntkaXNwbGF5OmZsZXh9Lm1hdC1wYWdpbmF0b3ItY29udGFpbmVye2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO3BhZGRpbmc6MCA4cHg7ZmxleC13cmFwOndyYXAtcmV2ZXJzZTt3aWR0aDoxMDAlfS5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6YmFzZWxpbmU7bWFyZ2luLXJpZ2h0OjhweH1bZGlyPXJ0bF0gLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXple21hcmdpbi1yaWdodDowO21hcmdpbi1sZWZ0OjhweH0ubWF0LXBhZ2luYXRvci1wYWdlLXNpemUtbGFiZWx7bWFyZ2luOjAgNHB4fS5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZS1zZWxlY3R7bWFyZ2luOjZweCA0cHggMCA0cHg7d2lkdGg6NTZweH0ubWF0LXBhZ2luYXRvci1wYWdlLXNpemUtc2VsZWN0Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZXt3aWR0aDo2NHB4fS5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZS1zZWxlY3QubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxse3dpZHRoOjY0cHh9Lm1hdC1wYWdpbmF0b3ItcmFuZ2UtbGFiZWx7bWFyZ2luOjAgMzJweCAwIDI0cHh9Lm1hdC1wYWdpbmF0b3ItcmFuZ2UtYWN0aW9uc3tkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5tYXQtcGFnaW5hdG9yLWljb257d2lkdGg6MjhweDtmaWxsOmN1cnJlbnRDb2xvcn1bZGlyPXJ0bF0gLm1hdC1wYWdpbmF0b3ItaWNvbnt0cmFuc2Zvcm06cm90YXRlKDE4MGRlZyl9XG4iXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxhJC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOiRRfSx7dHlwZTpIaH0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltuJF19XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoYSQsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoibWF0LXBhZ2luYXRvciIsZXhwb3J0QXM6Im1hdFBhZ2luYXRvciIsdGVtcGxhdGU6JzxkaXYgY2xhc3M9Im1hdC1wYWdpbmF0b3Itb3V0ZXItY29udGFpbmVyIj5cbiAgPGRpdiBjbGFzcz0ibWF0LXBhZ2luYXRvci1jb250YWluZXIiPlxuICAgIDxkaXYgY2xhc3M9Im1hdC1wYWdpbmF0b3ItcGFnZS1zaXplIiAqbmdJZj0iIWhpZGVQYWdlU2l6ZSI+XG4gICAgICA8ZGl2IGNsYXNzPSJtYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZS1sYWJlbCI+XG4gICAgICAgIHt7X2ludGwuaXRlbXNQZXJQYWdlTGFiZWx9fVxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxtYXQtZm9ybS1maWVsZFxuICAgICAgICAqbmdJZj0iX2Rpc3BsYXllZFBhZ2VTaXplT3B0aW9ucy5sZW5ndGggPiAxIlxuICAgICAgICBbYXBwZWFyYW5jZV09Il9mb3JtRmllbGRBcHBlYXJhbmNlISJcbiAgICAgICAgW2NvbG9yXT0iY29sb3IiXG4gICAgICAgIGNsYXNzPSJtYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZS1zZWxlY3QiPlxuICAgICAgICA8bWF0LXNlbGVjdFxuICAgICAgICAgIFt2YWx1ZV09InBhZ2VTaXplIlxuICAgICAgICAgIFtkaXNhYmxlZF09ImRpc2FibGVkIlxuICAgICAgICAgIFthcmlhLWxhYmVsXT0iX2ludGwuaXRlbXNQZXJQYWdlTGFiZWwiXG4gICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9Il9jaGFuZ2VQYWdlU2l6ZSgkZXZlbnQudmFsdWUpIj5cbiAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBwYWdlU2l6ZU9wdGlvbiBvZiBfZGlzcGxheWVkUGFnZVNpemVPcHRpb25zIiBbdmFsdWVdPSJwYWdlU2l6ZU9wdGlvbiI+XG4gICAgICAgICAgICB7e3BhZ2VTaXplT3B0aW9ufX1cbiAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9Im1hdC1wYWdpbmF0b3ItcGFnZS1zaXplLXZhbHVlIlxuICAgICAgICAqbmdJZj0iX2Rpc3BsYXllZFBhZ2VTaXplT3B0aW9ucy5sZW5ndGggPD0gMSI+e3twYWdlU2l6ZX19PC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPSJtYXQtcGFnaW5hdG9yLXJhbmdlLWFjdGlvbnMiPlxuICAgICAgPGRpdiBjbGFzcz0ibWF0LXBhZ2luYXRvci1yYW5nZS1sYWJlbCI+XG4gICAgICAgIHt7X2ludGwuZ2V0UmFuZ2VMYWJlbChwYWdlSW5kZXgsIHBhZ2VTaXplLCBsZW5ndGgpfX1cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgIGNsYXNzPSJtYXQtcGFnaW5hdG9yLW5hdmlnYXRpb24tZmlyc3QiXG4gICAgICAgICAgICAgIChjbGljayk9ImZpcnN0UGFnZSgpIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT0iX2ludGwuZmlyc3RQYWdlTGFiZWwiXG4gICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iX2ludGwuZmlyc3RQYWdlTGFiZWwiXG4gICAgICAgICAgICAgIFttYXRUb29sdGlwRGlzYWJsZWRdPSJfcHJldmlvdXNCdXR0b25zRGlzYWJsZWQoKSJcbiAgICAgICAgICAgICAgW21hdFRvb2x0aXBQb3NpdGlvbl09IlwnYWJvdmVcJyJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iX3ByZXZpb3VzQnV0dG9uc0Rpc2FibGVkKCkiXG4gICAgICAgICAgICAgICpuZ0lmPSJzaG93Rmlyc3RMYXN0QnV0dG9ucyI+XG4gICAgICAgIDxzdmcgY2xhc3M9Im1hdC1wYWdpbmF0b3ItaWNvbiIgdmlld0JveD0iMCAwIDI0IDI0IiBmb2N1c2FibGU9ImZhbHNlIj5cbiAgICAgICAgICA8cGF0aCBkPSJNMTguNDEgMTYuNTlMMTMuODIgMTJsNC41OS00LjU5TDE3IDZsLTYgNiA2IDZ6TTYgNmgydjEySDZ6Ii8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgIGNsYXNzPSJtYXQtcGFnaW5hdG9yLW5hdmlnYXRpb24tcHJldmlvdXMiXG4gICAgICAgICAgICAgIChjbGljayk9InByZXZpb3VzUGFnZSgpIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT0iX2ludGwucHJldmlvdXNQYWdlTGFiZWwiXG4gICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iX2ludGwucHJldmlvdXNQYWdlTGFiZWwiXG4gICAgICAgICAgICAgIFttYXRUb29sdGlwRGlzYWJsZWRdPSJfcHJldmlvdXNCdXR0b25zRGlzYWJsZWQoKSJcbiAgICAgICAgICAgICAgW21hdFRvb2x0aXBQb3NpdGlvbl09IlwnYWJvdmVcJyJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iX3ByZXZpb3VzQnV0dG9uc0Rpc2FibGVkKCkiPlxuICAgICAgICA8c3ZnIGNsYXNzPSJtYXQtcGFnaW5hdG9yLWljb24iIHZpZXdCb3g9IjAgMCAyNCAyNCIgZm9jdXNhYmxlPSJmYWxzZSI+XG4gICAgICAgICAgPHBhdGggZD0iTTE1LjQxIDcuNDFMMTQgNmwtNiA2IDYgNiAxLjQxLTEuNDFMMTAuODMgMTJ6Ii8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgIGNsYXNzPSJtYXQtcGFnaW5hdG9yLW5hdmlnYXRpb24tbmV4dCJcbiAgICAgICAgICAgICAgKGNsaWNrKT0ibmV4dFBhZ2UoKSJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09Il9pbnRsLm5leHRQYWdlTGFiZWwiXG4gICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iX2ludGwubmV4dFBhZ2VMYWJlbCJcbiAgICAgICAgICAgICAgW21hdFRvb2x0aXBEaXNhYmxlZF09Il9uZXh0QnV0dG9uc0Rpc2FibGVkKCkiXG4gICAgICAgICAgICAgIFttYXRUb29sdGlwUG9zaXRpb25dPSJcJ2Fib3ZlXCciXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09Il9uZXh0QnV0dG9uc0Rpc2FibGVkKCkiPlxuICAgICAgICA8c3ZnIGNsYXNzPSJtYXQtcGFnaW5hdG9yLWljb24iIHZpZXdCb3g9IjAgMCAyNCAyNCIgZm9jdXNhYmxlPSJmYWxzZSI+XG4gICAgICAgICAgPHBhdGggZD0iTTEwIDZMOC41OSA3LjQxIDEzLjE3IDEybC00LjU4IDQuNTlMMTAgMThsNi02eiIvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICBjbGFzcz0ibWF0LXBhZ2luYXRvci1uYXZpZ2F0aW9uLWxhc3QiXG4gICAgICAgICAgICAgIChjbGljayk9Imxhc3RQYWdlKCkiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPSJfaW50bC5sYXN0UGFnZUxhYmVsIlxuICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09Il9pbnRsLmxhc3RQYWdlTGFiZWwiXG4gICAgICAgICAgICAgIFttYXRUb29sdGlwRGlzYWJsZWRdPSJfbmV4dEJ1dHRvbnNEaXNhYmxlZCgpIlxuICAgICAgICAgICAgICBbbWF0VG9vbHRpcFBvc2l0aW9uXT0iXCdhYm92ZVwnIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJfbmV4dEJ1dHRvbnNEaXNhYmxlZCgpIlxuICAgICAgICAgICAgICAqbmdJZj0ic2hvd0ZpcnN0TGFzdEJ1dHRvbnMiPlxuICAgICAgICA8c3ZnIGNsYXNzPSJtYXQtcGFnaW5hdG9yLWljb24iIHZpZXdCb3g9IjAgMCAyNCAyNCIgZm9jdXNhYmxlPSJmYWxzZSI+XG4gICAgICAgICAgPHBhdGggZD0iTTUuNTkgNy40MUwxMC4xOCAxMmwtNC41OSA0LjU5TDcgMThsNi02LTYtNnpNMTYgNmgydjEyaC0yeiIvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuJyxpbnB1dHM6WyJkaXNhYmxlZCJdLGhvc3Q6e2NsYXNzOiJtYXQtcGFnaW5hdG9yIixyb2xlOiJncm91cCJ9LGNoYW5nZURldGVjdGlvbjp4by5PblB1c2gsZW5jYXBzdWxhdGlvbjpQby5Ob25lLHN0eWxlczpbIi5tYXQtcGFnaW5hdG9ye2Rpc3BsYXk6YmxvY2t9Lm1hdC1wYWdpbmF0b3Itb3V0ZXItY29udGFpbmVye2Rpc3BsYXk6ZmxleH0ubWF0LXBhZ2luYXRvci1jb250YWluZXJ7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7cGFkZGluZzowIDhweDtmbGV4LXdyYXA6d3JhcC1yZXZlcnNlO3dpZHRoOjEwMCV9Lm1hdC1wYWdpbmF0b3ItcGFnZS1zaXple2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpiYXNlbGluZTttYXJnaW4tcmlnaHQ6OHB4fVtkaXI9cnRsXSAubWF0LXBhZ2luYXRvci1wYWdlLXNpemV7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6OHB4fS5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZS1sYWJlbHttYXJnaW46MCA0cHh9Lm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplLXNlbGVjdHttYXJnaW46NnB4IDRweCAwIDRweDt3aWR0aDo1NnB4fS5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZS1zZWxlY3QubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5le3dpZHRoOjY0cHh9Lm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplLXNlbGVjdC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGx7d2lkdGg6NjRweH0ubWF0LXBhZ2luYXRvci1yYW5nZS1sYWJlbHttYXJnaW46MCAzMnB4IDAgMjRweH0ubWF0LXBhZ2luYXRvci1yYW5nZS1hY3Rpb25ze2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9Lm1hdC1wYWdpbmF0b3ItaWNvbnt3aWR0aDoyOHB4O2ZpbGw6Y3VycmVudENvbG9yfVtkaXI9cnRsXSAubWF0LXBhZ2luYXRvci1pY29ue3RyYW5zZm9ybTpyb3RhdGUoMTgwZGVnKX1cbiJdfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6JFF9LHt0eXBlOkhofSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W24kXX1dfV19KSxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIHIke31mdW5jdGlvbiBzJCh0LGUpe2lmKDEmdCl7Y29uc3QgdD1FdSgpO091KDAsImRpdiIsMyksTnUoIkBhcnJvd1Bvc2l0aW9uLnN0YXJ0IiwoZnVuY3Rpb24gZSgpe3JldHVybiByYSh0KSxMdSgpLl9kaXNhYmxlVmlld1N0YXRlQW5pbWF0aW9uPSEwfSkpKCJAYXJyb3dQb3NpdGlvbi5kb25lIiwoZnVuY3Rpb24gZSgpe3JldHVybiByYSh0KSxMdSgpLl9kaXNhYmxlVmlld1N0YXRlQW5pbWF0aW9uPSExfSkpLHd1KDEsImRpdiIsNCksT3UoMiwiZGl2Iiw1KSx3dSgzLCJkaXYiLDYpLHd1KDQsImRpdiIsNyksd3UoNSwiZGl2Iiw4KSxQdSgpLFB1KCl9aWYoMiZ0KXtjb25zdCB0PUx1KCk7dnUoIkBhcnJvd09wYWNpdHkiLHQuX2dldEFycm93Vmlld1N0YXRlKCkpKCJAYXJyb3dQb3NpdGlvbiIsdC5fZ2V0QXJyb3dWaWV3U3RhdGUoKSkoIkBhbGxvd0NoaWxkcmVuIix0Ll9nZXRBcnJvd0RpcmVjdGlvblN0YXRlKCkpLEpjKDIpLHZ1KCJAaW5kaWNhdG9yIix0Ll9nZXRBcnJvd0RpcmVjdGlvblN0YXRlKCkpLEpjKDEpLHZ1KCJAbGVmdFBvaW50ZXIiLHQuX2dldEFycm93RGlyZWN0aW9uU3RhdGUoKSksSmMoMSksdnUoIkByaWdodFBvaW50ZXIiLHQuX2dldEFycm93RGlyZWN0aW9uU3RhdGUoKSl9fXIkLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxyJCl9LHIkLsm1bW9kPVpvKHt0eXBlOnIkfSksciQuybVpbmo9Y28oe3Byb3ZpZGVyczpbdCRdLGltcG9ydHM6W1tCdix6SCxtVyxZUSxUel1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhyJCx7ZGVjbGFyYXRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuW2EkXX0saW1wb3J0czpmdW5jdGlvbigpe3JldHVybltCdix6SCxtVyxZUSxUel19LGV4cG9ydHM6ZnVuY3Rpb24oKXtyZXR1cm5bYSRdfX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIociQsW3t0eXBlOmtfLGFyZ3M6W3tpbXBvcnRzOltCdix6SCxtVyxZUSxUel0sZXhwb3J0czpbYSRdLGRlY2xhcmF0aW9uczpbYSRdLHByb3ZpZGVyczpbdCRdfV19XSxudWxsLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3QgbCQ9bmV3IE5yKCJNQVRfU09SVF9ERUZBVUxUX09QVElPTlMiKSxjJD1MeihOeihjbGFzc3t9KSk7Y2xhc3MgZCQgZXh0ZW5kcyBjJHtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuX2RlZmF1bHRPcHRpb25zPXQsdGhpcy5zb3J0YWJsZXM9bmV3IE1hcCx0aGlzLl9zdGF0ZUNoYW5nZXM9bmV3IHgsdGhpcy5zdGFydD0iYXNjIix0aGlzLl9kaXJlY3Rpb249IiIsdGhpcy5zb3J0Q2hhbmdlPW5ldyBBYn1nZXQgZGlyZWN0aW9uKCl7cmV0dXJuIHRoaXMuX2RpcmVjdGlvbn1zZXQgZGlyZWN0aW9uKHQpe2lmKHQmJiJhc2MiIT09dCYmImRlc2MiIT09dCYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpKXRocm93KGZ1bmN0aW9uIGUodCl7cmV0dXJuIEVycm9yKGAke3R9IGlzIG5vdCBhIHZhbGlkIHNvcnQgZGlyZWN0aW9uICgnYXNjJyBvciAnZGVzYycpLmApfSkodCk7dGhpcy5fZGlyZWN0aW9uPXR9Z2V0IGRpc2FibGVDbGVhcigpe3JldHVybiB0aGlzLl9kaXNhYmxlQ2xlYXJ9c2V0IGRpc2FibGVDbGVhcih0KXt0aGlzLl9kaXNhYmxlQ2xlYXI9ckkodCl9cmVnaXN0ZXIodCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSl7aWYoIXQuaWQpdGhyb3coZnVuY3Rpb24gZSgpe3JldHVybiBFcnJvcigiTWF0U29ydEhlYWRlciBtdXN0IGJlIHByb3ZpZGVkIHdpdGggYSB1bmlxdWUgaWQuIil9KSgpO2lmKHRoaXMuc29ydGFibGVzLmhhcyh0LmlkKSl0aHJvdyhmdW5jdGlvbiBuKHQpe3JldHVybiBFcnJvcihgQ2Fubm90IGhhdmUgdHdvIE1hdFNvcnRhYmxlcyB3aXRoIHRoZSBzYW1lIGlkICgke3R9KS5gKX0pKHQuaWQpfXRoaXMuc29ydGFibGVzLnNldCh0LmlkLHQpfWRlcmVnaXN0ZXIodCl7dGhpcy5zb3J0YWJsZXMuZGVsZXRlKHQuaWQpfXNvcnQodCl7dGhpcy5hY3RpdmUhPXQuaWQ/KHRoaXMuYWN0aXZlPXQuaWQsdGhpcy5kaXJlY3Rpb249dC5zdGFydD90LnN0YXJ0OnRoaXMuc3RhcnQpOnRoaXMuZGlyZWN0aW9uPXRoaXMuZ2V0TmV4dFNvcnREaXJlY3Rpb24odCksdGhpcy5zb3J0Q2hhbmdlLmVtaXQoe2FjdGl2ZTp0aGlzLmFjdGl2ZSxkaXJlY3Rpb246dGhpcy5kaXJlY3Rpb259KX1nZXROZXh0U29ydERpcmVjdGlvbih0KXt2YXIgZSxuLG87aWYoIXQpcmV0dXJuIiI7Y29uc3QgaT1udWxsIT09KG49bnVsbCE9PShlPW51bGw9PXQ/dm9pZCAwOnQuZGlzYWJsZUNsZWFyKSYmdm9pZCAwIT09ZT9lOnRoaXMuZGlzYWJsZUNsZWFyKSYmdm9pZCAwIT09bj9uOiEhKG51bGw9PT0obz10aGlzLl9kZWZhdWx0T3B0aW9ucyl8fHZvaWQgMD09PW8/dm9pZCAwOm8uZGlzYWJsZUNsZWFyKTtsZXQgYT0oZnVuY3Rpb24gcih0LGUpe2xldCBuPVsiYXNjIiwiZGVzYyJdO3JldHVybiJkZXNjIj09dCYmbi5yZXZlcnNlKCksZXx8bi5wdXNoKCIiKSxufQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8pKHQuc3RhcnR8fHRoaXMuc3RhcnQsaSkscz1hLmluZGV4T2YodGhpcy5kaXJlY3Rpb24pKzE7cmV0dXJuIHM+PWEubGVuZ3RoJiYocz0wKSxhW3NdfW5nT25Jbml0KCl7dGhpcy5fbWFya0luaXRpYWxpemVkKCl9bmdPbkNoYW5nZXMoKXt0aGlzLl9zdGF0ZUNoYW5nZXMubmV4dCgpfW5nT25EZXN0cm95KCl7dGhpcy5fc3RhdGVDaGFuZ2VzLmNvbXBsZXRlKCl9fWQkLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxkJCkoTXUobCQsOCkpfSxkJC7JtWRpcj1Kbyh7dHlwZTpkJCxzZWxlY3RvcnM6W1siIiwibWF0U29ydCIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1zb3J0Il0saW5wdXRzOntkaXNhYmxlZDpbIm1hdFNvcnREaXNhYmxlZCIsImRpc2FibGVkIl0sc3RhcnQ6WyJtYXRTb3J0U3RhcnQiLCJzdGFydCJdLGRpcmVjdGlvbjpbIm1hdFNvcnREaXJlY3Rpb24iLCJkaXJlY3Rpb24iXSxkaXNhYmxlQ2xlYXI6WyJtYXRTb3J0RGlzYWJsZUNsZWFyIiwiZGlzYWJsZUNsZWFyIl0sYWN0aXZlOlsibWF0U29ydEFjdGl2ZSIsImFjdGl2ZSJdfSxvdXRwdXRzOntzb3J0Q2hhbmdlOiJtYXRTb3J0Q2hhbmdlIn0sZXhwb3J0QXM6WyJtYXRTb3J0Il0sZmVhdHVyZXM6W2dtLFNpXX0pLGQkLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltsJF19XX1dLGQkLnByb3BEZWNvcmF0b3JzPXthY3RpdmU6W3t0eXBlOnlfLGFyZ3M6WyJtYXRTb3J0QWN0aXZlIl19XSxzdGFydDpbe3R5cGU6eV8sYXJnczpbIm1hdFNvcnRTdGFydCJdfV0sZGlyZWN0aW9uOlt7dHlwZTp5XyxhcmdzOlsibWF0U29ydERpcmVjdGlvbiJdfV0sZGlzYWJsZUNsZWFyOlt7dHlwZTp5XyxhcmdzOlsibWF0U29ydERpc2FibGVDbGVhciJdfV0sc29ydENoYW5nZTpbe3R5cGU6X18sYXJnczpbIm1hdFNvcnRDaGFuZ2UiXX1dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGQkLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6IlttYXRTb3J0XSIsZXhwb3J0QXM6Im1hdFNvcnQiLGhvc3Q6e2NsYXNzOiJtYXQtc29ydCJ9LGlucHV0czpbImRpc2FibGVkOiBtYXRTb3J0RGlzYWJsZWQiXX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbbCRdfV19XX0pLHtzdGFydDpbe3R5cGU6eV8sYXJnczpbIm1hdFNvcnRTdGFydCJdfV0sc29ydENoYW5nZTpbe3R5cGU6X18sYXJnczpbIm1hdFNvcnRDaGFuZ2UiXX1dLGRpcmVjdGlvbjpbe3R5cGU6eV8sYXJnczpbIm1hdFNvcnREaXJlY3Rpb24iXX1dLGRpc2FibGVDbGVhcjpbe3R5cGU6eV8sYXJnczpbIm1hdFNvcnREaXNhYmxlQ2xlYXIiXX1dLGFjdGl2ZTpbe3R5cGU6eV8sYXJnczpbIm1hdFNvcnRBY3RpdmUiXX1dfSk7Y29uc3QgcCQ9RHouRU5URVJJTkcrIiAiK1N6LlNUQU5EQVJEX0NVUlZFLG0kPXtpbmRpY2F0b3I6S3goImluZGljYXRvciIsW3RPKCJhY3RpdmUtYXNjLCBhc2MiLCR4KHt0cmFuc2Zvcm06InRyYW5zbGF0ZVkoMHB4KSJ9KSksdE8oImFjdGl2ZS1kZXNjLCBkZXNjIiwkeCh7dHJhbnNmb3JtOiJ0cmFuc2xhdGVZKDEwcHgpIn0pKSxuTygiYWN0aXZlLWFzYyA8PT4gYWN0aXZlLWRlc2MiLEp4KHAkKSldKSxsZWZ0UG9pbnRlcjpLeCgibGVmdFBvaW50ZXIiLFt0TygiYWN0aXZlLWFzYywgYXNjIiwkeCh7dHJhbnNmb3JtOiJyb3RhdGUoLTQ1ZGVnKSJ9KSksdE8oImFjdGl2ZS1kZXNjLCBkZXNjIiwkeCh7dHJhbnNmb3JtOiJyb3RhdGUoNDVkZWcpIn0pKSxuTygiYWN0aXZlLWFzYyA8PT4gYWN0aXZlLWRlc2MiLEp4KHAkKSldKSxyaWdodFBvaW50ZXI6S3goInJpZ2h0UG9pbnRlciIsW3RPKCJhY3RpdmUtYXNjLCBhc2MiLCR4KHt0cmFuc2Zvcm06InJvdGF0ZSg0NWRlZykifSkpLHRPKCJhY3RpdmUtZGVzYywgZGVzYyIsJHgoe3RyYW5zZm9ybToicm90YXRlKC00NWRlZykifSkpLG5PKCJhY3RpdmUtYXNjIDw9PiBhY3RpdmUtZGVzYyIsSngocCQpKV0pLGFycm93T3BhY2l0eTpLeCgiYXJyb3dPcGFjaXR5IixbdE8oImRlc2MtdG8tYWN0aXZlLCBhc2MtdG8tYWN0aXZlLCBhY3RpdmUiLCR4KHtvcGFjaXR5OjF9KSksdE8oImRlc2MtdG8taGludCwgYXNjLXRvLWhpbnQsIGhpbnQiLCR4KHtvcGFjaXR5Oi41NH0pKSx0TygiaGludC10by1kZXNjLCBhY3RpdmUtdG8tZGVzYywgZGVzYywgaGludC10by1hc2MsIGFjdGl2ZS10by1hc2MsIGFzYywgdm9pZCIsJHgoe29wYWNpdHk6MH0pKSxuTygiKiA9PiBhc2MsICogPT4gZGVzYywgKiA9PiBhY3RpdmUsICogPT4gaGludCwgKiA9PiB2b2lkIixKeCgiMG1zIikpLG5PKCIqIDw9PiAqIixKeChwJCkpXSksYXJyb3dQb3NpdGlvbjpLeCgiYXJyb3dQb3NpdGlvbiIsW25PKCIqID0+IGRlc2MtdG8taGludCwgKiA9PiBkZXNjLXRvLWFjdGl2ZSIsSngocCQsZU8oWyR4KHt0cmFuc2Zvcm06InRyYW5zbGF0ZVkoLTI1JSkifSksJHgoe3RyYW5zZm9ybToidHJhbnNsYXRlWSgwKSJ9KV0pKSksbk8oIiogPT4gaGludC10by1kZXNjLCAqID0+IGFjdGl2ZS10by1kZXNjIixKeChwJCxlTyhbJHgoe3RyYW5zZm9ybToidHJhbnNsYXRlWSgwKSJ9KSwkeCh7dHJhbnNmb3JtOiJ0cmFuc2xhdGVZKDI1JSkifSldKSkpLG5PKCIqID0+IGFzYy10by1oaW50LCAqID0+IGFzYy10by1hY3RpdmUiLEp4KHAkLGVPKFskeCh7dHJhbnNmb3JtOiJ0cmFuc2xhdGVZKDI1JSkifSksJHgoe3RyYW5zZm9ybToidHJhbnNsYXRlWSgwKSJ9KV0pKSksbk8oIiogPT4gaGludC10by1hc2MsICogPT4gYWN0aXZlLXRvLWFzYyIsSngocCQsZU8oWyR4KHt0cmFuc2Zvcm06InRyYW5zbGF0ZVkoMCkifSksJHgoe3RyYW5zZm9ybToidHJhbnNsYXRlWSgtMjUlKSJ9KV0pKSksdE8oImRlc2MtdG8taGludCwgYXNjLXRvLWhpbnQsIGhpbnQsIGRlc2MtdG8tYWN0aXZlLCBhc2MtdG8tYWN0aXZlLCBhY3RpdmUiLCR4KHt0cmFuc2Zvcm06InRyYW5zbGF0ZVkoMCkifSkpLHRPKCJoaW50LXRvLWRlc2MsIGFjdGl2ZS10by1kZXNjLCBkZXNjIiwkeCh7dHJhbnNmb3JtOiJ0cmFuc2xhdGVZKC0yNSUpIn0pKSx0TygiaGludC10by1hc2MsIGFjdGl2ZS10by1hc2MsIGFzYyIsJHgoe3RyYW5zZm9ybToidHJhbnNsYXRlWSgyNSUpIn0pKV0pLGFsbG93Q2hpbGRyZW46S3goImFsbG93Q2hpbGRyZW4iLFtuTygiKiA8PT4gKiIsW2lPKCJAKiIsb08oKSx7b3B0aW9uYWw6ITB9KV0pXSl9OwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3MgdSR7Y29uc3RydWN0b3IoKXt0aGlzLmNoYW5nZXM9bmV3IHgsdGhpcy5zb3J0QnV0dG9uTGFiZWw9dD0+YENoYW5nZSBzb3J0aW5nIGZvciAke3R9YH19dSQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHUkKX0sdSQuybVwcm92PWxvKHtmYWN0b3J5OmZ1bmN0aW9uIHQoKXtyZXR1cm4gbmV3IHUkfSx0b2tlbjp1JCxwcm92aWRlZEluOiJyb290In0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIodSQsW3t0eXBlOkptLGFyZ3M6W3twcm92aWRlZEluOiJyb290In1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW119KSxudWxsKTtjb25zdCBmJD17cHJvdmlkZTp1JCxkZXBzOltbbmV3IF9zLG5ldyBNcyx1JF1dLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gZyQodCl7cmV0dXJuIHR8fG5ldyB1JH19LGgkPU56KAovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3N7fSk7Y2xhc3MgYiQgZXh0ZW5kcyBoJHtjb25zdHJ1Y3Rvcih0LGUsbixvLGksYSl7aWYoc3VwZXIoKSx0aGlzLl9pbnRsPXQsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9ZSx0aGlzLl9zb3J0PW4sdGhpcy5fY29sdW1uRGVmPW8sdGhpcy5fZm9jdXNNb25pdG9yPWksdGhpcy5fZWxlbWVudFJlZj1hLHRoaXMuX3Nob3dJbmRpY2F0b3JIaW50PSExLHRoaXMuX2Fycm93RGlyZWN0aW9uPSIiLHRoaXMuX2Rpc2FibGVWaWV3U3RhdGVBbmltYXRpb249ITEsdGhpcy5hcnJvd1Bvc2l0aW9uPSJhZnRlciIsIW4mJigidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSl0aHJvdyhmdW5jdGlvbiByKCl7cmV0dXJuIEVycm9yKCJNYXRTb3J0SGVhZGVyIG11c3QgYmUgcGxhY2VkIHdpdGhpbiBhIHBhcmVudCBlbGVtZW50IHdpdGggdGhlIE1hdFNvcnQgZGlyZWN0aXZlLiIpfSkoKTt0aGlzLl9oYW5kbGVTdGF0ZUNoYW5nZXMoKX1nZXQgZGlzYWJsZUNsZWFyKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVDbGVhcn1zZXQgZGlzYWJsZUNsZWFyKHQpe3RoaXMuX2Rpc2FibGVDbGVhcj1ySSh0KX1uZ09uSW5pdCgpeyF0aGlzLmlkJiZ0aGlzLl9jb2x1bW5EZWYmJih0aGlzLmlkPXRoaXMuX2NvbHVtbkRlZi5uYW1lKSx0aGlzLl91cGRhdGVBcnJvd0RpcmVjdGlvbigpLHRoaXMuX3NldEFuaW1hdGlvblRyYW5zaXRpb25TdGF0ZSh7dG9TdGF0ZTp0aGlzLl9pc1NvcnRlZCgpPyJhY3RpdmUiOnRoaXMuX2Fycm93RGlyZWN0aW9ufSksdGhpcy5fc29ydC5yZWdpc3Rlcih0aGlzKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9mb2N1c01vbml0b3IubW9uaXRvcih0aGlzLl9lbGVtZW50UmVmLCEwKS5zdWJzY3JpYmUoKHQ9Pntjb25zdCBlPSEhdDtlIT09dGhpcy5fc2hvd0luZGljYXRvckhpbnQmJih0aGlzLl9zZXRJbmRpY2F0b3JIaW50VmlzaWJsZShlKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcodGhpcy5fZWxlbWVudFJlZiksdGhpcy5fc29ydC5kZXJlZ2lzdGVyKHRoaXMpLHRoaXMuX3JlcmVuZGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9X3NldEluZGljYXRvckhpbnRWaXNpYmxlKHQpe3RoaXMuX2lzRGlzYWJsZWQoKSYmdHx8KHRoaXMuX3Nob3dJbmRpY2F0b3JIaW50PXQsdGhpcy5faXNTb3J0ZWQoKXx8KHRoaXMuX3VwZGF0ZUFycm93RGlyZWN0aW9uKCksdGhpcy5fc2V0QW5pbWF0aW9uVHJhbnNpdGlvblN0YXRlKHRoaXMuX3Nob3dJbmRpY2F0b3JIaW50P3tmcm9tU3RhdGU6dGhpcy5fYXJyb3dEaXJlY3Rpb24sdG9TdGF0ZToiaGludCJ9Ontmcm9tU3RhdGU6ImhpbnQiLHRvU3RhdGU6dGhpcy5fYXJyb3dEaXJlY3Rpb259KSkpfV9zZXRBbmltYXRpb25UcmFuc2l0aW9uU3RhdGUodCl7dGhpcy5fdmlld1N0YXRlPXQsdGhpcy5fZGlzYWJsZVZpZXdTdGF0ZUFuaW1hdGlvbiYmKHRoaXMuX3ZpZXdTdGF0ZT17dG9TdGF0ZTp0LnRvU3RhdGV9KX1fdG9nZ2xlT25JbnRlcmFjdGlvbigpe3RoaXMuX3NvcnQuc29ydCh0aGlzKSwiaGludCIhPT10aGlzLl92aWV3U3RhdGUudG9TdGF0ZSYmImFjdGl2ZSIhPT10aGlzLl92aWV3U3RhdGUudG9TdGF0ZXx8KHRoaXMuX2Rpc2FibGVWaWV3U3RhdGVBbmltYXRpb249ITApfV9oYW5kbGVDbGljaygpe3RoaXMuX2lzRGlzYWJsZWQoKXx8dGhpcy5fc29ydC5zb3J0KHRoaXMpfV9oYW5kbGVLZXlkb3duKHQpe3RoaXMuX2lzRGlzYWJsZWQoKXx8dC5rZXlDb2RlIT09bkkmJnQua2V5Q29kZSE9PXRJfHwodC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX3RvZ2dsZU9uSW50ZXJhY3Rpb24oKSl9X2lzU29ydGVkKCl7cmV0dXJuIHRoaXMuX3NvcnQuYWN0aXZlPT10aGlzLmlkJiYoImFzYyI9PT10aGlzLl9zb3J0LmRpcmVjdGlvbnx8ImRlc2MiPT09dGhpcy5fc29ydC5kaXJlY3Rpb24pfV9nZXRBcnJvd0RpcmVjdGlvblN0YXRlKCl7cmV0dXJuYCR7dGhpcy5faXNTb3J0ZWQoKT8iYWN0aXZlLSI6IiJ9JHt0aGlzLl9hcnJvd0RpcmVjdGlvbn1gfV9nZXRBcnJvd1ZpZXdTdGF0ZSgpe2NvbnN0IHQ9dGhpcy5fdmlld1N0YXRlLmZyb21TdGF0ZTtyZXR1cm4odD9gJHt0fS10by1gOiIiKSt0aGlzLl92aWV3U3RhdGUudG9TdGF0ZX1fdXBkYXRlQXJyb3dEaXJlY3Rpb24oKXt0aGlzLl9hcnJvd0RpcmVjdGlvbj10aGlzLl9pc1NvcnRlZCgpP3RoaXMuX3NvcnQuZGlyZWN0aW9uOnRoaXMuc3RhcnR8fHRoaXMuX3NvcnQuc3RhcnR9X2lzRGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fc29ydC5kaXNhYmxlZHx8dGhpcy5kaXNhYmxlZH1fZ2V0QXJpYVNvcnRBdHRyaWJ1dGUoKXtyZXR1cm4gdGhpcy5faXNTb3J0ZWQoKT8iYXNjIj09dGhpcy5fc29ydC5kaXJlY3Rpb24/ImFzY2VuZGluZyI6ImRlc2NlbmRpbmciOiJub25lIn1fcmVuZGVyQXJyb3coKXtyZXR1cm4hdGhpcy5faXNEaXNhYmxlZCgpfHx0aGlzLl9pc1NvcnRlZCgpfV9oYW5kbGVTdGF0ZUNoYW5nZXMoKXt0aGlzLl9yZXJlbmRlclN1YnNjcmlwdGlvbj1XdCh0aGlzLl9zb3J0LnNvcnRDaGFuZ2UsdGhpcy5fc29ydC5fc3RhdGVDaGFuZ2VzLHRoaXMuX2ludGwuY2hhbmdlcykuc3Vic2NyaWJlKCgoKT0+e3RoaXMuX2lzU29ydGVkKCkmJih0aGlzLl91cGRhdGVBcnJvd0RpcmVjdGlvbigpLCJoaW50IiE9PXRoaXMuX3ZpZXdTdGF0ZS50b1N0YXRlJiYiYWN0aXZlIiE9PXRoaXMuX3ZpZXdTdGF0ZS50b1N0YXRlfHwodGhpcy5fZGlzYWJsZVZpZXdTdGF0ZUFuaW1hdGlvbj0hMCksdGhpcy5fc2V0QW5pbWF0aW9uVHJhbnNpdGlvblN0YXRlKHtmcm9tU3RhdGU6dGhpcy5fYXJyb3dEaXJlY3Rpb24sdG9TdGF0ZToiYWN0aXZlIn0pLHRoaXMuX3Nob3dJbmRpY2F0b3JIaW50PSExKSwhdGhpcy5faXNTb3J0ZWQoKSYmdGhpcy5fdmlld1N0YXRlJiYiYWN0aXZlIj09PXRoaXMuX3ZpZXdTdGF0ZS50b1N0YXRlJiYodGhpcy5fZGlzYWJsZVZpZXdTdGF0ZUFuaW1hdGlvbj0hMSx0aGlzLl9zZXRBbmltYXRpb25UcmFuc2l0aW9uU3RhdGUoe2Zyb21TdGF0ZToiYWN0aXZlIix0b1N0YXRlOnRoaXMuX2Fycm93RGlyZWN0aW9ufSkpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSkpfX1iJC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8YiQpKE11KHUkKSxNdShIaCksTXUoZCQsOCksTXUoIk1BVF9TT1JUX0hFQURFUl9DT0xVTU5fREVGIiw4KSxNdShweiksTXUoY2gpKX0sYiQuybVjbXA9VW8oe3R5cGU6YiQsc2VsZWN0b3JzOltbIiIsIm1hdC1zb3J0LWhlYWRlciIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1zb3J0LWhlYWRlciJdLGhvc3RWYXJzOjMsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJk51KCJjbGljayIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5faGFuZGxlQ2xpY2soKX0pKSgia2V5ZG93biIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4uX2hhbmRsZUtleWRvd24oZSl9KSkoIm1vdXNlZW50ZXIiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uX3NldEluZGljYXRvckhpbnRWaXNpYmxlKCEwKX0pKSgibW91c2VsZWF2ZSIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5fc2V0SW5kaWNhdG9ySGludFZpc2libGUoITEpfSkpLDImZSYmKE5tKCJhcmlhLXNvcnQiLG4uX2dldEFyaWFTb3J0QXR0cmlidXRlKCkpLGFmKCJtYXQtc29ydC1oZWFkZXItZGlzYWJsZWQiLG4uX2lzRGlzYWJsZWQoKSkpfSxpbnB1dHM6e2Rpc2FibGVkOiJkaXNhYmxlZCIsYXJyb3dQb3NpdGlvbjoiYXJyb3dQb3NpdGlvbiIsZGlzYWJsZUNsZWFyOiJkaXNhYmxlQ2xlYXIiLGlkOlsibWF0LXNvcnQtaGVhZGVyIiwiaWQiXSxzdGFydDoic3RhcnQifSxleHBvcnRBczpbIm1hdFNvcnRIZWFkZXIiXSxmZWF0dXJlczpbZ21dLGF0dHJzOlsibWF0LXNvcnQtaGVhZGVyIiwiIl0sbmdDb250ZW50U2VsZWN0b3JzOlsiKiJdLGRlY2xzOjQsdmFyczo2LGNvbnN0czpbWyJyb2xlIiwiYnV0dG9uIiwxLCJtYXQtc29ydC1oZWFkZXItY29udGFpbmVyIiwibWF0LWZvY3VzLWluZGljYXRvciJdLFsxLCJtYXQtc29ydC1oZWFkZXItY29udGVudCJdLFsiY2xhc3MiLCJtYXQtc29ydC1oZWFkZXItYXJyb3ciLDQsIm5nSWYiXSxbMSwibWF0LXNvcnQtaGVhZGVyLWFycm93Il0sWzEsIm1hdC1zb3J0LWhlYWRlci1zdGVtIl0sWzEsIm1hdC1zb3J0LWhlYWRlci1pbmRpY2F0b3IiXSxbMSwibWF0LXNvcnQtaGVhZGVyLXBvaW50ZXItbGVmdCJdLFsxLCJtYXQtc29ydC1oZWFkZXItcG9pbnRlci1yaWdodCJdLFsxLCJtYXQtc29ydC1oZWFkZXItcG9pbnRlci1taWRkbGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKFZ1KCksT3UoMCwiZGl2IiwwKSxPdSgxLCJkaXYiLDEpLGp1KDIpLFB1KCksV20oMyxzJCw2LDYsImRpdiIsMiksUHUoKSksMiZlJiYoYWYoIm1hdC1zb3J0LWhlYWRlci1zb3J0ZWQiLG4uX2lzU29ydGVkKCkpKCJtYXQtc29ydC1oZWFkZXItcG9zaXRpb24tYmVmb3JlIiwiYmVmb3JlIj09bi5hcnJvd1Bvc2l0aW9uKSxObSgidGFiaW5kZXgiLG4uX2lzRGlzYWJsZWQoKT9udWxsOjApLEpjKDMpLHZ1KCJuZ0lmIixuLl9yZW5kZXJBcnJvdygpKSl9LGRpcmVjdGl2ZXM6W2F2XSxzdHlsZXM6WyIubWF0LXNvcnQtaGVhZGVyLWNvbnRhaW5lcntkaXNwbGF5OmZsZXg7Y3Vyc29yOnBvaW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2xldHRlci1zcGFjaW5nOm5vcm1hbDtvdXRsaW5lOjB9W21hdC1zb3J0LWhlYWRlcl0uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1zb3J0LWhlYWRlci1jb250YWluZXIsW21hdC1zb3J0LWhlYWRlcl0uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LXNvcnQtaGVhZGVyLWNvbnRhaW5lcntib3JkZXItYm90dG9tOnNvbGlkIDFweCBjdXJyZW50Q29sb3J9Lm1hdC1zb3J0LWhlYWRlci1kaXNhYmxlZCAubWF0LXNvcnQtaGVhZGVyLWNvbnRhaW5lcntjdXJzb3I6ZGVmYXVsdH0ubWF0LXNvcnQtaGVhZGVyLWNvbnRlbnR7dGV4dC1hbGlnbjpjZW50ZXI7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0ubWF0LXNvcnQtaGVhZGVyLXBvc2l0aW9uLWJlZm9yZXtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZX0ubWF0LXNvcnQtaGVhZGVyLWFycm93e2hlaWdodDoxMnB4O3dpZHRoOjEycHg7bWluLXdpZHRoOjEycHg7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpmbGV4O29wYWNpdHk6MH0ubWF0LXNvcnQtaGVhZGVyLWFycm93LFtkaXI9cnRsXSAubWF0LXNvcnQtaGVhZGVyLXBvc2l0aW9uLWJlZm9yZSAubWF0LXNvcnQtaGVhZGVyLWFycm93e21hcmdpbjowIDAgMCA2cHh9Lm1hdC1zb3J0LWhlYWRlci1wb3NpdGlvbi1iZWZvcmUgLm1hdC1zb3J0LWhlYWRlci1hcnJvdyxbZGlyPXJ0bF0gLm1hdC1zb3J0LWhlYWRlci1hcnJvd3ttYXJnaW46MCA2cHggMCAwfS5tYXQtc29ydC1oZWFkZXItc3RlbXtiYWNrZ3JvdW5kOmN1cnJlbnRDb2xvcjtoZWlnaHQ6MTBweDt3aWR0aDoycHg7bWFyZ2luOmF1dG87ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc29ydC1oZWFkZXItc3RlbXt3aWR0aDowO2JvcmRlci1sZWZ0OnNvbGlkIDJweH0ubWF0LXNvcnQtaGVhZGVyLWluZGljYXRvcnt3aWR0aDoxMDAlO2hlaWdodDoycHg7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjB9Lm1hdC1zb3J0LWhlYWRlci1wb2ludGVyLW1pZGRsZXttYXJnaW46YXV0bztoZWlnaHQ6MnB4O3dpZHRoOjJweDtiYWNrZ3JvdW5kOmN1cnJlbnRDb2xvcjt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc29ydC1oZWFkZXItcG9pbnRlci1taWRkbGV7d2lkdGg6MDtoZWlnaHQ6MDtib3JkZXItdG9wOnNvbGlkIDJweDtib3JkZXItbGVmdDpzb2xpZCAycHh9Lm1hdC1zb3J0LWhlYWRlci1wb2ludGVyLWxlZnQsLm1hdC1zb3J0LWhlYWRlci1wb2ludGVyLXJpZ2h0e2JhY2tncm91bmQ6Y3VycmVudENvbG9yO3dpZHRoOjZweDtoZWlnaHQ6MnB4O3Bvc2l0aW9uOmFic29sdXRlO3RvcDowfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zb3J0LWhlYWRlci1wb2ludGVyLWxlZnQsLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXNvcnQtaGVhZGVyLXBvaW50ZXItcmlnaHR7d2lkdGg6MDtoZWlnaHQ6MDtib3JkZXItbGVmdDpzb2xpZCA2cHg7Ym9yZGVyLXRvcDpzb2xpZCAycHh9Lm1hdC1zb3J0LWhlYWRlci1wb2ludGVyLWxlZnR7dHJhbnNmb3JtLW9yaWdpbjpyaWdodDtsZWZ0OjB9Lm1hdC1zb3J0LWhlYWRlci1wb2ludGVyLXJpZ2h0e3RyYW5zZm9ybS1vcmlnaW46bGVmdDtyaWdodDowfVxuIl0sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbbSQuaW5kaWNhdG9yLG0kLmxlZnRQb2ludGVyLG0kLnJpZ2h0UG9pbnRlcixtJC5hcnJvd09wYWNpdHksbSQuYXJyb3dQb3NpdGlvbixtJC5hbGxvd0NoaWxkcmVuXX0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxiJC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOnUkfSx7dHlwZTpIaH0se3R5cGU6ZCQsZGVjb3JhdG9yczpbe3R5cGU6X3N9XX0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6WyJNQVRfU09SVF9IRUFERVJfQ09MVU1OX0RFRiJdfSx7dHlwZTpfc31dfSx7dHlwZTpwen0se3R5cGU6Y2h9XSxiJC5wcm9wRGVjb3JhdG9ycz17aWQ6W3t0eXBlOnlfLGFyZ3M6WyJtYXQtc29ydC1oZWFkZXIiXX1dLGFycm93UG9zaXRpb246W3t0eXBlOnlffV0sc3RhcnQ6W3t0eXBlOnlffV0sZGlzYWJsZUNsZWFyOlt7dHlwZTp5X31dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGIkLFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6IlttYXQtc29ydC1oZWFkZXJdIixleHBvcnRBczoibWF0U29ydEhlYWRlciIsdGVtcGxhdGU6J1x4M2MhLS1cbiAgV2Ugc2V0IHRoZSBgdGFiaW5kZXhgIG9uIGFuIGVsZW1lbnQgaW5zaWRlIHRoZSB0YWJsZSBoZWFkZXIsIHJhdGhlciB0aGFuIHRoZSBoZWFkZXIgaXRzZWxmLFxuICBiZWNhdXNlIG9mIGEgYnVnIGluIE5WREEgd2hlcmUgaGF2aW5nIGEgYHRhYmluZGV4YCBvbiBhIGB0aGAgYnJlYWtzIGtleWJvYXJkIG5hdmlnYXRpb24gaW4gdGhlXG4gIHRhYmxlIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL252YWNjZXNzL252ZGEvaXNzdWVzLzc3MTgpLiBUaGlzIGFsbG93cyBmb3IgdGhlIGhlYWRlciB0byBib3RoXG4gIGJlIGZvY3VzYWJsZSwgYW5kIGhhdmUgc2NyZWVuIHJlYWRlcnMgcmVhZCBvdXQgaXRzIGBhcmlhLXNvcnRgIHN0YXRlLiBXZSBwcmVmZXIgdGhpcyBhcHByb2FjaFxuICBvdmVyIGhhdmluZyBhIGJ1dHRvbiB3aXRoIGFuIGBhcmlhLWxhYmVsYCBpbnNpZGUgdGhlIGhlYWRlciwgYmVjYXVzZSB0aGUgYnV0dG9uXCdzIGBhcmlhLWxhYmVsYFxuICB3aWxsIGJlIHJlYWQgb3V0IGFzIHRoZSB1c2VyIGlzIG5hdmlnYXRpbmcgdGhlIHRhYmxlXCdzIGNlbGwgKHNlZSAjMTMwMTIpLlxuXG4gIFRoZSBhcHByb2FjaCBpcyBiYXNlZCBvZmYgb2Y6IGh0dHBzOi8vZGVxdWV1bml2ZXJzaXR5LmNvbS9saWJyYXJ5L2FyaWEvdGFibGVzL3NmLXNvcnRhYmxlLWdyaWRcbi0tXHgzZVxuPGRpdiBjbGFzcz0ibWF0LXNvcnQtaGVhZGVyLWNvbnRhaW5lciBtYXQtZm9jdXMtaW5kaWNhdG9yIlxuICAgICBbY2xhc3MubWF0LXNvcnQtaGVhZGVyLXNvcnRlZF09Il9pc1NvcnRlZCgpIlxuICAgICBbY2xhc3MubWF0LXNvcnQtaGVhZGVyLXBvc2l0aW9uLWJlZm9yZV09ImFycm93UG9zaXRpb24gPT0gXCdiZWZvcmVcJyJcbiAgICAgW2F0dHIudGFiaW5kZXhdPSJfaXNEaXNhYmxlZCgpID8gbnVsbCA6IDAiXG4gICAgIHJvbGU9ImJ1dHRvbiI+XG5cbiAgXHgzYyEtLVxuICAgIFRPRE8oY3Jpc2JldG8pOiB0aGlzIGRpdiBpc25cJ3Qgc3RyaWN0bHkgbmVjZXNzYXJ5LCBidXQgd2UgaGF2ZSB0byBrZWVwIGl0IGR1ZSB0byBhIGxhcmdlXG4gICAgbnVtYmVyIG9mIHNjcmVlbnNob3QgZGlmZiBmYWlsdXJlcy4gSXQgc2hvdWxkIGJlIHJlbW92ZWQgZXZlbnR1YWxseS4gTm90ZSB0aGF0IHRoZSBkaWZmZXJlbmNlXG4gICAgaXNuXCd0IHZpc2libGUgd2l0aCBhIHNob3J0ZXIgaGVhZGVyLCBidXQgb25jZSBpdCBicmVha3MgdXAgaW50byBtdWx0aXBsZSBsaW5lcywgdGhpcyBlbGVtZW50XG4gICAgY2F1c2VzIGl0IHRvIGJlIGNlbnRlci1hbGlnbmVkLCB3aGVyZWFzIHJlbW92aW5nIGl0IHdpbGwga2VlcCB0aGUgdGV4dCB0byB0aGUgbGVmdC5cbiAgLS1ceDNlXG4gIDxkaXYgY2xhc3M9Im1hdC1zb3J0LWhlYWRlci1jb250ZW50Ij5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gIDwvZGl2PlxuXG4gIFx4M2MhLS0gRGlzYWJsZSBhbmltYXRpb25zIHdoaWxlIGEgY3VycmVudCBhbmltYXRpb24gaXMgcnVubmluZyAtLVx4M2VcbiAgPGRpdiBjbGFzcz0ibWF0LXNvcnQtaGVhZGVyLWFycm93IlxuICAgICAgICpuZ0lmPSJfcmVuZGVyQXJyb3coKSJcbiAgICAgICBbQGFycm93T3BhY2l0eV09Il9nZXRBcnJvd1ZpZXdTdGF0ZSgpIlxuICAgICAgIFtAYXJyb3dQb3NpdGlvbl09Il9nZXRBcnJvd1ZpZXdTdGF0ZSgpIlxuICAgICAgIFtAYWxsb3dDaGlsZHJlbl09Il9nZXRBcnJvd0RpcmVjdGlvblN0YXRlKCkiXG4gICAgICAgKEBhcnJvd1Bvc2l0aW9uLnN0YXJ0KT0iX2Rpc2FibGVWaWV3U3RhdGVBbmltYXRpb24gPSB0cnVlIlxuICAgICAgIChAYXJyb3dQb3NpdGlvbi5kb25lKT0iX2Rpc2FibGVWaWV3U3RhdGVBbmltYXRpb24gPSBmYWxzZSI+XG4gICAgPGRpdiBjbGFzcz0ibWF0LXNvcnQtaGVhZGVyLXN0ZW0iPjwvZGl2PlxuICAgIDxkaXYgY2xhc3M9Im1hdC1zb3J0LWhlYWRlci1pbmRpY2F0b3IiIFtAaW5kaWNhdG9yXT0iX2dldEFycm93RGlyZWN0aW9uU3RhdGUoKSI+XG4gICAgICA8ZGl2IGNsYXNzPSJtYXQtc29ydC1oZWFkZXItcG9pbnRlci1sZWZ0IiBbQGxlZnRQb2ludGVyXT0iX2dldEFycm93RGlyZWN0aW9uU3RhdGUoKSI+PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJtYXQtc29ydC1oZWFkZXItcG9pbnRlci1yaWdodCIgW0ByaWdodFBvaW50ZXJdPSJfZ2V0QXJyb3dEaXJlY3Rpb25TdGF0ZSgpIj48L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9Im1hdC1zb3J0LWhlYWRlci1wb2ludGVyLW1pZGRsZSI+PC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLGhvc3Q6e2NsYXNzOiJtYXQtc29ydC1oZWFkZXIiLCIoY2xpY2spIjoiX2hhbmRsZUNsaWNrKCkiLCIoa2V5ZG93bikiOiJfaGFuZGxlS2V5ZG93bigkZXZlbnQpIiwiKG1vdXNlZW50ZXIpIjoiX3NldEluZGljYXRvckhpbnRWaXNpYmxlKHRydWUpIiwiKG1vdXNlbGVhdmUpIjoiX3NldEluZGljYXRvckhpbnRWaXNpYmxlKGZhbHNlKSIsIlthdHRyLmFyaWEtc29ydF0iOiJfZ2V0QXJpYVNvcnRBdHRyaWJ1dGUoKSIsIltjbGFzcy5tYXQtc29ydC1oZWFkZXItZGlzYWJsZWRdIjoiX2lzRGlzYWJsZWQoKSJ9LGVuY2Fwc3VsYXRpb246UG8uTm9uZSxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNoLGlucHV0czpbImRpc2FibGVkIl0sYW5pbWF0aW9uczpbbSQuaW5kaWNhdG9yLG0kLmxlZnRQb2ludGVyLG0kLnJpZ2h0UG9pbnRlcixtJC5hcnJvd09wYWNpdHksbSQuYXJyb3dQb3NpdGlvbixtJC5hbGxvd0NoaWxkcmVuXSxzdHlsZXM6WyIubWF0LXNvcnQtaGVhZGVyLWNvbnRhaW5lcntkaXNwbGF5OmZsZXg7Y3Vyc29yOnBvaW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2xldHRlci1zcGFjaW5nOm5vcm1hbDtvdXRsaW5lOjB9W21hdC1zb3J0LWhlYWRlcl0uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1zb3J0LWhlYWRlci1jb250YWluZXIsW21hdC1zb3J0LWhlYWRlcl0uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LXNvcnQtaGVhZGVyLWNvbnRhaW5lcntib3JkZXItYm90dG9tOnNvbGlkIDFweCBjdXJyZW50Q29sb3J9Lm1hdC1zb3J0LWhlYWRlci1kaXNhYmxlZCAubWF0LXNvcnQtaGVhZGVyLWNvbnRhaW5lcntjdXJzb3I6ZGVmYXVsdH0ubWF0LXNvcnQtaGVhZGVyLWNvbnRlbnR7dGV4dC1hbGlnbjpjZW50ZXI7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0ubWF0LXNvcnQtaGVhZGVyLXBvc2l0aW9uLWJlZm9yZXtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZX0ubWF0LXNvcnQtaGVhZGVyLWFycm93e2hlaWdodDoxMnB4O3dpZHRoOjEycHg7bWluLXdpZHRoOjEycHg7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpmbGV4O29wYWNpdHk6MH0ubWF0LXNvcnQtaGVhZGVyLWFycm93LFtkaXI9cnRsXSAubWF0LXNvcnQtaGVhZGVyLXBvc2l0aW9uLWJlZm9yZSAubWF0LXNvcnQtaGVhZGVyLWFycm93e21hcmdpbjowIDAgMCA2cHh9Lm1hdC1zb3J0LWhlYWRlci1wb3NpdGlvbi1iZWZvcmUgLm1hdC1zb3J0LWhlYWRlci1hcnJvdyxbZGlyPXJ0bF0gLm1hdC1zb3J0LWhlYWRlci1hcnJvd3ttYXJnaW46MCA2cHggMCAwfS5tYXQtc29ydC1oZWFkZXItc3RlbXtiYWNrZ3JvdW5kOmN1cnJlbnRDb2xvcjtoZWlnaHQ6MTBweDt3aWR0aDoycHg7bWFyZ2luOmF1dG87ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc29ydC1oZWFkZXItc3RlbXt3aWR0aDowO2JvcmRlci1sZWZ0OnNvbGlkIDJweH0ubWF0LXNvcnQtaGVhZGVyLWluZGljYXRvcnt3aWR0aDoxMDAlO2hlaWdodDoycHg7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjB9Lm1hdC1zb3J0LWhlYWRlci1wb2ludGVyLW1pZGRsZXttYXJnaW46YXV0bztoZWlnaHQ6MnB4O3dpZHRoOjJweDtiYWNrZ3JvdW5kOmN1cnJlbnRDb2xvcjt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc29ydC1oZWFkZXItcG9pbnRlci1taWRkbGV7d2lkdGg6MDtoZWlnaHQ6MDtib3JkZXItdG9wOnNvbGlkIDJweDtib3JkZXItbGVmdDpzb2xpZCAycHh9Lm1hdC1zb3J0LWhlYWRlci1wb2ludGVyLWxlZnQsLm1hdC1zb3J0LWhlYWRlci1wb2ludGVyLXJpZ2h0e2JhY2tncm91bmQ6Y3VycmVudENvbG9yO3dpZHRoOjZweDtoZWlnaHQ6MnB4O3Bvc2l0aW9uOmFic29sdXRlO3RvcDowfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zb3J0LWhlYWRlci1wb2ludGVyLWxlZnQsLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXNvcnQtaGVhZGVyLXBvaW50ZXItcmlnaHR7d2lkdGg6MDtoZWlnaHQ6MDtib3JkZXItbGVmdDpzb2xpZCA2cHg7Ym9yZGVyLXRvcDpzb2xpZCAycHh9Lm1hdC1zb3J0LWhlYWRlci1wb2ludGVyLWxlZnR7dHJhbnNmb3JtLW9yaWdpbjpyaWdodDtsZWZ0OjB9Lm1hdC1zb3J0LWhlYWRlci1wb2ludGVyLXJpZ2h0e3RyYW5zZm9ybS1vcmlnaW46bGVmdDtyaWdodDowfVxuIl19XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTp1JH0se3R5cGU6SGh9LHt0eXBlOmQkLGRlY29yYXRvcnM6W3t0eXBlOl9zfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOlsiTUFUX1NPUlRfSEVBREVSX0NPTFVNTl9ERUYiXX0se3R5cGU6X3N9XX0se3R5cGU6cHp9LHt0eXBlOmNofV19KSx7YXJyb3dQb3NpdGlvbjpbe3R5cGU6eV99XSxkaXNhYmxlQ2xlYXI6W3t0eXBlOnlffV0saWQ6W3t0eXBlOnlfLGFyZ3M6WyJtYXQtc29ydC1oZWFkZXIiXX1dLHN0YXJ0Olt7dHlwZTp5X31dfSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyB5JHt9eSQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHkkKX0seSQuybVtb2Q9Wm8oe3R5cGU6eSR9KSx5JC7JtWluaj1jbyh7cHJvdmlkZXJzOltmJF0saW1wb3J0czpbW0J2LFR6XV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKHkkLHtkZWNsYXJhdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm5bZCQsYiRdfSxpbXBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW0J2LFR6XX0sZXhwb3J0czpmdW5jdGlvbigpe3JldHVybltkJCxiJF19fSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYih5JCxbe3R5cGU6a18sYXJnczpbe2ltcG9ydHM6W0J2LFR6XSxleHBvcnRzOltkJCxiJF0sZGVjbGFyYXRpb25zOltkJCxiJF0scHJvdmlkZXJzOltmJF19XX1dLG51bGwsbnVsbCk7Y29uc3QgXyQ9W1tbImNhcHRpb24iXV0sW1siY29sZ3JvdXAiXSxbImNvbCJdXV07ZnVuY3Rpb24gQyQodCxlKXtpZigxJnQmJihPdSgwLCJ0aCIsMyksTWYoMSksUHUoKSksMiZ0KXtjb25zdCB0PUx1KCk7b2YoInRleHQtYWxpZ24iLHQuanVzdGlmeSksSmMoMSkseGYoIiAiLHQuaGVhZGVyVGV4dCwiICIpfX1mdW5jdGlvbiBNJCh0LGUpe2lmKDEmdCYmKE91KDAsInRkIiw0KSxNZigxKSxQdSgpKSwyJnQpe2NvbnN0IHQ9ZS4kaW1wbGljaXQsbj1MdSgpO29mKCJ0ZXh0LWFsaWduIixuLmp1c3RpZnkpLEpjKDEpLHhmKCIgIixuLmRhdGFBY2Nlc3Nvcih0LG4ubmFtZSksIiAiKX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIHYkKHQpe3JldHVybiBjbGFzcyBleHRlbmRzIHR7Y29uc3RydWN0b3IoLi4udCl7c3VwZXIoLi4udCksdGhpcy5fc3RpY2t5PSExLHRoaXMuX2hhc1N0aWNreUNoYW5nZWQ9ITF9Z2V0IHN0aWNreSgpe3JldHVybiB0aGlzLl9zdGlja3l9c2V0IHN0aWNreSh0KXtjb25zdCBlPXRoaXMuX3N0aWNreTt0aGlzLl9zdGlja3k9ckkodCksdGhpcy5faGFzU3RpY2t5Q2hhbmdlZD1lIT09dGhpcy5fc3RpY2t5fWhhc1N0aWNreUNoYW5nZWQoKXtjb25zdCB0PXRoaXMuX2hhc1N0aWNreUNoYW5nZWQ7cmV0dXJuIHRoaXMuX2hhc1N0aWNreUNoYW5nZWQ9ITEsdH1yZXNldFN0aWNreUNoYW5nZWQoKXt0aGlzLl9oYXNTdGlja3lDaGFuZ2VkPSExfX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NvbnN0IHgkPW5ldyBOcigiQ0RLX1RBQkxFIiksTyQ9bmV3IE5yKCJ0ZXh0LWNvbHVtbi1vcHRpb25zIik7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyBQJHtjb25zdHJ1Y3Rvcih0KXt0aGlzLnRlbXBsYXRlPXR9fVAkLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxQJCkoTXUoVWgpKX0sUCQuybVkaXI9Sm8oe3R5cGU6UCQsc2VsZWN0b3JzOltbIiIsImNka0NlbGxEZWYiLCIiXV19KSxQJC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOlVofV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihQJCxbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJbY2RrQ2VsbERlZl0ifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6VWh9XX0pLG51bGwpO2NsYXNzIHcke2NvbnN0cnVjdG9yKHQpe3RoaXMudGVtcGxhdGU9dH19dyQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHckKShNdShVaCkpfSx3JC7JtWRpcj1Kbyh7dHlwZTp3JCxzZWxlY3RvcnM6W1siIiwiY2RrSGVhZGVyQ2VsbERlZiIsIiJdXX0pLHckLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6VWh9XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHckLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6IltjZGtIZWFkZXJDZWxsRGVmXSJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpVaH1dfSksbnVsbCk7Y2xhc3MgayR7Y29uc3RydWN0b3IodCl7dGhpcy50ZW1wbGF0ZT10fX1rJC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8ayQpKE11KFVoKSl9LGskLsm1ZGlyPUpvKHt0eXBlOmskLHNlbGVjdG9yczpbWyIiLCJjZGtGb290ZXJDZWxsRGVmIiwiIl1dfSksayQuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpVaH1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoayQsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoiW2Nka0Zvb3RlckNlbGxEZWZdIn1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOlVofV19KSxudWxsKTtjb25zdCBTJD12JChjbGFzc3t9KTtjbGFzcyBEJCBleHRlbmRzIFMke2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5fdGFibGU9dCx0aGlzLl9zdGlja3lFbmQ9ITF9Z2V0IG5hbWUoKXtyZXR1cm4gdGhpcy5fbmFtZX1zZXQgbmFtZSh0KXt0aGlzLl9zZXROYW1lSW5wdXQodCl9Z2V0IHN0aWNreUVuZCgpe3JldHVybiB0aGlzLl9zdGlja3lFbmR9c2V0IHN0aWNreUVuZCh0KXtjb25zdCBlPXRoaXMuX3N0aWNreUVuZDt0aGlzLl9zdGlja3lFbmQ9ckkodCksdGhpcy5faGFzU3RpY2t5Q2hhbmdlZD1lIT09dGhpcy5fc3RpY2t5RW5kfV91cGRhdGVDb2x1bW5Dc3NDbGFzc05hbWUoKXt0aGlzLl9jb2x1bW5Dc3NDbGFzc05hbWU9W2BjZGstY29sdW1uLSR7dGhpcy5jc3NDbGFzc0ZyaWVuZGx5TmFtZX1gXX1fc2V0TmFtZUlucHV0KHQpe3QmJih0aGlzLl9uYW1lPXQsdGhpcy5jc3NDbGFzc0ZyaWVuZGx5TmFtZT10LnJlcGxhY2UoL1teYS16MC05Xy1dL2dpLCItIiksdGhpcy5fdXBkYXRlQ29sdW1uQ3NzQ2xhc3NOYW1lKCkpfX1EJC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8RCQpKE11KHgkLDgpKX0sRCQuybVkaXI9Sm8oe3R5cGU6RCQsc2VsZWN0b3JzOltbIiIsImNka0NvbHVtbkRlZiIsIiJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbiB0KGUsbixvKXtpZigxJmUmJihHYihvLFAkLDEpLEdiKG8sdyQsMSksR2IobyxrJCwxKSksMiZlKXtsZXQgdDtVYih0PVliKCkpJiYobi5jZWxsPXQuZmlyc3QpLFViKHQ9WWIoKSkmJihuLmhlYWRlckNlbGw9dC5maXJzdCksVWIodD1ZYigpKSYmKG4uZm9vdGVyQ2VsbD10LmZpcnN0KX19LGlucHV0czp7c3RpY2t5OiJzdGlja3kiLG5hbWU6WyJjZGtDb2x1bW5EZWYiLCJuYW1lIl0sc3RpY2t5RW5kOiJzdGlja3lFbmQifSxmZWF0dXJlczpbaWgoW3twcm92aWRlOiJNQVRfU09SVF9IRUFERVJfQ09MVU1OX0RFRiIsdXNlRXhpc3Rpbmc6RCR9XSksZ21dfSksRCQuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbeCRdfSx7dHlwZTpfc31dfV0sRCQucHJvcERlY29yYXRvcnM9e25hbWU6W3t0eXBlOnlfLGFyZ3M6WyJjZGtDb2x1bW5EZWYiXX1dLHN0aWNreUVuZDpbe3R5cGU6eV8sYXJnczpbInN0aWNreUVuZCJdfV0sY2VsbDpbe3R5cGU6SHIsYXJnczpbUCRdfV0saGVhZGVyQ2VsbDpbe3R5cGU6SHIsYXJnczpbdyRdfV0sZm9vdGVyQ2VsbDpbe3R5cGU6SHIsYXJnczpbayRdfV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoRCQsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoiW2Nka0NvbHVtbkRlZl0iLGlucHV0czpbInN0aWNreSJdLHByb3ZpZGVyczpbe3Byb3ZpZGU6Ik1BVF9TT1JUX0hFQURFUl9DT0xVTU5fREVGIix1c2VFeGlzdGluZzpEJH1dfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W3gkXX0se3R5cGU6X3N9XX1dfSkse25hbWU6W3t0eXBlOnlfLGFyZ3M6WyJjZGtDb2x1bW5EZWYiXX1dLHN0aWNreUVuZDpbe3R5cGU6eV8sYXJnczpbInN0aWNreUVuZCJdfV0sY2VsbDpbe3R5cGU6SHIsYXJnczpbUCRdfV0saGVhZGVyQ2VsbDpbe3R5cGU6SHIsYXJnczpbdyRdfV0sZm9vdGVyQ2VsbDpbe3R5cGU6SHIsYXJnczpbayRdfV19KTtjbGFzcyBFJHtjb25zdHJ1Y3Rvcih0LGUpe2NvbnN0IG49ZS5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdDtmb3IoY29uc3QgZSBvZiB0Ll9jb2x1bW5Dc3NDbGFzc05hbWUpbi5hZGQoZSl9fWNsYXNzIEEkIGV4dGVuZHMgRSR7Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpfX1BJC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8QSQpKE11KEQkKSxNdShjaCkpfSxBJC7JtWRpcj1Kbyh7dHlwZTpBJCxzZWxlY3RvcnM6W1siY2RrLWhlYWRlci1jZWxsIl0sWyJ0aCIsImNkay1oZWFkZXItY2VsbCIsIiJdXSxob3N0QXR0cnM6WyJyb2xlIiwiY29sdW1uaGVhZGVyIiwxLCJjZGstaGVhZGVyLWNlbGwiXSxmZWF0dXJlczpbZ21dfSksQSQuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpEJH0se3R5cGU6Y2h9XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEEkLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6ImNkay1oZWFkZXItY2VsbCwgdGhbY2RrLWhlYWRlci1jZWxsXSIsaG9zdDp7Y2xhc3M6ImNkay1oZWFkZXItY2VsbCIscm9sZToiY29sdW1uaGVhZGVyIn19XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpEJH0se3R5cGU6Y2h9XX0pLG51bGwpO2NsYXNzIFIkIGV4dGVuZHMgRSR7Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpfX1SJC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8UiQpKE11KEQkKSxNdShjaCkpfSxSJC7JtWRpcj1Kbyh7dHlwZTpSJCxzZWxlY3RvcnM6W1siY2RrLWZvb3Rlci1jZWxsIl0sWyJ0ZCIsImNkay1mb290ZXItY2VsbCIsIiJdXSxob3N0QXR0cnM6WyJyb2xlIiwiZ3JpZGNlbGwiLDEsImNkay1mb290ZXItY2VsbCJdLGZlYXR1cmVzOltnbV19KSxSJC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOkQkfSx7dHlwZTpjaH1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoUiQsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoiY2RrLWZvb3Rlci1jZWxsLCB0ZFtjZGstZm9vdGVyLWNlbGxdIixob3N0OntjbGFzczoiY2RrLWZvb3Rlci1jZWxsIixyb2xlOiJncmlkY2VsbCJ9fV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6RCR9LHt0eXBlOmNofV19KSxudWxsKTtjbGFzcyBUJCBleHRlbmRzIEUke2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCxlKX19VCQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFQkKShNdShEJCksTXUoY2gpKX0sVCQuybVkaXI9Sm8oe3R5cGU6VCQsc2VsZWN0b3JzOltbImNkay1jZWxsIl0sWyJ0ZCIsImNkay1jZWxsIiwiIl1dLGhvc3RBdHRyczpbInJvbGUiLCJncmlkY2VsbCIsMSwiY2RrLWNlbGwiXSxmZWF0dXJlczpbZ21dfSksVCQuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpEJH0se3R5cGU6Y2h9XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFQkLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6ImNkay1jZWxsLCB0ZFtjZGstY2VsbF0iLGhvc3Q6e2NsYXNzOiJjZGstY2VsbCIscm9sZToiZ3JpZGNlbGwifX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkQkfSx7dHlwZTpjaH1dfSksbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyBOJHtjb25zdHJ1Y3Rvcigpe3RoaXMudGFza3M9W10sdGhpcy5lbmRUYXNrcz1bXX19Y29uc3QgSSQ9bmV3IE5yKCJfQ09BTEVTQ0VEX1NUWUxFX1NDSEVEVUxFUiIpO2NsYXNzIHoke2NvbnN0cnVjdG9yKHQpe3RoaXMuX25nWm9uZT10LHRoaXMuX2N1cnJlbnRTY2hlZHVsZT1udWxsLHRoaXMuX2Rlc3Ryb3llZD1uZXcgeH1zY2hlZHVsZSh0KXt0aGlzLl9jcmVhdGVTY2hlZHVsZUlmTmVlZGVkKCksdGhpcy5fY3VycmVudFNjaGVkdWxlLnRhc2tzLnB1c2godCl9c2NoZWR1bGVFbmQodCl7dGhpcy5fY3JlYXRlU2NoZWR1bGVJZk5lZWRlZCgpLHRoaXMuX2N1cnJlbnRTY2hlZHVsZS5lbmRUYXNrcy5wdXNoKHQpfW5nT25EZXN0cm95KCl7dGhpcy5fZGVzdHJveWVkLm5leHQoKSx0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKX1fY3JlYXRlU2NoZWR1bGVJZk5lZWRlZCgpe3RoaXMuX2N1cnJlbnRTY2hlZHVsZXx8KHRoaXMuX2N1cnJlbnRTY2hlZHVsZT1uZXcgTiQsdGhpcy5fZ2V0U2NoZWR1bGVPYnNlcnZhYmxlKCkucGlwZSh1bih0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCgpPT57Zm9yKDt0aGlzLl9jdXJyZW50U2NoZWR1bGUudGFza3MubGVuZ3RofHx0aGlzLl9jdXJyZW50U2NoZWR1bGUuZW5kVGFza3MubGVuZ3RoOyl7Y29uc3QgdD10aGlzLl9jdXJyZW50U2NoZWR1bGU7dGhpcy5fY3VycmVudFNjaGVkdWxlPW5ldyBOJDtmb3IoY29uc3QgZSBvZiB0LnRhc2tzKWUoKTtmb3IoY29uc3QgZSBvZiB0LmVuZFRhc2tzKWUoKX10aGlzLl9jdXJyZW50U2NoZWR1bGU9bnVsbH0pKSl9X2dldFNjaGVkdWxlT2JzZXJ2YWJsZSgpe3JldHVybiB0aGlzLl9uZ1pvbmUuaXNTdGFibGU/UnQoUHJvbWlzZS5yZXNvbHZlKHZvaWQgMCkpOnRoaXMuX25nWm9uZS5vblN0YWJsZS5waXBlKE5lKDEpKX19eiQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHokKSh1cyh0QykpfSx6JC7JtXByb3Y9bG8oe3Rva2VuOnokLGZhY3Rvcnk6eiQuybVmYWN9KSx6JC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOnRDfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYih6JCxbe3R5cGU6Sm19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6dEN9XX0pLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3QgSCQ9IjxuZy1jb250YWluZXIgY2RrQ2VsbE91dGxldD48L25nLWNvbnRhaW5lcj4iO2NsYXNzIEYke2NvbnN0cnVjdG9yKHQsZSl7dGhpcy50ZW1wbGF0ZT10LHRoaXMuX2RpZmZlcnM9ZX1uZ09uQ2hhbmdlcyh0KXtpZighdGhpcy5fY29sdW1uc0RpZmZlcil7Y29uc3QgZT10LmNvbHVtbnMmJnQuY29sdW1ucy5jdXJyZW50VmFsdWV8fFtdO3RoaXMuX2NvbHVtbnNEaWZmZXI9dGhpcy5fZGlmZmVycy5maW5kKGUpLmNyZWF0ZSgpLHRoaXMuX2NvbHVtbnNEaWZmZXIuZGlmZihlKX19Z2V0Q29sdW1uc0RpZmYoKXtyZXR1cm4gdGhpcy5fY29sdW1uc0RpZmZlci5kaWZmKHRoaXMuY29sdW1ucyl9ZXh0cmFjdENlbGxUZW1wbGF0ZSh0KXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIEIkP3QuaGVhZGVyQ2VsbC50ZW1wbGF0ZTp0aGlzIGluc3RhbmNlb2YgaiQ/dC5mb290ZXJDZWxsLnRlbXBsYXRlOnQuY2VsbC50ZW1wbGF0ZX19RiQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEYkKShNdShVaCksTXUoRWgpKX0sRiQuybVkaXI9Sm8oe3R5cGU6RiQsZmVhdHVyZXM6W1NpXX0pLEYkLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6VWh9LHt0eXBlOkVofV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihGJCxbe3R5cGU6Z199XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6VWh9LHt0eXBlOkVofV19KSxudWxsKTtjb25zdCBMJD12JChjbGFzcyBleHRlbmRzIEYke30pO2NsYXNzIEIkIGV4dGVuZHMgTCR7Y29uc3RydWN0b3IodCxlLG4pe3N1cGVyKHQsZSksdGhpcy5fdGFibGU9bn1uZ09uQ2hhbmdlcyh0KXtzdXBlci5uZ09uQ2hhbmdlcyh0KX19QiQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEIkKShNdShVaCksTXUoRWgpLE11KHgkLDgpKX0sQiQuybVkaXI9Sm8oe3R5cGU6QiQsc2VsZWN0b3JzOltbIiIsImNka0hlYWRlclJvd0RlZiIsIiJdXSxpbnB1dHM6e2NvbHVtbnM6WyJjZGtIZWFkZXJSb3dEZWYiLCJjb2x1bW5zIl0sc3RpY2t5OlsiY2RrSGVhZGVyUm93RGVmU3RpY2t5Iiwic3RpY2t5Il19LGZlYXR1cmVzOltnbSxTaV19KSxCJC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOlVofSx7dHlwZTpFaH0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W3gkXX0se3R5cGU6X3N9XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoQiQsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoiW2Nka0hlYWRlclJvd0RlZl0iLGlucHV0czpbImNvbHVtbnM6IGNka0hlYWRlclJvd0RlZiIsInN0aWNreTogY2RrSGVhZGVyUm93RGVmU3RpY2t5Il19XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpVaH0se3R5cGU6RWh9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOlt4JF19LHt0eXBlOl9zfV19XX0pLG51bGwpO2NvbnN0IFYkPXYkKGNsYXNzIGV4dGVuZHMgRiR7fSk7Y2xhc3MgaiQgZXh0ZW5kcyBWJHtjb25zdHJ1Y3Rvcih0LGUsbil7c3VwZXIodCxlKSx0aGlzLl90YWJsZT1ufW5nT25DaGFuZ2VzKHQpe3N1cGVyLm5nT25DaGFuZ2VzKHQpfX1qJC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8aiQpKE11KFVoKSxNdShFaCksTXUoeCQsOCkpfSxqJC7JtWRpcj1Kbyh7dHlwZTpqJCxzZWxlY3RvcnM6W1siIiwiY2RrRm9vdGVyUm93RGVmIiwiIl1dLGlucHV0czp7Y29sdW1uczpbImNka0Zvb3RlclJvd0RlZiIsImNvbHVtbnMiXSxzdGlja3k6WyJjZGtGb290ZXJSb3dEZWZTdGlja3kiLCJzdGlja3kiXX0sZmVhdHVyZXM6W2dtLFNpXX0pLGokLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6VWh9LHt0eXBlOkVofSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbeCRdfSx7dHlwZTpfc31dfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihqJCxbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJbY2RrRm9vdGVyUm93RGVmXSIsaW5wdXRzOlsiY29sdW1uczogY2RrRm9vdGVyUm93RGVmIiwic3RpY2t5OiBjZGtGb290ZXJSb3dEZWZTdGlja3kiXX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOlVofSx7dHlwZTpFaH0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W3gkXX0se3R5cGU6X3N9XX1dfSksbnVsbCk7Y2xhc3MgVSQgZXh0ZW5kcyBGJHtjb25zdHJ1Y3Rvcih0LGUsbil7c3VwZXIodCxlKSx0aGlzLl90YWJsZT1ufX1VJC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8VSQpKE11KFVoKSxNdShFaCksTXUoeCQsOCkpfSxVJC7JtWRpcj1Kbyh7dHlwZTpVJCxzZWxlY3RvcnM6W1siIiwiY2RrUm93RGVmIiwiIl1dLGlucHV0czp7Y29sdW1uczpbImNka1Jvd0RlZkNvbHVtbnMiLCJjb2x1bW5zIl0sd2hlbjpbImNka1Jvd0RlZldoZW4iLCJ3aGVuIl19LGZlYXR1cmVzOltnbV19KSxVJC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOlVofSx7dHlwZTpFaH0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W3gkXX0se3R5cGU6X3N9XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoVSQsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoiW2Nka1Jvd0RlZl0iLGlucHV0czpbImNvbHVtbnM6IGNka1Jvd0RlZkNvbHVtbnMiLCJ3aGVuOiBjZGtSb3dEZWZXaGVuIl19XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpVaH0se3R5cGU6RWh9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOlt4JF19LHt0eXBlOl9zfV19XX0pLG51bGwpO2NsYXNzIFcke2NvbnN0cnVjdG9yKHQpe3RoaXMuX3ZpZXdDb250YWluZXI9dCxXJC5tb3N0UmVjZW50Q2VsbE91dGxldD10aGlzfW5nT25EZXN0cm95KCl7VyQubW9zdFJlY2VudENlbGxPdXRsZXQ9PT10aGlzJiYoVyQubW9zdFJlY2VudENlbGxPdXRsZXQ9bnVsbCl9fVckLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxXJCkoTXUoWGgpKX0sVyQuybVkaXI9Sm8oe3R5cGU6VyQsc2VsZWN0b3JzOltbIiIsImNka0NlbGxPdXRsZXQiLCIiXV19KSxXJC5tb3N0UmVjZW50Q2VsbE91dGxldD1udWxsLFckLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6WGh9XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFckLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6IltjZGtDZWxsT3V0bGV0XSJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpYaH1dfSksbnVsbCk7Y2xhc3MgRyR7fUckLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxHJCl9LEckLsm1Y21wPVVvKHt0eXBlOkckLHNlbGVjdG9yczpbWyJjZGstaGVhZGVyLXJvdyJdLFsidHIiLCJjZGstaGVhZGVyLXJvdyIsIiJdXSxob3N0QXR0cnM6WyJyb2xlIiwicm93IiwxLCJjZGstaGVhZGVyLXJvdyJdLGRlY2xzOjEsdmFyczowLGNvbnN0czpbWyJjZGtDZWxsT3V0bGV0IiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJkR1KDAsMCl9LGRpcmVjdGl2ZXM6W1ckXSxlbmNhcHN1bGF0aW9uOjJ9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEckLFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6ImNkay1oZWFkZXItcm93LCB0cltjZGstaGVhZGVyLXJvd10iLHRlbXBsYXRlOkgkLGhvc3Q6e2NsYXNzOiJjZGstaGVhZGVyLXJvdyIscm9sZToicm93In0sY2hhbmdlRGV0ZWN0aW9uOnhvLkRlZmF1bHQsZW5jYXBzdWxhdGlvbjpQby5Ob25lfV19XSxudWxsLG51bGwpO2NsYXNzIFkke31ZJC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8WSQpfSxZJC7JtWNtcD1Vbyh7dHlwZTpZJCxzZWxlY3RvcnM6W1siY2RrLWZvb3Rlci1yb3ciXSxbInRyIiwiY2RrLWZvb3Rlci1yb3ciLCIiXV0saG9zdEF0dHJzOlsicm9sZSIsInJvdyIsMSwiY2RrLWZvb3Rlci1yb3ciXSxkZWNsczoxLHZhcnM6MCxjb25zdHM6W1siY2RrQ2VsbE91dGxldCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiZEdSgwLDApfSxkaXJlY3RpdmVzOltXJF0sZW5jYXBzdWxhdGlvbjoyfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihZJCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJjZGstZm9vdGVyLXJvdywgdHJbY2RrLWZvb3Rlci1yb3ddIix0ZW1wbGF0ZTpIJCxob3N0OntjbGFzczoiY2RrLWZvb3Rlci1yb3ciLHJvbGU6InJvdyJ9LGNoYW5nZURldGVjdGlvbjp4by5EZWZhdWx0LGVuY2Fwc3VsYXRpb246UG8uTm9uZX1dfV0sbnVsbCxudWxsKTtjbGFzcyBxJHt9cSQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHEkKX0scSQuybVjbXA9VW8oe3R5cGU6cSQsc2VsZWN0b3JzOltbImNkay1yb3ciXSxbInRyIiwiY2RrLXJvdyIsIiJdXSxob3N0QXR0cnM6WyJyb2xlIiwicm93IiwxLCJjZGstcm93Il0sZGVjbHM6MSx2YXJzOjAsY29uc3RzOltbImNka0NlbGxPdXRsZXQiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmRHUoMCwwKX0sZGlyZWN0aXZlczpbVyRdLGVuY2Fwc3VsYXRpb246Mn0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIocSQsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoiY2RrLXJvdywgdHJbY2RrLXJvd10iLHRlbXBsYXRlOkgkLGhvc3Q6e2NsYXNzOiJjZGstcm93Iixyb2xlOiJyb3cifSxjaGFuZ2VEZXRlY3Rpb246eG8uRGVmYXVsdCxlbmNhcHN1bGF0aW9uOlBvLk5vbmV9XX1dLG51bGwsbnVsbCk7Y2xhc3MgWiR7Y29uc3RydWN0b3IodCl7dGhpcy50ZW1wbGF0ZVJlZj10fX1aJC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8WiQpKE11KFVoKSl9LFokLsm1ZGlyPUpvKHt0eXBlOlokLHNlbGVjdG9yczpbWyJuZy10ZW1wbGF0ZSIsImNka05vRGF0YVJvdyIsIiJdXX0pLFokLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6VWh9XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFokLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6Im5nLXRlbXBsYXRlW2Nka05vRGF0YVJvd10ifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6VWh9XX0pLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3QgWCQ9WyJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiXTtjbGFzcyBLJHtjb25zdHJ1Y3Rvcih0LGUsbixvLGk9ITAsYT0hMCxyKXt0aGlzLl9pc05hdGl2ZUh0bWxUYWJsZT10LHRoaXMuX3N0aWNrQ2VsbENzcz1lLHRoaXMuZGlyZWN0aW9uPW4sdGhpcy5fY29hbGVzY2VkU3R5bGVTY2hlZHVsZXI9byx0aGlzLl9pc0Jyb3dzZXI9aSx0aGlzLl9uZWVkc1Bvc2l0aW9uU3RpY2t5T25FbGVtZW50PWEsdGhpcy5fcG9zaXRpb25MaXN0ZW5lcj1yLHRoaXMuX2NhY2hlZENlbGxXaWR0aHM9W10sdGhpcy5fYm9yZGVyQ2VsbENzcz17dG9wOmAke2V9LWJvcmRlci1lbGVtLXRvcGAsYm90dG9tOmAke2V9LWJvcmRlci1lbGVtLWJvdHRvbWAsbGVmdDpgJHtlfS1ib3JkZXItZWxlbS1sZWZ0YCxyaWdodDpgJHtlfS1ib3JkZXItZWxlbS1yaWdodGB9fWNsZWFyU3RpY2t5UG9zaXRpb25pbmcodCxlKXtjb25zdCBuPVtdO2Zvcihjb25zdCBlIG9mIHQpaWYoZS5ub2RlVHlwZT09PWUuRUxFTUVOVF9OT0RFKXtuLnB1c2goZSk7Zm9yKGxldCB0PTA7dDxlLmNoaWxkcmVuLmxlbmd0aDt0Kyspbi5wdXNoKGUuY2hpbGRyZW5bdF0pfXRoaXMuX3NjaGVkdWxlU3R5bGVDaGFuZ2VzKCgoKT0+e2Zvcihjb25zdCB0IG9mIG4pdGhpcy5fcmVtb3ZlU3RpY2t5U3R5bGUodCxlKX0pKX11cGRhdGVTdGlja3lDb2x1bW5zKHQsZSxuLG89ITApe2lmKCF0Lmxlbmd0aHx8IXRoaXMuX2lzQnJvd3Nlcnx8IWUuc29tZSgodD0+dCkpJiYhbi5zb21lKCh0PT50KSkpcmV0dXJuIHZvaWQodGhpcy5fcG9zaXRpb25MaXN0ZW5lciYmKHRoaXMuX3Bvc2l0aW9uTGlzdGVuZXIuc3RpY2t5Q29sdW1uc1VwZGF0ZWQoe3NpemVzOltdfSksdGhpcy5fcG9zaXRpb25MaXN0ZW5lci5zdGlja3lFbmRDb2x1bW5zVXBkYXRlZCh7c2l6ZXM6W119KSkpO2NvbnN0IGk9dFswXSxhPWkuY2hpbGRyZW4ubGVuZ3RoLHI9dGhpcy5fZ2V0Q2VsbFdpZHRocyhpLG8pLHM9dGhpcy5fZ2V0U3RpY2t5U3RhcnRDb2x1bW5Qb3NpdGlvbnMocixlKSxsPXRoaXMuX2dldFN0aWNreUVuZENvbHVtblBvc2l0aW9ucyhyLG4pLGM9ZS5sYXN0SW5kZXhPZighMCksZD1uLmluZGV4T2YoITApO3RoaXMuX3NjaGVkdWxlU3R5bGVDaGFuZ2VzKCgoKT0+e2NvbnN0IG89InJ0bCI9PT10aGlzLmRpcmVjdGlvbixpPW8/InJpZ2h0IjoibGVmdCIscD1vPyJsZWZ0IjoicmlnaHQiO2Zvcihjb25zdCBvIG9mIHQpZm9yKGxldCB0PTA7dDxhO3QrKyl7Y29uc3QgYT1vLmNoaWxkcmVuW3RdO2VbdF0mJnRoaXMuX2FkZFN0aWNreVN0eWxlKGEsaSxzW3RdLHQ9PT1jKSxuW3RdJiZ0aGlzLl9hZGRTdGlja3lTdHlsZShhLHAsbFt0XSx0PT09ZCl9dGhpcy5fcG9zaXRpb25MaXN0ZW5lciYmKHRoaXMuX3Bvc2l0aW9uTGlzdGVuZXIuc3RpY2t5Q29sdW1uc1VwZGF0ZWQoe3NpemVzOi0xPT09Yz9bXTpyLnNsaWNlKDAsYysxKS5tYXAoKCh0LG4pPT5lW25dP3Q6bnVsbCkpfSksdGhpcy5fcG9zaXRpb25MaXN0ZW5lci5zdGlja3lFbmRDb2x1bW5zVXBkYXRlZCh7c2l6ZXM6LTE9PT1kP1tdOnIuc2xpY2UoZCkubWFwKCgodCxlKT0+bltlK2RdP3Q6bnVsbCkpLnJldmVyc2UoKX0pKX0pKX1zdGlja1Jvd3ModCxlLG4pe2lmKCF0aGlzLl9pc0Jyb3dzZXIpcmV0dXJuO2NvbnN0IG89ImJvdHRvbSI9PT1uP3Quc2xpY2UoKS5yZXZlcnNlKCk6dCxpPSJib3R0b20iPT09bj9lLnNsaWNlKCkucmV2ZXJzZSgpOmUsYT1bXSxyPVtdLHM9W107Zm9yKGxldCB0PTAsZT0wO3Q8by5sZW5ndGg7dCsrKXtpZihhW3RdPWUsIWlbdF0pY29udGludWU7Y29uc3Qgbj1vW3RdO3NbdF09dGhpcy5faXNOYXRpdmVIdG1sVGFibGU/QXJyYXkuZnJvbShuLmNoaWxkcmVuKTpbbl07Y29uc3QgbD1uLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtlKz1sLHJbdF09bH1jb25zdCBsPWkubGFzdEluZGV4T2YoITApO3RoaXMuX3NjaGVkdWxlU3R5bGVDaGFuZ2VzKCgoKT0+e3ZhciB0LGU7Zm9yKGxldCB0PTA7dDxvLmxlbmd0aDt0Kyspe2lmKCFpW3RdKWNvbnRpbnVlO2NvbnN0IGU9YVt0XSxvPXQ9PT1sO2Zvcihjb25zdCBpIG9mIHNbdF0pdGhpcy5fYWRkU3RpY2t5U3R5bGUoaSxuLGUsbyl9InRvcCI9PT1uP251bGw9PT0odD10aGlzLl9wb3NpdGlvbkxpc3RlbmVyKXx8dm9pZCAwPT09dHx8dC5zdGlja3lIZWFkZXJSb3dzVXBkYXRlZCh7c2l6ZXM6cixlbGVtZW50czpzfSk6bnVsbD09PShlPXRoaXMuX3Bvc2l0aW9uTGlzdGVuZXIpfHx2b2lkIDA9PT1lfHxlLnN0aWNreUZvb3RlclJvd3NVcGRhdGVkKHtzaXplczpyLGVsZW1lbnRzOnN9KX0pKX11cGRhdGVTdGlja3lGb290ZXJDb250YWluZXIodCxlKXtpZighdGhpcy5faXNOYXRpdmVIdG1sVGFibGUpcmV0dXJuO2NvbnN0IG49dC5xdWVyeVNlbGVjdG9yKCJ0Zm9vdCIpO3RoaXMuX3NjaGVkdWxlU3R5bGVDaGFuZ2VzKCgoKT0+e2Uuc29tZSgodD0+IXQpKT90aGlzLl9yZW1vdmVTdGlja3lTdHlsZShuLFsiYm90dG9tIl0pOnRoaXMuX2FkZFN0aWNreVN0eWxlKG4sImJvdHRvbSIsMCwhMSl9KSl9X3JlbW92ZVN0aWNreVN0eWxlKHQsZSl7Zm9yKGNvbnN0IG4gb2YgZSl0LnN0eWxlW25dPSIiLHQuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLl9ib3JkZXJDZWxsQ3NzW25dKTtYJC5zb21lKChuPT4tMT09PWUuaW5kZXhPZihuKSYmdC5zdHlsZVtuXSkpP3Quc3R5bGUuekluZGV4PXRoaXMuX2dldENhbGN1bGF0ZWRaSW5kZXgodCk6KHQuc3R5bGUuekluZGV4PSIiLHRoaXMuX25lZWRzUG9zaXRpb25TdGlja3lPbkVsZW1lbnQmJih0LnN0eWxlLnBvc2l0aW9uPSIiKSx0LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5fc3RpY2tDZWxsQ3NzKSl9X2FkZFN0aWNreVN0eWxlKHQsZSxuLG8pe3QuY2xhc3NMaXN0LmFkZCh0aGlzLl9zdGlja0NlbGxDc3MpLG8mJnQuY2xhc3NMaXN0LmFkZCh0aGlzLl9ib3JkZXJDZWxsQ3NzW2VdKSx0LnN0eWxlW2VdPWAke259cHhgLHQuc3R5bGUuekluZGV4PXRoaXMuX2dldENhbGN1bGF0ZWRaSW5kZXgodCksdGhpcy5fbmVlZHNQb3NpdGlvblN0aWNreU9uRWxlbWVudCYmKHQuc3R5bGUuY3NzVGV4dCs9InBvc2l0aW9uOiAtd2Via2l0LXN0aWNreTsgcG9zaXRpb246IHN0aWNreTsgIil9X2dldENhbGN1bGF0ZWRaSW5kZXgodCl7Y29uc3QgZT17dG9wOjEwMCxib3R0b206MTAsbGVmdDoxLHJpZ2h0OjF9O2xldCBuPTA7Zm9yKGNvbnN0IG8gb2YgWCQpdC5zdHlsZVtvXSYmKG4rPWVbb10pO3JldHVybiBuP2Ake259YDoiIn1fZ2V0Q2VsbFdpZHRocyh0LGU9ITApe2lmKCFlJiZ0aGlzLl9jYWNoZWRDZWxsV2lkdGhzLmxlbmd0aClyZXR1cm4gdGhpcy5fY2FjaGVkQ2VsbFdpZHRocztjb25zdCBuPVtdLG89dC5jaGlsZHJlbjtmb3IobGV0IHQ9MDt0PG8ubGVuZ3RoO3QrKyluLnB1c2gob1t0XS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCk7cmV0dXJuIHRoaXMuX2NhY2hlZENlbGxXaWR0aHM9bixufV9nZXRTdGlja3lTdGFydENvbHVtblBvc2l0aW9ucyh0LGUpe2NvbnN0IG49W107bGV0IG89MDtmb3IobGV0IGk9MDtpPHQubGVuZ3RoO2krKyllW2ldJiYobltpXT1vLG8rPXRbaV0pO3JldHVybiBufV9nZXRTdGlja3lFbmRDb2x1bW5Qb3NpdGlvbnModCxlKXtjb25zdCBuPVtdO2xldCBvPTA7Zm9yKGxldCBpPXQubGVuZ3RoO2k+MDtpLS0pZVtpXSYmKG5baV09byxvKz10W2ldKTtyZXR1cm4gbn1fc2NoZWR1bGVTdHlsZUNoYW5nZXModCl7dGhpcy5fY29hbGVzY2VkU3R5bGVTY2hlZHVsZXI/dGhpcy5fY29hbGVzY2VkU3R5bGVTY2hlZHVsZXIuc2NoZWR1bGUodCk6dCgpfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovZnVuY3Rpb24gSiQodCl7cmV0dXJuIEVycm9yKGBDb3VsZCBub3QgZmluZCBjb2x1bW4gd2l0aCBpZCAiJHt0fSIuYCl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCBRJD1uZXcgTnIoIkNES19TUEwiKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY2xhc3MgJCR7Y29uc3RydWN0b3IodCxlKXt0aGlzLnZpZXdDb250YWluZXI9dCx0aGlzLmVsZW1lbnRSZWY9ZX19JCQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fCQkKShNdShYaCksTXUoY2gpKX0sJCQuybVkaXI9Sm8oe3R5cGU6JCQsc2VsZWN0b3JzOltbIiIsInJvd091dGxldCIsIiJdXX0pLCQkLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6WGh9LHt0eXBlOmNofV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYigkJCxbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJbcm93T3V0bGV0XSJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpYaH0se3R5cGU6Y2h9XX0pLG51bGwpO2NsYXNzIHQwe2NvbnN0cnVjdG9yKHQsZSl7dGhpcy52aWV3Q29udGFpbmVyPXQsdGhpcy5lbGVtZW50UmVmPWV9fXQwLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHx0MCkoTXUoWGgpLE11KGNoKSl9LHQwLsm1ZGlyPUpvKHt0eXBlOnQwLHNlbGVjdG9yczpbWyIiLCJoZWFkZXJSb3dPdXRsZXQiLCIiXV19KSx0MC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOlhofSx7dHlwZTpjaH1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIodDAsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoiW2hlYWRlclJvd091dGxldF0ifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6WGh9LHt0eXBlOmNofV19KSxudWxsKTtjbGFzcyBlMHtjb25zdHJ1Y3Rvcih0LGUpe3RoaXMudmlld0NvbnRhaW5lcj10LHRoaXMuZWxlbWVudFJlZj1lfX1lMC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8ZTApKE11KFhoKSxNdShjaCkpfSxlMC7JtWRpcj1Kbyh7dHlwZTplMCxzZWxlY3RvcnM6W1siIiwiZm9vdGVyUm93T3V0bGV0IiwiIl1dfSksZTAuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpYaH0se3R5cGU6Y2h9XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGUwLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6Iltmb290ZXJSb3dPdXRsZXRdIn1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOlhofSx7dHlwZTpjaH1dfSksbnVsbCk7Y2xhc3MgbjB7Y29uc3RydWN0b3IodCxlKXt0aGlzLnZpZXdDb250YWluZXI9dCx0aGlzLmVsZW1lbnRSZWY9ZX19bjAuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fG4wKShNdShYaCksTXUoY2gpKX0sbjAuybVkaXI9Sm8oe3R5cGU6bjAsc2VsZWN0b3JzOltbIiIsIm5vRGF0YVJvd091dGxldCIsIiJdXX0pLG4wLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6WGh9LHt0eXBlOmNofV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihuMCxbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJbbm9EYXRhUm93T3V0bGV0XSJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpYaH0se3R5cGU6Y2h9XX0pLG51bGwpO2NvbnN0IG8wPSdcbiAgPG5nLWNvbnRlbnQgc2VsZWN0PSJjYXB0aW9uIj48L25nLWNvbnRlbnQ+XG4gIDxuZy1jb250ZW50IHNlbGVjdD0iY29sZ3JvdXAsIGNvbCI+PC9uZy1jb250ZW50PlxuICA8bmctY29udGFpbmVyIGhlYWRlclJvd091dGxldD48L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciByb3dPdXRsZXQ+PC9uZy1jb250YWluZXI+XG4gIDxuZy1jb250YWluZXIgbm9EYXRhUm93T3V0bGV0PjwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyIGZvb3RlclJvd091dGxldD48L25nLWNvbnRhaW5lcj5cbic7Y2xhc3MgaTB7Y29uc3RydWN0b3IodCxlLG4sbyxpLGEscixzLGwsYyxkKXt0aGlzLl9kaWZmZXJzPXQsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9ZSx0aGlzLl9lbGVtZW50UmVmPW4sdGhpcy5fZGlyPWksdGhpcy5fcGxhdGZvcm09cix0aGlzLl92aWV3UmVwZWF0ZXI9cyx0aGlzLl9jb2FsZXNjZWRTdHlsZVNjaGVkdWxlcj1sLHRoaXMuX3N0aWNreVBvc2l0aW9uaW5nTGlzdGVuZXI9Yyx0aGlzLl92aWV3cG9ydFJ1bGVyPWQsdGhpcy5fb25EZXN0cm95PW5ldyB4LHRoaXMuX2NvbHVtbkRlZnNCeU5hbWU9bmV3IE1hcCx0aGlzLl9jdXN0b21Db2x1bW5EZWZzPW5ldyBTZXQsdGhpcy5fY3VzdG9tUm93RGVmcz1uZXcgU2V0LHRoaXMuX2N1c3RvbUhlYWRlclJvd0RlZnM9bmV3IFNldCx0aGlzLl9jdXN0b21Gb290ZXJSb3dEZWZzPW5ldyBTZXQsdGhpcy5faGVhZGVyUm93RGVmQ2hhbmdlZD0hMCx0aGlzLl9mb290ZXJSb3dEZWZDaGFuZ2VkPSEwLHRoaXMuX3N0aWNreUNvbHVtblN0eWxlc05lZWRSZXNldD0hMCx0aGlzLl9mb3JjZVJlY2FsY3VsYXRlQ2VsbFdpZHRocz0hMCx0aGlzLl9jYWNoZWRSZW5kZXJSb3dzTWFwPW5ldyBNYXAsdGhpcy5zdGlja3lDc3NDbGFzcz0iY2RrLXRhYmxlLXN0aWNreSIsdGhpcy5uZWVkc1Bvc2l0aW9uU3RpY2t5T25FbGVtZW50PSEwLHRoaXMuX2lzU2hvd2luZ05vRGF0YVJvdz0hMSx0aGlzLl9tdWx0aVRlbXBsYXRlRGF0YVJvd3M9ITEsdGhpcy5fZml4ZWRMYXlvdXQ9ITEsdGhpcy52aWV3Q2hhbmdlPW5ldyBIKHtzdGFydDowLGVuZDpOdW1iZXIuTUFYX1ZBTFVFfSksb3x8dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgicm9sZSIsImdyaWQiKSx0aGlzLl9kb2N1bWVudD1hLHRoaXMuX2lzTmF0aXZlSHRtbFRhYmxlPSJUQUJMRSI9PT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQubm9kZU5hbWV9Z2V0IHRyYWNrQnkoKXtyZXR1cm4gdGhpcy5fdHJhY2tCeUZufXNldCB0cmFja0J5KHQpeyJ1bmRlZmluZWQiIT10eXBlb2YgbmdEZXZNb2RlJiYhbmdEZXZNb2RlfHxudWxsPT10fHwiZnVuY3Rpb24iPT10eXBlb2YgdHx8Y29uc29sZS53YXJuKGB0cmFja0J5IG11c3QgYmUgYSBmdW5jdGlvbiwgYnV0IHJlY2VpdmVkICR7SlNPTi5zdHJpbmdpZnkodCl9LmApLHRoaXMuX3RyYWNrQnlGbj10fWdldCBkYXRhU291cmNlKCl7cmV0dXJuIHRoaXMuX2RhdGFTb3VyY2V9c2V0IGRhdGFTb3VyY2UodCl7dGhpcy5fZGF0YVNvdXJjZSE9PXQmJnRoaXMuX3N3aXRjaERhdGFTb3VyY2UodCl9Z2V0IG11bHRpVGVtcGxhdGVEYXRhUm93cygpe3JldHVybiB0aGlzLl9tdWx0aVRlbXBsYXRlRGF0YVJvd3N9c2V0IG11bHRpVGVtcGxhdGVEYXRhUm93cyh0KXt0aGlzLl9tdWx0aVRlbXBsYXRlRGF0YVJvd3M9ckkodCksdGhpcy5fcm93T3V0bGV0JiZ0aGlzLl9yb3dPdXRsZXQudmlld0NvbnRhaW5lci5sZW5ndGgmJih0aGlzLl9mb3JjZVJlbmRlckRhdGFSb3dzKCksdGhpcy51cGRhdGVTdGlja3lDb2x1bW5TdHlsZXMoKSl9Z2V0IGZpeGVkTGF5b3V0KCl7cmV0dXJuIHRoaXMuX2ZpeGVkTGF5b3V0fXNldCBmaXhlZExheW91dCh0KXt0aGlzLl9maXhlZExheW91dD1ySSh0KSx0aGlzLl9mb3JjZVJlY2FsY3VsYXRlQ2VsbFdpZHRocz0hMCx0aGlzLl9zdGlja3lDb2x1bW5TdHlsZXNOZWVkUmVzZXQ9ITB9bmdPbkluaXQoKXt0aGlzLl9zZXR1cFN0aWNreVN0eWxlcigpLHRoaXMuX2lzTmF0aXZlSHRtbFRhYmxlJiZ0aGlzLl9hcHBseU5hdGl2ZVRhYmxlU2VjdGlvbnMoKSx0aGlzLl9kYXRhRGlmZmVyPXRoaXMuX2RpZmZlcnMuZmluZChbXSkuY3JlYXRlKCgodCxlKT0+dGhpcy50cmFja0J5P3RoaXMudHJhY2tCeShlLmRhdGFJbmRleCxlLmRhdGEpOmUpKSx0aGlzLl92aWV3cG9ydFJ1bGVyJiZ0aGlzLl92aWV3cG9ydFJ1bGVyLmNoYW5nZSgpLnBpcGUodW4odGhpcy5fb25EZXN0cm95KSkuc3Vic2NyaWJlKCgoKT0+e3RoaXMuX2ZvcmNlUmVjYWxjdWxhdGVDZWxsV2lkdGhzPSEwfSkpfW5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpe2lmKHRoaXMuX2NhY2hlUm93RGVmcygpLHRoaXMuX2NhY2hlQ29sdW1uRGVmcygpLCF0aGlzLl9oZWFkZXJSb3dEZWZzLmxlbmd0aCYmIXRoaXMuX2Zvb3RlclJvd0RlZnMubGVuZ3RoJiYhdGhpcy5fcm93RGVmcy5sZW5ndGgmJigidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSl0aHJvdyhmdW5jdGlvbiB0KCl7cmV0dXJuIEVycm9yKCJNaXNzaW5nIGRlZmluaXRpb25zIGZvciBoZWFkZXIsIGZvb3RlciwgYW5kIHJvdzsgY2Fubm90IGRldGVybWluZSB3aGljaCBjb2x1bW5zIHNob3VsZCBiZSByZW5kZXJlZC4iKX0pKCk7Y29uc3QgZT10aGlzLl9yZW5kZXJVcGRhdGVkQ29sdW1ucygpfHx0aGlzLl9oZWFkZXJSb3dEZWZDaGFuZ2VkfHx0aGlzLl9mb290ZXJSb3dEZWZDaGFuZ2VkO3RoaXMuX3N0aWNreUNvbHVtblN0eWxlc05lZWRSZXNldD10aGlzLl9zdGlja3lDb2x1bW5TdHlsZXNOZWVkUmVzZXR8fGUsdGhpcy5fZm9yY2VSZWNhbGN1bGF0ZUNlbGxXaWR0aHM9ZSx0aGlzLl9oZWFkZXJSb3dEZWZDaGFuZ2VkJiYodGhpcy5fZm9yY2VSZW5kZXJIZWFkZXJSb3dzKCksdGhpcy5faGVhZGVyUm93RGVmQ2hhbmdlZD0hMSksdGhpcy5fZm9vdGVyUm93RGVmQ2hhbmdlZCYmKHRoaXMuX2ZvcmNlUmVuZGVyRm9vdGVyUm93cygpLHRoaXMuX2Zvb3RlclJvd0RlZkNoYW5nZWQ9ITEpLHRoaXMuZGF0YVNvdXJjZSYmdGhpcy5fcm93RGVmcy5sZW5ndGg+MCYmIXRoaXMuX3JlbmRlckNoYW5nZVN1YnNjcmlwdGlvbj90aGlzLl9vYnNlcnZlUmVuZGVyQ2hhbmdlcygpOnRoaXMuX3N0aWNreUNvbHVtblN0eWxlc05lZWRSZXNldCYmdGhpcy51cGRhdGVTdGlja3lDb2x1bW5TdHlsZXMoKSx0aGlzLl9jaGVja1N0aWNreVN0YXRlcygpfW5nT25EZXN0cm95KCl7dGhpcy5fcm93T3V0bGV0LnZpZXdDb250YWluZXIuY2xlYXIoKSx0aGlzLl9ub0RhdGFSb3dPdXRsZXQudmlld0NvbnRhaW5lci5jbGVhcigpLHRoaXMuX2hlYWRlclJvd091dGxldC52aWV3Q29udGFpbmVyLmNsZWFyKCksdGhpcy5fZm9vdGVyUm93T3V0bGV0LnZpZXdDb250YWluZXIuY2xlYXIoKSx0aGlzLl9jYWNoZWRSZW5kZXJSb3dzTWFwLmNsZWFyKCksdGhpcy5fb25EZXN0cm95Lm5leHQoKSx0aGlzLl9vbkRlc3Ryb3kuY29tcGxldGUoKSxGSCh0aGlzLmRhdGFTb3VyY2UpJiZ0aGlzLmRhdGFTb3VyY2UuZGlzY29ubmVjdCh0aGlzKX1yZW5kZXJSb3dzKCl7dGhpcy5fcmVuZGVyUm93cz10aGlzLl9nZXRBbGxSZW5kZXJSb3dzKCk7Y29uc3QgdD10aGlzLl9kYXRhRGlmZmVyLmRpZmYodGhpcy5fcmVuZGVyUm93cyk7aWYoIXQpcmV0dXJuIHZvaWQgdGhpcy5fdXBkYXRlTm9EYXRhUm93KCk7Y29uc3QgZT10aGlzLl9yb3dPdXRsZXQudmlld0NvbnRhaW5lcjt0aGlzLl92aWV3UmVwZWF0ZXI/dGhpcy5fdmlld1JlcGVhdGVyLmFwcGx5Q2hhbmdlcyh0LGUsKCh0LGUsbik9PnRoaXMuX2dldEVtYmVkZGVkVmlld0FyZ3ModC5pdGVtLG4pKSwodD0+dC5pdGVtLmRhdGEpLCh0PT57MT09PXQub3BlcmF0aW9uJiZ0LmNvbnRleHQmJnRoaXMuX3JlbmRlckNlbGxUZW1wbGF0ZUZvckl0ZW0odC5yZWNvcmQuaXRlbS5yb3dEZWYsdC5jb250ZXh0KX0pKTp0LmZvckVhY2hPcGVyYXRpb24oKCh0LG4sbyk9PntpZihudWxsPT10LnByZXZpb3VzSW5kZXgpe2NvbnN0IGU9dC5pdGVtO3RoaXMuX3JlbmRlclJvdyh0aGlzLl9yb3dPdXRsZXQsZS5yb3dEZWYsbyx7JGltcGxpY2l0OmUuZGF0YX0pfWVsc2UgaWYobnVsbD09byllLnJlbW92ZShuKTtlbHNle2NvbnN0IHQ9ZS5nZXQobik7ZS5tb3ZlKHQsbyl9fSkpLHRoaXMuX3VwZGF0ZVJvd0luZGV4Q29udGV4dCgpLHQuZm9yRWFjaElkZW50aXR5Q2hhbmdlKCh0PT57ZS5nZXQodC5jdXJyZW50SW5kZXgpLmNvbnRleHQuJGltcGxpY2l0PXQuaXRlbS5kYXRhfSkpLHRoaXMuX3VwZGF0ZU5vRGF0YVJvdygpLHRoaXMudXBkYXRlU3RpY2t5Q29sdW1uU3R5bGVzKCl9YWRkQ29sdW1uRGVmKHQpe3RoaXMuX2N1c3RvbUNvbHVtbkRlZnMuYWRkKHQpfXJlbW92ZUNvbHVtbkRlZih0KXt0aGlzLl9jdXN0b21Db2x1bW5EZWZzLmRlbGV0ZSh0KX1hZGRSb3dEZWYodCl7dGhpcy5fY3VzdG9tUm93RGVmcy5hZGQodCl9cmVtb3ZlUm93RGVmKHQpe3RoaXMuX2N1c3RvbVJvd0RlZnMuZGVsZXRlKHQpfWFkZEhlYWRlclJvd0RlZih0KXt0aGlzLl9jdXN0b21IZWFkZXJSb3dEZWZzLmFkZCh0KSx0aGlzLl9oZWFkZXJSb3dEZWZDaGFuZ2VkPSEwfXJlbW92ZUhlYWRlclJvd0RlZih0KXt0aGlzLl9jdXN0b21IZWFkZXJSb3dEZWZzLmRlbGV0ZSh0KSx0aGlzLl9oZWFkZXJSb3dEZWZDaGFuZ2VkPSEwfWFkZEZvb3RlclJvd0RlZih0KXt0aGlzLl9jdXN0b21Gb290ZXJSb3dEZWZzLmFkZCh0KSx0aGlzLl9mb290ZXJSb3dEZWZDaGFuZ2VkPSEwfXJlbW92ZUZvb3RlclJvd0RlZih0KXt0aGlzLl9jdXN0b21Gb290ZXJSb3dEZWZzLmRlbGV0ZSh0KSx0aGlzLl9mb290ZXJSb3dEZWZDaGFuZ2VkPSEwfXNldE5vRGF0YVJvdyh0KXt0aGlzLl9jdXN0b21Ob0RhdGFSb3c9dH11cGRhdGVTdGlja3lIZWFkZXJSb3dTdHlsZXMoKXtjb25zdCB0PXRoaXMuX2dldFJlbmRlcmVkUm93cyh0aGlzLl9oZWFkZXJSb3dPdXRsZXQpLGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoInRoZWFkIik7ZSYmKGUuc3R5bGUuZGlzcGxheT10Lmxlbmd0aD8iIjoibm9uZSIpO2NvbnN0IG49dGhpcy5faGVhZGVyUm93RGVmcy5tYXAoKHQ9PnQuc3RpY2t5KSk7dGhpcy5fc3RpY2t5U3R5bGVyLmNsZWFyU3RpY2t5UG9zaXRpb25pbmcodCxbInRvcCJdKSx0aGlzLl9zdGlja3lTdHlsZXIuc3RpY2tSb3dzKHQsbiwidG9wIiksdGhpcy5faGVhZGVyUm93RGVmcy5mb3JFYWNoKCh0PT50LnJlc2V0U3RpY2t5Q2hhbmdlZCgpKSl9dXBkYXRlU3RpY2t5Rm9vdGVyUm93U3R5bGVzKCl7Y29uc3QgdD10aGlzLl9nZXRSZW5kZXJlZFJvd3ModGhpcy5fZm9vdGVyUm93T3V0bGV0KSxlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCJ0Zm9vdCIpO2UmJihlLnN0eWxlLmRpc3BsYXk9dC5sZW5ndGg/IiI6Im5vbmUiKTtjb25zdCBuPXRoaXMuX2Zvb3RlclJvd0RlZnMubWFwKCh0PT50LnN0aWNreSkpO3RoaXMuX3N0aWNreVN0eWxlci5jbGVhclN0aWNreVBvc2l0aW9uaW5nKHQsWyJib3R0b20iXSksdGhpcy5fc3RpY2t5U3R5bGVyLnN0aWNrUm93cyh0LG4sImJvdHRvbSIpLHRoaXMuX3N0aWNreVN0eWxlci51cGRhdGVTdGlja3lGb290ZXJDb250YWluZXIodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LG4pLHRoaXMuX2Zvb3RlclJvd0RlZnMuZm9yRWFjaCgodD0+dC5yZXNldFN0aWNreUNoYW5nZWQoKSkpfXVwZGF0ZVN0aWNreUNvbHVtblN0eWxlcygpe2NvbnN0IHQ9dGhpcy5fZ2V0UmVuZGVyZWRSb3dzKHRoaXMuX2hlYWRlclJvd091dGxldCksZT10aGlzLl9nZXRSZW5kZXJlZFJvd3ModGhpcy5fcm93T3V0bGV0KSxuPXRoaXMuX2dldFJlbmRlcmVkUm93cyh0aGlzLl9mb290ZXJSb3dPdXRsZXQpOyh0aGlzLl9pc05hdGl2ZUh0bWxUYWJsZSYmIXRoaXMuX2ZpeGVkTGF5b3V0fHx0aGlzLl9zdGlja3lDb2x1bW5TdHlsZXNOZWVkUmVzZXQpJiYodGhpcy5fc3RpY2t5U3R5bGVyLmNsZWFyU3RpY2t5UG9zaXRpb25pbmcoWy4uLnQsLi4uZSwuLi5uXSxbImxlZnQiLCJyaWdodCJdKSx0aGlzLl9zdGlja3lDb2x1bW5TdHlsZXNOZWVkUmVzZXQ9ITEpLHQuZm9yRWFjaCgoKHQsZSk9Pnt0aGlzLl9hZGRTdGlja3lDb2x1bW5TdHlsZXMoW3RdLHRoaXMuX2hlYWRlclJvd0RlZnNbZV0pfSkpLHRoaXMuX3Jvd0RlZnMuZm9yRWFjaCgodD0+e2NvbnN0IG49W107Zm9yKGxldCBvPTA7bzxlLmxlbmd0aDtvKyspdGhpcy5fcmVuZGVyUm93c1tvXS5yb3dEZWY9PT10JiZuLnB1c2goZVtvXSk7dGhpcy5fYWRkU3RpY2t5Q29sdW1uU3R5bGVzKG4sdCl9KSksbi5mb3JFYWNoKCgodCxlKT0+e3RoaXMuX2FkZFN0aWNreUNvbHVtblN0eWxlcyhbdF0sdGhpcy5fZm9vdGVyUm93RGVmc1tlXSl9KSksQXJyYXkuZnJvbSh0aGlzLl9jb2x1bW5EZWZzQnlOYW1lLnZhbHVlcygpKS5mb3JFYWNoKCh0PT50LnJlc2V0U3RpY2t5Q2hhbmdlZCgpKSl9X2dldEFsbFJlbmRlclJvd3MoKXtjb25zdCB0PVtdLGU9dGhpcy5fY2FjaGVkUmVuZGVyUm93c01hcDt0aGlzLl9jYWNoZWRSZW5kZXJSb3dzTWFwPW5ldyBNYXA7Zm9yKGxldCBuPTA7bjx0aGlzLl9kYXRhLmxlbmd0aDtuKyspe2xldCBvPXRoaXMuX2RhdGFbbl07Y29uc3QgaT10aGlzLl9nZXRSZW5kZXJSb3dzRm9yRGF0YShvLG4sZS5nZXQobykpO3RoaXMuX2NhY2hlZFJlbmRlclJvd3NNYXAuaGFzKG8pfHx0aGlzLl9jYWNoZWRSZW5kZXJSb3dzTWFwLnNldChvLG5ldyBXZWFrTWFwKTtmb3IobGV0IGU9MDtlPGkubGVuZ3RoO2UrKyl7bGV0IG49aVtlXTtjb25zdCBvPXRoaXMuX2NhY2hlZFJlbmRlclJvd3NNYXAuZ2V0KG4uZGF0YSk7by5oYXMobi5yb3dEZWYpP28uZ2V0KG4ucm93RGVmKS5wdXNoKG4pOm8uc2V0KG4ucm93RGVmLFtuXSksdC5wdXNoKG4pfX1yZXR1cm4gdH1fZ2V0UmVuZGVyUm93c0ZvckRhdGEodCxlLG4pe3JldHVybiB0aGlzLl9nZXRSb3dEZWZzKHQsZSkubWFwKChvPT57Y29uc3QgaT1uJiZuLmhhcyhvKT9uLmdldChvKTpbXTtpZihpLmxlbmd0aCl7Y29uc3QgdD1pLnNoaWZ0KCk7cmV0dXJuIHQuZGF0YUluZGV4PWUsdH1yZXR1cm57ZGF0YTp0LHJvd0RlZjpvLGRhdGFJbmRleDplfX0pKX1fY2FjaGVDb2x1bW5EZWZzKCl7dGhpcy5fY29sdW1uRGVmc0J5TmFtZS5jbGVhcigpLGEwKHRoaXMuX2dldE93bkRlZnModGhpcy5fY29udGVudENvbHVtbkRlZnMpLHRoaXMuX2N1c3RvbUNvbHVtbkRlZnMpLmZvckVhY2goKHQ9PntpZih0aGlzLl9jb2x1bW5EZWZzQnlOYW1lLmhhcyh0Lm5hbWUpJiYoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkpdGhyb3coZnVuY3Rpb24gZSh0KXtyZXR1cm4gRXJyb3IoYER1cGxpY2F0ZSBjb2x1bW4gZGVmaW5pdGlvbiBuYW1lIHByb3ZpZGVkOiAiJHt0fSIuYCl9KSh0Lm5hbWUpO3RoaXMuX2NvbHVtbkRlZnNCeU5hbWUuc2V0KHQubmFtZSx0KX0pKX1fY2FjaGVSb3dEZWZzKCl7dGhpcy5faGVhZGVyUm93RGVmcz1hMCh0aGlzLl9nZXRPd25EZWZzKHRoaXMuX2NvbnRlbnRIZWFkZXJSb3dEZWZzKSx0aGlzLl9jdXN0b21IZWFkZXJSb3dEZWZzKSx0aGlzLl9mb290ZXJSb3dEZWZzPWEwKHRoaXMuX2dldE93bkRlZnModGhpcy5fY29udGVudEZvb3RlclJvd0RlZnMpLHRoaXMuX2N1c3RvbUZvb3RlclJvd0RlZnMpLHRoaXMuX3Jvd0RlZnM9YTAodGhpcy5fZ2V0T3duRGVmcyh0aGlzLl9jb250ZW50Um93RGVmcyksdGhpcy5fY3VzdG9tUm93RGVmcyk7Y29uc3QgdD10aGlzLl9yb3dEZWZzLmZpbHRlcigodD0+IXQud2hlbikpO2lmKCF0aGlzLm11bHRpVGVtcGxhdGVEYXRhUm93cyYmdC5sZW5ndGg+MSYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpKXRocm93KGZ1bmN0aW9uIGUoKXtyZXR1cm4gRXJyb3IoIlRoZXJlIGNhbiBvbmx5IGJlIG9uZSBkZWZhdWx0IHJvdyB3aXRob3V0IGEgd2hlbiBwcmVkaWNhdGUgZnVuY3Rpb24uIil9KSgpO3RoaXMuX2RlZmF1bHRSb3dEZWY9dFswXX1fcmVuZGVyVXBkYXRlZENvbHVtbnMoKXtjb25zdCB0PSh0LGUpPT50fHwhIWUuZ2V0Q29sdW1uc0RpZmYoKSxlPXRoaXMuX3Jvd0RlZnMucmVkdWNlKHQsITEpO2UmJnRoaXMuX2ZvcmNlUmVuZGVyRGF0YVJvd3MoKTtjb25zdCBuPXRoaXMuX2hlYWRlclJvd0RlZnMucmVkdWNlKHQsITEpO24mJnRoaXMuX2ZvcmNlUmVuZGVySGVhZGVyUm93cygpO2NvbnN0IG89dGhpcy5fZm9vdGVyUm93RGVmcy5yZWR1Y2UodCwhMSk7cmV0dXJuIG8mJnRoaXMuX2ZvcmNlUmVuZGVyRm9vdGVyUm93cygpLGV8fG58fG99X3N3aXRjaERhdGFTb3VyY2UodCl7dGhpcy5fZGF0YT1bXSxGSCh0aGlzLmRhdGFTb3VyY2UpJiZ0aGlzLmRhdGFTb3VyY2UuZGlzY29ubmVjdCh0aGlzKSx0aGlzLl9yZW5kZXJDaGFuZ2VTdWJzY3JpcHRpb24mJih0aGlzLl9yZW5kZXJDaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9yZW5kZXJDaGFuZ2VTdWJzY3JpcHRpb249bnVsbCksdHx8KHRoaXMuX2RhdGFEaWZmZXImJnRoaXMuX2RhdGFEaWZmZXIuZGlmZihbXSksdGhpcy5fcm93T3V0bGV0LnZpZXdDb250YWluZXIuY2xlYXIoKSksdGhpcy5fZGF0YVNvdXJjZT10fV9vYnNlcnZlUmVuZGVyQ2hhbmdlcygpe2lmKCF0aGlzLmRhdGFTb3VyY2UpcmV0dXJuO2xldCB0O2lmKEZIKHRoaXMuZGF0YVNvdXJjZSk/dD10aGlzLmRhdGFTb3VyY2UuY29ubmVjdCh0aGlzKTp1dCh0aGlzLmRhdGFTb3VyY2UpP3Q9dGhpcy5kYXRhU291cmNlOkFycmF5LmlzQXJyYXkodGhpcy5kYXRhU291cmNlKSYmKHQ9Wih0aGlzLmRhdGFTb3VyY2UpKSx2b2lkIDA9PT10JiYoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkpdGhyb3coZnVuY3Rpb24gZSgpe3JldHVybiBFcnJvcigiUHJvdmlkZWQgZGF0YSBzb3VyY2UgZGlkIG5vdCBtYXRjaCBhbiBhcnJheSwgT2JzZXJ2YWJsZSwgb3IgRGF0YVNvdXJjZSIpfSkoKTt0aGlzLl9yZW5kZXJDaGFuZ2VTdWJzY3JpcHRpb249dC5waXBlKHVuKHRoaXMuX29uRGVzdHJveSkpLnN1YnNjcmliZSgodD0+e3RoaXMuX2RhdGE9dHx8W10sdGhpcy5yZW5kZXJSb3dzKCl9KSl9X2ZvcmNlUmVuZGVySGVhZGVyUm93cygpe3RoaXMuX2hlYWRlclJvd091dGxldC52aWV3Q29udGFpbmVyLmxlbmd0aD4wJiZ0aGlzLl9oZWFkZXJSb3dPdXRsZXQudmlld0NvbnRhaW5lci5jbGVhcigpLHRoaXMuX2hlYWRlclJvd0RlZnMuZm9yRWFjaCgoKHQsZSk9PnRoaXMuX3JlbmRlclJvdyh0aGlzLl9oZWFkZXJSb3dPdXRsZXQsdCxlKSkpLHRoaXMudXBkYXRlU3RpY2t5SGVhZGVyUm93U3R5bGVzKCl9X2ZvcmNlUmVuZGVyRm9vdGVyUm93cygpe3RoaXMuX2Zvb3RlclJvd091dGxldC52aWV3Q29udGFpbmVyLmxlbmd0aD4wJiZ0aGlzLl9mb290ZXJSb3dPdXRsZXQudmlld0NvbnRhaW5lci5jbGVhcigpLHRoaXMuX2Zvb3RlclJvd0RlZnMuZm9yRWFjaCgoKHQsZSk9PnRoaXMuX3JlbmRlclJvdyh0aGlzLl9mb290ZXJSb3dPdXRsZXQsdCxlKSkpLHRoaXMudXBkYXRlU3RpY2t5Rm9vdGVyUm93U3R5bGVzKCl9X2FkZFN0aWNreUNvbHVtblN0eWxlcyh0LGUpe2NvbnN0IG49QXJyYXkuZnJvbShlLmNvbHVtbnN8fFtdKS5tYXAoKHQ9Pntjb25zdCBlPXRoaXMuX2NvbHVtbkRlZnNCeU5hbWUuZ2V0KHQpO2lmKCFlJiYoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkpdGhyb3cgSiQodCk7cmV0dXJuIGV9KSksbz1uLm1hcCgodD0+dC5zdGlja3kpKSxpPW4ubWFwKCh0PT50LnN0aWNreUVuZCkpO3RoaXMuX3N0aWNreVN0eWxlci51cGRhdGVTdGlja3lDb2x1bW5zKHQsbyxpLCF0aGlzLl9maXhlZExheW91dHx8dGhpcy5fZm9yY2VSZWNhbGN1bGF0ZUNlbGxXaWR0aHMpfV9nZXRSZW5kZXJlZFJvd3ModCl7Y29uc3QgZT1bXTtmb3IobGV0IG49MDtuPHQudmlld0NvbnRhaW5lci5sZW5ndGg7bisrKXtjb25zdCBvPXQudmlld0NvbnRhaW5lci5nZXQobik7ZS5wdXNoKG8ucm9vdE5vZGVzWzBdKX1yZXR1cm4gZX1fZ2V0Um93RGVmcyh0LGUpe2lmKDE9PXRoaXMuX3Jvd0RlZnMubGVuZ3RoKXJldHVyblt0aGlzLl9yb3dEZWZzWzBdXTtsZXQgbj1bXTtpZih0aGlzLm11bHRpVGVtcGxhdGVEYXRhUm93cyluPXRoaXMuX3Jvd0RlZnMuZmlsdGVyKChuPT4hbi53aGVufHxuLndoZW4oZSx0KSkpO2Vsc2V7bGV0IG89dGhpcy5fcm93RGVmcy5maW5kKChuPT5uLndoZW4mJm4ud2hlbihlLHQpKSl8fHRoaXMuX2RlZmF1bHRSb3dEZWY7byYmbi5wdXNoKG8pfWlmKCFuLmxlbmd0aCYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpKXRocm93KGZ1bmN0aW9uIG8odCl7cmV0dXJuIEVycm9yKGBDb3VsZCBub3QgZmluZCBhIG1hdGNoaW5nIHJvdyBkZWZpbml0aW9uIGZvciB0aGVwcm92aWRlZCByb3cgZGF0YTogJHtKU09OLnN0cmluZ2lmeSh0KX1gKX0pKHQpO3JldHVybiBufV9nZXRFbWJlZGRlZFZpZXdBcmdzKHQsZSl7cmV0dXJue3RlbXBsYXRlUmVmOnQucm93RGVmLnRlbXBsYXRlLGNvbnRleHQ6eyRpbXBsaWNpdDp0LmRhdGF9LGluZGV4OmV9fV9yZW5kZXJSb3codCxlLG4sbz17fSl7Y29uc3QgaT10LnZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KGUudGVtcGxhdGUsbyxuKTtyZXR1cm4gdGhpcy5fcmVuZGVyQ2VsbFRlbXBsYXRlRm9ySXRlbShlLG8pLGl9X3JlbmRlckNlbGxUZW1wbGF0ZUZvckl0ZW0odCxlKXtmb3IobGV0IG4gb2YgdGhpcy5fZ2V0Q2VsbFRlbXBsYXRlcyh0KSlXJC5tb3N0UmVjZW50Q2VsbE91dGxldCYmVyQubW9zdFJlY2VudENlbGxPdXRsZXQuX3ZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KG4sZSk7dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9X3VwZGF0ZVJvd0luZGV4Q29udGV4dCgpe2NvbnN0IHQ9dGhpcy5fcm93T3V0bGV0LnZpZXdDb250YWluZXI7Zm9yKGxldCBlPTAsbj10Lmxlbmd0aDtlPG47ZSsrKXtjb25zdCBvPXQuZ2V0KGUpLmNvbnRleHQ7by5jb3VudD1uLG8uZmlyc3Q9MD09PWUsby5sYXN0PWU9PT1uLTEsby5ldmVuPWUlMj09MCxvLm9kZD0hby5ldmVuLHRoaXMubXVsdGlUZW1wbGF0ZURhdGFSb3dzPyhvLmRhdGFJbmRleD10aGlzLl9yZW5kZXJSb3dzW2VdLmRhdGFJbmRleCxvLnJlbmRlckluZGV4PWUpOm8uaW5kZXg9dGhpcy5fcmVuZGVyUm93c1tlXS5kYXRhSW5kZXh9fV9nZXRDZWxsVGVtcGxhdGVzKHQpe3JldHVybiB0JiZ0LmNvbHVtbnM/QXJyYXkuZnJvbSh0LmNvbHVtbnMsKGU9Pntjb25zdCBuPXRoaXMuX2NvbHVtbkRlZnNCeU5hbWUuZ2V0KGUpO2lmKCFuJiYoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkpdGhyb3cgSiQoZSk7cmV0dXJuIHQuZXh0cmFjdENlbGxUZW1wbGF0ZShuKX0pKTpbXX1fYXBwbHlOYXRpdmVUYWJsZVNlY3Rpb25zKCl7Y29uc3QgdD10aGlzLl9kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksZT1be3RhZzoidGhlYWQiLG91dGxldHM6W3RoaXMuX2hlYWRlclJvd091dGxldF19LHt0YWc6InRib2R5IixvdXRsZXRzOlt0aGlzLl9yb3dPdXRsZXQsdGhpcy5fbm9EYXRhUm93T3V0bGV0XX0se3RhZzoidGZvb3QiLG91dGxldHM6W3RoaXMuX2Zvb3RlclJvd091dGxldF19XTtmb3IoY29uc3QgbiBvZiBlKXtjb25zdCBlPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQobi50YWcpO2Uuc2V0QXR0cmlidXRlKCJyb2xlIiwicm93Z3JvdXAiKTtmb3IoY29uc3QgdCBvZiBuLm91dGxldHMpZS5hcHBlbmRDaGlsZCh0LmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7dC5hcHBlbmRDaGlsZChlKX10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQodCl9X2ZvcmNlUmVuZGVyRGF0YVJvd3MoKXt0aGlzLl9kYXRhRGlmZmVyLmRpZmYoW10pLHRoaXMuX3Jvd091dGxldC52aWV3Q29udGFpbmVyLmNsZWFyKCksdGhpcy5yZW5kZXJSb3dzKCl9X2NoZWNrU3RpY2t5U3RhdGVzKCl7Y29uc3QgdD0odCxlKT0+dHx8ZS5oYXNTdGlja3lDaGFuZ2VkKCk7dGhpcy5faGVhZGVyUm93RGVmcy5yZWR1Y2UodCwhMSkmJnRoaXMudXBkYXRlU3RpY2t5SGVhZGVyUm93U3R5bGVzKCksdGhpcy5fZm9vdGVyUm93RGVmcy5yZWR1Y2UodCwhMSkmJnRoaXMudXBkYXRlU3RpY2t5Rm9vdGVyUm93U3R5bGVzKCksQXJyYXkuZnJvbSh0aGlzLl9jb2x1bW5EZWZzQnlOYW1lLnZhbHVlcygpKS5yZWR1Y2UodCwhMSkmJih0aGlzLl9zdGlja3lDb2x1bW5TdHlsZXNOZWVkUmVzZXQ9ITAsdGhpcy51cGRhdGVTdGlja3lDb2x1bW5TdHlsZXMoKSl9X3NldHVwU3RpY2t5U3R5bGVyKCl7dGhpcy5fc3RpY2t5U3R5bGVyPW5ldyBLJCh0aGlzLl9pc05hdGl2ZUh0bWxUYWJsZSx0aGlzLnN0aWNreUNzc0NsYXNzLHRoaXMuX2Rpcj90aGlzLl9kaXIudmFsdWU6Imx0ciIsdGhpcy5fY29hbGVzY2VkU3R5bGVTY2hlZHVsZXIsdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyLHRoaXMubmVlZHNQb3NpdGlvblN0aWNreU9uRWxlbWVudCx0aGlzLl9zdGlja3lQb3NpdGlvbmluZ0xpc3RlbmVyKSwodGhpcy5fZGlyP3RoaXMuX2Rpci5jaGFuZ2U6WigpKS5waXBlKHVuKHRoaXMuX29uRGVzdHJveSkpLnN1YnNjcmliZSgodD0+e3RoaXMuX3N0aWNreVN0eWxlci5kaXJlY3Rpb249dCx0aGlzLnVwZGF0ZVN0aWNreUNvbHVtblN0eWxlcygpfSkpfV9nZXRPd25EZWZzKHQpe3JldHVybiB0LmZpbHRlcigodD0+IXQuX3RhYmxlfHx0Ll90YWJsZT09PXRoaXMpKX1fdXBkYXRlTm9EYXRhUm93KCl7Y29uc3QgdD10aGlzLl9jdXN0b21Ob0RhdGFSb3d8fHRoaXMuX25vRGF0YVJvdztpZih0KXtjb25zdCBlPTA9PT10aGlzLl9yb3dPdXRsZXQudmlld0NvbnRhaW5lci5sZW5ndGg7aWYoZSE9PXRoaXMuX2lzU2hvd2luZ05vRGF0YVJvdyl7Y29uc3Qgbj10aGlzLl9ub0RhdGFSb3dPdXRsZXQudmlld0NvbnRhaW5lcjtlP24uY3JlYXRlRW1iZWRkZWRWaWV3KHQudGVtcGxhdGVSZWYpOm4uY2xlYXIoKSx0aGlzLl9pc1Nob3dpbmdOb0RhdGFSb3c9ZX19fX1mdW5jdGlvbiBhMCh0LGUpe3JldHVybiB0LmNvbmNhdChBcnJheS5mcm9tKGUpKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovaTAuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGkwKShNdShFaCksTXUoSGgpLE11KGNoKSxPcigicm9sZSIpLE11KE16LDgpLE11KFVDKSxNdShmSSksTXUoV0gsOCksTXUoSSQsOCksTXUoUSQsMTIpLE11KFFILDgpKX0saTAuybVjbXA9VW8oe3R5cGU6aTAsc2VsZWN0b3JzOltbImNkay10YWJsZSJdLFsidGFibGUiLCJjZGstdGFibGUiLCIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24gdChlLG4sbyl7aWYoMSZlJiYoR2IobyxaJCwxKSxHYihvLEQkLDEpLEdiKG8sVSQsMSksR2IobyxCJCwxKSxHYihvLGokLDEpKSwyJmUpe2xldCB0O1ViKHQ9WWIoKSkmJihuLl9ub0RhdGFSb3c9dC5maXJzdCksVWIodD1ZYigpKSYmKG4uX2NvbnRlbnRDb2x1bW5EZWZzPXQpLFViKHQ9WWIoKSkmJihuLl9jb250ZW50Um93RGVmcz10KSxVYih0PVliKCkpJiYobi5fY29udGVudEhlYWRlclJvd0RlZnM9dCksVWIodD1ZYigpKSYmKG4uX2NvbnRlbnRGb290ZXJSb3dEZWZzPXQpfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJihXYigkJCwzKSxXYih0MCwzKSxXYihlMCwzKSxXYihuMCwzKSksMiZlKXtsZXQgdDtVYih0PVliKCkpJiYobi5fcm93T3V0bGV0PXQuZmlyc3QpLFViKHQ9WWIoKSkmJihuLl9oZWFkZXJSb3dPdXRsZXQ9dC5maXJzdCksVWIodD1ZYigpKSYmKG4uX2Zvb3RlclJvd091dGxldD10LmZpcnN0KSxVYih0PVliKCkpJiYobi5fbm9EYXRhUm93T3V0bGV0PXQuZmlyc3QpfX0saG9zdEF0dHJzOlsxLCJjZGstdGFibGUiXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MiZlJiZhZigiY2RrLXRhYmxlLWZpeGVkLWxheW91dCIsbi5maXhlZExheW91dCl9LGlucHV0czp7dHJhY2tCeToidHJhY2tCeSIsZGF0YVNvdXJjZToiZGF0YVNvdXJjZSIsbXVsdGlUZW1wbGF0ZURhdGFSb3dzOiJtdWx0aVRlbXBsYXRlRGF0YVJvd3MiLGZpeGVkTGF5b3V0OiJmaXhlZExheW91dCJ9LGV4cG9ydEFzOlsiY2RrVGFibGUiXSxmZWF0dXJlczpbaWgoW3twcm92aWRlOngkLHVzZUV4aXN0aW5nOmkwfSx7cHJvdmlkZTpXSCx1c2VDbGFzczpCSH0se3Byb3ZpZGU6SSQsdXNlQ2xhc3M6eiR9LHtwcm92aWRlOlEkLHVzZVZhbHVlOm51bGx9XSldLG5nQ29udGVudFNlbGVjdG9yczpbImNhcHRpb24iLCJjb2xncm91cCwgY29sIl0sZGVjbHM6Nix2YXJzOjAsY29uc3RzOltbImhlYWRlclJvd091dGxldCIsIiJdLFsicm93T3V0bGV0IiwiIl0sWyJub0RhdGFSb3dPdXRsZXQiLCIiXSxbImZvb3RlclJvd091dGxldCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoVnUoXyQpLGp1KDApLGp1KDEsMSksRHUoMiwwKSxEdSgzLDEpLER1KDQsMiksRHUoNSwzKSl9LGRpcmVjdGl2ZXM6W3QwLCQkLG4wLGUwXSxzdHlsZXM6WyIuY2RrLXRhYmxlLWZpeGVkLWxheW91dHt0YWJsZS1sYXlvdXQ6Zml4ZWR9XG4iXSxlbmNhcHN1bGF0aW9uOjJ9KSxpMC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOkVofSx7dHlwZTpIaH0se3R5cGU6Y2h9LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpScixhcmdzOlsicm9sZSJdfV19LHt0eXBlOk16LGRlY29yYXRvcnM6W3t0eXBlOl9zfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltVQ119XX0se3R5cGU6Zkl9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbV0hdfV19LHt0eXBlOnokLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltJJF19XX0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTpNc30se3R5cGU6eXMsYXJnczpbUSRdfV19LHt0eXBlOlFILGRlY29yYXRvcnM6W3t0eXBlOl9zfV19XSxpMC5wcm9wRGVjb3JhdG9ycz17dHJhY2tCeTpbe3R5cGU6eV99XSxkYXRhU291cmNlOlt7dHlwZTp5X31dLG11bHRpVGVtcGxhdGVEYXRhUm93czpbe3R5cGU6eV99XSxmaXhlZExheW91dDpbe3R5cGU6eV99XSxfcm93T3V0bGV0Olt7dHlwZTpGcixhcmdzOlskJCx7c3RhdGljOiEwfV19XSxfaGVhZGVyUm93T3V0bGV0Olt7dHlwZTpGcixhcmdzOlt0MCx7c3RhdGljOiEwfV19XSxfZm9vdGVyUm93T3V0bGV0Olt7dHlwZTpGcixhcmdzOltlMCx7c3RhdGljOiEwfV19XSxfbm9EYXRhUm93T3V0bGV0Olt7dHlwZTpGcixhcmdzOltuMCx7c3RhdGljOiEwfV19XSxfY29udGVudENvbHVtbkRlZnM6W3t0eXBlOnpyLGFyZ3M6W0QkLHtkZXNjZW5kYW50czohMH1dfV0sX2NvbnRlbnRSb3dEZWZzOlt7dHlwZTp6cixhcmdzOltVJCx7ZGVzY2VuZGFudHM6ITB9XX1dLF9jb250ZW50SGVhZGVyUm93RGVmczpbe3R5cGU6enIsYXJnczpbQiQse2Rlc2NlbmRhbnRzOiEwfV19XSxfY29udGVudEZvb3RlclJvd0RlZnM6W3t0eXBlOnpyLGFyZ3M6W2okLHtkZXNjZW5kYW50czohMH1dfV0sX25vRGF0YVJvdzpbe3R5cGU6SHIsYXJnczpbWiRdfV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoaTAsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoiY2RrLXRhYmxlLCB0YWJsZVtjZGstdGFibGVdIixleHBvcnRBczoiY2RrVGFibGUiLHRlbXBsYXRlOm8wLGhvc3Q6e2NsYXNzOiJjZGstdGFibGUiLCJbY2xhc3MuY2RrLXRhYmxlLWZpeGVkLWxheW91dF0iOiJmaXhlZExheW91dCJ9LGVuY2Fwc3VsYXRpb246UG8uTm9uZSxjaGFuZ2VEZXRlY3Rpb246eG8uRGVmYXVsdCxwcm92aWRlcnM6W3twcm92aWRlOngkLHVzZUV4aXN0aW5nOmkwfSx7cHJvdmlkZTpXSCx1c2VDbGFzczpCSH0se3Byb3ZpZGU6SSQsdXNlQ2xhc3M6eiR9LHtwcm92aWRlOlEkLHVzZVZhbHVlOm51bGx9XSxzdHlsZXM6WyIuY2RrLXRhYmxlLWZpeGVkLWxheW91dHt0YWJsZS1sYXlvdXQ6Zml4ZWR9XG4iXX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkVofSx7dHlwZTpIaH0se3R5cGU6Y2h9LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpScixhcmdzOlsicm9sZSJdfV19LHt0eXBlOk16LGRlY29yYXRvcnM6W3t0eXBlOl9zfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltVQ119XX0se3R5cGU6Zkl9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbV0hdfV19LHt0eXBlOnokLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltJJF19XX0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTpNc30se3R5cGU6eXMsYXJnczpbUSRdfV19LHt0eXBlOlFILGRlY29yYXRvcnM6W3t0eXBlOl9zfV19XX0pLHt0cmFja0J5Olt7dHlwZTp5X31dLGRhdGFTb3VyY2U6W3t0eXBlOnlffV0sbXVsdGlUZW1wbGF0ZURhdGFSb3dzOlt7dHlwZTp5X31dLGZpeGVkTGF5b3V0Olt7dHlwZTp5X31dLF9yb3dPdXRsZXQ6W3t0eXBlOkZyLGFyZ3M6WyQkLHtzdGF0aWM6ITB9XX1dLF9oZWFkZXJSb3dPdXRsZXQ6W3t0eXBlOkZyLGFyZ3M6W3QwLHtzdGF0aWM6ITB9XX1dLF9mb290ZXJSb3dPdXRsZXQ6W3t0eXBlOkZyLGFyZ3M6W2UwLHtzdGF0aWM6ITB9XX1dLF9ub0RhdGFSb3dPdXRsZXQ6W3t0eXBlOkZyLGFyZ3M6W24wLHtzdGF0aWM6ITB9XX1dLF9jb250ZW50Q29sdW1uRGVmczpbe3R5cGU6enIsYXJnczpbRCQse2Rlc2NlbmRhbnRzOiEwfV19XSxfY29udGVudFJvd0RlZnM6W3t0eXBlOnpyLGFyZ3M6W1UkLHtkZXNjZW5kYW50czohMH1dfV0sX2NvbnRlbnRIZWFkZXJSb3dEZWZzOlt7dHlwZTp6cixhcmdzOltCJCx7ZGVzY2VuZGFudHM6ITB9XX1dLF9jb250ZW50Rm9vdGVyUm93RGVmczpbe3R5cGU6enIsYXJnczpbaiQse2Rlc2NlbmRhbnRzOiEwfV19XSxfbm9EYXRhUm93Olt7dHlwZTpIcixhcmdzOltaJF19XX0pO2NsYXNzIHIwe2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5fdGFibGU9dCx0aGlzLl9vcHRpb25zPWUsdGhpcy5qdXN0aWZ5PSJzdGFydCIsdGhpcy5fb3B0aW9ucz1lfHx7fX1nZXQgbmFtZSgpe3JldHVybiB0aGlzLl9uYW1lfXNldCBuYW1lKHQpe3RoaXMuX25hbWU9dCx0aGlzLl9zeW5jQ29sdW1uRGVmTmFtZSgpfW5nT25Jbml0KCl7aWYodGhpcy5fc3luY0NvbHVtbkRlZk5hbWUoKSx2b2lkIDA9PT10aGlzLmhlYWRlclRleHQmJih0aGlzLmhlYWRlclRleHQ9dGhpcy5fY3JlYXRlRGVmYXVsdEhlYWRlclRleHQoKSksdGhpcy5kYXRhQWNjZXNzb3J8fCh0aGlzLmRhdGFBY2Nlc3Nvcj10aGlzLl9vcHRpb25zLmRlZmF1bHREYXRhQWNjZXNzb3J8fCgodCxlKT0+dFtlXSkpLHRoaXMuX3RhYmxlKXRoaXMuY29sdW1uRGVmLmNlbGw9dGhpcy5jZWxsLHRoaXMuY29sdW1uRGVmLmhlYWRlckNlbGw9dGhpcy5oZWFkZXJDZWxsLHRoaXMuX3RhYmxlLmFkZENvbHVtbkRlZih0aGlzLmNvbHVtbkRlZik7ZWxzZSBpZigidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKXRocm93KGZ1bmN0aW9uIHQoKXtyZXR1cm4gRXJyb3IoIlRleHQgY29sdW1uIGNvdWxkIG5vdCBmaW5kIGEgcGFyZW50IHRhYmxlIGZvciByZWdpc3RyYXRpb24uIil9KSgpfW5nT25EZXN0cm95KCl7dGhpcy5fdGFibGUmJnRoaXMuX3RhYmxlLnJlbW92ZUNvbHVtbkRlZih0aGlzLmNvbHVtbkRlZil9X2NyZWF0ZURlZmF1bHRIZWFkZXJUZXh0KCl7Y29uc3QgdD10aGlzLm5hbWU7aWYoIXQmJigidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSl0aHJvdyhmdW5jdGlvbiBlKCl7cmV0dXJuIEVycm9yKCJUYWJsZSB0ZXh0IGNvbHVtbiBtdXN0IGhhdmUgYSBuYW1lLiIpfSkoKTtyZXR1cm4gdGhpcy5fb3B0aW9ucyYmdGhpcy5fb3B0aW9ucy5kZWZhdWx0SGVhZGVyVGV4dFRyYW5zZm9ybT90aGlzLl9vcHRpb25zLmRlZmF1bHRIZWFkZXJUZXh0VHJhbnNmb3JtKHQpOnRbMF0udG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpfV9zeW5jQ29sdW1uRGVmTmFtZSgpe3RoaXMuY29sdW1uRGVmJiYodGhpcy5jb2x1bW5EZWYubmFtZT10aGlzLm5hbWUpfX1yMC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8cjApKE11KGkwLDgpLE11KE8kLDgpKX0scjAuybVjbXA9VW8oe3R5cGU6cjAsc2VsZWN0b3JzOltbImNkay10ZXh0LWNvbHVtbiJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24gdChlLG4pe2lmKDEmZSYmKFdiKEQkLDMpLFdiKFAkLDMpLFdiKHckLDMpKSwyJmUpe2xldCB0O1ViKHQ9WWIoKSkmJihuLmNvbHVtbkRlZj10LmZpcnN0KSxVYih0PVliKCkpJiYobi5jZWxsPXQuZmlyc3QpLFViKHQ9WWIoKSkmJihuLmhlYWRlckNlbGw9dC5maXJzdCl9fSxpbnB1dHM6e2p1c3RpZnk6Imp1c3RpZnkiLG5hbWU6Im5hbWUiLGhlYWRlclRleHQ6ImhlYWRlclRleHQiLGRhdGFBY2Nlc3NvcjoiZGF0YUFjY2Vzc29yIn0sZGVjbHM6Myx2YXJzOjAsY29uc3RzOltbImNka0NvbHVtbkRlZiIsIiJdLFsiY2RrLWhlYWRlci1jZWxsIiwiIiwzLCJ0ZXh0LWFsaWduIiw0LCJjZGtIZWFkZXJDZWxsRGVmIl0sWyJjZGstY2VsbCIsIiIsMywidGV4dC1hbGlnbiIsNCwiY2RrQ2VsbERlZiJdLFsiY2RrLWhlYWRlci1jZWxsIiwiIl0sWyJjZGstY2VsbCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoa3UoMCwwKSxXbSgxLEMkLDIsMywidGgiLDEpLFdtKDIsTSQsMiwzLCJ0ZCIsMiksU3UoKSl9LGRpcmVjdGl2ZXM6W0QkLHckLFAkLEEkLFQkXSxlbmNhcHN1bGF0aW9uOjJ9KSxyMC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmkwLGRlY29yYXRvcnM6W3t0eXBlOl9zfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbTyRdfV19XSxyMC5wcm9wRGVjb3JhdG9ycz17bmFtZTpbe3R5cGU6eV99XSxoZWFkZXJUZXh0Olt7dHlwZTp5X31dLGRhdGFBY2Nlc3Nvcjpbe3R5cGU6eV99XSxqdXN0aWZ5Olt7dHlwZTp5X31dLGNvbHVtbkRlZjpbe3R5cGU6RnIsYXJnczpbRCQse3N0YXRpYzohMH1dfV0sY2VsbDpbe3R5cGU6RnIsYXJnczpbUCQse3N0YXRpYzohMH1dfV0saGVhZGVyQ2VsbDpbe3R5cGU6RnIsYXJnczpbdyQse3N0YXRpYzohMH1dfV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIocjAsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoiY2RrLXRleHQtY29sdW1uIix0ZW1wbGF0ZTonXG4gICAgPG5nLWNvbnRhaW5lciBjZGtDb2x1bW5EZWY+XG4gICAgICA8dGggY2RrLWhlYWRlci1jZWxsICpjZGtIZWFkZXJDZWxsRGVmIFtzdHlsZS50ZXh0LWFsaWduXT0ianVzdGlmeSI+XG4gICAgICAgIHt7aGVhZGVyVGV4dH19XG4gICAgICA8L3RoPlxuICAgICAgPHRkIGNkay1jZWxsICpjZGtDZWxsRGVmPSJsZXQgZGF0YSIgW3N0eWxlLnRleHQtYWxpZ25dPSJqdXN0aWZ5Ij5cbiAgICAgICAge3tkYXRhQWNjZXNzb3IoZGF0YSwgbmFtZSl9fVxuICAgICAgPC90ZD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgJyxlbmNhcHN1bGF0aW9uOlBvLk5vbmUsY2hhbmdlRGV0ZWN0aW9uOnhvLkRlZmF1bHR9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTppMCxkZWNvcmF0b3JzOlt7dHlwZTpfc31dfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W08kXX1dfV19KSx7anVzdGlmeTpbe3R5cGU6eV99XSxuYW1lOlt7dHlwZTp5X31dLGhlYWRlclRleHQ6W3t0eXBlOnlffV0sZGF0YUFjY2Vzc29yOlt7dHlwZTp5X31dLGNvbHVtbkRlZjpbe3R5cGU6RnIsYXJnczpbRCQse3N0YXRpYzohMH1dfV0sY2VsbDpbe3R5cGU6RnIsYXJnczpbUCQse3N0YXRpYzohMH1dfV0saGVhZGVyQ2VsbDpbe3R5cGU6RnIsYXJnczpbdyQse3N0YXRpYzohMH1dfV19KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IHMwPVtpMCxVJCxQJCxXJCx3JCxrJCxEJCxUJCxxJCxBJCxSJCxHJCxCJCxZJCxqJCwkJCx0MCxlMCxyMCxaJCxuMF07Y2xhc3MgbDB7fWwwLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxsMCl9LGwwLsm1bW9kPVpvKHt0eXBlOmwwfSksbDAuybVpbmo9Y28oe2ltcG9ydHM6W1tpRl1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhsMCx7ZGVjbGFyYXRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuW2kwLFUkLFAkLFckLHckLGskLEQkLFQkLHEkLEEkLFIkLEckLEIkLFkkLGokLCQkLHQwLGUwLHIwLFokLG4wXX0saW1wb3J0czpmdW5jdGlvbigpe3JldHVybltpRl19LGV4cG9ydHM6ZnVuY3Rpb24oKXtyZXR1cm5baTAsVSQsUCQsVyQsdyQsayQsRCQsVCQscSQsQSQsUiQsRyQsQiQsWSQsaiQsJCQsdDAsZTAscjAsWiQsbjBdfX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIobDAsW3t0eXBlOmtfLGFyZ3M6W3tleHBvcnRzOnMwLGRlY2xhcmF0aW9uczpzMCxpbXBvcnRzOltpRl19XX1dLG51bGwsbnVsbCk7Y29uc3QgYzA9W1tbImNhcHRpb24iXV0sW1siY29sZ3JvdXAiXSxbImNvbCJdXV07ZnVuY3Rpb24gZDAodCxlKXtpZigxJnQmJihPdSgwLCJ0aCIsMyksTWYoMSksUHUoKSksMiZ0KXtjb25zdCB0PUx1KCk7b2YoInRleHQtYWxpZ24iLHQuanVzdGlmeSksSmMoMSkseGYoIiAiLHQuaGVhZGVyVGV4dCwiICIpfX1mdW5jdGlvbiBwMCh0LGUpe2lmKDEmdCYmKE91KDAsInRkIiw0KSxNZigxKSxQdSgpKSwyJnQpe2NvbnN0IHQ9ZS4kaW1wbGljaXQsbj1MdSgpO29mKCJ0ZXh0LWFsaWduIixuLmp1c3RpZnkpLEpjKDEpLHhmKCIgIixuLmRhdGFBY2Nlc3Nvcih0LG4ubmFtZSksIiAiKX19Y2xhc3MgbTAgZXh0ZW5kcyBpMHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5zdGlja3lDc3NDbGFzcz0ibWF0LXRhYmxlLXN0aWNreSIsdGhpcy5uZWVkc1Bvc2l0aW9uU3RpY2t5T25FbGVtZW50PSExfX1tMC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiB1MChlfHxtMCl9LG0wLsm1Y21wPVVvKHt0eXBlOm0wLHNlbGVjdG9yczpbWyJtYXQtdGFibGUiXSxbInRhYmxlIiwibWF0LXRhYmxlIiwiIl1dLGhvc3RBdHRyczpbMSwibWF0LXRhYmxlIl0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezImZSYmYWYoIm1hdC10YWJsZS1maXhlZC1sYXlvdXQiLG4uZml4ZWRMYXlvdXQpfSxleHBvcnRBczpbIm1hdFRhYmxlIl0sZmVhdHVyZXM6W2loKFt7cHJvdmlkZTpXSCx1c2VDbGFzczpCSH0se3Byb3ZpZGU6aTAsdXNlRXhpc3Rpbmc6bTB9LHtwcm92aWRlOngkLHVzZUV4aXN0aW5nOm0wfSx7cHJvdmlkZTpJJCx1c2VDbGFzczp6JH1dKSxnbV0sbmdDb250ZW50U2VsZWN0b3JzOlsiY2FwdGlvbiIsImNvbGdyb3VwLCBjb2wiXSxkZWNsczo2LHZhcnM6MCxjb25zdHM6W1siaGVhZGVyUm93T3V0bGV0IiwiIl0sWyJyb3dPdXRsZXQiLCIiXSxbIm5vRGF0YVJvd091dGxldCIsIiJdLFsiZm9vdGVyUm93T3V0bGV0IiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihWdShjMCksanUoMCksanUoMSwxKSxEdSgyLDApLER1KDMsMSksRHUoNCwyKSxEdSg1LDMpKX0sZGlyZWN0aXZlczpbdDAsJCQsbjAsZTBdLHN0eWxlczpbJ21hdC10YWJsZXtkaXNwbGF5OmJsb2NrfW1hdC1oZWFkZXItcm93e21pbi1oZWlnaHQ6NTZweH1tYXQtcm93LG1hdC1mb290ZXItcm93e21pbi1oZWlnaHQ6NDhweH1tYXQtcm93LG1hdC1oZWFkZXItcm93LG1hdC1mb290ZXItcm93e2Rpc3BsYXk6ZmxleDtib3JkZXItd2lkdGg6MDtib3JkZXItYm90dG9tLXdpZHRoOjFweDtib3JkZXItc3R5bGU6c29saWQ7YWxpZ24taXRlbXM6Y2VudGVyO2JveC1zaXppbmc6Ym9yZGVyLWJveH1tYXQtcm93OjphZnRlcixtYXQtaGVhZGVyLXJvdzo6YWZ0ZXIsbWF0LWZvb3Rlci1yb3c6OmFmdGVye2Rpc3BsYXk6aW5saW5lLWJsb2NrO21pbi1oZWlnaHQ6aW5oZXJpdDtjb250ZW50OiIifW1hdC1jZWxsOmZpcnN0LW9mLXR5cGUsbWF0LWhlYWRlci1jZWxsOmZpcnN0LW9mLXR5cGUsbWF0LWZvb3Rlci1jZWxsOmZpcnN0LW9mLXR5cGV7cGFkZGluZy1sZWZ0OjI0cHh9W2Rpcj1ydGxdIG1hdC1jZWxsOmZpcnN0LW9mLXR5cGU6bm90KDpvbmx5LW9mLXR5cGUpLFtkaXI9cnRsXSBtYXQtaGVhZGVyLWNlbGw6Zmlyc3Qtb2YtdHlwZTpub3QoOm9ubHktb2YtdHlwZSksW2Rpcj1ydGxdIG1hdC1mb290ZXItY2VsbDpmaXJzdC1vZi10eXBlOm5vdCg6b25seS1vZi10eXBlKXtwYWRkaW5nLWxlZnQ6MDtwYWRkaW5nLXJpZ2h0OjI0cHh9bWF0LWNlbGw6bGFzdC1vZi10eXBlLG1hdC1oZWFkZXItY2VsbDpsYXN0LW9mLXR5cGUsbWF0LWZvb3Rlci1jZWxsOmxhc3Qtb2YtdHlwZXtwYWRkaW5nLXJpZ2h0OjI0cHh9W2Rpcj1ydGxdIG1hdC1jZWxsOmxhc3Qtb2YtdHlwZTpub3QoOm9ubHktb2YtdHlwZSksW2Rpcj1ydGxdIG1hdC1oZWFkZXItY2VsbDpsYXN0LW9mLXR5cGU6bm90KDpvbmx5LW9mLXR5cGUpLFtkaXI9cnRsXSBtYXQtZm9vdGVyLWNlbGw6bGFzdC1vZi10eXBlOm5vdCg6b25seS1vZi10eXBlKXtwYWRkaW5nLXJpZ2h0OjA7cGFkZGluZy1sZWZ0OjI0cHh9bWF0LWNlbGwsbWF0LWhlYWRlci1jZWxsLG1hdC1mb290ZXItY2VsbHtmbGV4OjE7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtvdmVyZmxvdzpoaWRkZW47d29yZC13cmFwOmJyZWFrLXdvcmQ7bWluLWhlaWdodDppbmhlcml0fXRhYmxlLm1hdC10YWJsZXtib3JkZXItc3BhY2luZzowfXRyLm1hdC1oZWFkZXItcm93e2hlaWdodDo1NnB4fXRyLm1hdC1yb3csdHIubWF0LWZvb3Rlci1yb3d7aGVpZ2h0OjQ4cHh9dGgubWF0LWhlYWRlci1jZWxse3RleHQtYWxpZ246bGVmdH1bZGlyPXJ0bF0gdGgubWF0LWhlYWRlci1jZWxse3RleHQtYWxpZ246cmlnaHR9dGgubWF0LWhlYWRlci1jZWxsLHRkLm1hdC1jZWxsLHRkLm1hdC1mb290ZXItY2VsbHtwYWRkaW5nOjA7Ym9yZGVyLWJvdHRvbS13aWR0aDoxcHg7Ym9yZGVyLWJvdHRvbS1zdHlsZTpzb2xpZH10aC5tYXQtaGVhZGVyLWNlbGw6Zmlyc3Qtb2YtdHlwZSx0ZC5tYXQtY2VsbDpmaXJzdC1vZi10eXBlLHRkLm1hdC1mb290ZXItY2VsbDpmaXJzdC1vZi10eXBle3BhZGRpbmctbGVmdDoyNHB4fVtkaXI9cnRsXSB0aC5tYXQtaGVhZGVyLWNlbGw6Zmlyc3Qtb2YtdHlwZTpub3QoOm9ubHktb2YtdHlwZSksW2Rpcj1ydGxdIHRkLm1hdC1jZWxsOmZpcnN0LW9mLXR5cGU6bm90KDpvbmx5LW9mLXR5cGUpLFtkaXI9cnRsXSB0ZC5tYXQtZm9vdGVyLWNlbGw6Zmlyc3Qtb2YtdHlwZTpub3QoOm9ubHktb2YtdHlwZSl7cGFkZGluZy1sZWZ0OjA7cGFkZGluZy1yaWdodDoyNHB4fXRoLm1hdC1oZWFkZXItY2VsbDpsYXN0LW9mLXR5cGUsdGQubWF0LWNlbGw6bGFzdC1vZi10eXBlLHRkLm1hdC1mb290ZXItY2VsbDpsYXN0LW9mLXR5cGV7cGFkZGluZy1yaWdodDoyNHB4fVtkaXI9cnRsXSB0aC5tYXQtaGVhZGVyLWNlbGw6bGFzdC1vZi10eXBlOm5vdCg6b25seS1vZi10eXBlKSxbZGlyPXJ0bF0gdGQubWF0LWNlbGw6bGFzdC1vZi10eXBlOm5vdCg6b25seS1vZi10eXBlKSxbZGlyPXJ0bF0gdGQubWF0LWZvb3Rlci1jZWxsOmxhc3Qtb2YtdHlwZTpub3QoOm9ubHktb2YtdHlwZSl7cGFkZGluZy1yaWdodDowO3BhZGRpbmctbGVmdDoyNHB4fS5tYXQtdGFibGUtc3RpY2t5e3Bvc2l0aW9uOi13ZWJraXQtc3RpY2t5ICFpbXBvcnRhbnQ7cG9zaXRpb246c3RpY2t5ICFpbXBvcnRhbnR9Lm1hdC10YWJsZS1maXhlZC1sYXlvdXR7dGFibGUtbGF5b3V0OmZpeGVkfVxuJ10sZW5jYXBzdWxhdGlvbjoyfSk7Y29uc3QgdTA9dnIobTApOygidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIobTAsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoibWF0LXRhYmxlLCB0YWJsZVttYXQtdGFibGVdIixleHBvcnRBczoibWF0VGFibGUiLHRlbXBsYXRlOm8wLGhvc3Q6e2NsYXNzOiJtYXQtdGFibGUiLCJbY2xhc3MubWF0LXRhYmxlLWZpeGVkLWxheW91dF0iOiJmaXhlZExheW91dCJ9LHByb3ZpZGVyczpbe3Byb3ZpZGU6V0gsdXNlQ2xhc3M6Qkh9LHtwcm92aWRlOmkwLHVzZUV4aXN0aW5nOm0wfSx7cHJvdmlkZTp4JCx1c2VFeGlzdGluZzptMH0se3Byb3ZpZGU6SSQsdXNlQ2xhc3M6eiR9XSxlbmNhcHN1bGF0aW9uOlBvLk5vbmUsY2hhbmdlRGV0ZWN0aW9uOnhvLkRlZmF1bHQsc3R5bGVzOlsnbWF0LXRhYmxle2Rpc3BsYXk6YmxvY2t9bWF0LWhlYWRlci1yb3d7bWluLWhlaWdodDo1NnB4fW1hdC1yb3csbWF0LWZvb3Rlci1yb3d7bWluLWhlaWdodDo0OHB4fW1hdC1yb3csbWF0LWhlYWRlci1yb3csbWF0LWZvb3Rlci1yb3d7ZGlzcGxheTpmbGV4O2JvcmRlci13aWR0aDowO2JvcmRlci1ib3R0b20td2lkdGg6MXB4O2JvcmRlci1zdHlsZTpzb2xpZDthbGlnbi1pdGVtczpjZW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94fW1hdC1yb3c6OmFmdGVyLG1hdC1oZWFkZXItcm93OjphZnRlcixtYXQtZm9vdGVyLXJvdzo6YWZ0ZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWluLWhlaWdodDppbmhlcml0O2NvbnRlbnQ6IiJ9bWF0LWNlbGw6Zmlyc3Qtb2YtdHlwZSxtYXQtaGVhZGVyLWNlbGw6Zmlyc3Qtb2YtdHlwZSxtYXQtZm9vdGVyLWNlbGw6Zmlyc3Qtb2YtdHlwZXtwYWRkaW5nLWxlZnQ6MjRweH1bZGlyPXJ0bF0gbWF0LWNlbGw6Zmlyc3Qtb2YtdHlwZTpub3QoOm9ubHktb2YtdHlwZSksW2Rpcj1ydGxdIG1hdC1oZWFkZXItY2VsbDpmaXJzdC1vZi10eXBlOm5vdCg6b25seS1vZi10eXBlKSxbZGlyPXJ0bF0gbWF0LWZvb3Rlci1jZWxsOmZpcnN0LW9mLXR5cGU6bm90KDpvbmx5LW9mLXR5cGUpe3BhZGRpbmctbGVmdDowO3BhZGRpbmctcmlnaHQ6MjRweH1tYXQtY2VsbDpsYXN0LW9mLXR5cGUsbWF0LWhlYWRlci1jZWxsOmxhc3Qtb2YtdHlwZSxtYXQtZm9vdGVyLWNlbGw6bGFzdC1vZi10eXBle3BhZGRpbmctcmlnaHQ6MjRweH1bZGlyPXJ0bF0gbWF0LWNlbGw6bGFzdC1vZi10eXBlOm5vdCg6b25seS1vZi10eXBlKSxbZGlyPXJ0bF0gbWF0LWhlYWRlci1jZWxsOmxhc3Qtb2YtdHlwZTpub3QoOm9ubHktb2YtdHlwZSksW2Rpcj1ydGxdIG1hdC1mb290ZXItY2VsbDpsYXN0LW9mLXR5cGU6bm90KDpvbmx5LW9mLXR5cGUpe3BhZGRpbmctcmlnaHQ6MDtwYWRkaW5nLWxlZnQ6MjRweH1tYXQtY2VsbCxtYXQtaGVhZGVyLWNlbGwsbWF0LWZvb3Rlci1jZWxse2ZsZXg6MTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO292ZXJmbG93OmhpZGRlbjt3b3JkLXdyYXA6YnJlYWstd29yZDttaW4taGVpZ2h0OmluaGVyaXR9dGFibGUubWF0LXRhYmxle2JvcmRlci1zcGFjaW5nOjB9dHIubWF0LWhlYWRlci1yb3d7aGVpZ2h0OjU2cHh9dHIubWF0LXJvdyx0ci5tYXQtZm9vdGVyLXJvd3toZWlnaHQ6NDhweH10aC5tYXQtaGVhZGVyLWNlbGx7dGV4dC1hbGlnbjpsZWZ0fVtkaXI9cnRsXSB0aC5tYXQtaGVhZGVyLWNlbGx7dGV4dC1hbGlnbjpyaWdodH10aC5tYXQtaGVhZGVyLWNlbGwsdGQubWF0LWNlbGwsdGQubWF0LWZvb3Rlci1jZWxse3BhZGRpbmc6MDtib3JkZXItYm90dG9tLXdpZHRoOjFweDtib3JkZXItYm90dG9tLXN0eWxlOnNvbGlkfXRoLm1hdC1oZWFkZXItY2VsbDpmaXJzdC1vZi10eXBlLHRkLm1hdC1jZWxsOmZpcnN0LW9mLXR5cGUsdGQubWF0LWZvb3Rlci1jZWxsOmZpcnN0LW9mLXR5cGV7cGFkZGluZy1sZWZ0OjI0cHh9W2Rpcj1ydGxdIHRoLm1hdC1oZWFkZXItY2VsbDpmaXJzdC1vZi10eXBlOm5vdCg6b25seS1vZi10eXBlKSxbZGlyPXJ0bF0gdGQubWF0LWNlbGw6Zmlyc3Qtb2YtdHlwZTpub3QoOm9ubHktb2YtdHlwZSksW2Rpcj1ydGxdIHRkLm1hdC1mb290ZXItY2VsbDpmaXJzdC1vZi10eXBlOm5vdCg6b25seS1vZi10eXBlKXtwYWRkaW5nLWxlZnQ6MDtwYWRkaW5nLXJpZ2h0OjI0cHh9dGgubWF0LWhlYWRlci1jZWxsOmxhc3Qtb2YtdHlwZSx0ZC5tYXQtY2VsbDpsYXN0LW9mLXR5cGUsdGQubWF0LWZvb3Rlci1jZWxsOmxhc3Qtb2YtdHlwZXtwYWRkaW5nLXJpZ2h0OjI0cHh9W2Rpcj1ydGxdIHRoLm1hdC1oZWFkZXItY2VsbDpsYXN0LW9mLXR5cGU6bm90KDpvbmx5LW9mLXR5cGUpLFtkaXI9cnRsXSB0ZC5tYXQtY2VsbDpsYXN0LW9mLXR5cGU6bm90KDpvbmx5LW9mLXR5cGUpLFtkaXI9cnRsXSB0ZC5tYXQtZm9vdGVyLWNlbGw6bGFzdC1vZi10eXBlOm5vdCg6b25seS1vZi10eXBlKXtwYWRkaW5nLXJpZ2h0OjA7cGFkZGluZy1sZWZ0OjI0cHh9Lm1hdC10YWJsZS1zdGlja3l7cG9zaXRpb246LXdlYmtpdC1zdGlja3kgIWltcG9ydGFudDtwb3NpdGlvbjpzdGlja3kgIWltcG9ydGFudH0ubWF0LXRhYmxlLWZpeGVkLWxheW91dHt0YWJsZS1sYXlvdXQ6Zml4ZWR9XG4nXX1dfV0sbnVsbCxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIGYwIGV4dGVuZHMgUCR7fWYwLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIGcwKGV8fGYwKX0sZjAuybVkaXI9Sm8oe3R5cGU6ZjAsc2VsZWN0b3JzOltbIiIsIm1hdENlbGxEZWYiLCIiXV0sZmVhdHVyZXM6W2loKFt7cHJvdmlkZTpQJCx1c2VFeGlzdGluZzpmMH1dKSxnbV19KTtjb25zdCBnMD12cihmMCk7KCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihmMCxbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJbbWF0Q2VsbERlZl0iLHByb3ZpZGVyczpbe3Byb3ZpZGU6UCQsdXNlRXhpc3Rpbmc6ZjB9XX1dfV0sbnVsbCxudWxsKTtjbGFzcyBoMCBleHRlbmRzIHcke31oMC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBiMChlfHxoMCl9LGgwLsm1ZGlyPUpvKHt0eXBlOmgwLHNlbGVjdG9yczpbWyIiLCJtYXRIZWFkZXJDZWxsRGVmIiwiIl1dLGZlYXR1cmVzOltpaChbe3Byb3ZpZGU6dyQsdXNlRXhpc3Rpbmc6aDB9XSksZ21dfSk7Y29uc3QgYjA9dnIoaDApOygidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoaDAsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoiW21hdEhlYWRlckNlbGxEZWZdIixwcm92aWRlcnM6W3twcm92aWRlOnckLHVzZUV4aXN0aW5nOmgwfV19XX1dLG51bGwsbnVsbCk7Y2xhc3MgeTAgZXh0ZW5kcyBrJHt9eTAuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gXzAoZXx8eTApfSx5MC7JtWRpcj1Kbyh7dHlwZTp5MCxzZWxlY3RvcnM6W1siIiwibWF0Rm9vdGVyQ2VsbERlZiIsIiJdXSxmZWF0dXJlczpbaWgoW3twcm92aWRlOmskLHVzZUV4aXN0aW5nOnkwfV0pLGdtXX0pO2NvbnN0IF8wPXZyKHkwKTsoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHkwLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6IlttYXRGb290ZXJDZWxsRGVmXSIscHJvdmlkZXJzOlt7cHJvdmlkZTprJCx1c2VFeGlzdGluZzp5MH1dfV19XSxudWxsLG51bGwpO2NsYXNzIEMwIGV4dGVuZHMgRCR7Z2V0IG5hbWUoKXtyZXR1cm4gdGhpcy5fbmFtZX1zZXQgbmFtZSh0KXt0aGlzLl9zZXROYW1lSW5wdXQodCl9X3VwZGF0ZUNvbHVtbkNzc0NsYXNzTmFtZSgpe3N1cGVyLl91cGRhdGVDb2x1bW5Dc3NDbGFzc05hbWUoKSx0aGlzLl9jb2x1bW5Dc3NDbGFzc05hbWUucHVzaChgbWF0LWNvbHVtbi0ke3RoaXMuY3NzQ2xhc3NGcmllbmRseU5hbWV9YCl9fUMwLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIE0wKGV8fEMwKX0sQzAuybVkaXI9Sm8oe3R5cGU6QzAsc2VsZWN0b3JzOltbIiIsIm1hdENvbHVtbkRlZiIsIiJdXSxpbnB1dHM6e3N0aWNreToic3RpY2t5IixuYW1lOlsibWF0Q29sdW1uRGVmIiwibmFtZSJdfSxmZWF0dXJlczpbaWgoW3twcm92aWRlOkQkLHVzZUV4aXN0aW5nOkMwfSx7cHJvdmlkZToiTUFUX1NPUlRfSEVBREVSX0NPTFVNTl9ERUYiLHVzZUV4aXN0aW5nOkMwfV0pLGdtXX0pLEMwLnByb3BEZWNvcmF0b3JzPXtuYW1lOlt7dHlwZTp5XyxhcmdzOlsibWF0Q29sdW1uRGVmIl19XX07Y29uc3QgTTA9dnIoQzApOygidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoQzAsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoiW21hdENvbHVtbkRlZl0iLGlucHV0czpbInN0aWNreSJdLHByb3ZpZGVyczpbe3Byb3ZpZGU6RCQsdXNlRXhpc3Rpbmc6QzB9LHtwcm92aWRlOiJNQVRfU09SVF9IRUFERVJfQ09MVU1OX0RFRiIsdXNlRXhpc3Rpbmc6QzB9XX1dfV0sbnVsbCx7bmFtZTpbe3R5cGU6eV8sYXJnczpbIm1hdENvbHVtbkRlZiJdfV19KTtjbGFzcyB2MCBleHRlbmRzIEEke312MC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiB4MChlfHx2MCl9LHYwLsm1ZGlyPUpvKHt0eXBlOnYwLHNlbGVjdG9yczpbWyJtYXQtaGVhZGVyLWNlbGwiXSxbInRoIiwibWF0LWhlYWRlci1jZWxsIiwiIl1dLGhvc3RBdHRyczpbInJvbGUiLCJjb2x1bW5oZWFkZXIiLDEsIm1hdC1oZWFkZXItY2VsbCJdLGZlYXR1cmVzOltnbV19KTtjb25zdCB4MD12cih2MCk7KCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYih2MCxbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJtYXQtaGVhZGVyLWNlbGwsIHRoW21hdC1oZWFkZXItY2VsbF0iLGhvc3Q6e2NsYXNzOiJtYXQtaGVhZGVyLWNlbGwiLHJvbGU6ImNvbHVtbmhlYWRlciJ9fV19XSxudWxsLG51bGwpO2NsYXNzIE8wIGV4dGVuZHMgUiR7fU8wLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIFAwKGV8fE8wKX0sTzAuybVkaXI9Sm8oe3R5cGU6TzAsc2VsZWN0b3JzOltbIm1hdC1mb290ZXItY2VsbCJdLFsidGQiLCJtYXQtZm9vdGVyLWNlbGwiLCIiXV0saG9zdEF0dHJzOlsicm9sZSIsImdyaWRjZWxsIiwxLCJtYXQtZm9vdGVyLWNlbGwiXSxmZWF0dXJlczpbZ21dfSk7Y29uc3QgUDA9dnIoTzApOygidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoTzAsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoibWF0LWZvb3Rlci1jZWxsLCB0ZFttYXQtZm9vdGVyLWNlbGxdIixob3N0OntjbGFzczoibWF0LWZvb3Rlci1jZWxsIixyb2xlOiJncmlkY2VsbCJ9fV19XSxudWxsLG51bGwpO2NsYXNzIHcwIGV4dGVuZHMgVCR7fXcwLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIGswKGV8fHcwKX0sdzAuybVkaXI9Sm8oe3R5cGU6dzAsc2VsZWN0b3JzOltbIm1hdC1jZWxsIl0sWyJ0ZCIsIm1hdC1jZWxsIiwiIl1dLGhvc3RBdHRyczpbInJvbGUiLCJncmlkY2VsbCIsMSwibWF0LWNlbGwiXSxmZWF0dXJlczpbZ21dfSk7Y29uc3QgazA9dnIodzApOygidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIodzAsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoibWF0LWNlbGwsIHRkW21hdC1jZWxsXSIsaG9zdDp7Y2xhc3M6Im1hdC1jZWxsIixyb2xlOiJncmlkY2VsbCJ9fV19XSxudWxsLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3MgUzAgZXh0ZW5kcyBCJHt9UzAuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gRDAoZXx8UzApfSxTMC7JtWRpcj1Kbyh7dHlwZTpTMCxzZWxlY3RvcnM6W1siIiwibWF0SGVhZGVyUm93RGVmIiwiIl1dLGlucHV0czp7Y29sdW1uczpbIm1hdEhlYWRlclJvd0RlZiIsImNvbHVtbnMiXSxzdGlja3k6WyJtYXRIZWFkZXJSb3dEZWZTdGlja3kiLCJzdGlja3kiXX0sZmVhdHVyZXM6W2loKFt7cHJvdmlkZTpCJCx1c2VFeGlzdGluZzpTMH1dKSxnbV19KTtjb25zdCBEMD12cihTMCk7KCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihTMCxbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJbbWF0SGVhZGVyUm93RGVmXSIscHJvdmlkZXJzOlt7cHJvdmlkZTpCJCx1c2VFeGlzdGluZzpTMH1dLGlucHV0czpbImNvbHVtbnM6IG1hdEhlYWRlclJvd0RlZiIsInN0aWNreTogbWF0SGVhZGVyUm93RGVmU3RpY2t5Il19XX1dLG51bGwsbnVsbCk7Y2xhc3MgRTAgZXh0ZW5kcyBqJHt9RTAuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gQTAoZXx8RTApfSxFMC7JtWRpcj1Kbyh7dHlwZTpFMCxzZWxlY3RvcnM6W1siIiwibWF0Rm9vdGVyUm93RGVmIiwiIl1dLGlucHV0czp7Y29sdW1uczpbIm1hdEZvb3RlclJvd0RlZiIsImNvbHVtbnMiXSxzdGlja3k6WyJtYXRGb290ZXJSb3dEZWZTdGlja3kiLCJzdGlja3kiXX0sZmVhdHVyZXM6W2loKFt7cHJvdmlkZTpqJCx1c2VFeGlzdGluZzpFMH1dKSxnbV19KTtjb25zdCBBMD12cihFMCk7KCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihFMCxbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJbbWF0Rm9vdGVyUm93RGVmXSIscHJvdmlkZXJzOlt7cHJvdmlkZTpqJCx1c2VFeGlzdGluZzpFMH1dLGlucHV0czpbImNvbHVtbnM6IG1hdEZvb3RlclJvd0RlZiIsInN0aWNreTogbWF0Rm9vdGVyUm93RGVmU3RpY2t5Il19XX1dLG51bGwsbnVsbCk7Y2xhc3MgUjAgZXh0ZW5kcyBVJHt9UjAuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gVDAoZXx8UjApfSxSMC7JtWRpcj1Kbyh7dHlwZTpSMCxzZWxlY3RvcnM6W1siIiwibWF0Um93RGVmIiwiIl1dLGlucHV0czp7Y29sdW1uczpbIm1hdFJvd0RlZkNvbHVtbnMiLCJjb2x1bW5zIl0sd2hlbjpbIm1hdFJvd0RlZldoZW4iLCJ3aGVuIl19LGZlYXR1cmVzOltpaChbe3Byb3ZpZGU6VSQsdXNlRXhpc3Rpbmc6UjB9XSksZ21dfSk7Y29uc3QgVDA9dnIoUjApOygidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoUjAsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoiW21hdFJvd0RlZl0iLHByb3ZpZGVyczpbe3Byb3ZpZGU6VSQsdXNlRXhpc3Rpbmc6UjB9XSxpbnB1dHM6WyJjb2x1bW5zOiBtYXRSb3dEZWZDb2x1bW5zIiwid2hlbjogbWF0Um93RGVmV2hlbiJdfV19XSxudWxsLG51bGwpO2NsYXNzIE4wIGV4dGVuZHMgRyR7fU4wLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIEkwKGV8fE4wKX0sTjAuybVjbXA9VW8oe3R5cGU6TjAsc2VsZWN0b3JzOltbIm1hdC1oZWFkZXItcm93Il0sWyJ0ciIsIm1hdC1oZWFkZXItcm93IiwiIl1dLGhvc3RBdHRyczpbInJvbGUiLCJyb3ciLDEsIm1hdC1oZWFkZXItcm93Il0sZXhwb3J0QXM6WyJtYXRIZWFkZXJSb3ciXSxmZWF0dXJlczpbaWgoW3twcm92aWRlOkckLHVzZUV4aXN0aW5nOk4wfV0pLGdtXSxkZWNsczoxLHZhcnM6MCxjb25zdHM6W1siY2RrQ2VsbE91dGxldCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiZEdSgwLDApfSxkaXJlY3RpdmVzOltXJF0sZW5jYXBzdWxhdGlvbjoyfSk7Y29uc3QgSTA9dnIoTjApOygidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoTjAsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoibWF0LWhlYWRlci1yb3csIHRyW21hdC1oZWFkZXItcm93XSIsdGVtcGxhdGU6SCQsaG9zdDp7Y2xhc3M6Im1hdC1oZWFkZXItcm93Iixyb2xlOiJyb3cifSxjaGFuZ2VEZXRlY3Rpb246eG8uRGVmYXVsdCxlbmNhcHN1bGF0aW9uOlBvLk5vbmUsZXhwb3J0QXM6Im1hdEhlYWRlclJvdyIscHJvdmlkZXJzOlt7cHJvdmlkZTpHJCx1c2VFeGlzdGluZzpOMH1dfV19XSxudWxsLG51bGwpO2NsYXNzIHowIGV4dGVuZHMgWSR7fXowLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIEgwKGV8fHowKX0sejAuybVjbXA9VW8oe3R5cGU6ejAsc2VsZWN0b3JzOltbIm1hdC1mb290ZXItcm93Il0sWyJ0ciIsIm1hdC1mb290ZXItcm93IiwiIl1dLGhvc3RBdHRyczpbInJvbGUiLCJyb3ciLDEsIm1hdC1mb290ZXItcm93Il0sZXhwb3J0QXM6WyJtYXRGb290ZXJSb3ciXSxmZWF0dXJlczpbaWgoW3twcm92aWRlOlkkLHVzZUV4aXN0aW5nOnowfV0pLGdtXSxkZWNsczoxLHZhcnM6MCxjb25zdHM6W1siY2RrQ2VsbE91dGxldCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiZEdSgwLDApfSxkaXJlY3RpdmVzOltXJF0sZW5jYXBzdWxhdGlvbjoyfSk7Y29uc3QgSDA9dnIoejApOygidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoejAsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoibWF0LWZvb3Rlci1yb3csIHRyW21hdC1mb290ZXItcm93XSIsdGVtcGxhdGU6SCQsaG9zdDp7Y2xhc3M6Im1hdC1mb290ZXItcm93Iixyb2xlOiJyb3cifSxjaGFuZ2VEZXRlY3Rpb246eG8uRGVmYXVsdCxlbmNhcHN1bGF0aW9uOlBvLk5vbmUsZXhwb3J0QXM6Im1hdEZvb3RlclJvdyIscHJvdmlkZXJzOlt7cHJvdmlkZTpZJCx1c2VFeGlzdGluZzp6MH1dfV19XSxudWxsLG51bGwpO2NsYXNzIEYwIGV4dGVuZHMgcSR7fUYwLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIEwwKGV8fEYwKX0sRjAuybVjbXA9VW8oe3R5cGU6RjAsc2VsZWN0b3JzOltbIm1hdC1yb3ciXSxbInRyIiwibWF0LXJvdyIsIiJdXSxob3N0QXR0cnM6WyJyb2xlIiwicm93IiwxLCJtYXQtcm93Il0sZXhwb3J0QXM6WyJtYXRSb3ciXSxmZWF0dXJlczpbaWgoW3twcm92aWRlOnEkLHVzZUV4aXN0aW5nOkYwfV0pLGdtXSxkZWNsczoxLHZhcnM6MCxjb25zdHM6W1siY2RrQ2VsbE91dGxldCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiZEdSgwLDApfSxkaXJlY3RpdmVzOltXJF0sZW5jYXBzdWxhdGlvbjoyfSk7Y29uc3QgTDA9dnIoRjApOygidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoRjAsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoibWF0LXJvdywgdHJbbWF0LXJvd10iLHRlbXBsYXRlOkgkLGhvc3Q6e2NsYXNzOiJtYXQtcm93Iixyb2xlOiJyb3cifSxjaGFuZ2VEZXRlY3Rpb246eG8uRGVmYXVsdCxlbmNhcHN1bGF0aW9uOlBvLk5vbmUsZXhwb3J0QXM6Im1hdFJvdyIscHJvdmlkZXJzOlt7cHJvdmlkZTpxJCx1c2VFeGlzdGluZzpGMH1dfV19XSxudWxsLG51bGwpO2NsYXNzIEIwIGV4dGVuZHMgWiR7fUIwLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIFYwKGV8fEIwKX0sQjAuybVkaXI9Sm8oe3R5cGU6QjAsc2VsZWN0b3JzOltbIm5nLXRlbXBsYXRlIiwibWF0Tm9EYXRhUm93IiwiIl1dLGZlYXR1cmVzOltpaChbe3Byb3ZpZGU6WiQsdXNlRXhpc3Rpbmc6QjB9XSksZ21dfSk7Y29uc3QgVjA9dnIoQjApOygidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoQjAsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoibmctdGVtcGxhdGVbbWF0Tm9EYXRhUm93XSIscHJvdmlkZXJzOlt7cHJvdmlkZTpaJCx1c2VFeGlzdGluZzpCMH1dfV19XSxudWxsLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3MgajAgZXh0ZW5kcyByMHt9ajAuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gVTAoZXx8ajApfSxqMC7JtWNtcD1Vbyh7dHlwZTpqMCxzZWxlY3RvcnM6W1sibWF0LXRleHQtY29sdW1uIl1dLGZlYXR1cmVzOltnbV0sZGVjbHM6Myx2YXJzOjAsY29uc3RzOltbIm1hdENvbHVtbkRlZiIsIiJdLFsibWF0LWhlYWRlci1jZWxsIiwiIiwzLCJ0ZXh0LWFsaWduIiw0LCJtYXRIZWFkZXJDZWxsRGVmIl0sWyJtYXQtY2VsbCIsIiIsMywidGV4dC1hbGlnbiIsNCwibWF0Q2VsbERlZiJdLFsibWF0LWhlYWRlci1jZWxsIiwiIl0sWyJtYXQtY2VsbCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoa3UoMCwwKSxXbSgxLGQwLDIsMywidGgiLDEpLFdtKDIscDAsMiwzLCJ0ZCIsMiksU3UoKSl9LGRpcmVjdGl2ZXM6W0MwLGgwLGYwLHYwLHcwXSxlbmNhcHN1bGF0aW9uOjJ9KTtjb25zdCBVMD12cihqMCk7KCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihqMCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJtYXQtdGV4dC1jb2x1bW4iLHRlbXBsYXRlOidcbiAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj5cbiAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgW3N0eWxlLnRleHQtYWxpZ25dPSJqdXN0aWZ5Ij5cbiAgICAgICAge3toZWFkZXJUZXh0fX1cbiAgICAgIDwvdGg+XG4gICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBkYXRhIiBbc3R5bGUudGV4dC1hbGlnbl09Imp1c3RpZnkiPlxuICAgICAgICB7e2RhdGFBY2Nlc3NvcihkYXRhLCBuYW1lKX19XG4gICAgICA8L3RkPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAnLGVuY2Fwc3VsYXRpb246UG8uTm9uZSxjaGFuZ2VEZXRlY3Rpb246eG8uRGVmYXVsdH1dfV0sbnVsbCxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IFcwPVttMCxoMCxTMCxDMCxmMCxSMCx5MCxFMCx2MCx3MCxPMCxOMCxGMCx6MCxCMCxqMF07Y2xhc3MgRzB7fUcwLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxHMCl9LEcwLsm1bW9kPVpvKHt0eXBlOkcwfSksRzAuybVpbmo9Y28oe2ltcG9ydHM6W1tsMCxUel0sVHpdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhHMCx7ZGVjbGFyYXRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuW20wLGgwLFMwLEMwLGYwLFIwLHkwLEUwLHYwLHcwLE8wLE4wLEYwLHowLEIwLGowXX0saW1wb3J0czpmdW5jdGlvbigpe3JldHVybltsMCxUel19LGV4cG9ydHM6ZnVuY3Rpb24oKXtyZXR1cm5bVHosbTAsaDAsUzAsQzAsZjAsUjAseTAsRTAsdjAsdzAsTzAsTjAsRjAsejAsQjAsajBdfX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoRzAsW3t0eXBlOmtfLGFyZ3M6W3tpbXBvcnRzOltsMCxUel0sZXhwb3J0czpbVHosVzBdLGRlY2xhcmF0aW9uczpXMH1dfV0sbnVsbCxudWxsKTtjbGFzcyBZMCBleHRlbmRzIEhIe2NvbnN0cnVjdG9yKHQ9W10pe3N1cGVyKCksdGhpcy5fcmVuZGVyRGF0YT1uZXcgSChbXSksdGhpcy5fZmlsdGVyPW5ldyBIKCIiKSx0aGlzLl9pbnRlcm5hbFBhZ2VDaGFuZ2VzPW5ldyB4LHRoaXMuX3JlbmRlckNoYW5nZXNTdWJzY3JpcHRpb249bnVsbCx0aGlzLnNvcnRpbmdEYXRhQWNjZXNzb3I9KHQsZSk9Pntjb25zdCBuPXRbZV07aWYobEkobikpe2NvbnN0IHQ9TnVtYmVyKG4pO3JldHVybiB0PDkwMDcxOTkyNTQ3NDA5OTE/dDpufXJldHVybiBufSx0aGlzLnNvcnREYXRhPSh0LGUpPT57Y29uc3Qgbj1lLmFjdGl2ZSxvPWUuZGlyZWN0aW9uO3JldHVybiBuJiYiIiE9bz90LnNvcnQoKCh0LGUpPT57bGV0IGk9dGhpcy5zb3J0aW5nRGF0YUFjY2Vzc29yKHQsbiksYT10aGlzLnNvcnRpbmdEYXRhQWNjZXNzb3IoZSxuKTtjb25zdCByPXR5cGVvZiBpLHM9dHlwZW9mIGE7ciE9PXMmJigibnVtYmVyIj09PXImJihpKz0iIiksIm51bWJlciI9PT1zJiYoYSs9IiIpKTtsZXQgbD0wO3JldHVybiBudWxsIT1pJiZudWxsIT1hP2k+YT9sPTE6aTxhJiYobD0tMSk6bnVsbCE9aT9sPTE6bnVsbCE9YSYmKGw9LTEpLGwqKCJhc2MiPT1vPzE6LTEpfSkpOnR9LHRoaXMuZmlsdGVyUHJlZGljYXRlPSh0LGUpPT57Y29uc3Qgbj1PYmplY3Qua2V5cyh0KS5yZWR1Y2UoKChlLG4pPT5lK3Rbbl0rIuKXrCIpLCIiKS50b0xvd2VyQ2FzZSgpLG89ZS50cmltKCkudG9Mb3dlckNhc2UoKTtyZXR1cm4tMSE9bi5pbmRleE9mKG8pfSx0aGlzLl9kYXRhPW5ldyBIKHQpLHRoaXMuX3VwZGF0ZUNoYW5nZVN1YnNjcmlwdGlvbigpfWdldCBkYXRhKCl7cmV0dXJuIHRoaXMuX2RhdGEudmFsdWV9c2V0IGRhdGEodCl7dGhpcy5fZGF0YS5uZXh0KHQpLHRoaXMuX3JlbmRlckNoYW5nZXNTdWJzY3JpcHRpb258fHRoaXMuX2ZpbHRlckRhdGEodCl9Z2V0IGZpbHRlcigpe3JldHVybiB0aGlzLl9maWx0ZXIudmFsdWV9c2V0IGZpbHRlcih0KXt0aGlzLl9maWx0ZXIubmV4dCh0KSx0aGlzLl9yZW5kZXJDaGFuZ2VzU3Vic2NyaXB0aW9ufHx0aGlzLl9maWx0ZXJEYXRhKHRoaXMuZGF0YSl9Z2V0IHNvcnQoKXtyZXR1cm4gdGhpcy5fc29ydH1zZXQgc29ydCh0KXt0aGlzLl9zb3J0PXQsdGhpcy5fdXBkYXRlQ2hhbmdlU3Vic2NyaXB0aW9uKCl9Z2V0IHBhZ2luYXRvcigpe3JldHVybiB0aGlzLl9wYWdpbmF0b3J9c2V0IHBhZ2luYXRvcih0KXt0aGlzLl9wYWdpbmF0b3I9dCx0aGlzLl91cGRhdGVDaGFuZ2VTdWJzY3JpcHRpb24oKX1fdXBkYXRlQ2hhbmdlU3Vic2NyaXB0aW9uKCl7dmFyIHQ7Y29uc3QgZT10aGlzLl9zb3J0P1d0KHRoaXMuX3NvcnQuc29ydENoYW5nZSx0aGlzLl9zb3J0LmluaXRpYWxpemVkKTpaKG51bGwpLG49dGhpcy5fcGFnaW5hdG9yP1d0KHRoaXMuX3BhZ2luYXRvci5wYWdlLHRoaXMuX2ludGVybmFsUGFnZUNoYW5nZXMsdGhpcy5fcGFnaW5hdG9yLmluaXRpYWxpemVkKTpaKG51bGwpLG89RHQoW3RoaXMuX2RhdGEsdGhpcy5fZmlsdGVyXSkucGlwZShodCgoKFt0XSk9PnRoaXMuX2ZpbHRlckRhdGEodCkpKSksaT1EdChbbyxlXSkucGlwZShodCgoKFt0XSk9PnRoaXMuX29yZGVyRGF0YSh0KSkpKSxhPUR0KFtpLG5dKS5waXBlKGh0KCgoW3RdKT0+dGhpcy5fcGFnZURhdGEodCkpKSk7bnVsbD09PSh0PXRoaXMuX3JlbmRlckNoYW5nZXNTdWJzY3JpcHRpb24pfHx2b2lkIDA9PT10fHx0LnVuc3Vic2NyaWJlKCksdGhpcy5fcmVuZGVyQ2hhbmdlc1N1YnNjcmlwdGlvbj1hLnN1YnNjcmliZSgodD0+dGhpcy5fcmVuZGVyRGF0YS5uZXh0KHQpKSl9X2ZpbHRlckRhdGEodCl7cmV0dXJuIHRoaXMuZmlsdGVyZWREYXRhPW51bGw9PXRoaXMuZmlsdGVyfHwiIj09PXRoaXMuZmlsdGVyP3Q6dC5maWx0ZXIoKHQ9PnRoaXMuZmlsdGVyUHJlZGljYXRlKHQsdGhpcy5maWx0ZXIpKSksdGhpcy5wYWdpbmF0b3ImJnRoaXMuX3VwZGF0ZVBhZ2luYXRvcih0aGlzLmZpbHRlcmVkRGF0YS5sZW5ndGgpLHRoaXMuZmlsdGVyZWREYXRhfV9vcmRlckRhdGEodCl7cmV0dXJuIHRoaXMuc29ydD90aGlzLnNvcnREYXRhKHQuc2xpY2UoKSx0aGlzLnNvcnQpOnR9X3BhZ2VEYXRhKHQpe2lmKCF0aGlzLnBhZ2luYXRvcilyZXR1cm4gdDtjb25zdCBlPXRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCp0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZTtyZXR1cm4gdC5zbGljZShlLGUrdGhpcy5wYWdpbmF0b3IucGFnZVNpemUpfV91cGRhdGVQYWdpbmF0b3IodCl7UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKCk9Pntjb25zdCBlPXRoaXMucGFnaW5hdG9yO2lmKGUmJihlLmxlbmd0aD10LGUucGFnZUluZGV4PjApKXtjb25zdCB0PU1hdGguY2VpbChlLmxlbmd0aC9lLnBhZ2VTaXplKS0xfHwwLG49TWF0aC5taW4oZS5wYWdlSW5kZXgsdCk7biE9PWUucGFnZUluZGV4JiYoZS5wYWdlSW5kZXg9bix0aGlzLl9pbnRlcm5hbFBhZ2VDaGFuZ2VzLm5leHQoKSl9fSkpfWNvbm5lY3QoKXtyZXR1cm4gdGhpcy5fcmVuZGVyQ2hhbmdlc1N1YnNjcmlwdGlvbnx8dGhpcy5fdXBkYXRlQ2hhbmdlU3Vic2NyaXB0aW9uKCksdGhpcy5fcmVuZGVyRGF0YX1kaXNjb25uZWN0KCl7dmFyIHQ7bnVsbD09PSh0PXRoaXMuX3JlbmRlckNoYW5nZXNTdWJzY3JpcHRpb24pfHx2b2lkIDA9PT10fHx0LnVuc3Vic2NyaWJlKCksdGhpcy5fcmVuZGVyQ2hhbmdlc1N1YnNjcmlwdGlvbj1udWxsfX1jbGFzcyBxMCBleHRlbmRzIFkwe31jb25zdCBaMD1bInBhbmVsIl07ZnVuY3Rpb24gWDAodCxlKXtpZigxJnQmJihPdSgwLCJkaXYiLDAsMSksanUoMiksUHUoKSksMiZ0KXtjb25zdCB0PWUuaWQsbj1MdSgpO3Z1KCJpZCIsbi5pZCkoIm5nQ2xhc3MiLG4uX2NsYXNzTGlzdCksTm0oImFyaWEtbGFiZWwiLG4uYXJpYUxhYmVsfHxudWxsKSgiYXJpYS1sYWJlbGxlZGJ5IixuLl9nZXRQYW5lbEFyaWFMYWJlbGxlZGJ5KHQpKX19bGV0IEswPTA7Y2xhc3MgSjB7Y29uc3RydWN0b3IodCxlKXt0aGlzLnNvdXJjZT10LHRoaXMub3B0aW9uPWV9fWNvbnN0IFEwPXp6KGNsYXNze30pLCQwPW5ldyBOcigibWF0LWF1dG9jb21wbGV0ZS1kZWZhdWx0LW9wdGlvbnMiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uIHQxKCl7cmV0dXJue2F1dG9BY3RpdmVGaXJzdE9wdGlvbjohMX19fSk7Y2xhc3MgZTEgZXh0ZW5kcyBRMHtjb25zdHJ1Y3Rvcih0LGUsbixvKXtzdXBlcigpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPXQsdGhpcy5fZWxlbWVudFJlZj1lLHRoaXMuX2FjdGl2ZU9wdGlvbkNoYW5nZXM9bC5FTVBUWSx0aGlzLnNob3dQYW5lbD0hMSx0aGlzLl9pc09wZW49ITEsdGhpcy5kaXNwbGF5V2l0aD1udWxsLHRoaXMub3B0aW9uU2VsZWN0ZWQ9bmV3IEFiLHRoaXMub3BlbmVkPW5ldyBBYix0aGlzLmNsb3NlZD1uZXcgQWIsdGhpcy5vcHRpb25BY3RpdmF0ZWQ9bmV3IEFiLHRoaXMuX2NsYXNzTGlzdD17fSx0aGlzLmlkPSJtYXQtYXV0b2NvbXBsZXRlLSIrSzArKyx0aGlzLmluZXJ0R3JvdXBzPShudWxsPT1vP3ZvaWQgMDpvLlNBRkFSSSl8fCExLHRoaXMuX2F1dG9BY3RpdmVGaXJzdE9wdGlvbj0hIW4uYXV0b0FjdGl2ZUZpcnN0T3B0aW9ufWdldCBpc09wZW4oKXtyZXR1cm4gdGhpcy5faXNPcGVuJiZ0aGlzLnNob3dQYW5lbH1nZXQgYXV0b0FjdGl2ZUZpcnN0T3B0aW9uKCl7cmV0dXJuIHRoaXMuX2F1dG9BY3RpdmVGaXJzdE9wdGlvbn1zZXQgYXV0b0FjdGl2ZUZpcnN0T3B0aW9uKHQpe3RoaXMuX2F1dG9BY3RpdmVGaXJzdE9wdGlvbj1ySSh0KX1zZXQgY2xhc3NMaXN0KHQpe3RoaXMuX2NsYXNzTGlzdD10JiZ0Lmxlbmd0aD8oZnVuY3Rpb24gZSh0LG49L1xzKy8pe2NvbnN0IG89W107aWYobnVsbCE9dCl7Y29uc3QgZT1BcnJheS5pc0FycmF5KHQpP3Q6YCR7dH1gLnNwbGl0KG4pO2Zvcihjb25zdCB0IG9mIGUpe2NvbnN0IGU9YCR7dH1gLnRyaW0oKTtlJiZvLnB1c2goZSl9fXJldHVybiBvfSkodCkucmVkdWNlKCgodCxlKT0+KHRbZV09ITAsdCkpLHt9KTp7fSx0aGlzLl9zZXRWaXNpYmlsaXR5Q2xhc3Nlcyh0aGlzLl9jbGFzc0xpc3QpLHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc05hbWU9IiJ9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5fa2V5TWFuYWdlcj1uZXcgQkkodGhpcy5vcHRpb25zKS53aXRoV3JhcCgpLHRoaXMuX2FjdGl2ZU9wdGlvbkNoYW5nZXM9dGhpcy5fa2V5TWFuYWdlci5jaGFuZ2Uuc3Vic2NyaWJlKCh0PT57dGhpcy5vcHRpb25BY3RpdmF0ZWQuZW1pdCh7c291cmNlOnRoaXMsb3B0aW9uOnRoaXMub3B0aW9ucy50b0FycmF5KClbdF18fG51bGx9KX0pKSx0aGlzLl9zZXRWaXNpYmlsaXR5KCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9hY3RpdmVPcHRpb25DaGFuZ2VzLnVuc3Vic2NyaWJlKCl9X3NldFNjcm9sbFRvcCh0KXt0aGlzLnBhbmVsJiYodGhpcy5wYW5lbC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcD10KX1fZ2V0U2Nyb2xsVG9wKCl7cmV0dXJuIHRoaXMucGFuZWw/dGhpcy5wYW5lbC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcDowfV9zZXRWaXNpYmlsaXR5KCl7dGhpcy5zaG93UGFuZWw9ISF0aGlzLm9wdGlvbnMubGVuZ3RoLHRoaXMuX3NldFZpc2liaWxpdHlDbGFzc2VzKHRoaXMuX2NsYXNzTGlzdCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9X2VtaXRTZWxlY3RFdmVudCh0KXtjb25zdCBlPW5ldyBKMCh0aGlzLHQpO3RoaXMub3B0aW9uU2VsZWN0ZWQuZW1pdChlKX1fZ2V0UGFuZWxBcmlhTGFiZWxsZWRieSh0KXtyZXR1cm4gdGhpcy5hcmlhTGFiZWw/bnVsbDp0aGlzLmFyaWFMYWJlbGxlZGJ5Pyh0P3QrIiAiOiIiKSt0aGlzLmFyaWFMYWJlbGxlZGJ5OnR9X3NldFZpc2liaWxpdHlDbGFzc2VzKHQpe3RbdGhpcy5fdmlzaWJsZUNsYXNzXT10aGlzLnNob3dQYW5lbCx0W3RoaXMuX2hpZGRlbkNsYXNzXT0hdGhpcy5zaG93UGFuZWx9fWUxLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxlMSkoTXUoSGgpLE11KGNoKSxNdSgkMCksTXUoZkkpKX0sZTEuybVkaXI9Sm8oe3R5cGU6ZTEsdmlld1F1ZXJ5OmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJihXYihVaCwzKSxXYihaMCwxKSksMiZlKXtsZXQgdDtVYih0PVliKCkpJiYobi50ZW1wbGF0ZT10LmZpcnN0KSxVYih0PVliKCkpJiYobi5wYW5lbD10LmZpcnN0KX19LGlucHV0czp7ZGlzcGxheVdpdGg6ImRpc3BsYXlXaXRoIixhdXRvQWN0aXZlRmlyc3RPcHRpb246ImF1dG9BY3RpdmVGaXJzdE9wdGlvbiIsY2xhc3NMaXN0OlsiY2xhc3MiLCJjbGFzc0xpc3QiXSxhcmlhTGFiZWw6WyJhcmlhLWxhYmVsIiwiYXJpYUxhYmVsIl0sYXJpYUxhYmVsbGVkYnk6WyJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhTGFiZWxsZWRieSJdLHBhbmVsV2lkdGg6InBhbmVsV2lkdGgifSxvdXRwdXRzOntvcHRpb25TZWxlY3RlZDoib3B0aW9uU2VsZWN0ZWQiLG9wZW5lZDoib3BlbmVkIixjbG9zZWQ6ImNsb3NlZCIsb3B0aW9uQWN0aXZhdGVkOiJvcHRpb25BY3RpdmF0ZWQifSxmZWF0dXJlczpbZ21dfSksZTEuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpIaH0se3R5cGU6Y2h9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOlskMF19XX0se3R5cGU6Zkl9XSxlMS5wcm9wRGVjb3JhdG9ycz17dGVtcGxhdGU6W3t0eXBlOkZyLGFyZ3M6W1VoLHtzdGF0aWM6ITB9XX1dLHBhbmVsOlt7dHlwZTpGcixhcmdzOlsicGFuZWwiXX1dLGFyaWFMYWJlbDpbe3R5cGU6eV8sYXJnczpbImFyaWEtbGFiZWwiXX1dLGFyaWFMYWJlbGxlZGJ5Olt7dHlwZTp5XyxhcmdzOlsiYXJpYS1sYWJlbGxlZGJ5Il19XSxkaXNwbGF5V2l0aDpbe3R5cGU6eV99XSxhdXRvQWN0aXZlRmlyc3RPcHRpb246W3t0eXBlOnlffV0scGFuZWxXaWR0aDpbe3R5cGU6eV99XSxvcHRpb25TZWxlY3RlZDpbe3R5cGU6X199XSxvcGVuZWQ6W3t0eXBlOl9ffV0sY2xvc2VkOlt7dHlwZTpfX31dLG9wdGlvbkFjdGl2YXRlZDpbe3R5cGU6X199XSxjbGFzc0xpc3Q6W3t0eXBlOnlfLGFyZ3M6WyJjbGFzcyJdfV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoZTEsW3t0eXBlOmdffV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkhofSx7dHlwZTpjaH0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6WyQwXX1dfSx7dHlwZTpmSX1dfSkse2Rpc3BsYXlXaXRoOlt7dHlwZTp5X31dLG9wdGlvblNlbGVjdGVkOlt7dHlwZTpfX31dLG9wZW5lZDpbe3R5cGU6X199XSxjbG9zZWQ6W3t0eXBlOl9ffV0sb3B0aW9uQWN0aXZhdGVkOlt7dHlwZTpfX31dLGF1dG9BY3RpdmVGaXJzdE9wdGlvbjpbe3R5cGU6eV99XSxjbGFzc0xpc3Q6W3t0eXBlOnlfLGFyZ3M6WyJjbGFzcyJdfV0sdGVtcGxhdGU6W3t0eXBlOkZyLGFyZ3M6W1VoLHtzdGF0aWM6ITB9XX1dLHBhbmVsOlt7dHlwZTpGcixhcmdzOlsicGFuZWwiXX1dLGFyaWFMYWJlbDpbe3R5cGU6eV8sYXJnczpbImFyaWEtbGFiZWwiXX1dLGFyaWFMYWJlbGxlZGJ5Olt7dHlwZTp5XyxhcmdzOlsiYXJpYS1sYWJlbGxlZGJ5Il19XSxwYW5lbFdpZHRoOlt7dHlwZTp5X31dfSk7Y2xhc3MgbjEgZXh0ZW5kcyBlMXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fdmlzaWJsZUNsYXNzPSJtYXQtYXV0b2NvbXBsZXRlLXZpc2libGUiLHRoaXMuX2hpZGRlbkNsYXNzPSJtYXQtYXV0b2NvbXBsZXRlLWhpZGRlbiJ9fW4xLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG8xKGV8fG4xKX0sbjEuybVjbXA9VW8oe3R5cGU6bjEsc2VsZWN0b3JzOltbIm1hdC1hdXRvY29tcGxldGUiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24gdChlLG4sbyl7aWYoMSZlJiYoR2IobyxfSCwxKSxHYihvLFBILDEpKSwyJmUpe2xldCB0O1ViKHQ9WWIoKSkmJihuLm9wdGlvbkdyb3Vwcz10KSxVYih0PVliKCkpJiYobi5vcHRpb25zPXQpfX0saG9zdEF0dHJzOlsxLCJtYXQtYXV0b2NvbXBsZXRlIl0saW5wdXRzOntkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIn0sZXhwb3J0QXM6WyJtYXRBdXRvY29tcGxldGUiXSxmZWF0dXJlczpbaWgoW3twcm92aWRlOmdILHVzZUV4aXN0aW5nOm4xfV0pLGdtXSxuZ0NvbnRlbnRTZWxlY3RvcnM6WyIqIl0sZGVjbHM6MSx2YXJzOjAsY29uc3RzOltbInJvbGUiLCJsaXN0Ym94IiwxLCJtYXQtYXV0b2NvbXBsZXRlLXBhbmVsIiwzLCJpZCIsIm5nQ2xhc3MiXSxbInBhbmVsIiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihWdSgpLFdtKDAsWDAsMyw0LCJuZy10ZW1wbGF0ZSIpKX0sZGlyZWN0aXZlczpbdHZdLHN0eWxlczpbIi5tYXQtYXV0b2NvbXBsZXRlLXBhbmVse21pbi13aWR0aDoxMTJweDttYXgtd2lkdGg6MjgwcHg7b3ZlcmZsb3c6YXV0bzstd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzp0b3VjaDt2aXNpYmlsaXR5OmhpZGRlbjttYXgtd2lkdGg6bm9uZTttYXgtaGVpZ2h0OjI1NnB4O3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjEwMCU7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czo0cHg7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6NHB4fS5tYXQtYXV0b2NvbXBsZXRlLXBhbmVsLm1hdC1hdXRvY29tcGxldGUtdmlzaWJsZXt2aXNpYmlsaXR5OnZpc2libGV9Lm1hdC1hdXRvY29tcGxldGUtcGFuZWwubWF0LWF1dG9jb21wbGV0ZS1oaWRkZW57dmlzaWJpbGl0eTpoaWRkZW59Lm1hdC1hdXRvY29tcGxldGUtcGFuZWwtYWJvdmUgLm1hdC1hdXRvY29tcGxldGUtcGFuZWx7Ym9yZGVyLXJhZGl1czowO2JvcmRlci10b3AtbGVmdC1yYWRpdXM6NHB4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjRweH0ubWF0LWF1dG9jb21wbGV0ZS1wYW5lbCAubWF0LWRpdmlkZXItaG9yaXpvbnRhbHttYXJnaW4tdG9wOi0xcHh9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWF1dG9jb21wbGV0ZS1wYW5lbHtvdXRsaW5lOnNvbGlkIDFweH1tYXQtYXV0b2NvbXBsZXRle2Rpc3BsYXk6bm9uZX1cbiJdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG4xLnByb3BEZWNvcmF0b3JzPXtvcHRpb25Hcm91cHM6W3t0eXBlOnpyLGFyZ3M6W19ILHtkZXNjZW5kYW50czohMH1dfV0sb3B0aW9uczpbe3R5cGU6enIsYXJnczpbUEgse2Rlc2NlbmRhbnRzOiEwfV19XX07Y29uc3QgbzE9dnIobjEpOygidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIobjEsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoibWF0LWF1dG9jb21wbGV0ZSIsdGVtcGxhdGU6JzxuZy10ZW1wbGF0ZSBsZXQtZm9ybUZpZWxkSWQ9ImlkIj5cbiAgPGRpdiBjbGFzcz0ibWF0LWF1dG9jb21wbGV0ZS1wYW5lbCJcbiAgICAgICByb2xlPSJsaXN0Ym94IlxuICAgICAgIFtpZF09ImlkIlxuICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPSJhcmlhTGFiZWwgfHwgbnVsbCJcbiAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPSJfZ2V0UGFuZWxBcmlhTGFiZWxsZWRieShmb3JtRmllbGRJZCkiXG4gICAgICAgW25nQ2xhc3NdPSJfY2xhc3NMaXN0IlxuICAgICAgICNwYW5lbD5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbicsZW5jYXBzdWxhdGlvbjpQby5Ob25lLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2gsZXhwb3J0QXM6Im1hdEF1dG9jb21wbGV0ZSIsaW5wdXRzOlsiZGlzYWJsZVJpcHBsZSJdLGhvc3Q6e2NsYXNzOiJtYXQtYXV0b2NvbXBsZXRlIn0scHJvdmlkZXJzOlt7cHJvdmlkZTpnSCx1c2VFeGlzdGluZzpuMX1dLHN0eWxlczpbIi5tYXQtYXV0b2NvbXBsZXRlLXBhbmVse21pbi13aWR0aDoxMTJweDttYXgtd2lkdGg6MjgwcHg7b3ZlcmZsb3c6YXV0bzstd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzp0b3VjaDt2aXNpYmlsaXR5OmhpZGRlbjttYXgtd2lkdGg6bm9uZTttYXgtaGVpZ2h0OjI1NnB4O3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjEwMCU7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czo0cHg7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6NHB4fS5tYXQtYXV0b2NvbXBsZXRlLXBhbmVsLm1hdC1hdXRvY29tcGxldGUtdmlzaWJsZXt2aXNpYmlsaXR5OnZpc2libGV9Lm1hdC1hdXRvY29tcGxldGUtcGFuZWwubWF0LWF1dG9jb21wbGV0ZS1oaWRkZW57dmlzaWJpbGl0eTpoaWRkZW59Lm1hdC1hdXRvY29tcGxldGUtcGFuZWwtYWJvdmUgLm1hdC1hdXRvY29tcGxldGUtcGFuZWx7Ym9yZGVyLXJhZGl1czowO2JvcmRlci10b3AtbGVmdC1yYWRpdXM6NHB4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjRweH0ubWF0LWF1dG9jb21wbGV0ZS1wYW5lbCAubWF0LWRpdmlkZXItaG9yaXpvbnRhbHttYXJnaW4tdG9wOi0xcHh9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWF1dG9jb21wbGV0ZS1wYW5lbHtvdXRsaW5lOnNvbGlkIDFweH1tYXQtYXV0b2NvbXBsZXRle2Rpc3BsYXk6bm9uZX1cbiJdfV19XSxudWxsLHtvcHRpb25Hcm91cHM6W3t0eXBlOnpyLGFyZ3M6W19ILHtkZXNjZW5kYW50czohMH1dfV0sb3B0aW9uczpbe3R5cGU6enIsYXJnczpbUEgse2Rlc2NlbmRhbnRzOiEwfV19XX0pOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3MgaTF7Y29uc3RydWN0b3IodCl7dGhpcy5lbGVtZW50UmVmPXR9fWkxLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxpMSkoTXUoY2gpKX0saTEuybVkaXI9Sm8oe3R5cGU6aTF9KSxpMS5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmNofV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihpMSxbe3R5cGU6Z199XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Y2h9XX0pLG51bGwpO2NsYXNzIGExIGV4dGVuZHMgaTF7fWExLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIHIxKGV8fGExKX0sYTEuybVkaXI9Sm8oe3R5cGU6YTEsc2VsZWN0b3JzOltbIiIsIm1hdEF1dG9jb21wbGV0ZU9yaWdpbiIsIiJdXSxleHBvcnRBczpbIm1hdEF1dG9jb21wbGV0ZU9yaWdpbiJdLGZlYXR1cmVzOltnbV19KTtjb25zdCByMT12cihhMSk7KCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihhMSxbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJbbWF0QXV0b2NvbXBsZXRlT3JpZ2luXSIsZXhwb3J0QXM6Im1hdEF1dG9jb21wbGV0ZU9yaWdpbiJ9XX1dLG51bGwsbnVsbCk7Y29uc3QgczE9bmV3IE5yKCJtYXQtYXV0b2NvbXBsZXRlLXNjcm9sbC1zdHJhdGVneSIpLGwxPXtwcm92aWRlOnMxLGRlcHM6W0pGXSx1c2VGYWN0b3J5OmZ1bmN0aW9uIGMxKHQpe3JldHVybigpPT50LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpfX0sZDE9e3Byb3ZpZGU6dlYsdXNlRXhpc3Rpbmc6SW4oKCgpPT5tMSkpLG11bHRpOiEwfTtjbGFzcyBwMXtjb25zdHJ1Y3Rvcih0LGUsbixvLGksYSxyLHMsYyxkLHApe3RoaXMuX2VsZW1lbnQ9dCx0aGlzLl9vdmVybGF5PWUsdGhpcy5fdmlld0NvbnRhaW5lclJlZj1uLHRoaXMuX3pvbmU9byx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1pLHRoaXMuX2Rpcj1yLHRoaXMuX2Zvcm1GaWVsZD1zLHRoaXMuX2RvY3VtZW50PWMsdGhpcy5fdmlld3BvcnRSdWxlcj1kLHRoaXMuX2RlZmF1bHRzPXAsdGhpcy5fY29tcG9uZW50RGVzdHJveWVkPSExLHRoaXMuX2F1dG9jb21wbGV0ZURpc2FibGVkPSExLHRoaXMuX21hbnVhbGx5RmxvYXRpbmdMYWJlbD0hMSx0aGlzLl92aWV3cG9ydFN1YnNjcmlwdGlvbj1sLkVNUFRZLHRoaXMuX2Nhbk9wZW5Pbk5leHRGb2N1cz0hMCx0aGlzLl9jbG9zZUtleUV2ZW50U3RyZWFtPW5ldyB4LHRoaXMuX3dpbmRvd0JsdXJIYW5kbGVyPSgpPT57dGhpcy5fY2FuT3Blbk9uTmV4dEZvY3VzPXRoaXMuX2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQhPT10aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnR8fHRoaXMucGFuZWxPcGVufSx0aGlzLl9vbkNoYW5nZT0oKT0+e30sdGhpcy5fb25Ub3VjaGVkPSgpPT57fSx0aGlzLnBvc2l0aW9uPSJhdXRvIix0aGlzLmF1dG9jb21wbGV0ZUF0dHJpYnV0ZT0ib2ZmIix0aGlzLl9vdmVybGF5QXR0YWNoZWQ9ITEsdGhpcy5vcHRpb25TZWxlY3Rpb25zPUZ0KCgoKT0+dGhpcy5hdXRvY29tcGxldGUmJnRoaXMuYXV0b2NvbXBsZXRlLm9wdGlvbnM/V3QoLi4udGhpcy5hdXRvY29tcGxldGUub3B0aW9ucy5tYXAoKHQ9PnQub25TZWxlY3Rpb25DaGFuZ2UpKSk6dGhpcy5fem9uZS5vblN0YWJsZS5waXBlKE5lKDEpLGRuKCgoKT0+dGhpcy5vcHRpb25TZWxlY3Rpb25zKSkpKSksdGhpcy5fc2Nyb2xsU3RyYXRlZ3k9YX1nZXQgYXV0b2NvbXBsZXRlRGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fYXV0b2NvbXBsZXRlRGlzYWJsZWR9c2V0IGF1dG9jb21wbGV0ZURpc2FibGVkKHQpe3RoaXMuX2F1dG9jb21wbGV0ZURpc2FibGVkPXJJKHQpfW5nQWZ0ZXJWaWV3SW5pdCgpe2NvbnN0IHQ9dGhpcy5fZ2V0V2luZG93KCk7dm9pZCAwIT09dCYmdGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKCk9PnQuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsdGhpcy5fd2luZG93Qmx1ckhhbmRsZXIpKSl9bmdPbkNoYW5nZXModCl7dC5wb3NpdGlvbiYmdGhpcy5fcG9zaXRpb25TdHJhdGVneSYmKHRoaXMuX3NldFN0cmF0ZWd5UG9zaXRpb25zKHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kpLHRoaXMucGFuZWxPcGVuJiZ0aGlzLl9vdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKCkpfW5nT25EZXN0cm95KCl7Y29uc3QgdD10aGlzLl9nZXRXaW5kb3coKTt2b2lkIDAhPT10JiZ0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLHRoaXMuX3dpbmRvd0JsdXJIYW5kbGVyKSx0aGlzLl92aWV3cG9ydFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2NvbXBvbmVudERlc3Ryb3llZD0hMCx0aGlzLl9kZXN0cm95UGFuZWwoKSx0aGlzLl9jbG9zZUtleUV2ZW50U3RyZWFtLmNvbXBsZXRlKCl9Z2V0IHBhbmVsT3Blbigpe3JldHVybiB0aGlzLl9vdmVybGF5QXR0YWNoZWQmJnRoaXMuYXV0b2NvbXBsZXRlLnNob3dQYW5lbH1vcGVuUGFuZWwoKXt0aGlzLl9hdHRhY2hPdmVybGF5KCksdGhpcy5fZmxvYXRMYWJlbCgpfWNsb3NlUGFuZWwoKXt0aGlzLl9yZXNldExhYmVsKCksdGhpcy5fb3ZlcmxheUF0dGFjaGVkJiYodGhpcy5wYW5lbE9wZW4mJnRoaXMuYXV0b2NvbXBsZXRlLmNsb3NlZC5lbWl0KCksdGhpcy5hdXRvY29tcGxldGUuX2lzT3Blbj10aGlzLl9vdmVybGF5QXR0YWNoZWQ9ITEsdGhpcy5fb3ZlcmxheVJlZiYmdGhpcy5fb3ZlcmxheVJlZi5oYXNBdHRhY2hlZCgpJiYodGhpcy5fb3ZlcmxheVJlZi5kZXRhY2goKSx0aGlzLl9jbG9zaW5nQWN0aW9uc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpKSx0aGlzLl9jb21wb25lbnREZXN0cm95ZWR8fHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKSl9dXBkYXRlUG9zaXRpb24oKXt0aGlzLl9vdmVybGF5QXR0YWNoZWQmJnRoaXMuX292ZXJsYXlSZWYudXBkYXRlUG9zaXRpb24oKX1nZXQgcGFuZWxDbG9zaW5nQWN0aW9ucygpe3JldHVybiBXdCh0aGlzLm9wdGlvblNlbGVjdGlvbnMsdGhpcy5hdXRvY29tcGxldGUuX2tleU1hbmFnZXIudGFiT3V0LnBpcGUoR3QoKCgpPT50aGlzLl9vdmVybGF5QXR0YWNoZWQpKSksdGhpcy5fY2xvc2VLZXlFdmVudFN0cmVhbSx0aGlzLl9nZXRPdXRzaWRlQ2xpY2tTdHJlYW0oKSx0aGlzLl9vdmVybGF5UmVmP3RoaXMuX292ZXJsYXlSZWYuZGV0YWNobWVudHMoKS5waXBlKEd0KCgoKT0+dGhpcy5fb3ZlcmxheUF0dGFjaGVkKSkpOlooKSkucGlwZShodCgodD0+dCBpbnN0YW5jZW9mIHhIP3Q6bnVsbCkpKX1nZXQgYWN0aXZlT3B0aW9uKCl7cmV0dXJuIHRoaXMuYXV0b2NvbXBsZXRlJiZ0aGlzLmF1dG9jb21wbGV0ZS5fa2V5TWFuYWdlcj90aGlzLmF1dG9jb21wbGV0ZS5fa2V5TWFuYWdlci5hY3RpdmVJdGVtOm51bGx9X2dldE91dHNpZGVDbGlja1N0cmVhbSgpe3JldHVybiBXdChWdCh0aGlzLl9kb2N1bWVudCwiY2xpY2siKSxWdCh0aGlzLl9kb2N1bWVudCwiYXV4Y2xpY2siKSxWdCh0aGlzLl9kb2N1bWVudCwidG91Y2hlbmQiKSkucGlwZShHdCgodD0+e2NvbnN0IGU9dGhpcy5faXNJbnNpZGVTaGFkb3dSb290JiZ0LmNvbXBvc2VkUGF0aD90LmNvbXBvc2VkUGF0aCgpWzBdOnQudGFyZ2V0LG49dGhpcy5fZm9ybUZpZWxkP3RoaXMuX2Zvcm1GaWVsZC5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Om51bGwsbz10aGlzLmNvbm5lY3RlZFRvP3RoaXMuY29ubmVjdGVkVG8uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Om51bGw7cmV0dXJuIHRoaXMuX292ZXJsYXlBdHRhY2hlZCYmZSE9PXRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCYmKCFufHwhbi5jb250YWlucyhlKSkmJighb3x8IW8uY29udGFpbnMoZSkpJiYhIXRoaXMuX292ZXJsYXlSZWYmJiF0aGlzLl9vdmVybGF5UmVmLm92ZXJsYXlFbGVtZW50LmNvbnRhaW5zKGUpfSkpKX13cml0ZVZhbHVlKHQpe1Byb21pc2UucmVzb2x2ZShudWxsKS50aGVuKCgoKT0+dGhpcy5fc2V0VHJpZ2dlclZhbHVlKHQpKSl9cmVnaXN0ZXJPbkNoYW5nZSh0KXt0aGlzLl9vbkNoYW5nZT10fXJlZ2lzdGVyT25Ub3VjaGVkKHQpe3RoaXMuX29uVG91Y2hlZD10fXNldERpc2FibGVkU3RhdGUodCl7dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmRpc2FibGVkPXR9X2hhbmRsZUtleWRvd24odCl7Y29uc3QgZT10LmtleUNvZGU7aWYoZSE9PWVJfHxhSSh0KXx8dC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuYWN0aXZlT3B0aW9uJiZlPT09dEkmJnRoaXMucGFuZWxPcGVuKXRoaXMuYWN0aXZlT3B0aW9uLl9zZWxlY3RWaWFJbnRlcmFjdGlvbigpLHRoaXMuX3Jlc2V0QWN0aXZlSXRlbSgpLHQucHJldmVudERlZmF1bHQoKTtlbHNlIGlmKHRoaXMuYXV0b2NvbXBsZXRlKXtjb25zdCBuPXRoaXMuYXV0b2NvbXBsZXRlLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0sbz1lPT09b0l8fGU9PT1pSTt0aGlzLnBhbmVsT3Blbnx8OT09PWU/dGhpcy5hdXRvY29tcGxldGUuX2tleU1hbmFnZXIub25LZXlkb3duKHQpOm8mJnRoaXMuX2Nhbk9wZW4oKSYmdGhpcy5vcGVuUGFuZWwoKSwob3x8dGhpcy5hdXRvY29tcGxldGUuX2tleU1hbmFnZXIuYWN0aXZlSXRlbSE9PW4pJiZ0aGlzLl9zY3JvbGxUb09wdGlvbih0aGlzLmF1dG9jb21wbGV0ZS5fa2V5TWFuYWdlci5hY3RpdmVJdGVtSW5kZXh8fDApfX1faGFuZGxlSW5wdXQodCl7bGV0IGU9dC50YXJnZXQsbj1lLnZhbHVlOyJudW1iZXIiPT09ZS50eXBlJiYobj0iIj09bj9udWxsOnBhcnNlRmxvYXQobikpLHRoaXMuX3ByZXZpb3VzVmFsdWUhPT1uJiYodGhpcy5fcHJldmlvdXNWYWx1ZT1uLHRoaXMuX29uQ2hhbmdlKG4pLHRoaXMuX2Nhbk9wZW4oKSYmdGhpcy5fZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PXQudGFyZ2V0JiZ0aGlzLm9wZW5QYW5lbCgpKX1faGFuZGxlRm9jdXMoKXt0aGlzLl9jYW5PcGVuT25OZXh0Rm9jdXM/dGhpcy5fY2FuT3BlbigpJiYodGhpcy5fcHJldmlvdXNWYWx1ZT10aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUsdGhpcy5fYXR0YWNoT3ZlcmxheSgpLHRoaXMuX2Zsb2F0TGFiZWwoITApKTp0aGlzLl9jYW5PcGVuT25OZXh0Rm9jdXM9ITB9X2Zsb2F0TGFiZWwodD0hMSl7dGhpcy5fZm9ybUZpZWxkJiYiYXV0byI9PT10aGlzLl9mb3JtRmllbGQuZmxvYXRMYWJlbCYmKHQ/dGhpcy5fZm9ybUZpZWxkLl9hbmltYXRlQW5kTG9ja0xhYmVsKCk6dGhpcy5fZm9ybUZpZWxkLmZsb2F0TGFiZWw9ImFsd2F5cyIsdGhpcy5fbWFudWFsbHlGbG9hdGluZ0xhYmVsPSEwKX1fcmVzZXRMYWJlbCgpe3RoaXMuX21hbnVhbGx5RmxvYXRpbmdMYWJlbCYmKHRoaXMuX2Zvcm1GaWVsZC5mbG9hdExhYmVsPSJhdXRvIix0aGlzLl9tYW51YWxseUZsb2F0aW5nTGFiZWw9ITEpfV9zdWJzY3JpYmVUb0Nsb3NpbmdBY3Rpb25zKCl7cmV0dXJuIFd0KHRoaXMuX3pvbmUub25TdGFibGUucGlwZShOZSgxKSksdGhpcy5hdXRvY29tcGxldGUub3B0aW9ucy5jaGFuZ2VzLnBpcGUoX24oKCgpPT50aGlzLl9wb3NpdGlvblN0cmF0ZWd5LnJlYXBwbHlMYXN0UG9zaXRpb24oKSkpLGJlKDApKSkucGlwZShkbigoKCk9Pntjb25zdCB0PXRoaXMucGFuZWxPcGVuO3JldHVybiB0aGlzLl9yZXNldEFjdGl2ZUl0ZW0oKSx0aGlzLmF1dG9jb21wbGV0ZS5fc2V0VmlzaWJpbGl0eSgpLHRoaXMucGFuZWxPcGVuJiYodGhpcy5fb3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpLHQhPT10aGlzLnBhbmVsT3BlbiYmdGhpcy5hdXRvY29tcGxldGUub3BlbmVkLmVtaXQoKSksdGhpcy5wYW5lbENsb3NpbmdBY3Rpb25zfSkpLE5lKDEpKS5zdWJzY3JpYmUoKHQ9PnRoaXMuX3NldFZhbHVlQW5kQ2xvc2UodCkpKX1fZGVzdHJveVBhbmVsKCl7dGhpcy5fb3ZlcmxheVJlZiYmKHRoaXMuY2xvc2VQYW5lbCgpLHRoaXMuX292ZXJsYXlSZWYuZGlzcG9zZSgpLHRoaXMuX292ZXJsYXlSZWY9bnVsbCl9X3NldFRyaWdnZXJWYWx1ZSh0KXtjb25zdCBlPXRoaXMuYXV0b2NvbXBsZXRlJiZ0aGlzLmF1dG9jb21wbGV0ZS5kaXNwbGF5V2l0aD90aGlzLmF1dG9jb21wbGV0ZS5kaXNwbGF5V2l0aCh0KTp0LG49bnVsbCE9ZT9lOiIiO3RoaXMuX2Zvcm1GaWVsZD90aGlzLl9mb3JtRmllbGQuX2NvbnRyb2wudmFsdWU9bjp0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWU9bix0aGlzLl9wcmV2aW91c1ZhbHVlPW59X3NldFZhbHVlQW5kQ2xvc2UodCl7dCYmdC5zb3VyY2UmJih0aGlzLl9jbGVhclByZXZpb3VzU2VsZWN0ZWRPcHRpb24odC5zb3VyY2UpLHRoaXMuX3NldFRyaWdnZXJWYWx1ZSh0LnNvdXJjZS52YWx1ZSksdGhpcy5fb25DaGFuZ2UodC5zb3VyY2UudmFsdWUpLHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpLHRoaXMuYXV0b2NvbXBsZXRlLl9lbWl0U2VsZWN0RXZlbnQodC5zb3VyY2UpKSx0aGlzLmNsb3NlUGFuZWwoKX1fY2xlYXJQcmV2aW91c1NlbGVjdGVkT3B0aW9uKHQpe3RoaXMuYXV0b2NvbXBsZXRlLm9wdGlvbnMuZm9yRWFjaCgoZT0+e2UhPT10JiZlLnNlbGVjdGVkJiZlLmRlc2VsZWN0KCl9KSl9X2F0dGFjaE92ZXJsYXkoKXt2YXIgdDtpZighdGhpcy5hdXRvY29tcGxldGUmJigidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSl0aHJvdyhmdW5jdGlvbiBlKCl7cmV0dXJuIEVycm9yKCJBdHRlbXB0aW5nIHRvIG9wZW4gYW4gdW5kZWZpbmVkIGluc3RhbmNlIG9mIGBtYXQtYXV0b2NvbXBsZXRlYC4gTWFrZSBzdXJlIHRoYXQgdGhlIGlkIHBhc3NlZCB0byB0aGUgYG1hdEF1dG9jb21wbGV0ZWAgaXMgY29ycmVjdCBhbmQgdGhhdCB5b3UncmUgYXR0ZW1wdGluZyB0byBvcGVuIGl0IGFmdGVyIHRoZSBuZ0FmdGVyQ29udGVudEluaXQgaG9vay4iKX0pKCk7bnVsbD09dGhpcy5faXNJbnNpZGVTaGFkb3dSb290JiYodGhpcy5faXNJbnNpZGVTaGFkb3dSb290PSEhUEkodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50KSk7bGV0IG49dGhpcy5fb3ZlcmxheVJlZjtuPyh0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LnNldE9yaWdpbih0aGlzLl9nZXRDb25uZWN0ZWRFbGVtZW50KCkpLG4udXBkYXRlU2l6ZSh7d2lkdGg6dGhpcy5fZ2V0UGFuZWxXaWR0aCgpfSkpOih0aGlzLl9wb3J0YWw9bmV3IGxGKHRoaXMuYXV0b2NvbXBsZXRlLnRlbXBsYXRlLHRoaXMuX3ZpZXdDb250YWluZXJSZWYse2lkOm51bGw9PT0odD10aGlzLl9mb3JtRmllbGQpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmdldExhYmVsSWQoKX0pLG49dGhpcy5fb3ZlcmxheS5jcmVhdGUodGhpcy5fZ2V0T3ZlcmxheUNvbmZpZygpKSx0aGlzLl9vdmVybGF5UmVmPW4sbi5rZXlkb3duRXZlbnRzKCkuc3Vic2NyaWJlKCh0PT57KHQua2V5Q29kZT09PWVJJiYhYUkodCl8fHQua2V5Q29kZT09PW9JJiZhSSh0LCJhbHRLZXkiKSkmJih0aGlzLl9yZXNldEFjdGl2ZUl0ZW0oKSx0aGlzLl9jbG9zZUtleUV2ZW50U3RyZWFtLm5leHQoKSx0LnN0b3BQcm9wYWdhdGlvbigpLHQucHJldmVudERlZmF1bHQoKSl9KSksdGhpcy5fdmlld3BvcnRTdWJzY3JpcHRpb249dGhpcy5fdmlld3BvcnRSdWxlci5jaGFuZ2UoKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5wYW5lbE9wZW4mJm4mJm4udXBkYXRlU2l6ZSh7d2lkdGg6dGhpcy5fZ2V0UGFuZWxXaWR0aCgpfSl9KSkpLG4mJiFuLmhhc0F0dGFjaGVkKCkmJihuLmF0dGFjaCh0aGlzLl9wb3J0YWwpLHRoaXMuX2Nsb3NpbmdBY3Rpb25zU3Vic2NyaXB0aW9uPXRoaXMuX3N1YnNjcmliZVRvQ2xvc2luZ0FjdGlvbnMoKSk7Y29uc3Qgbz10aGlzLnBhbmVsT3Blbjt0aGlzLmF1dG9jb21wbGV0ZS5fc2V0VmlzaWJpbGl0eSgpLHRoaXMuYXV0b2NvbXBsZXRlLl9pc09wZW49dGhpcy5fb3ZlcmxheUF0dGFjaGVkPSEwLHRoaXMucGFuZWxPcGVuJiZvIT09dGhpcy5wYW5lbE9wZW4mJnRoaXMuYXV0b2NvbXBsZXRlLm9wZW5lZC5lbWl0KCl9X2dldE92ZXJsYXlDb25maWcoKXt2YXIgdDtyZXR1cm4gbmV3IFNGKHtwb3NpdGlvblN0cmF0ZWd5OnRoaXMuX2dldE92ZXJsYXlQb3NpdGlvbigpLHNjcm9sbFN0cmF0ZWd5OnRoaXMuX3Njcm9sbFN0cmF0ZWd5KCksd2lkdGg6dGhpcy5fZ2V0UGFuZWxXaWR0aCgpLGRpcmVjdGlvbjp0aGlzLl9kaXIscGFuZWxDbGFzczpudWxsPT09KHQ9dGhpcy5fZGVmYXVsdHMpfHx2b2lkIDA9PT10P3ZvaWQgMDp0Lm92ZXJsYXlQYW5lbENsYXNzfSl9X2dldE92ZXJsYXlQb3NpdGlvbigpe2NvbnN0IHQ9dGhpcy5fb3ZlcmxheS5wb3NpdGlvbigpLmZsZXhpYmxlQ29ubmVjdGVkVG8odGhpcy5fZ2V0Q29ubmVjdGVkRWxlbWVudCgpKS53aXRoRmxleGlibGVEaW1lbnNpb25zKCExKS53aXRoUHVzaCghMSk7cmV0dXJuIHRoaXMuX3NldFN0cmF0ZWd5UG9zaXRpb25zKHQpLHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3k9dCx0fV9zZXRTdHJhdGVneVBvc2l0aW9ucyh0KXtjb25zdCBlPVt7b3JpZ2luWDoic3RhcnQiLG9yaWdpblk6ImJvdHRvbSIsb3ZlcmxheVg6InN0YXJ0IixvdmVybGF5WToidG9wIn0se29yaWdpblg6ImVuZCIsb3JpZ2luWToiYm90dG9tIixvdmVybGF5WDoiZW5kIixvdmVybGF5WToidG9wIn1dLG49dGhpcy5fYWJvdmVDbGFzcyxvPVt7b3JpZ2luWDoic3RhcnQiLG9yaWdpblk6InRvcCIsb3ZlcmxheVg6InN0YXJ0IixvdmVybGF5WToiYm90dG9tIixwYW5lbENsYXNzOm59LHtvcmlnaW5YOiJlbmQiLG9yaWdpblk6InRvcCIsb3ZlcmxheVg6ImVuZCIsb3ZlcmxheVk6ImJvdHRvbSIscGFuZWxDbGFzczpufV07bGV0IGk7aT0iYWJvdmUiPT09dGhpcy5wb3NpdGlvbj9vOiJiZWxvdyI9PT10aGlzLnBvc2l0aW9uP2U6Wy4uLmUsLi4ub10sdC53aXRoUG9zaXRpb25zKGkpfV9nZXRDb25uZWN0ZWRFbGVtZW50KCl7cmV0dXJuIHRoaXMuY29ubmVjdGVkVG8/dGhpcy5jb25uZWN0ZWRUby5lbGVtZW50UmVmOnRoaXMuX2Zvcm1GaWVsZD90aGlzLl9mb3JtRmllbGQuZ2V0Q29ubmVjdGVkT3ZlcmxheU9yaWdpbigpOnRoaXMuX2VsZW1lbnR9X2dldFBhbmVsV2lkdGgoKXtyZXR1cm4gdGhpcy5hdXRvY29tcGxldGUucGFuZWxXaWR0aHx8dGhpcy5fZ2V0SG9zdFdpZHRoKCl9X2dldEhvc3RXaWR0aCgpe3JldHVybiB0aGlzLl9nZXRDb25uZWN0ZWRFbGVtZW50KCkubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aH1fcmVzZXRBY3RpdmVJdGVtKCl7Y29uc3QgdD10aGlzLmF1dG9jb21wbGV0ZTt0LmF1dG9BY3RpdmVGaXJzdE9wdGlvbj90Ll9rZXlNYW5hZ2VyLnNldEZpcnN0SXRlbUFjdGl2ZSgpOnQuX2tleU1hbmFnZXIuc2V0QWN0aXZlSXRlbSgtMSl9X2Nhbk9wZW4oKXtjb25zdCB0PXRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudDtyZXR1cm4hdC5yZWFkT25seSYmIXQuZGlzYWJsZWQmJiF0aGlzLl9hdXRvY29tcGxldGVEaXNhYmxlZH1fZ2V0V2luZG93KCl7dmFyIHQ7cmV0dXJuKG51bGw9PT0odD10aGlzLl9kb2N1bWVudCl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuZGVmYXVsdFZpZXcpfHx3aW5kb3d9X3Njcm9sbFRvT3B0aW9uKHQpe2NvbnN0IGU9dGhpcy5hdXRvY29tcGxldGUsbj13SCh0LGUub3B0aW9ucyxlLm9wdGlvbkdyb3Vwcyk7aWYoMD09PXQmJjE9PT1uKWUuX3NldFNjcm9sbFRvcCgwKTtlbHNlIGlmKGUucGFuZWwpe2NvbnN0IG49ZS5vcHRpb25zLnRvQXJyYXkoKVt0XTtpZihuKXtjb25zdCB0PW4uX2dldEhvc3RFbGVtZW50KCksbz1rSCh0Lm9mZnNldFRvcCx0Lm9mZnNldEhlaWdodCxlLl9nZXRTY3JvbGxUb3AoKSxlLnBhbmVsLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0KTtlLl9zZXRTY3JvbGxUb3Aobyl9fX19cDEuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHAxKShNdShjaCksTXUoSkYpLE11KFhoKSxNdSh0QyksTXUoSGgpLE11KHMxKSxNdShNeiw4KSxNdSh5Viw5KSxNdShVQyw4KSxNdShRSCksTXUoJDAsOCkpfSxwMS7JtWRpcj1Kbyh7dHlwZTpwMSxpbnB1dHM6e3Bvc2l0aW9uOlsibWF0QXV0b2NvbXBsZXRlUG9zaXRpb24iLCJwb3NpdGlvbiJdLGF1dG9jb21wbGV0ZUF0dHJpYnV0ZTpbImF1dG9jb21wbGV0ZSIsImF1dG9jb21wbGV0ZUF0dHJpYnV0ZSJdLGF1dG9jb21wbGV0ZURpc2FibGVkOlsibWF0QXV0b2NvbXBsZXRlRGlzYWJsZWQiLCJhdXRvY29tcGxldGVEaXNhYmxlZCJdLGF1dG9jb21wbGV0ZTpbIm1hdEF1dG9jb21wbGV0ZSIsImF1dG9jb21wbGV0ZSJdLGNvbm5lY3RlZFRvOlsibWF0QXV0b2NvbXBsZXRlQ29ubmVjdGVkVG8iLCJjb25uZWN0ZWRUbyJdfSxmZWF0dXJlczpbU2ldfSkscDEuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpjaH0se3R5cGU6SkZ9LHt0eXBlOlhofSx7dHlwZTp0Q30se3R5cGU6SGh9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltzMV19XX0se3R5cGU6TXosZGVjb3JhdG9yczpbe3R5cGU6X3N9XX0se3R5cGU6X1YsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W3lWXX0se3R5cGU6dnN9XX0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltVQ119XX0se3R5cGU6UUh9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbJDBdfV19XSxwMS5wcm9wRGVjb3JhdG9ycz17YXV0b2NvbXBsZXRlOlt7dHlwZTp5XyxhcmdzOlsibWF0QXV0b2NvbXBsZXRlIl19XSxwb3NpdGlvbjpbe3R5cGU6eV8sYXJnczpbIm1hdEF1dG9jb21wbGV0ZVBvc2l0aW9uIl19XSxjb25uZWN0ZWRUbzpbe3R5cGU6eV8sYXJnczpbIm1hdEF1dG9jb21wbGV0ZUNvbm5lY3RlZFRvIl19XSxhdXRvY29tcGxldGVBdHRyaWJ1dGU6W3t0eXBlOnlfLGFyZ3M6WyJhdXRvY29tcGxldGUiXX1dLGF1dG9jb21wbGV0ZURpc2FibGVkOlt7dHlwZTp5XyxhcmdzOlsibWF0QXV0b2NvbXBsZXRlRGlzYWJsZWQiXX1dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHAxLFt7dHlwZTpnX31dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpjaH0se3R5cGU6SkZ9LHt0eXBlOlhofSx7dHlwZTp0Q30se3R5cGU6SGh9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltzMV19XX0se3R5cGU6TXosZGVjb3JhdG9yczpbe3R5cGU6X3N9XX0se3R5cGU6X1YsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W3lWXX0se3R5cGU6dnN9XX0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltVQ119XX0se3R5cGU6UUh9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbJDBdfV19XX0pLHtwb3NpdGlvbjpbe3R5cGU6eV8sYXJnczpbIm1hdEF1dG9jb21wbGV0ZVBvc2l0aW9uIl19XSxhdXRvY29tcGxldGVBdHRyaWJ1dGU6W3t0eXBlOnlfLGFyZ3M6WyJhdXRvY29tcGxldGUiXX1dLGF1dG9jb21wbGV0ZURpc2FibGVkOlt7dHlwZTp5XyxhcmdzOlsibWF0QXV0b2NvbXBsZXRlRGlzYWJsZWQiXX1dLGF1dG9jb21wbGV0ZTpbe3R5cGU6eV8sYXJnczpbIm1hdEF1dG9jb21wbGV0ZSJdfV0sY29ubmVjdGVkVG86W3t0eXBlOnlfLGFyZ3M6WyJtYXRBdXRvY29tcGxldGVDb25uZWN0ZWRUbyJdfV19KTtjbGFzcyBtMSBleHRlbmRzIHAxe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9hYm92ZUNsYXNzPSJtYXQtYXV0b2NvbXBsZXRlLXBhbmVsLWFib3ZlIn19bTEuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gdTEoZXx8bTEpfSxtMS7JtWRpcj1Kbyh7dHlwZTptMSxzZWxlY3RvcnM6W1siaW5wdXQiLCJtYXRBdXRvY29tcGxldGUiLCIiXSxbInRleHRhcmVhIiwibWF0QXV0b2NvbXBsZXRlIiwiIl1dLGhvc3RBdHRyczpbMSwibWF0LWF1dG9jb21wbGV0ZS10cmlnZ2VyIl0saG9zdFZhcnM6Nyxob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezEmZSYmTnUoImZvY3VzaW4iLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uX2hhbmRsZUZvY3VzKCl9KSkoImJsdXIiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uX29uVG91Y2hlZCgpfSkpKCJpbnB1dCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4uX2hhbmRsZUlucHV0KGUpfSkpKCJrZXlkb3duIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5faGFuZGxlS2V5ZG93bihlKX0pKSwyJmUmJk5tKCJhdXRvY29tcGxldGUiLG4uYXV0b2NvbXBsZXRlQXR0cmlidXRlKSgicm9sZSIsbi5hdXRvY29tcGxldGVEaXNhYmxlZD9udWxsOiJjb21ib2JveCIpKCJhcmlhLWF1dG9jb21wbGV0ZSIsbi5hdXRvY29tcGxldGVEaXNhYmxlZD9udWxsOiJsaXN0IikoImFyaWEtYWN0aXZlZGVzY2VuZGFudCIsbi5wYW5lbE9wZW4mJm4uYWN0aXZlT3B0aW9uP24uYWN0aXZlT3B0aW9uLmlkOm51bGwpKCJhcmlhLWV4cGFuZGVkIixuLmF1dG9jb21wbGV0ZURpc2FibGVkP251bGw6bi5wYW5lbE9wZW4udG9TdHJpbmcoKSkoImFyaWEtb3ducyIsbi5hdXRvY29tcGxldGVEaXNhYmxlZHx8IW4ucGFuZWxPcGVufHxudWxsPT1uLmF1dG9jb21wbGV0ZT9udWxsOm4uYXV0b2NvbXBsZXRlLmlkKSgiYXJpYS1oYXNwb3B1cCIsIW4uYXV0b2NvbXBsZXRlRGlzYWJsZWQpfSxleHBvcnRBczpbIm1hdEF1dG9jb21wbGV0ZVRyaWdnZXIiXSxmZWF0dXJlczpbaWgoW2QxXSksZ21dfSk7Y29uc3QgdTE9dnIobTEpOygidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIobTEsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoiaW5wdXRbbWF0QXV0b2NvbXBsZXRlXSwgdGV4dGFyZWFbbWF0QXV0b2NvbXBsZXRlXSIsaG9zdDp7Y2xhc3M6Im1hdC1hdXRvY29tcGxldGUtdHJpZ2dlciIsIlthdHRyLmF1dG9jb21wbGV0ZV0iOiJhdXRvY29tcGxldGVBdHRyaWJ1dGUiLCJbYXR0ci5yb2xlXSI6J2F1dG9jb21wbGV0ZURpc2FibGVkID8gbnVsbCA6ICJjb21ib2JveCInLCJbYXR0ci5hcmlhLWF1dG9jb21wbGV0ZV0iOidhdXRvY29tcGxldGVEaXNhYmxlZCA/IG51bGwgOiAibGlzdCInLCJbYXR0ci5hcmlhLWFjdGl2ZWRlc2NlbmRhbnRdIjoiKHBhbmVsT3BlbiAmJiBhY3RpdmVPcHRpb24pID8gYWN0aXZlT3B0aW9uLmlkIDogbnVsbCIsIlthdHRyLmFyaWEtZXhwYW5kZWRdIjoiYXV0b2NvbXBsZXRlRGlzYWJsZWQgPyBudWxsIDogcGFuZWxPcGVuLnRvU3RyaW5nKCkiLCJbYXR0ci5hcmlhLW93bnNdIjoiKGF1dG9jb21wbGV0ZURpc2FibGVkIHx8ICFwYW5lbE9wZW4pID8gbnVsbCA6IGF1dG9jb21wbGV0ZT8uaWQiLCJbYXR0ci5hcmlhLWhhc3BvcHVwXSI6IiFhdXRvY29tcGxldGVEaXNhYmxlZCIsIihmb2N1c2luKSI6Il9oYW5kbGVGb2N1cygpIiwiKGJsdXIpIjoiX29uVG91Y2hlZCgpIiwiKGlucHV0KSI6Il9oYW5kbGVJbnB1dCgkZXZlbnQpIiwiKGtleWRvd24pIjoiX2hhbmRsZUtleWRvd24oJGV2ZW50KSJ9LGV4cG9ydEFzOiJtYXRBdXRvY29tcGxldGVUcmlnZ2VyIixwcm92aWRlcnM6W2QxXX1dfV0sbnVsbCxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIGYxe31mMS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8ZjEpfSxmMS7JtW1vZD1abyh7dHlwZTpmMX0pLGYxLsm1aW5qPWNvKHtwcm92aWRlcnM6W2wxXSxpbXBvcnRzOltbaUwsU0gsVHosQnZdLG9GLFNILFR6XX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oZjEse2RlY2xhcmF0aW9uczpmdW5jdGlvbigpe3JldHVybltuMSxtMSxhMV19LGltcG9ydHM6ZnVuY3Rpb24oKXtyZXR1cm5baUwsU0gsVHosQnZdfSxleHBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW24xLG0xLGExLG9GLFNILFR6XX19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGYxLFt7dHlwZTprXyxhcmdzOlt7aW1wb3J0czpbaUwsU0gsVHosQnZdLGV4cG9ydHM6W24xLG0xLGExLG9GLFNILFR6XSxkZWNsYXJhdGlvbnM6W24xLG0xLGExXSxwcm92aWRlcnM6W2wxXX1dfV0sbnVsbCxudWxsKTtjbGFzcyBnMXtjb25zdHJ1Y3Rvcigpe3RoaXMudmFsdWU9IiIsdGhpcy5wbGFjZWhvbGRlcj0iIn1vbklucHV0S2V5VXAodCl7IkVudGVyIj09PXQua2V5JiZ0aGlzLmF1dG9jb21wbGV0ZVRyaWdnZXIuY2xvc2VQYW5lbCgpfX1mdW5jdGlvbiBoMSh0LGUpe2lmKDEmdCYmKEhhKCksd3UoMCwiY2lyY2xlIiwzKSksMiZ0KXtjb25zdCB0PUx1KCk7b2YoImFuaW1hdGlvbi1uYW1lIiwibWF0LXByb2dyZXNzLXNwaW5uZXItc3Ryb2tlLXJvdGF0ZS0iK3QuX3NwaW5uZXJBbmltYXRpb25MYWJlbCkoInN0cm9rZS1kYXNob2Zmc2V0Iix0Ll9nZXRTdHJva2VEYXNoT2Zmc2V0KCksInB4IikoInN0cm9rZS1kYXNoYXJyYXkiLHQuX2dldFN0cm9rZUNpcmN1bWZlcmVuY2UoKSwicHgiKSgic3Ryb2tlLXdpZHRoIix0Ll9nZXRDaXJjbGVTdHJva2VXaWR0aCgpLCIlIiksTm0oInIiLHQuX2dldENpcmNsZVJhZGl1cygpKX19ZnVuY3Rpb24gYjEodCxlKXtpZigxJnQmJihIYSgpLHd1KDAsImNpcmNsZSIsMykpLDImdCl7Y29uc3QgdD1MdSgpO29mKCJzdHJva2UtZGFzaG9mZnNldCIsdC5fZ2V0U3Ryb2tlRGFzaE9mZnNldCgpLCJweCIpKCJzdHJva2UtZGFzaGFycmF5Iix0Ll9nZXRTdHJva2VDaXJjdW1mZXJlbmNlKCksInB4IikoInN0cm9rZS13aWR0aCIsdC5fZ2V0Q2lyY2xlU3Ryb2tlV2lkdGgoKSwiJSIpLE5tKCJyIix0Ll9nZXRDaXJjbGVSYWRpdXMoKSl9fWZ1bmN0aW9uIHkxKHQsZSl7aWYoMSZ0JiYoSGEoKSx3dSgwLCJjaXJjbGUiLDMpKSwyJnQpe2NvbnN0IHQ9THUoKTtvZigiYW5pbWF0aW9uLW5hbWUiLCJtYXQtcHJvZ3Jlc3Mtc3Bpbm5lci1zdHJva2Utcm90YXRlLSIrdC5fc3Bpbm5lckFuaW1hdGlvbkxhYmVsKSgic3Ryb2tlLWRhc2hvZmZzZXQiLHQuX2dldFN0cm9rZURhc2hPZmZzZXQoKSwicHgiKSgic3Ryb2tlLWRhc2hhcnJheSIsdC5fZ2V0U3Ryb2tlQ2lyY3VtZmVyZW5jZSgpLCJweCIpKCJzdHJva2Utd2lkdGgiLHQuX2dldENpcmNsZVN0cm9rZVdpZHRoKCksIiUiKSxObSgiciIsdC5fZ2V0Q2lyY2xlUmFkaXVzKCkpfX1mdW5jdGlvbiBfMSh0LGUpe2lmKDEmdCYmKEhhKCksd3UoMCwiY2lyY2xlIiwzKSksMiZ0KXtjb25zdCB0PUx1KCk7b2YoInN0cm9rZS1kYXNob2Zmc2V0Iix0Ll9nZXRTdHJva2VEYXNoT2Zmc2V0KCksInB4IikoInN0cm9rZS1kYXNoYXJyYXkiLHQuX2dldFN0cm9rZUNpcmN1bWZlcmVuY2UoKSwicHgiKSgic3Ryb2tlLXdpZHRoIix0Ll9nZXRDaXJjbGVTdHJva2VXaWR0aCgpLCIlIiksTm0oInIiLHQuX2dldENpcmNsZVJhZGl1cygpKX19ZzEuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGcxKX0sZzEuybVjbXA9VW8oe3R5cGU6ZzEsc2VsZWN0b3JzOltbInRiLWZpbHRlci1pbnB1dCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24gdChlLG4pe2lmKDEmZSYmV2IobTEsMSksMiZlKXtsZXQgdDtVYih0PVliKCkpJiYobi5hdXRvY29tcGxldGVUcmlnZ2VyPXQuZmlyc3QpfX0saW5wdXRzOnt2YWx1ZToidmFsdWUiLG1hdEF1dG9jb21wbGV0ZToibWF0QXV0b2NvbXBsZXRlIixwbGFjZWhvbGRlcjoicGxhY2Vob2xkZXIifSxkZWNsczoyLHZhcnM6NCxjb25zdHM6W1sic3ZnSWNvbiIsInNlYXJjaF8yNHB4Il0sWyJ0eXBlIiwidGV4dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywicGxhY2Vob2xkZXIiLCJtYXRBdXRvY29tcGxldGUiLCJtYXRBdXRvY29tcGxldGVEaXNhYmxlZCIsInZhbHVlIiwia2V5dXAiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKHd1KDAsIm1hdC1pY29uIiwwKSxPdSgxLCJpbnB1dCIsMSksTnUoImtleXVwIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vbklucHV0S2V5VXAoZSl9KSksUHUoKSksMiZlJiYoSmMoMSksdnUoInBsYWNlaG9sZGVyIixuLnBsYWNlaG9sZGVyKSgibWF0QXV0b2NvbXBsZXRlIixuLm1hdEF1dG9jb21wbGV0ZSkoIm1hdEF1dG9jb21wbGV0ZURpc2FibGVkIiwhbi5tYXRBdXRvY29tcGxldGUpKCJ2YWx1ZSIsbi52YWx1ZSkpfSxkaXJlY3RpdmVzOltjRyxtMV0sc3R5bGVzOlsnLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEycHg7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtYmFkZ2Utc21hbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6OXB4fS5tYXQtYmFkZ2UtbGFyZ2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweH0ubWF0LWgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1oZWFkbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMjRweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNnB4LzI4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNXB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC44MykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtaDZbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuNjcpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWJvZHktc3Ryb25nW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjAgMCAxMnB4fS5tYXQtc21hbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDEycHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjMwMCAxMTJweC8xMTJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDVlbTttYXJnaW46MCAwIDU2cHh9Lm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDU2cHgvNTZweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDJlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDQ1cHgvNDhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDA1ZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAzNHB4LzQwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDY0cHh9Lm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcmFpc2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0cm9rZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mbGF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmFiW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1taW5pLWZhYltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWJ1dHRvbi10b2dnbGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhcmQtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjIwcHh9Lm1hdC1jYXJkLXN1YnRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2hlY2tib3hbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNoZWNrYm94LWxheW91dFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoZWNrYm94LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoyNHB4fS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtdHJhaWxpbmctaWNvbi5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtcmVtb3ZlLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MThweH0ubWF0LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1oZWFkZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2VsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9vdGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2FsZW5kYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhbGVuZGFyLWJvZHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxM3B4fS5tYXQtY2FsZW5kYXItYm9keS1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FsZW5kYXItcGVyaW9kLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo0MDB9Lm1hdC1kaWFsb2ctdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjEyNTtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE1MCU7bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS41ZW07d2lkdGg6MS41ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNWVtIDA7Ym9yZGVyLXRvcDouODQzNzVlbSBzb2xpZCB0cmFuc3BhcmVudH0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6LTAuODQzNzVlbTtwYWRkaW5nLXRvcDouODQzNzVlbX0ubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo3NSU7bWFyZ2luLXRvcDouNjY2NjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjc5MTY2NjY2NjdlbSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNDM3NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMnB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjNlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM1MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjI4MTI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDouNTQxNjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjY2NjY2NjY2NjdlbSl9QG1lZGlhIHByaW50ey5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMmVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMWVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTJlbSkgc2NhbGUoMC43NSl9fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi4yNWVtIDAgLjc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMDkzNzVlbTttYXJnaW4tdG9wOi0wLjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjFlbSAwIDFlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS44NDM3NWVtO21hcmdpbi10b3A6LTAuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9aW5wdXQubWF0LWlucHV0LWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LTAuMDYyNWVtfS5tYXQtbWVudS1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtcGFnaW5hdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweH0ubWF0LXJhZGlvLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW19Lm1hdC1zbGlkZS10b2dnbGUtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdGVwcGVyLWhvcml6b250YWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXN0ZXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXN0ZXAtc3ViLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDpub3JtYWx9Lm1hdC1zdGVwLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LXN0ZXAtbGFiZWwtc2VsZWN0ZWRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRhYi1ncm91cFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdGFiLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10YWItbGlua1tfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowfS5tYXQtdG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB4O3BhZGRpbmctdG9wOjZweDtwYWRkaW5nLWJvdHRvbTo2cHh9Lm1hdC10b29sdGlwLWhhbmRzZXRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9Lm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE2cHh9Lm1hdC1vcHRncm91cC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1zaW1wbGUtc25hY2tiYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweH0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb25bX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjE7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo1MDB9Lm1hdC10cmVlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW5lc3RlZC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjQwMDtmb250LXNpemU6MTRweH0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmVtcHR5KXt0cmFuc2Zvcm06dHJhbnNsYXRlWigwKX0ubWF0LXJpcHBsZS5tYXQtcmlwcGxlLXVuYm91bmRlZFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItcmFkaXVzOjUwJTtwb2ludGVyLWV2ZW50czpub25lO3RyYW5zaXRpb246b3BhY2l0eSx0cmFuc2Zvcm0gMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpO3RyYW5zZm9ybTpzY2FsZSgwKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6bm9uZX0uY2RrLXZpc3VhbGx5LWhpZGRlbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjA7Y2xpcDpyZWN0KDAgMCAwIDApO2hlaWdodDoxcHg7bWFyZ2luOi0xcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwO291dGxpbmU6MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb2ludGVyLWV2ZW50czpub25lO3RvcDowO2xlZnQ6MDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTplbXB0eXtkaXNwbGF5Om5vbmV9LmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1wYW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czphdXRvO2JveC1zaXppbmc6Ym9yZGVyLWJveDt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O21heC13aWR0aDoxMDAlO21heC1oZWlnaHQ6MTAwJX0uY2RrLW92ZXJsYXktYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO3otaW5kZXg6MTAwMDtwb2ludGVyLWV2ZW50czphdXRvOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDt0cmFuc2l0aW9uOm9wYWNpdHkgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSk7b3BhY2l0eTowfS5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjF9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAuY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTouNn0uY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4zMil9LmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MH0uY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWluLXdpZHRoOjFweDttaW4taGVpZ2h0OjFweH0uY2RrLWdsb2JhbC1zY3JvbGxibG9ja1tfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7d2lkdGg6MTAwJTtvdmVyZmxvdy15OnNjcm9sbH1Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0e31Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZHt9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbHthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQgMHMgMW1zfS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOm5vdCg6LXdlYmtpdC1hdXRvZmlsbCl7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCAwcyAxbXN9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplW19uZ2NvbnRlbnQtJUNPTVAlXXtyZXNpemU6bm9uZX10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDphdXRvICFpbXBvcnRhbnQ7b3ZlcmZsb3c6aGlkZGVuICFpbXBvcnRhbnR9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZy1maXJlZm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDowICFpbXBvcnRhbnR9Lm1hdC1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtbWRjLWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9W19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmZsZXg7Zm9udC1zaXplOjEzcHh9bWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7ZmxleDpub25lO21hcmdpbi1yaWdodDo1cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBtYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9aW5wdXRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6aW5oZXJpdDtjYXJldC1jb2xvcjpjdXJyZW50Q29sb3I7Y29sb3I6Y3VycmVudENvbG9yO2ZvbnQ6aW5oZXJpdDtib3JkZXI6bm9uZTtvdXRsaW5lOm5vbmU7cGFkZGluZzowO2ZsZXgtZ3JvdzoxfSddfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihnMSxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJ0Yi1maWx0ZXItaW5wdXQiLHRlbXBsYXRlOidcbiAgICA8bWF0LWljb24gc3ZnSWNvbj0ic2VhcmNoXzI0cHgiPjwvbWF0LWljb24+XG5cbiAgICBceDNjIS0tIE5vdGU6IHRvIGFsbG93IGZhbHN5IFwnbWF0QXV0b2NvbXBsZXRlXCcgdmFsdWVzLCB3ZSBuZWVkIFwnbWF0QXV0b2NvbXBsZXRlRGlzYWJsZWRcJ1xuICAgIHRvIHByZXZlbnQgcnVudGltZSBlcnJvcnMuIC0tXHgzZVxuICAgIDxpbnB1dFxuICAgICAgdHlwZT0idGV4dCJcbiAgICAgIGF1dG9jb21wbGV0ZT0ib2ZmIlxuICAgICAgW3BsYWNlaG9sZGVyXT0icGxhY2Vob2xkZXIiXG4gICAgICBbbWF0QXV0b2NvbXBsZXRlXT0ibWF0QXV0b2NvbXBsZXRlIlxuICAgICAgW21hdEF1dG9jb21wbGV0ZURpc2FibGVkXT0iIW1hdEF1dG9jb21wbGV0ZSJcbiAgICAgIFt2YWx1ZV09InZhbHVlIlxuICAgICAgKGtleXVwKT0ib25JbnB1dEtleVVwKCRldmVudCkiXG4gICAgLz5cbiAgJyxzdHlsZVVybHM6WyJmaWx0ZXJfaW5wdXRfY29tcG9uZW50LmNzcyJdfV19XSxudWxsLHt2YWx1ZTpbe3R5cGU6eV99XSxtYXRBdXRvY29tcGxldGU6W3t0eXBlOnlffV0scGxhY2Vob2xkZXI6W3t0eXBlOnlffV0sYXV0b2NvbXBsZXRlVHJpZ2dlcjpbe3R5cGU6RnIsYXJnczpbbTFdfV19KTtjb25zdCBDMT0iLm1hdC1wcm9ncmVzcy1zcGlubmVye2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6aGlkZGVufS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBzdmd7cG9zaXRpb246YWJzb2x1dGU7dHJhbnNmb3JtOnJvdGF0ZSgtOTBkZWcpO3RvcDowO2xlZnQ6MDt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlcjtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBjaXJjbGV7ZmlsbDp0cmFuc3BhcmVudDt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlcjt0cmFuc2l0aW9uOnN0cm9rZS1kYXNob2Zmc2V0IDIyNW1zIGxpbmVhcn0uX21hdC1hbmltYXRpb24tbm9vcGFibGUubWF0LXByb2dyZXNzLXNwaW5uZXIgY2lyY2xle3RyYW5zaXRpb246bm9uZTthbmltYXRpb246bm9uZX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBjaXJjbGV7c3Ryb2tlOmN1cnJlbnRDb2xvcjtzdHJva2U6Q2FudmFzVGV4dH0ubWF0LXByb2dyZXNzLXNwaW5uZXIubWF0LXByb2dyZXNzLXNwaW5uZXItaW5kZXRlcm1pbmF0ZS1hbmltYXRpb25bbW9kZT1pbmRldGVybWluYXRlXSBzdmd7YW5pbWF0aW9uOm1hdC1wcm9ncmVzcy1zcGlubmVyLWxpbmVhci1yb3RhdGUgMjAwMG1zIGxpbmVhciBpbmZpbml0ZX0uX21hdC1hbmltYXRpb24tbm9vcGFibGUubWF0LXByb2dyZXNzLXNwaW5uZXIubWF0LXByb2dyZXNzLXNwaW5uZXItaW5kZXRlcm1pbmF0ZS1hbmltYXRpb25bbW9kZT1pbmRldGVybWluYXRlXSBzdmd7dHJhbnNpdGlvbjpub25lO2FuaW1hdGlvbjpub25lfS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci1pbmRldGVybWluYXRlLWFuaW1hdGlvblttb2RlPWluZGV0ZXJtaW5hdGVdIGNpcmNsZXt0cmFuc2l0aW9uLXByb3BlcnR5OnN0cm9rZTthbmltYXRpb24tZHVyYXRpb246NDAwMG1zO2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuMjUsIDEpO2FuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6aW5maW5pdGV9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlLm1hdC1wcm9ncmVzcy1zcGlubmVyLm1hdC1wcm9ncmVzcy1zcGlubmVyLWluZGV0ZXJtaW5hdGUtYW5pbWF0aW9uW21vZGU9aW5kZXRlcm1pbmF0ZV0gY2lyY2xle3RyYW5zaXRpb246bm9uZTthbmltYXRpb246bm9uZX0ubWF0LXByb2dyZXNzLXNwaW5uZXIubWF0LXByb2dyZXNzLXNwaW5uZXItaW5kZXRlcm1pbmF0ZS1mYWxsYmFjay1hbmltYXRpb25bbW9kZT1pbmRldGVybWluYXRlXSBzdmd7YW5pbWF0aW9uOm1hdC1wcm9ncmVzcy1zcGlubmVyLXN0cm9rZS1yb3RhdGUtZmFsbGJhY2sgMTAwMDBtcyBjdWJpYy1iZXppZXIoMC44NywgMC4wMywgMC4zMywgMSkgaW5maW5pdGV9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlLm1hdC1wcm9ncmVzcy1zcGlubmVyLm1hdC1wcm9ncmVzcy1zcGlubmVyLWluZGV0ZXJtaW5hdGUtZmFsbGJhY2stYW5pbWF0aW9uW21vZGU9aW5kZXRlcm1pbmF0ZV0gc3Zne3RyYW5zaXRpb246bm9uZTthbmltYXRpb246bm9uZX0ubWF0LXByb2dyZXNzLXNwaW5uZXIubWF0LXByb2dyZXNzLXNwaW5uZXItaW5kZXRlcm1pbmF0ZS1mYWxsYmFjay1hbmltYXRpb25bbW9kZT1pbmRldGVybWluYXRlXSBjaXJjbGV7dHJhbnNpdGlvbi1wcm9wZXJ0eTpzdHJva2V9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlLm1hdC1wcm9ncmVzcy1zcGlubmVyLm1hdC1wcm9ncmVzcy1zcGlubmVyLWluZGV0ZXJtaW5hdGUtZmFsbGJhY2stYW5pbWF0aW9uW21vZGU9aW5kZXRlcm1pbmF0ZV0gY2lyY2xle3RyYW5zaXRpb246bm9uZTthbmltYXRpb246bm9uZX1Aa2V5ZnJhbWVzIG1hdC1wcm9ncmVzcy1zcGlubmVyLWxpbmVhci1yb3RhdGV7MCV7dHJhbnNmb3JtOnJvdGF0ZSgwZGVnKX0xMDAle3RyYW5zZm9ybTpyb3RhdGUoMzYwZGVnKX19QGtleWZyYW1lcyBtYXQtcHJvZ3Jlc3Mtc3Bpbm5lci1zdHJva2Utcm90YXRlLTEwMHswJXtzdHJva2UtZGFzaG9mZnNldDoyNjguNjA2MTcxNTc1cHg7dHJhbnNmb3JtOnJvdGF0ZSgwKX0xMi41JXtzdHJva2UtZGFzaG9mZnNldDo1Ni41NDg2Njc3cHg7dHJhbnNmb3JtOnJvdGF0ZSgwKX0xMi41MDAxJXtzdHJva2UtZGFzaG9mZnNldDo1Ni41NDg2Njc3cHg7dHJhbnNmb3JtOnJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoNzIuNWRlZyl9MjUle3N0cm9rZS1kYXNob2Zmc2V0OjI2OC42MDYxNzE1NzVweDt0cmFuc2Zvcm06cm90YXRlWCgxODBkZWcpIHJvdGF0ZSg3Mi41ZGVnKX0yNS4wMDAxJXtzdHJva2UtZGFzaG9mZnNldDoyNjguNjA2MTcxNTc1cHg7dHJhbnNmb3JtOnJvdGF0ZSgyNzBkZWcpfTM3LjUle3N0cm9rZS1kYXNob2Zmc2V0OjU2LjU0ODY2NzdweDt0cmFuc2Zvcm06cm90YXRlKDI3MGRlZyl9MzcuNTAwMSV7c3Ryb2tlLWRhc2hvZmZzZXQ6NTYuNTQ4NjY3N3B4O3RyYW5zZm9ybTpyb3RhdGVYKDE4MGRlZykgcm90YXRlKDE2MS41ZGVnKX01MCV7c3Ryb2tlLWRhc2hvZmZzZXQ6MjY4LjYwNjE3MTU3NXB4O3RyYW5zZm9ybTpyb3RhdGVYKDE4MGRlZykgcm90YXRlKDE2MS41ZGVnKX01MC4wMDAxJXtzdHJva2UtZGFzaG9mZnNldDoyNjguNjA2MTcxNTc1cHg7dHJhbnNmb3JtOnJvdGF0ZSgxODBkZWcpfTYyLjUle3N0cm9rZS1kYXNob2Zmc2V0OjU2LjU0ODY2NzdweDt0cmFuc2Zvcm06cm90YXRlKDE4MGRlZyl9NjIuNTAwMSV7c3Ryb2tlLWRhc2hvZmZzZXQ6NTYuNTQ4NjY3N3B4O3RyYW5zZm9ybTpyb3RhdGVYKDE4MGRlZykgcm90YXRlKDI1MS41ZGVnKX03NSV7c3Ryb2tlLWRhc2hvZmZzZXQ6MjY4LjYwNjE3MTU3NXB4O3RyYW5zZm9ybTpyb3RhdGVYKDE4MGRlZykgcm90YXRlKDI1MS41ZGVnKX03NS4wMDAxJXtzdHJva2UtZGFzaG9mZnNldDoyNjguNjA2MTcxNTc1cHg7dHJhbnNmb3JtOnJvdGF0ZSg5MGRlZyl9ODcuNSV7c3Ryb2tlLWRhc2hvZmZzZXQ6NTYuNTQ4NjY3N3B4O3RyYW5zZm9ybTpyb3RhdGUoOTBkZWcpfTg3LjUwMDEle3N0cm9rZS1kYXNob2Zmc2V0OjU2LjU0ODY2NzdweDt0cmFuc2Zvcm06cm90YXRlWCgxODBkZWcpIHJvdGF0ZSgzNDEuNWRlZyl9MTAwJXtzdHJva2UtZGFzaG9mZnNldDoyNjguNjA2MTcxNTc1cHg7dHJhbnNmb3JtOnJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoMzQxLjVkZWcpfX1Aa2V5ZnJhbWVzIG1hdC1wcm9ncmVzcy1zcGlubmVyLXN0cm9rZS1yb3RhdGUtZmFsbGJhY2t7MCV7dHJhbnNmb3JtOnJvdGF0ZSgwZGVnKX0yNSV7dHJhbnNmb3JtOnJvdGF0ZSgxMTcwZGVnKX01MCV7dHJhbnNmb3JtOnJvdGF0ZSgyMzQwZGVnKX03NSV7dHJhbnNmb3JtOnJvdGF0ZSgzNTEwZGVnKX0xMDAle3RyYW5zZm9ybTpyb3RhdGUoNDY4MGRlZyl9fVxuIixNMT1JeihjbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLl9lbGVtZW50UmVmPXR9fSwicHJpbWFyeSIpLHYxPW5ldyBOcigibWF0LXByb2dyZXNzLXNwaW5uZXItZGVmYXVsdC1vcHRpb25zIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbiB4MSgpe3JldHVybntkaWFtZXRlcjoxMDB9fX0pO2NsYXNzIE8xIGV4dGVuZHMgTTF7Y29uc3RydWN0b3IodCxlLG4sbyxpKXtzdXBlcih0KSx0aGlzLl9lbGVtZW50UmVmPXQsdGhpcy5fZG9jdW1lbnQ9bix0aGlzLl9kaWFtZXRlcj0xMDAsdGhpcy5fdmFsdWU9MCx0aGlzLl9mYWxsYmFja0FuaW1hdGlvbj0hMSx0aGlzLm1vZGU9ImRldGVybWluYXRlIjtjb25zdCBhPU8xLl9kaWFtZXRlcnM7dGhpcy5fc3Bpbm5lckFuaW1hdGlvbkxhYmVsPXRoaXMuX2dldFNwaW5uZXJBbmltYXRpb25MYWJlbCgpLGEuaGFzKG4uaGVhZCl8fGEuc2V0KG4uaGVhZCxuZXcgU2V0KFsxMDBdKSksdGhpcy5fZmFsbGJhY2tBbmltYXRpb249ZS5FREdFfHxlLlRSSURFTlQsdGhpcy5fbm9vcEFuaW1hdGlvbnM9Ik5vb3BBbmltYXRpb25zIj09PW8mJiEhaSYmIWkuX2ZvcmNlQW5pbWF0aW9ucyxpJiYoaS5kaWFtZXRlciYmKHRoaXMuZGlhbWV0ZXI9aS5kaWFtZXRlciksaS5zdHJva2VXaWR0aCYmKHRoaXMuc3Ryb2tlV2lkdGg9aS5zdHJva2VXaWR0aCkpfWdldCBkaWFtZXRlcigpe3JldHVybiB0aGlzLl9kaWFtZXRlcn1zZXQgZGlhbWV0ZXIodCl7dGhpcy5fZGlhbWV0ZXI9c0kodCksdGhpcy5fc3Bpbm5lckFuaW1hdGlvbkxhYmVsPXRoaXMuX2dldFNwaW5uZXJBbmltYXRpb25MYWJlbCgpLCF0aGlzLl9mYWxsYmFja0FuaW1hdGlvbiYmdGhpcy5fc3R5bGVSb290JiZ0aGlzLl9hdHRhY2hTdHlsZU5vZGUoKX1nZXQgc3Ryb2tlV2lkdGgoKXtyZXR1cm4gdGhpcy5fc3Ryb2tlV2lkdGh8fHRoaXMuZGlhbWV0ZXIvMTB9c2V0IHN0cm9rZVdpZHRoKHQpe3RoaXMuX3N0cm9rZVdpZHRoPXNJKHQpfWdldCB2YWx1ZSgpe3JldHVybiJkZXRlcm1pbmF0ZSI9PT10aGlzLm1vZGU/dGhpcy5fdmFsdWU6MH1zZXQgdmFsdWUodCl7dGhpcy5fdmFsdWU9TWF0aC5tYXgoMCxNYXRoLm1pbigxMDAsc0kodCkpKX1uZ09uSW5pdCgpe2NvbnN0IHQ9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O3RoaXMuX3N0eWxlUm9vdD1QSSh0KXx8dGhpcy5fZG9jdW1lbnQuaGVhZCx0aGlzLl9hdHRhY2hTdHlsZU5vZGUoKSx0LmNsYXNzTGlzdC5hZGQoYG1hdC1wcm9ncmVzcy1zcGlubmVyLWluZGV0ZXJtaW5hdGUke3RoaXMuX2ZhbGxiYWNrQW5pbWF0aW9uPyItZmFsbGJhY2siOiIifS1hbmltYXRpb25gKX1fZ2V0Q2lyY2xlUmFkaXVzKCl7cmV0dXJuKHRoaXMuZGlhbWV0ZXItMTApLzJ9X2dldFZpZXdCb3goKXtjb25zdCB0PTIqdGhpcy5fZ2V0Q2lyY2xlUmFkaXVzKCkrdGhpcy5zdHJva2VXaWR0aDtyZXR1cm5gMCAwICR7dH0gJHt0fWB9X2dldFN0cm9rZUNpcmN1bWZlcmVuY2UoKXtyZXR1cm4gMipNYXRoLlBJKnRoaXMuX2dldENpcmNsZVJhZGl1cygpfV9nZXRTdHJva2VEYXNoT2Zmc2V0KCl7cmV0dXJuImRldGVybWluYXRlIj09PXRoaXMubW9kZT90aGlzLl9nZXRTdHJva2VDaXJjdW1mZXJlbmNlKCkqKDEwMC10aGlzLl92YWx1ZSkvMTAwOnRoaXMuX2ZhbGxiYWNrQW5pbWF0aW9uJiYiaW5kZXRlcm1pbmF0ZSI9PT10aGlzLm1vZGU/LjIqdGhpcy5fZ2V0U3Ryb2tlQ2lyY3VtZmVyZW5jZSgpOm51bGx9X2dldENpcmNsZVN0cm9rZVdpZHRoKCl7cmV0dXJuIHRoaXMuc3Ryb2tlV2lkdGgvdGhpcy5kaWFtZXRlcioxMDB9X2F0dGFjaFN0eWxlTm9kZSgpe2NvbnN0IHQ9dGhpcy5fc3R5bGVSb290LGU9dGhpcy5fZGlhbWV0ZXIsbj1PMS5fZGlhbWV0ZXJzO2xldCBvPW4uZ2V0KHQpO2lmKCFvfHwhby5oYXMoZSkpe2NvbnN0IGk9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtpLnNldEF0dHJpYnV0ZSgibWF0LXNwaW5uZXItYW5pbWF0aW9uIix0aGlzLl9zcGlubmVyQW5pbWF0aW9uTGFiZWwpLGkudGV4dENvbnRlbnQ9dGhpcy5fZ2V0QW5pbWF0aW9uVGV4dCgpLHQuYXBwZW5kQ2hpbGQoaSksb3x8KG89bmV3IFNldCxuLnNldCh0LG8pKSxvLmFkZChlKX19X2dldEFuaW1hdGlvblRleHQoKXtjb25zdCB0PXRoaXMuX2dldFN0cm9rZUNpcmN1bWZlcmVuY2UoKTtyZXR1cm4iXG4gQGtleWZyYW1lcyBtYXQtcHJvZ3Jlc3Mtc3Bpbm5lci1zdHJva2Utcm90YXRlLURJQU1FVEVSIHtcbiAgICAwJSAgICAgIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IFNUQVJUX1ZBTFVFOyAgdHJhbnNmb3JtOiByb3RhdGUoMCk7IH1cbiAgICAxMi41JSAgIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IEVORF9WQUxVRTsgICAgdHJhbnNmb3JtOiByb3RhdGUoMCk7IH1cbiAgICAxMi41MDAxJSAgeyBzdHJva2UtZGFzaG9mZnNldDogRU5EX1ZBTFVFOyAgICB0cmFuc2Zvcm06IHJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoNzIuNWRlZyk7IH1cbiAgICAyNSUgICAgIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IFNUQVJUX1ZBTFVFOyAgdHJhbnNmb3JtOiByb3RhdGVYKDE4MGRlZykgcm90YXRlKDcyLjVkZWcpOyB9XG5cbiAgICAyNS4wMDAxJSAgIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IFNUQVJUX1ZBTFVFOyAgdHJhbnNmb3JtOiByb3RhdGUoMjcwZGVnKTsgfVxuICAgIDM3LjUlICAgeyBzdHJva2UtZGFzaG9mZnNldDogRU5EX1ZBTFVFOyAgICB0cmFuc2Zvcm06IHJvdGF0ZSgyNzBkZWcpOyB9XG4gICAgMzcuNTAwMSUgIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IEVORF9WQUxVRTsgICAgdHJhbnNmb3JtOiByb3RhdGVYKDE4MGRlZykgcm90YXRlKDE2MS41ZGVnKTsgfVxuICAgIDUwJSAgICAgeyBzdHJva2UtZGFzaG9mZnNldDogU1RBUlRfVkFMVUU7ICB0cmFuc2Zvcm06IHJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoMTYxLjVkZWcpOyB9XG5cbiAgICA1MC4wMDAxJSAgeyBzdHJva2UtZGFzaG9mZnNldDogU1RBUlRfVkFMVUU7ICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpOyB9XG4gICAgNjIuNSUgICB7IHN0cm9rZS1kYXNob2Zmc2V0OiBFTkRfVkFMVUU7ICAgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7IH1cbiAgICA2Mi41MDAxJSAgeyBzdHJva2UtZGFzaG9mZnNldDogRU5EX1ZBTFVFOyAgICB0cmFuc2Zvcm06IHJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoMjUxLjVkZWcpOyB9XG4gICAgNzUlICAgICB7IHN0cm9rZS1kYXNob2Zmc2V0OiBTVEFSVF9WQUxVRTsgIHRyYW5zZm9ybTogcm90YXRlWCgxODBkZWcpIHJvdGF0ZSgyNTEuNWRlZyk7IH1cblxuICAgIDc1LjAwMDElICB7IHN0cm9rZS1kYXNob2Zmc2V0OiBTVEFSVF9WQUxVRTsgIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsgfVxuICAgIDg3LjUlICAgeyBzdHJva2UtZGFzaG9mZnNldDogRU5EX1ZBTFVFOyAgICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7IH1cbiAgICA4Ny41MDAxJSAgeyBzdHJva2UtZGFzaG9mZnNldDogRU5EX1ZBTFVFOyAgICB0cmFuc2Zvcm06IHJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoMzQxLjVkZWcpOyB9XG4gICAgMTAwJSAgICB7IHN0cm9rZS1kYXNob2Zmc2V0OiBTVEFSVF9WQUxVRTsgIHRyYW5zZm9ybTogcm90YXRlWCgxODBkZWcpIHJvdGF0ZSgzNDEuNWRlZyk7IH1cbiAgfVxuIi5yZXBsYWNlKC9TVEFSVF9WQUxVRS9nLCIiKy45NSp0KS5yZXBsYWNlKC9FTkRfVkFMVUUvZywiIisuMip0KS5yZXBsYWNlKC9ESUFNRVRFUi9nLGAke3RoaXMuX3NwaW5uZXJBbmltYXRpb25MYWJlbH1gKX1fZ2V0U3Bpbm5lckFuaW1hdGlvbkxhYmVsKCl7cmV0dXJuIHRoaXMuZGlhbWV0ZXIudG9TdHJpbmcoKS5yZXBsYWNlKCIuIiwiXyIpfX1PMS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8TzEpKE11KGNoKSxNdShmSSksTXUoVUMsOCksTXUoTncsOCksTXUodjEpKX0sTzEuybVjbXA9VW8oe3R5cGU6TzEsc2VsZWN0b3JzOltbIm1hdC1wcm9ncmVzcy1zcGlubmVyIl1dLGhvc3RBdHRyczpbInJvbGUiLCJwcm9ncmVzc2JhciIsInRhYmluZGV4IiwiLTEiLDEsIm1hdC1wcm9ncmVzcy1zcGlubmVyIl0saG9zdFZhcnM6MTAsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsyJmUmJihObSgiYXJpYS12YWx1ZW1pbiIsImRldGVybWluYXRlIj09PW4ubW9kZT8wOm51bGwpKCJhcmlhLXZhbHVlbWF4IiwiZGV0ZXJtaW5hdGUiPT09bi5tb2RlPzEwMDpudWxsKSgiYXJpYS12YWx1ZW5vdyIsImRldGVybWluYXRlIj09PW4ubW9kZT9uLnZhbHVlOm51bGwpKCJtb2RlIixuLm1vZGUpLG9mKCJ3aWR0aCIsbi5kaWFtZXRlciwicHgiKSgiaGVpZ2h0IixuLmRpYW1ldGVyLCJweCIpLGFmKCJfbWF0LWFuaW1hdGlvbi1ub29wYWJsZSIsbi5fbm9vcEFuaW1hdGlvbnMpKX0saW5wdXRzOntjb2xvcjoiY29sb3IiLG1vZGU6Im1vZGUiLGRpYW1ldGVyOiJkaWFtZXRlciIsc3Ryb2tlV2lkdGg6InN0cm9rZVdpZHRoIix2YWx1ZToidmFsdWUifSxleHBvcnRBczpbIm1hdFByb2dyZXNzU3Bpbm5lciJdLGZlYXR1cmVzOltnbV0sZGVjbHM6Myx2YXJzOjgsY29uc3RzOltbInByZXNlcnZlQXNwZWN0UmF0aW8iLCJ4TWlkWU1pZCBtZWV0IiwiZm9jdXNhYmxlIiwiZmFsc2UiLCJhcmlhLWhpZGRlbiIsInRydWUiLDMsIm5nU3dpdGNoIl0sWyJjeCIsIjUwJSIsImN5IiwiNTAlIiwzLCJhbmltYXRpb24tbmFtZSIsInN0cm9rZS1kYXNob2Zmc2V0Iiwic3Ryb2tlLWRhc2hhcnJheSIsInN0cm9rZS13aWR0aCIsNCwibmdTd2l0Y2hDYXNlIl0sWyJjeCIsIjUwJSIsImN5IiwiNTAlIiwzLCJzdHJva2UtZGFzaG9mZnNldCIsInN0cm9rZS1kYXNoYXJyYXkiLCJzdHJva2Utd2lkdGgiLDQsIm5nU3dpdGNoQ2FzZSJdLFsiY3giLCI1MCUiLCJjeSIsIjUwJSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoSGEoKSxPdSgwLCJzdmciLDApLFdtKDEsaDEsMSw5LCJjaXJjbGUiLDEpLFdtKDIsYjEsMSw3LCJjaXJjbGUiLDIpLFB1KCkpLDImZSYmKG9mKCJ3aWR0aCIsbi5kaWFtZXRlciwicHgiKSgiaGVpZ2h0IixuLmRpYW1ldGVyLCJweCIpLHZ1KCJuZ1N3aXRjaCIsImluZGV0ZXJtaW5hdGUiPT09bi5tb2RlKSxObSgidmlld0JveCIsbi5fZ2V0Vmlld0JveCgpKSxKYygxKSx2dSgibmdTd2l0Y2hDYXNlIiwhMCksSmMoMSksdnUoIm5nU3dpdGNoQ2FzZSIsITEpKX0sZGlyZWN0aXZlczpbY3YsZHZdLHN0eWxlczpbQzFdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLE8xLl9kaWFtZXRlcnM9bmV3IFdlYWtNYXAsTzEuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpjaH0se3R5cGU6Zkl9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbVUNdfV19LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbTnddfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOlt2MV19XX1dLE8xLnByb3BEZWNvcmF0b3JzPXtkaWFtZXRlcjpbe3R5cGU6eV99XSxzdHJva2VXaWR0aDpbe3R5cGU6eV99XSxtb2RlOlt7dHlwZTp5X31dLHZhbHVlOlt7dHlwZTp5X31dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKE8xLFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6Im1hdC1wcm9ncmVzcy1zcGlubmVyIixleHBvcnRBczoibWF0UHJvZ3Jlc3NTcGlubmVyIixob3N0Ontyb2xlOiJwcm9ncmVzc2JhciIsY2xhc3M6Im1hdC1wcm9ncmVzcy1zcGlubmVyIix0YWJpbmRleDoiLTEiLCJbY2xhc3MuX21hdC1hbmltYXRpb24tbm9vcGFibGVdIjoiX25vb3BBbmltYXRpb25zIiwiW3N0eWxlLndpZHRoLnB4XSI6ImRpYW1ldGVyIiwiW3N0eWxlLmhlaWdodC5weF0iOiJkaWFtZXRlciIsIlthdHRyLmFyaWEtdmFsdWVtaW5dIjonbW9kZSA9PT0gImRldGVybWluYXRlIiA/IDAgOiBudWxsJywiW2F0dHIuYXJpYS12YWx1ZW1heF0iOidtb2RlID09PSAiZGV0ZXJtaW5hdGUiID8gMTAwIDogbnVsbCcsIlthdHRyLmFyaWEtdmFsdWVub3ddIjonbW9kZSA9PT0gImRldGVybWluYXRlIiA/IHZhbHVlIDogbnVsbCcsIlthdHRyLm1vZGVdIjoibW9kZSJ9LGlucHV0czpbImNvbG9yIl0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgcHJlc2VydmVBc3BlY3RSYXRpbyBvZiB4TWlkWU1pZCBtZWV0IGFzIHRoZSBjZW50ZXIgb2YgdGhlIHZpZXdwb3J0IGlzIHRoZSBjaXJjbGVcJ3NcbiAgY2VudGVyLiBUaGUgY2VudGVyIG9mIHRoZSBjaXJjbGUgd2lsbCByZW1haW4gYXQgdGhlIGNlbnRlciBvZiB0aGUgbWF0LXByb2dyZXNzLXNwaW5uZXJcbiAgZWxlbWVudCBjb250YWluaW5nIHRoZSBTVkcuIGBmb2N1c2FibGU9ImZhbHNlImAgcHJldmVudHMgSUUgZnJvbSBhbGxvd2luZyB0aGUgdXNlciB0b1xuICB0YWIgaW50byB0aGUgU1ZHIGVsZW1lbnQuXG4tLVx4M2Vcblx4M2MhLS1cbiAgQWxsIGNoaWxkcmVuIG5lZWQgdG8gYmUgaGlkZGVuIGZvciBzY3JlZW4gcmVhZGVycyBpbiBvcmRlciB0byBzdXBwb3J0IENocm9tZVZveC5cbiAgTW9yZSBjb250ZXh0IGluIHRoZSBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvY29tcG9uZW50cy9pc3N1ZXMvMjIxNjUuXG4tLVx4M2VcbjxzdmdcbiAgW3N0eWxlLndpZHRoLnB4XT0iZGlhbWV0ZXIiXG4gIFtzdHlsZS5oZWlnaHQucHhdPSJkaWFtZXRlciJcbiAgW2F0dHIudmlld0JveF09Il9nZXRWaWV3Qm94KCkiXG4gIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIG1lZXQiXG4gIGZvY3VzYWJsZT0iZmFsc2UiXG4gIFtuZ1N3aXRjaF09Im1vZGUgPT09IFwnaW5kZXRlcm1pbmF0ZVwnIlxuICBhcmlhLWhpZGRlbj0idHJ1ZSI+XG5cbiAgXHgzYyEtLVxuICAgIFRlY2huaWNhbGx5IHdlIGNhbiByZXVzZSB0aGUgc2FtZSBgY2lyY2xlYCBlbGVtZW50LCBob3dldmVyIFNhZmFyaSBoYXMgYW4gaXNzdWUgdGhhdCBicmVha3NcbiAgICB0aGUgU1ZHIHJlbmRlcmluZyBpbiBkZXRlcm1pbmF0ZSBtb2RlLCBhZnRlciBzd2l0Y2hpbmcgYmV0d2VlbiBpbmRldGVybWluYXRlIGFuZCBkZXRlcm1pbmF0ZS5cbiAgICBVc2luZyBhIGRpZmZlcmVudCBlbGVtZW50IGF2b2lkcyB0aGUgaXNzdWUuIEFuIGFsdGVybmF0aXZlIHRvIHRoaXMgaXMgYWRkaW5nIGBkaXNwbGF5OiBub25lYFxuICAgIGZvciBhIHNwbGl0IHNlY29uZCBhbmQgdGhlbiByZW1vdmluZyBpdCB3aGVuIHN3aXRjaGluZyBiZXR3ZWVuIG1vZGVzLCBidXQgaXRcJ3MgaGFyZCB0byBrbm93XG4gICAgZm9yIGhvdyBsb25nIHRvIGhpZGUgdGhlIGVsZW1lbnQgYW5kIGl0IGNhbiBjYXVzZSB0aGUgVUkgdG8gYmxpbmsuXG4gIC0tXHgzZVxuICA8Y2lyY2xlXG4gICAgKm5nU3dpdGNoQ2FzZT0idHJ1ZSJcbiAgICBjeD0iNTAlIlxuICAgIGN5PSI1MCUiXG4gICAgW2F0dHIucl09Il9nZXRDaXJjbGVSYWRpdXMoKSJcbiAgICBbc3R5bGUuYW5pbWF0aW9uLW5hbWVdPSJcJ21hdC1wcm9ncmVzcy1zcGlubmVyLXN0cm9rZS1yb3RhdGUtXCcgKyBfc3Bpbm5lckFuaW1hdGlvbkxhYmVsIlxuICAgIFtzdHlsZS5zdHJva2UtZGFzaG9mZnNldC5weF09Il9nZXRTdHJva2VEYXNoT2Zmc2V0KCkiXG4gICAgW3N0eWxlLnN0cm9rZS1kYXNoYXJyYXkucHhdPSJfZ2V0U3Ryb2tlQ2lyY3VtZmVyZW5jZSgpIlxuICAgIFtzdHlsZS5zdHJva2Utd2lkdGguJV09Il9nZXRDaXJjbGVTdHJva2VXaWR0aCgpIj48L2NpcmNsZT5cblxuICA8Y2lyY2xlXG4gICAgKm5nU3dpdGNoQ2FzZT0iZmFsc2UiXG4gICAgY3g9IjUwJSJcbiAgICBjeT0iNTAlIlxuICAgIFthdHRyLnJdPSJfZ2V0Q2lyY2xlUmFkaXVzKCkiXG4gICAgW3N0eWxlLnN0cm9rZS1kYXNob2Zmc2V0LnB4XT0iX2dldFN0cm9rZURhc2hPZmZzZXQoKSJcbiAgICBbc3R5bGUuc3Ryb2tlLWRhc2hhcnJheS5weF09Il9nZXRTdHJva2VDaXJjdW1mZXJlbmNlKCkiXG4gICAgW3N0eWxlLnN0cm9rZS13aWR0aC4lXT0iX2dldENpcmNsZVN0cm9rZVdpZHRoKCkiPjwvY2lyY2xlPlxuPC9zdmc+XG4nLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2gsZW5jYXBzdWxhdGlvbjpQby5Ob25lLHN0eWxlczpbIi5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lcntkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbn0ubWF0LXByb2dyZXNzLXNwaW5uZXIgc3Zne3Bvc2l0aW9uOmFic29sdXRlO3RyYW5zZm9ybTpyb3RhdGUoLTkwZGVnKTt0b3A6MDtsZWZ0OjA7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXI7b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LXByb2dyZXNzLXNwaW5uZXIgY2lyY2xle2ZpbGw6dHJhbnNwYXJlbnQ7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXI7dHJhbnNpdGlvbjpzdHJva2UtZGFzaG9mZnNldCAyMjVtcyBsaW5lYXJ9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlLm1hdC1wcm9ncmVzcy1zcGlubmVyIGNpcmNsZXt0cmFuc2l0aW9uOm5vbmU7YW5pbWF0aW9uOm5vbmV9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXByb2dyZXNzLXNwaW5uZXIgY2lyY2xle3N0cm9rZTpjdXJyZW50Q29sb3I7c3Ryb2tlOkNhbnZhc1RleHR9Lm1hdC1wcm9ncmVzcy1zcGlubmVyLm1hdC1wcm9ncmVzcy1zcGlubmVyLWluZGV0ZXJtaW5hdGUtYW5pbWF0aW9uW21vZGU9aW5kZXRlcm1pbmF0ZV0gc3Zne2FuaW1hdGlvbjptYXQtcHJvZ3Jlc3Mtc3Bpbm5lci1saW5lYXItcm90YXRlIDIwMDBtcyBsaW5lYXIgaW5maW5pdGV9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlLm1hdC1wcm9ncmVzcy1zcGlubmVyLm1hdC1wcm9ncmVzcy1zcGlubmVyLWluZGV0ZXJtaW5hdGUtYW5pbWF0aW9uW21vZGU9aW5kZXRlcm1pbmF0ZV0gc3Zne3RyYW5zaXRpb246bm9uZTthbmltYXRpb246bm9uZX0ubWF0LXByb2dyZXNzLXNwaW5uZXIubWF0LXByb2dyZXNzLXNwaW5uZXItaW5kZXRlcm1pbmF0ZS1hbmltYXRpb25bbW9kZT1pbmRldGVybWluYXRlXSBjaXJjbGV7dHJhbnNpdGlvbi1wcm9wZXJ0eTpzdHJva2U7YW5pbWF0aW9uLWR1cmF0aW9uOjQwMDBtczthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLjM1LCAwLCAwLjI1LCAxKTthbmltYXRpb24taXRlcmF0aW9uLWNvdW50OmluZmluaXRlfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci1pbmRldGVybWluYXRlLWFuaW1hdGlvblttb2RlPWluZGV0ZXJtaW5hdGVdIGNpcmNsZXt0cmFuc2l0aW9uOm5vbmU7YW5pbWF0aW9uOm5vbmV9Lm1hdC1wcm9ncmVzcy1zcGlubmVyLm1hdC1wcm9ncmVzcy1zcGlubmVyLWluZGV0ZXJtaW5hdGUtZmFsbGJhY2stYW5pbWF0aW9uW21vZGU9aW5kZXRlcm1pbmF0ZV0gc3Zne2FuaW1hdGlvbjptYXQtcHJvZ3Jlc3Mtc3Bpbm5lci1zdHJva2Utcm90YXRlLWZhbGxiYWNrIDEwMDAwbXMgY3ViaWMtYmV6aWVyKDAuODcsIDAuMDMsIDAuMzMsIDEpIGluZmluaXRlfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci1pbmRldGVybWluYXRlLWZhbGxiYWNrLWFuaW1hdGlvblttb2RlPWluZGV0ZXJtaW5hdGVdIHN2Z3t0cmFuc2l0aW9uOm5vbmU7YW5pbWF0aW9uOm5vbmV9Lm1hdC1wcm9ncmVzcy1zcGlubmVyLm1hdC1wcm9ncmVzcy1zcGlubmVyLWluZGV0ZXJtaW5hdGUtZmFsbGJhY2stYW5pbWF0aW9uW21vZGU9aW5kZXRlcm1pbmF0ZV0gY2lyY2xle3RyYW5zaXRpb24tcHJvcGVydHk6c3Ryb2tlfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci1pbmRldGVybWluYXRlLWZhbGxiYWNrLWFuaW1hdGlvblttb2RlPWluZGV0ZXJtaW5hdGVdIGNpcmNsZXt0cmFuc2l0aW9uOm5vbmU7YW5pbWF0aW9uOm5vbmV9QGtleWZyYW1lcyBtYXQtcHJvZ3Jlc3Mtc3Bpbm5lci1saW5lYXItcm90YXRlezAle3RyYW5zZm9ybTpyb3RhdGUoMGRlZyl9MTAwJXt0cmFuc2Zvcm06cm90YXRlKDM2MGRlZyl9fUBrZXlmcmFtZXMgbWF0LXByb2dyZXNzLXNwaW5uZXItc3Ryb2tlLXJvdGF0ZS0xMDB7MCV7c3Ryb2tlLWRhc2hvZmZzZXQ6MjY4LjYwNjE3MTU3NXB4O3RyYW5zZm9ybTpyb3RhdGUoMCl9MTIuNSV7c3Ryb2tlLWRhc2hvZmZzZXQ6NTYuNTQ4NjY3N3B4O3RyYW5zZm9ybTpyb3RhdGUoMCl9MTIuNTAwMSV7c3Ryb2tlLWRhc2hvZmZzZXQ6NTYuNTQ4NjY3N3B4O3RyYW5zZm9ybTpyb3RhdGVYKDE4MGRlZykgcm90YXRlKDcyLjVkZWcpfTI1JXtzdHJva2UtZGFzaG9mZnNldDoyNjguNjA2MTcxNTc1cHg7dHJhbnNmb3JtOnJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoNzIuNWRlZyl9MjUuMDAwMSV7c3Ryb2tlLWRhc2hvZmZzZXQ6MjY4LjYwNjE3MTU3NXB4O3RyYW5zZm9ybTpyb3RhdGUoMjcwZGVnKX0zNy41JXtzdHJva2UtZGFzaG9mZnNldDo1Ni41NDg2Njc3cHg7dHJhbnNmb3JtOnJvdGF0ZSgyNzBkZWcpfTM3LjUwMDEle3N0cm9rZS1kYXNob2Zmc2V0OjU2LjU0ODY2NzdweDt0cmFuc2Zvcm06cm90YXRlWCgxODBkZWcpIHJvdGF0ZSgxNjEuNWRlZyl9NTAle3N0cm9rZS1kYXNob2Zmc2V0OjI2OC42MDYxNzE1NzVweDt0cmFuc2Zvcm06cm90YXRlWCgxODBkZWcpIHJvdGF0ZSgxNjEuNWRlZyl9NTAuMDAwMSV7c3Ryb2tlLWRhc2hvZmZzZXQ6MjY4LjYwNjE3MTU3NXB4O3RyYW5zZm9ybTpyb3RhdGUoMTgwZGVnKX02Mi41JXtzdHJva2UtZGFzaG9mZnNldDo1Ni41NDg2Njc3cHg7dHJhbnNmb3JtOnJvdGF0ZSgxODBkZWcpfTYyLjUwMDEle3N0cm9rZS1kYXNob2Zmc2V0OjU2LjU0ODY2NzdweDt0cmFuc2Zvcm06cm90YXRlWCgxODBkZWcpIHJvdGF0ZSgyNTEuNWRlZyl9NzUle3N0cm9rZS1kYXNob2Zmc2V0OjI2OC42MDYxNzE1NzVweDt0cmFuc2Zvcm06cm90YXRlWCgxODBkZWcpIHJvdGF0ZSgyNTEuNWRlZyl9NzUuMDAwMSV7c3Ryb2tlLWRhc2hvZmZzZXQ6MjY4LjYwNjE3MTU3NXB4O3RyYW5zZm9ybTpyb3RhdGUoOTBkZWcpfTg3LjUle3N0cm9rZS1kYXNob2Zmc2V0OjU2LjU0ODY2NzdweDt0cmFuc2Zvcm06cm90YXRlKDkwZGVnKX04Ny41MDAxJXtzdHJva2UtZGFzaG9mZnNldDo1Ni41NDg2Njc3cHg7dHJhbnNmb3JtOnJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoMzQxLjVkZWcpfTEwMCV7c3Ryb2tlLWRhc2hvZmZzZXQ6MjY4LjYwNjE3MTU3NXB4O3RyYW5zZm9ybTpyb3RhdGVYKDE4MGRlZykgcm90YXRlKDM0MS41ZGVnKX19QGtleWZyYW1lcyBtYXQtcHJvZ3Jlc3Mtc3Bpbm5lci1zdHJva2Utcm90YXRlLWZhbGxiYWNrezAle3RyYW5zZm9ybTpyb3RhdGUoMGRlZyl9MjUle3RyYW5zZm9ybTpyb3RhdGUoMTE3MGRlZyl9NTAle3RyYW5zZm9ybTpyb3RhdGUoMjM0MGRlZyl9NzUle3RyYW5zZm9ybTpyb3RhdGUoMzUxMGRlZyl9MTAwJXt0cmFuc2Zvcm06cm90YXRlKDQ2ODBkZWcpfX1cbiJdfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Y2h9LHt0eXBlOmZJfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W1VDXX1dfSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W053XX1dfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbdjFdfV19XX0pLHttb2RlOlt7dHlwZTp5X31dLGRpYW1ldGVyOlt7dHlwZTp5X31dLHN0cm9rZVdpZHRoOlt7dHlwZTp5X31dLHZhbHVlOlt7dHlwZTp5X31dfSk7Y2xhc3MgUDEgZXh0ZW5kcyBPMXtjb25zdHJ1Y3Rvcih0LGUsbixvLGkpe3N1cGVyKHQsZSxuLG8saSksdGhpcy5tb2RlPSJpbmRldGVybWluYXRlIn19UDEuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFAxKShNdShjaCksTXUoZkkpLE11KFVDLDgpLE11KE53LDgpLE11KHYxKSl9LFAxLsm1Y21wPVVvKHt0eXBlOlAxLHNlbGVjdG9yczpbWyJtYXQtc3Bpbm5lciJdXSxob3N0QXR0cnM6WyJyb2xlIiwicHJvZ3Jlc3NiYXIiLCJtb2RlIiwiaW5kZXRlcm1pbmF0ZSIsMSwibWF0LXNwaW5uZXIiLCJtYXQtcHJvZ3Jlc3Mtc3Bpbm5lciJdLGhvc3RWYXJzOjYsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsyJmUmJihvZigid2lkdGgiLG4uZGlhbWV0ZXIsInB4IikoImhlaWdodCIsbi5kaWFtZXRlciwicHgiKSxhZigiX21hdC1hbmltYXRpb24tbm9vcGFibGUiLG4uX25vb3BBbmltYXRpb25zKSl9LGlucHV0czp7Y29sb3I6ImNvbG9yIn0sZmVhdHVyZXM6W2dtXSxkZWNsczozLHZhcnM6OCxjb25zdHM6W1sicHJlc2VydmVBc3BlY3RSYXRpbyIsInhNaWRZTWlkIG1lZXQiLCJmb2N1c2FibGUiLCJmYWxzZSIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMywibmdTd2l0Y2giXSxbImN4IiwiNTAlIiwiY3kiLCI1MCUiLDMsImFuaW1hdGlvbi1uYW1lIiwic3Ryb2tlLWRhc2hvZmZzZXQiLCJzdHJva2UtZGFzaGFycmF5Iiwic3Ryb2tlLXdpZHRoIiw0LCJuZ1N3aXRjaENhc2UiXSxbImN4IiwiNTAlIiwiY3kiLCI1MCUiLDMsInN0cm9rZS1kYXNob2Zmc2V0Iiwic3Ryb2tlLWRhc2hhcnJheSIsInN0cm9rZS13aWR0aCIsNCwibmdTd2l0Y2hDYXNlIl0sWyJjeCIsIjUwJSIsImN5IiwiNTAlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihIYSgpLE91KDAsInN2ZyIsMCksV20oMSx5MSwxLDksImNpcmNsZSIsMSksV20oMixfMSwxLDcsImNpcmNsZSIsMiksUHUoKSksMiZlJiYob2YoIndpZHRoIixuLmRpYW1ldGVyLCJweCIpKCJoZWlnaHQiLG4uZGlhbWV0ZXIsInB4IiksdnUoIm5nU3dpdGNoIiwiaW5kZXRlcm1pbmF0ZSI9PT1uLm1vZGUpLE5tKCJ2aWV3Qm94IixuLl9nZXRWaWV3Qm94KCkpLEpjKDEpLHZ1KCJuZ1N3aXRjaENhc2UiLCEwKSxKYygxKSx2dSgibmdTd2l0Y2hDYXNlIiwhMSkpfSxkaXJlY3RpdmVzOltjdixkdl0sc3R5bGVzOltDMV0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksUDEuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpjaH0se3R5cGU6Zkl9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbVUNdfV19LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbTnddfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOlt2MV19XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoUDEsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoibWF0LXNwaW5uZXIiLGhvc3Q6e3JvbGU6InByb2dyZXNzYmFyIixtb2RlOiJpbmRldGVybWluYXRlIixjbGFzczoibWF0LXNwaW5uZXIgbWF0LXByb2dyZXNzLXNwaW5uZXIiLCJbY2xhc3MuX21hdC1hbmltYXRpb24tbm9vcGFibGVdIjoiX25vb3BBbmltYXRpb25zIiwiW3N0eWxlLndpZHRoLnB4XSI6ImRpYW1ldGVyIiwiW3N0eWxlLmhlaWdodC5weF0iOiJkaWFtZXRlciJ9LGlucHV0czpbImNvbG9yIl0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgcHJlc2VydmVBc3BlY3RSYXRpbyBvZiB4TWlkWU1pZCBtZWV0IGFzIHRoZSBjZW50ZXIgb2YgdGhlIHZpZXdwb3J0IGlzIHRoZSBjaXJjbGVcJ3NcbiAgY2VudGVyLiBUaGUgY2VudGVyIG9mIHRoZSBjaXJjbGUgd2lsbCByZW1haW4gYXQgdGhlIGNlbnRlciBvZiB0aGUgbWF0LXByb2dyZXNzLXNwaW5uZXJcbiAgZWxlbWVudCBjb250YWluaW5nIHRoZSBTVkcuIGBmb2N1c2FibGU9ImZhbHNlImAgcHJldmVudHMgSUUgZnJvbSBhbGxvd2luZyB0aGUgdXNlciB0b1xuICB0YWIgaW50byB0aGUgU1ZHIGVsZW1lbnQuXG4tLVx4M2Vcblx4M2MhLS1cbiAgQWxsIGNoaWxkcmVuIG5lZWQgdG8gYmUgaGlkZGVuIGZvciBzY3JlZW4gcmVhZGVycyBpbiBvcmRlciB0byBzdXBwb3J0IENocm9tZVZveC5cbiAgTW9yZSBjb250ZXh0IGluIHRoZSBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvY29tcG9uZW50cy9pc3N1ZXMvMjIxNjUuXG4tLVx4M2VcbjxzdmdcbiAgW3N0eWxlLndpZHRoLnB4XT0iZGlhbWV0ZXIiXG4gIFtzdHlsZS5oZWlnaHQucHhdPSJkaWFtZXRlciJcbiAgW2F0dHIudmlld0JveF09Il9nZXRWaWV3Qm94KCkiXG4gIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIG1lZXQiXG4gIGZvY3VzYWJsZT0iZmFsc2UiXG4gIFtuZ1N3aXRjaF09Im1vZGUgPT09IFwnaW5kZXRlcm1pbmF0ZVwnIlxuICBhcmlhLWhpZGRlbj0idHJ1ZSI+XG5cbiAgXHgzYyEtLVxuICAgIFRlY2huaWNhbGx5IHdlIGNhbiByZXVzZSB0aGUgc2FtZSBgY2lyY2xlYCBlbGVtZW50LCBob3dldmVyIFNhZmFyaSBoYXMgYW4gaXNzdWUgdGhhdCBicmVha3NcbiAgICB0aGUgU1ZHIHJlbmRlcmluZyBpbiBkZXRlcm1pbmF0ZSBtb2RlLCBhZnRlciBzd2l0Y2hpbmcgYmV0d2VlbiBpbmRldGVybWluYXRlIGFuZCBkZXRlcm1pbmF0ZS5cbiAgICBVc2luZyBhIGRpZmZlcmVudCBlbGVtZW50IGF2b2lkcyB0aGUgaXNzdWUuIEFuIGFsdGVybmF0aXZlIHRvIHRoaXMgaXMgYWRkaW5nIGBkaXNwbGF5OiBub25lYFxuICAgIGZvciBhIHNwbGl0IHNlY29uZCBhbmQgdGhlbiByZW1vdmluZyBpdCB3aGVuIHN3aXRjaGluZyBiZXR3ZWVuIG1vZGVzLCBidXQgaXRcJ3MgaGFyZCB0byBrbm93XG4gICAgZm9yIGhvdyBsb25nIHRvIGhpZGUgdGhlIGVsZW1lbnQgYW5kIGl0IGNhbiBjYXVzZSB0aGUgVUkgdG8gYmxpbmsuXG4gIC0tXHgzZVxuICA8Y2lyY2xlXG4gICAgKm5nU3dpdGNoQ2FzZT0idHJ1ZSJcbiAgICBjeD0iNTAlIlxuICAgIGN5PSI1MCUiXG4gICAgW2F0dHIucl09Il9nZXRDaXJjbGVSYWRpdXMoKSJcbiAgICBbc3R5bGUuYW5pbWF0aW9uLW5hbWVdPSJcJ21hdC1wcm9ncmVzcy1zcGlubmVyLXN0cm9rZS1yb3RhdGUtXCcgKyBfc3Bpbm5lckFuaW1hdGlvbkxhYmVsIlxuICAgIFtzdHlsZS5zdHJva2UtZGFzaG9mZnNldC5weF09Il9nZXRTdHJva2VEYXNoT2Zmc2V0KCkiXG4gICAgW3N0eWxlLnN0cm9rZS1kYXNoYXJyYXkucHhdPSJfZ2V0U3Ryb2tlQ2lyY3VtZmVyZW5jZSgpIlxuICAgIFtzdHlsZS5zdHJva2Utd2lkdGguJV09Il9nZXRDaXJjbGVTdHJva2VXaWR0aCgpIj48L2NpcmNsZT5cblxuICA8Y2lyY2xlXG4gICAgKm5nU3dpdGNoQ2FzZT0iZmFsc2UiXG4gICAgY3g9IjUwJSJcbiAgICBjeT0iNTAlIlxuICAgIFthdHRyLnJdPSJfZ2V0Q2lyY2xlUmFkaXVzKCkiXG4gICAgW3N0eWxlLnN0cm9rZS1kYXNob2Zmc2V0LnB4XT0iX2dldFN0cm9rZURhc2hPZmZzZXQoKSJcbiAgICBbc3R5bGUuc3Ryb2tlLWRhc2hhcnJheS5weF09Il9nZXRTdHJva2VDaXJjdW1mZXJlbmNlKCkiXG4gICAgW3N0eWxlLnN0cm9rZS13aWR0aC4lXT0iX2dldENpcmNsZVN0cm9rZVdpZHRoKCkiPjwvY2lyY2xlPlxuPC9zdmc+XG4nLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2gsZW5jYXBzdWxhdGlvbjpQby5Ob25lLHN0eWxlczpbIi5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lcntkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbn0ubWF0LXByb2dyZXNzLXNwaW5uZXIgc3Zne3Bvc2l0aW9uOmFic29sdXRlO3RyYW5zZm9ybTpyb3RhdGUoLTkwZGVnKTt0b3A6MDtsZWZ0OjA7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXI7b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LXByb2dyZXNzLXNwaW5uZXIgY2lyY2xle2ZpbGw6dHJhbnNwYXJlbnQ7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXI7dHJhbnNpdGlvbjpzdHJva2UtZGFzaG9mZnNldCAyMjVtcyBsaW5lYXJ9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlLm1hdC1wcm9ncmVzcy1zcGlubmVyIGNpcmNsZXt0cmFuc2l0aW9uOm5vbmU7YW5pbWF0aW9uOm5vbmV9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXByb2dyZXNzLXNwaW5uZXIgY2lyY2xle3N0cm9rZTpjdXJyZW50Q29sb3I7c3Ryb2tlOkNhbnZhc1RleHR9Lm1hdC1wcm9ncmVzcy1zcGlubmVyLm1hdC1wcm9ncmVzcy1zcGlubmVyLWluZGV0ZXJtaW5hdGUtYW5pbWF0aW9uW21vZGU9aW5kZXRlcm1pbmF0ZV0gc3Zne2FuaW1hdGlvbjptYXQtcHJvZ3Jlc3Mtc3Bpbm5lci1saW5lYXItcm90YXRlIDIwMDBtcyBsaW5lYXIgaW5maW5pdGV9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlLm1hdC1wcm9ncmVzcy1zcGlubmVyLm1hdC1wcm9ncmVzcy1zcGlubmVyLWluZGV0ZXJtaW5hdGUtYW5pbWF0aW9uW21vZGU9aW5kZXRlcm1pbmF0ZV0gc3Zne3RyYW5zaXRpb246bm9uZTthbmltYXRpb246bm9uZX0ubWF0LXByb2dyZXNzLXNwaW5uZXIubWF0LXByb2dyZXNzLXNwaW5uZXItaW5kZXRlcm1pbmF0ZS1hbmltYXRpb25bbW9kZT1pbmRldGVybWluYXRlXSBjaXJjbGV7dHJhbnNpdGlvbi1wcm9wZXJ0eTpzdHJva2U7YW5pbWF0aW9uLWR1cmF0aW9uOjQwMDBtczthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLjM1LCAwLCAwLjI1LCAxKTthbmltYXRpb24taXRlcmF0aW9uLWNvdW50OmluZmluaXRlfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci1pbmRldGVybWluYXRlLWFuaW1hdGlvblttb2RlPWluZGV0ZXJtaW5hdGVdIGNpcmNsZXt0cmFuc2l0aW9uOm5vbmU7YW5pbWF0aW9uOm5vbmV9Lm1hdC1wcm9ncmVzcy1zcGlubmVyLm1hdC1wcm9ncmVzcy1zcGlubmVyLWluZGV0ZXJtaW5hdGUtZmFsbGJhY2stYW5pbWF0aW9uW21vZGU9aW5kZXRlcm1pbmF0ZV0gc3Zne2FuaW1hdGlvbjptYXQtcHJvZ3Jlc3Mtc3Bpbm5lci1zdHJva2Utcm90YXRlLWZhbGxiYWNrIDEwMDAwbXMgY3ViaWMtYmV6aWVyKDAuODcsIDAuMDMsIDAuMzMsIDEpIGluZmluaXRlfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci1pbmRldGVybWluYXRlLWZhbGxiYWNrLWFuaW1hdGlvblttb2RlPWluZGV0ZXJtaW5hdGVdIHN2Z3t0cmFuc2l0aW9uOm5vbmU7YW5pbWF0aW9uOm5vbmV9Lm1hdC1wcm9ncmVzcy1zcGlubmVyLm1hdC1wcm9ncmVzcy1zcGlubmVyLWluZGV0ZXJtaW5hdGUtZmFsbGJhY2stYW5pbWF0aW9uW21vZGU9aW5kZXRlcm1pbmF0ZV0gY2lyY2xle3RyYW5zaXRpb24tcHJvcGVydHk6c3Ryb2tlfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci1pbmRldGVybWluYXRlLWZhbGxiYWNrLWFuaW1hdGlvblttb2RlPWluZGV0ZXJtaW5hdGVdIGNpcmNsZXt0cmFuc2l0aW9uOm5vbmU7YW5pbWF0aW9uOm5vbmV9QGtleWZyYW1lcyBtYXQtcHJvZ3Jlc3Mtc3Bpbm5lci1saW5lYXItcm90YXRlezAle3RyYW5zZm9ybTpyb3RhdGUoMGRlZyl9MTAwJXt0cmFuc2Zvcm06cm90YXRlKDM2MGRlZyl9fUBrZXlmcmFtZXMgbWF0LXByb2dyZXNzLXNwaW5uZXItc3Ryb2tlLXJvdGF0ZS0xMDB7MCV7c3Ryb2tlLWRhc2hvZmZzZXQ6MjY4LjYwNjE3MTU3NXB4O3RyYW5zZm9ybTpyb3RhdGUoMCl9MTIuNSV7c3Ryb2tlLWRhc2hvZmZzZXQ6NTYuNTQ4NjY3N3B4O3RyYW5zZm9ybTpyb3RhdGUoMCl9MTIuNTAwMSV7c3Ryb2tlLWRhc2hvZmZzZXQ6NTYuNTQ4NjY3N3B4O3RyYW5zZm9ybTpyb3RhdGVYKDE4MGRlZykgcm90YXRlKDcyLjVkZWcpfTI1JXtzdHJva2UtZGFzaG9mZnNldDoyNjguNjA2MTcxNTc1cHg7dHJhbnNmb3JtOnJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoNzIuNWRlZyl9MjUuMDAwMSV7c3Ryb2tlLWRhc2hvZmZzZXQ6MjY4LjYwNjE3MTU3NXB4O3RyYW5zZm9ybTpyb3RhdGUoMjcwZGVnKX0zNy41JXtzdHJva2UtZGFzaG9mZnNldDo1Ni41NDg2Njc3cHg7dHJhbnNmb3JtOnJvdGF0ZSgyNzBkZWcpfTM3LjUwMDEle3N0cm9rZS1kYXNob2Zmc2V0OjU2LjU0ODY2NzdweDt0cmFuc2Zvcm06cm90YXRlWCgxODBkZWcpIHJvdGF0ZSgxNjEuNWRlZyl9NTAle3N0cm9rZS1kYXNob2Zmc2V0OjI2OC42MDYxNzE1NzVweDt0cmFuc2Zvcm06cm90YXRlWCgxODBkZWcpIHJvdGF0ZSgxNjEuNWRlZyl9NTAuMDAwMSV7c3Ryb2tlLWRhc2hvZmZzZXQ6MjY4LjYwNjE3MTU3NXB4O3RyYW5zZm9ybTpyb3RhdGUoMTgwZGVnKX02Mi41JXtzdHJva2UtZGFzaG9mZnNldDo1Ni41NDg2Njc3cHg7dHJhbnNmb3JtOnJvdGF0ZSgxODBkZWcpfTYyLjUwMDEle3N0cm9rZS1kYXNob2Zmc2V0OjU2LjU0ODY2NzdweDt0cmFuc2Zvcm06cm90YXRlWCgxODBkZWcpIHJvdGF0ZSgyNTEuNWRlZyl9NzUle3N0cm9rZS1kYXNob2Zmc2V0OjI2OC42MDYxNzE1NzVweDt0cmFuc2Zvcm06cm90YXRlWCgxODBkZWcpIHJvdGF0ZSgyNTEuNWRlZyl9NzUuMDAwMSV7c3Ryb2tlLWRhc2hvZmZzZXQ6MjY4LjYwNjE3MTU3NXB4O3RyYW5zZm9ybTpyb3RhdGUoOTBkZWcpfTg3LjUle3N0cm9rZS1kYXNob2Zmc2V0OjU2LjU0ODY2NzdweDt0cmFuc2Zvcm06cm90YXRlKDkwZGVnKX04Ny41MDAxJXtzdHJva2UtZGFzaG9mZnNldDo1Ni41NDg2Njc3cHg7dHJhbnNmb3JtOnJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoMzQxLjVkZWcpfTEwMCV7c3Ryb2tlLWRhc2hvZmZzZXQ6MjY4LjYwNjE3MTU3NXB4O3RyYW5zZm9ybTpyb3RhdGVYKDE4MGRlZykgcm90YXRlKDM0MS41ZGVnKX19QGtleWZyYW1lcyBtYXQtcHJvZ3Jlc3Mtc3Bpbm5lci1zdHJva2Utcm90YXRlLWZhbGxiYWNrezAle3RyYW5zZm9ybTpyb3RhdGUoMGRlZyl9MjUle3RyYW5zZm9ybTpyb3RhdGUoMTE3MGRlZyl9NTAle3RyYW5zZm9ybTpyb3RhdGUoMjM0MGRlZyl9NzUle3RyYW5zZm9ybTpyb3RhdGUoMzUxMGRlZyl9MTAwJXt0cmFuc2Zvcm06cm90YXRlKDQ2ODBkZWcpfX1cbiJdfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Y2h9LHt0eXBlOmZJfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W1VDXX1dfSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W053XX1dfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbdjFdfV19XX0pLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3MgdzF7fWZ1bmN0aW9uIGsxKHQsZSl7aWYoMSZ0JiYoa3UoMCksT3UoMSwibGkiLDE4KSxNZigyKSxQdSgpLFN1KCkpLDImdCl7Y29uc3QgdD1lLiRpbXBsaWNpdDtKYygxKSx2dSgidGl0bGUiLHQubmFtZSksSmMoMSksdmYodC5uYW1lKX19ZnVuY3Rpb24gUzEodCxlKXtpZigxJnQmJihPdSgwLCJsaSIsMTkpLE91KDEsImVtIiksTWYoMiksT2IoMywibnVtYmVyIiksUHUoKSxQdSgpKSwyJnQpe2NvbnN0IHQ9THUoKS4kaW1wbGljaXQ7SmMoMikseGYoImFuZCAiLFBiKDMsMSx0LnJ1bnMubGVuZ3RoLTUpLCIgbW9yZSIpfX1mdW5jdGlvbiBEMSh0LGUpezEmdCYmKE91KDAsImxpIiwyMCksT3UoMSwiZW0iKSxNZigyLCJObyBydW5zIGFyZSBpbiB0aGUgZ3JvdXAiKSxQdSgpLFB1KCkpfXcxLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHx3MSl9LHcxLsm1bW9kPVpvKHt0eXBlOncxfSksdzEuybVpbmo9Y28oe2ltcG9ydHM6W1tUeixCdl0sVHpdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyh3MSx7ZGVjbGFyYXRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuW08xLFAxXX0saW1wb3J0czpmdW5jdGlvbigpe3JldHVybltUeixCdl19LGV4cG9ydHM6ZnVuY3Rpb24oKXtyZXR1cm5bTzEsUDEsVHpdfX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIodzEsW3t0eXBlOmtfLGFyZ3M6W3tpbXBvcnRzOltUeixCdl0sZXhwb3J0czpbTzEsUDEsVHpdLGRlY2xhcmF0aW9uczpbTzEsUDFdfV19XSxudWxsLG51bGwpO2NvbnN0IEUxPWZ1bmN0aW9uKHQpe3JldHVybntib3JkZXJDb2xvcjp0fX0sQTE9ZnVuY3Rpb24odCl7cmV0dXJue2JhY2tncm91bmRDb2xvcjp0fX07ZnVuY3Rpb24gUjEodCxlKXtpZigxJnQmJihPdSgwLCJ1bCIsMTIpLE91KDEsImxpIiksT3UoMiwibGFiZWwiKSx3dSgzLCJzcGFuIiwxMyksT3UoNCwiY29kZSIsMTQpLE1mKDUpLFB1KCksUHUoKSxPdSg2LCJ1bCIpLFdtKDcsazEsMywyLCJuZy1jb250YWluZXIiLDE1KSxPYig4LCJzbGljZSIpLFdtKDksUzEsNCwzLCJsaSIsMTYpLFdtKDEwLEQxLDMsMCwibGkiLDE3KSxQdSgpLFB1KCksUHUoKSksMiZ0KXtjb25zdCB0PWUuJGltcGxpY2l0O3Z1KCJuZ1N0eWxlIixnYigxMSxFMSx0LmNvbG9yKSksSmMoMyksdnUoIm5nU3R5bGUiLGdiKDEzLEExLHQuY29sb3IpKSxKYygxKSx2dSgidGl0bGUiLHQuZ3JvdXBJZCksSmMoMSksdmYodC5ncm91cElkKSxKYygyKSx2dSgibmdGb3JPZiIsa2IoOCw3LHQucnVucywwLDUpKSxKYygyKSx2dSgibmdJZiIsdC5ydW5zLmxlbmd0aD41KSxKYygxKSx2dSgibmdJZiIsMD09PXQucnVucy5sZW5ndGgpfX1mdW5jdGlvbiBUMSh0LGUpe2lmKDEmdCYmKE91KDAsImRpdiIsOSksT3UoMSwiaDQiKSxNZigyLCJDb2xvciBncm91cCBwcmV2aWV3IiksUHUoKSxPdSgzLCJkaXYiLDEwKSxXbSg0LFIxLDExLDE1LCJ1bCIsMTEpLFB1KCksUHUoKSksMiZ0KXtjb25zdCB0PUx1KCk7SmMoNCksdnUoIm5nRm9yT2YiLHQuY29sb3JSdW5QYWlyTGlzdCl9fWNsYXNzIE4xe2NvbnN0cnVjdG9yKHQpe3RoaXMuZGlhbG9nUmVmPXQsdGhpcy5vblNhdmU9bmV3IEFiLHRoaXMucmVnZXhJbnB1dE9uQ2hhbmdlPW5ldyBBYn1vbkVudGVyKHQpe3RoaXMub25TYXZlQ2xpY2sodCksdGhpcy5kaWFsb2dSZWYuY2xvc2UoKX1vblNhdmVDbGljayh0KXt0aGlzLm9uU2F2ZS5lbWl0KHQpfWZpbGxFeGFtcGxlKHQpe3RoaXMucmVnZXhTdHJpbmc9dH1yZWdleElucHV0Q2hhbmdlKHQpe3RoaXMucmVnZXhJbnB1dE9uQ2hhbmdlLmVtaXQodCl9fU4xLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxOMSkoTXUoRFcpKX0sTjEuybVjbXA9VW8oe3R5cGU6TjEsc2VsZWN0b3JzOltbInJlZ2V4LWVkaXQtZGlhbG9nLWNvbXBvbmVudCJdXSxpbnB1dHM6e3JlZ2V4U3RyaW5nOiJyZWdleFN0cmluZyIsY29sb3JSdW5QYWlyTGlzdDoiY29sb3JSdW5QYWlyTGlzdCJ9LG91dHB1dHM6e29uU2F2ZToib25TYXZlIixyZWdleElucHV0T25DaGFuZ2U6InJlZ2V4SW5wdXRPbkNoYW5nZSJ9LGRlY2xzOjI5LHZhcnM6Mixjb25zdHM6ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gdD0idW5kZWZpbmVkIiE9dHlwZW9mIG5nSTE4bkNsb3N1cmVNb2RlJiZuZ0kxOG5DbG9zdXJlTW9kZT9nb29nLmdldE1zZygiQ29sb3IgUnVucyBieSBSZWdleCBRdWVyeSIpOiRsb2NhbGl6ZWA6Q29sb3IgUnVucyBieSBSZWdleCBRdWVyeeKQnzE1ZWQ5ZjZmZDJkNDkwNmE0ODAzZmMxMjU1ZGUzYzVkYjJjNTY1MzDikJ85MDg4OTg1MTEzOTYwMzEyODA4OkNvbG9yIFJ1bnMgYnkgUmVnZXggUXVlcnlgLFtbIm1hdC1kaWFsb2ctdGl0bGUiLCIiXSxbIm1hdElucHV0IiwiIiwiYXJpYS1sYWJlbCIsdCwiY2RrRm9jdXNJbml0aWFsIiwiIiwzLCJ2YWx1ZSIsImtleWRvd24uZW50ZXIiLCJpbnB1dCJdLFsicmVnZXhTdHJpbmdJbnB1dCIsIiJdLFsxLCJleGFtcGxlLWRldGFpbHMiXSxbMywiY2xpY2siXSxbImNsYXNzIiwiZ3JvdXAtY29udGFpbmVyIiw0LCJuZ0lmIl0sWyJtYXQtZGlhbG9nLWFjdGlvbnMiLCIiLCJhbGlnbiIsImVuZCJdLFsibWF0LWJ1dHRvbiIsIiIsIm1hdC1kaWFsb2ctY2xvc2UiLCIiXSxbIm1hdC1yYWlzZWQtYnV0dG9uIiwiIiwiY29sb3IiLCJwcmltYXJ5IiwibWF0LWRpYWxvZy1jbG9zZSIsIiIsMywiY2xpY2siXSxbMSwiZ3JvdXAtY29udGFpbmVyIl0sWzEsImdyb3VwaW5nLXByZXZpZXciXSxbImNsYXNzIiwiZ3JvdXAiLDMsIm5nU3R5bGUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJncm91cCIsMywibmdTdHlsZSJdLFsxLCJjb2xvci1zd2F0Y2giLDMsIm5nU3R5bGUiXSxbIm5hbWUiLCJncm91cC1pZCIsMywidGl0bGUiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbGFzcyIsIm1vcmUiLDQsIm5nSWYiXSxbImNsYXNzIiwibm8tbWF0Y2giLDQsIm5nSWYiXSxbMywidGl0bGUiXSxbMSwibW9yZSJdLFsxLCJuby1tYXRjaCJdXX0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pe2lmKDEmZSl7Y29uc3QgdD1FdSgpO091KDAsImgxIiwwKSxNZigxLCJDb2xvciBydW5zIGJ5IHJlZ2V4IiksUHUoKSxPdSgyLCJtYXQtZGlhbG9nLWNvbnRlbnQiKSxPdSgzLCJwIiksTWYoNCwiRW50ZXIgYSByZWdleCB3aXRoIGNhcHR1cmluZyBncm91cHMgdG8gbWF0Y2ggYWdhaW5zdCBydW4gbmFtZXM6IiksUHUoKSxPdSg1LCJtYXQtZm9ybS1maWVsZCIpLE91KDYsImlucHV0IiwxLDIpLE51KCJrZXlkb3duLmVudGVyIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vbkVudGVyKGUudGFyZ2V0LnZhbHVlKX0pKSgiaW5wdXQiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLnJlZ2V4SW5wdXRDaGFuZ2UoZS50YXJnZXQudmFsdWUpfSkpLFB1KCksUHUoKSxQdSgpLE91KDgsImRpdiIsMyksT3UoOSwicCIpLE1mKDEwLCcgRWFjaCBtYXRjaGluZyBydW4gd2lsbCBiZSBhc3NpZ25lZCBhIGNvbG9yIGJhc2VkIG9uIHRoZSAia2V5IiBmb3JtZWQgYnkgaXRzIG1hdGNoZXMgdG8gdGhlIGNhcHR1cmluZyBncm91cHMuICcpLHd1KDExLCJiciIpLE91KDEyLCJidXR0b24iLDQpLE51KCJjbGljayIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5maWxsRXhhbXBsZSgiKHRyYWlufGV2YWwpIil9KSksTWYoMTMsIiBUcnkgIiksT3UoMTQsImNvZGUiKSxNZigxNSwiKHRyYWlufGV2YWwpIiksUHUoKSxQdSgpLE1mKDE2LCIgdG8gYXNzaWduIGFsbCBydW5zIGNvbnRhaW5pbmcgIiksT3UoMTcsImNvZGUiKSxNZigxOCwidHJhaW4iKSxQdSgpLE1mKDE5LCIgdG8gb25lIGNvbG9yIGFuZCBhbGwgcnVucyBjb250YWluaW5nICIpLE91KDIwLCJjb2RlIiksTWYoMjEsImV2YWwiKSxQdSgpLE1mKDIyLCIgdG8gYW5vdGhlciBjb2xvci4gIiksUHUoKSxQdSgpLFdtKDIzLFQxLDUsMSwiZGl2Iiw1KSxPdSgyNCwiZGl2Iiw2KSxPdSgyNSwiYnV0dG9uIiw3KSxNZigyNiwiQ2FuY2VsIiksUHUoKSxPdSgyNywiYnV0dG9uIiw4KSxOdSgiY2xpY2siLChmdW5jdGlvbiBlKCl7cmEodCk7Y29uc3Qgbz1HbSg3KTtyZXR1cm4gbi5vblNhdmVDbGljayhvLnZhbHVlKX0pKSxNZigyOCwiIFNhdmUgIiksUHUoKSxQdSgpfTImZSYmKEpjKDYpLFV1KCJ2YWx1ZSIsbi5yZWdleFN0cmluZyksSmMoMTcpLHZ1KCJuZ0lmIixuLmNvbG9yUnVuUGFpckxpc3QubGVuZ3RoKSl9LGRpcmVjdGl2ZXM6W0JXLFZXLF9WLEVZLGF2LGpXLE5ILExXLG92LGd2XSxwaXBlczpbRnYsVHZdLHN0eWxlczpbJy5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHh9Lm1hdC1oMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaGVhZGxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTVweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZ1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjA1ZW07bWFyZ2luOjAgMCA1NnB4fS5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAwNWVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXJhaXNlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdHJva2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmxhdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZhYltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbWluaS1mYWJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4fS5tYXQtY2FyZC1zdWJ0aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGVja2JveC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvb3Rlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgdHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIzZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LjU0MTY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2NjY2NjY3ZW0pfUBtZWRpYSBwcmludHsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjJlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouMjVlbSAwIC43NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxZW0gMCAxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMiksIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi0wLjA2MjVlbX0ubWF0LW1lbnUtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci12ZXJ0aWNhbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGFiLWxpbmtbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MH0ubWF0LXRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5Om5vbmV9LmNkay12aXN1YWxseS1oaWRkZW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjZ9LmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV0sIC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3hbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2tbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHt9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7fS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOi13ZWJraXQtYXV0b2ZpbGwpe2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZVtfbmdjb250ZW50LSVDT01QJV17cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fS5tYXQtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfS5leGFtcGxlLWRldGFpbHNbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O3BhZGRpbmc6MDtib3JkZXI6bm9uZTtjdXJzb3I6cG9pbnRlcjt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO2NvbG9yOiMxOTc2ZDJ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmV4YW1wbGUtZGV0YWlsc1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZXhhbXBsZS1kZXRhaWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzQyYTVmNX0uZXhhbXBsZS1kZXRhaWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV06dmlzaXRlZHtjb2xvcjojN2IxZmEyfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5leGFtcGxlLWRldGFpbHNbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXTp2aXNpdGVkLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZXhhbXBsZS1kZXRhaWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV06dmlzaXRlZHtjb2xvcjojYmE2OGM4fS5ncm91cC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbjoxMHB4IDB9Lmdyb3VwLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLWJvdHRvbToxMHB4fS5ncm91cGluZy1wcmV2aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MXB4IHNvbGlkICNlYmViZWI7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtkaXNwbGF5OmdyaWQ7ZmxleC13cmFwOndyYXA7Z2FwOjEwcHg7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdCgyLCBtaW5tYXgoNTAlLCAxZnIpKTttYXgtaGVpZ2h0OjUwdmg7b3ZlcmZsb3cteTphdXRvO3BhZGRpbmc6MjBweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXBpbmctcHJldmlld1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cGluZy1wcmV2aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MXB4IHNvbGlkICM1NTV9LmNvbG9yLXN3YXRjaFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJhZGl1czo1MCU7Ym94LXNoYWRvdzowIDAgMnB4ICMwMDA7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjE1cHg7d2lkdGg6MTVweH11bFtfbmdjb250ZW50LSVDT01QJV17bGlzdC1zdHlsZS10eXBlOm5vbmU7cGFkZGluZzowfS5ncm91cFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjFweCBzb2xpZCAjZWJlYmViO2JvcmRlci1yYWRpdXM6M3B4O21hcmdpbjowO3BhZGRpbmc6MTBweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXBbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjoxcHggc29saWQgIzU1NX0uZ3JvdXBbX25nY29udGVudC0lQ09NUCVdICAgbGFiZWxbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6Z3JpZDtnYXA6MTBweDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6bWF4LWNvbnRlbnQgYXV0bztwYWRkaW5nOjVweCAwfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cFtfbmdjb250ZW50LSVDT01QJV0gICBsYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cFtfbmdjb250ZW50LSVDT01QJV0gICBsYWJlbFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX0uZ3JvdXBbX25nY29udGVudC0lQ09NUCVdICAgbGFiZWxbX25nY29udGVudC0lQ09NUCVdICAgLmdyb3VwLWlkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6Ljk1ZW07b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwfS5ncm91cFtfbmdjb250ZW50LSVDT01QJV0gICB1bFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOi45ZW19Lmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHVsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGxpW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXB9Lmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tb3JlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uby1tYXRjaFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTttYXJnaW4tdG9wOjVweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXBbX25nY29udGVudC0lQ09NUCVdICAgLm1vcmVbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXBbX25nY29udGVudC0lQ09NUCVdICAgLm1vcmVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cFtfbmdjb250ZW50LSVDT01QJV0gICAubm8tbWF0Y2hbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXBbX25nY29udGVudC0lQ09NUCVdICAgLm5vLW1hdGNoW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoTjEsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoicmVnZXgtZWRpdC1kaWFsb2ctY29tcG9uZW50Iix0ZW1wbGF0ZVVybDoicmVnZXhfZWRpdF9kaWFsb2cubmcuaHRtbCIsc3R5bGVVcmxzOlsicmVnZXhfZWRpdF9kaWFsb2dfY29tcG9uZW50LmNzcyJdLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2h9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpEV31dfSkse3JlZ2V4U3RyaW5nOlt7dHlwZTp5X31dLGNvbG9yUnVuUGFpckxpc3Q6W3t0eXBlOnlffV0sb25TYXZlOlt7dHlwZTpfX31dLHJlZ2V4SW5wdXRPbkNoYW5nZTpbe3R5cGU6X199XX0pO2NsYXNzIEkxe2NvbnN0cnVjdG9yKHQsZSxuKXt0aGlzLnN0b3JlPXQsdGhpcy5kaWFsb2dSZWY9ZSx0aGlzLnRlbnRhdGl2ZVJlZ2V4U3RyaW5nJD1uZXcgeCx0aGlzLmdyb3VwQnlSZWdleFN0cmluZyQ9RnQoKCgpPT5XdCh0aGlzLnN0b3JlLnNlbGVjdChNTikucGlwZShOZSgxKSksdGhpcy50ZW50YXRpdmVSZWdleFN0cmluZyQpKSkucGlwZShjbigiIikpLHRoaXMuY29sb3JSdW5QYWlyTGlzdCQ9RnQoKCgpPT50aGlzLmdyb3VwQnlSZWdleFN0cmluZyQucGlwZShkZSg1MDApLGNlKHRoaXMuYWxsUnVucyQsdGhpcy5ydW5JZFRvRWlkJCksaHQoKChbdCxlLG5dKT0+e3ZhciBvO2NvbnN0IGk9b04oe2tleTplTi5SRUdFWCxyZWdleFN0cmluZzp0fSxlLG4pLGE9bmV3IE1hcCxyPVtdO2Zvcihjb25zdFt0LGVdb2YgT2JqZWN0LmVudHJpZXMoaS5tYXRjaGVzKSl7Y29uc3Qgbj1udWxsIT09KG89YS5nZXQodCkpJiZ2b2lkIDAhPT1vP286a05bYS5zaXplJWtOLmxlbmd0aF07YS5zZXQodCxuKSxyLnB1c2goe2dyb3VwSWQ6dCxjb2xvcjpuLHJ1bnM6ZX0pfXJldHVybiByfSkpKSkpLnBpcGUoY24oW10pKSx0aGlzLmV4cGVyaW1lbnRJZHM9bi5leHBlcmltZW50SWRzLHRoaXMucnVuSWRUb0VpZCQ9RHQodGhpcy5leHBlcmltZW50SWRzLm1hcCgodD0+dGhpcy5zdG9yZS5zZWxlY3QoZE4se2V4cGVyaW1lbnRJZDp0fSkucGlwZShodCgoZT0+KHtleHBlcmltZW50SWQ6dCxydW5JZHM6ZX0pKSkpKSkpLnBpcGUoaHQoKHQ9Pntjb25zdCBlPXt9O2Zvcihjb25zdHtydW5JZHM6bixleHBlcmltZW50SWQ6b31vZiB0KWZvcihjb25zdCB0IG9mIG4pZVt0XT1vO3JldHVybiBlfSkpKSx0aGlzLmFsbFJ1bnMkPUR0KHRoaXMuZXhwZXJpbWVudElkcy5tYXAoKHQ9PnRoaXMuc3RvcmUuc2VsZWN0KGNOLHtleHBlcmltZW50SWQ6dH0pKSkpLnBpcGUoaHQoKHQ9PnQuZmxhdCgpKSkpfW9uUmVnZXhJbnB1dE9uQ2hhbmdlKHQpe3RoaXMudGVudGF0aXZlUmVnZXhTdHJpbmckLm5leHQodCl9b25TYXZlKHQpe3RoaXMuc3RvcmUuZGlzcGF0Y2goSUEoe2V4cGVyaW1lbnRJZHM6dGhpcy5leHBlcmltZW50SWRzLGdyb3VwQnk6e2tleTplTi5SRUdFWCxyZWdleFN0cmluZzp0fX0pKX19ZnVuY3Rpb24gejEodCxlKXsxJnQmJnd1KDAsIm1hdC1pY29uIiw5KX1mdW5jdGlvbiBIMSh0LGUpezEmdCYmd3UoMCwibWF0LWljb24iLDkpfWZ1bmN0aW9uIEYxKHQsZSl7MSZ0JiZ3dSgwLCJtYXQtaWNvbiIsOSl9ZnVuY3Rpb24gTDEodCxlKXtpZigxJnQpe2NvbnN0IHQ9RXUoKTtPdSgwLCJidXR0b24iLDUpLE51KCJjbGljayIsKGZ1bmN0aW9uIGUoKXtyZXR1cm4gcmEodCksTHUoKS5vbkdyb3VwQnlSZWdleENsaWNrKCl9KSksT3UoMSwic3BhbiIpLFdtKDIsRjEsMSwwLCJtYXQtaWNvbiIsNiksUHUoKSxPdSgzLCJsYWJlbCIpLE1mKDQsIlJlZ2V4IiksUHUoKSxQdSgpfWlmKDImdCl7Y29uc3QgdD1MdSgpO05tKCJhcmlhLWNoZWNrZWQiLHQuc2VsZWN0ZWRHcm91cEJ5LmtleT09PXQuR3JvdXBCeUtleS5SRUdFWCksSmMoMiksdnUoIm5nSWYiLHQuc2VsZWN0ZWRHcm91cEJ5LmtleT09PXQuR3JvdXBCeUtleS5SRUdFWCl9fWZ1bmN0aW9uIEIxKHQsZSl7aWYoMSZ0JiYoT3UoMCwibGFiZWwiKSxNZigxKSxQdSgpKSwyJnQpe2NvbnN0IHQ9THUoMik7SmMoMSksdmYodC5yZWdleFN0cmluZyl9fWZ1bmN0aW9uIFYxKHQsZSl7MSZ0JiYoT3UoMCwibGFiZWwiLDE0KSxNZigxLCIobm9uZSBzZXQpIiksUHUoKSl9ZnVuY3Rpb24gajEodCxlKXtpZigxJnQpe2NvbnN0IHQ9RXUoKTtPdSgwLCJidXR0b24iLDEwKSxOdSgiY2xpY2siLChmdW5jdGlvbiBlKCl7cmV0dXJuIHJhKHQpLEx1KCkub25SZWdleFN0cmluZ0VkaXQoKX0pKSxPdSgxLCJzcGFuIiksd3UoMiwibWF0LWljb24iLDExKSxQdSgpLFdtKDMsQjEsMiwxLCJsYWJlbCIsMTIpLFdtKDQsVjEsMiwwLCJsYWJlbCIsMTMpLFB1KCl9aWYoMiZ0KXtjb25zdCB0PUx1KCk7SmMoMyksdnUoIm5nSWYiLHQucmVnZXhTdHJpbmcpLEpjKDEpLHZ1KCJuZ0lmIiwhdC5yZWdleFN0cmluZyl9fUkxLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxJMSkoTXUoRWspLE11KERXKSxNdShBVykpfSxJMS7JtWNtcD1Vbyh7dHlwZTpJMSxzZWxlY3RvcnM6W1sicmVnZXgtZWRpdC1kaWFsb2ciXV0sZGVjbHM6Myx2YXJzOjYsY29uc3RzOltbMywicmVnZXhTdHJpbmciLCJjb2xvclJ1blBhaXJMaXN0Iiwib25TYXZlIiwicmVnZXhJbnB1dE9uQ2hhbmdlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihPdSgwLCJyZWdleC1lZGl0LWRpYWxvZy1jb21wb25lbnQiLDApLE51KCJvblNhdmUiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLm9uU2F2ZShlKX0pKSgicmVnZXhJbnB1dE9uQ2hhbmdlIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vblJlZ2V4SW5wdXRPbkNoYW5nZShlKX0pKSxPYigxLCJhc3luYyIpLE9iKDIsImFzeW5jIiksUHUoKSksMiZlJiZ2dSgicmVnZXhTdHJpbmciLFBiKDEsMixuLmdyb3VwQnlSZWdleFN0cmluZyQpKSgiY29sb3JSdW5QYWlyTGlzdCIsUGIoMiw0LG4uY29sb3JSdW5QYWlyTGlzdCQpKX0sZGlyZWN0aXZlczpbTjFdLHBpcGVzOltNdl0sZW5jYXBzdWxhdGlvbjoyfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihJMSxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJyZWdleC1lZGl0LWRpYWxvZyIsdGVtcGxhdGU6JzxyZWdleC1lZGl0LWRpYWxvZy1jb21wb25lbnRcbiAgICBbcmVnZXhTdHJpbmddPSJncm91cEJ5UmVnZXhTdHJpbmckIHwgYXN5bmMiXG4gICAgW2NvbG9yUnVuUGFpckxpc3RdPSJjb2xvclJ1blBhaXJMaXN0JCB8IGFzeW5jIlxuICAgIChvblNhdmUpPSJvblNhdmUoJGV2ZW50KSJcbiAgICAocmVnZXhJbnB1dE9uQ2hhbmdlKT0ib25SZWdleElucHV0T25DaGFuZ2UoJGV2ZW50KSJcbiAgPjwvcmVnZXgtZWRpdC1kaWFsb2ctY29tcG9uZW50Pid9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpFa30se3R5cGU6RFd9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltBV119XX1dfSksbnVsbCk7Y2xhc3MgVTF7Y29uc3RydWN0b3IodCl7dGhpcy5kaWFsb2c9dCx0aGlzLkdyb3VwQnlLZXk9ZU4sdGhpcy5vbkdyb3VwQnlDaGFuZ2U9bmV3IEFifW9uUmVnZXhTdHJpbmdFZGl0KCl7dGhpcy5kaWFsb2cub3BlbihJMSx7bWF4SGVpZ2h0OiI5NXZoIixtaW5IZWlnaHQ6IjUwMHB4IixtYXhXaWR0aDoiODB2dyIsbWluV2lkdGg6IjYwMHB4IixkYXRhOntleHBlcmltZW50SWRzOnRoaXMuZXhwZXJpbWVudElkc319KX1vbkdyb3VwQnlSZWdleENsaWNrKCl7dGhpcy5yZWdleFN0cmluZz90aGlzLm9uR3JvdXBCeUNoYW5nZS5lbWl0KHtrZXk6ZU4uUkVHRVgscmVnZXhTdHJpbmc6dGhpcy5yZWdleFN0cmluZ30pOnRoaXMub25SZWdleFN0cmluZ0VkaXQoKX19VTEuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFUxKShNdShIVykpfSxVMS7JtWNtcD1Vbyh7dHlwZTpVMSxzZWxlY3RvcnM6W1sicnVucy1ncm91cC1tZW51LWJ1dHRvbi1jb21wb25lbnQiXV0saW5wdXRzOntleHBlcmltZW50SWRzOiJleHBlcmltZW50SWRzIixyZWdleFN0cmluZzoicmVnZXhTdHJpbmciLHNlbGVjdGVkR3JvdXBCeToic2VsZWN0ZWRHcm91cEJ5IixzaG93R3JvdXBCeVJlZ2V4OiJzaG93R3JvdXBCeVJlZ2V4In0sb3V0cHV0czp7b25Hcm91cEJ5Q2hhbmdlOiJvbkdyb3VwQnlDaGFuZ2UifSxkZWNsczoxOCx2YXJzOjcsY29uc3RzOltbIm1hdC1pY29uLWJ1dHRvbiIsIiIsInRpdGxlIiwiR3JvdXAgcnVucyBieS4uLiIsMywibWF0TWVudVRyaWdnZXJGb3IiXSxbInN2Z0ljb24iLCJwYWxldHRlXzI0cHgiXSxbMSwicnVuLXRhYmxlLWNvbG9yLWdyb3VwLWJ5Il0sWyJncm91cEJ5TWVudSIsIm1hdE1lbnUiXSxbMSwibGFiZWwiXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJyb2xlIiwibWVudWl0ZW1yYWRpbyIsMywiY2xpY2siXSxbInN2Z0ljb24iLCJkb25lXzI0cHgiLDQsIm5nSWYiXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJyb2xlIiwibWVudWl0ZW1yYWRpbyIsMywiY2xpY2siLDQsIm5nSWYiXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJyb2xlIiwibWVudWl0ZW0iLCJjbGFzcyIsImRpc3BsYXktcmVnZXgtc3RyaW5nIiwzLCJjbGljayIsNCwibmdJZiJdLFsic3ZnSWNvbiIsImRvbmVfMjRweCJdLFsibWF0LW1lbnUtaXRlbSIsIiIsInJvbGUiLCJtZW51aXRlbSIsMSwiZGlzcGxheS1yZWdleC1zdHJpbmciLDMsImNsaWNrIl0sWyJzdmdJY29uIiwiZWRpdF8yNHB4Il0sWzQsIm5nSWYiXSxbImNsYXNzIiwibm9uZS1zZXQtc3RyaW5nIiw0LCJuZ0lmIl0sWzEsIm5vbmUtc2V0LXN0cmluZyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoT3UoMCwiYnV0dG9uIiwwKSx3dSgxLCJtYXQtaWNvbiIsMSksUHUoKSxPdSgyLCJtYXQtbWVudSIsMiwzKSxPdSg0LCJkaXYiLDQpLE1mKDUsIkNvbG9yIHJ1bnMgYnkiKSxQdSgpLE91KDYsImJ1dHRvbiIsNSksTnUoImNsaWNrIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uR3JvdXBCeUNoYW5nZS5lbWl0KHtrZXk6bi5Hcm91cEJ5S2V5LkVYUEVSSU1FTlR9KX0pKSxPdSg3LCJzcGFuIiksV20oOCx6MSwxLDAsIm1hdC1pY29uIiw2KSxQdSgpLE91KDksImxhYmVsIiksTWYoMTAsIkV4cGVyaW1lbnQiKSxQdSgpLFB1KCksT3UoMTEsImJ1dHRvbiIsNSksTnUoImNsaWNrIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uR3JvdXBCeUNoYW5nZS5lbWl0KHtrZXk6bi5Hcm91cEJ5S2V5LlJVTn0pfSkpLE91KDEyLCJzcGFuIiksV20oMTMsSDEsMSwwLCJtYXQtaWNvbiIsNiksUHUoKSxPdSgxNCwibGFiZWwiKSxNZigxNSwiUnVuIiksUHUoKSxQdSgpLFdtKDE2LEwxLDUsMiwiYnV0dG9uIiw3KSxXbSgxNyxqMSw1LDIsImJ1dHRvbiIsOCksUHUoKSksMiZlJiYodnUoIm1hdE1lbnVUcmlnZ2VyRm9yIixHbSgzKSksSmMoNiksTm0oImFyaWEtY2hlY2tlZCIsbi5zZWxlY3RlZEdyb3VwQnkua2V5PT09bi5Hcm91cEJ5S2V5LkVYUEVSSU1FTlQpLEpjKDIpLHZ1KCJuZ0lmIixuLnNlbGVjdGVkR3JvdXBCeS5rZXk9PT1uLkdyb3VwQnlLZXkuRVhQRVJJTUVOVCksSmMoMyksTm0oImFyaWEtY2hlY2tlZCIsbi5zZWxlY3RlZEdyb3VwQnkua2V5PT09bi5Hcm91cEJ5S2V5LlJVTiksSmMoMiksdnUoIm5nSWYiLG4uc2VsZWN0ZWRHcm91cEJ5LmtleT09PW4uR3JvdXBCeUtleS5SVU4pLEpjKDMpLHZ1KCJuZ0lmIixuLnNob3dHcm91cEJ5UmVnZXgpLEpjKDEpLHZ1KCJuZ0lmIixuLnNob3dHcm91cEJ5UmVnZXgpKX0sZGlyZWN0aXZlczpbTkgsTkcsY0csREcsT0csYXZdLHN0eWxlczpbJy5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHh9Lm1hdC1oMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaGVhZGxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTVweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZ1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjA1ZW07bWFyZ2luOjAgMCA1NnB4fS5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAwNWVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXJhaXNlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdHJva2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmxhdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZhYltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbWluaS1mYWJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4fS5tYXQtY2FyZC1zdWJ0aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGVja2JveC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvb3Rlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgdHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIzZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LjU0MTY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2NjY2NjY3ZW0pfUBtZWRpYSBwcmludHsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjJlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouMjVlbSAwIC43NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxZW0gMCAxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMiksIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi0wLjA2MjVlbX0ubWF0LW1lbnUtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci12ZXJ0aWNhbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGFiLWxpbmtbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MH0ubWF0LXRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5Om5vbmV9LmNkay12aXN1YWxseS1oaWRkZW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjZ9LmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV0sIC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3hbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2tbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHt9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7fS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOi13ZWJraXQtYXV0b2ZpbGwpe2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZVtfbmdjb250ZW50LSVDT01QJV17cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fS5tYXQtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfSAgLnJ1bi10YWJsZS1jb2xvci1ncm91cC1ieXtmb250LXNpemU6MTZweH0gIC5ydW4tdGFibGUtY29sb3ItZ3JvdXAtYnkgLmxhYmVse2NvbG9yOiM2MTYxNjE7Zm9udC1zaXplOi45ZW07bWFyZ2luOjEwcHggMDtwYWRkaW5nOjAgMTZweDtwb2ludGVyLWV2ZW50czpub25lfSAgLnJ1bi10YWJsZS1jb2xvci1ncm91cC1ieSBidXR0b257ZGlzcGxheTpncmlkO2dhcDoycHggMTBweDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MjBweCBhdXRvfSAgLnJ1bi10YWJsZS1jb2xvci1ncm91cC1ieSBtYXQtaWNvbntoZWlnaHQ6MjBweDt3aWR0aDoyMHB4fSAgLnJ1bi10YWJsZS1jb2xvci1ncm91cC1ieSAuZGlzcGxheS1yZWdleC1zdHJpbmd7cGFkZGluZy1sZWZ0OjQwcHh9ICAucnVuLXRhYmxlLWNvbG9yLWdyb3VwLWJ5IC5kaXNwbGF5LXJlZ2V4LXN0cmluZyAubm9uZS1zZXQtc3RyaW5ne2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgICAucnVuLXRhYmxlLWNvbG9yLWdyb3VwLWJ5IC5kaXNwbGF5LXJlZ2V4LXN0cmluZyAubm9uZS1zZXQtc3RyaW5nLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAgIC5ydW4tdGFibGUtY29sb3ItZ3JvdXAtYnkgLmRpc3BsYXktcmVnZXgtc3RyaW5nIC5ub25lLXNldC1zdHJpbmd7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9J10sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFUxLFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6InJ1bnMtZ3JvdXAtbWVudS1idXR0b24tY29tcG9uZW50Iix0ZW1wbGF0ZVVybDoicnVuc19ncm91cF9tZW51X2J1dHRvbl9jb21wb25lbnQubmcuaHRtbCIsc3R5bGVVcmxzOlsicnVuc19ncm91cF9tZW51X2J1dHRvbl9jb21wb25lbnQuY3NzIl0sY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkhXfV19KSx7ZXhwZXJpbWVudElkczpbe3R5cGU6eV99XSxyZWdleFN0cmluZzpbe3R5cGU6eV99XSxzZWxlY3RlZEdyb3VwQnk6W3t0eXBlOnlffV0sc2hvd0dyb3VwQnlSZWdleDpbe3R5cGU6eV99XSxvbkdyb3VwQnlDaGFuZ2U6W3t0eXBlOl9ffV19KTtjbGFzcyBXMXtjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXQsdGhpcy5zaG93R3JvdXBCeVJlZ2V4JD10aGlzLnN0b3JlLnNlbGVjdCh3RSksdGhpcy5zZWxlY3RlZEdyb3VwQnkkPXRoaXMuc3RvcmUuc2VsZWN0KGdOKSx0aGlzLmdyb3VwQnlSZWdleFN0cmluZyQ9dGhpcy5zdG9yZS5zZWxlY3QoTU4pfW9uR3JvdXBCeUNoYW5nZSh0KXt0aGlzLnN0b3JlLmRpc3BhdGNoKElBKHtleHBlcmltZW50SWRzOnRoaXMuZXhwZXJpbWVudElkcyxncm91cEJ5OnR9KSl9fVcxLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxXMSkoTXUoRWspKX0sVzEuybVjbXA9VW8oe3R5cGU6VzEsc2VsZWN0b3JzOltbInJ1bnMtZ3JvdXAtbWVudS1idXR0b24iXV0saW5wdXRzOntleHBlcmltZW50SWRzOiJleHBlcmltZW50SWRzIn0sZGVjbHM6NCx2YXJzOjEwLGNvbnN0czpbWzMsInJlZ2V4U3RyaW5nIiwic2VsZWN0ZWRHcm91cEJ5Iiwic2hvd0dyb3VwQnlSZWdleCIsImV4cGVyaW1lbnRJZHMiLCJvbkdyb3VwQnlDaGFuZ2UiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKE91KDAsInJ1bnMtZ3JvdXAtbWVudS1idXR0b24tY29tcG9uZW50IiwwKSxOdSgib25Hcm91cEJ5Q2hhbmdlIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vbkdyb3VwQnlDaGFuZ2UoZSl9KSksT2IoMSwiYXN5bmMiKSxPYigyLCJhc3luYyIpLE9iKDMsImFzeW5jIiksUHUoKSksMiZlJiZ2dSgicmVnZXhTdHJpbmciLFBiKDEsNCxuLmdyb3VwQnlSZWdleFN0cmluZyQpKSgic2VsZWN0ZWRHcm91cEJ5IixQYigyLDYsbi5zZWxlY3RlZEdyb3VwQnkkKSkoInNob3dHcm91cEJ5UmVnZXgiLFBiKDMsOCxuLnNob3dHcm91cEJ5UmVnZXgkKSkoImV4cGVyaW1lbnRJZHMiLG4uZXhwZXJpbWVudElkcyl9LGRpcmVjdGl2ZXM6W1UxXSxwaXBlczpbTXZdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoVzEsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoicnVucy1ncm91cC1tZW51LWJ1dHRvbiIsdGVtcGxhdGU6J1xuICAgIDxydW5zLWdyb3VwLW1lbnUtYnV0dG9uLWNvbXBvbmVudFxuICAgICAgW3JlZ2V4U3RyaW5nXT0iZ3JvdXBCeVJlZ2V4U3RyaW5nJCB8IGFzeW5jIlxuICAgICAgW3NlbGVjdGVkR3JvdXBCeV09InNlbGVjdGVkR3JvdXBCeSQgfCBhc3luYyJcbiAgICAgIFtzaG93R3JvdXBCeVJlZ2V4XT0ic2hvd0dyb3VwQnlSZWdleCQgfCBhc3luYyJcbiAgICAgIFtleHBlcmltZW50SWRzXT0iZXhwZXJpbWVudElkcyJcbiAgICAgIChvbkdyb3VwQnlDaGFuZ2UpPSJvbkdyb3VwQnlDaGFuZ2UoJGV2ZW50KSJcbiAgICA+PC9ydW5zLWdyb3VwLW1lbnUtYnV0dG9uLWNvbXBvbmVudD5cbiAgJyxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6RWt9XX0pLHtleHBlcmltZW50SWRzOlt7dHlwZTp5X31dfSk7Y29uc3QgRzE9WyJjb250YWluZXIiXTt2YXIgWTE7IShmdW5jdGlvbih0KXt0W3QuTk9ORT0wXT0iTk9ORSIsdFt0LkxFRlQ9MV09IkxFRlQiLHRbdC5SSUdIVD0yXT0iUklHSFQifSkoWTF8fChZMT17fSkpO2NsYXNzIHExe2NvbnN0cnVjdG9yKHQpe3RoaXMuY2hhbmdlRGV0ZWN0b3I9dCx0aGlzLnRpY2tDb3VudD0yMCx0aGlzLnZhbHVlPW5ldyBBYix0aGlzLlBvc2l0aW9uPVkxLHRoaXMuYWN0aXZlVGh1bWI9WTEuTk9ORSx0aGlzLm9mZnNldFhGcm9tT3JpZ2luT2ZBY3RpdmVUaHVtYj0wLHRoaXMubmdVbnN1YnNjcmliZT1uZXcgeH1nZXRUaHVtYlBvc2l0aW9uKHQpe2NvbnN0IGU9dGhpcy5nZXRDbGlwcGVkVmFsdWUodCksbj10aGlzLm1heC10aGlzLm1pbjtyZXR1cm4gbjw9MD8iNTAlIjooZS10aGlzLm1pbikvbioxMDArIiUifWdldFRyYWNrV2lkdGgoKXtjb25zdCB0PXRoaXMubWF4LXRoaXMubWluO3JldHVybiB0PD0wPyIwJSI6KHRoaXMuZ2V0Q2xpcHBlZFZhbHVlKHRoaXMudXBwZXJWYWx1ZSktdGhpcy5nZXRDbGlwcGVkVmFsdWUodGhpcy5sb3dlclZhbHVlKSkvdCoxMDArIiUifWdldENsaXBwZWRWYWx1ZSh0KXtyZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgodCx0aGlzLm1pbiksdGhpcy5tYXgpfW5nT25EZXN0cm95KCl7dGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKSx0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKX1uZ09uSW5pdCgpe1Z0KGRvY3VtZW50LCJtb3VzZW1vdmUiLHtwYXNzaXZlOiEwfSkucGlwZSh1bih0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKHQ9Pnt0aGlzLmhhbmRsZU1vdXNlTW92ZSh0KX0pKSxWdChkb2N1bWVudCwibW91c2V1cCIse3Bhc3NpdmU6ITB9KS5waXBlKHVuKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgodD0+e3RoaXMuaGFuZGxlTW91c2VPdXQodCl9KSl9aGFuZGxlTW91c2VEb3duKHQsZSl7dGhpcy5hY3RpdmVUaHVtYj1lLHRoaXMub2Zmc2V0WEZyb21PcmlnaW5PZkFjdGl2ZVRodW1iPTYtdC5vZmZzZXRYfWNhbGN1bGF0ZVZhbHVlRnJvbU1vdXNlRXZlbnQodCl7Y29uc3R7bGVmdDplLHJpZ2h0Om59PXRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbz10LmNsaWVudFgtZSt0aGlzLm9mZnNldFhGcm9tT3JpZ2luT2ZBY3RpdmVUaHVtYjtsZXQgaTtpZihudWxsIT09dGhpcy50aWNrQ291bnQmJnRoaXMudGlja0NvdW50PjApe2NvbnN0IHQ9KG4tZSkvdGhpcy50aWNrQ291bnQ7aT1NYXRoLnJvdW5kKG8vdCkqdC8obi1lKX1lbHNlIGk9by8obi1lKTtyZXR1cm4gdGhpcy5nZXRDbGlwcGVkVmFsdWUodGhpcy5taW4rKHRoaXMubWF4LXRoaXMubWluKSppKX1oYW5kbGVNb3VzZU1vdmUodCl7aWYodGhpcy5hY3RpdmVUaHVtYj09PVkxLk5PTkUpcmV0dXJuO2NvbnN0IGU9dGhpcy5jYWxjdWxhdGVWYWx1ZUZyb21Nb3VzZUV2ZW50KHQpO2xldCBuPVt0aGlzLmxvd2VyVmFsdWUsdGhpcy51cHBlclZhbHVlXTt0aGlzLmFjdGl2ZVRodW1iPT09WTEuTEVGVD8oZT50aGlzLnVwcGVyVmFsdWUmJih0aGlzLmFjdGl2ZVRodW1iPVkxLlJJR0hUKSxuPVtlLHRoaXMudXBwZXJWYWx1ZV0pOihlPHRoaXMubG93ZXJWYWx1ZSYmKHRoaXMuYWN0aXZlVGh1bWI9WTEuTEVGVCksbj1bdGhpcy5sb3dlclZhbHVlLGVdKSx0aGlzLm1heWJlTm90aWZ5TmV4dFZhbHVlKG4pLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCl9bWF5YmVOb3RpZnlOZXh0VmFsdWUodCl7Y29uc3RbZSxuXT10LnNvcnQoKCh0LGUpPT50LWUpKTt0aGlzLmxvd2VyVmFsdWU9PT1lJiZ0aGlzLnVwcGVyVmFsdWU9PT1ufHx0aGlzLnZhbHVlLmVtaXQoe2xvd2VyVmFsdWU6ZSx1cHBlclZhbHVlOm59KX1oYW5kbGVNb3VzZU91dCh0KXt0aGlzLmFjdGl2ZVRodW1iIT09WTEuTk9ORSYmKHRoaXMuYWN0aXZlVGh1bWI9WTEuTk9ORSx0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpKX1oYW5kbGVJbnB1dENoYW5nZSh0LGUpe2NvbnN0IG49dGhpcy5nZXRDbGlwcGVkVmFsdWUoTnVtYmVyKHQudGFyZ2V0LnZhbHVlKSk7aWYoaXNOYU4obikpcmV0dXJuO2xldCBvPVt0aGlzLmxvd2VyVmFsdWUsdGhpcy51cHBlclZhbHVlXTtvPWU9PT1ZMS5MRUZUP1tuLHRoaXMudXBwZXJWYWx1ZV06W3RoaXMubG93ZXJWYWx1ZSxuXSx0aGlzLm1heWJlTm90aWZ5TmV4dFZhbHVlKG8pfWlzVGh1bWJBY3RpdmUodCl7cmV0dXJuIHRoaXMuYWN0aXZlVGh1bWI9PT10fX1xMS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8cTEpKE11KEhoKSl9LHExLsm1Y21wPVVvKHt0eXBlOnExLHNlbGVjdG9yczpbWyJ0Yi1yYW5nZS1pbnB1dCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24gdChlLG4pe2lmKDEmZSYmV2IoRzEsMyxjaCksMiZlKXtsZXQgdDtVYih0PVliKCkpJiYobi5jb250YWluZXI9dC5maXJzdCl9fSxpbnB1dHM6e21pbjoibWluIixtYXg6Im1heCIsbG93ZXJWYWx1ZToibG93ZXJWYWx1ZSIsdXBwZXJWYWx1ZToidXBwZXJWYWx1ZSIsdGlja0NvdW50OiJ0aWNrQ291bnQifSxvdXRwdXRzOnt2YWx1ZToidmFsdWUifSxkZWNsczo4LHZhcnM6MTQsY29uc3RzOltbInR5cGUiLCJudW1iZXIiLDEsImxvd2VyLWlucHV0IiwzLCJ2YWx1ZSIsImNoYW5nZSJdLFsidHlwZSIsIm51bWJlciIsMSwidXBwZXItaW5wdXQiLDMsInZhbHVlIiwiY2hhbmdlIl0sWzEsImNvbnRhaW5lciJdLFsiY29udGFpbmVyIiwiIl0sWzEsInNsaWRlci10cmFjayJdLFsxLCJzbGlkZXItdHJhY2stZmlsbCJdLFsxLCJ0aHVtYiIsMywibW91c2Vkb3duIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihPdSgwLCJpbnB1dCIsMCksTnUoImNoYW5nZSIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4uaGFuZGxlSW5wdXRDaGFuZ2UoZSxuLlBvc2l0aW9uLkxFRlQpfSkpLFB1KCksT3UoMSwiaW5wdXQiLDEpLE51KCJjaGFuZ2UiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLmhhbmRsZUlucHV0Q2hhbmdlKGUsbi5Qb3NpdGlvbi5SSUdIVCl9KSksUHUoKSxPdSgyLCJzcGFuIiwyLDMpLHd1KDQsInNwYW4iLDQpLHd1KDUsInNwYW4iLDUpLE91KDYsInNwYW4iLDYpLE51KCJtb3VzZWRvd24iLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLmhhbmRsZU1vdXNlRG93bihlLG4uUG9zaXRpb24uTEVGVCl9KSksUHUoKSxPdSg3LCJzcGFuIiw2KSxOdSgibW91c2Vkb3duIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5oYW5kbGVNb3VzZURvd24oZSxuLlBvc2l0aW9uLlJJR0hUKX0pKSxQdSgpLFB1KCkpLDImZSYmKHZ1KCJ2YWx1ZSIsbi5sb3dlclZhbHVlKSxKYygxKSx2dSgidmFsdWUiLG4udXBwZXJWYWx1ZSksSmMoNCksb2YoImxlZnQiLG4uZ2V0VGh1bWJQb3NpdGlvbihuLmxvd2VyVmFsdWUpKSgid2lkdGgiLG4uZ2V0VHJhY2tXaWR0aCgpKSxKYygxKSxvZigibGVmdCIsbi5nZXRUaHVtYlBvc2l0aW9uKG4ubG93ZXJWYWx1ZSkpLGFmKCJhY3RpdmUiLG4uaXNUaHVtYkFjdGl2ZShuLlBvc2l0aW9uLkxFRlQpKSxKYygxKSxvZigibGVmdCIsbi5nZXRUaHVtYlBvc2l0aW9uKG4udXBwZXJWYWx1ZSkpLGFmKCJhY3RpdmUiLG4uaXNUaHVtYkFjdGl2ZShuLlBvc2l0aW9uLlJJR0hUKSkpfSxzdHlsZXM6WycubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1iYWRnZS1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo5cHh9Lm1hdC1iYWRnZS1sYXJnZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4fS5tYXQtaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWhlYWRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAyNHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE1cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjgzKS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1oNltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC42NykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtYm9keS1zdHJvbmdbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MCAwIDEycHh9Lm1hdC1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FwdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTJweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6MzAwIDExMnB4LzExMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wNWVtO21hcmdpbjowIDAgNTZweH0ubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNTZweC81NnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMmVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNDVweC80OHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMDVlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDM0cHgvNDBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1yYWlzZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3Ryb2tlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZsYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mYWJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW1pbmktZmFiW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtYnV0dG9uLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FyZC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjBweH0ubWF0LWNhcmQtc3VidGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hlY2tib3gtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC10cmFpbGluZy1pY29uLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC1yZW1vdmUubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxOHB4fS5tYXQtdGFibGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWhlYWRlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb290ZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jYWxlbmRhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FsZW5kYXItYm9keVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYWxlbmRhci1wZXJpb2QtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWRpYWxvZy10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTI1O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTUwJTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjVlbTt3aWR0aDoxLjVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW07bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41ZW0gMDtib3JkZXItdG9wOi44NDM3NWVtIHNvbGlkIHRyYW5zcGFyZW50fS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3RvcDotMC44NDM3NWVtO3BhZGRpbmctdG9wOi44NDM3NWVtfS5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjc1JTttYXJnaW4tdG9wOi42NjY2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNzkxNjY2NjY2N2VtKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAycHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyM2VtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzUzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi41NDE2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNjY2NjY2NjY2N2VtKX1AbWVkaWEgcHJpbnR7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIyZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIxZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMmVtKSBzY2FsZSgwLjc1KX19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjI1ZW0gMCAuNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4wOTM3NWVtO21hcmdpbi10b3A6LTAuNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MWVtIDAgMWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjg0Mzc1ZW07bWFyZ2luLXRvcDotMC4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH1pbnB1dC5tYXQtaW5wdXQtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDotMC4wNjI1ZW19Lm1hdC1tZW51LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1wYWdpbmF0b3JbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXBhZ2luYXRvci1wYWdlLXNpemVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3RbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXN0ZXBwZXItdmVydGljYWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc3RlcC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0Om5vcm1hbH0ubWF0LXN0ZXAtbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRhYi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjB9Lm1hdC10b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTZweH0ubWF0LW9wdGdyb3VwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LXNpbXBsZS1zbmFja2Jhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbltfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRyZWVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbmVzdGVkLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4fS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVdOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtcmlwcGxlLm1hdC1yaXBwbGUtdW5ib3VuZGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6NTAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7dHJhbnNmb3JtOnNjYWxlKDApfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpub25lfS5jZGstdmlzdWFsbHktaGlkZGVuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7bGVmdDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmVtcHR5e2Rpc3BsYXk6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LXBhbmVbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOmF1dG87Ym94LXNpemluZzpib3JkZXItYm94O3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7bWF4LXdpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlfS5jZGstb3ZlcmxheS1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKTtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5Oi42fS5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjMyKX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTowfS5jZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO292ZXJmbG93LXk6c2Nyb2xsfUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnR7fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5ke30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxse2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCAwcyAxbXN9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06bm90KDotd2Via2l0LWF1dG9maWxsKXthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIDBzIDFtc310ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemVbX25nY29udGVudC0lQ09NUCVde3Jlc2l6ZTpub25lfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmdbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OmF1dG8gIWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW4gIWltcG9ydGFudH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nLWZpcmVmb3hbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OjAgIWltcG9ydGFudH0ubWF0LWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX1bX25naG9zdC0lQ09NUCVde2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmlubGluZS1ncmlkO2dyaWQtZ2FwOjEwcHg7Z3JpZC10ZW1wbGF0ZS1hcmVhczoibG93ZXItaW5wdXQgdXBwZXItaW5wdXQiICJzbGlkZXIgc2xpZGVyIjtmb250LXNpemU6MDttaW4td2lkdGg6MTAwcHg7cGFkZGluZzo2cHh9aW5wdXRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6aW5oZXJpdDtib3JkZXItc3R5bGU6c29saWQ7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOmluaGVyaXQ7b3ZlcmZsb3c6aGlkZGVuO3dpZHRoOjEwMCV9Lmxvd2VyLWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXtncmlkLWFyZWE6bG93ZXItaW5wdXR9LnVwcGVyLWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXtncmlkLWFyZWE6dXBwZXItaW5wdXQ7anVzdGlmeS1zZWxmOmZsZXgtZW5kfS5jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2dyaWQtYXJlYTpzbGlkZXI7YWxpZ24taXRlbXM6Y2VudGVyO2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmlubGluZS1mbGV4O2hlaWdodDoxMnB4O2p1c3RpZnktY29udGVudDpjZW50ZXI7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MTAwJX0uc2xpZGVyLXRyYWNrW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjI2KTtoZWlnaHQ6MnB4O3dpZHRoOjEwMCV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnNsaWRlci10cmFja1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5zbGlkZXItdHJhY2tbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMyl9LnNsaWRlci10cmFjay1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtoZWlnaHQ6MnB4fS50aHVtYltfbmdjb250ZW50LSVDT01QJV17Ym94LXNhZGhvdzowIDAgMCAxcHggcmdiYSgwLDAsMCwuMjYpO2JvcmRlci1yYWRpdXM6MTAwJTtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MTJweDttYXJnaW4tbGVmdDotNnB4O3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyO3RyYW5zaXRpb246dHJhbnNmb3JtIC4zcyBlYXNlO3dpZHRoOjEycHg7d2lsbC1jaGFuZ2U6dHJhbnNmb3JtfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC50aHVtYltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC50aHVtYltfbmdjb250ZW50LSVDT01QJV17Ym94LXNhZGhvdzowIDAgMCAxcHggcmdiYSgyNTUsMjU1LDI1NSwuMyl9LnRodW1iLmFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnNjYWxlKDEuMil9LnNsaWRlci10cmFjay1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnRodW1iW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOiNmNTdjMDB9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnNsaWRlci10cmFjay1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNsaWRlci10cmFjay1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnRodW1iW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnRodW1iW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOiNlZjZjMDB9J10sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHExLFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6InRiLXJhbmdlLWlucHV0Iix0ZW1wbGF0ZVVybDoiLi9yYW5nZV9pbnB1dF9jb21wb25lbnQubmcuaHRtbCIsc3R5bGVVcmxzOlsiLi9yYW5nZV9pbnB1dF9jb21wb25lbnQuY3NzIl0sY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkhofV19KSx7Y29udGFpbmVyOlt7dHlwZTpGcixhcmdzOlsiY29udGFpbmVyIix7c3RhdGljOiEwLHJlYWQ6Y2h9XX1dLG1pbjpbe3R5cGU6eV99XSxtYXg6W3t0eXBlOnlffV0sbG93ZXJWYWx1ZTpbe3R5cGU6eV99XSx1cHBlclZhbHVlOlt7dHlwZTp5X31dLHRpY2tDb3VudDpbe3R5cGU6eV99XSx2YWx1ZTpbe3R5cGU6X199XX0pO2NvbnN0IFoxPVsiZGlhbG9nUG9wdXAiXSxYMT1bImh1ZVNsaWRlciJdLEsxPVsiYWxwaGFTbGlkZXIiXTtmdW5jdGlvbiBKMSh0LGUpe2lmKDEmdCYmd3UoMCwiZGl2IiksMiZ0KXtjb25zdCB0PUx1KCk7d2YoImFycm93IGFycm93LSIsdC5jcFVzZVBvc2l0aW9uLCIiKSxvZigidG9wIix0LmFycm93VG9wLCJweCIpfX1mdW5jdGlvbiBRMSh0LGUpe2lmKDEmdCl7Y29uc3QgdD1FdSgpO091KDAsImRpdiIsMjYpLE51KCJuZXdWYWx1ZSIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIHJhKHQpLEx1KCkub25Db2xvckNoYW5nZShuKX0pKSgiZHJhZ1N0YXJ0IiwoZnVuY3Rpb24gZSgpe3JldHVybiByYSh0KSxMdSgpLm9uRHJhZ1N0YXJ0KCJzYXR1cmF0aW9uLWxpZ2h0bmVzcyIpfSkpKCJkcmFnRW5kIiwoZnVuY3Rpb24gZSgpe3JldHVybiByYSh0KSxMdSgpLm9uRHJhZ0VuZCgic2F0dXJhdGlvbi1saWdodG5lc3MiKX0pKSx3dSgxLCJkaXYiLDEzKSxQdSgpfWlmKDImdCl7Y29uc3QgdD1MdSgpO29mKCJiYWNrZ3JvdW5kLWNvbG9yIix0Lmh1ZVNsaWRlckNvbG9yKSx2dSgicmdYIiwxKSgicmdZIiwxKSxKYygxKSxvZigidG9wIixudWxsPT10LnNsaWRlcj9udWxsOnQuc2xpZGVyLnYsInB4IikoImxlZnQiLG51bGw9PXQuc2xpZGVyP251bGw6dC5zbGlkZXIucywicHgiKX19ZnVuY3Rpb24gJDEodCxlKXtpZigxJnQpe2NvbnN0IHQ9RXUoKTtPdSgwLCJidXR0b24iLDI3KSxOdSgiY2xpY2siLChmdW5jdGlvbiBlKG4pe3JhKHQpO2NvbnN0IG89THUoKTtyZXR1cm4gby5vbkFkZFByZXNldENvbG9yKG4sby5zZWxlY3RlZENvbG9yKX0pKSxNZigxKSxQdSgpfWlmKDImdCl7Y29uc3QgdD1MdSgpO2xmKHQuY3BBZGRDb2xvckJ1dHRvbkNsYXNzKSx2dSgiZGlzYWJsZWQiLHQuY3BQcmVzZXRDb2xvcnMmJnQuY3BQcmVzZXRDb2xvcnMubGVuZ3RoPj10LmNwTWF4UHJlc2V0Q29sb3JzTGVuZ3RoKSxKYygxKSx4ZigiICIsdC5jcEFkZENvbG9yQnV0dG9uVGV4dCwiICIpfX1mdW5jdGlvbiB0Myh0LGUpezEmdCYmd3UoMCwiZGl2IiwyOCl9ZnVuY3Rpb24gZTModCxlKXtpZigxJnQpe2NvbnN0IHQ9RXUoKTtPdSgwLCJpbnB1dCIsMzQpLE51KCJrZXl1cC5lbnRlciIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIHJhKHQpLEx1KDIpLm9uQWNjZXB0Q29sb3Iobil9KSkoIm5ld1ZhbHVlIiwoZnVuY3Rpb24gZShuKXtyZXR1cm4gcmEodCksTHUoMikub25BbHBoYUlucHV0KG4pfSkpLFB1KCl9aWYoMiZ0KXtjb25zdCB0PUx1KDIpO3Z1KCJyZyIsMSkoInZhbHVlIixudWxsPT10LmNteWtUZXh0P251bGw6dC5jbXlrVGV4dC5hKX19ZnVuY3Rpb24gbjModCxlKXsxJnQmJihPdSgwLCJkaXYiKSxNZigxLCJBIiksUHUoKSl9ZnVuY3Rpb24gbzModCxlKXtpZigxJnQpe2NvbnN0IHQ9RXUoKTtPdSgwLCJkaXYiLDI5KSxPdSgxLCJkaXYiLDMwKSxPdSgyLCJpbnB1dCIsMzEpLE51KCJrZXl1cC5lbnRlciIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIHJhKHQpLEx1KCkub25BY2NlcHRDb2xvcihuKX0pKSgibmV3VmFsdWUiLChmdW5jdGlvbiBlKG4pe3JldHVybiByYSh0KSxMdSgpLm9uQ3lhbklucHV0KG4pfSkpLFB1KCksT3UoMywiaW5wdXQiLDMxKSxOdSgia2V5dXAuZW50ZXIiLChmdW5jdGlvbiBlKG4pe3JldHVybiByYSh0KSxMdSgpLm9uQWNjZXB0Q29sb3Iobil9KSkoIm5ld1ZhbHVlIiwoZnVuY3Rpb24gZShuKXtyZXR1cm4gcmEodCksTHUoKS5vbk1hZ2VudGFJbnB1dChuKX0pKSxQdSgpLE91KDQsImlucHV0IiwzMSksTnUoImtleXVwLmVudGVyIiwoZnVuY3Rpb24gZShuKXtyZXR1cm4gcmEodCksTHUoKS5vbkFjY2VwdENvbG9yKG4pfSkpKCJuZXdWYWx1ZSIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIHJhKHQpLEx1KCkub25ZZWxsb3dJbnB1dChuKX0pKSxQdSgpLE91KDUsImlucHV0IiwzMSksTnUoImtleXVwLmVudGVyIiwoZnVuY3Rpb24gZShuKXtyZXR1cm4gcmEodCksTHUoKS5vbkFjY2VwdENvbG9yKG4pfSkpKCJuZXdWYWx1ZSIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIHJhKHQpLEx1KCkub25CbGFja0lucHV0KG4pfSkpLFB1KCksV20oNixlMywxLDIsImlucHV0IiwzMiksUHUoKSxPdSg3LCJkaXYiLDMwKSxPdSg4LCJkaXYiKSxNZig5LCJDIiksUHUoKSxPdSgxMCwiZGl2IiksTWYoMTEsIk0iKSxQdSgpLE91KDEyLCJkaXYiKSxNZigxMywiWSIpLFB1KCksT3UoMTQsImRpdiIpLE1mKDE1LCJLIiksUHUoKSxXbSgxNixuMywyLDAsImRpdiIsMzMpLFB1KCksUHUoKX1pZigyJnQpe2NvbnN0IHQ9THUoKTtvZigiZGlzcGxheSIsMyE9PXQuZm9ybWF0PyJub25lIjoiYmxvY2siKSxKYygyKSx2dSgicmciLDEwMCkoInZhbHVlIixudWxsPT10LmNteWtUZXh0P251bGw6dC5jbXlrVGV4dC5jKSxKYygxKSx2dSgicmciLDEwMCkoInZhbHVlIixudWxsPT10LmNteWtUZXh0P251bGw6dC5jbXlrVGV4dC5tKSxKYygxKSx2dSgicmciLDEwMCkoInZhbHVlIixudWxsPT10LmNteWtUZXh0P251bGw6dC5jbXlrVGV4dC55KSxKYygxKSx2dSgicmciLDEwMCkoInZhbHVlIixudWxsPT10LmNteWtUZXh0P251bGw6dC5jbXlrVGV4dC5rKSxKYygxKSx2dSgibmdJZiIsImRpc2FibGVkIiE9PXQuY3BBbHBoYUNoYW5uZWwpLEpjKDEwKSx2dSgibmdJZiIsImRpc2FibGVkIiE9PXQuY3BBbHBoYUNoYW5uZWwpfX1mdW5jdGlvbiBpMyh0LGUpe2lmKDEmdCl7Y29uc3QgdD1FdSgpO091KDAsImlucHV0IiwzNCksTnUoImtleXVwLmVudGVyIiwoZnVuY3Rpb24gZShuKXtyZXR1cm4gcmEodCksTHUoMikub25BY2NlcHRDb2xvcihuKX0pKSgibmV3VmFsdWUiLChmdW5jdGlvbiBlKG4pe3JldHVybiByYSh0KSxMdSgyKS5vbkFscGhhSW5wdXQobil9KSksUHUoKX1pZigyJnQpe2NvbnN0IHQ9THUoMik7dnUoInJnIiwxKSgidmFsdWUiLG51bGw9PXQuaHNsYVRleHQ/bnVsbDp0LmhzbGFUZXh0LmEpfX1mdW5jdGlvbiBhMyh0LGUpezEmdCYmKE91KDAsImRpdiIpLE1mKDEsIkEiKSxQdSgpKX1mdW5jdGlvbiByMyh0LGUpe2lmKDEmdCl7Y29uc3QgdD1FdSgpO091KDAsImRpdiIsMzUpLE91KDEsImRpdiIsMzApLE91KDIsImlucHV0IiwzNiksTnUoImtleXVwLmVudGVyIiwoZnVuY3Rpb24gZShuKXtyZXR1cm4gcmEodCksTHUoKS5vbkFjY2VwdENvbG9yKG4pfSkpKCJuZXdWYWx1ZSIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIHJhKHQpLEx1KCkub25IdWVJbnB1dChuKX0pKSxQdSgpLE91KDMsImlucHV0IiwzMSksTnUoImtleXVwLmVudGVyIiwoZnVuY3Rpb24gZShuKXtyZXR1cm4gcmEodCksTHUoKS5vbkFjY2VwdENvbG9yKG4pfSkpKCJuZXdWYWx1ZSIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIHJhKHQpLEx1KCkub25TYXR1cmF0aW9uSW5wdXQobil9KSksUHUoKSxPdSg0LCJpbnB1dCIsMzEpLE51KCJrZXl1cC5lbnRlciIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIHJhKHQpLEx1KCkub25BY2NlcHRDb2xvcihuKX0pKSgibmV3VmFsdWUiLChmdW5jdGlvbiBlKG4pe3JldHVybiByYSh0KSxMdSgpLm9uTGlnaHRuZXNzSW5wdXQobil9KSksUHUoKSxXbSg1LGkzLDEsMiwiaW5wdXQiLDMyKSxQdSgpLE91KDYsImRpdiIsMzApLE91KDcsImRpdiIpLE1mKDgsIkgiKSxQdSgpLE91KDksImRpdiIpLE1mKDEwLCJTIiksUHUoKSxPdSgxMSwiZGl2IiksTWYoMTIsIkwiKSxQdSgpLFdtKDEzLGEzLDIsMCwiZGl2IiwzMyksUHUoKSxQdSgpfWlmKDImdCl7Y29uc3QgdD1MdSgpO29mKCJkaXNwbGF5IiwyIT09dC5mb3JtYXQ/Im5vbmUiOiJibG9jayIpLEpjKDIpLHZ1KCJyZyIsMzYwKSgidmFsdWUiLG51bGw9PXQuaHNsYVRleHQ/bnVsbDp0LmhzbGFUZXh0LmgpLEpjKDEpLHZ1KCJyZyIsMTAwKSgidmFsdWUiLG51bGw9PXQuaHNsYVRleHQ/bnVsbDp0LmhzbGFUZXh0LnMpLEpjKDEpLHZ1KCJyZyIsMTAwKSgidmFsdWUiLG51bGw9PXQuaHNsYVRleHQ/bnVsbDp0LmhzbGFUZXh0LmwpLEpjKDEpLHZ1KCJuZ0lmIiwiZGlzYWJsZWQiIT09dC5jcEFscGhhQ2hhbm5lbCksSmMoOCksdnUoIm5nSWYiLCJkaXNhYmxlZCIhPT10LmNwQWxwaGFDaGFubmVsKX19ZnVuY3Rpb24gczModCxlKXtpZigxJnQpe2NvbnN0IHQ9RXUoKTtPdSgwLCJpbnB1dCIsMzQpLE51KCJrZXl1cC5lbnRlciIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIHJhKHQpLEx1KDIpLm9uQWNjZXB0Q29sb3Iobil9KSkoIm5ld1ZhbHVlIiwoZnVuY3Rpb24gZShuKXtyZXR1cm4gcmEodCksTHUoMikub25BbHBoYUlucHV0KG4pfSkpLFB1KCl9aWYoMiZ0KXtjb25zdCB0PUx1KDIpO3Z1KCJyZyIsMSkoInZhbHVlIixudWxsPT10LnJnYmFUZXh0P251bGw6dC5yZ2JhVGV4dC5hKX19ZnVuY3Rpb24gbDModCxlKXsxJnQmJihPdSgwLCJkaXYiKSxNZigxLCJBIiksUHUoKSl9ZnVuY3Rpb24gYzModCxlKXtpZigxJnQpe2NvbnN0IHQ9RXUoKTtPdSgwLCJkaXYiLDM3KSxPdSgxLCJkaXYiLDMwKSxPdSgyLCJpbnB1dCIsMzgpLE51KCJrZXl1cC5lbnRlciIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIHJhKHQpLEx1KCkub25BY2NlcHRDb2xvcihuKX0pKSgibmV3VmFsdWUiLChmdW5jdGlvbiBlKG4pe3JldHVybiByYSh0KSxMdSgpLm9uUmVkSW5wdXQobil9KSksUHUoKSxPdSgzLCJpbnB1dCIsMzgpLE51KCJrZXl1cC5lbnRlciIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIHJhKHQpLEx1KCkub25BY2NlcHRDb2xvcihuKX0pKSgibmV3VmFsdWUiLChmdW5jdGlvbiBlKG4pe3JldHVybiByYSh0KSxMdSgpLm9uR3JlZW5JbnB1dChuKX0pKSxQdSgpLE91KDQsImlucHV0IiwzOCksTnUoImtleXVwLmVudGVyIiwoZnVuY3Rpb24gZShuKXtyZXR1cm4gcmEodCksTHUoKS5vbkFjY2VwdENvbG9yKG4pfSkpKCJuZXdWYWx1ZSIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIHJhKHQpLEx1KCkub25CbHVlSW5wdXQobil9KSksUHUoKSxXbSg1LHMzLDEsMiwiaW5wdXQiLDMyKSxQdSgpLE91KDYsImRpdiIsMzApLE91KDcsImRpdiIpLE1mKDgsIlIiKSxQdSgpLE91KDksImRpdiIpLE1mKDEwLCJHIiksUHUoKSxPdSgxMSwiZGl2IiksTWYoMTIsIkIiKSxQdSgpLFdtKDEzLGwzLDIsMCwiZGl2IiwzMyksUHUoKSxQdSgpfWlmKDImdCl7Y29uc3QgdD1MdSgpO29mKCJkaXNwbGF5IiwxIT09dC5mb3JtYXQ/Im5vbmUiOiJibG9jayIpLEpjKDIpLHZ1KCJyZyIsMjU1KSgidmFsdWUiLG51bGw9PXQucmdiYVRleHQ/bnVsbDp0LnJnYmFUZXh0LnIpLEpjKDEpLHZ1KCJyZyIsMjU1KSgidmFsdWUiLG51bGw9PXQucmdiYVRleHQ/bnVsbDp0LnJnYmFUZXh0LmcpLEpjKDEpLHZ1KCJyZyIsMjU1KSgidmFsdWUiLG51bGw9PXQucmdiYVRleHQ/bnVsbDp0LnJnYmFUZXh0LmIpLEpjKDEpLHZ1KCJuZ0lmIiwiZGlzYWJsZWQiIT09dC5jcEFscGhhQ2hhbm5lbCksSmMoOCksdnUoIm5nSWYiLCJkaXNhYmxlZCIhPT10LmNwQWxwaGFDaGFubmVsKX19ZnVuY3Rpb24gZDModCxlKXtpZigxJnQpe2NvbnN0IHQ9RXUoKTtPdSgwLCJpbnB1dCIsMzQpLE51KCJrZXl1cC5lbnRlciIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIHJhKHQpLEx1KDIpLm9uQWNjZXB0Q29sb3Iobil9KSkoIm5ld1ZhbHVlIiwoZnVuY3Rpb24gZShuKXtyZXR1cm4gcmEodCksTHUoMikub25BbHBoYUlucHV0KG4pfSkpLFB1KCl9aWYoMiZ0KXtjb25zdCB0PUx1KDIpO3Z1KCJyZyIsMSkoInZhbHVlIix0LmhleEFscGhhKX19ZnVuY3Rpb24gcDModCxlKXsxJnQmJihPdSgwLCJkaXYiKSxNZigxLCJBIiksUHUoKSl9ZnVuY3Rpb24gbTModCxlKXtpZigxJnQpe2NvbnN0IHQ9RXUoKTtPdSgwLCJkaXYiLDM5KSxPdSgxLCJkaXYiLDMwKSxPdSgyLCJpbnB1dCIsNDApLE51KCJibHVyIiwoZnVuY3Rpb24gZSgpe3JldHVybiByYSh0KSxMdSgpLm9uSGV4SW5wdXQobnVsbCl9KSkoImtleXVwLmVudGVyIiwoZnVuY3Rpb24gZShuKXtyZXR1cm4gcmEodCksTHUoKS5vbkFjY2VwdENvbG9yKG4pfSkpKCJuZXdWYWx1ZSIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIHJhKHQpLEx1KCkub25IZXhJbnB1dChuKX0pKSxQdSgpLFdtKDMsZDMsMSwyLCJpbnB1dCIsMzIpLFB1KCksT3UoNCwiZGl2IiwzMCksT3UoNSwiZGl2IiksTWYoNiwiSGV4IiksUHUoKSxXbSg3LHAzLDIsMCwiZGl2IiwzMyksUHUoKSxQdSgpfWlmKDImdCl7Y29uc3QgdD1MdSgpO29mKCJkaXNwbGF5IiwwIT09dC5mb3JtYXQ/Im5vbmUiOiJibG9jayIpLGFmKCJoZXgtYWxwaGEiLCJmb3JjZWQiPT09dC5jcEFscGhhQ2hhbm5lbCksSmMoMiksdnUoInZhbHVlIix0LmhleFRleHQpLEpjKDEpLHZ1KCJuZ0lmIiwiZm9yY2VkIj09PXQuY3BBbHBoYUNoYW5uZWwpLEpjKDQpLHZ1KCJuZ0lmIiwiZm9yY2VkIj09PXQuY3BBbHBoYUNoYW5uZWwpfX1mdW5jdGlvbiB1Myh0LGUpe2lmKDEmdCl7Y29uc3QgdD1FdSgpO091KDAsImlucHV0IiwzNCksTnUoImtleXVwLmVudGVyIiwoZnVuY3Rpb24gZShuKXtyZXR1cm4gcmEodCksTHUoMikub25BY2NlcHRDb2xvcihuKX0pKSgibmV3VmFsdWUiLChmdW5jdGlvbiBlKG4pe3JldHVybiByYSh0KSxMdSgyKS5vbkFscGhhSW5wdXQobil9KSksUHUoKX1pZigyJnQpe2NvbnN0IHQ9THUoMik7dnUoInJnIiwxKSgidmFsdWUiLG51bGw9PXQuaHNsYVRleHQ/bnVsbDp0LmhzbGFUZXh0LmEpfX1mdW5jdGlvbiBmMyh0LGUpe2lmKDEmdCl7Y29uc3QgdD1FdSgpO091KDAsImRpdiIsNDEpLE91KDEsImRpdiIsMzApLE91KDIsImlucHV0IiwzMSksTnUoImtleXVwLmVudGVyIiwoZnVuY3Rpb24gZShuKXtyZXR1cm4gcmEodCksTHUoKS5vbkFjY2VwdENvbG9yKG4pfSkpKCJuZXdWYWx1ZSIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIHJhKHQpLEx1KCkub25WYWx1ZUlucHV0KG4pfSkpLFB1KCksV20oMyx1MywxLDIsImlucHV0IiwzMiksUHUoKSxPdSg0LCJkaXYiLDMwKSxPdSg1LCJkaXYiKSxNZig2LCJWIiksUHUoKSxPdSg3LCJkaXYiKSxNZig4LCJBIiksUHUoKSxQdSgpLFB1KCl9aWYoMiZ0KXtjb25zdCB0PUx1KCk7SmMoMiksdnUoInJnIiwxMDApKCJ2YWx1ZSIsbnVsbD09dC5oc2xhVGV4dD9udWxsOnQuaHNsYVRleHQubCksSmMoMSksdnUoIm5nSWYiLCJkaXNhYmxlZCIhPT10LmNwQWxwaGFDaGFubmVsKX19ZnVuY3Rpb24gZzModCxlKXtpZigxJnQpe2NvbnN0IHQ9RXUoKTtPdSgwLCJkaXYiLDQyKSxPdSgxLCJzcGFuIiw0MyksTnUoImNsaWNrIiwoZnVuY3Rpb24gZSgpe3JldHVybiByYSh0KSxMdSgpLm9uRm9ybWF0VG9nZ2xlKC0xKX0pKSxQdSgpLE91KDIsInNwYW4iLDQzKSxOdSgiY2xpY2siLChmdW5jdGlvbiBlKCl7cmV0dXJuIHJhKHQpLEx1KCkub25Gb3JtYXRUb2dnbGUoMSl9KSksUHUoKSxQdSgpfX1mdW5jdGlvbiBoMyh0LGUpe2lmKDEmdCl7Y29uc3QgdD1FdSgpO091KDAsInNwYW4iLDUwKSxOdSgiY2xpY2siLChmdW5jdGlvbiBlKG4pe3JhKHQpO2NvbnN0IG89THUoKS4kaW1wbGljaXQ7cmV0dXJuIEx1KDMpLm9uUmVtb3ZlUHJlc2V0Q29sb3IobixvKX0pKSxQdSgpfTImdCYmbGYoTHUoNCkuY3BSZW1vdmVDb2xvckJ1dHRvbkNsYXNzKX1mdW5jdGlvbiBiMyh0LGUpe2lmKDEmdCl7Y29uc3QgdD1FdSgpO091KDAsImRpdiIsNDgpLE51KCJjbGljayIsKGZ1bmN0aW9uIG4oKXtyYSh0KTtjb25zdCBvPWUuJGltcGxpY2l0O3JldHVybiBMdSgzKS5zZXRDb2xvckZyb21TdHJpbmcobyl9KSksV20oMSxoMywxLDMsInNwYW4iLDQ5KSxQdSgpfWlmKDImdCl7Y29uc3QgdD1lLiRpbXBsaWNpdCxuPUx1KDMpO29mKCJiYWNrZ3JvdW5kLWNvbG9yIix0KSxKYygxKSx2dSgibmdJZiIsbi5jcEFkZENvbG9yQnV0dG9uKX19ZnVuY3Rpb24geTModCxlKXtpZigxJnQmJihPdSgwLCJkaXYiKSxXbSgxLGIzLDIsMywiZGl2Iiw0NyksUHUoKSksMiZ0KXtjb25zdCB0PUx1KDIpO2xmKHQuY3BQcmVzZXRDb2xvcnNDbGFzcyksSmMoMSksdnUoIm5nRm9yT2YiLHQuY3BQcmVzZXRDb2xvcnMpfX1mdW5jdGlvbiBfMyh0LGUpe2lmKDEmdCYmKE91KDAsImRpdiIpLE1mKDEpLFB1KCkpLDImdCl7Y29uc3QgdD1MdSgyKTtsZih0LmNwUHJlc2V0RW1wdHlNZXNzYWdlQ2xhc3MpLEpjKDEpLHZmKHQuY3BQcmVzZXRFbXB0eU1lc3NhZ2UpfX1mdW5jdGlvbiBDMyh0LGUpe2lmKDEmdCYmKE91KDAsImRpdiIsNDQpLHd1KDEsImhyIiksT3UoMiwiZGl2Iiw0NSksTWYoMyksUHUoKSxXbSg0LHkzLDIsNCwiZGl2Iiw0NiksV20oNSxfMywyLDQsImRpdiIsNDYpLFB1KCkpLDImdCl7Y29uc3QgdD1MdSgpO0pjKDMpLHZmKHQuY3BQcmVzZXRMYWJlbCksSmMoMSksdnUoIm5nSWYiLG51bGw9PXQuY3BQcmVzZXRDb2xvcnM/bnVsbDp0LmNwUHJlc2V0Q29sb3JzLmxlbmd0aCksSmMoMSksdnUoIm5nSWYiLCEobnVsbCE9dC5jcFByZXNldENvbG9ycyYmdC5jcFByZXNldENvbG9ycy5sZW5ndGgpJiZ0LmNwQWRkQ29sb3JCdXR0b24pfX1mdW5jdGlvbiBNMyh0LGUpe2lmKDEmdCl7Y29uc3QgdD1FdSgpO091KDAsImJ1dHRvbiIsNTMpLE51KCJjbGljayIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIHJhKHQpLEx1KDIpLm9uQ2FuY2VsQ29sb3Iobil9KSksTWYoMSksUHUoKX1pZigyJnQpe2NvbnN0IHQ9THUoMik7bGYodC5jcENhbmNlbEJ1dHRvbkNsYXNzKSxKYygxKSx2Zih0LmNwQ2FuY2VsQnV0dG9uVGV4dCl9fWZ1bmN0aW9uIHYzKHQsZSl7aWYoMSZ0KXtjb25zdCB0PUV1KCk7T3UoMCwiYnV0dG9uIiw1MyksTnUoImNsaWNrIiwoZnVuY3Rpb24gZShuKXtyZXR1cm4gcmEodCksTHUoMikub25BY2NlcHRDb2xvcihuKX0pKSxNZigxKSxQdSgpfWlmKDImdCl7Y29uc3QgdD1MdSgyKTtsZih0LmNwT0tCdXR0b25DbGFzcyksSmMoMSksdmYodC5jcE9LQnV0dG9uVGV4dCl9fWZ1bmN0aW9uIHgzKHQsZSl7aWYoMSZ0JiYoT3UoMCwiZGl2Iiw1MSksV20oMSxNMywyLDQsImJ1dHRvbiIsNTIpLFdtKDIsdjMsMiw0LCJidXR0b24iLDUyKSxQdSgpKSwyJnQpe2NvbnN0IHQ9THUoKTtKYygxKSx2dSgibmdJZiIsdC5jcENhbmNlbEJ1dHRvbiksSmMoMSksdnUoIm5nSWYiLHQuY3BPS0J1dHRvbil9fXZhciBPMzshKGZ1bmN0aW9uKHQpe3RbdC5IRVg9MF09IkhFWCIsdFt0LlJHQkE9MV09IlJHQkEiLHRbdC5IU0xBPTJdPSJIU0xBIix0W3QuQ01ZSz0zXT0iQ01ZSyJ9KShPM3x8KE8zPXt9KSk7Y2xhc3MgUDN7Y29uc3RydWN0b3IodCxlLG4sbyl7dGhpcy5yPXQsdGhpcy5nPWUsdGhpcy5iPW4sdGhpcy5hPW99fWNsYXNzIHcze2NvbnN0cnVjdG9yKHQsZSxuLG8pe3RoaXMuaD10LHRoaXMucz1lLHRoaXMudj1uLHRoaXMuYT1vfX1jbGFzcyBrM3tjb25zdHJ1Y3Rvcih0LGUsbixvKXt0aGlzLmg9dCx0aGlzLnM9ZSx0aGlzLmw9bix0aGlzLmE9b319Y2xhc3MgUzN7Y29uc3RydWN0b3IodCxlLG4sbyxpPTEpe3RoaXMuYz10LHRoaXMubT1lLHRoaXMueT1uLHRoaXMuaz1vLHRoaXMuYT1pfX1jbGFzcyBEM3tjb25zdHJ1Y3Rvcigpe3RoaXMubmV3VmFsdWU9bmV3IEFifWlucHV0Q2hhbmdlKHQpe2NvbnN0IGU9dC50YXJnZXQudmFsdWU7aWYodm9pZCAwPT09dGhpcy5yZyl0aGlzLm5ld1ZhbHVlLmVtaXQoZSk7ZWxzZXtjb25zdCB0PXBhcnNlRmxvYXQoZSk7dGhpcy5uZXdWYWx1ZS5lbWl0KHt2OnQscmc6dGhpcy5yZ30pfX19RDMuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEQzKX0sRDMuybVkaXI9Sm8oe3R5cGU6RDMsc2VsZWN0b3JzOltbIiIsInRleHQiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJk51KCJpbnB1dCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4uaW5wdXRDaGFuZ2UoZSl9KSl9LGlucHV0czp7cmc6InJnIix0ZXh0OiJ0ZXh0In0sb3V0cHV0czp7bmV3VmFsdWU6Im5ld1ZhbHVlIn19KSxEMy5wcm9wRGVjb3JhdG9ycz17cmc6W3t0eXBlOnlffV0sdGV4dDpbe3R5cGU6eV99XSxuZXdWYWx1ZTpbe3R5cGU6X199XSxpbnB1dENoYW5nZTpbe3R5cGU6TV8sYXJnczpbImlucHV0IixbIiRldmVudCJdXX1dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEQzLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6Ilt0ZXh0XSJ9XX1dLChmdW5jdGlvbigpe3JldHVybltdfSkse25ld1ZhbHVlOlt7dHlwZTpfX31dLGlucHV0Q2hhbmdlOlt7dHlwZTpNXyxhcmdzOlsiaW5wdXQiLFsiJGV2ZW50Il1dfV0scmc6W3t0eXBlOnlffV0sdGV4dDpbe3R5cGU6eV99XX0pO2NsYXNzIEUze2NvbnN0cnVjdG9yKHQpe3RoaXMuZWxSZWY9dCx0aGlzLmRyYWdFbmQ9bmV3IEFiLHRoaXMuZHJhZ1N0YXJ0PW5ldyBBYix0aGlzLm5ld1ZhbHVlPW5ldyBBYix0aGlzLmxpc3RlbmVyTW92ZT10PT50aGlzLm1vdmUodCksdGhpcy5saXN0ZW5lclN0b3A9KCk9PnRoaXMuc3RvcCgpfW1vdXNlRG93bih0KXt0aGlzLnN0YXJ0KHQpfXRvdWNoU3RhcnQodCl7dGhpcy5zdGFydCh0KX1tb3ZlKHQpe3QucHJldmVudERlZmF1bHQoKSx0aGlzLnNldEN1cnNvcih0KX1zdGFydCh0KXt0aGlzLnNldEN1cnNvcih0KSx0LnN0b3BQcm9wYWdhdGlvbigpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHRoaXMubGlzdGVuZXJTdG9wKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsdGhpcy5saXN0ZW5lclN0b3ApLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdGhpcy5saXN0ZW5lck1vdmUpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsdGhpcy5saXN0ZW5lck1vdmUpLHRoaXMuZHJhZ1N0YXJ0LmVtaXQoKX1zdG9wKCl7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsdGhpcy5saXN0ZW5lclN0b3ApLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIix0aGlzLmxpc3RlbmVyU3RvcCksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix0aGlzLmxpc3RlbmVyTW92ZSksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIix0aGlzLmxpc3RlbmVyTW92ZSksdGhpcy5kcmFnRW5kLmVtaXQoKX1nZXRYKHQpe2NvbnN0IGU9dGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybih2b2lkIDAhPT10LnBhZ2VYP3QucGFnZVg6dC50b3VjaGVzWzBdLnBhZ2VYKS1lLmxlZnQtd2luZG93LnBhZ2VYT2Zmc2V0fWdldFkodCl7Y29uc3QgZT10aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuKHZvaWQgMCE9PXQucGFnZVk/dC5wYWdlWTp0LnRvdWNoZXNbMF0ucGFnZVkpLWUudG9wLXdpbmRvdy5wYWdlWU9mZnNldH1zZXRDdXJzb3IodCl7Y29uc3QgZT10aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGgsbj10aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0LG89TWF0aC5tYXgoMCxNYXRoLm1pbih0aGlzLmdldFgodCksZSkpLGk9TWF0aC5tYXgoMCxNYXRoLm1pbih0aGlzLmdldFkodCksbikpO3ZvaWQgMCE9PXRoaXMucmdYJiZ2b2lkIDAhPT10aGlzLnJnWT90aGlzLm5ld1ZhbHVlLmVtaXQoe3M6by9lLHY6MS1pL24scmdYOnRoaXMucmdYLHJnWTp0aGlzLnJnWX0pOnZvaWQgMD09PXRoaXMucmdYJiZ2b2lkIDAhPT10aGlzLnJnWT90aGlzLm5ld1ZhbHVlLmVtaXQoe3Y6aS9uLHJnWTp0aGlzLnJnWX0pOnZvaWQgMCE9PXRoaXMucmdYJiZ2b2lkIDA9PT10aGlzLnJnWSYmdGhpcy5uZXdWYWx1ZS5lbWl0KHt2Om8vZSxyZ1g6dGhpcy5yZ1h9KX19RTMuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEUzKShNdShjaCkpfSxFMy7JtWRpcj1Kbyh7dHlwZTpFMyxzZWxlY3RvcnM6W1siIiwic2xpZGVyIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MSZlJiZOdSgibW91c2Vkb3duIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5tb3VzZURvd24oZSl9KSkoInRvdWNoc3RhcnQiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLnRvdWNoU3RhcnQoZSl9KSl9LGlucHV0czp7cmdYOiJyZ1giLHJnWToicmdZIixzbGlkZXI6InNsaWRlciJ9LG91dHB1dHM6e2RyYWdFbmQ6ImRyYWdFbmQiLGRyYWdTdGFydDoiZHJhZ1N0YXJ0IixuZXdWYWx1ZToibmV3VmFsdWUifX0pLEUzLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6Y2h9XSxFMy5wcm9wRGVjb3JhdG9ycz17cmdYOlt7dHlwZTp5X31dLHJnWTpbe3R5cGU6eV99XSxzbGlkZXI6W3t0eXBlOnlffV0sZHJhZ0VuZDpbe3R5cGU6X199XSxkcmFnU3RhcnQ6W3t0eXBlOl9ffV0sbmV3VmFsdWU6W3t0eXBlOl9ffV0sbW91c2VEb3duOlt7dHlwZTpNXyxhcmdzOlsibW91c2Vkb3duIixbIiRldmVudCJdXX1dLHRvdWNoU3RhcnQ6W3t0eXBlOk1fLGFyZ3M6WyJ0b3VjaHN0YXJ0IixbIiRldmVudCJdXX1dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEUzLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6IltzbGlkZXJdIn1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmNofV19KSx7ZHJhZ0VuZDpbe3R5cGU6X199XSxkcmFnU3RhcnQ6W3t0eXBlOl9ffV0sbmV3VmFsdWU6W3t0eXBlOl9ffV0sbW91c2VEb3duOlt7dHlwZTpNXyxhcmdzOlsibW91c2Vkb3duIixbIiRldmVudCJdXX1dLHRvdWNoU3RhcnQ6W3t0eXBlOk1fLGFyZ3M6WyJ0b3VjaHN0YXJ0IixbIiRldmVudCJdXX1dLHJnWDpbe3R5cGU6eV99XSxyZ1k6W3t0eXBlOnlffV0sc2xpZGVyOlt7dHlwZTp5X31dfSk7Y2xhc3MgQTN7Y29uc3RydWN0b3IodCxlLG4sbyl7dGhpcy5oPXQsdGhpcy5zPWUsdGhpcy52PW4sdGhpcy5hPW99fWNsYXNzIFIze2NvbnN0cnVjdG9yKHQsZSxuLG8pe3RoaXMuaD10LHRoaXMucz1lLHRoaXMudj1uLHRoaXMuYT1vfX1jbGFzcyBUM3tjb25zdHJ1Y3Rvcigpe3RoaXMuYWN0aXZlPW51bGx9c2V0QWN0aXZlKHQpe3RoaXMuYWN0aXZlJiZ0aGlzLmFjdGl2ZSE9PXQmJiJpbmxpbmUiIT09dGhpcy5hY3RpdmUuY3BEaWFsb2dEaXNwbGF5JiZ0aGlzLmFjdGl2ZS5jbG9zZURpYWxvZygpLHRoaXMuYWN0aXZlPXR9aHN2YTJoc2xhKHQpe2NvbnN0IGU9dC5oLG49dC5zLG89dC52LGk9dC5hO2lmKDA9PT1vKXJldHVybiBuZXcgazMoZSwwLDAsaSk7aWYoMD09PW4mJjE9PT1vKXJldHVybiBuZXcgazMoZSwxLDEsaSk7e2NvbnN0IHQ9byooMi1uKS8yO3JldHVybiBuZXcgazMoZSxvKm4vKDEtTWF0aC5hYnMoMip0LTEpKSx0LGkpfX1oc2xhMmhzdmEodCl7Y29uc3QgZT1NYXRoLm1pbih0LmgsMSksbj1NYXRoLm1pbih0LnMsMSksbz1NYXRoLm1pbih0LmwsMSksaT1NYXRoLm1pbih0LmEsMSk7aWYoMD09PW8pcmV0dXJuIG5ldyB3MyhlLDAsMCxpKTt7Y29uc3QgdD1vK24qKDEtTWF0aC5hYnMoMipvLTEpKS8yO3JldHVybiBuZXcgdzMoZSwyKih0LW8pL3QsdCxpKX19aHN2YVRvUmdiYSh0KXtsZXQgZSxuLG87Y29uc3QgaT10LmgsYT10LnMscj10LnYscz10LmEsbD1NYXRoLmZsb29yKDYqaSksYz02KmktbCxkPXIqKDEtYSkscD1yKigxLWMqYSksbT1yKigxLSgxLWMpKmEpO3N3aXRjaChsJTYpe2Nhc2UgMDplPXIsbj1tLG89ZDticmVhaztjYXNlIDE6ZT1wLG49cixvPWQ7YnJlYWs7Y2FzZSAyOmU9ZCxuPXIsbz1tO2JyZWFrO2Nhc2UgMzplPWQsbj1wLG89cjticmVhaztjYXNlIDQ6ZT1tLG49ZCxvPXI7YnJlYWs7Y2FzZSA1OmU9cixuPWQsbz1wO2JyZWFrO2RlZmF1bHQ6ZT0wLG49MCxvPTB9cmV0dXJuIG5ldyBQMyhlLG4sbyxzKX1jbXlrVG9SZ2IodCl7cmV0dXJuIG5ldyBQMygoMS10LmMpKigxLXQuayksKDEtdC5tKSooMS10LmspLCgxLXQueSkqKDEtdC5rKSx0LmEpfXJnYmFUb0NteWsodCl7Y29uc3QgZT0xLU1hdGgubWF4KHQucix0LmcsdC5iKTtyZXR1cm4gMT09PWU/bmV3IFMzKDAsMCwwLDEsdC5hKTpuZXcgUzMoKDEtdC5yLWUpLygxLWUpLCgxLXQuZy1lKS8oMS1lKSwoMS10LmItZSkvKDEtZSksZSx0LmEpfXJnYmFUb0hzdmEodCl7bGV0IGUsbjtjb25zdCBvPU1hdGgubWluKHQuciwxKSxpPU1hdGgubWluKHQuZywxKSxhPU1hdGgubWluKHQuYiwxKSxyPU1hdGgubWluKHQuYSwxKSxzPU1hdGgubWF4KG8saSxhKSxsPU1hdGgubWluKG8saSxhKSxjPXMsZD1zLWw7aWYobj0wPT09cz8wOmQvcyxzPT09bCllPTA7ZWxzZXtzd2l0Y2gocyl7Y2FzZSBvOmU9KGktYSkvZCsoaTxhPzY6MCk7YnJlYWs7Y2FzZSBpOmU9KGEtbykvZCsyO2JyZWFrO2Nhc2UgYTplPShvLWkpL2QrNDticmVhaztkZWZhdWx0OmU9MH1lLz02fXJldHVybiBuZXcgdzMoZSxuLGMscil9cmdiYVRvSGV4KHQsZSl7bGV0IG49IiMiKygxPDwyNHx0LnI8PDE2fHQuZzw8OHx0LmIpLnRvU3RyaW5nKDE2KS5zdWJzdHIoMSk7cmV0dXJuIGUmJihuKz0oMjU2fE1hdGgucm91bmQoMjU1KnQuYSkpLnRvU3RyaW5nKDE2KS5zdWJzdHIoMSkpLG59bm9ybWFsaXplQ01ZSyh0KXtyZXR1cm4gbmV3IFMzKHQuYy8xMDAsdC5tLzEwMCx0LnkvMTAwLHQuay8xMDAsdC5hKX1kZW5vcm1hbGl6ZUNNWUsodCl7cmV0dXJuIG5ldyBTMyhNYXRoLmZsb29yKDEwMCp0LmMpLE1hdGguZmxvb3IoMTAwKnQubSksTWF0aC5mbG9vcigxMDAqdC55KSxNYXRoLmZsb29yKDEwMCp0LmspLHQuYSl9ZGVub3JtYWxpemVSR0JBKHQpe3JldHVybiBuZXcgUDMoTWF0aC5yb3VuZCgyNTUqdC5yKSxNYXRoLnJvdW5kKDI1NSp0LmcpLE1hdGgucm91bmQoMjU1KnQuYiksdC5hKX1zdHJpbmdUb0hzdmEodD0iIixlPSExKXtsZXQgbj1udWxsO3Q9KHR8fCIiKS50b0xvd2VyQ2FzZSgpO2NvbnN0IG89W3tyZTovKHJnYilhP1woXHMqKFxkezEsM30pXHMqLFxzKihcZHsxLDN9KVxzKiU/LFxzKihcZHsxLDN9KVxzKiU/KD86LFxzKihcZCsoPzpcLlxkKyk/KVxzKik/XCkvLHBhcnNlOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgUDMocGFyc2VJbnQodFsyXSwxMCkvMjU1LHBhcnNlSW50KHRbM10sMTApLzI1NSxwYXJzZUludCh0WzRdLDEwKS8yNTUsaXNOYU4ocGFyc2VGbG9hdCh0WzVdKSk/MTpwYXJzZUZsb2F0KHRbNV0pKX19LHtyZTovKGhzbClhP1woXHMqKFxkezEsM30pXHMqLFxzKihcZHsxLDN9KSVccyosXHMqKFxkezEsM30pJVxzKig/OixccyooXGQrKD86XC5cZCspPylccyopP1wpLyxwYXJzZTpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGszKHBhcnNlSW50KHRbMl0sMTApLzM2MCxwYXJzZUludCh0WzNdLDEwKS8xMDAscGFyc2VJbnQodFs0XSwxMCkvMTAwLGlzTmFOKHBhcnNlRmxvYXQodFs1XSkpPzE6cGFyc2VGbG9hdCh0WzVdKSl9fV07by5wdXNoKGU/e3JlOi8jKFthLWZBLUYwLTldezJ9KShbYS1mQS1GMC05XXsyfSkoW2EtZkEtRjAtOV17Mn0pKFthLWZBLUYwLTldezJ9KT8kLyxwYXJzZTpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IFAzKHBhcnNlSW50KHRbMV0sMTYpLzI1NSxwYXJzZUludCh0WzJdLDE2KS8yNTUscGFyc2VJbnQodFszXSwxNikvMjU1LHBhcnNlSW50KHRbNF18fCJGRiIsMTYpLzI1NSl9fTp7cmU6LyMoW2EtZkEtRjAtOV17Mn0pKFthLWZBLUYwLTldezJ9KShbYS1mQS1GMC05XXsyfSkkLyxwYXJzZTpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IFAzKHBhcnNlSW50KHRbMV0sMTYpLzI1NSxwYXJzZUludCh0WzJdLDE2KS8yNTUscGFyc2VJbnQodFszXSwxNikvMjU1LDEpfX0pLG8ucHVzaCh7cmU6LyMoW2EtZkEtRjAtOV0pKFthLWZBLUYwLTldKShbYS1mQS1GMC05XSkkLyxwYXJzZTpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IFAzKHBhcnNlSW50KHRbMV0rdFsxXSwxNikvMjU1LHBhcnNlSW50KHRbMl0rdFsyXSwxNikvMjU1LHBhcnNlSW50KHRbM10rdFszXSwxNikvMjU1LDEpfX0pO2Zvcihjb25zdCBlIGluIG8paWYoby5oYXNPd25Qcm9wZXJ0eShlKSl7Y29uc3QgaT1vW2VdLGE9aS5yZS5leGVjKHQpLHI9YSYmaS5wYXJzZShhKTtpZihyKXJldHVybiByIGluc3RhbmNlb2YgUDM/bj10aGlzLnJnYmFUb0hzdmEocik6ciBpbnN0YW5jZW9mIGszJiYobj10aGlzLmhzbGEyaHN2YShyKSksbn1yZXR1cm4gbn1vdXRwdXRGb3JtYXQodCxlLG4pe3N3aXRjaCgiYXV0byI9PT1lJiYoZT10LmE8MT8icmdiYSI6ImhleCIpLGUpe2Nhc2UiaHNsYSI6Y29uc3QgZT10aGlzLmhzdmEyaHNsYSh0KSxvPW5ldyBrMyhNYXRoLnJvdW5kKDM2MCplLmgpLE1hdGgucm91bmQoMTAwKmUucyksTWF0aC5yb3VuZCgxMDAqZS5sKSxNYXRoLnJvdW5kKDEwMCplLmEpLzEwMCk7cmV0dXJuIHQuYTwxfHwiYWx3YXlzIj09PW4/ImhzbGEoIitvLmgrIiwiK28ucysiJSwiK28ubCsiJSwiK28uYSsiKSI6ImhzbCgiK28uaCsiLCIrby5zKyIlLCIrby5sKyIlKSI7Y2FzZSJyZ2JhIjpjb25zdCBpPXRoaXMuZGVub3JtYWxpemVSR0JBKHRoaXMuaHN2YVRvUmdiYSh0KSk7cmV0dXJuIHQuYTwxfHwiYWx3YXlzIj09PW4/InJnYmEoIitpLnIrIiwiK2kuZysiLCIraS5iKyIsIitNYXRoLnJvdW5kKDEwMCppLmEpLzEwMCsiKSI6InJnYigiK2kucisiLCIraS5nKyIsIitpLmIrIikiO2RlZmF1bHQ6Y29uc3QgYT0iYWx3YXlzIj09PW58fCJmb3JjZWQiPT09bjtyZXR1cm4gdGhpcy5yZ2JhVG9IZXgodGhpcy5kZW5vcm1hbGl6ZVJHQkEodGhpcy5oc3ZhVG9SZ2JhKHQpKSxhKX19fVQzLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxUMyl9LFQzLsm1cHJvdj1sbyh7dG9rZW46VDMsZmFjdG9yeTpUMy7JtWZhY30pLFQzLmN0b3JQYXJhbWV0ZXJzPSgpPT5bXSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFQzLFt7dHlwZTpKbX1dLChmdW5jdGlvbigpe3JldHVybltdfSksbnVsbCk7Y2xhc3MgTjN7Y29uc3RydWN0b3IodCxlLG4pe3RoaXMuZWxSZWY9dCx0aGlzLmNkUmVmPWUsdGhpcy5zZXJ2aWNlPW4sdGhpcy5pc0lFMTA9ITEsdGhpcy5kaWFsb2dBcnJvd1NpemU9MTAsdGhpcy5kaWFsb2dBcnJvd09mZnNldD0xNSx0aGlzLmRpYWxvZ0lucHV0RmllbGRzPVtPMy5IRVgsTzMuUkdCQSxPMy5IU0xBLE8zLkNNWUtdLHRoaXMudXNlUm9vdFZpZXdDb250YWluZXI9ITF9aGFuZGxlRXNjKHQpe3RoaXMuc2hvdyYmInBvcHVwIj09PXRoaXMuY3BEaWFsb2dEaXNwbGF5JiZ0aGlzLm9uQ2FuY2VsQ29sb3IodCl9aGFuZGxlRW50ZXIodCl7dGhpcy5zaG93JiYicG9wdXAiPT09dGhpcy5jcERpYWxvZ0Rpc3BsYXkmJnRoaXMub25BY2NlcHRDb2xvcih0KX1uZ09uSW5pdCgpe3RoaXMuc2xpZGVyPW5ldyBBMygwLDAsMCwwKSx0aGlzLnNsaWRlckRpbU1heD1uZXcgUjModGhpcy5odWVTbGlkZXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aHx8MTQwLHRoaXMuY3BXaWR0aCwxMzAsdGhpcy5hbHBoYVNsaWRlci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRofHwxNDApLHRoaXMuZm9ybWF0PXRoaXMuY3BDbXlrRW5hYmxlZD9PMy5DTVlLOiJyZ2JhIj09PXRoaXMuY3BPdXRwdXRGb3JtYXQ/TzMuUkdCQToiaHNsYSI9PT10aGlzLmNwT3V0cHV0Rm9ybWF0P08zLkhTTEE6TzMuSEVYLHRoaXMubGlzdGVuZXJNb3VzZURvd249dD0+e3RoaXMub25Nb3VzZURvd24odCl9LHRoaXMubGlzdGVuZXJSZXNpemU9KCk9Pnt0aGlzLm9uUmVzaXplKCl9LHRoaXMub3BlbkRpYWxvZyh0aGlzLmluaXRpYWxDb2xvciwhMSl9bmdPbkRlc3Ryb3koKXt0aGlzLmNsb3NlRGlhbG9nKCl9bmdBZnRlclZpZXdJbml0KCl7MjMwPT09dGhpcy5jcFdpZHRoJiYiaW5saW5lIiE9PXRoaXMuY3BEaWFsb2dEaXNwbGF5fHwodGhpcy5zbGlkZXJEaW1NYXg9bmV3IFIzKHRoaXMuaHVlU2xpZGVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGh8fDE0MCx0aGlzLmNwV2lkdGgsMTMwLHRoaXMuYWxwaGFTbGlkZXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aHx8MTQwKSx0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCExKSx0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKSl9b3BlbkRpYWxvZyh0LGU9ITApe3RoaXMuc2VydmljZS5zZXRBY3RpdmUodGhpcyksdGhpcy53aWR0aHx8KHRoaXMuY3BXaWR0aD10aGlzLmRpcmVjdGl2ZUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCksdGhpcy5oZWlnaHR8fCh0aGlzLmhlaWdodD0zMjApLHRoaXMuc2V0SW5pdGlhbENvbG9yKHQpLHRoaXMuc2V0Q29sb3JGcm9tU3RyaW5nKHQsZSksdGhpcy5vcGVuQ29sb3JQaWNrZXIoKX1jbG9zZURpYWxvZygpe3RoaXMuY2xvc2VDb2xvclBpY2tlcigpfXNldHVwRGlhbG9nKHQsZSxuLG8saSxhLHIscyxsLGMsZCxwLG0sdSxmLGcsaCxiLHksXyxDLE0sdix4LE8sUCx3LGssUyxELEUsQSxSLFQsTil7dGhpcy5zZXRJbml0aWFsQ29sb3IobiksdGhpcy5zZXRDb2xvck1vZGUocyksdGhpcy5pc0lFMTA9MTA9PT0oZnVuY3Rpb24gSSgpe2xldCB0PSIiOyJ1bmRlZmluZWQiIT10eXBlb2YgbmF2aWdhdG9yJiYodD1uYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkpO2NvbnN0IGU9dC5pbmRleE9mKCJtc2llICIpO3JldHVybiBlPjAmJnBhcnNlSW50KHQuc3Vic3RyaW5nKGUrNSx0LmluZGV4T2YoIi4iLGUpKSwxMCl9KSgpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2U9dCx0aGlzLmRpcmVjdGl2ZUVsZW1lbnRSZWY9ZSx0aGlzLmNwRGlzYWJsZUlucHV0PXAsdGhpcy5jcENteWtFbmFibGVkPWwsdGhpcy5jcEFscGhhQ2hhbm5lbD1jLHRoaXMuY3BPdXRwdXRGb3JtYXQ9ZCx0aGlzLmNwRGlhbG9nRGlzcGxheT1hLHRoaXMuY3BJZ25vcmVkRWxlbWVudHM9bSx0aGlzLmNwU2F2ZUNsaWNrT3V0c2lkZT11LHRoaXMuY3BDbG9zZUNsaWNrT3V0c2lkZT1mLHRoaXMudXNlUm9vdFZpZXdDb250YWluZXI9Zyx0aGlzLndpZHRoPXRoaXMuY3BXaWR0aD1wYXJzZUludChvLDEwKSx0aGlzLmhlaWdodD10aGlzLmNwSGVpZ2h0PXBhcnNlSW50KGksMTApLHRoaXMuY3BQb3NpdGlvbj1oLHRoaXMuY3BQb3NpdGlvbk9mZnNldD1wYXJzZUludChiLDEwKSx0aGlzLmNwT0tCdXR0b249UCx0aGlzLmNwT0tCdXR0b25UZXh0PWssdGhpcy5jcE9LQnV0dG9uQ2xhc3M9dyx0aGlzLmNwQ2FuY2VsQnV0dG9uPVMsdGhpcy5jcENhbmNlbEJ1dHRvblRleHQ9RSx0aGlzLmNwQ2FuY2VsQnV0dG9uQ2xhc3M9RCx0aGlzLmZhbGxiYWNrQ29sb3I9cnx8IiNmZmYiLHRoaXMuc2V0UHJlc2V0Q29uZmlnKF8sQyksdGhpcy5jcFByZXNldENvbG9yc0NsYXNzPU0sdGhpcy5jcE1heFByZXNldENvbG9yc0xlbmd0aD12LHRoaXMuY3BQcmVzZXRFbXB0eU1lc3NhZ2U9eCx0aGlzLmNwUHJlc2V0RW1wdHlNZXNzYWdlQ2xhc3M9Tyx0aGlzLmNwQWRkQ29sb3JCdXR0b249QSx0aGlzLmNwQWRkQ29sb3JCdXR0b25UZXh0PVQsdGhpcy5jcEFkZENvbG9yQnV0dG9uQ2xhc3M9Uix0aGlzLmNwUmVtb3ZlQ29sb3JCdXR0b25DbGFzcz1OLHl8fCh0aGlzLmRpYWxvZ0Fycm93T2Zmc2V0PTApLCJpbmxpbmUiPT09YSYmKHRoaXMuZGlhbG9nQXJyb3dTaXplPTAsdGhpcy5kaWFsb2dBcnJvd09mZnNldD0wKSwiaGV4Ij09PWQmJiJhbHdheXMiIT09YyYmImZvcmNlZCIhPT1jJiYodGhpcy5jcEFscGhhQ2hhbm5lbD0iZGlzYWJsZWQiKX1zZXRDb2xvck1vZGUodCl7c3dpdGNoKHQudG9TdHJpbmcoKS50b1VwcGVyQ2FzZSgpKXtjYXNlIjEiOmNhc2UiQyI6Y2FzZSJDT0xPUiI6dGhpcy5jcENvbG9yTW9kZT0xO2JyZWFrO2Nhc2UiMiI6Y2FzZSJHIjpjYXNlIkdSQVlTQ0FMRSI6dGhpcy5jcENvbG9yTW9kZT0yO2JyZWFrO2Nhc2UiMyI6Y2FzZSJQIjpjYXNlIlBSRVNFVFMiOnRoaXMuY3BDb2xvck1vZGU9MzticmVhaztkZWZhdWx0OnRoaXMuY3BDb2xvck1vZGU9MX19c2V0SW5pdGlhbENvbG9yKHQpe3RoaXMuaW5pdGlhbENvbG9yPXR9c2V0UHJlc2V0Q29uZmlnKHQsZSl7dGhpcy5jcFByZXNldExhYmVsPXQsdGhpcy5jcFByZXNldENvbG9ycz1lfXNldENvbG9yRnJvbVN0cmluZyh0LGU9ITAsbj0hMCl7bGV0IG87ImFsd2F5cyI9PT10aGlzLmNwQWxwaGFDaGFubmVsfHwiZm9yY2VkIj09PXRoaXMuY3BBbHBoYUNoYW5uZWw/KG89dGhpcy5zZXJ2aWNlLnN0cmluZ1RvSHN2YSh0LCEwKSxvfHx0aGlzLmhzdmF8fChvPXRoaXMuc2VydmljZS5zdHJpbmdUb0hzdmEodCwhMSkpKTpvPXRoaXMuc2VydmljZS5zdHJpbmdUb0hzdmEodCwhMSksb3x8dGhpcy5oc3ZhfHwobz10aGlzLnNlcnZpY2Uuc3RyaW5nVG9Ic3ZhKHRoaXMuZmFsbGJhY2tDb2xvciwhMSkpLG8mJih0aGlzLmhzdmE9byx0aGlzLnNsaWRlckg9dGhpcy5oc3ZhLmgsImhleCI9PT10aGlzLmNwT3V0cHV0Rm9ybWF0JiYiZGlzYWJsZWQiPT09dGhpcy5jcEFscGhhQ2hhbm5lbCYmKHRoaXMuaHN2YS5hPTEpLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoZSxuKSl9b25SZXNpemUoKXsiZml4ZWQiPT09dGhpcy5wb3NpdGlvbj90aGlzLnNldERpYWxvZ1Bvc2l0aW9uKCk6ImlubGluZSIhPT10aGlzLmNwRGlhbG9nRGlzcGxheSYmdGhpcy5jbG9zZUNvbG9yUGlja2VyKCl9b25EcmFnRW5kKHQpe3RoaXMuZGlyZWN0aXZlSW5zdGFuY2Uuc2xpZGVyRHJhZ0VuZCh7c2xpZGVyOnQsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uRHJhZ1N0YXJ0KHQpe3RoaXMuZGlyZWN0aXZlSW5zdGFuY2Uuc2xpZGVyRHJhZ1N0YXJ0KHtzbGlkZXI6dCxjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25Nb3VzZURvd24odCl7IXRoaXMuc2hvd3x8dGhpcy5pc0lFMTB8fCJwb3B1cCIhPT10aGlzLmNwRGlhbG9nRGlzcGxheXx8dC50YXJnZXQ9PT10aGlzLmRpcmVjdGl2ZUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudHx8dGhpcy5pc0Rlc2NlbmRhbnQodGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LHQudGFyZ2V0KXx8dGhpcy5pc0Rlc2NlbmRhbnQodGhpcy5kaXJlY3RpdmVFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsdC50YXJnZXQpfHwwIT09dGhpcy5jcElnbm9yZWRFbGVtZW50cy5maWx0ZXIoKGU9PmU9PT10LnRhcmdldCkpLmxlbmd0aHx8KHRoaXMuY3BTYXZlQ2xpY2tPdXRzaWRlP3RoaXMuZGlyZWN0aXZlSW5zdGFuY2UuY29sb3JTZWxlY3RlZCh0aGlzLm91dHB1dENvbG9yKToodGhpcy5oc3ZhPW51bGwsdGhpcy5zZXRDb2xvckZyb21TdHJpbmcodGhpcy5pbml0aWFsQ29sb3IsITEpLHRoaXMuY3BDbXlrRW5hYmxlZCYmdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5jbXlrQ2hhbmdlZCh0aGlzLmNteWtDb2xvciksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5jb2xvckNoYW5nZWQodGhpcy5pbml0aWFsQ29sb3IpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuY29sb3JDYW5jZWxlZCgpKSx0aGlzLmNwQ2xvc2VDbGlja091dHNpZGUmJnRoaXMuY2xvc2VDb2xvclBpY2tlcigpKX1vbkFjY2VwdENvbG9yKHQpe3Quc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5vdXRwdXRDb2xvciYmdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5jb2xvclNlbGVjdGVkKHRoaXMub3V0cHV0Q29sb3IpLCJwb3B1cCI9PT10aGlzLmNwRGlhbG9nRGlzcGxheSYmdGhpcy5jbG9zZUNvbG9yUGlja2VyKCl9b25DYW5jZWxDb2xvcih0KXt0aGlzLmhzdmE9bnVsbCx0LnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuY29sb3JDYW5jZWxlZCgpLHRoaXMuc2V0Q29sb3JGcm9tU3RyaW5nKHRoaXMuaW5pdGlhbENvbG9yLCEwKSwicG9wdXAiPT09dGhpcy5jcERpYWxvZ0Rpc3BsYXkmJih0aGlzLmNwQ215a0VuYWJsZWQmJnRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuY215a0NoYW5nZWQodGhpcy5jbXlrQ29sb3IpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuY29sb3JDaGFuZ2VkKHRoaXMuaW5pdGlhbENvbG9yLCEwKSx0aGlzLmNsb3NlQ29sb3JQaWNrZXIoKSl9b25Gb3JtYXRUb2dnbGUodCl7Y29uc3QgZT10aGlzLmRpYWxvZ0lucHV0RmllbGRzLmxlbmd0aC0odGhpcy5jcENteWtFbmFibGVkPzA6MSksbj0oKHRoaXMuZGlhbG9nSW5wdXRGaWVsZHMuaW5kZXhPZih0aGlzLmZvcm1hdCkrdCklZStlKSVlO3RoaXMuZm9ybWF0PXRoaXMuZGlhbG9nSW5wdXRGaWVsZHNbbl19b25Db2xvckNoYW5nZSh0KXt0aGlzLmhzdmEucz10LnMvdC5yZ1gsdGhpcy5oc3ZhLnY9dC52L3QucmdZLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLnNsaWRlckNoYW5nZWQoe3NsaWRlcjoibGlnaHRuZXNzIix2YWx1ZTp0aGlzLmhzdmEudixjb2xvcjp0aGlzLm91dHB1dENvbG9yfSksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5zbGlkZXJDaGFuZ2VkKHtzbGlkZXI6InNhdHVyYXRpb24iLHZhbHVlOnRoaXMuaHN2YS5zLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vbkh1ZUNoYW5nZSh0KXt0aGlzLmhzdmEuaD10LnYvdC5yZ1gsdGhpcy5zbGlkZXJIPXRoaXMuaHN2YS5oLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLnNsaWRlckNoYW5nZWQoe3NsaWRlcjoiaHVlIix2YWx1ZTp0aGlzLmhzdmEuaCxjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25WYWx1ZUNoYW5nZSh0KXt0aGlzLmhzdmEudj10LnYvdC5yZ1gsdGhpcy51cGRhdGVDb2xvclBpY2tlcigpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2Uuc2xpZGVyQ2hhbmdlZCh7c2xpZGVyOiJ2YWx1ZSIsdmFsdWU6dGhpcy5oc3ZhLnYsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uQWxwaGFDaGFuZ2UodCl7dGhpcy5oc3ZhLmE9dC52L3QucmdYLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLnNsaWRlckNoYW5nZWQoe3NsaWRlcjoiYWxwaGEiLHZhbHVlOnRoaXMuaHN2YS5hLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vbkhleElucHV0KHQpe2lmKG51bGw9PT10KXRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKTtlbHNle3QmJiIjIiE9PXRbMF0mJih0PSIjIit0KTtsZXQgZT0vXiMoW2EtZjAtOV17M318W2EtZjAtOV17Nn0pJC9naTsiYWx3YXlzIj09PXRoaXMuY3BBbHBoYUNoYW5uZWwmJihlPS9eIyhbYS1mMC05XXszfXxbYS1mMC05XXs2fXxbYS1mMC05XXs4fSkkL2dpKTtjb25zdCBuPWUudGVzdCh0KTtuJiYodC5sZW5ndGg8NSYmKHQ9IiMiK3Quc3Vic3RyaW5nKDEpLnNwbGl0KCIiKS5tYXAoKHQ9PnQrdCkpLmpvaW4oIiIpKSwiZm9yY2VkIj09PXRoaXMuY3BBbHBoYUNoYW5uZWwmJih0Kz1NYXRoLnJvdW5kKDI1NSp0aGlzLmhzdmEuYSkudG9TdHJpbmcoMTYpKSx0aGlzLnNldENvbG9yRnJvbVN0cmluZyh0LCEwLCExKSksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5pbnB1dENoYW5nZWQoe2lucHV0OiJoZXgiLHZhbGlkOm4sdmFsdWU6dCxjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9fW9uUmVkSW5wdXQodCl7Y29uc3QgZT10aGlzLnNlcnZpY2UuaHN2YVRvUmdiYSh0aGlzLmhzdmEpLG49IWlzTmFOKHQudikmJnQudj49MCYmdC52PD10LnJnO24mJihlLnI9dC52L3QucmcsdGhpcy5oc3ZhPXRoaXMuc2VydmljZS5yZ2JhVG9Ic3ZhKGUpLHRoaXMuc2xpZGVySD10aGlzLmhzdmEuaCx0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoicmVkIix2YWxpZDpuLHZhbHVlOmUucixjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25CbHVlSW5wdXQodCl7Y29uc3QgZT10aGlzLnNlcnZpY2UuaHN2YVRvUmdiYSh0aGlzLmhzdmEpLG49IWlzTmFOKHQudikmJnQudj49MCYmdC52PD10LnJnO24mJihlLmI9dC52L3QucmcsdGhpcy5oc3ZhPXRoaXMuc2VydmljZS5yZ2JhVG9Ic3ZhKGUpLHRoaXMuc2xpZGVySD10aGlzLmhzdmEuaCx0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoiYmx1ZSIsdmFsaWQ6bix2YWx1ZTplLmIsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uR3JlZW5JbnB1dCh0KXtjb25zdCBlPXRoaXMuc2VydmljZS5oc3ZhVG9SZ2JhKHRoaXMuaHN2YSksbj0haXNOYU4odC52KSYmdC52Pj0wJiZ0LnY8PXQucmc7biYmKGUuZz10LnYvdC5yZyx0aGlzLmhzdmE9dGhpcy5zZXJ2aWNlLnJnYmFUb0hzdmEoZSksdGhpcy5zbGlkZXJIPXRoaXMuaHN2YS5oLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKSksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5pbnB1dENoYW5nZWQoe2lucHV0OiJncmVlbiIsdmFsaWQ6bix2YWx1ZTplLmcsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uSHVlSW5wdXQodCl7Y29uc3QgZT0haXNOYU4odC52KSYmdC52Pj0wJiZ0LnY8PXQucmc7ZSYmKHRoaXMuaHN2YS5oPXQudi90LnJnLHRoaXMuc2xpZGVySD10aGlzLmhzdmEuaCx0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoiaHVlIix2YWxpZDplLHZhbHVlOnRoaXMuaHN2YS5oLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vblZhbHVlSW5wdXQodCl7Y29uc3QgZT0haXNOYU4odC52KSYmdC52Pj0wJiZ0LnY8PXQucmc7ZSYmKHRoaXMuaHN2YS52PXQudi90LnJnLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKSksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5pbnB1dENoYW5nZWQoe2lucHV0OiJ2YWx1ZSIsdmFsaWQ6ZSx2YWx1ZTp0aGlzLmhzdmEudixjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25BbHBoYUlucHV0KHQpe2NvbnN0IGU9IWlzTmFOKHQudikmJnQudj49MCYmdC52PD10LnJnO2UmJih0aGlzLmhzdmEuYT10LnYvdC5yZyx0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoiYWxwaGEiLHZhbGlkOmUsdmFsdWU6dGhpcy5oc3ZhLmEsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uTGlnaHRuZXNzSW5wdXQodCl7Y29uc3QgZT10aGlzLnNlcnZpY2UuaHN2YTJoc2xhKHRoaXMuaHN2YSksbj0haXNOYU4odC52KSYmdC52Pj0wJiZ0LnY8PXQucmc7biYmKGUubD10LnYvdC5yZyx0aGlzLmhzdmE9dGhpcy5zZXJ2aWNlLmhzbGEyaHN2YShlKSx0aGlzLnNsaWRlckg9dGhpcy5oc3ZhLmgsdGhpcy51cGRhdGVDb2xvclBpY2tlcigpKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmlucHV0Q2hhbmdlZCh7aW5wdXQ6ImxpZ2h0bmVzcyIsdmFsaWQ6bix2YWx1ZTplLmwsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uU2F0dXJhdGlvbklucHV0KHQpe2NvbnN0IGU9dGhpcy5zZXJ2aWNlLmhzdmEyaHNsYSh0aGlzLmhzdmEpLG49IWlzTmFOKHQudikmJnQudj49MCYmdC52PD10LnJnO24mJihlLnM9dC52L3QucmcsdGhpcy5oc3ZhPXRoaXMuc2VydmljZS5oc2xhMmhzdmEoZSksdGhpcy5zbGlkZXJIPXRoaXMuaHN2YS5oLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKSksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5pbnB1dENoYW5nZWQoe2lucHV0OiJzYXR1cmF0aW9uIix2YWxpZDpuLHZhbHVlOmUucyxjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25DeWFuSW5wdXQodCl7IWlzTmFOKHQudikmJnQudj49MCYmdC52PD10LnJnJiYodGhpcy5jbXlrLmM9dC52LHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoITEsITAsITApKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmlucHV0Q2hhbmdlZCh7aW5wdXQ6ImN5YW4iLHZhbGlkOiEwLHZhbHVlOnRoaXMuY215ay5jLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vbk1hZ2VudGFJbnB1dCh0KXshaXNOYU4odC52KSYmdC52Pj0wJiZ0LnY8PXQucmcmJih0aGlzLmNteWsubT10LnYsdGhpcy51cGRhdGVDb2xvclBpY2tlcighMSwhMCwhMCkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoibWFnZW50YSIsdmFsaWQ6ITAsdmFsdWU6dGhpcy5jbXlrLm0sY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uWWVsbG93SW5wdXQodCl7IWlzTmFOKHQudikmJnQudj49MCYmdC52PD10LnJnJiYodGhpcy5jbXlrLnk9dC52LHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoITEsITAsITApKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmlucHV0Q2hhbmdlZCh7aW5wdXQ6InllbGxvdyIsdmFsaWQ6ITAsdmFsdWU6dGhpcy5jbXlrLnksY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uQmxhY2tJbnB1dCh0KXshaXNOYU4odC52KSYmdC52Pj0wJiZ0LnY8PXQucmcmJih0aGlzLmNteWsuaz10LnYsdGhpcy51cGRhdGVDb2xvclBpY2tlcighMSwhMCwhMCkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoiYmxhY2siLHZhbGlkOiEwLHZhbHVlOnRoaXMuY215ay5rLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vbkFkZFByZXNldENvbG9yKHQsZSl7dC5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLmNwUHJlc2V0Q29sb3JzLmZpbHRlcigodD0+dD09PWUpKS5sZW5ndGh8fCh0aGlzLmNwUHJlc2V0Q29sb3JzPXRoaXMuY3BQcmVzZXRDb2xvcnMuY29uY2F0KGUpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UucHJlc2V0Q29sb3JzQ2hhbmdlZCh0aGlzLmNwUHJlc2V0Q29sb3JzKSl9b25SZW1vdmVQcmVzZXRDb2xvcih0LGUpe3Quc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5jcFByZXNldENvbG9ycz10aGlzLmNwUHJlc2V0Q29sb3JzLmZpbHRlcigodD0+dCE9PWUpKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLnByZXNldENvbG9yc0NoYW5nZWQodGhpcy5jcFByZXNldENvbG9ycyl9b3BlbkNvbG9yUGlja2VyKCl7dGhpcy5zaG93fHwodGhpcy5zaG93PSEwLHRoaXMuaGlkZGVuPSEwLHNldFRpbWVvdXQoKCgpPT57dGhpcy5oaWRkZW49ITEsdGhpcy5zZXREaWFsb2dQb3NpdGlvbigpLHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpfSksMCksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5zdGF0ZUNoYW5nZWQoITApLHRoaXMuaXNJRTEwfHwoZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIix0aGlzLmxpc3RlbmVyTW91c2VEb3duKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0Iix0aGlzLmxpc3RlbmVyTW91c2VEb3duKSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdGhpcy5saXN0ZW5lclJlc2l6ZSkpfWNsb3NlQ29sb3JQaWNrZXIoKXt0aGlzLnNob3cmJih0aGlzLnNob3c9ITEsdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5zdGF0ZUNoYW5nZWQoITEpLHRoaXMuaXNJRTEwfHwoZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIix0aGlzLmxpc3RlbmVyTW91c2VEb3duKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0Iix0aGlzLmxpc3RlbmVyTW91c2VEb3duKSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdGhpcy5saXN0ZW5lclJlc2l6ZSksdGhpcy5jZFJlZi5kZXN0cm95ZWR8fHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpKX11cGRhdGVDb2xvclBpY2tlcih0PSEwLGU9ITAsbj0hMSl7aWYodGhpcy5zbGlkZXJEaW1NYXgpe2xldCBvLGksYTsyPT09dGhpcy5jcENvbG9yTW9kZSYmKHRoaXMuaHN2YS5zPTApO2NvbnN0IHI9dGhpcy5vdXRwdXRDb2xvcjtpZihpPXRoaXMuc2VydmljZS5oc3ZhMmhzbGEodGhpcy5oc3ZhKSx0aGlzLmNwQ215a0VuYWJsZWQ/KG4/KGE9dGhpcy5zZXJ2aWNlLmNteWtUb1JnYih0aGlzLnNlcnZpY2Uubm9ybWFsaXplQ01ZSyh0aGlzLmNteWspKSx0aGlzLmhzdmE9dGhpcy5zZXJ2aWNlLnJnYmFUb0hzdmEoYSkpOihhPXRoaXMuc2VydmljZS5oc3ZhVG9SZ2JhKHRoaXMuaHN2YSksdGhpcy5jbXlrPXRoaXMuc2VydmljZS5kZW5vcm1hbGl6ZUNNWUsodGhpcy5zZXJ2aWNlLnJnYmFUb0NteWsoYSkpKSxhPXRoaXMuc2VydmljZS5kZW5vcm1hbGl6ZVJHQkEoYSksdGhpcy5zbGlkZXJIPXRoaXMuaHN2YS5oKTphPXRoaXMuc2VydmljZS5kZW5vcm1hbGl6ZVJHQkEodGhpcy5zZXJ2aWNlLmhzdmFUb1JnYmEodGhpcy5oc3ZhKSksbz10aGlzLnNlcnZpY2UuZGVub3JtYWxpemVSR0JBKHRoaXMuc2VydmljZS5oc3ZhVG9SZ2JhKG5ldyB3Myh0aGlzLnNsaWRlckh8fHRoaXMuaHN2YS5oLDEsMSwxKSkpLGUmJih0aGlzLmhzbGFUZXh0PW5ldyBrMyhNYXRoLnJvdW5kKDM2MCppLmgpLE1hdGgucm91bmQoMTAwKmkucyksTWF0aC5yb3VuZCgxMDAqaS5sKSxNYXRoLnJvdW5kKDEwMCppLmEpLzEwMCksdGhpcy5yZ2JhVGV4dD1uZXcgUDMoYS5yLGEuZyxhLmIsTWF0aC5yb3VuZCgxMDAqYS5hKS8xMDApLHRoaXMuY3BDbXlrRW5hYmxlZCYmKHRoaXMuY215a1RleHQ9bmV3IFMzKHRoaXMuY215ay5jLHRoaXMuY215ay5tLHRoaXMuY215ay55LHRoaXMuY215ay5rLE1hdGgucm91bmQoMTAwKnRoaXMuY215ay5hKS8xMDApKSx0aGlzLmhleFRleHQ9dGhpcy5zZXJ2aWNlLnJnYmFUb0hleChhLCJhbHdheXMiPT09dGhpcy5jcEFscGhhQ2hhbm5lbCksdGhpcy5oZXhBbHBoYT10aGlzLnJnYmFUZXh0LmEpLCJhdXRvIj09PXRoaXMuY3BPdXRwdXRGb3JtYXQmJnRoaXMuZm9ybWF0IT09TzMuUkdCQSYmdGhpcy5mb3JtYXQhPT1PMy5DTVlLJiZ0aGlzLmhzdmEuYTwxJiYodGhpcy5mb3JtYXQ9dGhpcy5oc3ZhLmE8MT9PMy5SR0JBOk8zLkhFWCksdGhpcy5odWVTbGlkZXJDb2xvcj0icmdiKCIrby5yKyIsIitvLmcrIiwiK28uYisiKSIsdGhpcy5hbHBoYVNsaWRlckNvbG9yPSJyZ2IoIithLnIrIiwiK2EuZysiLCIrYS5iKyIpIix0aGlzLm91dHB1dENvbG9yPXRoaXMuc2VydmljZS5vdXRwdXRGb3JtYXQodGhpcy5oc3ZhLHRoaXMuY3BPdXRwdXRGb3JtYXQsdGhpcy5jcEFscGhhQ2hhbm5lbCksdGhpcy5zZWxlY3RlZENvbG9yPXRoaXMuc2VydmljZS5vdXRwdXRGb3JtYXQodGhpcy5oc3ZhLCJyZ2JhIixudWxsKSx0aGlzLmZvcm1hdCE9PU8zLkNNWUspdGhpcy5jbXlrQ29sb3I9IiI7ZWxzZSBpZigiYWx3YXlzIj09PXRoaXMuY3BBbHBoYUNoYW5uZWx8fCJlbmFibGVkIj09PXRoaXMuY3BBbHBoYUNoYW5uZWx8fCJmb3JjZWQiPT09dGhpcy5jcEFscGhhQ2hhbm5lbCl7Y29uc3QgdD1NYXRoLnJvdW5kKDEwMCp0aGlzLmNteWsuYSkvMTAwO3RoaXMuY215a0NvbG9yPWBjbXlrYSgke3RoaXMuY215ay5jfSwke3RoaXMuY215ay5tfSwke3RoaXMuY215ay55fSwke3RoaXMuY215ay5rfSwke3R9KWB9ZWxzZSB0aGlzLmNteWtDb2xvcj1gY215aygke3RoaXMuY215ay5jfSwke3RoaXMuY215ay5tfSwke3RoaXMuY215ay55fSwke3RoaXMuY215ay5rfSlgO3RoaXMuc2xpZGVyPW5ldyBBMygodGhpcy5zbGlkZXJIfHx0aGlzLmhzdmEuaCkqdGhpcy5zbGlkZXJEaW1NYXguaC04LHRoaXMuaHN2YS5zKnRoaXMuc2xpZGVyRGltTWF4LnMtOCwoMS10aGlzLmhzdmEudikqdGhpcy5zbGlkZXJEaW1NYXgudi04LHRoaXMuaHN2YS5hKnRoaXMuc2xpZGVyRGltTWF4LmEtOCksdCYmciE9PXRoaXMub3V0cHV0Q29sb3ImJih0aGlzLmNwQ215a0VuYWJsZWQmJnRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuY215a0NoYW5nZWQodGhpcy5jbXlrQ29sb3IpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuY29sb3JDaGFuZ2VkKHRoaXMub3V0cHV0Q29sb3IpKX19c2V0RGlhbG9nUG9zaXRpb24oKXtpZigiaW5saW5lIj09PXRoaXMuY3BEaWFsb2dEaXNwbGF5KXRoaXMucG9zaXRpb249InJlbGF0aXZlIjtlbHNle2xldCB0LGU9InN0YXRpYyIsbj0iIixvPW51bGwsaT1udWxsLGE9dGhpcy5kaXJlY3RpdmVFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucGFyZW50Tm9kZTtjb25zdCByPXRoaXMuZGlhbG9nRWxlbWVudC5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodDtmb3IoO251bGwhPT1hJiYiSFRNTCIhPT1hLnRhZ05hbWU7KXtpZih0PXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGEpLGU9dC5nZXRQcm9wZXJ0eVZhbHVlKCJwb3NpdGlvbiIpLG49dC5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKSwic3RhdGljIiE9PWUmJm51bGw9PT1vJiYobz1hKSxuJiYibm9uZSIhPT1uJiZudWxsPT09aSYmKGk9YSksImZpeGVkIj09PWUpe289aTticmVha31hPWEucGFyZW50Tm9kZX1jb25zdCBzPXRoaXMuY3JlYXRlRGlhbG9nQm94KHRoaXMuZGlyZWN0aXZlRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCJmaXhlZCIhPT1lKTtpZih0aGlzLnVzZVJvb3RWaWV3Q29udGFpbmVyfHwiZml4ZWQiPT09ZSYmKCFvfHxvIGluc3RhbmNlb2YgSFRNTFVua25vd25FbGVtZW50KSl0aGlzLnRvcD1zLnRvcCx0aGlzLmxlZnQ9cy5sZWZ0O2Vsc2V7bnVsbD09PW8mJihvPWEpO2NvbnN0IHQ9dGhpcy5jcmVhdGVEaWFsb2dCb3gobywiZml4ZWQiIT09ZSk7dGhpcy50b3A9cy50b3AtdC50b3AsdGhpcy5sZWZ0PXMubGVmdC10LmxlZnR9ImZpeGVkIj09PWUmJih0aGlzLnBvc2l0aW9uPSJmaXhlZCIpO2xldCBsPXRoaXMuY3BQb3NpdGlvbjsiYXV0byI9PT10aGlzLmNwUG9zaXRpb24mJihsPShmdW5jdGlvbiB0KGUpe2xldCBuPSJyaWdodCIsbz0iYm90dG9tIjtjb25zdHtoZWlnaHQ6aSx3aWR0aDphLHRvcDpyLGJvdHRvbTpzLGxlZnQ6bCxyaWdodDpjfT1lLGQ9ci1pPDAscD1zK2k+KHdpbmRvdy5pbm5lckhlaWdodHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCksbT1sLWE8MCx1PWMrYT4od2luZG93LmlubmVyV2lkdGh8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCk7cmV0dXJuIHAmJihvPSJ0b3AiKSxkJiYobz0iYm90dG9tIiksbSYmKG49InJpZ2h0IiksdSYmKG49ImxlZnQiKSxkJiZwJiZtJiZ1P1sibGVmdCIsInJpZ2h0IiwidG9wIiwiYm90dG9tIl0ucmVkdWNlKCgodCxuKT0+ZVt0XT5lW25dP3Q6bikpOm0mJnU/ZD8iYm90dG9tIjpwfHxyPnM/InRvcCI6ImJvdHRvbSI6ZCYmcD9tPyJyaWdodCI6dXx8bD5jPyJsZWZ0IjoicmlnaHQiOmAke299LSR7bn1gfSkodGhpcy5kaWFsb2dFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpKSwidG9wIj09PWw/KHRoaXMuYXJyb3dUb3A9ci0xLHRoaXMudG9wLT1yK3RoaXMuZGlhbG9nQXJyb3dTaXplLHRoaXMubGVmdCs9dGhpcy5jcFBvc2l0aW9uT2Zmc2V0LzEwMCpzLndpZHRoLXRoaXMuZGlhbG9nQXJyb3dPZmZzZXQpOiJib3R0b20iPT09bD8odGhpcy50b3ArPXMuaGVpZ2h0K3RoaXMuZGlhbG9nQXJyb3dTaXplLHRoaXMubGVmdCs9dGhpcy5jcFBvc2l0aW9uT2Zmc2V0LzEwMCpzLndpZHRoLXRoaXMuZGlhbG9nQXJyb3dPZmZzZXQpOiJ0b3AtbGVmdCI9PT1sfHwibGVmdC10b3AiPT09bD8odGhpcy50b3AtPXItcy5oZWlnaHQrcy5oZWlnaHQqdGhpcy5jcFBvc2l0aW9uT2Zmc2V0LzEwMCx0aGlzLmxlZnQtPXRoaXMuY3BXaWR0aCt0aGlzLmRpYWxvZ0Fycm93U2l6ZS0yLXRoaXMuZGlhbG9nQXJyb3dPZmZzZXQpOiJ0b3AtcmlnaHQiPT09bHx8InJpZ2h0LXRvcCI9PT1sPyh0aGlzLnRvcC09ci1zLmhlaWdodCtzLmhlaWdodCp0aGlzLmNwUG9zaXRpb25PZmZzZXQvMTAwLHRoaXMubGVmdCs9cy53aWR0aCt0aGlzLmRpYWxvZ0Fycm93U2l6ZS0yLXRoaXMuZGlhbG9nQXJyb3dPZmZzZXQpOiJsZWZ0Ij09PWx8fCJib3R0b20tbGVmdCI9PT1sfHwibGVmdC1ib3R0b20iPT09bD8odGhpcy50b3ArPXMuaGVpZ2h0KnRoaXMuY3BQb3NpdGlvbk9mZnNldC8xMDAtdGhpcy5kaWFsb2dBcnJvd09mZnNldCx0aGlzLmxlZnQtPXRoaXMuY3BXaWR0aCt0aGlzLmRpYWxvZ0Fycm93U2l6ZS0yKToodGhpcy50b3ArPXMuaGVpZ2h0KnRoaXMuY3BQb3NpdGlvbk9mZnNldC8xMDAtdGhpcy5kaWFsb2dBcnJvd09mZnNldCx0aGlzLmxlZnQrPXMud2lkdGgrdGhpcy5kaWFsb2dBcnJvd1NpemUtMil9fWlzRGVzY2VuZGFudCh0LGUpe2xldCBuPWUucGFyZW50Tm9kZTtmb3IoO251bGwhPT1uOyl7aWYobj09PXQpcmV0dXJuITA7bj1uLnBhcmVudE5vZGV9cmV0dXJuITF9Y3JlYXRlRGlhbG9nQm94KHQsZSl7cmV0dXJue3RvcDp0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCsoZT93aW5kb3cucGFnZVlPZmZzZXQ6MCksbGVmdDp0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQrKGU/d2luZG93LnBhZ2VYT2Zmc2V0OjApLHdpZHRoOnQub2Zmc2V0V2lkdGgsaGVpZ2h0OnQub2Zmc2V0SGVpZ2h0fX19TjMuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fE4zKShNdShjaCksTXUoSGgpLE11KFQzKSl9LE4zLsm1Y21wPVVvKHt0eXBlOk4zLHNlbGVjdG9yczpbWyJjb2xvci1waWNrZXIiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJihXYihaMSwzKSxXYihYMSwzKSxXYihLMSwzKSksMiZlKXtsZXQgdDtVYih0PVliKCkpJiYobi5kaWFsb2dFbGVtZW50PXQuZmlyc3QpLFViKHQ9WWIoKSkmJihuLmh1ZVNsaWRlcj10LmZpcnN0KSxVYih0PVliKCkpJiYobi5hbHBoYVNsaWRlcj10LmZpcnN0KX19LGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MSZlJiZOdSgia2V5dXAuZXNjIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5oYW5kbGVFc2MoZSl9KSwhMSxabCkoImtleXVwLmVudGVyIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5oYW5kbGVFbnRlcihlKX0pLCExLFpsKX0sZGVjbHM6MjgsdmFyczo0Nyxjb25zdHM6W1sxLCJjb2xvci1waWNrZXIiLDMsImNsaWNrIl0sWyJkaWFsb2dQb3B1cCIsIiJdLFszLCJjbGFzcyIsInRvcCIsNCwibmdJZiJdLFsiY2xhc3MiLCJzYXR1cmF0aW9uLWxpZ2h0bmVzcyIsMywic2xpZGVyIiwicmdYIiwicmdZIiwiYmFja2dyb3VuZC1jb2xvciIsIm5ld1ZhbHVlIiwiZHJhZ1N0YXJ0IiwiZHJhZ0VuZCIsNCwibmdJZiJdLFsxLCJodWUtYWxwaGEiLCJib3giXSxbMSwibGVmdCJdLFsxLCJzZWxlY3RlZC1jb2xvci1iYWNrZ3JvdW5kIl0sWzEsInNlbGVjdGVkLWNvbG9yIl0sWyJ0eXBlIiwiYnV0dG9uIiwzLCJjbGFzcyIsImRpc2FibGVkIiwiY2xpY2siLDQsIm5nSWYiXSxbMSwicmlnaHQiXSxbInN0eWxlIiwiaGVpZ2h0OiAxNnB4OyIsNCwibmdJZiJdLFsxLCJodWUiLDMsInNsaWRlciIsInJnWCIsIm5ld1ZhbHVlIiwiZHJhZ1N0YXJ0IiwiZHJhZ0VuZCJdLFsiaHVlU2xpZGVyIiwiIl0sWzEsImN1cnNvciJdLFsxLCJ2YWx1ZSIsMywic2xpZGVyIiwicmdYIiwibmV3VmFsdWUiLCJkcmFnU3RhcnQiLCJkcmFnRW5kIl0sWyJ2YWx1ZVNsaWRlciIsIiJdLFsxLCJhbHBoYSIsMywic2xpZGVyIiwicmdYIiwibmV3VmFsdWUiLCJkcmFnU3RhcnQiLCJkcmFnRW5kIl0sWyJhbHBoYVNsaWRlciIsIiJdLFsiY2xhc3MiLCJjbXlrLXRleHQiLDMsImRpc3BsYXkiLDQsIm5nSWYiXSxbImNsYXNzIiwiaHNsYS10ZXh0IiwzLCJkaXNwbGF5Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsInJnYmEtdGV4dCIsMywiZGlzcGxheSIsNCwibmdJZiJdLFsiY2xhc3MiLCJoZXgtdGV4dCIsMywiaGV4LWFscGhhIiwiZGlzcGxheSIsNCwibmdJZiJdLFsiY2xhc3MiLCJ2YWx1ZS10ZXh0Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsInR5cGUtcG9saWN5Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsInByZXNldC1hcmVhIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImJ1dHRvbi1hcmVhIiw0LCJuZ0lmIl0sWzEsInNhdHVyYXRpb24tbGlnaHRuZXNzIiwzLCJzbGlkZXIiLCJyZ1giLCJyZ1kiLCJuZXdWYWx1ZSIsImRyYWdTdGFydCIsImRyYWdFbmQiXSxbInR5cGUiLCJidXR0b24iLDMsImRpc2FibGVkIiwiY2xpY2siXSxbMiwiaGVpZ2h0IiwiMTZweCJdLFsxLCJjbXlrLXRleHQiXSxbMSwiYm94Il0sWyJ0eXBlIiwibnVtYmVyIiwicGF0dGVybiIsIlswLTldKiIsIm1pbiIsIjAiLCJtYXgiLCIxMDAiLDMsInRleHQiLCJyZyIsInZhbHVlIiwia2V5dXAuZW50ZXIiLCJuZXdWYWx1ZSJdLFsidHlwZSIsIm51bWJlciIsInBhdHRlcm4iLCJbMC05XSsoW1xcLixdWzAtOV17MSwyfSk/IiwibWluIiwiMCIsIm1heCIsIjEiLCJzdGVwIiwiMC4xIiwzLCJ0ZXh0IiwicmciLCJ2YWx1ZSIsImtleXVwLmVudGVyIiwibmV3VmFsdWUiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsidHlwZSIsIm51bWJlciIsInBhdHRlcm4iLCJbMC05XSsoW1xcLixdWzAtOV17MSwyfSk/IiwibWluIiwiMCIsIm1heCIsIjEiLCJzdGVwIiwiMC4xIiwzLCJ0ZXh0IiwicmciLCJ2YWx1ZSIsImtleXVwLmVudGVyIiwibmV3VmFsdWUiXSxbMSwiaHNsYS10ZXh0Il0sWyJ0eXBlIiwibnVtYmVyIiwicGF0dGVybiIsIlswLTldKiIsIm1pbiIsIjAiLCJtYXgiLCIzNjAiLDMsInRleHQiLCJyZyIsInZhbHVlIiwia2V5dXAuZW50ZXIiLCJuZXdWYWx1ZSJdLFsxLCJyZ2JhLXRleHQiXSxbInR5cGUiLCJudW1iZXIiLCJwYXR0ZXJuIiwiWzAtOV0qIiwibWluIiwiMCIsIm1heCIsIjI1NSIsMywidGV4dCIsInJnIiwidmFsdWUiLCJrZXl1cC5lbnRlciIsIm5ld1ZhbHVlIl0sWzEsImhleC10ZXh0Il0sWzMsInRleHQiLCJ2YWx1ZSIsImJsdXIiLCJrZXl1cC5lbnRlciIsIm5ld1ZhbHVlIl0sWzEsInZhbHVlLXRleHQiXSxbMSwidHlwZS1wb2xpY3kiXSxbMSwidHlwZS1wb2xpY3ktYXJyb3ciLDMsImNsaWNrIl0sWzEsInByZXNldC1hcmVhIl0sWzEsInByZXNldC1sYWJlbCJdLFszLCJjbGFzcyIsNCwibmdJZiJdLFsiY2xhc3MiLCJwcmVzZXQtY29sb3IiLDMsImJhY2tncm91bmRDb2xvciIsImNsaWNrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwicHJlc2V0LWNvbG9yIiwzLCJjbGljayJdLFszLCJjbGFzcyIsImNsaWNrIiw0LCJuZ0lmIl0sWzMsImNsaWNrIl0sWzEsImJ1dHRvbi1hcmVhIl0sWyJ0eXBlIiwiYnV0dG9uIiwzLCJjbGFzcyIsImNsaWNrIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwzLCJjbGljayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoT3UoMCwiZGl2IiwwLDEpLE51KCJjbGljayIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIGUuc3RvcFByb3BhZ2F0aW9uKCl9KSksV20oMixKMSwxLDUsImRpdiIsMiksV20oMyxRMSwyLDgsImRpdiIsMyksT3UoNCwiZGl2Iiw0KSxPdSg1LCJkaXYiLDUpLHd1KDYsImRpdiIsNiksd3UoNywiZGl2Iiw3KSxXbSg4LCQxLDIsNSwiYnV0dG9uIiw4KSxQdSgpLE91KDksImRpdiIsOSksV20oMTAsdDMsMSwwLCJkaXYiLDEwKSxPdSgxMSwiZGl2IiwxMSwxMiksTnUoIm5ld1ZhbHVlIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vbkh1ZUNoYW5nZShlKX0pKSgiZHJhZ1N0YXJ0IiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uRHJhZ1N0YXJ0KCJodWUiKX0pKSgiZHJhZ0VuZCIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vbkRyYWdFbmQoImh1ZSIpfSkpLHd1KDEzLCJkaXYiLDEzKSxQdSgpLE91KDE0LCJkaXYiLDE0LDE1KSxOdSgibmV3VmFsdWUiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLm9uVmFsdWVDaGFuZ2UoZSl9KSkoImRyYWdTdGFydCIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vbkRyYWdTdGFydCgidmFsdWUiKX0pKSgiZHJhZ0VuZCIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vbkRyYWdFbmQoInZhbHVlIil9KSksd3UoMTYsImRpdiIsMTMpLFB1KCksT3UoMTcsImRpdiIsMTYsMTcpLE51KCJuZXdWYWx1ZSIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25BbHBoYUNoYW5nZShlKX0pKSgiZHJhZ1N0YXJ0IiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uRHJhZ1N0YXJ0KCJhbHBoYSIpfSkpKCJkcmFnRW5kIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uRHJhZ0VuZCgiYWxwaGEiKX0pKSx3dSgxOSwiZGl2IiwxMyksUHUoKSxQdSgpLFB1KCksV20oMjAsbzMsMTcsMTIsImRpdiIsMTgpLFdtKDIxLHIzLDE0LDEwLCJkaXYiLDE5KSxXbSgyMixjMywxNCwxMCwiZGl2IiwyMCksV20oMjMsbTMsOCw3LCJkaXYiLDIxKSxXbSgyNCxmMyw5LDMsImRpdiIsMjIpLFdtKDI1LGczLDMsMCwiZGl2IiwyMyksV20oMjYsQzMsNiwzLCJkaXYiLDI0KSxXbSgyNyx4MywzLDIsImRpdiIsMjUpLFB1KCkpLDImZSYmKG9mKCJkaXNwbGF5IixuLnNob3c/ImJsb2NrIjoibm9uZSIpKCJ2aXNpYmlsaXR5IixuLmhpZGRlbj8iaGlkZGVuIjoidmlzaWJsZSIpKCJ0b3AiLG4udG9wLCJweCIpKCJsZWZ0IixuLmxlZnQsInB4IikoInBvc2l0aW9uIixuLnBvc2l0aW9uKSgiaGVpZ2h0IixuLmNwSGVpZ2h0LCJweCIpKCJ3aWR0aCIsbi5jcFdpZHRoLCJweCIpLGFmKCJvcGVuIixuLnNob3cpLEpjKDIpLHZ1KCJuZ0lmIiwicG9wdXAiPT1uLmNwRGlhbG9nRGlzcGxheSksSmMoMSksdnUoIm5nSWYiLDE9PT0obi5jcENvbG9yTW9kZXx8MSkpLEpjKDQpLG9mKCJiYWNrZ3JvdW5kLWNvbG9yIixuLnNlbGVjdGVkQ29sb3IpLEpjKDEpLHZ1KCJuZ0lmIixuLmNwQWRkQ29sb3JCdXR0b24pLEpjKDIpLHZ1KCJuZ0lmIiwiZGlzYWJsZWQiPT09bi5jcEFscGhhQ2hhbm5lbCksSmMoMSksb2YoImRpc3BsYXkiLDE9PT0obi5jcENvbG9yTW9kZXx8MSk/ImJsb2NrIjoibm9uZSIpLHZ1KCJyZ1giLDEpLEpjKDIpLG9mKCJsZWZ0IixudWxsPT1uLnNsaWRlcj9udWxsOm4uc2xpZGVyLmgsInB4IiksSmMoMSksb2YoImRpc3BsYXkiLDI9PT0obi5jcENvbG9yTW9kZXx8MSk/ImJsb2NrIjoibm9uZSIpLHZ1KCJyZ1giLDEpLEpjKDIpLG9mKCJyaWdodCIsbnVsbD09bi5zbGlkZXI/bnVsbDpuLnNsaWRlci52LCJweCIpLEpjKDEpLG9mKCJkaXNwbGF5IiwiZGlzYWJsZWQiPT09bi5jcEFscGhhQ2hhbm5lbD8ibm9uZSI6ImJsb2NrIikoImJhY2tncm91bmQtY29sb3IiLG4uYWxwaGFTbGlkZXJDb2xvciksdnUoInJnWCIsMSksSmMoMiksb2YoImxlZnQiLG51bGw9PW4uc2xpZGVyP251bGw6bi5zbGlkZXIuYSwicHgiKSxKYygxKSx2dSgibmdJZiIsIW4uY3BEaXNhYmxlSW5wdXQmJjE9PT0obi5jcENvbG9yTW9kZXx8MSkpLEpjKDEpLHZ1KCJuZ0lmIiwhbi5jcERpc2FibGVJbnB1dCYmMT09PShuLmNwQ29sb3JNb2RlfHwxKSksSmMoMSksdnUoIm5nSWYiLCFuLmNwRGlzYWJsZUlucHV0JiYxPT09KG4uY3BDb2xvck1vZGV8fDEpKSxKYygxKSx2dSgibmdJZiIsIW4uY3BEaXNhYmxlSW5wdXQmJjE9PT0obi5jcENvbG9yTW9kZXx8MSkpLEpjKDEpLHZ1KCJuZ0lmIiwhbi5jcERpc2FibGVJbnB1dCYmMj09PShuLmNwQ29sb3JNb2RlfHwxKSksSmMoMSksdnUoIm5nSWYiLCFuLmNwRGlzYWJsZUlucHV0JiYxPT09KG4uY3BDb2xvck1vZGV8fDEpKSxKYygxKSx2dSgibmdJZiIsKG51bGw9PW4uY3BQcmVzZXRDb2xvcnM/bnVsbDpuLmNwUHJlc2V0Q29sb3JzLmxlbmd0aCl8fG4uY3BBZGRDb2xvckJ1dHRvbiksSmMoMSksdnUoIm5nSWYiLG4uY3BPS0J1dHRvbnx8bi5jcENhbmNlbEJ1dHRvbikpfSxkaXJlY3RpdmVzOlthdixFMyxEMyxvdl0sc3R5bGVzOlsnLmNvbG9yLXBpY2tlcnstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICM3Nzc7Y3Vyc29yOmRlZmF1bHQ7aGVpZ2h0OmF1dG87cG9zaXRpb246YWJzb2x1dGU7dXNlci1zZWxlY3Q6bm9uZTt3aWR0aDoyMzBweDt6LWluZGV4OjEwMDB9LmNvbG9yLXBpY2tlciAqe2JveC1zaXppbmc6Ym9yZGVyLWJveDtmb250LXNpemU6MTFweDttYXJnaW46MH0uY29sb3ItcGlja2VyIGlucHV0e2NvbG9yOiMwMDA7Zm9udC1zaXplOjEzcHg7aGVpZ2h0OjI2cHg7bWluLXdpZHRoOjA7dGV4dC1hbGlnbjpjZW50ZXI7d2lkdGg6MH0uY29sb3ItcGlja2VyIGlucHV0Oi1tb3otc3VibWl0LWludmFsaWQsLmNvbG9yLXBpY2tlciBpbnB1dDotbW96LXVpLWludmFsaWQsLmNvbG9yLXBpY2tlciBpbnB1dDppbnZhbGlke2JveC1zaGFkb3c6bm9uZX0uY29sb3ItcGlja2VyIGlucHV0Ojotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLC5jb2xvci1waWNrZXIgaW5wdXQ6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7bWFyZ2luOjB9LmNvbG9yLXBpY2tlciAuYXJyb3d7Ym9yZGVyLXN0eWxlOnNvbGlkO2hlaWdodDowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjA7ei1pbmRleDo5OTk5OTl9LmNvbG9yLXBpY2tlciAuYXJyb3cuYXJyb3ctdG9we2JvcmRlci1jb2xvcjojNzc3IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50O2JvcmRlci13aWR0aDoxMHB4IDVweDtsZWZ0OjhweH0uY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1ib3R0b217Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50IHRyYW5zcGFyZW50ICM3Nzc7Ym9yZGVyLXdpZHRoOjEwcHggNXB4O2xlZnQ6OHB4O3RvcDotMjBweH0uY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1sZWZ0LXRvcCwuY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy10b3AtbGVmdHtib3JkZXItY29sb3I6dHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgIzc3Nztib3JkZXItd2lkdGg6NXB4IDEwcHg7Ym90dG9tOjhweDtyaWdodDotMjFweH0uY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1yaWdodC10b3AsLmNvbG9yLXBpY2tlciAuYXJyb3cuYXJyb3ctdG9wLXJpZ2h0e2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudCAjNzc3IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50O2JvcmRlci13aWR0aDo1cHggMTBweDtib3R0b206OHB4O2xlZnQ6LTIwcHh9LmNvbG9yLXBpY2tlciAuYXJyb3cuYXJyb3ctYm90dG9tLWxlZnQsLmNvbG9yLXBpY2tlciAuYXJyb3cuYXJyb3ctbGVmdCwuY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1sZWZ0LWJvdHRvbXtib3JkZXItY29sb3I6dHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgIzc3Nztib3JkZXItd2lkdGg6NXB4IDEwcHg7cmlnaHQ6LTIxcHg7dG9wOjhweH0uY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1ib3R0b20tcmlnaHQsLmNvbG9yLXBpY2tlciAuYXJyb3cuYXJyb3ctcmlnaHQsLmNvbG9yLXBpY2tlciAuYXJyb3cuYXJyb3ctcmlnaHQtYm90dG9te2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudCAjNzc3IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50O2JvcmRlci13aWR0aDo1cHggMTBweDtsZWZ0Oi0yMHB4O3RvcDo4cHh9LmNvbG9yLXBpY2tlciAuY3Vyc29ye2JvcmRlcjoycHggc29saWQgIzIyMjtib3JkZXItcmFkaXVzOjUwJTtjdXJzb3I6ZGVmYXVsdDtoZWlnaHQ6MTZweDtwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDoxNnB4fS5jb2xvci1waWNrZXIgLmJveHtkaXNwbGF5OmZsZXg7cGFkZGluZzo0cHggOHB4fS5jb2xvci1waWNrZXIgLmxlZnR7cGFkZGluZzoxNnB4IDhweDtwb3NpdGlvbjpyZWxhdGl2ZX0uY29sb3ItcGlja2VyIC5yaWdodHtmbGV4OjEgMSBhdXRvO3BhZGRpbmc6MTJweCA4cHh9LmNvbG9yLXBpY2tlciAuYnV0dG9uLWFyZWF7cGFkZGluZzowIDE2cHggMTZweDt0ZXh0LWFsaWduOnJpZ2h0fS5jb2xvci1waWNrZXIgLmJ1dHRvbi1hcmVhIGJ1dHRvbnttYXJnaW4tbGVmdDo4cHh9LmNvbG9yLXBpY2tlciAucHJlc2V0LWFyZWF7cGFkZGluZzo0cHggMTVweH0uY29sb3ItcGlja2VyIC5wcmVzZXQtYXJlYSAucHJlc2V0LWxhYmVse2NvbG9yOiM1NTU7Zm9udC1zaXplOjExcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6NHB4O3RleHQtYWxpZ246bGVmdDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcDt3aWR0aDoxMDAlfS5jb2xvci1waWNrZXIgLnByZXNldC1hcmVhIC5wcmVzZXQtY29sb3J7Ym9yZGVyOjFweCBzb2xpZCAjYTlhOWE5O2JvcmRlci1yYWRpdXM6MjUlO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxOHB4O21hcmdpbjo0cHggNnB4IDhweDtwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDoxOHB4fS5jb2xvci1waWNrZXIgLnByZXNldC1hcmVhIC5wcmVzZXQtZW1wdHktbWVzc2FnZXtmb250LXN0eWxlOml0YWxpYzttYXJnaW4tYm90dG9tOjhweDttYXJnaW4tdG9wOjRweDttaW4taGVpZ2h0OjE4cHg7dGV4dC1hbGlnbjpjZW50ZXJ9LmNvbG9yLXBpY2tlciAuaGV4LXRleHR7Zm9udC1zaXplOjExcHg7cGFkZGluZzo0cHggOHB4O3dpZHRoOjEwMCV9LmNvbG9yLXBpY2tlciAuaGV4LXRleHQgLmJveHtwYWRkaW5nOjAgMjRweCA4cHggOHB4fS5jb2xvci1waWNrZXIgLmhleC10ZXh0IC5ib3ggZGl2e2NsZWFyOmxlZnQ7Y29sb3I6IzU1NTtmbGV4OjEgMSBhdXRvO2Zsb2F0OmxlZnQ7dGV4dC1hbGlnbjpjZW50ZXJ9LmNvbG9yLXBpY2tlciAuaGV4LXRleHQgLmJveCBpbnB1dHtib3JkZXI6MXB4IHNvbGlkICNhOWE5YTk7ZmxleDoxIDEgYXV0bztwYWRkaW5nOjFweH0uY29sb3ItcGlja2VyIC5oZXgtYWxwaGEgLmJveCBkaXY6Zmlyc3QtY2hpbGQsLmNvbG9yLXBpY2tlciAuaGV4LWFscGhhIC5ib3ggaW5wdXQ6Zmlyc3QtY2hpbGR7ZmxleC1ncm93OjM7bWFyZ2luLXJpZ2h0OjhweH0uY29sb3ItcGlja2VyIC5jbXlrLXRleHQsLmNvbG9yLXBpY2tlciAuaHNsYS10ZXh0LC5jb2xvci1waWNrZXIgLnJnYmEtdGV4dCwuY29sb3ItcGlja2VyIC52YWx1ZS10ZXh0e2ZvbnQtc2l6ZToxMXB4O3BhZGRpbmc6NHB4IDhweDt3aWR0aDoxMDAlfS5jb2xvci1waWNrZXIgLmNteWstdGV4dCAuYm94LC5jb2xvci1waWNrZXIgLmhzbGEtdGV4dCAuYm94LC5jb2xvci1waWNrZXIgLnJnYmEtdGV4dCAuYm94e3BhZGRpbmc6MCAyNHB4IDhweCA4cHh9LmNvbG9yLXBpY2tlciAudmFsdWUtdGV4dCAuYm94e3BhZGRpbmc6MCA4cHggOHB4fS5jb2xvci1waWNrZXIgLmNteWstdGV4dCAuYm94IGRpdiwuY29sb3ItcGlja2VyIC5oc2xhLXRleHQgLmJveCBkaXYsLmNvbG9yLXBpY2tlciAucmdiYS10ZXh0IC5ib3ggZGl2LC5jb2xvci1waWNrZXIgLnZhbHVlLXRleHQgLmJveCBkaXZ7Y29sb3I6IzU1NTtmbGV4OjEgMSBhdXRvO21hcmdpbi1yaWdodDo4cHg7dGV4dC1hbGlnbjpjZW50ZXJ9LmNvbG9yLXBpY2tlciAuY215ay10ZXh0IC5ib3ggZGl2Omxhc3QtY2hpbGQsLmNvbG9yLXBpY2tlciAuaHNsYS10ZXh0IC5ib3ggZGl2Omxhc3QtY2hpbGQsLmNvbG9yLXBpY2tlciAucmdiYS10ZXh0IC5ib3ggZGl2Omxhc3QtY2hpbGQsLmNvbG9yLXBpY2tlciAudmFsdWUtdGV4dCAuYm94IGRpdjpsYXN0LWNoaWxke21hcmdpbi1yaWdodDowfS5jb2xvci1waWNrZXIgLmNteWstdGV4dCAuYm94IGlucHV0LC5jb2xvci1waWNrZXIgLmhzbGEtdGV4dCAuYm94IGlucHV0LC5jb2xvci1waWNrZXIgLnJnYmEtdGV4dCAuYm94IGlucHV0LC5jb2xvci1waWNrZXIgLnZhbHVlLXRleHQgLmJveCBpbnB1dHtib3JkZXI6MXB4IHNvbGlkICNhOWE5YTk7ZmxleDoxO2Zsb2F0OmxlZnQ7bWFyZ2luOjAgOHB4IDAgMDtwYWRkaW5nOjFweH0uY29sb3ItcGlja2VyIC5jbXlrLXRleHQgLmJveCBpbnB1dDpsYXN0LWNoaWxkLC5jb2xvci1waWNrZXIgLmhzbGEtdGV4dCAuYm94IGlucHV0Omxhc3QtY2hpbGQsLmNvbG9yLXBpY2tlciAucmdiYS10ZXh0IC5ib3ggaW5wdXQ6bGFzdC1jaGlsZCwuY29sb3ItcGlja2VyIC52YWx1ZS10ZXh0IC5ib3ggaW5wdXQ6bGFzdC1jaGlsZHttYXJnaW4tcmlnaHQ6MH0uY29sb3ItcGlja2VyIC5odWUtYWxwaGF7YWxpZ24taXRlbXM6Y2VudGVyO21hcmdpbi1ib3R0b206M3B4fS5jb2xvci1waWNrZXIgLmh1ZXtiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFKWUFBQUFRQ0FZQUFBRDA2SVluQUFBQUJtSkxSMFFBL3dEL0FQK2d2YWVUQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFCM1JKVFVVSDRBSVdEd2tVRldiQ0NBQUFBRnhKUkVGVWFON3Qwa0VLZzBBUUFNRTJ4ODMvbjJxdTVxQ2dEMWlEaENvWWRwbmJRQzliYlkxcVZPL2p2YzZrM2FkOTFzNy83RjEvY3NnUHJ1anVRMTdCRFlTRnNCQVd3Z0poSVN5RUJjSkNXQWdMaElXd0VCWUlpMmY3QXIvMVRDZ0ZIMlg5QUFBQUFFbEZUa1N1UW1DQyIpO2RpcmVjdGlvbjpsdHJ9LmNvbG9yLXBpY2tlciAuaHVlLC5jb2xvci1waWNrZXIgLnZhbHVle2JhY2tncm91bmQtc2l6ZToxMDAlIDEwMCU7Ym9yZGVyOm5vbmU7Y3Vyc29yOnBvaW50ZXI7aGVpZ2h0OjE2cHg7bWFyZ2luLWJvdHRvbToxNnB4O3dpZHRoOjEwMCV9LmNvbG9yLXBpY2tlciAudmFsdWV7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBSllBQUFBUUNBWUFBQUQwNklZbkFBQUNUa2xFUVZSNDJ1M1NZVWNyQUJoQTRVMlNrbVJKTW1XU0prbEtKaVdaWnBLVUpKc2tLVW1hVEZJbUtaT1V6TXlTcEdSbWxpUk5KaWxKU3BLU0pFdG1TcElwbVdtU2RPNzM2LzZEK3g3T1AzZ1VDb1dDdjFjcWxTUWxKWkdjbkV4S1NncXBxYW1rcGFXUm5wNU9Sa1lHbVptWnFGUXFzckt5eU03T0ppY25oOXpjWE5ScU5YbDVlZVRuNTZQUmFDZ29LS0N3c0pDaW9pSzBXaTNGeGNXVWxKUlFXbHBLV1ZrWjVlWGxWRlJVVUZsWmlVNm5vNnFxaXVycWFtcHFhcWl0cmFXdXJnNjlYazk5ZlQwR2d3R2owVWhEUXdPTmpZMDBOVFhSM054TVMwc0xyYTJ0dExXMTBkN2Vqc2xrd213MjA5SFJRV2RuSjExZFhYUjNkOVBUMDBOdmJ5OTlmWDMwOS9jek1EREE0T0FnRm91Rm9hRWhyRllydzhQRGpJeU1NRG82eXRqWUdEYWJqZkh4Y1NZbUpwaWNuR1JxYWdxNzNjNzA5RFF6TXpQTXpzNHlOemZIL1B3OERvY0RwOU9KeStYQzdYYXpzTERBNHVJaVMwdExMQzh2czdLeXd1cnFLbXRyYTNnOEhyeGVMejZmRDcvZnovcjZPaHNiRzJ4dWJySzF0Y1gyOWphQlFJQ2RuUjJDd1NDN3U3dnM3ZTJ4djcvUHdjRUJoNGVISEIwZGNYeDh6TW5KQ2FlbnA1eWRuWEYrZnM3RnhRV1hsNWRjWFYxeGZYM056YzBOdDdlMzNOM2RFUXFGdUwrLzUrSGhnWEE0VENRUzRmSHhrYWVuSjU2Zm4zbDVlZUgxOVpWb05NcmIyeHZ2Nys5OGZId1FpOFdJeCtOOGZuNlNTQ1Q0K3ZyaSsvdWJuNThmZm45LytWY0tnU1d3QkpiQUVsZ0NTMkFKTElFbHNBU1d3QkpZQWt0Z0NTeUJKYkFFbHNBU1dBSkxZQWtzZ1NXd0JKYkFFbGdDUzJBSkxJRWxzUDQvV0g4QW1KNVo2akhTNGg4QUFBQUFTVVZPUks1Q1lJST0iKTtkaXJlY3Rpb246cnRsfS5jb2xvci1waWNrZXIgLmFscGhhe2JhY2tncm91bmQtaW1hZ2U6dXJsKCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUpZQUFBQVFDQVlBQUFEMDZJWW5BQUFBQm1KTFIwUUEvd0QvQVArZ3ZhZVRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUIzUkpUVVVINEFJV0R3WVFsWk1hM2dBQUFXVkpSRUZVYU43dG1FR082akFRUkNzT0FySGdCcHlBSllHamNHb2N4QW00QTJJSHBtb1dFMGVCSCtlem1GbE52VTA2c2hKM1c2VkVlbFdNVVFBSUlGOWY2cVpwaW1zQTFMWXRTMnVGNTEvdTI3WVZBRlpWUlVrRW9HSGRQVi9zSWNiSUVJSWtVZEkvOVhhN25leXY2MStTV0ZVVkFWQ1NjdDAwVFduMmZ2NnUzK0VjZmQzdFh6eS8wK25FVXUrU1Bqby9rcXpybWlRcFNjTjZ2OThYZXdmQTgvbE1raUxKMld4R1NVb3BjVDZmTTZVME5YOS9mcmZiamV2MVd0ZnJsWmZMaFlmRFFRSEcvQUlPbG5Hd2pJTmxIQ3hqSEN6allKbS9USldkQ3dxdUpYc2VGRnpHd0ROTmVpS01PSlRPOHhRZERRYWVCMjkrSzllZmVMYUJvOUo3dmR2dEpqMVJqRkZqZml2N3F2OTV0angvN2xlU1FnaDkzZTFmZk1lSXA2TytZUWpoby9ONzkxdDFYVk9TU0k3Ti8vSys0L0dveFdMQngrUEI1L09wNVhMSisvM09sSkpXcXhVM204M292djVpR2Y4S2pZTmxIQ3hqSEN6allCa0h5NWdmNWd1c3ZRVTdVMzdqVEFBQUFBQkpSVTVFcmtKZ2dnPT0iKTtiYWNrZ3JvdW5kLXNpemU6MTAwJSAxMDAlO2JvcmRlcjpub25lO2N1cnNvcjpwb2ludGVyO2RpcmVjdGlvbjpsdHI7aGVpZ2h0OjE2cHg7d2lkdGg6MTAwJX0uY29sb3ItcGlja2VyIC50eXBlLXBvbGljeXtiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCSUFBQUFnQ0FZQUFBQWZmQ2p4QUFBQUJITkNTVlFJQ0FnSWZBaGtpQUFBQUFsd1NGbHpBQUFDZXdBQUFuc0IwMUNPM0FBQUFCbDBSVmgwVTI5bWRIZGhjbVVBZDNkM0xtbHVhM05qWVhCbExtOXlaNXZ1UEJvQUFBSUFTVVJCVkVpSjdaWTlheFJSRklhZnN4TVN0ckxRSnBBZ3BCRmhpK0M5dzFZU28wMEk2UlovZzl2WnBCZi9RT3I0R3lSZ2tTS05TckFhZHNacVFHd0NrdUFXeVJaSnN5U3d2aFo3Ti92aHpyZ2JMSDNMZDg1OTdqbHp6NTB6Sm9reXhYSDhEcURWYXIwcWk2djhCYkl0cVNHcEVjZnhkbG1zRldYa3ZYOEFmQVZXZzNVS1BFblQ5R0t1ak16c0FGZ1pzVmFDTjFWVFFkNzdYVW5yZ0Uxa3YrNjkzNTI2OFdScHpybkhadllSV0M3WXZDM3BSWlpsM3dvenF0VnFpeUg5SWdqQXNwa2QxR3ExeFVKUXRWcmRCOVpLSUFPdGhkZy9RYzY1TFVrN3dOSU1vQ1ZKTzg2NXJZRmhrcWpYNi9kN3ZWNEdQSndCTXFvZlVSUzVKRWs2RllCZXIvZWVZYi9NbzlXd0ZuUE92UWJlQXZmdUFBSzRCTjRzQUp0QUcvZ0pJRWxtTnVpSnliYTNFR05tWmlQZVp1RVZtVmVsbC9ZLzZOK0N6RG4zQVhoRU9PbzdIdi8zQmVBejhJelFrTVBuSmJ1UHgxd0MreVlKNy8wbllJUDVTLzBGSEtkcCtyd0NFRVhSUy9yZjVIbDFHdGIyTTBpU3BDT3BDWnpQQVRtWDFFeVNwSE1MQXNpeTdNak1Eb0hyR1NEWFpuYVlaZG5Sd0JoN0o5MXV0d21jekFBNkNiRzNHZ1BsZVg0anFVSC9hMUNrdHFSR251YzNoU0NBTUIzMmdLc3BrQ3RnYjNLQ1FNbWtqZVA0V05KVGhyTk5admFsMVdwdFRJc3Y3SnRRNHRtSWRSYThxU29FcFdsNllXWk5vQU4wekt4Wk5QZWhwTFNCWnYydCtRMENKOWxMbkFSUUxBQUFBQUJKUlU1RXJrSmdnZz09Iik7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTo4cHggMTZweDtoZWlnaHQ6MjRweDtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDoxMnB4O3RvcDoyMThweDt3aWR0aDoxNnB4fS5jb2xvci1waWNrZXIgLnR5cGUtcG9saWN5IC50eXBlLXBvbGljeS1hcnJvd3tkaXNwbGF5OmJsb2NrO2hlaWdodDo1MCU7d2lkdGg6MTAwJX0uY29sb3ItcGlja2VyIC5zZWxlY3RlZC1jb2xvcntib3JkZXI6MXB4IHNvbGlkICNhOWE5YTk7Ym9yZGVyLXJhZGl1czo1MCU7aGVpZ2h0OjQwcHg7bGVmdDo4cHg7cG9zaXRpb246YWJzb2x1dGU7dG9wOjE2cHg7d2lkdGg6NDBweH0uY29sb3ItcGlja2VyIC5zZWxlY3RlZC1jb2xvci1iYWNrZ3JvdW5ke2JhY2tncm91bmQtaW1hZ2U6dXJsKCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUNnQUFBQW9DQVlBQUFDTS9yaHRBQUFBaDBsRVFWUllSKzJXMFFsQU1RZ0Q2MHpkZndPZHFhOFRtSS93UU1yNUswSTViWkxJekxPYTJudDM3VlZWYmQrZER4NW9iZ0NDM0tCTHdKMmZmNFBuVmlka2YrdWNJaHc4MEhRYUNMbzNETUgzQ1JLM2lGc21BV1ZsNmhQTkR3dDhFdk5FNXErWXVFWGNNZ2tvblZNNlNkeUNvRXZBblo4djFIang4MTdNaWxteFNVQjVyZExKRHljWmdVQVpVY2gvQUFBQUFFbEZUa1N1UW1DQyIpO2JvcmRlci1yYWRpdXM6NTAlO2hlaWdodDo0MHB4O3dpZHRoOjQwcHh9LmNvbG9yLXBpY2tlciAuc2F0dXJhdGlvbi1saWdodG5lc3N7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBT1lBQUFDQ0NBWUFBQUJTRDdUM0FBQUFCbUpMUjBRQS93RC9BUCtndmFlVEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQjNSSlRVVUg0QUlXRHdrc1BXUjZsZ0FBSUFCSlJFRlVlTnJ0blZ1VDQ3Z1JyQUhOK1AvL09yLzYxWTV3T05aN21aMXUzWEFlTE1qSlpHWlZnZEtzZmM1eFIzUzBSSUlVVytDSHpDcGMyTWNZbzdYR3YzZXg3VWlaZDU3cmp5enp2K3YrMzNYL1IvKzNyL2Y3dlIzODZZK1R2S05jZi93ZGhUTFBjdjlxVTJ3WmQ3NHV0aDB0MTgyMWprSVpMUGNzSS82bldhNFh2dXRxdVUwWjg1bW54ODBTL1p6Z3BuTG5PdEhOdDcvb2Z4MVRLWGNTTnpOLzdxYk1RM2p1N3JOUW1NWVlkLzRzMmo5YWErUCtnR2FNY1pyYjFNL3RkcnZmNy9kMnY5OVA5L3Q5M08vM2NidmR4dTEyRzlmcmRWd3VsM0UrbjhjLy8vblArMisvL1hiNjZhZWZ4bC8vK3RmeDV6Ly8yWUs1QWwycmd2ZjRVc2JwZEdyQjUyYkF2QXJYcHV6am1pcUFWU0d6NWVEbUdZWHpoYkFabUNybm16ZGRwVVUrOFkxZEFPWWVYQ3REVXdWd1Y3WUNHSDZ1QW15TWNaOWw1dmtVYUJQR01VWjcvSjV3Lzc5Mi9mdnY5WHE5MzI2M2RyL2ZUeFBFQ2VNRThuSzVqTS9Qei9IVFR6L2R2MzM3ZHZybGwxL0dQLzd4ai9HM3YvMXQvT1V2ZndrVnN3b25namRPcDlQekgzVTNEM3ptV0duWlZYbjRqQ3FzN3dDMkJLUDQvOHRBemtac29XeDZYcnFlSFp5bXZwNEFCQ0JKaFRRd0tmRFQ4Z3pyWkNJcWk1QWhpQUNqQmZFQjJyUDgvWDYzTU03ZjYvVjZ2OS92N1hhN2JZQzgzVzdqY3Jsc1ZISXE1ZmZ2MzArLy9mYmIrT1dYWDhaUFAvMDAvdjczdjQrZmYvNzVKU3ZiZXUrYkwyV01NYUZiQWxwQk5NODVRWCtjdDZxb1Nxa1BBd3VRbEJWS3FHTkZTVU9BQTNCbXU3Z0M1aE5PZDE1blN3dkFPVVc3QzRnaVVDVjhTZ241TDloTkZJcVRzcDBHeEkweXNpb3lqQWprWS90R0pWRXB6K2Z6K09XWFgrN2Z2MzgvL2Y3NzcrUGJ0Mi9qMTE5L0hULy8vUFA0OWRkZng4ZkhSd3JtVGpWNzc5RVh1MnB4Mnhoand0ZEpaUWNBV1FJUExQSVNzTUphU3dpRDhneklLcndTeUFURTVqNW5BYlI1YzFkQlV3QmxzRVdXMGg2THFpWXNxRlBBUXhDeVJaM3dPU0FSeG1sWE1YNWs2NHBRZnZ2MjdmNzUrZGsrUGo1T0h4OGY0L3YzNytQYnQyL2p0OTkrRzkrK2ZSc2ZIeC9qY3JtVUZMTzMxZ1lEV2JseFJJcy9UcWZUN291c3hKc0F4WEEyR2M3VEE5WGRnZmRvSGJGc2o3NlgyKzFXQXJnSTFhZ2VHd0EzcXVwcW9Ic21jYkk2RnU5M3F1Z2dGYTlkN0xlRHRnS2ZBRkhCSitORUJ5SWtjSjVLZXJ2ZFRtaGhHY2dKSlNaNXZuLy9maitmeisxOFBwOCtQei9INStmbm1HRCsvdnZ2NC92MzcrUGo0Mk44Zm42TzIrMVdzN0pqalA2d3JhTUk1RTRSWjh4MnZWNVRTd2txdW90VjcvZDdUejZIRldzRC9xTmNkdzBDUTNxLzMyMWM2ODZUd0RWSWRidXk3M3pObGRoU0hiOEkya2xaem5tK0luQlM0VTZuMDMwMmFCRnNMaEhEQUtKVkpWZ2xmSTlqaHZ1NTNXNTNzTEFOWU54QWlEQTZNQ2VVSHg4ZjkrdjEyaTZYUzd0Y0xxY1pXNTdQNXllWTgvZno4M09jeitmbnNTbVlVeWtuV0VHODVXQnN0OXN0elNMeU1kZnI5UWkwOGlZMTVVWjBMbERHTGhSM281eksyajdPUFVURDBFK25VM3RrN1hiLzE2TkZiaGxvQU11WTF6akxVT08zQktlSURlK1o4czMvSjRnRm80VE01alBtdVJnMjhmb1VLS1ZTd28xNlRnQTVucHl3Y1dMSGdZbC9QejgvNzMvNjA1L2FiNy85MW02M1c3dGNMaWUwc1pqNG1hbzVnVHlmejg4RTBmMStqOEVjWXp3VFBFRzJjcWp5ZkhORjBNOGZ1cUVpYU9WblJ6WlpRTmg1ZndReUhnL0hER2ZKbzg5UTF6Yi9xdXU1WEM2NzczSTJYS2ZUcWQvdjkrZDN3dXFXdmEvWVRkVWRFVjNmaEl2L1ZpeXBzNllFM3gzcjQzSzViSlFTNjZ6YXhWR0ZzdmQrLy9qNGFGKy9mbTNmdjM5dnQ5dXRmZjM2dGYzKysrL3RkcnVkdm4zN1p1TkxCYWFDTWdVekMrclpSaUZvd3hVdUpJOFlNcWNDcDlPcHE1dmFnYVlVNmxHSkExWFFxZWpjaHc2Q2owR3c1bllCckd3MDFBMk8yMDZuMDRCR291Tk55VGZwL0Z3RWxoVWV5Nm5YcklLdzdRUVdkZHh1TjJsZEw1Zkw4MzlnU1BGOGFodS9KdkJPNDhDUFN1cU1mOFZwOS9QNTNMNTgrZEx1OTNzN244L3RmcjgvMzkvdjkvYjUrVGtoUEozUDU2bVE0MzYvaisvZnYrL2lTZ2J6ZXIwK0FaeC81Kzg4YnY2T01kYTZTNXo2a2QyMWZZQzlkeHY3Y0lKSjJkOUFPUzMwZlBNenlIaVRNOEI0REY2WFVsWUhwNEtRVzNXKzF0NzdNTkIxdkdIeFdxN1hhN3ZmNzgreTUvTjVBK0gxZXQyOXh1UDVkYll0eWFSdTRBa3NiUHE2OTM2ZmpSelhSeEJiUHIvYitiMTgrZktsalRIYUJCQmZuOC9uMC8xK0gxKytmQm5uOHptMHNCOGZINXU0Y3I1R3VCaE1WazBFRW45UnNjdGdWaE0raXhsSnRNQTIzUjhCNnl5c0FzdEJPZ0ZYSUtLQ01JZ1RvTXFORXUyZllNSDd6dGM3MzJkUUtrQ2oxeXRBWnRZMEt4OHBJcjhHR0orQVQzVisySGlyaGwrK2ZCbVh5Mld6NzN3K2IxN1A4cCtmbjgvdFV3R1ZsZVZrVHlVYjY4RGtmYXlXWTR6eE5SaWhVNEVwTEpQWlZySyt1N0o0L21nZktxZUxXOVgyUkVXbEl0TDFkaXluYkREYjMralhnWWpRcW4wcnJ4V2MrTmtJTFA3Rjd4SWJNdng3dlY1M3g0MHhubGJXSkYxMlpTYWcvTjBwVzZ0K1p6bU9NekhqYWpLd0Rmb25kNzh6WVRkZnExOHVwOTd6cjJxOHYzSWlvQnByUnRCbDBFWjlvZzVXQlJHT2RPSGpJalhGN1VvdEZiZ09Xblh6SUp5ell2akc1SVlnc21NT3hIa3o4T3NNU3JWTldlcTVUOERhT2NiRXYxT2Q1cmJzOWFPN1l2TWV0NjNFa0YrK2ZNRXhxK01SbDQvTDViTFpOLytleitmblo2S2F6dU1xWFNRVk81c3BKWGZsSEFJemVzL3hKc2Vja1JKaURNb2c5ZDZWZlJycVhNcjZLcFZWMjdqUndKYWNHb3ZPQU0xek1kUU1ud0sxQXViSzYza2RDQ2h2STFDN2cwejluZi9EK1h6ZTJWajhIN0d4NFA5ZHVRbHNZQ3JxeU44WHFHM0htLzEwT2ozancvbitjcmxzdHVNK2pQbW14VDJkVHVQejgzUHp0MnBuMVhzRUhYL2JuUGFWcVZtaDB4d090MG82WExMQUhlUFVVMjAzd0hmY3JzcEN3bVYzVHJ5QjVzME1zZWVnOTd4L0J3ekNqQmxiQitwUkFQbGEwQlZRdVQ2VjZRSGRCbGozZDBLRzE0N2IrRHF4UWVVeW1ETzQzVzRkUWFyK1RJandtQWQwejgvaDY1dmYwL3lMdjNQYjVYTHBydS95ZERvOXM3RVQwSStQajZkS0s5VlVFSWVLV1FXUEFPcko4TEtkNHZFK3Q5MVkzZTdVRmxXYXRnMlZ3Sm5iK0hQbXR2bS9zZks1OS9PYVdGM3gvZVAxVVBIdkE1RERZRHBZWGZiMGRydjFWMkRrQmt4dHcvdEVXVlZsWFdkQzlwRllzNS9qZmg5ZFMvMTZ2VzdzNmxURytUZnFzeFNKSHhrWFhxL1hkcjFldTRMc2ZENlAzdnNUM043N0RrTCt6UG01alNkS0w0elIzQXhRZDZySGtMa1lsU293c3JxN3puenU2d1N3ZHNNSk9YbUE1ZkJjanh0Z01HQllIbHI1em9raHRzTUNUZ1hMUU9XNFhDNmRFeUVNcHJMOG1BUXpYUmdkdWl4Mnlaem9yeGtZc0RuM2hCMVZlTUxHc1hzVnRnbDJwVzhTM3N2azB2dzdSNGhOYUh2djRjQUNsNUhGendJSDBLYzZ6dTRYakRQUi9qcEFWeFd6TzFYazJERGIzdlRjeGVHVTFpV1pIa21JRFd6aVdLdmlyQ0o0RHJhdnM2SUovR0c2Y1RxV2RYRHkrZkFyUURWVmtMcWtWakFvWklJVGRtbUlxWHdxYTk1TjMrTUdZb1pRZFJWTk81M1kxeFJraE8xNnZZN2V1NTA3Q2E5bEpuYkdweE9lbVFoU3cvQVFzbW1wNXpVOUJpVThHNnd2WDc2TTYvVTZQajQrZG8wQno0Q3BnaWtuVFVlRHF3bEtCbWczdTRPVmpyWjFBK3JBY2dhZWpXcTZlSkN2Q1lGRE9OU3dPZ0hYNEVRUnc4bHhiekRPZEVLNmdaM0hrMWIrOGcybzFKRnRLWHl2L2ZFZFRYdVdqV1hkQVppQnA2QURlRHJDRmlpbTdCNlpGbmVlSTdHdm0vUE1rVURYNjdXN3hJOGIwRDcvdjhkQTlxZk41b2FDZjc0V1pqSDBtZjFjbWZZMVkwSlVGbVZyVFd1OHV6a05jTHRFajd1NUZYQlRrZkM2R09BNXE4WU14TzhLVnZGNnNBVkdkY3JVYnNLT0RjUUtrTE1PTWRtbHh1bTY0MllyUG0yNkFsaFpXMVlCMVIrcnJHc3dFOFRhWUFXZVVNeGRmK1dqd1N2WjJFZjN5dE95Zm41K1BwVlBBYXFPbjQzTXROQnF2bWpqeGJqTTRsWmpaWTRncU5NSTVrdGFXL3NZS053Uys5bEZRekdpaG1NQ0tQYTcrWjBWNkViMEdSbW9idHBYOEpsald1NUZNTE41amE2aEc5a3dRZ1pxZjUrMU5INVV4emtGUmVDZFdoSjhYZGxHVWt4TzdIUmxZUm00bVZPNDNXN3RlcjEyVFBKRXcvcm1FTjNMNVNLSElXWmc5bXorcFVvS09ZcTViSlRKZFgyZ21lMVVjeE1aUUZhRVFJbEhjdDMyTStZMUJ6R2tHdXpmaXlBTjl6K3VncGxaMXN5bUNyRENZWWtHeERUcEk5UnpCeTBySHllRFVDMW5XYWVVYUQ5bjR4a055WU1CRFp0elozQisrZkpsWTIxWEZET2NBUkpsYWJPeWlTM3VDcExJOWpyWmpDRGthVnZjQ0Nqd29nbktTaFdkelhaV2xaTXZWVGdEOExwcWxDTHJxZ2JjQitxWXdyZ0tZcFQwY2NDcWJLeUNWYWxrRWFibi9GeW5vZ0NyUEtmcWY1MXhKN3NHQjJaWGNabXhvU096dGp4MzAwRFppN2EwLzJBSVIwVWxCYWc5U3VEdzZLY0F6bGFCN3ZIWnZXcGpLOTBkeXJxNmJLeURVWlFiUjBCMDViaUxRa0hJY1NVbWdJSytTd3VxZ0hDbm9pbzJSUVUxeWorQm5CeTlwcGhWS0xHeUM3WnpGSzFweFdLK0U4SWhWQ1dMTi91THRuVVU0YXlvWUxvYUFOejhGZHRhU3ZZNHBWMEJFVzJsczYxY3pxbGxCS3BUeUtnTUFocloxY2RjMVJST3RQbXZXTmtkY0taN1pLeGFXamlQTEpNcHA3T1pLeEErcnFHL29KTGp4ZjBwbkpscUxvRFpvM2d5VTBtS0d5czJ0YUtlY2ovZDFDK3JKU3BsQnFsVHlBcWdSK0Q4S2pLbG1STDJndFVjQWRDdHNMK2lqQ05UMW9xcXFrSDJPSEViRzVzREZuVWc1QWEreUxvdTJWVTFwdGoxUzJaUXF2MU9SWk45SVd6UmZnYVJCeEtvQkU4VVd5cWxKRnRySWMwQXhOalNqZWQ5OUNUWS9YRGZTekN6NU0wSVpvVkVzV25QRk5Uc2w4b29WQzFUemJHZ3FGWk5EU2dWd0tLKzFzR0RNS3F4WkNXR1ZNRHlzaUVyMWpWU1FKVVl3ajVpSE9sVGhkSHQ0NFNRZzlDTitubDhEOTBOTUlnQWRncjQ2SnFSaVI5STh2UmRGdmJyMTdtL3l4VU1Lak5MTWlWVUFEd3UyQ1dHaGhpK0Y1NVRXTTlNOWNvZ3ptczFkbk00dU9GL0xBRVlXZGNxbk03eUZteXEzSWZ3bU9ST2Q3WTFpRld0T2pvWThUbzQxbVRWNUl5c2dGRnVSenNiV0ZHYk5JSUpDRHYxZE9vNGxaRzdqV0J3UkZ0VlRLdVd5ZUNCeUpLT2FuOG9aM2VwOVhkZE5sMHREdWF5d0x6OWNYUFllREFBMFNwa0JPOXNiVmNUT1ZXbGRQdjR1eXpFa3p4SHRqdm9uSG9Ta0ZFV05vbzFkOERoY1FwdXRkMnBwTm9uNEJ6b0FpSjFoQkZRZzBkVnRkYkdISERRV3VzaG1ORVF1a0xNMlFPMUcyWThiZ1RYcUZoY0JKajdFalBnY1B0czhVUzhxUHBQQi9kWHpuT2g1WjQzOHR6SDVlYzZRZ3JPS3JSUmZLbXlzQm1VREIrUGhZYWJNbFZQRVIrR0NTSVRUenI3YW0ydEFySDNiZ2NFelBKbStjcjVqSjRObkhORkRWckZYY0k1TGU5azVKbncrYmVkYlYrRmZSelpJSGFPT2FPc0xZMC83VUdzNThEanJHd0tNSU1GSUd6T0VXMS9qR3NkQXRDTjZoRUFJNGhCZTlZWGVSUk9CU1ZQQVZQQXF2SU01Yng1aFZLV0FNUDZ6QlJ5M2llc2NyaWRWZEZCaW5CeFhEbkcyR1JZMlhiQ3ZwMWxodkd0TzlCeHU1aDkwOFhRdTQybG5TQXJNRmRpek1pbTh1d1JDeFBHbm5PUzhsd3BuYk9pRHFUQWpzclJOL1Bjb0FTY0NiYUFDcVZNNDB5bG5qalRCcytid1dsQUcyMy9VS2Jka2l3S1dJUVBHeldhY3pwb1NseFBFajgyMmNOV2twUzdGeXpzRHJxcGZncEczamFodzJ2Z2JhU1FBeHVMV1pZdDdKenlOZThKb1pwTkFjdkRGT2R3MHdxWVQ5QUsxclp6L0RkYlNsTFBwMHJ5SXhnUUpsSzlBWmxFcTdJT1hwb2hnOVBJaHJDbmc4OEpzT3hpVjRaV0FZZmc0c2lreC84a3kyWjlsODYydXF3cmZzY0lIOCt1Z1RtVkd5aWRkZVZZVWdFTW40R1p6ZzE0RXdJc2g5c3gyY0tLaVdYUmV1T0U1Z3pHT1FnZGxSS1ZWZGxldnFiMjc5WHEwUW5zdHMyVkRhQk8wY29lenNydVd0SEFwdTZzS0c0SUJoTjBhR1Uya0xyTUtHUlROM0htYkNEd0tWMTR6dmtNRURHNFFmWlZzcFZsYU5VMm1oYzVURVozTjFoL3pxVGhldUxwVzA1WldUR1ZqYjNkYm5ObXhLWkJuTjhKcWlkYVZMS0FPeUFSTkxTK01CNTRaMitWYXFvTUxLcm9WQmxuZ2VmblRQQWNvSE5XQ1N2bGZBOENJMEhFbUJOQm5CbFh5TXJ6VTdBN1dWbTk0UFBxUTJnbXFLeCtXREdzbnZpbG1jU09CSnFPSzFuWXlBSXp1QXllc3EzVWRTSzNLZldjWUtEOTVIbWZZT1UzcXNlcjJDdFlFVUErRnBmcWROdmdQQlpVQmhEckdPTlJWbFFzaDhyTGNhVUN5a0hHME9PVXdUbExCcnNoNXNvRU1HZXppMUU0SFJWdDFpY3A1d1pFRlhkaWJDa0c4WTh2WDc1c2JPNEUwaW9tOXoraGpTaU9meTNEaHBYSXRwVmhFK1VHUWR2b1dqdENobXJHSGY0WUF6S2dCTm5HdHVKeEZDZUdkaFVBZlFMTEs4a0JZQVA2Z3ZGSlphak1HM1hreWN5OEt1QzBxNEV5eW13dHdkeGR2Mk0wbUlCdEswTEtuZjY0MGowMEF1cTRnVWtkV0dsaHMyMnFKYzZkWkNzTDE5b3hubFRKRzRTWVZSSUdwRDhUUEZCdU02T0VsYlMxcGxkaWQ0bUdBeU42Wkl1cGJDNWJYSk45ZmRwYlRoU3hMVWFJOElHMVhJWUJ4VzNUanM2S1Fvc0tjeGZ4Y1FtZG53UkdNMTBHbkZjQ3kyWFl1bkxNeUFrZGdrNG1lUGljenNMeWd0aGNCdXQ2Z29PcVM3WVZGWEFETGphb3NCNnM2b2ZjWldBWlNJUllxU1VraXpZd3R0WWFiM3ZVT1E5dzJIUnhJSWc4V3dSVmVFNjh4aTRVdEwzelJwaHhwbHp3dVpyY3FZQ3ExSTNqUEk1ZG5KSXlnRW9oTWJQcVZKU3pyd3p4QkpUczV6TitSZVVTZ3hpa1BRVkYzSlZCZU5ReGJIRU5yRU1OdkVkRlpWVjlsSDkrT1JHRXNOWlFweVROYzRDM0FHN1hGNG5nenErRHJPMnpidWFhT1hnZGFGY2RrRW90b1NGQlZYMnFKMEM4T1daZUc0S0dscGdoQTBYZlRPUENxVjJxcXdRMjZRV2ZGMlBNTGhJMncxbFZBYTJhUHNZZDB6YTI1TVFSd2djWk42dVFEQ2krWnhpRDRYRU0ya1p4T1Q0MUZuWm5hUmxjcFpvdXpsUnFxZGJRVldvcFFvU0I1OFJWNTBsQk5ySGkvQXdYUzVMcndEVmxwWTNGYzNCeWlZR2M1MlRyaXN0NmtPWGR3SW5BUXRKcHA1UWNoeWFxdVlPVjdTdStmeFZNYVYzZGMwUkUyUzZtVVkwZ0x0MnBNY1lxcktJUTl3MmwxZ3BRVU10UVljbW1idDVEVE54ZGhuVUNqUXF0Yks5U1VTenZyQzBtbWhoRTFlMkZTMitveHlweS9aQVN1dGttdGp4M3ZjQkMyNFBYNjVuYnFrQkNSaGZqUzlrSVlQbmVlOGNNYWdWT2hJLzNUMWZBbWR0QVdac0Nzd1RKQ2tRVk5hMHFXS1NLUE9wSEFVaEQ5RHJiVmN5b1lrd3FodmgxN3ZZQWF5WExReUtHWWR4bFVERnA0OTRyQlhSallnTzE3RERZZXROSVVqL2V6cDZTMGxubHBFd3NXbUpNa093c0tYZVpLRUFqSUhuMEVRSklTYVJCY082VU1JTno3cC9iRWpqbnc0ZnQreG1EdmtzeFg0RzJySXJpczdxYWVLd0FGTVAyT2k3bjRjcml1Wnd0cFNVd3BmTHhTbk9SU3JJcXVzYzVaRmFYeXNxUldqaVoyRHlBV0VJTDM1dFZTb1FFbEZBQ2pPZUdHU0U3QUhFUWdkby9MU3ZDT2dHQnZreHNtRGJ2bFMzRnA1dmhhQjJUQUdxUktyS0tNcmhMVnBhR3pFVmpaME9ReERoYUNUQStReVJSMWQxNWFRenJKbnRMM1JpYnNpcGpHNmpsZ0w0eXFiUzBzTllnMWU4NHZoYkJWckVsSzY0Q1VjV1lYRGZLeGhwSXV4aVZKWlV4c2JNeS91UkJLVE5SUTRrUTNMZFJZTFMwckpqUlBsVFBxWTZnZEpzRURjK2FRWEFuK0hnc05VQ2JSdUYwT2owenduQTdiV0RrYmhPNUVuczAwcWVRaFMxbGFCTWw1TS9jQWF4c0xGOHJLeXFsK1RmN0VMTEVHdS9peGlpbWRDdm8wVGpmcGpLd2FnZ2VuNGVoNXY3TG9rTEtiTHV5dkhoY1pHOGRoR3JFRHg3SGc5M1pwcEpGN3FCcU8zaVZ2ZVhFRFFOSW56ZW9lOFlxNmVQYVpCWjJKdmlNM1cyVUFHb3Rla1JDQUdxNEVrRjFYM0RPblIxMXlSc0JMMXRSYTBQVmNaaU5GWFoyYzM0RnNrdm9tSW5RUTZsenBKb1piSnhrNDNOd0tKRkJxdUpTc3JCeUh5ZHhLT25UeFFBU0JtUzNqK0pNbnNIU2xhM0VjNks5VldvSlZuOXpmandPTTdocVlBQXFKUXdFMmEzbkE0OEoyUUdlZ1JrcFpOaXZTWSt5czNFa0tkNG9KSXdzdklIbDNjV2dMdDVrNE5INk9tdExXZHB1ck9rd0VNdXBZYzdlTXREUmhPY0kydWk1SmhWSXpYekx5dG8vR0FQdVpveW84d2tvZHVWZ0pnbEN0N09oR2JnSUQ0TXE0c2krNjN6VVMxRnVGRlhGbHF5YWoyZW1IbExNY0JxWXUwRk11UjI4QmJCN2xPeFJNU2lDUVhGaENLdXdraForcFlEaUdTZ2JzS0tWOE1pU1JzdUhTSVdNOXJrbFJpSWxaWnVxWGpzUUs4b29ZSk1ncTNKS1dWa2hIYmhzVnhGVXp0aE9XUGtZaWpjYng1NElLc1NkVCt1THIzY3JHS3lvWWdGaUdSOWlCazRrZmxvVVgrSklsUVJRcWFibXBnbmhxdHBRcGI2UlZRMVdINURuclM0aEVvR1pxYWVyUTJkaEZiejhYZVB4U2htRGJvNzBlSVNqb29yTzJ2SzhTSlhJNFNVbUVVNHpXS0R6VUR0V1RZdzd4WGxiU1RFajRGUmc3ektuS29HUkFMdjBHczlUZ2MxQnBDeXdHWlJRQXRxVnoyeHJCY0FNekVwZlp3RlNhMkc1VzBRQkZqU01hcFdBRUZhM0hjR043Q3hEekVDeUlrSjk3cXdycVdOVFdWbzg3NlBQc2pQa2oyd3Zncm9NNWxMWktNRVRLVnFsL0N2bldWRmlGYS9TekpVUXdrb1pzcjY3WTZ2bFNSVjMvMnRtTlRPWTN2bmF4WXdNdW9QS3FkelIxdzdJcUh5bWxQeGFBVGhmVTdLbzJaWFlqNEFZSkhMK2tOZEt3UlFZRVNUUmE1ZnNVWi9yVkMxVE1UeVdWeVlvcU50dXphSHNNeXYydHZvYXJ4ZGZxd1lnVTFheEZvL2NucWwxRkdzcUsrdUFST1Y4Qlg0R1U4V2NaVEFUaTJxN1FjeWkwTzBWK0doV0JNTlJVa244SDFTc1dWRTVCeTNHaTBFQ3FVZUpvQmZBdERhNGFta2RYRzM3QUdQNUdnZWI4NHA3VWF6cG9LUnpkRnplUThIa29IR3hwckt5L0hwbTV0MTJwNDdKNnhUWURFejd1SU5FWFN1eFlYdkZza1lBYyt5U3hIOXNmNWZ0S3pVNklid1ZCY1VHZzVlNUZNQ0VYU0VyWlIwd0dheVYxOXdvTTlndVBqVHFKZFZUcVI0dUU0bkpuTGxkV1ZrRUNDWkxkMlZMRit4dGFtZXg3SXBpcmlTRFVwdnJwbjlscndHTUNIeXBwTUgrcHM2TElMc3VGR1VqMVhFT1hpcWJxU0hQVUtuQ2xwV1Y2OGtxdFVSVk5EWTRUTmFvY3lrb1llVFU1bmdHRVFhL1MxRG5uRTRBZVhNY0tqSFBBbUZWakNCRU5hZXlMVk5IZnIzcHg4eFVzdEo5NGhJcGZINEhLRS9lRGFBcks2bFN5VlZGYmR0MWd4VElWazNwcHBWbEZYaTRwRWhWQlRPYnF1b2hVODVNTFhuMWlhaHZVa0hKalNDTWMwMXRMRnZlVlZCeDBEb2RNNmpmdEN1N0RPdEl6WXhyYzBxcDFKR1AyYXlZRnoyR2I2SHZNck84Y25HdFY2R2ptM3VJbVNmRDJHcFdLNnVvd2JaR014RktRQ28xcE9NdGNNWEZwUnN0K2hYR29Bb21GM3NTVEJHZ1RnbGJCS1d3c1EzdFpxYVlTcDBaMUNpbVJEV0ZjQ0pVUFlKMDBCSTVGa0tZTm9pZnVReG1OODhTV1ZYV0xNYVVxcXFnQzBCbVFKUjZzazN1OU5DZjZqWUxYeEFmcXNZRWdWTEFoUlkyQXRndGZsWk5GbUZ5aHhkckxrQWRXbGs0RDg4TTJpeEh5ZXBJZGhNSHJHL2lSMVpHdHEwTUdwYkRiUlBZT1hlU1kxTTZOeTRac3R2R1NrdEsrWGJGUEFUajJEMzcxc2FQRXNBTVhoWHJzWjBrbS9YU3RraGhNeUJmc2E2dVhGWmUyVkNlK1lNcjErR0tnd3JReU5ZcTFWUnJCK0VpekFvdzZOc2ROS2N5VkVrWWVNNzN5czZxNGtBSHA2QmlGa2xUa0lyVkM1b1lWN3V6d09HQ3o0VUowU3RxMmxXTUp5NHd0YitSZXRMNnRaRmljbkptQnc1VWpDdlhYTVpWSlgyTVFrYmYrWE41RVdkNzhWejgvSkVzTVpUQmlLTnpzbTFpbkxSVVE3NEg0TmlkYXFJNjhqNXNBRmd4Y1J2ZUM3aWVMSlhmUVl4alpaMkNzaVdGZXdaWEptQklsWjF0ZHRyWDRoU3VhdGVLc28vUlpPdE9LVzJubXExb1R6ZUs2ZFJXQVd1Mk5SVmI0aHEwU1htMUd2dHVnSHJicjVJWHFtU2t0ZzVDdURFMk1TbFB3c1k1a05FMldwM0FxaVpiV1ZMQXhpQkYrMmlCWmJ1Tmo2TUI2cnNNTEM3Rnlhc2FZRHlvN0trb1B5RXR3M3BFTVhmUHZ4QUppMmpBUVFnanJ6MHJMSVpTV1psSW9OaHdkNXhLNEFSOW1ZTmpXQWFMcm51SW1KZUJWTjl6Qk9ST2JWdmJyK21UVGZGU0VKTFNSbkhvN2hFSm9JaThNRnFqeG12Z21GNVVSWno0ekxGZ1paOEN0dTJYN2dnVmNjS205Z1Z4SXNPSHF4WGdOTUtuRldaWW5mMWRCbk9oYXlYcTE3UXdGbFdXMDllTkt5VkpGbVhxYU9OR0E1YUNlZ01iSjNVVWtHWTFpYzNuS1dnanE4cWZWWUdRRzFnUnQ2cnM2MmE2SGlxcVVPcWRlc0s1Tm1YNG5Hb2ZKb2lFMWQwZEY5bFZWa3ZUMS9rRUVhYUNvWU93RnBjVmNvTE0rNzY2OVB4QzlyV3FrdEgwc1dVWWxkMFZDcHVCWi9zdFZSY0dneTlXWDIrVTFRdGhpOVN6QXFTeHpac3krT2lGekJZbnlTR1Y2R2t1NDRyRDhCQ09aQlYzQnZENStBS1JITndNRXNCNkV6SG5KcGtUQWVpVWxFR2tjRUNlQjZHRFpUcDVZRUpUbHZkcmtueFlqVGxsTWtmTnRYd0RqTTd1VmpLNUpYVVVuNDNycnFwSzJqeXRheEhXME01RzhEQzhydEhNWXM3S1NnZHVWUU1HVFlGcUZ2VlM2cmtEM3NESjQ2YWZkWUZ3b3ExMUFPS0NCTGh2d29VZ2M4SUdBTnljUjZrblpyZEpQZHN1eG55amZkM0ZvdlRsUk1kRWR0T2w1Q01WNUVIc1hRQmlzN1RPd3ZJRFphR2oyVm5wYmg3Y3BLNjNWd1lFTUx3cWJqenlsNjk5c2F3RkZrRjF5cWpVVTMxSGZDNnNXMVpGVkZ1WFZYVmd6OWtlRWF3MHlzMWxXZm0rYXpRQVFTV0EraEtZVmZzWmpQbmNBY1VCOW9JYXl5L1VaWFJOY2tER2ppNzdHc1didkJvNnRQcldQcU95VmtCVXErSU5lcXB6TmRZcy91MGlmaDVxbXBxSVcrMzNKVlNVY3dZNzBLTDRVOWxZZFU2bGp0U2xzN2xtZmk5ZzNZemVRZlZrYUdGYVYzT0RDbmFEMk44d3NFREZrbEUzUnpNM1pnaGRZa1dIc3N6cTcwRkllY25La1ZrdDhlek16UnE5YmtHdUtvalJMQlZTb2QzWTF5UHFLZ1lXN0pSUVRQVnl5NXhJWUxqT2d4Z1Q1MlJLSlVZMWRPcklpUmQ0ZnV0UXgvQTVBY1NtRWp6MHZGV3JrTHp2YldBdTlIT1diR2d4RmsxVk5UcG5CS2s2VGd3aXNJL0hjeFlYUDF1QVdPNzJVTEZsQlRxK2FTdTJWVFVzNmhyeE0yQ0YraEVvcjFWSUE5Wm1GVWFhYjFsU1NnWnNWczRzeHpIbFZMb0pIcjlINERoT05Ua0kxWEMwL3dpWTJOb1dBRzVSbG5IRm5xNm9MY2NwUWRkTXVKL08xN0pWQTVPSExpMEJxQ3p0cTdZMSsrdWNDZDk4cUxJOE1JSEJWL2NLanhRVG1lM2hGQlMzTXlDcW5Ec3V5bTJvODBIanZGRlR0clVSbU5hR0pzbVZhaEltalRzVVhLdFFaVEFWczdNdnY4LytmelVyWkFYY0xKNk00a29lNlhQMGI2U21XV05EenlVcFE4YmwrTHRXeDR0dXFaMzZjUllWM3l1VnhQTnd2SWlxaVFDU211N3NyZ1R6UjZua3locENhclh3RnkxdkdkNWlQMmNZMDZsRnI1TmpoaGcxWTYrTkIyOGZ0Yks4M3M4cmY3a0xKYkt3REZQYkxnMjVhMEFkWkpFaXFyNXBoaXhLTURsUlV0Y3NzcTFocmlMcUdvSCt6ZU5nVm05T2VtanNFVFY4SmRGME5IbmtJRnhXWTFPQjRZcnA3cnRXSjdOZ0FBQVBYa2xFUVZRM29OczVucGx5VmY4dTJGb0x1MUpySHZlYVpXUWpxQWtzaHRGYTJnenNTRzNacGtidmczSGFmRjlzbFBQbGxkakZsSzgwR3lzbThNcjRNUGhuZU5XRU5QR2pBSXBtaWxUUEFUZFRSVFhsQ0JZSFlBUXVQd0EzNnhJcFd0R040cTNZMk1oaUdzVXB1U1NubEVKUkQ4UG9yQzdDRllWdytGNTFxVGhnYWJ4c1R4V3pDR1kwWlNzYjNsZnFBeTBPUE5qTnk4eGlRUUtzSFlGUTJIQlpWdlZiQnVxM20xb1dLYWpxYW9uc002dVpVcjZDalhXTlowbDVFM2gzalVSbWE2a1AzTUpJaXkxTG0ra2FoUXE0MU4yaVpqYTVzanRsTFlOWkhackg2cVVHbTR2TWJEcDZSdzJDRm12dXlGa3JCY0N5TXRGcUJhRUNtc0hvSzlCWjJMQS9sSmNScVNhRHFuYVdiclpkR2F6M0RMZ0l2QmxuNHdvR3p0YnlKR3FzbHd4a2hoSHJUalRZRlhDdE9vS1M4dUxkb2ZWZEFiT3lsR1U2bmxZcFhXWnRzNG5YQnE2V3hKaXRNTm9rSFVKbmJuSnBsUW0rYUdwWTJhNUdNVjJRRDFoUnViQlBGS2R1bWY1T0hrTEh6MEY5bHVFNWtqQmpSYTBuRkU1Q1VHcUh3MzJNbWpaNnhrZ0lOVm5TbloxVlpTdEsycUtsUmFMbFFnSzd1VHE3SkZYSndNKzNTT0VLeWhaTkkrdEowSTVxTVl5OWsycUpEN2RWV2RxS1hhMENLTlIwQ2NqZytCMklZdTJmY0JaSlprTUZnTTExcjBYOTJ3aWxnaEZHZ3pWbmV4bHFCN3hMOW1TMjlTaVlVVlkyblhPWmpOQlJzeURzUVBSV1c1aHJaNFhjZEM0SFZXUmJqZ0pyNHNGb2ZLNVN6alE3cmhJMVVlYmRQZEViajZzcUl2VFpRWjV2YTA4ckFCc0FXMFV4ZVd5dEFrN0EyS0o5WnB4ekNpb0IyNFhGdFlBZVhZeHI2YW5TcWhMZ3BwRXFXYkd3THVuVGdyVitJaldsTDI5bGphQWw0RVFNR3NFcnA0YXBlWmlxdXdSWExYQXFPQ2VydTMybW15ZGM2b1dUU1dwRkFHZHplVEI4UlRIVk1FdGxNOTBDYmJRQ1loUGpxM2VnWXIxRkdkWUlRaml1REdaNXpaL0F6b2JLR095THh0aTZjNFJ3dHYyYW55V2xMSUNubExoeEpSWHQ2QTVlYkRCV0ZOT05ieFdaMmQwMm1udTRTOVlFQ3BlcHBWMXpTV1JCV3hIWXpWSXYxQ1hTb3V3cXFYM2pCQkJEWmRZUWJwVFFXNFpRbFM4cjVrSDRzdVNSbWcyKyszSk4xMHgxUGFBbUVrbXRZbEVkZUdwSkVNNmtPdUNxQ1IyMm9TdWpqNUlWMkhkVDB6ajVwckxLVGpYRkFQamRRbHlxN3hJQnhBUVA1eU1jekc0VnhBS3cwbjZpbFoyUUJjZTJwTHVsa3V4eHFub0l6RmZncXlxamlsOVMxVk53QnJGbWV5ZW9wczh5T2paVXliWmRmUzhDdWFUSUp1bXpzNXRPRGFOdExwRkRRL1BjSkd3ZUxobWVMMW5CMEtxaVVEU2NzaVVWRDg5RGkzSHRyS3RTVUx3M1JMaXlnWkQrN3NGOEpUT2JnWXNyR3ZETlVGUkdsMWl5MExsMVlrVWMyYUpZTW9nOTIwSThxVzZZRENnMU1xazBKSEpGS1hrYmdiUnJlSStxcFlOT1pIclZjRFViYTdwanNwaFNKTnRLNnVwZ1JOQVZvT1MwbXVnQmVONGJJWmdIaHVQWi9zMUVOYVg2S3NWcitZTnJoMU5iN2lwUjBQRTV6Yk5SZWdDYnJIUlV3NllmMDdkTEJKbDFmOEtCOWFzMlYxbk5xQXNsNjJMQkJoZWh3YWxlcmtIbUIxSkZJRVpLU0V1c2RsNUpRajFuSmxIWFNDRjM0MmdKOUNZR3JYZWxrbkpJWHFWUDhzRCtxdHBsQ1IzWEgycWZLcTB5Z01wK0tuVmtLeE5sWjhtMllrSWxWTWlDblhVd2w3cXpuQktTdlF6M20zUHQ2b1FiWE81YjVGaXhDaC9mSHhVUVcvQUVjSzZ6Q05xS1FuTDlzeXdxbUt1d3ZxU1l6VC9hUFZOTnBWeWh2UlcyMWFxY2lDc2pkV3ZCd0lMVXZoNVZ5Q3piV29DMXBKako2ODBDV3NsK3VkS0I2VDVSd0cxbWxvaG5scGJnNDdpejVVOWhhMEZHdG1STEZZQnRPOTl5OTdBcDB6K1pEVEFvZzZrU0xac01IZy9JRmtrZ3A2Q3B2VTJVMGNZVlNkbm1randCZE9tWGJ4VFdOV3p1SWJpcE1pb1Z4RWNrWkVvYWhTT2l5Mk0zSzBqY0MxTGhWRHdhcUcwWnZrY1dxQ25yRzRHSXh5a3JxbGJXZHc2TFF5QmFaUjhIbUxSSWhRV3NIc3dENDJaWFZMTmtmOWwrRmxXMEhWUTJsd0ZzQy9aMUZkemxRUjBLYVBmbytGZGZ1Ky9kd1ZSSUN1MUNHUjdBRUlpQWhjK0FaVUYwa09CYVB4bVVxZzRpNjR2UW5VNG5GRFlKOU56KzFmVlh2ZUg5cW1yK2tQSUx4OG9LY1JWL0JGYnhiRTBKTVQwa1NENHc2TC9sTlk4b2NzcWFnVmRVM0EzTWp4aHhjR3VxenNQSDRpcnBhb3cxcTZPeXJWanZwOU5wYzU5RTkxTGxkYm9ZVnpKV2RpbVdmQVcyU05FS2NEYVgyRm1CTExBL3VLeGxtaGg2MTNJczFVUlFBcGJLZnR0d3hMMDJxNk9ueDVwUXhTYlBvakFnK3Y1aEFuTjZMSFZSRFhJc3ZLdFJqaVMwcUpVeVpUQVhWYkFLODJFbEZKV2FRZFZvcVVDMVVudDdCVmFUUXVkTTZTdXFleGpRSk40KzBpY2F4di91dGJLdjgzRVRiVDhIOGdqY09LeE9KbWJVYTZPT1ZYaHQzZEZZNnJIdjlYb056RkxjZUVBMW84K3BLbTBMQUhQSFoycllLakZxMGhmWkZpeHNxSEpnRDNlRDVuK1Uwa2IxbUZqWGtuMmx2TVNTT3NORS9DZElBS0YwU3l0cTZ1ck9IVU41Z3dnNEdab3NnYm1nZ001dWNyYTJxclMySWcxY2JpQkJjeFl6Z3pVRE5MQ3ZMOEdiWlhOcDZPUnkzTG1TK0trODN6UklBSzZBMWlvS2EySTlOYXBJdWlVRmRmQzk3NjZQRlpVdHFVcjZLYldrK3paVTFhL1pySVhFenRyalRPZno3aHdLemlDZVhJYXJhSHRiWklNeisycEdnYXpDbXc0cVdBRnZFZGhvZFlwMFhxMHBWN0cxWVdZV2JPNHFoR3E0MitaOEJZdHJMV3ZsdU5QcFpBZWFGRlMxdnViUGdiZ3hzcWNwbkFhc3pCb3ZLYUZvRFE4Qkd0amZVT2w0TkFHMm5tUVYwNGZlSmd1bXZYMmZzclFFV1pnaEwwSm5WZFlrbjNET1pJZVJOODZScVBXQ21zdkdWcUVNUm53eFFBeHdTOEVNWW8zSXptWTIrQkNjTHA0TUtpdXl1aEltYW1sYlpGY05vTmw3dHArUkhkMThaalFJUkt5WGRGUmhOOTgvaHlLcXdYV05vN08xd2lhWG9ITjEwOFJFWlpXRXE2Z3JuSWZqemVnOGpkUmYxWEVMNGtrWGE1YkJqS3hvS2FsakJqZUhsVnhRNEdheWNwVzRsRE9BS3RuVHhIQXRPZnpPdFp3SEFNN3NxVlhrVjZ5dTZrYXAxbkhrWEtxV0YvNFhIcWplbk5LcUJqcFIzbDFjaDNFamcxK0VzZ2RRaHNkRzBCNEZNOXNXQVZXcHVBeWl3VFBsZVp4dDlWeVpWUzJxWGZSZVdxVEFpbHByOUFwb1dUanh5bWl0N053VjRKVHJpWnlPQTlCMGs3SEZmVUxvdXJtS1lIVm5SUXZxR0w1SE1IZHFGY1IycVdwbWNLNmVUd3gyZGlwV3J2aURpbHIrZktXcTNPV1JXZEhLd0E0ZXU4d2pjaGJlUnpGaWxxampaTjN1ZkNwZmtKMC9zY1ZwbllrNkwwUEk3N2x4ZFdDWjg3V2lXbTdCL0FHcXVRU251akdLc0I4Q0ptaUpxOHExcEtJVld5cU9pVEs2NnIxOEJOOHI3NC9BRTcxZmRDM3lQUzJNeGRPcG5FMXRsVnhEOUptVk9vZ2dOK3I0UGpBWFZGUGEzRWc1alZKR0ZWVUdOb2xIMjBHVnJVQjdCT3lTV3E2V3FZUWRXUjkycGNGTVlNd2NrYlNnQ0tDcUQ2N0RpaVd1MWc4TVFDOUJ5ZmNGcVcxTCtqTDcxNHFOQ3V6bm9TeHQwZGEyZ3RXTjFHOEYwQkswTk4wbnVpbWVsVUY5ZElkQWZqTzQ0VVQzQ2pRTG9VZUxISkZUTzNnbXBSdUlJT3Z3QlFDYnFOZW8zcXRaOWlGNnhWSzEzR1JsbzR6cWltcStDR2RUaVIxdVJZOG9xZ0UwMmhaQmE3OWtaWFBNcXV4UkhLbGEyc2FaV040bVJxWlVqMHZMQ0toa2pLbnFPUUhOdVNaVkpvS3ZBcVMxd3BFcXV2V0RDMUIyeXB3ckNQc1JNRVBWVE9ETUxKTUR2NnFlS1h3aTJKWVY1U3E0cUt5dmdHc0hDTGl1ajJqUjU5VjhnTXFTSjJGSlpSWEVIVlJIajNzRlByY3Q2T3BxbFcxR3BhdFFkdDBHdndmTTZuNjNJbnNHVkZoSkdhQnFncXFJVjZJc1hsbFpneVNQcTRSM2JudDN3aTVjditjTjJ5cVFMVzFUOTVLWVZzV1d0S2s0Y0I5VzUzV1FRZmxRWVI2V2w0SGFKWmp2VkUwRDV5dnErUktnWkNzNXFkQkVQNXNEOTRjQXZRTGxTZ05hU01BdEh4ODhCdU5RNDF6ZEZzWDMwektiY3MwTUxEL2loa3BRemwwd2lUcUtMVGZiS21DbXlZSUNuSzBJYmFpZUM0Q0c5aVN5TFE3Y0lNR1F3YXU2VEtvcTYwQXBsM1dONDBMWnBjYTFDS0tLOVZReXlJRW44dzBGOEY2Q0wyaDhvM2l4R3dDN3M3RVd6Q09xbWNBcFl4WUQ0anNBelZTMHNsMnQ5OHBBN3ZyS29waENWU29uYllwZ0g2bXZTbjI0cFRCVjRzZHRWM0J0TXE1azgyeStJQUR2VUowdUFsa0NWVHhJYVBtK1VOdS9xa1Y0RjFUekhYQ0dyWElBcUl0Qkt5cHFLOTlWdEFPVnM2NE80T2JYN3BITFZDcFlIY1Jtd3ZMUjdUdllBS0JCTjU4TEdWekR1RnoraFFiV2duY1F5Q1pBaytWYnNQU291ZjkzMjYxaVpnbWZDcHdSYkF2cW1TcXJpVTJQd2hqYW9PeVlxdEllZ1ZYVmlUc215dGE2Ykd5U3BZM2d5UnJwSXlBZWFXRER4dHBzWHdLeWFsTURLTlA3WUJYTXFFc2tVc2kydUM4Rk5BUHhBS1RWZlQxbzZWek0wRTBqRisxcldjVXVIdmR5Zzd2Z29GcGxYOEhwdkhwTUNPTVJVUEh6WmtJbnNxbEZLTlgvRUlPNTJFMFN4U3pPd29iMlZtUkxXNUQxWElVMHJiZ00xQXpXZ3lDN2ZlOEc3eFVBSy90YUVCYXQ3bHVxdHlQN0Vtc2FKUU9qNUYrbXJuWmZDdVlDZkJVQVd3U2h5ZDZwTVkvdkFIRzFVcU9ZcGJJL2d5NVQwQ01LbStVTzNnRnVDODVkZ2ZEVmVndVBEZklUcklCTHNMcmNnZGgzQ0ZnRlpqYUtKNEl2M0Y4QU5FcXZ1eFIxdFZLT2dMb0NhMWp4Ym9CQWtqNnY3ai9pY0ZiQTdmNHJmUm5RRExSVmlHMTNpMHZxQlFyWVZxQmJBRFpUMFpwaUhvU3p2UXBvcEtJRlMzc0UxSGZCV2xIWGQwSDdMbkFycXZvdWdNdGxqSEJnWm5oM0Vvei9CS2pMTUw0WjJBcTAraEVKcjlqYVZVQmJ2TnpDSVVpcm9DN0FXbW1GdzRvNUFLM010QjVWeXBaTVNGZ3MwNUp5R1Z3bHdCcXNFR0FBYTJaVTFDalVleFhHc0U0cktyaWlsQnZGek9LS28zQXVBcm9FNlFGUVUzdThZcE5Yd1M1aysxVFp0NVVyd291TjRLaVVFdytrM1pXRHAxUlhITlJxWGIyMVRzMzk5NDV5WlNnM1ZuWkZOUTlDRjNYZVp5cjVEZ0JYS2l3Q01hMk14ZVREWVhnUDFGc2Y5UU5LWmMwazgxUkprM3I2RVEzckNtQlZ5TEw3NUVqWjFwSVZESG9GdGlPQUhvQjBCZFRWeWxxQnNLS0tTK0FlQlhKVkxZK0NYQVN1R3ZPL0F1cTdHdUVqRGZHS2cxb0thMXovZG1taTlJOVNVR05obDBBdGZ1bEhBYXdvWXJuU2ttTlhBVnVHRWhyRVZYdlVGK0E1Q3QyUHFOT2pEZXR5bmE0Q21lVW9sbWVYTE40QXE3QzVTajEwUTd5amdsK3Q2Q054U1JIbUk1WCtDcHdyZVlCM1FmZHFuYTRxMjFLZEJ1YzRHb1pzbjQ5Wk9PaVZpbndIcUs5V3pqdmdld2VFaDJBVTUrdnR4WjlDZDlXcWtoNDlWMThFNW9qNnZWeW4wUlN0QXlHSU81ZWRYUktkNUIwVkdWWHEyeXIzeFlwKzVVdCtDNFFKNFAxTjMzOXBRTWpSZWpqNHZiL0RjcjZyUWMzTy8wcmptdFpwZVlDQmlDSGZDZW1SYk5oYksvcE5VUGMzd2ZLeTVmMkQ3T2xMMy91UGh2ZS9vVTRUMEY4ZitWTk0ydnlvaXYwaksrS0hRZmRIcSswYm5jejRvejczLytZNkxiS3cxby81QjdlT2YxUmwvMGR1OUI5dG4vOWJ2cmYvait2MGg2dHRuMnRwL3IvNDgxOXk0L3p2NTM5MXV2enpmd0RpZno2cGhUMU1QZ0FBQUFCSlJVNUVya0pnZ2c9PSIpO2JhY2tncm91bmQtc2l6ZToxMDAlIDEwMCU7Ym9yZGVyOm5vbmU7Y3Vyc29yOnBvaW50ZXI7ZGlyZWN0aW9uOmx0cjtoZWlnaHQ6MTMwcHg7dG91Y2gtYWN0aW9uOm1hbmlwdWxhdGlvbjt3aWR0aDoxMDAlfS5jb2xvci1waWNrZXIgLmNwLWFkZC1jb2xvci1idXR0b24tY2xhc3N7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtib3JkZXI6MDtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmlubGluZTttYXJnaW46M3B4IC0zcHg7cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlfS5jb2xvci1waWNrZXIgLmNwLWFkZC1jb2xvci1idXR0b24tY2xhc3M6aG92ZXJ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX0uY29sb3ItcGlja2VyIC5jcC1hZGQtY29sb3ItYnV0dG9uLWNsYXNzOmRpc2FibGVke2NvbG9yOiM5OTk7Y3Vyc29yOm5vdC1hbGxvd2VkfS5jb2xvci1waWNrZXIgLmNwLWFkZC1jb2xvci1idXR0b24tY2xhc3M6ZGlzYWJsZWQ6aG92ZXJ7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LmNvbG9yLXBpY2tlciAuY3AtcmVtb3ZlLWNvbG9yLWJ1dHRvbi1jbGFzc3tiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLXJhZGl1czo1MCU7Ym94LXNoYWRvdzoxcHggMXB4IDVweCAjMzMzO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjEwcHg7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6LTVweDt0ZXh0LWFsaWduOmNlbnRlcjt0b3A6LTVweDt3aWR0aDoxMHB4fS5jb2xvci1waWNrZXIgLmNwLXJlbW92ZS1jb2xvci1idXR0b24tY2xhc3M6YmVmb3Jle2JvdHRvbTozLjVweDtjb250ZW50OiJ4IjtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6MTBweDtwb3NpdGlvbjpyZWxhdGl2ZX0nXSxlbmNhcHN1bGF0aW9uOjJ9KSxOMy5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmNofSx7dHlwZTpIaH0se3R5cGU6VDN9XSxOMy5wcm9wRGVjb3JhdG9ycz17ZGlhbG9nRWxlbWVudDpbe3R5cGU6RnIsYXJnczpbImRpYWxvZ1BvcHVwIix7c3RhdGljOiEwfV19XSxodWVTbGlkZXI6W3t0eXBlOkZyLGFyZ3M6WyJodWVTbGlkZXIiLHtzdGF0aWM6ITB9XX1dLGFscGhhU2xpZGVyOlt7dHlwZTpGcixhcmdzOlsiYWxwaGFTbGlkZXIiLHtzdGF0aWM6ITB9XX1dLGhhbmRsZUVzYzpbe3R5cGU6TV8sYXJnczpbImRvY3VtZW50OmtleXVwLmVzYyIsWyIkZXZlbnQiXV19XSxoYW5kbGVFbnRlcjpbe3R5cGU6TV8sYXJnczpbImRvY3VtZW50OmtleXVwLmVudGVyIixbIiRldmVudCJdXX1dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKE4zLFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6ImNvbG9yLXBpY2tlciIsdGVtcGxhdGU6JzxkaXYgI2RpYWxvZ1BvcHVwIGNsYXNzPSJjb2xvci1waWNrZXIiIFtjbGFzcy5vcGVuXT0ic2hvdyIgW3N0eWxlLmRpc3BsYXldPSIhc2hvdyA/IFwnbm9uZVwnIDogXCdibG9ja1wnIiBbc3R5bGUudmlzaWJpbGl0eV09ImhpZGRlbiA/IFwnaGlkZGVuXCcgOiBcJ3Zpc2libGVcJyIgW3N0eWxlLnRvcC5weF09InRvcCIgW3N0eWxlLmxlZnQucHhdPSJsZWZ0IiBbc3R5bGUucG9zaXRpb25dPSJwb3NpdGlvbiIgW3N0eWxlLmhlaWdodC5weF09ImNwSGVpZ2h0IiBbc3R5bGUud2lkdGgucHhdPSJjcFdpZHRoIiAoY2xpY2spPSIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkiPlxuICA8ZGl2ICpuZ0lmPSJjcERpYWxvZ0Rpc3BsYXk9PVwncG9wdXBcJyIgY2xhc3M9ImFycm93IGFycm93LXt7Y3BVc2VQb3NpdGlvbn19IiBbc3R5bGUudG9wLnB4XT0iYXJyb3dUb3AiPjwvZGl2PlxuXG4gIDxkaXYgKm5nSWY9IihjcENvbG9yTW9kZSB8fMKgMSkgPT09IDEiIGNsYXNzPSJzYXR1cmF0aW9uLWxpZ2h0bmVzcyIgW3NsaWRlcl0gW3JnWF09IjEiIFtyZ1ldPSIxIiBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09Imh1ZVNsaWRlckNvbG9yIiAobmV3VmFsdWUpPSJvbkNvbG9yQ2hhbmdlKCRldmVudCkiIChkcmFnU3RhcnQpPSJvbkRyYWdTdGFydChcJ3NhdHVyYXRpb24tbGlnaHRuZXNzXCcpIiAoZHJhZ0VuZCk9Im9uRHJhZ0VuZChcJ3NhdHVyYXRpb24tbGlnaHRuZXNzXCcpIj5cbiAgICA8ZGl2IGNsYXNzPSJjdXJzb3IiIFtzdHlsZS50b3AucHhdPSJzbGlkZXI/LnYiIFtzdHlsZS5sZWZ0LnB4XT0ic2xpZGVyPy5zIj48L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz0iaHVlLWFscGhhIGJveCI+XG4gICAgPGRpdiBjbGFzcz0ibGVmdCI+XG4gICAgICA8ZGl2IGNsYXNzPSJzZWxlY3RlZC1jb2xvci1iYWNrZ3JvdW5kIj48L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz0ic2VsZWN0ZWQtY29sb3IiIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT0ic2VsZWN0ZWRDb2xvciI+PC9kaXY+XG5cbiAgICAgIDxidXR0b24gKm5nSWY9ImNwQWRkQ29sb3JCdXR0b24iIHR5cGU9ImJ1dHRvbiIgY2xhc3M9Int7Y3BBZGRDb2xvckJ1dHRvbkNsYXNzfX0iIFtkaXNhYmxlZF09ImNwUHJlc2V0Q29sb3JzICYmIGNwUHJlc2V0Q29sb3JzLmxlbmd0aCA+PSBjcE1heFByZXNldENvbG9yc0xlbmd0aCIgKGNsaWNrKT0ib25BZGRQcmVzZXRDb2xvcigkZXZlbnQsIHNlbGVjdGVkQ29sb3IpIj5cbiAgICAgICAge3tjcEFkZENvbG9yQnV0dG9uVGV4dH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9InJpZ2h0Ij5cbiAgICAgIDxkaXYgKm5nSWY9ImNwQWxwaGFDaGFubmVsPT09XCdkaXNhYmxlZFwnIiBzdHlsZT0iaGVpZ2h0OiAxNnB4OyI+PC9kaXY+XG5cbiAgICAgIDxkaXYgI2h1ZVNsaWRlciBjbGFzcz0iaHVlIiBbc2xpZGVyXSBbcmdYXT0iMSIgW3N0eWxlLmRpc3BsYXldPSIoY3BDb2xvck1vZGUgfHzCoDEpID09PSAxID8gXCdibG9ja1wnIDogXCdub25lXCciIChuZXdWYWx1ZSk9Im9uSHVlQ2hhbmdlKCRldmVudCkiIChkcmFnU3RhcnQpPSJvbkRyYWdTdGFydChcJ2h1ZVwnKSIgKGRyYWdFbmQpPSJvbkRyYWdFbmQoXCdodWVcJykiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJjdXJzb3IiIFtzdHlsZS5sZWZ0LnB4XT0ic2xpZGVyPy5oIj48L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2ICN2YWx1ZVNsaWRlciBjbGFzcz0idmFsdWUiIFtzbGlkZXJdIFtyZ1hdPSIxIiBbc3R5bGUuZGlzcGxheV09IihjcENvbG9yTW9kZSB8fMKgMSkgPT09IDIgPyBcJ2Jsb2NrXCc6IFwnbm9uZVwnIiAobmV3VmFsdWUpPSJvblZhbHVlQ2hhbmdlKCRldmVudCkiIChkcmFnU3RhcnQpPSJvbkRyYWdTdGFydChcJ3ZhbHVlXCcpIiAoZHJhZ0VuZCk9Im9uRHJhZ0VuZChcJ3ZhbHVlXCcpIj5cbiAgICAgICAgPGRpdiBjbGFzcz0iY3Vyc29yIiBbc3R5bGUucmlnaHQucHhdPSJzbGlkZXI/LnYiPjwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgI2FscGhhU2xpZGVyIGNsYXNzPSJhbHBoYSIgW3NsaWRlcl0gW3JnWF09IjEiIFtzdHlsZS5kaXNwbGF5XT0iY3BBbHBoYUNoYW5uZWwgPT09IFwnZGlzYWJsZWRcJyA/IFwnbm9uZVwnIDogXCdibG9ja1wnIiBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09ImFscGhhU2xpZGVyQ29sb3IiIChuZXdWYWx1ZSk9Im9uQWxwaGFDaGFuZ2UoJGV2ZW50KSIgKGRyYWdTdGFydCk9Im9uRHJhZ1N0YXJ0KFwnYWxwaGFcJykiIChkcmFnRW5kKT0ib25EcmFnRW5kKFwnYWxwaGFcJykiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJjdXJzb3IiIFtzdHlsZS5sZWZ0LnB4XT0ic2xpZGVyPy5hIj48L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2ICpuZ0lmPSIhY3BEaXNhYmxlSW5wdXQgJiYgKGNwQ29sb3JNb2RlIHx8wqAxKSA9PT0gMSIgY2xhc3M9ImNteWstdGV4dCIgW3N0eWxlLmRpc3BsYXldPSJmb3JtYXQgIT09IDMgPyBcJ25vbmVcJyA6IFwnYmxvY2tcJyI+XG4gICAgPGRpdiBjbGFzcz0iYm94Ij5cbiAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIHBhdHRlcm49IlswLTldKiIgbWluPSIwIiBtYXg9IjEwMCIgW3RleHRdIFtyZ109IjEwMCIgW3ZhbHVlXT0iY215a1RleHQ/LmMiIChrZXl1cC5lbnRlcik9Im9uQWNjZXB0Q29sb3IoJGV2ZW50KSIgKG5ld1ZhbHVlKT0ib25DeWFuSW5wdXQoJGV2ZW50KSIgLz5cbiAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIHBhdHRlcm49IlswLTldKiIgbWluPSIwIiBtYXg9IjEwMCIgW3RleHRdIFtyZ109IjEwMCIgW3ZhbHVlXT0iY215a1RleHQ/Lm0iIChrZXl1cC5lbnRlcik9Im9uQWNjZXB0Q29sb3IoJGV2ZW50KSIgKG5ld1ZhbHVlKT0ib25NYWdlbnRhSW5wdXQoJGV2ZW50KSIgLz5cbiAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIHBhdHRlcm49IlswLTldKiIgbWluPSIwIiBtYXg9IjEwMCIgW3RleHRdIFtyZ109IjEwMCIgW3ZhbHVlXT0iY215a1RleHQ/LnkiIChrZXl1cC5lbnRlcik9Im9uQWNjZXB0Q29sb3IoJGV2ZW50KSIgKG5ld1ZhbHVlKT0ib25ZZWxsb3dJbnB1dCgkZXZlbnQpIiAvPlxuICAgICAgPGlucHV0IHR5cGU9Im51bWJlciIgcGF0dGVybj0iWzAtOV0qIiBtaW49IjAiIG1heD0iMTAwIiBbdGV4dF0gW3JnXT0iMTAwIiBbdmFsdWVdPSJjbXlrVGV4dD8uayIgKGtleXVwLmVudGVyKT0ib25BY2NlcHRDb2xvcigkZXZlbnQpIiAobmV3VmFsdWUpPSJvbkJsYWNrSW5wdXQoJGV2ZW50KSIgLz5cbiAgICAgIDxpbnB1dCAqbmdJZj0iY3BBbHBoYUNoYW5uZWwhPT1cJ2Rpc2FibGVkXCciIHR5cGU9Im51bWJlciIgcGF0dGVybj0iWzAtOV0rKFtcXC4sXVswLTldezEsMn0pPyIgbWluPSIwIiBtYXg9IjEiIHN0ZXA9IjAuMSIgW3RleHRdIFtyZ109IjEiIFt2YWx1ZV09ImNteWtUZXh0Py5hIiAoa2V5dXAuZW50ZXIpPSJvbkFjY2VwdENvbG9yKCRldmVudCkiIChuZXdWYWx1ZSk9Im9uQWxwaGFJbnB1dCgkZXZlbnQpIiAvPlxuICAgIDwvZGl2PlxuXG4gICAgIDxkaXYgY2xhc3M9ImJveCI+XG4gICAgICA8ZGl2PkM8L2Rpdj48ZGl2Pk08L2Rpdj48ZGl2Plk8L2Rpdj48ZGl2Pks8L2Rpdj48ZGl2ICpuZ0lmPSJjcEFscGhhQ2hhbm5lbCE9PVwnZGlzYWJsZWRcJyIgPkE8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiAqbmdJZj0iIWNwRGlzYWJsZUlucHV0ICYmIChjcENvbG9yTW9kZSB8fMKgMSkgPT09IDEgIiBjbGFzcz0iaHNsYS10ZXh0IiBbc3R5bGUuZGlzcGxheV09ImZvcm1hdCAhPT0gMiA/IFwnbm9uZVwnIDogXCdibG9ja1wnIj5cbiAgICA8ZGl2IGNsYXNzPSJib3giPlxuICAgICAgPGlucHV0IHR5cGU9Im51bWJlciIgcGF0dGVybj0iWzAtOV0qIiBtaW49IjAiIG1heD0iMzYwIiBbdGV4dF0gW3JnXT0iMzYwIiBbdmFsdWVdPSJoc2xhVGV4dD8uaCIgKGtleXVwLmVudGVyKT0ib25BY2NlcHRDb2xvcigkZXZlbnQpIiAobmV3VmFsdWUpPSJvbkh1ZUlucHV0KCRldmVudCkiIC8+XG4gICAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBwYXR0ZXJuPSJbMC05XSoiIG1pbj0iMCIgbWF4PSIxMDAiIFt0ZXh0XSBbcmddPSIxMDAiIFt2YWx1ZV09ImhzbGFUZXh0Py5zIiAoa2V5dXAuZW50ZXIpPSJvbkFjY2VwdENvbG9yKCRldmVudCkiIChuZXdWYWx1ZSk9Im9uU2F0dXJhdGlvbklucHV0KCRldmVudCkiIC8+XG4gICAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBwYXR0ZXJuPSJbMC05XSoiIG1pbj0iMCIgbWF4PSIxMDAiIFt0ZXh0XSBbcmddPSIxMDAiIFt2YWx1ZV09ImhzbGFUZXh0Py5sIiAoa2V5dXAuZW50ZXIpPSJvbkFjY2VwdENvbG9yKCRldmVudCkiIChuZXdWYWx1ZSk9Im9uTGlnaHRuZXNzSW5wdXQoJGV2ZW50KSIgLz5cbiAgICAgIDxpbnB1dCAqbmdJZj0iY3BBbHBoYUNoYW5uZWwhPT1cJ2Rpc2FibGVkXCciIHR5cGU9Im51bWJlciIgcGF0dGVybj0iWzAtOV0rKFtcXC4sXVswLTldezEsMn0pPyIgbWluPSIwIiBtYXg9IjEiIHN0ZXA9IjAuMSIgW3RleHRdIFtyZ109IjEiIFt2YWx1ZV09ImhzbGFUZXh0Py5hIiAoa2V5dXAuZW50ZXIpPSJvbkFjY2VwdENvbG9yKCRldmVudCkiIChuZXdWYWx1ZSk9Im9uQWxwaGFJbnB1dCgkZXZlbnQpIiAvPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz0iYm94Ij5cbiAgICAgIDxkaXY+SDwvZGl2PjxkaXY+UzwvZGl2PjxkaXY+TDwvZGl2PjxkaXYgKm5nSWY9ImNwQWxwaGFDaGFubmVsIT09XCdkaXNhYmxlZFwnIj5BPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgKm5nSWY9IiFjcERpc2FibGVJbnB1dCAmJiAoY3BDb2xvck1vZGUgfHzCoDEpID09PSAxICIgW3N0eWxlLmRpc3BsYXldPSJmb3JtYXQgIT09IDEgPyBcJ25vbmVcJyA6IFwnYmxvY2tcJyIgY2xhc3M9InJnYmEtdGV4dCI+XG4gICAgPGRpdiBjbGFzcz0iYm94Ij5cbiAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIHBhdHRlcm49IlswLTldKiIgbWluPSIwIiBtYXg9IjI1NSIgW3RleHRdIFtyZ109IjI1NSIgW3ZhbHVlXT0icmdiYVRleHQ/LnIiIChrZXl1cC5lbnRlcik9Im9uQWNjZXB0Q29sb3IoJGV2ZW50KSIgKG5ld1ZhbHVlKT0ib25SZWRJbnB1dCgkZXZlbnQpIiAvPlxuICAgICAgPGlucHV0IHR5cGU9Im51bWJlciIgcGF0dGVybj0iWzAtOV0qIiBtaW49IjAiIG1heD0iMjU1IiBbdGV4dF0gW3JnXT0iMjU1IiBbdmFsdWVdPSJyZ2JhVGV4dD8uZyIgKGtleXVwLmVudGVyKT0ib25BY2NlcHRDb2xvcigkZXZlbnQpIiAobmV3VmFsdWUpPSJvbkdyZWVuSW5wdXQoJGV2ZW50KSIgLz5cbiAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIHBhdHRlcm49IlswLTldKiIgbWluPSIwIiBtYXg9IjI1NSIgW3RleHRdIFtyZ109IjI1NSIgW3ZhbHVlXT0icmdiYVRleHQ/LmIiIChrZXl1cC5lbnRlcik9Im9uQWNjZXB0Q29sb3IoJGV2ZW50KSIgKG5ld1ZhbHVlKT0ib25CbHVlSW5wdXQoJGV2ZW50KSIgLz5cbiAgICAgIDxpbnB1dCAqbmdJZj0iY3BBbHBoYUNoYW5uZWwhPT1cJ2Rpc2FibGVkXCciIHR5cGU9Im51bWJlciIgcGF0dGVybj0iWzAtOV0rKFtcXC4sXVswLTldezEsMn0pPyIgbWluPSIwIiBtYXg9IjEiIHN0ZXA9IjAuMSIgW3RleHRdIFtyZ109IjEiIFt2YWx1ZV09InJnYmFUZXh0Py5hIiAoa2V5dXAuZW50ZXIpPSJvbkFjY2VwdENvbG9yKCRldmVudCkiIChuZXdWYWx1ZSk9Im9uQWxwaGFJbnB1dCgkZXZlbnQpIiAvPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz0iYm94Ij5cbiAgICAgIDxkaXY+UjwvZGl2PjxkaXY+RzwvZGl2PjxkaXY+QjwvZGl2PjxkaXYgKm5nSWY9ImNwQWxwaGFDaGFubmVsIT09XCdkaXNhYmxlZFwnIiA+QTwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2ICpuZ0lmPSIhY3BEaXNhYmxlSW5wdXQgJiYgKGNwQ29sb3JNb2RlIHx8wqAxKSA9PT0gMSIgY2xhc3M9ImhleC10ZXh0IiBbY2xhc3MuaGV4LWFscGhhXT0iY3BBbHBoYUNoYW5uZWw9PT1cJ2ZvcmNlZFwnIlxuICAgIFtzdHlsZS5kaXNwbGF5XT0iZm9ybWF0ICE9PSAwID8gXCdub25lXCcgOiBcJ2Jsb2NrXCciPlxuICAgIDxkaXYgY2xhc3M9ImJveCI+XG4gICAgICA8aW5wdXQgW3RleHRdIFt2YWx1ZV09ImhleFRleHQiIChibHVyKT0ib25IZXhJbnB1dChudWxsKSIgKGtleXVwLmVudGVyKT0ib25BY2NlcHRDb2xvcigkZXZlbnQpIiAobmV3VmFsdWUpPSJvbkhleElucHV0KCRldmVudCkiLz5cbiAgICAgIDxpbnB1dCAqbmdJZj0iY3BBbHBoYUNoYW5uZWw9PT1cJ2ZvcmNlZFwnIiB0eXBlPSJudW1iZXIiIHBhdHRlcm49IlswLTldKyhbXFwuLF1bMC05XXsxLDJ9KT8iIG1pbj0iMCIgbWF4PSIxIiBzdGVwPSIwLjEiIFt0ZXh0XSBbcmddPSIxIiBbdmFsdWVdPSJoZXhBbHBoYSIgKGtleXVwLmVudGVyKT0ib25BY2NlcHRDb2xvcigkZXZlbnQpIiAobmV3VmFsdWUpPSJvbkFscGhhSW5wdXQoJGV2ZW50KSIvPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz0iYm94Ij5cbiAgICAgIDxkaXY+SGV4PC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPSJjcEFscGhhQ2hhbm5lbD09PVwnZm9yY2VkXCciPkE8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiAqbmdJZj0iIWNwRGlzYWJsZUlucHV0ICYmIChjcENvbG9yTW9kZSB8fMKgMSkgPT09IDIiIGNsYXNzPSJ2YWx1ZS10ZXh0Ij5cbiAgICA8ZGl2IGNsYXNzPSJib3giPlxuICAgICAgPGlucHV0IHR5cGU9Im51bWJlciIgcGF0dGVybj0iWzAtOV0qIiBtaW49IjAiIG1heD0iMTAwIiBbdGV4dF0gW3JnXT0iMTAwIiBbdmFsdWVdPSJoc2xhVGV4dD8ubCIgKGtleXVwLmVudGVyKT0ib25BY2NlcHRDb2xvcigkZXZlbnQpIiAobmV3VmFsdWUpPSJvblZhbHVlSW5wdXQoJGV2ZW50KSIgLz5cbiAgICAgIDxpbnB1dCAqbmdJZj0iY3BBbHBoYUNoYW5uZWwhPT1cJ2Rpc2FibGVkXCciIHR5cGU9Im51bWJlciIgcGF0dGVybj0iWzAtOV0rKFtcXC4sXVswLTldezEsMn0pPyIgbWluPSIwIiBtYXg9IjEiIHN0ZXA9IjAuMSIgIFt0ZXh0XSBbcmddPSIxIiBbdmFsdWVdPSJoc2xhVGV4dD8uYSIgKGtleXVwLmVudGVyKT0ib25BY2NlcHRDb2xvcigkZXZlbnQpIiAobmV3VmFsdWUpPSJvbkFscGhhSW5wdXQoJGV2ZW50KSIgLz5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9ImJveCI+XG4gICAgICA8ZGl2PlY8L2Rpdj48ZGl2PkE8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiAqbmdJZj0iIWNwRGlzYWJsZUlucHV0ICYmIChjcENvbG9yTW9kZSB8fMKgMSkgPT09IDEiIGNsYXNzPSJ0eXBlLXBvbGljeSI+XG4gICAgPHNwYW4gY2xhc3M9InR5cGUtcG9saWN5LWFycm93IiAoY2xpY2spPSJvbkZvcm1hdFRvZ2dsZSgtMSkiPjwvc3Bhbj5cbiAgICA8c3BhbiBjbGFzcz0idHlwZS1wb2xpY3ktYXJyb3ciIChjbGljayk9Im9uRm9ybWF0VG9nZ2xlKDEpIj48L3NwYW4+XG4gIDwvZGl2PlxuXG4gIDxkaXYgKm5nSWY9ImNwUHJlc2V0Q29sb3JzPy5sZW5ndGggfHwgY3BBZGRDb2xvckJ1dHRvbiIgY2xhc3M9InByZXNldC1hcmVhIj5cbiAgICA8aHI+XG5cbiAgICA8ZGl2IGNsYXNzPSJwcmVzZXQtbGFiZWwiPnt7Y3BQcmVzZXRMYWJlbH19PC9kaXY+XG5cbiAgICA8ZGl2ICpuZ0lmPSJjcFByZXNldENvbG9ycz8ubGVuZ3RoIiBjbGFzcz0ie3tjcFByZXNldENvbG9yc0NsYXNzfX0iPlxuICAgICAgPGRpdiAqbmdGb3I9ImxldCBjb2xvciBvZiBjcFByZXNldENvbG9ycyIgY2xhc3M9InByZXNldC1jb2xvciIgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09ImNvbG9yIiAoY2xpY2spPSJzZXRDb2xvckZyb21TdHJpbmcoY29sb3IpIj5cbiAgICAgICAgPHNwYW4gKm5nSWY9ImNwQWRkQ29sb3JCdXR0b24iIGNsYXNzPSJ7e2NwUmVtb3ZlQ29sb3JCdXR0b25DbGFzc319IiAoY2xpY2spPSJvblJlbW92ZVByZXNldENvbG9yKCRldmVudCwgY29sb3IpIj48L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgKm5nSWY9IiFjcFByZXNldENvbG9ycz8ubGVuZ3RoICYmIGNwQWRkQ29sb3JCdXR0b24iIGNsYXNzPSJ7e2NwUHJlc2V0RW1wdHlNZXNzYWdlQ2xhc3N9fSI+e3tjcFByZXNldEVtcHR5TWVzc2FnZX19PC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgKm5nSWY9ImNwT0tCdXR0b24gfHwgY3BDYW5jZWxCdXR0b24iIGNsYXNzPSJidXR0b24tYXJlYSI+XG4gICAgPGJ1dHRvbiAqbmdJZj0iY3BDYW5jZWxCdXR0b24iIHR5cGU9ImJ1dHRvbiIgY2xhc3M9Int7Y3BDYW5jZWxCdXR0b25DbGFzc319IiAoY2xpY2spPSJvbkNhbmNlbENvbG9yKCRldmVudCkiPnt7Y3BDYW5jZWxCdXR0b25UZXh0fX08L2J1dHRvbj5cblxuICAgIDxidXR0b24gKm5nSWY9ImNwT0tCdXR0b24iIHR5cGU9ImJ1dHRvbiIgY2xhc3M9Int7Y3BPS0J1dHRvbkNsYXNzfX0iIChjbGljayk9Im9uQWNjZXB0Q29sb3IoJGV2ZW50KSI+e3tjcE9LQnV0dG9uVGV4dH19PC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLGVuY2Fwc3VsYXRpb246UG8uTm9uZSxzdHlsZXM6WycuY29sb3ItcGlja2Vyey1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgIzc3NztjdXJzb3I6ZGVmYXVsdDtoZWlnaHQ6YXV0bztwb3NpdGlvbjphYnNvbHV0ZTt1c2VyLXNlbGVjdDpub25lO3dpZHRoOjIzMHB4O3otaW5kZXg6MTAwMH0uY29sb3ItcGlja2VyICp7Ym94LXNpemluZzpib3JkZXItYm94O2ZvbnQtc2l6ZToxMXB4O21hcmdpbjowfS5jb2xvci1waWNrZXIgaW5wdXR7Y29sb3I6IzAwMDtmb250LXNpemU6MTNweDtoZWlnaHQ6MjZweDttaW4td2lkdGg6MDt0ZXh0LWFsaWduOmNlbnRlcjt3aWR0aDowfS5jb2xvci1waWNrZXIgaW5wdXQ6LW1vei1zdWJtaXQtaW52YWxpZCwuY29sb3ItcGlja2VyIGlucHV0Oi1tb3otdWktaW52YWxpZCwuY29sb3ItcGlja2VyIGlucHV0OmludmFsaWR7Ym94LXNoYWRvdzpub25lfS5jb2xvci1waWNrZXIgaW5wdXQ6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sLmNvbG9yLXBpY2tlciBpbnB1dDo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTttYXJnaW46MH0uY29sb3ItcGlja2VyIC5hcnJvd3tib3JkZXItc3R5bGU6c29saWQ7aGVpZ2h0OjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MDt6LWluZGV4Ojk5OTk5OX0uY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy10b3B7Ym9yZGVyLWNvbG9yOiM3NzcgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXdpZHRoOjEwcHggNXB4O2xlZnQ6OHB4fS5jb2xvci1waWNrZXIgLmFycm93LmFycm93LWJvdHRvbXtib3JkZXItY29sb3I6dHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgIzc3Nztib3JkZXItd2lkdGg6MTBweCA1cHg7bGVmdDo4cHg7dG9wOi0yMHB4fS5jb2xvci1waWNrZXIgLmFycm93LmFycm93LWxlZnQtdG9wLC5jb2xvci1waWNrZXIgLmFycm93LmFycm93LXRvcC1sZWZ0e2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudCB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCAjNzc3O2JvcmRlci13aWR0aDo1cHggMTBweDtib3R0b206OHB4O3JpZ2h0Oi0yMXB4fS5jb2xvci1waWNrZXIgLmFycm93LmFycm93LXJpZ2h0LXRvcCwuY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy10b3AtcmlnaHR7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50ICM3NzcgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXdpZHRoOjVweCAxMHB4O2JvdHRvbTo4cHg7bGVmdDotMjBweH0uY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1ib3R0b20tbGVmdCwuY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1sZWZ0LC5jb2xvci1waWNrZXIgLmFycm93LmFycm93LWxlZnQtYm90dG9te2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudCB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCAjNzc3O2JvcmRlci13aWR0aDo1cHggMTBweDtyaWdodDotMjFweDt0b3A6OHB4fS5jb2xvci1waWNrZXIgLmFycm93LmFycm93LWJvdHRvbS1yaWdodCwuY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1yaWdodCwuY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1yaWdodC1ib3R0b217Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50ICM3NzcgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXdpZHRoOjVweCAxMHB4O2xlZnQ6LTIwcHg7dG9wOjhweH0uY29sb3ItcGlja2VyIC5jdXJzb3J7Ym9yZGVyOjJweCBzb2xpZCAjMjIyO2JvcmRlci1yYWRpdXM6NTAlO2N1cnNvcjpkZWZhdWx0O2hlaWdodDoxNnB4O3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjE2cHh9LmNvbG9yLXBpY2tlciAuYm94e2Rpc3BsYXk6ZmxleDtwYWRkaW5nOjRweCA4cHh9LmNvbG9yLXBpY2tlciAubGVmdHtwYWRkaW5nOjE2cHggOHB4O3Bvc2l0aW9uOnJlbGF0aXZlfS5jb2xvci1waWNrZXIgLnJpZ2h0e2ZsZXg6MSAxIGF1dG87cGFkZGluZzoxMnB4IDhweH0uY29sb3ItcGlja2VyIC5idXR0b24tYXJlYXtwYWRkaW5nOjAgMTZweCAxNnB4O3RleHQtYWxpZ246cmlnaHR9LmNvbG9yLXBpY2tlciAuYnV0dG9uLWFyZWEgYnV0dG9ue21hcmdpbi1sZWZ0OjhweH0uY29sb3ItcGlja2VyIC5wcmVzZXQtYXJlYXtwYWRkaW5nOjRweCAxNXB4fS5jb2xvci1waWNrZXIgLnByZXNldC1hcmVhIC5wcmVzZXQtbGFiZWx7Y29sb3I6IzU1NTtmb250LXNpemU6MTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzo0cHg7dGV4dC1hbGlnbjpsZWZ0O3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwO3dpZHRoOjEwMCV9LmNvbG9yLXBpY2tlciAucHJlc2V0LWFyZWEgLnByZXNldC1jb2xvcntib3JkZXI6MXB4IHNvbGlkICNhOWE5YTk7Ym9yZGVyLXJhZGl1czoyNSU7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjE4cHg7bWFyZ2luOjRweCA2cHggOHB4O3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjE4cHh9LmNvbG9yLXBpY2tlciAucHJlc2V0LWFyZWEgLnByZXNldC1lbXB0eS1tZXNzYWdle2ZvbnQtc3R5bGU6aXRhbGljO21hcmdpbi1ib3R0b206OHB4O21hcmdpbi10b3A6NHB4O21pbi1oZWlnaHQ6MThweDt0ZXh0LWFsaWduOmNlbnRlcn0uY29sb3ItcGlja2VyIC5oZXgtdGV4dHtmb250LXNpemU6MTFweDtwYWRkaW5nOjRweCA4cHg7d2lkdGg6MTAwJX0uY29sb3ItcGlja2VyIC5oZXgtdGV4dCAuYm94e3BhZGRpbmc6MCAyNHB4IDhweCA4cHh9LmNvbG9yLXBpY2tlciAuaGV4LXRleHQgLmJveCBkaXZ7Y2xlYXI6bGVmdDtjb2xvcjojNTU1O2ZsZXg6MSAxIGF1dG87ZmxvYXQ6bGVmdDt0ZXh0LWFsaWduOmNlbnRlcn0uY29sb3ItcGlja2VyIC5oZXgtdGV4dCAuYm94IGlucHV0e2JvcmRlcjoxcHggc29saWQgI2E5YTlhOTtmbGV4OjEgMSBhdXRvO3BhZGRpbmc6MXB4fS5jb2xvci1waWNrZXIgLmhleC1hbHBoYSAuYm94IGRpdjpmaXJzdC1jaGlsZCwuY29sb3ItcGlja2VyIC5oZXgtYWxwaGEgLmJveCBpbnB1dDpmaXJzdC1jaGlsZHtmbGV4LWdyb3c6MzttYXJnaW4tcmlnaHQ6OHB4fS5jb2xvci1waWNrZXIgLmNteWstdGV4dCwuY29sb3ItcGlja2VyIC5oc2xhLXRleHQsLmNvbG9yLXBpY2tlciAucmdiYS10ZXh0LC5jb2xvci1waWNrZXIgLnZhbHVlLXRleHR7Zm9udC1zaXplOjExcHg7cGFkZGluZzo0cHggOHB4O3dpZHRoOjEwMCV9LmNvbG9yLXBpY2tlciAuY215ay10ZXh0IC5ib3gsLmNvbG9yLXBpY2tlciAuaHNsYS10ZXh0IC5ib3gsLmNvbG9yLXBpY2tlciAucmdiYS10ZXh0IC5ib3h7cGFkZGluZzowIDI0cHggOHB4IDhweH0uY29sb3ItcGlja2VyIC52YWx1ZS10ZXh0IC5ib3h7cGFkZGluZzowIDhweCA4cHh9LmNvbG9yLXBpY2tlciAuY215ay10ZXh0IC5ib3ggZGl2LC5jb2xvci1waWNrZXIgLmhzbGEtdGV4dCAuYm94IGRpdiwuY29sb3ItcGlja2VyIC5yZ2JhLXRleHQgLmJveCBkaXYsLmNvbG9yLXBpY2tlciAudmFsdWUtdGV4dCAuYm94IGRpdntjb2xvcjojNTU1O2ZsZXg6MSAxIGF1dG87bWFyZ2luLXJpZ2h0OjhweDt0ZXh0LWFsaWduOmNlbnRlcn0uY29sb3ItcGlja2VyIC5jbXlrLXRleHQgLmJveCBkaXY6bGFzdC1jaGlsZCwuY29sb3ItcGlja2VyIC5oc2xhLXRleHQgLmJveCBkaXY6bGFzdC1jaGlsZCwuY29sb3ItcGlja2VyIC5yZ2JhLXRleHQgLmJveCBkaXY6bGFzdC1jaGlsZCwuY29sb3ItcGlja2VyIC52YWx1ZS10ZXh0IC5ib3ggZGl2Omxhc3QtY2hpbGR7bWFyZ2luLXJpZ2h0OjB9LmNvbG9yLXBpY2tlciAuY215ay10ZXh0IC5ib3ggaW5wdXQsLmNvbG9yLXBpY2tlciAuaHNsYS10ZXh0IC5ib3ggaW5wdXQsLmNvbG9yLXBpY2tlciAucmdiYS10ZXh0IC5ib3ggaW5wdXQsLmNvbG9yLXBpY2tlciAudmFsdWUtdGV4dCAuYm94IGlucHV0e2JvcmRlcjoxcHggc29saWQgI2E5YTlhOTtmbGV4OjE7ZmxvYXQ6bGVmdDttYXJnaW46MCA4cHggMCAwO3BhZGRpbmc6MXB4fS5jb2xvci1waWNrZXIgLmNteWstdGV4dCAuYm94IGlucHV0Omxhc3QtY2hpbGQsLmNvbG9yLXBpY2tlciAuaHNsYS10ZXh0IC5ib3ggaW5wdXQ6bGFzdC1jaGlsZCwuY29sb3ItcGlja2VyIC5yZ2JhLXRleHQgLmJveCBpbnB1dDpsYXN0LWNoaWxkLC5jb2xvci1waWNrZXIgLnZhbHVlLXRleHQgLmJveCBpbnB1dDpsYXN0LWNoaWxke21hcmdpbi1yaWdodDowfS5jb2xvci1waWNrZXIgLmh1ZS1hbHBoYXthbGlnbi1pdGVtczpjZW50ZXI7bWFyZ2luLWJvdHRvbTozcHh9LmNvbG9yLXBpY2tlciAuaHVle2JhY2tncm91bmQtaW1hZ2U6dXJsKCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUpZQUFBQVFDQVlBQUFEMDZJWW5BQUFBQm1KTFIwUUEvd0QvQVArZ3ZhZVRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUIzUkpUVVVINEFJV0R3a1VGV2JDQ0FBQUFGeEpSRUZVYU43dDBrRUtnMEFRQU1FMng4My9uMnF1NXFDZ0QxaURoQ29ZZHBuYlFDOWJiWTFxVk8vanZjNmszYWQ5MXM3LzdGMS9jc2dQcnVqdVExN0JEWVNGc0JBV3dnSmhJU3lFQmNKQ1dBZ0xoSVd3RUJZSWkyZjdBci8xVENnRkgyWDlBQUFBQUVsRlRrU3VRbUNDIik7ZGlyZWN0aW9uOmx0cn0uY29sb3ItcGlja2VyIC5odWUsLmNvbG9yLXBpY2tlciAudmFsdWV7YmFja2dyb3VuZC1zaXplOjEwMCUgMTAwJTtib3JkZXI6bm9uZTtjdXJzb3I6cG9pbnRlcjtoZWlnaHQ6MTZweDttYXJnaW4tYm90dG9tOjE2cHg7d2lkdGg6MTAwJX0uY29sb3ItcGlja2VyIC52YWx1ZXtiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFKWUFBQUFRQ0FZQUFBRDA2SVluQUFBQ1RrbEVRVlI0MnUzU1lVY3JBQmhBNFUyU2ttUkpNbVdTSmtsS0ppV1pacEtVSkpza0tVbWFURkltS1pPVXpNeVNwR1JtbGlSTkppbEpTcEtTSkV0bVNwSXBtV21TZE83MzYvNkQreDdPUDNnVUNvV0N2MWNxbFNRbEpaR2NuRXhLU2dxcHFhbWtwYVdSbnA1T1JrWUdtWm1acUZRcXNyS3l5TTdPSmljbmg5emNYTlJxTlhsNWVlVG41NlBSYUNnb0tLQ3dzSkNpb2lLMFdpM0Z4Y1dVbEpSUVdscEtXVmtaNWVYbFZGUlVVRmxaaVU2bm82cXFpdXJxYW1wcWFxaXRyYVd1cmc2OVhrOTlmVDBHZ3dHajBVaERRd09OalkwME5UWFIzTnhNUzBzTHJhMnR0TFcxMGQ3ZWpzbGt3bXcyMDlIUlFXZG5KMTFkWFhSM2Q5UFQwME52Ynk5OWZYMzA5L2N6TUREQTRPQWdGb3VGb2FFaHJGWXJ3OFBEakl5TU1EbzZ5dGpZR0RhYmpmSHhjU1ltSnBpY25HUnFhZ3E3M2M3MDlEUXpNelBNenM0eU56ZkgvUHc4RG9jRHA5T0p5K1hDN1hhenNMREE0dUlpUzB0TExDOHZzN0t5d3VycUttdHJhM2c4SHJ4ZUx6NmZENy9mei9yNk9oc2JHMnh1YnJLMXRjWDI5amFCUUlDZG5SMkN3U0M3dTd2czdlMnh2Ny9Qd2NFQmg0ZUhIQjBkY1h4OHpNbkpDYWVucDV5ZG5YRitmczdGeFFXWGw1ZGNYVjF4ZlgzTnpjME50N2UzM04zZEVRcUZ1TCsvNStIaGdYQTRUQ1FTNGZIeGthZW5KNTZmbjNsNWVlSDE5WlZvTk1yYjJ4dnY3Kzk4Zkh3UWk4V0l4K044Zm42U1NDVDQrdnJpKy91Ym41OGZmbjkvK1ZjS2dTV3dCSmJBRWxnQ1MyQUpMSUVsc0FTV3dCSllBa3RnQ1N5QkpiQUVsc0FTV0FKTFlBa3NnU1d3QkpiQUVsZ0NTMkFKTElFbHNQNC9XSDhBbUo1WjZqSFM0aDhBQUFBQVNVVk9SSzVDWUlJPSIpO2RpcmVjdGlvbjpydGx9LmNvbG9yLXBpY2tlciAuYWxwaGF7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBSllBQUFBUUNBWUFBQUQwNklZbkFBQUFCbUpMUjBRQS93RC9BUCtndmFlVEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQjNSSlRVVUg0QUlXRHdZUWxaTWEzZ0FBQVdWSlJFRlVhTjd0bUVHTzZqQVFSQ3NPQXJIZ0JweUFKWUdqY0dvY3hBbTRBMklIcG1vV0UwZUJIK2V6bUZsTnZVMDZzaEozVzZWRWVsV01VUUFJSUY5ZjZxWnBpbXNBMUxZdFMydUY1MS91MjdZVkFGWlZSVWtFb0dIZFBWL3NJY2JJRUlJa1VkSS85WGE3bmV5djYxK1NXRlVWQVZDU2N0MDBUV24yZnY2dTMrRWNmZDN0WHp5LzArbkVVdStTUGpvL2txenJtaVFwU2NONnY5OFhld2ZBOC9sTWtpTEoyV3hHU1VvcGNUNmZNNlUwTlg5L2ZyZmJqZXYxV3RmcmxaZkxoWWZEUVFIRy9BSU9sbkd3aklObEhDeGpIQ3pqWUptL1RKV2RDd3F1SlhzZUZGekd3RE5OZWlLTU9KVE84eFFkRFFhZUIyOStLOWVmZUxhQm85Sjd2ZHZ0SmoxUmpGRmpmaXY3cXY5NXRqeC83bGVTUWdoOTNlMWZmTWVJcDZPK1lRamhvL043OTF0MVhWT1NTSTdOLy9LKzQvR294V0xCeCtQQjUvT3A1WExKKy8zT2xKSldxeFUzbTgzb3Z2NWlHZjhLallObEhDeGpIQ3pqWUJrSHk1Z2Y1Z3VzdlFVN1UzN2pUQUFBQUFCSlJVNUVya0pnZ2c9PSIpO2JhY2tncm91bmQtc2l6ZToxMDAlIDEwMCU7Ym9yZGVyOm5vbmU7Y3Vyc29yOnBvaW50ZXI7ZGlyZWN0aW9uOmx0cjtoZWlnaHQ6MTZweDt3aWR0aDoxMDAlfS5jb2xvci1waWNrZXIgLnR5cGUtcG9saWN5e2JhY2tncm91bmQtaW1hZ2U6dXJsKCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJJQUFBQWdDQVlBQUFBZmZDanhBQUFBQkhOQ1NWUUlDQWdJZkFoa2lBQUFBQWx3U0ZsekFBQUNld0FBQW5zQjAxQ08zQUFBQUJsMFJWaDBVMjltZEhkaGNtVUFkM2QzTG1sdWEzTmpZWEJsTG05eVo1dnVQQm9BQUFJQVNVUkJWRWlKN1pZOWF4UlJGSWFmc3hNU3RyTFFKcEFncEJGaGkrQzl3MVlTbzAwSTZSWi9nOXZacEJmL1FPcjRHeVJna1NLTlNyQWFkc1pxUUd3Q2t1QVd5UlpKc3lTd3ZoWjdOL3ZoenJnYkxIM0xkODU5N2pseno1MHpKb2t5eFhIOERxRFZhcjBxaTZ2OEJiSXRxU0dwRWNmeGRsbXNGV1hrdlg4QWZBVldnM1VLUEVuVDlHS3VqTXpzQUZnWnNWYUNOMVZUUWQ3N1hVbnJnRTFrdis2OTM1MjY4V1JwenJuSFp2WVJXQzdZdkMzcFJaWmwzd296cXRWcWl5SDlJZ2pBc3BrZDFHcTF4VUpRdFZyZEI5WktJQU90aGRnL1FjNjVMVWs3d05JTW9DVkpPODY1cllGaGtxalg2L2Q3dlY0R1BKd0JNcW9mVVJTNUpFazZGWUJlci9lZVliL01vOVd3Rm5QT3ZRYmVBdmZ1QUFLNEJONHNBSnRBRy9nSklFbG1OdWlKeWJhM0VHTm1aaVBlWnVFVm1WZWxsL1kvNk4rQ3pEbjNBWGhFT09vN0h2LzNCZUF6OEl6UWtNUG5KYnVQeDF3Qyt5WUo3LzBuWUlQNVMvMEZIS2RwK3J3Q0VFWFJTL3JmNUhsMUd0YjJNMGlTcENPcENaelBBVG1YMUV5U3BITUxBc2l5N01qTURvSHJHU0RYWm5hWVpkblJ3Qmg3SjkxdXR3bWN6QUE2Q2JHM0dnUGxlWDRqcVVIL2ExQ2t0cVJHbnVjM2hTQ0FNQjMyZ0tzcGtDdGdiM0tDUU1ta2plUDRXTkpUaHJOTlp2YWwxV3B0VElzdjdKdFE0dG1JZFJhOHFTb0VwV2w2WVdaTm9BTjB6S3haTlBlaHBMU0JadjJ0K1EwQ0o5bExuQVJRTEFBQUFBQkpSVTVFcmtKZ2dnPT0iKTtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOjhweCAxNnB4O2hlaWdodDoyNHB4O3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjEycHg7dG9wOjIxOHB4O3dpZHRoOjE2cHh9LmNvbG9yLXBpY2tlciAudHlwZS1wb2xpY3kgLnR5cGUtcG9saWN5LWFycm93e2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjUwJTt3aWR0aDoxMDAlfS5jb2xvci1waWNrZXIgLnNlbGVjdGVkLWNvbG9ye2JvcmRlcjoxcHggc29saWQgI2E5YTlhOTtib3JkZXItcmFkaXVzOjUwJTtoZWlnaHQ6NDBweDtsZWZ0OjhweDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MTZweDt3aWR0aDo0MHB4fS5jb2xvci1waWNrZXIgLnNlbGVjdGVkLWNvbG9yLWJhY2tncm91bmR7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQ2dBQUFBb0NBWUFBQUNNL3JodEFBQUFoMGxFUVZSWVIrMlcwUWxBTVFnRDYwemRmd09kcWE4VG1JL3dRTXI1SzBJNWJaTEl6TE9hMm50MzdWVlZiZCtkRHg1b2JnQ0MzS0JMd0oyZmY0UG5WaWRrZit1Y0lodzgwSFFhQ0xvM0RNSDNDUkszaUZzbUFXVmw2aFBORHd0OEV2TkU1cStZdUVYY01na29uVk02U2R5Q29FdkFuWjh2MUhqeDgxN01pbG14U1VCNXJkTEpEeWNaZ1VBWlVjaC9BQUFBQUVsRlRrU3VRbUNDIik7Ym9yZGVyLXJhZGl1czo1MCU7aGVpZ2h0OjQwcHg7d2lkdGg6NDBweH0uY29sb3ItcGlja2VyIC5zYXR1cmF0aW9uLWxpZ2h0bmVzc3tiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFPWUFBQUNDQ0FZQUFBQlNEN1QzQUFBQUJtSkxSMFFBL3dEL0FQK2d2YWVUQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFCM1JKVFVVSDRBSVdEd2tzUFdSNmxnQUFJQUJKUkVGVWVOcnRuVnVUNDdnUnJBSE4rUC8vT3IvNjFZNXdPTlo3bVoxdTNYQWVMTWpKWkdaVmdkS3NmYzV4UjNTMFJJSVVXK0NIekNwYzJNY1lvN1hHdjNleDdVaVpkNTdyanl6enYrdiszM1gvUi8rM3IvZjd2UjM4NlkrVHZLTmNmL3dkaFRMUGN2OXFVMndaZDc0dXRoMHQxODIxamtJWkxQY3NJLzZuV2E0WHZ1dHF1VTBaODVtbng4MFMvWnpncG5Mbk90SE50Ny9vZngxVEtYY1NOek4vN3FiTVEzanU3ck5RbU1ZWWQvNHMyajlhYStQK2dHYU1jWnJiMU0vdGRydmY3L2Qydjk5UDkvdDkzTy8zY2J2ZHh1MTJHOWZyZFZ3dWwzRStuOGMvLy9uUCsyKy8vWGI2NmFlZnhsLy8rdGZ4NXovLzJZSzVBbDJyZ3ZmNFVzYnBkR3JCNTJiQXZBclhwdXpqbWlxQVZTR3o1ZURtR1lYemhiQVptQ3JubXpkZHBVVSs4WTFkQU9ZZVhDdERVd1Z3VjdZQ0dINnVBbXlNY1o5bDV2a1VhQlBHTVVaNy9KNXcvNzkyL2Z2djlYcTkzMjYzZHIvZlR4UEVDZU1FOG5LNWpNL1B6L0hUVHovZHYzMzdkdnJsbDEvR1AvN3hqL0czdi8xdC9PVXZmd2tWc3dvbmdqZE9wOVB6SDNVM0Qzem1XR25aVlhuNGpDcXM3d0MyQktQNC84dEF6a1pzb1d4NlhycWVIWnltdnA0QUJDQkpoVFF3S2ZEVDhnenJaQ0lxaTVBaGlBQ2pCZkVCMnJQOC9YNjNNTTdmNi9WNnY5L3Y3WGE3YllDODNXN2pjcmxzVkhJcTVmZnYzMCsvL2ZiYitPV1hYOFpQUC8wMC92NzN2NCtmZi83NUpTdmJldStiTDJXTU1hRmJBbHBCTk04NVFYK2N0NnFvU3FrUEF3dVFsQlZLcUdORlNVT0FBM0JtdTdnQzVoTk9kMTVuU3d2QU9VVzdDNGdpVUNWOFNnbjVMOWhORklxVHNwMEd4STB5c2lveWpBamtZL3RHSlZFcHorZnorT1dYWCs3ZnYzOC8vZjc3NytQYnQyL2oxMTkvSFQvLy9QUDQ5ZGRmeDhmSFJ3cm1UalY3NzlFWHUycHgyeGhqd3RkSlpRY0FXUUlQTFBJU3NNSmFTd2lEOGd6SUtyd1N5QVRFNWo1bkFiUjVjMWRCVXdCbHNFV1cwaDZMcWlZc3FGUEFReEN5Ulozd09TQVJ4bWxYTVg1azY0cFFmdnYyN2Y3NStkaytQajVPSHg4ZjQvdjM3K1BidDIvanQ5OStHOSsrZlJzZkh4L2pjcm1VRkxPMzFnWURXYmx4UklzL1RxZlQ3b3VzeEpzQXhYQTJHYzdUQTlYZGdmZG9IYkZzajc2WDIrMVdBcmdJMWFnZUd3QTNxdXBxb0hzbWNiSTZGdTkzcXVnZ0ZhOWQ3TGVEdGdLZkFGSEJKK05FQnlJa2NKNUtlcnZkVG1oaEdjZ0pKU1o1dm4vL2ZqK2Z6KzE4UHA4K1B6L0g1K2ZubUdEKy92dnY0L3YzNytQajQyTjhmbjZPMisxV3M3SmpqUDZ3cmFNSTVFNFJaOHgydlY1VFN3a3F1b3RWNy9kN1R6NkhGV3NEL3FOY2R3MENRM3EvMzIxYzY4NlR3RFZJZGJ1eTczek5sZGhTSGI4STJrbFp6bm0rSW5CUzRVNm4wMzAyYUJGc0xoSERBS0pWSlZnbGZJOWpodnU1M1c1M3NMQU5ZTnhBaURBNk1DZVVIeDhmOSt2MTJpNlhTN3RjTHFjWlc1N1A1eWVZOC9mejgzT2N6K2Zuc1NtWVV5a25XRUc4NVdCc3Q5c3R6U0x5TWRmcjlRaTA4aVkxNVVaMExsREdMaFIzbzV6SzJqN09QVVREMEUrblUzdGs3WGIvMTZORmJobG9BTXVZMXpqTFVPTzNCS2VJRGUrWjhzMy9KNGdGbzRUTTVqUG11UmcyOGZvVUtLVlN3bzE2VGdBNW5weXdjV0xIZ1lsL1B6OC83My82MDUvYWI3LzkxbTYzVzd0Y0xpZTBzWmo0bWFvNWdUeWZ6ODhFMGYxK2o4RWNZendUUEVHMmNxanlmSE5GME04ZnVxRWlhT1ZuUnpaWlFOaDVmd1F5SGcvSERHZkpvODlRMXpiL3F1dTVYQzY3NzNJMlhLZlRxZC92OStkM3d1cVd2YS9ZVGRVZEVWM2ZoSXYvVml5cHM2WUUzeDNyNDNLNWJKUVM2NnpheFZHRnN2ZCsvL2o0YUYrL2ZtM2Z2Mzl2dDl1dGZmMzZ0ZjMrKysvdGRydWR2bjM3WnVOTEJhYUNNZ1V6QytyWlJpRm93eFV1Skk4WU1xY0NwOU9wcTV2YWdhWVU2bEdKQTFYUXFlamNodzZDajBHdzVuWUJyR3cwMUEyTzIwNm4wNEJHb3VOTnlUZnAvRndFbGhVZXk2blhySUt3N1FRV2RkeHVOMmxkTDVmTDgzOWdTUEY4YWh1L0p2Qk80OENQU3VxTWY4VnA5L1A1M0w1OCtkTHU5M3M3bjgvdGZyOC8zOS92OS9iNStUa2hQSjNQNTZtUTQzNi9qKy9mdisvaVNnYnplcjArQVp4LzUrODhidjZPTWRhNlM1ejZrZDIxZllDOWR4djdjSUpKMmQ5QU9TMzBmUE16eUhpVE04QjRERjZYVWxZSHA0S1FXM1crMXQ3N01OQjF2R0h4V3E3WGE3dmY3OCt5NS9ONUErSDFldDI5eHVQNWRiWXR5YVJ1NEFrc2JQcTY5MzZmalJ6WFJ4QmJQci9iK2IxOCtmS2xqVEhhQkJCZm44L24wLzErSDErK2ZCbm44em0wc0I4Zkg1dTRjcjVHdUJoTVZrMEVFbjlSc2N0Z1ZoTStpeGxKdE1BMjNSOEI2eXlzQXN0Qk9nRlhJS0tDTUlnVG9NcU5FdTJmWU1IN3p0YzczMmRRS2tDajF5dEFadFkwS3g4cElyOEdHSitBVDNWKzJIaXJobCsrZkJtWHkyV3o3M3crYjE3UDhwK2ZuOC90VXdHVmxlVmtUeVViNjhEa2ZheVdZNHp4TlJpaFU0RXBMSlBaVnJLK3U3SjQvbWdmS3FlTFc5WDJSRVdsSXRMMWRpeW5iRERiMytqWGdZalFxbjBycnhXYytOa0lMUDdGN3hJYk12eDd2VjUzeDQweG5sYldKRjEyWlNhZy9OMHBXNnQrWnptT016SGphakt3RGZvbmQ3OHpZVGRmcTE4dXA5N3pyMnE4djNJaW9CcHJSdEJsMEVaOW9nNVdCUkdPZE9IaklqWEY3VW90RmJnT1duWHpJSnl6WXZqRzVJWWdzbU1PeEhrejhPc01TclZOV2VxNVQ4RGFPY2JFdjFPZDVyYnM5YU83WXZNZXQ2M0VrRisrZk1FeHErTVJsNC9MNWJMWk4vK2V6K2ZuWjZLYXp1TXFYU1FWTzVzcEpYZmxIQUl6ZXMveEpzZWNrUkppRE1vZzlkNlZmUnJxWE1yNktwVlYyN2pSd0phY0dvdk9BTTF6TWRRTW53SzFBdWJLNjNrZENDaHZJMUM3ZzB6OW5mL0QrWHplMlZqOEg3R3g0UDlkdVFsc1lDcnF5TjhYcUczSG0vMTBPajNqdy9uK2NybHN0dU0ralBtbXhUMmRUdVB6ODNQenQycG4xWHNFSFgvYm5QYVZxVm1oMHh3T3QwbzZYTExBSGVQVVUyMDN3SGZjcnNwQ3dtVjNUcnlCNXMwTXNlZWc5N3gvQnd6Q2pCbGJCK3BSQVBsYTBCVlF1VDZWNlFIZEJsajNkMEtHMTQ3YitEcXhRZVV5bURPNDNXNGRRYXIrVElqd21BZDB6OC9oNjV2ZjAveUx2M1BiNVhMcHJ1L3lkRG85czdFVDBJK1BqNmRLSzlWVUVJZUtXUVdQQU9ySjhMS2Q0dkUrdDkxWTNlN1VGbFdhdGcyVndKbmIrSFBtdHZtL3NmSzU5L09hV0YzeC9lUDFVUEh2QTVERFlEcFlYZmIwZHJ2MVYyRGtCa3h0dy90RVdWVmxYV2RDOXBGWXM1L2pmaDlkUy8xNnZXN3M2bFRHK1RmcXN4U0pIeGtYWHEvWGRyMWV1NExzZkQ2UDN2c1QzTjc3RGtMK3pQbTVqU2RLTDR6UjNBeFFkNnJIa0xrWWxTb3dzcnE3em56dTZ3U3dkc01KT1htQTVmQmNqeHRnTUdCWUhscjV6b2todHNNQ1RnWExRT1c0WEM2ZEV5RU1wckw4bUFRelhSZ2R1aXgyeVp6b3J4a1lzRG4zaEIxVmVNTEdzWHNWdGdsMnBXOFMzc3ZrMHZ3N1I0aE5hSHZ2NGNBQ2w1SEZ6d0lIMEtjNnp1NFhqRFBSL2pwQVZ4V3pPMVhrMkREYjN2VGN4ZUdVMWlXWkhrbUlEV3ppV0t2aXJDSjREcmF2czZJSi9HRzZjVHFXZFhEeStmQXJRRFZWa0xxa1ZqQW9aSUlUZG1tSXFYd3FhOTVOMytNR1lvWlFkUlZOTzUzWTF4UmtoTzE2dlk3ZXU1MDdDYTlsSm5iR3B4T2VtUWhTdy9BUXNtbXA1elU5QmlVOEc2d3ZYNzZNNi9VNlBqNCtkbzBCejRDcGdpa25UVWVEcXdsS0JtZzN1NE9WanJaMUErckFjZ2FlaldxNmVKQ3ZDWUZET05Td09nSFg0RVFSdzhseGJ6RE9kRUs2Z1ozSGsxYis4ZzJvMUpGdEtYeXYvZkVkVFh1V2pXWGRBWmlCcDZBRGVEckNGaWltN0I2WkZuZWVJN0d2bS9QTWtVRFg2N1c3eEk4YjBENy92OGRBOXFmTjVvYUNmNzRXWmpIMG1mMWNtZlkxWTBKVUZtVnJUV3U4dXprTmNMdEVqN3U1RlhCVGtmQzZHT0E1cThZTXhPOEtWdkY2c0FWR2RjclVic0tPRGNRS2tMTU9NZG1seHVtNjQyWXJQbTI2QWxoWlcxWUIxUityckdzd0U4VGFZQVdlVU14ZGYrV2p3U3ZaMkVmM3l0T3lmbjUrUHBWUEFhcU9uNDNNdE5CcXZtamp4YmpNNGxaalpZNGdxTk1JNWt0YVcvc1lLTndTKzlsRlF6R2lobU1DS1BhNytaMFY2RWIwR1Jtb2J0cFg4SmxqV3U1Rk1MTjVqYTZoRzlrd1FnWnFmNSsxTkg1VXh6a0ZSZUNkV2hKOFhkbEdVa3hPN0hSbFlSbTRtVk80M1c3dGVyMTJUUEpFdy9ybUVOM0w1U0tISVdaZzlteitwVW9LT1lxNWJKVEpkWDJnbWUxVWN4TVpRRmFFUUlsSGN0MzJNK1kxQnpHa0d1emZpeUFOOXordWdwbFoxc3ltQ3JEQ1lZa0d4RFRwSTlSekJ5MHJIeWVEVUMxbldhZVVhRDluNHhrTnlZTUJEWnR6WjNCKytmSmxZMjFYRkRPY0FSSmxhYk95aVMzdUNwTEk5anJaakNEa2FWdmNDQ2p3b2duS1NoV2R6WFpXbFpNdlZUZ0Q4THBxbENMcnFnYmNCK3FZd3JnS1lwVDBjY0NxYkt5Q1ZhbGtFYWJuL0Z5bm9nQ3JQS2ZxZjUxeEo3c0dCMlpYY1pteG9TT3p0angzMDBEWmk3YTAvMkFJUjBVbEJhZzlTdUR3NktjQXpsYUI3dkhadldwaks5MGR5cnE2Ykt5RFVaUWJSMEIwNWJpTFFrSEljU1VtZ0lLK1N3dXFnSENub2lvMlJRVTF5aitCbkJ5OXBwaFZLTEd5QzdaekZLMXB4V0srRThJaFZDV0xOL3VMdG5VVTRheW9ZTG9hQU56OEZkdGFTdlk0cFYwQkVXMmxzNjFjenFsbEJLcFR5S2dNQWhyWjFjZGMxUlJPdFBtdldOa2RjS1o3Wkt4YVdqaVBMSk1wcDdPWkt4QStycUcvb0pManhmMHBuSmxxTG9EWm8zZ3lVMG1LR3lzMnRhS2Vjai9kMUMrckpTcGxCcWxUeUFxZ1IrRDhLaktsbVJMMmd0VWNBZEN0c0wraWpDTlQxb3FxcWtIMk9IRWJHNXNERm5VZzVBYSt5TG91MlZVMXB0ajFTMlpRcXYxT1JaTjlJV3pSZmdhUkJ4S29CRThVV3lxbEpGdHJJYzBBeE5qU2plZDk5Q1RZL1hEZlN6Q3o1TTBJWm9WRXNXblBGTlRzbDhvb1ZDMVR6YkdncUZaTkRTZ1Z3S0srMXNHRE1LcXhaQ1dHVk1EeXNpRXIxalZTUUpVWXdqNWlIT2xUaGRIdDQ0U1FnOUNOK25sOEQ5ME5NSWdBZGdyNDZKcVJpUjlJOHZSZEZ2YnIxN20veXhVTUtqTkxNaVZVQUR3dTJDV0doaGkrRjU1VFdNOU05Y29nem1zMWRuTTR1T0YvTEFFWVdkY3FuTTd5Rm15cTNJZndtT1JPZDdZMWlGV3RPam9ZOFRvNDFtVFY1SXlzZ0ZGdVJ6c2JXRkdiTklJSkNEdjFkT280bFpHN2pXQndSRnRWVEt1V3llQ0J5SktPYW44b1ozZXA5WGRkTmwwdER1YXl3THo5Y1hQWWVEQUEwU3BrQk85c2JWY1RPVldsZFB2NHV5ekVrenhIdGp2b25Ib1NrRkVXTm9vMWQ4RGhjUXB1dGQycHBOb240QnpvQWlKMWhCRlFnMGRWdGRiR0hIRFFXdXNobU5FUXVrTE0yUU8xRzJZOGJnVFhxRmhjQkpqN0VqUGdjUHRzOFVTOHFQcFBCL2RYem5PaDVaNDM4dHpINWVjNlFnck9LclJSZktteXNCbVVEQitQaFlhYk1sVlBFUitHQ1NJVFR6cjdhbTJ0QXJIM2JnY0V6UEptK2NyNWpKNE5uSE5GRFZyRlhjSTVMZTlrNUpudytiZWRiVitGZlJ6WklIYU9PYU9zTFkwLzdVR3M1OERqckd3S01JTUZJR3pPRVcxL2pHc2RBdENONmhFQUk0aEJlOVlYZVJST0JTVlBBVlBBcXZJTTVieDVoVktXQU1QNnpCUnkzaWVzY3JpZFZkRkJpbkJ4WERuRzJHUlkyWGJDdnAxbGh2R3RPOUJ4dTVoOTA4WFF1NDJsblNBck1GZGl6TWltOHV3UkN4UEdubk9TOGx3cG5iT2lEcVRBanNyUk4vUGNvQVNjQ2JhQUNxVk00MHlsbmpqVEJzK2J3V2xBRzIzL1VLYmRraXdLV0lRUEd6V2FjenBvU2x4UEVqODIyY05Xa3BTN0Z5enNEcnFwZmdwRzNqYWh3MnZnYmFTUUF4dUxXWll0N0p6eU5lOEpvWnBOQWN2REZPZHcwd3FZVDlBSzFyWnovRGRiU2xMUHAwcnlJeGdRSmxLOUFabEVxN0lPWHBvaGc5UElockNuZzg4SnNPeGlWNFpXQVlmZzRzaWt4LzhreTJaOWw4NjJ1cXdyZnNjSUg4K3VnVG1WR3lpZGRlVllVZ0VNbjRHWnpnMTRFd0lzaDlzeDJjS0tpV1hSZXVPRTVnekdPUWdkbFJLVlZkbGV2cWIyNzlYcTBRbnN0czJWRGFCTzBjb2V6c3J1V3RIQXB1NnNLRzRJQmhOMGFHVTJrTHJNS0dSVE4zSG1iQ0R3S1YxNHp2a01FREc0UWZaVnNwVmxhTlUybWhjNVRFWjNOMWgvenFUaGV1THBXMDVaV1RHVmpiM2Ribk5teEtaQm5OOEpxaWRhVkxLQU95QVJOTFMrTUI1NFoyK1ZhcW9NTEtyb1ZCbG5nZWZuVFBBY29ITldDU3ZsZkE4Q0kwSEVtQk5CbkJsWHlNcnpVN0E3V1ZtOTRQUHFRMmdtcUt4K1dER3NudmlsbWNTT0JKcU9LMW5ZeUFJenVBeWVzcTNVZFNLM0tmV2NZS0Q5NUhtZllPVTNxc2VyMkN0WUVVQStGcGZxZE52Z1BCWlVCaERyR09OUlZsUXNoOHJMY2FVQ3lrSEcwT09Vd1RsTEJyc2g1c29FTUdlemkxRTRIUlZ0MWljcDV3WkVGWGRpYkNrRzhZOHZYNzVzYk80RTBpb205eitoalNpT2Z5M0RocFhJdHBWaEUrVUdRZHZvV2p0Q2htckdIZjRZQXpLZ0JObkd0dUp4RkNlR2RoVUFmUUxMSzhrQllBUDZndkZKWmFqTUczWGt5Y3k4S3VDMHE0RXl5bXd0d2R4ZHYyTTBtSUJ0SzBMS25mNjQwajAwQXVxNGdVa2RXR2xoczIycUpjNmRaQ3NMMTlveG5sVEpHNFNZVlJJR3BEOFRQRkJ1TTZPRWxiUzFwbGRpZDRtR0F5TjZaSXVwYkM1YlhKTjlmZHBiVGhTeExVYUk4SUcxWElZQnhXM1RqczZLUW9zS2N4ZnhjUW1kbndSR00xMEduRmNDeTJYWXVuTE15QWtkZ2s0bWVQaWN6c0x5Z3RoY0J1dDZnb09xUzdZVkZYQURMamFvc0I2czZvZmNaV0FaU0lSWXFTVWtpell3dHRZYWIzdlVPUTl3MkhSeElJZzhXd1JWZUU2OHhpNFV0TDN6UnBoeHBsend1WnJjcVlDcTFJM2pQSTVkbkpJeWdFb2hNYlBxVkpTenJ3enhCSlRzNXpOK1JlVVNneGlrUFFWRjNKVkJlTlF4YkhFTnJFTU52RWRGWlZWOWxIOStPUkdFc05aUXB5VE5jNEMzQUc3WEY0bmd6cStEck8yemJ1YWFPWGdkYUZjZGtFb3RvU0ZCVlgycUowQzhPV1plRzRLR2xwZ2hBMFhmVE9QQ3FWMnFxd1EyNlFXZkYyUE1MaEkydzFsVkFhMmFQc1lkMHphMjVNUVJ3Z2NaTjZ1UURDaStaeGlENFhFTTJrWnhPVDQxRm5abmFSbGNwWm91emxScXFkYlFWV29wUW9TQjU4UlY1MGxCTnJIaS9Bd1hTNUxyd0RWbHBZM0ZjM0J5aVlHYzUyVHJpc3Q2a09YZHdJbkFRdEpwcDVRY2h5YXF1WU9WN1N1K2Z4Vk1hVjNkYzBSRTJTNm1VWTBnTHQycE1jWXFyS0lROXcybDFncFFVTXRRWWNtbWJ0NURUTnhkaG5VQ2pRcXRiSzlTVVN6dnJDMG1taGhFMWUyRlMyK294eXB5L1pBU3V0a210angzdmNCQzI0UFg2NW5icWtCQ1JoZmpTOWtJWVBuZWU4Y01hZ1ZPaEkvM1QxZkFtZHRBV1pzQ3N3VEpDa1FWTmEwcVdLU0tQT3BIQVVoRDlEcmJWY3lvWWt3cWh2aDE3dllBYXlYTFF5S0dZZHhsVURGcDQ5NHJCWFJqWWdPMTdERFlldE5JVWovZXpwNlMwbG5scEV3c1dtSk1rT3dzS1hlWktFQWpJSG4wRVFKSVNhUkJjTzZVTUlOejdwL2JFampudzRmdCt4bUR2a3N4WDRHMnJJcmlzN3FhZUt3QUZNUDJPaTduNGNyaXVad3RwU1V3cGZMeFNuT1JTcklxdXNjNVpGYVh5c3FSV2ppWjJEeUFXRUlMMzV0VlNvUUVsRkFDak9lR0dTRTdBSEVRZ2RvL0xTdkNPZ0dCdmt4c21EYnZsUzNGcDV2aGFCMlRBR3FSS3JLS01yaExWcGFHekVWalowT1F4RGhhQ1RBK1F5UlIxZDE1YVF6ckpudEwzUmlic2lwakc2amxnTDR5cWJTMHNOWWcxZTg0dmhiQlZyRWxLNjRDVWNXWVhEZkt4aHBJdXhpVkpaVXhzYk15L3VSQktUTlJRNGtRM0xkUllMUzBySmpSUGxUUHFZNmdkSnNFRGMrYVFYQW4rSGdzTlVDYlJ1RjBPajB6d25BN2JXRGtiaE81RW5zMDBxZVFoUzFsYUJNbDVNL2NBYXhzTEY4ckt5cWwrVGY3RUxMRUd1L2l4aWltZEN2bzBUamZwakt3YWdnZW40ZWg1djdMb2tMS2JMdXl2SGhjWkc4ZGhHckVEeDdIZzkzWnBwSkY3cUJxTzNpVnZlWEVEUU5Jbnplb2U4WXE2ZVBhWkJaMkp2aU0zVzJVQUdvdGVrUkNBR3E0RWtGMVgzRE9uUjExeVJzQkwxdFJhMFBWY1ppTkZYWjJjMzRGc2t2b21JblFRNmx6cEpvWmJKeGs0M053S0pGQnF1SlNzckJ5SHlkeEtPblR4UUFTQm1TM2orSk1uc0hTbGEzRWM2SzlWV29KVm45emZqd09NN2hxWUFBcUpRd0UyYTNuQTQ4SjJRR2VnUmtwWk5pdlNZK3lzM0VrS2Q0b0pJd3N2SUhsM2NXZ0x0NWs0Tkg2T210TFdkcHVyT2t3RU11cFljN2VNdERSaE9jSTJ1aTVKaFZJelh6THl0by9HQVB1Wm95bzh3a29kdVZnSmdsQ3Q3T2hHYmdJRDRNcTRzaSs2M3pVUzFGdUZGWEZscXlhajJlbUhsTE1jQnFZdTBGTXVSMjhCYkI3bE94Uk1TaUNRWEZoQ0t1d2toWitwWURpR1NnYnNLS1Y4TWlTUnN1SFNJV005cmtsUmlJbFpadXFYanNRSzhvb1lKTWdxM0pLV1ZraEhiaHNWeEZVenRoT1dQa1lpamNieDU0SUtzU2RUK3VMcjNjckdLeW9ZZ0ZpR1I5aUJrNGtmbG9VWCtKSWxRUlFxYWJtcGduaHF0cFFwYjZSVlExV0g1RG5yUzRoRW9HWnFhZXJRMmRoRmJ6OFhlUHhTaG1EYm83MGVJU2pvb3JPMnZLOFNKWEk0U1VtRVU0eldLRHpVRHRXVFl3N3hYbGJTVEVqNEZSZzd6S25Lb0dSQUx2MEdzOVRnYzFCcEN5d0daUlFBdHFWejJ4ckJjQU16RXBmWndGU2EyRzVXMFFCRmpTTWFwV0FFRmEzSGNHTjdDeER6RUN5SWtKOTdxd3JxV05UV1ZvODc2UFBzalBrajJ3dmdyb001bExaS01FVEtWcWwvQ3ZuV1ZGaUZhL1N6SlVRd2tvWnNyNjdZNnZsU1JWMy8ydG1OVE9ZM3ZuYXhZd011b1BLcWR6UjF3N0lxSHltbFB4YUFUaGZVN0tvMlpYWWo0QVlKSEwra05kS3dSUVlFU1RSYTVmc1VaL3JWQzFUTVR5V1Z5WW9xTnR1emFIc015djJ0dm9hcnhkZnF3WWdVMWF4Rm8vY25xbDFGR3NxSyt1QVJPVjhCWDRHVThXY1pUQVRpMnE3UWN5aTBPMFYrR2hXQk1OUlVrbjhIMVNzV1ZFNUJ5M0dpMEVDcVVlSm9CZkF0RGE0YW1rZFhHMzdBR1A1R2dlYjg0cDdVYXpwb0tSemRGemVROEhrb0hHeHByS3kvSHBtNXQxMnA0N0o2eFRZREV6N3VJTkVYU3V4WVh2RnNrWUFjK3lTeEg5c2Y1ZnRLelU2SWJ3VkJjVUdnNWU1Rk1DRVhTRXJaUjB3R2F5VjE5d29NOWd1UGpUcUpkVlRxUjR1RTRuSm5MbGRXVmtFQ0NaTGQyVkxGK3h0YW1leDdJcGlyaVNEVXB2cnBuOWxyd0dNQ0h5cHBNSCtwczZMSUxzdUZHVWoxWEVPWGlxYnFTSFBVS25DbHBXVjY4a3F0VVJWTkRZNFROYW9jeWtvWWVUVTVuZ0dFUWEvUzFEbm5FNEFlWE1jS2pIUEFtRlZqQ0JFTmFleUxWTkhmcjNweDh4VXN0Sjk0aElwZkg0SEtFL2VEYUFySzZsU3lWVkZiZHQxZ3hUSVZrM3BwcFZsRlhpNHBFaFZCVE9icXVvaFU4NU1MWG4xaWFodlVrSEpqU0NNYzAxdExGdmVWVkJ4MERvZE02amZ0Q3U3RE90SXpZeHJjMHFwMUpHUDJheVlGejJHYjZIdk1yTzhjbkd0VjZHam0zdUltU2ZEMkdwV0s2dW93YlpHTXhGS1FDbzFwT010Y01YRnBSc3QraFhHb0FvbUYzc1NUQkdnVGdsYkJLV3dzUTN0WnFhWVNwMFoxQ2ltUkRXRmNDSlVQWUowMEJJNUZrS1lOb2lmdVF4bU44OFNXVlhXTE1hVXFxcWdDMEJtUUpSNnNrM3U5TkNmNmpZTFh4QWZxc1lFZ1ZMQWhSWTJBdGd0ZmxaTkZtRnloeGRyTGtBZFdsazREODhNMml4SHllcElkaE1IckcvaVIxWkd0cTBNR3BiRGJSUFlPWGVTWTFNNk55NFpzdHZHU2t0SytYYkZQQVRqMkQzNzFzYVBFc0FNWGhYcnNaMGttL1hTdGtoaE15QmZzYTZ1WEZaZTJWQ2UrWU1yMStHS2d3clF5TllxMVZSckIrRWl6QW93Nk5zZE5LY3lWRWtZZU03M3lzNnE0a0FIcDZCaUZrbFRrSXJWQzVvWVY3dXp3T0dDejRVSjBTdHEybFdNSnk0d3RiK1JldEw2dFpGaWNuSm1CdzVVakN2WFhNWlZKWDJNUWtiZitYTjVFV2Q3OFZ6OC9KRXNNWlRCaUtOenNtMWluTFJVUTc0SDROaWRhcUk2OGo1c0FGZ3hjUnZlQzdpZUxKWGZRWXhqWloyQ3NpV0Zld1pYSm1CSWxaMXRkdHJYNGhTdWF0ZUtzby9SWk90T0tXMm5tcTFvVHplSzZkUldBV3UyTlJWYjRocTBTWG0xR3Z0dWdIcmJyNUlYcW1Ta3RnNUN1REUyTVNsUHdzWTVrTkUyV3AzQXFpWmJXVkxBeGlCRisyaUJaYnVOajZNQjZyc01MQzdGeWFzYVlEeW83S2tvUHlFdHczcEVNWGZQdnhBSmkyakFRUWdqcnowckxJWlNXWmxJb05od2Q1eEs0QVI5bVlOaldBYUxybnVJbUplQlZOOXpCT1JPYlZ2YnIrbVRUZkZTRUpMU1JuSG83aEVKb0lpOE1GcWp4bXZnbUY1VVJaejR6TEZnWlo4Q3R1Mlg3Z2dWY2NLbTlnVnhJc09IcXhYZ05NS25GV1pZbmYxZEJuT2hheVhxMTdRd0ZsV1cwOWVOS3lWSkZtWHFhT05HQTVhQ2VnTWJKM1VVa0dZMWljM25LV2dqcThxZlZZR1FHMWdSdDZyczYyYTZIaXFxVU9xZGVzSzVObVg0bkdvZkpvaUUxZDBkRjlsVlZrdlQxL2tFRWFhQ29ZT3dGcGNWY29MTSs3NjY5UHhDOXJXcWt0SDBzV1VZbGQwVkNwdUJaL3N0VlJjR2d5OVdYMitVMVF0aGk5U3pBcVN4elpzeStPaUZ6QllueVNHVjZHa3U0NHJEOEJDT1pCVjNCdkQ1K0FLUkhOd01Fc0I2RXpIbkpwa1RBZWlVbEVHa2NFQ2VCNkdEWlRwNVlFSlRsdmRya254WWpUbGxNa2ZOdFh3RGpNN3VWaks1SlhVVW40M3JycXBLMmp5dGF4SFcwTTVHOERDOHJ0SE1ZczdLU2dkdVZRTUdUWUZxRnZWUzZya0Qzc0RKNDZhZmRZRndvcTExQU9LQ0JMaHZ3b1VnYzhJR0FOeWNSNmtuWnJkSlBkc3V4bnlqZmQzRm92VGxSTWRFZHRPbDVDTVY1RUhzWFFCaXM3VE93dklEWmFHajJWbnBiaDdjcEs2M1Z3WUVNTHdxYmp6eWw2OTlzYXdGRmtGMXlxalVVMzFIZkM2c1cxWkZWRnVYVlhWZ3o5a2VFYXcweXMxbFdmbSthelFBUVNXQStoS1lWZnNaalBuY0FjVUI5b0lheXkvVVpYUk5ja0RHamk3N0dzV2J2Qm82dFByV1BxT3lWa0JVcStJTmVxcHpOZFlzL3UwaWZoNXFtcHFJVyszM0pWU1Vjd1k3MEtMNFU5bFlkVTZsanRTbHM3bG1maTlnM1l6ZVFmVmthR0ZhVjNPRENuYUQyTjh3c0VERmtsRTNSek0zWmdoZFlrV0hzc3pxNzBGSWVjbktrVmt0OGV6TXpScTlia0d1S29qUkxCVlNvZDNZMXlQcUtnWVc3SlJRVFBWeXk1eElZTGpPZ3hnVDUyUktKVVkxZE9ySWlSZDRmdXRReC9BNUFjU21FanowdkZXcmtMenZiV0F1OUhPV2JHZ3hGazFWTlRwbkJLazZUZ3dpc0kvSGN4WVhQMXVBV083MlVMRmxCVHErYVN1MlZUVXM2aHJ4TTJDRitoRW9yMVZJQTlabUZVYWFiMWxTU2dac1ZzNHN4ekhsVkxvSkhyOUg0RGhPTlRrSTFYQzAvd2lZMk5vV0FHNVJsbkhGbnE2b0xjY3BRZGRNdUovTzE3SlZBNU9ITGkwQnFDenRxN1kxKyt1Y0NkOThxTEk4TUlIQlYvY0tqeFFUbWUzaEZCUzNNeUNxbkRzdXltMm84MEhqdkZGVHRyVVJtTmFHSnNtVmFoSW1qVHNVWEt0UVpUQVZzN012djgvK2Z6VXJaQVhjTEo2TTRrb2U2WFAwYjZTbVdXTkR6eVVwUThibCtMdFd4NHR1cVozNmNSWVYzeXVWeFBOd3ZJaXFpUUNTbXU3c3JnVHpSNm5reWhwQ2FyWHdGeTF2R2Q1aVAyY1kwNmxGcjVOamhoZzFZNitOQjI4ZnRiSzgzczhyZjdrTEpiS3dERlBiTGcyNWEwQWRaSkVpcXI1cGhpeEtNRGxSVXRjc3NxMWhyaUxxR29IK3plTmdWbTlPZW1qc0VUVjhKZEYwTkhua0lGeFdZMU9CNFlycDdydFdKN05nQUFBUFhrbEVRVlEzb05zNW5wbHlWZjh1MkZvTHUxSnJIdmVhWldRanFBa3NodEZhMmd6c1NHM1pwa2J2ZzNIYWZGOXNsUFBsbGRqRmxLODBHeXNtOE1yNE1QaG5lTldFTlBHakFJcG1pbFRQQVRkVFJUWGxDQllIWUFRdVB3QTM2eElwV3RHTjRxM1kyTWhpR3NVcHVTU25sRUpSRDhQb3JDN0NGWVZ3K0Y1MXFUaGdhYnhzVHhXekNHWTBaU3NiM2xmcUF5ME9QTmpOeTh4aVFRS3NIWUZRMkhCWlZ2VmJCdXEzbTFvV0thanFhb25zTTZ1WlVyNkNqWFdOWjBsNUUzaDNqVVJtYTZrUDNNSklpeTFMbStrYWhRcTQxTjJpWmphNXNqdGxMWU5aSFpySDZxVUdtNHZNYkRwNlJ3MkNGbXZ1eUZrckJjQ3lNdEZxQmFFQ21zSG9LOUJaMkxBL2xKY1JxU2FEcW5hV2JyWmRHYXozRExnSXZCbG40d29HenRieUpHcXNsd3hraGhIclRqVFlGWEN0T29LUzh1TGRvZlZkQWJPeWxHVTZubFlwWFdadHM0blhCcTZXeEppdE1Ob2tIVUpuYm5KcGxRbSthR3BZMmE1R01WMlFEMWhSdWJCUEZLZHVtZjVPSGtMSHowRjlsdUU1a2pCalJhMG5GRTVDVUdxSHczMk1talo2eGtnSU5WblNuWjFWWlN0SzJxS2xSYUxsUWdLN3VUcTdKRlhKd00rM1NPRUt5aFpOSSt0SjBJNXFNWXk5azJxSkQ3ZFZXZHFLWGEwQ0tOUjBDY2pnK0IySVl1MmZjQlpKWmtNRmdNMTFyMFg5MndpbGdoRkdnelZuZXhscUI3eEw5bVMyOVNpWVVWWTJuWE9aak5CUnN5RHNRUFJXVzVoclo0WGNkQzRIVldSYmpnSnI0c0ZvZks1U3pqUTdyaEkxVWViZFBkRWJqNnNxSXZUWlFaNXZhMDhyQUJzQVcwVXhlV3l0QWs3QTJLSjlacHh6Q2lvQjI0WEZ0WUFlWFl4cjZhblNxaExncHBFcVdiR3dMdW5UZ3JWK0lqV2xMMjlsamFBbDRFUU1Hc0VycDRhcGVaaXF1d1JYTFhBcU9DZXJ1MzJtbXlkYzZvV1RTV3BGQUdkemVUQjhSVEhWTUV0bE05MENiYlFDWWhQanEzZWdZcjFGR2RZSVFqaXVER1o1elovQXpvYktHT3lMeHRpNmM0Und0djJhbnlXbExJQ25sTGh4SlJYdDZBNWViREJXRk5PTmJ4V1oyZDAybW51NFM5WUVDcGVwcFYxelNXUkJXeEhZelZJdjFDWFNvdXdxcVgzakJCQkRaZFlRYnBUUVc0WlFsUzhyNWtINHN1U1JtZzIrKzNKTjEweDFQYUFtRWttdFlsRWRlR3BKRU02a091Q3FDUjIyb1N1amo1SVYySGRUMHpqNXByTEtUalhGQVBqZFFseXE3eElCeEFRUDV5TWN6RzRWeEFLdzBuNmlsWjJRQmNlMnBMdWxrdXh4cW5vSXpGZmdxeXFqaWw5UzFWTndCckZtZXllb3BzOHlPalpVeWJaZGZTOEN1YVRJSnVtenM1dE9EYU50THBGRFEvUGNKR3dlTGhtZUwxbkIwS3FpVURTY3NpVVZEODlEaTNIdHJLdFNVTHczUkxpeWdaRCs3c0Y4SlRPYmdZc3JHdkROVUZSR2wxaXkwTGwxWWtVYzJhSllNb2c5MjBJOHFXNllEQ2cxTXFrMEpISkZLWGtiZ2JScmVJK3FwWU5PWkhyVmNEVWJhN3Bqc3BoU0pOdEs2dXBnUk5BVm9PUzBtdWdCZU40YklaZ0hodVBaL3MxRU5hWDZLc1ZyK1lOcmgxTmI3aXBSMFBFNXpiTlJlZ0NickhSVXc2WWYwN2RMQkpsMWY4S0I5YXMyVjFuTnFBc2w2MkxCQmhlaHdhbGVya0htQjFKRklFWktTRXVzZGw1SlFqMW5KbEhYU0NGMzQyZ0o5Q1lHclhlbGtuSklYcVZQOHNEK3F0cGxDUjNYSDJxZktxMHlnTXArS25Wa0t4TmxaOG0yWWtJbFZNaUNuWFV3bDdxem5CS1N2UXozbTNQdDZvUWJYTzViNUZpeENoL2ZIeFVRVy9BRWNLNnpDTnFLUW5MOXN5d3FtS3V3dnFTWXpUL2FQVk5OcFZ5aHZSVzIxYXFjaUNzamRXdkJ3SUxVdmg1VnlDemJXb0MxcEpqSjY4MENXc2wrdWRLQjZUNVJ3RzFtbG9obmxwYmc0N2l6NVU5aGEwRkd0bVJMRllCdE85OXk5N0FwMHorWkRUQW9nNmtTTFpzTUhnL0lGa2tncDZDcHZVMlUwY1lWU2RubWtqd0JkT21YYnhUV05XenVJYmlwTWlvVnhFY2taRW9haFNPaXkyTTNLMGpjQzFMaFZEd2FxRzBadmtjV3FDbnJHNEdJeHlrcnFsYldkdzZMUXlCYVpSOEhtTFJJaFFXc0hzd0Q0MlpYVkxOa2Y5bCtGbFcwSFZRMmx3RnNDL1oxRmR6bFFSMEthUGZvK0ZkZnUrL2R3VlJJQ3UxQ0dSN0FFSWlBaGMrQVpVRjBrT0JhUHhtVXFnNGk2NHZRblU0bkZEWUo5TnorMWZWWHZlSDlxbXIra1BJTHg4b0tjUlYvQkZieGJFMEpNVDBrU0Q0dzZML2xOWThvY3NxYWdWZFUzQTNNanhoeGNHdXF6c1BINGlycGFvdzFxNk95clZqdnA5TnBjNTlFOTFMbGRib1lWekpXZGltV2ZBVzJTTkVLY0RhWDJGbUJMTEEvdUt4bG1oaDYxM0lzMVVSUUFwYktmdHR3eEwwMnE2T254NXBReFNiUG9qQWcrdjVoQW5ONkxIVlJEWElzdkt0UmppUzBxSlV5WlRBWFZiQUs4MkVsRkpXYVFkVm9xVUMxVW50N0JWYVRRdWRNNlN1cWV4alFKTjQrMGljYXh2L3V0Ykt2ODNFVGJUOEg4Z2pjT0t4T0ptYlVhNk9PVlhodDNkRlk2ckh2OVhvTnpGTGNlRUExbzgrcEttMExBSFBIWjJyWUtqRnEwaGZaRml4c3FISmdEM2VENW4rVTBrYjFtRmpYa24ybHZNU1NPc05FL0NkSUFLRjBTeXRxNnVyT0hVTjVnd2c0R1pvc2dibWdnTTV1Y3JhMnFyUzJJZzFjYmlCQmN4WXpnelVETkxDdkw4R2JaWE5wNk9SeTNMbVMrS2s4M3pSSUFLNkExaW9LYTJJOU5hcEl1aVVGZGZDOTc2NlBGWlV0cVVyNktiV2srelpVMWEvWnJJWEV6dHJqVE9mejdod0t6aUNlWElhcmFIdGJaSU16KzJwR2dhekNtdzRxV0FGdkVkaG9kWXAwWHEwcFY3RzFZV1lXYk80cWhHcTQyK1o4Qll0ckxXdmx1TlBwWkFlYUZGUzF2dWJQZ2JneHNxY3BuQWFzekJvdkthRm9EUThCR3RqZlVPbDROQUcybm1RVjA0ZmVKZ3VtdlgyZnNyUUVXWmdoTDBKblZkWWtuM0RPWkllUk44NlJxUFdDbXN2R1ZxRU1Sbnd4UUF4d1M4RU1ZbzNJem1ZMitCQ2NMcDRNS2l1eXVoSW1hbWxiWkZjTm9ObDd0cCtSSGQxOFpqUUlSS3lYZEZSaE45OC9oeUtxd1hXTm83TzF3aWFYb0hOMTA4UkVaWldFcTZncm5JZmp6ZWc4amRSZjFYRUw0a2tYYTViQmpLeG9LYWxqQmplSGxWeFE0R2F5Y3BXNGxET0FLdG5UeEhBdE9mek90WndIQU03c3FWWGtWNnl1NmthcDFuSGtYS3FXRi80WEhxamVuTktxQmpwUjNsMWNoM0VqZzErRXNnZFFoc2RHMEI0Rk05c1dBVldwdUF5aXdUUGxlWnh0OVZ5WlZTMnFYZlJlV3FUQWlscHI5QXBvV1RqeHltaXQ3TndWNEpUcmlaeU9BOUIwazdIRmZVTG91cm1LWUhWblJRdnFHTDVITUhkcUZjUjJxV3BtY0s2ZVR3eDJkaXBXcnZpRGlscitmS1dxM09XUldkSEt3QTRldTh3amNoYmVSekZpbHFqalpOM3VmQ3Bma0owL3NjVnBuWWs2TDBQSTc3bHhkV0NaODdXaVdtN0IvQUdxdVFTbnVqR0tzQjhDSm1pSnE4cTFwS0lWV3lxT2lUSzY2cjE4Qk44cjc0L0FFNzFmZEMzeVBTMk14ZE9wbkUxdGxWeEQ5Sm1WT29nZ04rcjRQakFYVkZQYTNFZzVqVkpHRlZVR05vbEgyMEdWclVCN0JPeVNXcTZXcVlRZFdSOTJwY0ZNWU13Y2tiU2dDS0NxRDY3RGlpV3UxZzhNUUM5QnlmY0ZxVzFMK2pMNzE0cU5DdXpub1N4dDBkYTJndFdOMUc4RjBCSzBOTjBudWltZWxVRjlkSWRBZmpPNDRVVDNDalFMb1VlTEhKRlRPM2dtcFJ1SUlPdndCUUNicU5lbzNxdFo5aUY2eFZLMTNHUmxvNHpxaW1xK0NHZFRpUjF1Ulk4b3FnRTAyaFpCYTc5a1pYUE1xdXhSSEtsYTJzYVpXTjRtUnFaVWowdkxDS2hraktucU9RSE51U1pWSm9LdkFxUzF3cEVxdXZXREMxQjJ5cHdyQ1BzUk1FUFZUT0RNTEpNRHY2cWVLWHdpMkpZVjVTcTRxS3l2Z0dzSENMaXVqMmpSNTlWOGdNcVNKMkZKWlJYRUhWUkhqM3NGUHJjdDZPcHFsVzFHcGF0UWR0MEd2d2ZNNm42M0luc0dWRmhKR2FCcWdxcUlWNklzWGxsWmd5U1BxNFIzYm50M3dpNWN2K2NOMnlxUUxXMVQ5NUtZVnNXV3RLazRjQjlXNTNXUVFmbFFZUjZXbDRIYUpaanZWRTBENXl2cStSS2daQ3M1cWRCRVA1c0Q5NGNBdlFMbFNnTmFTTUF0SHg4OEJ1TlE0MXpkRnNYMzB6S2JjczBNTEQvaWhrcFF6bDB3aVRxS0xUZmJLbUNteVlJQ25LMEliYWllQzRDRzlpU3lMUTdjSU1HUXdhdTZUS29xNjBBcGwzV040MExacGNhMUNLS0s5VlF5eUlFbjh3MEY4RjZDTDJoOG8zaXhHd0M3czdFV3pDT3FtY0FwWXhZRDRqc0F6VlMwc2wydDk4cEE3dnJLb3BoQ1ZTb25iWXBnSDZtdlNuMjRwVEJWNHNkdFYzQnRNcTVrODJ5K0lBRHZVSjB1QWxrQ1ZUeElhUG0rVU51L3FrVjRGMVR6SFhDR3JYSUFxSXRCS3lwcUs5OVZ0QU9WczY0TzRPYlg3cEhMVkNwWUhjUm13dkxSN1R2WUFLQkJONThMR1Z6RHVGeitoUWJXZ25jUXlDWkFrK1Zic1BTb3VmOTMyNjFpWmdtZkNwd1JiQXZxbVNxcmlVMlB3aGphb095WXF0SWVnVlhWaVRzbXl0YTZiR3lTcFkzZ3lScnBJeUFlYVdERHh0cHNYd0t5YWxNREtOUDdZQlhNcUVza1VzaTJ1QzhGTkFQeEFLVFZmVDFvNlZ6TTBFMGpGKzFyV2NVdUh2ZHlnN3Znb0ZwbFg4SHB2SHBNQ09NUlVQSHpaa0luc3FsRktOWC9FSU81MkUwU3hTek93b2IyVm1STFc1RDFYSVUwcmJnTTFBeldneUM3ZmU4Rzd4VUFLL3RhRUJhdDdsdXF0eVA3RW1zYUpRT2o1Rittcm5aZkN1WUNmQlVBV3dTaHlkNnBNWS92QUhHMVVxT1lwYkkvZ3k1VDBDTUttK1VPM2dGdUM4NWRnZkRWZWd1UERmSVRySUJMc0xyY2dkaDNDRmdGWmphS0o0SXYzRjhBTkVxdnV4UjF0VktPZ0xvQ2Exanhib0JBa2o2djdqL2ljRmJBN2Y0cmZSblFETFJWaUcxM2kwdnFCUXJZVnFCYkFEWlQwWnBpSG9TenZRcG9wS0lGUzNzRTFIZkJXbEhYZDBIN0xuQXJxdm91Z010bGpIQmdabmgzRW96L0JLakxNTDRaMkFxMCtoRUpyOWphVlVCYnZOekNJVWlyb0M3QVdtbUZ3NG81QUszTXRCNVZ5cFpNU0ZnczA1SnlHVndsd0Jxc0VHQUFhMlpVMUNqVWV4WEdzRTRyS3JpaWxCdkZ6T0tLbzNBdUFyb0U2UUZRVTN1OFlwTlh3UzVrKzFUWnQ1VXJ3b3VONEtpVUV3K2szWldEcDFSWEhOUnFYYjIxVHMzOTk0NXlaU2czVm5aRk5ROUNGM1hlWnlyNURnQlhLaXdDTWEyTXhlVERZWGdQMUZzZjlRTktaYzBrODFSSmszcjZFUTNyQ21CVnlMTDc1RWpaMXBJVkRIb0Z0aU9BSG9CMEJkVFZ5bHFCc0tLS1MrQWVCWEpWTFkrQ1hBU3VHdk8vQXVxN0d1RWpEZkdLZzFvS2Exei9kbW1pOUk5U1VHTmhsMEF0ZnVsSEFhd29Zcm5Ta21OWEFWdUdFaHJFVlh2VUYrQTVDdDJQcU5PakRldHluYTRDbWVVb2xtZVhMTjRBcTdDNVNqMTBRN3lqZ2wrdDZDTnhTUkhtSTVYK0Nwd3JlWUIzUWZkcW5hNHEyMUtkQnVjNEdvWnNuNDlaT09pVmlud0hxSzlXemp2Z2V3ZUVoMkFVNSt2dHhaOUNkOVdxa2g0OVYxOEU1b2o2dlZ5bjBSU3RBeUdJTzVlZFhSS2Q1QjBWR1ZYcTJ5cjN4WXArNVV0K0M0UUo0UDFOMzM5cFFNalJlamo0dmIvRGNyNnJRYzNPLzByam10WnBlWUNCaUNIZkNlbVJiTmhiSy9wTlVQYzN3Zkt5NWYyRDdPbEwzL3VQaHZlL29VNFQwRjhmK1ZOTTJ2eW9pdjBqSytLSFFmZEhxKzBibmN6NG96NzMvK1k2TGJLdzFvLzVCN2VPZjFSbC8wZHU5Qjl0bi85YnZyZi9qK3YwaDZ0dG4ydHAvci80ODE5eTQvenY1MzkxdXZ6emZ3RGlmejZwaFQxTVBnQUFBQUJKUlU1RXJrSmdnZz09Iik7YmFja2dyb3VuZC1zaXplOjEwMCUgMTAwJTtib3JkZXI6bm9uZTtjdXJzb3I6cG9pbnRlcjtkaXJlY3Rpb246bHRyO2hlaWdodDoxMzBweDt0b3VjaC1hY3Rpb246bWFuaXB1bGF0aW9uO3dpZHRoOjEwMCV9LmNvbG9yLXBpY2tlciAuY3AtYWRkLWNvbG9yLWJ1dHRvbi1jbGFzc3tiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjowO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6aW5saW5lO21hcmdpbjozcHggLTNweDtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGV9LmNvbG9yLXBpY2tlciAuY3AtYWRkLWNvbG9yLWJ1dHRvbi1jbGFzczpob3Zlcnt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfS5jb2xvci1waWNrZXIgLmNwLWFkZC1jb2xvci1idXR0b24tY2xhc3M6ZGlzYWJsZWR7Y29sb3I6Izk5OTtjdXJzb3I6bm90LWFsbG93ZWR9LmNvbG9yLXBpY2tlciAuY3AtYWRkLWNvbG9yLWJ1dHRvbi1jbGFzczpkaXNhYmxlZDpob3Zlcnt0ZXh0LWRlY29yYXRpb246bm9uZX0uY29sb3ItcGlja2VyIC5jcC1yZW1vdmUtY29sb3ItYnV0dG9uLWNsYXNze2JhY2tncm91bmQ6I2ZmZjtib3JkZXItcmFkaXVzOjUwJTtib3gtc2hhZG93OjFweCAxcHggNXB4ICMzMzM7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MTBweDtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDotNXB4O3RleHQtYWxpZ246Y2VudGVyO3RvcDotNXB4O3dpZHRoOjEwcHh9LmNvbG9yLXBpY2tlciAuY3AtcmVtb3ZlLWNvbG9yLWJ1dHRvbi1jbGFzczpiZWZvcmV7Ym90dG9tOjMuNXB4O2NvbnRlbnQ6IngiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZToxMHB4O3Bvc2l0aW9uOnJlbGF0aXZlfSddfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Y2h9LHt0eXBlOkhofSx7dHlwZTpUM31dfSkse2hhbmRsZUVzYzpbe3R5cGU6TV8sYXJnczpbImRvY3VtZW50OmtleXVwLmVzYyIsWyIkZXZlbnQiXV19XSxoYW5kbGVFbnRlcjpbe3R5cGU6TV8sYXJnczpbImRvY3VtZW50OmtleXVwLmVudGVyIixbIiRldmVudCJdXX1dLGRpYWxvZ0VsZW1lbnQ6W3t0eXBlOkZyLGFyZ3M6WyJkaWFsb2dQb3B1cCIse3N0YXRpYzohMH1dfV0saHVlU2xpZGVyOlt7dHlwZTpGcixhcmdzOlsiaHVlU2xpZGVyIix7c3RhdGljOiEwfV19XSxhbHBoYVNsaWRlcjpbe3R5cGU6RnIsYXJnczpbImFscGhhU2xpZGVyIix7c3RhdGljOiEwfV19XX0pO2NsYXNzIEkze2NvbnN0cnVjdG9yKHQsZSxuLG8saSxhKXt0aGlzLmluamVjdG9yPXQsdGhpcy5jZnI9ZSx0aGlzLmFwcFJlZj1uLHRoaXMudmNSZWY9byx0aGlzLmVsUmVmPWksdGhpcy5fc2VydmljZT1hLHRoaXMuZGlhbG9nQ3JlYXRlZD0hMSx0aGlzLmlnbm9yZUNoYW5nZXM9ITEsdGhpcy52aWV3QXR0YWNoZWRUb0FwcFJlZj0hMSx0aGlzLmNwV2lkdGg9IjIzMHB4Iix0aGlzLmNwSGVpZ2h0PSJhdXRvIix0aGlzLmNwVG9nZ2xlPSExLHRoaXMuY3BEaXNhYmxlZD0hMSx0aGlzLmNwSWdub3JlZEVsZW1lbnRzPVtdLHRoaXMuY3BGYWxsYmFja0NvbG9yPSIiLHRoaXMuY3BDb2xvck1vZGU9ImNvbG9yIix0aGlzLmNwQ215a0VuYWJsZWQ9ITEsdGhpcy5jcE91dHB1dEZvcm1hdD0iYXV0byIsdGhpcy5jcEFscGhhQ2hhbm5lbD0iZW5hYmxlZCIsdGhpcy5jcERpc2FibGVJbnB1dD0hMSx0aGlzLmNwRGlhbG9nRGlzcGxheT0icG9wdXAiLHRoaXMuY3BTYXZlQ2xpY2tPdXRzaWRlPSEwLHRoaXMuY3BDbG9zZUNsaWNrT3V0c2lkZT0hMCx0aGlzLmNwVXNlUm9vdFZpZXdDb250YWluZXI9ITEsdGhpcy5jcFBvc2l0aW9uPSJhdXRvIix0aGlzLmNwUG9zaXRpb25PZmZzZXQ9IjAlIix0aGlzLmNwUG9zaXRpb25SZWxhdGl2ZVRvQXJyb3c9ITEsdGhpcy5jcE9LQnV0dG9uPSExLHRoaXMuY3BPS0J1dHRvblRleHQ9Ik9LIix0aGlzLmNwT0tCdXR0b25DbGFzcz0iY3Atb2stYnV0dG9uLWNsYXNzIix0aGlzLmNwQ2FuY2VsQnV0dG9uPSExLHRoaXMuY3BDYW5jZWxCdXR0b25UZXh0PSJDYW5jZWwiLHRoaXMuY3BDYW5jZWxCdXR0b25DbGFzcz0iY3AtY2FuY2VsLWJ1dHRvbi1jbGFzcyIsdGhpcy5jcFByZXNldExhYmVsPSJQcmVzZXQgY29sb3JzIix0aGlzLmNwUHJlc2V0Q29sb3JzQ2xhc3M9ImNwLXByZXNldC1jb2xvcnMtY2xhc3MiLHRoaXMuY3BNYXhQcmVzZXRDb2xvcnNMZW5ndGg9Nix0aGlzLmNwUHJlc2V0RW1wdHlNZXNzYWdlPSJObyBjb2xvcnMgYWRkZWQiLHRoaXMuY3BQcmVzZXRFbXB0eU1lc3NhZ2VDbGFzcz0icHJlc2V0LWVtcHR5LW1lc3NhZ2UiLHRoaXMuY3BBZGRDb2xvckJ1dHRvbj0hMSx0aGlzLmNwQWRkQ29sb3JCdXR0b25UZXh0PSJBZGQgY29sb3IiLHRoaXMuY3BBZGRDb2xvckJ1dHRvbkNsYXNzPSJjcC1hZGQtY29sb3ItYnV0dG9uLWNsYXNzIix0aGlzLmNwUmVtb3ZlQ29sb3JCdXR0b25DbGFzcz0iY3AtcmVtb3ZlLWNvbG9yLWJ1dHRvbi1jbGFzcyIsdGhpcy5jcElucHV0Q2hhbmdlPW5ldyBBYighMCksdGhpcy5jcFRvZ2dsZUNoYW5nZT1uZXcgQWIoITApLHRoaXMuY3BTbGlkZXJDaGFuZ2U9bmV3IEFiKCEwKSx0aGlzLmNwU2xpZGVyRHJhZ0VuZD1uZXcgQWIoITApLHRoaXMuY3BTbGlkZXJEcmFnU3RhcnQ9bmV3IEFiKCEwKSx0aGlzLmNvbG9yUGlja2VyT3Blbj1uZXcgQWIoITApLHRoaXMuY29sb3JQaWNrZXJDbG9zZT1uZXcgQWIoITApLHRoaXMuY29sb3JQaWNrZXJDYW5jZWw9bmV3IEFiKCEwKSx0aGlzLmNvbG9yUGlja2VyU2VsZWN0PW5ldyBBYighMCksdGhpcy5jb2xvclBpY2tlckNoYW5nZT1uZXcgQWIoITEpLHRoaXMuY3BDbXlrQ29sb3JDaGFuZ2U9bmV3IEFiKCEwKSx0aGlzLmNwUHJlc2V0Q29sb3JzQ2hhbmdlPW5ldyBBYighMCl9aGFuZGxlQ2xpY2soKXt0aGlzLmlucHV0Rm9jdXMoKX1oYW5kbGVGb2N1cygpe3RoaXMuaW5wdXRGb2N1cygpfWhhbmRsZUlucHV0KHQpe3RoaXMuaW5wdXRDaGFuZ2UodCl9bmdPbkRlc3Ryb3koKXtudWxsIT10aGlzLmNtcFJlZiYmKHRoaXMudmlld0F0dGFjaGVkVG9BcHBSZWYmJnRoaXMuYXBwUmVmLmRldGFjaFZpZXcodGhpcy5jbXBSZWYuaG9zdFZpZXcpLHRoaXMuY21wUmVmLmRlc3Ryb3koKSx0aGlzLmNtcFJlZj1udWxsLHRoaXMuZGlhbG9nPW51bGwpfW5nT25DaGFuZ2VzKHQpe3QuY3BUb2dnbGUmJiF0aGlzLmNwRGlzYWJsZWQmJih0LmNwVG9nZ2xlLmN1cnJlbnRWYWx1ZT90aGlzLm9wZW5EaWFsb2coKTp0LmNwVG9nZ2xlLmN1cnJlbnRWYWx1ZXx8dGhpcy5jbG9zZURpYWxvZygpKSx0LmNvbG9yUGlja2VyJiYodGhpcy5kaWFsb2cmJiF0aGlzLmlnbm9yZUNoYW5nZXMmJigiaW5saW5lIj09PXRoaXMuY3BEaWFsb2dEaXNwbGF5JiZ0aGlzLmRpYWxvZy5zZXRJbml0aWFsQ29sb3IodC5jb2xvclBpY2tlci5jdXJyZW50VmFsdWUpLHRoaXMuZGlhbG9nLnNldENvbG9yRnJvbVN0cmluZyh0LmNvbG9yUGlja2VyLmN1cnJlbnRWYWx1ZSwhMSksdGhpcy5jcFVzZVJvb3RWaWV3Q29udGFpbmVyJiYiaW5saW5lIiE9PXRoaXMuY3BEaWFsb2dEaXNwbGF5JiZ0aGlzLmNtcFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCkpLHRoaXMuaWdub3JlQ2hhbmdlcz0hMSksKHQuY3BQcmVzZXRMYWJlbHx8dC5jcFByZXNldENvbG9ycykmJnRoaXMuZGlhbG9nJiZ0aGlzLmRpYWxvZy5zZXRQcmVzZXRDb25maWcodGhpcy5jcFByZXNldExhYmVsLHRoaXMuY3BQcmVzZXRDb2xvcnMpfW9wZW5EaWFsb2coKXtpZih0aGlzLmRpYWxvZ0NyZWF0ZWQpdGhpcy5kaWFsb2cmJnRoaXMuZGlhbG9nLm9wZW5EaWFsb2codGhpcy5jb2xvclBpY2tlcik7ZWxzZXtsZXQgdD10aGlzLnZjUmVmO2lmKHRoaXMuZGlhbG9nQ3JlYXRlZD0hMCx0aGlzLnZpZXdBdHRhY2hlZFRvQXBwUmVmPSExLHRoaXMuY3BVc2VSb290Vmlld0NvbnRhaW5lciYmImlubGluZSIhPT10aGlzLmNwRGlhbG9nRGlzcGxheSl7Y29uc3QgZT10aGlzLmluamVjdG9yLmdldCh0aGlzLmFwcFJlZi5jb21wb25lbnRUeXBlc1swXSxRcC5OVUxMKTtlIT09UXAuTlVMTD8odD1lLnZjUmVmfHxlLnZpZXdDb250YWluZXJSZWZ8fHRoaXMudmNSZWYsdD09PXRoaXMudmNSZWYmJmNvbnNvbGUud2FybigiWW91IGFyZSB1c2luZyBjcFVzZVJvb3RWaWV3Q29udGFpbmVyLCBidXQgdGhlIHJvb3QgY29tcG9uZW50IGlzIG5vdCBleHBvc2luZyB2aWV3Q29udGFpbmVyUmVmIVBsZWFzZSBleHBvc2UgaXQgYnkgYWRkaW5nICdwdWJsaWMgdmNSZWY6IFZpZXdDb250YWluZXJSZWYnIHRvIHRoZSBjb25zdHJ1Y3Rvci4iKSk6dGhpcy52aWV3QXR0YWNoZWRUb0FwcFJlZj0hMH1jb25zdCBlPXRoaXMuY2ZyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KE4zKTtpZih0aGlzLnZpZXdBdHRhY2hlZFRvQXBwUmVmKXRoaXMuY21wUmVmPWUuY3JlYXRlKHRoaXMuaW5qZWN0b3IpLHRoaXMuYXBwUmVmLmF0dGFjaFZpZXcodGhpcy5jbXBSZWYuaG9zdFZpZXcpLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5jbXBSZWYuaG9zdFZpZXcucm9vdE5vZGVzWzBdKTtlbHNle2NvbnN0IG49X3UuZnJvbVJlc29sdmVkUHJvdmlkZXJzKFtdLHQucGFyZW50SW5qZWN0b3IpO3RoaXMuY21wUmVmPXQuY3JlYXRlQ29tcG9uZW50KGUsMCxuLFtdKX10aGlzLmNtcFJlZi5pbnN0YW5jZS5zZXR1cERpYWxvZyh0aGlzLHRoaXMuZWxSZWYsdGhpcy5jb2xvclBpY2tlcix0aGlzLmNwV2lkdGgsdGhpcy5jcEhlaWdodCx0aGlzLmNwRGlhbG9nRGlzcGxheSx0aGlzLmNwRmFsbGJhY2tDb2xvcix0aGlzLmNwQ29sb3JNb2RlLHRoaXMuY3BDbXlrRW5hYmxlZCx0aGlzLmNwQWxwaGFDaGFubmVsLHRoaXMuY3BPdXRwdXRGb3JtYXQsdGhpcy5jcERpc2FibGVJbnB1dCx0aGlzLmNwSWdub3JlZEVsZW1lbnRzLHRoaXMuY3BTYXZlQ2xpY2tPdXRzaWRlLHRoaXMuY3BDbG9zZUNsaWNrT3V0c2lkZSx0aGlzLmNwVXNlUm9vdFZpZXdDb250YWluZXIsdGhpcy5jcFBvc2l0aW9uLHRoaXMuY3BQb3NpdGlvbk9mZnNldCx0aGlzLmNwUG9zaXRpb25SZWxhdGl2ZVRvQXJyb3csdGhpcy5jcFByZXNldExhYmVsLHRoaXMuY3BQcmVzZXRDb2xvcnMsdGhpcy5jcFByZXNldENvbG9yc0NsYXNzLHRoaXMuY3BNYXhQcmVzZXRDb2xvcnNMZW5ndGgsdGhpcy5jcFByZXNldEVtcHR5TWVzc2FnZSx0aGlzLmNwUHJlc2V0RW1wdHlNZXNzYWdlQ2xhc3MsdGhpcy5jcE9LQnV0dG9uLHRoaXMuY3BPS0J1dHRvbkNsYXNzLHRoaXMuY3BPS0J1dHRvblRleHQsdGhpcy5jcENhbmNlbEJ1dHRvbix0aGlzLmNwQ2FuY2VsQnV0dG9uQ2xhc3MsdGhpcy5jcENhbmNlbEJ1dHRvblRleHQsdGhpcy5jcEFkZENvbG9yQnV0dG9uLHRoaXMuY3BBZGRDb2xvckJ1dHRvbkNsYXNzLHRoaXMuY3BBZGRDb2xvckJ1dHRvblRleHQsdGhpcy5jcFJlbW92ZUNvbG9yQnV0dG9uQ2xhc3MpLHRoaXMuZGlhbG9nPXRoaXMuY21wUmVmLmluc3RhbmNlLHRoaXMudmNSZWYhPT10JiZ0aGlzLmNtcFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCl9fWNsb3NlRGlhbG9nKCl7dGhpcy5kaWFsb2cmJiJwb3B1cCI9PT10aGlzLmNwRGlhbG9nRGlzcGxheSYmdGhpcy5kaWFsb2cuY2xvc2VEaWFsb2coKX1jbXlrQ2hhbmdlZCh0KXt0aGlzLmNwQ215a0NvbG9yQ2hhbmdlLmVtaXQodCl9c3RhdGVDaGFuZ2VkKHQpe3RoaXMuY3BUb2dnbGVDaGFuZ2UuZW1pdCh0KSx0P3RoaXMuY29sb3JQaWNrZXJPcGVuLmVtaXQodGhpcy5jb2xvclBpY2tlcik6dGhpcy5jb2xvclBpY2tlckNsb3NlLmVtaXQodGhpcy5jb2xvclBpY2tlcil9Y29sb3JDaGFuZ2VkKHQsZT0hMCl7dGhpcy5pZ25vcmVDaGFuZ2VzPWUsdGhpcy5jb2xvclBpY2tlckNoYW5nZS5lbWl0KHQpfWNvbG9yU2VsZWN0ZWQodCl7dGhpcy5jb2xvclBpY2tlclNlbGVjdC5lbWl0KHQpfWNvbG9yQ2FuY2VsZWQoKXt0aGlzLmNvbG9yUGlja2VyQ2FuY2VsLmVtaXQoKX1pbnB1dEZvY3VzKCl7Y29uc3QgdD10aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsZT10aGlzLmNwSWdub3JlZEVsZW1lbnRzLmZpbHRlcigoZT0+ZT09PXQpKTt0aGlzLmNwRGlzYWJsZWR8fGUubGVuZ3RofHwoInVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudCYmdD09PWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ/dGhpcy5vcGVuRGlhbG9nKCk6dGhpcy5kaWFsb2cmJnRoaXMuZGlhbG9nLnNob3c/dGhpcy5jbG9zZURpYWxvZygpOnRoaXMub3BlbkRpYWxvZygpKX1pbnB1dENoYW5nZSh0KXt0aGlzLmRpYWxvZz90aGlzLmRpYWxvZy5zZXRDb2xvckZyb21TdHJpbmcodC50YXJnZXQudmFsdWUsITApOih0aGlzLmNvbG9yUGlja2VyPXQudGFyZ2V0LnZhbHVlLHRoaXMuY29sb3JQaWNrZXJDaGFuZ2UuZW1pdCh0aGlzLmNvbG9yUGlja2VyKSl9aW5wdXRDaGFuZ2VkKHQpe3RoaXMuY3BJbnB1dENoYW5nZS5lbWl0KHQpfXNsaWRlckNoYW5nZWQodCl7dGhpcy5jcFNsaWRlckNoYW5nZS5lbWl0KHQpfXNsaWRlckRyYWdFbmQodCl7dGhpcy5jcFNsaWRlckRyYWdFbmQuZW1pdCh0KX1zbGlkZXJEcmFnU3RhcnQodCl7dGhpcy5jcFNsaWRlckRyYWdTdGFydC5lbWl0KHQpfXByZXNldENvbG9yc0NoYW5nZWQodCl7dGhpcy5jcFByZXNldENvbG9yc0NoYW5nZS5lbWl0KHQpfX1JMy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8STMpKE11KFFwKSxNdShyaCksTXUoX0MpLE11KFhoKSxNdShjaCksTXUoVDMpKX0sSTMuybVkaXI9Sm8oe3R5cGU6STMsc2VsZWN0b3JzOltbIiIsImNvbG9yUGlja2VyIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MSZlJiZOdSgiY2xpY2siLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uaGFuZGxlQ2xpY2soKX0pKSgiZm9jdXMiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uaGFuZGxlRm9jdXMoKX0pKSgiaW5wdXQiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLmhhbmRsZUlucHV0KGUpfSkpfSxpbnB1dHM6e2NwV2lkdGg6ImNwV2lkdGgiLGNwSGVpZ2h0OiJjcEhlaWdodCIsY3BUb2dnbGU6ImNwVG9nZ2xlIixjcERpc2FibGVkOiJjcERpc2FibGVkIixjcElnbm9yZWRFbGVtZW50czoiY3BJZ25vcmVkRWxlbWVudHMiLGNwRmFsbGJhY2tDb2xvcjoiY3BGYWxsYmFja0NvbG9yIixjcENvbG9yTW9kZToiY3BDb2xvck1vZGUiLGNwQ215a0VuYWJsZWQ6ImNwQ215a0VuYWJsZWQiLGNwT3V0cHV0Rm9ybWF0OiJjcE91dHB1dEZvcm1hdCIsY3BBbHBoYUNoYW5uZWw6ImNwQWxwaGFDaGFubmVsIixjcERpc2FibGVJbnB1dDoiY3BEaXNhYmxlSW5wdXQiLGNwRGlhbG9nRGlzcGxheToiY3BEaWFsb2dEaXNwbGF5IixjcFNhdmVDbGlja091dHNpZGU6ImNwU2F2ZUNsaWNrT3V0c2lkZSIsY3BDbG9zZUNsaWNrT3V0c2lkZToiY3BDbG9zZUNsaWNrT3V0c2lkZSIsY3BVc2VSb290Vmlld0NvbnRhaW5lcjoiY3BVc2VSb290Vmlld0NvbnRhaW5lciIsY3BQb3NpdGlvbjoiY3BQb3NpdGlvbiIsY3BQb3NpdGlvbk9mZnNldDoiY3BQb3NpdGlvbk9mZnNldCIsY3BQb3NpdGlvblJlbGF0aXZlVG9BcnJvdzoiY3BQb3NpdGlvblJlbGF0aXZlVG9BcnJvdyIsY3BPS0J1dHRvbjoiY3BPS0J1dHRvbiIsY3BPS0J1dHRvblRleHQ6ImNwT0tCdXR0b25UZXh0IixjcE9LQnV0dG9uQ2xhc3M6ImNwT0tCdXR0b25DbGFzcyIsY3BDYW5jZWxCdXR0b246ImNwQ2FuY2VsQnV0dG9uIixjcENhbmNlbEJ1dHRvblRleHQ6ImNwQ2FuY2VsQnV0dG9uVGV4dCIsY3BDYW5jZWxCdXR0b25DbGFzczoiY3BDYW5jZWxCdXR0b25DbGFzcyIsY3BQcmVzZXRMYWJlbDoiY3BQcmVzZXRMYWJlbCIsY3BQcmVzZXRDb2xvcnNDbGFzczoiY3BQcmVzZXRDb2xvcnNDbGFzcyIsY3BNYXhQcmVzZXRDb2xvcnNMZW5ndGg6ImNwTWF4UHJlc2V0Q29sb3JzTGVuZ3RoIixjcFByZXNldEVtcHR5TWVzc2FnZToiY3BQcmVzZXRFbXB0eU1lc3NhZ2UiLGNwUHJlc2V0RW1wdHlNZXNzYWdlQ2xhc3M6ImNwUHJlc2V0RW1wdHlNZXNzYWdlQ2xhc3MiLGNwQWRkQ29sb3JCdXR0b246ImNwQWRkQ29sb3JCdXR0b24iLGNwQWRkQ29sb3JCdXR0b25UZXh0OiJjcEFkZENvbG9yQnV0dG9uVGV4dCIsY3BBZGRDb2xvckJ1dHRvbkNsYXNzOiJjcEFkZENvbG9yQnV0dG9uQ2xhc3MiLGNwUmVtb3ZlQ29sb3JCdXR0b25DbGFzczoiY3BSZW1vdmVDb2xvckJ1dHRvbkNsYXNzIixjb2xvclBpY2tlcjoiY29sb3JQaWNrZXIiLGNwUHJlc2V0Q29sb3JzOiJjcFByZXNldENvbG9ycyJ9LG91dHB1dHM6e2NwSW5wdXRDaGFuZ2U6ImNwSW5wdXRDaGFuZ2UiLGNwVG9nZ2xlQ2hhbmdlOiJjcFRvZ2dsZUNoYW5nZSIsY3BTbGlkZXJDaGFuZ2U6ImNwU2xpZGVyQ2hhbmdlIixjcFNsaWRlckRyYWdFbmQ6ImNwU2xpZGVyRHJhZ0VuZCIsY3BTbGlkZXJEcmFnU3RhcnQ6ImNwU2xpZGVyRHJhZ1N0YXJ0Iixjb2xvclBpY2tlck9wZW46ImNvbG9yUGlja2VyT3BlbiIsY29sb3JQaWNrZXJDbG9zZToiY29sb3JQaWNrZXJDbG9zZSIsY29sb3JQaWNrZXJDYW5jZWw6ImNvbG9yUGlja2VyQ2FuY2VsIixjb2xvclBpY2tlclNlbGVjdDoiY29sb3JQaWNrZXJTZWxlY3QiLGNvbG9yUGlja2VyQ2hhbmdlOiJjb2xvclBpY2tlckNoYW5nZSIsY3BDbXlrQ29sb3JDaGFuZ2U6ImNwQ215a0NvbG9yQ2hhbmdlIixjcFByZXNldENvbG9yc0NoYW5nZToiY3BQcmVzZXRDb2xvcnNDaGFuZ2UifSxleHBvcnRBczpbIm5neENvbG9yUGlja2VyIl0sZmVhdHVyZXM6W1NpXX0pLEkzLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6UXB9LHt0eXBlOnJofSx7dHlwZTpfQ30se3R5cGU6WGh9LHt0eXBlOmNofSx7dHlwZTpUM31dLEkzLnByb3BEZWNvcmF0b3JzPXtjb2xvclBpY2tlcjpbe3R5cGU6eV99XSxjcFdpZHRoOlt7dHlwZTp5X31dLGNwSGVpZ2h0Olt7dHlwZTp5X31dLGNwVG9nZ2xlOlt7dHlwZTp5X31dLGNwRGlzYWJsZWQ6W3t0eXBlOnlffV0sY3BJZ25vcmVkRWxlbWVudHM6W3t0eXBlOnlffV0sY3BGYWxsYmFja0NvbG9yOlt7dHlwZTp5X31dLGNwQ29sb3JNb2RlOlt7dHlwZTp5X31dLGNwQ215a0VuYWJsZWQ6W3t0eXBlOnlffV0sY3BPdXRwdXRGb3JtYXQ6W3t0eXBlOnlffV0sY3BBbHBoYUNoYW5uZWw6W3t0eXBlOnlffV0sY3BEaXNhYmxlSW5wdXQ6W3t0eXBlOnlffV0sY3BEaWFsb2dEaXNwbGF5Olt7dHlwZTp5X31dLGNwU2F2ZUNsaWNrT3V0c2lkZTpbe3R5cGU6eV99XSxjcENsb3NlQ2xpY2tPdXRzaWRlOlt7dHlwZTp5X31dLGNwVXNlUm9vdFZpZXdDb250YWluZXI6W3t0eXBlOnlffV0sY3BQb3NpdGlvbjpbe3R5cGU6eV99XSxjcFBvc2l0aW9uT2Zmc2V0Olt7dHlwZTp5X31dLGNwUG9zaXRpb25SZWxhdGl2ZVRvQXJyb3c6W3t0eXBlOnlffV0sY3BPS0J1dHRvbjpbe3R5cGU6eV99XSxjcE9LQnV0dG9uVGV4dDpbe3R5cGU6eV99XSxjcE9LQnV0dG9uQ2xhc3M6W3t0eXBlOnlffV0sY3BDYW5jZWxCdXR0b246W3t0eXBlOnlffV0sY3BDYW5jZWxCdXR0b25UZXh0Olt7dHlwZTp5X31dLGNwQ2FuY2VsQnV0dG9uQ2xhc3M6W3t0eXBlOnlffV0sY3BQcmVzZXRMYWJlbDpbe3R5cGU6eV99XSxjcFByZXNldENvbG9yczpbe3R5cGU6eV99XSxjcFByZXNldENvbG9yc0NsYXNzOlt7dHlwZTp5X31dLGNwTWF4UHJlc2V0Q29sb3JzTGVuZ3RoOlt7dHlwZTp5X31dLGNwUHJlc2V0RW1wdHlNZXNzYWdlOlt7dHlwZTp5X31dLGNwUHJlc2V0RW1wdHlNZXNzYWdlQ2xhc3M6W3t0eXBlOnlffV0sY3BBZGRDb2xvckJ1dHRvbjpbe3R5cGU6eV99XSxjcEFkZENvbG9yQnV0dG9uVGV4dDpbe3R5cGU6eV99XSxjcEFkZENvbG9yQnV0dG9uQ2xhc3M6W3t0eXBlOnlffV0sY3BSZW1vdmVDb2xvckJ1dHRvbkNsYXNzOlt7dHlwZTp5X31dLGNwSW5wdXRDaGFuZ2U6W3t0eXBlOl9ffV0sY3BUb2dnbGVDaGFuZ2U6W3t0eXBlOl9ffV0sY3BTbGlkZXJDaGFuZ2U6W3t0eXBlOl9ffV0sY3BTbGlkZXJEcmFnRW5kOlt7dHlwZTpfX31dLGNwU2xpZGVyRHJhZ1N0YXJ0Olt7dHlwZTpfX31dLGNvbG9yUGlja2VyT3Blbjpbe3R5cGU6X199XSxjb2xvclBpY2tlckNsb3NlOlt7dHlwZTpfX31dLGNvbG9yUGlja2VyQ2FuY2VsOlt7dHlwZTpfX31dLGNvbG9yUGlja2VyU2VsZWN0Olt7dHlwZTpfX31dLGNvbG9yUGlja2VyQ2hhbmdlOlt7dHlwZTpfX31dLGNwQ215a0NvbG9yQ2hhbmdlOlt7dHlwZTpfX31dLGNwUHJlc2V0Q29sb3JzQ2hhbmdlOlt7dHlwZTpfX31dLGhhbmRsZUNsaWNrOlt7dHlwZTpNXyxhcmdzOlsiY2xpY2siXX1dLGhhbmRsZUZvY3VzOlt7dHlwZTpNXyxhcmdzOlsiZm9jdXMiXX1dLGhhbmRsZUlucHV0Olt7dHlwZTpNXyxhcmdzOlsiaW5wdXQiLFsiJGV2ZW50Il1dfV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoSTMsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoiW2NvbG9yUGlja2VyXSIsZXhwb3J0QXM6Im5neENvbG9yUGlja2VyIn1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOlFwfSx7dHlwZTpyaH0se3R5cGU6X0N9LHt0eXBlOlhofSx7dHlwZTpjaH0se3R5cGU6VDN9XX0pLHtjcFdpZHRoOlt7dHlwZTp5X31dLGNwSGVpZ2h0Olt7dHlwZTp5X31dLGNwVG9nZ2xlOlt7dHlwZTp5X31dLGNwRGlzYWJsZWQ6W3t0eXBlOnlffV0sY3BJZ25vcmVkRWxlbWVudHM6W3t0eXBlOnlffV0sY3BGYWxsYmFja0NvbG9yOlt7dHlwZTp5X31dLGNwQ29sb3JNb2RlOlt7dHlwZTp5X31dLGNwQ215a0VuYWJsZWQ6W3t0eXBlOnlffV0sY3BPdXRwdXRGb3JtYXQ6W3t0eXBlOnlffV0sY3BBbHBoYUNoYW5uZWw6W3t0eXBlOnlffV0sY3BEaXNhYmxlSW5wdXQ6W3t0eXBlOnlffV0sY3BEaWFsb2dEaXNwbGF5Olt7dHlwZTp5X31dLGNwU2F2ZUNsaWNrT3V0c2lkZTpbe3R5cGU6eV99XSxjcENsb3NlQ2xpY2tPdXRzaWRlOlt7dHlwZTp5X31dLGNwVXNlUm9vdFZpZXdDb250YWluZXI6W3t0eXBlOnlffV0sY3BQb3NpdGlvbjpbe3R5cGU6eV99XSxjcFBvc2l0aW9uT2Zmc2V0Olt7dHlwZTp5X31dLGNwUG9zaXRpb25SZWxhdGl2ZVRvQXJyb3c6W3t0eXBlOnlffV0sY3BPS0J1dHRvbjpbe3R5cGU6eV99XSxjcE9LQnV0dG9uVGV4dDpbe3R5cGU6eV99XSxjcE9LQnV0dG9uQ2xhc3M6W3t0eXBlOnlffV0sY3BDYW5jZWxCdXR0b246W3t0eXBlOnlffV0sY3BDYW5jZWxCdXR0b25UZXh0Olt7dHlwZTp5X31dLGNwQ2FuY2VsQnV0dG9uQ2xhc3M6W3t0eXBlOnlffV0sY3BQcmVzZXRMYWJlbDpbe3R5cGU6eV99XSxjcFByZXNldENvbG9yc0NsYXNzOlt7dHlwZTp5X31dLGNwTWF4UHJlc2V0Q29sb3JzTGVuZ3RoOlt7dHlwZTp5X31dLGNwUHJlc2V0RW1wdHlNZXNzYWdlOlt7dHlwZTp5X31dLGNwUHJlc2V0RW1wdHlNZXNzYWdlQ2xhc3M6W3t0eXBlOnlffV0sY3BBZGRDb2xvckJ1dHRvbjpbe3R5cGU6eV99XSxjcEFkZENvbG9yQnV0dG9uVGV4dDpbe3R5cGU6eV99XSxjcEFkZENvbG9yQnV0dG9uQ2xhc3M6W3t0eXBlOnlffV0sY3BSZW1vdmVDb2xvckJ1dHRvbkNsYXNzOlt7dHlwZTp5X31dLGNwSW5wdXRDaGFuZ2U6W3t0eXBlOl9ffV0sY3BUb2dnbGVDaGFuZ2U6W3t0eXBlOl9ffV0sY3BTbGlkZXJDaGFuZ2U6W3t0eXBlOl9ffV0sY3BTbGlkZXJEcmFnRW5kOlt7dHlwZTpfX31dLGNwU2xpZGVyRHJhZ1N0YXJ0Olt7dHlwZTpfX31dLGNvbG9yUGlja2VyT3Blbjpbe3R5cGU6X199XSxjb2xvclBpY2tlckNsb3NlOlt7dHlwZTpfX31dLGNvbG9yUGlja2VyQ2FuY2VsOlt7dHlwZTpfX31dLGNvbG9yUGlja2VyU2VsZWN0Olt7dHlwZTpfX31dLGNvbG9yUGlja2VyQ2hhbmdlOlt7dHlwZTpfX31dLGNwQ215a0NvbG9yQ2hhbmdlOlt7dHlwZTpfX31dLGNwUHJlc2V0Q29sb3JzQ2hhbmdlOlt7dHlwZTpfX31dLGhhbmRsZUNsaWNrOlt7dHlwZTpNXyxhcmdzOlsiY2xpY2siXX1dLGhhbmRsZUZvY3VzOlt7dHlwZTpNXyxhcmdzOlsiZm9jdXMiXX1dLGhhbmRsZUlucHV0Olt7dHlwZTpNXyxhcmdzOlsiaW5wdXQiLFsiJGV2ZW50Il1dfV0sY29sb3JQaWNrZXI6W3t0eXBlOnlffV0sY3BQcmVzZXRDb2xvcnM6W3t0eXBlOnlffV19KTtjbGFzcyB6M3t9ejMuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHozKX0sejMuybVtb2Q9Wm8oe3R5cGU6ejN9KSx6My7JtWluaj1jbyh7cHJvdmlkZXJzOltUM10saW1wb3J0czpbW0J2XV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKHozLHtkZWNsYXJhdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm5bTjMsSTMsRDMsRTNdfSxpbXBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW0J2XX0sZXhwb3J0czpmdW5jdGlvbigpe3JldHVybltJM119fSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYih6Myxbe3R5cGU6a18sYXJnczpbe2ltcG9ydHM6W0J2XSxleHBvcnRzOltJM10scHJvdmlkZXJzOltUM10sZGVjbGFyYXRpb25zOltOMyxJMyxEMyxFM10sZW50cnlDb21wb25lbnRzOltOM119XX1dLG51bGwsbnVsbCk7Y29uc3QgSDM9WyJmaWx0ZXIiXTtmdW5jdGlvbiBGMyh0LGUpezEmdCYmRHUoMCl9ZnVuY3Rpb24gTDModCxlKXsxJnQmJkR1KDApfWZ1bmN0aW9uIEIzKHQsZSl7MSZ0JiZEdSgwKX1jb25zdCBWMz1mdW5jdGlvbih0KXtyZXR1cm57aXRlbTp0fX07ZnVuY3Rpb24gajModCxlKXtpZigxJnQmJihrdSgwKSxXbSgxLEIzLDEsMCwibmctY29udGFpbmVyIiwxMyksU3UoKSksMiZ0KXtjb25zdCB0PWUuJGltcGxpY2l0O0x1KCk7Y29uc3Qgbj1HbSgxNyk7SmMoMSksdnUoIm5nVGVtcGxhdGVPdXRsZXQiLG4pKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsZ2IoMixWMyx0KSl9fWZ1bmN0aW9uIFUzKHQsZSl7MSZ0JiYoT3UoMCwiZGl2IiwxNCksd3UoMSwibWF0LXNwaW5uZXIiLDE1KSxQdSgpKX1mdW5jdGlvbiBXMyh0LGUpezEmdCYmKE91KDAsImRpdiIsMTYpLE1mKDEsIk5vIFJ1bnMiKSxQdSgpKX1mdW5jdGlvbiBHMyh0LGUpe2lmKDEmdCYmKE91KDAsImRpdiIsMTYpLE91KDEsInNwYW4iKSxNZigyLCdObyBydW5zIG1hdGNoICInKSxPdSgzLCJjb2RlIiksTWYoNCksUHUoKSxNZig1LCciJyksUHUoKSxQdSgpKSwyJnQpe2NvbnN0IHQ9THUoKTtKYyg0KSx2Zih0LnJlZ2V4RmlsdGVyKX19Y29uc3QgWTM9ZnVuY3Rpb24oKXtyZXR1cm5bNSwxMCwyMF19O2Z1bmN0aW9uIHEzKHQsZSl7aWYoMSZ0KXtjb25zdCB0PUV1KCk7T3UoMCwibWF0LXBhZ2luYXRvciIsMTcpLE51KCJwYWdlIiwoZnVuY3Rpb24gZShuKXtyZXR1cm4gcmEodCksTHUoKS5vblBhZ2luYXRpb25DaGFuZ2UuZW1pdChuKX0pKSxQdSgpfWlmKDImdCl7Y29uc3QgdD1MdSgpO3Z1KCJwYWdlU2l6ZU9wdGlvbnMiLGZiKDQsWTMpKSgicGFnZUluZGV4Iix0LnBhZ2luYXRpb25PcHRpb24ucGFnZUluZGV4KSgicGFnZVNpemUiLHQucGFnaW5hdGlvbk9wdGlvbi5wYWdlU2l6ZSkoImxlbmd0aCIsdC5maWx0ZXJlZEl0ZW1zTGVuZ3RoKX19ZnVuY3Rpb24gWjModCxlKXtpZigxJnQpe2NvbnN0IHQ9RXUoKTtPdSgwLCJkaXYiLDE5KSxPdSgxLCJzcGFuIiwyMCksTWYoMiksUHUoKSxPdSgzLCJidXR0b24iLDIxKSxOdSgiY2xpY2siLChmdW5jdGlvbiBlKCl7cmV0dXJuIHJhKHQpLEx1KDIpLm9uU2VsZWN0QWxsUGFnZXMuZW1pdCgpfSkpLE1mKDQsIiBTZWxlY3QgYWxsIHJ1bnMgIiksUHUoKSxQdSgpfWlmKDImdCl7Y29uc3QgdD1MdSgyKTtKYygyKSxPZigiQWxsIHJ1bnMgaW4gdGhpcyBwYWdlIGFyZSBzZWxlY3RlZCBidXQgbm90IGFsbCBydW5zICgiLHQubnVtU2VsZWN0ZWRJdGVtcywiIG9mICIsdC5hbGxJdGVtc0xlbmd0aCwiKSBhcmUgc2VsZWN0ZWQuIil9fWZ1bmN0aW9uIFgzKHQsZSl7aWYoMSZ0JiZXbSgwLFozLDUsMiwiZGl2IiwxOCksMiZ0KXtjb25zdCB0PUx1KCk7dnUoIm5nSWYiLHQuYWxsUGFnZUl0ZW1zU2VsZWN0ZWQoKSYmdC5udW1TZWxlY3RlZEl0ZW1zIT09dC5hbGxJdGVtc0xlbmd0aCl9fWZ1bmN0aW9uIEszKHQsZSl7aWYoMSZ0KXtjb25zdCB0PUV1KCk7T3UoMCwibWF0LWNoZWNrYm94IiwzMSksTnUoImNoYW5nZSIsKGZ1bmN0aW9uIGUoKXtyZXR1cm4gcmEodCksTHUoMykuaGFuZGxlUGFnZVRvZ2dsZSgpfSkpLFB1KCl9aWYoMiZ0KXtjb25zdCB0PUx1KDMpO3Z1KCJjaGVja2VkIix0LmFsbFBhZ2VJdGVtc1NlbGVjdGVkKCkpKCJpbmRldGVybWluYXRlIiwhdC5hbGxQYWdlSXRlbXNTZWxlY3RlZCgpJiZ0LnNvbWVQYWdlSXRlbXNTZWxlY3RlZCgpKX19Y29uc3QgSjM9ZnVuY3Rpb24odCl7cmV0dXJue3R5cGU6dH19O2Z1bmN0aW9uIFEzKHQsZSl7aWYoMSZ0JiYoT3UoMCwic3BhbiIsMzIpLE1mKDEsIkV4cGVyaW1lbnQiKSxQdSgpKSwyJnQpe2NvbnN0IHQ9THUoMyk7dnUoIm1hdC1zb3J0LWhlYWRlciIsZ2IoMSxKMyx0LlNvcnRUeXBlLkVYUEVSSU1FTlRfTkFNRSkpfX1mdW5jdGlvbiAkMyh0LGUpe2lmKDEmdCYmKE91KDAsInNwYW4iLDMyKSxNZigxLCJSdW4iKSxQdSgpKSwyJnQpe2NvbnN0IHQ9THUoMyk7dnUoIm1hdC1zb3J0LWhlYWRlciIsZ2IoMSxKMyx0LlNvcnRUeXBlLlJVTl9OQU1FKSl9fWZ1bmN0aW9uIHQyKHQsZSl7MSZ0JiZ3dSgwLCJydW5zLWdyb3VwLW1lbnUtYnV0dG9uIiwzNCksMiZ0JiZ2dSgiZXhwZXJpbWVudElkcyIsTHUoNCkuZXhwZXJpbWVudElkcyl9ZnVuY3Rpb24gZTIodCxlKXtpZigxJnQmJihPdSgwLCJzcGFuIiksV20oMSx0MiwxLDEsInJ1bnMtZ3JvdXAtbWVudS1idXR0b24iLDMzKSxQdSgpKSwyJnQpe2NvbnN0IHQ9THUoMyk7SmMoMSksdnUoIm5nSWYiLHQuc2hvd0dyb3VwQ29udHJvbCl9fWNvbnN0IG4yPWZ1bmN0aW9uKHQpe3JldHVyblsiY29sdW1uIix0XX07ZnVuY3Rpb24gbzIodCxlKXtpZigxJnQmJihPdSgwLCJzcGFuIiwyNiksa3UoMSwyNyksV20oMixLMywxLDIsIm1hdC1jaGVja2JveCIsMjgpLFdtKDMsUTMsMiwzLCJzcGFuIiwyOSksV20oNCwkMywyLDMsInNwYW4iLDI5KSxXbSg1LGUyLDIsMSwic3BhbiIsMzApLFN1KCksUHUoKSksMiZ0KXtjb25zdCB0PWUuJGltcGxpY2l0LG49THUoMik7dnUoIm5nQ2xhc3MiLGdiKDYsbjIsInRiLWNvbHVtbi0iK3QpKSxKYygxKSx2dSgibmdTd2l0Y2giLHQpLEpjKDEpLHZ1KCJuZ1N3aXRjaENhc2UiLG4uUnVuc1RhYmxlQ29sdW1uLkNIRUNLQk9YKSxKYygxKSx2dSgibmdTd2l0Y2hDYXNlIixuLlJ1bnNUYWJsZUNvbHVtbi5FWFBFUklNRU5UX05BTUUpLEpjKDEpLHZ1KCJuZ1N3aXRjaENhc2UiLG4uUnVuc1RhYmxlQ29sdW1uLlJVTl9OQU1FKSxKYygxKSx2dSgibmdTd2l0Y2hDYXNlIixuLlJ1bnNUYWJsZUNvbHVtbi5SVU5fQ09MT1IpfX1mdW5jdGlvbiBpMih0LGUpe2lmKDEmdCl7Y29uc3QgdD1FdSgpO2t1KDApLE91KDEsImRpdiIsNDMpLE51KCJjbGljayIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIGUuc3RvcFByb3BhZ2F0aW9uKCl9KSksT3UoMiwidGItcmFuZ2UtaW5wdXQiLDQ0KSxOdSgidmFsdWUiLChmdW5jdGlvbiBlKG4pe3JhKHQpO2NvbnN0IG89THUoMikuJGltcGxpY2l0O3JldHVybiBMdSgyKS5oYW5kbGVIcGFyYW1JbnRlcnZhbENoYW5nZWQobyxuKX0pKSxQdSgpLFB1KCksU3UoKX1pZigyJnQpe2NvbnN0IHQ9THUoMikuJGltcGxpY2l0O0pjKDIpLHZ1KCJtaW4iLHQuZmlsdGVyLm1pblZhbHVlKSgibWF4Iix0LmZpbHRlci5tYXhWYWx1ZSkoImxvd2VyVmFsdWUiLHQuZmlsdGVyLmZpbHRlckxvd2VyVmFsdWUpKCJ1cHBlclZhbHVlIix0LmZpbHRlci5maWx0ZXJVcHBlclZhbHVlKX19ZnVuY3Rpb24gYTIodCxlKXtpZigxJnQpe2NvbnN0IHQ9RXUoKTtPdSgwLCJkaXYiLDQ2KSxOdSgiY2xpY2siLChmdW5jdGlvbiB0KGUpe3JldHVybiBlLnN0b3BQcm9wYWdhdGlvbigpfSkpLE91KDEsIm1hdC1jaGVja2JveCIsNDIpLE51KCJjaGFuZ2UiLChmdW5jdGlvbiBuKCl7cmEodCk7Y29uc3Qgbz1lLiRpbXBsaWNpdCxpPUx1KDMpLiRpbXBsaWNpdDtyZXR1cm4gTHUoMikuaGFuZGxlSHBhcmFtRGlzY3JldGVDaGFuZ2VkKGksbyl9KSksT3UoMiwic3BhbiIpLE1mKDMpLFB1KCksUHUoKSxQdSgpfWlmKDImdCl7Y29uc3QgdD1lLiRpbXBsaWNpdCxuPUx1KDMpLiRpbXBsaWNpdDtKYygxKSx2dSgiY2hlY2tlZCIsbi5maWx0ZXIuZmlsdGVyVmFsdWVzLmluY2x1ZGVzKHQpKSxKYygyKSx2Zih0KX19ZnVuY3Rpb24gcjIodCxlKXtpZigxJnQmJihrdSgwKSxXbSgxLGEyLDQsMiwiZGl2Iiw0NSksU3UoKSksMiZ0KXtjb25zdCB0PUx1KDIpLiRpbXBsaWNpdDtKYygxKSx2dSgibmdGb3JPZiIsdC5maWx0ZXIucG9zc2libGVWYWx1ZXMpfX1mdW5jdGlvbiBzMih0LGUpe2lmKDEmdCl7Y29uc3QgdD1FdSgpO2t1KDApLE91KDEsImJ1dHRvbiIsMzgpLE51KCJjbGljayIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIGUuc3RvcFByb3BhZ2F0aW9uKCl9KSksd3UoMiwibWF0LWljb24iLDM5KSxQdSgpLE91KDMsIm1hdC1tZW51IixudWxsLDQwKSxPdSg1LCJkaXYiLDQxKSxOdSgiY2xpY2siLChmdW5jdGlvbiB0KGUpe3JldHVybiBlLnN0b3BQcm9wYWdhdGlvbigpfSkpLE91KDYsIm1hdC1jaGVja2JveCIsNDIpLE51KCJjaGFuZ2UiLChmdW5jdGlvbiBlKCl7cmEodCk7Y29uc3Qgbj1MdSgpLiRpbXBsaWNpdDtyZXR1cm4gTHUoMikuaGFuZGxlSHBhcmFtSW5jbHVkZVVuZGVmaW5lZFRvZ2dsZWQobil9KSksT3UoNywic3BhbiIpLE1mKDgsIihzaG93IGVtcHR5IHZhbHVlKSIpLFB1KCksUHUoKSxQdSgpLFdtKDksaTIsMyw0LCJuZy1jb250YWluZXIiLDM3KSxXbSgxMCxyMiwyLDEsIm5nLWNvbnRhaW5lciIsMzcpLFB1KCksU3UoKX1pZigyJnQpe2NvbnN0IHQ9R20oNCksZT1MdSgpLiRpbXBsaWNpdCxuPUx1KDIpO0pjKDEpLHZ1KCJtYXRNZW51VHJpZ2dlckZvciIsdCksTm0oImFyaWEtbGFiZWwiLCJGaWx0ZXIgaHBhcmFtICIrKGUuZGlzcGxheU5hbWV8fGUubmFtZSkpLEpjKDUpLHZ1KCJjaGVja2VkIixlLmZpbHRlci5pbmNsdWRlVW5kZWZpbmVkKSxKYygzKSx2dSgibmdJZiIsZS5maWx0ZXIudHlwZT09PW4uRG9tYWluVHlwZS5JTlRFUlZBTCksSmMoMSksdnUoIm5nSWYiLGUuZmlsdGVyLnR5cGU9PT1uLkRvbWFpblR5cGUuRElTQ1JFVEUpfX1jb25zdCBsMj1mdW5jdGlvbih0LGUpe3JldHVybnt0eXBlOnQsbmFtZTplfX07ZnVuY3Rpb24gYzIodCxlKXtpZigxJnQmJihPdSgwLCJzcGFuIiwzNSksT3UoMSwic3BhbiIsMzYpLE1mKDIpLFB1KCksV20oMyxzMiwxMSw1LCJuZy1jb250YWluZXIiLDM3KSxQdSgpKSwyJnQpe2NvbnN0IHQ9ZS4kaW1wbGljaXQsbj1MdSgyKTt2dSgibWF0LXNvcnQtaGVhZGVyIixoYigzLGwyLG4uU29ydFR5cGUuSFBBUkFNLHQubmFtZSkpLEpjKDIpLHZmKHQuZGlzcGxheU5hbWV8fHQubmFtZSksSmMoMSksdnUoIm5nSWYiLHQuZmlsdGVyKX19ZnVuY3Rpb24gZDIodCxlKXtpZigxJnQpe2NvbnN0IHQ9RXUoKTtrdSgwKSxPdSgxLCJidXR0b24iLDM4KSxOdSgiY2xpY2siLChmdW5jdGlvbiB0KGUpe3JldHVybiBlLnN0b3BQcm9wYWdhdGlvbigpfSkpLHd1KDIsIm1hdC1pY29uIiwzOSksUHUoKSxPdSgzLCJtYXQtbWVudSIsbnVsbCw0MCksT3UoNSwiZGl2Iiw0MSksTnUoImNsaWNrIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gZS5zdG9wUHJvcGFnYXRpb24oKX0pKSxPdSg2LCJtYXQtY2hlY2tib3giLDQyKSxOdSgiY2hhbmdlIiwoZnVuY3Rpb24gZSgpe3JhKHQpO2NvbnN0IG49THUoKS4kaW1wbGljaXQ7cmV0dXJuIEx1KDIpLmhhbmRsZU1ldHJpY0luY2x1ZGVVbmRlZmluZWRDaGFuZ2VkKG4pfSkpLE91KDcsInNwYW4iKSxNZig4LCIoc2hvdyBlbXB0eSB2YWx1ZSkiKSxQdSgpLFB1KCksUHUoKSxPdSg5LCJkaXYiLDQzKSxOdSgiY2xpY2siLChmdW5jdGlvbiB0KGUpe3JldHVybiBlLnN0b3BQcm9wYWdhdGlvbigpfSkpLE91KDEwLCJ0Yi1yYW5nZS1pbnB1dCIsNDQpLE51KCJ2YWx1ZSIsKGZ1bmN0aW9uIGUobil7cmEodCk7Y29uc3Qgbz1MdSgpLiRpbXBsaWNpdDtyZXR1cm4gTHUoMikuaGFuZGxlTWV0cmljRmlsdGVyQ2hhbmdlZChvLG4pfSkpLFB1KCksUHUoKSxQdSgpLFN1KCl9aWYoMiZ0KXtjb25zdCB0PUdtKDQpLGU9THUoKS4kaW1wbGljaXQ7SmMoMSksdnUoIm1hdE1lbnVUcmlnZ2VyRm9yIix0KSxObSgiYXJpYS1sYWJlbCIsIkZpbHRlciBtZXRyaWMgIisoZS5kaXNwbGF5TmFtZXx8ZS50YWcpKSxKYyg1KSx2dSgiY2hlY2tlZCIsZS5maWx0ZXIuaW5jbHVkZVVuZGVmaW5lZCksSmMoNCksdnUoIm1pbiIsZS5maWx0ZXIubWluVmFsdWUpKCJtYXgiLGUuZmlsdGVyLm1heFZhbHVlKSgibG93ZXJWYWx1ZSIsZS5maWx0ZXIuZmlsdGVyTG93ZXJWYWx1ZSkoInVwcGVyVmFsdWUiLGUuZmlsdGVyLmZpbHRlclVwcGVyVmFsdWUpfX1jb25zdCBwMj1mdW5jdGlvbih0LGUpe3JldHVybnt0eXBlOnQsdGFnOmV9fTtmdW5jdGlvbiBtMih0LGUpe2lmKDEmdCYmKE91KDAsInNwYW4iLDM1KSxPdSgxLCJzcGFuIiwzNiksTWYoMiksUHUoKSxXbSgzLGQyLDExLDcsIm5nLWNvbnRhaW5lciIsMzcpLFB1KCkpLDImdCl7Y29uc3QgdD1lLiRpbXBsaWNpdCxuPUx1KDIpO3Z1KCJtYXQtc29ydC1oZWFkZXIiLGhiKDMscDIsbi5Tb3J0VHlwZS5NRVRSSUMsdC50YWcpKSxKYygyKSx2Zih0LmRpc3BsYXlOYW1lfHx0LnRhZyksSmMoMSksdnUoIm5nSWYiLHQuZmlsdGVyKX19ZnVuY3Rpb24gdTIodCxlKXtpZigxJnQpe2NvbnN0IHQ9RXUoKTtPdSgwLCJkaXYiLDIyKSxPdSgxLCJkaXYiLDIzKSxOdSgibWF0U29ydENoYW5nZSIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIHJhKHQpLEx1KCkuaGFuZGxlU29ydENoYW5nZShuKX0pKSxXbSgyLG8yLDYsOCwic3BhbiIsMjQpLFdtKDMsYzIsNCw2LCJzcGFuIiwyNSksV20oNCxtMiw0LDYsInNwYW4iLDI1KSxQdSgpLFB1KCl9aWYoMiZ0KXtjb25zdCB0PUx1KCk7SmMoMSksdnUoIm1hdFNvcnRBY3RpdmUiLHQuc29ydE9wdGlvbi5jb2x1bW4pLEpjKDEpLHZ1KCJuZ0Zvck9mIix0LmNvbHVtbnMpLEpjKDEpLHZ1KCJuZ0Zvck9mIix0LmhwYXJhbUNvbHVtbnMpKCJuZ0ZvclRyYWNrQnkiLHQudHJhY2tCeUhwYXJhbUNvbHVtbiksSmMoMSksdnUoIm5nRm9yT2YiLHQubWV0cmljQ29sdW1ucykoIm5nRm9yVHJhY2tCeSIsdC50cmFja0J5TWV0cmljQ29sdW1uKX19ZnVuY3Rpb24gZjIodCxlKXtpZigxJnQpe2NvbnN0IHQ9RXUoKTtPdSgwLCJzcGFuIiksT3UoMSwibWF0LWNoZWNrYm94Iiw0MiksTnUoImNoYW5nZSIsKGZ1bmN0aW9uIGUoKXtyYSh0KTtjb25zdCBuPUx1KDIpLml0ZW07cmV0dXJuIEx1KCkub25TZWxlY3Rpb25Ub2dnbGUuZW1pdChuKX0pKSxQdSgpLFB1KCl9aWYoMiZ0KXtjb25zdCB0PUx1KDIpLml0ZW07SmMoMSksdnUoImNoZWNrZWQiLHQuc2VsZWN0ZWQpfX1mdW5jdGlvbiBnMih0LGUpe2lmKDEmdCYmKE91KDAsInNwYW4iLDM2KSxNZigxKSxQdSgpKSwyJnQpe2NvbnN0IHQ9THUoMikuaXRlbTtObSgidGl0bGUiLHQuZXhwZXJpbWVudE5hbWUpLEpjKDEpLHZmKHQuZXhwZXJpbWVudEFsaWFzKX19ZnVuY3Rpb24gaDIodCxlKXtpZigxJnQmJihPdSgwLCJzcGFuIiwzNiksTWYoMSksUHUoKSksMiZ0KXtjb25zdCB0PUx1KDIpLml0ZW07SmMoMSksdmYodC5ydW4ubmFtZSl9fWNvbnN0IGIyPWZ1bmN0aW9uKHQpe3JldHVybnsicnVuLWNvbG9yLXN3YXRjaCI6ITAsIm5vLWNvbG9yIjp0fX07ZnVuY3Rpb24geTIodCxlKXtpZigxJnQpe2NvbnN0IHQ9RXUoKTtPdSgwLCJzcGFuIiksT3UoMSwiYnV0dG9uIiw1MiksTnUoImNvbG9yUGlja2VyQ2hhbmdlIiwoZnVuY3Rpb24gZShuKXtyYSh0KTtjb25zdCBvPUx1KDIpLml0ZW07cmV0dXJuIEx1KCkub25SdW5Db2xvckNoYW5nZS5lbWl0KHtydW5JZDpvLnJ1bi5pZCxuZXdDb2xvcjpufSl9KSksUHUoKSxQdSgpfWlmKDImdCl7Y29uc3QgdD1MdSgyKS5pdGVtO0pjKDEpLG9mKCJiYWNrZ3JvdW5kIix0LnJ1bkNvbG9yKSx2dSgibmdDbGFzcyIsZ2IoOSxiMiwhdC5ydW5Db2xvcikpKCJjb2xvclBpY2tlciIsdC5ydW5Db2xvcikoImNwRGlhbG9nRGlzcGxheSIsInBvcHVwIikoImNwUG9zaXRpb24iLCJib3R0b20tcmlnaHQiKSgiY3BQb3NpdGlvbk9mZnNldCIsLTIwKSgiY3BVc2VSb290Vmlld0NvbnRhaW5lciIsITApKCJjcE91dHB1dEZvcm1hdCIsImhleCIpfX1mdW5jdGlvbiBfMih0LGUpe2lmKDEmdCYmKE91KDAsInNwYW4iLDUwKSxrdSgxLDI3KSxXbSgyLGYyLDIsMSwic3BhbiIsMzApLFdtKDMsZzIsMiwyLCJzcGFuIiw1MSksV20oNCxoMiwyLDEsInNwYW4iLDUxKSxXbSg1LHkyLDIsMTEsInNwYW4iLDMwKSxTdSgpLFB1KCkpLDImdCl7Y29uc3QgdD1lLiRpbXBsaWNpdCxuPUx1KDIpO3Z1KCJuZ0NsYXNzIixnYig2LG4yLCJ0Yi1jb2x1bW4tIit0KSksSmMoMSksdnUoIm5nU3dpdGNoIix0KSxKYygxKSx2dSgibmdTd2l0Y2hDYXNlIixuLlJ1bnNUYWJsZUNvbHVtbi5DSEVDS0JPWCksSmMoMSksdnUoIm5nU3dpdGNoQ2FzZSIsbi5SdW5zVGFibGVDb2x1bW4uRVhQRVJJTUVOVF9OQU1FKSxKYygxKSx2dSgibmdTd2l0Y2hDYXNlIixuLlJ1bnNUYWJsZUNvbHVtbi5SVU5fTkFNRSksSmMoMSksdnUoIm5nU3dpdGNoQ2FzZSIsbi5SdW5zVGFibGVDb2x1bW4uUlVOX0NPTE9SKX19ZnVuY3Rpb24gQzIodCxlKXtpZigxJnQmJihPdSgwLCJzcGFuIiw1MyksTWYoMSksUHUoKSksMiZ0KXtjb25zdCB0PWUuJGltcGxpY2l0LG49THUoKS5pdGVtO0pjKDEpLHZmKG4uaHBhcmFtcy5nZXQodC5uYW1lKSl9fWZ1bmN0aW9uIE0yKHQsZSl7aWYoMSZ0JiYoT3UoMCwic3BhbiIsNTMpLE1mKDEpLFB1KCkpLDImdCl7Y29uc3QgdD1lLiRpbXBsaWNpdCxuPUx1KCkuaXRlbTtKYygxKSx2ZihuLm1ldHJpY3MuZ2V0KHQudGFnKSl9fWZ1bmN0aW9uIHYyKHQsZSl7aWYoMSZ0JiYoT3UoMCwiZGl2Iiw0NyksV20oMSxfMiw2LDgsInNwYW4iLDQ4KSxXbSgyLEMyLDIsMSwic3BhbiIsNDkpLFdtKDMsTTIsMiwxLCJzcGFuIiw0OSksUHUoKSksMiZ0KXtjb25zdCB0PWUuaXRlbSxuPUx1KCk7Tm0oImRhdGEtaWQiLHQucnVuLmlkKSxKYygxKSx2dSgibmdGb3JPZiIsbi5jb2x1bW5zKSxKYygxKSx2dSgibmdGb3JPZiIsbi5ocGFyYW1Db2x1bW5zKSxKYygxKSx2dSgibmdGb3JPZiIsbi5tZXRyaWNDb2x1bW5zKX19Y2xhc3MgeDIgZXh0ZW5kcyAkUXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5pdGVtc1BlclBhZ2VMYWJlbD0iU2hvdyBydW5zOiJ9fXgyLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIE8yKGV8fHgyKX0seDIuybVwcm92PWxvKHt0b2tlbjp4MixmYWN0b3J5OngyLsm1ZmFjfSk7Y29uc3QgTzI9dnIoeDIpOygidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoeDIsW3t0eXBlOkptfV0sbnVsbCxudWxsKTtjbGFzcyBQMntjb25zdHJ1Y3Rvcigpe3RoaXMuZGF0YVNvdXJjZT1uZXcgcTAsdGhpcy5Eb21haW5UeXBlPUxBLHRoaXMuUnVuc1RhYmxlQ29sdW1uPURRLHRoaXMuU29ydFR5cGU9dE4sdGhpcy5vblJlZ2V4RmlsdGVyQ2hhbmdlPW5ldyBBYix0aGlzLm9uU2VsZWN0aW9uVG9nZ2xlPW5ldyBBYix0aGlzLm9uUGFnZVNlbGVjdGlvblRvZ2dsZT1uZXcgQWIsdGhpcy5vblNlbGVjdEFsbFBhZ2VzPW5ldyBBYix0aGlzLm9uUGFnaW5hdGlvbkNoYW5nZT1uZXcgQWIsdGhpcy5vblNvcnRDaGFuZ2U9bmV3IEFiLHRoaXMub25SdW5Db2xvckNoYW5nZT1uZXcgQWIsdGhpcy5vbkhwYXJhbURpc2NyZXRlRmlsdGVyQ2hhbmdlZD1uZXcgQWIsdGhpcy5vbkhwYXJhbUludGVydmFsRmlsdGVyQ2hhbmdlZD1uZXcgQWIsdGhpcy5vbk1ldHJpY0ZpbHRlckNoYW5nZWQ9bmV3IEFifW5nT25DaGFuZ2VzKCl7dGhpcy5kYXRhU291cmNlLmRhdGE9dGhpcy5wYWdlSXRlbXN9Z2V0SHBhcmFtQ29sdW1uSWQodCl7cmV0dXJuYGg6JHt0Lm5hbWV9YH1nZXRNZXRyaWNDb2x1bW5JZCh0KXtyZXR1cm5gbToke3QudGFnfWB9Z2V0Q29sdW1uSWRzKCl7cmV0dXJuWy4uLnRoaXMuY29sdW1ucywuLi50aGlzLmhwYXJhbUNvbHVtbnMubWFwKHRoaXMuZ2V0SHBhcmFtQ29sdW1uSWQpLC4uLnRoaXMubWV0cmljQ29sdW1ucy5tYXAodGhpcy5nZXRNZXRyaWNDb2x1bW5JZCldfWFsbFBhZ2VJdGVtc1NlbGVjdGVkKCl7cmV0dXJuIEJvb2xlYW4odGhpcy5wYWdlSXRlbXMubGVuZ3RoKSYmdGhpcy5wYWdlSXRlbXMuZXZlcnkoKHQ9PnQuc2VsZWN0ZWQpKX1zb21lUGFnZUl0ZW1zU2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5wYWdlSXRlbXMuc29tZSgodD0+dC5zZWxlY3RlZCkpfWhhbmRsZVBhZ2VUb2dnbGUoKXt0aGlzLm9uUGFnZVNlbGVjdGlvblRvZ2dsZS5lbWl0KHtpdGVtczp0aGlzLnBhZ2VJdGVtc30pfWhhbmRsZVNvcnRDaGFuZ2UodCl7bGV0IGU7c3dpdGNoKHQuZGlyZWN0aW9uKXtjYXNlImFzYyI6ZT1QTi5BU0M7YnJlYWs7Y2FzZSJkZXNjIjplPVBOLkRFU0M7YnJlYWs7ZGVmYXVsdDplPVBOLlVOU0VUfXRoaXMub25Tb3J0Q2hhbmdlLmVtaXQoe2tleTp0LmFjdGl2ZSxkaXJlY3Rpb246ZX0pfW9uRmlsdGVyS2V5VXAodCl7dGhpcy5vblJlZ2V4RmlsdGVyQ2hhbmdlLmVtaXQodC50YXJnZXQudmFsdWUpfXRhYmxlVHJhY2tCeSh0LGUpe3JldHVybiBlLnJ1bi5pZH1oYW5kbGVIcGFyYW1JbmNsdWRlVW5kZWZpbmVkVG9nZ2xlZCh0KXtjb25zdHtuYW1lOmUsZmlsdGVyOm59PXQ7aWYoIW4pdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFyaWFudCBlcnJvcjogcmVxdWlyZSBmaWx0ZXIgdG8gZXhpc3QgZm9yIGl0IHRvIGNoYW5nZSIpO24udHlwZT09PUxBLkRJU0NSRVRFP3RoaXMub25IcGFyYW1EaXNjcmV0ZUZpbHRlckNoYW5nZWQuZW1pdCh7aHBhcmFtTmFtZTplLGluY2x1ZGVVbmRlZmluZWQ6IW4uaW5jbHVkZVVuZGVmaW5lZCxmaWx0ZXJWYWx1ZXM6bi5maWx0ZXJWYWx1ZXN9KTp0aGlzLm9uSHBhcmFtSW50ZXJ2YWxGaWx0ZXJDaGFuZ2VkLmVtaXQoe25hbWU6ZSxpbmNsdWRlVW5kZWZpbmVkOiFuLmluY2x1ZGVVbmRlZmluZWQsZmlsdGVyTG93ZXJWYWx1ZTpuLmZpbHRlckxvd2VyVmFsdWUsZmlsdGVyVXBwZXJWYWx1ZTpuLmZpbHRlclVwcGVyVmFsdWV9KX1oYW5kbGVIcGFyYW1JbnRlcnZhbENoYW5nZWQodCxlKXtjb25zdHtuYW1lOm4sZmlsdGVyOm99PXQ7aWYoIW8pdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFyaWFudCBlcnJvcjogcmVxdWlyZSBmaWx0ZXIgdG8gZXhpc3QgZm9yIGl0IHRvIGNoYW5nZSIpO3RoaXMub25IcGFyYW1JbnRlcnZhbEZpbHRlckNoYW5nZWQuZW1pdCh7bmFtZTpuLGluY2x1ZGVVbmRlZmluZWQ6by5pbmNsdWRlVW5kZWZpbmVkLGZpbHRlckxvd2VyVmFsdWU6ZS5sb3dlclZhbHVlLGZpbHRlclVwcGVyVmFsdWU6ZS51cHBlclZhbHVlfSl9aGFuZGxlSHBhcmFtRGlzY3JldGVDaGFuZ2VkKHQsZSl7Y29uc3R7bmFtZTpuLGZpbHRlcjpvfT10O2lmKCFvKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhcmlhbnQgZXJyb3I6IHJlcXVpcmUgZmlsdGVyIHRvIGV4aXN0IGZvciBpdCB0byBjaGFuZ2UiKTtpZihvLnR5cGUhPT1MQS5ESVNDUkVURSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgSW52YXJpYW50IGVycm9yOiBleHBlY3RlZCBkaXNjcmV0ZSBkb21haW4gZm9yICR7bn1gKTtjb25zdCBpPW5ldyBTZXQoWy4uLm8uZmlsdGVyVmFsdWVzXSk7aS5oYXMoZSk/aS5kZWxldGUoZSk6aS5hZGQoZSksdGhpcy5vbkhwYXJhbURpc2NyZXRlRmlsdGVyQ2hhbmdlZC5lbWl0KHtocGFyYW1OYW1lOm4saW5jbHVkZVVuZGVmaW5lZDpvLmluY2x1ZGVVbmRlZmluZWQsZmlsdGVyVmFsdWVzOlsuLi5pXX0pfWhhbmRsZU1ldHJpY0luY2x1ZGVVbmRlZmluZWRDaGFuZ2VkKHQpe2lmKCF0LmZpbHRlcil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YXJpYW50IGVycm9yOiByZXF1aXJlIGZpbHRlciB0byBleGlzdCBmb3IgaXQgdG8gY2hhbmdlIik7dGhpcy5vbk1ldHJpY0ZpbHRlckNoYW5nZWQuZW1pdCh7bmFtZTp0LnRhZyxpbmNsdWRlVW5kZWZpbmVkOiF0LmZpbHRlci5pbmNsdWRlVW5kZWZpbmVkLGZpbHRlckxvd2VyVmFsdWU6dC5maWx0ZXIuZmlsdGVyTG93ZXJWYWx1ZSxmaWx0ZXJVcHBlclZhbHVlOnQuZmlsdGVyLmZpbHRlclVwcGVyVmFsdWV9KX1oYW5kbGVNZXRyaWNGaWx0ZXJDaGFuZ2VkKHQsZSl7aWYoIXQuZmlsdGVyKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhcmlhbnQgZXJyb3I6IHJlcXVpcmUgZmlsdGVyIHRvIGV4aXN0IGZvciBpdCB0byBjaGFuZ2UiKTt0aGlzLm9uTWV0cmljRmlsdGVyQ2hhbmdlZC5lbWl0KHtuYW1lOnQudGFnLGluY2x1ZGVVbmRlZmluZWQ6dC5maWx0ZXIuaW5jbHVkZVVuZGVmaW5lZCxmaWx0ZXJMb3dlclZhbHVlOmUubG93ZXJWYWx1ZSxmaWx0ZXJVcHBlclZhbHVlOmUudXBwZXJWYWx1ZX0pfXRyYWNrQnlIcGFyYW1Db2x1bW4odCl7cmV0dXJuIHQubmFtZX10cmFja0J5TWV0cmljQ29sdW1uKHQpe3JldHVybiB0LnRhZ319UDIuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFAyKX0sUDIuybVjbXA9VW8oe3R5cGU6UDIsc2VsZWN0b3JzOltbInJ1bnMtdGFibGUtY29tcG9uZW50Il1dLHZpZXdRdWVyeTpmdW5jdGlvbiB0KGUsbil7aWYoMSZlJiYoV2IoSDMsMyxjaCksV2IoYSQsMyksV2IoZCQsMykpLDImZSl7bGV0IHQ7VWIodD1ZYigpKSYmKG4uZmlsdGVyPXQuZmlyc3QpLFViKHQ9WWIoKSkmJihuLnBhZ2luYXRvcj10LmZpcnN0KSxVYih0PVliKCkpJiYobi5zb3J0PXQuZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezImZSYmYWYoImZsZXgtbGF5b3V0IixuLnVzZUZsZXhpYmxlTGF5b3V0KX0saW5wdXRzOntleHBlcmltZW50SWRzOiJleHBlcmltZW50SWRzIixzaG93RXhwZXJpbWVudE5hbWU6InNob3dFeHBlcmltZW50TmFtZSIsY29sdW1uczoiY29sdW1ucyIsaHBhcmFtQ29sdW1uczoiaHBhcmFtQ29sdW1ucyIsbWV0cmljQ29sdW1uczoibWV0cmljQ29sdW1ucyIsYWxsSXRlbXNMZW5ndGg6ImFsbEl0ZW1zTGVuZ3RoIixmaWx0ZXJlZEl0ZW1zTGVuZ3RoOiJmaWx0ZXJlZEl0ZW1zTGVuZ3RoIix1c2VGbGV4aWJsZUxheW91dDoidXNlRmxleGlibGVMYXlvdXQiLHVzZVBhZ2luYXRpb246InVzZVBhZ2luYXRpb24iLHNob3dHcm91cENvbnRyb2w6InNob3dHcm91cENvbnRyb2wiLHBhZ2VJdGVtczoicGFnZUl0ZW1zIixsb2FkaW5nOiJsb2FkaW5nIixudW1TZWxlY3RlZEl0ZW1zOiJudW1TZWxlY3RlZEl0ZW1zIixzb3J0T3B0aW9uOiJzb3J0T3B0aW9uIixwYWdpbmF0aW9uT3B0aW9uOiJwYWdpbmF0aW9uT3B0aW9uIixyZWdleEZpbHRlcjoicmVnZXhGaWx0ZXIifSxvdXRwdXRzOntvblJlZ2V4RmlsdGVyQ2hhbmdlOiJvblJlZ2V4RmlsdGVyQ2hhbmdlIixvblNlbGVjdGlvblRvZ2dsZToib25TZWxlY3Rpb25Ub2dnbGUiLG9uUGFnZVNlbGVjdGlvblRvZ2dsZToib25QYWdlU2VsZWN0aW9uVG9nZ2xlIixvblNlbGVjdEFsbFBhZ2VzOiJvblNlbGVjdEFsbFBhZ2VzIixvblBhZ2luYXRpb25DaGFuZ2U6Im9uUGFnaW5hdGlvbkNoYW5nZSIsb25Tb3J0Q2hhbmdlOiJvblNvcnRDaGFuZ2UiLG9uUnVuQ29sb3JDaGFuZ2U6Im9uUnVuQ29sb3JDaGFuZ2UiLG9uSHBhcmFtRGlzY3JldGVGaWx0ZXJDaGFuZ2VkOiJvbkhwYXJhbURpc2NyZXRlRmlsdGVyQ2hhbmdlZCIsb25IcGFyYW1JbnRlcnZhbEZpbHRlckNoYW5nZWQ6Im9uSHBhcmFtSW50ZXJ2YWxGaWx0ZXJDaGFuZ2VkIixvbk1ldHJpY0ZpbHRlckNoYW5nZWQ6Im9uTWV0cmljRmlsdGVyQ2hhbmdlZCJ9LGZlYXR1cmVzOltpaChbe3Byb3ZpZGU6JFEsdXNlQ2xhc3M6eDJ9XSksU2ldLGRlY2xzOjE4LHZhcnM6OCxjb25zdHM6W1sxLCJmaWx0ZXItcm93Il0sWyJwbGFjZWhvbGRlciIsIkZpbHRlciBydW5zIChyZWdleCkiLDEsInJ1bi1maWx0ZXIiLDMsImtleXVwIl0sWzEsInRhYmxlLWNvbnRhaW5lciJdLFsicm9sZSIsInRhYmxlIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiXSxbInJvbGUiLCJyb3dncm91cCIsMSwicm93cyJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiXSxbImNsYXNzIiwibG9hZGluZyIsNCwibmdJZiJdLFsiY2xhc3MiLCJuby1ydW5zIiw0LCJuZ0lmIl0sWyJzaG93Rmlyc3RMYXN0QnV0dG9ucyIsIiIsMywicGFnZVNpemVPcHRpb25zIiwicGFnZUluZGV4IiwicGFnZVNpemUiLCJsZW5ndGgiLCJwYWdlIiw0LCJuZ0lmIl0sWyJzZWxlY3RBbGwiLCIiXSxbImhlYWRlciIsIiJdLFsicm93IiwiIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCJdLFsxLCJsb2FkaW5nIl0sWyJtb2RlIiwiaW5kZXRlcm1pbmF0ZSIsImRpYW1ldGVyIiwiMjgiXSxbMSwibm8tcnVucyJdLFsic2hvd0ZpcnN0TGFzdEJ1dHRvbnMiLCIiLDMsInBhZ2VTaXplT3B0aW9ucyIsInBhZ2VJbmRleCIsInBhZ2VTaXplIiwibGVuZ3RoIiwicGFnZSJdLFsiY2xhc3MiLCJzZWxlY3QtYWxsIiwicm9sZSIsInJvdyIsNCwibmdJZiJdLFsicm9sZSIsInJvdyIsMSwic2VsZWN0LWFsbCJdLFsicm9sZSIsImNvbHVtbmhlYWRlciJdLFsibWF0LWJ1dHRvbiIsIiIsMywiY2xpY2siXSxbInJvbGUiLCJyb3dncm91cCIsMSwiaGVhZGVyIl0sWyJtYXRTb3J0IiwiIiwicm9sZSIsInJvdyIsMywibWF0U29ydEFjdGl2ZSIsIm1hdFNvcnRDaGFuZ2UiXSxbInJvbGUiLCJjb2x1bW5oZWFkZXIiLDMsIm5nQ2xhc3MiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsImNsYXNzIiwiY29sdW1uIiwzLCJtYXQtc29ydC1oZWFkZXIiLDQsIm5nRm9yIiwibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsMywibmdDbGFzcyJdLFszLCJuZ1N3aXRjaCJdLFszLCJjaGVja2VkIiwiaW5kZXRlcm1pbmF0ZSIsImNoYW5nZSIsNCwibmdTd2l0Y2hDYXNlIl0sWzMsIm1hdC1zb3J0LWhlYWRlciIsNCwibmdTd2l0Y2hDYXNlIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFszLCJjaGVja2VkIiwiaW5kZXRlcm1pbmF0ZSIsImNoYW5nZSJdLFszLCJtYXQtc29ydC1oZWFkZXIiXSxbMywiZXhwZXJpbWVudElkcyIsNCwibmdJZiJdLFszLCJleHBlcmltZW50SWRzIl0sWyJyb2xlIiwiY29sdW1uaGVhZGVyIiwxLCJjb2x1bW4iLDMsIm1hdC1zb3J0LWhlYWRlciJdLFsxLCJuYW1lIl0sWzQsIm5nSWYiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsMywibWF0TWVudVRyaWdnZXJGb3IiLCJjbGljayJdLFsic3ZnSWNvbiIsImZpbHRlcl9hbHRfMjRweCJdLFsiZmlsdGVyTWVudSIsIm1hdE1lbnUiXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJyb2xlIiwibWVudWl0ZW1jaGVja2JveCIsImRpc2FibGVSaXBwbGUiLCIiLDEsImZpbHRlci1tZW51LWNoZWNrYm94LXJvdyIsMywiY2xpY2siXSxbMywiY2hlY2tlZCIsImNoYW5nZSJdLFsiZGlzYWJsZVJpcHBsZSIsIiIsIm1hdC1tZW51LWl0ZW0iLCIiLDEsInJhbmdlLWlucHV0LWNvbnRhaW5lciIsMywiY2xpY2siXSxbMywibWluIiwibWF4IiwibG93ZXJWYWx1ZSIsInVwcGVyVmFsdWUiLCJ2YWx1ZSJdLFsibWF0LW1lbnUtaXRlbSIsIiIsImNsYXNzIiwiZmlsdGVyLW1lbnUtY2hlY2tib3gtcm93Iiwicm9sZSIsIm1lbnVpdGVtY2hlY2tib3giLDMsImNsaWNrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJyb2xlIiwibWVudWl0ZW1jaGVja2JveCIsMSwiZmlsdGVyLW1lbnUtY2hlY2tib3gtcm93IiwzLCJjbGljayJdLFsicm9sZSIsInJvdyJdLFsicm9sZSIsImNlbGwiLDMsIm5nQ2xhc3MiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsicm9sZSIsImNlbGwiLCJjbGFzcyIsImNvbHVtbiIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJyb2xlIiwiY2VsbCIsMywibmdDbGFzcyJdLFsiY2xhc3MiLCJuYW1lIiw0LCJuZ1N3aXRjaENhc2UiXSxbMywibmdDbGFzcyIsImNvbG9yUGlja2VyIiwiY3BEaWFsb2dEaXNwbGF5IiwiY3BQb3NpdGlvbiIsImNwUG9zaXRpb25PZmZzZXQiLCJjcFVzZVJvb3RWaWV3Q29udGFpbmVyIiwiY3BPdXRwdXRGb3JtYXQiLCJjb2xvclBpY2tlckNoYW5nZSJdLFsicm9sZSIsImNlbGwiLDEsImNvbHVtbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7aWYoMSZlJiYoT3UoMCwiZGl2IiwwKSxPdSgxLCJ0Yi1maWx0ZXItaW5wdXQiLDEpLE51KCJrZXl1cCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25GaWx0ZXJLZXlVcChlKX0pKSxQdSgpLFB1KCksT3UoMiwiZGl2IiwyKSxPdSgzLCJkaXYiLDMpLFdtKDQsRjMsMSwwLCJuZy1jb250YWluZXIiLDQpLFdtKDUsTDMsMSwwLCJuZy1jb250YWluZXIiLDQpLE91KDYsImRpdiIsNSksV20oNyxqMywyLDQsIm5nLWNvbnRhaW5lciIsNiksUHUoKSxQdSgpLFdtKDgsVTMsMiwwLCJkaXYiLDcpLFdtKDksVzMsMiwwLCJkaXYiLDgpLFdtKDEwLEczLDYsMSwiZGl2Iiw4KSxQdSgpLFdtKDExLHEzLDEsNSwibWF0LXBhZ2luYXRvciIsOSksV20oMTIsWDMsMSwxLCJuZy10ZW1wbGF0ZSIsbnVsbCwxMCxLYiksV20oMTQsdTIsNSw2LCJuZy10ZW1wbGF0ZSIsbnVsbCwxMSxLYiksV20oMTYsdjIsNCw0LCJuZy10ZW1wbGF0ZSIsbnVsbCwxMixLYikpLDImZSl7Y29uc3QgdD1HbSgxMyksZT1HbSgxNSk7SmMoNCksdnUoIm5nVGVtcGxhdGVPdXRsZXQiLGUpLEpjKDEpLHZ1KCJuZ1RlbXBsYXRlT3V0bGV0Iix0KSxKYygyKSx2dSgibmdGb3JPZiIsbi5wYWdlSXRlbXMpKCJuZ0ZvclRyYWNrQnkiLG4udGFibGVUcmFja0J5KSxKYygxKSx2dSgibmdJZiIsbi5sb2FkaW5nKSxKYygxKSx2dSgibmdJZiIsIW4ubG9hZGluZyYmMD09PW4uYWxsSXRlbXNMZW5ndGgpLEpjKDEpLHZ1KCJuZ0lmIiwhbi5sb2FkaW5nJiZuLmFsbEl0ZW1zTGVuZ3RoPjAmJjA9PT1uLmZpbHRlcmVkSXRlbXNMZW5ndGgpLEpjKDEpLHZ1KCJuZ0lmIixuLnVzZVBhZ2luYXRpb24pfX0sZGlyZWN0aXZlczpbZzEsaHYsb3YsYXYsUDEsYSQsTkgsZCQsdHYsY3YsZHYsdVksYiQsVzEsTkcsY0csREcsT0cscTEsSTNdLHN0eWxlczpbJy5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHh9Lm1hdC1oMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaGVhZGxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTVweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZ1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjA1ZW07bWFyZ2luOjAgMCA1NnB4fS5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAwNWVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXJhaXNlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdHJva2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmxhdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZhYltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbWluaS1mYWJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4fS5tYXQtY2FyZC1zdWJ0aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGVja2JveC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvb3Rlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgdHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIzZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LjU0MTY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2NjY2NjY3ZW0pfUBtZWRpYSBwcmludHsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjJlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouMjVlbSAwIC43NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxZW0gMCAxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMiksIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi0wLjA2MjVlbX0ubWF0LW1lbnUtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci12ZXJ0aWNhbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGFiLWxpbmtbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MH0ubWF0LXRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5Om5vbmV9LmNkay12aXN1YWxseS1oaWRkZW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjZ9LmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV0sIC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3hbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2tbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHt9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7fS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOi13ZWJraXQtYXV0b2ZpbGwpe2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZVtfbmdjb250ZW50LSVDT01QJV17cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fS5tYXQtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfVtfbmdob3N0LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmb250LXNpemU6MTNweDtvdmVyZmxvdzpoaWRkZW59LmZpbHRlci1yb3dbX25nY29udGVudC0lQ09NUCVde2ZsZXg6bm9uZX0udGFibGUtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtjb250YWluOmxheW91dCBwYWludDtmbGV4LWdyb3c6MTttYXgtd2lkdGg6MTAwJTtvdmVyZmxvdy14OmF1dG87b3ZlcmZsb3cteTphdXRvO3dpbGwtY2hhbmdlOnNjcm9sbC1wb3NpdGlvbn0uZmxleC1sYXlvdXRbX25naG9zdC0lQ09NUCVdICAgLm5hbWVbX25nY29udGVudC0lQ09NUCVde3dvcmQtYnJlYWs6YnJlYWstd29yZDtvdmVyZmxvdy13cmFwOmJyZWFrLXdvcmR9LmZsZXgtbGF5b3V0W19uZ2hvc3QtJUNPTVAlXSAgIG1hdC1wYWdpbmF0b3JbX25nY29udGVudC0lQ09NUCVde2JvcmRlci10b3A6MXB4IHNvbGlkICNlYmViZWI7cGFkZGluZy1ib3R0b206MTJweH1ib2R5LmRhcmstbW9kZSAgIC5mbGV4LWxheW91dFtfbmdob3N0LSVDT01QJV0gICBtYXQtcGFnaW5hdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItdG9wOjFweCBzb2xpZCAjNTU1fVtyb2xlPXRhYmxlXVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTp0YWJsZTt3aWR0aDoxMDAlfVtyb2xlPXRhYmxlXVtfbmdjb250ZW50LSVDT01QJV0gICAuaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXB9W3JvbGU9dGFibGVdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgW3JvbGU9Y29sdW1uaGVhZGVyXVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZmZmO3Bvc2l0aW9uOnN0aWNreTt0b3A6MDt6LWluZGV4OjF9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgW3JvbGU9dGFibGVdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgW3JvbGU9Y29sdW1uaGVhZGVyXVtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIFtyb2xlPXRhYmxlXVtfbmdjb250ZW50LSVDT01QJV0gICAuaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIFtyb2xlPWNvbHVtbmhlYWRlcl1bX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzMwMzAzMH1bcm9sZT10YWJsZV1bX25nY29udGVudC0lQ09NUCVdICAgW3JvbGU9cm93XVtfbmdjb250ZW50LSVDT01QJV17Y29udGFpbjpzdHJpY3Q7ZGlzcGxheTp0YWJsZS1yb3c7aGVpZ2h0OjQzcHh9W3JvbGU9dGFibGVdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIFtyb2xlPXJvd11bX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWJlYjtkaXNwbGF5OnRhYmxlLWNlbGw7cGFkZGluZzo1cHg7dmVydGljYWwtYWxpZ246bWlkZGxlfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIFtyb2xlPXRhYmxlXVtfbmdjb250ZW50LSVDT01QJV0gICBbcm9sZT1yb3ddW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb2x1bW5bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBbcm9sZT10YWJsZV1bX25nY29udGVudC0lQ09NUCVdICAgW3JvbGU9cm93XVtfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fVtyb2xlPXRhYmxlXVtfbmdjb250ZW50LSVDT01QJV0gICBbcm9sZT1yb3ddW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb2x1bW5bX25nY29udGVudC0lQ09NUCVdOmZpcnN0LWNoaWxke3BhZGRpbmctbGVmdDoyNHB4fVtyb2xlPXRhYmxlXVtfbmdjb250ZW50LSVDT01QJV0gICBbcm9sZT1yb3ddW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb2x1bW5bX25nY29udGVudC0lQ09NUCVdOmxhc3QtY2hpbGR7cGFkZGluZy1yaWdodDoyNHB4fVtyb2xlPXJvd2dyb3VwXVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTp0YWJsZS1yb3ctZ3JvdXB9W3JvbGU9cm93Z3JvdXBdLmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTp0YWJsZS1oZWFkZXItZ3JvdXB9LmxvYWRpbmdbX25nY29udGVudC0lQ09NUCVdLCAubm8tcnVuc1tfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2JvcmRlcjowO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7ZGlzcGxheTpmbGV4O2hlaWdodDo0OHB4O3BhZGRpbmc6MCAyNHB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5sb2FkaW5nW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmxvYWRpbmdbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM1NTV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm5vLXJ1bnNbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAubm8tcnVuc1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX0ubG9hZGluZ1tfbmdjb250ZW50LSVDT01QJV17anVzdGlmeS1jb250ZW50OmNlbnRlcn0uc2VsZWN0LWFsbFtfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MTJweDtwYWRkaW5nLXRvcDoxMnB4fS5zZWxlY3QtYWxsLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdLCAuc2VsZWN0LWFsbC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNjt0ZXh0LWFsaWduOmxlZnR9LnNlbGVjdC1hbGwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjUwMDtwYWRkaW5nOjAgNHB4fS5maWx0ZXItcm93W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmViO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7aGVpZ2h0OjQ4cHg7cGFkZGluZzowIDE2cHggMCAyMXB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5maWx0ZXItcm93W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmZpbHRlci1yb3dbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM1NTV9LmZpbHRlci1yb3dbX25nY29udGVudC0lQ09NUCVdICAgdGItZmlsdGVyLWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4LWdyb3c6MX0udGItY29sdW1uLWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXSwgLnRiLWNvbHVtbi1ydW5fY29sb3JbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjIwcHh9LnRiLWNvbHVtbi1ydW5fY29sb3JbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246Y2VudGVyfS5ydW4tY29sb3Itc3dhdGNoW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItcmFkaXVzOjEwMCU7Ym9yZGVyOjFweCBzb2xpZCAjZWJlYmViO2hlaWdodDoyMHB4O3dpZHRoOjIwcHg7b3V0bGluZTpub25lfS5ydW4tY29sb3Itc3dhdGNoLm5vLWNvbG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItY29sb3I6I2M2Y2FkMTtib3JkZXItd2lkdGg6MnB4fS5yYW5nZS1pbnB1dC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDphdXRvfVtfbmdob3N0LSVDT01QJV0gICAgIG1hdC1wYWdpbmF0b3IgbWF0LWZvcm0tZmllbGR7bWFyZ2luOjB9LmZpbHRlci1tZW51LWNoZWNrYm94LXJvd1tfbmdjb250ZW50LSVDT01QJV0gICBtYXQtY2hlY2tib3hbX25nY29udGVudC0lQ09NUCVdICAgICBsYWJlbHtkaXNwbGF5OmZsZXg7aGVpZ2h0OjEwMCU7YWxpZ24taXRlbXM6Y2VudGVyfS5maWx0ZXItbWVudS1jaGVja2JveC1yb3dbX25nY29udGVudC0lQ09NUCVdICAgbWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgbGFiZWwgLm1hdC1jaGVja2JveC1pbm5lci1jb250YWluZXJ7bWFyZ2luLWxlZnQ6MH0uZmlsdGVyLW1lbnUtY2hlY2tib3gtcm93W19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV0gICAgIGxhYmVsIC5tYXQtY2hlY2tib3gtbGFiZWx7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgbWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIG1hdC1wYWdpbmF0b3JbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzMwMzAzMH0nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoUDIsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoicnVucy10YWJsZS1jb21wb25lbnQiLHRlbXBsYXRlVXJsOiJydW5zX3RhYmxlX2NvbXBvbmVudC5uZy5odG1sIixob3N0OnsiW2NsYXNzLmZsZXgtbGF5b3V0XSI6InVzZUZsZXhpYmxlTGF5b3V0In0sc3R5bGVVcmxzOlsicnVuc190YWJsZV9jb21wb25lbnQuY3NzIl0sY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOiRRLHVzZUNsYXNzOngyfV19XX1dLG51bGwse2V4cGVyaW1lbnRJZHM6W3t0eXBlOnlffV0sc2hvd0V4cGVyaW1lbnROYW1lOlt7dHlwZTp5X31dLGNvbHVtbnM6W3t0eXBlOnlffV0saHBhcmFtQ29sdW1uczpbe3R5cGU6eV99XSxtZXRyaWNDb2x1bW5zOlt7dHlwZTp5X31dLGFsbEl0ZW1zTGVuZ3RoOlt7dHlwZTp5X31dLGZpbHRlcmVkSXRlbXNMZW5ndGg6W3t0eXBlOnlffV0sdXNlRmxleGlibGVMYXlvdXQ6W3t0eXBlOnlffV0sdXNlUGFnaW5hdGlvbjpbe3R5cGU6eV99XSxzaG93R3JvdXBDb250cm9sOlt7dHlwZTp5X31dLHBhZ2VJdGVtczpbe3R5cGU6eV99XSxsb2FkaW5nOlt7dHlwZTp5X31dLG51bVNlbGVjdGVkSXRlbXM6W3t0eXBlOnlffV0sc29ydE9wdGlvbjpbe3R5cGU6eV99XSxwYWdpbmF0aW9uT3B0aW9uOlt7dHlwZTp5X31dLHJlZ2V4RmlsdGVyOlt7dHlwZTp5X31dLG9uUmVnZXhGaWx0ZXJDaGFuZ2U6W3t0eXBlOl9ffV0sb25TZWxlY3Rpb25Ub2dnbGU6W3t0eXBlOl9ffV0sb25QYWdlU2VsZWN0aW9uVG9nZ2xlOlt7dHlwZTpfX31dLG9uU2VsZWN0QWxsUGFnZXM6W3t0eXBlOl9ffV0sb25QYWdpbmF0aW9uQ2hhbmdlOlt7dHlwZTpfX31dLG9uU29ydENoYW5nZTpbe3R5cGU6X199XSxvblJ1bkNvbG9yQ2hhbmdlOlt7dHlwZTpfX31dLG9uSHBhcmFtRGlzY3JldGVGaWx0ZXJDaGFuZ2VkOlt7dHlwZTpfX31dLG9uSHBhcmFtSW50ZXJ2YWxGaWx0ZXJDaGFuZ2VkOlt7dHlwZTpfX31dLG9uTWV0cmljRmlsdGVyQ2hhbmdlZDpbe3R5cGU6X199XSxmaWx0ZXI6W3t0eXBlOkZyLGFyZ3M6WyJmaWx0ZXIiLHtzdGF0aWM6ITAscmVhZDpjaH1dfV0scGFnaW5hdG9yOlt7dHlwZTpGcixhcmdzOlthJCx7c3RhdGljOiEwfV19XSxzb3J0Olt7dHlwZTpGcixhcmdzOltkJCx7c3RhdGljOiEwfV19XX0pO2NvbnN0IHcyPXprKG1OLCh0PT50LnN0YXRlPT09QkUuTE9BRElORykpO2Z1bmN0aW9uIGsyKHQsZSl7c3dpdGNoKGUudHlwZSl7Y2FzZSB0Ti5FWFBFUklNRU5UX05BTUU6cmV0dXJuW3QuZXhwZXJpbWVudEFsaWFzLHQucnVuLm5hbWUsdC5ydW4uaWRdO2Nhc2UgdE4uUlVOX05BTUU6cmV0dXJuW3QucnVuLm5hbWUsdC5leHBlcmltZW50QWxpYXMsdC5ydW4uaWRdO2Nhc2UgdE4uSFBBUkFNOnJldHVyblt0LmhwYXJhbXMuZ2V0KGUubmFtZSksdC5ydW4ubmFtZSx0LmV4cGVyaW1lbnRBbGlhcyx0LnJ1bi5pZF07Y2FzZSB0Ti5NRVRSSUM6cmV0dXJuW3QubWV0cmljcy5nZXQoZS50YWcpLHQucnVuLm5hbWUsdC5leHBlcmltZW50QWxpYXMsdC5ydW4uaWRdO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBOb3QgeWV0IGltcGxlbWVudGVkOiAke2V9YCl9fWZ1bmN0aW9uIFMyKHQsZSl7cmV0dXJuIHZvaWQgMD09PWU/dC5pbmNsdWRlVW5kZWZpbmVkOnQudHlwZT09PUxBLkRJU0NSRVRFP3QuZmlsdGVyVmFsdWVzLmluY2x1ZGVzKGUpOnQudHlwZT09PUxBLklOVEVSVkFMJiZ0LmZpbHRlckxvd2VyVmFsdWU8PWUmJmU8PXQuZmlsdGVyVXBwZXJWYWx1ZX1jbGFzcyBEMntjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXQsdGhpcy5sb2FkaW5nJD1udWxsLHRoaXMuaHBhcmFtQ29sdW1ucyQ9WihbXSksdGhpcy5tZXRyaWNDb2x1bW5zJD1aKFtdKSx0aGlzLnVzZUZsZXhpYmxlTGF5b3V0PSExLHRoaXMudXNlUGFnaW5hdGlvbj0hMSx0aGlzLmNvbHVtbnM9W0RRLlJVTl9OQU1FXSx0aGlzLnNob3dIcGFyYW1zQW5kTWV0cmljcz0hMSx0aGlzLnNvcnRPcHRpb24kPXRoaXMuc3RvcmUuc2VsZWN0KF9OKSx0aGlzLnBhZ2luYXRpb25PcHRpb24kPXRoaXMuc3RvcmUuc2VsZWN0KHlOKSx0aGlzLnJlZ2V4RmlsdGVyJD10aGlzLnN0b3JlLnNlbGVjdChoTiksdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyB4fWlzRXhwZXJpbWVudE5hbWVWaXNpYmxlKCl7cmV0dXJuIHRoaXMuY29sdW1ucy5zb21lKCh0PT50PT09RFEuRVhQRVJJTUVOVF9OQU1FKSl9bmdPbkluaXQoKXtjb25zdCB0PUR0KHRoaXMuZXhwZXJpbWVudElkcy5tYXAoKHQ9PnRoaXMuZ2V0UnVuVGFibGVJdGVtc0ZvckV4cGVyaW1lbnQodCkpKSkucGlwZShodCgodD0+W10uY29uY2F0KC4uLnQpKSkpO3RoaXMuYWxsVW5zb3J0ZWRSdW5UYWJsZUl0ZW1zJD10LnBpcGUoYW4oMSkpLHRoaXMuYWxsSXRlbXNMZW5ndGgkPXRoaXMuYWxsVW5zb3J0ZWRSdW5UYWJsZUl0ZW1zJC5waXBlKGh0KCh0PT50Lmxlbmd0aCkpKTtjb25zdCBlPXRoaXMuZ2V0RmlsdGVyZWRJdGVtcyQodGhpcy5hbGxVbnNvcnRlZFJ1blRhYmxlSXRlbXMkKS5waXBlKGFuKDEpKTt0aGlzLmZpbHRlcmVkSXRlbXNMZW5ndGgkPWUucGlwZShodCgodD0+dC5sZW5ndGgpKSksdGhpcy5wYWdlSXRlbXMkPXRoaXMuc29ydGVkQW5kU2xpY2VkSXRlbXMkKGUpLHRoaXMubnVtU2VsZWN0ZWRJdGVtcyQ9dGhpcy5hbGxVbnNvcnRlZFJ1blRhYmxlSXRlbXMkLnBpcGUoaHQoKHQ9PnQucmVkdWNlKCgodCxlKT0+dCtOdW1iZXIoZS5zZWxlY3RlZCkpLDApKSkpO2NvbnN0IG49dGhpcy5leHBlcmltZW50SWRzLm1hcCgodD0+dGhpcy5zdG9yZS5zZWxlY3QodzIse2V4cGVyaW1lbnRJZDp0fSkpKTtpZih0aGlzLmxvYWRpbmckPUR0KG4pLnBpcGUoaHQoKHQ9PnQuc29tZSgodD0+dCkpKSkpLHRoaXMuc2hvd0hwYXJhbXNBbmRNZXRyaWNzKXtjb25zdCB0PXRoaXMuc3RvcmUuc2VsZWN0KElRLHtleHBlcmltZW50SWRzOnRoaXMuZXhwZXJpbWVudElkc30pO3RoaXMuaHBhcmFtQ29sdW1ucyQ9RHQoW3RoaXMuc3RvcmUuc2VsZWN0KFJRLHRoaXMuZXhwZXJpbWVudElkcyksdF0pLnBpcGUoaHQoKChbdCx7aHBhcmFtczplfV0pPT5lLm1hcCgoKHtuYW1lOmUsZGlzcGxheU5hbWU6bn0pPT57Y29uc3Qgbz10LmdldChlKTtpZighbyl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgSW52YXJpYW50IGVycm9yOiBhIGZpbHRlciBmb3IgJHtlfSBtdXN0IGV4aXN0IHdoZW4gdGhlIGhwYXJhbSBleGlzdHNgKTtyZXR1cm57ZGlzcGxheU5hbWU6bixuYW1lOmUsZmlsdGVyOm99fSkpKSkpLHRoaXMubWV0cmljQ29sdW1ucyQ9RHQoW3RoaXMuc3RvcmUuc2VsZWN0KE5RLHRoaXMuZXhwZXJpbWVudElkcyksdF0pLnBpcGUoaHQoKChbdCx7bWV0cmljczplfV0pPT5lLm1hcCgoKHt0YWc6ZSxkaXNwbGF5TmFtZTpufSk9Pntjb25zdCBvPXQuZ2V0KGUpO2lmKCFvKXRocm93IG5ldyBSYW5nZUVycm9yKGBJbnZhcmlhbnQgZXJyb3I6IGEgZmlsdGVyIGZvciAke2V9IG11c3QgZXhpc3Qgd2hlbiB0aGUgbWV0cmljIGV4aXN0c2ApO3JldHVybntkaXNwbGF5TmFtZTpuLHRhZzplLGZpbHRlcjpvfX0pKSkpKX10aGlzLmNvbHVtbnMuaW5jbHVkZXMoRFEuQ0hFQ0tCT1gpJiZ0aGlzLnN0b3JlLnNlbGVjdChPRCkucGlwZSh1bih0aGlzLm5nVW5zdWJzY3JpYmUpLGRuKCgoKT0+dC5waXBlKEd0KCh0PT50Lmxlbmd0aD41MDApKSxOZSgxKSkpKSkuc3Vic2NyaWJlKCgoKT0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goS04oe2xvY2FsaXplZE1lc3NhZ2U6IlRoZSBudW1iZXIgb2YgcnVucyBleGNlZWRzIDUwMC4gTmV3IHJ1bnMgYXJlIHVuc2VsZWN0ZWQgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuIn0pKX0pKSx0aGlzLnNob3dHcm91cENvbnRyb2wkPXRoaXMuc3RvcmUuc2VsZWN0KFBFKS5waXBlKGh0KCh0PT50JiZ0aGlzLmNvbHVtbnMuaW5jbHVkZXMoRFEuUlVOX0NPTE9SKSkpKSx0aGlzLnN0b3JlLmRpc3BhdGNoKE5BKHtleHBlcmltZW50SWRzOnRoaXMuZXhwZXJpbWVudElkc30pKX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9Z2V0RmlsdGVyZWRJdGVtcyQodCl7cmV0dXJuIER0KFt0LHRoaXMuc3RvcmUuc2VsZWN0KGhOKV0pLnBpcGUoaHQoKChbdCxlXSk9PntpZighZSlyZXR1cm4gdDtsZXQgbj1udWxsO3RyeXtuPWU/bmV3IFJlZ0V4cChlKTpudWxsfWNhdGNoKHQpe31pZighbilyZXR1cm5bXTtjb25zdCBvPXRoaXMuY29sdW1ucy5pbmNsdWRlcyhEUS5FWFBFUklNRU5UX05BTUUpO3JldHVybiB0LmZpbHRlcigodD0+e2lmKG49biwhbylyZXR1cm4gbi50ZXN0KHQucnVuLm5hbWUpO2NvbnN0IGU9YCR7dC5leHBlcmltZW50TmFtZX0vJHt0LnJ1bi5uYW1lfWA7cmV0dXJuIG4udGVzdCh0LnJ1bi5uYW1lKXx8bi50ZXN0KHQuZXhwZXJpbWVudEFsaWFzKXx8bi50ZXN0KHQuZXhwZXJpbWVudE5hbWUpfHxuLnRlc3QoZSl9KSl9KSksY2UodGhpcy5zdG9yZS5zZWxlY3QoUlEsdGhpcy5leHBlcmltZW50SWRzKSx0aGlzLnN0b3JlLnNlbGVjdChOUSx0aGlzLmV4cGVyaW1lbnRJZHMpKSxodCgoKFt0LGUsbl0pPT50aGlzLnNob3dIcGFyYW1zQW5kTWV0cmljcz90LmZpbHRlcigoKHtocGFyYW1zOnQsbWV0cmljczpvfSk9PlsuLi5lLmVudHJpZXMoKV0uZXZlcnkoKChbZSxuXSk9PlMyKG4sdC5nZXQoZSkpKSkmJlsuLi5uLmVudHJpZXMoKV0uZXZlcnkoKChbdCxlXSk9PlMyKGUsby5nZXQodCkpKSkpKTp0KSkpfXNvcnRlZEFuZFNsaWNlZEl0ZW1zJCh0KXtjb25zdCBlPUR0KFt0LHRoaXMuc3RvcmUuc2VsZWN0KF9OKV0pLnBpcGUoaHQoKChbdCxlXSk9PihmdW5jdGlvbiBuKHQsZSl7Y29uc3Qgbj1lLmtleSxvPVsuLi50XTtyZXR1cm4gbnVsbD09PW58fGUuZGlyZWN0aW9uPT09UE4uVU5TRVR8fG8uc29ydCgoKHQsbyk9Pntjb25zdCBpPWsyKHQsbiksYT1rMihvLG4pO2lmKGkubGVuZ3RoIT09YS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKGBJbnZhcmlhbnQgZXJyb3I6IGEgZ2l2ZW4gc29ydCBzaG91bGQgcmVzdWx0IGluIHNhbWUgbnVtYmVyIG9mIGl0ZW1zOiAke2V9YCk7Zm9yKGxldCB0PTA7dDxpLmxlbmd0aDt0Kyspe2NvbnN0IG49aVt0XSxvPWFbdF07aWYobiE9PW8pe2lmKHZvaWQgMD09PW58fHZvaWQgMD09PW8pcmV0dXJuIHZvaWQgMD09PW8/LTE6MTtpZih0eXBlb2YgbiE9dHlwZW9mIG8pdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY29tcGFyZSB2YWx1ZXMgb2YgZGlmZmVyZW50IHR5cGVzOiAke3R5cGVvZiBufSB2cy4gJHt0eXBlb2Ygb31gKTtyZXR1cm4gbjxvPT0oZS5kaXJlY3Rpb249PT1QTi5BU0MpPy0xOjF9fXJldHVybiAwfSkpLG99KSh0LGUpKSkpO3JldHVybiBEdChbZSx0aGlzLnN0b3JlLnNlbGVjdCh5TildKS5waXBlKGh0KCgoW3QsZV0pPT57aWYoIXRoaXMudXNlUGFnaW5hdGlvbilyZXR1cm4gdC5zbGljZSgpO2NvbnN0e3BhZ2VTaXplOm4scGFnZUluZGV4Om99PWU7cmV0dXJuIHQuc2xpY2UobypuLChvKzEpKm4pfSkpLGNuKFtdKSl9Z2V0UnVuVGFibGVJdGVtc0ZvckV4cGVyaW1lbnQodCl7cmV0dXJuIER0KFt0aGlzLnN0b3JlLnNlbGVjdChjTix7ZXhwZXJpbWVudElkOnR9KSx0aGlzLnN0b3JlLnNlbGVjdChpUix7ZXhwZXJpbWVudElkOnR9KSx0aGlzLnN0b3JlLnNlbGVjdCh2TiksdGhpcy5zdG9yZS5zZWxlY3QoQ04pLHRoaXMuc3RvcmUuc2VsZWN0KFBEKV0pLnBpcGUoaHQoKChbZSxuLG8saSxhXSk9PmUubWFwKChlPT57Y29uc3Qgcj1uZXcgTWFwOyhlLmhwYXJhbXN8fFtdKS5mb3JFYWNoKCh0PT57ci5zZXQodC5uYW1lLHQudmFsdWUpfSkpO2NvbnN0IHM9bmV3IE1hcDtyZXR1cm4oZS5tZXRyaWNzfHxbXSkuZm9yRWFjaCgodD0+e3Muc2V0KHQudGFnLHQudmFsdWUpfSkpLHtydW46ZSxleHBlcmltZW50TmFtZToobnVsbD09bj92b2lkIDA6bi5uYW1lKXx8IiIsZXhwZXJpbWVudEFsaWFzOmFbdF0sc2VsZWN0ZWQ6Qm9vbGVhbihvJiZvLmdldChlLmlkKSkscnVuQ29sb3I6aVtlLmlkXSxocGFyYW1zOnIsbWV0cmljczpzfX0pKSkpKX1vblJ1blNlbGVjdGlvblRvZ2dsZSh0KXt0aGlzLnN0b3JlLmRpc3BhdGNoKGtBKHtleHBlcmltZW50SWRzOnRoaXMuZXhwZXJpbWVudElkcyxydW5JZDp0LnJ1bi5pZH0pKX1vblBhZ2VTZWxlY3Rpb25Ub2dnbGUodCl7Y29uc3R7aXRlbXM6ZX09dCxuPWUubWFwKCgoe3J1bjp0fSk9PnQuaWQpKTt0aGlzLnN0b3JlLmRpc3BhdGNoKFNBKHtleHBlcmltZW50SWRzOnRoaXMuZXhwZXJpbWVudElkcyxydW5JZHM6bn0pKX1vblNlbGVjdEFsbFBhZ2VzKCl7aWYoIXRoaXMudXNlUGFnaW5hdGlvbil0aHJvdyBuZXcgRXJyb3IoIlNlbGVjdCBhbGwgZXZlbnRzIGNhbm5vdCBiZSBkaXNwYXRjaGVkIHdoZW4gcGFnaW5hdGlvbiBpcyBkaXNhYmxlZCIpO3RoaXMuc3RvcmUuZGlzcGF0Y2goREEoe2V4cGVyaW1lbnRJZHM6dGhpcy5leHBlcmltZW50SWRzfSkpfW9uUGFnaW5hdGlvbkNoYW5nZSh0KXtpZighdGhpcy51c2VQYWdpbmF0aW9uKXRocm93IG5ldyBFcnJvcigiUGFnaW5hdGlvbiBldmVudHMgY2Fubm90IGJlIGRpc3BhdGNoZWQgd2hlbiBwYWdpbmF0aW9uIGlzIGRpc2FibGVkIik7Y29uc3R7cGFnZUluZGV4OmUscGFnZVNpemU6bn09dDt0aGlzLnN0b3JlLmRpc3BhdGNoKEVBKHtwYWdlSW5kZXg6ZSxwYWdlU2l6ZTpufSkpfW9uU29ydENoYW5nZSh0KXt0aGlzLnN0b3JlLmRpc3BhdGNoKEFBKHQpKX1vblJlZ2V4RmlsdGVyQ2hhbmdlKHQpe3RoaXMuc3RvcmUuZGlzcGF0Y2goUkEoe3JlZ2V4U3RyaW5nOnR9KSl9b25SdW5Db2xvckNoYW5nZSh7cnVuSWQ6dCxuZXdDb2xvcjplfSl7dGhpcy5zdG9yZS5kaXNwYXRjaChUQSh7cnVuSWQ6dCxuZXdDb2xvcjplfSkpfW9uSHBhcmFtRGlzY3JldGVGaWx0ZXJDaGFuZ2VkKHQpe2NvbnN0e2hwYXJhbU5hbWU6ZSxmaWx0ZXJWYWx1ZXM6bixpbmNsdWRlVW5kZWZpbmVkOm99PXQ7dGhpcy5zdG9yZS5kaXNwYXRjaChWQSh7ZXhwZXJpbWVudElkczp0aGlzLmV4cGVyaW1lbnRJZHMsaHBhcmFtTmFtZTplLGZpbHRlclZhbHVlczpuLGluY2x1ZGVVbmRlZmluZWQ6b30pKX1vbkhwYXJhbUludGVydmFsRmlsdGVyQ2hhbmdlZCh0KXtjb25zdHtuYW1lOmUsZmlsdGVyTG93ZXJWYWx1ZTpuLGZpbHRlclVwcGVyVmFsdWU6byxpbmNsdWRlVW5kZWZpbmVkOml9PXQ7dGhpcy5zdG9yZS5kaXNwYXRjaChqQSh7ZXhwZXJpbWVudElkczp0aGlzLmV4cGVyaW1lbnRJZHMsaHBhcmFtTmFtZTplLGZpbHRlckxvd2VyVmFsdWU6bixmaWx0ZXJVcHBlclZhbHVlOm8saW5jbHVkZVVuZGVmaW5lZDppfSkpfW9uTWV0cmljRmlsdGVyQ2hhbmdlZCh0KXtjb25zdHtuYW1lOmUsaW5jbHVkZVVuZGVmaW5lZDpuLGZpbHRlckxvd2VyVmFsdWU6byxmaWx0ZXJVcHBlclZhbHVlOml9PXQ7dGhpcy5zdG9yZS5kaXNwYXRjaChVQSh7ZXhwZXJpbWVudElkczp0aGlzLmV4cGVyaW1lbnRJZHMsbWV0cmljVGFnOmUsaW5jbHVkZVVuZGVmaW5lZDpuLGZpbHRlckxvd2VyVmFsdWU6byxmaWx0ZXJVcHBlclZhbHVlOml9KSl9fUQyLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxEMikoTXUoRWspKX0sRDIuybVjbXA9VW8oe3R5cGU6RDIsc2VsZWN0b3JzOltbInJ1bnMtdGFibGUiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezImZSYmYWYoImZsZXgtbGF5b3V0IixuLnVzZUZsZXhpYmxlTGF5b3V0KX0saW5wdXRzOnt1c2VGbGV4aWJsZUxheW91dDoidXNlRmxleGlibGVMYXlvdXQiLHVzZVBhZ2luYXRpb246InVzZVBhZ2luYXRpb24iLGNvbHVtbnM6ImNvbHVtbnMiLGV4cGVyaW1lbnRJZHM6ImV4cGVyaW1lbnRJZHMiLHNob3dIcGFyYW1zQW5kTWV0cmljczoic2hvd0hwYXJhbXNBbmRNZXRyaWNzIn0sZGVjbHM6MTIsdmFyczozOCxjb25zdHM6W1szLCJleHBlcmltZW50SWRzIiwidXNlRmxleGlibGVMYXlvdXQiLCJudW1TZWxlY3RlZEl0ZW1zIiwiY29sdW1ucyIsImhwYXJhbUNvbHVtbnMiLCJtZXRyaWNDb2x1bW5zIiwic2hvd0V4cGVyaW1lbnROYW1lIiwicGFnZUl0ZW1zIiwiZmlsdGVyZWRJdGVtc0xlbmd0aCIsImFsbEl0ZW1zTGVuZ3RoIiwibG9hZGluZyIsInBhZ2luYXRpb25PcHRpb24iLCJyZWdleEZpbHRlciIsInNob3dHcm91cENvbnRyb2wiLCJzb3J0T3B0aW9uIiwidXNlUGFnaW5hdGlvbiIsIm9uU2VsZWN0aW9uVG9nZ2xlIiwib25QYWdlU2VsZWN0aW9uVG9nZ2xlIiwib25TZWxlY3RBbGxQYWdlcyIsIm9uUGFnaW5hdGlvbkNoYW5nZSIsIm9uUmVnZXhGaWx0ZXJDaGFuZ2UiLCJvblNvcnRDaGFuZ2UiLCJvblJ1bkNvbG9yQ2hhbmdlIiwib25IcGFyYW1JbnRlcnZhbEZpbHRlckNoYW5nZWQiLCJvbkhwYXJhbURpc2NyZXRlRmlsdGVyQ2hhbmdlZCIsIm9uTWV0cmljRmlsdGVyQ2hhbmdlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoT3UoMCwicnVucy10YWJsZS1jb21wb25lbnQiLDApLE51KCJvblNlbGVjdGlvblRvZ2dsZSIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25SdW5TZWxlY3Rpb25Ub2dnbGUoZSl9KSkoIm9uUGFnZVNlbGVjdGlvblRvZ2dsZSIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25QYWdlU2VsZWN0aW9uVG9nZ2xlKGUpfSkpKCJvblNlbGVjdEFsbFBhZ2VzIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uU2VsZWN0QWxsUGFnZXMoKX0pKSgib25QYWdpbmF0aW9uQ2hhbmdlIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vblBhZ2luYXRpb25DaGFuZ2UoZSl9KSkoIm9uUmVnZXhGaWx0ZXJDaGFuZ2UiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLm9uUmVnZXhGaWx0ZXJDaGFuZ2UoZSl9KSkoIm9uU29ydENoYW5nZSIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25Tb3J0Q2hhbmdlKGUpfSkpKCJvblJ1bkNvbG9yQ2hhbmdlIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vblJ1bkNvbG9yQ2hhbmdlKGUpfSkpKCJvbkhwYXJhbUludGVydmFsRmlsdGVyQ2hhbmdlZCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25IcGFyYW1JbnRlcnZhbEZpbHRlckNoYW5nZWQoZSl9KSkoIm9uSHBhcmFtRGlzY3JldGVGaWx0ZXJDaGFuZ2VkIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vbkhwYXJhbURpc2NyZXRlRmlsdGVyQ2hhbmdlZChlKX0pKSgib25NZXRyaWNGaWx0ZXJDaGFuZ2VkIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vbk1ldHJpY0ZpbHRlckNoYW5nZWQoZSl9KSksT2IoMSwiYXN5bmMiKSxPYigyLCJhc3luYyIpLE9iKDMsImFzeW5jIiksT2IoNCwiYXN5bmMiKSxPYig1LCJhc3luYyIpLE9iKDYsImFzeW5jIiksT2IoNywiYXN5bmMiKSxPYig4LCJhc3luYyIpLE9iKDksImFzeW5jIiksT2IoMTAsImFzeW5jIiksT2IoMTEsImFzeW5jIiksUHUoKSksMiZlJiZ2dSgiZXhwZXJpbWVudElkcyIsbi5leHBlcmltZW50SWRzKSgidXNlRmxleGlibGVMYXlvdXQiLG4udXNlRmxleGlibGVMYXlvdXQpKCJudW1TZWxlY3RlZEl0ZW1zIixQYigxLDE2LG4ubnVtU2VsZWN0ZWRJdGVtcyQpKSgiY29sdW1ucyIsbi5jb2x1bW5zKSgiaHBhcmFtQ29sdW1ucyIsUGIoMiwxOCxuLmhwYXJhbUNvbHVtbnMkKSkoIm1ldHJpY0NvbHVtbnMiLFBiKDMsMjAsbi5tZXRyaWNDb2x1bW5zJCkpKCJzaG93RXhwZXJpbWVudE5hbWUiLG4uaXNFeHBlcmltZW50TmFtZVZpc2libGUoKSkoInBhZ2VJdGVtcyIsUGIoNCwyMixuLnBhZ2VJdGVtcyQpKSgiZmlsdGVyZWRJdGVtc0xlbmd0aCIsUGIoNSwyNCxuLmZpbHRlcmVkSXRlbXNMZW5ndGgkKSkoImFsbEl0ZW1zTGVuZ3RoIixQYig2LDI2LG4uYWxsSXRlbXNMZW5ndGgkKSkoImxvYWRpbmciLFBiKDcsMjgsbi5sb2FkaW5nJCkpKCJwYWdpbmF0aW9uT3B0aW9uIixQYig4LDMwLG4ucGFnaW5hdGlvbk9wdGlvbiQpKSgicmVnZXhGaWx0ZXIiLFBiKDksMzIsbi5yZWdleEZpbHRlciQpKSgic2hvd0dyb3VwQ29udHJvbCIsUGIoMTAsMzQsbi5zaG93R3JvdXBDb250cm9sJCkpKCJzb3J0T3B0aW9uIixQYigxMSwzNixuLnNvcnRPcHRpb24kKSkoInVzZVBhZ2luYXRpb24iLG4udXNlUGFnaW5hdGlvbil9LGRpcmVjdGl2ZXM6W1AyXSxwaXBlczpbTXZdLHN0eWxlczpbIi5mbGV4LWxheW91dFtfbmdob3N0LSVDT01QJV0ge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgfVxuXG4gICAgICAuZmxleC1sYXlvdXRbX25naG9zdC0lQ09NUCVdICAgID4gcnVucy10YWJsZS1jb21wb25lbnRbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEQyLFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6InJ1bnMtdGFibGUiLHRlbXBsYXRlOidcbiAgICA8cnVucy10YWJsZS1jb21wb25lbnRcbiAgICAgIFtleHBlcmltZW50SWRzXT0iZXhwZXJpbWVudElkcyJcbiAgICAgIFt1c2VGbGV4aWJsZUxheW91dF09InVzZUZsZXhpYmxlTGF5b3V0IlxuICAgICAgW251bVNlbGVjdGVkSXRlbXNdPSJudW1TZWxlY3RlZEl0ZW1zJCB8IGFzeW5jIlxuICAgICAgW2NvbHVtbnNdPSJjb2x1bW5zIlxuICAgICAgW2hwYXJhbUNvbHVtbnNdPSJocGFyYW1Db2x1bW5zJCB8IGFzeW5jIlxuICAgICAgW21ldHJpY0NvbHVtbnNdPSJtZXRyaWNDb2x1bW5zJCB8IGFzeW5jIlxuICAgICAgW3Nob3dFeHBlcmltZW50TmFtZV09ImlzRXhwZXJpbWVudE5hbWVWaXNpYmxlKCkiXG4gICAgICBbcGFnZUl0ZW1zXT0icGFnZUl0ZW1zJCB8IGFzeW5jIlxuICAgICAgW2ZpbHRlcmVkSXRlbXNMZW5ndGhdPSJmaWx0ZXJlZEl0ZW1zTGVuZ3RoJCB8IGFzeW5jIlxuICAgICAgW2FsbEl0ZW1zTGVuZ3RoXT0iYWxsSXRlbXNMZW5ndGgkIHwgYXN5bmMiXG4gICAgICBbbG9hZGluZ109ImxvYWRpbmckIHwgYXN5bmMiXG4gICAgICBbcGFnaW5hdGlvbk9wdGlvbl09InBhZ2luYXRpb25PcHRpb24kIHwgYXN5bmMiXG4gICAgICBbcmVnZXhGaWx0ZXJdPSJyZWdleEZpbHRlciQgfCBhc3luYyJcbiAgICAgIFtzaG93R3JvdXBDb250cm9sXT0ic2hvd0dyb3VwQ29udHJvbCQgfCBhc3luYyJcbiAgICAgIFtzb3J0T3B0aW9uXT0ic29ydE9wdGlvbiQgfCBhc3luYyJcbiAgICAgIFt1c2VQYWdpbmF0aW9uXT0idXNlUGFnaW5hdGlvbiJcbiAgICAgIChvblNlbGVjdGlvblRvZ2dsZSk9Im9uUnVuU2VsZWN0aW9uVG9nZ2xlKCRldmVudCkiXG4gICAgICAob25QYWdlU2VsZWN0aW9uVG9nZ2xlKT0ib25QYWdlU2VsZWN0aW9uVG9nZ2xlKCRldmVudCkiXG4gICAgICAob25TZWxlY3RBbGxQYWdlcyk9Im9uU2VsZWN0QWxsUGFnZXMoKSJcbiAgICAgIChvblBhZ2luYXRpb25DaGFuZ2UpPSJvblBhZ2luYXRpb25DaGFuZ2UoJGV2ZW50KSJcbiAgICAgIChvblJlZ2V4RmlsdGVyQ2hhbmdlKT0ib25SZWdleEZpbHRlckNoYW5nZSgkZXZlbnQpIlxuICAgICAgKG9uU29ydENoYW5nZSk9Im9uU29ydENoYW5nZSgkZXZlbnQpIlxuICAgICAgKG9uUnVuQ29sb3JDaGFuZ2UpPSJvblJ1bkNvbG9yQ2hhbmdlKCRldmVudCkiXG4gICAgICAob25IcGFyYW1JbnRlcnZhbEZpbHRlckNoYW5nZWQpPSJvbkhwYXJhbUludGVydmFsRmlsdGVyQ2hhbmdlZCgkZXZlbnQpIlxuICAgICAgKG9uSHBhcmFtRGlzY3JldGVGaWx0ZXJDaGFuZ2VkKT0ib25IcGFyYW1EaXNjcmV0ZUZpbHRlckNoYW5nZWQoJGV2ZW50KSJcbiAgICAgIChvbk1ldHJpY0ZpbHRlckNoYW5nZWQpPSJvbk1ldHJpY0ZpbHRlckNoYW5nZWQoJGV2ZW50KSJcbiAgICA+PC9ydW5zLXRhYmxlLWNvbXBvbmVudD5cbiAgJyxob3N0OnsiW2NsYXNzLmZsZXgtbGF5b3V0XSI6InVzZUZsZXhpYmxlTGF5b3V0In0sc3R5bGVzOlsiXG4gICAgICA6aG9zdC5mbGV4LWxheW91dCB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICB9XG5cbiAgICAgIDpob3N0LmZsZXgtbGF5b3V0ID4gcnVucy10YWJsZS1jb21wb25lbnQge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgIH1cbiAgICAiXSxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6RWt9XX0pLHt1c2VGbGV4aWJsZUxheW91dDpbe3R5cGU6eV99XSx1c2VQYWdpbmF0aW9uOlt7dHlwZTp5X31dLGNvbHVtbnM6W3t0eXBlOnlffV0sZXhwZXJpbWVudElkczpbe3R5cGU6eV99XSxzaG93SHBhcmFtc0FuZE1ldHJpY3M6W3t0eXBlOnlffV19KTtjbGFzcyBFMnt9RTIuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEUyKX0sRTIuybVjbXA9VW8oe3R5cGU6RTIsc2VsZWN0b3JzOltbInJ1bnMtc2VsZWN0b3ItY29tcG9uZW50Il1dLGlucHV0czp7ZXhwZXJpbWVudElkczoiZXhwZXJpbWVudElkcyIsc2hvd0hwYXJhbXNBbmRNZXRyaWNzOiJzaG93SHBhcmFtc0FuZE1ldHJpY3MiLGNvbHVtbnM6ImNvbHVtbnMifSxkZWNsczoxLHZhcnM6NCxjb25zdHM6W1szLCJ1c2VGbGV4aWJsZUxheW91dCIsImNvbHVtbnMiLCJleHBlcmltZW50SWRzIiwic2hvd0hwYXJhbXNBbmRNZXRyaWNzIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJnd1KDAsInJ1bnMtdGFibGUiLDApLDImZSYmdnUoInVzZUZsZXhpYmxlTGF5b3V0IiwhMCkoImNvbHVtbnMiLG4uY29sdW1ucykoImV4cGVyaW1lbnRJZHMiLG4uZXhwZXJpbWVudElkcykoInNob3dIcGFyYW1zQW5kTWV0cmljcyIsbi5zaG93SHBhcmFtc0FuZE1ldHJpY3MpfSxkaXJlY3RpdmVzOltEMl0sc3R5bGVzOlsicnVucy10YWJsZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEUyLFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6InJ1bnMtc2VsZWN0b3ItY29tcG9uZW50Iix0ZW1wbGF0ZTonXG4gICAgPHJ1bnMtdGFibGVcbiAgICAgIFt1c2VGbGV4aWJsZUxheW91dF09InRydWUiXG4gICAgICBbY29sdW1uc109ImNvbHVtbnMiXG4gICAgICBbZXhwZXJpbWVudElkc109ImV4cGVyaW1lbnRJZHMiXG4gICAgICBbc2hvd0hwYXJhbXNBbmRNZXRyaWNzXT0ic2hvd0hwYXJhbXNBbmRNZXRyaWNzIlxuICAgID48L3J1bnMtdGFibGU+XG4gICcsc3R5bGVzOlsiXG4gICAgICBydW5zLXRhYmxlIHtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgfVxuICAgICJdLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2h9XX1dLG51bGwse2V4cGVyaW1lbnRJZHM6W3t0eXBlOnlffV0sc2hvd0hwYXJhbXNBbmRNZXRyaWNzOlt7dHlwZTp5X31dLGNvbHVtbnM6W3t0eXBlOnlffV19KTtjbGFzcyBBMntjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXQsdGhpcy5leHBlcmltZW50SWRzJD10aGlzLnN0b3JlLnNlbGVjdCh4RCkucGlwZShodCgodD0+bnVsbCE9dD90OltdKSkpLHRoaXMuY29sdW1ucyQ9dGhpcy5zdG9yZS5zZWxlY3QoeEQpLnBpcGUoaHQoKHQ9PltEUS5DSEVDS0JPWCxEUS5SVU5fTkFNRSx0JiZ0Lmxlbmd0aD4xP0RRLkVYUEVSSU1FTlRfTkFNRTpudWxsLERRLlJVTl9DT0xPUl0uZmlsdGVyKCh0PT5udWxsIT09dCkpKSkpfX1BMi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8QTIpKE11KEVrKSl9LEEyLsm1Y21wPVVvKHt0eXBlOkEyLHNlbGVjdG9yczpbWyJydW5zLXNlbGVjdG9yIl1dLGlucHV0czp7c2hvd0hwYXJhbXNBbmRNZXRyaWNzOiJzaG93SHBhcmFtc0FuZE1ldHJpY3MifSxkZWNsczozLHZhcnM6Nyxjb25zdHM6W1szLCJleHBlcmltZW50SWRzIiwiY29sdW1ucyIsInNob3dIcGFyYW1zQW5kTWV0cmljcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYod3UoMCwicnVucy1zZWxlY3Rvci1jb21wb25lbnQiLDApLE9iKDEsImFzeW5jIiksT2IoMiwiYXN5bmMiKSksMiZlJiZ2dSgiZXhwZXJpbWVudElkcyIsUGIoMSwzLG4uZXhwZXJpbWVudElkcyQpKSgiY29sdW1ucyIsUGIoMiw1LG4uY29sdW1ucyQpKSgic2hvd0hwYXJhbXNBbmRNZXRyaWNzIixuLnNob3dIcGFyYW1zQW5kTWV0cmljcyl9LGRpcmVjdGl2ZXM6W0UyXSxwaXBlczpbTXZdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoQTIsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoicnVucy1zZWxlY3RvciIsdGVtcGxhdGU6J1xuICAgIDxydW5zLXNlbGVjdG9yLWNvbXBvbmVudFxuICAgICAgW2V4cGVyaW1lbnRJZHNdPSJleHBlcmltZW50SWRzJCB8IGFzeW5jIlxuICAgICAgW2NvbHVtbnNdPSJjb2x1bW5zJCB8IGFzeW5jIlxuICAgICAgW3Nob3dIcGFyYW1zQW5kTWV0cmljc109InNob3dIcGFyYW1zQW5kTWV0cmljcyJcbiAgICA+PC9ydW5zLXNlbGVjdG9yLWNvbXBvbmVudD5cbiAgJyxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6RWt9XX0pLHtzaG93SHBhcmFtc0FuZE1ldHJpY3M6W3t0eXBlOnlffV19KTtjb25zdCBSMj1uZXcgV2Vha01hcDtjbGFzcyBUMntjb25zdHJ1Y3Rvcih0LGUpe3RoaXMucm9vdD10LHRoaXMuYnVmZmVyPWUsdGhpcy5kZXN0cm95ZWRUYXJnZXRzPW5ldyBTZXR9aW5pdGlhbGl6ZSh0KXt0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyfHwodGhpcy5pbnRlcnNlY3Rpb25DYWxsYmFjaz10LHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXI9bmV3IEludGVyc2VjdGlvbk9ic2VydmVyKHRoaXMub25DYXJkSW50ZXJzZWN0aW9uLmJpbmQodGhpcykse3RocmVzaG9sZDowLHJvb3Q6dGhpcy5yb290LHJvb3RNYXJnaW46dGhpcy5idWZmZXJ9KSl9YWRkKHQpe3RoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKSYmdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlci5vYnNlcnZlKHQpfXdpbGxEZXN0cm95KHQpe3RoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKSYmdGhpcy5kZXN0cm95ZWRUYXJnZXRzLmFkZCh0KX1lbnN1cmVJbml0aWFsaXplZCgpe2lmKCF0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyKXRocm93IG5ldyBFcnJvcigiQ2FyZE9ic2VydmVyIG11c3QgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSIpO3JldHVybiEwfW9uQ2FyZEludGVyc2VjdGlvbih0KXt0LnNvcnQoKCh0LGUpPT50LnRpbWUtZS50aW1lKSk7Y29uc3QgZT1uZXcgU2V0LG49bmV3IFNldDtmb3IoY29uc3QgbyBvZiB0KXtjb25zdCB0PW8udGFyZ2V0LGk9UjIuZ2V0KHQpO2lmKCFpKXRocm93IG5ldyBFcnJvcigiQSBDYXJkT2JzZXJ2ZXIgZWxlbWVudCBtdXN0IGJlIGFzc29jaWF0ZWQgd2l0aCBhIENhcmRJZCIpO28uaXNJbnRlcnNlY3Rpbmc/KGUuYWRkKGkpLG4uZGVsZXRlKGkpKTooZS5kZWxldGUoaSksbi5hZGQoaSkpLHRoaXMuZGVzdHJveWVkVGFyZ2V0cy5oYXModCkmJiFvLmlzSW50ZXJzZWN0aW5nJiYodGhpcy5kZXN0cm95ZWRUYXJnZXRzLmRlbGV0ZSh0KSx0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyLnVub2JzZXJ2ZSh0KSl9dGhpcy5pbnRlcnNlY3Rpb25DYWxsYmFjayhlLG4pfW9uQ2FyZEludGVyc2VjdGlvbkZvclRlc3QodCl7dGhpcy5vbkNhcmRJbnRlcnNlY3Rpb24odCl9fWNsYXNzIE4ye2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5ob3N0PXQsdGhpcy5zdG9yZT1lfW9uQ2FyZEludGVyc2VjdGlvbih0LGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goaVEoe2VudGVyZWRDYXJkczp0LGV4aXRlZENhcmRzOmV9KSl9bmdPbkluaXQoKXtSMi5zZXQodGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQsdGhpcy5jYXJkSWQpLHRoaXMuY2FyZE9ic2VydmVyfHwodGhpcy5jYXJkT2JzZXJ2ZXI9bmV3IFQyKSx0aGlzLmNhcmRPYnNlcnZlci5pbml0aWFsaXplKHRoaXMub25DYXJkSW50ZXJzZWN0aW9uLmJpbmQodGhpcykpLHRoaXMuY2FyZE9ic2VydmVyLmFkZCh0aGlzLmhvc3QubmF0aXZlRWxlbWVudCl9bmdPbkRlc3Ryb3koKXt0aGlzLmNhcmRPYnNlcnZlciYmdGhpcy5jYXJkT2JzZXJ2ZXIud2lsbERlc3Ryb3kodGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQpfWhvc3RGb3JUZXN0KCl7cmV0dXJuIHRoaXMuaG9zdH19TjIuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fE4yKShNdShjaCksTXUoRWspKX0sTjIuybVkaXI9Sm8oe3R5cGU6TjIsc2VsZWN0b3JzOltbIiIsImNhcmRMYXp5TG9hZGVyIiwiIl1dLGlucHV0czp7Y2FyZElkOlsiY2FyZExhenlMb2FkZXIiLCJjYXJkSWQiXSxjYXJkT2JzZXJ2ZXI6ImNhcmRPYnNlcnZlciJ9fSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihOMixbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJbY2FyZExhenlMb2FkZXJdIn1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmNofSx7dHlwZTpFa31dfSkse2NhcmRJZDpbe3R5cGU6eV8sYXJnczpbImNhcmRMYXp5TG9hZGVyIl19XSxjYXJkT2JzZXJ2ZXI6W3t0eXBlOnlffV19KTtjb25zdCBJMj0iL3NjYWxhcl9zdW1tYXJ5IjtmdW5jdGlvbiB6Mih0LGUpe2xldCBuPXQ7cmV0dXJuIGUmJnQuc3RhcnRzV2l0aChlKyIvIikmJihuPXQuc2xpY2UoZS5sZW5ndGgrMSkpLG4uZW5kc1dpdGgoSTIpJiYobj1uLnNsaWNlKDAsLUkyLmxlbmd0aCkpLG58fHR9ZnVuY3Rpb24gSDIodCxlKXtsZXQgbj0wLG89MDtmb3IoOzspe2lmKG49PT10Lmxlbmd0aClyZXR1cm4gbz09PWUubGVuZ3RoPzA6LTE7aWYobz09PWUubGVuZ3RoKXJldHVybiAxO2lmKEwyKHRbbl0pJiZMMihlW29dKSl7Y29uc3QgaT1uLGE9bztuPUYyKHQsbisxKSxvPUYyKGUsbysxKTtjb25zdCByPU51bWJlcih0LnNsaWNlKGksbikpLHM9TnVtYmVyKGUuc2xpY2UoYSxvKSk7aWYocjxzKXJldHVybi0xO2lmKHI+cylyZXR1cm4gMX1lbHNle2lmKEIyKHRbbl0pKXtpZighQjIoZVtvXSkpcmV0dXJuLTF9ZWxzZXtpZihCMihlW29dKSlyZXR1cm4gMTtpZih0W25dPGVbb10pcmV0dXJuLTE7aWYodFtuXT5lW29dKXJldHVybiAxfW4rKyxvKyt9fX1mdW5jdGlvbiBGMih0LGUpe2xldCBuOyEoZnVuY3Rpb24odCl7dFt0Lk5BVFVSQUw9MF09Ik5BVFVSQUwiLHRbdC5SRUFMPTFdPSJSRUFMIix0W3QuRVhQT05FTlRfU0lHTj0yXT0iRVhQT05FTlRfU0lHTiIsdFt0LkVYUE9ORU5UPTNdPSJFWFBPTkVOVCJ9KShufHwobj17fSkpO2xldCBvPW4uTkFUVVJBTCxpPWU7Zm9yKDtpPHQubGVuZ3RoO2krKylpZihvPT09bi5OQVRVUkFMKXtpZigiLiI9PT10W2ldKW89bi5SRUFMO2Vsc2UgaWYoImUiPT09dFtpXXx8IkUiPT09dFtpXSlvPW4uRVhQT05FTlRfU0lHTjtlbHNlIGlmKCFMMih0W2ldKSlicmVha31lbHNlIGlmKG89PT1uLlJFQUwpe2lmKCJlIj09PXRbaV18fCJFIj09PXRbaV0pbz1uLkVYUE9ORU5UX1NJR047ZWxzZSBpZighTDIodFtpXSkpYnJlYWt9ZWxzZSBpZihvPT09bi5FWFBPTkVOVF9TSUdOKXtpZighTDIodFtpXSkmJiIrIiE9PXRbaV0mJiItIiE9PXRbaV0pYnJlYWs7bz1uLkVYUE9ORU5UfWVsc2UgaWYobz09PW4uRVhQT05FTlQmJiFMMih0W2ldKSlicmVhaztyZXR1cm4gaX1mdW5jdGlvbiBMMih0KXtyZXR1cm4iMCI8PXQmJnQ8PSI5In1mdW5jdGlvbiBCMih0KXtyZXR1cm4iLyI9PT10fHxMMih0KX1mdW5jdGlvbiBWMih0LGUpezEmdCYmd3UoMCwibWF0LWljb24iLDYpfWZ1bmN0aW9uIGoyKHQsZSl7aWYoMSZ0JiYoT3UoMCwibWF0LW9wdGlvbiIsNyksTWYoMSksUHUoKSksMiZ0KXtjb25zdCB0PWUuJGltcGxpY2l0O3Z1KCJ2YWx1ZSIsdCksSmMoMSksdmYodCl9fWNsYXNzIFUye2NvbnN0cnVjdG9yKCl7dGhpcy5vblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2U9bmV3IEFifW9uQ29tcGxldGlvbkFjY2VwdGVkKHQpe3RoaXMub25SZWdleEZpbHRlclZhbHVlQ2hhbmdlLmVtaXQoKGZ1bmN0aW9uIGUodCl7cmV0dXJuIHQucmVwbGFjZSh3TCwiXFwkJiIpfSkodCkpfX1VMi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8VTIpfSxVMi7JtWNtcD1Vbyh7dHlwZTpVMixzZWxlY3RvcnM6W1sibWV0cmljcy10YWctZmlsdGVyLWNvbXBvbmVudCJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MiZlJiZhZigidmFsaWQiLG4uaXNSZWdleEZpbHRlclZhbGlkKX0saW5wdXRzOntyZWdleEZpbHRlclZhbHVlOiJyZWdleEZpbHRlclZhbHVlIixpc1JlZ2V4RmlsdGVyVmFsaWQ6ImlzUmVnZXhGaWx0ZXJWYWxpZCIsY29tcGxldGlvbnM6ImNvbXBsZXRpb25zIn0sb3V0cHV0czp7b25SZWdleEZpbHRlclZhbHVlQ2hhbmdlOiJvblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2UifSxkZWNsczo2LHZhcnM6NCxjb25zdHM6W1sxLCJ0YWctZmlsdGVyIl0sWyJwbGFjZWhvbGRlciIsIkZpbHRlciB0YWdzIChyZWdleCkiLDMsInZhbHVlIiwibWF0QXV0b2NvbXBsZXRlIiwiaW5wdXQiXSxbInN2Z0ljb24iLCJlcnJvcl8yNHB4IiwiY2xhc3MiLCJlcnJvci1pY29uIiwidGl0bGUiLCJJbnZhbGlkIHJlZ2V4IGZpbHRlci4gVGhlIHJlc3VsdCBtYXkgYmUgc3RhbGUuIiw0LCJuZ0lmIl0sWzMsIm9wdGlvblNlbGVjdGVkIl0sWyJmaWx0ZXJNYXRjaGVzIiwibWF0QXV0b2NvbXBsZXRlIl0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbInN2Z0ljb24iLCJlcnJvcl8yNHB4IiwidGl0bGUiLCJJbnZhbGlkIHJlZ2V4IGZpbHRlci4gVGhlIHJlc3VsdCBtYXkgYmUgc3RhbGUuIiwxLCJlcnJvci1pY29uIl0sWzMsInZhbHVlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJihPdSgwLCJkaXYiLDApLE91KDEsInRiLWZpbHRlci1pbnB1dCIsMSksTnUoImlucHV0IiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2UuZW1pdChlLnRhcmdldC52YWx1ZSl9KSksUHUoKSxXbSgyLFYyLDEsMCwibWF0LWljb24iLDIpLFB1KCksT3UoMywibWF0LWF1dG9jb21wbGV0ZSIsMyw0KSxOdSgib3B0aW9uU2VsZWN0ZWQiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLm9uQ29tcGxldGlvbkFjY2VwdGVkKGUub3B0aW9uLnZhbHVlKX0pKSxXbSg1LGoyLDIsMiwibWF0LW9wdGlvbiIsNSksUHUoKSksMiZlKXtjb25zdCB0PUdtKDQpO0pjKDEpLHZ1KCJ2YWx1ZSIsbi5yZWdleEZpbHRlclZhbHVlKSgibWF0QXV0b2NvbXBsZXRlIix0KSxKYygxKSx2dSgibmdJZiIsIW4uaXNSZWdleEZpbHRlclZhbGlkKSxKYygzKSx2dSgibmdGb3JPZiIsbi5jb21wbGV0aW9ucyl9fSxkaXJlY3RpdmVzOltnMSxhdixuMSxvdixjRyxQSF0sc3R5bGVzOlsnLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEycHg7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtYmFkZ2Utc21hbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6OXB4fS5tYXQtYmFkZ2UtbGFyZ2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweH0ubWF0LWgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1oZWFkbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMjRweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNnB4LzI4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNXB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC44MykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtaDZbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuNjcpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWJvZHktc3Ryb25nW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjAgMCAxMnB4fS5tYXQtc21hbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDEycHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjMwMCAxMTJweC8xMTJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDVlbTttYXJnaW46MCAwIDU2cHh9Lm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDU2cHgvNTZweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDJlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDQ1cHgvNDhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDA1ZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAzNHB4LzQwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDY0cHh9Lm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcmFpc2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0cm9rZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mbGF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmFiW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1taW5pLWZhYltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWJ1dHRvbi10b2dnbGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhcmQtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjIwcHh9Lm1hdC1jYXJkLXN1YnRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2hlY2tib3hbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNoZWNrYm94LWxheW91dFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoZWNrYm94LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoyNHB4fS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtdHJhaWxpbmctaWNvbi5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtcmVtb3ZlLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MThweH0ubWF0LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1oZWFkZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2VsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9vdGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2FsZW5kYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhbGVuZGFyLWJvZHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxM3B4fS5tYXQtY2FsZW5kYXItYm9keS1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FsZW5kYXItcGVyaW9kLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo0MDB9Lm1hdC1kaWFsb2ctdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjEyNTtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE1MCU7bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS41ZW07d2lkdGg6MS41ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNWVtIDA7Ym9yZGVyLXRvcDouODQzNzVlbSBzb2xpZCB0cmFuc3BhcmVudH0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6LTAuODQzNzVlbTtwYWRkaW5nLXRvcDouODQzNzVlbX0ubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo3NSU7bWFyZ2luLXRvcDouNjY2NjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjc5MTY2NjY2NjdlbSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNDM3NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMnB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjNlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM1MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjI4MTI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDouNTQxNjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjY2NjY2NjY2NjdlbSl9QG1lZGlhIHByaW50ey5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMmVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMWVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTJlbSkgc2NhbGUoMC43NSl9fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi4yNWVtIDAgLjc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMDkzNzVlbTttYXJnaW4tdG9wOi0wLjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjFlbSAwIDFlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS44NDM3NWVtO21hcmdpbi10b3A6LTAuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9aW5wdXQubWF0LWlucHV0LWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LTAuMDYyNWVtfS5tYXQtbWVudS1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtcGFnaW5hdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweH0ubWF0LXJhZGlvLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW19Lm1hdC1zbGlkZS10b2dnbGUtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdGVwcGVyLWhvcml6b250YWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXN0ZXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXN0ZXAtc3ViLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDpub3JtYWx9Lm1hdC1zdGVwLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LXN0ZXAtbGFiZWwtc2VsZWN0ZWRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRhYi1ncm91cFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdGFiLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10YWItbGlua1tfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowfS5tYXQtdG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB4O3BhZGRpbmctdG9wOjZweDtwYWRkaW5nLWJvdHRvbTo2cHh9Lm1hdC10b29sdGlwLWhhbmRzZXRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9Lm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE2cHh9Lm1hdC1vcHRncm91cC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1zaW1wbGUtc25hY2tiYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweH0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb25bX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjE7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo1MDB9Lm1hdC10cmVlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW5lc3RlZC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjQwMDtmb250LXNpemU6MTRweH0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmVtcHR5KXt0cmFuc2Zvcm06dHJhbnNsYXRlWigwKX0ubWF0LXJpcHBsZS5tYXQtcmlwcGxlLXVuYm91bmRlZFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItcmFkaXVzOjUwJTtwb2ludGVyLWV2ZW50czpub25lO3RyYW5zaXRpb246b3BhY2l0eSx0cmFuc2Zvcm0gMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpO3RyYW5zZm9ybTpzY2FsZSgwKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6bm9uZX0uY2RrLXZpc3VhbGx5LWhpZGRlbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjA7Y2xpcDpyZWN0KDAgMCAwIDApO2hlaWdodDoxcHg7bWFyZ2luOi0xcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwO291dGxpbmU6MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb2ludGVyLWV2ZW50czpub25lO3RvcDowO2xlZnQ6MDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTplbXB0eXtkaXNwbGF5Om5vbmV9LmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1wYW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czphdXRvO2JveC1zaXppbmc6Ym9yZGVyLWJveDt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O21heC13aWR0aDoxMDAlO21heC1oZWlnaHQ6MTAwJX0uY2RrLW92ZXJsYXktYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO3otaW5kZXg6MTAwMDtwb2ludGVyLWV2ZW50czphdXRvOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDt0cmFuc2l0aW9uOm9wYWNpdHkgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSk7b3BhY2l0eTowfS5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjF9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAuY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTouNn0uY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4zMil9LmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MH0uY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWluLXdpZHRoOjFweDttaW4taGVpZ2h0OjFweH0uY2RrLWdsb2JhbC1zY3JvbGxibG9ja1tfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7d2lkdGg6MTAwJTtvdmVyZmxvdy15OnNjcm9sbH1Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0e31Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZHt9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbHthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQgMHMgMW1zfS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOm5vdCg6LXdlYmtpdC1hdXRvZmlsbCl7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCAwcyAxbXN9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplW19uZ2NvbnRlbnQtJUNPTVAlXXtyZXNpemU6bm9uZX10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDphdXRvICFpbXBvcnRhbnQ7b3ZlcmZsb3c6aGlkZGVuICFpbXBvcnRhbnR9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZy1maXJlZm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDowICFpbXBvcnRhbnR9Lm1hdC1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtbWRjLWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9LnRhZy1maWx0ZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjpyZWxhdGl2ZX10Yi1maWx0ZXItaW5wdXRbX25nY29udGVudC0lQ09NUCVde2ZsZXgtZ3JvdzoxfVtfbmdob3N0LSVDT01QJV17Y29sb3I6IzIxMjEyMX1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV17Y29sb3I6I2ZmZn1bX25naG9zdC0lQ09NUCVdOm5vdCgudmFsaWQpe2NvbG9yOiNjNjI4Mjh9W19uZ2hvc3QtJUNPTVAlXTpub3QoLnZhbGlkKSAgIC5lcnJvci1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojYzYyODI4O3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjB9J10sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFUyLFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6Im1ldHJpY3MtdGFnLWZpbHRlci1jb21wb25lbnQiLHRlbXBsYXRlVXJsOiJmaWx0ZXJfaW5wdXRfY29tcG9uZW50Lm5nLmh0bWwiLHN0eWxlVXJsczpbImZpbHRlcl9pbnB1dF9jb21wb25lbnQuY3NzIl0sY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sbnVsbCx7cmVnZXhGaWx0ZXJWYWx1ZTpbe3R5cGU6eV99XSxpc1JlZ2V4RmlsdGVyVmFsaWQ6W3t0eXBlOkNfLGFyZ3M6WyJjbGFzcy52YWxpZCJdfSx7dHlwZTp5X31dLGNvbXBsZXRpb25zOlt7dHlwZTp5X31dLG9uUmVnZXhGaWx0ZXJWYWx1ZUNoYW5nZTpbe3R5cGU6X199XX0pO2NsYXNzIFcye2NvbnN0cnVjdG9yKHQpe3RoaXMuc3RvcmU9dCx0aGlzLnRhZ0ZpbHRlciQ9dGhpcy5zdG9yZS5zZWxlY3QoWFQpLHRoaXMuaXNUYWdGaWx0ZXJSZWdleFZhbGlkJD10aGlzLnRhZ0ZpbHRlciQucGlwZShodCgodD0+e3RyeXtyZXR1cm4gbmV3IFJlZ0V4cCh0KSwhMH1jYXRjaCh0KXtyZXR1cm4hMX19KSkpLHRoaXMuY29tcGxldGlvbnMkPXRoaXMuc3RvcmUuc2VsZWN0KEVUKS5waXBlKGh0KCh0PT50Lm1hcCgoKHt0YWc6dH0pPT50KSkpKSxkbigodD0+RHQoW1oodCksdGhpcy5zdG9yZS5zZWxlY3QoWFQpXSkpKSxodCgoKFt0LGVdKT0+e3RyeXtyZXR1cm5bdCxuZXcgUmVnRXhwKGUpXX1jYXRjaChlKXtyZXR1cm5bdCxudWxsXX19KSksR3QoKChbLHRdKT0+bnVsbCE9PXQpKSxodCgoKFt0LGVdKT0+dC5maWx0ZXIoKHQ9PmUudGVzdCh0KSkpLnNvcnQoSDIpKSkpfW9uVGFnRmlsdGVyQ2hhbmdlKHQpe3RoaXMuc3RvcmUuZGlzcGF0Y2goclEoe3RhZ0ZpbHRlcjp0fSkpfX1mdW5jdGlvbiBHMih0LGUpe2lmKDEmdCYmKE91KDAsInNwYW4iLDIpLE1mKDEpLFB1KCkpLDImdCl7Y29uc3QgdD1MdSgpO0pjKDEpLHZmKHQuZmlyc3RUZXh0UGFydCgpKX19VzIuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFcyKShNdShFaykpfSxXMi7JtWNtcD1Vbyh7dHlwZTpXMixzZWxlY3RvcnM6W1sibWV0cmljcy10YWctZmlsdGVyIl1dLGRlY2xzOjQsdmFyczo5LGNvbnN0czpbWzMsInJlZ2V4RmlsdGVyVmFsdWUiLCJpc1JlZ2V4RmlsdGVyVmFsaWQiLCJjb21wbGV0aW9ucyIsIm9uUmVnZXhGaWx0ZXJWYWx1ZUNoYW5nZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoT3UoMCwibWV0cmljcy10YWctZmlsdGVyLWNvbXBvbmVudCIsMCksTnUoIm9uUmVnZXhGaWx0ZXJWYWx1ZUNoYW5nZSIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25UYWdGaWx0ZXJDaGFuZ2UoZSl9KSksT2IoMSwiYXN5bmMiKSxPYigyLCJhc3luYyIpLE9iKDMsImFzeW5jIiksUHUoKSksMiZlJiZ2dSgicmVnZXhGaWx0ZXJWYWx1ZSIsUGIoMSwzLG4udGFnRmlsdGVyJCkpKCJpc1JlZ2V4RmlsdGVyVmFsaWQiLFBiKDIsNSxuLmlzVGFnRmlsdGVyUmVnZXhWYWxpZCQpKSgiY29tcGxldGlvbnMiLFBiKDMsNyxuLmNvbXBsZXRpb25zJCkpfSxkaXJlY3RpdmVzOltVMl0scGlwZXM6W012XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFcyLFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6Im1ldHJpY3MtdGFnLWZpbHRlciIsdGVtcGxhdGU6J1xuICAgIDxtZXRyaWNzLXRhZy1maWx0ZXItY29tcG9uZW50XG4gICAgICBbcmVnZXhGaWx0ZXJWYWx1ZV09InRhZ0ZpbHRlciQgfCBhc3luYyJcbiAgICAgIFtpc1JlZ2V4RmlsdGVyVmFsaWRdPSJpc1RhZ0ZpbHRlclJlZ2V4VmFsaWQkIHwgYXN5bmMiXG4gICAgICBbY29tcGxldGlvbnNdPSJjb21wbGV0aW9ucyQgfCBhc3luYyJcbiAgICAgIChvblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2UpPSJvblRhZ0ZpbHRlckNoYW5nZSgkZXZlbnQpIlxuICAgID48L21ldHJpY3MtdGFnLWZpbHRlci1jb21wb25lbnQ+XG4gICcsY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkVrfV19KSxudWxsKTtjbGFzcyBZMntwYXJzZVZhbHVlKCl7Y29uc3QgdD10aGlzLnZhbHVlLmxhc3RJbmRleE9mKCIvIik7cmV0dXJuLTE9PT10P3tmaXJzdDoiIixzZWNvbmQ6dGhpcy52YWx1ZX06e2ZpcnN0OnRoaXMudmFsdWUuc2xpY2UoMCx0KSxzZWNvbmQ6dGhpcy52YWx1ZS5zbGljZSh0KX19Zmlyc3RUZXh0UGFydCgpe3JldHVybiB0aGlzLnBhcnNlVmFsdWUoKS5maXJzdH1zZWNvbmRUZXh0UGFydCgpe3JldHVybiB0aGlzLnBhcnNlVmFsdWUoKS5zZWNvbmR9fWZ1bmN0aW9uIHEyKHQsZSxuKXtyZXR1cm4gZXx8bj9bbixlP2UubmFtZToiLi4uIl0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIi8iKTp0fVkyLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxZMil9LFkyLsm1Y21wPVVvKHt0eXBlOlkyLHNlbGVjdG9yczpbWyJ0Yi10cnVuY2F0ZWQtcGF0aCJdXSxpbnB1dHM6e3ZhbHVlOiJ2YWx1ZSJ9LGRlY2xzOjMsdmFyczoyLGNvbnN0czpbWyJjbGFzcyIsImZpcnN0LXRleHQtcGFydCIsNCwibmdJZiJdLFsxLCJzZWNvbmQtdGV4dC1wYXJ0Il0sWzEsImZpcnN0LXRleHQtcGFydCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoV20oMCxHMiwyLDEsInNwYW4iLDApLE91KDEsInNwYW4iLDEpLE1mKDIpLFB1KCkpLDImZSYmKHZ1KCJuZ0lmIixuLmZpcnN0VGV4dFBhcnQoKS5sZW5ndGg+MCksSmMoMiksdmYobi5zZWNvbmRUZXh0UGFydCgpKSl9LGRpcmVjdGl2ZXM6W2F2XSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWZsZXg7d2hpdGUtc3BhY2U6bm93cmFwfS5maXJzdC10ZXh0LXBhcnRbX25nY29udGVudC0lQ09NUCVde2ZsZXg6MSAxIDRjaDttYXgtd2lkdGg6bWF4LWNvbnRlbnR9LmZpcnN0LXRleHQtcGFydFtfbmdjb250ZW50LSVDT01QJV0sIC5zZWNvbmQtdGV4dC1wYXJ0W19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc30iXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoWTIsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoidGItdHJ1bmNhdGVkLXBhdGgiLHRlbXBsYXRlOidcbiAgICA8c3BhbiAqbmdJZj0iZmlyc3RUZXh0UGFydCgpLmxlbmd0aCA+IDAiIGNsYXNzPSJmaXJzdC10ZXh0LXBhcnQiPnt7XG4gICAgICBmaXJzdFRleHRQYXJ0KClcbiAgICB9fTwvc3Bhbj5cbiAgICA8c3BhbiBjbGFzcz0ic2Vjb25kLXRleHQtcGFydCI+e3sgc2Vjb25kVGV4dFBhcnQoKSB9fTwvc3Bhbj5cbiAgJyxzdHlsZVVybHM6WyJ0cnVuY2F0ZWRfcGF0aF9jb21wb25lbnQuY3NzIl19XX1dLG51bGwse3ZhbHVlOlt7dHlwZTp5X31dfSk7Y2xhc3MgWjJ7fVoyLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxaMil9LFoyLsm1Y21wPVVvKHt0eXBlOloyLHNlbGVjdG9yczpbWyJjYXJkLXJ1bi1uYW1lLWNvbXBvbmVudCJdXSxpbnB1dHM6e25hbWU6Im5hbWUifSxkZWNsczoxLHZhcnM6MSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiZNZigwKSwyJmUmJnZmKG4ubmFtZSl9LHN0eWxlczpbJy5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHh9Lm1hdC1oMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaGVhZGxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTVweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZ1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjA1ZW07bWFyZ2luOjAgMCA1NnB4fS5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAwNWVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXJhaXNlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdHJva2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmxhdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZhYltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbWluaS1mYWJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4fS5tYXQtY2FyZC1zdWJ0aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGVja2JveC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvb3Rlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgdHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIzZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LjU0MTY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2NjY2NjY3ZW0pfUBtZWRpYSBwcmludHsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjJlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouMjVlbSAwIC43NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxZW0gMCAxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMiksIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi0wLjA2MjVlbX0ubWF0LW1lbnUtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci12ZXJ0aWNhbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGFiLWxpbmtbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MH0ubWF0LXRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5Om5vbmV9LmNkay12aXN1YWxseS1oaWRkZW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjZ9LmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV0sIC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3hbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2tbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHt9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7fS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOi13ZWJraXQtYXV0b2ZpbGwpe2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZVtfbmdjb250ZW50LSVDT01QJV17cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fS5tYXQtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfVtfbmdob3N0LSVDT01QJV17Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9J10sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFoyLFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6ImNhcmQtcnVuLW5hbWUtY29tcG9uZW50Iix0ZW1wbGF0ZToie3sgbmFtZSB9fSIsc3R5bGVVcmxzOlsicnVuX25hbWVfY29tcG9uZW50LmNzcyJdLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2h9XX1dLG51bGwse25hbWU6W3t0eXBlOnlffV19KTtjbGFzcyBYMntjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXR9bmdPbkluaXQoKXt0aGlzLm5hbWUkPUR0KFt0aGlzLnN0b3JlLnNlbGVjdChsTix7cnVuSWQ6dGhpcy5ydW5JZH0pLHRoaXMuc3RvcmUuc2VsZWN0KHNOLHtydW5JZDp0aGlzLnJ1bklkfSksdGhpcy5zdG9yZS5zZWxlY3QoUEQpXSkucGlwZShodCgoKFt0LGUsbl0pPT5xMih0aGlzLnJ1bklkLHQsZT9uW2VdOm51bGwpKSkpfX1mdW5jdGlvbiBLMih0LGUpezEmdCYmd3UoMCwibWF0LXNwaW5uZXIiLDE1KX1mdW5jdGlvbiBKMih0LGUpe2lmKDEmdCYmKE91KDAsImRpdiIsMTMpLE1mKDEpLFdtKDIsSzIsMSwwLCJtYXQtc3Bpbm5lciIsMTQpLFB1KCkpLDImdCl7Y29uc3QgdD1MdSgpO0pjKDEpLHhmKCIgU3RlcCAiLHQuc3RlcFZhbHVlc1t0LnN0ZXBJbmRleF0sIiAiKSxKYygxKSx2dSgibmdJZiIsdC5sb2FkU3RhdGU9PT10LkRhdGFMb2FkU3RhdGUuTE9BRElORyl9fVgyLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxYMikoTXUoRWspKX0sWDIuybVjbXA9VW8oe3R5cGU6WDIsc2VsZWN0b3JzOltbImNhcmQtcnVuLW5hbWUiXV0saW5wdXRzOntydW5JZDoicnVuSWQifSxkZWNsczozLHZhcnM6Nixjb25zdHM6W1szLCJuYW1lIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJih3dSgwLCJjYXJkLXJ1bi1uYW1lLWNvbXBvbmVudCIsMCksT2IoMSwiYXN5bmMiKSxPYigyLCJhc3luYyIpKSwyJmUmJih2dSgibmFtZSIsUGIoMSwyLG4ubmFtZSQpKSxObSgidGl0bGUiLFBiKDIsNCxuLm5hbWUkKSkpfSxkaXJlY3RpdmVzOltaMl0scGlwZXM6W012XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFgyLFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6ImNhcmQtcnVuLW5hbWUiLHRlbXBsYXRlOidcbiAgICA8Y2FyZC1ydW4tbmFtZS1jb21wb25lbnRcbiAgICAgIFtuYW1lXT0ibmFtZSQgfCBhc3luYyJcbiAgICAgIFthdHRyLnRpdGxlXT0ibmFtZSQgfCBhc3luYyJcbiAgICA+PC9jYXJkLXJ1bi1uYW1lLWNvbXBvbmVudD5cbiAgJyxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6RWt9XX0pLHtydW5JZDpbe3R5cGU6eV99XX0pO2NvbnN0IFEyPWZ1bmN0aW9uKHQpe3JldHVybntmaWx0ZXI6dH19O2Z1bmN0aW9uICQyKHQsZSl7aWYoMSZ0KXtjb25zdCB0PUV1KCk7a3UoMCksT3UoMSwiZGl2IiwxNiksT3UoMiwibWF0LXNsaWRlciIsMTcpLE51KCJpbnB1dCIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIHJhKHQpLEx1KCkub25TbGlkZXJJbnB1dChuKX0pKSxQdSgpLFB1KCksT3UoMywiZGl2IiwxOCksd3UoNCwiaW1nIiwxOSksUHUoKSxTdSgpfWlmKDImdCl7Y29uc3QgdD1MdSgpO0pjKDIpLHZ1KCJkaXNhYmxlZCIsdC5zdGVwVmFsdWVzLmxlbmd0aDw9MSkoIm1pbiIsMCkoIm1heCIsdC5zdGVwVmFsdWVzLmxlbmd0aC0xKSgic3RlcCIsMSkoInRpY2tJbnRlcnZhbCIsMSkoInZhbHVlIix0LnN0ZXBJbmRleCksSmMoMiksV3UoImFsdCIsIkltYWdlIGF0IHN0ZXAgIix0LnN0ZXBWYWx1ZXNbdC5zdGVwSW5kZXhdLCIiKSxVdSgic3JjIix0LmltYWdlVXJsLE9sKSx2dSgibmdTdHlsZSIsZ2IoOSxRMix0LmNzc0ZpbHRlcigpKSl9fWZ1bmN0aW9uIHQ1KHQsZSl7MSZ0JiYoT3UoMCwiZGl2IiwyMSksTWYoMSwiIERhdGEgZmFpbGVkIHRvIGxvYWQuICIpLFB1KCkpfWZ1bmN0aW9uIGU1KHQsZSl7aWYoMSZ0JiZXbSgwLHQ1LDIsMCwiZGl2IiwyMCksMiZ0KXtjb25zdCB0PUx1KCk7dnUoIm5nSWYiLHQubG9hZFN0YXRlPT09dC5EYXRhTG9hZFN0YXRlLkZBSUxFRCl9fWNvbnN0IG41PWZ1bmN0aW9uKHQpe3JldHVybntiYWNrZ3JvdW5kQ29sb3I6dH19O2NsYXNzIG81e2NvbnN0cnVjdG9yKCl7dGhpcy5EYXRhTG9hZFN0YXRlPUJFLHRoaXMub25BY3R1YWxTaXplVG9nZ2xlPW5ldyBBYix0aGlzLnN0ZXBJbmRleENoYW5nZT1uZXcgQWIsdGhpcy5vblBpbkNsaWNrZWQ9bmV3IEFifWNzc0ZpbHRlcigpe3JldHVybmBjb250cmFzdCgke3RoaXMuY29udHJhc3RJbk1pbGxpLzEwfSUpIGJyaWdodG5lc3MoJHt0aGlzLmJyaWdodG5lc3NJbk1pbGxpLzFlM30pYH1vblNsaWRlcklucHV0KHQpe3RoaXMuc3RlcEluZGV4Q2hhbmdlLmVtaXQodC52YWx1ZSl9fW81Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxvNSl9LG81Lsm1Y21wPVVvKHt0eXBlOm81LHNlbGVjdG9yczpbWyJpbWFnZS1jYXJkLWNvbXBvbmVudCJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MiZlJiZhZigiYWN0dWFsLXNpemUiLG4uc2hvd0FjdHVhbFNpemUpfSxpbnB1dHM6e2xvYWRTdGF0ZToibG9hZFN0YXRlIix0aXRsZToidGl0bGUiLHRhZzoidGFnIixydW5JZDoicnVuSWQiLHNhbXBsZToic2FtcGxlIixpbWFnZVVybDoiaW1hZ2VVcmwiLHN0ZXBJbmRleDoic3RlcEluZGV4IixzdGVwVmFsdWVzOiJzdGVwVmFsdWVzIixicmlnaHRuZXNzSW5NaWxsaToiYnJpZ2h0bmVzc0luTWlsbGkiLGNvbnRyYXN0SW5NaWxsaToiY29udHJhc3RJbk1pbGxpIixzaG93QWN0dWFsU2l6ZToic2hvd0FjdHVhbFNpemUiLHJ1bkNvbG9yU2NhbGU6InJ1bkNvbG9yU2NhbGUiLGFsbG93VG9nZ2xlQWN0dWFsU2l6ZToiYWxsb3dUb2dnbGVBY3R1YWxTaXplIixpc1Bpbm5lZDoiaXNQaW5uZWQifSxvdXRwdXRzOntvbkFjdHVhbFNpemVUb2dnbGU6Im9uQWN0dWFsU2l6ZVRvZ2dsZSIsc3RlcEluZGV4Q2hhbmdlOiJzdGVwSW5kZXhDaGFuZ2UiLG9uUGluQ2xpY2tlZDoib25QaW5DbGlja2VkIn0sZGVjbHM6MTQsdmFyczoxMixjb25zdHM6ZnVuY3Rpb24oKXtsZXQgdCxlO3JldHVybiB0PSJ1bmRlZmluZWQiIT10eXBlb2YgbmdJMThuQ2xvc3VyZU1vZGUmJm5nSTE4bkNsb3N1cmVNb2RlP2dvb2cuZ2V0TXNnKCJQaW4gY2FyZCIpOiRsb2NhbGl6ZWA6QSBidXR0b24gdG8gcGluIGEgY2FyZC7ikJ9lNjY1ZGM3MTJiZDVmMThkNGRmYTNhMjllMTI1ZDU2NWNjNTFlMmY24pCfNzI4NDYwNjQyNjIzNDM3NTM0NDpQaW4gY2FyZGAsZT0idW5kZWZpbmVkIiE9dHlwZW9mIG5nSTE4bkNsb3N1cmVNb2RlJiZuZ0kxOG5DbG9zdXJlTW9kZT9nb29nLmdldE1zZygiVG9nZ2xlIGFjdHVhbCBpbWFnZSBzaXplIik6JGxvY2FsaXplYDpBIGJ1dHRvbiBvbiBhbiBpbWFnZSBjYXJkIHRoYXQgdG9nZ2xlcyBhY3R1YWwgaW1hZ2Ugc2l6ZS7ikJ8zY2EwNWVmM2E2ZTNhMzcwNjVmNWUwZjY5YzVkNWEyMTc4ZDkwNzkx4pCfNzYzNTEwMTkzNjY2NDc4OTE0MDpUb2dnbGUgYWN0dWFsIGltYWdlIHNpemVgLFtbMSwiaGVhZGluZyJdLFsxLCJ0YWciLDMsInRpdGxlIiwidmFsdWUiXSxbMSwicnVuIl0sWzEsImRvdCIsMywibmdTdHlsZSJdLFsxLCJydW4tdGV4dCIsMywicnVuSWQiXSxbImNsYXNzIiwic3RlcCIsNCwibmdJZiJdLFsxLCJjb250cm9scyJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsdCwxLCJwaW4tYnV0dG9uIiwzLCJjbGljayJdLFszLCJzdmdJY29uIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIixlLCJ0aXRsZSIsIlRvZ2dsZSBhY3R1YWwgaW1hZ2Ugc2l6ZSIsMywiZGlzYWJsZWQiLCJjbGljayJdLFsic3ZnSWNvbiIsImltYWdlX3NlYXJjaF8yNHB4Il0sWzQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsibm9JbWFnZURhdGEiLCIiXSxbMSwic3RlcCJdLFsiZGlhbWV0ZXIiLCIxOCIsNCwibmdJZiJdLFsiZGlhbWV0ZXIiLCIxOCJdLFsxLCJzbGlkZXItcm93Il0sWyJjb2xvciIsInByaW1hcnkiLDEsInN0ZXAtc2xpZGVyIiwzLCJkaXNhYmxlZCIsIm1pbiIsIm1heCIsInN0ZXAiLCJ0aWNrSW50ZXJ2YWwiLCJ2YWx1ZSIsImlucHV0Il0sWzEsImltZy1jb250YWluZXIiXSxbMywiYWx0Iiwic3JjIiwibmdTdHlsZSJdLFsiY2xhc3MiLCJlbXB0eS1tZXNzYWdlIiw0LCJuZ0lmIl0sWzEsImVtcHR5LW1lc3NhZ2UiXV19LHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJihPdSgwLCJkaXYiLDApLHd1KDEsInRiLXRydW5jYXRlZC1wYXRoIiwxKSxPdSgyLCJkaXYiLDIpLHd1KDMsInNwYW4iLDMpLHd1KDQsImNhcmQtcnVuLW5hbWUiLDQpLFB1KCksV20oNSxKMiwzLDIsImRpdiIsNSksT3UoNiwic3BhbiIsNiksT3UoNywiYnV0dG9uIiw3KSxOdSgiY2xpY2siLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub25QaW5DbGlja2VkLmVtaXQoIW4uaXNQaW5uZWQpfSkpLHd1KDgsIm1hdC1pY29uIiw4KSxQdSgpLE91KDksImJ1dHRvbiIsOSksTnUoImNsaWNrIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uQWN0dWFsU2l6ZVRvZ2dsZS5lbWl0KCl9KSksd3UoMTAsIm1hdC1pY29uIiwxMCksUHUoKSxQdSgpLFB1KCksV20oMTEsJDIsNSwxMSwibmctY29udGFpbmVyIiwxMSksV20oMTIsZTUsMSwxLCJuZy10ZW1wbGF0ZSIsbnVsbCwxMixLYikpLDImZSl7Y29uc3QgdD1HbSgxMyk7SmMoMSksVXUoInRpdGxlIixuLnRhZyksVXUoInZhbHVlIixuLnRpdGxlKSxKYygyKSx2dSgibmdTdHlsZSIsZ2IoMTAsbjUsbi5ydW5Db2xvclNjYWxlKG4ucnVuSWQpKSksSmMoMSksdnUoInJ1bklkIixuLnJ1bklkKSxKYygxKSx2dSgibmdJZiIsbnVsbCE9PW4uc3RlcEluZGV4JiZuLnN0ZXBJbmRleDxuLnN0ZXBWYWx1ZXMubGVuZ3RoKSxKYygyKSxObSgidGl0bGUiLG4uaXNQaW5uZWQ/IlVucGluIGNhcmQiOiJQaW4gY2FyZCIpLEpjKDEpLHZ1KCJzdmdJY29uIixuLmlzUGlubmVkPyJrZWVwXzI0cHgiOiJrZWVwX291dGxpbmVfMjRweCIpLEpjKDEpLHZ1KCJkaXNhYmxlZCIsIW4uYWxsb3dUb2dnbGVBY3R1YWxTaXplKSxKYygyKSx2dSgibmdJZiIsbnVsbCE9PW4uc3RlcEluZGV4JiZuLnN0ZXBJbmRleDxuLnN0ZXBWYWx1ZXMubGVuZ3RoKSgibmdJZkVsc2UiLHQpfX0sZGlyZWN0aXZlczpbWTIsZ3YsWDIsYXYsTkgsY0csUDEsdlhdLHN0eWxlczpbJy5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHh9Lm1hdC1oMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaGVhZGxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTVweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZ1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjA1ZW07bWFyZ2luOjAgMCA1NnB4fS5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAwNWVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXJhaXNlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdHJva2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmxhdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZhYltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbWluaS1mYWJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4fS5tYXQtY2FyZC1zdWJ0aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGVja2JveC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvb3Rlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgdHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIzZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LjU0MTY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2NjY2NjY3ZW0pfUBtZWRpYSBwcmludHsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjJlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouMjVlbSAwIC43NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxZW0gMCAxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMiksIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi0wLjA2MjVlbX0ubWF0LW1lbnUtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci12ZXJ0aWNhbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGFiLWxpbmtbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MH0ubWF0LXRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5Om5vbmV9LmNkay12aXN1YWxseS1oaWRkZW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjZ9LmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV0sIC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3hbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2tbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHt9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7fS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOi13ZWJraXQtYXV0b2ZpbGwpe2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZVtfbmdjb250ZW50LSVDT01QJV17cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fS5tYXQtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfVtfbmdob3N0LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtib3gtc2l6aW5nOmJvcmRlci1ib3g7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6YXV0bztwYWRkaW5nOjE2cHg7cGFkZGluZy10b3A6NHB4fS5hY3R1YWwtc2l6ZVtfbmdob3N0LSVDT01QJV17aGVpZ2h0OmF1dG99LmhlYWRpbmdbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1hcmVhczoidGFnIGNvbnRyb2xzIiAicnVuIHN0ZXAiO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgYXV0bztmb250LXNpemU6MTRweDttYXJnaW4tYm90dG9tOjRweDtwb3NpdGlvbjpyZWxhdGl2ZX0udGFnW19uZ2NvbnRlbnQtJUNPTVAlXXtncmlkLWFyZWE6dGFnO292ZXJmbG93OmhpZGRlbn0ucGluLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICBtYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjE4cHh9LnJ1bltfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOnJ1bjtkaXNwbGF5OmZsZXg7d2hpdGUtc3BhY2U6bm93cmFwfS5ydW5bX25nY29udGVudC0lQ09NUCVdICAgLmRvdFtfbmdjb250ZW50LSVDT01QJV17ZmxleDpub25lO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjEzcHg7aGVpZ2h0OjEzcHg7Ym9yZGVyLXJhZGl1czo1MCU7bWFyZ2luLXJpZ2h0OjRweH0ucnVuW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5ydW4tdGV4dFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7bWF4LXdpZHRoOjEyMHB4fS5zdGVwW19uZ2NvbnRlbnQtJUNPTVAlXXtncmlkLWFyZWE6c3RlcDtkaXNwbGF5OmZsZXh9LnN0ZXBbX25nY29udGVudC0lQ09NUCVdICAgbWF0LXNwaW5uZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi1sZWZ0OjRweDttYXJnaW4tcmlnaHQ6MH0ucnVuW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnN0ZXBbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7Zm9udC1zaXplOjEzcHg7aGVpZ2h0OjE1cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnJ1bltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ydW5bX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zdGVwW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnN0ZXBbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS5jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTt3aGl0ZS1zcGFjZTpub3dyYXA7Z3JpZC1hcmVhOmNvbnRyb2xzO2p1c3RpZnktc2VsZjpmbGV4LWVuZDtmbGV4LXNocmluazowO21hcmdpbi1yaWdodDotMTJweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuY29udHJvbHNbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuY29udHJvbHNbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS5pbWctY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjEgMSAwO292ZXJmbG93LXk6YXV0bztwb3NpdGlvbjpyZWxhdGl2ZX0uaW1nLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICBpbWdbX25nY29udGVudC0lQ09NUCVde2ltYWdlLXJlbmRlcmluZzotbW96LWNyaXNwLWVkZ2VzO2ltYWdlLXJlbmRlcmluZzpwaXhlbGF0ZWR9LmFjdHVhbC1zaXplW19uZ2hvc3QtJUNPTVAlXSAgIC5pbWctY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzphdXRvO2ZsZXg6bm9uZX1bX25naG9zdC0lQ09NUCVdOm5vdCguYWN0dWFsLXNpemUpICAgaW1nW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTttYXgtaGVpZ2h0OjEwMCU7bWF4LXdpZHRoOjEwMCU7d2lkdGg6YXV0bztoZWlnaHQ6MTAwJTtvYmplY3QtZml0OmNvbnRhaW59LnNsaWRlci1yb3dbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7aGVpZ2h0OjI0cHh9LnN0ZXAtc2xpZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjF9W19uZ2hvc3QtJUNPTVAlXSAgICAgLm1hdC1zbGlkZXItbWluLXZhbHVlIC5tYXQtc2xpZGVyLXRodW1ie2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMH0uZW1wdHktbWVzc2FnZVtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDoxZW07Zm9udC1zaXplOjEzcHh9J10sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKG81LFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6ImltYWdlLWNhcmQtY29tcG9uZW50Iix0ZW1wbGF0ZVVybDoiaW1hZ2VfY2FyZF9jb21wb25lbnQubmcuaHRtbCIsc3R5bGVVcmxzOlsiaW1hZ2VfY2FyZF9jb21wb25lbnQuY3NzIl0saG9zdDp7IltjbGFzcy5hY3R1YWwtc2l6ZV0iOiJzaG93QWN0dWFsU2l6ZSJ9LGNoYW5nZURldGVjdGlvbjp4by5PblB1c2h9XX1dLG51bGwse2xvYWRTdGF0ZTpbe3R5cGU6eV99XSx0aXRsZTpbe3R5cGU6eV99XSx0YWc6W3t0eXBlOnlffV0scnVuSWQ6W3t0eXBlOnlffV0sc2FtcGxlOlt7dHlwZTp5X31dLGltYWdlVXJsOlt7dHlwZTp5X31dLHN0ZXBJbmRleDpbe3R5cGU6eV99XSxzdGVwVmFsdWVzOlt7dHlwZTp5X31dLGJyaWdodG5lc3NJbk1pbGxpOlt7dHlwZTp5X31dLGNvbnRyYXN0SW5NaWxsaTpbe3R5cGU6eV99XSxzaG93QWN0dWFsU2l6ZTpbe3R5cGU6eV99XSxydW5Db2xvclNjYWxlOlt7dHlwZTp5X31dLGFsbG93VG9nZ2xlQWN0dWFsU2l6ZTpbe3R5cGU6eV99XSxpc1Bpbm5lZDpbe3R5cGU6eV99XSxvbkFjdHVhbFNpemVUb2dnbGU6W3t0eXBlOl9ffV0sc3RlcEluZGV4Q2hhbmdlOlt7dHlwZTpfX31dLG9uUGluQ2xpY2tlZDpbe3R5cGU6X199XX0pO2NsYXNzIGk1e2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5zdG9yZT10LHRoaXMuZGF0YVNvdXJjZT1lLHRoaXMuZnVsbFdpZHRoQ2hhbmdlZD1uZXcgQWIsdGhpcy5waW5TdGF0ZUNoYW5nZWQ9bmV3IEFiLHRoaXMuYnJpZ2h0bmVzc0luTWlsbGkkPXRoaXMuc3RvcmUuc2VsZWN0KFlUKSx0aGlzLmNvbnRyYXN0SW5NaWxsaSQ9dGhpcy5zdG9yZS5zZWxlY3QocVQpLHRoaXMuYWN0dWFsU2l6ZUdsb2JhbFNldHRpbmckPXRoaXMuc3RvcmUuc2VsZWN0KFpUKSx0aGlzLnNob3dBY3R1YWxTaXplPSExLHRoaXMuYWN0dWFsU2l6ZVVpVG9nZ2xlZD0hMSx0aGlzLmFjdHVhbFNpemVVaVRvZ2dsZVN1YmplY3Q9bmV3IEgodGhpcy5hY3R1YWxTaXplVWlUb2dnbGVkKSx0aGlzLm5nVW5zdWJzY3JpYmU9bmV3IHh9b25TdGVwSW5kZXhDaGFuZ2VkKHQpe3RoaXMuc3RvcmUuZGlzcGF0Y2goYVEoe2NhcmRJZDp0aGlzLmNhcmRJZCxzdGVwSW5kZXg6dH0pKX1pc0ltYWdlQ2FyZE1ldGFkYXRhKHQpe2NvbnN0e3BsdWdpbjplfT10O3JldHVybiBlPT09c1IuSU1BR0VTfW9uQWN0dWFsU2l6ZVRvZ2dsZSgpe3RoaXMuYWN0dWFsU2l6ZVVpVG9nZ2xlZD0hdGhpcy5hY3R1YWxTaXplVWlUb2dnbGVkLHRoaXMuYWN0dWFsU2l6ZVVpVG9nZ2xlU3ViamVjdC5uZXh0KHRoaXMuYWN0dWFsU2l6ZVVpVG9nZ2xlZCl9bmdPbkluaXQoKXtEdChbdGhpcy5hY3R1YWxTaXplR2xvYmFsU2V0dGluZyQsdGhpcy5hY3R1YWxTaXplVWlUb2dnbGVTdWJqZWN0XSkucGlwZSh1bih0aGlzLm5nVW5zdWJzY3JpYmUpLF9uKCgoW3QsZV0pPT57dGhpcy5zaG93QWN0dWFsU2l6ZT10fHxlLHRoaXMuZnVsbFdpZHRoQ2hhbmdlZC5lbWl0KHRoaXMuc2hvd0FjdHVhbFNpemUpfSkpKS5zdWJzY3JpYmUoKCgpPT57fSkpO2NvbnN0IHQ9dGhpcy5zdG9yZS5zZWxlY3Qoa1QsdGhpcy5jYXJkSWQpLnBpcGUoR3QoKHQ9PiEhdCYmdGhpcy5pc0ltYWdlQ2FyZE1ldGFkYXRhKHQpKSksaHQoKHQ9PnQpKSxhbigxKSksZT1EdChbdCx0aGlzLnN0b3JlLnNlbGVjdChQVCx0aGlzLmNhcmRJZCldKS5waXBlKGh0KCgoW3QsZV0pPT57Y29uc3Qgbj10LnJ1bklkO3JldHVybiBlJiZlLmhhc093blByb3BlcnR5KG4pP2Vbbl06W119KSksa2UoKCh0LGUpPT50Lmxlbmd0aD09PWUubGVuZ3RoJiYwPT09dC5sZW5ndGh8fHQ9PT1lKSksYW4oMSkpO3RoaXMuc3RlcEluZGV4JD10aGlzLnN0b3JlLnNlbGVjdChBVCx0aGlzLmNhcmRJZCksdGhpcy5sb2FkU3RhdGUkPXRoaXMuc3RvcmUuc2VsZWN0KE9ULHRoaXMuY2FyZElkKTtjb25zdCBuPUR0KFtlLHRoaXMuc3RlcEluZGV4JF0pLnBpcGUoaHQoKChbdCxlXSk9Pm51bGwhPT1lJiZ0W2VdP3RbZV06bnVsbCkpKTt0aGlzLnRhZyQ9dC5waXBlKGh0KCh0PT50LnRhZykpKSx0aGlzLnRpdGxlJD10aGlzLnRhZyQucGlwZShodCgodD0+ejIodCx0aGlzLmdyb3VwTmFtZSkpKSksdGhpcy5ydW5JZCQ9dC5waXBlKGh0KCh0PT50LnJ1bklkKSkpLHRoaXMuc2FtcGxlJD10LnBpcGUoaHQoKHQ9PnQuc2FtcGxlKSkpLHRoaXMuaW1hZ2VVcmwkPW4ucGlwZShodCgodD0+dD90aGlzLmRhdGFTb3VyY2UuaW1hZ2VVcmwodC5pbWFnZUlkKTpudWxsKSkpLHRoaXMuc3RlcFZhbHVlcyQ9ZS5waXBlKGh0KCh0PT50Lm1hcCgodD0+dC5zdGVwKSkpKSksdGhpcy5pc1Bpbm5lZCQ9dGhpcy5zdG9yZS5zZWxlY3QoSVQsdGhpcy5jYXJkSWQpfW5nT25EZXN0cm95KCl7dGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKSx0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKX19dmFyIGE1LHI1LHM1O2Z1bmN0aW9uIGw1KHQsZSl7MSZ0JiYoT3UoMCwic3BhbiIpLE1mKDEsInNjYWxhciIpLFB1KCkpfWZ1bmN0aW9uIGM1KHQsZSl7MSZ0JiYoT3UoMCwic3BhbiIpLE1mKDEsImhpc3RvZ3JhbSIpLFB1KCkpfWZ1bmN0aW9uIGQ1KHQsZSl7MSZ0JiYoT3UoMCwic3BhbiIpLE1mKDEsInVua25vd24iKSxQdSgpKX1mdW5jdGlvbiBwNSh0LGUpe2lmKDEmdCYmKGt1KDAsMTMpLFdtKDEsbDUsMiwwLCJzcGFuIiwxNCksV20oMixjNSwyLDAsInNwYW4iLDE0KSxXbSgzLGQ1LDIsMCwic3BhbiIsMTUpLFN1KCkpLDImdCl7Y29uc3QgdD1MdSgyKTt2dSgibmdTd2l0Y2giLHQuY2FyZE1ldGFkYXRhLnBsdWdpbiksSmMoMSksdnUoIm5nU3dpdGNoQ2FzZSIsdC5QbHVnaW5UeXBlLlNDQUxBUlMpLEpjKDEpLHZ1KCJuZ1N3aXRjaENhc2UiLHQuUGx1Z2luVHlwZS5ISVNUT0dSQU1TKX19ZnVuY3Rpb24gbTUodCxlKXsxJnQmJkR1KDApfWZ1bmN0aW9uIHU1KHQsZSl7aWYoMSZ0JiYoT3UoMCwib3B0aW9uIiwxNiksTWYoMSksUHUoKSksMiZ0KXtjb25zdCB0PWUuJGltcGxpY2l0O3Z1KCJ2YWx1ZSIsdC5pZCksSmMoMSksdmYodC5uYW1lKX19ZnVuY3Rpb24gZjUodCxlKXtpZigxJnQpe2NvbnN0IHQ9RXUoKTtrdSgwKSxPdSgxLCJoMiIpLFdtKDIscDUsNCwzLCJuZy10ZW1wbGF0ZSIsbnVsbCwyLEtiKSxPdSg0LCJzcGFuIiksTWYoNSwiRG93bmxvYWTCoCIpLFB1KCksV20oNixtNSwxLDAsIm5nLWNvbnRhaW5lciIsMyksT3UoNywic3BhbiIpLE1mKDgsIsKgZGF0YSBmb3LCoCIpLFB1KCksT3UoOSwiY29kZSIsNCksTWYoMTApLFB1KCksUHUoKSxPdSgxMSwibWF0LWRpYWxvZy1jb250ZW50IiksT3UoMTIsIm1hdC1mb3JtLWZpZWxkIiw1KSxPdSgxMywibWF0LWxhYmVsIiksTWYoMTQsIlNlbGVjdCBhIHJ1biB0byBkb3dubG9hZCBhIGRhdGEgZm9yIGEgc2VyaWVzIiksUHUoKSxPdSgxNSwic2VsZWN0Iiw2KSxOdSgiY2hhbmdlIiwoZnVuY3Rpb24gZShuKXtyZXR1cm4gcmEodCksTHUoKS5ydW5TZWxlY3RlZC5lbWl0KG4udGFyZ2V0LnZhbHVlKX0pKSxPdSgxNiwib3B0aW9uIiw3KSxNZigxNywiLSIpLFB1KCksV20oMTgsdTUsMiwyLCJvcHRpb24iLDgpLFB1KCksUHUoKSxPdSgxOSwiZGl2Iiw5KSxPdSgyMCwic3BhbiIpLE1mKDIxLCJEb3dubG9hZCBhc+KApiIpLFB1KCksTWYoMjIsIsKgIiksT3UoMjMsImEiLDEwKSxNZigyNCwiSlNPTiIpLFB1KCksT3UoMjUsImEiLDEwKSxNZigyNiwiQ1NWIiksUHUoKSxQdSgpLFB1KCksT3UoMjcsIm1hdC1kaWFsb2ctYWN0aW9ucyIsMTEpLE91KDI4LCJidXR0b24iLDEyKSxNZigyOSwiQ2xvc2UiKSxQdSgpLFB1KCksU3UoKX1pZigyJnQpe2NvbnN0IHQ9R20oMyksZT1MdSgpO0pjKDYpLHZ1KCJuZ1RlbXBsYXRlT3V0bGV0Iix0KSxKYygzKSx2dSgidGl0bGUiLGUuY2FyZE1ldGFkYXRhLnRhZyksSmMoMSksdmYoZS5jYXJkTWV0YWRhdGEudGFnKSxKYyg1KSx2dSgidmFsdWUiLGUuc2VsZWN0ZWRSdW5JZHx8IiIpLEpjKDEpLHZ1KCJ2YWx1ZSIsIiIpLEpjKDIpLHZ1KCJuZ0Zvck9mIixlLnJ1bnMpLEpjKDUpLHZ1KCJkaXNhYmxlZCIsIWUuZG93bmxvYWRVcmxKc29uKSgiZG93bmxvYWQiLGUuZ2V0RG93bmxvYWROYW1lKCJqc29uIikpLE5tKCJocmVmIixlLmRvd25sb2FkVXJsSnNvbixPbCksSmMoMiksdnUoImRpc2FibGVkIiwhZS5kb3dubG9hZFVybENzdikoImRvd25sb2FkIixlLmdldERvd25sb2FkTmFtZSgiY3N2IikpLE5tKCJocmVmIixlLmRvd25sb2FkVXJsQ3N2LE9sKX19ZnVuY3Rpb24gZzUodCxlKXsxJnQmJk1mKDAsIkxvYWRpbmcuLi4iKX1pNS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8aTUpKE11KEVrKSxNdShoUikpfSxpNS7JtWNtcD1Vbyh7dHlwZTppNSxzZWxlY3RvcnM6W1siaW1hZ2UtY2FyZCJdXSxpbnB1dHM6e2NhcmRJZDoiY2FyZElkIixncm91cE5hbWU6Imdyb3VwTmFtZSIscnVuQ29sb3JTY2FsZToicnVuQ29sb3JTY2FsZSJ9LG91dHB1dHM6e2Z1bGxXaWR0aENoYW5nZWQ6ImZ1bGxXaWR0aENoYW5nZWQiLHBpblN0YXRlQ2hhbmdlZDoicGluU3RhdGVDaGFuZ2VkIn0sZGVjbHM6MTMsdmFyczozOCxjb25zdHM6W1szLCJsb2FkU3RhdGUiLCJ0aXRsZSIsInRhZyIsInJ1bklkIiwic2FtcGxlIiwiaW1hZ2VVcmwiLCJzdGVwSW5kZXgiLCJzdGVwVmFsdWVzIiwiYnJpZ2h0bmVzc0luTWlsbGkiLCJjb250cmFzdEluTWlsbGkiLCJydW5Db2xvclNjYWxlIiwic2hvd0FjdHVhbFNpemUiLCJhbGxvd1RvZ2dsZUFjdHVhbFNpemUiLCJpc1Bpbm5lZCIsInN0ZXBJbmRleENoYW5nZSIsIm9uQWN0dWFsU2l6ZVRvZ2dsZSIsIm9uUGluQ2xpY2tlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoT3UoMCwiaW1hZ2UtY2FyZC1jb21wb25lbnQiLDApLE51KCJzdGVwSW5kZXhDaGFuZ2UiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLm9uU3RlcEluZGV4Q2hhbmdlZChlKX0pKSgib25BY3R1YWxTaXplVG9nZ2xlIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uQWN0dWFsU2l6ZVRvZ2dsZSgpfSkpKCJvblBpbkNsaWNrZWQiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLnBpblN0YXRlQ2hhbmdlZC5lbWl0KGUpfSkpLE9iKDEsImFzeW5jIiksT2IoMiwiYXN5bmMiKSxPYigzLCJhc3luYyIpLE9iKDQsImFzeW5jIiksT2IoNSwiYXN5bmMiKSxPYig2LCJhc3luYyIpLE9iKDcsImFzeW5jIiksT2IoOCwiYXN5bmMiKSxPYig5LCJhc3luYyIpLE9iKDEwLCJhc3luYyIpLE9iKDExLCJhc3luYyIpLE9iKDEyLCJhc3luYyIpLFB1KCkpLDImZSYmdnUoImxvYWRTdGF0ZSIsUGIoMSwxNCxuLmxvYWRTdGF0ZSQpKSgidGl0bGUiLFBiKDIsMTYsbi50aXRsZSQpKSgidGFnIixQYigzLDE4LG4udGFnJCkpKCJydW5JZCIsUGIoNCwyMCxuLnJ1bklkJCkpKCJzYW1wbGUiLFBiKDUsMjIsbi5zYW1wbGUkKSkoImltYWdlVXJsIixQYig2LDI0LG4uaW1hZ2VVcmwkKSkoInN0ZXBJbmRleCIsUGIoNywyNixuLnN0ZXBJbmRleCQpKSgic3RlcFZhbHVlcyIsUGIoOCwyOCxuLnN0ZXBWYWx1ZXMkKSkoImJyaWdodG5lc3NJbk1pbGxpIixQYig5LDMwLG4uYnJpZ2h0bmVzc0luTWlsbGkkKSkoImNvbnRyYXN0SW5NaWxsaSIsUGIoMTAsMzIsbi5jb250cmFzdEluTWlsbGkkKSkoInJ1bkNvbG9yU2NhbGUiLG4ucnVuQ29sb3JTY2FsZSkoInNob3dBY3R1YWxTaXplIixuLnNob3dBY3R1YWxTaXplKSgiYWxsb3dUb2dnbGVBY3R1YWxTaXplIiwhMT09PVBiKDExLDM0LG4uYWN0dWFsU2l6ZUdsb2JhbFNldHRpbmckKSkoImlzUGlubmVkIixQYigxMiwzNixuLmlzUGlubmVkJCkpfSxkaXJlY3RpdmVzOltvNV0scGlwZXM6W012XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGk1LFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6ImltYWdlLWNhcmQiLHRlbXBsYXRlOidcbiAgICA8aW1hZ2UtY2FyZC1jb21wb25lbnRcbiAgICAgIFtsb2FkU3RhdGVdPSJsb2FkU3RhdGUkIHwgYXN5bmMiXG4gICAgICBbdGl0bGVdPSJ0aXRsZSQgfCBhc3luYyJcbiAgICAgIFt0YWddPSJ0YWckIHwgYXN5bmMiXG4gICAgICBbcnVuSWRdPSJydW5JZCQgfCBhc3luYyJcbiAgICAgIFtzYW1wbGVdPSJzYW1wbGUkIHwgYXN5bmMiXG4gICAgICBbaW1hZ2VVcmxdPSJpbWFnZVVybCQgfCBhc3luYyJcbiAgICAgIFtzdGVwSW5kZXhdPSJzdGVwSW5kZXgkIHwgYXN5bmMiXG4gICAgICBbc3RlcFZhbHVlc109InN0ZXBWYWx1ZXMkIHwgYXN5bmMiXG4gICAgICAoc3RlcEluZGV4Q2hhbmdlKT0ib25TdGVwSW5kZXhDaGFuZ2VkKCRldmVudCkiXG4gICAgICBbYnJpZ2h0bmVzc0luTWlsbGldPSJicmlnaHRuZXNzSW5NaWxsaSQgfCBhc3luYyJcbiAgICAgIFtjb250cmFzdEluTWlsbGldPSJjb250cmFzdEluTWlsbGkkIHwgYXN5bmMiXG4gICAgICBbcnVuQ29sb3JTY2FsZV09InJ1bkNvbG9yU2NhbGUiXG4gICAgICBbc2hvd0FjdHVhbFNpemVdPSJzaG93QWN0dWFsU2l6ZSJcbiAgICAgIFthbGxvd1RvZ2dsZUFjdHVhbFNpemVdPSIoYWN0dWFsU2l6ZUdsb2JhbFNldHRpbmckIHwgYXN5bmMpID09PSBmYWxzZSJcbiAgICAgIFtpc1Bpbm5lZF09ImlzUGlubmVkJCB8IGFzeW5jIlxuICAgICAgKG9uQWN0dWFsU2l6ZVRvZ2dsZSk9Im9uQWN0dWFsU2l6ZVRvZ2dsZSgpIlxuICAgICAgKG9uUGluQ2xpY2tlZCk9InBpblN0YXRlQ2hhbmdlZC5lbWl0KCRldmVudCkiXG4gICAgPjwvaW1hZ2UtY2FyZC1jb21wb25lbnQ+XG4gICcsY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkVrfSx7dHlwZTpoUn1dfSkse2NhcmRJZDpbe3R5cGU6eV99XSxncm91cE5hbWU6W3t0eXBlOnlffV0scnVuQ29sb3JTY2FsZTpbe3R5cGU6eV99XSxmdWxsV2lkdGhDaGFuZ2VkOlt7dHlwZTpfX31dLHBpblN0YXRlQ2hhbmdlZDpbe3R5cGU6X199XX0pLChmdW5jdGlvbih0KXt0W3QuU1ZHPTBdPSJTVkciLHRbdC5XRUJHTD0xXT0iV0VCR0wifSkoYTV8fChhNT17fSkpLChmdW5jdGlvbih0KXt0W3QuTElORUFSPTBdPSJMSU5FQVIiLHRbdC5MT0cxMD0xXT0iTE9HMTAiLHRbdC5USU1FPTJdPSJUSU1FIn0pKHI1fHwocjU9e30pKTtjbGFzcyBoNXtjb25zdHJ1Y3Rvcigpe3RoaXMucnVuU2VsZWN0ZWQ9bmV3IEFiLHRoaXMuUGx1Z2luVHlwZT1zUn1nZXREb3dubG9hZE5hbWUodCl7Y29uc3QgZT10aGlzLnJ1bnMuZmluZCgodD0+dC5pZD09PXRoaXMuc2VsZWN0ZWRSdW5JZCkpO3JldHVybiBlP2Ake2UubmFtZX0uJHt0fWA6IiJ9fWg1Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxoNSl9LGg1Lsm1Y21wPVVvKHt0eXBlOmg1LHNlbGVjdG9yczpbWyJkYXRhX2Rvd25sb2FkX2RpYWxvZ19jb21wb25lbnQiXV0saW5wdXRzOntjYXJkTWV0YWRhdGE6ImNhcmRNZXRhZGF0YSIscnVuczoicnVucyIsc2VsZWN0ZWRSdW5JZDoic2VsZWN0ZWRSdW5JZCIsZG93bmxvYWRVcmxDc3Y6ImRvd25sb2FkVXJsQ3N2Iixkb3dubG9hZFVybEpzb246ImRvd25sb2FkVXJsSnNvbiJ9LG91dHB1dHM6e3J1blNlbGVjdGVkOiJydW5TZWxlY3RlZCJ9LGRlY2xzOjMsdmFyczoyLGNvbnN0czpbWzQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsibm9DYXJkTWV0YWRhdGEiLCIiXSxbImRhdGFOYW1lIiwiIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiXSxbMSwidGFnLW5hbWUiLDMsInRpdGxlIl0sWyJhcHBlYXJhbmNlIiwiZmlsbCIsMSwicnVuLXNlbGVjdG9yIl0sWyJtYXROYXRpdmVDb250cm9sIiwiIiwibmFtZSIsInJ1biIsImNka0ZvY3VzSW5pdGlhbCIsIiIsInJlcXVpcmVkIiwiIiwzLCJ2YWx1ZSIsImNoYW5nZSJdLFsic2VsZWN0ZWQiLCIiLDMsInZhbHVlIl0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiZG93bmxvYWQtY29udHJvbHMiXSxbIm1hdC1zdHJva2VkLWJ1dHRvbiIsIiIsMywiZGlzYWJsZWQiLCJkb3dubG9hZCJdLFsiYWxpZ24iLCJlbmQiXSxbIm1hdC1idXR0b24iLCIiLCJtYXQtZGlhbG9nLWNsb3NlIiwiIl0sWzMsIm5nU3dpdGNoIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFs0LCJOZ1N3aXRjaERlZmF1bHQiXSxbMywidmFsdWUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pe2lmKDEmZSYmKFdtKDAsZjUsMzAsMTIsIm5nLWNvbnRhaW5lciIsMCksV20oMSxnNSwxLDAsIm5nLXRlbXBsYXRlIixudWxsLDEsS2IpKSwyJmUpe2NvbnN0IHQ9R20oMik7dnUoIm5nSWYiLG4uY2FyZE1ldGFkYXRhKSgibmdJZkVsc2UiLHQpfX0sZGlyZWN0aXZlczpbYXYsaHYsVlcsX1YsY1YsRVksX1UseFUsb3YsSUgsalcsTkgsTFcsY3YsZHZdLHN0eWxlczpbJy5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHh9Lm1hdC1oMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaGVhZGxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTVweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZ1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjA1ZW07bWFyZ2luOjAgMCA1NnB4fS5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAwNWVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXJhaXNlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdHJva2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmxhdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZhYltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbWluaS1mYWJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4fS5tYXQtY2FyZC1zdWJ0aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGVja2JveC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvb3Rlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgdHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIzZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LjU0MTY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2NjY2NjY3ZW0pfUBtZWRpYSBwcmludHsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjJlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouMjVlbSAwIC43NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxZW0gMCAxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMiksIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi0wLjA2MjVlbX0ubWF0LW1lbnUtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci12ZXJ0aWNhbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGFiLWxpbmtbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MH0ubWF0LXRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5Om5vbmV9LmNkay12aXN1YWxseS1oaWRkZW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjZ9LmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV0sIC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3hbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2tbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHt9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7fS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOi13ZWJraXQtYXV0b2ZpbGwpe2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZVtfbmdjb250ZW50LSVDT01QJV17cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fS5tYXQtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfWgyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MS4yNWVtO292ZXJmbG93LXdyYXA6YnJlYWstd29yZH0ucnVuLXNlbGVjdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6LjllbTt3aWR0aDoxMDAlfS5kb3dubG9hZC1jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOi45ZW19LmRvd25sb2FkLWNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGFbX25nY29udGVudC0lQ09NUCVde21hcmdpbjozcHggMTBweCAzcHggMH0nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoaDUsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoiZGF0YV9kb3dubG9hZF9kaWFsb2dfY29tcG9uZW50Iix0ZW1wbGF0ZVVybDoiZGF0YV9kb3dubG9hZF9kaWFsb2dfY29tcG9uZW50Lm5nLmh0bWwiLHN0eWxlVXJsczpbImRhdGFfZG93bmxvYWRfZGlhbG9nX2NvbXBvbmVudC5jc3MiXSxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSxudWxsLHtjYXJkTWV0YWRhdGE6W3t0eXBlOnlffV0scnVuczpbe3R5cGU6eV99XSxzZWxlY3RlZFJ1bklkOlt7dHlwZTp5X31dLGRvd25sb2FkVXJsQ3N2Olt7dHlwZTp5X31dLGRvd25sb2FkVXJsSnNvbjpbe3R5cGU6eV99XSxydW5TZWxlY3RlZDpbe3R5cGU6X199XX0pO2NsYXNzIGI1e2NvbnN0cnVjdG9yKHQsZSxuKXt0aGlzLnNlbGVjdGVkUnVuSWQkPW5ldyBIKG51bGwpLHRoaXMuY2FyZE1ldGFkYXRhJD10LnNlbGVjdChrVCxuLmNhcmRJZCkucGlwZShHdCgodD0+Qm9vbGVhbih0KSkpKSx0aGlzLmRvd25sb2FkVXJsQ3N2JD1EdChbdC5zZWxlY3Qoa1Qsbi5jYXJkSWQpLHRoaXMuc2VsZWN0ZWRSdW5JZCRdKS5waXBlKGh0KCgoW3Qsbl0pPT50JiZuP2UuZG93bmxvYWRVcmwodC5wbHVnaW4sdC50YWcsbiwiY3N2Iik6bnVsbCkpLGNuKG51bGwpKSx0aGlzLmRvd25sb2FkVXJsSnNvbiQ9RHQoW3Quc2VsZWN0KGtULG4uY2FyZElkKSx0aGlzLnNlbGVjdGVkUnVuSWQkXSkucGlwZShodCgoKFt0LG5dKT0+dCYmbj9lLmRvd25sb2FkVXJsKHQucGx1Z2luLHQudGFnLG4sImpzb24iKTpudWxsKSksY24obnVsbCkpLHRoaXMucnVucyQ9RHQoW3Quc2VsZWN0KHBOKSx0LnNlbGVjdChQVCxuLmNhcmRJZCldKS5waXBlKGh0KCgoW3QsZV0pPT5lP09iamVjdC5rZXlzKGUpLm1hcCgoZT0+dC5nZXQoZSkpKS5maWx0ZXIoQm9vbGVhbik6W10pKSl9fWZ1bmN0aW9uIHk1KHQsZSl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTp0Pj1lPzA6TmFOfWZ1bmN0aW9uIF81KHQpe3JldHVybiAxPT09dC5sZW5ndGgmJih0PShmdW5jdGlvbiBlKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3JldHVybiB5NSh0KGUpLG4pfX0pKHQpKSx7bGVmdDpmdW5jdGlvbihlLG4sbyxpKXtmb3IobnVsbD09byYmKG89MCksbnVsbD09aSYmKGk9ZS5sZW5ndGgpO288aTspe3ZhciBhPW8raT4+PjE7dChlW2FdLG4pPDA/bz1hKzE6aT1hfXJldHVybiBvfSxyaWdodDpmdW5jdGlvbihlLG4sbyxpKXtmb3IobnVsbD09byYmKG89MCksbnVsbD09aSYmKGk9ZS5sZW5ndGgpO288aTspe3ZhciBhPW8raT4+PjE7dChlW2FdLG4pPjA/aT1hOm89YSsxfXJldHVybiBvfX19YjUuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGI1KShNdShFayksTXUoaFIpLE11KEFXKSl9LGI1Lsm1Y21wPVVvKHt0eXBlOmI1LHNlbGVjdG9yczpbWyJkYXRhX2Rvd25sb2FkX2RpYWxvZyJdXSxkZWNsczo2LHZhcnM6MTUsY29uc3RzOltbMywiY2FyZE1ldGFkYXRhIiwicnVucyIsInNlbGVjdGVkUnVuSWQiLCJkb3dubG9hZFVybENzdiIsImRvd25sb2FkVXJsSnNvbiIsInJ1blNlbGVjdGVkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihPdSgwLCJkYXRhX2Rvd25sb2FkX2RpYWxvZ19jb21wb25lbnQiLDApLE51KCJydW5TZWxlY3RlZCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4uc2VsZWN0ZWRSdW5JZCQubmV4dChlKX0pKSxPYigxLCJhc3luYyIpLE9iKDIsImFzeW5jIiksT2IoMywiYXN5bmMiKSxPYig0LCJhc3luYyIpLE9iKDUsImFzeW5jIiksUHUoKSksMiZlJiZ2dSgiY2FyZE1ldGFkYXRhIixQYigxLDUsbi5jYXJkTWV0YWRhdGEkKSkoInJ1bnMiLFBiKDIsNyxuLnJ1bnMkKSkoInNlbGVjdGVkUnVuSWQiLFBiKDMsOSxuLnNlbGVjdGVkUnVuSWQkKSkoImRvd25sb2FkVXJsQ3N2IixQYig0LDExLG4uZG93bmxvYWRVcmxDc3YkKSkoImRvd25sb2FkVXJsSnNvbiIsUGIoNSwxMyxuLmRvd25sb2FkVXJsSnNvbiQpKX0sZGlyZWN0aXZlczpbaDVdLHBpcGVzOltNdl0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihiNSxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJkYXRhX2Rvd25sb2FkX2RpYWxvZyIsdGVtcGxhdGU6JzxkYXRhX2Rvd25sb2FkX2RpYWxvZ19jb21wb25lbnRcbiAgICBbY2FyZE1ldGFkYXRhXT0iY2FyZE1ldGFkYXRhJCB8IGFzeW5jIlxuICAgIFtydW5zXT0icnVucyQgfCBhc3luYyJcbiAgICBbc2VsZWN0ZWRSdW5JZF09InNlbGVjdGVkUnVuSWQkIHwgYXN5bmMiXG4gICAgW2Rvd25sb2FkVXJsQ3N2XT0iZG93bmxvYWRVcmxDc3YkIHwgYXN5bmMiXG4gICAgW2Rvd25sb2FkVXJsSnNvbl09ImRvd25sb2FkVXJsSnNvbiQgfCBhc3luYyJcbiAgICAocnVuU2VsZWN0ZWQpPSJzZWxlY3RlZFJ1bklkJC5uZXh0KCRldmVudCkiXG4gID48L2RhdGFfZG93bmxvYWRfZGlhbG9nX2NvbXBvbmVudD4nLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2h9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpFa30se3R5cGU6aFJ9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltBV119XX1dfSksbnVsbCksKGZ1bmN0aW9uKHQpe3RbdC5PUklHSU5BTD0wXT0iT1JJR0lOQUwiLHRbdC5ERVJJVkVEPTFdPSJERVJJVkVEIn0pKHM1fHwoczU9e30pKTt2YXIgQzU9XzUoeTUpLnJpZ2h0O2Z1bmN0aW9uIE01KHQsZSl7dmFyIG4sbyxpLGE9dC5sZW5ndGgscj0tMTtpZihudWxsPT1lKXtmb3IoOysrcjxhOylpZihudWxsIT0obj10W3JdKSYmbj49bilmb3Iobz1pPW47KytyPGE7KW51bGwhPShuPXRbcl0pJiYobz5uJiYobz1uKSxpPG4mJihpPW4pKX1lbHNlIGZvcig7KytyPGE7KWlmKG51bGwhPShuPWUodFtyXSxyLHQpKSYmbj49bilmb3Iobz1pPW47KytyPGE7KW51bGwhPShuPWUodFtyXSxyLHQpKSYmKG8+biYmKG89biksaTxuJiYoaT1uKSk7cmV0dXJuW28saV19dmFyIHY1PUFycmF5LnByb3RvdHlwZS5zbGljZTtmdW5jdGlvbiB4NSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gTzUodCl7cmV0dXJuIHR9ZnVuY3Rpb24gUDUodCxlLG4pe3Q9K3QsZT0rZSxuPShpPWFyZ3VtZW50cy5sZW5ndGgpPDI/KGU9dCx0PTAsMSk6aTwzPzE6K247Zm9yKHZhciBvPS0xLGk9MHxNYXRoLm1heCgwLE1hdGguY2VpbCgoZS10KS9uKSksYT1uZXcgQXJyYXkoaSk7KytvPGk7KWFbb109dCtvKm47cmV0dXJuIGF9dmFyIHc1PU1hdGguc3FydCg1MCksazU9TWF0aC5zcXJ0KDEwKSxTNT1NYXRoLnNxcnQoMik7ZnVuY3Rpb24gRDUodCxlLG4pe3ZhciBvLGksYSxyLHM9LTE7aWYobj0rbiwodD0rdCk9PShlPStlKSYmbj4wKXJldHVyblt0XTtpZigobz1lPHQpJiYoaT10LHQ9ZSxlPWkpLDA9PT0ocj1FNSh0LGUsbikpfHwhaXNGaW5pdGUocikpcmV0dXJuW107aWYocj4wKWZvcih0PU1hdGguY2VpbCh0L3IpLGU9TWF0aC5mbG9vcihlL3IpLGE9bmV3IEFycmF5KGk9TWF0aC5jZWlsKGUtdCsxKSk7KytzPGk7KWFbc109KHQrcykqcjtlbHNlIGZvcih0PU1hdGguZmxvb3IodCpyKSxlPU1hdGguY2VpbChlKnIpLGE9bmV3IEFycmF5KGk9TWF0aC5jZWlsKHQtZSsxKSk7KytzPGk7KWFbc109KHQtcykvcjtyZXR1cm4gbyYmYS5yZXZlcnNlKCksYX1mdW5jdGlvbiBFNSh0LGUsbil7dmFyIG89KGUtdCkvTWF0aC5tYXgoMCxuKSxpPU1hdGguZmxvb3IoTWF0aC5sb2cobykvTWF0aC5MTjEwKSxhPW8vTWF0aC5wb3coMTAsaSk7cmV0dXJuIGk+PTA/KGE+PXc1PzEwOmE+PWs1PzU6YT49UzU/MjoxKSpNYXRoLnBvdygxMCxpKTotTWF0aC5wb3coMTAsLWkpLyhhPj13NT8xMDphPj1rNT81OmE+PVM1PzI6MSl9ZnVuY3Rpb24gQTUodCxlLG4pe3ZhciBvPU1hdGguYWJzKGUtdCkvTWF0aC5tYXgoMCxuKSxpPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2cobykvTWF0aC5MTjEwKSksYT1vL2k7cmV0dXJuIGE+PXc1P2kqPTEwOmE+PWs1P2kqPTU6YT49UzUmJihpKj0yKSxlPHQ/LWk6aX1mdW5jdGlvbiBSNSh0KXtyZXR1cm4gTWF0aC5jZWlsKE1hdGgubG9nKHQubGVuZ3RoKS9NYXRoLkxOMikrMX1mdW5jdGlvbiBUNSgpe3ZhciB0PU81LGU9TTUsbj1SNTtmdW5jdGlvbiBvKG8pe3ZhciBpLGEscj1vLmxlbmd0aCxzPW5ldyBBcnJheShyKTtmb3IoaT0wO2k8cjsrK2kpc1tpXT10KG9baV0saSxvKTt2YXIgbD1lKHMpLGM9bFswXSxkPWxbMV0scD1uKHMsYyxkKTtBcnJheS5pc0FycmF5KHApfHwocD1BNShjLGQscCkscD1QNShNYXRoLmNlaWwoYy9wKSpwLGQscCkpO2Zvcih2YXIgbT1wLmxlbmd0aDtwWzBdPD1jOylwLnNoaWZ0KCksLS1tO2Zvcig7cFttLTFdPmQ7KXAucG9wKCksLS1tO3ZhciB1LGY9bmV3IEFycmF5KG0rMSk7Zm9yKGk9MDtpPD1tOysraSkodT1mW2ldPVtdKS54MD1pPjA/cFtpLTFdOmMsdS54MT1pPG0/cFtpXTpkO2ZvcihpPTA7aTxyOysraSljPD0oYT1zW2ldKSYmYTw9ZCYmZltDNShwLGEsMCxtKV0ucHVzaChvW2ldKTtyZXR1cm4gZn1yZXR1cm4gby52YWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOng1KGUpLG8pOnR9LG8uZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6eDUoW3RbMF0sdFsxXV0pLG8pOmV9LG8udGhyZXNob2xkcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkFycmF5LmlzQXJyYXkodCk/eDUodjUuY2FsbCh0KSk6eDUodCksbyk6bn0sb312YXIgTjU9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIEk1KHQpe3JldHVybiB0fXZhciB6NT0xZS02O2Z1bmN0aW9uIEg1KHQpe3JldHVybiJ0cmFuc2xhdGUoIisodCsuNSkrIiwwKSJ9ZnVuY3Rpb24gRjUodCl7cmV0dXJuInRyYW5zbGF0ZSgwLCIrKHQrLjUpKyIpIn1mdW5jdGlvbiBMNSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuK3QoZSl9fWZ1bmN0aW9uIEI1KHQpe3ZhciBlPU1hdGgubWF4KDAsdC5iYW5kd2lkdGgoKS0xKS8yO3JldHVybiB0LnJvdW5kKCkmJihlPU1hdGgucm91bmQoZSkpLGZ1bmN0aW9uKG4pe3JldHVybit0KG4pK2V9fWZ1bmN0aW9uIFY1KCl7cmV0dXJuIXRoaXMuX19heGlzfWZ1bmN0aW9uIGo1KHQsZSl7dmFyIG49W10sbz1udWxsLGk9bnVsbCxhPTYscj02LHM9MyxsPTE9PT10fHw0PT09dD8tMToxLGM9ND09PXR8fDI9PT10PyJ4IjoieSIsZD0xPT09dHx8Mz09PXQ/SDU6RjU7ZnVuY3Rpb24gcChwKXt2YXIgbT1udWxsPT1vP2UudGlja3M/ZS50aWNrcy5hcHBseShlLG4pOmUuZG9tYWluKCk6byx1PW51bGw9PWk/ZS50aWNrRm9ybWF0P2UudGlja0Zvcm1hdC5hcHBseShlLG4pOkk1OmksZj1NYXRoLm1heChhLDApK3MsZz1lLnJhbmdlKCksaD0rZ1swXSsuNSxiPStnW2cubGVuZ3RoLTFdKy41LHk9KGUuYmFuZHdpZHRoP0I1Okw1KShlLmNvcHkoKSksXz1wLnNlbGVjdGlvbj9wLnNlbGVjdGlvbigpOnAsQz1fLnNlbGVjdEFsbCgiLmRvbWFpbiIpLmRhdGEoW251bGxdKSxNPV8uc2VsZWN0QWxsKCIudGljayIpLmRhdGEobSxlKS5vcmRlcigpLHY9TS5leGl0KCkseD1NLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJ0aWNrIiksTz1NLnNlbGVjdCgibGluZSIpLFA9TS5zZWxlY3QoInRleHQiKTtDPUMubWVyZ2UoQy5lbnRlcigpLmluc2VydCgicGF0aCIsIi50aWNrIikuYXR0cigiY2xhc3MiLCJkb21haW4iKS5hdHRyKCJzdHJva2UiLCJjdXJyZW50Q29sb3IiKSksTT1NLm1lcmdlKHgpLE89Ty5tZXJnZSh4LmFwcGVuZCgibGluZSIpLmF0dHIoInN0cm9rZSIsImN1cnJlbnRDb2xvciIpLmF0dHIoYysiMiIsbCphKSksUD1QLm1lcmdlKHguYXBwZW5kKCJ0ZXh0IikuYXR0cigiZmlsbCIsImN1cnJlbnRDb2xvciIpLmF0dHIoYyxsKmYpLmF0dHIoImR5IiwxPT09dD8iMGVtIjozPT09dD8iMC43MWVtIjoiMC4zMmVtIikpLHAhPT1fJiYoQz1DLnRyYW5zaXRpb24ocCksTT1NLnRyYW5zaXRpb24ocCksTz1PLnRyYW5zaXRpb24ocCksUD1QLnRyYW5zaXRpb24ocCksdj12LnRyYW5zaXRpb24ocCkuYXR0cigib3BhY2l0eSIsejUpLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3JldHVybiBpc0Zpbml0ZSh0PXkodCkpP2QodCk6dGhpcy5nZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIpfSkpLHguYXR0cigib3BhY2l0eSIsejUpLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucGFyZW50Tm9kZS5fX2F4aXM7cmV0dXJuIGQoZSYmaXNGaW5pdGUoZT1lKHQpKT9lOnkodCkpfSkpKSx2LnJlbW92ZSgpLEMuYXR0cigiZCIsND09PXR8fDI9PXQ/cj8iTSIrbCpyKyIsIitoKyJIMC41ViIrYisiSCIrbCpyOiJNMC41LCIraCsiViIrYjpyPyJNIitoKyIsIitsKnIrIlYwLjVIIitiKyJWIitsKnI6Ik0iK2grIiwwLjVIIitiKSxNLmF0dHIoIm9wYWNpdHkiLDEpLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3JldHVybiBkKHkodCkpfSkpLE8uYXR0cihjKyIyIixsKmEpLFAuYXR0cihjLGwqZikudGV4dCh1KSxfLmZpbHRlcihWNSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJmb250LXNpemUiLDEwKS5hdHRyKCJmb250LWZhbWlseSIsInNhbnMtc2VyaWYiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsMj09PXQ/InN0YXJ0Ijo0PT09dD8iZW5kIjoibWlkZGxlIiksXy5lYWNoKChmdW5jdGlvbigpe3RoaXMuX19heGlzPXl9KSl9cmV0dXJuIHAuc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxwKTplfSxwLnRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIG49TjUuY2FsbChhcmd1bWVudHMpLHB9LHAudGlja0FyZ3VtZW50cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1udWxsPT10P1tdOk41LmNhbGwodCkscCk6bi5zbGljZSgpfSxwLnRpY2tWYWx1ZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89bnVsbD09dD9udWxsOk41LmNhbGwodCkscCk6byYmby5zbGljZSgpfSxwLnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxwKTppfSxwLnRpY2tTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXI9K3QscCk6YX0scC50aWNrU2l6ZUlubmVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSt0LHApOmF9LHAudGlja1NpemVPdXRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rdCxwKTpyfSxwLnRpY2tQYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSt0LHApOnN9LHB9ZnVuY3Rpb24gVTUodCl7cmV0dXJuIGo1KDIsdCl9ZnVuY3Rpb24gVzUodCl7cmV0dXJuIGo1KDMsdCl9dmFyIEc1PXt2YWx1ZTpmdW5jdGlvbigpe319O2Z1bmN0aW9uIFk1KCl7Zm9yKHZhciB0LGU9MCxuPWFyZ3VtZW50cy5sZW5ndGgsbz17fTtlPG47KytlKXtpZighKHQ9YXJndW1lbnRzW2VdKyIiKXx8dCBpbiBvfHwvW1xzLl0vLnRlc3QodCkpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrdCk7b1t0XT1bXX1yZXR1cm4gbmV3IHE1KG8pfWZ1bmN0aW9uIHE1KHQpe3RoaXMuXz10fWZ1bmN0aW9uIFo1KHQsZSl7cmV0dXJuIHQudHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcCgoZnVuY3Rpb24odCl7dmFyIG49IiIsbz10LmluZGV4T2YoIi4iKTtpZihvPj0wJiYobj10LnNsaWNlKG8rMSksdD10LnNsaWNlKDAsbykpLHQmJiFlLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO3JldHVybnt0eXBlOnQsbmFtZTpufX0pKX1mdW5jdGlvbiBYNSh0LGUpe2Zvcih2YXIgbixvPTAsaT10Lmxlbmd0aDtvPGk7KytvKWlmKChuPXRbb10pLm5hbWU9PT1lKXJldHVybiBuLnZhbHVlfWZ1bmN0aW9uIEs1KHQsZSxuKXtmb3IodmFyIG89MCxpPXQubGVuZ3RoO288aTsrK28paWYodFtvXS5uYW1lPT09ZSl7dFtvXT1HNSx0PXQuc2xpY2UoMCxvKS5jb25jYXQodC5zbGljZShvKzEpKTticmVha31yZXR1cm4gbnVsbCE9biYmdC5wdXNoKHtuYW1lOmUsdmFsdWU6bn0pLHR9cTUucHJvdG90eXBlPVk1LnByb3RvdHlwZT17Y29uc3RydWN0b3I6cTUsb246ZnVuY3Rpb24odCxlKXt2YXIgbixvPXRoaXMuXyxpPVo1KHQrIiIsbyksYT0tMSxyPWkubGVuZ3RoO2lmKCEoYXJndW1lbnRzLmxlbmd0aDwyKSl7aWYobnVsbCE9ZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrOiAiK2UpO2Zvcig7KythPHI7KWlmKG49KHQ9aVthXSkudHlwZSlvW25dPUs1KG9bbl0sdC5uYW1lLGUpO2Vsc2UgaWYobnVsbD09ZSlmb3IobiBpbiBvKW9bbl09SzUob1tuXSx0Lm5hbWUsbnVsbCk7cmV0dXJuIHRoaXN9Zm9yKDsrK2E8cjspaWYoKG49KHQ9aVthXSkudHlwZSkmJihuPVg1KG9bbl0sdC5uYW1lKSkpcmV0dXJuIG59LGNvcHk6ZnVuY3Rpb24oKXt2YXIgdD17fSxlPXRoaXMuXztmb3IodmFyIG4gaW4gZSl0W25dPWVbbl0uc2xpY2UoKTtyZXR1cm4gbmV3IHE1KHQpfSxjYWxsOmZ1bmN0aW9uKHQsZSl7aWYoKG49YXJndW1lbnRzLmxlbmd0aC0yKT4wKWZvcih2YXIgbixvLGk9bmV3IEFycmF5KG4pLGE9MDthPG47KythKWlbYV09YXJndW1lbnRzW2ErMl07aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtmb3IoYT0wLG49KG89dGhpcy5fW3RdKS5sZW5ndGg7YTxuOysrYSlvW2FdLnZhbHVlLmFwcGx5KGUsaSl9LGFwcGx5OmZ1bmN0aW9uKHQsZSxuKXtpZighdGhpcy5fLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO2Zvcih2YXIgbz10aGlzLl9bdF0saT0wLGE9by5sZW5ndGg7aTxhOysraSlvW2ldLnZhbHVlLmFwcGx5KGUsbil9fTt2YXIgSjU9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLFE1PXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDpKNSx4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9O2Z1bmN0aW9uICQ1KHQpe3ZhciBlPXQrPSIiLG49ZS5pbmRleE9mKCI6Iik7cmV0dXJuIG4+PTAmJiJ4bWxucyIhPT0oZT10LnNsaWNlKDAsbikpJiYodD10LnNsaWNlKG4rMSkpLFE1Lmhhc093blByb3BlcnR5KGUpP3tzcGFjZTpRNVtlXSxsb2NhbDp0fTp0fWZ1bmN0aW9uIHQ0KHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMub3duZXJEb2N1bWVudCxuPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiBuPT09SjUmJmUuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PUo1P2UuY3JlYXRlRWxlbWVudCh0KTplLmNyZWF0ZUVsZW1lbnROUyhuLHQpfX1mdW5jdGlvbiBlNCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyh0LnNwYWNlLHQubG9jYWwpfX1mdW5jdGlvbiBuNCh0KXt2YXIgZT0kNSh0KTtyZXR1cm4oZS5sb2NhbD9lNDp0NCkoZSl9ZnVuY3Rpb24gbzQoKXt9ZnVuY3Rpb24gaTQodCl7cmV0dXJuIG51bGw9PXQ/bzQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKHQpfX1mdW5jdGlvbiBhNCgpe3JldHVybltdfWZ1bmN0aW9uIHI0KHQpe3JldHVybiBudWxsPT10P2E0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbCh0KX19ZnVuY3Rpb24gczQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2hlcyh0KX19ZnVuY3Rpb24gbDQodCl7cmV0dXJuIG5ldyBBcnJheSh0Lmxlbmd0aCl9ZnVuY3Rpb24gYzQodCxlKXt0aGlzLm93bmVyRG9jdW1lbnQ9dC5vd25lckRvY3VtZW50LHRoaXMubmFtZXNwYWNlVVJJPXQubmFtZXNwYWNlVVJJLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wYXJlbnQ9dCx0aGlzLl9fZGF0YV9fPWV9ZnVuY3Rpb24gZDQodCxlLG4sbyxpLGEpe2Zvcih2YXIgcixzPTAsbD1lLmxlbmd0aCxjPWEubGVuZ3RoO3M8YzsrK3MpKHI9ZVtzXSk/KHIuX19kYXRhX189YVtzXSxvW3NdPXIpOm5bc109bmV3IGM0KHQsYVtzXSk7Zm9yKDtzPGw7KytzKShyPWVbc10pJiYoaVtzXT1yKX1mdW5jdGlvbiBwNCh0LGUsbixvLGksYSxyKXt2YXIgcyxsLGMsZD17fSxwPWUubGVuZ3RoLG09YS5sZW5ndGgsdT1uZXcgQXJyYXkocCk7Zm9yKHM9MDtzPHA7KytzKShsPWVbc10pJiYodVtzXT1jPSIkIityLmNhbGwobCxsLl9fZGF0YV9fLHMsZSksYyBpbiBkP2lbc109bDpkW2NdPWwpO2ZvcihzPTA7czxtOysrcykobD1kW2M9IiQiK3IuY2FsbCh0LGFbc10scyxhKV0pPyhvW3NdPWwsbC5fX2RhdGFfXz1hW3NdLGRbY109bnVsbCk6bltzXT1uZXcgYzQodCxhW3NdKTtmb3Iocz0wO3M8cDsrK3MpKGw9ZVtzXSkmJmRbdVtzXV09PT1sJiYoaVtzXT1sKX1mdW5jdGlvbiBtNCh0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6dD49ZT8wOk5hTn1mdW5jdGlvbiB1NCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX19ZnVuY3Rpb24gZjQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpfX1mdW5jdGlvbiBnNCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKHQsZSl9fWZ1bmN0aW9uIGg0KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwsZSl9fWZ1bmN0aW9uIGI0KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09bj90aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KTp0aGlzLnNldEF0dHJpYnV0ZSh0LG4pfX1mdW5jdGlvbiB5NCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PW4/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsLG4pfX1mdW5jdGlvbiBfNCh0KXtyZXR1cm4gdC5vd25lckRvY3VtZW50JiZ0Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fHQuZG9jdW1lbnQmJnR8fHQuZGVmYXVsdFZpZXd9ZnVuY3Rpb24gQzQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KX19ZnVuY3Rpb24gTTQodCxlLG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxlLG4pfX1mdW5jdGlvbiB2NCh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09bz90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxvLG4pfX1mdW5jdGlvbiB4NCh0LGUpe3JldHVybiB0LnN0eWxlLmdldFByb3BlcnR5VmFsdWUoZSl8fF80KHQpLmdldENvbXB1dGVkU3R5bGUodCxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKGUpfWZ1bmN0aW9uIE80KHQpe3JldHVybiBmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW3RdfX1mdW5jdGlvbiBQNCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbdF09ZX19ZnVuY3Rpb24gdzQodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1uP2RlbGV0ZSB0aGlzW3RdOnRoaXNbdF09bn19ZnVuY3Rpb24gazQodCl7cmV0dXJuIHQudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIFM0KHQpe3JldHVybiB0LmNsYXNzTGlzdHx8bmV3IEQ0KHQpfWZ1bmN0aW9uIEQ0KHQpe3RoaXMuX25vZGU9dCx0aGlzLl9uYW1lcz1rNCh0LmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfWZ1bmN0aW9uIEU0KHQsZSl7Zm9yKHZhciBuPVM0KHQpLG89LTEsaT1lLmxlbmd0aDsrK288aTspbi5hZGQoZVtvXSl9ZnVuY3Rpb24gQTQodCxlKXtmb3IodmFyIG49UzQodCksbz0tMSxpPWUubGVuZ3RoOysrbzxpOyluLnJlbW92ZShlW29dKX1mdW5jdGlvbiBSNCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtFNCh0aGlzLHQpfX1mdW5jdGlvbiBUNCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtBNCh0aGlzLHQpfX1mdW5jdGlvbiBONCh0LGUpe3JldHVybiBmdW5jdGlvbigpeyhlLmFwcGx5KHRoaXMsYXJndW1lbnRzKT9FNDpBNCkodGhpcyx0KX19ZnVuY3Rpb24gSTQoKXt0aGlzLnRleHRDb250ZW50PSIifWZ1bmN0aW9uIHo0KHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9dH19ZnVuY3Rpb24gSDQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD1udWxsPT1lPyIiOmV9fWZ1bmN0aW9uIEY0KCl7dGhpcy5pbm5lckhUTUw9IiJ9ZnVuY3Rpb24gTDQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9dH19ZnVuY3Rpb24gQjQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5pbm5lckhUTUw9bnVsbD09ZT8iIjplfX1mdW5jdGlvbiBWNCgpe3RoaXMubmV4dFNpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzKX1mdW5jdGlvbiBqNCgpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIFU0KCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gVzQoKXt2YXIgdD10aGlzLnBhcmVudE5vZGU7dCYmdC5yZW1vdmVDaGlsZCh0aGlzKX1mdW5jdGlvbiBHNCgpe3ZhciB0PXRoaXMuY2xvbmVOb2RlKCExKSxlPXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gZT9lLmluc2VydEJlZm9yZSh0LHRoaXMubmV4dFNpYmxpbmcpOnR9ZnVuY3Rpb24gWTQoKXt2YXIgdD10aGlzLmNsb25lTm9kZSghMCksZT10aGlzLnBhcmVudE5vZGU7cmV0dXJuIGU/ZS5pbnNlcnRCZWZvcmUodCx0aGlzLm5leHRTaWJsaW5nKTp0fWM0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6YzQsYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUodCx0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUodCxlKX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3IodCl9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKHQpfX0sRDQucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24odCl7dGhpcy5fbmFtZXMuaW5kZXhPZih0KTwwJiYodGhpcy5fbmFtZXMucHVzaCh0KSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxyZW1vdmU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbmFtZXMuaW5kZXhPZih0KTtlPj0wJiYodGhpcy5fbmFtZXMuc3BsaWNlKGUsMSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0sY29udGFpbnM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2YodCk+PTB9fTt2YXIgcTQ9e30sWjQ9bnVsbDtmdW5jdGlvbiBYNCh0LGUsbil7cmV0dXJuIHQ9SzQodCxlLG4pLGZ1bmN0aW9uKGUpe3ZhciBuPWUucmVsYXRlZFRhcmdldDtuJiYobj09PXRoaXN8fDgmbi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0aGlzKSl8fHQuY2FsbCh0aGlzLGUpfX1mdW5jdGlvbiBLNCh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKG8pe3ZhciBpPVo0O1o0PW87dHJ5e3QuY2FsbCh0aGlzLHRoaXMuX19kYXRhX18sZSxuKX1maW5hbGx5e1o0PWl9fX1mdW5jdGlvbiBKNCh0KXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLykubWFwKChmdW5jdGlvbih0KXt2YXIgZT0iIixuPXQuaW5kZXhPZigiLiIpO3JldHVybiBuPj0wJiYoZT10LnNsaWNlKG4rMSksdD10LnNsaWNlKDAsbikpLHt0eXBlOnQsbmFtZTplfX0pKX1mdW5jdGlvbiBRNCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9fb247aWYoZSl7Zm9yKHZhciBuLG89MCxpPS0xLGE9ZS5sZW5ndGg7bzxhOysrbyluPWVbb10sdC50eXBlJiZuLnR5cGUhPT10LnR5cGV8fG4ubmFtZSE9PXQubmFtZT9lWysraV09bjp0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIobi50eXBlLG4ubGlzdGVuZXIsbi5jYXB0dXJlKTsrK2k/ZS5sZW5ndGg9aTpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gJDQodCxlLG4pe3ZhciBvPXE0Lmhhc093blByb3BlcnR5KHQudHlwZSk/WDQ6SzQ7cmV0dXJuIGZ1bmN0aW9uKGksYSxyKXt2YXIgcyxsPXRoaXMuX19vbixjPW8oZSxhLHIpO2lmKGwpZm9yKHZhciBkPTAscD1sLmxlbmd0aDtkPHA7KytkKWlmKChzPWxbZF0pLnR5cGU9PT10LnR5cGUmJnMubmFtZT09PXQubmFtZSlyZXR1cm4gdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKHMudHlwZSxzLmxpc3RlbmVyLHMuY2FwdHVyZSksdGhpcy5hZGRFdmVudExpc3RlbmVyKHMudHlwZSxzLmxpc3RlbmVyPWMscy5jYXB0dXJlPW4pLHZvaWQocy52YWx1ZT1lKTt0aGlzLmFkZEV2ZW50TGlzdGVuZXIodC50eXBlLGMsbikscz17dHlwZTp0LnR5cGUsbmFtZTp0Lm5hbWUsdmFsdWU6ZSxsaXN0ZW5lcjpjLGNhcHR1cmU6bn0sbD9sLnB1c2gocyk6dGhpcy5fX29uPVtzXX19ZnVuY3Rpb24gdDYodCxlLG4pe3ZhciBvPV80KHQpLGk9by5DdXN0b21FdmVudDsiZnVuY3Rpb24iPT10eXBlb2YgaT9pPW5ldyBpKGUsbik6KGk9by5kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSxuPyhpLmluaXRFdmVudChlLG4uYnViYmxlcyxuLmNhbmNlbGFibGUpLGkuZGV0YWlsPW4uZGV0YWlsKTppLmluaXRFdmVudChlLCExLCExKSksdC5kaXNwYXRjaEV2ZW50KGkpfWZ1bmN0aW9uIGU2KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQ2KHRoaXMsdCxlKX19ZnVuY3Rpb24gbjYodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdDYodGhpcyx0LGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19InVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudCYmKCJvbm1vdXNlZW50ZXIiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fHwocTQ9e21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSkpO3ZhciBvNj1bbnVsbF07ZnVuY3Rpb24gaTYodCxlKXt0aGlzLl9ncm91cHM9dCx0aGlzLl9wYXJlbnRzPWV9ZnVuY3Rpb24gYTYoKXtyZXR1cm4gbmV3IGk2KFtbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0sbzYpfWZ1bmN0aW9uIHI2KHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD9uZXcgaTYoW1tkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHQpXV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyBpNihbW3RdXSxvNil9ZnVuY3Rpb24gczYoKXtmb3IodmFyIHQsZT1aNDt0PWUuc291cmNlRXZlbnQ7KWU9dDtyZXR1cm4gZX1mdW5jdGlvbiBsNih0LGUpe3ZhciBuPXQub3duZXJTVkdFbGVtZW50fHx0O2lmKG4uY3JlYXRlU1ZHUG9pbnQpe3ZhciBvPW4uY3JlYXRlU1ZHUG9pbnQoKTtyZXR1cm4gby54PWUuY2xpZW50WCxvLnk9ZS5jbGllbnRZLFsobz1vLm1hdHJpeFRyYW5zZm9ybSh0LmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSkpLngsby55XX12YXIgaT10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybltlLmNsaWVudFgtaS5sZWZ0LXQuY2xpZW50TGVmdCxlLmNsaWVudFktaS50b3AtdC5jbGllbnRUb3BdfWZ1bmN0aW9uIGM2KHQpe3ZhciBlPXM2KCk7cmV0dXJuIGUuY2hhbmdlZFRvdWNoZXMmJihlPWUuY2hhbmdlZFRvdWNoZXNbMF0pLGw2KHQsZSl9ZnVuY3Rpb24gZDYoKXtaNC5wcmV2ZW50RGVmYXVsdCgpLFo0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIHA2KHQpe3ZhciBlPXQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LG49cjYodCkub24oImRyYWdzdGFydC5kcmFnIixkNiwhMCk7Im9uc2VsZWN0c3RhcnQiaW4gZT9uLm9uKCJzZWxlY3RzdGFydC5kcmFnIixkNiwhMCk6KGUuX19ub3NlbGVjdD1lLnN0eWxlLk1velVzZXJTZWxlY3QsZS5zdHlsZS5Nb3pVc2VyU2VsZWN0PSJub25lIil9ZnVuY3Rpb24gbTYodCxlKXt2YXIgbj10LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxvPXI2KHQpLm9uKCJkcmFnc3RhcnQuZHJhZyIsbnVsbCk7ZSYmKG8ub24oImNsaWNrLmRyYWciLGQ2LCEwKSxzZXRUaW1lb3V0KChmdW5jdGlvbigpe28ub24oImNsaWNrLmRyYWciLG51bGwpfSksMCkpLCJvbnNlbGVjdHN0YXJ0ImluIG4/by5vbigic2VsZWN0c3RhcnQuZHJhZyIsbnVsbCk6KG4uc3R5bGUuTW96VXNlclNlbGVjdD1uLl9fbm9zZWxlY3QsZGVsZXRlIG4uX19ub3NlbGVjdCl9ZnVuY3Rpb24gdTYodCxlLG4pe3QucHJvdG90eXBlPWUucHJvdG90eXBlPW4sbi5jb25zdHJ1Y3Rvcj10fWZ1bmN0aW9uIGY2KHQsZSl7dmFyIG49T2JqZWN0LmNyZWF0ZSh0LnByb3RvdHlwZSk7Zm9yKHZhciBvIGluIGUpbltvXT1lW29dO3JldHVybiBufWZ1bmN0aW9uIGc2KCl7fWk2LnByb3RvdHlwZT1hNi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmk2LHNlbGVjdDpmdW5jdGlvbiBoNih0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9aTQodCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxvPW5ldyBBcnJheShuKSxpPTA7aTxuOysraSlmb3IodmFyIGEscixzPWVbaV0sbD1zLmxlbmd0aCxjPW9baV09bmV3IEFycmF5KGwpLGQ9MDtkPGw7KytkKShhPXNbZF0pJiYocj10LmNhbGwoYSxhLl9fZGF0YV9fLGQscykpJiYoIl9fZGF0YV9fImluIGEmJihyLl9fZGF0YV9fPWEuX19kYXRhX18pLGNbZF09cik7cmV0dXJuIG5ldyBpNihvLHRoaXMuX3BhcmVudHMpfSxzZWxlY3RBbGw6ZnVuY3Rpb24gYjYodCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PXI0KHQpKTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49ZS5sZW5ndGgsbz1bXSxpPVtdLGE9MDthPG47KythKWZvcih2YXIgcixzPWVbYV0sbD1zLmxlbmd0aCxjPTA7YzxsOysrYykocj1zW2NdKSYmKG8ucHVzaCh0LmNhbGwocixyLl9fZGF0YV9fLGMscykpLGkucHVzaChyKSk7cmV0dXJuIG5ldyBpNihvLGkpfSxmaWx0ZXI6ZnVuY3Rpb24geTYodCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PXM0KHQpKTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49ZS5sZW5ndGgsbz1uZXcgQXJyYXkobiksaT0wO2k8bjsrK2kpZm9yKHZhciBhLHI9ZVtpXSxzPXIubGVuZ3RoLGw9b1tpXT1bXSxjPTA7YzxzOysrYykoYT1yW2NdKSYmdC5jYWxsKGEsYS5fX2RhdGFfXyxjLHIpJiZsLnB1c2goYSk7cmV0dXJuIG5ldyBpNihvLHRoaXMuX3BhcmVudHMpfSxkYXRhOmZ1bmN0aW9uIF82KHQsZSl7aWYoIXQpcmV0dXJuIGY9bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSxkPS0xLHRoaXMuZWFjaCgoZnVuY3Rpb24odCl7ZlsrK2RdPXR9KSksZjt2YXIgbj1lP3A0OmQ0LG89dGhpcy5fcGFyZW50cyxpPXRoaXMuX2dyb3VwczsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9KGZ1bmN0aW9uIGEodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSkodCkpO2Zvcih2YXIgcj1pLmxlbmd0aCxzPW5ldyBBcnJheShyKSxsPW5ldyBBcnJheShyKSxjPW5ldyBBcnJheShyKSxkPTA7ZDxyOysrZCl7dmFyIHA9b1tkXSxtPWlbZF0sdT1tLmxlbmd0aCxmPXQuY2FsbChwLHAmJnAuX19kYXRhX18sZCxvKSxnPWYubGVuZ3RoLGg9bFtkXT1uZXcgQXJyYXkoZyksYj1zW2RdPW5ldyBBcnJheShnKTtuKHAsbSxoLGIsY1tkXT1uZXcgQXJyYXkodSksZixlKTtmb3IodmFyIHksXyxDPTAsTT0wO0M8ZzsrK0MpaWYoeT1oW0NdKXtmb3IoQz49TSYmKE09QysxKTshKF89YltNXSkmJisrTTxnOyk7eS5fbmV4dD1ffHxudWxsfX1yZXR1cm4ocz1uZXcgaTYocyxvKSkuX2VudGVyPWwscy5fZXhpdD1jLHN9LGVudGVyOmZ1bmN0aW9uIEM2KCl7cmV0dXJuIG5ldyBpNih0aGlzLl9lbnRlcnx8dGhpcy5fZ3JvdXBzLm1hcChsNCksdGhpcy5fcGFyZW50cyl9LGV4aXQ6ZnVuY3Rpb24gTTYoKXtyZXR1cm4gbmV3IGk2KHRoaXMuX2V4aXR8fHRoaXMuX2dyb3Vwcy5tYXAobDQpLHRoaXMuX3BhcmVudHMpfSxqb2luOmZ1bmN0aW9uIHY2KHQsZSxuKXt2YXIgbz10aGlzLmVudGVyKCksaT10aGlzLGE9dGhpcy5leGl0KCk7cmV0dXJuIG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dChvKTpvLmFwcGVuZCh0KyIiKSxudWxsIT1lJiYoaT1lKGkpKSxudWxsPT1uP2EucmVtb3ZlKCk6bihhKSxvJiZpP28ubWVyZ2UoaSkub3JkZXIoKTppfSxtZXJnZTpmdW5jdGlvbiB4Nih0KXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49dC5fZ3JvdXBzLG89ZS5sZW5ndGgsaT1NYXRoLm1pbihvLG4ubGVuZ3RoKSxhPW5ldyBBcnJheShvKSxyPTA7cjxpOysrcilmb3IodmFyIHMsbD1lW3JdLGM9bltyXSxkPWwubGVuZ3RoLHA9YVtyXT1uZXcgQXJyYXkoZCksbT0wO208ZDsrK20pKHM9bFttXXx8Y1ttXSkmJihwW21dPXMpO2Zvcig7cjxvOysrcilhW3JdPWVbcl07cmV0dXJuIG5ldyBpNihhLHRoaXMuX3BhcmVudHMpfSxvcmRlcjpmdW5jdGlvbiBPNigpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT0tMSxuPXQubGVuZ3RoOysrZTxuOylmb3IodmFyIG8saT10W2VdLGE9aS5sZW5ndGgtMSxyPWlbYV07LS1hPj0wOykobz1pW2FdKSYmKHImJjReby5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihyKSYmci5wYXJlbnROb2RlLmluc2VydEJlZm9yZShvLHIpLHI9byk7cmV0dXJuIHRoaXN9LHNvcnQ6ZnVuY3Rpb24gUDYodCl7ZnVuY3Rpb24gZShlLG4pe3JldHVybiBlJiZuP3QoZS5fX2RhdGFfXyxuLl9fZGF0YV9fKTohZS0hbn10fHwodD1tNCk7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxvPW4ubGVuZ3RoLGk9bmV3IEFycmF5KG8pLGE9MDthPG87KythKXtmb3IodmFyIHIscz1uW2FdLGw9cy5sZW5ndGgsYz1pW2FdPW5ldyBBcnJheShsKSxkPTA7ZDxsOysrZCkocj1zW2RdKSYmKGNbZF09cik7Yy5zb3J0KGUpfXJldHVybiBuZXcgaTYoaSx0aGlzLl9wYXJlbnRzKS5vcmRlcigpfSxjYWxsOmZ1bmN0aW9uIHc2KCl7dmFyIHQ9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyx0LmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfSxub2RlczpmdW5jdGlvbiBrNigpe3ZhciB0PW5ldyBBcnJheSh0aGlzLnNpemUoKSksZT0tMTtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpe3RbKytlXT10aGlzfSkpLHR9LG5vZGU6ZnVuY3Rpb24gUzYoKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9MCxuPXQubGVuZ3RoO2U8bjsrK2UpZm9yKHZhciBvPXRbZV0saT0wLGE9by5sZW5ndGg7aTxhOysraSl7dmFyIHI9b1tpXTtpZihyKXJldHVybiByfXJldHVybiBudWxsfSxzaXplOmZ1bmN0aW9uIEQ2KCl7dmFyIHQ9MDtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpeysrdH0pKSx0fSxlbXB0eTpmdW5jdGlvbiBFNigpe3JldHVybiF0aGlzLm5vZGUoKX0sZWFjaDpmdW5jdGlvbiBBNih0KXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49MCxvPWUubGVuZ3RoO248bzsrK24pZm9yKHZhciBpLGE9ZVtuXSxyPTAscz1hLmxlbmd0aDtyPHM7KytyKShpPWFbcl0pJiZ0LmNhbGwoaSxpLl9fZGF0YV9fLHIsYSk7cmV0dXJuIHRoaXN9LGF0dHI6ZnVuY3Rpb24gUjYodCxlKXt2YXIgbj0kNSh0KTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBvPXRoaXMubm9kZSgpO3JldHVybiBuLmxvY2FsP28uZ2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKTpvLmdldEF0dHJpYnV0ZShuKX1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT1lP24ubG9jYWw/ZjQ6dTQ6ImZ1bmN0aW9uIj09dHlwZW9mIGU/bi5sb2NhbD95NDpiNDpuLmxvY2FsP2g0Omc0KShuLGUpKX0sc3R5bGU6ZnVuY3Rpb24gVDYodCxlLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChudWxsPT1lP0M0OiJmdW5jdGlvbiI9PXR5cGVvZiBlP3Y0Ok00KSh0LGUsbnVsbD09bj8iIjpuKSk6eDQodGhpcy5ub2RlKCksdCl9LHByb3BlcnR5OmZ1bmN0aW9uIE42KHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PWU/TzQ6ImZ1bmN0aW9uIj09dHlwZW9mIGU/dzQ6UDQpKHQsZSkpOnRoaXMubm9kZSgpW3RdfSxjbGFzc2VkOmZ1bmN0aW9uIEk2KHQsZSl7dmFyIG49azQodCsiIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIG89UzQodGhpcy5ub2RlKCkpLGk9LTEsYT1uLmxlbmd0aDsrK2k8YTspaWYoIW8uY29udGFpbnMobltpXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIHRoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIGU/TjQ6ZT9SNDpUNCkobixlKSl9LHRleHQ6ZnVuY3Rpb24gejYodCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PXQ/STQ6KCJmdW5jdGlvbiI9PXR5cGVvZiB0P0g0Ono0KSh0KSk6dGhpcy5ub2RlKCkudGV4dENvbnRlbnR9LGh0bWw6ZnVuY3Rpb24gSDYodCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PXQ/RjQ6KCJmdW5jdGlvbiI9PXR5cGVvZiB0P0I0Okw0KSh0KSk6dGhpcy5ub2RlKCkuaW5uZXJIVE1MfSxyYWlzZTpmdW5jdGlvbiBGNigpe3JldHVybiB0aGlzLmVhY2goVjQpfSxsb3dlcjpmdW5jdGlvbiBMNigpe3JldHVybiB0aGlzLmVhY2goajQpfSxhcHBlbmQ6ZnVuY3Rpb24gQjYodCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpuNCh0KTtyZXR1cm4gdGhpcy5zZWxlY3QoKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQoZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSkpfSxpbnNlcnQ6ZnVuY3Rpb24gVjYodCxlKXt2YXIgbj0iZnVuY3Rpb24iPT10eXBlb2YgdD90Om40KHQpLG89bnVsbD09ZT9VNDoiZnVuY3Rpb24iPT10eXBlb2YgZT9lOmk0KGUpO3JldHVybiB0aGlzLnNlbGVjdCgoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUobi5hcHBseSh0aGlzLGFyZ3VtZW50cyksby5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSkpfSxyZW1vdmU6ZnVuY3Rpb24gajYoKXtyZXR1cm4gdGhpcy5lYWNoKFc0KX0sY2xvbmU6ZnVuY3Rpb24gVTYodCl7cmV0dXJuIHRoaXMuc2VsZWN0KHQ/WTQ6RzQpfSxkYXR1bTpmdW5jdGlvbiBXNih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsdCk6dGhpcy5ub2RlKCkuX19kYXRhX199LG9uOmZ1bmN0aW9uIEc2KHQsZSxuKXt2YXIgbyxpLGE9SjQodCsiIikscj1hLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2ZvcihzPWU/JDQ6UTQsbnVsbD09biYmKG49ITEpLG89MDtvPHI7KytvKXRoaXMuZWFjaChzKGFbb10sZSxuKSk7cmV0dXJuIHRoaXN9dmFyIHM9dGhpcy5ub2RlKCkuX19vbjtpZihzKWZvcih2YXIgbCxjPTAsZD1zLmxlbmd0aDtjPGQ7KytjKWZvcihvPTAsbD1zW2NdO288cjsrK28paWYoKGk9YVtvXSkudHlwZT09PWwudHlwZSYmaS5uYW1lPT09bC5uYW1lKXJldHVybiBsLnZhbHVlfSxkaXNwYXRjaDpmdW5jdGlvbiBZNih0LGUpe3JldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBlP242OmU2KSh0LGUpKX19O3ZhciBxNj0uNyxaNj0xL3E2LFg2PSJcXHMqKFsrLV0/XFxkKylcXHMqIixLNj0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixKNj0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIsUTY9L14jKFswLTlhLWZdezMsOH0pJC8sJDY9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW1g2LFg2LFg2XSsiXFwpJCIpLHQ3PW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tKNixKNixKNl0rIlxcKSQiKSxlNz1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW1g2LFg2LFg2LEs2XSsiXFwpJCIpLG43PW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbSjYsSjYsSjYsSzZdKyJcXCkkIiksbzc9bmV3IFJlZ0V4cCgiXmhzbFxcKCIrW0s2LEo2LEo2XSsiXFwpJCIpLGk3PW5ldyBSZWdFeHAoIl5oc2xhXFwoIitbSzYsSjYsSjYsSzZdKyJcXCkkIiksYTc9e2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH07ZnVuY3Rpb24gcjcoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXgoKX1mdW5jdGlvbiBzNygpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdFJnYigpfWZ1bmN0aW9uIGw3KHQpe3ZhciBlLG47cmV0dXJuIHQ9KHQrIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLChlPVE2LmV4ZWModCkpPyhuPWVbMV0ubGVuZ3RoLGU9cGFyc2VJbnQoZVsxXSwxNiksNj09PW4/YzcoZSk6Mz09PW4/bmV3IHU3KGU+PjgmMTV8ZT4+NCYyNDAsZT4+NCYxNXwyNDAmZSwoMTUmZSk8PDR8MTUmZSwxKTo4PT09bj9kNyhlPj4yNCYyNTUsZT4+MTYmMjU1LGU+PjgmMjU1LCgyNTUmZSkvMjU1KTo0PT09bj9kNyhlPj4xMiYxNXxlPj44JjI0MCxlPj44JjE1fGU+PjQmMjQwLGU+PjQmMTV8MjQwJmUsKCgxNSZlKTw8NHwxNSZlKS8yNTUpOm51bGwpOihlPSQ2LmV4ZWModCkpP25ldyB1NyhlWzFdLGVbMl0sZVszXSwxKTooZT10Ny5leGVjKHQpKT9uZXcgdTcoMjU1KmVbMV0vMTAwLDI1NSplWzJdLzEwMCwyNTUqZVszXS8xMDAsMSk6KGU9ZTcuZXhlYyh0KSk/ZDcoZVsxXSxlWzJdLGVbM10sZVs0XSk6KGU9bjcuZXhlYyh0KSk/ZDcoMjU1KmVbMV0vMTAwLDI1NSplWzJdLzEwMCwyNTUqZVszXS8xMDAsZVs0XSk6KGU9bzcuZXhlYyh0KSk/YjcoZVsxXSxlWzJdLzEwMCxlWzNdLzEwMCwxKTooZT1pNy5leGVjKHQpKT9iNyhlWzFdLGVbMl0vMTAwLGVbM10vMTAwLGVbNF0pOmE3Lmhhc093blByb3BlcnR5KHQpP2M3KGE3W3RdKToidHJhbnNwYXJlbnQiPT09dD9uZXcgdTcoTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiBjNyh0KXtyZXR1cm4gbmV3IHU3KHQ+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdCwxKX1mdW5jdGlvbiBkNyh0LGUsbixvKXtyZXR1cm4gbzw9MCYmKHQ9ZT1uPU5hTiksbmV3IHU3KHQsZSxuLG8pfWZ1bmN0aW9uIHA3KHQpe3JldHVybiB0IGluc3RhbmNlb2YgZzZ8fCh0PWw3KHQpKSx0P25ldyB1NygodD10LnJnYigpKS5yLHQuZyx0LmIsdC5vcGFjaXR5KTpuZXcgdTd9ZnVuY3Rpb24gbTcodCxlLG4sbyl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3A3KHQpOm5ldyB1Nyh0LGUsbixudWxsPT1vPzE6byl9ZnVuY3Rpb24gdTcodCxlLG4sbyl7dGhpcy5yPSt0LHRoaXMuZz0rZSx0aGlzLmI9K24sdGhpcy5vcGFjaXR5PStvfWZ1bmN0aW9uIGY3KCl7cmV0dXJuIiMiK2g3KHRoaXMucikraDcodGhpcy5nKStoNyh0aGlzLmIpfWZ1bmN0aW9uIGc3KCl7dmFyIHQ9dGhpcy5vcGFjaXR5O3JldHVybigxPT09KHQ9aXNOYU4odCk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsdCkpKT8icmdiKCI6InJnYmEoIikrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLnIpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuZyl8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5iKXx8MCkpKygxPT09dD8iKSI6IiwgIit0KyIpIil9ZnVuY3Rpb24gaDcodCl7cmV0dXJuKCh0PU1hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodCl8fDApKSk8MTY/IjAiOiIiKSt0LnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBiNyh0LGUsbixvKXtyZXR1cm4gbzw9MD90PWU9bj1OYU46bjw9MHx8bj49MT90PWU9TmFOOmU8PTAmJih0PU5hTiksbmV3IEM3KHQsZSxuLG8pfWZ1bmN0aW9uIHk3KHQpe2lmKHQgaW5zdGFuY2VvZiBDNylyZXR1cm4gbmV3IEM3KHQuaCx0LnMsdC5sLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIGc2fHwodD1sNyh0KSksIXQpcmV0dXJuIG5ldyBDNztpZih0IGluc3RhbmNlb2YgQzcpcmV0dXJuIHQ7dmFyIGU9KHQ9dC5yZ2IoKSkuci8yNTUsbj10LmcvMjU1LG89dC5iLzI1NSxpPU1hdGgubWluKGUsbixvKSxhPU1hdGgubWF4KGUsbixvKSxyPU5hTixzPWEtaSxsPShhK2kpLzI7cmV0dXJuIHM/KHI9ZT09PWE/KG4tbykvcys2KihuPG8pOm49PT1hPyhvLWUpL3MrMjooZS1uKS9zKzQscy89bDwuNT9hK2k6Mi1hLWkscio9NjApOnM9bD4wJiZsPDE/MDpyLG5ldyBDNyhyLHMsbCx0Lm9wYWNpdHkpfWZ1bmN0aW9uIF83KHQsZSxuLG8pe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD95Nyh0KTpuZXcgQzcodCxlLG4sbnVsbD09bz8xOm8pfWZ1bmN0aW9uIEM3KHQsZSxuLG8pe3RoaXMuaD0rdCx0aGlzLnM9K2UsdGhpcy5sPStuLHRoaXMub3BhY2l0eT0rb31mdW5jdGlvbiBNNyh0LGUsbil7cmV0dXJuIDI1NSoodDw2MD9lKyhuLWUpKnQvNjA6dDwxODA/bjp0PDI0MD9lKyhuLWUpKigyNDAtdCkvNjA6ZSl9dTYoZzYsbDcse2NvcHk6ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IHRoaXMuY29uc3RydWN0b3IsdGhpcyx0KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpfSxoZXg6cjcsZm9ybWF0SGV4OnI3LGZvcm1hdEhzbDpmdW5jdGlvbiB2Nygpe3JldHVybiB5Nyh0aGlzKS5mb3JtYXRIc2woKX0sZm9ybWF0UmdiOnM3LHRvU3RyaW5nOnM3fSksdTYodTcsbTcsZjYoZzYse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/WjY6TWF0aC5wb3coWjYsdCksbmV3IHU3KHRoaXMucip0LHRoaXMuZyp0LHRoaXMuYip0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P3E2Ok1hdGgucG93KHE2LHQpLG5ldyB1Nyh0aGlzLnIqdCx0aGlzLmcqdCx0aGlzLmIqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4tLjU8PXRoaXMuciYmdGhpcy5yPDI1NS41JiYtLjU8PXRoaXMuZyYmdGhpcy5nPDI1NS41JiYtLjU8PXRoaXMuYiYmdGhpcy5iPDI1NS41JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4OmY3LGZvcm1hdEhleDpmNyxmb3JtYXRSZ2I6ZzcsdG9TdHJpbmc6Zzd9KSksdTYoQzcsXzcsZjYoZzYse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/WjY6TWF0aC5wb3coWjYsdCksbmV3IEM3KHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/cTY6TWF0aC5wb3cocTYsdCksbmV3IEM3KHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5oJTM2MCszNjAqKHRoaXMuaDwwKSxlPWlzTmFOKHQpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLG49dGhpcy5sLG89bisobjwuNT9uOjEtbikqZSxpPTIqbi1vO3JldHVybiBuZXcgdTcoTTcodD49MjQwP3QtMjQwOnQrMTIwLGksbyksTTcodCxpLG8pLE03KHQ8MTIwP3QrMjQwOnQtMTIwLGksbyksdGhpcy5vcGFjaXR5KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGZvcm1hdEhzbDpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3BhY2l0eTtyZXR1cm4oMT09PSh0PWlzTmFOKHQpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLHQpKSk/ImhzbCgiOiJoc2xhKCIpKyh0aGlzLmh8fDApKyIsICIrMTAwKih0aGlzLnN8fDApKyIlLCAiKzEwMCoodGhpcy5sfHwwKSsiJSIrKDE9PT10PyIpIjoiLCAiK3QrIikiKX19KSk7dmFyIHg3PU1hdGguUEkvMTgwLE83PTE4MC9NYXRoLlBJLFA3PS45NjQyMix3Nz0uODI1MjEsazc9NC8yOSxTNz02LzI5LEQ3PTMqUzcqUzc7ZnVuY3Rpb24gRTcodCl7aWYodCBpbnN0YW5jZW9mIEE3KXJldHVybiBuZXcgQTcodC5sLHQuYSx0LmIsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgRjcpcmV0dXJuIEw3KHQpO3QgaW5zdGFuY2VvZiB1N3x8KHQ9cDcodCkpO3ZhciBlLG4sbz1JNyh0LnIpLGk9STcodC5nKSxhPUk3KHQuYikscj1SNygoLjIyMjUwNDUqbysuNzE2ODc4NippKy4wNjA2MTY5KmEpLzEpO3JldHVybiBvPT09aSYmaT09PWE/ZT1uPXI6KGU9UjcoKC40MzYwNzQ3Km8rLjM4NTA2NDkqaSsuMTQzMDgwNCphKS9QNyksbj1SNygoLjAxMzkzMjIqbysuMDk3MTA0NSppKy43MTQxNzMzKmEpL3c3KSksbmV3IEE3KDExNipyLTE2LDUwMCooZS1yKSwyMDAqKHItbiksdC5vcGFjaXR5KX1mdW5jdGlvbiBBNyh0LGUsbixvKXt0aGlzLmw9K3QsdGhpcy5hPStlLHRoaXMuYj0rbix0aGlzLm9wYWNpdHk9K299ZnVuY3Rpb24gUjcodCl7cmV0dXJuIHQ+LjAwODg1NjQ1MTY3OTAzNTYzMT9NYXRoLnBvdyh0LDEvMyk6dC9ENytrN31mdW5jdGlvbiBUNyh0KXtyZXR1cm4gdD5TNz90KnQqdDpENyoodC1rNyl9ZnVuY3Rpb24gTjcodCl7cmV0dXJuIDI1NSoodDw9LjAwMzEzMDg/MTIuOTIqdDoxLjA1NSpNYXRoLnBvdyh0LDEvMi40KS0uMDU1KX1mdW5jdGlvbiBJNyh0KXtyZXR1cm4odC89MjU1KTw9LjA0MDQ1P3QvMTIuOTI6TWF0aC5wb3coKHQrLjA1NSkvMS4wNTUsMi40KX1mdW5jdGlvbiB6Nyh0KXtpZih0IGluc3RhbmNlb2YgRjcpcmV0dXJuIG5ldyBGNyh0LmgsdC5jLHQubCx0Lm9wYWNpdHkpO2lmKHQgaW5zdGFuY2VvZiBBN3x8KHQ9RTcodCkpLDA9PT10LmEmJjA9PT10LmIpcmV0dXJuIG5ldyBGNyhOYU4sMDx0LmwmJnQubDwxMDA/MDpOYU4sdC5sLHQub3BhY2l0eSk7dmFyIGU9TWF0aC5hdGFuMih0LmIsdC5hKSpPNztyZXR1cm4gbmV3IEY3KGU8MD9lKzM2MDplLE1hdGguc3FydCh0LmEqdC5hK3QuYip0LmIpLHQubCx0Lm9wYWNpdHkpfWZ1bmN0aW9uIEg3KHQsZSxuLG8pe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD96Nyh0KTpuZXcgRjcodCxlLG4sbnVsbD09bz8xOm8pfWZ1bmN0aW9uIEY3KHQsZSxuLG8pe3RoaXMuaD0rdCx0aGlzLmM9K2UsdGhpcy5sPStuLHRoaXMub3BhY2l0eT0rb31mdW5jdGlvbiBMNyh0KXtpZihpc05hTih0LmgpKXJldHVybiBuZXcgQTcodC5sLDAsMCx0Lm9wYWNpdHkpO3ZhciBlPXQuaCp4NztyZXR1cm4gbmV3IEE3KHQubCxNYXRoLmNvcyhlKSp0LmMsTWF0aC5zaW4oZSkqdC5jLHQub3BhY2l0eSl9ZnVuY3Rpb24gQjcodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIFY3KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0K24qZX19ZnVuY3Rpb24gajcodCxlKXt2YXIgbj1lLXQ7cmV0dXJuIG4/VjcodCxuPjE4MHx8bjwtMTgwP24tMzYwKk1hdGgucm91bmQobi8zNjApOm4pOkI3KGlzTmFOKHQpP2U6dCl9ZnVuY3Rpb24gVTcodCxlKXt2YXIgbj1lLXQ7cmV0dXJuIG4/VjcodCxuKTpCNyhpc05hTih0KT9lOnQpfXU2KEE3LChmdW5jdGlvbiBXNyh0LGUsbixvKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/RTcodCk6bmV3IEE3KHQsZSxuLG51bGw9PW8/MTpvKX0pLGY2KGc2LHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IEE3KHRoaXMubCsxOCoobnVsbD09dD8xOnQpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgQTcodGhpcy5sLTE4KihudWxsPT10PzE6dCksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD0odGhpcy5sKzE2KS8xMTYsZT1pc05hTih0aGlzLmEpP3Q6dCt0aGlzLmEvNTAwLG49aXNOYU4odGhpcy5iKT90OnQtdGhpcy5iLzIwMDtyZXR1cm4gbmV3IHU3KE43KDMuMTMzODU2MSooZT1QNypUNyhlKSktMS42MTY4NjY3Kih0PTEqVDcodCkpLS40OTA2MTQ2KihuPXc3KlQ3KG4pKSksTjcoLS45Nzg3Njg0KmUrMS45MTYxNDE1KnQrLjAzMzQ1NCpuKSxONyguMDcxOTQ1MyplLS4yMjg5OTE0KnQrMS40MDUyNDI3Km4pLHRoaXMub3BhY2l0eSl9fSkpLHU2KEY3LEg3LGY2KGc2LHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IEY3KHRoaXMuaCx0aGlzLmMsdGhpcy5sKzE4KihudWxsPT10PzE6dCksdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgRjcodGhpcy5oLHRoaXMuYyx0aGlzLmwtMTgqKG51bGw9PXQ/MTp0KSx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gTDcodGhpcykucmdiKCl9fSkpO3ZhciBHNz0oZnVuY3Rpb24gdChlKXt2YXIgbj0oZnVuY3Rpb24gbyh0KXtyZXR1cm4gMT09KHQ9K3QpP1U3OmZ1bmN0aW9uKGUsbil7cmV0dXJuIG4tZT8oZnVuY3Rpb24gbyh0LGUsbil7cmV0dXJuIHQ9TWF0aC5wb3codCxuKSxlPU1hdGgucG93KGUsbiktdCxuPTEvbixmdW5jdGlvbihvKXtyZXR1cm4gTWF0aC5wb3codCtvKmUsbil9fSkoZSxuLHQpOkI3KGlzTmFOKGUpP246ZSl9fSkoZSk7ZnVuY3Rpb24gaSh0LGUpe3ZhciBvPW4oKHQ9bTcodCkpLnIsKGU9bTcoZSkpLnIpLGk9bih0LmcsZS5nKSxhPW4odC5iLGUuYikscj1VNyh0Lm9wYWNpdHksZS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQucj1vKGUpLHQuZz1pKGUpLHQuYj1hKGUpLHQub3BhY2l0eT1yKGUpLHQrIiJ9fXJldHVybiBpLmdhbW1hPXQsaX0pKDEpLFk3PShmdW5jdGlvbiBaNyh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG4sbyxpPWUubGVuZ3RoLGE9bmV3IEFycmF5KGkpLHI9bmV3IEFycmF5KGkpLHM9bmV3IEFycmF5KGkpO2ZvcihuPTA7bjxpOysrbilvPW03KGVbbl0pLGFbbl09by5yfHwwLHJbbl09by5nfHwwLHNbbl09by5ifHwwO3JldHVybiBhPXQoYSkscj10KHIpLHM9dChzKSxvLm9wYWNpdHk9MSxmdW5jdGlvbih0KXtyZXR1cm4gby5yPWEodCksby5nPXIodCksby5iPXModCksbysiIn19fSkoKGZ1bmN0aW9uIHE3KHQpe3ZhciBlPXQubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBvPW48PTA/bj0wOm4+PTE/KG49MSxlLTEpOk1hdGguZmxvb3IobiplKSxpPXRbb10sYT10W28rMV07cmV0dXJuKGZ1bmN0aW9uIHIodCxlLG4sbyxpKXt2YXIgYT10KnQscj1hKnQ7cmV0dXJuKCgxLTMqdCszKmEtcikqZSsoNC02KmErMypyKSpuKygxKzMqdCszKmEtMypyKSpvK3IqaSkvNn0pKChuLW8vZSkqZSxvPjA/dFtvLTFdOjIqaS1hLGksYSxvPGUtMT90W28rMl06MiphLWkpfX0pKTtmdW5jdGlvbiBYNyh0LGUpe2V8fChlPVtdKTt2YXIgbixvPXQ/TWF0aC5taW4oZS5sZW5ndGgsdC5sZW5ndGgpOjAsaT1lLnNsaWNlKCk7cmV0dXJuIGZ1bmN0aW9uKGEpe2ZvcihuPTA7bjxvOysrbilpW25dPXRbbl0qKDEtYSkrZVtuXSphO3JldHVybiBpfX1mdW5jdGlvbiBLNyh0LGUpe3ZhciBuLG89ZT9lLmxlbmd0aDowLGk9dD9NYXRoLm1pbihvLHQubGVuZ3RoKTowLGE9bmV3IEFycmF5KGkpLHI9bmV3IEFycmF5KG8pO2ZvcihuPTA7bjxpOysrbilhW25dPW84KHRbbl0sZVtuXSk7Zm9yKDtuPG87KytuKXJbbl09ZVtuXTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKG49MDtuPGk7KytuKXJbbl09YVtuXSh0KTtyZXR1cm4gcn19ZnVuY3Rpb24gSjcodCxlKXt2YXIgbj1uZXcgRGF0ZTtyZXR1cm4gdD0rdCxlPStlLGZ1bmN0aW9uKG8pe3JldHVybiBuLnNldFRpbWUodCooMS1vKStlKm8pLG59fWZ1bmN0aW9uIFE3KHQsZSl7cmV0dXJuIHQ9K3QsZT0rZSxmdW5jdGlvbihuKXtyZXR1cm4gdCooMS1uKStlKm59fWZ1bmN0aW9uICQ3KHQsZSl7dmFyIG4sbz17fSxpPXt9O2ZvcihuIGluIG51bGwhPT10JiYib2JqZWN0Ij09dHlwZW9mIHR8fCh0PXt9KSxudWxsIT09ZSYmIm9iamVjdCI9PXR5cGVvZiBlfHwoZT17fSksZSluIGluIHQ/b1tuXT1vOCh0W25dLGVbbl0pOmlbbl09ZVtuXTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKG4gaW4gbylpW25dPW9bbl0odCk7cmV0dXJuIGl9fXZhciB0OD0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2csZTg9bmV3IFJlZ0V4cCh0OC5zb3VyY2UsImciKTtmdW5jdGlvbiBuOCh0LGUpe3ZhciBuLG8saSxhPXQ4Lmxhc3RJbmRleD1lOC5sYXN0SW5kZXg9MCxyPS0xLHM9W10sbD1bXTtmb3IodCs9IiIsZSs9IiI7KG49dDguZXhlYyh0KSkmJihvPWU4LmV4ZWMoZSkpOykoaT1vLmluZGV4KT5hJiYoaT1lLnNsaWNlKGEsaSksc1tyXT9zW3JdKz1pOnNbKytyXT1pKSwobj1uWzBdKT09PShvPW9bMF0pP3Nbcl0/c1tyXSs9bzpzWysrcl09bzooc1srK3JdPW51bGwsbC5wdXNoKHtpOnIseDpRNyhuLG8pfSkpLGE9ZTgubGFzdEluZGV4O3JldHVybiBhPGUubGVuZ3RoJiYoaT1lLnNsaWNlKGEpLHNbcl0/c1tyXSs9aTpzWysrcl09aSkscy5sZW5ndGg8Mj9sWzBdPyhmdW5jdGlvbiBjKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdChlKSsiIn19KShsWzBdLngpOihmdW5jdGlvbiBkKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0pKGUpOihlPWwubGVuZ3RoLGZ1bmN0aW9uKHQpe2Zvcih2YXIgbixvPTA7bzxlOysrbylzWyhuPWxbb10pLmldPW4ueCh0KTtyZXR1cm4gcy5qb2luKCIiKX0pfWZ1bmN0aW9uIG84KHQsZSl7dmFyIG4sbz10eXBlb2YgZTtyZXR1cm4gbnVsbD09ZXx8ImJvb2xlYW4iPT09bz9CNyhlKTooIm51bWJlciI9PT1vP1E3OiJzdHJpbmciPT09bz8obj1sNyhlKSk/KGU9bixHNyk6bjg6ZSBpbnN0YW5jZW9mIGw3P0c3OmUgaW5zdGFuY2VvZiBEYXRlP0o3OihmdW5jdGlvbiBpKHQpe3JldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcodCkmJiEodCBpbnN0YW5jZW9mIERhdGFWaWV3KX0pKGUpP1g3OkFycmF5LmlzQXJyYXkoZSk/Szc6ImZ1bmN0aW9uIiE9dHlwZW9mIGUudmFsdWVPZiYmImZ1bmN0aW9uIiE9dHlwZW9mIGUudG9TdHJpbmd8fGlzTmFOKGUpPyQ3OlE3KSh0LGUpfWZ1bmN0aW9uIGk4KHQsZSl7cmV0dXJuIHQ9K3QsZT0rZSxmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5yb3VuZCh0KigxLW4pK2Uqbil9fXZhciBhOCxyOCxzOCxsOCxjOD0xODAvTWF0aC5QSSxkOD17dHJhbnNsYXRlWDowLHRyYW5zbGF0ZVk6MCxyb3RhdGU6MCxza2V3WDowLHNjYWxlWDoxLHNjYWxlWToxfTtmdW5jdGlvbiBwOCh0LGUsbixvLGksYSl7dmFyIHIscyxsO3JldHVybihyPU1hdGguc3FydCh0KnQrZSplKSkmJih0Lz1yLGUvPXIpLChsPXQqbitlKm8pJiYobi09dCpsLG8tPWUqbCksKHM9TWF0aC5zcXJ0KG4qbitvKm8pKSYmKG4vPXMsby89cyxsLz1zKSx0Km88ZSpuJiYodD0tdCxlPS1lLGw9LWwscj0tcikse3RyYW5zbGF0ZVg6aSx0cmFuc2xhdGVZOmEscm90YXRlOk1hdGguYXRhbjIoZSx0KSpjOCxza2V3WDpNYXRoLmF0YW4obCkqYzgsc2NhbGVYOnIsc2NhbGVZOnN9fWZ1bmN0aW9uIG04KHQsZSxuLG8pe2Z1bmN0aW9uIGkodCl7cmV0dXJuIHQubGVuZ3RoP3QucG9wKCkrIiAiOiIifXJldHVybiBmdW5jdGlvbihhLHIpe3ZhciBzPVtdLGw9W107cmV0dXJuIGE9dChhKSxyPXQociksKGZ1bmN0aW9uIGModCxvLGksYSxyLHMpe2lmKHQhPT1pfHxvIT09YSl7dmFyIGw9ci5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLGUsbnVsbCxuKTtzLnB1c2goe2k6bC00LHg6UTcodCxpKX0se2k6bC0yLHg6UTcobyxhKX0pfWVsc2UoaXx8YSkmJnIucHVzaCgidHJhbnNsYXRlKCIraStlK2Erbil9KShhLnRyYW5zbGF0ZVgsYS50cmFuc2xhdGVZLHIudHJhbnNsYXRlWCxyLnRyYW5zbGF0ZVkscyxsKSwoZnVuY3Rpb24gZCh0LGUsbixhKXt0IT09ZT8odC1lPjE4MD9lKz0zNjA6ZS10PjE4MCYmKHQrPTM2MCksYS5wdXNoKHtpOm4ucHVzaChpKG4pKyJyb3RhdGUoIixudWxsLG8pLTIseDpRNyh0LGUpfSkpOmUmJm4ucHVzaChpKG4pKyJyb3RhdGUoIitlK28pfSkoYS5yb3RhdGUsci5yb3RhdGUscyxsKSwoZnVuY3Rpb24gcCh0LGUsbixhKXt0IT09ZT9hLnB1c2goe2k6bi5wdXNoKGkobikrInNrZXdYKCIsbnVsbCxvKS0yLHg6UTcodCxlKX0pOmUmJm4ucHVzaChpKG4pKyJza2V3WCgiK2Urbyl9KShhLnNrZXdYLHIuc2tld1gscyxsKSwoZnVuY3Rpb24gbSh0LGUsbixvLGEscil7aWYodCE9PW58fGUhPT1vKXt2YXIgcz1hLnB1c2goaShhKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7ci5wdXNoKHtpOnMtNCx4OlE3KHQsbil9LHtpOnMtMix4OlE3KGUsbyl9KX1lbHNlIDE9PT1uJiYxPT09b3x8YS5wdXNoKGkoYSkrInNjYWxlKCIrbisiLCIrbysiKSIpfSkoYS5zY2FsZVgsYS5zY2FsZVksci5zY2FsZVgsci5zY2FsZVkscyxsKSxhPXI9bnVsbCxmdW5jdGlvbih0KXtmb3IodmFyIGUsbj0tMSxvPWwubGVuZ3RoOysrbjxvOylzWyhlPWxbbl0pLmldPWUueCh0KTtyZXR1cm4gcy5qb2luKCIiKX19fXZhciB1OCxmOCxnOD1tOCgoZnVuY3Rpb24gaDgodCl7cmV0dXJuIm5vbmUiPT09dD9kODooYTh8fChhOD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSxyOD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsczg9ZG9jdW1lbnQuZGVmYXVsdFZpZXcpLGE4LnN0eWxlLnRyYW5zZm9ybT10LHQ9czguZ2V0Q29tcHV0ZWRTdHlsZShyOC5hcHBlbmRDaGlsZChhOCksbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgidHJhbnNmb3JtIikscjgucmVtb3ZlQ2hpbGQoYTgpLHA4KCsodD10LnNsaWNlKDcsLTEpLnNwbGl0KCIsIikpWzBdLCt0WzFdLCt0WzJdLCt0WzNdLCt0WzRdLCt0WzVdKSl9KSwicHgsICIsInB4KSIsImRlZykiKSxiOD1tOCgoZnVuY3Rpb24geTgodCl7cmV0dXJuIG51bGw9PXQ/ZDg6KGw4fHwobDg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKSksbDguc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLHQpLCh0PWw4LnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkpP3A4KCh0PXQubWF0cml4KS5hLHQuYix0LmMsdC5kLHQuZSx0LmYpOmQ4KX0pLCIsICIsIikiLCIpIiksXzg9KGZ1bmN0aW9uIEM4KHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3ZhciBvPXQoKGU9XzcoZSkpLmgsKG49XzcobikpLmgpLGk9VTcoZS5zLG4ucyksYT1VNyhlLmwsbi5sKSxyPVU3KGUub3BhY2l0eSxuLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZS5oPW8odCksZS5zPWkodCksZS5sPWEodCksZS5vcGFjaXR5PXIodCksZSsiIn19fSkoajcpLE04PShmdW5jdGlvbiB2OCh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXt2YXIgbz10KChlPUg3KGUpKS5oLChuPUg3KG4pKS5oKSxpPVU3KGUuYyxuLmMpLGE9VTcoZS5sLG4ubCkscj1VNyhlLm9wYWNpdHksbi5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUuaD1vKHQpLGUuYz1pKHQpLGUubD1hKHQpLGUub3BhY2l0eT1yKHQpLGUrIiJ9fX0pKGo3KSx4OD0wLE84PTAsUDg9MCx3OD0wLGs4PTAsUzg9MCxEOD0ib2JqZWN0Ij09dHlwZW9mIHBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxFOD0ib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbih0KXtzZXRUaW1lb3V0KHQsMTcpfTtmdW5jdGlvbiBBOCgpe3JldHVybiBrOHx8KEU4KFI4KSxrOD1EOC5ub3coKStTOCl9ZnVuY3Rpb24gUjgoKXtrOD0wfWZ1bmN0aW9uIFQ4KCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiBOOCh0LGUsbil7dmFyIG89bmV3IFQ4O3JldHVybiBvLnJlc3RhcnQodCxlLG4pLG99ZnVuY3Rpb24gSTgoKXtrOD0odzg9RDgubm93KCkpK1M4LHg4PU84PTA7dHJ5eyEoZnVuY3Rpb24gdCgpe0E4KCksKyt4ODtmb3IodmFyIHQsZT11ODtlOykodD1rOC1lLl90aW1lKT49MCYmZS5fY2FsbC5jYWxsKG51bGwsdCksZT1lLl9uZXh0Oy0teDh9KSgpfWZpbmFsbHl7eDg9MCwoZnVuY3Rpb24gZSgpe2Zvcih2YXIgdCxlLG49dTgsbz0xLzA7bjspbi5fY2FsbD8obz5uLl90aW1lJiYobz1uLl90aW1lKSx0PW4sbj1uLl9uZXh0KTooZT1uLl9uZXh0LG4uX25leHQ9bnVsbCxuPXQ/dC5fbmV4dD1lOnU4PWUpO2Y4PXQsSDgobyl9KSgpLGs4PTB9fWZ1bmN0aW9uIHo4KCl7dmFyIHQ9RDgubm93KCksZT10LXc4O2U+MWUzJiYoUzgtPWUsdzg9dCl9ZnVuY3Rpb24gSDgodCl7eDh8fChPOCYmKE84PWNsZWFyVGltZW91dChPOCkpLHQtazg+MjQ/KHQ8MS8wJiYoTzg9c2V0VGltZW91dChJOCx0LUQ4Lm5vdygpLVM4KSksUDgmJihQOD1jbGVhckludGVydmFsKFA4KSkpOihQOHx8KHc4PUQ4Lm5vdygpLFA4PXNldEludGVydmFsKHo4LDFlMykpLHg4PTEsRTgoSTgpKSl9ZnVuY3Rpb24gRjgodCxlLG4pe3ZhciBvPW5ldyBUODtyZXR1cm4gby5yZXN0YXJ0KChmdW5jdGlvbihuKXtvLnN0b3AoKSx0KG4rZSl9KSxlPW51bGw9PWU/MDorZSxuKSxvfVQ4LnByb3RvdHlwZT1OOC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlQ4LHJlc3RhcnQ6ZnVuY3Rpb24odCxlLG4pe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIik7bj0obnVsbD09bj9BOCgpOituKSsobnVsbD09ZT8wOitlKSx0aGlzLl9uZXh0fHxmOD09PXRoaXN8fChmOD9mOC5fbmV4dD10aGlzOnU4PXRoaXMsZjg9dGhpcyksdGhpcy5fY2FsbD10LHRoaXMuX3RpbWU9bixIOCgpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCxIOCgpKX19O3ZhciBMOD1ZNSgic3RhcnQiLCJlbmQiLCJjYW5jZWwiLCJpbnRlcnJ1cHQiKSxCOD1bXTtmdW5jdGlvbiBWOCh0LGUsbixvLGksYSl7dmFyIHI9dC5fX3RyYW5zaXRpb247aWYocil7aWYobiBpbiByKXJldHVybn1lbHNlIHQuX190cmFuc2l0aW9uPXt9OyEoZnVuY3Rpb24gcyh0LGUsbil7dmFyIG8saT10Ll9fdHJhbnNpdGlvbjtmdW5jdGlvbiBhKGwpe3ZhciBjLGQscCxtO2lmKDEhPT1uLnN0YXRlKXJldHVybiBzKCk7Zm9yKGMgaW4gaSlpZigobT1pW2NdKS5uYW1lPT09bi5uYW1lKXtpZigzPT09bS5zdGF0ZSlyZXR1cm4gRjgoYSk7ND09PW0uc3RhdGU/KG0uc3RhdGU9NixtLnRpbWVyLnN0b3AoKSxtLm9uLmNhbGwoImludGVycnVwdCIsdCx0Ll9fZGF0YV9fLG0uaW5kZXgsbS5ncm91cCksZGVsZXRlIGlbY10pOitjPGUmJihtLnN0YXRlPTYsbS50aW1lci5zdG9wKCksbS5vbi5jYWxsKCJjYW5jZWwiLHQsdC5fX2RhdGFfXyxtLmluZGV4LG0uZ3JvdXApLGRlbGV0ZSBpW2NdKX1pZihGOCgoZnVuY3Rpb24oKXszPT09bi5zdGF0ZSYmKG4uc3RhdGU9NCxuLnRpbWVyLnJlc3RhcnQocixuLmRlbGF5LG4udGltZSkscihsKSl9KSksbi5zdGF0ZT0yLG4ub24uY2FsbCgic3RhcnQiLHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApLDI9PT1uLnN0YXRlKXtmb3Iobi5zdGF0ZT0zLG89bmV3IEFycmF5KHA9bi50d2Vlbi5sZW5ndGgpLGM9MCxkPS0xO2M8cDsrK2MpKG09bi50d2VlbltjXS52YWx1ZS5jYWxsKHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApKSYmKG9bKytkXT1tKTtvLmxlbmd0aD1kKzF9fWZ1bmN0aW9uIHIoZSl7Zm9yKHZhciBpPWU8bi5kdXJhdGlvbj9uLmVhc2UuY2FsbChudWxsLGUvbi5kdXJhdGlvbik6KG4udGltZXIucmVzdGFydChzKSxuLnN0YXRlPTUsMSksYT0tMSxyPW8ubGVuZ3RoOysrYTxyOylvW2FdLmNhbGwodCxpKTs1PT09bi5zdGF0ZSYmKG4ub24uY2FsbCgiZW5kIix0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxzKCkpfWZ1bmN0aW9uIHMoKXtmb3IodmFyIG8gaW4gbi5zdGF0ZT02LG4udGltZXIuc3RvcCgpLGRlbGV0ZSBpW2VdLGkpcmV0dXJuO2RlbGV0ZSB0Ll9fdHJhbnNpdGlvbn1pW2VdPW4sbi50aW1lcj1OOCgoZnVuY3Rpb24gbCh0KXtuLnN0YXRlPTEsbi50aW1lci5yZXN0YXJ0KGEsbi5kZWxheSxuLnRpbWUpLG4uZGVsYXk8PXQmJmEodC1uLmRlbGF5KX0pLDAsbi50aW1lKX0pKHQsbix7bmFtZTplLGluZGV4Om8sZ3JvdXA6aSxvbjpMOCx0d2VlbjpCOCx0aW1lOmEudGltZSxkZWxheTphLmRlbGF5LGR1cmF0aW9uOmEuZHVyYXRpb24sZWFzZTphLmVhc2UsdGltZXI6bnVsbCxzdGF0ZTowfSl9ZnVuY3Rpb24gajgodCxlKXt2YXIgbj1XOCh0LGUpO2lmKG4uc3RhdGU+MCl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZCIpO3JldHVybiBufWZ1bmN0aW9uIFU4KHQsZSl7dmFyIG49VzgodCxlKTtpZihuLnN0YXRlPjMpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBydW5uaW5nIik7cmV0dXJuIG59ZnVuY3Rpb24gVzgodCxlKXt2YXIgbj10Ll9fdHJhbnNpdGlvbjtpZighbnx8IShuPW5bZV0pKXRocm93IG5ldyBFcnJvcigidHJhbnNpdGlvbiBub3QgZm91bmQiKTtyZXR1cm4gbn1mdW5jdGlvbiBHOCh0LGUpe3ZhciBuLG8saSxhPXQuX190cmFuc2l0aW9uLHI9ITA7aWYoYSl7Zm9yKGkgaW4gZT1udWxsPT1lP251bGw6ZSsiIixhKShuPWFbaV0pLm5hbWU9PT1lPyhvPW4uc3RhdGU+MiYmbi5zdGF0ZTw1LG4uc3RhdGU9NixuLnRpbWVyLnN0b3AoKSxuLm9uLmNhbGwobz8iaW50ZXJydXB0IjoiY2FuY2VsIix0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxkZWxldGUgYVtpXSk6cj0hMTtyJiZkZWxldGUgdC5fX3RyYW5zaXRpb259fWZ1bmN0aW9uIFk4KHQsZSl7dmFyIG4sbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaT1VOCh0aGlzLHQpLGE9aS50d2VlbjtpZihhIT09bilmb3IodmFyIHI9MCxzPShvPW49YSkubGVuZ3RoO3I8czsrK3IpaWYob1tyXS5uYW1lPT09ZSl7KG89by5zbGljZSgpKS5zcGxpY2UociwxKTticmVha31pLnR3ZWVuPW99fWZ1bmN0aW9uIHE4KHQsZSxuKXt2YXIgbyxpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1VOCh0aGlzLHQpLHI9YS50d2VlbjtpZihyIT09byl7aT0obz1yKS5zbGljZSgpO2Zvcih2YXIgcz17bmFtZTplLHZhbHVlOm59LGw9MCxjPWkubGVuZ3RoO2w8YzsrK2wpaWYoaVtsXS5uYW1lPT09ZSl7aVtsXT1zO2JyZWFrfWw9PT1jJiZpLnB1c2gocyl9YS50d2Vlbj1pfX1mdW5jdGlvbiBaOCh0LGUsbil7dmFyIG89dC5faWQ7cmV0dXJuIHQuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1VOCh0aGlzLG8pOyh0LnZhbHVlfHwodC52YWx1ZT17fSkpW2VdPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpfSkpLGZ1bmN0aW9uKHQpe3JldHVybiBXOCh0LG8pLnZhbHVlW2VdfX1mdW5jdGlvbiBYOCh0LGUpe3ZhciBuO3JldHVybigibnVtYmVyIj09dHlwZW9mIGU/UTc6ZSBpbnN0YW5jZW9mIGw3P0c3OihuPWw3KGUpKT8oZT1uLEc3KTpuOCkodCxlKX1mdW5jdGlvbiBLOCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX19ZnVuY3Rpb24gSjgodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpfX1mdW5jdGlvbiBROCh0LGUsbil7dmFyIG8saSxhPW4rIiI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5nZXRBdHRyaWJ1dGUodCk7cmV0dXJuIHI9PT1hP251bGw6cj09PW8/aTppPWUobz1yLG4pfX1mdW5jdGlvbiAkOCh0LGUsbil7dmFyIG8saSxhPW4rIiI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5nZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpO3JldHVybiByPT09YT9udWxsOnI9PT1vP2k6aT1lKG89cixuKX19ZnVuY3Rpb24gdDkodCxlLG4pe3ZhciBvLGksYTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcixzLGw9bih0aGlzKTtpZihudWxsIT1sKXJldHVybihyPXRoaXMuZ2V0QXR0cmlidXRlKHQpKT09PShzPWwrIiIpP251bGw6cj09PW8mJnM9PT1pP2E6KGk9cyxhPWUobz1yLGwpKTt0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX19ZnVuY3Rpb24gZTkodCxlLG4pe3ZhciBvLGksYTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcixzLGw9bih0aGlzKTtpZihudWxsIT1sKXJldHVybihyPXRoaXMuZ2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKSk9PT0ocz1sKyIiKT9udWxsOnI9PT1vJiZzPT09aT9hOihpPXMsYT1lKG89cixsKSk7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpfX1mdW5jdGlvbiBuOSh0LGUpe3JldHVybiBmdW5jdGlvbihuKXt0aGlzLnNldEF0dHJpYnV0ZSh0LGUuY2FsbCh0aGlzLG4pKX19ZnVuY3Rpb24gbzkodCxlKXtyZXR1cm4gZnVuY3Rpb24obil7dGhpcy5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwsZS5jYWxsKHRoaXMsbikpfX1mdW5jdGlvbiBpOSh0LGUpe3ZhciBuLG87ZnVuY3Rpb24gaSgpe3ZhciBpPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBpIT09byYmKG49KG89aSkmJm85KHQsaSkpLG59cmV0dXJuIGkuX3ZhbHVlPWUsaX1mdW5jdGlvbiBhOSh0LGUpe3ZhciBuLG87ZnVuY3Rpb24gaSgpe3ZhciBpPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBpIT09byYmKG49KG89aSkmJm45KHQsaSkpLG59cmV0dXJuIGkuX3ZhbHVlPWUsaX1mdW5jdGlvbiByOSh0LGUpe3JldHVybiBmdW5jdGlvbigpe2o4KHRoaXMsdCkuZGVsYXk9K2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBzOSh0LGUpe3JldHVybiBlPStlLGZ1bmN0aW9uKCl7ajgodGhpcyx0KS5kZWxheT1lfX1mdW5jdGlvbiBsOSh0LGUpe3JldHVybiBmdW5jdGlvbigpe1U4KHRoaXMsdCkuZHVyYXRpb249K2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBjOSh0LGUpe3JldHVybiBlPStlLGZ1bmN0aW9uKCl7VTgodGhpcyx0KS5kdXJhdGlvbj1lfX1mdW5jdGlvbiBkOSh0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXtVOCh0aGlzLHQpLmVhc2U9ZX19ZnVuY3Rpb24gcDkodCxlLG4pe3ZhciBvLGksYT0oZnVuY3Rpb24gcih0KXtyZXR1cm4odCsiIikudHJpbSgpLnNwbGl0KC9efFxzKy8pLmV2ZXJ5KChmdW5jdGlvbih0KXt2YXIgZT10LmluZGV4T2YoIi4iKTtyZXR1cm4gZT49MCYmKHQ9dC5zbGljZSgwLGUpKSwhdHx8InN0YXJ0Ij09PXR9KSl9KShlKT9qODpVODtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj1hKHRoaXMsdCkscz1yLm9uO3MhPT1vJiYoaT0obz1zKS5jb3B5KCkpLm9uKGUsbiksci5vbj1pfX12YXIgbTk9YTYucHJvdG90eXBlLmNvbnN0cnVjdG9yO2Z1bmN0aW9uIHU5KHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCl9fWZ1bmN0aW9uIGY5KHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24obyl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LGUuY2FsbCh0aGlzLG8pLG4pfX1mdW5jdGlvbiBnOSh0LGUsbil7dmFyIG8saTtmdW5jdGlvbiBhKCl7dmFyIGE9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGEhPT1pJiYobz0oaT1hKSYmZjkodCxhLG4pKSxvfXJldHVybiBhLl92YWx1ZT1lLGF9ZnVuY3Rpb24gaDkodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3RoaXMudGV4dENvbnRlbnQ9dC5jYWxsKHRoaXMsZSl9fWZ1bmN0aW9uIGI5KHQpe3ZhciBlLG47ZnVuY3Rpb24gbygpe3ZhciBvPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBvIT09biYmKGU9KG49bykmJmg5KG8pKSxlfXJldHVybiBvLl92YWx1ZT10LG99dmFyIHk5PTA7ZnVuY3Rpb24gXzkodCxlLG4sbyl7dGhpcy5fZ3JvdXBzPXQsdGhpcy5fcGFyZW50cz1lLHRoaXMuX25hbWU9bix0aGlzLl9pZD1vfWZ1bmN0aW9uIEM5KCl7cmV0dXJuKyt5OX12YXIgTTk9YTYucHJvdG90eXBlO185LnByb3RvdHlwZT17Y29uc3RydWN0b3I6Xzksc2VsZWN0OmZ1bmN0aW9uIHY5KHQpe3ZhciBlPXRoaXMuX25hbWUsbj10aGlzLl9pZDsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9aTQodCkpO2Zvcih2YXIgbz10aGlzLl9ncm91cHMsaT1vLmxlbmd0aCxhPW5ldyBBcnJheShpKSxyPTA7cjxpOysrcilmb3IodmFyIHMsbCxjPW9bcl0sZD1jLmxlbmd0aCxwPWFbcl09bmV3IEFycmF5KGQpLG09MDttPGQ7KyttKShzPWNbbV0pJiYobD10LmNhbGwocyxzLl9fZGF0YV9fLG0sYykpJiYoIl9fZGF0YV9fImluIHMmJihsLl9fZGF0YV9fPXMuX19kYXRhX18pLHBbbV09bCxWOChwW21dLGUsbixtLHAsVzgocyxuKSkpO3JldHVybiBuZXcgXzkoYSx0aGlzLl9wYXJlbnRzLGUsbil9LHNlbGVjdEFsbDpmdW5jdGlvbiB4OSh0KXt2YXIgZT10aGlzLl9uYW1lLG49dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PXI0KHQpKTtmb3IodmFyIG89dGhpcy5fZ3JvdXBzLGk9by5sZW5ndGgsYT1bXSxyPVtdLHM9MDtzPGk7KytzKWZvcih2YXIgbCxjPW9bc10sZD1jLmxlbmd0aCxwPTA7cDxkOysrcClpZihsPWNbcF0pe2Zvcih2YXIgbSx1PXQuY2FsbChsLGwuX19kYXRhX18scCxjKSxmPVc4KGwsbiksZz0wLGg9dS5sZW5ndGg7ZzxoOysrZykobT11W2ddKSYmVjgobSxlLG4sZyx1LGYpO2EucHVzaCh1KSxyLnB1c2gobCl9cmV0dXJuIG5ldyBfOShhLHIsZSxuKX0sZmlsdGVyOmZ1bmN0aW9uIE85KHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1zNCh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLG89bmV3IEFycmF5KG4pLGk9MDtpPG47KytpKWZvcih2YXIgYSxyPWVbaV0scz1yLmxlbmd0aCxsPW9baV09W10sYz0wO2M8czsrK2MpKGE9cltjXSkmJnQuY2FsbChhLGEuX19kYXRhX18sYyxyKSYmbC5wdXNoKGEpO3JldHVybiBuZXcgXzkobyx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfSxtZXJnZTpmdW5jdGlvbiBQOSh0KXtpZih0Ll9pZCE9PXRoaXMuX2lkKXRocm93IG5ldyBFcnJvcjtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49dC5fZ3JvdXBzLG89ZS5sZW5ndGgsaT1NYXRoLm1pbihvLG4ubGVuZ3RoKSxhPW5ldyBBcnJheShvKSxyPTA7cjxpOysrcilmb3IodmFyIHMsbD1lW3JdLGM9bltyXSxkPWwubGVuZ3RoLHA9YVtyXT1uZXcgQXJyYXkoZCksbT0wO208ZDsrK20pKHM9bFttXXx8Y1ttXSkmJihwW21dPXMpO2Zvcig7cjxvOysrcilhW3JdPWVbcl07cmV0dXJuIG5ldyBfOShhLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9LHNlbGVjdGlvbjpmdW5jdGlvbiB3OSgpe3JldHVybiBuZXcgbTkodGhpcy5fZ3JvdXBzLHRoaXMuX3BhcmVudHMpfSx0cmFuc2l0aW9uOmZ1bmN0aW9uIGs5KCl7Zm9yKHZhciB0PXRoaXMuX25hbWUsZT10aGlzLl9pZCxuPUM5KCksbz10aGlzLl9ncm91cHMsaT1vLmxlbmd0aCxhPTA7YTxpOysrYSlmb3IodmFyIHIscz1vW2FdLGw9cy5sZW5ndGgsYz0wO2M8bDsrK2MpaWYocj1zW2NdKXt2YXIgZD1XOChyLGUpO1Y4KHIsdCxuLGMscyx7dGltZTpkLnRpbWUrZC5kZWxheStkLmR1cmF0aW9uLGRlbGF5OjAsZHVyYXRpb246ZC5kdXJhdGlvbixlYXNlOmQuZWFzZX0pfXJldHVybiBuZXcgXzkobyx0aGlzLl9wYXJlbnRzLHQsbil9LGNhbGw6TTkuY2FsbCxub2RlczpNOS5ub2Rlcyxub2RlOk05Lm5vZGUsc2l6ZTpNOS5zaXplLGVtcHR5Ok05LmVtcHR5LGVhY2g6TTkuZWFjaCxvbjpmdW5jdGlvbiBTOSh0LGUpe3ZhciBuPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/VzgodGhpcy5ub2RlKCksbikub24ub24odCk6dGhpcy5lYWNoKHA5KG4sdCxlKSl9LGF0dHI6ZnVuY3Rpb24gRDkodCxlKXt2YXIgbj0kNSh0KSxvPSJ0cmFuc2Zvcm0iPT09bj9iODpYODtyZXR1cm4gdGhpcy5hdHRyVHdlZW4odCwiZnVuY3Rpb24iPT10eXBlb2YgZT8obi5sb2NhbD9lOTp0OSkobixvLFo4KHRoaXMsImF0dHIuIit0LGUpKTpudWxsPT1lPyhuLmxvY2FsP0o4Oks4KShuKToobi5sb2NhbD8kODpROCkobixvLGUpKX0sYXR0clR3ZWVuOmZ1bmN0aW9uIEU5KHQsZSl7dmFyIG49ImF0dHIuIit0O2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4obj10aGlzLnR3ZWVuKG4pKSYmbi5fdmFsdWU7aWYobnVsbD09ZSlyZXR1cm4gdGhpcy50d2VlbihuLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcjt2YXIgbz0kNSh0KTtyZXR1cm4gdGhpcy50d2VlbihuLChvLmxvY2FsP2k5OmE5KShvLGUpKX0sc3R5bGU6ZnVuY3Rpb24gQTkodCxlLG4pe3ZhciBvPSJ0cmFuc2Zvcm0iPT0odCs9IiIpP2c4Olg4O3JldHVybiBudWxsPT1lP3RoaXMuc3R5bGVUd2Vlbih0LChmdW5jdGlvbiBpKHQsZSl7dmFyIG4sbyxpO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPXg0KHRoaXMsdCkscj0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KSx4NCh0aGlzLHQpKTtyZXR1cm4gYT09PXI/bnVsbDphPT09biYmcj09PW8/aTppPWUobj1hLG89cil9fSkodCxvKSkub24oImVuZC5zdHlsZS4iK3QsdTkodCkpOiJmdW5jdGlvbiI9PXR5cGVvZiBlP3RoaXMuc3R5bGVUd2Vlbih0LChmdW5jdGlvbiByKHQsZSxuKXt2YXIgbyxpLGE7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9eDQodGhpcyx0KSxzPW4odGhpcyksbD1zKyIiO3JldHVybiBudWxsPT1zJiYodGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KSxsPXM9eDQodGhpcyx0KSkscj09PWw/bnVsbDpyPT09byYmbD09PWk/YTooaT1sLGE9ZShvPXIscykpfX0pKHQsbyxaOCh0aGlzLCJzdHlsZS4iK3QsZSkpKS5lYWNoKChmdW5jdGlvbiBhKHQsZSl7dmFyIG4sbyxpLGEscj0ic3R5bGUuIitlLHM9ImVuZC4iK3I7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGw9VTgodGhpcyx0KSxjPWwub24sZD1udWxsPT1sLnZhbHVlW3JdP2F8fChhPXU5KGUpKTp2b2lkIDA7Yz09PW4mJmk9PT1kfHwobz0obj1jKS5jb3B5KCkpLm9uKHMsaT1kKSxsLm9uPW99fSkodGhpcy5faWQsdCkpOnRoaXMuc3R5bGVUd2Vlbih0LChmdW5jdGlvbiBzKHQsZSxuKXt2YXIgbyxpLGE9bisiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj14NCh0aGlzLHQpO3JldHVybiByPT09YT9udWxsOnI9PT1vP2k6aT1lKG89cixuKX19KSh0LG8sZSksbikub24oImVuZC5zdHlsZS4iK3QsbnVsbCl9LHN0eWxlVHdlZW46ZnVuY3Rpb24gUjkodCxlLG4pe3ZhciBvPSJzdHlsZS4iKyh0Kz0iIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihvPXRoaXMudHdlZW4obykpJiZvLl92YWx1ZTtpZihudWxsPT1lKXJldHVybiB0aGlzLnR3ZWVuKG8sbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKG8sZzkodCxlLG51bGw9PW4/IiI6bikpfSx0ZXh0OmZ1bmN0aW9uIFQ5KHQpe3JldHVybiB0aGlzLnR3ZWVuKCJ0ZXh0IiwiZnVuY3Rpb24iPT10eXBlb2YgdD8oZnVuY3Rpb24gZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpO3RoaXMudGV4dENvbnRlbnQ9bnVsbD09ZT8iIjplfX0pKFo4KHRoaXMsInRleHQiLHQpKTooZnVuY3Rpb24gbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PXR9fSkobnVsbD09dD8iIjp0KyIiKSl9LHRleHRUd2VlbjpmdW5jdGlvbiBOOSh0KXt2YXIgZT0idGV4dCI7aWYoYXJndW1lbnRzLmxlbmd0aDwxKXJldHVybihlPXRoaXMudHdlZW4oZSkpJiZlLl92YWx1ZTtpZihudWxsPT10KXJldHVybiB0aGlzLnR3ZWVuKGUsbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKGUsYjkodCkpfSxyZW1vdmU6ZnVuY3Rpb24gSTkoKXtyZXR1cm4gdGhpcy5vbigiZW5kLnJlbW92ZSIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlO2Zvcih2YXIgbiBpbiB0aGlzLl9fdHJhbnNpdGlvbilpZigrbiE9PWUpcmV0dXJuO3QmJnQucmVtb3ZlQ2hpbGQodGhpcyl9fSkodGhpcy5faWQpKX0sdHdlZW46ZnVuY3Rpb24gejkodCxlKXt2YXIgbj10aGlzLl9pZDtpZih0Kz0iIixhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgbyxpPVc4KHRoaXMubm9kZSgpLG4pLnR3ZWVuLGE9MCxyPWkubGVuZ3RoO2E8cjsrK2EpaWYoKG89aVthXSkubmFtZT09PXQpcmV0dXJuIG8udmFsdWU7cmV0dXJuIG51bGx9cmV0dXJuIHRoaXMuZWFjaCgobnVsbD09ZT9ZODpxOCkobix0LGUpKX0sZGVsYXk6ZnVuY3Rpb24gSDkodCl7dmFyIGU9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgdD9yOTpzOSkoZSx0KSk6VzgodGhpcy5ub2RlKCksZSkuZGVsYXl9LGR1cmF0aW9uOmZ1bmN0aW9uIEY5KHQpe3ZhciBlPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIHQ/bDk6YzkpKGUsdCkpOlc4KHRoaXMubm9kZSgpLGUpLmR1cmF0aW9ufSxlYXNlOmZ1bmN0aW9uIEw5KHQpe3ZhciBlPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChkOShlLHQpKTpXOCh0aGlzLm5vZGUoKSxlKS5lYXNlfSxlbmQ6ZnVuY3Rpb24gQjkoKXt2YXIgdCxlLG49dGhpcyxvPW4uX2lkLGk9bi5zaXplKCk7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihhLHIpe3ZhciBzPXt2YWx1ZTpyfSxsPXt2YWx1ZTpmdW5jdGlvbigpezA9PS0taSYmYSgpfX07bi5lYWNoKChmdW5jdGlvbigpe3ZhciBuPVU4KHRoaXMsbyksaT1uLm9uO2khPT10JiYoKGU9KHQ9aSkuY29weSgpKS5fLmNhbmNlbC5wdXNoKHMpLGUuXy5pbnRlcnJ1cHQucHVzaChzKSxlLl8uZW5kLnB1c2gobCkpLG4ub249ZX0pKX0pKX19O3ZhciBWOT17dGltZTpudWxsLGRlbGF5OjAsZHVyYXRpb246MjUwLGVhc2U6ZnVuY3Rpb24gajkodCl7cmV0dXJuKCh0Kj0yKTw9MT90KnQqdDoodC09MikqdCp0KzIpLzJ9fTtmdW5jdGlvbiBVOSh0LGUpe2Zvcih2YXIgbjshKG49dC5fX3RyYW5zaXRpb24pfHwhKG49bltlXSk7KWlmKCEodD10LnBhcmVudE5vZGUpKXJldHVybiBWOS50aW1lPUE4KCksVjk7cmV0dXJuIG59ZnVuY3Rpb24gVzkodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIEc5KHQsZSxuKXt0aGlzLnRhcmdldD10LHRoaXMudHlwZT1lLHRoaXMuc2VsZWN0aW9uPW59ZnVuY3Rpb24gWTkoKXtaNC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBxOSgpe1o0LnByZXZlbnREZWZhdWx0KCksWjQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9YTYucHJvdG90eXBlLmludGVycnVwdD1mdW5jdGlvbiBaOSh0KXtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpe0c4KHRoaXMsdCl9KSl9LGE2LnByb3RvdHlwZS50cmFuc2l0aW9uPWZ1bmN0aW9uIFg5KHQpe3ZhciBlLG47dCBpbnN0YW5jZW9mIF85PyhlPXQuX2lkLHQ9dC5fbmFtZSk6KGU9QzkoKSwobj1WOSkudGltZT1BOCgpLHQ9bnVsbD09dD9udWxsOnQrIiIpO2Zvcih2YXIgbz10aGlzLl9ncm91cHMsaT1vLmxlbmd0aCxhPTA7YTxpOysrYSlmb3IodmFyIHIscz1vW2FdLGw9cy5sZW5ndGgsYz0wO2M8bDsrK2MpKHI9c1tjXSkmJlY4KHIsdCxlLGMscyxufHxVOShyLGUpKTtyZXR1cm4gbmV3IF85KG8sdGhpcy5fcGFyZW50cyx0LGUpfTt2YXIgSzk9e25hbWU6ImRyYWcifSxKOT17bmFtZToic3BhY2UifSxROT17bmFtZToiaGFuZGxlIn0sJDk9e25hbWU6ImNlbnRlciJ9O2Z1bmN0aW9uIHR0dCh0KXtyZXR1cm5bK3RbMF0sK3RbMV1dfWZ1bmN0aW9uIGV0dCh0KXtyZXR1cm5bdHR0KHRbMF0pLHR0dCh0WzFdKV19ZnVuY3Rpb24gbnR0KHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4oZnVuY3Rpb24gbih0LGUsbyl7YXJndW1lbnRzLmxlbmd0aDwzJiYobz1lLGU9czYoKS5jaGFuZ2VkVG91Y2hlcyk7Zm9yKHZhciBpLGE9MCxyPWU/ZS5sZW5ndGg6MDthPHI7KythKWlmKChpPWVbYV0pLmlkZW50aWZpZXI9PT1vKXJldHVybiBsNih0LGkpO3JldHVybiBudWxsfSkoZSxaNC50b3VjaGVzLHQpfX12YXIgb3R0PXtuYW1lOiJ4IixoYW5kbGVzOlsidyIsImUiXS5tYXAoZHR0KSxpbnB1dDpmdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT10P251bGw6W1srdFswXSxlWzBdWzFdXSxbK3RbMV0sZVsxXVsxXV1dfSxvdXRwdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQmJlt0WzBdWzBdLHRbMV1bMF1dfX0saXR0PXtuYW1lOiJ5IixoYW5kbGVzOlsibiIsInMiXS5tYXAoZHR0KSxpbnB1dDpmdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT10P251bGw6W1tlWzBdWzBdLCt0WzBdXSxbZVsxXVswXSwrdFsxXV1dfSxvdXRwdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQmJlt0WzBdWzFdLHRbMV1bMV1dfX0sYXR0PXtvdmVybGF5OiJjcm9zc2hhaXIiLHNlbGVjdGlvbjoibW92ZSIsbjoibnMtcmVzaXplIixlOiJldy1yZXNpemUiLHM6Im5zLXJlc2l6ZSIsdzoiZXctcmVzaXplIixudzoibndzZS1yZXNpemUiLG5lOiJuZXN3LXJlc2l6ZSIsc2U6Im53c2UtcmVzaXplIixzdzoibmVzdy1yZXNpemUifSxydHQ9e2U6InciLHc6ImUiLG53OiJuZSIsbmU6Im53IixzZToic3ciLHN3OiJzZSJ9LHN0dD17bjoicyIsczoibiIsbnc6InN3IixuZToic2UiLHNlOiJuZSIsc3c6Im53In0sbHR0PXtvdmVybGF5OjEsc2VsZWN0aW9uOjEsbjpudWxsLGU6MSxzOm51bGwsdzotMSxudzotMSxuZToxLHNlOjEsc3c6LTF9LGN0dD17b3ZlcmxheToxLHNlbGVjdGlvbjoxLG46LTEsZTpudWxsLHM6MSx3Om51bGwsbnc6LTEsbmU6LTEsc2U6MSxzdzoxfTtmdW5jdGlvbiBkdHQodCl7cmV0dXJue3R5cGU6dH19ZnVuY3Rpb24gcHR0KCl7cmV0dXJuIVo0LmN0cmxLZXkmJiFaNC5idXR0b259ZnVuY3Rpb24gbXR0KCl7dmFyIHQ9dGhpcy5vd25lclNWR0VsZW1lbnR8fHRoaXM7cmV0dXJuIHQuaGFzQXR0cmlidXRlKCJ2aWV3Qm94Iik/W1sodD10LnZpZXdCb3guYmFzZVZhbCkueCx0LnldLFt0LngrdC53aWR0aCx0LnkrdC5oZWlnaHRdXTpbWzAsMF0sW3Qud2lkdGguYmFzZVZhbC52YWx1ZSx0LmhlaWdodC5iYXNlVmFsLnZhbHVlXV19ZnVuY3Rpb24gdXR0KCl7cmV0dXJuIG5hdmlnYXRvci5tYXhUb3VjaFBvaW50c3x8Im9udG91Y2hzdGFydCJpbiB0aGlzfWZ1bmN0aW9uIGZ0dCh0KXtmb3IoOyF0Ll9fYnJ1c2g7KWlmKCEodD10LnBhcmVudE5vZGUpKXJldHVybjtyZXR1cm4gdC5fX2JydXNofWZ1bmN0aW9uIGd0dCh0KXtyZXR1cm4gdFswXVswXT09PXRbMV1bMF18fHRbMF1bMV09PT10WzFdWzFdfXZhciBodHQ9TWF0aC5QSSxidHQ9MipodHQseXR0PTFlLTYsX3R0PWJ0dC15dHQ7ZnVuY3Rpb24gQ3R0KCl7dGhpcy5feDA9dGhpcy5feTA9dGhpcy5feDE9dGhpcy5feTE9bnVsbCx0aGlzLl89IiJ9ZnVuY3Rpb24gTXR0KCl7cmV0dXJuIG5ldyBDdHR9Q3R0LnByb3RvdHlwZT1NdHQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpDdHQsbW92ZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPStlKX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7bnVsbCE9PXRoaXMuX3gxJiYodGhpcy5feDE9dGhpcy5feDAsdGhpcy5feTE9dGhpcy5feTAsdGhpcy5fKz0iWiIpfSxsaW5lVG86ZnVuY3Rpb24odCxlKXt0aGlzLl8rPSJMIisodGhpcy5feDE9K3QpKyIsIisodGhpcy5feTE9K2UpfSxxdWFkcmF0aWNDdXJ2ZVRvOmZ1bmN0aW9uKHQsZSxuLG8pe3RoaXMuXys9IlEiKyArdCsiLCIrICtlKyIsIisodGhpcy5feDE9K24pKyIsIisodGhpcy5feTE9K28pfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKHQsZSxuLG8saSxhKXt0aGlzLl8rPSJDIisgK3QrIiwiKyArZSsiLCIrICtuKyIsIisgK28rIiwiKyh0aGlzLl94MT0raSkrIiwiKyh0aGlzLl95MT0rYSl9LGFyY1RvOmZ1bmN0aW9uKHQsZSxuLG8saSl7dmFyIGE9dGhpcy5feDEscj10aGlzLl95MSxzPShuPStuKS0odD0rdCksbD0obz0rbyktKGU9K2UpLGM9YS10LGQ9ci1lLHA9YypjK2QqZDtpZigoaT0raSk8MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIitpKTtpZihudWxsPT09dGhpcy5feDEpdGhpcy5fKz0iTSIrKHRoaXMuX3gxPXQpKyIsIisodGhpcy5feTE9ZSk7ZWxzZSBpZihwPnl0dClpZihNYXRoLmFicyhkKnMtbCpjKT55dHQmJmkpe3ZhciBtPW4tYSx1PW8tcixmPXMqcytsKmwsZz1tKm0rdSp1LGg9TWF0aC5zcXJ0KGYpLGI9TWF0aC5zcXJ0KHApLHk9aSpNYXRoLnRhbigoaHR0LU1hdGguYWNvcygoZitwLWcpLygyKmgqYikpKS8yKSxfPXkvYixDPXkvaDtNYXRoLmFicyhfLTEpPnl0dCYmKHRoaXMuXys9IkwiKyh0K18qYykrIiwiKyhlK18qZCkpLHRoaXMuXys9IkEiK2krIiwiK2krIiwwLDAsIisgKyhkKm0+Yyp1KSsiLCIrKHRoaXMuX3gxPXQrQypzKSsiLCIrKHRoaXMuX3kxPWUrQypsKX1lbHNlIHRoaXMuXys9IkwiKyh0aGlzLl94MT10KSsiLCIrKHRoaXMuX3kxPWUpfSxhcmM6ZnVuY3Rpb24odCxlLG4sbyxpLGEpe3Q9K3QsZT0rZSxhPSEhYTt2YXIgcj0obj0rbikqTWF0aC5jb3Mobykscz1uKk1hdGguc2luKG8pLGw9dCtyLGM9ZStzLGQ9MV5hLHA9YT9vLWk6aS1vO2lmKG48MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIituKTtudWxsPT09dGhpcy5feDE/dGhpcy5fKz0iTSIrbCsiLCIrYzooTWF0aC5hYnModGhpcy5feDEtbCk+eXR0fHxNYXRoLmFicyh0aGlzLl95MS1jKT55dHQpJiYodGhpcy5fKz0iTCIrbCsiLCIrYyksbiYmKHA8MCYmKHA9cCVidHQrYnR0KSxwPl90dD90aGlzLl8rPSJBIituKyIsIituKyIsMCwxLCIrZCsiLCIrKHQtcikrIiwiKyhlLXMpKyJBIituKyIsIituKyIsMCwxLCIrZCsiLCIrKHRoaXMuX3gxPWwpKyIsIisodGhpcy5feTE9Yyk6cD55dHQmJih0aGlzLl8rPSJBIituKyIsIituKyIsMCwiKyArKHA+PWh0dCkrIiwiK2QrIiwiKyh0aGlzLl94MT10K24qTWF0aC5jb3MoaSkpKyIsIisodGhpcy5feTE9ZStuKk1hdGguc2luKGkpKSkpfSxyZWN0OmZ1bmN0aW9uKHQsZSxuLG8pe3RoaXMuXys9Ik0iKyh0aGlzLl94MD10aGlzLl94MT0rdCkrIiwiKyh0aGlzLl95MD10aGlzLl95MT0rZSkrImgiKyArbisidiIrICtvKyJoIistbisiWiJ9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX319O3ZhciB2dHQ9IiQiO2Z1bmN0aW9uIHh0dCgpe31mdW5jdGlvbiBPdHQodCxlKXt2YXIgbj1uZXcgeHR0O2lmKHQgaW5zdGFuY2VvZiB4dHQpdC5lYWNoKChmdW5jdGlvbih0LGUpe24uc2V0KGUsdCl9KSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KHQpKXt2YXIgbyxpPS0xLGE9dC5sZW5ndGg7aWYobnVsbD09ZSlmb3IoOysraTxhOyluLnNldChpLHRbaV0pO2Vsc2UgZm9yKDsrK2k8YTspbi5zZXQoZShvPXRbaV0saSx0KSxvKX1lbHNlIGlmKHQpZm9yKHZhciByIGluIHQpbi5zZXQocix0W3JdKTtyZXR1cm4gbn1mdW5jdGlvbiBQdHQoKXt9eHR0LnByb3RvdHlwZT1PdHQucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp4dHQsaGFzOmZ1bmN0aW9uKHQpe3JldHVybiB2dHQrdCBpbiB0aGlzfSxnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXNbdnR0K3RdfSxzZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpc1t2dHQrdF09ZSx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24odCl7dmFyIGU9dnR0K3Q7cmV0dXJuIGUgaW4gdGhpcyYmZGVsZXRlIHRoaXNbZV19LGNsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PXZ0dCYmZGVsZXRlIHRoaXNbdF19LGtleXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcyllWzBdPT09dnR0JiZ0LnB1c2goZS5zbGljZSgxKSk7cmV0dXJuIHR9LHZhbHVlczpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzKWVbMF09PT12dHQmJnQucHVzaCh0aGlzW2VdKTtyZXR1cm4gdH0sZW50cmllczpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzKWVbMF09PT12dHQmJnQucHVzaCh7a2V5OmUuc2xpY2UoMSksdmFsdWU6dGhpc1tlXX0pO3JldHVybiB0fSxzaXplOmZ1bmN0aW9uKCl7dmFyIHQ9MDtmb3IodmFyIGUgaW4gdGhpcyllWzBdPT09dnR0JiYrK3Q7cmV0dXJuIHR9LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMpaWYodFswXT09PXZ0dClyZXR1cm4hMTtyZXR1cm4hMH0sZWFjaDpmdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcyllWzBdPT09dnR0JiZ0KHRoaXNbZV0sZS5zbGljZSgxKSx0aGlzKX19O3ZhciB3dHQ9T3R0LnByb3RvdHlwZTtmdW5jdGlvbiBrdHQodCxlKXtpZigobj0odD1lP3QudG9FeHBvbmVudGlhbChlLTEpOnQudG9FeHBvbmVudGlhbCgpKS5pbmRleE9mKCJlIikpPDApcmV0dXJuIG51bGw7dmFyIG4sbz10LnNsaWNlKDAsbik7cmV0dXJuW28ubGVuZ3RoPjE/b1swXStvLnNsaWNlKDIpOm8sK3Quc2xpY2UobisxKV19ZnVuY3Rpb24gU3R0KHQpe3JldHVybih0PWt0dChNYXRoLmFicyh0KSkpP3RbMV06TmFOfVB0dC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlB0dCxoYXM6d3R0LmhhcyxhZGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXNbdnR0Kyh0Kz0iIildPXQsdGhpc30scmVtb3ZlOnd0dC5yZW1vdmUsY2xlYXI6d3R0LmNsZWFyLHZhbHVlczp3dHQua2V5cyxzaXplOnd0dC5zaXplLGVtcHR5Ond0dC5lbXB0eSxlYWNoOnd0dC5lYWNofTt2YXIgRHR0LEV0dD0vXig/OiguKT8oWzw+PV5dKSk/KFsrXC0oIF0pPyhbJCNdKT8oMCk/KFxkKyk/KCwpPyhcLlxkKyk/KH4pPyhbYS16JV0pPyQvaTtmdW5jdGlvbiBBdHQodCl7aWYoIShlPUV0dC5leGVjKHQpKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9ybWF0OiAiK3QpO3ZhciBlO3JldHVybiBuZXcgUnR0KHtmaWxsOmVbMV0sYWxpZ246ZVsyXSxzaWduOmVbM10sc3ltYm9sOmVbNF0semVybzplWzVdLHdpZHRoOmVbNl0sY29tbWE6ZVs3XSxwcmVjaXNpb246ZVs4XSYmZVs4XS5zbGljZSgxKSx0cmltOmVbOV0sdHlwZTplWzEwXX0pfWZ1bmN0aW9uIFJ0dCh0KXt0aGlzLmZpbGw9dm9pZCAwPT09dC5maWxsPyIgIjp0LmZpbGwrIiIsdGhpcy5hbGlnbj12b2lkIDA9PT10LmFsaWduPyI+Ijp0LmFsaWduKyIiLHRoaXMuc2lnbj12b2lkIDA9PT10LnNpZ24/Ii0iOnQuc2lnbisiIix0aGlzLnN5bWJvbD12b2lkIDA9PT10LnN5bWJvbD8iIjp0LnN5bWJvbCsiIix0aGlzLnplcm89ISF0Lnplcm8sdGhpcy53aWR0aD12b2lkIDA9PT10LndpZHRoP3ZvaWQgMDordC53aWR0aCx0aGlzLmNvbW1hPSEhdC5jb21tYSx0aGlzLnByZWNpc2lvbj12b2lkIDA9PT10LnByZWNpc2lvbj92b2lkIDA6K3QucHJlY2lzaW9uLHRoaXMudHJpbT0hIXQudHJpbSx0aGlzLnR5cGU9dm9pZCAwPT09dC50eXBlPyIiOnQudHlwZSsiIn1mdW5jdGlvbiBUdHQodCxlKXt2YXIgbj1rdHQodCxlKTtpZighbilyZXR1cm4gdCsiIjt2YXIgbz1uWzBdLGk9blsxXTtyZXR1cm4gaTwwPyIwLiIrbmV3IEFycmF5KC1pKS5qb2luKCIwIikrbzpvLmxlbmd0aD5pKzE/by5zbGljZSgwLGkrMSkrIi4iK28uc2xpY2UoaSsxKTpvK25ldyBBcnJheShpLW8ubGVuZ3RoKzIpLmpvaW4oIjAiKX1BdHQucHJvdG90eXBlPVJ0dC5wcm90b3R5cGUsUnR0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbGwrdGhpcy5hbGlnbit0aGlzLnNpZ24rdGhpcy5zeW1ib2wrKHRoaXMuemVybz8iMCI6IiIpKyh2b2lkIDA9PT10aGlzLndpZHRoPyIiOk1hdGgubWF4KDEsMHx0aGlzLndpZHRoKSkrKHRoaXMuY29tbWE/IiwiOiIiKSsodm9pZCAwPT09dGhpcy5wcmVjaXNpb24/IiI6Ii4iK01hdGgubWF4KDAsMHx0aGlzLnByZWNpc2lvbikpKyh0aGlzLnRyaW0/In4iOiIiKSt0aGlzLnR5cGV9O3ZhciBOdHQ9eyIlIjpmdW5jdGlvbih0LGUpe3JldHVybigxMDAqdCkudG9GaXhlZChlKX0sYjpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZygyKX0sYzpmdW5jdGlvbih0KXtyZXR1cm4gdCsiIn0sZDpmdW5jdGlvbiBJdHQodCl7cmV0dXJuIE1hdGguYWJzKHQ9TWF0aC5yb3VuZCh0KSk+PTFlMjE/dC50b0xvY2FsZVN0cmluZygiZW4iKS5yZXBsYWNlKC8sL2csIiIpOnQudG9TdHJpbmcoMTApfSxlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudG9FeHBvbmVudGlhbChlKX0sZjpmdW5jdGlvbih0LGUpe3JldHVybiB0LnRvRml4ZWQoZSl9LGc6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50b1ByZWNpc2lvbihlKX0sbzpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZyg4KX0scDpmdW5jdGlvbih0LGUpe3JldHVybiBUdHQoMTAwKnQsZSl9LHI6VHR0LHM6ZnVuY3Rpb24genR0KHQsZSl7dmFyIG49a3R0KHQsZSk7aWYoIW4pcmV0dXJuIHQrIiI7dmFyIG89blswXSxpPW5bMV0sYT1pLShEdHQ9MypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoaS8zKSkpKSsxLHI9by5sZW5ndGg7cmV0dXJuIGE9PT1yP286YT5yP28rbmV3IEFycmF5KGEtcisxKS5qb2luKCIwIik6YT4wP28uc2xpY2UoMCxhKSsiLiIrby5zbGljZShhKToiMC4iK25ldyBBcnJheSgxLWEpLmpvaW4oIjAiKStrdHQodCxNYXRoLm1heCgwLGUrYS0xKSlbMF19LFg6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9LHg6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoMTYpfX07ZnVuY3Rpb24gSHR0KHQpe3JldHVybiB0fXZhciBGdHQsTHR0LEJ0dCxWdHQ9QXJyYXkucHJvdG90eXBlLm1hcCxqdHQ9WyJ5IiwieiIsImEiLCJmIiwicCIsIm4iLCLCtSIsIm0iLCIiLCJrIiwiTSIsIkciLCJUIiwiUCIsIkUiLCJaIiwiWSJdO2Z1bmN0aW9uIFV0dCh0LGUpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOnRoaXMucmFuZ2UodCk7YnJlYWs7ZGVmYXVsdDp0aGlzLnJhbmdlKGUpLmRvbWFpbih0KX1yZXR1cm4gdGhpc30hKGZ1bmN0aW9uIFd0dCh0KXtGdHQ9KGZ1bmN0aW9uIGUodCl7dmFyIGU9dm9pZCAwPT09dC5ncm91cGluZ3x8dm9pZCAwPT09dC50aG91c2FuZHM/SHR0OihmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4sbyl7Zm9yKHZhciBpPW4ubGVuZ3RoLGE9W10scj0wLHM9dFswXSxsPTA7aT4wJiZzPjAmJihsK3MrMT5vJiYocz1NYXRoLm1heCgxLG8tbCkpLGEucHVzaChuLnN1YnN0cmluZyhpLT1zLGkrcykpLCEoKGwrPXMrMSk+bykpOylzPXRbcj0ocisxKSV0Lmxlbmd0aF07cmV0dXJuIGEucmV2ZXJzZSgpLmpvaW4oZSl9fSkoVnR0LmNhbGwodC5ncm91cGluZyxOdW1iZXIpLHQudGhvdXNhbmRzKyIiKSxvPXZvaWQgMD09PXQuY3VycmVuY3k/IiI6dC5jdXJyZW5jeVswXSsiIixpPXZvaWQgMD09PXQuY3VycmVuY3k/IiI6dC5jdXJyZW5jeVsxXSsiIixhPXZvaWQgMD09PXQuZGVjaW1hbD8iLiI6dC5kZWNpbWFsKyIiLHI9dm9pZCAwPT09dC5udW1lcmFscz9IdHQ6KGZ1bmN0aW9uIHModCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1swLTldL2csKGZ1bmN0aW9uKGUpe3JldHVybiB0WytlXX0pKX19KShWdHQuY2FsbCh0Lm51bWVyYWxzLFN0cmluZykpLGw9dm9pZCAwPT09dC5wZXJjZW50PyIlIjp0LnBlcmNlbnQrIiIsYz12b2lkIDA9PT10Lm1pbnVzPyItIjp0Lm1pbnVzKyIiLGQ9dm9pZCAwPT09dC5uYW4/Ik5hTiI6dC5uYW4rIiI7ZnVuY3Rpb24gcCh0KXt2YXIgbj0odD1BdHQodCkpLmZpbGwscz10LmFsaWduLHA9dC5zaWduLG09dC5zeW1ib2wsdT10Lnplcm8sZj10LndpZHRoLGc9dC5jb21tYSxoPXQucHJlY2lzaW9uLGI9dC50cmltLHk9dC50eXBlOyJuIj09PXk/KGc9ITAseT0iZyIpOk50dFt5XXx8KHZvaWQgMD09PWgmJihoPTEyKSxiPSEwLHk9ImciKSwodXx8IjAiPT09biYmIj0iPT09cykmJih1PSEwLG49IjAiLHM9Ij0iKTt2YXIgXz0iJCI9PT1tP286IiMiPT09bSYmL1tib3hYXS8udGVzdCh5KT8iMCIreS50b0xvd2VyQ2FzZSgpOiIiLEM9IiQiPT09bT9pOi9bJXBdLy50ZXN0KHkpP2w6IiIsTT1OdHRbeV0sdj0vW2RlZmdwcnMlXS8udGVzdCh5KTtmdW5jdGlvbiB4KHQpe3ZhciBvLGksbCxtPV8seD1DO2lmKCJjIj09PXkpeD1NKHQpK3gsdD0iIjtlbHNle3ZhciBPPSh0PSt0KTwwfHwxL3Q8MDtpZih0PWlzTmFOKHQpP2Q6TShNYXRoLmFicyh0KSxoKSxiJiYodD0oZnVuY3Rpb24gUCh0KXt0OmZvcih2YXIgZSxuPXQubGVuZ3RoLG89MSxpPS0xO288bjsrK28pc3dpdGNoKHRbb10pe2Nhc2UiLiI6aT1lPW87YnJlYWs7Y2FzZSIwIjowPT09aSYmKGk9byksZT1vO2JyZWFrO2RlZmF1bHQ6aWYoISt0W29dKWJyZWFrIHQ7aT4wJiYoaT0wKX1yZXR1cm4gaT4wP3Quc2xpY2UoMCxpKSt0LnNsaWNlKGUrMSk6dH0pKHQpKSxPJiYwPT0rdCYmIisiIT09cCYmKE89ITEpLG09KE8/IigiPT09cD9wOmM6Ii0iPT09cHx8IigiPT09cD8iIjpwKSttLHg9KCJzIj09PXk/anR0WzgrRHR0LzNdOiIiKSt4KyhPJiYiKCI9PT1wPyIpIjoiIiksdilmb3Iobz0tMSxpPXQubGVuZ3RoOysrbzxpOylpZig0OD4obD10LmNoYXJDb2RlQXQobykpfHxsPjU3KXt4PSg0Nj09PWw/YSt0LnNsaWNlKG8rMSk6dC5zbGljZShvKSkreCx0PXQuc2xpY2UoMCxvKTticmVha319ZyYmIXUmJih0PWUodCwxLzApKTt2YXIgdz1tLmxlbmd0aCt0Lmxlbmd0aCt4Lmxlbmd0aCxrPXc8Zj9uZXcgQXJyYXkoZi13KzEpLmpvaW4obik6IiI7c3dpdGNoKGcmJnUmJih0PWUoayt0LGsubGVuZ3RoP2YteC5sZW5ndGg6MS8wKSxrPSIiKSxzKXtjYXNlIjwiOnQ9bSt0K3grazticmVhaztjYXNlIj0iOnQ9bStrK3QreDticmVhaztjYXNlIl4iOnQ9ay5zbGljZSgwLHc9ay5sZW5ndGg+PjEpK20rdCt4K2suc2xpY2Uodyk7YnJlYWs7ZGVmYXVsdDp0PWsrbSt0K3h9cmV0dXJuIHIodCl9cmV0dXJuIGg9dm9pZCAwPT09aD82Oi9bZ3Byc10vLnRlc3QoeSk/TWF0aC5tYXgoMSxNYXRoLm1pbigyMSxoKSk6TWF0aC5tYXgoMCxNYXRoLm1pbigyMCxoKSkseC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0KyIifSx4fXJldHVybntmb3JtYXQ6cCxmb3JtYXRQcmVmaXg6ZnVuY3Rpb24gbSh0LGUpe3ZhciBuPXAoKCh0PUF0dCh0KSkudHlwZT0iZiIsdCkpLG89MypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoU3R0KGUpLzMpKSksaT1NYXRoLnBvdygxMCwtbyksYT1qdHRbOCtvLzNdO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbihpKnQpK2F9fX19KSh0KSxMdHQ9RnR0LmZvcm1hdCxCdHQ9RnR0LmZvcm1hdFByZWZpeH0pKHtkZWNpbWFsOiIuIix0aG91c2FuZHM6IiwiLGdyb3VwaW5nOlszXSxjdXJyZW5jeTpbIiQiLCIiXSxtaW51czoiLSJ9KTt2YXIgR3R0PUFycmF5LnByb3RvdHlwZSxZdHQ9R3R0Lm1hcCxxdHQ9R3R0LnNsaWNlLFp0dD17bmFtZToiaW1wbGljaXQifTtmdW5jdGlvbiBYdHQoKXt2YXIgdD1PdHQoKSxlPVtdLG49W10sbz1adHQ7ZnVuY3Rpb24gaShpKXt2YXIgYT1pKyIiLHI9dC5nZXQoYSk7aWYoIXIpe2lmKG8hPT1adHQpcmV0dXJuIG87dC5zZXQoYSxyPWUucHVzaChpKSl9cmV0dXJuIG5bKHItMSklbi5sZW5ndGhdfXJldHVybiBpLmRvbWFpbj1mdW5jdGlvbihuKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZS5zbGljZSgpO2U9W10sdD1PdHQoKTtmb3IodmFyIG8sYSxyPS0xLHM9bi5sZW5ndGg7KytyPHM7KXQuaGFzKGE9KG89bltyXSkrIiIpfHx0LnNldChhLGUucHVzaChvKSk7cmV0dXJuIGl9LGkucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49cXR0LmNhbGwodCksaSk6bi5zbGljZSgpfSxpLnVua25vd249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dCxpKTpvfSxpLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gWHR0KGUsbikudW5rbm93bihvKX0sVXR0LmFwcGx5KGksYXJndW1lbnRzKSxpfWZ1bmN0aW9uIEt0dCgpe3ZhciB0LGUsbj1YdHQoKS51bmtub3duKHZvaWQgMCksbz1uLmRvbWFpbixpPW4ucmFuZ2UsYT1bMCwxXSxyPSExLHM9MCxsPTAsYz0uNTtmdW5jdGlvbiBkKCl7dmFyIG49bygpLmxlbmd0aCxkPWFbMV08YVswXSxwPWFbZC0wXSxtPWFbMS1kXTt0PShtLXApL01hdGgubWF4KDEsbi1zKzIqbCksciYmKHQ9TWF0aC5mbG9vcih0KSkscCs9KG0tcC10KihuLXMpKSpjLGU9dCooMS1zKSxyJiYocD1NYXRoLnJvdW5kKHApLGU9TWF0aC5yb3VuZChlKSk7dmFyIHU9UDUobikubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gcCt0KmV9KSk7cmV0dXJuIGkoZD91LnJldmVyc2UoKTp1KX1yZXR1cm4gZGVsZXRlIG4udW5rbm93bixuLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obyh0KSxkKCkpOm8oKX0sbi5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1bK3RbMF0sK3RbMV1dLGQoKSk6YS5zbGljZSgpfSxuLnJhbmdlUm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGE9Wyt0WzBdLCt0WzFdXSxyPSEwLGQoKX0sbi5iYW5kd2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gZX0sbi5zdGVwPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LG4ucm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ISF0LGQoKSk6cn0sbi5wYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPU1hdGgubWluKDEsbD0rdCksZCgpKTpzfSxuLnBhZGRpbmdJbm5lcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1NYXRoLm1pbigxLHQpLGQoKSk6c30sbi5wYWRkaW5nT3V0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9K3QsZCgpKTpsfSxuLmFsaWduPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPU1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSksZCgpKTpjfSxuLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gS3R0KG8oKSxhKS5yb3VuZChyKS5wYWRkaW5nSW5uZXIocykucGFkZGluZ091dGVyKGwpLmFsaWduKGMpfSxVdHQuYXBwbHkoZCgpLGFyZ3VtZW50cyl9ZnVuY3Rpb24gSnR0KHQpe3ZhciBlPXQuY29weTtyZXR1cm4gdC5wYWRkaW5nPXQucGFkZGluZ091dGVyLGRlbGV0ZSB0LnBhZGRpbmdJbm5lcixkZWxldGUgdC5wYWRkaW5nT3V0ZXIsdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEp0dChlKCkpfSx0fWZ1bmN0aW9uIFF0dCgpe3JldHVybiBKdHQoS3R0LmFwcGx5KG51bGwsYXJndW1lbnRzKS5wYWRkaW5nSW5uZXIoMSkpfWZ1bmN0aW9uICR0dCh0KXtyZXR1cm4rdH12YXIgdGV0PVswLDFdO2Z1bmN0aW9uIGVldCh0KXtyZXR1cm4gdH1mdW5jdGlvbiBuZXQodCxlKXtyZXR1cm4oZS09dD0rdCk/ZnVuY3Rpb24obil7cmV0dXJuKG4tdCkvZX06KGZ1bmN0aW9uIG4odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSkoaXNOYU4oZSk/TmFOOi41KX1mdW5jdGlvbiBvZXQodCl7dmFyIGUsbj10WzBdLG89dFt0Lmxlbmd0aC0xXTtyZXR1cm4gbj5vJiYoZT1uLG49byxvPWUpLGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heChuLE1hdGgubWluKG8sdCkpfX1mdW5jdGlvbiBpZXQodCxlLG4pe3ZhciBvPXRbMF0saT10WzFdLGE9ZVswXSxyPWVbMV07cmV0dXJuIGk8bz8obz1uZXQoaSxvKSxhPW4ocixhKSk6KG89bmV0KG8saSksYT1uKGEscikpLGZ1bmN0aW9uKHQpe3JldHVybiBhKG8odCkpfX1mdW5jdGlvbiBhZXQodCxlLG4pe3ZhciBvPU1hdGgubWluKHQubGVuZ3RoLGUubGVuZ3RoKS0xLGk9bmV3IEFycmF5KG8pLGE9bmV3IEFycmF5KG8pLHI9LTE7Zm9yKHRbb108dFswXSYmKHQ9dC5zbGljZSgpLnJldmVyc2UoKSxlPWUuc2xpY2UoKS5yZXZlcnNlKCkpOysrcjxvOylpW3JdPW5ldCh0W3JdLHRbcisxXSksYVtyXT1uKGVbcl0sZVtyKzFdKTtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49QzUodCxlLDEsbyktMTtyZXR1cm4gYVtuXShpW25dKGUpKX19ZnVuY3Rpb24gcmV0KHQsZSl7cmV0dXJuIGUuZG9tYWluKHQuZG9tYWluKCkpLnJhbmdlKHQucmFuZ2UoKSkuaW50ZXJwb2xhdGUodC5pbnRlcnBvbGF0ZSgpKS5jbGFtcCh0LmNsYW1wKCkpLnVua25vd24odC51bmtub3duKCkpfWZ1bmN0aW9uIHNldCgpe3ZhciB0LGUsbixvLGksYSxyPXRldCxzPXRldCxsPW84LGM9ZWV0O2Z1bmN0aW9uIGQoKXtyZXR1cm4gbz1NYXRoLm1pbihyLmxlbmd0aCxzLmxlbmd0aCk+Mj9hZXQ6aWV0LGk9YT1udWxsLHB9ZnVuY3Rpb24gcChlKXtyZXR1cm4gaXNOYU4oZT0rZSk/bjooaXx8KGk9byhyLm1hcCh0KSxzLGwpKSkodChjKGUpKSl9cmV0dXJuIHAuaW52ZXJ0PWZ1bmN0aW9uKG4pe3JldHVybiBjKGUoKGF8fChhPW8ocyxyLm1hcCh0KSxRNykpKShuKSkpfSxwLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1ZdHQuY2FsbCh0LCR0dCksYz09PWVldHx8KGM9b2V0KHIpKSxkKCkpOnIuc2xpY2UoKX0scC5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1xdHQuY2FsbCh0KSxkKCkpOnMuc2xpY2UoKX0scC5yYW5nZVJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBzPXF0dC5jYWxsKHQpLGw9aTgsZCgpfSxwLmNsYW1wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPXQ/b2V0KHIpOmVldCxwKTpjIT09ZWV0fSxwLmludGVycG9sYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPXQsZCgpKTpsfSxwLnVua25vd249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxwKTpufSxmdW5jdGlvbihuLG8pe3JldHVybiB0PW4sZT1vLGQoKX19ZnVuY3Rpb24gY2V0KHQsZSl7cmV0dXJuIHNldCgpKHQsZSl9ZnVuY3Rpb24gZGV0KHQpe3ZhciBlPXQuZG9tYWluO3JldHVybiB0LnRpY2tzPWZ1bmN0aW9uKHQpe3ZhciBuPWUoKTtyZXR1cm4gRDUoblswXSxuW24ubGVuZ3RoLTFdLG51bGw9PXQ/MTA6dCl9LHQudGlja0Zvcm1hdD1mdW5jdGlvbih0LG4pe3ZhciBvPWUoKTtyZXR1cm4oZnVuY3Rpb24gaSh0LGUsbixvKXt2YXIgaSxhPUE1KHQsZSxuKTtzd2l0Y2goKG89QXR0KG51bGw9PW8/IixmIjpvKSkudHlwZSl7Y2FzZSJzIjp2YXIgcj1NYXRoLm1heChNYXRoLmFicyh0KSxNYXRoLmFicyhlKSk7cmV0dXJuIG51bGwhPW8ucHJlY2lzaW9ufHxpc05hTihpPShmdW5jdGlvbiBzKHQsZSl7cmV0dXJuIE1hdGgubWF4KDAsMypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoU3R0KGUpLzMpKSktU3R0KE1hdGguYWJzKHQpKSl9KShhLHIpKXx8KG8ucHJlY2lzaW9uPWkpLEJ0dChvLHIpO2Nhc2UiIjpjYXNlImUiOmNhc2UiZyI6Y2FzZSJwIjpjYXNlInIiOm51bGwhPW8ucHJlY2lzaW9ufHxpc05hTihpPShmdW5jdGlvbiBsKHQsZSl7cmV0dXJuIHQ9TWF0aC5hYnModCksZT1NYXRoLmFicyhlKS10LE1hdGgubWF4KDAsU3R0KGUpLVN0dCh0KSkrMX0pKGEsTWF0aC5tYXgoTWF0aC5hYnModCksTWF0aC5hYnMoZSkpKSl8fChvLnByZWNpc2lvbj1pLSgiZSI9PT1vLnR5cGUpKTticmVhaztjYXNlImYiOmNhc2UiJSI6bnVsbCE9by5wcmVjaXNpb258fGlzTmFOKGk9KGZ1bmN0aW9uIGModCl7cmV0dXJuIE1hdGgubWF4KDAsLVN0dChNYXRoLmFicyh0KSkpfSkoYSkpfHwoby5wcmVjaXNpb249aS0yKigiJSI9PT1vLnR5cGUpKX1yZXR1cm4gTHR0KG8pfSkob1swXSxvW28ubGVuZ3RoLTFdLG51bGw9PXQ/MTA6dCxuKX0sdC5uaWNlPWZ1bmN0aW9uKG4pe251bGw9PW4mJihuPTEwKTt2YXIgbyxpPWUoKSxhPTAscj1pLmxlbmd0aC0xLHM9aVthXSxsPWlbcl07cmV0dXJuIGw8cyYmKG89cyxzPWwsbD1vLG89YSxhPXIscj1vKSwobz1FNShzLGwsbikpPjA/bz1FNShzPU1hdGguZmxvb3Iocy9vKSpvLGw9TWF0aC5jZWlsKGwvbykqbyxuKTpvPDAmJihvPUU1KHM9TWF0aC5jZWlsKHMqbykvbyxsPU1hdGguZmxvb3IobCpvKS9vLG4pKSxvPjA/KGlbYV09TWF0aC5mbG9vcihzL28pKm8saVtyXT1NYXRoLmNlaWwobC9vKSpvLGUoaSkpOm88MCYmKGlbYV09TWF0aC5jZWlsKHMqbykvbyxpW3JdPU1hdGguZmxvb3IobCpvKS9vLGUoaSkpLHR9LHR9ZnVuY3Rpb24gcGV0KCl7dmFyIHQ9Y2V0KGVldCxlZXQpO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gcmV0KHQscGV0KCkpfSxVdHQuYXBwbHkodCxhcmd1bWVudHMpLGRldCh0KX1mdW5jdGlvbiBtZXQodCxlKXt2YXIgbixvPTAsaT0odD10LnNsaWNlKCkpLmxlbmd0aC0xLGE9dFtvXSxyPXRbaV07cmV0dXJuIHI8YSYmKG49byxvPWksaT1uLG49YSxhPXIscj1uKSx0W29dPWUuZmxvb3IoYSksdFtpXT1lLmNlaWwociksdH1mdW5jdGlvbiB1ZXQodCl7cmV0dXJuIE1hdGgubG9nKHQpfWZ1bmN0aW9uIGZldCh0KXtyZXR1cm4gTWF0aC5leHAodCl9ZnVuY3Rpb24gZ2V0KHQpe3JldHVybi1NYXRoLmxvZygtdCl9ZnVuY3Rpb24gaGV0KHQpe3JldHVybi1NYXRoLmV4cCgtdCl9ZnVuY3Rpb24gYmV0KHQpe3JldHVybiBpc0Zpbml0ZSh0KT8rKCIxZSIrdCk6dDwwPzA6dH1mdW5jdGlvbiB5ZXQodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybi10KC1lKX19ZnVuY3Rpb24gX2V0KHQpe3ZhciBlLG4sbz10KHVldCxmZXQpLGk9by5kb21haW4sYT0xMDtmdW5jdGlvbiByKCl7cmV0dXJuIGU9KGZ1bmN0aW9uIHIodCl7cmV0dXJuIHQ9PT1NYXRoLkU/TWF0aC5sb2c6MTA9PT10JiZNYXRoLmxvZzEwfHwyPT09dCYmTWF0aC5sb2cyfHwodD1NYXRoLmxvZyh0KSxmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5sb2coZSkvdH0pfSkoYSksbj0oZnVuY3Rpb24gcyh0KXtyZXR1cm4gMTA9PT10P2JldDp0PT09TWF0aC5FP01hdGguZXhwOmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnBvdyh0LGUpfX0pKGEpLGkoKVswXTwwPyhlPXlldChlKSxuPXlldChuKSx0KGdldCxoZXQpKTp0KHVldCxmZXQpLG99cmV0dXJuIG8uYmFzZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rdCxyKCkpOmF9LG8uZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpKHQpLHIoKSk6aSgpfSxvLnRpY2tzPWZ1bmN0aW9uKHQpe3ZhciBvLHI9aSgpLHM9clswXSxsPXJbci5sZW5ndGgtMV07KG89bDxzKSYmKG09cyxzPWwsbD1tKTt2YXIgYyxkLHAsbT1lKHMpLHU9ZShsKSxmPW51bGw9PXQ/MTA6K3QsZz1bXTtpZighKGElMSkmJnUtbTxmKXtpZihtPU1hdGgucm91bmQobSktMSx1PU1hdGgucm91bmQodSkrMSxzPjApe2Zvcig7bTx1OysrbSlmb3IoZD0xLGM9bihtKTtkPGE7KytkKWlmKCEoKHA9YypkKTxzKSl7aWYocD5sKWJyZWFrO2cucHVzaChwKX19ZWxzZSBmb3IoO208dTsrK20pZm9yKGQ9YS0xLGM9bihtKTtkPj0xOy0tZClpZighKChwPWMqZCk8cykpe2lmKHA+bClicmVhaztnLnB1c2gocCl9fWVsc2UgZz1ENShtLHUsTWF0aC5taW4odS1tLGYpKS5tYXAobik7cmV0dXJuIG8/Zy5yZXZlcnNlKCk6Z30sby50aWNrRm9ybWF0PWZ1bmN0aW9uKHQsaSl7aWYobnVsbD09aSYmKGk9MTA9PT1hPyIuMGUiOiIsIiksImZ1bmN0aW9uIiE9dHlwZW9mIGkmJihpPUx0dChpKSksdD09PTEvMClyZXR1cm4gaTtudWxsPT10JiYodD0xMCk7dmFyIHI9TWF0aC5tYXgoMSxhKnQvby50aWNrcygpLmxlbmd0aCk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBvPXQvbihNYXRoLnJvdW5kKGUodCkpKTtyZXR1cm4gbyphPGEtLjUmJihvKj1hKSxvPD1yP2kodCk6IiJ9fSxvLm5pY2U9ZnVuY3Rpb24oKXtyZXR1cm4gaShtZXQoaSgpLHtmbG9vcjpmdW5jdGlvbih0KXtyZXR1cm4gbihNYXRoLmZsb29yKGUodCkpKX0sY2VpbDpmdW5jdGlvbih0KXtyZXR1cm4gbihNYXRoLmNlaWwoZSh0KSkpfX0pKX0sb31mdW5jdGlvbiBDZXQoKXt2YXIgdD1fZXQoc2V0KCkpLmRvbWFpbihbMSwxMF0pO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gcmV0KHQsQ2V0KCkpLmJhc2UodC5iYXNlKCkpfSxVdHQuYXBwbHkodCxhcmd1bWVudHMpLHR9dmFyIE1ldD1uZXcgRGF0ZSx2ZXQ9bmV3IERhdGU7ZnVuY3Rpb24geGV0KHQsZSxuLG8pe2Z1bmN0aW9uIGkoZSl7cmV0dXJuIHQoZT0wPT09YXJndW1lbnRzLmxlbmd0aD9uZXcgRGF0ZTpuZXcgRGF0ZSgrZSkpLGV9cmV0dXJuIGkuZmxvb3I9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoZT1uZXcgRGF0ZSgrZSkpLGV9LGkuY2VpbD1mdW5jdGlvbihuKXtyZXR1cm4gdChuPW5ldyBEYXRlKG4tMSkpLGUobiwxKSx0KG4pLG59LGkucm91bmQ9ZnVuY3Rpb24odCl7dmFyIGU9aSh0KSxuPWkuY2VpbCh0KTtyZXR1cm4gdC1lPG4tdD9lOm59LGkub2Zmc2V0PWZ1bmN0aW9uKHQsbil7cmV0dXJuIGUodD1uZXcgRGF0ZSgrdCksbnVsbD09bj8xOk1hdGguZmxvb3IobikpLHR9LGkucmFuZ2U9ZnVuY3Rpb24obixvLGEpe3ZhciByLHM9W107aWYobj1pLmNlaWwobiksYT1udWxsPT1hPzE6TWF0aC5mbG9vcihhKSwhKG48byYmYT4wKSlyZXR1cm4gcztkb3tzLnB1c2gocj1uZXcgRGF0ZSgrbikpLGUobixhKSx0KG4pfXdoaWxlKHI8biYmbjxvKTtyZXR1cm4gc30saS5maWx0ZXI9ZnVuY3Rpb24obil7cmV0dXJuIHhldCgoZnVuY3Rpb24oZSl7aWYoZT49ZSlmb3IoO3QoZSksIW4oZSk7KWUuc2V0VGltZShlLTEpfSksKGZ1bmN0aW9uKHQsbyl7aWYodD49dClpZihvPDApZm9yKDsrK288PTA7KWZvcig7ZSh0LC0xKSwhbih0KTspO2Vsc2UgZm9yKDstLW8+PTA7KWZvcig7ZSh0LDEpLCFuKHQpOyk7fSkpfSxuJiYoaS5jb3VudD1mdW5jdGlvbihlLG8pe3JldHVybiBNZXQuc2V0VGltZSgrZSksdmV0LnNldFRpbWUoK28pLHQoTWV0KSx0KHZldCksTWF0aC5mbG9vcihuKE1ldCx2ZXQpKX0saS5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLmZsb29yKHQpLGlzRmluaXRlKHQpJiZ0PjA/dD4xP2kuZmlsdGVyKG8/ZnVuY3Rpb24oZSl7cmV0dXJuIG8oZSkldD09MH06ZnVuY3Rpb24oZSl7cmV0dXJuIGkuY291bnQoMCxlKSV0PT0wfSk6aTpudWxsfSksaX12YXIgT2V0PXhldCgoZnVuY3Rpb24oKXt9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS10fSkpO09ldC5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLmZsb29yKHQpLGlzRmluaXRlKHQpJiZ0PjA/dD4xP3hldCgoZnVuY3Rpb24oZSl7ZS5zZXRUaW1lKE1hdGguZmxvb3IoZS90KSp0KX0pLChmdW5jdGlvbihlLG4pe2Uuc2V0VGltZSgrZStuKnQpfSksKGZ1bmN0aW9uKGUsbil7cmV0dXJuKG4tZSkvdH0pKTpPZXQ6bnVsbH07dmFyIFBldD0xZTMsd2V0PTZlNCxrZXQ9MzZlNSxEZXQ9ODY0ZTUsRWV0PTYwNDhlNSxBZXQ9eGV0KChmdW5jdGlvbih0KXt0LnNldFRpbWUodC10LmdldE1pbGxpc2Vjb25kcygpKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCtlKlBldCl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS9QZXR9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDU2Vjb25kcygpfSkpLFJldD14ZXQoKGZ1bmN0aW9uKHQpe3Quc2V0VGltZSh0LXQuZ2V0TWlsbGlzZWNvbmRzKCktdC5nZXRTZWNvbmRzKCkqUGV0KX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCtlKndldCl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS93ZXR9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0TWludXRlcygpfSkpLFRldD14ZXQoKGZ1bmN0aW9uKHQpe3Quc2V0VGltZSh0LXQuZ2V0TWlsbGlzZWNvbmRzKCktdC5nZXRTZWNvbmRzKCkqUGV0LXQuZ2V0TWludXRlcygpKndldCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrZSprZXQpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkva2V0fSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEhvdXJzKCl9KSksTmV0PXhldCgoZnVuY3Rpb24odCl7dC5zZXRIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0RGF0ZSh0LmdldERhdGUoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQtKGUuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKndldCkvRGV0fSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldERhdGUoKS0xfSkpO2Z1bmN0aW9uIElldCh0KXtyZXR1cm4geGV0KChmdW5jdGlvbihlKXtlLnNldERhdGUoZS5nZXREYXRlKCktKGUuZ2V0RGF5KCkrNy10KSU3KSxlLnNldEhvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpKzcqZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10LShlLmdldFRpbWV6b25lT2Zmc2V0KCktdC5nZXRUaW1lem9uZU9mZnNldCgpKSp3ZXQpL0VldH0pKX12YXIgemV0PUlldCgwKSxIZXQ9SWV0KDEpO0lldCgyKSxJZXQoMyk7dmFyIEZldD1JZXQoNCk7SWV0KDUpLElldCg2KTt2YXIgTGV0PXhldCgoZnVuY3Rpb24odCl7dC5zZXREYXRlKDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldE1vbnRoKHQuZ2V0TW9udGgoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldE1vbnRoKCktdC5nZXRNb250aCgpKzEyKihlLmdldEZ1bGxZZWFyKCktdC5nZXRGdWxsWWVhcigpKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNb250aCgpfSkpLEJldD14ZXQoKGZ1bmN0aW9uKHQpe3Quc2V0TW9udGgoMCwxKSx0LnNldEhvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXRGdWxsWWVhcigpLXQuZ2V0RnVsbFllYXIoKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRGdWxsWWVhcigpfSkpO0JldC5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gaXNGaW5pdGUodD1NYXRoLmZsb29yKHQpKSYmdD4wP3hldCgoZnVuY3Rpb24oZSl7ZS5zZXRGdWxsWWVhcihNYXRoLmZsb29yKGUuZ2V0RnVsbFllYXIoKS90KSp0KSxlLnNldE1vbnRoKDAsMSksZS5zZXRIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbihlLG4pe2Uuc2V0RnVsbFllYXIoZS5nZXRGdWxsWWVhcigpK24qdCl9KSk6bnVsbH07dmFyIFZldD14ZXQoKGZ1bmN0aW9uKHQpe3Quc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFVUQ0RhdGUodC5nZXRVVENEYXRlKCkrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS9EZXR9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDRGF0ZSgpLTF9KSk7ZnVuY3Rpb24gamV0KHQpe3JldHVybiB4ZXQoKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDRGF0ZShlLmdldFVUQ0RhdGUoKS0oZS5nZXRVVENEYXkoKSs3LXQpJTcpLGUuc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFVUQ0RhdGUodC5nZXRVVENEYXRlKCkrNyplKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQpL0VldH0pKX12YXIgVWV0PWpldCgwKSxXZXQ9amV0KDEpO2pldCgyKSxqZXQoMyk7dmFyIEdldD1qZXQoNCk7amV0KDUpLGpldCg2KTt2YXIgWWV0PXhldCgoZnVuY3Rpb24odCl7dC5zZXRVVENNb250aCgwLDEpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFVUQ0Z1bGxZZWFyKHQuZ2V0VVRDRnVsbFllYXIoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldFVUQ0Z1bGxZZWFyKCktdC5nZXRVVENGdWxsWWVhcigpfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0Z1bGxZZWFyKCl9KSk7ZnVuY3Rpb24gcWV0KHQpe2lmKDA8PXQueSYmdC55PDEwMCl7dmFyIGU9bmV3IERhdGUoLTEsdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpO3JldHVybiBlLnNldEZ1bGxZZWFyKHQueSksZX1yZXR1cm4gbmV3IERhdGUodC55LHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKX1mdW5jdGlvbiBaZXQodCl7aWYoMDw9dC55JiZ0Lnk8MTAwKXt2YXIgZT1uZXcgRGF0ZShEYXRlLlVUQygtMSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCkpO3JldHVybiBlLnNldFVUQ0Z1bGxZZWFyKHQueSksZX1yZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEModC55LHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKSl9ZnVuY3Rpb24gWGV0KHQsZSxuKXtyZXR1cm57eTp0LG06ZSxkOm4sSDowLE06MCxTOjAsTDowfX1ZZXQuZXZlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIGlzRmluaXRlKHQ9TWF0aC5mbG9vcih0KSkmJnQ+MD94ZXQoKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDRnVsbFllYXIoTWF0aC5mbG9vcihlLmdldFVUQ0Z1bGxZZWFyKCkvdCkqdCksZS5zZXRVVENNb250aCgwLDEpLGUuc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24oZSxuKXtlLnNldFVUQ0Z1bGxZZWFyKGUuZ2V0VVRDRnVsbFllYXIoKStuKnQpfSkpOm51bGx9O3ZhciBLZXQsSmV0LFFldD17Ii0iOiIiLF86IiAiLDA6IjAifSwkZXQ9L15ccypcZCsvLHRudD0vXiUvLGVudD0vW1xcXiQqKz98W1xdKCkue31dL2c7ZnVuY3Rpb24gbm50KHQsZSxuKXt2YXIgbz10PDA/Ii0iOiIiLGk9KG8/LXQ6dCkrIiIsYT1pLmxlbmd0aDtyZXR1cm4gbysoYTxuP25ldyBBcnJheShuLWErMSkuam9pbihlKStpOmkpfWZ1bmN0aW9uIG9udCh0KXtyZXR1cm4gdC5yZXBsYWNlKGVudCwiXFwkJiIpfWZ1bmN0aW9uIGludCh0KXtyZXR1cm4gbmV3IFJlZ0V4cCgiXig/OiIrdC5tYXAob250KS5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gYW50KHQpe2Zvcih2YXIgZT17fSxuPS0xLG89dC5sZW5ndGg7KytuPG87KWVbdFtuXS50b0xvd2VyQ2FzZSgpXT1uO3JldHVybiBlfWZ1bmN0aW9uIHJudCh0LGUsbil7dmFyIG89JGV0LmV4ZWMoZS5zbGljZShuLG4rMSkpO3JldHVybiBvPyh0Lnc9K29bMF0sbitvWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gc250KHQsZSxuKXt2YXIgbz0kZXQuZXhlYyhlLnNsaWNlKG4sbisxKSk7cmV0dXJuIG8/KHQudT0rb1swXSxuK29bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBsbnQodCxlLG4pe3ZhciBvPSRldC5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gbz8odC5VPStvWzBdLG4rb1swXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGNudCh0LGUsbil7dmFyIG89JGV0LmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiBvPyh0LlY9K29bMF0sbitvWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gZG50KHQsZSxuKXt2YXIgbz0kZXQuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIG8/KHQuVz0rb1swXSxuK29bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBwbnQodCxlLG4pe3ZhciBvPSRldC5leGVjKGUuc2xpY2UobixuKzQpKTtyZXR1cm4gbz8odC55PStvWzBdLG4rb1swXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIG1udCh0LGUsbil7dmFyIG89JGV0LmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiBvPyh0Lnk9K29bMF0rKCtvWzBdPjY4PzE5MDA6MmUzKSxuK29bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB1bnQodCxlLG4pe3ZhciBvPS9eKFopfChbKy1dXGRcZCkoPzo6PyhcZFxkKSk/Ly5leGVjKGUuc2xpY2UobixuKzYpKTtyZXR1cm4gbz8odC5aPW9bMV0/MDotKG9bMl0rKG9bM118fCIwMCIpKSxuK29bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBmbnQodCxlLG4pe3ZhciBvPSRldC5leGVjKGUuc2xpY2UobixuKzEpKTtyZXR1cm4gbz8odC5xPTMqb1swXS0zLG4rb1swXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGdudCh0LGUsbil7dmFyIG89JGV0LmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiBvPyh0Lm09b1swXS0xLG4rb1swXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGhudCh0LGUsbil7dmFyIG89JGV0LmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiBvPyh0LmQ9K29bMF0sbitvWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gYm50KHQsZSxuKXt2YXIgbz0kZXQuZXhlYyhlLnNsaWNlKG4sbiszKSk7cmV0dXJuIG8/KHQubT0wLHQuZD0rb1swXSxuK29bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB5bnQodCxlLG4pe3ZhciBvPSRldC5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gbz8odC5IPStvWzBdLG4rb1swXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIF9udCh0LGUsbil7dmFyIG89JGV0LmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiBvPyh0Lk09K29bMF0sbitvWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gQ250KHQsZSxuKXt2YXIgbz0kZXQuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIG8/KHQuUz0rb1swXSxuK29bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBNbnQodCxlLG4pe3ZhciBvPSRldC5leGVjKGUuc2xpY2UobixuKzMpKTtyZXR1cm4gbz8odC5MPStvWzBdLG4rb1swXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHZudCh0LGUsbil7dmFyIG89JGV0LmV4ZWMoZS5zbGljZShuLG4rNikpO3JldHVybiBvPyh0Lkw9TWF0aC5mbG9vcihvWzBdLzFlMyksbitvWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24geG50KHQsZSxuKXt2YXIgbz10bnQuZXhlYyhlLnNsaWNlKG4sbisxKSk7cmV0dXJuIG8/bitvWzBdLmxlbmd0aDotMX1mdW5jdGlvbiBPbnQodCxlLG4pe3ZhciBvPSRldC5leGVjKGUuc2xpY2UobikpO3JldHVybiBvPyh0LlE9K29bMF0sbitvWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gUG50KHQsZSxuKXt2YXIgbz0kZXQuZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gbz8odC5zPStvWzBdLG4rb1swXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHdudCh0LGUpe3JldHVybiBubnQodC5nZXREYXRlKCksZSwyKX1mdW5jdGlvbiBrbnQodCxlKXtyZXR1cm4gbm50KHQuZ2V0SG91cnMoKSxlLDIpfWZ1bmN0aW9uIFNudCh0LGUpe3JldHVybiBubnQodC5nZXRIb3VycygpJTEyfHwxMixlLDIpfWZ1bmN0aW9uIERudCh0LGUpe3JldHVybiBubnQoMStOZXQuY291bnQoQmV0KHQpLHQpLGUsMyl9ZnVuY3Rpb24gRW50KHQsZSl7cmV0dXJuIG5udCh0LmdldE1pbGxpc2Vjb25kcygpLGUsMyl9ZnVuY3Rpb24gQW50KHQsZSl7cmV0dXJuIEVudCh0LGUpKyIwMDAifWZ1bmN0aW9uIFJudCh0LGUpe3JldHVybiBubnQodC5nZXRNb250aCgpKzEsZSwyKX1mdW5jdGlvbiBUbnQodCxlKXtyZXR1cm4gbm50KHQuZ2V0TWludXRlcygpLGUsMil9ZnVuY3Rpb24gTm50KHQsZSl7cmV0dXJuIG5udCh0LmdldFNlY29uZHMoKSxlLDIpfWZ1bmN0aW9uIEludCh0KXt2YXIgZT10LmdldERheSgpO3JldHVybiAwPT09ZT83OmV9ZnVuY3Rpb24gem50KHQsZSl7cmV0dXJuIG5udCh6ZXQuY291bnQoQmV0KHQpLTEsdCksZSwyKX1mdW5jdGlvbiBIbnQodCl7dmFyIGU9dC5nZXREYXkoKTtyZXR1cm4gZT49NHx8MD09PWU/RmV0KHQpOkZldC5jZWlsKHQpfWZ1bmN0aW9uIEZudCh0LGUpe3JldHVybiB0PUhudCh0KSxubnQoRmV0LmNvdW50KEJldCh0KSx0KSsoND09PUJldCh0KS5nZXREYXkoKSksZSwyKX1mdW5jdGlvbiBMbnQodCl7cmV0dXJuIHQuZ2V0RGF5KCl9ZnVuY3Rpb24gQm50KHQsZSl7cmV0dXJuIG5udChIZXQuY291bnQoQmV0KHQpLTEsdCksZSwyKX1mdW5jdGlvbiBWbnQodCxlKXtyZXR1cm4gbm50KHQuZ2V0RnVsbFllYXIoKSUxMDAsZSwyKX1mdW5jdGlvbiBqbnQodCxlKXtyZXR1cm4gbm50KCh0PUhudCh0KSkuZ2V0RnVsbFllYXIoKSUxMDAsZSwyKX1mdW5jdGlvbiBVbnQodCxlKXtyZXR1cm4gbm50KHQuZ2V0RnVsbFllYXIoKSUxZTQsZSw0KX1mdW5jdGlvbiBXbnQodCxlKXt2YXIgbj10LmdldERheSgpO3JldHVybiBubnQoKHQ9bj49NHx8MD09PW4/RmV0KHQpOkZldC5jZWlsKHQpKS5nZXRGdWxsWWVhcigpJTFlNCxlLDQpfWZ1bmN0aW9uIEdudCh0KXt2YXIgZT10LmdldFRpbWV6b25lT2Zmc2V0KCk7cmV0dXJuKGU+MD8iLSI6KGUqPS0xLCIrIikpK25udChlLzYwfDAsIjAiLDIpK25udChlJTYwLCIwIiwyKX1mdW5jdGlvbiBZbnQodCxlKXtyZXR1cm4gbm50KHQuZ2V0VVRDRGF0ZSgpLGUsMil9ZnVuY3Rpb24gcW50KHQsZSl7cmV0dXJuIG5udCh0LmdldFVUQ0hvdXJzKCksZSwyKX1mdW5jdGlvbiBabnQodCxlKXtyZXR1cm4gbm50KHQuZ2V0VVRDSG91cnMoKSUxMnx8MTIsZSwyKX1mdW5jdGlvbiBYbnQodCxlKXtyZXR1cm4gbm50KDErVmV0LmNvdW50KFlldCh0KSx0KSxlLDMpfWZ1bmN0aW9uIEtudCh0LGUpe3JldHVybiBubnQodC5nZXRVVENNaWxsaXNlY29uZHMoKSxlLDMpfWZ1bmN0aW9uIEpudCh0LGUpe3JldHVybiBLbnQodCxlKSsiMDAwIn1mdW5jdGlvbiBRbnQodCxlKXtyZXR1cm4gbm50KHQuZ2V0VVRDTW9udGgoKSsxLGUsMil9ZnVuY3Rpb24gJG50KHQsZSl7cmV0dXJuIG5udCh0LmdldFVUQ01pbnV0ZXMoKSxlLDIpfWZ1bmN0aW9uIHRvdCh0LGUpe3JldHVybiBubnQodC5nZXRVVENTZWNvbmRzKCksZSwyKX1mdW5jdGlvbiBlb3QodCl7dmFyIGU9dC5nZXRVVENEYXkoKTtyZXR1cm4gMD09PWU/NzplfWZ1bmN0aW9uIG5vdCh0LGUpe3JldHVybiBubnQoVWV0LmNvdW50KFlldCh0KS0xLHQpLGUsMil9ZnVuY3Rpb24gb290KHQpe3ZhciBlPXQuZ2V0VVRDRGF5KCk7cmV0dXJuIGU+PTR8fDA9PT1lP0dldCh0KTpHZXQuY2VpbCh0KX1mdW5jdGlvbiBpb3QodCxlKXtyZXR1cm4gdD1vb3QodCksbm50KEdldC5jb3VudChZZXQodCksdCkrKDQ9PT1ZZXQodCkuZ2V0VVRDRGF5KCkpLGUsMil9ZnVuY3Rpb24gYW90KHQpe3JldHVybiB0LmdldFVUQ0RheSgpfWZ1bmN0aW9uIHJvdCh0LGUpe3JldHVybiBubnQoV2V0LmNvdW50KFlldCh0KS0xLHQpLGUsMil9ZnVuY3Rpb24gc290KHQsZSl7cmV0dXJuIG5udCh0LmdldFVUQ0Z1bGxZZWFyKCklMTAwLGUsMil9ZnVuY3Rpb24gbG90KHQsZSl7cmV0dXJuIG5udCgodD1vb3QodCkpLmdldFVUQ0Z1bGxZZWFyKCklMTAwLGUsMil9ZnVuY3Rpb24gY290KHQsZSl7cmV0dXJuIG5udCh0LmdldFVUQ0Z1bGxZZWFyKCklMWU0LGUsNCl9ZnVuY3Rpb24gZG90KHQsZSl7dmFyIG49dC5nZXRVVENEYXkoKTtyZXR1cm4gbm50KCh0PW4+PTR8fDA9PT1uP0dldCh0KTpHZXQuY2VpbCh0KSkuZ2V0VVRDRnVsbFllYXIoKSUxZTQsZSw0KX1mdW5jdGlvbiBwb3QoKXtyZXR1cm4iKzAwMDAifWZ1bmN0aW9uIG1vdCgpe3JldHVybiIlIn1mdW5jdGlvbiB1b3QodCl7cmV0dXJuK3R9ZnVuY3Rpb24gZm90KHQpe3JldHVybiBNYXRoLmZsb29yKCt0LzFlMyl9IShmdW5jdGlvbiBnb3QodCl7S2V0PShmdW5jdGlvbiBlKHQpe3ZhciBlPXQuZGF0ZVRpbWUsbj10LmRhdGUsbz10LnRpbWUsaT10LnBlcmlvZHMsYT10LmRheXMscj10LnNob3J0RGF5cyxzPXQubW9udGhzLGw9dC5zaG9ydE1vbnRocyxjPWludChpKSxkPWFudChpKSxwPWludChhKSxtPWFudChhKSx1PWludChyKSxmPWFudChyKSxnPWludChzKSxoPWFudChzKSxiPWludChsKSx5PWFudChsKSxfPXthOmZ1bmN0aW9uIEModCl7cmV0dXJuIHJbdC5nZXREYXkoKV19LEE6ZnVuY3Rpb24gTSh0KXtyZXR1cm4gYVt0LmdldERheSgpXX0sYjpmdW5jdGlvbiB2KHQpe3JldHVybiBsW3QuZ2V0TW9udGgoKV19LEI6ZnVuY3Rpb24geCh0KXtyZXR1cm4gc1t0LmdldE1vbnRoKCldfSxjOm51bGwsZDp3bnQsZTp3bnQsZjpBbnQsZzpqbnQsRzpXbnQsSDprbnQsSTpTbnQsajpEbnQsTDpFbnQsbTpSbnQsTTpUbnQscDpmdW5jdGlvbiBPKHQpe3JldHVybiBpWysodC5nZXRIb3VycygpPj0xMildfSxxOmZ1bmN0aW9uIFAodCl7cmV0dXJuIDErfn4odC5nZXRNb250aCgpLzMpfSxROnVvdCxzOmZvdCxTOk5udCx1OkludCxVOnpudCxWOkZudCx3OkxudCxXOkJudCx4Om51bGwsWDpudWxsLHk6Vm50LFk6VW50LFo6R250LCIlIjptb3R9LHc9e2E6ZnVuY3Rpb24gayh0KXtyZXR1cm4gclt0LmdldFVUQ0RheSgpXX0sQTpmdW5jdGlvbiBTKHQpe3JldHVybiBhW3QuZ2V0VVRDRGF5KCldfSxiOmZ1bmN0aW9uIEQodCl7cmV0dXJuIGxbdC5nZXRVVENNb250aCgpXX0sQjpmdW5jdGlvbiBFKHQpe3JldHVybiBzW3QuZ2V0VVRDTW9udGgoKV19LGM6bnVsbCxkOlludCxlOlludCxmOkpudCxnOmxvdCxHOmRvdCxIOnFudCxJOlpudCxqOlhudCxMOktudCxtOlFudCxNOiRudCxwOmZ1bmN0aW9uIEEodCl7cmV0dXJuIGlbKyh0LmdldFVUQ0hvdXJzKCk+PTEyKV19LHE6ZnVuY3Rpb24gUih0KXtyZXR1cm4gMSt+fih0LmdldFVUQ01vbnRoKCkvMyl9LFE6dW90LHM6Zm90LFM6dG90LHU6ZW90LFU6bm90LFY6aW90LHc6YW90LFc6cm90LHg6bnVsbCxYOm51bGwseTpzb3QsWTpjb3QsWjpwb3QsIiUiOm1vdH0sVD17YTpmdW5jdGlvbiBOKHQsZSxuKXt2YXIgbz11LmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIG8/KHQudz1mW29bMF0udG9Mb3dlckNhc2UoKV0sbitvWzBdLmxlbmd0aCk6LTF9LEE6ZnVuY3Rpb24gSSh0LGUsbil7dmFyIG89cC5leGVjKGUuc2xpY2UobikpO3JldHVybiBvPyh0Lnc9bVtvWzBdLnRvTG93ZXJDYXNlKCldLG4rb1swXS5sZW5ndGgpOi0xfSxiOmZ1bmN0aW9uIHoodCxlLG4pe3ZhciBvPWIuZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gbz8odC5tPXlbb1swXS50b0xvd2VyQ2FzZSgpXSxuK29bMF0ubGVuZ3RoKTotMX0sQjpmdW5jdGlvbiBIKHQsZSxuKXt2YXIgbz1nLmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIG8/KHQubT1oW29bMF0udG9Mb3dlckNhc2UoKV0sbitvWzBdLmxlbmd0aCk6LTF9LGM6ZnVuY3Rpb24gRih0LG4sbyl7cmV0dXJuIFcodCxlLG4sbyl9LGQ6aG50LGU6aG50LGY6dm50LGc6bW50LEc6cG50LEg6eW50LEk6eW50LGo6Ym50LEw6TW50LG06Z250LE06X250LHA6ZnVuY3Rpb24gTCh0LGUsbil7dmFyIG89Yy5leGVjKGUuc2xpY2UobikpO3JldHVybiBvPyh0LnA9ZFtvWzBdLnRvTG93ZXJDYXNlKCldLG4rb1swXS5sZW5ndGgpOi0xfSxxOmZudCxROk9udCxzOlBudCxTOkNudCx1OnNudCxVOmxudCxWOmNudCx3OnJudCxXOmRudCx4OmZ1bmN0aW9uIEIodCxlLG8pe3JldHVybiBXKHQsbixlLG8pfSxYOmZ1bmN0aW9uIFYodCxlLG4pe3JldHVybiBXKHQsbyxlLG4pfSx5Om1udCxZOnBudCxaOnVudCwiJSI6eG50fTtmdW5jdGlvbiBqKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBvLGksYSxyPVtdLHM9LTEsbD0wLGM9dC5sZW5ndGg7Zm9yKG4gaW5zdGFuY2VvZiBEYXRlfHwobj1uZXcgRGF0ZSgrbikpOysrczxjOykzNz09PXQuY2hhckNvZGVBdChzKSYmKHIucHVzaCh0LnNsaWNlKGwscykpLG51bGwhPShpPVFldFtvPXQuY2hhckF0KCsrcyldKT9vPXQuY2hhckF0KCsrcyk6aT0iZSI9PT1vPyIgIjoiMCIsKGE9ZVtvXSkmJihvPWEobixpKSksci5wdXNoKG8pLGw9cysxKTtyZXR1cm4gci5wdXNoKHQuc2xpY2UobCxzKSksci5qb2luKCIiKX19ZnVuY3Rpb24gVSh0LGUpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgbyxpLGE9WGV0KDE5MDAsdm9pZCAwLDEpO2lmKFcoYSx0LG4rPSIiLDApIT1uLmxlbmd0aClyZXR1cm4gbnVsbDtpZigiUSJpbiBhKXJldHVybiBuZXcgRGF0ZShhLlEpO2lmKCJzImluIGEpcmV0dXJuIG5ldyBEYXRlKDFlMyphLnMrKCJMImluIGE/YS5MOjApKTtpZihlJiYhKCJaImluIGEpJiYoYS5aPTApLCJwImluIGEmJihhLkg9YS5IJTEyKzEyKmEucCksdm9pZCAwPT09YS5tJiYoYS5tPSJxImluIGE/YS5xOjApLCJWImluIGEpe2lmKGEuVjwxfHxhLlY+NTMpcmV0dXJuIG51bGw7InciaW4gYXx8KGEudz0xKSwiWiJpbiBhPyhpPShvPVpldChYZXQoYS55LDAsMSkpKS5nZXRVVENEYXkoKSxvPWk+NHx8MD09PWk/V2V0LmNlaWwobyk6V2V0KG8pLG89VmV0Lm9mZnNldChvLDcqKGEuVi0xKSksYS55PW8uZ2V0VVRDRnVsbFllYXIoKSxhLm09by5nZXRVVENNb250aCgpLGEuZD1vLmdldFVUQ0RhdGUoKSsoYS53KzYpJTcpOihpPShvPXFldChYZXQoYS55LDAsMSkpKS5nZXREYXkoKSxvPWk+NHx8MD09PWk/SGV0LmNlaWwobyk6SGV0KG8pLG89TmV0Lm9mZnNldChvLDcqKGEuVi0xKSksYS55PW8uZ2V0RnVsbFllYXIoKSxhLm09by5nZXRNb250aCgpLGEuZD1vLmdldERhdGUoKSsoYS53KzYpJTcpfWVsc2UoIlciaW4gYXx8IlUiaW4gYSkmJigidyJpbiBhfHwoYS53PSJ1ImluIGE/YS51JTc6IlciaW4gYT8xOjApLGk9IloiaW4gYT9aZXQoWGV0KGEueSwwLDEpKS5nZXRVVENEYXkoKTpxZXQoWGV0KGEueSwwLDEpKS5nZXREYXkoKSxhLm09MCxhLmQ9IlciaW4gYT8oYS53KzYpJTcrNyphLlctKGkrNSklNzphLncrNyphLlUtKGkrNiklNyk7cmV0dXJuIloiaW4gYT8oYS5IKz1hLlovMTAwfDAsYS5NKz1hLlolMTAwLFpldChhKSk6cWV0KGEpfX1mdW5jdGlvbiBXKHQsZSxuLG8pe2Zvcih2YXIgaSxhLHI9MCxzPWUubGVuZ3RoLGw9bi5sZW5ndGg7cjxzOyl7aWYobz49bClyZXR1cm4tMTtpZigzNz09PShpPWUuY2hhckNvZGVBdChyKyspKSl7aWYoaT1lLmNoYXJBdChyKyspLCEoYT1UW2kgaW4gUWV0P2UuY2hhckF0KHIrKyk6aV0pfHwobz1hKHQsbixvKSk8MClyZXR1cm4tMX1lbHNlIGlmKGkhPW4uY2hhckNvZGVBdChvKyspKXJldHVybi0xfXJldHVybiBvfXJldHVybiBfLng9aihuLF8pLF8uWD1qKG8sXyksXy5jPWooZSxfKSx3Lng9aihuLHcpLHcuWD1qKG8sdyksdy5jPWooZSx3KSx7Zm9ybWF0OmZ1bmN0aW9uKHQpe3ZhciBlPWoodCs9IiIsXyk7cmV0dXJuIGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sZX0scGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9VSh0Kz0iIiwhMSk7cmV0dXJuIGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sZX0sdXRjRm9ybWF0OmZ1bmN0aW9uKHQpe3ZhciBlPWoodCs9IiIsdyk7cmV0dXJuIGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sZX0sdXRjUGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9VSh0Kz0iIiwhMCk7cmV0dXJuIGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sZX19fSkodCksSmV0PUtldC5mb3JtYXR9KSh7ZGF0ZVRpbWU6IiV4LCAlWCIsZGF0ZToiJS1tLyUtZC8lWSIsdGltZToiJS1JOiVNOiVTICVwIixwZXJpb2RzOlsiQU0iLCJQTSJdLGRheXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLHNob3J0RGF5czpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLG1vbnRoczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sc2hvcnRNb250aHM6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXX0pO3ZhciBob3Q9MzE1MzZlNjtmdW5jdGlvbiBib3QodCl7cmV0dXJuIG5ldyBEYXRlKHQpfWZ1bmN0aW9uIHlvdCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIERhdGU/K3Q6K25ldyBEYXRlKCt0KX1mdW5jdGlvbiBfb3QodCxlLG4sbyxpLGEscixzLGwpe3ZhciBjPWNldChlZXQsZWV0KSxkPWMuaW52ZXJ0LHA9Yy5kb21haW4sbT1sKCIuJUwiKSx1PWwoIjolUyIpLGY9bCgiJUk6JU0iKSxnPWwoIiVJICVwIiksaD1sKCIlYSAlZCIpLGI9bCgiJWIgJWQiKSx5PWwoIiVCIiksXz1sKCIlWSIpLEM9W1tyLDEsMWUzXSxbciw1LDVlM10sW3IsMTUsMTVlM10sW3IsMzAsM2U0XSxbYSwxLDZlNF0sW2EsNSwzZTVdLFthLDE1LDllNV0sW2EsMzAsMThlNV0sW2ksMSwzNmU1XSxbaSwzLDEwOGU1XSxbaSw2LDIxNmU1XSxbaSwxMiw0MzJlNV0sW28sMSw4NjRlNV0sW28sMiwxNzI4ZTVdLFtuLDEsNjA0OGU1XSxbZSwxLDI1OTJlNl0sW2UsMyw3Nzc2ZTZdLFt0LDEsaG90XV07ZnVuY3Rpb24gTShzKXtyZXR1cm4ocihzKTxzP206YShzKTxzP3U6aShzKTxzP2Y6byhzKTxzP2c6ZShzKTxzP24ocyk8cz9oOmI6dChzKTxzP3k6Xykocyl9ZnVuY3Rpb24gdihlLG4sbyxpKXtpZihudWxsPT1lJiYoZT0xMCksIm51bWJlciI9PXR5cGVvZiBlKXt2YXIgYT1NYXRoLmFicyhvLW4pL2Uscj1fNSgoZnVuY3Rpb24odCl7cmV0dXJuIHRbMl19KSkucmlnaHQoQyxhKTtyPT09Qy5sZW5ndGg/KGk9QTUobi9ob3Qsby9ob3QsZSksZT10KTpyPyhpPShyPUNbYS9DW3ItMV1bMl08Q1tyXVsyXS9hP3ItMTpyXSlbMV0sZT1yWzBdKTooaT1NYXRoLm1heChBNShuLG8sZSksMSksZT1zKX1yZXR1cm4gbnVsbD09aT9lOmUuZXZlcnkoaSl9cmV0dXJuIGMuaW52ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgRGF0ZShkKHQpKX0sYy5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/cChZdHQuY2FsbCh0LHlvdCkpOnAoKS5tYXAoYm90KX0sYy50aWNrcz1mdW5jdGlvbih0LGUpe3ZhciBuLG89cCgpLGk9b1swXSxhPW9bby5sZW5ndGgtMV0scj1hPGk7cmV0dXJuIHImJihuPWksaT1hLGE9biksbj0obj12KHQsaSxhLGUpKT9uLnJhbmdlKGksYSsxKTpbXSxyP24ucmV2ZXJzZSgpOm59LGMudGlja0Zvcm1hdD1mdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT1lP006bChlKX0sYy5uaWNlPWZ1bmN0aW9uKHQsZSl7dmFyIG49cCgpO3JldHVybih0PXYodCxuWzBdLG5bbi5sZW5ndGgtMV0sZSkpP3AobWV0KG4sdCkpOmN9LGMuY29weT1mdW5jdGlvbigpe3JldHVybiByZXQoYyxfb3QodCxlLG4sbyxpLGEscixzLGwpKX0sY31mdW5jdGlvbiBDb3QoKXtyZXR1cm4gVXR0LmFwcGx5KF9vdChCZXQsTGV0LHpldCxOZXQsVGV0LFJldCxBZXQsT2V0LEpldCkuZG9tYWluKFtuZXcgRGF0ZSgyZTMsMCwxKSxuZXcgRGF0ZSgyZTMsMCwyKV0pLGFyZ3VtZW50cyl9ZnVuY3Rpb24gTW90KHQpe2Zvcih2YXIgZT10Lmxlbmd0aC82fDAsbj1uZXcgQXJyYXkoZSksbz0wO288ZTspbltvXT0iIyIrdC5zbGljZSg2Km8sNiorK28pO3JldHVybiBufWZ1bmN0aW9uIHZvdCh0KXtyZXR1cm4gWTcodFt0Lmxlbmd0aC0xXSl9dmFyIHhvdD12b3QobmV3IEFycmF5KDMpLmNvbmNhdCgiZGVlYmY3OWVjYWUxMzE4MmJkIiwiZWZmM2ZmYmRkN2U3NmJhZWQ2MjE3MWI1IiwiZWZmM2ZmYmRkN2U3NmJhZWQ2MzE4MmJkMDg1MTljIiwiZWZmM2ZmYzZkYmVmOWVjYWUxNmJhZWQ2MzE4MmJkMDg1MTljIiwiZWZmM2ZmYzZkYmVmOWVjYWUxNmJhZWQ2NDI5MmM2MjE3MWI1MDg0NTk0IiwiZjdmYmZmZGVlYmY3YzZkYmVmOWVjYWUxNmJhZWQ2NDI5MmM2MjE3MWI1MDg0NTk0IiwiZjdmYmZmZGVlYmY3YzZkYmVmOWVjYWUxNmJhZWQ2NDI5MmM2MjE3MWI1MDg1MTljMDgzMDZiIikubWFwKE1vdCkpLE9vdD12b3QobmV3IEFycmF5KDMpLmNvbmNhdCgiZjBmMGYwYmRiZGJkNjM2MzYzIiwiZjdmN2Y3Y2NjY2NjOTY5Njk2NTI1MjUyIiwiZjdmN2Y3Y2NjY2NjOTY5Njk2NjM2MzYzMjUyNTI1IiwiZjdmN2Y3ZDlkOWQ5YmRiZGJkOTY5Njk2NjM2MzYzMjUyNTI1IiwiZjdmN2Y3ZDlkOWQ5YmRiZGJkOTY5Njk2NzM3MzczNTI1MjUyMjUyNTI1IiwiZmZmZmZmZjBmMGYwZDlkOWQ5YmRiZGJkOTY5Njk2NzM3MzczNTI1MjUyMjUyNTI1IiwiZmZmZmZmZjBmMGYwZDlkOWQ5YmRiZGJkOTY5Njk2NzM3MzczNTI1MjUyMjUyNTI1MDAwMDAwIikubWFwKE1vdCkpLFBvdD12b3QobmV3IEFycmF5KDMpLmNvbmNhdCgiZmVlMGQyZmM5MjcyZGUyZDI2IiwiZmVlNWQ5ZmNhZTkxZmI2YTRhY2IxODFkIiwiZmVlNWQ5ZmNhZTkxZmI2YTRhZGUyZDI2YTUwZjE1IiwiZmVlNWQ5ZmNiYmExZmM5MjcyZmI2YTRhZGUyZDI2YTUwZjE1IiwiZmVlNWQ5ZmNiYmExZmM5MjcyZmI2YTRhZWYzYjJjY2IxODFkOTkwMDBkIiwiZmZmNWYwZmVlMGQyZmNiYmExZmM5MjcyZmI2YTRhZWYzYjJjY2IxODFkOTkwMDBkIiwiZmZmNWYwZmVlMGQyZmNiYmExZmM5MjcyZmI2YTRhZWYzYjJjY2IxODFkYTUwZjE1NjcwMDBkIikubWFwKE1vdCkpO2Z1bmN0aW9uIHdvdCh0KXtyZXR1cm4gZnVuY3Rpb24gZSgpe3JldHVybiB0fX1mdW5jdGlvbiBrb3QodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIFNvdCh0KXtyZXR1cm4gbmV3IGtvdCh0KX1mdW5jdGlvbiBEb3QodCl7cmV0dXJuIHRbMF19ZnVuY3Rpb24gRW90KHQpe3JldHVybiB0WzFdfWZ1bmN0aW9uIEFvdCgpe3ZhciB0PURvdCxlPUVvdCxuPXdvdCghMCksbz1udWxsLGk9U290LGE9bnVsbDtmdW5jdGlvbiByKHIpe3ZhciBzLGwsYyxkPXIubGVuZ3RoLHA9ITE7Zm9yKG51bGw9PW8mJihhPWkoYz1NdHQoKSkpLHM9MDtzPD1kOysrcykhKHM8ZCYmbihsPXJbc10scyxyKSk9PT1wJiYoKHA9IXApP2EubGluZVN0YXJ0KCk6YS5saW5lRW5kKCkpLHAmJmEucG9pbnQoK3QobCxzLHIpLCtlKGwscyxyKSk7aWYoYylyZXR1cm4gYT1udWxsLGMrIiJ8fG51bGx9cmV0dXJuIHIueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOndvdCgrZSkscik6dH0sci55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6d290KCt0KSxyKTplfSxyLmRlZmluZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp3b3QoISF0KSxyKTpufSxyLmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQsbnVsbCE9byYmKGE9aShvKSkscik6aX0sci5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT10P289YT1udWxsOmE9aShvPXQpLHIpOm99LHJ9ZnVuY3Rpb24gUm90KHQsZSxuKXt0Ll9jb250ZXh0LmJlemllckN1cnZlVG8odC5feDErdC5fayoodC5feDItdC5feDApLHQuX3kxK3QuX2sqKHQuX3kyLXQuX3kwKSx0Ll94Mit0Ll9rKih0Ll94MS1lKSx0Ll95Mit0Ll9rKih0Ll95MS1uKSx0Ll94Mix0Ll95Mil9ZnVuY3Rpb24gVG90KHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2s9KDEtZSkvNn1mdW5jdGlvbiBOb3QodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fYWxwaGE9ZX1rb3QucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjtkZWZhdWx0OnRoaXMuX2NvbnRleHQubGluZVRvKHQsZSl9fX0sVG90LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzpSb3QodGhpcyx0aGlzLl94MSx0aGlzLl95MSl9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gxPXQsdGhpcy5feTE9ZTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0OlJvdCh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX0sTm90LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gyLHRoaXMuX3kyKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7aWYodD0rdCxlPStlLHRoaXMuX3BvaW50KXt2YXIgbj10aGlzLl94Mi10LG89dGhpcy5feTItZTt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KG4qbitvKm8sdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO2RlZmF1bHQ6IShmdW5jdGlvbiBpKHQsZSxuKXt2YXIgbz10Ll94MSxpPXQuX3kxLGE9dC5feDIscj10Ll95MjtpZih0Ll9sMDFfYT4xZS0xMil7dmFyIHM9Mip0Ll9sMDFfMmErMyp0Ll9sMDFfYSp0Ll9sMTJfYSt0Ll9sMTJfMmEsbD0zKnQuX2wwMV9hKih0Ll9sMDFfYSt0Ll9sMTJfYSk7bz0obypzLXQuX3gwKnQuX2wxMl8yYSt0Ll94Mip0Ll9sMDFfMmEpL2wsaT0oaSpzLXQuX3kwKnQuX2wxMl8yYSt0Ll95Mip0Ll9sMDFfMmEpL2x9aWYodC5fbDIzX2E+MWUtMTIpe3ZhciBjPTIqdC5fbDIzXzJhKzMqdC5fbDIzX2EqdC5fbDEyX2ErdC5fbDEyXzJhLGQ9Myp0Ll9sMjNfYSoodC5fbDIzX2ErdC5fbDEyX2EpO2E9KGEqYyt0Ll94MSp0Ll9sMjNfMmEtZSp0Ll9sMTJfMmEpL2Qscj0ocipjK3QuX3kxKnQuX2wyM18yYS1uKnQuX2wxMl8yYSkvZH10Ll9jb250ZXh0LmJlemllckN1cnZlVG8obyxpLGEscix0Ll94Mix0Ll95Mil9KSh0aGlzLHQsZSl9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19O3ZhciBJb3Q9KGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gZT9uZXcgTm90KHQsZSk6bmV3IFRvdCh0LDApfXJldHVybiBuLmFscGhhPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0pKC41KTtjb25zdCB6b3Q9MWU0LEhvdD0uMDAxLEZvdD1MdHQoIi4yfmUiKSxMb3Q9THR0KCIuNH5yIiksQm90PUx0dCgiLH4iKTtmdW5jdGlvbiBWb3QodCl7aWYoMD09PXQpcmV0dXJuIjAiO2NvbnN0IGU9TWF0aC5hYnModCk7cmV0dXJuIGU+PXpvdHx8ZTxIb3Q/Rm90KHQpOkxvdCh0KX1jb25zdCBqb3Q9e2Zvcm1hdFRpY2s6Vm90LGZvcm1hdFNob3J0OlZvdCxmb3JtYXRSZWFkYWJsZSh0KXtjb25zdCBlPU1hdGguYWJzKHQpO3JldHVybiBlPj16b3R8fGU8SG90P0ZvdCh0KTpCb3QodCl9LGZvcm1hdExvbmc6Qm90fSxVb3Q9THR0KCIwLjN+cyIpLFdvdD1MdHQoIiwuM35mIik7ZnVuY3Rpb24gR290KHQpe2NvbnN0IGU9TWF0aC5hYnModCk7cmV0dXJuIGU+PXpvdHx8ZTxIb3Q/VW90KHQpOldvdCh0KX1jb25zdCBZb3Q9e2Zvcm1hdFRpY2s6R290LGZvcm1hdFNob3J0OkdvdCxmb3JtYXRSZWFkYWJsZTpHb3QsZm9ybWF0TG9uZzpHb3R9LHFvdD0zNmU1LFpvdD04NjRlNSxYb3Q9MzE1MzZlNixLb3Q9THR0KCIuNH4iKTtmdW5jdGlvbiBKb3QodCl7aWYoMD09PXQpcmV0dXJuIjAiO2xldCBlPU1hdGguc2lnbih0KT4wPyIiOiItIjtjb25zdCBuPU1hdGguYWJzKHQpO3JldHVybiBlKz1uPDFlMz9gJHtLb3Qobil9IG1zYDpuPDZlND9gJHtLb3Qobi8xZTMpfSBzZWNgOm48cW90P2Ake0tvdChuLzZlNCl9IG1pbmA6bjxab3Q/YCR7S290KG4vcW90KX0gaHJgOm48WG90P2Ake0tvdChuL1pvdCl9IGRheWA6YCR7S290KG4vWG90KX0geXJgLGV9Y29uc3QgUW90PXtmb3JtYXRUaWNrOkpvdCxmb3JtYXRTaG9ydDpKb3QsZm9ybWF0UmVhZGFibGU6Sm90LGZvcm1hdExvbmc6Sm90fSwkb3Q9Q290KCkudGlja0Zvcm1hdCgpO2xldCB0aXQ7Y29uc3QgZWl0PXtmb3JtYXRUaWNrOnQ9PiRvdChuZXcgRGF0ZSh0KSksZm9ybWF0U2hvcnQ6dD0+bmV3IERhdGUodCkudG9Mb2NhbGVTdHJpbmcodGl0LHt5ZWFyOiJudW1lcmljIixtb250aDoic2hvcnQiLGRheToibnVtZXJpYyIsaG91cjoibnVtZXJpYyIsbWludXRlOiJudW1lcmljIixzZWNvbmQ6Im51bWVyaWMifSksZm9ybWF0UmVhZGFibGU6dD0+bmV3IERhdGUodCkudG9Mb2NhbGVTdHJpbmcodGl0LHt5ZWFyOiJudW1lcmljIixtb250aDoic2hvcnQiLGRheToibnVtZXJpYyIsaG91cjoibnVtZXJpYyIsbWludXRlOiJudW1lcmljIixzZWNvbmQ6Im51bWVyaWMiLHRpbWVab25lTmFtZToic2hvcnQifSksZm9ybWF0TG9uZzp0PT5uZXcgRGF0ZSh0KS50b0xvY2FsZVN0cmluZyh0aXQse3llYXI6Im51bWVyaWMiLG1vbnRoOiJsb25nIixkYXk6Im51bWVyaWMiLGhvdXI6Im51bWVyaWMiLG1pbnV0ZToibnVtZXJpYyIsc2Vjb25kOiJudW1lcmljIix0aW1lWm9uZU5hbWU6InNob3J0IixmcmFjdGlvbmFsU2Vjb25kRGlnaXRzOjN9KX07ZnVuY3Rpb24gbml0KHQpe3N3aXRjaCh0KXtjYXNlIHI1LkxJTkVBUjpyZXR1cm4gbmV3IG9pdDtjYXNlIHI1LkxPRzEwOnJldHVybiBuZXcgaWl0O2Nhc2UgcjUuVElNRTpyZXR1cm4gbmV3IGFpdDtkZWZhdWx0OnRocm93IG5ldyBSYW5nZUVycm9yKGBTY2FsZVR5cGUgJHt0fSBub3Qgc3VwcG9ydGVkLmApfX1jbGFzcyBvaXR7Y29uc3RydWN0b3IoKXt0aGlzLmRlZmF1bHRGb3JtYXR0ZXI9am90fXRyYW5zZm9ybSh0LGUsbil7Y29uc3RbbyxpXT10LGE9aS1vLFtyLHNdPWU7cmV0dXJuIDA9PT1hP3I6KHMtcikvYSoobi1vKStyfWZvcndhcmQodCxlLG4pe3JldHVybiB0aGlzLnRyYW5zZm9ybSh0LGUsbil9cmV2ZXJzZSh0LGUsbil7cmV0dXJuIHRoaXMudHJhbnNmb3JtKGUsdCxuKX1uaWNlRG9tYWluKHQpe2xldFtlLG5dPXQ7aWYobjxlKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBpbnB1dDogbWluIGlzIGxhcmdlciB0aGFuIG1heCIpO2lmKG49PT1lKXJldHVybiAwPT09ZT9bLTEsMV06ZTwwP1syKmUsMF06WzAsMiplXTtjb25zdCBvPXBldCgpLGk9LjA1KihuLWUrTnVtYmVyLkVQU0lMT04pLFthLHJdPW8uZG9tYWluKFtlLWksbitpXSkubmljZSgpLmRvbWFpbigpO3JldHVyblthLHJdfXRpY2tzKHQsZSl7cmV0dXJuIHBldCgpLmRvbWFpbih0KS50aWNrcyhlKX1pc1NhZmVOdW1iZXIodCl7cmV0dXJuIE51bWJlci5pc0Zpbml0ZSh0KX19Y2xhc3MgaWl0e2NvbnN0cnVjdG9yKCl7dGhpcy5kZWZhdWx0Rm9ybWF0dGVyPWpvdH10cmFuc2Zvcm0odCl7cmV0dXJuIE1hdGgubG9nMTAodD4wP3Q6TnVtYmVyLk1JTl9WQUxVRSl9dW50cmFuc2Zvcm0odCl7cmV0dXJuIE1hdGguZXhwKHQvTWF0aC5MT0cxMEUpfWZvcndhcmQodCxlLG4pe2lmKG48PTApcmV0dXJuIGVbMF07Y29uc3RbbyxpXT10LFthLHJdPWUscz10aGlzLnRyYW5zZm9ybShvKSxsPXRoaXMudHJhbnNmb3JtKGkpLXMsYz1yLWE7cmV0dXJuIG49dGhpcy50cmFuc2Zvcm0obiksYy8obCtOdW1iZXIuRVBTSUxPTikqKG4tcykrYX1yZXZlcnNlKHQsZSxuKXtjb25zdFtvLGldPXQsW2Escl09ZSxzPXRoaXMudHJhbnNmb3JtKG8pLGw9dGhpcy50cmFuc2Zvcm0oaSk7cmV0dXJuIHRoaXMudW50cmFuc2Zvcm0oKGwtcykvKHItYStOdW1iZXIuRVBTSUxPTikqKG4tYSkrcyl9bmljZURvbWFpbih0KXtjb25zdFtlLG5dPXQ7aWYoZT5uKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBpbnB1dDogbWluIGlzIGxhcmdlciB0aGFuIG1heCIpO2NvbnN0IG89TWF0aC5tYXgoZSxOdW1iZXIuTUlOX1ZBTFVFKSxpPU1hdGgubWF4KG4sTnVtYmVyLk1JTl9WQUxVRSk7cmV0dXJuIG48PTA/W051bWJlci5NSU5fVkFMVUUsMV06W01hdGgubWF4KE51bWJlci5NSU5fVkFMVUUsLjUqbyksMippXX10aWNrcyh0LGUpe2NvbnN0IG49dFswXTw9MD9OdW1iZXIuTUlOX1ZBTFVFOnRbMF0sbz10WzFdPD0wP051bWJlci5NSU5fVkFMVUU6dFsxXSxpPUNldCgpLmRvbWFpbihbbixvXSkudGlja3MoZSk7cmV0dXJuIGkubGVuZ3RoP2k6dH1pc1NhZmVOdW1iZXIodCl7cmV0dXJuIE51bWJlci5pc0Zpbml0ZSh0KSYmdD4wfX1jbGFzcyBhaXR7Y29uc3RydWN0b3IoKXt0aGlzLnNjYWxlPUNvdCgpLHRoaXMuZGVmYXVsdEZvcm1hdHRlcj1laXR9Zm9yd2FyZCh0LGUsbil7cmV0dXJuIHRoaXMuc2NhbGUuZG9tYWluKHQpLnJhbmdlKGUpKG4pfXJldmVyc2UodCxlLG4pe3JldHVybiB0aGlzLnNjYWxlLmRvbWFpbih0KS5yYW5nZShlKS5pbnZlcnQobikuZ2V0VGltZSgpfW5pY2VEb21haW4odCl7Y29uc3RbZSxuXT10aGlzLnNjYWxlLmRvbWFpbih0KS5uaWNlKCkuZG9tYWluKCk7cmV0dXJuW2UuZ2V0VGltZSgpLG4uZ2V0VGltZSgpXX10aWNrcyh0LGUpe3JldHVybiB0aGlzLnNjYWxlLmRvbWFpbih0KS50aWNrcyhlKS5tYXAoKHQ9PnQuZ2V0VGltZSgpKSl9aXNTYWZlTnVtYmVyKHQpe3JldHVybiBOdW1iZXIuaXNGaW5pdGUodCl9fWNvbnN0IHJpdD1Cb29sZWFuKHNlbGYuaGFzT3duUHJvcGVydHkoImRvY3VtZW50IikmJmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLmdldENvbnRleHQoIndlYmdsMiIpKTtmdW5jdGlvbiBzaXQoKXtyZXR1cm4gc2VsZi5oYXNPd25Qcm9wZXJ0eSgiT2Zmc2NyZWVuQ2FudmFzIil9ZnVuY3Rpb24gbGl0KHQsZSl7aWYodC5sZW5ndGghPT1lLmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKylpZih0W25dIT09ZVtuXSlyZXR1cm4hMTtyZXR1cm4hMH1jbGFzcyBjaXR7Y29uc3RydWN0b3IoKXt0aGlzLnhTY2FsZT1uaXQocjUuTElORUFSKSx0aGlzLnlTY2FsZT1uaXQocjUuTElORUFSKSx0aGlzLmRvbUNvbnRhaW5lclJlY3Q9e3g6MCx3aWR0aDoxLHk6MCxoZWlnaHQ6MX0sdGhpcy5sYXN0VXBkYXRlZD0wLHRoaXMuY3VycmVudFZpZXdCb3hSZWN0PXt4OjAsd2lkdGg6MSx5OjAsaGVpZ2h0OjF9fWdldFVwZGF0ZUlkZW50aWZpZXIoKXtyZXR1cm4gdGhpcy5sYXN0VXBkYXRlZH11cGRhdGVJZGVudGlmaWVyKCl7dGhpcy5sYXN0VXBkYXRlZCsrfWlzWUF4aXNQb2ludGVkRG93bigpe3JldHVybiEwfXNldFhTY2FsZSh0KXt0aGlzLnhTY2FsZT10LHRoaXMudXBkYXRlSWRlbnRpZmllcigpfXNldFlTY2FsZSh0KXt0aGlzLnlTY2FsZT10LHRoaXMudXBkYXRlSWRlbnRpZmllcigpfWdldEN1cnJlbnRWaWV3Qm94UmVjdCgpe3JldHVybiB0aGlzLmN1cnJlbnRWaWV3Qm94UmVjdH1zZXRWaWV3Qm94UmVjdCh0KXt0aGlzLmN1cnJlbnRWaWV3Qm94UmVjdD10LHRoaXMudXBkYXRlSWRlbnRpZmllcigpfXNldERvbUNvbnRhaW5lclJlY3QodCl7dGhpcy5kb21Db250YWluZXJSZWN0PXQsdGhpcy51cGRhdGVJZGVudGlmaWVyKCl9dHJhbnNmb3JtRGF0YVRvVWlDb29yZCh0LGUpe2NvbnN0IG49dCxvPShmdW5jdGlvbiBpKHQpe3JldHVybnt4Olt0LngsdC54K3Qud2lkdGhdLHk6W3QueSx0LnkrdC5oZWlnaHRdfX0pKHRoaXMuY3VycmVudFZpZXdCb3hSZWN0KTtyZXR1cm5bdGhpcy54U2NhbGUuZm9yd2FyZChvLngsW24ueCxuLngrbi53aWR0aF0sZVswXSksdGhpcy55U2NhbGUuZm9yd2FyZChvLnksdGhpcy5pc1lBeGlzUG9pbnRlZERvd24oKT9bbi55K24uaGVpZ2h0LG4ueV06W24ueSxuLnkrbi5oZWlnaHRdLGVbMV0pXX19ZnVuY3Rpb24gZGl0KHQsZSxuLG8pe2NvbnN0e2NvbG9yOmksdmlzaWJsZTphLG9wYWNpdHk6cn09bztsZXQgcz10O2lmKHMpe2lmKCFhKXJldHVybiBzLnN0eWxlLmRpc3BsYXk9Im5vbmUiLHN9ZWxzZXtpZighYSlyZXR1cm4gbnVsbDtzPWUoKX1yZXR1cm4gcz1uKHMpLHMuc3R5bGUuZGlzcGxheT0iIixzLnN0eWxlLnN0cm9rZT1pLHMuc3R5bGUub3BhY2l0eT1TdHJpbmcobnVsbCE9cj9yOjEpLHN9Y2xhc3MgcGl0e2NvbnN0cnVjdG9yKHQpe3RoaXMuc3ZnPXR9Zmx1c2goKXt9b25SZXNpemUodCl7fWRlc3Ryb3lPYmplY3QodCl7dGhpcy5zdmcucmVtb3ZlQ2hpbGQodC5kb20pfXNldFVzZURhcmtNb2RlKHQpe31jcmVhdGVQYXRoRFN0cmluZyh0KXtpZighdC5sZW5ndGgpcmV0dXJuIiI7Y29uc3QgZT1uZXcgQXJyYXkodC5sZW5ndGgvMik7ZVswXT1gTSR7dFswXX0sJHt0WzFdfWA7Zm9yKGxldCBuPTE7bjx0Lmxlbmd0aC8yO24rKyllW25dPWBMJHt0WzIqbl19LCR7dFsyKm4rMV19YDtyZXR1cm4gZS5qb2luKCIiKX1jcmVhdGVPclVwZGF0ZUxpbmVPYmplY3QodCxlLG4pe2NvbnN0IG89ZGl0KG51bGw9PXQ/dm9pZCAwOnQuZG9tLCgoKT0+e2NvbnN0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInBhdGgiKTt0LnN0eWxlLmZpbGw9Im5vbmUiO2NvbnN0IG49dGhpcy5jcmVhdGVQYXRoRFN0cmluZyhlKTtyZXR1cm4gdC5zZXRBdHRyaWJ1dGUoImQiLG4pLHRoaXMuc3ZnLmFwcGVuZENoaWxkKHQpLHR9KSwobj0+e2lmKCEobnVsbD09dD92b2lkIDA6dC5kYXRhKXx8IWxpdChlLG51bGw9PXQ/dm9pZCAwOnQuZGF0YSkpe2NvbnN0IHQ9dGhpcy5jcmVhdGVQYXRoRFN0cmluZyhlKTtuLnNldEF0dHJpYnV0ZSgiZCIsdCl9cmV0dXJuIG59KSxuKTtyZXR1cm4gbnVsbD09PW8/bnVsbDooby5zdHlsZS5zdHJva2VXaWR0aD1TdHJpbmcobi53aWR0aCkse2RvbTpvLGRhdGE6ZX0pfWNyZWF0ZU9yVXBkYXRlVHJpYW5nbGVPYmplY3QodCxlLG4pe2NvbnN0e3NpemU6byxjb2xvcjppfT1uLGE9bypNYXRoLnNxcnQoMykvMixyPW5ldyBGbG9hdDMyQXJyYXkoW2UueC1vLzIsZS55K2EvMyxlLngrby8yLGUueSthLzMsZS54LGUueS0yKmEvM10pLHM9ZGl0KG51bGw9PXQ/dm9pZCAwOnQuZG9tLCgoKT0+e2NvbnN0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInBhdGgiKTt0LmNsYXNzTGlzdC5hZGQoInRyaWFuZ2xlIiksdC5zdHlsZS5maWxsPSJub25lIjtjb25zdCBlPXRoaXMuY3JlYXRlUGF0aERTdHJpbmcocik7cmV0dXJuIHQuc2V0QXR0cmlidXRlKCJkIixlKyJaIiksdGhpcy5zdmcuYXBwZW5kQ2hpbGQodCksdH0pLCh0PT57Y29uc3QgZT10aGlzLmNyZWF0ZVBhdGhEU3RyaW5nKHIpO3JldHVybiB0LnNldEF0dHJpYnV0ZSgiZCIsZSsiWiIpLHR9KSxuKTtyZXR1cm4gbnVsbD09PXM/bnVsbDoocy5zdHlsZS5maWxsPWkse2RvbTpzLGRhdGE6cn0pfWNyZWF0ZU9yVXBkYXRlQ2lyY2xlT2JqZWN0KHQsZSxuKXtjb25zdHtjb2xvcjpvLHJhZGl1czppfT1uLGE9ZGl0KG51bGw9PXQ/dm9pZCAwOnQuZG9tLCgoKT0+e2NvbnN0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImNpcmNsZSIpO3JldHVybiB0LnN0eWxlLmZpbGw9byx0LnNldEF0dHJpYnV0ZSgiY3giLFN0cmluZyhlLngpKSx0LnNldEF0dHJpYnV0ZSgiY3kiLFN0cmluZyhlLnkpKSx0LnNldEF0dHJpYnV0ZSgiciIsU3RyaW5nKGkpKSx0aGlzLnN2Zy5hcHBlbmRDaGlsZCh0KSx0fSksKHQ9Pih0LnN0eWxlLmZpbGw9byx0LnNldEF0dHJpYnV0ZSgiY3giLFN0cmluZyhlLngpKSx0LnNldEF0dHJpYnV0ZSgiY3kiLFN0cmluZyhlLnkpKSx0LnNldEF0dHJpYnV0ZSgiciIsU3RyaW5nKGkpKSx0KSksbik7cmV0dXJuIG51bGw9PT1hP251bGw6e2RvbTphLGRhdGE6ZX19Y3JlYXRlT3JVcGRhdGVUcmFwZXpvaWRPYmplY3QodCxlLG4sbyl7aWYoZS55IT09bi55KXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnB1dCBlcnJvcjogc3RhcnQueSAhPSBlbmQueS4iKTtjb25zdHthbHRpdHVkZTppLGNvbG9yOmF9PW8scj0yL01hdGguc3FydCgzKSppLHM9bmV3IEZsb2F0MzJBcnJheShbZS54LXIvMixlLnkraS8yLGUueCxlLnktaS8yLG4ueCxuLnktaS8yLG4ueCtyLzIsbi55K2kvMl0pLGw9ZGl0KG51bGw9PXQ/dm9pZCAwOnQuZG9tLCgoKT0+e2NvbnN0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInBhdGgiKTt0LmNsYXNzTGlzdC5hZGQoInRyYXBlem9pZCIpLHQuc3R5bGUuZmlsbD0ibm9uZSI7Y29uc3QgZT10aGlzLmNyZWF0ZVBhdGhEU3RyaW5nKHMpO3JldHVybiB0LnNldEF0dHJpYnV0ZSgiZCIsZSsiWiIpLHRoaXMuc3ZnLmFwcGVuZENoaWxkKHQpLHR9KSwodD0+e2NvbnN0IGU9dGhpcy5jcmVhdGVQYXRoRFN0cmluZyhzKTtyZXR1cm4gdC5zZXRBdHRyaWJ1dGUoImQiLGUrIloiKSx0fSksbyk7cmV0dXJuIG51bGw9PT1sP251bGw6KGwuc3R5bGUuZmlsbD1hLHtkb206bCxkYXRhOnN9KX19Y29uc3QgbWl0PTEwMCx1aXQ9MWUzLGZpdD0xMDAxLGdpdD0xMDAyLGhpdD0xMDAzLGJpdD0xMDA2LHlpdD0xMDA4LF9pdD0xMDEyLENpdD0xMDE0LE1pdD0xMDE1LHZpdD0xMDE2LHhpdD0xMDIwLE9pdD0xMDIyLFBpdD0xMDIzLHdpdD0xMDI2LGtpdD0xMDI3LFNpdD0yMzAwLERpdD0yMzAxLEVpdD0yMzAyLEFpdD0yNDAwLFJpdD0yNDAxLFRpdD0yNDAyLE5pdD0zZTMsSWl0PTc2ODAseml0PTM1MDQ0LEhpdD0zNTA0OCxGaXQ9IjMwMCBlcyI7ZnVuY3Rpb24gTGl0KCl7fU9iamVjdC5hc3NpZ24oTGl0LnByb3RvdHlwZSx7YWRkRXZlbnRMaXN0ZW5lcjpmdW5jdGlvbih0LGUpe3ZvaWQgMD09PXRoaXMuX2xpc3RlbmVycyYmKHRoaXMuX2xpc3RlbmVycz17fSk7Y29uc3Qgbj10aGlzLl9saXN0ZW5lcnM7dm9pZCAwPT09blt0XSYmKG5bdF09W10pLC0xPT09blt0XS5pbmRleE9mKGUpJiZuW3RdLnB1c2goZSl9LGhhc0V2ZW50TGlzdGVuZXI6ZnVuY3Rpb24odCxlKXtpZih2b2lkIDA9PT10aGlzLl9saXN0ZW5lcnMpcmV0dXJuITE7Y29uc3Qgbj10aGlzLl9saXN0ZW5lcnM7cmV0dXJuIHZvaWQgMCE9PW5bdF0mJi0xIT09blt0XS5pbmRleE9mKGUpfSxyZW1vdmVFdmVudExpc3RlbmVyOmZ1bmN0aW9uKHQsZSl7aWYodm9pZCAwPT09dGhpcy5fbGlzdGVuZXJzKXJldHVybjtjb25zdCBuPXRoaXMuX2xpc3RlbmVyc1t0XTtpZih2b2lkIDAhPT1uKXtjb25zdCB0PW4uaW5kZXhPZihlKTstMSE9PXQmJm4uc3BsaWNlKHQsMSl9fSxkaXNwYXRjaEV2ZW50OmZ1bmN0aW9uKHQpe2lmKHZvaWQgMD09PXRoaXMuX2xpc3RlbmVycylyZXR1cm47Y29uc3QgZT10aGlzLl9saXN0ZW5lcnNbdC50eXBlXTtpZih2b2lkIDAhPT1lKXt0LnRhcmdldD10aGlzO2NvbnN0IG49ZS5zbGljZSgwKTtmb3IobGV0IGU9MCxvPW4ubGVuZ3RoO2U8bztlKyspbltlXS5jYWxsKHRoaXMsdCl9fX0pO2NvbnN0IEJpdD1bXTtmb3IobGV0IHQ9MDt0PDI1Njt0KyspQml0W3RdPSh0PDE2PyIwIjoiIikrdC50b1N0cmluZygxNik7bGV0IFZpdD0xMjM0NTY3O2NvbnN0IGppdD17REVHMlJBRDpNYXRoLlBJLzE4MCxSQUQyREVHOjE4MC9NYXRoLlBJLGdlbmVyYXRlVVVJRDpmdW5jdGlvbigpe2NvbnN0IHQ9NDI5NDk2NzI5NSpNYXRoLnJhbmRvbSgpfDAsZT00Mjk0OTY3Mjk1Kk1hdGgucmFuZG9tKCl8MCxuPTQyOTQ5NjcyOTUqTWF0aC5yYW5kb20oKXwwLG89NDI5NDk2NzI5NSpNYXRoLnJhbmRvbSgpfDA7cmV0dXJuKEJpdFsyNTUmdF0rQml0W3Q+PjgmMjU1XStCaXRbdD4+MTYmMjU1XStCaXRbdD4+MjQmMjU1XSsiLSIrQml0WzI1NSZlXStCaXRbZT4+OCYyNTVdKyItIitCaXRbZT4+MTYmMTV8NjRdK0JpdFtlPj4yNCYyNTVdKyItIitCaXRbNjMmbnwxMjhdK0JpdFtuPj44JjI1NV0rIi0iK0JpdFtuPj4xNiYyNTVdK0JpdFtuPj4yNCYyNTVdK0JpdFsyNTUmb10rQml0W28+PjgmMjU1XStCaXRbbz4+MTYmMjU1XStCaXRbbz4+MjQmMjU1XSkudG9VcHBlckNhc2UoKX0sY2xhbXA6ZnVuY3Rpb24odCxlLG4pe3JldHVybiBNYXRoLm1heChlLE1hdGgubWluKG4sdCkpfSxldWNsaWRlYW5Nb2R1bG86ZnVuY3Rpb24odCxlKXtyZXR1cm4odCVlK2UpJWV9LG1hcExpbmVhcjpmdW5jdGlvbih0LGUsbixvLGkpe3JldHVybiBvKyh0LWUpKihpLW8pLyhuLWUpfSxsZXJwOmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4oMS1uKSp0K24qZX0sZGFtcDpmdW5jdGlvbih0LGUsbixvKXtyZXR1cm4gaml0LmxlcnAodCxlLDEtTWF0aC5leHAoLW4qbykpfSxwaW5ncG9uZzpmdW5jdGlvbih0LGU9MSl7cmV0dXJuIGUtTWF0aC5hYnMoaml0LmV1Y2xpZGVhbk1vZHVsbyh0LDIqZSktZSl9LHNtb290aHN0ZXA6ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0PD1lPzA6dD49bj8xOih0PSh0LWUpLyhuLWUpKSp0KigzLTIqdCl9LHNtb290aGVyc3RlcDpmdW5jdGlvbih0LGUsbil7cmV0dXJuIHQ8PWU/MDp0Pj1uPzE6KHQ9KHQtZSkvKG4tZSkpKnQqdCoodCooNip0LTE1KSsxMCl9LHJhbmRJbnQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqKGUtdCsxKSl9LHJhbmRGbG9hdDpmdW5jdGlvbih0LGUpe3JldHVybiB0K01hdGgucmFuZG9tKCkqKGUtdCl9LHJhbmRGbG9hdFNwcmVhZDpmdW5jdGlvbih0KXtyZXR1cm4gdCooLjUtTWF0aC5yYW5kb20oKSl9LHNlZWRlZFJhbmRvbTpmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwIT09dCYmKFZpdD10JTIxNDc0ODM2NDcpLFZpdD0xNjgwNypWaXQlMjE0NzQ4MzY0NywoVml0LTEpLzIxNDc0ODM2NDZ9LGRlZ1RvUmFkOmZ1bmN0aW9uKHQpe3JldHVybiB0KmppdC5ERUcyUkFEfSxyYWRUb0RlZzpmdW5jdGlvbih0KXtyZXR1cm4gdCpqaXQuUkFEMkRFR30saXNQb3dlck9mVHdvOmZ1bmN0aW9uKHQpe3JldHVybiAwPT0odCZ0LTEpJiYwIT09dH0sY2VpbFBvd2VyT2ZUd286ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucG93KDIsTWF0aC5jZWlsKE1hdGgubG9nKHQpL01hdGguTE4yKSl9LGZsb29yUG93ZXJPZlR3bzpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5wb3coMixNYXRoLmZsb29yKE1hdGgubG9nKHQpL01hdGguTE4yKSl9LHNldFF1YXRlcm5pb25Gcm9tUHJvcGVyRXVsZXI6ZnVuY3Rpb24odCxlLG4sbyxpKXtjb25zdCBhPU1hdGguY29zLHI9TWF0aC5zaW4scz1hKG4vMiksbD1yKG4vMiksYz1hKChlK28pLzIpLGQ9cigoZStvKS8yKSxwPWEoKGUtbykvMiksbT1yKChlLW8pLzIpLHU9YSgoby1lKS8yKSxmPXIoKG8tZSkvMik7c3dpdGNoKGkpe2Nhc2UiWFlYIjp0LnNldChzKmQsbCpwLGwqbSxzKmMpO2JyZWFrO2Nhc2UiWVpZIjp0LnNldChsKm0scypkLGwqcCxzKmMpO2JyZWFrO2Nhc2UiWlhaIjp0LnNldChsKnAsbCptLHMqZCxzKmMpO2JyZWFrO2Nhc2UiWFpYIjp0LnNldChzKmQsbCpmLGwqdSxzKmMpO2JyZWFrO2Nhc2UiWVhZIjp0LnNldChsKnUscypkLGwqZixzKmMpO2JyZWFrO2Nhc2UiWllaIjp0LnNldChsKmYsbCp1LHMqZCxzKmMpO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS53YXJuKCJUSFJFRS5NYXRoVXRpbHM6IC5zZXRRdWF0ZXJuaW9uRnJvbVByb3BlckV1bGVyKCkgZW5jb3VudGVyZWQgYW4gdW5rbm93biBvcmRlcjogIitpKX19fTtjbGFzcyBVaXR7Y29uc3RydWN0b3IodD0wLGU9MCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlzVmVjdG9yMiIse3ZhbHVlOiEwfSksdGhpcy54PXQsdGhpcy55PWV9Z2V0IHdpZHRoKCl7cmV0dXJuIHRoaXMueH1zZXQgd2lkdGgodCl7dGhpcy54PXR9Z2V0IGhlaWdodCgpe3JldHVybiB0aGlzLnl9c2V0IGhlaWdodCh0KXt0aGlzLnk9dH1zZXQodCxlKXtyZXR1cm4gdGhpcy54PXQsdGhpcy55PWUsdGhpc31zZXRTY2FsYXIodCl7cmV0dXJuIHRoaXMueD10LHRoaXMueT10LHRoaXN9c2V0WCh0KXtyZXR1cm4gdGhpcy54PXQsdGhpc31zZXRZKHQpe3JldHVybiB0aGlzLnk9dCx0aGlzfXNldENvbXBvbmVudCh0LGUpe3N3aXRjaCh0KXtjYXNlIDA6dGhpcy54PWU7YnJlYWs7Y2FzZSAxOnRoaXMueT1lO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrdCl9cmV0dXJuIHRoaXN9Z2V0Q29tcG9uZW50KHQpe3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIHRoaXMueDtjYXNlIDE6cmV0dXJuIHRoaXMueTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK3QpfX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLngsdGhpcy55KX1jb3B5KHQpe3JldHVybiB0aGlzLng9dC54LHRoaXMueT10LnksdGhpc31hZGQodCxlKXtyZXR1cm4gdm9pZCAwIT09ZT8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiAuYWRkKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuYWRkVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5hZGRWZWN0b3JzKHQsZSkpOih0aGlzLngrPXQueCx0aGlzLnkrPXQueSx0aGlzKX1hZGRTY2FsYXIodCl7cmV0dXJuIHRoaXMueCs9dCx0aGlzLnkrPXQsdGhpc31hZGRWZWN0b3JzKHQsZSl7cmV0dXJuIHRoaXMueD10LngrZS54LHRoaXMueT10LnkrZS55LHRoaXN9YWRkU2NhbGVkVmVjdG9yKHQsZSl7cmV0dXJuIHRoaXMueCs9dC54KmUsdGhpcy55Kz10LnkqZSx0aGlzfXN1Yih0LGUpe3JldHVybiB2b2lkIDAhPT1lPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjI6IC5zdWIoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5zdWJWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLnN1YlZlY3RvcnModCxlKSk6KHRoaXMueC09dC54LHRoaXMueS09dC55LHRoaXMpfXN1YlNjYWxhcih0KXtyZXR1cm4gdGhpcy54LT10LHRoaXMueS09dCx0aGlzfXN1YlZlY3RvcnModCxlKXtyZXR1cm4gdGhpcy54PXQueC1lLngsdGhpcy55PXQueS1lLnksdGhpc31tdWx0aXBseSh0KXtyZXR1cm4gdGhpcy54Kj10LngsdGhpcy55Kj10LnksdGhpc31tdWx0aXBseVNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kj10LHRoaXMueSo9dCx0aGlzfWRpdmlkZSh0KXtyZXR1cm4gdGhpcy54Lz10LngsdGhpcy55Lz10LnksdGhpc31kaXZpZGVTY2FsYXIodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlTY2FsYXIoMS90KX1hcHBseU1hdHJpeDModCl7Y29uc3QgZT10aGlzLngsbj10aGlzLnksbz10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9b1swXSplK29bM10qbitvWzZdLHRoaXMueT1vWzFdKmUrb1s0XSpuK29bN10sdGhpc31taW4odCl7cmV0dXJuIHRoaXMueD1NYXRoLm1pbih0aGlzLngsdC54KSx0aGlzLnk9TWF0aC5taW4odGhpcy55LHQueSksdGhpc31tYXgodCl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0aGlzLngsdC54KSx0aGlzLnk9TWF0aC5tYXgodGhpcy55LHQueSksdGhpc31jbGFtcCh0LGUpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodC54LE1hdGgubWluKGUueCx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodC55LE1hdGgubWluKGUueSx0aGlzLnkpKSx0aGlzfWNsYW1wU2NhbGFyKHQsZSl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy54KSksdGhpcy55PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLnkpKSx0aGlzfWNsYW1wTGVuZ3RoKHQsZSl7Y29uc3Qgbj10aGlzLmxlbmd0aCgpO3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcihufHwxKS5tdWx0aXBseVNjYWxhcihNYXRoLm1heCh0LE1hdGgubWluKGUsbikpKX1mbG9vcigpe3JldHVybiB0aGlzLng9TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT1NYXRoLmZsb29yKHRoaXMueSksdGhpc31jZWlsKCl7cmV0dXJuIHRoaXMueD1NYXRoLmNlaWwodGhpcy54KSx0aGlzLnk9TWF0aC5jZWlsKHRoaXMueSksdGhpc31yb3VuZCgpe3JldHVybiB0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpLHRoaXMueT1NYXRoLnJvdW5kKHRoaXMueSksdGhpc31yb3VuZFRvWmVybygpe3JldHVybiB0aGlzLng9dGhpcy54PDA/TWF0aC5jZWlsKHRoaXMueCk6TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT10aGlzLnk8MD9NYXRoLmNlaWwodGhpcy55KTpNYXRoLmZsb29yKHRoaXMueSksdGhpc31uZWdhdGUoKXtyZXR1cm4gdGhpcy54PS10aGlzLngsdGhpcy55PS10aGlzLnksdGhpc31kb3QodCl7cmV0dXJuIHRoaXMueCp0LngrdGhpcy55KnQueX1jcm9zcyh0KXtyZXR1cm4gdGhpcy54KnQueS10aGlzLnkqdC54fWxlbmd0aFNxKCl7cmV0dXJuIHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueX1sZW5ndGgoKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSl9bWFuaGF0dGFuTGVuZ3RoKCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueCkrTWF0aC5hYnModGhpcy55KX1ub3JtYWxpemUoKXtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIodGhpcy5sZW5ndGgoKXx8MSl9YW5nbGUoKXtyZXR1cm4gTWF0aC5hdGFuMigtdGhpcy55LC10aGlzLngpK01hdGguUEl9ZGlzdGFuY2VUbyh0KXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdGFuY2VUb1NxdWFyZWQodCkpfWRpc3RhbmNlVG9TcXVhcmVkKHQpe2NvbnN0IGU9dGhpcy54LXQueCxuPXRoaXMueS10Lnk7cmV0dXJuIGUqZStuKm59bWFuaGF0dGFuRGlzdGFuY2VUbyh0KXtyZXR1cm4gTWF0aC5hYnModGhpcy54LXQueCkrTWF0aC5hYnModGhpcy55LXQueSl9c2V0TGVuZ3RoKHQpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKHQpfWxlcnAodCxlKXtyZXR1cm4gdGhpcy54Kz0odC54LXRoaXMueCkqZSx0aGlzLnkrPSh0LnktdGhpcy55KSplLHRoaXN9bGVycFZlY3RvcnModCxlLG4pe3JldHVybiB0aGlzLng9dC54KyhlLngtdC54KSpuLHRoaXMueT10LnkrKGUueS10LnkpKm4sdGhpc31lcXVhbHModCl7cmV0dXJuIHQueD09PXRoaXMueCYmdC55PT09dGhpcy55fWZyb21BcnJheSh0LGU9MCl7cmV0dXJuIHRoaXMueD10W2VdLHRoaXMueT10W2UrMV0sdGhpc310b0FycmF5KHQ9W10sZT0wKXtyZXR1cm4gdFtlXT10aGlzLngsdFtlKzFdPXRoaXMueSx0fWZyb21CdWZmZXJBdHRyaWJ1dGUodCxlLG4pe3JldHVybiB2b2lkIDAhPT1uJiZjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjI6IG9mZnNldCBoYXMgYmVlbiByZW1vdmVkIGZyb20gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKSx0aGlzLng9dC5nZXRYKGUpLHRoaXMueT10LmdldFkoZSksdGhpc31yb3RhdGVBcm91bmQodCxlKXtjb25zdCBuPU1hdGguY29zKGUpLG89TWF0aC5zaW4oZSksaT10aGlzLngtdC54LGE9dGhpcy55LXQueTtyZXR1cm4gdGhpcy54PWkqbi1hKm8rdC54LHRoaXMueT1pKm8rYSpuK3QueSx0aGlzfXJhbmRvbSgpe3JldHVybiB0aGlzLng9TWF0aC5yYW5kb20oKSx0aGlzLnk9TWF0aC5yYW5kb20oKSx0aGlzfX1jbGFzcyBXaXR7Y29uc3RydWN0b3IoKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaXNNYXRyaXgzIix7dmFsdWU6ITB9KSx0aGlzLmVsZW1lbnRzPVsxLDAsMCwwLDEsMCwwLDAsMV0sYXJndW1lbnRzLmxlbmd0aD4wJiZjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXgzOiB0aGUgY29uc3RydWN0b3Igbm8gbG9uZ2VyIHJlYWRzIGFyZ3VtZW50cy4gdXNlIC5zZXQoKSBpbnN0ZWFkLiIpfXNldCh0LGUsbixvLGksYSxyLHMsbCl7Y29uc3QgYz10aGlzLmVsZW1lbnRzO3JldHVybiBjWzBdPXQsY1sxXT1vLGNbMl09cixjWzNdPWUsY1s0XT1pLGNbNV09cyxjWzZdPW4sY1s3XT1hLGNbOF09bCx0aGlzfWlkZW50aXR5KCl7cmV0dXJuIHRoaXMuc2V0KDEsMCwwLDAsMSwwLDAsMCwxKSx0aGlzfWNsb25lKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5mcm9tQXJyYXkodGhpcy5lbGVtZW50cyl9Y29weSh0KXtjb25zdCBlPXRoaXMuZWxlbWVudHMsbj10LmVsZW1lbnRzO3JldHVybiBlWzBdPW5bMF0sZVsxXT1uWzFdLGVbMl09blsyXSxlWzNdPW5bM10sZVs0XT1uWzRdLGVbNV09bls1XSxlWzZdPW5bNl0sZVs3XT1uWzddLGVbOF09bls4XSx0aGlzfWV4dHJhY3RCYXNpcyh0LGUsbil7cmV0dXJuIHQuc2V0RnJvbU1hdHJpeDNDb2x1bW4odGhpcywwKSxlLnNldEZyb21NYXRyaXgzQ29sdW1uKHRoaXMsMSksbi5zZXRGcm9tTWF0cml4M0NvbHVtbih0aGlzLDIpLHRoaXN9c2V0RnJvbU1hdHJpeDQodCl7Y29uc3QgZT10LmVsZW1lbnRzO3JldHVybiB0aGlzLnNldChlWzBdLGVbNF0sZVs4XSxlWzFdLGVbNV0sZVs5XSxlWzJdLGVbNl0sZVsxMF0pLHRoaXN9bXVsdGlwbHkodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlNYXRyaWNlcyh0aGlzLHQpfXByZW11bHRpcGx5KHQpe3JldHVybiB0aGlzLm11bHRpcGx5TWF0cmljZXModCx0aGlzKX1tdWx0aXBseU1hdHJpY2VzKHQsZSl7Y29uc3Qgbj10LmVsZW1lbnRzLG89ZS5lbGVtZW50cyxpPXRoaXMuZWxlbWVudHMsYT1uWzBdLHI9blszXSxzPW5bNl0sbD1uWzFdLGM9bls0XSxkPW5bN10scD1uWzJdLG09bls1XSx1PW5bOF0sZj1vWzBdLGc9b1szXSxoPW9bNl0sYj1vWzFdLHk9b1s0XSxfPW9bN10sQz1vWzJdLE09b1s1XSx2PW9bOF07cmV0dXJuIGlbMF09YSpmK3IqYitzKkMsaVszXT1hKmcrcip5K3MqTSxpWzZdPWEqaCtyKl8rcyp2LGlbMV09bCpmK2MqYitkKkMsaVs0XT1sKmcrYyp5K2QqTSxpWzddPWwqaCtjKl8rZCp2LGlbMl09cCpmK20qYit1KkMsaVs1XT1wKmcrbSp5K3UqTSxpWzhdPXAqaCttKl8rdSp2LHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7Y29uc3QgZT10aGlzLmVsZW1lbnRzO3JldHVybiBlWzBdKj10LGVbM10qPXQsZVs2XSo9dCxlWzFdKj10LGVbNF0qPXQsZVs3XSo9dCxlWzJdKj10LGVbNV0qPXQsZVs4XSo9dCx0aGlzfWRldGVybWluYW50KCl7Y29uc3QgdD10aGlzLmVsZW1lbnRzLGU9dFswXSxuPXRbMV0sbz10WzJdLGk9dFszXSxhPXRbNF0scj10WzVdLHM9dFs2XSxsPXRbN10sYz10WzhdO3JldHVybiBlKmEqYy1lKnIqbC1uKmkqYytuKnIqcytvKmkqbC1vKmEqc31pbnZlcnQoKXtjb25zdCB0PXRoaXMuZWxlbWVudHMsZT10WzBdLG49dFsxXSxvPXRbMl0saT10WzNdLGE9dFs0XSxyPXRbNV0scz10WzZdLGw9dFs3XSxjPXRbOF0sZD1jKmEtcipsLHA9cipzLWMqaSxtPWwqaS1hKnMsdT1lKmQrbipwK28qbTtpZigwPT09dSlyZXR1cm4gdGhpcy5zZXQoMCwwLDAsMCwwLDAsMCwwLDApO2NvbnN0IGY9MS91O3JldHVybiB0WzBdPWQqZix0WzFdPShvKmwtYypuKSpmLHRbMl09KHIqbi1vKmEpKmYsdFszXT1wKmYsdFs0XT0oYyplLW8qcykqZix0WzVdPShvKmktciplKSpmLHRbNl09bSpmLHRbN109KG4qcy1sKmUpKmYsdFs4XT0oYSplLW4qaSkqZix0aGlzfXRyYW5zcG9zZSgpe2xldCB0O2NvbnN0IGU9dGhpcy5lbGVtZW50cztyZXR1cm4gdD1lWzFdLGVbMV09ZVszXSxlWzNdPXQsdD1lWzJdLGVbMl09ZVs2XSxlWzZdPXQsdD1lWzVdLGVbNV09ZVs3XSxlWzddPXQsdGhpc31nZXROb3JtYWxNYXRyaXgodCl7cmV0dXJuIHRoaXMuc2V0RnJvbU1hdHJpeDQodCkuY29weSh0aGlzKS5pbnZlcnQoKS50cmFuc3Bvc2UoKX10cmFuc3Bvc2VJbnRvQXJyYXkodCl7Y29uc3QgZT10aGlzLmVsZW1lbnRzO3JldHVybiB0WzBdPWVbMF0sdFsxXT1lWzNdLHRbMl09ZVs2XSx0WzNdPWVbMV0sdFs0XT1lWzRdLHRbNV09ZVs3XSx0WzZdPWVbMl0sdFs3XT1lWzVdLHRbOF09ZVs4XSx0aGlzfXNldFV2VHJhbnNmb3JtKHQsZSxuLG8saSxhLHIpe2NvbnN0IHM9TWF0aC5jb3MoaSksbD1NYXRoLnNpbihpKTtyZXR1cm4gdGhpcy5zZXQobipzLG4qbCwtbioocyphK2wqcikrYSt0LC1vKmwsbypzLC1vKigtbCphK3MqcikrcitlLDAsMCwxKSx0aGlzfXNjYWxlKHQsZSl7Y29uc3Qgbj10aGlzLmVsZW1lbnRzO3JldHVybiBuWzBdKj10LG5bM10qPXQsbls2XSo9dCxuWzFdKj1lLG5bNF0qPWUsbls3XSo9ZSx0aGlzfXJvdGF0ZSh0KXtjb25zdCBlPU1hdGguY29zKHQpLG49TWF0aC5zaW4odCksbz10aGlzLmVsZW1lbnRzLGk9b1swXSxhPW9bM10scj1vWzZdLHM9b1sxXSxsPW9bNF0sYz1vWzddO3JldHVybiBvWzBdPWUqaStuKnMsb1szXT1lKmErbipsLG9bNl09ZSpyK24qYyxvWzFdPS1uKmkrZSpzLG9bNF09LW4qYStlKmwsb1s3XT0tbipyK2UqYyx0aGlzfXRyYW5zbGF0ZSh0LGUpe2NvbnN0IG49dGhpcy5lbGVtZW50cztyZXR1cm4gblswXSs9dCpuWzJdLG5bM10rPXQqbls1XSxuWzZdKz10Km5bOF0sblsxXSs9ZSpuWzJdLG5bNF0rPWUqbls1XSxuWzddKz1lKm5bOF0sdGhpc31lcXVhbHModCl7Y29uc3QgZT10aGlzLmVsZW1lbnRzLG49dC5lbGVtZW50cztmb3IobGV0IHQ9MDt0PDk7dCsrKWlmKGVbdF0hPT1uW3RdKXJldHVybiExO3JldHVybiEwfWZyb21BcnJheSh0LGU9MCl7Zm9yKGxldCBuPTA7bjw5O24rKyl0aGlzLmVsZW1lbnRzW25dPXRbbitlXTtyZXR1cm4gdGhpc310b0FycmF5KHQ9W10sZT0wKXtjb25zdCBuPXRoaXMuZWxlbWVudHM7cmV0dXJuIHRbZV09blswXSx0W2UrMV09blsxXSx0W2UrMl09blsyXSx0W2UrM109blszXSx0W2UrNF09bls0XSx0W2UrNV09bls1XSx0W2UrNl09bls2XSx0W2UrN109bls3XSx0W2UrOF09bls4XSx0fX1sZXQgR2l0O2NvbnN0IFlpdD17Z2V0RGF0YVVSTDpmdW5jdGlvbih0KXtpZigvXmRhdGE6L2kudGVzdCh0LnNyYykpcmV0dXJuIHQuc3JjO2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgSFRNTENhbnZhc0VsZW1lbnQpcmV0dXJuIHQuc3JjO2xldCBlO2lmKHQgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudCllPXQ7ZWxzZXt2b2lkIDA9PT1HaXQmJihHaXQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiY2FudmFzIikpLEdpdC53aWR0aD10LndpZHRoLEdpdC5oZWlnaHQ9dC5oZWlnaHQ7Y29uc3Qgbj1HaXQuZ2V0Q29udGV4dCgiMmQiKTt0IGluc3RhbmNlb2YgSW1hZ2VEYXRhP24ucHV0SW1hZ2VEYXRhKHQsMCwwKTpuLmRyYXdJbWFnZSh0LDAsMCx0LndpZHRoLHQuaGVpZ2h0KSxlPUdpdH1yZXR1cm4gZS53aWR0aD4yMDQ4fHxlLmhlaWdodD4yMDQ4P2UudG9EYXRhVVJMKCJpbWFnZS9qcGVnIiwuNik6ZS50b0RhdGFVUkwoImltYWdlL3BuZyIpfX07bGV0IHFpdD0wO2Z1bmN0aW9uIFppdCh0PVppdC5ERUZBVUxUX0lNQUdFLGU9Wml0LkRFRkFVTFRfTUFQUElORyxuPTEwMDEsbz0xMDAxLGk9MTAwNixhPTEwMDgscj0xMDIzLHM9MTAwOSxsPTEsYz0zZTMpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpZCIse3ZhbHVlOnFpdCsrfSksdGhpcy51dWlkPWppdC5nZW5lcmF0ZVVVSUQoKSx0aGlzLm5hbWU9IiIsdGhpcy5pbWFnZT10LHRoaXMubWlwbWFwcz1bXSx0aGlzLm1hcHBpbmc9ZSx0aGlzLndyYXBTPW4sdGhpcy53cmFwVD1vLHRoaXMubWFnRmlsdGVyPWksdGhpcy5taW5GaWx0ZXI9YSx0aGlzLmFuaXNvdHJvcHk9bCx0aGlzLmZvcm1hdD1yLHRoaXMuaW50ZXJuYWxGb3JtYXQ9bnVsbCx0aGlzLnR5cGU9cyx0aGlzLm9mZnNldD1uZXcgVWl0KDAsMCksdGhpcy5yZXBlYXQ9bmV3IFVpdCgxLDEpLHRoaXMuY2VudGVyPW5ldyBVaXQoMCwwKSx0aGlzLnJvdGF0aW9uPTAsdGhpcy5tYXRyaXhBdXRvVXBkYXRlPSEwLHRoaXMubWF0cml4PW5ldyBXaXQsdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITAsdGhpcy5wcmVtdWx0aXBseUFscGhhPSExLHRoaXMuZmxpcFk9ITAsdGhpcy51bnBhY2tBbGlnbm1lbnQ9NCx0aGlzLmVuY29kaW5nPWMsdGhpcy52ZXJzaW9uPTAsdGhpcy5vblVwZGF0ZT1udWxsfWZ1bmN0aW9uIFhpdCh0KXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIEhUTUxJbWFnZUVsZW1lbnQmJnQgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50fHwidW5kZWZpbmVkIiE9dHlwZW9mIEhUTUxDYW52YXNFbGVtZW50JiZ0IGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnR8fCJ1bmRlZmluZWQiIT10eXBlb2YgSW1hZ2VCaXRtYXAmJnQgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcD9ZaXQuZ2V0RGF0YVVSTCh0KTp0LmRhdGE/e2RhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodC5kYXRhKSx3aWR0aDp0LndpZHRoLGhlaWdodDp0LmhlaWdodCx0eXBlOnQuZGF0YS5jb25zdHJ1Y3Rvci5uYW1lfTooY29uc29sZS53YXJuKCJUSFJFRS5UZXh0dXJlOiBVbmFibGUgdG8gc2VyaWFsaXplIFRleHR1cmUuIikse30pfVppdC5ERUZBVUxUX0lNQUdFPXZvaWQgMCxaaXQuREVGQVVMVF9NQVBQSU5HPTMwMCxaaXQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShMaXQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6Wml0LGlzVGV4dHVyZTohMCx1cGRhdGVNYXRyaXg6ZnVuY3Rpb24oKXt0aGlzLm1hdHJpeC5zZXRVdlRyYW5zZm9ybSh0aGlzLm9mZnNldC54LHRoaXMub2Zmc2V0LnksdGhpcy5yZXBlYXQueCx0aGlzLnJlcGVhdC55LHRoaXMucm90YXRpb24sdGhpcy5jZW50ZXIueCx0aGlzLmNlbnRlci55KX0sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9LGNvcHk6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubmFtZT10Lm5hbWUsdGhpcy5pbWFnZT10LmltYWdlLHRoaXMubWlwbWFwcz10Lm1pcG1hcHMuc2xpY2UoMCksdGhpcy5tYXBwaW5nPXQubWFwcGluZyx0aGlzLndyYXBTPXQud3JhcFMsdGhpcy53cmFwVD10LndyYXBULHRoaXMubWFnRmlsdGVyPXQubWFnRmlsdGVyLHRoaXMubWluRmlsdGVyPXQubWluRmlsdGVyLHRoaXMuYW5pc290cm9weT10LmFuaXNvdHJvcHksdGhpcy5mb3JtYXQ9dC5mb3JtYXQsdGhpcy5pbnRlcm5hbEZvcm1hdD10LmludGVybmFsRm9ybWF0LHRoaXMudHlwZT10LnR5cGUsdGhpcy5vZmZzZXQuY29weSh0Lm9mZnNldCksdGhpcy5yZXBlYXQuY29weSh0LnJlcGVhdCksdGhpcy5jZW50ZXIuY29weSh0LmNlbnRlciksdGhpcy5yb3RhdGlvbj10LnJvdGF0aW9uLHRoaXMubWF0cml4QXV0b1VwZGF0ZT10Lm1hdHJpeEF1dG9VcGRhdGUsdGhpcy5tYXRyaXguY29weSh0Lm1hdHJpeCksdGhpcy5nZW5lcmF0ZU1pcG1hcHM9dC5nZW5lcmF0ZU1pcG1hcHMsdGhpcy5wcmVtdWx0aXBseUFscGhhPXQucHJlbXVsdGlwbHlBbHBoYSx0aGlzLmZsaXBZPXQuZmxpcFksdGhpcy51bnBhY2tBbGlnbm1lbnQ9dC51bnBhY2tBbGlnbm1lbnQsdGhpcy5lbmNvZGluZz10LmVuY29kaW5nLHRoaXN9LHRvSlNPTjpmdW5jdGlvbih0KXtjb25zdCBlPXZvaWQgMD09PXR8fCJzdHJpbmciPT10eXBlb2YgdDtpZighZSYmdm9pZCAwIT09dC50ZXh0dXJlc1t0aGlzLnV1aWRdKXJldHVybiB0LnRleHR1cmVzW3RoaXMudXVpZF07Y29uc3Qgbj17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6IlRleHR1cmUiLGdlbmVyYXRvcjoiVGV4dHVyZS50b0pTT04ifSx1dWlkOnRoaXMudXVpZCxuYW1lOnRoaXMubmFtZSxtYXBwaW5nOnRoaXMubWFwcGluZyxyZXBlYXQ6W3RoaXMucmVwZWF0LngsdGhpcy5yZXBlYXQueV0sb2Zmc2V0Olt0aGlzLm9mZnNldC54LHRoaXMub2Zmc2V0LnldLGNlbnRlcjpbdGhpcy5jZW50ZXIueCx0aGlzLmNlbnRlci55XSxyb3RhdGlvbjp0aGlzLnJvdGF0aW9uLHdyYXA6W3RoaXMud3JhcFMsdGhpcy53cmFwVF0sZm9ybWF0OnRoaXMuZm9ybWF0LHR5cGU6dGhpcy50eXBlLGVuY29kaW5nOnRoaXMuZW5jb2RpbmcsbWluRmlsdGVyOnRoaXMubWluRmlsdGVyLG1hZ0ZpbHRlcjp0aGlzLm1hZ0ZpbHRlcixhbmlzb3Ryb3B5OnRoaXMuYW5pc290cm9weSxmbGlwWTp0aGlzLmZsaXBZLHByZW11bHRpcGx5QWxwaGE6dGhpcy5wcmVtdWx0aXBseUFscGhhLHVucGFja0FsaWdubWVudDp0aGlzLnVucGFja0FsaWdubWVudH07aWYodm9pZCAwIT09dGhpcy5pbWFnZSl7Y29uc3Qgbz10aGlzLmltYWdlO2lmKHZvaWQgMD09PW8udXVpZCYmKG8udXVpZD1qaXQuZ2VuZXJhdGVVVUlEKCkpLCFlJiZ2b2lkIDA9PT10LmltYWdlc1tvLnV1aWRdKXtsZXQgZTtpZihBcnJheS5pc0FycmF5KG8pKXtlPVtdO2ZvcihsZXQgdD0wLG49by5sZW5ndGg7dDxuO3QrKyllLnB1c2goWGl0KG9bdF0uaXNEYXRhVGV4dHVyZT9vW3RdLmltYWdlOm9bdF0pKX1lbHNlIGU9WGl0KG8pO3QuaW1hZ2VzW28udXVpZF09e3V1aWQ6by51dWlkLHVybDplfX1uLmltYWdlPW8udXVpZH1yZXR1cm4gZXx8KHQudGV4dHVyZXNbdGhpcy51dWlkXT1uKSxufSxkaXNwb3NlOmZ1bmN0aW9uKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfSx0cmFuc2Zvcm1VdjpmdW5jdGlvbih0KXtpZigzMDAhPT10aGlzLm1hcHBpbmcpcmV0dXJuIHQ7aWYodC5hcHBseU1hdHJpeDModGhpcy5tYXRyaXgpLHQueDwwfHx0Lng+MSlzd2l0Y2godGhpcy53cmFwUyl7Y2FzZSB1aXQ6dC54PXQueC1NYXRoLmZsb29yKHQueCk7YnJlYWs7Y2FzZSBmaXQ6dC54PXQueDwwPzA6MTticmVhaztjYXNlIGdpdDp0Lng9MT09PU1hdGguYWJzKE1hdGguZmxvb3IodC54KSUyKT9NYXRoLmNlaWwodC54KS10Lng6dC54LU1hdGguZmxvb3IodC54KX1pZih0Lnk8MHx8dC55PjEpc3dpdGNoKHRoaXMud3JhcFQpe2Nhc2UgdWl0OnQueT10LnktTWF0aC5mbG9vcih0LnkpO2JyZWFrO2Nhc2UgZml0OnQueT10Lnk8MD8wOjE7YnJlYWs7Y2FzZSBnaXQ6dC55PTE9PT1NYXRoLmFicyhNYXRoLmZsb29yKHQueSklMik/TWF0aC5jZWlsKHQueSktdC55OnQueS1NYXRoLmZsb29yKHQueSl9cmV0dXJuIHRoaXMuZmxpcFkmJih0Lnk9MS10LnkpLHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFppdC5wcm90b3R5cGUsIm5lZWRzVXBkYXRlIix7c2V0OmZ1bmN0aW9uKHQpeyEwPT09dCYmdGhpcy52ZXJzaW9uKyt9fSk7Y2xhc3MgS2l0e2NvbnN0cnVjdG9yKHQ9MCxlPTAsbj0wLG89MSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlzVmVjdG9yNCIse3ZhbHVlOiEwfSksdGhpcy54PXQsdGhpcy55PWUsdGhpcy56PW4sdGhpcy53PW99Z2V0IHdpZHRoKCl7cmV0dXJuIHRoaXMuen1zZXQgd2lkdGgodCl7dGhpcy56PXR9Z2V0IGhlaWdodCgpe3JldHVybiB0aGlzLnd9c2V0IGhlaWdodCh0KXt0aGlzLnc9dH1zZXQodCxlLG4sbyl7cmV0dXJuIHRoaXMueD10LHRoaXMueT1lLHRoaXMuej1uLHRoaXMudz1vLHRoaXN9c2V0U2NhbGFyKHQpe3JldHVybiB0aGlzLng9dCx0aGlzLnk9dCx0aGlzLno9dCx0aGlzLnc9dCx0aGlzfXNldFgodCl7cmV0dXJuIHRoaXMueD10LHRoaXN9c2V0WSh0KXtyZXR1cm4gdGhpcy55PXQsdGhpc31zZXRaKHQpe3JldHVybiB0aGlzLno9dCx0aGlzfXNldFcodCl7cmV0dXJuIHRoaXMudz10LHRoaXN9c2V0Q29tcG9uZW50KHQsZSl7c3dpdGNoKHQpe2Nhc2UgMDp0aGlzLng9ZTticmVhaztjYXNlIDE6dGhpcy55PWU7YnJlYWs7Y2FzZSAyOnRoaXMuej1lO2JyZWFrO2Nhc2UgMzp0aGlzLnc9ZTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK3QpfXJldHVybiB0aGlzfWdldENvbXBvbmVudCh0KXtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiB0aGlzLng7Y2FzZSAxOnJldHVybiB0aGlzLnk7Y2FzZSAyOnJldHVybiB0aGlzLno7Y2FzZSAzOnJldHVybiB0aGlzLnc7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX19Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy54LHRoaXMueSx0aGlzLnosdGhpcy53KX1jb3B5KHQpe3JldHVybiB0aGlzLng9dC54LHRoaXMueT10LnksdGhpcy56PXQueix0aGlzLnc9dm9pZCAwIT09dC53P3QudzoxLHRoaXN9YWRkKHQsZSl7cmV0dXJuIHZvaWQgMCE9PWU/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogLmFkZCgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLmFkZFZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuYWRkVmVjdG9ycyh0LGUpKToodGhpcy54Kz10LngsdGhpcy55Kz10LnksdGhpcy56Kz10LnosdGhpcy53Kz10LncsdGhpcyl9YWRkU2NhbGFyKHQpe3JldHVybiB0aGlzLngrPXQsdGhpcy55Kz10LHRoaXMueis9dCx0aGlzLncrPXQsdGhpc31hZGRWZWN0b3JzKHQsZSl7cmV0dXJuIHRoaXMueD10LngrZS54LHRoaXMueT10LnkrZS55LHRoaXMuej10LnorZS56LHRoaXMudz10LncrZS53LHRoaXN9YWRkU2NhbGVkVmVjdG9yKHQsZSl7cmV0dXJuIHRoaXMueCs9dC54KmUsdGhpcy55Kz10LnkqZSx0aGlzLnorPXQueiplLHRoaXMudys9dC53KmUsdGhpc31zdWIodCxlKXtyZXR1cm4gdm9pZCAwIT09ZT8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3I0OiAuc3ViKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuc3ViVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5zdWJWZWN0b3JzKHQsZSkpOih0aGlzLngtPXQueCx0aGlzLnktPXQueSx0aGlzLnotPXQueix0aGlzLnctPXQudyx0aGlzKX1zdWJTY2FsYXIodCl7cmV0dXJuIHRoaXMueC09dCx0aGlzLnktPXQsdGhpcy56LT10LHRoaXMudy09dCx0aGlzfXN1YlZlY3RvcnModCxlKXtyZXR1cm4gdGhpcy54PXQueC1lLngsdGhpcy55PXQueS1lLnksdGhpcy56PXQuei1lLnosdGhpcy53PXQudy1lLncsdGhpc31tdWx0aXBseSh0KXtyZXR1cm4gdGhpcy54Kj10LngsdGhpcy55Kj10LnksdGhpcy56Kj10LnosdGhpcy53Kj10LncsdGhpc31tdWx0aXBseVNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kj10LHRoaXMueSo9dCx0aGlzLnoqPXQsdGhpcy53Kj10LHRoaXN9YXBwbHlNYXRyaXg0KHQpe2NvbnN0IGU9dGhpcy54LG49dGhpcy55LG89dGhpcy56LGk9dGhpcy53LGE9dC5lbGVtZW50cztyZXR1cm4gdGhpcy54PWFbMF0qZSthWzRdKm4rYVs4XSpvK2FbMTJdKmksdGhpcy55PWFbMV0qZSthWzVdKm4rYVs5XSpvK2FbMTNdKmksdGhpcy56PWFbMl0qZSthWzZdKm4rYVsxMF0qbythWzE0XSppLHRoaXMudz1hWzNdKmUrYVs3XSpuK2FbMTFdKm8rYVsxNV0qaSx0aGlzfWRpdmlkZVNjYWxhcih0KXtyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhcigxL3QpfXNldEF4aXNBbmdsZUZyb21RdWF0ZXJuaW9uKHQpe3RoaXMudz0yKk1hdGguYWNvcyh0LncpO2NvbnN0IGU9TWF0aC5zcXJ0KDEtdC53KnQudyk7cmV0dXJuIGU8MWUtND8odGhpcy54PTEsdGhpcy55PTAsdGhpcy56PTApOih0aGlzLng9dC54L2UsdGhpcy55PXQueS9lLHRoaXMuej10LnovZSksdGhpc31zZXRBeGlzQW5nbGVGcm9tUm90YXRpb25NYXRyaXgodCl7bGV0IGUsbixvLGk7Y29uc3QgYT0uMDEscj0uMSxzPXQuZWxlbWVudHMsbD1zWzBdLGM9c1s0XSxkPXNbOF0scD1zWzFdLG09c1s1XSx1PXNbOV0sZj1zWzJdLGc9c1s2XSxoPXNbMTBdO2lmKE1hdGguYWJzKGMtcCk8YSYmTWF0aC5hYnMoZC1mKTxhJiZNYXRoLmFicyh1LWcpPGEpe2lmKE1hdGguYWJzKGMrcCk8ciYmTWF0aC5hYnMoZCtmKTxyJiZNYXRoLmFicyh1K2cpPHImJk1hdGguYWJzKGwrbStoLTMpPHIpcmV0dXJuIHRoaXMuc2V0KDEsMCwwLDApLHRoaXM7ZT1NYXRoLlBJO2NvbnN0IHQ9KGwrMSkvMixzPShtKzEpLzIsYj0oaCsxKS8yLHk9KGMrcCkvNCxfPShkK2YpLzQsQz0odStnKS80O3JldHVybiB0PnMmJnQ+Yj90PGE/KG49MCxvPS43MDcxMDY3ODEsaT0uNzA3MTA2NzgxKToobj1NYXRoLnNxcnQodCksbz15L24saT1fL24pOnM+Yj9zPGE/KG49LjcwNzEwNjc4MSxvPTAsaT0uNzA3MTA2NzgxKToobz1NYXRoLnNxcnQocyksbj15L28saT1DL28pOmI8YT8obj0uNzA3MTA2NzgxLG89LjcwNzEwNjc4MSxpPTApOihpPU1hdGguc3FydChiKSxuPV8vaSxvPUMvaSksdGhpcy5zZXQobixvLGksZSksdGhpc31sZXQgYj1NYXRoLnNxcnQoKGctdSkqKGctdSkrKGQtZikqKGQtZikrKHAtYykqKHAtYykpO3JldHVybiBNYXRoLmFicyhiKTwuMDAxJiYoYj0xKSx0aGlzLng9KGctdSkvYix0aGlzLnk9KGQtZikvYix0aGlzLno9KHAtYykvYix0aGlzLnc9TWF0aC5hY29zKChsK20raC0xKS8yKSx0aGlzfW1pbih0KXtyZXR1cm4gdGhpcy54PU1hdGgubWluKHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1pbih0aGlzLnksdC55KSx0aGlzLno9TWF0aC5taW4odGhpcy56LHQueiksdGhpcy53PU1hdGgubWluKHRoaXMudyx0LncpLHRoaXN9bWF4KHQpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodGhpcy54LHQueCksdGhpcy55PU1hdGgubWF4KHRoaXMueSx0LnkpLHRoaXMuej1NYXRoLm1heCh0aGlzLnosdC56KSx0aGlzLnc9TWF0aC5tYXgodGhpcy53LHQudyksdGhpc31jbGFtcCh0LGUpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodC54LE1hdGgubWluKGUueCx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodC55LE1hdGgubWluKGUueSx0aGlzLnkpKSx0aGlzLno9TWF0aC5tYXgodC56LE1hdGgubWluKGUueix0aGlzLnopKSx0aGlzLnc9TWF0aC5tYXgodC53LE1hdGgubWluKGUudyx0aGlzLncpKSx0aGlzfWNsYW1wU2NhbGFyKHQsZSl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy54KSksdGhpcy55PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLnkpKSx0aGlzLno9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMueikpLHRoaXMudz1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy53KSksdGhpc31jbGFtcExlbmd0aCh0LGUpe2NvbnN0IG49dGhpcy5sZW5ndGgoKTtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIobnx8MSkubXVsdGlwbHlTY2FsYXIoTWF0aC5tYXgodCxNYXRoLm1pbihlLG4pKSl9Zmxvb3IoKXtyZXR1cm4gdGhpcy54PU1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9TWF0aC5mbG9vcih0aGlzLnkpLHRoaXMuej1NYXRoLmZsb29yKHRoaXMueiksdGhpcy53PU1hdGguZmxvb3IodGhpcy53KSx0aGlzfWNlaWwoKXtyZXR1cm4gdGhpcy54PU1hdGguY2VpbCh0aGlzLngpLHRoaXMueT1NYXRoLmNlaWwodGhpcy55KSx0aGlzLno9TWF0aC5jZWlsKHRoaXMueiksdGhpcy53PU1hdGguY2VpbCh0aGlzLncpLHRoaXN9cm91bmQoKXtyZXR1cm4gdGhpcy54PU1hdGgucm91bmQodGhpcy54KSx0aGlzLnk9TWF0aC5yb3VuZCh0aGlzLnkpLHRoaXMuej1NYXRoLnJvdW5kKHRoaXMueiksdGhpcy53PU1hdGgucm91bmQodGhpcy53KSx0aGlzfXJvdW5kVG9aZXJvKCl7cmV0dXJuIHRoaXMueD10aGlzLng8MD9NYXRoLmNlaWwodGhpcy54KTpNYXRoLmZsb29yKHRoaXMueCksdGhpcy55PXRoaXMueTwwP01hdGguY2VpbCh0aGlzLnkpOk1hdGguZmxvb3IodGhpcy55KSx0aGlzLno9dGhpcy56PDA/TWF0aC5jZWlsKHRoaXMueik6TWF0aC5mbG9vcih0aGlzLnopLHRoaXMudz10aGlzLnc8MD9NYXRoLmNlaWwodGhpcy53KTpNYXRoLmZsb29yKHRoaXMudyksdGhpc31uZWdhdGUoKXtyZXR1cm4gdGhpcy54PS10aGlzLngsdGhpcy55PS10aGlzLnksdGhpcy56PS10aGlzLnosdGhpcy53PS10aGlzLncsdGhpc31kb3QodCl7cmV0dXJuIHRoaXMueCp0LngrdGhpcy55KnQueSt0aGlzLnoqdC56K3RoaXMudyp0Lnd9bGVuZ3RoU3EoKXtyZXR1cm4gdGhpcy54KnRoaXMueCt0aGlzLnkqdGhpcy55K3RoaXMueip0aGlzLnordGhpcy53KnRoaXMud31sZW5ndGgoKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSt0aGlzLnoqdGhpcy56K3RoaXMudyp0aGlzLncpfW1hbmhhdHRhbkxlbmd0aCgpe3JldHVybiBNYXRoLmFicyh0aGlzLngpK01hdGguYWJzKHRoaXMueSkrTWF0aC5hYnModGhpcy56KStNYXRoLmFicyh0aGlzLncpfW5vcm1hbGl6ZSgpe3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcih0aGlzLmxlbmd0aCgpfHwxKX1zZXRMZW5ndGgodCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCkubXVsdGlwbHlTY2FsYXIodCl9bGVycCh0LGUpe3JldHVybiB0aGlzLngrPSh0LngtdGhpcy54KSplLHRoaXMueSs9KHQueS10aGlzLnkpKmUsdGhpcy56Kz0odC56LXRoaXMueikqZSx0aGlzLncrPSh0LnctdGhpcy53KSplLHRoaXN9bGVycFZlY3RvcnModCxlLG4pe3JldHVybiB0aGlzLng9dC54KyhlLngtdC54KSpuLHRoaXMueT10LnkrKGUueS10LnkpKm4sdGhpcy56PXQueisoZS56LXQueikqbix0aGlzLnc9dC53KyhlLnctdC53KSpuLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lng9PT10aGlzLngmJnQueT09PXRoaXMueSYmdC56PT09dGhpcy56JiZ0Lnc9PT10aGlzLnd9ZnJvbUFycmF5KHQsZT0wKXtyZXR1cm4gdGhpcy54PXRbZV0sdGhpcy55PXRbZSsxXSx0aGlzLno9dFtlKzJdLHRoaXMudz10W2UrM10sdGhpc310b0FycmF5KHQ9W10sZT0wKXtyZXR1cm4gdFtlXT10aGlzLngsdFtlKzFdPXRoaXMueSx0W2UrMl09dGhpcy56LHRbZSszXT10aGlzLncsdH1mcm9tQnVmZmVyQXR0cmlidXRlKHQsZSxuKXtyZXR1cm4gdm9pZCAwIT09biYmY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3I0OiBvZmZzZXQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy54PXQuZ2V0WChlKSx0aGlzLnk9dC5nZXRZKGUpLHRoaXMuej10LmdldFooZSksdGhpcy53PXQuZ2V0VyhlKSx0aGlzfXJhbmRvbSgpe3JldHVybiB0aGlzLng9TWF0aC5yYW5kb20oKSx0aGlzLnk9TWF0aC5yYW5kb20oKSx0aGlzLno9TWF0aC5yYW5kb20oKSx0aGlzLnc9TWF0aC5yYW5kb20oKSx0aGlzfX1jbGFzcyBKaXQgZXh0ZW5kcyBMaXR7Y29uc3RydWN0b3IodCxlLG4pe3N1cGVyKCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlzV2ViR0xSZW5kZXJUYXJnZXQiLHt2YWx1ZTohMH0pLHRoaXMud2lkdGg9dCx0aGlzLmhlaWdodD1lLHRoaXMuc2Npc3Nvcj1uZXcgS2l0KDAsMCx0LGUpLHRoaXMuc2Npc3NvclRlc3Q9ITEsdGhpcy52aWV3cG9ydD1uZXcgS2l0KDAsMCx0LGUpLHRoaXMudGV4dHVyZT1uZXcgWml0KHZvaWQgMCwobj1ufHx7fSkubWFwcGluZyxuLndyYXBTLG4ud3JhcFQsbi5tYWdGaWx0ZXIsbi5taW5GaWx0ZXIsbi5mb3JtYXQsbi50eXBlLG4uYW5pc290cm9weSxuLmVuY29kaW5nKSx0aGlzLnRleHR1cmUuaW1hZ2U9e30sdGhpcy50ZXh0dXJlLmltYWdlLndpZHRoPXQsdGhpcy50ZXh0dXJlLmltYWdlLmhlaWdodD1lLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9dm9pZCAwIT09bi5nZW5lcmF0ZU1pcG1hcHMmJm4uZ2VuZXJhdGVNaXBtYXBzLHRoaXMudGV4dHVyZS5taW5GaWx0ZXI9dm9pZCAwIT09bi5taW5GaWx0ZXI/bi5taW5GaWx0ZXI6Yml0LHRoaXMuZGVwdGhCdWZmZXI9dm9pZCAwPT09bi5kZXB0aEJ1ZmZlcnx8bi5kZXB0aEJ1ZmZlcix0aGlzLnN0ZW5jaWxCdWZmZXI9dm9pZCAwIT09bi5zdGVuY2lsQnVmZmVyJiZuLnN0ZW5jaWxCdWZmZXIsdGhpcy5kZXB0aFRleHR1cmU9dm9pZCAwIT09bi5kZXB0aFRleHR1cmU/bi5kZXB0aFRleHR1cmU6bnVsbH1zZXRTaXplKHQsZSl7dGhpcy53aWR0aD09PXQmJnRoaXMuaGVpZ2h0PT09ZXx8KHRoaXMud2lkdGg9dCx0aGlzLmhlaWdodD1lLHRoaXMudGV4dHVyZS5pbWFnZS53aWR0aD10LHRoaXMudGV4dHVyZS5pbWFnZS5oZWlnaHQ9ZSx0aGlzLmRpc3Bvc2UoKSksdGhpcy52aWV3cG9ydC5zZXQoMCwwLHQsZSksdGhpcy5zY2lzc29yLnNldCgwLDAsdCxlKX1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLndpZHRoPXQud2lkdGgsdGhpcy5oZWlnaHQ9dC5oZWlnaHQsdGhpcy52aWV3cG9ydC5jb3B5KHQudmlld3BvcnQpLHRoaXMudGV4dHVyZT10LnRleHR1cmUuY2xvbmUoKSx0aGlzLmRlcHRoQnVmZmVyPXQuZGVwdGhCdWZmZXIsdGhpcy5zdGVuY2lsQnVmZmVyPXQuc3RlbmNpbEJ1ZmZlcix0aGlzLmRlcHRoVGV4dHVyZT10LmRlcHRoVGV4dHVyZSx0aGlzfWRpc3Bvc2UoKXt0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc3Bvc2UifSl9fWNsYXNzIFFpdHtjb25zdHJ1Y3Rvcih0PTAsZT0wLG49MCxvPTEpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpc1F1YXRlcm5pb24iLHt2YWx1ZTohMH0pLHRoaXMuX3g9dCx0aGlzLl95PWUsdGhpcy5fej1uLHRoaXMuX3c9b31zdGF0aWMgc2xlcnAodCxlLG4sbyl7cmV0dXJuIG4uY29weSh0KS5zbGVycChlLG8pfXN0YXRpYyBzbGVycEZsYXQodCxlLG4sbyxpLGEscil7bGV0IHM9bltvKzBdLGw9bltvKzFdLGM9bltvKzJdLGQ9bltvKzNdO2NvbnN0IHA9aVthKzBdLG09aVthKzFdLHU9aVthKzJdLGY9aVthKzNdO2lmKGQhPT1mfHxzIT09cHx8bCE9PW18fGMhPT11KXtsZXQgdD0xLXI7Y29uc3QgZT1zKnArbCptK2MqdStkKmYsbj1lPj0wPzE6LTEsbz0xLWUqZTtpZihvPk51bWJlci5FUFNJTE9OKXtjb25zdCBpPU1hdGguc3FydChvKSxhPU1hdGguYXRhbjIoaSxlKm4pO3Q9TWF0aC5zaW4odCphKS9pLHI9TWF0aC5zaW4ociphKS9pfWNvbnN0IGk9cipuO2lmKHM9cyp0K3AqaSxsPWwqdCttKmksYz1jKnQrdSppLGQ9ZCp0K2YqaSx0PT09MS1yKXtjb25zdCB0PTEvTWF0aC5zcXJ0KHMqcytsKmwrYypjK2QqZCk7cyo9dCxsKj10LGMqPXQsZCo9dH19dFtlXT1zLHRbZSsxXT1sLHRbZSsyXT1jLHRbZSszXT1kfXN0YXRpYyBtdWx0aXBseVF1YXRlcm5pb25zRmxhdCh0LGUsbixvLGksYSl7Y29uc3Qgcj1uW29dLHM9bltvKzFdLGw9bltvKzJdLGM9bltvKzNdLGQ9aVthXSxwPWlbYSsxXSxtPWlbYSsyXSx1PWlbYSszXTtyZXR1cm4gdFtlXT1yKnUrYypkK3MqbS1sKnAsdFtlKzFdPXMqdStjKnArbCpkLXIqbSx0W2UrMl09bCp1K2MqbStyKnAtcypkLHRbZSszXT1jKnUtcipkLXMqcC1sKm0sdH1nZXQgeCgpe3JldHVybiB0aGlzLl94fXNldCB4KHQpe3RoaXMuX3g9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IHkoKXtyZXR1cm4gdGhpcy5feX1zZXQgeSh0KXt0aGlzLl95PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCB6KCl7cmV0dXJuIHRoaXMuX3p9c2V0IHoodCl7dGhpcy5fej10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgdygpe3JldHVybiB0aGlzLl93fXNldCB3KHQpe3RoaXMuX3c9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9c2V0KHQsZSxuLG8pe3JldHVybiB0aGlzLl94PXQsdGhpcy5feT1lLHRoaXMuX3o9bix0aGlzLl93PW8sdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5feCx0aGlzLl95LHRoaXMuX3osdGhpcy5fdyl9Y29weSh0KXtyZXR1cm4gdGhpcy5feD10LngsdGhpcy5feT10LnksdGhpcy5fej10LnosdGhpcy5fdz10LncsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbUV1bGVyKHQsZSl7aWYoIXR8fCF0LmlzRXVsZXIpdGhyb3cgbmV3IEVycm9yKCJUSFJFRS5RdWF0ZXJuaW9uOiAuc2V0RnJvbUV1bGVyKCkgbm93IGV4cGVjdHMgYW4gRXVsZXIgcm90YXRpb24gcmF0aGVyIHRoYW4gYSBWZWN0b3IzIGFuZCBvcmRlci4iKTtjb25zdCBuPXQuX3gsbz10Ll95LGk9dC5feixhPXQuX29yZGVyLHI9TWF0aC5jb3Mscz1NYXRoLnNpbixsPXIobi8yKSxjPXIoby8yKSxkPXIoaS8yKSxwPXMobi8yKSxtPXMoby8yKSx1PXMoaS8yKTtzd2l0Y2goYSl7Y2FzZSJYWVoiOnRoaXMuX3g9cCpjKmQrbCptKnUsdGhpcy5feT1sKm0qZC1wKmMqdSx0aGlzLl96PWwqYyp1K3AqbSpkLHRoaXMuX3c9bCpjKmQtcCptKnU7YnJlYWs7Y2FzZSJZWFoiOnRoaXMuX3g9cCpjKmQrbCptKnUsdGhpcy5feT1sKm0qZC1wKmMqdSx0aGlzLl96PWwqYyp1LXAqbSpkLHRoaXMuX3c9bCpjKmQrcCptKnU7YnJlYWs7Y2FzZSJaWFkiOnRoaXMuX3g9cCpjKmQtbCptKnUsdGhpcy5feT1sKm0qZCtwKmMqdSx0aGlzLl96PWwqYyp1K3AqbSpkLHRoaXMuX3c9bCpjKmQtcCptKnU7YnJlYWs7Y2FzZSJaWVgiOnRoaXMuX3g9cCpjKmQtbCptKnUsdGhpcy5feT1sKm0qZCtwKmMqdSx0aGlzLl96PWwqYyp1LXAqbSpkLHRoaXMuX3c9bCpjKmQrcCptKnU7YnJlYWs7Y2FzZSJZWlgiOnRoaXMuX3g9cCpjKmQrbCptKnUsdGhpcy5feT1sKm0qZCtwKmMqdSx0aGlzLl96PWwqYyp1LXAqbSpkLHRoaXMuX3c9bCpjKmQtcCptKnU7YnJlYWs7Y2FzZSJYWlkiOnRoaXMuX3g9cCpjKmQtbCptKnUsdGhpcy5feT1sKm0qZC1wKmMqdSx0aGlzLl96PWwqYyp1K3AqbSpkLHRoaXMuX3c9bCpjKmQrcCptKnU7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLndhcm4oIlRIUkVFLlF1YXRlcm5pb246IC5zZXRGcm9tRXVsZXIoKSBlbmNvdW50ZXJlZCBhbiB1bmtub3duIG9yZGVyOiAiK2EpfXJldHVybiExIT09ZSYmdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbUF4aXNBbmdsZSh0LGUpe2NvbnN0IG49ZS8yLG89TWF0aC5zaW4obik7cmV0dXJuIHRoaXMuX3g9dC54Km8sdGhpcy5feT10Lnkqbyx0aGlzLl96PXQueipvLHRoaXMuX3c9TWF0aC5jb3MobiksdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbVJvdGF0aW9uTWF0cml4KHQpe2NvbnN0IGU9dC5lbGVtZW50cyxuPWVbMF0sbz1lWzRdLGk9ZVs4XSxhPWVbMV0scj1lWzVdLHM9ZVs5XSxsPWVbMl0sYz1lWzZdLGQ9ZVsxMF0scD1uK3IrZDtpZihwPjApe2NvbnN0IHQ9LjUvTWF0aC5zcXJ0KHArMSk7dGhpcy5fdz0uMjUvdCx0aGlzLl94PShjLXMpKnQsdGhpcy5feT0oaS1sKSp0LHRoaXMuX3o9KGEtbykqdH1lbHNlIGlmKG4+ciYmbj5kKXtjb25zdCB0PTIqTWF0aC5zcXJ0KDErbi1yLWQpO3RoaXMuX3c9KGMtcykvdCx0aGlzLl94PS4yNSp0LHRoaXMuX3k9KG8rYSkvdCx0aGlzLl96PShpK2wpL3R9ZWxzZSBpZihyPmQpe2NvbnN0IHQ9MipNYXRoLnNxcnQoMStyLW4tZCk7dGhpcy5fdz0oaS1sKS90LHRoaXMuX3g9KG8rYSkvdCx0aGlzLl95PS4yNSp0LHRoaXMuX3o9KHMrYykvdH1lbHNle2NvbnN0IHQ9MipNYXRoLnNxcnQoMStkLW4tcik7dGhpcy5fdz0oYS1vKS90LHRoaXMuX3g9KGkrbCkvdCx0aGlzLl95PShzK2MpL3QsdGhpcy5fej0uMjUqdH1yZXR1cm4gdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbVVuaXRWZWN0b3JzKHQsZSl7bGV0IG49dC5kb3QoZSkrMTtyZXR1cm4gbjwxZS02PyhuPTAsTWF0aC5hYnModC54KT5NYXRoLmFicyh0LnopPyh0aGlzLl94PS10LnksdGhpcy5feT10LngsdGhpcy5fej0wLHRoaXMuX3c9bik6KHRoaXMuX3g9MCx0aGlzLl95PS10LnosdGhpcy5fej10LnksdGhpcy5fdz1uKSk6KHRoaXMuX3g9dC55KmUuei10LnoqZS55LHRoaXMuX3k9dC56KmUueC10LngqZS56LHRoaXMuX3o9dC54KmUueS10LnkqZS54LHRoaXMuX3c9biksdGhpcy5ub3JtYWxpemUoKX1hbmdsZVRvKHQpe3JldHVybiAyKk1hdGguYWNvcyhNYXRoLmFicyhqaXQuY2xhbXAodGhpcy5kb3QodCksLTEsMSkpKX1yb3RhdGVUb3dhcmRzKHQsZSl7Y29uc3Qgbj10aGlzLmFuZ2xlVG8odCk7aWYoMD09PW4pcmV0dXJuIHRoaXM7Y29uc3Qgbz1NYXRoLm1pbigxLGUvbik7cmV0dXJuIHRoaXMuc2xlcnAodCxvKSx0aGlzfWlkZW50aXR5KCl7cmV0dXJuIHRoaXMuc2V0KDAsMCwwLDEpfWludmVydCgpe3JldHVybiB0aGlzLmNvbmp1Z2F0ZSgpfWNvbmp1Z2F0ZSgpe3JldHVybiB0aGlzLl94Kj0tMSx0aGlzLl95Kj0tMSx0aGlzLl96Kj0tMSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31kb3QodCl7cmV0dXJuIHRoaXMuX3gqdC5feCt0aGlzLl95KnQuX3krdGhpcy5feip0Ll96K3RoaXMuX3cqdC5fd31sZW5ndGhTcSgpe3JldHVybiB0aGlzLl94KnRoaXMuX3grdGhpcy5feSp0aGlzLl95K3RoaXMuX3oqdGhpcy5feit0aGlzLl93KnRoaXMuX3d9bGVuZ3RoKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLl94KnRoaXMuX3grdGhpcy5feSp0aGlzLl95K3RoaXMuX3oqdGhpcy5feit0aGlzLl93KnRoaXMuX3cpfW5vcm1hbGl6ZSgpe2xldCB0PXRoaXMubGVuZ3RoKCk7cmV0dXJuIDA9PT10Pyh0aGlzLl94PTAsdGhpcy5feT0wLHRoaXMuX3o9MCx0aGlzLl93PTEpOih0PTEvdCx0aGlzLl94PXRoaXMuX3gqdCx0aGlzLl95PXRoaXMuX3kqdCx0aGlzLl96PXRoaXMuX3oqdCx0aGlzLl93PXRoaXMuX3cqdCksdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9bXVsdGlwbHkodCxlKXtyZXR1cm4gdm9pZCAwIT09ZT8oY29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiAubXVsdGlwbHkoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5tdWx0aXBseVF1YXRlcm5pb25zKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLm11bHRpcGx5UXVhdGVybmlvbnModCxlKSk6dGhpcy5tdWx0aXBseVF1YXRlcm5pb25zKHRoaXMsdCl9cHJlbXVsdGlwbHkodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlRdWF0ZXJuaW9ucyh0LHRoaXMpfW11bHRpcGx5UXVhdGVybmlvbnModCxlKXtjb25zdCBuPXQuX3gsbz10Ll95LGk9dC5feixhPXQuX3cscj1lLl94LHM9ZS5feSxsPWUuX3osYz1lLl93O3JldHVybiB0aGlzLl94PW4qYythKnIrbypsLWkqcyx0aGlzLl95PW8qYythKnMraSpyLW4qbCx0aGlzLl96PWkqYythKmwrbipzLW8qcix0aGlzLl93PWEqYy1uKnItbypzLWkqbCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zbGVycCh0LGUpe2lmKDA9PT1lKXJldHVybiB0aGlzO2lmKDE9PT1lKXJldHVybiB0aGlzLmNvcHkodCk7Y29uc3Qgbj10aGlzLl94LG89dGhpcy5feSxpPXRoaXMuX3osYT10aGlzLl93O2xldCByPWEqdC5fdytuKnQuX3grbyp0Ll95K2kqdC5fejtpZihyPDA/KHRoaXMuX3c9LXQuX3csdGhpcy5feD0tdC5feCx0aGlzLl95PS10Ll95LHRoaXMuX3o9LXQuX3oscj0tcik6dGhpcy5jb3B5KHQpLHI+PTEpcmV0dXJuIHRoaXMuX3c9YSx0aGlzLl94PW4sdGhpcy5feT1vLHRoaXMuX3o9aSx0aGlzO2NvbnN0IHM9MS1yKnI7aWYoczw9TnVtYmVyLkVQU0lMT04pe2NvbnN0IHQ9MS1lO3JldHVybiB0aGlzLl93PXQqYStlKnRoaXMuX3csdGhpcy5feD10Km4rZSp0aGlzLl94LHRoaXMuX3k9dCpvK2UqdGhpcy5feSx0aGlzLl96PXQqaStlKnRoaXMuX3osdGhpcy5ub3JtYWxpemUoKSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31jb25zdCBsPU1hdGguc3FydChzKSxjPU1hdGguYXRhbjIobCxyKSxkPU1hdGguc2luKCgxLWUpKmMpL2wscD1NYXRoLnNpbihlKmMpL2w7cmV0dXJuIHRoaXMuX3c9YSpkK3RoaXMuX3cqcCx0aGlzLl94PW4qZCt0aGlzLl94KnAsdGhpcy5feT1vKmQrdGhpcy5feSpwLHRoaXMuX3o9aSpkK3RoaXMuX3oqcCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31lcXVhbHModCl7cmV0dXJuIHQuX3g9PT10aGlzLl94JiZ0Ll95PT09dGhpcy5feSYmdC5fej09PXRoaXMuX3omJnQuX3c9PT10aGlzLl93fWZyb21BcnJheSh0LGU9MCl7cmV0dXJuIHRoaXMuX3g9dFtlXSx0aGlzLl95PXRbZSsxXSx0aGlzLl96PXRbZSsyXSx0aGlzLl93PXRbZSszXSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc310b0FycmF5KHQ9W10sZT0wKXtyZXR1cm4gdFtlXT10aGlzLl94LHRbZSsxXT10aGlzLl95LHRbZSsyXT10aGlzLl96LHRbZSszXT10aGlzLl93LHR9ZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUpe3JldHVybiB0aGlzLl94PXQuZ2V0WChlKSx0aGlzLl95PXQuZ2V0WShlKSx0aGlzLl96PXQuZ2V0WihlKSx0aGlzLl93PXQuZ2V0VyhlKSx0aGlzfV9vbkNoYW5nZSh0KXtyZXR1cm4gdGhpcy5fb25DaGFuZ2VDYWxsYmFjaz10LHRoaXN9X29uQ2hhbmdlQ2FsbGJhY2soKXt9fWNsYXNzICRpdHtjb25zdHJ1Y3Rvcih0PTAsZT0wLG49MCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlzVmVjdG9yMyIse3ZhbHVlOiEwfSksdGhpcy54PXQsdGhpcy55PWUsdGhpcy56PW59c2V0KHQsZSxuKXtyZXR1cm4gdm9pZCAwPT09biYmKG49dGhpcy56KSx0aGlzLng9dCx0aGlzLnk9ZSx0aGlzLno9bix0aGlzfXNldFNjYWxhcih0KXtyZXR1cm4gdGhpcy54PXQsdGhpcy55PXQsdGhpcy56PXQsdGhpc31zZXRYKHQpe3JldHVybiB0aGlzLng9dCx0aGlzfXNldFkodCl7cmV0dXJuIHRoaXMueT10LHRoaXN9c2V0Wih0KXtyZXR1cm4gdGhpcy56PXQsdGhpc31zZXRDb21wb25lbnQodCxlKXtzd2l0Y2godCl7Y2FzZSAwOnRoaXMueD1lO2JyZWFrO2Nhc2UgMTp0aGlzLnk9ZTticmVhaztjYXNlIDI6dGhpcy56PWU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX1yZXR1cm4gdGhpc31nZXRDb21wb25lbnQodCl7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gdGhpcy54O2Nhc2UgMTpyZXR1cm4gdGhpcy55O2Nhc2UgMjpyZXR1cm4gdGhpcy56O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrdCl9fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMueCx0aGlzLnksdGhpcy56KX1jb3B5KHQpe3JldHVybiB0aGlzLng9dC54LHRoaXMueT10LnksdGhpcy56PXQueix0aGlzfWFkZCh0LGUpe3JldHVybiB2b2lkIDAhPT1lPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5hZGQoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5hZGRWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmFkZFZlY3RvcnModCxlKSk6KHRoaXMueCs9dC54LHRoaXMueSs9dC55LHRoaXMueis9dC56LHRoaXMpfWFkZFNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kz10LHRoaXMueSs9dCx0aGlzLnorPXQsdGhpc31hZGRWZWN0b3JzKHQsZSl7cmV0dXJuIHRoaXMueD10LngrZS54LHRoaXMueT10LnkrZS55LHRoaXMuej10LnorZS56LHRoaXN9YWRkU2NhbGVkVmVjdG9yKHQsZSl7cmV0dXJuIHRoaXMueCs9dC54KmUsdGhpcy55Kz10LnkqZSx0aGlzLnorPXQueiplLHRoaXN9c3ViKHQsZSl7cmV0dXJuIHZvaWQgMCE9PWU/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLnN1YigpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLnN1YlZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuc3ViVmVjdG9ycyh0LGUpKToodGhpcy54LT10LngsdGhpcy55LT10LnksdGhpcy56LT10LnosdGhpcyl9c3ViU2NhbGFyKHQpe3JldHVybiB0aGlzLngtPXQsdGhpcy55LT10LHRoaXMuei09dCx0aGlzfXN1YlZlY3RvcnModCxlKXtyZXR1cm4gdGhpcy54PXQueC1lLngsdGhpcy55PXQueS1lLnksdGhpcy56PXQuei1lLnosdGhpc31tdWx0aXBseSh0LGUpe3JldHVybiB2b2lkIDAhPT1lPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5tdWx0aXBseSgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLm11bHRpcGx5VmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5tdWx0aXBseVZlY3RvcnModCxlKSk6KHRoaXMueCo9dC54LHRoaXMueSo9dC55LHRoaXMueio9dC56LHRoaXMpfW11bHRpcGx5U2NhbGFyKHQpe3JldHVybiB0aGlzLngqPXQsdGhpcy55Kj10LHRoaXMueio9dCx0aGlzfW11bHRpcGx5VmVjdG9ycyh0LGUpe3JldHVybiB0aGlzLng9dC54KmUueCx0aGlzLnk9dC55KmUueSx0aGlzLno9dC56KmUueix0aGlzfWFwcGx5RXVsZXIodCl7cmV0dXJuIHQmJnQuaXNFdWxlcnx8Y29uc29sZS5lcnJvcigiVEhSRUUuVmVjdG9yMzogLmFwcGx5RXVsZXIoKSBub3cgZXhwZWN0cyBhbiBFdWxlciByb3RhdGlvbiByYXRoZXIgdGhhbiBhIFZlY3RvcjMgYW5kIG9yZGVyLiIpLHRoaXMuYXBwbHlRdWF0ZXJuaW9uKGVhdC5zZXRGcm9tRXVsZXIodCkpfWFwcGx5QXhpc0FuZ2xlKHQsZSl7cmV0dXJuIHRoaXMuYXBwbHlRdWF0ZXJuaW9uKGVhdC5zZXRGcm9tQXhpc0FuZ2xlKHQsZSkpfWFwcGx5TWF0cml4Myh0KXtjb25zdCBlPXRoaXMueCxuPXRoaXMueSxvPXRoaXMueixpPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMueD1pWzBdKmUraVszXSpuK2lbNl0qbyx0aGlzLnk9aVsxXSplK2lbNF0qbitpWzddKm8sdGhpcy56PWlbMl0qZStpWzVdKm4raVs4XSpvLHRoaXN9YXBwbHlOb3JtYWxNYXRyaXgodCl7cmV0dXJuIHRoaXMuYXBwbHlNYXRyaXgzKHQpLm5vcm1hbGl6ZSgpfWFwcGx5TWF0cml4NCh0KXtjb25zdCBlPXRoaXMueCxuPXRoaXMueSxvPXRoaXMueixpPXQuZWxlbWVudHMsYT0xLyhpWzNdKmUraVs3XSpuK2lbMTFdKm8raVsxNV0pO3JldHVybiB0aGlzLng9KGlbMF0qZStpWzRdKm4raVs4XSpvK2lbMTJdKSphLHRoaXMueT0oaVsxXSplK2lbNV0qbitpWzldKm8raVsxM10pKmEsdGhpcy56PShpWzJdKmUraVs2XSpuK2lbMTBdKm8raVsxNF0pKmEsdGhpc31hcHBseVF1YXRlcm5pb24odCl7Y29uc3QgZT10aGlzLngsbj10aGlzLnksbz10aGlzLnosaT10LngsYT10Lnkscj10Lnoscz10LncsbD1zKmUrYSpvLXIqbixjPXMqbityKmUtaSpvLGQ9cypvK2kqbi1hKmUscD0taSplLWEqbi1yKm87cmV0dXJuIHRoaXMueD1sKnMrcCotaStjKi1yLWQqLWEsdGhpcy55PWMqcytwKi1hK2QqLWktbCotcix0aGlzLno9ZCpzK3AqLXIrbCotYS1jKi1pLHRoaXN9cHJvamVjdCh0KXtyZXR1cm4gdGhpcy5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZEludmVyc2UpLmFwcGx5TWF0cml4NCh0LnByb2plY3Rpb25NYXRyaXgpfXVucHJvamVjdCh0KXtyZXR1cm4gdGhpcy5hcHBseU1hdHJpeDQodC5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZSkuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGQpfXRyYW5zZm9ybURpcmVjdGlvbih0KXtjb25zdCBlPXRoaXMueCxuPXRoaXMueSxvPXRoaXMueixpPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMueD1pWzBdKmUraVs0XSpuK2lbOF0qbyx0aGlzLnk9aVsxXSplK2lbNV0qbitpWzldKm8sdGhpcy56PWlbMl0qZStpWzZdKm4raVsxMF0qbyx0aGlzLm5vcm1hbGl6ZSgpfWRpdmlkZSh0KXtyZXR1cm4gdGhpcy54Lz10LngsdGhpcy55Lz10LnksdGhpcy56Lz10LnosdGhpc31kaXZpZGVTY2FsYXIodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlTY2FsYXIoMS90KX1taW4odCl7cmV0dXJuIHRoaXMueD1NYXRoLm1pbih0aGlzLngsdC54KSx0aGlzLnk9TWF0aC5taW4odGhpcy55LHQueSksdGhpcy56PU1hdGgubWluKHRoaXMueix0LnopLHRoaXN9bWF4KHQpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodGhpcy54LHQueCksdGhpcy55PU1hdGgubWF4KHRoaXMueSx0LnkpLHRoaXMuej1NYXRoLm1heCh0aGlzLnosdC56KSx0aGlzfWNsYW1wKHQsZSl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LngsTWF0aC5taW4oZS54LHRoaXMueCkpLHRoaXMueT1NYXRoLm1heCh0LnksTWF0aC5taW4oZS55LHRoaXMueSkpLHRoaXMuej1NYXRoLm1heCh0LnosTWF0aC5taW4oZS56LHRoaXMueikpLHRoaXN9Y2xhbXBTY2FsYXIodCxlKXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMueSkpLHRoaXMuej1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy56KSksdGhpc31jbGFtcExlbmd0aCh0LGUpe2NvbnN0IG49dGhpcy5sZW5ndGgoKTtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIobnx8MSkubXVsdGlwbHlTY2FsYXIoTWF0aC5tYXgodCxNYXRoLm1pbihlLG4pKSl9Zmxvb3IoKXtyZXR1cm4gdGhpcy54PU1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9TWF0aC5mbG9vcih0aGlzLnkpLHRoaXMuej1NYXRoLmZsb29yKHRoaXMueiksdGhpc31jZWlsKCl7cmV0dXJuIHRoaXMueD1NYXRoLmNlaWwodGhpcy54KSx0aGlzLnk9TWF0aC5jZWlsKHRoaXMueSksdGhpcy56PU1hdGguY2VpbCh0aGlzLnopLHRoaXN9cm91bmQoKXtyZXR1cm4gdGhpcy54PU1hdGgucm91bmQodGhpcy54KSx0aGlzLnk9TWF0aC5yb3VuZCh0aGlzLnkpLHRoaXMuej1NYXRoLnJvdW5kKHRoaXMueiksdGhpc31yb3VuZFRvWmVybygpe3JldHVybiB0aGlzLng9dGhpcy54PDA/TWF0aC5jZWlsKHRoaXMueCk6TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT10aGlzLnk8MD9NYXRoLmNlaWwodGhpcy55KTpNYXRoLmZsb29yKHRoaXMueSksdGhpcy56PXRoaXMuejwwP01hdGguY2VpbCh0aGlzLnopOk1hdGguZmxvb3IodGhpcy56KSx0aGlzfW5lZ2F0ZSgpe3JldHVybiB0aGlzLng9LXRoaXMueCx0aGlzLnk9LXRoaXMueSx0aGlzLno9LXRoaXMueix0aGlzfWRvdCh0KXtyZXR1cm4gdGhpcy54KnQueCt0aGlzLnkqdC55K3RoaXMueip0Lnp9bGVuZ3RoU3EoKXtyZXR1cm4gdGhpcy54KnRoaXMueCt0aGlzLnkqdGhpcy55K3RoaXMueip0aGlzLnp9bGVuZ3RoKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkrdGhpcy56KnRoaXMueil9bWFuaGF0dGFuTGVuZ3RoKCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueCkrTWF0aC5hYnModGhpcy55KStNYXRoLmFicyh0aGlzLnopfW5vcm1hbGl6ZSgpe3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcih0aGlzLmxlbmd0aCgpfHwxKX1zZXRMZW5ndGgodCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCkubXVsdGlwbHlTY2FsYXIodCl9bGVycCh0LGUpe3JldHVybiB0aGlzLngrPSh0LngtdGhpcy54KSplLHRoaXMueSs9KHQueS10aGlzLnkpKmUsdGhpcy56Kz0odC56LXRoaXMueikqZSx0aGlzfWxlcnBWZWN0b3JzKHQsZSxuKXtyZXR1cm4gdGhpcy54PXQueCsoZS54LXQueCkqbix0aGlzLnk9dC55KyhlLnktdC55KSpuLHRoaXMuej10LnorKGUuei10LnopKm4sdGhpc31jcm9zcyh0LGUpe3JldHVybiB2b2lkIDAhPT1lPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5jcm9zcygpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLmNyb3NzVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5jcm9zc1ZlY3RvcnModCxlKSk6dGhpcy5jcm9zc1ZlY3RvcnModGhpcyx0KX1jcm9zc1ZlY3RvcnModCxlKXtjb25zdCBuPXQueCxvPXQueSxpPXQueixhPWUueCxyPWUueSxzPWUuejtyZXR1cm4gdGhpcy54PW8qcy1pKnIsdGhpcy55PWkqYS1uKnMsdGhpcy56PW4qci1vKmEsdGhpc31wcm9qZWN0T25WZWN0b3IodCl7Y29uc3QgZT10Lmxlbmd0aFNxKCk7aWYoMD09PWUpcmV0dXJuIHRoaXMuc2V0KDAsMCwwKTtjb25zdCBuPXQuZG90KHRoaXMpL2U7cmV0dXJuIHRoaXMuY29weSh0KS5tdWx0aXBseVNjYWxhcihuKX1wcm9qZWN0T25QbGFuZSh0KXtyZXR1cm4gdGF0LmNvcHkodGhpcykucHJvamVjdE9uVmVjdG9yKHQpLHRoaXMuc3ViKHRhdCl9cmVmbGVjdCh0KXtyZXR1cm4gdGhpcy5zdWIodGF0LmNvcHkodCkubXVsdGlwbHlTY2FsYXIoMip0aGlzLmRvdCh0KSkpfWFuZ2xlVG8odCl7Y29uc3QgZT1NYXRoLnNxcnQodGhpcy5sZW5ndGhTcSgpKnQubGVuZ3RoU3EoKSk7aWYoMD09PWUpcmV0dXJuIE1hdGguUEkvMjtjb25zdCBuPXRoaXMuZG90KHQpL2U7cmV0dXJuIE1hdGguYWNvcyhqaXQuY2xhbXAobiwtMSwxKSl9ZGlzdGFuY2VUbyh0KXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdGFuY2VUb1NxdWFyZWQodCkpfWRpc3RhbmNlVG9TcXVhcmVkKHQpe2NvbnN0IGU9dGhpcy54LXQueCxuPXRoaXMueS10Lnksbz10aGlzLnotdC56O3JldHVybiBlKmUrbipuK28qb31tYW5oYXR0YW5EaXN0YW5jZVRvKHQpe3JldHVybiBNYXRoLmFicyh0aGlzLngtdC54KStNYXRoLmFicyh0aGlzLnktdC55KStNYXRoLmFicyh0aGlzLnotdC56KX1zZXRGcm9tU3BoZXJpY2FsKHQpe3JldHVybiB0aGlzLnNldEZyb21TcGhlcmljYWxDb29yZHModC5yYWRpdXMsdC5waGksdC50aGV0YSl9c2V0RnJvbVNwaGVyaWNhbENvb3Jkcyh0LGUsbil7Y29uc3Qgbz1NYXRoLnNpbihlKSp0O3JldHVybiB0aGlzLng9bypNYXRoLnNpbihuKSx0aGlzLnk9TWF0aC5jb3MoZSkqdCx0aGlzLno9bypNYXRoLmNvcyhuKSx0aGlzfXNldEZyb21DeWxpbmRyaWNhbCh0KXtyZXR1cm4gdGhpcy5zZXRGcm9tQ3lsaW5kcmljYWxDb29yZHModC5yYWRpdXMsdC50aGV0YSx0LnkpfXNldEZyb21DeWxpbmRyaWNhbENvb3Jkcyh0LGUsbil7cmV0dXJuIHRoaXMueD10Kk1hdGguc2luKGUpLHRoaXMueT1uLHRoaXMuej10Kk1hdGguY29zKGUpLHRoaXN9c2V0RnJvbU1hdHJpeFBvc2l0aW9uKHQpe2NvbnN0IGU9dC5lbGVtZW50cztyZXR1cm4gdGhpcy54PWVbMTJdLHRoaXMueT1lWzEzXSx0aGlzLno9ZVsxNF0sdGhpc31zZXRGcm9tTWF0cml4U2NhbGUodCl7Y29uc3QgZT10aGlzLnNldEZyb21NYXRyaXhDb2x1bW4odCwwKS5sZW5ndGgoKSxuPXRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbih0LDEpLmxlbmd0aCgpLG89dGhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKHQsMikubGVuZ3RoKCk7cmV0dXJuIHRoaXMueD1lLHRoaXMueT1uLHRoaXMuej1vLHRoaXN9c2V0RnJvbU1hdHJpeENvbHVtbih0LGUpe3JldHVybiB0aGlzLmZyb21BcnJheSh0LmVsZW1lbnRzLDQqZSl9c2V0RnJvbU1hdHJpeDNDb2x1bW4odCxlKXtyZXR1cm4gdGhpcy5mcm9tQXJyYXkodC5lbGVtZW50cywzKmUpfWVxdWFscyh0KXtyZXR1cm4gdC54PT09dGhpcy54JiZ0Lnk9PT10aGlzLnkmJnQuej09PXRoaXMuen1mcm9tQXJyYXkodCxlPTApe3JldHVybiB0aGlzLng9dFtlXSx0aGlzLnk9dFtlKzFdLHRoaXMuej10W2UrMl0sdGhpc310b0FycmF5KHQ9W10sZT0wKXtyZXR1cm4gdFtlXT10aGlzLngsdFtlKzFdPXRoaXMueSx0W2UrMl09dGhpcy56LHR9ZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUsbil7cmV0dXJuIHZvaWQgMCE9PW4mJmNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogb2Zmc2V0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMueD10LmdldFgoZSksdGhpcy55PXQuZ2V0WShlKSx0aGlzLno9dC5nZXRaKGUpLHRoaXN9cmFuZG9tKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJhbmRvbSgpLHRoaXMueT1NYXRoLnJhbmRvbSgpLHRoaXMuej1NYXRoLnJhbmRvbSgpLHRoaXN9fWNvbnN0IHRhdD1uZXcgJGl0LGVhdD1uZXcgUWl0O2NsYXNzIG5hdHtjb25zdHJ1Y3Rvcih0LGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpc0JveDMiLHt2YWx1ZTohMH0pLHRoaXMubWluPXZvaWQgMCE9PXQ/dDpuZXcgJGl0KDEvMCwxLzAsMS8wKSx0aGlzLm1heD12b2lkIDAhPT1lP2U6bmV3ICRpdCgtMS8wLC0xLzAsLTEvMCl9c2V0KHQsZSl7cmV0dXJuIHRoaXMubWluLmNvcHkodCksdGhpcy5tYXguY29weShlKSx0aGlzfXNldEZyb21BcnJheSh0KXtsZXQgZT0xLzAsbj0xLzAsbz0xLzAsaT0tMS8wLGE9LTEvMCxyPS0xLzA7Zm9yKGxldCBzPTAsbD10Lmxlbmd0aDtzPGw7cys9Myl7Y29uc3QgbD10W3NdLGM9dFtzKzFdLGQ9dFtzKzJdO2w8ZSYmKGU9bCksYzxuJiYobj1jKSxkPG8mJihvPWQpLGw+aSYmKGk9bCksYz5hJiYoYT1jKSxkPnImJihyPWQpfXJldHVybiB0aGlzLm1pbi5zZXQoZSxuLG8pLHRoaXMubWF4LnNldChpLGEsciksdGhpc31zZXRGcm9tQnVmZmVyQXR0cmlidXRlKHQpe2xldCBlPTEvMCxuPTEvMCxvPTEvMCxpPS0xLzAsYT0tMS8wLHI9LTEvMDtmb3IobGV0IHM9MCxsPXQuY291bnQ7czxsO3MrKyl7Y29uc3QgbD10LmdldFgocyksYz10LmdldFkocyksZD10LmdldFoocyk7bDxlJiYoZT1sKSxjPG4mJihuPWMpLGQ8byYmKG89ZCksbD5pJiYoaT1sKSxjPmEmJihhPWMpLGQ+ciYmKHI9ZCl9cmV0dXJuIHRoaXMubWluLnNldChlLG4sbyksdGhpcy5tYXguc2V0KGksYSxyKSx0aGlzfXNldEZyb21Qb2ludHModCl7dGhpcy5tYWtlRW1wdHkoKTtmb3IobGV0IGU9MCxuPXQubGVuZ3RoO2U8bjtlKyspdGhpcy5leHBhbmRCeVBvaW50KHRbZV0pO3JldHVybiB0aGlzfXNldEZyb21DZW50ZXJBbmRTaXplKHQsZSl7Y29uc3Qgbj1hYXQuY29weShlKS5tdWx0aXBseVNjYWxhciguNSk7cmV0dXJuIHRoaXMubWluLmNvcHkodCkuc3ViKG4pLHRoaXMubWF4LmNvcHkodCkuYWRkKG4pLHRoaXN9c2V0RnJvbU9iamVjdCh0KXtyZXR1cm4gdGhpcy5tYWtlRW1wdHkoKSx0aGlzLmV4cGFuZEJ5T2JqZWN0KHQpfWNsb25lKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMubWluLmNvcHkodC5taW4pLHRoaXMubWF4LmNvcHkodC5tYXgpLHRoaXN9bWFrZUVtcHR5KCl7cmV0dXJuIHRoaXMubWluLng9dGhpcy5taW4ueT10aGlzLm1pbi56PTEvMCx0aGlzLm1heC54PXRoaXMubWF4Lnk9dGhpcy5tYXguej0tMS8wLHRoaXN9aXNFbXB0eSgpe3JldHVybiB0aGlzLm1heC54PHRoaXMubWluLnh8fHRoaXMubWF4Lnk8dGhpcy5taW4ueXx8dGhpcy5tYXguejx0aGlzLm1pbi56fWdldENlbnRlcih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKGNvbnNvbGUud2FybigiVEhSRUUuQm94MzogLmdldENlbnRlcigpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSx0PW5ldyAkaXQpLHRoaXMuaXNFbXB0eSgpP3Quc2V0KDAsMCwwKTp0LmFkZFZlY3RvcnModGhpcy5taW4sdGhpcy5tYXgpLm11bHRpcGx5U2NhbGFyKC41KX1nZXRTaXplKHQpe3JldHVybiB2b2lkIDA9PT10JiYoY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuZ2V0U2l6ZSgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSx0PW5ldyAkaXQpLHRoaXMuaXNFbXB0eSgpP3Quc2V0KDAsMCwwKTp0LnN1YlZlY3RvcnModGhpcy5tYXgsdGhpcy5taW4pfWV4cGFuZEJ5UG9pbnQodCl7cmV0dXJuIHRoaXMubWluLm1pbih0KSx0aGlzLm1heC5tYXgodCksdGhpc31leHBhbmRCeVZlY3Rvcih0KXtyZXR1cm4gdGhpcy5taW4uc3ViKHQpLHRoaXMubWF4LmFkZCh0KSx0aGlzfWV4cGFuZEJ5U2NhbGFyKHQpe3JldHVybiB0aGlzLm1pbi5hZGRTY2FsYXIoLXQpLHRoaXMubWF4LmFkZFNjYWxhcih0KSx0aGlzfWV4cGFuZEJ5T2JqZWN0KHQpe3QudXBkYXRlV29ybGRNYXRyaXgoITEsITEpO2NvbnN0IGU9dC5nZW9tZXRyeTt2b2lkIDAhPT1lJiYobnVsbD09PWUuYm91bmRpbmdCb3gmJmUuY29tcHV0ZUJvdW5kaW5nQm94KCkscmF0LmNvcHkoZS5ib3VuZGluZ0JveCkscmF0LmFwcGx5TWF0cml4NCh0Lm1hdHJpeFdvcmxkKSx0aGlzLnVuaW9uKHJhdCkpO2NvbnN0IG49dC5jaGlsZHJlbjtmb3IobGV0IHQ9MCxlPW4ubGVuZ3RoO3Q8ZTt0KyspdGhpcy5leHBhbmRCeU9iamVjdChuW3RdKTtyZXR1cm4gdGhpc31jb250YWluc1BvaW50KHQpe3JldHVybiEodC54PHRoaXMubWluLnh8fHQueD50aGlzLm1heC54fHx0Lnk8dGhpcy5taW4ueXx8dC55PnRoaXMubWF4Lnl8fHQuejx0aGlzLm1pbi56fHx0Lno+dGhpcy5tYXgueil9Y29udGFpbnNCb3godCl7cmV0dXJuIHRoaXMubWluLng8PXQubWluLngmJnQubWF4Lng8PXRoaXMubWF4LngmJnRoaXMubWluLnk8PXQubWluLnkmJnQubWF4Lnk8PXRoaXMubWF4LnkmJnRoaXMubWluLno8PXQubWluLnomJnQubWF4Lno8PXRoaXMubWF4Lnp9Z2V0UGFyYW1ldGVyKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5nZXRQYXJhbWV0ZXIoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIiksZT1uZXcgJGl0KSxlLnNldCgodC54LXRoaXMubWluLngpLyh0aGlzLm1heC54LXRoaXMubWluLngpLCh0LnktdGhpcy5taW4ueSkvKHRoaXMubWF4LnktdGhpcy5taW4ueSksKHQuei10aGlzLm1pbi56KS8odGhpcy5tYXguei10aGlzLm1pbi56KSl9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4hKHQubWF4Lng8dGhpcy5taW4ueHx8dC5taW4ueD50aGlzLm1heC54fHx0Lm1heC55PHRoaXMubWluLnl8fHQubWluLnk+dGhpcy5tYXgueXx8dC5tYXguejx0aGlzLm1pbi56fHx0Lm1pbi56PnRoaXMubWF4LnopfWludGVyc2VjdHNTcGhlcmUodCl7cmV0dXJuIHRoaXMuY2xhbXBQb2ludCh0LmNlbnRlcixhYXQpLGFhdC5kaXN0YW5jZVRvU3F1YXJlZCh0LmNlbnRlcik8PXQucmFkaXVzKnQucmFkaXVzfWludGVyc2VjdHNQbGFuZSh0KXtsZXQgZSxuO3JldHVybiB0Lm5vcm1hbC54PjA/KGU9dC5ub3JtYWwueCp0aGlzLm1pbi54LG49dC5ub3JtYWwueCp0aGlzLm1heC54KTooZT10Lm5vcm1hbC54KnRoaXMubWF4Lngsbj10Lm5vcm1hbC54KnRoaXMubWluLngpLHQubm9ybWFsLnk+MD8oZSs9dC5ub3JtYWwueSp0aGlzLm1pbi55LG4rPXQubm9ybWFsLnkqdGhpcy5tYXgueSk6KGUrPXQubm9ybWFsLnkqdGhpcy5tYXgueSxuKz10Lm5vcm1hbC55KnRoaXMubWluLnkpLHQubm9ybWFsLno+MD8oZSs9dC5ub3JtYWwueip0aGlzLm1pbi56LG4rPXQubm9ybWFsLnoqdGhpcy5tYXgueik6KGUrPXQubm9ybWFsLnoqdGhpcy5tYXgueixuKz10Lm5vcm1hbC56KnRoaXMubWluLnopLGU8PS10LmNvbnN0YW50JiZuPj0tdC5jb25zdGFudH1pbnRlcnNlY3RzVHJpYW5nbGUodCl7aWYodGhpcy5pc0VtcHR5KCkpcmV0dXJuITE7dGhpcy5nZXRDZW50ZXIodWF0KSxmYXQuc3ViVmVjdG9ycyh0aGlzLm1heCx1YXQpLHNhdC5zdWJWZWN0b3JzKHQuYSx1YXQpLGxhdC5zdWJWZWN0b3JzKHQuYix1YXQpLGNhdC5zdWJWZWN0b3JzKHQuYyx1YXQpLGRhdC5zdWJWZWN0b3JzKGxhdCxzYXQpLHBhdC5zdWJWZWN0b3JzKGNhdCxsYXQpLG1hdC5zdWJWZWN0b3JzKHNhdCxjYXQpO2xldCBlPVswLC1kYXQueixkYXQueSwwLC1wYXQueixwYXQueSwwLC1tYXQueixtYXQueSxkYXQueiwwLC1kYXQueCxwYXQueiwwLC1wYXQueCxtYXQueiwwLC1tYXQueCwtZGF0LnksZGF0LngsMCwtcGF0LnkscGF0LngsMCwtbWF0LnksbWF0LngsMF07cmV0dXJuISFvYXQoZSxzYXQsbGF0LGNhdCxmYXQpJiYoZT1bMSwwLDAsMCwxLDAsMCwwLDFdLCEhb2F0KGUsc2F0LGxhdCxjYXQsZmF0KSYmKGdhdC5jcm9zc1ZlY3RvcnMoZGF0LHBhdCksZT1bZ2F0LngsZ2F0LnksZ2F0LnpdLG9hdChlLHNhdCxsYXQsY2F0LGZhdCkpKX1jbGFtcFBvaW50KHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5jbGFtcFBvaW50KCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLGU9bmV3ICRpdCksZS5jb3B5KHQpLmNsYW1wKHRoaXMubWluLHRoaXMubWF4KX1kaXN0YW5jZVRvUG9pbnQodCl7cmV0dXJuIGFhdC5jb3B5KHQpLmNsYW1wKHRoaXMubWluLHRoaXMubWF4KS5zdWIodCkubGVuZ3RoKCl9Z2V0Qm91bmRpbmdTcGhlcmUodCl7cmV0dXJuIHZvaWQgMD09PXQmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLkJveDM6IC5nZXRCb3VuZGluZ1NwaGVyZSgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSx0aGlzLmdldENlbnRlcih0LmNlbnRlciksdC5yYWRpdXM9LjUqdGhpcy5nZXRTaXplKGFhdCkubGVuZ3RoKCksdH1pbnRlcnNlY3QodCl7cmV0dXJuIHRoaXMubWluLm1heCh0Lm1pbiksdGhpcy5tYXgubWluKHQubWF4KSx0aGlzLmlzRW1wdHkoKSYmdGhpcy5tYWtlRW1wdHkoKSx0aGlzfXVuaW9uKHQpe3JldHVybiB0aGlzLm1pbi5taW4odC5taW4pLHRoaXMubWF4Lm1heCh0Lm1heCksdGhpc31hcHBseU1hdHJpeDQodCl7cmV0dXJuIHRoaXMuaXNFbXB0eSgpfHwoaWF0WzBdLnNldCh0aGlzLm1pbi54LHRoaXMubWluLnksdGhpcy5taW4ueikuYXBwbHlNYXRyaXg0KHQpLGlhdFsxXS5zZXQodGhpcy5taW4ueCx0aGlzLm1pbi55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSxpYXRbMl0uc2V0KHRoaXMubWluLngsdGhpcy5tYXgueSx0aGlzLm1pbi56KS5hcHBseU1hdHJpeDQodCksaWF0WzNdLnNldCh0aGlzLm1pbi54LHRoaXMubWF4LnksdGhpcy5tYXgueikuYXBwbHlNYXRyaXg0KHQpLGlhdFs0XS5zZXQodGhpcy5tYXgueCx0aGlzLm1pbi55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxpYXRbNV0uc2V0KHRoaXMubWF4LngsdGhpcy5taW4ueSx0aGlzLm1heC56KS5hcHBseU1hdHJpeDQodCksaWF0WzZdLnNldCh0aGlzLm1heC54LHRoaXMubWF4LnksdGhpcy5taW4ueikuYXBwbHlNYXRyaXg0KHQpLGlhdFs3XS5zZXQodGhpcy5tYXgueCx0aGlzLm1heC55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSx0aGlzLnNldEZyb21Qb2ludHMoaWF0KSksdGhpc310cmFuc2xhdGUodCl7cmV0dXJuIHRoaXMubWluLmFkZCh0KSx0aGlzLm1heC5hZGQodCksdGhpc31lcXVhbHModCl7cmV0dXJuIHQubWluLmVxdWFscyh0aGlzLm1pbikmJnQubWF4LmVxdWFscyh0aGlzLm1heCl9fWZ1bmN0aW9uIG9hdCh0LGUsbixvLGkpe2ZvcihsZXQgYT0wLHI9dC5sZW5ndGgtMzthPD1yO2ErPTMpe2hhdC5mcm9tQXJyYXkodCxhKTtjb25zdCByPWkueCpNYXRoLmFicyhoYXQueCkraS55Kk1hdGguYWJzKGhhdC55KStpLnoqTWF0aC5hYnMoaGF0LnopLHM9ZS5kb3QoaGF0KSxsPW4uZG90KGhhdCksYz1vLmRvdChoYXQpO2lmKE1hdGgubWF4KC1NYXRoLm1heChzLGwsYyksTWF0aC5taW4ocyxsLGMpKT5yKXJldHVybiExfXJldHVybiEwfWNvbnN0IGlhdD1bbmV3ICRpdCxuZXcgJGl0LG5ldyAkaXQsbmV3ICRpdCxuZXcgJGl0LG5ldyAkaXQsbmV3ICRpdCxuZXcgJGl0XSxhYXQ9bmV3ICRpdCxyYXQ9bmV3IG5hdCxzYXQ9bmV3ICRpdCxsYXQ9bmV3ICRpdCxjYXQ9bmV3ICRpdCxkYXQ9bmV3ICRpdCxwYXQ9bmV3ICRpdCxtYXQ9bmV3ICRpdCx1YXQ9bmV3ICRpdCxmYXQ9bmV3ICRpdCxnYXQ9bmV3ICRpdCxoYXQ9bmV3ICRpdCxiYXQ9bmV3IG5hdDtjbGFzcyB5YXR7Y29uc3RydWN0b3IodCxlKXt0aGlzLmNlbnRlcj12b2lkIDAhPT10P3Q6bmV3ICRpdCx0aGlzLnJhZGl1cz12b2lkIDAhPT1lP2U6LTF9c2V0KHQsZSl7cmV0dXJuIHRoaXMuY2VudGVyLmNvcHkodCksdGhpcy5yYWRpdXM9ZSx0aGlzfXNldEZyb21Qb2ludHModCxlKXtjb25zdCBuPXRoaXMuY2VudGVyO3ZvaWQgMCE9PWU/bi5jb3B5KGUpOmJhdC5zZXRGcm9tUG9pbnRzKHQpLmdldENlbnRlcihuKTtsZXQgbz0wO2ZvcihsZXQgZT0wLGk9dC5sZW5ndGg7ZTxpO2UrKylvPU1hdGgubWF4KG8sbi5kaXN0YW5jZVRvU3F1YXJlZCh0W2VdKSk7cmV0dXJuIHRoaXMucmFkaXVzPU1hdGguc3FydChvKSx0aGlzfWNsb25lKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMuY2VudGVyLmNvcHkodC5jZW50ZXIpLHRoaXMucmFkaXVzPXQucmFkaXVzLHRoaXN9aXNFbXB0eSgpe3JldHVybiB0aGlzLnJhZGl1czwwfW1ha2VFbXB0eSgpe3JldHVybiB0aGlzLmNlbnRlci5zZXQoMCwwLDApLHRoaXMucmFkaXVzPS0xLHRoaXN9Y29udGFpbnNQb2ludCh0KXtyZXR1cm4gdC5kaXN0YW5jZVRvU3F1YXJlZCh0aGlzLmNlbnRlcik8PXRoaXMucmFkaXVzKnRoaXMucmFkaXVzfWRpc3RhbmNlVG9Qb2ludCh0KXtyZXR1cm4gdC5kaXN0YW5jZVRvKHRoaXMuY2VudGVyKS10aGlzLnJhZGl1c31pbnRlcnNlY3RzU3BoZXJlKHQpe2NvbnN0IGU9dGhpcy5yYWRpdXMrdC5yYWRpdXM7cmV0dXJuIHQuY2VudGVyLmRpc3RhbmNlVG9TcXVhcmVkKHRoaXMuY2VudGVyKTw9ZSplfWludGVyc2VjdHNCb3godCl7cmV0dXJuIHQuaW50ZXJzZWN0c1NwaGVyZSh0aGlzKX1pbnRlcnNlY3RzUGxhbmUodCl7cmV0dXJuIE1hdGguYWJzKHQuZGlzdGFuY2VUb1BvaW50KHRoaXMuY2VudGVyKSk8PXRoaXMucmFkaXVzfWNsYW1wUG9pbnQodCxlKXtjb25zdCBuPXRoaXMuY2VudGVyLmRpc3RhbmNlVG9TcXVhcmVkKHQpO3JldHVybiB2b2lkIDA9PT1lJiYoY29uc29sZS53YXJuKCJUSFJFRS5TcGhlcmU6IC5jbGFtcFBvaW50KCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLGU9bmV3ICRpdCksZS5jb3B5KHQpLG4+dGhpcy5yYWRpdXMqdGhpcy5yYWRpdXMmJihlLnN1Yih0aGlzLmNlbnRlcikubm9ybWFsaXplKCksZS5tdWx0aXBseVNjYWxhcih0aGlzLnJhZGl1cykuYWRkKHRoaXMuY2VudGVyKSksZX1nZXRCb3VuZGluZ0JveCh0KXtyZXR1cm4gdm9pZCAwPT09dCYmKGNvbnNvbGUud2FybigiVEhSRUUuU3BoZXJlOiAuZ2V0Qm91bmRpbmdCb3goKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIiksdD1uZXcgbmF0KSx0aGlzLmlzRW1wdHkoKT8odC5tYWtlRW1wdHkoKSx0KToodC5zZXQodGhpcy5jZW50ZXIsdGhpcy5jZW50ZXIpLHQuZXhwYW5kQnlTY2FsYXIodGhpcy5yYWRpdXMpLHQpfWFwcGx5TWF0cml4NCh0KXtyZXR1cm4gdGhpcy5jZW50ZXIuYXBwbHlNYXRyaXg0KHQpLHRoaXMucmFkaXVzPXRoaXMucmFkaXVzKnQuZ2V0TWF4U2NhbGVPbkF4aXMoKSx0aGlzfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5jZW50ZXIuYWRkKHQpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0LmNlbnRlci5lcXVhbHModGhpcy5jZW50ZXIpJiZ0LnJhZGl1cz09PXRoaXMucmFkaXVzfX1jb25zdCBfYXQ9bmV3ICRpdCxDYXQ9bmV3ICRpdCxNYXQ9bmV3ICRpdCx2YXQ9bmV3ICRpdCx4YXQ9bmV3ICRpdCxPYXQ9bmV3ICRpdCxQYXQ9bmV3ICRpdDtjbGFzcyB3YXR7Y29uc3RydWN0b3IodCxlKXt0aGlzLm9yaWdpbj12b2lkIDAhPT10P3Q6bmV3ICRpdCx0aGlzLmRpcmVjdGlvbj12b2lkIDAhPT1lP2U6bmV3ICRpdCgwLDAsLTEpfXNldCh0LGUpe3JldHVybiB0aGlzLm9yaWdpbi5jb3B5KHQpLHRoaXMuZGlyZWN0aW9uLmNvcHkoZSksdGhpc31jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLm9yaWdpbi5jb3B5KHQub3JpZ2luKSx0aGlzLmRpcmVjdGlvbi5jb3B5KHQuZGlyZWN0aW9uKSx0aGlzfWF0KHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihjb25zb2xlLndhcm4oIlRIUkVFLlJheTogLmF0KCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLGU9bmV3ICRpdCksZS5jb3B5KHRoaXMuZGlyZWN0aW9uKS5tdWx0aXBseVNjYWxhcih0KS5hZGQodGhpcy5vcmlnaW4pfWxvb2tBdCh0KXtyZXR1cm4gdGhpcy5kaXJlY3Rpb24uY29weSh0KS5zdWIodGhpcy5vcmlnaW4pLm5vcm1hbGl6ZSgpLHRoaXN9cmVjYXN0KHQpe3JldHVybiB0aGlzLm9yaWdpbi5jb3B5KHRoaXMuYXQodCxfYXQpKSx0aGlzfWNsb3Nlc3RQb2ludFRvUG9pbnQodCxlKXt2b2lkIDA9PT1lJiYoY29uc29sZS53YXJuKCJUSFJFRS5SYXk6IC5jbG9zZXN0UG9pbnRUb1BvaW50KCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLGU9bmV3ICRpdCksZS5zdWJWZWN0b3JzKHQsdGhpcy5vcmlnaW4pO2NvbnN0IG49ZS5kb3QodGhpcy5kaXJlY3Rpb24pO3JldHVybiBuPDA/ZS5jb3B5KHRoaXMub3JpZ2luKTplLmNvcHkodGhpcy5kaXJlY3Rpb24pLm11bHRpcGx5U2NhbGFyKG4pLmFkZCh0aGlzLm9yaWdpbil9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiBNYXRoLnNxcnQodGhpcy5kaXN0YW5jZVNxVG9Qb2ludCh0KSl9ZGlzdGFuY2VTcVRvUG9pbnQodCl7Y29uc3QgZT1fYXQuc3ViVmVjdG9ycyh0LHRoaXMub3JpZ2luKS5kb3QodGhpcy5kaXJlY3Rpb24pO3JldHVybiBlPDA/dGhpcy5vcmlnaW4uZGlzdGFuY2VUb1NxdWFyZWQodCk6KF9hdC5jb3B5KHRoaXMuZGlyZWN0aW9uKS5tdWx0aXBseVNjYWxhcihlKS5hZGQodGhpcy5vcmlnaW4pLF9hdC5kaXN0YW5jZVRvU3F1YXJlZCh0KSl9ZGlzdGFuY2VTcVRvU2VnbWVudCh0LGUsbixvKXtDYXQuY29weSh0KS5hZGQoZSkubXVsdGlwbHlTY2FsYXIoLjUpLE1hdC5jb3B5KGUpLnN1Yih0KS5ub3JtYWxpemUoKSx2YXQuY29weSh0aGlzLm9yaWdpbikuc3ViKENhdCk7Y29uc3QgaT0uNSp0LmRpc3RhbmNlVG8oZSksYT0tdGhpcy5kaXJlY3Rpb24uZG90KE1hdCkscj12YXQuZG90KHRoaXMuZGlyZWN0aW9uKSxzPS12YXQuZG90KE1hdCksbD12YXQubGVuZ3RoU3EoKSxjPU1hdGguYWJzKDEtYSphKTtsZXQgZCxwLG0sdTtpZihjPjApaWYoZD1hKnMtcixwPWEqci1zLHU9aSpjLGQ+PTApaWYocD49LXUpaWYocDw9dSl7Y29uc3QgdD0xL2M7ZCo9dCxwKj10LG09ZCooZCthKnArMipyKStwKihhKmQrcCsyKnMpK2x9ZWxzZSBwPWksZD1NYXRoLm1heCgwLC0oYSpwK3IpKSxtPS1kKmQrcCoocCsyKnMpK2w7ZWxzZSBwPS1pLGQ9TWF0aC5tYXgoMCwtKGEqcCtyKSksbT0tZCpkK3AqKHArMipzKStsO2Vsc2UgcDw9LXU/KGQ9TWF0aC5tYXgoMCwtKC1hKmkrcikpLHA9ZD4wPy1pOk1hdGgubWluKE1hdGgubWF4KC1pLC1zKSxpKSxtPS1kKmQrcCoocCsyKnMpK2wpOnA8PXU/KGQ9MCxwPU1hdGgubWluKE1hdGgubWF4KC1pLC1zKSxpKSxtPXAqKHArMipzKStsKTooZD1NYXRoLm1heCgwLC0oYSppK3IpKSxwPWQ+MD9pOk1hdGgubWluKE1hdGgubWF4KC1pLC1zKSxpKSxtPS1kKmQrcCoocCsyKnMpK2wpO2Vsc2UgcD1hPjA/LWk6aSxkPU1hdGgubWF4KDAsLShhKnArcikpLG09LWQqZCtwKihwKzIqcykrbDtyZXR1cm4gbiYmbi5jb3B5KHRoaXMuZGlyZWN0aW9uKS5tdWx0aXBseVNjYWxhcihkKS5hZGQodGhpcy5vcmlnaW4pLG8mJm8uY29weShNYXQpLm11bHRpcGx5U2NhbGFyKHApLmFkZChDYXQpLG19aW50ZXJzZWN0U3BoZXJlKHQsZSl7X2F0LnN1YlZlY3RvcnModC5jZW50ZXIsdGhpcy5vcmlnaW4pO2NvbnN0IG49X2F0LmRvdCh0aGlzLmRpcmVjdGlvbiksbz1fYXQuZG90KF9hdCktbipuLGk9dC5yYWRpdXMqdC5yYWRpdXM7aWYobz5pKXJldHVybiBudWxsO2NvbnN0IGE9TWF0aC5zcXJ0KGktbykscj1uLWEscz1uK2E7cmV0dXJuIHI8MCYmczwwP251bGw6dGhpcy5hdChyPDA/czpyLGUpfWludGVyc2VjdHNTcGhlcmUodCl7cmV0dXJuIHRoaXMuZGlzdGFuY2VTcVRvUG9pbnQodC5jZW50ZXIpPD10LnJhZGl1cyp0LnJhZGl1c31kaXN0YW5jZVRvUGxhbmUodCl7Y29uc3QgZT10Lm5vcm1hbC5kb3QodGhpcy5kaXJlY3Rpb24pO2lmKDA9PT1lKXJldHVybiAwPT09dC5kaXN0YW5jZVRvUG9pbnQodGhpcy5vcmlnaW4pPzA6bnVsbDtjb25zdCBuPS0odGhpcy5vcmlnaW4uZG90KHQubm9ybWFsKSt0LmNvbnN0YW50KS9lO3JldHVybiBuPj0wP246bnVsbH1pbnRlcnNlY3RQbGFuZSh0LGUpe2NvbnN0IG49dGhpcy5kaXN0YW5jZVRvUGxhbmUodCk7cmV0dXJuIG51bGw9PT1uP251bGw6dGhpcy5hdChuLGUpfWludGVyc2VjdHNQbGFuZSh0KXtjb25zdCBlPXQuZGlzdGFuY2VUb1BvaW50KHRoaXMub3JpZ2luKTtyZXR1cm4gMD09PWV8fHQubm9ybWFsLmRvdCh0aGlzLmRpcmVjdGlvbikqZTwwfWludGVyc2VjdEJveCh0LGUpe2xldCBuLG8saSxhLHIscztjb25zdCBsPTEvdGhpcy5kaXJlY3Rpb24ueCxjPTEvdGhpcy5kaXJlY3Rpb24ueSxkPTEvdGhpcy5kaXJlY3Rpb24ueixwPXRoaXMub3JpZ2luO3JldHVybiBsPj0wPyhuPSh0Lm1pbi54LXAueCkqbCxvPSh0Lm1heC54LXAueCkqbCk6KG49KHQubWF4LngtcC54KSpsLG89KHQubWluLngtcC54KSpsKSxjPj0wPyhpPSh0Lm1pbi55LXAueSkqYyxhPSh0Lm1heC55LXAueSkqYyk6KGk9KHQubWF4LnktcC55KSpjLGE9KHQubWluLnktcC55KSpjKSxuPmF8fGk+bz9udWxsOigoaT5ufHxuIT1uKSYmKG49aSksKGE8b3x8byE9bykmJihvPWEpLGQ+PTA/KHI9KHQubWluLnotcC56KSpkLHM9KHQubWF4LnotcC56KSpkKToocj0odC5tYXguei1wLnopKmQscz0odC5taW4uei1wLnopKmQpLG4+c3x8cj5vP251bGw6KChyPm58fG4hPW4pJiYobj1yKSwoczxvfHxvIT1vKSYmKG89cyksbzwwP251bGw6dGhpcy5hdChuPj0wP246byxlKSkpfWludGVyc2VjdHNCb3godCl7cmV0dXJuIG51bGwhPT10aGlzLmludGVyc2VjdEJveCh0LF9hdCl9aW50ZXJzZWN0VHJpYW5nbGUodCxlLG4sbyxpKXt4YXQuc3ViVmVjdG9ycyhlLHQpLE9hdC5zdWJWZWN0b3JzKG4sdCksUGF0LmNyb3NzVmVjdG9ycyh4YXQsT2F0KTtsZXQgYSxyPXRoaXMuZGlyZWN0aW9uLmRvdChQYXQpO2lmKHI+MCl7aWYobylyZXR1cm4gbnVsbDthPTF9ZWxzZXtpZighKHI8MCkpcmV0dXJuIG51bGw7YT0tMSxyPS1yfXZhdC5zdWJWZWN0b3JzKHRoaXMub3JpZ2luLHQpO2NvbnN0IHM9YSp0aGlzLmRpcmVjdGlvbi5kb3QoT2F0LmNyb3NzVmVjdG9ycyh2YXQsT2F0KSk7aWYoczwwKXJldHVybiBudWxsO2NvbnN0IGw9YSp0aGlzLmRpcmVjdGlvbi5kb3QoeGF0LmNyb3NzKHZhdCkpO2lmKGw8MClyZXR1cm4gbnVsbDtpZihzK2w+cilyZXR1cm4gbnVsbDtjb25zdCBjPS1hKnZhdC5kb3QoUGF0KTtyZXR1cm4gYzwwP251bGw6dGhpcy5hdChjL3IsaSl9YXBwbHlNYXRyaXg0KHQpe3JldHVybiB0aGlzLm9yaWdpbi5hcHBseU1hdHJpeDQodCksdGhpcy5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKHQpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lm9yaWdpbi5lcXVhbHModGhpcy5vcmlnaW4pJiZ0LmRpcmVjdGlvbi5lcXVhbHModGhpcy5kaXJlY3Rpb24pfX1jbGFzcyBrYXR7Y29uc3RydWN0b3IoKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaXNNYXRyaXg0Iix7dmFsdWU6ITB9KSx0aGlzLmVsZW1lbnRzPVsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXSxhcmd1bWVudHMubGVuZ3RoPjAmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IHRoZSBjb25zdHJ1Y3RvciBubyBsb25nZXIgcmVhZHMgYXJndW1lbnRzLiB1c2UgLnNldCgpIGluc3RlYWQuIil9c2V0KHQsZSxuLG8saSxhLHIscyxsLGMsZCxwLG0sdSxmLGcpe2NvbnN0IGg9dGhpcy5lbGVtZW50cztyZXR1cm4gaFswXT10LGhbNF09ZSxoWzhdPW4saFsxMl09byxoWzFdPWksaFs1XT1hLGhbOV09cixoWzEzXT1zLGhbMl09bCxoWzZdPWMsaFsxMF09ZCxoWzE0XT1wLGhbM109bSxoWzddPXUsaFsxMV09ZixoWzE1XT1nLHRoaXN9aWRlbnRpdHkoKXtyZXR1cm4gdGhpcy5zZXQoMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMSksdGhpc31jbG9uZSgpe3JldHVybihuZXcga2F0KS5mcm9tQXJyYXkodGhpcy5lbGVtZW50cyl9Y29weSh0KXtjb25zdCBlPXRoaXMuZWxlbWVudHMsbj10LmVsZW1lbnRzO3JldHVybiBlWzBdPW5bMF0sZVsxXT1uWzFdLGVbMl09blsyXSxlWzNdPW5bM10sZVs0XT1uWzRdLGVbNV09bls1XSxlWzZdPW5bNl0sZVs3XT1uWzddLGVbOF09bls4XSxlWzldPW5bOV0sZVsxMF09blsxMF0sZVsxMV09blsxMV0sZVsxMl09blsxMl0sZVsxM109blsxM10sZVsxNF09blsxNF0sZVsxNV09blsxNV0sdGhpc31jb3B5UG9zaXRpb24odCl7Y29uc3QgZT10aGlzLmVsZW1lbnRzLG49dC5lbGVtZW50cztyZXR1cm4gZVsxMl09blsxMl0sZVsxM109blsxM10sZVsxNF09blsxNF0sdGhpc31zZXRGcm9tTWF0cml4Myh0KXtjb25zdCBlPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMuc2V0KGVbMF0sZVszXSxlWzZdLDAsZVsxXSxlWzRdLGVbN10sMCxlWzJdLGVbNV0sZVs4XSwwLDAsMCwwLDEpLHRoaXN9ZXh0cmFjdEJhc2lzKHQsZSxuKXtyZXR1cm4gdC5zZXRGcm9tTWF0cml4Q29sdW1uKHRoaXMsMCksZS5zZXRGcm9tTWF0cml4Q29sdW1uKHRoaXMsMSksbi5zZXRGcm9tTWF0cml4Q29sdW1uKHRoaXMsMiksdGhpc31tYWtlQmFzaXModCxlLG4pe3JldHVybiB0aGlzLnNldCh0LngsZS54LG4ueCwwLHQueSxlLnksbi55LDAsdC56LGUueixuLnosMCwwLDAsMCwxKSx0aGlzfWV4dHJhY3RSb3RhdGlvbih0KXtjb25zdCBlPXRoaXMuZWxlbWVudHMsbj10LmVsZW1lbnRzLG89MS9TYXQuc2V0RnJvbU1hdHJpeENvbHVtbih0LDApLmxlbmd0aCgpLGk9MS9TYXQuc2V0RnJvbU1hdHJpeENvbHVtbih0LDEpLmxlbmd0aCgpLGE9MS9TYXQuc2V0RnJvbU1hdHJpeENvbHVtbih0LDIpLmxlbmd0aCgpO3JldHVybiBlWzBdPW5bMF0qbyxlWzFdPW5bMV0qbyxlWzJdPW5bMl0qbyxlWzNdPTAsZVs0XT1uWzRdKmksZVs1XT1uWzVdKmksZVs2XT1uWzZdKmksZVs3XT0wLGVbOF09bls4XSphLGVbOV09bls5XSphLGVbMTBdPW5bMTBdKmEsZVsxMV09MCxlWzEyXT0wLGVbMTNdPTAsZVsxNF09MCxlWzE1XT0xLHRoaXN9bWFrZVJvdGF0aW9uRnJvbUV1bGVyKHQpe3QmJnQuaXNFdWxlcnx8Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLm1ha2VSb3RhdGlvbkZyb21FdWxlcigpIG5vdyBleHBlY3RzIGEgRXVsZXIgcm90YXRpb24gcmF0aGVyIHRoYW4gYSBWZWN0b3IzIGFuZCBvcmRlci4iKTtjb25zdCBlPXRoaXMuZWxlbWVudHMsbj10Lngsbz10LnksaT10LnosYT1NYXRoLmNvcyhuKSxyPU1hdGguc2luKG4pLHM9TWF0aC5jb3MobyksbD1NYXRoLnNpbihvKSxjPU1hdGguY29zKGkpLGQ9TWF0aC5zaW4oaSk7aWYoIlhZWiI9PT10Lm9yZGVyKXtjb25zdCB0PWEqYyxuPWEqZCxvPXIqYyxpPXIqZDtlWzBdPXMqYyxlWzRdPS1zKmQsZVs4XT1sLGVbMV09bitvKmwsZVs1XT10LWkqbCxlWzldPS1yKnMsZVsyXT1pLXQqbCxlWzZdPW8rbipsLGVbMTBdPWEqc31lbHNlIGlmKCJZWFoiPT09dC5vcmRlcil7Y29uc3QgdD1zKmMsbj1zKmQsbz1sKmMsaT1sKmQ7ZVswXT10K2kqcixlWzRdPW8qci1uLGVbOF09YSpsLGVbMV09YSpkLGVbNV09YSpjLGVbOV09LXIsZVsyXT1uKnItbyxlWzZdPWkrdCpyLGVbMTBdPWEqc31lbHNlIGlmKCJaWFkiPT09dC5vcmRlcil7Y29uc3QgdD1zKmMsbj1zKmQsbz1sKmMsaT1sKmQ7ZVswXT10LWkqcixlWzRdPS1hKmQsZVs4XT1vK24qcixlWzFdPW4rbypyLGVbNV09YSpjLGVbOV09aS10KnIsZVsyXT0tYSpsLGVbNl09cixlWzEwXT1hKnN9ZWxzZSBpZigiWllYIj09PXQub3JkZXIpe2NvbnN0IHQ9YSpjLG49YSpkLG89cipjLGk9cipkO2VbMF09cypjLGVbNF09bypsLW4sZVs4XT10KmwraSxlWzFdPXMqZCxlWzVdPWkqbCt0LGVbOV09bipsLW8sZVsyXT0tbCxlWzZdPXIqcyxlWzEwXT1hKnN9ZWxzZSBpZigiWVpYIj09PXQub3JkZXIpe2NvbnN0IHQ9YSpzLG49YSpsLG89cipzLGk9cipsO2VbMF09cypjLGVbNF09aS10KmQsZVs4XT1vKmQrbixlWzFdPWQsZVs1XT1hKmMsZVs5XT0tcipjLGVbMl09LWwqYyxlWzZdPW4qZCtvLGVbMTBdPXQtaSpkfWVsc2UgaWYoIlhaWSI9PT10Lm9yZGVyKXtjb25zdCB0PWEqcyxuPWEqbCxvPXIqcyxpPXIqbDtlWzBdPXMqYyxlWzRdPS1kLGVbOF09bCpjLGVbMV09dCpkK2ksZVs1XT1hKmMsZVs5XT1uKmQtbyxlWzJdPW8qZC1uLGVbNl09cipjLGVbMTBdPWkqZCt0fXJldHVybiBlWzNdPTAsZVs3XT0wLGVbMTFdPTAsZVsxMl09MCxlWzEzXT0wLGVbMTRdPTAsZVsxNV09MSx0aGlzfW1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKHQpe3JldHVybiB0aGlzLmNvbXBvc2UoRWF0LHQsQWF0KX1sb29rQXQodCxlLG4pe2NvbnN0IG89dGhpcy5lbGVtZW50cztyZXR1cm4gTmF0LnN1YlZlY3RvcnModCxlKSwwPT09TmF0Lmxlbmd0aFNxKCkmJihOYXQuej0xKSxOYXQubm9ybWFsaXplKCksUmF0LmNyb3NzVmVjdG9ycyhuLE5hdCksMD09PVJhdC5sZW5ndGhTcSgpJiYoMT09PU1hdGguYWJzKG4ueik/TmF0LngrPTFlLTQ6TmF0LnorPTFlLTQsTmF0Lm5vcm1hbGl6ZSgpLFJhdC5jcm9zc1ZlY3RvcnMobixOYXQpKSxSYXQubm9ybWFsaXplKCksVGF0LmNyb3NzVmVjdG9ycyhOYXQsUmF0KSxvWzBdPVJhdC54LG9bNF09VGF0Lngsb1s4XT1OYXQueCxvWzFdPVJhdC55LG9bNV09VGF0Lnksb1s5XT1OYXQueSxvWzJdPVJhdC56LG9bNl09VGF0Lnosb1sxMF09TmF0LnosdGhpc31tdWx0aXBseSh0LGUpe3JldHVybiB2b2lkIDAhPT1lPyhjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5tdWx0aXBseSgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLm11bHRpcGx5TWF0cmljZXMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMubXVsdGlwbHlNYXRyaWNlcyh0LGUpKTp0aGlzLm11bHRpcGx5TWF0cmljZXModGhpcyx0KX1wcmVtdWx0aXBseSh0KXtyZXR1cm4gdGhpcy5tdWx0aXBseU1hdHJpY2VzKHQsdGhpcyl9bXVsdGlwbHlNYXRyaWNlcyh0LGUpe2NvbnN0IG49dC5lbGVtZW50cyxvPWUuZWxlbWVudHMsaT10aGlzLmVsZW1lbnRzLGE9blswXSxyPW5bNF0scz1uWzhdLGw9blsxMl0sYz1uWzFdLGQ9bls1XSxwPW5bOV0sbT1uWzEzXSx1PW5bMl0sZj1uWzZdLGc9blsxMF0saD1uWzE0XSxiPW5bM10seT1uWzddLF89blsxMV0sQz1uWzE1XSxNPW9bMF0sdj1vWzRdLHg9b1s4XSxPPW9bMTJdLFA9b1sxXSx3PW9bNV0saz1vWzldLFM9b1sxM10sRD1vWzJdLEU9b1s2XSxBPW9bMTBdLFI9b1sxNF0sVD1vWzNdLE49b1s3XSxJPW9bMTFdLHo9b1sxNV07cmV0dXJuIGlbMF09YSpNK3IqUCtzKkQrbCpULGlbNF09YSp2K3IqdytzKkUrbCpOLGlbOF09YSp4K3IqaytzKkErbCpJLGlbMTJdPWEqTytyKlMrcypSK2wqeixpWzFdPWMqTStkKlArcCpEK20qVCxpWzVdPWMqditkKncrcCpFK20qTixpWzldPWMqeCtkKmsrcCpBK20qSSxpWzEzXT1jKk8rZCpTK3AqUittKnosaVsyXT11Kk0rZipQK2cqRCtoKlQsaVs2XT11KnYrZip3K2cqRStoKk4saVsxMF09dSp4K2YqaytnKkEraCpJLGlbMTRdPXUqTytmKlMrZypSK2gqeixpWzNdPWIqTSt5KlArXypEK0MqVCxpWzddPWIqdit5KncrXypFK0MqTixpWzExXT1iKngreSprK18qQStDKkksaVsxNV09YipPK3kqUytfKlIrQyp6LHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7Y29uc3QgZT10aGlzLmVsZW1lbnRzO3JldHVybiBlWzBdKj10LGVbNF0qPXQsZVs4XSo9dCxlWzEyXSo9dCxlWzFdKj10LGVbNV0qPXQsZVs5XSo9dCxlWzEzXSo9dCxlWzJdKj10LGVbNl0qPXQsZVsxMF0qPXQsZVsxNF0qPXQsZVszXSo9dCxlWzddKj10LGVbMTFdKj10LGVbMTVdKj10LHRoaXN9ZGV0ZXJtaW5hbnQoKXtjb25zdCB0PXRoaXMuZWxlbWVudHMsZT10WzBdLG49dFs0XSxvPXRbOF0saT10WzEyXSxhPXRbMV0scj10WzVdLHM9dFs5XSxsPXRbMTNdLGM9dFsyXSxkPXRbNl0scD10WzEwXSxtPXRbMTRdO3JldHVybiB0WzNdKigraSpzKmQtbypsKmQtaSpyKnArbipsKnArbypyKm0tbipzKm0pK3RbN10qKCtlKnMqbS1lKmwqcCtpKmEqcC1vKmEqbStvKmwqYy1pKnMqYykrdFsxMV0qKCtlKmwqZC1lKnIqbS1pKmEqZCtuKmEqbStpKnIqYy1uKmwqYykrdFsxNV0qKC1vKnIqYy1lKnMqZCtlKnIqcCtvKmEqZC1uKmEqcCtuKnMqYyl9dHJhbnNwb3NlKCl7Y29uc3QgdD10aGlzLmVsZW1lbnRzO2xldCBlO3JldHVybiBlPXRbMV0sdFsxXT10WzRdLHRbNF09ZSxlPXRbMl0sdFsyXT10WzhdLHRbOF09ZSxlPXRbNl0sdFs2XT10WzldLHRbOV09ZSxlPXRbM10sdFszXT10WzEyXSx0WzEyXT1lLGU9dFs3XSx0WzddPXRbMTNdLHRbMTNdPWUsZT10WzExXSx0WzExXT10WzE0XSx0WzE0XT1lLHRoaXN9c2V0UG9zaXRpb24odCxlLG4pe2NvbnN0IG89dGhpcy5lbGVtZW50cztyZXR1cm4gdC5pc1ZlY3RvcjM/KG9bMTJdPXQueCxvWzEzXT10Lnksb1sxNF09dC56KToob1sxMl09dCxvWzEzXT1lLG9bMTRdPW4pLHRoaXN9aW52ZXJ0KCl7Y29uc3QgdD10aGlzLmVsZW1lbnRzLGU9dFswXSxuPXRbMV0sbz10WzJdLGk9dFszXSxhPXRbNF0scj10WzVdLHM9dFs2XSxsPXRbN10sYz10WzhdLGQ9dFs5XSxwPXRbMTBdLG09dFsxMV0sdT10WzEyXSxmPXRbMTNdLGc9dFsxNF0saD10WzE1XSxiPWQqZypsLWYqcCpsK2YqcyptLXIqZyptLWQqcypoK3IqcCpoLHk9dSpwKmwtYypnKmwtdSpzKm0rYSpnKm0rYypzKmgtYSpwKmgsXz1jKmYqbC11KmQqbCt1KnIqbS1hKmYqbS1jKnIqaCthKmQqaCxDPXUqZCpzLWMqZipzLXUqcipwK2EqZipwK2MqcipnLWEqZCpnLE09ZSpiK24qeStvKl8raSpDO2lmKDA9PT1NKXJldHVybiB0aGlzLnNldCgwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwKTtjb25zdCB2PTEvTTtyZXR1cm4gdFswXT1iKnYsdFsxXT0oZipwKmktZCpnKmktZipvKm0rbipnKm0rZCpvKmgtbipwKmgpKnYsdFsyXT0ocipnKmktZipzKmkrZipvKmwtbipnKmwtcipvKmgrbipzKmgpKnYsdFszXT0oZCpzKmktcipwKmktZCpvKmwrbipwKmwrcipvKm0tbipzKm0pKnYsdFs0XT15KnYsdFs1XT0oYypnKmktdSpwKmkrdSpvKm0tZSpnKm0tYypvKmgrZSpwKmgpKnYsdFs2XT0odSpzKmktYSpnKmktdSpvKmwrZSpnKmwrYSpvKmgtZSpzKmgpKnYsdFs3XT0oYSpwKmktYypzKmkrYypvKmwtZSpwKmwtYSpvKm0rZSpzKm0pKnYsdFs4XT1fKnYsdFs5XT0odSpkKmktYypmKmktdSpuKm0rZSpmKm0rYypuKmgtZSpkKmgpKnYsdFsxMF09KGEqZippLXUqcippK3UqbipsLWUqZipsLWEqbipoK2UqcipoKSp2LHRbMTFdPShjKnIqaS1hKmQqaS1jKm4qbCtlKmQqbCthKm4qbS1lKnIqbSkqdix0WzEyXT1DKnYsdFsxM109KGMqZipvLXUqZCpvK3UqbipwLWUqZipwLWMqbipnK2UqZCpnKSp2LHRbMTRdPSh1KnIqby1hKmYqby11Km4qcytlKmYqcythKm4qZy1lKnIqZykqdix0WzE1XT0oYSpkKm8tYypyKm8rYypuKnMtZSpkKnMtYSpuKnArZSpyKnApKnYsdGhpc31zY2FsZSh0KXtjb25zdCBlPXRoaXMuZWxlbWVudHMsbj10Lngsbz10LnksaT10Lno7cmV0dXJuIGVbMF0qPW4sZVs0XSo9byxlWzhdKj1pLGVbMV0qPW4sZVs1XSo9byxlWzldKj1pLGVbMl0qPW4sZVs2XSo9byxlWzEwXSo9aSxlWzNdKj1uLGVbN10qPW8sZVsxMV0qPWksdGhpc31nZXRNYXhTY2FsZU9uQXhpcygpe2NvbnN0IHQ9dGhpcy5lbGVtZW50cztyZXR1cm4gTWF0aC5zcXJ0KE1hdGgubWF4KHRbMF0qdFswXSt0WzFdKnRbMV0rdFsyXSp0WzJdLHRbNF0qdFs0XSt0WzVdKnRbNV0rdFs2XSp0WzZdLHRbOF0qdFs4XSt0WzldKnRbOV0rdFsxMF0qdFsxMF0pKX1tYWtlVHJhbnNsYXRpb24odCxlLG4pe3JldHVybiB0aGlzLnNldCgxLDAsMCx0LDAsMSwwLGUsMCwwLDEsbiwwLDAsMCwxKSx0aGlzfW1ha2VSb3RhdGlvblgodCl7Y29uc3QgZT1NYXRoLmNvcyh0KSxuPU1hdGguc2luKHQpO3JldHVybiB0aGlzLnNldCgxLDAsMCwwLDAsZSwtbiwwLDAsbixlLDAsMCwwLDAsMSksdGhpc31tYWtlUm90YXRpb25ZKHQpe2NvbnN0IGU9TWF0aC5jb3ModCksbj1NYXRoLnNpbih0KTtyZXR1cm4gdGhpcy5zZXQoZSwwLG4sMCwwLDEsMCwwLC1uLDAsZSwwLDAsMCwwLDEpLHRoaXN9bWFrZVJvdGF0aW9uWih0KXtjb25zdCBlPU1hdGguY29zKHQpLG49TWF0aC5zaW4odCk7cmV0dXJuIHRoaXMuc2V0KGUsLW4sMCwwLG4sZSwwLDAsMCwwLDEsMCwwLDAsMCwxKSx0aGlzfW1ha2VSb3RhdGlvbkF4aXModCxlKXtjb25zdCBuPU1hdGguY29zKGUpLG89TWF0aC5zaW4oZSksaT0xLW4sYT10Lngscj10Lnkscz10LnosbD1pKmEsYz1pKnI7cmV0dXJuIHRoaXMuc2V0KGwqYStuLGwqci1vKnMsbCpzK28qciwwLGwqcitvKnMsYypyK24sYypzLW8qYSwwLGwqcy1vKnIsYypzK28qYSxpKnMqcytuLDAsMCwwLDAsMSksdGhpc31tYWtlU2NhbGUodCxlLG4pe3JldHVybiB0aGlzLnNldCh0LDAsMCwwLDAsZSwwLDAsMCwwLG4sMCwwLDAsMCwxKSx0aGlzfW1ha2VTaGVhcih0LGUsbil7cmV0dXJuIHRoaXMuc2V0KDEsZSxuLDAsdCwxLG4sMCx0LGUsMSwwLDAsMCwwLDEpLHRoaXN9Y29tcG9zZSh0LGUsbil7Y29uc3Qgbz10aGlzLmVsZW1lbnRzLGk9ZS5feCxhPWUuX3kscj1lLl96LHM9ZS5fdyxsPWkraSxjPWErYSxkPXIrcixwPWkqbCxtPWkqYyx1PWkqZCxmPWEqYyxnPWEqZCxoPXIqZCxiPXMqbCx5PXMqYyxfPXMqZCxDPW4ueCxNPW4ueSx2PW4uejtyZXR1cm4gb1swXT0oMS0oZitoKSkqQyxvWzFdPShtK18pKkMsb1syXT0odS15KSpDLG9bM109MCxvWzRdPShtLV8pKk0sb1s1XT0oMS0ocCtoKSkqTSxvWzZdPShnK2IpKk0sb1s3XT0wLG9bOF09KHUreSkqdixvWzldPShnLWIpKnYsb1sxMF09KDEtKHArZikpKnYsb1sxMV09MCxvWzEyXT10Lngsb1sxM109dC55LG9bMTRdPXQueixvWzE1XT0xLHRoaXN9ZGVjb21wb3NlKHQsZSxuKXtjb25zdCBvPXRoaXMuZWxlbWVudHM7bGV0IGk9U2F0LnNldChvWzBdLG9bMV0sb1syXSkubGVuZ3RoKCk7Y29uc3QgYT1TYXQuc2V0KG9bNF0sb1s1XSxvWzZdKS5sZW5ndGgoKSxyPVNhdC5zZXQob1s4XSxvWzldLG9bMTBdKS5sZW5ndGgoKTt0aGlzLmRldGVybWluYW50KCk8MCYmKGk9LWkpLHQueD1vWzEyXSx0Lnk9b1sxM10sdC56PW9bMTRdLERhdC5jb3B5KHRoaXMpO2NvbnN0IHM9MS9pLGw9MS9hLGM9MS9yO3JldHVybiBEYXQuZWxlbWVudHNbMF0qPXMsRGF0LmVsZW1lbnRzWzFdKj1zLERhdC5lbGVtZW50c1syXSo9cyxEYXQuZWxlbWVudHNbNF0qPWwsRGF0LmVsZW1lbnRzWzVdKj1sLERhdC5lbGVtZW50c1s2XSo9bCxEYXQuZWxlbWVudHNbOF0qPWMsRGF0LmVsZW1lbnRzWzldKj1jLERhdC5lbGVtZW50c1sxMF0qPWMsZS5zZXRGcm9tUm90YXRpb25NYXRyaXgoRGF0KSxuLng9aSxuLnk9YSxuLno9cix0aGlzfW1ha2VQZXJzcGVjdGl2ZSh0LGUsbixvLGksYSl7dm9pZCAwPT09YSYmY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubWFrZVBlcnNwZWN0aXZlKCkgaGFzIGJlZW4gcmVkZWZpbmVkIGFuZCBoYXMgYSBuZXcgc2lnbmF0dXJlLiBQbGVhc2UgY2hlY2sgdGhlIGRvY3MuIik7Y29uc3Qgcj10aGlzLmVsZW1lbnRzLHM9MippLyhuLW8pLGw9KGUrdCkvKGUtdCksYz0obitvKS8obi1vKSxkPS0oYStpKS8oYS1pKSxwPS0yKmEqaS8oYS1pKTtyZXR1cm4gclswXT0yKmkvKGUtdCkscls0XT0wLHJbOF09bCxyWzEyXT0wLHJbMV09MCxyWzVdPXMscls5XT1jLHJbMTNdPTAsclsyXT0wLHJbNl09MCxyWzEwXT1kLHJbMTRdPXAsclszXT0wLHJbN109MCxyWzExXT0tMSxyWzE1XT0wLHRoaXN9bWFrZU9ydGhvZ3JhcGhpYyh0LGUsbixvLGksYSl7Y29uc3Qgcj10aGlzLmVsZW1lbnRzLHM9MS8oZS10KSxsPTEvKG4tbyksYz0xLyhhLWkpLGQ9KGUrdCkqcyxwPShuK28pKmwsbT0oYStpKSpjO3JldHVybiByWzBdPTIqcyxyWzRdPTAscls4XT0wLHJbMTJdPS1kLHJbMV09MCxyWzVdPTIqbCxyWzldPTAsclsxM109LXAsclsyXT0wLHJbNl09MCxyWzEwXT0tMipjLHJbMTRdPS1tLHJbM109MCxyWzddPTAsclsxMV09MCxyWzE1XT0xLHRoaXN9ZXF1YWxzKHQpe2NvbnN0IGU9dGhpcy5lbGVtZW50cyxuPXQuZWxlbWVudHM7Zm9yKGxldCB0PTA7dDwxNjt0KyspaWYoZVt0XSE9PW5bdF0pcmV0dXJuITE7cmV0dXJuITB9ZnJvbUFycmF5KHQsZT0wKXtmb3IobGV0IG49MDtuPDE2O24rKyl0aGlzLmVsZW1lbnRzW25dPXRbbitlXTtyZXR1cm4gdGhpc310b0FycmF5KHQ9W10sZT0wKXtjb25zdCBuPXRoaXMuZWxlbWVudHM7cmV0dXJuIHRbZV09blswXSx0W2UrMV09blsxXSx0W2UrMl09blsyXSx0W2UrM109blszXSx0W2UrNF09bls0XSx0W2UrNV09bls1XSx0W2UrNl09bls2XSx0W2UrN109bls3XSx0W2UrOF09bls4XSx0W2UrOV09bls5XSx0W2UrMTBdPW5bMTBdLHRbZSsxMV09blsxMV0sdFtlKzEyXT1uWzEyXSx0W2UrMTNdPW5bMTNdLHRbZSsxNF09blsxNF0sdFtlKzE1XT1uWzE1XSx0fX1jb25zdCBTYXQ9bmV3ICRpdCxEYXQ9bmV3IGthdCxFYXQ9bmV3ICRpdCgwLDAsMCksQWF0PW5ldyAkaXQoMSwxLDEpLFJhdD1uZXcgJGl0LFRhdD1uZXcgJGl0LE5hdD1uZXcgJGl0O2NsYXNzIElhdHtjb25zdHJ1Y3Rvcih0PTAsZT0wLG49MCxvPUlhdC5EZWZhdWx0T3JkZXIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpc0V1bGVyIix7dmFsdWU6ITB9KSx0aGlzLl94PXQsdGhpcy5feT1lLHRoaXMuX3o9bix0aGlzLl9vcmRlcj1vfWdldCB4KCl7cmV0dXJuIHRoaXMuX3h9c2V0IHgodCl7dGhpcy5feD10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgeSgpe3JldHVybiB0aGlzLl95fXNldCB5KHQpe3RoaXMuX3k9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IHooKXtyZXR1cm4gdGhpcy5fen1zZXQgeih0KXt0aGlzLl96PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCBvcmRlcigpe3JldHVybiB0aGlzLl9vcmRlcn1zZXQgb3JkZXIodCl7dGhpcy5fb3JkZXI9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9c2V0KHQsZSxuLG8pe3JldHVybiB0aGlzLl94PXQsdGhpcy5feT1lLHRoaXMuX3o9bix0aGlzLl9vcmRlcj1vfHx0aGlzLl9vcmRlcix0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLl94LHRoaXMuX3ksdGhpcy5feix0aGlzLl9vcmRlcil9Y29weSh0KXtyZXR1cm4gdGhpcy5feD10Ll94LHRoaXMuX3k9dC5feSx0aGlzLl96PXQuX3osdGhpcy5fb3JkZXI9dC5fb3JkZXIsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbVJvdGF0aW9uTWF0cml4KHQsZSxuKXtjb25zdCBvPWppdC5jbGFtcCxpPXQuZWxlbWVudHMsYT1pWzBdLHI9aVs0XSxzPWlbOF0sbD1pWzFdLGM9aVs1XSxkPWlbOV0scD1pWzJdLG09aVs2XSx1PWlbMTBdO3N3aXRjaChlPWV8fHRoaXMuX29yZGVyKXtjYXNlIlhZWiI6dGhpcy5feT1NYXRoLmFzaW4obyhzLC0xLDEpKSxNYXRoLmFicyhzKTwuOTk5OTk5OT8odGhpcy5feD1NYXRoLmF0YW4yKC1kLHUpLHRoaXMuX3o9TWF0aC5hdGFuMigtcixhKSk6KHRoaXMuX3g9TWF0aC5hdGFuMihtLGMpLHRoaXMuX3o9MCk7YnJlYWs7Y2FzZSJZWFoiOnRoaXMuX3g9TWF0aC5hc2luKC1vKGQsLTEsMSkpLE1hdGguYWJzKGQpPC45OTk5OTk5Pyh0aGlzLl95PU1hdGguYXRhbjIocyx1KSx0aGlzLl96PU1hdGguYXRhbjIobCxjKSk6KHRoaXMuX3k9TWF0aC5hdGFuMigtcCxhKSx0aGlzLl96PTApO2JyZWFrO2Nhc2UiWlhZIjp0aGlzLl94PU1hdGguYXNpbihvKG0sLTEsMSkpLE1hdGguYWJzKG0pPC45OTk5OTk5Pyh0aGlzLl95PU1hdGguYXRhbjIoLXAsdSksdGhpcy5fej1NYXRoLmF0YW4yKC1yLGMpKToodGhpcy5feT0wLHRoaXMuX3o9TWF0aC5hdGFuMihsLGEpKTticmVhaztjYXNlIlpZWCI6dGhpcy5feT1NYXRoLmFzaW4oLW8ocCwtMSwxKSksTWF0aC5hYnMocCk8Ljk5OTk5OTk/KHRoaXMuX3g9TWF0aC5hdGFuMihtLHUpLHRoaXMuX3o9TWF0aC5hdGFuMihsLGEpKToodGhpcy5feD0wLHRoaXMuX3o9TWF0aC5hdGFuMigtcixjKSk7YnJlYWs7Y2FzZSJZWlgiOnRoaXMuX3o9TWF0aC5hc2luKG8obCwtMSwxKSksTWF0aC5hYnMobCk8Ljk5OTk5OTk/KHRoaXMuX3g9TWF0aC5hdGFuMigtZCxjKSx0aGlzLl95PU1hdGguYXRhbjIoLXAsYSkpOih0aGlzLl94PTAsdGhpcy5feT1NYXRoLmF0YW4yKHMsdSkpO2JyZWFrO2Nhc2UiWFpZIjp0aGlzLl96PU1hdGguYXNpbigtbyhyLC0xLDEpKSxNYXRoLmFicyhyKTwuOTk5OTk5OT8odGhpcy5feD1NYXRoLmF0YW4yKG0sYyksdGhpcy5feT1NYXRoLmF0YW4yKHMsYSkpOih0aGlzLl94PU1hdGguYXRhbjIoLWQsdSksdGhpcy5feT0wKTticmVhaztkZWZhdWx0OmNvbnNvbGUud2FybigiVEhSRUUuRXVsZXI6IC5zZXRGcm9tUm90YXRpb25NYXRyaXgoKSBlbmNvdW50ZXJlZCBhbiB1bmtub3duIG9yZGVyOiAiK2UpfXJldHVybiB0aGlzLl9vcmRlcj1lLCExIT09biYmdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbVF1YXRlcm5pb24odCxlLG4pe3JldHVybiB6YXQubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24odCksdGhpcy5zZXRGcm9tUm90YXRpb25NYXRyaXgoemF0LGUsbil9c2V0RnJvbVZlY3RvcjModCxlKXtyZXR1cm4gdGhpcy5zZXQodC54LHQueSx0LnosZXx8dGhpcy5fb3JkZXIpfXJlb3JkZXIodCl7cmV0dXJuIEhhdC5zZXRGcm9tRXVsZXIodGhpcyksdGhpcy5zZXRGcm9tUXVhdGVybmlvbihIYXQsdCl9ZXF1YWxzKHQpe3JldHVybiB0Ll94PT09dGhpcy5feCYmdC5feT09PXRoaXMuX3kmJnQuX3o9PT10aGlzLl96JiZ0Ll9vcmRlcj09PXRoaXMuX29yZGVyfWZyb21BcnJheSh0KXtyZXR1cm4gdGhpcy5feD10WzBdLHRoaXMuX3k9dFsxXSx0aGlzLl96PXRbMl0sdm9pZCAwIT09dFszXSYmKHRoaXMuX29yZGVyPXRbM10pLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXRvQXJyYXkodD1bXSxlPTApe3JldHVybiB0W2VdPXRoaXMuX3gsdFtlKzFdPXRoaXMuX3ksdFtlKzJdPXRoaXMuX3osdFtlKzNdPXRoaXMuX29yZGVyLHR9dG9WZWN0b3IzKHQpe3JldHVybiB0P3Quc2V0KHRoaXMuX3gsdGhpcy5feSx0aGlzLl96KTpuZXcgJGl0KHRoaXMuX3gsdGhpcy5feSx0aGlzLl96KX1fb25DaGFuZ2UodCl7cmV0dXJuIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2s9dCx0aGlzfV9vbkNoYW5nZUNhbGxiYWNrKCl7fX1JYXQuRGVmYXVsdE9yZGVyPSJYWVoiLElhdC5Sb3RhdGlvbk9yZGVycz1bIlhZWiIsIllaWCIsIlpYWSIsIlhaWSIsIllYWiIsIlpZWCJdO2NvbnN0IHphdD1uZXcga2F0LEhhdD1uZXcgUWl0O2NsYXNzIEZhdHtjb25zdHJ1Y3Rvcigpe3RoaXMubWFzaz0xfXNldCh0KXt0aGlzLm1hc2s9MTw8dHwwfWVuYWJsZSh0KXt0aGlzLm1hc2t8PTE8PHR8MH1lbmFibGVBbGwoKXt0aGlzLm1hc2s9LTF9dG9nZ2xlKHQpe3RoaXMubWFza149MTw8dHwwfWRpc2FibGUodCl7dGhpcy5tYXNrJj1+KDE8PHR8MCl9ZGlzYWJsZUFsbCgpe3RoaXMubWFzaz0wfXRlc3QodCl7cmV0dXJuIDAhPSh0aGlzLm1hc2smdC5tYXNrKX19bGV0IExhdD0wO2NvbnN0IEJhdD1uZXcgJGl0LFZhdD1uZXcgUWl0LGphdD1uZXcga2F0LFVhdD1uZXcgJGl0LFdhdD1uZXcgJGl0LEdhdD1uZXcgJGl0LFlhdD1uZXcgUWl0LHFhdD1uZXcgJGl0KDEsMCwwKSxaYXQ9bmV3ICRpdCgwLDEsMCksWGF0PW5ldyAkaXQoMCwwLDEpLEthdD17dHlwZToiYWRkZWQifSxKYXQ9e3R5cGU6InJlbW92ZWQifTtmdW5jdGlvbiBRYXQoKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTpMYXQrK30pLHRoaXMudXVpZD1qaXQuZ2VuZXJhdGVVVUlEKCksdGhpcy5uYW1lPSIiLHRoaXMudHlwZT0iT2JqZWN0M0QiLHRoaXMucGFyZW50PW51bGwsdGhpcy5jaGlsZHJlbj1bXSx0aGlzLnVwPVFhdC5EZWZhdWx0VXAuY2xvbmUoKTtjb25zdCB0PW5ldyAkaXQsZT1uZXcgSWF0LG49bmV3IFFpdCxvPW5ldyAkaXQoMSwxLDEpO2UuX29uQ2hhbmdlKChmdW5jdGlvbiBpKCl7bi5zZXRGcm9tRXVsZXIoZSwhMSl9KSksbi5fb25DaGFuZ2UoKGZ1bmN0aW9uIGEoKXtlLnNldEZyb21RdWF0ZXJuaW9uKG4sdm9pZCAwLCExKX0pKSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLHtwb3NpdGlvbjp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6dH0scm90YXRpb246e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOmV9LHF1YXRlcm5pb246e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOm59LHNjYWxlOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpvfSxtb2RlbFZpZXdNYXRyaXg6e3ZhbHVlOm5ldyBrYXR9LG5vcm1hbE1hdHJpeDp7dmFsdWU6bmV3IFdpdH19KSx0aGlzLm1hdHJpeD1uZXcga2F0LHRoaXMubWF0cml4V29ybGQ9bmV3IGthdCx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9UWF0LkRlZmF1bHRNYXRyaXhBdXRvVXBkYXRlLHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMSx0aGlzLmxheWVycz1uZXcgRmF0LHRoaXMudmlzaWJsZT0hMCx0aGlzLmNhc3RTaGFkb3c9ITEsdGhpcy5yZWNlaXZlU2hhZG93PSExLHRoaXMuZnJ1c3R1bUN1bGxlZD0hMCx0aGlzLnJlbmRlck9yZGVyPTAsdGhpcy5hbmltYXRpb25zPVtdLHRoaXMudXNlckRhdGE9e319UWF0LkRlZmF1bHRVcD1uZXcgJGl0KDAsMSwwKSxRYXQuRGVmYXVsdE1hdHJpeEF1dG9VcGRhdGU9ITAsUWF0LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoTGl0LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOlFhdCxpc09iamVjdDNEOiEwLG9uQmVmb3JlUmVuZGVyOmZ1bmN0aW9uKCl7fSxvbkFmdGVyUmVuZGVyOmZ1bmN0aW9uKCl7fSxhcHBseU1hdHJpeDQ6ZnVuY3Rpb24odCl7dGhpcy5tYXRyaXhBdXRvVXBkYXRlJiZ0aGlzLnVwZGF0ZU1hdHJpeCgpLHRoaXMubWF0cml4LnByZW11bHRpcGx5KHQpLHRoaXMubWF0cml4LmRlY29tcG9zZSh0aGlzLnBvc2l0aW9uLHRoaXMucXVhdGVybmlvbix0aGlzLnNjYWxlKX0sYXBwbHlRdWF0ZXJuaW9uOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnF1YXRlcm5pb24ucHJlbXVsdGlwbHkodCksdGhpc30sc2V0Um90YXRpb25Gcm9tQXhpc0FuZ2xlOmZ1bmN0aW9uKHQsZSl7dGhpcy5xdWF0ZXJuaW9uLnNldEZyb21BeGlzQW5nbGUodCxlKX0sc2V0Um90YXRpb25Gcm9tRXVsZXI6ZnVuY3Rpb24odCl7dGhpcy5xdWF0ZXJuaW9uLnNldEZyb21FdWxlcih0LCEwKX0sc2V0Um90YXRpb25Gcm9tTWF0cml4OmZ1bmN0aW9uKHQpe3RoaXMucXVhdGVybmlvbi5zZXRGcm9tUm90YXRpb25NYXRyaXgodCl9LHNldFJvdGF0aW9uRnJvbVF1YXRlcm5pb246ZnVuY3Rpb24odCl7dGhpcy5xdWF0ZXJuaW9uLmNvcHkodCl9LHJvdGF0ZU9uQXhpczpmdW5jdGlvbih0LGUpe3JldHVybiBWYXQuc2V0RnJvbUF4aXNBbmdsZSh0LGUpLHRoaXMucXVhdGVybmlvbi5tdWx0aXBseShWYXQpLHRoaXN9LHJvdGF0ZU9uV29ybGRBeGlzOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIFZhdC5zZXRGcm9tQXhpc0FuZ2xlKHQsZSksdGhpcy5xdWF0ZXJuaW9uLnByZW11bHRpcGx5KFZhdCksdGhpc30scm90YXRlWDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5yb3RhdGVPbkF4aXMocWF0LHQpfSxyb3RhdGVZOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnJvdGF0ZU9uQXhpcyhaYXQsdCl9LHJvdGF0ZVo6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucm90YXRlT25BeGlzKFhhdCx0KX0sdHJhbnNsYXRlT25BeGlzOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIEJhdC5jb3B5KHQpLmFwcGx5UXVhdGVybmlvbih0aGlzLnF1YXRlcm5pb24pLHRoaXMucG9zaXRpb24uYWRkKEJhdC5tdWx0aXBseVNjYWxhcihlKSksdGhpc30sdHJhbnNsYXRlWDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50cmFuc2xhdGVPbkF4aXMocWF0LHQpfSx0cmFuc2xhdGVZOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRyYW5zbGF0ZU9uQXhpcyhaYXQsdCl9LHRyYW5zbGF0ZVo6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudHJhbnNsYXRlT25BeGlzKFhhdCx0KX0sbG9jYWxUb1dvcmxkOmZ1bmN0aW9uKHQpe3JldHVybiB0LmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKX0sd29ybGRUb0xvY2FsOmZ1bmN0aW9uKHQpe3JldHVybiB0LmFwcGx5TWF0cml4NChqYXQuY29weSh0aGlzLm1hdHJpeFdvcmxkKS5pbnZlcnQoKSl9LGxvb2tBdDpmdW5jdGlvbih0LGUsbil7dC5pc1ZlY3RvcjM/VWF0LmNvcHkodCk6VWF0LnNldCh0LGUsbik7Y29uc3Qgbz10aGlzLnBhcmVudDt0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSxXYXQuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubWF0cml4V29ybGQpLHRoaXMuaXNDYW1lcmF8fHRoaXMuaXNMaWdodD9qYXQubG9va0F0KFdhdCxVYXQsdGhpcy51cCk6amF0Lmxvb2tBdChVYXQsV2F0LHRoaXMudXApLHRoaXMucXVhdGVybmlvbi5zZXRGcm9tUm90YXRpb25NYXRyaXgoamF0KSxvJiYoamF0LmV4dHJhY3RSb3RhdGlvbihvLm1hdHJpeFdvcmxkKSxWYXQuc2V0RnJvbVJvdGF0aW9uTWF0cml4KGphdCksdGhpcy5xdWF0ZXJuaW9uLnByZW11bHRpcGx5KFZhdC5pbnZlcnQoKSkpfSxhZGQ6ZnVuY3Rpb24odCl7aWYoYXJndW1lbnRzLmxlbmd0aD4xKXtmb3IobGV0IHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXRoaXMuYWRkKGFyZ3VtZW50c1t0XSk7cmV0dXJuIHRoaXN9cmV0dXJuIHQ9PT10aGlzPyhjb25zb2xlLmVycm9yKCJUSFJFRS5PYmplY3QzRC5hZGQ6IG9iamVjdCBjYW4ndCBiZSBhZGRlZCBhcyBhIGNoaWxkIG9mIGl0c2VsZi4iLHQpLHRoaXMpOih0JiZ0LmlzT2JqZWN0M0Q/KG51bGwhPT10LnBhcmVudCYmdC5wYXJlbnQucmVtb3ZlKHQpLHQucGFyZW50PXRoaXMsdGhpcy5jaGlsZHJlbi5wdXNoKHQpLHQuZGlzcGF0Y2hFdmVudChLYXQpKTpjb25zb2xlLmVycm9yKCJUSFJFRS5PYmplY3QzRC5hZGQ6IG9iamVjdCBub3QgYW4gaW5zdGFuY2Ugb2YgVEhSRUUuT2JqZWN0M0QuIix0KSx0aGlzKX0scmVtb3ZlOmZ1bmN0aW9uKHQpe2lmKGFyZ3VtZW50cy5sZW5ndGg+MSl7Zm9yKGxldCB0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl0aGlzLnJlbW92ZShhcmd1bWVudHNbdF0pO3JldHVybiB0aGlzfWNvbnN0IGU9dGhpcy5jaGlsZHJlbi5pbmRleE9mKHQpO3JldHVybi0xIT09ZSYmKHQucGFyZW50PW51bGwsdGhpcy5jaGlsZHJlbi5zcGxpY2UoZSwxKSx0LmRpc3BhdGNoRXZlbnQoSmF0KSksdGhpc30sY2xlYXI6ZnVuY3Rpb24oKXtmb3IobGV0IHQ9MDt0PHRoaXMuY2hpbGRyZW4ubGVuZ3RoO3QrKyl7Y29uc3QgZT10aGlzLmNoaWxkcmVuW3RdO2UucGFyZW50PW51bGwsZS5kaXNwYXRjaEV2ZW50KEphdCl9cmV0dXJuIHRoaXMuY2hpbGRyZW4ubGVuZ3RoPTAsdGhpc30sYXR0YWNoOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSxqYXQuY29weSh0aGlzLm1hdHJpeFdvcmxkKS5pbnZlcnQoKSxudWxsIT09dC5wYXJlbnQmJih0LnBhcmVudC51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksamF0Lm11bHRpcGx5KHQucGFyZW50Lm1hdHJpeFdvcmxkKSksdC5hcHBseU1hdHJpeDQoamF0KSx0LnVwZGF0ZVdvcmxkTWF0cml4KCExLCExKSx0aGlzLmFkZCh0KSx0aGlzfSxnZXRPYmplY3RCeUlkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmdldE9iamVjdEJ5UHJvcGVydHkoImlkIix0KX0sZ2V0T2JqZWN0QnlOYW1lOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmdldE9iamVjdEJ5UHJvcGVydHkoIm5hbWUiLHQpfSxnZXRPYmplY3RCeVByb3BlcnR5OmZ1bmN0aW9uKHQsZSl7aWYodGhpc1t0XT09PWUpcmV0dXJuIHRoaXM7Zm9yKGxldCBuPTAsbz10aGlzLmNoaWxkcmVuLmxlbmd0aDtuPG87bisrKXtjb25zdCBvPXRoaXMuY2hpbGRyZW5bbl0uZ2V0T2JqZWN0QnlQcm9wZXJ0eSh0LGUpO2lmKHZvaWQgMCE9PW8pcmV0dXJuIG99fSxnZXRXb3JsZFBvc2l0aW9uOmZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYoY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLmdldFdvcmxkUG9zaXRpb24oKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIiksdD1uZXcgJGl0KSx0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSx0LnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1hdHJpeFdvcmxkKX0sZ2V0V29ybGRRdWF0ZXJuaW9uOmZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYoY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLmdldFdvcmxkUXVhdGVybmlvbigpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSx0PW5ldyBRaXQpLHRoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLHRoaXMubWF0cml4V29ybGQuZGVjb21wb3NlKFdhdCx0LEdhdCksdH0sZ2V0V29ybGRTY2FsZTpmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKGNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5nZXRXb3JsZFNjYWxlKCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLHQ9bmV3ICRpdCksdGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksdGhpcy5tYXRyaXhXb3JsZC5kZWNvbXBvc2UoV2F0LFlhdCx0KSx0fSxnZXRXb3JsZERpcmVjdGlvbjpmdW5jdGlvbih0KXt2b2lkIDA9PT10JiYoY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLmdldFdvcmxkRGlyZWN0aW9uKCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLHQ9bmV3ICRpdCksdGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSk7Y29uc3QgZT10aGlzLm1hdHJpeFdvcmxkLmVsZW1lbnRzO3JldHVybiB0LnNldChlWzhdLGVbOV0sZVsxMF0pLm5vcm1hbGl6ZSgpfSxyYXljYXN0OmZ1bmN0aW9uKCl7fSx0cmF2ZXJzZTpmdW5jdGlvbih0KXt0KHRoaXMpO2NvbnN0IGU9dGhpcy5jaGlsZHJlbjtmb3IobGV0IG49MCxvPWUubGVuZ3RoO248bztuKyspZVtuXS50cmF2ZXJzZSh0KX0sdHJhdmVyc2VWaXNpYmxlOmZ1bmN0aW9uKHQpe2lmKCExPT09dGhpcy52aXNpYmxlKXJldHVybjt0KHRoaXMpO2NvbnN0IGU9dGhpcy5jaGlsZHJlbjtmb3IobGV0IG49MCxvPWUubGVuZ3RoO248bztuKyspZVtuXS50cmF2ZXJzZVZpc2libGUodCl9LHRyYXZlcnNlQW5jZXN0b3JzOmZ1bmN0aW9uKHQpe2NvbnN0IGU9dGhpcy5wYXJlbnQ7bnVsbCE9PWUmJih0KGUpLGUudHJhdmVyc2VBbmNlc3RvcnModCkpfSx1cGRhdGVNYXRyaXg6ZnVuY3Rpb24oKXt0aGlzLm1hdHJpeC5jb21wb3NlKHRoaXMucG9zaXRpb24sdGhpcy5xdWF0ZXJuaW9uLHRoaXMuc2NhbGUpLHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH0sdXBkYXRlTWF0cml4V29ybGQ6ZnVuY3Rpb24odCl7dGhpcy5tYXRyaXhBdXRvVXBkYXRlJiZ0aGlzLnVwZGF0ZU1hdHJpeCgpLCh0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGV8fHQpJiYobnVsbD09PXRoaXMucGFyZW50P3RoaXMubWF0cml4V29ybGQuY29weSh0aGlzLm1hdHJpeCk6dGhpcy5tYXRyaXhXb3JsZC5tdWx0aXBseU1hdHJpY2VzKHRoaXMucGFyZW50Lm1hdHJpeFdvcmxkLHRoaXMubWF0cml4KSx0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITEsdD0hMCk7Y29uc3QgZT10aGlzLmNoaWxkcmVuO2ZvcihsZXQgbj0wLG89ZS5sZW5ndGg7bjxvO24rKyllW25dLnVwZGF0ZU1hdHJpeFdvcmxkKHQpfSx1cGRhdGVXb3JsZE1hdHJpeDpmdW5jdGlvbih0LGUpe2NvbnN0IG49dGhpcy5wYXJlbnQ7aWYoITA9PT10JiZudWxsIT09biYmbi51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksdGhpcy5tYXRyaXhBdXRvVXBkYXRlJiZ0aGlzLnVwZGF0ZU1hdHJpeCgpLG51bGw9PT10aGlzLnBhcmVudD90aGlzLm1hdHJpeFdvcmxkLmNvcHkodGhpcy5tYXRyaXgpOnRoaXMubWF0cml4V29ybGQubXVsdGlwbHlNYXRyaWNlcyh0aGlzLnBhcmVudC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeCksITA9PT1lKXtjb25zdCB0PXRoaXMuY2hpbGRyZW47Zm9yKGxldCBlPTAsbj10Lmxlbmd0aDtlPG47ZSsrKXRbZV0udXBkYXRlV29ybGRNYXRyaXgoITEsITApfX0sdG9KU09OOmZ1bmN0aW9uKHQpe2NvbnN0IGU9dm9pZCAwPT09dHx8InN0cmluZyI9PXR5cGVvZiB0LG49e307ZSYmKHQ9e2dlb21ldHJpZXM6e30sbWF0ZXJpYWxzOnt9LHRleHR1cmVzOnt9LGltYWdlczp7fSxzaGFwZXM6e30sc2tlbGV0b25zOnt9LGFuaW1hdGlvbnM6e319LG4ubWV0YWRhdGE9e3ZlcnNpb246NC41LHR5cGU6Ik9iamVjdCIsZ2VuZXJhdG9yOiJPYmplY3QzRC50b0pTT04ifSk7Y29uc3Qgbz17fTtmdW5jdGlvbiBpKGUsbil7cmV0dXJuIHZvaWQgMD09PWVbbi51dWlkXSYmKGVbbi51dWlkXT1uLnRvSlNPTih0KSksbi51dWlkfWlmKG8udXVpZD10aGlzLnV1aWQsby50eXBlPXRoaXMudHlwZSwiIiE9PXRoaXMubmFtZSYmKG8ubmFtZT10aGlzLm5hbWUpLCEwPT09dGhpcy5jYXN0U2hhZG93JiYoby5jYXN0U2hhZG93PSEwKSwhMD09PXRoaXMucmVjZWl2ZVNoYWRvdyYmKG8ucmVjZWl2ZVNoYWRvdz0hMCksITE9PT10aGlzLnZpc2libGUmJihvLnZpc2libGU9ITEpLCExPT09dGhpcy5mcnVzdHVtQ3VsbGVkJiYoby5mcnVzdHVtQ3VsbGVkPSExKSwwIT09dGhpcy5yZW5kZXJPcmRlciYmKG8ucmVuZGVyT3JkZXI9dGhpcy5yZW5kZXJPcmRlciksInt9IiE9PUpTT04uc3RyaW5naWZ5KHRoaXMudXNlckRhdGEpJiYoby51c2VyRGF0YT10aGlzLnVzZXJEYXRhKSxvLmxheWVycz10aGlzLmxheWVycy5tYXNrLG8ubWF0cml4PXRoaXMubWF0cml4LnRvQXJyYXkoKSwhMT09PXRoaXMubWF0cml4QXV0b1VwZGF0ZSYmKG8ubWF0cml4QXV0b1VwZGF0ZT0hMSksdGhpcy5pc0luc3RhbmNlZE1lc2gmJihvLnR5cGU9Ikluc3RhbmNlZE1lc2giLG8uY291bnQ9dGhpcy5jb3VudCxvLmluc3RhbmNlTWF0cml4PXRoaXMuaW5zdGFuY2VNYXRyaXgudG9KU09OKCkpLHRoaXMuaXNNZXNofHx0aGlzLmlzTGluZXx8dGhpcy5pc1BvaW50cyl7by5nZW9tZXRyeT1pKHQuZ2VvbWV0cmllcyx0aGlzLmdlb21ldHJ5KTtjb25zdCBlPXRoaXMuZ2VvbWV0cnkucGFyYW1ldGVycztpZih2b2lkIDAhPT1lJiZ2b2lkIDAhPT1lLnNoYXBlcyl7Y29uc3Qgbj1lLnNoYXBlcztpZihBcnJheS5pc0FycmF5KG4pKWZvcihsZXQgZT0wLG89bi5sZW5ndGg7ZTxvO2UrKylpKHQuc2hhcGVzLG5bZV0pO2Vsc2UgaSh0LnNoYXBlcyxuKX19aWYodGhpcy5pc1NraW5uZWRNZXNoJiYoby5iaW5kTW9kZT10aGlzLmJpbmRNb2RlLG8uYmluZE1hdHJpeD10aGlzLmJpbmRNYXRyaXgudG9BcnJheSgpLHZvaWQgMCE9PXRoaXMuc2tlbGV0b24mJihpKHQuc2tlbGV0b25zLHRoaXMuc2tlbGV0b24pLG8uc2tlbGV0b249dGhpcy5za2VsZXRvbi51dWlkKSksdm9pZCAwIT09dGhpcy5tYXRlcmlhbClpZihBcnJheS5pc0FycmF5KHRoaXMubWF0ZXJpYWwpKXtjb25zdCBlPVtdO2ZvcihsZXQgbj0wLG89dGhpcy5tYXRlcmlhbC5sZW5ndGg7bjxvO24rKyllLnB1c2goaSh0Lm1hdGVyaWFscyx0aGlzLm1hdGVyaWFsW25dKSk7by5tYXRlcmlhbD1lfWVsc2Ugby5tYXRlcmlhbD1pKHQubWF0ZXJpYWxzLHRoaXMubWF0ZXJpYWwpO2lmKHRoaXMuY2hpbGRyZW4ubGVuZ3RoPjApe28uY2hpbGRyZW49W107Zm9yKGxldCBlPTA7ZTx0aGlzLmNoaWxkcmVuLmxlbmd0aDtlKyspby5jaGlsZHJlbi5wdXNoKHRoaXMuY2hpbGRyZW5bZV0udG9KU09OKHQpLm9iamVjdCl9aWYodGhpcy5hbmltYXRpb25zLmxlbmd0aD4wKXtvLmFuaW1hdGlvbnM9W107Zm9yKGxldCBlPTA7ZTx0aGlzLmFuaW1hdGlvbnMubGVuZ3RoO2UrKylvLmFuaW1hdGlvbnMucHVzaChpKHQuYW5pbWF0aW9ucyx0aGlzLmFuaW1hdGlvbnNbZV0pKX1pZihlKXtjb25zdCBlPWEodC5nZW9tZXRyaWVzKSxvPWEodC5tYXRlcmlhbHMpLGk9YSh0LnRleHR1cmVzKSxyPWEodC5pbWFnZXMpLHM9YSh0LnNoYXBlcyksbD1hKHQuc2tlbGV0b25zKSxjPWEodC5hbmltYXRpb25zKTtlLmxlbmd0aD4wJiYobi5nZW9tZXRyaWVzPWUpLG8ubGVuZ3RoPjAmJihuLm1hdGVyaWFscz1vKSxpLmxlbmd0aD4wJiYobi50ZXh0dXJlcz1pKSxyLmxlbmd0aD4wJiYobi5pbWFnZXM9cikscy5sZW5ndGg+MCYmKG4uc2hhcGVzPXMpLGwubGVuZ3RoPjAmJihuLnNrZWxldG9ucz1sKSxjLmxlbmd0aD4wJiYobi5hbmltYXRpb25zPWMpfXJldHVybiBuLm9iamVjdD1vLG47ZnVuY3Rpb24gYSh0KXtjb25zdCBlPVtdO2Zvcihjb25zdCBuIGluIHQpe2NvbnN0IG89dFtuXTtkZWxldGUgby5tZXRhZGF0YSxlLnB1c2gobyl9cmV0dXJuIGV9fSxjbG9uZTpmdW5jdGlvbih0KXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyx0KX0sY29weTpmdW5jdGlvbih0LGU9ITApe2lmKHRoaXMubmFtZT10Lm5hbWUsdGhpcy51cC5jb3B5KHQudXApLHRoaXMucG9zaXRpb24uY29weSh0LnBvc2l0aW9uKSx0aGlzLnJvdGF0aW9uLm9yZGVyPXQucm90YXRpb24ub3JkZXIsdGhpcy5xdWF0ZXJuaW9uLmNvcHkodC5xdWF0ZXJuaW9uKSx0aGlzLnNjYWxlLmNvcHkodC5zY2FsZSksdGhpcy5tYXRyaXguY29weSh0Lm1hdHJpeCksdGhpcy5tYXRyaXhXb3JsZC5jb3B5KHQubWF0cml4V29ybGQpLHRoaXMubWF0cml4QXV0b1VwZGF0ZT10Lm1hdHJpeEF1dG9VcGRhdGUsdGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPXQubWF0cml4V29ybGROZWVkc1VwZGF0ZSx0aGlzLmxheWVycy5tYXNrPXQubGF5ZXJzLm1hc2ssdGhpcy52aXNpYmxlPXQudmlzaWJsZSx0aGlzLmNhc3RTaGFkb3c9dC5jYXN0U2hhZG93LHRoaXMucmVjZWl2ZVNoYWRvdz10LnJlY2VpdmVTaGFkb3csdGhpcy5mcnVzdHVtQ3VsbGVkPXQuZnJ1c3R1bUN1bGxlZCx0aGlzLnJlbmRlck9yZGVyPXQucmVuZGVyT3JkZXIsdGhpcy51c2VyRGF0YT1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQudXNlckRhdGEpKSwhMD09PWUpZm9yKGxldCBlPTA7ZTx0LmNoaWxkcmVuLmxlbmd0aDtlKyspdGhpcy5hZGQodC5jaGlsZHJlbltlXS5jbG9uZSgpKTtyZXR1cm4gdGhpc319KTtjb25zdCAkYXQ9bmV3ICRpdCx0cnQ9bmV3ICRpdCxlcnQ9bmV3IFdpdDtjbGFzcyBucnR7Y29uc3RydWN0b3IodCxlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaXNQbGFuZSIse3ZhbHVlOiEwfSksdGhpcy5ub3JtYWw9dm9pZCAwIT09dD90Om5ldyAkaXQoMSwwLDApLHRoaXMuY29uc3RhbnQ9dm9pZCAwIT09ZT9lOjB9c2V0KHQsZSl7cmV0dXJuIHRoaXMubm9ybWFsLmNvcHkodCksdGhpcy5jb25zdGFudD1lLHRoaXN9c2V0Q29tcG9uZW50cyh0LGUsbixvKXtyZXR1cm4gdGhpcy5ub3JtYWwuc2V0KHQsZSxuKSx0aGlzLmNvbnN0YW50PW8sdGhpc31zZXRGcm9tTm9ybWFsQW5kQ29wbGFuYXJQb2ludCh0LGUpe3JldHVybiB0aGlzLm5vcm1hbC5jb3B5KHQpLHRoaXMuY29uc3RhbnQ9LWUuZG90KHRoaXMubm9ybWFsKSx0aGlzfXNldEZyb21Db3BsYW5hclBvaW50cyh0LGUsbil7Y29uc3Qgbz0kYXQuc3ViVmVjdG9ycyhuLGUpLmNyb3NzKHRydC5zdWJWZWN0b3JzKHQsZSkpLm5vcm1hbGl6ZSgpO3JldHVybiB0aGlzLnNldEZyb21Ob3JtYWxBbmRDb3BsYW5hclBvaW50KG8sdCksdGhpc31jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLm5vcm1hbC5jb3B5KHQubm9ybWFsKSx0aGlzLmNvbnN0YW50PXQuY29uc3RhbnQsdGhpc31ub3JtYWxpemUoKXtjb25zdCB0PTEvdGhpcy5ub3JtYWwubGVuZ3RoKCk7cmV0dXJuIHRoaXMubm9ybWFsLm11bHRpcGx5U2NhbGFyKHQpLHRoaXMuY29uc3RhbnQqPXQsdGhpc31uZWdhdGUoKXtyZXR1cm4gdGhpcy5jb25zdGFudCo9LTEsdGhpcy5ub3JtYWwubmVnYXRlKCksdGhpc31kaXN0YW5jZVRvUG9pbnQodCl7cmV0dXJuIHRoaXMubm9ybWFsLmRvdCh0KSt0aGlzLmNvbnN0YW50fWRpc3RhbmNlVG9TcGhlcmUodCl7cmV0dXJuIHRoaXMuZGlzdGFuY2VUb1BvaW50KHQuY2VudGVyKS10LnJhZGl1c31wcm9qZWN0UG9pbnQodCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGNvbnNvbGUud2FybigiVEhSRUUuUGxhbmU6IC5wcm9qZWN0UG9pbnQoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIiksZT1uZXcgJGl0KSxlLmNvcHkodGhpcy5ub3JtYWwpLm11bHRpcGx5U2NhbGFyKC10aGlzLmRpc3RhbmNlVG9Qb2ludCh0KSkuYWRkKHQpfWludGVyc2VjdExpbmUodCxlKXt2b2lkIDA9PT1lJiYoY29uc29sZS53YXJuKCJUSFJFRS5QbGFuZTogLmludGVyc2VjdExpbmUoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIiksZT1uZXcgJGl0KTtjb25zdCBuPXQuZGVsdGEoJGF0KSxvPXRoaXMubm9ybWFsLmRvdChuKTtpZigwPT09bylyZXR1cm4gMD09PXRoaXMuZGlzdGFuY2VUb1BvaW50KHQuc3RhcnQpP2UuY29weSh0LnN0YXJ0KTp2b2lkIDA7Y29uc3QgaT0tKHQuc3RhcnQuZG90KHRoaXMubm9ybWFsKSt0aGlzLmNvbnN0YW50KS9vO3JldHVybiBpPDB8fGk+MT92b2lkIDA6ZS5jb3B5KG4pLm11bHRpcGx5U2NhbGFyKGkpLmFkZCh0LnN0YXJ0KX1pbnRlcnNlY3RzTGluZSh0KXtjb25zdCBlPXRoaXMuZGlzdGFuY2VUb1BvaW50KHQuc3RhcnQpLG49dGhpcy5kaXN0YW5jZVRvUG9pbnQodC5lbmQpO3JldHVybiBlPDAmJm4+MHx8bjwwJiZlPjB9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4gdC5pbnRlcnNlY3RzUGxhbmUodGhpcyl9aW50ZXJzZWN0c1NwaGVyZSh0KXtyZXR1cm4gdC5pbnRlcnNlY3RzUGxhbmUodGhpcyl9Y29wbGFuYXJQb2ludCh0KXtyZXR1cm4gdm9pZCAwPT09dCYmKGNvbnNvbGUud2FybigiVEhSRUUuUGxhbmU6IC5jb3BsYW5hclBvaW50KCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLHQ9bmV3ICRpdCksdC5jb3B5KHRoaXMubm9ybWFsKS5tdWx0aXBseVNjYWxhcigtdGhpcy5jb25zdGFudCl9YXBwbHlNYXRyaXg0KHQsZSl7Y29uc3Qgbj1lfHxlcnQuZ2V0Tm9ybWFsTWF0cml4KHQpLG89dGhpcy5jb3BsYW5hclBvaW50KCRhdCkuYXBwbHlNYXRyaXg0KHQpLGk9dGhpcy5ub3JtYWwuYXBwbHlNYXRyaXgzKG4pLm5vcm1hbGl6ZSgpO3JldHVybiB0aGlzLmNvbnN0YW50PS1vLmRvdChpKSx0aGlzfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5jb25zdGFudC09dC5kb3QodGhpcy5ub3JtYWwpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lm5vcm1hbC5lcXVhbHModGhpcy5ub3JtYWwpJiZ0LmNvbnN0YW50PT09dGhpcy5jb25zdGFudH19Y29uc3Qgb3J0PW5ldyAkaXQsaXJ0PW5ldyAkaXQsYXJ0PW5ldyAkaXQscnJ0PW5ldyAkaXQsc3J0PW5ldyAkaXQsbHJ0PW5ldyAkaXQsY3J0PW5ldyAkaXQsZHJ0PW5ldyAkaXQscHJ0PW5ldyAkaXQsbXJ0PW5ldyAkaXQ7Y2xhc3MgdXJ0e2NvbnN0cnVjdG9yKHQsZSxuKXt0aGlzLmE9dm9pZCAwIT09dD90Om5ldyAkaXQsdGhpcy5iPXZvaWQgMCE9PWU/ZTpuZXcgJGl0LHRoaXMuYz12b2lkIDAhPT1uP246bmV3ICRpdH1zdGF0aWMgZ2V0Tm9ybWFsKHQsZSxuLG8pe3ZvaWQgMD09PW8mJihjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAuZ2V0Tm9ybWFsKCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLG89bmV3ICRpdCksby5zdWJWZWN0b3JzKG4sZSksb3J0LnN1YlZlY3RvcnModCxlKSxvLmNyb3NzKG9ydCk7Y29uc3QgaT1vLmxlbmd0aFNxKCk7cmV0dXJuIGk+MD9vLm11bHRpcGx5U2NhbGFyKDEvTWF0aC5zcXJ0KGkpKTpvLnNldCgwLDAsMCl9c3RhdGljIGdldEJhcnljb29yZCh0LGUsbixvLGkpe29ydC5zdWJWZWN0b3JzKG8sZSksaXJ0LnN1YlZlY3RvcnMobixlKSxhcnQuc3ViVmVjdG9ycyh0LGUpO2NvbnN0IGE9b3J0LmRvdChvcnQpLHI9b3J0LmRvdChpcnQpLHM9b3J0LmRvdChhcnQpLGw9aXJ0LmRvdChpcnQpLGM9aXJ0LmRvdChhcnQpLGQ9YSpsLXIqcjtpZih2b2lkIDA9PT1pJiYoY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLmdldEJhcnljb29yZCgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSxpPW5ldyAkaXQpLDA9PT1kKXJldHVybiBpLnNldCgtMiwtMSwtMSk7Y29uc3QgcD0xL2QsbT0obCpzLXIqYykqcCx1PShhKmMtcipzKSpwO3JldHVybiBpLnNldCgxLW0tdSx1LG0pfXN0YXRpYyBjb250YWluc1BvaW50KHQsZSxuLG8pe3JldHVybiB0aGlzLmdldEJhcnljb29yZCh0LGUsbixvLHJydCkscnJ0Lng+PTAmJnJydC55Pj0wJiZycnQueCtycnQueTw9MX1zdGF0aWMgZ2V0VVYodCxlLG4sbyxpLGEscixzKXtyZXR1cm4gdGhpcy5nZXRCYXJ5Y29vcmQodCxlLG4sbyxycnQpLHMuc2V0KDAsMCkscy5hZGRTY2FsZWRWZWN0b3IoaSxycnQueCkscy5hZGRTY2FsZWRWZWN0b3IoYSxycnQueSkscy5hZGRTY2FsZWRWZWN0b3IocixycnQueiksc31zdGF0aWMgaXNGcm9udEZhY2luZyh0LGUsbixvKXtyZXR1cm4gb3J0LnN1YlZlY3RvcnMobixlKSxpcnQuc3ViVmVjdG9ycyh0LGUpLG9ydC5jcm9zcyhpcnQpLmRvdChvKTwwfXNldCh0LGUsbil7cmV0dXJuIHRoaXMuYS5jb3B5KHQpLHRoaXMuYi5jb3B5KGUpLHRoaXMuYy5jb3B5KG4pLHRoaXN9c2V0RnJvbVBvaW50c0FuZEluZGljZXModCxlLG4sbyl7cmV0dXJuIHRoaXMuYS5jb3B5KHRbZV0pLHRoaXMuYi5jb3B5KHRbbl0pLHRoaXMuYy5jb3B5KHRbb10pLHRoaXN9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9Y29weSh0KXtyZXR1cm4gdGhpcy5hLmNvcHkodC5hKSx0aGlzLmIuY29weSh0LmIpLHRoaXMuYy5jb3B5KHQuYyksdGhpc31nZXRBcmVhKCl7cmV0dXJuIG9ydC5zdWJWZWN0b3JzKHRoaXMuYyx0aGlzLmIpLGlydC5zdWJWZWN0b3JzKHRoaXMuYSx0aGlzLmIpLC41Km9ydC5jcm9zcyhpcnQpLmxlbmd0aCgpfWdldE1pZHBvaW50KHQpe3JldHVybiB2b2lkIDA9PT10JiYoY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLmdldE1pZHBvaW50KCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLHQ9bmV3ICRpdCksdC5hZGRWZWN0b3JzKHRoaXMuYSx0aGlzLmIpLmFkZCh0aGlzLmMpLm11bHRpcGx5U2NhbGFyKDEvMyl9Z2V0Tm9ybWFsKHQpe3JldHVybiB1cnQuZ2V0Tm9ybWFsKHRoaXMuYSx0aGlzLmIsdGhpcy5jLHQpfWdldFBsYW5lKHQpe3JldHVybiB2b2lkIDA9PT10JiYoY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLmdldFBsYW5lKCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLHQ9bmV3IG5ydCksdC5zZXRGcm9tQ29wbGFuYXJQb2ludHModGhpcy5hLHRoaXMuYix0aGlzLmMpfWdldEJhcnljb29yZCh0LGUpe3JldHVybiB1cnQuZ2V0QmFyeWNvb3JkKHQsdGhpcy5hLHRoaXMuYix0aGlzLmMsZSl9Z2V0VVYodCxlLG4sbyxpKXtyZXR1cm4gdXJ0LmdldFVWKHQsdGhpcy5hLHRoaXMuYix0aGlzLmMsZSxuLG8saSl9Y29udGFpbnNQb2ludCh0KXtyZXR1cm4gdXJ0LmNvbnRhaW5zUG9pbnQodCx0aGlzLmEsdGhpcy5iLHRoaXMuYyl9aXNGcm9udEZhY2luZyh0KXtyZXR1cm4gdXJ0LmlzRnJvbnRGYWNpbmcodGhpcy5hLHRoaXMuYix0aGlzLmMsdCl9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4gdC5pbnRlcnNlY3RzVHJpYW5nbGUodGhpcyl9Y2xvc2VzdFBvaW50VG9Qb2ludCh0LGUpe3ZvaWQgMD09PWUmJihjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAuY2xvc2VzdFBvaW50VG9Qb2ludCgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSxlPW5ldyAkaXQpO2NvbnN0IG49dGhpcy5hLG89dGhpcy5iLGk9dGhpcy5jO2xldCBhLHI7c3J0LnN1YlZlY3RvcnMobyxuKSxscnQuc3ViVmVjdG9ycyhpLG4pLGRydC5zdWJWZWN0b3JzKHQsbik7Y29uc3Qgcz1zcnQuZG90KGRydCksbD1scnQuZG90KGRydCk7aWYoczw9MCYmbDw9MClyZXR1cm4gZS5jb3B5KG4pO3BydC5zdWJWZWN0b3JzKHQsbyk7Y29uc3QgYz1zcnQuZG90KHBydCksZD1scnQuZG90KHBydCk7aWYoYz49MCYmZDw9YylyZXR1cm4gZS5jb3B5KG8pO2NvbnN0IHA9cypkLWMqbDtpZihwPD0wJiZzPj0wJiZjPD0wKXJldHVybiBhPXMvKHMtYyksZS5jb3B5KG4pLmFkZFNjYWxlZFZlY3RvcihzcnQsYSk7bXJ0LnN1YlZlY3RvcnModCxpKTtjb25zdCBtPXNydC5kb3QobXJ0KSx1PWxydC5kb3QobXJ0KTtpZih1Pj0wJiZtPD11KXJldHVybiBlLmNvcHkoaSk7Y29uc3QgZj1tKmwtcyp1O2lmKGY8PTAmJmw+PTAmJnU8PTApcmV0dXJuIHI9bC8obC11KSxlLmNvcHkobikuYWRkU2NhbGVkVmVjdG9yKGxydCxyKTtjb25zdCBnPWMqdS1tKmQ7aWYoZzw9MCYmZC1jPj0wJiZtLXU+PTApcmV0dXJuIGNydC5zdWJWZWN0b3JzKGksbykscj0oZC1jKS8oZC1jKyhtLXUpKSxlLmNvcHkobykuYWRkU2NhbGVkVmVjdG9yKGNydCxyKTtjb25zdCBoPTEvKGcrZitwKTtyZXR1cm4gYT1mKmgscj1wKmgsZS5jb3B5KG4pLmFkZFNjYWxlZFZlY3RvcihzcnQsYSkuYWRkU2NhbGVkVmVjdG9yKGxydCxyKX1lcXVhbHModCl7cmV0dXJuIHQuYS5lcXVhbHModGhpcy5hKSYmdC5iLmVxdWFscyh0aGlzLmIpJiZ0LmMuZXF1YWxzKHRoaXMuYyl9fWNvbnN0IGZydD17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fSxncnQ9e2g6MCxzOjAsbDowfSxocnQ9e2g6MCxzOjAsbDowfTtmdW5jdGlvbiBicnQodCxlLG4pe3JldHVybiBuPDAmJihuKz0xKSxuPjEmJihuLT0xKSxuPDEvNj90KzYqKGUtdCkqbjpuPC41P2U6bjwyLzM/dCs2KihlLXQpKigyLzMtbik6dH1mdW5jdGlvbiB5cnQodCl7cmV0dXJuIHQ8LjA0MDQ1Py4wNzczOTkzODA4KnQ6TWF0aC5wb3coLjk0Nzg2NzI5ODYqdCsuMDUyMTMyNzAxNCwyLjQpfWZ1bmN0aW9uIF9ydCh0KXtyZXR1cm4gdDwuMDAzMTMwOD8xMi45Mip0OjEuMDU1Kk1hdGgucG93KHQsLjQxNjY2KS0uMDU1fWNsYXNzIENydHtjb25zdHJ1Y3Rvcih0LGUsbil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpc0NvbG9yIix7dmFsdWU6ITB9KSx2b2lkIDA9PT1lJiZ2b2lkIDA9PT1uP3RoaXMuc2V0KHQpOnRoaXMuc2V0UkdCKHQsZSxuKX1zZXQodCl7cmV0dXJuIHQmJnQuaXNDb2xvcj90aGlzLmNvcHkodCk6Im51bWJlciI9PXR5cGVvZiB0P3RoaXMuc2V0SGV4KHQpOiJzdHJpbmciPT10eXBlb2YgdCYmdGhpcy5zZXRTdHlsZSh0KSx0aGlzfXNldFNjYWxhcih0KXtyZXR1cm4gdGhpcy5yPXQsdGhpcy5nPXQsdGhpcy5iPXQsdGhpc31zZXRIZXgodCl7cmV0dXJuIHQ9TWF0aC5mbG9vcih0KSx0aGlzLnI9KHQ+PjE2JjI1NSkvMjU1LHRoaXMuZz0odD4+OCYyNTUpLzI1NSx0aGlzLmI9KDI1NSZ0KS8yNTUsdGhpc31zZXRSR0IodCxlLG4pe3JldHVybiB0aGlzLnI9dCx0aGlzLmc9ZSx0aGlzLmI9bix0aGlzfXNldEhTTCh0LGUsbil7aWYodD1qaXQuZXVjbGlkZWFuTW9kdWxvKHQsMSksZT1qaXQuY2xhbXAoZSwwLDEpLG49aml0LmNsYW1wKG4sMCwxKSwwPT09ZSl0aGlzLnI9dGhpcy5nPXRoaXMuYj1uO2Vsc2V7Y29uc3Qgbz1uPD0uNT9uKigxK2UpOm4rZS1uKmUsaT0yKm4tbzt0aGlzLnI9YnJ0KGksbyx0KzEvMyksdGhpcy5nPWJydChpLG8sdCksdGhpcy5iPWJydChpLG8sdC0xLzMpfXJldHVybiB0aGlzfXNldFN0eWxlKHQpe2Z1bmN0aW9uIGUoZSl7dm9pZCAwIT09ZSYmcGFyc2VGbG9hdChlKTwxJiZjb25zb2xlLndhcm4oIlRIUkVFLkNvbG9yOiBBbHBoYSBjb21wb25lbnQgb2YgIit0KyIgd2lsbCBiZSBpZ25vcmVkLiIpfWxldCBuO2lmKG49L14oKD86cmdifGhzbClhPylcKChbXlwpXSopXCkvLmV4ZWModCkpe2xldCB0O2NvbnN0IG89blsyXTtzd2l0Y2goblsxXSl7Y2FzZSJyZ2IiOmNhc2UicmdiYSI6aWYodD0vXlxzKihcZCspXHMqLFxzKihcZCspXHMqLFxzKihcZCspXHMqKD86LFxzKihcZCpcLj9cZCspXHMqKT8kLy5leGVjKG8pKXJldHVybiB0aGlzLnI9TWF0aC5taW4oMjU1LHBhcnNlSW50KHRbMV0sMTApKS8yNTUsdGhpcy5nPU1hdGgubWluKDI1NSxwYXJzZUludCh0WzJdLDEwKSkvMjU1LHRoaXMuYj1NYXRoLm1pbigyNTUscGFyc2VJbnQodFszXSwxMCkpLzI1NSxlKHRbNF0pLHRoaXM7aWYodD0vXlxzKihcZCspXCVccyosXHMqKFxkKylcJVxzKixccyooXGQrKVwlXHMqKD86LFxzKihcZCpcLj9cZCspXHMqKT8kLy5leGVjKG8pKXJldHVybiB0aGlzLnI9TWF0aC5taW4oMTAwLHBhcnNlSW50KHRbMV0sMTApKS8xMDAsdGhpcy5nPU1hdGgubWluKDEwMCxwYXJzZUludCh0WzJdLDEwKSkvMTAwLHRoaXMuYj1NYXRoLm1pbigxMDAscGFyc2VJbnQodFszXSwxMCkpLzEwMCxlKHRbNF0pLHRoaXM7YnJlYWs7Y2FzZSJoc2wiOmNhc2UiaHNsYSI6aWYodD0vXlxzKihcZCpcLj9cZCspXHMqLFxzKihcZCspXCVccyosXHMqKFxkKylcJVxzKig/OixccyooXGQqXC4/XGQrKVxzKik/JC8uZXhlYyhvKSl7Y29uc3Qgbj1wYXJzZUZsb2F0KHRbMV0pLzM2MCxvPXBhcnNlSW50KHRbMl0sMTApLzEwMCxpPXBhcnNlSW50KHRbM10sMTApLzEwMDtyZXR1cm4gZSh0WzRdKSx0aGlzLnNldEhTTChuLG8saSl9fX1lbHNlIGlmKG49L15cIyhbQS1GYS1mXGRdKykkLy5leGVjKHQpKXtjb25zdCB0PW5bMV0sZT10Lmxlbmd0aDtpZigzPT09ZSlyZXR1cm4gdGhpcy5yPXBhcnNlSW50KHQuY2hhckF0KDApK3QuY2hhckF0KDApLDE2KS8yNTUsdGhpcy5nPXBhcnNlSW50KHQuY2hhckF0KDEpK3QuY2hhckF0KDEpLDE2KS8yNTUsdGhpcy5iPXBhcnNlSW50KHQuY2hhckF0KDIpK3QuY2hhckF0KDIpLDE2KS8yNTUsdGhpcztpZig2PT09ZSlyZXR1cm4gdGhpcy5yPXBhcnNlSW50KHQuY2hhckF0KDApK3QuY2hhckF0KDEpLDE2KS8yNTUsdGhpcy5nPXBhcnNlSW50KHQuY2hhckF0KDIpK3QuY2hhckF0KDMpLDE2KS8yNTUsdGhpcy5iPXBhcnNlSW50KHQuY2hhckF0KDQpK3QuY2hhckF0KDUpLDE2KS8yNTUsdGhpc31yZXR1cm4gdCYmdC5sZW5ndGg+MD90aGlzLnNldENvbG9yTmFtZSh0KTp0aGlzfXNldENvbG9yTmFtZSh0KXtjb25zdCBlPWZydFt0XTtyZXR1cm4gdm9pZCAwIT09ZT90aGlzLnNldEhleChlKTpjb25zb2xlLndhcm4oIlRIUkVFLkNvbG9yOiBVbmtub3duIGNvbG9yICIrdCksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLnIsdGhpcy5nLHRoaXMuYil9Y29weSh0KXtyZXR1cm4gdGhpcy5yPXQucix0aGlzLmc9dC5nLHRoaXMuYj10LmIsdGhpc31jb3B5R2FtbWFUb0xpbmVhcih0LGU9Mil7cmV0dXJuIHRoaXMucj1NYXRoLnBvdyh0LnIsZSksdGhpcy5nPU1hdGgucG93KHQuZyxlKSx0aGlzLmI9TWF0aC5wb3codC5iLGUpLHRoaXN9Y29weUxpbmVhclRvR2FtbWEodCxlPTIpe2NvbnN0IG49ZT4wPzEvZToxO3JldHVybiB0aGlzLnI9TWF0aC5wb3codC5yLG4pLHRoaXMuZz1NYXRoLnBvdyh0LmcsbiksdGhpcy5iPU1hdGgucG93KHQuYixuKSx0aGlzfWNvbnZlcnRHYW1tYVRvTGluZWFyKHQpe3JldHVybiB0aGlzLmNvcHlHYW1tYVRvTGluZWFyKHRoaXMsdCksdGhpc31jb252ZXJ0TGluZWFyVG9HYW1tYSh0KXtyZXR1cm4gdGhpcy5jb3B5TGluZWFyVG9HYW1tYSh0aGlzLHQpLHRoaXN9Y29weVNSR0JUb0xpbmVhcih0KXtyZXR1cm4gdGhpcy5yPXlydCh0LnIpLHRoaXMuZz15cnQodC5nKSx0aGlzLmI9eXJ0KHQuYiksdGhpc31jb3B5TGluZWFyVG9TUkdCKHQpe3JldHVybiB0aGlzLnI9X3J0KHQuciksdGhpcy5nPV9ydCh0LmcpLHRoaXMuYj1fcnQodC5iKSx0aGlzfWNvbnZlcnRTUkdCVG9MaW5lYXIoKXtyZXR1cm4gdGhpcy5jb3B5U1JHQlRvTGluZWFyKHRoaXMpLHRoaXN9Y29udmVydExpbmVhclRvU1JHQigpe3JldHVybiB0aGlzLmNvcHlMaW5lYXJUb1NSR0IodGhpcyksdGhpc31nZXRIZXgoKXtyZXR1cm4gMjU1KnRoaXMucjw8MTZeMjU1KnRoaXMuZzw8OF4yNTUqdGhpcy5iPDwwfWdldEhleFN0cmluZygpe3JldHVybigiMDAwMDAwIit0aGlzLmdldEhleCgpLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTYpfWdldEhTTCh0KXt2b2lkIDA9PT10JiYoY29uc29sZS53YXJuKCJUSFJFRS5Db2xvcjogLmdldEhTTCgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSx0PXtoOjAsczowLGw6MH0pO2NvbnN0IGU9dGhpcy5yLG49dGhpcy5nLG89dGhpcy5iLGk9TWF0aC5tYXgoZSxuLG8pLGE9TWF0aC5taW4oZSxuLG8pO2xldCByLHM7Y29uc3QgbD0oYStpKS8yO2lmKGE9PT1pKXI9MCxzPTA7ZWxzZXtjb25zdCB0PWktYTtzd2l0Y2gocz1sPD0uNT90LyhpK2EpOnQvKDItaS1hKSxpKXtjYXNlIGU6cj0obi1vKS90KyhuPG8/NjowKTticmVhaztjYXNlIG46cj0oby1lKS90KzI7YnJlYWs7Y2FzZSBvOnI9KGUtbikvdCs0fXIvPTZ9cmV0dXJuIHQuaD1yLHQucz1zLHQubD1sLHR9Z2V0U3R5bGUoKXtyZXR1cm4icmdiKCIrKDI1NSp0aGlzLnJ8MCkrIiwiKygyNTUqdGhpcy5nfDApKyIsIisoMjU1KnRoaXMuYnwwKSsiKSJ9b2Zmc2V0SFNMKHQsZSxuKXtyZXR1cm4gdGhpcy5nZXRIU0woZ3J0KSxncnQuaCs9dCxncnQucys9ZSxncnQubCs9bix0aGlzLnNldEhTTChncnQuaCxncnQucyxncnQubCksdGhpc31hZGQodCl7cmV0dXJuIHRoaXMucis9dC5yLHRoaXMuZys9dC5nLHRoaXMuYis9dC5iLHRoaXN9YWRkQ29sb3JzKHQsZSl7cmV0dXJuIHRoaXMucj10LnIrZS5yLHRoaXMuZz10LmcrZS5nLHRoaXMuYj10LmIrZS5iLHRoaXN9YWRkU2NhbGFyKHQpe3JldHVybiB0aGlzLnIrPXQsdGhpcy5nKz10LHRoaXMuYis9dCx0aGlzfXN1Yih0KXtyZXR1cm4gdGhpcy5yPU1hdGgubWF4KDAsdGhpcy5yLXQuciksdGhpcy5nPU1hdGgubWF4KDAsdGhpcy5nLXQuZyksdGhpcy5iPU1hdGgubWF4KDAsdGhpcy5iLXQuYiksdGhpc31tdWx0aXBseSh0KXtyZXR1cm4gdGhpcy5yKj10LnIsdGhpcy5nKj10LmcsdGhpcy5iKj10LmIsdGhpc31tdWx0aXBseVNjYWxhcih0KXtyZXR1cm4gdGhpcy5yKj10LHRoaXMuZyo9dCx0aGlzLmIqPXQsdGhpc31sZXJwKHQsZSl7cmV0dXJuIHRoaXMucis9KHQuci10aGlzLnIpKmUsdGhpcy5nKz0odC5nLXRoaXMuZykqZSx0aGlzLmIrPSh0LmItdGhpcy5iKSplLHRoaXN9bGVycENvbG9ycyh0LGUsbil7cmV0dXJuIHRoaXMucj10LnIrKGUuci10LnIpKm4sdGhpcy5nPXQuZysoZS5nLXQuZykqbix0aGlzLmI9dC5iKyhlLmItdC5iKSpuLHRoaXN9bGVycEhTTCh0LGUpe3RoaXMuZ2V0SFNMKGdydCksdC5nZXRIU0woaHJ0KTtjb25zdCBuPWppdC5sZXJwKGdydC5oLGhydC5oLGUpLG89aml0LmxlcnAoZ3J0LnMsaHJ0LnMsZSksaT1qaXQubGVycChncnQubCxocnQubCxlKTtyZXR1cm4gdGhpcy5zZXRIU0wobixvLGkpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0LnI9PT10aGlzLnImJnQuZz09PXRoaXMuZyYmdC5iPT09dGhpcy5ifWZyb21BcnJheSh0LGU9MCl7cmV0dXJuIHRoaXMucj10W2VdLHRoaXMuZz10W2UrMV0sdGhpcy5iPXRbZSsyXSx0aGlzfXRvQXJyYXkodD1bXSxlPTApe3JldHVybiB0W2VdPXRoaXMucix0W2UrMV09dGhpcy5nLHRbZSsyXT10aGlzLmIsdH1mcm9tQnVmZmVyQXR0cmlidXRlKHQsZSl7cmV0dXJuIHRoaXMucj10LmdldFgoZSksdGhpcy5nPXQuZ2V0WShlKSx0aGlzLmI9dC5nZXRaKGUpLCEwPT09dC5ub3JtYWxpemVkJiYodGhpcy5yLz0yNTUsdGhpcy5nLz0yNTUsdGhpcy5iLz0yNTUpLHRoaXN9dG9KU09OKCl7cmV0dXJuIHRoaXMuZ2V0SGV4KCl9fUNydC5OQU1FUz1mcnQsQ3J0LnByb3RvdHlwZS5yPTEsQ3J0LnByb3RvdHlwZS5nPTEsQ3J0LnByb3RvdHlwZS5iPTE7Y2xhc3MgTXJ0e2NvbnN0cnVjdG9yKHQsZSxuLG8saSxhPTApe3RoaXMuYT10LHRoaXMuYj1lLHRoaXMuYz1uLHRoaXMubm9ybWFsPW8mJm8uaXNWZWN0b3IzP286bmV3ICRpdCx0aGlzLnZlcnRleE5vcm1hbHM9QXJyYXkuaXNBcnJheShvKT9vOltdLHRoaXMuY29sb3I9aSYmaS5pc0NvbG9yP2k6bmV3IENydCx0aGlzLnZlcnRleENvbG9ycz1BcnJheS5pc0FycmF5KGkpP2k6W10sdGhpcy5tYXRlcmlhbEluZGV4PWF9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9Y29weSh0KXt0aGlzLmE9dC5hLHRoaXMuYj10LmIsdGhpcy5jPXQuYyx0aGlzLm5vcm1hbC5jb3B5KHQubm9ybWFsKSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5tYXRlcmlhbEluZGV4PXQubWF0ZXJpYWxJbmRleDtmb3IobGV0IGU9MCxuPXQudmVydGV4Tm9ybWFscy5sZW5ndGg7ZTxuO2UrKyl0aGlzLnZlcnRleE5vcm1hbHNbZV09dC52ZXJ0ZXhOb3JtYWxzW2VdLmNsb25lKCk7Zm9yKGxldCBlPTAsbj10LnZlcnRleENvbG9ycy5sZW5ndGg7ZTxuO2UrKyl0aGlzLnZlcnRleENvbG9yc1tlXT10LnZlcnRleENvbG9yc1tlXS5jbG9uZSgpO3JldHVybiB0aGlzfX1sZXQgdnJ0PTA7ZnVuY3Rpb24geHJ0KCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlkIix7dmFsdWU6dnJ0Kyt9KSx0aGlzLnV1aWQ9aml0LmdlbmVyYXRlVVVJRCgpLHRoaXMubmFtZT0iIix0aGlzLnR5cGU9Ik1hdGVyaWFsIix0aGlzLmZvZz0hMCx0aGlzLmJsZW5kaW5nPTEsdGhpcy5zaWRlPTAsdGhpcy5mbGF0U2hhZGluZz0hMSx0aGlzLnZlcnRleENvbG9ycz0hMSx0aGlzLm9wYWNpdHk9MSx0aGlzLnRyYW5zcGFyZW50PSExLHRoaXMuYmxlbmRTcmM9MjA0LHRoaXMuYmxlbmREc3Q9MjA1LHRoaXMuYmxlbmRFcXVhdGlvbj1taXQsdGhpcy5ibGVuZFNyY0FscGhhPW51bGwsdGhpcy5ibGVuZERzdEFscGhhPW51bGwsdGhpcy5ibGVuZEVxdWF0aW9uQWxwaGE9bnVsbCx0aGlzLmRlcHRoRnVuYz0zLHRoaXMuZGVwdGhUZXN0PSEwLHRoaXMuZGVwdGhXcml0ZT0hMCx0aGlzLnN0ZW5jaWxXcml0ZU1hc2s9MjU1LHRoaXMuc3RlbmNpbEZ1bmM9NTE5LHRoaXMuc3RlbmNpbFJlZj0wLHRoaXMuc3RlbmNpbEZ1bmNNYXNrPTI1NSx0aGlzLnN0ZW5jaWxGYWlsPUlpdCx0aGlzLnN0ZW5jaWxaRmFpbD1JaXQsdGhpcy5zdGVuY2lsWlBhc3M9SWl0LHRoaXMuc3RlbmNpbFdyaXRlPSExLHRoaXMuY2xpcHBpbmdQbGFuZXM9bnVsbCx0aGlzLmNsaXBJbnRlcnNlY3Rpb249ITEsdGhpcy5jbGlwU2hhZG93cz0hMSx0aGlzLnNoYWRvd1NpZGU9bnVsbCx0aGlzLmNvbG9yV3JpdGU9ITAsdGhpcy5wcmVjaXNpb249bnVsbCx0aGlzLnBvbHlnb25PZmZzZXQ9ITEsdGhpcy5wb2x5Z29uT2Zmc2V0RmFjdG9yPTAsdGhpcy5wb2x5Z29uT2Zmc2V0VW5pdHM9MCx0aGlzLmRpdGhlcmluZz0hMSx0aGlzLmFscGhhVGVzdD0wLHRoaXMucHJlbXVsdGlwbGllZEFscGhhPSExLHRoaXMudmlzaWJsZT0hMCx0aGlzLnRvbmVNYXBwZWQ9ITAsdGhpcy51c2VyRGF0YT17fSx0aGlzLnZlcnNpb249MH1mdW5jdGlvbiBPcnQodCl7eHJ0LmNhbGwodGhpcyksdGhpcy50eXBlPSJNZXNoQmFzaWNNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgQ3J0KDE2Nzc3MjE1KSx0aGlzLm1hcD1udWxsLHRoaXMubGlnaHRNYXA9bnVsbCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTEsdGhpcy5hb01hcD1udWxsLHRoaXMuYW9NYXBJbnRlbnNpdHk9MSx0aGlzLnNwZWN1bGFyTWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZW52TWFwPW51bGwsdGhpcy5jb21iaW5lPTAsdGhpcy5yZWZsZWN0aXZpdHk9MSx0aGlzLnJlZnJhY3Rpb25SYXRpbz0uOTgsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZUxpbmVjYXA9InJvdW5kIix0aGlzLndpcmVmcmFtZUxpbmVqb2luPSJyb3VuZCIsdGhpcy5za2lubmluZz0hMSx0aGlzLm1vcnBoVGFyZ2V0cz0hMSx0aGlzLnNldFZhbHVlcyh0KX14cnQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShMaXQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6eHJ0LGlzTWF0ZXJpYWw6ITAsb25CZWZvcmVDb21waWxlOmZ1bmN0aW9uKCl7fSxjdXN0b21Qcm9ncmFtQ2FjaGVLZXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vbkJlZm9yZUNvbXBpbGUudG9TdHJpbmcoKX0sc2V0VmFsdWVzOmZ1bmN0aW9uKHQpe2lmKHZvaWQgMCE9PXQpZm9yKGNvbnN0IGUgaW4gdCl7Y29uc3Qgbj10W2VdO2lmKHZvaWQgMD09PW4pe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6ICciK2UrIicgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZC4iKTtjb250aW51ZX1pZigic2hhZGluZyI9PT1lKXtjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zaGFkaW5nIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB0aGUgYm9vbGVhbiAuZmxhdFNoYWRpbmcgaW5zdGVhZC4iKSx0aGlzLmZsYXRTaGFkaW5nPTE9PT1uO2NvbnRpbnVlfWNvbnN0IG89dGhpc1tlXTt2b2lkIDAhPT1vP28mJm8uaXNDb2xvcj9vLnNldChuKTpvJiZvLmlzVmVjdG9yMyYmbiYmbi5pc1ZlY3RvcjM/by5jb3B5KG4pOnRoaXNbZV09bjpjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6ICciK2UrIicgaXMgbm90IGEgcHJvcGVydHkgb2YgdGhpcyBtYXRlcmlhbC4iKX19LHRvSlNPTjpmdW5jdGlvbih0KXtjb25zdCBlPXZvaWQgMD09PXR8fCJzdHJpbmciPT10eXBlb2YgdDtlJiYodD17dGV4dHVyZXM6e30saW1hZ2VzOnt9fSk7Y29uc3Qgbj17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6Ik1hdGVyaWFsIixnZW5lcmF0b3I6Ik1hdGVyaWFsLnRvSlNPTiJ9fTtmdW5jdGlvbiBvKHQpe2NvbnN0IGU9W107Zm9yKGNvbnN0IG4gaW4gdCl7Y29uc3Qgbz10W25dO2RlbGV0ZSBvLm1ldGFkYXRhLGUucHVzaChvKX1yZXR1cm4gZX1pZihuLnV1aWQ9dGhpcy51dWlkLG4udHlwZT10aGlzLnR5cGUsIiIhPT10aGlzLm5hbWUmJihuLm5hbWU9dGhpcy5uYW1lKSx0aGlzLmNvbG9yJiZ0aGlzLmNvbG9yLmlzQ29sb3ImJihuLmNvbG9yPXRoaXMuY29sb3IuZ2V0SGV4KCkpLHZvaWQgMCE9PXRoaXMucm91Z2huZXNzJiYobi5yb3VnaG5lc3M9dGhpcy5yb3VnaG5lc3MpLHZvaWQgMCE9PXRoaXMubWV0YWxuZXNzJiYobi5tZXRhbG5lc3M9dGhpcy5tZXRhbG5lc3MpLHRoaXMuc2hlZW4mJnRoaXMuc2hlZW4uaXNDb2xvciYmKG4uc2hlZW49dGhpcy5zaGVlbi5nZXRIZXgoKSksdGhpcy5lbWlzc2l2ZSYmdGhpcy5lbWlzc2l2ZS5pc0NvbG9yJiYobi5lbWlzc2l2ZT10aGlzLmVtaXNzaXZlLmdldEhleCgpKSx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5JiYxIT09dGhpcy5lbWlzc2l2ZUludGVuc2l0eSYmKG4uZW1pc3NpdmVJbnRlbnNpdHk9dGhpcy5lbWlzc2l2ZUludGVuc2l0eSksdGhpcy5zcGVjdWxhciYmdGhpcy5zcGVjdWxhci5pc0NvbG9yJiYobi5zcGVjdWxhcj10aGlzLnNwZWN1bGFyLmdldEhleCgpKSx2b2lkIDAhPT10aGlzLnNoaW5pbmVzcyYmKG4uc2hpbmluZXNzPXRoaXMuc2hpbmluZXNzKSx2b2lkIDAhPT10aGlzLmNsZWFyY29hdCYmKG4uY2xlYXJjb2F0PXRoaXMuY2xlYXJjb2F0KSx2b2lkIDAhPT10aGlzLmNsZWFyY29hdFJvdWdobmVzcyYmKG4uY2xlYXJjb2F0Um91Z2huZXNzPXRoaXMuY2xlYXJjb2F0Um91Z2huZXNzKSx0aGlzLmNsZWFyY29hdE1hcCYmdGhpcy5jbGVhcmNvYXRNYXAuaXNUZXh0dXJlJiYobi5jbGVhcmNvYXRNYXA9dGhpcy5jbGVhcmNvYXRNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuY2xlYXJjb2F0Um91Z2huZXNzTWFwJiZ0aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcC5pc1RleHR1cmUmJihuLmNsZWFyY29hdFJvdWdobmVzc01hcD10aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcC50b0pTT04odCkudXVpZCksdGhpcy5jbGVhcmNvYXROb3JtYWxNYXAmJnRoaXMuY2xlYXJjb2F0Tm9ybWFsTWFwLmlzVGV4dHVyZSYmKG4uY2xlYXJjb2F0Tm9ybWFsTWFwPXRoaXMuY2xlYXJjb2F0Tm9ybWFsTWFwLnRvSlNPTih0KS51dWlkLG4uY2xlYXJjb2F0Tm9ybWFsU2NhbGU9dGhpcy5jbGVhcmNvYXROb3JtYWxTY2FsZS50b0FycmF5KCkpLHRoaXMubWFwJiZ0aGlzLm1hcC5pc1RleHR1cmUmJihuLm1hcD10aGlzLm1hcC50b0pTT04odCkudXVpZCksdGhpcy5tYXRjYXAmJnRoaXMubWF0Y2FwLmlzVGV4dHVyZSYmKG4ubWF0Y2FwPXRoaXMubWF0Y2FwLnRvSlNPTih0KS51dWlkKSx0aGlzLmFscGhhTWFwJiZ0aGlzLmFscGhhTWFwLmlzVGV4dHVyZSYmKG4uYWxwaGFNYXA9dGhpcy5hbHBoYU1hcC50b0pTT04odCkudXVpZCksdGhpcy5saWdodE1hcCYmdGhpcy5saWdodE1hcC5pc1RleHR1cmUmJihuLmxpZ2h0TWFwPXRoaXMubGlnaHRNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuYW9NYXAmJnRoaXMuYW9NYXAuaXNUZXh0dXJlJiYobi5hb01hcD10aGlzLmFvTWFwLnRvSlNPTih0KS51dWlkLG4uYW9NYXBJbnRlbnNpdHk9dGhpcy5hb01hcEludGVuc2l0eSksdGhpcy5idW1wTWFwJiZ0aGlzLmJ1bXBNYXAuaXNUZXh0dXJlJiYobi5idW1wTWFwPXRoaXMuYnVtcE1hcC50b0pTT04odCkudXVpZCxuLmJ1bXBTY2FsZT10aGlzLmJ1bXBTY2FsZSksdGhpcy5ub3JtYWxNYXAmJnRoaXMubm9ybWFsTWFwLmlzVGV4dHVyZSYmKG4ubm9ybWFsTWFwPXRoaXMubm9ybWFsTWFwLnRvSlNPTih0KS51dWlkLG4ubm9ybWFsTWFwVHlwZT10aGlzLm5vcm1hbE1hcFR5cGUsbi5ub3JtYWxTY2FsZT10aGlzLm5vcm1hbFNjYWxlLnRvQXJyYXkoKSksdGhpcy5kaXNwbGFjZW1lbnRNYXAmJnRoaXMuZGlzcGxhY2VtZW50TWFwLmlzVGV4dHVyZSYmKG4uZGlzcGxhY2VtZW50TWFwPXRoaXMuZGlzcGxhY2VtZW50TWFwLnRvSlNPTih0KS51dWlkLG4uZGlzcGxhY2VtZW50U2NhbGU9dGhpcy5kaXNwbGFjZW1lbnRTY2FsZSxuLmRpc3BsYWNlbWVudEJpYXM9dGhpcy5kaXNwbGFjZW1lbnRCaWFzKSx0aGlzLnJvdWdobmVzc01hcCYmdGhpcy5yb3VnaG5lc3NNYXAuaXNUZXh0dXJlJiYobi5yb3VnaG5lc3NNYXA9dGhpcy5yb3VnaG5lc3NNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMubWV0YWxuZXNzTWFwJiZ0aGlzLm1ldGFsbmVzc01hcC5pc1RleHR1cmUmJihuLm1ldGFsbmVzc01hcD10aGlzLm1ldGFsbmVzc01hcC50b0pTT04odCkudXVpZCksdGhpcy5lbWlzc2l2ZU1hcCYmdGhpcy5lbWlzc2l2ZU1hcC5pc1RleHR1cmUmJihuLmVtaXNzaXZlTWFwPXRoaXMuZW1pc3NpdmVNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuc3BlY3VsYXJNYXAmJnRoaXMuc3BlY3VsYXJNYXAuaXNUZXh0dXJlJiYobi5zcGVjdWxhck1hcD10aGlzLnNwZWN1bGFyTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmVudk1hcCYmdGhpcy5lbnZNYXAuaXNUZXh0dXJlJiYobi5lbnZNYXA9dGhpcy5lbnZNYXAudG9KU09OKHQpLnV1aWQsbi5yZWZsZWN0aXZpdHk9dGhpcy5yZWZsZWN0aXZpdHksbi5yZWZyYWN0aW9uUmF0aW89dGhpcy5yZWZyYWN0aW9uUmF0aW8sdm9pZCAwIT09dGhpcy5jb21iaW5lJiYobi5jb21iaW5lPXRoaXMuY29tYmluZSksdm9pZCAwIT09dGhpcy5lbnZNYXBJbnRlbnNpdHkmJihuLmVudk1hcEludGVuc2l0eT10aGlzLmVudk1hcEludGVuc2l0eSkpLHRoaXMuZ3JhZGllbnRNYXAmJnRoaXMuZ3JhZGllbnRNYXAuaXNUZXh0dXJlJiYobi5ncmFkaWVudE1hcD10aGlzLmdyYWRpZW50TWFwLnRvSlNPTih0KS51dWlkKSx2b2lkIDAhPT10aGlzLnNpemUmJihuLnNpemU9dGhpcy5zaXplKSx2b2lkIDAhPT10aGlzLnNpemVBdHRlbnVhdGlvbiYmKG4uc2l6ZUF0dGVudWF0aW9uPXRoaXMuc2l6ZUF0dGVudWF0aW9uKSwxIT09dGhpcy5ibGVuZGluZyYmKG4uYmxlbmRpbmc9dGhpcy5ibGVuZGluZyksITA9PT10aGlzLmZsYXRTaGFkaW5nJiYobi5mbGF0U2hhZGluZz10aGlzLmZsYXRTaGFkaW5nKSwwIT09dGhpcy5zaWRlJiYobi5zaWRlPXRoaXMuc2lkZSksdGhpcy52ZXJ0ZXhDb2xvcnMmJihuLnZlcnRleENvbG9ycz0hMCksdGhpcy5vcGFjaXR5PDEmJihuLm9wYWNpdHk9dGhpcy5vcGFjaXR5KSwhMD09PXRoaXMudHJhbnNwYXJlbnQmJihuLnRyYW5zcGFyZW50PXRoaXMudHJhbnNwYXJlbnQpLG4uZGVwdGhGdW5jPXRoaXMuZGVwdGhGdW5jLG4uZGVwdGhUZXN0PXRoaXMuZGVwdGhUZXN0LG4uZGVwdGhXcml0ZT10aGlzLmRlcHRoV3JpdGUsbi5zdGVuY2lsV3JpdGU9dGhpcy5zdGVuY2lsV3JpdGUsbi5zdGVuY2lsV3JpdGVNYXNrPXRoaXMuc3RlbmNpbFdyaXRlTWFzayxuLnN0ZW5jaWxGdW5jPXRoaXMuc3RlbmNpbEZ1bmMsbi5zdGVuY2lsUmVmPXRoaXMuc3RlbmNpbFJlZixuLnN0ZW5jaWxGdW5jTWFzaz10aGlzLnN0ZW5jaWxGdW5jTWFzayxuLnN0ZW5jaWxGYWlsPXRoaXMuc3RlbmNpbEZhaWwsbi5zdGVuY2lsWkZhaWw9dGhpcy5zdGVuY2lsWkZhaWwsbi5zdGVuY2lsWlBhc3M9dGhpcy5zdGVuY2lsWlBhc3MsdGhpcy5yb3RhdGlvbiYmMCE9PXRoaXMucm90YXRpb24mJihuLnJvdGF0aW9uPXRoaXMucm90YXRpb24pLCEwPT09dGhpcy5wb2x5Z29uT2Zmc2V0JiYobi5wb2x5Z29uT2Zmc2V0PSEwKSwwIT09dGhpcy5wb2x5Z29uT2Zmc2V0RmFjdG9yJiYobi5wb2x5Z29uT2Zmc2V0RmFjdG9yPXRoaXMucG9seWdvbk9mZnNldEZhY3RvciksMCE9PXRoaXMucG9seWdvbk9mZnNldFVuaXRzJiYobi5wb2x5Z29uT2Zmc2V0VW5pdHM9dGhpcy5wb2x5Z29uT2Zmc2V0VW5pdHMpLHRoaXMubGluZXdpZHRoJiYxIT09dGhpcy5saW5ld2lkdGgmJihuLmxpbmV3aWR0aD10aGlzLmxpbmV3aWR0aCksdm9pZCAwIT09dGhpcy5kYXNoU2l6ZSYmKG4uZGFzaFNpemU9dGhpcy5kYXNoU2l6ZSksdm9pZCAwIT09dGhpcy5nYXBTaXplJiYobi5nYXBTaXplPXRoaXMuZ2FwU2l6ZSksdm9pZCAwIT09dGhpcy5zY2FsZSYmKG4uc2NhbGU9dGhpcy5zY2FsZSksITA9PT10aGlzLmRpdGhlcmluZyYmKG4uZGl0aGVyaW5nPSEwKSx0aGlzLmFscGhhVGVzdD4wJiYobi5hbHBoYVRlc3Q9dGhpcy5hbHBoYVRlc3QpLCEwPT09dGhpcy5wcmVtdWx0aXBsaWVkQWxwaGEmJihuLnByZW11bHRpcGxpZWRBbHBoYT10aGlzLnByZW11bHRpcGxpZWRBbHBoYSksITA9PT10aGlzLndpcmVmcmFtZSYmKG4ud2lyZWZyYW1lPXRoaXMud2lyZWZyYW1lKSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD4xJiYobi53aXJlZnJhbWVMaW5ld2lkdGg9dGhpcy53aXJlZnJhbWVMaW5ld2lkdGgpLCJyb3VuZCIhPT10aGlzLndpcmVmcmFtZUxpbmVjYXAmJihuLndpcmVmcmFtZUxpbmVjYXA9dGhpcy53aXJlZnJhbWVMaW5lY2FwKSwicm91bmQiIT09dGhpcy53aXJlZnJhbWVMaW5lam9pbiYmKG4ud2lyZWZyYW1lTGluZWpvaW49dGhpcy53aXJlZnJhbWVMaW5lam9pbiksITA9PT10aGlzLm1vcnBoVGFyZ2V0cyYmKG4ubW9ycGhUYXJnZXRzPSEwKSwhMD09PXRoaXMubW9ycGhOb3JtYWxzJiYobi5tb3JwaE5vcm1hbHM9ITApLCEwPT09dGhpcy5za2lubmluZyYmKG4uc2tpbm5pbmc9ITApLCExPT09dGhpcy52aXNpYmxlJiYobi52aXNpYmxlPSExKSwhMT09PXRoaXMudG9uZU1hcHBlZCYmKG4udG9uZU1hcHBlZD0hMSksInt9IiE9PUpTT04uc3RyaW5naWZ5KHRoaXMudXNlckRhdGEpJiYobi51c2VyRGF0YT10aGlzLnVzZXJEYXRhKSxlKXtjb25zdCBlPW8odC50ZXh0dXJlcyksaT1vKHQuaW1hZ2VzKTtlLmxlbmd0aD4wJiYobi50ZXh0dXJlcz1lKSxpLmxlbmd0aD4wJiYobi5pbWFnZXM9aSl9cmV0dXJuIG59LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfSxjb3B5OmZ1bmN0aW9uKHQpe3RoaXMubmFtZT10Lm5hbWUsdGhpcy5mb2c9dC5mb2csdGhpcy5ibGVuZGluZz10LmJsZW5kaW5nLHRoaXMuc2lkZT10LnNpZGUsdGhpcy5mbGF0U2hhZGluZz10LmZsYXRTaGFkaW5nLHRoaXMudmVydGV4Q29sb3JzPXQudmVydGV4Q29sb3JzLHRoaXMub3BhY2l0eT10Lm9wYWNpdHksdGhpcy50cmFuc3BhcmVudD10LnRyYW5zcGFyZW50LHRoaXMuYmxlbmRTcmM9dC5ibGVuZFNyYyx0aGlzLmJsZW5kRHN0PXQuYmxlbmREc3QsdGhpcy5ibGVuZEVxdWF0aW9uPXQuYmxlbmRFcXVhdGlvbix0aGlzLmJsZW5kU3JjQWxwaGE9dC5ibGVuZFNyY0FscGhhLHRoaXMuYmxlbmREc3RBbHBoYT10LmJsZW5kRHN0QWxwaGEsdGhpcy5ibGVuZEVxdWF0aW9uQWxwaGE9dC5ibGVuZEVxdWF0aW9uQWxwaGEsdGhpcy5kZXB0aEZ1bmM9dC5kZXB0aEZ1bmMsdGhpcy5kZXB0aFRlc3Q9dC5kZXB0aFRlc3QsdGhpcy5kZXB0aFdyaXRlPXQuZGVwdGhXcml0ZSx0aGlzLnN0ZW5jaWxXcml0ZU1hc2s9dC5zdGVuY2lsV3JpdGVNYXNrLHRoaXMuc3RlbmNpbEZ1bmM9dC5zdGVuY2lsRnVuYyx0aGlzLnN0ZW5jaWxSZWY9dC5zdGVuY2lsUmVmLHRoaXMuc3RlbmNpbEZ1bmNNYXNrPXQuc3RlbmNpbEZ1bmNNYXNrLHRoaXMuc3RlbmNpbEZhaWw9dC5zdGVuY2lsRmFpbCx0aGlzLnN0ZW5jaWxaRmFpbD10LnN0ZW5jaWxaRmFpbCx0aGlzLnN0ZW5jaWxaUGFzcz10LnN0ZW5jaWxaUGFzcyx0aGlzLnN0ZW5jaWxXcml0ZT10LnN0ZW5jaWxXcml0ZTtjb25zdCBlPXQuY2xpcHBpbmdQbGFuZXM7bGV0IG49bnVsbDtpZihudWxsIT09ZSl7Y29uc3QgdD1lLmxlbmd0aDtuPW5ldyBBcnJheSh0KTtmb3IobGV0IG89MDtvIT09dDsrK28pbltvXT1lW29dLmNsb25lKCl9cmV0dXJuIHRoaXMuY2xpcHBpbmdQbGFuZXM9bix0aGlzLmNsaXBJbnRlcnNlY3Rpb249dC5jbGlwSW50ZXJzZWN0aW9uLHRoaXMuY2xpcFNoYWRvd3M9dC5jbGlwU2hhZG93cyx0aGlzLnNoYWRvd1NpZGU9dC5zaGFkb3dTaWRlLHRoaXMuY29sb3JXcml0ZT10LmNvbG9yV3JpdGUsdGhpcy5wcmVjaXNpb249dC5wcmVjaXNpb24sdGhpcy5wb2x5Z29uT2Zmc2V0PXQucG9seWdvbk9mZnNldCx0aGlzLnBvbHlnb25PZmZzZXRGYWN0b3I9dC5wb2x5Z29uT2Zmc2V0RmFjdG9yLHRoaXMucG9seWdvbk9mZnNldFVuaXRzPXQucG9seWdvbk9mZnNldFVuaXRzLHRoaXMuZGl0aGVyaW5nPXQuZGl0aGVyaW5nLHRoaXMuYWxwaGFUZXN0PXQuYWxwaGFUZXN0LHRoaXMucHJlbXVsdGlwbGllZEFscGhhPXQucHJlbXVsdGlwbGllZEFscGhhLHRoaXMudmlzaWJsZT10LnZpc2libGUsdGhpcy50b25lTWFwcGVkPXQudG9uZU1hcHBlZCx0aGlzLnVzZXJEYXRhPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodC51c2VyRGF0YSkpLHRoaXN9LGRpc3Bvc2U6ZnVuY3Rpb24oKXt0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc3Bvc2UifSl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHhydC5wcm90b3R5cGUsIm5lZWRzVXBkYXRlIix7c2V0OmZ1bmN0aW9uKHQpeyEwPT09dCYmdGhpcy52ZXJzaW9uKyt9fSksKE9ydC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh4cnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9T3J0LE9ydC5wcm90b3R5cGUuaXNNZXNoQmFzaWNNYXRlcmlhbD0hMCxPcnQucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24odCl7cmV0dXJuIHhydC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubWFwPXQubWFwLHRoaXMubGlnaHRNYXA9dC5saWdodE1hcCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PXQubGlnaHRNYXBJbnRlbnNpdHksdGhpcy5hb01hcD10LmFvTWFwLHRoaXMuYW9NYXBJbnRlbnNpdHk9dC5hb01hcEludGVuc2l0eSx0aGlzLnNwZWN1bGFyTWFwPXQuc3BlY3VsYXJNYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZW52TWFwPXQuZW52TWFwLHRoaXMuY29tYmluZT10LmNvbWJpbmUsdGhpcy5yZWZsZWN0aXZpdHk9dC5yZWZsZWN0aXZpdHksdGhpcy5yZWZyYWN0aW9uUmF0aW89dC5yZWZyYWN0aW9uUmF0aW8sdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpcy5za2lubmluZz10LnNraW5uaW5nLHRoaXMubW9ycGhUYXJnZXRzPXQubW9ycGhUYXJnZXRzLHRoaXN9O2NvbnN0IFBydD1uZXcgJGl0LHdydD1uZXcgVWl0O2Z1bmN0aW9uIGtydCh0LGUsbil7aWYoQXJyYXkuaXNBcnJheSh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IGFycmF5IHNob3VsZCBiZSBhIFR5cGVkIEFycmF5LiIpO3RoaXMubmFtZT0iIix0aGlzLmFycmF5PXQsdGhpcy5pdGVtU2l6ZT1lLHRoaXMuY291bnQ9dm9pZCAwIT09dD90Lmxlbmd0aC9lOjAsdGhpcy5ub3JtYWxpemVkPSEwPT09bix0aGlzLnVzYWdlPXppdCx0aGlzLnVwZGF0ZVJhbmdlPXtvZmZzZXQ6MCxjb3VudDotMX0sdGhpcy52ZXJzaW9uPTB9ZnVuY3Rpb24gU3J0KHQsZSxuKXtrcnQuY2FsbCh0aGlzLG5ldyBJbnQ4QXJyYXkodCksZSxuKX1mdW5jdGlvbiBEcnQodCxlLG4pe2tydC5jYWxsKHRoaXMsbmV3IFVpbnQ4QXJyYXkodCksZSxuKX1mdW5jdGlvbiBFcnQodCxlLG4pe2tydC5jYWxsKHRoaXMsbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHQpLGUsbil9ZnVuY3Rpb24gQXJ0KHQsZSxuKXtrcnQuY2FsbCh0aGlzLG5ldyBJbnQxNkFycmF5KHQpLGUsbil9ZnVuY3Rpb24gUnJ0KHQsZSxuKXtrcnQuY2FsbCh0aGlzLG5ldyBVaW50MTZBcnJheSh0KSxlLG4pfWZ1bmN0aW9uIFRydCh0LGUsbil7a3J0LmNhbGwodGhpcyxuZXcgSW50MzJBcnJheSh0KSxlLG4pfWZ1bmN0aW9uIE5ydCh0LGUsbil7a3J0LmNhbGwodGhpcyxuZXcgVWludDMyQXJyYXkodCksZSxuKX1mdW5jdGlvbiBJcnQodCxlLG4pe2tydC5jYWxsKHRoaXMsbmV3IFVpbnQxNkFycmF5KHQpLGUsbil9ZnVuY3Rpb24genJ0KHQsZSxuKXtrcnQuY2FsbCh0aGlzLG5ldyBGbG9hdDMyQXJyYXkodCksZSxuKX1mdW5jdGlvbiBIcnQodCxlLG4pe2tydC5jYWxsKHRoaXMsbmV3IEZsb2F0NjRBcnJheSh0KSxlLG4pfWZ1bmN0aW9uIEZydCh0KXtpZigwPT09dC5sZW5ndGgpcmV0dXJuLTEvMDtsZXQgZT10WzBdO2ZvcihsZXQgbj0xLG89dC5sZW5ndGg7bjxvOysrbil0W25dPmUmJihlPXRbbl0pO3JldHVybiBlfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShrcnQucHJvdG90eXBlLCJuZWVkc1VwZGF0ZSIse3NldDpmdW5jdGlvbih0KXshMD09PXQmJnRoaXMudmVyc2lvbisrfX0pLE9iamVjdC5hc3NpZ24oa3J0LnByb3RvdHlwZSx7aXNCdWZmZXJBdHRyaWJ1dGU6ITAsb25VcGxvYWRDYWxsYmFjazpmdW5jdGlvbigpe30sc2V0VXNhZ2U6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudXNhZ2U9dCx0aGlzfSxjb3B5OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm5hbWU9dC5uYW1lLHRoaXMuYXJyYXk9bmV3IHQuYXJyYXkuY29uc3RydWN0b3IodC5hcnJheSksdGhpcy5pdGVtU2l6ZT10Lml0ZW1TaXplLHRoaXMuY291bnQ9dC5jb3VudCx0aGlzLm5vcm1hbGl6ZWQ9dC5ub3JtYWxpemVkLHRoaXMudXNhZ2U9dC51c2FnZSx0aGlzfSxjb3B5QXQ6ZnVuY3Rpb24odCxlLG4pe3QqPXRoaXMuaXRlbVNpemUsbio9ZS5pdGVtU2l6ZTtmb3IobGV0IG89MCxpPXRoaXMuaXRlbVNpemU7bzxpO28rKyl0aGlzLmFycmF5W3Qrb109ZS5hcnJheVtuK29dO3JldHVybiB0aGlzfSxjb3B5QXJyYXk6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYXJyYXkuc2V0KHQpLHRoaXN9LGNvcHlDb2xvcnNBcnJheTpmdW5jdGlvbih0KXtjb25zdCBlPXRoaXMuYXJyYXk7bGV0IG49MDtmb3IobGV0IG89MCxpPXQubGVuZ3RoO288aTtvKyspe2xldCBpPXRbb107dm9pZCAwPT09aSYmKGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlDb2xvcnNBcnJheSgpOiBjb2xvciBpcyB1bmRlZmluZWQiLG8pLGk9bmV3IENydCksZVtuKytdPWkucixlW24rK109aS5nLGVbbisrXT1pLmJ9cmV0dXJuIHRoaXN9LGNvcHlWZWN0b3Iyc0FycmF5OmZ1bmN0aW9uKHQpe2NvbnN0IGU9dGhpcy5hcnJheTtsZXQgbj0wO2ZvcihsZXQgbz0wLGk9dC5sZW5ndGg7bzxpO28rKyl7bGV0IGk9dFtvXTt2b2lkIDA9PT1pJiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weVZlY3RvcjJzQXJyYXkoKTogdmVjdG9yIGlzIHVuZGVmaW5lZCIsbyksaT1uZXcgVWl0KSxlW24rK109aS54LGVbbisrXT1pLnl9cmV0dXJuIHRoaXN9LGNvcHlWZWN0b3Izc0FycmF5OmZ1bmN0aW9uKHQpe2NvbnN0IGU9dGhpcy5hcnJheTtsZXQgbj0wO2ZvcihsZXQgbz0wLGk9dC5sZW5ndGg7bzxpO28rKyl7bGV0IGk9dFtvXTt2b2lkIDA9PT1pJiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weVZlY3RvcjNzQXJyYXkoKTogdmVjdG9yIGlzIHVuZGVmaW5lZCIsbyksaT1uZXcgJGl0KSxlW24rK109aS54LGVbbisrXT1pLnksZVtuKytdPWkuen1yZXR1cm4gdGhpc30sY29weVZlY3RvcjRzQXJyYXk6ZnVuY3Rpb24odCl7Y29uc3QgZT10aGlzLmFycmF5O2xldCBuPTA7Zm9yKGxldCBvPTAsaT10Lmxlbmd0aDtvPGk7bysrKXtsZXQgaT10W29dO3ZvaWQgMD09PWkmJihjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZS5jb3B5VmVjdG9yNHNBcnJheSgpOiB2ZWN0b3IgaXMgdW5kZWZpbmVkIixvKSxpPW5ldyBLaXQpLGVbbisrXT1pLngsZVtuKytdPWkueSxlW24rK109aS56LGVbbisrXT1pLnd9cmV0dXJuIHRoaXN9LGFwcGx5TWF0cml4MzpmdW5jdGlvbih0KXtpZigyPT09dGhpcy5pdGVtU2l6ZSlmb3IobGV0IGU9MCxuPXRoaXMuY291bnQ7ZTxuO2UrKyl3cnQuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0aGlzLGUpLHdydC5hcHBseU1hdHJpeDModCksdGhpcy5zZXRYWShlLHdydC54LHdydC55KTtlbHNlIGlmKDM9PT10aGlzLml0ZW1TaXplKWZvcihsZXQgZT0wLG49dGhpcy5jb3VudDtlPG47ZSsrKVBydC5mcm9tQnVmZmVyQXR0cmlidXRlKHRoaXMsZSksUHJ0LmFwcGx5TWF0cml4Myh0KSx0aGlzLnNldFhZWihlLFBydC54LFBydC55LFBydC56KTtyZXR1cm4gdGhpc30sYXBwbHlNYXRyaXg0OmZ1bmN0aW9uKHQpe2ZvcihsZXQgZT0wLG49dGhpcy5jb3VudDtlPG47ZSsrKVBydC54PXRoaXMuZ2V0WChlKSxQcnQueT10aGlzLmdldFkoZSksUHJ0Lno9dGhpcy5nZXRaKGUpLFBydC5hcHBseU1hdHJpeDQodCksdGhpcy5zZXRYWVooZSxQcnQueCxQcnQueSxQcnQueik7cmV0dXJuIHRoaXN9LGFwcGx5Tm9ybWFsTWF0cml4OmZ1bmN0aW9uKHQpe2ZvcihsZXQgZT0wLG49dGhpcy5jb3VudDtlPG47ZSsrKVBydC54PXRoaXMuZ2V0WChlKSxQcnQueT10aGlzLmdldFkoZSksUHJ0Lno9dGhpcy5nZXRaKGUpLFBydC5hcHBseU5vcm1hbE1hdHJpeCh0KSx0aGlzLnNldFhZWihlLFBydC54LFBydC55LFBydC56KTtyZXR1cm4gdGhpc30sdHJhbnNmb3JtRGlyZWN0aW9uOmZ1bmN0aW9uKHQpe2ZvcihsZXQgZT0wLG49dGhpcy5jb3VudDtlPG47ZSsrKVBydC54PXRoaXMuZ2V0WChlKSxQcnQueT10aGlzLmdldFkoZSksUHJ0Lno9dGhpcy5nZXRaKGUpLFBydC50cmFuc2Zvcm1EaXJlY3Rpb24odCksdGhpcy5zZXRYWVooZSxQcnQueCxQcnQueSxQcnQueik7cmV0dXJuIHRoaXN9LHNldDpmdW5jdGlvbih0LGU9MCl7cmV0dXJuIHRoaXMuYXJyYXkuc2V0KHQsZSksdGhpc30sZ2V0WDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemVdfSxzZXRYOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplXT1lLHRoaXN9LGdldFk6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzFdfSxzZXRZOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzFdPWUsdGhpc30sZ2V0WjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemUrMl19LHNldFo6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemUrMl09ZSx0aGlzfSxnZXRXOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSszXX0sc2V0VzpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSszXT1lLHRoaXN9LHNldFhZOmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5hcnJheVswKyh0Kj10aGlzLml0ZW1TaXplKV09ZSx0aGlzLmFycmF5W3QrMV09bix0aGlzfSxzZXRYWVo6ZnVuY3Rpb24odCxlLG4sbyl7cmV0dXJuIHRoaXMuYXJyYXlbMCsodCo9dGhpcy5pdGVtU2l6ZSldPWUsdGhpcy5hcnJheVt0KzFdPW4sdGhpcy5hcnJheVt0KzJdPW8sdGhpc30sc2V0WFlaVzpmdW5jdGlvbih0LGUsbixvLGkpe3JldHVybiB0aGlzLmFycmF5WzArKHQqPXRoaXMuaXRlbVNpemUpXT1lLHRoaXMuYXJyYXlbdCsxXT1uLHRoaXMuYXJyYXlbdCsyXT1vLHRoaXMuYXJyYXlbdCszXT1pLHRoaXN9LG9uVXBsb2FkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9uVXBsb2FkQ2FsbGJhY2s9dCx0aGlzfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLmFycmF5LHRoaXMuaXRlbVNpemUpLmNvcHkodGhpcyl9LHRvSlNPTjpmdW5jdGlvbigpe3JldHVybntpdGVtU2l6ZTp0aGlzLml0ZW1TaXplLHR5cGU6dGhpcy5hcnJheS5jb25zdHJ1Y3Rvci5uYW1lLGFycmF5OkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuYXJyYXkpLG5vcm1hbGl6ZWQ6dGhpcy5ub3JtYWxpemVkfX19KSwoU3J0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGtydC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1TcnQsKERydC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShrcnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9RHJ0LChFcnQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoa3J0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPUVydCwoQXJ0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGtydC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1BcnQsKFJydC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShrcnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9UnJ0LChUcnQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoa3J0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPVRydCwoTnJ0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGtydC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1OcnQsKElydC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShrcnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9SXJ0LElydC5wcm90b3R5cGUuaXNGbG9hdDE2QnVmZmVyQXR0cmlidXRlPSEwLCh6cnQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoa3J0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPXpydCwoSHJ0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGtydC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1IcnQ7Y29uc3QgTHJ0PXtJbnQ4QXJyYXk6SW50OEFycmF5LFVpbnQ4QXJyYXk6VWludDhBcnJheSxVaW50OENsYW1wZWRBcnJheToidW5kZWZpbmVkIiE9dHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5P1VpbnQ4Q2xhbXBlZEFycmF5OlVpbnQ4QXJyYXksSW50MTZBcnJheTpJbnQxNkFycmF5LFVpbnQxNkFycmF5OlVpbnQxNkFycmF5LEludDMyQXJyYXk6SW50MzJBcnJheSxVaW50MzJBcnJheTpVaW50MzJBcnJheSxGbG9hdDMyQXJyYXk6RmxvYXQzMkFycmF5LEZsb2F0NjRBcnJheTpGbG9hdDY0QXJyYXl9O2Z1bmN0aW9uIEJydCh0LGUpe3JldHVybiBuZXcgTHJ0W3RdKGUpfWxldCBWcnQ9MDtjb25zdCBqcnQ9bmV3IGthdCxVcnQ9bmV3IFFhdCxXcnQ9bmV3ICRpdCxHcnQ9bmV3IG5hdCxZcnQ9bmV3IG5hdCxxcnQ9bmV3ICRpdDtmdW5jdGlvbiBacnQoKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTpWcnQrK30pLHRoaXMudXVpZD1qaXQuZ2VuZXJhdGVVVUlEKCksdGhpcy5uYW1lPSIiLHRoaXMudHlwZT0iQnVmZmVyR2VvbWV0cnkiLHRoaXMuaW5kZXg9bnVsbCx0aGlzLmF0dHJpYnV0ZXM9e30sdGhpcy5tb3JwaEF0dHJpYnV0ZXM9e30sdGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZT0hMSx0aGlzLmdyb3Vwcz1bXSx0aGlzLmJvdW5kaW5nQm94PW51bGwsdGhpcy5ib3VuZGluZ1NwaGVyZT1udWxsLHRoaXMuZHJhd1JhbmdlPXtzdGFydDowLGNvdW50OjEvMH0sdGhpcy51c2VyRGF0YT17fX1acnQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShMaXQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6WnJ0LGlzQnVmZmVyR2VvbWV0cnk6ITAsZ2V0SW5kZXg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbmRleH0sc2V0SW5kZXg6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW5kZXg9QXJyYXkuaXNBcnJheSh0KT9uZXcoRnJ0KHQpPjY1NTM1P05ydDpScnQpKHQsMSk6dCx0aGlzfSxnZXRBdHRyaWJ1dGU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYXR0cmlidXRlc1t0XX0sc2V0QXR0cmlidXRlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuYXR0cmlidXRlc1t0XT1lLHRoaXN9LGRlbGV0ZUF0dHJpYnV0ZTpmdW5jdGlvbih0KXtyZXR1cm4gZGVsZXRlIHRoaXMuYXR0cmlidXRlc1t0XSx0aGlzfSxoYXNBdHRyaWJ1dGU6ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuYXR0cmlidXRlc1t0XX0sYWRkR3JvdXA6ZnVuY3Rpb24odCxlLG49MCl7dGhpcy5ncm91cHMucHVzaCh7c3RhcnQ6dCxjb3VudDplLG1hdGVyaWFsSW5kZXg6bn0pfSxjbGVhckdyb3VwczpmdW5jdGlvbigpe3RoaXMuZ3JvdXBzPVtdfSxzZXREcmF3UmFuZ2U6ZnVuY3Rpb24odCxlKXt0aGlzLmRyYXdSYW5nZS5zdGFydD10LHRoaXMuZHJhd1JhbmdlLmNvdW50PWV9LGFwcGx5TWF0cml4NDpmdW5jdGlvbih0KXtjb25zdCBlPXRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbjt2b2lkIDAhPT1lJiYoZS5hcHBseU1hdHJpeDQodCksZS5uZWVkc1VwZGF0ZT0hMCk7Y29uc3Qgbj10aGlzLmF0dHJpYnV0ZXMubm9ybWFsO2lmKHZvaWQgMCE9PW4pe2NvbnN0IGU9KG5ldyBXaXQpLmdldE5vcm1hbE1hdHJpeCh0KTtuLmFwcGx5Tm9ybWFsTWF0cml4KGUpLG4ubmVlZHNVcGRhdGU9ITB9Y29uc3Qgbz10aGlzLmF0dHJpYnV0ZXMudGFuZ2VudDtyZXR1cm4gdm9pZCAwIT09byYmKG8udHJhbnNmb3JtRGlyZWN0aW9uKHQpLG8ubmVlZHNVcGRhdGU9ITApLG51bGwhPT10aGlzLmJvdW5kaW5nQm94JiZ0aGlzLmNvbXB1dGVCb3VuZGluZ0JveCgpLG51bGwhPT10aGlzLmJvdW5kaW5nU3BoZXJlJiZ0aGlzLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLHRoaXN9LHJvdGF0ZVg6ZnVuY3Rpb24odCl7cmV0dXJuIGpydC5tYWtlUm90YXRpb25YKHQpLHRoaXMuYXBwbHlNYXRyaXg0KGpydCksdGhpc30scm90YXRlWTpmdW5jdGlvbih0KXtyZXR1cm4ganJ0Lm1ha2VSb3RhdGlvblkodCksdGhpcy5hcHBseU1hdHJpeDQoanJ0KSx0aGlzfSxyb3RhdGVaOmZ1bmN0aW9uKHQpe3JldHVybiBqcnQubWFrZVJvdGF0aW9uWih0KSx0aGlzLmFwcGx5TWF0cml4NChqcnQpLHRoaXN9LHRyYW5zbGF0ZTpmdW5jdGlvbih0LGUsbil7cmV0dXJuIGpydC5tYWtlVHJhbnNsYXRpb24odCxlLG4pLHRoaXMuYXBwbHlNYXRyaXg0KGpydCksdGhpc30sc2NhbGU6ZnVuY3Rpb24odCxlLG4pe3JldHVybiBqcnQubWFrZVNjYWxlKHQsZSxuKSx0aGlzLmFwcGx5TWF0cml4NChqcnQpLHRoaXN9LGxvb2tBdDpmdW5jdGlvbih0KXtyZXR1cm4gVXJ0Lmxvb2tBdCh0KSxVcnQudXBkYXRlTWF0cml4KCksdGhpcy5hcHBseU1hdHJpeDQoVXJ0Lm1hdHJpeCksdGhpc30sY2VudGVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29tcHV0ZUJvdW5kaW5nQm94KCksdGhpcy5ib3VuZGluZ0JveC5nZXRDZW50ZXIoV3J0KS5uZWdhdGUoKSx0aGlzLnRyYW5zbGF0ZShXcnQueCxXcnQueSxXcnQueiksdGhpc30sc2V0RnJvbVBvaW50czpmdW5jdGlvbih0KXtjb25zdCBlPVtdO2ZvcihsZXQgbj0wLG89dC5sZW5ndGg7bjxvO24rKyl7Y29uc3Qgbz10W25dO2UucHVzaChvLngsby55LG8uenx8MCl9cmV0dXJuIHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHpydChlLDMpKSx0aGlzfSxjb21wdXRlQm91bmRpbmdCb3g6ZnVuY3Rpb24oKXtudWxsPT09dGhpcy5ib3VuZGluZ0JveCYmKHRoaXMuYm91bmRpbmdCb3g9bmV3IG5hdCk7Y29uc3QgdD10aGlzLmF0dHJpYnV0ZXMucG9zaXRpb24sZT10aGlzLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbjtpZih0JiZ0LmlzR0xCdWZmZXJBdHRyaWJ1dGUpcmV0dXJuIGNvbnNvbGUuZXJyb3IoJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ0JveCgpOiBHTEJ1ZmZlckF0dHJpYnV0ZSByZXF1aXJlcyBhIG1hbnVhbCBib3VuZGluZyBib3guIEFsdGVybmF0aXZlbHkgc2V0ICJtZXNoLmZydXN0dW1DdWxsZWQiIHRvICJmYWxzZSIuJyx0aGlzKSx2b2lkIHRoaXMuYm91bmRpbmdCb3guc2V0KG5ldyAkaXQoLTEvMCwtMS8wLC0xLzApLG5ldyAkaXQoMS8wLDEvMCwxLzApKTtpZih2b2lkIDAhPT10KXtpZih0aGlzLmJvdW5kaW5nQm94LnNldEZyb21CdWZmZXJBdHRyaWJ1dGUodCksZSlmb3IobGV0IHQ9MCxuPWUubGVuZ3RoO3Q8bjt0KyspR3J0LnNldEZyb21CdWZmZXJBdHRyaWJ1dGUoZVt0XSksdGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZT8ocXJ0LmFkZFZlY3RvcnModGhpcy5ib3VuZGluZ0JveC5taW4sR3J0Lm1pbiksdGhpcy5ib3VuZGluZ0JveC5leHBhbmRCeVBvaW50KHFydCkscXJ0LmFkZFZlY3RvcnModGhpcy5ib3VuZGluZ0JveC5tYXgsR3J0Lm1heCksdGhpcy5ib3VuZGluZ0JveC5leHBhbmRCeVBvaW50KHFydCkpOih0aGlzLmJvdW5kaW5nQm94LmV4cGFuZEJ5UG9pbnQoR3J0Lm1pbiksdGhpcy5ib3VuZGluZ0JveC5leHBhbmRCeVBvaW50KEdydC5tYXgpKX1lbHNlIHRoaXMuYm91bmRpbmdCb3gubWFrZUVtcHR5KCk7KGlzTmFOKHRoaXMuYm91bmRpbmdCb3gubWluLngpfHxpc05hTih0aGlzLmJvdW5kaW5nQm94Lm1pbi55KXx8aXNOYU4odGhpcy5ib3VuZGluZ0JveC5taW4ueikpJiZjb25zb2xlLmVycm9yKCdUSFJFRS5CdWZmZXJHZW9tZXRyeS5jb21wdXRlQm91bmRpbmdCb3goKTogQ29tcHV0ZWQgbWluL21heCBoYXZlIE5hTiB2YWx1ZXMuIFRoZSAicG9zaXRpb24iIGF0dHJpYnV0ZSBpcyBsaWtlbHkgdG8gaGF2ZSBOYU4gdmFsdWVzLicsdGhpcyl9LGNvbXB1dGVCb3VuZGluZ1NwaGVyZTpmdW5jdGlvbigpe251bGw9PT10aGlzLmJvdW5kaW5nU3BoZXJlJiYodGhpcy5ib3VuZGluZ1NwaGVyZT1uZXcgeWF0KTtjb25zdCB0PXRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbixlPXRoaXMubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKHQmJnQuaXNHTEJ1ZmZlckF0dHJpYnV0ZSlyZXR1cm4gY29uc29sZS5lcnJvcignVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCk6IEdMQnVmZmVyQXR0cmlidXRlIHJlcXVpcmVzIGEgbWFudWFsIGJvdW5kaW5nIHNwaGVyZS4gQWx0ZXJuYXRpdmVseSBzZXQgIm1lc2guZnJ1c3R1bUN1bGxlZCIgdG8gImZhbHNlIi4nLHRoaXMpLHZvaWQgdGhpcy5ib3VuZGluZ1NwaGVyZS5zZXQobmV3ICRpdCwxLzApO2lmKHQpe2NvbnN0IG49dGhpcy5ib3VuZGluZ1NwaGVyZS5jZW50ZXI7aWYoR3J0LnNldEZyb21CdWZmZXJBdHRyaWJ1dGUodCksZSlmb3IobGV0IHQ9MCxuPWUubGVuZ3RoO3Q8bjt0KyspWXJ0LnNldEZyb21CdWZmZXJBdHRyaWJ1dGUoZVt0XSksdGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZT8ocXJ0LmFkZFZlY3RvcnMoR3J0Lm1pbixZcnQubWluKSxHcnQuZXhwYW5kQnlQb2ludChxcnQpLHFydC5hZGRWZWN0b3JzKEdydC5tYXgsWXJ0Lm1heCksR3J0LmV4cGFuZEJ5UG9pbnQocXJ0KSk6KEdydC5leHBhbmRCeVBvaW50KFlydC5taW4pLEdydC5leHBhbmRCeVBvaW50KFlydC5tYXgpKTtHcnQuZ2V0Q2VudGVyKG4pO2xldCBvPTA7Zm9yKGxldCBlPTAsaT10LmNvdW50O2U8aTtlKyspcXJ0LmZyb21CdWZmZXJBdHRyaWJ1dGUodCxlKSxvPU1hdGgubWF4KG8sbi5kaXN0YW5jZVRvU3F1YXJlZChxcnQpKTtpZihlKWZvcihsZXQgaT0wLGE9ZS5sZW5ndGg7aTxhO2krKyl7Y29uc3QgYT1lW2ldLHI9dGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZTtmb3IobGV0IGU9MCxpPWEuY291bnQ7ZTxpO2UrKylxcnQuZnJvbUJ1ZmZlckF0dHJpYnV0ZShhLGUpLHImJihXcnQuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUpLHFydC5hZGQoV3J0KSksbz1NYXRoLm1heChvLG4uZGlzdGFuY2VUb1NxdWFyZWQocXJ0KSl9dGhpcy5ib3VuZGluZ1NwaGVyZS5yYWRpdXM9TWF0aC5zcXJ0KG8pLGlzTmFOKHRoaXMuYm91bmRpbmdTcGhlcmUucmFkaXVzKSYmY29uc29sZS5lcnJvcignVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCk6IENvbXB1dGVkIHJhZGl1cyBpcyBOYU4uIFRoZSAicG9zaXRpb24iIGF0dHJpYnV0ZSBpcyBsaWtlbHkgdG8gaGF2ZSBOYU4gdmFsdWVzLicsdGhpcyl9fSxjb21wdXRlRmFjZU5vcm1hbHM6ZnVuY3Rpb24oKXt9LGNvbXB1dGVUYW5nZW50czpmdW5jdGlvbigpe2NvbnN0IHQ9dGhpcy5pbmRleCxlPXRoaXMuYXR0cmlidXRlcztpZihudWxsPT09dHx8dm9pZCAwPT09ZS5wb3NpdGlvbnx8dm9pZCAwPT09ZS5ub3JtYWx8fHZvaWQgMD09PWUudXYpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5jb21wdXRlVGFuZ2VudHMoKSBmYWlsZWQuIE1pc3NpbmcgcmVxdWlyZWQgYXR0cmlidXRlcyAoaW5kZXgsIHBvc2l0aW9uLCBub3JtYWwgb3IgdXYpIik7Y29uc3Qgbj10LmFycmF5LG89ZS5wb3NpdGlvbi5hcnJheSxpPWUubm9ybWFsLmFycmF5LGE9ZS51di5hcnJheSxyPW8ubGVuZ3RoLzM7dm9pZCAwPT09ZS50YW5nZW50JiZ0aGlzLnNldEF0dHJpYnV0ZSgidGFuZ2VudCIsbmV3IGtydChuZXcgRmxvYXQzMkFycmF5KDQqciksNCkpO2NvbnN0IHM9ZS50YW5nZW50LmFycmF5LGw9W10sYz1bXTtmb3IobGV0IHQ9MDt0PHI7dCsrKWxbdF09bmV3ICRpdCxjW3RdPW5ldyAkaXQ7Y29uc3QgZD1uZXcgJGl0LHA9bmV3ICRpdCxtPW5ldyAkaXQsdT1uZXcgVWl0LGY9bmV3IFVpdCxnPW5ldyBVaXQsaD1uZXcgJGl0LGI9bmV3ICRpdDtmdW5jdGlvbiB5KHQsZSxuKXtkLmZyb21BcnJheShvLDMqdCkscC5mcm9tQXJyYXkobywzKmUpLG0uZnJvbUFycmF5KG8sMypuKSx1LmZyb21BcnJheShhLDIqdCksZi5mcm9tQXJyYXkoYSwyKmUpLGcuZnJvbUFycmF5KGEsMipuKSxwLnN1YihkKSxtLnN1YihkKSxmLnN1Yih1KSxnLnN1Yih1KTtjb25zdCBpPTEvKGYueCpnLnktZy54KmYueSk7aXNGaW5pdGUoaSkmJihoLmNvcHkocCkubXVsdGlwbHlTY2FsYXIoZy55KS5hZGRTY2FsZWRWZWN0b3IobSwtZi55KS5tdWx0aXBseVNjYWxhcihpKSxiLmNvcHkobSkubXVsdGlwbHlTY2FsYXIoZi54KS5hZGRTY2FsZWRWZWN0b3IocCwtZy54KS5tdWx0aXBseVNjYWxhcihpKSxsW3RdLmFkZChoKSxsW2VdLmFkZChoKSxsW25dLmFkZChoKSxjW3RdLmFkZChiKSxjW2VdLmFkZChiKSxjW25dLmFkZChiKSl9bGV0IF89dGhpcy5ncm91cHM7MD09PV8ubGVuZ3RoJiYoXz1be3N0YXJ0OjAsY291bnQ6bi5sZW5ndGh9XSk7Zm9yKGxldCB0PTAsZT1fLmxlbmd0aDt0PGU7Kyt0KXtjb25zdCBlPV9bdF0sbz1lLnN0YXJ0O2ZvcihsZXQgdD1vLGk9bytlLmNvdW50O3Q8aTt0Kz0zKXkoblt0KzBdLG5bdCsxXSxuW3QrMl0pfWNvbnN0IEM9bmV3ICRpdCxNPW5ldyAkaXQsdj1uZXcgJGl0LHg9bmV3ICRpdDtmdW5jdGlvbiBPKHQpe3YuZnJvbUFycmF5KGksMyp0KSx4LmNvcHkodik7Y29uc3QgZT1sW3RdO0MuY29weShlKSxDLnN1Yih2Lm11bHRpcGx5U2NhbGFyKHYuZG90KGUpKSkubm9ybWFsaXplKCksTS5jcm9zc1ZlY3RvcnMoeCxlKTtjb25zdCBuPU0uZG90KGNbdF0pPDA/LTE6MTtzWzQqdF09Qy54LHNbNCp0KzFdPUMueSxzWzQqdCsyXT1DLnosc1s0KnQrM109bn1mb3IobGV0IHQ9MCxlPV8ubGVuZ3RoO3Q8ZTsrK3Qpe2NvbnN0IGU9X1t0XSxvPWUuc3RhcnQ7Zm9yKGxldCB0PW8saT1vK2UuY291bnQ7dDxpO3QrPTMpTyhuW3QrMF0pLE8oblt0KzFdKSxPKG5bdCsyXSl9fSxjb21wdXRlVmVydGV4Tm9ybWFsczpmdW5jdGlvbigpe2NvbnN0IHQ9dGhpcy5pbmRleCxlPXRoaXMuZ2V0QXR0cmlidXRlKCJwb3NpdGlvbiIpO2lmKHZvaWQgMCE9PWUpe2xldCBuPXRoaXMuZ2V0QXR0cmlidXRlKCJub3JtYWwiKTtpZih2b2lkIDA9PT1uKW49bmV3IGtydChuZXcgRmxvYXQzMkFycmF5KDMqZS5jb3VudCksMyksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbik7ZWxzZSBmb3IobGV0IHQ9MCxlPW4uY291bnQ7dDxlO3QrKyluLnNldFhZWih0LDAsMCwwKTtjb25zdCBvPW5ldyAkaXQsaT1uZXcgJGl0LGE9bmV3ICRpdCxyPW5ldyAkaXQscz1uZXcgJGl0LGw9bmV3ICRpdCxjPW5ldyAkaXQsZD1uZXcgJGl0O2lmKHQpZm9yKGxldCBwPTAsbT10LmNvdW50O3A8bTtwKz0zKXtjb25zdCBtPXQuZ2V0WChwKzApLHU9dC5nZXRYKHArMSksZj10LmdldFgocCsyKTtvLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSxtKSxpLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSx1KSxhLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSxmKSxjLnN1YlZlY3RvcnMoYSxpKSxkLnN1YlZlY3RvcnMobyxpKSxjLmNyb3NzKGQpLHIuZnJvbUJ1ZmZlckF0dHJpYnV0ZShuLG0pLHMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShuLHUpLGwuZnJvbUJ1ZmZlckF0dHJpYnV0ZShuLGYpLHIuYWRkKGMpLHMuYWRkKGMpLGwuYWRkKGMpLG4uc2V0WFlaKG0sci54LHIueSxyLnopLG4uc2V0WFlaKHUscy54LHMueSxzLnopLG4uc2V0WFlaKGYsbC54LGwueSxsLnopfWVsc2UgZm9yKGxldCB0PTAscj1lLmNvdW50O3Q8cjt0Kz0zKW8uZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLHQrMCksaS5mcm9tQnVmZmVyQXR0cmlidXRlKGUsdCsxKSxhLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSx0KzIpLGMuc3ViVmVjdG9ycyhhLGkpLGQuc3ViVmVjdG9ycyhvLGkpLGMuY3Jvc3MoZCksbi5zZXRYWVoodCswLGMueCxjLnksYy56KSxuLnNldFhZWih0KzEsYy54LGMueSxjLnopLG4uc2V0WFlaKHQrMixjLngsYy55LGMueik7dGhpcy5ub3JtYWxpemVOb3JtYWxzKCksbi5uZWVkc1VwZGF0ZT0hMH19LG1lcmdlOmZ1bmN0aW9uKHQsZSl7aWYoIXR8fCF0LmlzQnVmZmVyR2VvbWV0cnkpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyR2VvbWV0cnkubWVyZ2UoKTogZ2VvbWV0cnkgbm90IGFuIGluc3RhbmNlIG9mIFRIUkVFLkJ1ZmZlckdlb21ldHJ5LiIsdCk7dm9pZCAwPT09ZSYmKGU9MCxjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5Lm1lcmdlKCk6IE92ZXJ3cml0aW5nIG9yaWdpbmFsIGdlb21ldHJ5LCBzdGFydGluZyBhdCBvZmZzZXQ9MC4gVXNlIEJ1ZmZlckdlb21ldHJ5VXRpbHMubWVyZ2VCdWZmZXJHZW9tZXRyaWVzKCkgZm9yIGxvc3NsZXNzIG1lcmdlLiIpKTtjb25zdCBuPXRoaXMuYXR0cmlidXRlcztmb3IoY29uc3QgbyBpbiBuKXtpZih2b2lkIDA9PT10LmF0dHJpYnV0ZXNbb10pY29udGludWU7Y29uc3QgaT1uW29dLmFycmF5LGE9dC5hdHRyaWJ1dGVzW29dLHI9YS5hcnJheSxzPWEuaXRlbVNpemUqZSxsPU1hdGgubWluKHIubGVuZ3RoLGkubGVuZ3RoLXMpO2ZvcihsZXQgdD0wLGU9czt0PGw7dCsrLGUrKylpW2VdPXJbdF19cmV0dXJuIHRoaXN9LG5vcm1hbGl6ZU5vcm1hbHM6ZnVuY3Rpb24oKXtjb25zdCB0PXRoaXMuYXR0cmlidXRlcy5ub3JtYWw7Zm9yKGxldCBlPTAsbj10LmNvdW50O2U8bjtlKyspcXJ0LmZyb21CdWZmZXJBdHRyaWJ1dGUodCxlKSxxcnQubm9ybWFsaXplKCksdC5zZXRYWVooZSxxcnQueCxxcnQueSxxcnQueil9LHRvTm9uSW5kZXhlZDpmdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXtjb25zdCBuPXQuYXJyYXksbz10Lml0ZW1TaXplLGk9dC5ub3JtYWxpemVkLGE9bmV3IG4uY29uc3RydWN0b3IoZS5sZW5ndGgqbyk7bGV0IHI9MCxzPTA7Zm9yKGxldCB0PTAsaT1lLmxlbmd0aDt0PGk7dCsrKXtyPWVbdF0qbztmb3IobGV0IHQ9MDt0PG87dCsrKWFbcysrXT1uW3IrK119cmV0dXJuIG5ldyBrcnQoYSxvLGkpfWlmKG51bGw9PT10aGlzLmluZGV4KXJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5LnRvTm9uSW5kZXhlZCgpOiBCdWZmZXJHZW9tZXRyeSBpcyBhbHJlYWR5IG5vbi1pbmRleGVkLiIpLHRoaXM7Y29uc3QgZT1uZXcgWnJ0LG49dGhpcy5pbmRleC5hcnJheSxvPXRoaXMuYXR0cmlidXRlcztmb3IoY29uc3QgaSBpbiBvKXtjb25zdCBhPXQob1tpXSxuKTtlLnNldEF0dHJpYnV0ZShpLGEpfWNvbnN0IGk9dGhpcy5tb3JwaEF0dHJpYnV0ZXM7Zm9yKGNvbnN0IG8gaW4gaSl7Y29uc3QgYT1bXSxyPWlbb107Zm9yKGxldCBlPTAsbz1yLmxlbmd0aDtlPG87ZSsrKXtjb25zdCBvPXQocltlXSxuKTthLnB1c2gobyl9ZS5tb3JwaEF0dHJpYnV0ZXNbb109YX1lLm1vcnBoVGFyZ2V0c1JlbGF0aXZlPXRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU7Y29uc3QgYT10aGlzLmdyb3Vwcztmb3IobGV0IHQ9MCxuPWEubGVuZ3RoO3Q8bjt0Kyspe2NvbnN0IG49YVt0XTtlLmFkZEdyb3VwKG4uc3RhcnQsbi5jb3VudCxuLm1hdGVyaWFsSW5kZXgpfXJldHVybiBlfSx0b0pTT046ZnVuY3Rpb24oKXtjb25zdCB0PXttZXRhZGF0YTp7dmVyc2lvbjo0LjUsdHlwZToiQnVmZmVyR2VvbWV0cnkiLGdlbmVyYXRvcjoiQnVmZmVyR2VvbWV0cnkudG9KU09OIn19O2lmKHQudXVpZD10aGlzLnV1aWQsdC50eXBlPXRoaXMudHlwZSwiIiE9PXRoaXMubmFtZSYmKHQubmFtZT10aGlzLm5hbWUpLE9iamVjdC5rZXlzKHRoaXMudXNlckRhdGEpLmxlbmd0aD4wJiYodC51c2VyRGF0YT10aGlzLnVzZXJEYXRhKSx2b2lkIDAhPT10aGlzLnBhcmFtZXRlcnMpe2NvbnN0IGU9dGhpcy5wYXJhbWV0ZXJzO2Zvcihjb25zdCBuIGluIGUpdm9pZCAwIT09ZVtuXSYmKHRbbl09ZVtuXSk7cmV0dXJuIHR9dC5kYXRhPXthdHRyaWJ1dGVzOnt9fTtjb25zdCBlPXRoaXMuaW5kZXg7bnVsbCE9PWUmJih0LmRhdGEuaW5kZXg9e3R5cGU6ZS5hcnJheS5jb25zdHJ1Y3Rvci5uYW1lLGFycmF5OkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGUuYXJyYXkpfSk7Y29uc3Qgbj10aGlzLmF0dHJpYnV0ZXM7Zm9yKGNvbnN0IGUgaW4gbil7Y29uc3Qgbz1uW2VdLGk9by50b0pTT04odC5kYXRhKTsiIiE9PW8ubmFtZSYmKGkubmFtZT1vLm5hbWUpLHQuZGF0YS5hdHRyaWJ1dGVzW2VdPWl9Y29uc3Qgbz17fTtsZXQgaT0hMTtmb3IoY29uc3QgZSBpbiB0aGlzLm1vcnBoQXR0cmlidXRlcyl7Y29uc3Qgbj10aGlzLm1vcnBoQXR0cmlidXRlc1tlXSxhPVtdO2ZvcihsZXQgZT0wLG89bi5sZW5ndGg7ZTxvO2UrKyl7Y29uc3Qgbz1uW2VdLGk9by50b0pTT04odC5kYXRhKTsiIiE9PW8ubmFtZSYmKGkubmFtZT1vLm5hbWUpLGEucHVzaChpKX1hLmxlbmd0aD4wJiYob1tlXT1hLGk9ITApfWkmJih0LmRhdGEubW9ycGhBdHRyaWJ1dGVzPW8sdC5kYXRhLm1vcnBoVGFyZ2V0c1JlbGF0aXZlPXRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmUpO2NvbnN0IGE9dGhpcy5ncm91cHM7YS5sZW5ndGg+MCYmKHQuZGF0YS5ncm91cHM9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShhKSkpO2NvbnN0IHI9dGhpcy5ib3VuZGluZ1NwaGVyZTtyZXR1cm4gbnVsbCE9PXImJih0LmRhdGEuYm91bmRpbmdTcGhlcmU9e2NlbnRlcjpyLmNlbnRlci50b0FycmF5KCkscmFkaXVzOnIucmFkaXVzfSksdH0sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IFpydCkuY29weSh0aGlzKX0sY29weTpmdW5jdGlvbih0KXt0aGlzLmluZGV4PW51bGwsdGhpcy5hdHRyaWJ1dGVzPXt9LHRoaXMubW9ycGhBdHRyaWJ1dGVzPXt9LHRoaXMuZ3JvdXBzPVtdLHRoaXMuYm91bmRpbmdCb3g9bnVsbCx0aGlzLmJvdW5kaW5nU3BoZXJlPW51bGw7Y29uc3QgZT17fTt0aGlzLm5hbWU9dC5uYW1lO2NvbnN0IG49dC5pbmRleDtudWxsIT09biYmdGhpcy5zZXRJbmRleChuLmNsb25lKGUpKTtjb25zdCBvPXQuYXR0cmlidXRlcztmb3IoY29uc3QgdCBpbiBvKXRoaXMuc2V0QXR0cmlidXRlKHQsb1t0XS5jbG9uZShlKSk7Y29uc3QgaT10Lm1vcnBoQXR0cmlidXRlcztmb3IoY29uc3QgdCBpbiBpKXtjb25zdCBuPVtdLG89aVt0XTtmb3IobGV0IHQ9MCxpPW8ubGVuZ3RoO3Q8aTt0Kyspbi5wdXNoKG9bdF0uY2xvbmUoZSkpO3RoaXMubW9ycGhBdHRyaWJ1dGVzW3RdPW59dGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZT10Lm1vcnBoVGFyZ2V0c1JlbGF0aXZlO2NvbnN0IGE9dC5ncm91cHM7Zm9yKGxldCB0PTAsZT1hLmxlbmd0aDt0PGU7dCsrKXtjb25zdCBlPWFbdF07dGhpcy5hZGRHcm91cChlLnN0YXJ0LGUuY291bnQsZS5tYXRlcmlhbEluZGV4KX1jb25zdCByPXQuYm91bmRpbmdCb3g7bnVsbCE9PXImJih0aGlzLmJvdW5kaW5nQm94PXIuY2xvbmUoKSk7Y29uc3Qgcz10LmJvdW5kaW5nU3BoZXJlO3JldHVybiBudWxsIT09cyYmKHRoaXMuYm91bmRpbmdTcGhlcmU9cy5jbG9uZSgpKSx0aGlzLmRyYXdSYW5nZS5zdGFydD10LmRyYXdSYW5nZS5zdGFydCx0aGlzLmRyYXdSYW5nZS5jb3VudD10LmRyYXdSYW5nZS5jb3VudCx0aGlzLnVzZXJEYXRhPXQudXNlckRhdGEsdGhpc30sZGlzcG9zZTpmdW5jdGlvbigpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX19KTtjb25zdCBYcnQ9bmV3IGthdCxLcnQ9bmV3IHdhdCxKcnQ9bmV3IHlhdCxRcnQ9bmV3ICRpdCwkcnQ9bmV3ICRpdCx0c3Q9bmV3ICRpdCxlc3Q9bmV3ICRpdCxuc3Q9bmV3ICRpdCxvc3Q9bmV3ICRpdCxpc3Q9bmV3ICRpdCxhc3Q9bmV3ICRpdCxyc3Q9bmV3ICRpdCxzc3Q9bmV3IFVpdCxsc3Q9bmV3IFVpdCxjc3Q9bmV3IFVpdCxkc3Q9bmV3ICRpdCxwc3Q9bmV3ICRpdDtmdW5jdGlvbiBtc3QodD1uZXcgWnJ0LGU9bmV3IE9ydCl7UWF0LmNhbGwodGhpcyksdGhpcy50eXBlPSJNZXNoIix0aGlzLmdlb21ldHJ5PXQsdGhpcy5tYXRlcmlhbD1lLHRoaXMudXBkYXRlTW9ycGhUYXJnZXRzKCl9ZnVuY3Rpb24gdXN0KHQsZSxuLG8saSxhLHIscyxsLGMsZCxwKXtRcnQuZnJvbUJ1ZmZlckF0dHJpYnV0ZShpLGMpLCRydC5mcm9tQnVmZmVyQXR0cmlidXRlKGksZCksdHN0LmZyb21CdWZmZXJBdHRyaWJ1dGUoaSxwKTtjb25zdCBtPXQubW9ycGhUYXJnZXRJbmZsdWVuY2VzO2lmKGUubW9ycGhUYXJnZXRzJiZhJiZtKXtpc3Quc2V0KDAsMCwwKSxhc3Quc2V0KDAsMCwwKSxyc3Quc2V0KDAsMCwwKTtmb3IobGV0IHQ9MCxlPWEubGVuZ3RoO3Q8ZTt0Kyspe2NvbnN0IGU9bVt0XSxuPWFbdF07MCE9PWUmJihlc3QuZnJvbUJ1ZmZlckF0dHJpYnV0ZShuLGMpLG5zdC5mcm9tQnVmZmVyQXR0cmlidXRlKG4sZCksb3N0LmZyb21CdWZmZXJBdHRyaWJ1dGUobixwKSxyPyhpc3QuYWRkU2NhbGVkVmVjdG9yKGVzdCxlKSxhc3QuYWRkU2NhbGVkVmVjdG9yKG5zdCxlKSxyc3QuYWRkU2NhbGVkVmVjdG9yKG9zdCxlKSk6KGlzdC5hZGRTY2FsZWRWZWN0b3IoZXN0LnN1YihRcnQpLGUpLGFzdC5hZGRTY2FsZWRWZWN0b3IobnN0LnN1YigkcnQpLGUpLHJzdC5hZGRTY2FsZWRWZWN0b3Iob3N0LnN1Yih0c3QpLGUpKSl9UXJ0LmFkZChpc3QpLCRydC5hZGQoYXN0KSx0c3QuYWRkKHJzdCl9dC5pc1NraW5uZWRNZXNoJiYodC5ib25lVHJhbnNmb3JtKGMsUXJ0KSx0LmJvbmVUcmFuc2Zvcm0oZCwkcnQpLHQuYm9uZVRyYW5zZm9ybShwLHRzdCkpO2NvbnN0IHU9KGZ1bmN0aW9uIGYodCxlLG4sbyxpLGEscixzKXtsZXQgbDtpZihsPTE9PT1lLnNpZGU/by5pbnRlcnNlY3RUcmlhbmdsZShyLGEsaSwhMCxzKTpvLmludGVyc2VjdFRyaWFuZ2xlKGksYSxyLDIhPT1lLnNpZGUscyksbnVsbD09PWwpcmV0dXJuIG51bGw7cHN0LmNvcHkocykscHN0LmFwcGx5TWF0cml4NCh0Lm1hdHJpeFdvcmxkKTtjb25zdCBjPW4ucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKHBzdCk7cmV0dXJuIGM8bi5uZWFyfHxjPm4uZmFyP251bGw6e2Rpc3RhbmNlOmMscG9pbnQ6cHN0LmNsb25lKCksb2JqZWN0OnR9fSkodCxlLG4sbyxRcnQsJHJ0LHRzdCxkc3QpO2lmKHUpe3MmJihzc3QuZnJvbUJ1ZmZlckF0dHJpYnV0ZShzLGMpLGxzdC5mcm9tQnVmZmVyQXR0cmlidXRlKHMsZCksY3N0LmZyb21CdWZmZXJBdHRyaWJ1dGUocyxwKSx1LnV2PXVydC5nZXRVVihkc3QsUXJ0LCRydCx0c3Qsc3N0LGxzdCxjc3QsbmV3IFVpdCkpLGwmJihzc3QuZnJvbUJ1ZmZlckF0dHJpYnV0ZShsLGMpLGxzdC5mcm9tQnVmZmVyQXR0cmlidXRlKGwsZCksY3N0LmZyb21CdWZmZXJBdHRyaWJ1dGUobCxwKSx1LnV2Mj11cnQuZ2V0VVYoZHN0LFFydCwkcnQsdHN0LHNzdCxsc3QsY3N0LG5ldyBVaXQpKTtjb25zdCB0PW5ldyBNcnQoYyxkLHApO3VydC5nZXROb3JtYWwoUXJ0LCRydCx0c3QsdC5ub3JtYWwpLHUuZmFjZT10fXJldHVybiB1fW1zdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKFFhdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3Rvcjptc3QsaXNNZXNoOiEwLGNvcHk6ZnVuY3Rpb24odCl7cmV0dXJuIFFhdC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdm9pZCAwIT09dC5tb3JwaFRhcmdldEluZmx1ZW5jZXMmJih0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcz10Lm1vcnBoVGFyZ2V0SW5mbHVlbmNlcy5zbGljZSgpKSx2b2lkIDAhPT10Lm1vcnBoVGFyZ2V0RGljdGlvbmFyeSYmKHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5PU9iamVjdC5hc3NpZ24oe30sdC5tb3JwaFRhcmdldERpY3Rpb25hcnkpKSx0aGlzLm1hdGVyaWFsPXQubWF0ZXJpYWwsdGhpcy5nZW9tZXRyeT10Lmdlb21ldHJ5LHRoaXN9LHVwZGF0ZU1vcnBoVGFyZ2V0czpmdW5jdGlvbigpe2NvbnN0IHQ9dGhpcy5nZW9tZXRyeTtpZih0LmlzQnVmZmVyR2VvbWV0cnkpe2NvbnN0IGU9dC5tb3JwaEF0dHJpYnV0ZXMsbj1PYmplY3Qua2V5cyhlKTtpZihuLmxlbmd0aD4wKXtjb25zdCB0PWVbblswXV07aWYodm9pZCAwIT09dCl7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXM9W10sdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnk9e307Zm9yKGxldCBlPTAsbj10Lmxlbmd0aDtlPG47ZSsrKXtjb25zdCBuPXRbZV0ubmFtZXx8U3RyaW5nKGUpO3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzLnB1c2goMCksdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnlbbl09ZX19fX1lbHNle2NvbnN0IGU9dC5tb3JwaFRhcmdldHM7dm9pZCAwIT09ZSYmZS5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuTWVzaC51cGRhdGVNb3JwaFRhcmdldHMoKSBubyBsb25nZXIgc3VwcG9ydHMgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpfX0scmF5Y2FzdDpmdW5jdGlvbih0LGUpe2NvbnN0IG49dGhpcy5nZW9tZXRyeSxvPXRoaXMubWF0ZXJpYWwsaT10aGlzLm1hdHJpeFdvcmxkO2lmKHZvaWQgMD09PW8pcmV0dXJuO2lmKG51bGw9PT1uLmJvdW5kaW5nU3BoZXJlJiZuLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLEpydC5jb3B5KG4uYm91bmRpbmdTcGhlcmUpLEpydC5hcHBseU1hdHJpeDQoaSksITE9PT10LnJheS5pbnRlcnNlY3RzU3BoZXJlKEpydCkpcmV0dXJuO2lmKFhydC5jb3B5KGkpLmludmVydCgpLEtydC5jb3B5KHQucmF5KS5hcHBseU1hdHJpeDQoWHJ0KSxudWxsIT09bi5ib3VuZGluZ0JveCYmITE9PT1LcnQuaW50ZXJzZWN0c0JveChuLmJvdW5kaW5nQm94KSlyZXR1cm47bGV0IGE7aWYobi5pc0J1ZmZlckdlb21ldHJ5KXtjb25zdCBpPW4uaW5kZXgscj1uLmF0dHJpYnV0ZXMucG9zaXRpb24scz1uLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbixsPW4ubW9ycGhUYXJnZXRzUmVsYXRpdmUsYz1uLmF0dHJpYnV0ZXMudXYsZD1uLmF0dHJpYnV0ZXMudXYyLHA9bi5ncm91cHMsbT1uLmRyYXdSYW5nZTtpZihudWxsIT09aSlpZihBcnJheS5pc0FycmF5KG8pKWZvcihsZXQgbj0wLHU9cC5sZW5ndGg7bjx1O24rKyl7Y29uc3QgdT1wW25dLGY9b1t1Lm1hdGVyaWFsSW5kZXhdO2ZvcihsZXQgbj1NYXRoLm1heCh1LnN0YXJ0LG0uc3RhcnQpLG89TWF0aC5taW4odS5zdGFydCt1LmNvdW50LG0uc3RhcnQrbS5jb3VudCk7bjxvO24rPTMpe2NvbnN0IG89aS5nZXRYKG4pLHA9aS5nZXRYKG4rMSksbT1pLmdldFgobisyKTthPXVzdCh0aGlzLGYsdCxLcnQscixzLGwsYyxkLG8scCxtKSxhJiYoYS5mYWNlSW5kZXg9TWF0aC5mbG9vcihuLzMpLGEuZmFjZS5tYXRlcmlhbEluZGV4PXUubWF0ZXJpYWxJbmRleCxlLnB1c2goYSkpfX1lbHNlIGZvcihsZXQgbj1NYXRoLm1heCgwLG0uc3RhcnQpLHA9TWF0aC5taW4oaS5jb3VudCxtLnN0YXJ0K20uY291bnQpO248cDtuKz0zKXtjb25zdCBwPWkuZ2V0WChuKSxtPWkuZ2V0WChuKzEpLHU9aS5nZXRYKG4rMik7YT11c3QodGhpcyxvLHQsS3J0LHIscyxsLGMsZCxwLG0sdSksYSYmKGEuZmFjZUluZGV4PU1hdGguZmxvb3Iobi8zKSxlLnB1c2goYSkpfWVsc2UgaWYodm9pZCAwIT09cilpZihBcnJheS5pc0FycmF5KG8pKWZvcihsZXQgbj0wLGk9cC5sZW5ndGg7bjxpO24rKyl7Y29uc3QgaT1wW25dLHU9b1tpLm1hdGVyaWFsSW5kZXhdO2ZvcihsZXQgbj1NYXRoLm1heChpLnN0YXJ0LG0uc3RhcnQpLG89TWF0aC5taW4oaS5zdGFydCtpLmNvdW50LG0uc3RhcnQrbS5jb3VudCk7bjxvO24rPTMpYT11c3QodGhpcyx1LHQsS3J0LHIscyxsLGMsZCxuLG4rMSxuKzIpLGEmJihhLmZhY2VJbmRleD1NYXRoLmZsb29yKG4vMyksYS5mYWNlLm1hdGVyaWFsSW5kZXg9aS5tYXRlcmlhbEluZGV4LGUucHVzaChhKSl9ZWxzZSBmb3IobGV0IG49TWF0aC5tYXgoMCxtLnN0YXJ0KSxpPU1hdGgubWluKHIuY291bnQsbS5zdGFydCttLmNvdW50KTtuPGk7bis9MylhPXVzdCh0aGlzLG8sdCxLcnQscixzLGwsYyxkLG4sbisxLG4rMiksYSYmKGEuZmFjZUluZGV4PU1hdGguZmxvb3Iobi8zKSxlLnB1c2goYSkpfWVsc2Ugbi5pc0dlb21ldHJ5JiZjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoLnJheWNhc3QoKSBubyBsb25nZXIgc3VwcG9ydHMgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpfX0pO2NsYXNzIGZzdCBleHRlbmRzIFpydHtjb25zdHJ1Y3Rvcih0PTEsZT0xLG49MSxvPTEsaT0xLGE9MSl7c3VwZXIoKSx0aGlzLnR5cGU9IkJveEdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3dpZHRoOnQsaGVpZ2h0OmUsZGVwdGg6bix3aWR0aFNlZ21lbnRzOm8saGVpZ2h0U2VnbWVudHM6aSxkZXB0aFNlZ21lbnRzOmF9O2NvbnN0IHI9dGhpcztvPU1hdGguZmxvb3IobyksaT1NYXRoLmZsb29yKGkpLGE9TWF0aC5mbG9vcihhKTtjb25zdCBzPVtdLGw9W10sYz1bXSxkPVtdO2xldCBwPTAsbT0wO2Z1bmN0aW9uIHUodCxlLG4sbyxpLGEsdSxmLGcsaCxiKXtjb25zdCB5PWEvZyxfPXUvaCxDPWEvMixNPXUvMix2PWYvMix4PWcrMSxPPWgrMTtsZXQgUD0wLHc9MDtjb25zdCBrPW5ldyAkaXQ7Zm9yKGxldCBhPTA7YTxPO2ErKyl7Y29uc3Qgcj1hKl8tTTtmb3IobGV0IHM9MDtzPHg7cysrKWtbdF09KHMqeS1DKSpvLGtbZV09cippLGtbbl09dixsLnB1c2goay54LGsueSxrLnopLGtbdF09MCxrW2VdPTAsa1tuXT1mPjA/MTotMSxjLnB1c2goay54LGsueSxrLnopLGQucHVzaChzL2cpLGQucHVzaCgxLWEvaCksUCs9MX1mb3IobGV0IHQ9MDt0PGg7dCsrKWZvcihsZXQgZT0wO2U8ZztlKyspe2NvbnN0IG49cCtlK3gqKHQrMSksbz1wKyhlKzEpK3gqKHQrMSksaT1wKyhlKzEpK3gqdDtzLnB1c2gocCtlK3gqdCxuLGkpLHMucHVzaChuLG8saSksdys9Nn1yLmFkZEdyb3VwKG0sdyxiKSxtKz13LHArPVB9dSgieiIsInkiLCJ4IiwtMSwtMSxuLGUsdCxhLGksMCksdSgieiIsInkiLCJ4IiwxLC0xLG4sZSwtdCxhLGksMSksdSgieCIsInoiLCJ5IiwxLDEsdCxuLGUsbyxhLDIpLHUoIngiLCJ6IiwieSIsMSwtMSx0LG4sLWUsbyxhLDMpLHUoIngiLCJ5IiwieiIsMSwtMSx0LGUsbixvLGksNCksdSgieCIsInkiLCJ6IiwtMSwtMSx0LGUsLW4sbyxpLDUpLHRoaXMuc2V0SW5kZXgocyksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgenJ0KGwsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyB6cnQoYywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgenJ0KGQsMikpfX1mdW5jdGlvbiBnc3QodCl7Y29uc3QgZT17fTtmb3IoY29uc3QgbiBpbiB0KXtlW25dPXt9O2Zvcihjb25zdCBvIGluIHRbbl0pe2NvbnN0IGk9dFtuXVtvXTtlW25dW29dPWkmJihpLmlzQ29sb3J8fGkuaXNNYXRyaXgzfHxpLmlzTWF0cml4NHx8aS5pc1ZlY3RvcjJ8fGkuaXNWZWN0b3IzfHxpLmlzVmVjdG9yNHx8aS5pc1RleHR1cmUpP2kuY2xvbmUoKTpBcnJheS5pc0FycmF5KGkpP2kuc2xpY2UoKTppfX1yZXR1cm4gZX1mdW5jdGlvbiBoc3QodCl7Y29uc3QgZT17fTtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKyl7Y29uc3Qgbz1nc3QodFtuXSk7Zm9yKGNvbnN0IHQgaW4gbyllW3RdPW9bdF19cmV0dXJuIGV9Y29uc3QgYnN0PXtjbG9uZTpnc3QsbWVyZ2U6aHN0fTtmdW5jdGlvbiB5c3QodCl7eHJ0LmNhbGwodGhpcyksdGhpcy50eXBlPSJTaGFkZXJNYXRlcmlhbCIsdGhpcy5kZWZpbmVzPXt9LHRoaXMudW5pZm9ybXM9e30sdGhpcy52ZXJ0ZXhTaGFkZXI9InZvaWQgbWFpbigpIHtcblx0Z2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbW9kZWxWaWV3TWF0cml4ICogdmVjNCggcG9zaXRpb24sIDEuMCApO1xufSIsdGhpcy5mcmFnbWVudFNoYWRlcj0idm9pZCBtYWluKCkge1xuXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCAxLjAsIDAuMCwgMC4wLCAxLjAgKTtcbn0iLHRoaXMubGluZXdpZHRoPTEsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLmZvZz0hMSx0aGlzLmxpZ2h0cz0hMSx0aGlzLmNsaXBwaW5nPSExLHRoaXMuc2tpbm5pbmc9ITEsdGhpcy5tb3JwaFRhcmdldHM9ITEsdGhpcy5tb3JwaE5vcm1hbHM9ITEsdGhpcy5leHRlbnNpb25zPXtkZXJpdmF0aXZlczohMSxmcmFnRGVwdGg6ITEsZHJhd0J1ZmZlcnM6ITEsc2hhZGVyVGV4dHVyZUxPRDohMX0sdGhpcy5kZWZhdWx0QXR0cmlidXRlVmFsdWVzPXtjb2xvcjpbMSwxLDFdLHV2OlswLDBdLHV2MjpbMCwwXX0sdGhpcy5pbmRleDBBdHRyaWJ1dGVOYW1lPXZvaWQgMCx0aGlzLnVuaWZvcm1zTmVlZFVwZGF0ZT0hMSx0aGlzLmdsc2xWZXJzaW9uPW51bGwsdm9pZCAwIT09dCYmKHZvaWQgMCE9PXQuYXR0cmlidXRlcyYmY29uc29sZS5lcnJvcigiVEhSRUUuU2hhZGVyTWF0ZXJpYWw6IGF0dHJpYnV0ZXMgc2hvdWxkIG5vdyBiZSBkZWZpbmVkIGluIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIiksdGhpcy5zZXRWYWx1ZXModCkpfWZ1bmN0aW9uIF9zdCgpe1FhdC5jYWxsKHRoaXMpLHRoaXMudHlwZT0iQ2FtZXJhIix0aGlzLm1hdHJpeFdvcmxkSW52ZXJzZT1uZXcga2F0LHRoaXMucHJvamVjdGlvbk1hdHJpeD1uZXcga2F0LHRoaXMucHJvamVjdGlvbk1hdHJpeEludmVyc2U9bmV3IGthdH1mdW5jdGlvbiBDc3QodD01MCxlPTEsbj0uMSxvPTJlMyl7X3N0LmNhbGwodGhpcyksdGhpcy50eXBlPSJQZXJzcGVjdGl2ZUNhbWVyYSIsdGhpcy5mb3Y9dCx0aGlzLnpvb209MSx0aGlzLm5lYXI9bix0aGlzLmZhcj1vLHRoaXMuZm9jdXM9MTAsdGhpcy5hc3BlY3Q9ZSx0aGlzLnZpZXc9bnVsbCx0aGlzLmZpbG1HYXVnZT0zNSx0aGlzLmZpbG1PZmZzZXQ9MCx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX0oeXN0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHhydC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj15c3QseXN0LnByb3RvdHlwZS5pc1NoYWRlck1hdGVyaWFsPSEwLHlzdC5wcm90b3R5cGUuY29weT1mdW5jdGlvbih0KXtyZXR1cm4geHJ0LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLmZyYWdtZW50U2hhZGVyPXQuZnJhZ21lbnRTaGFkZXIsdGhpcy52ZXJ0ZXhTaGFkZXI9dC52ZXJ0ZXhTaGFkZXIsdGhpcy51bmlmb3Jtcz1nc3QodC51bmlmb3JtcyksdGhpcy5kZWZpbmVzPU9iamVjdC5hc3NpZ24oe30sdC5kZWZpbmVzKSx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLmxpZ2h0cz10LmxpZ2h0cyx0aGlzLmNsaXBwaW5nPXQuY2xpcHBpbmcsdGhpcy5za2lubmluZz10LnNraW5uaW5nLHRoaXMubW9ycGhUYXJnZXRzPXQubW9ycGhUYXJnZXRzLHRoaXMubW9ycGhOb3JtYWxzPXQubW9ycGhOb3JtYWxzLHRoaXMuZXh0ZW5zaW9ucz1PYmplY3QuYXNzaWduKHt9LHQuZXh0ZW5zaW9ucyksdGhpcy5nbHNsVmVyc2lvbj10Lmdsc2xWZXJzaW9uLHRoaXN9LHlzdC5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKHQpe2NvbnN0IGU9eHJ0LnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzLHQpO2UuZ2xzbFZlcnNpb249dGhpcy5nbHNsVmVyc2lvbixlLnVuaWZvcm1zPXt9O2Zvcihjb25zdCBuIGluIHRoaXMudW5pZm9ybXMpe2NvbnN0IG89dGhpcy51bmlmb3Jtc1tuXS52YWx1ZTtlLnVuaWZvcm1zW25dPW8mJm8uaXNUZXh0dXJlP3t0eXBlOiJ0Iix2YWx1ZTpvLnRvSlNPTih0KS51dWlkfTpvJiZvLmlzQ29sb3I/e3R5cGU6ImMiLHZhbHVlOm8uZ2V0SGV4KCl9Om8mJm8uaXNWZWN0b3IyP3t0eXBlOiJ2MiIsdmFsdWU6by50b0FycmF5KCl9Om8mJm8uaXNWZWN0b3IzP3t0eXBlOiJ2MyIsdmFsdWU6by50b0FycmF5KCl9Om8mJm8uaXNWZWN0b3I0P3t0eXBlOiJ2NCIsdmFsdWU6by50b0FycmF5KCl9Om8mJm8uaXNNYXRyaXgzP3t0eXBlOiJtMyIsdmFsdWU6by50b0FycmF5KCl9Om8mJm8uaXNNYXRyaXg0P3t0eXBlOiJtNCIsdmFsdWU6by50b0FycmF5KCl9Ont2YWx1ZTpvfX1PYmplY3Qua2V5cyh0aGlzLmRlZmluZXMpLmxlbmd0aD4wJiYoZS5kZWZpbmVzPXRoaXMuZGVmaW5lcyksZS52ZXJ0ZXhTaGFkZXI9dGhpcy52ZXJ0ZXhTaGFkZXIsZS5mcmFnbWVudFNoYWRlcj10aGlzLmZyYWdtZW50U2hhZGVyO2NvbnN0IG49e307Zm9yKGNvbnN0IHQgaW4gdGhpcy5leHRlbnNpb25zKSEwPT09dGhpcy5leHRlbnNpb25zW3RdJiYoblt0XT0hMCk7cmV0dXJuIE9iamVjdC5rZXlzKG4pLmxlbmd0aD4wJiYoZS5leHRlbnNpb25zPW4pLGV9LF9zdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKFFhdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3Rvcjpfc3QsaXNDYW1lcmE6ITAsY29weTpmdW5jdGlvbih0LGUpe3JldHVybiBRYXQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQsZSksdGhpcy5tYXRyaXhXb3JsZEludmVyc2UuY29weSh0Lm1hdHJpeFdvcmxkSW52ZXJzZSksdGhpcy5wcm9qZWN0aW9uTWF0cml4LmNvcHkodC5wcm9qZWN0aW9uTWF0cml4KSx0aGlzLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlLmNvcHkodC5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZSksdGhpc30sZ2V0V29ybGREaXJlY3Rpb246ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKGNvbnNvbGUud2FybigiVEhSRUUuQ2FtZXJhOiAuZ2V0V29ybGREaXJlY3Rpb24oKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIiksdD1uZXcgJGl0KSx0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKTtjb25zdCBlPXRoaXMubWF0cml4V29ybGQuZWxlbWVudHM7cmV0dXJuIHQuc2V0KC1lWzhdLC1lWzldLC1lWzEwXSkubm9ybWFsaXplKCl9LHVwZGF0ZU1hdHJpeFdvcmxkOmZ1bmN0aW9uKHQpe1FhdC5wcm90b3R5cGUudXBkYXRlTWF0cml4V29ybGQuY2FsbCh0aGlzLHQpLHRoaXMubWF0cml4V29ybGRJbnZlcnNlLmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCl9LHVwZGF0ZVdvcmxkTWF0cml4OmZ1bmN0aW9uKHQsZSl7UWF0LnByb3RvdHlwZS51cGRhdGVXb3JsZE1hdHJpeC5jYWxsKHRoaXMsdCxlKSx0aGlzLm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KHRoaXMubWF0cml4V29ybGQpLmludmVydCgpfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX19KSxDc3QucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShfc3QucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6Q3N0LGlzUGVyc3BlY3RpdmVDYW1lcmE6ITAsY29weTpmdW5jdGlvbih0LGUpe3JldHVybiBfc3QucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQsZSksdGhpcy5mb3Y9dC5mb3YsdGhpcy56b29tPXQuem9vbSx0aGlzLm5lYXI9dC5uZWFyLHRoaXMuZmFyPXQuZmFyLHRoaXMuZm9jdXM9dC5mb2N1cyx0aGlzLmFzcGVjdD10LmFzcGVjdCx0aGlzLnZpZXc9bnVsbD09PXQudmlldz9udWxsOk9iamVjdC5hc3NpZ24oe30sdC52aWV3KSx0aGlzLmZpbG1HYXVnZT10LmZpbG1HYXVnZSx0aGlzLmZpbG1PZmZzZXQ9dC5maWxtT2Zmc2V0LHRoaXN9LHNldEZvY2FsTGVuZ3RoOmZ1bmN0aW9uKHQpe2NvbnN0IGU9LjUqdGhpcy5nZXRGaWxtSGVpZ2h0KCkvdDt0aGlzLmZvdj0yKmppdC5SQUQyREVHKk1hdGguYXRhbihlKSx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX0sZ2V0Rm9jYWxMZW5ndGg6ZnVuY3Rpb24oKXtjb25zdCB0PU1hdGgudGFuKC41KmppdC5ERUcyUkFEKnRoaXMuZm92KTtyZXR1cm4uNSp0aGlzLmdldEZpbG1IZWlnaHQoKS90fSxnZXRFZmZlY3RpdmVGT1Y6ZnVuY3Rpb24oKXtyZXR1cm4gMipqaXQuUkFEMkRFRypNYXRoLmF0YW4oTWF0aC50YW4oLjUqaml0LkRFRzJSQUQqdGhpcy5mb3YpL3RoaXMuem9vbSl9LGdldEZpbG1XaWR0aDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbG1HYXVnZSpNYXRoLm1pbih0aGlzLmFzcGVjdCwxKX0sZ2V0RmlsbUhlaWdodDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbG1HYXVnZS9NYXRoLm1heCh0aGlzLmFzcGVjdCwxKX0sc2V0Vmlld09mZnNldDpmdW5jdGlvbih0LGUsbixvLGksYSl7dGhpcy5hc3BlY3Q9dC9lLG51bGw9PT10aGlzLnZpZXcmJih0aGlzLnZpZXc9e2VuYWJsZWQ6ITAsZnVsbFdpZHRoOjEsZnVsbEhlaWdodDoxLG9mZnNldFg6MCxvZmZzZXRZOjAsd2lkdGg6MSxoZWlnaHQ6MX0pLHRoaXMudmlldy5lbmFibGVkPSEwLHRoaXMudmlldy5mdWxsV2lkdGg9dCx0aGlzLnZpZXcuZnVsbEhlaWdodD1lLHRoaXMudmlldy5vZmZzZXRYPW4sdGhpcy52aWV3Lm9mZnNldFk9byx0aGlzLnZpZXcud2lkdGg9aSx0aGlzLnZpZXcuaGVpZ2h0PWEsdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9LGNsZWFyVmlld09mZnNldDpmdW5jdGlvbigpe251bGwhPT10aGlzLnZpZXcmJih0aGlzLnZpZXcuZW5hYmxlZD0hMSksdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9LHVwZGF0ZVByb2plY3Rpb25NYXRyaXg6ZnVuY3Rpb24oKXtjb25zdCB0PXRoaXMubmVhcjtsZXQgZT10Kk1hdGgudGFuKC41KmppdC5ERUcyUkFEKnRoaXMuZm92KS90aGlzLnpvb20sbj0yKmUsbz10aGlzLmFzcGVjdCpuLGk9LS41Km87Y29uc3QgYT10aGlzLnZpZXc7aWYobnVsbCE9PXRoaXMudmlldyYmdGhpcy52aWV3LmVuYWJsZWQpe2NvbnN0IHQ9YS5mdWxsV2lkdGgscj1hLmZ1bGxIZWlnaHQ7aSs9YS5vZmZzZXRYKm8vdCxlLT1hLm9mZnNldFkqbi9yLG8qPWEud2lkdGgvdCxuKj1hLmhlaWdodC9yfWNvbnN0IHI9dGhpcy5maWxtT2Zmc2V0OzAhPT1yJiYoaSs9dCpyL3RoaXMuZ2V0RmlsbVdpZHRoKCkpLHRoaXMucHJvamVjdGlvbk1hdHJpeC5tYWtlUGVyc3BlY3RpdmUoaSxpK28sZSxlLW4sdCx0aGlzLmZhciksdGhpcy5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZS5jb3B5KHRoaXMucHJvamVjdGlvbk1hdHJpeCkuaW52ZXJ0KCl9LHRvSlNPTjpmdW5jdGlvbih0KXtjb25zdCBlPVFhdC5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyx0KTtyZXR1cm4gZS5vYmplY3QuZm92PXRoaXMuZm92LGUub2JqZWN0Lnpvb209dGhpcy56b29tLGUub2JqZWN0Lm5lYXI9dGhpcy5uZWFyLGUub2JqZWN0LmZhcj10aGlzLmZhcixlLm9iamVjdC5mb2N1cz10aGlzLmZvY3VzLGUub2JqZWN0LmFzcGVjdD10aGlzLmFzcGVjdCxudWxsIT09dGhpcy52aWV3JiYoZS5vYmplY3Qudmlldz1PYmplY3QuYXNzaWduKHt9LHRoaXMudmlldykpLGUub2JqZWN0LmZpbG1HYXVnZT10aGlzLmZpbG1HYXVnZSxlLm9iamVjdC5maWxtT2Zmc2V0PXRoaXMuZmlsbU9mZnNldCxlfX0pO2NvbnN0IE1zdD05MDtmdW5jdGlvbiB2c3QodCxlLG4pe2lmKFFhdC5jYWxsKHRoaXMpLHRoaXMudHlwZT0iQ3ViZUNhbWVyYSIsITAhPT1uLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLkN1YmVDYW1lcmE6IFRoZSBjb25zdHJ1Y3RvciBub3cgZXhwZWN0cyBhbiBpbnN0YW5jZSBvZiBXZWJHTEN1YmVSZW5kZXJUYXJnZXQgYXMgdGhpcmQgcGFyYW1ldGVyLiIpO3RoaXMucmVuZGVyVGFyZ2V0PW47Y29uc3Qgbz1uZXcgQ3N0KE1zdCwxLHQsZSk7by5sYXllcnM9dGhpcy5sYXllcnMsby51cC5zZXQoMCwtMSwwKSxvLmxvb2tBdChuZXcgJGl0KDEsMCwwKSksdGhpcy5hZGQobyk7Y29uc3QgaT1uZXcgQ3N0KE1zdCwxLHQsZSk7aS5sYXllcnM9dGhpcy5sYXllcnMsaS51cC5zZXQoMCwtMSwwKSxpLmxvb2tBdChuZXcgJGl0KC0xLDAsMCkpLHRoaXMuYWRkKGkpO2NvbnN0IGE9bmV3IENzdChNc3QsMSx0LGUpO2EubGF5ZXJzPXRoaXMubGF5ZXJzLGEudXAuc2V0KDAsMCwxKSxhLmxvb2tBdChuZXcgJGl0KDAsMSwwKSksdGhpcy5hZGQoYSk7Y29uc3Qgcj1uZXcgQ3N0KE1zdCwxLHQsZSk7ci5sYXllcnM9dGhpcy5sYXllcnMsci51cC5zZXQoMCwwLC0xKSxyLmxvb2tBdChuZXcgJGl0KDAsLTEsMCkpLHRoaXMuYWRkKHIpO2NvbnN0IHM9bmV3IENzdChNc3QsMSx0LGUpO3MubGF5ZXJzPXRoaXMubGF5ZXJzLHMudXAuc2V0KDAsLTEsMCkscy5sb29rQXQobmV3ICRpdCgwLDAsMSkpLHRoaXMuYWRkKHMpO2NvbnN0IGw9bmV3IENzdChNc3QsMSx0LGUpO2wubGF5ZXJzPXRoaXMubGF5ZXJzLGwudXAuc2V0KDAsLTEsMCksbC5sb29rQXQobmV3ICRpdCgwLDAsLTEpKSx0aGlzLmFkZChsKSx0aGlzLnVwZGF0ZT1mdW5jdGlvbih0LGUpe251bGw9PT10aGlzLnBhcmVudCYmdGhpcy51cGRhdGVNYXRyaXhXb3JsZCgpO2NvbnN0IGM9dC54ci5lbmFibGVkLGQ9dC5nZXRSZW5kZXJUYXJnZXQoKTt0LnhyLmVuYWJsZWQ9ITE7Y29uc3QgcD1uLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzO24udGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9ITEsdC5zZXRSZW5kZXJUYXJnZXQobiwwKSx0LnJlbmRlcihlLG8pLHQuc2V0UmVuZGVyVGFyZ2V0KG4sMSksdC5yZW5kZXIoZSxpKSx0LnNldFJlbmRlclRhcmdldChuLDIpLHQucmVuZGVyKGUsYSksdC5zZXRSZW5kZXJUYXJnZXQobiwzKSx0LnJlbmRlcihlLHIpLHQuc2V0UmVuZGVyVGFyZ2V0KG4sNCksdC5yZW5kZXIoZSxzKSxuLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzPXAsdC5zZXRSZW5kZXJUYXJnZXQobiw1KSx0LnJlbmRlcihlLGwpLHQuc2V0UmVuZGVyVGFyZ2V0KGQpLHQueHIuZW5hYmxlZD1jfX1mdW5jdGlvbiB4c3QodCxlLG4sbyxpLGEscixzLGwsYyl7Wml0LmNhbGwodGhpcyx0PXZvaWQgMCE9PXQ/dDpbXSxlPXZvaWQgMCE9PWU/ZTozMDEsbixvLGksYSxyPXZvaWQgMCE9PXI/cjpPaXQscyxsLGMpLHRoaXMuZmxpcFk9ITEsdGhpcy5fbmVlZHNGbGlwRW52TWFwPSEwfSh2c3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoUWF0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPXZzdCwoeHN0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFppdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj14c3QseHN0LnByb3RvdHlwZS5pc0N1YmVUZXh0dXJlPSEwLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh4c3QucHJvdG90eXBlLCJpbWFnZXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbWFnZX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuaW1hZ2U9dH19KTtjbGFzcyBPc3QgZXh0ZW5kcyBKaXR7Y29uc3RydWN0b3IodCxlLG4pe051bWJlci5pc0ludGVnZXIoZSkmJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMQ3ViZVJlbmRlclRhcmdldDogY29uc3RydWN0b3Igc2lnbmF0dXJlIGlzIG5vdyBXZWJHTEN1YmVSZW5kZXJUYXJnZXQoIHNpemUsIG9wdGlvbnMgKSIpLGU9biksc3VwZXIodCx0LGUpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpc1dlYkdMQ3ViZVJlbmRlclRhcmdldCIse3ZhbHVlOiEwfSksdGhpcy50ZXh0dXJlPW5ldyB4c3Qodm9pZCAwLChlPWV8fHt9KS5tYXBwaW5nLGUud3JhcFMsZS53cmFwVCxlLm1hZ0ZpbHRlcixlLm1pbkZpbHRlcixlLmZvcm1hdCxlLnR5cGUsZS5hbmlzb3Ryb3B5LGUuZW5jb2RpbmcpLHRoaXMudGV4dHVyZS5fbmVlZHNGbGlwRW52TWFwPSExfWZyb21FcXVpcmVjdGFuZ3VsYXJUZXh0dXJlKHQsZSl7dGhpcy50ZXh0dXJlLnR5cGU9ZS50eXBlLHRoaXMudGV4dHVyZS5mb3JtYXQ9UGl0LHRoaXMudGV4dHVyZS5lbmNvZGluZz1lLmVuY29kaW5nLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9ZS5nZW5lcmF0ZU1pcG1hcHMsdGhpcy50ZXh0dXJlLm1pbkZpbHRlcj1lLm1pbkZpbHRlcix0aGlzLnRleHR1cmUubWFnRmlsdGVyPWUubWFnRmlsdGVyO2NvbnN0IG49bmV3IGZzdCg1LDUsNSksbz1uZXcgeXN0KHtuYW1lOiJDdWJlbWFwRnJvbUVxdWlyZWN0Iix1bmlmb3Jtczpnc3Qoe3RFcXVpcmVjdDp7dmFsdWU6bnVsbH19KSx2ZXJ0ZXhTaGFkZXI6IlxuXG5cdFx0XHRcdHZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247XG5cblx0XHRcdFx0dmVjMyB0cmFuc2Zvcm1EaXJlY3Rpb24oIGluIHZlYzMgZGlyLCBpbiBtYXQ0IG1hdHJpeCApIHtcblxuXHRcdFx0XHRcdHJldHVybiBub3JtYWxpemUoICggbWF0cml4ICogdmVjNCggZGlyLCAwLjAgKSApLnh5eiApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHR2b2lkIG1haW4oKSB7XG5cblx0XHRcdFx0XHR2V29ybGREaXJlY3Rpb24gPSB0cmFuc2Zvcm1EaXJlY3Rpb24oIHBvc2l0aW9uLCBtb2RlbE1hdHJpeCApO1xuXG5cdFx0XHRcdFx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0XHRcdFx0XHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG5cblx0XHRcdFx0fVxuXHRcdFx0IixmcmFnbWVudFNoYWRlcjoiXG5cblx0XHRcdFx0dW5pZm9ybSBzYW1wbGVyMkQgdEVxdWlyZWN0O1xuXG5cdFx0XHRcdHZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247XG5cblx0XHRcdFx0I2luY2x1ZGUgPGNvbW1vbj5cblxuXHRcdFx0XHR2b2lkIG1haW4oKSB7XG5cblx0XHRcdFx0XHR2ZWMzIGRpcmVjdGlvbiA9IG5vcm1hbGl6ZSggdldvcmxkRGlyZWN0aW9uICk7XG5cblx0XHRcdFx0XHR2ZWMyIHNhbXBsZVVWID0gZXF1aXJlY3RVdiggZGlyZWN0aW9uICk7XG5cblx0XHRcdFx0XHRnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQoIHRFcXVpcmVjdCwgc2FtcGxlVVYgKTtcblxuXHRcdFx0XHR9XG5cdFx0XHQiLHNpZGU6MSxibGVuZGluZzowfSk7by51bmlmb3Jtcy50RXF1aXJlY3QudmFsdWU9ZTtjb25zdCBpPW5ldyBtc3QobixvKSxhPWUubWluRmlsdGVyO3JldHVybiBlLm1pbkZpbHRlcj09PXlpdCYmKGUubWluRmlsdGVyPWJpdCksbmV3IHZzdCgxLDEwLHRoaXMpLnVwZGF0ZSh0LGkpLGUubWluRmlsdGVyPWEsaS5nZW9tZXRyeS5kaXNwb3NlKCksaS5tYXRlcmlhbC5kaXNwb3NlKCksdGhpc31jbGVhcih0LGUsbixvKXtjb25zdCBpPXQuZ2V0UmVuZGVyVGFyZ2V0KCk7Zm9yKGxldCBpPTA7aTw2O2krKyl0LnNldFJlbmRlclRhcmdldCh0aGlzLGkpLHQuY2xlYXIoZSxuLG8pO3Quc2V0UmVuZGVyVGFyZ2V0KGkpfX1mdW5jdGlvbiBQc3QodCxlLG4sbyxpLGEscixzLGwsYyxkLHApe1ppdC5jYWxsKHRoaXMsbnVsbCxhLHIscyxsLGMsbyxpLGQscCksdGhpcy5pbWFnZT17ZGF0YTp0fHxudWxsLHdpZHRoOmV8fDEsaGVpZ2h0Om58fDF9LHRoaXMubWFnRmlsdGVyPXZvaWQgMCE9PWw/bDpoaXQsdGhpcy5taW5GaWx0ZXI9dm9pZCAwIT09Yz9jOmhpdCx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMSx0aGlzLmZsaXBZPSExLHRoaXMudW5wYWNrQWxpZ25tZW50PTEsdGhpcy5uZWVkc1VwZGF0ZT0hMH0oUHN0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFppdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1Qc3QsUHN0LnByb3RvdHlwZS5pc0RhdGFUZXh0dXJlPSEwO2NvbnN0IHdzdD1uZXcgeWF0LGtzdD1uZXcgJGl0O2NsYXNzIFNzdHtjb25zdHJ1Y3Rvcih0LGUsbixvLGksYSl7dGhpcy5wbGFuZXM9W3ZvaWQgMCE9PXQ/dDpuZXcgbnJ0LHZvaWQgMCE9PWU/ZTpuZXcgbnJ0LHZvaWQgMCE9PW4/bjpuZXcgbnJ0LHZvaWQgMCE9PW8/bzpuZXcgbnJ0LHZvaWQgMCE9PWk/aTpuZXcgbnJ0LHZvaWQgMCE9PWE/YTpuZXcgbnJ0XX1zZXQodCxlLG4sbyxpLGEpe2NvbnN0IHI9dGhpcy5wbGFuZXM7cmV0dXJuIHJbMF0uY29weSh0KSxyWzFdLmNvcHkoZSksclsyXS5jb3B5KG4pLHJbM10uY29weShvKSxyWzRdLmNvcHkoaSkscls1XS5jb3B5KGEpLHRoaXN9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9Y29weSh0KXtjb25zdCBlPXRoaXMucGxhbmVzO2ZvcihsZXQgbj0wO248NjtuKyspZVtuXS5jb3B5KHQucGxhbmVzW25dKTtyZXR1cm4gdGhpc31zZXRGcm9tUHJvamVjdGlvbk1hdHJpeCh0KXtjb25zdCBlPXRoaXMucGxhbmVzLG49dC5lbGVtZW50cyxvPW5bMF0saT1uWzFdLGE9blsyXSxyPW5bM10scz1uWzRdLGw9bls1XSxjPW5bNl0sZD1uWzddLHA9bls4XSxtPW5bOV0sdT1uWzEwXSxmPW5bMTFdLGc9blsxMl0saD1uWzEzXSxiPW5bMTRdLHk9blsxNV07cmV0dXJuIGVbMF0uc2V0Q29tcG9uZW50cyhyLW8sZC1zLGYtcCx5LWcpLm5vcm1hbGl6ZSgpLGVbMV0uc2V0Q29tcG9uZW50cyhyK28sZCtzLGYrcCx5K2cpLm5vcm1hbGl6ZSgpLGVbMl0uc2V0Q29tcG9uZW50cyhyK2ksZCtsLGYrbSx5K2gpLm5vcm1hbGl6ZSgpLGVbM10uc2V0Q29tcG9uZW50cyhyLWksZC1sLGYtbSx5LWgpLm5vcm1hbGl6ZSgpLGVbNF0uc2V0Q29tcG9uZW50cyhyLWEsZC1jLGYtdSx5LWIpLm5vcm1hbGl6ZSgpLGVbNV0uc2V0Q29tcG9uZW50cyhyK2EsZCtjLGYrdSx5K2IpLm5vcm1hbGl6ZSgpLHRoaXN9aW50ZXJzZWN0c09iamVjdCh0KXtjb25zdCBlPXQuZ2VvbWV0cnk7cmV0dXJuIG51bGw9PT1lLmJvdW5kaW5nU3BoZXJlJiZlLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLHdzdC5jb3B5KGUuYm91bmRpbmdTcGhlcmUpLmFwcGx5TWF0cml4NCh0Lm1hdHJpeFdvcmxkKSx0aGlzLmludGVyc2VjdHNTcGhlcmUod3N0KX1pbnRlcnNlY3RzU3ByaXRlKHQpe3JldHVybiB3c3QuY2VudGVyLnNldCgwLDAsMCksd3N0LnJhZGl1cz0uNzA3MTA2NzgxMTg2NTQ3Nix3c3QuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGQpLHRoaXMuaW50ZXJzZWN0c1NwaGVyZSh3c3QpfWludGVyc2VjdHNTcGhlcmUodCl7Y29uc3QgZT10aGlzLnBsYW5lcyxuPXQuY2VudGVyLG89LXQucmFkaXVzO2ZvcihsZXQgdD0wO3Q8Njt0KyspaWYoZVt0XS5kaXN0YW5jZVRvUG9pbnQobik8bylyZXR1cm4hMTtyZXR1cm4hMH1pbnRlcnNlY3RzQm94KHQpe2NvbnN0IGU9dGhpcy5wbGFuZXM7Zm9yKGxldCBuPTA7bjw2O24rKyl7Y29uc3Qgbz1lW25dO2lmKGtzdC54PW8ubm9ybWFsLng+MD90Lm1heC54OnQubWluLngsa3N0Lnk9by5ub3JtYWwueT4wP3QubWF4Lnk6dC5taW4ueSxrc3Quej1vLm5vcm1hbC56PjA/dC5tYXguejp0Lm1pbi56LG8uZGlzdGFuY2VUb1BvaW50KGtzdCk8MClyZXR1cm4hMX1yZXR1cm4hMH1jb250YWluc1BvaW50KHQpe2NvbnN0IGU9dGhpcy5wbGFuZXM7Zm9yKGxldCBuPTA7bjw2O24rKylpZihlW25dLmRpc3RhbmNlVG9Qb2ludCh0KTwwKXJldHVybiExO3JldHVybiEwfX1mdW5jdGlvbiBEc3QoKXtsZXQgdD1udWxsLGU9ITEsbj1udWxsLG89bnVsbDtmdW5jdGlvbiBpKGUsYSl7bihlLGEpLG89dC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoaSl9cmV0dXJue3N0YXJ0OmZ1bmN0aW9uKCl7ITAhPT1lJiZudWxsIT09biYmKG89dC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoaSksZT0hMCl9LHN0b3A6ZnVuY3Rpb24oKXt0LmNhbmNlbEFuaW1hdGlvbkZyYW1lKG8pLGU9ITF9LHNldEFuaW1hdGlvbkxvb3A6ZnVuY3Rpb24odCl7bj10fSxzZXRDb250ZXh0OmZ1bmN0aW9uKGUpe3Q9ZX19fWZ1bmN0aW9uIEVzdCh0LGUpe2NvbnN0IG49ZS5pc1dlYkdMMixvPW5ldyBXZWFrTWFwO3JldHVybntnZXQ6ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdC5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlJiYodD10LmRhdGEpLG8uZ2V0KHQpfSxyZW1vdmU6ZnVuY3Rpb24gYShlKXtlLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUmJihlPWUuZGF0YSk7Y29uc3Qgbj1vLmdldChlKTtuJiYodC5kZWxldGVCdWZmZXIobi5idWZmZXIpLG8uZGVsZXRlKGUpKX0sdXBkYXRlOmZ1bmN0aW9uIHIoZSxpKXtpZihlLmlzR0xCdWZmZXJBdHRyaWJ1dGUpe2NvbnN0IHQ9by5nZXQoZSk7cmV0dXJuIHZvaWQoKCF0fHx0LnZlcnNpb248ZS52ZXJzaW9uKSYmby5zZXQoZSx7YnVmZmVyOmUuYnVmZmVyLHR5cGU6ZS50eXBlLGJ5dGVzUGVyRWxlbWVudDplLmVsZW1lbnRTaXplLHZlcnNpb246ZS52ZXJzaW9ufSkpfWUuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSYmKGU9ZS5kYXRhKTtjb25zdCBhPW8uZ2V0KGUpO3ZvaWQgMD09PWE/by5zZXQoZSwoZnVuY3Rpb24gcihlLG8pe2NvbnN0IGk9ZS5hcnJheSxhPWUudXNhZ2Uscj10LmNyZWF0ZUJ1ZmZlcigpO3QuYmluZEJ1ZmZlcihvLHIpLHQuYnVmZmVyRGF0YShvLGksYSksZS5vblVwbG9hZENhbGxiYWNrKCk7bGV0IHM9NTEyNjtyZXR1cm4gaSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheT9zPTUxMjY6aSBpbnN0YW5jZW9mIEZsb2F0NjRBcnJheT9jb25zb2xlLndhcm4oIlRIUkVFLldlYkdMQXR0cmlidXRlczogVW5zdXBwb3J0ZWQgZGF0YSBidWZmZXIgZm9ybWF0OiBGbG9hdDY0QXJyYXkuIik6aSBpbnN0YW5jZW9mIFVpbnQxNkFycmF5P2UuaXNGbG9hdDE2QnVmZmVyQXR0cmlidXRlP24/cz01MTMxOmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xBdHRyaWJ1dGVzOiBVc2FnZSBvZiBGbG9hdDE2QnVmZmVyQXR0cmlidXRlIHJlcXVpcmVzIFdlYkdMMi4iKTpzPTUxMjM6aSBpbnN0YW5jZW9mIEludDE2QXJyYXk/cz01MTIyOmkgaW5zdGFuY2VvZiBVaW50MzJBcnJheT9zPTUxMjU6aSBpbnN0YW5jZW9mIEludDMyQXJyYXk/cz01MTI0OmkgaW5zdGFuY2VvZiBJbnQ4QXJyYXk/cz01MTIwOmkgaW5zdGFuY2VvZiBVaW50OEFycmF5JiYocz01MTIxKSx7YnVmZmVyOnIsdHlwZTpzLGJ5dGVzUGVyRWxlbWVudDppLkJZVEVTX1BFUl9FTEVNRU5ULHZlcnNpb246ZS52ZXJzaW9ufX0pKGUsaSkpOmEudmVyc2lvbjxlLnZlcnNpb24mJigoZnVuY3Rpb24gcyhlLG8saSl7Y29uc3QgYT1vLmFycmF5LHI9by51cGRhdGVSYW5nZTt0LmJpbmRCdWZmZXIoaSxlKSwtMT09PXIuY291bnQ/dC5idWZmZXJTdWJEYXRhKGksMCxhKToobj90LmJ1ZmZlclN1YkRhdGEoaSxyLm9mZnNldCphLkJZVEVTX1BFUl9FTEVNRU5ULGEsci5vZmZzZXQsci5jb3VudCk6dC5idWZmZXJTdWJEYXRhKGksci5vZmZzZXQqYS5CWVRFU19QRVJfRUxFTUVOVCxhLnN1YmFycmF5KHIub2Zmc2V0LHIub2Zmc2V0K3IuY291bnQpKSxyLmNvdW50PS0xKX0pKGEuYnVmZmVyLGUsaSksYS52ZXJzaW9uPWUudmVyc2lvbil9fX1jbGFzcyBBc3QgZXh0ZW5kcyBacnR7Y29uc3RydWN0b3IodD0xLGU9MSxuPTEsbz0xKXtzdXBlcigpLHRoaXMudHlwZT0iUGxhbmVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXt3aWR0aDp0LGhlaWdodDplLHdpZHRoU2VnbWVudHM6bixoZWlnaHRTZWdtZW50czpvfTtjb25zdCBpPXQvMixhPWUvMixyPU1hdGguZmxvb3Iobikscz1NYXRoLmZsb29yKG8pLGw9cisxLGM9cysxLGQ9dC9yLHA9ZS9zLG09W10sdT1bXSxmPVtdLGc9W107Zm9yKGxldCB0PTA7dDxjO3QrKyl7Y29uc3QgZT10KnAtYTtmb3IobGV0IG49MDtuPGw7bisrKXUucHVzaChuKmQtaSwtZSwwKSxmLnB1c2goMCwwLDEpLGcucHVzaChuL3IpLGcucHVzaCgxLXQvcyl9Zm9yKGxldCB0PTA7dDxzO3QrKylmb3IobGV0IGU9MDtlPHI7ZSsrKXtjb25zdCBuPWUrbCoodCsxKSxvPWUrMStsKih0KzEpLGk9ZSsxK2wqdDttLnB1c2goZStsKnQsbixpKSxtLnB1c2gobixvLGkpfXRoaXMuc2V0SW5kZXgobSksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgenJ0KHUsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyB6cnQoZiwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgenJ0KGcsMikpfX1jb25zdCBSc3Q9e2FscGhhbWFwX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0FMUEhBTUFQXG5cdGRpZmZ1c2VDb2xvci5hICo9IHRleHR1cmUyRCggYWxwaGFNYXAsIHZVdiApLmc7XG4jZW5kaWYiLGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfQUxQSEFNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgYWxwaGFNYXA7XG4jZW5kaWYiLGFscGhhdGVzdF9mcmFnbWVudDoiI2lmZGVmIEFMUEhBVEVTVFxuXHRpZiAoIGRpZmZ1c2VDb2xvci5hIDwgQUxQSEFURVNUICkgZGlzY2FyZDtcbiNlbmRpZiIsYW9tYXBfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfQU9NQVBcblx0ZmxvYXQgYW1iaWVudE9jY2x1c2lvbiA9ICggdGV4dHVyZTJEKCBhb01hcCwgdlV2MiApLnIgLSAxLjAgKSAqIGFvTWFwSW50ZW5zaXR5ICsgMS4wO1xuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKj0gYW1iaWVudE9jY2x1c2lvbjtcblx0I2lmIGRlZmluZWQoIFVTRV9FTlZNQVAgKSAmJiBkZWZpbmVkKCBTVEFOREFSRCApXG5cdFx0ZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIgKSApO1xuXHRcdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3BlY3VsYXIgKj0gY29tcHV0ZVNwZWN1bGFyT2NjbHVzaW9uKCBkb3ROViwgYW1iaWVudE9jY2x1c2lvbiwgbWF0ZXJpYWwuc3BlY3VsYXJSb3VnaG5lc3MgKTtcblx0I2VuZGlmXG4jZW5kaWYiLGFvbWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfQU9NQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgYW9NYXA7XG5cdHVuaWZvcm0gZmxvYXQgYW9NYXBJbnRlbnNpdHk7XG4jZW5kaWYiLGJlZ2luX3ZlcnRleDoidmVjMyB0cmFuc2Zvcm1lZCA9IHZlYzMoIHBvc2l0aW9uICk7IixiZWdpbm5vcm1hbF92ZXJ0ZXg6InZlYzMgb2JqZWN0Tm9ybWFsID0gdmVjMyggbm9ybWFsICk7XG4jaWZkZWYgVVNFX1RBTkdFTlRcblx0dmVjMyBvYmplY3RUYW5nZW50ID0gdmVjMyggdGFuZ2VudC54eXogKTtcbiNlbmRpZiIsYnNkZnM6InZlYzIgaW50ZWdyYXRlU3BlY3VsYXJCUkRGKCBjb25zdCBpbiBmbG9hdCBkb3ROViwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkge1xuXHRjb25zdCB2ZWM0IGMwID0gdmVjNCggLSAxLCAtIDAuMDI3NSwgLSAwLjU3MiwgMC4wMjIgKTtcblx0Y29uc3QgdmVjNCBjMSA9IHZlYzQoIDEsIDAuMDQyNSwgMS4wNCwgLSAwLjA0ICk7XG5cdHZlYzQgciA9IHJvdWdobmVzcyAqIGMwICsgYzE7XG5cdGZsb2F0IGEwMDQgPSBtaW4oIHIueCAqIHIueCwgZXhwMiggLSA5LjI4ICogZG90TlYgKSApICogci54ICsgci55O1xuXHRyZXR1cm4gdmVjMiggLTEuMDQsIDEuMDQgKSAqIGEwMDQgKyByLnp3O1xufVxuZmxvYXQgcHVuY3R1YWxMaWdodEludGVuc2l0eVRvSXJyYWRpYW5jZUZhY3RvciggY29uc3QgaW4gZmxvYXQgbGlnaHREaXN0YW5jZSwgY29uc3QgaW4gZmxvYXQgY3V0b2ZmRGlzdGFuY2UsIGNvbnN0IGluIGZsb2F0IGRlY2F5RXhwb25lbnQgKSB7XG4jaWYgZGVmaW5lZCAoIFBIWVNJQ0FMTFlfQ09SUkVDVF9MSUdIVFMgKVxuXHRmbG9hdCBkaXN0YW5jZUZhbGxvZmYgPSAxLjAgLyBtYXgoIHBvdyggbGlnaHREaXN0YW5jZSwgZGVjYXlFeHBvbmVudCApLCAwLjAxICk7XG5cdGlmKCBjdXRvZmZEaXN0YW5jZSA+IDAuMCApIHtcblx0XHRkaXN0YW5jZUZhbGxvZmYgKj0gcG93Miggc2F0dXJhdGUoIDEuMCAtIHBvdzQoIGxpZ2h0RGlzdGFuY2UgLyBjdXRvZmZEaXN0YW5jZSApICkgKTtcblx0fVxuXHRyZXR1cm4gZGlzdGFuY2VGYWxsb2ZmO1xuI2Vsc2Vcblx0aWYoIGN1dG9mZkRpc3RhbmNlID4gMC4wICYmIGRlY2F5RXhwb25lbnQgPiAwLjAgKSB7XG5cdFx0cmV0dXJuIHBvdyggc2F0dXJhdGUoIC1saWdodERpc3RhbmNlIC8gY3V0b2ZmRGlzdGFuY2UgKyAxLjAgKSwgZGVjYXlFeHBvbmVudCApO1xuXHR9XG5cdHJldHVybiAxLjA7XG4jZW5kaWZcbn1cbnZlYzMgQlJERl9EaWZmdXNlX0xhbWJlcnQoIGNvbnN0IGluIHZlYzMgZGlmZnVzZUNvbG9yICkge1xuXHRyZXR1cm4gUkVDSVBST0NBTF9QSSAqIGRpZmZ1c2VDb2xvcjtcbn1cbnZlYzMgRl9TY2hsaWNrKCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IGRvdExIICkge1xuXHRmbG9hdCBmcmVzbmVsID0gZXhwMiggKCAtNS41NTQ3MyAqIGRvdExIIC0gNi45ODMxNiApICogZG90TEggKTtcblx0cmV0dXJuICggMS4wIC0gc3BlY3VsYXJDb2xvciApICogZnJlc25lbCArIHNwZWN1bGFyQ29sb3I7XG59XG52ZWMzIEZfU2NobGlja19Sb3VnaG5lc3NEZXBlbmRlbnQoIGNvbnN0IGluIHZlYzMgRjAsIGNvbnN0IGluIGZsb2F0IGRvdE5WLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7XG5cdGZsb2F0IGZyZXNuZWwgPSBleHAyKCAoIC01LjU1NDczICogZG90TlYgLSA2Ljk4MzE2ICkgKiBkb3ROViApO1xuXHR2ZWMzIEZyID0gbWF4KCB2ZWMzKCAxLjAgLSByb3VnaG5lc3MgKSwgRjAgKSAtIEYwO1xuXHRyZXR1cm4gRnIgKiBmcmVzbmVsICsgRjA7XG59XG5mbG9hdCBHX0dHWF9TbWl0aCggY29uc3QgaW4gZmxvYXQgYWxwaGEsIGNvbnN0IGluIGZsb2F0IGRvdE5MLCBjb25zdCBpbiBmbG9hdCBkb3ROViApIHtcblx0ZmxvYXQgYTIgPSBwb3cyKCBhbHBoYSApO1xuXHRmbG9hdCBnbCA9IGRvdE5MICsgc3FydCggYTIgKyAoIDEuMCAtIGEyICkgKiBwb3cyKCBkb3ROTCApICk7XG5cdGZsb2F0IGd2ID0gZG90TlYgKyBzcXJ0KCBhMiArICggMS4wIC0gYTIgKSAqIHBvdzIoIGRvdE5WICkgKTtcblx0cmV0dXJuIDEuMCAvICggZ2wgKiBndiApO1xufVxuZmxvYXQgR19HR1hfU21pdGhDb3JyZWxhdGVkKCBjb25zdCBpbiBmbG9hdCBhbHBoYSwgY29uc3QgaW4gZmxvYXQgZG90TkwsIGNvbnN0IGluIGZsb2F0IGRvdE5WICkge1xuXHRmbG9hdCBhMiA9IHBvdzIoIGFscGhhICk7XG5cdGZsb2F0IGd2ID0gZG90TkwgKiBzcXJ0KCBhMiArICggMS4wIC0gYTIgKSAqIHBvdzIoIGRvdE5WICkgKTtcblx0ZmxvYXQgZ2wgPSBkb3ROViAqIHNxcnQoIGEyICsgKCAxLjAgLSBhMiApICogcG93MiggZG90TkwgKSApO1xuXHRyZXR1cm4gMC41IC8gbWF4KCBndiArIGdsLCBFUFNJTE9OICk7XG59XG5mbG9hdCBEX0dHWCggY29uc3QgaW4gZmxvYXQgYWxwaGEsIGNvbnN0IGluIGZsb2F0IGRvdE5IICkge1xuXHRmbG9hdCBhMiA9IHBvdzIoIGFscGhhICk7XG5cdGZsb2F0IGRlbm9tID0gcG93MiggZG90TkggKSAqICggYTIgLSAxLjAgKSArIDEuMDtcblx0cmV0dXJuIFJFQ0lQUk9DQUxfUEkgKiBhMiAvIHBvdzIoIGRlbm9tICk7XG59XG52ZWMzIEJSREZfU3BlY3VsYXJfR0dYKCBjb25zdCBpbiBJbmNpZGVudExpZ2h0IGluY2lkZW50TGlnaHQsIGNvbnN0IGluIHZlYzMgdmlld0RpciwgY29uc3QgaW4gdmVjMyBub3JtYWwsIGNvbnN0IGluIHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkge1xuXHRmbG9hdCBhbHBoYSA9IHBvdzIoIHJvdWdobmVzcyApO1xuXHR2ZWMzIGhhbGZEaXIgPSBub3JtYWxpemUoIGluY2lkZW50TGlnaHQuZGlyZWN0aW9uICsgdmlld0RpciApO1xuXHRmbG9hdCBkb3ROTCA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgaW5jaWRlbnRMaWdodC5kaXJlY3Rpb24gKSApO1xuXHRmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgdmlld0RpciApICk7XG5cdGZsb2F0IGRvdE5IID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBoYWxmRGlyICkgKTtcblx0ZmxvYXQgZG90TEggPSBzYXR1cmF0ZSggZG90KCBpbmNpZGVudExpZ2h0LmRpcmVjdGlvbiwgaGFsZkRpciApICk7XG5cdHZlYzMgRiA9IEZfU2NobGljayggc3BlY3VsYXJDb2xvciwgZG90TEggKTtcblx0ZmxvYXQgRyA9IEdfR0dYX1NtaXRoQ29ycmVsYXRlZCggYWxwaGEsIGRvdE5MLCBkb3ROViApO1xuXHRmbG9hdCBEID0gRF9HR1goIGFscGhhLCBkb3ROSCApO1xuXHRyZXR1cm4gRiAqICggRyAqIEQgKTtcbn1cbnZlYzIgTFRDX1V2KCBjb25zdCBpbiB2ZWMzIE4sIGNvbnN0IGluIHZlYzMgViwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkge1xuXHRjb25zdCBmbG9hdCBMVVRfU0laRSA9IDY0LjA7XG5cdGNvbnN0IGZsb2F0IExVVF9TQ0FMRSA9ICggTFVUX1NJWkUgLSAxLjAgKSAvIExVVF9TSVpFO1xuXHRjb25zdCBmbG9hdCBMVVRfQklBUyA9IDAuNSAvIExVVF9TSVpFO1xuXHRmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIE4sIFYgKSApO1xuXHR2ZWMyIHV2ID0gdmVjMiggcm91Z2huZXNzLCBzcXJ0KCAxLjAgLSBkb3ROViApICk7XG5cdHV2ID0gdXYgKiBMVVRfU0NBTEUgKyBMVVRfQklBUztcblx0cmV0dXJuIHV2O1xufVxuZmxvYXQgTFRDX0NsaXBwZWRTcGhlcmVGb3JtRmFjdG9yKCBjb25zdCBpbiB2ZWMzIGYgKSB7XG5cdGZsb2F0IGwgPSBsZW5ndGgoIGYgKTtcblx0cmV0dXJuIG1heCggKCBsICogbCArIGYueiApIC8gKCBsICsgMS4wICksIDAuMCApO1xufVxudmVjMyBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvbnN0IGluIHZlYzMgdjEsIGNvbnN0IGluIHZlYzMgdjIgKSB7XG5cdGZsb2F0IHggPSBkb3QoIHYxLCB2MiApO1xuXHRmbG9hdCB5ID0gYWJzKCB4ICk7XG5cdGZsb2F0IGEgPSAwLjg1NDM5ODUgKyAoIDAuNDk2NTE1NSArIDAuMDE0NTIwNiAqIHkgKSAqIHk7XG5cdGZsb2F0IGIgPSAzLjQxNzU5NDAgKyAoIDQuMTYxNjcyNCArIHkgKSAqIHk7XG5cdGZsb2F0IHYgPSBhIC8gYjtcblx0ZmxvYXQgdGhldGFfc2ludGhldGEgPSAoIHggPiAwLjAgKSA/IHYgOiAwLjUgKiBpbnZlcnNlc3FydCggbWF4KCAxLjAgLSB4ICogeCwgMWUtNyApICkgLSB2O1xuXHRyZXR1cm4gY3Jvc3MoIHYxLCB2MiApICogdGhldGFfc2ludGhldGE7XG59XG52ZWMzIExUQ19FdmFsdWF0ZSggY29uc3QgaW4gdmVjMyBOLCBjb25zdCBpbiB2ZWMzIFYsIGNvbnN0IGluIHZlYzMgUCwgY29uc3QgaW4gbWF0MyBtSW52LCBjb25zdCBpbiB2ZWMzIHJlY3RDb29yZHNbIDQgXSApIHtcblx0dmVjMyB2MSA9IHJlY3RDb29yZHNbIDEgXSAtIHJlY3RDb29yZHNbIDAgXTtcblx0dmVjMyB2MiA9IHJlY3RDb29yZHNbIDMgXSAtIHJlY3RDb29yZHNbIDAgXTtcblx0dmVjMyBsaWdodE5vcm1hbCA9IGNyb3NzKCB2MSwgdjIgKTtcblx0aWYoIGRvdCggbGlnaHROb3JtYWwsIFAgLSByZWN0Q29vcmRzWyAwIF0gKSA8IDAuMCApIHJldHVybiB2ZWMzKCAwLjAgKTtcblx0dmVjMyBUMSwgVDI7XG5cdFQxID0gbm9ybWFsaXplKCBWIC0gTiAqIGRvdCggViwgTiApICk7XG5cdFQyID0gLSBjcm9zcyggTiwgVDEgKTtcblx0bWF0MyBtYXQgPSBtSW52ICogdHJhbnNwb3NlTWF0MyggbWF0MyggVDEsIFQyLCBOICkgKTtcblx0dmVjMyBjb29yZHNbIDQgXTtcblx0Y29vcmRzWyAwIF0gPSBtYXQgKiAoIHJlY3RDb29yZHNbIDAgXSAtIFAgKTtcblx0Y29vcmRzWyAxIF0gPSBtYXQgKiAoIHJlY3RDb29yZHNbIDEgXSAtIFAgKTtcblx0Y29vcmRzWyAyIF0gPSBtYXQgKiAoIHJlY3RDb29yZHNbIDIgXSAtIFAgKTtcblx0Y29vcmRzWyAzIF0gPSBtYXQgKiAoIHJlY3RDb29yZHNbIDMgXSAtIFAgKTtcblx0Y29vcmRzWyAwIF0gPSBub3JtYWxpemUoIGNvb3Jkc1sgMCBdICk7XG5cdGNvb3Jkc1sgMSBdID0gbm9ybWFsaXplKCBjb29yZHNbIDEgXSApO1xuXHRjb29yZHNbIDIgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAyIF0gKTtcblx0Y29vcmRzWyAzIF0gPSBub3JtYWxpemUoIGNvb3Jkc1sgMyBdICk7XG5cdHZlYzMgdmVjdG9yRm9ybUZhY3RvciA9IHZlYzMoIDAuMCApO1xuXHR2ZWN0b3JGb3JtRmFjdG9yICs9IExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29vcmRzWyAwIF0sIGNvb3Jkc1sgMSBdICk7XG5cdHZlY3RvckZvcm1GYWN0b3IgKz0gTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb29yZHNbIDEgXSwgY29vcmRzWyAyIF0gKTtcblx0dmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMiBdLCBjb29yZHNbIDMgXSApO1xuXHR2ZWN0b3JGb3JtRmFjdG9yICs9IExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29vcmRzWyAzIF0sIGNvb3Jkc1sgMCBdICk7XG5cdGZsb2F0IHJlc3VsdCA9IExUQ19DbGlwcGVkU3BoZXJlRm9ybUZhY3RvciggdmVjdG9yRm9ybUZhY3RvciApO1xuXHRyZXR1cm4gdmVjMyggcmVzdWx0ICk7XG59XG52ZWMzIEJSREZfU3BlY3VsYXJfR0dYX0Vudmlyb25tZW50KCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHtcblx0ZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIHZpZXdEaXIgKSApO1xuXHR2ZWMyIGJyZGYgPSBpbnRlZ3JhdGVTcGVjdWxhckJSREYoIGRvdE5WLCByb3VnaG5lc3MgKTtcblx0cmV0dXJuIHNwZWN1bGFyQ29sb3IgKiBicmRmLnggKyBicmRmLnk7XG59XG52b2lkIEJSREZfU3BlY3VsYXJfTXVsdGlzY2F0dGVyaW5nX0Vudmlyb25tZW50KCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcywgaW5vdXQgdmVjMyBzaW5nbGVTY2F0dGVyLCBpbm91dCB2ZWMzIG11bHRpU2NhdHRlciApIHtcblx0ZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIgKSApO1xuXHR2ZWMzIEYgPSBGX1NjaGxpY2tfUm91Z2huZXNzRGVwZW5kZW50KCBzcGVjdWxhckNvbG9yLCBkb3ROViwgcm91Z2huZXNzICk7XG5cdHZlYzIgYnJkZiA9IGludGVncmF0ZVNwZWN1bGFyQlJERiggZG90TlYsIHJvdWdobmVzcyApO1xuXHR2ZWMzIEZzc0VzcyA9IEYgKiBicmRmLnggKyBicmRmLnk7XG5cdGZsb2F0IEVzcyA9IGJyZGYueCArIGJyZGYueTtcblx0ZmxvYXQgRW1zID0gMS4wIC0gRXNzO1xuXHR2ZWMzIEZhdmcgPSBzcGVjdWxhckNvbG9yICsgKCAxLjAgLSBzcGVjdWxhckNvbG9yICkgKiAwLjA0NzYxOTtcdHZlYzMgRm1zID0gRnNzRXNzICogRmF2ZyAvICggMS4wIC0gRW1zICogRmF2ZyApO1xuXHRzaW5nbGVTY2F0dGVyICs9IEZzc0Vzcztcblx0bXVsdGlTY2F0dGVyICs9IEZtcyAqIEVtcztcbn1cbmZsb2F0IEdfQmxpbm5QaG9uZ19JbXBsaWNpdCggKSB7XG5cdHJldHVybiAwLjI1O1xufVxuZmxvYXQgRF9CbGlublBob25nKCBjb25zdCBpbiBmbG9hdCBzaGluaW5lc3MsIGNvbnN0IGluIGZsb2F0IGRvdE5IICkge1xuXHRyZXR1cm4gUkVDSVBST0NBTF9QSSAqICggc2hpbmluZXNzICogMC41ICsgMS4wICkgKiBwb3coIGRvdE5ILCBzaGluaW5lc3MgKTtcbn1cbnZlYzMgQlJERl9TcGVjdWxhcl9CbGlublBob25nKCBjb25zdCBpbiBJbmNpZGVudExpZ2h0IGluY2lkZW50TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxvYXQgc2hpbmluZXNzICkge1xuXHR2ZWMzIGhhbGZEaXIgPSBub3JtYWxpemUoIGluY2lkZW50TGlnaHQuZGlyZWN0aW9uICsgZ2VvbWV0cnkudmlld0RpciApO1xuXHRmbG9hdCBkb3ROSCA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgaGFsZkRpciApICk7XG5cdGZsb2F0IGRvdExIID0gc2F0dXJhdGUoIGRvdCggaW5jaWRlbnRMaWdodC5kaXJlY3Rpb24sIGhhbGZEaXIgKSApO1xuXHR2ZWMzIEYgPSBGX1NjaGxpY2soIHNwZWN1bGFyQ29sb3IsIGRvdExIICk7XG5cdGZsb2F0IEcgPSBHX0JsaW5uUGhvbmdfSW1wbGljaXQoICk7XG5cdGZsb2F0IEQgPSBEX0JsaW5uUGhvbmcoIHNoaW5pbmVzcywgZG90TkggKTtcblx0cmV0dXJuIEYgKiAoIEcgKiBEICk7XG59XG5mbG9hdCBHR1hSb3VnaG5lc3NUb0JsaW5uRXhwb25lbnQoIGNvbnN0IGluIGZsb2F0IGdneFJvdWdobmVzcyApIHtcblx0cmV0dXJuICggMi4wIC8gcG93MiggZ2d4Um91Z2huZXNzICsgMC4wMDAxICkgLSAyLjAgKTtcbn1cbmZsb2F0IEJsaW5uRXhwb25lbnRUb0dHWFJvdWdobmVzcyggY29uc3QgaW4gZmxvYXQgYmxpbm5FeHBvbmVudCApIHtcblx0cmV0dXJuIHNxcnQoIDIuMCAvICggYmxpbm5FeHBvbmVudCArIDIuMCApICk7XG59XG4jaWYgZGVmaW5lZCggVVNFX1NIRUVOIClcbmZsb2F0IERfQ2hhcmxpZShmbG9hdCByb3VnaG5lc3MsIGZsb2F0IE5vSCkge1xuXHRmbG9hdCBpbnZBbHBoYSA9IDEuMCAvIHJvdWdobmVzcztcblx0ZmxvYXQgY29zMmggPSBOb0ggKiBOb0g7XG5cdGZsb2F0IHNpbjJoID0gbWF4KDEuMCAtIGNvczJoLCAwLjAwNzgxMjUpO1x0cmV0dXJuICgyLjAgKyBpbnZBbHBoYSkgKiBwb3coc2luMmgsIGludkFscGhhICogMC41KSAvICgyLjAgKiBQSSk7XG59XG5mbG9hdCBWX05ldWJlbHQoZmxvYXQgTm9WLCBmbG9hdCBOb0wpIHtcblx0cmV0dXJuIHNhdHVyYXRlKDEuMCAvICg0LjAgKiAoTm9MICsgTm9WIC0gTm9MICogTm9WKSkpO1xufVxudmVjMyBCUkRGX1NwZWN1bGFyX1NoZWVuKCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGNvbnN0IGluIHZlYzMgTCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgdmVjMyBzcGVjdWxhckNvbG9yICkge1xuXHR2ZWMzIE4gPSBnZW9tZXRyeS5ub3JtYWw7XG5cdHZlYzMgViA9IGdlb21ldHJ5LnZpZXdEaXI7XG5cdHZlYzMgSCA9IG5vcm1hbGl6ZSggViArIEwgKTtcblx0ZmxvYXQgZG90TkggPSBzYXR1cmF0ZSggZG90KCBOLCBIICkgKTtcblx0cmV0dXJuIHNwZWN1bGFyQ29sb3IgKiBEX0NoYXJsaWUoIHJvdWdobmVzcywgZG90TkggKSAqIFZfTmV1YmVsdCggZG90KE4sIFYpLCBkb3QoTiwgTCkgKTtcbn1cbiNlbmRpZiIsYnVtcG1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0JVTVBNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgYnVtcE1hcDtcblx0dW5pZm9ybSBmbG9hdCBidW1wU2NhbGU7XG5cdHZlYzIgZEhkeHlfZndkKCkge1xuXHRcdHZlYzIgZFNUZHggPSBkRmR4KCB2VXYgKTtcblx0XHR2ZWMyIGRTVGR5ID0gZEZkeSggdlV2ICk7XG5cdFx0ZmxvYXQgSGxsID0gYnVtcFNjYWxlICogdGV4dHVyZTJEKCBidW1wTWFwLCB2VXYgKS54O1xuXHRcdGZsb2F0IGRCeCA9IGJ1bXBTY2FsZSAqIHRleHR1cmUyRCggYnVtcE1hcCwgdlV2ICsgZFNUZHggKS54IC0gSGxsO1xuXHRcdGZsb2F0IGRCeSA9IGJ1bXBTY2FsZSAqIHRleHR1cmUyRCggYnVtcE1hcCwgdlV2ICsgZFNUZHkgKS54IC0gSGxsO1xuXHRcdHJldHVybiB2ZWMyKCBkQngsIGRCeSApO1xuXHR9XG5cdHZlYzMgcGVydHVyYk5vcm1hbEFyYiggdmVjMyBzdXJmX3BvcywgdmVjMyBzdXJmX25vcm0sIHZlYzIgZEhkeHkgKSB7XG5cdFx0dmVjMyB2U2lnbWFYID0gdmVjMyggZEZkeCggc3VyZl9wb3MueCApLCBkRmR4KCBzdXJmX3Bvcy55ICksIGRGZHgoIHN1cmZfcG9zLnogKSApO1xuXHRcdHZlYzMgdlNpZ21hWSA9IHZlYzMoIGRGZHkoIHN1cmZfcG9zLnggKSwgZEZkeSggc3VyZl9wb3MueSApLCBkRmR5KCBzdXJmX3Bvcy56ICkgKTtcblx0XHR2ZWMzIHZOID0gc3VyZl9ub3JtO1xuXHRcdHZlYzMgUjEgPSBjcm9zcyggdlNpZ21hWSwgdk4gKTtcblx0XHR2ZWMzIFIyID0gY3Jvc3MoIHZOLCB2U2lnbWFYICk7XG5cdFx0ZmxvYXQgZkRldCA9IGRvdCggdlNpZ21hWCwgUjEgKTtcblx0XHRmRGV0ICo9ICggZmxvYXQoIGdsX0Zyb250RmFjaW5nICkgKiAyLjAgLSAxLjAgKTtcblx0XHR2ZWMzIHZHcmFkID0gc2lnbiggZkRldCApICogKCBkSGR4eS54ICogUjEgKyBkSGR4eS55ICogUjIgKTtcblx0XHRyZXR1cm4gbm9ybWFsaXplKCBhYnMoIGZEZXQgKSAqIHN1cmZfbm9ybSAtIHZHcmFkICk7XG5cdH1cbiNlbmRpZiIsY2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50OiIjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyA+IDBcblx0dmVjNCBwbGFuZTtcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBVTklPTl9DTElQUElOR19QTEFORVM7IGkgKysgKSB7XG5cdFx0cGxhbmUgPSBjbGlwcGluZ1BsYW5lc1sgaSBdO1xuXHRcdGlmICggZG90KCB2Q2xpcFBvc2l0aW9uLCBwbGFuZS54eXogKSA+IHBsYW5lLncgKSBkaXNjYXJkO1xuXHR9XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG5cdCNpZiBVTklPTl9DTElQUElOR19QTEFORVMgPCBOVU1fQ0xJUFBJTkdfUExBTkVTXG5cdFx0Ym9vbCBjbGlwcGVkID0gdHJ1ZTtcblx0XHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdFx0Zm9yICggaW50IGkgPSBVTklPTl9DTElQUElOR19QTEFORVM7IGkgPCBOVU1fQ0xJUFBJTkdfUExBTkVTOyBpICsrICkge1xuXHRcdFx0cGxhbmUgPSBjbGlwcGluZ1BsYW5lc1sgaSBdO1xuXHRcdFx0Y2xpcHBlZCA9ICggZG90KCB2Q2xpcFBvc2l0aW9uLCBwbGFuZS54eXogKSA+IHBsYW5lLncgKSAmJiBjbGlwcGVkO1xuXHRcdH1cblx0XHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuXHRcdGlmICggY2xpcHBlZCApIGRpc2NhcmQ7XG5cdCNlbmRpZlxuI2VuZGlmIixjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudDoiI2lmIE5VTV9DTElQUElOR19QTEFORVMgPiAwXG5cdHZhcnlpbmcgdmVjMyB2Q2xpcFBvc2l0aW9uO1xuXHR1bmlmb3JtIHZlYzQgY2xpcHBpbmdQbGFuZXNbIE5VTV9DTElQUElOR19QTEFORVMgXTtcbiNlbmRpZiIsY2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4OiIjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyA+IDBcblx0dmFyeWluZyB2ZWMzIHZDbGlwUG9zaXRpb247XG4jZW5kaWYiLGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg6IiNpZiBOVU1fQ0xJUFBJTkdfUExBTkVTID4gMFxuXHR2Q2xpcFBvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejtcbiNlbmRpZiIsY29sb3JfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfQ09MT1Jcblx0ZGlmZnVzZUNvbG9yLnJnYiAqPSB2Q29sb3I7XG4jZW5kaWYiLGNvbG9yX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfQ09MT1Jcblx0dmFyeWluZyB2ZWMzIHZDb2xvcjtcbiNlbmRpZiIsY29sb3JfcGFyc192ZXJ0ZXg6IiNpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKSB8fCBkZWZpbmVkKCBVU0VfSU5TVEFOQ0lOR19DT0xPUiApXG5cdHZhcnlpbmcgdmVjMyB2Q29sb3I7XG4jZW5kaWYiLGNvbG9yX3ZlcnRleDoiI2lmIGRlZmluZWQoIFVTRV9DT0xPUiApIHx8IGRlZmluZWQoIFVTRV9JTlNUQU5DSU5HX0NPTE9SIClcblx0dkNvbG9yID0gdmVjMyggMS4wICk7XG4jZW5kaWZcbiNpZmRlZiBVU0VfQ09MT1Jcblx0dkNvbG9yLnh5eiAqPSBjb2xvci54eXo7XG4jZW5kaWZcbiNpZmRlZiBVU0VfSU5TVEFOQ0lOR19DT0xPUlxuXHR2Q29sb3IueHl6ICo9IGluc3RhbmNlQ29sb3IueHl6O1xuI2VuZGlmIixjb21tb246IiNkZWZpbmUgUEkgMy4xNDE1OTI2NTM1ODk3OTNcbiNkZWZpbmUgUEkyIDYuMjgzMTg1MzA3MTc5NTg2XG4jZGVmaW5lIFBJX0hBTEYgMS41NzA3OTYzMjY3OTQ4OTY2XG4jZGVmaW5lIFJFQ0lQUk9DQUxfUEkgMC4zMTgzMDk4ODYxODM3OTA3XG4jZGVmaW5lIFJFQ0lQUk9DQUxfUEkyIDAuMTU5MTU0OTQzMDkxODk1MzVcbiNkZWZpbmUgRVBTSUxPTiAxZS02XG4jaWZuZGVmIHNhdHVyYXRlXG4jZGVmaW5lIHNhdHVyYXRlKGEpIGNsYW1wKCBhLCAwLjAsIDEuMCApXG4jZW5kaWZcbiNkZWZpbmUgd2hpdGVDb21wbGVtZW50KGEpICggMS4wIC0gc2F0dXJhdGUoIGEgKSApXG5mbG9hdCBwb3cyKCBjb25zdCBpbiBmbG9hdCB4ICkgeyByZXR1cm4geCp4OyB9XG5mbG9hdCBwb3czKCBjb25zdCBpbiBmbG9hdCB4ICkgeyByZXR1cm4geCp4Kng7IH1cbmZsb2F0IHBvdzQoIGNvbnN0IGluIGZsb2F0IHggKSB7IGZsb2F0IHgyID0geCp4OyByZXR1cm4geDIqeDI7IH1cbmZsb2F0IGF2ZXJhZ2UoIGNvbnN0IGluIHZlYzMgY29sb3IgKSB7IHJldHVybiBkb3QoIGNvbG9yLCB2ZWMzKCAwLjMzMzMgKSApOyB9XG5oaWdocCBmbG9hdCByYW5kKCBjb25zdCBpbiB2ZWMyIHV2ICkge1xuXHRjb25zdCBoaWdocCBmbG9hdCBhID0gMTIuOTg5OCwgYiA9IDc4LjIzMywgYyA9IDQzNzU4LjU0NTM7XG5cdGhpZ2hwIGZsb2F0IGR0ID0gZG90KCB1di54eSwgdmVjMiggYSxiICkgKSwgc24gPSBtb2QoIGR0LCBQSSApO1xuXHRyZXR1cm4gZnJhY3Qoc2luKHNuKSAqIGMpO1xufVxuI2lmZGVmIEhJR0hfUFJFQ0lTSU9OXG5cdGZsb2F0IHByZWNpc2lvblNhZmVMZW5ndGgoIHZlYzMgdiApIHsgcmV0dXJuIGxlbmd0aCggdiApOyB9XG4jZWxzZVxuXHRmbG9hdCBtYXgzKCB2ZWMzIHYgKSB7IHJldHVybiBtYXgoIG1heCggdi54LCB2LnkgKSwgdi56ICk7IH1cblx0ZmxvYXQgcHJlY2lzaW9uU2FmZUxlbmd0aCggdmVjMyB2ICkge1xuXHRcdGZsb2F0IG1heENvbXBvbmVudCA9IG1heDMoIGFicyggdiApICk7XG5cdFx0cmV0dXJuIGxlbmd0aCggdiAvIG1heENvbXBvbmVudCApICogbWF4Q29tcG9uZW50O1xuXHR9XG4jZW5kaWZcbnN0cnVjdCBJbmNpZGVudExpZ2h0IHtcblx0dmVjMyBjb2xvcjtcblx0dmVjMyBkaXJlY3Rpb247XG5cdGJvb2wgdmlzaWJsZTtcbn07XG5zdHJ1Y3QgUmVmbGVjdGVkTGlnaHQge1xuXHR2ZWMzIGRpcmVjdERpZmZ1c2U7XG5cdHZlYzMgZGlyZWN0U3BlY3VsYXI7XG5cdHZlYzMgaW5kaXJlY3REaWZmdXNlO1xuXHR2ZWMzIGluZGlyZWN0U3BlY3VsYXI7XG59O1xuc3RydWN0IEdlb21ldHJpY0NvbnRleHQge1xuXHR2ZWMzIHBvc2l0aW9uO1xuXHR2ZWMzIG5vcm1hbDtcblx0dmVjMyB2aWV3RGlyO1xuI2lmZGVmIENMRUFSQ09BVFxuXHR2ZWMzIGNsZWFyY29hdE5vcm1hbDtcbiNlbmRpZlxufTtcbnZlYzMgdHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7XG5cdHJldHVybiBub3JtYWxpemUoICggbWF0cml4ICogdmVjNCggZGlyLCAwLjAgKSApLnh5eiApO1xufVxudmVjMyBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7XG5cdHJldHVybiBub3JtYWxpemUoICggdmVjNCggZGlyLCAwLjAgKSAqIG1hdHJpeCApLnh5eiApO1xufVxudmVjMyBwcm9qZWN0T25QbGFuZShpbiB2ZWMzIHBvaW50LCBpbiB2ZWMzIHBvaW50T25QbGFuZSwgaW4gdmVjMyBwbGFuZU5vcm1hbCApIHtcblx0ZmxvYXQgZGlzdGFuY2UgPSBkb3QoIHBsYW5lTm9ybWFsLCBwb2ludCAtIHBvaW50T25QbGFuZSApO1xuXHRyZXR1cm4gLSBkaXN0YW5jZSAqIHBsYW5lTm9ybWFsICsgcG9pbnQ7XG59XG5mbG9hdCBzaWRlT2ZQbGFuZSggaW4gdmVjMyBwb2ludCwgaW4gdmVjMyBwb2ludE9uUGxhbmUsIGluIHZlYzMgcGxhbmVOb3JtYWwgKSB7XG5cdHJldHVybiBzaWduKCBkb3QoIHBvaW50IC0gcG9pbnRPblBsYW5lLCBwbGFuZU5vcm1hbCApICk7XG59XG52ZWMzIGxpbmVQbGFuZUludGVyc2VjdCggaW4gdmVjMyBwb2ludE9uTGluZSwgaW4gdmVjMyBsaW5lRGlyZWN0aW9uLCBpbiB2ZWMzIHBvaW50T25QbGFuZSwgaW4gdmVjMyBwbGFuZU5vcm1hbCApIHtcblx0cmV0dXJuIGxpbmVEaXJlY3Rpb24gKiAoIGRvdCggcGxhbmVOb3JtYWwsIHBvaW50T25QbGFuZSAtIHBvaW50T25MaW5lICkgLyBkb3QoIHBsYW5lTm9ybWFsLCBsaW5lRGlyZWN0aW9uICkgKSArIHBvaW50T25MaW5lO1xufVxubWF0MyB0cmFuc3Bvc2VNYXQzKCBjb25zdCBpbiBtYXQzIG0gKSB7XG5cdG1hdDMgdG1wO1xuXHR0bXBbIDAgXSA9IHZlYzMoIG1bIDAgXS54LCBtWyAxIF0ueCwgbVsgMiBdLnggKTtcblx0dG1wWyAxIF0gPSB2ZWMzKCBtWyAwIF0ueSwgbVsgMSBdLnksIG1bIDIgXS55ICk7XG5cdHRtcFsgMiBdID0gdmVjMyggbVsgMCBdLnosIG1bIDEgXS56LCBtWyAyIF0ueiApO1xuXHRyZXR1cm4gdG1wO1xufVxuZmxvYXQgbGluZWFyVG9SZWxhdGl2ZUx1bWluYW5jZSggY29uc3QgaW4gdmVjMyBjb2xvciApIHtcblx0dmVjMyB3ZWlnaHRzID0gdmVjMyggMC4yMTI2LCAwLjcxNTIsIDAuMDcyMiApO1xuXHRyZXR1cm4gZG90KCB3ZWlnaHRzLCBjb2xvci5yZ2IgKTtcbn1cbmJvb2wgaXNQZXJzcGVjdGl2ZU1hdHJpeCggbWF0NCBtICkge1xuXHRyZXR1cm4gbVsgMiBdWyAzIF0gPT0gLSAxLjA7XG59XG52ZWMyIGVxdWlyZWN0VXYoIGluIHZlYzMgZGlyICkge1xuXHRmbG9hdCB1ID0gYXRhbiggZGlyLnosIGRpci54ICkgKiBSRUNJUFJPQ0FMX1BJMiArIDAuNTtcblx0ZmxvYXQgdiA9IGFzaW4oIGNsYW1wKCBkaXIueSwgLSAxLjAsIDEuMCApICkgKiBSRUNJUFJPQ0FMX1BJICsgMC41O1xuXHRyZXR1cm4gdmVjMiggdSwgdiApO1xufSIsY3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50OiIjaWZkZWYgRU5WTUFQX1RZUEVfQ1VCRV9VVlxuXHQjZGVmaW5lIGN1YmVVVl9tYXhNaXBMZXZlbCA4LjBcblx0I2RlZmluZSBjdWJlVVZfbWluTWlwTGV2ZWwgNC4wXG5cdCNkZWZpbmUgY3ViZVVWX21heFRpbGVTaXplIDI1Ni4wXG5cdCNkZWZpbmUgY3ViZVVWX21pblRpbGVTaXplIDE2LjBcblx0ZmxvYXQgZ2V0RmFjZSggdmVjMyBkaXJlY3Rpb24gKSB7XG5cdFx0dmVjMyBhYnNEaXJlY3Rpb24gPSBhYnMoIGRpcmVjdGlvbiApO1xuXHRcdGZsb2F0IGZhY2UgPSAtIDEuMDtcblx0XHRpZiAoIGFic0RpcmVjdGlvbi54ID4gYWJzRGlyZWN0aW9uLnogKSB7XG5cdFx0XHRpZiAoIGFic0RpcmVjdGlvbi54ID4gYWJzRGlyZWN0aW9uLnkgKVxuXHRcdFx0XHRmYWNlID0gZGlyZWN0aW9uLnggPiAwLjAgPyAwLjAgOiAzLjA7XG5cdFx0XHRlbHNlXG5cdFx0XHRcdGZhY2UgPSBkaXJlY3Rpb24ueSA+IDAuMCA/IDEuMCA6IDQuMDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKCBhYnNEaXJlY3Rpb24ueiA+IGFic0RpcmVjdGlvbi55IClcblx0XHRcdFx0ZmFjZSA9IGRpcmVjdGlvbi56ID4gMC4wID8gMi4wIDogNS4wO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRmYWNlID0gZGlyZWN0aW9uLnkgPiAwLjAgPyAxLjAgOiA0LjA7XG5cdFx0fVxuXHRcdHJldHVybiBmYWNlO1xuXHR9XG5cdHZlYzIgZ2V0VVYoIHZlYzMgZGlyZWN0aW9uLCBmbG9hdCBmYWNlICkge1xuXHRcdHZlYzIgdXY7XG5cdFx0aWYgKCBmYWNlID09IDAuMCApIHtcblx0XHRcdHV2ID0gdmVjMiggZGlyZWN0aW9uLnosIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi54ICk7XG5cdFx0fSBlbHNlIGlmICggZmFjZSA9PSAxLjAgKSB7XG5cdFx0XHR1diA9IHZlYzIoIC0gZGlyZWN0aW9uLngsIC0gZGlyZWN0aW9uLnogKSAvIGFicyggZGlyZWN0aW9uLnkgKTtcblx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDIuMCApIHtcblx0XHRcdHV2ID0gdmVjMiggLSBkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnogKTtcblx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDMuMCApIHtcblx0XHRcdHV2ID0gdmVjMiggLSBkaXJlY3Rpb24ueiwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnggKTtcblx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDQuMCApIHtcblx0XHRcdHV2ID0gdmVjMiggLSBkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnogKSAvIGFicyggZGlyZWN0aW9uLnkgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dXYgPSB2ZWMyKCBkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnogKTtcblx0XHR9XG5cdFx0cmV0dXJuIDAuNSAqICggdXYgKyAxLjAgKTtcblx0fVxuXHR2ZWMzIGJpbGluZWFyQ3ViZVVWKCBzYW1wbGVyMkQgZW52TWFwLCB2ZWMzIGRpcmVjdGlvbiwgZmxvYXQgbWlwSW50ICkge1xuXHRcdGZsb2F0IGZhY2UgPSBnZXRGYWNlKCBkaXJlY3Rpb24gKTtcblx0XHRmbG9hdCBmaWx0ZXJJbnQgPSBtYXgoIGN1YmVVVl9taW5NaXBMZXZlbCAtIG1pcEludCwgMC4wICk7XG5cdFx0bWlwSW50ID0gbWF4KCBtaXBJbnQsIGN1YmVVVl9taW5NaXBMZXZlbCApO1xuXHRcdGZsb2F0IGZhY2VTaXplID0gZXhwMiggbWlwSW50ICk7XG5cdFx0ZmxvYXQgdGV4ZWxTaXplID0gMS4wIC8gKCAzLjAgKiBjdWJlVVZfbWF4VGlsZVNpemUgKTtcblx0XHR2ZWMyIHV2ID0gZ2V0VVYoIGRpcmVjdGlvbiwgZmFjZSApICogKCBmYWNlU2l6ZSAtIDEuMCApO1xuXHRcdHZlYzIgZiA9IGZyYWN0KCB1diApO1xuXHRcdHV2ICs9IDAuNSAtIGY7XG5cdFx0aWYgKCBmYWNlID4gMi4wICkge1xuXHRcdFx0dXYueSArPSBmYWNlU2l6ZTtcblx0XHRcdGZhY2UgLT0gMy4wO1xuXHRcdH1cblx0XHR1di54ICs9IGZhY2UgKiBmYWNlU2l6ZTtcblx0XHRpZiAoIG1pcEludCA8IGN1YmVVVl9tYXhNaXBMZXZlbCApIHtcblx0XHRcdHV2LnkgKz0gMi4wICogY3ViZVVWX21heFRpbGVTaXplO1xuXHRcdH1cblx0XHR1di55ICs9IGZpbHRlckludCAqIDIuMCAqIGN1YmVVVl9taW5UaWxlU2l6ZTtcblx0XHR1di54ICs9IDMuMCAqIG1heCggMC4wLCBjdWJlVVZfbWF4VGlsZVNpemUgLSAyLjAgKiBmYWNlU2l6ZSApO1xuXHRcdHV2ICo9IHRleGVsU2l6ZTtcblx0XHR2ZWMzIHRsID0gZW52TWFwVGV4ZWxUb0xpbmVhciggdGV4dHVyZTJEKCBlbnZNYXAsIHV2ICkgKS5yZ2I7XG5cdFx0dXYueCArPSB0ZXhlbFNpemU7XG5cdFx0dmVjMyB0ciA9IGVudk1hcFRleGVsVG9MaW5lYXIoIHRleHR1cmUyRCggZW52TWFwLCB1diApICkucmdiO1xuXHRcdHV2LnkgKz0gdGV4ZWxTaXplO1xuXHRcdHZlYzMgYnIgPSBlbnZNYXBUZXhlbFRvTGluZWFyKCB0ZXh0dXJlMkQoIGVudk1hcCwgdXYgKSApLnJnYjtcblx0XHR1di54IC09IHRleGVsU2l6ZTtcblx0XHR2ZWMzIGJsID0gZW52TWFwVGV4ZWxUb0xpbmVhciggdGV4dHVyZTJEKCBlbnZNYXAsIHV2ICkgKS5yZ2I7XG5cdFx0dmVjMyB0bSA9IG1peCggdGwsIHRyLCBmLnggKTtcblx0XHR2ZWMzIGJtID0gbWl4KCBibCwgYnIsIGYueCApO1xuXHRcdHJldHVybiBtaXgoIHRtLCBibSwgZi55ICk7XG5cdH1cblx0I2RlZmluZSByMCAxLjBcblx0I2RlZmluZSB2MCAwLjMzOVxuXHQjZGVmaW5lIG0wIC0gMi4wXG5cdCNkZWZpbmUgcjEgMC44XG5cdCNkZWZpbmUgdjEgMC4yNzZcblx0I2RlZmluZSBtMSAtIDEuMFxuXHQjZGVmaW5lIHI0IDAuNFxuXHQjZGVmaW5lIHY0IDAuMDQ2XG5cdCNkZWZpbmUgbTQgMi4wXG5cdCNkZWZpbmUgcjUgMC4zMDVcblx0I2RlZmluZSB2NSAwLjAxNlxuXHQjZGVmaW5lIG01IDMuMFxuXHQjZGVmaW5lIHI2IDAuMjFcblx0I2RlZmluZSB2NiAwLjAwMzhcblx0I2RlZmluZSBtNiA0LjBcblx0ZmxvYXQgcm91Z2huZXNzVG9NaXAoIGZsb2F0IHJvdWdobmVzcyApIHtcblx0XHRmbG9hdCBtaXAgPSAwLjA7XG5cdFx0aWYgKCByb3VnaG5lc3MgPj0gcjEgKSB7XG5cdFx0XHRtaXAgPSAoIHIwIC0gcm91Z2huZXNzICkgKiAoIG0xIC0gbTAgKSAvICggcjAgLSByMSApICsgbTA7XG5cdFx0fSBlbHNlIGlmICggcm91Z2huZXNzID49IHI0ICkge1xuXHRcdFx0bWlwID0gKCByMSAtIHJvdWdobmVzcyApICogKCBtNCAtIG0xICkgLyAoIHIxIC0gcjQgKSArIG0xO1xuXHRcdH0gZWxzZSBpZiAoIHJvdWdobmVzcyA+PSByNSApIHtcblx0XHRcdG1pcCA9ICggcjQgLSByb3VnaG5lc3MgKSAqICggbTUgLSBtNCApIC8gKCByNCAtIHI1ICkgKyBtNDtcblx0XHR9IGVsc2UgaWYgKCByb3VnaG5lc3MgPj0gcjYgKSB7XG5cdFx0XHRtaXAgPSAoIHI1IC0gcm91Z2huZXNzICkgKiAoIG02IC0gbTUgKSAvICggcjUgLSByNiApICsgbTU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG1pcCA9IC0gMi4wICogbG9nMiggMS4xNiAqIHJvdWdobmVzcyApO1x0XHR9XG5cdFx0cmV0dXJuIG1pcDtcblx0fVxuXHR2ZWM0IHRleHR1cmVDdWJlVVYoIHNhbXBsZXIyRCBlbnZNYXAsIHZlYzMgc2FtcGxlRGlyLCBmbG9hdCByb3VnaG5lc3MgKSB7XG5cdFx0ZmxvYXQgbWlwID0gY2xhbXAoIHJvdWdobmVzc1RvTWlwKCByb3VnaG5lc3MgKSwgbTAsIGN1YmVVVl9tYXhNaXBMZXZlbCApO1xuXHRcdGZsb2F0IG1pcEYgPSBmcmFjdCggbWlwICk7XG5cdFx0ZmxvYXQgbWlwSW50ID0gZmxvb3IoIG1pcCApO1xuXHRcdHZlYzMgY29sb3IwID0gYmlsaW5lYXJDdWJlVVYoIGVudk1hcCwgc2FtcGxlRGlyLCBtaXBJbnQgKTtcblx0XHRpZiAoIG1pcEYgPT0gMC4wICkge1xuXHRcdFx0cmV0dXJuIHZlYzQoIGNvbG9yMCwgMS4wICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZlYzMgY29sb3IxID0gYmlsaW5lYXJDdWJlVVYoIGVudk1hcCwgc2FtcGxlRGlyLCBtaXBJbnQgKyAxLjAgKTtcblx0XHRcdHJldHVybiB2ZWM0KCBtaXgoIGNvbG9yMCwgY29sb3IxLCBtaXBGICksIDEuMCApO1xuXHRcdH1cblx0fVxuI2VuZGlmIixkZWZhdWx0bm9ybWFsX3ZlcnRleDoidmVjMyB0cmFuc2Zvcm1lZE5vcm1hbCA9IG9iamVjdE5vcm1hbDtcbiNpZmRlZiBVU0VfSU5TVEFOQ0lOR1xuXHRtYXQzIG0gPSBtYXQzKCBpbnN0YW5jZU1hdHJpeCApO1xuXHR0cmFuc2Zvcm1lZE5vcm1hbCAvPSB2ZWMzKCBkb3QoIG1bIDAgXSwgbVsgMCBdICksIGRvdCggbVsgMSBdLCBtWyAxIF0gKSwgZG90KCBtWyAyIF0sIG1bIDIgXSApICk7XG5cdHRyYW5zZm9ybWVkTm9ybWFsID0gbSAqIHRyYW5zZm9ybWVkTm9ybWFsO1xuI2VuZGlmXG50cmFuc2Zvcm1lZE5vcm1hbCA9IG5vcm1hbE1hdHJpeCAqIHRyYW5zZm9ybWVkTm9ybWFsO1xuI2lmZGVmIEZMSVBfU0lERURcblx0dHJhbnNmb3JtZWROb3JtYWwgPSAtIHRyYW5zZm9ybWVkTm9ybWFsO1xuI2VuZGlmXG4jaWZkZWYgVVNFX1RBTkdFTlRcblx0dmVjMyB0cmFuc2Zvcm1lZFRhbmdlbnQgPSAoIG1vZGVsVmlld01hdHJpeCAqIHZlYzQoIG9iamVjdFRhbmdlbnQsIDAuMCApICkueHl6O1xuXHQjaWZkZWYgRkxJUF9TSURFRFxuXHRcdHRyYW5zZm9ybWVkVGFuZ2VudCA9IC0gdHJhbnNmb3JtZWRUYW5nZW50O1xuXHQjZW5kaWZcbiNlbmRpZiIsZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX0RJU1BMQUNFTUVOVE1BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBkaXNwbGFjZW1lbnRNYXA7XG5cdHVuaWZvcm0gZmxvYXQgZGlzcGxhY2VtZW50U2NhbGU7XG5cdHVuaWZvcm0gZmxvYXQgZGlzcGxhY2VtZW50QmlhcztcbiNlbmRpZiIsZGlzcGxhY2VtZW50bWFwX3ZlcnRleDoiI2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVBcblx0dHJhbnNmb3JtZWQgKz0gbm9ybWFsaXplKCBvYmplY3ROb3JtYWwgKSAqICggdGV4dHVyZTJEKCBkaXNwbGFjZW1lbnRNYXAsIHZVdiApLnggKiBkaXNwbGFjZW1lbnRTY2FsZSArIGRpc3BsYWNlbWVudEJpYXMgKTtcbiNlbmRpZiIsZW1pc3NpdmVtYXBfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfRU1JU1NJVkVNQVBcblx0dmVjNCBlbWlzc2l2ZUNvbG9yID0gdGV4dHVyZTJEKCBlbWlzc2l2ZU1hcCwgdlV2ICk7XG5cdGVtaXNzaXZlQ29sb3IucmdiID0gZW1pc3NpdmVNYXBUZXhlbFRvTGluZWFyKCBlbWlzc2l2ZUNvbG9yICkucmdiO1xuXHR0b3RhbEVtaXNzaXZlUmFkaWFuY2UgKj0gZW1pc3NpdmVDb2xvci5yZ2I7XG4jZW5kaWYiLGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfRU1JU1NJVkVNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgZW1pc3NpdmVNYXA7XG4jZW5kaWYiLGVuY29kaW5nc19mcmFnbWVudDoiZ2xfRnJhZ0NvbG9yID0gbGluZWFyVG9PdXRwdXRUZXhlbCggZ2xfRnJhZ0NvbG9yICk7IixlbmNvZGluZ3NfcGFyc19mcmFnbWVudDoiXG52ZWM0IExpbmVhclRvTGluZWFyKCBpbiB2ZWM0IHZhbHVlICkge1xuXHRyZXR1cm4gdmFsdWU7XG59XG52ZWM0IEdhbW1hVG9MaW5lYXIoIGluIHZlYzQgdmFsdWUsIGluIGZsb2F0IGdhbW1hRmFjdG9yICkge1xuXHRyZXR1cm4gdmVjNCggcG93KCB2YWx1ZS5yZ2IsIHZlYzMoIGdhbW1hRmFjdG9yICkgKSwgdmFsdWUuYSApO1xufVxudmVjNCBMaW5lYXJUb0dhbW1hKCBpbiB2ZWM0IHZhbHVlLCBpbiBmbG9hdCBnYW1tYUZhY3RvciApIHtcblx0cmV0dXJuIHZlYzQoIHBvdyggdmFsdWUucmdiLCB2ZWMzKCAxLjAgLyBnYW1tYUZhY3RvciApICksIHZhbHVlLmEgKTtcbn1cbnZlYzQgc1JHQlRvTGluZWFyKCBpbiB2ZWM0IHZhbHVlICkge1xuXHRyZXR1cm4gdmVjNCggbWl4KCBwb3coIHZhbHVlLnJnYiAqIDAuOTQ3ODY3Mjk4NiArIHZlYzMoIDAuMDUyMTMyNzAxNCApLCB2ZWMzKCAyLjQgKSApLCB2YWx1ZS5yZ2IgKiAwLjA3NzM5OTM4MDgsIHZlYzMoIGxlc3NUaGFuRXF1YWwoIHZhbHVlLnJnYiwgdmVjMyggMC4wNDA0NSApICkgKSApLCB2YWx1ZS5hICk7XG59XG52ZWM0IExpbmVhclRvc1JHQiggaW4gdmVjNCB2YWx1ZSApIHtcblx0cmV0dXJuIHZlYzQoIG1peCggcG93KCB2YWx1ZS5yZ2IsIHZlYzMoIDAuNDE2NjYgKSApICogMS4wNTUgLSB2ZWMzKCAwLjA1NSApLCB2YWx1ZS5yZ2IgKiAxMi45MiwgdmVjMyggbGVzc1RoYW5FcXVhbCggdmFsdWUucmdiLCB2ZWMzKCAwLjAwMzEzMDggKSApICkgKSwgdmFsdWUuYSApO1xufVxudmVjNCBSR0JFVG9MaW5lYXIoIGluIHZlYzQgdmFsdWUgKSB7XG5cdHJldHVybiB2ZWM0KCB2YWx1ZS5yZ2IgKiBleHAyKCB2YWx1ZS5hICogMjU1LjAgLSAxMjguMCApLCAxLjAgKTtcbn1cbnZlYzQgTGluZWFyVG9SR0JFKCBpbiB2ZWM0IHZhbHVlICkge1xuXHRmbG9hdCBtYXhDb21wb25lbnQgPSBtYXgoIG1heCggdmFsdWUuciwgdmFsdWUuZyApLCB2YWx1ZS5iICk7XG5cdGZsb2F0IGZFeHAgPSBjbGFtcCggY2VpbCggbG9nMiggbWF4Q29tcG9uZW50ICkgKSwgLTEyOC4wLCAxMjcuMCApO1xuXHRyZXR1cm4gdmVjNCggdmFsdWUucmdiIC8gZXhwMiggZkV4cCApLCAoIGZFeHAgKyAxMjguMCApIC8gMjU1LjAgKTtcbn1cbnZlYzQgUkdCTVRvTGluZWFyKCBpbiB2ZWM0IHZhbHVlLCBpbiBmbG9hdCBtYXhSYW5nZSApIHtcblx0cmV0dXJuIHZlYzQoIHZhbHVlLnJnYiAqIHZhbHVlLmEgKiBtYXhSYW5nZSwgMS4wICk7XG59XG52ZWM0IExpbmVhclRvUkdCTSggaW4gdmVjNCB2YWx1ZSwgaW4gZmxvYXQgbWF4UmFuZ2UgKSB7XG5cdGZsb2F0IG1heFJHQiA9IG1heCggdmFsdWUuciwgbWF4KCB2YWx1ZS5nLCB2YWx1ZS5iICkgKTtcblx0ZmxvYXQgTSA9IGNsYW1wKCBtYXhSR0IgLyBtYXhSYW5nZSwgMC4wLCAxLjAgKTtcblx0TSA9IGNlaWwoIE0gKiAyNTUuMCApIC8gMjU1LjA7XG5cdHJldHVybiB2ZWM0KCB2YWx1ZS5yZ2IgLyAoIE0gKiBtYXhSYW5nZSApLCBNICk7XG59XG52ZWM0IFJHQkRUb0xpbmVhciggaW4gdmVjNCB2YWx1ZSwgaW4gZmxvYXQgbWF4UmFuZ2UgKSB7XG5cdHJldHVybiB2ZWM0KCB2YWx1ZS5yZ2IgKiAoICggbWF4UmFuZ2UgLyAyNTUuMCApIC8gdmFsdWUuYSApLCAxLjAgKTtcbn1cbnZlYzQgTGluZWFyVG9SR0JEKCBpbiB2ZWM0IHZhbHVlLCBpbiBmbG9hdCBtYXhSYW5nZSApIHtcblx0ZmxvYXQgbWF4UkdCID0gbWF4KCB2YWx1ZS5yLCBtYXgoIHZhbHVlLmcsIHZhbHVlLmIgKSApO1xuXHRmbG9hdCBEID0gbWF4KCBtYXhSYW5nZSAvIG1heFJHQiwgMS4wICk7XG5cdEQgPSBjbGFtcCggZmxvb3IoIEQgKSAvIDI1NS4wLCAwLjAsIDEuMCApO1xuXHRyZXR1cm4gdmVjNCggdmFsdWUucmdiICogKCBEICogKCAyNTUuMCAvIG1heFJhbmdlICkgKSwgRCApO1xufVxuY29uc3QgbWF0MyBjTG9nTHV2TSA9IG1hdDMoIDAuMjIwOSwgMC4zMzkwLCAwLjQxODQsIDAuMTEzOCwgMC42NzgwLCAwLjczMTksIDAuMDEwMiwgMC4xMTMwLCAwLjI5NjkgKTtcbnZlYzQgTGluZWFyVG9Mb2dMdXYoIGluIHZlYzQgdmFsdWUgKSB7XG5cdHZlYzMgWHBfWV9YWVpwID0gY0xvZ0x1dk0gKiB2YWx1ZS5yZ2I7XG5cdFhwX1lfWFlacCA9IG1heCggWHBfWV9YWVpwLCB2ZWMzKCAxZS02LCAxZS02LCAxZS02ICkgKTtcblx0dmVjNCB2UmVzdWx0O1xuXHR2UmVzdWx0Lnh5ID0gWHBfWV9YWVpwLnh5IC8gWHBfWV9YWVpwLno7XG5cdGZsb2F0IExlID0gMi4wICogbG9nMihYcF9ZX1hZWnAueSkgKyAxMjcuMDtcblx0dlJlc3VsdC53ID0gZnJhY3QoIExlICk7XG5cdHZSZXN1bHQueiA9ICggTGUgLSAoIGZsb29yKCB2UmVzdWx0LncgKiAyNTUuMCApICkgLyAyNTUuMCApIC8gMjU1LjA7XG5cdHJldHVybiB2UmVzdWx0O1xufVxuY29uc3QgbWF0MyBjTG9nTHV2SW52ZXJzZU0gPSBtYXQzKCA2LjAwMTQsIC0yLjcwMDgsIC0xLjc5OTYsIC0xLjMzMjAsIDMuMTAyOSwgLTUuNzcyMSwgMC4zMDA4LCAtMS4wODgyLCA1LjYyNjggKTtcbnZlYzQgTG9nTHV2VG9MaW5lYXIoIGluIHZlYzQgdmFsdWUgKSB7XG5cdGZsb2F0IExlID0gdmFsdWUueiAqIDI1NS4wICsgdmFsdWUudztcblx0dmVjMyBYcF9ZX1hZWnA7XG5cdFhwX1lfWFlacC55ID0gZXhwMiggKCBMZSAtIDEyNy4wICkgLyAyLjAgKTtcblx0WHBfWV9YWVpwLnogPSBYcF9ZX1hZWnAueSAvIHZhbHVlLnk7XG5cdFhwX1lfWFlacC54ID0gdmFsdWUueCAqIFhwX1lfWFlacC56O1xuXHR2ZWMzIHZSR0IgPSBjTG9nTHV2SW52ZXJzZU0gKiBYcF9ZX1hZWnAucmdiO1xuXHRyZXR1cm4gdmVjNCggbWF4KCB2UkdCLCAwLjAgKSwgMS4wICk7XG59IixlbnZtYXBfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfRU5WTUFQXG5cdCNpZmRlZiBFTlZfV09STERQT1Ncblx0XHR2ZWMzIGNhbWVyYVRvRnJhZztcblx0XHRpZiAoIGlzT3J0aG9ncmFwaGljICkge1xuXHRcdFx0Y2FtZXJhVG9GcmFnID0gbm9ybWFsaXplKCB2ZWMzKCAtIHZpZXdNYXRyaXhbIDAgXVsgMiBdLCAtIHZpZXdNYXRyaXhbIDEgXVsgMiBdLCAtIHZpZXdNYXRyaXhbIDIgXVsgMiBdICkgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y2FtZXJhVG9GcmFnID0gbm9ybWFsaXplKCB2V29ybGRQb3NpdGlvbiAtIGNhbWVyYVBvc2l0aW9uICk7XG5cdFx0fVxuXHRcdHZlYzMgd29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBub3JtYWwsIHZpZXdNYXRyaXggKTtcblx0XHQjaWZkZWYgRU5WTUFQX01PREVfUkVGTEVDVElPTlxuXHRcdFx0dmVjMyByZWZsZWN0VmVjID0gcmVmbGVjdCggY2FtZXJhVG9GcmFnLCB3b3JsZE5vcm1hbCApO1xuXHRcdCNlbHNlXG5cdFx0XHR2ZWMzIHJlZmxlY3RWZWMgPSByZWZyYWN0KCBjYW1lcmFUb0ZyYWcsIHdvcmxkTm9ybWFsLCByZWZyYWN0aW9uUmF0aW8gKTtcblx0XHQjZW5kaWZcblx0I2Vsc2Vcblx0XHR2ZWMzIHJlZmxlY3RWZWMgPSB2UmVmbGVjdDtcblx0I2VuZGlmXG5cdCNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFXG5cdFx0dmVjNCBlbnZDb2xvciA9IHRleHR1cmVDdWJlKCBlbnZNYXAsIHZlYzMoIGZsaXBFbnZNYXAgKiByZWZsZWN0VmVjLngsIHJlZmxlY3RWZWMueXogKSApO1xuXHQjZWxpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWIClcblx0XHR2ZWM0IGVudkNvbG9yID0gdGV4dHVyZUN1YmVVViggZW52TWFwLCByZWZsZWN0VmVjLCAwLjAgKTtcblx0I2Vsc2Vcblx0XHR2ZWM0IGVudkNvbG9yID0gdmVjNCggMC4wICk7XG5cdCNlbmRpZlxuXHQjaWZuZGVmIEVOVk1BUF9UWVBFX0NVQkVfVVZcblx0XHRlbnZDb2xvciA9IGVudk1hcFRleGVsVG9MaW5lYXIoIGVudkNvbG9yICk7XG5cdCNlbmRpZlxuXHQjaWZkZWYgRU5WTUFQX0JMRU5ESU5HX01VTFRJUExZXG5cdFx0b3V0Z29pbmdMaWdodCA9IG1peCggb3V0Z29pbmdMaWdodCwgb3V0Z29pbmdMaWdodCAqIGVudkNvbG9yLnh5eiwgc3BlY3VsYXJTdHJlbmd0aCAqIHJlZmxlY3Rpdml0eSApO1xuXHQjZWxpZiBkZWZpbmVkKCBFTlZNQVBfQkxFTkRJTkdfTUlYIClcblx0XHRvdXRnb2luZ0xpZ2h0ID0gbWl4KCBvdXRnb2luZ0xpZ2h0LCBlbnZDb2xvci54eXosIHNwZWN1bGFyU3RyZW5ndGggKiByZWZsZWN0aXZpdHkgKTtcblx0I2VsaWYgZGVmaW5lZCggRU5WTUFQX0JMRU5ESU5HX0FERCApXG5cdFx0b3V0Z29pbmdMaWdodCArPSBlbnZDb2xvci54eXogKiBzcGVjdWxhclN0cmVuZ3RoICogcmVmbGVjdGl2aXR5O1xuXHQjZW5kaWZcbiNlbmRpZiIsZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0VOVk1BUFxuXHR1bmlmb3JtIGZsb2F0IGVudk1hcEludGVuc2l0eTtcblx0dW5pZm9ybSBmbG9hdCBmbGlwRW52TWFwO1xuXHR1bmlmb3JtIGludCBtYXhNaXBMZXZlbDtcblx0I2lmZGVmIEVOVk1BUF9UWVBFX0NVQkVcblx0XHR1bmlmb3JtIHNhbXBsZXJDdWJlIGVudk1hcDtcblx0I2Vsc2Vcblx0XHR1bmlmb3JtIHNhbXBsZXIyRCBlbnZNYXA7XG5cdCNlbmRpZlxuXHRcbiNlbmRpZiIsZW52bWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfRU5WTUFQXG5cdHVuaWZvcm0gZmxvYXQgcmVmbGVjdGl2aXR5O1xuXHQjaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCggUEhPTkcgKVxuXHRcdCNkZWZpbmUgRU5WX1dPUkxEUE9TXG5cdCNlbmRpZlxuXHQjaWZkZWYgRU5WX1dPUkxEUE9TXG5cdFx0dmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xuXHRcdHVuaWZvcm0gZmxvYXQgcmVmcmFjdGlvblJhdGlvO1xuXHQjZWxzZVxuXHRcdHZhcnlpbmcgdmVjMyB2UmVmbGVjdDtcblx0I2VuZGlmXG4jZW5kaWYiLGVudm1hcF9wYXJzX3ZlcnRleDoiI2lmZGVmIFVTRV9FTlZNQVBcblx0I2lmIGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVVNFX05PUk1BTE1BUCApIHx8ZGVmaW5lZCggUEhPTkcgKVxuXHRcdCNkZWZpbmUgRU5WX1dPUkxEUE9TXG5cdCNlbmRpZlxuXHQjaWZkZWYgRU5WX1dPUkxEUE9TXG5cdFx0XG5cdFx0dmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xuXHQjZWxzZVxuXHRcdHZhcnlpbmcgdmVjMyB2UmVmbGVjdDtcblx0XHR1bmlmb3JtIGZsb2F0IHJlZnJhY3Rpb25SYXRpbztcblx0I2VuZGlmXG4jZW5kaWYiLGVudm1hcF9waHlzaWNhbF9wYXJzX2ZyYWdtZW50OiIjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApXG5cdCNpZmRlZiBFTlZNQVBfTU9ERV9SRUZSQUNUSU9OXG5cdFx0dW5pZm9ybSBmbG9hdCByZWZyYWN0aW9uUmF0aW87XG5cdCNlbmRpZlxuXHR2ZWMzIGdldExpZ2h0UHJvYmVJbmRpcmVjdElycmFkaWFuY2UoIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIGludCBtYXhNSVBMZXZlbCApIHtcblx0XHR2ZWMzIHdvcmxkTm9ybWFsID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggZ2VvbWV0cnkubm9ybWFsLCB2aWV3TWF0cml4ICk7XG5cdFx0I2lmZGVmIEVOVk1BUF9UWVBFX0NVQkVcblx0XHRcdHZlYzMgcXVlcnlWZWMgPSB2ZWMzKCBmbGlwRW52TWFwICogd29ybGROb3JtYWwueCwgd29ybGROb3JtYWwueXogKTtcblx0XHRcdCNpZmRlZiBURVhUVVJFX0xPRF9FWFRcblx0XHRcdFx0dmVjNCBlbnZNYXBDb2xvciA9IHRleHR1cmVDdWJlTG9kRVhUKCBlbnZNYXAsIHF1ZXJ5VmVjLCBmbG9hdCggbWF4TUlQTGV2ZWwgKSApO1xuXHRcdFx0I2Vsc2Vcblx0XHRcdFx0dmVjNCBlbnZNYXBDb2xvciA9IHRleHR1cmVDdWJlKCBlbnZNYXAsIHF1ZXJ5VmVjLCBmbG9hdCggbWF4TUlQTGV2ZWwgKSApO1xuXHRcdFx0I2VuZGlmXG5cdFx0XHRlbnZNYXBDb2xvci5yZ2IgPSBlbnZNYXBUZXhlbFRvTGluZWFyKCBlbnZNYXBDb2xvciApLnJnYjtcblx0XHQjZWxpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWIClcblx0XHRcdHZlYzQgZW52TWFwQ29sb3IgPSB0ZXh0dXJlQ3ViZVVWKCBlbnZNYXAsIHdvcmxkTm9ybWFsLCAxLjAgKTtcblx0XHQjZWxzZVxuXHRcdFx0dmVjNCBlbnZNYXBDb2xvciA9IHZlYzQoIDAuMCApO1xuXHRcdCNlbmRpZlxuXHRcdHJldHVybiBQSSAqIGVudk1hcENvbG9yLnJnYiAqIGVudk1hcEludGVuc2l0eTtcblx0fVxuXHRmbG9hdCBnZXRTcGVjdWxhck1JUExldmVsKCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGNvbnN0IGluIGludCBtYXhNSVBMZXZlbCApIHtcblx0XHRmbG9hdCBtYXhNSVBMZXZlbFNjYWxhciA9IGZsb2F0KCBtYXhNSVBMZXZlbCApO1xuXHRcdGZsb2F0IHNpZ21hID0gUEkgKiByb3VnaG5lc3MgKiByb3VnaG5lc3MgLyAoIDEuMCArIHJvdWdobmVzcyApO1xuXHRcdGZsb2F0IGRlc2lyZWRNSVBMZXZlbCA9IG1heE1JUExldmVsU2NhbGFyICsgbG9nMiggc2lnbWEgKTtcblx0XHRyZXR1cm4gY2xhbXAoIGRlc2lyZWRNSVBMZXZlbCwgMC4wLCBtYXhNSVBMZXZlbFNjYWxhciApO1xuXHR9XG5cdHZlYzMgZ2V0TGlnaHRQcm9iZUluZGlyZWN0UmFkaWFuY2UoIGNvbnN0IGluIHZlYzMgdmlld0RpciwgY29uc3QgaW4gdmVjMyBub3JtYWwsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcywgY29uc3QgaW4gaW50IG1heE1JUExldmVsICkge1xuXHRcdCNpZmRlZiBFTlZNQVBfTU9ERV9SRUZMRUNUSU9OXG5cdFx0XHR2ZWMzIHJlZmxlY3RWZWMgPSByZWZsZWN0KCAtdmlld0Rpciwgbm9ybWFsICk7XG5cdFx0XHRyZWZsZWN0VmVjID0gbm9ybWFsaXplKCBtaXgoIHJlZmxlY3RWZWMsIG5vcm1hbCwgcm91Z2huZXNzICogcm91Z2huZXNzKSApO1xuXHRcdCNlbHNlXG5cdFx0XHR2ZWMzIHJlZmxlY3RWZWMgPSByZWZyYWN0KCAtdmlld0Rpciwgbm9ybWFsLCByZWZyYWN0aW9uUmF0aW8gKTtcblx0XHQjZW5kaWZcblx0XHRyZWZsZWN0VmVjID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggcmVmbGVjdFZlYywgdmlld01hdHJpeCApO1xuXHRcdGZsb2F0IHNwZWN1bGFyTUlQTGV2ZWwgPSBnZXRTcGVjdWxhck1JUExldmVsKCByb3VnaG5lc3MsIG1heE1JUExldmVsICk7XG5cdFx0I2lmZGVmIEVOVk1BUF9UWVBFX0NVQkVcblx0XHRcdHZlYzMgcXVlcnlSZWZsZWN0VmVjID0gdmVjMyggZmxpcEVudk1hcCAqIHJlZmxlY3RWZWMueCwgcmVmbGVjdFZlYy55eiApO1xuXHRcdFx0I2lmZGVmIFRFWFRVUkVfTE9EX0VYVFxuXHRcdFx0XHR2ZWM0IGVudk1hcENvbG9yID0gdGV4dHVyZUN1YmVMb2RFWFQoIGVudk1hcCwgcXVlcnlSZWZsZWN0VmVjLCBzcGVjdWxhck1JUExldmVsICk7XG5cdFx0XHQjZWxzZVxuXHRcdFx0XHR2ZWM0IGVudk1hcENvbG9yID0gdGV4dHVyZUN1YmUoIGVudk1hcCwgcXVlcnlSZWZsZWN0VmVjLCBzcGVjdWxhck1JUExldmVsICk7XG5cdFx0XHQjZW5kaWZcblx0XHRcdGVudk1hcENvbG9yLnJnYiA9IGVudk1hcFRleGVsVG9MaW5lYXIoIGVudk1hcENvbG9yICkucmdiO1xuXHRcdCNlbGlmIGRlZmluZWQoIEVOVk1BUF9UWVBFX0NVQkVfVVYgKVxuXHRcdFx0dmVjNCBlbnZNYXBDb2xvciA9IHRleHR1cmVDdWJlVVYoIGVudk1hcCwgcmVmbGVjdFZlYywgcm91Z2huZXNzICk7XG5cdFx0I2VuZGlmXG5cdFx0cmV0dXJuIGVudk1hcENvbG9yLnJnYiAqIGVudk1hcEludGVuc2l0eTtcblx0fVxuI2VuZGlmIixlbnZtYXBfdmVydGV4OiIjaWZkZWYgVVNFX0VOVk1BUFxuXHQjaWZkZWYgRU5WX1dPUkxEUE9TXG5cdFx0dldvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uLnh5ejtcblx0I2Vsc2Vcblx0XHR2ZWMzIGNhbWVyYVRvVmVydGV4O1xuXHRcdGlmICggaXNPcnRob2dyYXBoaWMgKSB7XG5cdFx0XHRjYW1lcmFUb1ZlcnRleCA9IG5vcm1hbGl6ZSggdmVjMyggLSB2aWV3TWF0cml4WyAwIF1bIDIgXSwgLSB2aWV3TWF0cml4WyAxIF1bIDIgXSwgLSB2aWV3TWF0cml4WyAyIF1bIDIgXSApICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNhbWVyYVRvVmVydGV4ID0gbm9ybWFsaXplKCB3b3JsZFBvc2l0aW9uLnh5eiAtIGNhbWVyYVBvc2l0aW9uICk7XG5cdFx0fVxuXHRcdHZlYzMgd29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCB0cmFuc2Zvcm1lZE5vcm1hbCwgdmlld01hdHJpeCApO1xuXHRcdCNpZmRlZiBFTlZNQVBfTU9ERV9SRUZMRUNUSU9OXG5cdFx0XHR2UmVmbGVjdCA9IHJlZmxlY3QoIGNhbWVyYVRvVmVydGV4LCB3b3JsZE5vcm1hbCApO1xuXHRcdCNlbHNlXG5cdFx0XHR2UmVmbGVjdCA9IHJlZnJhY3QoIGNhbWVyYVRvVmVydGV4LCB3b3JsZE5vcm1hbCwgcmVmcmFjdGlvblJhdGlvICk7XG5cdFx0I2VuZGlmXG5cdCNlbmRpZlxuI2VuZGlmIixmb2dfdmVydGV4OiIjaWZkZWYgVVNFX0ZPR1xuXHRmb2dEZXB0aCA9IC0gbXZQb3NpdGlvbi56O1xuI2VuZGlmIixmb2dfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfRk9HXG5cdHZhcnlpbmcgZmxvYXQgZm9nRGVwdGg7XG4jZW5kaWYiLGZvZ19mcmFnbWVudDoiI2lmZGVmIFVTRV9GT0dcblx0I2lmZGVmIEZPR19FWFAyXG5cdFx0ZmxvYXQgZm9nRmFjdG9yID0gMS4wIC0gZXhwKCAtIGZvZ0RlbnNpdHkgKiBmb2dEZW5zaXR5ICogZm9nRGVwdGggKiBmb2dEZXB0aCApO1xuXHQjZWxzZVxuXHRcdGZsb2F0IGZvZ0ZhY3RvciA9IHNtb290aHN0ZXAoIGZvZ05lYXIsIGZvZ0ZhciwgZm9nRGVwdGggKTtcblx0I2VuZGlmXG5cdGdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoIGdsX0ZyYWdDb2xvci5yZ2IsIGZvZ0NvbG9yLCBmb2dGYWN0b3IgKTtcbiNlbmRpZiIsZm9nX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfRk9HXG5cdHVuaWZvcm0gdmVjMyBmb2dDb2xvcjtcblx0dmFyeWluZyBmbG9hdCBmb2dEZXB0aDtcblx0I2lmZGVmIEZPR19FWFAyXG5cdFx0dW5pZm9ybSBmbG9hdCBmb2dEZW5zaXR5O1xuXHQjZWxzZVxuXHRcdHVuaWZvcm0gZmxvYXQgZm9nTmVhcjtcblx0XHR1bmlmb3JtIGZsb2F0IGZvZ0Zhcjtcblx0I2VuZGlmXG4jZW5kaWYiLGdyYWRpZW50bWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfR1JBRElFTlRNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgZ3JhZGllbnRNYXA7XG4jZW5kaWZcbnZlYzMgZ2V0R3JhZGllbnRJcnJhZGlhbmNlKCB2ZWMzIG5vcm1hbCwgdmVjMyBsaWdodERpcmVjdGlvbiApIHtcblx0ZmxvYXQgZG90TkwgPSBkb3QoIG5vcm1hbCwgbGlnaHREaXJlY3Rpb24gKTtcblx0dmVjMiBjb29yZCA9IHZlYzIoIGRvdE5MICogMC41ICsgMC41LCAwLjAgKTtcblx0I2lmZGVmIFVTRV9HUkFESUVOVE1BUFxuXHRcdHJldHVybiB0ZXh0dXJlMkQoIGdyYWRpZW50TWFwLCBjb29yZCApLnJnYjtcblx0I2Vsc2Vcblx0XHRyZXR1cm4gKCBjb29yZC54IDwgMC43ICkgPyB2ZWMzKCAwLjcgKSA6IHZlYzMoIDEuMCApO1xuXHQjZW5kaWZcbn0iLGxpZ2h0bWFwX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0xJR0hUTUFQXG5cdHZlYzQgbGlnaHRNYXBUZXhlbD0gdGV4dHVyZTJEKCBsaWdodE1hcCwgdlV2MiApO1xuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gUEkgKiBsaWdodE1hcFRleGVsVG9MaW5lYXIoIGxpZ2h0TWFwVGV4ZWwgKS5yZ2IgKiBsaWdodE1hcEludGVuc2l0eTtcbiNlbmRpZiIsbGlnaHRtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9MSUdIVE1BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBsaWdodE1hcDtcblx0dW5pZm9ybSBmbG9hdCBsaWdodE1hcEludGVuc2l0eTtcbiNlbmRpZiIsbGlnaHRzX2xhbWJlcnRfdmVydGV4OiJ2ZWMzIGRpZmZ1c2UgPSB2ZWMzKCAxLjAgKTtcbkdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnk7XG5nZW9tZXRyeS5wb3NpdGlvbiA9IG12UG9zaXRpb24ueHl6O1xuZ2VvbWV0cnkubm9ybWFsID0gbm9ybWFsaXplKCB0cmFuc2Zvcm1lZE5vcm1hbCApO1xuZ2VvbWV0cnkudmlld0RpciA9ICggaXNPcnRob2dyYXBoaWMgKSA/IHZlYzMoIDAsIDAsIDEgKSA6IG5vcm1hbGl6ZSggLW12UG9zaXRpb24ueHl6ICk7XG5HZW9tZXRyaWNDb250ZXh0IGJhY2tHZW9tZXRyeTtcbmJhY2tHZW9tZXRyeS5wb3NpdGlvbiA9IGdlb21ldHJ5LnBvc2l0aW9uO1xuYmFja0dlb21ldHJ5Lm5vcm1hbCA9IC1nZW9tZXRyeS5ub3JtYWw7XG5iYWNrR2VvbWV0cnkudmlld0RpciA9IGdlb21ldHJ5LnZpZXdEaXI7XG52TGlnaHRGcm9udCA9IHZlYzMoIDAuMCApO1xudkluZGlyZWN0RnJvbnQgPSB2ZWMzKCAwLjAgKTtcbiNpZmRlZiBET1VCTEVfU0lERURcblx0dkxpZ2h0QmFjayA9IHZlYzMoIDAuMCApO1xuXHR2SW5kaXJlY3RCYWNrID0gdmVjMyggMC4wICk7XG4jZW5kaWZcbkluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQ7XG5mbG9hdCBkb3ROTDtcbnZlYzMgZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlO1xudkluZGlyZWN0RnJvbnQgKz0gZ2V0QW1iaWVudExpZ2h0SXJyYWRpYW5jZSggYW1iaWVudExpZ2h0Q29sb3IgKTtcbnZJbmRpcmVjdEZyb250ICs9IGdldExpZ2h0UHJvYmVJcnJhZGlhbmNlKCBsaWdodFByb2JlLCBnZW9tZXRyeSApO1xuI2lmZGVmIERPVUJMRV9TSURFRFxuXHR2SW5kaXJlY3RCYWNrICs9IGdldEFtYmllbnRMaWdodElycmFkaWFuY2UoIGFtYmllbnRMaWdodENvbG9yICk7XG5cdHZJbmRpcmVjdEJhY2sgKz0gZ2V0TGlnaHRQcm9iZUlycmFkaWFuY2UoIGxpZ2h0UHJvYmUsIGJhY2tHZW9tZXRyeSApO1xuI2VuZGlmXG4jaWYgTlVNX1BPSU5UX0xJR0hUUyA+IDBcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fUE9JTlRfTElHSFRTOyBpICsrICkge1xuXHRcdGdldFBvaW50RGlyZWN0TGlnaHRJcnJhZGlhbmNlKCBwb2ludExpZ2h0c1sgaSBdLCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcblx0XHRkb3ROTCA9IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKTtcblx0XHRkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2UgPSBQSSAqIGRpcmVjdExpZ2h0LmNvbG9yO1xuXHRcdHZMaWdodEZyb250ICs9IHNhdHVyYXRlKCBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlO1xuXHRcdCNpZmRlZiBET1VCTEVfU0lERURcblx0XHRcdHZMaWdodEJhY2sgKz0gc2F0dXJhdGUoIC1kb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlO1xuXHRcdCNlbmRpZlxuXHR9XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG4jZW5kaWZcbiNpZiBOVU1fU1BPVF9MSUdIVFMgPiAwXG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRTOyBpICsrICkge1xuXHRcdGdldFNwb3REaXJlY3RMaWdodElycmFkaWFuY2UoIHNwb3RMaWdodHNbIGkgXSwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7XG5cdFx0ZG90TkwgPSBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICk7XG5cdFx0ZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlID0gUEkgKiBkaXJlY3RMaWdodC5jb2xvcjtcblx0XHR2TGlnaHRGcm9udCArPSBzYXR1cmF0ZSggZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR2TGlnaHRCYWNrICs9IHNhdHVyYXRlKCAtZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcblx0XHQjZW5kaWZcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuI2VuZGlmXG4jaWYgTlVNX0RJUl9MSUdIVFMgPiAwXG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0RJUl9MSUdIVFM7IGkgKysgKSB7XG5cdFx0Z2V0RGlyZWN0aW9uYWxEaXJlY3RMaWdodElycmFkaWFuY2UoIGRpcmVjdGlvbmFsTGlnaHRzWyBpIF0sIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApO1xuXHRcdGRvdE5MID0gZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApO1xuXHRcdGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZSA9IFBJICogZGlyZWN0TGlnaHQuY29sb3I7XG5cdFx0dkxpZ2h0RnJvbnQgKz0gc2F0dXJhdGUoIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG5cdFx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdFx0dkxpZ2h0QmFjayArPSBzYXR1cmF0ZSggLWRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG5cdFx0I2VuZGlmXG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcbiNlbmRpZlxuI2lmIE5VTV9IRU1JX0xJR0hUUyA+IDBcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fSEVNSV9MSUdIVFM7IGkgKysgKSB7XG5cdFx0dkluZGlyZWN0RnJvbnQgKz0gZ2V0SGVtaXNwaGVyZUxpZ2h0SXJyYWRpYW5jZSggaGVtaXNwaGVyZUxpZ2h0c1sgaSBdLCBnZW9tZXRyeSApO1xuXHRcdCNpZmRlZiBET1VCTEVfU0lERURcblx0XHRcdHZJbmRpcmVjdEJhY2sgKz0gZ2V0SGVtaXNwaGVyZUxpZ2h0SXJyYWRpYW5jZSggaGVtaXNwaGVyZUxpZ2h0c1sgaSBdLCBiYWNrR2VvbWV0cnkgKTtcblx0XHQjZW5kaWZcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuI2VuZGlmIixsaWdodHNfcGFyc19iZWdpbjoidW5pZm9ybSBib29sIHJlY2VpdmVTaGFkb3c7XG51bmlmb3JtIHZlYzMgYW1iaWVudExpZ2h0Q29sb3I7XG51bmlmb3JtIHZlYzMgbGlnaHRQcm9iZVsgOSBdO1xudmVjMyBzaEdldElycmFkaWFuY2VBdCggaW4gdmVjMyBub3JtYWwsIGluIHZlYzMgc2hDb2VmZmljaWVudHNbIDkgXSApIHtcblx0ZmxvYXQgeCA9IG5vcm1hbC54LCB5ID0gbm9ybWFsLnksIHogPSBub3JtYWwuejtcblx0dmVjMyByZXN1bHQgPSBzaENvZWZmaWNpZW50c1sgMCBdICogMC44ODYyMjc7XG5cdHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgMSBdICogMi4wICogMC41MTE2NjQgKiB5O1xuXHRyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDIgXSAqIDIuMCAqIDAuNTExNjY0ICogejtcblx0cmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyAzIF0gKiAyLjAgKiAwLjUxMTY2NCAqIHg7XG5cdHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgNCBdICogMi4wICogMC40MjkwNDMgKiB4ICogeTtcblx0cmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA1IF0gKiAyLjAgKiAwLjQyOTA0MyAqIHkgKiB6O1xuXHRyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDYgXSAqICggMC43NDMxMjUgKiB6ICogeiAtIDAuMjQ3NzA4ICk7XG5cdHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgNyBdICogMi4wICogMC40MjkwNDMgKiB4ICogejtcblx0cmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA4IF0gKiAwLjQyOTA0MyAqICggeCAqIHggLSB5ICogeSApO1xuXHRyZXR1cm4gcmVzdWx0O1xufVxudmVjMyBnZXRMaWdodFByb2JlSXJyYWRpYW5jZSggY29uc3QgaW4gdmVjMyBsaWdodFByb2JlWyA5IF0sIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnkgKSB7XG5cdHZlYzMgd29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBnZW9tZXRyeS5ub3JtYWwsIHZpZXdNYXRyaXggKTtcblx0dmVjMyBpcnJhZGlhbmNlID0gc2hHZXRJcnJhZGlhbmNlQXQoIHdvcmxkTm9ybWFsLCBsaWdodFByb2JlICk7XG5cdHJldHVybiBpcnJhZGlhbmNlO1xufVxudmVjMyBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIGFtYmllbnRMaWdodENvbG9yICkge1xuXHR2ZWMzIGlycmFkaWFuY2UgPSBhbWJpZW50TGlnaHRDb2xvcjtcblx0I2lmbmRlZiBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTXG5cdFx0aXJyYWRpYW5jZSAqPSBQSTtcblx0I2VuZGlmXG5cdHJldHVybiBpcnJhZGlhbmNlO1xufVxuI2lmIE5VTV9ESVJfTElHSFRTID4gMFxuXHRzdHJ1Y3QgRGlyZWN0aW9uYWxMaWdodCB7XG5cdFx0dmVjMyBkaXJlY3Rpb247XG5cdFx0dmVjMyBjb2xvcjtcblx0fTtcblx0dW5pZm9ybSBEaXJlY3Rpb25hbExpZ2h0IGRpcmVjdGlvbmFsTGlnaHRzWyBOVU1fRElSX0xJR0hUUyBdO1xuXHR2b2lkIGdldERpcmVjdGlvbmFsRGlyZWN0TGlnaHRJcnJhZGlhbmNlKCBjb25zdCBpbiBEaXJlY3Rpb25hbExpZ2h0IGRpcmVjdGlvbmFsTGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIG91dCBJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0ICkge1xuXHRcdGRpcmVjdExpZ2h0LmNvbG9yID0gZGlyZWN0aW9uYWxMaWdodC5jb2xvcjtcblx0XHRkaXJlY3RMaWdodC5kaXJlY3Rpb24gPSBkaXJlY3Rpb25hbExpZ2h0LmRpcmVjdGlvbjtcblx0XHRkaXJlY3RMaWdodC52aXNpYmxlID0gdHJ1ZTtcblx0fVxuI2VuZGlmXG4jaWYgTlVNX1BPSU5UX0xJR0hUUyA+IDBcblx0c3RydWN0IFBvaW50TGlnaHQge1xuXHRcdHZlYzMgcG9zaXRpb247XG5cdFx0dmVjMyBjb2xvcjtcblx0XHRmbG9hdCBkaXN0YW5jZTtcblx0XHRmbG9hdCBkZWNheTtcblx0fTtcblx0dW5pZm9ybSBQb2ludExpZ2h0IHBvaW50TGlnaHRzWyBOVU1fUE9JTlRfTElHSFRTIF07XG5cdHZvaWQgZ2V0UG9pbnREaXJlY3RMaWdodElycmFkaWFuY2UoIGNvbnN0IGluIFBvaW50TGlnaHQgcG9pbnRMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgb3V0IEluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQgKSB7XG5cdFx0dmVjMyBsVmVjdG9yID0gcG9pbnRMaWdodC5wb3NpdGlvbiAtIGdlb21ldHJ5LnBvc2l0aW9uO1xuXHRcdGRpcmVjdExpZ2h0LmRpcmVjdGlvbiA9IG5vcm1hbGl6ZSggbFZlY3RvciApO1xuXHRcdGZsb2F0IGxpZ2h0RGlzdGFuY2UgPSBsZW5ndGgoIGxWZWN0b3IgKTtcblx0XHRkaXJlY3RMaWdodC5jb2xvciA9IHBvaW50TGlnaHQuY29sb3I7XG5cdFx0ZGlyZWN0TGlnaHQuY29sb3IgKj0gcHVuY3R1YWxMaWdodEludGVuc2l0eVRvSXJyYWRpYW5jZUZhY3RvciggbGlnaHREaXN0YW5jZSwgcG9pbnRMaWdodC5kaXN0YW5jZSwgcG9pbnRMaWdodC5kZWNheSApO1xuXHRcdGRpcmVjdExpZ2h0LnZpc2libGUgPSAoIGRpcmVjdExpZ2h0LmNvbG9yICE9IHZlYzMoIDAuMCApICk7XG5cdH1cbiNlbmRpZlxuI2lmIE5VTV9TUE9UX0xJR0hUUyA+IDBcblx0c3RydWN0IFNwb3RMaWdodCB7XG5cdFx0dmVjMyBwb3NpdGlvbjtcblx0XHR2ZWMzIGRpcmVjdGlvbjtcblx0XHR2ZWMzIGNvbG9yO1xuXHRcdGZsb2F0IGRpc3RhbmNlO1xuXHRcdGZsb2F0IGRlY2F5O1xuXHRcdGZsb2F0IGNvbmVDb3M7XG5cdFx0ZmxvYXQgcGVudW1icmFDb3M7XG5cdH07XG5cdHVuaWZvcm0gU3BvdExpZ2h0IHNwb3RMaWdodHNbIE5VTV9TUE9UX0xJR0hUUyBdO1xuXHR2b2lkIGdldFNwb3REaXJlY3RMaWdodElycmFkaWFuY2UoIGNvbnN0IGluIFNwb3RMaWdodCBzcG90TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIG91dCBJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0ICkge1xuXHRcdHZlYzMgbFZlY3RvciA9IHNwb3RMaWdodC5wb3NpdGlvbiAtIGdlb21ldHJ5LnBvc2l0aW9uO1xuXHRcdGRpcmVjdExpZ2h0LmRpcmVjdGlvbiA9IG5vcm1hbGl6ZSggbFZlY3RvciApO1xuXHRcdGZsb2F0IGxpZ2h0RGlzdGFuY2UgPSBsZW5ndGgoIGxWZWN0b3IgKTtcblx0XHRmbG9hdCBhbmdsZUNvcyA9IGRvdCggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBzcG90TGlnaHQuZGlyZWN0aW9uICk7XG5cdFx0aWYgKCBhbmdsZUNvcyA+IHNwb3RMaWdodC5jb25lQ29zICkge1xuXHRcdFx0ZmxvYXQgc3BvdEVmZmVjdCA9IHNtb290aHN0ZXAoIHNwb3RMaWdodC5jb25lQ29zLCBzcG90TGlnaHQucGVudW1icmFDb3MsIGFuZ2xlQ29zICk7XG5cdFx0XHRkaXJlY3RMaWdodC5jb2xvciA9IHNwb3RMaWdodC5jb2xvcjtcblx0XHRcdGRpcmVjdExpZ2h0LmNvbG9yICo9IHNwb3RFZmZlY3QgKiBwdW5jdHVhbExpZ2h0SW50ZW5zaXR5VG9JcnJhZGlhbmNlRmFjdG9yKCBsaWdodERpc3RhbmNlLCBzcG90TGlnaHQuZGlzdGFuY2UsIHNwb3RMaWdodC5kZWNheSApO1xuXHRcdFx0ZGlyZWN0TGlnaHQudmlzaWJsZSA9IHRydWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRpcmVjdExpZ2h0LmNvbG9yID0gdmVjMyggMC4wICk7XG5cdFx0XHRkaXJlY3RMaWdodC52aXNpYmxlID0gZmFsc2U7XG5cdFx0fVxuXHR9XG4jZW5kaWZcbiNpZiBOVU1fUkVDVF9BUkVBX0xJR0hUUyA+IDBcblx0c3RydWN0IFJlY3RBcmVhTGlnaHQge1xuXHRcdHZlYzMgY29sb3I7XG5cdFx0dmVjMyBwb3NpdGlvbjtcblx0XHR2ZWMzIGhhbGZXaWR0aDtcblx0XHR2ZWMzIGhhbGZIZWlnaHQ7XG5cdH07XG5cdHVuaWZvcm0gc2FtcGxlcjJEIGx0Y18xO1x0dW5pZm9ybSBzYW1wbGVyMkQgbHRjXzI7XG5cdHVuaWZvcm0gUmVjdEFyZWFMaWdodCByZWN0QXJlYUxpZ2h0c1sgTlVNX1JFQ1RfQVJFQV9MSUdIVFMgXTtcbiNlbmRpZlxuI2lmIE5VTV9IRU1JX0xJR0hUUyA+IDBcblx0c3RydWN0IEhlbWlzcGhlcmVMaWdodCB7XG5cdFx0dmVjMyBkaXJlY3Rpb247XG5cdFx0dmVjMyBza3lDb2xvcjtcblx0XHR2ZWMzIGdyb3VuZENvbG9yO1xuXHR9O1xuXHR1bmlmb3JtIEhlbWlzcGhlcmVMaWdodCBoZW1pc3BoZXJlTGlnaHRzWyBOVU1fSEVNSV9MSUdIVFMgXTtcblx0dmVjMyBnZXRIZW1pc3BoZXJlTGlnaHRJcnJhZGlhbmNlKCBjb25zdCBpbiBIZW1pc3BoZXJlTGlnaHQgaGVtaUxpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5ICkge1xuXHRcdGZsb2F0IGRvdE5MID0gZG90KCBnZW9tZXRyeS5ub3JtYWwsIGhlbWlMaWdodC5kaXJlY3Rpb24gKTtcblx0XHRmbG9hdCBoZW1pRGlmZnVzZVdlaWdodCA9IDAuNSAqIGRvdE5MICsgMC41O1xuXHRcdHZlYzMgaXJyYWRpYW5jZSA9IG1peCggaGVtaUxpZ2h0Lmdyb3VuZENvbG9yLCBoZW1pTGlnaHQuc2t5Q29sb3IsIGhlbWlEaWZmdXNlV2VpZ2h0ICk7XG5cdFx0I2lmbmRlZiBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTXG5cdFx0XHRpcnJhZGlhbmNlICo9IFBJO1xuXHRcdCNlbmRpZlxuXHRcdHJldHVybiBpcnJhZGlhbmNlO1xuXHR9XG4jZW5kaWYiLGxpZ2h0c190b29uX2ZyYWdtZW50OiJUb29uTWF0ZXJpYWwgbWF0ZXJpYWw7XG5tYXRlcmlhbC5kaWZmdXNlQ29sb3IgPSBkaWZmdXNlQ29sb3IucmdiOyIsbGlnaHRzX3Rvb25fcGFyc19mcmFnbWVudDoidmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xuI2VuZGlmXG5zdHJ1Y3QgVG9vbk1hdGVyaWFsIHtcblx0dmVjMyBkaWZmdXNlQ29sb3I7XG59O1xudm9pZCBSRV9EaXJlY3RfVG9vbiggY29uc3QgaW4gSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gVG9vbk1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0dmVjMyBpcnJhZGlhbmNlID0gZ2V0R3JhZGllbnRJcnJhZGlhbmNlKCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApICogZGlyZWN0TGlnaHQuY29sb3I7XG5cdCNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUU1xuXHRcdGlycmFkaWFuY2UgKj0gUEk7XG5cdCNlbmRpZlxuXHRyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0RpZmZ1c2VfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7XG59XG52b2lkIFJFX0luZGlyZWN0RGlmZnVzZV9Ub29uKCBjb25zdCBpbiB2ZWMzIGlycmFkaWFuY2UsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFRvb25NYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7XG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9EaWZmdXNlX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xufVxuI2RlZmluZSBSRV9EaXJlY3RcdFx0XHRcdFJFX0RpcmVjdF9Ub29uXG4jZGVmaW5lIFJFX0luZGlyZWN0RGlmZnVzZVx0XHRSRV9JbmRpcmVjdERpZmZ1c2VfVG9vblxuI2RlZmluZSBNYXRlcmlhbF9MaWdodFByb2JlTE9EKCBtYXRlcmlhbCApXHQoMCkiLGxpZ2h0c19waG9uZ19mcmFnbWVudDoiQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsO1xubWF0ZXJpYWwuZGlmZnVzZUNvbG9yID0gZGlmZnVzZUNvbG9yLnJnYjtcbm1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgPSBzcGVjdWxhcjtcbm1hdGVyaWFsLnNwZWN1bGFyU2hpbmluZXNzID0gc2hpbmluZXNzO1xubWF0ZXJpYWwuc3BlY3VsYXJTdHJlbmd0aCA9IHNwZWN1bGFyU3RyZW5ndGg7IixsaWdodHNfcGhvbmdfcGFyc19mcmFnbWVudDoidmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xuI2VuZGlmXG5zdHJ1Y3QgQmxpbm5QaG9uZ01hdGVyaWFsIHtcblx0dmVjMyBkaWZmdXNlQ29sb3I7XG5cdHZlYzMgc3BlY3VsYXJDb2xvcjtcblx0ZmxvYXQgc3BlY3VsYXJTaGluaW5lc3M7XG5cdGZsb2F0IHNwZWN1bGFyU3RyZW5ndGg7XG59O1xudm9pZCBSRV9EaXJlY3RfQmxpbm5QaG9uZyggY29uc3QgaW4gSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0ZmxvYXQgZG90TkwgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApICk7XG5cdHZlYzMgaXJyYWRpYW5jZSA9IGRvdE5MICogZGlyZWN0TGlnaHQuY29sb3I7XG5cdCNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUU1xuXHRcdGlycmFkaWFuY2UgKj0gUEk7XG5cdCNlbmRpZlxuXHRyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0RpZmZ1c2VfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7XG5cdHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBCUkRGX1NwZWN1bGFyX0JsaW5uUGhvbmcoIGRpcmVjdExpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciwgbWF0ZXJpYWwuc3BlY3VsYXJTaGluaW5lc3MgKSAqIG1hdGVyaWFsLnNwZWN1bGFyU3RyZW5ndGg7XG59XG52b2lkIFJFX0luZGlyZWN0RGlmZnVzZV9CbGlublBob25nKCBjb25zdCBpbiB2ZWMzIGlycmFkaWFuY2UsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIEJsaW5uUGhvbmdNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7XG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9EaWZmdXNlX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xufVxuI2RlZmluZSBSRV9EaXJlY3RcdFx0XHRcdFJFX0RpcmVjdF9CbGlublBob25nXG4jZGVmaW5lIFJFX0luZGlyZWN0RGlmZnVzZVx0XHRSRV9JbmRpcmVjdERpZmZ1c2VfQmxpbm5QaG9uZ1xuI2RlZmluZSBNYXRlcmlhbF9MaWdodFByb2JlTE9EKCBtYXRlcmlhbCApXHQoMCkiLGxpZ2h0c19waHlzaWNhbF9mcmFnbWVudDoiUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbDtcbm1hdGVyaWFsLmRpZmZ1c2VDb2xvciA9IGRpZmZ1c2VDb2xvci5yZ2IgKiAoIDEuMCAtIG1ldGFsbmVzc0ZhY3RvciApO1xudmVjMyBkeHkgPSBtYXgoIGFicyggZEZkeCggZ2VvbWV0cnlOb3JtYWwgKSApLCBhYnMoIGRGZHkoIGdlb21ldHJ5Tm9ybWFsICkgKSApO1xuZmxvYXQgZ2VvbWV0cnlSb3VnaG5lc3MgPSBtYXgoIG1heCggZHh5LngsIGR4eS55ICksIGR4eS56ICk7XG5tYXRlcmlhbC5zcGVjdWxhclJvdWdobmVzcyA9IG1heCggcm91Z2huZXNzRmFjdG9yLCAwLjA1MjUgKTttYXRlcmlhbC5zcGVjdWxhclJvdWdobmVzcyArPSBnZW9tZXRyeVJvdWdobmVzcztcbm1hdGVyaWFsLnNwZWN1bGFyUm91Z2huZXNzID0gbWluKCBtYXRlcmlhbC5zcGVjdWxhclJvdWdobmVzcywgMS4wICk7XG4jaWZkZWYgUkVGTEVDVElWSVRZXG5cdG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgPSBtaXgoIHZlYzMoIE1BWElNVU1fU1BFQ1VMQVJfQ09FRkZJQ0lFTlQgKiBwb3cyKCByZWZsZWN0aXZpdHkgKSApLCBkaWZmdXNlQ29sb3IucmdiLCBtZXRhbG5lc3NGYWN0b3IgKTtcbiNlbHNlXG5cdG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgPSBtaXgoIHZlYzMoIERFRkFVTFRfU1BFQ1VMQVJfQ09FRkZJQ0lFTlQgKSwgZGlmZnVzZUNvbG9yLnJnYiwgbWV0YWxuZXNzRmFjdG9yICk7XG4jZW5kaWZcbiNpZmRlZiBDTEVBUkNPQVRcblx0bWF0ZXJpYWwuY2xlYXJjb2F0ID0gY2xlYXJjb2F0O1xuXHRtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgPSBjbGVhcmNvYXRSb3VnaG5lc3M7XG5cdCNpZmRlZiBVU0VfQ0xFQVJDT0FUTUFQXG5cdFx0bWF0ZXJpYWwuY2xlYXJjb2F0ICo9IHRleHR1cmUyRCggY2xlYXJjb2F0TWFwLCB2VXYgKS54O1xuXHQjZW5kaWZcblx0I2lmZGVmIFVTRV9DTEVBUkNPQVRfUk9VR0hORVNTTUFQXG5cdFx0bWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzICo9IHRleHR1cmUyRCggY2xlYXJjb2F0Um91Z2huZXNzTWFwLCB2VXYgKS55O1xuXHQjZW5kaWZcblx0bWF0ZXJpYWwuY2xlYXJjb2F0ID0gc2F0dXJhdGUoIG1hdGVyaWFsLmNsZWFyY29hdCApO1x0bWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzID0gbWF4KCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MsIDAuMDUyNSApO1xuXHRtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKz0gZ2VvbWV0cnlSb3VnaG5lc3M7XG5cdG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyA9IG1pbiggbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzLCAxLjAgKTtcbiNlbmRpZlxuI2lmZGVmIFVTRV9TSEVFTlxuXHRtYXRlcmlhbC5zaGVlbkNvbG9yID0gc2hlZW47XG4jZW5kaWYiLGxpZ2h0c19waHlzaWNhbF9wYXJzX2ZyYWdtZW50OiJzdHJ1Y3QgUGh5c2ljYWxNYXRlcmlhbCB7XG5cdHZlYzMgZGlmZnVzZUNvbG9yO1xuXHRmbG9hdCBzcGVjdWxhclJvdWdobmVzcztcblx0dmVjMyBzcGVjdWxhckNvbG9yO1xuI2lmZGVmIENMRUFSQ09BVFxuXHRmbG9hdCBjbGVhcmNvYXQ7XG5cdGZsb2F0IGNsZWFyY29hdFJvdWdobmVzcztcbiNlbmRpZlxuI2lmZGVmIFVTRV9TSEVFTlxuXHR2ZWMzIHNoZWVuQ29sb3I7XG4jZW5kaWZcbn07XG4jZGVmaW5lIE1BWElNVU1fU1BFQ1VMQVJfQ09FRkZJQ0lFTlQgMC4xNlxuI2RlZmluZSBERUZBVUxUX1NQRUNVTEFSX0NPRUZGSUNJRU5UIDAuMDRcbmZsb2F0IGNsZWFyY29hdERIUkFwcHJveCggY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzLCBjb25zdCBpbiBmbG9hdCBkb3ROTCApIHtcblx0cmV0dXJuIERFRkFVTFRfU1BFQ1VMQVJfQ09FRkZJQ0lFTlQgKyAoIDEuMCAtIERFRkFVTFRfU1BFQ1VMQVJfQ09FRkZJQ0lFTlQgKSAqICggcG93KCAxLjAgLSBkb3ROTCwgNS4wICkgKiBwb3coIDEuMCAtIHJvdWdobmVzcywgMi4wICkgKTtcbn1cbiNpZiBOVU1fUkVDVF9BUkVBX0xJR0hUUyA+IDBcblx0dm9pZCBSRV9EaXJlY3RfUmVjdEFyZWFfUGh5c2ljYWwoIGNvbnN0IGluIFJlY3RBcmVhTGlnaHQgcmVjdEFyZWFMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7XG5cdFx0dmVjMyBub3JtYWwgPSBnZW9tZXRyeS5ub3JtYWw7XG5cdFx0dmVjMyB2aWV3RGlyID0gZ2VvbWV0cnkudmlld0Rpcjtcblx0XHR2ZWMzIHBvc2l0aW9uID0gZ2VvbWV0cnkucG9zaXRpb247XG5cdFx0dmVjMyBsaWdodFBvcyA9IHJlY3RBcmVhTGlnaHQucG9zaXRpb247XG5cdFx0dmVjMyBoYWxmV2lkdGggPSByZWN0QXJlYUxpZ2h0LmhhbGZXaWR0aDtcblx0XHR2ZWMzIGhhbGZIZWlnaHQgPSByZWN0QXJlYUxpZ2h0LmhhbGZIZWlnaHQ7XG5cdFx0dmVjMyBsaWdodENvbG9yID0gcmVjdEFyZWFMaWdodC5jb2xvcjtcblx0XHRmbG9hdCByb3VnaG5lc3MgPSBtYXRlcmlhbC5zcGVjdWxhclJvdWdobmVzcztcblx0XHR2ZWMzIHJlY3RDb29yZHNbIDQgXTtcblx0XHRyZWN0Q29vcmRzWyAwIF0gPSBsaWdodFBvcyArIGhhbGZXaWR0aCAtIGhhbGZIZWlnaHQ7XHRcdHJlY3RDb29yZHNbIDEgXSA9IGxpZ2h0UG9zIC0gaGFsZldpZHRoIC0gaGFsZkhlaWdodDtcblx0XHRyZWN0Q29vcmRzWyAyIF0gPSBsaWdodFBvcyAtIGhhbGZXaWR0aCArIGhhbGZIZWlnaHQ7XG5cdFx0cmVjdENvb3Jkc1sgMyBdID0gbGlnaHRQb3MgKyBoYWxmV2lkdGggKyBoYWxmSGVpZ2h0O1xuXHRcdHZlYzIgdXYgPSBMVENfVXYoIG5vcm1hbCwgdmlld0Rpciwgcm91Z2huZXNzICk7XG5cdFx0dmVjNCB0MSA9IHRleHR1cmUyRCggbHRjXzEsIHV2ICk7XG5cdFx0dmVjNCB0MiA9IHRleHR1cmUyRCggbHRjXzIsIHV2ICk7XG5cdFx0bWF0MyBtSW52ID0gbWF0Myhcblx0XHRcdHZlYzMoIHQxLngsIDAsIHQxLnkgKSxcblx0XHRcdHZlYzMoICAgIDAsIDEsICAgIDAgKSxcblx0XHRcdHZlYzMoIHQxLnosIDAsIHQxLncgKVxuXHRcdCk7XG5cdFx0dmVjMyBmcmVzbmVsID0gKCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yICogdDIueCArICggdmVjMyggMS4wICkgLSBtYXRlcmlhbC5zcGVjdWxhckNvbG9yICkgKiB0Mi55ICk7XG5cdFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKz0gbGlnaHRDb2xvciAqIGZyZXNuZWwgKiBMVENfRXZhbHVhdGUoIG5vcm1hbCwgdmlld0RpciwgcG9zaXRpb24sIG1JbnYsIHJlY3RDb29yZHMgKTtcblx0XHRyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICs9IGxpZ2h0Q29sb3IgKiBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKiBMVENfRXZhbHVhdGUoIG5vcm1hbCwgdmlld0RpciwgcG9zaXRpb24sIG1hdDMoIDEuMCApLCByZWN0Q29vcmRzICk7XG5cdH1cbiNlbmRpZlxudm9pZCBSRV9EaXJlY3RfUGh5c2ljYWwoIGNvbnN0IGluIEluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xuXHRmbG9hdCBkb3ROTCA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICkgKTtcblx0dmVjMyBpcnJhZGlhbmNlID0gZG90TkwgKiBkaXJlY3RMaWdodC5jb2xvcjtcblx0I2lmbmRlZiBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTXG5cdFx0aXJyYWRpYW5jZSAqPSBQSTtcblx0I2VuZGlmXG5cdCNpZmRlZiBDTEVBUkNPQVRcblx0XHRmbG9hdCBjY0RvdE5MID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSApO1xuXHRcdHZlYzMgY2NJcnJhZGlhbmNlID0gY2NEb3ROTCAqIGRpcmVjdExpZ2h0LmNvbG9yO1xuXHRcdCNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUU1xuXHRcdFx0Y2NJcnJhZGlhbmNlICo9IFBJO1xuXHRcdCNlbmRpZlxuXHRcdGZsb2F0IGNsZWFyY29hdERIUiA9IG1hdGVyaWFsLmNsZWFyY29hdCAqIGNsZWFyY29hdERIUkFwcHJveCggbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzLCBjY0RvdE5MICk7XG5cdFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKz0gY2NJcnJhZGlhbmNlICogbWF0ZXJpYWwuY2xlYXJjb2F0ICogQlJERl9TcGVjdWxhcl9HR1goIGRpcmVjdExpZ2h0LCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIHZlYzMoIERFRkFVTFRfU1BFQ1VMQVJfQ09FRkZJQ0lFTlQgKSwgbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzICk7XG5cdCNlbHNlXG5cdFx0ZmxvYXQgY2xlYXJjb2F0REhSID0gMC4wO1xuXHQjZW5kaWZcblx0I2lmZGVmIFVTRV9TSEVFTlxuXHRcdHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICs9ICggMS4wIC0gY2xlYXJjb2F0REhSICkgKiBpcnJhZGlhbmNlICogQlJERl9TcGVjdWxhcl9TaGVlbihcblx0XHRcdG1hdGVyaWFsLnNwZWN1bGFyUm91Z2huZXNzLFxuXHRcdFx0ZGlyZWN0TGlnaHQuZGlyZWN0aW9uLFxuXHRcdFx0Z2VvbWV0cnksXG5cdFx0XHRtYXRlcmlhbC5zaGVlbkNvbG9yXG5cdFx0KTtcblx0I2Vsc2Vcblx0XHRyZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArPSAoIDEuMCAtIGNsZWFyY29hdERIUiApICogaXJyYWRpYW5jZSAqIEJSREZfU3BlY3VsYXJfR0dYKCBkaXJlY3RMaWdodCwgZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkubm9ybWFsLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhclJvdWdobmVzcyk7XG5cdCNlbmRpZlxuXHRyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICs9ICggMS4wIC0gY2xlYXJjb2F0REhSICkgKiBpcnJhZGlhbmNlICogQlJERl9EaWZmdXNlX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xufVxudm9pZCBSRV9JbmRpcmVjdERpZmZ1c2VfUGh5c2ljYWwoIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7XG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9EaWZmdXNlX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xufVxudm9pZCBSRV9JbmRpcmVjdFNwZWN1bGFyX1BoeXNpY2FsKCBjb25zdCBpbiB2ZWMzIHJhZGlhbmNlLCBjb25zdCBpbiB2ZWMzIGlycmFkaWFuY2UsIGNvbnN0IGluIHZlYzMgY2xlYXJjb2F0UmFkaWFuY2UsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0KSB7XG5cdCNpZmRlZiBDTEVBUkNPQVRcblx0XHRmbG9hdCBjY0RvdE5WID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyICkgKTtcblx0XHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICs9IGNsZWFyY29hdFJhZGlhbmNlICogbWF0ZXJpYWwuY2xlYXJjb2F0ICogQlJERl9TcGVjdWxhcl9HR1hfRW52aXJvbm1lbnQoIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5LmNsZWFyY29hdE5vcm1hbCwgdmVjMyggREVGQVVMVF9TUEVDVUxBUl9DT0VGRklDSUVOVCApLCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKTtcblx0XHRmbG9hdCBjY0RvdE5MID0gY2NEb3ROVjtcblx0XHRmbG9hdCBjbGVhcmNvYXRESFIgPSBtYXRlcmlhbC5jbGVhcmNvYXQgKiBjbGVhcmNvYXRESFJBcHByb3goIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcywgY2NEb3ROTCApO1xuXHQjZWxzZVxuXHRcdGZsb2F0IGNsZWFyY29hdERIUiA9IDAuMDtcblx0I2VuZGlmXG5cdGZsb2F0IGNsZWFyY29hdEludiA9IDEuMCAtIGNsZWFyY29hdERIUjtcblx0dmVjMyBzaW5nbGVTY2F0dGVyaW5nID0gdmVjMyggMC4wICk7XG5cdHZlYzMgbXVsdGlTY2F0dGVyaW5nID0gdmVjMyggMC4wICk7XG5cdHZlYzMgY29zaW5lV2VpZ2h0ZWRJcnJhZGlhbmNlID0gaXJyYWRpYW5jZSAqIFJFQ0lQUk9DQUxfUEk7XG5cdEJSREZfU3BlY3VsYXJfTXVsdGlzY2F0dGVyaW5nX0Vudmlyb25tZW50KCBnZW9tZXRyeSwgbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciwgbWF0ZXJpYWwuc3BlY3VsYXJSb3VnaG5lc3MsIHNpbmdsZVNjYXR0ZXJpbmcsIG11bHRpU2NhdHRlcmluZyApO1xuXHR2ZWMzIGRpZmZ1c2UgPSBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKiAoIDEuMCAtICggc2luZ2xlU2NhdHRlcmluZyArIG11bHRpU2NhdHRlcmluZyApICk7XG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3BlY3VsYXIgKz0gY2xlYXJjb2F0SW52ICogcmFkaWFuY2UgKiBzaW5nbGVTY2F0dGVyaW5nO1xuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICs9IG11bHRpU2NhdHRlcmluZyAqIGNvc2luZVdlaWdodGVkSXJyYWRpYW5jZTtcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGRpZmZ1c2UgKiBjb3NpbmVXZWlnaHRlZElycmFkaWFuY2U7XG59XG4jZGVmaW5lIFJFX0RpcmVjdFx0XHRcdFx0UkVfRGlyZWN0X1BoeXNpY2FsXG4jZGVmaW5lIFJFX0RpcmVjdF9SZWN0QXJlYVx0XHRSRV9EaXJlY3RfUmVjdEFyZWFfUGh5c2ljYWxcbiNkZWZpbmUgUkVfSW5kaXJlY3REaWZmdXNlXHRcdFJFX0luZGlyZWN0RGlmZnVzZV9QaHlzaWNhbFxuI2RlZmluZSBSRV9JbmRpcmVjdFNwZWN1bGFyXHRcdFJFX0luZGlyZWN0U3BlY3VsYXJfUGh5c2ljYWxcbmZsb2F0IGNvbXB1dGVTcGVjdWxhck9jY2x1c2lvbiggY29uc3QgaW4gZmxvYXQgZG90TlYsIGNvbnN0IGluIGZsb2F0IGFtYmllbnRPY2NsdXNpb24sIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHtcblx0cmV0dXJuIHNhdHVyYXRlKCBwb3coIGRvdE5WICsgYW1iaWVudE9jY2x1c2lvbiwgZXhwMiggLSAxNi4wICogcm91Z2huZXNzIC0gMS4wICkgKSAtIDEuMCArIGFtYmllbnRPY2NsdXNpb24gKTtcbn0iLGxpZ2h0c19mcmFnbWVudF9iZWdpbjoiXG5HZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5O1xuZ2VvbWV0cnkucG9zaXRpb24gPSAtIHZWaWV3UG9zaXRpb247XG5nZW9tZXRyeS5ub3JtYWwgPSBub3JtYWw7XG5nZW9tZXRyeS52aWV3RGlyID0gKCBpc09ydGhvZ3JhcGhpYyApID8gdmVjMyggMCwgMCwgMSApIDogbm9ybWFsaXplKCB2Vmlld1Bvc2l0aW9uICk7XG4jaWZkZWYgQ0xFQVJDT0FUXG5cdGdlb21ldHJ5LmNsZWFyY29hdE5vcm1hbCA9IGNsZWFyY29hdE5vcm1hbDtcbiNlbmRpZlxuSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodDtcbiNpZiAoIE5VTV9QT0lOVF9MSUdIVFMgPiAwICkgJiYgZGVmaW5lZCggUkVfRGlyZWN0IClcblx0UG9pbnRMaWdodCBwb2ludExpZ2h0O1xuXHQjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMFxuXHRQb2ludExpZ2h0U2hhZG93IHBvaW50TGlnaHRTaGFkb3c7XG5cdCNlbmRpZlxuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9QT0lOVF9MSUdIVFM7IGkgKysgKSB7XG5cdFx0cG9pbnRMaWdodCA9IHBvaW50TGlnaHRzWyBpIF07XG5cdFx0Z2V0UG9pbnREaXJlY3RMaWdodElycmFkaWFuY2UoIHBvaW50TGlnaHQsIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApO1xuXHRcdCNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgKCBVTlJPTExFRF9MT09QX0lOREVYIDwgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgKVxuXHRcdHBvaW50TGlnaHRTaGFkb3cgPSBwb2ludExpZ2h0U2hhZG93c1sgaSBdO1xuXHRcdGRpcmVjdExpZ2h0LmNvbG9yICo9IGFsbCggYnZlYzIoIGRpcmVjdExpZ2h0LnZpc2libGUsIHJlY2VpdmVTaGFkb3cgKSApID8gZ2V0UG9pbnRTaGFkb3coIHBvaW50U2hhZG93TWFwWyBpIF0sIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93TWFwU2l6ZSwgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dCaWFzLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd1JhZGl1cywgdlBvaW50U2hhZG93Q29vcmRbIGkgXSwgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dDYW1lcmFOZWFyLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd0NhbWVyYUZhciApIDogMS4wO1xuXHRcdCNlbmRpZlxuXHRcdFJFX0RpcmVjdCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuI2VuZGlmXG4jaWYgKCBOVU1fU1BPVF9MSUdIVFMgPiAwICkgJiYgZGVmaW5lZCggUkVfRGlyZWN0IClcblx0U3BvdExpZ2h0IHNwb3RMaWdodDtcblx0I2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMFxuXHRTcG90TGlnaHRTaGFkb3cgc3BvdExpZ2h0U2hhZG93O1xuXHQjZW5kaWZcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fU1BPVF9MSUdIVFM7IGkgKysgKSB7XG5cdFx0c3BvdExpZ2h0ID0gc3BvdExpZ2h0c1sgaSBdO1xuXHRcdGdldFNwb3REaXJlY3RMaWdodElycmFkaWFuY2UoIHNwb3RMaWdodCwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7XG5cdFx0I2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiAoIFVOUk9MTEVEX0xPT1BfSU5ERVggPCBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIClcblx0XHRzcG90TGlnaHRTaGFkb3cgPSBzcG90TGlnaHRTaGFkb3dzWyBpIF07XG5cdFx0ZGlyZWN0TGlnaHQuY29sb3IgKj0gYWxsKCBidmVjMiggZGlyZWN0TGlnaHQudmlzaWJsZSwgcmVjZWl2ZVNoYWRvdyApICkgPyBnZXRTaGFkb3coIHNwb3RTaGFkb3dNYXBbIGkgXSwgc3BvdExpZ2h0U2hhZG93LnNoYWRvd01hcFNpemUsIHNwb3RMaWdodFNoYWRvdy5zaGFkb3dCaWFzLCBzcG90TGlnaHRTaGFkb3cuc2hhZG93UmFkaXVzLCB2U3BvdFNoYWRvd0Nvb3JkWyBpIF0gKSA6IDEuMDtcblx0XHQjZW5kaWZcblx0XHRSRV9EaXJlY3QoIGRpcmVjdExpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7XG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcbiNlbmRpZlxuI2lmICggTlVNX0RJUl9MSUdIVFMgPiAwICkgJiYgZGVmaW5lZCggUkVfRGlyZWN0IClcblx0RGlyZWN0aW9uYWxMaWdodCBkaXJlY3Rpb25hbExpZ2h0O1xuXHQjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmIE5VTV9ESVJfTElHSFRfU0hBRE9XUyA+IDBcblx0RGlyZWN0aW9uYWxMaWdodFNoYWRvdyBkaXJlY3Rpb25hbExpZ2h0U2hhZG93O1xuXHQjZW5kaWZcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fRElSX0xJR0hUUzsgaSArKyApIHtcblx0XHRkaXJlY3Rpb25hbExpZ2h0ID0gZGlyZWN0aW9uYWxMaWdodHNbIGkgXTtcblx0XHRnZXREaXJlY3Rpb25hbERpcmVjdExpZ2h0SXJyYWRpYW5jZSggZGlyZWN0aW9uYWxMaWdodCwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7XG5cdFx0I2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiAoIFVOUk9MTEVEX0xPT1BfSU5ERVggPCBOVU1fRElSX0xJR0hUX1NIQURPV1MgKVxuXHRcdGRpcmVjdGlvbmFsTGlnaHRTaGFkb3cgPSBkaXJlY3Rpb25hbExpZ2h0U2hhZG93c1sgaSBdO1xuXHRcdGRpcmVjdExpZ2h0LmNvbG9yICo9IGFsbCggYnZlYzIoIGRpcmVjdExpZ2h0LnZpc2libGUsIHJlY2VpdmVTaGFkb3cgKSApID8gZ2V0U2hhZG93KCBkaXJlY3Rpb25hbFNoYWRvd01hcFsgaSBdLCBkaXJlY3Rpb25hbExpZ2h0U2hhZG93LnNoYWRvd01hcFNpemUsIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3cuc2hhZG93QmlhcywgZGlyZWN0aW9uYWxMaWdodFNoYWRvdy5zaGFkb3dSYWRpdXMsIHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBpIF0gKSA6IDEuMDtcblx0XHQjZW5kaWZcblx0XHRSRV9EaXJlY3QoIGRpcmVjdExpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7XG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcbiNlbmRpZlxuI2lmICggTlVNX1JFQ1RfQVJFQV9MSUdIVFMgPiAwICkgJiYgZGVmaW5lZCggUkVfRGlyZWN0X1JlY3RBcmVhIClcblx0UmVjdEFyZWFMaWdodCByZWN0QXJlYUxpZ2h0O1xuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9SRUNUX0FSRUFfTElHSFRTOyBpICsrICkge1xuXHRcdHJlY3RBcmVhTGlnaHQgPSByZWN0QXJlYUxpZ2h0c1sgaSBdO1xuXHRcdFJFX0RpcmVjdF9SZWN0QXJlYSggcmVjdEFyZWFMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApO1xuXHR9XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG4jZW5kaWZcbiNpZiBkZWZpbmVkKCBSRV9JbmRpcmVjdERpZmZ1c2UgKVxuXHR2ZWMzIGlibElycmFkaWFuY2UgPSB2ZWMzKCAwLjAgKTtcblx0dmVjMyBpcnJhZGlhbmNlID0gZ2V0QW1iaWVudExpZ2h0SXJyYWRpYW5jZSggYW1iaWVudExpZ2h0Q29sb3IgKTtcblx0aXJyYWRpYW5jZSArPSBnZXRMaWdodFByb2JlSXJyYWRpYW5jZSggbGlnaHRQcm9iZSwgZ2VvbWV0cnkgKTtcblx0I2lmICggTlVNX0hFTUlfTElHSFRTID4gMCApXG5cdFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRcdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9IRU1JX0xJR0hUUzsgaSArKyApIHtcblx0XHRcdGlycmFkaWFuY2UgKz0gZ2V0SGVtaXNwaGVyZUxpZ2h0SXJyYWRpYW5jZSggaGVtaXNwaGVyZUxpZ2h0c1sgaSBdLCBnZW9tZXRyeSApO1xuXHRcdH1cblx0XHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuXHQjZW5kaWZcbiNlbmRpZlxuI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0U3BlY3VsYXIgKVxuXHR2ZWMzIHJhZGlhbmNlID0gdmVjMyggMC4wICk7XG5cdHZlYzMgY2xlYXJjb2F0UmFkaWFuY2UgPSB2ZWMzKCAwLjAgKTtcbiNlbmRpZiIsbGlnaHRzX2ZyYWdtZW50X21hcHM6IiNpZiBkZWZpbmVkKCBSRV9JbmRpcmVjdERpZmZ1c2UgKVxuXHQjaWZkZWYgVVNFX0xJR0hUTUFQXG5cdFx0dmVjNCBsaWdodE1hcFRleGVsPSB0ZXh0dXJlMkQoIGxpZ2h0TWFwLCB2VXYyICk7XG5cdFx0dmVjMyBsaWdodE1hcElycmFkaWFuY2UgPSBsaWdodE1hcFRleGVsVG9MaW5lYXIoIGxpZ2h0TWFwVGV4ZWwgKS5yZ2IgKiBsaWdodE1hcEludGVuc2l0eTtcblx0XHQjaWZuZGVmIFBIWVNJQ0FMTFlfQ09SUkVDVF9MSUdIVFNcblx0XHRcdGxpZ2h0TWFwSXJyYWRpYW5jZSAqPSBQSTtcblx0XHQjZW5kaWZcblx0XHRpcnJhZGlhbmNlICs9IGxpZ2h0TWFwSXJyYWRpYW5jZTtcblx0I2VuZGlmXG5cdCNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgJiYgZGVmaW5lZCggU1RBTkRBUkQgKSAmJiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWIClcblx0XHRpYmxJcnJhZGlhbmNlICs9IGdldExpZ2h0UHJvYmVJbmRpcmVjdElycmFkaWFuY2UoIGdlb21ldHJ5LCBtYXhNaXBMZXZlbCApO1xuXHQjZW5kaWZcbiNlbmRpZlxuI2lmIGRlZmluZWQoIFVTRV9FTlZNQVAgKSAmJiBkZWZpbmVkKCBSRV9JbmRpcmVjdFNwZWN1bGFyIClcblx0cmFkaWFuY2UgKz0gZ2V0TGlnaHRQcm9iZUluZGlyZWN0UmFkaWFuY2UoIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5Lm5vcm1hbCwgbWF0ZXJpYWwuc3BlY3VsYXJSb3VnaG5lc3MsIG1heE1pcExldmVsICk7XG5cdCNpZmRlZiBDTEVBUkNPQVRcblx0XHRjbGVhcmNvYXRSYWRpYW5jZSArPSBnZXRMaWdodFByb2JlSW5kaXJlY3RSYWRpYW5jZSggZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MsIG1heE1pcExldmVsICk7XG5cdCNlbmRpZlxuI2VuZGlmIixsaWdodHNfZnJhZ21lbnRfZW5kOiIjaWYgZGVmaW5lZCggUkVfSW5kaXJlY3REaWZmdXNlIClcblx0UkVfSW5kaXJlY3REaWZmdXNlKCBpcnJhZGlhbmNlLCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7XG4jZW5kaWZcbiNpZiBkZWZpbmVkKCBSRV9JbmRpcmVjdFNwZWN1bGFyIClcblx0UkVfSW5kaXJlY3RTcGVjdWxhciggcmFkaWFuY2UsIGlibElycmFkaWFuY2UsIGNsZWFyY29hdFJhZGlhbmNlLCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7XG4jZW5kaWYiLGxvZ2RlcHRoYnVmX2ZyYWdtZW50OiIjaWYgZGVmaW5lZCggVVNFX0xPR0RFUFRIQlVGICkgJiYgZGVmaW5lZCggVVNFX0xPR0RFUFRIQlVGX0VYVCApXG5cdGdsX0ZyYWdEZXB0aEVYVCA9IHZJc1BlcnNwZWN0aXZlID09IDAuMCA/IGdsX0ZyYWdDb29yZC56IDogbG9nMiggdkZyYWdEZXB0aCApICogbG9nRGVwdGhCdWZGQyAqIDAuNTtcbiNlbmRpZiIsbG9nZGVwdGhidWZfcGFyc19mcmFnbWVudDoiI2lmIGRlZmluZWQoIFVTRV9MT0dERVBUSEJVRiApICYmIGRlZmluZWQoIFVTRV9MT0dERVBUSEJVRl9FWFQgKVxuXHR1bmlmb3JtIGZsb2F0IGxvZ0RlcHRoQnVmRkM7XG5cdHZhcnlpbmcgZmxvYXQgdkZyYWdEZXB0aDtcblx0dmFyeWluZyBmbG9hdCB2SXNQZXJzcGVjdGl2ZTtcbiNlbmRpZiIsbG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfTE9HREVQVEhCVUZcblx0I2lmZGVmIFVTRV9MT0dERVBUSEJVRl9FWFRcblx0XHR2YXJ5aW5nIGZsb2F0IHZGcmFnRGVwdGg7XG5cdFx0dmFyeWluZyBmbG9hdCB2SXNQZXJzcGVjdGl2ZTtcblx0I2Vsc2Vcblx0XHR1bmlmb3JtIGZsb2F0IGxvZ0RlcHRoQnVmRkM7XG5cdCNlbmRpZlxuI2VuZGlmIixsb2dkZXB0aGJ1Zl92ZXJ0ZXg6IiNpZmRlZiBVU0VfTE9HREVQVEhCVUZcblx0I2lmZGVmIFVTRV9MT0dERVBUSEJVRl9FWFRcblx0XHR2RnJhZ0RlcHRoID0gMS4wICsgZ2xfUG9zaXRpb24udztcblx0XHR2SXNQZXJzcGVjdGl2ZSA9IGZsb2F0KCBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICkgKTtcblx0I2Vsc2Vcblx0XHRpZiAoIGlzUGVyc3BlY3RpdmVNYXRyaXgoIHByb2plY3Rpb25NYXRyaXggKSApIHtcblx0XHRcdGdsX1Bvc2l0aW9uLnogPSBsb2cyKCBtYXgoIEVQU0lMT04sIGdsX1Bvc2l0aW9uLncgKyAxLjAgKSApICogbG9nRGVwdGhCdWZGQyAtIDEuMDtcblx0XHRcdGdsX1Bvc2l0aW9uLnogKj0gZ2xfUG9zaXRpb24udztcblx0XHR9XG5cdCNlbmRpZlxuI2VuZGlmIixtYXBfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfTUFQXG5cdHZlYzQgdGV4ZWxDb2xvciA9IHRleHR1cmUyRCggbWFwLCB2VXYgKTtcblx0dGV4ZWxDb2xvciA9IG1hcFRleGVsVG9MaW5lYXIoIHRleGVsQ29sb3IgKTtcblx0ZGlmZnVzZUNvbG9yICo9IHRleGVsQ29sb3I7XG4jZW5kaWYiLG1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX01BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBtYXA7XG4jZW5kaWYiLG1hcF9wYXJ0aWNsZV9mcmFnbWVudDoiI2lmIGRlZmluZWQoIFVTRV9NQVAgKSB8fCBkZWZpbmVkKCBVU0VfQUxQSEFNQVAgKVxuXHR2ZWMyIHV2ID0gKCB1dlRyYW5zZm9ybSAqIHZlYzMoIGdsX1BvaW50Q29vcmQueCwgMS4wIC0gZ2xfUG9pbnRDb29yZC55LCAxICkgKS54eTtcbiNlbmRpZlxuI2lmZGVmIFVTRV9NQVBcblx0dmVjNCBtYXBUZXhlbCA9IHRleHR1cmUyRCggbWFwLCB1diApO1xuXHRkaWZmdXNlQ29sb3IgKj0gbWFwVGV4ZWxUb0xpbmVhciggbWFwVGV4ZWwgKTtcbiNlbmRpZlxuI2lmZGVmIFVTRV9BTFBIQU1BUFxuXHRkaWZmdXNlQ29sb3IuYSAqPSB0ZXh0dXJlMkQoIGFscGhhTWFwLCB1diApLmc7XG4jZW5kaWYiLG1hcF9wYXJ0aWNsZV9wYXJzX2ZyYWdtZW50OiIjaWYgZGVmaW5lZCggVVNFX01BUCApIHx8IGRlZmluZWQoIFVTRV9BTFBIQU1BUCApXG5cdHVuaWZvcm0gbWF0MyB1dlRyYW5zZm9ybTtcbiNlbmRpZlxuI2lmZGVmIFVTRV9NQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgbWFwO1xuI2VuZGlmXG4jaWZkZWYgVVNFX0FMUEhBTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGFscGhhTWFwO1xuI2VuZGlmIixtZXRhbG5lc3NtYXBfZnJhZ21lbnQ6ImZsb2F0IG1ldGFsbmVzc0ZhY3RvciA9IG1ldGFsbmVzcztcbiNpZmRlZiBVU0VfTUVUQUxORVNTTUFQXG5cdHZlYzQgdGV4ZWxNZXRhbG5lc3MgPSB0ZXh0dXJlMkQoIG1ldGFsbmVzc01hcCwgdlV2ICk7XG5cdG1ldGFsbmVzc0ZhY3RvciAqPSB0ZXhlbE1ldGFsbmVzcy5iO1xuI2VuZGlmIixtZXRhbG5lc3NtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9NRVRBTE5FU1NNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgbWV0YWxuZXNzTWFwO1xuI2VuZGlmIixtb3JwaG5vcm1hbF92ZXJ0ZXg6IiNpZmRlZiBVU0VfTU9SUEhOT1JNQUxTXG5cdG9iamVjdE5vcm1hbCAqPSBtb3JwaFRhcmdldEJhc2VJbmZsdWVuY2U7XG5cdG9iamVjdE5vcm1hbCArPSBtb3JwaE5vcm1hbDAgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDAgXTtcblx0b2JqZWN0Tm9ybWFsICs9IG1vcnBoTm9ybWFsMSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMSBdO1xuXHRvYmplY3ROb3JtYWwgKz0gbW9ycGhOb3JtYWwyICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAyIF07XG5cdG9iamVjdE5vcm1hbCArPSBtb3JwaE5vcm1hbDMgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDMgXTtcbiNlbmRpZiIsbW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfTU9SUEhUQVJHRVRTXG5cdHVuaWZvcm0gZmxvYXQgbW9ycGhUYXJnZXRCYXNlSW5mbHVlbmNlO1xuXHQjaWZuZGVmIFVTRV9NT1JQSE5PUk1BTFNcblx0XHR1bmlmb3JtIGZsb2F0IG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgOCBdO1xuXHQjZWxzZVxuXHRcdHVuaWZvcm0gZmxvYXQgbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA0IF07XG5cdCNlbmRpZlxuI2VuZGlmIixtb3JwaHRhcmdldF92ZXJ0ZXg6IiNpZmRlZiBVU0VfTU9SUEhUQVJHRVRTXG5cdHRyYW5zZm9ybWVkICo9IG1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZTtcblx0dHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQwICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAwIF07XG5cdHRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0MSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMSBdO1xuXHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDIgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDIgXTtcblx0dHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQzICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAzIF07XG5cdCNpZm5kZWYgVVNFX01PUlBITk9STUFMU1xuXHRcdHRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0NCAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNCBdO1xuXHRcdHRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0NSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNSBdO1xuXHRcdHRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0NiAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNiBdO1xuXHRcdHRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0NyAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNyBdO1xuXHQjZW5kaWZcbiNlbmRpZiIsbm9ybWFsX2ZyYWdtZW50X2JlZ2luOiIjaWZkZWYgRkxBVF9TSEFERURcblx0dmVjMyBmZHggPSB2ZWMzKCBkRmR4KCB2Vmlld1Bvc2l0aW9uLnggKSwgZEZkeCggdlZpZXdQb3NpdGlvbi55ICksIGRGZHgoIHZWaWV3UG9zaXRpb24ueiApICk7XG5cdHZlYzMgZmR5ID0gdmVjMyggZEZkeSggdlZpZXdQb3NpdGlvbi54ICksIGRGZHkoIHZWaWV3UG9zaXRpb24ueSApLCBkRmR5KCB2Vmlld1Bvc2l0aW9uLnogKSApO1xuXHR2ZWMzIG5vcm1hbCA9IG5vcm1hbGl6ZSggY3Jvc3MoIGZkeCwgZmR5ICkgKTtcbiNlbHNlXG5cdHZlYzMgbm9ybWFsID0gbm9ybWFsaXplKCB2Tm9ybWFsICk7XG5cdCNpZmRlZiBET1VCTEVfU0lERURcblx0XHRub3JtYWwgPSBub3JtYWwgKiAoIGZsb2F0KCBnbF9Gcm9udEZhY2luZyApICogMi4wIC0gMS4wICk7XG5cdCNlbmRpZlxuXHQjaWZkZWYgVVNFX1RBTkdFTlRcblx0XHR2ZWMzIHRhbmdlbnQgPSBub3JtYWxpemUoIHZUYW5nZW50ICk7XG5cdFx0dmVjMyBiaXRhbmdlbnQgPSBub3JtYWxpemUoIHZCaXRhbmdlbnQgKTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR0YW5nZW50ID0gdGFuZ2VudCAqICggZmxvYXQoIGdsX0Zyb250RmFjaW5nICkgKiAyLjAgLSAxLjAgKTtcblx0XHRcdGJpdGFuZ2VudCA9IGJpdGFuZ2VudCAqICggZmxvYXQoIGdsX0Zyb250RmFjaW5nICkgKiAyLjAgLSAxLjAgKTtcblx0XHQjZW5kaWZcblx0XHQjaWYgZGVmaW5lZCggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApIHx8IGRlZmluZWQoIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQIClcblx0XHRcdG1hdDMgdlRCTiA9IG1hdDMoIHRhbmdlbnQsIGJpdGFuZ2VudCwgbm9ybWFsICk7XG5cdFx0I2VuZGlmXG5cdCNlbmRpZlxuI2VuZGlmXG52ZWMzIGdlb21ldHJ5Tm9ybWFsID0gbm9ybWFsOyIsbm9ybWFsX2ZyYWdtZW50X21hcHM6IiNpZmRlZiBPQkpFQ1RTUEFDRV9OT1JNQUxNQVBcblx0bm9ybWFsID0gdGV4dHVyZTJEKCBub3JtYWxNYXAsIHZVdiApLnh5eiAqIDIuMCAtIDEuMDtcblx0I2lmZGVmIEZMSVBfU0lERURcblx0XHRub3JtYWwgPSAtIG5vcm1hbDtcblx0I2VuZGlmXG5cdCNpZmRlZiBET1VCTEVfU0lERURcblx0XHRub3JtYWwgPSBub3JtYWwgKiAoIGZsb2F0KCBnbF9Gcm9udEZhY2luZyApICogMi4wIC0gMS4wICk7XG5cdCNlbmRpZlxuXHRub3JtYWwgPSBub3JtYWxpemUoIG5vcm1hbE1hdHJpeCAqIG5vcm1hbCApO1xuI2VsaWYgZGVmaW5lZCggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApXG5cdHZlYzMgbWFwTiA9IHRleHR1cmUyRCggbm9ybWFsTWFwLCB2VXYgKS54eXogKiAyLjAgLSAxLjA7XG5cdG1hcE4ueHkgKj0gbm9ybWFsU2NhbGU7XG5cdCNpZmRlZiBVU0VfVEFOR0VOVFxuXHRcdG5vcm1hbCA9IG5vcm1hbGl6ZSggdlRCTiAqIG1hcE4gKTtcblx0I2Vsc2Vcblx0XHRub3JtYWwgPSBwZXJ0dXJiTm9ybWFsMkFyYiggLXZWaWV3UG9zaXRpb24sIG5vcm1hbCwgbWFwTiApO1xuXHQjZW5kaWZcbiNlbGlmIGRlZmluZWQoIFVTRV9CVU1QTUFQIClcblx0bm9ybWFsID0gcGVydHVyYk5vcm1hbEFyYiggLXZWaWV3UG9zaXRpb24sIG5vcm1hbCwgZEhkeHlfZndkKCkgKTtcbiNlbmRpZiIsbm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfTk9STUFMTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIG5vcm1hbE1hcDtcblx0dW5pZm9ybSB2ZWMyIG5vcm1hbFNjYWxlO1xuI2VuZGlmXG4jaWZkZWYgT0JKRUNUU1BBQ0VfTk9STUFMTUFQXG5cdHVuaWZvcm0gbWF0MyBub3JtYWxNYXRyaXg7XG4jZW5kaWZcbiNpZiAhIGRlZmluZWQgKCBVU0VfVEFOR0VOVCApICYmICggZGVmaW5lZCAoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKSB8fCBkZWZpbmVkICggVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVAgKSApXG5cdHZlYzMgcGVydHVyYk5vcm1hbDJBcmIoIHZlYzMgZXllX3BvcywgdmVjMyBzdXJmX25vcm0sIHZlYzMgbWFwTiApIHtcblx0XHR2ZWMzIHEwID0gdmVjMyggZEZkeCggZXllX3Bvcy54ICksIGRGZHgoIGV5ZV9wb3MueSApLCBkRmR4KCBleWVfcG9zLnogKSApO1xuXHRcdHZlYzMgcTEgPSB2ZWMzKCBkRmR5KCBleWVfcG9zLnggKSwgZEZkeSggZXllX3Bvcy55ICksIGRGZHkoIGV5ZV9wb3MueiApICk7XG5cdFx0dmVjMiBzdDAgPSBkRmR4KCB2VXYuc3QgKTtcblx0XHR2ZWMyIHN0MSA9IGRGZHkoIHZVdi5zdCApO1xuXHRcdGZsb2F0IHNjYWxlID0gc2lnbiggc3QxLnQgKiBzdDAucyAtIHN0MC50ICogc3QxLnMgKTtcblx0XHR2ZWMzIFMgPSBub3JtYWxpemUoICggcTAgKiBzdDEudCAtIHExICogc3QwLnQgKSAqIHNjYWxlICk7XG5cdFx0dmVjMyBUID0gbm9ybWFsaXplKCAoIC0gcTAgKiBzdDEucyArIHExICogc3QwLnMgKSAqIHNjYWxlICk7XG5cdFx0dmVjMyBOID0gbm9ybWFsaXplKCBzdXJmX25vcm0gKTtcblx0XHRtYXQzIHRzbiA9IG1hdDMoIFMsIFQsIE4gKTtcblx0XHRtYXBOLnh5ICo9ICggZmxvYXQoIGdsX0Zyb250RmFjaW5nICkgKiAyLjAgLSAxLjAgKTtcblx0XHRyZXR1cm4gbm9ybWFsaXplKCB0c24gKiBtYXBOICk7XG5cdH1cbiNlbmRpZiIsY2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9iZWdpbjoiI2lmZGVmIENMRUFSQ09BVFxuXHR2ZWMzIGNsZWFyY29hdE5vcm1hbCA9IGdlb21ldHJ5Tm9ybWFsO1xuI2VuZGlmIixjbGVhcmNvYXRfbm9ybWFsX2ZyYWdtZW50X21hcHM6IiNpZmRlZiBVU0VfQ0xFQVJDT0FUX05PUk1BTE1BUFxuXHR2ZWMzIGNsZWFyY29hdE1hcE4gPSB0ZXh0dXJlMkQoIGNsZWFyY29hdE5vcm1hbE1hcCwgdlV2ICkueHl6ICogMi4wIC0gMS4wO1xuXHRjbGVhcmNvYXRNYXBOLnh5ICo9IGNsZWFyY29hdE5vcm1hbFNjYWxlO1xuXHQjaWZkZWYgVVNFX1RBTkdFTlRcblx0XHRjbGVhcmNvYXROb3JtYWwgPSBub3JtYWxpemUoIHZUQk4gKiBjbGVhcmNvYXRNYXBOICk7XG5cdCNlbHNlXG5cdFx0Y2xlYXJjb2F0Tm9ybWFsID0gcGVydHVyYk5vcm1hbDJBcmIoIC0gdlZpZXdQb3NpdGlvbiwgY2xlYXJjb2F0Tm9ybWFsLCBjbGVhcmNvYXRNYXBOICk7XG5cdCNlbmRpZlxuI2VuZGlmIixjbGVhcmNvYXRfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9DTEVBUkNPQVRNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgY2xlYXJjb2F0TWFwO1xuI2VuZGlmXG4jaWZkZWYgVVNFX0NMRUFSQ09BVF9ST1VHSE5FU1NNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgY2xlYXJjb2F0Um91Z2huZXNzTWFwO1xuI2VuZGlmXG4jaWZkZWYgVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgY2xlYXJjb2F0Tm9ybWFsTWFwO1xuXHR1bmlmb3JtIHZlYzIgY2xlYXJjb2F0Tm9ybWFsU2NhbGU7XG4jZW5kaWYiLHBhY2tpbmc6InZlYzMgcGFja05vcm1hbFRvUkdCKCBjb25zdCBpbiB2ZWMzIG5vcm1hbCApIHtcblx0cmV0dXJuIG5vcm1hbGl6ZSggbm9ybWFsICkgKiAwLjUgKyAwLjU7XG59XG52ZWMzIHVucGFja1JHQlRvTm9ybWFsKCBjb25zdCBpbiB2ZWMzIHJnYiApIHtcblx0cmV0dXJuIDIuMCAqIHJnYi54eXogLSAxLjA7XG59XG5jb25zdCBmbG9hdCBQYWNrVXBzY2FsZSA9IDI1Ni4gLyAyNTUuO2NvbnN0IGZsb2F0IFVucGFja0Rvd25zY2FsZSA9IDI1NS4gLyAyNTYuO1xuY29uc3QgdmVjMyBQYWNrRmFjdG9ycyA9IHZlYzMoIDI1Ni4gKiAyNTYuICogMjU2LiwgMjU2LiAqIDI1Ni4sIDI1Ni4gKTtcbmNvbnN0IHZlYzQgVW5wYWNrRmFjdG9ycyA9IFVucGFja0Rvd25zY2FsZSAvIHZlYzQoIFBhY2tGYWN0b3JzLCAxLiApO1xuY29uc3QgZmxvYXQgU2hpZnRSaWdodDggPSAxLiAvIDI1Ni47XG52ZWM0IHBhY2tEZXB0aFRvUkdCQSggY29uc3QgaW4gZmxvYXQgdiApIHtcblx0dmVjNCByID0gdmVjNCggZnJhY3QoIHYgKiBQYWNrRmFjdG9ycyApLCB2ICk7XG5cdHIueXp3IC09IHIueHl6ICogU2hpZnRSaWdodDg7XHRyZXR1cm4gciAqIFBhY2tVcHNjYWxlO1xufVxuZmxvYXQgdW5wYWNrUkdCQVRvRGVwdGgoIGNvbnN0IGluIHZlYzQgdiApIHtcblx0cmV0dXJuIGRvdCggdiwgVW5wYWNrRmFjdG9ycyApO1xufVxudmVjNCBwYWNrMkhhbGZUb1JHQkEoIHZlYzIgdiApIHtcblx0dmVjNCByID0gdmVjNCggdi54LCBmcmFjdCggdi54ICogMjU1LjAgKSwgdi55LCBmcmFjdCggdi55ICogMjU1LjAgKSk7XG5cdHJldHVybiB2ZWM0KCByLnggLSByLnkgLyAyNTUuMCwgci55LCByLnogLSByLncgLyAyNTUuMCwgci53KTtcbn1cbnZlYzIgdW5wYWNrUkdCQVRvMkhhbGYoIHZlYzQgdiApIHtcblx0cmV0dXJuIHZlYzIoIHYueCArICggdi55IC8gMjU1LjAgKSwgdi56ICsgKCB2LncgLyAyNTUuMCApICk7XG59XG5mbG9hdCB2aWV3WlRvT3J0aG9ncmFwaGljRGVwdGgoIGNvbnN0IGluIGZsb2F0IHZpZXdaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7XG5cdHJldHVybiAoIHZpZXdaICsgbmVhciApIC8gKCBuZWFyIC0gZmFyICk7XG59XG5mbG9hdCBvcnRob2dyYXBoaWNEZXB0aFRvVmlld1ooIGNvbnN0IGluIGZsb2F0IGxpbmVhckNsaXBaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7XG5cdHJldHVybiBsaW5lYXJDbGlwWiAqICggbmVhciAtIGZhciApIC0gbmVhcjtcbn1cbmZsb2F0IHZpZXdaVG9QZXJzcGVjdGl2ZURlcHRoKCBjb25zdCBpbiBmbG9hdCB2aWV3WiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkge1xuXHRyZXR1cm4gKCggbmVhciArIHZpZXdaICkgKiBmYXIgKSAvICgoIGZhciAtIG5lYXIgKSAqIHZpZXdaICk7XG59XG5mbG9hdCBwZXJzcGVjdGl2ZURlcHRoVG9WaWV3WiggY29uc3QgaW4gZmxvYXQgaW52Q2xpcFosIGNvbnN0IGluIGZsb2F0IG5lYXIsIGNvbnN0IGluIGZsb2F0IGZhciApIHtcblx0cmV0dXJuICggbmVhciAqIGZhciApIC8gKCAoIGZhciAtIG5lYXIgKSAqIGludkNsaXBaIC0gZmFyICk7XG59IixwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50OiIjaWZkZWYgUFJFTVVMVElQTElFRF9BTFBIQVxuXHRnbF9GcmFnQ29sb3IucmdiICo9IGdsX0ZyYWdDb2xvci5hO1xuI2VuZGlmIixwcm9qZWN0X3ZlcnRleDoidmVjNCBtdlBvc2l0aW9uID0gdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApO1xuI2lmZGVmIFVTRV9JTlNUQU5DSU5HXG5cdG12UG9zaXRpb24gPSBpbnN0YW5jZU1hdHJpeCAqIG12UG9zaXRpb247XG4jZW5kaWZcbm12UG9zaXRpb24gPSBtb2RlbFZpZXdNYXRyaXggKiBtdlBvc2l0aW9uO1xuZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbXZQb3NpdGlvbjsiLGRpdGhlcmluZ19mcmFnbWVudDoiI2lmZGVmIERJVEhFUklOR1xuXHRnbF9GcmFnQ29sb3IucmdiID0gZGl0aGVyaW5nKCBnbF9GcmFnQ29sb3IucmdiICk7XG4jZW5kaWYiLGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50OiIjaWZkZWYgRElUSEVSSU5HXG5cdHZlYzMgZGl0aGVyaW5nKCB2ZWMzIGNvbG9yICkge1xuXHRcdGZsb2F0IGdyaWRfcG9zaXRpb24gPSByYW5kKCBnbF9GcmFnQ29vcmQueHkgKTtcblx0XHR2ZWMzIGRpdGhlcl9zaGlmdF9SR0IgPSB2ZWMzKCAwLjI1IC8gMjU1LjAsIC0wLjI1IC8gMjU1LjAsIDAuMjUgLyAyNTUuMCApO1xuXHRcdGRpdGhlcl9zaGlmdF9SR0IgPSBtaXgoIDIuMCAqIGRpdGhlcl9zaGlmdF9SR0IsIC0yLjAgKiBkaXRoZXJfc2hpZnRfUkdCLCBncmlkX3Bvc2l0aW9uICk7XG5cdFx0cmV0dXJuIGNvbG9yICsgZGl0aGVyX3NoaWZ0X1JHQjtcblx0fVxuI2VuZGlmIixyb3VnaG5lc3NtYXBfZnJhZ21lbnQ6ImZsb2F0IHJvdWdobmVzc0ZhY3RvciA9IHJvdWdobmVzcztcbiNpZmRlZiBVU0VfUk9VR0hORVNTTUFQXG5cdHZlYzQgdGV4ZWxSb3VnaG5lc3MgPSB0ZXh0dXJlMkQoIHJvdWdobmVzc01hcCwgdlV2ICk7XG5cdHJvdWdobmVzc0ZhY3RvciAqPSB0ZXhlbFJvdWdobmVzcy5nO1xuI2VuZGlmIixyb3VnaG5lc3NtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9ST1VHSE5FU1NNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgcm91Z2huZXNzTWFwO1xuI2VuZGlmIixzaGFkb3dtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9TSEFET1dNQVBcblx0I2lmIE5VTV9ESVJfTElHSFRfU0hBRE9XUyA+IDBcblx0XHR1bmlmb3JtIHNhbXBsZXIyRCBkaXJlY3Rpb25hbFNoYWRvd01hcFsgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07XG5cdFx0dmFyeWluZyB2ZWM0IHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTtcblx0XHRzdHJ1Y3QgRGlyZWN0aW9uYWxMaWdodFNoYWRvdyB7XG5cdFx0XHRmbG9hdCBzaGFkb3dCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93Tm9ybWFsQmlhcztcblx0XHRcdGZsb2F0IHNoYWRvd1JhZGl1cztcblx0XHRcdHZlYzIgc2hhZG93TWFwU2l6ZTtcblx0XHR9O1xuXHRcdHVuaWZvcm0gRGlyZWN0aW9uYWxMaWdodFNoYWRvdyBkaXJlY3Rpb25hbExpZ2h0U2hhZG93c1sgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07XG5cdCNlbmRpZlxuXHQjaWYgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDBcblx0XHR1bmlmb3JtIHNhbXBsZXIyRCBzcG90U2hhZG93TWFwWyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07XG5cdFx0dmFyeWluZyB2ZWM0IHZTcG90U2hhZG93Q29vcmRbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTtcblx0XHRzdHJ1Y3QgU3BvdExpZ2h0U2hhZG93IHtcblx0XHRcdGZsb2F0IHNoYWRvd0JpYXM7XG5cdFx0XHRmbG9hdCBzaGFkb3dOb3JtYWxCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93UmFkaXVzO1xuXHRcdFx0dmVjMiBzaGFkb3dNYXBTaXplO1xuXHRcdH07XG5cdFx0dW5pZm9ybSBTcG90TGlnaHRTaGFkb3cgc3BvdExpZ2h0U2hhZG93c1sgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdO1xuXHQjZW5kaWZcblx0I2lmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMFxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIHBvaW50U2hhZG93TWFwWyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHZhcnlpbmcgdmVjNCB2UG9pbnRTaGFkb3dDb29yZFsgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTtcblx0XHRzdHJ1Y3QgUG9pbnRMaWdodFNoYWRvdyB7XG5cdFx0XHRmbG9hdCBzaGFkb3dCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93Tm9ybWFsQmlhcztcblx0XHRcdGZsb2F0IHNoYWRvd1JhZGl1cztcblx0XHRcdHZlYzIgc2hhZG93TWFwU2l6ZTtcblx0XHRcdGZsb2F0IHNoYWRvd0NhbWVyYU5lYXI7XG5cdFx0XHRmbG9hdCBzaGFkb3dDYW1lcmFGYXI7XG5cdFx0fTtcblx0XHR1bmlmb3JtIFBvaW50TGlnaHRTaGFkb3cgcG9pbnRMaWdodFNoYWRvd3NbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07XG5cdCNlbmRpZlxuXHRmbG9hdCB0ZXh0dXJlMkRDb21wYXJlKCBzYW1wbGVyMkQgZGVwdGhzLCB2ZWMyIHV2LCBmbG9hdCBjb21wYXJlICkge1xuXHRcdHJldHVybiBzdGVwKCBjb21wYXJlLCB1bnBhY2tSR0JBVG9EZXB0aCggdGV4dHVyZTJEKCBkZXB0aHMsIHV2ICkgKSApO1xuXHR9XG5cdHZlYzIgdGV4dHVyZTJERGlzdHJpYnV0aW9uKCBzYW1wbGVyMkQgc2hhZG93LCB2ZWMyIHV2ICkge1xuXHRcdHJldHVybiB1bnBhY2tSR0JBVG8ySGFsZiggdGV4dHVyZTJEKCBzaGFkb3csIHV2ICkgKTtcblx0fVxuXHRmbG9hdCBWU01TaGFkb3cgKHNhbXBsZXIyRCBzaGFkb3csIHZlYzIgdXYsIGZsb2F0IGNvbXBhcmUgKXtcblx0XHRmbG9hdCBvY2NsdXNpb24gPSAxLjA7XG5cdFx0dmVjMiBkaXN0cmlidXRpb24gPSB0ZXh0dXJlMkREaXN0cmlidXRpb24oIHNoYWRvdywgdXYgKTtcblx0XHRmbG9hdCBoYXJkX3NoYWRvdyA9IHN0ZXAoIGNvbXBhcmUgLCBkaXN0cmlidXRpb24ueCApO1xuXHRcdGlmIChoYXJkX3NoYWRvdyAhPSAxLjAgKSB7XG5cdFx0XHRmbG9hdCBkaXN0YW5jZSA9IGNvbXBhcmUgLSBkaXN0cmlidXRpb24ueCA7XG5cdFx0XHRmbG9hdCB2YXJpYW5jZSA9IG1heCggMC4wMDAwMCwgZGlzdHJpYnV0aW9uLnkgKiBkaXN0cmlidXRpb24ueSApO1xuXHRcdFx0ZmxvYXQgc29mdG5lc3NfcHJvYmFiaWxpdHkgPSB2YXJpYW5jZSAvICh2YXJpYW5jZSArIGRpc3RhbmNlICogZGlzdGFuY2UgKTtcdFx0XHRzb2Z0bmVzc19wcm9iYWJpbGl0eSA9IGNsYW1wKCAoIHNvZnRuZXNzX3Byb2JhYmlsaXR5IC0gMC4zICkgLyAoIDAuOTUgLSAwLjMgKSwgMC4wLCAxLjAgKTtcdFx0XHRvY2NsdXNpb24gPSBjbGFtcCggbWF4KCBoYXJkX3NoYWRvdywgc29mdG5lc3NfcHJvYmFiaWxpdHkgKSwgMC4wLCAxLjAgKTtcblx0XHR9XG5cdFx0cmV0dXJuIG9jY2x1c2lvbjtcblx0fVxuXHRmbG9hdCBnZXRTaGFkb3coIHNhbXBsZXIyRCBzaGFkb3dNYXAsIHZlYzIgc2hhZG93TWFwU2l6ZSwgZmxvYXQgc2hhZG93QmlhcywgZmxvYXQgc2hhZG93UmFkaXVzLCB2ZWM0IHNoYWRvd0Nvb3JkICkge1xuXHRcdGZsb2F0IHNoYWRvdyA9IDEuMDtcblx0XHRzaGFkb3dDb29yZC54eXogLz0gc2hhZG93Q29vcmQudztcblx0XHRzaGFkb3dDb29yZC56ICs9IHNoYWRvd0JpYXM7XG5cdFx0YnZlYzQgaW5GcnVzdHVtVmVjID0gYnZlYzQgKCBzaGFkb3dDb29yZC54ID49IDAuMCwgc2hhZG93Q29vcmQueCA8PSAxLjAsIHNoYWRvd0Nvb3JkLnkgPj0gMC4wLCBzaGFkb3dDb29yZC55IDw9IDEuMCApO1xuXHRcdGJvb2wgaW5GcnVzdHVtID0gYWxsKCBpbkZydXN0dW1WZWMgKTtcblx0XHRidmVjMiBmcnVzdHVtVGVzdFZlYyA9IGJ2ZWMyKCBpbkZydXN0dW0sIHNoYWRvd0Nvb3JkLnogPD0gMS4wICk7XG5cdFx0Ym9vbCBmcnVzdHVtVGVzdCA9IGFsbCggZnJ1c3R1bVRlc3RWZWMgKTtcblx0XHRpZiAoIGZydXN0dW1UZXN0ICkge1xuXHRcdCNpZiBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9QQ0YgKVxuXHRcdFx0dmVjMiB0ZXhlbFNpemUgPSB2ZWMyKCAxLjAgKSAvIHNoYWRvd01hcFNpemU7XG5cdFx0XHRmbG9hdCBkeDAgPSAtIHRleGVsU2l6ZS54ICogc2hhZG93UmFkaXVzO1xuXHRcdFx0ZmxvYXQgZHkwID0gLSB0ZXhlbFNpemUueSAqIHNoYWRvd1JhZGl1cztcblx0XHRcdGZsb2F0IGR4MSA9ICsgdGV4ZWxTaXplLnggKiBzaGFkb3dSYWRpdXM7XG5cdFx0XHRmbG9hdCBkeTEgPSArIHRleGVsU2l6ZS55ICogc2hhZG93UmFkaXVzO1xuXHRcdFx0ZmxvYXQgZHgyID0gZHgwIC8gMi4wO1xuXHRcdFx0ZmxvYXQgZHkyID0gZHkwIC8gMi4wO1xuXHRcdFx0ZmxvYXQgZHgzID0gZHgxIC8gMi4wO1xuXHRcdFx0ZmxvYXQgZHkzID0gZHkxIC8gMi4wO1xuXHRcdFx0c2hhZG93ID0gKFxuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgwLCBkeTAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkwICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDEsIGR5MCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgyLCBkeTIgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkyICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDMsIGR5MiApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgwLCAwLjAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MiwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDMsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgxLCAwLjAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MiwgZHkzICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCAwLjAsIGR5MyApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgzLCBkeTMgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MCwgZHkxICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCAwLjAsIGR5MSApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgxLCBkeTEgKSwgc2hhZG93Q29vcmQueiApXG5cdFx0XHQpICogKCAxLjAgLyAxNy4wICk7XG5cdFx0I2VsaWYgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfUENGX1NPRlQgKVxuXHRcdFx0dmVjMiB0ZXhlbFNpemUgPSB2ZWMyKCAxLjAgKSAvIHNoYWRvd01hcFNpemU7XG5cdFx0XHRmbG9hdCBkeCA9IHRleGVsU2l6ZS54O1xuXHRcdFx0ZmxvYXQgZHkgPSB0ZXhlbFNpemUueTtcblx0XHRcdHZlYzIgdXYgPSBzaGFkb3dDb29yZC54eTtcblx0XHRcdHZlYzIgZiA9IGZyYWN0KCB1diAqIHNoYWRvd01hcFNpemUgKyAwLjUgKTtcblx0XHRcdHV2IC09IGYgKiB0ZXhlbFNpemU7XG5cdFx0XHRzaGFkb3cgPSAoXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYsIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCBkeCwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAwLjAsIGR5ICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB0ZXhlbFNpemUsIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdG1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIC1keCwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSwgXG5cdFx0XHRcdFx0IHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAyLjAgKiBkeCwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSxcblx0XHRcdFx0XHQgZi54ICkgK1xuXHRcdFx0XHRtaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAtZHgsIGR5ICksIHNoYWRvd0Nvb3JkLnogKSwgXG5cdFx0XHRcdFx0IHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAyLjAgKiBkeCwgZHkgKSwgc2hhZG93Q29vcmQueiApLFxuXHRcdFx0XHRcdCBmLnggKSArXG5cdFx0XHRcdG1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDAuMCwgLWR5ICksIHNoYWRvd0Nvb3JkLnogKSwgXG5cdFx0XHRcdFx0IHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAwLjAsIDIuMCAqIGR5ICksIHNoYWRvd0Nvb3JkLnogKSxcblx0XHRcdFx0XHQgZi55ICkgK1xuXHRcdFx0XHRtaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCBkeCwgLWR5ICksIHNoYWRvd0Nvb3JkLnogKSwgXG5cdFx0XHRcdFx0IHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCBkeCwgMi4wICogZHkgKSwgc2hhZG93Q29vcmQueiApLFxuXHRcdFx0XHRcdCBmLnkgKSArXG5cdFx0XHRcdG1peCggbWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggLWR4LCAtZHkgKSwgc2hhZG93Q29vcmQueiApLCBcblx0XHRcdFx0XHRcdCAgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDIuMCAqIGR4LCAtZHkgKSwgc2hhZG93Q29vcmQueiApLFxuXHRcdFx0XHRcdFx0ICBmLnggKSxcblx0XHRcdFx0XHQgbWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggLWR4LCAyLjAgKiBkeSApLCBzaGFkb3dDb29yZC56ICksIFxuXHRcdFx0XHRcdFx0ICB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMi4wICogZHgsIDIuMCAqIGR5ICksIHNoYWRvd0Nvb3JkLnogKSxcblx0XHRcdFx0XHRcdCAgZi54ICksXG5cdFx0XHRcdFx0IGYueSApXG5cdFx0XHQpICogKCAxLjAgLyA5LjAgKTtcblx0XHQjZWxpZiBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9WU00gKVxuXHRcdFx0c2hhZG93ID0gVlNNU2hhZG93KCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5LCBzaGFkb3dDb29yZC56ICk7XG5cdFx0I2Vsc2Vcblx0XHRcdHNoYWRvdyA9IHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHksIHNoYWRvd0Nvb3JkLnogKTtcblx0XHQjZW5kaWZcblx0XHR9XG5cdFx0cmV0dXJuIHNoYWRvdztcblx0fVxuXHR2ZWMyIGN1YmVUb1VWKCB2ZWMzIHYsIGZsb2F0IHRleGVsU2l6ZVkgKSB7XG5cdFx0dmVjMyBhYnNWID0gYWJzKCB2ICk7XG5cdFx0ZmxvYXQgc2NhbGVUb0N1YmUgPSAxLjAgLyBtYXgoIGFic1YueCwgbWF4KCBhYnNWLnksIGFic1YueiApICk7XG5cdFx0YWJzViAqPSBzY2FsZVRvQ3ViZTtcblx0XHR2ICo9IHNjYWxlVG9DdWJlICogKCAxLjAgLSAyLjAgKiB0ZXhlbFNpemVZICk7XG5cdFx0dmVjMiBwbGFuYXIgPSB2Lnh5O1xuXHRcdGZsb2F0IGFsbW9zdEFUZXhlbCA9IDEuNSAqIHRleGVsU2l6ZVk7XG5cdFx0ZmxvYXQgYWxtb3N0T25lID0gMS4wIC0gYWxtb3N0QVRleGVsO1xuXHRcdGlmICggYWJzVi56ID49IGFsbW9zdE9uZSApIHtcblx0XHRcdGlmICggdi56ID4gMC4wIClcblx0XHRcdFx0cGxhbmFyLnggPSA0LjAgLSB2Lng7XG5cdFx0fSBlbHNlIGlmICggYWJzVi54ID49IGFsbW9zdE9uZSApIHtcblx0XHRcdGZsb2F0IHNpZ25YID0gc2lnbiggdi54ICk7XG5cdFx0XHRwbGFuYXIueCA9IHYueiAqIHNpZ25YICsgMi4wICogc2lnblg7XG5cdFx0fSBlbHNlIGlmICggYWJzVi55ID49IGFsbW9zdE9uZSApIHtcblx0XHRcdGZsb2F0IHNpZ25ZID0gc2lnbiggdi55ICk7XG5cdFx0XHRwbGFuYXIueCA9IHYueCArIDIuMCAqIHNpZ25ZICsgMi4wO1xuXHRcdFx0cGxhbmFyLnkgPSB2LnogKiBzaWduWSAtIDIuMDtcblx0XHR9XG5cdFx0cmV0dXJuIHZlYzIoIDAuMTI1LCAwLjI1ICkgKiBwbGFuYXIgKyB2ZWMyKCAwLjM3NSwgMC43NSApO1xuXHR9XG5cdGZsb2F0IGdldFBvaW50U2hhZG93KCBzYW1wbGVyMkQgc2hhZG93TWFwLCB2ZWMyIHNoYWRvd01hcFNpemUsIGZsb2F0IHNoYWRvd0JpYXMsIGZsb2F0IHNoYWRvd1JhZGl1cywgdmVjNCBzaGFkb3dDb29yZCwgZmxvYXQgc2hhZG93Q2FtZXJhTmVhciwgZmxvYXQgc2hhZG93Q2FtZXJhRmFyICkge1xuXHRcdHZlYzIgdGV4ZWxTaXplID0gdmVjMiggMS4wICkgLyAoIHNoYWRvd01hcFNpemUgKiB2ZWMyKCA0LjAsIDIuMCApICk7XG5cdFx0dmVjMyBsaWdodFRvUG9zaXRpb24gPSBzaGFkb3dDb29yZC54eXo7XG5cdFx0ZmxvYXQgZHAgPSAoIGxlbmd0aCggbGlnaHRUb1Bvc2l0aW9uICkgLSBzaGFkb3dDYW1lcmFOZWFyICkgLyAoIHNoYWRvd0NhbWVyYUZhciAtIHNoYWRvd0NhbWVyYU5lYXIgKTtcdFx0ZHAgKz0gc2hhZG93Qmlhcztcblx0XHR2ZWMzIGJkM0QgPSBub3JtYWxpemUoIGxpZ2h0VG9Qb3NpdGlvbiApO1xuXHRcdCNpZiBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9QQ0YgKSB8fCBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9QQ0ZfU09GVCApIHx8IGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1ZTTSApXG5cdFx0XHR2ZWMyIG9mZnNldCA9IHZlYzIoIC0gMSwgMSApICogc2hhZG93UmFkaXVzICogdGV4ZWxTaXplLnk7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh5eSwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXl5LCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC54eXgsIHRleGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnl5eCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QsIHRleGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh4eSwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXh5LCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC54eHgsIHRleGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnl4eCwgdGV4ZWxTaXplLnkgKSwgZHAgKVxuXHRcdFx0KSAqICggMS4wIC8gOS4wICk7XG5cdFx0I2Vsc2Vcblx0XHRcdHJldHVybiB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNELCB0ZXhlbFNpemUueSApLCBkcCApO1xuXHRcdCNlbmRpZlxuXHR9XG4jZW5kaWYiLHNoYWRvd21hcF9wYXJzX3ZlcnRleDoiI2lmZGVmIFVTRV9TSEFET1dNQVBcblx0I2lmIE5VTV9ESVJfTElHSFRfU0hBRE9XUyA+IDBcblx0XHR1bmlmb3JtIG1hdDQgZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXhbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHZhcnlpbmcgdmVjNCB2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07XG5cdFx0c3RydWN0IERpcmVjdGlvbmFsTGlnaHRTaGFkb3cge1xuXHRcdFx0ZmxvYXQgc2hhZG93Qmlhcztcblx0XHRcdGZsb2F0IHNoYWRvd05vcm1hbEJpYXM7XG5cdFx0XHRmbG9hdCBzaGFkb3dSYWRpdXM7XG5cdFx0XHR2ZWMyIHNoYWRvd01hcFNpemU7XG5cdFx0fTtcblx0XHR1bmlmb3JtIERpcmVjdGlvbmFsTGlnaHRTaGFkb3cgZGlyZWN0aW9uYWxMaWdodFNoYWRvd3NbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdO1xuXHQjZW5kaWZcblx0I2lmIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwXG5cdFx0dW5pZm9ybSBtYXQ0IHNwb3RTaGFkb3dNYXRyaXhbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTtcblx0XHR2YXJ5aW5nIHZlYzQgdlNwb3RTaGFkb3dDb29yZFsgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHN0cnVjdCBTcG90TGlnaHRTaGFkb3cge1xuXHRcdFx0ZmxvYXQgc2hhZG93Qmlhcztcblx0XHRcdGZsb2F0IHNoYWRvd05vcm1hbEJpYXM7XG5cdFx0XHRmbG9hdCBzaGFkb3dSYWRpdXM7XG5cdFx0XHR2ZWMyIHNoYWRvd01hcFNpemU7XG5cdFx0fTtcblx0XHR1bmlmb3JtIFNwb3RMaWdodFNoYWRvdyBzcG90TGlnaHRTaGFkb3dzWyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07XG5cdCNlbmRpZlxuXHQjaWYgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwXG5cdFx0dW5pZm9ybSBtYXQ0IHBvaW50U2hhZG93TWF0cml4WyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHZhcnlpbmcgdmVjNCB2UG9pbnRTaGFkb3dDb29yZFsgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTtcblx0XHRzdHJ1Y3QgUG9pbnRMaWdodFNoYWRvdyB7XG5cdFx0XHRmbG9hdCBzaGFkb3dCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93Tm9ybWFsQmlhcztcblx0XHRcdGZsb2F0IHNoYWRvd1JhZGl1cztcblx0XHRcdHZlYzIgc2hhZG93TWFwU2l6ZTtcblx0XHRcdGZsb2F0IHNoYWRvd0NhbWVyYU5lYXI7XG5cdFx0XHRmbG9hdCBzaGFkb3dDYW1lcmFGYXI7XG5cdFx0fTtcblx0XHR1bmlmb3JtIFBvaW50TGlnaHRTaGFkb3cgcG9pbnRMaWdodFNoYWRvd3NbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07XG5cdCNlbmRpZlxuI2VuZGlmIixzaGFkb3dtYXBfdmVydGV4OiIjaWZkZWYgVVNFX1NIQURPV01BUFxuXHQjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMCB8fCBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMCB8fCBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDBcblx0XHR2ZWMzIHNoYWRvd1dvcmxkTm9ybWFsID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggdHJhbnNmb3JtZWROb3JtYWwsIHZpZXdNYXRyaXggKTtcblx0XHR2ZWM0IHNoYWRvd1dvcmxkUG9zaXRpb247XG5cdCNlbmRpZlxuXHQjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMFxuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9ESVJfTElHSFRfU0hBRE9XUzsgaSArKyApIHtcblx0XHRzaGFkb3dXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbiArIHZlYzQoIHNoYWRvd1dvcmxkTm9ybWFsICogZGlyZWN0aW9uYWxMaWdodFNoYWRvd3NbIGkgXS5zaGFkb3dOb3JtYWxCaWFzLCAwICk7XG5cdFx0dkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIGkgXSA9IGRpcmVjdGlvbmFsU2hhZG93TWF0cml4WyBpIF0gKiBzaGFkb3dXb3JsZFBvc2l0aW9uO1xuXHR9XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG5cdCNlbmRpZlxuXHQjaWYgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDBcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fU1BPVF9MSUdIVF9TSEFET1dTOyBpICsrICkge1xuXHRcdHNoYWRvd1dvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uICsgdmVjNCggc2hhZG93V29ybGROb3JtYWwgKiBzcG90TGlnaHRTaGFkb3dzWyBpIF0uc2hhZG93Tm9ybWFsQmlhcywgMCApO1xuXHRcdHZTcG90U2hhZG93Q29vcmRbIGkgXSA9IHNwb3RTaGFkb3dNYXRyaXhbIGkgXSAqIHNoYWRvd1dvcmxkUG9zaXRpb247XG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcblx0I2VuZGlmXG5cdCNpZiBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDBcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUzsgaSArKyApIHtcblx0XHRzaGFkb3dXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbiArIHZlYzQoIHNoYWRvd1dvcmxkTm9ybWFsICogcG9pbnRMaWdodFNoYWRvd3NbIGkgXS5zaGFkb3dOb3JtYWxCaWFzLCAwICk7XG5cdFx0dlBvaW50U2hhZG93Q29vcmRbIGkgXSA9IHBvaW50U2hhZG93TWF0cml4WyBpIF0gKiBzaGFkb3dXb3JsZFBvc2l0aW9uO1xuXHR9XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG5cdCNlbmRpZlxuI2VuZGlmIixzaGFkb3dtYXNrX3BhcnNfZnJhZ21lbnQ6ImZsb2F0IGdldFNoYWRvd01hc2soKSB7XG5cdGZsb2F0IHNoYWRvdyA9IDEuMDtcblx0I2lmZGVmIFVTRV9TSEFET1dNQVBcblx0I2lmIE5VTV9ESVJfTElHSFRfU0hBRE9XUyA+IDBcblx0RGlyZWN0aW9uYWxMaWdodFNoYWRvdyBkaXJlY3Rpb25hbExpZ2h0O1xuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9ESVJfTElHSFRfU0hBRE9XUzsgaSArKyApIHtcblx0XHRkaXJlY3Rpb25hbExpZ2h0ID0gZGlyZWN0aW9uYWxMaWdodFNoYWRvd3NbIGkgXTtcblx0XHRzaGFkb3cgKj0gcmVjZWl2ZVNoYWRvdyA/IGdldFNoYWRvdyggZGlyZWN0aW9uYWxTaGFkb3dNYXBbIGkgXSwgZGlyZWN0aW9uYWxMaWdodC5zaGFkb3dNYXBTaXplLCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvd0JpYXMsIGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93UmFkaXVzLCB2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgaSBdICkgOiAxLjA7XG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcblx0I2VuZGlmXG5cdCNpZiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMFxuXHRTcG90TGlnaHRTaGFkb3cgc3BvdExpZ2h0O1xuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9TUE9UX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7XG5cdFx0c3BvdExpZ2h0ID0gc3BvdExpZ2h0U2hhZG93c1sgaSBdO1xuXHRcdHNoYWRvdyAqPSByZWNlaXZlU2hhZG93ID8gZ2V0U2hhZG93KCBzcG90U2hhZG93TWFwWyBpIF0sIHNwb3RMaWdodC5zaGFkb3dNYXBTaXplLCBzcG90TGlnaHQuc2hhZG93Qmlhcywgc3BvdExpZ2h0LnNoYWRvd1JhZGl1cywgdlNwb3RTaGFkb3dDb29yZFsgaSBdICkgOiAxLjA7XG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcblx0I2VuZGlmXG5cdCNpZiBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDBcblx0UG9pbnRMaWdodFNoYWRvdyBwb2ludExpZ2h0O1xuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTOyBpICsrICkge1xuXHRcdHBvaW50TGlnaHQgPSBwb2ludExpZ2h0U2hhZG93c1sgaSBdO1xuXHRcdHNoYWRvdyAqPSByZWNlaXZlU2hhZG93ID8gZ2V0UG9pbnRTaGFkb3coIHBvaW50U2hhZG93TWFwWyBpIF0sIHBvaW50TGlnaHQuc2hhZG93TWFwU2l6ZSwgcG9pbnRMaWdodC5zaGFkb3dCaWFzLCBwb2ludExpZ2h0LnNoYWRvd1JhZGl1cywgdlBvaW50U2hhZG93Q29vcmRbIGkgXSwgcG9pbnRMaWdodC5zaGFkb3dDYW1lcmFOZWFyLCBwb2ludExpZ2h0LnNoYWRvd0NhbWVyYUZhciApIDogMS4wO1xuXHR9XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG5cdCNlbmRpZlxuXHQjZW5kaWZcblx0cmV0dXJuIHNoYWRvdztcbn0iLHNraW5iYXNlX3ZlcnRleDoiI2lmZGVmIFVTRV9TS0lOTklOR1xuXHRtYXQ0IGJvbmVNYXRYID0gZ2V0Qm9uZU1hdHJpeCggc2tpbkluZGV4LnggKTtcblx0bWF0NCBib25lTWF0WSA9IGdldEJvbmVNYXRyaXgoIHNraW5JbmRleC55ICk7XG5cdG1hdDQgYm9uZU1hdFogPSBnZXRCb25lTWF0cml4KCBza2luSW5kZXgueiApO1xuXHRtYXQ0IGJvbmVNYXRXID0gZ2V0Qm9uZU1hdHJpeCggc2tpbkluZGV4LncgKTtcbiNlbmRpZiIsc2tpbm5pbmdfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfU0tJTk5JTkdcblx0dW5pZm9ybSBtYXQ0IGJpbmRNYXRyaXg7XG5cdHVuaWZvcm0gbWF0NCBiaW5kTWF0cml4SW52ZXJzZTtcblx0I2lmZGVmIEJPTkVfVEVYVFVSRVxuXHRcdHVuaWZvcm0gaGlnaHAgc2FtcGxlcjJEIGJvbmVUZXh0dXJlO1xuXHRcdHVuaWZvcm0gaW50IGJvbmVUZXh0dXJlU2l6ZTtcblx0XHRtYXQ0IGdldEJvbmVNYXRyaXgoIGNvbnN0IGluIGZsb2F0IGkgKSB7XG5cdFx0XHRmbG9hdCBqID0gaSAqIDQuMDtcblx0XHRcdGZsb2F0IHggPSBtb2QoIGosIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKSApO1xuXHRcdFx0ZmxvYXQgeSA9IGZsb29yKCBqIC8gZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApICk7XG5cdFx0XHRmbG9hdCBkeCA9IDEuMCAvIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKTtcblx0XHRcdGZsb2F0IGR5ID0gMS4wIC8gZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApO1xuXHRcdFx0eSA9IGR5ICogKCB5ICsgMC41ICk7XG5cdFx0XHR2ZWM0IHYxID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAwLjUgKSwgeSApICk7XG5cdFx0XHR2ZWM0IHYyID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAxLjUgKSwgeSApICk7XG5cdFx0XHR2ZWM0IHYzID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAyLjUgKSwgeSApICk7XG5cdFx0XHR2ZWM0IHY0ID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAzLjUgKSwgeSApICk7XG5cdFx0XHRtYXQ0IGJvbmUgPSBtYXQ0KCB2MSwgdjIsIHYzLCB2NCApO1xuXHRcdFx0cmV0dXJuIGJvbmU7XG5cdFx0fVxuXHQjZWxzZVxuXHRcdHVuaWZvcm0gbWF0NCBib25lTWF0cmljZXNbIE1BWF9CT05FUyBdO1xuXHRcdG1hdDQgZ2V0Qm9uZU1hdHJpeCggY29uc3QgaW4gZmxvYXQgaSApIHtcblx0XHRcdG1hdDQgYm9uZSA9IGJvbmVNYXRyaWNlc1sgaW50KGkpIF07XG5cdFx0XHRyZXR1cm4gYm9uZTtcblx0XHR9XG5cdCNlbmRpZlxuI2VuZGlmIixza2lubmluZ192ZXJ0ZXg6IiNpZmRlZiBVU0VfU0tJTk5JTkdcblx0dmVjNCBza2luVmVydGV4ID0gYmluZE1hdHJpeCAqIHZlYzQoIHRyYW5zZm9ybWVkLCAxLjAgKTtcblx0dmVjNCBza2lubmVkID0gdmVjNCggMC4wICk7XG5cdHNraW5uZWQgKz0gYm9uZU1hdFggKiBza2luVmVydGV4ICogc2tpbldlaWdodC54O1xuXHRza2lubmVkICs9IGJvbmVNYXRZICogc2tpblZlcnRleCAqIHNraW5XZWlnaHQueTtcblx0c2tpbm5lZCArPSBib25lTWF0WiAqIHNraW5WZXJ0ZXggKiBza2luV2VpZ2h0Lno7XG5cdHNraW5uZWQgKz0gYm9uZU1hdFcgKiBza2luVmVydGV4ICogc2tpbldlaWdodC53O1xuXHR0cmFuc2Zvcm1lZCA9ICggYmluZE1hdHJpeEludmVyc2UgKiBza2lubmVkICkueHl6O1xuI2VuZGlmIixza2lubm9ybWFsX3ZlcnRleDoiI2lmZGVmIFVTRV9TS0lOTklOR1xuXHRtYXQ0IHNraW5NYXRyaXggPSBtYXQ0KCAwLjAgKTtcblx0c2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LnggKiBib25lTWF0WDtcblx0c2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LnkgKiBib25lTWF0WTtcblx0c2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LnogKiBib25lTWF0Wjtcblx0c2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LncgKiBib25lTWF0Vztcblx0c2tpbk1hdHJpeCA9IGJpbmRNYXRyaXhJbnZlcnNlICogc2tpbk1hdHJpeCAqIGJpbmRNYXRyaXg7XG5cdG9iamVjdE5vcm1hbCA9IHZlYzQoIHNraW5NYXRyaXggKiB2ZWM0KCBvYmplY3ROb3JtYWwsIDAuMCApICkueHl6O1xuXHQjaWZkZWYgVVNFX1RBTkdFTlRcblx0XHRvYmplY3RUYW5nZW50ID0gdmVjNCggc2tpbk1hdHJpeCAqIHZlYzQoIG9iamVjdFRhbmdlbnQsIDAuMCApICkueHl6O1xuXHQjZW5kaWZcbiNlbmRpZiIsc3BlY3VsYXJtYXBfZnJhZ21lbnQ6ImZsb2F0IHNwZWN1bGFyU3RyZW5ndGg7XG4jaWZkZWYgVVNFX1NQRUNVTEFSTUFQXG5cdHZlYzQgdGV4ZWxTcGVjdWxhciA9IHRleHR1cmUyRCggc3BlY3VsYXJNYXAsIHZVdiApO1xuXHRzcGVjdWxhclN0cmVuZ3RoID0gdGV4ZWxTcGVjdWxhci5yO1xuI2Vsc2Vcblx0c3BlY3VsYXJTdHJlbmd0aCA9IDEuMDtcbiNlbmRpZiIsc3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9TUEVDVUxBUk1BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBzcGVjdWxhck1hcDtcbiNlbmRpZiIsdG9uZW1hcHBpbmdfZnJhZ21lbnQ6IiNpZiBkZWZpbmVkKCBUT05FX01BUFBJTkcgKVxuXHRnbF9GcmFnQ29sb3IucmdiID0gdG9uZU1hcHBpbmcoIGdsX0ZyYWdDb2xvci5yZ2IgKTtcbiNlbmRpZiIsdG9uZW1hcHBpbmdfcGFyc19mcmFnbWVudDoiI2lmbmRlZiBzYXR1cmF0ZVxuI2RlZmluZSBzYXR1cmF0ZShhKSBjbGFtcCggYSwgMC4wLCAxLjAgKVxuI2VuZGlmXG51bmlmb3JtIGZsb2F0IHRvbmVNYXBwaW5nRXhwb3N1cmU7XG52ZWMzIExpbmVhclRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkge1xuXHRyZXR1cm4gdG9uZU1hcHBpbmdFeHBvc3VyZSAqIGNvbG9yO1xufVxudmVjMyBSZWluaGFyZFRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkge1xuXHRjb2xvciAqPSB0b25lTWFwcGluZ0V4cG9zdXJlO1xuXHRyZXR1cm4gc2F0dXJhdGUoIGNvbG9yIC8gKCB2ZWMzKCAxLjAgKSArIGNvbG9yICkgKTtcbn1cbnZlYzMgT3B0aW1pemVkQ2luZW9uVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7XG5cdGNvbG9yICo9IHRvbmVNYXBwaW5nRXhwb3N1cmU7XG5cdGNvbG9yID0gbWF4KCB2ZWMzKCAwLjAgKSwgY29sb3IgLSAwLjAwNCApO1xuXHRyZXR1cm4gcG93KCAoIGNvbG9yICogKCA2LjIgKiBjb2xvciArIDAuNSApICkgLyAoIGNvbG9yICogKCA2LjIgKiBjb2xvciArIDEuNyApICsgMC4wNiApLCB2ZWMzKCAyLjIgKSApO1xufVxudmVjMyBSUlRBbmRPRFRGaXQoIHZlYzMgdiApIHtcblx0dmVjMyBhID0gdiAqICggdiArIDAuMDI0NTc4NiApIC0gMC4wMDAwOTA1Mzc7XG5cdHZlYzMgYiA9IHYgKiAoIDAuOTgzNzI5ICogdiArIDAuNDMyOTUxMCApICsgMC4yMzgwODE7XG5cdHJldHVybiBhIC8gYjtcbn1cbnZlYzMgQUNFU0ZpbG1pY1RvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkge1xuXHRjb25zdCBtYXQzIEFDRVNJbnB1dE1hdCA9IG1hdDMoXG5cdFx0dmVjMyggMC41OTcxOSwgMC4wNzYwMCwgMC4wMjg0MCApLFx0XHR2ZWMzKCAwLjM1NDU4LCAwLjkwODM0LCAwLjEzMzgzICksXG5cdFx0dmVjMyggMC4wNDgyMywgMC4wMTU2NiwgMC44Mzc3NyApXG5cdCk7XG5cdGNvbnN0IG1hdDMgQUNFU091dHB1dE1hdCA9IG1hdDMoXG5cdFx0dmVjMyggIDEuNjA0NzUsIC0wLjEwMjA4LCAtMC4wMDMyNyApLFx0XHR2ZWMzKCAtMC41MzEwOCwgIDEuMTA4MTMsIC0wLjA3Mjc2ICksXG5cdFx0dmVjMyggLTAuMDczNjcsIC0wLjAwNjA1LCAgMS4wNzYwMiApXG5cdCk7XG5cdGNvbG9yICo9IHRvbmVNYXBwaW5nRXhwb3N1cmUgLyAwLjY7XG5cdGNvbG9yID0gQUNFU0lucHV0TWF0ICogY29sb3I7XG5cdGNvbG9yID0gUlJUQW5kT0RURml0KCBjb2xvciApO1xuXHRjb2xvciA9IEFDRVNPdXRwdXRNYXQgKiBjb2xvcjtcblx0cmV0dXJuIHNhdHVyYXRlKCBjb2xvciApO1xufVxudmVjMyBDdXN0b21Ub25lTWFwcGluZyggdmVjMyBjb2xvciApIHsgcmV0dXJuIGNvbG9yOyB9Iix0cmFuc21pc3Npb25tYXBfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OTUFQXG5cdHRvdGFsVHJhbnNtaXNzaW9uICo9IHRleHR1cmUyRCggdHJhbnNtaXNzaW9uTWFwLCB2VXYgKS5yO1xuI2VuZGlmIix0cmFuc21pc3Npb25tYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9UUkFOU01JU1NJT05NQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgdHJhbnNtaXNzaW9uTWFwO1xuI2VuZGlmIix1dl9wYXJzX2ZyYWdtZW50OiIjaWYgKCBkZWZpbmVkKCBVU0VfVVYgKSAmJiAhIGRlZmluZWQoIFVWU19WRVJURVhfT05MWSApIClcblx0dmFyeWluZyB2ZWMyIHZVdjtcbiNlbmRpZiIsdXZfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfVVZcblx0I2lmZGVmIFVWU19WRVJURVhfT05MWVxuXHRcdHZlYzIgdlV2O1xuXHQjZWxzZVxuXHRcdHZhcnlpbmcgdmVjMiB2VXY7XG5cdCNlbmRpZlxuXHR1bmlmb3JtIG1hdDMgdXZUcmFuc2Zvcm07XG4jZW5kaWYiLHV2X3ZlcnRleDoiI2lmZGVmIFVTRV9VVlxuXHR2VXYgPSAoIHV2VHJhbnNmb3JtICogdmVjMyggdXYsIDEgKSApLnh5O1xuI2VuZGlmIix1djJfcGFyc19mcmFnbWVudDoiI2lmIGRlZmluZWQoIFVTRV9MSUdIVE1BUCApIHx8IGRlZmluZWQoIFVTRV9BT01BUCApXG5cdHZhcnlpbmcgdmVjMiB2VXYyO1xuI2VuZGlmIix1djJfcGFyc192ZXJ0ZXg6IiNpZiBkZWZpbmVkKCBVU0VfTElHSFRNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQU9NQVAgKVxuXHRhdHRyaWJ1dGUgdmVjMiB1djI7XG5cdHZhcnlpbmcgdmVjMiB2VXYyO1xuXHR1bmlmb3JtIG1hdDMgdXYyVHJhbnNmb3JtO1xuI2VuZGlmIix1djJfdmVydGV4OiIjaWYgZGVmaW5lZCggVVNFX0xJR0hUTUFQICkgfHwgZGVmaW5lZCggVVNFX0FPTUFQIClcblx0dlV2MiA9ICggdXYyVHJhbnNmb3JtICogdmVjMyggdXYyLCAxICkgKS54eTtcbiNlbmRpZiIsd29ybGRwb3NfdmVydGV4OiIjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApIHx8IGRlZmluZWQoIERJU1RBTkNFICkgfHwgZGVmaW5lZCAoIFVTRV9TSEFET1dNQVAgKVxuXHR2ZWM0IHdvcmxkUG9zaXRpb24gPSB2ZWM0KCB0cmFuc2Zvcm1lZCwgMS4wICk7XG5cdCNpZmRlZiBVU0VfSU5TVEFOQ0lOR1xuXHRcdHdvcmxkUG9zaXRpb24gPSBpbnN0YW5jZU1hdHJpeCAqIHdvcmxkUG9zaXRpb247XG5cdCNlbmRpZlxuXHR3b3JsZFBvc2l0aW9uID0gbW9kZWxNYXRyaXggKiB3b3JsZFBvc2l0aW9uO1xuI2VuZGlmIixiYWNrZ3JvdW5kX2ZyYWc6InVuaWZvcm0gc2FtcGxlcjJEIHQyRDtcbnZhcnlpbmcgdmVjMiB2VXY7XG52b2lkIG1haW4oKSB7XG5cdHZlYzQgdGV4Q29sb3IgPSB0ZXh0dXJlMkQoIHQyRCwgdlV2ICk7XG5cdGdsX0ZyYWdDb2xvciA9IG1hcFRleGVsVG9MaW5lYXIoIHRleENvbG9yICk7XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cbn0iLGJhY2tncm91bmRfdmVydDoidmFyeWluZyB2ZWMyIHZVdjtcbnVuaWZvcm0gbWF0MyB1dlRyYW5zZm9ybTtcbnZvaWQgbWFpbigpIHtcblx0dlV2ID0gKCB1dlRyYW5zZm9ybSAqIHZlYzMoIHV2LCAxICkgKS54eTtcblx0Z2xfUG9zaXRpb24gPSB2ZWM0KCBwb3NpdGlvbi54eSwgMS4wLCAxLjAgKTtcbn0iLGN1YmVfZnJhZzoiI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD5cbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbnZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247XG4jaW5jbHVkZSA8Y3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHR2ZWMzIHZSZWZsZWN0ID0gdldvcmxkRGlyZWN0aW9uO1xuXHQjaW5jbHVkZSA8ZW52bWFwX2ZyYWdtZW50PlxuXHRnbF9GcmFnQ29sb3IgPSBlbnZDb2xvcjtcblx0Z2xfRnJhZ0NvbG9yLmEgKj0gb3BhY2l0eTtcblx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxufSIsY3ViZV92ZXJ0OiJ2YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uO1xuI2luY2x1ZGUgPGNvbW1vbj5cbnZvaWQgbWFpbigpIHtcblx0dldvcmxkRGlyZWN0aW9uID0gdHJhbnNmb3JtRGlyZWN0aW9uKCBwb3NpdGlvbiwgbW9kZWxNYXRyaXggKTtcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHRnbF9Qb3NpdGlvbi56ID0gZ2xfUG9zaXRpb24udztcbn0iLGRlcHRoX2ZyYWc6IiNpZiBERVBUSF9QQUNLSU5HID09IDMyMDBcblx0dW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2VuZGlmXG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52YXJ5aW5nIHZlYzIgdkhpZ2hQcmVjaXNpb25aVztcbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCAxLjAgKTtcblx0I2lmIERFUFRIX1BBQ0tJTkcgPT0gMzIwMFxuXHRcdGRpZmZ1c2VDb2xvci5hID0gb3BhY2l0eTtcblx0I2VuZGlmXG5cdCNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHRmbG9hdCBmcmFnQ29vcmRaID0gMC41ICogdkhpZ2hQcmVjaXNpb25aV1swXSAvIHZIaWdoUHJlY2lzaW9uWldbMV0gKyAwLjU7XG5cdCNpZiBERVBUSF9QQUNLSU5HID09IDMyMDBcblx0XHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCB2ZWMzKCAxLjAgLSBmcmFnQ29vcmRaICksIG9wYWNpdHkgKTtcblx0I2VsaWYgREVQVEhfUEFDS0lORyA9PSAzMjAxXG5cdFx0Z2xfRnJhZ0NvbG9yID0gcGFja0RlcHRoVG9SR0JBKCBmcmFnQ29vcmRaICk7XG5cdCNlbmRpZlxufSIsZGVwdGhfdmVydDoiI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4PlxudmFyeWluZyB2ZWMyIHZIaWdoUHJlY2lzaW9uWlc7XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5cdCNpZmRlZiBVU0VfRElTUExBQ0VNRU5UTUFQXG5cdFx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cblx0XHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxuXHRcdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cblx0I2VuZGlmXG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PlxuXHR2SGlnaFByZWNpc2lvblpXID0gZ2xfUG9zaXRpb24uenc7XG59IixkaXN0YW5jZVJHQkFfZnJhZzoiI2RlZmluZSBESVNUQU5DRVxudW5pZm9ybSB2ZWMzIHJlZmVyZW5jZVBvc2l0aW9uO1xudW5pZm9ybSBmbG9hdCBuZWFyRGlzdGFuY2U7XG51bmlmb3JtIGZsb2F0IGZhckRpc3RhbmNlO1xudmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxwYWNraW5nPlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cbnZvaWQgbWFpbiAoKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggMS4wICk7XG5cdCNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cblx0ZmxvYXQgZGlzdCA9IGxlbmd0aCggdldvcmxkUG9zaXRpb24gLSByZWZlcmVuY2VQb3NpdGlvbiApO1xuXHRkaXN0ID0gKCBkaXN0IC0gbmVhckRpc3RhbmNlICkgLyAoIGZhckRpc3RhbmNlIC0gbmVhckRpc3RhbmNlICk7XG5cdGRpc3QgPSBzYXR1cmF0ZSggZGlzdCApO1xuXHRnbF9GcmFnQ29sb3IgPSBwYWNrRGVwdGhUb1JHQkEoIGRpc3QgKTtcbn0iLGRpc3RhbmNlUkdCQV92ZXJ0OiIjZGVmaW5lIERJU1RBTkNFXG52YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5cdCNpZmRlZiBVU0VfRElTUExBQ0VNRU5UTUFQXG5cdFx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cblx0XHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxuXHRcdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cblx0I2VuZGlmXG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PlxuXHR2V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24ueHl6O1xufSIsZXF1aXJlY3RfZnJhZzoidW5pZm9ybSBzYW1wbGVyMkQgdEVxdWlyZWN0O1xudmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjtcbiNpbmNsdWRlIDxjb21tb24+XG52b2lkIG1haW4oKSB7XG5cdHZlYzMgZGlyZWN0aW9uID0gbm9ybWFsaXplKCB2V29ybGREaXJlY3Rpb24gKTtcblx0dmVjMiBzYW1wbGVVViA9IGVxdWlyZWN0VXYoIGRpcmVjdGlvbiApO1xuXHR2ZWM0IHRleENvbG9yID0gdGV4dHVyZTJEKCB0RXF1aXJlY3QsIHNhbXBsZVVWICk7XG5cdGdsX0ZyYWdDb2xvciA9IG1hcFRleGVsVG9MaW5lYXIoIHRleENvbG9yICk7XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cbn0iLGVxdWlyZWN0X3ZlcnQ6InZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247XG4jaW5jbHVkZSA8Y29tbW9uPlxudm9pZCBtYWluKCkge1xuXHR2V29ybGREaXJlY3Rpb24gPSB0cmFuc2Zvcm1EaXJlY3Rpb24oIHBvc2l0aW9uLCBtb2RlbE1hdHJpeCApO1xuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG59IixsaW5lZGFzaGVkX2ZyYWc6InVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xudW5pZm9ybSBmbG9hdCBkYXNoU2l6ZTtcbnVuaWZvcm0gZmxvYXQgdG90YWxTaXplO1xudmFyeWluZyBmbG9hdCB2TGluZURpc3RhbmNlO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdGlmICggbW9kKCB2TGluZURpc3RhbmNlLCB0b3RhbFNpemUgKSA+IGRhc2hTaXplICkge1xuXHRcdGRpc2NhcmQ7XG5cdH1cblx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gdmVjMyggMC4wICk7XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD5cblx0b3V0Z29pbmdMaWdodCA9IGRpZmZ1c2VDb2xvci5yZ2I7XG5cdGdsX0ZyYWdDb2xvciA9IHZlYzQoIG91dGdvaW5nTGlnaHQsIGRpZmZ1c2VDb2xvci5hICk7XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XG59IixsaW5lZGFzaGVkX3ZlcnQ6InVuaWZvcm0gZmxvYXQgc2NhbGU7XG5hdHRyaWJ1dGUgZmxvYXQgbGluZURpc3RhbmNlO1xudmFyeWluZyBmbG9hdCB2TGluZURpc3RhbmNlO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHR2TGluZURpc3RhbmNlID0gc2NhbGUgKiBsaW5lRGlzdGFuY2U7XG5cdCNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufSIsbWVzaGJhc2ljX2ZyYWc6InVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcbiNlbmRpZlxuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVudm1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8c3BlY3VsYXJtYXBfZnJhZ21lbnQ+XG5cdFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7XG5cdCNpZmRlZiBVU0VfTElHSFRNQVBcblx0XG5cdFx0dmVjNCBsaWdodE1hcFRleGVsPSB0ZXh0dXJlMkQoIGxpZ2h0TWFwLCB2VXYyICk7XG5cdFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGxpZ2h0TWFwVGV4ZWxUb0xpbmVhciggbGlnaHRNYXBUZXhlbCApLnJnYiAqIGxpZ2h0TWFwSW50ZW5zaXR5O1xuXHQjZWxzZVxuXHRcdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSB2ZWMzKCAxLjAgKTtcblx0I2VuZGlmXG5cdCNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD5cblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICo9IGRpZmZ1c2VDb2xvci5yZ2I7XG5cdHZlYzMgb3V0Z29pbmdMaWdodCA9IHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZTtcblx0I2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD5cblx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggb3V0Z29pbmdMaWdodCwgZGlmZnVzZUNvbG9yLmEgKTtcblx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD5cbn0iLG1lc2hiYXNpY192ZXJ0OiIjaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxlbnZtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cblx0I2luY2x1ZGUgPHV2Ml92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5cdCNpZmRlZiBVU0VfRU5WTUFQXG5cdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxuXHQjZW5kaWZcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0I2luY2x1ZGUgPGVudm1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufSIsbWVzaGxhbWJlcnRfZnJhZzoidW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XG51bmlmb3JtIHZlYzMgZW1pc3NpdmU7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG52YXJ5aW5nIHZlYzMgdkxpZ2h0RnJvbnQ7XG52YXJ5aW5nIHZlYzMgdkluZGlyZWN0RnJvbnQ7XG4jaWZkZWYgRE9VQkxFX1NJREVEXG5cdHZhcnlpbmcgdmVjMyB2TGlnaHRCYWNrO1xuXHR2YXJ5aW5nIHZlYzMgdkluZGlyZWN0QmFjaztcbiNlbmRpZlxuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxwYWNraW5nPlxuI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1djJfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFvbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxlbnZtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YnNkZnM+XG4jaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8c2hhZG93bWFza19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHNwZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XG5cdFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7XG5cdHZlYzMgdG90YWxFbWlzc2l2ZVJhZGlhbmNlID0gZW1pc3NpdmU7XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxzcGVjdWxhcm1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVtaXNzaXZlbWFwX2ZyYWdtZW50PlxuXHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9ICggZ2xfRnJvbnRGYWNpbmcgKSA/IHZJbmRpcmVjdEZyb250IDogdkluZGlyZWN0QmFjaztcblx0I2Vsc2Vcblx0XHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gdkluZGlyZWN0RnJvbnQ7XG5cdCNlbmRpZlxuXHQjaW5jbHVkZSA8bGlnaHRtYXBfZnJhZ21lbnQ+XG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSAqPSBCUkRGX0RpZmZ1c2VfTGFtYmVydCggZGlmZnVzZUNvbG9yLnJnYiApO1xuXHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSA9ICggZ2xfRnJvbnRGYWNpbmcgKSA/IHZMaWdodEZyb250IDogdkxpZ2h0QmFjaztcblx0I2Vsc2Vcblx0XHRyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlID0gdkxpZ2h0RnJvbnQ7XG5cdCNlbmRpZlxuXHRyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICo9IEJSREZfRGlmZnVzZV9MYW1iZXJ0KCBkaWZmdXNlQ29sb3IucmdiICkgKiBnZXRTaGFkb3dNYXNrKCk7XG5cdCNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD5cblx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTtcblx0I2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD5cblx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggb3V0Z29pbmdMaWdodCwgZGlmZnVzZUNvbG9yLmEgKTtcblx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD5cbn0iLG1lc2hsYW1iZXJ0X3ZlcnQ6IiNkZWZpbmUgTEFNQkVSVFxudmFyeWluZyB2ZWMzIHZMaWdodEZyb250O1xudmFyeWluZyB2ZWMzIHZJbmRpcmVjdEZyb250O1xuI2lmZGVmIERPVUJMRV9TSURFRFxuXHR2YXJ5aW5nIHZlYzMgdkxpZ2h0QmFjaztcblx0dmFyeWluZyB2ZWMzIHZJbmRpcmVjdEJhY2s7XG4jZW5kaWZcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8dXYyX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGVudm1hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxic2Rmcz5cbiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cblx0I2luY2x1ZGUgPHV2Ml92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxuXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PlxuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZW52bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPGxpZ2h0c19sYW1iZXJ0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNoYWRvd21hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufSIsbWVzaG1hdGNhcF9mcmFnOiIjZGVmaW5lIE1BVENBUFxudW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG51bmlmb3JtIHNhbXBsZXIyRCBtYXRjYXA7XG52YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dmFyeWluZyB2ZWMzIHZOb3JtYWw7XG4jZW5kaWZcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X2JlZ2luPlxuXHQjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+XG5cdHZlYzMgdmlld0RpciA9IG5vcm1hbGl6ZSggdlZpZXdQb3NpdGlvbiApO1xuXHR2ZWMzIHggPSBub3JtYWxpemUoIHZlYzMoIHZpZXdEaXIueiwgMC4wLCAtIHZpZXdEaXIueCApICk7XG5cdHZlYzMgeSA9IGNyb3NzKCB2aWV3RGlyLCB4ICk7XG5cdHZlYzIgdXYgPSB2ZWMyKCBkb3QoIHgsIG5vcm1hbCApLCBkb3QoIHksIG5vcm1hbCApICkgKiAwLjQ5NSArIDAuNTtcblx0I2lmZGVmIFVTRV9NQVRDQVBcblx0XHR2ZWM0IG1hdGNhcENvbG9yID0gdGV4dHVyZTJEKCBtYXRjYXAsIHV2ICk7XG5cdFx0bWF0Y2FwQ29sb3IgPSBtYXRjYXBUZXhlbFRvTGluZWFyKCBtYXRjYXBDb2xvciApO1xuXHQjZWxzZVxuXHRcdHZlYzQgbWF0Y2FwQ29sb3IgPSB2ZWM0KCAxLjAgKTtcblx0I2VuZGlmXG5cdHZlYzMgb3V0Z29pbmdMaWdodCA9IGRpZmZ1c2VDb2xvci5yZ2IgKiBtYXRjYXBDb2xvci5yZ2I7XG5cdGdsX0ZyYWdDb2xvciA9IHZlYzQoIG91dGdvaW5nTGlnaHQsIGRpZmZ1c2VDb2xvci5hICk7XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+XG59IixtZXNobWF0Y2FwX3ZlcnQ6IiNkZWZpbmUgTUFUQ0FQXG52YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dmFyeWluZyB2ZWMzIHZOb3JtYWw7XG4jZW5kaWZcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxuXHQjaWZuZGVmIEZMQVRfU0hBREVEXG5cdFx0dk5vcm1hbCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWROb3JtYWwgKTtcblx0I2VuZGlmXG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cblx0dlZpZXdQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7XG59IixtZXNodG9vbl9mcmFnOiIjZGVmaW5lIFRPT05cbnVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSB2ZWMzIGVtaXNzaXZlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxwYWNraW5nPlxuI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1djJfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFvbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGdyYWRpZW50bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YnNkZnM+XG4jaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+XG4jaW5jbHVkZSA8bGlnaHRzX3Rvb25fcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxidW1wbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XG5cdFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7XG5cdHZlYzMgdG90YWxFbWlzc2l2ZVJhZGlhbmNlID0gZW1pc3NpdmU7XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+XG5cdCNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz5cblx0I2luY2x1ZGUgPGVtaXNzaXZlbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bGlnaHRzX3Rvb25fZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfYmVnaW4+XG5cdCNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfbWFwcz5cblx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9lbmQ+XG5cdCNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD5cblx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTtcblx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggb3V0Z29pbmdMaWdodCwgZGlmZnVzZUNvbG9yLmEgKTtcblx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD5cbn0iLG1lc2h0b29uX3ZlcnQ6IiNkZWZpbmUgVE9PTlxudmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xuI2VuZGlmXG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx1djJfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD5cbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dk5vcm1hbCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWROb3JtYWwgKTtcbiNlbmRpZlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0dlZpZXdQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7XG5cdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbn0iLG1lc2hwaG9uZ19mcmFnOiIjZGVmaW5lIFBIT05HXG51bmlmb3JtIHZlYzMgZGlmZnVzZTtcbnVuaWZvcm0gdmVjMyBlbWlzc2l2ZTtcbnVuaWZvcm0gdmVjMyBzcGVjdWxhcjtcbnVuaWZvcm0gZmxvYXQgc2hpbmluZXNzO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxwYWNraW5nPlxuI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1djJfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFvbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxlbnZtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YnNkZnM+XG4jaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+XG4jaW5jbHVkZSA8bGlnaHRzX3Bob25nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHNwZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XG5cdFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7XG5cdHZlYzMgdG90YWxFbWlzc2l2ZVJhZGlhbmNlID0gZW1pc3NpdmU7XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxzcGVjdWxhcm1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPlxuXHQjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxsaWdodHNfcGhvbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfYmVnaW4+XG5cdCNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfbWFwcz5cblx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9lbmQ+XG5cdCNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD5cblx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTtcblx0I2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD5cblx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggb3V0Z29pbmdMaWdodCwgZGlmZnVzZUNvbG9yLmEgKTtcblx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD5cbn0iLG1lc2hwaG9uZ192ZXJ0OiIjZGVmaW5lIFBIT05HXG52YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dmFyeWluZyB2ZWMzIHZOb3JtYWw7XG4jZW5kaWZcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8dXYyX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxlbnZtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx1djJfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD5cbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dk5vcm1hbCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWROb3JtYWwgKTtcbiNlbmRpZlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0dlZpZXdQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7XG5cdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxlbnZtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPGZvZ192ZXJ0ZXg+XG59IixtZXNocGh5c2ljYWxfZnJhZzoiI2RlZmluZSBTVEFOREFSRFxuI2lmZGVmIFBIWVNJQ0FMXG5cdCNkZWZpbmUgUkVGTEVDVElWSVRZXG5cdCNkZWZpbmUgQ0xFQVJDT0FUXG5cdCNkZWZpbmUgVFJBTlNNSVNTSU9OXG4jZW5kaWZcbnVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSB2ZWMzIGVtaXNzaXZlO1xudW5pZm9ybSBmbG9hdCByb3VnaG5lc3M7XG51bmlmb3JtIGZsb2F0IG1ldGFsbmVzcztcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNpZmRlZiBUUkFOU01JU1NJT05cblx0dW5pZm9ybSBmbG9hdCB0cmFuc21pc3Npb247XG4jZW5kaWZcbiNpZmRlZiBSRUZMRUNUSVZJVFlcblx0dW5pZm9ybSBmbG9hdCByZWZsZWN0aXZpdHk7XG4jZW5kaWZcbiNpZmRlZiBDTEVBUkNPQVRcblx0dW5pZm9ybSBmbG9hdCBjbGVhcmNvYXQ7XG5cdHVuaWZvcm0gZmxvYXQgY2xlYXJjb2F0Um91Z2huZXNzO1xuI2VuZGlmXG4jaWZkZWYgVVNFX1NIRUVOXG5cdHVuaWZvcm0gdmVjMyBzaGVlbjtcbiNlbmRpZlxudmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xuXHQjaWZkZWYgVVNFX1RBTkdFTlRcblx0XHR2YXJ5aW5nIHZlYzMgdlRhbmdlbnQ7XG5cdFx0dmFyeWluZyB2ZWMzIHZCaXRhbmdlbnQ7XG5cdCNlbmRpZlxuI2VuZGlmXG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4jaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YW9tYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dHJhbnNtaXNzaW9ubWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YnNkZnM+XG4jaW5jbHVkZSA8Y3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxlbnZtYXBfcGh5c2ljYWxfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj5cbiNpbmNsdWRlIDxsaWdodHNfcGh5c2ljYWxfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxidW1wbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xlYXJjb2F0X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8cm91Z2huZXNzbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWV0YWxuZXNzbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XG5cdFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7XG5cdHZlYzMgdG90YWxFbWlzc2l2ZVJhZGlhbmNlID0gZW1pc3NpdmU7XG5cdCNpZmRlZiBUUkFOU01JU1NJT05cblx0XHRmbG9hdCB0b3RhbFRyYW5zbWlzc2lvbiA9IHRyYW5zbWlzc2lvbjtcblx0I2VuZGlmXG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxyb3VnaG5lc3NtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxtZXRhbG5lc3NtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+XG5cdCNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz5cblx0I2luY2x1ZGUgPGNsZWFyY29hdF9ub3JtYWxfZnJhZ21lbnRfYmVnaW4+XG5cdCNpbmNsdWRlIDxjbGVhcmNvYXRfbm9ybWFsX2ZyYWdtZW50X21hcHM+XG5cdCNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPHRyYW5zbWlzc2lvbm1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGxpZ2h0c19waHlzaWNhbF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9tYXBzPlxuXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2VuZD5cblx0I2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PlxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlO1xuXHQjaWZkZWYgVFJBTlNNSVNTSU9OXG5cdFx0ZGlmZnVzZUNvbG9yLmEgKj0gbWl4KCBzYXR1cmF0ZSggMS4gLSB0b3RhbFRyYW5zbWlzc2lvbiArIGxpbmVhclRvUmVsYXRpdmVMdW1pbmFuY2UoIHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciApICksIDEuMCwgbWV0YWxuZXNzICk7XG5cdCNlbmRpZlxuXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCBvdXRnb2luZ0xpZ2h0LCBkaWZmdXNlQ29sb3IuYSApO1xuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50PlxufSIsbWVzaHBoeXNpY2FsX3ZlcnQ6IiNkZWZpbmUgU1RBTkRBUkRcbnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcblx0I2lmZGVmIFVTRV9UQU5HRU5UXG5cdFx0dmFyeWluZyB2ZWMzIHZUYW5nZW50O1xuXHRcdHZhcnlpbmcgdmVjMyB2Qml0YW5nZW50O1xuXHQjZW5kaWZcbiNlbmRpZlxuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8dXYyX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+XG4jaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZOb3JtYWwgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkTm9ybWFsICk7XG5cdCNpZmRlZiBVU0VfVEFOR0VOVFxuXHRcdHZUYW5nZW50ID0gbm9ybWFsaXplKCB0cmFuc2Zvcm1lZFRhbmdlbnQgKTtcblx0XHR2Qml0YW5nZW50ID0gbm9ybWFsaXplKCBjcm9zcyggdk5vcm1hbCwgdlRhbmdlbnQgKSAqIHRhbmdlbnQudyApO1xuXHQjZW5kaWZcbiNlbmRpZlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0dlZpZXdQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7XG5cdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbn0iLG5vcm1hbF9mcmFnOiIjZGVmaW5lIE5PUk1BTFxudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2lmIGRlZmluZWQoIEZMQVRfU0hBREVEICkgfHwgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQIClcblx0dmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jZW5kaWZcbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dmFyeWluZyB2ZWMzIHZOb3JtYWw7XG5cdCNpZmRlZiBVU0VfVEFOR0VOVFxuXHRcdHZhcnlpbmcgdmVjMyB2VGFuZ2VudDtcblx0XHR2YXJ5aW5nIHZlYzMgdkJpdGFuZ2VudDtcblx0I2VuZGlmXG4jZW5kaWZcbiNpbmNsdWRlIDxwYWNraW5nPlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPlxuXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCBwYWNrTm9ybWFsVG9SR0IoIG5vcm1hbCApLCBvcGFjaXR5ICk7XG59Iixub3JtYWxfdmVydDoiI2RlZmluZSBOT1JNQUxcbiNpZiBkZWZpbmVkKCBGTEFUX1NIQURFRCApIHx8IGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApXG5cdHZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2VuZGlmXG4jaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xuXHQjaWZkZWYgVVNFX1RBTkdFTlRcblx0XHR2YXJ5aW5nIHZlYzMgdlRhbmdlbnQ7XG5cdFx0dmFyeWluZyB2ZWMzIHZCaXRhbmdlbnQ7XG5cdCNlbmRpZlxuI2VuZGlmXG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2Tm9ybWFsID0gbm9ybWFsaXplKCB0cmFuc2Zvcm1lZE5vcm1hbCApO1xuXHQjaWZkZWYgVVNFX1RBTkdFTlRcblx0XHR2VGFuZ2VudCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWRUYW5nZW50ICk7XG5cdFx0dkJpdGFuZ2VudCA9IG5vcm1hbGl6ZSggY3Jvc3MoIHZOb3JtYWwsIHZUYW5nZW50ICkgKiB0YW5nZW50LncgKTtcblx0I2VuZGlmXG4jZW5kaWZcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG4jaWYgZGVmaW5lZCggRkxBVF9TSEFERUQgKSB8fCBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKVxuXHR2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejtcbiNlbmRpZlxufSIscG9pbnRzX2ZyYWc6InVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9wYXJ0aWNsZV9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzMgb3V0Z29pbmdMaWdodCA9IHZlYzMoIDAuMCApO1xuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX3BhcnRpY2xlX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XG5cdG91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiO1xuXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCBvdXRnb2luZ0xpZ2h0LCBkaWZmdXNlQ29sb3IuYSApO1xuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxufSIscG9pbnRzX3ZlcnQ6InVuaWZvcm0gZmxvYXQgc2l6ZTtcbnVuaWZvcm0gZmxvYXQgc2NhbGU7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0Z2xfUG9pbnRTaXplID0gc2l6ZTtcblx0I2lmZGVmIFVTRV9TSVpFQVRURU5VQVRJT05cblx0XHRib29sIGlzUGVyc3BlY3RpdmUgPSBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICk7XG5cdFx0aWYgKCBpc1BlcnNwZWN0aXZlICkgZ2xfUG9pbnRTaXplICo9ICggc2NhbGUgLyAtIG12UG9zaXRpb24ueiApO1xuXHQjZW5kaWZcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufSIsc2hhZG93X2ZyYWc6InVuaWZvcm0gdmVjMyBjb2xvcjtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxic2Rmcz5cbiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzaGFkb3dtYXNrX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdGdsX0ZyYWdDb2xvciA9IHZlYzQoIGNvbG9yLCBvcGFjaXR5ICogKCAxLjAgLSBnZXRTaGFkb3dNYXNrKCkgKSApO1xuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG59IixzaGFkb3dfdmVydDoiI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPGZvZ192ZXJ0ZXg+XG59IixzcHJpdGVfZnJhZzoidW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSB2ZWMzKCAwLjAgKTtcblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHRvdXRnb2luZ0xpZ2h0ID0gZGlmZnVzZUNvbG9yLnJnYjtcblx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggb3V0Z29pbmdMaWdodCwgZGlmZnVzZUNvbG9yLmEgKTtcblx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxufSIsc3ByaXRlX3ZlcnQ6InVuaWZvcm0gZmxvYXQgcm90YXRpb247XG51bmlmb3JtIHZlYzIgY2VudGVyO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHR2ZWM0IG12UG9zaXRpb24gPSBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KCAwLjAsIDAuMCwgMC4wLCAxLjAgKTtcblx0dmVjMiBzY2FsZTtcblx0c2NhbGUueCA9IGxlbmd0aCggdmVjMyggbW9kZWxNYXRyaXhbIDAgXS54LCBtb2RlbE1hdHJpeFsgMCBdLnksIG1vZGVsTWF0cml4WyAwIF0ueiApICk7XG5cdHNjYWxlLnkgPSBsZW5ndGgoIHZlYzMoIG1vZGVsTWF0cml4WyAxIF0ueCwgbW9kZWxNYXRyaXhbIDEgXS55LCBtb2RlbE1hdHJpeFsgMSBdLnogKSApO1xuXHQjaWZuZGVmIFVTRV9TSVpFQVRURU5VQVRJT05cblx0XHRib29sIGlzUGVyc3BlY3RpdmUgPSBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICk7XG5cdFx0aWYgKCBpc1BlcnNwZWN0aXZlICkgc2NhbGUgKj0gLSBtdlBvc2l0aW9uLno7XG5cdCNlbmRpZlxuXHR2ZWMyIGFsaWduZWRQb3NpdGlvbiA9ICggcG9zaXRpb24ueHkgLSAoIGNlbnRlciAtIHZlYzIoIDAuNSApICkgKSAqIHNjYWxlO1xuXHR2ZWMyIHJvdGF0ZWRQb3NpdGlvbjtcblx0cm90YXRlZFBvc2l0aW9uLnggPSBjb3MoIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueCAtIHNpbiggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi55O1xuXHRyb3RhdGVkUG9zaXRpb24ueSA9IHNpbiggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi54ICsgY29zKCByb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnk7XG5cdG12UG9zaXRpb24ueHkgKz0gcm90YXRlZFBvc2l0aW9uO1xuXHRnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtdlBvc2l0aW9uO1xuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0I2luY2x1ZGUgPGZvZ192ZXJ0ZXg+XG59In0sVHN0PXtjb21tb246e2RpZmZ1c2U6e3ZhbHVlOm5ldyBDcnQoMTU2NTg3MzQpfSxvcGFjaXR5Ont2YWx1ZToxfSxtYXA6e3ZhbHVlOm51bGx9LHV2VHJhbnNmb3JtOnt2YWx1ZTpuZXcgV2l0fSx1djJUcmFuc2Zvcm06e3ZhbHVlOm5ldyBXaXR9LGFscGhhTWFwOnt2YWx1ZTpudWxsfX0sc3BlY3VsYXJtYXA6e3NwZWN1bGFyTWFwOnt2YWx1ZTpudWxsfX0sZW52bWFwOntlbnZNYXA6e3ZhbHVlOm51bGx9LGZsaXBFbnZNYXA6e3ZhbHVlOi0xfSxyZWZsZWN0aXZpdHk6e3ZhbHVlOjF9LHJlZnJhY3Rpb25SYXRpbzp7dmFsdWU6Ljk4fSxtYXhNaXBMZXZlbDp7dmFsdWU6MH19LGFvbWFwOnthb01hcDp7dmFsdWU6bnVsbH0sYW9NYXBJbnRlbnNpdHk6e3ZhbHVlOjF9fSxsaWdodG1hcDp7bGlnaHRNYXA6e3ZhbHVlOm51bGx9LGxpZ2h0TWFwSW50ZW5zaXR5Ont2YWx1ZToxfX0sZW1pc3NpdmVtYXA6e2VtaXNzaXZlTWFwOnt2YWx1ZTpudWxsfX0sYnVtcG1hcDp7YnVtcE1hcDp7dmFsdWU6bnVsbH0sYnVtcFNjYWxlOnt2YWx1ZToxfX0sbm9ybWFsbWFwOntub3JtYWxNYXA6e3ZhbHVlOm51bGx9LG5vcm1hbFNjYWxlOnt2YWx1ZTpuZXcgVWl0KDEsMSl9fSxkaXNwbGFjZW1lbnRtYXA6e2Rpc3BsYWNlbWVudE1hcDp7dmFsdWU6bnVsbH0sZGlzcGxhY2VtZW50U2NhbGU6e3ZhbHVlOjF9LGRpc3BsYWNlbWVudEJpYXM6e3ZhbHVlOjB9fSxyb3VnaG5lc3NtYXA6e3JvdWdobmVzc01hcDp7dmFsdWU6bnVsbH19LG1ldGFsbmVzc21hcDp7bWV0YWxuZXNzTWFwOnt2YWx1ZTpudWxsfX0sZ3JhZGllbnRtYXA6e2dyYWRpZW50TWFwOnt2YWx1ZTpudWxsfX0sZm9nOntmb2dEZW5zaXR5Ont2YWx1ZToyNWUtNX0sZm9nTmVhcjp7dmFsdWU6MX0sZm9nRmFyOnt2YWx1ZToyZTN9LGZvZ0NvbG9yOnt2YWx1ZTpuZXcgQ3J0KDE2Nzc3MjE1KX19LGxpZ2h0czp7YW1iaWVudExpZ2h0Q29sb3I6e3ZhbHVlOltdfSxsaWdodFByb2JlOnt2YWx1ZTpbXX0sZGlyZWN0aW9uYWxMaWdodHM6e3ZhbHVlOltdLHByb3BlcnRpZXM6e2RpcmVjdGlvbjp7fSxjb2xvcjp7fX19LGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntzaGFkb3dCaWFzOnt9LHNoYWRvd05vcm1hbEJpYXM6e30sc2hhZG93UmFkaXVzOnt9LHNoYWRvd01hcFNpemU6e319fSxkaXJlY3Rpb25hbFNoYWRvd01hcDp7dmFsdWU6W119LGRpcmVjdGlvbmFsU2hhZG93TWF0cml4Ont2YWx1ZTpbXX0sc3BvdExpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7Y29sb3I6e30scG9zaXRpb246e30sZGlyZWN0aW9uOnt9LGRpc3RhbmNlOnt9LGNvbmVDb3M6e30scGVudW1icmFDb3M6e30sZGVjYXk6e319fSxzcG90TGlnaHRTaGFkb3dzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntzaGFkb3dCaWFzOnt9LHNoYWRvd05vcm1hbEJpYXM6e30sc2hhZG93UmFkaXVzOnt9LHNoYWRvd01hcFNpemU6e319fSxzcG90U2hhZG93TWFwOnt2YWx1ZTpbXX0sc3BvdFNoYWRvd01hdHJpeDp7dmFsdWU6W119LHBvaW50TGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntjb2xvcjp7fSxwb3NpdGlvbjp7fSxkZWNheTp7fSxkaXN0YW5jZTp7fX19LHBvaW50TGlnaHRTaGFkb3dzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntzaGFkb3dCaWFzOnt9LHNoYWRvd05vcm1hbEJpYXM6e30sc2hhZG93UmFkaXVzOnt9LHNoYWRvd01hcFNpemU6e30sc2hhZG93Q2FtZXJhTmVhcjp7fSxzaGFkb3dDYW1lcmFGYXI6e319fSxwb2ludFNoYWRvd01hcDp7dmFsdWU6W119LHBvaW50U2hhZG93TWF0cml4Ont2YWx1ZTpbXX0saGVtaXNwaGVyZUxpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7ZGlyZWN0aW9uOnt9LHNreUNvbG9yOnt9LGdyb3VuZENvbG9yOnt9fX0scmVjdEFyZWFMaWdodHM6e3ZhbHVlOltdLHByb3BlcnRpZXM6e2NvbG9yOnt9LHBvc2l0aW9uOnt9LHdpZHRoOnt9LGhlaWdodDp7fX19LGx0Y18xOnt2YWx1ZTpudWxsfSxsdGNfMjp7dmFsdWU6bnVsbH19LHBvaW50czp7ZGlmZnVzZTp7dmFsdWU6bmV3IENydCgxNTY1ODczNCl9LG9wYWNpdHk6e3ZhbHVlOjF9LHNpemU6e3ZhbHVlOjF9LHNjYWxlOnt2YWx1ZToxfSxtYXA6e3ZhbHVlOm51bGx9LGFscGhhTWFwOnt2YWx1ZTpudWxsfSx1dlRyYW5zZm9ybTp7dmFsdWU6bmV3IFdpdH19LHNwcml0ZTp7ZGlmZnVzZTp7dmFsdWU6bmV3IENydCgxNTY1ODczNCl9LG9wYWNpdHk6e3ZhbHVlOjF9LGNlbnRlcjp7dmFsdWU6bmV3IFVpdCguNSwuNSl9LHJvdGF0aW9uOnt2YWx1ZTowfSxtYXA6e3ZhbHVlOm51bGx9LGFscGhhTWFwOnt2YWx1ZTpudWxsfSx1dlRyYW5zZm9ybTp7dmFsdWU6bmV3IFdpdH19fSxOc3Q9e2Jhc2ljOnt1bmlmb3Jtczpoc3QoW1RzdC5jb21tb24sVHN0LnNwZWN1bGFybWFwLFRzdC5lbnZtYXAsVHN0LmFvbWFwLFRzdC5saWdodG1hcCxUc3QuZm9nXSksdmVydGV4U2hhZGVyOlJzdC5tZXNoYmFzaWNfdmVydCxmcmFnbWVudFNoYWRlcjpSc3QubWVzaGJhc2ljX2ZyYWd9LGxhbWJlcnQ6e3VuaWZvcm1zOmhzdChbVHN0LmNvbW1vbixUc3Quc3BlY3VsYXJtYXAsVHN0LmVudm1hcCxUc3QuYW9tYXAsVHN0LmxpZ2h0bWFwLFRzdC5lbWlzc2l2ZW1hcCxUc3QuZm9nLFRzdC5saWdodHMse2VtaXNzaXZlOnt2YWx1ZTpuZXcgQ3J0KDApfX1dKSx2ZXJ0ZXhTaGFkZXI6UnN0Lm1lc2hsYW1iZXJ0X3ZlcnQsZnJhZ21lbnRTaGFkZXI6UnN0Lm1lc2hsYW1iZXJ0X2ZyYWd9LHBob25nOnt1bmlmb3Jtczpoc3QoW1RzdC5jb21tb24sVHN0LnNwZWN1bGFybWFwLFRzdC5lbnZtYXAsVHN0LmFvbWFwLFRzdC5saWdodG1hcCxUc3QuZW1pc3NpdmVtYXAsVHN0LmJ1bXBtYXAsVHN0Lm5vcm1hbG1hcCxUc3QuZGlzcGxhY2VtZW50bWFwLFRzdC5mb2csVHN0LmxpZ2h0cyx7ZW1pc3NpdmU6e3ZhbHVlOm5ldyBDcnQoMCl9LHNwZWN1bGFyOnt2YWx1ZTpuZXcgQ3J0KDExMTg0ODEpfSxzaGluaW5lc3M6e3ZhbHVlOjMwfX1dKSx2ZXJ0ZXhTaGFkZXI6UnN0Lm1lc2hwaG9uZ192ZXJ0LGZyYWdtZW50U2hhZGVyOlJzdC5tZXNocGhvbmdfZnJhZ30sc3RhbmRhcmQ6e3VuaWZvcm1zOmhzdChbVHN0LmNvbW1vbixUc3QuZW52bWFwLFRzdC5hb21hcCxUc3QubGlnaHRtYXAsVHN0LmVtaXNzaXZlbWFwLFRzdC5idW1wbWFwLFRzdC5ub3JtYWxtYXAsVHN0LmRpc3BsYWNlbWVudG1hcCxUc3Qucm91Z2huZXNzbWFwLFRzdC5tZXRhbG5lc3NtYXAsVHN0LmZvZyxUc3QubGlnaHRzLHtlbWlzc2l2ZTp7dmFsdWU6bmV3IENydCgwKX0scm91Z2huZXNzOnt2YWx1ZToxfSxtZXRhbG5lc3M6e3ZhbHVlOjB9LGVudk1hcEludGVuc2l0eTp7dmFsdWU6MX19XSksdmVydGV4U2hhZGVyOlJzdC5tZXNocGh5c2ljYWxfdmVydCxmcmFnbWVudFNoYWRlcjpSc3QubWVzaHBoeXNpY2FsX2ZyYWd9LHRvb246e3VuaWZvcm1zOmhzdChbVHN0LmNvbW1vbixUc3QuYW9tYXAsVHN0LmxpZ2h0bWFwLFRzdC5lbWlzc2l2ZW1hcCxUc3QuYnVtcG1hcCxUc3Qubm9ybWFsbWFwLFRzdC5kaXNwbGFjZW1lbnRtYXAsVHN0LmdyYWRpZW50bWFwLFRzdC5mb2csVHN0LmxpZ2h0cyx7ZW1pc3NpdmU6e3ZhbHVlOm5ldyBDcnQoMCl9fV0pLHZlcnRleFNoYWRlcjpSc3QubWVzaHRvb25fdmVydCxmcmFnbWVudFNoYWRlcjpSc3QubWVzaHRvb25fZnJhZ30sbWF0Y2FwOnt1bmlmb3Jtczpoc3QoW1RzdC5jb21tb24sVHN0LmJ1bXBtYXAsVHN0Lm5vcm1hbG1hcCxUc3QuZGlzcGxhY2VtZW50bWFwLFRzdC5mb2cse21hdGNhcDp7dmFsdWU6bnVsbH19XSksdmVydGV4U2hhZGVyOlJzdC5tZXNobWF0Y2FwX3ZlcnQsZnJhZ21lbnRTaGFkZXI6UnN0Lm1lc2htYXRjYXBfZnJhZ30scG9pbnRzOnt1bmlmb3Jtczpoc3QoW1RzdC5wb2ludHMsVHN0LmZvZ10pLHZlcnRleFNoYWRlcjpSc3QucG9pbnRzX3ZlcnQsZnJhZ21lbnRTaGFkZXI6UnN0LnBvaW50c19mcmFnfSxkYXNoZWQ6e3VuaWZvcm1zOmhzdChbVHN0LmNvbW1vbixUc3QuZm9nLHtzY2FsZTp7dmFsdWU6MX0sZGFzaFNpemU6e3ZhbHVlOjF9LHRvdGFsU2l6ZTp7dmFsdWU6Mn19XSksdmVydGV4U2hhZGVyOlJzdC5saW5lZGFzaGVkX3ZlcnQsZnJhZ21lbnRTaGFkZXI6UnN0LmxpbmVkYXNoZWRfZnJhZ30sZGVwdGg6e3VuaWZvcm1zOmhzdChbVHN0LmNvbW1vbixUc3QuZGlzcGxhY2VtZW50bWFwXSksdmVydGV4U2hhZGVyOlJzdC5kZXB0aF92ZXJ0LGZyYWdtZW50U2hhZGVyOlJzdC5kZXB0aF9mcmFnfSxub3JtYWw6e3VuaWZvcm1zOmhzdChbVHN0LmNvbW1vbixUc3QuYnVtcG1hcCxUc3Qubm9ybWFsbWFwLFRzdC5kaXNwbGFjZW1lbnRtYXAse29wYWNpdHk6e3ZhbHVlOjF9fV0pLHZlcnRleFNoYWRlcjpSc3Qubm9ybWFsX3ZlcnQsZnJhZ21lbnRTaGFkZXI6UnN0Lm5vcm1hbF9mcmFnfSxzcHJpdGU6e3VuaWZvcm1zOmhzdChbVHN0LnNwcml0ZSxUc3QuZm9nXSksdmVydGV4U2hhZGVyOlJzdC5zcHJpdGVfdmVydCxmcmFnbWVudFNoYWRlcjpSc3Quc3ByaXRlX2ZyYWd9LGJhY2tncm91bmQ6e3VuaWZvcm1zOnt1dlRyYW5zZm9ybTp7dmFsdWU6bmV3IFdpdH0sdDJEOnt2YWx1ZTpudWxsfX0sdmVydGV4U2hhZGVyOlJzdC5iYWNrZ3JvdW5kX3ZlcnQsZnJhZ21lbnRTaGFkZXI6UnN0LmJhY2tncm91bmRfZnJhZ30sY3ViZTp7dW5pZm9ybXM6aHN0KFtUc3QuZW52bWFwLHtvcGFjaXR5Ont2YWx1ZToxfX1dKSx2ZXJ0ZXhTaGFkZXI6UnN0LmN1YmVfdmVydCxmcmFnbWVudFNoYWRlcjpSc3QuY3ViZV9mcmFnfSxlcXVpcmVjdDp7dW5pZm9ybXM6e3RFcXVpcmVjdDp7dmFsdWU6bnVsbH19LHZlcnRleFNoYWRlcjpSc3QuZXF1aXJlY3RfdmVydCxmcmFnbWVudFNoYWRlcjpSc3QuZXF1aXJlY3RfZnJhZ30sZGlzdGFuY2VSR0JBOnt1bmlmb3Jtczpoc3QoW1RzdC5jb21tb24sVHN0LmRpc3BsYWNlbWVudG1hcCx7cmVmZXJlbmNlUG9zaXRpb246e3ZhbHVlOm5ldyAkaXR9LG5lYXJEaXN0YW5jZTp7dmFsdWU6MX0sZmFyRGlzdGFuY2U6e3ZhbHVlOjFlM319XSksdmVydGV4U2hhZGVyOlJzdC5kaXN0YW5jZVJHQkFfdmVydCxmcmFnbWVudFNoYWRlcjpSc3QuZGlzdGFuY2VSR0JBX2ZyYWd9LHNoYWRvdzp7dW5pZm9ybXM6aHN0KFtUc3QubGlnaHRzLFRzdC5mb2cse2NvbG9yOnt2YWx1ZTpuZXcgQ3J0KDApfSxvcGFjaXR5Ont2YWx1ZToxfX1dKSx2ZXJ0ZXhTaGFkZXI6UnN0LnNoYWRvd192ZXJ0LGZyYWdtZW50U2hhZGVyOlJzdC5zaGFkb3dfZnJhZ319O2Z1bmN0aW9uIElzdCh0LGUsbixvLGkpe2NvbnN0IGE9bmV3IENydCgwKTtsZXQgcixzLGw9MCxjPW51bGwsZD0wLHA9bnVsbDtmdW5jdGlvbiBtKHQsZSl7bi5idWZmZXJzLmNvbG9yLnNldENsZWFyKHQucix0LmcsdC5iLGUsaSl9cmV0dXJue2dldENsZWFyQ29sb3I6ZnVuY3Rpb24oKXtyZXR1cm4gYX0sc2V0Q2xlYXJDb2xvcjpmdW5jdGlvbih0LGU9MSl7YS5zZXQodCksbD1lLG0oYSxsKX0sZ2V0Q2xlYXJBbHBoYTpmdW5jdGlvbigpe3JldHVybiBsfSxzZXRDbGVhckFscGhhOmZ1bmN0aW9uKHQpe2w9dCxtKGEsbCl9LHJlbmRlcjpmdW5jdGlvbiB1KG4saSxmLGcpe2xldCBoPSEwPT09aS5pc1NjZW5lP2kuYmFja2dyb3VuZDpudWxsO2gmJmguaXNUZXh0dXJlJiYoaD1lLmdldChoKSk7Y29uc3QgYj10LnhyLHk9Yi5nZXRTZXNzaW9uJiZiLmdldFNlc3Npb24oKTt5JiYiYWRkaXRpdmUiPT09eS5lbnZpcm9ubWVudEJsZW5kTW9kZSYmKGg9bnVsbCksbnVsbD09PWg/bShhLGwpOmgmJmguaXNDb2xvciYmKG0oaCwxKSxnPSEwKSwodC5hdXRvQ2xlYXJ8fGcpJiZ0LmNsZWFyKHQuYXV0b0NsZWFyQ29sb3IsdC5hdXRvQ2xlYXJEZXB0aCx0LmF1dG9DbGVhclN0ZW5jaWwpLGgmJihoLmlzQ3ViZVRleHR1cmV8fGguaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXR8fDMwNj09PWgubWFwcGluZyk/KHZvaWQgMD09PXMmJihzPW5ldyBtc3QobmV3IGZzdCgxLDEsMSksbmV3IHlzdCh7bmFtZToiQmFja2dyb3VuZEN1YmVNYXRlcmlhbCIsdW5pZm9ybXM6Z3N0KE5zdC5jdWJlLnVuaWZvcm1zKSx2ZXJ0ZXhTaGFkZXI6TnN0LmN1YmUudmVydGV4U2hhZGVyLGZyYWdtZW50U2hhZGVyOk5zdC5jdWJlLmZyYWdtZW50U2hhZGVyLHNpZGU6MSxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMSxmb2c6ITF9KSkscy5nZW9tZXRyeS5kZWxldGVBdHRyaWJ1dGUoIm5vcm1hbCIpLHMuZ2VvbWV0cnkuZGVsZXRlQXR0cmlidXRlKCJ1diIpLHMub25CZWZvcmVSZW5kZXI9ZnVuY3Rpb24odCxlLG4pe3RoaXMubWF0cml4V29ybGQuY29weVBvc2l0aW9uKG4ubWF0cml4V29ybGQpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkocy5tYXRlcmlhbCwiZW52TWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudW5pZm9ybXMuZW52TWFwLnZhbHVlfX0pLG8udXBkYXRlKHMpKSxoLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0JiYoaD1oLnRleHR1cmUpLHMubWF0ZXJpYWwudW5pZm9ybXMuZW52TWFwLnZhbHVlPWgscy5tYXRlcmlhbC51bmlmb3Jtcy5mbGlwRW52TWFwLnZhbHVlPWguaXNDdWJlVGV4dHVyZSYmaC5fbmVlZHNGbGlwRW52TWFwPy0xOjEsYz09PWgmJmQ9PT1oLnZlcnNpb24mJnA9PT10LnRvbmVNYXBwaW5nfHwocy5tYXRlcmlhbC5uZWVkc1VwZGF0ZT0hMCxjPWgsZD1oLnZlcnNpb24scD10LnRvbmVNYXBwaW5nKSxuLnVuc2hpZnQocyxzLmdlb21ldHJ5LHMubWF0ZXJpYWwsMCwwLG51bGwpKTpoJiZoLmlzVGV4dHVyZSYmKHZvaWQgMD09PXImJihyPW5ldyBtc3QobmV3IEFzdCgyLDIpLG5ldyB5c3Qoe25hbWU6IkJhY2tncm91bmRNYXRlcmlhbCIsdW5pZm9ybXM6Z3N0KE5zdC5iYWNrZ3JvdW5kLnVuaWZvcm1zKSx2ZXJ0ZXhTaGFkZXI6TnN0LmJhY2tncm91bmQudmVydGV4U2hhZGVyLGZyYWdtZW50U2hhZGVyOk5zdC5iYWNrZ3JvdW5kLmZyYWdtZW50U2hhZGVyLHNpZGU6MCxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMSxmb2c6ITF9KSksci5nZW9tZXRyeS5kZWxldGVBdHRyaWJ1dGUoIm5vcm1hbCIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLm1hdGVyaWFsLCJtYXAiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51bmlmb3Jtcy50MkQudmFsdWV9fSksby51cGRhdGUocikpLHIubWF0ZXJpYWwudW5pZm9ybXMudDJELnZhbHVlPWgsITA9PT1oLm1hdHJpeEF1dG9VcGRhdGUmJmgudXBkYXRlTWF0cml4KCksci5tYXRlcmlhbC51bmlmb3Jtcy51dlRyYW5zZm9ybS52YWx1ZS5jb3B5KGgubWF0cml4KSxjPT09aCYmZD09PWgudmVyc2lvbiYmcD09PXQudG9uZU1hcHBpbmd8fChyLm1hdGVyaWFsLm5lZWRzVXBkYXRlPSEwLGM9aCxkPWgudmVyc2lvbixwPXQudG9uZU1hcHBpbmcpLG4udW5zaGlmdChyLHIuZ2VvbWV0cnksci5tYXRlcmlhbCwwLDAsbnVsbCkpfX19ZnVuY3Rpb24genN0KHQsZSxuLG8pe2NvbnN0IGk9dC5nZXRQYXJhbWV0ZXIoMzQ5MjEpLGE9by5pc1dlYkdMMj9udWxsOmUuZ2V0KCJPRVNfdmVydGV4X2FycmF5X29iamVjdCIpLHI9by5pc1dlYkdMMnx8bnVsbCE9PWEscz17fSxsPW0obnVsbCk7bGV0IGM9bDtmdW5jdGlvbiBkKGUpe3JldHVybiBvLmlzV2ViR0wyP3QuYmluZFZlcnRleEFycmF5KGUpOmEuYmluZFZlcnRleEFycmF5T0VTKGUpfWZ1bmN0aW9uIHAoZSl7cmV0dXJuIG8uaXNXZWJHTDI/dC5kZWxldGVWZXJ0ZXhBcnJheShlKTphLmRlbGV0ZVZlcnRleEFycmF5T0VTKGUpfWZ1bmN0aW9uIG0odCl7Y29uc3QgZT1bXSxuPVtdLG89W107Zm9yKGxldCB0PTA7dDxpO3QrKyllW3RdPTAsblt0XT0wLG9bdF09MDtyZXR1cm57Z2VvbWV0cnk6bnVsbCxwcm9ncmFtOm51bGwsd2lyZWZyYW1lOiExLG5ld0F0dHJpYnV0ZXM6ZSxlbmFibGVkQXR0cmlidXRlczpuLGF0dHJpYnV0ZURpdmlzb3JzOm8sb2JqZWN0OnQsYXR0cmlidXRlczp7fSxpbmRleDpudWxsfX1mdW5jdGlvbiB1KCl7Y29uc3QgdD1jLm5ld0F0dHJpYnV0ZXM7Zm9yKGxldCBlPTAsbj10Lmxlbmd0aDtlPG47ZSsrKXRbZV09MH1mdW5jdGlvbiBmKHQpe2codCwwKX1mdW5jdGlvbiBnKG4saSl7Y29uc3QgYT1jLmVuYWJsZWRBdHRyaWJ1dGVzLHI9Yy5hdHRyaWJ1dGVEaXZpc29ycztjLm5ld0F0dHJpYnV0ZXNbbl09MSwwPT09YVtuXSYmKHQuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkobiksYVtuXT0xKSxyW25dIT09aSYmKChvLmlzV2ViR0wyP3Q6ZS5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSlbby5pc1dlYkdMMj8idmVydGV4QXR0cmliRGl2aXNvciI6InZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRSJdKG4saSkscltuXT1pKX1mdW5jdGlvbiBoKCl7Y29uc3QgZT1jLm5ld0F0dHJpYnV0ZXMsbj1jLmVuYWJsZWRBdHRyaWJ1dGVzO2ZvcihsZXQgbz0wLGk9bi5sZW5ndGg7bzxpO28rKyluW29dIT09ZVtvXSYmKHQuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KG8pLG5bb109MCl9ZnVuY3Rpb24gYihlLG4saSxhLHIscyl7ITAhPT1vLmlzV2ViR0wyfHw1MTI0IT09aSYmNTEyNSE9PWk/dC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGUsbixpLGEscixzKTp0LnZlcnRleEF0dHJpYklQb2ludGVyKGUsbixpLHIscyl9ZnVuY3Rpb24geSgpe18oKSxjIT09bCYmKGM9bCxkKGMub2JqZWN0KSl9ZnVuY3Rpb24gXygpe2wuZ2VvbWV0cnk9bnVsbCxsLnByb2dyYW09bnVsbCxsLndpcmVmcmFtZT0hMX1yZXR1cm57c2V0dXA6ZnVuY3Rpb24gQyhpLGwscCx5LF8pe2xldCBDPSExO2lmKHIpe2NvbnN0IGU9KGZ1bmN0aW9uIE0oZSxuLGkpe2NvbnN0IHI9ITA9PT1pLndpcmVmcmFtZTtsZXQgbD1zW2UuaWRdO3ZvaWQgMD09PWwmJihsPXt9LHNbZS5pZF09bCk7bGV0IGM9bFtuLmlkXTt2b2lkIDA9PT1jJiYoYz17fSxsW24uaWRdPWMpO2xldCBkPWNbcl07cmV0dXJuIHZvaWQgMD09PWQmJihkPW0oKGZ1bmN0aW9uIHAoKXtyZXR1cm4gby5pc1dlYkdMMj90LmNyZWF0ZVZlcnRleEFycmF5KCk6YS5jcmVhdGVWZXJ0ZXhBcnJheU9FUygpfSkoKSksY1tyXT1kKSxkfSkoeSxwLGwpO2MhPT1lJiYoYz1lLGQoYy5vYmplY3QpKSxDPShmdW5jdGlvbiB2KHQsZSl7Y29uc3Qgbj1jLmF0dHJpYnV0ZXMsbz10LmF0dHJpYnV0ZXM7bGV0IGk9MDtmb3IoY29uc3QgdCBpbiBvKXtjb25zdCBlPW5bdF0sYT1vW3RdO2lmKHZvaWQgMD09PWUpcmV0dXJuITA7aWYoZS5hdHRyaWJ1dGUhPT1hKXJldHVybiEwO2lmKGUuZGF0YSE9PWEuZGF0YSlyZXR1cm4hMDtpKyt9cmV0dXJuIGMuYXR0cmlidXRlc051bSE9PWl8fGMuaW5kZXghPT1lfSkoeSxfKSxDJiYoZnVuY3Rpb24geCh0LGUpe2NvbnN0IG49e30sbz10LmF0dHJpYnV0ZXM7bGV0IGk9MDtmb3IoY29uc3QgdCBpbiBvKXtjb25zdCBlPW9bdF0sYT17fTthLmF0dHJpYnV0ZT1lLGUuZGF0YSYmKGEuZGF0YT1lLmRhdGEpLG5bdF09YSxpKyt9Yy5hdHRyaWJ1dGVzPW4sYy5hdHRyaWJ1dGVzTnVtPWksYy5pbmRleD1lfSkoeSxfKX1lbHNle2NvbnN0IHQ9ITA9PT1sLndpcmVmcmFtZTtjLmdlb21ldHJ5PT09eS5pZCYmYy5wcm9ncmFtPT09cC5pZCYmYy53aXJlZnJhbWU9PT10fHwoYy5nZW9tZXRyeT15LmlkLGMucHJvZ3JhbT1wLmlkLGMud2lyZWZyYW1lPXQsQz0hMCl9ITA9PT1pLmlzSW5zdGFuY2VkTWVzaCYmKEM9ITApLG51bGwhPT1fJiZuLnVwZGF0ZShfLDM0OTYzKSxDJiYoKGZ1bmN0aW9uIE8oaSxhLHIscyl7aWYoITE9PT1vLmlzV2ViR0wyJiYoaS5pc0luc3RhbmNlZE1lc2h8fHMuaXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSkmJm51bGw9PT1lLmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpKXJldHVybjt1KCk7Y29uc3QgbD1zLmF0dHJpYnV0ZXMsYz1yLmdldEF0dHJpYnV0ZXMoKSxkPWEuZGVmYXVsdEF0dHJpYnV0ZVZhbHVlcztmb3IoY29uc3QgZSBpbiBjKXtjb25zdCBvPWNbZV07aWYobz49MCl7Y29uc3QgYT1sW2VdO2lmKHZvaWQgMCE9PWEpe2NvbnN0IGU9YS5ub3JtYWxpemVkLGk9YS5pdGVtU2l6ZSxyPW4uZ2V0KGEpO2lmKHZvaWQgMD09PXIpY29udGludWU7Y29uc3QgbD1yLmJ1ZmZlcixjPXIudHlwZSxkPXIuYnl0ZXNQZXJFbGVtZW50O2lmKGEuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSl7Y29uc3Qgbj1hLmRhdGEscj1uLnN0cmlkZSxwPWEub2Zmc2V0O24mJm4uaXNJbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlcj8oZyhvLG4ubWVzaFBlckF0dHJpYnV0ZSksdm9pZCAwPT09cy5fbWF4SW5zdGFuY2VDb3VudCYmKHMuX21heEluc3RhbmNlQ291bnQ9bi5tZXNoUGVyQXR0cmlidXRlKm4uY291bnQpKTpmKG8pLHQuYmluZEJ1ZmZlcigzNDk2MixsKSxiKG8saSxjLGUscipkLHAqZCl9ZWxzZSBhLmlzSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlPyhnKG8sYS5tZXNoUGVyQXR0cmlidXRlKSx2b2lkIDA9PT1zLl9tYXhJbnN0YW5jZUNvdW50JiYocy5fbWF4SW5zdGFuY2VDb3VudD1hLm1lc2hQZXJBdHRyaWJ1dGUqYS5jb3VudCkpOmYobyksdC5iaW5kQnVmZmVyKDM0OTYyLGwpLGIobyxpLGMsZSwwLDApfWVsc2UgaWYoImluc3RhbmNlTWF0cml4Ij09PWUpe2NvbnN0IGU9bi5nZXQoaS5pbnN0YW5jZU1hdHJpeCk7aWYodm9pZCAwPT09ZSljb250aW51ZTtjb25zdCBhPWUuYnVmZmVyLHI9ZS50eXBlO2cobyswLDEpLGcobysxLDEpLGcobysyLDEpLGcobyszLDEpLHQuYmluZEJ1ZmZlcigzNDk2MixhKSx0LnZlcnRleEF0dHJpYlBvaW50ZXIobyswLDQsciwhMSw2NCwwKSx0LnZlcnRleEF0dHJpYlBvaW50ZXIobysxLDQsciwhMSw2NCwxNiksdC52ZXJ0ZXhBdHRyaWJQb2ludGVyKG8rMiw0LHIsITEsNjQsMzIpLHQudmVydGV4QXR0cmliUG9pbnRlcihvKzMsNCxyLCExLDY0LDQ4KX1lbHNlIGlmKCJpbnN0YW5jZUNvbG9yIj09PWUpe2NvbnN0IGU9bi5nZXQoaS5pbnN0YW5jZUNvbG9yKTtpZih2b2lkIDA9PT1lKWNvbnRpbnVlO2NvbnN0IGE9ZS5idWZmZXIscj1lLnR5cGU7ZyhvLDEpLHQuYmluZEJ1ZmZlcigzNDk2MixhKSx0LnZlcnRleEF0dHJpYlBvaW50ZXIobywzLHIsITEsMTIsMCl9ZWxzZSBpZih2b2lkIDAhPT1kKXtjb25zdCBuPWRbZV07aWYodm9pZCAwIT09bilzd2l0Y2gobi5sZW5ndGgpe2Nhc2UgMjp0LnZlcnRleEF0dHJpYjJmdihvLG4pO2JyZWFrO2Nhc2UgMzp0LnZlcnRleEF0dHJpYjNmdihvLG4pO2JyZWFrO2Nhc2UgNDp0LnZlcnRleEF0dHJpYjRmdihvLG4pO2JyZWFrO2RlZmF1bHQ6dC52ZXJ0ZXhBdHRyaWIxZnYobyxuKX19fX1oKCl9KShpLGwscCx5KSxudWxsIT09XyYmdC5iaW5kQnVmZmVyKDM0OTYzLG4uZ2V0KF8pLmJ1ZmZlcikpfSxyZXNldDp5LHJlc2V0RGVmYXVsdFN0YXRlOl8sZGlzcG9zZTpmdW5jdGlvbiBNKCl7eSgpO2Zvcihjb25zdCB0IGluIHMpe2NvbnN0IGU9c1t0XTtmb3IoY29uc3QgdCBpbiBlKXtjb25zdCBuPWVbdF07Zm9yKGNvbnN0IHQgaW4gbilwKG5bdF0ub2JqZWN0KSxkZWxldGUgblt0XTtkZWxldGUgZVt0XX1kZWxldGUgc1t0XX19LHJlbGVhc2VTdGF0ZXNPZkdlb21ldHJ5OmZ1bmN0aW9uIHYodCl7aWYodm9pZCAwPT09c1t0LmlkXSlyZXR1cm47Y29uc3QgZT1zW3QuaWRdO2Zvcihjb25zdCB0IGluIGUpe2NvbnN0IG49ZVt0XTtmb3IoY29uc3QgdCBpbiBuKXAoblt0XS5vYmplY3QpLGRlbGV0ZSBuW3RdO2RlbGV0ZSBlW3RdfWRlbGV0ZSBzW3QuaWRdfSxyZWxlYXNlU3RhdGVzT2ZQcm9ncmFtOmZ1bmN0aW9uIHgodCl7Zm9yKGNvbnN0IGUgaW4gcyl7Y29uc3Qgbj1zW2VdO2lmKHZvaWQgMD09PW5bdC5pZF0pY29udGludWU7Y29uc3Qgbz1uW3QuaWRdO2Zvcihjb25zdCB0IGluIG8pcChvW3RdLm9iamVjdCksZGVsZXRlIG9bdF07ZGVsZXRlIG5bdC5pZF19fSxpbml0QXR0cmlidXRlczp1LGVuYWJsZUF0dHJpYnV0ZTpmLGRpc2FibGVVbnVzZWRBdHRyaWJ1dGVzOmh9fWZ1bmN0aW9uIEhzdCh0LGUsbixvKXtjb25zdCBpPW8uaXNXZWJHTDI7bGV0IGE7dGhpcy5zZXRNb2RlPWZ1bmN0aW9uIHIodCl7YT10fSx0aGlzLnJlbmRlcj1mdW5jdGlvbiBzKGUsbyl7dC5kcmF3QXJyYXlzKGEsZSxvKSxuLnVwZGF0ZShvLGEsMSl9LHRoaXMucmVuZGVySW5zdGFuY2VzPWZ1bmN0aW9uIGwobyxyLHMpe2lmKDA9PT1zKXJldHVybjtsZXQgbCxjO2lmKGkpbD10LGM9ImRyYXdBcnJheXNJbnN0YW5jZWQiO2Vsc2UgaWYobD1lLmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpLGM9ImRyYXdBcnJheXNJbnN0YW5jZWRBTkdMRSIsbnVsbD09PWwpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xCdWZmZXJSZW5kZXJlcjogdXNpbmcgVEhSRUUuSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkgYnV0IGhhcmR3YXJlIGRvZXMgbm90IHN1cHBvcnQgZXh0ZW5zaW9uIEFOR0xFX2luc3RhbmNlZF9hcnJheXMuIik7bFtjXShhLG8scixzKSxuLnVwZGF0ZShyLGEscyl9fWZ1bmN0aW9uIEZzdCh0LGUsbil7bGV0IG87ZnVuY3Rpb24gaShlKXtpZigiaGlnaHAiPT09ZSl7aWYodC5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoMzU2MzMsMzYzMzgpLnByZWNpc2lvbj4wJiZ0LmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgzNTYzMiwzNjMzOCkucHJlY2lzaW9uPjApcmV0dXJuImhpZ2hwIjtlPSJtZWRpdW1wIn1yZXR1cm4ibWVkaXVtcCI9PT1lJiZ0LmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgzNTYzMywzNjMzNykucHJlY2lzaW9uPjAmJnQuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KDM1NjMyLDM2MzM3KS5wcmVjaXNpb24+MD8ibWVkaXVtcCI6Imxvd3AifWNvbnN0IGE9InVuZGVmaW5lZCIhPXR5cGVvZiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0JiZ0IGluc3RhbmNlb2YgV2ViR0wyUmVuZGVyaW5nQ29udGV4dHx8InVuZGVmaW5lZCIhPXR5cGVvZiBXZWJHTDJDb21wdXRlUmVuZGVyaW5nQ29udGV4dCYmdCBpbnN0YW5jZW9mIFdlYkdMMkNvbXB1dGVSZW5kZXJpbmdDb250ZXh0O2xldCByPXZvaWQgMCE9PW4ucHJlY2lzaW9uP24ucHJlY2lzaW9uOiJoaWdocCI7Y29uc3Qgcz1pKHIpO3MhPT1yJiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiIsciwibm90IHN1cHBvcnRlZCwgdXNpbmciLHMsImluc3RlYWQuIikscj1zKTtjb25zdCBsPSEwPT09bi5sb2dhcml0aG1pY0RlcHRoQnVmZmVyLGM9dC5nZXRQYXJhbWV0ZXIoMzQ5MzApLGQ9dC5nZXRQYXJhbWV0ZXIoMzU2NjApLHA9dC5nZXRQYXJhbWV0ZXIoMzM3OSksbT10LmdldFBhcmFtZXRlcigzNDA3NiksdT10LmdldFBhcmFtZXRlcigzNDkyMSksZj10LmdldFBhcmFtZXRlcigzNjM0NyksZz10LmdldFBhcmFtZXRlcigzNjM0OCksaD10LmdldFBhcmFtZXRlcigzNjM0OSksYj1kPjAseT1hfHwhIWUuZ2V0KCJPRVNfdGV4dHVyZV9mbG9hdCIpO3JldHVybntpc1dlYkdMMjphLGdldE1heEFuaXNvdHJvcHk6ZnVuY3Rpb24gXygpe2lmKHZvaWQgMCE9PW8pcmV0dXJuIG87Y29uc3Qgbj1lLmdldCgiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7cmV0dXJuIG89bnVsbCE9PW4/dC5nZXRQYXJhbWV0ZXIobi5NQVhfVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQpOjAsb30sZ2V0TWF4UHJlY2lzaW9uOmkscHJlY2lzaW9uOnIsbG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcjpsLG1heFRleHR1cmVzOmMsbWF4VmVydGV4VGV4dHVyZXM6ZCxtYXhUZXh0dXJlU2l6ZTpwLG1heEN1YmVtYXBTaXplOm0sbWF4QXR0cmlidXRlczp1LG1heFZlcnRleFVuaWZvcm1zOmYsbWF4VmFyeWluZ3M6ZyxtYXhGcmFnbWVudFVuaWZvcm1zOmgsdmVydGV4VGV4dHVyZXM6YixmbG9hdEZyYWdtZW50VGV4dHVyZXM6eSxmbG9hdFZlcnRleFRleHR1cmVzOmImJnksbWF4U2FtcGxlczphP3QuZ2V0UGFyYW1ldGVyKDM2MTgzKTowfX1mdW5jdGlvbiBMc3QodCl7Y29uc3QgZT10aGlzO2xldCBuPW51bGwsbz0wLGk9ITEsYT0hMTtjb25zdCByPW5ldyBucnQscz1uZXcgV2l0LGw9e3ZhbHVlOm51bGwsbmVlZHNVcGRhdGU6ITF9O2Z1bmN0aW9uIGMoKXtsLnZhbHVlIT09biYmKGwudmFsdWU9bixsLm5lZWRzVXBkYXRlPW8+MCksZS5udW1QbGFuZXM9byxlLm51bUludGVyc2VjdGlvbj0wfWZ1bmN0aW9uIGQodCxuLG8saSl7Y29uc3QgYT1udWxsIT09dD90Lmxlbmd0aDowO2xldCBjPW51bGw7aWYoMCE9PWEpe2lmKGM9bC52YWx1ZSwhMCE9PWl8fG51bGw9PT1jKXtjb25zdCBlPW8rNCphLGk9bi5tYXRyaXhXb3JsZEludmVyc2U7cy5nZXROb3JtYWxNYXRyaXgoaSksKG51bGw9PT1jfHxjLmxlbmd0aDxlKSYmKGM9bmV3IEZsb2F0MzJBcnJheShlKSk7Zm9yKGxldCBlPTAsbj1vO2UhPT1hOysrZSxuKz00KXIuY29weSh0W2VdKS5hcHBseU1hdHJpeDQoaSxzKSxyLm5vcm1hbC50b0FycmF5KGMsbiksY1tuKzNdPXIuY29uc3RhbnR9bC52YWx1ZT1jLGwubmVlZHNVcGRhdGU9ITB9cmV0dXJuIGUubnVtUGxhbmVzPWEsZS5udW1JbnRlcnNlY3Rpb249MCxjfXRoaXMudW5pZm9ybT1sLHRoaXMubnVtUGxhbmVzPTAsdGhpcy5udW1JbnRlcnNlY3Rpb249MCx0aGlzLmluaXQ9ZnVuY3Rpb24odCxlLGEpe2NvbnN0IHI9MCE9PXQubGVuZ3RofHxlfHwwIT09b3x8aTtyZXR1cm4gaT1lLG49ZCh0LGEsMCksbz10Lmxlbmd0aCxyfSx0aGlzLmJlZ2luU2hhZG93cz1mdW5jdGlvbigpe2E9ITAsZChudWxsKX0sdGhpcy5lbmRTaGFkb3dzPWZ1bmN0aW9uKCl7YT0hMSxjKCl9LHRoaXMuc2V0U3RhdGU9ZnVuY3Rpb24oZSxyLHMpe2NvbnN0IHA9ZS5jbGlwcGluZ1BsYW5lcyxtPWUuY2xpcEludGVyc2VjdGlvbix1PWUuY2xpcFNoYWRvd3MsZj10LmdldChlKTtpZighaXx8bnVsbD09PXB8fDA9PT1wLmxlbmd0aHx8YSYmIXUpYT9kKG51bGwpOmMoKTtlbHNle2NvbnN0IHQ9YT8wOm8sZT00KnQ7bGV0IGk9Zi5jbGlwcGluZ1N0YXRlfHxudWxsO2wudmFsdWU9aSxpPWQocCxyLGUscyk7Zm9yKGxldCB0PTA7dCE9PWU7Kyt0KWlbdF09blt0XTtmLmNsaXBwaW5nU3RhdGU9aSx0aGlzLm51bUludGVyc2VjdGlvbj1tP3RoaXMubnVtUGxhbmVzOjAsdGhpcy5udW1QbGFuZXMrPXR9fX1mdW5jdGlvbiBCc3QodCl7bGV0IGU9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gbih0LGUpe3JldHVybiAzMDM9PT1lP3QubWFwcGluZz0zMDE6MzA0PT09ZSYmKHQubWFwcGluZz0zMDIpLHR9ZnVuY3Rpb24gbyh0KXtjb25zdCBuPXQudGFyZ2V0O24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsbyk7Y29uc3QgaT1lLmdldChuKTt2b2lkIDAhPT1pJiYoZS5kZWxldGUobiksaS5kaXNwb3NlKCkpfXJldHVybntnZXQ6ZnVuY3Rpb24gaShhKXtpZihhJiZhLmlzVGV4dHVyZSl7Y29uc3QgaT1hLm1hcHBpbmc7aWYoMzAzPT09aXx8MzA0PT09aSl7aWYoZS5oYXMoYSkpcmV0dXJuIG4oZS5nZXQoYSkudGV4dHVyZSxhLm1hcHBpbmcpO3tjb25zdCBpPWEuaW1hZ2U7aWYoaSYmaS5oZWlnaHQ+MCl7Y29uc3Qgcj10LmdldFJlbmRlckxpc3QoKSxzPXQuZ2V0UmVuZGVyVGFyZ2V0KCksbD1uZXcgT3N0KGkuaGVpZ2h0LzIpO3JldHVybiBsLmZyb21FcXVpcmVjdGFuZ3VsYXJUZXh0dXJlKHQsYSksZS5zZXQoYSxsKSx0LnNldFJlbmRlclRhcmdldChzKSx0LnNldFJlbmRlckxpc3QociksYS5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixvKSxuKGwudGV4dHVyZSxhLm1hcHBpbmcpfXJldHVybiBudWxsfX19cmV0dXJuIGF9LGRpc3Bvc2U6ZnVuY3Rpb24gYSgpe2U9bmV3IFdlYWtNYXB9fX1mdW5jdGlvbiBWc3QodCl7Y29uc3QgZT17fTtmdW5jdGlvbiBuKG4pe2lmKHZvaWQgMCE9PWVbbl0pcmV0dXJuIGVbbl07bGV0IG87c3dpdGNoKG4pe2Nhc2UiV0VCR0xfZGVwdGhfdGV4dHVyZSI6bz10LmdldEV4dGVuc2lvbigiV0VCR0xfZGVwdGhfdGV4dHVyZSIpfHx0LmdldEV4dGVuc2lvbigiTU9aX1dFQkdMX2RlcHRoX3RleHR1cmUiKXx8dC5nZXRFeHRlbnNpb24oIldFQktJVF9XRUJHTF9kZXB0aF90ZXh0dXJlIik7YnJlYWs7Y2FzZSJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiOm89dC5nZXRFeHRlbnNpb24oIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpfHx0LmdldEV4dGVuc2lvbigiTU9aX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpfHx0LmdldEV4dGVuc2lvbigiV0VCS0lUX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpO2JyZWFrO2Nhc2UiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiOm89dC5nZXRFeHRlbnNpb24oIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIil8fHQuZ2V0RXh0ZW5zaW9uKCJNT1pfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKXx8dC5nZXRFeHRlbnNpb24oIldFQktJVF9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpO2JyZWFrO2Nhc2UiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIjpvPXQuZ2V0RXh0ZW5zaW9uKCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKXx8dC5nZXRFeHRlbnNpb24oIldFQktJVF9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKTticmVhaztkZWZhdWx0Om89dC5nZXRFeHRlbnNpb24obil9cmV0dXJuIGVbbl09byxvfXJldHVybntoYXM6ZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPT1uKHQpfSxpbml0OmZ1bmN0aW9uKHQpe3QuaXNXZWJHTDI/bigiRVhUX2NvbG9yX2J1ZmZlcl9mbG9hdCIpOihuKCJXRUJHTF9kZXB0aF90ZXh0dXJlIiksbigiT0VTX3RleHR1cmVfZmxvYXQiKSxuKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IiksbigiT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIiKSxuKCJPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKSxuKCJPRVNfZWxlbWVudF9pbmRleF91aW50IiksbigiT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKSxuKCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIikpLG4oIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpLG4oIkVYVF9jb2xvcl9idWZmZXJfaGFsZl9mbG9hdCIpfSxnZXQ6ZnVuY3Rpb24odCl7Y29uc3QgZT1uKHQpO3JldHVybiBudWxsPT09ZSYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAiK3QrIiBleHRlbnNpb24gbm90IHN1cHBvcnRlZC4iKSxlfX19ZnVuY3Rpb24ganN0KHQsZSxuLG8pe2NvbnN0IGk9e30sYT1uZXcgV2Vha01hcDtmdW5jdGlvbiByKHQpe2NvbnN0IHM9dC50YXJnZXQ7bnVsbCE9PXMuaW5kZXgmJmUucmVtb3ZlKHMuaW5kZXgpO2Zvcihjb25zdCB0IGluIHMuYXR0cmlidXRlcyllLnJlbW92ZShzLmF0dHJpYnV0ZXNbdF0pO3MucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsciksZGVsZXRlIGlbcy5pZF07Y29uc3QgbD1hLmdldChzKTtsJiYoZS5yZW1vdmUobCksYS5kZWxldGUocykpLG8ucmVsZWFzZVN0YXRlc09mR2VvbWV0cnkocyksITA9PT1zLmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkmJmRlbGV0ZSBzLl9tYXhJbnN0YW5jZUNvdW50LG4ubWVtb3J5Lmdlb21ldHJpZXMtLX1mdW5jdGlvbiBzKHQpe2NvbnN0IG49W10sbz10LmluZGV4LGk9dC5hdHRyaWJ1dGVzLnBvc2l0aW9uO2xldCByPTA7aWYobnVsbCE9PW8pe2NvbnN0IHQ9by5hcnJheTtyPW8udmVyc2lvbjtmb3IobGV0IGU9MCxvPXQubGVuZ3RoO2U8bztlKz0zKXtjb25zdCBvPXRbZSswXSxpPXRbZSsxXSxhPXRbZSsyXTtuLnB1c2gobyxpLGksYSxhLG8pfX1lbHNle3I9aS52ZXJzaW9uO2ZvcihsZXQgdD0wLGU9aS5hcnJheS5sZW5ndGgvMy0xO3Q8ZTt0Kz0zKXtjb25zdCBlPXQrMCxvPXQrMSxpPXQrMjtuLnB1c2goZSxvLG8saSxpLGUpfX1jb25zdCBzPW5ldyhGcnQobik+NjU1MzU/TnJ0OlJydCkobiwxKTtzLnZlcnNpb249cjtjb25zdCBsPWEuZ2V0KHQpO2wmJmUucmVtb3ZlKGwpLGEuc2V0KHQscyl9cmV0dXJue2dldDpmdW5jdGlvbiBsKHQsZSl7cmV0dXJuITA9PT1pW2UuaWRdfHwoZS5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixyKSxpW2UuaWRdPSEwLG4ubWVtb3J5Lmdlb21ldHJpZXMrKyksZX0sdXBkYXRlOmZ1bmN0aW9uIGModCl7Y29uc3Qgbj10LmF0dHJpYnV0ZXM7Zm9yKGNvbnN0IHQgaW4gbillLnVwZGF0ZShuW3RdLDM0OTYyKTtjb25zdCBvPXQubW9ycGhBdHRyaWJ1dGVzO2Zvcihjb25zdCB0IGluIG8pe2NvbnN0IG49b1t0XTtmb3IobGV0IHQ9MCxvPW4ubGVuZ3RoO3Q8bzt0KyspZS51cGRhdGUoblt0XSwzNDk2Mil9fSxnZXRXaXJlZnJhbWVBdHRyaWJ1dGU6ZnVuY3Rpb24gZCh0KXtjb25zdCBlPWEuZ2V0KHQpO2lmKGUpe2NvbnN0IG49dC5pbmRleDtudWxsIT09biYmZS52ZXJzaW9uPG4udmVyc2lvbiYmcyh0KX1lbHNlIHModCk7cmV0dXJuIGEuZ2V0KHQpfX19ZnVuY3Rpb24gVXN0KHQsZSxuLG8pe2NvbnN0IGk9by5pc1dlYkdMMjtsZXQgYSxyLHM7dGhpcy5zZXRNb2RlPWZ1bmN0aW9uIGwodCl7YT10fSx0aGlzLnNldEluZGV4PWZ1bmN0aW9uIGModCl7cj10LnR5cGUscz10LmJ5dGVzUGVyRWxlbWVudH0sdGhpcy5yZW5kZXI9ZnVuY3Rpb24gZChlLG8pe3QuZHJhd0VsZW1lbnRzKGEsbyxyLGUqcyksbi51cGRhdGUobyxhLDEpfSx0aGlzLnJlbmRlckluc3RhbmNlcz1mdW5jdGlvbiBwKG8sbCxjKXtpZigwPT09YylyZXR1cm47bGV0IGQscDtpZihpKWQ9dCxwPSJkcmF3RWxlbWVudHNJbnN0YW5jZWQiO2Vsc2UgaWYoZD1lLmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpLHA9ImRyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFIixudWxsPT09ZClyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTEluZGV4ZWRCdWZmZXJSZW5kZXJlcjogdXNpbmcgVEhSRUUuSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkgYnV0IGhhcmR3YXJlIGRvZXMgbm90IHN1cHBvcnQgZXh0ZW5zaW9uIEFOR0xFX2luc3RhbmNlZF9hcnJheXMuIik7ZFtwXShhLGwscixvKnMsYyksbi51cGRhdGUobCxhLGMpfX1mdW5jdGlvbiBXc3QodCl7Y29uc3QgZT17ZnJhbWU6MCxjYWxsczowLHRyaWFuZ2xlczowLHBvaW50czowLGxpbmVzOjB9O3JldHVybnttZW1vcnk6e2dlb21ldHJpZXM6MCx0ZXh0dXJlczowfSxyZW5kZXI6ZSxwcm9ncmFtczpudWxsLGF1dG9SZXNldDohMCxyZXNldDpmdW5jdGlvbiBuKCl7ZS5mcmFtZSsrLGUuY2FsbHM9MCxlLnRyaWFuZ2xlcz0wLGUucG9pbnRzPTAsZS5saW5lcz0wfSx1cGRhdGU6ZnVuY3Rpb24gbyh0LG4saSl7c3dpdGNoKGUuY2FsbHMrKyxuKXtjYXNlIDQ6ZS50cmlhbmdsZXMrPWkqKHQvMyk7YnJlYWs7Y2FzZSAxOmUubGluZXMrPWkqKHQvMik7YnJlYWs7Y2FzZSAzOmUubGluZXMrPWkqKHQtMSk7YnJlYWs7Y2FzZSAyOmUubGluZXMrPWkqdDticmVhaztjYXNlIDA6ZS5wb2ludHMrPWkqdDticmVhaztkZWZhdWx0OmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMSW5mbzogVW5rbm93biBkcmF3IG1vZGU6IixuKX19fX1mdW5jdGlvbiBHc3QodCxlKXtyZXR1cm4gdFswXS1lWzBdfWZ1bmN0aW9uIFlzdCh0LGUpe3JldHVybiBNYXRoLmFicyhlWzFdKS1NYXRoLmFicyh0WzFdKX1mdW5jdGlvbiBxc3QodCl7Y29uc3QgZT17fSxuPW5ldyBGbG9hdDMyQXJyYXkoOCksbz1bXTtmb3IobGV0IHQ9MDt0PDg7dCsrKW9bdF09W3QsMF07cmV0dXJue3VwZGF0ZTpmdW5jdGlvbiBpKGEscixzLGwpe2NvbnN0IGM9YS5tb3JwaFRhcmdldEluZmx1ZW5jZXMsZD12b2lkIDA9PT1jPzA6Yy5sZW5ndGg7bGV0IHA9ZVtyLmlkXTtpZih2b2lkIDA9PT1wKXtwPVtdO2ZvcihsZXQgdD0wO3Q8ZDt0KyspcFt0XT1bdCwwXTtlW3IuaWRdPXB9Zm9yKGxldCB0PTA7dDxkO3QrKyl7Y29uc3QgZT1wW3RdO2VbMF09dCxlWzFdPWNbdF19cC5zb3J0KFlzdCk7Zm9yKGxldCB0PTA7dDw4O3QrKyl0PGQmJnBbdF1bMV0/KG9bdF1bMF09cFt0XVswXSxvW3RdWzFdPXBbdF1bMV0pOihvW3RdWzBdPU51bWJlci5NQVhfU0FGRV9JTlRFR0VSLG9bdF1bMV09MCk7by5zb3J0KEdzdCk7Y29uc3QgbT1zLm1vcnBoVGFyZ2V0cyYmci5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24sdT1zLm1vcnBoTm9ybWFscyYmci5tb3JwaEF0dHJpYnV0ZXMubm9ybWFsO2xldCBmPTA7Zm9yKGxldCB0PTA7dDw4O3QrKyl7Y29uc3QgZT1vW3RdLGk9ZVswXSxhPWVbMV07aSE9PU51bWJlci5NQVhfU0FGRV9JTlRFR0VSJiZhPyhtJiZyLmdldEF0dHJpYnV0ZSgibW9ycGhUYXJnZXQiK3QpIT09bVtpXSYmci5zZXRBdHRyaWJ1dGUoIm1vcnBoVGFyZ2V0Iit0LG1baV0pLHUmJnIuZ2V0QXR0cmlidXRlKCJtb3JwaE5vcm1hbCIrdCkhPT11W2ldJiZyLnNldEF0dHJpYnV0ZSgibW9ycGhOb3JtYWwiK3QsdVtpXSksblt0XT1hLGYrPWEpOihtJiYhMD09PXIuaGFzQXR0cmlidXRlKCJtb3JwaFRhcmdldCIrdCkmJnIuZGVsZXRlQXR0cmlidXRlKCJtb3JwaFRhcmdldCIrdCksdSYmITA9PT1yLmhhc0F0dHJpYnV0ZSgibW9ycGhOb3JtYWwiK3QpJiZyLmRlbGV0ZUF0dHJpYnV0ZSgibW9ycGhOb3JtYWwiK3QpLG5bdF09MCl9Y29uc3QgZz1yLm1vcnBoVGFyZ2V0c1JlbGF0aXZlPzE6MS1mO2wuZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZSh0LCJtb3JwaFRhcmdldEJhc2VJbmZsdWVuY2UiLGcpLGwuZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZSh0LCJtb3JwaFRhcmdldEluZmx1ZW5jZXMiLG4pfX19ZnVuY3Rpb24gWnN0KHQsZSxuLG8pe2xldCBpPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIGEodCl7Y29uc3QgZT10LnRhcmdldDtlLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGEpLG4ucmVtb3ZlKGUuaW5zdGFuY2VNYXRyaXgpLG51bGwhPT1lLmluc3RhbmNlQ29sb3ImJm4ucmVtb3ZlKGUuaW5zdGFuY2VDb2xvcil9cmV0dXJue3VwZGF0ZTpmdW5jdGlvbiByKHQpe2NvbnN0IHI9by5yZW5kZXIuZnJhbWUscz1lLmdldCh0LHQuZ2VvbWV0cnkpO3JldHVybiBpLmdldChzKSE9PXImJihlLnVwZGF0ZShzKSxpLnNldChzLHIpKSx0LmlzSW5zdGFuY2VkTWVzaCYmKCExPT09dC5oYXNFdmVudExpc3RlbmVyKCJkaXNwb3NlIixhKSYmdC5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixhKSxuLnVwZGF0ZSh0Lmluc3RhbmNlTWF0cml4LDM0OTYyKSxudWxsIT09dC5pbnN0YW5jZUNvbG9yJiZuLnVwZGF0ZSh0Lmluc3RhbmNlQ29sb3IsMzQ5NjIpKSxzfSxkaXNwb3NlOmZ1bmN0aW9uIHMoKXtpPW5ldyBXZWFrTWFwfX19ZnVuY3Rpb24gWHN0KHQ9bnVsbCxlPTEsbj0xLG89MSl7Wml0LmNhbGwodGhpcyxudWxsKSx0aGlzLmltYWdlPXtkYXRhOnQsd2lkdGg6ZSxoZWlnaHQ6bixkZXB0aDpvfSx0aGlzLm1hZ0ZpbHRlcj1oaXQsdGhpcy5taW5GaWx0ZXI9aGl0LHRoaXMud3JhcFI9Zml0LHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExLHRoaXMuZmxpcFk9ITEsdGhpcy5uZWVkc1VwZGF0ZT0hMH1mdW5jdGlvbiBLc3QodD1udWxsLGU9MSxuPTEsbz0xKXtaaXQuY2FsbCh0aGlzLG51bGwpLHRoaXMuaW1hZ2U9e2RhdGE6dCx3aWR0aDplLGhlaWdodDpuLGRlcHRoOm99LHRoaXMubWFnRmlsdGVyPWhpdCx0aGlzLm1pbkZpbHRlcj1oaXQsdGhpcy53cmFwUj1maXQsdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITEsdGhpcy5mbGlwWT0hMSx0aGlzLm5lZWRzVXBkYXRlPSEwfU5zdC5waHlzaWNhbD17dW5pZm9ybXM6aHN0KFtOc3Quc3RhbmRhcmQudW5pZm9ybXMse2NsZWFyY29hdDp7dmFsdWU6MH0sY2xlYXJjb2F0TWFwOnt2YWx1ZTpudWxsfSxjbGVhcmNvYXRSb3VnaG5lc3M6e3ZhbHVlOjB9LGNsZWFyY29hdFJvdWdobmVzc01hcDp7dmFsdWU6bnVsbH0sY2xlYXJjb2F0Tm9ybWFsU2NhbGU6e3ZhbHVlOm5ldyBVaXQoMSwxKX0sY2xlYXJjb2F0Tm9ybWFsTWFwOnt2YWx1ZTpudWxsfSxzaGVlbjp7dmFsdWU6bmV3IENydCgwKX0sdHJhbnNtaXNzaW9uOnt2YWx1ZTowfSx0cmFuc21pc3Npb25NYXA6e3ZhbHVlOm51bGx9fV0pLHZlcnRleFNoYWRlcjpSc3QubWVzaHBoeXNpY2FsX3ZlcnQsZnJhZ21lbnRTaGFkZXI6UnN0Lm1lc2hwaHlzaWNhbF9mcmFnfSwoWHN0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFppdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1Yc3QsWHN0LnByb3RvdHlwZS5pc0RhdGFUZXh0dXJlMkRBcnJheT0hMCwoS3N0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFppdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1Lc3QsS3N0LnByb3RvdHlwZS5pc0RhdGFUZXh0dXJlM0Q9ITA7Y29uc3QgSnN0PW5ldyBaaXQsUXN0PW5ldyBYc3QsJHN0PW5ldyBLc3QsdGx0PW5ldyB4c3QsZWx0PVtdLG5sdD1bXSxvbHQ9bmV3IEZsb2F0MzJBcnJheSgxNiksaWx0PW5ldyBGbG9hdDMyQXJyYXkoOSksYWx0PW5ldyBGbG9hdDMyQXJyYXkoNCk7ZnVuY3Rpb24gcmx0KHQsZSxuKXtjb25zdCBvPXRbMF07aWYobzw9MHx8bz4wKXJldHVybiB0O2NvbnN0IGk9ZSpuO2xldCBhPWVsdFtpXTtpZih2b2lkIDA9PT1hJiYoYT1uZXcgRmxvYXQzMkFycmF5KGkpLGVsdFtpXT1hKSwwIT09ZSl7by50b0FycmF5KGEsMCk7Zm9yKGxldCBvPTEsaT0wO28hPT1lOysrbylpKz1uLHRbb10udG9BcnJheShhLGkpfXJldHVybiBhfWZ1bmN0aW9uIHNsdCh0LGUpe2lmKHQubGVuZ3RoIT09ZS5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBuPTAsbz10Lmxlbmd0aDtuPG87bisrKWlmKHRbbl0hPT1lW25dKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGxsdCh0LGUpe2ZvcihsZXQgbj0wLG89ZS5sZW5ndGg7bjxvO24rKyl0W25dPWVbbl19ZnVuY3Rpb24gY2x0KHQsZSl7bGV0IG49bmx0W2VdO3ZvaWQgMD09PW4mJihuPW5ldyBJbnQzMkFycmF5KGUpLG5sdFtlXT1uKTtmb3IobGV0IG89MDtvIT09ZTsrK28pbltvXT10LmFsbG9jYXRlVGV4dHVyZVVuaXQoKTtyZXR1cm4gbn1mdW5jdGlvbiBkbHQodCxlKXtjb25zdCBuPXRoaXMuY2FjaGU7blswXSE9PWUmJih0LnVuaWZvcm0xZih0aGlzLmFkZHIsZSksblswXT1lKX1mdW5jdGlvbiBwbHQodCxlKXtjb25zdCBuPXRoaXMuY2FjaGU7aWYodm9pZCAwIT09ZS54KW5bMF09PT1lLngmJm5bMV09PT1lLnl8fCh0LnVuaWZvcm0yZih0aGlzLmFkZHIsZS54LGUueSksblswXT1lLngsblsxXT1lLnkpO2Vsc2V7aWYoc2x0KG4sZSkpcmV0dXJuO3QudW5pZm9ybTJmdih0aGlzLmFkZHIsZSksbGx0KG4sZSl9fWZ1bmN0aW9uIG1sdCh0LGUpe2NvbnN0IG49dGhpcy5jYWNoZTtpZih2b2lkIDAhPT1lLngpblswXT09PWUueCYmblsxXT09PWUueSYmblsyXT09PWUuenx8KHQudW5pZm9ybTNmKHRoaXMuYWRkcixlLngsZS55LGUueiksblswXT1lLngsblsxXT1lLnksblsyXT1lLnopO2Vsc2UgaWYodm9pZCAwIT09ZS5yKW5bMF09PT1lLnImJm5bMV09PT1lLmcmJm5bMl09PT1lLmJ8fCh0LnVuaWZvcm0zZih0aGlzLmFkZHIsZS5yLGUuZyxlLmIpLG5bMF09ZS5yLG5bMV09ZS5nLG5bMl09ZS5iKTtlbHNle2lmKHNsdChuLGUpKXJldHVybjt0LnVuaWZvcm0zZnYodGhpcy5hZGRyLGUpLGxsdChuLGUpfX1mdW5jdGlvbiB1bHQodCxlKXtjb25zdCBuPXRoaXMuY2FjaGU7aWYodm9pZCAwIT09ZS54KW5bMF09PT1lLngmJm5bMV09PT1lLnkmJm5bMl09PT1lLnomJm5bM109PT1lLnd8fCh0LnVuaWZvcm00Zih0aGlzLmFkZHIsZS54LGUueSxlLnosZS53KSxuWzBdPWUueCxuWzFdPWUueSxuWzJdPWUueixuWzNdPWUudyk7ZWxzZXtpZihzbHQobixlKSlyZXR1cm47dC51bmlmb3JtNGZ2KHRoaXMuYWRkcixlKSxsbHQobixlKX19ZnVuY3Rpb24gZmx0KHQsZSl7Y29uc3Qgbj10aGlzLmNhY2hlLG89ZS5lbGVtZW50cztpZih2b2lkIDA9PT1vKXtpZihzbHQobixlKSlyZXR1cm47dC51bmlmb3JtTWF0cml4MmZ2KHRoaXMuYWRkciwhMSxlKSxsbHQobixlKX1lbHNle2lmKHNsdChuLG8pKXJldHVybjthbHQuc2V0KG8pLHQudW5pZm9ybU1hdHJpeDJmdih0aGlzLmFkZHIsITEsYWx0KSxsbHQobixvKX19ZnVuY3Rpb24gZ2x0KHQsZSl7Y29uc3Qgbj10aGlzLmNhY2hlLG89ZS5lbGVtZW50cztpZih2b2lkIDA9PT1vKXtpZihzbHQobixlKSlyZXR1cm47dC51bmlmb3JtTWF0cml4M2Z2KHRoaXMuYWRkciwhMSxlKSxsbHQobixlKX1lbHNle2lmKHNsdChuLG8pKXJldHVybjtpbHQuc2V0KG8pLHQudW5pZm9ybU1hdHJpeDNmdih0aGlzLmFkZHIsITEsaWx0KSxsbHQobixvKX19ZnVuY3Rpb24gaGx0KHQsZSl7Y29uc3Qgbj10aGlzLmNhY2hlLG89ZS5lbGVtZW50cztpZih2b2lkIDA9PT1vKXtpZihzbHQobixlKSlyZXR1cm47dC51bmlmb3JtTWF0cml4NGZ2KHRoaXMuYWRkciwhMSxlKSxsbHQobixlKX1lbHNle2lmKHNsdChuLG8pKXJldHVybjtvbHQuc2V0KG8pLHQudW5pZm9ybU1hdHJpeDRmdih0aGlzLmFkZHIsITEsb2x0KSxsbHQobixvKX19ZnVuY3Rpb24gYmx0KHQsZSxuKXtjb25zdCBvPXRoaXMuY2FjaGUsaT1uLmFsbG9jYXRlVGV4dHVyZVVuaXQoKTtvWzBdIT09aSYmKHQudW5pZm9ybTFpKHRoaXMuYWRkcixpKSxvWzBdPWkpLG4uc2FmZVNldFRleHR1cmUyRChlfHxKc3QsaSl9ZnVuY3Rpb24geWx0KHQsZSxuKXtjb25zdCBvPXRoaXMuY2FjaGUsaT1uLmFsbG9jYXRlVGV4dHVyZVVuaXQoKTtvWzBdIT09aSYmKHQudW5pZm9ybTFpKHRoaXMuYWRkcixpKSxvWzBdPWkpLG4uc2V0VGV4dHVyZTJEQXJyYXkoZXx8UXN0LGkpfWZ1bmN0aW9uIF9sdCh0LGUsbil7Y29uc3Qgbz10aGlzLmNhY2hlLGk9bi5hbGxvY2F0ZVRleHR1cmVVbml0KCk7b1swXSE9PWkmJih0LnVuaWZvcm0xaSh0aGlzLmFkZHIsaSksb1swXT1pKSxuLnNldFRleHR1cmUzRChlfHwkc3QsaSl9ZnVuY3Rpb24gQ2x0KHQsZSxuKXtjb25zdCBvPXRoaXMuY2FjaGUsaT1uLmFsbG9jYXRlVGV4dHVyZVVuaXQoKTtvWzBdIT09aSYmKHQudW5pZm9ybTFpKHRoaXMuYWRkcixpKSxvWzBdPWkpLG4uc2FmZVNldFRleHR1cmVDdWJlKGV8fHRsdCxpKX1mdW5jdGlvbiBNbHQodCxlKXtjb25zdCBuPXRoaXMuY2FjaGU7blswXSE9PWUmJih0LnVuaWZvcm0xaSh0aGlzLmFkZHIsZSksblswXT1lKX1mdW5jdGlvbiB2bHQodCxlKXtjb25zdCBuPXRoaXMuY2FjaGU7c2x0KG4sZSl8fCh0LnVuaWZvcm0yaXYodGhpcy5hZGRyLGUpLGxsdChuLGUpKX1mdW5jdGlvbiB4bHQodCxlKXtjb25zdCBuPXRoaXMuY2FjaGU7c2x0KG4sZSl8fCh0LnVuaWZvcm0zaXYodGhpcy5hZGRyLGUpLGxsdChuLGUpKX1mdW5jdGlvbiBPbHQodCxlKXtjb25zdCBuPXRoaXMuY2FjaGU7c2x0KG4sZSl8fCh0LnVuaWZvcm00aXYodGhpcy5hZGRyLGUpLGxsdChuLGUpKX1mdW5jdGlvbiBQbHQodCxlKXtjb25zdCBuPXRoaXMuY2FjaGU7blswXSE9PWUmJih0LnVuaWZvcm0xdWkodGhpcy5hZGRyLGUpLG5bMF09ZSl9ZnVuY3Rpb24gd2x0KHQsZSl7dC51bmlmb3JtMWZ2KHRoaXMuYWRkcixlKX1mdW5jdGlvbiBrbHQodCxlKXt0LnVuaWZvcm0xaXYodGhpcy5hZGRyLGUpfWZ1bmN0aW9uIFNsdCh0LGUpe3QudW5pZm9ybTJpdih0aGlzLmFkZHIsZSl9ZnVuY3Rpb24gRGx0KHQsZSl7dC51bmlmb3JtM2l2KHRoaXMuYWRkcixlKX1mdW5jdGlvbiBFbHQodCxlKXt0LnVuaWZvcm00aXYodGhpcy5hZGRyLGUpfWZ1bmN0aW9uIEFsdCh0LGUpe2NvbnN0IG49cmx0KGUsdGhpcy5zaXplLDIpO3QudW5pZm9ybTJmdih0aGlzLmFkZHIsbil9ZnVuY3Rpb24gUmx0KHQsZSl7Y29uc3Qgbj1ybHQoZSx0aGlzLnNpemUsMyk7dC51bmlmb3JtM2Z2KHRoaXMuYWRkcixuKX1mdW5jdGlvbiBUbHQodCxlKXtjb25zdCBuPXJsdChlLHRoaXMuc2l6ZSw0KTt0LnVuaWZvcm00ZnYodGhpcy5hZGRyLG4pfWZ1bmN0aW9uIE5sdCh0LGUpe2NvbnN0IG49cmx0KGUsdGhpcy5zaXplLDQpO3QudW5pZm9ybU1hdHJpeDJmdih0aGlzLmFkZHIsITEsbil9ZnVuY3Rpb24gSWx0KHQsZSl7Y29uc3Qgbj1ybHQoZSx0aGlzLnNpemUsOSk7dC51bmlmb3JtTWF0cml4M2Z2KHRoaXMuYWRkciwhMSxuKX1mdW5jdGlvbiB6bHQodCxlKXtjb25zdCBuPXJsdChlLHRoaXMuc2l6ZSwxNik7dC51bmlmb3JtTWF0cml4NGZ2KHRoaXMuYWRkciwhMSxuKX1mdW5jdGlvbiBIbHQodCxlLG4pe2NvbnN0IG89ZS5sZW5ndGgsaT1jbHQobixvKTt0LnVuaWZvcm0xaXYodGhpcy5hZGRyLGkpO2ZvcihsZXQgdD0wO3QhPT1vOysrdCluLnNhZmVTZXRUZXh0dXJlMkQoZVt0XXx8SnN0LGlbdF0pfWZ1bmN0aW9uIEZsdCh0LGUsbil7Y29uc3Qgbz1lLmxlbmd0aCxpPWNsdChuLG8pO3QudW5pZm9ybTFpdih0aGlzLmFkZHIsaSk7Zm9yKGxldCB0PTA7dCE9PW87Kyt0KW4uc2FmZVNldFRleHR1cmVDdWJlKGVbdF18fHRsdCxpW3RdKX1mdW5jdGlvbiBMbHQodCxlLG4pe3RoaXMuaWQ9dCx0aGlzLmFkZHI9bix0aGlzLmNhY2hlPVtdLHRoaXMuc2V0VmFsdWU9KGZ1bmN0aW9uIG8odCl7c3dpdGNoKHQpe2Nhc2UgNTEyNjpyZXR1cm4gZGx0O2Nhc2UgMzU2NjQ6cmV0dXJuIHBsdDtjYXNlIDM1NjY1OnJldHVybiBtbHQ7Y2FzZSAzNTY2NjpyZXR1cm4gdWx0O2Nhc2UgMzU2NzQ6cmV0dXJuIGZsdDtjYXNlIDM1Njc1OnJldHVybiBnbHQ7Y2FzZSAzNTY3NjpyZXR1cm4gaGx0O2Nhc2UgNTEyNDpjYXNlIDM1NjcwOnJldHVybiBNbHQ7Y2FzZSAzNTY2NzpjYXNlIDM1NjcxOnJldHVybiB2bHQ7Y2FzZSAzNTY2ODpjYXNlIDM1NjcyOnJldHVybiB4bHQ7Y2FzZSAzNTY2OTpjYXNlIDM1NjczOnJldHVybiBPbHQ7Y2FzZSA1MTI1OnJldHVybiBQbHQ7Y2FzZSAzNTY3ODpjYXNlIDM2MTk4OmNhc2UgMzYyOTg6Y2FzZSAzNjMwNjpjYXNlIDM1NjgyOnJldHVybiBibHQ7Y2FzZSAzNTY3OTpjYXNlIDM2Mjk5OmNhc2UgMzYzMDc6cmV0dXJuIF9sdDtjYXNlIDM1NjgwOmNhc2UgMzYzMDA6Y2FzZSAzNjMwODpjYXNlIDM2MjkzOnJldHVybiBDbHQ7Y2FzZSAzNjI4OTpjYXNlIDM2MzAzOmNhc2UgMzYzMTE6Y2FzZSAzNjI5MjpyZXR1cm4geWx0fX0pKGUudHlwZSl9ZnVuY3Rpb24gQmx0KHQsZSxuKXt0aGlzLmlkPXQsdGhpcy5hZGRyPW4sdGhpcy5jYWNoZT1bXSx0aGlzLnNpemU9ZS5zaXplLHRoaXMuc2V0VmFsdWU9KGZ1bmN0aW9uIG8odCl7c3dpdGNoKHQpe2Nhc2UgNTEyNjpyZXR1cm4gd2x0O2Nhc2UgMzU2NjQ6cmV0dXJuIEFsdDtjYXNlIDM1NjY1OnJldHVybiBSbHQ7Y2FzZSAzNTY2NjpyZXR1cm4gVGx0O2Nhc2UgMzU2NzQ6cmV0dXJuIE5sdDtjYXNlIDM1Njc1OnJldHVybiBJbHQ7Y2FzZSAzNTY3NjpyZXR1cm4gemx0O2Nhc2UgNTEyNDpjYXNlIDM1NjcwOnJldHVybiBrbHQ7Y2FzZSAzNTY2NzpjYXNlIDM1NjcxOnJldHVybiBTbHQ7Y2FzZSAzNTY2ODpjYXNlIDM1NjcyOnJldHVybiBEbHQ7Y2FzZSAzNTY2OTpjYXNlIDM1NjczOnJldHVybiBFbHQ7Y2FzZSAzNTY3ODpjYXNlIDM2MTk4OmNhc2UgMzYyOTg6Y2FzZSAzNjMwNjpjYXNlIDM1NjgyOnJldHVybiBIbHQ7Y2FzZSAzNTY4MDpjYXNlIDM2MzAwOmNhc2UgMzYzMDg6Y2FzZSAzNjI5MzpyZXR1cm4gRmx0fX0pKGUudHlwZSl9ZnVuY3Rpb24gVmx0KHQpe3RoaXMuaWQ9dCx0aGlzLnNlcT1bXSx0aGlzLm1hcD17fX1CbHQucHJvdG90eXBlLnVwZGF0ZUNhY2hlPWZ1bmN0aW9uKHQpe2NvbnN0IGU9dGhpcy5jYWNoZTt0IGluc3RhbmNlb2YgRmxvYXQzMkFycmF5JiZlLmxlbmd0aCE9PXQubGVuZ3RoJiYodGhpcy5jYWNoZT1uZXcgRmxvYXQzMkFycmF5KHQubGVuZ3RoKSksbGx0KGUsdCl9LFZsdC5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24odCxlLG4pe2NvbnN0IG89dGhpcy5zZXE7Zm9yKGxldCBpPTAsYT1vLmxlbmd0aDtpIT09YTsrK2kpe2NvbnN0IGE9b1tpXTthLnNldFZhbHVlKHQsZVthLmlkXSxuKX19O2NvbnN0IGpsdD0vKFx3KykoXF0pPyhcW3xcLik/L2c7ZnVuY3Rpb24gVWx0KHQsZSl7dC5zZXEucHVzaChlKSx0Lm1hcFtlLmlkXT1lfWZ1bmN0aW9uIFdsdCh0LGUsbil7Y29uc3Qgbz10Lm5hbWUsaT1vLmxlbmd0aDtmb3Ioamx0Lmxhc3RJbmRleD0wOzspe2NvbnN0IGE9amx0LmV4ZWMobykscj1qbHQubGFzdEluZGV4O2xldCBzPWFbMV07Y29uc3QgbD1hWzNdO2lmKCJdIj09PWFbMl0mJihzfD0wKSx2b2lkIDA9PT1sfHwiWyI9PT1sJiZyKzI9PT1pKXtVbHQobix2b2lkIDA9PT1sP25ldyBMbHQocyx0LGUpOm5ldyBCbHQocyx0LGUpKTticmVha317bGV0IHQ9bi5tYXBbc107dm9pZCAwPT09dCYmKHQ9bmV3IFZsdChzKSxVbHQobix0KSksbj10fX19ZnVuY3Rpb24gR2x0KHQsZSl7dGhpcy5zZXE9W10sdGhpcy5tYXA9e307Y29uc3Qgbj10LmdldFByb2dyYW1QYXJhbWV0ZXIoZSwzNTcxOCk7Zm9yKGxldCBvPTA7bzxuOysrbyl7Y29uc3Qgbj10LmdldEFjdGl2ZVVuaWZvcm0oZSxvKTtXbHQobix0LmdldFVuaWZvcm1Mb2NhdGlvbihlLG4ubmFtZSksdGhpcyl9fWZ1bmN0aW9uIFlsdCh0LGUsbil7Y29uc3Qgbz10LmNyZWF0ZVNoYWRlcihlKTtyZXR1cm4gdC5zaGFkZXJTb3VyY2UobyxuKSx0LmNvbXBpbGVTaGFkZXIobyksb31HbHQucHJvdG90eXBlLnNldFZhbHVlPWZ1bmN0aW9uKHQsZSxuLG8pe2NvbnN0IGk9dGhpcy5tYXBbZV07dm9pZCAwIT09aSYmaS5zZXRWYWx1ZSh0LG4sbyl9LEdsdC5wcm90b3R5cGUuc2V0T3B0aW9uYWw9ZnVuY3Rpb24odCxlLG4pe2NvbnN0IG89ZVtuXTt2b2lkIDAhPT1vJiZ0aGlzLnNldFZhbHVlKHQsbixvKX0sR2x0LnVwbG9hZD1mdW5jdGlvbih0LGUsbixvKXtmb3IobGV0IGk9MCxhPWUubGVuZ3RoO2khPT1hOysraSl7Y29uc3QgYT1lW2ldLHI9blthLmlkXTshMSE9PXIubmVlZHNVcGRhdGUmJmEuc2V0VmFsdWUodCxyLnZhbHVlLG8pfX0sR2x0LnNlcVdpdGhWYWx1ZT1mdW5jdGlvbih0LGUpe2NvbnN0IG49W107Zm9yKGxldCBvPTAsaT10Lmxlbmd0aDtvIT09aTsrK28pe2NvbnN0IGk9dFtvXTtpLmlkIGluIGUmJm4ucHVzaChpKX1yZXR1cm4gbn07bGV0IHFsdD0wO2Z1bmN0aW9uIFpsdCh0KXtzd2l0Y2godCl7Y2FzZSBOaXQ6cmV0dXJuWyJMaW5lYXIiLCIoIHZhbHVlICkiXTtjYXNlIDMwMDE6cmV0dXJuWyJzUkdCIiwiKCB2YWx1ZSApIl07Y2FzZSAzMDAyOnJldHVyblsiUkdCRSIsIiggdmFsdWUgKSJdO2Nhc2UgMzAwNDpyZXR1cm5bIlJHQk0iLCIoIHZhbHVlLCA3LjAgKSJdO2Nhc2UgMzAwNTpyZXR1cm5bIlJHQk0iLCIoIHZhbHVlLCAxNi4wICkiXTtjYXNlIDMwMDY6cmV0dXJuWyJSR0JEIiwiKCB2YWx1ZSwgMjU2LjAgKSJdO2Nhc2UgMzAwNzpyZXR1cm5bIkdhbW1hIiwiKCB2YWx1ZSwgZmxvYXQoIEdBTU1BX0ZBQ1RPUiApICkiXTtjYXNlIDMwMDM6cmV0dXJuWyJMb2dMdXYiLCIoIHZhbHVlICkiXTtkZWZhdWx0OnJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUHJvZ3JhbTogVW5zdXBwb3J0ZWQgZW5jb2Rpbmc6Iix0KSxbIkxpbmVhciIsIiggdmFsdWUgKSJdfX1mdW5jdGlvbiBYbHQodCxlLG4pe2NvbnN0IG89dC5nZXRTaGFkZXJQYXJhbWV0ZXIoZSwzNTcxMyksaT10LmdldFNoYWRlckluZm9Mb2coZSkudHJpbSgpO3JldHVybiBvJiYiIj09PWk/IiI6IlRIUkVFLldlYkdMU2hhZGVyOiBnbC5nZXRTaGFkZXJJbmZvTG9nKCkgIituKyJcbiIraSsoZnVuY3Rpb24gYSh0KXtjb25zdCBlPXQuc3BsaXQoIlxuIik7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0KyspZVt0XT10KzErIjogIitlW3RdO3JldHVybiBlLmpvaW4oIlxuIil9KSh0LmdldFNoYWRlclNvdXJjZShlKSl9ZnVuY3Rpb24gS2x0KHQsZSl7Y29uc3Qgbj1abHQoZSk7cmV0dXJuInZlYzQgIit0KyIoIHZlYzQgdmFsdWUgKSB7IHJldHVybiAiK25bMF0rIlRvTGluZWFyIituWzFdKyI7IH0ifWZ1bmN0aW9uIEpsdCh0LGUpe2NvbnN0IG49Wmx0KGUpO3JldHVybiJ2ZWM0ICIrdCsiKCB2ZWM0IHZhbHVlICkgeyByZXR1cm4gTGluZWFyVG8iK25bMF0rblsxXSsiOyB9In1mdW5jdGlvbiBRbHQodCxlKXtsZXQgbjtzd2l0Y2goZSl7Y2FzZSAxOm49IkxpbmVhciI7YnJlYWs7Y2FzZSAyOm49IlJlaW5oYXJkIjticmVhaztjYXNlIDM6bj0iT3B0aW1pemVkQ2luZW9uIjticmVhaztjYXNlIDQ6bj0iQUNFU0ZpbG1pYyI7YnJlYWs7Y2FzZSA1Om49IkN1c3RvbSI7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUHJvZ3JhbTogVW5zdXBwb3J0ZWQgdG9uZU1hcHBpbmc6IixlKSxuPSJMaW5lYXIifXJldHVybiJ2ZWMzICIrdCsiKCB2ZWMzIGNvbG9yICkgeyByZXR1cm4gIituKyJUb25lTWFwcGluZyggY29sb3IgKTsgfSJ9ZnVuY3Rpb24gJGx0KHQpe3JldHVybiIiIT09dH1mdW5jdGlvbiB0Y3QodCxlKXtyZXR1cm4gdC5yZXBsYWNlKC9OVU1fRElSX0xJR0hUUy9nLGUubnVtRGlyTGlnaHRzKS5yZXBsYWNlKC9OVU1fU1BPVF9MSUdIVFMvZyxlLm51bVNwb3RMaWdodHMpLnJlcGxhY2UoL05VTV9SRUNUX0FSRUFfTElHSFRTL2csZS5udW1SZWN0QXJlYUxpZ2h0cykucmVwbGFjZSgvTlVNX1BPSU5UX0xJR0hUUy9nLGUubnVtUG9pbnRMaWdodHMpLnJlcGxhY2UoL05VTV9IRU1JX0xJR0hUUy9nLGUubnVtSGVtaUxpZ2h0cykucmVwbGFjZSgvTlVNX0RJUl9MSUdIVF9TSEFET1dTL2csZS5udW1EaXJMaWdodFNoYWRvd3MpLnJlcGxhY2UoL05VTV9TUE9UX0xJR0hUX1NIQURPV1MvZyxlLm51bVNwb3RMaWdodFNoYWRvd3MpLnJlcGxhY2UoL05VTV9QT0lOVF9MSUdIVF9TSEFET1dTL2csZS5udW1Qb2ludExpZ2h0U2hhZG93cyl9ZnVuY3Rpb24gZWN0KHQsZSl7cmV0dXJuIHQucmVwbGFjZSgvTlVNX0NMSVBQSU5HX1BMQU5FUy9nLGUubnVtQ2xpcHBpbmdQbGFuZXMpLnJlcGxhY2UoL1VOSU9OX0NMSVBQSU5HX1BMQU5FUy9nLGUubnVtQ2xpcHBpbmdQbGFuZXMtZS5udW1DbGlwSW50ZXJzZWN0aW9uKX1jb25zdCBuY3Q9L15bIFx0XSojaW5jbHVkZSArPChbXHdcZC4vXSspPi9nbTtmdW5jdGlvbiBvY3QodCl7cmV0dXJuIHQucmVwbGFjZShuY3QsaWN0KX1mdW5jdGlvbiBpY3QodCxlKXtjb25zdCBuPVJzdFtlXTtpZih2b2lkIDA9PT1uKXRocm93IG5ldyBFcnJvcigiQ2FuIG5vdCByZXNvbHZlICNpbmNsdWRlIDwiK2UrIj4iKTtyZXR1cm4gb2N0KG4pfWNvbnN0IGFjdD0vI3ByYWdtYSB1bnJvbGxfbG9vcFtcc10rP2ZvciBcKCBpbnQgaSBcPSAoXGQrKVw7IGkgPCAoXGQrKVw7IGkgXCtcKyBcKSBceyhbXHNcU10rPykoPz1cfSlcfS9nLHJjdD0vI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxzK2ZvclxzKlwoXHMqaW50XHMraVxzKj1ccyooXGQrKVxzKjtccyppXHMqPFxzKihcZCspXHMqO1xzKmlccypcK1wrXHMqXClccyp7KFtcc1xTXSs/KX1ccysjcHJhZ21hIHVucm9sbF9sb29wX2VuZC9nO2Z1bmN0aW9uIHNjdCh0KXtyZXR1cm4gdC5yZXBsYWNlKHJjdCxjY3QpLnJlcGxhY2UoYWN0LGxjdCl9ZnVuY3Rpb24gbGN0KHQsZSxuLG8pe3JldHVybiBjb25zb2xlLndhcm4oIldlYkdMUHJvZ3JhbTogI3ByYWdtYSB1bnJvbGxfbG9vcCBzaGFkZXIgc3ludGF4IGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydCBzeW50YXggaW5zdGVhZC4iKSxjY3QoMCxlLG4sbyl9ZnVuY3Rpb24gY2N0KHQsZSxuLG8pe2xldCBpPSIiO2ZvcihsZXQgdD1wYXJzZUludChlKTt0PHBhcnNlSW50KG4pO3QrKylpKz1vLnJlcGxhY2UoL1xbXHMqaVxzKlxdL2csIlsgIit0KyIgXSIpLnJlcGxhY2UoL1VOUk9MTEVEX0xPT1BfSU5ERVgvZyx0KTtyZXR1cm4gaX1mdW5jdGlvbiBkY3QodCl7bGV0IGU9InByZWNpc2lvbiAiK3QucHJlY2lzaW9uKyIgZmxvYXQ7XG5wcmVjaXNpb24gIit0LnByZWNpc2lvbisiIGludDsiO3JldHVybiJoaWdocCI9PT10LnByZWNpc2lvbj9lKz0iXG4jZGVmaW5lIEhJR0hfUFJFQ0lTSU9OIjoibWVkaXVtcCI9PT10LnByZWNpc2lvbj9lKz0iXG4jZGVmaW5lIE1FRElVTV9QUkVDSVNJT04iOiJsb3dwIj09PXQucHJlY2lzaW9uJiYoZSs9IlxuI2RlZmluZSBMT1dfUFJFQ0lTSU9OIiksZX1mdW5jdGlvbiBwY3QodCxlLG4sbyl7Y29uc3QgaT10LmdldENvbnRleHQoKSxhPW4uZGVmaW5lcztsZXQgcj1uLnZlcnRleFNoYWRlcixzPW4uZnJhZ21lbnRTaGFkZXI7Y29uc3QgbD0oZnVuY3Rpb24gYyh0KXtsZXQgZT0iU0hBRE9XTUFQX1RZUEVfQkFTSUMiO3JldHVybiAxPT09dC5zaGFkb3dNYXBUeXBlP2U9IlNIQURPV01BUF9UWVBFX1BDRiI6Mj09PXQuc2hhZG93TWFwVHlwZT9lPSJTSEFET1dNQVBfVFlQRV9QQ0ZfU09GVCI6Mz09PXQuc2hhZG93TWFwVHlwZSYmKGU9IlNIQURPV01BUF9UWVBFX1ZTTSIpLGV9KShuKSxkPShmdW5jdGlvbiBwKHQpe2xldCBlPSJFTlZNQVBfVFlQRV9DVUJFIjtpZih0LmVudk1hcClzd2l0Y2godC5lbnZNYXBNb2RlKXtjYXNlIDMwMTpjYXNlIDMwMjplPSJFTlZNQVBfVFlQRV9DVUJFIjticmVhaztjYXNlIDMwNjpjYXNlIDMwNzplPSJFTlZNQVBfVFlQRV9DVUJFX1VWIn1yZXR1cm4gZX0pKG4pLG09KGZ1bmN0aW9uIHUodCl7bGV0IGU9IkVOVk1BUF9NT0RFX1JFRkxFQ1RJT04iO2lmKHQuZW52TWFwKXN3aXRjaCh0LmVudk1hcE1vZGUpe2Nhc2UgMzAyOmNhc2UgMzA3OmU9IkVOVk1BUF9NT0RFX1JFRlJBQ1RJT04ifXJldHVybiBlfSkobiksZj0oZnVuY3Rpb24gZyh0KXtsZXQgZT0iRU5WTUFQX0JMRU5ESU5HX05PTkUiO2lmKHQuZW52TWFwKXN3aXRjaCh0LmNvbWJpbmUpe2Nhc2UgMDplPSJFTlZNQVBfQkxFTkRJTkdfTVVMVElQTFkiO2JyZWFrO2Nhc2UgMTplPSJFTlZNQVBfQkxFTkRJTkdfTUlYIjticmVhaztjYXNlIDI6ZT0iRU5WTUFQX0JMRU5ESU5HX0FERCJ9cmV0dXJuIGV9KShuKSxoPXQuZ2FtbWFGYWN0b3I+MD90LmdhbW1hRmFjdG9yOjEsYj1uLmlzV2ViR0wyPyIiOihmdW5jdGlvbiB5KHQpe3JldHVyblt0LmV4dGVuc2lvbkRlcml2YXRpdmVzfHx0LmVudk1hcEN1YmVVVnx8dC5idW1wTWFwfHx0LnRhbmdlbnRTcGFjZU5vcm1hbE1hcHx8dC5jbGVhcmNvYXROb3JtYWxNYXB8fHQuZmxhdFNoYWRpbmd8fCJwaHlzaWNhbCI9PT10LnNoYWRlcklEPyIjZXh0ZW5zaW9uIEdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyA6IGVuYWJsZSI6IiIsKHQuZXh0ZW5zaW9uRnJhZ0RlcHRofHx0LmxvZ2FyaXRobWljRGVwdGhCdWZmZXIpJiZ0LnJlbmRlcmVyRXh0ZW5zaW9uRnJhZ0RlcHRoPyIjZXh0ZW5zaW9uIEdMX0VYVF9mcmFnX2RlcHRoIDogZW5hYmxlIjoiIix0LmV4dGVuc2lvbkRyYXdCdWZmZXJzJiZ0LnJlbmRlcmVyRXh0ZW5zaW9uRHJhd0J1ZmZlcnM/IiNleHRlbnNpb24gR0xfRVhUX2RyYXdfYnVmZmVycyA6IHJlcXVpcmUiOiIiLCh0LmV4dGVuc2lvblNoYWRlclRleHR1cmVMT0R8fHQuZW52TWFwKSYmdC5yZW5kZXJlckV4dGVuc2lvblNoYWRlclRleHR1cmVMb2Q/IiNleHRlbnNpb24gR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCA6IGVuYWJsZSI6IiJdLmZpbHRlcigkbHQpLmpvaW4oIlxuIil9KShuKSxfPShmdW5jdGlvbiBDKHQpe2NvbnN0IGU9W107Zm9yKGNvbnN0IG4gaW4gdCl7Y29uc3Qgbz10W25dOyExIT09byYmZS5wdXNoKCIjZGVmaW5lICIrbisiICIrbyl9cmV0dXJuIGUuam9pbigiXG4iKX0pKGEpLE09aS5jcmVhdGVQcm9ncmFtKCk7bGV0IHYseCxPPW4uZ2xzbFZlcnNpb24/IiN2ZXJzaW9uICIrbi5nbHNsVmVyc2lvbisiXG4iOiIiO24uaXNSYXdTaGFkZXJNYXRlcmlhbD8odj1bX10uZmlsdGVyKCRsdCkuam9pbigiXG4iKSx2Lmxlbmd0aD4wJiYodis9IlxuIikseD1bYixfXS5maWx0ZXIoJGx0KS5qb2luKCJcbiIpLHgubGVuZ3RoPjAmJih4Kz0iXG4iKSk6KHY9W2RjdChuKSwiI2RlZmluZSBTSEFERVJfTkFNRSAiK24uc2hhZGVyTmFtZSxfLG4uaW5zdGFuY2luZz8iI2RlZmluZSBVU0VfSU5TVEFOQ0lORyI6IiIsbi5pbnN0YW5jaW5nQ29sb3I/IiNkZWZpbmUgVVNFX0lOU1RBTkNJTkdfQ09MT1IiOiIiLG4uc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcz8iI2RlZmluZSBWRVJURVhfVEVYVFVSRVMiOiIiLCIjZGVmaW5lIEdBTU1BX0ZBQ1RPUiAiK2gsIiNkZWZpbmUgTUFYX0JPTkVTICIrbi5tYXhCb25lcyxuLnVzZUZvZyYmbi5mb2c/IiNkZWZpbmUgVVNFX0ZPRyI6IiIsbi51c2VGb2cmJm4uZm9nRXhwMj8iI2RlZmluZSBGT0dfRVhQMiI6IiIsbi5tYXA/IiNkZWZpbmUgVVNFX01BUCI6IiIsbi5lbnZNYXA/IiNkZWZpbmUgVVNFX0VOVk1BUCI6IiIsbi5lbnZNYXA/IiNkZWZpbmUgIittOiIiLG4ubGlnaHRNYXA/IiNkZWZpbmUgVVNFX0xJR0hUTUFQIjoiIixuLmFvTWFwPyIjZGVmaW5lIFVTRV9BT01BUCI6IiIsbi5lbWlzc2l2ZU1hcD8iI2RlZmluZSBVU0VfRU1JU1NJVkVNQVAiOiIiLG4uYnVtcE1hcD8iI2RlZmluZSBVU0VfQlVNUE1BUCI6IiIsbi5ub3JtYWxNYXA/IiNkZWZpbmUgVVNFX05PUk1BTE1BUCI6IiIsbi5ub3JtYWxNYXAmJm4ub2JqZWN0U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgT0JKRUNUU1BBQ0VfTk9STUFMTUFQIjoiIixuLm5vcm1hbE1hcCYmbi50YW5nZW50U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgVEFOR0VOVFNQQUNFX05PUk1BTE1BUCI6IiIsbi5jbGVhcmNvYXRNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVE1BUCI6IiIsbi5jbGVhcmNvYXRSb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVF9ST1VHSE5FU1NNQVAiOiIiLG4uY2xlYXJjb2F0Tm9ybWFsTWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQIjoiIixuLmRpc3BsYWNlbWVudE1hcCYmbi5zdXBwb3J0c1ZlcnRleFRleHR1cmVzPyIjZGVmaW5lIFVTRV9ESVNQTEFDRU1FTlRNQVAiOiIiLG4uc3BlY3VsYXJNYXA/IiNkZWZpbmUgVVNFX1NQRUNVTEFSTUFQIjoiIixuLnJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfUk9VR0hORVNTTUFQIjoiIixuLm1ldGFsbmVzc01hcD8iI2RlZmluZSBVU0VfTUVUQUxORVNTTUFQIjoiIixuLmFscGhhTWFwPyIjZGVmaW5lIFVTRV9BTFBIQU1BUCI6IiIsbi50cmFuc21pc3Npb25NYXA/IiNkZWZpbmUgVVNFX1RSQU5TTUlTU0lPTk1BUCI6IiIsbi52ZXJ0ZXhUYW5nZW50cz8iI2RlZmluZSBVU0VfVEFOR0VOVCI6IiIsbi52ZXJ0ZXhDb2xvcnM/IiNkZWZpbmUgVVNFX0NPTE9SIjoiIixuLnZlcnRleFV2cz8iI2RlZmluZSBVU0VfVVYiOiIiLG4udXZzVmVydGV4T25seT8iI2RlZmluZSBVVlNfVkVSVEVYX09OTFkiOiIiLG4uZmxhdFNoYWRpbmc/IiNkZWZpbmUgRkxBVF9TSEFERUQiOiIiLG4uc2tpbm5pbmc/IiNkZWZpbmUgVVNFX1NLSU5OSU5HIjoiIixuLnVzZVZlcnRleFRleHR1cmU/IiNkZWZpbmUgQk9ORV9URVhUVVJFIjoiIixuLm1vcnBoVGFyZ2V0cz8iI2RlZmluZSBVU0VfTU9SUEhUQVJHRVRTIjoiIixuLm1vcnBoTm9ybWFscyYmITE9PT1uLmZsYXRTaGFkaW5nPyIjZGVmaW5lIFVTRV9NT1JQSE5PUk1BTFMiOiIiLG4uZG91YmxlU2lkZWQ/IiNkZWZpbmUgRE9VQkxFX1NJREVEIjoiIixuLmZsaXBTaWRlZD8iI2RlZmluZSBGTElQX1NJREVEIjoiIixuLnNoYWRvd01hcEVuYWJsZWQ/IiNkZWZpbmUgVVNFX1NIQURPV01BUCI6IiIsbi5zaGFkb3dNYXBFbmFibGVkPyIjZGVmaW5lICIrbDoiIixuLnNpemVBdHRlbnVhdGlvbj8iI2RlZmluZSBVU0VfU0laRUFUVEVOVUFUSU9OIjoiIixuLmxvZ2FyaXRobWljRGVwdGhCdWZmZXI/IiNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGIjoiIixuLmxvZ2FyaXRobWljRGVwdGhCdWZmZXImJm4ucmVuZGVyZXJFeHRlbnNpb25GcmFnRGVwdGg/IiNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGX0VYVCI6IiIsInVuaWZvcm0gbWF0NCBtb2RlbE1hdHJpeDsiLCJ1bmlmb3JtIG1hdDQgbW9kZWxWaWV3TWF0cml4OyIsInVuaWZvcm0gbWF0NCBwcm9qZWN0aW9uTWF0cml4OyIsInVuaWZvcm0gbWF0NCB2aWV3TWF0cml4OyIsInVuaWZvcm0gbWF0MyBub3JtYWxNYXRyaXg7IiwidW5pZm9ybSB2ZWMzIGNhbWVyYVBvc2l0aW9uOyIsInVuaWZvcm0gYm9vbCBpc09ydGhvZ3JhcGhpYzsiLCIjaWZkZWYgVVNFX0lOU1RBTkNJTkciLCJcdGF0dHJpYnV0ZSBtYXQ0IGluc3RhbmNlTWF0cml4OyIsIiNlbmRpZiIsIiNpZmRlZiBVU0VfSU5TVEFOQ0lOR19DT0xPUiIsIlx0YXR0cmlidXRlIHZlYzMgaW5zdGFuY2VDb2xvcjsiLCIjZW5kaWYiLCJhdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjsiLCJhdHRyaWJ1dGUgdmVjMyBub3JtYWw7IiwiYXR0cmlidXRlIHZlYzIgdXY7IiwiI2lmZGVmIFVTRV9UQU5HRU5UIiwiXHRhdHRyaWJ1dGUgdmVjNCB0YW5nZW50OyIsIiNlbmRpZiIsIiNpZmRlZiBVU0VfQ09MT1IiLCJcdGF0dHJpYnV0ZSB2ZWMzIGNvbG9yOyIsIiNlbmRpZiIsIiNpZmRlZiBVU0VfTU9SUEhUQVJHRVRTIiwiXHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDA7IiwiXHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDE7IiwiXHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDI7IiwiXHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDM7IiwiXHQjaWZkZWYgVVNFX01PUlBITk9STUFMUyIsIlx0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaE5vcm1hbDA7IiwiXHRcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoTm9ybWFsMTsiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwyOyIsIlx0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaE5vcm1hbDM7IiwiXHQjZWxzZSIsIlx0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDQ7IiwiXHRcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0NTsiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQ2OyIsIlx0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDc7IiwiXHQjZW5kaWYiLCIjZW5kaWYiLCIjaWZkZWYgVVNFX1NLSU5OSU5HIiwiXHRhdHRyaWJ1dGUgdmVjNCBza2luSW5kZXg7IiwiXHRhdHRyaWJ1dGUgdmVjNCBza2luV2VpZ2h0OyIsIiNlbmRpZiIsIlxuIl0uZmlsdGVyKCRsdCkuam9pbigiXG4iKSx4PVtiLGRjdChuKSwiI2RlZmluZSBTSEFERVJfTkFNRSAiK24uc2hhZGVyTmFtZSxfLG4uYWxwaGFUZXN0PyIjZGVmaW5lIEFMUEhBVEVTVCAiK24uYWxwaGFUZXN0KyhuLmFscGhhVGVzdCUxPyIiOiIuMCIpOiIiLCIjZGVmaW5lIEdBTU1BX0ZBQ1RPUiAiK2gsbi51c2VGb2cmJm4uZm9nPyIjZGVmaW5lIFVTRV9GT0ciOiIiLG4udXNlRm9nJiZuLmZvZ0V4cDI/IiNkZWZpbmUgRk9HX0VYUDIiOiIiLG4ubWFwPyIjZGVmaW5lIFVTRV9NQVAiOiIiLG4ubWF0Y2FwPyIjZGVmaW5lIFVTRV9NQVRDQVAiOiIiLG4uZW52TWFwPyIjZGVmaW5lIFVTRV9FTlZNQVAiOiIiLG4uZW52TWFwPyIjZGVmaW5lICIrZDoiIixuLmVudk1hcD8iI2RlZmluZSAiK206IiIsbi5lbnZNYXA/IiNkZWZpbmUgIitmOiIiLG4ubGlnaHRNYXA/IiNkZWZpbmUgVVNFX0xJR0hUTUFQIjoiIixuLmFvTWFwPyIjZGVmaW5lIFVTRV9BT01BUCI6IiIsbi5lbWlzc2l2ZU1hcD8iI2RlZmluZSBVU0VfRU1JU1NJVkVNQVAiOiIiLG4uYnVtcE1hcD8iI2RlZmluZSBVU0VfQlVNUE1BUCI6IiIsbi5ub3JtYWxNYXA/IiNkZWZpbmUgVVNFX05PUk1BTE1BUCI6IiIsbi5ub3JtYWxNYXAmJm4ub2JqZWN0U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgT0JKRUNUU1BBQ0VfTk9STUFMTUFQIjoiIixuLm5vcm1hbE1hcCYmbi50YW5nZW50U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgVEFOR0VOVFNQQUNFX05PUk1BTE1BUCI6IiIsbi5jbGVhcmNvYXRNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVE1BUCI6IiIsbi5jbGVhcmNvYXRSb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVF9ST1VHSE5FU1NNQVAiOiIiLG4uY2xlYXJjb2F0Tm9ybWFsTWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQIjoiIixuLnNwZWN1bGFyTWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUk1BUCI6IiIsbi5yb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX1JPVUdITkVTU01BUCI6IiIsbi5tZXRhbG5lc3NNYXA/IiNkZWZpbmUgVVNFX01FVEFMTkVTU01BUCI6IiIsbi5hbHBoYU1hcD8iI2RlZmluZSBVU0VfQUxQSEFNQVAiOiIiLG4uc2hlZW4/IiNkZWZpbmUgVVNFX1NIRUVOIjoiIixuLnRyYW5zbWlzc2lvbk1hcD8iI2RlZmluZSBVU0VfVFJBTlNNSVNTSU9OTUFQIjoiIixuLnZlcnRleFRhbmdlbnRzPyIjZGVmaW5lIFVTRV9UQU5HRU5UIjoiIixuLnZlcnRleENvbG9yc3x8bi5pbnN0YW5jaW5nQ29sb3I/IiNkZWZpbmUgVVNFX0NPTE9SIjoiIixuLnZlcnRleFV2cz8iI2RlZmluZSBVU0VfVVYiOiIiLG4udXZzVmVydGV4T25seT8iI2RlZmluZSBVVlNfVkVSVEVYX09OTFkiOiIiLG4uZ3JhZGllbnRNYXA/IiNkZWZpbmUgVVNFX0dSQURJRU5UTUFQIjoiIixuLmZsYXRTaGFkaW5nPyIjZGVmaW5lIEZMQVRfU0hBREVEIjoiIixuLmRvdWJsZVNpZGVkPyIjZGVmaW5lIERPVUJMRV9TSURFRCI6IiIsbi5mbGlwU2lkZWQ/IiNkZWZpbmUgRkxJUF9TSURFRCI6IiIsbi5zaGFkb3dNYXBFbmFibGVkPyIjZGVmaW5lIFVTRV9TSEFET1dNQVAiOiIiLG4uc2hhZG93TWFwRW5hYmxlZD8iI2RlZmluZSAiK2w6IiIsbi5wcmVtdWx0aXBsaWVkQWxwaGE/IiNkZWZpbmUgUFJFTVVMVElQTElFRF9BTFBIQSI6IiIsbi5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cz8iI2RlZmluZSBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTIjoiIixuLmxvZ2FyaXRobWljRGVwdGhCdWZmZXI/IiNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGIjoiIixuLmxvZ2FyaXRobWljRGVwdGhCdWZmZXImJm4ucmVuZGVyZXJFeHRlbnNpb25GcmFnRGVwdGg/IiNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGX0VYVCI6IiIsKG4uZXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxPRHx8bi5lbnZNYXApJiZuLnJlbmRlcmVyRXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxvZD8iI2RlZmluZSBURVhUVVJFX0xPRF9FWFQiOiIiLCJ1bmlmb3JtIG1hdDQgdmlld01hdHJpeDsiLCJ1bmlmb3JtIHZlYzMgY2FtZXJhUG9zaXRpb247IiwidW5pZm9ybSBib29sIGlzT3J0aG9ncmFwaGljOyIsMCE9PW4udG9uZU1hcHBpbmc/IiNkZWZpbmUgVE9ORV9NQVBQSU5HIjoiIiwwIT09bi50b25lTWFwcGluZz9Sc3QudG9uZW1hcHBpbmdfcGFyc19mcmFnbWVudDoiIiwwIT09bi50b25lTWFwcGluZz9RbHQoInRvbmVNYXBwaW5nIixuLnRvbmVNYXBwaW5nKToiIixuLmRpdGhlcmluZz8iI2RlZmluZSBESVRIRVJJTkciOiIiLFJzdC5lbmNvZGluZ3NfcGFyc19mcmFnbWVudCxuLm1hcD9LbHQoIm1hcFRleGVsVG9MaW5lYXIiLG4ubWFwRW5jb2RpbmcpOiIiLG4ubWF0Y2FwP0tsdCgibWF0Y2FwVGV4ZWxUb0xpbmVhciIsbi5tYXRjYXBFbmNvZGluZyk6IiIsbi5lbnZNYXA/S2x0KCJlbnZNYXBUZXhlbFRvTGluZWFyIixuLmVudk1hcEVuY29kaW5nKToiIixuLmVtaXNzaXZlTWFwP0tsdCgiZW1pc3NpdmVNYXBUZXhlbFRvTGluZWFyIixuLmVtaXNzaXZlTWFwRW5jb2RpbmcpOiIiLG4ubGlnaHRNYXA/S2x0KCJsaWdodE1hcFRleGVsVG9MaW5lYXIiLG4ubGlnaHRNYXBFbmNvZGluZyk6IiIsSmx0KCJsaW5lYXJUb091dHB1dFRleGVsIixuLm91dHB1dEVuY29kaW5nKSxuLmRlcHRoUGFja2luZz8iI2RlZmluZSBERVBUSF9QQUNLSU5HICIrbi5kZXB0aFBhY2tpbmc6IiIsIlxuIl0uZmlsdGVyKCRsdCkuam9pbigiXG4iKSkscj1vY3Qocikscj10Y3QocixuKSxyPWVjdChyLG4pLHM9b2N0KHMpLHM9dGN0KHMsbikscz1lY3QocyxuKSxyPXNjdChyKSxzPXNjdChzKSxuLmlzV2ViR0wyJiYhMCE9PW4uaXNSYXdTaGFkZXJNYXRlcmlhbCYmKE89IiN2ZXJzaW9uIDMwMCBlc1xuIix2PVsiI2RlZmluZSBhdHRyaWJ1dGUgaW4iLCIjZGVmaW5lIHZhcnlpbmcgb3V0IiwiI2RlZmluZSB0ZXh0dXJlMkQgdGV4dHVyZSJdLmpvaW4oIlxuIikrIlxuIit2LHg9WyIjZGVmaW5lIHZhcnlpbmcgaW4iLG4uZ2xzbFZlcnNpb249PT1GaXQ/IiI6Im91dCBoaWdocCB2ZWM0IHBjX2ZyYWdDb2xvcjsiLG4uZ2xzbFZlcnNpb249PT1GaXQ/IiI6IiNkZWZpbmUgZ2xfRnJhZ0NvbG9yIHBjX2ZyYWdDb2xvciIsIiNkZWZpbmUgZ2xfRnJhZ0RlcHRoRVhUIGdsX0ZyYWdEZXB0aCIsIiNkZWZpbmUgdGV4dHVyZTJEIHRleHR1cmUiLCIjZGVmaW5lIHRleHR1cmVDdWJlIHRleHR1cmUiLCIjZGVmaW5lIHRleHR1cmUyRFByb2ogdGV4dHVyZVByb2oiLCIjZGVmaW5lIHRleHR1cmUyRExvZEVYVCB0ZXh0dXJlTG9kIiwiI2RlZmluZSB0ZXh0dXJlMkRQcm9qTG9kRVhUIHRleHR1cmVQcm9qTG9kIiwiI2RlZmluZSB0ZXh0dXJlQ3ViZUxvZEVYVCB0ZXh0dXJlTG9kIiwiI2RlZmluZSB0ZXh0dXJlMkRHcmFkRVhUIHRleHR1cmVHcmFkIiwiI2RlZmluZSB0ZXh0dXJlMkRQcm9qR3JhZEVYVCB0ZXh0dXJlUHJvakdyYWQiLCIjZGVmaW5lIHRleHR1cmVDdWJlR3JhZEVYVCB0ZXh0dXJlR3JhZCJdLmpvaW4oIlxuIikrIlxuIit4KTtjb25zdCBQPU8reCtzLHc9WWx0KGksMzU2MzMsTyt2K3IpLGs9WWx0KGksMzU2MzIsUCk7aWYoaS5hdHRhY2hTaGFkZXIoTSx3KSxpLmF0dGFjaFNoYWRlcihNLGspLHZvaWQgMCE9PW4uaW5kZXgwQXR0cmlidXRlTmFtZT9pLmJpbmRBdHRyaWJMb2NhdGlvbihNLDAsbi5pbmRleDBBdHRyaWJ1dGVOYW1lKTohMD09PW4ubW9ycGhUYXJnZXRzJiZpLmJpbmRBdHRyaWJMb2NhdGlvbihNLDAsInBvc2l0aW9uIiksaS5saW5rUHJvZ3JhbShNKSx0LmRlYnVnLmNoZWNrU2hhZGVyRXJyb3JzKXtjb25zdCB0PWkuZ2V0UHJvZ3JhbUluZm9Mb2coTSkudHJpbSgpLGU9aS5nZXRTaGFkZXJJbmZvTG9nKHcpLnRyaW0oKSxuPWkuZ2V0U2hhZGVySW5mb0xvZyhrKS50cmltKCk7bGV0IG89ITAsYT0hMDtpZighMT09PWkuZ2V0UHJvZ3JhbVBhcmFtZXRlcihNLDM1NzE0KSl7bz0hMTtjb25zdCBlPVhsdChpLHcsInZlcnRleCIpLG49WGx0KGksaywiZnJhZ21lbnQiKTtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFByb2dyYW06IHNoYWRlciBlcnJvcjogIixpLmdldEVycm9yKCksIjM1NzE1IixpLmdldFByb2dyYW1QYXJhbWV0ZXIoTSwzNTcxNSksImdsLmdldFByb2dyYW1JbmZvTG9nIix0LGUsbil9ZWxzZSIiIT09dD9jb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUHJvZ3JhbTogZ2wuZ2V0UHJvZ3JhbUluZm9Mb2coKSIsdCk6IiIhPT1lJiYiIiE9PW58fChhPSExKTthJiYodGhpcy5kaWFnbm9zdGljcz17cnVubmFibGU6byxwcm9ncmFtTG9nOnQsdmVydGV4U2hhZGVyOntsb2c6ZSxwcmVmaXg6dn0sZnJhZ21lbnRTaGFkZXI6e2xvZzpuLHByZWZpeDp4fX0pfWxldCBTLEQ7cmV0dXJuIGkuZGVsZXRlU2hhZGVyKHcpLGkuZGVsZXRlU2hhZGVyKGspLHRoaXMuZ2V0VW5pZm9ybXM9ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09UyYmKFM9bmV3IEdsdChpLE0pKSxTfSx0aGlzLmdldEF0dHJpYnV0ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09RCYmKEQ9KGZ1bmN0aW9uIHQoZSxuKXtjb25zdCBvPXt9LGk9ZS5nZXRQcm9ncmFtUGFyYW1ldGVyKG4sMzU3MjEpO2ZvcihsZXQgdD0wO3Q8aTt0Kyspe2NvbnN0IGk9ZS5nZXRBY3RpdmVBdHRyaWIobix0KS5uYW1lO29baV09ZS5nZXRBdHRyaWJMb2NhdGlvbihuLGkpfXJldHVybiBvfSkoaSxNKSksRH0sdGhpcy5kZXN0cm95PWZ1bmN0aW9uKCl7by5yZWxlYXNlU3RhdGVzT2ZQcm9ncmFtKHRoaXMpLGkuZGVsZXRlUHJvZ3JhbShNKSx0aGlzLnByb2dyYW09dm9pZCAwfSx0aGlzLm5hbWU9bi5zaGFkZXJOYW1lLHRoaXMuaWQ9cWx0KyssdGhpcy5jYWNoZUtleT1lLHRoaXMudXNlZFRpbWVzPTEsdGhpcy5wcm9ncmFtPU0sdGhpcy52ZXJ0ZXhTaGFkZXI9dyx0aGlzLmZyYWdtZW50U2hhZGVyPWssdGhpc31mdW5jdGlvbiBtY3QodCxlLG4sbyxpLGEpe2NvbnN0IHI9W10scz1vLmlzV2ViR0wyLGw9by5sb2dhcml0aG1pY0RlcHRoQnVmZmVyLGM9by5mbG9hdFZlcnRleFRleHR1cmVzLGQ9by5tYXhWZXJ0ZXhVbmlmb3JtcyxwPW8udmVydGV4VGV4dHVyZXM7bGV0IG09by5wcmVjaXNpb247Y29uc3QgdT17TWVzaERlcHRoTWF0ZXJpYWw6ImRlcHRoIixNZXNoRGlzdGFuY2VNYXRlcmlhbDoiZGlzdGFuY2VSR0JBIixNZXNoTm9ybWFsTWF0ZXJpYWw6Im5vcm1hbCIsTWVzaEJhc2ljTWF0ZXJpYWw6ImJhc2ljIixNZXNoTGFtYmVydE1hdGVyaWFsOiJsYW1iZXJ0IixNZXNoUGhvbmdNYXRlcmlhbDoicGhvbmciLE1lc2hUb29uTWF0ZXJpYWw6InRvb24iLE1lc2hTdGFuZGFyZE1hdGVyaWFsOiJwaHlzaWNhbCIsTWVzaFBoeXNpY2FsTWF0ZXJpYWw6InBoeXNpY2FsIixNZXNoTWF0Y2FwTWF0ZXJpYWw6Im1hdGNhcCIsTGluZUJhc2ljTWF0ZXJpYWw6ImJhc2ljIixMaW5lRGFzaGVkTWF0ZXJpYWw6ImRhc2hlZCIsUG9pbnRzTWF0ZXJpYWw6InBvaW50cyIsU2hhZG93TWF0ZXJpYWw6InNoYWRvdyIsU3ByaXRlTWF0ZXJpYWw6InNwcml0ZSJ9LGY9WyJwcmVjaXNpb24iLCJpc1dlYkdMMiIsInN1cHBvcnRzVmVydGV4VGV4dHVyZXMiLCJvdXRwdXRFbmNvZGluZyIsImluc3RhbmNpbmciLCJpbnN0YW5jaW5nQ29sb3IiLCJtYXAiLCJtYXBFbmNvZGluZyIsIm1hdGNhcCIsIm1hdGNhcEVuY29kaW5nIiwiZW52TWFwIiwiZW52TWFwTW9kZSIsImVudk1hcEVuY29kaW5nIiwiZW52TWFwQ3ViZVVWIiwibGlnaHRNYXAiLCJsaWdodE1hcEVuY29kaW5nIiwiYW9NYXAiLCJlbWlzc2l2ZU1hcCIsImVtaXNzaXZlTWFwRW5jb2RpbmciLCJidW1wTWFwIiwibm9ybWFsTWFwIiwib2JqZWN0U3BhY2VOb3JtYWxNYXAiLCJ0YW5nZW50U3BhY2VOb3JtYWxNYXAiLCJjbGVhcmNvYXRNYXAiLCJjbGVhcmNvYXRSb3VnaG5lc3NNYXAiLCJjbGVhcmNvYXROb3JtYWxNYXAiLCJkaXNwbGFjZW1lbnRNYXAiLCJzcGVjdWxhck1hcCIsInJvdWdobmVzc01hcCIsIm1ldGFsbmVzc01hcCIsImdyYWRpZW50TWFwIiwiYWxwaGFNYXAiLCJjb21iaW5lIiwidmVydGV4Q29sb3JzIiwidmVydGV4VGFuZ2VudHMiLCJ2ZXJ0ZXhVdnMiLCJ1dnNWZXJ0ZXhPbmx5IiwiZm9nIiwidXNlRm9nIiwiZm9nRXhwMiIsImZsYXRTaGFkaW5nIiwic2l6ZUF0dGVudWF0aW9uIiwibG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciIsInNraW5uaW5nIiwibWF4Qm9uZXMiLCJ1c2VWZXJ0ZXhUZXh0dXJlIiwibW9ycGhUYXJnZXRzIiwibW9ycGhOb3JtYWxzIiwibWF4TW9ycGhUYXJnZXRzIiwibWF4TW9ycGhOb3JtYWxzIiwicHJlbXVsdGlwbGllZEFscGhhIiwibnVtRGlyTGlnaHRzIiwibnVtUG9pbnRMaWdodHMiLCJudW1TcG90TGlnaHRzIiwibnVtSGVtaUxpZ2h0cyIsIm51bVJlY3RBcmVhTGlnaHRzIiwibnVtRGlyTGlnaHRTaGFkb3dzIiwibnVtUG9pbnRMaWdodFNoYWRvd3MiLCJudW1TcG90TGlnaHRTaGFkb3dzIiwic2hhZG93TWFwRW5hYmxlZCIsInNoYWRvd01hcFR5cGUiLCJ0b25lTWFwcGluZyIsInBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzIiwiYWxwaGFUZXN0IiwiZG91YmxlU2lkZWQiLCJmbGlwU2lkZWQiLCJudW1DbGlwcGluZ1BsYW5lcyIsIm51bUNsaXBJbnRlcnNlY3Rpb24iLCJkZXB0aFBhY2tpbmciLCJkaXRoZXJpbmciLCJzaGVlbiIsInRyYW5zbWlzc2lvbk1hcCJdO2Z1bmN0aW9uIGcodCl7bGV0IGU7cmV0dXJuIHQmJnQuaXNUZXh0dXJlP2U9dC5lbmNvZGluZzp0JiZ0LmlzV2ViR0xSZW5kZXJUYXJnZXQ/KGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xQcm9ncmFtcy5nZXRUZXh0dXJlRW5jb2RpbmdGcm9tTWFwOiBkb24ndCB1c2UgcmVuZGVyIHRhcmdldHMgYXMgdGV4dHVyZXMuIFVzZSB0aGVpciAudGV4dHVyZSBwcm9wZXJ0eSBpbnN0ZWFkLiIpLGU9dC50ZXh0dXJlLmVuY29kaW5nKTplPU5pdCxlfXJldHVybntnZXRQYXJhbWV0ZXJzOmZ1bmN0aW9uIGgoaSxyLGYsYix5KXtjb25zdCBfPWIuZm9nLEM9ZS5nZXQoaS5lbnZNYXB8fChpLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/Yi5lbnZpcm9ubWVudDpudWxsKSksTT11W2kudHlwZV0sdj15LmlzU2tpbm5lZE1lc2g/KGZ1bmN0aW9uIHgodCl7Y29uc3QgZT10LnNrZWxldG9uLmJvbmVzO2lmKGMpcmV0dXJuIDEwMjQ7e2NvbnN0IHQ9TWF0aC5mbG9vcigoZC0yMCkvNCksbj1NYXRoLm1pbih0LGUubGVuZ3RoKTtyZXR1cm4gbjxlLmxlbmd0aD8oY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBTa2VsZXRvbiBoYXMgIitlLmxlbmd0aCsiIGJvbmVzLiBUaGlzIEdQVSBzdXBwb3J0cyAiK24rIi4iKSwwKTpufX0pKHkpOjA7bGV0IE8sUDtpZihudWxsIT09aS5wcmVjaXNpb24mJihtPW8uZ2V0TWF4UHJlY2lzaW9uKGkucHJlY2lzaW9uKSxtIT09aS5wcmVjaXNpb24mJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xQcm9ncmFtLmdldFBhcmFtZXRlcnM6IixpLnByZWNpc2lvbiwibm90IHN1cHBvcnRlZCwgdXNpbmciLG0sImluc3RlYWQuIikpLE0pe2NvbnN0IHQ9TnN0W01dO089dC52ZXJ0ZXhTaGFkZXIsUD10LmZyYWdtZW50U2hhZGVyfWVsc2UgTz1pLnZlcnRleFNoYWRlcixQPWkuZnJhZ21lbnRTaGFkZXI7Y29uc3Qgdz10LmdldFJlbmRlclRhcmdldCgpO3JldHVybntpc1dlYkdMMjpzLHNoYWRlcklEOk0sc2hhZGVyTmFtZTppLnR5cGUsdmVydGV4U2hhZGVyOk8sZnJhZ21lbnRTaGFkZXI6UCxkZWZpbmVzOmkuZGVmaW5lcyxpc1Jhd1NoYWRlck1hdGVyaWFsOiEwPT09aS5pc1Jhd1NoYWRlck1hdGVyaWFsLGdsc2xWZXJzaW9uOmkuZ2xzbFZlcnNpb24scHJlY2lzaW9uOm0saW5zdGFuY2luZzohMD09PXkuaXNJbnN0YW5jZWRNZXNoLGluc3RhbmNpbmdDb2xvcjohMD09PXkuaXNJbnN0YW5jZWRNZXNoJiZudWxsIT09eS5pbnN0YW5jZUNvbG9yLHN1cHBvcnRzVmVydGV4VGV4dHVyZXM6cCxvdXRwdXRFbmNvZGluZzpudWxsIT09dz9nKHcudGV4dHVyZSk6dC5vdXRwdXRFbmNvZGluZyxtYXA6ISFpLm1hcCxtYXBFbmNvZGluZzpnKGkubWFwKSxtYXRjYXA6ISFpLm1hdGNhcCxtYXRjYXBFbmNvZGluZzpnKGkubWF0Y2FwKSxlbnZNYXA6ISFDLGVudk1hcE1vZGU6QyYmQy5tYXBwaW5nLGVudk1hcEVuY29kaW5nOmcoQyksZW52TWFwQ3ViZVVWOiEhQyYmKDMwNj09PUMubWFwcGluZ3x8MzA3PT09Qy5tYXBwaW5nKSxsaWdodE1hcDohIWkubGlnaHRNYXAsbGlnaHRNYXBFbmNvZGluZzpnKGkubGlnaHRNYXApLGFvTWFwOiEhaS5hb01hcCxlbWlzc2l2ZU1hcDohIWkuZW1pc3NpdmVNYXAsZW1pc3NpdmVNYXBFbmNvZGluZzpnKGkuZW1pc3NpdmVNYXApLGJ1bXBNYXA6ISFpLmJ1bXBNYXAsbm9ybWFsTWFwOiEhaS5ub3JtYWxNYXAsb2JqZWN0U3BhY2VOb3JtYWxNYXA6MT09PWkubm9ybWFsTWFwVHlwZSx0YW5nZW50U3BhY2VOb3JtYWxNYXA6MD09PWkubm9ybWFsTWFwVHlwZSxjbGVhcmNvYXRNYXA6ISFpLmNsZWFyY29hdE1hcCxjbGVhcmNvYXRSb3VnaG5lc3NNYXA6ISFpLmNsZWFyY29hdFJvdWdobmVzc01hcCxjbGVhcmNvYXROb3JtYWxNYXA6ISFpLmNsZWFyY29hdE5vcm1hbE1hcCxkaXNwbGFjZW1lbnRNYXA6ISFpLmRpc3BsYWNlbWVudE1hcCxyb3VnaG5lc3NNYXA6ISFpLnJvdWdobmVzc01hcCxtZXRhbG5lc3NNYXA6ISFpLm1ldGFsbmVzc01hcCxzcGVjdWxhck1hcDohIWkuc3BlY3VsYXJNYXAsYWxwaGFNYXA6ISFpLmFscGhhTWFwLGdyYWRpZW50TWFwOiEhaS5ncmFkaWVudE1hcCxzaGVlbjohIWkuc2hlZW4sdHJhbnNtaXNzaW9uTWFwOiEhaS50cmFuc21pc3Npb25NYXAsY29tYmluZTppLmNvbWJpbmUsdmVydGV4VGFuZ2VudHM6aS5ub3JtYWxNYXAmJmkudmVydGV4VGFuZ2VudHMsdmVydGV4Q29sb3JzOmkudmVydGV4Q29sb3JzLHZlcnRleFV2czohIShpLm1hcHx8aS5idW1wTWFwfHxpLm5vcm1hbE1hcHx8aS5zcGVjdWxhck1hcHx8aS5hbHBoYU1hcHx8aS5lbWlzc2l2ZU1hcHx8aS5yb3VnaG5lc3NNYXB8fGkubWV0YWxuZXNzTWFwfHxpLmNsZWFyY29hdE1hcHx8aS5jbGVhcmNvYXRSb3VnaG5lc3NNYXB8fGkuY2xlYXJjb2F0Tm9ybWFsTWFwfHxpLmRpc3BsYWNlbWVudE1hcHx8aS50cmFuc21pc3Npb25NYXApLHV2c1ZlcnRleE9ubHk6IShpLm1hcHx8aS5idW1wTWFwfHxpLm5vcm1hbE1hcHx8aS5zcGVjdWxhck1hcHx8aS5hbHBoYU1hcHx8aS5lbWlzc2l2ZU1hcHx8aS5yb3VnaG5lc3NNYXB8fGkubWV0YWxuZXNzTWFwfHxpLmNsZWFyY29hdE5vcm1hbE1hcHx8aS50cmFuc21pc3Npb25NYXB8fCFpLmRpc3BsYWNlbWVudE1hcCksZm9nOiEhXyx1c2VGb2c6aS5mb2csZm9nRXhwMjpfJiZfLmlzRm9nRXhwMixmbGF0U2hhZGluZzppLmZsYXRTaGFkaW5nLHNpemVBdHRlbnVhdGlvbjppLnNpemVBdHRlbnVhdGlvbixsb2dhcml0aG1pY0RlcHRoQnVmZmVyOmwsc2tpbm5pbmc6aS5za2lubmluZyYmdj4wLG1heEJvbmVzOnYsdXNlVmVydGV4VGV4dHVyZTpjLG1vcnBoVGFyZ2V0czppLm1vcnBoVGFyZ2V0cyxtb3JwaE5vcm1hbHM6aS5tb3JwaE5vcm1hbHMsbWF4TW9ycGhUYXJnZXRzOnQubWF4TW9ycGhUYXJnZXRzLG1heE1vcnBoTm9ybWFsczp0Lm1heE1vcnBoTm9ybWFscyxudW1EaXJMaWdodHM6ci5kaXJlY3Rpb25hbC5sZW5ndGgsbnVtUG9pbnRMaWdodHM6ci5wb2ludC5sZW5ndGgsbnVtU3BvdExpZ2h0czpyLnNwb3QubGVuZ3RoLG51bVJlY3RBcmVhTGlnaHRzOnIucmVjdEFyZWEubGVuZ3RoLG51bUhlbWlMaWdodHM6ci5oZW1pLmxlbmd0aCxudW1EaXJMaWdodFNoYWRvd3M6ci5kaXJlY3Rpb25hbFNoYWRvd01hcC5sZW5ndGgsbnVtUG9pbnRMaWdodFNoYWRvd3M6ci5wb2ludFNoYWRvd01hcC5sZW5ndGgsbnVtU3BvdExpZ2h0U2hhZG93czpyLnNwb3RTaGFkb3dNYXAubGVuZ3RoLG51bUNsaXBwaW5nUGxhbmVzOmEubnVtUGxhbmVzLG51bUNsaXBJbnRlcnNlY3Rpb246YS5udW1JbnRlcnNlY3Rpb24sZGl0aGVyaW5nOmkuZGl0aGVyaW5nLHNoYWRvd01hcEVuYWJsZWQ6dC5zaGFkb3dNYXAuZW5hYmxlZCYmZi5sZW5ndGg+MCxzaGFkb3dNYXBUeXBlOnQuc2hhZG93TWFwLnR5cGUsdG9uZU1hcHBpbmc6aS50b25lTWFwcGVkP3QudG9uZU1hcHBpbmc6MCxwaHlzaWNhbGx5Q29ycmVjdExpZ2h0czp0LnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzLHByZW11bHRpcGxpZWRBbHBoYTppLnByZW11bHRpcGxpZWRBbHBoYSxhbHBoYVRlc3Q6aS5hbHBoYVRlc3QsZG91YmxlU2lkZWQ6Mj09PWkuc2lkZSxmbGlwU2lkZWQ6MT09PWkuc2lkZSxkZXB0aFBhY2tpbmc6dm9pZCAwIT09aS5kZXB0aFBhY2tpbmcmJmkuZGVwdGhQYWNraW5nLGluZGV4MEF0dHJpYnV0ZU5hbWU6aS5pbmRleDBBdHRyaWJ1dGVOYW1lLGV4dGVuc2lvbkRlcml2YXRpdmVzOmkuZXh0ZW5zaW9ucyYmaS5leHRlbnNpb25zLmRlcml2YXRpdmVzLGV4dGVuc2lvbkZyYWdEZXB0aDppLmV4dGVuc2lvbnMmJmkuZXh0ZW5zaW9ucy5mcmFnRGVwdGgsZXh0ZW5zaW9uRHJhd0J1ZmZlcnM6aS5leHRlbnNpb25zJiZpLmV4dGVuc2lvbnMuZHJhd0J1ZmZlcnMsZXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxPRDppLmV4dGVuc2lvbnMmJmkuZXh0ZW5zaW9ucy5zaGFkZXJUZXh0dXJlTE9ELHJlbmRlcmVyRXh0ZW5zaW9uRnJhZ0RlcHRoOnN8fG4uaGFzKCJFWFRfZnJhZ19kZXB0aCIpLHJlbmRlcmVyRXh0ZW5zaW9uRHJhd0J1ZmZlcnM6c3x8bi5oYXMoIldFQkdMX2RyYXdfYnVmZmVycyIpLHJlbmRlcmVyRXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxvZDpzfHxuLmhhcygiRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpLGN1c3RvbVByb2dyYW1DYWNoZUtleTppLmN1c3RvbVByb2dyYW1DYWNoZUtleSgpfX0sZ2V0UHJvZ3JhbUNhY2hlS2V5OmZ1bmN0aW9uIGIoZSl7Y29uc3Qgbj1bXTtpZihlLnNoYWRlcklEP24ucHVzaChlLnNoYWRlcklEKToobi5wdXNoKGUuZnJhZ21lbnRTaGFkZXIpLG4ucHVzaChlLnZlcnRleFNoYWRlcikpLHZvaWQgMCE9PWUuZGVmaW5lcylmb3IoY29uc3QgdCBpbiBlLmRlZmluZXMpbi5wdXNoKHQpLG4ucHVzaChlLmRlZmluZXNbdF0pO2lmKCExPT09ZS5pc1Jhd1NoYWRlck1hdGVyaWFsKXtmb3IobGV0IHQ9MDt0PGYubGVuZ3RoO3QrKyluLnB1c2goZVtmW3RdXSk7bi5wdXNoKHQub3V0cHV0RW5jb2RpbmcpLG4ucHVzaCh0LmdhbW1hRmFjdG9yKX1yZXR1cm4gbi5wdXNoKGUuY3VzdG9tUHJvZ3JhbUNhY2hlS2V5KSxuLmpvaW4oKX0sZ2V0VW5pZm9ybXM6ZnVuY3Rpb24geSh0KXtjb25zdCBlPXVbdC50eXBlXTtsZXQgbjtyZXR1cm4gbj1lP2JzdC5jbG9uZShOc3RbZV0udW5pZm9ybXMpOnQudW5pZm9ybXMsbn0sYWNxdWlyZVByb2dyYW06ZnVuY3Rpb24gXyhlLG4pe2xldCBvO2ZvcihsZXQgdD0wLGU9ci5sZW5ndGg7dDxlO3QrKyl7Y29uc3QgZT1yW3RdO2lmKGUuY2FjaGVLZXk9PT1uKXtvPWUsKytvLnVzZWRUaW1lczticmVha319cmV0dXJuIHZvaWQgMD09PW8mJihvPW5ldyBwY3QodCxuLGUsaSksci5wdXNoKG8pKSxvfSxyZWxlYXNlUHJvZ3JhbTpmdW5jdGlvbiBDKHQpe2lmKDA9PS0tdC51c2VkVGltZXMpe2NvbnN0IGU9ci5pbmRleE9mKHQpO3JbZV09cltyLmxlbmd0aC0xXSxyLnBvcCgpLHQuZGVzdHJveSgpfX0scHJvZ3JhbXM6cn19ZnVuY3Rpb24gdWN0KCl7bGV0IHQ9bmV3IFdlYWtNYXA7cmV0dXJue2dldDpmdW5jdGlvbiBlKG4pe2xldCBvPXQuZ2V0KG4pO3JldHVybiB2b2lkIDA9PT1vJiYobz17fSx0LnNldChuLG8pKSxvfSxyZW1vdmU6ZnVuY3Rpb24gbihlKXt0LmRlbGV0ZShlKX0sdXBkYXRlOmZ1bmN0aW9uIG8oZSxuLGkpe3QuZ2V0KGUpW25dPWl9LGRpc3Bvc2U6ZnVuY3Rpb24gaSgpe3Q9bmV3IFdlYWtNYXB9fX1mdW5jdGlvbiBmY3QodCxlKXtyZXR1cm4gdC5ncm91cE9yZGVyIT09ZS5ncm91cE9yZGVyP3QuZ3JvdXBPcmRlci1lLmdyb3VwT3JkZXI6dC5yZW5kZXJPcmRlciE9PWUucmVuZGVyT3JkZXI/dC5yZW5kZXJPcmRlci1lLnJlbmRlck9yZGVyOnQucHJvZ3JhbSE9PWUucHJvZ3JhbT90LnByb2dyYW0uaWQtZS5wcm9ncmFtLmlkOnQubWF0ZXJpYWwuaWQhPT1lLm1hdGVyaWFsLmlkP3QubWF0ZXJpYWwuaWQtZS5tYXRlcmlhbC5pZDp0LnohPT1lLno/dC56LWUuejp0LmlkLWUuaWR9ZnVuY3Rpb24gZ2N0KHQsZSl7cmV0dXJuIHQuZ3JvdXBPcmRlciE9PWUuZ3JvdXBPcmRlcj90Lmdyb3VwT3JkZXItZS5ncm91cE9yZGVyOnQucmVuZGVyT3JkZXIhPT1lLnJlbmRlck9yZGVyP3QucmVuZGVyT3JkZXItZS5yZW5kZXJPcmRlcjp0LnohPT1lLno/ZS56LXQuejp0LmlkLWUuaWR9ZnVuY3Rpb24gaGN0KHQpe2NvbnN0IGU9W107bGV0IG49MDtjb25zdCBvPVtdLGk9W10sYT17aWQ6LTF9O2Z1bmN0aW9uIHIobyxpLHIscyxsLGMpe2xldCBkPWVbbl07Y29uc3QgcD10LmdldChyKTtyZXR1cm4gdm9pZCAwPT09ZD8oZD17aWQ6by5pZCxvYmplY3Q6byxnZW9tZXRyeTppLG1hdGVyaWFsOnIscHJvZ3JhbTpwLnByb2dyYW18fGEsZ3JvdXBPcmRlcjpzLHJlbmRlck9yZGVyOm8ucmVuZGVyT3JkZXIsejpsLGdyb3VwOmN9LGVbbl09ZCk6KGQuaWQ9by5pZCxkLm9iamVjdD1vLGQuZ2VvbWV0cnk9aSxkLm1hdGVyaWFsPXIsZC5wcm9ncmFtPXAucHJvZ3JhbXx8YSxkLmdyb3VwT3JkZXI9cyxkLnJlbmRlck9yZGVyPW8ucmVuZGVyT3JkZXIsZC56PWwsZC5ncm91cD1jKSxuKyssZH1yZXR1cm57b3BhcXVlOm8sdHJhbnNwYXJlbnQ6aSxpbml0OmZ1bmN0aW9uIHMoKXtuPTAsby5sZW5ndGg9MCxpLmxlbmd0aD0wfSxwdXNoOmZ1bmN0aW9uIGwodCxlLG4sYSxzLGMpe2NvbnN0IGQ9cih0LGUsbixhLHMsYyk7KCEwPT09bi50cmFuc3BhcmVudD9pOm8pLnB1c2goZCl9LHVuc2hpZnQ6ZnVuY3Rpb24gYyh0LGUsbixhLHMsbCl7Y29uc3QgYz1yKHQsZSxuLGEscyxsKTsoITA9PT1uLnRyYW5zcGFyZW50P2k6bykudW5zaGlmdChjKX0sZmluaXNoOmZ1bmN0aW9uIGQoKXtmb3IobGV0IHQ9bixvPWUubGVuZ3RoO3Q8bzt0Kyspe2NvbnN0IG49ZVt0XTtpZihudWxsPT09bi5pZClicmVhaztuLmlkPW51bGwsbi5vYmplY3Q9bnVsbCxuLmdlb21ldHJ5PW51bGwsbi5tYXRlcmlhbD1udWxsLG4ucHJvZ3JhbT1udWxsLG4uZ3JvdXA9bnVsbH19LHNvcnQ6ZnVuY3Rpb24gcCh0LGUpe28ubGVuZ3RoPjEmJm8uc29ydCh0fHxmY3QpLGkubGVuZ3RoPjEmJmkuc29ydChlfHxnY3QpfX19ZnVuY3Rpb24gYmN0KHQpe2xldCBlPW5ldyBXZWFrTWFwO3JldHVybntnZXQ6ZnVuY3Rpb24gbihvLGkpe2NvbnN0IGE9ZS5nZXQobyk7bGV0IHI7cmV0dXJuIHZvaWQgMD09PWE/KHI9bmV3IGhjdCh0KSxlLnNldChvLG5ldyBXZWFrTWFwKSxlLmdldChvKS5zZXQoaSxyKSk6KHI9YS5nZXQoaSksdm9pZCAwPT09ciYmKHI9bmV3IGhjdCh0KSxhLnNldChpLHIpKSkscn0sZGlzcG9zZTpmdW5jdGlvbiBvKCl7ZT1uZXcgV2Vha01hcH19fWZ1bmN0aW9uIHljdCgpe2NvbnN0IHQ9e307cmV0dXJue2dldDpmdW5jdGlvbihlKXtpZih2b2lkIDAhPT10W2UuaWRdKXJldHVybiB0W2UuaWRdO2xldCBuO3N3aXRjaChlLnR5cGUpe2Nhc2UiRGlyZWN0aW9uYWxMaWdodCI6bj17ZGlyZWN0aW9uOm5ldyAkaXQsY29sb3I6bmV3IENydH07YnJlYWs7Y2FzZSJTcG90TGlnaHQiOm49e3Bvc2l0aW9uOm5ldyAkaXQsZGlyZWN0aW9uOm5ldyAkaXQsY29sb3I6bmV3IENydCxkaXN0YW5jZTowLGNvbmVDb3M6MCxwZW51bWJyYUNvczowLGRlY2F5OjB9O2JyZWFrO2Nhc2UiUG9pbnRMaWdodCI6bj17cG9zaXRpb246bmV3ICRpdCxjb2xvcjpuZXcgQ3J0LGRpc3RhbmNlOjAsZGVjYXk6MH07YnJlYWs7Y2FzZSJIZW1pc3BoZXJlTGlnaHQiOm49e2RpcmVjdGlvbjpuZXcgJGl0LHNreUNvbG9yOm5ldyBDcnQsZ3JvdW5kQ29sb3I6bmV3IENydH07YnJlYWs7Y2FzZSJSZWN0QXJlYUxpZ2h0IjpuPXtjb2xvcjpuZXcgQ3J0LHBvc2l0aW9uOm5ldyAkaXQsaGFsZldpZHRoOm5ldyAkaXQsaGFsZkhlaWdodDpuZXcgJGl0fX1yZXR1cm4gdFtlLmlkXT1uLG59fX1sZXQgX2N0PTA7ZnVuY3Rpb24gQ2N0KHQsZSl7cmV0dXJuKGUuY2FzdFNoYWRvdz8xOjApLSh0LmNhc3RTaGFkb3c/MTowKX1mdW5jdGlvbiBNY3QodCxlKXtjb25zdCBuPW5ldyB5Y3Qsbz0oZnVuY3Rpb24gaSgpe2NvbnN0IHQ9e307cmV0dXJue2dldDpmdW5jdGlvbihlKXtpZih2b2lkIDAhPT10W2UuaWRdKXJldHVybiB0W2UuaWRdO2xldCBuO3N3aXRjaChlLnR5cGUpe2Nhc2UiRGlyZWN0aW9uYWxMaWdodCI6Y2FzZSJTcG90TGlnaHQiOm49e3NoYWRvd0JpYXM6MCxzaGFkb3dOb3JtYWxCaWFzOjAsc2hhZG93UmFkaXVzOjEsc2hhZG93TWFwU2l6ZTpuZXcgVWl0fTticmVhaztjYXNlIlBvaW50TGlnaHQiOm49e3NoYWRvd0JpYXM6MCxzaGFkb3dOb3JtYWxCaWFzOjAsc2hhZG93UmFkaXVzOjEsc2hhZG93TWFwU2l6ZTpuZXcgVWl0LHNoYWRvd0NhbWVyYU5lYXI6MSxzaGFkb3dDYW1lcmFGYXI6MWUzfX1yZXR1cm4gdFtlLmlkXT1uLG59fX0pKCksYT17dmVyc2lvbjowLGhhc2g6e2RpcmVjdGlvbmFsTGVuZ3RoOi0xLHBvaW50TGVuZ3RoOi0xLHNwb3RMZW5ndGg6LTEscmVjdEFyZWFMZW5ndGg6LTEsaGVtaUxlbmd0aDotMSxudW1EaXJlY3Rpb25hbFNoYWRvd3M6LTEsbnVtUG9pbnRTaGFkb3dzOi0xLG51bVNwb3RTaGFkb3dzOi0xfSxhbWJpZW50OlswLDAsMF0scHJvYmU6W10sZGlyZWN0aW9uYWw6W10sZGlyZWN0aW9uYWxTaGFkb3c6W10sZGlyZWN0aW9uYWxTaGFkb3dNYXA6W10sZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXg6W10sc3BvdDpbXSxzcG90U2hhZG93OltdLHNwb3RTaGFkb3dNYXA6W10sc3BvdFNoYWRvd01hdHJpeDpbXSxyZWN0QXJlYTpbXSxyZWN0QXJlYUxUQzE6bnVsbCxyZWN0QXJlYUxUQzI6bnVsbCxwb2ludDpbXSxwb2ludFNoYWRvdzpbXSxwb2ludFNoYWRvd01hcDpbXSxwb2ludFNoYWRvd01hdHJpeDpbXSxoZW1pOltdfTtmb3IobGV0IHQ9MDt0PDk7dCsrKWEucHJvYmUucHVzaChuZXcgJGl0KTtjb25zdCByPW5ldyAkaXQscz1uZXcga2F0LGw9bmV3IGthdDtyZXR1cm57c2V0dXA6ZnVuY3Rpb24gYyhpKXtsZXQgcj0wLHM9MCxsPTA7Zm9yKGxldCB0PTA7dDw5O3QrKylhLnByb2JlW3RdLnNldCgwLDAsMCk7bGV0IGM9MCxkPTAscD0wLG09MCx1PTAsZj0wLGc9MCxoPTA7aS5zb3J0KENjdCk7Zm9yKGxldCB0PTAsZT1pLmxlbmd0aDt0PGU7dCsrKXtjb25zdCBlPWlbdF0sYj1lLmNvbG9yLHk9ZS5pbnRlbnNpdHksXz1lLmRpc3RhbmNlLEM9ZS5zaGFkb3cmJmUuc2hhZG93Lm1hcD9lLnNoYWRvdy5tYXAudGV4dHVyZTpudWxsO2lmKGUuaXNBbWJpZW50TGlnaHQpcis9Yi5yKnkscys9Yi5nKnksbCs9Yi5iKnk7ZWxzZSBpZihlLmlzTGlnaHRQcm9iZSlmb3IobGV0IHQ9MDt0PDk7dCsrKWEucHJvYmVbdF0uYWRkU2NhbGVkVmVjdG9yKGUuc2guY29lZmZpY2llbnRzW3RdLHkpO2Vsc2UgaWYoZS5pc0RpcmVjdGlvbmFsTGlnaHQpe2NvbnN0IHQ9bi5nZXQoZSk7aWYodC5jb2xvci5jb3B5KGUuY29sb3IpLm11bHRpcGx5U2NhbGFyKGUuaW50ZW5zaXR5KSxlLmNhc3RTaGFkb3cpe2NvbnN0IHQ9ZS5zaGFkb3csbj1vLmdldChlKTtuLnNoYWRvd0JpYXM9dC5iaWFzLG4uc2hhZG93Tm9ybWFsQmlhcz10Lm5vcm1hbEJpYXMsbi5zaGFkb3dSYWRpdXM9dC5yYWRpdXMsbi5zaGFkb3dNYXBTaXplPXQubWFwU2l6ZSxhLmRpcmVjdGlvbmFsU2hhZG93W2NdPW4sYS5kaXJlY3Rpb25hbFNoYWRvd01hcFtjXT1DLGEuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXhbY109ZS5zaGFkb3cubWF0cml4LGYrK31hLmRpcmVjdGlvbmFsW2NdPXQsYysrfWVsc2UgaWYoZS5pc1Nwb3RMaWdodCl7Y29uc3QgdD1uLmdldChlKTtpZih0LnBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihlLm1hdHJpeFdvcmxkKSx0LmNvbG9yLmNvcHkoYikubXVsdGlwbHlTY2FsYXIoeSksdC5kaXN0YW5jZT1fLHQuY29uZUNvcz1NYXRoLmNvcyhlLmFuZ2xlKSx0LnBlbnVtYnJhQ29zPU1hdGguY29zKGUuYW5nbGUqKDEtZS5wZW51bWJyYSkpLHQuZGVjYXk9ZS5kZWNheSxlLmNhc3RTaGFkb3cpe2NvbnN0IHQ9ZS5zaGFkb3csbj1vLmdldChlKTtuLnNoYWRvd0JpYXM9dC5iaWFzLG4uc2hhZG93Tm9ybWFsQmlhcz10Lm5vcm1hbEJpYXMsbi5zaGFkb3dSYWRpdXM9dC5yYWRpdXMsbi5zaGFkb3dNYXBTaXplPXQubWFwU2l6ZSxhLnNwb3RTaGFkb3dbcF09bixhLnNwb3RTaGFkb3dNYXBbcF09QyxhLnNwb3RTaGFkb3dNYXRyaXhbcF09ZS5zaGFkb3cubWF0cml4LGgrK31hLnNwb3RbcF09dCxwKyt9ZWxzZSBpZihlLmlzUmVjdEFyZWFMaWdodCl7Y29uc3QgdD1uLmdldChlKTt0LmNvbG9yLmNvcHkoYikubXVsdGlwbHlTY2FsYXIoeSksdC5oYWxmV2lkdGguc2V0KC41KmUud2lkdGgsMCwwKSx0LmhhbGZIZWlnaHQuc2V0KDAsLjUqZS5oZWlnaHQsMCksYS5yZWN0QXJlYVttXT10LG0rK31lbHNlIGlmKGUuaXNQb2ludExpZ2h0KXtjb25zdCB0PW4uZ2V0KGUpO2lmKHQuY29sb3IuY29weShlLmNvbG9yKS5tdWx0aXBseVNjYWxhcihlLmludGVuc2l0eSksdC5kaXN0YW5jZT1lLmRpc3RhbmNlLHQuZGVjYXk9ZS5kZWNheSxlLmNhc3RTaGFkb3cpe2NvbnN0IHQ9ZS5zaGFkb3csbj1vLmdldChlKTtuLnNoYWRvd0JpYXM9dC5iaWFzLG4uc2hhZG93Tm9ybWFsQmlhcz10Lm5vcm1hbEJpYXMsbi5zaGFkb3dSYWRpdXM9dC5yYWRpdXMsbi5zaGFkb3dNYXBTaXplPXQubWFwU2l6ZSxuLnNoYWRvd0NhbWVyYU5lYXI9dC5jYW1lcmEubmVhcixuLnNoYWRvd0NhbWVyYUZhcj10LmNhbWVyYS5mYXIsYS5wb2ludFNoYWRvd1tkXT1uLGEucG9pbnRTaGFkb3dNYXBbZF09QyxhLnBvaW50U2hhZG93TWF0cml4W2RdPWUuc2hhZG93Lm1hdHJpeCxnKyt9YS5wb2ludFtkXT10LGQrK31lbHNlIGlmKGUuaXNIZW1pc3BoZXJlTGlnaHQpe2NvbnN0IHQ9bi5nZXQoZSk7dC5za3lDb2xvci5jb3B5KGUuY29sb3IpLm11bHRpcGx5U2NhbGFyKHkpLHQuZ3JvdW5kQ29sb3IuY29weShlLmdyb3VuZENvbG9yKS5tdWx0aXBseVNjYWxhcih5KSxhLmhlbWlbdV09dCx1Kyt9fW0+MCYmKGUuaXNXZWJHTDJ8fCEwPT09dC5oYXMoIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpPyhhLnJlY3RBcmVhTFRDMT1Uc3QuTFRDX0ZMT0FUXzEsYS5yZWN0QXJlYUxUQzI9VHN0LkxUQ19GTE9BVF8yKTohMD09PXQuaGFzKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpPyhhLnJlY3RBcmVhTFRDMT1Uc3QuTFRDX0hBTEZfMSxhLnJlY3RBcmVhTFRDMj1Uc3QuTFRDX0hBTEZfMik6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVW5hYmxlIHRvIHVzZSBSZWN0QXJlYUxpZ2h0LiBNaXNzaW5nIFdlYkdMIGV4dGVuc2lvbnMuIikpLGEuYW1iaWVudFswXT1yLGEuYW1iaWVudFsxXT1zLGEuYW1iaWVudFsyXT1sO2NvbnN0IGI9YS5oYXNoO2IuZGlyZWN0aW9uYWxMZW5ndGg9PT1jJiZiLnBvaW50TGVuZ3RoPT09ZCYmYi5zcG90TGVuZ3RoPT09cCYmYi5yZWN0QXJlYUxlbmd0aD09PW0mJmIuaGVtaUxlbmd0aD09PXUmJmIubnVtRGlyZWN0aW9uYWxTaGFkb3dzPT09ZiYmYi5udW1Qb2ludFNoYWRvd3M9PT1nJiZiLm51bVNwb3RTaGFkb3dzPT09aHx8KGEuZGlyZWN0aW9uYWwubGVuZ3RoPWMsYS5zcG90Lmxlbmd0aD1wLGEucmVjdEFyZWEubGVuZ3RoPW0sYS5wb2ludC5sZW5ndGg9ZCxhLmhlbWkubGVuZ3RoPXUsYS5kaXJlY3Rpb25hbFNoYWRvdy5sZW5ndGg9ZixhLmRpcmVjdGlvbmFsU2hhZG93TWFwLmxlbmd0aD1mLGEucG9pbnRTaGFkb3cubGVuZ3RoPWcsYS5wb2ludFNoYWRvd01hcC5sZW5ndGg9ZyxhLnNwb3RTaGFkb3cubGVuZ3RoPWgsYS5zcG90U2hhZG93TWFwLmxlbmd0aD1oLGEuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXgubGVuZ3RoPWYsYS5wb2ludFNoYWRvd01hdHJpeC5sZW5ndGg9ZyxhLnNwb3RTaGFkb3dNYXRyaXgubGVuZ3RoPWgsYi5kaXJlY3Rpb25hbExlbmd0aD1jLGIucG9pbnRMZW5ndGg9ZCxiLnNwb3RMZW5ndGg9cCxiLnJlY3RBcmVhTGVuZ3RoPW0sYi5oZW1pTGVuZ3RoPXUsYi5udW1EaXJlY3Rpb25hbFNoYWRvd3M9ZixiLm51bVBvaW50U2hhZG93cz1nLGIubnVtU3BvdFNoYWRvd3M9aCxhLnZlcnNpb249X2N0KyspfSxzZXR1cFZpZXc6ZnVuY3Rpb24gZCh0LGUpe2xldCBuPTAsbz0wLGk9MCxjPTAsZD0wO2NvbnN0IHA9ZS5tYXRyaXhXb3JsZEludmVyc2U7Zm9yKGxldCBlPTAsbT10Lmxlbmd0aDtlPG07ZSsrKXtjb25zdCBtPXRbZV07aWYobS5pc0RpcmVjdGlvbmFsTGlnaHQpe2NvbnN0IHQ9YS5kaXJlY3Rpb25hbFtuXTt0LmRpcmVjdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24obS5tYXRyaXhXb3JsZCksci5zZXRGcm9tTWF0cml4UG9zaXRpb24obS50YXJnZXQubWF0cml4V29ybGQpLHQuZGlyZWN0aW9uLnN1YihyKSx0LmRpcmVjdGlvbi50cmFuc2Zvcm1EaXJlY3Rpb24ocCksbisrfWVsc2UgaWYobS5pc1Nwb3RMaWdodCl7Y29uc3QgdD1hLnNwb3RbaV07dC5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24obS5tYXRyaXhXb3JsZCksdC5wb3NpdGlvbi5hcHBseU1hdHJpeDQocCksdC5kaXJlY3Rpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKG0ubWF0cml4V29ybGQpLHIuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKG0udGFyZ2V0Lm1hdHJpeFdvcmxkKSx0LmRpcmVjdGlvbi5zdWIociksdC5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKHApLGkrK31lbHNlIGlmKG0uaXNSZWN0QXJlYUxpZ2h0KXtjb25zdCB0PWEucmVjdEFyZWFbY107dC5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24obS5tYXRyaXhXb3JsZCksdC5wb3NpdGlvbi5hcHBseU1hdHJpeDQocCksbC5pZGVudGl0eSgpLHMuY29weShtLm1hdHJpeFdvcmxkKSxzLnByZW11bHRpcGx5KHApLGwuZXh0cmFjdFJvdGF0aW9uKHMpLHQuaGFsZldpZHRoLnNldCguNSptLndpZHRoLDAsMCksdC5oYWxmSGVpZ2h0LnNldCgwLC41Km0uaGVpZ2h0LDApLHQuaGFsZldpZHRoLmFwcGx5TWF0cml4NChsKSx0LmhhbGZIZWlnaHQuYXBwbHlNYXRyaXg0KGwpLGMrK31lbHNlIGlmKG0uaXNQb2ludExpZ2h0KXtjb25zdCB0PWEucG9pbnRbb107dC5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24obS5tYXRyaXhXb3JsZCksdC5wb3NpdGlvbi5hcHBseU1hdHJpeDQocCksbysrfWVsc2UgaWYobS5pc0hlbWlzcGhlcmVMaWdodCl7Y29uc3QgdD1hLmhlbWlbZF07dC5kaXJlY3Rpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKG0ubWF0cml4V29ybGQpLHQuZGlyZWN0aW9uLnRyYW5zZm9ybURpcmVjdGlvbihwKSx0LmRpcmVjdGlvbi5ub3JtYWxpemUoKSxkKyt9fX0sc3RhdGU6YX19ZnVuY3Rpb24gdmN0KHQsZSl7Y29uc3Qgbj1uZXcgTWN0KHQsZSksbz1bXSxpPVtdO3JldHVybntpbml0OmZ1bmN0aW9uIGEoKXtvLmxlbmd0aD0wLGkubGVuZ3RoPTB9LHN0YXRlOntsaWdodHNBcnJheTpvLHNoYWRvd3NBcnJheTppLGxpZ2h0czpufSxzZXR1cExpZ2h0czpmdW5jdGlvbiByKCl7bi5zZXR1cChvKX0sc2V0dXBMaWdodHNWaWV3OmZ1bmN0aW9uIHModCl7bi5zZXR1cFZpZXcobyx0KX0scHVzaExpZ2h0OmZ1bmN0aW9uIGwodCl7by5wdXNoKHQpfSxwdXNoU2hhZG93OmZ1bmN0aW9uIGModCl7aS5wdXNoKHQpfX19ZnVuY3Rpb24geGN0KHQsZSl7bGV0IG49bmV3IFdlYWtNYXA7cmV0dXJue2dldDpmdW5jdGlvbiBvKGksYT0wKXtsZXQgcjtyZXR1cm4hMT09PW4uaGFzKGkpPyhyPW5ldyB2Y3QodCxlKSxuLnNldChpLFtdKSxuLmdldChpKS5wdXNoKHIpKTphPj1uLmdldChpKS5sZW5ndGg/KHI9bmV3IHZjdCh0LGUpLG4uZ2V0KGkpLnB1c2gocikpOnI9bi5nZXQoaSlbYV0scn0sZGlzcG9zZTpmdW5jdGlvbiBpKCl7bj1uZXcgV2Vha01hcH19fWZ1bmN0aW9uIE9jdCh0KXt4cnQuY2FsbCh0aGlzKSx0aGlzLnR5cGU9Ik1lc2hEZXB0aE1hdGVyaWFsIix0aGlzLmRlcHRoUGFja2luZz0zMjAwLHRoaXMuc2tpbm5pbmc9ITEsdGhpcy5tb3JwaFRhcmdldHM9ITEsdGhpcy5tYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLmZvZz0hMSx0aGlzLnNldFZhbHVlcyh0KX1mdW5jdGlvbiBQY3QodCl7eHJ0LmNhbGwodGhpcyksdGhpcy50eXBlPSJNZXNoRGlzdGFuY2VNYXRlcmlhbCIsdGhpcy5yZWZlcmVuY2VQb3NpdGlvbj1uZXcgJGl0LHRoaXMubmVhckRpc3RhbmNlPTEsdGhpcy5mYXJEaXN0YW5jZT0xZTMsdGhpcy5za2lubmluZz0hMSx0aGlzLm1vcnBoVGFyZ2V0cz0hMSx0aGlzLm1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLmZvZz0hMSx0aGlzLnNldFZhbHVlcyh0KX1mdW5jdGlvbiB3Y3QodCxlLG4pe2xldCBvPW5ldyBTc3Q7Y29uc3QgaT1uZXcgVWl0LGE9bmV3IFVpdCxyPW5ldyBLaXQscz1bXSxsPVtdLGM9e30sZD17MDoxLDE6MCwyOjJ9LHA9bmV3IHlzdCh7ZGVmaW5lczp7U0FNUExFX1JBVEU6Mi84LEhBTEZfU0FNUExFX1JBVEU6MS84fSx1bmlmb3Jtczp7c2hhZG93X3Bhc3M6e3ZhbHVlOm51bGx9LHJlc29sdXRpb246e3ZhbHVlOm5ldyBVaXR9LHJhZGl1czp7dmFsdWU6NH19LHZlcnRleFNoYWRlcjoidm9pZCBtYWluKCkge1xuXHRnbF9Qb3NpdGlvbiA9IHZlYzQoIHBvc2l0aW9uLCAxLjAgKTtcbn0iLGZyYWdtZW50U2hhZGVyOiJ1bmlmb3JtIHNhbXBsZXIyRCBzaGFkb3dfcGFzcztcbnVuaWZvcm0gdmVjMiByZXNvbHV0aW9uO1xudW5pZm9ybSBmbG9hdCByYWRpdXM7XG4jaW5jbHVkZSA8cGFja2luZz5cbnZvaWQgbWFpbigpIHtcblx0ZmxvYXQgbWVhbiA9IDAuMDtcblx0ZmxvYXQgc3F1YXJlZF9tZWFuID0gMC4wO1xuXHRmbG9hdCBkZXB0aCA9IHVucGFja1JHQkFUb0RlcHRoKCB0ZXh0dXJlMkQoIHNoYWRvd19wYXNzLCAoIGdsX0ZyYWdDb29yZC54eSApIC8gcmVzb2x1dGlvbiApICk7XG5cdGZvciAoIGZsb2F0IGkgPSAtMS4wOyBpIDwgMS4wIDsgaSArPSBTQU1QTEVfUkFURSkge1xuXHRcdCNpZmRlZiBIT1JJWk9OVEFMX1BBU1Ncblx0XHRcdHZlYzIgZGlzdHJpYnV0aW9uID0gdW5wYWNrUkdCQVRvMkhhbGYoIHRleHR1cmUyRCggc2hhZG93X3Bhc3MsICggZ2xfRnJhZ0Nvb3JkLnh5ICsgdmVjMiggaSwgMC4wICkgKiByYWRpdXMgKSAvIHJlc29sdXRpb24gKSApO1xuXHRcdFx0bWVhbiArPSBkaXN0cmlidXRpb24ueDtcblx0XHRcdHNxdWFyZWRfbWVhbiArPSBkaXN0cmlidXRpb24ueSAqIGRpc3RyaWJ1dGlvbi55ICsgZGlzdHJpYnV0aW9uLnggKiBkaXN0cmlidXRpb24ueDtcblx0XHQjZWxzZVxuXHRcdFx0ZmxvYXQgZGVwdGggPSB1bnBhY2tSR0JBVG9EZXB0aCggdGV4dHVyZTJEKCBzaGFkb3dfcGFzcywgKCBnbF9GcmFnQ29vcmQueHkgKyB2ZWMyKCAwLjAsIGkgKSAqIHJhZGl1cyApIC8gcmVzb2x1dGlvbiApICk7XG5cdFx0XHRtZWFuICs9IGRlcHRoO1xuXHRcdFx0c3F1YXJlZF9tZWFuICs9IGRlcHRoICogZGVwdGg7XG5cdFx0I2VuZGlmXG5cdH1cblx0bWVhbiA9IG1lYW4gKiBIQUxGX1NBTVBMRV9SQVRFO1xuXHRzcXVhcmVkX21lYW4gPSBzcXVhcmVkX21lYW4gKiBIQUxGX1NBTVBMRV9SQVRFO1xuXHRmbG9hdCBzdGRfZGV2ID0gc3FydCggc3F1YXJlZF9tZWFuIC0gbWVhbiAqIG1lYW4gKTtcblx0Z2xfRnJhZ0NvbG9yID0gcGFjazJIYWxmVG9SR0JBKCB2ZWMyKCBtZWFuLCBzdGRfZGV2ICkgKTtcbn0ifSksbT1wLmNsb25lKCk7bS5kZWZpbmVzLkhPUklaT05UQUxfUEFTUz0xO2NvbnN0IHU9bmV3IFpydDt1LnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBrcnQobmV3IEZsb2F0MzJBcnJheShbLTEsLTEsLjUsMywtMSwuNSwtMSwzLC41XSksMykpO2NvbnN0IGY9bmV3IG1zdCh1LHApLGc9dGhpcztmdW5jdGlvbiBoKG4sbyl7Y29uc3QgaT1lLnVwZGF0ZShmKTtwLnVuaWZvcm1zLnNoYWRvd19wYXNzLnZhbHVlPW4ubWFwLnRleHR1cmUscC51bmlmb3Jtcy5yZXNvbHV0aW9uLnZhbHVlPW4ubWFwU2l6ZSxwLnVuaWZvcm1zLnJhZGl1cy52YWx1ZT1uLnJhZGl1cyx0LnNldFJlbmRlclRhcmdldChuLm1hcFBhc3MpLHQuY2xlYXIoKSx0LnJlbmRlckJ1ZmZlckRpcmVjdChvLG51bGwsaSxwLGYsbnVsbCksbS51bmlmb3Jtcy5zaGFkb3dfcGFzcy52YWx1ZT1uLm1hcFBhc3MudGV4dHVyZSxtLnVuaWZvcm1zLnJlc29sdXRpb24udmFsdWU9bi5tYXBTaXplLG0udW5pZm9ybXMucmFkaXVzLnZhbHVlPW4ucmFkaXVzLHQuc2V0UmVuZGVyVGFyZ2V0KG4ubWFwKSx0LmNsZWFyKCksdC5yZW5kZXJCdWZmZXJEaXJlY3QobyxudWxsLGksbSxmLG51bGwpfWZ1bmN0aW9uIGIodCxlLG4pe2NvbnN0IG89dDw8MHxlPDwxfG48PDI7bGV0IGk9c1tvXTtyZXR1cm4gdm9pZCAwPT09aSYmKGk9bmV3IE9jdCh7ZGVwdGhQYWNraW5nOjMyMDEsbW9ycGhUYXJnZXRzOnQsc2tpbm5pbmc6ZX0pLHNbb109aSksaX1mdW5jdGlvbiB5KHQsZSxuKXtjb25zdCBvPXQ8PDB8ZTw8MXxuPDwyO2xldCBpPWxbb107cmV0dXJuIHZvaWQgMD09PWkmJihpPW5ldyBQY3Qoe21vcnBoVGFyZ2V0czp0LHNraW5uaW5nOmV9KSxsW29dPWkpLGl9ZnVuY3Rpb24gXyhlLG4sbyxpLGEscixzKXtsZXQgbD1udWxsLHA9YixtPWUuY3VzdG9tRGVwdGhNYXRlcmlhbDtpZighMD09PWkuaXNQb2ludExpZ2h0JiYocD15LG09ZS5jdXN0b21EaXN0YW5jZU1hdGVyaWFsKSx2b2lkIDA9PT1tKXtsZXQgdD0hMTshMD09PW8ubW9ycGhUYXJnZXRzJiYodD1uLm1vcnBoQXR0cmlidXRlcyYmbi5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24mJm4ubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLmxlbmd0aD4wKTtsZXQgaT0hMTshMD09PWUuaXNTa2lubmVkTWVzaCYmKCEwPT09by5za2lubmluZz9pPSEwOmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xTaGFkb3dNYXA6IFRIUkVFLlNraW5uZWRNZXNoIHdpdGggbWF0ZXJpYWwuc2tpbm5pbmcgc2V0IHRvIGZhbHNlOiIsZSkpLGw9cCh0LGksITA9PT1lLmlzSW5zdGFuY2VkTWVzaCl9ZWxzZSBsPW07aWYodC5sb2NhbENsaXBwaW5nRW5hYmxlZCYmITA9PT1vLmNsaXBTaGFkb3dzJiYwIT09by5jbGlwcGluZ1BsYW5lcy5sZW5ndGgpe2NvbnN0IHQ9bC51dWlkLGU9by51dWlkO2xldCBuPWNbdF07dm9pZCAwPT09biYmKG49e30sY1t0XT1uKTtsZXQgaT1uW2VdO3ZvaWQgMD09PWkmJihpPWwuY2xvbmUoKSxuW2VdPWkpLGw9aX1yZXR1cm4gbC52aXNpYmxlPW8udmlzaWJsZSxsLndpcmVmcmFtZT1vLndpcmVmcmFtZSxsLnNpZGU9Mz09PXM/bnVsbCE9PW8uc2hhZG93U2lkZT9vLnNoYWRvd1NpZGU6by5zaWRlOm51bGwhPT1vLnNoYWRvd1NpZGU/by5zaGFkb3dTaWRlOmRbby5zaWRlXSxsLmNsaXBTaGFkb3dzPW8uY2xpcFNoYWRvd3MsbC5jbGlwcGluZ1BsYW5lcz1vLmNsaXBwaW5nUGxhbmVzLGwuY2xpcEludGVyc2VjdGlvbj1vLmNsaXBJbnRlcnNlY3Rpb24sbC53aXJlZnJhbWVMaW5ld2lkdGg9by53aXJlZnJhbWVMaW5ld2lkdGgsbC5saW5ld2lkdGg9by5saW5ld2lkdGgsITA9PT1pLmlzUG9pbnRMaWdodCYmITA9PT1sLmlzTWVzaERpc3RhbmNlTWF0ZXJpYWwmJihsLnJlZmVyZW5jZVBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihpLm1hdHJpeFdvcmxkKSxsLm5lYXJEaXN0YW5jZT1hLGwuZmFyRGlzdGFuY2U9ciksbH1mdW5jdGlvbiBDKG4saSxhLHIscyl7aWYoITE9PT1uLnZpc2libGUpcmV0dXJuO2lmKG4ubGF5ZXJzLnRlc3QoaS5sYXllcnMpJiYobi5pc01lc2h8fG4uaXNMaW5lfHxuLmlzUG9pbnRzKSYmKG4uY2FzdFNoYWRvd3x8bi5yZWNlaXZlU2hhZG93JiYzPT09cykmJighbi5mcnVzdHVtQ3VsbGVkfHxvLmludGVyc2VjdHNPYmplY3QobikpKXtuLm1vZGVsVmlld01hdHJpeC5tdWx0aXBseU1hdHJpY2VzKGEubWF0cml4V29ybGRJbnZlcnNlLG4ubWF0cml4V29ybGQpO2NvbnN0IG89ZS51cGRhdGUobiksaT1uLm1hdGVyaWFsO2lmKEFycmF5LmlzQXJyYXkoaSkpe2NvbnN0IGU9by5ncm91cHM7Zm9yKGxldCBsPTAsYz1lLmxlbmd0aDtsPGM7bCsrKXtjb25zdCBjPWVbbF0sZD1pW2MubWF0ZXJpYWxJbmRleF07aWYoZCYmZC52aXNpYmxlKXtjb25zdCBlPV8obixvLGQscixhLm5lYXIsYS5mYXIscyk7dC5yZW5kZXJCdWZmZXJEaXJlY3QoYSxudWxsLG8sZSxuLGMpfX19ZWxzZSBpZihpLnZpc2libGUpe2NvbnN0IGU9XyhuLG8saSxyLGEubmVhcixhLmZhcixzKTt0LnJlbmRlckJ1ZmZlckRpcmVjdChhLG51bGwsbyxlLG4sbnVsbCl9fWNvbnN0IGw9bi5jaGlsZHJlbjtmb3IobGV0IHQ9MCxlPWwubGVuZ3RoO3Q8ZTt0KyspQyhsW3RdLGksYSxyLHMpfXRoaXMuZW5hYmxlZD0hMSx0aGlzLmF1dG9VcGRhdGU9ITAsdGhpcy5uZWVkc1VwZGF0ZT0hMSx0aGlzLnR5cGU9MSx0aGlzLnJlbmRlcj1mdW5jdGlvbihlLHMsbCl7aWYoITE9PT1nLmVuYWJsZWQpcmV0dXJuO2lmKCExPT09Zy5hdXRvVXBkYXRlJiYhMT09PWcubmVlZHNVcGRhdGUpcmV0dXJuO2lmKDA9PT1lLmxlbmd0aClyZXR1cm47Y29uc3QgYz10LmdldFJlbmRlclRhcmdldCgpLGQ9dC5nZXRBY3RpdmVDdWJlRmFjZSgpLHA9dC5nZXRBY3RpdmVNaXBtYXBMZXZlbCgpLG09dC5zdGF0ZTttLnNldEJsZW5kaW5nKDApLG0uYnVmZmVycy5jb2xvci5zZXRDbGVhcigxLDEsMSwxKSxtLmJ1ZmZlcnMuZGVwdGguc2V0VGVzdCghMCksbS5zZXRTY2lzc29yVGVzdCghMSk7Zm9yKGxldCBjPTAsZD1lLmxlbmd0aDtjPGQ7YysrKXtjb25zdCBkPWVbY10scD1kLnNoYWRvdztpZih2b2lkIDA9PT1wKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMU2hhZG93TWFwOiIsZCwiaGFzIG5vIHNoYWRvdy4iKTtjb250aW51ZX1pZighMT09PXAuYXV0b1VwZGF0ZSYmITE9PT1wLm5lZWRzVXBkYXRlKWNvbnRpbnVlO2kuY29weShwLm1hcFNpemUpO2NvbnN0IHU9cC5nZXRGcmFtZUV4dGVudHMoKTtpZihpLm11bHRpcGx5KHUpLGEuY29weShwLm1hcFNpemUpLChpLng+bnx8aS55Pm4pJiYoaS54Pm4mJihhLng9TWF0aC5mbG9vcihuL3UueCksaS54PWEueCp1LngscC5tYXBTaXplLng9YS54KSxpLnk+biYmKGEueT1NYXRoLmZsb29yKG4vdS55KSxpLnk9YS55KnUueSxwLm1hcFNpemUueT1hLnkpKSxudWxsPT09cC5tYXAmJiFwLmlzUG9pbnRMaWdodFNoYWRvdyYmMz09PXRoaXMudHlwZSl7Y29uc3QgdD17bWluRmlsdGVyOmJpdCxtYWdGaWx0ZXI6Yml0LGZvcm1hdDpQaXR9O3AubWFwPW5ldyBKaXQoaS54LGkueSx0KSxwLm1hcC50ZXh0dXJlLm5hbWU9ZC5uYW1lKyIuc2hhZG93TWFwIixwLm1hcFBhc3M9bmV3IEppdChpLngsaS55LHQpLHAuY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1udWxsPT09cC5tYXAmJihwLm1hcD1uZXcgSml0KGkueCxpLnkse21pbkZpbHRlcjpoaXQsbWFnRmlsdGVyOmhpdCxmb3JtYXQ6UGl0fSkscC5tYXAudGV4dHVyZS5uYW1lPWQubmFtZSsiLnNoYWRvd01hcCIscC5jYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpKSx0LnNldFJlbmRlclRhcmdldChwLm1hcCksdC5jbGVhcigpO2NvbnN0IGY9cC5nZXRWaWV3cG9ydENvdW50KCk7Zm9yKGxldCB0PTA7dDxmO3QrKyl7Y29uc3QgZT1wLmdldFZpZXdwb3J0KHQpO3Iuc2V0KGEueCplLngsYS55KmUueSxhLngqZS56LGEueSplLncpLG0udmlld3BvcnQocikscC51cGRhdGVNYXRyaWNlcyhkLHQpLG89cC5nZXRGcnVzdHVtKCksQyhzLGwscC5jYW1lcmEsZCx0aGlzLnR5cGUpfXAuaXNQb2ludExpZ2h0U2hhZG93fHwzIT09dGhpcy50eXBlfHxoKHAsbCkscC5uZWVkc1VwZGF0ZT0hMX1nLm5lZWRzVXBkYXRlPSExLHQuc2V0UmVuZGVyVGFyZ2V0KGMsZCxwKX19ZnVuY3Rpb24ga2N0KHQsZSxuKXtjb25zdCBvPW4uaXNXZWJHTDIsaT1uZXcoZnVuY3Rpb24gYSgpe2xldCBlPSExO2NvbnN0IG49bmV3IEtpdDtsZXQgbz1udWxsO2NvbnN0IGk9bmV3IEtpdCgwLDAsMCwwKTtyZXR1cm57c2V0TWFzazpmdW5jdGlvbihuKXtvPT09bnx8ZXx8KHQuY29sb3JNYXNrKG4sbixuLG4pLG89bil9LHNldExvY2tlZDpmdW5jdGlvbih0KXtlPXR9LHNldENsZWFyOmZ1bmN0aW9uKGUsbyxhLHIscyl7ITA9PT1zJiYoZSo9cixvKj1yLGEqPXIpLG4uc2V0KGUsbyxhLHIpLCExPT09aS5lcXVhbHMobikmJih0LmNsZWFyQ29sb3IoZSxvLGEsciksaS5jb3B5KG4pKX0scmVzZXQ6ZnVuY3Rpb24oKXtlPSExLG89bnVsbCxpLnNldCgtMSwwLDAsMCl9fX0pLHI9bmV3KGZ1bmN0aW9uIHMoKXtsZXQgZT0hMSxuPW51bGwsbz1udWxsLGk9bnVsbDtyZXR1cm57c2V0VGVzdDpmdW5jdGlvbih0KXt0P3ooMjkyOSk6SCgyOTI5KX0sc2V0TWFzazpmdW5jdGlvbihvKXtuPT09b3x8ZXx8KHQuZGVwdGhNYXNrKG8pLG49byl9LHNldEZ1bmM6ZnVuY3Rpb24oZSl7aWYobyE9PWUpe2lmKGUpc3dpdGNoKGUpe2Nhc2UgMDp0LmRlcHRoRnVuYyg1MTIpO2JyZWFrO2Nhc2UgMTp0LmRlcHRoRnVuYyg1MTkpO2JyZWFrO2Nhc2UgMjp0LmRlcHRoRnVuYyg1MTMpO2JyZWFrO2Nhc2UgMzp0LmRlcHRoRnVuYyg1MTUpO2JyZWFrO2Nhc2UgNDp0LmRlcHRoRnVuYyg1MTQpO2JyZWFrO2Nhc2UgNTp0LmRlcHRoRnVuYyg1MTgpO2JyZWFrO2Nhc2UgNjp0LmRlcHRoRnVuYyg1MTYpO2JyZWFrO2Nhc2UgNzp0LmRlcHRoRnVuYyg1MTcpO2JyZWFrO2RlZmF1bHQ6dC5kZXB0aEZ1bmMoNTE1KX1lbHNlIHQuZGVwdGhGdW5jKDUxNSk7bz1lfX0sc2V0TG9ja2VkOmZ1bmN0aW9uKHQpe2U9dH0sc2V0Q2xlYXI6ZnVuY3Rpb24oZSl7aSE9PWUmJih0LmNsZWFyRGVwdGgoZSksaT1lKX0scmVzZXQ6ZnVuY3Rpb24oKXtlPSExLG49bnVsbCxvPW51bGwsaT1udWxsfX19KSxsPW5ldyhmdW5jdGlvbiBjKCl7bGV0IGU9ITEsbj1udWxsLG89bnVsbCxpPW51bGwsYT1udWxsLHI9bnVsbCxzPW51bGwsbD1udWxsLGM9bnVsbDtyZXR1cm57c2V0VGVzdDpmdW5jdGlvbih0KXtlfHwodD96KDI5NjApOkgoMjk2MCkpfSxzZXRNYXNrOmZ1bmN0aW9uKG8pe249PT1vfHxlfHwodC5zdGVuY2lsTWFzayhvKSxuPW8pfSxzZXRGdW5jOmZ1bmN0aW9uKGUsbixyKXtvPT09ZSYmaT09PW4mJmE9PT1yfHwodC5zdGVuY2lsRnVuYyhlLG4sciksbz1lLGk9bixhPXIpfSxzZXRPcDpmdW5jdGlvbihlLG4sbyl7cj09PWUmJnM9PT1uJiZsPT09b3x8KHQuc3RlbmNpbE9wKGUsbixvKSxyPWUscz1uLGw9byl9LHNldExvY2tlZDpmdW5jdGlvbih0KXtlPXR9LHNldENsZWFyOmZ1bmN0aW9uKGUpe2MhPT1lJiYodC5jbGVhclN0ZW5jaWwoZSksYz1lKX0scmVzZXQ6ZnVuY3Rpb24oKXtlPSExLG49bnVsbCxvPW51bGwsaT1udWxsLGE9bnVsbCxyPW51bGwscz1udWxsLGw9bnVsbCxjPW51bGx9fX0pO2xldCBkPXt9LHA9bnVsbCxtPW51bGwsdT1udWxsLGY9bnVsbCxnPW51bGwsaD1udWxsLGI9bnVsbCx5PW51bGwsXz1udWxsLEM9ITEsTT1udWxsLHY9bnVsbCx4PW51bGwsTz1udWxsLFA9bnVsbDtjb25zdCB3PXQuZ2V0UGFyYW1ldGVyKDM1NjYxKTtsZXQgaz0hMSxTPTA7Y29uc3QgRD10LmdldFBhcmFtZXRlcig3OTM4KTstMSE9PUQuaW5kZXhPZigiV2ViR0wiKT8oUz1wYXJzZUZsb2F0KC9eV2ViR0wgKFxkKS8uZXhlYyhEKVsxXSksaz1TPj0xKTotMSE9PUQuaW5kZXhPZigiT3BlbkdMIEVTIikmJihTPXBhcnNlRmxvYXQoL15PcGVuR0wgRVMgKFxkKS8uZXhlYyhEKVsxXSksaz1TPj0yKTtsZXQgRT1udWxsLEE9e307Y29uc3QgUj1uZXcgS2l0LFQ9bmV3IEtpdDtmdW5jdGlvbiBOKGUsbixvKXtjb25zdCBpPW5ldyBVaW50OEFycmF5KDQpLGE9dC5jcmVhdGVUZXh0dXJlKCk7dC5iaW5kVGV4dHVyZShlLGEpLHQudGV4UGFyYW1ldGVyaShlLDEwMjQxLDk3MjgpLHQudGV4UGFyYW1ldGVyaShlLDEwMjQwLDk3MjgpO2ZvcihsZXQgZT0wO2U8bztlKyspdC50ZXhJbWFnZTJEKG4rZSwwLDY0MDgsMSwxLDAsNjQwOCw1MTIxLGkpO3JldHVybiBhfWNvbnN0IEk9e307ZnVuY3Rpb24geihlKXshMCE9PWRbZV0mJih0LmVuYWJsZShlKSxkW2VdPSEwKX1mdW5jdGlvbiBIKGUpeyExIT09ZFtlXSYmKHQuZGlzYWJsZShlKSxkW2VdPSExKX1JWzM1NTNdPU4oMzU1MywzNTUzLDEpLElbMzQwNjddPU4oMzQwNjcsMzQwNjksNiksaS5zZXRDbGVhcigwLDAsMCwxKSxyLnNldENsZWFyKDEpLGwuc2V0Q2xlYXIoMCkseigyOTI5KSxyLnNldEZ1bmMoMyksVighMSksaigxKSx6KDI4ODQpLEIoMCk7Y29uc3QgRj17W21pdF06MzI3NzQsMTAxOjMyNzc4LDEwMjozMjc3OX07aWYobylGWzEwM109MzI3NzUsRlsxMDRdPTMyNzc2O2Vsc2V7Y29uc3QgdD1lLmdldCgiRVhUX2JsZW5kX21pbm1heCIpO251bGwhPT10JiYoRlsxMDNdPXQuTUlOX0VYVCxGWzEwNF09dC5NQVhfRVhUKX1jb25zdCBMPXsyMDA6MCwyMDE6MSwyMDI6NzY4LDIwNDo3NzAsMjEwOjc3NiwyMDg6Nzc0LDIwNjo3NzIsMjAzOjc2OSwyMDU6NzcxLDIwOTo3NzUsMjA3Ojc3M307ZnVuY3Rpb24gQihlLG4sbyxpLGEscixzLGwpe2lmKDAhPT1lKXtpZihtfHwoeigzMDQyKSxtPSEwKSw1PT09ZSlhPWF8fG4scj1yfHxvLHM9c3x8aSxuPT09ZiYmYT09PWJ8fCh0LmJsZW5kRXF1YXRpb25TZXBhcmF0ZShGW25dLEZbYV0pLGY9bixiPWEpLG89PT1nJiZpPT09aCYmcj09PXkmJnM9PT1ffHwodC5ibGVuZEZ1bmNTZXBhcmF0ZShMW29dLExbaV0sTFtyXSxMW3NdKSxnPW8saD1pLHk9cixfPXMpLHU9ZSxDPW51bGw7ZWxzZSBpZihlIT09dXx8bCE9PUMpe2lmKGY9PT1taXQmJmI9PT1taXR8fCh0LmJsZW5kRXF1YXRpb24oMzI3NzQpLGY9bWl0LGI9bWl0KSxsKXN3aXRjaChlKXtjYXNlIDE6dC5ibGVuZEZ1bmNTZXBhcmF0ZSgxLDc3MSwxLDc3MSk7YnJlYWs7Y2FzZSAyOnQuYmxlbmRGdW5jKDEsMSk7YnJlYWs7Y2FzZSAzOnQuYmxlbmRGdW5jU2VwYXJhdGUoMCwwLDc2OSw3NzEpO2JyZWFrO2Nhc2UgNDp0LmJsZW5kRnVuY1NlcGFyYXRlKDAsNzY4LDAsNzcwKTticmVhaztkZWZhdWx0OmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IEludmFsaWQgYmxlbmRpbmc6ICIsZSl9ZWxzZSBzd2l0Y2goZSl7Y2FzZSAxOnQuYmxlbmRGdW5jU2VwYXJhdGUoNzcwLDc3MSwxLDc3MSk7YnJlYWs7Y2FzZSAyOnQuYmxlbmRGdW5jKDc3MCwxKTticmVhaztjYXNlIDM6dC5ibGVuZEZ1bmMoMCw3NjkpO2JyZWFrO2Nhc2UgNDp0LmJsZW5kRnVuYygwLDc2OCk7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiBJbnZhbGlkIGJsZW5kaW5nOiAiLGUpfWc9bnVsbCxoPW51bGwseT1udWxsLF89bnVsbCx1PWUsQz1sfX1lbHNlIG0mJihIKDMwNDIpLG09ITEpfWZ1bmN0aW9uIFYoZSl7TSE9PWUmJih0LmZyb250RmFjZShlPzIzMDQ6MjMwNSksTT1lKX1mdW5jdGlvbiBqKGUpezAhPT1lPyh6KDI4ODQpLGUhPT12JiZ0LmN1bGxGYWNlKDE9PT1lPzEwMjk6Mj09PWU/MTAyODoxMDMyKSk6SCgyODg0KSx2PWV9ZnVuY3Rpb24gVShlLG4sbyl7ZT8oeigzMjgyMyksTz09PW4mJlA9PT1vfHwodC5wb2x5Z29uT2Zmc2V0KG4sbyksTz1uLFA9bykpOkgoMzI4MjMpfWZ1bmN0aW9uIFcoZSl7dm9pZCAwPT09ZSYmKGU9MzM5ODQrdy0xKSxFIT09ZSYmKHQuYWN0aXZlVGV4dHVyZShlKSxFPWUpfXJldHVybntidWZmZXJzOntjb2xvcjppLGRlcHRoOnIsc3RlbmNpbDpsfSxlbmFibGU6eixkaXNhYmxlOkgsdXNlUHJvZ3JhbTpmdW5jdGlvbiBHKGUpe3JldHVybiBwIT09ZSYmKHQudXNlUHJvZ3JhbShlKSxwPWUsITApfSxzZXRCbGVuZGluZzpCLHNldE1hdGVyaWFsOmZ1bmN0aW9uIFkodCxlKXsyPT09dC5zaWRlP0goMjg4NCk6eigyODg0KTtsZXQgbj0xPT09dC5zaWRlO2UmJihuPSFuKSxWKG4pLDE9PT10LmJsZW5kaW5nJiYhMT09PXQudHJhbnNwYXJlbnQ/QigwKTpCKHQuYmxlbmRpbmcsdC5ibGVuZEVxdWF0aW9uLHQuYmxlbmRTcmMsdC5ibGVuZERzdCx0LmJsZW5kRXF1YXRpb25BbHBoYSx0LmJsZW5kU3JjQWxwaGEsdC5ibGVuZERzdEFscGhhLHQucHJlbXVsdGlwbGllZEFscGhhKSxyLnNldEZ1bmModC5kZXB0aEZ1bmMpLHIuc2V0VGVzdCh0LmRlcHRoVGVzdCksci5zZXRNYXNrKHQuZGVwdGhXcml0ZSksaS5zZXRNYXNrKHQuY29sb3JXcml0ZSk7Y29uc3Qgbz10LnN0ZW5jaWxXcml0ZTtsLnNldFRlc3QobyksbyYmKGwuc2V0TWFzayh0LnN0ZW5jaWxXcml0ZU1hc2spLGwuc2V0RnVuYyh0LnN0ZW5jaWxGdW5jLHQuc3RlbmNpbFJlZix0LnN0ZW5jaWxGdW5jTWFzayksbC5zZXRPcCh0LnN0ZW5jaWxGYWlsLHQuc3RlbmNpbFpGYWlsLHQuc3RlbmNpbFpQYXNzKSksVSh0LnBvbHlnb25PZmZzZXQsdC5wb2x5Z29uT2Zmc2V0RmFjdG9yLHQucG9seWdvbk9mZnNldFVuaXRzKX0sc2V0RmxpcFNpZGVkOlYsc2V0Q3VsbEZhY2U6aixzZXRMaW5lV2lkdGg6ZnVuY3Rpb24gcShlKXtlIT09eCYmKGsmJnQubGluZVdpZHRoKGUpLHg9ZSl9LHNldFBvbHlnb25PZmZzZXQ6VSxzZXRTY2lzc29yVGVzdDpmdW5jdGlvbiBaKHQpe3Q/eigzMDg5KTpIKDMwODkpfSxhY3RpdmVUZXh0dXJlOlcsYmluZFRleHR1cmU6ZnVuY3Rpb24gWChlLG4pe251bGw9PT1FJiZXKCk7bGV0IG89QVtFXTt2b2lkIDA9PT1vJiYobz17dHlwZTp2b2lkIDAsdGV4dHVyZTp2b2lkIDB9LEFbRV09byksby50eXBlPT09ZSYmby50ZXh0dXJlPT09bnx8KHQuYmluZFRleHR1cmUoZSxufHxJW2VdKSxvLnR5cGU9ZSxvLnRleHR1cmU9bil9LHVuYmluZFRleHR1cmU6ZnVuY3Rpb24gSygpe2NvbnN0IGU9QVtFXTt2b2lkIDAhPT1lJiZ2b2lkIDAhPT1lLnR5cGUmJih0LmJpbmRUZXh0dXJlKGUudHlwZSxudWxsKSxlLnR5cGU9dm9pZCAwLGUudGV4dHVyZT12b2lkIDApfSxjb21wcmVzc2VkVGV4SW1hZ2UyRDpmdW5jdGlvbiBKKCl7dHJ5e3QuY29tcHJlc3NlZFRleEltYWdlMkQuYXBwbHkodCxhcmd1bWVudHMpfWNhdGNoKHQpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6Iix0KX19LHRleEltYWdlMkQ6ZnVuY3Rpb24gUSgpe3RyeXt0LnRleEltYWdlMkQuYXBwbHkodCxhcmd1bWVudHMpfWNhdGNoKHQpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6Iix0KX19LHRleEltYWdlM0Q6ZnVuY3Rpb24gJCgpe3RyeXt0LnRleEltYWdlM0QuYXBwbHkodCxhcmd1bWVudHMpfWNhdGNoKHQpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6Iix0KX19LHNjaXNzb3I6ZnVuY3Rpb24gdHQoZSl7ITE9PT1SLmVxdWFscyhlKSYmKHQuc2Npc3NvcihlLngsZS55LGUueixlLncpLFIuY29weShlKSl9LHZpZXdwb3J0OmZ1bmN0aW9uIGV0KGUpeyExPT09VC5lcXVhbHMoZSkmJih0LnZpZXdwb3J0KGUueCxlLnksZS56LGUudyksVC5jb3B5KGUpKX0scmVzZXQ6ZnVuY3Rpb24gbnQoKXtkPXt9LEU9bnVsbCxBPXt9LHA9bnVsbCxtPW51bGwsdT1udWxsLGY9bnVsbCxnPW51bGwsaD1udWxsLGI9bnVsbCx5PW51bGwsXz1udWxsLEM9ITEsTT1udWxsLHY9bnVsbCx4PW51bGwsTz1udWxsLFA9bnVsbCxpLnJlc2V0KCksci5yZXNldCgpLGwucmVzZXQoKX19fWZ1bmN0aW9uIFNjdCh0LGUsbixvLGksYSxyKXtjb25zdCBzPWkuaXNXZWJHTDIsbD1pLm1heFRleHR1cmVzLGM9aS5tYXhDdWJlbWFwU2l6ZSxkPWkubWF4VGV4dHVyZVNpemUscD1pLm1heFNhbXBsZXMsbT1uZXcgV2Vha01hcDtsZXQgdSxmPSExO3RyeXtmPSJ1bmRlZmluZWQiIT10eXBlb2YgT2Zmc2NyZWVuQ2FudmFzJiZudWxsIT09bmV3IE9mZnNjcmVlbkNhbnZhcygxLDEpLmdldENvbnRleHQoIjJkIil9Y2F0Y2godCl7fWZ1bmN0aW9uIGcodCxlKXtyZXR1cm4gZj9uZXcgT2Zmc2NyZWVuQ2FudmFzKHQsZSk6ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiY2FudmFzIil9ZnVuY3Rpb24gaCh0LGUsbixvKXtsZXQgaT0xO2lmKCh0LndpZHRoPm98fHQuaGVpZ2h0Pm8pJiYoaT1vL01hdGgubWF4KHQud2lkdGgsdC5oZWlnaHQpKSxpPDF8fCEwPT09ZSl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBIVE1MSW1hZ2VFbGVtZW50JiZ0IGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudHx8InVuZGVmaW5lZCIhPXR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudCYmdCBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50fHwidW5kZWZpbmVkIiE9dHlwZW9mIEltYWdlQml0bWFwJiZ0IGluc3RhbmNlb2YgSW1hZ2VCaXRtYXApe2NvbnN0IG89ZT9qaXQuZmxvb3JQb3dlck9mVHdvOk1hdGguZmxvb3IsYT1vKGkqdC53aWR0aCkscj1vKGkqdC5oZWlnaHQpO3ZvaWQgMD09PXUmJih1PWcoYSxyKSk7Y29uc3Qgcz1uP2coYSxyKTp1O3JldHVybiBzLndpZHRoPWEscy5oZWlnaHQ9cixzLmdldENvbnRleHQoIjJkIikuZHJhd0ltYWdlKHQsMCwwLGEsciksY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIGhhcyBiZWVuIHJlc2l6ZWQgZnJvbSAoIit0LndpZHRoKyJ4Iit0LmhlaWdodCsiKSB0byAoIithKyJ4IityKyIpLiIpLHN9cmV0dXJuImRhdGEiaW4gdCYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBJbWFnZSBpbiBEYXRhVGV4dHVyZSBpcyB0b28gYmlnICgiK3Qud2lkdGgrIngiK3QuaGVpZ2h0KyIpLiIpLHR9cmV0dXJuIHR9ZnVuY3Rpb24gYih0KXtyZXR1cm4gaml0LmlzUG93ZXJPZlR3byh0LndpZHRoKSYmaml0LmlzUG93ZXJPZlR3byh0LmhlaWdodCl9ZnVuY3Rpb24geSh0LGUpe3JldHVybiB0LmdlbmVyYXRlTWlwbWFwcyYmZSYmdC5taW5GaWx0ZXIhPT1oaXQmJnQubWluRmlsdGVyIT09Yml0fWZ1bmN0aW9uIF8oZSxuLGksYSl7dC5nZW5lcmF0ZU1pcG1hcChlKSxvLmdldChuKS5fX21heE1pcExldmVsPU1hdGgubG9nKE1hdGgubWF4KGksYSkpKk1hdGguTE9HMkV9ZnVuY3Rpb24gQyhuLG8saSl7aWYoITE9PT1zKXJldHVybiBvO2lmKG51bGwhPT1uKXtpZih2b2lkIDAhPT10W25dKXJldHVybiB0W25dO2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogQXR0ZW1wdCB0byB1c2Ugbm9uLWV4aXN0aW5nIFdlYkdMIGludGVybmFsIGZvcm1hdCAnIituKyInIil9bGV0IGE9bztyZXR1cm4gNjQwMz09PW8mJig1MTI2PT09aSYmKGE9MzMzMjYpLDUxMzE9PT1pJiYoYT0zMzMyNSksNTEyMT09PWkmJihhPTMzMzIxKSksNjQwNz09PW8mJig1MTI2PT09aSYmKGE9MzQ4MzcpLDUxMzE9PT1pJiYoYT0zNDg0MyksNTEyMT09PWkmJihhPTMyODQ5KSksNjQwOD09PW8mJig1MTI2PT09aSYmKGE9MzQ4MzYpLDUxMzE9PT1pJiYoYT0zNDg0MiksNTEyMT09PWkmJihhPTMyODU2KSksMzMzMjUhPT1hJiYzMzMyNiE9PWEmJjM0ODQyIT09YSYmMzQ4MzYhPT1hfHxlLmdldCgiRVhUX2NvbG9yX2J1ZmZlcl9mbG9hdCIpLGF9ZnVuY3Rpb24gTSh0KXtyZXR1cm4gdD09PWhpdHx8MTAwND09PXR8fDEwMDU9PT10Pzk3Mjg6OTcyOX1mdW5jdGlvbiB2KGUpe2NvbnN0IG49ZS50YXJnZXQ7bi5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIix2KSwoZnVuY3Rpb24gaShlKXtjb25zdCBuPW8uZ2V0KGUpO3ZvaWQgMCE9PW4uX193ZWJnbEluaXQmJih0LmRlbGV0ZVRleHR1cmUobi5fX3dlYmdsVGV4dHVyZSksby5yZW1vdmUoZSkpfSkobiksbi5pc1ZpZGVvVGV4dHVyZSYmbS5kZWxldGUobiksci5tZW1vcnkudGV4dHVyZXMtLX1mdW5jdGlvbiB4KGUpe2NvbnN0IG49ZS50YXJnZXQ7bi5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIix4KSwoZnVuY3Rpb24gaShlKXtjb25zdCBuPW8uZ2V0KGUpLGk9by5nZXQoZS50ZXh0dXJlKTtpZihlKXtpZih2b2lkIDAhPT1pLl9fd2ViZ2xUZXh0dXJlJiZ0LmRlbGV0ZVRleHR1cmUoaS5fX3dlYmdsVGV4dHVyZSksZS5kZXB0aFRleHR1cmUmJmUuZGVwdGhUZXh0dXJlLmRpc3Bvc2UoKSxlLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0KWZvcihsZXQgZT0wO2U8NjtlKyspdC5kZWxldGVGcmFtZWJ1ZmZlcihuLl9fd2ViZ2xGcmFtZWJ1ZmZlcltlXSksbi5fX3dlYmdsRGVwdGhidWZmZXImJnQuZGVsZXRlUmVuZGVyYnVmZmVyKG4uX193ZWJnbERlcHRoYnVmZmVyW2VdKTtlbHNlIHQuZGVsZXRlRnJhbWVidWZmZXIobi5fX3dlYmdsRnJhbWVidWZmZXIpLG4uX193ZWJnbERlcHRoYnVmZmVyJiZ0LmRlbGV0ZVJlbmRlcmJ1ZmZlcihuLl9fd2ViZ2xEZXB0aGJ1ZmZlciksbi5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXImJnQuZGVsZXRlRnJhbWVidWZmZXIobi5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXIpLG4uX193ZWJnbENvbG9yUmVuZGVyYnVmZmVyJiZ0LmRlbGV0ZVJlbmRlcmJ1ZmZlcihuLl9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlciksbi5fX3dlYmdsRGVwdGhSZW5kZXJidWZmZXImJnQuZGVsZXRlUmVuZGVyYnVmZmVyKG4uX193ZWJnbERlcHRoUmVuZGVyYnVmZmVyKTtvLnJlbW92ZShlLnRleHR1cmUpLG8ucmVtb3ZlKGUpfX0pKG4pLHIubWVtb3J5LnRleHR1cmVzLS19bGV0IE89MDtmdW5jdGlvbiBQKHQsZSl7Y29uc3QgaT1vLmdldCh0KTtpZih0LmlzVmlkZW9UZXh0dXJlJiYoZnVuY3Rpb24gYSh0KXtjb25zdCBlPXIucmVuZGVyLmZyYW1lO20uZ2V0KHQpIT09ZSYmKG0uc2V0KHQsZSksdC51cGRhdGUoKSl9KSh0KSx0LnZlcnNpb24+MCYmaS5fX3ZlcnNpb24hPT10LnZlcnNpb24pe2NvbnN0IG49dC5pbWFnZTtpZih2b2lkIDA9PT1uKWNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVGV4dHVyZSBtYXJrZWQgZm9yIHVwZGF0ZSBidXQgaW1hZ2UgaXMgdW5kZWZpbmVkIik7ZWxzZXtpZighMSE9PW4uY29tcGxldGUpcmV0dXJuIHZvaWQgQShpLHQsZSk7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIG1hcmtlZCBmb3IgdXBkYXRlIGJ1dCBpbWFnZSBpcyBpbmNvbXBsZXRlIil9fW4uYWN0aXZlVGV4dHVyZSgzMzk4NCtlKSxuLmJpbmRUZXh0dXJlKDM1NTMsaS5fX3dlYmdsVGV4dHVyZSl9ZnVuY3Rpb24gdyhlLGkpe2NvbnN0IHI9by5nZXQoZSk7ZS52ZXJzaW9uPjAmJnIuX192ZXJzaW9uIT09ZS52ZXJzaW9uPyhmdW5jdGlvbiBsKGUsbyxpKXtpZig2IT09by5pbWFnZS5sZW5ndGgpcmV0dXJuO0UoZSxvKSxuLmFjdGl2ZVRleHR1cmUoMzM5ODQraSksbi5iaW5kVGV4dHVyZSgzNDA2NyxlLl9fd2ViZ2xUZXh0dXJlKSx0LnBpeGVsU3RvcmVpKDM3NDQwLG8uZmxpcFkpLHQucGl4ZWxTdG9yZWkoMzc0NDEsby5wcmVtdWx0aXBseUFscGhhKSx0LnBpeGVsU3RvcmVpKDMzMTcsby51bnBhY2tBbGlnbm1lbnQpO2NvbnN0IHI9byYmKG8uaXNDb21wcmVzc2VkVGV4dHVyZXx8by5pbWFnZVswXS5pc0NvbXByZXNzZWRUZXh0dXJlKSxsPW8uaW1hZ2VbMF0mJm8uaW1hZ2VbMF0uaXNEYXRhVGV4dHVyZSxkPVtdO2ZvcihsZXQgdD0wO3Q8Njt0KyspZFt0XT1yfHxsP2w/by5pbWFnZVt0XS5pbWFnZTpvLmltYWdlW3RdOmgoby5pbWFnZVt0XSwhMSwhMCxjKTtjb25zdCBwPWRbMF0sbT1iKHApfHxzLHU9YS5jb252ZXJ0KG8uZm9ybWF0KSxmPWEuY29udmVydChvLnR5cGUpLGc9QyhvLmludGVybmFsRm9ybWF0LHUsZik7bGV0IE07aWYoRCgzNDA2NyxvLG0pLHIpe2ZvcihsZXQgdD0wO3Q8Njt0Kyspe009ZFt0XS5taXBtYXBzO2ZvcihsZXQgZT0wO2U8TS5sZW5ndGg7ZSsrKXtjb25zdCBpPU1bZV07by5mb3JtYXQhPT1QaXQmJm8uZm9ybWF0IT09T2l0P251bGwhPT11P24uY29tcHJlc3NlZFRleEltYWdlMkQoMzQwNjkrdCxlLGcsaS53aWR0aCxpLmhlaWdodCwwLGkuZGF0YSk6Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBBdHRlbXB0IHRvIGxvYWQgdW5zdXBwb3J0ZWQgY29tcHJlc3NlZCB0ZXh0dXJlIGZvcm1hdCBpbiAuc2V0VGV4dHVyZUN1YmUoKSIpOm4udGV4SW1hZ2UyRCgzNDA2OSt0LGUsZyxpLndpZHRoLGkuaGVpZ2h0LDAsdSxmLGkuZGF0YSl9fWUuX19tYXhNaXBMZXZlbD1NLmxlbmd0aC0xfWVsc2V7TT1vLm1pcG1hcHM7Zm9yKGxldCB0PTA7dDw2O3QrKylpZihsKXtuLnRleEltYWdlMkQoMzQwNjkrdCwwLGcsZFt0XS53aWR0aCxkW3RdLmhlaWdodCwwLHUsZixkW3RdLmRhdGEpO2ZvcihsZXQgZT0wO2U8TS5sZW5ndGg7ZSsrKXtjb25zdCBvPU1bZV0uaW1hZ2VbdF0uaW1hZ2U7bi50ZXhJbWFnZTJEKDM0MDY5K3QsZSsxLGcsby53aWR0aCxvLmhlaWdodCwwLHUsZixvLmRhdGEpfX1lbHNle24udGV4SW1hZ2UyRCgzNDA2OSt0LDAsZyx1LGYsZFt0XSk7Zm9yKGxldCBlPTA7ZTxNLmxlbmd0aDtlKyspbi50ZXhJbWFnZTJEKDM0MDY5K3QsZSsxLGcsdSxmLE1bZV0uaW1hZ2VbdF0pfWUuX19tYXhNaXBMZXZlbD1NLmxlbmd0aH15KG8sbSkmJl8oMzQwNjcsbyxwLndpZHRoLHAuaGVpZ2h0KSxlLl9fdmVyc2lvbj1vLnZlcnNpb24sby5vblVwZGF0ZSYmby5vblVwZGF0ZShvKX0pKHIsZSxpKToobi5hY3RpdmVUZXh0dXJlKDMzOTg0K2kpLG4uYmluZFRleHR1cmUoMzQwNjcsci5fX3dlYmdsVGV4dHVyZSkpfWNvbnN0IGs9e1t1aXRdOjEwNDk3LFtmaXRdOjMzMDcxLFtnaXRdOjMzNjQ4fSxTPXtbaGl0XTo5NzI4LDEwMDQ6OTk4NCwxMDA1Ojk5ODYsW2JpdF06OTcyOSwxMDA3Ojk5ODUsW3lpdF06OTk4N307ZnVuY3Rpb24gRChuLGEscil7cj8odC50ZXhQYXJhbWV0ZXJpKG4sMTAyNDIsa1thLndyYXBTXSksdC50ZXhQYXJhbWV0ZXJpKG4sMTAyNDMsa1thLndyYXBUXSksMzI4NzkhPT1uJiYzNTg2NiE9PW58fHQudGV4UGFyYW1ldGVyaShuLDMyODgyLGtbYS53cmFwUl0pLHQudGV4UGFyYW1ldGVyaShuLDEwMjQwLFNbYS5tYWdGaWx0ZXJdKSx0LnRleFBhcmFtZXRlcmkobiwxMDI0MSxTW2EubWluRmlsdGVyXSkpOih0LnRleFBhcmFtZXRlcmkobiwxMDI0MiwzMzA3MSksdC50ZXhQYXJhbWV0ZXJpKG4sMTAyNDMsMzMwNzEpLDMyODc5IT09biYmMzU4NjYhPT1ufHx0LnRleFBhcmFtZXRlcmkobiwzMjg4MiwzMzA3MSksYS53cmFwUz09PWZpdCYmYS53cmFwVD09PWZpdHx8Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIGlzIG5vdCBwb3dlciBvZiB0d28uIFRleHR1cmUud3JhcFMgYW5kIFRleHR1cmUud3JhcFQgc2hvdWxkIGJlIHNldCB0byBUSFJFRS5DbGFtcFRvRWRnZVdyYXBwaW5nLiIpLHQudGV4UGFyYW1ldGVyaShuLDEwMjQwLE0oYS5tYWdGaWx0ZXIpKSx0LnRleFBhcmFtZXRlcmkobiwxMDI0MSxNKGEubWluRmlsdGVyKSksYS5taW5GaWx0ZXIhPT1oaXQmJmEubWluRmlsdGVyIT09Yml0JiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgaXMgbm90IHBvd2VyIG9mIHR3by4gVGV4dHVyZS5taW5GaWx0ZXIgc2hvdWxkIGJlIHNldCB0byBUSFJFRS5OZWFyZXN0RmlsdGVyIG9yIFRIUkVFLkxpbmVhckZpbHRlci4iKSk7Y29uc3QgbD1lLmdldCgiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7aWYobCl7aWYoYS50eXBlPT09TWl0JiZudWxsPT09ZS5nZXQoIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpKXJldHVybjtpZihhLnR5cGU9PT12aXQmJm51bGw9PT0oc3x8ZS5nZXQoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIikpKXJldHVybjsoYS5hbmlzb3Ryb3B5PjF8fG8uZ2V0KGEpLl9fY3VycmVudEFuaXNvdHJvcHkpJiYodC50ZXhQYXJhbWV0ZXJmKG4sbC5URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCxNYXRoLm1pbihhLmFuaXNvdHJvcHksaS5nZXRNYXhBbmlzb3Ryb3B5KCkpKSxvLmdldChhKS5fX2N1cnJlbnRBbmlzb3Ryb3B5PWEuYW5pc290cm9weSl9fWZ1bmN0aW9uIEUoZSxuKXt2b2lkIDA9PT1lLl9fd2ViZ2xJbml0JiYoZS5fX3dlYmdsSW5pdD0hMCxuLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLHYpLGUuX193ZWJnbFRleHR1cmU9dC5jcmVhdGVUZXh0dXJlKCksci5tZW1vcnkudGV4dHVyZXMrKyl9ZnVuY3Rpb24gQShlLG8saSl7bGV0IHI9MzU1MztvLmlzRGF0YVRleHR1cmUyREFycmF5JiYocj0zNTg2Niksby5pc0RhdGFUZXh0dXJlM0QmJihyPTMyODc5KSxFKGUsbyksbi5hY3RpdmVUZXh0dXJlKDMzOTg0K2kpLG4uYmluZFRleHR1cmUocixlLl9fd2ViZ2xUZXh0dXJlKSx0LnBpeGVsU3RvcmVpKDM3NDQwLG8uZmxpcFkpLHQucGl4ZWxTdG9yZWkoMzc0NDEsby5wcmVtdWx0aXBseUFscGhhKSx0LnBpeGVsU3RvcmVpKDMzMTcsby51bnBhY2tBbGlnbm1lbnQpO2NvbnN0IGw9KGZ1bmN0aW9uIGModCl7cmV0dXJuIXMmJih0LndyYXBTIT09Zml0fHx0LndyYXBUIT09Zml0fHx0Lm1pbkZpbHRlciE9PWhpdCYmdC5taW5GaWx0ZXIhPT1iaXQpfSkobykmJiExPT09YihvLmltYWdlKSxwPWgoby5pbWFnZSxsLCExLGQpLG09YihwKXx8cyx1PWEuY29udmVydChvLmZvcm1hdCk7bGV0IGYsZz1hLmNvbnZlcnQoby50eXBlKSxNPUMoby5pbnRlcm5hbEZvcm1hdCx1LGcpO0QocixvLG0pO2NvbnN0IHY9by5taXBtYXBzO2lmKG8uaXNEZXB0aFRleHR1cmUpTT02NDAyLHM/TT1vLnR5cGU9PT1NaXQ/MzYwMTI6by50eXBlPT09Q2l0PzMzMTkwOm8udHlwZT09PXhpdD8zNTA1NjozMzE4OTpvLnR5cGU9PT1NaXQmJmNvbnNvbGUuZXJyb3IoIldlYkdMUmVuZGVyZXI6IEZsb2F0aW5nIHBvaW50IGRlcHRoIHRleHR1cmUgcmVxdWlyZXMgV2ViR0wyLiIpLG8uZm9ybWF0PT09d2l0JiY2NDAyPT09TSYmby50eXBlIT09X2l0JiZvLnR5cGUhPT1DaXQmJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFVzZSBVbnNpZ25lZFNob3J0VHlwZSBvciBVbnNpZ25lZEludFR5cGUgZm9yIERlcHRoRm9ybWF0IERlcHRoVGV4dHVyZS4iKSxvLnR5cGU9X2l0LGc9YS5jb252ZXJ0KG8udHlwZSkpLG8uZm9ybWF0PT09a2l0JiY2NDAyPT09TSYmKE09MzQwNDEsby50eXBlIT09eGl0JiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBVc2UgVW5zaWduZWRJbnQyNDhUeXBlIGZvciBEZXB0aFN0ZW5jaWxGb3JtYXQgRGVwdGhUZXh0dXJlLiIpLG8udHlwZT14aXQsZz1hLmNvbnZlcnQoby50eXBlKSkpLG4udGV4SW1hZ2UyRCgzNTUzLDAsTSxwLndpZHRoLHAuaGVpZ2h0LDAsdSxnLG51bGwpO2Vsc2UgaWYoby5pc0RhdGFUZXh0dXJlKWlmKHYubGVuZ3RoPjAmJm0pe2ZvcihsZXQgdD0wLGU9di5sZW5ndGg7dDxlO3QrKylmPXZbdF0sbi50ZXhJbWFnZTJEKDM1NTMsdCxNLGYud2lkdGgsZi5oZWlnaHQsMCx1LGcsZi5kYXRhKTtvLmdlbmVyYXRlTWlwbWFwcz0hMSxlLl9fbWF4TWlwTGV2ZWw9di5sZW5ndGgtMX1lbHNlIG4udGV4SW1hZ2UyRCgzNTUzLDAsTSxwLndpZHRoLHAuaGVpZ2h0LDAsdSxnLHAuZGF0YSksZS5fX21heE1pcExldmVsPTA7ZWxzZSBpZihvLmlzQ29tcHJlc3NlZFRleHR1cmUpe2ZvcihsZXQgdD0wLGU9di5sZW5ndGg7dDxlO3QrKylmPXZbdF0sby5mb3JtYXQhPT1QaXQmJm8uZm9ybWF0IT09T2l0P251bGwhPT11P24uY29tcHJlc3NlZFRleEltYWdlMkQoMzU1Myx0LE0sZi53aWR0aCxmLmhlaWdodCwwLGYuZGF0YSk6Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBBdHRlbXB0IHRvIGxvYWQgdW5zdXBwb3J0ZWQgY29tcHJlc3NlZCB0ZXh0dXJlIGZvcm1hdCBpbiAudXBsb2FkVGV4dHVyZSgpIik6bi50ZXhJbWFnZTJEKDM1NTMsdCxNLGYud2lkdGgsZi5oZWlnaHQsMCx1LGcsZi5kYXRhKTtlLl9fbWF4TWlwTGV2ZWw9di5sZW5ndGgtMX1lbHNlIGlmKG8uaXNEYXRhVGV4dHVyZTJEQXJyYXkpbi50ZXhJbWFnZTNEKDM1ODY2LDAsTSxwLndpZHRoLHAuaGVpZ2h0LHAuZGVwdGgsMCx1LGcscC5kYXRhKSxlLl9fbWF4TWlwTGV2ZWw9MDtlbHNlIGlmKG8uaXNEYXRhVGV4dHVyZTNEKW4udGV4SW1hZ2UzRCgzMjg3OSwwLE0scC53aWR0aCxwLmhlaWdodCxwLmRlcHRoLDAsdSxnLHAuZGF0YSksZS5fX21heE1pcExldmVsPTA7ZWxzZSBpZih2Lmxlbmd0aD4wJiZtKXtmb3IobGV0IHQ9MCxlPXYubGVuZ3RoO3Q8ZTt0KyspZj12W3RdLG4udGV4SW1hZ2UyRCgzNTUzLHQsTSx1LGcsZik7by5nZW5lcmF0ZU1pcG1hcHM9ITEsZS5fX21heE1pcExldmVsPXYubGVuZ3RoLTF9ZWxzZSBuLnRleEltYWdlMkQoMzU1MywwLE0sdSxnLHApLGUuX19tYXhNaXBMZXZlbD0wO3kobyxtKSYmXyhyLG8scC53aWR0aCxwLmhlaWdodCksZS5fX3ZlcnNpb249by52ZXJzaW9uLG8ub25VcGRhdGUmJm8ub25VcGRhdGUobyl9ZnVuY3Rpb24gUihlLGkscixzKXtjb25zdCBsPWEuY29udmVydChpLnRleHR1cmUuZm9ybWF0KSxjPWEuY29udmVydChpLnRleHR1cmUudHlwZSksZD1DKGkudGV4dHVyZS5pbnRlcm5hbEZvcm1hdCxsLGMpO24udGV4SW1hZ2UyRChzLDAsZCxpLndpZHRoLGkuaGVpZ2h0LDAsbCxjLG51bGwpLHQuYmluZEZyYW1lYnVmZmVyKDM2MTYwLGUpLHQuZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAscixzLG8uZ2V0KGkudGV4dHVyZSkuX193ZWJnbFRleHR1cmUsMCksdC5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCl9ZnVuY3Rpb24gVChlLG4sbyl7aWYodC5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLGUpLG4uZGVwdGhCdWZmZXImJiFuLnN0ZW5jaWxCdWZmZXIpe2xldCBpPTMzMTg5O2lmKG8pe2NvbnN0IGU9bi5kZXB0aFRleHR1cmU7ZSYmZS5pc0RlcHRoVGV4dHVyZSYmKGUudHlwZT09PU1pdD9pPTM2MDEyOmUudHlwZT09PUNpdCYmKGk9MzMxOTApKTtjb25zdCBvPU4obik7dC5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoMzYxNjEsbyxpLG4ud2lkdGgsbi5oZWlnaHQpfWVsc2UgdC5yZW5kZXJidWZmZXJTdG9yYWdlKDM2MTYxLGksbi53aWR0aCxuLmhlaWdodCk7dC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcigzNjE2MCwzNjA5NiwzNjE2MSxlKX1lbHNlIGlmKG4uZGVwdGhCdWZmZXImJm4uc3RlbmNpbEJ1ZmZlcil7aWYobyl7Y29uc3QgZT1OKG4pO3QucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKDM2MTYxLGUsMzUwNTYsbi53aWR0aCxuLmhlaWdodCl9ZWxzZSB0LnJlbmRlcmJ1ZmZlclN0b3JhZ2UoMzYxNjEsMzQwNDEsbi53aWR0aCxuLmhlaWdodCk7dC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcigzNjE2MCwzMzMwNiwzNjE2MSxlKX1lbHNle2NvbnN0IGU9YS5jb252ZXJ0KG4udGV4dHVyZS5mb3JtYXQpLGk9YS5jb252ZXJ0KG4udGV4dHVyZS50eXBlKSxyPUMobi50ZXh0dXJlLmludGVybmFsRm9ybWF0LGUsaSk7aWYobyl7Y29uc3QgZT1OKG4pO3QucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKDM2MTYxLGUscixuLndpZHRoLG4uaGVpZ2h0KX1lbHNlIHQucmVuZGVyYnVmZmVyU3RvcmFnZSgzNjE2MSxyLG4ud2lkdGgsbi5oZWlnaHQpfXQuYmluZFJlbmRlcmJ1ZmZlcigzNjE2MSxudWxsKX1mdW5jdGlvbiBOKHQpe3JldHVybiBzJiZ0LmlzV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldD9NYXRoLm1pbihwLHQuc2FtcGxlcyk6MH1sZXQgST0hMSx6PSExO3RoaXMuYWxsb2NhdGVUZXh0dXJlVW5pdD1mdW5jdGlvbiBIKCl7Y29uc3QgdD1PO3JldHVybiB0Pj1sJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMVGV4dHVyZXM6IFRyeWluZyB0byB1c2UgIit0KyIgdGV4dHVyZSB1bml0cyB3aGlsZSB0aGlzIEdQVSBzdXBwb3J0cyBvbmx5ICIrbCksTys9MSx0fSx0aGlzLnJlc2V0VGV4dHVyZVVuaXRzPWZ1bmN0aW9uIEYoKXtPPTB9LHRoaXMuc2V0VGV4dHVyZTJEPVAsdGhpcy5zZXRUZXh0dXJlMkRBcnJheT1mdW5jdGlvbiBMKHQsZSl7Y29uc3QgaT1vLmdldCh0KTt0LnZlcnNpb24+MCYmaS5fX3ZlcnNpb24hPT10LnZlcnNpb24/QShpLHQsZSk6KG4uYWN0aXZlVGV4dHVyZSgzMzk4NCtlKSxuLmJpbmRUZXh0dXJlKDM1ODY2LGkuX193ZWJnbFRleHR1cmUpKX0sdGhpcy5zZXRUZXh0dXJlM0Q9ZnVuY3Rpb24gQih0LGUpe2NvbnN0IGk9by5nZXQodCk7dC52ZXJzaW9uPjAmJmkuX192ZXJzaW9uIT09dC52ZXJzaW9uP0EoaSx0LGUpOihuLmFjdGl2ZVRleHR1cmUoMzM5ODQrZSksbi5iaW5kVGV4dHVyZSgzMjg3OSxpLl9fd2ViZ2xUZXh0dXJlKSl9LHRoaXMuc2V0VGV4dHVyZUN1YmU9dyx0aGlzLnNldHVwUmVuZGVyVGFyZ2V0PWZ1bmN0aW9uIFYoZSl7Y29uc3QgaT1vLmdldChlKSxsPW8uZ2V0KGUudGV4dHVyZSk7ZS5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIix4KSxsLl9fd2ViZ2xUZXh0dXJlPXQuY3JlYXRlVGV4dHVyZSgpLHIubWVtb3J5LnRleHR1cmVzKys7Y29uc3QgYz0hMD09PWUuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQsZD0hMD09PWUuaXNXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0LHA9YihlKXx8cztpZighc3x8ZS50ZXh0dXJlLmZvcm1hdCE9PU9pdHx8ZS50ZXh0dXJlLnR5cGUhPT1NaXQmJmUudGV4dHVyZS50eXBlIT09dml0fHwoZS50ZXh0dXJlLmZvcm1hdD1QaXQsY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBSZW5kZXJpbmcgdG8gdGV4dHVyZXMgd2l0aCBSR0IgZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQuIFVzaW5nIFJHQkEgZm9ybWF0IGluc3RlYWQuIikpLGMpe2kuX193ZWJnbEZyYW1lYnVmZmVyPVtdO2ZvcihsZXQgZT0wO2U8NjtlKyspaS5fX3dlYmdsRnJhbWVidWZmZXJbZV09dC5jcmVhdGVGcmFtZWJ1ZmZlcigpfWVsc2UgaWYoaS5fX3dlYmdsRnJhbWVidWZmZXI9dC5jcmVhdGVGcmFtZWJ1ZmZlcigpLGQpaWYocyl7aS5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXI9dC5jcmVhdGVGcmFtZWJ1ZmZlcigpLGkuX193ZWJnbENvbG9yUmVuZGVyYnVmZmVyPXQuY3JlYXRlUmVuZGVyYnVmZmVyKCksdC5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLGkuX193ZWJnbENvbG9yUmVuZGVyYnVmZmVyKTtjb25zdCBuPWEuY29udmVydChlLnRleHR1cmUuZm9ybWF0KSxvPWEuY29udmVydChlLnRleHR1cmUudHlwZSkscj1DKGUudGV4dHVyZS5pbnRlcm5hbEZvcm1hdCxuLG8pLHM9TihlKTt0LnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSgzNjE2MSxzLHIsZS53aWR0aCxlLmhlaWdodCksdC5iaW5kRnJhbWVidWZmZXIoMzYxNjAsaS5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXIpLHQuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoMzYxNjAsMzYwNjQsMzYxNjEsaS5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXIpLHQuYmluZFJlbmRlcmJ1ZmZlcigzNjE2MSxudWxsKSxlLmRlcHRoQnVmZmVyJiYoaS5fX3dlYmdsRGVwdGhSZW5kZXJidWZmZXI9dC5jcmVhdGVSZW5kZXJidWZmZXIoKSxUKGkuX193ZWJnbERlcHRoUmVuZGVyYnVmZmVyLGUsITApKSx0LmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxudWxsKX1lbHNlIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldCBjYW4gb25seSBiZSB1c2VkIHdpdGggV2ViR0wyLiIpO2lmKGMpe24uYmluZFRleHR1cmUoMzQwNjcsbC5fX3dlYmdsVGV4dHVyZSksRCgzNDA2NyxlLnRleHR1cmUscCk7Zm9yKGxldCB0PTA7dDw2O3QrKylSKGkuX193ZWJnbEZyYW1lYnVmZmVyW3RdLGUsMzYwNjQsMzQwNjkrdCk7eShlLnRleHR1cmUscCkmJl8oMzQwNjcsZS50ZXh0dXJlLGUud2lkdGgsZS5oZWlnaHQpLG4uYmluZFRleHR1cmUoMzQwNjcsbnVsbCl9ZWxzZSBuLmJpbmRUZXh0dXJlKDM1NTMsbC5fX3dlYmdsVGV4dHVyZSksRCgzNTUzLGUudGV4dHVyZSxwKSxSKGkuX193ZWJnbEZyYW1lYnVmZmVyLGUsMzYwNjQsMzU1MykseShlLnRleHR1cmUscCkmJl8oMzU1MyxlLnRleHR1cmUsZS53aWR0aCxlLmhlaWdodCksbi5iaW5kVGV4dHVyZSgzNTUzLG51bGwpO2UuZGVwdGhCdWZmZXImJihmdW5jdGlvbiBtKGUpe2NvbnN0IG49by5nZXQoZSksaT0hMD09PWUuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQ7aWYoZS5kZXB0aFRleHR1cmUpe2lmKGkpdGhyb3cgbmV3IEVycm9yKCJ0YXJnZXQuZGVwdGhUZXh0dXJlIG5vdCBzdXBwb3J0ZWQgaW4gQ3ViZSByZW5kZXIgdGFyZ2V0cyIpOyEoZnVuY3Rpb24gYShlLG4pe2lmKG4mJm4uaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQpdGhyb3cgbmV3IEVycm9yKCJEZXB0aCBUZXh0dXJlIHdpdGggY3ViZSByZW5kZXIgdGFyZ2V0cyBpcyBub3Qgc3VwcG9ydGVkIik7aWYodC5iaW5kRnJhbWVidWZmZXIoMzYxNjAsZSksIW4uZGVwdGhUZXh0dXJlfHwhbi5kZXB0aFRleHR1cmUuaXNEZXB0aFRleHR1cmUpdGhyb3cgbmV3IEVycm9yKCJyZW5kZXJUYXJnZXQuZGVwdGhUZXh0dXJlIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgVEhSRUUuRGVwdGhUZXh0dXJlIik7by5nZXQobi5kZXB0aFRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlJiZuLmRlcHRoVGV4dHVyZS5pbWFnZS53aWR0aD09PW4ud2lkdGgmJm4uZGVwdGhUZXh0dXJlLmltYWdlLmhlaWdodD09PW4uaGVpZ2h0fHwobi5kZXB0aFRleHR1cmUuaW1hZ2Uud2lkdGg9bi53aWR0aCxuLmRlcHRoVGV4dHVyZS5pbWFnZS5oZWlnaHQ9bi5oZWlnaHQsbi5kZXB0aFRleHR1cmUubmVlZHNVcGRhdGU9ITApLFAobi5kZXB0aFRleHR1cmUsMCk7Y29uc3QgaT1vLmdldChuLmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmU7aWYobi5kZXB0aFRleHR1cmUuZm9ybWF0PT09d2l0KXQuZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAsMzYwOTYsMzU1MyxpLDApO2Vsc2V7aWYobi5kZXB0aFRleHR1cmUuZm9ybWF0IT09a2l0KXRocm93IG5ldyBFcnJvcigiVW5rbm93biBkZXB0aFRleHR1cmUgZm9ybWF0Iik7dC5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzMzMwNiwzNTUzLGksMCl9fSkobi5fX3dlYmdsRnJhbWVidWZmZXIsZSl9ZWxzZSBpZihpKXtuLl9fd2ViZ2xEZXB0aGJ1ZmZlcj1bXTtmb3IobGV0IG89MDtvPDY7bysrKXQuYmluZEZyYW1lYnVmZmVyKDM2MTYwLG4uX193ZWJnbEZyYW1lYnVmZmVyW29dKSxuLl9fd2ViZ2xEZXB0aGJ1ZmZlcltvXT10LmNyZWF0ZVJlbmRlcmJ1ZmZlcigpLFQobi5fX3dlYmdsRGVwdGhidWZmZXJbb10sZSwhMSl9ZWxzZSB0LmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxuLl9fd2ViZ2xGcmFtZWJ1ZmZlciksbi5fX3dlYmdsRGVwdGhidWZmZXI9dC5jcmVhdGVSZW5kZXJidWZmZXIoKSxUKG4uX193ZWJnbERlcHRoYnVmZmVyLGUsITEpO3QuYmluZEZyYW1lYnVmZmVyKDM2MTYwLG51bGwpfSkoZSl9LHRoaXMudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwPWZ1bmN0aW9uIGoodCl7Y29uc3QgZT10LnRleHR1cmU7aWYoeShlLGIodCl8fHMpKXtjb25zdCBpPXQuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQ/MzQwNjc6MzU1MyxhPW8uZ2V0KGUpLl9fd2ViZ2xUZXh0dXJlO24uYmluZFRleHR1cmUoaSxhKSxfKGksZSx0LndpZHRoLHQuaGVpZ2h0KSxuLmJpbmRUZXh0dXJlKGksbnVsbCl9fSx0aGlzLnVwZGF0ZU11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0PWZ1bmN0aW9uIFUoZSl7aWYoZS5pc1dlYkdMTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQpaWYocyl7Y29uc3Qgbj1vLmdldChlKTt0LmJpbmRGcmFtZWJ1ZmZlcigzNjAwOCxuLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlciksdC5iaW5kRnJhbWVidWZmZXIoMzYwMDksbi5fX3dlYmdsRnJhbWVidWZmZXIpO2NvbnN0IGk9ZS53aWR0aCxhPWUuaGVpZ2h0O2xldCByPTE2Mzg0O2UuZGVwdGhCdWZmZXImJihyfD0yNTYpLGUuc3RlbmNpbEJ1ZmZlciYmKHJ8PTEwMjQpLHQuYmxpdEZyYW1lYnVmZmVyKDAsMCxpLGEsMCwwLGksYSxyLDk3MjgpLHQuYmluZEZyYW1lYnVmZmVyKDM2MTYwLG4uX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyKX1lbHNlIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldCBjYW4gb25seSBiZSB1c2VkIHdpdGggV2ViR0wyLiIpfSx0aGlzLnNhZmVTZXRUZXh0dXJlMkQ9ZnVuY3Rpb24gVyh0LGUpe3QmJnQuaXNXZWJHTFJlbmRlclRhcmdldCYmKCExPT09SSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xUZXh0dXJlcy5zYWZlU2V0VGV4dHVyZTJEOiBkb24ndCB1c2UgcmVuZGVyIHRhcmdldHMgYXMgdGV4dHVyZXMuIFVzZSB0aGVpciAudGV4dHVyZSBwcm9wZXJ0eSBpbnN0ZWFkLiIpLEk9ITApLHQ9dC50ZXh0dXJlKSxQKHQsZSl9LHRoaXMuc2FmZVNldFRleHR1cmVDdWJlPWZ1bmN0aW9uIEcodCxlKXt0JiZ0LmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0JiYoITE9PT16JiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFRleHR1cmVzLnNhZmVTZXRUZXh0dXJlQ3ViZTogZG9uJ3QgdXNlIGN1YmUgcmVuZGVyIHRhcmdldHMgYXMgdGV4dHVyZXMuIFVzZSB0aGVpciAudGV4dHVyZSBwcm9wZXJ0eSBpbnN0ZWFkLiIpLHo9ITApLHQ9dC50ZXh0dXJlKSx3KHQsZSl9fWZ1bmN0aW9uIERjdCh0LGUsbil7Y29uc3Qgbz1uLmlzV2ViR0wyO3JldHVybntjb252ZXJ0OmZ1bmN0aW9uIGkodCl7bGV0IG47aWYoMTAwOT09PXQpcmV0dXJuIDUxMjE7aWYoMTAxNz09PXQpcmV0dXJuIDMyODE5O2lmKDEwMTg9PT10KXJldHVybiAzMjgyMDtpZigxMDE5PT09dClyZXR1cm4gMzM2MzU7aWYoMTAxMD09PXQpcmV0dXJuIDUxMjA7aWYoMTAxMT09PXQpcmV0dXJuIDUxMjI7aWYodD09PV9pdClyZXR1cm4gNTEyMztpZigxMDEzPT09dClyZXR1cm4gNTEyNDtpZih0PT09Q2l0KXJldHVybiA1MTI1O2lmKHQ9PT1NaXQpcmV0dXJuIDUxMjY7aWYodD09PXZpdClyZXR1cm4gbz81MTMxOihuPWUuZ2V0KCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IiksbnVsbCE9PW4/bi5IQUxGX0ZMT0FUX09FUzpudWxsKTtpZigxMDIxPT09dClyZXR1cm4gNjQwNjtpZih0PT09T2l0KXJldHVybiA2NDA3O2lmKHQ9PT1QaXQpcmV0dXJuIDY0MDg7aWYoMTAyND09PXQpcmV0dXJuIDY0MDk7aWYoMTAyNT09PXQpcmV0dXJuIDY0MTA7aWYodD09PXdpdClyZXR1cm4gNjQwMjtpZih0PT09a2l0KXJldHVybiAzNDA0MTtpZigxMDI4PT09dClyZXR1cm4gNjQwMztpZigxMDI5PT09dClyZXR1cm4gMzYyNDQ7aWYoMTAzMD09PXQpcmV0dXJuIDMzMzE5O2lmKDEwMzE9PT10KXJldHVybiAzMzMyMDtpZigxMDMyPT09dClyZXR1cm4gMzYyNDg7aWYoMTAzMz09PXQpcmV0dXJuIDM2MjQ5O2lmKDMzNzc2PT09dHx8MzM3Nzc9PT10fHwzMzc3OD09PXR8fDMzNzc5PT09dCl7aWYobj1lLmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKSxudWxsPT09bilyZXR1cm4gbnVsbDtpZigzMzc3Nj09PXQpcmV0dXJuIG4uQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDtpZigzMzc3Nz09PXQpcmV0dXJuIG4uQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ7aWYoMzM3Nzg9PT10KXJldHVybiBuLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhUO2lmKDMzNzc5PT09dClyZXR1cm4gbi5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVH1pZigzNTg0MD09PXR8fDM1ODQxPT09dHx8MzU4NDI9PT10fHwzNTg0Mz09PXQpe2lmKG49ZS5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyIpLG51bGw9PT1uKXJldHVybiBudWxsO2lmKDM1ODQwPT09dClyZXR1cm4gbi5DT01QUkVTU0VEX1JHQl9QVlJUQ180QlBQVjFfSU1HO2lmKDM1ODQxPT09dClyZXR1cm4gbi5DT01QUkVTU0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1HO2lmKDM1ODQyPT09dClyZXR1cm4gbi5DT01QUkVTU0VEX1JHQkFfUFZSVENfNEJQUFYxX0lNRztpZigzNTg0Mz09PXQpcmV0dXJuIG4uQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzJCUFBWMV9JTUd9aWYoMzYxOTY9PT10KXJldHVybiBuPWUuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfZXRjMSIpLG51bGwhPT1uP24uQ09NUFJFU1NFRF9SR0JfRVRDMV9XRUJHTDpudWxsO2lmKCgzNzQ5Mj09PXR8fDM3NDk2PT09dCkmJihuPWUuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfZXRjIiksbnVsbCE9PW4pKXtpZigzNzQ5Mj09PXQpcmV0dXJuIG4uQ09NUFJFU1NFRF9SR0I4X0VUQzI7aWYoMzc0OTY9PT10KXJldHVybiBuLkNPTVBSRVNTRURfUkdCQThfRVRDMl9FQUN9cmV0dXJuIDM3ODA4PT09dHx8Mzc4MDk9PT10fHwzNzgxMD09PXR8fDM3ODExPT09dHx8Mzc4MTI9PT10fHwzNzgxMz09PXR8fDM3ODE0PT09dHx8Mzc4MTU9PT10fHwzNzgxNj09PXR8fDM3ODE3PT09dHx8Mzc4MTg9PT10fHwzNzgxOT09PXR8fDM3ODIwPT09dHx8Mzc4MjE9PT10fHwzNzg0MD09PXR8fDM3ODQxPT09dHx8Mzc4NDI9PT10fHwzNzg0Mz09PXR8fDM3ODQ0PT09dHx8Mzc4NDU9PT10fHwzNzg0Nj09PXR8fDM3ODQ3PT09dHx8Mzc4NDg9PT10fHwzNzg0OT09PXR8fDM3ODUwPT09dHx8Mzc4NTE9PT10fHwzNzg1Mj09PXR8fDM3ODUzPT09dD8obj1lLmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2FzdGMiKSxudWxsIT09bj90Om51bGwpOjM2NDkyPT09dD8obj1lLmdldCgiRVhUX3RleHR1cmVfY29tcHJlc3Npb25fYnB0YyIpLG51bGwhPT1uP3Q6bnVsbCk6dD09PXhpdD9vPzM0MDQyOihuPWUuZ2V0KCJXRUJHTF9kZXB0aF90ZXh0dXJlIiksbnVsbCE9PW4/bi5VTlNJR05FRF9JTlRfMjRfOF9XRUJHTDpudWxsKTp2b2lkIDB9fX1mdW5jdGlvbiBFY3QodD1bXSl7Q3N0LmNhbGwodGhpcyksdGhpcy5jYW1lcmFzPXR9ZnVuY3Rpb24gQWN0KCl7UWF0LmNhbGwodGhpcyksdGhpcy50eXBlPSJHcm91cCJ9ZnVuY3Rpb24gUmN0KCl7dGhpcy5fdGFyZ2V0UmF5PW51bGwsdGhpcy5fZ3JpcD1udWxsLHRoaXMuX2hhbmQ9bnVsbH1mdW5jdGlvbiBUY3QodCxlKXtjb25zdCBuPXRoaXM7bGV0IG89bnVsbCxpPTEsYT1udWxsLHI9ImxvY2FsLWZsb29yIixzPW51bGw7Y29uc3QgbD1bXSxjPW5ldyBNYXAsZD1uZXcgQ3N0O2QubGF5ZXJzLmVuYWJsZSgxKSxkLnZpZXdwb3J0PW5ldyBLaXQ7Y29uc3QgcD1uZXcgQ3N0O3AubGF5ZXJzLmVuYWJsZSgyKSxwLnZpZXdwb3J0PW5ldyBLaXQ7Y29uc3QgbT1bZCxwXSx1PW5ldyBFY3Q7dS5sYXllcnMuZW5hYmxlKDEpLHUubGF5ZXJzLmVuYWJsZSgyKTtsZXQgZj1udWxsLGc9bnVsbDtmdW5jdGlvbiBoKHQpe2NvbnN0IGU9Yy5nZXQodC5pbnB1dFNvdXJjZSk7ZSYmZS5kaXNwYXRjaEV2ZW50KHt0eXBlOnQudHlwZSxkYXRhOnQuaW5wdXRTb3VyY2V9KX1mdW5jdGlvbiBiKCl7Yy5mb3JFYWNoKChmdW5jdGlvbih0LGUpe3QuZGlzY29ubmVjdChlKX0pKSxjLmNsZWFyKCksZj1udWxsLGc9bnVsbCx0LnNldEZyYW1lYnVmZmVyKG51bGwpLHQuc2V0UmVuZGVyVGFyZ2V0KHQuZ2V0UmVuZGVyVGFyZ2V0KCkpLHguc3RvcCgpLG4uaXNQcmVzZW50aW5nPSExLG4uZGlzcGF0Y2hFdmVudCh7dHlwZToic2Vzc2lvbmVuZCJ9KX1mdW5jdGlvbiB5KHQpe2NvbnN0IGU9by5pbnB1dFNvdXJjZXM7Zm9yKGxldCB0PTA7dDxsLmxlbmd0aDt0KyspYy5zZXQoZVt0XSxsW3RdKTtmb3IobGV0IGU9MDtlPHQucmVtb3ZlZC5sZW5ndGg7ZSsrKXtjb25zdCBuPXQucmVtb3ZlZFtlXSxvPWMuZ2V0KG4pO28mJihvLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc2Nvbm5lY3RlZCIsZGF0YTpufSksYy5kZWxldGUobikpfWZvcihsZXQgZT0wO2U8dC5hZGRlZC5sZW5ndGg7ZSsrKXtjb25zdCBuPXQuYWRkZWRbZV0sbz1jLmdldChuKTtvJiZvLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImNvbm5lY3RlZCIsZGF0YTpufSl9fXRoaXMuZW5hYmxlZD0hMSx0aGlzLmlzUHJlc2VudGluZz0hMSx0aGlzLmdldENvbnRyb2xsZXI9ZnVuY3Rpb24odCl7bGV0IGU9bFt0XTtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9bmV3IFJjdCxsW3RdPWUpLGUuZ2V0VGFyZ2V0UmF5U3BhY2UoKX0sdGhpcy5nZXRDb250cm9sbGVyR3JpcD1mdW5jdGlvbih0KXtsZXQgZT1sW3RdO3JldHVybiB2b2lkIDA9PT1lJiYoZT1uZXcgUmN0LGxbdF09ZSksZS5nZXRHcmlwU3BhY2UoKX0sdGhpcy5nZXRIYW5kPWZ1bmN0aW9uKHQpe2xldCBlPWxbdF07cmV0dXJuIHZvaWQgMD09PWUmJihlPW5ldyBSY3QsbFt0XT1lKSxlLmdldEhhbmRTcGFjZSgpfSx0aGlzLnNldEZyYW1lYnVmZmVyU2NhbGVGYWN0b3I9ZnVuY3Rpb24odCl7aT10LCEwPT09bi5pc1ByZXNlbnRpbmcmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViWFJNYW5hZ2VyOiBDYW5ub3QgY2hhbmdlIGZyYW1lYnVmZmVyIHNjYWxlIHdoaWxlIHByZXNlbnRpbmcuIil9LHRoaXMuc2V0UmVmZXJlbmNlU3BhY2VUeXBlPWZ1bmN0aW9uKHQpe3I9dCwhMD09PW4uaXNQcmVzZW50aW5nJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYlhSTWFuYWdlcjogQ2Fubm90IGNoYW5nZSByZWZlcmVuY2Ugc3BhY2UgdHlwZSB3aGlsZSBwcmVzZW50aW5nLiIpfSx0aGlzLmdldFJlZmVyZW5jZVNwYWNlPWZ1bmN0aW9uKCl7cmV0dXJuIGF9LHRoaXMuZ2V0U2Vzc2lvbj1mdW5jdGlvbigpe3JldHVybiBvfSx0aGlzLnNldFNlc3Npb249YXN5bmMgZnVuY3Rpb24odCl7aWYobz10LG51bGwhPT1vKXtvLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdCIsaCksby5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3RzdGFydCIsaCksby5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3RlbmQiLGgpLG8uYWRkRXZlbnRMaXN0ZW5lcigic3F1ZWV6ZSIsaCksby5hZGRFdmVudExpc3RlbmVyKCJzcXVlZXplc3RhcnQiLGgpLG8uYWRkRXZlbnRMaXN0ZW5lcigic3F1ZWV6ZWVuZCIsaCksby5hZGRFdmVudExpc3RlbmVyKCJlbmQiLGIpLG8uYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXRzb3VyY2VzY2hhbmdlIix5KTtjb25zdCB0PWUuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKTshMCE9PXQueHJDb21wYXRpYmxlJiZhd2FpdCBlLm1ha2VYUkNvbXBhdGlibGUoKTtjb25zdCBzPW5ldyBYUldlYkdMTGF5ZXIobyxlLHthbnRpYWxpYXM6dC5hbnRpYWxpYXMsYWxwaGE6dC5hbHBoYSxkZXB0aDp0LmRlcHRoLHN0ZW5jaWw6dC5zdGVuY2lsLGZyYW1lYnVmZmVyU2NhbGVGYWN0b3I6aX0pO28udXBkYXRlUmVuZGVyU3RhdGUoe2Jhc2VMYXllcjpzfSksYT1hd2FpdCBvLnJlcXVlc3RSZWZlcmVuY2VTcGFjZShyKSx4LnNldENvbnRleHQobykseC5zdGFydCgpLG4uaXNQcmVzZW50aW5nPSEwLG4uZGlzcGF0Y2hFdmVudCh7dHlwZToic2Vzc2lvbnN0YXJ0In0pfX07Y29uc3QgXz1uZXcgJGl0LEM9bmV3ICRpdDtmdW5jdGlvbiBNKHQsZSl7bnVsbD09PWU/dC5tYXRyaXhXb3JsZC5jb3B5KHQubWF0cml4KTp0Lm1hdHJpeFdvcmxkLm11bHRpcGx5TWF0cmljZXMoZS5tYXRyaXhXb3JsZCx0Lm1hdHJpeCksdC5tYXRyaXhXb3JsZEludmVyc2UuY29weSh0Lm1hdHJpeFdvcmxkKS5pbnZlcnQoKX10aGlzLmdldENhbWVyYT1mdW5jdGlvbih0KXt1Lm5lYXI9cC5uZWFyPWQubmVhcj10Lm5lYXIsdS5mYXI9cC5mYXI9ZC5mYXI9dC5mYXIsZj09PXUubmVhciYmZz09PXUuZmFyfHwoby51cGRhdGVSZW5kZXJTdGF0ZSh7ZGVwdGhOZWFyOnUubmVhcixkZXB0aEZhcjp1LmZhcn0pLGY9dS5uZWFyLGc9dS5mYXIpO2NvbnN0IGU9dC5wYXJlbnQsbj11LmNhbWVyYXM7TSh1LGUpO2ZvcihsZXQgdD0wO3Q8bi5sZW5ndGg7dCsrKU0oblt0XSxlKTt0Lm1hdHJpeFdvcmxkLmNvcHkodS5tYXRyaXhXb3JsZCksdC5tYXRyaXguY29weSh1Lm1hdHJpeCksdC5tYXRyaXguZGVjb21wb3NlKHQucG9zaXRpb24sdC5xdWF0ZXJuaW9uLHQuc2NhbGUpO2NvbnN0IGk9dC5jaGlsZHJlbjtmb3IobGV0IHQ9MCxlPWkubGVuZ3RoO3Q8ZTt0KyspaVt0XS51cGRhdGVNYXRyaXhXb3JsZCghMCk7cmV0dXJuIDI9PT1uLmxlbmd0aD8oZnVuY3Rpb24gYSh0LGUsbil7Xy5zZXRGcm9tTWF0cml4UG9zaXRpb24oZS5tYXRyaXhXb3JsZCksQy5zZXRGcm9tTWF0cml4UG9zaXRpb24obi5tYXRyaXhXb3JsZCk7Y29uc3Qgbz1fLmRpc3RhbmNlVG8oQyksaT1lLnByb2plY3Rpb25NYXRyaXguZWxlbWVudHMsYT1uLnByb2plY3Rpb25NYXRyaXguZWxlbWVudHMscj1pWzE0XS8oaVsxMF0tMSkscz1pWzE0XS8oaVsxMF0rMSksbD0oaVs5XSsxKS9pWzVdLGM9KGlbOV0tMSkvaVs1XSxkPShpWzhdLTEpL2lbMF0scD0oYVs4XSsxKS9hWzBdLG09cipkLHU9cipwLGY9by8oLWQrcCksZz1mKi1kO2UubWF0cml4V29ybGQuZGVjb21wb3NlKHQucG9zaXRpb24sdC5xdWF0ZXJuaW9uLHQuc2NhbGUpLHQudHJhbnNsYXRlWChnKSx0LnRyYW5zbGF0ZVooZiksdC5tYXRyaXhXb3JsZC5jb21wb3NlKHQucG9zaXRpb24sdC5xdWF0ZXJuaW9uLHQuc2NhbGUpLHQubWF0cml4V29ybGRJbnZlcnNlLmNvcHkodC5tYXRyaXhXb3JsZCkuaW52ZXJ0KCk7Y29uc3QgaD1yK2YsYj1zK2Y7dC5wcm9qZWN0aW9uTWF0cml4Lm1ha2VQZXJzcGVjdGl2ZShtLWcsdSsoby1nKSxsKnMvYipoLGMqcy9iKmgsaCxiKX0pKHUsZCxwKTp1LnByb2plY3Rpb25NYXRyaXguY29weShkLnByb2plY3Rpb25NYXRyaXgpLHV9O2xldCB2PW51bGw7Y29uc3QgeD1uZXcgRHN0O3guc2V0QW5pbWF0aW9uTG9vcCgoZnVuY3Rpb24gTyhlLG4pe2lmKHM9bi5nZXRWaWV3ZXJQb3NlKGEpLG51bGwhPT1zKXtjb25zdCBlPXMudmlld3Msbj1vLnJlbmRlclN0YXRlLmJhc2VMYXllcjt0LnNldEZyYW1lYnVmZmVyKG4uZnJhbWVidWZmZXIpO2xldCBpPSExO2UubGVuZ3RoIT09dS5jYW1lcmFzLmxlbmd0aCYmKHUuY2FtZXJhcy5sZW5ndGg9MCxpPSEwKTtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyl7Y29uc3Qgbz1lW3RdLGE9bi5nZXRWaWV3cG9ydChvKSxyPW1bdF07ci5tYXRyaXguZnJvbUFycmF5KG8udHJhbnNmb3JtLm1hdHJpeCksci5wcm9qZWN0aW9uTWF0cml4LmZyb21BcnJheShvLnByb2plY3Rpb25NYXRyaXgpLHIudmlld3BvcnQuc2V0KGEueCxhLnksYS53aWR0aCxhLmhlaWdodCksMD09PXQmJnUubWF0cml4LmNvcHkoci5tYXRyaXgpLCEwPT09aSYmdS5jYW1lcmFzLnB1c2gocil9fWNvbnN0IGk9by5pbnB1dFNvdXJjZXM7Zm9yKGxldCB0PTA7dDxsLmxlbmd0aDt0KyspbFt0XS51cGRhdGUoaVt0XSxuLGEpO3YmJnYoZSxuKX0pKSx0aGlzLnNldEFuaW1hdGlvbkxvb3A9ZnVuY3Rpb24odCl7dj10fSx0aGlzLmRpc3Bvc2U9ZnVuY3Rpb24oKXt9fWZ1bmN0aW9uIE5jdCh0KXtmdW5jdGlvbiBlKGUsbil7ZS5vcGFjaXR5LnZhbHVlPW4ub3BhY2l0eSxuLmNvbG9yJiZlLmRpZmZ1c2UudmFsdWUuY29weShuLmNvbG9yKSxuLmVtaXNzaXZlJiZlLmVtaXNzaXZlLnZhbHVlLmNvcHkobi5lbWlzc2l2ZSkubXVsdGlwbHlTY2FsYXIobi5lbWlzc2l2ZUludGVuc2l0eSksbi5tYXAmJihlLm1hcC52YWx1ZT1uLm1hcCksbi5hbHBoYU1hcCYmKGUuYWxwaGFNYXAudmFsdWU9bi5hbHBoYU1hcCksbi5zcGVjdWxhck1hcCYmKGUuc3BlY3VsYXJNYXAudmFsdWU9bi5zcGVjdWxhck1hcCk7Y29uc3Qgbz10LmdldChuKS5lbnZNYXA7aWYobyl7ZS5lbnZNYXAudmFsdWU9byxlLmZsaXBFbnZNYXAudmFsdWU9by5pc0N1YmVUZXh0dXJlJiZvLl9uZWVkc0ZsaXBFbnZNYXA/LTE6MSxlLnJlZmxlY3Rpdml0eS52YWx1ZT1uLnJlZmxlY3Rpdml0eSxlLnJlZnJhY3Rpb25SYXRpby52YWx1ZT1uLnJlZnJhY3Rpb25SYXRpbztjb25zdCBpPXQuZ2V0KG8pLl9fbWF4TWlwTGV2ZWw7dm9pZCAwIT09aSYmKGUubWF4TWlwTGV2ZWwudmFsdWU9aSl9bGV0IGksYTtuLmxpZ2h0TWFwJiYoZS5saWdodE1hcC52YWx1ZT1uLmxpZ2h0TWFwLGUubGlnaHRNYXBJbnRlbnNpdHkudmFsdWU9bi5saWdodE1hcEludGVuc2l0eSksbi5hb01hcCYmKGUuYW9NYXAudmFsdWU9bi5hb01hcCxlLmFvTWFwSW50ZW5zaXR5LnZhbHVlPW4uYW9NYXBJbnRlbnNpdHkpLG4ubWFwP2k9bi5tYXA6bi5zcGVjdWxhck1hcD9pPW4uc3BlY3VsYXJNYXA6bi5kaXNwbGFjZW1lbnRNYXA/aT1uLmRpc3BsYWNlbWVudE1hcDpuLm5vcm1hbE1hcD9pPW4ubm9ybWFsTWFwOm4uYnVtcE1hcD9pPW4uYnVtcE1hcDpuLnJvdWdobmVzc01hcD9pPW4ucm91Z2huZXNzTWFwOm4ubWV0YWxuZXNzTWFwP2k9bi5tZXRhbG5lc3NNYXA6bi5hbHBoYU1hcD9pPW4uYWxwaGFNYXA6bi5lbWlzc2l2ZU1hcD9pPW4uZW1pc3NpdmVNYXA6bi5jbGVhcmNvYXRNYXA/aT1uLmNsZWFyY29hdE1hcDpuLmNsZWFyY29hdE5vcm1hbE1hcD9pPW4uY2xlYXJjb2F0Tm9ybWFsTWFwOm4uY2xlYXJjb2F0Um91Z2huZXNzTWFwJiYoaT1uLmNsZWFyY29hdFJvdWdobmVzc01hcCksdm9pZCAwIT09aSYmKGkuaXNXZWJHTFJlbmRlclRhcmdldCYmKGk9aS50ZXh0dXJlKSwhMD09PWkubWF0cml4QXV0b1VwZGF0ZSYmaS51cGRhdGVNYXRyaXgoKSxlLnV2VHJhbnNmb3JtLnZhbHVlLmNvcHkoaS5tYXRyaXgpKSxuLmFvTWFwP2E9bi5hb01hcDpuLmxpZ2h0TWFwJiYoYT1uLmxpZ2h0TWFwKSx2b2lkIDAhPT1hJiYoYS5pc1dlYkdMUmVuZGVyVGFyZ2V0JiYoYT1hLnRleHR1cmUpLCEwPT09YS5tYXRyaXhBdXRvVXBkYXRlJiZhLnVwZGF0ZU1hdHJpeCgpLGUudXYyVHJhbnNmb3JtLnZhbHVlLmNvcHkoYS5tYXRyaXgpKX1mdW5jdGlvbiBuKGUsbil7ZS5yb3VnaG5lc3MudmFsdWU9bi5yb3VnaG5lc3MsZS5tZXRhbG5lc3MudmFsdWU9bi5tZXRhbG5lc3Msbi5yb3VnaG5lc3NNYXAmJihlLnJvdWdobmVzc01hcC52YWx1ZT1uLnJvdWdobmVzc01hcCksbi5tZXRhbG5lc3NNYXAmJihlLm1ldGFsbmVzc01hcC52YWx1ZT1uLm1ldGFsbmVzc01hcCksbi5lbWlzc2l2ZU1hcCYmKGUuZW1pc3NpdmVNYXAudmFsdWU9bi5lbWlzc2l2ZU1hcCksbi5idW1wTWFwJiYoZS5idW1wTWFwLnZhbHVlPW4uYnVtcE1hcCxlLmJ1bXBTY2FsZS52YWx1ZT1uLmJ1bXBTY2FsZSwxPT09bi5zaWRlJiYoZS5idW1wU2NhbGUudmFsdWUqPS0xKSksbi5ub3JtYWxNYXAmJihlLm5vcm1hbE1hcC52YWx1ZT1uLm5vcm1hbE1hcCxlLm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkobi5ub3JtYWxTY2FsZSksMT09PW4uc2lkZSYmZS5ub3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKSksbi5kaXNwbGFjZW1lbnRNYXAmJihlLmRpc3BsYWNlbWVudE1hcC52YWx1ZT1uLmRpc3BsYWNlbWVudE1hcCxlLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPW4uZGlzcGxhY2VtZW50U2NhbGUsZS5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPW4uZGlzcGxhY2VtZW50QmlhcyksdC5nZXQobikuZW52TWFwJiYoZS5lbnZNYXBJbnRlbnNpdHkudmFsdWU9bi5lbnZNYXBJbnRlbnNpdHkpfXJldHVybntyZWZyZXNoRm9nVW5pZm9ybXM6ZnVuY3Rpb24gbyh0LGUpe3QuZm9nQ29sb3IudmFsdWUuY29weShlLmNvbG9yKSxlLmlzRm9nPyh0LmZvZ05lYXIudmFsdWU9ZS5uZWFyLHQuZm9nRmFyLnZhbHVlPWUuZmFyKTplLmlzRm9nRXhwMiYmKHQuZm9nRGVuc2l0eS52YWx1ZT1lLmRlbnNpdHkpfSxyZWZyZXNoTWF0ZXJpYWxVbmlmb3JtczpmdW5jdGlvbiBpKHQsbyxhLHIpe28uaXNNZXNoQmFzaWNNYXRlcmlhbD9lKHQsbyk6by5pc01lc2hMYW1iZXJ0TWF0ZXJpYWw/KGUodCxvKSwoZnVuY3Rpb24gcyh0LGUpe2UuZW1pc3NpdmVNYXAmJih0LmVtaXNzaXZlTWFwLnZhbHVlPWUuZW1pc3NpdmVNYXApfSkodCxvKSk6by5pc01lc2hUb29uTWF0ZXJpYWw/KGUodCxvKSwoZnVuY3Rpb24gbCh0LGUpe2UuZ3JhZGllbnRNYXAmJih0LmdyYWRpZW50TWFwLnZhbHVlPWUuZ3JhZGllbnRNYXApLGUuZW1pc3NpdmVNYXAmJih0LmVtaXNzaXZlTWFwLnZhbHVlPWUuZW1pc3NpdmVNYXApLGUuYnVtcE1hcCYmKHQuYnVtcE1hcC52YWx1ZT1lLmJ1bXBNYXAsdC5idW1wU2NhbGUudmFsdWU9ZS5idW1wU2NhbGUsMT09PWUuc2lkZSYmKHQuYnVtcFNjYWxlLnZhbHVlKj0tMSkpLGUubm9ybWFsTWFwJiYodC5ub3JtYWxNYXAudmFsdWU9ZS5ub3JtYWxNYXAsdC5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KGUubm9ybWFsU2NhbGUpLDE9PT1lLnNpZGUmJnQubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLGUuZGlzcGxhY2VtZW50TWFwJiYodC5kaXNwbGFjZW1lbnRNYXAudmFsdWU9ZS5kaXNwbGFjZW1lbnRNYXAsdC5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT1lLmRpc3BsYWNlbWVudFNjYWxlLHQuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT1lLmRpc3BsYWNlbWVudEJpYXMpfSkodCxvKSk6by5pc01lc2hQaG9uZ01hdGVyaWFsPyhlKHQsbyksKGZ1bmN0aW9uIGModCxlKXt0LnNwZWN1bGFyLnZhbHVlLmNvcHkoZS5zcGVjdWxhciksdC5zaGluaW5lc3MudmFsdWU9TWF0aC5tYXgoZS5zaGluaW5lc3MsMWUtNCksZS5lbWlzc2l2ZU1hcCYmKHQuZW1pc3NpdmVNYXAudmFsdWU9ZS5lbWlzc2l2ZU1hcCksZS5idW1wTWFwJiYodC5idW1wTWFwLnZhbHVlPWUuYnVtcE1hcCx0LmJ1bXBTY2FsZS52YWx1ZT1lLmJ1bXBTY2FsZSwxPT09ZS5zaWRlJiYodC5idW1wU2NhbGUudmFsdWUqPS0xKSksZS5ub3JtYWxNYXAmJih0Lm5vcm1hbE1hcC52YWx1ZT1lLm5vcm1hbE1hcCx0Lm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoZS5ub3JtYWxTY2FsZSksMT09PWUuc2lkZSYmdC5ub3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKSksZS5kaXNwbGFjZW1lbnRNYXAmJih0LmRpc3BsYWNlbWVudE1hcC52YWx1ZT1lLmRpc3BsYWNlbWVudE1hcCx0LmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPWUuZGlzcGxhY2VtZW50U2NhbGUsdC5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPWUuZGlzcGxhY2VtZW50Qmlhcyl9KSh0LG8pKTpvLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/KGUodCxvKSxvLmlzTWVzaFBoeXNpY2FsTWF0ZXJpYWw/KGZ1bmN0aW9uIGQodCxlKXtuKHQsZSksdC5yZWZsZWN0aXZpdHkudmFsdWU9ZS5yZWZsZWN0aXZpdHksdC5jbGVhcmNvYXQudmFsdWU9ZS5jbGVhcmNvYXQsdC5jbGVhcmNvYXRSb3VnaG5lc3MudmFsdWU9ZS5jbGVhcmNvYXRSb3VnaG5lc3MsZS5zaGVlbiYmdC5zaGVlbi52YWx1ZS5jb3B5KGUuc2hlZW4pLGUuY2xlYXJjb2F0TWFwJiYodC5jbGVhcmNvYXRNYXAudmFsdWU9ZS5jbGVhcmNvYXRNYXApLGUuY2xlYXJjb2F0Um91Z2huZXNzTWFwJiYodC5jbGVhcmNvYXRSb3VnaG5lc3NNYXAudmFsdWU9ZS5jbGVhcmNvYXRSb3VnaG5lc3NNYXApLGUuY2xlYXJjb2F0Tm9ybWFsTWFwJiYodC5jbGVhcmNvYXROb3JtYWxTY2FsZS52YWx1ZS5jb3B5KGUuY2xlYXJjb2F0Tm9ybWFsU2NhbGUpLHQuY2xlYXJjb2F0Tm9ybWFsTWFwLnZhbHVlPWUuY2xlYXJjb2F0Tm9ybWFsTWFwLDE9PT1lLnNpZGUmJnQuY2xlYXJjb2F0Tm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLHQudHJhbnNtaXNzaW9uLnZhbHVlPWUudHJhbnNtaXNzaW9uLGUudHJhbnNtaXNzaW9uTWFwJiYodC50cmFuc21pc3Npb25NYXAudmFsdWU9ZS50cmFuc21pc3Npb25NYXApfSkodCxvKTpuKHQsbykpOm8uaXNNZXNoTWF0Y2FwTWF0ZXJpYWw/KGUodCxvKSwoZnVuY3Rpb24gcCh0LGUpe2UubWF0Y2FwJiYodC5tYXRjYXAudmFsdWU9ZS5tYXRjYXApLGUuYnVtcE1hcCYmKHQuYnVtcE1hcC52YWx1ZT1lLmJ1bXBNYXAsdC5idW1wU2NhbGUudmFsdWU9ZS5idW1wU2NhbGUsMT09PWUuc2lkZSYmKHQuYnVtcFNjYWxlLnZhbHVlKj0tMSkpLGUubm9ybWFsTWFwJiYodC5ub3JtYWxNYXAudmFsdWU9ZS5ub3JtYWxNYXAsdC5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KGUubm9ybWFsU2NhbGUpLDE9PT1lLnNpZGUmJnQubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLGUuZGlzcGxhY2VtZW50TWFwJiYodC5kaXNwbGFjZW1lbnRNYXAudmFsdWU9ZS5kaXNwbGFjZW1lbnRNYXAsdC5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT1lLmRpc3BsYWNlbWVudFNjYWxlLHQuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT1lLmRpc3BsYWNlbWVudEJpYXMpfSkodCxvKSk6by5pc01lc2hEZXB0aE1hdGVyaWFsPyhlKHQsbyksKGZ1bmN0aW9uIG0odCxlKXtlLmRpc3BsYWNlbWVudE1hcCYmKHQuZGlzcGxhY2VtZW50TWFwLnZhbHVlPWUuZGlzcGxhY2VtZW50TWFwLHQuZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9ZS5kaXNwbGFjZW1lbnRTY2FsZSx0LmRpc3BsYWNlbWVudEJpYXMudmFsdWU9ZS5kaXNwbGFjZW1lbnRCaWFzKX0pKHQsbykpOm8uaXNNZXNoRGlzdGFuY2VNYXRlcmlhbD8oZSh0LG8pLChmdW5jdGlvbiB1KHQsZSl7ZS5kaXNwbGFjZW1lbnRNYXAmJih0LmRpc3BsYWNlbWVudE1hcC52YWx1ZT1lLmRpc3BsYWNlbWVudE1hcCx0LmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPWUuZGlzcGxhY2VtZW50U2NhbGUsdC5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPWUuZGlzcGxhY2VtZW50QmlhcyksdC5yZWZlcmVuY2VQb3NpdGlvbi52YWx1ZS5jb3B5KGUucmVmZXJlbmNlUG9zaXRpb24pLHQubmVhckRpc3RhbmNlLnZhbHVlPWUubmVhckRpc3RhbmNlLHQuZmFyRGlzdGFuY2UudmFsdWU9ZS5mYXJEaXN0YW5jZX0pKHQsbykpOm8uaXNNZXNoTm9ybWFsTWF0ZXJpYWw/KGUodCxvKSwoZnVuY3Rpb24gZih0LGUpe2UuYnVtcE1hcCYmKHQuYnVtcE1hcC52YWx1ZT1lLmJ1bXBNYXAsdC5idW1wU2NhbGUudmFsdWU9ZS5idW1wU2NhbGUsMT09PWUuc2lkZSYmKHQuYnVtcFNjYWxlLnZhbHVlKj0tMSkpLGUubm9ybWFsTWFwJiYodC5ub3JtYWxNYXAudmFsdWU9ZS5ub3JtYWxNYXAsdC5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KGUubm9ybWFsU2NhbGUpLDE9PT1lLnNpZGUmJnQubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLGUuZGlzcGxhY2VtZW50TWFwJiYodC5kaXNwbGFjZW1lbnRNYXAudmFsdWU9ZS5kaXNwbGFjZW1lbnRNYXAsdC5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT1lLmRpc3BsYWNlbWVudFNjYWxlLHQuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT1lLmRpc3BsYWNlbWVudEJpYXMpfSkodCxvKSk6by5pc0xpbmVCYXNpY01hdGVyaWFsPygoZnVuY3Rpb24gZyh0LGUpe3QuZGlmZnVzZS52YWx1ZS5jb3B5KGUuY29sb3IpLHQub3BhY2l0eS52YWx1ZT1lLm9wYWNpdHl9KSh0LG8pLG8uaXNMaW5lRGFzaGVkTWF0ZXJpYWwmJihmdW5jdGlvbiBoKHQsZSl7dC5kYXNoU2l6ZS52YWx1ZT1lLmRhc2hTaXplLHQudG90YWxTaXplLnZhbHVlPWUuZGFzaFNpemUrZS5nYXBTaXplLHQuc2NhbGUudmFsdWU9ZS5zY2FsZX0pKHQsbykpOm8uaXNQb2ludHNNYXRlcmlhbD8oZnVuY3Rpb24gYih0LGUsbixvKXtsZXQgaTt0LmRpZmZ1c2UudmFsdWUuY29weShlLmNvbG9yKSx0Lm9wYWNpdHkudmFsdWU9ZS5vcGFjaXR5LHQuc2l6ZS52YWx1ZT1lLnNpemUqbix0LnNjYWxlLnZhbHVlPS41Km8sZS5tYXAmJih0Lm1hcC52YWx1ZT1lLm1hcCksZS5hbHBoYU1hcCYmKHQuYWxwaGFNYXAudmFsdWU9ZS5hbHBoYU1hcCksZS5tYXA/aT1lLm1hcDplLmFscGhhTWFwJiYoaT1lLmFscGhhTWFwKSx2b2lkIDAhPT1pJiYoITA9PT1pLm1hdHJpeEF1dG9VcGRhdGUmJmkudXBkYXRlTWF0cml4KCksdC51dlRyYW5zZm9ybS52YWx1ZS5jb3B5KGkubWF0cml4KSl9KSh0LG8sYSxyKTpvLmlzU3ByaXRlTWF0ZXJpYWw/KGZ1bmN0aW9uIHkodCxlKXtsZXQgbjt0LmRpZmZ1c2UudmFsdWUuY29weShlLmNvbG9yKSx0Lm9wYWNpdHkudmFsdWU9ZS5vcGFjaXR5LHQucm90YXRpb24udmFsdWU9ZS5yb3RhdGlvbixlLm1hcCYmKHQubWFwLnZhbHVlPWUubWFwKSxlLmFscGhhTWFwJiYodC5hbHBoYU1hcC52YWx1ZT1lLmFscGhhTWFwKSxlLm1hcD9uPWUubWFwOmUuYWxwaGFNYXAmJihuPWUuYWxwaGFNYXApLHZvaWQgMCE9PW4mJighMD09PW4ubWF0cml4QXV0b1VwZGF0ZSYmbi51cGRhdGVNYXRyaXgoKSx0LnV2VHJhbnNmb3JtLnZhbHVlLmNvcHkobi5tYXRyaXgpKX0pKHQsbyk6by5pc1NoYWRvd01hdGVyaWFsPyh0LmNvbG9yLnZhbHVlLmNvcHkoby5jb2xvciksdC5vcGFjaXR5LnZhbHVlPW8ub3BhY2l0eSk6by5pc1NoYWRlck1hdGVyaWFsJiYoby51bmlmb3Jtc05lZWRVcGRhdGU9ITEpfX19ZnVuY3Rpb24gSWN0KHQpe2NvbnN0IGU9dm9pZCAwIT09KHQ9dHx8e30pLmNhbnZhcz90LmNhbnZhczooZnVuY3Rpb24gbigpe2NvbnN0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiY2FudmFzIik7cmV0dXJuIHQuc3R5bGUuZGlzcGxheT0iYmxvY2siLHR9KSgpLG89dm9pZCAwIT09dC5jb250ZXh0P3QuY29udGV4dDpudWxsLGk9dm9pZCAwIT09dC5hbHBoYSYmdC5hbHBoYSxhPXZvaWQgMD09PXQuZGVwdGh8fHQuZGVwdGgscj12b2lkIDA9PT10LnN0ZW5jaWx8fHQuc3RlbmNpbCxzPXZvaWQgMCE9PXQuYW50aWFsaWFzJiZ0LmFudGlhbGlhcyxsPXZvaWQgMD09PXQucHJlbXVsdGlwbGllZEFscGhhfHx0LnByZW11bHRpcGxpZWRBbHBoYSxjPXZvaWQgMCE9PXQucHJlc2VydmVEcmF3aW5nQnVmZmVyJiZ0LnByZXNlcnZlRHJhd2luZ0J1ZmZlcixkPXZvaWQgMCE9PXQucG93ZXJQcmVmZXJlbmNlP3QucG93ZXJQcmVmZXJlbmNlOiJkZWZhdWx0IixwPXZvaWQgMCE9PXQuZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdCYmdC5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0O2xldCBtPW51bGwsdT1udWxsO2NvbnN0IGY9W107dGhpcy5kb21FbGVtZW50PWUsdGhpcy5kZWJ1Zz17Y2hlY2tTaGFkZXJFcnJvcnM6ITB9LHRoaXMuYXV0b0NsZWFyPSEwLHRoaXMuYXV0b0NsZWFyQ29sb3I9ITAsdGhpcy5hdXRvQ2xlYXJEZXB0aD0hMCx0aGlzLmF1dG9DbGVhclN0ZW5jaWw9ITAsdGhpcy5zb3J0T2JqZWN0cz0hMCx0aGlzLmNsaXBwaW5nUGxhbmVzPVtdLHRoaXMubG9jYWxDbGlwcGluZ0VuYWJsZWQ9ITEsdGhpcy5nYW1tYUZhY3Rvcj0yLHRoaXMub3V0cHV0RW5jb2Rpbmc9Tml0LHRoaXMucGh5c2ljYWxseUNvcnJlY3RMaWdodHM9ITEsdGhpcy50b25lTWFwcGluZz0wLHRoaXMudG9uZU1hcHBpbmdFeHBvc3VyZT0xLHRoaXMubWF4TW9ycGhUYXJnZXRzPTgsdGhpcy5tYXhNb3JwaE5vcm1hbHM9NDtjb25zdCBnPXRoaXM7bGV0IGg9ITEsYj1udWxsLHk9MCxfPTAsQz1udWxsLE09bnVsbCx2PS0xLHg9bnVsbDtjb25zdCBPPW5ldyBLaXQsUD1uZXcgS2l0O2xldCB3PW51bGwsaz1lLndpZHRoLFM9ZS5oZWlnaHQsRD0xLEU9bnVsbCxBPW51bGw7Y29uc3QgUj1uZXcgS2l0KDAsMCxrLFMpLFQ9bmV3IEtpdCgwLDAsayxTKTtsZXQgTj0hMTtjb25zdCBJPW5ldyBTc3Q7bGV0IHo9ITEsSD0hMTtjb25zdCBGPW5ldyBrYXQsTD1uZXcgJGl0LEI9e2JhY2tncm91bmQ6bnVsbCxmb2c6bnVsbCxlbnZpcm9ubWVudDpudWxsLG92ZXJyaWRlTWF0ZXJpYWw6bnVsbCxpc1NjZW5lOiEwfTtmdW5jdGlvbiBWKCl7cmV0dXJuIG51bGw9PT1DP0Q6MX1sZXQgaixVLFcsRyxZLHEsWixYLEssSixRLCQsdHQsZXQsbnQsb3QsaXQsYXQscnQsc3QsbHQsY3Q9bztmdW5jdGlvbiBkdCh0LG4pe2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKXtjb25zdCBpPWUuZ2V0Q29udGV4dCh0W29dLG4pO2lmKG51bGwhPT1pKXJldHVybiBpfXJldHVybiBudWxsfXRyeXtjb25zdCB0PXthbHBoYTppLGRlcHRoOmEsc3RlbmNpbDpyLGFudGlhbGlhczpzLHByZW11bHRpcGxpZWRBbHBoYTpsLHByZXNlcnZlRHJhd2luZ0J1ZmZlcjpjLHBvd2VyUHJlZmVyZW5jZTpkLGZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQ6cH07aWYoZS5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IixmdCwhMSksZS5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRyZXN0b3JlZCIsZ3QsITEpLG51bGw9PT1jdCl7Y29uc3QgZT1bIndlYmdsMiIsIndlYmdsIiwiZXhwZXJpbWVudGFsLXdlYmdsIl07aWYoITA9PT1nLmlzV2ViR0wxUmVuZGVyZXImJmUuc2hpZnQoKSxjdD1kdChlLHQpLG51bGw9PT1jdCl0aHJvdyBkdChlKT9uZXcgRXJyb3IoIkVycm9yIGNyZWF0aW5nIFdlYkdMIGNvbnRleHQgd2l0aCB5b3VyIHNlbGVjdGVkIGF0dHJpYnV0ZXMuIik6bmV3IEVycm9yKCJFcnJvciBjcmVhdGluZyBXZWJHTCBjb250ZXh0LiIpfXZvaWQgMD09PWN0LmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCYmKGN0LmdldFNoYWRlclByZWNpc2lvbkZvcm1hdD1mdW5jdGlvbigpe3JldHVybntyYW5nZU1pbjoxLHJhbmdlTWF4OjEscHJlY2lzaW9uOjF9fSl9Y2F0Y2godCl7dGhyb3cgY29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlcjogIit0Lm1lc3NhZ2UpLHR9ZnVuY3Rpb24gcHQoKXtqPW5ldyBWc3QoY3QpLFU9bmV3IEZzdChjdCxqLHQpLGouaW5pdChVKSxzdD1uZXcgRGN0KGN0LGosVSksVz1uZXcga2N0KGN0LGosVSksVy5zY2lzc29yKFAuY29weShUKS5tdWx0aXBseVNjYWxhcihEKS5mbG9vcigpKSxXLnZpZXdwb3J0KE8uY29weShSKS5tdWx0aXBseVNjYWxhcihEKS5mbG9vcigpKSxHPW5ldyBXc3QoY3QpLFk9bmV3IHVjdCxxPW5ldyBTY3QoY3QsaixXLFksVSxzdCxHKSxaPW5ldyBCc3QoZyksWD1uZXcgRXN0KGN0LFUpLGx0PW5ldyB6c3QoY3QsaixYLFUpLEs9bmV3IGpzdChjdCxYLEcsbHQpLEo9bmV3IFpzdChjdCxLLFgsRyksaXQ9bmV3IHFzdChjdCksbnQ9bmV3IExzdChZKSxRPW5ldyBtY3QoZyxaLGosVSxsdCxudCksJD1uZXcgTmN0KFkpLHR0PW5ldyBiY3QoWSksZXQ9bmV3IHhjdChqLFUpLG90PW5ldyBJc3QoZyxaLFcsSixsKSxhdD1uZXcgSHN0KGN0LGosRyxVKSxydD1uZXcgVXN0KGN0LGosRyxVKSxHLnByb2dyYW1zPVEucHJvZ3JhbXMsZy5jYXBhYmlsaXRpZXM9VSxnLmV4dGVuc2lvbnM9aixnLnByb3BlcnRpZXM9WSxnLnJlbmRlckxpc3RzPXR0LGcuc3RhdGU9VyxnLmluZm89R31wdCgpO2NvbnN0IG10PW5ldyBUY3QoZyxjdCk7dGhpcy54cj1tdDtjb25zdCB1dD1uZXcgd2N0KGcsSixVLm1heFRleHR1cmVTaXplKTtmdW5jdGlvbiBmdCh0KXt0LnByZXZlbnREZWZhdWx0KCksY29uc29sZS5sb2coIlRIUkVFLldlYkdMUmVuZGVyZXI6IENvbnRleHQgTG9zdC4iKSxoPSEwfWZ1bmN0aW9uIGd0KCl7Y29uc29sZS5sb2coIlRIUkVFLldlYkdMUmVuZGVyZXI6IENvbnRleHQgUmVzdG9yZWQuIiksaD0hMSxwdCgpfWZ1bmN0aW9uIGh0KHQpe2NvbnN0IGU9dC50YXJnZXQ7ZS5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixodCksKGZ1bmN0aW9uIG4odCl7YnQodCksWS5yZW1vdmUodCl9KShlKX1mdW5jdGlvbiBidCh0KXtjb25zdCBlPVkuZ2V0KHQpLnByb2dyYW07dm9pZCAwIT09ZSYmUS5yZWxlYXNlUHJvZ3JhbShlKX10aGlzLnNoYWRvd01hcD11dCx0aGlzLmdldENvbnRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4gY3R9LHRoaXMuZ2V0Q29udGV4dEF0dHJpYnV0ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gY3QuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKX0sdGhpcy5mb3JjZUNvbnRleHRMb3NzPWZ1bmN0aW9uKCl7Y29uc3QgdD1qLmdldCgiV0VCR0xfbG9zZV9jb250ZXh0Iik7dCYmdC5sb3NlQ29udGV4dCgpfSx0aGlzLmZvcmNlQ29udGV4dFJlc3RvcmU9ZnVuY3Rpb24oKXtjb25zdCB0PWouZ2V0KCJXRUJHTF9sb3NlX2NvbnRleHQiKTt0JiZ0LnJlc3RvcmVDb250ZXh0KCl9LHRoaXMuZ2V0UGl4ZWxSYXRpbz1mdW5jdGlvbigpe3JldHVybiBEfSx0aGlzLnNldFBpeGVsUmF0aW89ZnVuY3Rpb24odCl7dm9pZCAwIT09dCYmKEQ9dCx0aGlzLnNldFNpemUoayxTLCExKSl9LHRoaXMuZ2V0U2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKGNvbnNvbGUud2FybigiV2ViR0xSZW5kZXJlcjogLmdldHNpemUoKSBub3cgcmVxdWlyZXMgYSBWZWN0b3IyIGFzIGFuIGFyZ3VtZW50IiksdD1uZXcgVWl0KSx0LnNldChrLFMpfSx0aGlzLnNldFNpemU9ZnVuY3Rpb24odCxuLG8pe210LmlzUHJlc2VudGluZz9jb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IENhbid0IGNoYW5nZSBzaXplIHdoaWxlIFZSIGRldmljZSBpcyBwcmVzZW50aW5nLiIpOihrPXQsUz1uLGUud2lkdGg9TWF0aC5mbG9vcih0KkQpLGUuaGVpZ2h0PU1hdGguZmxvb3IobipEKSwhMSE9PW8mJihlLnN0eWxlLndpZHRoPXQrInB4IixlLnN0eWxlLmhlaWdodD1uKyJweCIpLHRoaXMuc2V0Vmlld3BvcnQoMCwwLHQsbikpfSx0aGlzLmdldERyYXdpbmdCdWZmZXJTaXplPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYoY29uc29sZS53YXJuKCJXZWJHTFJlbmRlcmVyOiAuZ2V0ZHJhd2luZ0J1ZmZlclNpemUoKSBub3cgcmVxdWlyZXMgYSBWZWN0b3IyIGFzIGFuIGFyZ3VtZW50IiksdD1uZXcgVWl0KSx0LnNldChrKkQsUypEKS5mbG9vcigpfSx0aGlzLnNldERyYXdpbmdCdWZmZXJTaXplPWZ1bmN0aW9uKHQsbixvKXtrPXQsUz1uLEQ9byxlLndpZHRoPU1hdGguZmxvb3IodCpvKSxlLmhlaWdodD1NYXRoLmZsb29yKG4qbyksdGhpcy5zZXRWaWV3cG9ydCgwLDAsdCxuKX0sdGhpcy5nZXRDdXJyZW50Vmlld3BvcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJihjb25zb2xlLndhcm4oIldlYkdMUmVuZGVyZXI6IC5nZXRDdXJyZW50Vmlld3BvcnQoKSBub3cgcmVxdWlyZXMgYSBWZWN0b3I0IGFzIGFuIGFyZ3VtZW50IiksdD1uZXcgS2l0KSx0LmNvcHkoTyl9LHRoaXMuZ2V0Vmlld3BvcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQuY29weShSKX0sdGhpcy5zZXRWaWV3cG9ydD1mdW5jdGlvbih0LGUsbixvKXt0LmlzVmVjdG9yND9SLnNldCh0LngsdC55LHQueix0LncpOlIuc2V0KHQsZSxuLG8pLFcudmlld3BvcnQoTy5jb3B5KFIpLm11bHRpcGx5U2NhbGFyKEQpLmZsb29yKCkpfSx0aGlzLmdldFNjaXNzb3I9ZnVuY3Rpb24odCl7cmV0dXJuIHQuY29weShUKX0sdGhpcy5zZXRTY2lzc29yPWZ1bmN0aW9uKHQsZSxuLG8pe3QuaXNWZWN0b3I0P1Quc2V0KHQueCx0LnksdC56LHQudyk6VC5zZXQodCxlLG4sbyksVy5zY2lzc29yKFAuY29weShUKS5tdWx0aXBseVNjYWxhcihEKS5mbG9vcigpKX0sdGhpcy5nZXRTY2lzc29yVGVzdD1mdW5jdGlvbigpe3JldHVybiBOfSx0aGlzLnNldFNjaXNzb3JUZXN0PWZ1bmN0aW9uKHQpe1cuc2V0U2Npc3NvclRlc3QoTj10KX0sdGhpcy5zZXRPcGFxdWVTb3J0PWZ1bmN0aW9uKHQpe0U9dH0sdGhpcy5zZXRUcmFuc3BhcmVudFNvcnQ9ZnVuY3Rpb24odCl7QT10fSx0aGlzLmdldENsZWFyQ29sb3I9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJihjb25zb2xlLndhcm4oIldlYkdMUmVuZGVyZXI6IC5nZXRDbGVhckNvbG9yKCkgbm93IHJlcXVpcmVzIGEgQ29sb3IgYXMgYW4gYXJndW1lbnQiKSx0PW5ldyBDcnQpLHQuY29weShvdC5nZXRDbGVhckNvbG9yKCkpfSx0aGlzLnNldENsZWFyQ29sb3I9ZnVuY3Rpb24oKXtvdC5zZXRDbGVhckNvbG9yLmFwcGx5KG90LGFyZ3VtZW50cyl9LHRoaXMuZ2V0Q2xlYXJBbHBoYT1mdW5jdGlvbigpe3JldHVybiBvdC5nZXRDbGVhckFscGhhKCl9LHRoaXMuc2V0Q2xlYXJBbHBoYT1mdW5jdGlvbigpe290LnNldENsZWFyQWxwaGEuYXBwbHkob3QsYXJndW1lbnRzKX0sdGhpcy5jbGVhcj1mdW5jdGlvbih0LGUsbil7bGV0IG89MDsodm9pZCAwPT09dHx8dCkmJihvfD0xNjM4NCksKHZvaWQgMD09PWV8fGUpJiYob3w9MjU2KSwodm9pZCAwPT09bnx8bikmJihvfD0xMDI0KSxjdC5jbGVhcihvKX0sdGhpcy5jbGVhckNvbG9yPWZ1bmN0aW9uKCl7dGhpcy5jbGVhcighMCwhMSwhMSl9LHRoaXMuY2xlYXJEZXB0aD1mdW5jdGlvbigpe3RoaXMuY2xlYXIoITEsITAsITEpfSx0aGlzLmNsZWFyU3RlbmNpbD1mdW5jdGlvbigpe3RoaXMuY2xlYXIoITEsITEsITApfSx0aGlzLmRpc3Bvc2U9ZnVuY3Rpb24oKXtlLnJlbW92ZUV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLGZ0LCExKSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dHJlc3RvcmVkIixndCwhMSksdHQuZGlzcG9zZSgpLGV0LmRpc3Bvc2UoKSxZLmRpc3Bvc2UoKSxaLmRpc3Bvc2UoKSxKLmRpc3Bvc2UoKSxsdC5kaXNwb3NlKCksbXQuZGlzcG9zZSgpLF90LnN0b3AoKX0sdGhpcy5yZW5kZXJCdWZmZXJJbW1lZGlhdGU9ZnVuY3Rpb24odCxlKXtsdC5pbml0QXR0cmlidXRlcygpO2NvbnN0IG49WS5nZXQodCk7dC5oYXNQb3NpdGlvbnMmJiFuLnBvc2l0aW9uJiYobi5wb3NpdGlvbj1jdC5jcmVhdGVCdWZmZXIoKSksdC5oYXNOb3JtYWxzJiYhbi5ub3JtYWwmJihuLm5vcm1hbD1jdC5jcmVhdGVCdWZmZXIoKSksdC5oYXNVdnMmJiFuLnV2JiYobi51dj1jdC5jcmVhdGVCdWZmZXIoKSksdC5oYXNDb2xvcnMmJiFuLmNvbG9yJiYobi5jb2xvcj1jdC5jcmVhdGVCdWZmZXIoKSk7Y29uc3Qgbz1lLmdldEF0dHJpYnV0ZXMoKTt0Lmhhc1Bvc2l0aW9ucyYmKGN0LmJpbmRCdWZmZXIoMzQ5NjIsbi5wb3NpdGlvbiksY3QuYnVmZmVyRGF0YSgzNDk2Mix0LnBvc2l0aW9uQXJyYXksMzUwNDgpLGx0LmVuYWJsZUF0dHJpYnV0ZShvLnBvc2l0aW9uKSxjdC52ZXJ0ZXhBdHRyaWJQb2ludGVyKG8ucG9zaXRpb24sMyw1MTI2LCExLDAsMCkpLHQuaGFzTm9ybWFscyYmKGN0LmJpbmRCdWZmZXIoMzQ5NjIsbi5ub3JtYWwpLGN0LmJ1ZmZlckRhdGEoMzQ5NjIsdC5ub3JtYWxBcnJheSwzNTA0OCksbHQuZW5hYmxlQXR0cmlidXRlKG8ubm9ybWFsKSxjdC52ZXJ0ZXhBdHRyaWJQb2ludGVyKG8ubm9ybWFsLDMsNTEyNiwhMSwwLDApKSx0Lmhhc1V2cyYmKGN0LmJpbmRCdWZmZXIoMzQ5NjIsbi51diksY3QuYnVmZmVyRGF0YSgzNDk2Mix0LnV2QXJyYXksMzUwNDgpLGx0LmVuYWJsZUF0dHJpYnV0ZShvLnV2KSxjdC52ZXJ0ZXhBdHRyaWJQb2ludGVyKG8udXYsMiw1MTI2LCExLDAsMCkpLHQuaGFzQ29sb3JzJiYoY3QuYmluZEJ1ZmZlcigzNDk2MixuLmNvbG9yKSxjdC5idWZmZXJEYXRhKDM0OTYyLHQuY29sb3JBcnJheSwzNTA0OCksbHQuZW5hYmxlQXR0cmlidXRlKG8uY29sb3IpLGN0LnZlcnRleEF0dHJpYlBvaW50ZXIoby5jb2xvciwzLDUxMjYsITEsMCwwKSksbHQuZGlzYWJsZVVudXNlZEF0dHJpYnV0ZXMoKSxjdC5kcmF3QXJyYXlzKDQsMCx0LmNvdW50KSx0LmNvdW50PTB9LHRoaXMucmVuZGVyQnVmZmVyRGlyZWN0PWZ1bmN0aW9uKHQsZSxuLG8saSxhKXtudWxsPT09ZSYmKGU9Qik7Y29uc3Qgcj1pLmlzTWVzaCYmaS5tYXRyaXhXb3JsZC5kZXRlcm1pbmFudCgpPDAscz1PdCh0LGUsbyxpKTtXLnNldE1hdGVyaWFsKG8scik7bGV0IGw9bi5pbmRleDtjb25zdCBjPW4uYXR0cmlidXRlcy5wb3NpdGlvbjtpZihudWxsPT09bCl7aWYodm9pZCAwPT09Y3x8MD09PWMuY291bnQpcmV0dXJufWVsc2UgaWYoMD09PWwuY291bnQpcmV0dXJuO2xldCBkLHA9MTshMD09PW8ud2lyZWZyYW1lJiYobD1LLmdldFdpcmVmcmFtZUF0dHJpYnV0ZShuKSxwPTIpLChvLm1vcnBoVGFyZ2V0c3x8by5tb3JwaE5vcm1hbHMpJiZpdC51cGRhdGUoaSxuLG8scyksbHQuc2V0dXAoaSxvLHMsbixsKTtsZXQgbT1hdDtudWxsIT09bCYmKGQ9WC5nZXQobCksbT1ydCxtLnNldEluZGV4KGQpKTtjb25zdCB1PW51bGwhPT1sP2wuY291bnQ6Yy5jb3VudCxmPW4uZHJhd1JhbmdlLnN0YXJ0KnAsZz1uLmRyYXdSYW5nZS5jb3VudCpwLGg9bnVsbCE9PWE/YS5zdGFydCpwOjAsYj1udWxsIT09YT9hLmNvdW50KnA6MS8wLHk9TWF0aC5tYXgoZixoKSxfPU1hdGgubWluKHUsZitnLGgrYiktMSxDPU1hdGgubWF4KDAsXy15KzEpO2lmKDAhPT1DKXtpZihpLmlzTWVzaCkhMD09PW8ud2lyZWZyYW1lPyhXLnNldExpbmVXaWR0aChvLndpcmVmcmFtZUxpbmV3aWR0aCpWKCkpLG0uc2V0TW9kZSgxKSk6bS5zZXRNb2RlKDQpO2Vsc2UgaWYoaS5pc0xpbmUpe2xldCB0PW8ubGluZXdpZHRoO3ZvaWQgMD09PXQmJih0PTEpLFcuc2V0TGluZVdpZHRoKHQqVigpKSxtLnNldE1vZGUoaS5pc0xpbmVTZWdtZW50cz8xOmkuaXNMaW5lTG9vcD8yOjMpfWVsc2UgaS5pc1BvaW50cz9tLnNldE1vZGUoMCk6aS5pc1Nwcml0ZSYmbS5zZXRNb2RlKDQpO2lmKGkuaXNJbnN0YW5jZWRNZXNoKW0ucmVuZGVySW5zdGFuY2VzKHksQyxpLmNvdW50KTtlbHNlIGlmKG4uaXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSl7Y29uc3QgdD1NYXRoLm1pbihuLmluc3RhbmNlQ291bnQsbi5fbWF4SW5zdGFuY2VDb3VudCk7bS5yZW5kZXJJbnN0YW5jZXMoeSxDLHQpfWVsc2UgbS5yZW5kZXIoeSxDKX19LHRoaXMuY29tcGlsZT1mdW5jdGlvbih0LGUpe3U9ZXQuZ2V0KHQpLHUuaW5pdCgpLHQudHJhdmVyc2VWaXNpYmxlKChmdW5jdGlvbih0KXt0LmlzTGlnaHQmJnQubGF5ZXJzLnRlc3QoZS5sYXllcnMpJiYodS5wdXNoTGlnaHQodCksdC5jYXN0U2hhZG93JiZ1LnB1c2hTaGFkb3codCkpfSkpLHUuc2V0dXBMaWdodHMoKTtjb25zdCBuPW5ldyBXZWFrTWFwO3QudHJhdmVyc2UoKGZ1bmN0aW9uKGUpe2NvbnN0IG89ZS5tYXRlcmlhbDtpZihvKWlmKEFycmF5LmlzQXJyYXkobykpZm9yKGxldCBpPTA7aTxvLmxlbmd0aDtpKyspe2NvbnN0IGE9b1tpXTshMT09PW4uaGFzKGEpJiYoeHQoYSx0LGUpLG4uc2V0KGEpKX1lbHNlITE9PT1uLmhhcyhvKSYmKHh0KG8sdCxlKSxuLnNldChvKSl9KSl9O2xldCB5dD1udWxsO2NvbnN0IF90PW5ldyBEc3Q7ZnVuY3Rpb24gQ3QodCxlLG4sbyl7aWYoITE9PT10LnZpc2libGUpcmV0dXJuO2lmKHQubGF5ZXJzLnRlc3QoZS5sYXllcnMpKWlmKHQuaXNHcm91cCluPXQucmVuZGVyT3JkZXI7ZWxzZSBpZih0LmlzTE9EKSEwPT09dC5hdXRvVXBkYXRlJiZ0LnVwZGF0ZShlKTtlbHNlIGlmKHQuaXNMaWdodCl1LnB1c2hMaWdodCh0KSx0LmNhc3RTaGFkb3cmJnUucHVzaFNoYWRvdyh0KTtlbHNlIGlmKHQuaXNTcHJpdGUpe2lmKCF0LmZydXN0dW1DdWxsZWR8fEkuaW50ZXJzZWN0c1Nwcml0ZSh0KSl7byYmTC5zZXRGcm9tTWF0cml4UG9zaXRpb24odC5tYXRyaXhXb3JsZCkuYXBwbHlNYXRyaXg0KEYpO2NvbnN0IGU9Si51cGRhdGUodCksaT10Lm1hdGVyaWFsO2kudmlzaWJsZSYmbS5wdXNoKHQsZSxpLG4sTC56LG51bGwpfX1lbHNlIGlmKHQuaXNJbW1lZGlhdGVSZW5kZXJPYmplY3QpbyYmTC5zZXRGcm9tTWF0cml4UG9zaXRpb24odC5tYXRyaXhXb3JsZCkuYXBwbHlNYXRyaXg0KEYpLG0ucHVzaCh0LG51bGwsdC5tYXRlcmlhbCxuLEwueixudWxsKTtlbHNlIGlmKCh0LmlzTWVzaHx8dC5pc0xpbmV8fHQuaXNQb2ludHMpJiYodC5pc1NraW5uZWRNZXNoJiZ0LnNrZWxldG9uLmZyYW1lIT09Ry5yZW5kZXIuZnJhbWUmJih0LnNrZWxldG9uLnVwZGF0ZSgpLHQuc2tlbGV0b24uZnJhbWU9Ry5yZW5kZXIuZnJhbWUpLCF0LmZydXN0dW1DdWxsZWR8fEkuaW50ZXJzZWN0c09iamVjdCh0KSkpe28mJkwuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHQubWF0cml4V29ybGQpLmFwcGx5TWF0cml4NChGKTtjb25zdCBlPUoudXBkYXRlKHQpLGk9dC5tYXRlcmlhbDtpZihBcnJheS5pc0FycmF5KGkpKXtjb25zdCBvPWUuZ3JvdXBzO2ZvcihsZXQgYT0wLHI9by5sZW5ndGg7YTxyO2ErKyl7Y29uc3Qgcj1vW2FdLHM9aVtyLm1hdGVyaWFsSW5kZXhdO3MmJnMudmlzaWJsZSYmbS5wdXNoKHQsZSxzLG4sTC56LHIpfX1lbHNlIGkudmlzaWJsZSYmbS5wdXNoKHQsZSxpLG4sTC56LG51bGwpfWNvbnN0IGk9dC5jaGlsZHJlbjtmb3IobGV0IHQ9MCxhPWkubGVuZ3RoO3Q8YTt0KyspQ3QoaVt0XSxlLG4sbyl9ZnVuY3Rpb24gTXQodCxlLG4pe2NvbnN0IG89ITA9PT1lLmlzU2NlbmU/ZS5vdmVycmlkZU1hdGVyaWFsOm51bGw7Zm9yKGxldCBpPTAsYT10Lmxlbmd0aDtpPGE7aSsrKXtjb25zdCBhPXRbaV0scj1hLm9iamVjdCxzPWEuZ2VvbWV0cnksbD1udWxsPT09bz9hLm1hdGVyaWFsOm8sYz1hLmdyb3VwO2lmKG4uaXNBcnJheUNhbWVyYSl7Y29uc3QgdD1uLmNhbWVyYXM7Zm9yKGxldCBuPTAsbz10Lmxlbmd0aDtuPG87bisrKXtjb25zdCBvPXRbbl07ci5sYXllcnMudGVzdChvLmxheWVycykmJihXLnZpZXdwb3J0KE8uY29weShvLnZpZXdwb3J0KSksdS5zZXR1cExpZ2h0c1ZpZXcobyksdnQocixlLG8scyxsLGMpKX19ZWxzZSB2dChyLGUsbixzLGwsYyl9fWZ1bmN0aW9uIHZ0KHQsZSxuLG8saSxhKXtpZih0Lm9uQmVmb3JlUmVuZGVyKGcsZSxuLG8saSxhKSx0Lm1vZGVsVmlld01hdHJpeC5tdWx0aXBseU1hdHJpY2VzKG4ubWF0cml4V29ybGRJbnZlcnNlLHQubWF0cml4V29ybGQpLHQubm9ybWFsTWF0cml4LmdldE5vcm1hbE1hdHJpeCh0Lm1vZGVsVmlld01hdHJpeCksdC5pc0ltbWVkaWF0ZVJlbmRlck9iamVjdCl7Y29uc3Qgbz1PdChuLGUsaSx0KTtXLnNldE1hdGVyaWFsKGkpLGx0LnJlc2V0KCksKGZ1bmN0aW9uIHIodCxlKXt0LnJlbmRlcigoZnVuY3Rpb24odCl7Zy5yZW5kZXJCdWZmZXJJbW1lZGlhdGUodCxlKX0pKX0pKHQsbyl9ZWxzZSBnLnJlbmRlckJ1ZmZlckRpcmVjdChuLGUsbyxpLHQsYSk7dC5vbkFmdGVyUmVuZGVyKGcsZSxuLG8saSxhKX1mdW5jdGlvbiB4dCh0LGUsbil7ITAhPT1lLmlzU2NlbmUmJihlPUIpO2NvbnN0IG89WS5nZXQodCksaT11LnN0YXRlLmxpZ2h0cyxhPWkuc3RhdGUudmVyc2lvbixyPVEuZ2V0UGFyYW1ldGVycyh0LGkuc3RhdGUsdS5zdGF0ZS5zaGFkb3dzQXJyYXksZSxuKSxzPVEuZ2V0UHJvZ3JhbUNhY2hlS2V5KHIpO2xldCBsPW8ucHJvZ3JhbSxjPSEwO2lmKG8uZW52aXJvbm1lbnQ9dC5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP2UuZW52aXJvbm1lbnQ6bnVsbCxvLmZvZz1lLmZvZyxvLmVudk1hcD1aLmdldCh0LmVudk1hcHx8by5lbnZpcm9ubWVudCksdm9pZCAwPT09bCl0LmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGh0KTtlbHNlIGlmKGwuY2FjaGVLZXkhPT1zKWJ0KHQpO2Vsc2UgaWYoby5saWdodHNTdGF0ZVZlcnNpb24hPT1hKWM9ITE7ZWxzZXtpZih2b2lkIDAhPT1yLnNoYWRlcklEKXJldHVybjtjPSExfWMmJihyLnVuaWZvcm1zPVEuZ2V0VW5pZm9ybXModCksdC5vbkJlZm9yZUNvbXBpbGUocixnKSxsPVEuYWNxdWlyZVByb2dyYW0ocixzKSxvLnByb2dyYW09bCxvLnVuaWZvcm1zPXIudW5pZm9ybXMsby5vdXRwdXRFbmNvZGluZz1yLm91dHB1dEVuY29kaW5nKTtjb25zdCBkPW8udW5pZm9ybXM7KHQuaXNTaGFkZXJNYXRlcmlhbHx8dC5pc1Jhd1NoYWRlck1hdGVyaWFsKSYmITAhPT10LmNsaXBwaW5nfHwoby5udW1DbGlwcGluZ1BsYW5lcz1udC5udW1QbGFuZXMsby5udW1JbnRlcnNlY3Rpb249bnQubnVtSW50ZXJzZWN0aW9uLGQuY2xpcHBpbmdQbGFuZXM9bnQudW5pZm9ybSksby5uZWVkc0xpZ2h0cz0oZnVuY3Rpb24gcCh0KXtyZXR1cm4gdC5pc01lc2hMYW1iZXJ0TWF0ZXJpYWx8fHQuaXNNZXNoVG9vbk1hdGVyaWFsfHx0LmlzTWVzaFBob25nTWF0ZXJpYWx8fHQuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbHx8dC5pc1NoYWRvd01hdGVyaWFsfHx0LmlzU2hhZGVyTWF0ZXJpYWwmJiEwPT09dC5saWdodHN9KSh0KSxvLmxpZ2h0c1N0YXRlVmVyc2lvbj1hLG8ubmVlZHNMaWdodHMmJihkLmFtYmllbnRMaWdodENvbG9yLnZhbHVlPWkuc3RhdGUuYW1iaWVudCxkLmxpZ2h0UHJvYmUudmFsdWU9aS5zdGF0ZS5wcm9iZSxkLmRpcmVjdGlvbmFsTGlnaHRzLnZhbHVlPWkuc3RhdGUuZGlyZWN0aW9uYWwsZC5kaXJlY3Rpb25hbExpZ2h0U2hhZG93cy52YWx1ZT1pLnN0YXRlLmRpcmVjdGlvbmFsU2hhZG93LGQuc3BvdExpZ2h0cy52YWx1ZT1pLnN0YXRlLnNwb3QsZC5zcG90TGlnaHRTaGFkb3dzLnZhbHVlPWkuc3RhdGUuc3BvdFNoYWRvdyxkLnJlY3RBcmVhTGlnaHRzLnZhbHVlPWkuc3RhdGUucmVjdEFyZWEsZC5sdGNfMS52YWx1ZT1pLnN0YXRlLnJlY3RBcmVhTFRDMSxkLmx0Y18yLnZhbHVlPWkuc3RhdGUucmVjdEFyZWFMVEMyLGQucG9pbnRMaWdodHMudmFsdWU9aS5zdGF0ZS5wb2ludCxkLnBvaW50TGlnaHRTaGFkb3dzLnZhbHVlPWkuc3RhdGUucG9pbnRTaGFkb3csZC5oZW1pc3BoZXJlTGlnaHRzLnZhbHVlPWkuc3RhdGUuaGVtaSxkLmRpcmVjdGlvbmFsU2hhZG93TWFwLnZhbHVlPWkuc3RhdGUuZGlyZWN0aW9uYWxTaGFkb3dNYXAsZC5kaXJlY3Rpb25hbFNoYWRvd01hdHJpeC52YWx1ZT1pLnN0YXRlLmRpcmVjdGlvbmFsU2hhZG93TWF0cml4LGQuc3BvdFNoYWRvd01hcC52YWx1ZT1pLnN0YXRlLnNwb3RTaGFkb3dNYXAsZC5zcG90U2hhZG93TWF0cml4LnZhbHVlPWkuc3RhdGUuc3BvdFNoYWRvd01hdHJpeCxkLnBvaW50U2hhZG93TWFwLnZhbHVlPWkuc3RhdGUucG9pbnRTaGFkb3dNYXAsZC5wb2ludFNoYWRvd01hdHJpeC52YWx1ZT1pLnN0YXRlLnBvaW50U2hhZG93TWF0cml4KTtjb25zdCBtPW8ucHJvZ3JhbS5nZXRVbmlmb3JtcygpLGY9R2x0LnNlcVdpdGhWYWx1ZShtLnNlcSxkKTtvLnVuaWZvcm1zTGlzdD1mfWZ1bmN0aW9uIE90KHQsZSxuLG8peyEwIT09ZS5pc1NjZW5lJiYoZT1CKSxxLnJlc2V0VGV4dHVyZVVuaXRzKCk7Y29uc3QgaT1lLmZvZyxhPW4uaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD9lLmVudmlyb25tZW50Om51bGwscj1udWxsPT09Qz9nLm91dHB1dEVuY29kaW5nOkMudGV4dHVyZS5lbmNvZGluZyxzPVouZ2V0KG4uZW52TWFwfHxhKSxsPVkuZ2V0KG4pLGM9dS5zdGF0ZS5saWdodHM7ITAhPT16fHwhMCE9PUgmJnQ9PT14fHxudC5zZXRTdGF0ZShuLHQsdD09PXgmJm4uaWQ9PT12KSxuLnZlcnNpb249PT1sLl9fdmVyc2lvbj9uLmZvZyYmbC5mb2chPT1pfHxsLmVudmlyb25tZW50IT09YXx8bC5uZWVkc0xpZ2h0cyYmbC5saWdodHNTdGF0ZVZlcnNpb24hPT1jLnN0YXRlLnZlcnNpb24/eHQobixlLG8pOnZvaWQgMD09PWwubnVtQ2xpcHBpbmdQbGFuZXN8fGwubnVtQ2xpcHBpbmdQbGFuZXM9PT1udC5udW1QbGFuZXMmJmwubnVtSW50ZXJzZWN0aW9uPT09bnQubnVtSW50ZXJzZWN0aW9uPyhsLm91dHB1dEVuY29kaW5nIT09cnx8bC5lbnZNYXAhPT1zKSYmeHQobixlLG8pOnh0KG4sZSxvKTooeHQobixlLG8pLGwuX192ZXJzaW9uPW4udmVyc2lvbik7bGV0IGQ9ITEscD0hMSxtPSExO2NvbnN0IGY9bC5wcm9ncmFtLGg9Zi5nZXRVbmlmb3JtcygpLGI9bC51bmlmb3JtcztpZihXLnVzZVByb2dyYW0oZi5wcm9ncmFtKSYmKGQ9ITAscD0hMCxtPSEwKSxuLmlkIT09diYmKHY9bi5pZCxwPSEwKSxkfHx4IT09dCl7aWYoaC5zZXRWYWx1ZShjdCwicHJvamVjdGlvbk1hdHJpeCIsdC5wcm9qZWN0aW9uTWF0cml4KSxVLmxvZ2FyaXRobWljRGVwdGhCdWZmZXImJmguc2V0VmFsdWUoY3QsImxvZ0RlcHRoQnVmRkMiLDIvKE1hdGgubG9nKHQuZmFyKzEpL01hdGguTE4yKSkseCE9PXQmJih4PXQscD0hMCxtPSEwKSxuLmlzU2hhZGVyTWF0ZXJpYWx8fG4uaXNNZXNoUGhvbmdNYXRlcmlhbHx8bi5pc01lc2hUb29uTWF0ZXJpYWx8fG4uaXNNZXNoU3RhbmRhcmRNYXRlcmlhbHx8bi5lbnZNYXApe2NvbnN0IGU9aC5tYXAuY2FtZXJhUG9zaXRpb247dm9pZCAwIT09ZSYmZS5zZXRWYWx1ZShjdCxMLnNldEZyb21NYXRyaXhQb3NpdGlvbih0Lm1hdHJpeFdvcmxkKSl9KG4uaXNNZXNoUGhvbmdNYXRlcmlhbHx8bi5pc01lc2hUb29uTWF0ZXJpYWx8fG4uaXNNZXNoTGFtYmVydE1hdGVyaWFsfHxuLmlzTWVzaEJhc2ljTWF0ZXJpYWx8fG4uaXNNZXNoU3RhbmRhcmRNYXRlcmlhbHx8bi5pc1NoYWRlck1hdGVyaWFsKSYmaC5zZXRWYWx1ZShjdCwiaXNPcnRob2dyYXBoaWMiLCEwPT09dC5pc09ydGhvZ3JhcGhpY0NhbWVyYSksKG4uaXNNZXNoUGhvbmdNYXRlcmlhbHx8bi5pc01lc2hUb29uTWF0ZXJpYWx8fG4uaXNNZXNoTGFtYmVydE1hdGVyaWFsfHxuLmlzTWVzaEJhc2ljTWF0ZXJpYWx8fG4uaXNNZXNoU3RhbmRhcmRNYXRlcmlhbHx8bi5pc1NoYWRlck1hdGVyaWFsfHxuLmlzU2hhZG93TWF0ZXJpYWx8fG4uc2tpbm5pbmcpJiZoLnNldFZhbHVlKGN0LCJ2aWV3TWF0cml4Iix0Lm1hdHJpeFdvcmxkSW52ZXJzZSl9aWYobi5za2lubmluZyl7aC5zZXRPcHRpb25hbChjdCxvLCJiaW5kTWF0cml4IiksaC5zZXRPcHRpb25hbChjdCxvLCJiaW5kTWF0cml4SW52ZXJzZSIpO2NvbnN0IHQ9by5za2VsZXRvbjtpZih0KXtjb25zdCBlPXQuYm9uZXM7aWYoVS5mbG9hdFZlcnRleFRleHR1cmVzKXtpZihudWxsPT09dC5ib25lVGV4dHVyZSl7bGV0IG49TWF0aC5zcXJ0KDQqZS5sZW5ndGgpO249aml0LmNlaWxQb3dlck9mVHdvKG4pLG49TWF0aC5tYXgobiw0KTtjb25zdCBvPW5ldyBGbG9hdDMyQXJyYXkobipuKjQpO28uc2V0KHQuYm9uZU1hdHJpY2VzKTtjb25zdCBpPW5ldyBQc3QobyxuLG4sUGl0LE1pdCk7dC5ib25lTWF0cmljZXM9byx0LmJvbmVUZXh0dXJlPWksdC5ib25lVGV4dHVyZVNpemU9bn1oLnNldFZhbHVlKGN0LCJib25lVGV4dHVyZSIsdC5ib25lVGV4dHVyZSxxKSxoLnNldFZhbHVlKGN0LCJib25lVGV4dHVyZVNpemUiLHQuYm9uZVRleHR1cmVTaXplKX1lbHNlIGguc2V0T3B0aW9uYWwoY3QsdCwiYm9uZU1hdHJpY2VzIil9fXJldHVybihwfHxsLnJlY2VpdmVTaGFkb3chPT1vLnJlY2VpdmVTaGFkb3cpJiYobC5yZWNlaXZlU2hhZG93PW8ucmVjZWl2ZVNoYWRvdyxoLnNldFZhbHVlKGN0LCJyZWNlaXZlU2hhZG93IixvLnJlY2VpdmVTaGFkb3cpKSxwJiYoaC5zZXRWYWx1ZShjdCwidG9uZU1hcHBpbmdFeHBvc3VyZSIsZy50b25lTWFwcGluZ0V4cG9zdXJlKSxsLm5lZWRzTGlnaHRzJiYoZnVuY3Rpb24geSh0LGUpe3QuYW1iaWVudExpZ2h0Q29sb3IubmVlZHNVcGRhdGU9ZSx0LmxpZ2h0UHJvYmUubmVlZHNVcGRhdGU9ZSx0LmRpcmVjdGlvbmFsTGlnaHRzLm5lZWRzVXBkYXRlPWUsdC5kaXJlY3Rpb25hbExpZ2h0U2hhZG93cy5uZWVkc1VwZGF0ZT1lLHQucG9pbnRMaWdodHMubmVlZHNVcGRhdGU9ZSx0LnBvaW50TGlnaHRTaGFkb3dzLm5lZWRzVXBkYXRlPWUsdC5zcG90TGlnaHRzLm5lZWRzVXBkYXRlPWUsdC5zcG90TGlnaHRTaGFkb3dzLm5lZWRzVXBkYXRlPWUsdC5yZWN0QXJlYUxpZ2h0cy5uZWVkc1VwZGF0ZT1lLHQuaGVtaXNwaGVyZUxpZ2h0cy5uZWVkc1VwZGF0ZT1lfSkoYixtKSxpJiZuLmZvZyYmJC5yZWZyZXNoRm9nVW5pZm9ybXMoYixpKSwkLnJlZnJlc2hNYXRlcmlhbFVuaWZvcm1zKGIsbixELFMpLEdsdC51cGxvYWQoY3QsbC51bmlmb3Jtc0xpc3QsYixxKSksbi5pc1NoYWRlck1hdGVyaWFsJiYhMD09PW4udW5pZm9ybXNOZWVkVXBkYXRlJiYoR2x0LnVwbG9hZChjdCxsLnVuaWZvcm1zTGlzdCxiLHEpLG4udW5pZm9ybXNOZWVkVXBkYXRlPSExKSxuLmlzU3ByaXRlTWF0ZXJpYWwmJmguc2V0VmFsdWUoY3QsImNlbnRlciIsby5jZW50ZXIpLGguc2V0VmFsdWUoY3QsIm1vZGVsVmlld01hdHJpeCIsby5tb2RlbFZpZXdNYXRyaXgpLGguc2V0VmFsdWUoY3QsIm5vcm1hbE1hdHJpeCIsby5ub3JtYWxNYXRyaXgpLGguc2V0VmFsdWUoY3QsIm1vZGVsTWF0cml4IixvLm1hdHJpeFdvcmxkKSxmfV90LnNldEFuaW1hdGlvbkxvb3AoKGZ1bmN0aW9uIFB0KHQpe210LmlzUHJlc2VudGluZ3x8eXQmJnl0KHQpfSkpLCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZfdC5zZXRDb250ZXh0KHdpbmRvdyksdGhpcy5zZXRBbmltYXRpb25Mb29wPWZ1bmN0aW9uKHQpe3l0PXQsbXQuc2V0QW5pbWF0aW9uTG9vcCh0KSxudWxsPT09dD9fdC5zdG9wKCk6X3Quc3RhcnQoKX0sdGhpcy5yZW5kZXI9ZnVuY3Rpb24odCxlKXtsZXQgbixvO2lmKHZvaWQgMCE9PWFyZ3VtZW50c1syXSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZW5kZXIoKTogdGhlIHJlbmRlclRhcmdldCBhcmd1bWVudCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnNldFJlbmRlclRhcmdldCgpIGluc3RlYWQuIiksbj1hcmd1bWVudHNbMl0pLHZvaWQgMCE9PWFyZ3VtZW50c1szXSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZW5kZXIoKTogdGhlIGZvcmNlQ2xlYXIgYXJndW1lbnQgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5jbGVhcigpIGluc3RlYWQuIiksbz1hcmd1bWVudHNbM10pLHZvaWQgMCE9PWUmJiEwIT09ZS5pc0NhbWVyYSlyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlbmRlcjogY2FtZXJhIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5DYW1lcmEuIik7aWYoITA9PT1oKXJldHVybjtsdC5yZXNldERlZmF1bHRTdGF0ZSgpLHY9LTEseD1udWxsLCEwPT09dC5hdXRvVXBkYXRlJiZ0LnVwZGF0ZU1hdHJpeFdvcmxkKCksbnVsbD09PWUucGFyZW50JiZlLnVwZGF0ZU1hdHJpeFdvcmxkKCksITA9PT1tdC5lbmFibGVkJiYhMD09PW10LmlzUHJlc2VudGluZyYmKGU9bXQuZ2V0Q2FtZXJhKGUpKSwhMD09PXQuaXNTY2VuZSYmdC5vbkJlZm9yZVJlbmRlcihnLHQsZSxufHxDKSx1PWV0LmdldCh0LGYubGVuZ3RoKSx1LmluaXQoKSxmLnB1c2godSksRi5tdWx0aXBseU1hdHJpY2VzKGUucHJvamVjdGlvbk1hdHJpeCxlLm1hdHJpeFdvcmxkSW52ZXJzZSksSS5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeChGKSxIPXRoaXMubG9jYWxDbGlwcGluZ0VuYWJsZWQsej1udC5pbml0KHRoaXMuY2xpcHBpbmdQbGFuZXMsSCxlKSxtPXR0LmdldCh0LGUpLG0uaW5pdCgpLEN0KHQsZSwwLGcuc29ydE9iamVjdHMpLG0uZmluaXNoKCksITA9PT1nLnNvcnRPYmplY3RzJiZtLnNvcnQoRSxBKSwhMD09PXomJm50LmJlZ2luU2hhZG93cygpO2NvbnN0IGk9dS5zdGF0ZS5zaGFkb3dzQXJyYXk7dXQucmVuZGVyKGksdCxlKSx1LnNldHVwTGlnaHRzKCksdS5zZXR1cExpZ2h0c1ZpZXcoZSksITA9PT16JiZudC5lbmRTaGFkb3dzKCksITA9PT10aGlzLmluZm8uYXV0b1Jlc2V0JiZ0aGlzLmluZm8ucmVzZXQoKSx2b2lkIDAhPT1uJiZ0aGlzLnNldFJlbmRlclRhcmdldChuKSxvdC5yZW5kZXIobSx0LGUsbyk7Y29uc3QgYT1tLm9wYXF1ZSxyPW0udHJhbnNwYXJlbnQ7YS5sZW5ndGg+MCYmTXQoYSx0LGUpLHIubGVuZ3RoPjAmJk10KHIsdCxlKSwhMD09PXQuaXNTY2VuZSYmdC5vbkFmdGVyUmVuZGVyKGcsdCxlKSxudWxsIT09QyYmKHEudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwKEMpLHEudXBkYXRlTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQoQykpLFcuYnVmZmVycy5kZXB0aC5zZXRUZXN0KCEwKSxXLmJ1ZmZlcnMuZGVwdGguc2V0TWFzayghMCksVy5idWZmZXJzLmNvbG9yLnNldE1hc2soITApLFcuc2V0UG9seWdvbk9mZnNldCghMSksZi5wb3AoKSx1PWYubGVuZ3RoPjA/ZltmLmxlbmd0aC0xXTpudWxsLG09bnVsbH0sdGhpcy5zZXRGcmFtZWJ1ZmZlcj1mdW5jdGlvbih0KXtiIT09dCYmbnVsbD09PUMmJmN0LmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCx0KSxiPXR9LHRoaXMuZ2V0QWN0aXZlQ3ViZUZhY2U9ZnVuY3Rpb24oKXtyZXR1cm4geX0sdGhpcy5nZXRBY3RpdmVNaXBtYXBMZXZlbD1mdW5jdGlvbigpe3JldHVybiBffSx0aGlzLmdldFJlbmRlckxpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gbX0sdGhpcy5zZXRSZW5kZXJMaXN0PWZ1bmN0aW9uKHQpe209dH0sdGhpcy5nZXRSZW5kZXJUYXJnZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gQ30sdGhpcy5zZXRSZW5kZXJUYXJnZXQ9ZnVuY3Rpb24odCxlPTAsbj0wKXtDPXQseT1lLF89bix0JiZ2b2lkIDA9PT1ZLmdldCh0KS5fX3dlYmdsRnJhbWVidWZmZXImJnEuc2V0dXBSZW5kZXJUYXJnZXQodCk7bGV0IG89YixpPSExO2lmKHQpe2NvbnN0IG49WS5nZXQodCkuX193ZWJnbEZyYW1lYnVmZmVyO3QuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQ/KG89bltlXSxpPSEwKTpvPXQuaXNXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0P1kuZ2V0KHQpLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlcjpuLE8uY29weSh0LnZpZXdwb3J0KSxQLmNvcHkodC5zY2lzc29yKSx3PXQuc2Npc3NvclRlc3R9ZWxzZSBPLmNvcHkoUikubXVsdGlwbHlTY2FsYXIoRCkuZmxvb3IoKSxQLmNvcHkoVCkubXVsdGlwbHlTY2FsYXIoRCkuZmxvb3IoKSx3PU47aWYoTSE9PW8mJihjdC5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbyksTT1vKSxXLnZpZXdwb3J0KE8pLFcuc2Npc3NvcihQKSxXLnNldFNjaXNzb3JUZXN0KHcpLGkpe2NvbnN0IG89WS5nZXQodC50ZXh0dXJlKTtjdC5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzNjA2NCwzNDA2OStlLG8uX193ZWJnbFRleHR1cmUsbil9fSx0aGlzLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM9ZnVuY3Rpb24odCxlLG4sbyxpLGEscil7aWYoIXR8fCF0LmlzV2ViR0xSZW5kZXJUYXJnZXQpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZW5kZXJUYXJnZXQgaXMgbm90IFRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0LiIpO2xldCBzPVkuZ2V0KHQpLl9fd2ViZ2xGcmFtZWJ1ZmZlcjtpZih0LmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0JiZ2b2lkIDAhPT1yJiYocz1zW3JdKSxzKXtsZXQgcj0hMTtzIT09TSYmKGN0LmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxzKSxyPSEwKTt0cnl7Y29uc3Qgcz10LnRleHR1cmUsbD1zLmZvcm1hdCxjPXMudHlwZTtpZihsIT09UGl0JiZzdC5jb252ZXJ0KGwpIT09Y3QuZ2V0UGFyYW1ldGVyKDM1NzM5KSlyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM6IHJlbmRlclRhcmdldCBpcyBub3QgaW4gUkdCQSBvciBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkIGZvcm1hdC4iKTtjb25zdCBkPWM9PT12aXQmJihqLmhhcygiRVhUX2NvbG9yX2J1ZmZlcl9oYWxmX2Zsb2F0Iil8fFUuaXNXZWJHTDImJmouaGFzKCJFWFRfY29sb3JfYnVmZmVyX2Zsb2F0IikpO2lmKCEoMTAwOT09PWN8fHN0LmNvbnZlcnQoYyk9PT1jdC5nZXRQYXJhbWV0ZXIoMzU3MzgpfHxjPT09TWl0JiYoVS5pc1dlYkdMMnx8ai5oYXMoIk9FU190ZXh0dXJlX2Zsb2F0Iil8fGouaGFzKCJXRUJHTF9jb2xvcl9idWZmZXJfZmxvYXQiKSl8fGQpKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXIucmVhZFJlbmRlclRhcmdldFBpeGVsczogcmVuZGVyVGFyZ2V0IGlzIG5vdCBpbiBVbnNpZ25lZEJ5dGVUeXBlIG9yIGltcGxlbWVudGF0aW9uIGRlZmluZWQgdHlwZS4iKTszNjA1Mz09PWN0LmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoMzYxNjApP2U+PTAmJmU8PXQud2lkdGgtbyYmbj49MCYmbjw9dC5oZWlnaHQtaSYmY3QucmVhZFBpeGVscyhlLG4sbyxpLHN0LmNvbnZlcnQobCksc3QuY29udmVydChjKSxhKTpjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM6IHJlYWRQaXhlbHMgZnJvbSByZW5kZXJUYXJnZXQgZmFpbGVkLiBGcmFtZWJ1ZmZlciBub3QgY29tcGxldGUuIil9ZmluYWxseXtyJiZjdC5iaW5kRnJhbWVidWZmZXIoMzYxNjAsTSl9fX0sdGhpcy5jb3B5RnJhbWVidWZmZXJUb1RleHR1cmU9ZnVuY3Rpb24odCxlLG49MCl7Y29uc3Qgbz1NYXRoLnBvdygyLC1uKSxpPU1hdGguZmxvb3IoZS5pbWFnZS53aWR0aCpvKSxhPU1hdGguZmxvb3IoZS5pbWFnZS5oZWlnaHQqbykscj1zdC5jb252ZXJ0KGUuZm9ybWF0KTtxLnNldFRleHR1cmUyRChlLDApLGN0LmNvcHlUZXhJbWFnZTJEKDM1NTMsbixyLHQueCx0LnksaSxhLDApLFcudW5iaW5kVGV4dHVyZSgpfSx0aGlzLmNvcHlUZXh0dXJlVG9UZXh0dXJlPWZ1bmN0aW9uKHQsZSxuLG89MCl7Y29uc3QgaT1lLmltYWdlLndpZHRoLGE9ZS5pbWFnZS5oZWlnaHQscj1zdC5jb252ZXJ0KG4uZm9ybWF0KSxzPXN0LmNvbnZlcnQobi50eXBlKTtxLnNldFRleHR1cmUyRChuLDApLGN0LnBpeGVsU3RvcmVpKDM3NDQwLG4uZmxpcFkpLGN0LnBpeGVsU3RvcmVpKDM3NDQxLG4ucHJlbXVsdGlwbHlBbHBoYSksY3QucGl4ZWxTdG9yZWkoMzMxNyxuLnVucGFja0FsaWdubWVudCksZS5pc0RhdGFUZXh0dXJlP2N0LnRleFN1YkltYWdlMkQoMzU1MyxvLHQueCx0LnksaSxhLHIscyxlLmltYWdlLmRhdGEpOmUuaXNDb21wcmVzc2VkVGV4dHVyZT9jdC5jb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCgzNTUzLG8sdC54LHQueSxlLm1pcG1hcHNbMF0ud2lkdGgsZS5taXBtYXBzWzBdLmhlaWdodCxyLGUubWlwbWFwc1swXS5kYXRhKTpjdC50ZXhTdWJJbWFnZTJEKDM1NTMsbyx0LngsdC55LHIscyxlLmltYWdlKSwwPT09byYmbi5nZW5lcmF0ZU1pcG1hcHMmJmN0LmdlbmVyYXRlTWlwbWFwKDM1NTMpLFcudW5iaW5kVGV4dHVyZSgpfSx0aGlzLmluaXRUZXh0dXJlPWZ1bmN0aW9uKHQpe3Euc2V0VGV4dHVyZTJEKHQsMCksVy51bmJpbmRUZXh0dXJlKCl9LHRoaXMucmVzZXRTdGF0ZT1mdW5jdGlvbigpe1cucmVzZXQoKSxsdC5yZXNldCgpfSwidW5kZWZpbmVkIiE9dHlwZW9mIF9fVEhSRUVfREVWVE9PTFNfXyYmX19USFJFRV9ERVZUT09MU19fLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJvYnNlcnZlIix7ZGV0YWlsOnRoaXN9KSl9ZnVuY3Rpb24gemN0KHQpe0ljdC5jYWxsKHRoaXMsdCl9KE9jdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh4cnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9T2N0LE9jdC5wcm90b3R5cGUuaXNNZXNoRGVwdGhNYXRlcmlhbD0hMCxPY3QucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24odCl7cmV0dXJuIHhydC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy5kZXB0aFBhY2tpbmc9dC5kZXB0aFBhY2tpbmcsdGhpcy5za2lubmluZz10LnNraW5uaW5nLHRoaXMubW9ycGhUYXJnZXRzPXQubW9ycGhUYXJnZXRzLHRoaXMubWFwPXQubWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzfSwoUGN0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHhydC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1QY3QsUGN0LnByb3RvdHlwZS5pc01lc2hEaXN0YW5jZU1hdGVyaWFsPSEwLFBjdC5wcm90b3R5cGUuY29weT1mdW5jdGlvbih0KXtyZXR1cm4geHJ0LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLnJlZmVyZW5jZVBvc2l0aW9uLmNvcHkodC5yZWZlcmVuY2VQb3NpdGlvbiksdGhpcy5uZWFyRGlzdGFuY2U9dC5uZWFyRGlzdGFuY2UsdGhpcy5mYXJEaXN0YW5jZT10LmZhckRpc3RhbmNlLHRoaXMuc2tpbm5pbmc9dC5za2lubmluZyx0aGlzLm1vcnBoVGFyZ2V0cz10Lm1vcnBoVGFyZ2V0cyx0aGlzLm1hcD10Lm1hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5kaXNwbGFjZW1lbnRNYXA9dC5kaXNwbGFjZW1lbnRNYXAsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT10LmRpc3BsYWNlbWVudFNjYWxlLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz10LmRpc3BsYWNlbWVudEJpYXMsdGhpc30sRWN0LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoQ3N0LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOkVjdCxpc0FycmF5Q2FtZXJhOiEwfSksQWN0LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoUWF0LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOkFjdCxpc0dyb3VwOiEwfSksT2JqZWN0LmFzc2lnbihSY3QucHJvdG90eXBlLHtjb25zdHJ1Y3RvcjpSY3QsZ2V0SGFuZFNwYWNlOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PT10aGlzLl9oYW5kJiYodGhpcy5faGFuZD1uZXcgQWN0LHRoaXMuX2hhbmQubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLl9oYW5kLnZpc2libGU9ITEsdGhpcy5faGFuZC5qb2ludHM9e30sdGhpcy5faGFuZC5pbnB1dFN0YXRlPXtwaW5jaGluZzohMX0pLHRoaXMuX2hhbmR9LGdldFRhcmdldFJheVNwYWNlOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PT10aGlzLl90YXJnZXRSYXkmJih0aGlzLl90YXJnZXRSYXk9bmV3IEFjdCx0aGlzLl90YXJnZXRSYXkubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLl90YXJnZXRSYXkudmlzaWJsZT0hMSksdGhpcy5fdGFyZ2V0UmF5fSxnZXRHcmlwU3BhY2U6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09PXRoaXMuX2dyaXAmJih0aGlzLl9ncmlwPW5ldyBBY3QsdGhpcy5fZ3JpcC5tYXRyaXhBdXRvVXBkYXRlPSExLHRoaXMuX2dyaXAudmlzaWJsZT0hMSksdGhpcy5fZ3JpcH0sZGlzcGF0Y2hFdmVudDpmdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9PXRoaXMuX3RhcmdldFJheSYmdGhpcy5fdGFyZ2V0UmF5LmRpc3BhdGNoRXZlbnQodCksbnVsbCE9PXRoaXMuX2dyaXAmJnRoaXMuX2dyaXAuZGlzcGF0Y2hFdmVudCh0KSxudWxsIT09dGhpcy5faGFuZCYmdGhpcy5faGFuZC5kaXNwYXRjaEV2ZW50KHQpLHRoaXN9LGRpc2Nvbm5lY3Q6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzY29ubmVjdGVkIixkYXRhOnR9KSxudWxsIT09dGhpcy5fdGFyZ2V0UmF5JiYodGhpcy5fdGFyZ2V0UmF5LnZpc2libGU9ITEpLG51bGwhPT10aGlzLl9ncmlwJiYodGhpcy5fZ3JpcC52aXNpYmxlPSExKSxudWxsIT09dGhpcy5faGFuZCYmKHRoaXMuX2hhbmQudmlzaWJsZT0hMSksdGhpc30sdXBkYXRlOmZ1bmN0aW9uKHQsZSxuKXtsZXQgbz1udWxsLGk9bnVsbCxhPW51bGw7Y29uc3Qgcj10aGlzLl90YXJnZXRSYXkscz10aGlzLl9ncmlwLGw9dGhpcy5faGFuZDtpZih0JiYidmlzaWJsZS1ibHVycmVkIiE9PWUuc2Vzc2lvbi52aXNpYmlsaXR5U3RhdGUpaWYobCYmdC5oYW5kKXthPSEwO2Zvcihjb25zdCBvIG9mIHQuaGFuZC52YWx1ZXMoKSl7Y29uc3QgdD1lLmdldEpvaW50UG9zZShvLG4pO2lmKHZvaWQgMD09PWwuam9pbnRzW28uam9pbnROYW1lXSl7Y29uc3QgdD1uZXcgQWN0O3QubWF0cml4QXV0b1VwZGF0ZT0hMSx0LnZpc2libGU9ITEsbC5qb2ludHNbby5qb2ludE5hbWVdPXQsbC5hZGQodCl9Y29uc3QgaT1sLmpvaW50c1tvLmpvaW50TmFtZV07bnVsbCE9PXQmJihpLm1hdHJpeC5mcm9tQXJyYXkodC50cmFuc2Zvcm0ubWF0cml4KSxpLm1hdHJpeC5kZWNvbXBvc2UoaS5wb3NpdGlvbixpLnJvdGF0aW9uLGkuc2NhbGUpLGkuam9pbnRSYWRpdXM9dC5yYWRpdXMpLGkudmlzaWJsZT1udWxsIT09dH1jb25zdCBvPWwuam9pbnRzWyJpbmRleC1maW5nZXItdGlwIl0ucG9zaXRpb24uZGlzdGFuY2VUbyhsLmpvaW50c1sidGh1bWItdGlwIl0ucG9zaXRpb24pLGk9LjAyLHI9LjAwNTtsLmlucHV0U3RhdGUucGluY2hpbmcmJm8+aStyPyhsLmlucHV0U3RhdGUucGluY2hpbmc9ITEsdGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJwaW5jaGVuZCIsaGFuZGVkbmVzczp0LmhhbmRlZG5lc3MsdGFyZ2V0OnRoaXN9KSk6IWwuaW5wdXRTdGF0ZS5waW5jaGluZyYmbzw9aS1yJiYobC5pbnB1dFN0YXRlLnBpbmNoaW5nPSEwLHRoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToicGluY2hzdGFydCIsaGFuZGVkbmVzczp0LmhhbmRlZG5lc3MsdGFyZ2V0OnRoaXN9KSl9ZWxzZSBudWxsIT09ciYmKG89ZS5nZXRQb3NlKHQudGFyZ2V0UmF5U3BhY2UsbiksbnVsbCE9PW8mJihyLm1hdHJpeC5mcm9tQXJyYXkoby50cmFuc2Zvcm0ubWF0cml4KSxyLm1hdHJpeC5kZWNvbXBvc2Uoci5wb3NpdGlvbixyLnJvdGF0aW9uLHIuc2NhbGUpKSksbnVsbCE9PXMmJnQuZ3JpcFNwYWNlJiYoaT1lLmdldFBvc2UodC5ncmlwU3BhY2UsbiksbnVsbCE9PWkmJihzLm1hdHJpeC5mcm9tQXJyYXkoaS50cmFuc2Zvcm0ubWF0cml4KSxzLm1hdHJpeC5kZWNvbXBvc2Uocy5wb3NpdGlvbixzLnJvdGF0aW9uLHMuc2NhbGUpKSk7cmV0dXJuIG51bGwhPT1yJiYoci52aXNpYmxlPW51bGwhPT1vKSxudWxsIT09cyYmKHMudmlzaWJsZT1udWxsIT09aSksbnVsbCE9PWwmJihsLnZpc2libGU9bnVsbCE9PWEpLHRoaXN9fSksT2JqZWN0LmFzc2lnbihUY3QucHJvdG90eXBlLExpdC5wcm90b3R5cGUpLHpjdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKEljdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3Rvcjp6Y3QsaXNXZWJHTDFSZW5kZXJlcjohMH0pO2NsYXNzIEhjdCBleHRlbmRzIFFhdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlzU2NlbmUiLHt2YWx1ZTohMH0pLHRoaXMudHlwZT0iU2NlbmUiLHRoaXMuYmFja2dyb3VuZD1udWxsLHRoaXMuZW52aXJvbm1lbnQ9bnVsbCx0aGlzLmZvZz1udWxsLHRoaXMub3ZlcnJpZGVNYXRlcmlhbD1udWxsLHRoaXMuYXV0b1VwZGF0ZT0hMCwidW5kZWZpbmVkIiE9dHlwZW9mIF9fVEhSRUVfREVWVE9PTFNfXyYmX19USFJFRV9ERVZUT09MU19fLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJvYnNlcnZlIix7ZGV0YWlsOnRoaXN9KSl9Y29weSh0LGUpe3JldHVybiBzdXBlci5jb3B5KHQsZSksbnVsbCE9PXQuYmFja2dyb3VuZCYmKHRoaXMuYmFja2dyb3VuZD10LmJhY2tncm91bmQuY2xvbmUoKSksbnVsbCE9PXQuZW52aXJvbm1lbnQmJih0aGlzLmVudmlyb25tZW50PXQuZW52aXJvbm1lbnQuY2xvbmUoKSksbnVsbCE9PXQuZm9nJiYodGhpcy5mb2c9dC5mb2cuY2xvbmUoKSksbnVsbCE9PXQub3ZlcnJpZGVNYXRlcmlhbCYmKHRoaXMub3ZlcnJpZGVNYXRlcmlhbD10Lm92ZXJyaWRlTWF0ZXJpYWwuY2xvbmUoKSksdGhpcy5hdXRvVXBkYXRlPXQuYXV0b1VwZGF0ZSx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9dC5tYXRyaXhBdXRvVXBkYXRlLHRoaXN9dG9KU09OKHQpe2NvbnN0IGU9c3VwZXIudG9KU09OKHQpO3JldHVybiBudWxsIT09dGhpcy5iYWNrZ3JvdW5kJiYoZS5vYmplY3QuYmFja2dyb3VuZD10aGlzLmJhY2tncm91bmQudG9KU09OKHQpKSxudWxsIT09dGhpcy5lbnZpcm9ubWVudCYmKGUub2JqZWN0LmVudmlyb25tZW50PXRoaXMuZW52aXJvbm1lbnQudG9KU09OKHQpKSxudWxsIT09dGhpcy5mb2cmJihlLm9iamVjdC5mb2c9dGhpcy5mb2cudG9KU09OKCkpLGV9fWZ1bmN0aW9uIEZjdCh0LGUpe3RoaXMuYXJyYXk9dCx0aGlzLnN0cmlkZT1lLHRoaXMuY291bnQ9dm9pZCAwIT09dD90Lmxlbmd0aC9lOjAsdGhpcy51c2FnZT16aXQsdGhpcy51cGRhdGVSYW5nZT17b2Zmc2V0OjAsY291bnQ6LTF9LHRoaXMudmVyc2lvbj0wLHRoaXMudXVpZD1qaXQuZ2VuZXJhdGVVVUlEKCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KEZjdC5wcm90b3R5cGUsIm5lZWRzVXBkYXRlIix7c2V0OmZ1bmN0aW9uKHQpeyEwPT09dCYmdGhpcy52ZXJzaW9uKyt9fSksT2JqZWN0LmFzc2lnbihGY3QucHJvdG90eXBlLHtpc0ludGVybGVhdmVkQnVmZmVyOiEwLG9uVXBsb2FkQ2FsbGJhY2s6ZnVuY3Rpb24oKXt9LHNldFVzYWdlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnVzYWdlPXQsdGhpc30sY29weTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hcnJheT1uZXcgdC5hcnJheS5jb25zdHJ1Y3Rvcih0LmFycmF5KSx0aGlzLmNvdW50PXQuY291bnQsdGhpcy5zdHJpZGU9dC5zdHJpZGUsdGhpcy51c2FnZT10LnVzYWdlLHRoaXN9LGNvcHlBdDpmdW5jdGlvbih0LGUsbil7dCo9dGhpcy5zdHJpZGUsbio9ZS5zdHJpZGU7Zm9yKGxldCBvPTAsaT10aGlzLnN0cmlkZTtvPGk7bysrKXRoaXMuYXJyYXlbdCtvXT1lLmFycmF5W24rb107cmV0dXJuIHRoaXN9LHNldDpmdW5jdGlvbih0LGU9MCl7cmV0dXJuIHRoaXMuYXJyYXkuc2V0KHQsZSksdGhpc30sY2xvbmU6ZnVuY3Rpb24odCl7dm9pZCAwPT09dC5hcnJheUJ1ZmZlcnMmJih0LmFycmF5QnVmZmVycz17fSksdm9pZCAwPT09dGhpcy5hcnJheS5idWZmZXIuX3V1aWQmJih0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZD1qaXQuZ2VuZXJhdGVVVUlEKCkpLHZvaWQgMD09PXQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXSYmKHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT10aGlzLmFycmF5LnNsaWNlKDApLmJ1ZmZlcik7Y29uc3QgZT1uZXcgRmN0KG5ldyB0aGlzLmFycmF5LmNvbnN0cnVjdG9yKHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXSksdGhpcy5zdHJpZGUpO3JldHVybiBlLnNldFVzYWdlKHRoaXMudXNhZ2UpLGV9LG9uVXBsb2FkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9uVXBsb2FkQ2FsbGJhY2s9dCx0aGlzfSx0b0pTT046ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQuYXJyYXlCdWZmZXJzJiYodC5hcnJheUJ1ZmZlcnM9e30pLHZvaWQgMD09PXRoaXMuYXJyYXkuYnVmZmVyLl91dWlkJiYodGhpcy5hcnJheS5idWZmZXIuX3V1aWQ9aml0LmdlbmVyYXRlVVVJRCgpKSx2b2lkIDA9PT10LmFycmF5QnVmZmVyc1t0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZF0mJih0LmFycmF5QnVmZmVyc1t0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZF09QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobmV3IFVpbnQzMkFycmF5KHRoaXMuYXJyYXkuYnVmZmVyKSkpLHt1dWlkOnRoaXMudXVpZCxidWZmZXI6dGhpcy5hcnJheS5idWZmZXIuX3V1aWQsdHlwZTp0aGlzLmFycmF5LmNvbnN0cnVjdG9yLm5hbWUsc3RyaWRlOnRoaXMuc3RyaWRlfX19KTtjb25zdCBMY3Q9bmV3ICRpdDtmdW5jdGlvbiBCY3QodCxlLG4sbyl7dGhpcy5uYW1lPSIiLHRoaXMuZGF0YT10LHRoaXMuaXRlbVNpemU9ZSx0aGlzLm9mZnNldD1uLHRoaXMubm9ybWFsaXplZD0hMD09PW99ZnVuY3Rpb24gVmN0KHQpe3hydC5jYWxsKHRoaXMpLHRoaXMudHlwZT0iU3ByaXRlTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IENydCgxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5yb3RhdGlvbj0wLHRoaXMuc2l6ZUF0dGVudWF0aW9uPSEwLHRoaXMudHJhbnNwYXJlbnQ9ITAsdGhpcy5zZXRWYWx1ZXModCl9bGV0IGpjdDtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhCY3QucHJvdG90eXBlLHtjb3VudDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YS5jb3VudH19LGFycmF5OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5fX0sbmVlZHNVcGRhdGU6e3NldDpmdW5jdGlvbih0KXt0aGlzLmRhdGEubmVlZHNVcGRhdGU9dH19fSksT2JqZWN0LmFzc2lnbihCY3QucHJvdG90eXBlLHtpc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlOiEwLGFwcGx5TWF0cml4NDpmdW5jdGlvbih0KXtmb3IobGV0IGU9MCxuPXRoaXMuZGF0YS5jb3VudDtlPG47ZSsrKUxjdC54PXRoaXMuZ2V0WChlKSxMY3QueT10aGlzLmdldFkoZSksTGN0Lno9dGhpcy5nZXRaKGUpLExjdC5hcHBseU1hdHJpeDQodCksdGhpcy5zZXRYWVooZSxMY3QueCxMY3QueSxMY3Queik7cmV0dXJuIHRoaXN9LHNldFg6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldF09ZSx0aGlzfSxzZXRZOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrMV09ZSx0aGlzfSxzZXRaOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrMl09ZSx0aGlzfSxzZXRXOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrM109ZSx0aGlzfSxnZXRYOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0XX0sZ2V0WTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCsxXX0sZ2V0WjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCsyXX0sZ2V0VzpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCszXX0sc2V0WFk6ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbKHQ9dCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KSswXT1lLHRoaXMuZGF0YS5hcnJheVt0KzFdPW4sdGhpc30sc2V0WFlaOmZ1bmN0aW9uKHQsZSxuLG8pe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbKHQ9dCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KSswXT1lLHRoaXMuZGF0YS5hcnJheVt0KzFdPW4sdGhpcy5kYXRhLmFycmF5W3QrMl09byx0aGlzfSxzZXRYWVpXOmZ1bmN0aW9uKHQsZSxuLG8saSl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVsodD10KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQpKzBdPWUsdGhpcy5kYXRhLmFycmF5W3QrMV09bix0aGlzLmRhdGEuYXJyYXlbdCsyXT1vLHRoaXMuZGF0YS5hcnJheVt0KzNdPWksdGhpc30sY2xvbmU6ZnVuY3Rpb24odCl7aWYodm9pZCAwPT09dCl7Y29uc29sZS5sb2coIlRIUkVFLkludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlLmNsb25lKCk6IENsb25pbmcgYW4gaW50ZXJsYXZlZCBidWZmZXIgYXR0cmlidXRlIHdpbGwgZGVpbnRlcmxlYXZlIGJ1ZmZlciBkYXRhLiIpO2NvbnN0IHQ9W107Zm9yKGxldCBlPTA7ZTx0aGlzLmNvdW50O2UrKyl7Y29uc3Qgbj1lKnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQ7Zm9yKGxldCBlPTA7ZTx0aGlzLml0ZW1TaXplO2UrKyl0LnB1c2godGhpcy5kYXRhLmFycmF5W24rZV0pfXJldHVybiBuZXcga3J0KG5ldyB0aGlzLmFycmF5LmNvbnN0cnVjdG9yKHQpLHRoaXMuaXRlbVNpemUsdGhpcy5ub3JtYWxpemVkKX1yZXR1cm4gdm9pZCAwPT09dC5pbnRlcmxlYXZlZEJ1ZmZlcnMmJih0LmludGVybGVhdmVkQnVmZmVycz17fSksdm9pZCAwPT09dC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdJiYodC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdPXRoaXMuZGF0YS5jbG9uZSh0KSksbmV3IEJjdCh0LmludGVybGVhdmVkQnVmZmVyc1t0aGlzLmRhdGEudXVpZF0sdGhpcy5pdGVtU2l6ZSx0aGlzLm9mZnNldCx0aGlzLm5vcm1hbGl6ZWQpfSx0b0pTT046ZnVuY3Rpb24odCl7aWYodm9pZCAwPT09dCl7Y29uc29sZS5sb2coIlRIUkVFLkludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlLnRvSlNPTigpOiBTZXJpYWxpemluZyBhbiBpbnRlcmxhdmVkIGJ1ZmZlciBhdHRyaWJ1dGUgd2lsbCBkZWludGVybGVhdmUgYnVmZmVyIGRhdGEuIik7Y29uc3QgdD1bXTtmb3IobGV0IGU9MDtlPHRoaXMuY291bnQ7ZSsrKXtjb25zdCBuPWUqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldDtmb3IobGV0IGU9MDtlPHRoaXMuaXRlbVNpemU7ZSsrKXQucHVzaCh0aGlzLmRhdGEuYXJyYXlbbitlXSl9cmV0dXJue2l0ZW1TaXplOnRoaXMuaXRlbVNpemUsdHlwZTp0aGlzLmFycmF5LmNvbnN0cnVjdG9yLm5hbWUsYXJyYXk6dCxub3JtYWxpemVkOnRoaXMubm9ybWFsaXplZH19cmV0dXJuIHZvaWQgMD09PXQuaW50ZXJsZWF2ZWRCdWZmZXJzJiYodC5pbnRlcmxlYXZlZEJ1ZmZlcnM9e30pLHZvaWQgMD09PXQuaW50ZXJsZWF2ZWRCdWZmZXJzW3RoaXMuZGF0YS51dWlkXSYmKHQuaW50ZXJsZWF2ZWRCdWZmZXJzW3RoaXMuZGF0YS51dWlkXT10aGlzLmRhdGEudG9KU09OKHQpKSx7aXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZTohMCxpdGVtU2l6ZTp0aGlzLml0ZW1TaXplLGRhdGE6dGhpcy5kYXRhLnV1aWQsb2Zmc2V0OnRoaXMub2Zmc2V0LG5vcm1hbGl6ZWQ6dGhpcy5ub3JtYWxpemVkfX19KSwoVmN0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHhydC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1WY3QsVmN0LnByb3RvdHlwZS5pc1Nwcml0ZU1hdGVyaWFsPSEwLFZjdC5wcm90b3R5cGUuY29weT1mdW5jdGlvbih0KXtyZXR1cm4geHJ0LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5tYXA9dC5tYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMucm90YXRpb249dC5yb3RhdGlvbix0aGlzLnNpemVBdHRlbnVhdGlvbj10LnNpemVBdHRlbnVhdGlvbix0aGlzfTtjb25zdCBVY3Q9bmV3ICRpdCxXY3Q9bmV3ICRpdCxHY3Q9bmV3ICRpdCxZY3Q9bmV3IFVpdCxxY3Q9bmV3IFVpdCxaY3Q9bmV3IGthdCxYY3Q9bmV3ICRpdCxLY3Q9bmV3ICRpdCxKY3Q9bmV3ICRpdCxRY3Q9bmV3IFVpdCwkY3Q9bmV3IFVpdCx0ZHQ9bmV3IFVpdDtmdW5jdGlvbiBlZHQodCl7aWYoUWF0LmNhbGwodGhpcyksdGhpcy50eXBlPSJTcHJpdGUiLHZvaWQgMD09PWpjdCl7amN0PW5ldyBacnQ7Y29uc3QgdD1uZXcgRmN0KG5ldyBGbG9hdDMyQXJyYXkoWy0uNSwtLjUsMCwwLDAsLjUsLS41LDAsMSwwLC41LC41LDAsMSwxLC0uNSwuNSwwLDAsMV0pLDUpO2pjdC5zZXRJbmRleChbMCwxLDIsMCwyLDNdKSxqY3Quc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IEJjdCh0LDMsMCwhMSkpLGpjdC5zZXRBdHRyaWJ1dGUoInV2IixuZXcgQmN0KHQsMiwzLCExKSl9dGhpcy5nZW9tZXRyeT1qY3QsdGhpcy5tYXRlcmlhbD12b2lkIDAhPT10P3Q6bmV3IFZjdCx0aGlzLmNlbnRlcj1uZXcgVWl0KC41LC41KX1mdW5jdGlvbiBuZHQodCxlLG4sbyxpLGEpe1ljdC5zdWJWZWN0b3JzKHQsbikuYWRkU2NhbGFyKC41KS5tdWx0aXBseShvKSx2b2lkIDAhPT1pPyhxY3QueD1hKlljdC54LWkqWWN0LnkscWN0Lnk9aSpZY3QueCthKlljdC55KTpxY3QuY29weShZY3QpLHQuY29weShlKSx0LngrPXFjdC54LHQueSs9cWN0LnksdC5hcHBseU1hdHJpeDQoWmN0KX1lZHQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShRYXQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6ZWR0LGlzU3ByaXRlOiEwLHJheWNhc3Q6ZnVuY3Rpb24odCxlKXtudWxsPT09dC5jYW1lcmEmJmNvbnNvbGUuZXJyb3IoJ1RIUkVFLlNwcml0ZTogIlJheWNhc3Rlci5jYW1lcmEiIG5lZWRzIHRvIGJlIHNldCBpbiBvcmRlciB0byByYXljYXN0IGFnYWluc3Qgc3ByaXRlcy4nKSxXY3Quc2V0RnJvbU1hdHJpeFNjYWxlKHRoaXMubWF0cml4V29ybGQpLFpjdC5jb3B5KHQuY2FtZXJhLm1hdHJpeFdvcmxkKSx0aGlzLm1vZGVsVmlld01hdHJpeC5tdWx0aXBseU1hdHJpY2VzKHQuY2FtZXJhLm1hdHJpeFdvcmxkSW52ZXJzZSx0aGlzLm1hdHJpeFdvcmxkKSxHY3Quc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubW9kZWxWaWV3TWF0cml4KSx0LmNhbWVyYS5pc1BlcnNwZWN0aXZlQ2FtZXJhJiYhMT09PXRoaXMubWF0ZXJpYWwuc2l6ZUF0dGVudWF0aW9uJiZXY3QubXVsdGlwbHlTY2FsYXIoLUdjdC56KTtjb25zdCBuPXRoaXMubWF0ZXJpYWwucm90YXRpb247bGV0IG8saTswIT09biYmKGk9TWF0aC5jb3Mobiksbz1NYXRoLnNpbihuKSk7Y29uc3QgYT10aGlzLmNlbnRlcjtuZHQoWGN0LnNldCgtLjUsLS41LDApLEdjdCxhLFdjdCxvLGkpLG5kdChLY3Quc2V0KC41LC0uNSwwKSxHY3QsYSxXY3QsbyxpKSxuZHQoSmN0LnNldCguNSwuNSwwKSxHY3QsYSxXY3QsbyxpKSxRY3Quc2V0KDAsMCksJGN0LnNldCgxLDApLHRkdC5zZXQoMSwxKTtsZXQgcj10LnJheS5pbnRlcnNlY3RUcmlhbmdsZShYY3QsS2N0LEpjdCwhMSxVY3QpO2lmKG51bGw9PT1yJiYobmR0KEtjdC5zZXQoLS41LC41LDApLEdjdCxhLFdjdCxvLGkpLCRjdC5zZXQoMCwxKSxyPXQucmF5LmludGVyc2VjdFRyaWFuZ2xlKFhjdCxKY3QsS2N0LCExLFVjdCksbnVsbD09PXIpKXJldHVybjtjb25zdCBzPXQucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKFVjdCk7czx0Lm5lYXJ8fHM+dC5mYXJ8fGUucHVzaCh7ZGlzdGFuY2U6cyxwb2ludDpVY3QuY2xvbmUoKSx1djp1cnQuZ2V0VVYoVWN0LFhjdCxLY3QsSmN0LFFjdCwkY3QsdGR0LG5ldyBVaXQpLGZhY2U6bnVsbCxvYmplY3Q6dGhpc30pfSxjb3B5OmZ1bmN0aW9uKHQpe3JldHVybiBRYXQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHZvaWQgMCE9PXQuY2VudGVyJiZ0aGlzLmNlbnRlci5jb3B5KHQuY2VudGVyKSx0aGlzLm1hdGVyaWFsPXQubWF0ZXJpYWwsdGhpc319KTtjb25zdCBvZHQ9bmV3ICRpdCxpZHQ9bmV3ICRpdDtmdW5jdGlvbiBhZHQoKXtRYXQuY2FsbCh0aGlzKSx0aGlzLl9jdXJyZW50TGV2ZWw9MCx0aGlzLnR5cGU9IkxPRCIsT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7bGV2ZWxzOntlbnVtZXJhYmxlOiEwLHZhbHVlOltdfX0pLHRoaXMuYXV0b1VwZGF0ZT0hMH1hZHQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShRYXQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6YWR0LGlzTE9EOiEwLGNvcHk6ZnVuY3Rpb24odCl7UWF0LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0LCExKTtjb25zdCBlPXQubGV2ZWxzO2ZvcihsZXQgdD0wLG49ZS5sZW5ndGg7dDxuO3QrKyl7Y29uc3Qgbj1lW3RdO3RoaXMuYWRkTGV2ZWwobi5vYmplY3QuY2xvbmUoKSxuLmRpc3RhbmNlKX1yZXR1cm4gdGhpcy5hdXRvVXBkYXRlPXQuYXV0b1VwZGF0ZSx0aGlzfSxhZGRMZXZlbDpmdW5jdGlvbih0LGU9MCl7ZT1NYXRoLmFicyhlKTtjb25zdCBuPXRoaXMubGV2ZWxzO2xldCBvO2ZvcihvPTA7bzxuLmxlbmd0aCYmIShlPG5bb10uZGlzdGFuY2UpO28rKyk7cmV0dXJuIG4uc3BsaWNlKG8sMCx7ZGlzdGFuY2U6ZSxvYmplY3Q6dH0pLHRoaXMuYWRkKHQpLHRoaXN9LGdldEN1cnJlbnRMZXZlbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jdXJyZW50TGV2ZWx9LGdldE9iamVjdEZvckRpc3RhbmNlOmZ1bmN0aW9uKHQpe2NvbnN0IGU9dGhpcy5sZXZlbHM7aWYoZS5sZW5ndGg+MCl7bGV0IG4sbztmb3Iobj0xLG89ZS5sZW5ndGg7bjxvJiYhKHQ8ZVtuXS5kaXN0YW5jZSk7bisrKTtyZXR1cm4gZVtuLTFdLm9iamVjdH1yZXR1cm4gbnVsbH0scmF5Y2FzdDpmdW5jdGlvbih0LGUpe2lmKHRoaXMubGV2ZWxzLmxlbmd0aD4wKXtvZHQuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubWF0cml4V29ybGQpO2NvbnN0IG49dC5yYXkub3JpZ2luLmRpc3RhbmNlVG8ob2R0KTt0aGlzLmdldE9iamVjdEZvckRpc3RhbmNlKG4pLnJheWNhc3QodCxlKX19LHVwZGF0ZTpmdW5jdGlvbih0KXtjb25zdCBlPXRoaXMubGV2ZWxzO2lmKGUubGVuZ3RoPjEpe29kdC5zZXRGcm9tTWF0cml4UG9zaXRpb24odC5tYXRyaXhXb3JsZCksaWR0LnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1hdHJpeFdvcmxkKTtjb25zdCBuPW9kdC5kaXN0YW5jZVRvKGlkdCkvdC56b29tO2xldCBvLGk7Zm9yKGVbMF0ub2JqZWN0LnZpc2libGU9ITAsbz0xLGk9ZS5sZW5ndGg7bzxpJiZuPj1lW29dLmRpc3RhbmNlO28rKyllW28tMV0ub2JqZWN0LnZpc2libGU9ITEsZVtvXS5vYmplY3QudmlzaWJsZT0hMDtmb3IodGhpcy5fY3VycmVudExldmVsPW8tMTtvPGk7bysrKWVbb10ub2JqZWN0LnZpc2libGU9ITF9fSx0b0pTT046ZnVuY3Rpb24odCl7Y29uc3QgZT1RYXQucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMsdCk7ITE9PT10aGlzLmF1dG9VcGRhdGUmJihlLm9iamVjdC5hdXRvVXBkYXRlPSExKSxlLm9iamVjdC5sZXZlbHM9W107Y29uc3Qgbj10aGlzLmxldmVscztmb3IobGV0IHQ9MCxvPW4ubGVuZ3RoO3Q8bzt0Kyspe2NvbnN0IG89blt0XTtlLm9iamVjdC5sZXZlbHMucHVzaCh7b2JqZWN0Om8ub2JqZWN0LnV1aWQsZGlzdGFuY2U6by5kaXN0YW5jZX0pfXJldHVybiBlfX0pO2NvbnN0IHJkdD1uZXcgJGl0LHNkdD1uZXcgS2l0LGxkdD1uZXcgS2l0LGNkdD1uZXcgJGl0LGRkdD1uZXcga2F0O2Z1bmN0aW9uIHBkdCh0LGUpe3QmJnQuaXNHZW9tZXRyeSYmY29uc29sZS5lcnJvcigiVEhSRUUuU2tpbm5lZE1lc2ggbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKSxtc3QuY2FsbCh0aGlzLHQsZSksdGhpcy50eXBlPSJTa2lubmVkTWVzaCIsdGhpcy5iaW5kTW9kZT0iYXR0YWNoZWQiLHRoaXMuYmluZE1hdHJpeD1uZXcga2F0LHRoaXMuYmluZE1hdHJpeEludmVyc2U9bmV3IGthdH1mdW5jdGlvbiBtZHQoKXtRYXQuY2FsbCh0aGlzKSx0aGlzLnR5cGU9IkJvbmUifXBkdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKG1zdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpwZHQsaXNTa2lubmVkTWVzaDohMCxjb3B5OmZ1bmN0aW9uKHQpe3JldHVybiBtc3QucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMuYmluZE1vZGU9dC5iaW5kTW9kZSx0aGlzLmJpbmRNYXRyaXguY29weSh0LmJpbmRNYXRyaXgpLHRoaXMuYmluZE1hdHJpeEludmVyc2UuY29weSh0LmJpbmRNYXRyaXhJbnZlcnNlKSx0aGlzLnNrZWxldG9uPXQuc2tlbGV0b24sdGhpc30sYmluZDpmdW5jdGlvbih0LGUpe3RoaXMuc2tlbGV0b249dCx2b2lkIDA9PT1lJiYodGhpcy51cGRhdGVNYXRyaXhXb3JsZCghMCksdGhpcy5za2VsZXRvbi5jYWxjdWxhdGVJbnZlcnNlcygpLGU9dGhpcy5tYXRyaXhXb3JsZCksdGhpcy5iaW5kTWF0cml4LmNvcHkoZSksdGhpcy5iaW5kTWF0cml4SW52ZXJzZS5jb3B5KGUpLmludmVydCgpfSxwb3NlOmZ1bmN0aW9uKCl7dGhpcy5za2VsZXRvbi5wb3NlKCl9LG5vcm1hbGl6ZVNraW5XZWlnaHRzOmZ1bmN0aW9uKCl7Y29uc3QgdD1uZXcgS2l0LGU9dGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLnNraW5XZWlnaHQ7Zm9yKGxldCBuPTAsbz1lLmNvdW50O248bztuKyspe3QueD1lLmdldFgobiksdC55PWUuZ2V0WShuKSx0Lno9ZS5nZXRaKG4pLHQudz1lLmdldFcobik7Y29uc3Qgbz0xL3QubWFuaGF0dGFuTGVuZ3RoKCk7byE9PTEvMD90Lm11bHRpcGx5U2NhbGFyKG8pOnQuc2V0KDEsMCwwLDApLGUuc2V0WFlaVyhuLHQueCx0LnksdC56LHQudyl9fSx1cGRhdGVNYXRyaXhXb3JsZDpmdW5jdGlvbih0KXttc3QucHJvdG90eXBlLnVwZGF0ZU1hdHJpeFdvcmxkLmNhbGwodGhpcyx0KSwiYXR0YWNoZWQiPT09dGhpcy5iaW5kTW9kZT90aGlzLmJpbmRNYXRyaXhJbnZlcnNlLmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCk6ImRldGFjaGVkIj09PXRoaXMuYmluZE1vZGU/dGhpcy5iaW5kTWF0cml4SW52ZXJzZS5jb3B5KHRoaXMuYmluZE1hdHJpeCkuaW52ZXJ0KCk6Y29uc29sZS53YXJuKCJUSFJFRS5Ta2lubmVkTWVzaDogVW5yZWNvZ25pemVkIGJpbmRNb2RlOiAiK3RoaXMuYmluZE1vZGUpfSxib25lVHJhbnNmb3JtOmZ1bmN0aW9uKHQsZSl7Y29uc3Qgbj10aGlzLnNrZWxldG9uLG89dGhpcy5nZW9tZXRyeTtzZHQuZnJvbUJ1ZmZlckF0dHJpYnV0ZShvLmF0dHJpYnV0ZXMuc2tpbkluZGV4LHQpLGxkdC5mcm9tQnVmZmVyQXR0cmlidXRlKG8uYXR0cmlidXRlcy5za2luV2VpZ2h0LHQpLHJkdC5mcm9tQnVmZmVyQXR0cmlidXRlKG8uYXR0cmlidXRlcy5wb3NpdGlvbix0KS5hcHBseU1hdHJpeDQodGhpcy5iaW5kTWF0cml4KSxlLnNldCgwLDAsMCk7Zm9yKGxldCB0PTA7dDw0O3QrKyl7Y29uc3Qgbz1sZHQuZ2V0Q29tcG9uZW50KHQpO2lmKDAhPT1vKXtjb25zdCBpPXNkdC5nZXRDb21wb25lbnQodCk7ZGR0Lm11bHRpcGx5TWF0cmljZXMobi5ib25lc1tpXS5tYXRyaXhXb3JsZCxuLmJvbmVJbnZlcnNlc1tpXSksZS5hZGRTY2FsZWRWZWN0b3IoY2R0LmNvcHkocmR0KS5hcHBseU1hdHJpeDQoZGR0KSxvKX19cmV0dXJuIGUuYXBwbHlNYXRyaXg0KHRoaXMuYmluZE1hdHJpeEludmVyc2UpfX0pLG1kdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKFFhdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjptZHQsaXNCb25lOiEwfSk7Y29uc3QgdWR0PW5ldyBrYXQsZmR0PW5ldyBrYXQ7ZnVuY3Rpb24gZ2R0KHQ9W10sZT1bXSl7dGhpcy51dWlkPWppdC5nZW5lcmF0ZVVVSUQoKSx0aGlzLmJvbmVzPXQuc2xpY2UoMCksdGhpcy5ib25lSW52ZXJzZXM9ZSx0aGlzLmJvbmVNYXRyaWNlcz1udWxsLHRoaXMuYm9uZVRleHR1cmU9bnVsbCx0aGlzLmJvbmVUZXh0dXJlU2l6ZT0wLHRoaXMuZnJhbWU9LTEsdGhpcy5pbml0KCl9T2JqZWN0LmFzc2lnbihnZHQucHJvdG90eXBlLHtpbml0OmZ1bmN0aW9uKCl7Y29uc3QgdD10aGlzLmJvbmVzLGU9dGhpcy5ib25lSW52ZXJzZXM7aWYodGhpcy5ib25lTWF0cmljZXM9bmV3IEZsb2F0MzJBcnJheSgxNip0Lmxlbmd0aCksMD09PWUubGVuZ3RoKXRoaXMuY2FsY3VsYXRlSW52ZXJzZXMoKTtlbHNlIGlmKHQubGVuZ3RoIT09ZS5sZW5ndGgpe2NvbnNvbGUud2FybigiVEhSRUUuU2tlbGV0b246IE51bWJlciBvZiBpbnZlcnNlIGJvbmUgbWF0cmljZXMgZG9lcyBub3QgbWF0Y2ggYW1vdW50IG9mIGJvbmVzLiIpLHRoaXMuYm9uZUludmVyc2VzPVtdO2ZvcihsZXQgdD0wLGU9dGhpcy5ib25lcy5sZW5ndGg7dDxlO3QrKyl0aGlzLmJvbmVJbnZlcnNlcy5wdXNoKG5ldyBrYXQpfX0sY2FsY3VsYXRlSW52ZXJzZXM6ZnVuY3Rpb24oKXt0aGlzLmJvbmVJbnZlcnNlcy5sZW5ndGg9MDtmb3IobGV0IHQ9MCxlPXRoaXMuYm9uZXMubGVuZ3RoO3Q8ZTt0Kyspe2NvbnN0IGU9bmV3IGthdDt0aGlzLmJvbmVzW3RdJiZlLmNvcHkodGhpcy5ib25lc1t0XS5tYXRyaXhXb3JsZCkuaW52ZXJ0KCksdGhpcy5ib25lSW52ZXJzZXMucHVzaChlKX19LHBvc2U6ZnVuY3Rpb24oKXtmb3IobGV0IHQ9MCxlPXRoaXMuYm9uZXMubGVuZ3RoO3Q8ZTt0Kyspe2NvbnN0IGU9dGhpcy5ib25lc1t0XTtlJiZlLm1hdHJpeFdvcmxkLmNvcHkodGhpcy5ib25lSW52ZXJzZXNbdF0pLmludmVydCgpfWZvcihsZXQgdD0wLGU9dGhpcy5ib25lcy5sZW5ndGg7dDxlO3QrKyl7Y29uc3QgZT10aGlzLmJvbmVzW3RdO2UmJihlLnBhcmVudCYmZS5wYXJlbnQuaXNCb25lPyhlLm1hdHJpeC5jb3B5KGUucGFyZW50Lm1hdHJpeFdvcmxkKS5pbnZlcnQoKSxlLm1hdHJpeC5tdWx0aXBseShlLm1hdHJpeFdvcmxkKSk6ZS5tYXRyaXguY29weShlLm1hdHJpeFdvcmxkKSxlLm1hdHJpeC5kZWNvbXBvc2UoZS5wb3NpdGlvbixlLnF1YXRlcm5pb24sZS5zY2FsZSkpfX0sdXBkYXRlOmZ1bmN0aW9uKCl7Y29uc3QgdD10aGlzLmJvbmVzLGU9dGhpcy5ib25lSW52ZXJzZXMsbj10aGlzLmJvbmVNYXRyaWNlcyxvPXRoaXMuYm9uZVRleHR1cmU7Zm9yKGxldCBvPTAsaT10Lmxlbmd0aDtvPGk7bysrKXVkdC5tdWx0aXBseU1hdHJpY2VzKHRbb10/dFtvXS5tYXRyaXhXb3JsZDpmZHQsZVtvXSksdWR0LnRvQXJyYXkobiwxNipvKTtudWxsIT09byYmKG8ubmVlZHNVcGRhdGU9ITApfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybiBuZXcgZ2R0KHRoaXMuYm9uZXMsdGhpcy5ib25lSW52ZXJzZXMpfSxnZXRCb25lQnlOYW1lOmZ1bmN0aW9uKHQpe2ZvcihsZXQgZT0wLG49dGhpcy5ib25lcy5sZW5ndGg7ZTxuO2UrKyl7Y29uc3Qgbj10aGlzLmJvbmVzW2VdO2lmKG4ubmFtZT09PXQpcmV0dXJuIG59fSxkaXNwb3NlOmZ1bmN0aW9uKCl7bnVsbCE9PXRoaXMuYm9uZVRleHR1cmUmJih0aGlzLmJvbmVUZXh0dXJlLmRpc3Bvc2UoKSx0aGlzLmJvbmVUZXh0dXJlPW51bGwpfSxmcm9tSlNPTjpmdW5jdGlvbih0LGUpe3RoaXMudXVpZD10LnV1aWQ7Zm9yKGxldCBuPTAsbz10LmJvbmVzLmxlbmd0aDtuPG87bisrKXtjb25zdCBvPXQuYm9uZXNbbl07bGV0IGk9ZVtvXTt2b2lkIDA9PT1pJiYoY29uc29sZS53YXJuKCJUSFJFRS5Ta2VsZXRvbjogTm8gYm9uZSBmb3VuZCB3aXRoIFVVSUQ6IixvKSxpPW5ldyBtZHQpLHRoaXMuYm9uZXMucHVzaChpKSx0aGlzLmJvbmVJbnZlcnNlcy5wdXNoKChuZXcga2F0KS5mcm9tQXJyYXkodC5ib25lSW52ZXJzZXNbbl0pKX1yZXR1cm4gdGhpcy5pbml0KCksdGhpc30sdG9KU09OOmZ1bmN0aW9uKCl7Y29uc3QgdD17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6IlNrZWxldG9uIixnZW5lcmF0b3I6IlNrZWxldG9uLnRvSlNPTiJ9LGJvbmVzOltdLGJvbmVJbnZlcnNlczpbXX07dC51dWlkPXRoaXMudXVpZDtjb25zdCBlPXRoaXMuYm9uZXMsbj10aGlzLmJvbmVJbnZlcnNlcztmb3IobGV0IG89MCxpPWUubGVuZ3RoO288aTtvKyspdC5ib25lcy5wdXNoKGVbb10udXVpZCksdC5ib25lSW52ZXJzZXMucHVzaChuW29dLnRvQXJyYXkoKSk7cmV0dXJuIHR9fSk7Y29uc3QgaGR0PW5ldyBrYXQsYmR0PW5ldyBrYXQseWR0PVtdLF9kdD1uZXcgbXN0O2Z1bmN0aW9uIENkdCh0LGUsbil7bXN0LmNhbGwodGhpcyx0LGUpLHRoaXMuaW5zdGFuY2VNYXRyaXg9bmV3IGtydChuZXcgRmxvYXQzMkFycmF5KDE2Km4pLDE2KSx0aGlzLmluc3RhbmNlQ29sb3I9bnVsbCx0aGlzLmNvdW50PW4sdGhpcy5mcnVzdHVtQ3VsbGVkPSExfWZ1bmN0aW9uIE1kdCh0KXt4cnQuY2FsbCh0aGlzKSx0aGlzLnR5cGU9IkxpbmVCYXNpY01hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBDcnQoMTY3NzcyMTUpLHRoaXMubGluZXdpZHRoPTEsdGhpcy5saW5lY2FwPSJyb3VuZCIsdGhpcy5saW5lam9pbj0icm91bmQiLHRoaXMubW9ycGhUYXJnZXRzPSExLHRoaXMuc2V0VmFsdWVzKHQpfUNkdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKG1zdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpDZHQsaXNJbnN0YW5jZWRNZXNoOiEwLGNvcHk6ZnVuY3Rpb24odCl7cmV0dXJuIG1zdC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy5pbnN0YW5jZU1hdHJpeC5jb3B5KHQuaW5zdGFuY2VNYXRyaXgpLG51bGwhPT10Lmluc3RhbmNlQ29sb3ImJih0aGlzLmluc3RhbmNlQ29sb3I9dC5pbnN0YW5jZUNvbG9yLmNsb25lKCkpLHRoaXMuY291bnQ9dC5jb3VudCx0aGlzfSxnZXRDb2xvckF0OmZ1bmN0aW9uKHQsZSl7ZS5mcm9tQXJyYXkodGhpcy5pbnN0YW5jZUNvbG9yLmFycmF5LDMqdCl9LGdldE1hdHJpeEF0OmZ1bmN0aW9uKHQsZSl7ZS5mcm9tQXJyYXkodGhpcy5pbnN0YW5jZU1hdHJpeC5hcnJheSwxNip0KX0scmF5Y2FzdDpmdW5jdGlvbih0LGUpe2NvbnN0IG49dGhpcy5tYXRyaXhXb3JsZCxvPXRoaXMuY291bnQ7aWYoX2R0Lmdlb21ldHJ5PXRoaXMuZ2VvbWV0cnksX2R0Lm1hdGVyaWFsPXRoaXMubWF0ZXJpYWwsdm9pZCAwIT09X2R0Lm1hdGVyaWFsKWZvcihsZXQgaT0wO2k8bztpKyspe3RoaXMuZ2V0TWF0cml4QXQoaSxoZHQpLGJkdC5tdWx0aXBseU1hdHJpY2VzKG4saGR0KSxfZHQubWF0cml4V29ybGQ9YmR0LF9kdC5yYXljYXN0KHQseWR0KTtmb3IobGV0IHQ9MCxuPXlkdC5sZW5ndGg7dDxuO3QrKyl7Y29uc3Qgbj15ZHRbdF07bi5pbnN0YW5jZUlkPWksbi5vYmplY3Q9dGhpcyxlLnB1c2gobil9eWR0Lmxlbmd0aD0wfX0sc2V0Q29sb3JBdDpmdW5jdGlvbih0LGUpe251bGw9PT10aGlzLmluc3RhbmNlQ29sb3ImJih0aGlzLmluc3RhbmNlQ29sb3I9bmV3IGtydChuZXcgRmxvYXQzMkFycmF5KDMqdGhpcy5jb3VudCksMykpLGUudG9BcnJheSh0aGlzLmluc3RhbmNlQ29sb3IuYXJyYXksMyp0KX0sc2V0TWF0cml4QXQ6ZnVuY3Rpb24odCxlKXtlLnRvQXJyYXkodGhpcy5pbnN0YW5jZU1hdHJpeC5hcnJheSwxNip0KX0sdXBkYXRlTW9ycGhUYXJnZXRzOmZ1bmN0aW9uKCl7fSxkaXNwb3NlOmZ1bmN0aW9uKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfX0pLChNZHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeHJ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPU1kdCxNZHQucHJvdG90eXBlLmlzTGluZUJhc2ljTWF0ZXJpYWw9ITAsTWR0LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHQpe3JldHVybiB4cnQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLmxpbmV3aWR0aD10LmxpbmV3aWR0aCx0aGlzLmxpbmVjYXA9dC5saW5lY2FwLHRoaXMubGluZWpvaW49dC5saW5lam9pbix0aGlzLm1vcnBoVGFyZ2V0cz10Lm1vcnBoVGFyZ2V0cyx0aGlzfTtjb25zdCB2ZHQ9bmV3ICRpdCx4ZHQ9bmV3ICRpdCxPZHQ9bmV3IGthdCxQZHQ9bmV3IHdhdCx3ZHQ9bmV3IHlhdDtmdW5jdGlvbiBrZHQodD1uZXcgWnJ0LGU9bmV3IE1kdCl7UWF0LmNhbGwodGhpcyksdGhpcy50eXBlPSJMaW5lIix0aGlzLmdlb21ldHJ5PXQsdGhpcy5tYXRlcmlhbD1lLHRoaXMudXBkYXRlTW9ycGhUYXJnZXRzKCl9a2R0LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoUWF0LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOmtkdCxpc0xpbmU6ITAsY29weTpmdW5jdGlvbih0KXtyZXR1cm4gUWF0LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLm1hdGVyaWFsPXQubWF0ZXJpYWwsdGhpcy5nZW9tZXRyeT10Lmdlb21ldHJ5LHRoaXN9LGNvbXB1dGVMaW5lRGlzdGFuY2VzOmZ1bmN0aW9uKCl7Y29uc3QgdD10aGlzLmdlb21ldHJ5O2lmKHQuaXNCdWZmZXJHZW9tZXRyeSlpZihudWxsPT09dC5pbmRleCl7Y29uc3QgZT10LmF0dHJpYnV0ZXMucG9zaXRpb24sbj1bMF07Zm9yKGxldCB0PTEsbz1lLmNvdW50O3Q8bzt0KyspdmR0LmZyb21CdWZmZXJBdHRyaWJ1dGUoZSx0LTEpLHhkdC5mcm9tQnVmZmVyQXR0cmlidXRlKGUsdCksblt0XT1uW3QtMV0sblt0XSs9dmR0LmRpc3RhbmNlVG8oeGR0KTt0LnNldEF0dHJpYnV0ZSgibGluZURpc3RhbmNlIixuZXcgenJ0KG4sMSkpfWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5MaW5lLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCk6IENvbXB1dGF0aW9uIG9ubHkgcG9zc2libGUgd2l0aCBub24taW5kZXhlZCBCdWZmZXJHZW9tZXRyeS4iKTtlbHNlIHQuaXNHZW9tZXRyeSYmY29uc29sZS5lcnJvcigiVEhSRUUuTGluZS5jb21wdXRlTGluZURpc3RhbmNlcygpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIik7cmV0dXJuIHRoaXN9LHJheWNhc3Q6ZnVuY3Rpb24odCxlKXtjb25zdCBuPXRoaXMuZ2VvbWV0cnksbz10aGlzLm1hdHJpeFdvcmxkLGk9dC5wYXJhbXMuTGluZS50aHJlc2hvbGQ7aWYobnVsbD09PW4uYm91bmRpbmdTcGhlcmUmJm4uY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCksd2R0LmNvcHkobi5ib3VuZGluZ1NwaGVyZSksd2R0LmFwcGx5TWF0cml4NChvKSx3ZHQucmFkaXVzKz1pLCExPT09dC5yYXkuaW50ZXJzZWN0c1NwaGVyZSh3ZHQpKXJldHVybjtPZHQuY29weShvKS5pbnZlcnQoKSxQZHQuY29weSh0LnJheSkuYXBwbHlNYXRyaXg0KE9kdCk7Y29uc3QgYT1pLygodGhpcy5zY2FsZS54K3RoaXMuc2NhbGUueSt0aGlzLnNjYWxlLnopLzMpLHI9YSphLHM9bmV3ICRpdCxsPW5ldyAkaXQsYz1uZXcgJGl0LGQ9bmV3ICRpdCxwPXRoaXMuaXNMaW5lU2VnbWVudHM/MjoxO2lmKG4uaXNCdWZmZXJHZW9tZXRyeSl7Y29uc3Qgbz1uLmluZGV4LGk9bi5hdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKG51bGwhPT1vKXtjb25zdCBuPW8uYXJyYXk7Zm9yKGxldCBvPTAsYT1uLmxlbmd0aC0xO288YTtvKz1wKXtjb25zdCBhPW5bbysxXTtpZihzLmZyb21CdWZmZXJBdHRyaWJ1dGUoaSxuW29dKSxsLmZyb21CdWZmZXJBdHRyaWJ1dGUoaSxhKSxQZHQuZGlzdGFuY2VTcVRvU2VnbWVudChzLGwsZCxjKT5yKWNvbnRpbnVlO2QuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpO2NvbnN0IHA9dC5yYXkub3JpZ2luLmRpc3RhbmNlVG8oZCk7cDx0Lm5lYXJ8fHA+dC5mYXJ8fGUucHVzaCh7ZGlzdGFuY2U6cCxwb2ludDpjLmNsb25lKCkuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpLGluZGV4Om8sZmFjZTpudWxsLGZhY2VJbmRleDpudWxsLG9iamVjdDp0aGlzfSl9fWVsc2UgZm9yKGxldCBuPTAsbz1pLmNvdW50LTE7bjxvO24rPXApe2lmKHMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShpLG4pLGwuZnJvbUJ1ZmZlckF0dHJpYnV0ZShpLG4rMSksUGR0LmRpc3RhbmNlU3FUb1NlZ21lbnQocyxsLGQsYyk+ciljb250aW51ZTtkLmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKTtjb25zdCBvPXQucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKGQpO288dC5uZWFyfHxvPnQuZmFyfHxlLnB1c2goe2Rpc3RhbmNlOm8scG9pbnQ6Yy5jbG9uZSgpLmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKSxpbmRleDpuLGZhY2U6bnVsbCxmYWNlSW5kZXg6bnVsbCxvYmplY3Q6dGhpc30pfX1lbHNlIG4uaXNHZW9tZXRyeSYmY29uc29sZS5lcnJvcigiVEhSRUUuTGluZS5yYXljYXN0KCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX0sdXBkYXRlTW9ycGhUYXJnZXRzOmZ1bmN0aW9uKCl7Y29uc3QgdD10aGlzLmdlb21ldHJ5O2lmKHQuaXNCdWZmZXJHZW9tZXRyeSl7Y29uc3QgZT10Lm1vcnBoQXR0cmlidXRlcyxuPU9iamVjdC5rZXlzKGUpO2lmKG4ubGVuZ3RoPjApe2NvbnN0IHQ9ZVtuWzBdXTtpZih2b2lkIDAhPT10KXt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcz1bXSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeT17fTtmb3IobGV0IGU9MCxuPXQubGVuZ3RoO2U8bjtlKyspe2NvbnN0IG49dFtlXS5uYW1lfHxTdHJpbmcoZSk7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXMucHVzaCgwKSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeVtuXT1lfX19fWVsc2V7Y29uc3QgZT10Lm1vcnBoVGFyZ2V0czt2b2lkIDAhPT1lJiZlLmxlbmd0aD4wJiZjb25zb2xlLmVycm9yKCJUSFJFRS5MaW5lLnVwZGF0ZU1vcnBoVGFyZ2V0cygpIGRvZXMgbm90IHN1cHBvcnQgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpfX19KTtjb25zdCBTZHQ9bmV3ICRpdCxEZHQ9bmV3ICRpdDtmdW5jdGlvbiBFZHQodCxlKXtrZHQuY2FsbCh0aGlzLHQsZSksdGhpcy50eXBlPSJMaW5lU2VnbWVudHMifWZ1bmN0aW9uIEFkdCh0LGUpe2tkdC5jYWxsKHRoaXMsdCxlKSx0aGlzLnR5cGU9IkxpbmVMb29wIn1mdW5jdGlvbiBSZHQodCl7eHJ0LmNhbGwodGhpcyksdGhpcy50eXBlPSJQb2ludHNNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgQ3J0KDE2Nzc3MjE1KSx0aGlzLm1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLnNpemU9MSx0aGlzLnNpemVBdHRlbnVhdGlvbj0hMCx0aGlzLm1vcnBoVGFyZ2V0cz0hMSx0aGlzLnNldFZhbHVlcyh0KX1FZHQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShrZHQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6RWR0LGlzTGluZVNlZ21lbnRzOiEwLGNvbXB1dGVMaW5lRGlzdGFuY2VzOmZ1bmN0aW9uKCl7Y29uc3QgdD10aGlzLmdlb21ldHJ5O2lmKHQuaXNCdWZmZXJHZW9tZXRyeSlpZihudWxsPT09dC5pbmRleCl7Y29uc3QgZT10LmF0dHJpYnV0ZXMucG9zaXRpb24sbj1bXTtmb3IobGV0IHQ9MCxvPWUuY291bnQ7dDxvO3QrPTIpU2R0LmZyb21CdWZmZXJBdHRyaWJ1dGUoZSx0KSxEZHQuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLHQrMSksblt0XT0wPT09dD8wOm5bdC0xXSxuW3QrMV09blt0XStTZHQuZGlzdGFuY2VUbyhEZHQpO3Quc2V0QXR0cmlidXRlKCJsaW5lRGlzdGFuY2UiLG5ldyB6cnQobiwxKSl9ZWxzZSBjb25zb2xlLndhcm4oIlRIUkVFLkxpbmVTZWdtZW50cy5jb21wdXRlTGluZURpc3RhbmNlcygpOiBDb21wdXRhdGlvbiBvbmx5IHBvc3NpYmxlIHdpdGggbm9uLWluZGV4ZWQgQnVmZmVyR2VvbWV0cnkuIik7ZWxzZSB0LmlzR2VvbWV0cnkmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLkxpbmVTZWdtZW50cy5jb21wdXRlTGluZURpc3RhbmNlcygpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIik7cmV0dXJuIHRoaXN9fSksQWR0LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoa2R0LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOkFkdCxpc0xpbmVMb29wOiEwfSksKFJkdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh4cnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9UmR0LFJkdC5wcm90b3R5cGUuaXNQb2ludHNNYXRlcmlhbD0hMCxSZHQucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24odCl7cmV0dXJuIHhydC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubWFwPXQubWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLnNpemU9dC5zaXplLHRoaXMuc2l6ZUF0dGVudWF0aW9uPXQuc2l6ZUF0dGVudWF0aW9uLHRoaXMubW9ycGhUYXJnZXRzPXQubW9ycGhUYXJnZXRzLHRoaXN9O2NvbnN0IFRkdD1uZXcga2F0LE5kdD1uZXcgd2F0LElkdD1uZXcgeWF0LHpkdD1uZXcgJGl0O2Z1bmN0aW9uIEhkdCh0PW5ldyBacnQsZT1uZXcgUmR0KXtRYXQuY2FsbCh0aGlzKSx0aGlzLnR5cGU9IlBvaW50cyIsdGhpcy5nZW9tZXRyeT10LHRoaXMubWF0ZXJpYWw9ZSx0aGlzLnVwZGF0ZU1vcnBoVGFyZ2V0cygpfWZ1bmN0aW9uIEZkdCh0LGUsbixvLGksYSxyKXtjb25zdCBzPU5kdC5kaXN0YW5jZVNxVG9Qb2ludCh0KTtpZihzPG4pe2NvbnN0IG49bmV3ICRpdDtOZHQuY2xvc2VzdFBvaW50VG9Qb2ludCh0LG4pLG4uYXBwbHlNYXRyaXg0KG8pO2NvbnN0IGw9aS5yYXkub3JpZ2luLmRpc3RhbmNlVG8obik7aWYobDxpLm5lYXJ8fGw+aS5mYXIpcmV0dXJuO2EucHVzaCh7ZGlzdGFuY2U6bCxkaXN0YW5jZVRvUmF5Ok1hdGguc3FydChzKSxwb2ludDpuLGluZGV4OmUsZmFjZTpudWxsLG9iamVjdDpyfSl9fWZ1bmN0aW9uIExkdCh0LGUsbixvLGksYSxyLHMsbCl7Wml0LmNhbGwodGhpcyx0LGUsbixvLGksYSxyLHMsbCksdGhpcy5mb3JtYXQ9dm9pZCAwIT09cj9yOk9pdCx0aGlzLm1pbkZpbHRlcj12b2lkIDAhPT1hP2E6Yml0LHRoaXMubWFnRmlsdGVyPXZvaWQgMCE9PWk/aTpiaXQsdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITE7Y29uc3QgYz10aGlzOyJyZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrImluIHQmJnQucmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjaygoZnVuY3Rpb24gZSgpe2MubmVlZHNVcGRhdGU9ITAsdC5yZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrKGUpfSkpfWZ1bmN0aW9uIEJkdCh0LGUsbixvLGksYSxyLHMsbCxjLGQscCl7Wml0LmNhbGwodGhpcyxudWxsLGEscixzLGwsYyxvLGksZCxwKSx0aGlzLmltYWdlPXt3aWR0aDplLGhlaWdodDpufSx0aGlzLm1pcG1hcHM9dCx0aGlzLmZsaXBZPSExLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExfWZ1bmN0aW9uIFZkdCh0LGUsbixvLGksYSxyLHMsbCl7Wml0LmNhbGwodGhpcyx0LGUsbixvLGksYSxyLHMsbCksdGhpcy5uZWVkc1VwZGF0ZT0hMH1mdW5jdGlvbiBqZHQodCxlLG4sbyxpLGEscixzLGwsYyl7aWYoKGM9dm9pZCAwIT09Yz9jOndpdCkhPT13aXQmJmMhPT1raXQpdGhyb3cgbmV3IEVycm9yKCJEZXB0aFRleHR1cmUgZm9ybWF0IG11c3QgYmUgZWl0aGVyIFRIUkVFLkRlcHRoRm9ybWF0IG9yIFRIUkVFLkRlcHRoU3RlbmNpbEZvcm1hdCIpO3ZvaWQgMD09PW4mJmM9PT13aXQmJihuPV9pdCksdm9pZCAwPT09biYmYz09PWtpdCYmKG49eGl0KSxaaXQuY2FsbCh0aGlzLG51bGwsbyxpLGEscixzLGMsbixsKSx0aGlzLmltYWdlPXt3aWR0aDp0LGhlaWdodDplfSx0aGlzLm1hZ0ZpbHRlcj12b2lkIDAhPT1yP3I6aGl0LHRoaXMubWluRmlsdGVyPXZvaWQgMCE9PXM/czpoaXQsdGhpcy5mbGlwWT0hMSx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMX1IZHQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShRYXQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6SGR0LGlzUG9pbnRzOiEwLGNvcHk6ZnVuY3Rpb24odCl7cmV0dXJuIFFhdC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy5tYXRlcmlhbD10Lm1hdGVyaWFsLHRoaXMuZ2VvbWV0cnk9dC5nZW9tZXRyeSx0aGlzfSxyYXljYXN0OmZ1bmN0aW9uKHQsZSl7Y29uc3Qgbj10aGlzLmdlb21ldHJ5LG89dGhpcy5tYXRyaXhXb3JsZCxpPXQucGFyYW1zLlBvaW50cy50aHJlc2hvbGQ7aWYobnVsbD09PW4uYm91bmRpbmdTcGhlcmUmJm4uY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCksSWR0LmNvcHkobi5ib3VuZGluZ1NwaGVyZSksSWR0LmFwcGx5TWF0cml4NChvKSxJZHQucmFkaXVzKz1pLCExPT09dC5yYXkuaW50ZXJzZWN0c1NwaGVyZShJZHQpKXJldHVybjtUZHQuY29weShvKS5pbnZlcnQoKSxOZHQuY29weSh0LnJheSkuYXBwbHlNYXRyaXg0KFRkdCk7Y29uc3QgYT1pLygodGhpcy5zY2FsZS54K3RoaXMuc2NhbGUueSt0aGlzLnNjYWxlLnopLzMpLHI9YSphO2lmKG4uaXNCdWZmZXJHZW9tZXRyeSl7Y29uc3QgaT1uLmluZGV4LGE9bi5hdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKG51bGwhPT1pKXtjb25zdCBuPWkuYXJyYXk7Zm9yKGxldCBpPTAscz1uLmxlbmd0aDtpPHM7aSsrKXtjb25zdCBzPW5baV07emR0LmZyb21CdWZmZXJBdHRyaWJ1dGUoYSxzKSxGZHQoemR0LHMscixvLHQsZSx0aGlzKX19ZWxzZSBmb3IobGV0IG49MCxpPWEuY291bnQ7bjxpO24rKyl6ZHQuZnJvbUJ1ZmZlckF0dHJpYnV0ZShhLG4pLEZkdCh6ZHQsbixyLG8sdCxlLHRoaXMpfWVsc2UgY29uc29sZS5lcnJvcigiVEhSRUUuUG9pbnRzLnJheWNhc3QoKSBubyBsb25nZXIgc3VwcG9ydHMgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpfSx1cGRhdGVNb3JwaFRhcmdldHM6ZnVuY3Rpb24oKXtjb25zdCB0PXRoaXMuZ2VvbWV0cnk7aWYodC5pc0J1ZmZlckdlb21ldHJ5KXtjb25zdCBlPXQubW9ycGhBdHRyaWJ1dGVzLG49T2JqZWN0LmtleXMoZSk7aWYobi5sZW5ndGg+MCl7Y29uc3QgdD1lW25bMF1dO2lmKHZvaWQgMCE9PXQpe3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzPVtdLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5PXt9O2ZvcihsZXQgZT0wLG49dC5sZW5ndGg7ZTxuO2UrKyl7Y29uc3Qgbj10W2VdLm5hbWV8fFN0cmluZyhlKTt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcy5wdXNoKDApLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5W25dPWV9fX19ZWxzZXtjb25zdCBlPXQubW9ycGhUYXJnZXRzO3ZvaWQgMCE9PWUmJmUubGVuZ3RoPjAmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLlBvaW50cy51cGRhdGVNb3JwaFRhcmdldHMoKSBkb2VzIG5vdCBzdXBwb3J0IFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX19fSksTGR0LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoWml0LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOkxkdCxjbG9uZTpmdW5jdGlvbigpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLmltYWdlKS5jb3B5KHRoaXMpfSxpc1ZpZGVvVGV4dHVyZTohMCx1cGRhdGU6ZnVuY3Rpb24oKXtjb25zdCB0PXRoaXMuaW1hZ2U7MD09InJlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2siaW4gdCYmdC5yZWFkeVN0YXRlPj10LkhBVkVfQ1VSUkVOVF9EQVRBJiYodGhpcy5uZWVkc1VwZGF0ZT0hMCl9fSksKEJkdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShaaXQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9QmR0LEJkdC5wcm90b3R5cGUuaXNDb21wcmVzc2VkVGV4dHVyZT0hMCwoVmR0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFppdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1WZHQsVmR0LnByb3RvdHlwZS5pc0NhbnZhc1RleHR1cmU9ITAsKGpkdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShaaXQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9amR0LGpkdC5wcm90b3R5cGUuaXNEZXB0aFRleHR1cmU9ITA7Y2xhc3MgVWR0IGV4dGVuZHMgWnJ0e2NvbnN0cnVjdG9yKHQ9MSxlPTgsbj0wLG89MipNYXRoLlBJKXtzdXBlcigpLHRoaXMudHlwZT0iQ2lyY2xlR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cmFkaXVzOnQsc2VnbWVudHM6ZSx0aGV0YVN0YXJ0Om4sdGhldGFMZW5ndGg6b30sZT1NYXRoLm1heCgzLGUpO2NvbnN0IGk9W10sYT1bXSxyPVtdLHM9W10sbD1uZXcgJGl0LGM9bmV3IFVpdDthLnB1c2goMCwwLDApLHIucHVzaCgwLDAsMSkscy5wdXNoKC41LC41KTtmb3IobGV0IGk9MCxkPTM7aTw9ZTtpKyssZCs9Myl7Y29uc3QgcD1uK2kvZSpvO2wueD10Kk1hdGguY29zKHApLGwueT10Kk1hdGguc2luKHApLGEucHVzaChsLngsbC55LGwueiksci5wdXNoKDAsMCwxKSxjLng9KGFbZF0vdCsxKS8yLGMueT0oYVtkKzFdL3QrMSkvMixzLnB1c2goYy54LGMueSl9Zm9yKGxldCB0PTE7dDw9ZTt0KyspaS5wdXNoKHQsdCsxLDApO3RoaXMuc2V0SW5kZXgoaSksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgenJ0KGEsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyB6cnQociwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgenJ0KHMsMikpfX1mdW5jdGlvbiBXZHQodCxlLG4sbyxpKXtsZXQgYSxyO2lmKGk9PT0oZnVuY3Rpb24gcyh0LGUsbixvKXtsZXQgaT0wO2ZvcihsZXQgYT1lLHI9bi1vO2E8bjthKz1vKWkrPSh0W3JdLXRbYV0pKih0W2ErMV0rdFtyKzFdKSxyPWE7cmV0dXJuIGl9KSh0LGUsbixvKT4wKWZvcihhPWU7YTxuO2ErPW8pcj1wcHQoYSx0W2FdLHRbYSsxXSxyKTtlbHNlIGZvcihhPW4tbzthPj1lO2EtPW8pcj1wcHQoYSx0W2FdLHRbYSsxXSxyKTtyZXR1cm4gciYmYXB0KHIsci5uZXh0KSYmKG1wdChyKSxyPXIubmV4dCkscn1mdW5jdGlvbiBHZHQodCxlKXtpZighdClyZXR1cm4gdDtlfHwoZT10KTtsZXQgbixvPXQ7ZG97aWYobj0hMSxvLnN0ZWluZXJ8fCFhcHQobyxvLm5leHQpJiYwIT09aXB0KG8ucHJldixvLG8ubmV4dCkpbz1vLm5leHQ7ZWxzZXtpZihtcHQobyksbz1lPW8ucHJldixvPT09by5uZXh0KWJyZWFrO249ITB9fXdoaWxlKG58fG8hPT1lKTtyZXR1cm4gZX1mdW5jdGlvbiBZZHQodCxlLG4sbyxpLGEscil7aWYoIXQpcmV0dXJuOyFyJiZhJiYoZnVuY3Rpb24gcyh0LGUsbixvKXtsZXQgaT10O2Rve251bGw9PT1pLnomJihpLno9dHB0KGkueCxpLnksZSxuLG8pKSxpLnByZXZaPWkucHJldixpLm5leHRaPWkubmV4dCxpPWkubmV4dH13aGlsZShpIT09dCk7aS5wcmV2Wi5uZXh0Wj1udWxsLGkucHJldlo9bnVsbCwoZnVuY3Rpb24gYSh0KXtsZXQgZSxuLG8saSxhLHIscyxsLGM9MTtkb3tmb3Iobj10LHQ9bnVsbCxhPW51bGwscj0wO247KXtmb3IocisrLG89bixzPTAsZT0wO2U8YyYmKHMrKyxvPW8ubmV4dFosbyk7ZSsrKTtmb3IobD1jO3M+MHx8bD4wJiZvOykwIT09cyYmKDA9PT1sfHwhb3x8bi56PD1vLnopPyhpPW4sbj1uLm5leHRaLHMtLSk6KGk9byxvPW8ubmV4dFosbC0tKSxhP2EubmV4dFo9aTp0PWksaS5wcmV2Wj1hLGE9aTtuPW99YS5uZXh0Wj1udWxsLGMqPTJ9d2hpbGUocj4xKX0pKGkpfSkodCxvLGksYSk7bGV0IGwsYyxkPXQ7Zm9yKDt0LnByZXYhPT10Lm5leHQ7KWlmKGw9dC5wcmV2LGM9dC5uZXh0LGE/WmR0KHQsbyxpLGEpOnFkdCh0KSllLnB1c2gobC5pL24pLGUucHVzaCh0LmkvbiksZS5wdXNoKGMuaS9uKSxtcHQodCksdD1jLm5leHQsZD1jLm5leHQ7ZWxzZSBpZigodD1jKT09PWQpe3I/MT09PXI/WWR0KHQ9WGR0KEdkdCh0KSxlLG4pLGUsbixvLGksYSwyKToyPT09ciYmS2R0KHQsZSxuLG8saSxhKTpZZHQoR2R0KHQpLGUsbixvLGksYSwxKTticmVha319ZnVuY3Rpb24gcWR0KHQpe2NvbnN0IGU9dC5wcmV2LG49dCxvPXQubmV4dDtpZihpcHQoZSxuLG8pPj0wKXJldHVybiExO2xldCBpPXQubmV4dC5uZXh0O2Zvcig7aSE9PXQucHJldjspe2lmKG5wdChlLngsZS55LG4ueCxuLnksby54LG8ueSxpLngsaS55KSYmaXB0KGkucHJldixpLGkubmV4dCk+PTApcmV0dXJuITE7aT1pLm5leHR9cmV0dXJuITB9ZnVuY3Rpb24gWmR0KHQsZSxuLG8pe2NvbnN0IGk9dC5wcmV2LGE9dCxyPXQubmV4dDtpZihpcHQoaSxhLHIpPj0wKXJldHVybiExO2NvbnN0IHM9aS54PmEueD9pLng+ci54P2kueDpyLng6YS54PnIueD9hLng6ci54LGw9aS55PmEueT9pLnk+ci55P2kueTpyLnk6YS55PnIueT9hLnk6ci55LGM9dHB0KGkueDxhLng/aS54PHIueD9pLng6ci54OmEueDxyLng/YS54OnIueCxpLnk8YS55P2kueTxyLnk/aS55OnIueTphLnk8ci55P2EueTpyLnksZSxuLG8pLGQ9dHB0KHMsbCxlLG4sbyk7bGV0IHA9dC5wcmV2WixtPXQubmV4dFo7Zm9yKDtwJiZwLno+PWMmJm0mJm0uejw9ZDspe2lmKHAhPT10LnByZXYmJnAhPT10Lm5leHQmJm5wdChpLngsaS55LGEueCxhLnksci54LHIueSxwLngscC55KSYmaXB0KHAucHJldixwLHAubmV4dCk+PTApcmV0dXJuITE7aWYocD1wLnByZXZaLG0hPT10LnByZXYmJm0hPT10Lm5leHQmJm5wdChpLngsaS55LGEueCxhLnksci54LHIueSxtLngsbS55KSYmaXB0KG0ucHJldixtLG0ubmV4dCk+PTApcmV0dXJuITE7bT1tLm5leHRafWZvcig7cCYmcC56Pj1jOyl7aWYocCE9PXQucHJldiYmcCE9PXQubmV4dCYmbnB0KGkueCxpLnksYS54LGEueSxyLngsci55LHAueCxwLnkpJiZpcHQocC5wcmV2LHAscC5uZXh0KT49MClyZXR1cm4hMTtwPXAucHJldlp9Zm9yKDttJiZtLno8PWQ7KXtpZihtIT09dC5wcmV2JiZtIT09dC5uZXh0JiZucHQoaS54LGkueSxhLngsYS55LHIueCxyLnksbS54LG0ueSkmJmlwdChtLnByZXYsbSxtLm5leHQpPj0wKXJldHVybiExO209bS5uZXh0Wn1yZXR1cm4hMH1mdW5jdGlvbiBYZHQodCxlLG4pe2xldCBvPXQ7ZG97Y29uc3QgaT1vLnByZXYsYT1vLm5leHQubmV4dDshYXB0KGksYSkmJnJwdChpLG8sby5uZXh0LGEpJiZjcHQoaSxhKSYmY3B0KGEsaSkmJihlLnB1c2goaS5pL24pLGUucHVzaChvLmkvbiksZS5wdXNoKGEuaS9uKSxtcHQobyksbXB0KG8ubmV4dCksbz10PWEpLG89by5uZXh0fXdoaWxlKG8hPT10KTtyZXR1cm4gR2R0KG8pfWZ1bmN0aW9uIEtkdCh0LGUsbixvLGksYSl7bGV0IHI9dDtkb3tsZXQgdD1yLm5leHQubmV4dDtmb3IoO3QhPT1yLnByZXY7KXtpZihyLmkhPT10LmkmJm9wdChyLHQpKXtsZXQgcz1kcHQocix0KTtyZXR1cm4gcj1HZHQocixyLm5leHQpLHM9R2R0KHMscy5uZXh0KSxZZHQocixlLG4sbyxpLGEpLHZvaWQgWWR0KHMsZSxuLG8saSxhKX10PXQubmV4dH1yPXIubmV4dH13aGlsZShyIT09dCl9ZnVuY3Rpb24gSmR0KHQsZSl7cmV0dXJuIHQueC1lLnh9ZnVuY3Rpb24gUWR0KHQsZSl7aWYoZT0oZnVuY3Rpb24gbih0LGUpe2xldCBuPWU7Y29uc3Qgbz10LngsaT10Lnk7bGV0IGEscj0tMS8wO2Rve2lmKGk8PW4ueSYmaT49bi5uZXh0LnkmJm4ubmV4dC55IT09bi55KXtjb25zdCB0PW4ueCsoaS1uLnkpKihuLm5leHQueC1uLngpLyhuLm5leHQueS1uLnkpO2lmKHQ8PW8mJnQ+cil7aWYocj10LHQ9PT1vKXtpZihpPT09bi55KXJldHVybiBuO2lmKGk9PT1uLm5leHQueSlyZXR1cm4gbi5uZXh0fWE9bi54PG4ubmV4dC54P246bi5uZXh0fX1uPW4ubmV4dH13aGlsZShuIT09ZSk7aWYoIWEpcmV0dXJuIG51bGw7aWYobz09PXIpcmV0dXJuIGE7Y29uc3Qgcz1hLGw9YS54LGM9YS55O2xldCBkLHA9MS8wO249YTtkb3tvPj1uLngmJm4ueD49bCYmbyE9PW4ueCYmbnB0KGk8Yz9vOnIsaSxsLGMsaTxjP3I6byxpLG4ueCxuLnkpJiYoZD1NYXRoLmFicyhpLW4ueSkvKG8tbi54KSxjcHQobix0KSYmKGQ8cHx8ZD09PXAmJihuLng+YS54fHxuLng9PT1hLngmJiRkdChhLG4pKSkmJihhPW4scD1kKSksbj1uLm5leHR9d2hpbGUobiE9PXMpO3JldHVybiBhfSkodCxlKSl7Y29uc3Qgbj1kcHQoZSx0KTtHZHQoZSxlLm5leHQpLEdkdChuLG4ubmV4dCl9fWZ1bmN0aW9uICRkdCh0LGUpe3JldHVybiBpcHQodC5wcmV2LHQsZS5wcmV2KTwwJiZpcHQoZS5uZXh0LHQsdC5uZXh0KTwwfWZ1bmN0aW9uIHRwdCh0LGUsbixvLGkpe3JldHVybih0PTE0MzE2NTU3NjUmKCh0PTg1ODk5MzQ1OSYoKHQ9MjUyNjQ1MTM1JigodD0xNjcxMTkzNSYoKHQ9MzI3NjcqKHQtbikqaSl8dDw8OCkpfHQ8PDQpKXx0PDwyKSl8dDw8MSkpfChlPTE0MzE2NTU3NjUmKChlPTg1ODk5MzQ1OSYoKGU9MjUyNjQ1MTM1JigoZT0xNjcxMTkzNSYoKGU9MzI3NjcqKGUtbykqaSl8ZTw8OCkpfGU8PDQpKXxlPDwyKSl8ZTw8MSkpPDwxfWZ1bmN0aW9uIGVwdCh0KXtsZXQgZT10LG49dDtkb3soZS54PG4ueHx8ZS54PT09bi54JiZlLnk8bi55KSYmKG49ZSksZT1lLm5leHR9d2hpbGUoZSE9PXQpO3JldHVybiBufWZ1bmN0aW9uIG5wdCh0LGUsbixvLGksYSxyLHMpe3JldHVybihpLXIpKihlLXMpLSh0LXIpKihhLXMpPj0wJiYodC1yKSooby1zKS0obi1yKSooZS1zKT49MCYmKG4tcikqKGEtcyktKGktcikqKG8tcyk+PTB9ZnVuY3Rpb24gb3B0KHQsZSl7cmV0dXJuIHQubmV4dC5pIT09ZS5pJiZ0LnByZXYuaSE9PWUuaSYmIShmdW5jdGlvbiBuKHQsZSl7bGV0IG49dDtkb3tpZihuLmkhPT10LmkmJm4ubmV4dC5pIT09dC5pJiZuLmkhPT1lLmkmJm4ubmV4dC5pIT09ZS5pJiZycHQobixuLm5leHQsdCxlKSlyZXR1cm4hMDtuPW4ubmV4dH13aGlsZShuIT09dCk7cmV0dXJuITF9KSh0LGUpJiYoY3B0KHQsZSkmJmNwdChlLHQpJiYoZnVuY3Rpb24gbyh0LGUpe2xldCBuPXQsbz0hMTtjb25zdCBpPSh0LngrZS54KS8yLGE9KHQueStlLnkpLzI7ZG97bi55PmEhPW4ubmV4dC55PmEmJm4ubmV4dC55IT09bi55JiZpPChuLm5leHQueC1uLngpKihhLW4ueSkvKG4ubmV4dC55LW4ueSkrbi54JiYobz0hbyksbj1uLm5leHR9d2hpbGUobiE9PXQpO3JldHVybiBvfSkodCxlKSYmKGlwdCh0LnByZXYsdCxlLnByZXYpfHxpcHQodCxlLnByZXYsZSkpfHxhcHQodCxlKSYmaXB0KHQucHJldix0LHQubmV4dCk+MCYmaXB0KGUucHJldixlLGUubmV4dCk+MCl9ZnVuY3Rpb24gaXB0KHQsZSxuKXtyZXR1cm4oZS55LXQueSkqKG4ueC1lLngpLShlLngtdC54KSoobi55LWUueSl9ZnVuY3Rpb24gYXB0KHQsZSl7cmV0dXJuIHQueD09PWUueCYmdC55PT09ZS55fWZ1bmN0aW9uIHJwdCh0LGUsbixvKXtjb25zdCBpPWxwdChpcHQodCxlLG4pKSxhPWxwdChpcHQodCxlLG8pKSxyPWxwdChpcHQobixvLHQpKSxzPWxwdChpcHQobixvLGUpKTtyZXR1cm4gaSE9PWEmJnIhPT1zfHwhKDAhPT1pfHwhc3B0KHQsbixlKSl8fCEoMCE9PWF8fCFzcHQodCxvLGUpKXx8ISgwIT09cnx8IXNwdChuLHQsbykpfHwhKDAhPT1zfHwhc3B0KG4sZSxvKSl9ZnVuY3Rpb24gc3B0KHQsZSxuKXtyZXR1cm4gZS54PD1NYXRoLm1heCh0Lngsbi54KSYmZS54Pj1NYXRoLm1pbih0Lngsbi54KSYmZS55PD1NYXRoLm1heCh0Lnksbi55KSYmZS55Pj1NYXRoLm1pbih0Lnksbi55KX1mdW5jdGlvbiBscHQodCl7cmV0dXJuIHQ+MD8xOnQ8MD8tMTowfWZ1bmN0aW9uIGNwdCh0LGUpe3JldHVybiBpcHQodC5wcmV2LHQsdC5uZXh0KTwwP2lwdCh0LGUsdC5uZXh0KT49MCYmaXB0KHQsdC5wcmV2LGUpPj0wOmlwdCh0LGUsdC5wcmV2KTwwfHxpcHQodCx0Lm5leHQsZSk8MH1mdW5jdGlvbiBkcHQodCxlKXtjb25zdCBuPW5ldyB1cHQodC5pLHQueCx0LnkpLG89bmV3IHVwdChlLmksZS54LGUueSksaT10Lm5leHQsYT1lLnByZXY7cmV0dXJuIHQubmV4dD1lLGUucHJldj10LG4ubmV4dD1pLGkucHJldj1uLG8ubmV4dD1uLG4ucHJldj1vLGEubmV4dD1vLG8ucHJldj1hLG99ZnVuY3Rpb24gcHB0KHQsZSxuLG8pe2NvbnN0IGk9bmV3IHVwdCh0LGUsbik7cmV0dXJuIG8/KGkubmV4dD1vLm5leHQsaS5wcmV2PW8sby5uZXh0LnByZXY9aSxvLm5leHQ9aSk6KGkucHJldj1pLGkubmV4dD1pKSxpfWZ1bmN0aW9uIG1wdCh0KXt0Lm5leHQucHJldj10LnByZXYsdC5wcmV2Lm5leHQ9dC5uZXh0LHQucHJldlomJih0LnByZXZaLm5leHRaPXQubmV4dFopLHQubmV4dFomJih0Lm5leHRaLnByZXZaPXQucHJldlopfWZ1bmN0aW9uIHVwdCh0LGUsbil7dGhpcy5pPXQsdGhpcy54PWUsdGhpcy55PW4sdGhpcy5wcmV2PW51bGwsdGhpcy5uZXh0PW51bGwsdGhpcy56PW51bGwsdGhpcy5wcmV2Wj1udWxsLHRoaXMubmV4dFo9bnVsbCx0aGlzLnN0ZWluZXI9ITF9bmV3ICRpdCxuZXcgJGl0LG5ldyAkaXQsbmV3IHVydDtjb25zdCBmcHQ9e2FyZWE6ZnVuY3Rpb24odCl7Y29uc3QgZT10Lmxlbmd0aDtsZXQgbj0wO2ZvcihsZXQgbz1lLTEsaT0wO2k8ZTtvPWkrKyluKz10W29dLngqdFtpXS55LXRbaV0ueCp0W29dLnk7cmV0dXJuLjUqbn0saXNDbG9ja1dpc2U6ZnVuY3Rpb24odCl7cmV0dXJuIGZwdC5hcmVhKHQpPDB9LHRyaWFuZ3VsYXRlU2hhcGU6ZnVuY3Rpb24odCxlKXtjb25zdCBuPVtdLG89W10saT1bXTtncHQodCksaHB0KG4sdCk7bGV0IGE9dC5sZW5ndGg7ZS5mb3JFYWNoKGdwdCk7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0Kyspby5wdXNoKGEpLGErPWVbdF0ubGVuZ3RoLGhwdChuLGVbdF0pO2NvbnN0IHI9KGZ1bmN0aW9uKHQsZSxuKXtuPW58fDI7Y29uc3Qgbz1lJiZlLmxlbmd0aCxpPW8/ZVswXSpuOnQubGVuZ3RoO2xldCBhPVdkdCh0LDAsaSxuLCEwKTtjb25zdCByPVtdO2lmKCFhfHxhLm5leHQ9PT1hLnByZXYpcmV0dXJuIHI7bGV0IHMsbCxjLGQscCxtLHU7aWYobyYmKGE9KGZ1bmN0aW9uIGYodCxlLG4sbyl7Y29uc3QgaT1bXTtsZXQgYSxyLHMsbCxjO2ZvcihhPTAscj1lLmxlbmd0aDthPHI7YSsrKXM9ZVthXSpvLGw9YTxyLTE/ZVthKzFdKm86dC5sZW5ndGgsYz1XZHQodCxzLGwsbywhMSksYz09PWMubmV4dCYmKGMuc3RlaW5lcj0hMCksaS5wdXNoKGVwdChjKSk7Zm9yKGkuc29ydChKZHQpLGE9MDthPGkubGVuZ3RoO2ErKylRZHQoaVthXSxuKSxuPUdkdChuLG4ubmV4dCk7cmV0dXJuIG59KSh0LGUsYSxuKSksdC5sZW5ndGg+ODAqbil7cz1jPXRbMF0sbD1kPXRbMV07Zm9yKGxldCBlPW47ZTxpO2UrPW4pcD10W2VdLG09dFtlKzFdLHA8cyYmKHM9cCksbTxsJiYobD1tKSxwPmMmJihjPXApLG0+ZCYmKGQ9bSk7dT1NYXRoLm1heChjLXMsZC1sKSx1PTAhPT11PzEvdTowfXJldHVybiBZZHQoYSxyLG4scyxsLHUpLHJ9KShuLG8pO2ZvcihsZXQgdD0wO3Q8ci5sZW5ndGg7dCs9MylpLnB1c2goci5zbGljZSh0LHQrMykpO3JldHVybiBpfX07ZnVuY3Rpb24gZ3B0KHQpe2NvbnN0IGU9dC5sZW5ndGg7ZT4yJiZ0W2UtMV0uZXF1YWxzKHRbMF0pJiZ0LnBvcCgpfWZ1bmN0aW9uIGhwdCh0LGUpe2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXQucHVzaChlW25dLngpLHQucHVzaChlW25dLnkpfWNsYXNzIGJwdCBleHRlbmRzIFpydHtjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKCksdGhpcy50eXBlPSJFeHRydWRlR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17c2hhcGVzOnQsb3B0aW9uczplfSx0PUFycmF5LmlzQXJyYXkodCk/dDpbdF07Y29uc3Qgbj10aGlzLG89W10saT1bXTtmb3IobGV0IGU9MCxuPXQubGVuZ3RoO2U8bjtlKyspYSh0W2VdKTtmdW5jdGlvbiBhKHQpe2NvbnN0IGE9W10scj12b2lkIDAhPT1lLmN1cnZlU2VnbWVudHM/ZS5jdXJ2ZVNlZ21lbnRzOjEyLHM9dm9pZCAwIT09ZS5zdGVwcz9lLnN0ZXBzOjE7bGV0IGw9dm9pZCAwIT09ZS5kZXB0aD9lLmRlcHRoOjEwMCxjPXZvaWQgMD09PWUuYmV2ZWxFbmFibGVkfHxlLmJldmVsRW5hYmxlZCxkPXZvaWQgMCE9PWUuYmV2ZWxUaGlja25lc3M/ZS5iZXZlbFRoaWNrbmVzczo2LHA9dm9pZCAwIT09ZS5iZXZlbFNpemU/ZS5iZXZlbFNpemU6ZC0yLG09dm9pZCAwIT09ZS5iZXZlbE9mZnNldD9lLmJldmVsT2Zmc2V0OjAsdT12b2lkIDAhPT1lLmJldmVsU2VnbWVudHM/ZS5iZXZlbFNlZ21lbnRzOjM7Y29uc3QgZj1lLmV4dHJ1ZGVQYXRoLGc9dm9pZCAwIT09ZS5VVkdlbmVyYXRvcj9lLlVWR2VuZXJhdG9yOnlwdDt2b2lkIDAhPT1lLmFtb3VudCYmKGNvbnNvbGUud2FybigiVEhSRUUuRXh0cnVkZUJ1ZmZlckdlb21ldHJ5OiBhbW91bnQgaGFzIGJlZW4gcmVuYW1lZCB0byBkZXB0aC4iKSxsPWUuYW1vdW50KTtsZXQgaCxiLHksXyxDLE09ITE7ZiYmKGg9Zi5nZXRTcGFjZWRQb2ludHMocyksTT0hMCxjPSExLGI9Zi5jb21wdXRlRnJlbmV0RnJhbWVzKHMsITEpLHk9bmV3ICRpdCxfPW5ldyAkaXQsQz1uZXcgJGl0KSxjfHwodT0wLGQ9MCxwPTAsbT0wKTtjb25zdCB2PXQuZXh0cmFjdFBvaW50cyhyKTtsZXQgeD12LnNoYXBlO2NvbnN0IE89di5ob2xlcztpZighZnB0LmlzQ2xvY2tXaXNlKHgpKXt4PXgucmV2ZXJzZSgpO2ZvcihsZXQgdD0wLGU9Ty5sZW5ndGg7dDxlO3QrKyl7Y29uc3QgZT1PW3RdO2ZwdC5pc0Nsb2NrV2lzZShlKSYmKE9bdF09ZS5yZXZlcnNlKCkpfX1jb25zdCBQPWZwdC50cmlhbmd1bGF0ZVNoYXBlKHgsTyksdz14O2ZvcihsZXQgdD0wLGU9Ty5sZW5ndGg7dDxlO3QrKyl4PXguY29uY2F0KE9bdF0pO2Z1bmN0aW9uIGsodCxlLG4pe3JldHVybiBlfHxjb25zb2xlLmVycm9yKCJUSFJFRS5FeHRydWRlR2VvbWV0cnk6IHZlYyBkb2VzIG5vdCBleGlzdCIpLGUuY2xvbmUoKS5tdWx0aXBseVNjYWxhcihuKS5hZGQodCl9Y29uc3QgUz14Lmxlbmd0aCxEPVAubGVuZ3RoO2Z1bmN0aW9uIEUodCxlLG4pe2xldCBvLGksYTtjb25zdCByPXQueC1lLngscz10LnktZS55LGw9bi54LXQueCxjPW4ueS10LnksZD1yKnIrcypzO2lmKE1hdGguYWJzKHIqYy1zKmwpPk51bWJlci5FUFNJTE9OKXtjb25zdCBwPU1hdGguc3FydChkKSxtPU1hdGguc3FydChsKmwrYypjKSx1PWUueC1zL3AsZj1lLnkrci9wLGc9KChuLngtYy9tLXUpKmMtKG4ueStsL20tZikqbCkvKHIqYy1zKmwpO289dStyKmctdC54LGk9ZitzKmctdC55O2NvbnN0IGg9bypvK2kqaTtpZihoPD0yKXJldHVybiBuZXcgVWl0KG8saSk7YT1NYXRoLnNxcnQoaC8yKX1lbHNle2xldCB0PSExO3I+TnVtYmVyLkVQU0lMT04/bD5OdW1iZXIuRVBTSUxPTiYmKHQ9ITApOnI8LU51bWJlci5FUFNJTE9OP2w8LU51bWJlci5FUFNJTE9OJiYodD0hMCk6TWF0aC5zaWduKHMpPT09TWF0aC5zaWduKGMpJiYodD0hMCksdD8obz0tcyxpPXIsYT1NYXRoLnNxcnQoZCkpOihvPXIsaT1zLGE9TWF0aC5zcXJ0KGQvMikpfXJldHVybiBuZXcgVWl0KG8vYSxpL2EpfWNvbnN0IEE9W107Zm9yKGxldCB0PTAsZT13Lmxlbmd0aCxuPWUtMSxvPXQrMTt0PGU7dCsrLG4rKyxvKyspbj09PWUmJihuPTApLG89PT1lJiYobz0wKSxBW3RdPUUod1t0XSx3W25dLHdbb10pO2NvbnN0IFI9W107bGV0IFQsTj1BLmNvbmNhdCgpO2ZvcihsZXQgdD0wLGU9Ty5sZW5ndGg7dDxlO3QrKyl7Y29uc3QgZT1PW3RdO1Q9W107Zm9yKGxldCB0PTAsbj1lLmxlbmd0aCxvPW4tMSxpPXQrMTt0PG47dCsrLG8rKyxpKyspbz09PW4mJihvPTApLGk9PT1uJiYoaT0wKSxUW3RdPUUoZVt0XSxlW29dLGVbaV0pO1IucHVzaChUKSxOPU4uY29uY2F0KFQpfWZvcihsZXQgdD0wO3Q8dTt0Kyspe2NvbnN0IGU9dC91LG49ZCpNYXRoLmNvcyhlKk1hdGguUEkvMiksbz1wKk1hdGguc2luKGUqTWF0aC5QSS8yKSttO2ZvcihsZXQgdD0wLGU9dy5sZW5ndGg7dDxlO3QrKyl7Y29uc3QgZT1rKHdbdF0sQVt0XSxvKTtIKGUueCxlLnksLW4pfWZvcihsZXQgdD0wLGU9Ty5sZW5ndGg7dDxlO3QrKyl7Y29uc3QgZT1PW3RdO1Q9Ult0XTtmb3IobGV0IHQ9MCxpPWUubGVuZ3RoO3Q8aTt0Kyspe2NvbnN0IGk9ayhlW3RdLFRbdF0sbyk7SChpLngsaS55LC1uKX19fWNvbnN0IEk9cCttO2ZvcihsZXQgdD0wO3Q8Uzt0Kyspe2NvbnN0IGU9Yz9rKHhbdF0sTlt0XSxJKTp4W3RdO00/KF8uY29weShiLm5vcm1hbHNbMF0pLm11bHRpcGx5U2NhbGFyKGUueCkseS5jb3B5KGIuYmlub3JtYWxzWzBdKS5tdWx0aXBseVNjYWxhcihlLnkpLEMuY29weShoWzBdKS5hZGQoXykuYWRkKHkpLEgoQy54LEMueSxDLnopKTpIKGUueCxlLnksMCl9Zm9yKGxldCB0PTE7dDw9czt0KyspZm9yKGxldCBlPTA7ZTxTO2UrKyl7Y29uc3Qgbj1jP2soeFtlXSxOW2VdLEkpOnhbZV07TT8oXy5jb3B5KGIubm9ybWFsc1t0XSkubXVsdGlwbHlTY2FsYXIobi54KSx5LmNvcHkoYi5iaW5vcm1hbHNbdF0pLm11bHRpcGx5U2NhbGFyKG4ueSksQy5jb3B5KGhbdF0pLmFkZChfKS5hZGQoeSksSChDLngsQy55LEMueikpOkgobi54LG4ueSxsL3MqdCl9Zm9yKGxldCB0PXUtMTt0Pj0wO3QtLSl7Y29uc3QgZT10L3Usbj1kKk1hdGguY29zKGUqTWF0aC5QSS8yKSxvPXAqTWF0aC5zaW4oZSpNYXRoLlBJLzIpK207Zm9yKGxldCB0PTAsZT13Lmxlbmd0aDt0PGU7dCsrKXtjb25zdCBlPWsod1t0XSxBW3RdLG8pO0goZS54LGUueSxsK24pfWZvcihsZXQgdD0wLGU9Ty5sZW5ndGg7dDxlO3QrKyl7Y29uc3QgZT1PW3RdO1Q9Ult0XTtmb3IobGV0IHQ9MCxpPWUubGVuZ3RoO3Q8aTt0Kyspe2NvbnN0IGk9ayhlW3RdLFRbdF0sbyk7TT9IKGkueCxpLnkraFtzLTFdLnksaFtzLTFdLngrbik6SChpLngsaS55LGwrbil9fX1mdW5jdGlvbiB6KHQsZSl7bGV0IG49dC5sZW5ndGg7Zm9yKDstLW4+PTA7KXtjb25zdCBvPW47bGV0IGk9bi0xO2k8MCYmKGk9dC5sZW5ndGgtMSk7Zm9yKGxldCB0PTAsbj1zKzIqdTt0PG47dCsrKXtjb25zdCBuPVMqdCxhPVMqKHQrMSk7TChlK28rbixlK2krbixlK2krYSxlK28rYSl9fX1mdW5jdGlvbiBIKHQsZSxuKXthLnB1c2godCksYS5wdXNoKGUpLGEucHVzaChuKX1mdW5jdGlvbiBGKHQsZSxpKXtCKHQpLEIoZSksQihpKTtjb25zdCBhPW8ubGVuZ3RoLzMscj1nLmdlbmVyYXRlVG9wVVYobixvLGEtMyxhLTIsYS0xKTtWKHJbMF0pLFYoclsxXSksVihyWzJdKX1mdW5jdGlvbiBMKHQsZSxpLGEpe0IodCksQihlKSxCKGEpLEIoZSksQihpKSxCKGEpO2NvbnN0IHI9by5sZW5ndGgvMyxzPWcuZ2VuZXJhdGVTaWRlV2FsbFVWKG4sbyxyLTYsci0zLHItMixyLTEpO1Yoc1swXSksVihzWzFdKSxWKHNbM10pLFYoc1sxXSksVihzWzJdKSxWKHNbM10pfWZ1bmN0aW9uIEIodCl7by5wdXNoKGFbMyp0KzBdKSxvLnB1c2goYVszKnQrMV0pLG8ucHVzaChhWzMqdCsyXSl9ZnVuY3Rpb24gVih0KXtpLnB1c2godC54KSxpLnB1c2godC55KX0hKGZ1bmN0aW9uIGooKXtjb25zdCB0PW8ubGVuZ3RoLzM7aWYoYyl7bGV0IHQ9MCxlPVMqdDtmb3IobGV0IHQ9MDt0PEQ7dCsrKXtjb25zdCBuPVBbdF07RihuWzJdK2UsblsxXStlLG5bMF0rZSl9dD1zKzIqdSxlPVMqdDtmb3IobGV0IHQ9MDt0PEQ7dCsrKXtjb25zdCBuPVBbdF07RihuWzBdK2UsblsxXStlLG5bMl0rZSl9fWVsc2V7Zm9yKGxldCB0PTA7dDxEO3QrKyl7Y29uc3QgZT1QW3RdO0YoZVsyXSxlWzFdLGVbMF0pfWZvcihsZXQgdD0wO3Q8RDt0Kyspe2NvbnN0IGU9UFt0XTtGKGVbMF0rUypzLGVbMV0rUypzLGVbMl0rUypzKX19bi5hZGRHcm91cCh0LG8ubGVuZ3RoLzMtdCwwKX0pKCksKGZ1bmN0aW9uIFUoKXtjb25zdCB0PW8ubGVuZ3RoLzM7bGV0IGU9MDt6KHcsZSksZSs9dy5sZW5ndGg7Zm9yKGxldCB0PTAsbj1PLmxlbmd0aDt0PG47dCsrKXtjb25zdCBuPU9bdF07eihuLGUpLGUrPW4ubGVuZ3RofW4uYWRkR3JvdXAodCxvLmxlbmd0aC8zLXQsMSl9KSgpfXRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHpydChvLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyB6cnQoaSwyKSksdGhpcy5jb21wdXRlVmVydGV4Tm9ybWFscygpfXRvSlNPTigpe2NvbnN0IHQ9WnJ0LnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzKTtyZXR1cm4oZnVuY3Rpb24gZSh0LG4sbyl7aWYoby5zaGFwZXM9W10sQXJyYXkuaXNBcnJheSh0KSlmb3IobGV0IGU9MCxuPXQubGVuZ3RoO2U8bjtlKyspby5zaGFwZXMucHVzaCh0W2VdLnV1aWQpO2Vsc2Ugby5zaGFwZXMucHVzaCh0LnV1aWQpO3JldHVybiB2b2lkIDAhPT1uLmV4dHJ1ZGVQYXRoJiYoby5vcHRpb25zLmV4dHJ1ZGVQYXRoPW4uZXh0cnVkZVBhdGgudG9KU09OKCkpLG99KSh0aGlzLnBhcmFtZXRlcnMuc2hhcGVzLHRoaXMucGFyYW1ldGVycy5vcHRpb25zLHQpfX1jb25zdCB5cHQ9e2dlbmVyYXRlVG9wVVY6ZnVuY3Rpb24odCxlLG4sbyxpKXtjb25zdCBhPWVbMypvXSxyPWVbMypvKzFdLHM9ZVszKmldLGw9ZVszKmkrMV07cmV0dXJuW25ldyBVaXQoZVszKm5dLGVbMypuKzFdKSxuZXcgVWl0KGEsciksbmV3IFVpdChzLGwpXX0sZ2VuZXJhdGVTaWRlV2FsbFVWOmZ1bmN0aW9uKHQsZSxuLG8saSxhKXtjb25zdCByPWVbMypuXSxzPWVbMypuKzFdLGw9ZVszKm4rMl0sYz1lWzMqb10sZD1lWzMqbysxXSxwPWVbMypvKzJdLG09ZVszKmldLHU9ZVszKmkrMV0sZj1lWzMqaSsyXSxnPWVbMyphXSxoPWVbMyphKzFdLGI9ZVszKmErMl07cmV0dXJuIE1hdGguYWJzKHMtZCk8LjAxP1tuZXcgVWl0KHIsMS1sKSxuZXcgVWl0KGMsMS1wKSxuZXcgVWl0KG0sMS1mKSxuZXcgVWl0KGcsMS1iKV06W25ldyBVaXQocywxLWwpLG5ldyBVaXQoZCwxLXApLG5ldyBVaXQodSwxLWYpLG5ldyBVaXQoaCwxLWIpXX19O2Z1bmN0aW9uIF9wdCh0LGUsbil7WnJ0LmNhbGwodGhpcyksdGhpcy50eXBlPSJQYXJhbWV0cmljR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17ZnVuYzp0LHNsaWNlczplLHN0YWNrczpufTtjb25zdCBvPVtdLGk9W10sYT1bXSxyPVtdLHM9MWUtNSxsPW5ldyAkaXQsYz1uZXcgJGl0LGQ9bmV3ICRpdCxwPW5ldyAkaXQsbT1uZXcgJGl0O3QubGVuZ3RoPDMmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLlBhcmFtZXRyaWNHZW9tZXRyeTogRnVuY3Rpb24gbXVzdCBub3cgbW9kaWZ5IGEgVmVjdG9yMyBhcyB0aGlyZCBwYXJhbWV0ZXIuIik7Y29uc3QgdT1lKzE7Zm9yKGxldCBvPTA7bzw9bjtvKyspe2NvbnN0IHU9by9uO2ZvcihsZXQgbj0wO248PWU7bisrKXtjb25zdCBvPW4vZTt0KG8sdSxjKSxpLnB1c2goYy54LGMueSxjLnopLG8tcz49MD8odChvLXMsdSxkKSxwLnN1YlZlY3RvcnMoYyxkKSk6KHQobytzLHUsZCkscC5zdWJWZWN0b3JzKGQsYykpLHUtcz49MD8odChvLHUtcyxkKSxtLnN1YlZlY3RvcnMoYyxkKSk6KHQobyx1K3MsZCksbS5zdWJWZWN0b3JzKGQsYykpLGwuY3Jvc3NWZWN0b3JzKHAsbSkubm9ybWFsaXplKCksYS5wdXNoKGwueCxsLnksbC56KSxyLnB1c2gobyx1KX19Zm9yKGxldCB0PTA7dDxuO3QrKylmb3IobGV0IG49MDtuPGU7bisrKXtjb25zdCBlPXQqdStuKzEsaT0odCsxKSp1K24rMSxhPSh0KzEpKnUrbjtvLnB1c2godCp1K24sZSxhKSxvLnB1c2goZSxpLGEpfXRoaXMuc2V0SW5kZXgobyksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgenJ0KGksMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyB6cnQoYSwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgenJ0KHIsMikpfShfcHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoWnJ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPV9wdDtjbGFzcyBDcHQgZXh0ZW5kcyBacnR7Y29uc3RydWN0b3IodCxlPTEyKXtzdXBlcigpLHRoaXMudHlwZT0iU2hhcGVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtzaGFwZXM6dCxjdXJ2ZVNlZ21lbnRzOmV9O2NvbnN0IG49W10sbz1bXSxpPVtdLGE9W107bGV0IHI9MCxzPTA7aWYoITE9PT1BcnJheS5pc0FycmF5KHQpKWwodCk7ZWxzZSBmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKylsKHRbZV0pLHRoaXMuYWRkR3JvdXAocixzLGUpLHIrPXMscz0wO2Z1bmN0aW9uIGwodCl7Y29uc3Qgcj1vLmxlbmd0aC8zLGw9dC5leHRyYWN0UG9pbnRzKGUpO2xldCBjPWwuc2hhcGU7Y29uc3QgZD1sLmhvbGVzOyExPT09ZnB0LmlzQ2xvY2tXaXNlKGMpJiYoYz1jLnJldmVyc2UoKSk7Zm9yKGxldCB0PTAsZT1kLmxlbmd0aDt0PGU7dCsrKXtjb25zdCBlPWRbdF07ITA9PT1mcHQuaXNDbG9ja1dpc2UoZSkmJihkW3RdPWUucmV2ZXJzZSgpKX1jb25zdCBwPWZwdC50cmlhbmd1bGF0ZVNoYXBlKGMsZCk7Zm9yKGxldCB0PTAsZT1kLmxlbmd0aDt0PGU7dCsrKWM9Yy5jb25jYXQoZFt0XSk7Zm9yKGxldCB0PTAsZT1jLmxlbmd0aDt0PGU7dCsrKXtjb25zdCBlPWNbdF07by5wdXNoKGUueCxlLnksMCksaS5wdXNoKDAsMCwxKSxhLnB1c2goZS54LGUueSl9Zm9yKGxldCB0PTAsZT1wLmxlbmd0aDt0PGU7dCsrKXtjb25zdCBlPXBbdF07bi5wdXNoKGVbMF0rcixlWzFdK3IsZVsyXStyKSxzKz0zfX10aGlzLnNldEluZGV4KG4pLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHpydChvLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgenJ0KGksMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IHpydChhLDIpKX10b0pTT04oKXtjb25zdCB0PVpydC5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyk7cmV0dXJuKGZ1bmN0aW9uIGUodCxuKXtpZihuLnNoYXBlcz1bXSxBcnJheS5pc0FycmF5KHQpKWZvcihsZXQgZT0wLG89dC5sZW5ndGg7ZTxvO2UrKyluLnNoYXBlcy5wdXNoKHRbZV0udXVpZCk7ZWxzZSBuLnNoYXBlcy5wdXNoKHQudXVpZCk7cmV0dXJuIG59KSh0aGlzLnBhcmFtZXRlcnMuc2hhcGVzLHQpfX1mdW5jdGlvbiBNcHQodCl7eHJ0LmNhbGwodGhpcyksdGhpcy50eXBlPSJTaGFkb3dNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgQ3J0KDApLHRoaXMudHJhbnNwYXJlbnQ9ITAsdGhpcy5zZXRWYWx1ZXModCl9ZnVuY3Rpb24gdnB0KHQpe3lzdC5jYWxsKHRoaXMsdCksdGhpcy50eXBlPSJSYXdTaGFkZXJNYXRlcmlhbCJ9ZnVuY3Rpb24geHB0KHQpe3hydC5jYWxsKHRoaXMpLHRoaXMuZGVmaW5lcz17U1RBTkRBUkQ6IiJ9LHRoaXMudHlwZT0iTWVzaFN0YW5kYXJkTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IENydCgxNjc3NzIxNSksdGhpcy5yb3VnaG5lc3M9MSx0aGlzLm1ldGFsbmVzcz0wLHRoaXMubWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmU9bmV3IENydCgwKSx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZU1hcD1udWxsLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9MCx0aGlzLm5vcm1hbFNjYWxlPW5ldyBVaXQoMSwxKSx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLnJvdWdobmVzc01hcD1udWxsLHRoaXMubWV0YWxuZXNzTWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZW52TWFwPW51bGwsdGhpcy5lbnZNYXBJbnRlbnNpdHk9MSx0aGlzLnJlZnJhY3Rpb25SYXRpbz0uOTgsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZUxpbmVjYXA9InJvdW5kIix0aGlzLndpcmVmcmFtZUxpbmVqb2luPSJyb3VuZCIsdGhpcy5za2lubmluZz0hMSx0aGlzLm1vcnBoVGFyZ2V0cz0hMSx0aGlzLm1vcnBoTm9ybWFscz0hMSx0aGlzLnZlcnRleFRhbmdlbnRzPSExLHRoaXMuc2V0VmFsdWVzKHQpfWZ1bmN0aW9uIE9wdCh0KXt4cHQuY2FsbCh0aGlzKSx0aGlzLmRlZmluZXM9e1NUQU5EQVJEOiIiLFBIWVNJQ0FMOiIifSx0aGlzLnR5cGU9Ik1lc2hQaHlzaWNhbE1hdGVyaWFsIix0aGlzLmNsZWFyY29hdD0wLHRoaXMuY2xlYXJjb2F0TWFwPW51bGwsdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3M9MCx0aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcD1udWxsLHRoaXMuY2xlYXJjb2F0Tm9ybWFsU2NhbGU9bmV3IFVpdCgxLDEpLHRoaXMuY2xlYXJjb2F0Tm9ybWFsTWFwPW51bGwsdGhpcy5yZWZsZWN0aXZpdHk9LjUsT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlvciIse2dldDpmdW5jdGlvbigpe3JldHVybigxKy40KnRoaXMucmVmbGVjdGl2aXR5KS8oMS0uNCp0aGlzLnJlZmxlY3Rpdml0eSl9LHNldDpmdW5jdGlvbih0KXt0aGlzLnJlZmxlY3Rpdml0eT1qaXQuY2xhbXAoMi41Kih0LTEpLyh0KzEpLDAsMSl9fSksdGhpcy5zaGVlbj1udWxsLHRoaXMudHJhbnNtaXNzaW9uPTAsdGhpcy50cmFuc21pc3Npb25NYXA9bnVsbCx0aGlzLnNldFZhbHVlcyh0KX1mdW5jdGlvbiBQcHQodCl7eHJ0LmNhbGwodGhpcyksdGhpcy50eXBlPSJNZXNoUGhvbmdNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgQ3J0KDE2Nzc3MjE1KSx0aGlzLnNwZWN1bGFyPW5ldyBDcnQoMTExODQ4MSksdGhpcy5zaGluaW5lc3M9MzAsdGhpcy5tYXA9bnVsbCx0aGlzLmxpZ2h0TWFwPW51bGwsdGhpcy5saWdodE1hcEludGVuc2l0eT0xLHRoaXMuYW9NYXA9bnVsbCx0aGlzLmFvTWFwSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZT1uZXcgQ3J0KDApLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlTWFwPW51bGwsdGhpcy5idW1wTWFwPW51bGwsdGhpcy5idW1wU2NhbGU9MSx0aGlzLm5vcm1hbE1hcD1udWxsLHRoaXMubm9ybWFsTWFwVHlwZT0wLHRoaXMubm9ybWFsU2NhbGU9bmV3IFVpdCgxLDEpLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMuc3BlY3VsYXJNYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5lbnZNYXA9bnVsbCx0aGlzLmNvbWJpbmU9MCx0aGlzLnJlZmxlY3Rpdml0eT0xLHRoaXMucmVmcmFjdGlvblJhdGlvPS45OCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLnNraW5uaW5nPSExLHRoaXMubW9ycGhUYXJnZXRzPSExLHRoaXMubW9ycGhOb3JtYWxzPSExLHRoaXMuc2V0VmFsdWVzKHQpfWZ1bmN0aW9uIHdwdCh0KXt4cnQuY2FsbCh0aGlzKSx0aGlzLmRlZmluZXM9e1RPT046IiJ9LHRoaXMudHlwZT0iTWVzaFRvb25NYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgQ3J0KDE2Nzc3MjE1KSx0aGlzLm1hcD1udWxsLHRoaXMuZ3JhZGllbnRNYXA9bnVsbCx0aGlzLmxpZ2h0TWFwPW51bGwsdGhpcy5saWdodE1hcEludGVuc2l0eT0xLHRoaXMuYW9NYXA9bnVsbCx0aGlzLmFvTWFwSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZT1uZXcgQ3J0KDApLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlTWFwPW51bGwsdGhpcy5idW1wTWFwPW51bGwsdGhpcy5idW1wU2NhbGU9MSx0aGlzLm5vcm1hbE1hcD1udWxsLHRoaXMubm9ybWFsTWFwVHlwZT0wLHRoaXMubm9ybWFsU2NhbGU9bmV3IFVpdCgxLDEpLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLnNraW5uaW5nPSExLHRoaXMubW9ycGhUYXJnZXRzPSExLHRoaXMubW9ycGhOb3JtYWxzPSExLHRoaXMuc2V0VmFsdWVzKHQpfWZ1bmN0aW9uIGtwdCh0KXt4cnQuY2FsbCh0aGlzKSx0aGlzLnR5cGU9Ik1lc2hOb3JtYWxNYXRlcmlhbCIsdGhpcy5idW1wTWFwPW51bGwsdGhpcy5idW1wU2NhbGU9MSx0aGlzLm5vcm1hbE1hcD1udWxsLHRoaXMubm9ybWFsTWFwVHlwZT0wLHRoaXMubm9ybWFsU2NhbGU9bmV3IFVpdCgxLDEpLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy5mb2c9ITEsdGhpcy5za2lubmluZz0hMSx0aGlzLm1vcnBoVGFyZ2V0cz0hMSx0aGlzLm1vcnBoTm9ybWFscz0hMSx0aGlzLnNldFZhbHVlcyh0KX1mdW5jdGlvbiBTcHQodCl7eHJ0LmNhbGwodGhpcyksdGhpcy50eXBlPSJNZXNoTGFtYmVydE1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBDcnQoMTY3NzcyMTUpLHRoaXMubWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmU9bmV3IENydCgwKSx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZU1hcD1udWxsLHRoaXMuc3BlY3VsYXJNYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5lbnZNYXA9bnVsbCx0aGlzLmNvbWJpbmU9MCx0aGlzLnJlZmxlY3Rpdml0eT0xLHRoaXMucmVmcmFjdGlvblJhdGlvPS45OCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLnNraW5uaW5nPSExLHRoaXMubW9ycGhUYXJnZXRzPSExLHRoaXMubW9ycGhOb3JtYWxzPSExLHRoaXMuc2V0VmFsdWVzKHQpfWZ1bmN0aW9uIERwdCh0KXt4cnQuY2FsbCh0aGlzKSx0aGlzLmRlZmluZXM9e01BVENBUDoiIn0sdGhpcy50eXBlPSJNZXNoTWF0Y2FwTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IENydCgxNjc3NzIxNSksdGhpcy5tYXRjYXA9bnVsbCx0aGlzLm1hcD1udWxsLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9MCx0aGlzLm5vcm1hbFNjYWxlPW5ldyBVaXQoMSwxKSx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5za2lubmluZz0hMSx0aGlzLm1vcnBoVGFyZ2V0cz0hMSx0aGlzLm1vcnBoTm9ybWFscz0hMSx0aGlzLnNldFZhbHVlcyh0KX1mdW5jdGlvbiBFcHQodCl7TWR0LmNhbGwodGhpcyksdGhpcy50eXBlPSJMaW5lRGFzaGVkTWF0ZXJpYWwiLHRoaXMuc2NhbGU9MSx0aGlzLmRhc2hTaXplPTMsdGhpcy5nYXBTaXplPTEsdGhpcy5zZXRWYWx1ZXModCl9KE1wdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh4cnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9TXB0LE1wdC5wcm90b3R5cGUuaXNTaGFkb3dNYXRlcmlhbD0hMCxNcHQucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24odCl7cmV0dXJuIHhydC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXN9LCh2cHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeXN0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPXZwdCx2cHQucHJvdG90eXBlLmlzUmF3U2hhZGVyTWF0ZXJpYWw9ITAsKHhwdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh4cnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9eHB0LHhwdC5wcm90b3R5cGUuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD0hMCx4cHQucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24odCl7cmV0dXJuIHhydC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy5kZWZpbmVzPXtTVEFOREFSRDoiIn0sdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMucm91Z2huZXNzPXQucm91Z2huZXNzLHRoaXMubWV0YWxuZXNzPXQubWV0YWxuZXNzLHRoaXMubWFwPXQubWFwLHRoaXMubGlnaHRNYXA9dC5saWdodE1hcCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PXQubGlnaHRNYXBJbnRlbnNpdHksdGhpcy5hb01hcD10LmFvTWFwLHRoaXMuYW9NYXBJbnRlbnNpdHk9dC5hb01hcEludGVuc2l0eSx0aGlzLmVtaXNzaXZlLmNvcHkodC5lbWlzc2l2ZSksdGhpcy5lbWlzc2l2ZU1hcD10LmVtaXNzaXZlTWFwLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9dC5lbWlzc2l2ZUludGVuc2l0eSx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMucm91Z2huZXNzTWFwPXQucm91Z2huZXNzTWFwLHRoaXMubWV0YWxuZXNzTWFwPXQubWV0YWxuZXNzTWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmVudk1hcD10LmVudk1hcCx0aGlzLmVudk1hcEludGVuc2l0eT10LmVudk1hcEludGVuc2l0eSx0aGlzLnJlZnJhY3Rpb25SYXRpbz10LnJlZnJhY3Rpb25SYXRpbyx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLndpcmVmcmFtZUxpbmVjYXA9dC53aXJlZnJhbWVMaW5lY2FwLHRoaXMud2lyZWZyYW1lTGluZWpvaW49dC53aXJlZnJhbWVMaW5lam9pbix0aGlzLnNraW5uaW5nPXQuc2tpbm5pbmcsdGhpcy5tb3JwaFRhcmdldHM9dC5tb3JwaFRhcmdldHMsdGhpcy5tb3JwaE5vcm1hbHM9dC5tb3JwaE5vcm1hbHMsdGhpcy52ZXJ0ZXhUYW5nZW50cz10LnZlcnRleFRhbmdlbnRzLHRoaXN9LChPcHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeHB0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPU9wdCxPcHQucHJvdG90eXBlLmlzTWVzaFBoeXNpY2FsTWF0ZXJpYWw9ITAsT3B0LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHQpe3JldHVybiB4cHQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMuZGVmaW5lcz17U1RBTkRBUkQ6IiIsUEhZU0lDQUw6IiJ9LHRoaXMuY2xlYXJjb2F0PXQuY2xlYXJjb2F0LHRoaXMuY2xlYXJjb2F0TWFwPXQuY2xlYXJjb2F0TWFwLHRoaXMuY2xlYXJjb2F0Um91Z2huZXNzPXQuY2xlYXJjb2F0Um91Z2huZXNzLHRoaXMuY2xlYXJjb2F0Um91Z2huZXNzTWFwPXQuY2xlYXJjb2F0Um91Z2huZXNzTWFwLHRoaXMuY2xlYXJjb2F0Tm9ybWFsTWFwPXQuY2xlYXJjb2F0Tm9ybWFsTWFwLHRoaXMuY2xlYXJjb2F0Tm9ybWFsU2NhbGUuY29weSh0LmNsZWFyY29hdE5vcm1hbFNjYWxlKSx0aGlzLnJlZmxlY3Rpdml0eT10LnJlZmxlY3Rpdml0eSx0aGlzLnNoZWVuPXQuc2hlZW4/KHRoaXMuc2hlZW58fG5ldyBDcnQpLmNvcHkodC5zaGVlbik6bnVsbCx0aGlzLnRyYW5zbWlzc2lvbj10LnRyYW5zbWlzc2lvbix0aGlzLnRyYW5zbWlzc2lvbk1hcD10LnRyYW5zbWlzc2lvbk1hcCx0aGlzfSwoUHB0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHhydC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1QcHQsUHB0LnByb3RvdHlwZS5pc01lc2hQaG9uZ01hdGVyaWFsPSEwLFBwdC5wcm90b3R5cGUuY29weT1mdW5jdGlvbih0KXtyZXR1cm4geHJ0LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5zcGVjdWxhci5jb3B5KHQuc3BlY3VsYXIpLHRoaXMuc2hpbmluZXNzPXQuc2hpbmluZXNzLHRoaXMubWFwPXQubWFwLHRoaXMubGlnaHRNYXA9dC5saWdodE1hcCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PXQubGlnaHRNYXBJbnRlbnNpdHksdGhpcy5hb01hcD10LmFvTWFwLHRoaXMuYW9NYXBJbnRlbnNpdHk9dC5hb01hcEludGVuc2l0eSx0aGlzLmVtaXNzaXZlLmNvcHkodC5lbWlzc2l2ZSksdGhpcy5lbWlzc2l2ZU1hcD10LmVtaXNzaXZlTWFwLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9dC5lbWlzc2l2ZUludGVuc2l0eSx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMuc3BlY3VsYXJNYXA9dC5zcGVjdWxhck1hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5lbnZNYXA9dC5lbnZNYXAsdGhpcy5jb21iaW5lPXQuY29tYmluZSx0aGlzLnJlZmxlY3Rpdml0eT10LnJlZmxlY3Rpdml0eSx0aGlzLnJlZnJhY3Rpb25SYXRpbz10LnJlZnJhY3Rpb25SYXRpbyx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLndpcmVmcmFtZUxpbmVjYXA9dC53aXJlZnJhbWVMaW5lY2FwLHRoaXMud2lyZWZyYW1lTGluZWpvaW49dC53aXJlZnJhbWVMaW5lam9pbix0aGlzLnNraW5uaW5nPXQuc2tpbm5pbmcsdGhpcy5tb3JwaFRhcmdldHM9dC5tb3JwaFRhcmdldHMsdGhpcy5tb3JwaE5vcm1hbHM9dC5tb3JwaE5vcm1hbHMsdGhpc30sKHdwdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh4cnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9d3B0LHdwdC5wcm90b3R5cGUuaXNNZXNoVG9vbk1hdGVyaWFsPSEwLHdwdC5wcm90b3R5cGUuY29weT1mdW5jdGlvbih0KXtyZXR1cm4geHJ0LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5tYXA9dC5tYXAsdGhpcy5ncmFkaWVudE1hcD10LmdyYWRpZW50TWFwLHRoaXMubGlnaHRNYXA9dC5saWdodE1hcCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PXQubGlnaHRNYXBJbnRlbnNpdHksdGhpcy5hb01hcD10LmFvTWFwLHRoaXMuYW9NYXBJbnRlbnNpdHk9dC5hb01hcEludGVuc2l0eSx0aGlzLmVtaXNzaXZlLmNvcHkodC5lbWlzc2l2ZSksdGhpcy5lbWlzc2l2ZU1hcD10LmVtaXNzaXZlTWFwLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9dC5lbWlzc2l2ZUludGVuc2l0eSx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLndpcmVmcmFtZUxpbmVjYXA9dC53aXJlZnJhbWVMaW5lY2FwLHRoaXMud2lyZWZyYW1lTGluZWpvaW49dC53aXJlZnJhbWVMaW5lam9pbix0aGlzLnNraW5uaW5nPXQuc2tpbm5pbmcsdGhpcy5tb3JwaFRhcmdldHM9dC5tb3JwaFRhcmdldHMsdGhpcy5tb3JwaE5vcm1hbHM9dC5tb3JwaE5vcm1hbHMsdGhpc30sKGtwdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh4cnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9a3B0LGtwdC5wcm90b3R5cGUuaXNNZXNoTm9ybWFsTWF0ZXJpYWw9ITAsa3B0LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHQpe3JldHVybiB4cnQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMuYnVtcE1hcD10LmJ1bXBNYXAsdGhpcy5idW1wU2NhbGU9dC5idW1wU2NhbGUsdGhpcy5ub3JtYWxNYXA9dC5ub3JtYWxNYXAsdGhpcy5ub3JtYWxNYXBUeXBlPXQubm9ybWFsTWFwVHlwZSx0aGlzLm5vcm1hbFNjYWxlLmNvcHkodC5ub3JtYWxTY2FsZSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9dC5kaXNwbGFjZW1lbnRNYXAsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT10LmRpc3BsYWNlbWVudFNjYWxlLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz10LmRpc3BsYWNlbWVudEJpYXMsdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy5za2lubmluZz10LnNraW5uaW5nLHRoaXMubW9ycGhUYXJnZXRzPXQubW9ycGhUYXJnZXRzLHRoaXMubW9ycGhOb3JtYWxzPXQubW9ycGhOb3JtYWxzLHRoaXN9LChTcHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeHJ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPVNwdCxTcHQucHJvdG90eXBlLmlzTWVzaExhbWJlcnRNYXRlcmlhbD0hMCxTcHQucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24odCl7cmV0dXJuIHhydC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubWFwPXQubWFwLHRoaXMubGlnaHRNYXA9dC5saWdodE1hcCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PXQubGlnaHRNYXBJbnRlbnNpdHksdGhpcy5hb01hcD10LmFvTWFwLHRoaXMuYW9NYXBJbnRlbnNpdHk9dC5hb01hcEludGVuc2l0eSx0aGlzLmVtaXNzaXZlLmNvcHkodC5lbWlzc2l2ZSksdGhpcy5lbWlzc2l2ZU1hcD10LmVtaXNzaXZlTWFwLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9dC5lbWlzc2l2ZUludGVuc2l0eSx0aGlzLnNwZWN1bGFyTWFwPXQuc3BlY3VsYXJNYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZW52TWFwPXQuZW52TWFwLHRoaXMuY29tYmluZT10LmNvbWJpbmUsdGhpcy5yZWZsZWN0aXZpdHk9dC5yZWZsZWN0aXZpdHksdGhpcy5yZWZyYWN0aW9uUmF0aW89dC5yZWZyYWN0aW9uUmF0aW8sdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpcy5za2lubmluZz10LnNraW5uaW5nLHRoaXMubW9ycGhUYXJnZXRzPXQubW9ycGhUYXJnZXRzLHRoaXMubW9ycGhOb3JtYWxzPXQubW9ycGhOb3JtYWxzLHRoaXN9LChEcHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeHJ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPURwdCxEcHQucHJvdG90eXBlLmlzTWVzaE1hdGNhcE1hdGVyaWFsPSEwLERwdC5wcm90b3R5cGUuY29weT1mdW5jdGlvbih0KXtyZXR1cm4geHJ0LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLmRlZmluZXM9e01BVENBUDoiIn0sdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubWF0Y2FwPXQubWF0Y2FwLHRoaXMubWFwPXQubWFwLHRoaXMuYnVtcE1hcD10LmJ1bXBNYXAsdGhpcy5idW1wU2NhbGU9dC5idW1wU2NhbGUsdGhpcy5ub3JtYWxNYXA9dC5ub3JtYWxNYXAsdGhpcy5ub3JtYWxNYXBUeXBlPXQubm9ybWFsTWFwVHlwZSx0aGlzLm5vcm1hbFNjYWxlLmNvcHkodC5ub3JtYWxTY2FsZSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9dC5kaXNwbGFjZW1lbnRNYXAsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT10LmRpc3BsYWNlbWVudFNjYWxlLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz10LmRpc3BsYWNlbWVudEJpYXMsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuc2tpbm5pbmc9dC5za2lubmluZyx0aGlzLm1vcnBoVGFyZ2V0cz10Lm1vcnBoVGFyZ2V0cyx0aGlzLm1vcnBoTm9ybWFscz10Lm1vcnBoTm9ybWFscyx0aGlzfSwoRXB0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE1kdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1FcHQsRXB0LnByb3RvdHlwZS5pc0xpbmVEYXNoZWRNYXRlcmlhbD0hMCxFcHQucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24odCl7cmV0dXJuIE1kdC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy5zY2FsZT10LnNjYWxlLHRoaXMuZGFzaFNpemU9dC5kYXNoU2l6ZSx0aGlzLmdhcFNpemU9dC5nYXBTaXplLHRoaXN9O3ZhciBBcHQ9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsU2hhZG93TWF0ZXJpYWw6TXB0LFNwcml0ZU1hdGVyaWFsOlZjdCxSYXdTaGFkZXJNYXRlcmlhbDp2cHQsU2hhZGVyTWF0ZXJpYWw6eXN0LFBvaW50c01hdGVyaWFsOlJkdCxNZXNoUGh5c2ljYWxNYXRlcmlhbDpPcHQsTWVzaFN0YW5kYXJkTWF0ZXJpYWw6eHB0LE1lc2hQaG9uZ01hdGVyaWFsOlBwdCxNZXNoVG9vbk1hdGVyaWFsOndwdCxNZXNoTm9ybWFsTWF0ZXJpYWw6a3B0LE1lc2hMYW1iZXJ0TWF0ZXJpYWw6U3B0LE1lc2hEZXB0aE1hdGVyaWFsOk9jdCxNZXNoRGlzdGFuY2VNYXRlcmlhbDpQY3QsTWVzaEJhc2ljTWF0ZXJpYWw6T3J0LE1lc2hNYXRjYXBNYXRlcmlhbDpEcHQsTGluZURhc2hlZE1hdGVyaWFsOkVwdCxMaW5lQmFzaWNNYXRlcmlhbDpNZHQsTWF0ZXJpYWw6eHJ0fSk7Y29uc3QgUnB0PXthcnJheVNsaWNlOmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gUnB0LmlzVHlwZWRBcnJheSh0KT9uZXcgdC5jb25zdHJ1Y3Rvcih0LnN1YmFycmF5KGUsdm9pZCAwIT09bj9uOnQubGVuZ3RoKSk6dC5zbGljZShlLG4pfSxjb252ZXJ0QXJyYXk6ZnVuY3Rpb24odCxlLG4pe3JldHVybiF0fHwhbiYmdC5jb25zdHJ1Y3Rvcj09PWU/dDoibnVtYmVyIj09dHlwZW9mIGUuQllURVNfUEVSX0VMRU1FTlQ/bmV3IGUodCk6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCl9LGlzVHlwZWRBcnJheTpmdW5jdGlvbih0KXtyZXR1cm4gQXJyYXlCdWZmZXIuaXNWaWV3KHQpJiYhKHQgaW5zdGFuY2VvZiBEYXRhVmlldyl9LGdldEtleWZyYW1lT3JkZXI6ZnVuY3Rpb24odCl7Y29uc3QgZT10Lmxlbmd0aCxuPW5ldyBBcnJheShlKTtmb3IobGV0IHQ9MDt0IT09ZTsrK3Qpblt0XT10O3JldHVybiBuLnNvcnQoKGZ1bmN0aW9uIG8oZSxuKXtyZXR1cm4gdFtlXS10W25dfSkpLG59LHNvcnRlZEFycmF5OmZ1bmN0aW9uKHQsZSxuKXtjb25zdCBvPXQubGVuZ3RoLGk9bmV3IHQuY29uc3RydWN0b3Iobyk7Zm9yKGxldCBhPTAscj0wO3IhPT1vOysrYSl7Y29uc3Qgbz1uW2FdKmU7Zm9yKGxldCBuPTA7biE9PWU7KytuKWlbcisrXT10W28rbl19cmV0dXJuIGl9LGZsYXR0ZW5KU09OOmZ1bmN0aW9uKHQsZSxuLG8pe2xldCBpPTEsYT10WzBdO2Zvcig7dm9pZCAwIT09YSYmdm9pZCAwPT09YVtvXTspYT10W2krK107aWYodm9pZCAwPT09YSlyZXR1cm47bGV0IHI9YVtvXTtpZih2b2lkIDAhPT1yKWlmKEFycmF5LmlzQXJyYXkocikpZG97cj1hW29dLHZvaWQgMCE9PXImJihlLnB1c2goYS50aW1lKSxuLnB1c2guYXBwbHkobixyKSksYT10W2krK119d2hpbGUodm9pZCAwIT09YSk7ZWxzZSBpZih2b2lkIDAhPT1yLnRvQXJyYXkpZG97cj1hW29dLHZvaWQgMCE9PXImJihlLnB1c2goYS50aW1lKSxyLnRvQXJyYXkobixuLmxlbmd0aCkpLGE9dFtpKytdfXdoaWxlKHZvaWQgMCE9PWEpO2Vsc2UgZG97cj1hW29dLHZvaWQgMCE9PXImJihlLnB1c2goYS50aW1lKSxuLnB1c2gocikpLGE9dFtpKytdfXdoaWxlKHZvaWQgMCE9PWEpfSxzdWJjbGlwOmZ1bmN0aW9uKHQsZSxuLG8saT0zMCl7Y29uc3QgYT10LmNsb25lKCk7YS5uYW1lPWU7Y29uc3Qgcj1bXTtmb3IobGV0IHQ9MDt0PGEudHJhY2tzLmxlbmd0aDsrK3Qpe2NvbnN0IGU9YS50cmFja3NbdF0scz1lLmdldFZhbHVlU2l6ZSgpLGw9W10sYz1bXTtmb3IobGV0IHQ9MDt0PGUudGltZXMubGVuZ3RoOysrdCl7Y29uc3QgYT1lLnRpbWVzW3RdKmk7aWYoIShhPG58fGE+PW8pKXtsLnB1c2goZS50aW1lc1t0XSk7Zm9yKGxldCBuPTA7bjxzOysrbiljLnB1c2goZS52YWx1ZXNbdCpzK25dKX19MCE9PWwubGVuZ3RoJiYoZS50aW1lcz1ScHQuY29udmVydEFycmF5KGwsZS50aW1lcy5jb25zdHJ1Y3RvciksZS52YWx1ZXM9UnB0LmNvbnZlcnRBcnJheShjLGUudmFsdWVzLmNvbnN0cnVjdG9yKSxyLnB1c2goZSkpfWEudHJhY2tzPXI7bGV0IHM9MS8wO2ZvcihsZXQgdD0wO3Q8YS50cmFja3MubGVuZ3RoOysrdClzPmEudHJhY2tzW3RdLnRpbWVzWzBdJiYocz1hLnRyYWNrc1t0XS50aW1lc1swXSk7Zm9yKGxldCB0PTA7dDxhLnRyYWNrcy5sZW5ndGg7Kyt0KWEudHJhY2tzW3RdLnNoaWZ0KC0xKnMpO3JldHVybiBhLnJlc2V0RHVyYXRpb24oKSxhfSxtYWtlQ2xpcEFkZGl0aXZlOmZ1bmN0aW9uKHQsZT0wLG49dCxvPTMwKXtvPD0wJiYobz0zMCk7Y29uc3QgaT1uLnRyYWNrcy5sZW5ndGgsYT1lL287Zm9yKGxldCBlPTA7ZTxpOysrZSl7Y29uc3Qgbz1uLnRyYWNrc1tlXSxpPW8uVmFsdWVUeXBlTmFtZTtpZigiYm9vbCI9PT1pfHwic3RyaW5nIj09PWkpY29udGludWU7Y29uc3Qgcj10LnRyYWNrcy5maW5kKChmdW5jdGlvbih0KXtyZXR1cm4gdC5uYW1lPT09by5uYW1lJiZ0LlZhbHVlVHlwZU5hbWU9PT1pfSkpO2lmKHZvaWQgMD09PXIpY29udGludWU7bGV0IHM9MDtjb25zdCBsPW8uZ2V0VmFsdWVTaXplKCk7by5jcmVhdGVJbnRlcnBvbGFudC5pc0ludGVycG9sYW50RmFjdG9yeU1ldGhvZEdMVEZDdWJpY1NwbGluZSYmKHM9bC8zKTtsZXQgYz0wO2NvbnN0IGQ9ci5nZXRWYWx1ZVNpemUoKTtyLmNyZWF0ZUludGVycG9sYW50LmlzSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kR0xURkN1YmljU3BsaW5lJiYoYz1kLzMpO2NvbnN0IHA9by50aW1lcy5sZW5ndGgtMTtsZXQgbTtpZihhPD1vLnRpbWVzWzBdKW09UnB0LmFycmF5U2xpY2Uoby52YWx1ZXMscyxsLXMpO2Vsc2UgaWYoYT49by50aW1lc1twXSl7Y29uc3QgdD1wKmwrczttPVJwdC5hcnJheVNsaWNlKG8udmFsdWVzLHQsdCtsLXMpfWVsc2V7Y29uc3QgdD1vLmNyZWF0ZUludGVycG9sYW50KCksZT1zLG49bC1zO3QuZXZhbHVhdGUoYSksbT1ScHQuYXJyYXlTbGljZSh0LnJlc3VsdEJ1ZmZlcixlLG4pfSJxdWF0ZXJuaW9uIj09PWkmJihuZXcgUWl0KS5mcm9tQXJyYXkobSkubm9ybWFsaXplKCkuY29uanVnYXRlKCkudG9BcnJheShtKTtjb25zdCB1PXIudGltZXMubGVuZ3RoO2ZvcihsZXQgdD0wO3Q8dTsrK3Qpe2NvbnN0IGU9dCpkK2M7aWYoInF1YXRlcm5pb24iPT09aSlRaXQubXVsdGlwbHlRdWF0ZXJuaW9uc0ZsYXQoci52YWx1ZXMsZSxtLDAsci52YWx1ZXMsZSk7ZWxzZXtjb25zdCB0PWQtMipjO2ZvcihsZXQgbj0wO248dDsrK24pci52YWx1ZXNbZStuXS09bVtuXX19fXJldHVybiB0LmJsZW5kTW9kZT0yNTAxLHR9fTtmdW5jdGlvbiBUcHQodCxlLG4sbyl7dGhpcy5wYXJhbWV0ZXJQb3NpdGlvbnM9dCx0aGlzLl9jYWNoZWRJbmRleD0wLHRoaXMucmVzdWx0QnVmZmVyPXZvaWQgMCE9PW8/bzpuZXcgZS5jb25zdHJ1Y3RvcihuKSx0aGlzLnNhbXBsZVZhbHVlcz1lLHRoaXMudmFsdWVTaXplPW59ZnVuY3Rpb24gTnB0KHQsZSxuLG8pe1RwdC5jYWxsKHRoaXMsdCxlLG4sbyksdGhpcy5fd2VpZ2h0UHJldj0tMCx0aGlzLl9vZmZzZXRQcmV2PS0wLHRoaXMuX3dlaWdodE5leHQ9LTAsdGhpcy5fb2Zmc2V0TmV4dD0tMH1mdW5jdGlvbiBJcHQodCxlLG4sbyl7VHB0LmNhbGwodGhpcyx0LGUsbixvKX1mdW5jdGlvbiB6cHQodCxlLG4sbyl7VHB0LmNhbGwodGhpcyx0LGUsbixvKX1mdW5jdGlvbiBIcHQodCxlLG4sbyl7aWYodm9pZCAwPT09dCl0aHJvdyBuZXcgRXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IHRyYWNrIG5hbWUgaXMgdW5kZWZpbmVkIik7aWYodm9pZCAwPT09ZXx8MD09PWUubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogbm8ga2V5ZnJhbWVzIGluIHRyYWNrIG5hbWVkICIrdCk7dGhpcy5uYW1lPXQsdGhpcy50aW1lcz1ScHQuY29udmVydEFycmF5KGUsdGhpcy5UaW1lQnVmZmVyVHlwZSksdGhpcy52YWx1ZXM9UnB0LmNvbnZlcnRBcnJheShuLHRoaXMuVmFsdWVCdWZmZXJUeXBlKSx0aGlzLnNldEludGVycG9sYXRpb24ob3x8dGhpcy5EZWZhdWx0SW50ZXJwb2xhdGlvbil9ZnVuY3Rpb24gRnB0KHQsZSxuKXtIcHQuY2FsbCh0aGlzLHQsZSxuKX1mdW5jdGlvbiBMcHQodCxlLG4sbyl7SHB0LmNhbGwodGhpcyx0LGUsbixvKX1mdW5jdGlvbiBCcHQodCxlLG4sbyl7SHB0LmNhbGwodGhpcyx0LGUsbixvKX1mdW5jdGlvbiBWcHQodCxlLG4sbyl7VHB0LmNhbGwodGhpcyx0LGUsbixvKX1mdW5jdGlvbiBqcHQodCxlLG4sbyl7SHB0LmNhbGwodGhpcyx0LGUsbixvKX1mdW5jdGlvbiBVcHQodCxlLG4sbyl7SHB0LmNhbGwodGhpcyx0LGUsbixvKX1mdW5jdGlvbiBXcHQodCxlLG4sbyl7SHB0LmNhbGwodGhpcyx0LGUsbixvKX1mdW5jdGlvbiBHcHQodCxlPS0xLG4sbz0yNTAwKXt0aGlzLm5hbWU9dCx0aGlzLnRyYWNrcz1uLHRoaXMuZHVyYXRpb249ZSx0aGlzLmJsZW5kTW9kZT1vLHRoaXMudXVpZD1qaXQuZ2VuZXJhdGVVVUlEKCksdGhpcy5kdXJhdGlvbjwwJiZ0aGlzLnJlc2V0RHVyYXRpb24oKX1mdW5jdGlvbiBZcHQodCl7aWYodm9pZCAwPT09dC50eXBlKXRocm93IG5ldyBFcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogdHJhY2sgdHlwZSB1bmRlZmluZWQsIGNhbiBub3QgcGFyc2UiKTtjb25zdCBlPShmdW5jdGlvbiBuKHQpe3N3aXRjaCh0LnRvTG93ZXJDYXNlKCkpe2Nhc2Uic2NhbGFyIjpjYXNlImRvdWJsZSI6Y2FzZSJmbG9hdCI6Y2FzZSJudW1iZXIiOmNhc2UiaW50ZWdlciI6cmV0dXJuIEJwdDtjYXNlInZlY3RvciI6Y2FzZSJ2ZWN0b3IyIjpjYXNlInZlY3RvcjMiOmNhc2UidmVjdG9yNCI6cmV0dXJuIFdwdDtjYXNlImNvbG9yIjpyZXR1cm4gTHB0O2Nhc2UicXVhdGVybmlvbiI6cmV0dXJuIGpwdDtjYXNlImJvb2wiOmNhc2UiYm9vbGVhbiI6cmV0dXJuIEZwdDtjYXNlInN0cmluZyI6cmV0dXJuIFVwdH10aHJvdyBuZXcgRXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IFVuc3VwcG9ydGVkIHR5cGVOYW1lOiAiK3QpfSkodC50eXBlKTtpZih2b2lkIDA9PT10LnRpbWVzKXtjb25zdCBlPVtdLG49W107UnB0LmZsYXR0ZW5KU09OKHQua2V5cyxlLG4sInZhbHVlIiksdC50aW1lcz1lLHQudmFsdWVzPW59cmV0dXJuIHZvaWQgMCE9PWUucGFyc2U/ZS5wYXJzZSh0KTpuZXcgZSh0Lm5hbWUsdC50aW1lcyx0LnZhbHVlcyx0LmludGVycG9sYXRpb24pfU9iamVjdC5hc3NpZ24oVHB0LnByb3RvdHlwZSx7ZXZhbHVhdGU6ZnVuY3Rpb24odCl7Y29uc3QgZT10aGlzLnBhcmFtZXRlclBvc2l0aW9ucztsZXQgbj10aGlzLl9jYWNoZWRJbmRleCxvPWVbbl0saT1lW24tMV07dDp7ZTp7bGV0IGE7bjp7bzppZighKHQ8bykpe2ZvcihsZXQgYT1uKzI7Oyl7aWYodm9pZCAwPT09byl7aWYodDxpKWJyZWFrIG87cmV0dXJuIG49ZS5sZW5ndGgsdGhpcy5fY2FjaGVkSW5kZXg9bix0aGlzLmFmdGVyRW5kXyhuLTEsdCxpKX1pZihuPT09YSlicmVhaztpZihpPW8sbz1lWysrbl0sdDxvKWJyZWFrIGV9YT1lLmxlbmd0aDticmVhayBufWlmKHQ+PWkpYnJlYWsgdDt7Y29uc3Qgcj1lWzFdO3Q8ciYmKG49MixpPXIpO2ZvcihsZXQgYT1uLTI7Oyl7aWYodm9pZCAwPT09aSlyZXR1cm4gdGhpcy5fY2FjaGVkSW5kZXg9MCx0aGlzLmJlZm9yZVN0YXJ0XygwLHQsbyk7aWYobj09PWEpYnJlYWs7aWYobz1pLGk9ZVstLW4tMV0sdD49aSlicmVhayBlfWE9bixuPTB9fWZvcig7bjxhOyl7Y29uc3Qgbz1uK2E+Pj4xO3Q8ZVtvXT9hPW86bj1vKzF9aWYobz1lW25dLGk9ZVtuLTFdLHZvaWQgMD09PWkpcmV0dXJuIHRoaXMuX2NhY2hlZEluZGV4PTAsdGhpcy5iZWZvcmVTdGFydF8oMCx0LG8pO2lmKHZvaWQgMD09PW8pcmV0dXJuIG49ZS5sZW5ndGgsdGhpcy5fY2FjaGVkSW5kZXg9bix0aGlzLmFmdGVyRW5kXyhuLTEsaSx0KX10aGlzLl9jYWNoZWRJbmRleD1uLHRoaXMuaW50ZXJ2YWxDaGFuZ2VkXyhuLGksbyl9cmV0dXJuIHRoaXMuaW50ZXJwb2xhdGVfKG4saSx0LG8pfSxzZXR0aW5nczpudWxsLERlZmF1bHRTZXR0aW5nc186e30sZ2V0U2V0dGluZ3NfOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0dGluZ3N8fHRoaXMuRGVmYXVsdFNldHRpbmdzX30sY29weVNhbXBsZVZhbHVlXzpmdW5jdGlvbih0KXtjb25zdCBlPXRoaXMucmVzdWx0QnVmZmVyLG49dGhpcy5zYW1wbGVWYWx1ZXMsbz10aGlzLnZhbHVlU2l6ZSxpPXQqbztmb3IobGV0IHQ9MDt0IT09bzsrK3QpZVt0XT1uW2krdF07cmV0dXJuIGV9LGludGVycG9sYXRlXzpmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiY2FsbCB0byBhYnN0cmFjdCBtZXRob2QiKX0saW50ZXJ2YWxDaGFuZ2VkXzpmdW5jdGlvbigpe319KSxPYmplY3QuYXNzaWduKFRwdC5wcm90b3R5cGUse2JlZm9yZVN0YXJ0XzpUcHQucHJvdG90eXBlLmNvcHlTYW1wbGVWYWx1ZV8sYWZ0ZXJFbmRfOlRwdC5wcm90b3R5cGUuY29weVNhbXBsZVZhbHVlX30pLE5wdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKFRwdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpOcHQsRGVmYXVsdFNldHRpbmdzXzp7ZW5kaW5nU3RhcnQ6QWl0LGVuZGluZ0VuZDpBaXR9LGludGVydmFsQ2hhbmdlZF86ZnVuY3Rpb24odCxlLG4pe2NvbnN0IG89dGhpcy5wYXJhbWV0ZXJQb3NpdGlvbnM7bGV0IGk9dC0yLGE9dCsxLHI9b1tpXSxzPW9bYV07aWYodm9pZCAwPT09cilzd2l0Y2godGhpcy5nZXRTZXR0aW5nc18oKS5lbmRpbmdTdGFydCl7Y2FzZSBSaXQ6aT10LHI9MiplLW47YnJlYWs7Y2FzZSBUaXQ6aT1vLmxlbmd0aC0yLHI9ZStvW2ldLW9baSsxXTticmVhaztkZWZhdWx0Omk9dCxyPW59aWYodm9pZCAwPT09cylzd2l0Y2godGhpcy5nZXRTZXR0aW5nc18oKS5lbmRpbmdFbmQpe2Nhc2UgUml0OmE9dCxzPTIqbi1lO2JyZWFrO2Nhc2UgVGl0OmE9MSxzPW4rb1sxXS1vWzBdO2JyZWFrO2RlZmF1bHQ6YT10LTEscz1lfWNvbnN0IGw9LjUqKG4tZSksYz10aGlzLnZhbHVlU2l6ZTt0aGlzLl93ZWlnaHRQcmV2PWwvKGUtciksdGhpcy5fd2VpZ2h0TmV4dD1sLyhzLW4pLHRoaXMuX29mZnNldFByZXY9aSpjLHRoaXMuX29mZnNldE5leHQ9YSpjfSxpbnRlcnBvbGF0ZV86ZnVuY3Rpb24odCxlLG4sbyl7Y29uc3QgaT10aGlzLnJlc3VsdEJ1ZmZlcixhPXRoaXMuc2FtcGxlVmFsdWVzLHI9dGhpcy52YWx1ZVNpemUscz10KnIsbD1zLXIsYz10aGlzLl9vZmZzZXRQcmV2LGQ9dGhpcy5fb2Zmc2V0TmV4dCxwPXRoaXMuX3dlaWdodFByZXYsbT10aGlzLl93ZWlnaHROZXh0LHU9KG4tZSkvKG8tZSksZj11KnUsZz1mKnUsaD0tcCpnKzIqcCpmLXAqdSxiPSgxK3ApKmcrKC0xLjUtMipwKSpmKygtLjUrcCkqdSsxLHk9KC0xLW0pKmcrKDEuNSttKSpmKy41KnUsXz1tKmctbSpmO2ZvcihsZXQgdD0wO3QhPT1yOysrdClpW3RdPWgqYVtjK3RdK2IqYVtsK3RdK3kqYVtzK3RdK18qYVtkK3RdO3JldHVybiBpfX0pLElwdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKFRwdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpJcHQsaW50ZXJwb2xhdGVfOmZ1bmN0aW9uKHQsZSxuLG8pe2NvbnN0IGk9dGhpcy5yZXN1bHRCdWZmZXIsYT10aGlzLnNhbXBsZVZhbHVlcyxyPXRoaXMudmFsdWVTaXplLHM9dCpyLGw9cy1yLGM9KG4tZSkvKG8tZSksZD0xLWM7Zm9yKGxldCB0PTA7dCE9PXI7Kyt0KWlbdF09YVtsK3RdKmQrYVtzK3RdKmM7cmV0dXJuIGl9fSksenB0LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoVHB0LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOnpwdCxpbnRlcnBvbGF0ZV86ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY29weVNhbXBsZVZhbHVlXyh0LTEpfX0pLE9iamVjdC5hc3NpZ24oSHB0LHt0b0pTT046ZnVuY3Rpb24odCl7Y29uc3QgZT10LmNvbnN0cnVjdG9yO2xldCBuO2lmKHZvaWQgMCE9PWUudG9KU09OKW49ZS50b0pTT04odCk7ZWxzZXtuPXtuYW1lOnQubmFtZSx0aW1lczpScHQuY29udmVydEFycmF5KHQudGltZXMsQXJyYXkpLHZhbHVlczpScHQuY29udmVydEFycmF5KHQudmFsdWVzLEFycmF5KX07Y29uc3QgZT10LmdldEludGVycG9sYXRpb24oKTtlIT09dC5EZWZhdWx0SW50ZXJwb2xhdGlvbiYmKG4uaW50ZXJwb2xhdGlvbj1lKX1yZXR1cm4gbi50eXBlPXQuVmFsdWVUeXBlTmFtZSxufX0pLE9iamVjdC5hc3NpZ24oSHB0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6SHB0LFRpbWVCdWZmZXJUeXBlOkZsb2F0MzJBcnJheSxWYWx1ZUJ1ZmZlclR5cGU6RmxvYXQzMkFycmF5LERlZmF1bHRJbnRlcnBvbGF0aW9uOkRpdCxJbnRlcnBvbGFudEZhY3RvcnlNZXRob2REaXNjcmV0ZTpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IHpwdCh0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksdCl9LEludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IElwdCh0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksdCl9LEludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aDpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IE5wdCh0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksdCl9LHNldEludGVycG9sYXRpb246ZnVuY3Rpb24odCl7bGV0IGU7c3dpdGNoKHQpe2Nhc2UgU2l0OmU9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2REaXNjcmV0ZTticmVhaztjYXNlIERpdDplPXRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyO2JyZWFrO2Nhc2UgRWl0OmU9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGh9aWYodm9pZCAwPT09ZSl7Y29uc3QgZT0idW5zdXBwb3J0ZWQgaW50ZXJwb2xhdGlvbiBmb3IgIit0aGlzLlZhbHVlVHlwZU5hbWUrIiBrZXlmcmFtZSB0cmFjayBuYW1lZCAiK3RoaXMubmFtZTtpZih2b2lkIDA9PT10aGlzLmNyZWF0ZUludGVycG9sYW50KXtpZih0PT09dGhpcy5EZWZhdWx0SW50ZXJwb2xhdGlvbil0aHJvdyBuZXcgRXJyb3IoZSk7dGhpcy5zZXRJbnRlcnBvbGF0aW9uKHRoaXMuRGVmYXVsdEludGVycG9sYXRpb24pfXJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLktleWZyYW1lVHJhY2s6IixlKSx0aGlzfXJldHVybiB0aGlzLmNyZWF0ZUludGVycG9sYW50PWUsdGhpc30sZ2V0SW50ZXJwb2xhdGlvbjpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmNyZWF0ZUludGVycG9sYW50KXtjYXNlIHRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kRGlzY3JldGU6cmV0dXJuIFNpdDtjYXNlIHRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyOnJldHVybiBEaXQ7Y2FzZSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aDpyZXR1cm4gRWl0fX0sZ2V0VmFsdWVTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmFsdWVzLmxlbmd0aC90aGlzLnRpbWVzLmxlbmd0aH0sc2hpZnQ6ZnVuY3Rpb24odCl7aWYoMCE9PXQpe2NvbnN0IGU9dGhpcy50aW1lcztmb3IobGV0IG49MCxvPWUubGVuZ3RoO24hPT1vOysrbillW25dKz10fXJldHVybiB0aGlzfSxzY2FsZTpmdW5jdGlvbih0KXtpZigxIT09dCl7Y29uc3QgZT10aGlzLnRpbWVzO2ZvcihsZXQgbj0wLG89ZS5sZW5ndGg7biE9PW87KytuKWVbbl0qPXR9cmV0dXJuIHRoaXN9LHRyaW06ZnVuY3Rpb24odCxlKXtjb25zdCBuPXRoaXMudGltZXMsbz1uLmxlbmd0aDtsZXQgaT0wLGE9by0xO2Zvcig7aSE9PW8mJm5baV08dDspKytpO2Zvcig7LTEhPT1hJiZuW2FdPmU7KS0tYTtpZigrK2EsMCE9PWl8fGEhPT1vKXtpPj1hJiYoYT1NYXRoLm1heChhLDEpLGk9YS0xKTtjb25zdCB0PXRoaXMuZ2V0VmFsdWVTaXplKCk7dGhpcy50aW1lcz1ScHQuYXJyYXlTbGljZShuLGksYSksdGhpcy52YWx1ZXM9UnB0LmFycmF5U2xpY2UodGhpcy52YWx1ZXMsaSp0LGEqdCl9cmV0dXJuIHRoaXN9LHZhbGlkYXRlOmZ1bmN0aW9uKCl7bGV0IHQ9ITA7Y29uc3QgZT10aGlzLmdldFZhbHVlU2l6ZSgpO2UtTWF0aC5mbG9vcihlKSE9MCYmKGNvbnNvbGUuZXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IEludmFsaWQgdmFsdWUgc2l6ZSBpbiB0cmFjay4iLHRoaXMpLHQ9ITEpO2NvbnN0IG49dGhpcy50aW1lcyxvPXRoaXMudmFsdWVzLGk9bi5sZW5ndGg7MD09PWkmJihjb25zb2xlLmVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBUcmFjayBpcyBlbXB0eS4iLHRoaXMpLHQ9ITEpO2xldCBhPW51bGw7Zm9yKGxldCBlPTA7ZSE9PWk7ZSsrKXtjb25zdCBvPW5bZV07aWYoIm51bWJlciI9PXR5cGVvZiBvJiZpc05hTihvKSl7Y29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogVGltZSBpcyBub3QgYSB2YWxpZCBudW1iZXIuIix0aGlzLGUsbyksdD0hMTticmVha31pZihudWxsIT09YSYmYT5vKXtjb25zb2xlLmVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBPdXQgb2Ygb3JkZXIga2V5cy4iLHRoaXMsZSxvLGEpLHQ9ITE7YnJlYWt9YT1vfWlmKHZvaWQgMCE9PW8mJlJwdC5pc1R5cGVkQXJyYXkobykpZm9yKGxldCBlPTAsbj1vLmxlbmd0aDtlIT09bjsrK2Upe2NvbnN0IG49b1tlXTtpZihpc05hTihuKSl7Y29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogVmFsdWUgaXMgbm90IGEgdmFsaWQgbnVtYmVyLiIsdGhpcyxlLG4pLHQ9ITE7YnJlYWt9fXJldHVybiB0fSxvcHRpbWl6ZTpmdW5jdGlvbigpe2NvbnN0IHQ9UnB0LmFycmF5U2xpY2UodGhpcy50aW1lcyksZT1ScHQuYXJyYXlTbGljZSh0aGlzLnZhbHVlcyksbj10aGlzLmdldFZhbHVlU2l6ZSgpLG89dGhpcy5nZXRJbnRlcnBvbGF0aW9uKCk9PT1FaXQsaT10Lmxlbmd0aC0xO2xldCBhPTE7Zm9yKGxldCByPTE7cjxpOysrcil7bGV0IGk9ITE7Y29uc3Qgcz10W3JdO2lmKHMhPT10W3IrMV0mJigxIT09cnx8cyE9PXRbMF0pKWlmKG8paT0hMDtlbHNle2NvbnN0IHQ9cipuLG89dC1uLGE9dCtuO2ZvcihsZXQgcj0wO3IhPT1uOysrcil7Y29uc3Qgbj1lW3Qrcl07aWYobiE9PWVbbytyXXx8biE9PWVbYStyXSl7aT0hMDticmVha319fWlmKGkpe2lmKHIhPT1hKXt0W2FdPXRbcl07Y29uc3Qgbz1yKm4saT1hKm47Zm9yKGxldCB0PTA7dCE9PW47Kyt0KWVbaSt0XT1lW28rdF19KythfX1pZihpPjApe3RbYV09dFtpXTtmb3IobGV0IHQ9aSpuLG89YSpuLHI9MDtyIT09bjsrK3IpZVtvK3JdPWVbdCtyXTsrK2F9cmV0dXJuIGEhPT10Lmxlbmd0aD8odGhpcy50aW1lcz1ScHQuYXJyYXlTbGljZSh0LDAsYSksdGhpcy52YWx1ZXM9UnB0LmFycmF5U2xpY2UoZSwwLGEqbikpOih0aGlzLnRpbWVzPXQsdGhpcy52YWx1ZXM9ZSksdGhpc30sY2xvbmU6ZnVuY3Rpb24oKXtjb25zdCB0PVJwdC5hcnJheVNsaWNlKHRoaXMudGltZXMsMCksZT1ScHQuYXJyYXlTbGljZSh0aGlzLnZhbHVlcywwKSxuPW5ldygwLHRoaXMuY29uc3RydWN0b3IpKHRoaXMubmFtZSx0LGUpO3JldHVybiBuLmNyZWF0ZUludGVycG9sYW50PXRoaXMuY3JlYXRlSW50ZXJwb2xhbnQsbn19KSxGcHQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShIcHQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6RnB0LFZhbHVlVHlwZU5hbWU6ImJvb2wiLFZhbHVlQnVmZmVyVHlwZTpBcnJheSxEZWZhdWx0SW50ZXJwb2xhdGlvbjpTaXQsSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyOnZvaWQgMCxJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGg6dm9pZCAwfSksTHB0LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoSHB0LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOkxwdCxWYWx1ZVR5cGVOYW1lOiJjb2xvciJ9KSxCcHQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShIcHQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6QnB0LFZhbHVlVHlwZU5hbWU6Im51bWJlciJ9KSxWcHQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShUcHQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6VnB0LGludGVycG9sYXRlXzpmdW5jdGlvbih0LGUsbixvKXtjb25zdCBpPXRoaXMucmVzdWx0QnVmZmVyLGE9dGhpcy5zYW1wbGVWYWx1ZXMscj10aGlzLnZhbHVlU2l6ZSxzPShuLWUpLyhvLWUpO2xldCBsPXQqcjtmb3IobGV0IHQ9bCtyO2whPT10O2wrPTQpUWl0LnNsZXJwRmxhdChpLDAsYSxsLXIsYSxsLHMpO3JldHVybiBpfX0pLGpwdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKEhwdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpqcHQsVmFsdWVUeXBlTmFtZToicXVhdGVybmlvbiIsRGVmYXVsdEludGVycG9sYXRpb246RGl0LEludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IFZwdCh0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksdCl9LEludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aDp2b2lkIDB9KSxVcHQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShIcHQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6VXB0LFZhbHVlVHlwZU5hbWU6InN0cmluZyIsVmFsdWVCdWZmZXJUeXBlOkFycmF5LERlZmF1bHRJbnRlcnBvbGF0aW9uOlNpdCxJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI6dm9pZCAwLEludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aDp2b2lkIDB9KSxXcHQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShIcHQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6V3B0LFZhbHVlVHlwZU5hbWU6InZlY3RvciJ9KSxPYmplY3QuYXNzaWduKEdwdCx7cGFyc2U6ZnVuY3Rpb24odCl7Y29uc3QgZT1bXSxuPXQudHJhY2tzLG89MS8odC5mcHN8fDEpO2ZvcihsZXQgdD0wLGk9bi5sZW5ndGg7dCE9PWk7Kyt0KWUucHVzaChZcHQoblt0XSkuc2NhbGUobykpO2NvbnN0IGk9bmV3IEdwdCh0Lm5hbWUsdC5kdXJhdGlvbixlLHQuYmxlbmRNb2RlKTtyZXR1cm4gaS51dWlkPXQudXVpZCxpfSx0b0pTT046ZnVuY3Rpb24odCl7Y29uc3QgZT1bXSxuPXQudHJhY2tzLG89e25hbWU6dC5uYW1lLGR1cmF0aW9uOnQuZHVyYXRpb24sdHJhY2tzOmUsdXVpZDp0LnV1aWQsYmxlbmRNb2RlOnQuYmxlbmRNb2RlfTtmb3IobGV0IHQ9MCxvPW4ubGVuZ3RoO3QhPT1vOysrdCllLnB1c2goSHB0LnRvSlNPTihuW3RdKSk7cmV0dXJuIG99LENyZWF0ZUZyb21Nb3JwaFRhcmdldFNlcXVlbmNlOmZ1bmN0aW9uKHQsZSxuLG8pe2NvbnN0IGk9ZS5sZW5ndGgsYT1bXTtmb3IobGV0IHQ9MDt0PGk7dCsrKXtsZXQgcj1bXSxzPVtdO3IucHVzaCgodCtpLTEpJWksdCwodCsxKSVpKSxzLnB1c2goMCwxLDApO2NvbnN0IGw9UnB0LmdldEtleWZyYW1lT3JkZXIocik7cj1ScHQuc29ydGVkQXJyYXkociwxLGwpLHM9UnB0LnNvcnRlZEFycmF5KHMsMSxsKSxvfHwwIT09clswXXx8KHIucHVzaChpKSxzLnB1c2goc1swXSkpLGEucHVzaChuZXcgQnB0KCIubW9ycGhUYXJnZXRJbmZsdWVuY2VzWyIrZVt0XS5uYW1lKyJdIixyLHMpLnNjYWxlKDEvbikpfXJldHVybiBuZXcgR3B0KHQsLTEsYSl9LGZpbmRCeU5hbWU6ZnVuY3Rpb24odCxlKXtsZXQgbj10O2lmKCFBcnJheS5pc0FycmF5KHQpKXtjb25zdCBlPXQ7bj1lLmdlb21ldHJ5JiZlLmdlb21ldHJ5LmFuaW1hdGlvbnN8fGUuYW5pbWF0aW9uc31mb3IobGV0IHQ9MDt0PG4ubGVuZ3RoO3QrKylpZihuW3RdLm5hbWU9PT1lKXJldHVybiBuW3RdO3JldHVybiBudWxsfSxDcmVhdGVDbGlwc0Zyb21Nb3JwaFRhcmdldFNlcXVlbmNlczpmdW5jdGlvbih0LGUsbil7Y29uc3Qgbz17fSxpPS9eKFtcdy1dKj8pKFtcZF0rKSQvO2ZvcihsZXQgZT0wLG49dC5sZW5ndGg7ZTxuO2UrKyl7Y29uc3Qgbj10W2VdLGE9bi5uYW1lLm1hdGNoKGkpO2lmKGEmJmEubGVuZ3RoPjEpe2NvbnN0IHQ9YVsxXTtsZXQgZT1vW3RdO2V8fChvW3RdPWU9W10pLGUucHVzaChuKX19Y29uc3QgYT1bXTtmb3IoY29uc3QgdCBpbiBvKWEucHVzaChHcHQuQ3JlYXRlRnJvbU1vcnBoVGFyZ2V0U2VxdWVuY2UodCxvW3RdLGUsbikpO3JldHVybiBhfSxwYXJzZUFuaW1hdGlvbjpmdW5jdGlvbih0LGUpe2lmKCF0KXJldHVybiBjb25zb2xlLmVycm9yKCJUSFJFRS5BbmltYXRpb25DbGlwOiBObyBhbmltYXRpb24gaW4gSlNPTkxvYWRlciBkYXRhLiIpLG51bGw7Y29uc3Qgbj1mdW5jdGlvbih0LGUsbixvLGkpe2lmKDAhPT1uLmxlbmd0aCl7Y29uc3QgYT1bXSxyPVtdO1JwdC5mbGF0dGVuSlNPTihuLGEscixvKSwwIT09YS5sZW5ndGgmJmkucHVzaChuZXcgdChlLGEscikpfX0sbz1bXSxpPXQubmFtZXx8ImRlZmF1bHQiLGE9dC5mcHN8fDMwLHI9dC5ibGVuZE1vZGU7bGV0IHM9dC5sZW5ndGh8fC0xO2NvbnN0IGw9dC5oaWVyYXJjaHl8fFtdO2ZvcihsZXQgdD0wO3Q8bC5sZW5ndGg7dCsrKXtjb25zdCBpPWxbdF0ua2V5cztpZihpJiYwIT09aS5sZW5ndGgpaWYoaVswXS5tb3JwaFRhcmdldHMpe2NvbnN0IHQ9e307bGV0IGU7Zm9yKGU9MDtlPGkubGVuZ3RoO2UrKylpZihpW2VdLm1vcnBoVGFyZ2V0cylmb3IobGV0IG49MDtuPGlbZV0ubW9ycGhUYXJnZXRzLmxlbmd0aDtuKyspdFtpW2VdLm1vcnBoVGFyZ2V0c1tuXV09LTE7Zm9yKGNvbnN0IG4gaW4gdCl7Y29uc3QgdD1bXSxhPVtdO2ZvcihsZXQgbz0wO28hPT1pW2VdLm1vcnBoVGFyZ2V0cy5sZW5ndGg7KytvKXtjb25zdCBvPWlbZV07dC5wdXNoKG8udGltZSksYS5wdXNoKG8ubW9ycGhUYXJnZXQ9PT1uPzE6MCl9by5wdXNoKG5ldyBCcHQoIi5tb3JwaFRhcmdldEluZmx1ZW5jZVsiK24rIl0iLHQsYSkpfXM9dC5sZW5ndGgqKGF8fDEpfWVsc2V7Y29uc3QgYT0iLmJvbmVzWyIrZVt0XS5uYW1lKyJdIjtuKFdwdCxhKyIucG9zaXRpb24iLGksInBvcyIsbyksbihqcHQsYSsiLnF1YXRlcm5pb24iLGksInJvdCIsbyksbihXcHQsYSsiLnNjYWxlIixpLCJzY2wiLG8pfX1yZXR1cm4gMD09PW8ubGVuZ3RoP251bGw6bmV3IEdwdChpLHMsbyxyKX19KSxPYmplY3QuYXNzaWduKEdwdC5wcm90b3R5cGUse3Jlc2V0RHVyYXRpb246ZnVuY3Rpb24oKXtsZXQgdD0wO2ZvcihsZXQgZT0wLG49dGhpcy50cmFja3MubGVuZ3RoO2UhPT1uOysrZSl7Y29uc3Qgbj10aGlzLnRyYWNrc1tlXTt0PU1hdGgubWF4KHQsbi50aW1lc1tuLnRpbWVzLmxlbmd0aC0xXSl9cmV0dXJuIHRoaXMuZHVyYXRpb249dCx0aGlzfSx0cmltOmZ1bmN0aW9uKCl7Zm9yKGxldCB0PTA7dDx0aGlzLnRyYWNrcy5sZW5ndGg7dCsrKXRoaXMudHJhY2tzW3RdLnRyaW0oMCx0aGlzLmR1cmF0aW9uKTtyZXR1cm4gdGhpc30sdmFsaWRhdGU6ZnVuY3Rpb24oKXtsZXQgdD0hMDtmb3IobGV0IGU9MDtlPHRoaXMudHJhY2tzLmxlbmd0aDtlKyspdD10JiZ0aGlzLnRyYWNrc1tlXS52YWxpZGF0ZSgpO3JldHVybiB0fSxvcHRpbWl6ZTpmdW5jdGlvbigpe2ZvcihsZXQgdD0wO3Q8dGhpcy50cmFja3MubGVuZ3RoO3QrKyl0aGlzLnRyYWNrc1t0XS5vcHRpbWl6ZSgpO3JldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbigpe2NvbnN0IHQ9W107Zm9yKGxldCBlPTA7ZTx0aGlzLnRyYWNrcy5sZW5ndGg7ZSsrKXQucHVzaCh0aGlzLnRyYWNrc1tlXS5jbG9uZSgpKTtyZXR1cm4gbmV3IEdwdCh0aGlzLm5hbWUsdGhpcy5kdXJhdGlvbix0LHRoaXMuYmxlbmRNb2RlKX0sdG9KU09OOmZ1bmN0aW9uKCl7cmV0dXJuIEdwdC50b0pTT04odGhpcyl9fSk7Y29uc3QgcXB0PXtlbmFibGVkOiExLGZpbGVzOnt9LGFkZDpmdW5jdGlvbih0LGUpeyExIT09dGhpcy5lbmFibGVkJiYodGhpcy5maWxlc1t0XT1lKX0sZ2V0OmZ1bmN0aW9uKHQpe2lmKCExIT09dGhpcy5lbmFibGVkKXJldHVybiB0aGlzLmZpbGVzW3RdfSxyZW1vdmU6ZnVuY3Rpb24odCl7ZGVsZXRlIHRoaXMuZmlsZXNbdF19LGNsZWFyOmZ1bmN0aW9uKCl7dGhpcy5maWxlcz17fX19LFpwdD1uZXcoZnVuY3Rpb24gWHB0KHQsZSxuKXtjb25zdCBvPXRoaXM7bGV0IGksYT0hMSxyPTAscz0wO2NvbnN0IGw9W107dGhpcy5vblN0YXJ0PXZvaWQgMCx0aGlzLm9uTG9hZD10LHRoaXMub25Qcm9ncmVzcz1lLHRoaXMub25FcnJvcj1uLHRoaXMuaXRlbVN0YXJ0PWZ1bmN0aW9uKHQpe3MrKywhMT09PWEmJnZvaWQgMCE9PW8ub25TdGFydCYmby5vblN0YXJ0KHQscixzKSxhPSEwfSx0aGlzLml0ZW1FbmQ9ZnVuY3Rpb24odCl7cisrLHZvaWQgMCE9PW8ub25Qcm9ncmVzcyYmby5vblByb2dyZXNzKHQscixzKSxyPT09cyYmKGE9ITEsdm9pZCAwIT09by5vbkxvYWQmJm8ub25Mb2FkKCkpfSx0aGlzLml0ZW1FcnJvcj1mdW5jdGlvbih0KXt2b2lkIDAhPT1vLm9uRXJyb3ImJm8ub25FcnJvcih0KX0sdGhpcy5yZXNvbHZlVVJMPWZ1bmN0aW9uKHQpe3JldHVybiBpP2kodCk6dH0sdGhpcy5zZXRVUkxNb2RpZmllcj1mdW5jdGlvbih0KXtyZXR1cm4gaT10LHRoaXN9LHRoaXMuYWRkSGFuZGxlcj1mdW5jdGlvbih0LGUpe3JldHVybiBsLnB1c2godCxlKSx0aGlzfSx0aGlzLnJlbW92ZUhhbmRsZXI9ZnVuY3Rpb24odCl7Y29uc3QgZT1sLmluZGV4T2YodCk7cmV0dXJuLTEhPT1lJiZsLnNwbGljZShlLDIpLHRoaXN9LHRoaXMuZ2V0SGFuZGxlcj1mdW5jdGlvbih0KXtmb3IobGV0IGU9MCxuPWwubGVuZ3RoO2U8bjtlKz0yKXtjb25zdCBuPWxbZV0sbz1sW2UrMV07aWYobi5nbG9iYWwmJihuLmxhc3RJbmRleD0wKSxuLnRlc3QodCkpcmV0dXJuIG99cmV0dXJuIG51bGx9fSk7ZnVuY3Rpb24gS3B0KHQpe3RoaXMubWFuYWdlcj12b2lkIDAhPT10P3Q6WnB0LHRoaXMuY3Jvc3NPcmlnaW49ImFub255bW91cyIsdGhpcy53aXRoQ3JlZGVudGlhbHM9ITEsdGhpcy5wYXRoPSIiLHRoaXMucmVzb3VyY2VQYXRoPSIiLHRoaXMucmVxdWVzdEhlYWRlcj17fX1PYmplY3QuYXNzaWduKEtwdC5wcm90b3R5cGUse2xvYWQ6ZnVuY3Rpb24oKXt9LGxvYWRBc3luYzpmdW5jdGlvbih0LGUpe2NvbnN0IG49dGhpcztyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKG8saSl7bi5sb2FkKHQsbyxlLGkpfSkpfSxwYXJzZTpmdW5jdGlvbigpe30sc2V0Q3Jvc3NPcmlnaW46ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY3Jvc3NPcmlnaW49dCx0aGlzfSxzZXRXaXRoQ3JlZGVudGlhbHM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMud2l0aENyZWRlbnRpYWxzPXQsdGhpc30sc2V0UGF0aDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wYXRoPXQsdGhpc30sc2V0UmVzb3VyY2VQYXRoOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnJlc291cmNlUGF0aD10LHRoaXN9LHNldFJlcXVlc3RIZWFkZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucmVxdWVzdEhlYWRlcj10LHRoaXN9fSk7Y29uc3QgSnB0PXt9O2Z1bmN0aW9uIFFwdCh0KXtLcHQuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uICRwdCh0KXtLcHQuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIHRtdCh0KXtLcHQuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIGVtdCh0KXtLcHQuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIG5tdCh0KXtLcHQuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIG9tdCh0KXtLcHQuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIGltdCh0KXtLcHQuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIGFtdCgpe3RoaXMudHlwZT0iQ3VydmUiLHRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zPTIwMH1mdW5jdGlvbiBybXQodCxlLG4sbyxpLGEscixzKXthbXQuY2FsbCh0aGlzKSx0aGlzLnR5cGU9IkVsbGlwc2VDdXJ2ZSIsdGhpcy5hWD10fHwwLHRoaXMuYVk9ZXx8MCx0aGlzLnhSYWRpdXM9bnx8MSx0aGlzLnlSYWRpdXM9b3x8MSx0aGlzLmFTdGFydEFuZ2xlPWl8fDAsdGhpcy5hRW5kQW5nbGU9YXx8MipNYXRoLlBJLHRoaXMuYUNsb2Nrd2lzZT1yfHwhMSx0aGlzLmFSb3RhdGlvbj1zfHwwfWZ1bmN0aW9uIHNtdCh0LGUsbixvLGksYSl7cm10LmNhbGwodGhpcyx0LGUsbixuLG8saSxhKSx0aGlzLnR5cGU9IkFyY0N1cnZlIn1mdW5jdGlvbiBsbXQoKXtsZXQgdD0wLGU9MCxuPTAsbz0wO2Z1bmN0aW9uIGkoaSxhLHIscyl7dD1pLGU9cixuPS0zKmkrMyphLTIqci1zLG89MippLTIqYStyK3N9cmV0dXJue2luaXRDYXRtdWxsUm9tOmZ1bmN0aW9uKHQsZSxuLG8sYSl7aShlLG4sYSoobi10KSxhKihvLWUpKX0saW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tOmZ1bmN0aW9uKHQsZSxuLG8sYSxyLHMpe2xldCBsPShlLXQpL2EtKG4tdCkvKGErcikrKG4tZSkvcixjPShuLWUpL3ItKG8tZSkvKHIrcykrKG8tbikvcztsKj1yLGMqPXIsaShlLG4sbCxjKX0sY2FsYzpmdW5jdGlvbihpKXtjb25zdCBhPWkqaTtyZXR1cm4gdCtlKmkrbiphK28qKGEqaSl9fX1RcHQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShLcHQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6UXB0LGxvYWQ6ZnVuY3Rpb24odCxlLG4sbyl7dm9pZCAwPT09dCYmKHQ9IiIpLHZvaWQgMCE9PXRoaXMucGF0aCYmKHQ9dGhpcy5wYXRoK3QpLHQ9dGhpcy5tYW5hZ2VyLnJlc29sdmVVUkwodCk7Y29uc3QgaT10aGlzLGE9cXB0LmdldCh0KTtpZih2b2lkIDAhPT1hKXJldHVybiBpLm1hbmFnZXIuaXRlbVN0YXJ0KHQpLHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ZSYmZShhKSxpLm1hbmFnZXIuaXRlbUVuZCh0KX0pLDApLGE7aWYodm9pZCAwIT09SnB0W3RdKXJldHVybiB2b2lkIEpwdFt0XS5wdXNoKHtvbkxvYWQ6ZSxvblByb2dyZXNzOm4sb25FcnJvcjpvfSk7Y29uc3Qgcj10Lm1hdGNoKC9eZGF0YTooLio/KSg7YmFzZTY0KT8sKC4qKSQvKTtsZXQgcztpZihyKXtjb25zdCBuPXJbMV0sYT0hIXJbMl07bGV0IHM9clszXTtzPWRlY29kZVVSSUNvbXBvbmVudChzKSxhJiYocz1hdG9iKHMpKTt0cnl7bGV0IG87Y29uc3QgYT0odGhpcy5yZXNwb25zZVR5cGV8fCIiKS50b0xvd2VyQ2FzZSgpO3N3aXRjaChhKXtjYXNlImFycmF5YnVmZmVyIjpjYXNlImJsb2IiOmNvbnN0IHQ9bmV3IFVpbnQ4QXJyYXkocy5sZW5ndGgpO2ZvcihsZXQgZT0wO2U8cy5sZW5ndGg7ZSsrKXRbZV09cy5jaGFyQ29kZUF0KGUpO289ImJsb2IiPT09YT9uZXcgQmxvYihbdC5idWZmZXJdLHt0eXBlOm59KTp0LmJ1ZmZlcjticmVhaztjYXNlImRvY3VtZW50Ijpjb25zdCBlPW5ldyBET01QYXJzZXI7bz1lLnBhcnNlRnJvbVN0cmluZyhzLG4pO2JyZWFrO2Nhc2UianNvbiI6bz1KU09OLnBhcnNlKHMpO2JyZWFrO2RlZmF1bHQ6bz1zfXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ZSYmZShvKSxpLm1hbmFnZXIuaXRlbUVuZCh0KX0pLDApfWNhdGNoKGUpe3NldFRpbWVvdXQoKGZ1bmN0aW9uKCl7byYmbyhlKSxpLm1hbmFnZXIuaXRlbUVycm9yKHQpLGkubWFuYWdlci5pdGVtRW5kKHQpfSksMCl9fWVsc2V7SnB0W3RdPVtdLEpwdFt0XS5wdXNoKHtvbkxvYWQ6ZSxvblByb2dyZXNzOm4sb25FcnJvcjpvfSkscz1uZXcgWE1MSHR0cFJlcXVlc3Qscy5vcGVuKCJHRVQiLHQsITApLHMuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsKGZ1bmN0aW9uKGUpe2NvbnN0IG49dGhpcy5yZXNwb25zZSxvPUpwdFt0XTtpZihkZWxldGUgSnB0W3RdLDIwMD09PXRoaXMuc3RhdHVzfHwwPT09dGhpcy5zdGF0dXMpezA9PT10aGlzLnN0YXR1cyYmY29uc29sZS53YXJuKCJUSFJFRS5GaWxlTG9hZGVyOiBIVFRQIFN0YXR1cyAwIHJlY2VpdmVkLiIpLHFwdC5hZGQodCxuKTtmb3IobGV0IHQ9MCxlPW8ubGVuZ3RoO3Q8ZTt0Kyspe2NvbnN0IGU9b1t0XTtlLm9uTG9hZCYmZS5vbkxvYWQobil9aS5tYW5hZ2VyLml0ZW1FbmQodCl9ZWxzZXtmb3IobGV0IHQ9MCxuPW8ubGVuZ3RoO3Q8bjt0Kyspe2NvbnN0IG49b1t0XTtuLm9uRXJyb3ImJm4ub25FcnJvcihlKX1pLm1hbmFnZXIuaXRlbUVycm9yKHQpLGkubWFuYWdlci5pdGVtRW5kKHQpfX0pLCExKSxzLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIiwoZnVuY3Rpb24oZSl7Y29uc3Qgbj1KcHRbdF07Zm9yKGxldCB0PTAsbz1uLmxlbmd0aDt0PG87dCsrKXtjb25zdCBvPW5bdF07by5vblByb2dyZXNzJiZvLm9uUHJvZ3Jlc3MoZSl9fSksITEpLHMuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLChmdW5jdGlvbihlKXtjb25zdCBuPUpwdFt0XTtkZWxldGUgSnB0W3RdO2ZvcihsZXQgdD0wLG89bi5sZW5ndGg7dDxvO3QrKyl7Y29uc3Qgbz1uW3RdO28ub25FcnJvciYmby5vbkVycm9yKGUpfWkubWFuYWdlci5pdGVtRXJyb3IodCksaS5tYW5hZ2VyLml0ZW1FbmQodCl9KSwhMSkscy5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsKGZ1bmN0aW9uKGUpe2NvbnN0IG49SnB0W3RdO2RlbGV0ZSBKcHRbdF07Zm9yKGxldCB0PTAsbz1uLmxlbmd0aDt0PG87dCsrKXtjb25zdCBvPW5bdF07by5vbkVycm9yJiZvLm9uRXJyb3IoZSl9aS5tYW5hZ2VyLml0ZW1FcnJvcih0KSxpLm1hbmFnZXIuaXRlbUVuZCh0KX0pLCExKSx2b2lkIDAhPT10aGlzLnJlc3BvbnNlVHlwZSYmKHMucmVzcG9uc2VUeXBlPXRoaXMucmVzcG9uc2VUeXBlKSx2b2lkIDAhPT10aGlzLndpdGhDcmVkZW50aWFscyYmKHMud2l0aENyZWRlbnRpYWxzPXRoaXMud2l0aENyZWRlbnRpYWxzKSxzLm92ZXJyaWRlTWltZVR5cGUmJnMub3ZlcnJpZGVNaW1lVHlwZSh2b2lkIDAhPT10aGlzLm1pbWVUeXBlP3RoaXMubWltZVR5cGU6InRleHQvcGxhaW4iKTtmb3IoY29uc3QgdCBpbiB0aGlzLnJlcXVlc3RIZWFkZXIpcy5zZXRSZXF1ZXN0SGVhZGVyKHQsdGhpcy5yZXF1ZXN0SGVhZGVyW3RdKTtzLnNlbmQobnVsbCl9cmV0dXJuIGkubWFuYWdlci5pdGVtU3RhcnQodCksc30sc2V0UmVzcG9uc2VUeXBlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnJlc3BvbnNlVHlwZT10LHRoaXN9LHNldE1pbWVUeXBlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm1pbWVUeXBlPXQsdGhpc319KSwkcHQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShLcHQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6JHB0LGxvYWQ6ZnVuY3Rpb24odCxlLG4sbyl7Y29uc3QgaT10aGlzLGE9bmV3IFFwdChpLm1hbmFnZXIpO2Euc2V0UGF0aChpLnBhdGgpLGEuc2V0UmVxdWVzdEhlYWRlcihpLnJlcXVlc3RIZWFkZXIpLGEuc2V0V2l0aENyZWRlbnRpYWxzKGkud2l0aENyZWRlbnRpYWxzKSxhLmxvYWQodCwoZnVuY3Rpb24obil7dHJ5e2UoaS5wYXJzZShKU09OLnBhcnNlKG4pKSl9Y2F0Y2goZSl7bz9vKGUpOmNvbnNvbGUuZXJyb3IoZSksaS5tYW5hZ2VyLml0ZW1FcnJvcih0KX19KSxuLG8pfSxwYXJzZTpmdW5jdGlvbih0KXtjb25zdCBlPVtdO2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKXtjb25zdCBvPUdwdC5wYXJzZSh0W25dKTtlLnB1c2gobyl9cmV0dXJuIGV9fSksdG10LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoS3B0LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOnRtdCxsb2FkOmZ1bmN0aW9uKHQsZSxuLG8pe2NvbnN0IGk9dGhpcyxhPVtdLHI9bmV3IEJkdCxzPW5ldyBRcHQodGhpcy5tYW5hZ2VyKTtzLnNldFBhdGgodGhpcy5wYXRoKSxzLnNldFJlc3BvbnNlVHlwZSgiYXJyYXlidWZmZXIiKSxzLnNldFJlcXVlc3RIZWFkZXIodGhpcy5yZXF1ZXN0SGVhZGVyKSxzLnNldFdpdGhDcmVkZW50aWFscyhpLndpdGhDcmVkZW50aWFscyk7bGV0IGw9MDtmdW5jdGlvbiBjKGMpe3MubG9hZCh0W2NdLChmdW5jdGlvbih0KXtjb25zdCBuPWkucGFyc2UodCwhMCk7YVtjXT17d2lkdGg6bi53aWR0aCxoZWlnaHQ6bi5oZWlnaHQsZm9ybWF0Om4uZm9ybWF0LG1pcG1hcHM6bi5taXBtYXBzfSxsKz0xLDY9PT1sJiYoMT09PW4ubWlwbWFwQ291bnQmJihyLm1pbkZpbHRlcj1iaXQpLHIuaW1hZ2U9YSxyLmZvcm1hdD1uLmZvcm1hdCxyLm5lZWRzVXBkYXRlPSEwLGUmJmUocikpfSksbixvKX1pZihBcnJheS5pc0FycmF5KHQpKWZvcihsZXQgZT0wLG49dC5sZW5ndGg7ZTxuOysrZSljKGUpO2Vsc2Ugcy5sb2FkKHQsKGZ1bmN0aW9uKHQpe2NvbnN0IG49aS5wYXJzZSh0LCEwKTtpZihuLmlzQ3ViZW1hcCl7Y29uc3QgdD1uLm1pcG1hcHMubGVuZ3RoL24ubWlwbWFwQ291bnQ7Zm9yKGxldCBlPTA7ZTx0O2UrKyl7YVtlXT17bWlwbWFwczpbXX07Zm9yKGxldCB0PTA7dDxuLm1pcG1hcENvdW50O3QrKylhW2VdLm1pcG1hcHMucHVzaChuLm1pcG1hcHNbZSpuLm1pcG1hcENvdW50K3RdKSxhW2VdLmZvcm1hdD1uLmZvcm1hdCxhW2VdLndpZHRoPW4ud2lkdGgsYVtlXS5oZWlnaHQ9bi5oZWlnaHR9ci5pbWFnZT1hfWVsc2Ugci5pbWFnZS53aWR0aD1uLndpZHRoLHIuaW1hZ2UuaGVpZ2h0PW4uaGVpZ2h0LHIubWlwbWFwcz1uLm1pcG1hcHM7MT09PW4ubWlwbWFwQ291bnQmJihyLm1pbkZpbHRlcj1iaXQpLHIuZm9ybWF0PW4uZm9ybWF0LHIubmVlZHNVcGRhdGU9ITAsZSYmZShyKX0pLG4sbyk7cmV0dXJuIHJ9fSksZW10LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoS3B0LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOmVtdCxsb2FkOmZ1bmN0aW9uKHQsZSxuLG8pe3ZvaWQgMCE9PXRoaXMucGF0aCYmKHQ9dGhpcy5wYXRoK3QpLHQ9dGhpcy5tYW5hZ2VyLnJlc29sdmVVUkwodCk7Y29uc3QgaT10aGlzLGE9cXB0LmdldCh0KTtpZih2b2lkIDAhPT1hKXJldHVybiBpLm1hbmFnZXIuaXRlbVN0YXJ0KHQpLHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ZSYmZShhKSxpLm1hbmFnZXIuaXRlbUVuZCh0KX0pLDApLGE7Y29uc3Qgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJpbWciKTtmdW5jdGlvbiBzKCl7ci5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixzLCExKSxyLnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIixsLCExKSxxcHQuYWRkKHQsdGhpcyksZSYmZSh0aGlzKSxpLm1hbmFnZXIuaXRlbUVuZCh0KX1mdW5jdGlvbiBsKGUpe3IucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIscywhMSksci5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsbCwhMSksbyYmbyhlKSxpLm1hbmFnZXIuaXRlbUVycm9yKHQpLGkubWFuYWdlci5pdGVtRW5kKHQpfXJldHVybiByLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLHMsITEpLHIuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGwsITEpLCJkYXRhOiIhPT10LnN1YnN0cigwLDUpJiZ2b2lkIDAhPT10aGlzLmNyb3NzT3JpZ2luJiYoci5jcm9zc09yaWdpbj10aGlzLmNyb3NzT3JpZ2luKSxpLm1hbmFnZXIuaXRlbVN0YXJ0KHQpLHIuc3JjPXQscn19KSxubXQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShLcHQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6bm10LGxvYWQ6ZnVuY3Rpb24odCxlLG4sbyl7Y29uc3QgaT1uZXcgeHN0LGE9bmV3IGVtdCh0aGlzLm1hbmFnZXIpO2Euc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbiksYS5zZXRQYXRoKHRoaXMucGF0aCk7bGV0IHI9MDtmdW5jdGlvbiBzKG4pe2EubG9hZCh0W25dLChmdW5jdGlvbih0KXtpLmltYWdlc1tuXT10LHIrKyw2PT09ciYmKGkubmVlZHNVcGRhdGU9ITAsZSYmZShpKSl9KSx2b2lkIDAsbyl9Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDsrK2UpcyhlKTtyZXR1cm4gaX19KSxvbXQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShLcHQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6b210LGxvYWQ6ZnVuY3Rpb24odCxlLG4sbyl7Y29uc3QgaT10aGlzLGE9bmV3IFBzdCxyPW5ldyBRcHQodGhpcy5tYW5hZ2VyKTtyZXR1cm4gci5zZXRSZXNwb25zZVR5cGUoImFycmF5YnVmZmVyIiksci5zZXRSZXF1ZXN0SGVhZGVyKHRoaXMucmVxdWVzdEhlYWRlciksci5zZXRQYXRoKHRoaXMucGF0aCksci5zZXRXaXRoQ3JlZGVudGlhbHMoaS53aXRoQ3JlZGVudGlhbHMpLHIubG9hZCh0LChmdW5jdGlvbih0KXtjb25zdCBuPWkucGFyc2UodCk7biYmKHZvaWQgMCE9PW4uaW1hZ2U/YS5pbWFnZT1uLmltYWdlOnZvaWQgMCE9PW4uZGF0YSYmKGEuaW1hZ2Uud2lkdGg9bi53aWR0aCxhLmltYWdlLmhlaWdodD1uLmhlaWdodCxhLmltYWdlLmRhdGE9bi5kYXRhKSxhLndyYXBTPXZvaWQgMCE9PW4ud3JhcFM/bi53cmFwUzpmaXQsYS53cmFwVD12b2lkIDAhPT1uLndyYXBUP24ud3JhcFQ6Zml0LGEubWFnRmlsdGVyPXZvaWQgMCE9PW4ubWFnRmlsdGVyP24ubWFnRmlsdGVyOmJpdCxhLm1pbkZpbHRlcj12b2lkIDAhPT1uLm1pbkZpbHRlcj9uLm1pbkZpbHRlcjpiaXQsYS5hbmlzb3Ryb3B5PXZvaWQgMCE9PW4uYW5pc290cm9weT9uLmFuaXNvdHJvcHk6MSx2b2lkIDAhPT1uLmVuY29kaW5nJiYoYS5lbmNvZGluZz1uLmVuY29kaW5nKSx2b2lkIDAhPT1uLmZsaXBZJiYoYS5mbGlwWT1uLmZsaXBZKSx2b2lkIDAhPT1uLmZvcm1hdCYmKGEuZm9ybWF0PW4uZm9ybWF0KSx2b2lkIDAhPT1uLnR5cGUmJihhLnR5cGU9bi50eXBlKSx2b2lkIDAhPT1uLm1pcG1hcHMmJihhLm1pcG1hcHM9bi5taXBtYXBzLGEubWluRmlsdGVyPXlpdCksMT09PW4ubWlwbWFwQ291bnQmJihhLm1pbkZpbHRlcj1iaXQpLGEubmVlZHNVcGRhdGU9ITAsZSYmZShhLG4pKX0pLG4sbyksYX19KSxpbXQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShLcHQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6aW10LGxvYWQ6ZnVuY3Rpb24odCxlLG4sbyl7Y29uc3QgaT1uZXcgWml0LGE9bmV3IGVtdCh0aGlzLm1hbmFnZXIpO3JldHVybiBhLnNldENyb3NzT3JpZ2luKHRoaXMuY3Jvc3NPcmlnaW4pLGEuc2V0UGF0aCh0aGlzLnBhdGgpLGEubG9hZCh0LChmdW5jdGlvbihuKXtpLmltYWdlPW47Y29uc3Qgbz10LnNlYXJjaCgvXC5qcGU/ZygkfFw/KS9pKT4wfHwwPT09dC5zZWFyY2goL15kYXRhXDppbWFnZVwvanBlZy8pO2kuZm9ybWF0PW8/T2l0OlBpdCxpLm5lZWRzVXBkYXRlPSEwLHZvaWQgMCE9PWUmJmUoaSl9KSxuLG8pLGl9fSksT2JqZWN0LmFzc2lnbihhbXQucHJvdG90eXBlLHtnZXRQb2ludDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkN1cnZlOiAuZ2V0UG9pbnQoKSBub3QgaW1wbGVtZW50ZWQuIiksbnVsbH0sZ2V0UG9pbnRBdDpmdW5jdGlvbih0LGUpe2NvbnN0IG49dGhpcy5nZXRVdG9UbWFwcGluZyh0KTtyZXR1cm4gdGhpcy5nZXRQb2ludChuLGUpfSxnZXRQb2ludHM6ZnVuY3Rpb24odD01KXtjb25zdCBlPVtdO2ZvcihsZXQgbj0wO248PXQ7bisrKWUucHVzaCh0aGlzLmdldFBvaW50KG4vdCkpO3JldHVybiBlfSxnZXRTcGFjZWRQb2ludHM6ZnVuY3Rpb24odD01KXtjb25zdCBlPVtdO2ZvcihsZXQgbj0wO248PXQ7bisrKWUucHVzaCh0aGlzLmdldFBvaW50QXQobi90KSk7cmV0dXJuIGV9LGdldExlbmd0aDpmdW5jdGlvbigpe2NvbnN0IHQ9dGhpcy5nZXRMZW5ndGhzKCk7cmV0dXJuIHRbdC5sZW5ndGgtMV19LGdldExlbmd0aHM6ZnVuY3Rpb24odCl7aWYodm9pZCAwPT09dCYmKHQ9dGhpcy5hcmNMZW5ndGhEaXZpc2lvbnMpLHRoaXMuY2FjaGVBcmNMZW5ndGhzJiZ0aGlzLmNhY2hlQXJjTGVuZ3Rocy5sZW5ndGg9PT10KzEmJiF0aGlzLm5lZWRzVXBkYXRlKXJldHVybiB0aGlzLmNhY2hlQXJjTGVuZ3Roczt0aGlzLm5lZWRzVXBkYXRlPSExO2NvbnN0IGU9W107bGV0IG4sbz10aGlzLmdldFBvaW50KDApLGk9MDtlLnB1c2goMCk7Zm9yKGxldCBhPTE7YTw9dDthKyspbj10aGlzLmdldFBvaW50KGEvdCksaSs9bi5kaXN0YW5jZVRvKG8pLGUucHVzaChpKSxvPW47cmV0dXJuIHRoaXMuY2FjaGVBcmNMZW5ndGhzPWUsZX0sdXBkYXRlQXJjTGVuZ3RoczpmdW5jdGlvbigpe3RoaXMubmVlZHNVcGRhdGU9ITAsdGhpcy5nZXRMZW5ndGhzKCl9LGdldFV0b1RtYXBwaW5nOmZ1bmN0aW9uKHQsZSl7Y29uc3Qgbj10aGlzLmdldExlbmd0aHMoKTtsZXQgbz0wO2NvbnN0IGk9bi5sZW5ndGg7bGV0IGE7YT1lfHx0Km5baS0xXTtsZXQgcixzPTAsbD1pLTE7Zm9yKDtzPD1sOylpZihvPU1hdGguZmxvb3IocysobC1zKS8yKSxyPW5bb10tYSxyPDApcz1vKzE7ZWxzZXtpZighKHI+MCkpe2w9bzticmVha31sPW8tMX1pZihvPWwsbltvXT09PWEpcmV0dXJuIG8vKGktMSk7Y29uc3QgYz1uW29dO3JldHVybihvKyhhLWMpLyhuW28rMV0tYykpLyhpLTEpfSxnZXRUYW5nZW50OmZ1bmN0aW9uKHQsZSl7Y29uc3Qgbj0xZS00O2xldCBvPXQtbixpPXQrbjtvPDAmJihvPTApLGk+MSYmKGk9MSk7Y29uc3QgYT10aGlzLmdldFBvaW50KG8pLHI9dGhpcy5nZXRQb2ludChpKSxzPWV8fChhLmlzVmVjdG9yMj9uZXcgVWl0Om5ldyAkaXQpO3JldHVybiBzLmNvcHkocikuc3ViKGEpLm5vcm1hbGl6ZSgpLHN9LGdldFRhbmdlbnRBdDpmdW5jdGlvbih0LGUpe2NvbnN0IG49dGhpcy5nZXRVdG9UbWFwcGluZyh0KTtyZXR1cm4gdGhpcy5nZXRUYW5nZW50KG4sZSl9LGNvbXB1dGVGcmVuZXRGcmFtZXM6ZnVuY3Rpb24odCxlKXtjb25zdCBuPW5ldyAkaXQsbz1bXSxpPVtdLGE9W10scj1uZXcgJGl0LHM9bmV3IGthdDtmb3IobGV0IGU9MDtlPD10O2UrKylvW2VdPXRoaXMuZ2V0VGFuZ2VudEF0KGUvdCxuZXcgJGl0KSxvW2VdLm5vcm1hbGl6ZSgpO2lbMF09bmV3ICRpdCxhWzBdPW5ldyAkaXQ7bGV0IGw9TnVtYmVyLk1BWF9WQUxVRTtjb25zdCBjPU1hdGguYWJzKG9bMF0ueCksZD1NYXRoLmFicyhvWzBdLnkpLHA9TWF0aC5hYnMob1swXS56KTtjPD1sJiYobD1jLG4uc2V0KDEsMCwwKSksZDw9bCYmKGw9ZCxuLnNldCgwLDEsMCkpLHA8PWwmJm4uc2V0KDAsMCwxKSxyLmNyb3NzVmVjdG9ycyhvWzBdLG4pLm5vcm1hbGl6ZSgpLGlbMF0uY3Jvc3NWZWN0b3JzKG9bMF0sciksYVswXS5jcm9zc1ZlY3RvcnMob1swXSxpWzBdKTtmb3IobGV0IGU9MTtlPD10O2UrKyl7aWYoaVtlXT1pW2UtMV0uY2xvbmUoKSxhW2VdPWFbZS0xXS5jbG9uZSgpLHIuY3Jvc3NWZWN0b3JzKG9bZS0xXSxvW2VdKSxyLmxlbmd0aCgpPk51bWJlci5FUFNJTE9OKXtyLm5vcm1hbGl6ZSgpO2NvbnN0IHQ9TWF0aC5hY29zKGppdC5jbGFtcChvW2UtMV0uZG90KG9bZV0pLC0xLDEpKTtpW2VdLmFwcGx5TWF0cml4NChzLm1ha2VSb3RhdGlvbkF4aXMocix0KSl9YVtlXS5jcm9zc1ZlY3RvcnMob1tlXSxpW2VdKX1pZighMD09PWUpe2xldCBlPU1hdGguYWNvcyhqaXQuY2xhbXAoaVswXS5kb3QoaVt0XSksLTEsMSkpO2UvPXQsb1swXS5kb3Qoci5jcm9zc1ZlY3RvcnMoaVswXSxpW3RdKSk+MCYmKGU9LWUpO2ZvcihsZXQgbj0xO248PXQ7bisrKWlbbl0uYXBwbHlNYXRyaXg0KHMubWFrZVJvdGF0aW9uQXhpcyhvW25dLGUqbikpLGFbbl0uY3Jvc3NWZWN0b3JzKG9bbl0saVtuXSl9cmV0dXJue3RhbmdlbnRzOm8sbm9ybWFsczppLGJpbm9ybWFsczphfX0sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9LGNvcHk6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zPXQuYXJjTGVuZ3RoRGl2aXNpb25zLHRoaXN9LHRvSlNPTjpmdW5jdGlvbigpe2NvbnN0IHQ9e21ldGFkYXRhOnt2ZXJzaW9uOjQuNSx0eXBlOiJDdXJ2ZSIsZ2VuZXJhdG9yOiJDdXJ2ZS50b0pTT04ifX07cmV0dXJuIHQuYXJjTGVuZ3RoRGl2aXNpb25zPXRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zLHQudHlwZT10aGlzLnR5cGUsdH0sZnJvbUpTT046ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zPXQuYXJjTGVuZ3RoRGl2aXNpb25zLHRoaXN9fSksKHJtdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShhbXQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9cm10LHJtdC5wcm90b3R5cGUuaXNFbGxpcHNlQ3VydmU9ITAscm10LnByb3RvdHlwZS5nZXRQb2ludD1mdW5jdGlvbih0LGUpe2NvbnN0IG49ZXx8bmV3IFVpdCxvPTIqTWF0aC5QSTtsZXQgaT10aGlzLmFFbmRBbmdsZS10aGlzLmFTdGFydEFuZ2xlO2NvbnN0IGE9TWF0aC5hYnMoaSk8TnVtYmVyLkVQU0lMT047Zm9yKDtpPDA7KWkrPW87Zm9yKDtpPm87KWktPW87aTxOdW1iZXIuRVBTSUxPTiYmKGk9YT8wOm8pLCEwIT09dGhpcy5hQ2xvY2t3aXNlfHxhfHwoaT09PW8/aT0tbzppLT1vKTtjb25zdCByPXRoaXMuYVN0YXJ0QW5nbGUrdCppO2xldCBzPXRoaXMuYVgrdGhpcy54UmFkaXVzKk1hdGguY29zKHIpLGw9dGhpcy5hWSt0aGlzLnlSYWRpdXMqTWF0aC5zaW4ocik7aWYoMCE9PXRoaXMuYVJvdGF0aW9uKXtjb25zdCB0PU1hdGguY29zKHRoaXMuYVJvdGF0aW9uKSxlPU1hdGguc2luKHRoaXMuYVJvdGF0aW9uKSxuPXMtdGhpcy5hWCxvPWwtdGhpcy5hWTtzPW4qdC1vKmUrdGhpcy5hWCxsPW4qZStvKnQrdGhpcy5hWX1yZXR1cm4gbi5zZXQocyxsKX0scm10LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHQpe3JldHVybiBhbXQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMuYVg9dC5hWCx0aGlzLmFZPXQuYVksdGhpcy54UmFkaXVzPXQueFJhZGl1cyx0aGlzLnlSYWRpdXM9dC55UmFkaXVzLHRoaXMuYVN0YXJ0QW5nbGU9dC5hU3RhcnRBbmdsZSx0aGlzLmFFbmRBbmdsZT10LmFFbmRBbmdsZSx0aGlzLmFDbG9ja3dpc2U9dC5hQ2xvY2t3aXNlLHRoaXMuYVJvdGF0aW9uPXQuYVJvdGF0aW9uLHRoaXN9LHJtdC5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7Y29uc3QgdD1hbXQucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMpO3JldHVybiB0LmFYPXRoaXMuYVgsdC5hWT10aGlzLmFZLHQueFJhZGl1cz10aGlzLnhSYWRpdXMsdC55UmFkaXVzPXRoaXMueVJhZGl1cyx0LmFTdGFydEFuZ2xlPXRoaXMuYVN0YXJ0QW5nbGUsdC5hRW5kQW5nbGU9dGhpcy5hRW5kQW5nbGUsdC5hQ2xvY2t3aXNlPXRoaXMuYUNsb2Nrd2lzZSx0LmFSb3RhdGlvbj10aGlzLmFSb3RhdGlvbix0fSxybXQucHJvdG90eXBlLmZyb21KU09OPWZ1bmN0aW9uKHQpe3JldHVybiBhbXQucHJvdG90eXBlLmZyb21KU09OLmNhbGwodGhpcyx0KSx0aGlzLmFYPXQuYVgsdGhpcy5hWT10LmFZLHRoaXMueFJhZGl1cz10LnhSYWRpdXMsdGhpcy55UmFkaXVzPXQueVJhZGl1cyx0aGlzLmFTdGFydEFuZ2xlPXQuYVN0YXJ0QW5nbGUsdGhpcy5hRW5kQW5nbGU9dC5hRW5kQW5nbGUsdGhpcy5hQ2xvY2t3aXNlPXQuYUNsb2Nrd2lzZSx0aGlzLmFSb3RhdGlvbj10LmFSb3RhdGlvbix0aGlzfSwoc210LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHJtdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1zbXQsc210LnByb3RvdHlwZS5pc0FyY0N1cnZlPSEwO2NvbnN0IGNtdD1uZXcgJGl0LGRtdD1uZXcgbG10LHBtdD1uZXcgbG10LG1tdD1uZXcgbG10O2Z1bmN0aW9uIHVtdCh0PVtdLGU9ITEsbj0iY2VudHJpcGV0YWwiLG89LjUpe2FtdC5jYWxsKHRoaXMpLHRoaXMudHlwZT0iQ2F0bXVsbFJvbUN1cnZlMyIsdGhpcy5wb2ludHM9dCx0aGlzLmNsb3NlZD1lLHRoaXMuY3VydmVUeXBlPW4sdGhpcy50ZW5zaW9uPW99ZnVuY3Rpb24gZm10KHQsZSxuLG8saSl7Y29uc3QgYT0uNSooby1lKSxyPS41KihpLW4pLHM9dCp0O3JldHVybigyKm4tMipvK2ErcikqKHQqcykrKC0zKm4rMypvLTIqYS1yKSpzK2EqdCtufWZ1bmN0aW9uIGdtdCh0LGUsbixvKXtyZXR1cm4oZnVuY3Rpb24gaSh0LGUpe2NvbnN0IG49MS10O3JldHVybiBuKm4qZX0pKHQsZSkrKGZ1bmN0aW9uIGEodCxlKXtyZXR1cm4gMiooMS10KSp0KmV9KSh0LG4pKyhmdW5jdGlvbiByKHQsZSl7cmV0dXJuIHQqdCplfSkodCxvKX1mdW5jdGlvbiBobXQodCxlLG4sbyxpKXtyZXR1cm4oZnVuY3Rpb24gYSh0LGUpe2NvbnN0IG49MS10O3JldHVybiBuKm4qbiplfSkodCxlKSsoZnVuY3Rpb24gcih0LGUpe2NvbnN0IG49MS10O3JldHVybiAzKm4qbip0KmV9KSh0LG4pKyhmdW5jdGlvbiBzKHQsZSl7cmV0dXJuIDMqKDEtdCkqdCp0KmV9KSh0LG8pKyhmdW5jdGlvbiBsKHQsZSl7cmV0dXJuIHQqdCp0KmV9KSh0LGkpfWZ1bmN0aW9uIGJtdCh0PW5ldyBVaXQsZT1uZXcgVWl0LG49bmV3IFVpdCxvPW5ldyBVaXQpe2FtdC5jYWxsKHRoaXMpLHRoaXMudHlwZT0iQ3ViaWNCZXppZXJDdXJ2ZSIsdGhpcy52MD10LHRoaXMudjE9ZSx0aGlzLnYyPW4sdGhpcy52Mz1vfWZ1bmN0aW9uIHltdCh0PW5ldyAkaXQsZT1uZXcgJGl0LG49bmV3ICRpdCxvPW5ldyAkaXQpe2FtdC5jYWxsKHRoaXMpLHRoaXMudHlwZT0iQ3ViaWNCZXppZXJDdXJ2ZTMiLHRoaXMudjA9dCx0aGlzLnYxPWUsdGhpcy52Mj1uLHRoaXMudjM9b31mdW5jdGlvbiBfbXQodD1uZXcgVWl0LGU9bmV3IFVpdCl7YW10LmNhbGwodGhpcyksdGhpcy50eXBlPSJMaW5lQ3VydmUiLHRoaXMudjE9dCx0aGlzLnYyPWV9ZnVuY3Rpb24gQ210KHQ9bmV3ICRpdCxlPW5ldyAkaXQpe2FtdC5jYWxsKHRoaXMpLHRoaXMudHlwZT0iTGluZUN1cnZlMyIsdGhpcy52MT10LHRoaXMudjI9ZX1mdW5jdGlvbiBNbXQodD1uZXcgVWl0LGU9bmV3IFVpdCxuPW5ldyBVaXQpe2FtdC5jYWxsKHRoaXMpLHRoaXMudHlwZT0iUXVhZHJhdGljQmV6aWVyQ3VydmUiLHRoaXMudjA9dCx0aGlzLnYxPWUsdGhpcy52Mj1ufWZ1bmN0aW9uIHZtdCh0PW5ldyAkaXQsZT1uZXcgJGl0LG49bmV3ICRpdCl7YW10LmNhbGwodGhpcyksdGhpcy50eXBlPSJRdWFkcmF0aWNCZXppZXJDdXJ2ZTMiLHRoaXMudjA9dCx0aGlzLnYxPWUsdGhpcy52Mj1ufWZ1bmN0aW9uIHhtdCh0PVtdKXthbXQuY2FsbCh0aGlzKSx0aGlzLnR5cGU9IlNwbGluZUN1cnZlIix0aGlzLnBvaW50cz10fSh1bXQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYW10LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPXVtdCx1bXQucHJvdG90eXBlLmlzQ2F0bXVsbFJvbUN1cnZlMz0hMCx1bXQucHJvdG90eXBlLmdldFBvaW50PWZ1bmN0aW9uKHQsZT1uZXcgJGl0KXtjb25zdCBuPWUsbz10aGlzLnBvaW50cyxpPW8ubGVuZ3RoLGE9KGktKHRoaXMuY2xvc2VkPzA6MSkpKnQ7bGV0IHIscyxsPU1hdGguZmxvb3IoYSksYz1hLWw7dGhpcy5jbG9zZWQ/bCs9bD4wPzA6KE1hdGguZmxvb3IoTWF0aC5hYnMobCkvaSkrMSkqaTowPT09YyYmbD09PWktMSYmKGw9aS0yLGM9MSksdGhpcy5jbG9zZWR8fGw+MD9yPW9bKGwtMSklaV06KGNtdC5zdWJWZWN0b3JzKG9bMF0sb1sxXSkuYWRkKG9bMF0pLHI9Y210KTtjb25zdCBkPW9bbCVpXSxwPW9bKGwrMSklaV07aWYodGhpcy5jbG9zZWR8fGwrMjxpP3M9b1sobCsyKSVpXTooY210LnN1YlZlY3RvcnMob1tpLTFdLG9baS0yXSkuYWRkKG9baS0xXSkscz1jbXQpLCJjZW50cmlwZXRhbCI9PT10aGlzLmN1cnZlVHlwZXx8ImNob3JkYWwiPT09dGhpcy5jdXJ2ZVR5cGUpe2NvbnN0IHQ9ImNob3JkYWwiPT09dGhpcy5jdXJ2ZVR5cGU/LjU6LjI1O2xldCBlPU1hdGgucG93KHIuZGlzdGFuY2VUb1NxdWFyZWQoZCksdCksbj1NYXRoLnBvdyhkLmRpc3RhbmNlVG9TcXVhcmVkKHApLHQpLG89TWF0aC5wb3cocC5kaXN0YW5jZVRvU3F1YXJlZChzKSx0KTtuPDFlLTQmJihuPTEpLGU8MWUtNCYmKGU9biksbzwxZS00JiYobz1uKSxkbXQuaW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tKHIueCxkLngscC54LHMueCxlLG4sbykscG10LmluaXROb251bmlmb3JtQ2F0bXVsbFJvbShyLnksZC55LHAueSxzLnksZSxuLG8pLG1tdC5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20oci56LGQueixwLnoscy56LGUsbixvKX1lbHNlImNhdG11bGxyb20iPT09dGhpcy5jdXJ2ZVR5cGUmJihkbXQuaW5pdENhdG11bGxSb20oci54LGQueCxwLngscy54LHRoaXMudGVuc2lvbikscG10LmluaXRDYXRtdWxsUm9tKHIueSxkLnkscC55LHMueSx0aGlzLnRlbnNpb24pLG1tdC5pbml0Q2F0bXVsbFJvbShyLnosZC56LHAueixzLnosdGhpcy50ZW5zaW9uKSk7cmV0dXJuIG4uc2V0KGRtdC5jYWxjKGMpLHBtdC5jYWxjKGMpLG1tdC5jYWxjKGMpKSxufSx1bXQucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24odCl7YW10LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLnBvaW50cz1bXTtmb3IobGV0IGU9MCxuPXQucG9pbnRzLmxlbmd0aDtlPG47ZSsrKXRoaXMucG9pbnRzLnB1c2godC5wb2ludHNbZV0uY2xvbmUoKSk7cmV0dXJuIHRoaXMuY2xvc2VkPXQuY2xvc2VkLHRoaXMuY3VydmVUeXBlPXQuY3VydmVUeXBlLHRoaXMudGVuc2lvbj10LnRlbnNpb24sdGhpc30sdW10LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtjb25zdCB0PWFtdC5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyk7dC5wb2ludHM9W107Zm9yKGxldCBlPTAsbj10aGlzLnBvaW50cy5sZW5ndGg7ZTxuO2UrKyl0LnBvaW50cy5wdXNoKHRoaXMucG9pbnRzW2VdLnRvQXJyYXkoKSk7cmV0dXJuIHQuY2xvc2VkPXRoaXMuY2xvc2VkLHQuY3VydmVUeXBlPXRoaXMuY3VydmVUeXBlLHQudGVuc2lvbj10aGlzLnRlbnNpb24sdH0sdW10LnByb3RvdHlwZS5mcm9tSlNPTj1mdW5jdGlvbih0KXthbXQucHJvdG90eXBlLmZyb21KU09OLmNhbGwodGhpcyx0KSx0aGlzLnBvaW50cz1bXTtmb3IobGV0IGU9MCxuPXQucG9pbnRzLmxlbmd0aDtlPG47ZSsrKXtjb25zdCBuPXQucG9pbnRzW2VdO3RoaXMucG9pbnRzLnB1c2goKG5ldyAkaXQpLmZyb21BcnJheShuKSl9cmV0dXJuIHRoaXMuY2xvc2VkPXQuY2xvc2VkLHRoaXMuY3VydmVUeXBlPXQuY3VydmVUeXBlLHRoaXMudGVuc2lvbj10LnRlbnNpb24sdGhpc30sKGJtdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShhbXQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9Ym10LGJtdC5wcm90b3R5cGUuaXNDdWJpY0JlemllckN1cnZlPSEwLGJtdC5wcm90b3R5cGUuZ2V0UG9pbnQ9ZnVuY3Rpb24odCxlPW5ldyBVaXQpe2NvbnN0IG49ZSxvPXRoaXMudjAsaT10aGlzLnYxLGE9dGhpcy52MixyPXRoaXMudjM7cmV0dXJuIG4uc2V0KGhtdCh0LG8ueCxpLngsYS54LHIueCksaG10KHQsby55LGkueSxhLnksci55KSksbn0sYm10LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHQpe3JldHVybiBhbXQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMudjAuY29weSh0LnYwKSx0aGlzLnYxLmNvcHkodC52MSksdGhpcy52Mi5jb3B5KHQudjIpLHRoaXMudjMuY29weSh0LnYzKSx0aGlzfSxibXQucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe2NvbnN0IHQ9YW10LnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzKTtyZXR1cm4gdC52MD10aGlzLnYwLnRvQXJyYXkoKSx0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdC52Mz10aGlzLnYzLnRvQXJyYXkoKSx0fSxibXQucHJvdG90eXBlLmZyb21KU09OPWZ1bmN0aW9uKHQpe3JldHVybiBhbXQucHJvdG90eXBlLmZyb21KU09OLmNhbGwodGhpcyx0KSx0aGlzLnYwLmZyb21BcnJheSh0LnYwKSx0aGlzLnYxLmZyb21BcnJheSh0LnYxKSx0aGlzLnYyLmZyb21BcnJheSh0LnYyKSx0aGlzLnYzLmZyb21BcnJheSh0LnYzKSx0aGlzfSwoeW10LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGFtdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj15bXQseW10LnByb3RvdHlwZS5pc0N1YmljQmV6aWVyQ3VydmUzPSEwLHltdC5wcm90b3R5cGUuZ2V0UG9pbnQ9ZnVuY3Rpb24odCxlPW5ldyAkaXQpe2NvbnN0IG49ZSxvPXRoaXMudjAsaT10aGlzLnYxLGE9dGhpcy52MixyPXRoaXMudjM7cmV0dXJuIG4uc2V0KGhtdCh0LG8ueCxpLngsYS54LHIueCksaG10KHQsby55LGkueSxhLnksci55KSxobXQodCxvLnosaS56LGEueixyLnopKSxufSx5bXQucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24odCl7cmV0dXJuIGFtdC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy52MC5jb3B5KHQudjApLHRoaXMudjEuY29weSh0LnYxKSx0aGlzLnYyLmNvcHkodC52MiksdGhpcy52My5jb3B5KHQudjMpLHRoaXN9LHltdC5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7Y29uc3QgdD1hbXQucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMpO3JldHVybiB0LnYwPXRoaXMudjAudG9BcnJheSgpLHQudjE9dGhpcy52MS50b0FycmF5KCksdC52Mj10aGlzLnYyLnRvQXJyYXkoKSx0LnYzPXRoaXMudjMudG9BcnJheSgpLHR9LHltdC5wcm90b3R5cGUuZnJvbUpTT049ZnVuY3Rpb24odCl7cmV0dXJuIGFtdC5wcm90b3R5cGUuZnJvbUpTT04uY2FsbCh0aGlzLHQpLHRoaXMudjAuZnJvbUFycmF5KHQudjApLHRoaXMudjEuZnJvbUFycmF5KHQudjEpLHRoaXMudjIuZnJvbUFycmF5KHQudjIpLHRoaXMudjMuZnJvbUFycmF5KHQudjMpLHRoaXN9LChfbXQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYW10LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPV9tdCxfbXQucHJvdG90eXBlLmlzTGluZUN1cnZlPSEwLF9tdC5wcm90b3R5cGUuZ2V0UG9pbnQ9ZnVuY3Rpb24odCxlPW5ldyBVaXQpe2NvbnN0IG49ZTtyZXR1cm4gMT09PXQ/bi5jb3B5KHRoaXMudjIpOihuLmNvcHkodGhpcy52Mikuc3ViKHRoaXMudjEpLG4ubXVsdGlwbHlTY2FsYXIodCkuYWRkKHRoaXMudjEpKSxufSxfbXQucHJvdG90eXBlLmdldFBvaW50QXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5nZXRQb2ludCh0LGUpfSxfbXQucHJvdG90eXBlLmdldFRhbmdlbnQ9ZnVuY3Rpb24odCxlKXtjb25zdCBuPWV8fG5ldyBVaXQ7cmV0dXJuIG4uY29weSh0aGlzLnYyKS5zdWIodGhpcy52MSkubm9ybWFsaXplKCksbn0sX210LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHQpe3JldHVybiBhbXQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMudjEuY29weSh0LnYxKSx0aGlzLnYyLmNvcHkodC52MiksdGhpc30sX210LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtjb25zdCB0PWFtdC5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyk7cmV0dXJuIHQudjE9dGhpcy52MS50b0FycmF5KCksdC52Mj10aGlzLnYyLnRvQXJyYXkoKSx0fSxfbXQucHJvdG90eXBlLmZyb21KU09OPWZ1bmN0aW9uKHQpe3JldHVybiBhbXQucHJvdG90eXBlLmZyb21KU09OLmNhbGwodGhpcyx0KSx0aGlzLnYxLmZyb21BcnJheSh0LnYxKSx0aGlzLnYyLmZyb21BcnJheSh0LnYyKSx0aGlzfSwoQ210LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGFtdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1DbXQsQ210LnByb3RvdHlwZS5pc0xpbmVDdXJ2ZTM9ITAsQ210LnByb3RvdHlwZS5nZXRQb2ludD1mdW5jdGlvbih0LGU9bmV3ICRpdCl7Y29uc3Qgbj1lO3JldHVybiAxPT09dD9uLmNvcHkodGhpcy52Mik6KG4uY29weSh0aGlzLnYyKS5zdWIodGhpcy52MSksbi5tdWx0aXBseVNjYWxhcih0KS5hZGQodGhpcy52MSkpLG59LENtdC5wcm90b3R5cGUuZ2V0UG9pbnRBdD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmdldFBvaW50KHQsZSl9LENtdC5wcm90b3R5cGUuY29weT1mdW5jdGlvbih0KXtyZXR1cm4gYW10LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLnYxLmNvcHkodC52MSksdGhpcy52Mi5jb3B5KHQudjIpLHRoaXN9LENtdC5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7Y29uc3QgdD1hbXQucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMpO3JldHVybiB0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdH0sQ210LnByb3RvdHlwZS5mcm9tSlNPTj1mdW5jdGlvbih0KXtyZXR1cm4gYW10LnByb3RvdHlwZS5mcm9tSlNPTi5jYWxsKHRoaXMsdCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpc30sKE1tdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShhbXQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9TW10LE1tdC5wcm90b3R5cGUuaXNRdWFkcmF0aWNCZXppZXJDdXJ2ZT0hMCxNbXQucHJvdG90eXBlLmdldFBvaW50PWZ1bmN0aW9uKHQsZT1uZXcgVWl0KXtjb25zdCBuPWUsbz10aGlzLnYwLGk9dGhpcy52MSxhPXRoaXMudjI7cmV0dXJuIG4uc2V0KGdtdCh0LG8ueCxpLngsYS54KSxnbXQodCxvLnksaS55LGEueSkpLG59LE1tdC5wcm90b3R5cGUuY29weT1mdW5jdGlvbih0KXtyZXR1cm4gYW10LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLnYwLmNvcHkodC52MCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzfSxNbXQucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe2NvbnN0IHQ9YW10LnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzKTtyZXR1cm4gdC52MD10aGlzLnYwLnRvQXJyYXkoKSx0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdH0sTW10LnByb3RvdHlwZS5mcm9tSlNPTj1mdW5jdGlvbih0KXtyZXR1cm4gYW10LnByb3RvdHlwZS5mcm9tSlNPTi5jYWxsKHRoaXMsdCksdGhpcy52MC5mcm9tQXJyYXkodC52MCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpc30sKHZtdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShhbXQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9dm10LHZtdC5wcm90b3R5cGUuaXNRdWFkcmF0aWNCZXppZXJDdXJ2ZTM9ITAsdm10LnByb3RvdHlwZS5nZXRQb2ludD1mdW5jdGlvbih0LGU9bmV3ICRpdCl7Y29uc3Qgbj1lLG89dGhpcy52MCxpPXRoaXMudjEsYT10aGlzLnYyO3JldHVybiBuLnNldChnbXQodCxvLngsaS54LGEueCksZ210KHQsby55LGkueSxhLnkpLGdtdCh0LG8ueixpLnosYS56KSksbn0sdm10LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHQpe3JldHVybiBhbXQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMudjAuY29weSh0LnYwKSx0aGlzLnYxLmNvcHkodC52MSksdGhpcy52Mi5jb3B5KHQudjIpLHRoaXN9LHZtdC5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7Y29uc3QgdD1hbXQucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMpO3JldHVybiB0LnYwPXRoaXMudjAudG9BcnJheSgpLHQudjE9dGhpcy52MS50b0FycmF5KCksdC52Mj10aGlzLnYyLnRvQXJyYXkoKSx0fSx2bXQucHJvdG90eXBlLmZyb21KU09OPWZ1bmN0aW9uKHQpe3JldHVybiBhbXQucHJvdG90eXBlLmZyb21KU09OLmNhbGwodGhpcyx0KSx0aGlzLnYwLmZyb21BcnJheSh0LnYwKSx0aGlzLnYxLmZyb21BcnJheSh0LnYxKSx0aGlzLnYyLmZyb21BcnJheSh0LnYyKSx0aGlzfSwoeG10LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGFtdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj14bXQseG10LnByb3RvdHlwZS5pc1NwbGluZUN1cnZlPSEwLHhtdC5wcm90b3R5cGUuZ2V0UG9pbnQ9ZnVuY3Rpb24odCxlPW5ldyBVaXQpe2NvbnN0IG49ZSxvPXRoaXMucG9pbnRzLGk9KG8ubGVuZ3RoLTEpKnQsYT1NYXRoLmZsb29yKGkpLHI9aS1hLHM9b1swPT09YT9hOmEtMV0sbD1vW2FdLGM9b1thPm8ubGVuZ3RoLTI/by5sZW5ndGgtMTphKzFdLGQ9b1thPm8ubGVuZ3RoLTM/by5sZW5ndGgtMTphKzJdO3JldHVybiBuLnNldChmbXQocixzLngsbC54LGMueCxkLngpLGZtdChyLHMueSxsLnksYy55LGQueSkpLG59LHhtdC5wcm90b3R5cGUuY29weT1mdW5jdGlvbih0KXthbXQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMucG9pbnRzPVtdO2ZvcihsZXQgZT0wLG49dC5wb2ludHMubGVuZ3RoO2U8bjtlKyspdGhpcy5wb2ludHMucHVzaCh0LnBvaW50c1tlXS5jbG9uZSgpKTtyZXR1cm4gdGhpc30seG10LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtjb25zdCB0PWFtdC5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyk7dC5wb2ludHM9W107Zm9yKGxldCBlPTAsbj10aGlzLnBvaW50cy5sZW5ndGg7ZTxuO2UrKyl0LnBvaW50cy5wdXNoKHRoaXMucG9pbnRzW2VdLnRvQXJyYXkoKSk7cmV0dXJuIHR9LHhtdC5wcm90b3R5cGUuZnJvbUpTT049ZnVuY3Rpb24odCl7YW10LnByb3RvdHlwZS5mcm9tSlNPTi5jYWxsKHRoaXMsdCksdGhpcy5wb2ludHM9W107Zm9yKGxldCBlPTAsbj10LnBvaW50cy5sZW5ndGg7ZTxuO2UrKyl7Y29uc3Qgbj10LnBvaW50c1tlXTt0aGlzLnBvaW50cy5wdXNoKChuZXcgVWl0KS5mcm9tQXJyYXkobikpfXJldHVybiB0aGlzfTt2YXIgT210PU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLEFyY0N1cnZlOnNtdCxDYXRtdWxsUm9tQ3VydmUzOnVtdCxDdWJpY0JlemllckN1cnZlOmJtdCxDdWJpY0JlemllckN1cnZlMzp5bXQsRWxsaXBzZUN1cnZlOnJtdCxMaW5lQ3VydmU6X210LExpbmVDdXJ2ZTM6Q210LFF1YWRyYXRpY0JlemllckN1cnZlOk1tdCxRdWFkcmF0aWNCZXppZXJDdXJ2ZTM6dm10LFNwbGluZUN1cnZlOnhtdH0pO2Z1bmN0aW9uIFBtdCgpe2FtdC5jYWxsKHRoaXMpLHRoaXMudHlwZT0iQ3VydmVQYXRoIix0aGlzLmN1cnZlcz1bXSx0aGlzLmF1dG9DbG9zZT0hMX1mdW5jdGlvbiB3bXQodCl7UG10LmNhbGwodGhpcyksdGhpcy50eXBlPSJQYXRoIix0aGlzLmN1cnJlbnRQb2ludD1uZXcgVWl0LHQmJnRoaXMuc2V0RnJvbVBvaW50cyh0KX1mdW5jdGlvbiBrbXQodCl7d210LmNhbGwodGhpcyx0KSx0aGlzLnV1aWQ9aml0LmdlbmVyYXRlVVVJRCgpLHRoaXMudHlwZT0iU2hhcGUiLHRoaXMuaG9sZXM9W119ZnVuY3Rpb24gU210KHQsZT0xKXtRYXQuY2FsbCh0aGlzKSx0aGlzLnR5cGU9IkxpZ2h0Iix0aGlzLmNvbG9yPW5ldyBDcnQodCksdGhpcy5pbnRlbnNpdHk9ZX1mdW5jdGlvbiBEbXQodCxlLG4pe1NtdC5jYWxsKHRoaXMsdCxuKSx0aGlzLnR5cGU9IkhlbWlzcGhlcmVMaWdodCIsdGhpcy5wb3NpdGlvbi5jb3B5KFFhdC5EZWZhdWx0VXApLHRoaXMudXBkYXRlTWF0cml4KCksdGhpcy5ncm91bmRDb2xvcj1uZXcgQ3J0KGUpfWZ1bmN0aW9uIEVtdCh0KXt0aGlzLmNhbWVyYT10LHRoaXMuYmlhcz0wLHRoaXMubm9ybWFsQmlhcz0wLHRoaXMucmFkaXVzPTEsdGhpcy5tYXBTaXplPW5ldyBVaXQoNTEyLDUxMiksdGhpcy5tYXA9bnVsbCx0aGlzLm1hcFBhc3M9bnVsbCx0aGlzLm1hdHJpeD1uZXcga2F0LHRoaXMuYXV0b1VwZGF0ZT0hMCx0aGlzLm5lZWRzVXBkYXRlPSExLHRoaXMuX2ZydXN0dW09bmV3IFNzdCx0aGlzLl9mcmFtZUV4dGVudHM9bmV3IFVpdCgxLDEpLHRoaXMuX3ZpZXdwb3J0Q291bnQ9MSx0aGlzLl92aWV3cG9ydHM9W25ldyBLaXQoMCwwLDEsMSldfWZ1bmN0aW9uIEFtdCgpe0VtdC5jYWxsKHRoaXMsbmV3IENzdCg1MCwxLC41LDUwMCkpLHRoaXMuZm9jdXM9MX1mdW5jdGlvbiBSbXQodCxlLG4sbyxpLGEpe1NtdC5jYWxsKHRoaXMsdCxlKSx0aGlzLnR5cGU9IlNwb3RMaWdodCIsdGhpcy5wb3NpdGlvbi5jb3B5KFFhdC5EZWZhdWx0VXApLHRoaXMudXBkYXRlTWF0cml4KCksdGhpcy50YXJnZXQ9bmV3IFFhdCxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywicG93ZXIiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnRlbnNpdHkqTWF0aC5QSX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuaW50ZW5zaXR5PXQvTWF0aC5QSX19KSx0aGlzLmRpc3RhbmNlPXZvaWQgMCE9PW4/bjowLHRoaXMuYW5nbGU9dm9pZCAwIT09bz9vOk1hdGguUEkvMyx0aGlzLnBlbnVtYnJhPXZvaWQgMCE9PWk/aTowLHRoaXMuZGVjYXk9dm9pZCAwIT09YT9hOjEsdGhpcy5zaGFkb3c9bmV3IEFtdH1mdW5jdGlvbiBUbXQoKXtFbXQuY2FsbCh0aGlzLG5ldyBDc3QoOTAsMSwuNSw1MDApKSx0aGlzLl9mcmFtZUV4dGVudHM9bmV3IFVpdCg0LDIpLHRoaXMuX3ZpZXdwb3J0Q291bnQ9Nix0aGlzLl92aWV3cG9ydHM9W25ldyBLaXQoMiwxLDEsMSksbmV3IEtpdCgwLDEsMSwxKSxuZXcgS2l0KDMsMSwxLDEpLG5ldyBLaXQoMSwxLDEsMSksbmV3IEtpdCgzLDAsMSwxKSxuZXcgS2l0KDEsMCwxLDEpXSx0aGlzLl9jdWJlRGlyZWN0aW9ucz1bbmV3ICRpdCgxLDAsMCksbmV3ICRpdCgtMSwwLDApLG5ldyAkaXQoMCwwLDEpLG5ldyAkaXQoMCwwLC0xKSxuZXcgJGl0KDAsMSwwKSxuZXcgJGl0KDAsLTEsMCldLHRoaXMuX2N1YmVVcHM9W25ldyAkaXQoMCwxLDApLG5ldyAkaXQoMCwxLDApLG5ldyAkaXQoMCwxLDApLG5ldyAkaXQoMCwxLDApLG5ldyAkaXQoMCwwLDEpLG5ldyAkaXQoMCwwLC0xKV19ZnVuY3Rpb24gTm10KHQsZSxuLG8pe1NtdC5jYWxsKHRoaXMsdCxlKSx0aGlzLnR5cGU9IlBvaW50TGlnaHQiLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJwb3dlciIse2dldDpmdW5jdGlvbigpe3JldHVybiA0KnRoaXMuaW50ZW5zaXR5Kk1hdGguUEl9LHNldDpmdW5jdGlvbih0KXt0aGlzLmludGVuc2l0eT10Lyg0Kk1hdGguUEkpfX0pLHRoaXMuZGlzdGFuY2U9dm9pZCAwIT09bj9uOjAsdGhpcy5kZWNheT12b2lkIDAhPT1vP286MSx0aGlzLnNoYWRvdz1uZXcgVG10fWZ1bmN0aW9uIEltdCh0PS0xLGU9MSxuPTEsbz0tMSxpPS4xLGE9MmUzKXtfc3QuY2FsbCh0aGlzKSx0aGlzLnR5cGU9Ik9ydGhvZ3JhcGhpY0NhbWVyYSIsdGhpcy56b29tPTEsdGhpcy52aWV3PW51bGwsdGhpcy5sZWZ0PXQsdGhpcy5yaWdodD1lLHRoaXMudG9wPW4sdGhpcy5ib3R0b209byx0aGlzLm5lYXI9aSx0aGlzLmZhcj1hLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfWZ1bmN0aW9uIHptdCgpe0VtdC5jYWxsKHRoaXMsbmV3IEltdCgtNSw1LDUsLTUsLjUsNTAwKSl9ZnVuY3Rpb24gSG10KHQsZSl7U210LmNhbGwodGhpcyx0LGUpLHRoaXMudHlwZT0iRGlyZWN0aW9uYWxMaWdodCIsdGhpcy5wb3NpdGlvbi5jb3B5KFFhdC5EZWZhdWx0VXApLHRoaXMudXBkYXRlTWF0cml4KCksdGhpcy50YXJnZXQ9bmV3IFFhdCx0aGlzLnNoYWRvdz1uZXcgem10fWZ1bmN0aW9uIEZtdCh0LGUpe1NtdC5jYWxsKHRoaXMsdCxlKSx0aGlzLnR5cGU9IkFtYmllbnRMaWdodCJ9ZnVuY3Rpb24gTG10KHQsZSxuLG8pe1NtdC5jYWxsKHRoaXMsdCxlKSx0aGlzLnR5cGU9IlJlY3RBcmVhTGlnaHQiLHRoaXMud2lkdGg9dm9pZCAwIT09bj9uOjEwLHRoaXMuaGVpZ2h0PXZvaWQgMCE9PW8/bzoxMH1QbXQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShhbXQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6UG10LGFkZDpmdW5jdGlvbih0KXt0aGlzLmN1cnZlcy5wdXNoKHQpfSxjbG9zZVBhdGg6ZnVuY3Rpb24oKXtjb25zdCB0PXRoaXMuY3VydmVzWzBdLmdldFBvaW50KDApLGU9dGhpcy5jdXJ2ZXNbdGhpcy5jdXJ2ZXMubGVuZ3RoLTFdLmdldFBvaW50KDEpO3QuZXF1YWxzKGUpfHx0aGlzLmN1cnZlcy5wdXNoKG5ldyBfbXQoZSx0KSl9LGdldFBvaW50OmZ1bmN0aW9uKHQpe2NvbnN0IGU9dCp0aGlzLmdldExlbmd0aCgpLG49dGhpcy5nZXRDdXJ2ZUxlbmd0aHMoKTtsZXQgbz0wO2Zvcig7bzxuLmxlbmd0aDspe2lmKG5bb10+PWUpe2NvbnN0IHQ9bltvXS1lLGk9dGhpcy5jdXJ2ZXNbb10sYT1pLmdldExlbmd0aCgpO3JldHVybiBpLmdldFBvaW50QXQoMD09PWE/MDoxLXQvYSl9bysrfXJldHVybiBudWxsfSxnZXRMZW5ndGg6ZnVuY3Rpb24oKXtjb25zdCB0PXRoaXMuZ2V0Q3VydmVMZW5ndGhzKCk7cmV0dXJuIHRbdC5sZW5ndGgtMV19LHVwZGF0ZUFyY0xlbmd0aHM6ZnVuY3Rpb24oKXt0aGlzLm5lZWRzVXBkYXRlPSEwLHRoaXMuY2FjaGVMZW5ndGhzPW51bGwsdGhpcy5nZXRDdXJ2ZUxlbmd0aHMoKX0sZ2V0Q3VydmVMZW5ndGhzOmZ1bmN0aW9uKCl7aWYodGhpcy5jYWNoZUxlbmd0aHMmJnRoaXMuY2FjaGVMZW5ndGhzLmxlbmd0aD09PXRoaXMuY3VydmVzLmxlbmd0aClyZXR1cm4gdGhpcy5jYWNoZUxlbmd0aHM7Y29uc3QgdD1bXTtsZXQgZT0wO2ZvcihsZXQgbj0wLG89dGhpcy5jdXJ2ZXMubGVuZ3RoO248bztuKyspZSs9dGhpcy5jdXJ2ZXNbbl0uZ2V0TGVuZ3RoKCksdC5wdXNoKGUpO3JldHVybiB0aGlzLmNhY2hlTGVuZ3Rocz10LHR9LGdldFNwYWNlZFBvaW50czpmdW5jdGlvbih0PTQwKXtjb25zdCBlPVtdO2ZvcihsZXQgbj0wO248PXQ7bisrKWUucHVzaCh0aGlzLmdldFBvaW50KG4vdCkpO3JldHVybiB0aGlzLmF1dG9DbG9zZSYmZS5wdXNoKGVbMF0pLGV9LGdldFBvaW50czpmdW5jdGlvbih0PTEyKXtjb25zdCBlPVtdO2xldCBuO2ZvcihsZXQgbz0wLGk9dGhpcy5jdXJ2ZXM7bzxpLmxlbmd0aDtvKyspe2NvbnN0IGE9aVtvXSxyPWEuZ2V0UG9pbnRzKGEmJmEuaXNFbGxpcHNlQ3VydmU/Mip0OmEmJihhLmlzTGluZUN1cnZlfHxhLmlzTGluZUN1cnZlMyk/MTphJiZhLmlzU3BsaW5lQ3VydmU/dCphLnBvaW50cy5sZW5ndGg6dCk7Zm9yKGxldCB0PTA7dDxyLmxlbmd0aDt0Kyspe2NvbnN0IG89clt0XTtuJiZuLmVxdWFscyhvKXx8KGUucHVzaChvKSxuPW8pfX1yZXR1cm4gdGhpcy5hdXRvQ2xvc2UmJmUubGVuZ3RoPjEmJiFlW2UubGVuZ3RoLTFdLmVxdWFscyhlWzBdKSYmZS5wdXNoKGVbMF0pLGV9LGNvcHk6ZnVuY3Rpb24odCl7YW10LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLmN1cnZlcz1bXTtmb3IobGV0IGU9MCxuPXQuY3VydmVzLmxlbmd0aDtlPG47ZSsrKXRoaXMuY3VydmVzLnB1c2godC5jdXJ2ZXNbZV0uY2xvbmUoKSk7cmV0dXJuIHRoaXMuYXV0b0Nsb3NlPXQuYXV0b0Nsb3NlLHRoaXN9LHRvSlNPTjpmdW5jdGlvbigpe2NvbnN0IHQ9YW10LnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzKTt0LmF1dG9DbG9zZT10aGlzLmF1dG9DbG9zZSx0LmN1cnZlcz1bXTtmb3IobGV0IGU9MCxuPXRoaXMuY3VydmVzLmxlbmd0aDtlPG47ZSsrKXQuY3VydmVzLnB1c2godGhpcy5jdXJ2ZXNbZV0udG9KU09OKCkpO3JldHVybiB0fSxmcm9tSlNPTjpmdW5jdGlvbih0KXthbXQucHJvdG90eXBlLmZyb21KU09OLmNhbGwodGhpcyx0KSx0aGlzLmF1dG9DbG9zZT10LmF1dG9DbG9zZSx0aGlzLmN1cnZlcz1bXTtmb3IobGV0IGU9MCxuPXQuY3VydmVzLmxlbmd0aDtlPG47ZSsrKXtjb25zdCBuPXQuY3VydmVzW2VdO3RoaXMuY3VydmVzLnB1c2goKG5ldyBPbXRbbi50eXBlXSkuZnJvbUpTT04obikpfXJldHVybiB0aGlzfX0pLHdtdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKFBtdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3Rvcjp3bXQsc2V0RnJvbVBvaW50czpmdW5jdGlvbih0KXt0aGlzLm1vdmVUbyh0WzBdLngsdFswXS55KTtmb3IobGV0IGU9MSxuPXQubGVuZ3RoO2U8bjtlKyspdGhpcy5saW5lVG8odFtlXS54LHRbZV0ueSk7cmV0dXJuIHRoaXN9LG1vdmVUbzpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmN1cnJlbnRQb2ludC5zZXQodCxlKSx0aGlzfSxsaW5lVG86ZnVuY3Rpb24odCxlKXtjb25zdCBuPW5ldyBfbXQodGhpcy5jdXJyZW50UG9pbnQuY2xvbmUoKSxuZXcgVWl0KHQsZSkpO3JldHVybiB0aGlzLmN1cnZlcy5wdXNoKG4pLHRoaXMuY3VycmVudFBvaW50LnNldCh0LGUpLHRoaXN9LHF1YWRyYXRpY0N1cnZlVG86ZnVuY3Rpb24odCxlLG4sbyl7Y29uc3QgaT1uZXcgTW10KHRoaXMuY3VycmVudFBvaW50LmNsb25lKCksbmV3IFVpdCh0LGUpLG5ldyBVaXQobixvKSk7cmV0dXJuIHRoaXMuY3VydmVzLnB1c2goaSksdGhpcy5jdXJyZW50UG9pbnQuc2V0KG4sbyksdGhpc30sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbih0LGUsbixvLGksYSl7Y29uc3Qgcj1uZXcgYm10KHRoaXMuY3VycmVudFBvaW50LmNsb25lKCksbmV3IFVpdCh0LGUpLG5ldyBVaXQobixvKSxuZXcgVWl0KGksYSkpO3JldHVybiB0aGlzLmN1cnZlcy5wdXNoKHIpLHRoaXMuY3VycmVudFBvaW50LnNldChpLGEpLHRoaXN9LHNwbGluZVRocnU6ZnVuY3Rpb24odCl7Y29uc3QgZT1uZXcgeG10KFt0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpXS5jb25jYXQodCkpO3JldHVybiB0aGlzLmN1cnZlcy5wdXNoKGUpLHRoaXMuY3VycmVudFBvaW50LmNvcHkodFt0Lmxlbmd0aC0xXSksdGhpc30sYXJjOmZ1bmN0aW9uKHQsZSxuLG8saSxhKXtyZXR1cm4gdGhpcy5hYnNhcmModCt0aGlzLmN1cnJlbnRQb2ludC54LGUrdGhpcy5jdXJyZW50UG9pbnQueSxuLG8saSxhKSx0aGlzfSxhYnNhcmM6ZnVuY3Rpb24odCxlLG4sbyxpLGEpe3JldHVybiB0aGlzLmFic2VsbGlwc2UodCxlLG4sbixvLGksYSksdGhpc30sZWxsaXBzZTpmdW5jdGlvbih0LGUsbixvLGksYSxyLHMpe3JldHVybiB0aGlzLmFic2VsbGlwc2UodCt0aGlzLmN1cnJlbnRQb2ludC54LGUrdGhpcy5jdXJyZW50UG9pbnQueSxuLG8saSxhLHIscyksdGhpc30sYWJzZWxsaXBzZTpmdW5jdGlvbih0LGUsbixvLGksYSxyLHMpe2NvbnN0IGw9bmV3IHJtdCh0LGUsbixvLGksYSxyLHMpO2lmKHRoaXMuY3VydmVzLmxlbmd0aD4wKXtjb25zdCB0PWwuZ2V0UG9pbnQoMCk7dC5lcXVhbHModGhpcy5jdXJyZW50UG9pbnQpfHx0aGlzLmxpbmVUbyh0LngsdC55KX10aGlzLmN1cnZlcy5wdXNoKGwpO2NvbnN0IGM9bC5nZXRQb2ludCgxKTtyZXR1cm4gdGhpcy5jdXJyZW50UG9pbnQuY29weShjKSx0aGlzfSxjb3B5OmZ1bmN0aW9uKHQpe3JldHVybiBQbXQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMuY3VycmVudFBvaW50LmNvcHkodC5jdXJyZW50UG9pbnQpLHRoaXN9LHRvSlNPTjpmdW5jdGlvbigpe2NvbnN0IHQ9UG10LnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzKTtyZXR1cm4gdC5jdXJyZW50UG9pbnQ9dGhpcy5jdXJyZW50UG9pbnQudG9BcnJheSgpLHR9LGZyb21KU09OOmZ1bmN0aW9uKHQpe3JldHVybiBQbXQucHJvdG90eXBlLmZyb21KU09OLmNhbGwodGhpcyx0KSx0aGlzLmN1cnJlbnRQb2ludC5mcm9tQXJyYXkodC5jdXJyZW50UG9pbnQpLHRoaXN9fSksa210LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUod210LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOmttdCxnZXRQb2ludHNIb2xlczpmdW5jdGlvbih0KXtjb25zdCBlPVtdO2ZvcihsZXQgbj0wLG89dGhpcy5ob2xlcy5sZW5ndGg7bjxvO24rKyllW25dPXRoaXMuaG9sZXNbbl0uZ2V0UG9pbnRzKHQpO3JldHVybiBlfSxleHRyYWN0UG9pbnRzOmZ1bmN0aW9uKHQpe3JldHVybntzaGFwZTp0aGlzLmdldFBvaW50cyh0KSxob2xlczp0aGlzLmdldFBvaW50c0hvbGVzKHQpfX0sY29weTpmdW5jdGlvbih0KXt3bXQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMuaG9sZXM9W107Zm9yKGxldCBlPTAsbj10LmhvbGVzLmxlbmd0aDtlPG47ZSsrKXRoaXMuaG9sZXMucHVzaCh0LmhvbGVzW2VdLmNsb25lKCkpO3JldHVybiB0aGlzfSx0b0pTT046ZnVuY3Rpb24oKXtjb25zdCB0PXdtdC5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyk7dC51dWlkPXRoaXMudXVpZCx0LmhvbGVzPVtdO2ZvcihsZXQgZT0wLG49dGhpcy5ob2xlcy5sZW5ndGg7ZTxuO2UrKyl0LmhvbGVzLnB1c2godGhpcy5ob2xlc1tlXS50b0pTT04oKSk7cmV0dXJuIHR9LGZyb21KU09OOmZ1bmN0aW9uKHQpe3dtdC5wcm90b3R5cGUuZnJvbUpTT04uY2FsbCh0aGlzLHQpLHRoaXMudXVpZD10LnV1aWQsdGhpcy5ob2xlcz1bXTtmb3IobGV0IGU9MCxuPXQuaG9sZXMubGVuZ3RoO2U8bjtlKyspe2NvbnN0IG49dC5ob2xlc1tlXTt0aGlzLmhvbGVzLnB1c2goKG5ldyB3bXQpLmZyb21KU09OKG4pKX1yZXR1cm4gdGhpc319KSxTbXQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShRYXQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6U210LGlzTGlnaHQ6ITAsY29weTpmdW5jdGlvbih0KXtyZXR1cm4gUWF0LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5pbnRlbnNpdHk9dC5pbnRlbnNpdHksdGhpc30sdG9KU09OOmZ1bmN0aW9uKHQpe2NvbnN0IGU9UWF0LnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzLHQpO3JldHVybiBlLm9iamVjdC5jb2xvcj10aGlzLmNvbG9yLmdldEhleCgpLGUub2JqZWN0LmludGVuc2l0eT10aGlzLmludGVuc2l0eSx2b2lkIDAhPT10aGlzLmdyb3VuZENvbG9yJiYoZS5vYmplY3QuZ3JvdW5kQ29sb3I9dGhpcy5ncm91bmRDb2xvci5nZXRIZXgoKSksdm9pZCAwIT09dGhpcy5kaXN0YW5jZSYmKGUub2JqZWN0LmRpc3RhbmNlPXRoaXMuZGlzdGFuY2UpLHZvaWQgMCE9PXRoaXMuYW5nbGUmJihlLm9iamVjdC5hbmdsZT10aGlzLmFuZ2xlKSx2b2lkIDAhPT10aGlzLmRlY2F5JiYoZS5vYmplY3QuZGVjYXk9dGhpcy5kZWNheSksdm9pZCAwIT09dGhpcy5wZW51bWJyYSYmKGUub2JqZWN0LnBlbnVtYnJhPXRoaXMucGVudW1icmEpLHZvaWQgMCE9PXRoaXMuc2hhZG93JiYoZS5vYmplY3Quc2hhZG93PXRoaXMuc2hhZG93LnRvSlNPTigpKSxlfX0pLERtdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKFNtdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpEbXQsaXNIZW1pc3BoZXJlTGlnaHQ6ITAsY29weTpmdW5jdGlvbih0KXtyZXR1cm4gU210LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLmdyb3VuZENvbG9yLmNvcHkodC5ncm91bmRDb2xvciksdGhpc319KSxPYmplY3QuYXNzaWduKEVtdC5wcm90b3R5cGUse19wcm9qU2NyZWVuTWF0cml4Om5ldyBrYXQsX2xpZ2h0UG9zaXRpb25Xb3JsZDpuZXcgJGl0LF9sb29rVGFyZ2V0Om5ldyAkaXQsZ2V0Vmlld3BvcnRDb3VudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl92aWV3cG9ydENvdW50fSxnZXRGcnVzdHVtOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZydXN0dW19LHVwZGF0ZU1hdHJpY2VzOmZ1bmN0aW9uKHQpe2NvbnN0IGU9dGhpcy5jYW1lcmEsbj10aGlzLm1hdHJpeCxvPXRoaXMuX3Byb2pTY3JlZW5NYXRyaXgsaT10aGlzLl9sb29rVGFyZ2V0LGE9dGhpcy5fbGlnaHRQb3NpdGlvbldvcmxkO2Euc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHQubWF0cml4V29ybGQpLGUucG9zaXRpb24uY29weShhKSxpLnNldEZyb21NYXRyaXhQb3NpdGlvbih0LnRhcmdldC5tYXRyaXhXb3JsZCksZS5sb29rQXQoaSksZS51cGRhdGVNYXRyaXhXb3JsZCgpLG8ubXVsdGlwbHlNYXRyaWNlcyhlLnByb2plY3Rpb25NYXRyaXgsZS5tYXRyaXhXb3JsZEludmVyc2UpLHRoaXMuX2ZydXN0dW0uc2V0RnJvbVByb2plY3Rpb25NYXRyaXgobyksbi5zZXQoLjUsMCwwLC41LDAsLjUsMCwuNSwwLDAsLjUsLjUsMCwwLDAsMSksbi5tdWx0aXBseShlLnByb2plY3Rpb25NYXRyaXgpLG4ubXVsdGlwbHkoZS5tYXRyaXhXb3JsZEludmVyc2UpfSxnZXRWaWV3cG9ydDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmlld3BvcnRzW3RdfSxnZXRGcmFtZUV4dGVudHM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZnJhbWVFeHRlbnRzfSxjb3B5OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNhbWVyYT10LmNhbWVyYS5jbG9uZSgpLHRoaXMuYmlhcz10LmJpYXMsdGhpcy5yYWRpdXM9dC5yYWRpdXMsdGhpcy5tYXBTaXplLmNvcHkodC5tYXBTaXplKSx0aGlzfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX0sdG9KU09OOmZ1bmN0aW9uKCl7Y29uc3QgdD17fTtyZXR1cm4gMCE9PXRoaXMuYmlhcyYmKHQuYmlhcz10aGlzLmJpYXMpLDAhPT10aGlzLm5vcm1hbEJpYXMmJih0Lm5vcm1hbEJpYXM9dGhpcy5ub3JtYWxCaWFzKSwxIT09dGhpcy5yYWRpdXMmJih0LnJhZGl1cz10aGlzLnJhZGl1cyksNTEyPT09dGhpcy5tYXBTaXplLngmJjUxMj09PXRoaXMubWFwU2l6ZS55fHwodC5tYXBTaXplPXRoaXMubWFwU2l6ZS50b0FycmF5KCkpLHQuY2FtZXJhPXRoaXMuY2FtZXJhLnRvSlNPTighMSkub2JqZWN0LGRlbGV0ZSB0LmNhbWVyYS5tYXRyaXgsdH19KSxBbXQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShFbXQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6QW10LGlzU3BvdExpZ2h0U2hhZG93OiEwLHVwZGF0ZU1hdHJpY2VzOmZ1bmN0aW9uKHQpe2NvbnN0IGU9dGhpcy5jYW1lcmEsbj0yKmppdC5SQUQyREVHKnQuYW5nbGUqdGhpcy5mb2N1cyxvPXRoaXMubWFwU2l6ZS53aWR0aC90aGlzLm1hcFNpemUuaGVpZ2h0LGk9dC5kaXN0YW5jZXx8ZS5mYXI7bj09PWUuZm92JiZvPT09ZS5hc3BlY3QmJmk9PT1lLmZhcnx8KGUuZm92PW4sZS5hc3BlY3Q9byxlLmZhcj1pLGUudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpKSxFbXQucHJvdG90eXBlLnVwZGF0ZU1hdHJpY2VzLmNhbGwodGhpcyx0KX19KSxSbXQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShTbXQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6Um10LGlzU3BvdExpZ2h0OiEwLGNvcHk6ZnVuY3Rpb24odCl7cmV0dXJuIFNtdC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy5kaXN0YW5jZT10LmRpc3RhbmNlLHRoaXMuYW5nbGU9dC5hbmdsZSx0aGlzLnBlbnVtYnJhPXQucGVudW1icmEsdGhpcy5kZWNheT10LmRlY2F5LHRoaXMudGFyZ2V0PXQudGFyZ2V0LmNsb25lKCksdGhpcy5zaGFkb3c9dC5zaGFkb3cuY2xvbmUoKSx0aGlzfX0pLFRtdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKEVtdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpUbXQsaXNQb2ludExpZ2h0U2hhZG93OiEwLHVwZGF0ZU1hdHJpY2VzOmZ1bmN0aW9uKHQsZT0wKXtjb25zdCBuPXRoaXMuY2FtZXJhLG89dGhpcy5tYXRyaXgsaT10aGlzLl9saWdodFBvc2l0aW9uV29ybGQsYT10aGlzLl9sb29rVGFyZ2V0LHI9dGhpcy5fcHJvalNjcmVlbk1hdHJpeDtpLnNldEZyb21NYXRyaXhQb3NpdGlvbih0Lm1hdHJpeFdvcmxkKSxuLnBvc2l0aW9uLmNvcHkoaSksYS5jb3B5KG4ucG9zaXRpb24pLGEuYWRkKHRoaXMuX2N1YmVEaXJlY3Rpb25zW2VdKSxuLnVwLmNvcHkodGhpcy5fY3ViZVVwc1tlXSksbi5sb29rQXQoYSksbi51cGRhdGVNYXRyaXhXb3JsZCgpLG8ubWFrZVRyYW5zbGF0aW9uKC1pLngsLWkueSwtaS56KSxyLm11bHRpcGx5TWF0cmljZXMobi5wcm9qZWN0aW9uTWF0cml4LG4ubWF0cml4V29ybGRJbnZlcnNlKSx0aGlzLl9mcnVzdHVtLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KHIpfX0pLE5tdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKFNtdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpObXQsaXNQb2ludExpZ2h0OiEwLGNvcHk6ZnVuY3Rpb24odCl7cmV0dXJuIFNtdC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy5kaXN0YW5jZT10LmRpc3RhbmNlLHRoaXMuZGVjYXk9dC5kZWNheSx0aGlzLnNoYWRvdz10LnNoYWRvdy5jbG9uZSgpLHRoaXN9fSksSW10LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoX3N0LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOkltdCxpc09ydGhvZ3JhcGhpY0NhbWVyYTohMCxjb3B5OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIF9zdC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCxlKSx0aGlzLmxlZnQ9dC5sZWZ0LHRoaXMucmlnaHQ9dC5yaWdodCx0aGlzLnRvcD10LnRvcCx0aGlzLmJvdHRvbT10LmJvdHRvbSx0aGlzLm5lYXI9dC5uZWFyLHRoaXMuZmFyPXQuZmFyLHRoaXMuem9vbT10Lnpvb20sdGhpcy52aWV3PW51bGw9PT10LnZpZXc/bnVsbDpPYmplY3QuYXNzaWduKHt9LHQudmlldyksdGhpc30sc2V0Vmlld09mZnNldDpmdW5jdGlvbih0LGUsbixvLGksYSl7bnVsbD09PXRoaXMudmlldyYmKHRoaXMudmlldz17ZW5hYmxlZDohMCxmdWxsV2lkdGg6MSxmdWxsSGVpZ2h0OjEsb2Zmc2V0WDowLG9mZnNldFk6MCx3aWR0aDoxLGhlaWdodDoxfSksdGhpcy52aWV3LmVuYWJsZWQ9ITAsdGhpcy52aWV3LmZ1bGxXaWR0aD10LHRoaXMudmlldy5mdWxsSGVpZ2h0PWUsdGhpcy52aWV3Lm9mZnNldFg9bix0aGlzLnZpZXcub2Zmc2V0WT1vLHRoaXMudmlldy53aWR0aD1pLHRoaXMudmlldy5oZWlnaHQ9YSx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX0sY2xlYXJWaWV3T2Zmc2V0OmZ1bmN0aW9uKCl7bnVsbCE9PXRoaXMudmlldyYmKHRoaXMudmlldy5lbmFibGVkPSExKSx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX0sdXBkYXRlUHJvamVjdGlvbk1hdHJpeDpmdW5jdGlvbigpe2NvbnN0IHQ9KHRoaXMucmlnaHQtdGhpcy5sZWZ0KS8oMip0aGlzLnpvb20pLGU9KHRoaXMudG9wLXRoaXMuYm90dG9tKS8oMip0aGlzLnpvb20pLG49KHRoaXMucmlnaHQrdGhpcy5sZWZ0KS8yLG89KHRoaXMudG9wK3RoaXMuYm90dG9tKS8yO2xldCBpPW4tdCxhPW4rdCxyPW8rZSxzPW8tZTtpZihudWxsIT09dGhpcy52aWV3JiZ0aGlzLnZpZXcuZW5hYmxlZCl7Y29uc3QgdD0odGhpcy5yaWdodC10aGlzLmxlZnQpL3RoaXMudmlldy5mdWxsV2lkdGgvdGhpcy56b29tLGU9KHRoaXMudG9wLXRoaXMuYm90dG9tKS90aGlzLnZpZXcuZnVsbEhlaWdodC90aGlzLnpvb207aSs9dCp0aGlzLnZpZXcub2Zmc2V0WCxhPWkrdCp0aGlzLnZpZXcud2lkdGgsci09ZSp0aGlzLnZpZXcub2Zmc2V0WSxzPXItZSp0aGlzLnZpZXcuaGVpZ2h0fXRoaXMucHJvamVjdGlvbk1hdHJpeC5tYWtlT3J0aG9ncmFwaGljKGksYSxyLHMsdGhpcy5uZWFyLHRoaXMuZmFyKSx0aGlzLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlLmNvcHkodGhpcy5wcm9qZWN0aW9uTWF0cml4KS5pbnZlcnQoKX0sdG9KU09OOmZ1bmN0aW9uKHQpe2NvbnN0IGU9UWF0LnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzLHQpO3JldHVybiBlLm9iamVjdC56b29tPXRoaXMuem9vbSxlLm9iamVjdC5sZWZ0PXRoaXMubGVmdCxlLm9iamVjdC5yaWdodD10aGlzLnJpZ2h0LGUub2JqZWN0LnRvcD10aGlzLnRvcCxlLm9iamVjdC5ib3R0b209dGhpcy5ib3R0b20sZS5vYmplY3QubmVhcj10aGlzLm5lYXIsZS5vYmplY3QuZmFyPXRoaXMuZmFyLG51bGwhPT10aGlzLnZpZXcmJihlLm9iamVjdC52aWV3PU9iamVjdC5hc3NpZ24oe30sdGhpcy52aWV3KSksZX19KSx6bXQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShFbXQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6em10LGlzRGlyZWN0aW9uYWxMaWdodFNoYWRvdzohMCx1cGRhdGVNYXRyaWNlczpmdW5jdGlvbih0KXtFbXQucHJvdG90eXBlLnVwZGF0ZU1hdHJpY2VzLmNhbGwodGhpcyx0KX19KSxIbXQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShTbXQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6SG10LGlzRGlyZWN0aW9uYWxMaWdodDohMCxjb3B5OmZ1bmN0aW9uKHQpe3JldHVybiBTbXQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMudGFyZ2V0PXQudGFyZ2V0LmNsb25lKCksdGhpcy5zaGFkb3c9dC5zaGFkb3cuY2xvbmUoKSx0aGlzfX0pLEZtdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKFNtdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpGbXQsaXNBbWJpZW50TGlnaHQ6ITB9KSxMbXQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShTbXQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6TG10LGlzUmVjdEFyZWFMaWdodDohMCxjb3B5OmZ1bmN0aW9uKHQpe3JldHVybiBTbXQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMud2lkdGg9dC53aWR0aCx0aGlzLmhlaWdodD10LmhlaWdodCx0aGlzfSx0b0pTT046ZnVuY3Rpb24odCl7Y29uc3QgZT1TbXQucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMsdCk7cmV0dXJuIGUub2JqZWN0LndpZHRoPXRoaXMud2lkdGgsZS5vYmplY3QuaGVpZ2h0PXRoaXMuaGVpZ2h0LGV9fSk7Y2xhc3MgQm10e2NvbnN0cnVjdG9yKCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlzU3BoZXJpY2FsSGFybW9uaWNzMyIse3ZhbHVlOiEwfSksdGhpcy5jb2VmZmljaWVudHM9W107Zm9yKGxldCB0PTA7dDw5O3QrKyl0aGlzLmNvZWZmaWNpZW50cy5wdXNoKG5ldyAkaXQpfXNldCh0KXtmb3IobGV0IGU9MDtlPDk7ZSsrKXRoaXMuY29lZmZpY2llbnRzW2VdLmNvcHkodFtlXSk7cmV0dXJuIHRoaXN9emVybygpe2ZvcihsZXQgdD0wO3Q8OTt0KyspdGhpcy5jb2VmZmljaWVudHNbdF0uc2V0KDAsMCwwKTtyZXR1cm4gdGhpc31nZXRBdCh0LGUpe2NvbnN0IG49dC54LG89dC55LGk9dC56LGE9dGhpcy5jb2VmZmljaWVudHM7cmV0dXJuIGUuY29weShhWzBdKS5tdWx0aXBseVNjYWxhciguMjgyMDk1KSxlLmFkZFNjYWxlZFZlY3RvcihhWzFdLC40ODg2MDMqbyksZS5hZGRTY2FsZWRWZWN0b3IoYVsyXSwuNDg4NjAzKmkpLGUuYWRkU2NhbGVkVmVjdG9yKGFbM10sLjQ4ODYwMypuKSxlLmFkZFNjYWxlZFZlY3RvcihhWzRdLG4qbyoxLjA5MjU0OCksZS5hZGRTY2FsZWRWZWN0b3IoYVs1XSxvKmkqMS4wOTI1NDgpLGUuYWRkU2NhbGVkVmVjdG9yKGFbNl0sLjMxNTM5MiooMyppKmktMSkpLGUuYWRkU2NhbGVkVmVjdG9yKGFbN10sbippKjEuMDkyNTQ4KSxlLmFkZFNjYWxlZFZlY3RvcihhWzhdLC41NDYyNzQqKG4qbi1vKm8pKSxlfWdldElycmFkaWFuY2VBdCh0LGUpe2NvbnN0IG49dC54LG89dC55LGk9dC56LGE9dGhpcy5jb2VmZmljaWVudHM7cmV0dXJuIGUuY29weShhWzBdKS5tdWx0aXBseVNjYWxhciguODg2MjI3KSxlLmFkZFNjYWxlZFZlY3RvcihhWzFdLDEuMDIzMzI4Km8pLGUuYWRkU2NhbGVkVmVjdG9yKGFbMl0sMS4wMjMzMjgqaSksZS5hZGRTY2FsZWRWZWN0b3IoYVszXSwxLjAyMzMyOCpuKSxlLmFkZFNjYWxlZFZlY3RvcihhWzRdLC44NTgwODYqbipvKSxlLmFkZFNjYWxlZFZlY3RvcihhWzVdLC44NTgwODYqbyppKSxlLmFkZFNjYWxlZFZlY3RvcihhWzZdLC43NDMxMjUqaSppLS4yNDc3MDgpLGUuYWRkU2NhbGVkVmVjdG9yKGFbN10sLjg1ODA4NipuKmkpLGUuYWRkU2NhbGVkVmVjdG9yKGFbOF0sLjQyOTA0MyoobipuLW8qbykpLGV9YWRkKHQpe2ZvcihsZXQgZT0wO2U8OTtlKyspdGhpcy5jb2VmZmljaWVudHNbZV0uYWRkKHQuY29lZmZpY2llbnRzW2VdKTtyZXR1cm4gdGhpc31hZGRTY2FsZWRTSCh0LGUpe2ZvcihsZXQgbj0wO248OTtuKyspdGhpcy5jb2VmZmljaWVudHNbbl0uYWRkU2NhbGVkVmVjdG9yKHQuY29lZmZpY2llbnRzW25dLGUpO3JldHVybiB0aGlzfXNjYWxlKHQpe2ZvcihsZXQgZT0wO2U8OTtlKyspdGhpcy5jb2VmZmljaWVudHNbZV0ubXVsdGlwbHlTY2FsYXIodCk7cmV0dXJuIHRoaXN9bGVycCh0LGUpe2ZvcihsZXQgbj0wO248OTtuKyspdGhpcy5jb2VmZmljaWVudHNbbl0ubGVycCh0LmNvZWZmaWNpZW50c1tuXSxlKTtyZXR1cm4gdGhpc31lcXVhbHModCl7Zm9yKGxldCBlPTA7ZTw5O2UrKylpZighdGhpcy5jb2VmZmljaWVudHNbZV0uZXF1YWxzKHQuY29lZmZpY2llbnRzW2VdKSlyZXR1cm4hMTtyZXR1cm4hMH1jb3B5KHQpe3JldHVybiB0aGlzLnNldCh0LmNvZWZmaWNpZW50cyl9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9ZnJvbUFycmF5KHQsZT0wKXtjb25zdCBuPXRoaXMuY29lZmZpY2llbnRzO2ZvcihsZXQgbz0wO288OTtvKyspbltvXS5mcm9tQXJyYXkodCxlKzMqbyk7cmV0dXJuIHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7Y29uc3Qgbj10aGlzLmNvZWZmaWNpZW50cztmb3IobGV0IG89MDtvPDk7bysrKW5bb10udG9BcnJheSh0LGUrMypvKTtyZXR1cm4gdH1zdGF0aWMgZ2V0QmFzaXNBdCh0LGUpe2NvbnN0IG49dC54LG89dC55LGk9dC56O2VbMF09LjI4MjA5NSxlWzFdPS40ODg2MDMqbyxlWzJdPS40ODg2MDMqaSxlWzNdPS40ODg2MDMqbixlWzRdPTEuMDkyNTQ4Km4qbyxlWzVdPTEuMDkyNTQ4Km8qaSxlWzZdPS4zMTUzOTIqKDMqaSppLTEpLGVbN109MS4wOTI1NDgqbippLGVbOF09LjU0NjI3NCoobipuLW8qbyl9fWZ1bmN0aW9uIFZtdCh0LGUpe1NtdC5jYWxsKHRoaXMsdm9pZCAwLGUpLHRoaXMudHlwZT0iTGlnaHRQcm9iZSIsdGhpcy5zaD12b2lkIDAhPT10P3Q6bmV3IEJtdH1mdW5jdGlvbiBqbXQodCl7S3B0LmNhbGwodGhpcyx0KSx0aGlzLnRleHR1cmVzPXt9fWZ1bmN0aW9uIFVtdCgpe1pydC5jYWxsKHRoaXMpLHRoaXMudHlwZT0iSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkiLHRoaXMuaW5zdGFuY2VDb3VudD0xLzB9ZnVuY3Rpb24gV210KHQsZSxuLG8peyJudW1iZXIiPT10eXBlb2YgbiYmKG89bixuPSExLGNvbnNvbGUuZXJyb3IoIlRIUkVFLkluc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZTogVGhlIGNvbnN0cnVjdG9yIG5vdyBleHBlY3RzIG5vcm1hbGl6ZWQgYXMgdGhlIHRoaXJkIGFyZ3VtZW50LiIpKSxrcnQuY2FsbCh0aGlzLHQsZSxuKSx0aGlzLm1lc2hQZXJBdHRyaWJ1dGU9b3x8MX1mdW5jdGlvbiBHbXQodCl7S3B0LmNhbGwodGhpcyx0KX1mdW5jdGlvbiBZbXQodCl7InVuZGVmaW5lZCI9PXR5cGVvZiBjcmVhdGVJbWFnZUJpdG1hcCYmY29uc29sZS53YXJuKCJUSFJFRS5JbWFnZUJpdG1hcExvYWRlcjogY3JlYXRlSW1hZ2VCaXRtYXAoKSBub3Qgc3VwcG9ydGVkLiIpLCJ1bmRlZmluZWQiPT10eXBlb2YgZmV0Y2gmJmNvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VCaXRtYXBMb2FkZXI6IGZldGNoKCkgbm90IHN1cHBvcnRlZC4iKSxLcHQuY2FsbCh0aGlzLHQpLHRoaXMub3B0aW9ucz17cHJlbXVsdGlwbHlBbHBoYToibm9uZSJ9fWZ1bmN0aW9uIHFtdCgpe3RoaXMudHlwZT0iU2hhcGVQYXRoIix0aGlzLmNvbG9yPW5ldyBDcnQsdGhpcy5zdWJQYXRocz1bXSx0aGlzLmN1cnJlbnRQYXRoPW51bGx9Vm10LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoU210LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOlZtdCxpc0xpZ2h0UHJvYmU6ITAsY29weTpmdW5jdGlvbih0KXtyZXR1cm4gU210LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLnNoLmNvcHkodC5zaCksdGhpc30sZnJvbUpTT046ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5PXQuaW50ZW5zaXR5LHRoaXMuc2guZnJvbUFycmF5KHQuc2gpLHRoaXN9LHRvSlNPTjpmdW5jdGlvbih0KXtjb25zdCBlPVNtdC5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyx0KTtyZXR1cm4gZS5vYmplY3Quc2g9dGhpcy5zaC50b0FycmF5KCksZX19KSxqbXQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShLcHQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6am10LGxvYWQ6ZnVuY3Rpb24odCxlLG4sbyl7Y29uc3QgaT10aGlzLGE9bmV3IFFwdChpLm1hbmFnZXIpO2Euc2V0UGF0aChpLnBhdGgpLGEuc2V0UmVxdWVzdEhlYWRlcihpLnJlcXVlc3RIZWFkZXIpLGEuc2V0V2l0aENyZWRlbnRpYWxzKGkud2l0aENyZWRlbnRpYWxzKSxhLmxvYWQodCwoZnVuY3Rpb24obil7dHJ5e2UoaS5wYXJzZShKU09OLnBhcnNlKG4pKSl9Y2F0Y2goZSl7bz9vKGUpOmNvbnNvbGUuZXJyb3IoZSksaS5tYW5hZ2VyLml0ZW1FcnJvcih0KX19KSxuLG8pfSxwYXJzZTpmdW5jdGlvbih0KXtjb25zdCBlPXRoaXMudGV4dHVyZXM7ZnVuY3Rpb24gbih0KXtyZXR1cm4gdm9pZCAwPT09ZVt0XSYmY29uc29sZS53YXJuKCJUSFJFRS5NYXRlcmlhbExvYWRlcjogVW5kZWZpbmVkIHRleHR1cmUiLHQpLGVbdF19Y29uc3Qgbz1uZXcgQXB0W3QudHlwZV07aWYodm9pZCAwIT09dC51dWlkJiYoby51dWlkPXQudXVpZCksdm9pZCAwIT09dC5uYW1lJiYoby5uYW1lPXQubmFtZSksdm9pZCAwIT09dC5jb2xvciYmdm9pZCAwIT09by5jb2xvciYmby5jb2xvci5zZXRIZXgodC5jb2xvciksdm9pZCAwIT09dC5yb3VnaG5lc3MmJihvLnJvdWdobmVzcz10LnJvdWdobmVzcyksdm9pZCAwIT09dC5tZXRhbG5lc3MmJihvLm1ldGFsbmVzcz10Lm1ldGFsbmVzcyksdm9pZCAwIT09dC5zaGVlbiYmKG8uc2hlZW49KG5ldyBDcnQpLnNldEhleCh0LnNoZWVuKSksdm9pZCAwIT09dC5lbWlzc2l2ZSYmdm9pZCAwIT09by5lbWlzc2l2ZSYmby5lbWlzc2l2ZS5zZXRIZXgodC5lbWlzc2l2ZSksdm9pZCAwIT09dC5zcGVjdWxhciYmdm9pZCAwIT09by5zcGVjdWxhciYmby5zcGVjdWxhci5zZXRIZXgodC5zcGVjdWxhciksdm9pZCAwIT09dC5zaGluaW5lc3MmJihvLnNoaW5pbmVzcz10LnNoaW5pbmVzcyksdm9pZCAwIT09dC5jbGVhcmNvYXQmJihvLmNsZWFyY29hdD10LmNsZWFyY29hdCksdm9pZCAwIT09dC5jbGVhcmNvYXRSb3VnaG5lc3MmJihvLmNsZWFyY29hdFJvdWdobmVzcz10LmNsZWFyY29hdFJvdWdobmVzcyksdm9pZCAwIT09dC5mb2cmJihvLmZvZz10LmZvZyksdm9pZCAwIT09dC5mbGF0U2hhZGluZyYmKG8uZmxhdFNoYWRpbmc9dC5mbGF0U2hhZGluZyksdm9pZCAwIT09dC5ibGVuZGluZyYmKG8uYmxlbmRpbmc9dC5ibGVuZGluZyksdm9pZCAwIT09dC5jb21iaW5lJiYoby5jb21iaW5lPXQuY29tYmluZSksdm9pZCAwIT09dC5zaWRlJiYoby5zaWRlPXQuc2lkZSksdm9pZCAwIT09dC5vcGFjaXR5JiYoby5vcGFjaXR5PXQub3BhY2l0eSksdm9pZCAwIT09dC50cmFuc3BhcmVudCYmKG8udHJhbnNwYXJlbnQ9dC50cmFuc3BhcmVudCksdm9pZCAwIT09dC5hbHBoYVRlc3QmJihvLmFscGhhVGVzdD10LmFscGhhVGVzdCksdm9pZCAwIT09dC5kZXB0aFRlc3QmJihvLmRlcHRoVGVzdD10LmRlcHRoVGVzdCksdm9pZCAwIT09dC5kZXB0aFdyaXRlJiYoby5kZXB0aFdyaXRlPXQuZGVwdGhXcml0ZSksdm9pZCAwIT09dC5jb2xvcldyaXRlJiYoby5jb2xvcldyaXRlPXQuY29sb3JXcml0ZSksdm9pZCAwIT09dC5zdGVuY2lsV3JpdGUmJihvLnN0ZW5jaWxXcml0ZT10LnN0ZW5jaWxXcml0ZSksdm9pZCAwIT09dC5zdGVuY2lsV3JpdGVNYXNrJiYoby5zdGVuY2lsV3JpdGVNYXNrPXQuc3RlbmNpbFdyaXRlTWFzayksdm9pZCAwIT09dC5zdGVuY2lsRnVuYyYmKG8uc3RlbmNpbEZ1bmM9dC5zdGVuY2lsRnVuYyksdm9pZCAwIT09dC5zdGVuY2lsUmVmJiYoby5zdGVuY2lsUmVmPXQuc3RlbmNpbFJlZiksdm9pZCAwIT09dC5zdGVuY2lsRnVuY01hc2smJihvLnN0ZW5jaWxGdW5jTWFzaz10LnN0ZW5jaWxGdW5jTWFzayksdm9pZCAwIT09dC5zdGVuY2lsRmFpbCYmKG8uc3RlbmNpbEZhaWw9dC5zdGVuY2lsRmFpbCksdm9pZCAwIT09dC5zdGVuY2lsWkZhaWwmJihvLnN0ZW5jaWxaRmFpbD10LnN0ZW5jaWxaRmFpbCksdm9pZCAwIT09dC5zdGVuY2lsWlBhc3MmJihvLnN0ZW5jaWxaUGFzcz10LnN0ZW5jaWxaUGFzcyksdm9pZCAwIT09dC53aXJlZnJhbWUmJihvLndpcmVmcmFtZT10LndpcmVmcmFtZSksdm9pZCAwIT09dC53aXJlZnJhbWVMaW5ld2lkdGgmJihvLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCksdm9pZCAwIT09dC53aXJlZnJhbWVMaW5lY2FwJiYoby53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCksdm9pZCAwIT09dC53aXJlZnJhbWVMaW5lam9pbiYmKG8ud2lyZWZyYW1lTGluZWpvaW49dC53aXJlZnJhbWVMaW5lam9pbiksdm9pZCAwIT09dC5yb3RhdGlvbiYmKG8ucm90YXRpb249dC5yb3RhdGlvbiksMSE9PXQubGluZXdpZHRoJiYoby5saW5ld2lkdGg9dC5saW5ld2lkdGgpLHZvaWQgMCE9PXQuZGFzaFNpemUmJihvLmRhc2hTaXplPXQuZGFzaFNpemUpLHZvaWQgMCE9PXQuZ2FwU2l6ZSYmKG8uZ2FwU2l6ZT10LmdhcFNpemUpLHZvaWQgMCE9PXQuc2NhbGUmJihvLnNjYWxlPXQuc2NhbGUpLHZvaWQgMCE9PXQucG9seWdvbk9mZnNldCYmKG8ucG9seWdvbk9mZnNldD10LnBvbHlnb25PZmZzZXQpLHZvaWQgMCE9PXQucG9seWdvbk9mZnNldEZhY3RvciYmKG8ucG9seWdvbk9mZnNldEZhY3Rvcj10LnBvbHlnb25PZmZzZXRGYWN0b3IpLHZvaWQgMCE9PXQucG9seWdvbk9mZnNldFVuaXRzJiYoby5wb2x5Z29uT2Zmc2V0VW5pdHM9dC5wb2x5Z29uT2Zmc2V0VW5pdHMpLHZvaWQgMCE9PXQuc2tpbm5pbmcmJihvLnNraW5uaW5nPXQuc2tpbm5pbmcpLHZvaWQgMCE9PXQubW9ycGhUYXJnZXRzJiYoby5tb3JwaFRhcmdldHM9dC5tb3JwaFRhcmdldHMpLHZvaWQgMCE9PXQubW9ycGhOb3JtYWxzJiYoby5tb3JwaE5vcm1hbHM9dC5tb3JwaE5vcm1hbHMpLHZvaWQgMCE9PXQuZGl0aGVyaW5nJiYoby5kaXRoZXJpbmc9dC5kaXRoZXJpbmcpLHZvaWQgMCE9PXQudmVydGV4VGFuZ2VudHMmJihvLnZlcnRleFRhbmdlbnRzPXQudmVydGV4VGFuZ2VudHMpLHZvaWQgMCE9PXQudmlzaWJsZSYmKG8udmlzaWJsZT10LnZpc2libGUpLHZvaWQgMCE9PXQudG9uZU1hcHBlZCYmKG8udG9uZU1hcHBlZD10LnRvbmVNYXBwZWQpLHZvaWQgMCE9PXQudXNlckRhdGEmJihvLnVzZXJEYXRhPXQudXNlckRhdGEpLHZvaWQgMCE9PXQudmVydGV4Q29sb3JzJiYoby52ZXJ0ZXhDb2xvcnM9Im51bWJlciI9PXR5cGVvZiB0LnZlcnRleENvbG9ycz90LnZlcnRleENvbG9ycz4wOnQudmVydGV4Q29sb3JzKSx2b2lkIDAhPT10LnVuaWZvcm1zKWZvcihjb25zdCBlIGluIHQudW5pZm9ybXMpe2NvbnN0IGk9dC51bmlmb3Jtc1tlXTtzd2l0Y2goby51bmlmb3Jtc1tlXT17fSxpLnR5cGUpe2Nhc2UidCI6by51bmlmb3Jtc1tlXS52YWx1ZT1uKGkudmFsdWUpO2JyZWFrO2Nhc2UiYyI6by51bmlmb3Jtc1tlXS52YWx1ZT0obmV3IENydCkuc2V0SGV4KGkudmFsdWUpO2JyZWFrO2Nhc2UidjIiOm8udW5pZm9ybXNbZV0udmFsdWU9KG5ldyBVaXQpLmZyb21BcnJheShpLnZhbHVlKTticmVhaztjYXNlInYzIjpvLnVuaWZvcm1zW2VdLnZhbHVlPShuZXcgJGl0KS5mcm9tQXJyYXkoaS52YWx1ZSk7YnJlYWs7Y2FzZSJ2NCI6by51bmlmb3Jtc1tlXS52YWx1ZT0obmV3IEtpdCkuZnJvbUFycmF5KGkudmFsdWUpO2JyZWFrO2Nhc2UibTMiOm8udW5pZm9ybXNbZV0udmFsdWU9KG5ldyBXaXQpLmZyb21BcnJheShpLnZhbHVlKTticmVhaztjYXNlIm00IjpvLnVuaWZvcm1zW2VdLnZhbHVlPShuZXcga2F0KS5mcm9tQXJyYXkoaS52YWx1ZSk7YnJlYWs7ZGVmYXVsdDpvLnVuaWZvcm1zW2VdLnZhbHVlPWkudmFsdWV9fWlmKHZvaWQgMCE9PXQuZGVmaW5lcyYmKG8uZGVmaW5lcz10LmRlZmluZXMpLHZvaWQgMCE9PXQudmVydGV4U2hhZGVyJiYoby52ZXJ0ZXhTaGFkZXI9dC52ZXJ0ZXhTaGFkZXIpLHZvaWQgMCE9PXQuZnJhZ21lbnRTaGFkZXImJihvLmZyYWdtZW50U2hhZGVyPXQuZnJhZ21lbnRTaGFkZXIpLHZvaWQgMCE9PXQuZXh0ZW5zaW9ucylmb3IoY29uc3QgZSBpbiB0LmV4dGVuc2lvbnMpby5leHRlbnNpb25zW2VdPXQuZXh0ZW5zaW9uc1tlXTtpZih2b2lkIDAhPT10LnNoYWRpbmcmJihvLmZsYXRTaGFkaW5nPTE9PT10LnNoYWRpbmcpLHZvaWQgMCE9PXQuc2l6ZSYmKG8uc2l6ZT10LnNpemUpLHZvaWQgMCE9PXQuc2l6ZUF0dGVudWF0aW9uJiYoby5zaXplQXR0ZW51YXRpb249dC5zaXplQXR0ZW51YXRpb24pLHZvaWQgMCE9PXQubWFwJiYoby5tYXA9bih0Lm1hcCkpLHZvaWQgMCE9PXQubWF0Y2FwJiYoby5tYXRjYXA9bih0Lm1hdGNhcCkpLHZvaWQgMCE9PXQuYWxwaGFNYXAmJihvLmFscGhhTWFwPW4odC5hbHBoYU1hcCkpLHZvaWQgMCE9PXQuYnVtcE1hcCYmKG8uYnVtcE1hcD1uKHQuYnVtcE1hcCkpLHZvaWQgMCE9PXQuYnVtcFNjYWxlJiYoby5idW1wU2NhbGU9dC5idW1wU2NhbGUpLHZvaWQgMCE9PXQubm9ybWFsTWFwJiYoby5ub3JtYWxNYXA9bih0Lm5vcm1hbE1hcCkpLHZvaWQgMCE9PXQubm9ybWFsTWFwVHlwZSYmKG8ubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUpLHZvaWQgMCE9PXQubm9ybWFsU2NhbGUpe2xldCBlPXQubm9ybWFsU2NhbGU7ITE9PT1BcnJheS5pc0FycmF5KGUpJiYoZT1bZSxlXSksby5ub3JtYWxTY2FsZT0obmV3IFVpdCkuZnJvbUFycmF5KGUpfXJldHVybiB2b2lkIDAhPT10LmRpc3BsYWNlbWVudE1hcCYmKG8uZGlzcGxhY2VtZW50TWFwPW4odC5kaXNwbGFjZW1lbnRNYXApKSx2b2lkIDAhPT10LmRpc3BsYWNlbWVudFNjYWxlJiYoby5kaXNwbGFjZW1lbnRTY2FsZT10LmRpc3BsYWNlbWVudFNjYWxlKSx2b2lkIDAhPT10LmRpc3BsYWNlbWVudEJpYXMmJihvLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzKSx2b2lkIDAhPT10LnJvdWdobmVzc01hcCYmKG8ucm91Z2huZXNzTWFwPW4odC5yb3VnaG5lc3NNYXApKSx2b2lkIDAhPT10Lm1ldGFsbmVzc01hcCYmKG8ubWV0YWxuZXNzTWFwPW4odC5tZXRhbG5lc3NNYXApKSx2b2lkIDAhPT10LmVtaXNzaXZlTWFwJiYoby5lbWlzc2l2ZU1hcD1uKHQuZW1pc3NpdmVNYXApKSx2b2lkIDAhPT10LmVtaXNzaXZlSW50ZW5zaXR5JiYoby5lbWlzc2l2ZUludGVuc2l0eT10LmVtaXNzaXZlSW50ZW5zaXR5KSx2b2lkIDAhPT10LnNwZWN1bGFyTWFwJiYoby5zcGVjdWxhck1hcD1uKHQuc3BlY3VsYXJNYXApKSx2b2lkIDAhPT10LmVudk1hcCYmKG8uZW52TWFwPW4odC5lbnZNYXApKSx2b2lkIDAhPT10LmVudk1hcEludGVuc2l0eSYmKG8uZW52TWFwSW50ZW5zaXR5PXQuZW52TWFwSW50ZW5zaXR5KSx2b2lkIDAhPT10LnJlZmxlY3Rpdml0eSYmKG8ucmVmbGVjdGl2aXR5PXQucmVmbGVjdGl2aXR5KSx2b2lkIDAhPT10LnJlZnJhY3Rpb25SYXRpbyYmKG8ucmVmcmFjdGlvblJhdGlvPXQucmVmcmFjdGlvblJhdGlvKSx2b2lkIDAhPT10LmxpZ2h0TWFwJiYoby5saWdodE1hcD1uKHQubGlnaHRNYXApKSx2b2lkIDAhPT10LmxpZ2h0TWFwSW50ZW5zaXR5JiYoby5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5KSx2b2lkIDAhPT10LmFvTWFwJiYoby5hb01hcD1uKHQuYW9NYXApKSx2b2lkIDAhPT10LmFvTWFwSW50ZW5zaXR5JiYoby5hb01hcEludGVuc2l0eT10LmFvTWFwSW50ZW5zaXR5KSx2b2lkIDAhPT10LmdyYWRpZW50TWFwJiYoby5ncmFkaWVudE1hcD1uKHQuZ3JhZGllbnRNYXApKSx2b2lkIDAhPT10LmNsZWFyY29hdE1hcCYmKG8uY2xlYXJjb2F0TWFwPW4odC5jbGVhcmNvYXRNYXApKSx2b2lkIDAhPT10LmNsZWFyY29hdFJvdWdobmVzc01hcCYmKG8uY2xlYXJjb2F0Um91Z2huZXNzTWFwPW4odC5jbGVhcmNvYXRSb3VnaG5lc3NNYXApKSx2b2lkIDAhPT10LmNsZWFyY29hdE5vcm1hbE1hcCYmKG8uY2xlYXJjb2F0Tm9ybWFsTWFwPW4odC5jbGVhcmNvYXROb3JtYWxNYXApKSx2b2lkIDAhPT10LmNsZWFyY29hdE5vcm1hbFNjYWxlJiYoby5jbGVhcmNvYXROb3JtYWxTY2FsZT0obmV3IFVpdCkuZnJvbUFycmF5KHQuY2xlYXJjb2F0Tm9ybWFsU2NhbGUpKSx2b2lkIDAhPT10LnRyYW5zbWlzc2lvbiYmKG8udHJhbnNtaXNzaW9uPXQudHJhbnNtaXNzaW9uKSx2b2lkIDAhPT10LnRyYW5zbWlzc2lvbk1hcCYmKG8udHJhbnNtaXNzaW9uTWFwPW4odC50cmFuc21pc3Npb25NYXApKSxvfSxzZXRUZXh0dXJlczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50ZXh0dXJlcz10LHRoaXN9fSksVW10LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoWnJ0LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOlVtdCxpc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5OiEwLGNvcHk6ZnVuY3Rpb24odCl7cmV0dXJuIFpydC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy5pbnN0YW5jZUNvdW50PXQuaW5zdGFuY2VDb3VudCx0aGlzfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX0sdG9KU09OOmZ1bmN0aW9uKCl7Y29uc3QgdD1acnQucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMpO3JldHVybiB0Lmluc3RhbmNlQ291bnQ9dGhpcy5pbnN0YW5jZUNvdW50LHQuaXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeT0hMCx0fX0pLFdtdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKGtydC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpXbXQsaXNJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGU6ITAsY29weTpmdW5jdGlvbih0KXtyZXR1cm4ga3J0LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLm1lc2hQZXJBdHRyaWJ1dGU9dC5tZXNoUGVyQXR0cmlidXRlLHRoaXN9LHRvSlNPTjpmdW5jdGlvbigpe2NvbnN0IHQ9a3J0LnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzKTtyZXR1cm4gdC5tZXNoUGVyQXR0cmlidXRlPXRoaXMubWVzaFBlckF0dHJpYnV0ZSx0LmlzSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlPSEwLHR9fSksR210LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoS3B0LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOkdtdCxsb2FkOmZ1bmN0aW9uKHQsZSxuLG8pe2NvbnN0IGk9dGhpcyxhPW5ldyBRcHQoaS5tYW5hZ2VyKTthLnNldFBhdGgoaS5wYXRoKSxhLnNldFJlcXVlc3RIZWFkZXIoaS5yZXF1ZXN0SGVhZGVyKSxhLnNldFdpdGhDcmVkZW50aWFscyhpLndpdGhDcmVkZW50aWFscyksYS5sb2FkKHQsKGZ1bmN0aW9uKG4pe3RyeXtlKGkucGFyc2UoSlNPTi5wYXJzZShuKSkpfWNhdGNoKGUpe28/byhlKTpjb25zb2xlLmVycm9yKGUpLGkubWFuYWdlci5pdGVtRXJyb3IodCl9fSksbixvKX0scGFyc2U6ZnVuY3Rpb24odCl7Y29uc3QgZT17fSxuPXt9O2Z1bmN0aW9uIG8odCxvKXtpZih2b2lkIDAhPT1lW29dKXJldHVybiBlW29dO2NvbnN0IGk9dC5pbnRlcmxlYXZlZEJ1ZmZlcnNbb10sYT0oZnVuY3Rpb24gcih0LGUpe2lmKHZvaWQgMCE9PW5bZV0pcmV0dXJuIG5bZV07Y29uc3Qgbz1uZXcgVWludDMyQXJyYXkodC5hcnJheUJ1ZmZlcnNbZV0pLmJ1ZmZlcjtyZXR1cm4gbltlXT1vLG99KSh0LGkuYnVmZmVyKSxzPW5ldyBGY3QoQnJ0KGkudHlwZSxhKSxpLnN0cmlkZSk7cmV0dXJuIHMudXVpZD1pLnV1aWQsZVtvXT1zLHN9Y29uc3QgaT10LmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnk/bmV3IFVtdDpuZXcgWnJ0LGE9dC5kYXRhLmluZGV4O2lmKHZvaWQgMCE9PWEpe2NvbnN0IHQ9QnJ0KGEudHlwZSxhLmFycmF5KTtpLnNldEluZGV4KG5ldyBrcnQodCwxKSl9Y29uc3Qgcj10LmRhdGEuYXR0cmlidXRlcztmb3IoY29uc3QgZSBpbiByKXtjb25zdCBuPXJbZV07bGV0IGE7aWYobi5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlKWE9bmV3IEJjdChvKHQuZGF0YSxuLmRhdGEpLG4uaXRlbVNpemUsbi5vZmZzZXQsbi5ub3JtYWxpemVkKTtlbHNle2NvbnN0IHQ9QnJ0KG4udHlwZSxuLmFycmF5KTthPW5ldyhuLmlzSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlP1dtdDprcnQpKHQsbi5pdGVtU2l6ZSxuLm5vcm1hbGl6ZWQpfXZvaWQgMCE9PW4ubmFtZSYmKGEubmFtZT1uLm5hbWUpLGkuc2V0QXR0cmlidXRlKGUsYSl9Y29uc3Qgcz10LmRhdGEubW9ycGhBdHRyaWJ1dGVzO2lmKHMpZm9yKGNvbnN0IGUgaW4gcyl7Y29uc3Qgbj1zW2VdLGE9W107Zm9yKGxldCBlPTAsaT1uLmxlbmd0aDtlPGk7ZSsrKXtjb25zdCBpPW5bZV07bGV0IHI7cj1pLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU/bmV3IEJjdChvKHQuZGF0YSxpLmRhdGEpLGkuaXRlbVNpemUsaS5vZmZzZXQsaS5ub3JtYWxpemVkKTpuZXcga3J0KEJydChpLnR5cGUsaS5hcnJheSksaS5pdGVtU2l6ZSxpLm5vcm1hbGl6ZWQpLHZvaWQgMCE9PWkubmFtZSYmKHIubmFtZT1pLm5hbWUpLGEucHVzaChyKX1pLm1vcnBoQXR0cmlidXRlc1tlXT1hfXQuZGF0YS5tb3JwaFRhcmdldHNSZWxhdGl2ZSYmKGkubW9ycGhUYXJnZXRzUmVsYXRpdmU9ITApO2NvbnN0IGw9dC5kYXRhLmdyb3Vwc3x8dC5kYXRhLmRyYXdjYWxsc3x8dC5kYXRhLm9mZnNldHM7aWYodm9pZCAwIT09bClmb3IobGV0IHQ9MCxlPWwubGVuZ3RoO3QhPT1lOysrdCl7Y29uc3QgZT1sW3RdO2kuYWRkR3JvdXAoZS5zdGFydCxlLmNvdW50LGUubWF0ZXJpYWxJbmRleCl9Y29uc3QgYz10LmRhdGEuYm91bmRpbmdTcGhlcmU7aWYodm9pZCAwIT09Yyl7Y29uc3QgdD1uZXcgJGl0O3ZvaWQgMCE9PWMuY2VudGVyJiZ0LmZyb21BcnJheShjLmNlbnRlciksaS5ib3VuZGluZ1NwaGVyZT1uZXcgeWF0KHQsYy5yYWRpdXMpfXJldHVybiB0Lm5hbWUmJihpLm5hbWU9dC5uYW1lKSx0LnVzZXJEYXRhJiYoaS51c2VyRGF0YT10LnVzZXJEYXRhKSxpfX0pLFltdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKEtwdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpZbXQsaXNJbWFnZUJpdG1hcExvYWRlcjohMCxzZXRPcHRpb25zOmZ1bmN0aW9uIHQoZSl7cmV0dXJuIHRoaXMub3B0aW9ucz1lLHRoaXN9LGxvYWQ6ZnVuY3Rpb24odCxlLG4sbyl7dm9pZCAwPT09dCYmKHQ9IiIpLHZvaWQgMCE9PXRoaXMucGF0aCYmKHQ9dGhpcy5wYXRoK3QpLHQ9dGhpcy5tYW5hZ2VyLnJlc29sdmVVUkwodCk7Y29uc3QgaT10aGlzLGE9cXB0LmdldCh0KTtpZih2b2lkIDAhPT1hKXJldHVybiBpLm1hbmFnZXIuaXRlbVN0YXJ0KHQpLHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ZSYmZShhKSxpLm1hbmFnZXIuaXRlbUVuZCh0KX0pLDApLGE7Y29uc3Qgcj17fTtyLmNyZWRlbnRpYWxzPSJhbm9ueW1vdXMiPT09dGhpcy5jcm9zc09yaWdpbj8ic2FtZS1vcmlnaW4iOiJpbmNsdWRlIixmZXRjaCh0LHIpLnRoZW4oKGZ1bmN0aW9uKHQpe3JldHVybiB0LmJsb2IoKX0pKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gY3JlYXRlSW1hZ2VCaXRtYXAodCxpLm9wdGlvbnMpfSkpLnRoZW4oKGZ1bmN0aW9uKG4pe3FwdC5hZGQodCxuKSxlJiZlKG4pLGkubWFuYWdlci5pdGVtRW5kKHQpfSkpLmNhdGNoKChmdW5jdGlvbihlKXtvJiZvKGUpLGkubWFuYWdlci5pdGVtRXJyb3IodCksaS5tYW5hZ2VyLml0ZW1FbmQodCl9KSksaS5tYW5hZ2VyLml0ZW1TdGFydCh0KX19KSxPYmplY3QuYXNzaWduKHFtdC5wcm90b3R5cGUse21vdmVUbzpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmN1cnJlbnRQYXRoPW5ldyB3bXQsdGhpcy5zdWJQYXRocy5wdXNoKHRoaXMuY3VycmVudFBhdGgpLHRoaXMuY3VycmVudFBhdGgubW92ZVRvKHQsZSksdGhpc30sbGluZVRvOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuY3VycmVudFBhdGgubGluZVRvKHQsZSksdGhpc30scXVhZHJhdGljQ3VydmVUbzpmdW5jdGlvbih0LGUsbixvKXtyZXR1cm4gdGhpcy5jdXJyZW50UGF0aC5xdWFkcmF0aWNDdXJ2ZVRvKHQsZSxuLG8pLHRoaXN9LGJlemllckN1cnZlVG86ZnVuY3Rpb24odCxlLG4sbyxpLGEpe3JldHVybiB0aGlzLmN1cnJlbnRQYXRoLmJlemllckN1cnZlVG8odCxlLG4sbyxpLGEpLHRoaXN9LHNwbGluZVRocnU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY3VycmVudFBhdGguc3BsaW5lVGhydSh0KSx0aGlzfSx0b1NoYXBlczpmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIG4odCl7Y29uc3QgZT1bXTtmb3IobGV0IG49MCxvPXQubGVuZ3RoO248bztuKyspe2NvbnN0IG89dFtuXSxpPW5ldyBrbXQ7aS5jdXJ2ZXM9by5jdXJ2ZXMsZS5wdXNoKGkpfXJldHVybiBlfWZ1bmN0aW9uIG8odCxlKXtjb25zdCBuPWUubGVuZ3RoO2xldCBvPSExO2ZvcihsZXQgaT1uLTEsYT0wO2E8bjtpPWErKyl7bGV0IG49ZVtpXSxyPWVbYV0scz1yLngtbi54LGw9ci55LW4ueTtpZihNYXRoLmFicyhsKT5OdW1iZXIuRVBTSUxPTil7aWYobDwwJiYobj1lW2FdLHM9LXMscj1lW2ldLGw9LWwpLHQueTxuLnl8fHQueT5yLnkpY29udGludWU7aWYodC55PT09bi55KXtpZih0Lng9PT1uLngpcmV0dXJuITB9ZWxzZXtjb25zdCBlPWwqKHQueC1uLngpLXMqKHQueS1uLnkpO2lmKDA9PT1lKXJldHVybiEwO2lmKGU8MCljb250aW51ZTtvPSFvfX1lbHNle2lmKHQueSE9PW4ueSljb250aW51ZTtpZihyLng8PXQueCYmdC54PD1uLnh8fG4ueDw9dC54JiZ0Lng8PXIueClyZXR1cm4hMH19cmV0dXJuIG99Y29uc3QgaT1mcHQuaXNDbG9ja1dpc2UsYT10aGlzLnN1YlBhdGhzO2lmKDA9PT1hLmxlbmd0aClyZXR1cm5bXTtpZighMD09PWUpcmV0dXJuIG4oYSk7bGV0IHIscyxsO2NvbnN0IGM9W107aWYoMT09PWEubGVuZ3RoKXJldHVybiBzPWFbMF0sbD1uZXcga210LGwuY3VydmVzPXMuY3VydmVzLGMucHVzaChsKSxjO2xldCBkPSFpKGFbMF0uZ2V0UG9pbnRzKCkpO2Q9dD8hZDpkO2NvbnN0IHA9W10sbT1bXTtsZXQgdSxmLGc9W10saD0wO21baF09dm9pZCAwLGdbaF09W107Zm9yKGxldCBlPTAsbj1hLmxlbmd0aDtlPG47ZSsrKXM9YVtlXSx1PXMuZ2V0UG9pbnRzKCkscj1pKHUpLHI9dD8hcjpyLHI/KCFkJiZtW2hdJiZoKyssbVtoXT17czpuZXcga210LHA6dX0sbVtoXS5zLmN1cnZlcz1zLmN1cnZlcyxkJiZoKyssZ1toXT1bXSk6Z1toXS5wdXNoKHtoOnMscDp1WzBdfSk7aWYoIW1bMF0pcmV0dXJuIG4oYSk7aWYobS5sZW5ndGg+MSl7bGV0IHQ9ITE7Y29uc3QgZT1bXTtmb3IobGV0IHQ9MCxlPW0ubGVuZ3RoO3Q8ZTt0KyspcFt0XT1bXTtmb3IobGV0IG49MCxpPW0ubGVuZ3RoO248aTtuKyspe2NvbnN0IGk9Z1tuXTtmb3IobGV0IGE9MDthPGkubGVuZ3RoO2ErKyl7Y29uc3Qgcj1pW2FdO2xldCBzPSEwO2ZvcihsZXQgaT0wO2k8bS5sZW5ndGg7aSsrKW8oci5wLG1baV0ucCkmJihuIT09aSYmZS5wdXNoKHtmcm9tczpuLHRvczppLGhvbGU6YX0pLHM/KHM9ITEscFtpXS5wdXNoKHIpKTp0PSEwKTtzJiZwW25dLnB1c2gocil9fWUubGVuZ3RoPjAmJih0fHwoZz1wKSl9Zm9yKGxldCB0PTAsZT1tLmxlbmd0aDt0PGU7dCsrKXtsPW1bdF0ucyxjLnB1c2gobCksZj1nW3RdO2ZvcihsZXQgdD0wLGU9Zi5sZW5ndGg7dDxlO3QrKylsLmhvbGVzLnB1c2goZlt0XS5oKX1yZXR1cm4gY319KTtjbGFzcyBabXR7Y29uc3RydWN0b3IodCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlzRm9udCIse3ZhbHVlOiEwfSksdGhpcy50eXBlPSJGb250Iix0aGlzLmRhdGE9dH1nZW5lcmF0ZVNoYXBlcyh0LGU9MTAwKXtjb25zdCBuPVtdLG89KGZ1bmN0aW9uIGkodCxlLG4pe2NvbnN0IG89QXJyYXkuZnJvbT9BcnJheS5mcm9tKHQpOlN0cmluZyh0KS5zcGxpdCgiIiksaT1lL24ucmVzb2x1dGlvbixhPShuLmJvdW5kaW5nQm94LnlNYXgtbi5ib3VuZGluZ0JveC55TWluK24udW5kZXJsaW5lVGhpY2tuZXNzKSppLHI9W107bGV0IHM9MCxsPTA7Zm9yKGxldCB0PTA7dDxvLmxlbmd0aDt0Kyspe2NvbnN0IGU9b1t0XTtpZigiXG4iPT09ZSlzPTAsbC09YTtlbHNle2NvbnN0IHQ9WG10KGUsaSxzLGwsbik7cys9dC5vZmZzZXRYLHIucHVzaCh0LnBhdGgpfX1yZXR1cm4gcn0pKHQsZSx0aGlzLmRhdGEpO2ZvcihsZXQgdD0wLGU9by5sZW5ndGg7dDxlO3QrKylBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShuLG9bdF0udG9TaGFwZXMoKSk7cmV0dXJuIG59fWZ1bmN0aW9uIFhtdCh0LGUsbixvLGkpe2NvbnN0IGE9aS5nbHlwaHNbdF18fGkuZ2x5cGhzWyI/Il07aWYoIWEpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcignVEhSRUUuRm9udDogY2hhcmFjdGVyICInK3QrJyIgZG9lcyBub3QgZXhpc3RzIGluIGZvbnQgZmFtaWx5ICcraS5mYW1pbHlOYW1lKyIuIik7Y29uc3Qgcj1uZXcgcW10O2xldCBzLGwsYyxkLHAsbSx1LGY7aWYoYS5vKXtjb25zdCB0PWEuX2NhY2hlZE91dGxpbmV8fChhLl9jYWNoZWRPdXRsaW5lPWEuby5zcGxpdCgiICIpKTtmb3IobGV0IGk9MCxhPXQubGVuZ3RoO2k8YTspc3dpdGNoKHRbaSsrXSl7Y2FzZSJtIjpzPXRbaSsrXSplK24sbD10W2krK10qZStvLHIubW92ZVRvKHMsbCk7YnJlYWs7Y2FzZSJsIjpzPXRbaSsrXSplK24sbD10W2krK10qZStvLHIubGluZVRvKHMsbCk7YnJlYWs7Y2FzZSJxIjpjPXRbaSsrXSplK24sZD10W2krK10qZStvLHA9dFtpKytdKmUrbixtPXRbaSsrXSplK28sci5xdWFkcmF0aWNDdXJ2ZVRvKHAsbSxjLGQpO2JyZWFrO2Nhc2UiYiI6Yz10W2krK10qZStuLGQ9dFtpKytdKmUrbyxwPXRbaSsrXSplK24sbT10W2krK10qZStvLHU9dFtpKytdKmUrbixmPXRbaSsrXSplK28sci5iZXppZXJDdXJ2ZVRvKHAsbSx1LGYsYyxkKX19cmV0dXJue29mZnNldFg6YS5oYSplLHBhdGg6cn19ZnVuY3Rpb24gS210KHQpe0twdC5jYWxsKHRoaXMsdCl9bGV0IEptdDtmdW5jdGlvbiBRbXQodCl7S3B0LmNhbGwodGhpcyx0KX1mdW5jdGlvbiAkbXQodCxlLG4pe1ZtdC5jYWxsKHRoaXMsdm9pZCAwLG4pO2NvbnN0IG89KG5ldyBDcnQpLnNldCh0KSxpPShuZXcgQ3J0KS5zZXQoZSksYT1uZXcgJGl0KG8ucixvLmcsby5iKSxyPW5ldyAkaXQoaS5yLGkuZyxpLmIpLHM9TWF0aC5zcXJ0KE1hdGguUEkpLGw9cypNYXRoLnNxcnQoLjc1KTt0aGlzLnNoLmNvZWZmaWNpZW50c1swXS5jb3B5KGEpLmFkZChyKS5tdWx0aXBseVNjYWxhcihzKSx0aGlzLnNoLmNvZWZmaWNpZW50c1sxXS5jb3B5KGEpLnN1YihyKS5tdWx0aXBseVNjYWxhcihsKX1mdW5jdGlvbiB0dXQodCxlKXtWbXQuY2FsbCh0aGlzLHZvaWQgMCxlKTtjb25zdCBuPShuZXcgQ3J0KS5zZXQodCk7dGhpcy5zaC5jb2VmZmljaWVudHNbMF0uc2V0KG4ucixuLmcsbi5iKS5tdWx0aXBseVNjYWxhcigyKk1hdGguc3FydChNYXRoLlBJKSl9S210LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoS3B0LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOkttdCxsb2FkOmZ1bmN0aW9uKHQsZSxuLG8pe2NvbnN0IGk9dGhpcyxhPW5ldyBRcHQodGhpcy5tYW5hZ2VyKTthLnNldFBhdGgodGhpcy5wYXRoKSxhLnNldFJlcXVlc3RIZWFkZXIodGhpcy5yZXF1ZXN0SGVhZGVyKSxhLnNldFdpdGhDcmVkZW50aWFscyhpLndpdGhDcmVkZW50aWFscyksYS5sb2FkKHQsKGZ1bmN0aW9uKHQpe2xldCBuO3RyeXtuPUpTT04ucGFyc2UodCl9Y2F0Y2goZSl7Y29uc29sZS53YXJuKCJUSFJFRS5Gb250TG9hZGVyOiB0eXBlZmFjZS5qcyBzdXBwb3J0IGlzIGJlaW5nIGRlcHJlY2F0ZWQuIFVzZSB0eXBlZmFjZS5qc29uIGluc3RlYWQuIiksbj1KU09OLnBhcnNlKHQuc3Vic3RyaW5nKDY1LHQubGVuZ3RoLTIpKX1jb25zdCBvPWkucGFyc2Uobik7ZSYmZShvKX0pLG4sbyl9LHBhcnNlOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgWm10KHQpfX0pLFFtdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKEtwdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpRbXQsbG9hZDpmdW5jdGlvbih0LGUsbixvKXtjb25zdCBpPXRoaXMsYT1uZXcgUXB0KGkubWFuYWdlcik7YS5zZXRSZXNwb25zZVR5cGUoImFycmF5YnVmZmVyIiksYS5zZXRQYXRoKGkucGF0aCksYS5zZXRSZXF1ZXN0SGVhZGVyKGkucmVxdWVzdEhlYWRlciksYS5zZXRXaXRoQ3JlZGVudGlhbHMoaS53aXRoQ3JlZGVudGlhbHMpLGEubG9hZCh0LChmdW5jdGlvbihuKXt0cnl7Y29uc3QgdD1uLnNsaWNlKDApOyh2b2lkIDA9PT1KbXQmJihKbXQ9bmV3KHdpbmRvdy5BdWRpb0NvbnRleHR8fHdpbmRvdy53ZWJraXRBdWRpb0NvbnRleHQpKSxKbXQpLmRlY29kZUF1ZGlvRGF0YSh0LChmdW5jdGlvbih0KXtlKHQpfSkpfWNhdGNoKGUpe28/byhlKTpjb25zb2xlLmVycm9yKGUpLGkubWFuYWdlci5pdGVtRXJyb3IodCl9fSksbixvKX19KSwkbXQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShWbXQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6JG10LGlzSGVtaXNwaGVyZUxpZ2h0UHJvYmU6ITAsY29weTpmdW5jdGlvbih0KXtyZXR1cm4gVm10LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzfSx0b0pTT046ZnVuY3Rpb24odCl7cmV0dXJuIFZtdC5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyx0KX19KSx0dXQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShWbXQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6dHV0LGlzQW1iaWVudExpZ2h0UHJvYmU6ITAsY29weTpmdW5jdGlvbih0KXtyZXR1cm4gVm10LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzfSx0b0pTT046ZnVuY3Rpb24odCl7cmV0dXJuIFZtdC5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyx0KX19KTtjb25zdCBldXQ9bmV3IGthdCxudXQ9bmV3IGthdDtmdW5jdGlvbiBvdXQodCxlLG4pe2xldCBvLGksYTtzd2l0Y2godGhpcy5iaW5kaW5nPXQsdGhpcy52YWx1ZVNpemU9bixlKXtjYXNlInF1YXRlcm5pb24iOm89dGhpcy5fc2xlcnAsaT10aGlzLl9zbGVycEFkZGl0aXZlLGE9dGhpcy5fc2V0QWRkaXRpdmVJZGVudGl0eVF1YXRlcm5pb24sdGhpcy5idWZmZXI9bmV3IEZsb2F0NjRBcnJheSg2Km4pLHRoaXMuX3dvcmtJbmRleD01O2JyZWFrO2Nhc2Uic3RyaW5nIjpjYXNlImJvb2wiOm89dGhpcy5fc2VsZWN0LGk9dGhpcy5fc2VsZWN0LGE9dGhpcy5fc2V0QWRkaXRpdmVJZGVudGl0eU90aGVyLHRoaXMuYnVmZmVyPW5ldyBBcnJheSg1Km4pO2JyZWFrO2RlZmF1bHQ6bz10aGlzLl9sZXJwLGk9dGhpcy5fbGVycEFkZGl0aXZlLGE9dGhpcy5fc2V0QWRkaXRpdmVJZGVudGl0eU51bWVyaWMsdGhpcy5idWZmZXI9bmV3IEZsb2F0NjRBcnJheSg1Km4pfXRoaXMuX21peEJ1ZmZlclJlZ2lvbj1vLHRoaXMuX21peEJ1ZmZlclJlZ2lvbkFkZGl0aXZlPWksdGhpcy5fc2V0SWRlbnRpdHk9YSx0aGlzLl9vcmlnSW5kZXg9Myx0aGlzLl9hZGRJbmRleD00LHRoaXMuY3VtdWxhdGl2ZVdlaWdodD0wLHRoaXMuY3VtdWxhdGl2ZVdlaWdodEFkZGl0aXZlPTAsdGhpcy51c2VDb3VudD0wLHRoaXMucmVmZXJlbmNlQ291bnQ9MH1PYmplY3QuYXNzaWduKGZ1bmN0aW9uIGl1dCgpe3RoaXMudHlwZT0iU3RlcmVvQ2FtZXJhIix0aGlzLmFzcGVjdD0xLHRoaXMuZXllU2VwPS4wNjQsdGhpcy5jYW1lcmFMPW5ldyBDc3QsdGhpcy5jYW1lcmFMLmxheWVycy5lbmFibGUoMSksdGhpcy5jYW1lcmFMLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5jYW1lcmFSPW5ldyBDc3QsdGhpcy5jYW1lcmFSLmxheWVycy5lbmFibGUoMiksdGhpcy5jYW1lcmFSLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5fY2FjaGU9e2ZvY3VzOm51bGwsZm92Om51bGwsYXNwZWN0Om51bGwsbmVhcjpudWxsLGZhcjpudWxsLHpvb206bnVsbCxleWVTZXA6bnVsbH19LnByb3RvdHlwZSx7dXBkYXRlOmZ1bmN0aW9uKHQpe2NvbnN0IGU9dGhpcy5fY2FjaGU7aWYoZS5mb2N1cyE9PXQuZm9jdXN8fGUuZm92IT09dC5mb3Z8fGUuYXNwZWN0IT09dC5hc3BlY3QqdGhpcy5hc3BlY3R8fGUubmVhciE9PXQubmVhcnx8ZS5mYXIhPT10LmZhcnx8ZS56b29tIT09dC56b29tfHxlLmV5ZVNlcCE9PXRoaXMuZXllU2VwKXtlLmZvY3VzPXQuZm9jdXMsZS5mb3Y9dC5mb3YsZS5hc3BlY3Q9dC5hc3BlY3QqdGhpcy5hc3BlY3QsZS5uZWFyPXQubmVhcixlLmZhcj10LmZhcixlLnpvb209dC56b29tLGUuZXllU2VwPXRoaXMuZXllU2VwO2NvbnN0IG49dC5wcm9qZWN0aW9uTWF0cml4LmNsb25lKCksbz1lLmV5ZVNlcC8yLGk9byplLm5lYXIvZS5mb2N1cyxhPWUubmVhcipNYXRoLnRhbihqaXQuREVHMlJBRCplLmZvdiouNSkvZS56b29tO2xldCByLHM7bnV0LmVsZW1lbnRzWzEyXT0tbyxldXQuZWxlbWVudHNbMTJdPW8scj0tYSplLmFzcGVjdCtpLHM9YSplLmFzcGVjdCtpLG4uZWxlbWVudHNbMF09MiplLm5lYXIvKHMtciksbi5lbGVtZW50c1s4XT0ocytyKS8ocy1yKSx0aGlzLmNhbWVyYUwucHJvamVjdGlvbk1hdHJpeC5jb3B5KG4pLHI9LWEqZS5hc3BlY3QtaSxzPWEqZS5hc3BlY3QtaSxuLmVsZW1lbnRzWzBdPTIqZS5uZWFyLyhzLXIpLG4uZWxlbWVudHNbOF09KHMrcikvKHMtciksdGhpcy5jYW1lcmFSLnByb2plY3Rpb25NYXRyaXguY29weShuKX10aGlzLmNhbWVyYUwubWF0cml4V29ybGQuY29weSh0Lm1hdHJpeFdvcmxkKS5tdWx0aXBseShudXQpLHRoaXMuY2FtZXJhUi5tYXRyaXhXb3JsZC5jb3B5KHQubWF0cml4V29ybGQpLm11bHRpcGx5KGV1dCl9fSksT2JqZWN0LmFzc2lnbihvdXQucHJvdG90eXBlLHthY2N1bXVsYXRlOmZ1bmN0aW9uKHQsZSl7Y29uc3Qgbj10aGlzLmJ1ZmZlcixvPXRoaXMudmFsdWVTaXplLGk9dCpvK287bGV0IGE9dGhpcy5jdW11bGF0aXZlV2VpZ2h0O2lmKDA9PT1hKXtmb3IobGV0IHQ9MDt0IT09bzsrK3QpbltpK3RdPW5bdF07YT1lfWVsc2UgYSs9ZSx0aGlzLl9taXhCdWZmZXJSZWdpb24obixpLDAsZS9hLG8pO3RoaXMuY3VtdWxhdGl2ZVdlaWdodD1hfSxhY2N1bXVsYXRlQWRkaXRpdmU6ZnVuY3Rpb24odCl7Y29uc3QgZT10aGlzLmJ1ZmZlcixuPXRoaXMudmFsdWVTaXplLG89bip0aGlzLl9hZGRJbmRleDswPT09dGhpcy5jdW11bGF0aXZlV2VpZ2h0QWRkaXRpdmUmJnRoaXMuX3NldElkZW50aXR5KCksdGhpcy5fbWl4QnVmZmVyUmVnaW9uQWRkaXRpdmUoZSxvLDAsdCxuKSx0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZSs9dH0sYXBwbHk6ZnVuY3Rpb24odCl7Y29uc3QgZT10aGlzLnZhbHVlU2l6ZSxuPXRoaXMuYnVmZmVyLG89dCplK2UsaT10aGlzLmN1bXVsYXRpdmVXZWlnaHQsYT10aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZSxyPXRoaXMuYmluZGluZzt0aGlzLmN1bXVsYXRpdmVXZWlnaHQ9MCx0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZT0wLGk8MSYmdGhpcy5fbWl4QnVmZmVyUmVnaW9uKG4sbyxlKnRoaXMuX29yaWdJbmRleCwxLWksZSksYT4wJiZ0aGlzLl9taXhCdWZmZXJSZWdpb25BZGRpdGl2ZShuLG8sdGhpcy5fYWRkSW5kZXgqZSwxLGUpO2ZvcihsZXQgdD1lLGk9ZStlO3QhPT1pOysrdClpZihuW3RdIT09blt0K2VdKXtyLnNldFZhbHVlKG4sbyk7YnJlYWt9fSxzYXZlT3JpZ2luYWxTdGF0ZTpmdW5jdGlvbigpe2NvbnN0IHQ9dGhpcy5idWZmZXIsZT10aGlzLnZhbHVlU2l6ZSxuPWUqdGhpcy5fb3JpZ0luZGV4O3RoaXMuYmluZGluZy5nZXRWYWx1ZSh0LG4pO2ZvcihsZXQgbz1lLGk9bjtvIT09aTsrK28pdFtvXT10W24rbyVlXTt0aGlzLl9zZXRJZGVudGl0eSgpLHRoaXMuY3VtdWxhdGl2ZVdlaWdodD0wLHRoaXMuY3VtdWxhdGl2ZVdlaWdodEFkZGl0aXZlPTB9LHJlc3RvcmVPcmlnaW5hbFN0YXRlOmZ1bmN0aW9uKCl7dGhpcy5iaW5kaW5nLnNldFZhbHVlKHRoaXMuYnVmZmVyLDMqdGhpcy52YWx1ZVNpemUpfSxfc2V0QWRkaXRpdmVJZGVudGl0eU51bWVyaWM6ZnVuY3Rpb24oKXtjb25zdCB0PXRoaXMuX2FkZEluZGV4KnRoaXMudmFsdWVTaXplLGU9dCt0aGlzLnZhbHVlU2l6ZTtmb3IobGV0IG49dDtuPGU7bisrKXRoaXMuYnVmZmVyW25dPTB9LF9zZXRBZGRpdGl2ZUlkZW50aXR5UXVhdGVybmlvbjpmdW5jdGlvbigpe3RoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlOdW1lcmljKCksdGhpcy5idWZmZXJbdGhpcy5fYWRkSW5kZXgqdGhpcy52YWx1ZVNpemUrM109MX0sX3NldEFkZGl0aXZlSWRlbnRpdHlPdGhlcjpmdW5jdGlvbigpe2NvbnN0IHQ9dGhpcy5fb3JpZ0luZGV4KnRoaXMudmFsdWVTaXplLGU9dGhpcy5fYWRkSW5kZXgqdGhpcy52YWx1ZVNpemU7Zm9yKGxldCBuPTA7bjx0aGlzLnZhbHVlU2l6ZTtuKyspdGhpcy5idWZmZXJbZStuXT10aGlzLmJ1ZmZlclt0K25dfSxfc2VsZWN0OmZ1bmN0aW9uKHQsZSxuLG8saSl7aWYobz49LjUpZm9yKGxldCBvPTA7byE9PWk7KytvKXRbZStvXT10W24rb119LF9zbGVycDpmdW5jdGlvbih0LGUsbixvKXtRaXQuc2xlcnBGbGF0KHQsZSx0LGUsdCxuLG8pfSxfc2xlcnBBZGRpdGl2ZTpmdW5jdGlvbih0LGUsbixvLGkpe2NvbnN0IGE9dGhpcy5fd29ya0luZGV4Kmk7UWl0Lm11bHRpcGx5UXVhdGVybmlvbnNGbGF0KHQsYSx0LGUsdCxuKSxRaXQuc2xlcnBGbGF0KHQsZSx0LGUsdCxhLG8pfSxfbGVycDpmdW5jdGlvbih0LGUsbixvLGkpe2NvbnN0IGE9MS1vO2ZvcihsZXQgcj0wO3IhPT1pOysrcil7Y29uc3QgaT1lK3I7dFtpXT10W2ldKmErdFtuK3JdKm99fSxfbGVycEFkZGl0aXZlOmZ1bmN0aW9uKHQsZSxuLG8saSl7Zm9yKGxldCBhPTA7YSE9PWk7KythKXtjb25zdCBpPWUrYTt0W2ldPXRbaV0rdFtuK2FdKm99fX0pO2NvbnN0IGF1dD1uZXcgUmVnRXhwKCJbXFxbXFxdXFwuOlxcL10iLCJnIikscnV0PSJbXlxcW1xcXVxcLjpcXC9dIixzdXQ9IlteIisiXFxbXFxdXFwuOlxcLyIucmVwbGFjZSgiXFwuIiwiIikrIl0iLGx1dD0vKCg/OldDK1tcLzpdKSopLy5zb3VyY2UucmVwbGFjZSgiV0MiLHJ1dCksY3V0PS8oV0NPRCspPy8uc291cmNlLnJlcGxhY2UoIldDT0QiLHN1dCksZHV0PS8oPzpcLihXQyspKD86XFsoLispXF0pPyk/Ly5zb3VyY2UucmVwbGFjZSgiV0MiLHJ1dCkscHV0PS9cLihXQyspKD86XFsoLispXF0pPy8uc291cmNlLnJlcGxhY2UoIldDIixydXQpLG11dD1uZXcgUmVnRXhwKCJeIitsdXQrY3V0K2R1dCtwdXQrIiQiKSx1dXQ9WyJtYXRlcmlhbCIsIm1hdGVyaWFscyIsImJvbmVzIl07ZnVuY3Rpb24gZnV0KHQsZSxuKXtjb25zdCBvPW58fGd1dC5wYXJzZVRyYWNrTmFtZShlKTt0aGlzLl90YXJnZXRHcm91cD10LHRoaXMuX2JpbmRpbmdzPXQuc3Vic2NyaWJlXyhlLG8pfWZ1bmN0aW9uIGd1dCh0LGUsbil7dGhpcy5wYXRoPWUsdGhpcy5wYXJzZWRQYXRoPW58fGd1dC5wYXJzZVRyYWNrTmFtZShlKSx0aGlzLm5vZGU9Z3V0LmZpbmROb2RlKHQsdGhpcy5wYXJzZWRQYXRoLm5vZGVOYW1lKXx8dCx0aGlzLnJvb3ROb2RlPXR9T2JqZWN0LmFzc2lnbihmdXQucHJvdG90eXBlLHtnZXRWYWx1ZTpmdW5jdGlvbih0LGUpe3RoaXMuYmluZCgpO2NvbnN0IG49dGhpcy5fYmluZGluZ3NbdGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfXTt2b2lkIDAhPT1uJiZuLmdldFZhbHVlKHQsZSl9LHNldFZhbHVlOmZ1bmN0aW9uKHQsZSl7Y29uc3Qgbj10aGlzLl9iaW5kaW5ncztmb3IobGV0IG89dGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfLGk9bi5sZW5ndGg7byE9PWk7KytvKW5bb10uc2V0VmFsdWUodCxlKX0sYmluZDpmdW5jdGlvbigpe2NvbnN0IHQ9dGhpcy5fYmluZGluZ3M7Zm9yKGxldCBlPXRoaXMuX3RhcmdldEdyb3VwLm5DYWNoZWRPYmplY3RzXyxuPXQubGVuZ3RoO2UhPT1uOysrZSl0W2VdLmJpbmQoKX0sdW5iaW5kOmZ1bmN0aW9uKCl7Y29uc3QgdD10aGlzLl9iaW5kaW5ncztmb3IobGV0IGU9dGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfLG49dC5sZW5ndGg7ZSE9PW47KytlKXRbZV0udW5iaW5kKCl9fSksT2JqZWN0LmFzc2lnbihndXQse0NvbXBvc2l0ZTpmdXQsY3JlYXRlOmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdCYmdC5pc0FuaW1hdGlvbk9iamVjdEdyb3VwP25ldyBndXQuQ29tcG9zaXRlKHQsZSxuKTpuZXcgZ3V0KHQsZSxuKX0sc2FuaXRpemVOb2RlTmFtZTpmdW5jdGlvbih0KXtyZXR1cm4gdC5yZXBsYWNlKC9ccy9nLCJfIikucmVwbGFjZShhdXQsIiIpfSxwYXJzZVRyYWNrTmFtZTpmdW5jdGlvbih0KXtjb25zdCBlPW11dC5leGVjKHQpO2lmKCFlKXRocm93IG5ldyBFcnJvcigiUHJvcGVydHlCaW5kaW5nOiBDYW5ub3QgcGFyc2UgdHJhY2tOYW1lOiAiK3QpO2NvbnN0IG49e25vZGVOYW1lOmVbMl0sb2JqZWN0TmFtZTplWzNdLG9iamVjdEluZGV4OmVbNF0scHJvcGVydHlOYW1lOmVbNV0scHJvcGVydHlJbmRleDplWzZdfSxvPW4ubm9kZU5hbWUmJm4ubm9kZU5hbWUubGFzdEluZGV4T2YoIi4iKTtpZih2b2lkIDAhPT1vJiYtMSE9PW8pe2NvbnN0IHQ9bi5ub2RlTmFtZS5zdWJzdHJpbmcobysxKTstMSE9PXV1dC5pbmRleE9mKHQpJiYobi5ub2RlTmFtZT1uLm5vZGVOYW1lLnN1YnN0cmluZygwLG8pLG4ub2JqZWN0TmFtZT10KX1pZihudWxsPT09bi5wcm9wZXJ0eU5hbWV8fDA9PT1uLnByb3BlcnR5TmFtZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJQcm9wZXJ0eUJpbmRpbmc6IGNhbiBub3QgcGFyc2UgcHJvcGVydHlOYW1lIGZyb20gdHJhY2tOYW1lOiAiK3QpO3JldHVybiBufSxmaW5kTm9kZTpmdW5jdGlvbih0LGUpe2lmKCFlfHwiIj09PWV8fCIuIj09PWV8fC0xPT09ZXx8ZT09PXQubmFtZXx8ZT09PXQudXVpZClyZXR1cm4gdDtpZih0LnNrZWxldG9uKXtjb25zdCBuPXQuc2tlbGV0b24uZ2V0Qm9uZUJ5TmFtZShlKTtpZih2b2lkIDAhPT1uKXJldHVybiBufWlmKHQuY2hpbGRyZW4pe2NvbnN0IG49ZnVuY3Rpb24odCl7Zm9yKGxldCBvPTA7bzx0Lmxlbmd0aDtvKyspe2NvbnN0IGk9dFtvXTtpZihpLm5hbWU9PT1lfHxpLnV1aWQ9PT1lKXJldHVybiBpO2NvbnN0IGE9bihpLmNoaWxkcmVuKTtpZihhKXJldHVybiBhfXJldHVybiBudWxsfSxvPW4odC5jaGlsZHJlbik7aWYobylyZXR1cm4gb31yZXR1cm4gbnVsbH19KSxPYmplY3QuYXNzaWduKGd1dC5wcm90b3R5cGUse19nZXRWYWx1ZV91bmF2YWlsYWJsZTpmdW5jdGlvbigpe30sX3NldFZhbHVlX3VuYXZhaWxhYmxlOmZ1bmN0aW9uKCl7fSxCaW5kaW5nVHlwZTp7RGlyZWN0OjAsRW50aXJlQXJyYXk6MSxBcnJheUVsZW1lbnQ6MixIYXNGcm9tVG9BcnJheTozfSxWZXJzaW9uaW5nOntOb25lOjAsTmVlZHNVcGRhdGU6MSxNYXRyaXhXb3JsZE5lZWRzVXBkYXRlOjJ9LEdldHRlckJ5QmluZGluZ1R5cGU6W2Z1bmN0aW9uIHQoZSxuKXtlW25dPXRoaXMubm9kZVt0aGlzLnByb3BlcnR5TmFtZV19LGZ1bmN0aW9uIHQoZSxuKXtjb25zdCBvPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eTtmb3IobGV0IHQ9MCxpPW8ubGVuZ3RoO3QhPT1pOysrdCllW24rK109b1t0XX0sZnVuY3Rpb24gdChlLG4pe2Vbbl09dGhpcy5yZXNvbHZlZFByb3BlcnR5W3RoaXMucHJvcGVydHlJbmRleF19LGZ1bmN0aW9uIHQoZSxuKXt0aGlzLnJlc29sdmVkUHJvcGVydHkudG9BcnJheShlLG4pfV0sU2V0dGVyQnlCaW5kaW5nVHlwZUFuZFZlcnNpb25pbmc6W1tmdW5jdGlvbiB0KGUsbil7dGhpcy50YXJnZXRPYmplY3RbdGhpcy5wcm9wZXJ0eU5hbWVdPWVbbl19LGZ1bmN0aW9uIHQoZSxuKXt0aGlzLnRhcmdldE9iamVjdFt0aGlzLnByb3BlcnR5TmFtZV09ZVtuXSx0aGlzLnRhcmdldE9iamVjdC5uZWVkc1VwZGF0ZT0hMH0sZnVuY3Rpb24gdChlLG4pe3RoaXMudGFyZ2V0T2JqZWN0W3RoaXMucHJvcGVydHlOYW1lXT1lW25dLHRoaXMudGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9XSxbZnVuY3Rpb24gdChlLG4pe2NvbnN0IG89dGhpcy5yZXNvbHZlZFByb3BlcnR5O2ZvcihsZXQgdD0wLGk9by5sZW5ndGg7dCE9PWk7Kyt0KW9bdF09ZVtuKytdfSxmdW5jdGlvbiB0KGUsbil7Y29uc3Qgbz10aGlzLnJlc29sdmVkUHJvcGVydHk7Zm9yKGxldCB0PTAsaT1vLmxlbmd0aDt0IT09aTsrK3Qpb1t0XT1lW24rK107dGhpcy50YXJnZXRPYmplY3QubmVlZHNVcGRhdGU9ITB9LGZ1bmN0aW9uIHQoZSxuKXtjb25zdCBvPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eTtmb3IobGV0IHQ9MCxpPW8ubGVuZ3RoO3QhPT1pOysrdClvW3RdPWVbbisrXTt0aGlzLnRhcmdldE9iamVjdC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSEwfV0sW2Z1bmN0aW9uIHQoZSxuKXt0aGlzLnJlc29sdmVkUHJvcGVydHlbdGhpcy5wcm9wZXJ0eUluZGV4XT1lW25dfSxmdW5jdGlvbiB0KGUsbil7dGhpcy5yZXNvbHZlZFByb3BlcnR5W3RoaXMucHJvcGVydHlJbmRleF09ZVtuXSx0aGlzLnRhcmdldE9iamVjdC5uZWVkc1VwZGF0ZT0hMH0sZnVuY3Rpb24gdChlLG4pe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eVt0aGlzLnByb3BlcnR5SW5kZXhdPWVbbl0sdGhpcy50YXJnZXRPYmplY3QubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH1dLFtmdW5jdGlvbiB0KGUsbil7dGhpcy5yZXNvbHZlZFByb3BlcnR5LmZyb21BcnJheShlLG4pfSxmdW5jdGlvbiB0KGUsbil7dGhpcy5yZXNvbHZlZFByb3BlcnR5LmZyb21BcnJheShlLG4pLHRoaXMudGFyZ2V0T2JqZWN0Lm5lZWRzVXBkYXRlPSEwfSxmdW5jdGlvbiB0KGUsbil7dGhpcy5yZXNvbHZlZFByb3BlcnR5LmZyb21BcnJheShlLG4pLHRoaXMudGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9XV0sZ2V0VmFsdWU6ZnVuY3Rpb24gdChlLG4pe3RoaXMuYmluZCgpLHRoaXMuZ2V0VmFsdWUoZSxuKX0sc2V0VmFsdWU6ZnVuY3Rpb24gdChlLG4pe3RoaXMuYmluZCgpLHRoaXMuc2V0VmFsdWUoZSxuKX0sYmluZDpmdW5jdGlvbigpe2xldCB0PXRoaXMubm9kZTtjb25zdCBlPXRoaXMucGFyc2VkUGF0aCxuPWUub2JqZWN0TmFtZSxvPWUucHJvcGVydHlOYW1lO2xldCBpPWUucHJvcGVydHlJbmRleDtpZih0fHwodD1ndXQuZmluZE5vZGUodGhpcy5yb290Tm9kZSxlLm5vZGVOYW1lKXx8dGhpcy5yb290Tm9kZSx0aGlzLm5vZGU9dCksdGhpcy5nZXRWYWx1ZT10aGlzLl9nZXRWYWx1ZV91bmF2YWlsYWJsZSx0aGlzLnNldFZhbHVlPXRoaXMuX3NldFZhbHVlX3VuYXZhaWxhYmxlLCF0KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogVHJ5aW5nIHRvIHVwZGF0ZSBub2RlIGZvciB0cmFjazogIit0aGlzLnBhdGgrIiBidXQgaXQgd2Fzbid0IGZvdW5kLiIpO2lmKG4pe2xldCBvPWUub2JqZWN0SW5kZXg7c3dpdGNoKG4pe2Nhc2UibWF0ZXJpYWxzIjppZighdC5tYXRlcmlhbClyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtYXRlcmlhbCBhcyBub2RlIGRvZXMgbm90IGhhdmUgYSBtYXRlcmlhbC4iLHRoaXMpO2lmKCF0Lm1hdGVyaWFsLm1hdGVyaWFscylyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtYXRlcmlhbC5tYXRlcmlhbHMgYXMgbm9kZS5tYXRlcmlhbCBkb2VzIG5vdCBoYXZlIGEgbWF0ZXJpYWxzIGFycmF5LiIsdGhpcyk7dD10Lm1hdGVyaWFsLm1hdGVyaWFsczticmVhaztjYXNlImJvbmVzIjppZighdC5za2VsZXRvbilyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBib25lcyBhcyBub2RlIGRvZXMgbm90IGhhdmUgYSBza2VsZXRvbi4iLHRoaXMpO3Q9dC5za2VsZXRvbi5ib25lcztmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKylpZih0W2VdLm5hbWU9PT1vKXtvPWU7YnJlYWt9YnJlYWs7ZGVmYXVsdDppZih2b2lkIDA9PT10W25dKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG9iamVjdE5hbWUgb2Ygbm9kZSB1bmRlZmluZWQuIix0aGlzKTt0PXRbbl19aWYodm9pZCAwIT09byl7aWYodm9pZCAwPT09dFtvXSlyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IFRyeWluZyB0byBiaW5kIHRvIG9iamVjdEluZGV4IG9mIG9iamVjdE5hbWUsIGJ1dCBpcyB1bmRlZmluZWQuIix0aGlzLHQpO3Q9dFtvXX19Y29uc3QgYT10W29dO2lmKHZvaWQgMD09PWEpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBUcnlpbmcgdG8gdXBkYXRlIHByb3BlcnR5IGZvciB0cmFjazogIitlLm5vZGVOYW1lKyIuIitvKyIgYnV0IGl0IHdhc24ndCBmb3VuZC4iLHQpO2xldCByPXRoaXMuVmVyc2lvbmluZy5Ob25lO3RoaXMudGFyZ2V0T2JqZWN0PXQsdm9pZCAwIT09dC5uZWVkc1VwZGF0ZT9yPXRoaXMuVmVyc2lvbmluZy5OZWVkc1VwZGF0ZTp2b2lkIDAhPT10Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGUmJihyPXRoaXMuVmVyc2lvbmluZy5NYXRyaXhXb3JsZE5lZWRzVXBkYXRlKTtsZXQgcz10aGlzLkJpbmRpbmdUeXBlLkRpcmVjdDtpZih2b2lkIDAhPT1pKXtpZigibW9ycGhUYXJnZXRJbmZsdWVuY2VzIj09PW8pe2lmKCF0Lmdlb21ldHJ5KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG1vcnBoVGFyZ2V0SW5mbHVlbmNlcyBiZWNhdXNlIG5vZGUgZG9lcyBub3QgaGF2ZSBhIGdlb21ldHJ5LiIsdGhpcyk7aWYoIXQuZ2VvbWV0cnkuaXNCdWZmZXJHZW9tZXRyeSlyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtb3JwaFRhcmdldEluZmx1ZW5jZXMgb24gVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIsdGhpcyk7aWYoIXQuZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG1vcnBoVGFyZ2V0SW5mbHVlbmNlcyBiZWNhdXNlIG5vZGUgZG9lcyBub3QgaGF2ZSBhIGdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy4iLHRoaXMpO3ZvaWQgMCE9PXQubW9ycGhUYXJnZXREaWN0aW9uYXJ5W2ldJiYoaT10Lm1vcnBoVGFyZ2V0RGljdGlvbmFyeVtpXSl9cz10aGlzLkJpbmRpbmdUeXBlLkFycmF5RWxlbWVudCx0aGlzLnJlc29sdmVkUHJvcGVydHk9YSx0aGlzLnByb3BlcnR5SW5kZXg9aX1lbHNlIHZvaWQgMCE9PWEuZnJvbUFycmF5JiZ2b2lkIDAhPT1hLnRvQXJyYXk/KHM9dGhpcy5CaW5kaW5nVHlwZS5IYXNGcm9tVG9BcnJheSx0aGlzLnJlc29sdmVkUHJvcGVydHk9YSk6QXJyYXkuaXNBcnJheShhKT8ocz10aGlzLkJpbmRpbmdUeXBlLkVudGlyZUFycmF5LHRoaXMucmVzb2x2ZWRQcm9wZXJ0eT1hKTp0aGlzLnByb3BlcnR5TmFtZT1vO3RoaXMuZ2V0VmFsdWU9dGhpcy5HZXR0ZXJCeUJpbmRpbmdUeXBlW3NdLHRoaXMuc2V0VmFsdWU9dGhpcy5TZXR0ZXJCeUJpbmRpbmdUeXBlQW5kVmVyc2lvbmluZ1tzXVtyXX0sdW5iaW5kOmZ1bmN0aW9uKCl7dGhpcy5ub2RlPW51bGwsdGhpcy5nZXRWYWx1ZT10aGlzLl9nZXRWYWx1ZV91bmJvdW5kLHRoaXMuc2V0VmFsdWU9dGhpcy5fc2V0VmFsdWVfdW5ib3VuZH19KSxPYmplY3QuYXNzaWduKGd1dC5wcm90b3R5cGUse19nZXRWYWx1ZV91bmJvdW5kOmd1dC5wcm90b3R5cGUuZ2V0VmFsdWUsX3NldFZhbHVlX3VuYm91bmQ6Z3V0LnByb3RvdHlwZS5zZXRWYWx1ZX0pLE9iamVjdC5hc3NpZ24oZnVuY3Rpb24gaHV0KCl7dGhpcy51dWlkPWppdC5nZW5lcmF0ZVVVSUQoKSx0aGlzLl9vYmplY3RzPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyksdGhpcy5uQ2FjaGVkT2JqZWN0c189MDtjb25zdCB0PXt9O3RoaXMuX2luZGljZXNCeVVVSUQ9dDtmb3IobGV0IGU9MCxuPWFyZ3VtZW50cy5sZW5ndGg7ZSE9PW47KytlKXRbYXJndW1lbnRzW2VdLnV1aWRdPWU7dGhpcy5fcGF0aHM9W10sdGhpcy5fcGFyc2VkUGF0aHM9W10sdGhpcy5fYmluZGluZ3M9W10sdGhpcy5fYmluZGluZ3NJbmRpY2VzQnlQYXRoPXt9O2NvbnN0IGU9dGhpczt0aGlzLnN0YXRzPXtvYmplY3RzOntnZXQgdG90YWwoKXtyZXR1cm4gZS5fb2JqZWN0cy5sZW5ndGh9LGdldCBpblVzZSgpe3JldHVybiB0aGlzLnRvdGFsLWUubkNhY2hlZE9iamVjdHNffX0sZ2V0IGJpbmRpbmdzUGVyT2JqZWN0KCl7cmV0dXJuIGUuX2JpbmRpbmdzLmxlbmd0aH19fS5wcm90b3R5cGUse2lzQW5pbWF0aW9uT2JqZWN0R3JvdXA6ITAsYWRkOmZ1bmN0aW9uKCl7Y29uc3QgdD10aGlzLl9vYmplY3RzLGU9dGhpcy5faW5kaWNlc0J5VVVJRCxuPXRoaXMuX3BhdGhzLG89dGhpcy5fcGFyc2VkUGF0aHMsaT10aGlzLl9iaW5kaW5ncyxhPWkubGVuZ3RoO2xldCByLHM9dC5sZW5ndGgsbD10aGlzLm5DYWNoZWRPYmplY3RzXztmb3IobGV0IGM9MCxkPWFyZ3VtZW50cy5sZW5ndGg7YyE9PWQ7KytjKXtjb25zdCBkPWFyZ3VtZW50c1tjXSxwPWQudXVpZDtsZXQgbT1lW3BdO2lmKHZvaWQgMD09PW0pe209cysrLGVbcF09bSx0LnB1c2goZCk7Zm9yKGxldCB0PTAsZT1hO3QhPT1lOysrdClpW3RdLnB1c2gobmV3IGd1dChkLG5bdF0sb1t0XSkpfWVsc2UgaWYobTxsKXtyPXRbbV07Y29uc3Qgcz0tLWwsYz10W3NdO2VbYy51dWlkXT1tLHRbbV09YyxlW3BdPXMsdFtzXT1kO2ZvcihsZXQgdD0wLGU9YTt0IT09ZTsrK3Qpe2NvbnN0IGU9aVt0XTtsZXQgYT1lW21dO2VbbV09ZVtzXSx2b2lkIDA9PT1hJiYoYT1uZXcgZ3V0KGQsblt0XSxvW3RdKSksZVtzXT1hfX1lbHNlIHRbbV0hPT1yJiZjb25zb2xlLmVycm9yKCJUSFJFRS5BbmltYXRpb25PYmplY3RHcm91cDogRGlmZmVyZW50IG9iamVjdHMgd2l0aCB0aGUgc2FtZSBVVUlEIGRldGVjdGVkLiBDbGVhbiB0aGUgY2FjaGVzIG9yIHJlY3JlYXRlIHlvdXIgaW5mcmFzdHJ1Y3R1cmUgd2hlbiByZWxvYWRpbmcgc2NlbmVzLiIpfXRoaXMubkNhY2hlZE9iamVjdHNfPWx9LHJlbW92ZTpmdW5jdGlvbigpe2NvbnN0IHQ9dGhpcy5fb2JqZWN0cyxlPXRoaXMuX2luZGljZXNCeVVVSUQsbj10aGlzLl9iaW5kaW5ncyxvPW4ubGVuZ3RoO2xldCBpPXRoaXMubkNhY2hlZE9iamVjdHNfO2ZvcihsZXQgYT0wLHI9YXJndW1lbnRzLmxlbmd0aDthIT09cjsrK2Epe2NvbnN0IHI9YXJndW1lbnRzW2FdLHM9ci51dWlkLGw9ZVtzXTtpZih2b2lkIDAhPT1sJiZsPj1pKXtjb25zdCBhPWkrKyxjPXRbYV07ZVtjLnV1aWRdPWwsdFtsXT1jLGVbc109YSx0W2FdPXI7Zm9yKGxldCB0PTAsZT1vO3QhPT1lOysrdCl7Y29uc3QgZT1uW3RdLG89ZVtsXTtlW2xdPWVbYV0sZVthXT1vfX19dGhpcy5uQ2FjaGVkT2JqZWN0c189aX0sdW5jYWNoZTpmdW5jdGlvbigpe2NvbnN0IHQ9dGhpcy5fb2JqZWN0cyxlPXRoaXMuX2luZGljZXNCeVVVSUQsbj10aGlzLl9iaW5kaW5ncyxvPW4ubGVuZ3RoO2xldCBpPXRoaXMubkNhY2hlZE9iamVjdHNfLGE9dC5sZW5ndGg7Zm9yKGxldCByPTAscz1hcmd1bWVudHMubGVuZ3RoO3IhPT1zOysrcil7Y29uc3Qgcz1hcmd1bWVudHNbcl0udXVpZCxsPWVbc107aWYodm9pZCAwIT09bClpZihkZWxldGUgZVtzXSxsPGkpe2NvbnN0IHI9LS1pLHM9dFtyXSxjPS0tYSxkPXRbY107ZVtzLnV1aWRdPWwsdFtsXT1zLGVbZC51dWlkXT1yLHRbcl09ZCx0LnBvcCgpO2ZvcihsZXQgdD0wLGU9bzt0IT09ZTsrK3Qpe2NvbnN0IGU9blt0XSxvPWVbY107ZVtsXT1lW3JdLGVbcl09byxlLnBvcCgpfX1lbHNle2NvbnN0IGk9LS1hLHI9dFtpXTtpPjAmJihlW3IudXVpZF09bCksdFtsXT1yLHQucG9wKCk7Zm9yKGxldCB0PTAsZT1vO3QhPT1lOysrdCl7Y29uc3QgZT1uW3RdO2VbbF09ZVtpXSxlLnBvcCgpfX19dGhpcy5uQ2FjaGVkT2JqZWN0c189aX0sc3Vic2NyaWJlXzpmdW5jdGlvbih0LGUpe2NvbnN0IG49dGhpcy5fYmluZGluZ3NJbmRpY2VzQnlQYXRoO2xldCBvPW5bdF07Y29uc3QgaT10aGlzLl9iaW5kaW5ncztpZih2b2lkIDAhPT1vKXJldHVybiBpW29dO2NvbnN0IGE9dGhpcy5fcGF0aHMscj10aGlzLl9wYXJzZWRQYXRocyxzPXRoaXMuX29iamVjdHMsbD10aGlzLm5DYWNoZWRPYmplY3RzXyxjPW5ldyBBcnJheShzLmxlbmd0aCk7bz1pLmxlbmd0aCxuW3RdPW8sYS5wdXNoKHQpLHIucHVzaChlKSxpLnB1c2goYyk7Zm9yKGxldCBuPWwsbz1zLmxlbmd0aDtuIT09bzsrK24pY1tuXT1uZXcgZ3V0KHNbbl0sdCxlKTtyZXR1cm4gY30sdW5zdWJzY3JpYmVfOmZ1bmN0aW9uKHQpe2NvbnN0IGU9dGhpcy5fYmluZGluZ3NJbmRpY2VzQnlQYXRoLG49ZVt0XTtpZih2b2lkIDAhPT1uKXtjb25zdCBvPXRoaXMuX3BhdGhzLGk9dGhpcy5fcGFyc2VkUGF0aHMsYT10aGlzLl9iaW5kaW5ncyxyPWEubGVuZ3RoLTEscz1hW3JdO2VbdFtyXV09bixhW25dPXMsYS5wb3AoKSxpW25dPWlbcl0saS5wb3AoKSxvW25dPW9bcl0sby5wb3AoKX19fSk7Y2xhc3MgYnV0e2NvbnN0cnVjdG9yKHQsZSxuPW51bGwsbz1lLmJsZW5kTW9kZSl7dGhpcy5fbWl4ZXI9dCx0aGlzLl9jbGlwPWUsdGhpcy5fbG9jYWxSb290PW4sdGhpcy5ibGVuZE1vZGU9bztjb25zdCBpPWUudHJhY2tzLGE9aS5sZW5ndGgscj1uZXcgQXJyYXkoYSkscz17ZW5kaW5nU3RhcnQ6QWl0LGVuZGluZ0VuZDpBaXR9O2ZvcihsZXQgdD0wO3QhPT1hOysrdCl7Y29uc3QgZT1pW3RdLmNyZWF0ZUludGVycG9sYW50KG51bGwpO3JbdF09ZSxlLnNldHRpbmdzPXN9dGhpcy5faW50ZXJwb2xhbnRTZXR0aW5ncz1zLHRoaXMuX2ludGVycG9sYW50cz1yLHRoaXMuX3Byb3BlcnR5QmluZGluZ3M9bmV3IEFycmF5KGEpLHRoaXMuX2NhY2hlSW5kZXg9bnVsbCx0aGlzLl9ieUNsaXBDYWNoZUluZGV4PW51bGwsdGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ9bnVsbCx0aGlzLl93ZWlnaHRJbnRlcnBvbGFudD1udWxsLHRoaXMubG9vcD0yMjAxLHRoaXMuX2xvb3BDb3VudD0tMSx0aGlzLl9zdGFydFRpbWU9bnVsbCx0aGlzLnRpbWU9MCx0aGlzLnRpbWVTY2FsZT0xLHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZT0xLHRoaXMud2VpZ2h0PTEsdGhpcy5fZWZmZWN0aXZlV2VpZ2h0PTEsdGhpcy5yZXBldGl0aW9ucz0xLzAsdGhpcy5wYXVzZWQ9ITEsdGhpcy5lbmFibGVkPSEwLHRoaXMuY2xhbXBXaGVuRmluaXNoZWQ9ITEsdGhpcy56ZXJvU2xvcGVBdFN0YXJ0PSEwLHRoaXMuemVyb1Nsb3BlQXRFbmQ9ITB9cGxheSgpe3JldHVybiB0aGlzLl9taXhlci5fYWN0aXZhdGVBY3Rpb24odGhpcyksdGhpc31zdG9wKCl7cmV0dXJuIHRoaXMuX21peGVyLl9kZWFjdGl2YXRlQWN0aW9uKHRoaXMpLHRoaXMucmVzZXQoKX1yZXNldCgpe3JldHVybiB0aGlzLnBhdXNlZD0hMSx0aGlzLmVuYWJsZWQ9ITAsdGhpcy50aW1lPTAsdGhpcy5fbG9vcENvdW50PS0xLHRoaXMuX3N0YXJ0VGltZT1udWxsLHRoaXMuc3RvcEZhZGluZygpLnN0b3BXYXJwaW5nKCl9aXNSdW5uaW5nKCl7cmV0dXJuIHRoaXMuZW5hYmxlZCYmIXRoaXMucGF1c2VkJiYwIT09dGhpcy50aW1lU2NhbGUmJm51bGw9PT10aGlzLl9zdGFydFRpbWUmJnRoaXMuX21peGVyLl9pc0FjdGl2ZUFjdGlvbih0aGlzKX1pc1NjaGVkdWxlZCgpe3JldHVybiB0aGlzLl9taXhlci5faXNBY3RpdmVBY3Rpb24odGhpcyl9c3RhcnRBdCh0KXtyZXR1cm4gdGhpcy5fc3RhcnRUaW1lPXQsdGhpc31zZXRMb29wKHQsZSl7cmV0dXJuIHRoaXMubG9vcD10LHRoaXMucmVwZXRpdGlvbnM9ZSx0aGlzfXNldEVmZmVjdGl2ZVdlaWdodCh0KXtyZXR1cm4gdGhpcy53ZWlnaHQ9dCx0aGlzLl9lZmZlY3RpdmVXZWlnaHQ9dGhpcy5lbmFibGVkP3Q6MCx0aGlzLnN0b3BGYWRpbmcoKX1nZXRFZmZlY3RpdmVXZWlnaHQoKXtyZXR1cm4gdGhpcy5fZWZmZWN0aXZlV2VpZ2h0fWZhZGVJbih0KXtyZXR1cm4gdGhpcy5fc2NoZWR1bGVGYWRpbmcodCwwLDEpfWZhZGVPdXQodCl7cmV0dXJuIHRoaXMuX3NjaGVkdWxlRmFkaW5nKHQsMSwwKX1jcm9zc0ZhZGVGcm9tKHQsZSxuKXtpZih0LmZhZGVPdXQoZSksdGhpcy5mYWRlSW4oZSksbil7Y29uc3Qgbj10aGlzLl9jbGlwLmR1cmF0aW9uLG89dC5fY2xpcC5kdXJhdGlvbixpPW4vbzt0LndhcnAoMSxvL24sZSksdGhpcy53YXJwKGksMSxlKX1yZXR1cm4gdGhpc31jcm9zc0ZhZGVUbyh0LGUsbil7cmV0dXJuIHQuY3Jvc3NGYWRlRnJvbSh0aGlzLGUsbil9c3RvcEZhZGluZygpe2NvbnN0IHQ9dGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ7cmV0dXJuIG51bGwhPT10JiYodGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ9bnVsbCx0aGlzLl9taXhlci5fdGFrZUJhY2tDb250cm9sSW50ZXJwb2xhbnQodCkpLHRoaXN9c2V0RWZmZWN0aXZlVGltZVNjYWxlKHQpe3JldHVybiB0aGlzLnRpbWVTY2FsZT10LHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZT10aGlzLnBhdXNlZD8wOnQsdGhpcy5zdG9wV2FycGluZygpfWdldEVmZmVjdGl2ZVRpbWVTY2FsZSgpe3JldHVybiB0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGV9c2V0RHVyYXRpb24odCl7cmV0dXJuIHRoaXMudGltZVNjYWxlPXRoaXMuX2NsaXAuZHVyYXRpb24vdCx0aGlzLnN0b3BXYXJwaW5nKCl9c3luY1dpdGgodCl7cmV0dXJuIHRoaXMudGltZT10LnRpbWUsdGhpcy50aW1lU2NhbGU9dC50aW1lU2NhbGUsdGhpcy5zdG9wV2FycGluZygpfWhhbHQodCl7cmV0dXJuIHRoaXMud2FycCh0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGUsMCx0KX13YXJwKHQsZSxuKXtjb25zdCBvPXRoaXMuX21peGVyLGk9by50aW1lLGE9dGhpcy50aW1lU2NhbGU7bGV0IHI9dGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ7bnVsbD09PXImJihyPW8uX2xlbmRDb250cm9sSW50ZXJwb2xhbnQoKSx0aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudD1yKTtjb25zdCBzPXIucGFyYW1ldGVyUG9zaXRpb25zLGw9ci5zYW1wbGVWYWx1ZXM7cmV0dXJuIHNbMF09aSxzWzFdPWkrbixsWzBdPXQvYSxsWzFdPWUvYSx0aGlzfXN0b3BXYXJwaW5nKCl7Y29uc3QgdD10aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudDtyZXR1cm4gbnVsbCE9PXQmJih0aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudD1udWxsLHRoaXMuX21peGVyLl90YWtlQmFja0NvbnRyb2xJbnRlcnBvbGFudCh0KSksdGhpc31nZXRNaXhlcigpe3JldHVybiB0aGlzLl9taXhlcn1nZXRDbGlwKCl7cmV0dXJuIHRoaXMuX2NsaXB9Z2V0Um9vdCgpe3JldHVybiB0aGlzLl9sb2NhbFJvb3R8fHRoaXMuX21peGVyLl9yb290fV91cGRhdGUodCxlLG4sbyl7aWYoIXRoaXMuZW5hYmxlZClyZXR1cm4gdm9pZCB0aGlzLl91cGRhdGVXZWlnaHQodCk7Y29uc3QgaT10aGlzLl9zdGFydFRpbWU7aWYobnVsbCE9PWkpe2NvbnN0IG89KHQtaSkqbjtpZihvPDB8fDA9PT1uKXJldHVybjt0aGlzLl9zdGFydFRpbWU9bnVsbCxlPW4qb31lKj10aGlzLl91cGRhdGVUaW1lU2NhbGUodCk7Y29uc3QgYT10aGlzLl91cGRhdGVUaW1lKGUpLHI9dGhpcy5fdXBkYXRlV2VpZ2h0KHQpO2lmKHI+MCl7Y29uc3QgdD10aGlzLl9pbnRlcnBvbGFudHMsZT10aGlzLl9wcm9wZXJ0eUJpbmRpbmdzO3N3aXRjaCh0aGlzLmJsZW5kTW9kZSl7Y2FzZSAyNTAxOmZvcihsZXQgbj0wLG89dC5sZW5ndGg7biE9PW87KytuKXRbbl0uZXZhbHVhdGUoYSksZVtuXS5hY2N1bXVsYXRlQWRkaXRpdmUocik7YnJlYWs7Y2FzZSAyNTAwOmRlZmF1bHQ6Zm9yKGxldCBuPTAsaT10Lmxlbmd0aDtuIT09aTsrK24pdFtuXS5ldmFsdWF0ZShhKSxlW25dLmFjY3VtdWxhdGUobyxyKX19fV91cGRhdGVXZWlnaHQodCl7bGV0IGU9MDtpZih0aGlzLmVuYWJsZWQpe2U9dGhpcy53ZWlnaHQ7Y29uc3Qgbj10aGlzLl93ZWlnaHRJbnRlcnBvbGFudDtpZihudWxsIT09bil7Y29uc3Qgbz1uLmV2YWx1YXRlKHQpWzBdO2UqPW8sdD5uLnBhcmFtZXRlclBvc2l0aW9uc1sxXSYmKHRoaXMuc3RvcEZhZGluZygpLDA9PT1vJiYodGhpcy5lbmFibGVkPSExKSl9fXJldHVybiB0aGlzLl9lZmZlY3RpdmVXZWlnaHQ9ZSxlfV91cGRhdGVUaW1lU2NhbGUodCl7bGV0IGU9MDtpZighdGhpcy5wYXVzZWQpe2U9dGhpcy50aW1lU2NhbGU7Y29uc3Qgbj10aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudDtudWxsIT09biYmKGUqPW4uZXZhbHVhdGUodClbMF0sdD5uLnBhcmFtZXRlclBvc2l0aW9uc1sxXSYmKHRoaXMuc3RvcFdhcnBpbmcoKSwwPT09ZT90aGlzLnBhdXNlZD0hMDp0aGlzLnRpbWVTY2FsZT1lKSl9cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZT1lLGV9X3VwZGF0ZVRpbWUodCl7Y29uc3QgZT10aGlzLl9jbGlwLmR1cmF0aW9uLG49dGhpcy5sb29wO2xldCBvPXRoaXMudGltZSt0LGk9dGhpcy5fbG9vcENvdW50O2NvbnN0IGE9MjIwMj09PW47aWYoMD09PXQpcmV0dXJuLTE9PT1pP286YSYmMT09KDEmaSk/ZS1vOm87aWYoMjIwMD09PW4pey0xPT09aSYmKHRoaXMuX2xvb3BDb3VudD0wLHRoaXMuX3NldEVuZGluZ3MoITAsITAsITEpKTt0OntpZihvPj1lKW89ZTtlbHNle2lmKCEobzwwKSl7dGhpcy50aW1lPW87YnJlYWsgdH1vPTB9dGhpcy5jbGFtcFdoZW5GaW5pc2hlZD90aGlzLnBhdXNlZD0hMDp0aGlzLmVuYWJsZWQ9ITEsdGhpcy50aW1lPW8sdGhpcy5fbWl4ZXIuZGlzcGF0Y2hFdmVudCh7dHlwZToiZmluaXNoZWQiLGFjdGlvbjp0aGlzLGRpcmVjdGlvbjp0PDA/LTE6MX0pfX1lbHNle2lmKC0xPT09aSYmKHQ+PTA/KGk9MCx0aGlzLl9zZXRFbmRpbmdzKCEwLDA9PT10aGlzLnJlcGV0aXRpb25zLGEpKTp0aGlzLl9zZXRFbmRpbmdzKDA9PT10aGlzLnJlcGV0aXRpb25zLCEwLGEpKSxvPj1lfHxvPDApe2NvbnN0IG49TWF0aC5mbG9vcihvL2UpO28tPWUqbixpKz1NYXRoLmFicyhuKTtjb25zdCByPXRoaXMucmVwZXRpdGlvbnMtaTtpZihyPD0wKXRoaXMuY2xhbXBXaGVuRmluaXNoZWQ/dGhpcy5wYXVzZWQ9ITA6dGhpcy5lbmFibGVkPSExLG89dD4wP2U6MCx0aGlzLnRpbWU9byx0aGlzLl9taXhlci5kaXNwYXRjaEV2ZW50KHt0eXBlOiJmaW5pc2hlZCIsYWN0aW9uOnRoaXMsZGlyZWN0aW9uOnQ+MD8xOi0xfSk7ZWxzZXtpZigxPT09cil7Y29uc3QgZT10PDA7dGhpcy5fc2V0RW5kaW5ncyhlLCFlLGEpfWVsc2UgdGhpcy5fc2V0RW5kaW5ncyghMSwhMSxhKTt0aGlzLl9sb29wQ291bnQ9aSx0aGlzLnRpbWU9byx0aGlzLl9taXhlci5kaXNwYXRjaEV2ZW50KHt0eXBlOiJsb29wIixhY3Rpb246dGhpcyxsb29wRGVsdGE6bn0pfX1lbHNlIHRoaXMudGltZT1vO2lmKGEmJjE9PSgxJmkpKXJldHVybiBlLW99cmV0dXJuIG99X3NldEVuZGluZ3ModCxlLG4pe2NvbnN0IG89dGhpcy5faW50ZXJwb2xhbnRTZXR0aW5ncztuPyhvLmVuZGluZ1N0YXJ0PVJpdCxvLmVuZGluZ0VuZD1SaXQpOihvLmVuZGluZ1N0YXJ0PXQ/dGhpcy56ZXJvU2xvcGVBdFN0YXJ0P1JpdDpBaXQ6VGl0LG8uZW5kaW5nRW5kPWU/dGhpcy56ZXJvU2xvcGVBdEVuZD9SaXQ6QWl0OlRpdCl9X3NjaGVkdWxlRmFkaW5nKHQsZSxuKXtjb25zdCBvPXRoaXMuX21peGVyLGk9by50aW1lO2xldCBhPXRoaXMuX3dlaWdodEludGVycG9sYW50O251bGw9PT1hJiYoYT1vLl9sZW5kQ29udHJvbEludGVycG9sYW50KCksdGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ9YSk7Y29uc3Qgcj1hLnBhcmFtZXRlclBvc2l0aW9ucyxzPWEuc2FtcGxlVmFsdWVzO3JldHVybiByWzBdPWksc1swXT1lLHJbMV09aSt0LHNbMV09bix0aGlzfX1mdW5jdGlvbiB5dXQodCl7dGhpcy5fcm9vdD10LHRoaXMuX2luaXRNZW1vcnlNYW5hZ2VyKCksdGhpcy5fYWNjdUluZGV4PTAsdGhpcy50aW1lPTAsdGhpcy50aW1lU2NhbGU9MX15dXQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShMaXQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6eXV0LF9iaW5kQWN0aW9uOmZ1bmN0aW9uKHQsZSl7Y29uc3Qgbj10Ll9sb2NhbFJvb3R8fHRoaXMuX3Jvb3Qsbz10Ll9jbGlwLnRyYWNrcyxpPW8ubGVuZ3RoLGE9dC5fcHJvcGVydHlCaW5kaW5ncyxyPXQuX2ludGVycG9sYW50cyxzPW4udXVpZCxsPXRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZTtsZXQgYz1sW3NdO3ZvaWQgMD09PWMmJihjPXt9LGxbc109Yyk7Zm9yKGxldCB0PTA7dCE9PWk7Kyt0KXtjb25zdCBpPW9bdF0sbD1pLm5hbWU7bGV0IGQ9Y1tsXTtpZih2b2lkIDAhPT1kKWFbdF09ZDtlbHNle2lmKGQ9YVt0XSx2b2lkIDAhPT1kKXtudWxsPT09ZC5fY2FjaGVJbmRleCYmKCsrZC5yZWZlcmVuY2VDb3VudCx0aGlzLl9hZGRJbmFjdGl2ZUJpbmRpbmcoZCxzLGwpKTtjb250aW51ZX1kPW5ldyBvdXQoZ3V0LmNyZWF0ZShuLGwsZSYmZS5fcHJvcGVydHlCaW5kaW5nc1t0XS5iaW5kaW5nLnBhcnNlZFBhdGgpLGkuVmFsdWVUeXBlTmFtZSxpLmdldFZhbHVlU2l6ZSgpKSwrK2QucmVmZXJlbmNlQ291bnQsdGhpcy5fYWRkSW5hY3RpdmVCaW5kaW5nKGQscyxsKSxhW3RdPWR9clt0XS5yZXN1bHRCdWZmZXI9ZC5idWZmZXJ9fSxfYWN0aXZhdGVBY3Rpb246ZnVuY3Rpb24odCl7aWYoIXRoaXMuX2lzQWN0aXZlQWN0aW9uKHQpKXtpZihudWxsPT09dC5fY2FjaGVJbmRleCl7Y29uc3QgZT0odC5fbG9jYWxSb290fHx0aGlzLl9yb290KS51dWlkLG49dC5fY2xpcC51dWlkLG89dGhpcy5fYWN0aW9uc0J5Q2xpcFtuXTt0aGlzLl9iaW5kQWN0aW9uKHQsbyYmby5rbm93bkFjdGlvbnNbMF0pLHRoaXMuX2FkZEluYWN0aXZlQWN0aW9uKHQsbixlKX1jb25zdCBlPXQuX3Byb3BlcnR5QmluZGluZ3M7Zm9yKGxldCB0PTAsbj1lLmxlbmd0aDt0IT09bjsrK3Qpe2NvbnN0IG49ZVt0XTswPT1uLnVzZUNvdW50KysmJih0aGlzLl9sZW5kQmluZGluZyhuKSxuLnNhdmVPcmlnaW5hbFN0YXRlKCkpfXRoaXMuX2xlbmRBY3Rpb24odCl9fSxfZGVhY3RpdmF0ZUFjdGlvbjpmdW5jdGlvbih0KXtpZih0aGlzLl9pc0FjdGl2ZUFjdGlvbih0KSl7Y29uc3QgZT10Ll9wcm9wZXJ0eUJpbmRpbmdzO2ZvcihsZXQgdD0wLG49ZS5sZW5ndGg7dCE9PW47Kyt0KXtjb25zdCBuPWVbdF07MD09LS1uLnVzZUNvdW50JiYobi5yZXN0b3JlT3JpZ2luYWxTdGF0ZSgpLHRoaXMuX3Rha2VCYWNrQmluZGluZyhuKSl9dGhpcy5fdGFrZUJhY2tBY3Rpb24odCl9fSxfaW5pdE1lbW9yeU1hbmFnZXI6ZnVuY3Rpb24oKXt0aGlzLl9hY3Rpb25zPVtdLHRoaXMuX25BY3RpdmVBY3Rpb25zPTAsdGhpcy5fYWN0aW9uc0J5Q2xpcD17fSx0aGlzLl9iaW5kaW5ncz1bXSx0aGlzLl9uQWN0aXZlQmluZGluZ3M9MCx0aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWU9e30sdGhpcy5fY29udHJvbEludGVycG9sYW50cz1bXSx0aGlzLl9uQWN0aXZlQ29udHJvbEludGVycG9sYW50cz0wO2NvbnN0IHQ9dGhpczt0aGlzLnN0YXRzPXthY3Rpb25zOntnZXQgdG90YWwoKXtyZXR1cm4gdC5fYWN0aW9ucy5sZW5ndGh9LGdldCBpblVzZSgpe3JldHVybiB0Ll9uQWN0aXZlQWN0aW9uc319LGJpbmRpbmdzOntnZXQgdG90YWwoKXtyZXR1cm4gdC5fYmluZGluZ3MubGVuZ3RofSxnZXQgaW5Vc2UoKXtyZXR1cm4gdC5fbkFjdGl2ZUJpbmRpbmdzfX0sY29udHJvbEludGVycG9sYW50czp7Z2V0IHRvdGFsKCl7cmV0dXJuIHQuX2NvbnRyb2xJbnRlcnBvbGFudHMubGVuZ3RofSxnZXQgaW5Vc2UoKXtyZXR1cm4gdC5fbkFjdGl2ZUNvbnRyb2xJbnRlcnBvbGFudHN9fX19LF9pc0FjdGl2ZUFjdGlvbjpmdW5jdGlvbih0KXtjb25zdCBlPXQuX2NhY2hlSW5kZXg7cmV0dXJuIG51bGwhPT1lJiZlPHRoaXMuX25BY3RpdmVBY3Rpb25zfSxfYWRkSW5hY3RpdmVBY3Rpb246ZnVuY3Rpb24odCxlLG4pe2NvbnN0IG89dGhpcy5fYWN0aW9ucyxpPXRoaXMuX2FjdGlvbnNCeUNsaXA7bGV0IGE9aVtlXTtpZih2b2lkIDA9PT1hKWE9e2tub3duQWN0aW9uczpbdF0sYWN0aW9uQnlSb290Ont9fSx0Ll9ieUNsaXBDYWNoZUluZGV4PTAsaVtlXT1hO2Vsc2V7Y29uc3QgZT1hLmtub3duQWN0aW9uczt0Ll9ieUNsaXBDYWNoZUluZGV4PWUubGVuZ3RoLGUucHVzaCh0KX10Ll9jYWNoZUluZGV4PW8ubGVuZ3RoLG8ucHVzaCh0KSxhLmFjdGlvbkJ5Um9vdFtuXT10fSxfcmVtb3ZlSW5hY3RpdmVBY3Rpb246ZnVuY3Rpb24odCl7Y29uc3QgZT10aGlzLl9hY3Rpb25zLG49ZVtlLmxlbmd0aC0xXSxvPXQuX2NhY2hlSW5kZXg7bi5fY2FjaGVJbmRleD1vLGVbb109bixlLnBvcCgpLHQuX2NhY2hlSW5kZXg9bnVsbDtjb25zdCBpPXQuX2NsaXAudXVpZCxhPXRoaXMuX2FjdGlvbnNCeUNsaXAscj1hW2ldLHM9ci5rbm93bkFjdGlvbnMsbD1zW3MubGVuZ3RoLTFdLGM9dC5fYnlDbGlwQ2FjaGVJbmRleDtsLl9ieUNsaXBDYWNoZUluZGV4PWMsc1tjXT1sLHMucG9wKCksdC5fYnlDbGlwQ2FjaGVJbmRleD1udWxsLGRlbGV0ZSByLmFjdGlvbkJ5Um9vdFsodC5fbG9jYWxSb290fHx0aGlzLl9yb290KS51dWlkXSwwPT09cy5sZW5ndGgmJmRlbGV0ZSBhW2ldLHRoaXMuX3JlbW92ZUluYWN0aXZlQmluZGluZ3NGb3JBY3Rpb24odCl9LF9yZW1vdmVJbmFjdGl2ZUJpbmRpbmdzRm9yQWN0aW9uOmZ1bmN0aW9uKHQpe2NvbnN0IGU9dC5fcHJvcGVydHlCaW5kaW5ncztmb3IobGV0IHQ9MCxuPWUubGVuZ3RoO3QhPT1uOysrdCl7Y29uc3Qgbj1lW3RdOzA9PS0tbi5yZWZlcmVuY2VDb3VudCYmdGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nKG4pfX0sX2xlbmRBY3Rpb246ZnVuY3Rpb24odCl7Y29uc3QgZT10aGlzLl9hY3Rpb25zLG49dC5fY2FjaGVJbmRleCxvPXRoaXMuX25BY3RpdmVBY3Rpb25zKyssaT1lW29dO3QuX2NhY2hlSW5kZXg9byxlW29dPXQsaS5fY2FjaGVJbmRleD1uLGVbbl09aX0sX3Rha2VCYWNrQWN0aW9uOmZ1bmN0aW9uKHQpe2NvbnN0IGU9dGhpcy5fYWN0aW9ucyxuPXQuX2NhY2hlSW5kZXgsbz0tLXRoaXMuX25BY3RpdmVBY3Rpb25zLGk9ZVtvXTt0Ll9jYWNoZUluZGV4PW8sZVtvXT10LGkuX2NhY2hlSW5kZXg9bixlW25dPWl9LF9hZGRJbmFjdGl2ZUJpbmRpbmc6ZnVuY3Rpb24odCxlLG4pe2NvbnN0IG89dGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lLGk9dGhpcy5fYmluZGluZ3M7bGV0IGE9b1tlXTt2b2lkIDA9PT1hJiYoYT17fSxvW2VdPWEpLGFbbl09dCx0Ll9jYWNoZUluZGV4PWkubGVuZ3RoLGkucHVzaCh0KX0sX3JlbW92ZUluYWN0aXZlQmluZGluZzpmdW5jdGlvbih0KXtjb25zdCBlPXRoaXMuX2JpbmRpbmdzLG49dC5iaW5kaW5nLG89bi5yb290Tm9kZS51dWlkLGk9bi5wYXRoLGE9dGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lLHI9YVtvXSxzPWVbZS5sZW5ndGgtMV0sbD10Ll9jYWNoZUluZGV4O3MuX2NhY2hlSW5kZXg9bCxlW2xdPXMsZS5wb3AoKSxkZWxldGUgcltpXSwwPT09T2JqZWN0LmtleXMocikubGVuZ3RoJiZkZWxldGUgYVtvXX0sX2xlbmRCaW5kaW5nOmZ1bmN0aW9uKHQpe2NvbnN0IGU9dGhpcy5fYmluZGluZ3Msbj10Ll9jYWNoZUluZGV4LG89dGhpcy5fbkFjdGl2ZUJpbmRpbmdzKyssaT1lW29dO3QuX2NhY2hlSW5kZXg9byxlW29dPXQsaS5fY2FjaGVJbmRleD1uLGVbbl09aX0sX3Rha2VCYWNrQmluZGluZzpmdW5jdGlvbih0KXtjb25zdCBlPXRoaXMuX2JpbmRpbmdzLG49dC5fY2FjaGVJbmRleCxvPS0tdGhpcy5fbkFjdGl2ZUJpbmRpbmdzLGk9ZVtvXTt0Ll9jYWNoZUluZGV4PW8sZVtvXT10LGkuX2NhY2hlSW5kZXg9bixlW25dPWl9LF9sZW5kQ29udHJvbEludGVycG9sYW50OmZ1bmN0aW9uKCl7Y29uc3QgdD10aGlzLl9jb250cm9sSW50ZXJwb2xhbnRzLGU9dGhpcy5fbkFjdGl2ZUNvbnRyb2xJbnRlcnBvbGFudHMrKztsZXQgbj10W2VdO3JldHVybiB2b2lkIDA9PT1uJiYobj1uZXcgSXB0KG5ldyBGbG9hdDMyQXJyYXkoMiksbmV3IEZsb2F0MzJBcnJheSgyKSwxLHRoaXMuX2NvbnRyb2xJbnRlcnBvbGFudHNSZXN1bHRCdWZmZXIpLG4uX19jYWNoZUluZGV4PWUsdFtlXT1uKSxufSxfdGFrZUJhY2tDb250cm9sSW50ZXJwb2xhbnQ6ZnVuY3Rpb24odCl7Y29uc3QgZT10aGlzLl9jb250cm9sSW50ZXJwb2xhbnRzLG49dC5fX2NhY2hlSW5kZXgsbz0tLXRoaXMuX25BY3RpdmVDb250cm9sSW50ZXJwb2xhbnRzLGk9ZVtvXTt0Ll9fY2FjaGVJbmRleD1vLGVbb109dCxpLl9fY2FjaGVJbmRleD1uLGVbbl09aX0sX2NvbnRyb2xJbnRlcnBvbGFudHNSZXN1bHRCdWZmZXI6bmV3IEZsb2F0MzJBcnJheSgxKSxjbGlwQWN0aW9uOmZ1bmN0aW9uKHQsZSxuKXtjb25zdCBvPWV8fHRoaXMuX3Jvb3QsaT1vLnV1aWQ7bGV0IGE9InN0cmluZyI9PXR5cGVvZiB0P0dwdC5maW5kQnlOYW1lKG8sdCk6dDtjb25zdCByPW51bGwhPT1hP2EudXVpZDp0LHM9dGhpcy5fYWN0aW9uc0J5Q2xpcFtyXTtsZXQgbD1udWxsO2lmKHZvaWQgMD09PW4mJihuPW51bGwhPT1hP2EuYmxlbmRNb2RlOjI1MDApLHZvaWQgMCE9PXMpe2NvbnN0IHQ9cy5hY3Rpb25CeVJvb3RbaV07aWYodm9pZCAwIT09dCYmdC5ibGVuZE1vZGU9PT1uKXJldHVybiB0O2w9cy5rbm93bkFjdGlvbnNbMF0sbnVsbD09PWEmJihhPWwuX2NsaXApfWlmKG51bGw9PT1hKXJldHVybiBudWxsO2NvbnN0IGM9bmV3IGJ1dCh0aGlzLGEsZSxuKTtyZXR1cm4gdGhpcy5fYmluZEFjdGlvbihjLGwpLHRoaXMuX2FkZEluYWN0aXZlQWN0aW9uKGMscixpKSxjfSxleGlzdGluZ0FjdGlvbjpmdW5jdGlvbih0LGUpe2NvbnN0IG49ZXx8dGhpcy5fcm9vdCxvPW4udXVpZCxpPSJzdHJpbmciPT10eXBlb2YgdD9HcHQuZmluZEJ5TmFtZShuLHQpOnQsYT10aGlzLl9hY3Rpb25zQnlDbGlwW2k/aS51dWlkOnRdO3JldHVybiB2b2lkIDAhPT1hJiZhLmFjdGlvbkJ5Um9vdFtvXXx8bnVsbH0sc3RvcEFsbEFjdGlvbjpmdW5jdGlvbigpe2NvbnN0IHQ9dGhpcy5fYWN0aW9ucztmb3IobGV0IGU9dGhpcy5fbkFjdGl2ZUFjdGlvbnMtMTtlPj0wOy0tZSl0W2VdLnN0b3AoKTtyZXR1cm4gdGhpc30sdXBkYXRlOmZ1bmN0aW9uKHQpe2NvbnN0IGU9dGhpcy5fYWN0aW9ucyxuPXRoaXMuX25BY3RpdmVBY3Rpb25zLG89dGhpcy50aW1lKz10Kj10aGlzLnRpbWVTY2FsZSxpPU1hdGguc2lnbih0KSxhPXRoaXMuX2FjY3VJbmRleF49MTtmb3IobGV0IHI9MDtyIT09bjsrK3IpZVtyXS5fdXBkYXRlKG8sdCxpLGEpO2NvbnN0IHI9dGhpcy5fYmluZGluZ3Mscz10aGlzLl9uQWN0aXZlQmluZGluZ3M7Zm9yKGxldCB0PTA7dCE9PXM7Kyt0KXJbdF0uYXBwbHkoYSk7cmV0dXJuIHRoaXN9LHNldFRpbWU6ZnVuY3Rpb24odCl7dGhpcy50aW1lPTA7Zm9yKGxldCB0PTA7dDx0aGlzLl9hY3Rpb25zLmxlbmd0aDt0KyspdGhpcy5fYWN0aW9uc1t0XS50aW1lPTA7cmV0dXJuIHRoaXMudXBkYXRlKHQpfSxnZXRSb290OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Jvb3R9LHVuY2FjaGVDbGlwOmZ1bmN0aW9uKHQpe2NvbnN0IGU9dGhpcy5fYWN0aW9ucyxuPXQudXVpZCxvPXRoaXMuX2FjdGlvbnNCeUNsaXAsaT1vW25dO2lmKHZvaWQgMCE9PWkpe2NvbnN0IHQ9aS5rbm93bkFjdGlvbnM7Zm9yKGxldCBuPTAsbz10Lmxlbmd0aDtuIT09bzsrK24pe2NvbnN0IG89dFtuXTt0aGlzLl9kZWFjdGl2YXRlQWN0aW9uKG8pO2NvbnN0IGk9by5fY2FjaGVJbmRleCxhPWVbZS5sZW5ndGgtMV07by5fY2FjaGVJbmRleD1udWxsLG8uX2J5Q2xpcENhY2hlSW5kZXg9bnVsbCxhLl9jYWNoZUluZGV4PWksZVtpXT1hLGUucG9wKCksdGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nc0ZvckFjdGlvbihvKX1kZWxldGUgb1tuXX19LHVuY2FjaGVSb290OmZ1bmN0aW9uKHQpe2NvbnN0IGU9dC51dWlkLG49dGhpcy5fYWN0aW9uc0J5Q2xpcDtmb3IoY29uc3QgdCBpbiBuKXtjb25zdCBvPW5bdF0uYWN0aW9uQnlSb290W2VdO3ZvaWQgMCE9PW8mJih0aGlzLl9kZWFjdGl2YXRlQWN0aW9uKG8pLHRoaXMuX3JlbW92ZUluYWN0aXZlQWN0aW9uKG8pKX1jb25zdCBvPXRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZVtlXTtpZih2b2lkIDAhPT1vKWZvcihjb25zdCB0IGluIG8pe2NvbnN0IGU9b1t0XTtlLnJlc3RvcmVPcmlnaW5hbFN0YXRlKCksdGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nKGUpfX0sdW5jYWNoZUFjdGlvbjpmdW5jdGlvbih0LGUpe2NvbnN0IG49dGhpcy5leGlzdGluZ0FjdGlvbih0LGUpO251bGwhPT1uJiYodGhpcy5fZGVhY3RpdmF0ZUFjdGlvbihuKSx0aGlzLl9yZW1vdmVJbmFjdGl2ZUFjdGlvbihuKSl9fSk7Y2xhc3MgX3V0e2NvbnN0cnVjdG9yKHQpeyJzdHJpbmciPT10eXBlb2YgdCYmKGNvbnNvbGUud2FybigiVEhSRUUuVW5pZm9ybTogVHlwZSBwYXJhbWV0ZXIgaXMgbm8gbG9uZ2VyIG5lZWRlZC4iKSx0PWFyZ3VtZW50c1sxXSksdGhpcy52YWx1ZT10fWNsb25lKCl7cmV0dXJuIG5ldyBfdXQodm9pZCAwPT09dGhpcy52YWx1ZS5jbG9uZT90aGlzLnZhbHVlOnRoaXMudmFsdWUuY2xvbmUoKSl9fWZ1bmN0aW9uIEN1dCh0LGUsbil7RmN0LmNhbGwodGhpcyx0LGUpLHRoaXMubWVzaFBlckF0dHJpYnV0ZT1ufHwxfWZ1bmN0aW9uIE11dCh0LGUsbixvLGkpe3RoaXMuYnVmZmVyPXQsdGhpcy50eXBlPWUsdGhpcy5pdGVtU2l6ZT1uLHRoaXMuZWxlbWVudFNpemU9byx0aGlzLmNvdW50PWksdGhpcy52ZXJzaW9uPTB9ZnVuY3Rpb24gdnV0KHQsZSxuLG8pe3RoaXMucmF5PW5ldyB3YXQodCxlKSx0aGlzLm5lYXI9bnx8MCx0aGlzLmZhcj1vfHwxLzAsdGhpcy5jYW1lcmE9bnVsbCx0aGlzLmxheWVycz1uZXcgRmF0LHRoaXMucGFyYW1zPXtNZXNoOnt9LExpbmU6e3RocmVzaG9sZDoxfSxMT0Q6e30sUG9pbnRzOnt0aHJlc2hvbGQ6MX0sU3ByaXRlOnt9fSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLnBhcmFtcyx7UG9pbnRDbG91ZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUmF5Y2FzdGVyOiBwYXJhbXMuUG9pbnRDbG91ZCBoYXMgYmVlbiByZW5hbWVkIHRvIHBhcmFtcy5Qb2ludHMuIiksdGhpcy5Qb2ludHN9fX0pfWZ1bmN0aW9uIHh1dCh0LGUpe3JldHVybiB0LmRpc3RhbmNlLWUuZGlzdGFuY2V9ZnVuY3Rpb24gT3V0KHQsZSxuLG8pe2lmKHQubGF5ZXJzLnRlc3QoZS5sYXllcnMpJiZ0LnJheWNhc3QoZSxuKSwhMD09PW8pe2NvbnN0IG89dC5jaGlsZHJlbjtmb3IobGV0IHQ9MCxpPW8ubGVuZ3RoO3Q8aTt0KyspT3V0KG9bdF0sZSxuLCEwKX19Q3V0LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoRmN0LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOkN1dCxpc0luc3RhbmNlZEludGVybGVhdmVkQnVmZmVyOiEwLGNvcHk6ZnVuY3Rpb24odCl7cmV0dXJuIEZjdC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy5tZXNoUGVyQXR0cmlidXRlPXQubWVzaFBlckF0dHJpYnV0ZSx0aGlzfSxjbG9uZTpmdW5jdGlvbih0KXtjb25zdCBlPUZjdC5wcm90b3R5cGUuY2xvbmUuY2FsbCh0aGlzLHQpO3JldHVybiBlLm1lc2hQZXJBdHRyaWJ1dGU9dGhpcy5tZXNoUGVyQXR0cmlidXRlLGV9LHRvSlNPTjpmdW5jdGlvbih0KXtjb25zdCBlPUZjdC5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyx0KTtyZXR1cm4gZS5pc0luc3RhbmNlZEludGVybGVhdmVkQnVmZmVyPSEwLGUubWVzaFBlckF0dHJpYnV0ZT10aGlzLm1lc2hQZXJBdHRyaWJ1dGUsZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTXV0LnByb3RvdHlwZSwibmVlZHNVcGRhdGUiLHtzZXQ6ZnVuY3Rpb24odCl7ITA9PT10JiZ0aGlzLnZlcnNpb24rK319KSxPYmplY3QuYXNzaWduKE11dC5wcm90b3R5cGUse2lzR0xCdWZmZXJBdHRyaWJ1dGU6ITAsc2V0QnVmZmVyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmJ1ZmZlcj10LHRoaXN9LHNldFR5cGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy50eXBlPXQsdGhpcy5lbGVtZW50U2l6ZT1lLHRoaXN9LHNldEl0ZW1TaXplOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLml0ZW1TaXplPXQsdGhpc30sc2V0Q291bnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY291bnQ9dCx0aGlzfX0pLE9iamVjdC5hc3NpZ24odnV0LnByb3RvdHlwZSx7c2V0OmZ1bmN0aW9uKHQsZSl7dGhpcy5yYXkuc2V0KHQsZSl9LHNldEZyb21DYW1lcmE6ZnVuY3Rpb24odCxlKXtlJiZlLmlzUGVyc3BlY3RpdmVDYW1lcmE/KHRoaXMucmF5Lm9yaWdpbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oZS5tYXRyaXhXb3JsZCksdGhpcy5yYXkuZGlyZWN0aW9uLnNldCh0LngsdC55LC41KS51bnByb2plY3QoZSkuc3ViKHRoaXMucmF5Lm9yaWdpbikubm9ybWFsaXplKCksdGhpcy5jYW1lcmE9ZSk6ZSYmZS5pc09ydGhvZ3JhcGhpY0NhbWVyYT8odGhpcy5yYXkub3JpZ2luLnNldCh0LngsdC55LChlLm5lYXIrZS5mYXIpLyhlLm5lYXItZS5mYXIpKS51bnByb2plY3QoZSksdGhpcy5yYXkuZGlyZWN0aW9uLnNldCgwLDAsLTEpLnRyYW5zZm9ybURpcmVjdGlvbihlLm1hdHJpeFdvcmxkKSx0aGlzLmNhbWVyYT1lKTpjb25zb2xlLmVycm9yKCJUSFJFRS5SYXljYXN0ZXI6IFVuc3VwcG9ydGVkIGNhbWVyYSB0eXBlOiAiK2UudHlwZSl9LGludGVyc2VjdE9iamVjdDpmdW5jdGlvbih0LGUsbil7Y29uc3Qgbz1ufHxbXTtyZXR1cm4gT3V0KHQsdGhpcyxvLGUpLG8uc29ydCh4dXQpLG99LGludGVyc2VjdE9iamVjdHM6ZnVuY3Rpb24odCxlLG4pe2NvbnN0IG89bnx8W107aWYoITE9PT1BcnJheS5pc0FycmF5KHQpKXJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlJheWNhc3Rlci5pbnRlcnNlY3RPYmplY3RzOiBvYmplY3RzIGlzIG5vdCBhbiBBcnJheS4iKSxvO2ZvcihsZXQgbj0wLGk9dC5sZW5ndGg7bjxpO24rKylPdXQodFtuXSx0aGlzLG8sZSk7cmV0dXJuIG8uc29ydCh4dXQpLG99fSk7Y29uc3QgUHV0PW5ldyBVaXQ7ZnVuY3Rpb24gd3V0KHQpe1FhdC5jYWxsKHRoaXMpLHRoaXMubWF0ZXJpYWw9dCx0aGlzLnJlbmRlcj1mdW5jdGlvbigpe30sdGhpcy5oYXNQb3NpdGlvbnM9ITEsdGhpcy5oYXNOb3JtYWxzPSExLHRoaXMuaGFzQ29sb3JzPSExLHRoaXMuaGFzVXZzPSExLHRoaXMucG9zaXRpb25BcnJheT1udWxsLHRoaXMubm9ybWFsQXJyYXk9bnVsbCx0aGlzLmNvbG9yQXJyYXk9bnVsbCx0aGlzLnV2QXJyYXk9bnVsbCx0aGlzLmNvdW50PTB9KHd1dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShRYXQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9d3V0LHd1dC5wcm90b3R5cGUuaXNJbW1lZGlhdGVSZW5kZXJPYmplY3Q9ITA7Y29uc3Qga3V0PW5ldyBPcnQoe3NpZGU6MSxkZXB0aFdyaXRlOiExLGRlcHRoVGVzdDohMX0pO2Z1bmN0aW9uIFN1dCh0KXtjb25zb2xlLndhcm4oIlRIUkVFLlNwbGluZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuQ2F0bXVsbFJvbUN1cnZlMyBpbnN0ZWFkLiIpLHVtdC5jYWxsKHRoaXMsdCksdGhpcy50eXBlPSJjYXRtdWxscm9tIn1mdW5jdGlvbiBEdXQodCxlLG4pe2lmKDE9PT1uKXJldHVybiBuZXcgQ3J0KGUpO2NvbnN0IG89XzcoZSk7aWYoIW8pdGhyb3cgbmV3IEVycm9yKGBkMyBmYWlsZWQgdG8gcmVjb2duaXplIHRoZSBjb2xvcjogJHtlfWApO3JldHVybiBuZXcgQ3J0KF84KG8sdCkoMS1uKSl9dmFyIEV1dCxBdXQsUnV0LFR1dCxOdXQ7ZnVuY3Rpb24gSXV0KHQsZSl7Y29uc3Qgbj1lLmxlbmd0aC8yO2xldCBvPXQuYXR0cmlidXRlcy5wb3NpdGlvbjtvJiZvLmNvdW50PT09MypufHwobz1uZXcga3J0KG5ldyBGbG9hdDMyQXJyYXkoMypuKSwzKSx0LnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG8pKTtjb25zdCBpPW8uYXJyYXk7Zm9yKGxldCB0PTA7dDxuO3QrKylpWzMqdF09ZVsyKnRdLGlbMyp0KzFdPWVbMip0KzFdO28ubmVlZHNVcGRhdGU9ITAsdC5zZXREcmF3UmFuZ2UoMCwzKm4pLHQuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCl9ZnVuY3Rpb24genV0KHQsZSxuKXtjb25zdCBvPU1hdGgubWF4KGUubGVuZ3RoLzItMSwwKSxpPTIqbyozLGE9MyppO2xldCByPXQuYXR0cmlidXRlcy5wb3NpdGlvbjtyJiZyLmNvdW50PT09aXx8KHI9bmV3IGtydChuZXcgRmxvYXQzMkFycmF5KGEpLDMpLHQuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIscikpO2NvbnN0IHM9ci5hcnJheTtmb3IobGV0IHQ9MDt0PG87dCsrKXtjb25zdFtvLGksYSxyXT1bZVsyKnRdLGVbMip0KzFdLGVbMip0KzJdLGVbMip0KzNdXSxsPW5ldyBVaXQobyxpKSxjPW5ldyBVaXQoYSxyKSxkPW5ldyBVaXQoYS1vLHItaSkscD1uZXcgVWl0KC1kLnksZC54KS5zZXRMZW5ndGgobi8yKSxtPWwuY2xvbmUoKS5hZGQocCksdT1sLmNsb25lKCkuc3ViKHApLGY9Yy5jbG9uZSgpLmFkZChwKSxnPWMuY2xvbmUoKS5zdWIocCksaD1bbS54LG0ueSwwLHUueCx1LnksMCxmLngsZi55LDAsZi54LGYueSwwLHUueCx1LnksMCxnLngsZy55LDBdO3Muc2V0KGgsdCpoLmxlbmd0aCl9ci5uZWVkc1VwZGF0ZT0hMCx0LnNldERyYXdSYW5nZSgwLGEpLHQuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCl9ZnVuY3Rpb24gSHV0KHQsZSxuLG8pe2NvbnN0e3Zpc2libGU6aSxjb2xvcjphLG9wYWNpdHk6cn09bztpZihBcnJheS5pc0FycmF5KGUubWF0ZXJpYWwpKXRocm93IG5ldyBFcnJvcigiSW52YXJpYW50IGVycm9yOiBvbmx5IGV4cGVjdCBvbmUgbWF0ZXJpYWwgb24gYW4gb2JqZWN0Iik7Y29uc3Qgcz1lLm1hdGVyaWFsO2lmKHMudmlzaWJsZSE9PWkmJihzLnZpc2libGU9aSxzLm5lZWRzVXBkYXRlPSEwKSwhaSlyZXR1cm4hMTtjb25zdCBsPUR1dCh0LGEsbnVsbCE9cj9yOjEpLGM9bihlLmdlb21ldHJ5KTtyZXR1cm4gZS5nZW9tZXRyeSE9PWMmJihlLmdlb21ldHJ5PWMpLHMuY29sb3IuZXF1YWxzKGwpfHwocy5jb2xvci5zZXQobCkscy5uZWVkc1VwZGF0ZT0hMCksITB9bmV3IG1zdChuZXcgZnN0LGt1dCksYW10LmNyZWF0ZT1mdW5jdGlvbih0LGUpe3JldHVybiBjb25zb2xlLmxvZygiVEhSRUUuQ3VydmUuY3JlYXRlKCkgaGFzIGJlZW4gZGVwcmVjYXRlZCIpLHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYW10LnByb3RvdHlwZSksdC5wcm90b3R5cGUuY29uc3RydWN0b3I9dCx0LnByb3RvdHlwZS5nZXRQb2ludD1lLHR9LE9iamVjdC5hc3NpZ24od210LnByb3RvdHlwZSx7ZnJvbVBvaW50czpmdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5QYXRoOiAuZnJvbVBvaW50cygpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEZyb21Qb2ludHMoKS4iKSx0aGlzLnNldEZyb21Qb2ludHModCl9fSksU3V0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHVtdC5wcm90b3R5cGUpLE9iamVjdC5hc3NpZ24oU3V0LnByb3RvdHlwZSx7aW5pdEZyb21BcnJheTpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNwbGluZTogLmluaXRGcm9tQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxnZXRDb250cm9sUG9pbnRzQXJyYXk6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5TcGxpbmU6IC5nZXRDb250cm9sUG9pbnRzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxyZXBhcmFtZXRyaXplQnlBcmNMZW5ndGg6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5TcGxpbmU6IC5yZXBhcmFtZXRyaXplQnlBcmNMZW5ndGgoKSBoYXMgYmVlbiByZW1vdmVkLiIpfX0pLE9iamVjdC5hc3NpZ24oS3B0LnByb3RvdHlwZSx7ZXh0cmFjdFVybEJhc2U6ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTG9hZGVyOiAuZXh0cmFjdFVybEJhc2UoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuTG9hZGVyVXRpbHMuZXh0cmFjdFVybEJhc2UoKSBpbnN0ZWFkLiIpLChmdW5jdGlvbih0KXtjb25zdCBlPXQubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4tMT09PWU/Ii4vIjp0LnN1YnN0cigwLGUrMSl9KSh0KX19KSxLcHQuSGFuZGxlcnM9e2FkZDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkxvYWRlcjogSGFuZGxlcnMuYWRkKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIExvYWRpbmdNYW5hZ2VyLmFkZEhhbmRsZXIoKSBpbnN0ZWFkLiIpfSxnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Mb2FkZXI6IEhhbmRsZXJzLmdldCgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBMb2FkaW5nTWFuYWdlci5nZXRIYW5kbGVyKCkgaW5zdGVhZC4iKX19LE9iamVjdC5hc3NpZ24oY2xhc3N7Y29uc3RydWN0b3IodCxlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaXNCb3gyIix7dmFsdWU6ITB9KSx0aGlzLm1pbj12b2lkIDAhPT10P3Q6bmV3IFVpdCgxLzAsMS8wKSx0aGlzLm1heD12b2lkIDAhPT1lP2U6bmV3IFVpdCgtMS8wLC0xLzApfXNldCh0LGUpe3JldHVybiB0aGlzLm1pbi5jb3B5KHQpLHRoaXMubWF4LmNvcHkoZSksdGhpc31zZXRGcm9tUG9pbnRzKHQpe3RoaXMubWFrZUVtcHR5KCk7Zm9yKGxldCBlPTAsbj10Lmxlbmd0aDtlPG47ZSsrKXRoaXMuZXhwYW5kQnlQb2ludCh0W2VdKTtyZXR1cm4gdGhpc31zZXRGcm9tQ2VudGVyQW5kU2l6ZSh0LGUpe2NvbnN0IG49UHV0LmNvcHkoZSkubXVsdGlwbHlTY2FsYXIoLjUpO3JldHVybiB0aGlzLm1pbi5jb3B5KHQpLnN1YihuKSx0aGlzLm1heC5jb3B5KHQpLmFkZChuKSx0aGlzfWNsb25lKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMubWluLmNvcHkodC5taW4pLHRoaXMubWF4LmNvcHkodC5tYXgpLHRoaXN9bWFrZUVtcHR5KCl7cmV0dXJuIHRoaXMubWluLng9dGhpcy5taW4ueT0xLzAsdGhpcy5tYXgueD10aGlzLm1heC55PS0xLzAsdGhpc31pc0VtcHR5KCl7cmV0dXJuIHRoaXMubWF4Lng8dGhpcy5taW4ueHx8dGhpcy5tYXgueTx0aGlzLm1pbi55fWdldENlbnRlcih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKGNvbnNvbGUud2FybigiVEhSRUUuQm94MjogLmdldENlbnRlcigpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSx0PW5ldyBVaXQpLHRoaXMuaXNFbXB0eSgpP3Quc2V0KDAsMCk6dC5hZGRWZWN0b3JzKHRoaXMubWluLHRoaXMubWF4KS5tdWx0aXBseVNjYWxhciguNSl9Z2V0U2l6ZSh0KXtyZXR1cm4gdm9pZCAwPT09dCYmKGNvbnNvbGUud2FybigiVEhSRUUuQm94MjogLmdldFNpemUoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIiksdD1uZXcgVWl0KSx0aGlzLmlzRW1wdHkoKT90LnNldCgwLDApOnQuc3ViVmVjdG9ycyh0aGlzLm1heCx0aGlzLm1pbil9ZXhwYW5kQnlQb2ludCh0KXtyZXR1cm4gdGhpcy5taW4ubWluKHQpLHRoaXMubWF4Lm1heCh0KSx0aGlzfWV4cGFuZEJ5VmVjdG9yKHQpe3JldHVybiB0aGlzLm1pbi5zdWIodCksdGhpcy5tYXguYWRkKHQpLHRoaXN9ZXhwYW5kQnlTY2FsYXIodCl7cmV0dXJuIHRoaXMubWluLmFkZFNjYWxhcigtdCksdGhpcy5tYXguYWRkU2NhbGFyKHQpLHRoaXN9Y29udGFpbnNQb2ludCh0KXtyZXR1cm4hKHQueDx0aGlzLm1pbi54fHx0Lng+dGhpcy5tYXgueHx8dC55PHRoaXMubWluLnl8fHQueT50aGlzLm1heC55KX1jb250YWluc0JveCh0KXtyZXR1cm4gdGhpcy5taW4ueDw9dC5taW4ueCYmdC5tYXgueDw9dGhpcy5tYXgueCYmdGhpcy5taW4ueTw9dC5taW4ueSYmdC5tYXgueTw9dGhpcy5tYXgueX1nZXRQYXJhbWV0ZXIodCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGNvbnNvbGUud2FybigiVEhSRUUuQm94MjogLmdldFBhcmFtZXRlcigpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSxlPW5ldyBVaXQpLGUuc2V0KCh0LngtdGhpcy5taW4ueCkvKHRoaXMubWF4LngtdGhpcy5taW4ueCksKHQueS10aGlzLm1pbi55KS8odGhpcy5tYXgueS10aGlzLm1pbi55KSl9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4hKHQubWF4Lng8dGhpcy5taW4ueHx8dC5taW4ueD50aGlzLm1heC54fHx0Lm1heC55PHRoaXMubWluLnl8fHQubWluLnk+dGhpcy5tYXgueSl9Y2xhbXBQb2ludCh0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoY29uc29sZS53YXJuKCJUSFJFRS5Cb3gyOiAuY2xhbXBQb2ludCgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSxlPW5ldyBVaXQpLGUuY29weSh0KS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCl9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiBQdXQuY29weSh0KS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCkuc3ViKHQpLmxlbmd0aCgpfWludGVyc2VjdCh0KXtyZXR1cm4gdGhpcy5taW4ubWF4KHQubWluKSx0aGlzLm1heC5taW4odC5tYXgpLHRoaXN9dW5pb24odCl7cmV0dXJuIHRoaXMubWluLm1pbih0Lm1pbiksdGhpcy5tYXgubWF4KHQubWF4KSx0aGlzfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5taW4uYWRkKHQpLHRoaXMubWF4LmFkZCh0KSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5taW4uZXF1YWxzKHRoaXMubWluKSYmdC5tYXguZXF1YWxzKHRoaXMubWF4KX19LnByb3RvdHlwZSx7Y2VudGVyOmZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5jZW50ZXIoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRDZW50ZXIoKS4iKSx0aGlzLmdldENlbnRlcih0KX0sZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gyOiAuZW1wdHkoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pc0VtcHR5KCkuIiksdGhpcy5pc0VtcHR5KCl9LGlzSW50ZXJzZWN0aW9uQm94OmZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5pc0ludGVyc2VjdGlvbkJveCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNCb3goKS4iKSx0aGlzLmludGVyc2VjdHNCb3godCl9LHNpemU6ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MjogLnNpemUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRTaXplKCkuIiksdGhpcy5nZXRTaXplKHQpfX0pLE9iamVjdC5hc3NpZ24obmF0LnByb3RvdHlwZSx7Y2VudGVyOmZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5jZW50ZXIoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRDZW50ZXIoKS4iKSx0aGlzLmdldENlbnRlcih0KX0sZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuZW1wdHkoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pc0VtcHR5KCkuIiksdGhpcy5pc0VtcHR5KCl9LGlzSW50ZXJzZWN0aW9uQm94OmZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5pc0ludGVyc2VjdGlvbkJveCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNCb3goKS4iKSx0aGlzLmludGVyc2VjdHNCb3godCl9LGlzSW50ZXJzZWN0aW9uU3BoZXJlOmZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5pc0ludGVyc2VjdGlvblNwaGVyZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNTcGhlcmUoKS4iKSx0aGlzLmludGVyc2VjdHNTcGhlcmUodCl9LHNpemU6ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MzogLnNpemUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRTaXplKCkuIiksdGhpcy5nZXRTaXplKHQpfX0pLE9iamVjdC5hc3NpZ24oeWF0LnByb3RvdHlwZSx7ZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5TcGhlcmU6IC5lbXB0eSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmlzRW1wdHkoKS4iKSx0aGlzLmlzRW1wdHkoKX19KSxTc3QucHJvdG90eXBlLnNldEZyb21NYXRyaXg9ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuRnJ1c3R1bTogLnNldEZyb21NYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeCgpLiIpLHRoaXMuc2V0RnJvbVByb2plY3Rpb25NYXRyaXgodCl9LE9iamVjdC5hc3NpZ24oaml0LHtyYW5kb20xNjpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdGg6IC5yYW5kb20xNigpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSBNYXRoLnJhbmRvbSgpIGluc3RlYWQuIiksTWF0aC5yYW5kb20oKX0sbmVhcmVzdFBvd2VyT2ZUd286ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0aDogLm5lYXJlc3RQb3dlck9mVHdvKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZmxvb3JQb3dlck9mVHdvKCkuIiksaml0LmZsb29yUG93ZXJPZlR3byh0KX0sbmV4dFBvd2VyT2ZUd286ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0aDogLm5leHRQb3dlck9mVHdvKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuY2VpbFBvd2VyT2ZUd28oKS4iKSxqaXQuY2VpbFBvd2VyT2ZUd28odCl9fSksT2JqZWN0LmFzc2lnbihXaXQucHJvdG90eXBlLHtmbGF0dGVuVG9BcnJheU9mZnNldDpmdW5jdGlvbih0LGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDM6IC5mbGF0dGVuVG9BcnJheU9mZnNldCgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudG9BcnJheSgpIGluc3RlYWQuIiksdGhpcy50b0FycmF5KHQsZSl9LG11bHRpcGx5VmVjdG9yMzpmdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXgzOiAubXVsdGlwbHlWZWN0b3IzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHZlY3Rvci5hcHBseU1hdHJpeDMoIG1hdHJpeCApIGluc3RlYWQuIiksdC5hcHBseU1hdHJpeDModGhpcyl9LG11bHRpcGx5VmVjdG9yM0FycmF5OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4MzogLm11bHRpcGx5VmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZTpmdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXgzOiAuYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBhdHRyaWJ1dGUuYXBwbHlNYXRyaXgzKCBtYXRyaXggKSBpbnN0ZWFkLiIpLHQuYXBwbHlNYXRyaXgzKHRoaXMpfSxhcHBseVRvVmVjdG9yM0FycmF5OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4MzogLmFwcGx5VG9WZWN0b3IzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxnZXRJbnZlcnNlOmZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDM6IC5nZXRJbnZlcnNlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG1hdHJpeEludi5jb3B5KCBtYXRyaXggKS5pbnZlcnQoKTsgaW5zdGVhZC4iKSx0aGlzLmNvcHkodCkuaW52ZXJ0KCl9fSksT2JqZWN0LmFzc2lnbihrYXQucHJvdG90eXBlLHtleHRyYWN0UG9zaXRpb246ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmV4dHJhY3RQb3NpdGlvbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmNvcHlQb3NpdGlvbigpLiIpLHRoaXMuY29weVBvc2l0aW9uKHQpfSxmbGF0dGVuVG9BcnJheU9mZnNldDpmdW5jdGlvbih0LGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5mbGF0dGVuVG9BcnJheU9mZnNldCgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudG9BcnJheSgpIGluc3RlYWQuIiksdGhpcy50b0FycmF5KHQsZSl9LGdldFBvc2l0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmdldFBvc2l0aW9uKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFZlY3RvcjMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCBtYXRyaXggKSBpbnN0ZWFkLiIpLChuZXcgJGl0KS5zZXRGcm9tTWF0cml4Q29sdW1uKHRoaXMsMyl9LHNldFJvdGF0aW9uRnJvbVF1YXRlcm5pb246ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLnNldFJvdGF0aW9uRnJvbVF1YXRlcm5pb24oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbigpLiIpLHRoaXMubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24odCl9LG11bHRpcGx5VG9BcnJheTpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VG9BcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LG11bHRpcGx5VmVjdG9yMzpmdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHlWZWN0b3IzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHZlY3Rvci5hcHBseU1hdHJpeDQoIG1hdHJpeCApIGluc3RlYWQuIiksdC5hcHBseU1hdHJpeDQodGhpcyl9LG11bHRpcGx5VmVjdG9yNDpmdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHlWZWN0b3I0KCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHZlY3Rvci5hcHBseU1hdHJpeDQoIG1hdHJpeCApIGluc3RlYWQuIiksdC5hcHBseU1hdHJpeDQodGhpcyl9LG11bHRpcGx5VmVjdG9yM0FycmF5OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0scm90YXRlQXhpczpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVBeGlzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFZlY3RvcjMudHJhbnNmb3JtRGlyZWN0aW9uKCBtYXRyaXggKSBpbnN0ZWFkLiIpLHQudHJhbnNmb3JtRGlyZWN0aW9uKHRoaXMpfSxjcm9zc1ZlY3RvcjpmdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuY3Jvc3NWZWN0b3IoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4NCggbWF0cml4ICkgaW5zdGVhZC4iKSx0LmFwcGx5TWF0cml4NCh0aGlzKX0sdHJhbnNsYXRlOmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnRyYW5zbGF0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LHJvdGF0ZVg6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlWCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LHJvdGF0ZVk6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlWSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LHJvdGF0ZVo6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlWigpIGhhcyBiZWVuIHJlbW92ZWQuIil9LHJvdGF0ZUJ5QXhpczpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVCeUF4aXMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxhcHBseVRvQnVmZmVyQXR0cmlidXRlOmZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5hcHBseVRvQnVmZmVyQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGF0dHJpYnV0ZS5hcHBseU1hdHJpeDQoIG1hdHJpeCApIGluc3RlYWQuIiksdC5hcHBseU1hdHJpeDQodGhpcyl9LGFwcGx5VG9WZWN0b3IzQXJyYXk6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAuYXBwbHlUb1ZlY3RvcjNBcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LG1ha2VGcnVzdHVtOmZ1bmN0aW9uKHQsZSxuLG8saSxhKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubWFrZUZydXN0dW0oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLm1ha2VQZXJzcGVjdGl2ZSggbGVmdCwgcmlnaHQsIHRvcCwgYm90dG9tLCBuZWFyLCBmYXIgKSBpbnN0ZWFkLiIpLHRoaXMubWFrZVBlcnNwZWN0aXZlKHQsZSxvLG4saSxhKX0sZ2V0SW52ZXJzZTpmdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuZ2V0SW52ZXJzZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBtYXRyaXhJbnYuY29weSggbWF0cml4ICkuaW52ZXJ0KCk7IGluc3RlYWQuIiksdGhpcy5jb3B5KHQpLmludmVydCgpfX0pLG5ydC5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25MaW5lPWZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlBsYW5lOiAuaXNJbnRlcnNlY3Rpb25MaW5lKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c0xpbmUoKS4iKSx0aGlzLmludGVyc2VjdHNMaW5lKHQpfSxPYmplY3QuYXNzaWduKFFpdC5wcm90b3R5cGUse211bHRpcGx5VmVjdG9yMzpmdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiAubXVsdGlwbHlWZWN0b3IzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGlzIG5vdyB2ZWN0b3IuYXBwbHlRdWF0ZXJuaW9uKCBxdWF0ZXJuaW9uICkgaW5zdGVhZC4iKSx0LmFwcGx5UXVhdGVybmlvbih0aGlzKX0saW52ZXJzZTpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlF1YXRlcm5pb246IC5pbnZlcnNlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byBpbnZlcnQoKS4iKSx0aGlzLmludmVydCgpfX0pLE9iamVjdC5hc3NpZ24od2F0LnByb3RvdHlwZSx7aXNJbnRlcnNlY3Rpb25Cb3g6ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUmF5OiAuaXNJbnRlcnNlY3Rpb25Cb3goKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzQm94KCkuIiksdGhpcy5pbnRlcnNlY3RzQm94KHQpfSxpc0ludGVyc2VjdGlvblBsYW5lOmZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlJheTogLmlzSW50ZXJzZWN0aW9uUGxhbmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzUGxhbmUoKS4iKSx0aGlzLmludGVyc2VjdHNQbGFuZSh0KX0saXNJbnRlcnNlY3Rpb25TcGhlcmU6ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUmF5OiAuaXNJbnRlcnNlY3Rpb25TcGhlcmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzU3BoZXJlKCkuIiksdGhpcy5pbnRlcnNlY3RzU3BoZXJlKHQpfX0pLE9iamVjdC5hc3NpZ24odXJ0LnByb3RvdHlwZSx7YXJlYTpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAuYXJlYSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldEFyZWEoKS4iKSx0aGlzLmdldEFyZWEoKX0sYmFyeWNvb3JkRnJvbVBvaW50OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5iYXJ5Y29vcmRGcm9tUG9pbnQoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRCYXJ5Y29vcmQoKS4iKSx0aGlzLmdldEJhcnljb29yZCh0LGUpfSxtaWRwb2ludDpmdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLm1pZHBvaW50KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0TWlkcG9pbnQoKS4iKSx0aGlzLmdldE1pZHBvaW50KHQpfSxub3JtYWw6ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5ub3JtYWwoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXROb3JtYWwoKS4iKSx0aGlzLmdldE5vcm1hbCh0KX0scGxhbmU6ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5wbGFuZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldFBsYW5lKCkuIiksdGhpcy5nZXRQbGFuZSh0KX19KSxPYmplY3QuYXNzaWduKHVydCx7YmFyeWNvb3JkRnJvbVBvaW50OmZ1bmN0aW9uKHQsZSxuLG8saSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5iYXJ5Y29vcmRGcm9tUG9pbnQoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRCYXJ5Y29vcmQoKS4iKSx1cnQuZ2V0QmFyeWNvb3JkKHQsZSxuLG8saSl9LG5vcm1hbDpmdW5jdGlvbih0LGUsbixvKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLm5vcm1hbCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldE5vcm1hbCgpLiIpLHVydC5nZXROb3JtYWwodCxlLG4sbyl9fSksT2JqZWN0LmFzc2lnbihrbXQucHJvdG90eXBlLHtleHRyYWN0QWxsUG9pbnRzOmZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlNoYXBlOiAuZXh0cmFjdEFsbFBvaW50cygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuZXh0cmFjdFBvaW50cygpIGluc3RlYWQuIiksdGhpcy5leHRyYWN0UG9pbnRzKHQpfSxleHRydWRlOmZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlNoYXBlOiAuZXh0cnVkZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBFeHRydWRlR2VvbWV0cnkoKSBpbnN0ZWFkLiIpLG5ldyBicHQodGhpcyx0KX0sbWFrZUdlb21ldHJ5OmZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlNoYXBlOiAubWFrZUdlb21ldHJ5KCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFNoYXBlR2VvbWV0cnkoKSBpbnN0ZWFkLiIpLG5ldyBDcHQodGhpcyx0KX19KSxPYmplY3QuYXNzaWduKFVpdC5wcm90b3R5cGUse2Zyb21BdHRyaWJ1dGU6ZnVuY3Rpb24odCxlLG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjI6IC5mcm9tQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUsbil9LGRpc3RhbmNlVG9NYW5oYXR0YW46ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLmRpc3RhbmNlVG9NYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5EaXN0YW5jZVRvKCkuIiksdGhpcy5tYW5oYXR0YW5EaXN0YW5jZVRvKHQpfSxsZW5ndGhNYW5oYXR0YW46ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiAubGVuZ3RoTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuTGVuZ3RoKCkuIiksdGhpcy5tYW5oYXR0YW5MZW5ndGgoKX19KSxPYmplY3QuYXNzaWduKCRpdC5wcm90b3R5cGUse3NldEV1bGVyRnJvbVJvdGF0aW9uTWF0cml4OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuVmVjdG9yMzogLnNldEV1bGVyRnJvbVJvdGF0aW9uTWF0cml4KCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEV1bGVyLnNldEZyb21Sb3RhdGlvbk1hdHJpeCgpIGluc3RlYWQuIil9LHNldEV1bGVyRnJvbVF1YXRlcm5pb246ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5WZWN0b3IzOiAuc2V0RXVsZXJGcm9tUXVhdGVybmlvbigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBFdWxlci5zZXRGcm9tUXVhdGVybmlvbigpIGluc3RlYWQuIil9LGdldFBvc2l0aW9uRnJvbU1hdHJpeDpmdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZ2V0UG9zaXRpb25Gcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCkuIiksdGhpcy5zZXRGcm9tTWF0cml4UG9zaXRpb24odCl9LGdldFNjYWxlRnJvbU1hdHJpeDpmdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZ2V0U2NhbGVGcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbU1hdHJpeFNjYWxlKCkuIiksdGhpcy5zZXRGcm9tTWF0cml4U2NhbGUodCl9LGdldENvbHVtbkZyb21NYXRyaXg6ZnVuY3Rpb24odCxlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZ2V0Q29sdW1uRnJvbU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEZyb21NYXRyaXhDb2x1bW4oKS4iKSx0aGlzLnNldEZyb21NYXRyaXhDb2x1bW4oZSx0KX0sYXBwbHlQcm9qZWN0aW9uOmZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5hcHBseVByb2plY3Rpb24oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLmFwcGx5TWF0cml4NCggbSApIGluc3RlYWQuIiksdGhpcy5hcHBseU1hdHJpeDQodCl9LGZyb21BdHRyaWJ1dGU6ZnVuY3Rpb24odCxlLG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5mcm9tQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUsbil9LGRpc3RhbmNlVG9NYW5oYXR0YW46ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmRpc3RhbmNlVG9NYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5EaXN0YW5jZVRvKCkuIiksdGhpcy5tYW5oYXR0YW5EaXN0YW5jZVRvKHQpfSxsZW5ndGhNYW5oYXR0YW46ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAubGVuZ3RoTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuTGVuZ3RoKCkuIiksdGhpcy5tYW5oYXR0YW5MZW5ndGgoKX19KSxPYmplY3QuYXNzaWduKEtpdC5wcm90b3R5cGUse2Zyb21BdHRyaWJ1dGU6ZnVuY3Rpb24odCxlLG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IC5mcm9tQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUsbil9LGxlbmd0aE1hbmhhdHRhbjpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IC5sZW5ndGhNYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5MZW5ndGgoKS4iKSx0aGlzLm1hbmhhdHRhbkxlbmd0aCgpfX0pLE9iamVjdC5hc3NpZ24oUWF0LnByb3RvdHlwZSx7Z2V0Q2hpbGRCeU5hbWU6ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5nZXRDaGlsZEJ5TmFtZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldE9iamVjdEJ5TmFtZSgpLiIpLHRoaXMuZ2V0T2JqZWN0QnlOYW1lKHQpfSxyZW5kZXJEZXB0aDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5yZW5kZXJEZXB0aCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnJlbmRlck9yZGVyLCBpbnN0ZWFkLiIpfSx0cmFuc2xhdGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLnRyYW5zbGF0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAudHJhbnNsYXRlT25BeGlzKCBheGlzLCBkaXN0YW5jZSApIGluc3RlYWQuIiksdGhpcy50cmFuc2xhdGVPbkF4aXMoZSx0KX0sZ2V0V29ybGRSb3RhdGlvbjpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk9iamVjdDNEOiAuZ2V0V29ybGRSb3RhdGlvbigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5PYmplY3QzRC5nZXRXb3JsZFF1YXRlcm5pb24oIHRhcmdldCApIGluc3RlYWQuIil9LGFwcGx5TWF0cml4OmZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAuYXBwbHlNYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5hcHBseU1hdHJpeDQoKS4iKSx0aGlzLmFwcGx5TWF0cml4NCh0KX19KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhRYXQucHJvdG90eXBlLHtldWxlck9yZGVyOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLmV1bGVyT3JkZXIgaXMgbm93IC5yb3RhdGlvbi5vcmRlci4iKSx0aGlzLnJvdGF0aW9uLm9yZGVyfSxzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLmV1bGVyT3JkZXIgaXMgbm93IC5yb3RhdGlvbi5vcmRlci4iKSx0aGlzLnJvdGF0aW9uLm9yZGVyPXR9fSx1c2VRdWF0ZXJuaW9uOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAudXNlUXVhdGVybmlvbiBoYXMgYmVlbiByZW1vdmVkLiBUaGUgbGlicmFyeSBub3cgdXNlcyBxdWF0ZXJuaW9ucyBieSBkZWZhdWx0LiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAudXNlUXVhdGVybmlvbiBoYXMgYmVlbiByZW1vdmVkLiBUaGUgbGlicmFyeSBub3cgdXNlcyBxdWF0ZXJuaW9ucyBieSBkZWZhdWx0LiIpfX19KSxPYmplY3QuYXNzaWduKG1zdC5wcm90b3R5cGUse3NldERyYXdNb2RlOmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWVzaDogLnNldERyYXdNb2RlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIHJlbmRlcmVyIG5vdyBhbHdheXMgYXNzdW1lcyBUSFJFRS5UcmlhbmdsZXNEcmF3TW9kZS4gVHJhbnNmb3JtIHlvdXIgZ2VvbWV0cnkgdmlhIEJ1ZmZlckdlb21ldHJ5VXRpbHMudG9UcmlhbmdsZXNEcmF3TW9kZSgpIGlmIG5lY2Vzc2FyeS4iKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhtc3QucHJvdG90eXBlLHtkcmF3TW9kZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUuZXJyb3IoIlRIUkVFLk1lc2g6IC5kcmF3TW9kZSBoYXMgYmVlbiByZW1vdmVkLiBUaGUgcmVuZGVyZXIgbm93IGFsd2F5cyBhc3N1bWVzIFRIUkVFLlRyaWFuZ2xlc0RyYXdNb2RlLiIpLDB9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1lc2g6IC5kcmF3TW9kZSBoYXMgYmVlbiByZW1vdmVkLiBUaGUgcmVuZGVyZXIgbm93IGFsd2F5cyBhc3N1bWVzIFRIUkVFLlRyaWFuZ2xlc0RyYXdNb2RlLiBUcmFuc2Zvcm0geW91ciBnZW9tZXRyeSB2aWEgQnVmZmVyR2VvbWV0cnlVdGlscy50b1RyaWFuZ2xlc0RyYXdNb2RlKCkgaWYgbmVjZXNzYXJ5LiIpfX19KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhhZHQucHJvdG90eXBlLHtvYmplY3RzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5MT0Q6IC5vYmplY3RzIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmxldmVscy4iKSx0aGlzLmxldmVsc319fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGdkdC5wcm90b3R5cGUsInVzZVZlcnRleFRleHR1cmUiLHtnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLlNrZWxldG9uOiB1c2VWZXJ0ZXhUZXh0dXJlIGhhcyBiZWVuIHJlbW92ZWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuU2tlbGV0b246IHVzZVZlcnRleFRleHR1cmUgaGFzIGJlZW4gcmVtb3ZlZC4iKX19KSxwZHQucHJvdG90eXBlLmluaXRCb25lcz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNraW5uZWRNZXNoOiBpbml0Qm9uZXMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYW10LnByb3RvdHlwZSwiX19hcmNMZW5ndGhEaXZpc2lvbnMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5DdXJ2ZTogLl9fYXJjTGVuZ3RoRGl2aXNpb25zIGlzIG5vdyAuYXJjTGVuZ3RoRGl2aXNpb25zLiIpLHRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zfSxzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5DdXJ2ZTogLl9fYXJjTGVuZ3RoRGl2aXNpb25zIGlzIG5vdyAuYXJjTGVuZ3RoRGl2aXNpb25zLiIpLHRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zPXR9fSksQ3N0LnByb3RvdHlwZS5zZXRMZW5zPWZ1bmN0aW9uKHQsZSl7Y29uc29sZS53YXJuKCJUSFJFRS5QZXJzcGVjdGl2ZUNhbWVyYS5zZXRMZW5zIGlzIGRlcHJlY2F0ZWQuIFVzZSAuc2V0Rm9jYWxMZW5ndGggYW5kIC5maWxtR2F1Z2UgZm9yIGEgcGhvdG9ncmFwaGljIHNldHVwLiIpLHZvaWQgMCE9PWUmJih0aGlzLmZpbG1HYXVnZT1lKSx0aGlzLnNldEZvY2FsTGVuZ3RoKHQpfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhTbXQucHJvdG90eXBlLHtvbmx5U2hhZG93OntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAub25seVNoYWRvdyBoYXMgYmVlbiByZW1vdmVkLiIpfX0sc2hhZG93Q2FtZXJhRm92OntzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYUZvdiBpcyBub3cgLnNoYWRvdy5jYW1lcmEuZm92LiIpLHRoaXMuc2hhZG93LmNhbWVyYS5mb3Y9dH19LHNoYWRvd0NhbWVyYUxlZnQ6e3NldDpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhTGVmdCBpcyBub3cgLnNoYWRvdy5jYW1lcmEubGVmdC4iKSx0aGlzLnNoYWRvdy5jYW1lcmEubGVmdD10fX0sc2hhZG93Q2FtZXJhUmlnaHQ6e3NldDpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhUmlnaHQgaXMgbm93IC5zaGFkb3cuY2FtZXJhLnJpZ2h0LiIpLHRoaXMuc2hhZG93LmNhbWVyYS5yaWdodD10fX0sc2hhZG93Q2FtZXJhVG9wOntzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYVRvcCBpcyBub3cgLnNoYWRvdy5jYW1lcmEudG9wLiIpLHRoaXMuc2hhZG93LmNhbWVyYS50b3A9dH19LHNoYWRvd0NhbWVyYUJvdHRvbTp7c2V0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFCb3R0b20gaXMgbm93IC5zaGFkb3cuY2FtZXJhLmJvdHRvbS4iKSx0aGlzLnNoYWRvdy5jYW1lcmEuYm90dG9tPXR9fSxzaGFkb3dDYW1lcmFOZWFyOntzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYU5lYXIgaXMgbm93IC5zaGFkb3cuY2FtZXJhLm5lYXIuIiksdGhpcy5zaGFkb3cuY2FtZXJhLm5lYXI9dH19LHNoYWRvd0NhbWVyYUZhcjp7c2V0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFGYXIgaXMgbm93IC5zaGFkb3cuY2FtZXJhLmZhci4iKSx0aGlzLnNoYWRvdy5jYW1lcmEuZmFyPXR9fSxzaGFkb3dDYW1lcmFWaXNpYmxlOntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhVmlzaWJsZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkNhbWVyYUhlbHBlciggbGlnaHQuc2hhZG93LmNhbWVyYSApIGluc3RlYWQuIil9fSxzaGFkb3dCaWFzOntzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0JpYXMgaXMgbm93IC5zaGFkb3cuYmlhcy4iKSx0aGlzLnNoYWRvdy5iaWFzPXR9fSxzaGFkb3dEYXJrbmVzczp7c2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0RhcmtuZXNzIGhhcyBiZWVuIHJlbW92ZWQuIil9fSxzaGFkb3dNYXBXaWR0aDp7c2V0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dNYXBXaWR0aCBpcyBub3cgLnNoYWRvdy5tYXBTaXplLndpZHRoLiIpLHRoaXMuc2hhZG93Lm1hcFNpemUud2lkdGg9dH19LHNoYWRvd01hcEhlaWdodDp7c2V0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dNYXBIZWlnaHQgaXMgbm93IC5zaGFkb3cubWFwU2l6ZS5oZWlnaHQuIiksdGhpcy5zaGFkb3cubWFwU2l6ZS5oZWlnaHQ9dH19fSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoa3J0LnByb3RvdHlwZSx7bGVuZ3RoOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5sZW5ndGggaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5jb3VudCBpbnN0ZWFkLiIpLHRoaXMuYXJyYXkubGVuZ3RofX0sZHluYW1pYzp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuZHluYW1pYyBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnVzYWdlIGluc3RlYWQuIiksdGhpcy51c2FnZT09PUhpdH0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5keW5hbWljIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudXNhZ2UgaW5zdGVhZC4iKSx0aGlzLnNldFVzYWdlKEhpdCl9fX0pLE9iamVjdC5hc3NpZ24oa3J0LnByb3RvdHlwZSx7c2V0RHluYW1pYzpmdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5zZXREeW5hbWljKCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5zZXRVc2FnZSgpIGluc3RlYWQuIiksdGhpcy5zZXRVc2FnZSghMD09PXQ/SGl0OnppdCksdGhpc30sY29weUluZGljZXNBcnJheTpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLmNvcHlJbmRpY2VzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXRBcnJheTpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLnNldEFycmF5IGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBCdWZmZXJHZW9tZXRyeSAuc2V0QXR0cmlidXRlIHRvIHJlcGxhY2UvcmVzaXplIGF0dHJpYnV0ZSBidWZmZXJzIil9fSksT2JqZWN0LmFzc2lnbihacnQucHJvdG90eXBlLHthZGRJbmRleDpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkSW5kZXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRJbmRleCgpLiIpLHRoaXMuc2V0SW5kZXgodCl9LGFkZEF0dHJpYnV0ZTpmdW5jdGlvbih0LGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0QXR0cmlidXRlKCkuIiksZSYmZS5pc0J1ZmZlckF0dHJpYnV0ZXx8ZSYmZS5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlPyJpbmRleCI9PT10Pyhjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5LmFkZEF0dHJpYnV0ZTogVXNlIC5zZXRJbmRleCgpIGZvciBpbmRleCBhdHRyaWJ1dGUuIiksdGhpcy5zZXRJbmRleChlKSx0aGlzKTp0aGlzLnNldEF0dHJpYnV0ZSh0LGUpOihjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkQXR0cmlidXRlKCkgbm93IGV4cGVjdHMgKCBuYW1lLCBhdHRyaWJ1dGUgKS4iKSx0aGlzLnNldEF0dHJpYnV0ZSh0LG5ldyBrcnQoYXJndW1lbnRzWzFdLGFyZ3VtZW50c1syXSkpKX0sYWRkRHJhd0NhbGw6ZnVuY3Rpb24odCxlLG4pe3ZvaWQgMCE9PW4mJmNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGREcmF3Q2FsbCgpIG5vIGxvbmdlciBzdXBwb3J0cyBpbmRleE9mZnNldC4iKSxjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkRHJhd0NhbGwoKSBpcyBub3cgLmFkZEdyb3VwKCkuIiksdGhpcy5hZGRHcm91cCh0LGUpfSxjbGVhckRyYXdDYWxsczpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5jbGVhckRyYXdDYWxscygpIGlzIG5vdyAuY2xlYXJHcm91cHMoKS4iKSx0aGlzLmNsZWFyR3JvdXBzKCl9LGNvbXB1dGVPZmZzZXRzOmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmNvbXB1dGVPZmZzZXRzKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0scmVtb3ZlQXR0cmlidXRlOmZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAucmVtb3ZlQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZGVsZXRlQXR0cmlidXRlKCkuIiksdGhpcy5kZWxldGVBdHRyaWJ1dGUodCl9LGFwcGx5TWF0cml4OmZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYXBwbHlNYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5hcHBseU1hdHJpeDQoKS4iKSx0aGlzLmFwcGx5TWF0cml4NCh0KX19KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhacnQucHJvdG90eXBlLHtkcmF3Y2FsbHM6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLmVycm9yKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmRyYXdjYWxscyBoYXMgYmVlbiByZW5hbWVkIHRvIC5ncm91cHMuIiksdGhpcy5ncm91cHN9fSxvZmZzZXRzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLm9mZnNldHMgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ3JvdXBzLiIpLHRoaXMuZ3JvdXBzfX19KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhVbXQucHJvdG90eXBlLHttYXhJbnN0YW5jZWRDb3VudDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnk6IC5tYXhJbnN0YW5jZWRDb3VudCBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnN0YW5jZUNvdW50LiIpLHRoaXMuaW5zdGFuY2VDb3VudH0sc2V0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnk6IC5tYXhJbnN0YW5jZWRDb3VudCBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnN0YW5jZUNvdW50LiIpLHRoaXMuaW5zdGFuY2VDb3VudD10fX19KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyh2dXQucHJvdG90eXBlLHtsaW5lUHJlY2lzaW9uOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5SYXljYXN0ZXI6IC5saW5lUHJlY2lzaW9uIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAucGFyYW1zLkxpbmUudGhyZXNob2xkIGluc3RlYWQuIiksdGhpcy5wYXJhbXMuTGluZS50aHJlc2hvbGR9LHNldDpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLlJheWNhc3RlcjogLmxpbmVQcmVjaXNpb24gaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5wYXJhbXMuTGluZS50aHJlc2hvbGQgaW5zdGVhZC4iKSx0aGlzLnBhcmFtcy5MaW5lLnRocmVzaG9sZD10fX19KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhGY3QucHJvdG90eXBlLHtkeW5hbWljOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5JbnRlcmxlYXZlZEJ1ZmZlcjogLmxlbmd0aCBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnVzYWdlIGluc3RlYWQuIiksdGhpcy51c2FnZT09PUhpdH0sc2V0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuSW50ZXJsZWF2ZWRCdWZmZXI6IC5sZW5ndGggaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC51c2FnZSBpbnN0ZWFkLiIpLHRoaXMuc2V0VXNhZ2UodCl9fX0pLE9iamVjdC5hc3NpZ24oRmN0LnByb3RvdHlwZSx7c2V0RHluYW1pYzpmdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5JbnRlcmxlYXZlZEJ1ZmZlcjogLnNldER5bmFtaWMoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnNldFVzYWdlKCkgaW5zdGVhZC4iKSx0aGlzLnNldFVzYWdlKCEwPT09dD9IaXQ6eml0KSx0aGlzfSxzZXRBcnJheTpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkludGVybGVhdmVkQnVmZmVyOiAuc2V0QXJyYXkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEJ1ZmZlckdlb21ldHJ5IC5zZXRBdHRyaWJ1dGUgdG8gcmVwbGFjZS9yZXNpemUgYXR0cmlidXRlIGJ1ZmZlcnMiKX19KSxPYmplY3QuYXNzaWduKGJwdC5wcm90b3R5cGUse2dldEFycmF5czpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkV4dHJ1ZGVHZW9tZXRyeTogLmdldEFycmF5cygpIGhhcyBiZWVuIHJlbW92ZWQuIil9LGFkZFNoYXBlTGlzdDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkV4dHJ1ZGVHZW9tZXRyeTogLmFkZFNoYXBlTGlzdCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LGFkZFNoYXBlOmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuRXh0cnVkZUdlb21ldHJ5OiAuYWRkU2hhcGUoKSBoYXMgYmVlbiByZW1vdmVkLiIpfX0pLE9iamVjdC5hc3NpZ24oSGN0LnByb3RvdHlwZSx7ZGlzcG9zZTpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNjZW5lOiAuZGlzcG9zZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9fSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoX3V0LnByb3RvdHlwZSx7ZHluYW1pYzp7c2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5Vbmlmb3JtOiAuZHluYW1pYyBoYXMgYmVlbiByZW1vdmVkLiBVc2Ugb2JqZWN0Lm9uQmVmb3JlUmVuZGVyKCkgaW5zdGVhZC4iKX19LG9uVXBkYXRlOnt2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlVuaWZvcm06IC5vblVwZGF0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBvYmplY3Qub25CZWZvcmVSZW5kZXIoKSBpbnN0ZWFkLiIpLHRoaXN9fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHhydC5wcm90b3R5cGUse3dyYXBBcm91bmQ6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC53cmFwQXJvdW5kIGhhcyBiZWVuIHJlbW92ZWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC53cmFwQXJvdW5kIGhhcyBiZWVuIHJlbW92ZWQuIil9fSxvdmVyZHJhdzp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRlcmlhbDogLm92ZXJkcmF3IGhhcyBiZWVuIHJlbW92ZWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC5vdmVyZHJhdyBoYXMgYmVlbiByZW1vdmVkLiIpfX0sd3JhcFJHQjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC53cmFwUkdCIGhhcyBiZWVuIHJlbW92ZWQuIiksbmV3IENydH19LHNoYWRpbmc6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zaGFkaW5nIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB0aGUgYm9vbGVhbiAuZmxhdFNoYWRpbmcgaW5zdGVhZC4iKX0sc2V0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnNoYWRpbmcgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHRoZSBib29sZWFuIC5mbGF0U2hhZGluZyBpbnN0ZWFkLiIpLHRoaXMuZmxhdFNoYWRpbmc9MT09PXR9fSxzdGVuY2lsTWFzazp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnN0ZW5jaWxNYXNrIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuc3RlbmNpbEZ1bmNNYXNrIGluc3RlYWQuIiksdGhpcy5zdGVuY2lsRnVuY01hc2t9LHNldDpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zdGVuY2lsTWFzayBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnN0ZW5jaWxGdW5jTWFzayBpbnN0ZWFkLiIpLHRoaXMuc3RlbmNpbEZ1bmNNYXNrPXR9fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFBwdC5wcm90b3R5cGUse21ldGFsOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NZXNoUGhvbmdNYXRlcmlhbDogLm1ldGFsIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5NZXNoU3RhbmRhcmRNYXRlcmlhbCBpbnN0ZWFkLiIpLCExfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1lc2hQaG9uZ01hdGVyaWFsOiAubWV0YWwgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLk1lc2hTdGFuZGFyZE1hdGVyaWFsIGluc3RlYWQiKX19fSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoT3B0LnByb3RvdHlwZSx7dHJhbnNwYXJlbmN5OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NZXNoUGh5c2ljYWxNYXRlcmlhbDogLnRyYW5zcGFyZW5jeSBoYXMgYmVlbiByZW5hbWVkIHRvIC50cmFuc21pc3Npb24uIiksdGhpcy50cmFuc21pc3Npb259LHNldDpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLk1lc2hQaHlzaWNhbE1hdGVyaWFsOiAudHJhbnNwYXJlbmN5IGhhcyBiZWVuIHJlbmFtZWQgdG8gLnRyYW5zbWlzc2lvbi4iKSx0aGlzLnRyYW5zbWlzc2lvbj10fX19KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyh5c3QucHJvdG90eXBlLHtkZXJpdmF0aXZlczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuU2hhZGVyTWF0ZXJpYWw6IC5kZXJpdmF0aXZlcyBoYXMgYmVlbiBtb3ZlZCB0byAuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlcy4iKSx0aGlzLmV4dGVuc2lvbnMuZGVyaXZhdGl2ZXN9LHNldDpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLiBTaGFkZXJNYXRlcmlhbDogLmRlcml2YXRpdmVzIGhhcyBiZWVuIG1vdmVkIHRvIC5leHRlbnNpb25zLmRlcml2YXRpdmVzLiIpLHRoaXMuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlcz10fX19KSxPYmplY3QuYXNzaWduKEljdC5wcm90b3R5cGUse2NsZWFyVGFyZ2V0OmZ1bmN0aW9uKHQsZSxuLG8pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmNsZWFyVGFyZ2V0KCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5zZXRSZW5kZXJUYXJnZXQoKSBhbmQgLmNsZWFyKCkgaW5zdGVhZC4iKSx0aGlzLnNldFJlbmRlclRhcmdldCh0KSx0aGlzLmNsZWFyKGUsbixvKX0sYW5pbWF0ZTpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5hbmltYXRlKCkgaXMgbm93IC5zZXRBbmltYXRpb25Mb29wKCkuIiksdGhpcy5zZXRBbmltYXRpb25Mb29wKHQpfSxnZXRDdXJyZW50UmVuZGVyVGFyZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdldEN1cnJlbnRSZW5kZXJUYXJnZXQoKSBpcyBub3cgLmdldFJlbmRlclRhcmdldCgpLiIpLHRoaXMuZ2V0UmVuZGVyVGFyZ2V0KCl9LGdldE1heEFuaXNvdHJvcHk6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2V0TWF4QW5pc290cm9weSgpIGlzIG5vdyAuY2FwYWJpbGl0aWVzLmdldE1heEFuaXNvdHJvcHkoKS4iKSx0aGlzLmNhcGFiaWxpdGllcy5nZXRNYXhBbmlzb3Ryb3B5KCl9LGdldFByZWNpc2lvbjpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRQcmVjaXNpb24oKSBpcyBub3cgLmNhcGFiaWxpdGllcy5wcmVjaXNpb24uIiksdGhpcy5jYXBhYmlsaXRpZXMucHJlY2lzaW9ufSxyZXNldEdMU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAucmVzZXRHTFN0YXRlKCkgaXMgbm93IC5zdGF0ZS5yZXNldCgpLiIpLHRoaXMuc3RhdGUucmVzZXQoKX0sc3VwcG9ydHNGbG9hdFRleHR1cmVzOmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzRmxvYXRUZXh0dXJlcygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdPRVNfdGV4dHVyZV9mbG9hdCcgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJPRVNfdGV4dHVyZV9mbG9hdCIpfSxzdXBwb3J0c0hhbGZGbG9hdFRleHR1cmVzOmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzSGFsZkZsb2F0VGV4dHVyZXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnT0VTX3RleHR1cmVfaGFsZl9mbG9hdCcgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0Iil9LHN1cHBvcnRzU3RhbmRhcmREZXJpdmF0aXZlczpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c1N0YW5kYXJkRGVyaXZhdGl2ZXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzJyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpfSxzdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlUzNUQzpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlUzNUQygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YycgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpfSxzdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlUFZSVEM6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZVBWUlRDKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YycgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKX0sc3VwcG9ydHNCbGVuZE1pbk1heDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0JsZW5kTWluTWF4KCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ0VYVF9ibGVuZF9taW5tYXgnICkuIiksdGhpcy5leHRlbnNpb25zLmdldCgiRVhUX2JsZW5kX21pbm1heCIpfSxzdXBwb3J0c1ZlcnRleFRleHR1cmVzOmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzVmVydGV4VGV4dHVyZXMoKSBpcyBub3cgLmNhcGFiaWxpdGllcy52ZXJ0ZXhUZXh0dXJlcy4iKSx0aGlzLmNhcGFiaWxpdGllcy52ZXJ0ZXhUZXh0dXJlc30sc3VwcG9ydHNJbnN0YW5jZWRBcnJheXM6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNJbnN0YW5jZWRBcnJheXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnQU5HTEVfaW5zdGFuY2VkX2FycmF5cycgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIil9LGVuYWJsZVNjaXNzb3JUZXN0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmVuYWJsZVNjaXNzb3JUZXN0KCkgaXMgbm93IC5zZXRTY2lzc29yVGVzdCgpLiIpLHRoaXMuc2V0U2Npc3NvclRlc3QodCl9LGluaXRNYXRlcmlhbDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmluaXRNYXRlcmlhbCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LGFkZFByZVBsdWdpbjpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmFkZFByZVBsdWdpbigpIGhhcyBiZWVuIHJlbW92ZWQuIil9LGFkZFBvc3RQbHVnaW46ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5hZGRQb3N0UGx1Z2luKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sdXBkYXRlU2hhZG93TWFwOmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAudXBkYXRlU2hhZG93TWFwKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sc2V0RmFjZUN1bGxpbmc6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRGYWNlQ3VsbGluZygpIGhhcyBiZWVuIHJlbW92ZWQuIil9LGFsbG9jVGV4dHVyZVVuaXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5hbGxvY1RleHR1cmVVbml0KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sc2V0VGV4dHVyZTpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNldFRleHR1cmUoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXRUZXh0dXJlMkQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRUZXh0dXJlMkQoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXRUZXh0dXJlQ3ViZTpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNldFRleHR1cmVDdWJlKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sZ2V0QWN0aXZlTWlwTWFwTGV2ZWw6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2V0QWN0aXZlTWlwTWFwTGV2ZWwoKSBpcyBub3cgLmdldEFjdGl2ZU1pcG1hcExldmVsKCkuIiksdGhpcy5nZXRBY3RpdmVNaXBtYXBMZXZlbCgpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEljdC5wcm90b3R5cGUse3NoYWRvd01hcEVuYWJsZWQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNoYWRvd01hcC5lbmFibGVkfSxzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwRW5hYmxlZCBpcyBub3cgLnNoYWRvd01hcC5lbmFibGVkLiIpLHRoaXMuc2hhZG93TWFwLmVuYWJsZWQ9dH19LHNoYWRvd01hcFR5cGU6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNoYWRvd01hcC50eXBlfSxzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwVHlwZSBpcyBub3cgLnNoYWRvd01hcC50eXBlLiIpLHRoaXMuc2hhZG93TWFwLnR5cGU9dH19LHNoYWRvd01hcEN1bGxGYWNlOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBDdWxsRmFjZSBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBDdWxsRmFjZSBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfX0sY29udGV4dDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmNvbnRleHQgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5nZXRDb250ZXh0KCkgaW5zdGVhZC4iKSx0aGlzLmdldENvbnRleHQoKX19LHZyOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAudnIgaGFzIGJlZW4gcmVuYW1lZCB0byAueHIiKSx0aGlzLnhyfX0sZ2FtbWFJbnB1dDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hSW5wdXQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IHRoZSBlbmNvZGluZyBmb3IgdGV4dHVyZXMgdmlhIFRleHR1cmUuZW5jb2RpbmcgaW5zdGVhZC4iKSwhMX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFJbnB1dCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgdGhlIGVuY29kaW5nIGZvciB0ZXh0dXJlcyB2aWEgVGV4dHVyZS5lbmNvZGluZyBpbnN0ZWFkLiIpfX0sZ2FtbWFPdXRwdXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYU91dHB1dCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgV2ViR0xSZW5kZXJlci5vdXRwdXRFbmNvZGluZyBpbnN0ZWFkLiIpLCExfSxzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFPdXRwdXQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IFdlYkdMUmVuZGVyZXIub3V0cHV0RW5jb2RpbmcgaW5zdGVhZC4iKSx0aGlzLm91dHB1dEVuY29kaW5nPSEwPT09dD8zMDAxOk5pdH19LHRvbmVNYXBwaW5nV2hpdGVQb2ludDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnRvbmVNYXBwaW5nV2hpdGVQb2ludCBoYXMgYmVlbiByZW1vdmVkLiIpLDF9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnRvbmVNYXBwaW5nV2hpdGVQb2ludCBoYXMgYmVlbiByZW1vdmVkLiIpfX19KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyh3Y3QucHJvdG90eXBlLHtjdWxsRmFjZTp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLmN1bGxGYWNlIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5jdWxsRmFjZSBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfX0scmVuZGVyUmV2ZXJzZVNpZGVkOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAucmVuZGVyUmV2ZXJzZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5yZW5kZXJSZXZlcnNlU2lkZWQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX19LHJlbmRlclNpbmdsZVNpZGVkOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAucmVuZGVyU2luZ2xlU2lkZWQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLnJlbmRlclNpbmdsZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEppdC5wcm90b3R5cGUse3dyYXBTOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLndyYXBTIGlzIG5vdyAudGV4dHVyZS53cmFwUy4iKSx0aGlzLnRleHR1cmUud3JhcFN9LHNldDpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFMgaXMgbm93IC50ZXh0dXJlLndyYXBTLiIpLHRoaXMudGV4dHVyZS53cmFwUz10fX0sd3JhcFQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFQgaXMgbm93IC50ZXh0dXJlLndyYXBULiIpLHRoaXMudGV4dHVyZS53cmFwVH0sc2V0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwVCBpcyBub3cgLnRleHR1cmUud3JhcFQuIiksdGhpcy50ZXh0dXJlLndyYXBUPXR9fSxtYWdGaWx0ZXI6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAubWFnRmlsdGVyIGlzIG5vdyAudGV4dHVyZS5tYWdGaWx0ZXIuIiksdGhpcy50ZXh0dXJlLm1hZ0ZpbHRlcn0sc2V0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5tYWdGaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1hZ0ZpbHRlci4iKSx0aGlzLnRleHR1cmUubWFnRmlsdGVyPXR9fSxtaW5GaWx0ZXI6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAubWluRmlsdGVyIGlzIG5vdyAudGV4dHVyZS5taW5GaWx0ZXIuIiksdGhpcy50ZXh0dXJlLm1pbkZpbHRlcn0sc2V0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5taW5GaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1pbkZpbHRlci4iKSx0aGlzLnRleHR1cmUubWluRmlsdGVyPXR9fSxhbmlzb3Ryb3B5OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmFuaXNvdHJvcHkgaXMgbm93IC50ZXh0dXJlLmFuaXNvdHJvcHkuIiksdGhpcy50ZXh0dXJlLmFuaXNvdHJvcHl9LHNldDpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuYW5pc290cm9weSBpcyBub3cgLnRleHR1cmUuYW5pc290cm9weS4iKSx0aGlzLnRleHR1cmUuYW5pc290cm9weT10fX0sb2Zmc2V0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm9mZnNldCBpcyBub3cgLnRleHR1cmUub2Zmc2V0LiIpLHRoaXMudGV4dHVyZS5vZmZzZXR9LHNldDpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAub2Zmc2V0IGlzIG5vdyAudGV4dHVyZS5vZmZzZXQuIiksdGhpcy50ZXh0dXJlLm9mZnNldD10fX0scmVwZWF0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnJlcGVhdCBpcyBub3cgLnRleHR1cmUucmVwZWF0LiIpLHRoaXMudGV4dHVyZS5yZXBlYXR9LHNldDpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAucmVwZWF0IGlzIG5vdyAudGV4dHVyZS5yZXBlYXQuIiksdGhpcy50ZXh0dXJlLnJlcGVhdD10fX0sZm9ybWF0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmZvcm1hdCBpcyBub3cgLnRleHR1cmUuZm9ybWF0LiIpLHRoaXMudGV4dHVyZS5mb3JtYXR9LHNldDpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuZm9ybWF0IGlzIG5vdyAudGV4dHVyZS5mb3JtYXQuIiksdGhpcy50ZXh0dXJlLmZvcm1hdD10fX0sdHlwZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC50eXBlIGlzIG5vdyAudGV4dHVyZS50eXBlLiIpLHRoaXMudGV4dHVyZS50eXBlfSxzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnR5cGUgaXMgbm93IC50ZXh0dXJlLnR5cGUuIiksdGhpcy50ZXh0dXJlLnR5cGU9dH19LGdlbmVyYXRlTWlwbWFwczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5nZW5lcmF0ZU1pcG1hcHMgaXMgbm93IC50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcy4iKSx0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzfSxzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmdlbmVyYXRlTWlwbWFwcyBpcyBub3cgLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzLiIpLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9dH19fSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY2xhc3MgZXh0ZW5kcyBRYXR7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IkF1ZGlvIix0aGlzLmxpc3RlbmVyPXQsdGhpcy5jb250ZXh0PXQuY29udGV4dCx0aGlzLmdhaW49dGhpcy5jb250ZXh0LmNyZWF0ZUdhaW4oKSx0aGlzLmdhaW4uY29ubmVjdCh0LmdldElucHV0KCkpLHRoaXMuYXV0b3BsYXk9ITEsdGhpcy5idWZmZXI9bnVsbCx0aGlzLmRldHVuZT0wLHRoaXMubG9vcD0hMSx0aGlzLmxvb3BTdGFydD0wLHRoaXMubG9vcEVuZD0wLHRoaXMub2Zmc2V0PTAsdGhpcy5kdXJhdGlvbj12b2lkIDAsdGhpcy5wbGF5YmFja1JhdGU9MSx0aGlzLmlzUGxheWluZz0hMSx0aGlzLmhhc1BsYXliYWNrQ29udHJvbD0hMCx0aGlzLnNvdXJjZT1udWxsLHRoaXMuc291cmNlVHlwZT0iZW1wdHkiLHRoaXMuX3N0YXJ0ZWRBdD0wLHRoaXMuX3Byb2dyZXNzPTAsdGhpcy5fY29ubmVjdGVkPSExLHRoaXMuZmlsdGVycz1bXX1nZXRPdXRwdXQoKXtyZXR1cm4gdGhpcy5nYWlufXNldE5vZGVTb3VyY2UodCl7cmV0dXJuIHRoaXMuaGFzUGxheWJhY2tDb250cm9sPSExLHRoaXMuc291cmNlVHlwZT0iYXVkaW9Ob2RlIix0aGlzLnNvdXJjZT10LHRoaXMuY29ubmVjdCgpLHRoaXN9c2V0TWVkaWFFbGVtZW50U291cmNlKHQpe3JldHVybiB0aGlzLmhhc1BsYXliYWNrQ29udHJvbD0hMSx0aGlzLnNvdXJjZVR5cGU9Im1lZGlhTm9kZSIsdGhpcy5zb3VyY2U9dGhpcy5jb250ZXh0LmNyZWF0ZU1lZGlhRWxlbWVudFNvdXJjZSh0KSx0aGlzLmNvbm5lY3QoKSx0aGlzfXNldE1lZGlhU3RyZWFtU291cmNlKHQpe3JldHVybiB0aGlzLmhhc1BsYXliYWNrQ29udHJvbD0hMSx0aGlzLnNvdXJjZVR5cGU9Im1lZGlhU3RyZWFtTm9kZSIsdGhpcy5zb3VyY2U9dGhpcy5jb250ZXh0LmNyZWF0ZU1lZGlhU3RyZWFtU291cmNlKHQpLHRoaXMuY29ubmVjdCgpLHRoaXN9c2V0QnVmZmVyKHQpe3JldHVybiB0aGlzLmJ1ZmZlcj10LHRoaXMuc291cmNlVHlwZT0iYnVmZmVyIix0aGlzLmF1dG9wbGF5JiZ0aGlzLnBsYXkoKSx0aGlzfXBsYXkodD0wKXtpZighMD09PXRoaXMuaXNQbGF5aW5nKXJldHVybiB2b2lkIGNvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IEF1ZGlvIGlzIGFscmVhZHkgcGxheWluZy4iKTtpZighMT09PXRoaXMuaGFzUGxheWJhY2tDb250cm9sKXJldHVybiB2b2lkIGNvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIik7dGhpcy5fc3RhcnRlZEF0PXRoaXMuY29udGV4dC5jdXJyZW50VGltZSt0O2NvbnN0IGU9dGhpcy5jb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpO3JldHVybiBlLmJ1ZmZlcj10aGlzLmJ1ZmZlcixlLmxvb3A9dGhpcy5sb29wLGUubG9vcFN0YXJ0PXRoaXMubG9vcFN0YXJ0LGUubG9vcEVuZD10aGlzLmxvb3BFbmQsZS5vbmVuZGVkPXRoaXMub25FbmRlZC5iaW5kKHRoaXMpLGUuc3RhcnQodGhpcy5fc3RhcnRlZEF0LHRoaXMuX3Byb2dyZXNzK3RoaXMub2Zmc2V0LHRoaXMuZHVyYXRpb24pLHRoaXMuaXNQbGF5aW5nPSEwLHRoaXMuc291cmNlPWUsdGhpcy5zZXREZXR1bmUodGhpcy5kZXR1bmUpLHRoaXMuc2V0UGxheWJhY2tSYXRlKHRoaXMucGxheWJhY2tSYXRlKSx0aGlzLmNvbm5lY3QoKX1wYXVzZSgpe2lmKCExIT09dGhpcy5oYXNQbGF5YmFja0NvbnRyb2wpcmV0dXJuITA9PT10aGlzLmlzUGxheWluZyYmKHRoaXMuX3Byb2dyZXNzKz1NYXRoLm1heCh0aGlzLmNvbnRleHQuY3VycmVudFRpbWUtdGhpcy5fc3RhcnRlZEF0LDApKnRoaXMucGxheWJhY2tSYXRlLCEwPT09dGhpcy5sb29wJiYodGhpcy5fcHJvZ3Jlc3M9dGhpcy5fcHJvZ3Jlc3MlKHRoaXMuZHVyYXRpb258fHRoaXMuYnVmZmVyLmR1cmF0aW9uKSksdGhpcy5zb3VyY2Uuc3RvcCgpLHRoaXMuc291cmNlLm9uZW5kZWQ9bnVsbCx0aGlzLmlzUGxheWluZz0hMSksdGhpcztjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpfXN0b3AoKXtpZighMSE9PXRoaXMuaGFzUGxheWJhY2tDb250cm9sKXJldHVybiB0aGlzLl9wcm9ncmVzcz0wLHRoaXMuc291cmNlLnN0b3AoKSx0aGlzLnNvdXJjZS5vbmVuZGVkPW51bGwsdGhpcy5pc1BsYXlpbmc9ITEsdGhpcztjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpfWNvbm5lY3QoKXtpZih0aGlzLmZpbHRlcnMubGVuZ3RoPjApe3RoaXMuc291cmNlLmNvbm5lY3QodGhpcy5maWx0ZXJzWzBdKTtmb3IobGV0IHQ9MSxlPXRoaXMuZmlsdGVycy5sZW5ndGg7dDxlO3QrKyl0aGlzLmZpbHRlcnNbdC0xXS5jb25uZWN0KHRoaXMuZmlsdGVyc1t0XSk7dGhpcy5maWx0ZXJzW3RoaXMuZmlsdGVycy5sZW5ndGgtMV0uY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKX1lbHNlIHRoaXMuc291cmNlLmNvbm5lY3QodGhpcy5nZXRPdXRwdXQoKSk7cmV0dXJuIHRoaXMuX2Nvbm5lY3RlZD0hMCx0aGlzfWRpc2Nvbm5lY3QoKXtpZih0aGlzLmZpbHRlcnMubGVuZ3RoPjApe3RoaXMuc291cmNlLmRpc2Nvbm5lY3QodGhpcy5maWx0ZXJzWzBdKTtmb3IobGV0IHQ9MSxlPXRoaXMuZmlsdGVycy5sZW5ndGg7dDxlO3QrKyl0aGlzLmZpbHRlcnNbdC0xXS5kaXNjb25uZWN0KHRoaXMuZmlsdGVyc1t0XSk7dGhpcy5maWx0ZXJzW3RoaXMuZmlsdGVycy5sZW5ndGgtMV0uZGlzY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKX1lbHNlIHRoaXMuc291cmNlLmRpc2Nvbm5lY3QodGhpcy5nZXRPdXRwdXQoKSk7cmV0dXJuIHRoaXMuX2Nvbm5lY3RlZD0hMSx0aGlzfWdldEZpbHRlcnMoKXtyZXR1cm4gdGhpcy5maWx0ZXJzfXNldEZpbHRlcnModCl7cmV0dXJuIHR8fCh0PVtdKSwhMD09PXRoaXMuX2Nvbm5lY3RlZD8odGhpcy5kaXNjb25uZWN0KCksdGhpcy5maWx0ZXJzPXQuc2xpY2UoKSx0aGlzLmNvbm5lY3QoKSk6dGhpcy5maWx0ZXJzPXQuc2xpY2UoKSx0aGlzfXNldERldHVuZSh0KXtpZih0aGlzLmRldHVuZT10LHZvaWQgMCE9PXRoaXMuc291cmNlLmRldHVuZSlyZXR1cm4hMD09PXRoaXMuaXNQbGF5aW5nJiZ0aGlzLnNvdXJjZS5kZXR1bmUuc2V0VGFyZ2V0QXRUaW1lKHRoaXMuZGV0dW5lLHRoaXMuY29udGV4dC5jdXJyZW50VGltZSwuMDEpLHRoaXN9Z2V0RGV0dW5lKCl7cmV0dXJuIHRoaXMuZGV0dW5lfWdldEZpbHRlcigpe3JldHVybiB0aGlzLmdldEZpbHRlcnMoKVswXX1zZXRGaWx0ZXIodCl7cmV0dXJuIHRoaXMuc2V0RmlsdGVycyh0P1t0XTpbXSl9c2V0UGxheWJhY2tSYXRlKHQpe2lmKCExIT09dGhpcy5oYXNQbGF5YmFja0NvbnRyb2wpcmV0dXJuIHRoaXMucGxheWJhY2tSYXRlPXQsITA9PT10aGlzLmlzUGxheWluZyYmdGhpcy5zb3VyY2UucGxheWJhY2tSYXRlLnNldFRhcmdldEF0VGltZSh0aGlzLnBsYXliYWNrUmF0ZSx0aGlzLmNvbnRleHQuY3VycmVudFRpbWUsLjAxKSx0aGlzO2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIil9Z2V0UGxheWJhY2tSYXRlKCl7cmV0dXJuIHRoaXMucGxheWJhY2tSYXRlfW9uRW5kZWQoKXt0aGlzLmlzUGxheWluZz0hMX1nZXRMb29wKCl7cmV0dXJuITE9PT10aGlzLmhhc1BsYXliYWNrQ29udHJvbD8oY29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKSwhMSk6dGhpcy5sb29wfXNldExvb3AodCl7aWYoITEhPT10aGlzLmhhc1BsYXliYWNrQ29udHJvbClyZXR1cm4gdGhpcy5sb29wPXQsITA9PT10aGlzLmlzUGxheWluZyYmKHRoaXMuc291cmNlLmxvb3A9dGhpcy5sb29wKSx0aGlzO2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIil9c2V0TG9vcFN0YXJ0KHQpe3JldHVybiB0aGlzLmxvb3BTdGFydD10LHRoaXN9c2V0TG9vcEVuZCh0KXtyZXR1cm4gdGhpcy5sb29wRW5kPXQsdGhpc31nZXRWb2x1bWUoKXtyZXR1cm4gdGhpcy5nYWluLmdhaW4udmFsdWV9c2V0Vm9sdW1lKHQpe3JldHVybiB0aGlzLmdhaW4uZ2Fpbi5zZXRUYXJnZXRBdFRpbWUodCx0aGlzLmNvbnRleHQuY3VycmVudFRpbWUsLjAxKSx0aGlzfX0ucHJvdG90eXBlLHtsb2FkOnt2YWx1ZTpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiAubG9hZCBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuQXVkaW9Mb2FkZXIgaW5zdGVhZC4iKTtjb25zdCBlPXRoaXM7cmV0dXJuKG5ldyBRbXQpLmxvYWQodCwoZnVuY3Rpb24odCl7ZS5zZXRCdWZmZXIodCl9KSksdGhpc319LHN0YXJ0VGltZTp7c2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogLnN0YXJ0VGltZSBpcyBub3cgLnBsYXkoIGRlbGF5ICkuIil9fX0pLHZzdC5wcm90b3R5cGUudXBkYXRlQ3ViZU1hcD1mdW5jdGlvbih0LGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkN1YmVDYW1lcmE6IC51cGRhdGVDdWJlTWFwKCkgaXMgbm93IC51cGRhdGUoKS4iKSx0aGlzLnVwZGF0ZSh0LGUpfSx2c3QucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKHQsZSxuLG8pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkN1YmVDYW1lcmE6IC5jbGVhcigpIGlzIG5vdyAucmVuZGVyVGFyZ2V0LmNsZWFyKCkuIiksdGhpcy5yZW5kZXJUYXJnZXQuY2xlYXIodCxlLG4sbyl9LFlpdC5jcm9zc09yaWdpbj12b2lkIDAsWWl0LmxvYWRUZXh0dXJlPWZ1bmN0aW9uKHQsZSxuLG8pe2NvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5sb2FkVGV4dHVyZSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuVGV4dHVyZUxvYWRlcigpIGluc3RlYWQuIik7Y29uc3QgaT1uZXcgaW10O2kuc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbik7Y29uc3QgYT1pLmxvYWQodCxuLHZvaWQgMCxvKTtyZXR1cm4gZSYmKGEubWFwcGluZz1lKSxhfSxZaXQubG9hZFRleHR1cmVDdWJlPWZ1bmN0aW9uKHQsZSxuLG8pe2NvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5sb2FkVGV4dHVyZUN1YmUgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLkN1YmVUZXh0dXJlTG9hZGVyKCkgaW5zdGVhZC4iKTtjb25zdCBpPW5ldyBubXQ7aS5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKTtjb25zdCBhPWkubG9hZCh0LG4sdm9pZCAwLG8pO3JldHVybiBlJiYoYS5tYXBwaW5nPWUpLGF9LFlpdC5sb2FkQ29tcHJlc3NlZFRleHR1cmU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRDb21wcmVzc2VkVGV4dHVyZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuRERTTG9hZGVyIGluc3RlYWQuIil9LFlpdC5sb2FkQ29tcHJlc3NlZFRleHR1cmVDdWJlPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuSW1hZ2VVdGlscy5sb2FkQ29tcHJlc3NlZFRleHR1cmVDdWJlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5ERFNMb2FkZXIgaW5zdGVhZC4iKX0sInVuZGVmaW5lZCIhPXR5cGVvZiBfX1RIUkVFX0RFVlRPT0xTX18mJl9fVEhSRUVfREVWVE9PTFNfXy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgicmVnaXN0ZXIiLHtkZXRhaWw6e3JldmlzaW9uOiIxMjUifX0pKSwidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmKHdpbmRvdy5fX1RIUkVFX18/Y29uc29sZS53YXJuKCJXQVJOSU5HOiBNdWx0aXBsZSBpbnN0YW5jZXMgb2YgVGhyZWUuanMgYmVpbmcgaW1wb3J0ZWQuIik6d2luZG93Ll9fVEhSRUVfXz0iMTI1IiksKGZ1bmN0aW9uKHQpe3RbdC5DSVJDTEU9MF09IkNJUkNMRSIsdFt0LkxJTkU9MV09IkxJTkUiLHRbdC5UUklBTkdMRT0yXT0iVFJJQU5HTEUiLHRbdC5UUkFQRVpPSUQ9M109IlRSQVBFWk9JRCJ9KShFdXR8fChFdXQ9e30pKTtjbGFzcyBGdXR7Y29uc3RydWN0b3IodCxlLG4pe3RoaXMuY29vcmRpbmF0b3I9ZSx0aGlzLnNjZW5lPW5ldyBIY3QsdGhpcy5iYWNrZ3JvdW5kQ29sb3I9IiNmZmYiLHNpdCgpJiZ0IGluc3RhbmNlb2YgT2Zmc2NyZWVuQ2FudmFzJiYodC5zdHlsZT10LnN0eWxlfHx7fSksdGhpcy5yZW5kZXJlcj1uZXcgSWN0KHtjYW52YXM6dCxjb250ZXh0OnQuZ2V0Q29udGV4dCgid2ViZ2wyIix7YW50aWFsaWFzOiEwLHByZWNpc2lvbjoiaGlnaHAiLGFscGhhOiEwfSl9KSx0aGlzLnJlbmRlcmVyLnNldFBpeGVsUmF0aW8obil9b25SZXNpemUodCl7dGhpcy5yZW5kZXJlci5zZXRTaXplKHQud2lkdGgsdC5oZWlnaHQpfWRlc3Ryb3lPYmplY3QodCl7Y29uc3QgZT10Lm9iajNkO2lmKHRoaXMuc2NlbmUucmVtb3ZlKGUpLGUgaW5zdGFuY2VvZiBtc3Qpe2UuZ2VvbWV0cnkuZGlzcG9zZSgpO2NvbnN0IHQ9QXJyYXkuaXNBcnJheShlLm1hdGVyaWFsKT9lLm1hdGVyaWFsOltlLm1hdGVyaWFsXTtmb3IoY29uc3QgZSBvZiB0KWUuZGlzcG9zZSgpfX1zZXRVc2VEYXJrTW9kZSh0KXt0aGlzLmJhY2tncm91bmRDb2xvcj10PyIjMzAzMDMwIjoiI2ZmZiJ9Y3JlYXRlT3JVcGRhdGVMaW5lT2JqZWN0KHQsZSxuKXt2YXIgbztpZighdCYmIW4udmlzaWJsZSlyZXR1cm4gbnVsbDtjb25zdHt2aXNpYmxlOmksd2lkdGg6YX09bjtpZighdCl7Y29uc3QgdD1EdXQodGhpcy5iYWNrZ3JvdW5kQ29sb3Isbi5jb2xvcixudWxsIT09KG89bi5vcGFjaXR5KSYmdm9pZCAwIT09bz9vOjEpLHI9bmV3IFpydCxzPW5ldyBNZHQoe2NvbG9yOnR9KSxsPW5ldyBtc3QocixzKTtyZXR1cm4gcy52aXNpYmxlPWksenV0KHIsZSxhKSx0aGlzLnNjZW5lLmFkZChsKSx7dHlwZTpFdXQuTElORSxkYXRhOmUsb2JqM2Q6bCx3aWR0aDphfX1jb25zdHtkYXRhOnIsb2JqM2Q6cyx3aWR0aDpsfT10O3JldHVybiBIdXQodGhpcy5iYWNrZ3JvdW5kQ29sb3IscywodD0+KGE9PT1sJiZyJiZsaXQocixlKXx8enV0KHQsZSxhKSx0KSksbik/e3R5cGU6RXV0LkxJTkUsZGF0YTplLG9iajNkOnMsd2lkdGg6YX06dH1jcmVhdGVNZXNoKHQsZSl7aWYoIWUudmlzaWJsZSlyZXR1cm4gbnVsbDtjb25zdHt2aXNpYmxlOm4sY29sb3I6byxvcGFjaXR5Oml9PWU7cmV0dXJuIG5ldyBtc3QodCxuZXcgT3J0KHtjb2xvcjpEdXQodGhpcy5iYWNrZ3JvdW5kQ29sb3IsbyxudWxsIT1pP2k6MSksdmlzaWJsZTpufSkpfWNyZWF0ZU9yVXBkYXRlVHJpYW5nbGVPYmplY3QodCxlLG4pe2NvbnN0e3NpemU6b309bixpPW8qTWF0aC5zcXJ0KDMpLzIsYT1uZXcgRmxvYXQzMkFycmF5KFtlLngtby8yLGUueS1pLzMsZS54K28vMixlLnktaS8zLGUueCxlLnkrMippLzNdKTtpZighdCl7Y29uc3QgdD1uZXcgWnJ0O0l1dCh0LGEpO2NvbnN0IG89dGhpcy5jcmVhdGVNZXNoKHQsbik7cmV0dXJuIG51bGw9PT1vP251bGw6KHRoaXMuc2NlbmUuYWRkKG8pLHt0eXBlOkV1dC5UUklBTkdMRSxkYXRhOmUsb2JqM2Q6b30pfXJldHVybiBIdXQodGhpcy5iYWNrZ3JvdW5kQ29sb3IsdC5vYmozZCwodD0+KEl1dCh0LGEpLHQpKSxuKT97dHlwZTpFdXQuVFJJQU5HTEUsZGF0YTplLG9iajNkOnQub2JqM2R9OnR9Y3JlYXRlT3JVcGRhdGVDaXJjbGVPYmplY3QodCxlLG4pe2NvbnN0e3JhZGl1czpvfT1uLGk9bmV3IFVkdChuLnJhZGl1cyk7aWYoIXQpe2NvbnN0IHQ9dGhpcy5jcmVhdGVNZXNoKGksbik7cmV0dXJuIG51bGw9PT10P251bGw6KHQucG9zaXRpb24uc2V0KGUueCxlLnksMCksdGhpcy5zY2VuZS5hZGQodCkse3R5cGU6RXV0LkNJUkNMRSxkYXRhOntsb2M6ZSxyYWRpdXM6b30sb2JqM2Q6dH0pfXJldHVybiBIdXQodGhpcy5iYWNrZ3JvdW5kQ29sb3IsdC5vYmozZCwoKCk9PmkpLG4pPyh0Lm9iajNkLnBvc2l0aW9uLnNldChlLngsZS55LDApLHt0eXBlOkV1dC5DSVJDTEUsZGF0YTp7bG9jOmUscmFkaXVzOm99LG9iajNkOnQub2JqM2R9KTp0fWNyZWF0ZU9yVXBkYXRlVHJhcGV6b2lkT2JqZWN0KHQsZSxuLG8pe2lmKGUueSE9PW4ueSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5wdXQgZXJyb3I6IHN0YXJ0LnkgIT0gZW5kLnkuIik7Y29uc3R7YWx0aXR1ZGU6aX09byxhPTIvTWF0aC5zcXJ0KDMpKmkscj1uZXcga210KFtuZXcgVWl0KGUueC1hLzIsZS55LWkvMiksbmV3IFVpdChlLngsZS55K2kvMiksbmV3IFVpdChuLngsbi55K2kvMiksbmV3IFVpdChuLngrYS8yLG4ueS1pLzIpXSk7ci5hdXRvQ2xvc2U9ITA7Y29uc3Qgcz1uZXcgQ3B0KHIpO2lmKCF0KXtjb25zdCB0PXRoaXMuY3JlYXRlTWVzaChzLG8pO3JldHVybiBudWxsPT09dD9udWxsOih0aGlzLnNjZW5lLmFkZCh0KSx7dHlwZTpFdXQuVFJBUEVaT0lELGRhdGE6W2Usbl0sb2JqM2Q6dH0pfXJldHVybiBIdXQodGhpcy5iYWNrZ3JvdW5kQ29sb3IsdC5vYmozZCwoKCk9PnMpLG8pP3t0eXBlOkV1dC5UUkFQRVpPSUQsZGF0YTpbZSxuXSxvYmozZDp0Lm9iajNkfTp0fWZsdXNoKCl7dGhpcy5yZW5kZXJlci5yZW5kZXIodGhpcy5zY2VuZSx0aGlzLmNvb3JkaW5hdG9yLmdldENhbWVyYSgpKX19Y2xhc3MgTHV0e2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5yZW5kZXJDYWNoZT10LHRoaXMucmVuZGVyZXI9ZX1zZXRMaW5lKHQsZSxuKXtjb25zdCBvPXRoaXMucmVuZGVyZXIuY3JlYXRlT3JVcGRhdGVMaW5lT2JqZWN0KHRoaXMucmVuZGVyQ2FjaGUuZ2V0RnJvbVByZXZpb3VzRnJhbWUodCksZSxuKTtvJiZ0aGlzLnJlbmRlckNhY2hlLnNldFRvQ3VycmVudEZyYW1lKHQsbyl9c2V0VHJpYW5nbGUodCxlLG4pe2NvbnN0IG89dGhpcy5yZW5kZXJlci5jcmVhdGVPclVwZGF0ZVRyaWFuZ2xlT2JqZWN0KHRoaXMucmVuZGVyQ2FjaGUuZ2V0RnJvbVByZXZpb3VzRnJhbWUodCksZSxuKTtvJiZ0aGlzLnJlbmRlckNhY2hlLnNldFRvQ3VycmVudEZyYW1lKHQsbyl9c2V0Q2lyY2xlKHQsZSxuKXtjb25zdCBvPXRoaXMucmVuZGVyZXIuY3JlYXRlT3JVcGRhdGVDaXJjbGVPYmplY3QodGhpcy5yZW5kZXJDYWNoZS5nZXRGcm9tUHJldmlvdXNGcmFtZSh0KSxlLG4pO28mJnRoaXMucmVuZGVyQ2FjaGUuc2V0VG9DdXJyZW50RnJhbWUodCxvKX1zZXRUcmFwZXpvaWQodCxlLG4sbyl7Y29uc3QgaT10aGlzLnJlbmRlcmVyLmNyZWF0ZU9yVXBkYXRlVHJhcGV6b2lkT2JqZWN0KHRoaXMucmVuZGVyQ2FjaGUuZ2V0RnJvbVByZXZpb3VzRnJhbWUodCksZSxuLG8pO2kmJnRoaXMucmVuZGVyQ2FjaGUuc2V0VG9DdXJyZW50RnJhbWUodCxpKX19Y2xhc3MgQnV0e2NvbnN0cnVjdG9yKCl7dGhpcy5wcmV2RnJhbWVDYWNoZT1uZXcgTWFwLHRoaXMuY3VyckZyYW1lQ2FjaGU9bmV3IE1hcH1nZXRGcm9tUHJldmlvdXNGcmFtZSh0KXtjb25zdCBlPXRoaXMucHJldkZyYW1lQ2FjaGUuZ2V0KHQpO3JldHVybiBudWxsIT1lP2U6bnVsbH1zZXRUb0N1cnJlbnRGcmFtZSh0LGUpe3RoaXMuY3VyckZyYW1lQ2FjaGUuc2V0KHQsZSl9ZmluYWxpemVGcmFtZUFuZEdldFJlbW92ZWQoKXtjb25zdCB0PVtdO2Zvcihjb25zdFtlLG5db2YgdGhpcy5wcmV2RnJhbWVDYWNoZS5lbnRyaWVzKCkpdGhpcy5jdXJyRnJhbWVDYWNoZS5oYXMoZSl8fHQucHVzaChuKTtyZXR1cm4gdGhpcy5wcmV2RnJhbWVDYWNoZT10aGlzLmN1cnJGcmFtZUNhY2hlLHRoaXMuY3VyckZyYW1lQ2FjaGU9bmV3IE1hcCx0fX0hKGZ1bmN0aW9uKHQpe3RbdC5OVU1CRVI9MF09Ik5VTUJFUiIsdFt0Lk5BTj0xXT0iTkFOIn0pKEF1dHx8KEF1dD17fSkpO2NsYXNzIFZ1dCBleHRlbmRzIGNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMucmF3U2VyaWVzRGF0YT1bXSx0aGlzLnNlcmllcz1bXSx0aGlzLnBhaW50RGlydHk9ITAsdGhpcy5yZW5kZXJDYWNoZT1uZXcgQnV0LHRoaXMuY29vcmRpbmF0ZUlkZW50aWZpZXI9bnVsbCx0aGlzLmxheW91dD17eDowLHdpZHRoOjEseTowLGhlaWdodDoxfSx0aGlzLmdldE1ldGFkYXRhTWFwSW1wbD10LmdldE1ldGFkYXRhTWFwLHRoaXMuY29vcmRpbmF0b3I9dC5jb29yZGluYXRvcix0aGlzLnJlbmRlcmVyPXQucmVuZGVyZXIsdGhpcy5wYWludEJydXNoPW5ldyBMdXQodGhpcy5yZW5kZXJDYWNoZSx0aGlzLnJlbmRlcmVyKX1zZXRMYXlvdXRSZWN0KHQpe3RoaXMubGF5b3V0Lng9PT10LngmJnRoaXMubGF5b3V0LndpZHRoPT09dC53aWR0aCYmdGhpcy5sYXlvdXQueT09PXQueSYmdGhpcy5sYXlvdXQuaGVpZ2h0PT09dC5oZWlnaHR8fCh0aGlzLnBhaW50RGlydHk9ITApLHRoaXMubGF5b3V0PXR9Z2V0TGF5b3V0UmVjdCgpe3JldHVybiB0aGlzLmxheW91dH1nZXRNZXRhZGF0YU1hcCgpe3JldHVybiB0aGlzLmdldE1ldGFkYXRhTWFwSW1wbCgpfW1hcmtBc1BhaW50RGlydHkoKXt0aGlzLnBhaW50RGlydHk9ITB9cmVuZGVyKCl7aWYodGhpcy50cmFuc2Zvcm1Db29yZGluYXRlc0lmU3RhbGUoKSx0aGlzLnBhaW50RGlydHkpe3RoaXMucmVkcmF3KCk7Zm9yKGNvbnN0IHQgb2YgdGhpcy5yZW5kZXJDYWNoZS5maW5hbGl6ZUZyYW1lQW5kR2V0UmVtb3ZlZCgpKXRoaXMucmVuZGVyZXIuZGVzdHJveU9iamVjdCh0KTt0aGlzLnBhaW50RGlydHk9ITF9fWlzQ29vcmRpbmF0ZVVwZGF0ZWQoKXtyZXR1cm4gdGhpcy5jb29yZGluYXRvci5nZXRVcGRhdGVJZGVudGlmaWVyKCkhPT10aGlzLmNvb3JkaW5hdGVJZGVudGlmaWVyfWNsZWFyQ29vcmRpbmF0ZUlkZW50aWZpZXIoKXt0aGlzLmNvb3JkaW5hdGVJZGVudGlmaWVyPW51bGx9c2V0RGF0YSh0KXt0aGlzLmNsZWFyQ29vcmRpbmF0ZUlkZW50aWZpZXIoKSx0aGlzLnJhd1Nlcmllc0RhdGE9dH10cmFuc2Zvcm1Db29yZGluYXRlc0lmU3RhbGUoKXtpZighdGhpcy5pc0Nvb3JkaW5hdGVVcGRhdGVkKCkpcmV0dXJuO2NvbnN0IHQ9dGhpcy5nZXRMYXlvdXRSZWN0KCk7dGhpcy5zZXJpZXM9bmV3IEFycmF5KHRoaXMucmF3U2VyaWVzRGF0YS5sZW5ndGgpO2ZvcihsZXQgZT0wO2U8dGhpcy5yYXdTZXJpZXNEYXRhLmxlbmd0aDtlKyspe2NvbnN0IG49dGhpcy5yYXdTZXJpZXNEYXRhW2VdO3RoaXMuc2VyaWVzW2VdPXtpZDpuLmlkLHBvbHlsaW5lOm5ldyBGbG9hdDMyQXJyYXkoMipuLnBvaW50cy5sZW5ndGgpfTtmb3IobGV0IG89MDtvPG4ucG9pbnRzLmxlbmd0aDtvKyspe2NvbnN0W2ksYV09dGhpcy5jb29yZGluYXRvci50cmFuc2Zvcm1EYXRhVG9VaUNvb3JkKHQsW24ucG9pbnRzW29dLngsbi5wb2ludHNbb10ueV0pO3RoaXMuc2VyaWVzW2VdLnBvbHlsaW5lWzIqb109aSx0aGlzLnNlcmllc1tlXS5wb2x5bGluZVsyKm8rMV09YX19dGhpcy5jb29yZGluYXRlSWRlbnRpZmllcj10aGlzLmNvb3JkaW5hdG9yLmdldFVwZGF0ZUlkZW50aWZpZXIoKSx0aGlzLm1hcmtBc1BhaW50RGlydHkoKX19e3JlY29yZFBhcnRpdGlvbih0LGUsbil7cmV0dXJuIHQ/e3R5cGU6QXV0Lk5VTUJFUixwb2x5bGluZTplfTp7dHlwZTpBdXQuTkFOLHBvbHlsaW5lOmUubWFwKCgodCxlKT0+aXNOYU4odCk/ZSUyPT0wP24ueDpuLnk6dCkpfX1wYXJ0aXRpb25Qb2x5bGluZSh0KXtjb25zdCBlPVtdO2xldCBuPTAsbz0hMTtjb25zdCBpPXRoaXMuY29vcmRpbmF0b3IudHJhbnNmb3JtRGF0YVRvVWlDb29yZCh0aGlzLmdldExheW91dFJlY3QoKSxbMCwwXSksYT17eDppWzBdLHk6aVsxXX07bGV0IHI9bnVsbDtmb3IobGV0IGk9MDtpPHQubGVuZ3RoO2krPTIpe2NvbnN0IGE9dFtpXSxzPXRbaSsxXSxsPWlzTmFOKGEpfHxpc05hTihzKTtsIT09byYmbiE9PWkmJihlLnB1c2godGhpcy5yZWNvcmRQYXJ0aXRpb24oIW8sdC5zbGljZShuLGkpLG51bGw9PT1yP3t4OmEseTpzfTpyKSksbj1pKSxsfHwocj17eDphLHk6c30pLG89bH1yZXR1cm4gbiE9PXQubGVuZ3RoLTEmJmUucHVzaCh0aGlzLnJlY29yZFBhcnRpdGlvbighbyx0LnNsaWNlKG4sdC5sZW5ndGgpLG51bGwhPXI/cjphKSksZX1yZWRyYXcoKXt2YXIgdCxlLG47Zm9yKGNvbnN0IG8gb2YgdGhpcy5zZXJpZXMpe2NvbnN0IGk9dGhpcy5nZXRNZXRhZGF0YU1hcCgpW28uaWRdO2lmKCFpKWNvbnRpbnVlO2lmKG8ucG9seWxpbmUubGVuZ3RoJTIhPTApdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgaGF2ZSBvZGQgbGVuZ3RoLWVkIHBvbHlsaW5lOiAke28ucG9seWxpbmUubGVuZ3RofWApO2NvbnN0IGE9dGhpcy5wYXJ0aXRpb25Qb2x5bGluZShvLnBvbHlsaW5lKTtmb3IoY29uc3Rbcix7dHlwZTpzLHBvbHlsaW5lOmx9XW9mIGEuZW50cmllcygpKWlmKHM9PT1BdXQuTlVNQkVSKTI9PT1sLmxlbmd0aD90aGlzLnBhaW50QnJ1c2guc2V0Q2lyY2xlKEpTT04uc3RyaW5naWZ5KFsiY2lyY2xlIixvLmlkLHJdKSx7eDpsWzBdLHk6bFsxXX0se2NvbG9yOmkuY29sb3IsdmlzaWJsZTppLnZpc2libGUsb3BhY2l0eTpudWxsIT09KHQ9aS5vcGFjaXR5KSYmdm9pZCAwIT09dD90OjEscmFkaXVzOjR9KTp0aGlzLnBhaW50QnJ1c2guc2V0TGluZShKU09OLnN0cmluZ2lmeShbImxpbmUiLG8uaWQscl0pLGwse2NvbG9yOmkuY29sb3IsdmlzaWJsZTppLnZpc2libGUsb3BhY2l0eTpudWxsIT09KGU9aS5vcGFjaXR5KSYmdm9pZCAwIT09ZT9lOjEsd2lkdGg6Mn0pO2Vsc2UgaWYoIWkuYXV4KWZvcihsZXQgdD0wO3Q8bC5sZW5ndGg7dCs9Mil0aGlzLnBhaW50QnJ1c2guc2V0VHJpYW5nbGUoSlNPTi5zdHJpbmdpZnkoWyJOYU4iLG8uaWQsbFt0XSxsW3QrMV1dKSx7eDpsW3RdLHk6bFt0KzFdfSx7Y29sb3I6aS5jb2xvcix2aXNpYmxlOmkudmlzaWJsZSxvcGFjaXR5Om51bGwhPT0obj1pLm9wYWNpdHkpJiZ2b2lkIDAhPT1uP246MSxzaXplOjEyfSl9fX1jbGFzcyBqdXQgZXh0ZW5kcyBjaXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY2FtZXJhPW5ldyBJbXQoMCwxZTMsMWUzLDAsMCwxMDApfWlzWUF4aXNQb2ludGVkRG93bigpe3JldHVybiExfXNldERvbUNvbnRhaW5lclJlY3QodCl7c3VwZXIuc2V0RG9tQ29udGFpbmVyUmVjdCh0KSx0aGlzLmNhbWVyYS5sZWZ0PXQueCx0aGlzLmNhbWVyYS5yaWdodD10LngrdC53aWR0aCx0aGlzLmNhbWVyYS50b3A9dC55K3QuaGVpZ2h0LHRoaXMuY2FtZXJhLmJvdHRvbT10LnksdGhpcy5jYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfWdldENhbWVyYSgpe3JldHVybiB0aGlzLmNhbWVyYX19Y2xhc3MgVXV0e2NvbnN0cnVjdG9yKHQpe3N3aXRjaCh0aGlzLm1ldGFkYXRhTWFwPXt9LHRoaXMuc2hvdWxkUmVwYWludD0hMSx0aGlzLmNhbGxiYWNrcz10LmNhbGxiYWNrcyx0LnR5cGUpe2Nhc2UgYTUuU1ZHOnRoaXMuY29vcmRpbmF0b3I9bmV3IGNpdCx0aGlzLnJlbmRlcmVyPW5ldyBwaXQodC5jb250YWluZXIpO2JyZWFrO2Nhc2UgYTUuV0VCR0w6e2NvbnN0IGU9bmV3IGp1dDt0aGlzLmNvb3JkaW5hdG9yPWUsdGhpcy5yZW5kZXJlcj1uZXcgRnV0KHQuY29udGFpbmVyLGUsdC5kZXZpY2VQaXhlbFJhdGlvKTticmVha319dGhpcy5yZW5kZXJlci5zZXRVc2VEYXJrTW9kZSh0LnVzZURhcmtNb2RlKSx0aGlzLnNlcmllc0xpbmVWaWV3PW5ldyBWdXQoe3JlbmRlcmVyOnRoaXMucmVuZGVyZXIsY29vcmRpbmF0b3I6dGhpcy5jb29yZGluYXRvcixnZXRNZXRhZGF0YU1hcDooKT0+dGhpcy5tZXRhZGF0YU1hcH0pLHRoaXMucmVzaXplKHQuZG9tRGltZW5zaW9uKX1kaXNwb3NlKCl7fXNldFhTY2FsZVR5cGUodCl7dGhpcy5jb29yZGluYXRvci5zZXRYU2NhbGUobml0KHQpKSx0aGlzLnNjaGVkdWxlUmVwYWludCgpfXNldFlTY2FsZVR5cGUodCl7dGhpcy5jb29yZGluYXRvci5zZXRZU2NhbGUobml0KHQpKSx0aGlzLnNjaGVkdWxlUmVwYWludCgpfXJlc2l6ZSh0KXt0aGlzLmNvb3JkaW5hdG9yLnNldERvbUNvbnRhaW5lclJlY3QoT2JqZWN0LmFzc2lnbih7eDowLHk6MH0sdCkpLHRoaXMucmVuZGVyZXIub25SZXNpemUoT2JqZWN0LmFzc2lnbih7eDowLHk6MH0sdCkpLHRoaXMuc2VyaWVzTGluZVZpZXcuc2V0TGF5b3V0UmVjdChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3g6MCx5OjB9KSksdGhpcy5zY2hlZHVsZVJlcGFpbnQoKX1zZXRNZXRhZGF0YSh0KXtsZXQgZT0hMTtPYmplY3QuZW50cmllcyh0KS5mb3JFYWNoKCgoW3Qsbl0pPT57Y29uc3Qgbz10aGlzLm1ldGFkYXRhTWFwW3RdO28mJm4uY29sb3I9PT1vLmNvbG9yJiZuLnZpc2libGU9PT1vLnZpc2libGUmJm4ub3BhY2l0eT09PW8ub3BhY2l0eXx8KGU9ITApLHRoaXMubWV0YWRhdGFNYXBbdF09bn0pKSxlJiZ0aGlzLnNlcmllc0xpbmVWaWV3Lm1hcmtBc1BhaW50RGlydHkoKSx0aGlzLnNjaGVkdWxlUmVwYWludCgpfXNldFZpZXdCb3godCl7dGhpcy5jb29yZGluYXRvci5zZXRWaWV3Qm94UmVjdCh7eDp0LnhbMF0sd2lkdGg6dC54WzFdLXQueFswXSx5OnQueVswXSxoZWlnaHQ6dC55WzFdLXQueVswXX0pLHRoaXMuc2NoZWR1bGVSZXBhaW50KCl9c2V0RGF0YSh0KXt0aGlzLnNlcmllc0xpbmVWaWV3LnNldERhdGEodCksdGhpcy5zY2hlZHVsZVJlcGFpbnQoKX1zZXRVc2VEYXJrTW9kZSh0KXt0aGlzLnJlbmRlcmVyLnNldFVzZURhcmtNb2RlKHQpLHRoaXMuc2NoZWR1bGVSZXBhaW50KCl9c2NoZWR1bGVSZXBhaW50KCl7dGhpcy5zaG91bGRSZXBhaW50fHwodGhpcy5zaG91bGRSZXBhaW50PSEwLHNlbGYucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgoKT0+e3RoaXMucmVwYWludCgpLHRoaXMuc2hvdWxkUmVwYWludD0hMX0pKSl9cmVwYWludCgpe3RoaXMuc2VyaWVzTGluZVZpZXcucmVuZGVyKCksdGhpcy5yZW5kZXJlci5mbHVzaCgpLHRoaXMuY2FsbGJhY2tzLm9uRHJhd0VuZCgpfX1mdW5jdGlvbiBXdXQodCl7aWYodC5pbmNsdWRlcygiLyIpKXRocm93IG5ldyBSYW5nZUVycm9yKCJXb3JrZXIgZmFjdG9yeSBvbmx5IGFsbG93cyBmaWxlIG5hbWUgYW5kIG5vIHJlc291cmNlIHBhdGguIik7cmV0dXJuIG5ldyBXb3JrZXIodCl9IShmdW5jdGlvbih0KXt0W3QuU0VSSUVTX0RBVEFfVVBEQVRFRD0wXT0iU0VSSUVTX0RBVEFfVVBEQVRFRCIsdFt0LlNFUklFU19NRVRBREFUQV9DSEFOR0VEPTFdPSJTRVJJRVNfTUVUQURBVEFfQ0hBTkdFRCIsdFt0LlNDQUxFX1VQREFURUQ9Ml09IlNDQUxFX1VQREFURUQiLHRbdC5WSUVXX0JPWF9VUERBVEVEPTNdPSJWSUVXX0JPWF9VUERBVEVEIix0W3QuSU5JVD00XT0iSU5JVCIsdFt0LkRPTV9SRVNJWkVEPTVdPSJET01fUkVTSVpFRCIsdFt0LkRBUktfTU9ERV9VUERBVEVEPTZdPSJEQVJLX01PREVfVVBEQVRFRCJ9KShSdXR8fChSdXQ9e30pKSwoZnVuY3Rpb24odCl7dFt0Lk9OX1JFRFJBV19FTkQ9MF09Ik9OX1JFRFJBV19FTkQifSkoVHV0fHwoVHV0PXt9KSk7Y2xhc3MgR3V0e2NvbnN0cnVjdG9yKHQpe2lmKHRoaXMuY2FsbGJhY2tzPXQuY2FsbGJhY2tzLHQudHlwZSE9PWE1LldFQkdMKXRocm93IG5ldyBSYW5nZUVycm9yKGBDYW5ub3QgdXNlIG5vbiBXRUJHTCByZW5kZXJlciBmb3IgdGhlIG9mZnNjcmVlbiBsaW5lIGNoYXJ0LiBSZWNlaXZlZCAke2E1W3QudHlwZV19IGApO2NvbnN0IGU9bmV3IE1lc3NhZ2VDaGFubmVsO2UucG9ydDEub25tZXNzYWdlPXQ9Pnt0aGlzLm9uTWVzc2FnZUZyb21Xb3JrZXIodC5kYXRhKX0sdGhpcy50eE1lc3NhZ2VQb3J0PWUucG9ydDE7Y29uc3Qgbj10LmNvbnRhaW5lci50cmFuc2ZlckNvbnRyb2xUb09mZnNjcmVlbigpO3RoaXMud29ya2VySW5zdGFuY2U9R3V0LndvcmtlclBvb2wuZ2V0TmV4dCgpO2NvbnN0IG89e3R5cGU6UnV0LklOSVQsY2FudmFzOm4sZGV2aWNlUGl4ZWxSYXRpbzp3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyxkaW06dC5kb21EaW1lbnNpb24scmVuZGVyZXJUeXBlOnQudHlwZSx1c2VEYXJrTW9kZTp0LnVzZURhcmtNb2RlfTt0aGlzLndvcmtlckluc3RhbmNlLnBvc3RNZXNzYWdlKG8sW24sZS5wb3J0Ml0pfWRpc3Bvc2UoKXt0aGlzLndvcmtlckluc3RhbmNlLmZyZWUoKSx0aGlzLnR4TWVzc2FnZVBvcnQuY2xvc2UoKX1zZXRYU2NhbGVUeXBlKHQpe3RoaXMuc2VuZE1lc3NhZ2Uoe3R5cGU6UnV0LlNDQUxFX1VQREFURUQsYXhpczoieCIsc2NhbGVUeXBlOnR9KX1zZXRZU2NhbGVUeXBlKHQpe3RoaXMuc2VuZE1lc3NhZ2Uoe3R5cGU6UnV0LlNDQUxFX1VQREFURUQsYXhpczoieSIsc2NhbGVUeXBlOnR9KX1yZXNpemUodCl7dGhpcy5zZW5kTWVzc2FnZSh7dHlwZTpSdXQuRE9NX1JFU0laRUQsZGltOnR9KX1zZXRNZXRhZGF0YSh0KXt0aGlzLnNlbmRNZXNzYWdlKHt0eXBlOlJ1dC5TRVJJRVNfTUVUQURBVEFfQ0hBTkdFRCxtZXRhZGF0YTp0fSl9c2V0Vmlld0JveCh0KXt0aGlzLnNlbmRNZXNzYWdlKHt0eXBlOlJ1dC5WSUVXX0JPWF9VUERBVEVELGV4dGVudDp0fSl9c2V0RGF0YSh0KXtjb25zdCBlPShmdW5jdGlvbiBuKHQpe2NvbnN0IGU9dC5yZWR1Y2UoKCh0LGUpPT50K2UucG9pbnRzLmxlbmd0aCksMCk7bGV0IG49MDtjb25zdCBvPW5ldyBGbG9hdDY0QXJyYXkoMiplKSxpPVtdO2Zvcihjb25zdCBlIG9mIHQpe2kucHVzaCh7aWQ6ZS5pZCxsZW5ndGg6ZS5wb2ludHMubGVuZ3RofSk7Zm9yKGxldCB0PTA7dDxlLnBvaW50cy5sZW5ndGg7dCsrKW9bbisrXT1lLnBvaW50c1t0XS54LG9bbisrXT1lLnBvaW50c1t0XS55fXJldHVybntpZHNBbmRMZW5ndGhzOmksZmxhdHRlbmVkU2VyaWVzOm8uYnVmZmVyfX0pKHQpO3RoaXMuc2VuZE1lc3NhZ2Uoe3R5cGU6UnV0LlNFUklFU19EQVRBX1VQREFURUQsY29tcGFjdERhdGFTZXJpZXM6ZX0sW2UuZmxhdHRlbmVkU2VyaWVzXSl9c2V0VXNlRGFya01vZGUodCl7dGhpcy5zZW5kTWVzc2FnZSh7dHlwZTpSdXQuREFSS19NT0RFX1VQREFURUQsdXNlRGFya01vZGU6dH0pfXNlbmRNZXNzYWdlKHQsZSl7ZT90aGlzLnR4TWVzc2FnZVBvcnQucG9zdE1lc3NhZ2UodCxlKTp0aGlzLnR4TWVzc2FnZVBvcnQucG9zdE1lc3NhZ2UodCl9b25NZXNzYWdlRnJvbVdvcmtlcih0KXtzd2l0Y2godC50eXBlKXtjYXNlIFR1dC5PTl9SRURSQVdfRU5EOnRoaXMuY2FsbGJhY2tzLm9uRHJhd0VuZCgpfX19ZnVuY3Rpb24gWXV0KHQsZSl7cmV0dXJuIngiPT09ZT9bMCx0LndpZHRoXTpbdC5oZWlnaHQsMF19ZnVuY3Rpb24gcXV0KHQsZSl7Y29uc3Qgbj1NYXRoLmZsb29yKHQvNTApO3JldHVybiBNYXRoLm1pbihuLGUpfWZ1bmN0aW9uIFp1dCh0LGUpe2lmKDEmdCYmKEhhKCksd3UoMCwibGluZSIsMikpLDImdCl7Y29uc3QgdD1lLiRpbXBsaWNpdCxuPUx1KCk7YWYoInplcm8iLDA9PT10KSxObSgieDEiLG4uZ2V0RG9tWCh0KSkoIngyIixuLmdldERvbVgodCkpKCJ5MiIsbi5kb21EaW0uaGVpZ2h0KX19ZnVuY3Rpb24gWHV0KHQsZSl7aWYoMSZ0JiYoSGEoKSx3dSgwLCJsaW5lIiwzKSksMiZ0KXtjb25zdCB0PWUuJGltcGxpY2l0LG49THUoKTthZigiemVybyIsMD09PXQpLE5tKCJ5MSIsbi5nZXREb21ZKHQpKSgieDIiLG4uZG9tRGltLndpZHRoKSgieTIiLG4uZ2V0RG9tWSh0KSl9fUd1dC53b3JrZXJQb29sPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGU9MTAsbj1XdXQpe3RoaXMud29ya2VyUmVzb3VyY2VQYXRoPXQsdGhpcy5tYXhQb29sU2l6ZT1lLHRoaXMud29ya2VyRmFjdG9yeT1uLHRoaXMud29ya2Vycz1bXX1nZXROZXh0KCl7bGV0IHQ7aWYodGhpcy53b3JrZXJzLmV2ZXJ5KCgoe2FjdGl2ZUNvdW50OnR9KT0+dD4wKSkmJnRoaXMud29ya2Vycy5sZW5ndGg8dGhpcy5tYXhQb29sU2l6ZSl7Y29uc3QgZT10aGlzLndvcmtlckZhY3RvcnkodGhpcy53b3JrZXJSZXNvdXJjZVBhdGgpO3Q9e2FjdGl2ZUNvdW50OjAscG9zdE1lc3NhZ2U6KHQsbik9PntlLnBvc3RNZXNzYWdlKHQsbil9LGZyZWU6KCk9Pnt0LmFjdGl2ZUNvdW50PU1hdGgubWF4KHQuYWN0aXZlQ291bnQtMSwwKX19LHRoaXMud29ya2Vycy5wdXNoKHQpfWVsc2V7Y29uc3QgZT10aGlzLndvcmtlcnMubWFwKCgoe2FjdGl2ZUNvdW50OnR9KT0+dCkpLG49ZS5pbmRleE9mKE1hdGgubWluKC4uLmUpKTt0PXRoaXMud29ya2Vyc1tuXX1yZXR1cm4gdC5hY3RpdmVDb3VudCsrLHR9fSgiY2hhcnRfd29ya2VyLmpzP19maWxlX2hhc2g9ZmM2Y2QyMzYiKTtjbGFzcyBLdXR7Z2V0RG9tWCh0KXtyZXR1cm4gdGhpcy54U2NhbGUuZm9yd2FyZCh0aGlzLnZpZXdFeHRlbnQueCxZdXQodGhpcy5kb21EaW0sIngiKSx0KX1nZXREb21ZKHQpe3JldHVybiB0aGlzLnlTY2FsZS5mb3J3YXJkKHRoaXMudmlld0V4dGVudC55LFl1dCh0aGlzLmRvbURpbSwieSIpLHQpfWdldFhUaWNrcygpe3JldHVybiB0aGlzLnhTY2FsZS50aWNrcyh0aGlzLnZpZXdFeHRlbnQueCxxdXQodGhpcy5kb21EaW0ud2lkdGgsdGhpcy54R3JpZENvdW50KSl9Z2V0WVRpY2tzKCl7cmV0dXJuIHRoaXMueVNjYWxlLnRpY2tzKHRoaXMudmlld0V4dGVudC55LHF1dCh0aGlzLmRvbURpbS5oZWlnaHQsdGhpcy55R3JpZENvdW50KSl9fWZ1bmN0aW9uIEp1dCh0LGUsbixvLGksYSl7bGV0IHI7c3dpdGNoKHQuZGVsdGFNb2RlKXtjYXNlIFdoZWVsRXZlbnQuRE9NX0RFTFRBX1BJWEVMOnI9MTticmVhaztjYXNlIFdoZWVsRXZlbnQuRE9NX0RFTFRBX0xJTkU6cj04O2JyZWFrO2Nhc2UgV2hlZWxFdmVudC5ET01fREVMVEFfUEFHRTpyPTIwO2JyZWFrO2RlZmF1bHQ6cj0xLGNvbnNvbGUud2FybihgVW5rbm93biBXaGVlbEV2ZW50IGRlbHRhTW9kZTogJHt0LmRlbHRhTW9kZX0uYCl9Y29uc3Qgcz10LmRlbHRhWSpyLGw9czwwP01hdGgubWF4KHMqbywtLjk1KTpzKm8se3dpZHRoOmMsaGVpZ2h0OmR9PW4scD1baS5yZXZlcnNlKGUueCxbMCxjXSwtdC5vZmZzZXRYKmwpLGkucmV2ZXJzZShlLngsWzAsY10sYysoYy10Lm9mZnNldFgpKmwpXSxtPVthLnJldmVyc2UoZS55LFtkLDBdLC10Lm9mZnNldFkqbCksYS5yZXZlcnNlKGUueSxbZCwwXSxkKyhkLXQub2Zmc2V0WSkqbCldO3JldHVybnt4OnBbMV08cFswXT9bcFsxXSxwWzBdXTpwLHk6bVsxXTxtWzBdP1ttWzFdLG1bMF1dOm19fUt1dC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8S3V0KX0sS3V0Lsm1Y21wPVVvKHt0eXBlOkt1dCxzZWxlY3RvcnM6W1sibGluZS1jaGFydC1ncmlkLXZpZXciXV0saW5wdXRzOnt2aWV3RXh0ZW50OiJ2aWV3RXh0ZW50Iix4U2NhbGU6InhTY2FsZSIseEdyaWRDb3VudDoieEdyaWRDb3VudCIseVNjYWxlOiJ5U2NhbGUiLHlHcmlkQ291bnQ6InlHcmlkQ291bnQiLGRvbURpbToiZG9tRGltIn0sZGVjbHM6Myx2YXJzOjIsY29uc3RzOltbInkxIiwiMCIsMywiemVybyIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJ4MSIsIjAiLDMsInplcm8iLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsieTEiLCIwIl0sWyJ4MSIsIjAiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKEhhKCksT3UoMCwic3ZnIiksV20oMSxadXQsMSw1LCJsaW5lIiwwKSxXbSgyLFh1dCwxLDUsImxpbmUiLDEpLFB1KCkpLDImZSYmKEpjKDEpLHZ1KCJuZ0Zvck9mIixuLmdldFhUaWNrcygpKSxKYygxKSx2dSgibmdGb3JPZiIsbi5nZXRZVGlja3MoKSkpfSxkaXJlY3RpdmVzOltvdl0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICB9XG5cbiAgICAgIHN2Z1tfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgfVxuXG4gICAgICBsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIHN0cm9rZTogI2NjYztcbiAgICAgICAgc3Ryb2tlLXdpZHRoOiAxcHg7XG4gICAgICB9XG5cbiAgICAgIC56ZXJvW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIHN0cm9rZTogI2FhYTtcbiAgICAgICAgc3Ryb2tlLXdpZHRoOiAxLjVweDtcbiAgICAgIH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoS3V0LFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6ImxpbmUtY2hhcnQtZ3JpZC12aWV3Iix0ZW1wbGF0ZTonPHN2Zz5cbiAgICA8bGluZVxuICAgICAgKm5nRm9yPSJsZXQgdGljayBvZiBnZXRYVGlja3MoKSJcbiAgICAgIFtjbGFzcy56ZXJvXT0idGljayA9PT0gMCJcbiAgICAgIFthdHRyLngxXT0iZ2V0RG9tWCh0aWNrKSJcbiAgICAgIHkxPSIwIlxuICAgICAgW2F0dHIueDJdPSJnZXREb21YKHRpY2spIlxuICAgICAgW2F0dHIueTJdPSJkb21EaW0uaGVpZ2h0IlxuICAgID48L2xpbmU+XG4gICAgPGxpbmVcbiAgICAgICpuZ0Zvcj0ibGV0IHRpY2sgb2YgZ2V0WVRpY2tzKCkiXG4gICAgICBbY2xhc3MuemVyb109InRpY2sgPT09IDAiXG4gICAgICB4MT0iMCJcbiAgICAgIFthdHRyLnkxXT0iZ2V0RG9tWSh0aWNrKSJcbiAgICAgIFthdHRyLngyXT0iZG9tRGltLndpZHRoIlxuICAgICAgW2F0dHIueTJdPSJnZXREb21ZKHRpY2spIlxuICAgID48L2xpbmU+XG4gIDwvc3ZnPicsc3R5bGVzOlsiXG4gICAgICA6aG9zdCB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICB9XG5cbiAgICAgIHN2ZyB7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICB9XG5cbiAgICAgIGxpbmUge1xuICAgICAgICBzdHJva2U6ICNjY2M7XG4gICAgICAgIHN0cm9rZS13aWR0aDogMXB4O1xuICAgICAgfVxuXG4gICAgICAuemVybyB7XG4gICAgICAgIHN0cm9rZTogI2FhYTtcbiAgICAgICAgc3Ryb2tlLXdpZHRoOiAxLjVweDtcbiAgICAgIH1cbiAgICAiXSxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSxudWxsLHt2aWV3RXh0ZW50Olt7dHlwZTp5X31dLHhTY2FsZTpbe3R5cGU6eV99XSx4R3JpZENvdW50Olt7dHlwZTp5X31dLHlTY2FsZTpbe3R5cGU6eV99XSx5R3JpZENvdW50Olt7dHlwZTp5X31dLGRvbURpbTpbe3R5cGU6eV99XX0pLChmdW5jdGlvbih0KXt0W3QuTEVGVD0xXT0iTEVGVCIsdFt0LlJJR0hUPTJdPSJSSUdIVCIsdFt0Lk1JRERMRT00XT0iTUlERExFIix0W3QuRk9VUlRIPThdPSJGT1VSVEgiLHRbdC5GSUZUSD0zMl09IkZJRlRIIn0pKE51dHx8KE51dD17fSkpO2NvbnN0IFF1dD1bImRvdHMiXTtmdW5jdGlvbiAkdXQodCxlKXtpZigxJnQmJihIYSgpLHd1KDAsImNpcmNsZSIsMTIpKSwyJnQpe2NvbnN0IHQ9THUoKS4kaW1wbGljaXQsZT1MdSgyKTtObSgiY3giLGUuZ2V0RG9tWCh0LnBvaW50LngpKSgiY3kiLGUuZ2V0RG9tWSh0LnBvaW50LnkpKSgiZmlsbCIsdC5tZXRhZGF0YS5jb2xvcil9fWZ1bmN0aW9uIHRmdCh0LGUpe2lmKDEmdCYmKEhhKCksa3UoMCksV20oMSwkdXQsMSwzLCJjaXJjbGUiLDExKSxTdSgpKSwyJnQpe2NvbnN0IHQ9ZS4kaW1wbGljaXQsbj1MdSgyKTtKYygxKSx2dSgibmdJZiIsbi5zaG91bGRSZW5kZXJUb29sdGlwUG9pbnQodC5wb2ludCkpfX1mdW5jdGlvbiBlZnQodCxlKXtpZigxJnQmJihIYSgpLGt1KDApLFdtKDEsdGZ0LDIsMSwibmctY29udGFpbmVyIiwxMCksU3UoKSksMiZ0KXtjb25zdCB0PUx1KCk7SmMoMSksdnUoIm5nRm9yT2YiLHQuY3Vyc29yZWREYXRhKSgibmdGb3JUcmFja0J5Iix0LnRyYWNrQnlTZXJpZXNOYW1lKX19ZnVuY3Rpb24gbmZ0KHQsZSl7aWYoMSZ0JiYoSGEoKSx3dSgwLCJyZWN0IiwxMykpLDImdCl7Y29uc3QgdD1MdSgpO05tKCJ4Iix0Lnpvb21Cb3hJblVpQ29vcmRpbmF0ZS54KSgid2lkdGgiLHQuem9vbUJveEluVWlDb29yZGluYXRlLndpZHRoKSgieSIsdC56b29tQm94SW5VaUNvb3JkaW5hdGUueSkoImhlaWdodCIsdC56b29tQm94SW5VaUNvb3JkaW5hdGUuaGVpZ2h0KX19Y29uc3Qgb2Z0PWZ1bmN0aW9uKHQsZSl7cmV0dXJue2RhdGE6dCxjdXJzb3JMb2NhdGlvbkluRGF0YUNvb3JkOmV9fTtmdW5jdGlvbiBpZnQodCxlKXtpZigxJnQmJihPdSgwLCJkaXYiLDE0KSxEdSgxLDE1KSxQdSgpKSwyJnQpe2NvbnN0IHQ9THUoKSxlPUdtKDExKTtKYygxKSx2dSgibmdUZW1wbGF0ZU91dGxldCIsdC50b29sdGlwVGVtcGxhdGU/dC50b29sdGlwVGVtcGxhdGU6ZSkoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixoYigyLG9mdCx0LmN1cnNvcmVkRGF0YSx0LmN1cnNvckxvY2F0aW9uSW5EYXRhQ29vcmQpKX19ZnVuY3Rpb24gYWZ0KHQsZSl7aWYoMSZ0JiYoa3UoMCksT3UoMSwidHIiLDE3KSxPdSgyLCJ0ZCIsMTgpLHd1KDMsInNwYW4iKSxQdSgpLE91KDQsInRkIiwxOSksTWYoNSksUHUoKSxPdSg2LCJ0ZCIpLE1mKDcpLFB1KCksT3UoOCwidGQiKSxNZig5KSxQdSgpLFB1KCksU3UoKSksMiZ0KXtjb25zdCB0PWUuJGltcGxpY2l0O0pjKDMpLG9mKCJiYWNrZ3JvdW5kLWNvbG9yIix0Lm1ldGFkYXRhLmNvbG9yKSxKYygyKSx2Zih0Lm1ldGFkYXRhLmRpc3BsYXlOYW1lKSxKYygyKSx2Zih0LnBvaW50LnkpLEpjKDIpLHZmKHQucG9pbnQueCl9fWZ1bmN0aW9uIHJmdCh0LGUpe2lmKDEmdCYmKE91KDAsInRhYmxlIiksT3UoMSwidGhlYWQiKSxPdSgyLCJ0ciIpLHd1KDMsInRoIiwxNiksT3UoNCwidGgiKSxNZig1LCJOYW1lIiksUHUoKSxPdSg2LCJ0aCIpLE1mKDcsIlkiKSxQdSgpLE91KDgsInRoIiksTWYoOSwiWCIpLFB1KCksUHUoKSxQdSgpLE91KDEwLCJ0Ym9keSIpLFdtKDExLGFmdCwxMCw1LCJuZy1jb250YWluZXIiLDEwKSxQdSgpLFB1KCkpLDImdCl7Y29uc3QgdD1lLmRhdGEsbj1MdSgpO0pjKDExKSx2dSgibmdGb3JPZiIsdCkoIm5nRm9yVHJhY2tCeSIsbi50cmFja0J5U2VyaWVzTmFtZSl9fXZhciBzZnQ7ZnVuY3Rpb24gbGZ0KHQpe3JldHVybiB0LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpfSEoZnVuY3Rpb24odCl7dFt0Lk5PTkU9MF09Ik5PTkUiLHRbdC5EUkFHX1pPT01JTkc9MV09IkRSQUdfWk9PTUlORyIsdFt0LlNDUk9MTF9aT09NSU5HPTJdPSJTQ1JPTExfWk9PTUlORyIsdFt0LlBBTk5JTkc9M109IlBBTk5JTkcifSkoc2Z0fHwoc2Z0PXt9KSk7Y2xhc3MgY2Z0e2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5jaGFuZ2VEZXRlY3Rvcj10LHRoaXMuc2Nyb2xsU3RyYXRlZ3k9ZSx0aGlzLm9uVmlld0V4dGVudENoYW5nZT1uZXcgQWIsdGhpcy5vblZpZXdFeHRlbnRSZXNldD1uZXcgQWIsdGhpcy5JbnRlcmFjdGlvblN0YXRlPXNmdCx0aGlzLnN0YXRlPXNmdC5OT05FLHRoaXMuc3BlY2lhbEtleVByZXNzZWQ9ITEsdGhpcy56b29tQm94SW5VaUNvb3JkaW5hdGU9e3g6MCx3aWR0aDowLGhlaWdodDowLHk6MH0sdGhpcy50b29sdGlwUG9zaXRpb25zPVt7b2Zmc2V0WTo1LG9yaWdpblg6InN0YXJ0IixvdmVybGF5WDoic3RhcnQiLG9yaWdpblk6ImJvdHRvbSIsb3ZlcmxheVk6InRvcCJ9LHtvZmZzZXRZOjUsb3JpZ2luWDoiZW5kIixvdmVybGF5WDoiZW5kIixvcmlnaW5ZOiJib3R0b20iLG92ZXJsYXlZOiJ0b3AifSx7b2Zmc2V0WTotMTUsb3JpZ2luWDoic3RhcnQiLG92ZXJsYXlYOiJzdGFydCIsb3JpZ2luWToidG9wIixvdmVybGF5WToiYm90dG9tIn0se29mZnNldFk6LTE1LG9yaWdpblg6ImVuZCIsb3ZlcmxheVg6ImVuZCIsb3JpZ2luWToidG9wIixvdmVybGF5WToiYm90dG9tIn0se29mZnNldFg6NSxvcmlnaW5YOiJlbmQiLG92ZXJsYXlYOiJzdGFydCIsb3JpZ2luWToidG9wIixvdmVybGF5WToidG9wIn0se29mZnNldFg6LTUsb3JpZ2luWDoic3RhcnQiLG92ZXJsYXlYOiJlbmQiLG9yaWdpblk6InRvcCIsb3ZlcmxheVk6InRvcCJ9XSx0aGlzLmN1cnNvckxvY2F0aW9uSW5EYXRhQ29vcmQ9bnVsbCx0aGlzLmN1cnNvcmVkRGF0YT1bXSx0aGlzLnRvb2x0aXBEaXNwbGF5QXR0YWNoZWQ9ITEsdGhpcy5zaG93Wm9vbUluc3RydWN0aW9uPSExLHRoaXMuZHJhZ1N0YXJ0Q29vcmQ9bnVsbCx0aGlzLmlzQ3Vyc29ySW5zaWRlPSExLHRoaXMubmdVbnN1YnNjcmliZT1uZXcgeH1uZ0FmdGVyVmlld0luaXQoKXtWdCh0aGlzLmRvdHNDb250YWluZXIubmF0aXZlRWxlbWVudCwiZGJsY2xpY2siLHtwYXNzaXZlOiEwfSkucGlwZSh1bih0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5vblZpZXdFeHRlbnRSZXNldC5lbWl0KCksdGhpcy5zdGF0ZT1zZnQuTk9ORSx0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpfSkpLFZ0KHdpbmRvdywia2V5ZG93biIse3Bhc3NpdmU6ITB9KS5waXBlKHVuKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgodD0+e2NvbnN0IGU9dGhpcy5zaG91bGRQYW4odCk7ZSE9PXRoaXMuc3BlY2lhbEtleVByZXNzZWQmJih0aGlzLnNwZWNpYWxLZXlQcmVzc2VkPWUsdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKSl9KSksVnQod2luZG93LCJrZXl1cCIse3Bhc3NpdmU6ITB9KS5waXBlKHVuKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgodD0+e2NvbnN0IGU9dGhpcy5zaG91bGRQYW4odCk7ZSE9PXRoaXMuc3BlY2lhbEtleVByZXNzZWQmJih0aGlzLnNwZWNpYWxLZXlQcmVzc2VkPWUsdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKSl9KSksVnQodGhpcy5kb3RzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsIm1vdXNlZG93biIse3Bhc3NpdmU6ITB9KS5waXBlKHVuKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgodD0+e2NvbnN0IGU9dGhpcy5zdGF0ZSxuPXRoaXMuc2hvdWxkUGFuKHQpP3NmdC5QQU5OSU5HOnNmdC5EUkFHX1pPT01JTkc7ZT09PXNmdC5OT05FJiZuPT09c2Z0LkRSQUdfWk9PTUlORyYmKHRoaXMuZHJhZ1N0YXJ0Q29vcmQ9e3g6dC5vZmZzZXRYLHk6dC5vZmZzZXRZfSx0aGlzLnpvb21Cb3hJblVpQ29vcmRpbmF0ZT17eDp0Lm9mZnNldFgsd2lkdGg6MCx5OnQub2Zmc2V0WSxoZWlnaHQ6MH0pLGUhPT1uJiYodGhpcy5zdGF0ZT1uLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCkpfSkpLFZ0KHRoaXMuZG90c0NvbnRhaW5lci5uYXRpdmVFbGVtZW50LCJtb3VzZXVwIix7cGFzc2l2ZTohMH0pLnBpcGUodW4odGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKCh0PT57Y29uc3QgZT0odC5idXR0b25zJk51dC5MRUZUKT09PU51dC5MRUZUO3RoaXMuZHJhZ1N0YXJ0Q29vcmQ9bnVsbDtjb25zdCBuPXRoaXMuem9vbUJveEluVWlDb29yZGluYXRlO2lmKCFlJiZ0aGlzLnN0YXRlPT09c2Z0LkRSQUdfWk9PTUlORyYmbi53aWR0aD4wJiZuLmhlaWdodD4wKXtjb25zdCB0PXRoaXMuZ2V0RGF0YVgobi54KSxlPXRoaXMuZ2V0RGF0YVgobi54K24ud2lkdGgpLG89dGhpcy5nZXREYXRhWShuLnkrbi5oZWlnaHQpLGk9dGhpcy5nZXREYXRhWShuLnkpO3RoaXMub25WaWV3RXh0ZW50Q2hhbmdlLmVtaXQoe2RhdGFFeHRlbnQ6e3g6W3QsZV0seTpbbyxpXX19KX10aGlzLnN0YXRlIT09c2Z0Lk5PTkUmJih0aGlzLnN0YXRlPXNmdC5OT05FLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCkpfSkpLFZ0KHRoaXMuZG90c0NvbnRhaW5lci5uYXRpdmVFbGVtZW50LCJtb3VzZWVudGVyIix7cGFzc2l2ZTohMH0pLnBpcGUodW4odGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKCh0PT57dGhpcy5pc0N1cnNvckluc2lkZT0hMCx0aGlzLnVwZGF0ZVRvb2x0aXAodCksdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKX0pKSxWdCh0aGlzLmRvdHNDb250YWluZXIubmF0aXZlRWxlbWVudCwibW91c2VsZWF2ZSIse3Bhc3NpdmU6ITB9KS5waXBlKHVuKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgodD0+e3RoaXMuZHJhZ1N0YXJ0Q29vcmQ9bnVsbCx0aGlzLmlzQ3Vyc29ySW5zaWRlPSExLHRoaXMudXBkYXRlVG9vbHRpcCh0KSx0aGlzLnN0YXRlPXNmdC5OT05FLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCl9KSksVnQodGhpcy5kb3RzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsIm1vdXNlbW92ZSIse3Bhc3NpdmU6ITB9KS5waXBlKHVuKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgodD0+e3N3aXRjaCh0aGlzLnN0YXRlKXtjYXNlIHNmdC5TQ1JPTExfWk9PTUlORzp0aGlzLnN0YXRlPXNmdC5OT05FLHRoaXMudXBkYXRlVG9vbHRpcCh0KSx0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO2JyZWFrO2Nhc2Ugc2Z0Lk5PTkU6dGhpcy51cGRhdGVUb29sdGlwKHQpLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7YnJlYWs7Y2FzZSBzZnQuUEFOTklORzp7Y29uc3QgZT0tdC5tb3ZlbWVudFgsbj0tdC5tb3ZlbWVudFkse3dpZHRoOm8saGVpZ2h0Oml9PXRoaXMuZG9tRGltLGE9dGhpcy5nZXREYXRhWChlKSxyPXRoaXMuZ2V0RGF0YVgobytlKSxzPXRoaXMuZ2V0RGF0YVkoaStuKSxsPXRoaXMuZ2V0RGF0YVkobik7dGhpcy5vblZpZXdFeHRlbnRDaGFuZ2UuZW1pdCh7ZGF0YUV4dGVudDp7eDpbYSxyXSx5OltzLGxdfX0pO2JyZWFrfWNhc2Ugc2Z0LkRSQUdfWk9PTUlORzp7aWYoIXRoaXMuZHJhZ1N0YXJ0Q29vcmQpYnJlYWs7Y29uc3QgZT1bdGhpcy5kcmFnU3RhcnRDb29yZC54LHQub2Zmc2V0WF0sbj1bdGhpcy5kcmFnU3RhcnRDb29yZC55LHQub2Zmc2V0WV07dGhpcy56b29tQm94SW5VaUNvb3JkaW5hdGU9e3g6TWF0aC5taW4oLi4uZSksd2lkdGg6TWF0aC5tYXgoLi4uZSktTWF0aC5taW4oLi4uZSkseTpNYXRoLm1pbiguLi5uKSxoZWlnaHQ6TWF0aC5tYXgoLi4ubiktTWF0aC5taW4oLi4ubil9fXRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCl9fSkpLFZ0KHRoaXMuZG90c0NvbnRhaW5lci5uYXRpdmVFbGVtZW50LCJ3aGVlbCIse3Bhc3NpdmU6ITF9KS5waXBlKHVuKHRoaXMubmdVbnN1YnNjcmliZSksZG4oKHQ9Pntjb25zdCBlPSF0LmN0cmxLZXkmJiF0LnNoaWZ0S2V5JiZ0LmFsdEtleTtyZXR1cm4gdGhpcy5zaG93Wm9vbUluc3RydWN0aW9uPSFlLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCksZT8odC5wcmV2ZW50RGVmYXVsdCgpLFoodCkpOlp0KDNlMykucGlwZShfbigoKCk9Pnt0aGlzLnNob3dab29tSW5zdHJ1Y3Rpb249ITEsdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKX0pKSxodCgoKCk9Pm51bGwpKSl9KSksR3QoKHQ9PkJvb2xlYW4odCkpKSkuc3Vic2NyaWJlKCh0PT57dGhpcy5vblZpZXdFeHRlbnRDaGFuZ2UuZW1pdCh7ZGF0YUV4dGVudDpKdXQodCx0aGlzLnZpZXdFeHRlbnQsdGhpcy5kb21EaW0sLjAxLHRoaXMueFNjYWxlLHRoaXMueVNjYWxlKX0pLHRoaXMuc3RhdGUhPT1zZnQuU0NST0xMX1pPT01JTkcmJih0aGlzLnN0YXRlPXNmdC5TQ1JPTExfWk9PTUlORyx0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpKX0pKX1uZ09uQ2hhbmdlcygpe3RoaXMudXBkYXRlQ3Vyc29yZWREYXRhQW5kVG9vbHRpcFZpc2liaWxpdHkoKX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9c2hvdWxkUGFuKHQpe2NvbnN0IGU9dC5zaGlmdEtleXx8dC5hbHRLZXk7aWYodCBpbnN0YW5jZW9mIEtleWJvYXJkRXZlbnQpcmV0dXJuIGU7Y29uc3Qgbj0odC5idXR0b25zJk51dC5MRUZUKT09PU51dC5MRUZULG89KHQuYnV0dG9ucyZOdXQuTUlERExFKT09PU51dC5NSURETEU7cmV0dXJuISghbiYmIW8pJiYobyYmIW58fGUpfXRyYWNrQnlTZXJpZXNOYW1lKHQsZSl7cmV0dXJuIGUuaWR9Z2V0RG9tWCh0KXtyZXR1cm4gdGhpcy54U2NhbGUuZm9yd2FyZCh0aGlzLnZpZXdFeHRlbnQueCxZdXQodGhpcy5kb21EaW0sIngiKSx0KX1nZXREYXRhWCh0KXtyZXR1cm4gdGhpcy54U2NhbGUucmV2ZXJzZSh0aGlzLnZpZXdFeHRlbnQueCxZdXQodGhpcy5kb21EaW0sIngiKSx0KX1nZXREb21ZKHQpe3JldHVybiB0aGlzLnlTY2FsZS5mb3J3YXJkKHRoaXMudmlld0V4dGVudC55LFl1dCh0aGlzLmRvbURpbSwieSIpLHQpfWdldERhdGFZKHQpe3JldHVybiB0aGlzLnlTY2FsZS5yZXZlcnNlKHRoaXMudmlld0V4dGVudC55LFl1dCh0aGlzLmRvbURpbSwieSIpLHQpfXNob3VsZFJlbmRlclRvb2x0aXBQb2ludCh0KXtyZXR1cm4gbnVsbCE9PXQmJiFpc05hTih0LngpJiYhaXNOYU4odC55KX11cGRhdGVUb29sdGlwKHQpe3RoaXMuY3Vyc29yTG9jYXRpb25JbkRhdGFDb29yZD17eDp0aGlzLmdldERhdGFYKHQub2Zmc2V0WCkseTp0aGlzLmdldERhdGFZKHQub2Zmc2V0WSl9LHRoaXMudXBkYXRlQ3Vyc29yZWREYXRhQW5kVG9vbHRpcFZpc2liaWxpdHkoKX1vblRvb2x0aXBEaXNwbGF5RGV0YWNoZWQoKXt0aGlzLnRvb2x0aXBEaXNwbGF5QXR0YWNoZWQ9ITF9dXBkYXRlQ3Vyc29yZWREYXRhQW5kVG9vbHRpcFZpc2liaWxpdHkoKXtjb25zdCB0PXRoaXMuY3Vyc29yTG9jYXRpb25JbkRhdGFDb29yZDtpZihudWxsPT09dClyZXR1cm4gdGhpcy5jdXJzb3JlZERhdGE9W10sdm9pZCh0aGlzLnRvb2x0aXBEaXNwbGF5QXR0YWNoZWQ9ITEpO3RoaXMuY3Vyc29yZWREYXRhPXRoaXMuaXNDdXJzb3JJbnNpZGU/dGhpcy5zZXJpZXNEYXRhLm1hcCgodD0+KHtzZXJpZXNEYXR1bTp0LG1ldGFkYXRhOnRoaXMuc2VyaWVzTWV0YWRhdGFNYXBbdC5pZF19KSkpLmZpbHRlcigoKHttZXRhZGF0YTp0fSk9PnQmJnQudmlzaWJsZSYmIUJvb2xlYW4odC5hdXgpKSkubWFwKCgoe3Nlcmllc0RhdHVtOmUsbWV0YWRhdGE6bn0pPT57Y29uc3Qgbz0oZnVuY3Rpb24gaSh0LGUpe2NvbnN0IG49TWF0aC5taW4oQzUodC5tYXAoKCh7eDp0fSk9PnQpKSxlKSx0Lmxlbmd0aC0xKSxvPU1hdGgubWF4KDAsbi0xKTtyZXR1cm4gTWF0aC5hYnModFtvXS54LWUpLU1hdGguYWJzKHRbbl0ueC1lKTw9MD9vOm59KShlLnBvaW50cyx0LngpO3JldHVybntpZDplLmlkLGNsb3Nlc3RQb2ludEluZGV4Om8scG9pbnQ6ZS5wb2ludHNbb10sbWV0YWRhdGE6bn19KSkuZmlsdGVyKCh0PT50KSk6W10sdGhpcy50b29sdGlwRGlzcGxheUF0dGFjaGVkPUJvb2xlYW4odGhpcy5jdXJzb3JlZERhdGEubGVuZ3RoKX19ZnVuY3Rpb24gZGZ0KHQsZSxuLG8pe3JldHVybnttYWpvcjpbXSxtaW5vcjp0LnRpY2tzKG8sbikubWFwKCh0PT4oe3ZhbHVlOnQsdGlja0Zvcm1hdHRlZFN0cmluZzplLmZvcm1hdFRpY2sodCl9KSkpfX1mdW5jdGlvbiBwZnQodCxlKXtpZigxJnQmJihIYSgpLE91KDAsImciLDE3KSxPdSgxLCJ0ZXh0IiksTWYoMiksUHUoKSxPdSgzLCJ0aXRsZSIpLE1mKDQpLFB1KCksUHUoKSksMiZ0KXtjb25zdCB0PWUuJGltcGxpY2l0LG49THUoKTtKYygxKSxObSgieCIsbi50ZXh0WFBvc2l0aW9uKHQudmFsdWUpKSgieSIsbi50ZXh0WVBvc2l0aW9uKHQudmFsdWUpKSxKYygxKSx4ZigiICIsdC50aWNrRm9ybWF0dGVkU3RyaW5nLCIgIiksSmMoMiksdmYobi5nZXRGb3JtYXR0ZXIoKS5mb3JtYXRMb25nKHQudmFsdWUpKX19ZnVuY3Rpb24gbWZ0KHQsZSl7aWYoMSZ0JiYoT3UoMCwic3BhbiIsMjApLE91KDEsInNwYW4iKSxNZigyKSxQdSgpLFB1KCkpLDImdCl7Y29uc3QgdD1lLiRpbXBsaWNpdCxuPWUuaW5kZXgsbz1lLmxhc3QsaT1MdSgyKTtvZigibGVmdCIsaS5nZXRNYWpvclhQb3NpdGlvbih0KSsicHgiKSgid2lkdGgiLGkuZ2V0TWFqb3JXaWR0aFN0cmluZyh0LG8saS5tYWpvclRpY2tzW24rMV0pKSgiYm90dG9tIixpLmdldE1ham9yWVBvc2l0aW9uKHQpKyJweCIpKCJoZWlnaHQiLGkuZ2V0TWFqb3JIZWlnaHRTdHJpbmcodCxvLGkubWFqb3JUaWNrc1tuKzFdKSksYWYoIm1ham9yLWxhYmVsIiwhMCkoImxhc3QiLG8pLHZ1KCJ0aXRsZSIsaS5nZXRGb3JtYXR0ZXIoKS5mb3JtYXRMb25nKHQuc3RhcnQpKSxKYygyKSx2Zih0LnRpY2tGb3JtYXR0ZWRTdHJpbmcpfX1mdW5jdGlvbiB1ZnQodCxlKXtpZigxJnQmJihPdSgwLCJkaXYiLDE4KSxXbSgxLG1mdCwzLDE0LCJzcGFuIiwxOSksUHUoKSksMiZ0KXtjb25zdCB0PUx1KCk7SmMoMSksdnUoIm5nRm9yT2YiLHQubWFqb3JUaWNrcykoIm5nRm9yVHJhY2tCeSIsdC50cmFja0J5TWFqb3JUaWNrKX19Y2Z0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxjZnQpKE11KEhoKSxNdSh3RikpfSxjZnQuybVjbXA9VW8oe3R5cGU6Y2Z0LHNlbGVjdG9yczpbWyJsaW5lLWNoYXJ0LWludGVyYWN0aXZlLXZpZXciXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJihXYihRdXQsMyxjaCksV2IoZUwsMSkpLDImZSl7bGV0IHQ7VWIodD1ZYigpKSYmKG4uZG90c0NvbnRhaW5lcj10LmZpcnN0KSxVYih0PVliKCkpJiYobi5vdmVybGF5PXQuZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezImZSYmYWYoInNob3ctem9vbS1pbnN0cnVjdGlvbiIsbi5zaG93Wm9vbUluc3RydWN0aW9uKX0saW5wdXRzOntzZXJpZXNEYXRhOiJzZXJpZXNEYXRhIixzZXJpZXNNZXRhZGF0YU1hcDoic2VyaWVzTWV0YWRhdGFNYXAiLHZpZXdFeHRlbnQ6InZpZXdFeHRlbnQiLHhTY2FsZToieFNjYWxlIix5U2NhbGU6InlTY2FsZSIsZG9tRGltOiJkb21EaW0iLHRvb2x0aXBPcmlnaW5FbDoidG9vbHRpcE9yaWdpbkVsIix0b29sdGlwVGVtcGxhdGU6InRvb2x0aXBUZW1wbGF0ZSJ9LG91dHB1dHM6e29uVmlld0V4dGVudENoYW5nZToib25WaWV3RXh0ZW50Q2hhbmdlIixvblZpZXdFeHRlbnRSZXNldDoib25WaWV3RXh0ZW50UmVzZXQifSxmZWF0dXJlczpbaWgoW3twcm92aWRlOndGLHVzZUZhY3Rvcnk6bGZ0LGRlcHM6W0pGXX1dKSxTaV0sZGVjbHM6MTIsdmFyczoxNSxjb25zdHM6W1sxLCJkb3RzIl0sWyJkb3RzIiwiIl0sWzQsIm5nSWYiXSxbImNsYXNzIiwiem9vbS1ib3giLDQsIm5nSWYiXSxbMSwiem9vbS1pbnN0cnVjdGlvbiJdLFsxLCJpbnN0cnVjdGlvbi1jb250ZW50Il0sWyJjZGtPdmVybGF5T3JpZ2luIiwiIiwxLCJ0b29sdGlwLW9yaWdpbiJdLFsidG9vbHRpcE9yaWdpbiIsImNka092ZXJsYXlPcmlnaW4iXSxbImNka0Nvbm5lY3RlZE92ZXJsYXkiLCIiLDMsImNka0Nvbm5lY3RlZE92ZXJsYXlPcmlnaW4iLCJjZGtDb25uZWN0ZWRPdmVybGF5T3BlbiIsImNka0Nvbm5lY3RlZE92ZXJsYXlQb3NpdGlvbnMiLCJjZGtDb25uZWN0ZWRPdmVybGF5U2Nyb2xsU3RyYXRlZ3kiLCJjZGtDb25uZWN0ZWRPdmVybGF5TG9ja1Bvc2l0aW9uIiwiY2RrQ29ubmVjdGVkT3ZlcmxheUZsZXhpYmxlRGltZW5zaW9ucyIsImNka0Nvbm5lY3RlZE92ZXJsYXlHcm93QWZ0ZXJPcGVuIiwiZGV0YWNoIl0sWyJkZWZhdWx0VG9vbHRpcCIsIiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiXSxbInIiLCI0Iiw0LCJuZ0lmIl0sWyJyIiwiNCJdLFsxLCJ6b29tLWJveCJdLFsxLCJ0b29sdGlwLWNvbnRhaW5lciJdLFszLCJuZ1RlbXBsYXRlT3V0bGV0IiwibmdUZW1wbGF0ZU91dGxldENvbnRleHQiXSxbMSwiY2lyY2xlLWhlYWRlciJdLFsxLCJ0b29sdGlwLXJvdyJdLFsxLCJ0b29sdGlwLXJvdy1jaXJjbGUiXSxbMSwibmFtZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoSGEoKSxPdSgwLCJzdmciLDAsMSksV20oMixlZnQsMiwyLCJuZy1jb250YWluZXIiLDIpLFdtKDMsbmZ0LDEsNCwicmVjdCIsMyksUHUoKSxGYSgpLE91KDQsImRpdiIsNCksT3UoNSwic3BhbiIsNSksTWYoNiwiQWx0ICsgU2Nyb2xsIHRvIFpvb20iKSxQdSgpLFB1KCksd3UoNywiZGl2Iiw2LDcpLFdtKDksaWZ0LDIsNSwibmctdGVtcGxhdGUiLDgpLE51KCJkZXRhY2giLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub25Ub29sdGlwRGlzcGxheURldGFjaGVkKCl9KSksV20oMTAscmZ0LDEyLDIsIm5nLXRlbXBsYXRlIixudWxsLDksS2IpKSwyJmUmJihhZigicGFubmFibGUiLG4uc3BlY2lhbEtleVByZXNzZWQpKCJkcmFnZ2FibGUiLG4uc3RhdGU9PT1uLkludGVyYWN0aW9uU3RhdGUuTk9ORXx8bi5zdGF0ZT09PW4uSW50ZXJhY3Rpb25TdGF0ZS5EUkFHX1pPT01JTkcpKCJwYW5uaW5nIixuLnN0YXRlPT09bi5JbnRlcmFjdGlvblN0YXRlLlBBTk5JTkcpLEpjKDIpLHZ1KCJuZ0lmIixuLnN0YXRlPT09bi5JbnRlcmFjdGlvblN0YXRlLk5PTkUpLEpjKDEpLHZ1KCJuZ0lmIixuLnN0YXRlPT09bi5JbnRlcmFjdGlvblN0YXRlLkRSQUdfWk9PTUlORyksSmMoNiksdnUoImNka0Nvbm5lY3RlZE92ZXJsYXlPcmlnaW4iLG4udG9vbHRpcE9yaWdpbkVsKSgiY2RrQ29ubmVjdGVkT3ZlcmxheU9wZW4iLG4udG9vbHRpcERpc3BsYXlBdHRhY2hlZCYmbi5zdGF0ZT09PW4uSW50ZXJhY3Rpb25TdGF0ZS5OT05FKSgiY2RrQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9ucyIsbi50b29sdGlwUG9zaXRpb25zKSgiY2RrQ29ubmVjdGVkT3ZlcmxheVNjcm9sbFN0cmF0ZWd5IixuLnNjcm9sbFN0cmF0ZWd5KSgiY2RrQ29ubmVjdGVkT3ZlcmxheUxvY2tQb3NpdGlvbiIsITEpKCJjZGtDb25uZWN0ZWRPdmVybGF5RmxleGlibGVEaW1lbnNpb25zIiwhMCkoImNka0Nvbm5lY3RlZE92ZXJsYXlHcm93QWZ0ZXJPcGVuIiwhMCkpfSxkaXJlY3RpdmVzOlthdix0TCxlTCxvdixodl0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmZsZXg7cG9zaXRpb246cmVsYXRpdmU7dXNlci1zZWxlY3Q6bm9uZX0uZG90c1tfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uZG90cy5kcmFnZ2FibGVbX25nY29udGVudC0lQ09NUCVde2N1cnNvcjpjcm9zc2hhaXJ9LmRvdHMucGFubmFibGVbX25nY29udGVudC0lQ09NUCVde2N1cnNvcjpncmFifS5kb3RzLnBhbm5pbmdbX25nY29udGVudC0lQ09NUCVde2N1cnNvcjpncmFiYmluZ30udG9vbHRpcC1yb3ctY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTppbmxpbmUtZmxleDtoZWlnaHQ6MTJweDt3aWR0aDoxMnB4fS50b29sdGlwLXJvdy1jaXJjbGVbX25nY29udGVudC0lQ09NUCVdID4gc3Bhbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJhZGl1czo1MCU7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LC42KTtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MTBweDt3aWR0aDoxMHB4fS50b29sdGlwLW9yaWdpbltfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjA7bGVmdDowO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjB9LnRvb2x0aXAtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjg1KTtib3JkZXItcmFkaXVzOjRweDtjb2xvcjojZmZmO2NvbnRhaW46cGFpbnQgc3R5bGUgbGF5b3V0O2ZvbnQtc2l6ZTouOWVtO292ZXJmbG93OmF1dG87cGFkZGluZzo1cHg7cG9pbnRlci1ldmVudHM6bm9uZTt3aWR0aDoxMDAlfXRoW19uZ2NvbnRlbnQtJUNPTVAlXSwgdGRbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDVweDt0ZXh0LWFsaWduOmxlZnR9dGhbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjUwMDtwYWRkaW5nLWJvdHRvbTo1cHh9Lnpvb20tYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmaWxsLW9wYWNpdHk6LjAzO2ZpbGw6IzAwMDtzdHJva2U6I2NjY30uem9vbS1pbnN0cnVjdGlvbltfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xlZnQ6MDtvcGFjaXR5OjA7cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3RvcDoxMHB4O3RyYW5zaXRpb246b3BhY2l0eSAuNXN9Lmluc3RydWN0aW9uLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuNik7Ym9yZGVyLXJhZGl1czo1cHg7Y29sb3I6I2ZmZjtwYWRkaW5nOjVweCAxMHB4O3VzZXItc2VsZWN0Om5vbmV9LnNob3ctem9vbS1pbnN0cnVjdGlvbltfbmdob3N0LSVDT01QJV0gICAuem9vbS1pbnN0cnVjdGlvbltfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfSJdLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihjZnQsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoibGluZS1jaGFydC1pbnRlcmFjdGl2ZS12aWV3Iix0ZW1wbGF0ZVVybDoiLi9saW5lX2NoYXJ0X2ludGVyYWN0aXZlX3ZpZXcubmcuaHRtbCIsc3R5bGVVcmxzOlsiLi9saW5lX2NoYXJ0X2ludGVyYWN0aXZlX3ZpZXcuY3NzIl0sY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOndGLHVzZUZhY3Rvcnk6bGZ0LGRlcHM6W0pGXX1dfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6SGh9LHt0eXBlOndGfV19KSx7ZG90c0NvbnRhaW5lcjpbe3R5cGU6RnIsYXJnczpbImRvdHMiLHtzdGF0aWM6ITAscmVhZDpjaH1dfV0sb3ZlcmxheTpbe3R5cGU6RnIsYXJnczpbZUxdfV0sc2VyaWVzRGF0YTpbe3R5cGU6eV99XSxzZXJpZXNNZXRhZGF0YU1hcDpbe3R5cGU6eV99XSx2aWV3RXh0ZW50Olt7dHlwZTp5X31dLHhTY2FsZTpbe3R5cGU6eV99XSx5U2NhbGU6W3t0eXBlOnlffV0sZG9tRGltOlt7dHlwZTp5X31dLHRvb2x0aXBPcmlnaW5FbDpbe3R5cGU6eV99XSx0b29sdGlwVGVtcGxhdGU6W3t0eXBlOnlffV0sb25WaWV3RXh0ZW50Q2hhbmdlOlt7dHlwZTpfX31dLG9uVmlld0V4dGVudFJlc2V0Olt7dHlwZTpfX31dLHNob3dab29tSW5zdHJ1Y3Rpb246W3t0eXBlOkNfLGFyZ3M6WyJjbGFzcy5zaG93LXpvb20taW5zdHJ1Y3Rpb24iXX1dfSk7Y2xhc3MgZmZ0e2NvbnN0cnVjdG9yKCl7dGhpcy5vblZpZXdFeHRlbnRDaGFuZ2U9bmV3IEFiLHRoaXMuZWRpdE1lbnVPcGVuZWQ9ITEsdGhpcy5tYWpvclRpY2tzPVtdLHRoaXMubWlub3JUaWNrcz1bXX1uZ09uQ2hhbmdlcygpe2xldCB0PW51bGw7Y29uc3QgZT1xdXQoIngiPT09dGhpcy5heGlzP3RoaXMuZG9tRGltLndpZHRoOnRoaXMuZG9tRGltLmhlaWdodCx0aGlzLmdyaWRDb3VudCk7dD10aGlzLnNjYWxlIGluc3RhbmNlb2Ygb2l0PyhmdW5jdGlvbiBuKHQsZSxvLGkpe2NvbnN0W2Escl09aSxzPU1hdGguYWJzKHItYSk7aWYocz4uMDAxKXJldHVybiBkZnQodCxlLG8saSk7Y29uc3QgbD10LnRpY2tzKFthLHJdLG8pLGM9dC50aWNrcyhbYSxyXSwyKSxkPVtdO2xldCBwPShmdW5jdGlvbiBtKHQpe2NvbnN0IGU9dC50b0V4cG9uZW50aWFsKCkuc3BsaXQoImUtIiwyKTtyZXR1cm4gMj09PWUubGVuZ3RoP051bWJlcihlWzFdKS0xOjB9KShzKTtzPDEmJmMuZXZlcnkoKHQ9Pntjb25zdCBlPU1hdGguYWJzKHQpO3JldHVybiBlPj0wJiZlPDF9KSkmJihwKz0xKTtjb25zdCB1PW5ldyBNYXA7Zm9yKGNvbnN0IHQgb2YgYyl7Y29uc3RbbixvPSIiXT1TdHJpbmcodCkuc3BsaXQoIi4iLDIpLGk9TnVtYmVyKG4rIi4iK28uc2xpY2UoMCxwKSk7dS5zZXQoaSx7c3RhcnQ6aSx0aWNrRm9ybWF0dGVkU3RyaW5nOjA9PT1pPyLigJQiOmUuZm9ybWF0UmVhZGFibGUoaSl9KX1jb25zdCBmPTEwKk1hdGgucG93KDEwLC1wKTtmb3IoY29uc3QgdCBvZiBsKWZvcihjb25zdCBuIG9mWy4uLnUua2V5cygpXS5yZXZlcnNlKCkpe2NvbnN0IG89dC1uO2lmKG8+PTAmJm88Zil7aWYoMD09PW4pZC5wdXNoKHt2YWx1ZTp0LHRpY2tGb3JtYXR0ZWRTdHJpbmc6ZS5mb3JtYXRUaWNrKHQpfSk7ZWxzZXtjb25zdCBlPVN0cmluZyh0KS5zbGljZShTdHJpbmcobikubGVuZ3RoKTtkLnB1c2goe3ZhbHVlOnQsdGlja0Zvcm1hdHRlZFN0cmluZzpg4oCmJHtlfHwiMCJ9YH0pfWJyZWFrfX1yZXR1cm57bWFqb3I6QXJyYXkuZnJvbSh1LnZhbHVlcygpKSxtaW5vcjpkfX0pKHRoaXMuc2NhbGUsdGhpcy5nZXRGb3JtYXR0ZXIoKSxlLHRoaXMuYXhpc0V4dGVudCk6dGhpcy5zY2FsZSBpbnN0YW5jZW9mIGFpdD8oZnVuY3Rpb24gbyh0LGUsbixpKXtjb25zdFthLHJdPWk7bGV0IHM9dC50aWNrcyhpLDIpO2lmKHItYT49ODY0ZTV8fHMubGVuZ3RoPjIpcmV0dXJuIGRmdCh0LGUsbixpKTtjb25zdCBsPXQudGlja3MoaSxuKTtyZXR1cm57bWFqb3I6cy5tYXAoKHQ9Pih7c3RhcnQ6dCx0aWNrRm9ybWF0dGVkU3RyaW5nOmUuZm9ybWF0U2hvcnQodCl9KSkpLG1pbm9yOmwubWFwKCh0PT4oe3ZhbHVlOnQsdGlja0Zvcm1hdHRlZFN0cmluZzplLmZvcm1hdFRpY2sodCl9KSkpfX0pKHRoaXMuc2NhbGUsdGhpcy5nZXRGb3JtYXR0ZXIoKSxlLHRoaXMuYXhpc0V4dGVudCk6ZGZ0KHRoaXMuc2NhbGUsdGhpcy5nZXRGb3JtYXR0ZXIoKSxlLHRoaXMuYXhpc0V4dGVudCksdGhpcy5tYWpvclRpY2tzPXQubWFqb3IsdGhpcy5taW5vclRpY2tzPXQubWlub3J9Z2V0Rm9ybWF0dGVyKCl7dmFyIHQ7cmV0dXJuIG51bGwhPT0odD10aGlzLmN1c3RvbUZvcm1hdHRlcikmJnZvaWQgMCE9PXQ/dDp0aGlzLnNjYWxlLmRlZmF1bHRGb3JtYXR0ZXJ9dHJhY2tCeU1pbm9yVGljayh0KXtyZXR1cm4gdC52YWx1ZX10cmFja0J5TWFqb3JUaWNrKHQpe3JldHVybiB0LnN0YXJ0fWdldERvbVBvcyh0KXtyZXR1cm4gdGhpcy5zY2FsZS5mb3J3YXJkKHRoaXMuYXhpc0V4dGVudCxZdXQodGhpcy5kb21EaW0sdGhpcy5heGlzKSx0KX10ZXh0WFBvc2l0aW9uKHQpe3JldHVybiJ4Ij09PXRoaXMuYXhpcz9TdHJpbmcodGhpcy5nZXREb21Qb3ModCkpOiIxMDAlIn10ZXh0WVBvc2l0aW9uKHQpe3JldHVybiJ4Ij09PXRoaXMuYXhpcz8iIjpTdHJpbmcodGhpcy5nZXREb21Qb3ModCkpfWdldE1ham9yWFBvc2l0aW9uKHQpe3JldHVybiJ5Ij09PXRoaXMuYXhpcz8wOk1hdGgubWluKHRoaXMuZG9tRGltLndpZHRoLE1hdGgubWF4KDAsdGhpcy5nZXREb21Qb3ModC5zdGFydCkpKX1nZXRNYWpvcldpZHRoU3RyaW5nKHQsZSxuKXtyZXR1cm4ieSI9PT10aGlzLmF4aXM/IiI6KGV8fCFuP3RoaXMuZG9tRGltLndpZHRoOnRoaXMuZ2V0TWFqb3JYUG9zaXRpb24obikpLXRoaXMuZ2V0TWFqb3JYUG9zaXRpb24odCkrInB4In1nZXRNYWpvcllQb3NpdGlvbih0KXtyZXR1cm4ieCI9PT10aGlzLmF4aXM/MDp0aGlzLmRvbURpbS5oZWlnaHQtTWF0aC5taW4odGhpcy5kb21EaW0uaGVpZ2h0LE1hdGgubWF4KDAsdGhpcy5nZXREb21Qb3ModC5zdGFydCkpKX1nZXRNYWpvckhlaWdodFN0cmluZyh0LGUsbil7cmV0dXJuIngiPT09dGhpcy5heGlzPyIiOihlfHwhbj90aGlzLmRvbURpbS5oZWlnaHQ6dGhpcy5nZXRNYWpvcllQb3NpdGlvbihuKSktdGhpcy5nZXRNYWpvcllQb3NpdGlvbih0KSsicHgifWtleWRvd25QcmV2ZW50Q2xvc2UodCl7IkVzY2FwZSIhPT10LmtleSYmdC5zdG9wUHJvcGFnYXRpb24oKX1leHRlbnRDaGFuZ2VkKHQsZSl7bGV0IG49TnVtYmVyKHQpLG89TnVtYmVyKGUpO2lmKG88bil7Y29uc3QgdD1uO249byxvPXR9TnVtYmVyLmlzRmluaXRlKG4pJiZOdW1iZXIuaXNGaW5pdGUobykmJnRoaXMub25WaWV3RXh0ZW50Q2hhbmdlLmVtaXQoW24sb10pfW9uQXhpc1VwZGF0ZU1lbnVPcGVuKHQsZSxuKXt0LnZhbHVlPVN0cmluZyhuWzBdKSxlLnZhbHVlPVN0cmluZyhuWzFdKSx0LmZvY3VzKCl9c2V0RWRpdE1lbnVPcGVuZWQodCl7dGhpcy5lZGl0TWVudU9wZW5lZD10fX1mZnQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGZmdCl9LGZmdC7JtWNtcD1Vbyh7dHlwZTpmZnQsc2VsZWN0b3JzOltbImxpbmUtY2hhcnQtYXhpcyJdXSxpbnB1dHM6e2F4aXNFeHRlbnQ6ImF4aXNFeHRlbnQiLGF4aXM6ImF4aXMiLHNjYWxlOiJzY2FsZSIsZ3JpZENvdW50OiJncmlkQ291bnQiLGRvbURpbToiZG9tRGltIixjdXN0b21Gb3JtYXR0ZXI6ImN1c3RvbUZvcm1hdHRlciJ9LG91dHB1dHM6e29uVmlld0V4dGVudENoYW5nZToib25WaWV3RXh0ZW50Q2hhbmdlIn0sZmVhdHVyZXM6W1NpXSxkZWNsczoyNix2YXJzOjEzLGNvbnN0czpbWzEsImxpbmUiXSxbMSwibWlub3IiXSxbMSwidGlja3MiXSxbImNsYXNzIiwibWlub3ItdGljay1sYWJlbCIsNCwibmdGb3IiLCJuZ0Zvck9mIiwibmdGb3JUcmFja0J5Il0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJ0aXRsZSIsIkNsaWNrIHRvIG1hbnVhbGx5IHNldCBtaW4gJiBtYXggdmFsdWVzIiwzLCJtYXRNZW51VHJpZ2dlckZvciIsIm1lbnVPcGVuZWQiLCJtZW51Q2xvc2VkIl0sWyJtYXRNZW51VHJpZ2dlciIsIm1hdE1lbnVUcmlnZ2VyIl0sWyJzdmdJY29uIiwiZWRpdF8yNHB4Il0sWyJjbGFzcyIsIm1ham9yIHRpY2tzIiw0LCJuZ0lmIl0sWyJ4UG9zaXRpb24iLCJiZWZvcmUiLDMsInlQb3NpdGlvbiJdLFsibWFudWFsQ29udHJvbCIsIm1hdE1lbnUiXSxbMSwiZXh0ZW50LWVkaXQtaW5wdXQiLDMsImNsaWNrIiwia2V5ZG93biJdLFsidHlwZSIsIm51bWJlciIsMywidmFsdWUiXSxbIm1pbklucHV0IiwiIl0sWyJtYXhJbnB1dCIsIiJdLFsxLCJleHRlbnQtZWRpdC1jb250cm9sIiwzLCJrZXlkb3duIl0sWyJtYXQtcmFpc2VkLWJ1dHRvbiIsIiIsImNvbG9yIiwicHJpbWFyeSIsMSwiZXh0ZW50LWVkaXQtY2hhbmdlIiwzLCJjbGljayJdLFsibWF0LXN0cm9rZWQtYnV0dG9uIiwiIiwxLCJleHRlbnQtZWRpdC1jYW5jZWwiLDMsImNsaWNrIl0sWzEsIm1pbm9yLXRpY2stbGFiZWwiXSxbMSwibWFqb3IiLCJ0aWNrcyJdLFszLCJtYWpvci1sYWJlbCIsImxhc3QiLCJsZWZ0Iiwid2lkdGgiLCJib3R0b20iLCJoZWlnaHQiLCJ0aXRsZSIsNCwibmdGb3IiLCJuZ0Zvck9mIiwibmdGb3JUcmFja0J5Il0sWzMsInRpdGxlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUpe2NvbnN0IHQ9RXUoKTtPdSgwLCJkaXYiKSx3dSgxLCJkaXYiLDApLE91KDIsImRpdiIsMSksSGEoKSxPdSgzLCJzdmciLDIpLFdtKDQscGZ0LDUsNCwiZyIsMyksUHUoKSxGYSgpLE91KDUsImJ1dHRvbiIsNCw1KSxOdSgibWVudU9wZW5lZCIsKGZ1bmN0aW9uIGUoKXtyYSh0KTtjb25zdCBvPUdtKDE1KSxpPUdtKDIwKTtyZXR1cm4gbi5vbkF4aXNVcGRhdGVNZW51T3BlbihvLGksbi5heGlzRXh0ZW50KSxuLnNldEVkaXRNZW51T3BlbmVkKCEwKX0pKSgibWVudUNsb3NlZCIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5zZXRFZGl0TWVudU9wZW5lZCghMSl9KSksd3UoNywibWF0LWljb24iLDYpLFB1KCksUHUoKSxXbSg4LHVmdCwyLDIsImRpdiIsNyksUHUoKSxPdSg5LCJtYXQtbWVudSIsOCw5KSxPdSgxMSwiZGl2IiwxMCksTnUoImNsaWNrIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gZS5zdG9wUHJvcGFnYXRpb24oKX0pKSgia2V5ZG93biIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ua2V5ZG93blByZXZlbnRDbG9zZShlKX0pKSxPdSgxMiwibGFiZWwiKSxNZigxMywibWluIiksUHUoKSx3dSgxNCwiaW5wdXQiLDExLDEyKSxQdSgpLE91KDE2LCJkaXYiLDEwKSxOdSgiY2xpY2siLChmdW5jdGlvbiB0KGUpe3JldHVybiBlLnN0b3BQcm9wYWdhdGlvbigpfSkpKCJrZXlkb3duIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5rZXlkb3duUHJldmVudENsb3NlKGUpfSkpLE91KDE3LCJsYWJlbCIpLE1mKDE4LCJtYXgiKSxQdSgpLHd1KDE5LCJpbnB1dCIsMTEsMTMpLFB1KCksT3UoMjEsImRpdiIsMTQpLE51KCJrZXlkb3duIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5rZXlkb3duUHJldmVudENsb3NlKGUpfSkpLE91KDIyLCJidXR0b24iLDE1KSxOdSgiY2xpY2siLChmdW5jdGlvbiBlKCl7cmEodCk7Y29uc3Qgbz1HbSgxNSksaT1HbSgyMCksYT1HbSg2KTtyZXR1cm4gbi5leHRlbnRDaGFuZ2VkKG8udmFsdWUsaS52YWx1ZSksYS5jbG9zZU1lbnUoKX0pKSxNZigyMywiIENoYW5nZSAiKSxQdSgpLE91KDI0LCJidXR0b24iLDE2KSxOdSgiY2xpY2siLChmdW5jdGlvbiBlKCl7cmV0dXJuIHJhKHQpLEdtKDYpLmNsb3NlTWVudSgpfSkpLE1mKDI1LCIgQ2FuY2VsICIpLFB1KCksUHUoKSxQdSgpfWlmKDImZSl7Y29uc3QgdD1HbSgxMCk7bGYobi5heGlzKyItYXhpcyBheGlzIiksSmMoNCksdnUoIm5nRm9yT2YiLG4ubWlub3JUaWNrcykoIm5nRm9yVHJhY2tCeSIsbi50cmFja0J5TWlub3JUaWNrKSxKYygxKSxhZigiZXh0ZW50LWVkaXQtYnV0dG9uIiwhMCkoImV4dGVudC1lZGl0LW1lbnUtb3BlbmVkIixuLmVkaXRNZW51T3BlbmVkKSx2dSgibWF0TWVudVRyaWdnZXJGb3IiLHQpLEpjKDMpLHZ1KCJuZ0lmIixuLm1ham9yVGlja3MubGVuZ3RoKSxKYygxKSx2dSgieVBvc2l0aW9uIiwieSI9PT1uLmF4aXM/ImFib3ZlIjoiYmVsb3ciKSxKYyg1KSx2dSgidmFsdWUiLG4uYXhpc0V4dGVudFswXSksSmMoNSksdnUoInZhbHVlIixuLmF4aXNFeHRlbnRbMV0pfX0sZGlyZWN0aXZlczpbb3YsTkgsTkcsY0csYXYsREddLHN0eWxlczpbJy5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHh9Lm1hdC1oMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaGVhZGxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTVweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZ1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjA1ZW07bWFyZ2luOjAgMCA1NnB4fS5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAwNWVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXJhaXNlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdHJva2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmxhdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZhYltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbWluaS1mYWJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4fS5tYXQtY2FyZC1zdWJ0aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGVja2JveC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvb3Rlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgdHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIzZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LjU0MTY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2NjY2NjY3ZW0pfUBtZWRpYSBwcmludHsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjJlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouMjVlbSAwIC43NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxZW0gMCAxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMiksIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi0wLjA2MjVlbX0ubWF0LW1lbnUtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci12ZXJ0aWNhbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGFiLWxpbmtbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MH0ubWF0LXRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5Om5vbmV9LmNkay12aXN1YWxseS1oaWRkZW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjZ9LmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV0sIC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3hbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2tbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHt9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7fS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOi13ZWJraXQtYXV0b2ZpbGwpe2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZVtfbmdjb250ZW50LSVDT01QJV17cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fS5tYXQtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfVtfbmdob3N0LSVDT01QJV17Y29udGFpbjpzdHJpY3Q7ZGlzcGxheTpmbGV4O292ZXJmbG93OmhpZGRlbn0ubWFqb3ItbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCB0ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmaWxsOmN1cnJlbnRDb2xvcjtmb250LXNpemU6MTFweDt1c2VyLXNlbGVjdDpub25lfS5heGlzW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0ubWFqb3JbX25nY29udGVudC0lQ09NUCVdLCAubWlub3JbX25nY29udGVudC0lQ09NUCVde2ZsZXg6MSAwO292ZXJmbG93OmhpZGRlbn0ubGluZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojYWFhO2ZsZXg6MCAwIDFweDtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaH0udGlja3NbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlO3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjEwMCV9LngtYXhpc1tfbmdjb250ZW50LSVDT01QJV17ZmxleC1kaXJlY3Rpb246Y29sdW1ufS54LWF4aXNbX25nY29udGVudC0lQ09NUCVdICAgLmxpbmVbX25nY29udGVudC0lQ09NUCVde21hcmdpbi1ib3R0b206M3B4fS54LWF4aXNbX25nY29udGVudC0lQ09NUCVdICAgdGV4dFtfbmdjb250ZW50LSVDT01QJV17ZG9taW5hbnQtYmFzZWxpbmU6dGV4dC1iZWZvcmUtZWRnZTt0ZXh0LWFuY2hvcjptaWRkbGV9LngtYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAudGlja3NbX25nY29udGVudC0lQ09NUCVdey13ZWJraXQtbWFzay1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICMwMDAwIDAlLCAjMDAwIDEwJSwgIzAwMCA5MCUsICMwMDAwIDEwMCUpO21hc2staW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAjMDAwMCAwJSwgIzAwMCAxMCUsICMwMDAgOTAlLCAjMDAwMCAxMDAlKX0ueS1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZX0ueS1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tbGVmdDo1cHh9LnktYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICB0ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtkb21pbmFudC1iYXNlbGluZTpjZW50cmFsO3RleHQtYW5jaG9yOmVuZH0ueS1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50aWNrc1tfbmdjb250ZW50LSVDT01QJV17LXdlYmtpdC1tYXNrLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICMwMDAwIDAlLCAjMDAwIDEwJSwgIzAwMCA5MCUsICMwMDAwIDEwMCUpO21hc2staW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgIzAwMDAgMCUsICMwMDAgMTAlLCAjMDAwIDkwJSwgIzAwMDAgMTAwJSl9LmV4dGVudC1lZGl0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZWVlO2Rpc3BsYXk6bm9uZTtmb250LXNpemU6MDtoZWlnaHQ6MjRweDtsaW5lLWhlaWdodDoyNHB4O3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjVweDt0b3A6NXB4O3dpZHRoOjI0cHh9LmV4dGVudC1lZGl0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICBtYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjE2cHg7d2lkdGg6MTZweDtsaW5lLWhlaWdodDoxNnB4fS5leHRlbnQtZWRpdC1pbnB1dFtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2NvbHVtbi1nYXA6NXB4O2Rpc3BsYXk6Z3JpZDtmb250LXNpemU6MTJweDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MzBweCBtaW5tYXgoYXV0bywgMTAwcHgpO2hlaWdodDozMHB4O21hcmdpbjoxMHB4IDIwcHh9LmV4dGVudC1lZGl0LWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOmluaGVyaXQ7Ym9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyLXN0eWxlOnNvbGlkO2NvbG9yOmluaGVyaXR9LmV4dGVudC1lZGl0LWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2U7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO21hcmdpbjoxMHB4IDIwcHh9LmV4dGVudC1lZGl0LWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtoZWlnaHQ6MzBweDtsaW5lLWhlaWdodDoxLjQ7bWFyZ2luLWxlZnQ6NXB4O3BhZGRpbmc6MCAxMHB4fS5heGlzW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlciAgIC5leHRlbnQtZWRpdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAuZXh0ZW50LWVkaXQtbWVudS1vcGVuZWRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5pdGlhbH0ubWFqb3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbjtjb250YWluOnN0cmljdH0ubWFqb3JbX25nY29udGVudC0lQ09NUCVdICAgLm1ham9yLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6aW5saW5lLWZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246YWJzb2x1dGU7d2hpdGUtc3BhY2U6bm93cmFwfS5tYWpvcltfbmdjb250ZW50LSVDT01QJV0gICAubWFqb3ItbGFiZWxbX25nY29udGVudC0lQ09NUCVdICAgc3Bhbltfbmdjb250ZW50LSVDT01QJV17bWF4LXdpZHRoOjEwMCV9LngtYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAubWFqb3ItbGFiZWxbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjOWU5ZTllO3BhZGRpbmc6MCA1cHh9LngtYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAubWFqb3ItbGFiZWwubGFzdFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjOWU5ZTllfS55LWF4aXNbX25nY29udGVudC0lQ09NUCVdICAgLm1ham9yLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjOWU5ZTllO2hlaWdodDoxMDAlO3BhZGRpbmc6NXB4IDA7d2lkdGg6MTAwJX0ueS1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYWpvci1sYWJlbC5sYXN0W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItdG9wOjFweCBzb2xpZCAjOWU5ZTllfS55LWF4aXNbX25nY29udGVudC0lQ09NUCVdICAgLm1ham9yLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSA+IHNwYW5bX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTpyb3RhdGUoLTkwZGVnKTt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlcn0nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoZmZ0LFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6ImxpbmUtY2hhcnQtYXhpcyIsdGVtcGxhdGVVcmw6ImxpbmVfY2hhcnRfYXhpc192aWV3Lm5nLmh0bWwiLHN0eWxlVXJsczpbImxpbmVfY2hhcnRfYXhpc192aWV3LmNzcyJdLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2h9XX1dLG51bGwse2F4aXNFeHRlbnQ6W3t0eXBlOnlffV0sYXhpczpbe3R5cGU6eV99XSxzY2FsZTpbe3R5cGU6eV99XSxncmlkQ291bnQ6W3t0eXBlOnlffV0sZG9tRGltOlt7dHlwZTp5X31dLGN1c3RvbUZvcm1hdHRlcjpbe3R5cGU6eV99XSxvblZpZXdFeHRlbnRDaGFuZ2U6W3t0eXBlOl9ffV19KTtjb25zdCBnZnQ9WyJzZXJpZXNWaWV3Il0saGZ0PVsieEF4aXMiXSxiZnQ9WyJ5QXhpcyJdLHlmdD1bImNoYXJ0RWwiXTtmdW5jdGlvbiBfZnQodCxlKXsxJnQmJihIYSgpLHd1KDAsInN2ZyIsbnVsbCwxMykpfWZ1bmN0aW9uIENmdCh0LGUpezEmdCYmd3UoMCwiY2FudmFzIixudWxsLDEzKX1jb25zdCBNZnQ9ZnVuY3Rpb24odCl7cmV0dXJue2NvbnRhaW5lcjohMCwiZGFyay1tb2RlIjp0fX0sdmZ0PXt4OlswLDFdLHk6WzAsMV19O2NsYXNzIHhmdHtjb25zdHJ1Y3Rvcih0KXt0aGlzLmNoYW5nZURldGVjdG9yPXQsdGhpcy5SZW5kZXJlclR5cGU9YTUsdGhpcy51c2VEYXJrTW9kZT0hMSx0aGlzLnByZWZlcnJlZFJlbmRlcmVyVHlwZT1hNS5XRUJHTCx0aGlzLnhTY2FsZVR5cGU9cjUuTElORUFSLHRoaXMueVNjYWxlVHlwZT1yNS5MSU5FQVIsdGhpcy5vblZpZXdCb3hPdmVycmlkZGVuPW5ldyBudCgxKSx0aGlzLmlnbm9yZVlPdXRsaWVycz0hMSx0aGlzLllfR1JJRF9DT1VOVD02LHRoaXMuWF9HUklEX0NPVU5UPTEwLHRoaXMueFNjYWxlPW5pdCh0aGlzLnhTY2FsZVR5cGUpLHRoaXMueVNjYWxlPW5pdCh0aGlzLnhTY2FsZVR5cGUpLHRoaXMudmlld0JveD12ZnQsdGhpcy5kb21EaW1lbnNpb25zPXttYWluOnt3aWR0aDowLGhlaWdodDowfSx4QXhpczp7d2lkdGg6MCxoZWlnaHQ6MH0seUF4aXM6e3dpZHRoOjAsaGVpZ2h0OjB9fSx0aGlzLmlzRGF0YVVwZGF0ZWQ9ITEsdGhpcy5pc01ldGFkYXRhVXBkYXRlZD0hMSx0aGlzLmlzRml4ZWRWaWV3Qm94VXBkYXRlZD0hMSx0aGlzLmlzVmlld0JveE92ZXJyaWRkZW49ITEsdGhpcy51c2VEYXJrTW9kZVVwZGF0ZWQ9ITEsdGhpcy5pc1ZpZXdCb3hDaGFuZ2VkPSEwLHRoaXMuc2NhbGVVcGRhdGVkPSEwfW5nT25Jbml0KCl7dGhpcy5vblZpZXdCb3hPdmVycmlkZGVuLm5leHQodGhpcy5pc1ZpZXdCb3hPdmVycmlkZGVuKX1uZ09uQ2hhbmdlcyh0KXt0LnhTY2FsZVR5cGUmJih0aGlzLnhTY2FsZT1uaXQodGhpcy54U2NhbGVUeXBlKSx0aGlzLnNjYWxlVXBkYXRlZD0hMCksdC55U2NhbGVUeXBlJiYodGhpcy55U2NhbGU9bml0KHRoaXMueVNjYWxlVHlwZSksdGhpcy5zY2FsZVVwZGF0ZWQ9ITApLHQuc2VyaWVzRGF0YSYmKHRoaXMuaXNEYXRhVXBkYXRlZD0hMCksdC5maXhlZFZpZXdCb3gmJih0aGlzLmlzRml4ZWRWaWV3Qm94VXBkYXRlZD0hMCksdC5zZXJpZXNNZXRhZGF0YU1hcCYmKHRoaXMuaXNNZXRhZGF0YVVwZGF0ZWQ9ITApLHQudXNlRGFya01vZGUmJih0aGlzLnVzZURhcmtNb2RlVXBkYXRlZD0hMCksdGhpcy5zY2FsZVVwZGF0ZWQmJnRoaXMuc2V0SXNWaWV3Qm94T3ZlcnJpZGRlbighMSksdGhpcy5pc1ZpZXdCb3hDaGFuZ2VkPXRoaXMuaXNWaWV3Qm94Q2hhbmdlZHx8dGhpcy5zY2FsZVVwZGF0ZWR8fCF0aGlzLmlzVmlld0JveE92ZXJyaWRkZW4mJnRoaXMuc2hvdWxkVXBkYXRlRGVmYXVsdFZpZXdCb3godCksdGhpcy51cGRhdGVMaW5lQ2hhcnQoKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLmluaXRpYWxpemVDaGFydCgpLHRoaXMudXBkYXRlTGluZUNoYXJ0KCksdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCl9b25WaWV3UmVzaXplKCl7dGhpcy5saW5lQ2hhcnQmJih0aGlzLnJlYWRBbmRVcGRhdGVEb21EaW1lbnNpb25zKCksdGhpcy5saW5lQ2hhcnQucmVzaXplKHRoaXMuZG9tRGltZW5zaW9ucy5tYWluKSx0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKSl9c2hvdWxkVXBkYXRlRGVmYXVsdFZpZXdCb3godCl7aWYodC54U2NhbGVUeXBlfHx0LnlTY2FsZVR5cGV8fHQuaWdub3JlWU91dGxpZXJzKXJldHVybiEwO2lmKHQuc2VyaWVzRGF0YSlyZXR1cm4hMDtjb25zdCBlPXQuc2VyaWVzTWV0YWRhdGFNYXA7aWYoZSl7Y29uc3QgdD1lLnByZXZpb3VzVmFsdWU7aWYoT2JqZWN0LmtleXModGhpcy5zZXJpZXNNZXRhZGF0YU1hcCkubGVuZ3RoIT09T2JqZWN0LmtleXMobnVsbCE9dD90Ont9KS5sZW5ndGgpcmV0dXJuITA7Zm9yKGNvbnN0W2Usbl1vZiBPYmplY3QuZW50cmllcyh0aGlzLnNlcmllc01ldGFkYXRhTWFwKSl7Y29uc3Qgbz10JiZ0W2VdO2lmKCFvfHxuLnZpc2libGUhPT1vLnZpc2libGUpcmV0dXJuITB9fXJldHVybiExfWluaXRpYWxpemVDaGFydCgpe2lmKHRoaXMubGluZUNoYXJ0KXRocm93IG5ldyBFcnJvcigiTGluZUNoYXJ0IHNob3VsZCBub3QgYmUgaW5pdGlhbGl6ZWQgbXVsdGlwbGUgdGltZXMuIik7Y29uc3QgdD10aGlzLmdldFJlbmRlcmVyVHlwZSgpLGU9e29uRHJhd0VuZDooKT0+e319O2xldCBuPW51bGw7c3dpdGNoKHRoaXMucmVhZEFuZFVwZGF0ZURvbURpbWVuc2lvbnMoKSx0KXtjYXNlIGE1LlNWRzpuPXt0eXBlOmE1LlNWRyxjb250YWluZXI6dGhpcy5jaGFydEVsLm5hdGl2ZUVsZW1lbnQsY2FsbGJhY2tzOmUsZG9tRGltZW5zaW9uOnRoaXMuZG9tRGltZW5zaW9ucy5tYWluLHVzZURhcmtNb2RlOnRoaXMudXNlRGFya01vZGV9O2JyZWFrO2Nhc2UgYTUuV0VCR0w6bj17dHlwZTphNS5XRUJHTCxjb250YWluZXI6dGhpcy5jaGFydEVsLm5hdGl2ZUVsZW1lbnQsZGV2aWNlUGl4ZWxSYXRpbzp3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyxjYWxsYmFja3M6ZSxkb21EaW1lbnNpb246dGhpcy5kb21EaW1lbnNpb25zLm1haW4sdXNlRGFya01vZGU6dGhpcy51c2VEYXJrTW9kZX07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYDxsaW5lLWNoYXJ0PiBkb2VzIG5vdCB5ZXQgc3VwcG9ydCByZW5kZXJlclR5cGU6ICR7dH1gKX1jb25zdCBvPXQhPT1hNS5TVkcmJnNpdCgpO3RoaXMubGluZUNoYXJ0PW5ldyhvP0d1dDpVdXQpKG4pfW5nT25EZXN0cm95KCl7dGhpcy5saW5lQ2hhcnQmJnRoaXMubGluZUNoYXJ0LmRpc3Bvc2UoKX1nZXRSZW5kZXJlclR5cGUoKXtyZXR1cm4oZnVuY3Rpb24gdChlKXtzd2l0Y2goZSl7Y2FzZSBhNS5TVkc6cmV0dXJuIGE1LlNWRztjYXNlIGE1LldFQkdMOnJldHVybihmdW5jdGlvbiBuKCl7cmV0dXJuIHJpdH0pKCk/YTUuV0VCR0w6YTUuU1ZHO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHJlbmRlcmVyVHlwZTogJHtlfWApfX0pKHRoaXMucHJlZmVycmVkUmVuZGVyZXJUeXBlKX1yZWFkQW5kVXBkYXRlRG9tRGltZW5zaW9ucygpe3RoaXMuZG9tRGltZW5zaW9ucz17bWFpbjp7d2lkdGg6dGhpcy5zZXJpZXNWaWV3Lm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGgsaGVpZ2h0OnRoaXMuc2VyaWVzVmlldy5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodH0seEF4aXM6e3dpZHRoOnRoaXMueEF4aXMubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCxoZWlnaHQ6dGhpcy54QXhpcy5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodH0seUF4aXM6e3dpZHRoOnRoaXMueUF4aXMubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCxoZWlnaHQ6dGhpcy55QXhpcy5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodH19fXVwZGF0ZUxpbmVDaGFydCgpe3ZhciB0LGU7aWYodGhpcy5saW5lQ2hhcnQmJiF0aGlzLmRpc2FibGVVcGRhdGUpe2lmKHRoaXMuc2NhbGVVcGRhdGVkJiYodGhpcy5zY2FsZVVwZGF0ZWQ9ITEsdGhpcy5saW5lQ2hhcnQuc2V0WFNjYWxlVHlwZSh0aGlzLnhTY2FsZVR5cGUpLHRoaXMubGluZUNoYXJ0LnNldFlTY2FsZVR5cGUodGhpcy55U2NhbGVUeXBlKSksdGhpcy5pc01ldGFkYXRhVXBkYXRlZCYmKHRoaXMuaXNNZXRhZGF0YVVwZGF0ZWQ9ITEsdGhpcy5saW5lQ2hhcnQuc2V0TWV0YWRhdGEodGhpcy5zZXJpZXNNZXRhZGF0YU1hcCkpLHRoaXMuaXNEYXRhVXBkYXRlZCYmKHRoaXMuaXNEYXRhVXBkYXRlZD0hMSx0aGlzLmxpbmVDaGFydC5zZXREYXRhKHRoaXMuc2VyaWVzRGF0YSkpLHRoaXMudXNlRGFya01vZGVVcGRhdGVkJiYodGhpcy51c2VEYXJrTW9kZVVwZGF0ZWQ9ITEsdGhpcy5saW5lQ2hhcnQuc2V0VXNlRGFya01vZGUodGhpcy51c2VEYXJrTW9kZSkpLHRoaXMuaXNGaXhlZFZpZXdCb3hVcGRhdGVkJiZ0aGlzLmZpeGVkVmlld0JveCl0aGlzLnZpZXdCb3g9dGhpcy5maXhlZFZpZXdCb3g7ZWxzZSBpZighdGhpcy5pc1ZpZXdCb3hPdmVycmlkZGVuJiZ0aGlzLmlzVmlld0JveENoYW5nZWQpe2NvbnN0IG49KGZ1bmN0aW9uIG4odCxlLG8saSxhKXtsZXQgcj1udWxsLHM9bnVsbCxsPVtdO2Zvcihjb25zdHtpZDpuLHBvaW50czpvfW9mIHQpe2NvbnN0IHQ9ZVtuXTtpZih0JiYhdC5hdXgmJnQudmlzaWJsZSlmb3IobGV0IHQ9MDt0PG8ubGVuZ3RoO3QrKyl7Y29uc3R7eDplLHk6bn09b1t0XTtpKGUpJiYocj1udWxsPT09cnx8ZTxyP2U6cixzPW51bGw9PT1zfHxlPnM/ZTpzKSxhKG4pJiZsLnB1c2gobil9fWwuc29ydCh5NSk7bGV0IGM9bFswXSxkPWxbbC5sZW5ndGgtMV07cmV0dXJuIG8mJmwubGVuZ3RoPjImJihjPWxbTWF0aC5jZWlsKC4wNSoobC5sZW5ndGgtMSkpXSxkPWxbTWF0aC5mbG9vciguOTUqKGwubGVuZ3RoLTEpKV0pLHt4Om51bGwhPT1yJiZudWxsIT09cz9bcixzXTp2b2lkIDAseTp2b2lkIDAhPT1jJiZ2b2lkIDAhPT1kP1tjLGRdOnZvaWQgMH19KSh0aGlzLnNlcmllc0RhdGEsdGhpcy5zZXJpZXNNZXRhZGF0YU1hcCx0aGlzLmlnbm9yZVlPdXRsaWVycyx0aGlzLnhTY2FsZS5pc1NhZmVOdW1iZXIsdGhpcy55U2NhbGUuaXNTYWZlTnVtYmVyKTt0aGlzLnZpZXdCb3g9e3g6dGhpcy54U2NhbGUubmljZURvbWFpbihudWxsIT09KHQ9bi54KSYmdm9pZCAwIT09dD90OnZmdC54KSx5OnRoaXMueVNjYWxlLm5pY2VEb21haW4obnVsbCE9PShlPW4ueSkmJnZvaWQgMCE9PWU/ZTp2ZnQueSl9fSh0aGlzLmlzRml4ZWRWaWV3Qm94VXBkYXRlZHx8dGhpcy5pc1ZpZXdCb3hDaGFuZ2VkKSYmKHRoaXMuaXNGaXhlZFZpZXdCb3hVcGRhdGVkPSExLHRoaXMuaXNWaWV3Qm94Q2hhbmdlZD0hMSx0aGlzLmxpbmVDaGFydC5zZXRWaWV3Qm94KHRoaXMudmlld0JveCkpfX1vblZpZXdCb3hDaGFuZ2VkKHtkYXRhRXh0ZW50OnR9KXt0aGlzLnNldElzVmlld0JveE92ZXJyaWRkZW4oITApLHRoaXMuaXNWaWV3Qm94Q2hhbmdlZD0hMCx0aGlzLnZpZXdCb3g9dCx0aGlzLnVwZGF0ZUxpbmVDaGFydCgpfXZpZXdCb3hSZXNldCgpe3RoaXMuc2V0SXNWaWV3Qm94T3ZlcnJpZGRlbighMSksdGhpcy5pc1ZpZXdCb3hDaGFuZ2VkPSEwLHRoaXMudXBkYXRlTGluZUNoYXJ0KCl9c2V0SXNWaWV3Qm94T3ZlcnJpZGRlbih0KXtjb25zdCBlPXRoaXMuaXNWaWV3Qm94T3ZlcnJpZGRlbjt0aGlzLmlzVmlld0JveE92ZXJyaWRkZW49dCxlIT09dCYmdGhpcy5vblZpZXdCb3hPdmVycmlkZGVuLm5leHQodCl9Z2V0SXNWaWV3Qm94T3ZlcnJpZGRlbigpe3JldHVybiB0aGlzLm9uVmlld0JveE92ZXJyaWRkZW59b25WaWV3Qm94Q2hhbmdlZEZyb21BeGlzKHQsZSl7Y29uc3Qgbj1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdGhpcy52aWV3Qm94KSx7W2VdOnR9KTt0aGlzLm9uVmlld0JveENoYW5nZWQoe2RhdGFFeHRlbnQ6bn0pfX1mdW5jdGlvbiBPZnQodCxlKXsxJnQmJnd1KDAsIm1hdC1zcGlubmVyIiwxOSl9ZnVuY3Rpb24gUGZ0KHQsZSl7aWYoMSZ0KXtjb25zdCB0PUV1KCk7a3UoMCksT3UoMSwibGluZS1jaGFydCIsMjApLE51KCJvblZpZXdCb3hPdmVycmlkZGVuIiwoZnVuY3Rpb24gZShuKXtyZXR1cm4gcmEodCksTHUoKS5pc1ZpZXdCb3hPdmVycmlkZGVuPW59KSksUHUoKSxTdSgpfWlmKDImdCl7Y29uc3QgdD1MdSgpLGU9R20oMjcpO0pjKDEpLHZ1KCJkaXNhYmxlVXBkYXRlIiwhdC5pc0NhcmRWaXNpYmxlKSgicHJlZmVycmVkUmVuZGVyZXJUeXBlIix0LlJlbmRlcmVyVHlwZS5XRUJHTCkoInNlcmllc0RhdGEiLHQuZGF0YVNlcmllcykoInNlcmllc01ldGFkYXRhTWFwIix0LmNoYXJ0TWV0YWRhdGFNYXApKCJ4U2NhbGVUeXBlIix0LnhTY2FsZVR5cGUpKCJ5U2NhbGVUeXBlIix0LnlTY2FsZVR5cGUpKCJjdXN0b21YRm9ybWF0dGVyIix0LmdldEN1c3RvbVhGb3JtYXR0ZXIoKSkoImlnbm9yZVlPdXRsaWVycyIsdC5pZ25vcmVPdXRsaWVycykoInRvb2x0aXBUZW1wbGF0ZSIsZSkoInVzZURhcmtNb2RlIix0LnVzZURhcmtNb2RlKX19ZnVuY3Rpb24gd2Z0KHQsZSl7MSZ0JiYoT3UoMCwidGgiKSxNZigxLCJTbW9vdGhlZCIpLFB1KCkpfWZ1bmN0aW9uIGtmdCh0LGUpezEmdCYmKE91KDAsInRoIiksTWYoMSwiUmVsYXRpdmUiKSxQdSgpKX1mdW5jdGlvbiBTZnQodCxlKXtpZigxJnQmJihPdSgwLCJ0ZCIpLE1mKDEpLFB1KCkpLDImdCl7Y29uc3QgdD1MdSgpLiRpbXBsaWNpdCxlPUx1KDIpO0pjKDEpLHhmKCIgIixlLnZhbHVlRm9ybWF0dGVyLmZvcm1hdFNob3J0KHQucG9pbnQueSksIiAiKX19ZnVuY3Rpb24gRGZ0KHQsZSl7aWYoMSZ0JiYoT3UoMCwidGQiKSxNZigxKSxQdSgpKSwyJnQpe2NvbnN0IHQ9THUoKS4kaW1wbGljaXQsZT1MdSgyKTtKYygxKSx4ZigiICIsZS5yZWxhdGl2ZVhGb3JtYXR0ZXIuZm9ybWF0UmVhZGFibGUodC5wb2ludC54KSwiICIpfX1mdW5jdGlvbiBFZnQodCxlKXtpZigxJnQmJihrdSgwKSxPdSgxLCJ0ciIsMjQpLE91KDIsInRkIiwyNSksd3UoMywic3BhbiIpLFB1KCksT3UoNCwidGQiLDI2KSxNZig1KSxQdSgpLFdtKDYsU2Z0LDIsMSwidGQiLDE3KSxPdSg3LCJ0ZCIpLE1mKDgpLFB1KCksT3UoOSwidGQiKSxNZigxMCksUHUoKSxPdSgxMSwidGQiKSxNZigxMiksT2IoMTMsImRhdGUiKSxQdSgpLFdtKDE0LERmdCwyLDEsInRkIiwxNyksUHUoKSxTdSgpKSwyJnQpe2NvbnN0IHQ9ZS4kaW1wbGljaXQsbj1MdSgyKTtKYygxKSxhZigiY2xvc2VzdCIsdC5tZXRhZGF0YS5jbG9zZXN0KSxKYygyKSxvZigiYmFja2dyb3VuZC1jb2xvciIsdC5tZXRhZGF0YS5jb2xvciksSmMoMiksdmYodC5tZXRhZGF0YS5kaXNwbGF5TmFtZSksSmMoMSksdnUoIm5nSWYiLG4uc21vb3RoaW5nRW5hYmxlZCksSmMoMiksdmYobi52YWx1ZUZvcm1hdHRlci5mb3JtYXRTaG9ydCh0LnBvaW50LnZhbHVlKSksSmMoMiksdmYobi5zdGVwRm9ybWF0dGVyLmZvcm1hdFNob3J0KHQucG9pbnQuc3RlcCkpLEpjKDIpLHZmKHdiKDEzLDEwLHQucG9pbnQud2FsbFRpbWUsInNob3J0IikpLEpjKDIpLHZ1KCJuZ0lmIixuLnhBeGlzVHlwZT09PW4uWEF4aXNUeXBlLlJFTEFUSVZFKX19ZnVuY3Rpb24gQWZ0KHQsZSl7aWYoMSZ0JiYoT3UoMCwidGFibGUiLDIxKSxPdSgxLCJ0aGVhZCIpLE91KDIsInRyIiksd3UoMywidGgiLDIyKSxPdSg0LCJ0aCIpLE1mKDUsIlJ1biIpLFB1KCksV20oNix3ZnQsMiwwLCJ0aCIsMTcpLE91KDcsInRoIiksTWYoOCwiVmFsdWUiKSxQdSgpLE91KDksInRoIiksTWYoMTAsIlN0ZXAiKSxQdSgpLE91KDExLCJ0aCIpLE1mKDEyLCJUaW1lIiksUHUoKSxXbSgxMyxrZnQsMiwwLCJ0aCIsMTcpLFB1KCksUHUoKSxPdSgxNCwidGJvZHkiKSxXbSgxNSxFZnQsMTUsMTMsIm5nLWNvbnRhaW5lciIsMjMpLFB1KCksUHUoKSksMiZ0KXtjb25zdCB0PWUuZGF0YSxuPWUuY3Vyc29yTG9jYXRpb25JbkRhdGFDb29yZCxvPUx1KCk7SmMoNiksdnUoIm5nSWYiLG8uc21vb3RoaW5nRW5hYmxlZCksSmMoNyksdnUoIm5nSWYiLG8ueEF4aXNUeXBlPT09by5YQXhpc1R5cGUuUkVMQVRJVkUpLEpjKDIpLHZ1KCJuZ0Zvck9mIixvLmdldEN1cnNvckF3YXJlVG9vbHRpcERhdGEodCxuKSkoIm5nRm9yVHJhY2tCeSIsby50cmFja0J5VG9vbHRpcERhdHVtKX19eGZ0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHx4ZnQpKE11KEhoKSl9LHhmdC7JtWNtcD1Vbyh7dHlwZTp4ZnQsc2VsZWN0b3JzOltbImxpbmUtY2hhcnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJihXYihnZnQsMyxjaCksV2IoaGZ0LDMsY2gpLFdiKGJmdCwzLGNoKSxXYih5ZnQsMSxjaCkpLDImZSl7bGV0IHQ7VWIodD1ZYigpKSYmKG4uc2VyaWVzVmlldz10LmZpcnN0KSxVYih0PVliKCkpJiYobi54QXhpcz10LmZpcnN0KSxVYih0PVliKCkpJiYobi55QXhpcz10LmZpcnN0KSxVYih0PVliKCkpJiYobi5jaGFydEVsPXQuZmlyc3QpfX0saW5wdXRzOnt1c2VEYXJrTW9kZToidXNlRGFya01vZGUiLHByZWZlcnJlZFJlbmRlcmVyVHlwZToicHJlZmVycmVkUmVuZGVyZXJUeXBlIixzZXJpZXNEYXRhOiJzZXJpZXNEYXRhIixmaXhlZFZpZXdCb3g6ImZpeGVkVmlld0JveCIsc2VyaWVzTWV0YWRhdGFNYXA6InNlcmllc01ldGFkYXRhTWFwIix4U2NhbGVUeXBlOiJ4U2NhbGVUeXBlIix5U2NhbGVUeXBlOiJ5U2NhbGVUeXBlIixjdXN0b21YRm9ybWF0dGVyOiJjdXN0b21YRm9ybWF0dGVyIixjdXN0b21ZRm9ybWF0dGVyOiJjdXN0b21ZRm9ybWF0dGVyIix0b29sdGlwVGVtcGxhdGU6InRvb2x0aXBUZW1wbGF0ZSIsZGlzYWJsZVVwZGF0ZToiZGlzYWJsZVVwZGF0ZSIsaWdub3JlWU91dGxpZXJzOiJpZ25vcmVZT3V0bGllcnMifSxmZWF0dXJlczpbU2ldLGRlY2xzOjE0LHZhcnM6MzAsY29uc3RzOltbImRldGVjdFJlc2l6ZSIsIiIsImNka092ZXJsYXlPcmlnaW4iLCIiLDMsIm5nQ2xhc3MiLCJyZXNpemVFdmVudERlYm91bmNlUGVyaW9kSW5NcyIsIm9uUmVzaXplIl0sWyJvdmVybGF5VGFyZ2V0IiwiY2RrT3ZlcmxheU9yaWdpbiJdLFsxLCJzZXJpZXMtdmlldyJdLFsic2VyaWVzVmlldyIsIiJdLFszLCJ2aWV3RXh0ZW50IiwieFNjYWxlIiwieVNjYWxlIiwieEdyaWRDb3VudCIsInlHcmlkQ291bnQiLCJkb21EaW0iXSxbNCwibmdJZiJdLFszLCJzZXJpZXNEYXRhIiwic2VyaWVzTWV0YWRhdGFNYXAiLCJ2aWV3RXh0ZW50IiwieFNjYWxlIiwieVNjYWxlIiwidG9vbHRpcE9yaWdpbkVsIiwiZG9tRGltIiwidG9vbHRpcFRlbXBsYXRlIiwib25WaWV3RXh0ZW50Q2hhbmdlIiwib25WaWV3RXh0ZW50UmVzZXQiXSxbImF4aXMiLCJ5IiwxLCJ5LWF4aXMiLDMsImF4aXNFeHRlbnQiLCJjdXN0b21Gb3JtYXR0ZXIiLCJkb21EaW0iLCJncmlkQ291bnQiLCJzY2FsZSIsIm9uVmlld0V4dGVudENoYW5nZSJdLFsieUF4aXMiLCIiXSxbImF4aXMiLCJ4IiwxLCJ4LWF4aXMiLDMsImF4aXNFeHRlbnQiLCJjdXN0b21Gb3JtYXR0ZXIiLCJkb21EaW0iLCJncmlkQ291bnQiLCJzY2FsZSIsIm9uVmlld0V4dGVudENoYW5nZSJdLFsieEF4aXMiLCIiXSxbMSwiZG90Il0sWzEsInJlY3QiXSxbImNoYXJ0RWwiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pe2lmKDEmZSYmKE91KDAsImRpdiIsMCwxKSxOdSgib25SZXNpemUiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub25WaWV3UmVzaXplKCl9KSksT3UoMiwiZGl2IiwyLDMpLHd1KDQsImxpbmUtY2hhcnQtZ3JpZC12aWV3Iiw0KSxXbSg1LF9mdCwyLDAsInN2ZyIsNSksV20oNixDZnQsMiwwLCJjYW52YXMiLDUpLE91KDcsImxpbmUtY2hhcnQtaW50ZXJhY3RpdmUtdmlldyIsNiksTnUoIm9uVmlld0V4dGVudENoYW5nZSIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25WaWV3Qm94Q2hhbmdlZChlKX0pKSgib25WaWV3RXh0ZW50UmVzZXQiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4udmlld0JveFJlc2V0KCl9KSksUHUoKSxQdSgpLE91KDgsImxpbmUtY2hhcnQtYXhpcyIsNyw4KSxOdSgib25WaWV3RXh0ZW50Q2hhbmdlIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vblZpZXdCb3hDaGFuZ2VkRnJvbUF4aXMoZSwieSIpfSkpLFB1KCksT3UoMTAsImxpbmUtY2hhcnQtYXhpcyIsOSwxMCksTnUoIm9uVmlld0V4dGVudENoYW5nZSIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25WaWV3Qm94Q2hhbmdlZEZyb21BeGlzKGUsIngiKX0pKSxQdSgpLE91KDEyLCJkaXYiLDExKSx3dSgxMywic3BhbiIsMTIpLFB1KCksUHUoKSksMiZlKXtjb25zdCB0PUdtKDEpO3Z1KCJuZ0NsYXNzIixnYigyOCxNZnQsbi51c2VEYXJrTW9kZSkpKCJyZXNpemVFdmVudERlYm91bmNlUGVyaW9kSW5NcyIsMCksSmMoNCksdnUoInZpZXdFeHRlbnQiLG4udmlld0JveCkoInhTY2FsZSIsbi54U2NhbGUpKCJ5U2NhbGUiLG4ueVNjYWxlKSgieEdyaWRDb3VudCIsbi5YX0dSSURfQ09VTlQpKCJ5R3JpZENvdW50IixuLllfR1JJRF9DT1VOVCkoImRvbURpbSIsbi5kb21EaW1lbnNpb25zLm1haW4pLEpjKDEpLHZ1KCJuZ0lmIixuLmdldFJlbmRlcmVyVHlwZSgpPT09bi5SZW5kZXJlclR5cGUuU1ZHKSxKYygxKSx2dSgibmdJZiIsbi5nZXRSZW5kZXJlclR5cGUoKT09PW4uUmVuZGVyZXJUeXBlLldFQkdMKSxKYygxKSx2dSgic2VyaWVzRGF0YSIsbi5zZXJpZXNEYXRhKSgic2VyaWVzTWV0YWRhdGFNYXAiLG4uc2VyaWVzTWV0YWRhdGFNYXApKCJ2aWV3RXh0ZW50IixuLnZpZXdCb3gpKCJ4U2NhbGUiLG4ueFNjYWxlKSgieVNjYWxlIixuLnlTY2FsZSkoInRvb2x0aXBPcmlnaW5FbCIsdCkoImRvbURpbSIsbi5kb21EaW1lbnNpb25zLm1haW4pKCJ0b29sdGlwVGVtcGxhdGUiLG4udG9vbHRpcFRlbXBsYXRlKSxKYygxKSx2dSgiYXhpc0V4dGVudCIsbi52aWV3Qm94LnkpKCJjdXN0b21Gb3JtYXR0ZXIiLG4uY3VzdG9tWUZvcm1hdHRlcikoImRvbURpbSIsbi5kb21EaW1lbnNpb25zLnlBeGlzKSgiZ3JpZENvdW50IixuLllfR1JJRF9DT1VOVCkoInNjYWxlIixuLnlTY2FsZSksSmMoMiksdnUoImF4aXNFeHRlbnQiLG4udmlld0JveC54KSgiY3VzdG9tRm9ybWF0dGVyIixuLmN1c3RvbVhGb3JtYXR0ZXIpKCJkb21EaW0iLG4uZG9tRGltZW5zaW9ucy54QXhpcykoImdyaWRDb3VudCIsbi5YX0dSSURfQ09VTlQpKCJzY2FsZSIsbi54U2NhbGUpfX0sZGlyZWN0aXZlczpbcUssdEwsdHYsS3V0LGF2LGNmdCxmZnRdLHN0eWxlczpbJy5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHh9Lm1hdC1oMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaGVhZGxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTVweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZ1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjA1ZW07bWFyZ2luOjAgMCA1NnB4fS5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAwNWVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXJhaXNlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdHJva2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmxhdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZhYltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbWluaS1mYWJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4fS5tYXQtY2FyZC1zdWJ0aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGVja2JveC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvb3Rlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgdHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIzZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LjU0MTY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2NjY2NjY3ZW0pfUBtZWRpYSBwcmludHsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjJlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouMjVlbSAwIC43NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxZW0gMCAxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMiksIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi0wLjA2MjVlbX0ubWF0LW1lbnUtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci12ZXJ0aWNhbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGFiLWxpbmtbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MH0ubWF0LXRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5Om5vbmV9LmNkay12aXN1YWxseS1oaWRkZW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjZ9LmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV0sIC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3hbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2tbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHt9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7fS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOi13ZWJraXQtYXV0b2ZpbGwpe2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZVtfbmdjb250ZW50LSVDT01QJV17cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fS5tYXQtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfVtfbmdob3N0LSVDT01QJV17Y29udGFpbjpzdHJpY3Q7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDppbmhlcml0O2Rpc3BsYXk6Z3JpZDtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW47d2lkdGg6MTAwJTtncmlkLXRlbXBsYXRlLWFyZWFzOiJ5YXhpcyBzZXJpZXMiICJkb3QgeGF4aXMiO2dyaWQtdGVtcGxhdGUtY29sdW1uczo1MHB4IDFmcjtncmlkLWF1dG8tcm93czoxZnIgMzBweH0uY29udGFpbmVyLmRhcmstbW9kZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2ZmZn0uc2VyaWVzLXZpZXdbX25nY29udGVudC0lQ09NUCVde2dyaWQtYXJlYTpzZXJpZXM7cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6aGlkZGVufS5zZXJpZXMtdmlld1tfbmdjb250ZW50LSVDT01QJV0gICBjYW52YXNbX25nY29udGVudC0lQ09NUCVdLCAuc2VyaWVzLXZpZXdbX25nY29udGVudC0lQ09NUCVdICAgc3ZnW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnNlcmllcy12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGxpbmUtY2hhcnQtZ3JpZC12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSwgLnNlcmllcy12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGxpbmUtY2hhcnQtaW50ZXJhY3RpdmUtdmlld1tfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMCU7bGVmdDowO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3dpZHRoOjEwMCV9LngtYXhpc1tfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOnhheGlzfS55LWF4aXNbX25nY29udGVudC0lQ09NUCVde2dyaWQtYXJlYTp5YXhpc30uZG90W19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2Rpc3BsYXk6ZmxleDtncmlkLWFyZWE6ZG90O2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uZG90W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yZWN0W19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MXB4O3dpZHRoOjFweDtiYWNrZ3JvdW5kLWNvbG9yOiNhYWF9J10sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHhmdCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJsaW5lLWNoYXJ0Iix0ZW1wbGF0ZVVybDoibGluZV9jaGFydF9jb21wb25lbnQubmcuaHRtbCIsc3R5bGVVcmxzOlsibGluZV9jaGFydF9jb21wb25lbnQuY3NzIl0sY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkhofV19KSx7c2VyaWVzVmlldzpbe3R5cGU6RnIsYXJnczpbInNlcmllc1ZpZXciLHtzdGF0aWM6ITAscmVhZDpjaH1dfV0seEF4aXM6W3t0eXBlOkZyLGFyZ3M6WyJ4QXhpcyIse3N0YXRpYzohMCxyZWFkOmNofV19XSx5QXhpczpbe3R5cGU6RnIsYXJnczpbInlBeGlzIix7c3RhdGljOiEwLHJlYWQ6Y2h9XX1dLGNoYXJ0RWw6W3t0eXBlOkZyLGFyZ3M6WyJjaGFydEVsIix7c3RhdGljOiExLHJlYWQ6Y2h9XX1dLHVzZURhcmtNb2RlOlt7dHlwZTp5X31dLHByZWZlcnJlZFJlbmRlcmVyVHlwZTpbe3R5cGU6eV99XSxzZXJpZXNEYXRhOlt7dHlwZTp5X31dLGZpeGVkVmlld0JveDpbe3R5cGU6eV99XSxzZXJpZXNNZXRhZGF0YU1hcDpbe3R5cGU6eV99XSx4U2NhbGVUeXBlOlt7dHlwZTp5X31dLHlTY2FsZVR5cGU6W3t0eXBlOnlffV0sY3VzdG9tWEZvcm1hdHRlcjpbe3R5cGU6eV99XSxjdXN0b21ZRm9ybWF0dGVyOlt7dHlwZTp5X31dLHRvb2x0aXBUZW1wbGF0ZTpbe3R5cGU6eV99XSxkaXNhYmxlVXBkYXRlOlt7dHlwZTp5X31dLGlnbm9yZVlPdXRsaWVyczpbe3R5cGU6eV99XX0pO2NsYXNzIFJmdHtjb25zdHJ1Y3Rvcih0LGUpe3RoaXMucmVmPXQsdGhpcy5kaWFsb2c9ZSx0aGlzLkRhdGFMb2FkU3RhdGU9QkUsdGhpcy5SZW5kZXJlclR5cGU9YTUsdGhpcy5TY2FsZVR5cGU9cjUsdGhpcy5YQXhpc1R5cGU9Y1IsdGhpcy5vbkZ1bGxTaXplVG9nZ2xlPW5ldyBBYix0aGlzLm9uUGluQ2xpY2tlZD1uZXcgQWIsdGhpcy55U2NhbGVUeXBlPXI1LkxJTkVBUix0aGlzLnJlbGF0aXZlWEZvcm1hdHRlcj1Rb3QsdGhpcy52YWx1ZUZvcm1hdHRlcj1qb3QsdGhpcy5zdGVwRm9ybWF0dGVyPVlvdH10b2dnbGVZU2NhbGVUeXBlKCl7dGhpcy55U2NhbGVUeXBlPXRoaXMueVNjYWxlVHlwZT09PXI1LkxJTkVBUj9yNS5MT0cxMDpyNS5MSU5FQVJ9cmVzZXREb21haW4oKXt0aGlzLmxpbmVDaGFydCYmdGhpcy5saW5lQ2hhcnQudmlld0JveFJlc2V0KCl9dHJhY2tCeVRvb2x0aXBEYXR1bSh0LGUpe3JldHVybiBlLmlkfWdldEN1c3RvbVhGb3JtYXR0ZXIoKXtzd2l0Y2godGhpcy54QXhpc1R5cGUpe2Nhc2UgY1IuUkVMQVRJVkU6cmV0dXJuIFFvdDtjYXNlIGNSLlNURVA6cmV0dXJuIFlvdDtjYXNlIGNSLldBTExfVElNRTpkZWZhdWx0OnJldHVybn19Z2V0Q3Vyc29yQXdhcmVUb29sdGlwRGF0YSh0LGUpe2NvbnN0IG49dC5tYXAoKHQ9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7bWV0YWRhdGE6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQubWV0YWRhdGEpLHtjbG9zZXN0OiExLGRpc3RTcVRvQ3Vyc29yOk1hdGguaHlwb3QodC5wb2ludC54LWUueCx0LnBvaW50LnktZS55KX0pfSkpKTtsZXQgbz0xLzAsaT0wO2ZvcihsZXQgdD0wO3Q8bi5sZW5ndGg7dCsrKW8+blt0XS5tZXRhZGF0YS5kaXN0U3FUb0N1cnNvciYmKG89blt0XS5tZXRhZGF0YS5kaXN0U3FUb0N1cnNvcixpPXQpO3N3aXRjaChuLmxlbmd0aCYmKG5baV0ubWV0YWRhdGEuY2xvc2VzdD0hMCksdGhpcy50b29sdGlwU29ydCl7Y2FzZSBsUi5ERUZBVUxUOnJldHVybiBuO2Nhc2UgbFIuQVNDRU5ESU5HOnJldHVybiBuLnNvcnQoKCh0LGUpPT50LnBvaW50LnktZS5wb2ludC55KSk7Y2FzZSBsUi5ERVNDRU5ESU5HOnJldHVybiBuLnNvcnQoKCh0LGUpPT5lLnBvaW50LnktdC5wb2ludC55KSk7Y2FzZSBsUi5ORUFSRVNUOnJldHVybiBuLnNvcnQoKCh0LGUpPT50Lm1ldGFkYXRhLmRpc3RTcVRvQ3Vyc29yLWUubWV0YWRhdGEuZGlzdFNxVG9DdXJzb3IpKX19b3BlbkRhdGFEb3dubG9hZERpYWxvZygpe3RoaXMuZGlhbG9nLm9wZW4odGhpcy5EYXRhRG93bmxvYWRDb21wb25lbnQse2RhdGE6e2NhcmRJZDp0aGlzLmNhcmRJZH19KX19ZnVuY3Rpb24gVGZ0KHQsZSl7cmV0dXJuIHQubGVuZ3RoPT09ZS5sZW5ndGgmJnQuZXZlcnkoKCh0LG4pPT57Y29uc3Qgbz1lW25dLGk9dC5wb2ludHMsYT1vLnBvaW50cztyZXR1cm4gdC5ydW5JZD09PW8ucnVuSWQmJmkubGVuZ3RoPT09YS5sZW5ndGgmJmkuZXZlcnkoKCh0LGUpPT57Y29uc3Qgbj1hW2VdO3JldHVybiB0Lng9PT1uLngmJnQueT09PW4ueX0pKX0pKX1SZnQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFJmdCkoTXUoY2gpLE11KEhXKSl9LFJmdC7JtWNtcD1Vbyh7dHlwZTpSZnQsc2VsZWN0b3JzOltbInNjYWxhci1jYXJkLWNvbXBvbmVudCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24gdChlLG4pe2lmKDEmZSYmV2IoeGZ0LDEpLDImZSl7bGV0IHQ7VWIodD1ZYigpKSYmKG4ubGluZUNoYXJ0PXQuZmlyc3QpfX0saW5wdXRzOntjYXJkSWQ6ImNhcmRJZCIsY2hhcnRNZXRhZGF0YU1hcDoiY2hhcnRNZXRhZGF0YU1hcCIsRGF0YURvd25sb2FkQ29tcG9uZW50OiJEYXRhRG93bmxvYWRDb21wb25lbnQiLGRhdGFTZXJpZXM6ImRhdGFTZXJpZXMiLGlnbm9yZU91dGxpZXJzOiJpZ25vcmVPdXRsaWVycyIsaXNDYXJkVmlzaWJsZToiaXNDYXJkVmlzaWJsZSIsaXNFdmVyVmlzaWJsZToiaXNFdmVyVmlzaWJsZSIsaXNQaW5uZWQ6ImlzUGlubmVkIixsb2FkU3RhdGU6ImxvYWRTdGF0ZSIsc2hvd0Z1bGxTaXplOiJzaG93RnVsbFNpemUiLHNtb290aGluZ0VuYWJsZWQ6InNtb290aGluZ0VuYWJsZWQiLHRhZzoidGFnIix0aXRsZToidGl0bGUiLHRvb2x0aXBTb3J0OiJ0b29sdGlwU29ydCIseEF4aXNUeXBlOiJ4QXhpc1R5cGUiLHhTY2FsZVR5cGU6InhTY2FsZVR5cGUiLHVzZURhcmtNb2RlOiJ1c2VEYXJrTW9kZSJ9LG91dHB1dHM6e29uRnVsbFNpemVUb2dnbGU6Im9uRnVsbFNpemVUb2dnbGUiLG9uUGluQ2xpY2tlZDoib25QaW5DbGlja2VkIn0sZGVjbHM6MjgsdmFyczoxNCxjb25zdHM6ZnVuY3Rpb24oKXtsZXQgdCxlLG4sbyxpO3JldHVybiB0PSJ1bmRlZmluZWQiIT10eXBlb2YgbmdJMThuQ2xvc3VyZU1vZGUmJm5nSTE4bkNsb3N1cmVNb2RlP2dvb2cuZ2V0TXNnKCJGaXQgbGluZSBjaGFydCBkb21haW5zIHRvIGRhdGEiKTokbG9jYWxpemVgOkEgYnV0dG9uIHRoYXQgcmVzZXRzIGxpbmUgY2hhcnQgZG9tYWluIHRvIHRoZSBkYXRh4pCfZTY4YTU1Mjk0MWFiNDI3YTk5ZTc0MzdlMDg0NDNmMzBhYzcxY2NkNuKQnzM4MzA2NDY1MjEwNTgyNjg1NTg6Rml0IGxpbmUgY2hhcnQgZG9tYWlucyB0byBkYXRhYCxlPSJ1bmRlZmluZWQiIT10eXBlb2YgbmdJMThuQ2xvc3VyZU1vZGUmJm5nSTE4bkNsb3N1cmVNb2RlP2dvb2cuZ2V0TXNnKCJQaW4gY2FyZCIpOiRsb2NhbGl6ZWA6QSBidXR0b24gdG8gcGluIGEgY2FyZC7ikJ9lNjY1ZGM3MTJiZDVmMThkNGRmYTNhMjllMTI1ZDU2NWNjNTFlMmY24pCfNzI4NDYwNjQyNjIzNDM3NTM0NDpQaW4gY2FyZGAsbj0idW5kZWZpbmVkIiE9dHlwZW9mIG5nSTE4bkNsb3N1cmVNb2RlJiZuZ0kxOG5DbG9zdXJlTW9kZT9nb29nLmdldE1zZygiVG9nZ2xlIGZ1bGwgc2l6ZSBtb2RlIik6JGxvY2FsaXplYDpBIGJ1dHRvbiBvbiBsaW5lIGNoYXJ0IHRoYXQgdG9nZ2xlcyBmdWxsIHNpemUgbW9kZS7ikJ9mYzhmNzY3ZDBiOWY5MzAxODdhMWJhZTM0NDc3YWQyODczNmVjZTMz4pCfOTE1NzIxNTYzNjM4OTI2NTk3OlRvZ2dsZSBmdWxsIHNpemUgbW9kZWAsbz0idW5kZWZpbmVkIiE9dHlwZW9mIG5nSTE4bkNsb3N1cmVNb2RlJiZuZ0kxOG5DbG9zdXJlTW9kZT9nb29nLmdldE1zZygiTW9yZSBsaW5lIGNoYXJ0IG9wdGlvbnMiKTokbG9jYWxpemVgOkFuIG92ZXJmbG93IG1lbnUgYnV0dG9uIHRoYXQgb3BlbnMgbW9yZSBsaW5lIGNoYXJ0IG9wdGlvbnPikJ9iMjYwZmFiOTQ2YTMwNzdjZTIwZmQyOGUzMzY5NzlmNTg2NzIwZThk4pCfODc4MDUzNzQwMjEwMzM2NDM1Ok1vcmUgbGluZSBjaGFydCBvcHRpb25zYCxpPSJ1bmRlZmluZWQiIT10eXBlb2YgbmdJMThuQ2xvc3VyZU1vZGUmJm5nSTE4bkNsb3N1cmVNb2RlP2dvb2cuZ2V0TXNnKCJUb2dnbGUgWS1heGlzIGxvZyBzY2FsZSBvbiBsaW5lIGNoYXJ0Iik6JGxvY2FsaXplYDpBIGJ1dHRvbiB0aGF0IHRvZ2dsZXMgbG9nIHNjYWxlIG9uIHktYXhpcyBvbiBhIGxpbmUgY2hhcnTikJ9mZTkxZjk2YWI5YjNiYWNhNWE0ODkxM2YyYjBmYWU4NDQ4M2Q5M2Uz4pCfMzM3NDY0NTYyMDYzODg4MzkyNjpUb2dnbGUgWS1heGlzIGxvZyBzY2FsZSBvbiBsaW5lIGNoYXJ0YCxbWzEsImhlYWRpbmciXSxbMSwidGFnIiwzLCJ0aXRsZSIsInZhbHVlIl0sWzEsImNvbnRyb2xzIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIix0LDMsImRpc2FibGVkIiwidGl0bGUiLCJjbGljayJdLFsic3ZnSWNvbiIsInNldHRpbmdzX292ZXJzY2FuXzI0cHgiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLGUsMSwicGluLWJ1dHRvbiIsMywiY2xpY2siXSxbMywic3ZnSWNvbiJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsbiwidGl0bGUiLCJUb2dnbGUgZnVsbCBzaXplIG1vZGUiLDMsImNsaWNrIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIixvLCJ0aXRsZSIsIk1vcmUgbGluZSBjaGFydCBvcHRpb25zIiwzLCJtYXRNZW51VHJpZ2dlckZvciJdLFsic3ZnSWNvbiIsIm1vcmVfdmVydF8yNHB4Il0sWyJtZW51IiwibWF0TWVudSJdLFsibWF0LW1lbnUtaXRlbSIsIiIsImFyaWEtbGFiZWwiLGksMywiY2xpY2siXSxbInN2Z0ljb24iLCJsaW5lX3dlaWdodF8yNHB4Il0sWyJtYXQtbWVudS1pdGVtIiwiIiwiYXJpYS1sYWJlbCIsIk9wZW4gZGlhbG9nIHRvIGRvd25sb2FkIGRhdGEiLDMsImNsaWNrIl0sWyJzdmdJY29uIiwiZ2V0X2FwcF8yNHB4Il0sWzEsImNoYXJ0LWNvbnRhaW5lciJdLFsiZGlhbWV0ZXIiLCIxOCIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWyJ0b29sdGlwIiwiIl0sWyJkaWFtZXRlciIsIjE4Il0sWzMsImRpc2FibGVVcGRhdGUiLCJwcmVmZXJyZWRSZW5kZXJlclR5cGUiLCJzZXJpZXNEYXRhIiwic2VyaWVzTWV0YWRhdGFNYXAiLCJ4U2NhbGVUeXBlIiwieVNjYWxlVHlwZSIsImN1c3RvbVhGb3JtYXR0ZXIiLCJpZ25vcmVZT3V0bGllcnMiLCJ0b29sdGlwVGVtcGxhdGUiLCJ1c2VEYXJrTW9kZSIsIm9uVmlld0JveE92ZXJyaWRkZW4iXSxbMSwidG9vbHRpcCJdLFsxLCJjaXJjbGUtaGVhZGVyIl0sWzQsIm5nRm9yIiwibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSJdLFsxLCJ0b29sdGlwLXJvdyJdLFsxLCJ0b29sdGlwLXJvdy1jaXJjbGUiXSxbMSwibmFtZSJdXX0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pe2lmKDEmZSYmKE91KDAsImRpdiIsMCksd3UoMSwidGItdHJ1bmNhdGVkLXBhdGgiLDEpLE91KDIsInNwYW4iLDIpLE91KDMsImJ1dHRvbiIsMyksTnUoImNsaWNrIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLnJlc2V0RG9tYWluKCl9KSksT2IoNCwiYXN5bmMiKSxPYig1LCJhc3luYyIpLHd1KDYsIm1hdC1pY29uIiw0KSxQdSgpLE91KDcsImJ1dHRvbiIsNSksTnUoImNsaWNrIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uUGluQ2xpY2tlZC5lbWl0KCFuLmlzUGlubmVkKX0pKSx3dSg4LCJtYXQtaWNvbiIsNiksUHUoKSxPdSg5LCJidXR0b24iLDcpLE51KCJjbGljayIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vbkZ1bGxTaXplVG9nZ2xlLmVtaXQoKX0pKSx3dSgxMCwibWF0LWljb24iLDYpLFB1KCksT3UoMTEsImJ1dHRvbiIsOCksd3UoMTIsIm1hdC1pY29uIiw5KSxQdSgpLE91KDEzLCJtYXQtbWVudSIsbnVsbCwxMCksT3UoMTUsImJ1dHRvbiIsMTEpLE51KCJjbGljayIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi50b2dnbGVZU2NhbGVUeXBlKCl9KSksd3UoMTYsIm1hdC1pY29uIiwxMiksT3UoMTcsInNwYW4iKSxNZigxOCwiVG9nZ2xlIFktYXhpcyBsb2cgc2NhbGUiKSxQdSgpLFB1KCksT3UoMTksImJ1dHRvbiIsMTMpLE51KCJjbGljayIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vcGVuRGF0YURvd25sb2FkRGlhbG9nKCl9KSksd3UoMjAsIm1hdC1pY29uIiwxNCksT3UoMjEsInNwYW4iKSxNZigyMiwiRG93bmxvYWQgZGF0YSIpLFB1KCksUHUoKSxQdSgpLFB1KCksUHUoKSxPdSgyMywiZGl2IiwxNSksV20oMjQsT2Z0LDEsMCwibWF0LXNwaW5uZXIiLDE2KSxXbSgyNSxQZnQsMiwxMCwibmctY29udGFpbmVyIiwxNyksV20oMjYsQWZ0LDE2LDQsIm5nLXRlbXBsYXRlIixudWxsLDE4LEtiKSxQdSgpKSwyJmUpe2NvbnN0IHQ9R20oMTQpO0pjKDEpLFV1KCJ0aXRsZSIsbi50YWcpLFV1KCJ2YWx1ZSIsbi50aXRsZSksSmMoMiksdnUoImRpc2FibGVkIiwhbi5saW5lQ2hhcnR8fCFQYig0LDEwLG4ubGluZUNoYXJ0LmdldElzVmlld0JveE92ZXJyaWRkZW4oKSkpKCJ0aXRsZSIsbi5saW5lQ2hhcnQmJlBiKDUsMTIsbi5saW5lQ2hhcnQuZ2V0SXNWaWV3Qm94T3ZlcnJpZGRlbigpKT8iTGluZSBjaGFydCBpcyBhbHJlYWR5IGZpdHRlZCB0byBkYXRhLiBXaGVuIGRhdGEgdXBkYXRlcywgdGhlIGxpbmUgY2hhcnQgd2lsbCBhdXRvIGZpdCB0byBpdHMgZG9tYWluLiI6IkZpdCBsaW5lIGNoYXJ0IGRvbWFpbnMgdG8gZGF0YSIpLEpjKDQpLE5tKCJ0aXRsZSIsbi5pc1Bpbm5lZD8iVW5waW4gY2FyZCI6IlBpbiBjYXJkIiksSmMoMSksdnUoInN2Z0ljb24iLG4uaXNQaW5uZWQ/ImtlZXBfMjRweCI6ImtlZXBfb3V0bGluZV8yNHB4IiksSmMoMiksdnUoInN2Z0ljb24iLG4uc2hvd0Z1bGxTaXplPyJmdWxsc2NyZWVuX2V4aXRfMjRweCI6ImZ1bGxzY3JlZW5fMjRweCIpLEpjKDEpLHZ1KCJtYXRNZW51VHJpZ2dlckZvciIsdCksSmMoMTMpLHZ1KCJuZ0lmIixuLmxvYWRTdGF0ZT09PW4uRGF0YUxvYWRTdGF0ZS5MT0FESU5HKSxKYygxKSx2dSgibmdJZiIsbi5pc0V2ZXJWaXNpYmxlKX19LGRpcmVjdGl2ZXM6W1kyLE5ILGNHLE5HLERHLE9HLGF2LFAxLHhmdCxvdl0scGlwZXM6W012LHd2XSxzdHlsZXM6WycubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1iYWRnZS1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo5cHh9Lm1hdC1iYWRnZS1sYXJnZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4fS5tYXQtaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWhlYWRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAyNHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE1cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjgzKS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1oNltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC42NykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtYm9keS1zdHJvbmdbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MCAwIDEycHh9Lm1hdC1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FwdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTJweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6MzAwIDExMnB4LzExMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wNWVtO21hcmdpbjowIDAgNTZweH0ubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNTZweC81NnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMmVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNDVweC80OHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMDVlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDM0cHgvNDBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1yYWlzZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3Ryb2tlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZsYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mYWJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW1pbmktZmFiW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtYnV0dG9uLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FyZC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjBweH0ubWF0LWNhcmQtc3VidGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hlY2tib3gtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC10cmFpbGluZy1pY29uLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC1yZW1vdmUubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxOHB4fS5tYXQtdGFibGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWhlYWRlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb290ZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jYWxlbmRhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FsZW5kYXItYm9keVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYWxlbmRhci1wZXJpb2QtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWRpYWxvZy10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTI1O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTUwJTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjVlbTt3aWR0aDoxLjVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW07bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41ZW0gMDtib3JkZXItdG9wOi44NDM3NWVtIHNvbGlkIHRyYW5zcGFyZW50fS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3RvcDotMC44NDM3NWVtO3BhZGRpbmctdG9wOi44NDM3NWVtfS5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjc1JTttYXJnaW4tdG9wOi42NjY2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNzkxNjY2NjY2N2VtKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAycHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyM2VtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzUzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi41NDE2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNjY2NjY2NjY2N2VtKX1AbWVkaWEgcHJpbnR7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIyZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIxZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMmVtKSBzY2FsZSgwLjc1KX19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjI1ZW0gMCAuNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4wOTM3NWVtO21hcmdpbi10b3A6LTAuNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MWVtIDAgMWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjg0Mzc1ZW07bWFyZ2luLXRvcDotMC4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH1pbnB1dC5tYXQtaW5wdXQtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDotMC4wNjI1ZW19Lm1hdC1tZW51LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1wYWdpbmF0b3JbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXBhZ2luYXRvci1wYWdlLXNpemVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3RbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXN0ZXBwZXItdmVydGljYWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc3RlcC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0Om5vcm1hbH0ubWF0LXN0ZXAtbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRhYi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjB9Lm1hdC10b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTZweH0ubWF0LW9wdGdyb3VwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LXNpbXBsZS1zbmFja2Jhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbltfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRyZWVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbmVzdGVkLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4fS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVdOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtcmlwcGxlLm1hdC1yaXBwbGUtdW5ib3VuZGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6NTAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7dHJhbnNmb3JtOnNjYWxlKDApfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpub25lfS5jZGstdmlzdWFsbHktaGlkZGVuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7bGVmdDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmVtcHR5e2Rpc3BsYXk6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LXBhbmVbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOmF1dG87Ym94LXNpemluZzpib3JkZXItYm94O3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7bWF4LXdpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlfS5jZGstb3ZlcmxheS1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKTtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5Oi42fS5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjMyKX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTowfS5jZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO292ZXJmbG93LXk6c2Nyb2xsfUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnR7fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5ke30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxse2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCAwcyAxbXN9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06bm90KDotd2Via2l0LWF1dG9maWxsKXthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIDBzIDFtc310ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemVbX25nY29udGVudC0lQ09NUCVde3Jlc2l6ZTpub25lfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmdbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OmF1dG8gIWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW4gIWltcG9ydGFudH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nLWZpcmVmb3hbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OjAgIWltcG9ydGFudH0ubWF0LWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX1bX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Ym94LXNpemluZzpib3JkZXItYm94O2hlaWdodDoxMDAlO292ZXJmbG93OmF1dG87cGFkZGluZzoxNnB4O3BhZGRpbmctdG9wOjRweH0uaGVhZGluZ1tfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbjtmb250LXNpemU6MTRweDttYXJnaW4tYm90dG9tOjRweDtwb3NpdGlvbjpyZWxhdGl2ZX0udGFnW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW59LnBpbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxOHB4fS5jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTt3aGl0ZS1zcGFjZTpub3dyYXA7ZmxleC1zaHJpbms6MDttYXJnaW4tcmlnaHQ6LTEycHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0uY2hhcnQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZTtmbGV4OjF9LmNoYXJ0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICBtYXQtc3Bpbm5lcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MTFweDt0b3A6MTFweH0uY2hhcnQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGxpbmUtY2hhcnRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjEwMCV9LnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1zcGFjaW5nOjRweDtmb250LXNpemU6MTNweH0udG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17dGV4dC1hbGlnbjpsZWZ0fS50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b29sdGlwLXJvd1tfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwfS50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b29sdGlwLXJvdy1jaXJjbGVbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmlubGluZS1mbGV4O2hlaWdodDoxMnB4O3dpZHRoOjEycHh9LnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdICAgLnRvb2x0aXAtcm93LWNpcmNsZVtfbmdjb250ZW50LSVDT01QJV0gPiBzcGFuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItcmFkaXVzOjUwJTtib3JkZXI6MXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsLjQpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxMHB4O3dpZHRoOjEwcHh9LnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdICAgLmNsb3Nlc3RbX25nY29udGVudC0lQ09NUCVdICAgLnRvb2x0aXAtcm93LWNpcmNsZVtfbmdjb250ZW50LSVDT01QJV0gPiBzcGFuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItY29sb3I6I2ZmZjtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCAjZmZmfSddLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihSZnQsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3Rvcjoic2NhbGFyLWNhcmQtY29tcG9uZW50Iix0ZW1wbGF0ZVVybDoic2NhbGFyX2NhcmRfY29tcG9uZW50Lm5nLmh0bWwiLHN0eWxlVXJsczpbInNjYWxhcl9jYXJkX2NvbXBvbmVudC5jc3MiXSxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Y2h9LHt0eXBlOkhXfV19KSx7Y2FyZElkOlt7dHlwZTp5X31dLGNoYXJ0TWV0YWRhdGFNYXA6W3t0eXBlOnlffV0sRGF0YURvd25sb2FkQ29tcG9uZW50Olt7dHlwZTp5X31dLGRhdGFTZXJpZXM6W3t0eXBlOnlffV0saWdub3JlT3V0bGllcnM6W3t0eXBlOnlffV0saXNDYXJkVmlzaWJsZTpbe3R5cGU6eV99XSxpc0V2ZXJWaXNpYmxlOlt7dHlwZTp5X31dLGlzUGlubmVkOlt7dHlwZTp5X31dLGxvYWRTdGF0ZTpbe3R5cGU6eV99XSxzaG93RnVsbFNpemU6W3t0eXBlOnlffV0sc21vb3RoaW5nRW5hYmxlZDpbe3R5cGU6eV99XSx0YWc6W3t0eXBlOnlffV0sdGl0bGU6W3t0eXBlOnlffV0sdG9vbHRpcFNvcnQ6W3t0eXBlOnlffV0seEF4aXNUeXBlOlt7dHlwZTp5X31dLHhTY2FsZVR5cGU6W3t0eXBlOnlffV0sdXNlRGFya01vZGU6W3t0eXBlOnlffV0sb25GdWxsU2l6ZVRvZ2dsZTpbe3R5cGU6X199XSxvblBpbkNsaWNrZWQ6W3t0eXBlOl9ffV0sbGluZUNoYXJ0Olt7dHlwZTpGcixhcmdzOlt4ZnRdfV19KTtjbGFzcyBOZnR7Y29uc3RydWN0b3IodCl7dGhpcy5zdG9yZT10LHRoaXMuRGF0YURvd25sb2FkQ29tcG9uZW50PWI1LHRoaXMuZnVsbFdpZHRoQ2hhbmdlZD1uZXcgQWIsdGhpcy5mdWxsSGVpZ2h0Q2hhbmdlZD1uZXcgQWIsdGhpcy5waW5TdGF0ZUNoYW5nZWQ9bmV3IEFiLHRoaXMuaXNDYXJkVmlzaWJsZSQ9dGhpcy5zdG9yZS5zZWxlY3QoRFQpLnBpcGUoaHQoKHQ9PnQuaGFzKHRoaXMuY2FyZElkKSkpLGtlKCkpLHRoaXMuaXNFdmVyVmlzaWJsZSQ9dGhpcy5pc0NhcmRWaXNpYmxlJC5waXBlKGhuKCh0PT4hdCksITApKSx0aGlzLnVzZURhcmtNb2RlJD10aGlzLnN0b3JlLnNlbGVjdChNRSksdGhpcy5pZ25vcmVPdXRsaWVycyQ9dGhpcy5zdG9yZS5zZWxlY3QoVlQpLHRoaXMudG9vbHRpcFNvcnQkPXRoaXMuc3RvcmUuc2VsZWN0KEJUKSx0aGlzLnhBeGlzVHlwZSQ9dGhpcy5zdG9yZS5zZWxlY3QoalQpLHRoaXMueFNjYWxlVHlwZSQ9dGhpcy5zdG9yZS5zZWxlY3QoalQpLnBpcGUoaHQoKHQ9Pntzd2l0Y2godCl7Y2FzZSBjUi5TVEVQOmNhc2UgY1IuUkVMQVRJVkU6cmV0dXJuIHI1LkxJTkVBUjtjYXNlIGNSLldBTExfVElNRTpyZXR1cm4gcjUuVElNRTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgSW52YWxpZCB4QXhpc1R5cGUgZm9yIGxpbmUgY2hhcnQuICR7dH1gKX19KSkpLHRoaXMuc2NhbGFyU21vb3RoaW5nJD10aGlzLnN0b3JlLnNlbGVjdChXVCksdGhpcy5zbW9vdGhpbmdFbmFibGVkJD10aGlzLnN0b3JlLnNlbGVjdChXVCkucGlwZShodCgodD0+dD4wKSkpLHRoaXMuc2hvd0Z1bGxTaXplPSExfWlzU2NhbGFyQ2FyZE1ldGFkYXRhKHQpe2NvbnN0e3BsdWdpbjplfT10O3JldHVybiBlPT09c1IuU0NBTEFSU31vbkZ1bGxTaXplVG9nZ2xlKCl7dGhpcy5zaG93RnVsbFNpemU9IXRoaXMuc2hvd0Z1bGxTaXplLHRoaXMuZnVsbFdpZHRoQ2hhbmdlZC5lbWl0KHRoaXMuc2hvd0Z1bGxTaXplKSx0aGlzLmZ1bGxIZWlnaHRDaGFuZ2VkLmVtaXQodGhpcy5zaG93RnVsbFNpemUpfW5nT25Jbml0KCl7Y29uc3QgdD10aGlzLnN0b3JlLnNlbGVjdChrVCx0aGlzLmNhcmRJZCkucGlwZShHdCgodD0+ISF0JiZ0aGlzLmlzU2NhbGFyQ2FyZE1ldGFkYXRhKHQpKSksaHQoKHQ9PnQpKSk7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoWyJzbW9vdGhlZCIsdF0pfWNvbnN0IG49dGhpcy5zdG9yZS5zZWxlY3QoUFQsdGhpcy5jYXJkSWQpLnBpcGUoR3QoKHQ9PkJvb2xlYW4odCkpKSxodCgodD0+dCkpLGFuKDEpKS5waXBlKGNlKHRoaXMuc3RvcmUuc2VsZWN0KGpUKSksaHQoKChbdCxlXSk9Pk9iamVjdC5rZXlzKHQpLm1hcCgobj0+KHtydW5JZDpuLHBvaW50czp0aGlzLnN0ZXBTZXJpZXNUb0xpbmVTZXJpZXModFtuXSxlKX0pKSkpKSxrZShUZnQpKS5waXBlKGNlKHRoaXMuc3RvcmUuc2VsZWN0KGpUKSksaHQoKChbdCxlXSk9PnQubWFwKCh0PT57bGV0IG49dC5wb2ludHMubWFwKCh0PT57Y29uc3Qgbj0xZTMqdC53YWxsVGltZSxvPWU9PT1jUi5TVEVQP3QueDpuO3JldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3g6byx3YWxsVGltZTpufSl9KSk7aWYoZT09PWNSLlJFTEFUSVZFJiZuLmxlbmd0aCl7Y29uc3QgdD1uWzBdO249bi5tYXAoKGU9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSx7eDplLngtdC54fSkpKX1yZXR1cm57cnVuSWQ6dC5ydW5JZCxwb2ludHM6bn19KSkpKSkucGlwZShjZSh0aGlzLnN0b3JlLnNlbGVjdChHVCkpLGh0KCgoW3QsZV0pPT5lPyhmdW5jdGlvbiBuKHQpe3ZhciBlO2NvbnN0IG49W107Zm9yKGNvbnN0IG8gb2YgdCl7Y29uc3QgdD1bXTtsZXQgaT1OdW1iZXIuaXNGaW5pdGUobnVsbD09PShlPW8ucG9pbnRzWzBdKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS54KT9vLnBvaW50c1swXS54Oi0xLzAsYT1bXTtmb3IoY29uc3QgZSBvZiBvLnBvaW50cylOdW1iZXIuaXNGaW5pdGUoZS54KT8oZS54PGkmJih0LnB1c2goe3Nlcmllc0lkOkpTT04uc3RyaW5naWZ5KFtvLnJ1bklkLHQubGVuZ3RoXSkscnVuSWQ6by5ydW5JZCxwb2ludHM6YX0pLGE9W10pLGEucHVzaChlKSxpPWUueCk6YS5wdXNoKGUpO3QucHVzaCh7c2VyaWVzSWQ6SlNPTi5zdHJpbmdpZnkoW28ucnVuSWQsdC5sZW5ndGhdKSxydW5JZDpvLnJ1bklkLHBvaW50czphfSk7Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspbi5wdXNoKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0W2VdKSx7cGFydGl0aW9uSW5kZXg6ZSxwYXJ0aXRpb25TaXplOnQubGVuZ3RofSkpfXJldHVybiBufSkodCk6dC5tYXAoKHQ9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7c2VyaWVzSWQ6dC5ydW5JZCxwYXJ0aXRpb25JbmRleDowLHBhcnRpdGlvblNpemU6MX0pKSkpKSxhbigxKSk7dGhpcy5kYXRhU2VyaWVzJD1uLnBpcGUoY2UodGhpcy5zdG9yZS5zZWxlY3QoV1QpKSxkbigoKFt0LG5dKT0+e2NvbnN0IG89dC5tYXAoKCh7c2VyaWVzSWQ6dCxwb2ludHM6ZX0pPT4oe2lkOnQscG9pbnRzOmV9KSkpO3JldHVybiBuPD0wP1oobyk6UnQoKGZ1bmN0aW9uIGkodCxlKXt2YXIgbjtyZXR1cm4gclIodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtOdW1iZXIuaXNGaW5pdGUoZSl8fChlPTApLGU9TWF0aC5tYXgoMCxNYXRoLm1pbihlLDEpKTtjb25zdCBvPVtdO2Zvcihjb25zdCBpIG9mIHQpe2NvbnN0IHQ9bnVsbD09PShuPWkucG9pbnRzWzBdKXx8dm9pZCAwPT09bj92b2lkIDA6bi55O2lmKGkucG9pbnRzLmV2ZXJ5KChlPT5lLnk9PXQpKSl7by5wdXNoKGkpO2NvbnRpbnVlfWxldCBhPWkucG9pbnRzLmxlbmd0aD4wPzA6TmFOLHI9MDtjb25zdCBzPWkucG9pbnRzLm1hcCgodD0+e2NvbnN0IG49dC55O2lmKE51bWJlci5pc0Zpbml0ZShuKSl7YT1hKmUrKDEtZSkqbixyKys7Y29uc3Qgbz0xPT09ZT8xOjEtTWF0aC5wb3coZSxyKTtyZXR1cm57eDp0LngseTphL299fXJldHVybnt4OnQueCx5Om59fSkpO28ucHVzaCh7aWQ6aS5pZCxwb2ludHM6c30pfXJldHVybiBvfSkpfSkobyxuKSkucGlwZShodCgodD0+e2NvbnN0IG49by5tYXAoKChuLG8pPT4oe2lkOmUobi5pZCkscG9pbnRzOnRbb10ucG9pbnRzLm1hcCgoKHt5OnR9LGUpPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sbi5wb2ludHNbZV0pLHt5OnR9KSkpfSkpKTtyZXR1cm5bLi4ubywuLi5uXX0pKSl9KSksY24oW10pKSx0aGlzLmNoYXJ0TWV0YWRhdGFNYXAkPW4ucGlwZShkbigodD0+RHQodC5tYXAoKHQ9PnRoaXMuZ2V0UnVuRGlzcGxheU5hbWUodC5ydW5JZCkucGlwZShodCgoZT0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtkaXNwbGF5TmFtZTplfSkpKSkpKSkpKSxjZSh0aGlzLnN0b3JlLnNlbGVjdCh2TiksdGhpcy5zdG9yZS5zZWxlY3QoQ04pLHRoaXMuc3RvcmUuc2VsZWN0KFdUKSksZGUoMCksaHQoKChbdCxuLG8saV0pPT57dmFyIGE7Y29uc3Qgcj17fSxzPWk+MDtmb3IoY29uc3QgZSBvZiB0KXtjb25zdHtzZXJpZXNJZDp0LHJ1bklkOmksZGlzcGxheU5hbWU6cyxwYXJ0aXRpb25JbmRleDpsLHBhcnRpdGlvblNpemU6Y309ZTtyW3RdPXt0eXBlOnM1Lk9SSUdJTkFMLGlkOnQsZGlzcGxheU5hbWU6Yz4xP2Ake3N9OiAke2x9YDpzLHZpc2libGU6Qm9vbGVhbihuJiZuLmdldChpKSksY29sb3I6bnVsbCE9PShhPW9baV0pJiZ2b2lkIDAhPT1hP2E6IiNmZmYiLGF1eDohMSxvcGFjaXR5OjF9fWlmKCFzKXJldHVybiByO2Zvcihjb25zdFt0LG5db2YgT2JqZWN0LmVudHJpZXMocikpe2NvbnN0IG89ZSh0KTtyW29dPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxuKSx7aWQ6byx0eXBlOnM1LkRFUklWRUQsYXV4OiExLG9yaWdpbmFsU2VyaWVzSWQ6dH0pLG4uYXV4PSEwLG4ub3BhY2l0eT0uMjV9cmV0dXJuIHJ9KSksY24oe30pKSx0aGlzLmxvYWRTdGF0ZSQ9dGhpcy5zdG9yZS5zZWxlY3QoT1QsdGhpcy5jYXJkSWQpLHRoaXMudGFnJD10LnBpcGUoaHQoKHQ9PnQudGFnKSkpLHRoaXMudGl0bGUkPXRoaXMudGFnJC5waXBlKGh0KCh0PT56Mih0LHRoaXMuZ3JvdXBOYW1lKSkpKSx0aGlzLmlzUGlubmVkJD10aGlzLnN0b3JlLnNlbGVjdChJVCx0aGlzLmNhcmRJZCl9Z2V0UnVuRGlzcGxheU5hbWUodCl7cmV0dXJuIER0KFt0aGlzLnN0b3JlLnNlbGVjdChzTix7cnVuSWQ6dH0pLHRoaXMuc3RvcmUuc2VsZWN0KFBEKSx0aGlzLnN0b3JlLnNlbGVjdChsTix7cnVuSWQ6dH0pXSkucGlwZShodCgoKFtlLG4sb10pPT5xMih0LG8sZT9uW2VdOm51bGwpKSkpfXN0ZXBTZXJpZXNUb0xpbmVTZXJpZXModCxlKXtjb25zdCBuPWU9PT1jUi5TVEVQO3JldHVybiB0Lm1hcCgodD0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHt4Om4/dC5zdGVwOnQud2FsbFRpbWUseTp0LnZhbHVlfSkpKX19ZnVuY3Rpb24gSWZ0KHQsZSxuKXtjb25zdCBvPVtdLHtsZWZ0OmkscmlnaHQ6YX09ZSxyPShhLWkpL247bGV0IHM9MCxsPTA7Zm9yKGxldCBlPTA7ZTxuO2UrKyl7Y29uc3QgYT1pK2UqcixjPWErcixkPWU9PT1uLTE7bGV0IHA9bDtmb3IobD0wO3M8dC5sZW5ndGg7KXtjb25zdCBlPXRbc10sbj16ZnQoZSxhLGMsIWQpO2lmKHArPW4uY3VycixsKz1uLm5leHQsZS54K2UuZHg+YylicmVhaztzKyt9by5wdXNoKHt4OmEsZHg6cix5OnB9KX1yZXR1cm4gb31mdW5jdGlvbiB6ZnQodCxlLG4sbyl7Y29uc3QgaT10LngsYT10LngrdC5keDtpZihpPm58fGE8ZSlyZXR1cm57Y3VycjowLG5leHQ6MH07aWYoMD09PXQuZHgpcmV0dXJuIG8mJmE9PT1uP3tjdXJyOi41KnQueSxuZXh0Oi41KnQueX06e2N1cnI6dC55LG5leHQ6MH07Y29uc3Qgcj1NYXRoLm1pbihhLG4pLU1hdGgubWF4KGksZSk7cmV0dXJue2N1cnI6dC55KnIvdC5keCxuZXh0OjB9fU5mdC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8TmZ0KShNdShFaykpfSxOZnQuybVjbXA9VW8oe3R5cGU6TmZ0LHNlbGVjdG9yczpbWyJzY2FsYXItY2FyZCJdXSxpbnB1dHM6e0RhdGFEb3dubG9hZENvbXBvbmVudDoiRGF0YURvd25sb2FkQ29tcG9uZW50IixjYXJkSWQ6ImNhcmRJZCIsZ3JvdXBOYW1lOiJncm91cE5hbWUifSxvdXRwdXRzOntmdWxsV2lkdGhDaGFuZ2VkOiJmdWxsV2lkdGhDaGFuZ2VkIixmdWxsSGVpZ2h0Q2hhbmdlZDoiZnVsbEhlaWdodENoYW5nZWQiLHBpblN0YXRlQ2hhbmdlZDoicGluU3RhdGVDaGFuZ2VkIn0sZGVjbHM6MTUsdmFyczo0NSxjb25zdHM6W1szLCJjYXJkSWQiLCJjaGFydE1ldGFkYXRhTWFwIiwiRGF0YURvd25sb2FkQ29tcG9uZW50IiwiZGF0YVNlcmllcyIsImlnbm9yZU91dGxpZXJzIiwiaXNDYXJkVmlzaWJsZSIsImlzRXZlclZpc2libGUiLCJpc1Bpbm5lZCIsImxvYWRTdGF0ZSIsInNob3dGdWxsU2l6ZSIsInNtb290aGluZ0VuYWJsZWQiLCJ0YWciLCJ0aXRsZSIsInRvb2x0aXBTb3J0IiwieEF4aXNUeXBlIiwieFNjYWxlVHlwZSIsInVzZURhcmtNb2RlIiwib25GdWxsU2l6ZVRvZ2dsZSIsIm9uUGluQ2xpY2tlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoT3UoMCwic2NhbGFyLWNhcmQtY29tcG9uZW50IiwwKSxOdSgib25GdWxsU2l6ZVRvZ2dsZSIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vbkZ1bGxTaXplVG9nZ2xlKCl9KSkoIm9uUGluQ2xpY2tlZCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ucGluU3RhdGVDaGFuZ2VkLmVtaXQoZSl9KSksT2IoMSwiYXN5bmMiKSxPYigyLCJhc3luYyIpLE9iKDMsImFzeW5jIiksT2IoNCwiYXN5bmMiKSxPYig1LCJhc3luYyIpLE9iKDYsImFzeW5jIiksT2IoNywiYXN5bmMiKSxPYig4LCJhc3luYyIpLE9iKDksImFzeW5jIiksT2IoMTAsImFzeW5jIiksT2IoMTEsImFzeW5jIiksT2IoMTIsImFzeW5jIiksT2IoMTMsImFzeW5jIiksT2IoMTQsImFzeW5jIiksUHUoKSksMiZlJiZ2dSgiY2FyZElkIixuLmNhcmRJZCkoImNoYXJ0TWV0YWRhdGFNYXAiLFBiKDEsMTcsbi5jaGFydE1ldGFkYXRhTWFwJCkpKCJEYXRhRG93bmxvYWRDb21wb25lbnQiLG4uRGF0YURvd25sb2FkQ29tcG9uZW50KSgiZGF0YVNlcmllcyIsUGIoMiwxOSxuLmRhdGFTZXJpZXMkKSkoImlnbm9yZU91dGxpZXJzIixQYigzLDIxLG4uaWdub3JlT3V0bGllcnMkKSkoImlzQ2FyZFZpc2libGUiLFBiKDQsMjMsbi5pc0NhcmRWaXNpYmxlJCkpKCJpc0V2ZXJWaXNpYmxlIixQYig1LDI1LG4uaXNFdmVyVmlzaWJsZSQpKSgiaXNQaW5uZWQiLFBiKDYsMjcsbi5pc1Bpbm5lZCQpKSgibG9hZFN0YXRlIixQYig3LDI5LG4ubG9hZFN0YXRlJCkpKCJzaG93RnVsbFNpemUiLG4uc2hvd0Z1bGxTaXplKSgic21vb3RoaW5nRW5hYmxlZCIsUGIoOCwzMSxuLnNtb290aGluZ0VuYWJsZWQkKSkoInRhZyIsUGIoOSwzMyxuLnRhZyQpKSgidGl0bGUiLFBiKDEwLDM1LG4udGl0bGUkKSkoInRvb2x0aXBTb3J0IixQYigxMSwzNyxuLnRvb2x0aXBTb3J0JCkpKCJ4QXhpc1R5cGUiLFBiKDEyLDM5LG4ueEF4aXNUeXBlJCkpKCJ4U2NhbGVUeXBlIixQYigxMyw0MSxuLnhTY2FsZVR5cGUkKSkoInVzZURhcmtNb2RlIixQYigxNCw0MyxuLnVzZURhcmtNb2RlJCkpfSxkaXJlY3RpdmVzOltSZnRdLHBpcGVzOltNdl0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKE5mdCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJzY2FsYXItY2FyZCIsdGVtcGxhdGU6J1xuICAgIDxzY2FsYXItY2FyZC1jb21wb25lbnRcbiAgICAgIFtjYXJkSWRdPSJjYXJkSWQiXG4gICAgICBbY2hhcnRNZXRhZGF0YU1hcF09ImNoYXJ0TWV0YWRhdGFNYXAkIHwgYXN5bmMiXG4gICAgICBbRGF0YURvd25sb2FkQ29tcG9uZW50XT0iRGF0YURvd25sb2FkQ29tcG9uZW50IlxuICAgICAgW2RhdGFTZXJpZXNdPSJkYXRhU2VyaWVzJCB8IGFzeW5jIlxuICAgICAgW2lnbm9yZU91dGxpZXJzXT0iaWdub3JlT3V0bGllcnMkIHwgYXN5bmMiXG4gICAgICBbaXNDYXJkVmlzaWJsZV09ImlzQ2FyZFZpc2libGUkIHwgYXN5bmMiXG4gICAgICBbaXNFdmVyVmlzaWJsZV09ImlzRXZlclZpc2libGUkIHwgYXN5bmMiXG4gICAgICBbaXNQaW5uZWRdPSJpc1Bpbm5lZCQgfCBhc3luYyJcbiAgICAgIFtsb2FkU3RhdGVdPSJsb2FkU3RhdGUkIHwgYXN5bmMiXG4gICAgICBbc2hvd0Z1bGxTaXplXT0ic2hvd0Z1bGxTaXplIlxuICAgICAgW3Ntb290aGluZ0VuYWJsZWRdPSJzbW9vdGhpbmdFbmFibGVkJCB8IGFzeW5jIlxuICAgICAgW3RhZ109InRhZyQgfCBhc3luYyJcbiAgICAgIFt0aXRsZV09InRpdGxlJCB8IGFzeW5jIlxuICAgICAgW3Rvb2x0aXBTb3J0XT0idG9vbHRpcFNvcnQkIHwgYXN5bmMiXG4gICAgICBbeEF4aXNUeXBlXT0ieEF4aXNUeXBlJCB8IGFzeW5jIlxuICAgICAgW3hTY2FsZVR5cGVdPSJ4U2NhbGVUeXBlJCB8IGFzeW5jIlxuICAgICAgW3VzZURhcmtNb2RlXT0idXNlRGFya01vZGUkIHwgYXN5bmMiXG4gICAgICAob25GdWxsU2l6ZVRvZ2dsZSk9Im9uRnVsbFNpemVUb2dnbGUoKSJcbiAgICAgIChvblBpbkNsaWNrZWQpPSJwaW5TdGF0ZUNoYW5nZWQuZW1pdCgkZXZlbnQpIlxuICAgID48L3NjYWxhci1jYXJkLWNvbXBvbmVudD5cbiAgJyxzdHlsZXM6WyJcbiAgICAgIDpob3N0IHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIH1cbiAgICAiXSxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6RWt9XX0pLHtEYXRhRG93bmxvYWRDb21wb25lbnQ6W3t0eXBlOnlffV0sY2FyZElkOlt7dHlwZTp5X31dLGdyb3VwTmFtZTpbe3R5cGU6eV99XSxmdWxsV2lkdGhDaGFuZ2VkOlt7dHlwZTpfX31dLGZ1bGxIZWlnaHRDaGFuZ2VkOlt7dHlwZTpfX31dLHBpblN0YXRlQ2hhbmdlZDpbe3R5cGU6X199XX0pO2NsYXNzIEhmdHtjb25zdHJ1Y3Rvcih0KXt0aGlzLmhvc3Q9dCx0aGlzLmVsZW1lbnQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidnotaGlzdG9ncmFtLXRpbWVzZXJpZXMiKSx0aGlzLm1vZGU9VEUuT0ZGU0VULHRoaXMudGltZVByb3BlcnR5PVJFLlNURVAsdGhpcy5lbGVtZW50Lm1vZGU9dGhpcy5tb2RlLHRoaXMuZWxlbWVudC50aW1lUHJvcGVydHk9dGhpcy50aW1lUHJvcGVydHl9bmdPbkluaXQoKXt0aGlzLmhvc3QubmF0aXZlRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnQpfW5nT25DaGFuZ2VzKHQpe2lmKHQubmFtZXx8dC5kYXRhKXtjb25zdCB0PXRoaXMuZGF0YS5tYXAoKHQ9Pntjb25zdHtzdGVwOmUsYmluczpufT10O3JldHVybntzdGVwOmUsYmluczpuLHdhbGxfdGltZTp0LndhbGxUaW1lfX0pKTt0aGlzLmVsZW1lbnQuc2V0U2VyaWVzRGF0YSh0aGlzLm5hbWUsdCl9dC5tb2RlJiYodGhpcy5lbGVtZW50Lm1vZGU9dGhpcy5tb2RlKSx0LnRpbWVQcm9wZXJ0eSYmKHRoaXMuZWxlbWVudC50aW1lUHJvcGVydHk9dGhpcy50aW1lUHJvcGVydHkpLHQuY29sb3JTY2FsZSYmdGhpcy5jb2xvclNjYWxlJiYodGhpcy5lbGVtZW50LmNvbG9yU2NhbGU9dGhpcy5jb2xvclNjYWxlKX1yZWRyYXcoKXt0aGlzLmVsZW1lbnQucmVkcmF3KCl9fWZ1bmN0aW9uIEZmdCh0LGUpezEmdCYmKE91KDAsInNwYW4iLDEyKSx3dSgxLCJtYXQtc3Bpbm5lciIsMTMpLFB1KCkpfWZ1bmN0aW9uIExmdCh0LGUpe2lmKDEmdCl7Y29uc3QgdD1FdSgpO091KDAsInRiLWhpc3RvZ3JhbSIsMTQpLE51KCJvblJlc2l6ZSIsKGZ1bmN0aW9uIGUoKXtyZXR1cm4gcmEodCksTHUoKS5yZWRyYXcoKX0pKSxQdSgpfWlmKDImdCl7Y29uc3QgdD1MdSgpO3Z1KCJuYW1lIix0LnJ1bklkKSgiZGF0YSIsdC5kYXRhKSgibW9kZSIsdC5tb2RlKSgidGltZVByb3BlcnR5Iix0LnRpbWVQcm9wZXJ0eSh0LnhBeGlzVHlwZSkpKCJjb2xvclNjYWxlIix0LnJ1bkNvbG9yU2NhbGUpKCJyZXNpemVFdmVudERlYm91bmNlUGVyaW9kSW5NcyIsdC5SRVNJWkVfUkVEUkFXX0RFQk9VTkNFX1RJTUVfSU5fTVMpfX1mdW5jdGlvbiBCZnQodCxlKXsxJnQmJihPdSgwLCJkaXYiLDE2KSxNZigxLCIgRGF0YSBmYWlsZWQgdG8gbG9hZC4gIiksUHUoKSl9ZnVuY3Rpb24gVmZ0KHQsZSl7aWYoMSZ0JiZXbSgwLEJmdCwyLDAsImRpdiIsMTUpLDImdCl7Y29uc3QgdD1MdSgpO3Z1KCJuZ0lmIix0LmxvYWRTdGF0ZT09PXQuRGF0YUxvYWRTdGF0ZS5GQUlMRUQpfX1IZnQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEhmdCkoTXUoY2gpKX0sSGZ0Lsm1Y21wPVVvKHt0eXBlOkhmdCxzZWxlY3RvcnM6W1sidGItaGlzdG9ncmFtIl1dLGlucHV0czp7bW9kZToibW9kZSIsdGltZVByb3BlcnR5OiJ0aW1lUHJvcGVydHkiLGNvbG9yU2NhbGU6ImNvbG9yU2NhbGUiLG5hbWU6Im5hbWUiLGRhdGE6ImRhdGEifSxmZWF0dXJlczpbU2ldLGRlY2xzOjAsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXt9LHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0ge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgfSJdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihIZnQsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoidGItaGlzdG9ncmFtIix0ZW1wbGF0ZToiIixzdHlsZXM6WyJcbiAgICAgIDpob3N0IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIH1cbiAgICAiXX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmNofV19KSx7bW9kZTpbe3R5cGU6eV99XSx0aW1lUHJvcGVydHk6W3t0eXBlOnlffV0sY29sb3JTY2FsZTpbe3R5cGU6eV99XSxuYW1lOlt7dHlwZTp5X31dLGRhdGE6W3t0eXBlOnlffV19KTtjb25zdCBqZnQ9ZnVuY3Rpb24odCl7cmV0dXJue2JhY2tncm91bmRDb2xvcjp0fX07Y2xhc3MgVWZ0e2NvbnN0cnVjdG9yKHQpe3RoaXMucmVmPXQsdGhpcy5SRVNJWkVfUkVEUkFXX0RFQk9VTkNFX1RJTUVfSU5fTVM9NTAsdGhpcy5EYXRhTG9hZFN0YXRlPUJFLHRoaXMub25GdWxsU2l6ZVRvZ2dsZT1uZXcgQWIsdGhpcy5vblBpbkNsaWNrZWQ9bmV3IEFifXRpbWVQcm9wZXJ0eSh0KXtzd2l0Y2godCl7Y2FzZSBjUi5TVEVQOnJldHVybiBSRS5TVEVQO2Nhc2UgY1IuV0FMTF9USU1FOnJldHVybiBSRS5XQUxMX1RJTUU7Y2FzZSBjUi5SRUxBVElWRTpyZXR1cm4gUkUuUkVMQVRJVkU7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgeEF4aXNUeXBlIGZvciBoaXN0b2dyYW0gdGltZSBwcm9wZXJ0eS4iKX19cmVkcmF3KCl7dGhpcy5oaXN0b2dyYW1Db21wb25lbnQmJnRoaXMucmVmLm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0JiZ0aGlzLmhpc3RvZ3JhbUNvbXBvbmVudC5yZWRyYXcoKX19VWZ0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxVZnQpKE11KGNoKSl9LFVmdC7JtWNtcD1Vbyh7dHlwZTpVZnQsc2VsZWN0b3JzOltbImhpc3RvZ3JhbS1jYXJkLWNvbXBvbmVudCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24gdChlLG4pe2lmKDEmZSYmV2IoSGZ0LDEpLDImZSl7bGV0IHQ7VWIodD1ZYigpKSYmKG4uaGlzdG9ncmFtQ29tcG9uZW50PXQuZmlyc3QpfX0saW5wdXRzOntsb2FkU3RhdGU6ImxvYWRTdGF0ZSIsdGl0bGU6InRpdGxlIix0YWc6InRhZyIscnVuSWQ6InJ1bklkIixkYXRhOiJkYXRhIixtb2RlOiJtb2RlIix4QXhpc1R5cGU6InhBeGlzVHlwZSIscnVuQ29sb3JTY2FsZToicnVuQ29sb3JTY2FsZSIsc2hvd0Z1bGxTaXplOiJzaG93RnVsbFNpemUiLGlzUGlubmVkOiJpc1Bpbm5lZCJ9LG91dHB1dHM6e29uRnVsbFNpemVUb2dnbGU6Im9uRnVsbFNpemVUb2dnbGUiLG9uUGluQ2xpY2tlZDoib25QaW5DbGlja2VkIn0sZGVjbHM6MTQsdmFyczoxMixjb25zdHM6ZnVuY3Rpb24oKXtsZXQgdCxlO3JldHVybiB0PSJ1bmRlZmluZWQiIT10eXBlb2YgbmdJMThuQ2xvc3VyZU1vZGUmJm5nSTE4bkNsb3N1cmVNb2RlP2dvb2cuZ2V0TXNnKCJQaW4gY2FyZCIpOiRsb2NhbGl6ZWA6QSBidXR0b24gdG8gcGluIGEgY2FyZC7ikJ9lNjY1ZGM3MTJiZDVmMThkNGRmYTNhMjllMTI1ZDU2NWNjNTFlMmY24pCfNzI4NDYwNjQyNjIzNDM3NTM0NDpQaW4gY2FyZGAsZT0idW5kZWZpbmVkIiE9dHlwZW9mIG5nSTE4bkNsb3N1cmVNb2RlJiZuZ0kxOG5DbG9zdXJlTW9kZT9nb29nLmdldE1zZygiVG9nZ2xlIGZ1bGwgc2l6ZSBtb2RlIik6JGxvY2FsaXplYDpBIGJ1dHRvbiBvbiBhIGhpc3RvZ3JhbSBjYXJkIHRoYXQgdG9nZ2xlcyBmdWxsIHNpemUgbW9kZS7ikJ9mYzhmNzY3ZDBiOWY5MzAxODdhMWJhZTM0NDc3YWQyODczNmVjZTMz4pCfOTE1NzIxNTYzNjM4OTI2NTk3OlRvZ2dsZSBmdWxsIHNpemUgbW9kZWAsW1sxLCJoZWFkaW5nIl0sWzEsInRhZyIsMywidGl0bGUiLCJ2YWx1ZSJdLFsxLCJydW4iXSxbMSwiZG90IiwzLCJuZ1N0eWxlIl0sWzEsInJ1bi10ZXh0IiwzLCJydW5JZCJdLFsxLCJjb250cm9scyJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsdCwxLCJwaW4tYnV0dG9uIiwzLCJjbGljayJdLFszLCJzdmdJY29uIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIixlLCJ0aXRsZSIsIlRvZ2dsZSBmdWxsIHNpemUgbW9kZSIsMywiY2xpY2siXSxbImNsYXNzIiwic3Bpbm5lciIsNCwibmdJZiJdLFsiZGV0ZWN0UmVzaXplIiwiIiwzLCJuYW1lIiwiZGF0YSIsIm1vZGUiLCJ0aW1lUHJvcGVydHkiLCJjb2xvclNjYWxlIiwicmVzaXplRXZlbnREZWJvdW5jZVBlcmlvZEluTXMiLCJvblJlc2l6ZSIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJub0RhdGEiLCIiXSxbMSwic3Bpbm5lciJdLFsiZGlhbWV0ZXIiLCIxOCJdLFsiZGV0ZWN0UmVzaXplIiwiIiwzLCJuYW1lIiwiZGF0YSIsIm1vZGUiLCJ0aW1lUHJvcGVydHkiLCJjb2xvclNjYWxlIiwicmVzaXplRXZlbnREZWJvdW5jZVBlcmlvZEluTXMiLCJvblJlc2l6ZSJdLFsiY2xhc3MiLCJlbXB0eS1tZXNzYWdlIiw0LCJuZ0lmIl0sWzEsImVtcHR5LW1lc3NhZ2UiXV19LHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJihPdSgwLCJkaXYiLDApLHd1KDEsInRiLXRydW5jYXRlZC1wYXRoIiwxKSxPdSgyLCJkaXYiLDIpLHd1KDMsInNwYW4iLDMpLHd1KDQsImNhcmQtcnVuLW5hbWUiLDQpLFB1KCksT3UoNSwic3BhbiIsNSksT3UoNiwiYnV0dG9uIiw2KSxOdSgiY2xpY2siLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub25QaW5DbGlja2VkLmVtaXQoIW4uaXNQaW5uZWQpfSkpLHd1KDcsIm1hdC1pY29uIiw3KSxQdSgpLE91KDgsImJ1dHRvbiIsOCksTnUoImNsaWNrIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uRnVsbFNpemVUb2dnbGUuZW1pdCgpfSkpLHd1KDksIm1hdC1pY29uIiw3KSxQdSgpLFB1KCksV20oMTAsRmZ0LDIsMCwic3BhbiIsOSksUHUoKSxXbSgxMSxMZnQsMSw2LCJ0Yi1oaXN0b2dyYW0iLDEwKSxXbSgxMixWZnQsMSwxLCJuZy10ZW1wbGF0ZSIsbnVsbCwxMSxLYikpLDImZSl7Y29uc3QgdD1HbSgxMyk7SmMoMSksVXUoInRpdGxlIixuLnRhZyksVXUoInZhbHVlIixuLnRpdGxlKSxKYygyKSx2dSgibmdTdHlsZSIsZ2IoMTAsamZ0LG4ucnVuQ29sb3JTY2FsZShuLnJ1bklkKSkpLEpjKDEpLHZ1KCJydW5JZCIsbi5ydW5JZCksSmMoMiksTm0oInRpdGxlIixuLmlzUGlubmVkPyJVbnBpbiBjYXJkIjoiUGluIGNhcmQiKSxKYygxKSx2dSgic3ZnSWNvbiIsbi5pc1Bpbm5lZD8ia2VlcF8yNHB4Ijoia2VlcF9vdXRsaW5lXzI0cHgiKSxKYygyKSx2dSgic3ZnSWNvbiIsbi5zaG93RnVsbFNpemU/ImZ1bGxzY3JlZW5fZXhpdF8yNHB4IjoiZnVsbHNjcmVlbl8yNHB4IiksSmMoMSksdnUoIm5nSWYiLG4ubG9hZFN0YXRlPT09bi5EYXRhTG9hZFN0YXRlLkxPQURJTkcpLEpjKDEpLHZ1KCJuZ0lmIixuLmRhdGEmJm4uZGF0YS5sZW5ndGgpKCJuZ0lmRWxzZSIsdCl9fSxkaXJlY3RpdmVzOltZMixndixYMixOSCxjRyxhdixQMSxIZnQscUtdLHN0eWxlczpbJy5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHh9Lm1hdC1oMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaGVhZGxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTVweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZ1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjA1ZW07bWFyZ2luOjAgMCA1NnB4fS5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAwNWVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXJhaXNlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdHJva2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmxhdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZhYltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbWluaS1mYWJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4fS5tYXQtY2FyZC1zdWJ0aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGVja2JveC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvb3Rlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgdHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIzZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LjU0MTY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2NjY2NjY3ZW0pfUBtZWRpYSBwcmludHsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjJlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouMjVlbSAwIC43NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxZW0gMCAxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMiksIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi0wLjA2MjVlbX0ubWF0LW1lbnUtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci12ZXJ0aWNhbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGFiLWxpbmtbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MH0ubWF0LXRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5Om5vbmV9LmNkay12aXN1YWxseS1oaWRkZW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjZ9LmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV0sIC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3hbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2tbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHt9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7fS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOi13ZWJraXQtYXV0b2ZpbGwpe2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZVtfbmdjb250ZW50LSVDT01QJV17cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fS5tYXQtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfVtfbmdob3N0LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtib3gtc2l6aW5nOmJvcmRlci1ib3g7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6YXV0bztwYWRkaW5nOjE2cHg7cGFkZGluZy10b3A6NHB4fS5oZWFkaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtYXJlYXM6InRhZyBjb250cm9scyIgInJ1biBzcGlubmVyIjtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIGF1dG87Zm9udC1zaXplOjE0cHg7bWFyZ2luLWJvdHRvbTo0cHh9LnRhZ1tfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOnRhZztvdmVyZmxvdzpoaWRkZW59LnBpbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxOHB4fS5ydW5bX25nY29udGVudC0lQ09NUCVde2dyaWQtYXJlYTpydW47ZGlzcGxheTpmbGV4O3doaXRlLXNwYWNlOm5vd3JhcDtmb250LXNpemU6MTNweH0ucnVuW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kb3RbX25nY29udGVudC0lQ09NUCVde2ZsZXg6bm9uZTtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoxM3B4O2hlaWdodDoxM3B4O2JvcmRlci1yYWRpdXM6NTAlO21hcmdpbi1yaWdodDo0cHh9LnJ1bltfbmdjb250ZW50LSVDT01QJV0gICAucnVuLXRleHRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO21heC13aWR0aDoxMjBweH0uY29udHJvbHNbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7d2hpdGUtc3BhY2U6bm93cmFwO2dyaWQtYXJlYTpjb250cm9scztqdXN0aWZ5LXNlbGY6ZmxleC1lbmQ7ZmxleC1zaHJpbms6MDttYXJnaW4tcmlnaHQ6LTEycHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0uc3Bpbm5lcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2dyaWQtYXJlYTpzcGlubmVyO2hlaWdodDoxMDAlO2p1c3RpZnktY29udGVudDpjZW50ZXI7cG9zaXRpb246cmVsYXRpdmV9bWF0LXNwaW5uZXJbX25nY29udGVudC0lQ09NUCVde3RvcDowO3JpZ2h0OjA7cG9zaXRpb246YWJzb2x1dGV9dGItaGlzdG9ncmFtW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4LWdyb3c6MTtvdmVyZmxvdzpoaWRkZW59LmVtcHR5LW1lc3NhZ2VbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6MWVtO2ZvbnQtc2l6ZToxM3B4fSddLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihVZnQsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoiaGlzdG9ncmFtLWNhcmQtY29tcG9uZW50Iix0ZW1wbGF0ZVVybDoiaGlzdG9ncmFtX2NhcmRfY29tcG9uZW50Lm5nLmh0bWwiLHN0eWxlVXJsczpbImhpc3RvZ3JhbV9jYXJkX2NvbXBvbmVudC5jc3MiXSxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Y2h9XX0pLHtsb2FkU3RhdGU6W3t0eXBlOnlffV0sdGl0bGU6W3t0eXBlOnlffV0sdGFnOlt7dHlwZTp5X31dLHJ1bklkOlt7dHlwZTp5X31dLGRhdGE6W3t0eXBlOnlffV0sbW9kZTpbe3R5cGU6eV99XSx4QXhpc1R5cGU6W3t0eXBlOnlffV0scnVuQ29sb3JTY2FsZTpbe3R5cGU6eV99XSxzaG93RnVsbFNpemU6W3t0eXBlOnlffV0saXNQaW5uZWQ6W3t0eXBlOnlffV0sb25GdWxsU2l6ZVRvZ2dsZTpbe3R5cGU6X199XSxvblBpbkNsaWNrZWQ6W3t0eXBlOl9ffV0saGlzdG9ncmFtQ29tcG9uZW50Olt7dHlwZTpGcixhcmdzOltIZnRdfV19KTtjbGFzcyBXZnR7Y29uc3RydWN0b3IodCl7dGhpcy5zdG9yZT10LHRoaXMuZnVsbFdpZHRoQ2hhbmdlZD1uZXcgQWIsdGhpcy5mdWxsSGVpZ2h0Q2hhbmdlZD1uZXcgQWIsdGhpcy5waW5TdGF0ZUNoYW5nZWQ9bmV3IEFiLHRoaXMubW9kZSQ9dGhpcy5zdG9yZS5zZWxlY3QoVVQpLHRoaXMueEF4aXNUeXBlJD10aGlzLnN0b3JlLnNlbGVjdChqVCksdGhpcy5zaG93RnVsbFNpemU9ITF9aXNIaXN0b2dyYW1DYXJkTWV0YWRhdGEodCl7Y29uc3R7cGx1Z2luOmV9PXQ7cmV0dXJuIGU9PT1zUi5ISVNUT0dSQU1TfW9uRnVsbFNpemVUb2dnbGUoKXt0aGlzLnNob3dGdWxsU2l6ZT0hdGhpcy5zaG93RnVsbFNpemUsdGhpcy5mdWxsV2lkdGhDaGFuZ2VkLmVtaXQodGhpcy5zaG93RnVsbFNpemUpLHRoaXMuZnVsbEhlaWdodENoYW5nZWQuZW1pdCh0aGlzLnNob3dGdWxsU2l6ZSl9bmdPbkluaXQoKXtjb25zdCB0PXRoaXMuc3RvcmUuc2VsZWN0KGtULHRoaXMuY2FyZElkKS5waXBlKEd0KCh0PT4hIXQmJnRoaXMuaXNIaXN0b2dyYW1DYXJkTWV0YWRhdGEodCkpKSxodCgodD0+dCkpKSxlPUR0KFt0LHRoaXMuc3RvcmUuc2VsZWN0KFBULHRoaXMuY2FyZElkKV0pO3RoaXMuZGF0YSQ9ZS5waXBlKGh0KCgoW3QsZV0pPT57Y29uc3Qgbj10LnJ1bklkO3JldHVybiBlJiZlLmhhc093blByb3BlcnR5KG4pPyhmdW5jdGlvbiBvKHQsZT0zMCl7aWYoIXQubGVuZ3RofHxlPDEpcmV0dXJuW107Y29uc3Qgbj0oZnVuY3Rpb24gbyh0KXtsZXQgZT1udWxsLG49bnVsbDtmb3IoY29uc3R7YmluczpvfW9mIHQpe2lmKCFvLmxlbmd0aCljb250aW51ZTtjb25zdCB0PW9bby5sZW5ndGgtMV0saT1vWzBdLngsYT10LngrdC5keDsobnVsbD09PWV8fGk8ZSkmJihlPWkpLChudWxsPT09bnx8YT5uKSYmKG49YSl9cmV0dXJuIG51bGw9PT1lfHxudWxsPT09bj9udWxsOntsZWZ0OmUscmlnaHQ6bn19KSh0KTtyZXR1cm4gbiYmbi5sZWZ0PT09bi5yaWdodCYmKG4ucmlnaHQ9MS4xKm4ucmlnaHQrMSxuLmxlZnQ9bi5sZWZ0LzEuMS0xKSx0Lm1hcCgodD0+KHtzdGVwOnQuc3RlcCx3YWxsVGltZTp0LndhbGxUaW1lLGJpbnM6bj9JZnQodC5iaW5zLG4sZSk6W119KSkpfSkoZVtuXS5tYXAoKHQ9Pntjb25zdHt3YWxsVGltZTplLHN0ZXA6bn09dDtyZXR1cm57d2FsbFRpbWU6ZSxzdGVwOm4sYmluczp0LmJpbnMubWFwKCh0PT4oe3g6dC5taW4sZHg6dC5tYXgtdC5taW4seTp0LmNvdW50fSkpKX19KSkpOltdfSkpKSx0aGlzLmxvYWRTdGF0ZSQ9dGhpcy5zdG9yZS5zZWxlY3QoT1QsdGhpcy5jYXJkSWQpLHRoaXMudGFnJD10LnBpcGUoaHQoKHQ9PnQudGFnKSkpLHRoaXMudGl0bGUkPXRoaXMudGFnJC5waXBlKGh0KCh0PT56Mih0LHRoaXMuZ3JvdXBOYW1lKSkpKSx0aGlzLnJ1bklkJD10LnBpcGUoaHQoKHQ9PnQucnVuSWQpKSksdGhpcy5pc1Bpbm5lZCQ9dGhpcy5zdG9yZS5zZWxlY3QoSVQsdGhpcy5jYXJkSWQpfX1mdW5jdGlvbiBHZnQodCxlKXtpZigxJnQpe2NvbnN0IHQ9RXUoKTtPdSgwLCJpbWFnZS1jYXJkIiw1KSxOdSgiZnVsbFdpZHRoQ2hhbmdlZCIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIHJhKHQpLEx1KCkub25GdWxsV2lkdGhDaGFuZ2VkKG4pfSkpKCJwaW5TdGF0ZUNoYW5nZWQiLChmdW5jdGlvbiBlKCl7cmV0dXJuIHJhKHQpLEx1KCkub25QaW5TdGF0ZUNoYW5nZWQoKX0pKSxQdSgpfWlmKDImdCl7Y29uc3QgdD1MdSgpO3Z1KCJjYXJkSWQiLHQuY2FyZElkKSgiZ3JvdXBOYW1lIix0Lmdyb3VwTmFtZSkoInJ1bkNvbG9yU2NhbGUiLHQucnVuQ29sb3JTY2FsZSl9fWZ1bmN0aW9uIFlmdCh0LGUpe2lmKDEmdCl7Y29uc3QgdD1FdSgpO091KDAsInNjYWxhci1jYXJkIiw2KSxOdSgiZnVsbFdpZHRoQ2hhbmdlZCIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIHJhKHQpLEx1KCkub25GdWxsV2lkdGhDaGFuZ2VkKG4pfSkpKCJmdWxsSGVpZ2h0Q2hhbmdlZCIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIHJhKHQpLEx1KCkub25GdWxsSGVpZ2h0Q2hhbmdlZChuKX0pKSgicGluU3RhdGVDaGFuZ2VkIiwoZnVuY3Rpb24gZSgpe3JldHVybiByYSh0KSxMdSgpLm9uUGluU3RhdGVDaGFuZ2VkKCl9KSksUHUoKX1pZigyJnQpe2NvbnN0IHQ9THUoKTt2dSgiY2FyZElkIix0LmNhcmRJZCkoImdyb3VwTmFtZSIsdC5ncm91cE5hbWUpfX1mdW5jdGlvbiBxZnQodCxlKXtpZigxJnQpe2NvbnN0IHQ9RXUoKTtPdSgwLCJoaXN0b2dyYW0tY2FyZCIsNyksTnUoImZ1bGxXaWR0aENoYW5nZWQiLChmdW5jdGlvbiBlKG4pe3JldHVybiByYSh0KSxMdSgpLm9uRnVsbFdpZHRoQ2hhbmdlZChuKX0pKSgiZnVsbEhlaWdodENoYW5nZWQiLChmdW5jdGlvbiBlKG4pe3JldHVybiByYSh0KSxMdSgpLm9uRnVsbEhlaWdodENoYW5nZWQobil9KSkoInBpblN0YXRlQ2hhbmdlZCIsKGZ1bmN0aW9uIGUoKXtyZXR1cm4gcmEodCksTHUoKS5vblBpblN0YXRlQ2hhbmdlZCgpfSkpLFB1KCl9aWYoMiZ0KXtjb25zdCB0PUx1KCk7dnUoImNhcmRJZCIsdC5jYXJkSWQpKCJncm91cE5hbWUiLHQuZ3JvdXBOYW1lKSgicnVuQ29sb3JTY2FsZSIsdC5ydW5Db2xvclNjYWxlKX19ZnVuY3Rpb24gWmZ0KHQsZSl7aWYoMSZ0JiYoT3UoMCwiZGl2IiksTWYoMSksUHUoKSksMiZ0KXtjb25zdCB0PUx1KCk7SmMoMSkseGYoIlBsYWNlaG9sZGVyIGVycm9yIGZvcjogIix0LmNhcmRJZCwiIil9fVdmdC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8V2Z0KShNdShFaykpfSxXZnQuybVjbXA9VW8oe3R5cGU6V2Z0LHNlbGVjdG9yczpbWyJoaXN0b2dyYW0tY2FyZCJdXSxpbnB1dHM6e2NhcmRJZDoiY2FyZElkIixncm91cE5hbWU6Imdyb3VwTmFtZSIscnVuQ29sb3JTY2FsZToicnVuQ29sb3JTY2FsZSJ9LG91dHB1dHM6e2Z1bGxXaWR0aENoYW5nZWQ6ImZ1bGxXaWR0aENoYW5nZWQiLGZ1bGxIZWlnaHRDaGFuZ2VkOiJmdWxsSGVpZ2h0Q2hhbmdlZCIscGluU3RhdGVDaGFuZ2VkOiJwaW5TdGF0ZUNoYW5nZWQifSxkZWNsczo5LHZhcnM6MjYsY29uc3RzOltbMywibG9hZFN0YXRlIiwidGl0bGUiLCJ0YWciLCJydW5JZCIsImRhdGEiLCJtb2RlIiwieEF4aXNUeXBlIiwicnVuQ29sb3JTY2FsZSIsInNob3dGdWxsU2l6ZSIsImlzUGlubmVkIiwib25GdWxsU2l6ZVRvZ2dsZSIsIm9uUGluQ2xpY2tlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoT3UoMCwiaGlzdG9ncmFtLWNhcmQtY29tcG9uZW50IiwwKSxOdSgib25GdWxsU2l6ZVRvZ2dsZSIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vbkZ1bGxTaXplVG9nZ2xlKCl9KSkoIm9uUGluQ2xpY2tlZCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ucGluU3RhdGVDaGFuZ2VkLmVtaXQoZSl9KSksT2IoMSwiYXN5bmMiKSxPYigyLCJhc3luYyIpLE9iKDMsImFzeW5jIiksT2IoNCwiYXN5bmMiKSxPYig1LCJhc3luYyIpLE9iKDYsImFzeW5jIiksT2IoNywiYXN5bmMiKSxPYig4LCJhc3luYyIpLFB1KCkpLDImZSYmdnUoImxvYWRTdGF0ZSIsUGIoMSwxMCxuLmxvYWRTdGF0ZSQpKSgidGl0bGUiLFBiKDIsMTIsbi50aXRsZSQpKSgidGFnIixQYigzLDE0LG4udGFnJCkpKCJydW5JZCIsUGIoNCwxNixuLnJ1bklkJCkpKCJkYXRhIixQYig1LDE4LG4uZGF0YSQpKSgibW9kZSIsUGIoNiwyMCxuLm1vZGUkKSkoInhBeGlzVHlwZSIsUGIoNywyMixuLnhBeGlzVHlwZSQpKSgicnVuQ29sb3JTY2FsZSIsbi5ydW5Db2xvclNjYWxlKSgic2hvd0Z1bGxTaXplIixuLnNob3dGdWxsU2l6ZSkoImlzUGlubmVkIixQYig4LDI0LG4uaXNQaW5uZWQkKSl9LGRpcmVjdGl2ZXM6W1VmdF0scGlwZXM6W012XSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoV2Z0LFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6Imhpc3RvZ3JhbS1jYXJkIix0ZW1wbGF0ZTonXG4gICAgPGhpc3RvZ3JhbS1jYXJkLWNvbXBvbmVudFxuICAgICAgW2xvYWRTdGF0ZV09ImxvYWRTdGF0ZSQgfCBhc3luYyJcbiAgICAgIFt0aXRsZV09InRpdGxlJCB8IGFzeW5jIlxuICAgICAgW3RhZ109InRhZyQgfCBhc3luYyJcbiAgICAgIFtydW5JZF09InJ1bklkJCB8IGFzeW5jIlxuICAgICAgW2RhdGFdPSJkYXRhJCB8IGFzeW5jIlxuICAgICAgW21vZGVdPSJtb2RlJCB8IGFzeW5jIlxuICAgICAgW3hBeGlzVHlwZV09InhBeGlzVHlwZSQgfCBhc3luYyJcbiAgICAgIFtydW5Db2xvclNjYWxlXT0icnVuQ29sb3JTY2FsZSJcbiAgICAgIFtzaG93RnVsbFNpemVdPSJzaG93RnVsbFNpemUiXG4gICAgICBbaXNQaW5uZWRdPSJpc1Bpbm5lZCQgfCBhc3luYyJcbiAgICAgIChvbkZ1bGxTaXplVG9nZ2xlKT0ib25GdWxsU2l6ZVRvZ2dsZSgpIlxuICAgICAgKG9uUGluQ2xpY2tlZCk9InBpblN0YXRlQ2hhbmdlZC5lbWl0KCRldmVudCkiXG4gICAgPjwvaGlzdG9ncmFtLWNhcmQtY29tcG9uZW50PlxuICAnLHN0eWxlczpbIlxuICAgICAgOmhvc3Qge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgfVxuICAgICJdLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2h9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpFa31dfSkse2NhcmRJZDpbe3R5cGU6eV99XSxncm91cE5hbWU6W3t0eXBlOnlffV0scnVuQ29sb3JTY2FsZTpbe3R5cGU6eV99XSxmdWxsV2lkdGhDaGFuZ2VkOlt7dHlwZTpfX31dLGZ1bGxIZWlnaHRDaGFuZ2VkOlt7dHlwZTpfX31dLHBpblN0YXRlQ2hhbmdlZDpbe3R5cGU6X199XX0pO2NsYXNzIFhmdHtjb25zdHJ1Y3Rvcigpe3RoaXMuUGx1Z2luVHlwZT1zUix0aGlzLmZ1bGxXaWR0aENoYW5nZWQ9bmV3IEFiLHRoaXMuZnVsbEhlaWdodENoYW5nZWQ9bmV3IEFiLHRoaXMucGluU3RhdGVDaGFuZ2VkPW5ldyBBYn1vbkZ1bGxXaWR0aENoYW5nZWQodCl7dGhpcy5mdWxsV2lkdGhDaGFuZ2VkLmVtaXQodCl9b25GdWxsSGVpZ2h0Q2hhbmdlZCh0KXt0aGlzLmZ1bGxIZWlnaHRDaGFuZ2VkLmVtaXQodCl9b25QaW5TdGF0ZUNoYW5nZWQoKXt0aGlzLnBpblN0YXRlQ2hhbmdlZC5lbWl0KCl9fVhmdC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8WGZ0KX0sWGZ0Lsm1Y21wPVVvKHt0eXBlOlhmdCxzZWxlY3RvcnM6W1siY2FyZC12aWV3LWNvbXBvbmVudCJdXSxpbnB1dHM6e2NhcmRJZDoiY2FyZElkIixncm91cE5hbWU6Imdyb3VwTmFtZSIscGx1Z2luVHlwZToicGx1Z2luVHlwZSIscnVuQ29sb3JTY2FsZToicnVuQ29sb3JTY2FsZSJ9LG91dHB1dHM6e2Z1bGxXaWR0aENoYW5nZWQ6ImZ1bGxXaWR0aENoYW5nZWQiLGZ1bGxIZWlnaHRDaGFuZ2VkOiJmdWxsSGVpZ2h0Q2hhbmdlZCIscGluU3RhdGVDaGFuZ2VkOiJwaW5TdGF0ZUNoYW5nZWQifSxkZWNsczo1LHZhcnM6NCxjb25zdHM6W1szLCJuZ1N3aXRjaCJdLFszLCJjYXJkSWQiLCJncm91cE5hbWUiLCJydW5Db2xvclNjYWxlIiwiZnVsbFdpZHRoQ2hhbmdlZCIsInBpblN0YXRlQ2hhbmdlZCIsNCwibmdTd2l0Y2hDYXNlIl0sWzMsImNhcmRJZCIsImdyb3VwTmFtZSIsImZ1bGxXaWR0aENoYW5nZWQiLCJmdWxsSGVpZ2h0Q2hhbmdlZCIsInBpblN0YXRlQ2hhbmdlZCIsNCwibmdTd2l0Y2hDYXNlIl0sWzMsImNhcmRJZCIsImdyb3VwTmFtZSIsInJ1bkNvbG9yU2NhbGUiLCJmdWxsV2lkdGhDaGFuZ2VkIiwiZnVsbEhlaWdodENoYW5nZWQiLCJwaW5TdGF0ZUNoYW5nZWQiLDQsIm5nU3dpdGNoQ2FzZSJdLFs0LCJuZ1N3aXRjaERlZmF1bHQiXSxbMywiY2FyZElkIiwiZ3JvdXBOYW1lIiwicnVuQ29sb3JTY2FsZSIsImZ1bGxXaWR0aENoYW5nZWQiLCJwaW5TdGF0ZUNoYW5nZWQiXSxbMywiY2FyZElkIiwiZ3JvdXBOYW1lIiwiZnVsbFdpZHRoQ2hhbmdlZCIsImZ1bGxIZWlnaHRDaGFuZ2VkIiwicGluU3RhdGVDaGFuZ2VkIl0sWzMsImNhcmRJZCIsImdyb3VwTmFtZSIsInJ1bkNvbG9yU2NhbGUiLCJmdWxsV2lkdGhDaGFuZ2VkIiwiZnVsbEhlaWdodENoYW5nZWQiLCJwaW5TdGF0ZUNoYW5nZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKGt1KDAsMCksV20oMSxHZnQsMSwzLCJpbWFnZS1jYXJkIiwxKSxXbSgyLFlmdCwxLDIsInNjYWxhci1jYXJkIiwyKSxXbSgzLHFmdCwxLDMsImhpc3RvZ3JhbS1jYXJkIiwzKSxXbSg0LFpmdCwyLDEsImRpdiIsNCksU3UoKSksMiZlJiYodnUoIm5nU3dpdGNoIixuLnBsdWdpblR5cGUpLEpjKDEpLHZ1KCJuZ1N3aXRjaENhc2UiLG4uUGx1Z2luVHlwZS5JTUFHRVMpLEpjKDEpLHZ1KCJuZ1N3aXRjaENhc2UiLG4uUGx1Z2luVHlwZS5TQ0FMQVJTKSxKYygxKSx2dSgibmdTd2l0Y2hDYXNlIixuLlBsdWdpblR5cGUuSElTVE9HUkFNUykpfSxkaXJlY3RpdmVzOltjdixkdixwdixpNSxOZnQsV2Z0XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFhmdCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJjYXJkLXZpZXctY29tcG9uZW50Iix0ZW1wbGF0ZVVybDoiY2FyZF92aWV3X2NvbXBvbmVudC5uZy5odG1sIixjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSxudWxsLHtjYXJkSWQ6W3t0eXBlOnlffV0sZ3JvdXBOYW1lOlt7dHlwZTp5X31dLHBsdWdpblR5cGU6W3t0eXBlOnlffV0scnVuQ29sb3JTY2FsZTpbe3R5cGU6eV99XSxmdWxsV2lkdGhDaGFuZ2VkOlt7dHlwZTpfX31dLGZ1bGxIZWlnaHRDaGFuZ2VkOlt7dHlwZTpfX31dLHBpblN0YXRlQ2hhbmdlZDpbe3R5cGU6X199XX0pO2NsYXNzIEtmdHtjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXQsdGhpcy5zaG93RnVsbFdpZHRoPSExLHRoaXMuc2hvd0Z1bGxIZWlnaHQ9ITEsdGhpcy5ydW5Db2xvclNjYWxlJD10aGlzLnN0b3JlLnNlbGVjdChDTikucGlwZSh4bigzNTAsdm9pZCAwLHtsZWFkaW5nOiEwLHRyYWlsaW5nOiEwfSksaHQoKHQ9PmU9PntpZighdC5oYXNPd25Qcm9wZXJ0eShlKSl0aHJvdyBuZXcgRXJyb3IoYFtDb2xvciBzY2FsZV0gdW5rbm93biBydW5JZDogJHtlfS5gKTtyZXR1cm4gdFtlXX0pKSl9b25GdWxsV2lkdGhDaGFuZ2VkKHQpe3RoaXMuc2hvd0Z1bGxXaWR0aD10fW9uRnVsbEhlaWdodENoYW5nZWQodCl7dGhpcy5zaG93RnVsbEhlaWdodD10fW9uUGluU3RhdGVDaGFuZ2VkKCl7dGhpcy5zdG9yZS5zZWxlY3QoSVQsdGhpcy5jYXJkSWQpLnBpcGUoTmUoMSksa24odGhpcy5zdG9yZS5zZWxlY3QoSFQpKSkuc3Vic2NyaWJlKCgoW3QsZV0pPT57dGhpcy5zdG9yZS5kaXNwYXRjaChsUSh7Y2FyZElkOnRoaXMuY2FyZElkLGNhbkNyZWF0ZU5ld1BpbnM6ZSx3YXNQaW5uZWQ6dH0pKX0pKX19ZnVuY3Rpb24gSmZ0KHQsZSl7MSZ0JiZEdSgwKX1mdW5jdGlvbiBRZnQodCxlKXtpZigxJnQmJnd1KDAsImNhcmQtdmlldyIsNCksMiZ0KXtjb25zdCB0PWUuJGltcGxpY2l0LG49THUoKTt2dSgiY2FyZElkIix0LmNhcmRJZCkoImdyb3VwTmFtZSIsbi5ncm91cE5hbWUpKCJwbHVnaW5UeXBlIix0LnBsdWdpbikoImNhcmRPYnNlcnZlciIsbi5jYXJkT2JzZXJ2ZXIpKCJjYXJkTGF6eUxvYWRlciIsdC5jYXJkSWQpfX1mdW5jdGlvbiAkZnQodCxlKXsxJnQmJkR1KDApfWZ1bmN0aW9uIHRndCh0LGUpe2lmKDEmdCl7Y29uc3QgdD1FdSgpO091KDAsImJ1dHRvbiIsMTMpLE51KCJjbGljayIsKGZ1bmN0aW9uIGUoKXtyYSh0KTtjb25zdCBuPUx1KDMpO3JldHVybiBuLnBhZ2VJbmRleENoYW5nZWQuZW1pdChuLnBhZ2VJbmRleC0xKX0pKSxNZigxLCIgUHJldmlvdXMgIiksUHUoKX0yJnQmJnZ1KCJkaXNhYmxlZCIsMD09PUx1KDMpLnBhZ2VJbmRleCl9ZnVuY3Rpb24gZWd0KHQsZSl7MSZ0JiZ3dSgwLCJtYXQtaWNvbiIsMTcpfWZ1bmN0aW9uIG5ndCh0LGUpezEmdCYmd3UoMCwibWF0LWljb24iLDE4KX1mdW5jdGlvbiBvZ3QodCxlKXtpZigxJnQpe2NvbnN0IHQ9RXUoKTtPdSgwLCJidXR0b24iLDE0KSxOdSgiY2xpY2siLChmdW5jdGlvbiBlKCl7cmV0dXJuIHJhKHQpLEx1KDMpLmdyb3VwRXhwYW5zaW9uVG9nZ2xlZC5lbWl0KCl9KSksV20oMSxlZ3QsMSwwLCJtYXQtaWNvbiIsMTUpLFdtKDIsbmd0LDEsMCwibmctdGVtcGxhdGUiLG51bGwsMTYsS2IpLFB1KCl9aWYoMiZ0KXtjb25zdCB0PUdtKDMpLGU9THUoMyk7SmMoMSksdnUoIm5nSWYiLGUuaXNHcm91cEV4cGFuZGVkKSgibmdJZkVsc2UiLHQpfX1mdW5jdGlvbiBpZ3QodCxlKXtpZigxJnQpe2NvbnN0IHQ9RXUoKTtPdSgwLCJzcGFuIiwyMSksT3UoMSwiaW5wdXQiLDIyKSxOdSgiaW5wdXQiLChmdW5jdGlvbiBlKG4pe3JldHVybiByYSh0KSxMdSg0KS5vblBhZ2luYXRpb25JbnB1dENoYW5nZShuKX0pKSgiY2hhbmdlIiwoZnVuY3Rpb24gZShuKXtyZXR1cm4gcmEodCksTHUoNCkub25QYWdpbmF0aW9uSW5wdXRDaGFuZ2Uobil9KSksUHUoKSxNZigyKSxQdSgpfWlmKDImdCl7Y29uc3QgdD1MdSg0KTtKYygxKSx2dSgidmFsdWUiLHQucGFnZUluZGV4KzEpKCJtYXgiLHQubnVtUGFnZXMpLEpjKDEpLHhmKCIgb2YgIix0Lm51bVBhZ2VzLCIiKX19ZnVuY3Rpb24gYWd0KHQsZSl7aWYoMSZ0KXtjb25zdCB0PUV1KCk7T3UoMCwic3BhbiIpLFdtKDEsaWd0LDMsMywic3BhbiIsMTkpLE91KDIsImJ1dHRvbiIsMjApLE51KCJjbGljayIsKGZ1bmN0aW9uIGUoKXtyYSh0KTtjb25zdCBuPUx1KDMpO3JldHVybiBuLnBhZ2VJbmRleENoYW5nZWQuZW1pdChuLnBhZ2VJbmRleCsxKX0pKSxNZigzLCIgTmV4dCAiKSxQdSgpLFB1KCl9aWYoMiZ0KXtjb25zdCB0PUx1KDIpLmlzQm90dG9tQ29udHJvbCxlPUx1KCk7SmMoMSksdnUoIm5nSWYiLGUuc2hvd1BhZ2luYXRpb25JbnB1dCh0KSksSmMoMSksdnUoImRpc2FibGVkIixlLnBhZ2VJbmRleCsxPj1lLm51bVBhZ2VzKX19ZnVuY3Rpb24gcmd0KHQsZSl7aWYoMSZ0JiYoT3UoMCwiZGl2Iiw2KSxPdSgxLCJzcGFuIiw3KSxXbSgyLHRndCwyLDEsImJ1dHRvbiIsOCksUHUoKSxPdSgzLCJzcGFuIiw5KSxXbSg0LG9ndCw0LDIsImJ1dHRvbiIsMTApLFB1KCksT3UoNSwic3BhbiIsMTEpLFdtKDYsYWd0LDQsMiwic3BhbiIsMTIpLFB1KCksUHUoKSksMiZ0KXtjb25zdCB0PUx1KCkuaXNCb3R0b21Db250cm9sLGU9THUoKTtKYygyKSx2dSgibmdJZiIsZS5zaG93UGFnaW5hdGlvbkNvbnRyb2xzKSxKYygyKSx2dSgibmdJZiIsZS5zaG93RXhwYW5kKHQpKSxKYygyKSx2dSgibmdJZiIsZS5zaG93UGFnaW5hdGlvbkNvbnRyb2xzKX19ZnVuY3Rpb24gc2d0KHQsZSl7aWYoMSZ0JiZXbSgwLHJndCw3LDMsImRpdiIsNSksMiZ0KXtjb25zdCB0PWUuaXNCb3R0b21Db250cm9sLG49THUoKTt2dSgibmdJZiIsbi5zaG93UGFnaW5hdGlvbkNvbnRyb2xzfHxuLnNob3dFeHBhbmQodCkpfX1LZnQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEtmdCkoTXUoRWspKX0sS2Z0Lsm1Y21wPVVvKHt0eXBlOktmdCxzZWxlY3RvcnM6W1siY2FyZC12aWV3Il1dLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsyJmUmJmFmKCJmdWxsLXdpZHRoIixuLnNob3dGdWxsV2lkdGgpKCJmdWxsLWhlaWdodCIsbi5zaG93RnVsbEhlaWdodCl9LGlucHV0czp7Y2FyZElkOiJjYXJkSWQiLGdyb3VwTmFtZToiZ3JvdXBOYW1lIixwbHVnaW5UeXBlOiJwbHVnaW5UeXBlIn0sZGVjbHM6Mix2YXJzOjYsY29uc3RzOltbMywiY2FyZElkIiwiZ3JvdXBOYW1lIiwicGx1Z2luVHlwZSIsInJ1bkNvbG9yU2NhbGUiLCJmdWxsV2lkdGhDaGFuZ2VkIiwiZnVsbEhlaWdodENoYW5nZWQiLCJwaW5TdGF0ZUNoYW5nZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKE91KDAsImNhcmQtdmlldy1jb21wb25lbnQiLDApLE51KCJmdWxsV2lkdGhDaGFuZ2VkIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vbkZ1bGxXaWR0aENoYW5nZWQoZSl9KSkoImZ1bGxIZWlnaHRDaGFuZ2VkIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vbkZ1bGxIZWlnaHRDaGFuZ2VkKGUpfSkpKCJwaW5TdGF0ZUNoYW5nZWQiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub25QaW5TdGF0ZUNoYW5nZWQoKX0pKSxPYigxLCJhc3luYyIpLFB1KCkpLDImZSYmdnUoImNhcmRJZCIsbi5jYXJkSWQpKCJncm91cE5hbWUiLG4uZ3JvdXBOYW1lKSgicGx1Z2luVHlwZSIsbi5wbHVnaW5UeXBlKSgicnVuQ29sb3JTY2FsZSIsUGIoMSw0LG4ucnVuQ29sb3JTY2FsZSQpKX0sZGlyZWN0aXZlczpbWGZ0XSxwaXBlczpbTXZdLHN0eWxlczpbJy5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHh9Lm1hdC1oMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaGVhZGxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTVweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZ1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjA1ZW07bWFyZ2luOjAgMCA1NnB4fS5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAwNWVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXJhaXNlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdHJva2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmxhdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZhYltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbWluaS1mYWJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4fS5tYXQtY2FyZC1zdWJ0aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGVja2JveC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvb3Rlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgdHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIzZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LjU0MTY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2NjY2NjY3ZW0pfUBtZWRpYSBwcmludHsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjJlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouMjVlbSAwIC43NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxZW0gMCAxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMiksIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi0wLjA2MjVlbX0ubWF0LW1lbnUtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci12ZXJ0aWNhbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGFiLWxpbmtbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MH0ubWF0LXRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5Om5vbmV9LmNkay12aXN1YWxseS1oaWRkZW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjZ9LmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV0sIC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3hbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2tbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHt9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7fS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOi13ZWJraXQtYXV0b2ZpbGwpe2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZVtfbmdjb250ZW50LSVDT01QJV17cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fS5tYXQtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfVtfbmdob3N0LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzB9J10sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEtmdCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJjYXJkLXZpZXciLHRlbXBsYXRlOidcbiAgICA8Y2FyZC12aWV3LWNvbXBvbmVudFxuICAgICAgW2NhcmRJZF09ImNhcmRJZCJcbiAgICAgIFtncm91cE5hbWVdPSJncm91cE5hbWUiXG4gICAgICBbcGx1Z2luVHlwZV09InBsdWdpblR5cGUiXG4gICAgICBbcnVuQ29sb3JTY2FsZV09InJ1bkNvbG9yU2NhbGUkIHwgYXN5bmMiXG4gICAgICAoZnVsbFdpZHRoQ2hhbmdlZCk9Im9uRnVsbFdpZHRoQ2hhbmdlZCgkZXZlbnQpIlxuICAgICAgKGZ1bGxIZWlnaHRDaGFuZ2VkKT0ib25GdWxsSGVpZ2h0Q2hhbmdlZCgkZXZlbnQpIlxuICAgICAgKHBpblN0YXRlQ2hhbmdlZCk9Im9uUGluU3RhdGVDaGFuZ2VkKCkiXG4gICAgPlxuICAgIDwvY2FyZC12aWV3LWNvbXBvbmVudD5cbiAgJyxzdHlsZVVybHM6WyJjYXJkX3ZpZXdfY29udGFpbmVyLmNzcyJdLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2h9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpFa31dfSkse2NhcmRJZDpbe3R5cGU6eV99XSxncm91cE5hbWU6W3t0eXBlOnlffV0scGx1Z2luVHlwZTpbe3R5cGU6eV99XSxzaG93RnVsbFdpZHRoOlt7dHlwZTpDXyxhcmdzOlsiY2xhc3MuZnVsbC13aWR0aCJdfV0sc2hvd0Z1bGxIZWlnaHQ6W3t0eXBlOkNfLGFyZ3M6WyJjbGFzcy5mdWxsLWhlaWdodCJdfV19KTtjb25zdCBsZ3Q9ZnVuY3Rpb24oKXtyZXR1cm57aXNCb3R0b21Db250cm9sOiExfX0sY2d0PWZ1bmN0aW9uKCl7cmV0dXJue2lzQm90dG9tQ29udHJvbDohMH19O2NsYXNzIGRndHtjb25zdHJ1Y3Rvcigpe3RoaXMuUGx1Z2luVHlwZT1zUix0aGlzLnBhZ2VJbmRleENoYW5nZWQ9bmV3IEFiLHRoaXMuZ3JvdXBFeHBhbnNpb25Ub2dnbGVkPW5ldyBBYn1zaG93RXhwYW5kKHQpe3JldHVybiEhdCYmdGhpcy5pc0dyb3VwRXhwYW5kYWJsZX1zaG93UGFnaW5hdGlvbklucHV0KHQpe3JldHVybiB0fXRyYWNrQnlDYXJkcyh0LGUpe3JldHVybiBlLmNhcmRJZH1vblBhZ2luYXRpb25JbnB1dENoYW5nZSh0KXtjb25zdCBlPXQudGFyZ2V0O2lmKCJpbnB1dCI9PT10LnR5cGUmJiIiPT09ZS52YWx1ZSlyZXR1cm47Y29uc3Qgbj1OdW1iZXIoZS52YWx1ZSktMSxvPU1hdGgubWluKE1hdGgubWF4KDAsbiksdGhpcy5udW1QYWdlcy0xKTtlLnZhbHVlIT09U3RyaW5nKG8rMSkmJihlLnZhbHVlPVN0cmluZyhvKzEpKSx0aGlzLnBhZ2VJbmRleENoYW5nZWQuZW1pdChvKX19ZGd0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxkZ3QpfSxkZ3QuybVjbXA9VW8oe3R5cGU6ZGd0LHNlbGVjdG9yczpbWyJtZXRyaWNzLWNhcmQtZ3JpZC1jb21wb25lbnQiXV0saW5wdXRzOntpc0dyb3VwRXhwYW5kYWJsZToiaXNHcm91cEV4cGFuZGFibGUiLGlzR3JvdXBFeHBhbmRlZDoiaXNHcm91cEV4cGFuZGVkIixncm91cE5hbWU6Imdyb3VwTmFtZSIscGFnZUluZGV4OiJwYWdlSW5kZXgiLG51bVBhZ2VzOiJudW1QYWdlcyIsY2FyZElkc1dpdGhNZXRhZGF0YToiY2FyZElkc1dpdGhNZXRhZGF0YSIsY2FyZE9ic2VydmVyOiJjYXJkT2JzZXJ2ZXIiLHNob3dQYWdpbmF0aW9uQ29udHJvbHM6InNob3dQYWdpbmF0aW9uQ29udHJvbHMifSxvdXRwdXRzOntwYWdlSW5kZXhDaGFuZ2VkOiJwYWdlSW5kZXhDaGFuZ2VkIixncm91cEV4cGFuc2lvblRvZ2dsZWQ6Imdyb3VwRXhwYW5zaW9uVG9nZ2xlZCJ9LGRlY2xzOjYsdmFyczo4LGNvbnN0czpmdW5jdGlvbigpe2xldCB0LGUsbjtyZXR1cm4gdD0idW5kZWZpbmVkIiE9dHlwZW9mIG5nSTE4bkNsb3N1cmVNb2RlJiZuZ0kxOG5DbG9zdXJlTW9kZT9nb29nLmdldE1zZygiUHJldmlvdXMgcGFnZSIpOiRsb2NhbGl6ZWA6QSBidXR0b24gdGhhdCBzZXRzIGEgZ3JvdXAgdG8gdGhlIHByZXZpb3VzIHBhZ2Uu4pCfNTc1ZTc4MmZkMjdmMmVlNzBhMDM0YTc3NWVmZTlhZDE2MjQ3MjI1MOKQnzM2Mjk5NjA1NDQ4NzUzNjAwNDY6UHJldmlvdXMgcGFnZWAsZT0idW5kZWZpbmVkIiE9dHlwZW9mIG5nSTE4bkNsb3N1cmVNb2RlJiZuZ0kxOG5DbG9zdXJlTW9kZT9nb29nLmdldE1zZygiRXhwYW5kIGdyb3VwIik6JGxvY2FsaXplYDpBIGJ1dHRvbiB0aGF0IGFsbG93cyB1c2VyIHRvIGV4cGFuZCBhIHRhZyBncm91cC7ikJ9mZmFhMTE0NzFiODc4YTZkZmZlMmU2OGM2ZjM3MDY0YTllMDc0ODUz4pCfNTM4NjA1NDMyNTI3NDc3OTI1ODpFeHBhbmQgZ3JvdXBgLG49InVuZGVmaW5lZCIhPXR5cGVvZiBuZ0kxOG5DbG9zdXJlTW9kZSYmbmdJMThuQ2xvc3VyZU1vZGU/Z29vZy5nZXRNc2coIk5leHQgcGFnZSIpOiRsb2NhbGl6ZWA6QSBidXR0b24gdGhhdCBzZXRzIGEgZ3JvdXAgdG8gdGhlIG5leHQgcGFnZS7ikJ9jZTNjZWZiMWNkMDA5OWFhNTAwM2RkYTE2ZWM5ZWIyMWZkOGJhNzg54pCfMzMzNzMwMTY5NDIxMDI4NzU5NTpOZXh0IHBhZ2VgLFtbNCwibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0Il0sWzEsImNhcmQtZ3JpZCJdLFszLCJjYXJkSWQiLCJncm91cE5hbWUiLCJwbHVnaW5UeXBlIiwiY2FyZE9ic2VydmVyIiwiY2FyZExhenlMb2FkZXIiLDQsIm5nRm9yIiwibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSJdLFsiZ3JvdXBDb250cm9scyIsIiJdLFszLCJjYXJkSWQiLCJncm91cE5hbWUiLCJwbHVnaW5UeXBlIiwiY2FyZE9ic2VydmVyIiwiY2FyZExhenlMb2FkZXIiXSxbImNsYXNzIiwiZ3JvdXAtY29udHJvbHMiLDQsIm5nSWYiXSxbMSwiZ3JvdXAtY29udHJvbHMiXSxbMSwicHJldi1jb250YWluZXIiXSxbImNsYXNzIiwicHJldiBwYWdpbmF0aW9uLWJ1dHRvbiIsIm1hdC1idXR0b24iLCIiLCJhcmlhLWxhYmVsIix0LDMsImRpc2FibGVkIiwiY2xpY2siLDQsIm5nSWYiXSxbMSwiZXhwYW5kLWNvbnRhaW5lciJdLFsiY2xhc3MiLCJleHBhbmQtZ3JvdXAtYnV0dG9uIiwibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsZSwzLCJjbGljayIsNCwibmdJZiJdLFsxLCJpbnB1dC1hbmQtbmV4dC1jb250YWluZXIiXSxbNCwibmdJZiJdLFsibWF0LWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLHQsMSwicHJldiIsInBhZ2luYXRpb24tYnV0dG9uIiwzLCJkaXNhYmxlZCIsImNsaWNrIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIixlLDEsImV4cGFuZC1ncm91cC1idXR0b24iLDMsImNsaWNrIl0sWyJzdmdJY29uIiwiZXhwYW5kX2xlc3NfMjRweCIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJleHBhbmRNb3JlIiwiIl0sWyJzdmdJY29uIiwiZXhwYW5kX2xlc3NfMjRweCJdLFsic3ZnSWNvbiIsImV4cGFuZF9tb3JlXzI0cHgiXSxbImNsYXNzIiwicGFnaW5hdGlvbi1pbnB1dCIsNCwibmdJZiJdLFsibWF0LWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLG4sMSwibmV4dCIsInBhZ2luYXRpb24tYnV0dG9uIiwzLCJkaXNhYmxlZCIsImNsaWNrIl0sWzEsInBhZ2luYXRpb24taW5wdXQiXSxbInR5cGUiLCJudW1iZXIiLCJtaW4iLCIxIiwzLCJ2YWx1ZSIsIm1heCIsImlucHV0IiwiY2hhbmdlIl1dfSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7aWYoMSZlJiYoV20oMCxKZnQsMSwwLCJuZy1jb250YWluZXIiLDApLE91KDEsImRpdiIsMSksV20oMixRZnQsMSw1LCJjYXJkLXZpZXciLDIpLFB1KCksV20oMywkZnQsMSwwLCJuZy1jb250YWluZXIiLDApLFdtKDQsc2d0LDEsMSwibmctdGVtcGxhdGUiLG51bGwsMyxLYikpLDImZSl7Y29uc3QgdD1HbSg1KTt2dSgibmdUZW1wbGF0ZU91dGxldCIsdCkoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixmYig2LGxndCkpLEpjKDIpLHZ1KCJuZ0Zvck9mIixuLmNhcmRJZHNXaXRoTWV0YWRhdGEpKCJuZ0ZvclRyYWNrQnkiLG4udHJhY2tCeUNhcmRzKSxKYygxKSx2dSgibmdUZW1wbGF0ZU91dGxldCIsdCkoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixmYig3LGNndCkpfX0sZGlyZWN0aXZlczpbaHYsb3YsS2Z0LE4yLGF2LE5ILGNHXSxzdHlsZXM6WycubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1iYWRnZS1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo5cHh9Lm1hdC1iYWRnZS1sYXJnZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4fS5tYXQtaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWhlYWRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAyNHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE1cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjgzKS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1oNltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC42NykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtYm9keS1zdHJvbmdbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MCAwIDEycHh9Lm1hdC1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FwdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTJweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6MzAwIDExMnB4LzExMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wNWVtO21hcmdpbjowIDAgNTZweH0ubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNTZweC81NnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMmVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNDVweC80OHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMDVlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDM0cHgvNDBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1yYWlzZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3Ryb2tlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZsYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mYWJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW1pbmktZmFiW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtYnV0dG9uLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FyZC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjBweH0ubWF0LWNhcmQtc3VidGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hlY2tib3gtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC10cmFpbGluZy1pY29uLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC1yZW1vdmUubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxOHB4fS5tYXQtdGFibGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWhlYWRlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb290ZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jYWxlbmRhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FsZW5kYXItYm9keVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYWxlbmRhci1wZXJpb2QtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWRpYWxvZy10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTI1O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTUwJTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjVlbTt3aWR0aDoxLjVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW07bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41ZW0gMDtib3JkZXItdG9wOi44NDM3NWVtIHNvbGlkIHRyYW5zcGFyZW50fS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3RvcDotMC44NDM3NWVtO3BhZGRpbmctdG9wOi44NDM3NWVtfS5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjc1JTttYXJnaW4tdG9wOi42NjY2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNzkxNjY2NjY2N2VtKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAycHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyM2VtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzUzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi41NDE2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNjY2NjY2NjY2N2VtKX1AbWVkaWEgcHJpbnR7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIyZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIxZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMmVtKSBzY2FsZSgwLjc1KX19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjI1ZW0gMCAuNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4wOTM3NWVtO21hcmdpbi10b3A6LTAuNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MWVtIDAgMWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjg0Mzc1ZW07bWFyZ2luLXRvcDotMC4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH1pbnB1dC5tYXQtaW5wdXQtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDotMC4wNjI1ZW19Lm1hdC1tZW51LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1wYWdpbmF0b3JbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXBhZ2luYXRvci1wYWdlLXNpemVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3RbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXN0ZXBwZXItdmVydGljYWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc3RlcC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0Om5vcm1hbH0ubWF0LXN0ZXAtbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRhYi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjB9Lm1hdC10b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTZweH0ubWF0LW9wdGdyb3VwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LXNpbXBsZS1zbmFja2Jhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbltfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRyZWVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbmVzdGVkLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4fS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVdOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtcmlwcGxlLm1hdC1yaXBwbGUtdW5ib3VuZGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6NTAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7dHJhbnNmb3JtOnNjYWxlKDApfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpub25lfS5jZGstdmlzdWFsbHktaGlkZGVuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7bGVmdDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmVtcHR5e2Rpc3BsYXk6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LXBhbmVbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOmF1dG87Ym94LXNpemluZzpib3JkZXItYm94O3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7bWF4LXdpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlfS5jZGstb3ZlcmxheS1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKTtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5Oi42fS5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjMyKX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTowfS5jZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO292ZXJmbG93LXk6c2Nyb2xsfUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnR7fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5ke30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxse2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCAwcyAxbXN9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06bm90KDotd2Via2l0LWF1dG9maWxsKXthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIDBzIDFtc310ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemVbX25nY29udGVudC0lQ09NUCVde3Jlc2l6ZTpub25lfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmdbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OmF1dG8gIWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW4gIWltcG9ydGFudH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nLWZpcmVmb3hbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OjAgIWltcG9ydGFudH0ubWF0LWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0uY2FyZC1ncmlkW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdChhdXRvLWZpbGwsIG1pbm1heCgzMzVweCwgYXV0bykpO2dhcDoxNnB4O3BhZGRpbmc6MTZweH1jYXJkLXZpZXdbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjoxcHggc29saWQgI2ViZWJlYjtib3JkZXItcmFkaXVzOjRweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29udGFpbjpzdHJpY3Q7aGVpZ2h0OjEwMCU7bWluLWhlaWdodDozMjBweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICBjYXJkLXZpZXdbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBjYXJkLXZpZXdbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjoxcHggc29saWQgIzU1NX1jYXJkLXZpZXcuZnVsbC13aWR0aFtfbmdjb250ZW50LSVDT01QJV17Y29udGFpbjpsYXlvdXQgcGFpbnQ7Z3JpZC1jb2x1bW4tc3RhcnQ6MTtncmlkLWNvbHVtbi1lbmQ6LTF9Y2FyZC12aWV3LmZ1bGwtaGVpZ2h0W19uZ2NvbnRlbnQtJUNPTVAlXXttaW4taGVpZ2h0OjQ4MHB4fS5ncm91cC1jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTtkaXNwbGF5OmdyaWQ7YWxpZ24taXRlbXM6Y2VudGVyO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyIDFmcjtnYXA6MTZweDtwYWRkaW5nOjAgMTZweH0uZ3JvdXAtY29udHJvbHNbX25nY29udGVudC0lQ09NUCVdOmZpcnN0LW9mLXR5cGV7cGFkZGluZy10b3A6MTZweH0uZ3JvdXAtY29udHJvbHNbX25nY29udGVudC0lQ09NUCVdOmxhc3Qtb2YtdHlwZXtwYWRkaW5nLWJvdHRvbToxNnB4fS5wcmV2LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17anVzdGlmeS1zZWxmOmZsZXgtc3RhcnR9LmV4cGFuZC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2p1c3RpZnktc2VsZjpjZW50ZXJ9LmlucHV0LWFuZC1uZXh0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17anVzdGlmeS1zZWxmOmZsZXgtZW5kfS5wYWdpbmF0aW9uLWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tcmlnaHQ6MTZweH0uZXhwYW5kLWdyb3VwLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5wYWdpbmF0aW9uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZmZmO2NvbG9yOiM2MTYxNjF9J10sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGRndCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJtZXRyaWNzLWNhcmQtZ3JpZC1jb21wb25lbnQiLHRlbXBsYXRlVXJsOiIuL2NhcmRfZ3JpZF9jb21wb25lbnQubmcuaHRtbCIsc3R5bGVVcmxzOlsiLi9jYXJkX2dyaWRfY29tcG9uZW50LmNzcyJdLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2h9XX1dLG51bGwse2lzR3JvdXBFeHBhbmRhYmxlOlt7dHlwZTp5X31dLGlzR3JvdXBFeHBhbmRlZDpbe3R5cGU6eV99XSxncm91cE5hbWU6W3t0eXBlOnlffV0scGFnZUluZGV4Olt7dHlwZTp5X31dLG51bVBhZ2VzOlt7dHlwZTp5X31dLGNhcmRJZHNXaXRoTWV0YWRhdGE6W3t0eXBlOnlffV0sY2FyZE9ic2VydmVyOlt7dHlwZTp5X31dLHNob3dQYWdpbmF0aW9uQ29udHJvbHM6W3t0eXBlOnlffV0scGFnZUluZGV4Q2hhbmdlZDpbe3R5cGU6X199XSxncm91cEV4cGFuc2lvblRvZ2dsZWQ6W3t0eXBlOl9ffV19KTtjbGFzcyBwZ3R7Y29uc3RydWN0b3IodCl7dGhpcy5zdG9yZT10LHRoaXMuZ3JvdXBOYW1lPW51bGwsdGhpcy5ncm91cE5hbWUkPW5ldyBIKG51bGwpLHRoaXMucGFnZUluZGV4JD1uZXcgSCgwKSx0aGlzLml0ZW1zJD1uZXcgSChbXSksdGhpcy5udW1QYWdlcyQ9RHQoW3RoaXMuaXRlbXMkLHRoaXMuc3RvcmUuc2VsZWN0KEpHKV0pLnBpcGUoaHQoKChbdCxlXSk9Pk1hdGguY2VpbCh0Lmxlbmd0aC9lKSkpKSx0aGlzLmlzR3JvdXBFeHBhbmRlZCQ9dGhpcy5ncm91cE5hbWUkLnBpcGUoZG4oKHQ9Pm51bGwhPT10P3RoaXMuc3RvcmUuc2VsZWN0KEtULHQpOlooITApKSkpLHRoaXMuc2hvd1BhZ2luYXRpb25Db250cm9scyQ9RHQoW3RoaXMubnVtUGFnZXMkLHRoaXMuc3RvcmUuc2VsZWN0KEpHKSx0aGlzLmlzR3JvdXBFeHBhbmRlZCRdKS5waXBlKGh0KCgoW3QsZSxuXSk9PiEodDw9MSkmJihlPD0zfHxuKSkpKSx0aGlzLmlzR3JvdXBFeHBhbmRhYmxlJD1EdChbdGhpcy5pdGVtcyQsdGhpcy5zdG9yZS5zZWxlY3QoSkcpXSkucGlwZShodCgoKFt0LGVdKT0+IShudWxsPT09dGhpcy5ncm91cE5hbWV8fGU8PTN8fHQubGVuZ3RoPD0zKSkpKSx0aGlzLm5vcm1hbGl6ZWRQYWdlSW5kZXgkPUR0KFt0aGlzLnBhZ2VJbmRleCQsdGhpcy5udW1QYWdlcyRdKS5waXBlKF9uKCgoW3QsZV0pPT57MCE9PWUmJih0Pj1lP3RoaXMucGFnZUluZGV4JC5uZXh0KGUtMSk6dDwwJiZ0aGlzLnBhZ2VJbmRleCQubmV4dCgwKSl9KSksaHQoKChbdCxlXSk9Pk1hdGgubWluKE1hdGgubWF4KHQsMCksZS0xKSkpLGFuKDEpKSx0aGlzLnBhZ2VkSXRlbXMkPUR0KFt0aGlzLml0ZW1zJCx0aGlzLnN0b3JlLnNlbGVjdChKRyksdGhpcy5ub3JtYWxpemVkUGFnZUluZGV4JCx0aGlzLmlzR3JvdXBFeHBhbmRlZCRdKS5waXBlKGh0KCgoW3QsZSxuLG9dKT0+e2NvbnN0IGk9ZSpuLGE9ZSpuK01hdGgubWluKG8/ZTozLGUpO3JldHVybiB0LnNsaWNlKGksYSl9KSkpfW5nT25DaGFuZ2VzKHQpe3QuY2FyZElkc1dpdGhNZXRhZGF0YSYmdGhpcy5pdGVtcyQubmV4dCh0aGlzLmNhcmRJZHNXaXRoTWV0YWRhdGEpLHQuZ3JvdXBOYW1lJiZ0aGlzLmdyb3VwTmFtZSQubmV4dCh0aGlzLmdyb3VwTmFtZSl9b25QYWdlSW5kZXhDaGFuZ2VkKHQpe3RoaXMucGFnZUluZGV4JC5uZXh0KHQpfW9uR3JvdXBFeHBhbnNpb25Ub2dnbGVkKCl7aWYobnVsbD09PXRoaXMuZ3JvdXBOYW1lKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhcmlhbnQgZXJyb3I6IGV4cGFuc2lvbiBjYW5ub3QgYmUgdG9nZ2xlZCB3aGVuIGdyb3VwTmFtZSBpcyBudWxsIik7dGhpcy5zdG9yZS5kaXNwYXRjaChzUSh7dGFnR3JvdXA6dGhpcy5ncm91cE5hbWV9KSl9fWZ1bmN0aW9uIG1ndCh0LGUpe2lmKDEmdCYmKE91KDAsInNwYW4iLDYpLE1mKDEpLFB1KCkpLDImdCl7Y29uc3QgdD1MdSgpLiRpbXBsaWNpdDtKYygxKSx4ZigiIix0Lml0ZW1zLmxlbmd0aCwiIGNhcmRzIil9fWZ1bmN0aW9uIHVndCh0LGUpe2lmKDEmdCYmKE91KDAsImRpdiIsMSksT3UoMSwiZGl2IiwyKSxPdSgyLCJzcGFuIiksT3UoMywic3BhbiIsMyksTWYoNCksUHUoKSxXbSg1LG1ndCwyLDEsInNwYW4iLDQpLFB1KCksUHUoKSx3dSg2LCJtZXRyaWNzLWNhcmQtZ3JpZCIsNSksUHUoKSksMiZ0KXtjb25zdCB0PWUuJGltcGxpY2l0LG49THUoKTtKYygzKSxVdSgidGl0bGUiLHQuZ3JvdXBOYW1lKSxKYygxKSx2Zih0Lmdyb3VwTmFtZSksSmMoMSksdnUoIm5nSWYiLHQuaXRlbXMubGVuZ3RoPjEpLEpjKDEpLHZ1KCJjYXJkSWRzV2l0aE1ldGFkYXRhIix0Lml0ZW1zKSgiY2FyZE9ic2VydmVyIixuLmNhcmRPYnNlcnZlcikoImdyb3VwTmFtZSIsdC5ncm91cE5hbWUpfX1wZ3QuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHBndCkoTXUoRWspKX0scGd0Lsm1Y21wPVVvKHt0eXBlOnBndCxzZWxlY3RvcnM6W1sibWV0cmljcy1jYXJkLWdyaWQiXV0saW5wdXRzOntncm91cE5hbWU6Imdyb3VwTmFtZSIsY2FyZElkc1dpdGhNZXRhZGF0YToiY2FyZElkc1dpdGhNZXRhZGF0YSIsY2FyZE9ic2VydmVyOiJjYXJkT2JzZXJ2ZXIifSxmZWF0dXJlczpbU2ldLGRlY2xzOjcsdmFyczoyMCxjb25zdHM6W1szLCJpc0dyb3VwRXhwYW5kYWJsZSIsImlzR3JvdXBFeHBhbmRlZCIsImdyb3VwTmFtZSIsInBhZ2VJbmRleCIsIm51bVBhZ2VzIiwic2hvd1BhZ2luYXRpb25Db250cm9scyIsImNhcmRJZHNXaXRoTWV0YWRhdGEiLCJjYXJkT2JzZXJ2ZXIiLCJwYWdlSW5kZXhDaGFuZ2VkIiwiZ3JvdXBFeHBhbnNpb25Ub2dnbGVkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihPdSgwLCJtZXRyaWNzLWNhcmQtZ3JpZC1jb21wb25lbnQiLDApLE51KCJwYWdlSW5kZXhDaGFuZ2VkIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vblBhZ2VJbmRleENoYW5nZWQoZSl9KSkoImdyb3VwRXhwYW5zaW9uVG9nZ2xlZCIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vbkdyb3VwRXhwYW5zaW9uVG9nZ2xlZCgpfSkpLE9iKDEsImFzeW5jIiksT2IoMiwiYXN5bmMiKSxPYigzLCJhc3luYyIpLE9iKDQsImFzeW5jIiksT2IoNSwiYXN5bmMiKSxPYig2LCJhc3luYyIpLFB1KCkpLDImZSYmdnUoImlzR3JvdXBFeHBhbmRhYmxlIixQYigxLDgsbi5pc0dyb3VwRXhwYW5kYWJsZSQpKSgiaXNHcm91cEV4cGFuZGVkIixQYigyLDEwLG4uaXNHcm91cEV4cGFuZGVkJCkpKCJncm91cE5hbWUiLG4uZ3JvdXBOYW1lKSgicGFnZUluZGV4IixQYigzLDEyLG4ubm9ybWFsaXplZFBhZ2VJbmRleCQpKSgibnVtUGFnZXMiLFBiKDQsMTQsbi5udW1QYWdlcyQpKSgic2hvd1BhZ2luYXRpb25Db250cm9scyIsUGIoNSwxNixuLnNob3dQYWdpbmF0aW9uQ29udHJvbHMkKSkoImNhcmRJZHNXaXRoTWV0YWRhdGEiLFBiKDYsMTgsbi5wYWdlZEl0ZW1zJCkpKCJjYXJkT2JzZXJ2ZXIiLG4uY2FyZE9ic2VydmVyKX0sZGlyZWN0aXZlczpbZGd0XSxwaXBlczpbTXZdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIocGd0LFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6Im1ldHJpY3MtY2FyZC1ncmlkIix0ZW1wbGF0ZTonXG4gICAgPG1ldHJpY3MtY2FyZC1ncmlkLWNvbXBvbmVudFxuICAgICAgW2lzR3JvdXBFeHBhbmRhYmxlXT0iaXNHcm91cEV4cGFuZGFibGUkIHwgYXN5bmMiXG4gICAgICBbaXNHcm91cEV4cGFuZGVkXT0iaXNHcm91cEV4cGFuZGVkJCB8IGFzeW5jIlxuICAgICAgW2dyb3VwTmFtZV09Imdyb3VwTmFtZSJcbiAgICAgIFtwYWdlSW5kZXhdPSJub3JtYWxpemVkUGFnZUluZGV4JCB8IGFzeW5jIlxuICAgICAgW251bVBhZ2VzXT0ibnVtUGFnZXMkIHwgYXN5bmMiXG4gICAgICBbc2hvd1BhZ2luYXRpb25Db250cm9sc109InNob3dQYWdpbmF0aW9uQ29udHJvbHMkIHwgYXN5bmMiXG4gICAgICBbY2FyZElkc1dpdGhNZXRhZGF0YV09InBhZ2VkSXRlbXMkIHwgYXN5bmMiXG4gICAgICBbY2FyZE9ic2VydmVyXT0iY2FyZE9ic2VydmVyIlxuICAgICAgKHBhZ2VJbmRleENoYW5nZWQpPSJvblBhZ2VJbmRleENoYW5nZWQoJGV2ZW50KSJcbiAgICAgIChncm91cEV4cGFuc2lvblRvZ2dsZWQpPSJvbkdyb3VwRXhwYW5zaW9uVG9nZ2xlZCgpIlxuICAgID5cbiAgICA8L21ldHJpY3MtY2FyZC1ncmlkLWNvbXBvbmVudD5cbiAgJyxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6RWt9XX0pLHtncm91cE5hbWU6W3t0eXBlOnlffV0sY2FyZElkc1dpdGhNZXRhZGF0YTpbe3R5cGU6eV99XSxjYXJkT2JzZXJ2ZXI6W3t0eXBlOnlffV19KTtjbGFzcyBmZ3R7Y29uc3RydWN0b3IoKXt0aGlzLlBsdWdpblR5cGU9c1J9dHJhY2tCeUdyb3VwKHQsZSl7cmV0dXJuIGUuZ3JvdXBOYW1lfX1mZ3QuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGZndCl9LGZndC7JtWNtcD1Vbyh7dHlwZTpmZ3Qsc2VsZWN0b3JzOltbIm1ldHJpY3MtY2FyZC1ncm91cHMtY29tcG9uZW50Il1dLGlucHV0czp7Y2FyZEdyb3VwczoiY2FyZEdyb3VwcyIsY2FyZE9ic2VydmVyOiJjYXJkT2JzZXJ2ZXIifSxkZWNsczoxLHZhcnM6Mixjb25zdHM6W1siY2xhc3MiLCJjYXJkLWdyb3VwIiw0LCJuZ0ZvciIsIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiXSxbMSwiY2FyZC1ncm91cCJdLFsxLCJncm91cC10b29sYmFyIl0sWyJhcmlhLXJvbGUiLCJoZWFkaW5nIiwiYXJpYS1sZXZlbCIsIjMiLDEsImdyb3VwLXRpdGxlIiwzLCJ0aXRsZSJdLFsiY2xhc3MiLCJncm91cC1jYXJkLWNvdW50Iiw0LCJuZ0lmIl0sWzMsImNhcmRJZHNXaXRoTWV0YWRhdGEiLCJjYXJkT2JzZXJ2ZXIiLCJncm91cE5hbWUiXSxbMSwiZ3JvdXAtY2FyZC1jb3VudCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiZXbSgwLHVndCw3LDYsImRpdiIsMCksMiZlJiZ2dSgibmdGb3JPZiIsbi5jYXJkR3JvdXBzKSgibmdGb3JUcmFja0J5IixuLnRyYWNrQnlHcm91cCl9LGRpcmVjdGl2ZXM6W292LGF2LHBndF0sc3R5bGVzOlsnLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEycHg7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtYmFkZ2Utc21hbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6OXB4fS5tYXQtYmFkZ2UtbGFyZ2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweH0ubWF0LWgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1oZWFkbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMjRweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNnB4LzI4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNXB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC44MykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtaDZbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuNjcpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWJvZHktc3Ryb25nW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjAgMCAxMnB4fS5tYXQtc21hbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDEycHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjMwMCAxMTJweC8xMTJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDVlbTttYXJnaW46MCAwIDU2cHh9Lm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDU2cHgvNTZweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDJlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDQ1cHgvNDhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDA1ZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAzNHB4LzQwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDY0cHh9Lm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcmFpc2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0cm9rZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mbGF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmFiW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1taW5pLWZhYltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWJ1dHRvbi10b2dnbGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhcmQtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjIwcHh9Lm1hdC1jYXJkLXN1YnRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2hlY2tib3hbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNoZWNrYm94LWxheW91dFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoZWNrYm94LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoyNHB4fS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtdHJhaWxpbmctaWNvbi5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtcmVtb3ZlLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MThweH0ubWF0LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1oZWFkZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2VsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9vdGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2FsZW5kYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhbGVuZGFyLWJvZHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxM3B4fS5tYXQtY2FsZW5kYXItYm9keS1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FsZW5kYXItcGVyaW9kLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo0MDB9Lm1hdC1kaWFsb2ctdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjEyNTtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE1MCU7bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS41ZW07d2lkdGg6MS41ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNWVtIDA7Ym9yZGVyLXRvcDouODQzNzVlbSBzb2xpZCB0cmFuc3BhcmVudH0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6LTAuODQzNzVlbTtwYWRkaW5nLXRvcDouODQzNzVlbX0ubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo3NSU7bWFyZ2luLXRvcDouNjY2NjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjc5MTY2NjY2NjdlbSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNDM3NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMnB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjNlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM1MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjI4MTI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDouNTQxNjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjY2NjY2NjY2NjdlbSl9QG1lZGlhIHByaW50ey5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMmVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMWVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTJlbSkgc2NhbGUoMC43NSl9fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi4yNWVtIDAgLjc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMDkzNzVlbTttYXJnaW4tdG9wOi0wLjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjFlbSAwIDFlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS44NDM3NWVtO21hcmdpbi10b3A6LTAuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9aW5wdXQubWF0LWlucHV0LWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LTAuMDYyNWVtfS5tYXQtbWVudS1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtcGFnaW5hdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweH0ubWF0LXJhZGlvLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW19Lm1hdC1zbGlkZS10b2dnbGUtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdGVwcGVyLWhvcml6b250YWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXN0ZXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXN0ZXAtc3ViLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDpub3JtYWx9Lm1hdC1zdGVwLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LXN0ZXAtbGFiZWwtc2VsZWN0ZWRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRhYi1ncm91cFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdGFiLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10YWItbGlua1tfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowfS5tYXQtdG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB4O3BhZGRpbmctdG9wOjZweDtwYWRkaW5nLWJvdHRvbTo2cHh9Lm1hdC10b29sdGlwLWhhbmRzZXRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9Lm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE2cHh9Lm1hdC1vcHRncm91cC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1zaW1wbGUtc25hY2tiYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweH0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb25bX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjE7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo1MDB9Lm1hdC10cmVlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW5lc3RlZC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjQwMDtmb250LXNpemU6MTRweH0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmVtcHR5KXt0cmFuc2Zvcm06dHJhbnNsYXRlWigwKX0ubWF0LXJpcHBsZS5tYXQtcmlwcGxlLXVuYm91bmRlZFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItcmFkaXVzOjUwJTtwb2ludGVyLWV2ZW50czpub25lO3RyYW5zaXRpb246b3BhY2l0eSx0cmFuc2Zvcm0gMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpO3RyYW5zZm9ybTpzY2FsZSgwKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6bm9uZX0uY2RrLXZpc3VhbGx5LWhpZGRlbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjA7Y2xpcDpyZWN0KDAgMCAwIDApO2hlaWdodDoxcHg7bWFyZ2luOi0xcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwO291dGxpbmU6MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb2ludGVyLWV2ZW50czpub25lO3RvcDowO2xlZnQ6MDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTplbXB0eXtkaXNwbGF5Om5vbmV9LmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1wYW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czphdXRvO2JveC1zaXppbmc6Ym9yZGVyLWJveDt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O21heC13aWR0aDoxMDAlO21heC1oZWlnaHQ6MTAwJX0uY2RrLW92ZXJsYXktYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO3otaW5kZXg6MTAwMDtwb2ludGVyLWV2ZW50czphdXRvOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDt0cmFuc2l0aW9uOm9wYWNpdHkgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSk7b3BhY2l0eTowfS5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjF9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAuY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTouNn0uY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4zMil9LmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MH0uY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWluLXdpZHRoOjFweDttaW4taGVpZ2h0OjFweH0uY2RrLWdsb2JhbC1zY3JvbGxibG9ja1tfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7d2lkdGg6MTAwJTtvdmVyZmxvdy15OnNjcm9sbH1Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0e31Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZHt9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbHthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQgMHMgMW1zfS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOm5vdCg6LXdlYmtpdC1hdXRvZmlsbCl7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCAwcyAxbXN9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplW19uZ2NvbnRlbnQtJUNPTVAlXXtyZXNpemU6bm9uZX10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDphdXRvICFpbXBvcnRhbnQ7b3ZlcmZsb3c6aGlkZGVuICFpbXBvcnRhbnR9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZy1maXJlZm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDowICFpbXBvcnRhbnR9Lm1hdC1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtbWRjLWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9Lmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmViO2JhY2tncm91bmQtY29sb3I6I2ZmZjtoZWlnaHQ6NDJweDtwYWRkaW5nOjAgMTZweDtib3JkZXItdG9wOjFweCBzb2xpZCAjZWJlYmViO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM1NTV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgIzU1NX0uY2FyZC1ncm91cFtfbmdjb250ZW50LSVDT01QJV06Zmlyc3Qtb2YtdHlwZSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItdG9wOm5vbmV9Lmdyb3VwLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lmdyb3VwLWNhcmQtY291bnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjQwMDtjb2xvcjojNjE2MTYxO21hcmdpbi1sZWZ0OjZweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtY2FyZC1jb3VudFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC1jYXJkLWNvdW50W19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoZmd0LFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6Im1ldHJpY3MtY2FyZC1ncm91cHMtY29tcG9uZW50Iix0ZW1wbGF0ZTonXG4gICAgPGRpdlxuICAgICAgKm5nRm9yPSJsZXQgZ3JvdXAgb2YgY2FyZEdyb3VwczsgdHJhY2tCeTogdHJhY2tCeUdyb3VwIlxuICAgICAgY2xhc3M9ImNhcmQtZ3JvdXAiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz0iZ3JvdXAtdG9vbGJhciI+XG4gICAgICAgIDxzcGFuPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBjbGFzcz0iZ3JvdXAtdGl0bGUiXG4gICAgICAgICAgICBhcmlhLXJvbGU9ImhlYWRpbmciXG4gICAgICAgICAgICBhcmlhLWxldmVsPSIzIlxuICAgICAgICAgICAgdGl0bGU9Int7IGdyb3VwLmdyb3VwTmFtZSB9fSJcbiAgICAgICAgICAgID57eyBncm91cC5ncm91cE5hbWUgfX08L3NwYW5cbiAgICAgICAgICA+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9Imdyb3VwLml0ZW1zLmxlbmd0aCA+IDEiIGNsYXNzPSJncm91cC1jYXJkLWNvdW50IlxuICAgICAgICAgICAgPnt7IGdyb3VwLml0ZW1zLmxlbmd0aCB9fSBjYXJkczwvc3BhblxuICAgICAgICAgID5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8bWV0cmljcy1jYXJkLWdyaWRcbiAgICAgICAgW2NhcmRJZHNXaXRoTWV0YWRhdGFdPSJncm91cC5pdGVtcyJcbiAgICAgICAgW2NhcmRPYnNlcnZlcl09ImNhcmRPYnNlcnZlciJcbiAgICAgICAgW2dyb3VwTmFtZV09Imdyb3VwLmdyb3VwTmFtZSJcbiAgICAgID48L21ldHJpY3MtY2FyZC1ncmlkPlxuICAgIDwvZGl2PlxuICAnLHN0eWxlVXJsczpbImNhcmRfZ3JvdXBzX2NvbXBvbmVudC5jc3MiXSxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSxudWxsLHtjYXJkR3JvdXBzOlt7dHlwZTp5X31dLGNhcmRPYnNlcnZlcjpbe3R5cGU6eV99XX0pO2NvbnN0IGdndD16ayhFVCx2TiwoKHQsZSk9PnQuZmlsdGVyKCh0PT4hZlIodC5wbHVnaW4pfHxCb29sZWFuKGUmJmUuZ2V0KHQucnVuSWQpKSkpKSk7Y2xhc3MgaGd0e2NvbnN0cnVjdG9yKHQpe3RoaXMuc3RvcmU9dCx0aGlzLmNhcmRHcm91cHMkPXRoaXMuc3RvcmUuc2VsZWN0KGdndCkucGlwZShodCgodD0+KGZ1bmN0aW9uIGUodCl7Y29uc3QgZT1uZXcgTWFwLG49dC5zbGljZSgpLnNvcnQoKCh0LGUpPT5IMih0LnRhZyxlLnRhZykpKTtmb3IoY29uc3QgdCBvZiBuKXtjb25zdCBuPXQudGFnLnNwbGl0KCIvIiwxKVswXTtlLmhhcyhuKXx8ZS5zZXQobix7Z3JvdXBOYW1lOm4saXRlbXM6W119KSxlLmdldChuKS5pdGVtcy5wdXNoKHQpfXJldHVyblsuLi5lLnZhbHVlcygpXX0pKHQpKSkpfX1mdW5jdGlvbiBiZ3QodCxlKXtpZigxJnQmJihPdSgwLCJzcGFuIiw1KSxNZigxKSxQdSgpKSwyJnQpe2NvbnN0IHQ9THUoKTtKYygxKSx4ZigiIix0LmNhcmRJZHNXaXRoTWV0YWRhdGEubGVuZ3RoLCIgY2FyZHMiKX19aGd0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxoZ3QpKE11KEVrKSl9LGhndC7JtWNtcD1Vbyh7dHlwZTpoZ3Qsc2VsZWN0b3JzOltbIm1ldHJpY3MtY2FyZC1ncm91cHMiXV0saW5wdXRzOntjYXJkT2JzZXJ2ZXI6ImNhcmRPYnNlcnZlciJ9LGRlY2xzOjIsdmFyczo0LGNvbnN0czpbWzMsImNhcmRHcm91cHMiLCJjYXJkT2JzZXJ2ZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKHd1KDAsIm1ldHJpY3MtY2FyZC1ncm91cHMtY29tcG9uZW50IiwwKSxPYigxLCJhc3luYyIpKSwyJmUmJnZ1KCJjYXJkR3JvdXBzIixQYigxLDIsbi5jYXJkR3JvdXBzJCkpKCJjYXJkT2JzZXJ2ZXIiLG4uY2FyZE9ic2VydmVyKX0sZGlyZWN0aXZlczpbZmd0XSxwaXBlczpbTXZdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoaGd0LFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6Im1ldHJpY3MtY2FyZC1ncm91cHMiLHRlbXBsYXRlOidcbiAgICA8bWV0cmljcy1jYXJkLWdyb3Vwcy1jb21wb25lbnRcbiAgICAgIFtjYXJkR3JvdXBzXT0iY2FyZEdyb3VwcyQgfCBhc3luYyJcbiAgICAgIFtjYXJkT2JzZXJ2ZXJdPSJjYXJkT2JzZXJ2ZXIiXG4gICAgPjwvbWV0cmljcy1jYXJkLWdyb3Vwcy1jb21wb25lbnQ+XG4gICcsY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkVrfV19KSx7Y2FyZE9ic2VydmVyOlt7dHlwZTp5X31dfSk7Y2xhc3MgeWd0e315Z3QuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHlndCl9LHlndC7JtWNtcD1Vbyh7dHlwZTp5Z3Qsc2VsZWN0b3JzOltbIm1ldHJpY3MtZmlsdGVyZWQtdmlldy1jb21wb25lbnQiXV0saW5wdXRzOntjYXJkT2JzZXJ2ZXI6ImNhcmRPYnNlcnZlciIsY2FyZElkc1dpdGhNZXRhZGF0YToiY2FyZElkc1dpdGhNZXRhZGF0YSJ9LGRlY2xzOjYsdmFyczozLGNvbnN0czpbWzEsImdyb3VwLXRvb2xiYXIiXSxbMSwiZ3JvdXAtdGV4dCJdLFsiYXJpYS1yb2xlIiwiaGVhZGluZyIsImFyaWEtbGV2ZWwiLCIzIiwxLCJncm91cC10aXRsZSJdLFsiY2xhc3MiLCJncm91cC1jYXJkLWNvdW50Iiw0LCJuZ0lmIl0sWzMsImNhcmRJZHNXaXRoTWV0YWRhdGEiLCJjYXJkT2JzZXJ2ZXIiXSxbMSwiZ3JvdXAtY2FyZC1jb3VudCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoT3UoMCwiZGl2IiwwKSxPdSgxLCJzcGFuIiwxKSxPdSgyLCJzcGFuIiwyKSxNZigzLCJUYWdzIG1hdGNoaW5nIGZpbHRlciIpLFB1KCksV20oNCxiZ3QsMiwxLCJzcGFuIiwzKSxQdSgpLFB1KCksd3UoNSwibWV0cmljcy1jYXJkLWdyaWQiLDQpKSwyJmUmJihKYyg0KSx2dSgibmdJZiIsbi5jYXJkSWRzV2l0aE1ldGFkYXRhLmxlbmd0aD4xKSxKYygxKSx2dSgiY2FyZElkc1dpdGhNZXRhZGF0YSIsbi5jYXJkSWRzV2l0aE1ldGFkYXRhKSgiY2FyZE9ic2VydmVyIixuLmNhcmRPYnNlcnZlcikpfSxkaXJlY3RpdmVzOlthdixwZ3RdLHN0eWxlczpbJy5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHh9Lm1hdC1oMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaGVhZGxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTVweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZ1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjA1ZW07bWFyZ2luOjAgMCA1NnB4fS5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAwNWVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXJhaXNlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdHJva2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmxhdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZhYltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbWluaS1mYWJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4fS5tYXQtY2FyZC1zdWJ0aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGVja2JveC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvb3Rlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgdHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIzZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LjU0MTY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2NjY2NjY3ZW0pfUBtZWRpYSBwcmludHsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjJlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouMjVlbSAwIC43NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxZW0gMCAxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMiksIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi0wLjA2MjVlbX0ubWF0LW1lbnUtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci12ZXJ0aWNhbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGFiLWxpbmtbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MH0ubWF0LXRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5Om5vbmV9LmNkay12aXN1YWxseS1oaWRkZW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjZ9LmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV0sIC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3hbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2tbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHt9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7fS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOi13ZWJraXQtYXV0b2ZpbGwpe2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZVtfbmdjb250ZW50LSVDT01QJV17cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fS5tYXQtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfS5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWJlYjtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7aGVpZ2h0OjQycHg7cGFkZGluZzowIDE2cHg7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmVifWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzMwMzAzMH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fS5ncm91cC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6YmFzZWxpbmV9Lmdyb3VwLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lmdyb3VwLWNhcmQtY291bnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjQwMDtjb2xvcjojNjE2MTYxO21hcmdpbi1sZWZ0OjZweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtY2FyZC1jb3VudFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC1jYXJkLWNvdW50W19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoeWd0LFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6Im1ldHJpY3MtZmlsdGVyZWQtdmlldy1jb21wb25lbnQiLHRlbXBsYXRlOidcbiAgICA8ZGl2IGNsYXNzPSJncm91cC10b29sYmFyIj5cbiAgICAgIDxzcGFuIGNsYXNzPSJncm91cC10ZXh0Ij5cbiAgICAgICAgPHNwYW4gY2xhc3M9Imdyb3VwLXRpdGxlIiBhcmlhLXJvbGU9ImhlYWRpbmciIGFyaWEtbGV2ZWw9IjMiXG4gICAgICAgICAgPlRhZ3MgbWF0Y2hpbmcgZmlsdGVyPC9zcGFuXG4gICAgICAgID5cbiAgICAgICAgPHNwYW4gKm5nSWY9ImNhcmRJZHNXaXRoTWV0YWRhdGEubGVuZ3RoID4gMSIgY2xhc3M9Imdyb3VwLWNhcmQtY291bnQiXG4gICAgICAgICAgPnt7IGNhcmRJZHNXaXRoTWV0YWRhdGEubGVuZ3RoIH19IGNhcmRzPC9zcGFuXG4gICAgICAgID5cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8bWV0cmljcy1jYXJkLWdyaWRcbiAgICAgIFtjYXJkSWRzV2l0aE1ldGFkYXRhXT0iY2FyZElkc1dpdGhNZXRhZGF0YSJcbiAgICAgIFtjYXJkT2JzZXJ2ZXJdPSJjYXJkT2JzZXJ2ZXIiXG4gICAgPjwvbWV0cmljcy1jYXJkLWdyaWQ+XG4gICcsc3R5bGVVcmxzOlsiZmlsdGVyZWRfdmlld19jb21wb25lbnQuY3NzIl0sY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sbnVsbCx7Y2FyZE9ic2VydmVyOlt7dHlwZTp5X31dLGNhcmRJZHNXaXRoTWV0YWRhdGE6W3t0eXBlOnlffV19KTtjb25zdCBfZ3Q9emsoRVQsdk4sKCh0LGUpPT50LmZpbHRlcigodD0+IWZSKHQucGx1Z2luKXx8Qm9vbGVhbihlJiZlLmdldCh0LnJ1bklkKSkpKSkpO2NsYXNzIENndHtjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXQsdGhpcy5jYXJkSWRzV2l0aE1ldGFkYXRhJD10aGlzLnN0b3JlLnNlbGVjdChfZ3QpLnBpcGUoZG4oKHQ9PkR0KFtaKHQpLHRoaXMuc3RvcmUuc2VsZWN0KFhUKV0pKSksaHQoKChbdCxlXSk9Pnt0cnl7cmV0dXJue2NhcmRMaXN0OnQscmVnZXg6bmV3IFJlZ0V4cChlKX19Y2F0Y2goZSl7cmV0dXJue2NhcmRMaXN0OnQscmVnZXg6bnVsbH19fSkpLEd0KCgoe3JlZ2V4OnR9KT0+bnVsbCE9PXQpKSxodCgoKHtjYXJkTGlzdDp0LHJlZ2V4OmV9KT0+dC5maWx0ZXIoKCh7dGFnOnR9KT0+ZS50ZXN0KHQpKSkpKSxodCgodD0+dC5zb3J0KCgodCxlKT0+SDIodC50YWcsZS50YWcpKSkpKSxrZSgoKHQsZSk9PnQubGVuZ3RoPT09ZS5sZW5ndGgmJnQuZXZlcnkoKCh0LG4pPT50LmNhcmRJZD09PWVbbl0uY2FyZElkKSkpKSxjbihbXSkpfX1mdW5jdGlvbiBNZ3QodCxlKXtpZigxJnQmJihPdSgwLCJzcGFuIiw3KSxNZigxKSxQdSgpKSwyJnQpe2NvbnN0IHQ9THUoKTtKYygxKSx4ZigiIix0LmNhcmRJZHNXaXRoTWV0YWRhdGEubGVuZ3RoLCIgY2FyZHMiKX19ZnVuY3Rpb24gdmd0KHQsZSl7aWYoMSZ0JiZ3dSgwLCJtZXRyaWNzLWNhcmQtZ3JpZCIsOCksMiZ0KXtjb25zdCB0PUx1KCk7dnUoImNhcmRJZHNXaXRoTWV0YWRhdGEiLHQuY2FyZElkc1dpdGhNZXRhZGF0YSkoImNhcmRPYnNlcnZlciIsdC5jYXJkT2JzZXJ2ZXIpfX1mdW5jdGlvbiB4Z3QodCxlKXsxJnQmJihPdSgwLCJkaXYiLDkpLE1mKDEsIlBpbiBjYXJkcyBmb3IgYSBxdWljayB2aWV3IGFuZCBjb21wYXJpc29uIiksUHUoKSl9Q2d0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxDZ3QpKE11KEVrKSl9LENndC7JtWNtcD1Vbyh7dHlwZTpDZ3Qsc2VsZWN0b3JzOltbIm1ldHJpY3MtZmlsdGVyZWQtdmlldyJdXSxpbnB1dHM6e2NhcmRPYnNlcnZlcjoiY2FyZE9ic2VydmVyIn0sZGVjbHM6Mix2YXJzOjQsY29uc3RzOltbMywiY2FyZElkc1dpdGhNZXRhZGF0YSIsImNhcmRPYnNlcnZlciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYod3UoMCwibWV0cmljcy1maWx0ZXJlZC12aWV3LWNvbXBvbmVudCIsMCksT2IoMSwiYXN5bmMiKSksMiZlJiZ2dSgiY2FyZElkc1dpdGhNZXRhZGF0YSIsUGIoMSwyLG4uY2FyZElkc1dpdGhNZXRhZGF0YSQpKSgiY2FyZE9ic2VydmVyIixuLmNhcmRPYnNlcnZlcil9LGRpcmVjdGl2ZXM6W3lndF0scGlwZXM6W012XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKENndCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJtZXRyaWNzLWZpbHRlcmVkLXZpZXciLHRlbXBsYXRlOidcbiAgICA8bWV0cmljcy1maWx0ZXJlZC12aWV3LWNvbXBvbmVudFxuICAgICAgW2NhcmRJZHNXaXRoTWV0YWRhdGFdPSJjYXJkSWRzV2l0aE1ldGFkYXRhJCB8IGFzeW5jIlxuICAgICAgW2NhcmRPYnNlcnZlcl09ImNhcmRPYnNlcnZlciJcbiAgICA+PC9tZXRyaWNzLWZpbHRlcmVkLXZpZXctY29tcG9uZW50PlxuICAnLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2h9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpFa31dfSkse2NhcmRPYnNlcnZlcjpbe3R5cGU6eV99XX0pO2NsYXNzIE9ndHt9T2d0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxPZ3QpfSxPZ3QuybVjbXA9VW8oe3R5cGU6T2d0LHNlbGVjdG9yczpbWyJtZXRyaWNzLXBpbm5lZC12aWV3LWNvbXBvbmVudCJdXSxpbnB1dHM6e2NhcmRPYnNlcnZlcjoiY2FyZE9ic2VydmVyIixjYXJkSWRzV2l0aE1ldGFkYXRhOiJjYXJkSWRzV2l0aE1ldGFkYXRhIn0sZGVjbHM6OSx2YXJzOjMsY29uc3RzOltbMSwiZ3JvdXAtdG9vbGJhciJdLFsic3ZnSWNvbiIsImtlZXBfMjRweCJdLFsxLCJncm91cC10ZXh0Il0sWyJhcmlhLXJvbGUiLCJoZWFkaW5nIiwiYXJpYS1sZXZlbCIsIjMiLDEsImdyb3VwLXRpdGxlIl0sWyJjbGFzcyIsImdyb3VwLWNhcmQtY291bnQiLDQsIm5nSWYiXSxbMywiY2FyZElkc1dpdGhNZXRhZGF0YSIsImNhcmRPYnNlcnZlciIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJlbXB0eVBpbm5lZFZpZXciLCIiXSxbMSwiZ3JvdXAtY2FyZC1jb3VudCJdLFszLCJjYXJkSWRzV2l0aE1ldGFkYXRhIiwiY2FyZE9ic2VydmVyIl0sWzEsImVtcHR5LW1lc3NhZ2UiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pe2lmKDEmZSYmKE91KDAsImRpdiIsMCksd3UoMSwibWF0LWljb24iLDEpLE91KDIsInNwYW4iLDIpLE91KDMsInNwYW4iLDMpLE1mKDQsIlBpbm5lZCIpLFB1KCksV20oNSxNZ3QsMiwxLCJzcGFuIiw0KSxQdSgpLFB1KCksV20oNix2Z3QsMSwyLCJtZXRyaWNzLWNhcmQtZ3JpZCIsNSksV20oNyx4Z3QsMiwwLCJuZy10ZW1wbGF0ZSIsbnVsbCw2LEtiKSksMiZlKXtjb25zdCB0PUdtKDgpO0pjKDUpLHZ1KCJuZ0lmIixuLmNhcmRJZHNXaXRoTWV0YWRhdGEubGVuZ3RoPjEpLEpjKDEpLHZ1KCJuZ0lmIixuLmNhcmRJZHNXaXRoTWV0YWRhdGEubGVuZ3RoKSgibmdJZkVsc2UiLHQpfX0sZGlyZWN0aXZlczpbY0csYXYscGd0XSxzdHlsZXM6WycubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1iYWRnZS1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo5cHh9Lm1hdC1iYWRnZS1sYXJnZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4fS5tYXQtaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWhlYWRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAyNHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE1cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjgzKS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1oNltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC42NykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtYm9keS1zdHJvbmdbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MCAwIDEycHh9Lm1hdC1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FwdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTJweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6MzAwIDExMnB4LzExMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wNWVtO21hcmdpbjowIDAgNTZweH0ubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNTZweC81NnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMmVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNDVweC80OHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMDVlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDM0cHgvNDBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1yYWlzZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3Ryb2tlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZsYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mYWJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW1pbmktZmFiW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtYnV0dG9uLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FyZC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjBweH0ubWF0LWNhcmQtc3VidGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hlY2tib3gtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC10cmFpbGluZy1pY29uLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC1yZW1vdmUubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxOHB4fS5tYXQtdGFibGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWhlYWRlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb290ZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jYWxlbmRhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FsZW5kYXItYm9keVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYWxlbmRhci1wZXJpb2QtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWRpYWxvZy10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTI1O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTUwJTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjVlbTt3aWR0aDoxLjVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW07bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41ZW0gMDtib3JkZXItdG9wOi44NDM3NWVtIHNvbGlkIHRyYW5zcGFyZW50fS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3RvcDotMC44NDM3NWVtO3BhZGRpbmctdG9wOi44NDM3NWVtfS5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjc1JTttYXJnaW4tdG9wOi42NjY2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNzkxNjY2NjY2N2VtKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAycHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyM2VtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzUzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi41NDE2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNjY2NjY2NjY2N2VtKX1AbWVkaWEgcHJpbnR7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIyZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIxZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMmVtKSBzY2FsZSgwLjc1KX19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjI1ZW0gMCAuNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4wOTM3NWVtO21hcmdpbi10b3A6LTAuNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MWVtIDAgMWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjg0Mzc1ZW07bWFyZ2luLXRvcDotMC4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH1pbnB1dC5tYXQtaW5wdXQtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDotMC4wNjI1ZW19Lm1hdC1tZW51LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1wYWdpbmF0b3JbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXBhZ2luYXRvci1wYWdlLXNpemVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3RbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXN0ZXBwZXItdmVydGljYWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc3RlcC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0Om5vcm1hbH0ubWF0LXN0ZXAtbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRhYi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjB9Lm1hdC10b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTZweH0ubWF0LW9wdGdyb3VwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LXNpbXBsZS1zbmFja2Jhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbltfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRyZWVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbmVzdGVkLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4fS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVdOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtcmlwcGxlLm1hdC1yaXBwbGUtdW5ib3VuZGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6NTAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7dHJhbnNmb3JtOnNjYWxlKDApfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpub25lfS5jZGstdmlzdWFsbHktaGlkZGVuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7bGVmdDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmVtcHR5e2Rpc3BsYXk6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LXBhbmVbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOmF1dG87Ym94LXNpemluZzpib3JkZXItYm94O3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7bWF4LXdpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlfS5jZGstb3ZlcmxheS1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKTtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5Oi42fS5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjMyKX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTowfS5jZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO292ZXJmbG93LXk6c2Nyb2xsfUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnR7fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5ke30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxse2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCAwcyAxbXN9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06bm90KDotd2Via2l0LWF1dG9maWxsKXthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIDBzIDFtc310ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemVbX25nY29udGVudC0lQ09NUCVde3Jlc2l6ZTpub25lfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmdbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OmF1dG8gIWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW4gIWltcG9ydGFudH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nLWZpcmVmb3hbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OjAgIWltcG9ydGFudH0ubWF0LWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0uZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7YmFja2dyb3VuZC1jb2xvcjojZmZmO2hlaWdodDo0MnB4O3BhZGRpbmc6MCAxNnB4O2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM1NTV9bWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7ZmxleDpub25lO21hcmdpbi1yaWdodDo1cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBtYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Lmdyb3VwLXRleHRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpiYXNlbGluZX0uZ3JvdXAtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0uZ3JvdXAtY2FyZC1jb3VudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NDAwO2NvbG9yOiM2MTYxNjE7bWFyZ2luLWxlZnQ6NnB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC1jYXJkLWNvdW50W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLWNhcmQtY291bnRbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS5lbXB0eS1tZXNzYWdlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxO3RleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6MTZweDtmb250LXNpemU6MTNweDtmb250LXN0eWxlOml0YWxpY31ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZW1wdHktbWVzc2FnZVtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5lbXB0eS1tZXNzYWdlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoT2d0LFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6Im1ldHJpY3MtcGlubmVkLXZpZXctY29tcG9uZW50Iix0ZW1wbGF0ZTonXG4gICAgPGRpdiBjbGFzcz0iZ3JvdXAtdG9vbGJhciI+XG4gICAgICA8bWF0LWljb24gc3ZnSWNvbj0ia2VlcF8yNHB4Ij48L21hdC1pY29uPlxuICAgICAgPHNwYW4gY2xhc3M9Imdyb3VwLXRleHQiPlxuICAgICAgICA8c3BhbiBjbGFzcz0iZ3JvdXAtdGl0bGUiIGFyaWEtcm9sZT0iaGVhZGluZyIgYXJpYS1sZXZlbD0iMyJcbiAgICAgICAgICA+UGlubmVkPC9zcGFuXG4gICAgICAgID5cbiAgICAgICAgPHNwYW4gKm5nSWY9ImNhcmRJZHNXaXRoTWV0YWRhdGEubGVuZ3RoID4gMSIgY2xhc3M9Imdyb3VwLWNhcmQtY291bnQiXG4gICAgICAgICAgPnt7IGNhcmRJZHNXaXRoTWV0YWRhdGEubGVuZ3RoIH19IGNhcmRzPC9zcGFuXG4gICAgICAgID5cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8bWV0cmljcy1jYXJkLWdyaWRcbiAgICAgICpuZ0lmPSJjYXJkSWRzV2l0aE1ldGFkYXRhLmxlbmd0aDsgZWxzZSBlbXB0eVBpbm5lZFZpZXciXG4gICAgICBbY2FyZElkc1dpdGhNZXRhZGF0YV09ImNhcmRJZHNXaXRoTWV0YWRhdGEiXG4gICAgICBbY2FyZE9ic2VydmVyXT0iY2FyZE9ic2VydmVyIlxuICAgID48L21ldHJpY3MtY2FyZC1ncmlkPlxuICAgIDxuZy10ZW1wbGF0ZSAjZW1wdHlQaW5uZWRWaWV3PlxuICAgICAgPGRpdiBjbGFzcz0iZW1wdHktbWVzc2FnZSI+UGluIGNhcmRzIGZvciBhIHF1aWNrIHZpZXcgYW5kIGNvbXBhcmlzb248L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAnLHN0eWxlVXJsczpbInBpbm5lZF92aWV3X2NvbXBvbmVudC5jc3MiXSxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSxudWxsLHtjYXJkT2JzZXJ2ZXI6W3t0eXBlOnlffV0sY2FyZElkc1dpdGhNZXRhZGF0YTpbe3R5cGU6eV99XX0pO2NsYXNzIFBndHtjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXQsdGhpcy5jYXJkSWRzV2l0aE1ldGFkYXRhJD10aGlzLnN0b3JlLnNlbGVjdChOVCkucGlwZShjbihbXSkpfX1mdW5jdGlvbiB3Z3QodCxlKXtpZigxJnQmJihPdSgwLCJtYXQtb3B0aW9uIiwyKSxNZigxKSxQdSgpKSwyJnQpe2NvbnN0IHQ9ZS4kaW1wbGljaXQ7dnUoInZhbHVlIix0LnZhbHVlKSgiZGlzYWJsZWQiLHQuZGlzYWJsZWQpLEpjKDEpLHhmKCIgIix0LmRpc3BsYXlUZXh0LCIgIil9fVBndC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8UGd0KShNdShFaykpfSxQZ3QuybVjbXA9VW8oe3R5cGU6UGd0LHNlbGVjdG9yczpbWyJtZXRyaWNzLXBpbm5lZC12aWV3Il1dLGlucHV0czp7Y2FyZE9ic2VydmVyOiJjYXJkT2JzZXJ2ZXIifSxkZWNsczoyLHZhcnM6NCxjb25zdHM6W1szLCJjYXJkSWRzV2l0aE1ldGFkYXRhIiwiY2FyZE9ic2VydmVyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJih3dSgwLCJtZXRyaWNzLXBpbm5lZC12aWV3LWNvbXBvbmVudCIsMCksT2IoMSwiYXN5bmMiKSksMiZlJiZ2dSgiY2FyZElkc1dpdGhNZXRhZGF0YSIsUGIoMSwyLG4uY2FyZElkc1dpdGhNZXRhZGF0YSQpKSgiY2FyZE9ic2VydmVyIixuLmNhcmRPYnNlcnZlcil9LGRpcmVjdGl2ZXM6W09ndF0scGlwZXM6W012XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFBndCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJtZXRyaWNzLXBpbm5lZC12aWV3Iix0ZW1wbGF0ZTonXG4gICAgPG1ldHJpY3MtcGlubmVkLXZpZXctY29tcG9uZW50XG4gICAgICBbY2FyZElkc1dpdGhNZXRhZGF0YV09ImNhcmRJZHNXaXRoTWV0YWRhdGEkIHwgYXN5bmMiXG4gICAgICBbY2FyZE9ic2VydmVyXT0iY2FyZE9ic2VydmVyIlxuICAgID48L21ldHJpY3MtcGlubmVkLXZpZXctY29tcG9uZW50PlxuICAnLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2h9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpFa31dfSkse2NhcmRPYnNlcnZlcjpbe3R5cGU6eV99XX0pO2NsYXNzIGtndHtjb25zdHJ1Y3Rvcigpe3RoaXMudmFsdWU9IiIsdGhpcy5vcHRpb25zPVtdLHRoaXMuc2VsZWN0aW9uQ2hhbmdlPW5ldyBBYn19ZnVuY3Rpb24gU2d0KHQsZSl7aWYoMSZ0KXtjb25zdCB0PUV1KCk7T3UoMCwic2VjdGlvbiIsMjApLE91KDEsImgzIiwxKSxNZigyLCJJbWFnZXMiKSxQdSgpLE91KDMsImRpdiIsMjEpLE91KDQsImRpdiIsMjIpLE1mKDUsIkJyaWdodG5lc3MiKSxQdSgpLE91KDYsImRpdiIsOCksT3UoNywibWF0LXNsaWRlciIsMjMpLE51KCJpbnB1dCIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIHJhKHQpLEx1KCkuaW1hZ2VCcmlnaHRuZXNzU2xpZGVyQ2hhbmdlZCQuZW1pdChuLnZhbHVlKX0pKSxQdSgpLE91KDgsImJ1dHRvbiIsMjQpLE51KCJjbGljayIsKGZ1bmN0aW9uIGUoKXtyZXR1cm4gcmEodCksTHUoKS5pbWFnZUJyaWdodG5lc3NSZXNldC5lbWl0KCl9KSksd3UoOSwibWF0LWljb24iLDI1KSxQdSgpLFB1KCksUHUoKSxPdSgxMCwiZGl2IiwyNiksT3UoMTEsImRpdiIsMjcpLE1mKDEyLCJDb250cmFzdCIpLFB1KCksT3UoMTMsImRpdiIsOCksT3UoMTQsIm1hdC1zbGlkZXIiLDI4KSxOdSgiaW5wdXQiLChmdW5jdGlvbiBlKG4pe3JldHVybiByYSh0KSxMdSgpLmltYWdlQ29udHJhc3RTbGlkZXJDaGFuZ2VkJC5lbWl0KG4udmFsdWUpfSkpLFB1KCksT3UoMTUsImJ1dHRvbiIsMjkpLE51KCJjbGljayIsKGZ1bmN0aW9uIGUoKXtyZXR1cm4gcmEodCksTHUoKS5pbWFnZUNvbnRyYXN0UmVzZXQuZW1pdCgpfSkpLHd1KDE2LCJtYXQtaWNvbiIsMjUpLFB1KCksUHUoKSxQdSgpLE91KDE3LCJkaXYiLDMwKSxPdSgxOCwibWF0LWNoZWNrYm94IiwxNCksTnUoImNoYW5nZSIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIHJhKHQpLEx1KCkuaW1hZ2VTaG93QWN0dWFsU2l6ZUNoYW5nZWQuZW1pdChuLmNoZWNrZWQpfSkpLE1mKDE5LCJTaG93IGFjdHVhbCBpbWFnZSBzaXplIiksUHUoKSxQdSgpLFB1KCl9aWYoMiZ0KXtjb25zdCB0PUx1KCk7SmMoNyksdnUoIm1heCIsMmUzKSgibWluIiwwKSgic3RlcCIsMTApKCJ2YWx1ZSIsdC5pbWFnZUJyaWdodG5lc3NJbk1pbGxpKSgidGh1bWJMYWJlbCIsITApKCJkaXNwbGF5V2l0aCIsdC5mb3JtYXRNaWxsaVRvWmVyb3RoKSxKYyg3KSx2dSgibWF4Iiw1ZTMpKCJtaW4iLDApKCJzdGVwIiwxMCkoInZhbHVlIix0LmltYWdlQ29udHJhc3RJbk1pbGxpKSgidGh1bWJMYWJlbCIsITApKCJkaXNwbGF5V2l0aCIsdC5mb3JtYXRNaWxsaVRvWmVyb3RoKSxKYyg0KSx2dSgiY2hlY2tlZCIsdC5pbWFnZVNob3dBY3R1YWxTaXplKX19a2d0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxrZ3QpfSxrZ3QuybVjbXA9VW8oe3R5cGU6a2d0LHNlbGVjdG9yczpbWyJ0Yi1kcm9wZG93biJdXSxpbnB1dHM6e3ZhbHVlOiJ2YWx1ZSIsb3B0aW9uczoib3B0aW9ucyJ9LG91dHB1dHM6e3NlbGVjdGlvbkNoYW5nZToic2VsZWN0aW9uQ2hhbmdlIn0sZGVjbHM6Mix2YXJzOjIsY29uc3RzOltbMywidmFsdWUiLCJzZWxlY3Rpb25DaGFuZ2UiXSxbMywidmFsdWUiLCJkaXNhYmxlZCIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsInZhbHVlIiwiZGlzYWJsZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKE91KDAsIm1hdC1zZWxlY3QiLDApLE51KCJzZWxlY3Rpb25DaGFuZ2UiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLnNlbGVjdGlvbkNoYW5nZS5lbWl0KGUudmFsdWUpfSkpLFdtKDEsd2d0LDIsMywibWF0LW9wdGlvbiIsMSksUHUoKSksMiZlJiYodnUoInZhbHVlIixuLnZhbHVlKSxKYygxKSx2dSgibmdGb3JPZiIsbi5vcHRpb25zKSl9LGRpcmVjdGl2ZXM6W2RXLG92LFBIXSxzdHlsZXM6WycubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1iYWRnZS1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo5cHh9Lm1hdC1iYWRnZS1sYXJnZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4fS5tYXQtaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWhlYWRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAyNHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE1cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjgzKS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1oNltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC42NykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtYm9keS1zdHJvbmdbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MCAwIDEycHh9Lm1hdC1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FwdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTJweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6MzAwIDExMnB4LzExMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wNWVtO21hcmdpbjowIDAgNTZweH0ubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNTZweC81NnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMmVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNDVweC80OHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMDVlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDM0cHgvNDBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1yYWlzZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3Ryb2tlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZsYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mYWJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW1pbmktZmFiW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtYnV0dG9uLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FyZC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjBweH0ubWF0LWNhcmQtc3VidGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hlY2tib3gtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC10cmFpbGluZy1pY29uLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC1yZW1vdmUubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxOHB4fS5tYXQtdGFibGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWhlYWRlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb290ZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jYWxlbmRhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FsZW5kYXItYm9keVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYWxlbmRhci1wZXJpb2QtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWRpYWxvZy10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTI1O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTUwJTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjVlbTt3aWR0aDoxLjVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW07bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41ZW0gMDtib3JkZXItdG9wOi44NDM3NWVtIHNvbGlkIHRyYW5zcGFyZW50fS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3RvcDotMC44NDM3NWVtO3BhZGRpbmctdG9wOi44NDM3NWVtfS5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjc1JTttYXJnaW4tdG9wOi42NjY2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNzkxNjY2NjY2N2VtKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAycHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyM2VtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzUzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi41NDE2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNjY2NjY2NjY2N2VtKX1AbWVkaWEgcHJpbnR7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIyZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIxZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMmVtKSBzY2FsZSgwLjc1KX19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjI1ZW0gMCAuNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4wOTM3NWVtO21hcmdpbi10b3A6LTAuNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MWVtIDAgMWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjg0Mzc1ZW07bWFyZ2luLXRvcDotMC4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH1pbnB1dC5tYXQtaW5wdXQtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDotMC4wNjI1ZW19Lm1hdC1tZW51LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1wYWdpbmF0b3JbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXBhZ2luYXRvci1wYWdlLXNpemVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3RbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXN0ZXBwZXItdmVydGljYWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc3RlcC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0Om5vcm1hbH0ubWF0LXN0ZXAtbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRhYi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjB9Lm1hdC10b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTZweH0ubWF0LW9wdGdyb3VwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LXNpbXBsZS1zbmFja2Jhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbltfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRyZWVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbmVzdGVkLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4fS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVdOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtcmlwcGxlLm1hdC1yaXBwbGUtdW5ib3VuZGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6NTAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7dHJhbnNmb3JtOnNjYWxlKDApfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpub25lfS5jZGstdmlzdWFsbHktaGlkZGVuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7bGVmdDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmVtcHR5e2Rpc3BsYXk6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LXBhbmVbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOmF1dG87Ym94LXNpemluZzpib3JkZXItYm94O3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7bWF4LXdpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlfS5jZGstb3ZlcmxheS1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKTtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5Oi42fS5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjMyKX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTowfS5jZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO292ZXJmbG93LXk6c2Nyb2xsfUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnR7fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5ke30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxse2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCAwcyAxbXN9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06bm90KDotd2Via2l0LWF1dG9maWxsKXthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIDBzIDFtc310ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemVbX25nY29udGVudC0lQ09NUCVde3Jlc2l6ZTpub25lfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmdbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OmF1dG8gIWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW4gIWltcG9ydGFudH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nLWZpcmVmb3hbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OjAgIWltcG9ydGFudH0ubWF0LWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX1tYXQtc2VsZWN0W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MXB4IHNvbGlkICM4ZTk4YTM7Ym9yZGVyLXJhZGl1czozcHg7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6NnB4fW1hdC1zZWxlY3RbX25nY29udGVudC0lQ09NUCVdOmZvY3Vze291dGxpbmUtY29sb3I6LXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yO291dGxpbmUtc3R5bGU6YXV0b30nXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoa2d0LFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6InRiLWRyb3Bkb3duIix0ZW1wbGF0ZTonXG4gICAgPG1hdC1zZWxlY3RcbiAgICAgIFt2YWx1ZV09InZhbHVlIlxuICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9InNlbGVjdGlvbkNoYW5nZS5lbWl0KCRldmVudC52YWx1ZSkiXG4gICAgPlxuICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgKm5nRm9yPSJsZXQgb3B0aW9uIG9mIG9wdGlvbnMiXG4gICAgICAgIFt2YWx1ZV09Im9wdGlvbi52YWx1ZSJcbiAgICAgICAgW2Rpc2FibGVkXT0ib3B0aW9uLmRpc2FibGVkIlxuICAgICAgPlxuICAgICAgICB7eyBvcHRpb24uZGlzcGxheVRleHQgfX1cbiAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICA8L21hdC1zZWxlY3Q+XG4gICcsc3R5bGVVcmxzOlsiZHJvcGRvd25fY29tcG9uZW50LmNzcyJdfV19XSxudWxsLHt2YWx1ZTpbe3R5cGU6eV99XSxvcHRpb25zOlt7dHlwZTp5X31dLHNlbGVjdGlvbkNoYW5nZTpbe3R5cGU6X199XX0pO2NsYXNzIERndHtjb25zdHJ1Y3Rvcih0KXt0aGlzLmxvY2FsZT10LHRoaXMuVG9vbHRpcFNvcnREcm9wZG93bk9wdGlvbnM9W3t2YWx1ZTpsUi5ERUZBVUxULGRpc3BsYXlUZXh0OiJEZWZhdWx0In0se3ZhbHVlOmxSLkFTQ0VORElORyxkaXNwbGF5VGV4dDoiQXNjZW5kaW5nIn0se3ZhbHVlOmxSLkRFU0NFTkRJTkcsZGlzcGxheVRleHQ6IkRlc2NlbmRpbmcifSx7dmFsdWU6bFIuTkVBUkVTVCxkaXNwbGF5VGV4dDoiTmVhcmVzdCJ9XSx0aGlzLnRvb2x0aXBTb3J0Q2hhbmdlZD1uZXcgQWIsdGhpcy5pZ25vcmVPdXRsaWVyc0NoYW5nZWQ9bmV3IEFiLHRoaXMuWEF4aXNUeXBlRHJvcGRvd25PcHRpb25zPVt7dmFsdWU6Y1IuU1RFUCxkaXNwbGF5VGV4dDoiU3RlcCJ9LHt2YWx1ZTpjUi5SRUxBVElWRSxkaXNwbGF5VGV4dDoiUmVsYXRpdmUifSx7dmFsdWU6Y1IuV0FMTF9USU1FLGRpc3BsYXlUZXh0OiJXYWxsIn1dLHRoaXMueEF4aXNUeXBlQ2hhbmdlZD1uZXcgQWIsdGhpcy5IaXN0b2dyYW1Nb2RlRHJvcGRvd25PcHRpb25zPVt7dmFsdWU6VEUuT0ZGU0VULGRpc3BsYXlUZXh0OiJPZmZzZXQifSx7dmFsdWU6VEUuT1ZFUkxBWSxkaXNwbGF5VGV4dDoiT3ZlcmxheSJ9XSx0aGlzLmhpc3RvZ3JhbU1vZGVDaGFuZ2VkPW5ldyBBYix0aGlzLk1BWF9TTU9PVEhJTkdfVkFMVUU9Ljk5OSx0aGlzLk1BWF9TTU9PVEhJTkdfU0xJREVSX1ZBTFVFPS45OSx0aGlzLnNjYWxhclNtb290aGluZ0NvbnRyb2xDaGFuZ2VkJD1uZXcgQWIsdGhpcy5zY2FsYXJTbW9vdGhpbmdDaGFuZ2VkPXRoaXMuc2NhbGFyU21vb3RoaW5nQ29udHJvbENoYW5nZWQkLnBpcGUob2UoMjUwKSksdGhpcy5zY2FsYXJQYXJ0aXRpb25YVG9nZ2xlZD1uZXcgQWIsdGhpcy5pbWFnZUJyaWdodG5lc3NTbGlkZXJDaGFuZ2VkJD1uZXcgQWIsdGhpcy5pbWFnZUJyaWdodG5lc3NJbk1pbGxpQ2hhbmdlZD10aGlzLmltYWdlQnJpZ2h0bmVzc1NsaWRlckNoYW5nZWQkLnBpcGUob2UoMjUwKSksdGhpcy5pbWFnZUJyaWdodG5lc3NSZXNldD1uZXcgQWIsdGhpcy5pbWFnZUNvbnRyYXN0U2xpZGVyQ2hhbmdlZCQ9bmV3IEFiLHRoaXMuaW1hZ2VDb250cmFzdEluTWlsbGlDaGFuZ2VkPXRoaXMuaW1hZ2VDb250cmFzdFNsaWRlckNoYW5nZWQkLnBpcGUob2UoMjUwKSksdGhpcy5pbWFnZUNvbnRyYXN0UmVzZXQ9bmV3IEFiLHRoaXMuaW1hZ2VTaG93QWN0dWFsU2l6ZUNoYW5nZWQ9bmV3IEFifW9uU2NhbGFyU21vb3RoaW5nSW5wdXQodCl7Y29uc3QgZT10LnRhcmdldDtpZighZS52YWx1ZSlyZXR1cm47Y29uc3Qgbj1NYXRoLm1pbihNYXRoLm1heCgwLHBhcnNlRmxvYXQoZS52YWx1ZSkpLC45OTkpO24hPT1wYXJzZUZsb2F0KGUudmFsdWUpJiYoZS52YWx1ZT1TdHJpbmcobikpLHRoaXMuc2NhbGFyU21vb3RoaW5nQ29udHJvbENoYW5nZWQkLmVtaXQobil9Zm9ybWF0TWlsbGlUb1plcm90aCh0KXtyZXR1cm4gcU0odC8xZTMsdGhpcy5sb2NhbGV8fCJlbi1VUyIsIjEuMC0yIil9fURndC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8RGd0KShNdShCXykpfSxEZ3QuybVjbXA9VW8oe3R5cGU6RGd0LHNlbGVjdG9yczpbWyJtZXRyaWNzLWRhc2hib2FyZC1zZXR0aW5ncy1jb21wb25lbnQiXV0saW5wdXRzOntpc0ltYWdlU3VwcG9ydEVuYWJsZWQ6ImlzSW1hZ2VTdXBwb3J0RW5hYmxlZCIsdG9vbHRpcFNvcnQ6InRvb2x0aXBTb3J0IixpZ25vcmVPdXRsaWVyczoiaWdub3JlT3V0bGllcnMiLHhBeGlzVHlwZToieEF4aXNUeXBlIixoaXN0b2dyYW1Nb2RlOiJoaXN0b2dyYW1Nb2RlIixzY2FsYXJTbW9vdGhpbmc6InNjYWxhclNtb290aGluZyIsc2NhbGFyUGFydGl0aW9uWDoic2NhbGFyUGFydGl0aW9uWCIsaW1hZ2VCcmlnaHRuZXNzSW5NaWxsaToiaW1hZ2VCcmlnaHRuZXNzSW5NaWxsaSIsaW1hZ2VDb250cmFzdEluTWlsbGk6ImltYWdlQ29udHJhc3RJbk1pbGxpIixpbWFnZVNob3dBY3R1YWxTaXplOiJpbWFnZVNob3dBY3R1YWxTaXplIn0sb3V0cHV0czp7dG9vbHRpcFNvcnRDaGFuZ2VkOiJ0b29sdGlwU29ydENoYW5nZWQiLGlnbm9yZU91dGxpZXJzQ2hhbmdlZDoiaWdub3JlT3V0bGllcnNDaGFuZ2VkIix4QXhpc1R5cGVDaGFuZ2VkOiJ4QXhpc1R5cGVDaGFuZ2VkIixoaXN0b2dyYW1Nb2RlQ2hhbmdlZDoiaGlzdG9ncmFtTW9kZUNoYW5nZWQiLHNjYWxhclNtb290aGluZ0NoYW5nZWQ6InNjYWxhclNtb290aGluZ0NoYW5nZWQiLHNjYWxhclBhcnRpdGlvblhUb2dnbGVkOiJzY2FsYXJQYXJ0aXRpb25YVG9nZ2xlZCIsaW1hZ2VCcmlnaHRuZXNzSW5NaWxsaUNoYW5nZWQ6ImltYWdlQnJpZ2h0bmVzc0luTWlsbGlDaGFuZ2VkIixpbWFnZUJyaWdodG5lc3NSZXNldDoiaW1hZ2VCcmlnaHRuZXNzUmVzZXQiLGltYWdlQ29udHJhc3RJbk1pbGxpQ2hhbmdlZDoiaW1hZ2VDb250cmFzdEluTWlsbGlDaGFuZ2VkIixpbWFnZUNvbnRyYXN0UmVzZXQ6ImltYWdlQ29udHJhc3RSZXNldCIsaW1hZ2VTaG93QWN0dWFsU2l6ZUNoYW5nZWQ6ImltYWdlU2hvd0FjdHVhbFNpemVDaGFuZ2VkIn0sZGVjbHM6MzUsdmFyczoxNixjb25zdHM6ZnVuY3Rpb24oKXtsZXQgdCxlO3JldHVybiB0PSJ1bmRlZmluZWQiIT10eXBlb2YgbmdJMThuQ2xvc3VyZU1vZGUmJm5nSTE4bkNsb3N1cmVNb2RlP2dvb2cuZ2V0TXNnKCJSZXNldCBicmlnaHRuZXNzIik6JGxvY2FsaXplYDpBIGJ1dHRvbiB0byByZXNldCB0aGUgaW1hZ2UgYnJpZ2h0bmVzcyBzZXR0aW5n4pCfYzQ4MmIzYTQ3ZWEwOTc1ZmE4YmUwMWFmYjNmYmVjOWI3NjYyOGJkN+KQnzExODkxNjE4NTcyNDAzNzgzOTU6UmVzZXQgYnJpZ2h0bmVzc2AsZT0idW5kZWZpbmVkIiE9dHlwZW9mIG5nSTE4bkNsb3N1cmVNb2RlJiZuZ0kxOG5DbG9zdXJlTW9kZT9nb29nLmdldE1zZygiUmVzZXQgY29udHJhc3QiKTokbG9jYWxpemVgOkEgYnV0dG9uIHRvIHJlc2V0IHRoZSBpbWFnZSBjb250cmFzdCBzZXR0aW5n4pCfZWQ3MTJhOGI5MjcwNDFiZTE1MjUyYjI5ZWI1MjFlYmIxMzc0YmFkOOKQnzUzNzA3MDMzNDI5MjM2MTE5NTU6UmVzZXQgY29udHJhc3RgLFtbMSwiZ2VuZXJhbCJdLFsxLCJzZWN0aW9uLXRpdGxlIl0sWzEsImNvbnRyb2wtcm93IiwieC1heGlzLXR5cGUiXSxbImlkIiwieC1heGlzLXR5cGUtbGFiZWwiLDEsImNvbnRyb2wtbmFtZSJdLFszLCJ2YWx1ZSIsIm9wdGlvbnMiLCJzZWxlY3Rpb25DaGFuZ2UiXSxbMSwic2NhbGFycyJdLFsxLCJjb250cm9sLXJvdyIsInNjYWxhcnMtc21vb3RoaW5nIl0sWyJpZCIsInNjYWxhcnMtc21vb3RoaW5nLWxhYmVsIiwxLCJjb250cm9sLW5hbWUiXSxbMSwic2xpZGVyLXJvdyJdLFsiYXJpYS1sYWJlbGxlZGJ5Iiwic2NhbGFycy1zbW9vdGhpbmctbGFiZWwiLCJjb2xvciIsInByaW1hcnkiLDMsIm1heCIsIm1pbiIsInN0ZXAiLCJ2YWx1ZSIsInRodW1iTGFiZWwiLCJpbnB1dCJdLFsiYXJpYS1sYWJlbGxlZGJ5Iiwic2NhbGFycy1zbW9vdGhpbmctbGFiZWwiLCJ0eXBlIiwibnVtYmVyIiwibWluIiwiMCIsInN0ZXAiLCIwLjAwMSIsMSwic2xpZGVyLWlucHV0IiwzLCJtYXgiLCJ2YWx1ZSIsImlucHV0Il0sWzEsImNvbnRyb2wtcm93IiwidG9vbHRpcC1zb3J0Il0sWzEsImNvbnRyb2wtbmFtZSJdLFsxLCJjb250cm9sLXJvdyIsInNjYWxhcnMtaWdub3JlLW91dGxpZXJzIl0sWzMsImNoZWNrZWQiLCJjaGFuZ2UiXSxbMSwiY29udHJvbC1yb3ciLCJzY2FsYXJzLXBhcnRpdGlvbi14Il0sWyJzdmdJY29uIiwiaGVscF9vdXRsaW5lXzI0cHgiLCJ0aXRsZSIsIk5vbi1tb25vdG9uaWMgc3RlcHMgY2FuIG9jY3VyIHdoZW4gcmV1c2luZyBhIGxvZ2RpciB3aXRoIG11bHRpcGxlIHN1bW1hcnkgd3JpdGVycyBhbmQgb3ZlcmxhcHBpbmcgc3RlcHMuIExpbmUgY2hhcnRzLCB3aXRob3V0IHRoaXMgb3B0aW9uIGVuYWJsZWQsIGNhbiBhcHBlYXIgemlnIHphZ2dlZC4gVGhpcyBpcyBjb21tb24gd2hlbiByZXN0YXJ0aW5nIGZyb20gYSBjaGVja3BvaW50LlxuXG5XaGVuIGVuYWJsZWQsIGEgbm9uLW1vbm90b25pYyB0aW1lIHNlcmllcyBjb21wb3NlZCBvZiBOIG1vbm90b25pYyBwaWVjZXMgd2lsbCBiZSBzaG93biBhcyBOIG1vbm90b25pYyBsaW5lcy4iLDEsImluZm8iXSxbMSwiSGlzdG9ncmFtcyJdLFsxLCJjb250cm9sLXJvdyIsImhpc3RvZ3JhbS1tb2RlIl0sWyJjbGFzcyIsImltYWdlIiw0LCJuZ0lmIl0sWzEsImltYWdlIl0sWzEsImNvbnRyb2wtcm93IiwiaW1hZ2UtYnJpZ2h0bmVzcyJdLFsiaWQiLCJpbWFnZS1icmlnaHRuZXNzLWxhYmVsIiwxLCJjb250cm9sLW5hbWUiXSxbImFyaWEtbGFiZWxsZWRieSIsImltYWdlLWJyaWdodG5lc3MtbGFiZWwiLCJjb2xvciIsInByaW1hcnkiLDMsIm1heCIsIm1pbiIsInN0ZXAiLCJ2YWx1ZSIsInRodW1iTGFiZWwiLCJkaXNwbGF5V2l0aCIsImlucHV0Il0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIix0LCJ0aXRsZSIsIlJlc2V0IGJyaWdodG5lc3MiLDEsInJlc2V0LWJ1dHRvbiIsMywiY2xpY2siXSxbInN2Z0ljb24iLCJzZXR0aW5nc19iYWNrdXBfcmVzdG9yZV8yNHB4Il0sWzEsImNvbnRyb2wtcm93IiwiaW1hZ2UtY29udHJhc3QiXSxbImlkIiwiaW1hZ2UtY29uc3RyYXN0LWxhYmVsIiwxLCJjb250cm9sLW5hbWUiXSxbImFyaWEtbGFiZWxsZWRieSIsImltYWdlLWNvbnN0cmFzdC1sYWJlbCIsImNvbG9yIiwicHJpbWFyeSIsMywibWF4IiwibWluIiwic3RlcCIsInZhbHVlIiwidGh1bWJMYWJlbCIsImRpc3BsYXlXaXRoIiwiaW5wdXQiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLGUsInRpdGxlIiwiUmVzZXQgY29udHJhc3QiLDEsInJlc2V0LWJ1dHRvbiIsMywiY2xpY2siXSxbMSwiY29udHJvbC1yb3ciLCJpbWFnZS1zaG93LWFjdHVhbC1zaXplIl1dfSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoT3UoMCwic2VjdGlvbiIsMCksT3UoMSwiaDMiLDEpLE1mKDIsIkdlbmVyYWwiKSxQdSgpLE91KDMsImRpdiIsMiksT3UoNCwiZGl2IiwzKSxNZig1LCJIb3Jpem9udGFsIEF4aXMiKSxQdSgpLE91KDYsInRiLWRyb3Bkb3duIiw0KSxOdSgic2VsZWN0aW9uQ2hhbmdlIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi54QXhpc1R5cGVDaGFuZ2VkLmVtaXQoZSl9KSksUHUoKSxQdSgpLFB1KCksT3UoNywic2VjdGlvbiIsNSksT3UoOCwiaDMiLDEpLE1mKDksIlNjYWxhcnMiKSxQdSgpLE91KDEwLCJkaXYiLDYpLE91KDExLCJkaXYiLDcpLE1mKDEyLCJTbW9vdGhpbmciKSxQdSgpLE91KDEzLCJkaXYiLDgpLE91KDE0LCJtYXQtc2xpZGVyIiw5KSxOdSgiaW5wdXQiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLnNjYWxhclNtb290aGluZ0NvbnRyb2xDaGFuZ2VkJC5lbWl0KGUudmFsdWUpfSkpLFB1KCksT3UoMTUsImlucHV0IiwxMCksTnUoImlucHV0IiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vblNjYWxhclNtb290aGluZ0lucHV0KGUpfSkpLFB1KCksUHUoKSxQdSgpLE91KDE2LCJkaXYiLDExKSxPdSgxNywiZGl2IiwxMiksTWYoMTgsIlRvb2x0aXAgc29ydGluZyBtZXRob2QiKSxQdSgpLE91KDE5LCJ0Yi1kcm9wZG93biIsNCksTnUoInNlbGVjdGlvbkNoYW5nZSIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4udG9vbHRpcFNvcnRDaGFuZ2VkLmVtaXQoZSl9KSksUHUoKSxQdSgpLE91KDIwLCJkaXYiLDEzKSxPdSgyMSwibWF0LWNoZWNrYm94IiwxNCksTnUoImNoYW5nZSIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4uaWdub3JlT3V0bGllcnNDaGFuZ2VkLmVtaXQoZS5jaGVja2VkKX0pKSxNZigyMiwiSWdub3JlIG91dGxpZXJzIGluIGNoYXJ0IHNjYWxpbmciKSxQdSgpLFB1KCksT3UoMjMsImRpdiIsMTUpLE91KDI0LCJtYXQtY2hlY2tib3giLDE0KSxOdSgiY2hhbmdlIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLnNjYWxhclBhcnRpdGlvblhUb2dnbGVkLmVtaXQoKX0pKSxNZigyNSwiUGFydGl0aW9uIG5vbi1tb25vdG9uaWMgWCBheGlzIiksUHUoKSx3dSgyNiwibWF0LWljb24iLDE2KSxQdSgpLFB1KCksT3UoMjcsInNlY3Rpb24iLDE3KSxPdSgyOCwiaDMiLDEpLE1mKDI5LCJIaXN0b2dyYW1zIiksUHUoKSxPdSgzMCwiZGl2IiwxOCksT3UoMzEsImRpdiIsMTIpLE1mKDMyLCJNb2RlIiksUHUoKSxPdSgzMywidGItZHJvcGRvd24iLDQpLE51KCJzZWxlY3Rpb25DaGFuZ2UiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLmhpc3RvZ3JhbU1vZGVDaGFuZ2VkLmVtaXQoZSl9KSksUHUoKSxQdSgpLFB1KCksV20oMzQsU2d0LDIwLDEzLCJzZWN0aW9uIiwxOSkpLDImZSYmKEpjKDYpLHZ1KCJ2YWx1ZSIsbi54QXhpc1R5cGUpKCJvcHRpb25zIixuLlhBeGlzVHlwZURyb3Bkb3duT3B0aW9ucyksSmMoOCksdnUoIm1heCIsbi5NQVhfU01PT1RISU5HX1NMSURFUl9WQUxVRSkoIm1pbiIsMCkoInN0ZXAiLC4wMSkoInZhbHVlIixuLnNjYWxhclNtb290aGluZykoInRodW1iTGFiZWwiLCEwKSxKYygxKSx2dSgibWF4IixuLk1BWF9TTU9PVEhJTkdfVkFMVUUpKCJ2YWx1ZSIsbi5zY2FsYXJTbW9vdGhpbmcpLEpjKDQpLHZ1KCJ2YWx1ZSIsbi50b29sdGlwU29ydCkoIm9wdGlvbnMiLG4uVG9vbHRpcFNvcnREcm9wZG93bk9wdGlvbnMpLEpjKDIpLHZ1KCJjaGVja2VkIixuLmlnbm9yZU91dGxpZXJzKSxKYygzKSx2dSgiY2hlY2tlZCIsbi5zY2FsYXJQYXJ0aXRpb25YKSxKYyg5KSx2dSgidmFsdWUiLG4uaGlzdG9ncmFtTW9kZSkoIm9wdGlvbnMiLG4uSGlzdG9ncmFtTW9kZURyb3Bkb3duT3B0aW9ucyksSmMoMSksdnUoIm5nSWYiLG4uaXNJbWFnZVN1cHBvcnRFbmFibGVkKSl9LGRpcmVjdGl2ZXM6W2tndCx2WCx1WSxjRyxhdixOSF0sc3R5bGVzOlsnLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEycHg7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtYmFkZ2Utc21hbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6OXB4fS5tYXQtYmFkZ2UtbGFyZ2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweH0ubWF0LWgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1oZWFkbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMjRweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNnB4LzI4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNXB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC44MykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtaDZbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuNjcpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWJvZHktc3Ryb25nW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjAgMCAxMnB4fS5tYXQtc21hbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDEycHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjMwMCAxMTJweC8xMTJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDVlbTttYXJnaW46MCAwIDU2cHh9Lm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDU2cHgvNTZweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDJlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDQ1cHgvNDhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDA1ZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAzNHB4LzQwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDY0cHh9Lm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcmFpc2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0cm9rZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mbGF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmFiW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1taW5pLWZhYltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWJ1dHRvbi10b2dnbGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhcmQtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjIwcHh9Lm1hdC1jYXJkLXN1YnRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2hlY2tib3hbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNoZWNrYm94LWxheW91dFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoZWNrYm94LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoyNHB4fS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtdHJhaWxpbmctaWNvbi5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtcmVtb3ZlLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MThweH0ubWF0LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1oZWFkZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2VsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9vdGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2FsZW5kYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhbGVuZGFyLWJvZHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxM3B4fS5tYXQtY2FsZW5kYXItYm9keS1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FsZW5kYXItcGVyaW9kLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo0MDB9Lm1hdC1kaWFsb2ctdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjEyNTtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE1MCU7bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS41ZW07d2lkdGg6MS41ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNWVtIDA7Ym9yZGVyLXRvcDouODQzNzVlbSBzb2xpZCB0cmFuc3BhcmVudH0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6LTAuODQzNzVlbTtwYWRkaW5nLXRvcDouODQzNzVlbX0ubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo3NSU7bWFyZ2luLXRvcDouNjY2NjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjc5MTY2NjY2NjdlbSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNDM3NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMnB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjNlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM1MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjI4MTI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDouNTQxNjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjY2NjY2NjY2NjdlbSl9QG1lZGlhIHByaW50ey5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMmVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMWVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTJlbSkgc2NhbGUoMC43NSl9fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi4yNWVtIDAgLjc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMDkzNzVlbTttYXJnaW4tdG9wOi0wLjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjFlbSAwIDFlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS44NDM3NWVtO21hcmdpbi10b3A6LTAuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9aW5wdXQubWF0LWlucHV0LWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LTAuMDYyNWVtfS5tYXQtbWVudS1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtcGFnaW5hdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweH0ubWF0LXJhZGlvLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW19Lm1hdC1zbGlkZS10b2dnbGUtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdGVwcGVyLWhvcml6b250YWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXN0ZXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXN0ZXAtc3ViLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDpub3JtYWx9Lm1hdC1zdGVwLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LXN0ZXAtbGFiZWwtc2VsZWN0ZWRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRhYi1ncm91cFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdGFiLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10YWItbGlua1tfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowfS5tYXQtdG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB4O3BhZGRpbmctdG9wOjZweDtwYWRkaW5nLWJvdHRvbTo2cHh9Lm1hdC10b29sdGlwLWhhbmRzZXRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9Lm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE2cHh9Lm1hdC1vcHRncm91cC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1zaW1wbGUtc25hY2tiYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweH0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb25bX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjE7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo1MDB9Lm1hdC10cmVlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW5lc3RlZC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjQwMDtmb250LXNpemU6MTRweH0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmVtcHR5KXt0cmFuc2Zvcm06dHJhbnNsYXRlWigwKX0ubWF0LXJpcHBsZS5tYXQtcmlwcGxlLXVuYm91bmRlZFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItcmFkaXVzOjUwJTtwb2ludGVyLWV2ZW50czpub25lO3RyYW5zaXRpb246b3BhY2l0eSx0cmFuc2Zvcm0gMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpO3RyYW5zZm9ybTpzY2FsZSgwKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6bm9uZX0uY2RrLXZpc3VhbGx5LWhpZGRlbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjA7Y2xpcDpyZWN0KDAgMCAwIDApO2hlaWdodDoxcHg7bWFyZ2luOi0xcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwO291dGxpbmU6MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb2ludGVyLWV2ZW50czpub25lO3RvcDowO2xlZnQ6MDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTplbXB0eXtkaXNwbGF5Om5vbmV9LmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1wYW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czphdXRvO2JveC1zaXppbmc6Ym9yZGVyLWJveDt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O21heC13aWR0aDoxMDAlO21heC1oZWlnaHQ6MTAwJX0uY2RrLW92ZXJsYXktYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO3otaW5kZXg6MTAwMDtwb2ludGVyLWV2ZW50czphdXRvOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDt0cmFuc2l0aW9uOm9wYWNpdHkgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSk7b3BhY2l0eTowfS5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjF9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAuY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTouNn0uY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4zMil9LmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MH0uY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWluLXdpZHRoOjFweDttaW4taGVpZ2h0OjFweH0uY2RrLWdsb2JhbC1zY3JvbGxibG9ja1tfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7d2lkdGg6MTAwJTtvdmVyZmxvdy15OnNjcm9sbH1Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0e31Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZHt9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbHthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQgMHMgMW1zfS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOm5vdCg6LXdlYmtpdC1hdXRvZmlsbCl7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCAwcyAxbXN9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplW19uZ2NvbnRlbnQtJUNPTVAlXXtyZXNpemU6bm9uZX10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDphdXRvICFpbXBvcnRhbnQ7b3ZlcmZsb3c6aGlkZGVuICFpbXBvcnRhbnR9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZy1maXJlZm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDowICFpbXBvcnRhbnR9Lm1hdC1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtbWRjLWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9W19uZ2hvc3QtJUNPTVAlXXtjb2xvcjojNjE2MTYxO2ZvbnQtc2l6ZToxMnB4fWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1zZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmViO3BhZGRpbmc6MTZweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICBzZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgc2VjdGlvbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX0uc2VjdGlvbi10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzIxMjEyMTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Zm9udC13ZWlnaHQ6NTAwO2ZvbnQtc2l6ZToxM3B4O2xpbmUtaGVpZ2h0Om5vcm1hbDttYXJnaW46MCAwIDEycHggMH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuc2VjdGlvbi10aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5zZWN0aW9uLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojZmZmfXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVdICAgLmNvbnRyb2wtcm93W19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhc3QtY2hpbGQpe21hcmdpbi1ib3R0b206MTJweH0uY29udHJvbC1uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tYm90dG9tOjhweH0uc2xpZGVyLXJvd1tfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6MjhweH0uc2xpZGVyLXJvd1tfbmdjb250ZW50LSVDT01QJV0gICAucmVzZXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tbGVmdDo2cHh9LnNsaWRlci1yb3dbX25nY29udGVudC0lQ09NUCVdICAgLnNsaWRlci1pbnB1dFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjppbmhlcml0O2JvcmRlcjoxcHggc29saWQgIzhlOThhMztib3JkZXItcmFkaXVzOjJweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6aW5oZXJpdDtoZWlnaHQ6MTAwJTttYXJnaW4tbGVmdDoxMnB4O3BhZGRpbmc6MCA0cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnNsaWRlci1yb3dbX25nY29udGVudC0lQ09NUCVdICAgLnNsaWRlci1pbnB1dFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5zbGlkZXItcm93W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zbGlkZXItaW5wdXRbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1jb2xvcjojNDI1MDY2fS5zY2FsYXJzLXNtb290aGluZ1tfbmdjb250ZW50LSVDT01QJV0gICAuc2xpZGVyLWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4Om5vbmU7d2lkdGg6NWVtfS5zY2FsYXJzLXBhcnRpdGlvbi14W19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4fS5zY2FsYXJzLXBhcnRpdGlvbi14W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5pbmZvW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTVweDttYXJnaW4tbGVmdDo1cHg7d2lkdGg6MTVweH1tYXQtc2xpZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjE7bWFyZ2luLWxlZnQ6LThweDttYXJnaW4tcmlnaHQ6LThweH10Yi1kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpibG9ja30nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoRGd0LFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6Im1ldHJpY3MtZGFzaGJvYXJkLXNldHRpbmdzLWNvbXBvbmVudCIsdGVtcGxhdGVVcmw6InNldHRpbmdzX3ZpZXdfY29tcG9uZW50Lm5nLmh0bWwiLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2gsc3R5bGVVcmxzOlsic2V0dGluZ3Nfdmlld19jb21wb25lbnQuY3NzIl19XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbQl9dfV19XX0pLHtpc0ltYWdlU3VwcG9ydEVuYWJsZWQ6W3t0eXBlOnlffV0sdG9vbHRpcFNvcnQ6W3t0eXBlOnlffV0sdG9vbHRpcFNvcnRDaGFuZ2VkOlt7dHlwZTpfX31dLGlnbm9yZU91dGxpZXJzOlt7dHlwZTp5X31dLGlnbm9yZU91dGxpZXJzQ2hhbmdlZDpbe3R5cGU6X199XSx4QXhpc1R5cGU6W3t0eXBlOnlffV0seEF4aXNUeXBlQ2hhbmdlZDpbe3R5cGU6X199XSxoaXN0b2dyYW1Nb2RlOlt7dHlwZTp5X31dLGhpc3RvZ3JhbU1vZGVDaGFuZ2VkOlt7dHlwZTpfX31dLHNjYWxhclNtb290aGluZzpbe3R5cGU6eV99XSxzY2FsYXJTbW9vdGhpbmdDaGFuZ2VkOlt7dHlwZTpfX31dLHNjYWxhclBhcnRpdGlvblg6W3t0eXBlOnlffV0sc2NhbGFyUGFydGl0aW9uWFRvZ2dsZWQ6W3t0eXBlOl9ffV0saW1hZ2VCcmlnaHRuZXNzSW5NaWxsaTpbe3R5cGU6eV99XSxpbWFnZUJyaWdodG5lc3NJbk1pbGxpQ2hhbmdlZDpbe3R5cGU6X199XSxpbWFnZUJyaWdodG5lc3NSZXNldDpbe3R5cGU6X199XSxpbWFnZUNvbnRyYXN0SW5NaWxsaTpbe3R5cGU6eV99XSxpbWFnZUNvbnRyYXN0SW5NaWxsaUNoYW5nZWQ6W3t0eXBlOl9ffV0saW1hZ2VDb250cmFzdFJlc2V0Olt7dHlwZTpfX31dLGltYWdlU2hvd0FjdHVhbFNpemU6W3t0eXBlOnlffV0saW1hZ2VTaG93QWN0dWFsU2l6ZUNoYW5nZWQ6W3t0eXBlOl9ffV19KTtjbGFzcyBFZ3R7Y29uc3RydWN0b3IodCl7dGhpcy5zdG9yZT10LHRoaXMuaXNJbWFnZVN1cHBvcnRFbmFibGVkJD10aGlzLnN0b3JlLnNlbGVjdChiRSkucGlwZShHdChCb29sZWFuKSxOZSgxKSxrbih0aGlzLnN0b3JlLnNlbGVjdChrRSkpLGh0KCgoWyx0XSk9PnQpKSksdGhpcy50b29sdGlwU29ydCQ9dGhpcy5zdG9yZS5zZWxlY3QoQlQpLHRoaXMuaWdub3JlT3V0bGllcnMkPXRoaXMuc3RvcmUuc2VsZWN0KFZUKSx0aGlzLnhBeGlzVHlwZSQ9dGhpcy5zdG9yZS5zZWxlY3QoalQpLHRoaXMuaGlzdG9ncmFtTW9kZSQ9dGhpcy5zdG9yZS5zZWxlY3QoVVQpLHRoaXMuc2NhbGFyU21vb3RoaW5nJD10aGlzLnN0b3JlLnNlbGVjdChXVCksdGhpcy5zY2FsYXJQYXJ0aXRpb25YJD10aGlzLnN0b3JlLnNlbGVjdChHVCksdGhpcy5pbWFnZUJyaWdodG5lc3NJbk1pbGxpJD10aGlzLnN0b3JlLnNlbGVjdChZVCksdGhpcy5pbWFnZUNvbnRyYXN0SW5NaWxsaSQ9dGhpcy5zdG9yZS5zZWxlY3QocVQpLHRoaXMuaW1hZ2VTaG93QWN0dWFsU2l6ZSQ9dGhpcy5zdG9yZS5zZWxlY3QoWlQpfW9uVG9vbHRpcFNvcnRDaGFuZ2VkKHQpe3RoaXMuc3RvcmUuZGlzcGF0Y2goV0ooe3NvcnQ6dH0pKX1vbklnbm9yZU91dGxpZXJzQ2hhbmdlZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goR0ooKSl9b25YQXhpc1R5cGVDaGFuZ2VkKHQpe3RoaXMuc3RvcmUuZGlzcGF0Y2goWUooe3hBeGlzVHlwZTp0fSkpfW9uSGlzdG9ncmFtTW9kZUNoYW5nZWQodCl7dGhpcy5zdG9yZS5kaXNwYXRjaCh0USh7aGlzdG9ncmFtTW9kZTp0fSkpfW9uU2NhbGFyU21vb3RoaW5nQ2hhbmdlZCh0KXt0aGlzLnN0b3JlLmRpc3BhdGNoKHFKKHtzbW9vdGhpbmc6dH0pKX1vblNjYWxhclBhcnRpdGlvblhUb2dnbGVkKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChaSigpKX1vbkltYWdlQnJpZ2h0bmVzc0luTWlsbGlDaGFuZ2VkKHQpe3RoaXMuc3RvcmUuZGlzcGF0Y2goWEooe2JyaWdodG5lc3NJbk1pbGxpOnR9KSl9b25JbWFnZUJyaWdodG5lc3NSZXNldCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goSkooKSl9b25JbWFnZUNvbnRyYXN0UmVzZXQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKFFKKCkpfW9uSW1hZ2VDb250cmFzdEluTWlsbGlDaGFuZ2VkKHQpe3RoaXMuc3RvcmUuZGlzcGF0Y2goS0ooe2NvbnRyYXN0SW5NaWxsaTp0fSkpfW9uSW1hZ2VTaG93QWN0dWFsU2l6ZUNoYW5nZWQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKCRKKCkpfX1FZ3QuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEVndCkoTXUoRWspKX0sRWd0Lsm1Y21wPVVvKHt0eXBlOkVndCxzZWxlY3RvcnM6W1sibWV0cmljcy1kYXNoYm9hcmQtc2V0dGluZ3MiXV0sZGVjbHM6MTEsdmFyczozMCxjb25zdHM6W1szLCJpc0ltYWdlU3VwcG9ydEVuYWJsZWQiLCJ0b29sdGlwU29ydCIsImlnbm9yZU91dGxpZXJzIiwieEF4aXNUeXBlIiwiaGlzdG9ncmFtTW9kZSIsInNjYWxhclNtb290aGluZyIsInNjYWxhclBhcnRpdGlvblgiLCJpbWFnZUJyaWdodG5lc3NJbk1pbGxpIiwiaW1hZ2VDb250cmFzdEluTWlsbGkiLCJpbWFnZVNob3dBY3R1YWxTaXplIiwidG9vbHRpcFNvcnRDaGFuZ2VkIiwiaWdub3JlT3V0bGllcnNDaGFuZ2VkIiwieEF4aXNUeXBlQ2hhbmdlZCIsImhpc3RvZ3JhbU1vZGVDaGFuZ2VkIiwic2NhbGFyU21vb3RoaW5nQ2hhbmdlZCIsInNjYWxhclBhcnRpdGlvblhUb2dnbGVkIiwiaW1hZ2VCcmlnaHRuZXNzSW5NaWxsaUNoYW5nZWQiLCJpbWFnZUJyaWdodG5lc3NSZXNldCIsImltYWdlQ29udHJhc3RJbk1pbGxpQ2hhbmdlZCIsImltYWdlQ29udHJhc3RSZXNldCIsImltYWdlU2hvd0FjdHVhbFNpemVDaGFuZ2VkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihPdSgwLCJtZXRyaWNzLWRhc2hib2FyZC1zZXR0aW5ncy1jb21wb25lbnQiLDApLE51KCJ0b29sdGlwU29ydENoYW5nZWQiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLm9uVG9vbHRpcFNvcnRDaGFuZ2VkKGUpfSkpKCJpZ25vcmVPdXRsaWVyc0NoYW5nZWQiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub25JZ25vcmVPdXRsaWVyc0NoYW5nZWQoKX0pKSgieEF4aXNUeXBlQ2hhbmdlZCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25YQXhpc1R5cGVDaGFuZ2VkKGUpfSkpKCJoaXN0b2dyYW1Nb2RlQ2hhbmdlZCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25IaXN0b2dyYW1Nb2RlQ2hhbmdlZChlKX0pKSgic2NhbGFyU21vb3RoaW5nQ2hhbmdlZCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25TY2FsYXJTbW9vdGhpbmdDaGFuZ2VkKGUpfSkpKCJzY2FsYXJQYXJ0aXRpb25YVG9nZ2xlZCIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vblNjYWxhclBhcnRpdGlvblhUb2dnbGVkKCl9KSkoImltYWdlQnJpZ2h0bmVzc0luTWlsbGlDaGFuZ2VkIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vbkltYWdlQnJpZ2h0bmVzc0luTWlsbGlDaGFuZ2VkKGUpfSkpKCJpbWFnZUJyaWdodG5lc3NSZXNldCIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vbkltYWdlQnJpZ2h0bmVzc1Jlc2V0KCl9KSkoImltYWdlQ29udHJhc3RJbk1pbGxpQ2hhbmdlZCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25JbWFnZUNvbnRyYXN0SW5NaWxsaUNoYW5nZWQoZSl9KSkoImltYWdlQ29udHJhc3RSZXNldCIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vbkltYWdlQ29udHJhc3RSZXNldCgpfSkpKCJpbWFnZVNob3dBY3R1YWxTaXplQ2hhbmdlZCIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vbkltYWdlU2hvd0FjdHVhbFNpemVDaGFuZ2VkKCl9KSksT2IoMSwiYXN5bmMiKSxPYigyLCJhc3luYyIpLE9iKDMsImFzeW5jIiksT2IoNCwiYXN5bmMiKSxPYig1LCJhc3luYyIpLE9iKDYsImFzeW5jIiksT2IoNywiYXN5bmMiKSxPYig4LCJhc3luYyIpLE9iKDksImFzeW5jIiksT2IoMTAsImFzeW5jIiksUHUoKSksMiZlJiZ2dSgiaXNJbWFnZVN1cHBvcnRFbmFibGVkIixQYigxLDEwLG4uaXNJbWFnZVN1cHBvcnRFbmFibGVkJCkpKCJ0b29sdGlwU29ydCIsUGIoMiwxMixuLnRvb2x0aXBTb3J0JCkpKCJpZ25vcmVPdXRsaWVycyIsUGIoMywxNCxuLmlnbm9yZU91dGxpZXJzJCkpKCJ4QXhpc1R5cGUiLFBiKDQsMTYsbi54QXhpc1R5cGUkKSkoImhpc3RvZ3JhbU1vZGUiLFBiKDUsMTgsbi5oaXN0b2dyYW1Nb2RlJCkpKCJzY2FsYXJTbW9vdGhpbmciLFBiKDYsMjAsbi5zY2FsYXJTbW9vdGhpbmckKSkoInNjYWxhclBhcnRpdGlvblgiLFBiKDcsMjIsbi5zY2FsYXJQYXJ0aXRpb25YJCkpKCJpbWFnZUJyaWdodG5lc3NJbk1pbGxpIixQYig4LDI0LG4uaW1hZ2VCcmlnaHRuZXNzSW5NaWxsaSQpKSgiaW1hZ2VDb250cmFzdEluTWlsbGkiLFBiKDksMjYsbi5pbWFnZUNvbnRyYXN0SW5NaWxsaSQpKSgiaW1hZ2VTaG93QWN0dWFsU2l6ZSIsUGIoMTAsMjgsbi5pbWFnZVNob3dBY3R1YWxTaXplJCkpfSxkaXJlY3RpdmVzOltEZ3RdLHBpcGVzOltNdl0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihFZ3QsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoibWV0cmljcy1kYXNoYm9hcmQtc2V0dGluZ3MiLHRlbXBsYXRlOidcbiAgICA8bWV0cmljcy1kYXNoYm9hcmQtc2V0dGluZ3MtY29tcG9uZW50XG4gICAgICBbaXNJbWFnZVN1cHBvcnRFbmFibGVkXT0iaXNJbWFnZVN1cHBvcnRFbmFibGVkJCB8IGFzeW5jIlxuICAgICAgW3Rvb2x0aXBTb3J0XT0idG9vbHRpcFNvcnQkIHwgYXN5bmMiXG4gICAgICAodG9vbHRpcFNvcnRDaGFuZ2VkKT0ib25Ub29sdGlwU29ydENoYW5nZWQoJGV2ZW50KSJcbiAgICAgIFtpZ25vcmVPdXRsaWVyc109Imlnbm9yZU91dGxpZXJzJCB8IGFzeW5jIlxuICAgICAgKGlnbm9yZU91dGxpZXJzQ2hhbmdlZCk9Im9uSWdub3JlT3V0bGllcnNDaGFuZ2VkKCkiXG4gICAgICBbeEF4aXNUeXBlXT0ieEF4aXNUeXBlJCB8IGFzeW5jIlxuICAgICAgKHhBeGlzVHlwZUNoYW5nZWQpPSJvblhBeGlzVHlwZUNoYW5nZWQoJGV2ZW50KSJcbiAgICAgIFtoaXN0b2dyYW1Nb2RlXT0iaGlzdG9ncmFtTW9kZSQgfCBhc3luYyJcbiAgICAgIChoaXN0b2dyYW1Nb2RlQ2hhbmdlZCk9Im9uSGlzdG9ncmFtTW9kZUNoYW5nZWQoJGV2ZW50KSJcbiAgICAgIFtzY2FsYXJTbW9vdGhpbmddPSJzY2FsYXJTbW9vdGhpbmckIHwgYXN5bmMiXG4gICAgICAoc2NhbGFyU21vb3RoaW5nQ2hhbmdlZCk9Im9uU2NhbGFyU21vb3RoaW5nQ2hhbmdlZCgkZXZlbnQpIlxuICAgICAgW3NjYWxhclBhcnRpdGlvblhdPSJzY2FsYXJQYXJ0aXRpb25YJCB8IGFzeW5jIlxuICAgICAgKHNjYWxhclBhcnRpdGlvblhUb2dnbGVkKT0ib25TY2FsYXJQYXJ0aXRpb25YVG9nZ2xlZCgpIlxuICAgICAgW2ltYWdlQnJpZ2h0bmVzc0luTWlsbGldPSJpbWFnZUJyaWdodG5lc3NJbk1pbGxpJCB8IGFzeW5jIlxuICAgICAgKGltYWdlQnJpZ2h0bmVzc0luTWlsbGlDaGFuZ2VkKT0ib25JbWFnZUJyaWdodG5lc3NJbk1pbGxpQ2hhbmdlZCgkZXZlbnQpIlxuICAgICAgKGltYWdlQnJpZ2h0bmVzc1Jlc2V0KT0ib25JbWFnZUJyaWdodG5lc3NSZXNldCgpIlxuICAgICAgW2ltYWdlQ29udHJhc3RJbk1pbGxpXT0iaW1hZ2VDb250cmFzdEluTWlsbGkkIHwgYXN5bmMiXG4gICAgICAoaW1hZ2VDb250cmFzdEluTWlsbGlDaGFuZ2VkKT0ib25JbWFnZUNvbnRyYXN0SW5NaWxsaUNoYW5nZWQoJGV2ZW50KSJcbiAgICAgIChpbWFnZUNvbnRyYXN0UmVzZXQpPSJvbkltYWdlQ29udHJhc3RSZXNldCgpIlxuICAgICAgW2ltYWdlU2hvd0FjdHVhbFNpemVdPSJpbWFnZVNob3dBY3R1YWxTaXplJCB8IGFzeW5jIlxuICAgICAgKGltYWdlU2hvd0FjdHVhbFNpemVDaGFuZ2VkKT0ib25JbWFnZVNob3dBY3R1YWxTaXplQ2hhbmdlZCgpIlxuICAgID5cbiAgICA8L21ldHJpY3MtZGFzaGJvYXJkLXNldHRpbmdzLWNvbXBvbmVudD5cbiAgJyxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6RWt9XX0pLG51bGwpO2NsYXNzIEFndHt9ZnVuY3Rpb24gUmd0KHQsZSl7MSZ0JiZ3dSgwLCJtZXRyaWNzLWZpbHRlcmVkLXZpZXciLDcpLDImdCYmdnUoImNhcmRPYnNlcnZlciIsTHUoKS5jYXJkT2JzZXJ2ZXIpfWZ1bmN0aW9uIFRndCh0LGUpezEmdCYmd3UoMCwibWV0cmljcy1waW5uZWQtdmlldyIsNyksMiZ0JiZ2dSgiY2FyZE9ic2VydmVyIixMdSgpLmNhcmRPYnNlcnZlcil9ZnVuY3Rpb24gTmd0KHQsZSl7aWYoMSZ0KXtjb25zdCB0PUV1KCk7T3UoMCwiZGl2Iiw5KSxPdSgxLCJkaXYiLDEwKSxPdSgyLCJoMiIsMTEpLE1mKDMsIlNldHRpbmdzIiksUHUoKSxPdSg0LCJidXR0b24iLDEyKSxOdSgiY2xpY2siLChmdW5jdGlvbiBlKCl7cmV0dXJuIHJhKHQpLEx1KCkub25DbG9zZVNpZGVwYW5lQnV0dG9uQ2xpY2tlZC5lbWl0KCl9KSksd3UoNSwibWF0LWljb24iLDEzKSxQdSgpLFB1KCksd3UoNiwibWV0cmljcy1kYXNoYm9hcmQtcmlnaHQtcGFuZSIpLFB1KCl9fUFndC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8QWd0KX0sQWd0Lsm1Y21wPVVvKHt0eXBlOkFndCxzZWxlY3RvcnM6W1sibWV0cmljcy1kYXNoYm9hcmQtcmlnaHQtcGFuZSJdXSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiZ3dSgwLCJtZXRyaWNzLWRhc2hib2FyZC1zZXR0aW5ncyIpfSxkaXJlY3RpdmVzOltFZ3RdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoQWd0LFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6Im1ldHJpY3MtZGFzaGJvYXJkLXJpZ2h0LXBhbmUiLHRlbXBsYXRlOiI8bWV0cmljcy1kYXNoYm9hcmQtc2V0dGluZ3M+PC9tZXRyaWNzLWRhc2hib2FyZC1zZXR0aW5ncz4iLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2h9XX1dLG51bGwsbnVsbCk7Y29uc3QgSWd0PWZ1bmN0aW9uKHQpe3JldHVybntjaGVja2VkOnQsInNldHRpbmdzLWJ1dHRvbiI6ITB9fTtjbGFzcyB6Z3R7Y29uc3RydWN0b3IodCl7dGhpcy5ob3N0PXQsdGhpcy5vblNldHRpbmdzQnV0dG9uQ2xpY2tlZD1uZXcgQWIsdGhpcy5vbkNsb3NlU2lkZXBhbmVCdXR0b25DbGlja2VkPW5ldyBBYix0aGlzLmNhcmRPYnNlcnZlcj1uZXcgVDIodGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQsIjYwMHB4IDBweCA2MDBweCAwcHgiKX19emd0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHx6Z3QpKE11KGNoKSl9LHpndC7JtWNtcD1Vbyh7dHlwZTp6Z3Qsc2VsZWN0b3JzOltbIm1ldHJpY3MtbWFpbi12aWV3LWNvbXBvbmVudCJdXSxpbnB1dHM6e3Nob3dGaWx0ZXJlZFZpZXc6InNob3dGaWx0ZXJlZFZpZXciLGlzU2lkZXBhbmVPcGVuOiJpc1NpZGVwYW5lT3BlbiJ9LG91dHB1dHM6e29uU2V0dGluZ3NCdXR0b25DbGlja2VkOiJvblNldHRpbmdzQnV0dG9uQ2xpY2tlZCIsb25DbG9zZVNpZGVwYW5lQnV0dG9uQ2xpY2tlZDoib25DbG9zZVNpZGVwYW5lQnV0dG9uQ2xpY2tlZCJ9LGRlY2xzOjEyLHZhcnM6MTAsY29uc3RzOmZ1bmN0aW9uKCl7bGV0IHQsZTtyZXR1cm4gdD0idW5kZWZpbmVkIiE9dHlwZW9mIG5nSTE4bkNsb3N1cmVNb2RlJiZuZ0kxOG5DbG9zdXJlTW9kZT9nb29nLmdldE1zZygiVG9nZ2xlIHNldHRpbmdzIHNpZGUgcGFuZSIpOiRsb2NhbGl6ZWA6TGFiZWwgb24gYSB0b29sYmFyIGJ1dHRvbiB0byB0b2dnbGUgdGhlIHNldHRpbmdzIHNpZGUgcGFuZS7ikJ9kMzUxNmRiNmJiZTY4NjBhNTViZWFiNjZlNDk2OWRhYzYyNWI4ZDcy4pCfNzY1OTI4NTQ0NTU4MDgzODkyNTpUb2dnbGUgc2V0dGluZ3Mgc2lkZSBwYW5lYCxlPSJ1bmRlZmluZWQiIT10eXBlb2YgbmdJMThuQ2xvc3VyZU1vZGUmJm5nSTE4bkNsb3N1cmVNb2RlP2dvb2cuZ2V0TXNnKCJDbG9zZSBzaWRlIHBhbmUiKTokbG9jYWxpemVgOkxhYmVsIG9uIGEgYnV0dG9uIHRvIGNsb3NlIHRoZSBzZXR0aW5ncyBzaWRlIHBhbmUu4pCfMDQ1MjFkYzBiNmE2NWNmNWMzODI5NDRjOWE4YjRiODQ0YTNlOTU5OOKQnzgxNTY3NjY5OTc3NDcxNjU4NzE6Q2xvc2Ugc2lkZSBwYW5lYCxbWzEsInRvb2xiYXIiXSxbMSwicmlnaHQtaXRlbXMiXSxbIm1hdC1zdHJva2VkLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLHQsMywibmdDbGFzcyIsImNsaWNrIl0sWyJzdmdJY29uIiwic2V0dGluZ3NfMjRweCJdLFsxLCJzcGxpdC1jb250ZW50Il0sWyJjZGtTY3JvbGxhYmxlIiwiIiwxLCJtYWluIl0sWzMsImNhcmRPYnNlcnZlciIsNCwibmdJZiJdLFszLCJjYXJkT2JzZXJ2ZXIiXSxbImNsYXNzIiwic2lkZWJhciIsNCwibmdJZiJdLFsxLCJzaWRlYmFyIl0sWzEsImhlYWRlciJdLFsxLCJ0aXRsZSJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsZSwzLCJjbGljayJdLFsic3ZnSWNvbiIsImNsb3NlXzI0cHgiXV19LHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihPdSgwLCJkaXYiLDApLHd1KDEsIm1ldHJpY3MtdGFnLWZpbHRlciIpLE91KDIsImRpdiIsMSksT3UoMywiYnV0dG9uIiwyKSxOdSgiY2xpY2siLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub25TZXR0aW5nc0J1dHRvbkNsaWNrZWQuZW1pdCgpfSkpLHd1KDQsIm1hdC1pY29uIiwzKSxNZig1LCIgU2V0dGluZ3MgIiksUHUoKSxQdSgpLFB1KCksT3UoNiwiZGl2Iiw0KSxPdSg3LCJkaXYiLDUpLFdtKDgsUmd0LDEsMSwibWV0cmljcy1maWx0ZXJlZC12aWV3Iiw2KSxXbSg5LFRndCwxLDEsIm1ldHJpY3MtcGlubmVkLXZpZXciLDYpLHd1KDEwLCJtZXRyaWNzLWNhcmQtZ3JvdXBzIiw3KSxQdSgpLFdtKDExLE5ndCw3LDAsImRpdiIsOCksUHUoKSksMiZlJiYoSmMoMyksdnUoIm5nQ2xhc3MiLGdiKDgsSWd0LG4uaXNTaWRlcGFuZU9wZW4pKSxObSgiYXJpYS1wcmVzc2VkIixuLmlzU2lkZXBhbmVPcGVuKSxKYyg1KSx2dSgibmdJZiIsbi5zaG93RmlsdGVyZWRWaWV3KSxKYygxKSx2dSgibmdJZiIsIW4uc2hvd0ZpbHRlcmVkVmlldyksSmMoMSksb2YoImRpc3BsYXkiLG4uc2hvd0ZpbHRlcmVkVmlldz8ibm9uZSI6IiIpLHZ1KCJjYXJkT2JzZXJ2ZXIiLG4uY2FyZE9ic2VydmVyKSxKYygxKSx2dSgibmdJZiIsbi5pc1NpZGVwYW5lT3BlbikpfSxkaXJlY3RpdmVzOltXMixOSCx0dixjRyxKSCxhdixoZ3QsQ2d0LFBndCxBZ3RdLHN0eWxlczpbJy5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHh9Lm1hdC1oMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaGVhZGxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTVweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZ1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjA1ZW07bWFyZ2luOjAgMCA1NnB4fS5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAwNWVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXJhaXNlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdHJva2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmxhdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZhYltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbWluaS1mYWJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4fS5tYXQtY2FyZC1zdWJ0aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGVja2JveC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvb3Rlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgdHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIzZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LjU0MTY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2NjY2NjY3ZW0pfUBtZWRpYSBwcmludHsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjJlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouMjVlbSAwIC43NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxZW0gMCAxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMiksIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi0wLjA2MjVlbX0ubWF0LW1lbnUtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci12ZXJ0aWNhbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGFiLWxpbmtbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MH0ubWF0LXRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5Om5vbmV9LmNkay12aXN1YWxseS1oaWRkZW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjZ9LmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV0sIC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3hbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2tbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHt9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7fS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOi13ZWJraXQtYXV0b2ZpbGwpe2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZVtfbmdjb250ZW50LSVDT01QJV17cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fS5tYXQtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfVtfbmdob3N0LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtoZWlnaHQ6MTAwJX0udG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWJlYjtmbGV4Om5vbmU7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtoZWlnaHQ6NDhweDtwYWRkaW5nOjAgMTZweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAudG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC50b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fS50b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1ldHJpY3MtdGFnLWZpbHRlcltfbmdjb250ZW50LSVDT01QJV17ZmxleDoxIDEgMTAwcHh9LnRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgLnJpZ2h0LWl0ZW1zW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItbGVmdDoxcHggc29saWQgI2ViZWJlYjttYXJnaW4tbGVmdDoxNnB4O3BhZGRpbmctbGVmdDoxNnB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC50b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yaWdodC1pdGVtc1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC50b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yaWdodC1pdGVtc1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICM1NTV9LnNwbGl0LWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtvdmVyZmxvdy15OmF1dG87ZmxleDoxfS5tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnNpZGViYXJbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93LXg6aGlkZGVuO292ZXJmbG93LXk6YXV0bzt3aWxsLWNoYW5nZTp0cmFuc2Zvcm07Y29udGFpbjpzdHJpY3R9Lm1haW5bX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2Y1ZjZmNztmbGV4OjEgMTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1ufWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm1haW5bX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzNhM2EzYX0ubWFpbltfbmdjb250ZW50LSVDT01QJV0gICBtZXRyaWNzLWZpbHRlcmVkLXZpZXdbX25nY29udGVudC0lQ09NUCVdLCAubWFpbltfbmdjb250ZW50LSVDT01QJV0gICBtZXRyaWNzLXBpbm5lZC12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmVifWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1ldHJpY3MtZmlsdGVyZWQtdmlld1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1ldHJpY3MtZmlsdGVyZWQtdmlld1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAubWFpbltfbmdjb250ZW50LSVDT01QJV0gICBtZXRyaWNzLXBpbm5lZC12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm1haW5bX25nY29udGVudC0lQ09NUCVdICAgbWV0cmljcy1waW5uZWQtdmlld1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX0uc2lkZWJhcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNlYmViZWI7ZmxleDowIDAgMjUwcHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnNpZGViYXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuc2lkZWJhcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICM1NTV9LnNpZGViYXJbX25nY29udGVudC0lQ09NUCVdICAgLmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWJlYjtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2hlaWdodDo0MnB4O3BhZGRpbmc6MCAxNnB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zaWRlYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuc2lkZWJhcltfbmdjb250ZW50LSVDT01QJV0gICAuaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fS5zaWRlYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLnRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MThweDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6bm9ybWFsO21hcmdpbjowfVtfbmdob3N0LSVDT01QJV0gICAuc2V0dGluZ3MtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxO2Rpc3BsYXk6aW5saW5lLWZsZXh9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNldHRpbmdzLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9W19uZ2hvc3QtJUNPTVAlXSAgIC5zZXR0aW5ncy1idXR0b24uY2hlY2tlZFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZTBlMGUwO2JvcmRlci1jb2xvcjojZTBlMGUwfWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5zZXR0aW5ncy1idXR0b24uY2hlY2tlZFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMjEyMTIxfVtfbmdob3N0LSVDT01QJV0gICAuc2V0dGluZ3MtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLm1hdC1idXR0b24td3JhcHBlcntkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn1bX25naG9zdC0lQ09NUCVdICAgLnNldHRpbmdzLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICBtYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXJpZ2h0OjRweH0nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoemd0LFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6Im1ldHJpY3MtbWFpbi12aWV3LWNvbXBvbmVudCIsdGVtcGxhdGVVcmw6Im1haW5fdmlld19jb21wb25lbnQubmcuaHRtbCIsc3R5bGVVcmxzOlsibWFpbl92aWV3X2NvbXBvbmVudC5jc3MiXSxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Y2h9XX0pLHtzaG93RmlsdGVyZWRWaWV3Olt7dHlwZTp5X31dLGlzU2lkZXBhbmVPcGVuOlt7dHlwZTp5X31dLG9uU2V0dGluZ3NCdXR0b25DbGlja2VkOlt7dHlwZTpfX31dLG9uQ2xvc2VTaWRlcGFuZUJ1dHRvbkNsaWNrZWQ6W3t0eXBlOl9ffV19KTtjbGFzcyBIZ3R7Y29uc3RydWN0b3IodCl7dGhpcy5zdG9yZT10LHRoaXMuaXNTaWRlcGFuZU9wZW49ITAsdGhpcy5zaG93RmlsdGVyZWRWaWV3JD10aGlzLnN0b3JlLnNlbGVjdChYVCkucGlwZShodCgodD0+dC5sZW5ndGg+MCkpKX1vblNldHRpbmdzQnV0dG9uQ2xpY2tlZCgpe3RoaXMuaXNTaWRlcGFuZU9wZW49IXRoaXMuaXNTaWRlcGFuZU9wZW59b25DbG9zZVNpZGVwYW5lQnV0dG9uQ2xpY2tlZCgpe3RoaXMuaXNTaWRlcGFuZU9wZW49ITF9fUhndC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8SGd0KShNdShFaykpfSxIZ3QuybVjbXA9VW8oe3R5cGU6SGd0LHNlbGVjdG9yczpbWyJtZXRyaWNzLW1haW4tdmlldyJdXSxkZWNsczoyLHZhcnM6NCxjb25zdHM6W1szLCJzaG93RmlsdGVyZWRWaWV3IiwiaXNTaWRlcGFuZU9wZW4iLCJvblNldHRpbmdzQnV0dG9uQ2xpY2tlZCIsIm9uQ2xvc2VTaWRlcGFuZUJ1dHRvbkNsaWNrZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKE91KDAsIm1ldHJpY3MtbWFpbi12aWV3LWNvbXBvbmVudCIsMCksTnUoIm9uU2V0dGluZ3NCdXR0b25DbGlja2VkIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uU2V0dGluZ3NCdXR0b25DbGlja2VkKCl9KSkoIm9uQ2xvc2VTaWRlcGFuZUJ1dHRvbkNsaWNrZWQiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub25DbG9zZVNpZGVwYW5lQnV0dG9uQ2xpY2tlZCgpfSkpLE9iKDEsImFzeW5jIiksUHUoKSksMiZlJiZ2dSgic2hvd0ZpbHRlcmVkVmlldyIsUGIoMSwyLG4uc2hvd0ZpbHRlcmVkVmlldyQpKSgiaXNTaWRlcGFuZU9wZW4iLG4uaXNTaWRlcGFuZU9wZW4pfSxkaXJlY3RpdmVzOlt6Z3RdLHBpcGVzOltNdl0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihIZ3QsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoibWV0cmljcy1tYWluLXZpZXciLHRlbXBsYXRlOidcbiAgICA8bWV0cmljcy1tYWluLXZpZXctY29tcG9uZW50XG4gICAgICBbc2hvd0ZpbHRlcmVkVmlld109InNob3dGaWx0ZXJlZFZpZXckIHwgYXN5bmMiXG4gICAgICBbaXNTaWRlcGFuZU9wZW5dPSJpc1NpZGVwYW5lT3BlbiJcbiAgICAgIChvblNldHRpbmdzQnV0dG9uQ2xpY2tlZCk9Im9uU2V0dGluZ3NCdXR0b25DbGlja2VkKCkiXG4gICAgICAob25DbG9zZVNpZGVwYW5lQnV0dG9uQ2xpY2tlZCk9Im9uQ2xvc2VTaWRlcGFuZUJ1dHRvbkNsaWNrZWQoKSJcbiAgICA+PC9tZXRyaWNzLW1haW4tdmlldy1jb21wb25lbnQ+XG4gICcsY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkVrfV19KSxudWxsKTtjbGFzcyBGZ3R7fUZndC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8Rmd0KX0sRmd0Lsm1Y21wPVVvKHt0eXBlOkZndCxzZWxlY3RvcnM6W1sibWV0cmljcy1kYXNoYm9hcmQiXV0sZGVjbHM6Myx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKE91KDAsIm5hdiIpLHd1KDEsInJ1bnMtc2VsZWN0b3IiKSxQdSgpLHd1KDIsIm1ldHJpY3MtbWFpbi12aWV3IikpfSxkaXJlY3RpdmVzOltBMixIZ3RdLHN0eWxlczpbJy5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHh9Lm1hdC1oMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaGVhZGxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTVweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZ1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjA1ZW07bWFyZ2luOjAgMCA1NnB4fS5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAwNWVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXJhaXNlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdHJva2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmxhdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZhYltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbWluaS1mYWJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4fS5tYXQtY2FyZC1zdWJ0aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGVja2JveC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvb3Rlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgdHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIzZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LjU0MTY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2NjY2NjY3ZW0pfUBtZWRpYSBwcmludHsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjJlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouMjVlbSAwIC43NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxZW0gMCAxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMiksIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi0wLjA2MjVlbX0ubWF0LW1lbnUtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci12ZXJ0aWNhbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGFiLWxpbmtbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MH0ubWF0LXRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5Om5vbmV9LmNkay12aXN1YWxseS1oaWRkZW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjZ9LmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV0sIC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3hbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2tbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHt9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7fS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOi13ZWJraXQtYXV0b2ZpbGwpe2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZVtfbmdjb250ZW50LSVDT01QJV17cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fS5tYXQtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfVtfbmdob3N0LSVDT01QJV17ZGlzcGxheTpmbGV4O2hlaWdodDoxMDAlfW5hdltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlci1yaWdodDoxcHggc29saWQgI2ViZWJlYjtmbGV4Om5vbmU7d2lkdGg6MzQwcHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgbmF2W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgbmF2W19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzA7Ym9yZGVyLXJpZ2h0LWNvbG9yOiM1NTV9bWV0cmljcy1tYWluLXZpZXdbX25nY29udGVudC0lQ09NUCVde2ZsZXg6MSAxfSddLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihGZ3QsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoibWV0cmljcy1kYXNoYm9hcmQiLHRlbXBsYXRlOiJcbiAgICA8bmF2PlxuICAgICAgPHJ1bnMtc2VsZWN0b3I+PC9ydW5zLXNlbGVjdG9yPlxuICAgIDwvbmF2PlxuICAgIDxtZXRyaWNzLW1haW4tdmlldz48L21ldHJpY3MtbWFpbi12aWV3PlxuICAiLHN0eWxlVXJsczpbIm1ldHJpY3NfY29udGFpbmVyLmNzcyJdLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2h9XX1dLG51bGwsbnVsbCk7Y2xhc3MgTGd0e31MZ3QuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fExndCl9LExndC7JtW1vZD1abyh7dHlwZTpMZ3R9KSxMZ3QuybVpbmo9Y28oe2ltcG9ydHM6W1tCdixmMSxkR11dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhMZ3Qse2RlY2xhcmF0aW9uczpbZzFdLGltcG9ydHM6W0J2LGYxLGRHXSxleHBvcnRzOltnMV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKExndCxbe3R5cGU6a18sYXJnczpbe2RlY2xhcmF0aW9uczpbZzFdLGV4cG9ydHM6W2cxXSxpbXBvcnRzOltCdixmMSxkR119XX1dLG51bGwsbnVsbCk7Y2xhc3MgQmd0e31CZ3QuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEJndCl9LEJndC7JtW1vZD1abyh7dHlwZTpCZ3R9KSxCZ3QuybVpbmo9Y28oe2ltcG9ydHM6W1tCdl1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhCZ3Qse2RlY2xhcmF0aW9uczpbcTFdLGltcG9ydHM6W0J2XSxleHBvcnRzOltxMV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEJndCxbe3R5cGU6a18sYXJnczpbe2ltcG9ydHM6W0J2XSxleHBvcnRzOltxMV0sZGVjbGFyYXRpb25zOltxMV19XX1dLG51bGwsbnVsbCk7Y2xhc3MgVmd0e31WZ3QuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFZndCl9LFZndC7JtW1vZD1abyh7dHlwZTpWZ3R9KSxWZ3QuybVpbmo9Y28oe2ltcG9ydHM6W1t6MyxCdixMZ3QsQ1YsekgseVksV1csQVksZEcsekcsciQsdzEseSQsRzAsQmd0LEhMXV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKFZndCx7ZGVjbGFyYXRpb25zOltOMSxJMSxVMSxXMSxQMixEMl0saW1wb3J0czpbejMsQnYsTGd0LENWLHpILHlZLFdXLEFZLGRHLHpHLHIkLHcxLHkkLEcwLEJndCxITF0sZXhwb3J0czpbRDJdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihWZ3QsW3t0eXBlOmtfLGFyZ3M6W3tpbXBvcnRzOlt6MyxCdixMZ3QsQ1YsekgseVksV1csQVksZEcsekcsciQsdzEseSQsRzAsQmd0LEhMXSxleHBvcnRzOltEMl0sZW50cnlDb21wb25lbnRzOltJMV0sZGVjbGFyYXRpb25zOltOMSxJMSxVMSxXMSxQMixEMl19XX1dLG51bGwsbnVsbCk7Y2xhc3Mgamd0e31qZ3QuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGpndCl9LGpndC7JtW1vZD1abyh7dHlwZTpqZ3R9KSxqZ3QuybVpbmo9Y28oe2ltcG9ydHM6W1tCdixWZ3RdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oamd0LHtkZWNsYXJhdGlvbnM6W0UyLEEyXSxpbXBvcnRzOltCdixWZ3RdLGV4cG9ydHM6W0EyXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoamd0LFt7dHlwZTprXyxhcmdzOlt7aW1wb3J0czpbQnYsVmd0XSxleHBvcnRzOltBMl0sZGVjbGFyYXRpb25zOltFMixBMl19XX1dLG51bGwsbnVsbCk7Y2xhc3MgVWd0e2NvbnN0cnVjdG9yKHQpe3RoaXMub25WaXNpYmlsaXR5Q2hhbmdlPW5ldyBBYix0aGlzLm5nVW5zdWJzY3JpYmUkPW5ldyB4LHRoaXMub25FdmVudCQ9bmV3IHg7Y29uc3QgZT1uZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKHQ9Pnt0aGlzLm9uRXZlbnQkLm5leHQodCl9KSk7ZS5vYnNlcnZlKHQubmF0aXZlRWxlbWVudCksdGhpcy5uZ1Vuc3Vic2NyaWJlJC5zdWJzY3JpYmUoKCgpPT57ZS51bm9ic2VydmUodC5uYXRpdmVFbGVtZW50KX0pKSx0aGlzLm9uRXZlbnQkLnBpcGUodW4odGhpcy5uZ1Vuc3Vic2NyaWJlJCkpLnN1YnNjcmliZSgodD0+e2NvbnN0IGU9dC5zbGljZSgtMSlbMF07dGhpcy5vblZpc2liaWxpdHlDaGFuZ2UuZW1pdCh7dmlzaWJsZTplLmlzSW50ZXJzZWN0aW5nfSl9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLm5nVW5zdWJzY3JpYmUkLm5leHQoKSx0aGlzLm5nVW5zdWJzY3JpYmUkLmNvbXBsZXRlKCl9d2FpdEZvckV2ZW50Rm9yVGVzdE9ubHkoKXtyZXR1cm4gbmV3IFByb21pc2UoKHQ9PnRoaXMub25FdmVudCQucGlwZShOZSgxKSkuc3Vic2NyaWJlKCgoKT0+e3QoKX0pKSkpfX1VZ3QuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFVndCkoTXUoY2gpKX0sVWd0Lsm1ZGlyPUpvKHt0eXBlOlVndCxzZWxlY3RvcnM6W1siIiwib2JzZXJ2ZUludGVyc2VjdGlvbiIsIiJdXSxvdXRwdXRzOntvblZpc2liaWxpdHlDaGFuZ2U6Im9uVmlzaWJpbGl0eUNoYW5nZSJ9fSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihVZ3QsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoiW29ic2VydmVJbnRlcnNlY3Rpb25dIn1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmNofV19KSx7b25WaXNpYmlsaXR5Q2hhbmdlOlt7dHlwZTpfX31dfSk7Y2xhc3MgV2d0e31XZ3QuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFdndCl9LFdndC7JtW1vZD1abyh7dHlwZTpXZ3R9KSxXZ3QuybVpbmo9Y28oe30pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oV2d0LHtkZWNsYXJhdGlvbnM6W1VndF0sZXhwb3J0czpbVWd0XX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoV2d0LFt7dHlwZTprXyxhcmdzOlt7ZXhwb3J0czpbVWd0XSxkZWNsYXJhdGlvbnM6W1VndF19XX1dLG51bGwsbnVsbCk7Y29uc3QgR2d0PVsibWFpbiJdLFlndD1bInhBeGlzIl0scWd0PVsieUF4aXMiXSxaZ3Q9WyJjb250ZW50Il0sWGd0PVsiaGlzdG9ncmFtcyJdO2Z1bmN0aW9uIEtndCh0LGUpe2lmKDEmdCYmKEhhKCksT3UoMCwiZyIpLE91KDEsInRleHQiKSxNZigyKSxQdSgpLFB1KCkpLDImdCl7Y29uc3QgdD1MdSgpO05tKCJ0cmFuc2Zvcm0iLHQuZ2V0Q3NzVHJhbnNsYXRlKHQudG9vbHRpcERhdGEueEF4aXMucG9zaXRpb24sOSkpLEpjKDIpLHZmKHQudG9vbHRpcERhdGEueEF4aXMubGFiZWwpfX1mdW5jdGlvbiBKZ3QodCxlKXtpZigxJnQmJihIYSgpLE91KDAsImciKSxPdSgxLCJ0ZXh0IiksTWYoMiksUHUoKSxQdSgpKSwyJnQpe2NvbnN0IHQ9THUoKTtObSgidHJhbnNmb3JtIix0LmdldEdyb3VwVHJhbnNmb3JtKHQudG9vbHRpcERhdGEuY2xvc2VzdERhdHVtKSksSmMoMSksTm0oInkiLHQudG9vbHRpcERhdGEueUF4aXMucG9zaXRpb24pLEpjKDEpLHhmKCIgIix0LnRvb2x0aXBEYXRhLnlBeGlzLmxhYmVsLCIgIil9fWZ1bmN0aW9uIFFndCh0LGUpe2lmKDEmdCYmKEhhKCksT3UoMCwiZyIpLHd1KDEsImxpbmUiLDE2KSxQdSgpKSwyJnQpe2NvbnN0IHQ9ZS4kaW1wbGljaXQ7Tm0oInRyYW5zZm9ybSIsTHUoKS5nZXRDc3NUcmFuc2xhdGUoMCx0KSl9fWZ1bmN0aW9uICRndCh0LGUpezEmdCYmKEhhKCksd3UoMCwibGluZSIsMjApKX1mdW5jdGlvbiB0aHQodCxlKXtpZigxJnQmJihIYSgpLHd1KDAsImNpcmNsZSIsMjEpKSwyJnQpe2NvbnN0IHQ9THUoKS4kaW1wbGljaXQsZT1MdSgpO05tKCJjeCIsZS5nZXRVaUNvb3JkRnJvbUJpbkZvckNvbnRlbnQoZS5nZXRDbG9zZXN0QmluRnJvbUJpbkNvb3JkaW5hdGUodCxlLnRvb2x0aXBEYXRhLnhQb3NpdGlvbkluQmluQ29vcmQpKS54KSgiY3kiLGUuZ2V0VWlDb29yZEZyb21CaW5Gb3JDb250ZW50KGUuZ2V0Q2xvc2VzdEJpbkZyb21CaW5Db29yZGluYXRlKHQsZS50b29sdGlwRGF0YS54UG9zaXRpb25JbkJpbkNvb3JkKSkueSl9fWZ1bmN0aW9uIGVodCh0LGUpe2lmKDEmdCYmKEhhKCksT3UoMCwiZyIsMTcpLFdtKDEsJGd0LDEsMCwibGluZSIsMTgpLHd1KDIsInBhdGgiKSxXbSgzLHRodCwxLDIsImNpcmNsZSIsMTkpLFB1KCkpLDImdCl7Y29uc3QgdD1lLiRpbXBsaWNpdCxuPUx1KCk7b2YoImNvbG9yIixuLmdldEhpc3RvZ3JhbUZpbGwodCkpLE5tKCJ0cmFuc2Zvcm0iLG4uZ2V0R3JvdXBUcmFuc2Zvcm0odCkpLEpjKDEpLHZ1KCJuZ0lmIixuLm1vZGU9PT1uLkhpc3RvZ3JhbU1vZGUuT0ZGU0VUKSxKYygxKSxObSgiZCIsbi5nZXRIaXN0b2dyYW1QYXRoKHQpKSxKYygxKSx2dSgibmdJZiIsbi50b29sdGlwRGF0YSl9fWZ1bmN0aW9uIG5odCh0LGUpe2lmKDEmdCYmKEhhKCksd3UoMCwiY2lyY2xlIiwyMSkpLDImdCl7Y29uc3QgdD1MdSgyKTtObSgiY3giLHQuZ2V0VWlDb29yZEZyb21CaW5Gb3JDb250ZW50KHQudG9vbHRpcERhdGEuY2xvc2VzdEJpbikueCkoImN5Iix0LmdldFVpQ29vcmRGcm9tQmluRm9yQ29udGVudCh0LnRvb2x0aXBEYXRhLmNsb3Nlc3RCaW4pLnkpfX1mdW5jdGlvbiBvaHQodCxlKXtpZigxJnQmJihIYSgpLE91KDAsImciLDQpLE91KDEsImciKSx3dSgyLCJwYXRoIiksV20oMyxuaHQsMSwyLCJjaXJjbGUiLDE5KSxQdSgpLE91KDQsImciLDIyKSxPdSg1LCJ0ZXh0IiwyMyksTWYoNiksUHUoKSxQdSgpLFB1KCkpLDImdCl7Y29uc3QgdD1MdSgpO0pjKDEpLE5tKCJ0cmFuc2Zvcm0iLHQuZ2V0R3JvdXBUcmFuc2Zvcm0odC50b29sdGlwRGF0YS5jbG9zZXN0RGF0dW0pKSxKYygxKSxObSgiZCIsdC5nZXRIaXN0b2dyYW1QYXRoKHQudG9vbHRpcERhdGEuY2xvc2VzdERhdHVtKSksSmMoMSksdnUoIm5nSWYiLHQudG9vbHRpcERhdGEuY2xvc2VzdEJpbiksSmMoMSksTm0oInRyYW5zZm9ybSIsdC5nZXRDc3NUcmFuc2xhdGUodC50b29sdGlwRGF0YS52YWx1ZS5wb3NpdGlvbi54LHQudG9vbHRpcERhdGEudmFsdWUucG9zaXRpb24ueSkpLEpjKDIpLHZmKHQudG9vbHRpcERhdGEudmFsdWUubGFiZWwpfX1jbGFzcyBpaHR7Y29uc3RydWN0b3IodCl7dGhpcy5jaGFuZ2VEZXRlY3Rvcj10LHRoaXMubW9kZT1URS5PRkZTRVQsdGhpcy50aW1lUHJvcGVydHk9UkUuU1RFUCx0aGlzLkhpc3RvZ3JhbU1vZGU9VEUsdGhpcy50b29sdGlwRGF0YT1udWxsLHRoaXMubmdVbnN1YnNjcmliZT1uZXcgeCx0aGlzLmxheW91dD17aGlzdG9ncmFtSGVpZ2h0OjAsY29udGVudENsaWVudFJlY3Q6e2hlaWdodDowLHdpZHRoOjB9fSx0aGlzLnNjYWxlcz1udWxsLHRoaXMuZm9ybWF0dGVycz17YmluTnVtYmVyOkx0dCgiLjN+cyIpLGNvdW50Okx0dCgiLjNuIiksd2FsbFRpbWU6SmV0KCIlbS8lZCAlWCIpLHN0ZXA6THR0KCIuMGYiKSxyZWxhdGl2ZTp0PT5MdHQoIi4xciIpKHQvMzZlNSkrImgifSx0aGlzLmRvbVZpc2libGU9ITF9bmdPbkNoYW5nZXMoKXt0aGlzLnVwZGF0ZUNoYXJ0SWZWaXNpYmxlKCl9bmdPbkRlc3Ryb3koKXt0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpfW5nQWZ0ZXJWaWV3SW5pdCgpe1Z0KHRoaXMubWFpbi5uYXRpdmVFbGVtZW50LCJtb3VzZW1vdmUiLHtwYXNzaXZlOiEwfSkucGlwZSh1bih0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKHQ9PnRoaXMub25Nb3VzZU1vdmUodCkpKX1nZXRDc3NUcmFuc2xhdGUodCxlKXtyZXR1cm5gdHJhbnNsYXRlKCR7dH0sICR7ZX0pYH1nZXRDbG9zZXN0QmluRnJvbUJpbkNvb3JkaW5hdGUodCxlKXtpZighdC5iaW5zLmxlbmd0aClyZXR1cm57eDowLGR4OjAseTowfTtjb25zdCBuPXQuYmluc1swXSxvPXQuYmlucy5zbGljZSgtMSlbMF07cmV0dXJuIGU8bi54P246ZT49by54K28uZHg/bzp0LmJpbnMuZmluZCgodD0+dC54PD1lJiZlPHQueCt0LmR4KSl9Z2V0VWlDb29yZEZyb21CaW5Gb3JDb250ZW50KHQpe3JldHVybiB0aGlzLnNjYWxlcz97eDp0aGlzLnNjYWxlcy5iaW5TY2FsZShzaHQodCkpLHk6dGhpcy5zY2FsZXMuY291bnRTY2FsZSh0LnkpfTp7eDowLHk6MH19Z2V0SGlzdG9ncmFtUGF0aCh0KXtpZighdGhpcy5zY2FsZXN8fCF0LmJpbnMubGVuZ3RoKXJldHVybiIiO2NvbnN0IGU9dGhpcy5zY2FsZXMuYmluU2NhbGUsbj10aGlzLnNjYWxlcy5jb3VudFNjYWxlLG89dC5iaW5zWzBdLGk9dC5iaW5zLnNsaWNlKC0xKVswXSxhPVtgTSR7ZShzaHQobykpfSwke24oMCl9YF07Zm9yKGNvbnN0IG8gb2YgdC5iaW5zKWEucHVzaChgTCR7ZShzaHQobykpfSwke24oby55KX1gKTtyZXR1cm4gYS5wdXNoKGBMJHtlKHNodChpKSl9LCR7bigwKX1gKSxhLmpvaW4oIiIpfXRyYWNrQnlXYWxsVGltZSh0KXtyZXR1cm4gdC53YWxsVGltZX1nZXRHcm91cFRyYW5zZm9ybSh0KXtyZXR1cm4gdGhpcy5zY2FsZXMmJnRoaXMubW9kZSE9PVRFLk9WRVJMQVk/YHRyYW5zbGF0ZSgwLCAke3RoaXMuc2NhbGVzLnRlbXBvcmFsU2NhbGUodGhpcy5nZXRUaW1lVmFsdWUodCkpfSlgOiIifWdldEhpc3RvZ3JhbUZpbGwodCl7cmV0dXJuIHRoaXMuc2NhbGVzP3RoaXMuc2NhbGVzLmQzQ29sb3JTY2FsZSh0aGlzLmdldFRpbWVWYWx1ZSh0KSk6IiJ9Z2V0R3JpZFRpY2tZTG9jcygpe2lmKCF0aGlzLnNjYWxlc3x8dGhpcy5tb2RlPT09VEUuT0ZGU0VUKXJldHVybltdO2NvbnN0IHQ9dGhpcy5zY2FsZXMuY291bnRTY2FsZTtyZXR1cm4gdC50aWNrcygpLm1hcCgoZT0+dChlKSkpfW9uUmVzaXplKCl7dGhpcy51cGRhdGVDbGllbnRSZWN0cygpLHRoaXMudXBkYXRlQ2hhcnRJZlZpc2libGUoKX1vblZpc2liaWxpdHlDaGFuZ2Uoe3Zpc2libGU6dH0pe3RoaXMuZG9tVmlzaWJsZT10LHQmJih0aGlzLnVwZGF0ZUNsaWVudFJlY3RzKCksdGhpcy51cGRhdGVDaGFydElmVmlzaWJsZSgpKX1nZXRUaW1lVmFsdWUodCl7c3dpdGNoKHRoaXMudGltZVByb3BlcnR5KXtjYXNlIFJFLldBTExfVElNRTpyZXR1cm4gdC53YWxsVGltZTtjYXNlIFJFLlNURVA6cmV0dXJuIHQuc3RlcDtjYXNlIFJFLlJFTEFUSVZFOnJldHVybiB0LndhbGxUaW1lLXRoaXMuZGF0YVswXS53YWxsVGltZX19dXBkYXRlQ2xpZW50UmVjdHMoKXt0aGlzLmNvbnRlbnQmJih0aGlzLmxheW91dC5jb250ZW50Q2xpZW50UmVjdD10aGlzLmNvbnRlbnQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLmxheW91dC5oaXN0b2dyYW1IZWlnaHQ9dGhpcy5sYXlvdXQuY29udGVudENsaWVudFJlY3QuaGVpZ2h0LzIuNSl9dXBkYXRlQ2hhcnRJZlZpc2libGUoKXt0aGlzLmRvbVZpc2libGUmJih0aGlzLnNjYWxlcz10aGlzLmNvbXB1dGVTY2FsZXModGhpcy5kYXRhKSx0aGlzLnJlbmRlclhBeGlzKCksdGhpcy5yZW5kZXJZQXhpcygpLHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpKX1jb21wdXRlU2NhbGVzKHQpe2NvbnN0e3dpZHRoOmUsaGVpZ2h0Om59PXRoaXMubGF5b3V0LmNvbnRlbnRDbGllbnRSZWN0LHttaW46byxtYXg6aX09cmh0KHQsKHQ9PihmdW5jdGlvbiBlKHQsbil7cmV0dXJuIHQucmVkdWNlKCgodCxlKT0+TWF0aC5taW4odCxuKGUpKSksMS8wKX0pKHQuYmlucywodD0+dC54KSkpLCh0PT5haHQodC5iaW5zLCgoe3g6dCxkeDplfSk9PnQrZSkpKSksYT1haHQodCwodD0+YWh0KHQuYmlucywoKHt5OnR9KT0+dCkpKSkscj1wZXQoKS5kb21haW4oW28saV0pLm5pY2UoKSxzPXRoaXMubW9kZSE9PVRFLk9WRVJMQVkmJnRoaXMudGltZVByb3BlcnR5PT1SRS5XQUxMX1RJTUU/Q290KCk6cGV0KCksbD10Lm1hcCgodD0+dGhpcy5nZXRUaW1lVmFsdWUodCkpKSx7bWluOmMsbWF4OmR9PXJodChsLCh0PT50KSkscD1bYyxkXTtzLmRvbWFpbihwKTtjb25zdCBtPXBldCgpO20uZG9tYWluKFswLGFdKTtjb25zdCB1PUg3KHRoaXMuY29sb3JTY2FsZT90aGlzLmNvbG9yU2NhbGUodGhpcy5uYW1lKToiIzAwMCIpLGY9cGV0KCk7cmV0dXJuIGYuZG9tYWluKHApLHIucmFuZ2UoWzAsZV0pLGYucmFuZ2UoW3UuYnJpZ2h0ZXIoKSx1LmRhcmtlcigpXSksZi5pbnRlcnBvbGF0ZShNOCksdGhpcy5tb2RlPT09VEUuT1ZFUkxBWT8ocy5yYW5nZShbbixuXSksbS5yYW5nZShbbiwwXSkpOihzLnJhbmdlKFtuLSh0aGlzLm1vZGU9PT1URS5PRkZTRVQ/bi10aGlzLmxheW91dC5oaXN0b2dyYW1IZWlnaHQ6MCksbl0pLG0ucmFuZ2UoWzAsLXRoaXMubGF5b3V0Lmhpc3RvZ3JhbUhlaWdodF0pKSx7YmluU2NhbGU6cixkM0NvbG9yU2NhbGU6Zixjb3VudFNjYWxlOm0sdGVtcG9yYWxTY2FsZTpzfX1yZW5kZXJYQXhpcygpe2lmKCF0aGlzLnNjYWxlcylyZXR1cm47Y29uc3R7d2lkdGg6dH09dGhpcy5sYXlvdXQuY29udGVudENsaWVudFJlY3QsZT1XNSh0aGlzLnNjYWxlcy5iaW5TY2FsZSkudGlja3MoTWF0aC5tYXgoMix0LzIwKSk7ZS50aWNrRm9ybWF0KHRoaXMuZm9ybWF0dGVycy5iaW5OdW1iZXIpLGUocjYodGhpcy54QXhpcy5uYXRpdmVFbGVtZW50KSl9Z2V0WUF4aXNGb3JtYXR0ZXIoKXtpZih0aGlzLm1vZGU9PT1URS5PVkVSTEFZKXJldHVybiB0aGlzLmZvcm1hdHRlcnMuY291bnQ7c3dpdGNoKHRoaXMudGltZVByb3BlcnR5KXtjYXNlIFJFLldBTExfVElNRTpyZXR1cm4gdGhpcy5mb3JtYXR0ZXJzLndhbGxUaW1lO2Nhc2UgUkUuU1RFUDpyZXR1cm4gdGhpcy5mb3JtYXR0ZXJzLnN0ZXA7Y2FzZSBSRS5SRUxBVElWRTpyZXR1cm4gdGhpcy5mb3JtYXR0ZXJzLnJlbGF0aXZlO2RlZmF1bHQ6dGhyb3cgUmFuZ2VFcnJvcihgWSBheGlzIGZvcm1hdHRlciBmb3IgJHt0aGlzLnRpbWVQcm9wZXJ0eX0gbXVzdCBiZSBpbXBsZW1lbnRlZGApfX1yZW5kZXJZQXhpcygpe2lmKCF0aGlzLnNjYWxlcylyZXR1cm47Y29uc3QgdD10aGlzLm1vZGU9PT1URS5PVkVSTEFZP3RoaXMuc2NhbGVzLmNvdW50U2NhbGU6dGhpcy5zY2FsZXMudGVtcG9yYWxTY2FsZSx7aGVpZ2h0OmV9PXRoaXMubGF5b3V0LmNvbnRlbnRDbGllbnRSZWN0LG49VTUodCkudGlja3MoTWF0aC5tYXgoMixlLzE1KSk7bi50aWNrRm9ybWF0KHRoaXMuZ2V0WUF4aXNGb3JtYXR0ZXIoKSksbihyNih0aGlzLnlBeGlzLm5hdGl2ZUVsZW1lbnQpKX1maW5kQ2xvc2VzdERhdHVtSW5kZXgodCl7bGV0IGU9dC50YXJnZXQsbj1lO2Zvcig7ZSYmZSE9PXRoaXMuaGlzdG9ncmFtcy5uYXRpdmVFbGVtZW50OyluPWUsZT1lLnBhcmVudEVsZW1lbnQ7cmV0dXJuIGU/QXJyYXkuZnJvbShlLmNoaWxkcmVuKS5pbmRleE9mKG4pOi0xfW9uTW91c2VNb3ZlRm9yVGVzdE9ubHkodCl7cmV0dXJuIHRoaXMub25Nb3VzZU1vdmUodCl9b25Nb3VzZU1vdmUodCl7aWYoIXRoaXMuc2NhbGVzKXJldHVybjtjb25zdCBlPXQub2Zmc2V0WCxuPXQub2Zmc2V0WSxvPXRoaXMuZmluZENsb3Nlc3REYXR1bUluZGV4KHQpO2lmKG88MClyZXR1cm47Y29uc3QgaT10aGlzLnNjYWxlcy5iaW5TY2FsZS5pbnZlcnQoZSksYT10aGlzLmRhdGFbb10scj10aGlzLmdldENsb3Nlc3RCaW5Gcm9tQmluQ29vcmRpbmF0ZShhLGkpO3RoaXMudG9vbHRpcERhdGE9e3ZhbHVlOntwb3NpdGlvbjp7eDplLHk6bn0sbGFiZWw6dGhpcy5tb2RlPT09VEUuT0ZGU0VUP3RoaXMuZm9ybWF0dGVycy5jb3VudChyLnkpOmBTdGVwOiAke3RoaXMuZm9ybWF0dGVycy5zdGVwKGEuc3RlcCl9YH0seEF4aXM6e3Bvc2l0aW9uOnRoaXMuZ2V0VWlDb29yZEZyb21CaW5Gb3JDb250ZW50KHIpLngsbGFiZWw6dGhpcy5mb3JtYXR0ZXJzLmJpbk51bWJlcihzaHQocikpfSx5QXhpczp7cG9zaXRpb246dGhpcy5zY2FsZXMuY291bnRTY2FsZSh0aGlzLm1vZGU9PT1URS5PRkZTRVQ/MDpyLnkpLGxhYmVsOnRoaXMubW9kZT09PVRFLk9GRlNFVD90aGlzLmdldFlBeGlzRm9ybWF0dGVyKCkodGhpcy5nZXRUaW1lVmFsdWUoYSkpOnRoaXMuZm9ybWF0dGVycy5iaW5OdW1iZXIoci55KX0seFBvc2l0aW9uSW5CaW5Db29yZDppLGNsb3Nlc3REYXR1bTphLGNsb3Nlc3RCaW46cn0sdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCl9fWZ1bmN0aW9uIGFodCh0LGUpe3JldHVybiB0LnJlZHVjZSgoKHQsbik9Pk1hdGgubWF4KHQsZShuKSkpLC0xLzApfWZ1bmN0aW9uIHJodCh0LGUsbil7bnx8KG49ZSk7bGV0IG89MS8wLGk9LTEvMDtmb3IoY29uc3QgYSBvZiB0KW89TWF0aC5taW4obyxlKGEpKSxpPU1hdGgubWF4KGksbihhKSk7cmV0dXJue21pbjpvLG1heDppfX1mdW5jdGlvbiBzaHQodCl7cmV0dXJuIHQueCsuNSp0LmR4fWlodC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8aWh0KShNdShIaCkpfSxpaHQuybVjbXA9VW8oe3R5cGU6aWh0LHNlbGVjdG9yczpbWyJ0Yi1oaXN0b2dyYW0tdjIiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJihXYihHZ3QsMSksV2IoWWd0LDEpLFdiKHFndCwxKSxXYihaZ3QsMSksV2IoWGd0LDEpKSwyJmUpe2xldCB0O1ViKHQ9WWIoKSkmJihuLm1haW49dC5maXJzdCksVWIodD1ZYigpKSYmKG4ueEF4aXM9dC5maXJzdCksVWIodD1ZYigpKSYmKG4ueUF4aXM9dC5maXJzdCksVWIodD1ZYigpKSYmKG4uY29udGVudD10LmZpcnN0KSxVYih0PVliKCkpJiYobi5oaXN0b2dyYW1zPXQuZmlyc3QpfX0saW5wdXRzOnttb2RlOiJtb2RlIix0aW1lUHJvcGVydHk6InRpbWVQcm9wZXJ0eSIsY29sb3JTY2FsZToiY29sb3JTY2FsZSIsbmFtZToibmFtZSIsZGF0YToiZGF0YSJ9LGZlYXR1cmVzOltTaV0sZGVjbHM6MjAsdmFyczo5LGNvbnN0czpbWyJkZXRlY3RSZXNpemUiLCIiLCJvYnNlcnZlSW50ZXJzZWN0aW9uIiwiIiwzLCJvblJlc2l6ZSIsIm9uVmlzaWJpbGl0eUNoYW5nZSJdLFsibWFpbiIsIiJdLFsxLCJheGlzIiwieC1heGlzIl0sWyJ4QXhpcyIsIiJdLFsxLCJ0b29sdGlwIl0sWzQsIm5nSWYiXSxbMSwiYXhpcyIsInktYXhpcyJdLFsieUF4aXMiLCIiXSxbMSwiY29udGVudCJdLFsiY29udGVudCIsIiJdLFsxLCJncmlkIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJoaXN0b2dyYW1zIl0sWyJoaXN0b2dyYW1zIiwiIl0sWyJjbGFzcyIsImhpc3RvZ3JhbSIsMywiY29sb3IiLDQsIm5nRm9yIiwibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSJdLFsiY2xhc3MiLCJ0b29sdGlwIiw0LCJuZ0lmIl0sWyJ4MiIsIjEwMCUiLDEsInRpY2siXSxbMSwiaGlzdG9ncmFtIl0sWyJjbGFzcyIsImJhc2VsaW5lIiwieDIiLCIxMDAlIiw0LCJuZ0lmIl0sWyJyIiwiMiIsNCwibmdJZiJdLFsieDIiLCIxMDAlIiwxLCJiYXNlbGluZSJdLFsiciIsIjIiXSxbMSwidmFsdWUtbGFiZWwiXSxbIngiLCIzIiwieSIsIi0zIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihPdSgwLCJkaXYiLDAsMSksTnUoIm9uUmVzaXplIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uUmVzaXplKCl9KSkoIm9uVmlzaWJpbGl0eUNoYW5nZSIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25WaXNpYmlsaXR5Q2hhbmdlKGUpfSkpLEhhKCksT3UoMiwic3ZnIiwyKSx3dSgzLCJnIixudWxsLDMpLE91KDUsImciLDQpLFdtKDYsS2d0LDMsMiwiZyIsNSksUHUoKSxQdSgpLE91KDcsInN2ZyIsNiksd3UoOCwiZyIsbnVsbCw3KSxPdSgxMCwiZyIsNCksV20oMTEsSmd0LDMsMywiZyIsNSksUHUoKSxQdSgpLE91KDEyLCJzdmciLDgsOSksT3UoMTQsImciLDEwKSxXbSgxNSxRZ3QsMiwxLCJnIiwxMSksUHUoKSxPdSgxNiwiZyIsMTIsMTMpLFdtKDE4LGVodCw0LDYsImciLDE0KSxQdSgpLFdtKDE5LG9odCw3LDUsImciLDE1KSxQdSgpLFB1KCkpLDImZSYmKGxmKCJtYWluICIrbi5tb2RlKyIgIituLnRpbWVQcm9wZXJ0eSksSmMoNiksdnUoIm5nSWYiLG4udG9vbHRpcERhdGEpLEpjKDQpLE5tKCJ0cmFuc2Zvcm0iLG4uZ2V0Q3NzVHJhbnNsYXRlKDksMCkpLEpjKDEpLHZ1KCJuZ0lmIixuLnRvb2x0aXBEYXRhKSxKYyg0KSx2dSgibmdGb3JPZiIsbi5nZXRHcmlkVGlja1lMb2NzKCkpLEpjKDMpLHZ1KCJuZ0Zvck9mIixuLmRhdGEpKCJuZ0ZvclRyYWNrQnkiLG4udHJhY2tCeVdhbGxUaW1lKSxKYygxKSx2dSgibmdJZiIsbi50b29sdGlwRGF0YSkpfSxkaXJlY3RpdmVzOltxSyxVZ3QsYXYsb3ZdLHN0eWxlczpbJy5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHh9Lm1hdC1oMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaGVhZGxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTVweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZ1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjA1ZW07bWFyZ2luOjAgMCA1NnB4fS5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAwNWVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXJhaXNlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdHJva2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmxhdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZhYltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbWluaS1mYWJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4fS5tYXQtY2FyZC1zdWJ0aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGVja2JveC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvb3Rlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgdHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIzZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LjU0MTY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2NjY2NjY3ZW0pfUBtZWRpYSBwcmludHsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjJlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouMjVlbSAwIC43NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxZW0gMCAxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMiksIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi0wLjA2MjVlbX0ubWF0LW1lbnUtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci12ZXJ0aWNhbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGFiLWxpbmtbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MH0ubWF0LXRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5Om5vbmV9LmNkay12aXN1YWxseS1oaWRkZW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjZ9LmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV0sIC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3hbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2tbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHt9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7fS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOi13ZWJraXQtYXV0b2ZpbGwpe2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZVtfbmdjb250ZW50LSVDT01QJV17cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fS5tYXQtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfVtfbmdob3N0LSVDT01QJV0sIC5tYWluW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfVtfbmdob3N0LSVDT01QJV17Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6MTBweH0ubWFpbltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtYXJlYXM6ImNvbnRlbnQgeS1heGlzIiAieC1heGlzIC4iO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgNTBweDtncmlkLXRlbXBsYXRlLXJvd3M6MWZyIDMwcHh9Lm1haW4ud2FsbF90aW1lW19uZ2NvbnRlbnQtJUNPTVAlXXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDc1cHh9LnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdLCAuYmFzZWxpbmVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiMwMDB9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAudG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuYmFzZWxpbmVbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuYmFzZWxpbmVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNmZmZ9LnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdICAgdGV4dFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6Ym9sZDtmb250LXNpemU6MTBweH0udG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gICB0ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdICAgY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmaWxsOmN1cnJlbnRDb2xvcn0udG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2RvbWluYW50LWJhc2VsaW5lOmlkZW9ncmFwaGljO3RleHQtYW5jaG9yOnN0YXJ0fS5heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgICB7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAgLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAge2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS5heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmRvbWFpbiwgLmF4aXNbX25nY29udGVudC0lQ09NUCVdICAgICAudGljayB0ZXh0e2Rpc3BsYXk6bm9uZX0uYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC50aWNrOm50aC1jaGlsZCgybisxKSB0ZXh0e2Rpc3BsYXk6aW5pdGlhbH1zdmdbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlO3dpZHRoOjEwMCU7cG9pbnRlci1ldmVudHM6dmlzaWJsZVBhaW50ZWR9c3ZnW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGxpbmVbX25nY29udGVudC0lQ09NUCVdLCBzdmdbX25nY29udGVudC0lQ09NUCVdICAgY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXSwgc3ZnW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtwb2ludGVyLWV2ZW50czpub25lfS54LWF4aXNbX25nY29udGVudC0lQ09NUCVde2dyaWQtYXJlYTp4LWF4aXN9LngtYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAudG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17ZG9taW5hbnQtYmFzZWxpbmU6aGFuZ2luZzt0ZXh0LWFuY2hvcjptaWRkbGV9LnktYXhpc1tfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOnktYXhpc30ueS1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtkb21pbmFudC1iYXNlbGluZTptaWRkbGU7dGV4dC1hbmNob3I6c3RhcnR9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLnRpY2tbX25nY29udGVudC0lQ09NUCVdLCAuYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC50aWNrIGxpbmV7c3Ryb2tlOiNkZGR9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLnRpY2tbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAudGlja1tfbmdjb250ZW50LSVDT01QJV17c3Ryb2tlOiM1NTV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmF4aXNbX25nY29udGVudC0lQ09NUCVdICAgICAudGljayBsaW5lLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC50aWNrIGxpbmV7c3Ryb2tlOiM1NTV9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2dyaWQtYXJlYTpjb250ZW50fS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50aWNrW19uZ2NvbnRlbnQtJUNPTVAlXXtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1kYXNoYXJyYXk6Mn0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBjaXJjbGVbX25nY29udGVudC0lQ09NUCVdLCAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBwYXRoW19uZ2NvbnRlbnQtJUNPTVAlXXtmaWxsOmN1cnJlbnRDb2xvcjtzdHJva2Utb3BhY2l0eTouNTtzdHJva2Utd2lkdGg6MXB4fS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNpcmNsZVtfbmdjb250ZW50LSVDT01QJV17c3Ryb2tlOiNmZmZ9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmJhc2VsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtzdHJva2Utb3BhY2l0eTouMTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZTpjdXJyZW50Q29sb3I7d2lkdGg6MTAwJX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAudG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gICBwYXRoW19uZ2NvbnRlbnQtJUNPTVAlXXtzdHJva2Utb3BhY2l0eToxO3N0cm9rZTpjdXJyZW50Q29sb3I7ZmlsbDp0cmFuc3BhcmVudH0ub2Zmc2V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oaXN0b2dyYW1zW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBhdGhbX25nY29udGVudC0lQ09NUCVde3N0cm9rZTojZmZmfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5vZmZzZXRbX25nY29udGVudC0lQ09NUCVdICAgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmhpc3RvZ3JhbXNbX25nY29udGVudC0lQ09NUCVdICAgcGF0aFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5vZmZzZXRbX25nY29udGVudC0lQ09NUCVdICAgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmhpc3RvZ3JhbXNbX25nY29udGVudC0lQ09NUCVdICAgcGF0aFtfbmdjb250ZW50LSVDT01QJV17c3Ryb2tlOiM1NTV9Lm92ZXJsYXlbX25nY29udGVudC0lQ09NUCVdICAgLngtYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC50aWNrIGxpbmV7ZGlzcGxheTpub25lfS5vdmVybGF5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBhdGhbX25nY29udGVudC0lQ09NUCVde2ZpbGwtb3BhY2l0eTowO3N0cm9rZTpjdXJyZW50Q29sb3J9LnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdLCAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBjaXJjbGVbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6bm9uZX0ubWFpbltfbmdjb250ZW50LSVDT01QJV06aG92ZXIgICAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBjaXJjbGVbX25nY29udGVudC0lQ09NUCVdLCAubWFpbltfbmdjb250ZW50LSVDT01QJV06aG92ZXIgICAudG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpibG9ja30nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoaWh0LFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6InRiLWhpc3RvZ3JhbS12MiIsdGVtcGxhdGVVcmw6Imhpc3RvZ3JhbV92Ml9jb21wb25lbnQubmcuaHRtbCIsc3R5bGVVcmxzOlsiaGlzdG9ncmFtX3YyX2NvbXBvbmVudC5jc3MiXSxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6SGh9XX0pLHttYWluOlt7dHlwZTpGcixhcmdzOlsibWFpbiJdfV0seEF4aXM6W3t0eXBlOkZyLGFyZ3M6WyJ4QXhpcyJdfV0seUF4aXM6W3t0eXBlOkZyLGFyZ3M6WyJ5QXhpcyJdfV0sY29udGVudDpbe3R5cGU6RnIsYXJnczpbImNvbnRlbnQiXX1dLGhpc3RvZ3JhbXM6W3t0eXBlOkZyLGFyZ3M6WyJoaXN0b2dyYW1zIl19XSxtb2RlOlt7dHlwZTp5X31dLHRpbWVQcm9wZXJ0eTpbe3R5cGU6eV99XSxjb2xvclNjYWxlOlt7dHlwZTp5X31dLG5hbWU6W3t0eXBlOnlffV0sZGF0YTpbe3R5cGU6eV99XX0pO2NsYXNzIGxodHt9bGh0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxsaHQpfSxsaHQuybVtb2Q9Wm8oe3R5cGU6bGh0fSksbGh0Lsm1aW5qPWNvKHtpbXBvcnRzOltbQnYsQUosV2d0XV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKGxodCx7ZGVjbGFyYXRpb25zOltIZnQsaWh0XSxpbXBvcnRzOltCdixBSixXZ3RdLGV4cG9ydHM6W0hmdCxpaHRdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihsaHQsW3t0eXBlOmtfLGFyZ3M6W3tkZWNsYXJhdGlvbnM6W0hmdCxpaHRdLGV4cG9ydHM6W0hmdCxpaHRdLGltcG9ydHM6W0J2LEFKLFdndF19XX1dLG51bGwsbnVsbCk7Y2xhc3MgY2h0e31jaHQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGNodCl9LGNodC7JtW1vZD1abyh7dHlwZTpjaHR9KSxjaHQuybVpbmo9Y28oe2ltcG9ydHM6W1tCdl1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhjaHQse2RlY2xhcmF0aW9uczpbWTJdLGltcG9ydHM6W0J2XSxleHBvcnRzOltZMl19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGNodCxbe3R5cGU6a18sYXJnczpbe2RlY2xhcmF0aW9uczpbWTJdLGV4cG9ydHM6W1kyXSxpbXBvcnRzOltCdl19XX1dLG51bGwsbnVsbCk7Y2xhc3MgZGh0e31kaHQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGRodCl9LGRodC7JtW1vZD1abyh7dHlwZTpkaHR9KSxkaHQuybVpbmo9Y28oe2ltcG9ydHM6W1tCdl1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhkaHQse2RlY2xhcmF0aW9uczpbWDIsWjJdLGltcG9ydHM6W0J2XSxleHBvcnRzOltYMl19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGRodCxbe3R5cGU6a18sYXJnczpbe2RlY2xhcmF0aW9uczpbWDIsWjJdLGV4cG9ydHM6W1gyXSxpbXBvcnRzOltCdl19XX1dLG51bGwsbnVsbCk7Y2xhc3MgcGh0e31waHQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHBodCl9LHBodC7JtW1vZD1abyh7dHlwZTpwaHR9KSxwaHQuybVpbmo9Y28oe2ltcG9ydHM6W1tCdixsaHQsekgsZEcsdzEsQUosZGh0LGNodF1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhwaHQse2RlY2xhcmF0aW9uczpbV2Z0LFVmdF0saW1wb3J0czpbQnYsbGh0LHpILGRHLHcxLEFKLGRodCxjaHRdLGV4cG9ydHM6W1dmdF19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHBodCxbe3R5cGU6a18sYXJnczpbe2RlY2xhcmF0aW9uczpbV2Z0LFVmdF0sZXhwb3J0czpbV2Z0XSxpbXBvcnRzOltCdixsaHQsekgsZEcsdzEsQUosZGh0LGNodF19XX1dLG51bGwsbnVsbCk7Y2xhc3MgbWh0e31taHQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fG1odCl9LG1odC7JtW1vZD1abyh7dHlwZTptaHR9KSxtaHQuybVpbmo9Y28oe2ltcG9ydHM6W1tCdix6SCxkRyx3MSxQWCxkaHQsY2h0XV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKG1odCx7ZGVjbGFyYXRpb25zOltpNSxvNV0saW1wb3J0czpbQnYsekgsZEcsdzEsUFgsZGh0LGNodF0sZXhwb3J0czpbaTVdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihtaHQsW3t0eXBlOmtfLGFyZ3M6W3tkZWNsYXJhdGlvbnM6W2k1LG81XSxleHBvcnRzOltpNV0saW1wb3J0czpbQnYsekgsZEcsdzEsUFgsZGh0LGNodF19XX1dLG51bGwsbnVsbCk7Y2xhc3MgdWh0e311aHQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHVodCl9LHVodC7JtW1vZD1abyh7dHlwZTp1aHR9KSx1aHQuybVpbmo9Y28oe2ltcG9ydHM6W1tCdixpTCx6SCxkRyxBWSx6R11dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyh1aHQse2RlY2xhcmF0aW9uczpbZmZ0LGNmdCxLdXRdLGltcG9ydHM6W0J2LGlMLHpILGRHLEFZLHpHXSxleHBvcnRzOltmZnQsY2Z0LEt1dF19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHVodCxbe3R5cGU6a18sYXJnczpbe2RlY2xhcmF0aW9uczpbZmZ0LGNmdCxLdXRdLGV4cG9ydHM6W2ZmdCxjZnQsS3V0XSxpbXBvcnRzOltCdixpTCx6SCxkRyxBWSx6R119XX1dLG51bGwsbnVsbCk7Y2xhc3MgZmh0e31maHQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGZodCl9LGZodC7JtW1vZD1abyh7dHlwZTpmaHR9KSxmaHQuybVpbmo9Y28oe2ltcG9ydHM6W1tCdixpTCx1aHQsQUpdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oZmh0LHtkZWNsYXJhdGlvbnM6W3hmdF0saW1wb3J0czpbQnYsaUwsdWh0LEFKXSxleHBvcnRzOlt4ZnRdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihmaHQsW3t0eXBlOmtfLGFyZ3M6W3tkZWNsYXJhdGlvbnM6W3hmdF0sZXhwb3J0czpbeGZ0XSxpbXBvcnRzOltCdixpTCx1aHQsQUpdfV19XSxudWxsLG51bGwpO2NsYXNzIGdodHt9Z2h0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxnaHQpfSxnaHQuybVtb2Q9Wm8oe3R5cGU6Z2h0fSksZ2h0Lsm1aW5qPWNvKHtpbXBvcnRzOltbQnYsVlUsekgsV1csQVksbVcsZFRdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oZ2h0LHtkZWNsYXJhdGlvbnM6W2I1LGg1XSxpbXBvcnRzOltCdixWVSx6SCxXVyxBWSxtVyxkVF0sZXhwb3J0czpbYjVdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihnaHQsW3t0eXBlOmtfLGFyZ3M6W3tkZWNsYXJhdGlvbnM6W2I1LGg1XSxleHBvcnRzOltiNV0saW1wb3J0czpbQnYsVlUsekgsV1csQVksbVcsZFRdLGVudHJ5Q29tcG9uZW50czpbYjVdfV19XSxudWxsLG51bGwpO2NsYXNzIGhodHt9aGh0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxoaHQpfSxoaHQuybVtb2Q9Wm8oe3R5cGU6aGh0fSksaGh0Lsm1aW5qPWNvKHtpbXBvcnRzOltbQnYsZ2h0LGZodCx6SCxkRyx6Ryx3MSxBSixjaHRdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oaGh0LHtkZWNsYXJhdGlvbnM6W05mdCxSZnRdLGltcG9ydHM6W0J2LGdodCxmaHQsekgsZEcsekcsdzEsQUosY2h0XSxleHBvcnRzOltOZnRdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihoaHQsW3t0eXBlOmtfLGFyZ3M6W3tkZWNsYXJhdGlvbnM6W05mdCxSZnRdLGV4cG9ydHM6W05mdF0saW1wb3J0czpbQnYsZ2h0LGZodCx6SCxkRyx6Ryx3MSxBSixjaHRdfV19XSxudWxsLG51bGwpO2NsYXNzIGJodHt9Ymh0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxiaHQpfSxiaHQuybVtb2Q9Wm8oe3R5cGU6Ymh0fSksYmh0Lsm1aW5qPWNvKHtpbXBvcnRzOltbQnYsbWh0LGhodCxwaHRdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oYmh0LHtkZWNsYXJhdGlvbnM6W04yLFhmdCxLZnRdLGltcG9ydHM6W0J2LG1odCxoaHQscGh0XSxleHBvcnRzOltOMixLZnRdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihiaHQsW3t0eXBlOmtfLGFyZ3M6W3tkZWNsYXJhdGlvbnM6W04yLFhmdCxLZnRdLGV4cG9ydHM6W04yLEtmdF0saW1wb3J0czpbQnYsbWh0LGhodCxwaHRdfV19XSxudWxsLG51bGwpO2NvbnN0IHlodD1bImJ1dHRvbiJdLF9odD1uZXcgTnIoIk1BVF9CVVRUT05fVE9HR0xFX0RFRkFVTFRfT1BUSU9OUyIpLENodD1uZXcgTnIoIk1hdEJ1dHRvblRvZ2dsZUdyb3VwIiksTWh0PXtwcm92aWRlOnZWLHVzZUV4aXN0aW5nOkluKCgoKT0+T2h0KSksbXVsdGk6ITB9O2xldCB2aHQ9MDtjbGFzcyB4aHR7Y29uc3RydWN0b3IodCxlKXt0aGlzLnNvdXJjZT10LHRoaXMudmFsdWU9ZX19Y2xhc3MgT2h0e2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5fY2hhbmdlRGV0ZWN0b3I9dCx0aGlzLl92ZXJ0aWNhbD0hMSx0aGlzLl9tdWx0aXBsZT0hMSx0aGlzLl9kaXNhYmxlZD0hMSx0aGlzLl9jb250cm9sVmFsdWVBY2Nlc3NvckNoYW5nZUZuPSgpPT57fSx0aGlzLl9vblRvdWNoZWQ9KCk9Pnt9LHRoaXMuX25hbWU9Im1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLSIrdmh0KyssdGhpcy52YWx1ZUNoYW5nZT1uZXcgQWIsdGhpcy5jaGFuZ2U9bmV3IEFiLHRoaXMuYXBwZWFyYW5jZT1lJiZlLmFwcGVhcmFuY2U/ZS5hcHBlYXJhbmNlOiJzdGFuZGFyZCJ9Z2V0IG5hbWUoKXtyZXR1cm4gdGhpcy5fbmFtZX1zZXQgbmFtZSh0KXt0aGlzLl9uYW1lPXQsdGhpcy5fYnV0dG9uVG9nZ2xlcyYmdGhpcy5fYnV0dG9uVG9nZ2xlcy5mb3JFYWNoKCh0PT57dC5uYW1lPXRoaXMuX25hbWUsdC5fbWFya0ZvckNoZWNrKCl9KSl9Z2V0IHZlcnRpY2FsKCl7cmV0dXJuIHRoaXMuX3ZlcnRpY2FsfXNldCB2ZXJ0aWNhbCh0KXt0aGlzLl92ZXJ0aWNhbD1ySSh0KX1nZXQgdmFsdWUoKXtjb25zdCB0PXRoaXMuX3NlbGVjdGlvbk1vZGVsP3RoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGVkOltdO3JldHVybiB0aGlzLm11bHRpcGxlP3QubWFwKCh0PT50LnZhbHVlKSk6dFswXT90WzBdLnZhbHVlOnZvaWQgMH1zZXQgdmFsdWUodCl7dGhpcy5fc2V0U2VsZWN0aW9uQnlWYWx1ZSh0KSx0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSl9Z2V0IHNlbGVjdGVkKCl7Y29uc3QgdD10aGlzLl9zZWxlY3Rpb25Nb2RlbD90aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZDpbXTtyZXR1cm4gdGhpcy5tdWx0aXBsZT90OnRbMF18fG51bGx9Z2V0IG11bHRpcGxlKCl7cmV0dXJuIHRoaXMuX211bHRpcGxlfXNldCBtdWx0aXBsZSh0KXt0aGlzLl9tdWx0aXBsZT1ySSh0KX1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR9c2V0IGRpc2FibGVkKHQpe3RoaXMuX2Rpc2FibGVkPXJJKHQpLHRoaXMuX2J1dHRvblRvZ2dsZXMmJnRoaXMuX2J1dHRvblRvZ2dsZXMuZm9yRWFjaCgodD0+dC5fbWFya0ZvckNoZWNrKCkpKX1uZ09uSW5pdCgpe3RoaXMuX3NlbGVjdGlvbk1vZGVsPW5ldyBqSCh0aGlzLm11bHRpcGxlLHZvaWQgMCwhMSl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0KC4uLnRoaXMuX2J1dHRvblRvZ2dsZXMuZmlsdGVyKCh0PT50LmNoZWNrZWQpKSl9d3JpdGVWYWx1ZSh0KXt0aGlzLnZhbHVlPXQsdGhpcy5fY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCl9cmVnaXN0ZXJPbkNoYW5nZSh0KXt0aGlzLl9jb250cm9sVmFsdWVBY2Nlc3NvckNoYW5nZUZuPXR9cmVnaXN0ZXJPblRvdWNoZWQodCl7dGhpcy5fb25Ub3VjaGVkPXR9c2V0RGlzYWJsZWRTdGF0ZSh0KXt0aGlzLmRpc2FibGVkPXR9X2VtaXRDaGFuZ2VFdmVudCgpe2NvbnN0IHQ9dGhpcy5zZWxlY3RlZCxlPUFycmF5LmlzQXJyYXkodCk/dFt0Lmxlbmd0aC0xXTp0LG49bmV3IHhodChlLHRoaXMudmFsdWUpO3RoaXMuX2NvbnRyb2xWYWx1ZUFjY2Vzc29yQ2hhbmdlRm4obi52YWx1ZSksdGhpcy5jaGFuZ2UuZW1pdChuKX1fc3luY0J1dHRvblRvZ2dsZSh0LGUsbj0hMSxvPSExKXt0aGlzLm11bHRpcGxlfHwhdGhpcy5zZWxlY3RlZHx8dC5jaGVja2VkfHwodGhpcy5zZWxlY3RlZC5jaGVja2VkPSExKSx0aGlzLl9zZWxlY3Rpb25Nb2RlbD9lP3RoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdCh0KTp0aGlzLl9zZWxlY3Rpb25Nb2RlbC5kZXNlbGVjdCh0KTpvPSEwLG8/UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKCk9PnRoaXMuX3VwZGF0ZU1vZGVsVmFsdWUobikpKTp0aGlzLl91cGRhdGVNb2RlbFZhbHVlKG4pfV9pc1NlbGVjdGVkKHQpe3JldHVybiB0aGlzLl9zZWxlY3Rpb25Nb2RlbCYmdGhpcy5fc2VsZWN0aW9uTW9kZWwuaXNTZWxlY3RlZCh0KX1faXNQcmVjaGVja2VkKHQpe3JldHVybiB2b2lkIDAhPT10aGlzLl9yYXdWYWx1ZSYmKHRoaXMubXVsdGlwbGUmJkFycmF5LmlzQXJyYXkodGhpcy5fcmF3VmFsdWUpP3RoaXMuX3Jhd1ZhbHVlLnNvbWUoKGU9Pm51bGwhPXQudmFsdWUmJmU9PT10LnZhbHVlKSk6dC52YWx1ZT09PXRoaXMuX3Jhd1ZhbHVlKX1fc2V0U2VsZWN0aW9uQnlWYWx1ZSh0KXtpZih0aGlzLl9yYXdWYWx1ZT10LHRoaXMuX2J1dHRvblRvZ2dsZXMpaWYodGhpcy5tdWx0aXBsZSYmdCl7aWYoIUFycmF5LmlzQXJyYXkodCkmJigidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSl0aHJvdyBFcnJvcigiVmFsdWUgbXVzdCBiZSBhbiBhcnJheSBpbiBtdWx0aXBsZS1zZWxlY3Rpb24gbW9kZS4iKTt0aGlzLl9jbGVhclNlbGVjdGlvbigpLHQuZm9yRWFjaCgodD0+dGhpcy5fc2VsZWN0VmFsdWUodCkpKX1lbHNlIHRoaXMuX2NsZWFyU2VsZWN0aW9uKCksdGhpcy5fc2VsZWN0VmFsdWUodCl9X2NsZWFyU2VsZWN0aW9uKCl7dGhpcy5fc2VsZWN0aW9uTW9kZWwuY2xlYXIoKSx0aGlzLl9idXR0b25Ub2dnbGVzLmZvckVhY2goKHQ9PnQuY2hlY2tlZD0hMSkpfV9zZWxlY3RWYWx1ZSh0KXtjb25zdCBlPXRoaXMuX2J1dHRvblRvZ2dsZXMuZmluZCgoZT0+bnVsbCE9ZS52YWx1ZSYmZS52YWx1ZT09PXQpKTtlJiYoZS5jaGVja2VkPSEwLHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdChlKSl9X3VwZGF0ZU1vZGVsVmFsdWUodCl7dCYmdGhpcy5fZW1pdENoYW5nZUV2ZW50KCksdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpfX1PaHQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fE9odCkoTXUoSGgpLE11KF9odCw4KSl9LE9odC7JtWRpcj1Kbyh7dHlwZTpPaHQsc2VsZWN0b3JzOltbIm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uIHQoZSxuLG8pe2lmKDEmZSYmR2Iobyx3aHQsMSksMiZlKXtsZXQgdDtVYih0PVliKCkpJiYobi5fYnV0dG9uVG9nZ2xlcz10KX19LGhvc3RBdHRyczpbInJvbGUiLCJncm91cCIsMSwibWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAiXSxob3N0VmFyczo1LGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MiZlJiYoTm0oImFyaWEtZGlzYWJsZWQiLG4uZGlzYWJsZWQpLGFmKCJtYXQtYnV0dG9uLXRvZ2dsZS12ZXJ0aWNhbCIsbi52ZXJ0aWNhbCkoIm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQiLCJzdGFuZGFyZCI9PT1uLmFwcGVhcmFuY2UpKX0saW5wdXRzOnthcHBlYXJhbmNlOiJhcHBlYXJhbmNlIixuYW1lOiJuYW1lIix2ZXJ0aWNhbDoidmVydGljYWwiLHZhbHVlOiJ2YWx1ZSIsbXVsdGlwbGU6Im11bHRpcGxlIixkaXNhYmxlZDoiZGlzYWJsZWQifSxvdXRwdXRzOnt2YWx1ZUNoYW5nZToidmFsdWVDaGFuZ2UiLGNoYW5nZToiY2hhbmdlIn0sZXhwb3J0QXM6WyJtYXRCdXR0b25Ub2dnbGVHcm91cCJdLGZlYXR1cmVzOltpaChbTWh0LHtwcm92aWRlOkNodCx1c2VFeGlzdGluZzpPaHR9XSldfSksT2h0LmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6SGh9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbX2h0XX1dfV0sT2h0LnByb3BEZWNvcmF0b3JzPXtfYnV0dG9uVG9nZ2xlczpbe3R5cGU6enIsYXJnczpbSW4oKCgpPT53aHQpKSx7ZGVzY2VuZGFudHM6ITB9XX1dLGFwcGVhcmFuY2U6W3t0eXBlOnlffV0sbmFtZTpbe3R5cGU6eV99XSx2ZXJ0aWNhbDpbe3R5cGU6eV99XSx2YWx1ZTpbe3R5cGU6eV99XSx2YWx1ZUNoYW5nZTpbe3R5cGU6X199XSxtdWx0aXBsZTpbe3R5cGU6eV99XSxkaXNhYmxlZDpbe3R5cGU6eV99XSxjaGFuZ2U6W3t0eXBlOl9ffV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoT2h0LFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6Im1hdC1idXR0b24tdG9nZ2xlLWdyb3VwIixwcm92aWRlcnM6W01odCx7cHJvdmlkZTpDaHQsdXNlRXhpc3Rpbmc6T2h0fV0saG9zdDp7cm9sZToiZ3JvdXAiLGNsYXNzOiJtYXQtYnV0dG9uLXRvZ2dsZS1ncm91cCIsIlthdHRyLmFyaWEtZGlzYWJsZWRdIjoiZGlzYWJsZWQiLCJbY2xhc3MubWF0LWJ1dHRvbi10b2dnbGUtdmVydGljYWxdIjoidmVydGljYWwiLCJbY2xhc3MubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZF0iOidhcHBlYXJhbmNlID09PSAic3RhbmRhcmQiJ30sZXhwb3J0QXM6Im1hdEJ1dHRvblRvZ2dsZUdyb3VwIn1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkhofSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W19odF19XX1dfSkse3ZhbHVlQ2hhbmdlOlt7dHlwZTpfX31dLGNoYW5nZTpbe3R5cGU6X199XSxhcHBlYXJhbmNlOlt7dHlwZTp5X31dLG5hbWU6W3t0eXBlOnlffV0sdmVydGljYWw6W3t0eXBlOnlffV0sdmFsdWU6W3t0eXBlOnlffV0sbXVsdGlwbGU6W3t0eXBlOnlffV0sZGlzYWJsZWQ6W3t0eXBlOnlffV0sX2J1dHRvblRvZ2dsZXM6W3t0eXBlOnpyLGFyZ3M6W0luKCgoKT0+d2h0KSkse2Rlc2NlbmRhbnRzOiEwfV19XX0pO2NvbnN0IFBodD16eihjbGFzc3t9KTtjbGFzcyB3aHQgZXh0ZW5kcyBQaHR7Y29uc3RydWN0b3IodCxlLG4sbyxpLGEpe3N1cGVyKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9ZSx0aGlzLl9lbGVtZW50UmVmPW4sdGhpcy5fZm9jdXNNb25pdG9yPW8sdGhpcy5faXNTaW5nbGVTZWxlY3Rvcj0hMSx0aGlzLl9jaGVja2VkPSExLHRoaXMuYXJpYUxhYmVsbGVkYnk9bnVsbCx0aGlzLl9kaXNhYmxlZD0hMSx0aGlzLmNoYW5nZT1uZXcgQWI7Y29uc3Qgcj1OdW1iZXIoaSk7dGhpcy50YWJJbmRleD1yfHwwPT09cj9yOm51bGwsdGhpcy5idXR0b25Ub2dnbGVHcm91cD10LHRoaXMuYXBwZWFyYW5jZT1hJiZhLmFwcGVhcmFuY2U/YS5hcHBlYXJhbmNlOiJzdGFuZGFyZCJ9Z2V0IGJ1dHRvbklkKCl7cmV0dXJuYCR7dGhpcy5pZH0tYnV0dG9uYH1nZXQgYXBwZWFyYW5jZSgpe3JldHVybiB0aGlzLmJ1dHRvblRvZ2dsZUdyb3VwP3RoaXMuYnV0dG9uVG9nZ2xlR3JvdXAuYXBwZWFyYW5jZTp0aGlzLl9hcHBlYXJhbmNlfXNldCBhcHBlYXJhbmNlKHQpe3RoaXMuX2FwcGVhcmFuY2U9dH1nZXQgY2hlY2tlZCgpe3JldHVybiB0aGlzLmJ1dHRvblRvZ2dsZUdyb3VwP3RoaXMuYnV0dG9uVG9nZ2xlR3JvdXAuX2lzU2VsZWN0ZWQodGhpcyk6dGhpcy5fY2hlY2tlZH1zZXQgY2hlY2tlZCh0KXtjb25zdCBlPXJJKHQpO2UhPT10aGlzLl9jaGVja2VkJiYodGhpcy5fY2hlY2tlZD1lLHRoaXMuYnV0dG9uVG9nZ2xlR3JvdXAmJnRoaXMuYnV0dG9uVG9nZ2xlR3JvdXAuX3N5bmNCdXR0b25Ub2dnbGUodGhpcyx0aGlzLl9jaGVja2VkKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfHx0aGlzLmJ1dHRvblRvZ2dsZUdyb3VwJiZ0aGlzLmJ1dHRvblRvZ2dsZUdyb3VwLmRpc2FibGVkfXNldCBkaXNhYmxlZCh0KXt0aGlzLl9kaXNhYmxlZD1ySSh0KX1uZ09uSW5pdCgpe2NvbnN0IHQ9dGhpcy5idXR0b25Ub2dnbGVHcm91cDt0aGlzLl9pc1NpbmdsZVNlbGVjdG9yPXQmJiF0Lm11bHRpcGxlLHRoaXMuaWQ9dGhpcy5pZHx8Im1hdC1idXR0b24tdG9nZ2xlLSIrdmh0KyssdGhpcy5faXNTaW5nbGVTZWxlY3RvciYmKHRoaXMubmFtZT10Lm5hbWUpLHQmJih0Ll9pc1ByZWNoZWNrZWQodGhpcyk/dGhpcy5jaGVja2VkPSEwOnQuX2lzU2VsZWN0ZWQodGhpcykhPT10aGlzLl9jaGVja2VkJiZ0Ll9zeW5jQnV0dG9uVG9nZ2xlKHRoaXMsdGhpcy5fY2hlY2tlZCkpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX2ZvY3VzTW9uaXRvci5tb25pdG9yKHRoaXMuX2VsZW1lbnRSZWYsITApfW5nT25EZXN0cm95KCl7Y29uc3QgdD10aGlzLmJ1dHRvblRvZ2dsZUdyb3VwO3RoaXMuX2ZvY3VzTW9uaXRvci5zdG9wTW9uaXRvcmluZyh0aGlzLl9lbGVtZW50UmVmKSx0JiZ0Ll9pc1NlbGVjdGVkKHRoaXMpJiZ0Ll9zeW5jQnV0dG9uVG9nZ2xlKHRoaXMsITEsITEsITApfWZvY3VzKHQpe3RoaXMuX2J1dHRvbkVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cyh0KX1fb25CdXR0b25DbGljaygpe2NvbnN0IHQ9ISF0aGlzLl9pc1NpbmdsZVNlbGVjdG9yfHwhdGhpcy5fY2hlY2tlZDt0IT09dGhpcy5fY2hlY2tlZCYmKHRoaXMuX2NoZWNrZWQ9dCx0aGlzLmJ1dHRvblRvZ2dsZUdyb3VwJiYodGhpcy5idXR0b25Ub2dnbGVHcm91cC5fc3luY0J1dHRvblRvZ2dsZSh0aGlzLHRoaXMuX2NoZWNrZWQsITApLHRoaXMuYnV0dG9uVG9nZ2xlR3JvdXAuX29uVG91Y2hlZCgpKSksdGhpcy5jaGFuZ2UuZW1pdChuZXcgeGh0KHRoaXMsdGhpcy52YWx1ZSkpfV9tYXJrRm9yQ2hlY2soKXt0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX19d2h0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHx3aHQpKE11KENodCw4KSxNdShIaCksTXUoY2gpLE11KHB6KSxPcigidGFiaW5kZXgiKSxNdShfaHQsOCkpfSx3aHQuybVjbXA9VW8oe3R5cGU6d2h0LHNlbGVjdG9yczpbWyJtYXQtYnV0dG9uLXRvZ2dsZSJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24gdChlLG4pe2lmKDEmZSYmV2IoeWh0LDEpLDImZSl7bGV0IHQ7VWIodD1ZYigpKSYmKG4uX2J1dHRvbkVsZW1lbnQ9dC5maXJzdCl9fSxob3N0QXR0cnM6WyJyb2xlIiwicHJlc2VudGF0aW9uIiwxLCJtYXQtYnV0dG9uLXRvZ2dsZSJdLGhvc3RWYXJzOjEyLGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MSZlJiZOdSgiZm9jdXMiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uZm9jdXMoKX0pKSwyJmUmJihObSgiYXJpYS1sYWJlbCIsbnVsbCkoImFyaWEtbGFiZWxsZWRieSIsbnVsbCkoImlkIixuLmlkKSgibmFtZSIsbnVsbCksYWYoIm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUiLCFuLmJ1dHRvblRvZ2dsZUdyb3VwKSgibWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZCIsbi5jaGVja2VkKSgibWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWQiLG4uZGlzYWJsZWQpKCJtYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkIiwic3RhbmRhcmQiPT09bi5hcHBlYXJhbmNlKSl9LGlucHV0czp7ZGlzYWJsZVJpcHBsZToiZGlzYWJsZVJpcHBsZSIsYXJpYUxhYmVsbGVkYnk6WyJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhTGFiZWxsZWRieSJdLHRhYkluZGV4OiJ0YWJJbmRleCIsYXBwZWFyYW5jZToiYXBwZWFyYW5jZSIsY2hlY2tlZDoiY2hlY2tlZCIsZGlzYWJsZWQ6ImRpc2FibGVkIixpZDoiaWQiLG5hbWU6Im5hbWUiLGFyaWFMYWJlbDpbImFyaWEtbGFiZWwiLCJhcmlhTGFiZWwiXSx2YWx1ZToidmFsdWUifSxvdXRwdXRzOntjaGFuZ2U6ImNoYW5nZSJ9LGV4cG9ydEFzOlsibWF0QnV0dG9uVG9nZ2xlIl0sZmVhdHVyZXM6W2dtXSxuZ0NvbnRlbnRTZWxlY3RvcnM6WyIqIl0sZGVjbHM6Nix2YXJzOjksY29uc3RzOltbInR5cGUiLCJidXR0b24iLDEsIm1hdC1idXR0b24tdG9nZ2xlLWJ1dHRvbiIsIm1hdC1mb2N1cy1pbmRpY2F0b3IiLDMsImlkIiwiZGlzYWJsZWQiLCJjbGljayJdLFsiYnV0dG9uIiwiIl0sWzEsIm1hdC1idXR0b24tdG9nZ2xlLWxhYmVsLWNvbnRlbnQiXSxbMSwibWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheSJdLFsibWF0UmlwcGxlIiwiIiwxLCJtYXQtYnV0dG9uLXRvZ2dsZS1yaXBwbGUiLDMsIm1hdFJpcHBsZVRyaWdnZXIiLCJtYXRSaXBwbGVEaXNhYmxlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7aWYoMSZlJiYoVnUoKSxPdSgwLCJidXR0b24iLDAsMSksTnUoImNsaWNrIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLl9vbkJ1dHRvbkNsaWNrKCl9KSksT3UoMiwic3BhbiIsMiksanUoMyksUHUoKSxQdSgpLHd1KDQsInNwYW4iLDMpLHd1KDUsInNwYW4iLDQpKSwyJmUpe2NvbnN0IHQ9R20oMSk7dnUoImlkIixuLmJ1dHRvbklkKSgiZGlzYWJsZWQiLG4uZGlzYWJsZWR8fG51bGwpLE5tKCJ0YWJpbmRleCIsbi5kaXNhYmxlZD8tMTpuLnRhYkluZGV4KSgiYXJpYS1wcmVzc2VkIixuLmNoZWNrZWQpKCJuYW1lIixuLm5hbWV8fG51bGwpKCJhcmlhLWxhYmVsIixuLmFyaWFMYWJlbCkoImFyaWEtbGFiZWxsZWRieSIsbi5hcmlhTGFiZWxsZWRieSksSmMoNSksdnUoIm1hdFJpcHBsZVRyaWdnZXIiLHQpKCJtYXRSaXBwbGVEaXNhYmxlZCIsbi5kaXNhYmxlUmlwcGxlfHxuLmRpc2FibGVkKX19LGRpcmVjdGl2ZXM6W3BIXSxzdHlsZXM6WyIubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZSwubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXB7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTppbmxpbmUtZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjtib3JkZXItcmFkaXVzOjJweDstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnR9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZSwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cHtvdXRsaW5lOnNvbGlkIDFweH0ubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkLC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJke2JvcmRlci1yYWRpdXM6NHB4fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJke291dGxpbmU6MH0ubWF0LWJ1dHRvbi10b2dnbGUtdmVydGljYWx7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5tYXQtYnV0dG9uLXRvZ2dsZS12ZXJ0aWNhbCAubWF0LWJ1dHRvbi10b2dnbGUtbGFiZWwtY29udGVudHtkaXNwbGF5OmJsb2NrfS5tYXQtYnV0dG9uLXRvZ2dsZXt3aGl0ZS1zcGFjZTpub3dyYXA7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1idXR0b24tdG9nZ2xlIC5tYXQtaWNvbiBzdmd7dmVydGljYWwtYWxpZ246dG9wfS5tYXQtYnV0dG9uLXRvZ2dsZS5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtvcGFjaXR5OjF9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWJ1dHRvbi10b2dnbGUuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouNX0ubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZDpub3QoLm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVkKTpob3ZlciAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi4wNH0ubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVkKSAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi4xMn0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWQpIC5tYXQtYnV0dG9uLXRvZ2dsZS1mb2N1cy1vdmVybGF5e29wYWNpdHk6LjV9QG1lZGlhKGhvdmVyOiBub25lKXsubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZDpub3QoLm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVkKTpob3ZlciAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtkaXNwbGF5Om5vbmV9fS5tYXQtYnV0dG9uLXRvZ2dsZS1sYWJlbC1jb250ZW50ey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtkaXNwbGF5OmlubGluZS1ibG9jaztsaW5lLWhlaWdodDozNnB4O3BhZGRpbmc6MCAxNnB4O3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtYnV0dG9uLXRvZ2dsZS1sYWJlbC1jb250ZW50e3BhZGRpbmc6MCAxMnB4fS5tYXQtYnV0dG9uLXRvZ2dsZS1sYWJlbC1jb250ZW50Pip7dmVydGljYWwtYWxpZ246bWlkZGxlfS5tYXQtYnV0dG9uLXRvZ2dsZS1mb2N1cy1vdmVybGF5e2JvcmRlci1yYWRpdXM6aW5oZXJpdDtwb2ludGVyLWV2ZW50czpub25lO29wYWNpdHk6MDt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZX0ubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZCAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtib3JkZXItYm90dG9tOnNvbGlkIDM2cHh9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZCAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi41O2hlaWdodDowfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWQubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtib3JkZXItYm90dG9tOnNvbGlkIDUwMHB4fS5tYXQtYnV0dG9uLXRvZ2dsZSAubWF0LWJ1dHRvbi10b2dnbGUtcmlwcGxle3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmV9Lm1hdC1idXR0b24tdG9nZ2xlLWJ1dHRvbntib3JkZXI6MDtiYWNrZ3JvdW5kOm5vbmU7Y29sb3I6aW5oZXJpdDtwYWRkaW5nOjA7bWFyZ2luOjA7Zm9udDppbmhlcml0O291dGxpbmU6bm9uZTt3aWR0aDoxMDAlO2N1cnNvcjpwb2ludGVyfS5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZCAubWF0LWJ1dHRvbi10b2dnbGUtYnV0dG9ue2N1cnNvcjpkZWZhdWx0fS5tYXQtYnV0dG9uLXRvZ2dsZS1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9XG4iXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSx3aHQuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpPaHQsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W0NodF19XX0se3R5cGU6SGh9LHt0eXBlOmNofSx7dHlwZTpwen0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOlJyLGFyZ3M6WyJ0YWJpbmRleCJdfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbX2h0XX1dfV0sd2h0LnByb3BEZWNvcmF0b3JzPXthcmlhTGFiZWw6W3t0eXBlOnlfLGFyZ3M6WyJhcmlhLWxhYmVsIl19XSxhcmlhTGFiZWxsZWRieTpbe3R5cGU6eV8sYXJnczpbImFyaWEtbGFiZWxsZWRieSJdfV0sX2J1dHRvbkVsZW1lbnQ6W3t0eXBlOkZyLGFyZ3M6WyJidXR0b24iXX1dLGlkOlt7dHlwZTp5X31dLG5hbWU6W3t0eXBlOnlffV0sdmFsdWU6W3t0eXBlOnlffV0sdGFiSW5kZXg6W3t0eXBlOnlffV0sYXBwZWFyYW5jZTpbe3R5cGU6eV99XSxjaGVja2VkOlt7dHlwZTp5X31dLGRpc2FibGVkOlt7dHlwZTp5X31dLGNoYW5nZTpbe3R5cGU6X199XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYih3aHQsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoibWF0LWJ1dHRvbi10b2dnbGUiLHRlbXBsYXRlOic8YnV0dG9uICNidXR0b24gY2xhc3M9Im1hdC1idXR0b24tdG9nZ2xlLWJ1dHRvbiBtYXQtZm9jdXMtaW5kaWNhdG9yIlxuICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgIFtpZF09ImJ1dHRvbklkIlxuICAgICAgICBbYXR0ci50YWJpbmRleF09ImRpc2FibGVkID8gLTEgOiB0YWJJbmRleCJcbiAgICAgICAgW2F0dHIuYXJpYS1wcmVzc2VkXT0iY2hlY2tlZCJcbiAgICAgICAgW2Rpc2FibGVkXT0iZGlzYWJsZWQgfHwgbnVsbCJcbiAgICAgICAgW2F0dHIubmFtZV09Im5hbWUgfHwgbnVsbCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09ImFyaWFMYWJlbCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT0iYXJpYUxhYmVsbGVkYnkiXG4gICAgICAgIChjbGljayk9Il9vbkJ1dHRvbkNsaWNrKCkiPlxuICA8c3BhbiBjbGFzcz0ibWF0LWJ1dHRvbi10b2dnbGUtbGFiZWwtY29udGVudCI+XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICA8L3NwYW4+XG48L2J1dHRvbj5cblxuPHNwYW4gY2xhc3M9Im1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXkiPjwvc3Bhbj5cbjxzcGFuIGNsYXNzPSJtYXQtYnV0dG9uLXRvZ2dsZS1yaXBwbGUiIG1hdFJpcHBsZVxuICAgICBbbWF0UmlwcGxlVHJpZ2dlcl09ImJ1dHRvbiJcbiAgICAgW21hdFJpcHBsZURpc2FibGVkXT0idGhpcy5kaXNhYmxlUmlwcGxlIHx8IHRoaXMuZGlzYWJsZWQiPlxuPC9zcGFuPlxuJyxlbmNhcHN1bGF0aW9uOlBvLk5vbmUsZXhwb3J0QXM6Im1hdEJ1dHRvblRvZ2dsZSIsY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaCxpbnB1dHM6WyJkaXNhYmxlUmlwcGxlIl0saG9zdDp7IltjbGFzcy5tYXQtYnV0dG9uLXRvZ2dsZS1zdGFuZGFsb25lXSI6IiFidXR0b25Ub2dnbGVHcm91cCIsIltjbGFzcy5tYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2VkXSI6ImNoZWNrZWQiLCJbY2xhc3MubWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWRdIjoiZGlzYWJsZWQiLCJbY2xhc3MubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZF0iOidhcHBlYXJhbmNlID09PSAic3RhbmRhcmQiJyxjbGFzczoibWF0LWJ1dHRvbi10b2dnbGUiLCJbYXR0ci5hcmlhLWxhYmVsXSI6Im51bGwiLCJbYXR0ci5hcmlhLWxhYmVsbGVkYnldIjoibnVsbCIsIlthdHRyLmlkXSI6ImlkIiwiW2F0dHIubmFtZV0iOiJudWxsIiwiKGZvY3VzKSI6ImZvY3VzKCkiLHJvbGU6InByZXNlbnRhdGlvbiJ9LHN0eWxlczpbIi5tYXQtYnV0dG9uLXRvZ2dsZS1zdGFuZGFsb25lLC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cHtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmlubGluZS1mbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdzt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO2JvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYnV0dG9uLXRvZ2dsZS1zdGFuZGFsb25lLC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1idXR0b24tdG9nZ2xlLWdyb3Vwe291dGxpbmU6c29saWQgMXB4fS5tYXQtYnV0dG9uLXRvZ2dsZS1zdGFuZGFsb25lLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQsLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmR7Ym9yZGVyLXJhZGl1czo0cHh9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkLC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmR7b3V0bGluZTowfS5tYXQtYnV0dG9uLXRvZ2dsZS12ZXJ0aWNhbHtmbGV4LWRpcmVjdGlvbjpjb2x1bW59Lm1hdC1idXR0b24tdG9nZ2xlLXZlcnRpY2FsIC5tYXQtYnV0dG9uLXRvZ2dsZS1sYWJlbC1jb250ZW50e2Rpc3BsYXk6YmxvY2t9Lm1hdC1idXR0b24tdG9nZ2xle3doaXRlLXNwYWNlOm5vd3JhcDtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LWJ1dHRvbi10b2dnbGUgLm1hdC1pY29uIHN2Z3t2ZXJ0aWNhbC1hbGlnbjp0b3B9Lm1hdC1idXR0b24tdG9nZ2xlLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLXRvZ2dsZS1mb2N1cy1vdmVybGF5e29wYWNpdHk6MX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYnV0dG9uLXRvZ2dsZS5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi41fS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkOm5vdCgubWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWQpOmhvdmVyIC5tYXQtYnV0dG9uLXRvZ2dsZS1mb2N1cy1vdmVybGF5e29wYWNpdHk6LjA0fS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWQpIC5tYXQtYnV0dG9uLXRvZ2dsZS1mb2N1cy1vdmVybGF5e29wYWNpdHk6LjEyfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZCkgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouNX1AbWVkaWEoaG92ZXI6IG5vbmUpey5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkOm5vdCgubWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWQpOmhvdmVyIC5tYXQtYnV0dG9uLXRvZ2dsZS1mb2N1cy1vdmVybGF5e2Rpc3BsYXk6bm9uZX19Lm1hdC1idXR0b24tdG9nZ2xlLWxhYmVsLWNvbnRlbnR7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlLWxhYmVsLWNvbnRlbnR7cGFkZGluZzowIDEycHh9Lm1hdC1idXR0b24tdG9nZ2xlLWxhYmVsLWNvbnRlbnQ+Knt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Lm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7Ym9yZGVyLXJhZGl1czppbmhlcml0O3BvaW50ZXItZXZlbnRzOm5vbmU7b3BhY2l0eTowO3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlfS5tYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2VkIC5tYXQtYnV0dG9uLXRvZ2dsZS1mb2N1cy1vdmVybGF5e2JvcmRlci1ib3R0b206c29saWQgMzZweH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2VkIC5tYXQtYnV0dG9uLXRvZ2dsZS1mb2N1cy1vdmVybGF5e29wYWNpdHk6LjU7aGVpZ2h0OjB9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZC5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtYnV0dG9uLXRvZ2dsZS1mb2N1cy1vdmVybGF5e2JvcmRlci1ib3R0b206c29saWQgNTAwcHh9Lm1hdC1idXR0b24tdG9nZ2xlIC5tYXQtYnV0dG9uLXRvZ2dsZS1yaXBwbGV7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6bm9uZX0ubWF0LWJ1dHRvbi10b2dnbGUtYnV0dG9ue2JvcmRlcjowO2JhY2tncm91bmQ6bm9uZTtjb2xvcjppbmhlcml0O3BhZGRpbmc6MDttYXJnaW46MDtmb250OmluaGVyaXQ7b3V0bGluZTpub25lO3dpZHRoOjEwMCU7Y3Vyc29yOnBvaW50ZXJ9Lm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVkIC5tYXQtYnV0dG9uLXRvZ2dsZS1idXR0b257Y3Vyc29yOmRlZmF1bHR9Lm1hdC1idXR0b24tdG9nZ2xlLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH1cbiJdfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6T2h0LGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltDaHRdfV19LHt0eXBlOkhofSx7dHlwZTpjaH0se3R5cGU6cHp9LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpScixhcmdzOlsidGFiaW5kZXgiXX1dfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W19odF19XX1dfSkse2FyaWFMYWJlbGxlZGJ5Olt7dHlwZTp5XyxhcmdzOlsiYXJpYS1sYWJlbGxlZGJ5Il19XSxjaGFuZ2U6W3t0eXBlOl9ffV0sdGFiSW5kZXg6W3t0eXBlOnlffV0sYXBwZWFyYW5jZTpbe3R5cGU6eV99XSxjaGVja2VkOlt7dHlwZTp5X31dLGRpc2FibGVkOlt7dHlwZTp5X31dLGlkOlt7dHlwZTp5X31dLG5hbWU6W3t0eXBlOnlffV0sYXJpYUxhYmVsOlt7dHlwZTp5XyxhcmdzOlsiYXJpYS1sYWJlbCJdfV0sX2J1dHRvbkVsZW1lbnQ6W3t0eXBlOkZyLGFyZ3M6WyJidXR0b24iXX1dLHZhbHVlOlt7dHlwZTp5X31dfSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyBraHR7fWtodC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8a2h0KX0sa2h0Lsm1bW9kPVpvKHt0eXBlOmtodH0pLGtodC7JtWluaj1jbyh7aW1wb3J0czpbW1R6LG1IXSxUel19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKGtodCx7ZGVjbGFyYXRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuW09odCx3aHRdfSxpbXBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW1R6LG1IXX0sZXhwb3J0czpmdW5jdGlvbigpe3JldHVybltUeixPaHQsd2h0XX19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGtodCxbe3R5cGU6a18sYXJnczpbe2ltcG9ydHM6W1R6LG1IXSxleHBvcnRzOltUeixPaHQsd2h0XSxkZWNsYXJhdGlvbnM6W09odCx3aHRdfV19XSxudWxsLG51bGwpO2NsYXNzIFNodHt9U2h0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxTaHQpfSxTaHQuybVtb2Q9Wm8oe3R5cGU6U2h0fSksU2h0Lsm1aW5qPWNvKHtpbXBvcnRzOltbQnYsbVddXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oU2h0LHtkZWNsYXJhdGlvbnM6W2tndF0saW1wb3J0czpbQnYsbVddLGV4cG9ydHM6W2tndF19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFNodCxbe3R5cGU6a18sYXJnczpbe2RlY2xhcmF0aW9uczpba2d0XSxleHBvcnRzOltrZ3RdLGltcG9ydHM6W0J2LG1XXX1dfV0sbnVsbCxudWxsKTtjbGFzcyBEaHR7fURodC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8RGh0KX0sRGh0Lsm1bW9kPVpvKHt0eXBlOkRodH0pLERodC7JtWluaj1jbyh7aW1wb3J0czpbW0J2LFNodCx6SCxraHQseVksZEcsbVcsUFgsY1RdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oRGh0LHtkZWNsYXJhdGlvbnM6W0FndCxEZ3QsRWd0XSxpbXBvcnRzOltCdixTaHQsekgsa2h0LHlZLGRHLG1XLFBYLGNUXSxleHBvcnRzOltBZ3RdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihEaHQsW3t0eXBlOmtfLGFyZ3M6W3tkZWNsYXJhdGlvbnM6W0FndCxEZ3QsRWd0XSxleHBvcnRzOltBZ3RdLGltcG9ydHM6W0J2LFNodCx6SCxraHQseVksZEcsbVcsUFgsY1RdfV19XSxudWxsLG51bGwpO2NsYXNzIEVodHt9RWh0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxFaHQpfSxFaHQuybVtb2Q9Wm8oe3R5cGU6RWh0fSksRWh0Lsm1aW5qPWNvKHtpbXBvcnRzOltbYmh0LEJ2LExndCxmMSx6SCxkRyxBWSxEaHQsaUZdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oRWh0LHtkZWNsYXJhdGlvbnM6W2RndCxwZ3QsZmd0LGhndCx5Z3QsQ2d0LHpndCxIZ3QsVTIsVzIsT2d0LFBndF0saW1wb3J0czpbYmh0LEJ2LExndCxmMSx6SCxkRyxBWSxEaHQsaUZdLGV4cG9ydHM6W0hndF19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEVodCxbe3R5cGU6a18sYXJnczpbe2RlY2xhcmF0aW9uczpbZGd0LHBndCxmZ3QsaGd0LHlndCxDZ3Qsemd0LEhndCxVMixXMixPZ3QsUGd0XSxleHBvcnRzOltIZ3RdLGltcG9ydHM6W2JodCxCdixMZ3QsZjEsekgsZEcsQVksRGh0LGlGXX1dfV0sbnVsbCxudWxsKTtjbGFzcyBBaHR7fWZ1bmN0aW9uIFJodCgpe3JldHVyblt7YWN0aW9uQ3JlYXRvcjpsUSxhbGVydEZyb21BY3Rpb246dD0+e2NvbnN0e3dhc1Bpbm5lZDplLGNhbkNyZWF0ZU5ld1BpbnM6bn09dDtyZXR1cm4gZXx8bj9udWxsOntsb2NhbGl6ZWRNZXNzYWdlOiJNYXggcGluIGxpbWl0IGV4Y2VlZGVkLiBSZW1vdmUgZXhpc3RpbmcgcGlucyBiZWZvcmUgYWRkaW5nIG1vcmUuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9pc3N1ZXMvNDI0MiJ9fX1dfWZ1bmN0aW9uIFRodCgpe3JldHVybiB6ayhXVCwodD0+KHtzY2FsYXJTbW9vdGhpbmc6dH0pKSl9ZnVuY3Rpb24gTmh0KCl7cmV0dXJuIHprKFZULCh0PT4oe2lnbm9yZU91dGxpZXJzOnR9KSkpfWZ1bmN0aW9uIElodCgpe3JldHVybiB6ayhCVCwodD0+KHt0b29sdGlwU29ydFN0cmluZzpTdHJpbmcodCl9KSkpfUFodC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8QWh0KX0sQWh0Lsm1bW9kPVpvKHt0eXBlOkFodH0pLEFodC7JtWluaj1jbyh7aW1wb3J0czpbW0J2LERodCxqZ3QsRWh0XV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKEFodCx7ZGVjbGFyYXRpb25zOltGZ3RdLGltcG9ydHM6W0J2LERodCxqZ3QsRWh0XSxleHBvcnRzOltGZ3RdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihBaHQsW3t0eXBlOmtfLGFyZ3M6W3tkZWNsYXJhdGlvbnM6W0ZndF0sZXhwb3J0czpbRmd0XSxpbXBvcnRzOltCdixEaHQsamd0LEVodF19XX1dLG51bGwsbnVsbCk7Y2xhc3Mgemh0e316aHQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHpodCl9LHpodC7JtW1vZD1abyh7dHlwZTp6aHR9KSx6aHQuybVpbmo9Y28oe3Byb3ZpZGVyczpbe3Byb3ZpZGU6d1EsdXNlRmFjdG9yeTpTUSxkZXBzOltrUV19LHtwcm92aWRlOmtRLHVzZVZhbHVlOkNUfV0saW1wb3J0czpbW0J2LEVELENBLGJxLmZvclBsdWdpbihkUixGZ3QpLGRULEFodCxpUy5mb3JGZWF0dXJlKF9ULENRLHdRKSxMUy5mb3JGZWF0dXJlKFtQUV0pLHZBLnJlZ2lzdGVyQWxlcnRBY3Rpb25zKFJodCksa1IuZGVmaW5lR2xvYmFsU2V0dGluZyhUaHQpLGtSLmRlZmluZUdsb2JhbFNldHRpbmcoTmh0KSxrUi5kZWZpbmVHbG9iYWxTZXR0aW5nKElodCldXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oemh0LHtpbXBvcnRzOltCdixFRCxDQSxicSxkVCxBaHQsb1MsRlMsdkEsa1Isa1Isa1JdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYih6aHQsW3t0eXBlOmtfLGFyZ3M6W3tpbXBvcnRzOltCdixFRCxDQSxicS5mb3JQbHVnaW4oZFIsRmd0KSxkVCxBaHQsaVMuZm9yRmVhdHVyZShfVCxDUSx3USksTFMuZm9yRmVhdHVyZShbUFFdKSx2QS5yZWdpc3RlckFsZXJ0QWN0aW9ucyhSaHQpLGtSLmRlZmluZUdsb2JhbFNldHRpbmcoVGh0KSxrUi5kZWZpbmVHbG9iYWxTZXR0aW5nKE5odCksa1IuZGVmaW5lR2xvYmFsU2V0dGluZyhJaHQpXSxwcm92aWRlcnM6W3twcm92aWRlOndRLHVzZUZhY3Rvcnk6U1EsZGVwczpba1FdfSx7cHJvdmlkZTprUSx1c2VWYWx1ZTpDVH1dLGVudHJ5Q29tcG9uZW50czpbRmd0XX1dfV0sbnVsbCxudWxsKTtjb25zdCBIaHQ9Im5wbWkiO3ZhciBGaHQsTGh0LEJodCxWaHQ7IShmdW5jdGlvbih0KXt0W3QuQU5EPTBdPSJBTkQifSkoRmh0fHwoRmh0PXt9KSksKGZ1bmN0aW9uKHQpe3RbdC5NRVRSSUM9MF09Ik1FVFJJQyIsdFt0Lk9QRVJBVE9SPTFdPSJPUEVSQVRPUiJ9KShMaHR8fChMaHQ9e30pKSwoZnVuY3Rpb24odCl7dFt0LkRFRkFVTFQ9MF09IkRFRkFVTFQiLHRbdC5FTUJFRERJTkdTPTFdPSJFTUJFRERJTkdTIn0pKEJodHx8KEJodD17fSkpLChmdW5jdGlvbih0KXt0W3QuREVTQ0VORElORz0wXT0iREVTQ0VORElORyIsdFt0LkFTQ0VORE5HPTFdPSJBU0NFTkRORyIsdFt0LlNJTUlMQVI9Ml09IlNJTUlMQVIiLHRbdC5ESVNTSU1JTEFSPTNdPSJESVNTSU1JTEFSIn0pKFZodHx8KFZodD17fSkpO2NsYXNzIGpodHt9amh0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxqaHQpfSxqaHQuybVjbXA9VW8oe3R5cGU6amh0LHNlbGVjdG9yczpbWyJucG1pLWluYWN0aXZlLXZpZXciXV0sZGVjbHM6Nix2YXJzOjAsY29uc3RzOltbMSwiY29udGFpbmVyIl0sWzEsInRpdGxlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihPdSgwLCJkaXYiKSxPdSgxLCJkaXYiLDApLE91KDIsImRpdiIsMSksTWYoMywiblBNSSBpcyBpbmFjdGl2ZSBiZWNhdXNlIG5vIGRhdGEgaXMgYXZhaWxhYmxlLiIpLFB1KCksT3UoNCwiZGl2IiksTWYoNSwiIFRvIHVzZSB0aGUgblBNSSwgY2FsY3VsYXRlIG5QTUkgdmFsdWVzLCBhbmQgbG9nIHRoZW0gdXNpbmcgdGhlIHN1bW1hcnkgd3JpdGVyLiAiKSxQdSgpLFB1KCksUHUoKSl9LHN0eWxlczpbIi5jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdIHtcbiAgaGVpZ2h0OiAxMDAlO1xuICBmb250LWZhbWlseTogUm9ib3RvO1xuICBmb250LXNpemU6IDE1cHg7XG4gIHBhZGRpbmc6IDUwcHg7XG59XG5cbi50aXRsZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICBmb250LXNpemU6IDEzNSU7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBtYXJnaW4tYm90dG9tOiAyNXB4O1xufSJdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihqaHQsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoibnBtaS1pbmFjdGl2ZS12aWV3Iix0ZW1wbGF0ZVVybDoiLi9pbmFjdGl2ZV9jb21wb25lbnQubmcuaHRtbCIsc3R5bGVVcmxzOlsiLi9pbmFjdGl2ZV9jb21wb25lbnQuY3NzIl19XX1dLG51bGwsbnVsbCk7Y29uc3QgVWh0PUZrKEhodCksV2h0PXprKFVodCwodD0+dC5wbHVnaW5EYXRhTG9hZGVkLnN0YXRlKSksR2h0PXprKFVodCwodD0+dC5hbm5vdGF0aW9uRGF0YSkpLFlodD16ayhVaHQsKHQ9PnQucnVuVG9NZXRyaWNzKSkscWh0PXprKFVodCwodD0+dC5lbWJlZGRpbmdEYXRhU2V0KSksWmh0PXprKFVodCwodD0+dC5zZWxlY3RlZEFubm90YXRpb25zKSksWGh0PXprKFVodCwodD0+dC5mbGFnZ2VkQW5ub3RhdGlvbnMpKSxLaHQ9emsoVWh0LCh0PT50LmhpZGRlbkFubm90YXRpb25zKSksSmh0PXprKFVodCwodD0+dC5hbm5vdGF0aW9uc1JlZ2V4KSksUWh0PXprKFVodCwodD0+dC5tZXRyaWNzUmVnZXgpKSwkaHQ9emsoVWh0LCh0PT50Lm1ldHJpY0FyaXRobWV0aWMpKSx0YnQ9emsoVWh0LCh0PT50Lm1ldHJpY0ZpbHRlcnMpKSxlYnQ9emsoVWh0LCh0PT50LnNvcnQpKSxuYnQ9emsoVWh0LCh0PT50LnBjRXhwYW5kZWQpKSxvYnQ9emsoVWh0LCh0PT50LmFubm90YXRpb25zRXhwYW5kZWQpKSxpYnQ9emsoVWh0LCh0PT50LnNpZGViYXJFeHBhbmRlZCkpLGFidD16ayhVaHQsKHQ9PnQuc2hvd0NvdW50cykpLHJidD16ayhVaHQsKHQ9PnQuc2hvd0hpZGRlbkFubm90YXRpb25zKSksc2J0PXprKFVodCwodD0+dC52aWV3QWN0aXZlKSksbGJ0PXprKFVodCwodD0+dC5zaWRlYmFyV2lkdGgpKSxjYnQ9emsoVWh0LCh0PT50LmVtYmVkZGluZ3NNZXRyaWMpKSxkYnQ9emsoVWh0LCh0PT50LmVtYmVkZGluZ3NTaWRlYmFyV2lkdGgpKSxwYnQ9emsoVWh0LCh0PT50LmVtYmVkZGluZ3NTaWRlYmFyRXhwYW5kZWQpKSxtYnQ9V3coIltOUE1JXSBuUE1JIExvYWRlZCIpLHVidD1XdygiW05QTUldIG5QTUkgUGx1Z2luIERhdGEgUmVxdWVzdGVkIiksZmJ0PVd3KCJbTlBNSV0gblBNSSBQbHVnaW4gRGF0YSBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxnYnQ9V3coIltOUE1JXSBuUE1JIFBsdWdpbiBEYXRhIFJlcXVlc3QgRmFpbGVkIiksaGJ0PVd3KCJbTlBNSV0gQWRkaW5nL1JlbW92aW5nIEFubm90YXRpb25zIHRvL2Zyb20gU2VsZWN0ZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxiYnQ9V3coIltOUE1JXSBBbm5vdGF0aW9ucyBTZXQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSx5YnQ9V3coIltOUE1JXSBDbGVhcmluZyB0aGUgQW5ub3RhdGlvbiBTZWxlY3Rpb24iKSxfYnQ9V3coIltOUE1JXSBBZGRpbmcvUmVtb3ZpbmcgQW5ub3RhdGlvbnMgdG8vZnJvbSBGbGFnZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksQ2J0PVd3KCJbTlBNSV0gQWRkaW5nL1JlbW92aW5nIEFubm90YXRpb25zIHRvL2Zyb20gSGlkZGVuIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksTWJ0PVd3KCJbTlBNSV0gQW5ub3RhdGlvbnMgUmVnZXggQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHZidD1XdygiW05QTUldIE1ldHJpY3MgUmVnZXggQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHhidD1XdygiW05QTUldIE1ldHJpYyBGaWx0ZXIgQWRkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxPYnQ9V3coIltOUE1JXSBNZXRyaWMgRmlsdGVyIFJlbW92ZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxQYnQ9V3coIltOUE1JXSBNZXRyaWMgRmlsdGVyIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSx3YnQ9V3coIltOUE1JXSBBbm5vdGF0aW9uIFNvcnQgQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGtidD1XdygiW05QTUldIFNpbWlsYXJpdHkgU29ydCBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksU2J0PVd3KCJbTlBNSV0gVG9nZ2xlIFBDIEV4cGFuZGVkIiksRGJ0PVd3KCJbTlBNSV0gVG9nZ2xlIEFubm90YXRpb25zIEV4cGFuZGVkIiksRWJ0PVd3KCJbTlBNSV0gVG9nZ2xlIFNpZGViYXIgRXhwYW5kZWQiKSxBYnQ9V3coIltOUE1JXSBTaG93IENvdW50cyBUb2dnbGVkIiksUmJ0PVd3KCJbTlBNSV0gU2hvdyBIaWRkZW4gQW5ub3RhdGlvbnMgVG9nZ2xlZCIpLFRidD1XdygiW05QTUldIEVtYmVkZGluZ3MgVmlldyBUb2dnbGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksTmJ0PVd3KCJbTlBNSV0gU2lkZWJhciBXaWR0aCBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksSWJ0PVd3KCJbTlBNSV0gRW1iZWRkaW5ncyBTaWRlYmFyIFdpZHRoIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSx6YnQ9V3coIltOUE1JXSBUb2dnbGUgRW1iZWRkaW5ncyBTaWRlYmFyIEV4cGFuZGVkIiksSGJ0PVd3KCJbTlBNSV0gQ2hhbmdlIEVtYmVkZGluZyBEYXRhU2V0Iix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSk7ZnVuY3Rpb24gRmJ0KHQpe3JldHVybiB0LnN0YXJ0c1dpdGgoImNvdW50QCIpfWZ1bmN0aW9uIExidCh0KXtyZXR1cm4gdC5zdGFydHNXaXRoKCJuUE1JQCIpfHx0LnN0YXJ0c1dpdGgoIm5QTUlfZGlmZkAiKX1mdW5jdGlvbiBCYnQodCl7cmV0dXJuIHQuc3RhcnRzV2l0aCgiblBNSUAiKX1mdW5jdGlvbiBWYnQodCl7cmV0dXJuIHQuc3BsaXQoIkAiLDIpWzFdfWNvbnN0IGpidD1tUyh7cGx1Z2luRGF0YUxvYWRlZDp7c3RhdGU6QkUuTk9UX0xPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6bnVsbH0sYW5ub3RhdGlvbkRhdGE6e30scnVuVG9NZXRyaWNzOnt9LHNlbGVjdGVkQW5ub3RhdGlvbnM6W10sZmxhZ2dlZEFubm90YXRpb25zOltdLGhpZGRlbkFubm90YXRpb25zOltdLGFubm90YXRpb25zUmVnZXg6IiIsbWV0cmljc1JlZ2V4OiIiLG1ldHJpY0FyaXRobWV0aWM6W10sbWV0cmljRmlsdGVyczp7fSxzb3J0OnttZXRyaWM6IiIsb3JkZXI6Vmh0LkRFU0NFTkRJTkd9LHBjRXhwYW5kZWQ6ITAsYW5ub3RhdGlvbnNFeHBhbmRlZDohMCxzaWRlYmFyRXhwYW5kZWQ6ITAsc2hvd0NvdW50czohMCxzaG93SGlkZGVuQW5ub3RhdGlvbnM6ITEsc2lkZWJhcldpZHRoOjMwMCx2aWV3QWN0aXZlOkJodC5ERUZBVUxULGVtYmVkZGluZ3NNZXRyaWM6IiIsZW1iZWRkaW5nc1NpZGViYXJXaWR0aDo1MDAsZW1iZWRkaW5nc1NpZGViYXJFeHBhbmRlZDohMH0scFModWJ0LCh0PT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3BsdWdpbkRhdGFMb2FkZWQ6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQucGx1Z2luRGF0YUxvYWRlZCkse3N0YXRlOkJFLkxPQURJTkd9KX0pKSkscFMoZ2J0LCh0PT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3BsdWdpbkRhdGFMb2FkZWQ6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQucGx1Z2luRGF0YUxvYWRlZCkse3N0YXRlOkJFLkZBSUxFRH0pfSkpKSxwUyhmYnQsKCh0LHthbm5vdGF0aW9uRGF0YTplLG1ldHJpY3M6bixlbWJlZGRpbmdEYXRhU2V0Om99KT0+e2NvbnN0IGk9e307Zm9yKGNvbnN0IHQgaW4gbil7aVt0XT1bXTtmb3IoY29uc3QgZSBvZiBuW3RdKUxidChlKSYmaVt0XS5wdXNoKGUpfXJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3J1blRvTWV0cmljczppLGFubm90YXRpb25EYXRhOmUsZW1iZWRkaW5nRGF0YVNldDpvLHBsdWdpbkRhdGFMb2FkZWQ6e3N0YXRlOkJFLkxPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6RGF0ZS5ub3coKX19KX0pKSxwUyhoYnQsKCh0LHthbm5vdGF0aW9uczplfSk9Pntjb25zdCBuPW5ldyBTZXQoWy4uLnQuc2VsZWN0ZWRBbm5vdGF0aW9ucywuLi5lXSk7aWYobi5zaXplPT09dC5zZWxlY3RlZEFubm90YXRpb25zLmxlbmd0aClmb3IoY29uc3QgdCBvZiBlKW4uZGVsZXRlKHQpO3JldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3NlbGVjdGVkQW5ub3RhdGlvbnM6Wy4uLm5dfSl9KSkscFMoYmJ0LCgodCx7YW5ub3RhdGlvbnM6ZX0pPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3NlbGVjdGVkQW5ub3RhdGlvbnM6ZX0pKSkscFMoeWJ0LCh0PT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3NlbGVjdGVkQW5ub3RhdGlvbnM6W119KSkpLHBTKF9idCwoKHQse2Fubm90YXRpb25zOmV9KT0+e2NvbnN0IG49bmV3IFNldChbLi4udC5mbGFnZ2VkQW5ub3RhdGlvbnMsLi4uZV0pO2lmKG4uc2l6ZT09PXQuZmxhZ2dlZEFubm90YXRpb25zLmxlbmd0aClmb3IoY29uc3QgdCBvZiBlKW4uZGVsZXRlKHQpO3JldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2ZsYWdnZWRBbm5vdGF0aW9uczpbLi4ubl0sc2VsZWN0ZWRBbm5vdGF0aW9uczpbXX0pfSkpLHBTKENidCwoKHQse2Fubm90YXRpb25zOmV9KT0+e2NvbnN0IG49bmV3IFNldChbLi4udC5oaWRkZW5Bbm5vdGF0aW9ucywuLi5lXSk7aWYobi5zaXplPT09dC5oaWRkZW5Bbm5vdGF0aW9ucy5sZW5ndGgpZm9yKGNvbnN0IHQgb2YgZSluLmRlbGV0ZSh0KTtyZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtoaWRkZW5Bbm5vdGF0aW9uczpbLi4ubl0sc2VsZWN0ZWRBbm5vdGF0aW9uczpbXX0pfSkpLHBTKE1idCwoKHQse3JlZ2V4OmV9KT0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHthbm5vdGF0aW9uc1JlZ2V4OmV9KSkpLHBTKHZidCwoKHQse3JlZ2V4OmV9KT0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHttZXRyaWNzUmVnZXg6ZX0pKSkscFMoeGJ0LCgodCx7bWV0cmljOmV9KT0+e2lmKHQubWV0cmljRmlsdGVyc1tlXSlyZXR1cm4gdDtjb25zdCBuPVtdO3JldHVybiAwIT09dC5tZXRyaWNBcml0aG1ldGljLmxlbmd0aCYmbi5wdXNoKHtraW5kOkxodC5PUEVSQVRPUixvcGVyYXRvcjpGaHQuQU5EfSksbi5wdXNoKHtraW5kOkxodC5NRVRSSUMsbWV0cmljOmV9KSxPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse21ldHJpY0FyaXRobWV0aWM6Wy4uLnQubWV0cmljQXJpdGhtZXRpYywuLi5uXSxtZXRyaWNGaWx0ZXJzOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0Lm1ldHJpY0ZpbHRlcnMpLHtbZV06e21heDoxLG1pbjotMSxpbmNsdWRlTmFOOiExfX0pLHNvcnQ6e21ldHJpYzplLG9yZGVyOlZodC5ERVNDRU5ESU5HfX0pfSkpLHBTKE9idCwoKHQse21ldHJpYzplfSk9PntpZighdC5tZXRyaWNGaWx0ZXJzW2VdKXJldHVybiB0O2xldCBuPTAsbz0wLGk9Mjtjb25zdCBhPWFSKHQubWV0cmljRmlsdGVycyxbInN5bWJvbCI9PXR5cGVvZiBlP2U6ZSsiIl0pO2Zvcihjb25zdCBvIGluIHQubWV0cmljQXJpdGhtZXRpYyl7Y29uc3QgaT10Lm1ldHJpY0FyaXRobWV0aWNbb107aS5raW5kPT09TGh0Lk1FVFJJQyYmaS5tZXRyaWM9PT1lJiYobj1wYXJzZUludChvKSl9cmV0dXJuIDAhPT1uJiYobz1uLTEsaT1uKzEpLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7bWV0cmljQXJpdGhtZXRpYzpbLi4udC5tZXRyaWNBcml0aG1ldGljLnNsaWNlKDAsbyksLi4udC5tZXRyaWNBcml0aG1ldGljLnNsaWNlKGkpXSxtZXRyaWNGaWx0ZXJzOmF9KX0pKSxwUyhQYnQsKCh0LHttZXRyaWM6ZSxtYXg6bixtaW46byxpbmNsdWRlTmFOOml9KT0+dC5tZXRyaWNGaWx0ZXJzW2VdP09iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7bWV0cmljRmlsdGVyczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5tZXRyaWNGaWx0ZXJzKSx7W2VdOnttYXg6bixtaW46byxpbmNsdWRlTmFOOml9fSl9KTp0KSkscFMod2J0LCgodCx7bWV0cmljOmV9KT0+e2NvbnN0IG49e21ldHJpYzplLG9yZGVyOlZodC5ERVNDRU5ESU5HfTtyZXR1cm4gdC5zb3J0Lm1ldHJpYz09PWUmJnQuc29ydC5vcmRlcj09PVZodC5ERVNDRU5ESU5HJiYobi5vcmRlcj1WaHQuQVNDRU5ETkcpLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7c29ydDpufSl9KSkscFMoa2J0LCgodCx7YW5ub3RhdGlvbjplfSk9Pntjb25zdCBuPXttZXRyaWM6ZSxvcmRlcjpWaHQuU0lNSUxBUn07cmV0dXJuIHQuc29ydC5tZXRyaWM9PT1lJiZ0LnNvcnQub3JkZXI9PT1WaHQuU0lNSUxBUiYmKG4ub3JkZXI9Vmh0LkRJU1NJTUlMQVIpLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7c29ydDpufSl9KSkscFMoU2J0LCh0PT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3BjRXhwYW5kZWQ6IXQucGNFeHBhbmRlZH0pKSkscFMoRGJ0LCh0PT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2Fubm90YXRpb25zRXhwYW5kZWQ6IXQuYW5ub3RhdGlvbnNFeHBhbmRlZH0pKSkscFMoRWJ0LCh0PT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3NpZGViYXJFeHBhbmRlZDohdC5zaWRlYmFyRXhwYW5kZWR9KSkpLHBTKEFidCwodD0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtzaG93Q291bnRzOiF0LnNob3dDb3VudHN9KSkpLHBTKFJidCwodD0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtzaG93SGlkZGVuQW5ub3RhdGlvbnM6IXQuc2hvd0hpZGRlbkFubm90YXRpb25zfSkpKSxwUyhUYnQsKCh0LHttZXRyaWM6ZX0pPT57bGV0IG49Qmh0LkVNQkVERElOR1Msbz1lO3JldHVybiBlPT09dC5lbWJlZGRpbmdzTWV0cmljJiYobj1CaHQuREVGQVVMVCxvPSIiKSxPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3ZpZXdBY3RpdmU6bixlbWJlZGRpbmdzTWV0cmljOm99KX0pKSxwUyhOYnQsKCh0LHtzaWRlYmFyV2lkdGg6ZX0pPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3NpZGViYXJXaWR0aDplfSkpKSxwUyhJYnQsKCh0LHtzaWRlYmFyV2lkdGg6ZX0pPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2VtYmVkZGluZ3NTaWRlYmFyV2lkdGg6ZX0pKSkscFMoemJ0LCh0PT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2VtYmVkZGluZ3NTaWRlYmFyRXhwYW5kZWQ6IXQuZW1iZWRkaW5nc1NpZGViYXJFeHBhbmRlZH0pKSkscFMoSGJ0LCgodCx7ZGF0YVNldDplfSk9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7ZW1iZWRkaW5nRGF0YVNldDplfSkpKSk7ZnVuY3Rpb24gVWJ0KHQsZSl7cmV0dXJuIGpidCh0LGUpfWZ1bmN0aW9uIFdidCh0LGUpezEmdCYmd3UoMCwibWF0LWljb24iLDcpfWZ1bmN0aW9uIEdidCh0LGUpe2lmKDEmdCYmKE91KDAsIm1hdC1vcHRpb24iLDgpLE1mKDEpLFB1KCkpLDImdCl7Y29uc3QgdD1lLiRpbXBsaWNpdDt2dSgidmFsdWUiLHQpLEpjKDEpLHZmKHQpfX1jbGFzcyBZYnR7Y29uc3RydWN0b3IoKXt0aGlzLm9uUmVnZXhGaWx0ZXJWYWx1ZUNoYW5nZT1uZXcgQWIsdGhpcy5vbkFkZEZpbHRlcj1uZXcgQWJ9b25PcHRpb25TZWxlY3RlZCh0LGUpe3RoaXMub25BZGRGaWx0ZXIuZW1pdCh0Lm9wdGlvbi52YWx1ZSksZS52YWx1ZT0iIn19WWJ0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxZYnQpfSxZYnQuybVjbXA9VW8oe3R5cGU6WWJ0LHNlbGVjdG9yczpbWyJtZXRyaWMtc2VhcmNoLWNvbXBvbmVudCJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MiZlJiZhZigidmFsaWQiLG4uaXNSZWdleEZpbHRlclZhbGlkKX0saW5wdXRzOntjb21wbGV0aW9uczoiY29tcGxldGlvbnMiLHJlZ2V4RmlsdGVyVmFsdWU6InJlZ2V4RmlsdGVyVmFsdWUiLGlzUmVnZXhGaWx0ZXJWYWxpZDoiaXNSZWdleEZpbHRlclZhbGlkIn0sb3V0cHV0czp7b25SZWdleEZpbHRlclZhbHVlQ2hhbmdlOiJvblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2UiLG9uQWRkRmlsdGVyOiJvbkFkZEZpbHRlciJ9LGRlY2xzOjcsdmFyczo0LGNvbnN0czpbWyJzdmdJY29uIiwic2VhcmNoXzI0cHgiXSxbIm1hdElucHV0IiwiIiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwicGxhY2Vob2xkZXIiLCJBZGQgTWV0cmljIEZpbHRlciIsMywidmFsdWUiLCJtYXRBdXRvY29tcGxldGUiLCJpbnB1dCJdLFsibWF0SW5wdXQiLCIiXSxbInN2Z0ljb24iLCJlcnJvcl8yNHB4IiwiY2xhc3MiLCJlcnJvci1pY29uIiwibWF0VG9vbHRpcCIsIkludmFsaWQgcmVnZXggZmlsdGVyLiBUaGUgcmVzdWx0IG1heSBiZSBzdGFsZS4iLDQsIm5nSWYiXSxbImF1dG9BY3RpdmVGaXJzdE9wdGlvbiIsIiIsMywib3B0aW9uU2VsZWN0ZWQiXSxbImZpbHRlck1hdGNoZXMiLCJtYXRBdXRvY29tcGxldGUiXSxbMywidmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsic3ZnSWNvbiIsImVycm9yXzI0cHgiLCJtYXRUb29sdGlwIiwiSW52YWxpZCByZWdleCBmaWx0ZXIuIFRoZSByZXN1bHQgbWF5IGJlIHN0YWxlLiIsMSwiZXJyb3ItaWNvbiJdLFszLCJ2YWx1ZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7aWYoMSZlKXtjb25zdCB0PUV1KCk7d3UoMCwibWF0LWljb24iLDApLE91KDEsImlucHV0IiwxLDIpLE51KCJpbnB1dCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25SZWdleEZpbHRlclZhbHVlQ2hhbmdlLmVtaXQoZS50YXJnZXQudmFsdWUpfSkpLFB1KCksV20oMyxXYnQsMSwwLCJtYXQtaWNvbiIsMyksT3UoNCwibWF0LWF1dG9jb21wbGV0ZSIsNCw1KSxOdSgib3B0aW9uU2VsZWN0ZWQiLChmdW5jdGlvbiBlKG8pe3JhKHQpO2NvbnN0IGk9R20oMik7cmV0dXJuIG4ub25PcHRpb25TZWxlY3RlZChvLGkpfSkpLFdtKDYsR2J0LDIsMiwibWF0LW9wdGlvbiIsNiksUHUoKX1pZigyJmUpe2NvbnN0IHQ9R20oNSk7SmMoMSksdnUoInZhbHVlIixuLnJlZ2V4RmlsdGVyVmFsdWUpKCJtYXRBdXRvY29tcGxldGUiLHQpLEpjKDIpLHZ1KCJuZ0lmIiwhbi5pc1JlZ2V4RmlsdGVyVmFsaWQpLEpjKDMpLHZ1KCJuZ0Zvck9mIixuLmNvbXBsZXRpb25zKX19LGRpcmVjdGl2ZXM6W2NHLEVZLG0xLGF2LG4xLG92LFBIXSxzdHlsZXM6WycubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1iYWRnZS1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo5cHh9Lm1hdC1iYWRnZS1sYXJnZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4fS5tYXQtaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWhlYWRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAyNHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE1cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjgzKS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1oNltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC42NykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtYm9keS1zdHJvbmdbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MCAwIDEycHh9Lm1hdC1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FwdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTJweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6MzAwIDExMnB4LzExMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wNWVtO21hcmdpbjowIDAgNTZweH0ubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNTZweC81NnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMmVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNDVweC80OHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMDVlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDM0cHgvNDBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1yYWlzZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3Ryb2tlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZsYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mYWJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW1pbmktZmFiW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtYnV0dG9uLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FyZC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjBweH0ubWF0LWNhcmQtc3VidGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hlY2tib3gtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC10cmFpbGluZy1pY29uLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC1yZW1vdmUubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxOHB4fS5tYXQtdGFibGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWhlYWRlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb290ZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jYWxlbmRhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FsZW5kYXItYm9keVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYWxlbmRhci1wZXJpb2QtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWRpYWxvZy10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTI1O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTUwJTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjVlbTt3aWR0aDoxLjVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW07bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41ZW0gMDtib3JkZXItdG9wOi44NDM3NWVtIHNvbGlkIHRyYW5zcGFyZW50fS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3RvcDotMC44NDM3NWVtO3BhZGRpbmctdG9wOi44NDM3NWVtfS5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjc1JTttYXJnaW4tdG9wOi42NjY2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNzkxNjY2NjY2N2VtKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAycHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyM2VtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzUzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi41NDE2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNjY2NjY2NjY2N2VtKX1AbWVkaWEgcHJpbnR7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIyZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIxZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMmVtKSBzY2FsZSgwLjc1KX19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjI1ZW0gMCAuNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4wOTM3NWVtO21hcmdpbi10b3A6LTAuNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MWVtIDAgMWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjg0Mzc1ZW07bWFyZ2luLXRvcDotMC4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH1pbnB1dC5tYXQtaW5wdXQtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDotMC4wNjI1ZW19Lm1hdC1tZW51LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1wYWdpbmF0b3JbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXBhZ2luYXRvci1wYWdlLXNpemVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3RbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXN0ZXBwZXItdmVydGljYWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc3RlcC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0Om5vcm1hbH0ubWF0LXN0ZXAtbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRhYi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjB9Lm1hdC10b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTZweH0ubWF0LW9wdGdyb3VwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LXNpbXBsZS1zbmFja2Jhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbltfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRyZWVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbmVzdGVkLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4fS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVdOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtcmlwcGxlLm1hdC1yaXBwbGUtdW5ib3VuZGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6NTAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7dHJhbnNmb3JtOnNjYWxlKDApfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpub25lfS5jZGstdmlzdWFsbHktaGlkZGVuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7bGVmdDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmVtcHR5e2Rpc3BsYXk6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LXBhbmVbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOmF1dG87Ym94LXNpemluZzpib3JkZXItYm94O3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7bWF4LXdpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlfS5jZGstb3ZlcmxheS1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKTtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5Oi42fS5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjMyKX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTowfS5jZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO292ZXJmbG93LXk6c2Nyb2xsfUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnR7fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5ke30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxse2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCAwcyAxbXN9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06bm90KDotd2Via2l0LWF1dG9maWxsKXthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIDBzIDFtc310ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemVbX25nY29udGVudC0lQ09NUCVde3Jlc2l6ZTpub25lfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmdbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OmF1dG8gIWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW4gIWltcG9ydGFudH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nLWZpcmVmb3hbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OjAgIWltcG9ydGFudH0ubWF0LWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX1tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17ZmxleDpub25lO21hcmdpbi1yaWdodDo1cHh9W19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmZsZXg7cGFkZGluZzowIDEwcHg7cG9zaXRpb246cmVsYXRpdmU7Zm9udC1zaXplOi45ZW19W19uZ2hvc3QtJUNPTVAlXTpub3QoLnZhbGlkKXtjb2xvcjojYzYyODI4fVtfbmdob3N0LSVDT01QJV06bm90KC52YWxpZCkgICBpbnB1dFtfbmdjb250ZW50LSVDT01QJV17Y2FyZXQtY29sb3I6Y3VycmVudENvbG9yfSddLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihZYnQsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoibWV0cmljLXNlYXJjaC1jb21wb25lbnQiLHRlbXBsYXRlVXJsOiIuL21ldHJpY19zZWFyY2hfY29tcG9uZW50Lm5nLmh0bWwiLHN0eWxlVXJsczpbIi4vbWV0cmljX3NlYXJjaF9jb21wb25lbnQuY3NzIl0sY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sbnVsbCx7Y29tcGxldGlvbnM6W3t0eXBlOnlffV0scmVnZXhGaWx0ZXJWYWx1ZTpbe3R5cGU6eV99XSxpc1JlZ2V4RmlsdGVyVmFsaWQ6W3t0eXBlOkNfLGFyZ3M6WyJjbGFzcy52YWxpZCJdfSx7dHlwZTp5X31dLG9uUmVnZXhGaWx0ZXJWYWx1ZUNoYW5nZTpbe3R5cGU6X199XSxvbkFkZEZpbHRlcjpbe3R5cGU6X199XX0pO2NsYXNzIHFidHtjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXQsdGhpcy5tZXRyaWNzUmVnZXgkPXRoaXMuc3RvcmUuc2VsZWN0KFFodCksdGhpcy5hY3RpdmVSdW5zJD10aGlzLnN0b3JlLnBpcGUoUmsodk4pKS5waXBlKGh0KCh0PT50P0FycmF5LmZyb20odC5lbnRyaWVzKCkpLmZpbHRlcigodD0+dFsxXSkpLm1hcCgodD0+dFswXSkpOltdKSkpLHRoaXMubWV0cmljc0ZvckFjdGl2ZVJ1bnMkPUR0KHRoaXMuYWN0aXZlUnVucyQsdGhpcy5zdG9yZS5zZWxlY3QoWWh0KSkucGlwZShodCgoKFt0LGVdKT0+e2NvbnN0IG49bmV3IFNldDtmb3IoY29uc3QgbyBvZiB0KWlmKGVbb10pZm9yKGNvbnN0IHQgb2YgZVtvXSluLmFkZCh0KTtyZXR1cm5bLi4ubl19KSkpLHRoaXMuaXNNZXRyaWNzRmlsdGVyVmFsaWQkPXRoaXMubWV0cmljc1JlZ2V4JC5waXBlKGh0KCh0PT57dHJ5e3JldHVybiBCb29sZWFuKG5ldyBSZWdFeHAodCkpfWNhdGNoKHQpe3JldHVybiExfX0pKSksdGhpcy5tZXRyaWNGaWx0ZXJLZXlzJD10aGlzLnN0b3JlLnBpcGUoUmsodGJ0KSkucGlwZShodCgodD0+T2JqZWN0LmtleXModCkpKSksdGhpcy5jb21wbGV0aW9ucyQ9RHQodGhpcy5tZXRyaWNzRm9yQWN0aXZlUnVucyQsdGhpcy5tZXRyaWNzUmVnZXgkLHRoaXMubWV0cmljRmlsdGVyS2V5cyQpLnBpcGUoaHQoKChbdCxlLG5dKT0+e2NvbnN0IG89dC5maWx0ZXIoKHQ9PiFuLmluY2x1ZGVzKHQpKSk7dHJ5e2NvbnN0IHQ9bmV3IFJlZ0V4cChlLCJpIik7cmV0dXJuIG8uZmlsdGVyKChlPT50LnRlc3QoZSkpKS5zb3J0KCl9Y2F0Y2godCl7cmV0dXJuW119fSkpKX1vbkZpbHRlckNoYW5nZSh0KXt0aGlzLnN0b3JlLmRpc3BhdGNoKHZidCh7cmVnZXg6dH0pKX1vbkFkZEZpbHRlcih0KXt0aGlzLnN0b3JlLmRpc3BhdGNoKHhidCh7bWV0cmljOnR9KSksdGhpcy5zdG9yZS5kaXNwYXRjaCh2YnQoe3JlZ2V4OiIifSkpfX1mdW5jdGlvbiBaYnQodCxlLG4pe2NvbnN0IG89W1tlLC4uLm5dXTtpZighbi5sZW5ndGh8fCF0Lmxlbmd0aClyZXR1cm4iZGF0YTp0ZXh0L2NzdjtjaGFyc2V0PXV0Zi04LCIrby5tYXAoKHQ9PnQuam9pbigiLCIpKSkuam9pbigiXG4iKTtjb25zdCBpPW4ubWFwKCh0PT5WYnQodCkpKTtmb3IoY29uc3RbbixhXW9mIHQpe2NvbnN0IHQ9YS5maWx0ZXIoKHQ9PnQucnVuPT09ZSkpO2lmKHQubGVuZ3RoKXtjb25zdCBlPVtuXTtmb3IoY29uc3QgbiBvZiBpKXtjb25zdCBvPXQuZmluZCgodD0+dC5tZXRyaWM9PT1uKSk7ZS5wdXNoKHZvaWQgMD09PW8/Im51bGwiOmAke28ublBNSVZhbHVlfWApfW8ucHVzaChlKX19cmV0dXJuImRhdGE6dGV4dC9jc3Y7Y2hhcnNldD11dGYtOCwiK28ubWFwKCh0PT50LmpvaW4oIiwiKSkpLmpvaW4oIlxuIil9cWJ0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxxYnQpKE11KEVrKSl9LHFidC7JtWNtcD1Vbyh7dHlwZTpxYnQsc2VsZWN0b3JzOltbIm5wbWktbWV0cmljLXNlYXJjaCJdXSxkZWNsczo0LHZhcnM6OSxjb25zdHM6W1szLCJyZWdleEZpbHRlclZhbHVlIiwiY29tcGxldGlvbnMiLCJpc1JlZ2V4RmlsdGVyVmFsaWQiLCJvblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2UiLCJvbkFkZEZpbHRlciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoT3UoMCwibWV0cmljLXNlYXJjaC1jb21wb25lbnQiLDApLE51KCJvblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2UiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLm9uRmlsdGVyQ2hhbmdlKGUpfSkpKCJvbkFkZEZpbHRlciIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25BZGRGaWx0ZXIoZSl9KSksT2IoMSwiYXN5bmMiKSxPYigyLCJhc3luYyIpLE9iKDMsImFzeW5jIiksUHUoKSksMiZlJiZ2dSgicmVnZXhGaWx0ZXJWYWx1ZSIsUGIoMSwzLG4ubWV0cmljc1JlZ2V4JCkpKCJjb21wbGV0aW9ucyIsUGIoMiw1LG4uY29tcGxldGlvbnMkKSkoImlzUmVnZXhGaWx0ZXJWYWxpZCIsUGIoMyw3LG4uaXNNZXRyaWNzRmlsdGVyVmFsaWQkKSl9LGRpcmVjdGl2ZXM6W1lidF0scGlwZXM6W012XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHFidCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJucG1pLW1ldHJpYy1zZWFyY2giLHRlbXBsYXRlOidcbiAgICA8bWV0cmljLXNlYXJjaC1jb21wb25lbnRcbiAgICAgIFtyZWdleEZpbHRlclZhbHVlXT0ibWV0cmljc1JlZ2V4JCB8IGFzeW5jIlxuICAgICAgW2NvbXBsZXRpb25zXT0iY29tcGxldGlvbnMkIHwgYXN5bmMiXG4gICAgICBbaXNSZWdleEZpbHRlclZhbGlkXT0iaXNNZXRyaWNzRmlsdGVyVmFsaWQkIHwgYXN5bmMiXG4gICAgICAob25SZWdleEZpbHRlclZhbHVlQ2hhbmdlKT0ib25GaWx0ZXJDaGFuZ2UoJGV2ZW50KSJcbiAgICAgIChvbkFkZEZpbHRlcik9Im9uQWRkRmlsdGVyKCRldmVudCkiXG4gICAgPjwvbWV0cmljLXNlYXJjaC1jb21wb25lbnQ+XG4gICcsY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkVrfV19KSxudWxsKTtjb25zdCBYYnQ9ZnVuY3Rpb24odCl7cmV0dXJueyJhY3RpdmUtYnV0dG9uIjp0fX07Y2xhc3MgS2J0e2Rvd25sb2FkUmVzdWx0cygpe2Zvcihjb25zdCB0IG9mIHRoaXMucnVucyl7Y29uc3QgZT1aYnQodGhpcy5mbGFnZ2VkRGF0YSx0LHRoaXMubWV0cmljcyksbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7bi5zZXRBdHRyaWJ1dGUoImhyZWYiLGUpLG4uc2V0QXR0cmlidXRlKCJkb3dubG9hZCIsYHJlcG9ydF8ke3R9LmNzdmApLG4uY2xpY2soKX19fUtidC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8S2J0KX0sS2J0Lsm1Y21wPVVvKHt0eXBlOktidCxzZWxlY3RvcnM6W1sicmVzdWx0cy1kb3dubG9hZC1jb21wb25lbnQiXV0saW5wdXRzOntudW1GbGFnZ2VkQW5ub3RhdGlvbnM6Im51bUZsYWdnZWRBbm5vdGF0aW9ucyIscnVuczoicnVucyIsZmxhZ2dlZERhdGE6ImZsYWdnZWREYXRhIixtZXRyaWNzOiJtZXRyaWNzIn0sZGVjbHM6NCx2YXJzOjUsY29uc3RzOltbIm1hdC1zdHJva2VkLWJ1dHRvbiIsIiIsInRpdGxlIiwiRXhwb3J0IENTViByZXBvcnRzIG9mIGFsbCBmbGFnZ2VkIGFubm90YXRpb25zLiBXaWxsIGdlbmVyYXRlIG9uZSBDU1YgcGVyIGFjdGl2ZSBydW4uIiwzLCJkaXNhYmxlZCIsIm5nQ2xhc3MiLCJjbGljayJdLFsxLCJidXR0b24tY29udGVudHMiXSxbInN2Z0ljb24iLCJnZXRfYXBwXzI0cHgiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKE91KDAsImJ1dHRvbiIsMCksTnUoImNsaWNrIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLmRvd25sb2FkUmVzdWx0cygpfSkpLE91KDEsInNwYW4iLDEpLHd1KDIsIm1hdC1pY29uIiwyKSxNZigzKSxQdSgpLFB1KCkpLDImZSYmKHZ1KCJkaXNhYmxlZCIsMD09PW4ubnVtRmxhZ2dlZEFubm90YXRpb25zKSgibmdDbGFzcyIsZ2IoMyxYYnQsbi5udW1GbGFnZ2VkQW5ub3RhdGlvbnM+MCkpLEpjKDMpLHhmKCIgRmxhZ2dlZCBSb3dzICgiLG4ubnVtRmxhZ2dlZEFubm90YXRpb25zLCIpICIpKX0sZGlyZWN0aXZlczpbTkgsdHYsY0ddLHN0eWxlczpbJy5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHh9Lm1hdC1oMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaGVhZGxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTVweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZ1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjA1ZW07bWFyZ2luOjAgMCA1NnB4fS5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAwNWVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXJhaXNlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdHJva2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmxhdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZhYltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbWluaS1mYWJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4fS5tYXQtY2FyZC1zdWJ0aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGVja2JveC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvb3Rlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgdHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIzZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LjU0MTY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2NjY2NjY3ZW0pfUBtZWRpYSBwcmludHsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjJlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouMjVlbSAwIC43NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxZW0gMCAxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMiksIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi0wLjA2MjVlbX0ubWF0LW1lbnUtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci12ZXJ0aWNhbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGFiLWxpbmtbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MH0ubWF0LXRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5Om5vbmV9LmNkay12aXN1YWxseS1oaWRkZW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjZ9LmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV0sIC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3hbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2tbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHt9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7fS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOi13ZWJraXQtYXV0b2ZpbGwpe2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZVtfbmdjb250ZW50LSVDT01QJV17cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fS5tYXQtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfS5hY3RpdmUtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDA7Ym9yZGVyOjFweCBzb2xpZCAjZWJlYmViO2NvbG9yOiNmZmZ9LmJ1dHRvbi1jb250ZW50c1tfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9bWF0LWljb25bX25nY29udGVudC0lQ09NUCVde21hcmdpbi1yaWdodDo2cHh9J10sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEtidCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJyZXN1bHRzLWRvd25sb2FkLWNvbXBvbmVudCIsdGVtcGxhdGVVcmw6Ii4vcmVzdWx0c19kb3dubG9hZF9jb21wb25lbnQubmcuaHRtbCIsc3R5bGVVcmxzOlsiLi9yZXN1bHRzX2Rvd25sb2FkX2NvbXBvbmVudC5jc3MiXSxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSxudWxsLHtudW1GbGFnZ2VkQW5ub3RhdGlvbnM6W3t0eXBlOnlffV0scnVuczpbe3R5cGU6eV99XSxmbGFnZ2VkRGF0YTpbe3R5cGU6eV99XSxtZXRyaWNzOlt7dHlwZTp5X31dfSk7Y2xhc3MgSmJ0e2NvbnN0cnVjdG9yKHQpe3RoaXMuc3RvcmU9dCx0aGlzLmZsYWdnZWRBbm5vdGF0aW9ucyQ9dGhpcy5zdG9yZS5zZWxlY3QoWGh0KSx0aGlzLm51bUZsYWdnZWRBbm5vdGF0aW9ucyQ9dGhpcy5mbGFnZ2VkQW5ub3RhdGlvbnMkLnBpcGUoaHQoKHQ9PnQubGVuZ3RoKSkpLHRoaXMuYWN0aXZlUnVucyQ9dGhpcy5zdG9yZS5zZWxlY3Qodk4pLnBpcGUoaHQoKHQ9PnQ/QXJyYXkuZnJvbSh0LmVudHJpZXMoKSkuZmlsdGVyKCh0PT50WzFdKSkubWFwKCh0PT50WzBdKSk6W10pKSksdGhpcy5mbGFnZ2VkRGF0YSQ9RHQoW3RoaXMuc3RvcmUuc2VsZWN0KEdodCksdGhpcy5mbGFnZ2VkQW5ub3RhdGlvbnMkXSkucGlwZShodCgoKFt0LGVdKT0+e2NvbnN0IG49bmV3IFNldChlKTtyZXR1cm4gT2JqZWN0LmVudHJpZXModCkuZmlsdGVyKCh0PT5uLmhhcyh0WzBdKSkpfSkpKSx0aGlzLm1ldHJpY3MkPUR0KFt0aGlzLnN0b3JlLnNlbGVjdChZaHQpLHRoaXMuYWN0aXZlUnVucyQsdGhpcy5zdG9yZS5zZWxlY3QodGJ0KV0pLnBpcGUoaHQoKChbdCxlLG5dKT0+e2xldCBvPU9iamVjdC5rZXlzKG4pO2Zvcihjb25zdCBuIG9mIGUpdFtuXSYmKG89by5jb25jYXQodFtuXS5maWx0ZXIoKHQ9PkJidCh0KSkpKSk7cmV0dXJuIG89Wy4uLm5ldyBTZXQobyldLG99KSkpfX1KYnQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEpidCkoTXUoRWspKX0sSmJ0Lsm1Y21wPVVvKHt0eXBlOkpidCxzZWxlY3RvcnM6W1sibnBtaS1yZXN1bHRzLWRvd25sb2FkIl1dLGRlY2xzOjUsdmFyczoxMixjb25zdHM6W1szLCJudW1GbGFnZ2VkQW5ub3RhdGlvbnMiLCJydW5zIiwiZmxhZ2dlZERhdGEiLCJtZXRyaWNzIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJih3dSgwLCJyZXN1bHRzLWRvd25sb2FkLWNvbXBvbmVudCIsMCksT2IoMSwiYXN5bmMiKSxPYigyLCJhc3luYyIpLE9iKDMsImFzeW5jIiksT2IoNCwiYXN5bmMiKSksMiZlJiZ2dSgibnVtRmxhZ2dlZEFubm90YXRpb25zIixQYigxLDQsbi5udW1GbGFnZ2VkQW5ub3RhdGlvbnMkKSkoInJ1bnMiLFBiKDIsNixuLmFjdGl2ZVJ1bnMkKSkoImZsYWdnZWREYXRhIixQYigzLDgsbi5mbGFnZ2VkRGF0YSQpKSgibWV0cmljcyIsUGIoNCwxMCxuLm1ldHJpY3MkKSl9LGRpcmVjdGl2ZXM6W0tidF0scGlwZXM6W012XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEpidCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJucG1pLXJlc3VsdHMtZG93bmxvYWQiLHRlbXBsYXRlOidcbiAgICA8cmVzdWx0cy1kb3dubG9hZC1jb21wb25lbnRcbiAgICAgIFtudW1GbGFnZ2VkQW5ub3RhdGlvbnNdPSJudW1GbGFnZ2VkQW5ub3RhdGlvbnMkIHwgYXN5bmMiXG4gICAgICBbcnVuc109ImFjdGl2ZVJ1bnMkIHwgYXN5bmMiXG4gICAgICBbZmxhZ2dlZERhdGFdPSJmbGFnZ2VkRGF0YSQgfCBhc3luYyJcbiAgICAgIFttZXRyaWNzXT0ibWV0cmljcyQgfCBhc3luYyJcbiAgICA+PC9yZXN1bHRzLWRvd25sb2FkLWNvbXBvbmVudD5cbiAgJyxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6RWt9XX0pLG51bGwpO2NvbnN0IFFidD1uZXcgTnIoIk1hdENoaXBSZW1vdmUiKSwkYnQ9bmV3IE5yKCJNYXRDaGlwQXZhdGFyIiksdHl0PW5ldyBOcigiTWF0Q2hpcFRyYWlsaW5nSWNvbiIpLGV5dD1IeihJeih6eihjbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLl9lbGVtZW50UmVmPXR9fSksInByaW1hcnkiKSwtMSk7Y2xhc3Mgbnl0e31ueXQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fG55dCl9LG55dC7JtWRpcj1Kbyh7dHlwZTpueXQsc2VsZWN0b3JzOltbIm1hdC1jaGlwLWF2YXRhciJdLFsiIiwibWF0Q2hpcEF2YXRhciIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1jaGlwLWF2YXRhciJdLGZlYXR1cmVzOltpaChbe3Byb3ZpZGU6JGJ0LHVzZUV4aXN0aW5nOm55dH1dKV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKG55dCxbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJtYXQtY2hpcC1hdmF0YXIsIFttYXRDaGlwQXZhdGFyXSIsaG9zdDp7Y2xhc3M6Im1hdC1jaGlwLWF2YXRhciJ9LHByb3ZpZGVyczpbe3Byb3ZpZGU6JGJ0LHVzZUV4aXN0aW5nOm55dH1dfV19XSxudWxsLG51bGwpO2NsYXNzIG95dHt9b3l0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxveXQpfSxveXQuybVkaXI9Sm8oe3R5cGU6b3l0LHNlbGVjdG9yczpbWyJtYXQtY2hpcC10cmFpbGluZy1pY29uIl0sWyIiLCJtYXRDaGlwVHJhaWxpbmdJY29uIiwiIl1dLGhvc3RBdHRyczpbMSwibWF0LWNoaXAtdHJhaWxpbmctaWNvbiJdLGZlYXR1cmVzOltpaChbe3Byb3ZpZGU6dHl0LHVzZUV4aXN0aW5nOm95dH1dKV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKG95dCxbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJtYXQtY2hpcC10cmFpbGluZy1pY29uLCBbbWF0Q2hpcFRyYWlsaW5nSWNvbl0iLGhvc3Q6e2NsYXNzOiJtYXQtY2hpcC10cmFpbGluZy1pY29uIn0scHJvdmlkZXJzOlt7cHJvdmlkZTp0eXQsdXNlRXhpc3Rpbmc6b3l0fV19XX1dLG51bGwsbnVsbCk7Y2xhc3MgaXl0IGV4dGVuZHMgZXl0e2NvbnN0cnVjdG9yKHQsZSxuLG8saSxhLHIscyl7c3VwZXIodCksdGhpcy5fZWxlbWVudFJlZj10LHRoaXMuX25nWm9uZT1lLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPWksdGhpcy5faGFzRm9jdXM9ITEsdGhpcy5jaGlwTGlzdFNlbGVjdGFibGU9ITAsdGhpcy5fY2hpcExpc3RNdWx0aXBsZT0hMSx0aGlzLl9jaGlwTGlzdERpc2FibGVkPSExLHRoaXMuX3NlbGVjdGVkPSExLHRoaXMuX3NlbGVjdGFibGU9ITAsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5fcmVtb3ZhYmxlPSEwLHRoaXMuX29uRm9jdXM9bmV3IHgsdGhpcy5fb25CbHVyPW5ldyB4LHRoaXMuc2VsZWN0aW9uQ2hhbmdlPW5ldyBBYix0aGlzLmRlc3Ryb3llZD1uZXcgQWIsdGhpcy5yZW1vdmVkPW5ldyBBYix0aGlzLl9hZGRIb3N0Q2xhc3NOYW1lKCksdGhpcy5fY2hpcFJpcHBsZVRhcmdldD1hLmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuX2NoaXBSaXBwbGVUYXJnZXQuY2xhc3NMaXN0LmFkZCgibWF0LWNoaXAtcmlwcGxlIiksdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX2NoaXBSaXBwbGVUYXJnZXQpLHRoaXMuX2NoaXBSaXBwbGU9bmV3IGNIKHRoaXMsZSx0aGlzLl9jaGlwUmlwcGxlVGFyZ2V0LG4pLHRoaXMuX2NoaXBSaXBwbGUuc2V0dXBUcmlnZ2VyRXZlbnRzKHQpLHRoaXMucmlwcGxlQ29uZmlnPW98fHt9LHRoaXMuX2FuaW1hdGlvbnNEaXNhYmxlZD0iTm9vcEFuaW1hdGlvbnMiPT09cix0aGlzLnRhYkluZGV4PW51bGwhPXMmJnBhcnNlSW50KHMpfHwtMX1nZXQgcmlwcGxlRGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5kaXNhYmxlZHx8dGhpcy5kaXNhYmxlUmlwcGxlfHx0aGlzLl9hbmltYXRpb25zRGlzYWJsZWR8fCEhdGhpcy5yaXBwbGVDb25maWcuZGlzYWJsZWR9Z2V0IHNlbGVjdGVkKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGVkfXNldCBzZWxlY3RlZCh0KXtjb25zdCBlPXJJKHQpO2UhPT10aGlzLl9zZWxlY3RlZCYmKHRoaXMuX3NlbGVjdGVkPWUsdGhpcy5fZGlzcGF0Y2hTZWxlY3Rpb25DaGFuZ2UoKSl9Z2V0IHZhbHVlKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3ZhbHVlP3RoaXMuX3ZhbHVlOnRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC50ZXh0Q29udGVudH1zZXQgdmFsdWUodCl7dGhpcy5fdmFsdWU9dH1nZXQgc2VsZWN0YWJsZSgpe3JldHVybiB0aGlzLl9zZWxlY3RhYmxlJiZ0aGlzLmNoaXBMaXN0U2VsZWN0YWJsZX1zZXQgc2VsZWN0YWJsZSh0KXt0aGlzLl9zZWxlY3RhYmxlPXJJKHQpfWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLl9jaGlwTGlzdERpc2FibGVkfHx0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQodCl7dGhpcy5fZGlzYWJsZWQ9ckkodCl9Z2V0IHJlbW92YWJsZSgpe3JldHVybiB0aGlzLl9yZW1vdmFibGV9c2V0IHJlbW92YWJsZSh0KXt0aGlzLl9yZW1vdmFibGU9ckkodCl9Z2V0IGFyaWFTZWxlY3RlZCgpe3JldHVybiB0aGlzLnNlbGVjdGFibGUmJih0aGlzLl9jaGlwTGlzdE11bHRpcGxlfHx0aGlzLnNlbGVjdGVkKT90aGlzLnNlbGVjdGVkLnRvU3RyaW5nKCk6bnVsbH1fYWRkSG9zdENsYXNzTmFtZSgpe2NvbnN0IHQ9Im1hdC1iYXNpYy1jaGlwIixlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtlLmhhc0F0dHJpYnV0ZSh0KXx8ZS50YWdOYW1lLnRvTG93ZXJDYXNlKCk9PT10P2UuY2xhc3NMaXN0LmFkZCh0KTplLmNsYXNzTGlzdC5hZGQoIm1hdC1zdGFuZGFyZC1jaGlwIil9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3llZC5lbWl0KHtjaGlwOnRoaXN9KSx0aGlzLl9jaGlwUmlwcGxlLl9yZW1vdmVUcmlnZ2VyRXZlbnRzKCl9c2VsZWN0KCl7dGhpcy5fc2VsZWN0ZWR8fCh0aGlzLl9zZWxlY3RlZD0hMCx0aGlzLl9kaXNwYXRjaFNlbGVjdGlvbkNoYW5nZSgpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX1kZXNlbGVjdCgpe3RoaXMuX3NlbGVjdGVkJiYodGhpcy5fc2VsZWN0ZWQ9ITEsdGhpcy5fZGlzcGF0Y2hTZWxlY3Rpb25DaGFuZ2UoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9c2VsZWN0VmlhSW50ZXJhY3Rpb24oKXt0aGlzLl9zZWxlY3RlZHx8KHRoaXMuX3NlbGVjdGVkPSEwLHRoaXMuX2Rpc3BhdGNoU2VsZWN0aW9uQ2hhbmdlKCEwKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9dG9nZ2xlU2VsZWN0ZWQodD0hMSl7cmV0dXJuIHRoaXMuX3NlbGVjdGVkPSF0aGlzLnNlbGVjdGVkLHRoaXMuX2Rpc3BhdGNoU2VsZWN0aW9uQ2hhbmdlKHQpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRoaXMuc2VsZWN0ZWR9Zm9jdXMoKXt0aGlzLl9oYXNGb2N1c3x8KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpLHRoaXMuX29uRm9jdXMubmV4dCh7Y2hpcDp0aGlzfSkpLHRoaXMuX2hhc0ZvY3VzPSEwfXJlbW92ZSgpe3RoaXMucmVtb3ZhYmxlJiZ0aGlzLnJlbW92ZWQuZW1pdCh7Y2hpcDp0aGlzfSl9X2hhbmRsZUNsaWNrKHQpe3RoaXMuZGlzYWJsZWQ/dC5wcmV2ZW50RGVmYXVsdCgpOnQuc3RvcFByb3BhZ2F0aW9uKCl9X2hhbmRsZUtleWRvd24odCl7aWYoIXRoaXMuZGlzYWJsZWQpc3dpdGNoKHQua2V5Q29kZSl7Y2FzZSA0NjpjYXNlIDg6dGhpcy5yZW1vdmUoKSx0LnByZXZlbnREZWZhdWx0KCk7YnJlYWs7Y2FzZSBuSTp0aGlzLnNlbGVjdGFibGUmJnRoaXMudG9nZ2xlU2VsZWN0ZWQoITApLHQucHJldmVudERlZmF1bHQoKX19X2JsdXIoKXt0aGlzLl9uZ1pvbmUub25TdGFibGUucGlwZShOZSgxKSkuc3Vic2NyaWJlKCgoKT0+e3RoaXMuX25nWm9uZS5ydW4oKCgpPT57dGhpcy5faGFzRm9jdXM9ITEsdGhpcy5fb25CbHVyLm5leHQoe2NoaXA6dGhpc30pfSkpfSkpfV9kaXNwYXRjaFNlbGVjdGlvbkNoYW5nZSh0PSExKXt0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KHtzb3VyY2U6dGhpcyxpc1VzZXJJbnB1dDp0LHNlbGVjdGVkOnRoaXMuX3NlbGVjdGVkfSl9fWl5dC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8aXl0KShNdShjaCksTXUodEMpLE11KGZJKSxNdShkSCw4KSxNdShIaCksTXUoVUMpLE11KE53LDgpLE9yKCJ0YWJpbmRleCIpKX0saXl0Lsm1ZGlyPUpvKHt0eXBlOml5dCxzZWxlY3RvcnM6W1sibWF0LWJhc2ljLWNoaXAiXSxbIiIsIm1hdC1iYXNpYy1jaGlwIiwiIl0sWyJtYXQtY2hpcCJdLFsiIiwibWF0LWNoaXAiLCIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24gdChlLG4sbyl7aWYoMSZlJiYoR2IobywkYnQsMSksR2Iobyx0eXQsMSksR2IobyxRYnQsMSkpLDImZSl7bGV0IHQ7VWIodD1ZYigpKSYmKG4uYXZhdGFyPXQuZmlyc3QpLFViKHQ9WWIoKSkmJihuLnRyYWlsaW5nSWNvbj10LmZpcnN0KSxVYih0PVliKCkpJiYobi5yZW1vdmVJY29uPXQuZmlyc3QpfX0saG9zdEF0dHJzOlsicm9sZSIsIm9wdGlvbiIsMSwibWF0LWNoaXAiLCJtYXQtZm9jdXMtaW5kaWNhdG9yIl0saG9zdFZhcnM6MTQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJk51KCJjbGljayIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4uX2hhbmRsZUNsaWNrKGUpfSkpKCJrZXlkb3duIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5faGFuZGxlS2V5ZG93bihlKX0pKSgiZm9jdXMiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uZm9jdXMoKX0pKSgiYmx1ciIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5fYmx1cigpfSkpLDImZSYmKE5tKCJ0YWJpbmRleCIsbi5kaXNhYmxlZD9udWxsOm4udGFiSW5kZXgpKCJkaXNhYmxlZCIsbi5kaXNhYmxlZHx8bnVsbCkoImFyaWEtZGlzYWJsZWQiLG4uZGlzYWJsZWQudG9TdHJpbmcoKSkoImFyaWEtc2VsZWN0ZWQiLG4uYXJpYVNlbGVjdGVkKSxhZigibWF0LWNoaXAtc2VsZWN0ZWQiLG4uc2VsZWN0ZWQpKCJtYXQtY2hpcC13aXRoLWF2YXRhciIsbi5hdmF0YXIpKCJtYXQtY2hpcC13aXRoLXRyYWlsaW5nLWljb24iLG4udHJhaWxpbmdJY29ufHxuLnJlbW92ZUljb24pKCJtYXQtY2hpcC1kaXNhYmxlZCIsbi5kaXNhYmxlZCkoIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIixuLl9hbmltYXRpb25zRGlzYWJsZWQpKX0saW5wdXRzOntjb2xvcjoiY29sb3IiLGRpc2FibGVSaXBwbGU6ImRpc2FibGVSaXBwbGUiLHRhYkluZGV4OiJ0YWJJbmRleCIsc2VsZWN0ZWQ6InNlbGVjdGVkIix2YWx1ZToidmFsdWUiLHNlbGVjdGFibGU6InNlbGVjdGFibGUiLGRpc2FibGVkOiJkaXNhYmxlZCIscmVtb3ZhYmxlOiJyZW1vdmFibGUifSxvdXRwdXRzOntzZWxlY3Rpb25DaGFuZ2U6InNlbGVjdGlvbkNoYW5nZSIsZGVzdHJveWVkOiJkZXN0cm95ZWQiLHJlbW92ZWQ6InJlbW92ZWQifSxleHBvcnRBczpbIm1hdENoaXAiXSxmZWF0dXJlczpbZ21dfSksaXl0LmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6Y2h9LHt0eXBlOnRDfSx7dHlwZTpmSX0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltkSF19XX0se3R5cGU6SGh9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltVQ119XX0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltOd119XX0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOlJyLGFyZ3M6WyJ0YWJpbmRleCJdfV19XSxpeXQucHJvcERlY29yYXRvcnM9e2F2YXRhcjpbe3R5cGU6SHIsYXJnczpbJGJ0XX1dLHRyYWlsaW5nSWNvbjpbe3R5cGU6SHIsYXJnczpbdHl0XX1dLHJlbW92ZUljb246W3t0eXBlOkhyLGFyZ3M6W1FidF19XSxzZWxlY3RlZDpbe3R5cGU6eV99XSx2YWx1ZTpbe3R5cGU6eV99XSxzZWxlY3RhYmxlOlt7dHlwZTp5X31dLGRpc2FibGVkOlt7dHlwZTp5X31dLHJlbW92YWJsZTpbe3R5cGU6eV99XSxzZWxlY3Rpb25DaGFuZ2U6W3t0eXBlOl9ffV0sZGVzdHJveWVkOlt7dHlwZTpfX31dLHJlbW92ZWQ6W3t0eXBlOl9ffV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoaXl0LFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6Im1hdC1iYXNpYy1jaGlwLCBbbWF0LWJhc2ljLWNoaXBdLCBtYXQtY2hpcCwgW21hdC1jaGlwXSIsaW5wdXRzOlsiY29sb3IiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiXSxleHBvcnRBczoibWF0Q2hpcCIsaG9zdDp7Y2xhc3M6Im1hdC1jaGlwIG1hdC1mb2N1cy1pbmRpY2F0b3IiLCJbYXR0ci50YWJpbmRleF0iOiJkaXNhYmxlZCA/IG51bGwgOiB0YWJJbmRleCIscm9sZToib3B0aW9uIiwiW2NsYXNzLm1hdC1jaGlwLXNlbGVjdGVkXSI6InNlbGVjdGVkIiwiW2NsYXNzLm1hdC1jaGlwLXdpdGgtYXZhdGFyXSI6ImF2YXRhciIsIltjbGFzcy5tYXQtY2hpcC13aXRoLXRyYWlsaW5nLWljb25dIjoidHJhaWxpbmdJY29uIHx8IHJlbW92ZUljb24iLCJbY2xhc3MubWF0LWNoaXAtZGlzYWJsZWRdIjoiZGlzYWJsZWQiLCJbY2xhc3MuX21hdC1hbmltYXRpb24tbm9vcGFibGVdIjoiX2FuaW1hdGlvbnNEaXNhYmxlZCIsIlthdHRyLmRpc2FibGVkXSI6ImRpc2FibGVkIHx8IG51bGwiLCJbYXR0ci5hcmlhLWRpc2FibGVkXSI6ImRpc2FibGVkLnRvU3RyaW5nKCkiLCJbYXR0ci5hcmlhLXNlbGVjdGVkXSI6ImFyaWFTZWxlY3RlZCIsIihjbGljaykiOiJfaGFuZGxlQ2xpY2soJGV2ZW50KSIsIihrZXlkb3duKSI6Il9oYW5kbGVLZXlkb3duKCRldmVudCkiLCIoZm9jdXMpIjoiZm9jdXMoKSIsIihibHVyKSI6Il9ibHVyKCkifX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmNofSx7dHlwZTp0Q30se3R5cGU6Zkl9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbZEhdfV19LHt0eXBlOkhofSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbVUNdfV19LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbTnddfV19LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpScixhcmdzOlsidGFiaW5kZXgiXX1dfV19KSx7c2VsZWN0aW9uQ2hhbmdlOlt7dHlwZTpfX31dLGRlc3Ryb3llZDpbe3R5cGU6X199XSxyZW1vdmVkOlt7dHlwZTpfX31dLHNlbGVjdGVkOlt7dHlwZTp5X31dLHZhbHVlOlt7dHlwZTp5X31dLHNlbGVjdGFibGU6W3t0eXBlOnlffV0sZGlzYWJsZWQ6W3t0eXBlOnlffV0scmVtb3ZhYmxlOlt7dHlwZTp5X31dLGF2YXRhcjpbe3R5cGU6SHIsYXJnczpbJGJ0XX1dLHRyYWlsaW5nSWNvbjpbe3R5cGU6SHIsYXJnczpbdHl0XX1dLHJlbW92ZUljb246W3t0eXBlOkhyLGFyZ3M6W1FidF19XX0pO2NsYXNzIGF5dHtjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuX3BhcmVudENoaXA9dCwiQlVUVE9OIj09PWUubmF0aXZlRWxlbWVudC5ub2RlTmFtZSYmZS5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgidHlwZSIsImJ1dHRvbiIpfV9oYW5kbGVDbGljayh0KXtjb25zdCBlPXRoaXMuX3BhcmVudENoaXA7ZS5yZW1vdmFibGUmJiFlLmRpc2FibGVkJiZlLnJlbW92ZSgpLHQuc3RvcFByb3BhZ2F0aW9uKCl9fWF5dC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8YXl0KShNdShpeXQpLE11KGNoKSl9LGF5dC7JtWRpcj1Kbyh7dHlwZTpheXQsc2VsZWN0b3JzOltbIiIsIm1hdENoaXBSZW1vdmUiLCIiXV0saG9zdEF0dHJzOlsxLCJtYXQtY2hpcC1yZW1vdmUiLCJtYXQtY2hpcC10cmFpbGluZy1pY29uIl0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJk51KCJjbGljayIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4uX2hhbmRsZUNsaWNrKGUpfSkpfSxmZWF0dXJlczpbaWgoW3twcm92aWRlOlFidCx1c2VFeGlzdGluZzpheXR9XSldfSksYXl0LmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6aXl0fSx7dHlwZTpjaH1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoYXl0LFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6IlttYXRDaGlwUmVtb3ZlXSIsaG9zdDp7Y2xhc3M6Im1hdC1jaGlwLXJlbW92ZSBtYXQtY2hpcC10cmFpbGluZy1pY29uIiwiKGNsaWNrKSI6Il9oYW5kbGVDbGljaygkZXZlbnQpIn0scHJvdmlkZXJzOlt7cHJvdmlkZTpRYnQsdXNlRXhpc3Rpbmc6YXl0fV19XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTppeXR9LHt0eXBlOmNofV19KSxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IHJ5dD1uZXcgTnIoIm1hdC1jaGlwcy1kZWZhdWx0LW9wdGlvbnMiKSxzeXQ9RnooCi8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsbixvKXt0aGlzLl9kZWZhdWx0RXJyb3JTdGF0ZU1hdGNoZXI9dCx0aGlzLl9wYXJlbnRGb3JtPWUsdGhpcy5fcGFyZW50Rm9ybUdyb3VwPW4sdGhpcy5uZ0NvbnRyb2w9b319KTtsZXQgbHl0PTA7Y2xhc3MgY3l0e2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5zb3VyY2U9dCx0aGlzLnZhbHVlPWV9fWNsYXNzIGR5dCBleHRlbmRzIHN5dHtjb25zdHJ1Y3Rvcih0LGUsbixvLGksYSxyKXtzdXBlcihhLG8saSxyKSx0aGlzLl9lbGVtZW50UmVmPXQsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9ZSx0aGlzLl9kaXI9bix0aGlzLm5nQ29udHJvbD1yLHRoaXMuY29udHJvbFR5cGU9Im1hdC1jaGlwLWxpc3QiLHRoaXMuX2xhc3REZXN0cm95ZWRDaGlwSW5kZXg9bnVsbCx0aGlzLl9kZXN0cm95ZWQ9bmV3IHgsdGhpcy5fdWlkPSJtYXQtY2hpcC1saXN0LSIrbHl0KyssdGhpcy5fdGFiSW5kZXg9MCx0aGlzLl91c2VyVGFiSW5kZXg9bnVsbCx0aGlzLl9vblRvdWNoZWQ9KCk9Pnt9LHRoaXMuX29uQ2hhbmdlPSgpPT57fSx0aGlzLl9tdWx0aXBsZT0hMSx0aGlzLl9jb21wYXJlV2l0aD0odCxlKT0+dD09PWUsdGhpcy5fcmVxdWlyZWQ9ITEsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5hcmlhT3JpZW50YXRpb249Imhvcml6b250YWwiLHRoaXMuX3NlbGVjdGFibGU9ITAsdGhpcy5jaGFuZ2U9bmV3IEFiLHRoaXMudmFsdWVDaGFuZ2U9bmV3IEFiLHRoaXMubmdDb250cm9sJiYodGhpcy5uZ0NvbnRyb2wudmFsdWVBY2Nlc3Nvcj10aGlzKX1nZXQgc2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5tdWx0aXBsZT90aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZDp0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZFswXX1nZXQgcm9sZSgpe3JldHVybiB0aGlzLmVtcHR5P251bGw6Imxpc3Rib3gifWdldCBtdWx0aXBsZSgpe3JldHVybiB0aGlzLl9tdWx0aXBsZX1zZXQgbXVsdGlwbGUodCl7dGhpcy5fbXVsdGlwbGU9ckkodCksdGhpcy5fc3luY0NoaXBzU3RhdGUoKX1nZXQgY29tcGFyZVdpdGgoKXtyZXR1cm4gdGhpcy5fY29tcGFyZVdpdGh9c2V0IGNvbXBhcmVXaXRoKHQpe3RoaXMuX2NvbXBhcmVXaXRoPXQsdGhpcy5fc2VsZWN0aW9uTW9kZWwmJnRoaXMuX2luaXRpYWxpemVTZWxlY3Rpb24oKX1nZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5fdmFsdWV9c2V0IHZhbHVlKHQpe3RoaXMud3JpdGVWYWx1ZSh0KSx0aGlzLl92YWx1ZT10fWdldCBpZCgpe3JldHVybiB0aGlzLl9jaGlwSW5wdXQ/dGhpcy5fY2hpcElucHV0LmlkOnRoaXMuX3VpZH1nZXQgcmVxdWlyZWQoKXtyZXR1cm4gdGhpcy5fcmVxdWlyZWR9c2V0IHJlcXVpcmVkKHQpe3RoaXMuX3JlcXVpcmVkPXJJKHQpLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX1nZXQgcGxhY2Vob2xkZXIoKXtyZXR1cm4gdGhpcy5fY2hpcElucHV0P3RoaXMuX2NoaXBJbnB1dC5wbGFjZWhvbGRlcjp0aGlzLl9wbGFjZWhvbGRlcn1zZXQgcGxhY2Vob2xkZXIodCl7dGhpcy5fcGxhY2Vob2xkZXI9dCx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCl9Z2V0IGZvY3VzZWQoKXtyZXR1cm4gdGhpcy5fY2hpcElucHV0JiZ0aGlzLl9jaGlwSW5wdXQuZm9jdXNlZHx8dGhpcy5faGFzRm9jdXNlZENoaXAoKX1nZXQgZW1wdHkoKXtyZXR1cm4oIXRoaXMuX2NoaXBJbnB1dHx8dGhpcy5fY2hpcElucHV0LmVtcHR5KSYmKCF0aGlzLmNoaXBzfHwwPT09dGhpcy5jaGlwcy5sZW5ndGgpfWdldCBzaG91bGRMYWJlbEZsb2F0KCl7cmV0dXJuIXRoaXMuZW1wdHl8fHRoaXMuZm9jdXNlZH1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5uZ0NvbnRyb2w/ISF0aGlzLm5nQ29udHJvbC5kaXNhYmxlZDp0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQodCl7dGhpcy5fZGlzYWJsZWQ9ckkodCksdGhpcy5fc3luY0NoaXBzU3RhdGUoKX1nZXQgc2VsZWN0YWJsZSgpe3JldHVybiB0aGlzLl9zZWxlY3RhYmxlfXNldCBzZWxlY3RhYmxlKHQpe3RoaXMuX3NlbGVjdGFibGU9ckkodCksdGhpcy5jaGlwcyYmdGhpcy5jaGlwcy5mb3JFYWNoKCh0PT50LmNoaXBMaXN0U2VsZWN0YWJsZT10aGlzLl9zZWxlY3RhYmxlKSl9c2V0IHRhYkluZGV4KHQpe3RoaXMuX3VzZXJUYWJJbmRleD10LHRoaXMuX3RhYkluZGV4PXR9Z2V0IGNoaXBTZWxlY3Rpb25DaGFuZ2VzKCl7cmV0dXJuIFd0KC4uLnRoaXMuY2hpcHMubWFwKCh0PT50LnNlbGVjdGlvbkNoYW5nZSkpKX1nZXQgY2hpcEZvY3VzQ2hhbmdlcygpe3JldHVybiBXdCguLi50aGlzLmNoaXBzLm1hcCgodD0+dC5fb25Gb2N1cykpKX1nZXQgY2hpcEJsdXJDaGFuZ2VzKCl7cmV0dXJuIFd0KC4uLnRoaXMuY2hpcHMubWFwKCh0PT50Ll9vbkJsdXIpKSl9Z2V0IGNoaXBSZW1vdmVDaGFuZ2VzKCl7cmV0dXJuIFd0KC4uLnRoaXMuY2hpcHMubWFwKCh0PT50LmRlc3Ryb3llZCkpKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLl9rZXlNYW5hZ2VyPW5ldyBWSSh0aGlzLmNoaXBzKS53aXRoV3JhcCgpLndpdGhWZXJ0aWNhbE9yaWVudGF0aW9uKCkud2l0aEhvbWVBbmRFbmQoKS53aXRoSG9yaXpvbnRhbE9yaWVudGF0aW9uKHRoaXMuX2Rpcj90aGlzLl9kaXIudmFsdWU6Imx0ciIpLHRoaXMuX2RpciYmdGhpcy5fZGlyLmNoYW5nZS5waXBlKHVuKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgodD0+dGhpcy5fa2V5TWFuYWdlci53aXRoSG9yaXpvbnRhbE9yaWVudGF0aW9uKHQpKSksdGhpcy5fa2V5TWFuYWdlci50YWJPdXQucGlwZSh1bih0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5fYWxsb3dGb2N1c0VzY2FwZSgpfSkpLHRoaXMuY2hpcHMuY2hhbmdlcy5waXBlKGNuKG51bGwpLHVuKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKCk9Pnt0aGlzLmRpc2FibGVkJiZQcm9taXNlLnJlc29sdmUoKS50aGVuKCgoKT0+e3RoaXMuX3N5bmNDaGlwc1N0YXRlKCl9KSksdGhpcy5fcmVzZXRDaGlwcygpLHRoaXMuX2luaXRpYWxpemVTZWxlY3Rpb24oKSx0aGlzLl91cGRhdGVUYWJJbmRleCgpLHRoaXMuX3VwZGF0ZUZvY3VzRm9yRGVzdHJveWVkQ2hpcHMoKSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCl9KSl9bmdPbkluaXQoKXt0aGlzLl9zZWxlY3Rpb25Nb2RlbD1uZXcgakgodGhpcy5tdWx0aXBsZSx2b2lkIDAsITEpLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX1uZ0RvQ2hlY2soKXt0aGlzLm5nQ29udHJvbCYmKHRoaXMudXBkYXRlRXJyb3JTdGF0ZSgpLHRoaXMubmdDb250cm9sLmRpc2FibGVkIT09dGhpcy5fZGlzYWJsZWQmJih0aGlzLmRpc2FibGVkPSEhdGhpcy5uZ0NvbnRyb2wuZGlzYWJsZWQpKX1uZ09uRGVzdHJveSgpe3RoaXMuX2Rlc3Ryb3llZC5uZXh0KCksdGhpcy5fZGVzdHJveWVkLmNvbXBsZXRlKCksdGhpcy5zdGF0ZUNoYW5nZXMuY29tcGxldGUoKSx0aGlzLl9kcm9wU3Vic2NyaXB0aW9ucygpfXJlZ2lzdGVySW5wdXQodCl7dGhpcy5fY2hpcElucHV0PXQsdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgiZGF0YS1tYXQtY2hpcC1pbnB1dCIsdC5pZCl9c2V0RGVzY3JpYmVkQnlJZHModCl7dGhpcy5fYXJpYURlc2NyaWJlZGJ5PXQuam9pbigiICIpfXdyaXRlVmFsdWUodCl7dGhpcy5jaGlwcyYmdGhpcy5fc2V0U2VsZWN0aW9uQnlWYWx1ZSh0LCExKX1yZWdpc3Rlck9uQ2hhbmdlKHQpe3RoaXMuX29uQ2hhbmdlPXR9cmVnaXN0ZXJPblRvdWNoZWQodCl7dGhpcy5fb25Ub3VjaGVkPXR9c2V0RGlzYWJsZWRTdGF0ZSh0KXt0aGlzLmRpc2FibGVkPXQsdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfW9uQ29udGFpbmVyQ2xpY2sodCl7dGhpcy5fb3JpZ2luYXRlc0Zyb21DaGlwKHQpfHx0aGlzLmZvY3VzKCl9Zm9jdXModCl7dGhpcy5kaXNhYmxlZHx8dGhpcy5fY2hpcElucHV0JiZ0aGlzLl9jaGlwSW5wdXQuZm9jdXNlZHx8KHRoaXMuY2hpcHMubGVuZ3RoPjA/KHRoaXMuX2tleU1hbmFnZXIuc2V0Rmlyc3RJdGVtQWN0aXZlKCksdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpKToodGhpcy5fZm9jdXNJbnB1dCh0KSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCkpKX1fZm9jdXNJbnB1dCh0KXt0aGlzLl9jaGlwSW5wdXQmJnRoaXMuX2NoaXBJbnB1dC5mb2N1cyh0KX1fa2V5ZG93bih0KXtjb25zdCBlPXQudGFyZ2V0Ozg9PT10LmtleUNvZGUmJnRoaXMuX2lzSW5wdXRFbXB0eShlKT8odGhpcy5fa2V5TWFuYWdlci5zZXRMYXN0SXRlbUFjdGl2ZSgpLHQucHJldmVudERlZmF1bHQoKSk6ZSYmZS5jbGFzc0xpc3QuY29udGFpbnMoIm1hdC1jaGlwIikmJih0aGlzLl9rZXlNYW5hZ2VyLm9uS2V5ZG93bih0KSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCkpfV91cGRhdGVUYWJJbmRleCgpe3RoaXMuX3RhYkluZGV4PXRoaXMuX3VzZXJUYWJJbmRleHx8KDA9PT10aGlzLmNoaXBzLmxlbmd0aD8tMTowKX1fdXBkYXRlRm9jdXNGb3JEZXN0cm95ZWRDaGlwcygpe2lmKG51bGwhPXRoaXMuX2xhc3REZXN0cm95ZWRDaGlwSW5kZXgpaWYodGhpcy5jaGlwcy5sZW5ndGgpe2NvbnN0IHQ9TWF0aC5taW4odGhpcy5fbGFzdERlc3Ryb3llZENoaXBJbmRleCx0aGlzLmNoaXBzLmxlbmd0aC0xKTt0aGlzLl9rZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0odCl9ZWxzZSB0aGlzLmZvY3VzKCk7dGhpcy5fbGFzdERlc3Ryb3llZENoaXBJbmRleD1udWxsfV9pc1ZhbGlkSW5kZXgodCl7cmV0dXJuIHQ+PTAmJnQ8dGhpcy5jaGlwcy5sZW5ndGh9X2lzSW5wdXRFbXB0eSh0KXtyZXR1cm4hKCF0fHwiaW5wdXQiIT09dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfHx0LnZhbHVlKX1fc2V0U2VsZWN0aW9uQnlWYWx1ZSh0LGU9ITApe2lmKHRoaXMuX2NsZWFyU2VsZWN0aW9uKCksdGhpcy5jaGlwcy5mb3JFYWNoKCh0PT50LmRlc2VsZWN0KCkpKSxBcnJheS5pc0FycmF5KHQpKXQuZm9yRWFjaCgodD0+dGhpcy5fc2VsZWN0VmFsdWUodCxlKSkpLHRoaXMuX3NvcnRWYWx1ZXMoKTtlbHNle2NvbnN0IG49dGhpcy5fc2VsZWN0VmFsdWUodCxlKTtuJiZlJiZ0aGlzLl9rZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0obil9fV9zZWxlY3RWYWx1ZSh0LGU9ITApe2NvbnN0IG49dGhpcy5jaGlwcy5maW5kKChlPT5udWxsIT1lLnZhbHVlJiZ0aGlzLl9jb21wYXJlV2l0aChlLnZhbHVlLHQpKSk7cmV0dXJuIG4mJihlP24uc2VsZWN0VmlhSW50ZXJhY3Rpb24oKTpuLnNlbGVjdCgpLHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdChuKSksbn1faW5pdGlhbGl6ZVNlbGVjdGlvbigpe1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCgpPT57KHRoaXMubmdDb250cm9sfHx0aGlzLl92YWx1ZSkmJih0aGlzLl9zZXRTZWxlY3Rpb25CeVZhbHVlKHRoaXMubmdDb250cm9sP3RoaXMubmdDb250cm9sLnZhbHVlOnRoaXMuX3ZhbHVlLCExKSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCkpfSkpfV9jbGVhclNlbGVjdGlvbih0KXt0aGlzLl9zZWxlY3Rpb25Nb2RlbC5jbGVhcigpLHRoaXMuY2hpcHMuZm9yRWFjaCgoZT0+e2UhPT10JiZlLmRlc2VsZWN0KCl9KSksdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfV9zb3J0VmFsdWVzKCl7dGhpcy5fbXVsdGlwbGUmJih0aGlzLl9zZWxlY3Rpb25Nb2RlbC5jbGVhcigpLHRoaXMuY2hpcHMuZm9yRWFjaCgodD0+e3Quc2VsZWN0ZWQmJnRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdCh0KX0pKSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCkpfV9wcm9wYWdhdGVDaGFuZ2VzKHQpe2xldCBlPW51bGw7ZT1BcnJheS5pc0FycmF5KHRoaXMuc2VsZWN0ZWQpP3RoaXMuc2VsZWN0ZWQubWFwKCh0PT50LnZhbHVlKSk6dGhpcy5zZWxlY3RlZD90aGlzLnNlbGVjdGVkLnZhbHVlOnQsdGhpcy5fdmFsdWU9ZSx0aGlzLmNoYW5nZS5lbWl0KG5ldyBjeXQodGhpcyxlKSksdGhpcy52YWx1ZUNoYW5nZS5lbWl0KGUpLHRoaXMuX29uQ2hhbmdlKGUpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfV9ibHVyKCl7dGhpcy5faGFzRm9jdXNlZENoaXAoKXx8dGhpcy5fa2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKC0xKSx0aGlzLmRpc2FibGVkfHwodGhpcy5fY2hpcElucHV0P3NldFRpbWVvdXQoKCgpPT57dGhpcy5mb2N1c2VkfHx0aGlzLl9tYXJrQXNUb3VjaGVkKCl9KSk6dGhpcy5fbWFya0FzVG91Y2hlZCgpKX1fbWFya0FzVG91Y2hlZCgpe3RoaXMuX29uVG91Y2hlZCgpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX1fYWxsb3dGb2N1c0VzY2FwZSgpey0xIT09dGhpcy5fdGFiSW5kZXgmJih0aGlzLl90YWJJbmRleD0tMSxzZXRUaW1lb3V0KCgoKT0+e3RoaXMuX3RhYkluZGV4PXRoaXMuX3VzZXJUYWJJbmRleHx8MCx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pKSl9X3Jlc2V0Q2hpcHMoKXt0aGlzLl9kcm9wU3Vic2NyaXB0aW9ucygpLHRoaXMuX2xpc3RlblRvQ2hpcHNGb2N1cygpLHRoaXMuX2xpc3RlblRvQ2hpcHNTZWxlY3Rpb24oKSx0aGlzLl9saXN0ZW5Ub0NoaXBzUmVtb3ZlZCgpfV9kcm9wU3Vic2NyaXB0aW9ucygpe3RoaXMuX2NoaXBGb2N1c1N1YnNjcmlwdGlvbiYmKHRoaXMuX2NoaXBGb2N1c1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2NoaXBGb2N1c1N1YnNjcmlwdGlvbj1udWxsKSx0aGlzLl9jaGlwQmx1clN1YnNjcmlwdGlvbiYmKHRoaXMuX2NoaXBCbHVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fY2hpcEJsdXJTdWJzY3JpcHRpb249bnVsbCksdGhpcy5fY2hpcFNlbGVjdGlvblN1YnNjcmlwdGlvbiYmKHRoaXMuX2NoaXBTZWxlY3Rpb25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9jaGlwU2VsZWN0aW9uU3Vic2NyaXB0aW9uPW51bGwpLHRoaXMuX2NoaXBSZW1vdmVTdWJzY3JpcHRpb24mJih0aGlzLl9jaGlwUmVtb3ZlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fY2hpcFJlbW92ZVN1YnNjcmlwdGlvbj1udWxsKX1fbGlzdGVuVG9DaGlwc1NlbGVjdGlvbigpe3RoaXMuX2NoaXBTZWxlY3Rpb25TdWJzY3JpcHRpb249dGhpcy5jaGlwU2VsZWN0aW9uQ2hhbmdlcy5zdWJzY3JpYmUoKHQ9Pnt0LnNvdXJjZS5zZWxlY3RlZD90aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3QodC5zb3VyY2UpOnRoaXMuX3NlbGVjdGlvbk1vZGVsLmRlc2VsZWN0KHQuc291cmNlKSx0aGlzLm11bHRpcGxlfHx0aGlzLmNoaXBzLmZvckVhY2goKHQ9PnshdGhpcy5fc2VsZWN0aW9uTW9kZWwuaXNTZWxlY3RlZCh0KSYmdC5zZWxlY3RlZCYmdC5kZXNlbGVjdCgpfSkpLHQuaXNVc2VySW5wdXQmJnRoaXMuX3Byb3BhZ2F0ZUNoYW5nZXMoKX0pKX1fbGlzdGVuVG9DaGlwc0ZvY3VzKCl7dGhpcy5fY2hpcEZvY3VzU3Vic2NyaXB0aW9uPXRoaXMuY2hpcEZvY3VzQ2hhbmdlcy5zdWJzY3JpYmUoKHQ9PntsZXQgZT10aGlzLmNoaXBzLnRvQXJyYXkoKS5pbmRleE9mKHQuY2hpcCk7dGhpcy5faXNWYWxpZEluZGV4KGUpJiZ0aGlzLl9rZXlNYW5hZ2VyLnVwZGF0ZUFjdGl2ZUl0ZW0oZSksdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfSkpLHRoaXMuX2NoaXBCbHVyU3Vic2NyaXB0aW9uPXRoaXMuY2hpcEJsdXJDaGFuZ2VzLnN1YnNjcmliZSgoKCk9Pnt0aGlzLl9ibHVyKCksdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfSkpfV9saXN0ZW5Ub0NoaXBzUmVtb3ZlZCgpe3RoaXMuX2NoaXBSZW1vdmVTdWJzY3JpcHRpb249dGhpcy5jaGlwUmVtb3ZlQ2hhbmdlcy5zdWJzY3JpYmUoKHQ9Pntjb25zdCBlPXQuY2hpcCxuPXRoaXMuY2hpcHMudG9BcnJheSgpLmluZGV4T2YodC5jaGlwKTt0aGlzLl9pc1ZhbGlkSW5kZXgobikmJmUuX2hhc0ZvY3VzJiYodGhpcy5fbGFzdERlc3Ryb3llZENoaXBJbmRleD1uKX0pKX1fb3JpZ2luYXRlc0Zyb21DaGlwKHQpe2xldCBlPXQudGFyZ2V0O2Zvcig7ZSYmZSE9PXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDspe2lmKGUuY2xhc3NMaXN0LmNvbnRhaW5zKCJtYXQtY2hpcCIpKXJldHVybiEwO2U9ZS5wYXJlbnRFbGVtZW50fXJldHVybiExfV9oYXNGb2N1c2VkQ2hpcCgpe3JldHVybiB0aGlzLmNoaXBzJiZ0aGlzLmNoaXBzLnNvbWUoKHQ9PnQuX2hhc0ZvY3VzKSl9X3N5bmNDaGlwc1N0YXRlKCl7dGhpcy5jaGlwcyYmdGhpcy5jaGlwcy5mb3JFYWNoKCh0PT57dC5fY2hpcExpc3REaXNhYmxlZD10aGlzLl9kaXNhYmxlZCx0Ll9jaGlwTGlzdE11bHRpcGxlPXRoaXMubXVsdGlwbGV9KSl9fWR5dC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8ZHl0KShNdShjaCksTXUoSGgpLE11KE16LDgpLE11KEJqLDgpLE11KGxVLDgpLE11KGVIKSxNdShuaiwxMCkpfSxkeXQuybVjbXA9VW8oe3R5cGU6ZHl0LHNlbGVjdG9yczpbWyJtYXQtY2hpcC1saXN0Il1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uIHQoZSxuLG8pe2lmKDEmZSYmR2IobyxpeXQsMSksMiZlKXtsZXQgdDtVYih0PVliKCkpJiYobi5jaGlwcz10KX19LGhvc3RBdHRyczpbMSwibWF0LWNoaXAtbGlzdCJdLGhvc3RWYXJzOjE1LGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MSZlJiZOdSgiZm9jdXMiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uZm9jdXMoKX0pKSgiYmx1ciIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5fYmx1cigpfSkpKCJrZXlkb3duIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5fa2V5ZG93bihlKX0pKSwyJmUmJihrZigiaWQiLG4uX3VpZCksTm0oInRhYmluZGV4IixuLmRpc2FibGVkP251bGw6bi5fdGFiSW5kZXgpKCJhcmlhLWRlc2NyaWJlZGJ5IixuLl9hcmlhRGVzY3JpYmVkYnl8fG51bGwpKCJhcmlhLXJlcXVpcmVkIixuLnJvbGU/bi5yZXF1aXJlZDpudWxsKSgiYXJpYS1kaXNhYmxlZCIsbi5kaXNhYmxlZC50b1N0cmluZygpKSgiYXJpYS1pbnZhbGlkIixuLmVycm9yU3RhdGUpKCJhcmlhLW11bHRpc2VsZWN0YWJsZSIsbi5tdWx0aXBsZSkoInJvbGUiLG4ucm9sZSkoImFyaWEtb3JpZW50YXRpb24iLG4uYXJpYU9yaWVudGF0aW9uKSxhZigibWF0LWNoaXAtbGlzdC1kaXNhYmxlZCIsbi5kaXNhYmxlZCkoIm1hdC1jaGlwLWxpc3QtaW52YWxpZCIsbi5lcnJvclN0YXRlKSgibWF0LWNoaXAtbGlzdC1yZXF1aXJlZCIsbi5yZXF1aXJlZCkpfSxpbnB1dHM6e2FyaWFPcmllbnRhdGlvbjpbImFyaWEtb3JpZW50YXRpb24iLCJhcmlhT3JpZW50YXRpb24iXSxtdWx0aXBsZToibXVsdGlwbGUiLGNvbXBhcmVXaXRoOiJjb21wYXJlV2l0aCIsdmFsdWU6InZhbHVlIixyZXF1aXJlZDoicmVxdWlyZWQiLHBsYWNlaG9sZGVyOiJwbGFjZWhvbGRlciIsZGlzYWJsZWQ6ImRpc2FibGVkIixzZWxlY3RhYmxlOiJzZWxlY3RhYmxlIix0YWJJbmRleDoidGFiSW5kZXgiLGVycm9yU3RhdGVNYXRjaGVyOiJlcnJvclN0YXRlTWF0Y2hlciJ9LG91dHB1dHM6e2NoYW5nZToiY2hhbmdlIix2YWx1ZUNoYW5nZToidmFsdWVDaGFuZ2UifSxleHBvcnRBczpbIm1hdENoaXBMaXN0Il0sZmVhdHVyZXM6W2loKFt7cHJvdmlkZTppVix1c2VFeGlzdGluZzpkeXR9XSksZ21dLG5nQ29udGVudFNlbGVjdG9yczpbIioiXSxkZWNsczoyLHZhcnM6MCxjb25zdHM6W1sxLCJtYXQtY2hpcC1saXN0LXdyYXBwZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKFZ1KCksT3UoMCwiZGl2IiwwKSxqdSgxKSxQdSgpKX0sc3R5bGVzOlsnLm1hdC1jaGlwe3Bvc2l0aW9uOnJlbGF0aXZlO2JveC1zaXppbmc6Ym9yZGVyLWJveDstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCk7Ym9yZGVyOm5vbmU7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9Lm1hdC1zdGFuZGFyZC1jaGlwe3RyYW5zaXRpb246Ym94LXNoYWRvdyAyODBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpO2Rpc3BsYXk6aW5saW5lLWZsZXg7cGFkZGluZzo3cHggMTJweDtib3JkZXItcmFkaXVzOjE2cHg7YWxpZ24taXRlbXM6Y2VudGVyO2N1cnNvcjpkZWZhdWx0O21pbi1oZWlnaHQ6MzJweDtoZWlnaHQ6MXB4fS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZS5tYXQtc3RhbmRhcmQtY2hpcHt0cmFuc2l0aW9uOm5vbmU7YW5pbWF0aW9uOm5vbmV9Lm1hdC1zdGFuZGFyZC1jaGlwIC5tYXQtY2hpcC1yZW1vdmUubWF0LWljb257d2lkdGg6MThweDtoZWlnaHQ6MThweH0ubWF0LXN0YW5kYXJkLWNoaXA6OmFmdGVye3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6aW5oZXJpdDtvcGFjaXR5OjA7Y29udGVudDoiIjtwb2ludGVyLWV2ZW50czpub25lO3RyYW5zaXRpb246b3BhY2l0eSAyMDBtcyBjdWJpYy1iZXppZXIoMC4zNSwgMCwgMC4yNSwgMSl9Lm1hdC1zdGFuZGFyZC1jaGlwOmhvdmVyOjphZnRlcntvcGFjaXR5Oi4xMn0ubWF0LXN0YW5kYXJkLWNoaXA6Zm9jdXN7b3V0bGluZTpub25lfS5tYXQtc3RhbmRhcmQtY2hpcDpmb2N1czo6YWZ0ZXJ7b3BhY2l0eTouMTZ9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXN0YW5kYXJkLWNoaXB7b3V0bGluZTpzb2xpZCAxcHh9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXN0YW5kYXJkLWNoaXA6Zm9jdXN7b3V0bGluZTpkb3R0ZWQgMnB4fS5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1kaXNhYmxlZDo6YWZ0ZXJ7b3BhY2l0eTowfS5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1kaXNhYmxlZCAubWF0LWNoaXAtcmVtb3ZlLC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1kaXNhYmxlZCAubWF0LWNoaXAtdHJhaWxpbmctaWNvbntjdXJzb3I6ZGVmYXVsdH0ubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtd2l0aC10cmFpbGluZy1pY29uLm1hdC1jaGlwLXdpdGgtYXZhdGFyLC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC13aXRoLWF2YXRhcntwYWRkaW5nLXRvcDowO3BhZGRpbmctYm90dG9tOjB9Lm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXdpdGgtdHJhaWxpbmctaWNvbi5tYXQtY2hpcC13aXRoLWF2YXRhcntwYWRkaW5nLXJpZ2h0OjhweDtwYWRkaW5nLWxlZnQ6MH1bZGlyPXJ0bF0gLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXdpdGgtdHJhaWxpbmctaWNvbi5tYXQtY2hpcC13aXRoLWF2YXRhcntwYWRkaW5nLWxlZnQ6OHB4O3BhZGRpbmctcmlnaHQ6MH0ubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtd2l0aC10cmFpbGluZy1pY29ue3BhZGRpbmctdG9wOjdweDtwYWRkaW5nLWJvdHRvbTo3cHg7cGFkZGluZy1yaWdodDo4cHg7cGFkZGluZy1sZWZ0OjEycHh9W2Rpcj1ydGxdIC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC13aXRoLXRyYWlsaW5nLWljb257cGFkZGluZy1sZWZ0OjhweDtwYWRkaW5nLXJpZ2h0OjEycHh9Lm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXdpdGgtYXZhdGFye3BhZGRpbmctbGVmdDowO3BhZGRpbmctcmlnaHQ6MTJweH1bZGlyPXJ0bF0gLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXdpdGgtYXZhdGFye3BhZGRpbmctcmlnaHQ6MDtwYWRkaW5nLWxlZnQ6MTJweH0ubWF0LXN0YW5kYXJkLWNoaXAgLm1hdC1jaGlwLWF2YXRhcnt3aWR0aDoyNHB4O2hlaWdodDoyNHB4O21hcmdpbi1yaWdodDo4cHg7bWFyZ2luLWxlZnQ6NHB4fVtkaXI9cnRsXSAubWF0LXN0YW5kYXJkLWNoaXAgLm1hdC1jaGlwLWF2YXRhcnttYXJnaW4tbGVmdDo4cHg7bWFyZ2luLXJpZ2h0OjRweH0ubWF0LXN0YW5kYXJkLWNoaXAgLm1hdC1jaGlwLXJlbW92ZSwubWF0LXN0YW5kYXJkLWNoaXAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb257d2lkdGg6MThweDtoZWlnaHQ6MThweDtjdXJzb3I6cG9pbnRlcn0ubWF0LXN0YW5kYXJkLWNoaXAgLm1hdC1jaGlwLXJlbW92ZSwubWF0LXN0YW5kYXJkLWNoaXAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb257bWFyZ2luLWxlZnQ6OHB4O21hcmdpbi1yaWdodDowfVtkaXI9cnRsXSAubWF0LXN0YW5kYXJkLWNoaXAgLm1hdC1jaGlwLXJlbW92ZSxbZGlyPXJ0bF0gLm1hdC1zdGFuZGFyZC1jaGlwIC5tYXQtY2hpcC10cmFpbGluZy1pY29ue21hcmdpbi1yaWdodDo4cHg7bWFyZ2luLWxlZnQ6MH0ubWF0LWNoaXAtcmlwcGxle3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmU7Ym9yZGVyLXJhZGl1czppbmhlcml0O292ZXJmbG93OmhpZGRlbn0ubWF0LWNoaXAtbGlzdC13cmFwcGVye2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC13cmFwOndyYXA7YWxpZ24taXRlbXM6Y2VudGVyO21hcmdpbjotNHB4fS5tYXQtY2hpcC1saXN0LXdyYXBwZXIgaW5wdXQubWF0LWlucHV0LWVsZW1lbnQsLm1hdC1jaGlwLWxpc3Qtd3JhcHBlciAubWF0LXN0YW5kYXJkLWNoaXB7bWFyZ2luOjRweH0ubWF0LWNoaXAtbGlzdC1zdGFja2VkIC5tYXQtY2hpcC1saXN0LXdyYXBwZXJ7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9Lm1hdC1jaGlwLWxpc3Qtc3RhY2tlZCAubWF0LWNoaXAtbGlzdC13cmFwcGVyIC5tYXQtc3RhbmRhcmQtY2hpcHt3aWR0aDoxMDAlfS5tYXQtY2hpcC1hdmF0YXJ7Ym9yZGVyLXJhZGl1czo1MCU7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O292ZXJmbG93OmhpZGRlbjtvYmplY3QtZml0OmNvdmVyfWlucHV0Lm1hdC1jaGlwLWlucHV0e3dpZHRoOjE1MHB4O21hcmdpbjo0cHg7ZmxleDoxIDAgMTUwcHh9XG4nXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxkeXQuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpjaH0se3R5cGU6SGh9LHt0eXBlOk16LGRlY29yYXRvcnM6W3t0eXBlOl9zfV19LHt0eXBlOkJqLGRlY29yYXRvcnM6W3t0eXBlOl9zfV19LHt0eXBlOmxVLGRlY29yYXRvcnM6W3t0eXBlOl9zfV19LHt0eXBlOmVIfSx7dHlwZTpuaixkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6Q3N9XX1dLGR5dC5wcm9wRGVjb3JhdG9ycz17ZXJyb3JTdGF0ZU1hdGNoZXI6W3t0eXBlOnlffV0sbXVsdGlwbGU6W3t0eXBlOnlffV0sY29tcGFyZVdpdGg6W3t0eXBlOnlffV0sdmFsdWU6W3t0eXBlOnlffV0scmVxdWlyZWQ6W3t0eXBlOnlffV0scGxhY2Vob2xkZXI6W3t0eXBlOnlffV0sZGlzYWJsZWQ6W3t0eXBlOnlffV0sYXJpYU9yaWVudGF0aW9uOlt7dHlwZTp5XyxhcmdzOlsiYXJpYS1vcmllbnRhdGlvbiJdfV0sc2VsZWN0YWJsZTpbe3R5cGU6eV99XSx0YWJJbmRleDpbe3R5cGU6eV99XSxjaGFuZ2U6W3t0eXBlOl9ffV0sdmFsdWVDaGFuZ2U6W3t0eXBlOl9ffV0sY2hpcHM6W3t0eXBlOnpyLGFyZ3M6W2l5dCx7ZGVzY2VuZGFudHM6ITB9XX1dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGR5dCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJtYXQtY2hpcC1saXN0Iix0ZW1wbGF0ZTonPGRpdiBjbGFzcz0ibWF0LWNoaXAtbGlzdC13cmFwcGVyIj48bmctY29udGVudD48L25nLWNvbnRlbnQ+PC9kaXY+JyxleHBvcnRBczoibWF0Q2hpcExpc3QiLGhvc3Q6eyJbYXR0ci50YWJpbmRleF0iOiJkaXNhYmxlZCA/IG51bGwgOiBfdGFiSW5kZXgiLCJbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XSI6Il9hcmlhRGVzY3JpYmVkYnkgfHwgbnVsbCIsIlthdHRyLmFyaWEtcmVxdWlyZWRdIjoicm9sZSA/IHJlcXVpcmVkIDogbnVsbCIsIlthdHRyLmFyaWEtZGlzYWJsZWRdIjoiZGlzYWJsZWQudG9TdHJpbmcoKSIsIlthdHRyLmFyaWEtaW52YWxpZF0iOiJlcnJvclN0YXRlIiwiW2F0dHIuYXJpYS1tdWx0aXNlbGVjdGFibGVdIjoibXVsdGlwbGUiLCJbYXR0ci5yb2xlXSI6InJvbGUiLCJbY2xhc3MubWF0LWNoaXAtbGlzdC1kaXNhYmxlZF0iOiJkaXNhYmxlZCIsIltjbGFzcy5tYXQtY2hpcC1saXN0LWludmFsaWRdIjoiZXJyb3JTdGF0ZSIsIltjbGFzcy5tYXQtY2hpcC1saXN0LXJlcXVpcmVkXSI6InJlcXVpcmVkIiwiW2F0dHIuYXJpYS1vcmllbnRhdGlvbl0iOiJhcmlhT3JpZW50YXRpb24iLGNsYXNzOiJtYXQtY2hpcC1saXN0IiwiKGZvY3VzKSI6ImZvY3VzKCkiLCIoYmx1cikiOiJfYmx1cigpIiwiKGtleWRvd24pIjoiX2tleWRvd24oJGV2ZW50KSIsIltpZF0iOiJfdWlkIn0scHJvdmlkZXJzOlt7cHJvdmlkZTppVix1c2VFeGlzdGluZzpkeXR9XSxlbmNhcHN1bGF0aW9uOlBvLk5vbmUsY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaCxzdHlsZXM6WycubWF0LWNoaXB7cG9zaXRpb246cmVsYXRpdmU7Ym94LXNpemluZzpib3JkZXItYm94Oy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDt0cmFuc2Zvcm06dHJhbnNsYXRlWigwKTtib3JkZXI6bm9uZTstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZX0ubWF0LXN0YW5kYXJkLWNoaXB7dHJhbnNpdGlvbjpib3gtc2hhZG93IDI4MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7ZGlzcGxheTppbmxpbmUtZmxleDtwYWRkaW5nOjdweCAxMnB4O2JvcmRlci1yYWRpdXM6MTZweDthbGlnbi1pdGVtczpjZW50ZXI7Y3Vyc29yOmRlZmF1bHQ7bWluLWhlaWdodDozMnB4O2hlaWdodDoxcHh9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlLm1hdC1zdGFuZGFyZC1jaGlwe3RyYW5zaXRpb246bm9uZTthbmltYXRpb246bm9uZX0ubWF0LXN0YW5kYXJkLWNoaXAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbnt3aWR0aDoxOHB4O2hlaWdodDoxOHB4fS5tYXQtc3RhbmRhcmQtY2hpcDo6YWZ0ZXJ7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czppbmhlcml0O29wYWNpdHk6MDtjb250ZW50OiIiO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5IDIwMG1zIGN1YmljLWJlemllcigwLjM1LCAwLCAwLjI1LCAxKX0ubWF0LXN0YW5kYXJkLWNoaXA6aG92ZXI6OmFmdGVye29wYWNpdHk6LjEyfS5tYXQtc3RhbmRhcmQtY2hpcDpmb2N1c3tvdXRsaW5lOm5vbmV9Lm1hdC1zdGFuZGFyZC1jaGlwOmZvY3VzOjphZnRlcntvcGFjaXR5Oi4xNn0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc3RhbmRhcmQtY2hpcHtvdXRsaW5lOnNvbGlkIDFweH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc3RhbmRhcmQtY2hpcDpmb2N1c3tvdXRsaW5lOmRvdHRlZCAycHh9Lm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLWRpc2FibGVkOjphZnRlcntvcGFjaXR5OjB9Lm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLWRpc2FibGVkIC5tYXQtY2hpcC1yZW1vdmUsLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLWRpc2FibGVkIC5tYXQtY2hpcC10cmFpbGluZy1pY29ue2N1cnNvcjpkZWZhdWx0fS5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC13aXRoLXRyYWlsaW5nLWljb24ubWF0LWNoaXAtd2l0aC1hdmF0YXIsLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXdpdGgtYXZhdGFye3BhZGRpbmctdG9wOjA7cGFkZGluZy1ib3R0b206MH0ubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtd2l0aC10cmFpbGluZy1pY29uLm1hdC1jaGlwLXdpdGgtYXZhdGFye3BhZGRpbmctcmlnaHQ6OHB4O3BhZGRpbmctbGVmdDowfVtkaXI9cnRsXSAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtd2l0aC10cmFpbGluZy1pY29uLm1hdC1jaGlwLXdpdGgtYXZhdGFye3BhZGRpbmctbGVmdDo4cHg7cGFkZGluZy1yaWdodDowfS5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC13aXRoLXRyYWlsaW5nLWljb257cGFkZGluZy10b3A6N3B4O3BhZGRpbmctYm90dG9tOjdweDtwYWRkaW5nLXJpZ2h0OjhweDtwYWRkaW5nLWxlZnQ6MTJweH1bZGlyPXJ0bF0gLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXdpdGgtdHJhaWxpbmctaWNvbntwYWRkaW5nLWxlZnQ6OHB4O3BhZGRpbmctcmlnaHQ6MTJweH0ubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtd2l0aC1hdmF0YXJ7cGFkZGluZy1sZWZ0OjA7cGFkZGluZy1yaWdodDoxMnB4fVtkaXI9cnRsXSAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtd2l0aC1hdmF0YXJ7cGFkZGluZy1yaWdodDowO3BhZGRpbmctbGVmdDoxMnB4fS5tYXQtc3RhbmRhcmQtY2hpcCAubWF0LWNoaXAtYXZhdGFye3dpZHRoOjI0cHg7aGVpZ2h0OjI0cHg7bWFyZ2luLXJpZ2h0OjhweDttYXJnaW4tbGVmdDo0cHh9W2Rpcj1ydGxdIC5tYXQtc3RhbmRhcmQtY2hpcCAubWF0LWNoaXAtYXZhdGFye21hcmdpbi1sZWZ0OjhweDttYXJnaW4tcmlnaHQ6NHB4fS5tYXQtc3RhbmRhcmQtY2hpcCAubWF0LWNoaXAtcmVtb3ZlLC5tYXQtc3RhbmRhcmQtY2hpcCAubWF0LWNoaXAtdHJhaWxpbmctaWNvbnt3aWR0aDoxOHB4O2hlaWdodDoxOHB4O2N1cnNvcjpwb2ludGVyfS5tYXQtc3RhbmRhcmQtY2hpcCAubWF0LWNoaXAtcmVtb3ZlLC5tYXQtc3RhbmRhcmQtY2hpcCAubWF0LWNoaXAtdHJhaWxpbmctaWNvbnttYXJnaW4tbGVmdDo4cHg7bWFyZ2luLXJpZ2h0OjB9W2Rpcj1ydGxdIC5tYXQtc3RhbmRhcmQtY2hpcCAubWF0LWNoaXAtcmVtb3ZlLFtkaXI9cnRsXSAubWF0LXN0YW5kYXJkLWNoaXAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb257bWFyZ2luLXJpZ2h0OjhweDttYXJnaW4tbGVmdDowfS5tYXQtY2hpcC1yaXBwbGV7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6bm9uZTtib3JkZXItcmFkaXVzOmluaGVyaXQ7b3ZlcmZsb3c6aGlkZGVufS5tYXQtY2hpcC1saXN0LXdyYXBwZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztmbGV4LXdyYXA6d3JhcDthbGlnbi1pdGVtczpjZW50ZXI7bWFyZ2luOi00cHh9Lm1hdC1jaGlwLWxpc3Qtd3JhcHBlciBpbnB1dC5tYXQtaW5wdXQtZWxlbWVudCwubWF0LWNoaXAtbGlzdC13cmFwcGVyIC5tYXQtc3RhbmRhcmQtY2hpcHttYXJnaW46NHB4fS5tYXQtY2hpcC1saXN0LXN0YWNrZWQgLm1hdC1jaGlwLWxpc3Qtd3JhcHBlcntmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6ZmxleC1zdGFydH0ubWF0LWNoaXAtbGlzdC1zdGFja2VkIC5tYXQtY2hpcC1saXN0LXdyYXBwZXIgLm1hdC1zdGFuZGFyZC1jaGlwe3dpZHRoOjEwMCV9Lm1hdC1jaGlwLWF2YXRhcntib3JkZXItcmFkaXVzOjUwJTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7b3ZlcmZsb3c6aGlkZGVuO29iamVjdC1maXQ6Y292ZXJ9aW5wdXQubWF0LWNoaXAtaW5wdXR7d2lkdGg6MTUwcHg7bWFyZ2luOjRweDtmbGV4OjEgMCAxNTBweH1cbiddfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Y2h9LHt0eXBlOkhofSx7dHlwZTpNeixkZWNvcmF0b3JzOlt7dHlwZTpfc31dfSx7dHlwZTpCaixkZWNvcmF0b3JzOlt7dHlwZTpfc31dfSx7dHlwZTpsVSxkZWNvcmF0b3JzOlt7dHlwZTpfc31dfSx7dHlwZTplSH0se3R5cGU6bmosZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOkNzfV19XX0pLHthcmlhT3JpZW50YXRpb246W3t0eXBlOnlfLGFyZ3M6WyJhcmlhLW9yaWVudGF0aW9uIl19XSxjaGFuZ2U6W3t0eXBlOl9ffV0sdmFsdWVDaGFuZ2U6W3t0eXBlOl9ffV0sbXVsdGlwbGU6W3t0eXBlOnlffV0sY29tcGFyZVdpdGg6W3t0eXBlOnlffV0sdmFsdWU6W3t0eXBlOnlffV0scmVxdWlyZWQ6W3t0eXBlOnlffV0scGxhY2Vob2xkZXI6W3t0eXBlOnlffV0sZGlzYWJsZWQ6W3t0eXBlOnlffV0sc2VsZWN0YWJsZTpbe3R5cGU6eV99XSx0YWJJbmRleDpbe3R5cGU6eV99XSxlcnJvclN0YXRlTWF0Y2hlcjpbe3R5cGU6eV99XSxjaGlwczpbe3R5cGU6enIsYXJnczpbaXl0LHtkZXNjZW5kYW50czohMH1dfV19KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmxldCBweXQ9MDtjbGFzcyBteXR7Y29uc3RydWN0b3IodCxlKXt0aGlzLl9lbGVtZW50UmVmPXQsdGhpcy5fZGVmYXVsdE9wdGlvbnM9ZSx0aGlzLmZvY3VzZWQ9ITEsdGhpcy5fYWRkT25CbHVyPSExLHRoaXMuc2VwYXJhdG9yS2V5Q29kZXM9dGhpcy5fZGVmYXVsdE9wdGlvbnMuc2VwYXJhdG9yS2V5Q29kZXMsdGhpcy5jaGlwRW5kPW5ldyBBYix0aGlzLnBsYWNlaG9sZGVyPSIiLHRoaXMuaWQ9Im1hdC1jaGlwLWxpc3QtaW5wdXQtIitweXQrKyx0aGlzLl9kaXNhYmxlZD0hMSx0aGlzLl9pbnB1dEVsZW1lbnQ9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50fXNldCBjaGlwTGlzdCh0KXt0JiYodGhpcy5fY2hpcExpc3Q9dCx0aGlzLl9jaGlwTGlzdC5yZWdpc3RlcklucHV0KHRoaXMpKX1nZXQgYWRkT25CbHVyKCl7cmV0dXJuIHRoaXMuX2FkZE9uQmx1cn1zZXQgYWRkT25CbHVyKHQpe3RoaXMuX2FkZE9uQmx1cj1ySSh0KX1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR8fHRoaXMuX2NoaXBMaXN0JiZ0aGlzLl9jaGlwTGlzdC5kaXNhYmxlZH1zZXQgZGlzYWJsZWQodCl7dGhpcy5fZGlzYWJsZWQ9ckkodCl9Z2V0IGVtcHR5KCl7cmV0dXJuIXRoaXMuX2lucHV0RWxlbWVudC52YWx1ZX1uZ09uQ2hhbmdlcygpe3RoaXMuX2NoaXBMaXN0LnN0YXRlQ2hhbmdlcy5uZXh0KCl9X2tleWRvd24odCl7dCYmOT09PXQua2V5Q29kZSYmIWFJKHQsInNoaWZ0S2V5IikmJnRoaXMuX2NoaXBMaXN0Ll9hbGxvd0ZvY3VzRXNjYXBlKCksdGhpcy5fZW1pdENoaXBFbmQodCl9X2JsdXIoKXt0aGlzLmFkZE9uQmx1ciYmdGhpcy5fZW1pdENoaXBFbmQoKSx0aGlzLmZvY3VzZWQ9ITEsdGhpcy5fY2hpcExpc3QuZm9jdXNlZHx8dGhpcy5fY2hpcExpc3QuX2JsdXIoKSx0aGlzLl9jaGlwTGlzdC5zdGF0ZUNoYW5nZXMubmV4dCgpfV9mb2N1cygpe3RoaXMuZm9jdXNlZD0hMCx0aGlzLl9jaGlwTGlzdC5zdGF0ZUNoYW5nZXMubmV4dCgpfV9lbWl0Q2hpcEVuZCh0KXshdGhpcy5faW5wdXRFbGVtZW50LnZhbHVlJiZ0JiZ0aGlzLl9jaGlwTGlzdC5fa2V5ZG93bih0KSx0JiYhdGhpcy5faXNTZXBhcmF0b3JLZXkodCl8fCh0aGlzLmNoaXBFbmQuZW1pdCh7aW5wdXQ6dGhpcy5faW5wdXRFbGVtZW50LHZhbHVlOnRoaXMuX2lucHV0RWxlbWVudC52YWx1ZX0pLHQmJnQucHJldmVudERlZmF1bHQoKSl9X29uSW5wdXQoKXt0aGlzLl9jaGlwTGlzdC5zdGF0ZUNoYW5nZXMubmV4dCgpfWZvY3VzKHQpe3RoaXMuX2lucHV0RWxlbWVudC5mb2N1cyh0KX1faXNTZXBhcmF0b3JLZXkodCl7cmV0dXJuIWFJKHQpJiZuZXcgU2V0KHRoaXMuc2VwYXJhdG9yS2V5Q29kZXMpLmhhcyh0LmtleUNvZGUpfX1teXQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fG15dCkoTXUoY2gpLE11KHJ5dCkpfSxteXQuybVkaXI9Sm8oe3R5cGU6bXl0LHNlbGVjdG9yczpbWyJpbnB1dCIsIm1hdENoaXBJbnB1dEZvciIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1jaGlwLWlucHV0IiwibWF0LWlucHV0LWVsZW1lbnQiXSxob3N0VmFyczo1LGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MSZlJiZOdSgia2V5ZG93biIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4uX2tleWRvd24oZSl9KSkoImJsdXIiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uX2JsdXIoKX0pKSgiZm9jdXMiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uX2ZvY3VzKCl9KSkoImlucHV0IiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLl9vbklucHV0KCl9KSksMiZlJiYoa2YoImlkIixuLmlkKSxObSgiZGlzYWJsZWQiLG4uZGlzYWJsZWR8fG51bGwpKCJwbGFjZWhvbGRlciIsbi5wbGFjZWhvbGRlcnx8bnVsbCkoImFyaWEtaW52YWxpZCIsbi5fY2hpcExpc3QmJm4uX2NoaXBMaXN0Lm5nQ29udHJvbD9uLl9jaGlwTGlzdC5uZ0NvbnRyb2wuaW52YWxpZDpudWxsKSgiYXJpYS1yZXF1aXJlZCIsbi5fY2hpcExpc3QmJm4uX2NoaXBMaXN0LnJlcXVpcmVkfHxudWxsKSl9LGlucHV0czp7c2VwYXJhdG9yS2V5Q29kZXM6WyJtYXRDaGlwSW5wdXRTZXBhcmF0b3JLZXlDb2RlcyIsInNlcGFyYXRvcktleUNvZGVzIl0scGxhY2Vob2xkZXI6InBsYWNlaG9sZGVyIixpZDoiaWQiLGNoaXBMaXN0OlsibWF0Q2hpcElucHV0Rm9yIiwiY2hpcExpc3QiXSxhZGRPbkJsdXI6WyJtYXRDaGlwSW5wdXRBZGRPbkJsdXIiLCJhZGRPbkJsdXIiXSxkaXNhYmxlZDoiZGlzYWJsZWQifSxvdXRwdXRzOntjaGlwRW5kOiJtYXRDaGlwSW5wdXRUb2tlbkVuZCJ9LGV4cG9ydEFzOlsibWF0Q2hpcElucHV0IiwibWF0Q2hpcElucHV0Rm9yIl0sZmVhdHVyZXM6W1NpXX0pLG15dC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmNofSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbcnl0XX1dfV0sbXl0LnByb3BEZWNvcmF0b3JzPXtjaGlwTGlzdDpbe3R5cGU6eV8sYXJnczpbIm1hdENoaXBJbnB1dEZvciJdfV0sYWRkT25CbHVyOlt7dHlwZTp5XyxhcmdzOlsibWF0Q2hpcElucHV0QWRkT25CbHVyIl19XSxzZXBhcmF0b3JLZXlDb2Rlczpbe3R5cGU6eV8sYXJnczpbIm1hdENoaXBJbnB1dFNlcGFyYXRvcktleUNvZGVzIl19XSxjaGlwRW5kOlt7dHlwZTpfXyxhcmdzOlsibWF0Q2hpcElucHV0VG9rZW5FbmQiXX1dLHBsYWNlaG9sZGVyOlt7dHlwZTp5X31dLGlkOlt7dHlwZTp5X31dLGRpc2FibGVkOlt7dHlwZTp5X31dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKG15dCxbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJpbnB1dFttYXRDaGlwSW5wdXRGb3JdIixleHBvcnRBczoibWF0Q2hpcElucHV0LCBtYXRDaGlwSW5wdXRGb3IiLGhvc3Q6e2NsYXNzOiJtYXQtY2hpcC1pbnB1dCBtYXQtaW5wdXQtZWxlbWVudCIsIihrZXlkb3duKSI6Il9rZXlkb3duKCRldmVudCkiLCIoYmx1cikiOiJfYmx1cigpIiwiKGZvY3VzKSI6Il9mb2N1cygpIiwiKGlucHV0KSI6Il9vbklucHV0KCkiLCJbaWRdIjoiaWQiLCJbYXR0ci5kaXNhYmxlZF0iOiJkaXNhYmxlZCB8fCBudWxsIiwiW2F0dHIucGxhY2Vob2xkZXJdIjoicGxhY2Vob2xkZXIgfHwgbnVsbCIsIlthdHRyLmFyaWEtaW52YWxpZF0iOiJfY2hpcExpc3QgJiYgX2NoaXBMaXN0Lm5nQ29udHJvbCA/IF9jaGlwTGlzdC5uZ0NvbnRyb2wuaW52YWxpZCA6IG51bGwiLCJbYXR0ci5hcmlhLXJlcXVpcmVkXSI6Il9jaGlwTGlzdCAmJiBfY2hpcExpc3QucmVxdWlyZWQgfHwgbnVsbCJ9fV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Y2h9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltyeXRdfV19XX0pLHtzZXBhcmF0b3JLZXlDb2Rlczpbe3R5cGU6eV8sYXJnczpbIm1hdENoaXBJbnB1dFNlcGFyYXRvcktleUNvZGVzIl19XSxjaGlwRW5kOlt7dHlwZTpfXyxhcmdzOlsibWF0Q2hpcElucHV0VG9rZW5FbmQiXX1dLHBsYWNlaG9sZGVyOlt7dHlwZTp5X31dLGlkOlt7dHlwZTp5X31dLGNoaXBMaXN0Olt7dHlwZTp5XyxhcmdzOlsibWF0Q2hpcElucHV0Rm9yIl19XSxhZGRPbkJsdXI6W3t0eXBlOnlfLGFyZ3M6WyJtYXRDaGlwSW5wdXRBZGRPbkJsdXIiXX1dLGRpc2FibGVkOlt7dHlwZTp5X31dfSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCB1eXQ9W2R5dCxpeXQsbXl0LGF5dCxueXQsb3l0XSxmeXQ9e3NlcGFyYXRvcktleUNvZGVzOlt0SV19O2NsYXNzIGd5dHt9Z3l0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxneXQpfSxneXQuybVtb2Q9Wm8oe3R5cGU6Z3l0fSksZ3l0Lsm1aW5qPWNvKHtwcm92aWRlcnM6W2VILHtwcm92aWRlOnJ5dCx1c2VWYWx1ZTpmeXR9XSxpbXBvcnRzOltbVHpdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oZ3l0LHtkZWNsYXJhdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm5bZHl0LGl5dCxteXQsYXl0LG55dCxveXRdfSxpbXBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW1R6XX0sZXhwb3J0czpmdW5jdGlvbigpe3JldHVybltkeXQsaXl0LG15dCxheXQsbnl0LG95dF19fSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihneXQsW3t0eXBlOmtfLGFyZ3M6W3tpbXBvcnRzOltUel0sZXhwb3J0czp1eXQsZGVjbGFyYXRpb25zOnV5dCxwcm92aWRlcnM6W2VILHtwcm92aWRlOnJ5dCx1c2VWYWx1ZTpmeXR9XX1dfV0sbnVsbCxudWxsKTtjb25zdCBoeXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm57ImVtYmVkZGluZy1zZWxlY3RlZCI6dCwiZW1iZWRkaW5nLXVuc2VsZWN0ZWQiOmV9fTtmdW5jdGlvbiBieXQodCxlKXtpZigxJnQpe2NvbnN0IHQ9RXUoKTtPdSgwLCJtYXQtaWNvbiIsNSksTnUoImNsaWNrIiwoZnVuY3Rpb24gZSgpe3JhKHQpO2NvbnN0IG49THUoKTtyZXR1cm4gbi5vblNlbGVjdC5lbWl0KG4ubWV0cmljKX0pKSxQdSgpfWlmKDImdCl7Y29uc3QgdD1MdSgpO3Z1KCJuZ0NsYXNzIixoYigxLGh5dCx0LmVtYmVkZGluZ3NNZXRyaWM9PT10Lm1ldHJpYyx0LmVtYmVkZGluZ3NNZXRyaWMhPT10Lm1ldHJpYykpfX1jb25zdCB5eXQ9ZnVuY3Rpb24odCl7cmV0dXJue3dpZHRoOnR9fSxfeXQ9ZnVuY3Rpb24odCl7cmV0dXJueyJ2YWx1ZS1pbnZhbGlkIjp0fX07Y2xhc3MgQ3l0e2NvbnN0cnVjdG9yKCl7dGhpcy5vblJlbW92ZT1uZXcgQWIsdGhpcy5vblNlbGVjdD1uZXcgQWIsdGhpcy5vbkZpbHRlckNoYW5nZT1uZXcgQWIsdGhpcy5mb2N1c01pbj0hMSx0aGlzLmZvY3VzTWF4PSExLHRoaXMubmdVbnN1YnNjcmliZT1uZXcgeH1uZ09uSW5pdCgpe3RoaXMubWluRm9ybUNvbnRyb2w9bmV3IElqKHRoaXMuZmlsdGVyVmFsdWVzLm1pbixbVFYucmVxdWlyZWQsVFYubWluKC0xKSxUVi5tYXgoMSksdGhpcy5taW5WYWx1ZVZhbGlkYXRvci5iaW5kKHRoaXMpXSksdGhpcy5tYXhGb3JtQ29udHJvbD1uZXcgSWoodGhpcy5maWx0ZXJWYWx1ZXMubWF4LFtUVi5yZXF1aXJlZCxUVi5taW4oLTEpLFRWLm1heCgxKSx0aGlzLm1heFZhbHVlVmFsaWRhdG9yLmJpbmQodGhpcyldKSx0aGlzLm1pbkZvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKHVuKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgoKCk9Pnt0aGlzLm1pbkZvcm1Db250cm9sLnZhbGlkJiZ0aGlzLm1heEZvcm1Db250cm9sLnZhbGlkJiZ0aGlzLm9uRmlsdGVyQ2hhbmdlLmVtaXQoe21pbjpwYXJzZUZsb2F0KHRoaXMubWluRm9ybUNvbnRyb2wudmFsdWUpLG1heDpwYXJzZUZsb2F0KHRoaXMubWF4Rm9ybUNvbnRyb2wudmFsdWUpfSl9KSksdGhpcy5tYXhGb3JtQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZSh1bih0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5taW5Gb3JtQ29udHJvbC52YWxpZCYmdGhpcy5tYXhGb3JtQ29udHJvbC52YWxpZCYmdGhpcy5vbkZpbHRlckNoYW5nZS5lbWl0KHttaW46cGFyc2VGbG9hdCh0aGlzLm1pbkZvcm1Db250cm9sLnZhbHVlKSxtYXg6cGFyc2VGbG9hdCh0aGlzLm1heEZvcm1Db250cm9sLnZhbHVlKX0pfSkpfW5nT25DaGFuZ2VzKHQpe3RoaXMubWluRm9ybUNvbnRyb2wmJnRoaXMubWF4Rm9ybUNvbnRyb2wmJih0aGlzLm1pbkZvcm1Db250cm9sLnNldFZhbHVlKHRoaXMuZmlsdGVyVmFsdWVzLm1pbix7ZW1pdEV2ZW50OiExfSksdGhpcy5tYXhGb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLmZpbHRlclZhbHVlcy5tYXgse2VtaXRFdmVudDohMX0pKX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9bWluVmFsdWVWYWxpZGF0b3IodCl7cmV0dXJuIHRoaXMubWF4Rm9ybUNvbnRyb2wmJiJOYU4iIT09dC52YWx1ZT9pc05hTihwYXJzZUZsb2F0KHQudmFsdWUpKT97dmFsdWU6InRoZSBzdHJpbmcgeW91IGVudGVyZWQgaXMgbmVpdGhlciBOYU4gbm9yIGEgbnVtYmVyIn06cGFyc2VGbG9hdCh0LnZhbHVlKT5wYXJzZUZsb2F0KHRoaXMubWF4Rm9ybUNvbnRyb2wudmFsdWUpP3t2YWx1ZToidGhlIG51bWJlciB5b3UgZW50ZXJlZCBpcyBsYXJnZXIgdGhhbiB0aGUgbWF4IHZhbHVlIn06bnVsbDpudWxsfW1heFZhbHVlVmFsaWRhdG9yKHQpe3JldHVybiB0aGlzLm1pbkZvcm1Db250cm9sPyJOYU4iPT09dGhpcy5taW5Gb3JtQ29udHJvbC52YWx1ZSYmIk5hTiI9PT10LnZhbHVlP251bGw6aXNOYU4ocGFyc2VGbG9hdCh0LnZhbHVlKSk/e3ZhbHVlOiJ0aGUgc3RyaW5nIHlvdSBlbnRlcmVkIGlzIG5laXRoZXIgTmFOIG5vciBhIG51bWJlciJ9OnQudmFsdWU8dGhpcy5taW5Gb3JtQ29udHJvbC52YWx1ZT97dmFsdWU6InRoZSBudW1iZXIgeW91IGVudGVyZWQgaXMgc21hbGxlciB0aGFuIHRoZSBtaW4gdmFsdWUifTpudWxsOm51bGx9Z2V0RXJyb3JEZXNjcmlwdGlvbih0KXtpZih0KXtjb25zdCBlPU9iamVjdC5rZXlzKHQpWzBdO3JldHVybiJyZXF1aXJlZCI9PT1lPyJ5b3UgZGlkIG5vdCBlbnRlciBhbnl0aGluZyI6Im1pbiI9PT1lPyJ0aGUgbnVtYmVyIG11c3QgYmUgYXQgbGVhc3QgLTEuMCI6Im1heCI9PT1lPyJ0aGUgbnVtYmVyIGlzIGJpZ2dlciB0aGFuIDEuMCI6dFtlXX1yZXR1cm4iIn19Q3l0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxDeXQpfSxDeXQuybVjbXA9VW8oe3R5cGU6Q3l0LHNlbGVjdG9yczpbWyJtZXRyaWMtYXJpdGhtZXRpYy1lbGVtZW50LWNvbXBvbmVudCJdXSxpbnB1dHM6e21ldHJpYzoibWV0cmljIixmaWx0ZXJWYWx1ZXM6ImZpbHRlclZhbHVlcyIsaGFzRW1iZWRkaW5nc0RhdGE6Imhhc0VtYmVkZGluZ3NEYXRhIixlbWJlZGRpbmdzTWV0cmljOiJlbWJlZGRpbmdzTWV0cmljIn0sb3V0cHV0czp7b25SZW1vdmU6Im9uUmVtb3ZlIixvblNlbGVjdDoib25TZWxlY3QiLG9uRmlsdGVyQ2hhbmdlOiJvbkZpbHRlckNoYW5nZSJ9LGZlYXR1cmVzOltTaV0sZGVjbHM6MTAsdmFyczoyMixjb25zdHM6W1sxLCJmaWx0ZXItY2hpcCIsMywicmVtb3ZlZCJdLFsiY2xhc3MiLCJlbWJlZGRpbmdzLWJ1dHRvbiIsInN2Z0ljb24iLCJncm91cF93b3JrXzI0cHgiLDMsIm5nQ2xhc3MiLCJjbGljayIsNCwibmdJZiJdLFsxLCJtZXRyaWMtYXJpdGhtZXRpYy1lbGVtZW50LXJhbmdlIiwzLCJrZXlkb3duIl0sWyJtYXRJbnB1dCIsIiIsMSwiaW5wdXQtZmllbGQiLDMsInZhbHVlIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBEaXNhYmxlZCIsIm5nU3R5bGUiLCJuZ0NsYXNzIiwiZm9ybUNvbnRyb2wiLCJmb2N1cyIsImZvY3Vzb3V0Il0sWyJtYXRDaGlwUmVtb3ZlIiwiIiwic3ZnSWNvbiIsImNhbmNlbF8yNHB4Il0sWyJzdmdJY29uIiwiZ3JvdXBfd29ya18yNHB4IiwxLCJlbWJlZGRpbmdzLWJ1dHRvbiIsMywibmdDbGFzcyIsImNsaWNrIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihPdSgwLCJtYXQtY2hpcCIsMCksTnUoInJlbW92ZWQiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub25SZW1vdmUuZW1pdChuLm1ldHJpYyl9KSksV20oMSxieXQsMSw0LCJtYXQtaWNvbiIsMSksTWYoMiksT3UoMywiZGl2IiwyKSxOdSgia2V5ZG93biIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIGUuc3RvcFByb3BhZ2F0aW9uKCl9KSksTWYoNCwiIFsgIiksT3UoNSwiaW5wdXQiLDMpLE51KCJmb2N1cyIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5mb2N1c01pbj0hMH0pKSgiZm9jdXNvdXQiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uZm9jdXNNaW49ITF9KSksUHUoKSxNZig2LCIgOyAiKSxPdSg3LCJpbnB1dCIsMyksTnUoImZvY3VzIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLmZvY3VzTWF4PSEwfSkpKCJmb2N1c291dCIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5mb2N1c01heD0hMX0pKSxQdSgpLE1mKDgsIiBdICIpLFB1KCksd3UoOSwibWF0LWljb24iLDQpLFB1KCkpLDImZSYmKEpjKDEpLHZ1KCJuZ0lmIixuLmhhc0VtYmVkZGluZ3NEYXRhKSxKYygxKSx4ZigiICIsbi5tZXRyaWMsIiAiKSxKYygzKSx2dSgidmFsdWUiLG4uZmlsdGVyVmFsdWVzLm1pbikoIm1hdFRvb2x0aXAiLG4uZ2V0RXJyb3JEZXNjcmlwdGlvbihuLm1pbkZvcm1Db250cm9sLmVycm9ycykpKCJtYXRUb29sdGlwRGlzYWJsZWQiLCFuLm1pbkZvcm1Db250cm9sLmludmFsaWQpKCJuZ1N0eWxlIixnYigxNCx5eXQsbi5mb2N1c01pbj8iMTAwcHgiOm4ubWluRm9ybUNvbnRyb2wudmFsdWUudG9TdHJpbmcoKS5sZW5ndGgrImNoIikpKCJuZ0NsYXNzIixnYigxNixfeXQsIW4ubWluRm9ybUNvbnRyb2wudmFsaWQpKSgiZm9ybUNvbnRyb2wiLG4ubWluRm9ybUNvbnRyb2wpLEpjKDIpLHZ1KCJ2YWx1ZSIsbi5maWx0ZXJWYWx1ZXMubWF4KSgibWF0VG9vbHRpcCIsbi5nZXRFcnJvckRlc2NyaXB0aW9uKG4ubWF4Rm9ybUNvbnRyb2wuZXJyb3JzKSkoIm1hdFRvb2x0aXBEaXNhYmxlZCIsIW4ubWF4Rm9ybUNvbnRyb2wuaW52YWxpZCkoIm5nU3R5bGUiLGdiKDE4LHl5dCxuLmZvY3VzTWF4PyIxMDBweCI6bi5tYXhGb3JtQ29udHJvbC52YWx1ZS50b1N0cmluZygpLmxlbmd0aCsiY2giKSkoIm5nQ2xhc3MiLGdiKDIwLF95dCwhbi5tYXhGb3JtQ29udHJvbC52YWxpZCkpKCJmb3JtQ29udHJvbCIsbi5tYXhGb3JtQ29udHJvbCkpfSxkaXJlY3RpdmVzOltpeXQsYXYsa1YsV1EsZ3YsdHYsYWosclUsY0csYXl0XSxzdHlsZXM6WycubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1iYWRnZS1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo5cHh9Lm1hdC1iYWRnZS1sYXJnZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4fS5tYXQtaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWhlYWRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAyNHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE1cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjgzKS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1oNltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC42NykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtYm9keS1zdHJvbmdbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MCAwIDEycHh9Lm1hdC1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FwdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTJweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6MzAwIDExMnB4LzExMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wNWVtO21hcmdpbjowIDAgNTZweH0ubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNTZweC81NnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMmVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNDVweC80OHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMDVlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDM0cHgvNDBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1yYWlzZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3Ryb2tlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZsYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mYWJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW1pbmktZmFiW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtYnV0dG9uLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FyZC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjBweH0ubWF0LWNhcmQtc3VidGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hlY2tib3gtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC10cmFpbGluZy1pY29uLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC1yZW1vdmUubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxOHB4fS5tYXQtdGFibGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWhlYWRlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb290ZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jYWxlbmRhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FsZW5kYXItYm9keVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYWxlbmRhci1wZXJpb2QtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWRpYWxvZy10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTI1O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTUwJTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjVlbTt3aWR0aDoxLjVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW07bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41ZW0gMDtib3JkZXItdG9wOi44NDM3NWVtIHNvbGlkIHRyYW5zcGFyZW50fS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3RvcDotMC44NDM3NWVtO3BhZGRpbmctdG9wOi44NDM3NWVtfS5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjc1JTttYXJnaW4tdG9wOi42NjY2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNzkxNjY2NjY2N2VtKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAycHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyM2VtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzUzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi41NDE2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNjY2NjY2NjY2N2VtKX1AbWVkaWEgcHJpbnR7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIyZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIxZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMmVtKSBzY2FsZSgwLjc1KX19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjI1ZW0gMCAuNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4wOTM3NWVtO21hcmdpbi10b3A6LTAuNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MWVtIDAgMWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjg0Mzc1ZW07bWFyZ2luLXRvcDotMC4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH1pbnB1dC5tYXQtaW5wdXQtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDotMC4wNjI1ZW19Lm1hdC1tZW51LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1wYWdpbmF0b3JbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXBhZ2luYXRvci1wYWdlLXNpemVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3RbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXN0ZXBwZXItdmVydGljYWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc3RlcC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0Om5vcm1hbH0ubWF0LXN0ZXAtbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRhYi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjB9Lm1hdC10b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTZweH0ubWF0LW9wdGdyb3VwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LXNpbXBsZS1zbmFja2Jhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbltfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRyZWVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbmVzdGVkLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4fS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVdOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtcmlwcGxlLm1hdC1yaXBwbGUtdW5ib3VuZGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6NTAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7dHJhbnNmb3JtOnNjYWxlKDApfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpub25lfS5jZGstdmlzdWFsbHktaGlkZGVuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7bGVmdDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmVtcHR5e2Rpc3BsYXk6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LXBhbmVbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOmF1dG87Ym94LXNpemluZzpib3JkZXItYm94O3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7bWF4LXdpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlfS5jZGstb3ZlcmxheS1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKTtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5Oi42fS5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjMyKX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTowfS5jZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO292ZXJmbG93LXk6c2Nyb2xsfUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnR7fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5ke30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxse2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCAwcyAxbXN9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06bm90KDotd2Via2l0LWF1dG9maWxsKXthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIDBzIDFtc310ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemVbX25nY29udGVudC0lQ09NUCVde3Jlc2l6ZTpub25lfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmdbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OmF1dG8gIWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW4gIWltcG9ydGFudH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nLWZpcmVmb3hbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OjAgIWltcG9ydGFudH0ubWF0LWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0uZmlsdGVyLWNoaXBbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7bWFyZ2luLWxlZnQ6NXB4fS5tZXRyaWMtYXJpdGhtZXRpYy1lbGVtZW50LXJhbmdlW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjojZmZmO2ZvbnQtc2l6ZTouOGVtO2hlaWdodDozMHB4O2p1c3RpZnktY29udGVudDpjZW50ZXI7bGluZS1oZWlnaHQ6MzBweDtwYWRkaW5nOjAgNXB4O21hcmdpbi1sZWZ0OjVweH0uaW5wdXQtZmllbGRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyOm5vbmU7Zm9udC1mYW1pbHk6bW9ub3NwYWNlO2ZvbnQtc2l6ZToxLjFlbTt0cmFuc2l0aW9uOndpZHRoIDFzfS5pbnB1dC1maWVsZFtfbmdjb250ZW50LSVDT01QJV06Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xMik7Ym9yZGVyOm5vbmU7b3V0bGluZTpub25lfS52YWx1ZS1pbnZhbGlkW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojZjQ0MzM2fS5lbWJlZGRpbmctc2VsZWN0ZWRbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNmNTdjMDA7b3BhY2l0eToxfS5lbWJlZGRpbmctdW5zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTouNH0uZW1iZWRkaW5ncy1idXR0b25bX25nY29udGVudC0lQ09NUCVde3dpZHRoOjE4cHg7aGVpZ2h0OjE4cHg7bWFyZ2luLXJpZ2h0OjhweDtjdXJzb3I6cG9pbnRlcn0nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoQ3l0LFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6Im1ldHJpYy1hcml0aG1ldGljLWVsZW1lbnQtY29tcG9uZW50Iix0ZW1wbGF0ZVVybDoiLi9tZXRyaWNfYXJpdGhtZXRpY19lbGVtZW50X2NvbXBvbmVudC5uZy5odG1sIixzdHlsZVVybHM6WyIuL21ldHJpY19hcml0aG1ldGljX2VsZW1lbnRfY29tcG9uZW50LmNzcyJdLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2h9XX1dLG51bGwse21ldHJpYzpbe3R5cGU6eV99XSxmaWx0ZXJWYWx1ZXM6W3t0eXBlOnlffV0saGFzRW1iZWRkaW5nc0RhdGE6W3t0eXBlOnlffV0sZW1iZWRkaW5nc01ldHJpYzpbe3R5cGU6eV99XSxvblJlbW92ZTpbe3R5cGU6X199XSxvblNlbGVjdDpbe3R5cGU6X199XSxvbkZpbHRlckNoYW5nZTpbe3R5cGU6X199XX0pO2NsYXNzIE15dHtjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXQsdGhpcy5maWx0ZXJWYWx1ZXMkPXRoaXMuc3RvcmUucGlwZShSayh0YnQpKS5waXBlKGh0KCh0PT57Y29uc3QgZT10W3RoaXMubWV0cmljXTtyZXR1cm4gZT97bWluOmUuaW5jbHVkZU5hTj8iTmFOIjp0aGlzLnJvdW5kVG9UaHJlZURlY2ltYWxQb2ludHMoZS5taW4pLG1heDplLm1heDxlLm1pbj8iTmFOIjp0aGlzLnJvdW5kVG9UaHJlZURlY2ltYWxQb2ludHMoZS5tYXgpfTp7bWluOi0xLG1heDoxfX0pKSksdGhpcy5oYXNFbWJlZGRpbmdzRGF0YSQ9dGhpcy5zdG9yZS5waXBlKFJrKHFodCkpLnBpcGUoaHQoKHQ9PnZvaWQgMCE9PXQpKSksdGhpcy5lbWJlZGRpbmdzTWV0cmljJD10aGlzLnN0b3JlLnBpcGUoUmsoY2J0KSl9cmVtb3ZlKHQpe3RoaXMuc3RvcmUuZGlzcGF0Y2goT2J0KHttZXRyaWM6dH0pKX1zZWxlY3QodCl7dGhpcy5zdG9yZS5kaXNwYXRjaChUYnQoe21ldHJpYzp0fSkpfWZpbHRlckNoYW5nZSh0KXtjb25zdCBlPWlzTmFOKHQubWluKT8tMTp0Lm1pbixuPWlzTmFOKHQubWF4KT8tMjp0Lm1heCxvPWlzTmFOKHQubWluKTt0aGlzLnN0b3JlLmRpc3BhdGNoKFBidCh7bWV0cmljOnRoaXMubWV0cmljLG1heDpuLG1pbjplLGluY2x1ZGVOYU46b30pKX1yb3VuZFRvVGhyZWVEZWNpbWFsUG9pbnRzKHQpe3JldHVybiBNYXRoLnJvdW5kKDFlMyoodCtOdW1iZXIuRVBTSUxPTikpLzFlM319TXl0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxNeXQpKE11KEVrKSl9LE15dC7JtWNtcD1Vbyh7dHlwZTpNeXQsc2VsZWN0b3JzOltbIm5wbWktbWV0cmljLWFyaXRobWV0aWMtZWxlbWVudCJdXSxpbnB1dHM6e21ldHJpYzoibWV0cmljIn0sZGVjbHM6NCx2YXJzOjEwLGNvbnN0czpbWzMsIm1ldHJpYyIsImZpbHRlclZhbHVlcyIsImhhc0VtYmVkZGluZ3NEYXRhIiwiZW1iZWRkaW5nc01ldHJpYyIsIm9uUmVtb3ZlIiwib25TZWxlY3QiLCJvbkZpbHRlckNoYW5nZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoT3UoMCwibWV0cmljLWFyaXRobWV0aWMtZWxlbWVudC1jb21wb25lbnQiLDApLE51KCJvblJlbW92ZSIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ucmVtb3ZlKGUpfSkpKCJvblNlbGVjdCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4uc2VsZWN0KGUpfSkpKCJvbkZpbHRlckNoYW5nZSIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4uZmlsdGVyQ2hhbmdlKGUpfSkpLE9iKDEsImFzeW5jIiksT2IoMiwiYXN5bmMiKSxPYigzLCJhc3luYyIpLFB1KCkpLDImZSYmdnUoIm1ldHJpYyIsbi5tZXRyaWMpKCJmaWx0ZXJWYWx1ZXMiLFBiKDEsNCxuLmZpbHRlclZhbHVlcyQpKSgiaGFzRW1iZWRkaW5nc0RhdGEiLFBiKDIsNixuLmhhc0VtYmVkZGluZ3NEYXRhJCkpKCJlbWJlZGRpbmdzTWV0cmljIixQYigzLDgsbi5lbWJlZGRpbmdzTWV0cmljJCkpfSxkaXJlY3RpdmVzOltDeXRdLHBpcGVzOltNdl0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihNeXQsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoibnBtaS1tZXRyaWMtYXJpdGhtZXRpYy1lbGVtZW50Iix0ZW1wbGF0ZTonXG4gICAgPG1ldHJpYy1hcml0aG1ldGljLWVsZW1lbnQtY29tcG9uZW50XG4gICAgICBbbWV0cmljXT0ibWV0cmljIlxuICAgICAgW2ZpbHRlclZhbHVlc109ImZpbHRlclZhbHVlcyQgfCBhc3luYyJcbiAgICAgIFtoYXNFbWJlZGRpbmdzRGF0YV09Imhhc0VtYmVkZGluZ3NEYXRhJCB8IGFzeW5jIlxuICAgICAgW2VtYmVkZGluZ3NNZXRyaWNdPSJlbWJlZGRpbmdzTWV0cmljJCB8IGFzeW5jIlxuICAgICAgKG9uUmVtb3ZlKT0icmVtb3ZlKCRldmVudCkiXG4gICAgICAob25TZWxlY3QpPSJzZWxlY3QoJGV2ZW50KSJcbiAgICAgIChvbkZpbHRlckNoYW5nZSk9ImZpbHRlckNoYW5nZSgkZXZlbnQpIlxuICAgID48L21ldHJpYy1hcml0aG1ldGljLWVsZW1lbnQtY29tcG9uZW50PlxuICAnLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2h9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpFa31dfSkse21ldHJpYzpbe3R5cGU6eV99XX0pO2NsYXNzIHZ5dHtjb25zdHJ1Y3Rvcigpe3RoaXMuT3BlcmF0b3I9Rmh0fX1mdW5jdGlvbiB4eXQodCxlKXsxJnQmJnd1KDAsIm5wbWktbWV0cmljLWFyaXRobWV0aWMtZWxlbWVudCIsNCksMiZ0JiZ2dSgibWV0cmljIixMdSgpLiRpbXBsaWNpdC5tZXRyaWMpfWZ1bmN0aW9uIE95dCh0LGUpezEmdCYmd3UoMCwibnBtaS1tZXRyaWMtYXJpdGhtZXRpYy1vcGVyYXRvciIsNSksMiZ0JiZ2dSgib3BlcmF0b3IiLEx1KCkuJGltcGxpY2l0Lm9wZXJhdG9yKX1mdW5jdGlvbiBQeXQodCxlKXtpZigxJnQmJihPdSgwLCJkaXYiKSxXbSgxLHh5dCwxLDEsIm5wbWktbWV0cmljLWFyaXRobWV0aWMtZWxlbWVudCIsMiksV20oMixPeXQsMSwxLCJucG1pLW1ldHJpYy1hcml0aG1ldGljLW9wZXJhdG9yIiwzKSxQdSgpKSwyJnQpe2NvbnN0IHQ9ZS4kaW1wbGljaXQsbj1MdSgpO0pjKDEpLHZ1KCJuZ0lmIix0LmtpbmQ9PT1uLkFyaXRobWV0aWNLaW5kLk1FVFJJQyksSmMoMSksdnUoIm5nSWYiLHQua2luZD09PW4uQXJpdGhtZXRpY0tpbmQuT1BFUkFUT1IpfX12eXQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHZ5dCl9LHZ5dC7JtWNtcD1Vbyh7dHlwZTp2eXQsc2VsZWN0b3JzOltbIm5wbWktbWV0cmljLWFyaXRobWV0aWMtb3BlcmF0b3IiXV0saW5wdXRzOntvcGVyYXRvcjoib3BlcmF0b3IifSxkZWNsczoyLHZhcnM6MSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoT3UoMCwibWF0LWNoaXAiKSxNZigxKSxQdSgpKSwyJmUmJihKYygxKSx4ZigiICIsbi5vcGVyYXRvcj09PW4uT3BlcmF0b3IuQU5EPyImIjoiIiwiICIpKX0sZGlyZWN0aXZlczpbaXl0XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHZ5dCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJucG1pLW1ldHJpYy1hcml0aG1ldGljLW9wZXJhdG9yIix0ZW1wbGF0ZToiXG4gICAgPG1hdC1jaGlwPlxuICAgICAge3sgb3BlcmF0b3IgPT09IE9wZXJhdG9yLkFORCA/ICcmJyA6ICcnIH19XG4gICAgPC9tYXQtY2hpcD5cbiAgIixjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSxudWxsLHtvcGVyYXRvcjpbe3R5cGU6eV99XX0pO2NsYXNzIHd5dHtjb25zdHJ1Y3Rvcigpe3RoaXMuQXJpdGhtZXRpY0tpbmQ9TGh0fX13eXQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHd5dCl9LHd5dC7JtWNtcD1Vbyh7dHlwZTp3eXQsc2VsZWN0b3JzOltbIm1ldHJpYy1hcml0aG1ldGljLWNvbXBvbmVudCJdXSxpbnB1dHM6e21ldHJpY0FyaXRobWV0aWM6Im1ldHJpY0FyaXRobWV0aWMifSxkZWNsczoyLHZhcnM6Mixjb25zdHM6W1szLCJzZWxlY3RhYmxlIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJtZXRyaWMiLDQsIm5nSWYiXSxbMywib3BlcmF0b3IiLDQsIm5nSWYiXSxbMywibWV0cmljIl0sWzMsIm9wZXJhdG9yIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihPdSgwLCJtYXQtY2hpcC1saXN0IiwwKSxXbSgxLFB5dCwzLDIsImRpdiIsMSksUHUoKSksMiZlJiYodnUoInNlbGVjdGFibGUiLCExKSxKYygxKSx2dSgibmdGb3JPZiIsbi5tZXRyaWNBcml0aG1ldGljKSl9LGRpcmVjdGl2ZXM6W2R5dCxvdixhdixNeXQsdnl0XSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtd3JhcDp3cmFwfSJdLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYih3eXQsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoibWV0cmljLWFyaXRobWV0aWMtY29tcG9uZW50Iix0ZW1wbGF0ZVVybDoiLi9tZXRyaWNfYXJpdGhtZXRpY19jb21wb25lbnQubmcuaHRtbCIsc3R5bGVVcmxzOlsiLi9tZXRyaWNfYXJpdGhtZXRpY19jb21wb25lbnQuY3NzIl0sY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sbnVsbCx7bWV0cmljQXJpdGhtZXRpYzpbe3R5cGU6eV99XX0pO2NsYXNzIGt5dHtjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXQsdGhpcy5tZXRyaWNBcml0aG1ldGljJD10aGlzLnN0b3JlLnBpcGUoUmsoJGh0KSl9fWt5dC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8a3l0KShNdShFaykpfSxreXQuybVjbXA9VW8oe3R5cGU6a3l0LHNlbGVjdG9yczpbWyJucG1pLW1ldHJpYy1hcml0aG1ldGljIl1dLGRlY2xzOjIsdmFyczozLGNvbnN0czpbWzMsIm1ldHJpY0FyaXRobWV0aWMiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKHd1KDAsIm1ldHJpYy1hcml0aG1ldGljLWNvbXBvbmVudCIsMCksT2IoMSwiYXN5bmMiKSksMiZlJiZ2dSgibWV0cmljQXJpdGhtZXRpYyIsUGIoMSwxLG4ubWV0cmljQXJpdGhtZXRpYyQpKX0sZGlyZWN0aXZlczpbd3l0XSxwaXBlczpbTXZdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoa3l0LFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6Im5wbWktbWV0cmljLWFyaXRobWV0aWMiLHRlbXBsYXRlOidcbiAgICA8bWV0cmljLWFyaXRobWV0aWMtY29tcG9uZW50XG4gICAgICBbbWV0cmljQXJpdGhtZXRpY109Im1ldHJpY0FyaXRobWV0aWMkIHwgYXN5bmMiXG4gICAgPjwvbWV0cmljLWFyaXRobWV0aWMtY29tcG9uZW50PlxuICAnLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2h9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpFa31dfSksbnVsbCk7Y2xhc3MgU3l0e31mdW5jdGlvbiBEeXQodCxlLG4pe2lmKG4pcmV0dXJuIHQ7Y29uc3Qgbz1PYmplY3QuYXNzaWduKHt9LHQpO3JldHVybiBlLmZvckVhY2goKHQ9PmRlbGV0ZSBvW3RdKSksb31TeXQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFN5dCl9LFN5dC7JtWNtcD1Vbyh7dHlwZTpTeXQsc2VsZWN0b3JzOltbIm5wbWktZGF0YS1zZWxlY3Rpb24iXV0sZGVjbHM6NCx2YXJzOjAsY29uc3RzOltbMSwiZGF0YS1zZWxlY3Rpb24iXSxbMSwibWV0cmljcy1zZWxlY3RvciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoT3UoMCwiZGl2IiwwKSx3dSgxLCJucG1pLW1ldHJpYy1zZWFyY2giLDEpLHd1KDIsIm5wbWktcmVzdWx0cy1kb3dubG9hZCIpLFB1KCksd3UoMywibnBtaS1tZXRyaWMtYXJpdGhtZXRpYyIpKX0sZGlyZWN0aXZlczpbcWJ0LEpidCxreXRdLHN0eWxlczpbJy5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHh9Lm1hdC1oMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaGVhZGxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTVweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZ1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjA1ZW07bWFyZ2luOjAgMCA1NnB4fS5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAwNWVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXJhaXNlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdHJva2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmxhdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZhYltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbWluaS1mYWJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4fS5tYXQtY2FyZC1zdWJ0aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGVja2JveC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvb3Rlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgdHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIzZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LjU0MTY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2NjY2NjY3ZW0pfUBtZWRpYSBwcmludHsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjJlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouMjVlbSAwIC43NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxZW0gMCAxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMiksIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi0wLjA2MjVlbX0ubWF0LW1lbnUtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci12ZXJ0aWNhbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGFiLWxpbmtbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MH0ubWF0LXRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5Om5vbmV9LmNkay12aXN1YWxseS1oaWRkZW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjZ9LmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV0sIC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3hbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2tbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHt9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7fS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOi13ZWJraXQtYXV0b2ZpbGwpe2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZVtfbmdjb250ZW50LSVDT01QJV17cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fS5tYXQtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfVtfbmdob3N0LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZWJlYmViO3BhZGRpbmc6MTBweCAyMHB4fS5kYXRhLXNlbGVjdGlvbltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0ubWV0cmljcy1zZWxlY3Rvcltfbmdjb250ZW50LSVDT01QJV17ZmxleDoxIDF9J10sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFN5dCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJucG1pLWRhdGEtc2VsZWN0aW9uIix0ZW1wbGF0ZVVybDoiLi9kYXRhX3NlbGVjdGlvbl9jb21wb25lbnQubmcuaHRtbCIsc3R5bGVVcmxzOlsiLi9kYXRhX3NlbGVjdGlvbl9jb21wb25lbnQuY3NzIl0sY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sbnVsbCxudWxsKTtjb25zdCBFeXQ9WyJjaGFydCJdO2NsYXNzIEF5dHtjb25zdHJ1Y3Rvcigpe3RoaXMub25SZW1vdmU9bmV3IEFiLHRoaXMub25VcGRhdGVGaWx0ZXI9bmV3IEFiLHRoaXMuaGVpZ2h0PTMwMCx0aGlzLmNoYXJ0V2lkdGg9MCx0aGlzLmNoYXJ0SGVpZ2h0PTAsdGhpcy5kcmF3SGVpZ2h0PTAsdGhpcy5kcmF3V2lkdGg9MCx0aGlzLm1hcmdpbj17dG9wOjIwLHJpZ2h0OjEwLGJvdHRvbToyMCxsZWZ0OjEwfSx0aGlzLmRyYXdNYXJnaW49e3RvcDowLHJpZ2h0OjAsYm90dG9tOjIwLGxlZnQ6MjB9LHRoaXMuYnJ1c2g9KGZ1bmN0aW9uIHQoKXtyZXR1cm4oZnVuY3Rpb24gdChlKXt2YXIgbixvPW10dCxpPXB0dCxhPXV0dCxyPSEwLHM9WTUoInN0YXJ0IiwiYnJ1c2giLCJlbmQiKSxsPTY7ZnVuY3Rpb24gYyh0KXt2YXIgbj10LnByb3BlcnR5KCJfX2JydXNoIixoKS5zZWxlY3RBbGwoIi5vdmVybGF5IikuZGF0YShbZHR0KCJvdmVybGF5IildKTtuLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJvdmVybGF5IikuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKS5hdHRyKCJjdXJzb3IiLGF0dC5vdmVybGF5KS5tZXJnZShuKS5lYWNoKChmdW5jdGlvbigpe3ZhciB0PWZ0dCh0aGlzKS5leHRlbnQ7cjYodGhpcykuYXR0cigieCIsdFswXVswXSkuYXR0cigieSIsdFswXVsxXSkuYXR0cigid2lkdGgiLHRbMV1bMF0tdFswXVswXSkuYXR0cigiaGVpZ2h0Iix0WzFdWzFdLXRbMF1bMV0pfSkpLHQuc2VsZWN0QWxsKCIuc2VsZWN0aW9uIikuZGF0YShbZHR0KCJzZWxlY3Rpb24iKV0pLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJzZWxlY3Rpb24iKS5hdHRyKCJjdXJzb3IiLGF0dC5zZWxlY3Rpb24pLmF0dHIoImZpbGwiLCIjNzc3IikuYXR0cigiZmlsbC1vcGFjaXR5IiwuMykuYXR0cigic3Ryb2tlIiwiI2ZmZiIpLmF0dHIoInNoYXBlLXJlbmRlcmluZyIsImNyaXNwRWRnZXMiKTt2YXIgbz10LnNlbGVjdEFsbCgiLmhhbmRsZSIpLmRhdGEoZS5oYW5kbGVzLChmdW5jdGlvbih0KXtyZXR1cm4gdC50eXBlfSkpO28uZXhpdCgpLnJlbW92ZSgpLG8uZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsKGZ1bmN0aW9uKHQpe3JldHVybiJoYW5kbGUgaGFuZGxlLS0iK3QudHlwZX0pKS5hdHRyKCJjdXJzb3IiLChmdW5jdGlvbih0KXtyZXR1cm4gYXR0W3QudHlwZV19KSksdC5lYWNoKGQpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKS5vbigibW91c2Vkb3duLmJydXNoIix1KS5maWx0ZXIoYSkub24oInRvdWNoc3RhcnQuYnJ1c2giLHUpLm9uKCJ0b3VjaG1vdmUuYnJ1c2giLGYpLm9uKCJ0b3VjaGVuZC5icnVzaCB0b3VjaGNhbmNlbC5icnVzaCIsZykuc3R5bGUoInRvdWNoLWFjdGlvbiIsIm5vbmUiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpfWZ1bmN0aW9uIGQoKXt2YXIgdD1yNih0aGlzKSxlPWZ0dCh0aGlzKS5zZWxlY3Rpb247ZT8odC5zZWxlY3RBbGwoIi5zZWxlY3Rpb24iKS5zdHlsZSgiZGlzcGxheSIsbnVsbCkuYXR0cigieCIsZVswXVswXSkuYXR0cigieSIsZVswXVsxXSkuYXR0cigid2lkdGgiLGVbMV1bMF0tZVswXVswXSkuYXR0cigiaGVpZ2h0IixlWzFdWzFdLWVbMF1bMV0pLHQuc2VsZWN0QWxsKCIuaGFuZGxlIikuc3R5bGUoImRpc3BsYXkiLG51bGwpLmF0dHIoIngiLChmdW5jdGlvbih0KXtyZXR1cm4iZSI9PT10LnR5cGVbdC50eXBlLmxlbmd0aC0xXT9lWzFdWzBdLWwvMjplWzBdWzBdLWwvMn0pKS5hdHRyKCJ5IiwoZnVuY3Rpb24odCl7cmV0dXJuInMiPT09dC50eXBlWzBdP2VbMV1bMV0tbC8yOmVbMF1bMV0tbC8yfSkpLmF0dHIoIndpZHRoIiwoZnVuY3Rpb24odCl7cmV0dXJuIm4iPT09dC50eXBlfHwicyI9PT10LnR5cGU/ZVsxXVswXS1lWzBdWzBdK2w6bH0pKS5hdHRyKCJoZWlnaHQiLChmdW5jdGlvbih0KXtyZXR1cm4iZSI9PT10LnR5cGV8fCJ3Ij09PXQudHlwZT9lWzFdWzFdLWVbMF1bMV0rbDpsfSkpKTp0LnNlbGVjdEFsbCgiLnNlbGVjdGlvbiwuaGFuZGxlIikuc3R5bGUoImRpc3BsYXkiLCJub25lIikuYXR0cigieCIsbnVsbCkuYXR0cigieSIsbnVsbCkuYXR0cigid2lkdGgiLG51bGwpLmF0dHIoImhlaWdodCIsbnVsbCl9ZnVuY3Rpb24gcCh0LGUsbil7dmFyIG89dC5fX2JydXNoLmVtaXR0ZXI7cmV0dXJuIW98fG4mJm8uY2xlYW4/bmV3IG0odCxlLG4pOm99ZnVuY3Rpb24gbSh0LGUsbil7dGhpcy50aGF0PXQsdGhpcy5hcmdzPWUsdGhpcy5zdGF0ZT10Ll9fYnJ1c2gsdGhpcy5hY3RpdmU9MCx0aGlzLmNsZWFuPW59ZnVuY3Rpb24gdSgpe2lmKCghbnx8WjQudG91Y2hlcykmJmkuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgdCxvLGEscyxsLGMsbSx1LGYsZyxoLGI9dGhpcyx5PVo0LnRhcmdldC5fX2RhdGFfXy50eXBlLF89InNlbGVjdGlvbiI9PT0ociYmWjQubWV0YUtleT95PSJvdmVybGF5Ijp5KT9LOTpyJiZaNC5hbHRLZXk/JDk6UTksQz1lPT09aXR0P251bGw6bHR0W3ldLE09ZT09PW90dD9udWxsOmN0dFt5XSx2PWZ0dChiKSx4PXYuZXh0ZW50LE89di5zZWxlY3Rpb24sUD14WzBdWzBdLHc9eFswXVsxXSxrPXhbMV1bMF0sUz14WzFdWzFdLEQ9MCxFPTAsQT1DJiZNJiZyJiZaNC5zaGlmdEtleSxSPVo0LnRvdWNoZXM/bnR0KFo0LmNoYW5nZWRUb3VjaGVzWzBdLmlkZW50aWZpZXIpOmM2LFQ9UihiKSxOPVQsST1wKGIsYXJndW1lbnRzLCEwKS5iZWZvcmVzdGFydCgpOyJvdmVybGF5Ij09PXk/KE8mJihmPSEwKSx2LnNlbGVjdGlvbj1PPVtbdD1lPT09aXR0P1A6VFswXSxhPWU9PT1vdHQ/dzpUWzFdXSxbbD1lPT09aXR0P2s6dCxtPWU9PT1vdHQ/UzphXV0pOih0PU9bMF1bMF0sYT1PWzBdWzFdLGw9T1sxXVswXSxtPU9bMV1bMV0pLG89dCxzPWEsYz1sLHU9bTt2YXIgej1yNihiKS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUiKSxIPXouc2VsZWN0QWxsKCIub3ZlcmxheSIpLmF0dHIoImN1cnNvciIsYXR0W3ldKTtpZihaNC50b3VjaGVzKUkubW92ZWQ9TCxJLmVuZGVkPVY7ZWxzZXt2YXIgRj1yNihaNC52aWV3KS5vbigibW91c2Vtb3ZlLmJydXNoIixMLCEwKS5vbigibW91c2V1cC5icnVzaCIsViwhMCk7ciYmRi5vbigia2V5ZG93bi5icnVzaCIsaiwhMCkub24oImtleXVwLmJydXNoIixVLCEwKSxwNihaNC52aWV3KX1ZOSgpLEc4KGIpLGQuY2FsbChiKSxJLnN0YXJ0KCl9ZnVuY3Rpb24gTCgpe3ZhciB0PVIoYik7IUF8fGd8fGh8fChNYXRoLmFicyh0WzBdLU5bMF0pPk1hdGguYWJzKHRbMV0tTlsxXSk/aD0hMDpnPSEwKSxOPXQsZj0hMCxxOSgpLEIoKX1mdW5jdGlvbiBCKCl7dmFyIGU7c3dpdGNoKEQ9TlswXS1UWzBdLEU9TlsxXS1UWzFdLF8pe2Nhc2UgSjk6Y2FzZSBLOTpDJiYoRD1NYXRoLm1heChQLXQsTWF0aC5taW4oay1sLEQpKSxvPXQrRCxjPWwrRCksTSYmKEU9TWF0aC5tYXgody1hLE1hdGgubWluKFMtbSxFKSkscz1hK0UsdT1tK0UpO2JyZWFrO2Nhc2UgUTk6QzwwPyhEPU1hdGgubWF4KFAtdCxNYXRoLm1pbihrLXQsRCkpLG89dCtELGM9bCk6Qz4wJiYoRD1NYXRoLm1heChQLWwsTWF0aC5taW4oay1sLEQpKSxvPXQsYz1sK0QpLE08MD8oRT1NYXRoLm1heCh3LWEsTWF0aC5taW4oUy1hLEUpKSxzPWErRSx1PW0pOk0+MCYmKEU9TWF0aC5tYXgody1tLE1hdGgubWluKFMtbSxFKSkscz1hLHU9bStFKTticmVhaztjYXNlICQ5OkMmJihvPU1hdGgubWF4KFAsTWF0aC5taW4oayx0LUQqQykpLGM9TWF0aC5tYXgoUCxNYXRoLm1pbihrLGwrRCpDKSkpLE0mJihzPU1hdGgubWF4KHcsTWF0aC5taW4oUyxhLUUqTSkpLHU9TWF0aC5tYXgodyxNYXRoLm1pbihTLG0rRSpNKSkpfWM8byYmKEMqPS0xLGU9dCx0PWwsbD1lLGU9byxvPWMsYz1lLHkgaW4gcnR0JiZILmF0dHIoImN1cnNvciIsYXR0W3k9cnR0W3ldXSkpLHU8cyYmKE0qPS0xLGU9YSxhPW0sbT1lLGU9cyxzPXUsdT1lLHkgaW4gc3R0JiZILmF0dHIoImN1cnNvciIsYXR0W3k9c3R0W3ldXSkpLHYuc2VsZWN0aW9uJiYoTz12LnNlbGVjdGlvbiksZyYmKG89T1swXVswXSxjPU9bMV1bMF0pLGgmJihzPU9bMF1bMV0sdT1PWzFdWzFdKSxPWzBdWzBdPT09byYmT1swXVsxXT09PXMmJk9bMV1bMF09PT1jJiZPWzFdWzFdPT09dXx8KHYuc2VsZWN0aW9uPVtbbyxzXSxbYyx1XV0sZC5jYWxsKGIpLEkuYnJ1c2goKSl9ZnVuY3Rpb24gVigpe2lmKFk5KCksWjQudG91Y2hlcyl7aWYoWjQudG91Y2hlcy5sZW5ndGgpcmV0dXJuO24mJmNsZWFyVGltZW91dChuKSxuPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7bj1udWxsfSksNTAwKX1lbHNlIG02KFo0LnZpZXcsZiksRi5vbigia2V5ZG93bi5icnVzaCBrZXl1cC5icnVzaCBtb3VzZW1vdmUuYnJ1c2ggbW91c2V1cC5icnVzaCIsbnVsbCk7ei5hdHRyKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLEguYXR0cigiY3Vyc29yIixhdHQub3ZlcmxheSksdi5zZWxlY3Rpb24mJihPPXYuc2VsZWN0aW9uKSxndHQoTykmJih2LnNlbGVjdGlvbj1udWxsLGQuY2FsbChiKSksSS5lbmQoKX1mdW5jdGlvbiBqKCl7c3dpdGNoKFo0LmtleUNvZGUpe2Nhc2UgMTY6QT1DJiZNO2JyZWFrO2Nhc2UgMTg6Xz09PVE5JiYoQyYmKGw9Yy1EKkMsdD1vK0QqQyksTSYmKG09dS1FKk0sYT1zK0UqTSksXz0kOSxCKCkpO2JyZWFrO2Nhc2UgMzI6XyE9PVE5JiZfIT09JDl8fChDPDA/bD1jLUQ6Qz4wJiYodD1vLUQpLE08MD9tPXUtRTpNPjAmJihhPXMtRSksXz1KOSxILmF0dHIoImN1cnNvciIsYXR0LnNlbGVjdGlvbiksQigpKTticmVhaztkZWZhdWx0OnJldHVybn1xOSgpfWZ1bmN0aW9uIFUoKXtzd2l0Y2goWjQua2V5Q29kZSl7Y2FzZSAxNjpBJiYoZz1oPUE9ITEsQigpKTticmVhaztjYXNlIDE4Ol89PT0kOSYmKEM8MD9sPWM6Qz4wJiYodD1vKSxNPDA/bT11Ok0+MCYmKGE9cyksXz1ROSxCKCkpO2JyZWFrO2Nhc2UgMzI6Xz09PUo5JiYoWjQuYWx0S2V5PyhDJiYobD1jLUQqQyx0PW8rRCpDKSxNJiYobT11LUUqTSxhPXMrRSpNKSxfPSQ5KTooQzwwP2w9YzpDPjAmJih0PW8pLE08MD9tPXU6TT4wJiYoYT1zKSxfPVE5KSxILmF0dHIoImN1cnNvciIsYXR0W3ldKSxCKCkpO2JyZWFrO2RlZmF1bHQ6cmV0dXJufXE5KCl9fWZ1bmN0aW9uIGYoKXtwKHRoaXMsYXJndW1lbnRzKS5tb3ZlZCgpfWZ1bmN0aW9uIGcoKXtwKHRoaXMsYXJndW1lbnRzKS5lbmRlZCgpfWZ1bmN0aW9uIGgoKXt2YXIgdD10aGlzLl9fYnJ1c2h8fHtzZWxlY3Rpb246bnVsbH07cmV0dXJuIHQuZXh0ZW50PWV0dChvLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksdC5kaW09ZSx0fXJldHVybiBjLm1vdmU9ZnVuY3Rpb24odCxuKXt0LnNlbGVjdGlvbj90Lm9uKCJzdGFydC5icnVzaCIsKGZ1bmN0aW9uKCl7cCh0aGlzLGFyZ3VtZW50cykuYmVmb3Jlc3RhcnQoKS5zdGFydCgpfSkpLm9uKCJpbnRlcnJ1cHQuYnJ1c2ggZW5kLmJydXNoIiwoZnVuY3Rpb24oKXtwKHRoaXMsYXJndW1lbnRzKS5lbmQoKX0pKS50d2VlbigiYnJ1c2giLChmdW5jdGlvbigpe3ZhciB0PXRoaXMsbz10Ll9fYnJ1c2gsaT1wKHQsYXJndW1lbnRzKSxhPW8uc2VsZWN0aW9uLHI9ZS5pbnB1dCgiZnVuY3Rpb24iPT10eXBlb2Ygbj9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpuLG8uZXh0ZW50KSxzPW84KGEscik7ZnVuY3Rpb24gbChlKXtvLnNlbGVjdGlvbj0xPT09ZSYmbnVsbD09PXI/bnVsbDpzKGUpLGQuY2FsbCh0KSxpLmJydXNoKCl9cmV0dXJuIG51bGwhPT1hJiZudWxsIT09cj9sOmwoMSl9KSk6dC5lYWNoKChmdW5jdGlvbigpe3ZhciB0PXRoaXMsbz1hcmd1bWVudHMsaT10Ll9fYnJ1c2gsYT1lLmlucHV0KCJmdW5jdGlvbiI9PXR5cGVvZiBuP24uYXBwbHkodCxvKTpuLGkuZXh0ZW50KSxyPXAodCxvKS5iZWZvcmVzdGFydCgpO0c4KHQpLGkuc2VsZWN0aW9uPW51bGw9PT1hP251bGw6YSxkLmNhbGwodCksci5zdGFydCgpLmJydXNoKCkuZW5kKCl9KSl9LGMuY2xlYXI9ZnVuY3Rpb24odCl7Yy5tb3ZlKHQsbnVsbCl9LG0ucHJvdG90eXBlPXtiZWZvcmVzdGFydDpmdW5jdGlvbigpe3JldHVybiAxPT0rK3RoaXMuYWN0aXZlJiYodGhpcy5zdGF0ZS5lbWl0dGVyPXRoaXMsdGhpcy5zdGFydGluZz0hMCksdGhpc30sc3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGFydGluZz8odGhpcy5zdGFydGluZz0hMSx0aGlzLmVtaXQoInN0YXJ0IikpOnRoaXMuZW1pdCgiYnJ1c2giKSx0aGlzfSxicnVzaDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVtaXQoImJydXNoIiksdGhpc30sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PS0tdGhpcy5hY3RpdmUmJihkZWxldGUgdGhpcy5zdGF0ZS5lbWl0dGVyLHRoaXMuZW1pdCgiZW5kIikpLHRoaXN9LGVtaXQ6ZnVuY3Rpb24odCl7IShmdW5jdGlvbiBuKHQsZSxvLGkpe3ZhciBhPVo0O3Quc291cmNlRXZlbnQ9WjQsWjQ9dDt0cnl7ZS5hcHBseShvLGkpfWZpbmFsbHl7WjQ9YX19KShuZXcgRzkoYyx0LGUub3V0cHV0KHRoaXMuc3RhdGUuc2VsZWN0aW9uKSkscy5hcHBseSxzLFt0LHRoaXMudGhhdCx0aGlzLmFyZ3NdKX19LGMuZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6VzkoZXR0KHQpKSxjKTpvfSxjLmZpbHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90Olc5KCEhdCksYyk6aX0sYy50b3VjaGFibGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpXOSghIXQpLGMpOmF9LGMuaGFuZGxlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0rdCxjKTpsfSxjLmtleU1vZGlmaWVycz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0hIXQsYyk6cn0sYy5vbj1mdW5jdGlvbigpe3ZhciB0PXMub24uYXBwbHkocyxhcmd1bWVudHMpO3JldHVybiB0PT09cz9jOnR9LGN9KShpdHQpfSkoKSx0aGlzLm1heEJpblNpemU9MCx0aGlzLmFyZWE9KGZ1bmN0aW9uIGUoKXt2YXIgdD1Eb3QsZT1udWxsLG49d290KDApLG89RW90LGk9d290KCEwKSxhPW51bGwscj1Tb3Qscz1udWxsO2Z1bmN0aW9uIGwobCl7dmFyIGMsZCxwLG0sdSxmPWwubGVuZ3RoLGc9ITEsaD1uZXcgQXJyYXkoZiksYj1uZXcgQXJyYXkoZik7Zm9yKG51bGw9PWEmJihzPXIodT1NdHQoKSkpLGM9MDtjPD1mOysrYyl7aWYoIShjPGYmJmkobT1sW2NdLGMsbCkpPT09ZylpZihnPSFnKWQ9YyxzLmFyZWFTdGFydCgpLHMubGluZVN0YXJ0KCk7ZWxzZXtmb3Iocy5saW5lRW5kKCkscy5saW5lU3RhcnQoKSxwPWMtMTtwPj1kOy0tcClzLnBvaW50KGhbcF0sYltwXSk7cy5saW5lRW5kKCkscy5hcmVhRW5kKCl9ZyYmKGhbY109K3QobSxjLGwpLGJbY109K24obSxjLGwpLHMucG9pbnQoZT8rZShtLGMsbCk6aFtjXSxvPytvKG0sYyxsKTpiW2NdKSl9aWYodSlyZXR1cm4gcz1udWxsLHUrIiJ8fG51bGx9ZnVuY3Rpb24gYygpe3JldHVybiBBb3QoKS5kZWZpbmVkKGkpLmN1cnZlKHIpLmNvbnRleHQoYSl9cmV0dXJuIGwueD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOndvdCgrbiksZT1udWxsLGwpOnR9LGwueDA9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTp3b3QoK2UpLGwpOnR9LGwueDE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bnVsbD09dD9udWxsOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6d290KCt0KSxsKTplfSxsLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp3b3QoK3QpLG89bnVsbCxsKTpufSxsLnkwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6d290KCt0KSxsKTpufSxsLnkxPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPW51bGw9PXQ/bnVsbDoiZnVuY3Rpb24iPT10eXBlb2YgdD90OndvdCgrdCksbCk6b30sbC5saW5lWDA9bC5saW5lWTA9ZnVuY3Rpb24oKXtyZXR1cm4gYygpLngodCkueShuKX0sbC5saW5lWTE9ZnVuY3Rpb24oKXtyZXR1cm4gYygpLngodCkueShvKX0sbC5saW5lWDE9ZnVuY3Rpb24oKXtyZXR1cm4gYygpLngoZSkueShuKX0sbC5kZWZpbmVkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6d290KCEhdCksbCk6aX0sbC5jdXJ2ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LG51bGwhPWEmJihzPXIoYSkpLGwpOnJ9LGwuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09dD9hPXM9bnVsbDpzPXIoYT10KSxsKTphfSxsfSkoKS54MChmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54U2NhbGVOdW0oLXQubGVuZ3RoKX0uYmluZCh0aGlzKSkueDEoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueFNjYWxlTnVtKHQubGVuZ3RoKX0uYmluZCh0aGlzKSkueShmdW5jdGlvbih0KXtyZXR1cm4gdC54MD09PS0xLzA/dGhpcy5jaGFydEhlaWdodC10aGlzLmRyYXdNYXJnaW4udG9wOnRoaXMueVNjYWxlKCh0LngxK3QueDApLzIpfS5iaW5kKHRoaXMpKS5jdXJ2ZShJb3QpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMudXBkYXRlRGltZW5zaW9ucygpLHRoaXMuc3ZnPXI2KHRoaXMuY2hhcnRDb250YWluZXIubmF0aXZlRWxlbWVudCkuc2VsZWN0KCJzdmciKSx0aGlzLm1haW5Db250YWluZXI9dGhpcy5zdmcuYXBwZW5kKCJnIikuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7dGhpcy5tYXJnaW4ubGVmdH0sICR7dGhpcy5tYXJnaW4udG9wfSlgKSx0aGlzLmRyYXdDb250YWluZXI9dGhpcy5tYWluQ29udGFpbmVyLmFwcGVuZCgiZyIpLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke3RoaXMuZHJhd01hcmdpbi5sZWZ0fSwgJHt0aGlzLmRyYXdNYXJnaW4udG9wfSlgKSx0aGlzLmRvdHNHcm91cD10aGlzLmRyYXdDb250YWluZXIuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJkb3RzR3JvdXAiKSx0aGlzLnlBeGlzR3JvdXA9dGhpcy5tYWluQ29udGFpbmVyLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiYXhpcyBheGlzLS15IiksdGhpcy54QXhpc0dyb3VwPXRoaXMubWFpbkNvbnRhaW5lci5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImF4aXMgYXhpcy0teCIpLHRoaXMubWlzY0dyb3VwPXRoaXMuZHJhd0NvbnRhaW5lci5hcHBlbmQoImciKSx0aGlzLnhTY2FsZT1LdHQoKS5wYWRkaW5nKC4wNSksdGhpcy54QXhpcz1XNSh0aGlzLnhTY2FsZSksdGhpcy55U2NhbGU9cGV0KCkucmFuZ2UoW3RoaXMuZHJhd0hlaWdodCwwXSksdGhpcy55QXhpcz0oZnVuY3Rpb24gdChlKXtyZXR1cm4gajUoNCxlKX0pKHRoaXMueVNjYWxlKSx0aGlzLnhTY2FsZU51bT1wZXQoKSx0aGlzLmluaXRpYWxpemVCcnVzaCgpLHRoaXMuZHJhd01pc2MoKSx0aGlzLnJlZHJhdygpfW5nT25DaGFuZ2VzKHQpe3RoaXMuc3ZnJiZ0aGlzLnJlZHJhdygpfXJlZHJhdygpe3RoaXMudXBkYXRlRGltZW5zaW9ucygpLHRoaXMuc2V0TWF4QmluU2l6ZSgpLHRoaXMudXBkYXRlQXhlcygpLHRoaXMuZHJhdygpfXVwZGF0ZURpbWVuc2lvbnMoKXt0aGlzLmNoYXJ0V2lkdGg9dGhpcy53aWR0aC10aGlzLm1hcmdpbi5sZWZ0LXRoaXMubWFyZ2luLnJpZ2h0LHRoaXMuZHJhd1dpZHRoPXRoaXMuY2hhcnRXaWR0aC10aGlzLmRyYXdNYXJnaW4ubGVmdC10aGlzLmRyYXdNYXJnaW4ucmlnaHQsdGhpcy5jaGFydEhlaWdodD10aGlzLmhlaWdodC10aGlzLm1hcmdpbi50b3AtdGhpcy5tYXJnaW4uYm90dG9tLHRoaXMuZHJhd0hlaWdodD10aGlzLmNoYXJ0SGVpZ2h0LXRoaXMuZHJhd01hcmdpbi50b3AtdGhpcy5kcmF3TWFyZ2luLmJvdHRvbX1zZXRNYXhCaW5TaXplKCl7T2JqZWN0LnZhbHVlcyh0aGlzLmNoYXJ0RGF0YS52aW9saW5EYXRhKS5mb3JFYWNoKCh0PT57Y29uc3QgZT10Lm1hcCgodD0+dC5sZW5ndGgpKSxuPU1hdGgubWF4KC4uLmUpO3RoaXMubWF4QmluU2l6ZT1NYXRoLm1heChuLHRoaXMubWF4QmluU2l6ZSl9KSl9dXBkYXRlQXhlcygpe3RoaXMueFNjYWxlLnJhbmdlKFswLHRoaXMuZHJhd1dpZHRoXSkuZG9tYWluKE9iamVjdC5rZXlzKHRoaXMuY2hhcnREYXRhLnZpb2xpbkRhdGEpKSx0aGlzLnlTY2FsZS5kb21haW4oW3RoaXMuY2hhcnREYXRhLmV4dHJlbWVzLm1pbix0aGlzLmNoYXJ0RGF0YS5leHRyZW1lcy5tYXhdKSx0aGlzLnhTY2FsZU51bS5yYW5nZShbMCx0aGlzLnhTY2FsZS5iYW5kd2lkdGgoKV0pLmRvbWFpbihbLXRoaXMubWF4QmluU2l6ZSx0aGlzLm1heEJpblNpemVdKX1pbml0aWFsaXplQnJ1c2goKXt0aGlzLmJydXNoLm9uKCJlbmQiLHRoaXMuYnJ1c2hNb3ZlZC5iaW5kKHRoaXMpKX1kcmF3KCl7dGhpcy5kcmF3QXhlcygpLHRoaXMuZHJhd1Bsb3QoKSx0aGlzLnJlZnJlc2hNaXNjKCksdGhpcy5yZWZyZXNoQnJ1c2goKX1kcmF3QXhlcygpe3RoaXMueUF4aXNHcm91cC5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHt0aGlzLmRyYXdNYXJnaW4ubGVmdH0sXG4gICAgICAke3RoaXMuZHJhd01hcmdpbi50b3B9KWApLmNhbGwodGhpcy55QXhpcyksdGhpcy54QXhpc0dyb3VwLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke3RoaXMuZHJhd01hcmdpbi5sZWZ0fSxcbiAgICAgICR7dGhpcy5kcmF3TWFyZ2luLnRvcCt0aGlzLmNoYXJ0SGVpZ2h0fSlgKS5jYWxsKHRoaXMueEF4aXMpfWRyYXdQbG90KCl7Y29uc3QgdD10aGlzLmRvdHNHcm91cC5zZWxlY3RBbGwoIi52aW9saW4tcGxvdCIpLmRhdGEoT2JqZWN0LmVudHJpZXModGhpcy5jaGFydERhdGEudmlvbGluRGF0YSkpO3QuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsInZpb2xpbi1wbG90Iikuc3R5bGUoInN0cm9rZSIsZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY29sb3JTY2FsZSh0WzBdKX0uYmluZCh0aGlzKSkuc3R5bGUoImZpbGwiLGZ1bmN0aW9uKHQpe3JldHVybmAke3RoaXMuY29sb3JTY2FsZSh0WzBdKX0zM2B9LmJpbmQodGhpcykpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7cmV0dXJuYHRyYW5zbGF0ZSgke3RoaXMueFNjYWxlKHRbMF0pfSwgMClgfS5iaW5kKHRoaXMpKS5kYXR1bSgoZnVuY3Rpb24odCl7cmV0dXJuIHRbMV19KSkuYXR0cigiZCIsdGhpcy5hcmVhKSx0LmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7cmV0dXJuYHRyYW5zbGF0ZSgke3RoaXMueFNjYWxlKHRbMF0pfSwgMClgfS5iaW5kKHRoaXMpKS5kYXR1bSgoZnVuY3Rpb24odCl7cmV0dXJuIHRbMV19KSkuYXR0cigiZCIsdGhpcy5hcmVhKSx0LmV4aXQoKS5yZW1vdmUoKX1kcmF3TWlzYygpe3RoaXMuemVyb0xpbmU9dGhpcy5taXNjR3JvdXAuYXBwZW5kKCJsaW5lIikuc3R5bGUoInN0cm9rZSIsImJsYWNrIikuYXR0cigieDEiLDApLmF0dHIoInkxIix0aGlzLnlTY2FsZSgwKSkuYXR0cigieDIiLHRoaXMuZHJhd1dpZHRoKS5hdHRyKCJ5MiIsdGhpcy55U2NhbGUoMCkpLHRoaXMubmFuVGV4dD10aGlzLm1pc2NHcm91cC5hcHBlbmQoInRleHQiKS5zdHlsZSgiZmlsbCIsImJsYWNrIikudGV4dCgiTmFOIikuYXR0cigiZm9udC1zaXplIiwiMTBweCIpLmF0dHIoInRleHQtYW5jaG9yIiwiZW5kIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigieCIsLTUpLmF0dHIoInkiLHRoaXMuY2hhcnRIZWlnaHQtdGhpcy5kcmF3TWFyZ2luLnRvcCksdGhpcy5uYW5MaW5lPXRoaXMubWlzY0dyb3VwLmFwcGVuZCgibGluZSIpLnN0eWxlKCJzdHJva2UiLCJncmV5Iikuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIzLCAzIikuYXR0cigieDEiLDApLmF0dHIoInkxIix0aGlzLmNoYXJ0SGVpZ2h0LXRoaXMuZHJhd01hcmdpbi50b3ApLmF0dHIoIngyIix0aGlzLmRyYXdXaWR0aCkuYXR0cigieTIiLHRoaXMuY2hhcnRIZWlnaHQtdGhpcy5kcmF3TWFyZ2luLnRvcCl9cmVmcmVzaE1pc2MoKXt0aGlzLnplcm9MaW5lLmF0dHIoInkxIix0aGlzLnlTY2FsZSgwKSkuYXR0cigieDIiLHRoaXMuZHJhd1dpZHRoKS5hdHRyKCJ5MiIsdGhpcy55U2NhbGUoMCkpLHRoaXMubmFuVGV4dC5hdHRyKCJ5Iix0aGlzLmNoYXJ0SGVpZ2h0LXRoaXMuZHJhd01hcmdpbi50b3ApLHRoaXMubmFuTGluZS5hdHRyKCJ5MSIsdGhpcy5kcmF3SGVpZ2h0K3RoaXMuZHJhd01hcmdpbi50b3ApLmF0dHIoIngyIix0aGlzLmRyYXdXaWR0aCkuYXR0cigieTIiLHRoaXMuZHJhd0hlaWdodCt0aGlzLmRyYXdNYXJnaW4udG9wKX1yZWZyZXNoQnJ1c2goKXt0aGlzLmJydXNoLmV4dGVudChbWzAsMF0sW3RoaXMuZHJhd1dpZHRoLHRoaXMuZHJhd0hlaWdodCt0aGlzLm1hcmdpbi50b3BdXSk7Y29uc3QgdD1bMCx0aGlzLmRyYXdIZWlnaHQrdGhpcy5tYXJnaW4udG9wXTtpZih0aGlzLmZpbHRlci5tYXg8dGhpcy5maWx0ZXIubWluKXRbMF09dGhpcy5maWx0ZXIuaW5jbHVkZU5hTj90aGlzLnlTY2FsZSh0aGlzLmNoYXJ0RGF0YS5leHRyZW1lcy5taW4pOnRbMV07ZWxzZXtpZighdGhpcy5maWx0ZXIuaW5jbHVkZU5hTil7Y29uc3QgZT1NYXRoLm1heCh0aGlzLmNoYXJ0RGF0YS5leHRyZW1lcy5taW4sdGhpcy5maWx0ZXIubWluKTt0WzFdPXRoaXMueVNjYWxlKGUpfWNvbnN0IGU9TWF0aC5taW4odGhpcy5jaGFydERhdGEuZXh0cmVtZXMubWF4LHRoaXMuZmlsdGVyLm1heCk7dFswXT10aGlzLnlTY2FsZShlKX10aGlzLmRyYXdDb250YWluZXIuY2FsbCh0aGlzLmJydXNoKS5jYWxsKHRoaXMuYnJ1c2gubW92ZSx0KX1icnVzaE1vdmVkKCl7aWYoIVo0KXJldHVybjtpZighWjQuc291cmNlRXZlbnQpcmV0dXJuO2NvbnN0IHQ9WjQuc2VsZWN0aW9uO2lmKHQpe2xldCBlPSExLG49LTIsbz10aGlzLmNoYXJ0RGF0YS5leHRyZW1lcy5taW47dFswXTw9dGhpcy5kcmF3SGVpZ2h0K3RoaXMubWFyZ2luLnRvcCYmdFsxXT49dGhpcy5kcmF3SGVpZ2h0JiYoZT0hMCksdFswXTx0aGlzLmRyYXdIZWlnaHQmJihuPXRoaXMueVNjYWxlLmludmVydCh0WzBdKSksdFsxXTx0aGlzLmRyYXdIZWlnaHQmJihvPXRoaXMueVNjYWxlLmludmVydCh0WzFdKSksdGhpcy5vblVwZGF0ZUZpbHRlci5lbWl0KHttYXg6bixtaW46byxpbmNsdWRlTmFOOmV9KX1lbHNlIHRoaXMub25VcGRhdGVGaWx0ZXIuZW1pdCh7bWF4OjEsbWluOi0xLGluY2x1ZGVOYU46ITB9KX19QXl0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxBeXQpfSxBeXQuybVjbXA9VW8oe3R5cGU6QXl0LHNlbGVjdG9yczpbWyJ2aW9saW4tZmlsdGVyLWNvbXBvbmVudCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24gdChlLG4pe2lmKDEmZSYmV2IoRXl0LDMsY2gpLDImZSl7bGV0IHQ7VWIodD1ZYigpKSYmKG4uY2hhcnRDb250YWluZXI9dC5maXJzdCl9fSxpbnB1dHM6e21ldHJpY05hbWU6Im1ldHJpY05hbWUiLGZpbHRlcjoiZmlsdGVyIixjaGFydERhdGE6ImNoYXJ0RGF0YSIsd2lkdGg6IndpZHRoIixjb2xvclNjYWxlOiJjb2xvclNjYWxlIn0sb3V0cHV0czp7b25SZW1vdmU6Im9uUmVtb3ZlIixvblVwZGF0ZUZpbHRlcjoib25VcGRhdGVGaWx0ZXIifSxmZWF0dXJlczpbU2ldLGRlY2xzOjksdmFyczoxLGNvbnN0czpmdW5jdGlvbigpe2xldCB0O3JldHVybiB0PSJ1bmRlZmluZWQiIT10eXBlb2YgbmdJMThuQ2xvc3VyZU1vZGUmJm5nSTE4bkNsb3N1cmVNb2RlP2dvb2cuZ2V0TXNnKCJSZW1vdmUgRmlsdGVyIik6JGxvY2FsaXplYDpMYWJlbCBmb3IgYSBidXR0b24gdGhhdCByZW1vdmVzIGEgbWV0cmljIGZpbHRlci7ikJ9hNmJmYWQ1OGJiMzYzZDVjODkxZDBhNTQ3NGIxZDc3ZWY5MGEzNGRh4pCfODQ1NDk2MTc5Nzc2MjkwNzYyNDpSZW1vdmUgRmlsdGVyYCxbWzEsImNoYXJ0LWNvbnRhaW5lciJdLFsidGl0bGUiLCJTaG93cyB0aGUgblBNSSB2YWx1ZSBkaXN0cmlidXRpb24gcGVyIHJ1bi4gUmFuZ2VzIG9mIHNlbGVjdGVkIHZhbHVlcyBjYW4gYmUgbWFuaXB1bGF0ZWQgYnkgbW9kaWZ5aW5nIHRoZSBncmV5IGJveC4iLDEsImNoYXJ0LWhlYWQiXSxbMSwiY2hhcnQtaGVhZGluZyJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsdCwzLCJjbGljayJdLFsic3ZnSWNvbiIsImNsZWFyXzI0cHgiXSxbMSwiY2hhcnQiXSxbImNoYXJ0IiwiIl0sWzEsImRyYXctYXJlYSJdXX0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKE91KDAsImRpdiIsMCksT3UoMSwiZGl2IiwxKSxPdSgyLCJkaXYiLDIpLE1mKDMpLFB1KCksT3UoNCwiYnV0dG9uIiwzKSxOdSgiY2xpY2siLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub25SZW1vdmUuZW1pdCgpfSkpLHd1KDUsIm1hdC1pY29uIiw0KSxQdSgpLFB1KCksT3UoNiwiZGl2Iiw1LDYpLEhhKCksd3UoOCwic3ZnIiw3KSxQdSgpLFB1KCkpLDImZSYmKEpjKDMpLHZmKG4ubWV0cmljTmFtZSkpfSxkaXJlY3RpdmVzOltOSCxjR10sc3R5bGVzOlsnLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEycHg7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtYmFkZ2Utc21hbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6OXB4fS5tYXQtYmFkZ2UtbGFyZ2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweH0ubWF0LWgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1oZWFkbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMjRweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNnB4LzI4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNXB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC44MykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtaDZbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuNjcpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWJvZHktc3Ryb25nW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjAgMCAxMnB4fS5tYXQtc21hbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDEycHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjMwMCAxMTJweC8xMTJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDVlbTttYXJnaW46MCAwIDU2cHh9Lm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDU2cHgvNTZweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDJlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDQ1cHgvNDhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDA1ZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAzNHB4LzQwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDY0cHh9Lm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcmFpc2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0cm9rZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mbGF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmFiW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1taW5pLWZhYltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWJ1dHRvbi10b2dnbGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhcmQtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjIwcHh9Lm1hdC1jYXJkLXN1YnRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2hlY2tib3hbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNoZWNrYm94LWxheW91dFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoZWNrYm94LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoyNHB4fS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtdHJhaWxpbmctaWNvbi5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtcmVtb3ZlLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MThweH0ubWF0LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1oZWFkZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2VsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9vdGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2FsZW5kYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhbGVuZGFyLWJvZHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxM3B4fS5tYXQtY2FsZW5kYXItYm9keS1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FsZW5kYXItcGVyaW9kLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo0MDB9Lm1hdC1kaWFsb2ctdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjEyNTtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE1MCU7bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS41ZW07d2lkdGg6MS41ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNWVtIDA7Ym9yZGVyLXRvcDouODQzNzVlbSBzb2xpZCB0cmFuc3BhcmVudH0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6LTAuODQzNzVlbTtwYWRkaW5nLXRvcDouODQzNzVlbX0ubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo3NSU7bWFyZ2luLXRvcDouNjY2NjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjc5MTY2NjY2NjdlbSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNDM3NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMnB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjNlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM1MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjI4MTI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDouNTQxNjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjY2NjY2NjY2NjdlbSl9QG1lZGlhIHByaW50ey5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMmVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMWVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTJlbSkgc2NhbGUoMC43NSl9fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi4yNWVtIDAgLjc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMDkzNzVlbTttYXJnaW4tdG9wOi0wLjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjFlbSAwIDFlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS44NDM3NWVtO21hcmdpbi10b3A6LTAuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9aW5wdXQubWF0LWlucHV0LWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LTAuMDYyNWVtfS5tYXQtbWVudS1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtcGFnaW5hdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweH0ubWF0LXJhZGlvLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW19Lm1hdC1zbGlkZS10b2dnbGUtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdGVwcGVyLWhvcml6b250YWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXN0ZXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXN0ZXAtc3ViLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDpub3JtYWx9Lm1hdC1zdGVwLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LXN0ZXAtbGFiZWwtc2VsZWN0ZWRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRhYi1ncm91cFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdGFiLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10YWItbGlua1tfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowfS5tYXQtdG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB4O3BhZGRpbmctdG9wOjZweDtwYWRkaW5nLWJvdHRvbTo2cHh9Lm1hdC10b29sdGlwLWhhbmRzZXRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9Lm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE2cHh9Lm1hdC1vcHRncm91cC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1zaW1wbGUtc25hY2tiYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweH0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb25bX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjE7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo1MDB9Lm1hdC10cmVlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW5lc3RlZC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjQwMDtmb250LXNpemU6MTRweH0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmVtcHR5KXt0cmFuc2Zvcm06dHJhbnNsYXRlWigwKX0ubWF0LXJpcHBsZS5tYXQtcmlwcGxlLXVuYm91bmRlZFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItcmFkaXVzOjUwJTtwb2ludGVyLWV2ZW50czpub25lO3RyYW5zaXRpb246b3BhY2l0eSx0cmFuc2Zvcm0gMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpO3RyYW5zZm9ybTpzY2FsZSgwKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6bm9uZX0uY2RrLXZpc3VhbGx5LWhpZGRlbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjA7Y2xpcDpyZWN0KDAgMCAwIDApO2hlaWdodDoxcHg7bWFyZ2luOi0xcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwO291dGxpbmU6MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb2ludGVyLWV2ZW50czpub25lO3RvcDowO2xlZnQ6MDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTplbXB0eXtkaXNwbGF5Om5vbmV9LmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1wYW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czphdXRvO2JveC1zaXppbmc6Ym9yZGVyLWJveDt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O21heC13aWR0aDoxMDAlO21heC1oZWlnaHQ6MTAwJX0uY2RrLW92ZXJsYXktYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO3otaW5kZXg6MTAwMDtwb2ludGVyLWV2ZW50czphdXRvOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDt0cmFuc2l0aW9uOm9wYWNpdHkgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSk7b3BhY2l0eTowfS5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjF9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAuY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTouNn0uY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4zMil9LmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MH0uY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWluLXdpZHRoOjFweDttaW4taGVpZ2h0OjFweH0uY2RrLWdsb2JhbC1zY3JvbGxibG9ja1tfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7d2lkdGg6MTAwJTtvdmVyZmxvdy15OnNjcm9sbH1Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0e31Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZHt9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbHthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQgMHMgMW1zfS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOm5vdCg6LXdlYmtpdC1hdXRvZmlsbCl7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCAwcyAxbXN9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplW19uZ2NvbnRlbnQtJUNPTVAlXXtyZXNpemU6bm9uZX10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDphdXRvICFpbXBvcnRhbnQ7b3ZlcmZsb3c6aGlkZGVuICFpbXBvcnRhbnR9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZy1maXJlZm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDowICFpbXBvcnRhbnR9Lm1hdC1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtbWRjLWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9LmNoYXJ0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtvdmVyZmxvdzpoaWRkZW59LmNoYXJ0W19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MzAwcHg7d2lkdGg6MTAwJX0uY2hhcnQtaGVhZFtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn0uY2hhcnQtaGVhZGluZ1tfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEzcHg7cGFkZGluZy1sZWZ0OjEwcHg7cGFkZGluZy10b3A6MTBweH0uZHJhdy1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5zdHJva2VkLWxpbmVbX25nY29udGVudC0lQ09NUCVde3N0cm9rZTpyZ2JhKDAsMCwwLC4xMik7c3Ryb2tlLWRhc2hhcnJheTozIDN9J10sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEF5dCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJ2aW9saW4tZmlsdGVyLWNvbXBvbmVudCIsdGVtcGxhdGVVcmw6Ii4vdmlvbGluX2ZpbHRlcl9jb21wb25lbnQubmcuaHRtbCIsc3R5bGVVcmxzOlsiLi92aW9saW5fZmlsdGVyX2NvbXBvbmVudC5jc3MiXSxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSxudWxsLHttZXRyaWNOYW1lOlt7dHlwZTp5X31dLGZpbHRlcjpbe3R5cGU6eV99XSxjaGFydERhdGE6W3t0eXBlOnlffV0sd2lkdGg6W3t0eXBlOnlffV0sY29sb3JTY2FsZTpbe3R5cGU6eV99XSxvblJlbW92ZTpbe3R5cGU6X199XSxvblVwZGF0ZUZpbHRlcjpbe3R5cGU6X199XSxjaGFydENvbnRhaW5lcjpbe3R5cGU6RnIsYXJnczpbImNoYXJ0Iix7c3RhdGljOiEwLHJlYWQ6Y2h9XX1dfSk7Y2xhc3MgUnl0e2NvbnN0cnVjdG9yKHQpe3RoaXMuc3RvcmU9dCx0aGlzLmFjdGl2ZVJ1bnMkPXRoaXMuc3RvcmUucGlwZShSayh2TikpLnBpcGUoaHQoKHQ9PnQ/QXJyYXkuZnJvbSh0LmVudHJpZXMoKSkuZmlsdGVyKCh0PT50WzFdKSkubWFwKCh0PT50WzBdKSk6W10pKSksdGhpcy52aXNpYmxlQW5ub3RhdGlvbnMkPUR0KFt0aGlzLnN0b3JlLnNlbGVjdChHaHQpLHRoaXMuc3RvcmUuc2VsZWN0KEtodCksdGhpcy5zdG9yZS5zZWxlY3QocmJ0KV0pLnBpcGUoaHQoKChbdCxlLG5dKT0+RHl0KHQsZSxuKSkpKSx0aGlzLmNoYXJ0V2lkdGgkPXRoaXMuc3RvcmUucGlwZShSayhsYnQpKS5waXBlKGh0KCh0PT5NYXRoLm1heCgxNTAsdCkpKSksdGhpcy5ydW5Db2xvclNjYWxlJD10aGlzLnN0b3JlLnNlbGVjdChDTikucGlwZShodCgodD0+ZT0+e2lmKCF0Lmhhc093blByb3BlcnR5KGUpKXRocm93IG5ldyBFcnJvcihgW0NvbG9yIHNjYWxlXSB1bmtub3duIHJ1bklkOiAke2V9LmApO3JldHVybiB0W2VdfSkpKX1uZ09uSW5pdCgpe3RoaXMuY2hhcnREYXRhJD1EdChbdGhpcy52aXNpYmxlQW5ub3RhdGlvbnMkLHRoaXMuYWN0aXZlUnVucyRdKS5waXBlKGh0KCgoW3QsZV0pPT4oZnVuY3Rpb24gbih0LGUsbyl7Y29uc3QgaT17fSxhPXt9LHI9bmV3IFNldChlKSxzPVZidChvKSxsPXttYXg6LTEsbWluOjF9O09iamVjdC52YWx1ZXModCkuZm9yRWFjaCgodD0+e3QuZm9yRWFjaCgodD0+e2NvbnN0IGU9dC5ydW47aWYoci5oYXMoZSkmJnQubWV0cmljPT09cylpZihudWxsPT09dC5uUE1JVmFsdWUpYVtlXT9hW2VdLnB1c2gobnVsbCk6YVtlXT1bbnVsbF07ZWxzZXtjb25zdCBuPXQublBNSVZhbHVlO2wubWF4PWwubWF4PG4/bjpsLm1heCxsLm1pbj1sLm1pbj5uP246bC5taW4saVt0LnJ1bl0/aVtlXS5wdXNoKG4pOmlbZV09W25dfX0pKX0pKTtjb25zdCBjPXt9LGQ9VDUoKS5kb21haW4oW2wubWluLGwubWF4XSkudmFsdWUoKHQ9PnQpKSxwPVQ1KCkuZG9tYWluKFstMS8wLDEvMF0pLnRocmVzaG9sZHMoMCkudmFsdWUoKHQ9PnQpKTtmb3IoY29uc3QgdCBvZiByKWlmKGNbdF09ZChpW3RdKSxhW3RdKXtjb25zdCBlPXAoYVt0XSk7Y1t0XS51bnNoaWZ0KGVbMF0pfXJldHVybnt2aW9saW5EYXRhOmMsZXh0cmVtZXM6bH19KSh0LGUsdGhpcy5tZXRyaWNOYW1lKSkpKX1yZW1vdmVNZXRyaWMoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKE9idCh7bWV0cmljOnRoaXMubWV0cmljTmFtZX0pKX11cGRhdGVGaWx0ZXIodCl7dGhpcy5zdG9yZS5kaXNwYXRjaChQYnQoT2JqZWN0LmFzc2lnbih7bWV0cmljOnRoaXMubWV0cmljTmFtZX0sdCkpKX19ZnVuY3Rpb24gVHl0KHQsZSl7aWYoMSZ0JiZ3dSgwLCJucG1pLXZpb2xpbi1maWx0ZXIiLDgpLDImdCl7Y29uc3QgdD1lLiRpbXBsaWNpdDt2dSgibWV0cmljTmFtZSIsdFswXSkoImZpbHRlciIsdFsxXSl9fWZ1bmN0aW9uIE55dCh0LGUpezEmdCYmKE91KDAsImRpdiIsOSksT3UoMSwic3BhbiIsMTApLE1mKDIsIiBZb3UgY2FuIGFkZCBtb3JlIGZpbHRlcnMgYXQgdGhlIHRvcC4gIiksUHUoKSxQdSgpKX1SeXQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFJ5dCkoTXUoRWspKX0sUnl0Lsm1Y21wPVVvKHt0eXBlOlJ5dCxzZWxlY3RvcnM6W1sibnBtaS12aW9saW4tZmlsdGVyIl1dLGlucHV0czp7bWV0cmljTmFtZToibWV0cmljTmFtZSIsZmlsdGVyOiJmaWx0ZXIifSxkZWNsczo0LHZhcnM6MTEsY29uc3RzOltbMywibWV0cmljTmFtZSIsImZpbHRlciIsImNoYXJ0RGF0YSIsIndpZHRoIiwiY29sb3JTY2FsZSIsIm9uUmVtb3ZlIiwib25VcGRhdGVGaWx0ZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKE91KDAsInZpb2xpbi1maWx0ZXItY29tcG9uZW50IiwwKSxOdSgib25SZW1vdmUiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ucmVtb3ZlTWV0cmljKCl9KSkoIm9uVXBkYXRlRmlsdGVyIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi51cGRhdGVGaWx0ZXIoZSl9KSksT2IoMSwiYXN5bmMiKSxPYigyLCJhc3luYyIpLE9iKDMsImFzeW5jIiksUHUoKSksMiZlJiZ2dSgibWV0cmljTmFtZSIsbi5tZXRyaWNOYW1lKSgiZmlsdGVyIixuLmZpbHRlcikoImNoYXJ0RGF0YSIsUGIoMSw1LG4uY2hhcnREYXRhJCkpKCJ3aWR0aCIsUGIoMiw3LG4uY2hhcnRXaWR0aCQpKSgiY29sb3JTY2FsZSIsUGIoMyw5LG4ucnVuQ29sb3JTY2FsZSQpKX0sZGlyZWN0aXZlczpbQXl0XSxwaXBlczpbTXZdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoUnl0LFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6Im5wbWktdmlvbGluLWZpbHRlciIsdGVtcGxhdGU6J1xuICAgIDx2aW9saW4tZmlsdGVyLWNvbXBvbmVudFxuICAgICAgW21ldHJpY05hbWVdPSJtZXRyaWNOYW1lIlxuICAgICAgW2ZpbHRlcl09ImZpbHRlciJcbiAgICAgIFtjaGFydERhdGFdPSJjaGFydERhdGEkIHwgYXN5bmMiXG4gICAgICBbd2lkdGhdPSJjaGFydFdpZHRoJCB8IGFzeW5jIlxuICAgICAgW2NvbG9yU2NhbGVdPSJydW5Db2xvclNjYWxlJCB8IGFzeW5jIlxuICAgICAgKG9uUmVtb3ZlKT0icmVtb3ZlTWV0cmljKCkiXG4gICAgICAob25VcGRhdGVGaWx0ZXIpPSJ1cGRhdGVGaWx0ZXIoJGV2ZW50KSJcbiAgICA+PC92aW9saW4tZmlsdGVyLWNvbXBvbmVudD5cbiAgJyxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6RWt9XX0pLHttZXRyaWNOYW1lOlt7dHlwZTp5X31dLGZpbHRlcjpbe3R5cGU6eV99XX0pO2NsYXNzIEl5dHtjb25zdHJ1Y3Rvcigpe3RoaXMudG9nZ2xlU2lkZWJhckV4cGFuZGVkPW5ldyBBYn19SXl0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxJeXQpfSxJeXQuybVjbXA9VW8oe3R5cGU6SXl0LHNlbGVjdG9yczpbWyJ2aW9saW4tZmlsdGVycy1jb21wb25lbnQiXV0saW5wdXRzOntzaWRlYmFyRXhwYW5kZWQ6InNpZGViYXJFeHBhbmRlZCIsbWV0cmljRmlsdGVyczoibWV0cmljRmlsdGVycyJ9LG91dHB1dHM6e3RvZ2dsZVNpZGViYXJFeHBhbmRlZDoidG9nZ2xlU2lkZWJhckV4cGFuZGVkIn0sZGVjbHM6OSx2YXJzOjIsY29uc3RzOmZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIHQ9InVuZGVmaW5lZCIhPXR5cGVvZiBuZ0kxOG5DbG9zdXJlTW9kZSYmbmdJMThuQ2xvc3VyZU1vZGU/Z29vZy5nZXRNc2coIkV4cGFuZC9IaWRlIFNpZGViYXIiKTokbG9jYWxpemVgOkxhYmVsIGZvciBhIGJ1dHRvbiB0aGF0IGV4cGFuZHMvaGlkZXMgdGhlIHNpZGViYXIu4pCfNDhjMjk5MDNjZTg4MWFiNjEwODhmOGQ0OWQ4MjcyMDM3MTZhYWVkNOKQnzQ2NTg2MDI5OTE5NzAyNjAyMTU6RXhwYW5kL0hpZGUgU2lkZWJhcmAsW1sxLCJmaWx0ZXJzLXRvb2xiYXIiXSxbMSwiZmlsdGVycy10aXRsZSJdLFsxLCJzaWRlLXRvZ2dsZSJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsdCwzLCJjbGljayJdLFsic3ZnSWNvbiIsImNoZXZyb25fbGVmdF8yNHB4Il0sWzEsImZpbHRlcnMiXSxbMywibWV0cmljTmFtZSIsImZpbHRlciIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbGFzcyIsImZpbHRlcnMtaGludCIsNCwibmdJZiJdLFszLCJtZXRyaWNOYW1lIiwiZmlsdGVyIl0sWzEsImZpbHRlcnMtaGludCJdLFsxLCJmaWx0ZXJzLWhpbnQtdGV4dCJdXX0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKE91KDAsImRpdiIsMCksT3UoMSwiaDMiLDEpLE1mKDIsIkFjdGl2ZSBGaWx0ZXJzIiksUHUoKSxPdSgzLCJkaXYiLDIpLE91KDQsImJ1dHRvbiIsMyksTnUoImNsaWNrIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLnRvZ2dsZVNpZGViYXJFeHBhbmRlZC5lbWl0KCl9KSksd3UoNSwibWF0LWljb24iLDQpLFB1KCksUHUoKSxQdSgpLE91KDYsImRpdiIsNSksV20oNyxUeXQsMSwyLCJucG1pLXZpb2xpbi1maWx0ZXIiLDYpLFB1KCksV20oOCxOeXQsMywwLCJkaXYiLDcpKSwyJmUmJihKYyg3KSx2dSgibmdGb3JPZiIsbi5tZXRyaWNGaWx0ZXJzKSxKYygxKSx2dSgibmdJZiIsMD09PW4ubWV0cmljRmlsdGVycy5sZW5ndGgpKX0sZGlyZWN0aXZlczpbTkgsY0csb3YsYXYsUnl0XSxzdHlsZXM6WycubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1iYWRnZS1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo5cHh9Lm1hdC1iYWRnZS1sYXJnZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4fS5tYXQtaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWhlYWRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAyNHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE1cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjgzKS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1oNltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC42NykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtYm9keS1zdHJvbmdbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MCAwIDEycHh9Lm1hdC1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FwdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTJweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6MzAwIDExMnB4LzExMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wNWVtO21hcmdpbjowIDAgNTZweH0ubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNTZweC81NnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMmVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNDVweC80OHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMDVlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDM0cHgvNDBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1yYWlzZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3Ryb2tlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZsYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mYWJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW1pbmktZmFiW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtYnV0dG9uLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FyZC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjBweH0ubWF0LWNhcmQtc3VidGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hlY2tib3gtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC10cmFpbGluZy1pY29uLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC1yZW1vdmUubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxOHB4fS5tYXQtdGFibGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWhlYWRlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb290ZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jYWxlbmRhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FsZW5kYXItYm9keVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYWxlbmRhci1wZXJpb2QtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWRpYWxvZy10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTI1O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTUwJTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjVlbTt3aWR0aDoxLjVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW07bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41ZW0gMDtib3JkZXItdG9wOi44NDM3NWVtIHNvbGlkIHRyYW5zcGFyZW50fS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3RvcDotMC44NDM3NWVtO3BhZGRpbmctdG9wOi44NDM3NWVtfS5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjc1JTttYXJnaW4tdG9wOi42NjY2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNzkxNjY2NjY2N2VtKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAycHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyM2VtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzUzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi41NDE2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNjY2NjY2NjY2N2VtKX1AbWVkaWEgcHJpbnR7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIyZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIxZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMmVtKSBzY2FsZSgwLjc1KX19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjI1ZW0gMCAuNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4wOTM3NWVtO21hcmdpbi10b3A6LTAuNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MWVtIDAgMWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjg0Mzc1ZW07bWFyZ2luLXRvcDotMC4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH1pbnB1dC5tYXQtaW5wdXQtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDotMC4wNjI1ZW19Lm1hdC1tZW51LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1wYWdpbmF0b3JbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXBhZ2luYXRvci1wYWdlLXNpemVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3RbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXN0ZXBwZXItdmVydGljYWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc3RlcC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0Om5vcm1hbH0ubWF0LXN0ZXAtbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRhYi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjB9Lm1hdC10b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTZweH0ubWF0LW9wdGdyb3VwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LXNpbXBsZS1zbmFja2Jhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbltfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRyZWVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbmVzdGVkLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4fS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVdOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtcmlwcGxlLm1hdC1yaXBwbGUtdW5ib3VuZGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6NTAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7dHJhbnNmb3JtOnNjYWxlKDApfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpub25lfS5jZGstdmlzdWFsbHktaGlkZGVuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7bGVmdDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmVtcHR5e2Rpc3BsYXk6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LXBhbmVbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOmF1dG87Ym94LXNpemluZzpib3JkZXItYm94O3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7bWF4LXdpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlfS5jZGstb3ZlcmxheS1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKTtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5Oi42fS5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjMyKX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTowfS5jZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO292ZXJmbG93LXk6c2Nyb2xsfUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnR7fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5ke30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxse2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCAwcyAxbXN9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06bm90KDotd2Via2l0LWF1dG9maWxsKXthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIDBzIDFtc310ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemVbX25nY29udGVudC0lQ09NUCVde3Jlc2l6ZTpub25lfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmdbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OmF1dG8gIWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW4gIWltcG9ydGFudH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nLWZpcmVmb3hbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OjAgIWltcG9ydGFudH0ubWF0LWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX1bX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47aGVpZ2h0OjEwMCV9LmZpbHRlcnMtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7ZGlzcGxheTpmbGV4O2hlaWdodDo0MnB4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO3BhZGRpbmc6MCAxMHB4fS5maWx0ZXJzLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZTtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9LnNpZGUtdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlci1yYWRpdXM6M3B4O2JvcmRlcjoxcHggc29saWQgI2ViZWJlYjtkaXNwbGF5OmZsZXg7aGVpZ2h0OjMwcHg7anVzdGlmeS1jb250ZW50OmNlbnRlcjt3aWR0aDozMHB4fS5maWx0ZXJzW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdy15OmF1dG99LmZpbHRlcnMtaGludFtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtoZWlnaHQ6NDJweDtwYWRkaW5nOjAgMTZweH0uZmlsdGVycy1oaW50LXRleHRbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoSXl0LFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6InZpb2xpbi1maWx0ZXJzLWNvbXBvbmVudCIsdGVtcGxhdGVVcmw6Ii4vdmlvbGluX2ZpbHRlcnNfY29tcG9uZW50Lm5nLmh0bWwiLHN0eWxlVXJsczpbIi4vdmlvbGluX2ZpbHRlcnNfY29tcG9uZW50LmNzcyJdLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2h9XX1dLG51bGwse3NpZGViYXJFeHBhbmRlZDpbe3R5cGU6eV99XSxtZXRyaWNGaWx0ZXJzOlt7dHlwZTp5X31dLHRvZ2dsZVNpZGViYXJFeHBhbmRlZDpbe3R5cGU6X199XX0pO2NsYXNzIHp5dHtjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXQsdGhpcy5zaWRlYmFyRXhwYW5kZWQkPXRoaXMuc3RvcmUuc2VsZWN0KGlidCksdGhpcy5tZXRyaWNGaWx0ZXJzJD10aGlzLnN0b3JlLnNlbGVjdCh0YnQpLnBpcGUoaHQoKHQ9Pk9iamVjdC5lbnRyaWVzKHQpKSkpfW9uVG9nZ2xlU2lkZWJhckV4cGFuZGVkKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChFYnQoKSl9fWZ1bmN0aW9uIEh5dCh0LGUsbil7cmV0dXJuIHQubGVuZ3RoIT1lLmxlbmd0aD9uOmUubWFwKCgoZSxuKT0+ZS10W25dKSkubWFwKCh0PT5NYXRoLnBvdyh0LDIpKSkucmVkdWNlKCgodCxlKT0+dCtlKSwwKX16eXQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHp5dCkoTXUoRWspKX0senl0Lsm1Y21wPVVvKHt0eXBlOnp5dCxzZWxlY3RvcnM6W1sibnBtaS12aW9saW4tZmlsdGVycyJdXSxkZWNsczozLHZhcnM6Nixjb25zdHM6W1szLCJzaWRlYmFyRXhwYW5kZWQiLCJtZXRyaWNGaWx0ZXJzIiwidG9nZ2xlU2lkZWJhckV4cGFuZGVkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihPdSgwLCJ2aW9saW4tZmlsdGVycy1jb21wb25lbnQiLDApLE51KCJ0b2dnbGVTaWRlYmFyRXhwYW5kZWQiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub25Ub2dnbGVTaWRlYmFyRXhwYW5kZWQoKX0pKSxPYigxLCJhc3luYyIpLE9iKDIsImFzeW5jIiksUHUoKSksMiZlJiZ2dSgic2lkZWJhckV4cGFuZGVkIixQYigxLDIsbi5zaWRlYmFyRXhwYW5kZWQkKSkoIm1ldHJpY0ZpbHRlcnMiLFBiKDIsNCxuLm1ldHJpY0ZpbHRlcnMkKSl9LGRpcmVjdGl2ZXM6W0l5dF0scGlwZXM6W012XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHp5dCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJucG1pLXZpb2xpbi1maWx0ZXJzIix0ZW1wbGF0ZTonXG4gICAgPHZpb2xpbi1maWx0ZXJzLWNvbXBvbmVudFxuICAgICAgW3NpZGViYXJFeHBhbmRlZF09InNpZGViYXJFeHBhbmRlZCQgfCBhc3luYyJcbiAgICAgIFttZXRyaWNGaWx0ZXJzXT0ibWV0cmljRmlsdGVycyQgfCBhc3luYyJcbiAgICAgICh0b2dnbGVTaWRlYmFyRXhwYW5kZWQpPSJvblRvZ2dsZVNpZGViYXJFeHBhbmRlZCgpIlxuICAgID48L3Zpb2xpbi1maWx0ZXJzLWNvbXBvbmVudD5cbiAgJyxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6RWt9XX0pLG51bGwpO2NvbnN0IEZ5dD1bInRodW1iQ29udGFpbmVyIl0sTHl0PVsidG9nZ2xlQmFyIl0sQnl0PVsiaW5wdXQiXSxWeXQ9ZnVuY3Rpb24oKXtyZXR1cm57ZW50ZXJEdXJhdGlvbjoxNTB9fSxqeXQ9bmV3IE5yKCJtYXQtc2xpZGUtdG9nZ2xlLWRlZmF1bHQtb3B0aW9ucyIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9Pih7ZGlzYWJsZVRvZ2dsZVZhbHVlOiExfSl9KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmxldCBVeXQ9MDtjb25zdCBXeXQ9e3Byb3ZpZGU6dlYsdXNlRXhpc3Rpbmc6SW4oKCgpPT5xeXQpKSxtdWx0aTohMH07Y2xhc3MgR3l0e2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5zb3VyY2U9dCx0aGlzLmNoZWNrZWQ9ZX19Y29uc3QgWXl0PUh6KEl6KHp6KE56KGNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuX2VsZW1lbnRSZWY9dH19KSksImFjY2VudCIpKTtjbGFzcyBxeXQgZXh0ZW5kcyBZeXR7Y29uc3RydWN0b3IodCxlLG4sbyxpLGEpe3N1cGVyKHQpLHRoaXMuX2ZvY3VzTW9uaXRvcj1lLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPW4sdGhpcy5kZWZhdWx0cz1pLHRoaXMuX2FuaW1hdGlvbk1vZGU9YSx0aGlzLl9vbkNoYW5nZT10PT57fSx0aGlzLl9vblRvdWNoZWQ9KCk9Pnt9LHRoaXMuX3VuaXF1ZUlkPSJtYXQtc2xpZGUtdG9nZ2xlLSIrICsrVXl0LHRoaXMuX3JlcXVpcmVkPSExLHRoaXMuX2NoZWNrZWQ9ITEsdGhpcy5uYW1lPW51bGwsdGhpcy5pZD10aGlzLl91bmlxdWVJZCx0aGlzLmxhYmVsUG9zaXRpb249ImFmdGVyIix0aGlzLmFyaWFMYWJlbD1udWxsLHRoaXMuYXJpYUxhYmVsbGVkYnk9bnVsbCx0aGlzLmNoYW5nZT1uZXcgQWIsdGhpcy50b2dnbGVDaGFuZ2U9bmV3IEFiLHRoaXMudGFiSW5kZXg9cGFyc2VJbnQobyl8fDB9Z2V0IHJlcXVpcmVkKCl7cmV0dXJuIHRoaXMuX3JlcXVpcmVkfXNldCByZXF1aXJlZCh0KXt0aGlzLl9yZXF1aXJlZD1ySSh0KX1nZXQgY2hlY2tlZCgpe3JldHVybiB0aGlzLl9jaGVja2VkfXNldCBjaGVja2VkKHQpe3RoaXMuX2NoZWNrZWQ9ckkodCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9Z2V0IGlucHV0SWQoKXtyZXR1cm5gJHt0aGlzLmlkfHx0aGlzLl91bmlxdWVJZH0taW5wdXRgfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuX2ZvY3VzTW9uaXRvci5tb25pdG9yKHRoaXMuX2VsZW1lbnRSZWYsITApLnN1YnNjcmliZSgodD0+eyJrZXlib2FyZCI9PT10fHwicHJvZ3JhbSI9PT10P3RoaXMuX2lucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk6dHx8UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKCk9PnRoaXMuX29uVG91Y2hlZCgpKSl9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcodGhpcy5fZWxlbWVudFJlZil9X29uQ2hhbmdlRXZlbnQodCl7dC5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLnRvZ2dsZUNoYW5nZS5lbWl0KCksdGhpcy5kZWZhdWx0cy5kaXNhYmxlVG9nZ2xlVmFsdWU/dGhpcy5faW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2hlY2tlZD10aGlzLmNoZWNrZWQ6KHRoaXMuY2hlY2tlZD10aGlzLl9pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5jaGVja2VkLHRoaXMuX2VtaXRDaGFuZ2VFdmVudCgpKX1fb25JbnB1dENsaWNrKHQpe3Quc3RvcFByb3BhZ2F0aW9uKCl9d3JpdGVWYWx1ZSh0KXt0aGlzLmNoZWNrZWQ9ISF0fXJlZ2lzdGVyT25DaGFuZ2UodCl7dGhpcy5fb25DaGFuZ2U9dH1yZWdpc3Rlck9uVG91Y2hlZCh0KXt0aGlzLl9vblRvdWNoZWQ9dH1zZXREaXNhYmxlZFN0YXRlKHQpe3RoaXMuZGlzYWJsZWQ9dCx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX1mb2N1cyh0LGUpe2U/dGhpcy5fZm9jdXNNb25pdG9yLmZvY3VzVmlhKHRoaXMuX2lucHV0RWxlbWVudCxlLHQpOnRoaXMuX2lucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKHQpfXRvZ2dsZSgpe3RoaXMuY2hlY2tlZD0hdGhpcy5jaGVja2VkLHRoaXMuX29uQ2hhbmdlKHRoaXMuY2hlY2tlZCl9X2VtaXRDaGFuZ2VFdmVudCgpe3RoaXMuX29uQ2hhbmdlKHRoaXMuY2hlY2tlZCksdGhpcy5jaGFuZ2UuZW1pdChuZXcgR3l0KHRoaXMsdGhpcy5jaGVja2VkKSl9X29uTGFiZWxUZXh0Q2hhbmdlKCl7dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpfX1xeXQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHF5dCkoTXUoY2gpLE11KHB6KSxNdShIaCksT3IoInRhYmluZGV4IiksTXUoanl0KSxNdShOdyw4KSl9LHF5dC7JtWNtcD1Vbyh7dHlwZTpxeXQsc2VsZWN0b3JzOltbIm1hdC1zbGlkZS10b2dnbGUiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJihXYihGeXQsMSksV2IoTHl0LDEpLFdiKEJ5dCwxKSksMiZlKXtsZXQgdDtVYih0PVliKCkpJiYobi5fdGh1bWJFbD10LmZpcnN0KSxVYih0PVliKCkpJiYobi5fdGh1bWJCYXJFbD10LmZpcnN0KSxVYih0PVliKCkpJiYobi5faW5wdXRFbGVtZW50PXQuZmlyc3QpfX0saG9zdEF0dHJzOlsxLCJtYXQtc2xpZGUtdG9nZ2xlIl0saG9zdFZhcnM6MTIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsyJmUmJihrZigiaWQiLG4uaWQpLE5tKCJ0YWJpbmRleCIsbi5kaXNhYmxlZD9udWxsOi0xKSgiYXJpYS1sYWJlbCIsbnVsbCkoImFyaWEtbGFiZWxsZWRieSIsbnVsbCksYWYoIm1hdC1jaGVja2VkIixuLmNoZWNrZWQpKCJtYXQtZGlzYWJsZWQiLG4uZGlzYWJsZWQpKCJtYXQtc2xpZGUtdG9nZ2xlLWxhYmVsLWJlZm9yZSIsImJlZm9yZSI9PW4ubGFiZWxQb3NpdGlvbikoIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIiwiTm9vcEFuaW1hdGlvbnMiPT09bi5fYW5pbWF0aW9uTW9kZSkpfSxpbnB1dHM6e2Rpc2FibGVkOiJkaXNhYmxlZCIsZGlzYWJsZVJpcHBsZToiZGlzYWJsZVJpcHBsZSIsY29sb3I6ImNvbG9yIix0YWJJbmRleDoidGFiSW5kZXgiLG5hbWU6Im5hbWUiLGlkOiJpZCIsbGFiZWxQb3NpdGlvbjoibGFiZWxQb3NpdGlvbiIsYXJpYUxhYmVsOlsiYXJpYS1sYWJlbCIsImFyaWFMYWJlbCJdLGFyaWFMYWJlbGxlZGJ5OlsiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYUxhYmVsbGVkYnkiXSxyZXF1aXJlZDoicmVxdWlyZWQiLGNoZWNrZWQ6ImNoZWNrZWQifSxvdXRwdXRzOntjaGFuZ2U6ImNoYW5nZSIsdG9nZ2xlQ2hhbmdlOiJ0b2dnbGVDaGFuZ2UifSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl0sZmVhdHVyZXM6W2loKFtXeXRdKSxnbV0sbmdDb250ZW50U2VsZWN0b3JzOlsiKiJdLGRlY2xzOjE2LHZhcnM6MTgsY29uc3RzOltbMSwibWF0LXNsaWRlLXRvZ2dsZS1sYWJlbCJdLFsibGFiZWwiLCIiXSxbMSwibWF0LXNsaWRlLXRvZ2dsZS1iYXIiXSxbInRvZ2dsZUJhciIsIiJdLFsidHlwZSIsImNoZWNrYm94Iiwicm9sZSIsInN3aXRjaCIsMSwibWF0LXNsaWRlLXRvZ2dsZS1pbnB1dCIsImNkay12aXN1YWxseS1oaWRkZW4iLDMsImlkIiwicmVxdWlyZWQiLCJ0YWJJbmRleCIsImNoZWNrZWQiLCJkaXNhYmxlZCIsImNoYW5nZSIsImNsaWNrIl0sWyJpbnB1dCIsIiJdLFsxLCJtYXQtc2xpZGUtdG9nZ2xlLXRodW1iLWNvbnRhaW5lciJdLFsidGh1bWJDb250YWluZXIiLCIiXSxbMSwibWF0LXNsaWRlLXRvZ2dsZS10aHVtYiJdLFsibWF0LXJpcHBsZSIsIiIsMSwibWF0LXNsaWRlLXRvZ2dsZS1yaXBwbGUiLCJtYXQtZm9jdXMtaW5kaWNhdG9yIiwzLCJtYXRSaXBwbGVUcmlnZ2VyIiwibWF0UmlwcGxlRGlzYWJsZWQiLCJtYXRSaXBwbGVDZW50ZXJlZCIsIm1hdFJpcHBsZVJhZGl1cyIsIm1hdFJpcHBsZUFuaW1hdGlvbiJdLFsxLCJtYXQtcmlwcGxlLWVsZW1lbnQiLCJtYXQtc2xpZGUtdG9nZ2xlLXBlcnNpc3RlbnQtcmlwcGxlIl0sWzEsIm1hdC1zbGlkZS10b2dnbGUtY29udGVudCIsMywiY2RrT2JzZXJ2ZUNvbnRlbnQiXSxbImxhYmVsQ29udGVudCIsIiJdLFsyLCJkaXNwbGF5Iiwibm9uZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7aWYoMSZlJiYoVnUoKSxPdSgwLCJsYWJlbCIsMCwxKSxPdSgyLCJkaXYiLDIsMyksT3UoNCwiaW5wdXQiLDQsNSksTnUoImNoYW5nZSIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4uX29uQ2hhbmdlRXZlbnQoZSl9KSkoImNsaWNrIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5fb25JbnB1dENsaWNrKGUpfSkpLFB1KCksT3UoNiwiZGl2Iiw2LDcpLHd1KDgsImRpdiIsOCksT3UoOSwiZGl2Iiw5KSx3dSgxMCwiZGl2IiwxMCksUHUoKSxQdSgpLFB1KCksT3UoMTEsInNwYW4iLDExLDEyKSxOdSgiY2RrT2JzZXJ2ZUNvbnRlbnQiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uX29uTGFiZWxUZXh0Q2hhbmdlKCl9KSksT3UoMTMsInNwYW4iLDEzKSxNZigxNCwiwqAiKSxQdSgpLGp1KDE1KSxQdSgpLFB1KCkpLDImZSl7Y29uc3QgdD1HbSgxKSxlPUdtKDEyKTtObSgiZm9yIixuLmlucHV0SWQpLEpjKDIpLGFmKCJtYXQtc2xpZGUtdG9nZ2xlLWJhci1uby1zaWRlLW1hcmdpbiIsIWUudGV4dENvbnRlbnR8fCFlLnRleHRDb250ZW50LnRyaW0oKSksSmMoMiksdnUoImlkIixuLmlucHV0SWQpKCJyZXF1aXJlZCIsbi5yZXF1aXJlZCkoInRhYkluZGV4IixuLnRhYkluZGV4KSgiY2hlY2tlZCIsbi5jaGVja2VkKSgiZGlzYWJsZWQiLG4uZGlzYWJsZWQpLE5tKCJuYW1lIixuLm5hbWUpKCJhcmlhLWNoZWNrZWQiLG4uY2hlY2tlZC50b1N0cmluZygpKSgiYXJpYS1sYWJlbCIsbi5hcmlhTGFiZWwpKCJhcmlhLWxhYmVsbGVkYnkiLG4uYXJpYUxhYmVsbGVkYnkpLEpjKDUpLHZ1KCJtYXRSaXBwbGVUcmlnZ2VyIix0KSgibWF0UmlwcGxlRGlzYWJsZWQiLG4uZGlzYWJsZVJpcHBsZXx8bi5kaXNhYmxlZCkoIm1hdFJpcHBsZUNlbnRlcmVkIiwhMCkoIm1hdFJpcHBsZVJhZGl1cyIsMjApKCJtYXRSaXBwbGVBbmltYXRpb24iLGZiKDE3LFZ5dCkpfX0sZGlyZWN0aXZlczpbcEgsU0ldLHN0eWxlczpbIi5tYXQtc2xpZGUtdG9nZ2xle2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoyNHB4O21heC13aWR0aDoxMDAlO2xpbmUtaGVpZ2h0OjI0cHg7d2hpdGUtc3BhY2U6bm93cmFwO291dGxpbmU6bm9uZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnR9Lm1hdC1zbGlkZS10b2dnbGUubWF0LWNoZWNrZWQgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWItY29udGFpbmVye3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgxNnB4LCAwLCAwKX1bZGlyPXJ0bF0gLm1hdC1zbGlkZS10b2dnbGUubWF0LWNoZWNrZWQgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWItY29udGFpbmVye3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgtMTZweCwgMCwgMCl9Lm1hdC1zbGlkZS10b2dnbGUubWF0LWRpc2FibGVke29wYWNpdHk6LjM4fS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1kaXNhYmxlZCAubWF0LXNsaWRlLXRvZ2dsZS1sYWJlbCwubWF0LXNsaWRlLXRvZ2dsZS5tYXQtZGlzYWJsZWQgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWItY29udGFpbmVye2N1cnNvcjpkZWZhdWx0fS5tYXQtc2xpZGUtdG9nZ2xlLWxhYmVse2Rpc3BsYXk6ZmxleDtmbGV4OjE7ZmxleC1kaXJlY3Rpb246cm93O2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6aW5oZXJpdDtjdXJzb3I6cG9pbnRlcn0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50e3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc30ubWF0LXNsaWRlLXRvZ2dsZS1sYWJlbC1iZWZvcmUgLm1hdC1zbGlkZS10b2dnbGUtbGFiZWx7b3JkZXI6MX0ubWF0LXNsaWRlLXRvZ2dsZS1sYWJlbC1iZWZvcmUgLm1hdC1zbGlkZS10b2dnbGUtYmFye29yZGVyOjJ9W2Rpcj1ydGxdIC5tYXQtc2xpZGUtdG9nZ2xlLWxhYmVsLWJlZm9yZSAubWF0LXNsaWRlLXRvZ2dsZS1iYXIsLm1hdC1zbGlkZS10b2dnbGUtYmFye21hcmdpbi1yaWdodDo4cHg7bWFyZ2luLWxlZnQ6MH1bZGlyPXJ0bF0gLm1hdC1zbGlkZS10b2dnbGUtYmFyLC5tYXQtc2xpZGUtdG9nZ2xlLWxhYmVsLWJlZm9yZSAubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7bWFyZ2luLWxlZnQ6OHB4O21hcmdpbi1yaWdodDowfS5tYXQtc2xpZGUtdG9nZ2xlLWJhci1uby1zaWRlLW1hcmdpbnttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowfS5tYXQtc2xpZGUtdG9nZ2xlLXRodW1iLWNvbnRhaW5lcntwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjE7d2lkdGg6MjBweDtoZWlnaHQ6MjBweDt0b3A6LTNweDtsZWZ0OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsIDAsIDApO3RyYW5zaXRpb246YWxsIDgwbXMgbGluZWFyO3RyYW5zaXRpb24tcHJvcGVydHk6dHJhbnNmb3JtfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYi1jb250YWluZXJ7dHJhbnNpdGlvbjpub25lfVtkaXI9cnRsXSAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYi1jb250YWluZXJ7bGVmdDphdXRvO3JpZ2h0OjB9Lm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7aGVpZ2h0OjIwcHg7d2lkdGg6MjBweDtib3JkZXItcmFkaXVzOjUwJX0ubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MzZweDtoZWlnaHQ6MTRweDtmbGV4LXNocmluazowO2JvcmRlci1yYWRpdXM6OHB4fS5tYXQtc2xpZGUtdG9nZ2xlLWlucHV0e2JvdHRvbTowO2xlZnQ6MTBweH1bZGlyPXJ0bF0gLm1hdC1zbGlkZS10b2dnbGUtaW5wdXR7bGVmdDphdXRvO3JpZ2h0OjEwcHh9Lm1hdC1zbGlkZS10b2dnbGUtYmFyLC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1ie3RyYW5zaXRpb246YWxsIDgwbXMgbGluZWFyO3RyYW5zaXRpb24tcHJvcGVydHk6YmFja2dyb3VuZC1jb2xvcjt0cmFuc2l0aW9uLWRlbGF5OjUwbXN9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtc2xpZGUtdG9nZ2xlLWJhciwuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7dHJhbnNpdGlvbjpub25lfS5tYXQtc2xpZGUtdG9nZ2xlIC5tYXQtc2xpZGUtdG9nZ2xlLXJpcHBsZXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6Y2FsYyg1MCUgLSAyMHB4KTtsZWZ0OmNhbGMoNTAlIC0gMjBweCk7aGVpZ2h0OjQwcHg7d2lkdGg6NDBweDt6LWluZGV4OjE7cG9pbnRlci1ldmVudHM6bm9uZX0ubWF0LXNsaWRlLXRvZ2dsZSAubWF0LXNsaWRlLXRvZ2dsZS1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudDpub3QoLm1hdC1zbGlkZS10b2dnbGUtcGVyc2lzdGVudC1yaXBwbGUpe29wYWNpdHk6LjEyfS5tYXQtc2xpZGUtdG9nZ2xlLXBlcnNpc3RlbnQtcmlwcGxle3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7dHJhbnNmb3JtOm5vbmV9Lm1hdC1zbGlkZS10b2dnbGUtYmFyOmhvdmVyIC5tYXQtc2xpZGUtdG9nZ2xlLXBlcnNpc3RlbnQtcmlwcGxle29wYWNpdHk6LjA0fS5tYXQtc2xpZGUtdG9nZ2xlOm5vdCgubWF0LWRpc2FibGVkKS5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LXNsaWRlLXRvZ2dsZS1wZXJzaXN0ZW50LXJpcHBsZXtvcGFjaXR5Oi4xMn0ubWF0LXNsaWRlLXRvZ2dsZS1wZXJzaXN0ZW50LXJpcHBsZSwubWF0LXNsaWRlLXRvZ2dsZS5tYXQtZGlzYWJsZWQgLm1hdC1zbGlkZS10b2dnbGUtYmFyOmhvdmVyIC5tYXQtc2xpZGUtdG9nZ2xlLXBlcnNpc3RlbnQtcmlwcGxle29wYWNpdHk6MH1AbWVkaWEoaG92ZXI6IG5vbmUpey5tYXQtc2xpZGUtdG9nZ2xlLWJhcjpob3ZlciAubWF0LXNsaWRlLXRvZ2dsZS1wZXJzaXN0ZW50LXJpcHBsZXtkaXNwbGF5Om5vbmV9fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWIsLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7Ym9yZGVyOjFweCBzb2xpZH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc2xpZGUtdG9nZ2xlLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntvdXRsaW5lOjJweCBkb3R0ZWQ7b3V0bGluZS1vZmZzZXQ6NXB4fVxuIl0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSkscXl0LmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6Y2h9LHt0eXBlOnB6fSx7dHlwZTpIaH0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOlJyLGFyZ3M6WyJ0YWJpbmRleCJdfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltqeXRdfV19LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbTnddfV19XSxxeXQucHJvcERlY29yYXRvcnM9e190aHVtYkVsOlt7dHlwZTpGcixhcmdzOlsidGh1bWJDb250YWluZXIiXX1dLF90aHVtYkJhckVsOlt7dHlwZTpGcixhcmdzOlsidG9nZ2xlQmFyIl19XSxuYW1lOlt7dHlwZTp5X31dLGlkOlt7dHlwZTp5X31dLGxhYmVsUG9zaXRpb246W3t0eXBlOnlffV0sYXJpYUxhYmVsOlt7dHlwZTp5XyxhcmdzOlsiYXJpYS1sYWJlbCJdfV0sYXJpYUxhYmVsbGVkYnk6W3t0eXBlOnlfLGFyZ3M6WyJhcmlhLWxhYmVsbGVkYnkiXX1dLHJlcXVpcmVkOlt7dHlwZTp5X31dLGNoZWNrZWQ6W3t0eXBlOnlffV0sY2hhbmdlOlt7dHlwZTpfX31dLHRvZ2dsZUNoYW5nZTpbe3R5cGU6X199XSxfaW5wdXRFbGVtZW50Olt7dHlwZTpGcixhcmdzOlsiaW5wdXQiXX1dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHF5dCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJtYXQtc2xpZGUtdG9nZ2xlIixleHBvcnRBczoibWF0U2xpZGVUb2dnbGUiLGhvc3Q6e2NsYXNzOiJtYXQtc2xpZGUtdG9nZ2xlIiwiW2lkXSI6ImlkIiwiW2F0dHIudGFiaW5kZXhdIjoiZGlzYWJsZWQgPyBudWxsIDogLTEiLCJbYXR0ci5hcmlhLWxhYmVsXSI6Im51bGwiLCJbYXR0ci5hcmlhLWxhYmVsbGVkYnldIjoibnVsbCIsIltjbGFzcy5tYXQtY2hlY2tlZF0iOiJjaGVja2VkIiwiW2NsYXNzLm1hdC1kaXNhYmxlZF0iOiJkaXNhYmxlZCIsIltjbGFzcy5tYXQtc2xpZGUtdG9nZ2xlLWxhYmVsLWJlZm9yZV0iOidsYWJlbFBvc2l0aW9uID09ICJiZWZvcmUiJywiW2NsYXNzLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlXSI6J19hbmltYXRpb25Nb2RlID09PSAiTm9vcEFuaW1hdGlvbnMiJ30sdGVtcGxhdGU6JzxsYWJlbCBbYXR0ci5mb3JdPSJpbnB1dElkIiBjbGFzcz0ibWF0LXNsaWRlLXRvZ2dsZS1sYWJlbCIgI2xhYmVsPlxuICA8ZGl2ICN0b2dnbGVCYXIgY2xhc3M9Im1hdC1zbGlkZS10b2dnbGUtYmFyIlxuICAgICAgIFtjbGFzcy5tYXQtc2xpZGUtdG9nZ2xlLWJhci1uby1zaWRlLW1hcmdpbl09IiFsYWJlbENvbnRlbnQudGV4dENvbnRlbnQgfHwgIWxhYmVsQ29udGVudC50ZXh0Q29udGVudC50cmltKCkiPlxuXG4gICAgPGlucHV0ICNpbnB1dCBjbGFzcz0ibWF0LXNsaWRlLXRvZ2dsZS1pbnB1dCBjZGstdmlzdWFsbHktaGlkZGVuIiB0eXBlPSJjaGVja2JveCJcbiAgICAgICAgICAgcm9sZT0ic3dpdGNoIlxuICAgICAgICAgICBbaWRdPSJpbnB1dElkIlxuICAgICAgICAgICBbcmVxdWlyZWRdPSJyZXF1aXJlZCJcbiAgICAgICAgICAgW3RhYkluZGV4XT0idGFiSW5kZXgiXG4gICAgICAgICAgIFtjaGVja2VkXT0iY2hlY2tlZCJcbiAgICAgICAgICAgW2Rpc2FibGVkXT0iZGlzYWJsZWQiXG4gICAgICAgICAgIFthdHRyLm5hbWVdPSJuYW1lIlxuICAgICAgICAgICBbYXR0ci5hcmlhLWNoZWNrZWRdPSJjaGVja2VkLnRvU3RyaW5nKCkiXG4gICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPSJhcmlhTGFiZWwiXG4gICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09ImFyaWFMYWJlbGxlZGJ5IlxuICAgICAgICAgICAoY2hhbmdlKT0iX29uQ2hhbmdlRXZlbnQoJGV2ZW50KSJcbiAgICAgICAgICAgKGNsaWNrKT0iX29uSW5wdXRDbGljaygkZXZlbnQpIj5cblxuICAgIDxkaXYgY2xhc3M9Im1hdC1zbGlkZS10b2dnbGUtdGh1bWItY29udGFpbmVyIiAjdGh1bWJDb250YWluZXI+XG4gICAgICA8ZGl2IGNsYXNzPSJtYXQtc2xpZGUtdG9nZ2xlLXRodW1iIj48L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9Im1hdC1zbGlkZS10b2dnbGUtcmlwcGxlIG1hdC1mb2N1cy1pbmRpY2F0b3IiIG1hdC1yaXBwbGVcbiAgICAgICAgICAgW21hdFJpcHBsZVRyaWdnZXJdPSJsYWJlbCJcbiAgICAgICAgICAgW21hdFJpcHBsZURpc2FibGVkXT0iZGlzYWJsZVJpcHBsZSB8fCBkaXNhYmxlZCJcbiAgICAgICAgICAgW21hdFJpcHBsZUNlbnRlcmVkXT0idHJ1ZSJcbiAgICAgICAgICAgW21hdFJpcHBsZVJhZGl1c109IjIwIlxuICAgICAgICAgICBbbWF0UmlwcGxlQW5pbWF0aW9uXT0ie2VudGVyRHVyYXRpb246IDE1MH0iPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9Im1hdC1yaXBwbGUtZWxlbWVudCBtYXQtc2xpZGUtdG9nZ2xlLXBlcnNpc3RlbnQtcmlwcGxlIj48L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gIDwvZGl2PlxuXG4gIDxzcGFuIGNsYXNzPSJtYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnQiICNsYWJlbENvbnRlbnQgKGNka09ic2VydmVDb250ZW50KT0iX29uTGFiZWxUZXh0Q2hhbmdlKCkiPlxuICAgIFx4M2MhLS0gQWRkIGFuIGludmlzaWJsZSBzcGFuIHNvIEpBV1MgY2FuIHJlYWQgdGhlIGxhYmVsIC0tXHgzZVxuICAgIDxzcGFuIHN0eWxlPSJkaXNwbGF5Om5vbmUiPiZuYnNwOzwvc3Bhbj5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gIDwvc3Bhbj5cbjwvbGFiZWw+XG4nLHByb3ZpZGVyczpbV3l0XSxpbnB1dHM6WyJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJjb2xvciIsInRhYkluZGV4Il0sZW5jYXBzdWxhdGlvbjpQby5Ob25lLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2gsc3R5bGVzOlsiLm1hdC1zbGlkZS10b2dnbGV7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjI0cHg7bWF4LXdpZHRoOjEwMCU7bGluZS1oZWlnaHQ6MjRweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTpub25lOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudH0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtY2hlY2tlZCAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYi1jb250YWluZXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDE2cHgsIDAsIDApfVtkaXI9cnRsXSAubWF0LXNsaWRlLXRvZ2dsZS5tYXQtY2hlY2tlZCAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYi1jb250YWluZXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKC0xNnB4LCAwLCAwKX0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtZGlzYWJsZWR7b3BhY2l0eTouMzh9Lm1hdC1zbGlkZS10b2dnbGUubWF0LWRpc2FibGVkIC5tYXQtc2xpZGUtdG9nZ2xlLWxhYmVsLC5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1kaXNhYmxlZCAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYi1jb250YWluZXJ7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1zbGlkZS10b2dnbGUtbGFiZWx7ZGlzcGxheTpmbGV4O2ZsZXg6MTtmbGV4LWRpcmVjdGlvbjpyb3c7YWxpZ24taXRlbXM6Y2VudGVyO2hlaWdodDppbmhlcml0O2N1cnNvcjpwb2ludGVyfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnR7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS5tYXQtc2xpZGUtdG9nZ2xlLWxhYmVsLWJlZm9yZSAubWF0LXNsaWRlLXRvZ2dsZS1sYWJlbHtvcmRlcjoxfS5tYXQtc2xpZGUtdG9nZ2xlLWxhYmVsLWJlZm9yZSAubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7b3JkZXI6Mn1bZGlyPXJ0bF0gLm1hdC1zbGlkZS10b2dnbGUtbGFiZWwtYmVmb3JlIC5tYXQtc2xpZGUtdG9nZ2xlLWJhciwubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7bWFyZ2luLXJpZ2h0OjhweDttYXJnaW4tbGVmdDowfVtkaXI9cnRsXSAubWF0LXNsaWRlLXRvZ2dsZS1iYXIsLm1hdC1zbGlkZS10b2dnbGUtbGFiZWwtYmVmb3JlIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcnttYXJnaW4tbGVmdDo4cHg7bWFyZ2luLXJpZ2h0OjB9Lm1hdC1zbGlkZS10b2dnbGUtYmFyLW5vLXNpZGUtbWFyZ2lue21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjB9Lm1hdC1zbGlkZS10b2dnbGUtdGh1bWItY29udGFpbmVye3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTt3aWR0aDoyMHB4O2hlaWdodDoyMHB4O3RvcDotM3B4O2xlZnQ6MDt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7dHJhbnNpdGlvbjphbGwgODBtcyBsaW5lYXI7dHJhbnNpdGlvbi1wcm9wZXJ0eTp0cmFuc2Zvcm19Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1iLWNvbnRhaW5lcnt0cmFuc2l0aW9uOm5vbmV9W2Rpcj1ydGxdIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1iLWNvbnRhaW5lcntsZWZ0OmF1dG87cmlnaHQ6MH0ubWF0LXNsaWRlLXRvZ2dsZS10aHVtYntoZWlnaHQ6MjBweDt3aWR0aDoyMHB4O2JvcmRlci1yYWRpdXM6NTAlfS5tYXQtc2xpZGUtdG9nZ2xlLWJhcntwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDozNnB4O2hlaWdodDoxNHB4O2ZsZXgtc2hyaW5rOjA7Ym9yZGVyLXJhZGl1czo4cHh9Lm1hdC1zbGlkZS10b2dnbGUtaW5wdXR7Ym90dG9tOjA7bGVmdDoxMHB4fVtkaXI9cnRsXSAubWF0LXNsaWRlLXRvZ2dsZS1pbnB1dHtsZWZ0OmF1dG87cmlnaHQ6MTBweH0ubWF0LXNsaWRlLXRvZ2dsZS1iYXIsLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7dHJhbnNpdGlvbjphbGwgODBtcyBsaW5lYXI7dHJhbnNpdGlvbi1wcm9wZXJ0eTpiYWNrZ3JvdW5kLWNvbG9yO3RyYW5zaXRpb24tZGVsYXk6NTBtc30uX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1zbGlkZS10b2dnbGUtYmFyLC5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYnt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1zbGlkZS10b2dnbGUgLm1hdC1zbGlkZS10b2dnbGUtcmlwcGxle3Bvc2l0aW9uOmFic29sdXRlO3RvcDpjYWxjKDUwJSAtIDIwcHgpO2xlZnQ6Y2FsYyg1MCUgLSAyMHB4KTtoZWlnaHQ6NDBweDt3aWR0aDo0MHB4O3otaW5kZXg6MTtwb2ludGVyLWV2ZW50czpub25lfS5tYXQtc2xpZGUtdG9nZ2xlIC5tYXQtc2xpZGUtdG9nZ2xlLXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50Om5vdCgubWF0LXNsaWRlLXRvZ2dsZS1wZXJzaXN0ZW50LXJpcHBsZSl7b3BhY2l0eTouMTJ9Lm1hdC1zbGlkZS10b2dnbGUtcGVyc2lzdGVudC1yaXBwbGV7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTt0cmFuc2Zvcm06bm9uZX0ubWF0LXNsaWRlLXRvZ2dsZS1iYXI6aG92ZXIgLm1hdC1zbGlkZS10b2dnbGUtcGVyc2lzdGVudC1yaXBwbGV7b3BhY2l0eTouMDR9Lm1hdC1zbGlkZS10b2dnbGU6bm90KC5tYXQtZGlzYWJsZWQpLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtc2xpZGUtdG9nZ2xlLXBlcnNpc3RlbnQtcmlwcGxle29wYWNpdHk6LjEyfS5tYXQtc2xpZGUtdG9nZ2xlLXBlcnNpc3RlbnQtcmlwcGxlLC5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1kaXNhYmxlZCAubWF0LXNsaWRlLXRvZ2dsZS1iYXI6aG92ZXIgLm1hdC1zbGlkZS10b2dnbGUtcGVyc2lzdGVudC1yaXBwbGV7b3BhY2l0eTowfUBtZWRpYShob3Zlcjogbm9uZSl7Lm1hdC1zbGlkZS10b2dnbGUtYmFyOmhvdmVyIC5tYXQtc2xpZGUtdG9nZ2xlLXBlcnNpc3RlbnQtcmlwcGxle2Rpc3BsYXk6bm9uZX19LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYiwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntib3JkZXI6MXB4IHNvbGlkfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zbGlkZS10b2dnbGUuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1zbGlkZS10b2dnbGUtYmFye291dGxpbmU6MnB4IGRvdHRlZDtvdXRsaW5lLW9mZnNldDo1cHh9XG4iXX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmNofSx7dHlwZTpwen0se3R5cGU6SGh9LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpScixhcmdzOlsidGFiaW5kZXgiXX1dfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbanl0XX1dfSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W053XX1dfV19KSx7bmFtZTpbe3R5cGU6eV99XSxpZDpbe3R5cGU6eV99XSxsYWJlbFBvc2l0aW9uOlt7dHlwZTp5X31dLGFyaWFMYWJlbDpbe3R5cGU6eV8sYXJnczpbImFyaWEtbGFiZWwiXX1dLGFyaWFMYWJlbGxlZGJ5Olt7dHlwZTp5XyxhcmdzOlsiYXJpYS1sYWJlbGxlZGJ5Il19XSxjaGFuZ2U6W3t0eXBlOl9ffV0sdG9nZ2xlQ2hhbmdlOlt7dHlwZTpfX31dLHJlcXVpcmVkOlt7dHlwZTp5X31dLGNoZWNrZWQ6W3t0eXBlOnlffV0sX3RodW1iRWw6W3t0eXBlOkZyLGFyZ3M6WyJ0aHVtYkNvbnRhaW5lciJdfV0sX3RodW1iQmFyRWw6W3t0eXBlOkZyLGFyZ3M6WyJ0b2dnbGVCYXIiXX1dLF9pbnB1dEVsZW1lbnQ6W3t0eXBlOkZyLGFyZ3M6WyJpbnB1dCJdfV19KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IFp5dD17cHJvdmlkZTpFVix1c2VFeGlzdGluZzpJbigoKCk9Plh5dCkpLG11bHRpOiEwfTtjbGFzcyBYeXQgZXh0ZW5kcyBrVXt9WHl0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIEt5dChlfHxYeXQpfSxYeXQuybVkaXI9Sm8oe3R5cGU6WHl0LHNlbGVjdG9yczpbWyJtYXQtc2xpZGUtdG9nZ2xlIiwicmVxdWlyZWQiLCIiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbIm1hdC1zbGlkZS10b2dnbGUiLCJyZXF1aXJlZCIsIiIsImZvcm1Db250cm9sIiwiIl0sWyJtYXQtc2xpZGUtdG9nZ2xlIiwicmVxdWlyZWQiLCIiLCJuZ01vZGVsIiwiIl1dLGZlYXR1cmVzOltpaChbWnl0XSksZ21dfSk7Y29uc3QgS3l0PXZyKFh5dCk7KCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihYeXQsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xOYW1lXSxcbiAgICAgICAgICAgICBtYXQtc2xpZGUtdG9nZ2xlW3JlcXVpcmVkXVtmb3JtQ29udHJvbF0sIG1hdC1zbGlkZS10b2dnbGVbcmVxdWlyZWRdW25nTW9kZWxdIixwcm92aWRlcnM6W1p5dF19XX1dLG51bGwsbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyBKeXR7fUp5dC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8Snl0KX0sSnl0Lsm1bW9kPVpvKHt0eXBlOkp5dH0pLEp5dC7JtWluaj1jbyh7fSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhKeXQse2RlY2xhcmF0aW9uczpbWHl0XSxleHBvcnRzOltYeXRdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihKeXQsW3t0eXBlOmtfLGFyZ3M6W3tleHBvcnRzOltYeXRdLGRlY2xhcmF0aW9uczpbWHl0XX1dfV0sbnVsbCxudWxsKTtjbGFzcyBReXR7fWZ1bmN0aW9uICR5dCh0LGUpezEmdCYmd3UoMCwibWF0LWljb24iLDMpfVF5dC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8UXl0KX0sUXl0Lsm1bW9kPVpvKHt0eXBlOlF5dH0pLFF5dC7JtWluaj1jbyh7aW1wb3J0czpbW0p5dCxtSCxUeixESV0sSnl0LFR6XX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oUXl0LHtkZWNsYXJhdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm5bcXl0XX0saW1wb3J0czpmdW5jdGlvbigpe3JldHVybltKeXQsbUgsVHosREldfSxleHBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW0p5dCxxeXQsVHpdfX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoUXl0LFt7dHlwZTprXyxhcmdzOlt7aW1wb3J0czpbSnl0LG1ILFR6LERJXSxleHBvcnRzOltKeXQscXl0LFR6XSxkZWNsYXJhdGlvbnM6W3F5dF19XX1dLG51bGwsbnVsbCk7Y2xhc3MgdF90e2NvbnN0cnVjdG9yKCl7dGhpcy5vblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2U9bmV3IEFifX10X3QuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHRfdCl9LHRfdC7JtWNtcD1Vbyh7dHlwZTp0X3Qsc2VsZWN0b3JzOltbIm5wbWktYW5ub3RhdGlvbnMtc2VhcmNoLWNvbXBvbmVudCJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MiZlJiZhZigidmFsaWQiLG4uaXNSZWdleEZpbHRlclZhbGlkKX0saW5wdXRzOntyZWdleEZpbHRlclZhbHVlOiJyZWdleEZpbHRlclZhbHVlIixpc1JlZ2V4RmlsdGVyVmFsaWQ6ImlzUmVnZXhGaWx0ZXJWYWxpZCJ9LG91dHB1dHM6e29uUmVnZXhGaWx0ZXJWYWx1ZUNoYW5nZToib25SZWdleEZpbHRlclZhbHVlQ2hhbmdlIn0sZGVjbHM6Myx2YXJzOjIsY29uc3RzOltbInN2Z0ljb24iLCJzZWFyY2hfMjRweCJdLFsiYXV0b2NvbXBsZXRlIiwib2ZmIiwicGxhY2Vob2xkZXIiLCJGaWx0ZXIgQW5ub3RhdGlvbnMiLDMsInZhbHVlIiwiaW5wdXQiXSxbInN2Z0ljb24iLCJlcnJvcl8yNHB4IiwiY2xhc3MiLCJlcnJvci1pY29uIiwibWF0VG9vbHRpcCIsIkludmFsaWQgcmVnZXggZmlsdGVyLiBUaGUgcmVzdWx0IG1heSBiZSBzdGFsZS4iLDQsIm5nSWYiXSxbInN2Z0ljb24iLCJlcnJvcl8yNHB4IiwibWF0VG9vbHRpcCIsIkludmFsaWQgcmVnZXggZmlsdGVyLiBUaGUgcmVzdWx0IG1heSBiZSBzdGFsZS4iLDEsImVycm9yLWljb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKHd1KDAsIm1hdC1pY29uIiwwKSxPdSgxLCJpbnB1dCIsMSksTnUoImlucHV0IiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2UuZW1pdChlLnRhcmdldC52YWx1ZSl9KSksUHUoKSxXbSgyLCR5dCwxLDAsIm1hdC1pY29uIiwyKSksMiZlJiYoSmMoMSksdnUoInZhbHVlIixuLnJlZ2V4RmlsdGVyVmFsdWUpLEpjKDEpLHZ1KCJuZ0lmIiwhbi5pc1JlZ2V4RmlsdGVyVmFsaWQpKX0sZGlyZWN0aXZlczpbY0csYXZdLHN0eWxlczpbJy5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHh9Lm1hdC1oMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaGVhZGxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTVweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZ1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjA1ZW07bWFyZ2luOjAgMCA1NnB4fS5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAwNWVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXJhaXNlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdHJva2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmxhdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZhYltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbWluaS1mYWJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4fS5tYXQtY2FyZC1zdWJ0aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGVja2JveC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvb3Rlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgdHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIzZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LjU0MTY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2NjY2NjY3ZW0pfUBtZWRpYSBwcmludHsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjJlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouMjVlbSAwIC43NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxZW0gMCAxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMiksIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi0wLjA2MjVlbX0ubWF0LW1lbnUtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci12ZXJ0aWNhbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGFiLWxpbmtbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MH0ubWF0LXRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5Om5vbmV9LmNkay12aXN1YWxseS1oaWRkZW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjZ9LmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV0sIC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3hbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2tbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHt9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7fS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOi13ZWJraXQtYXV0b2ZpbGwpe2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZVtfbmdjb250ZW50LSVDT01QJV17cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fS5tYXQtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfVtfbmdob3N0LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOnJlbGF0aXZlfVtfbmdob3N0LSVDT01QJV06bm90KC52YWxpZCl7Y29sb3I6I2M2MjgyOH1bX25naG9zdC0lQ09NUCVdOm5vdCgudmFsaWQpICAgaW5wdXRbX25nY29udGVudC0lQ09NUCVde2NhcmV0LWNvbG9yOmN1cnJlbnRDb2xvcn1bX25naG9zdC0lQ09NUCVdOm5vdCgudmFsaWQpICAgLmVycm9yLWljb25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNjNjI4Mjg7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MH0nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIodF90LFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6Im5wbWktYW5ub3RhdGlvbnMtc2VhcmNoLWNvbXBvbmVudCIsdGVtcGxhdGVVcmw6Ii4vYW5ub3RhdGlvbnNfc2VhcmNoX2NvbXBvbmVudC5uZy5odG1sIixzdHlsZVVybHM6WyIuL2Fubm90YXRpb25zX3NlYXJjaF9jb21wb25lbnQuY3NzIl0sY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sbnVsbCx7cmVnZXhGaWx0ZXJWYWx1ZTpbe3R5cGU6eV99XSxvblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2U6W3t0eXBlOl9ffV0saXNSZWdleEZpbHRlclZhbGlkOlt7dHlwZTpDXyxhcmdzOlsiY2xhc3MudmFsaWQiXX0se3R5cGU6eV99XX0pO2NsYXNzIGVfdHtjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXQsdGhpcy5hbm5vdGF0aW9uc0ZpbHRlciQ9dGhpcy5zdG9yZS5zZWxlY3QoSmh0KSx0aGlzLmlzQW5ub3RhdGlvbnNGaWx0ZXJWYWxpZCQ9dGhpcy5hbm5vdGF0aW9uc0ZpbHRlciQucGlwZShodCgodD0+e3RyeXtyZXR1cm4gbmV3IFJlZ0V4cCh0KSwhMH1jYXRjaCh0KXtyZXR1cm4hMX19KSkpfWZpbHRlckNoYW5nZSh0KXt0aGlzLnN0b3JlLmRpc3BhdGNoKE1idCh7cmVnZXg6dH0pKX19ZnVuY3Rpb24gbl90KHQsZSl7aWYoMSZ0KXtjb25zdCB0PUV1KCk7a3UoMCksT3UoMSwiYnV0dG9uIiw1KSxOdSgiY2xpY2siLChmdW5jdGlvbiBlKCl7cmEodCk7Y29uc3Qgbj1MdSgpO3JldHVybiBuLm9uRmxhZ0Fubm90YXRpb25zLmVtaXQobi5zZWxlY3RlZEFubm90YXRpb25zKX0pKSx3dSgyLCJtYXQtaWNvbiIsNiksUHUoKSxPdSgzLCJidXR0b24iLDcpLE51KCJjbGljayIsKGZ1bmN0aW9uIGUoKXtyYSh0KTtjb25zdCBuPUx1KCk7cmV0dXJuIG4ub25IaWRlQW5ub3RhdGlvbnMuZW1pdChuLnNlbGVjdGVkQW5ub3RhdGlvbnMpfSkpLHd1KDQsIm1hdC1pY29uIiw4KSxQdSgpLFN1KCl9aWYoMiZ0KXtjb25zdCB0PUx1KCk7SmMoMSksdnUoImRpc2FibGVkIiwwPT09dC5zZWxlY3RlZEFubm90YXRpb25zLmxlbmd0aCksSmMoMiksdnUoImRpc2FibGVkIiwwPT09dC5zZWxlY3RlZEFubm90YXRpb25zLmxlbmd0aCl9fWZ1bmN0aW9uIG9fdCh0LGUpe2lmKDEmdCl7Y29uc3QgdD1FdSgpO2t1KDApLE91KDEsIm1hdC1zbGlkZS10b2dnbGUiLDkpLE51KCJjaGFuZ2UiLChmdW5jdGlvbiBlKCl7cmV0dXJuIHJhKHQpLEx1KCkub25Ub2dnbGVTaG93Q291bnRzLmVtaXQoKX0pKSxNZigyLCIgU2FtcGxlIENvdW50ICIpLFB1KCksT3UoMywibWF0LXNsaWRlLXRvZ2dsZSIsMTApLE51KCJjaGFuZ2UiLChmdW5jdGlvbiBlKCl7cmV0dXJuIHJhKHQpLEx1KCkub25Ub2dnbGVTaG93SGlkZGVuLmVtaXQoKX0pKSxNZig0LCIgU2hvdyBIaWRkZW4gIiksUHUoKSx3dSg1LCJucG1pLWFubm90YXRpb25zLXNlYXJjaCIpLFN1KCl9aWYoMiZ0KXtjb25zdCB0PUx1KCk7SmMoMSksdnUoImNoZWNrZWQiLHQuc2hvd0NvdW50cyksSmMoMiksdnUoImNoZWNrZWQiLHQuc2hvd0hpZGRlbil9fWVfdC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8ZV90KShNdShFaykpfSxlX3QuybVjbXA9VW8oe3R5cGU6ZV90LHNlbGVjdG9yczpbWyJucG1pLWFubm90YXRpb25zLXNlYXJjaCJdXSxkZWNsczozLHZhcnM6Nixjb25zdHM6W1szLCJyZWdleEZpbHRlclZhbHVlIiwiaXNSZWdleEZpbHRlclZhbGlkIiwib25SZWdleEZpbHRlclZhbHVlQ2hhbmdlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihPdSgwLCJucG1pLWFubm90YXRpb25zLXNlYXJjaC1jb21wb25lbnQiLDApLE51KCJvblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2UiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLmZpbHRlckNoYW5nZShlKX0pKSxPYigxLCJhc3luYyIpLE9iKDIsImFzeW5jIiksUHUoKSksMiZlJiZ2dSgicmVnZXhGaWx0ZXJWYWx1ZSIsUGIoMSwyLG4uYW5ub3RhdGlvbnNGaWx0ZXIkKSkoImlzUmVnZXhGaWx0ZXJWYWxpZCIsUGIoMiw0LG4uaXNBbm5vdGF0aW9uc0ZpbHRlclZhbGlkJCkpfSxkaXJlY3RpdmVzOlt0X3RdLHBpcGVzOltNdl0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihlX3QsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoibnBtaS1hbm5vdGF0aW9ucy1zZWFyY2giLHRlbXBsYXRlOidcbiAgICA8bnBtaS1hbm5vdGF0aW9ucy1zZWFyY2gtY29tcG9uZW50XG4gICAgICBbcmVnZXhGaWx0ZXJWYWx1ZV09ImFubm90YXRpb25zRmlsdGVyJCB8IGFzeW5jIlxuICAgICAgW2lzUmVnZXhGaWx0ZXJWYWxpZF09ImlzQW5ub3RhdGlvbnNGaWx0ZXJWYWxpZCQgfCBhc3luYyJcbiAgICAgIChvblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2UpPSJmaWx0ZXJDaGFuZ2UoJGV2ZW50KSJcbiAgICA+PC9ucG1pLWFubm90YXRpb25zLXNlYXJjaC1jb21wb25lbnQ+XG4gICcsY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkVrfV19KSxudWxsKTtjbGFzcyBpX3R7Y29uc3RydWN0b3IoKXt0aGlzLm9uRmxhZ0Fubm90YXRpb25zPW5ldyBBYix0aGlzLm9uSGlkZUFubm90YXRpb25zPW5ldyBBYix0aGlzLm9uVG9nZ2xlRXhwYW5kZWQ9bmV3IEFiLHRoaXMub25Ub2dnbGVTaG93Q291bnRzPW5ldyBBYix0aGlzLm9uVG9nZ2xlU2hvd0hpZGRlbj1uZXcgQWJ9fWlfdC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8aV90KX0saV90Lsm1Y21wPVVvKHt0eXBlOmlfdCxzZWxlY3RvcnM6W1sibnBtaS1hbm5vdGF0aW9ucy1saXN0LXRvb2xiYXItY29tcG9uZW50Il1dLGlucHV0czp7bnVtQW5ub3RhdGlvbnM6Im51bUFubm90YXRpb25zIixleHBhbmRlZDoiZXhwYW5kZWQiLHNlbGVjdGVkQW5ub3RhdGlvbnM6InNlbGVjdGVkQW5ub3RhdGlvbnMiLGFubm90YXRpb25zRXhwYW5kZWQ6ImFubm90YXRpb25zRXhwYW5kZWQiLHNob3dDb3VudHM6InNob3dDb3VudHMiLHNob3dIaWRkZW46InNob3dIaWRkZW4ifSxvdXRwdXRzOntvbkZsYWdBbm5vdGF0aW9uczoib25GbGFnQW5ub3RhdGlvbnMiLG9uSGlkZUFubm90YXRpb25zOiJvbkhpZGVBbm5vdGF0aW9ucyIsb25Ub2dnbGVFeHBhbmRlZDoib25Ub2dnbGVFeHBhbmRlZCIsb25Ub2dnbGVTaG93Q291bnRzOiJvblRvZ2dsZVNob3dDb3VudHMiLG9uVG9nZ2xlU2hvd0hpZGRlbjoib25Ub2dnbGVTaG93SGlkZGVuIn0sZGVjbHM6Nyx2YXJzOjQsY29uc3RzOmZ1bmN0aW9uKCl7bGV0IHQsZSxuO3JldHVybiB0PSJ1bmRlZmluZWQiIT10eXBlb2YgbmdJMThuQ2xvc3VyZU1vZGUmJm5nSTE4bkNsb3N1cmVNb2RlP2dvb2cuZ2V0TXNnKCJIaWRlcy9TaG93cyB0aGUgQW5ub3RhdGlvbnMgTGlzdCIpOiRsb2NhbGl6ZWA6TGFiZWwgZm9yIGEgYnV0dG9uIHRoYXQgaGlkZXMvc2hvd3MgdGhlIGFubm90YXRpb25zIGxpc3Qu4pCfYjM2MDNiYTMzZTUzMDhkZDhjNWU4MDVlNTA4YjJmNzIzM2RmODlkNOKQnzczMzYzNzQ0MTMwNTYzNDI0OTI6SGlkZXMvU2hvd3MgdGhlIEFubm90YXRpb25zIExpc3RgLGU9InVuZGVmaW5lZCIhPXR5cGVvZiBuZ0kxOG5DbG9zdXJlTW9kZSYmbmdJMThuQ2xvc3VyZU1vZGU/Z29vZy5nZXRNc2coIkZsYWcgU2VsZWN0ZWQgQW5ub3RhdGlvbnMiKTokbG9jYWxpemVgOkxhYmVsIGZvciBhIGJ1dHRvbiB0aGF0IGZsYWdzIHNlbGVjdGVkIGFubm90YXRpb25zLuKQnzU2OTJhZDg4MzEwMzhhOTBjNTg2M2ExZTlhZGY5NzQ4Y2FjM2NhZDjikJ8yMjQ0MDk5ODkxMzEzMzM2NTk1OkZsYWcgU2VsZWN0ZWQgQW5ub3RhdGlvbnNgLG49InVuZGVmaW5lZCIhPXR5cGVvZiBuZ0kxOG5DbG9zdXJlTW9kZSYmbmdJMThuQ2xvc3VyZU1vZGU/Z29vZy5nZXRNc2coIkhpZGUgU2VsZWN0ZWQgQW5ub3RhdGlvbnMiKTokbG9jYWxpemVgOkxhYmVsIGZvciBhIGJ1dHRvbiB0aGF0IGhpZGVzIHNlbGVjdGVkIGFubm90YXRpb25zLuKQnzAzNDJjZGIzMzU4ZmE4ZTNmYTI3MjIwYTgyNThhNzI4NzQzMGI3MGbikJ81NDYyODMyMzkxMDkyMDg3NDg1OkhpZGUgU2VsZWN0ZWQgQW5ub3RhdGlvbnNgLFtbMSwiYW5ub3RhdGlvbnMtdGl0bGUtY29udGFpbmVyIl0sWzEsImFubm90YXRpb25zLXRpdGxlIl0sWzQsIm5nSWYiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLHQsMSwiZXhwYW5kLWJ1dHRvbiIsMywiY2xpY2siXSxbMywic3ZnSWNvbiJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsZSwidGl0bGUiLCJGbGFnZ2luZyBhbm5vdGF0aW9ucyBhZGRzIHRoZW0gdG8geW91ciBpbnZlc3RpZ2F0aW9uIHJlc3VsdHMsIHdoaWNoIGNhbiBsYXRlciBiZSBleHBvcnRlZC4iLDMsImRpc2FibGVkIiwiY2xpY2siXSxbInN2Z0ljb24iLCJmbGFnXzI0cHgiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLG4sInRpdGxlIiwiUmVtb3Zpbmcgbm9uLWNyaXRpY2FsIGFubm90YXRpb25zIHVuY2x1dHRlcnMgdGhlIHZpZXcuIFJlbW92ZWQgYW5ub3RhdGlvbnMgYXJlIHJlbW92ZWQgZnJvbSBhbGwgdmlzdWFsaXphdGlvbnMuIiwzLCJkaXNhYmxlZCIsImNsaWNrIl0sWyJzdmdJY29uIiwidmlzaWJpbGl0eV9vZmZfMjRweCJdLFsidGl0bGUiLCJIaWRlcyBhbmQgc2hvd3MgdGhlIHNhbXBsZSBjb3VudCB3aGVyZSBhcHBsaWNhYmxlIChob3cgbWFueSBzYW1wbGVzIGJlbG9uZyB0byBhIGNhdGVnb3J5KS4iLDEsInNob3ctdG9nZ2xlIiwzLCJjaGVja2VkIiwiY2hhbmdlIl0sWyJ0aXRsZSIsIkhpZGVzIGFuZCBzaG93cyBoaWRkZW4gYW5ub3RhdGlvbnMgaW4gYWxsIHZpc3VhbGl6YXRpb25zLiIsMSwic2hvdy10b2dnbGUiLDMsImNoZWNrZWQiLCJjaGFuZ2UiXV19LHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihPdSgwLCJkaXYiLDApLE91KDEsImgzIiwxKSxNZigyKSxQdSgpLFdtKDMsbl90LDUsMiwibmctY29udGFpbmVyIiwyKSxQdSgpLFdtKDQsb190LDYsMiwibmctY29udGFpbmVyIiwyKSxPdSg1LCJidXR0b24iLDMpLE51KCJjbGljayIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vblRvZ2dsZUV4cGFuZGVkLmVtaXQoKX0pKSx3dSg2LCJtYXQtaWNvbiIsNCksUHUoKSksMiZlJiYoSmMoMikseGYoIkFubm90YXRpb25zICgiLG4ubnVtQW5ub3RhdGlvbnMsIikiKSxKYygxKSx2dSgibmdJZiIsbi5leHBhbmRlZCksSmMoMSksdnUoIm5nSWYiLG4uZXhwYW5kZWQpLEpjKDIpLHZ1KCJzdmdJY29uIixuLmV4cGFuZGVkPyJleHBhbmRfbGVzc18yNHB4IjoiZXhwYW5kX21vcmVfMjRweCIpKX0sZGlyZWN0aXZlczpbYXYsTkgsY0cscXl0LGVfdF0sc3R5bGVzOlsnLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEycHg7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtYmFkZ2Utc21hbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6OXB4fS5tYXQtYmFkZ2UtbGFyZ2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweH0ubWF0LWgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1oZWFkbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMjRweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNnB4LzI4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNXB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC44MykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtaDZbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuNjcpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWJvZHktc3Ryb25nW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjAgMCAxMnB4fS5tYXQtc21hbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDEycHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjMwMCAxMTJweC8xMTJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDVlbTttYXJnaW46MCAwIDU2cHh9Lm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDU2cHgvNTZweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDJlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDQ1cHgvNDhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDA1ZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAzNHB4LzQwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDY0cHh9Lm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcmFpc2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0cm9rZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mbGF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmFiW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1taW5pLWZhYltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWJ1dHRvbi10b2dnbGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhcmQtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjIwcHh9Lm1hdC1jYXJkLXN1YnRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2hlY2tib3hbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNoZWNrYm94LWxheW91dFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoZWNrYm94LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoyNHB4fS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtdHJhaWxpbmctaWNvbi5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtcmVtb3ZlLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MThweH0ubWF0LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1oZWFkZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2VsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9vdGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2FsZW5kYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhbGVuZGFyLWJvZHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxM3B4fS5tYXQtY2FsZW5kYXItYm9keS1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FsZW5kYXItcGVyaW9kLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo0MDB9Lm1hdC1kaWFsb2ctdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjEyNTtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE1MCU7bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS41ZW07d2lkdGg6MS41ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNWVtIDA7Ym9yZGVyLXRvcDouODQzNzVlbSBzb2xpZCB0cmFuc3BhcmVudH0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6LTAuODQzNzVlbTtwYWRkaW5nLXRvcDouODQzNzVlbX0ubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo3NSU7bWFyZ2luLXRvcDouNjY2NjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjc5MTY2NjY2NjdlbSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNDM3NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMnB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjNlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM1MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjI4MTI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDouNTQxNjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjY2NjY2NjY2NjdlbSl9QG1lZGlhIHByaW50ey5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMmVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMWVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTJlbSkgc2NhbGUoMC43NSl9fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi4yNWVtIDAgLjc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMDkzNzVlbTttYXJnaW4tdG9wOi0wLjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjFlbSAwIDFlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS44NDM3NWVtO21hcmdpbi10b3A6LTAuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9aW5wdXQubWF0LWlucHV0LWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LTAuMDYyNWVtfS5tYXQtbWVudS1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtcGFnaW5hdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweH0ubWF0LXJhZGlvLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW19Lm1hdC1zbGlkZS10b2dnbGUtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdGVwcGVyLWhvcml6b250YWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXN0ZXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXN0ZXAtc3ViLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDpub3JtYWx9Lm1hdC1zdGVwLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LXN0ZXAtbGFiZWwtc2VsZWN0ZWRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRhYi1ncm91cFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdGFiLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10YWItbGlua1tfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowfS5tYXQtdG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB4O3BhZGRpbmctdG9wOjZweDtwYWRkaW5nLWJvdHRvbTo2cHh9Lm1hdC10b29sdGlwLWhhbmRzZXRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9Lm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE2cHh9Lm1hdC1vcHRncm91cC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1zaW1wbGUtc25hY2tiYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweH0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb25bX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjE7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo1MDB9Lm1hdC10cmVlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW5lc3RlZC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjQwMDtmb250LXNpemU6MTRweH0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmVtcHR5KXt0cmFuc2Zvcm06dHJhbnNsYXRlWigwKX0ubWF0LXJpcHBsZS5tYXQtcmlwcGxlLXVuYm91bmRlZFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItcmFkaXVzOjUwJTtwb2ludGVyLWV2ZW50czpub25lO3RyYW5zaXRpb246b3BhY2l0eSx0cmFuc2Zvcm0gMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpO3RyYW5zZm9ybTpzY2FsZSgwKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6bm9uZX0uY2RrLXZpc3VhbGx5LWhpZGRlbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjA7Y2xpcDpyZWN0KDAgMCAwIDApO2hlaWdodDoxcHg7bWFyZ2luOi0xcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwO291dGxpbmU6MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb2ludGVyLWV2ZW50czpub25lO3RvcDowO2xlZnQ6MDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTplbXB0eXtkaXNwbGF5Om5vbmV9LmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1wYW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czphdXRvO2JveC1zaXppbmc6Ym9yZGVyLWJveDt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O21heC13aWR0aDoxMDAlO21heC1oZWlnaHQ6MTAwJX0uY2RrLW92ZXJsYXktYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO3otaW5kZXg6MTAwMDtwb2ludGVyLWV2ZW50czphdXRvOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDt0cmFuc2l0aW9uOm9wYWNpdHkgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSk7b3BhY2l0eTowfS5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjF9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAuY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTouNn0uY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4zMil9LmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MH0uY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWluLXdpZHRoOjFweDttaW4taGVpZ2h0OjFweH0uY2RrLWdsb2JhbC1zY3JvbGxibG9ja1tfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7d2lkdGg6MTAwJTtvdmVyZmxvdy15OnNjcm9sbH1Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0e31Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZHt9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbHthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQgMHMgMW1zfS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOm5vdCg6LXdlYmtpdC1hdXRvZmlsbCl7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCAwcyAxbXN9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplW19uZ2NvbnRlbnQtJUNPTVAlXXtyZXNpemU6bm9uZX10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDphdXRvICFpbXBvcnRhbnQ7b3ZlcmZsb3c6aGlkZGVuICFpbXBvcnRhbnR9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZy1maXJlZm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDowICFpbXBvcnRhbnR9Lm1hdC1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtbWRjLWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9W19uZ2hvc3QtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7cGFkZGluZzowIDE2cHg7d2lkdGg6MTAwJX0uYW5ub3RhdGlvbnMtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lO2ZvbnQtc2l6ZTouOWVtO2ZvbnQtd2VpZ2h0OjUwMDtwYWRkaW5nLXJpZ2h0OjEwcHh9LmFubm90YXRpb25zLXRpdGxlLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6bm93cmFwO2ZsZXg6MSAxO2hlaWdodDo0MnB4fS5zaG93LXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOi45ZW07bWFyZ2luLXJpZ2h0Oi44ZW19J10sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGlfdCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJucG1pLWFubm90YXRpb25zLWxpc3QtdG9vbGJhci1jb21wb25lbnQiLHRlbXBsYXRlVXJsOiIuL2Fubm90YXRpb25zX2xpc3RfdG9vbGJhcl9jb21wb25lbnQubmcuaHRtbCIsc3R5bGVVcmxzOlsiLi9hbm5vdGF0aW9uc19saXN0X3Rvb2xiYXJfY29tcG9uZW50LmNzcyJdLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2h9XX1dLG51bGwse251bUFubm90YXRpb25zOlt7dHlwZTp5X31dLGV4cGFuZGVkOlt7dHlwZTp5X31dLHNlbGVjdGVkQW5ub3RhdGlvbnM6W3t0eXBlOnlffV0sYW5ub3RhdGlvbnNFeHBhbmRlZDpbe3R5cGU6eV99XSxzaG93Q291bnRzOlt7dHlwZTp5X31dLHNob3dIaWRkZW46W3t0eXBlOnlffV0sb25GbGFnQW5ub3RhdGlvbnM6W3t0eXBlOl9ffV0sb25IaWRlQW5ub3RhdGlvbnM6W3t0eXBlOl9ffV0sb25Ub2dnbGVFeHBhbmRlZDpbe3R5cGU6X199XSxvblRvZ2dsZVNob3dDb3VudHM6W3t0eXBlOl9ffV0sb25Ub2dnbGVTaG93SGlkZGVuOlt7dHlwZTpfX31dfSk7Y2xhc3MgYV90e2NvbnN0cnVjdG9yKHQpe3RoaXMuc3RvcmU9dCx0aGlzLnNlbGVjdGVkQW5ub3RhdGlvbnMkPXRoaXMuc3RvcmUuc2VsZWN0KFpodCksdGhpcy5hbm5vdGF0aW9uc0V4cGFuZGVkJD10aGlzLnN0b3JlLnNlbGVjdChvYnQpLHRoaXMuc2hvd0NvdW50cyQ9dGhpcy5zdG9yZS5zZWxlY3QoYWJ0KSx0aGlzLnNob3dIaWRkZW4kPXRoaXMuc3RvcmUuc2VsZWN0KHJidCksdGhpcy5hbm5vdGF0aW9uc0ZpbHRlciQ9dGhpcy5zdG9yZS5zZWxlY3QoSmh0KSx0aGlzLmlzQW5ub3RhdGlvbnNGaWx0ZXJWYWxpZCQ9dGhpcy5hbm5vdGF0aW9uc0ZpbHRlciQucGlwZShodCgodD0+e3RyeXtyZXR1cm4gQm9vbGVhbihuZXcgUmVnRXhwKHQpKX1jYXRjaCh0KXtyZXR1cm4hMX19KSkpfWZpbHRlckNoYW5nZSh0KXt0aGlzLnN0b3JlLmRpc3BhdGNoKE1idCh7cmVnZXg6dH0pKX1mbGFnQW5ub3RhdGlvbnModCl7dGhpcy5zdG9yZS5kaXNwYXRjaChfYnQoe2Fubm90YXRpb25zOnR9KSl9aGlkZUFubm90YXRpb25zKHQpe3RoaXMuc3RvcmUuZGlzcGF0Y2goQ2J0KHthbm5vdGF0aW9uczp0fSkpfXRvZ2dsZUV4cGFuZGVkKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChEYnQoKSl9dG9nZ2xlU2hvd0NvdW50cygpe3RoaXMuc3RvcmUuZGlzcGF0Y2goQWJ0KCkpfXRvZ2dsZVNob3dIaWRkZW4oKXt0aGlzLnN0b3JlLmRpc3BhdGNoKFJidCgpKX19YV90Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxhX3QpKE11KEVrKSl9LGFfdC7JtWNtcD1Vbyh7dHlwZTphX3Qsc2VsZWN0b3JzOltbIm5wbWktYW5ub3RhdGlvbnMtbGlzdC10b29sYmFyIl1dLGlucHV0czp7bnVtQW5ub3RhdGlvbnM6Im51bUFubm90YXRpb25zIixleHBhbmRlZDoiZXhwYW5kZWQifSxkZWNsczo1LHZhcnM6MTQsY29uc3RzOltbMywibnVtQW5ub3RhdGlvbnMiLCJleHBhbmRlZCIsInNlbGVjdGVkQW5ub3RhdGlvbnMiLCJhbm5vdGF0aW9uc0V4cGFuZGVkIiwic2hvd0NvdW50cyIsInNob3dIaWRkZW4iLCJvbkZsYWdBbm5vdGF0aW9ucyIsIm9uSGlkZUFubm90YXRpb25zIiwib25Ub2dnbGVFeHBhbmRlZCIsIm9uVG9nZ2xlU2hvd0NvdW50cyIsIm9uVG9nZ2xlU2hvd0hpZGRlbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoT3UoMCwibnBtaS1hbm5vdGF0aW9ucy1saXN0LXRvb2xiYXItY29tcG9uZW50IiwwKSxOdSgib25GbGFnQW5ub3RhdGlvbnMiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLmZsYWdBbm5vdGF0aW9ucyhlKX0pKSgib25IaWRlQW5ub3RhdGlvbnMiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLmhpZGVBbm5vdGF0aW9ucyhlKX0pKSgib25Ub2dnbGVFeHBhbmRlZCIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi50b2dnbGVFeHBhbmRlZCgpfSkpKCJvblRvZ2dsZVNob3dDb3VudHMiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4udG9nZ2xlU2hvd0NvdW50cygpfSkpKCJvblRvZ2dsZVNob3dIaWRkZW4iLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4udG9nZ2xlU2hvd0hpZGRlbigpfSkpLE9iKDEsImFzeW5jIiksT2IoMiwiYXN5bmMiKSxPYigzLCJhc3luYyIpLE9iKDQsImFzeW5jIiksUHUoKSksMiZlJiZ2dSgibnVtQW5ub3RhdGlvbnMiLG4ubnVtQW5ub3RhdGlvbnMpKCJleHBhbmRlZCIsbi5leHBhbmRlZCkoInNlbGVjdGVkQW5ub3RhdGlvbnMiLFBiKDEsNixuLnNlbGVjdGVkQW5ub3RhdGlvbnMkKSkoImFubm90YXRpb25zRXhwYW5kZWQiLFBiKDIsOCxuLmFubm90YXRpb25zRXhwYW5kZWQkKSkoInNob3dDb3VudHMiLFBiKDMsMTAsbi5zaG93Q291bnRzJCkpKCJzaG93SGlkZGVuIixQYig0LDEyLG4uc2hvd0hpZGRlbiQpKX0sZGlyZWN0aXZlczpbaV90XSxwaXBlczpbTXZdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoYV90LFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6Im5wbWktYW5ub3RhdGlvbnMtbGlzdC10b29sYmFyIix0ZW1wbGF0ZTonXG4gICAgPG5wbWktYW5ub3RhdGlvbnMtbGlzdC10b29sYmFyLWNvbXBvbmVudFxuICAgICAgW251bUFubm90YXRpb25zXT0ibnVtQW5ub3RhdGlvbnMiXG4gICAgICBbZXhwYW5kZWRdPSJleHBhbmRlZCJcbiAgICAgIFtzZWxlY3RlZEFubm90YXRpb25zXT0ic2VsZWN0ZWRBbm5vdGF0aW9ucyQgfCBhc3luYyJcbiAgICAgIFthbm5vdGF0aW9uc0V4cGFuZGVkXT0iYW5ub3RhdGlvbnNFeHBhbmRlZCQgfCBhc3luYyJcbiAgICAgIFtzaG93Q291bnRzXT0ic2hvd0NvdW50cyQgfCBhc3luYyJcbiAgICAgIFtzaG93SGlkZGVuXT0ic2hvd0hpZGRlbiQgfCBhc3luYyJcbiAgICAgIChvbkZsYWdBbm5vdGF0aW9ucyk9ImZsYWdBbm5vdGF0aW9ucygkZXZlbnQpIlxuICAgICAgKG9uSGlkZUFubm90YXRpb25zKT0iaGlkZUFubm90YXRpb25zKCRldmVudCkiXG4gICAgICAob25Ub2dnbGVFeHBhbmRlZCk9InRvZ2dsZUV4cGFuZGVkKCkiXG4gICAgICAob25Ub2dnbGVTaG93Q291bnRzKT0idG9nZ2xlU2hvd0NvdW50cygpIlxuICAgICAgKG9uVG9nZ2xlU2hvd0hpZGRlbik9InRvZ2dsZVNob3dIaWRkZW4oKSJcbiAgICA+PC9ucG1pLWFubm90YXRpb25zLWxpc3QtdG9vbGJhci1jb21wb25lbnQ+XG4gICcsY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkVrfV19KSx7bnVtQW5ub3RhdGlvbnM6W3t0eXBlOnlffV0sZXhwYW5kZWQ6W3t0eXBlOnlffV19KTtjb25zdCByX3Q9WyJnbHlwaCJdO2NsYXNzIHNfdHtuZ0FmdGVyVmlld0luaXQoKXt0aGlzLnN2Zz1yNih0aGlzLmdseXBoU1ZHLm5hdGl2ZUVsZW1lbnQpLHRoaXMubWFpbkNvbnRhaW5lcj10aGlzLnN2Zy5hcHBlbmQoImciKSx0aGlzLmRyYXcoKX1kcmF3KCl7ImNpcmNsZSI9PXRoaXMuc2hhcGU/dGhpcy5tYWluQ29udGFpbmVyLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiZmlsbCIsdGhpcy5jb2xvcikuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJjeCIsNSkuYXR0cigiY3kiLDUpLmF0dHIoInIiLDUpOiJiYXIiPT10aGlzLnNoYXBlP3RoaXMubWFpbkNvbnRhaW5lci5hcHBlbmQoInJlY3QiKS5hdHRyKCJmaWxsIix0aGlzLmNvbG9yKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5hdHRyKCJ3aWR0aCIsMTApLmF0dHIoImhlaWdodCIsMTApOiJydW5JbmRpY2F0b3IiPT10aGlzLnNoYXBlJiZ0aGlzLm1haW5Db250YWluZXIuYXBwZW5kKCJnIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZmlsbCIsdGhpcy5jb2xvcikuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJkIiwiTSAyIDAgTCAxMCAwIEwgNyA1IEwgMTAgMTAgTCAyIDEwIFoiKX19c190Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxzX3QpfSxzX3QuybVjbXA9VW8oe3R5cGU6c190LHNlbGVjdG9yczpbWyJucG1pLWxlZ2VuZC1lbGVtZW50Il1dLHZpZXdRdWVyeTpmdW5jdGlvbiB0KGUsbil7aWYoMSZlJiZXYihyX3QsMyxjaCksMiZlKXtsZXQgdDtVYih0PVliKCkpJiYobi5nbHlwaFNWRz10LmZpcnN0KX19LGlucHV0czp7dGV4dDoidGV4dCIsY29sb3I6ImNvbG9yIixzaGFwZToic2hhcGUifSxkZWNsczo0LHZhcnM6MSxjb25zdHM6W1sxLCJnbHlwaCJdLFsiZ2x5cGgiLCIiXSxbMSwibGVnZW5kLWVsZW1lbnQtdGl0bGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKEhhKCksd3UoMCwic3ZnIiwwLDEpLEZhKCksT3UoMiwiZGl2IiwyKSxNZigzKSxQdSgpKSwyJmUmJihKYygzKSx2ZihuLnRleHQpKX0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O3BhZGRpbmctcmlnaHQ6MTBweH0ubGVnZW5kLWVsZW1lbnQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTouOGVtO3BhZGRpbmctbGVmdDo1cHh9LmdseXBoW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMHB4O2hlaWdodDoxMHB4fSJdLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihzX3QsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoibnBtaS1sZWdlbmQtZWxlbWVudCIsdGVtcGxhdGVVcmw6Ii4vbGVnZW5kX2VsZW1lbnRfY29tcG9uZW50Lm5nLmh0bWwiLHN0eWxlVXJsczpbIi4vbGVnZW5kX2VsZW1lbnRfY29tcG9uZW50LmNzcyJdLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2h9XX1dLG51bGwse3RleHQ6W3t0eXBlOnlffV0sY29sb3I6W3t0eXBlOnlffV0sc2hhcGU6W3t0eXBlOnlffV0sZ2x5cGhTVkc6W3t0eXBlOkZyLGFyZ3M6WyJnbHlwaCIse3N0YXRpYzohMCxyZWFkOmNofV19XX0pO2NsYXNzIGxfdHt9ZnVuY3Rpb24gY190KHQsZSl7aWYoMSZ0JiZ3dSgwLCJtYXQtaWNvbiIsOCksMiZ0KXtjb25zdCB0PUx1KDIpO3Z1KCJzdmdJY29uIix0LnNvcnQub3JkZXI9PT10LlNvcnRPcmRlci5ERVNDRU5ESU5HPyJhcnJvd19kb3dud2FyZF8yNHB4IjoiYXJyb3dfdXB3YXJkXzI0cHgiKSgibmdDbGFzcyIsdC5zb3J0Lm9yZGVyPT09dC5Tb3J0T3JkZXIuREVTQ0VORElORz8iZG93bi1pY29uIjoidXAtaWNvbiIpfX1mdW5jdGlvbiBkX3QodCxlKXtpZigxJnQpe2NvbnN0IHQ9RXUoKTtPdSgwLCJkaXYiLDQpLE91KDEsImRpdiIsNSksT3UoMiwiZGl2Iiw2KSxOdSgiY2xpY2siLChmdW5jdGlvbiBuKCl7cmEodCk7Y29uc3Qgbz1lLiRpbXBsaWNpdDtyZXR1cm4gTHUoKS5vbkNoYW5nZVNvcnQuZW1pdChvKX0pKSxNZigzKSxXbSg0LGNfdCwxLDIsIm1hdC1pY29uIiw3KSxQdSgpLFB1KCksUHUoKX1pZigyJnQpe2NvbnN0IHQ9ZS4kaW1wbGljaXQsbj1MdSgpO0pjKDMpLHhmKCIgIixuLnN0cmlwTWV0cmljKHQpLCIgIiksSmMoMSksdnUoIm5nSWYiLHQ9PT1uLnNvcnQubWV0cmljKX19bF90Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxsX3QpfSxsX3QuybVjbXA9VW8oe3R5cGU6bF90LHNlbGVjdG9yczpbWyJucG1pLWFubm90YXRpb25zLWxpc3QtbGVnZW5kIl1dLGRlY2xzOjQsdmFyczowLGNvbnN0czpbWyJ0ZXh0IiwicnVuIGluZGljYXRvciIsImNvbG9yIiwicmdiKDAsMCwwKSIsInNoYXBlIiwicnVuSW5kaWNhdG9yIl0sWyJ0ZXh0IiwicG9zaXRpdmUgY29ycmVsYXRpb24iLCJjb2xvciIsInJnYigxMDksIDE3NCwgMjEzKSIsInNoYXBlIiwiYmFyIl0sWyJ0ZXh0IiwibmVnYXRpdmUgY29ycmVsYXRpb24iLCJjb2xvciIsInJnYigyNDksIDEwNSwgNzYpIiwic2hhcGUiLCJiYXIiXSxbInRleHQiLCJzYW1wbGUgY291bnQiLCJjb2xvciIsInJnYigxNTEsIDE1MSwgMTUxKSIsInNoYXBlIiwiY2lyY2xlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJih3dSgwLCJucG1pLWxlZ2VuZC1lbGVtZW50IiwwKSx3dSgxLCJucG1pLWxlZ2VuZC1lbGVtZW50IiwxKSx3dSgyLCJucG1pLWxlZ2VuZC1lbGVtZW50IiwyKSx3dSgzLCJucG1pLWxlZ2VuZC1lbGVtZW50IiwzKSl9LGRpcmVjdGl2ZXM6W3NfdF0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmZsZXg7cGFkZGluZzowIDE2cHh9Il19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGxfdCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJucG1pLWFubm90YXRpb25zLWxpc3QtbGVnZW5kIix0ZW1wbGF0ZVVybDoiLi9sZWdlbmRfY29tcG9uZW50Lm5nLmh0bWwiLHN0eWxlVXJsczpbIi4vbGVnZW5kX2NvbXBvbmVudC5jc3MiXX1dfV0sbnVsbCxudWxsKTtjbGFzcyBwX3R7Y29uc3RydWN0b3IoKXt0aGlzLm9uQ2hhbmdlU29ydD1uZXcgQWIsdGhpcy5vbkFsbEFubm90YXRpb25zVG9nZ2xlZD1uZXcgQWIsdGhpcy5Tb3J0T3JkZXI9Vmh0fXN0cmlwTWV0cmljKHQpe3JldHVybiBWYnQodCl9fXBfdC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8cF90KX0scF90Lsm1Y21wPVVvKHt0eXBlOnBfdCxzZWxlY3RvcnM6W1sibnBtaS1hbm5vdGF0aW9ucy1saXN0LWhlYWRlci1jb21wb25lbnQiXV0saW5wdXRzOntudW1Bbm5vdGF0aW9uczoibnVtQW5ub3RhdGlvbnMiLHNlbGVjdGVkQW5ub3RhdGlvbnM6InNlbGVjdGVkQW5ub3RhdGlvbnMiLGFjdGl2ZU1ldHJpY3M6ImFjdGl2ZU1ldHJpY3MiLHNvcnQ6InNvcnQifSxvdXRwdXRzOntvbkNoYW5nZVNvcnQ6Im9uQ2hhbmdlU29ydCIsb25BbGxBbm5vdGF0aW9uc1RvZ2dsZWQ6Im9uQWxsQW5ub3RhdGlvbnNUb2dnbGVkIn0sZGVjbHM6NCx2YXJzOjIsY29uc3RzOltbMSwidG9nZ2xlLWFsbC1jb250YWluZXIiXSxbMywiY2hlY2tlZCIsImNoYW5nZSJdLFsxLCJhbm5vdGF0aW9ucy1oZWFkZXItY29udGFpbmVycyJdLFsiY2xhc3MiLCJoZWFkZXItY29sdW1uIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiaGVhZGVyLWNvbHVtbiJdLFsxLCJoZWFkZXItY29udGFpbmVyIl0sWyJ0YWJpbmRleCIsIjAiLCJyb2xlIiwiYnV0dG9uIiwidGl0bGUiLCJDaGFuZ2UgdGhlIHNvcnQgYnkgY2xpY2tpbmcgYW55IG9mIHRoZSBtZXRyaWNzLiIsMSwiaGVhZGVyLWNsaWNrYWJsZSIsMywiY2xpY2siXSxbImNsYXNzIiwic29ydC1pY29uIiwzLCJzdmdJY29uIiwibmdDbGFzcyIsNCwibmdJZiJdLFsxLCJzb3J0LWljb24iLDMsInN2Z0ljb24iLCJuZ0NsYXNzIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihPdSgwLCJkaXYiLDApLE91KDEsIm1hdC1jaGVja2JveCIsMSksTnUoImNoYW5nZSIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25BbGxBbm5vdGF0aW9uc1RvZ2dsZWQuZW1pdChlLmNoZWNrZWQpfSkpLFB1KCksUHUoKSxPdSgyLCJkaXYiLDIpLFdtKDMsZF90LDUsMiwiZGl2IiwzKSxQdSgpKSwyJmUmJihKYygxKSx2dSgiY2hlY2tlZCIsbi5zZWxlY3RlZEFubm90YXRpb25zLmxlbmd0aD09PW4ubnVtQW5ub3RhdGlvbnMpLEpjKDIpLHZ1KCJuZ0Zvck9mIixuLmFjdGl2ZU1ldHJpY3MpKX0sZGlyZWN0aXZlczpbdVksb3YsYXYsY0csdHZdLHN0eWxlczpbJy5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHh9Lm1hdC1oMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaGVhZGxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTVweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZ1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjA1ZW07bWFyZ2luOjAgMCA1NnB4fS5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAwNWVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXJhaXNlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdHJva2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmxhdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZhYltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbWluaS1mYWJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4fS5tYXQtY2FyZC1zdWJ0aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGVja2JveC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvb3Rlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgdHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIzZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LjU0MTY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2NjY2NjY3ZW0pfUBtZWRpYSBwcmludHsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjJlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouMjVlbSAwIC43NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxZW0gMCAxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMiksIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi0wLjA2MjVlbX0ubWF0LW1lbnUtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci12ZXJ0aWNhbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGFiLWxpbmtbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MH0ubWF0LXRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5Om5vbmV9LmNkay12aXN1YWxseS1oaWRkZW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjZ9LmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV0sIC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3hbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2tbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHt9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7fS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOi13ZWJraXQtYXV0b2ZpbGwpe2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZVtfbmdjb250ZW50LSVDT01QJV17cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fS5tYXQtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfVtfbmdob3N0LSVDT01QJV17Ym9yZGVyLWJvdHRvbToycHggc29saWQgI2ViZWJlYjtkaXNwbGF5OmZsZXg7aGVpZ2h0OjI4cHg7YWxpZ24taXRlbXM6ZmxleC1lbmQ7bWFyZ2luLXRvcDo4cHh9LmFubm90YXRpb25zLWhlYWRlci1jb250YWluZXJzW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7Zm9udC1zaXplOi45ZW07Zm9udC13ZWlnaHQ6NTAwO2ZsZXgtZ3JvdzoxfS5oZWFkZXItY29sdW1uW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjEgMX0uaGVhZGVyLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmUtYmxvY2t9LmhlYWRlci1jbGlja2FibGVbX25nY29udGVudC0lQ09NUCVde2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtvdXRsaW5lOm5vbmV9LnRvZ2dsZS1hbGwtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tbGVmdDoxMHB4O3dpZHRoOjkwcHh9LnNvcnQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjE2cHh9J10sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHBfdCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJucG1pLWFubm90YXRpb25zLWxpc3QtaGVhZGVyLWNvbXBvbmVudCIsdGVtcGxhdGVVcmw6Ii4vaGVhZGVyX2NvbXBvbmVudC5uZy5odG1sIixzdHlsZVVybHM6WyIuL2hlYWRlcl9jb21wb25lbnQuY3NzIl0sY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sbnVsbCx7bnVtQW5ub3RhdGlvbnM6W3t0eXBlOnlffV0sc2VsZWN0ZWRBbm5vdGF0aW9uczpbe3R5cGU6eV99XSxhY3RpdmVNZXRyaWNzOlt7dHlwZTp5X31dLHNvcnQ6W3t0eXBlOnlffV0sb25DaGFuZ2VTb3J0Olt7dHlwZTpfX31dLG9uQWxsQW5ub3RhdGlvbnNUb2dnbGVkOlt7dHlwZTpfX31dfSk7Y2xhc3MgbV90e2NvbnN0cnVjdG9yKHQpe3RoaXMuc3RvcmU9dCx0aGlzLnNlbGVjdGVkQW5ub3RhdGlvbnMkPXRoaXMuc3RvcmUuc2VsZWN0KFpodCksdGhpcy5hbm5vdGF0aW9uU29ydCQ9dGhpcy5zdG9yZS5zZWxlY3QoZWJ0KX1jaGFuZ2VTb3J0KHQpe3RoaXMuc3RvcmUuZGlzcGF0Y2god2J0KHttZXRyaWM6dH0pKX1hbGxBbm5vdGF0aW9uc1RvZ2dsZWQodCl7dGhpcy5zdG9yZS5kaXNwYXRjaChiYnQodD97YW5ub3RhdGlvbnM6T2JqZWN0LmtleXModGhpcy5hbm5vdGF0aW9ucyl9Onthbm5vdGF0aW9uczpbXX0pKX19bV90Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxtX3QpKE11KEVrKSl9LG1fdC7JtWNtcD1Vbyh7dHlwZTptX3Qsc2VsZWN0b3JzOltbIm5wbWktYW5ub3RhdGlvbnMtbGlzdC1oZWFkZXIiXV0saW5wdXRzOntudW1Bbm5vdGF0aW9uczoibnVtQW5ub3RhdGlvbnMiLGFubm90YXRpb25zOiJhbm5vdGF0aW9ucyIsYWN0aXZlTWV0cmljczoiYWN0aXZlTWV0cmljcyJ9LGRlY2xzOjMsdmFyczo4LGNvbnN0czpbWzMsIm51bUFubm90YXRpb25zIiwic2VsZWN0ZWRBbm5vdGF0aW9ucyIsInNvcnQiLCJhY3RpdmVNZXRyaWNzIiwib25DaGFuZ2VTb3J0Iiwib25BbGxBbm5vdGF0aW9uc1RvZ2dsZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKE91KDAsIm5wbWktYW5ub3RhdGlvbnMtbGlzdC1oZWFkZXItY29tcG9uZW50IiwwKSxOdSgib25DaGFuZ2VTb3J0IiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5jaGFuZ2VTb3J0KGUpfSkpKCJvbkFsbEFubm90YXRpb25zVG9nZ2xlZCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4uYWxsQW5ub3RhdGlvbnNUb2dnbGVkKGUpfSkpLE9iKDEsImFzeW5jIiksT2IoMiwiYXN5bmMiKSxQdSgpKSwyJmUmJnZ1KCJudW1Bbm5vdGF0aW9ucyIsbi5udW1Bbm5vdGF0aW9ucykoInNlbGVjdGVkQW5ub3RhdGlvbnMiLFBiKDEsNCxuLnNlbGVjdGVkQW5ub3RhdGlvbnMkKSkoInNvcnQiLFBiKDIsNixuLmFubm90YXRpb25Tb3J0JCkpKCJhY3RpdmVNZXRyaWNzIixuLmFjdGl2ZU1ldHJpY3MpfSxkaXJlY3RpdmVzOltwX3RdLHBpcGVzOltNdl0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihtX3QsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoibnBtaS1hbm5vdGF0aW9ucy1saXN0LWhlYWRlciIsdGVtcGxhdGU6J1xuICAgIDxucG1pLWFubm90YXRpb25zLWxpc3QtaGVhZGVyLWNvbXBvbmVudFxuICAgICAgW251bUFubm90YXRpb25zXT0ibnVtQW5ub3RhdGlvbnMiXG4gICAgICBbc2VsZWN0ZWRBbm5vdGF0aW9uc109InNlbGVjdGVkQW5ub3RhdGlvbnMkIHwgYXN5bmMiXG4gICAgICBbc29ydF09ImFubm90YXRpb25Tb3J0JCB8IGFzeW5jIlxuICAgICAgW2FjdGl2ZU1ldHJpY3NdPSJhY3RpdmVNZXRyaWNzIlxuICAgICAgKG9uQ2hhbmdlU29ydCk9ImNoYW5nZVNvcnQoJGV2ZW50KSJcbiAgICAgIChvbkFsbEFubm90YXRpb25zVG9nZ2xlZCk9ImFsbEFubm90YXRpb25zVG9nZ2xlZCgkZXZlbnQpIlxuICAgID48L25wbWktYW5ub3RhdGlvbnMtbGlzdC1oZWFkZXItY29tcG9uZW50PlxuICAnLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2h9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpFa31dfSkse251bUFubm90YXRpb25zOlt7dHlwZTp5X31dLGFubm90YXRpb25zOlt7dHlwZTp5X31dLGFjdGl2ZU1ldHJpY3M6W3t0eXBlOnlffV19KTtjb25zdCB1X3Q9WyJjaGFydCJdLGZfdD1bImhpbnRDbGlwIl07ZnVuY3Rpb24gZ190KHQsZSl7MSZ0JiZ3dSgwLCJtYXQtaWNvbiIsMTIpfWZ1bmN0aW9uIGhfdCh0LGUpezEmdCYmd3UoMCwibWF0LWljb24iLDEzKX1mdW5jdGlvbiBiX3QodCxlKXtpZigxJnQmJnd1KDAsIm1hdC1pY29uIiwxNCksMiZ0KXtjb25zdCB0PUx1KCk7dnUoInN2Z0ljb24iLHQuc29ydC5vcmRlcj09PXQuU29ydE9yZGVyLlNJTUlMQVI/ImFycm93X2Rvd253YXJkXzI0cHgiOiJhcnJvd191cHdhcmRfMjRweCIpKCJuZ0NsYXNzIix0LnNvcnQub3JkZXI9PT10LlNvcnRPcmRlci5TSU1JTEFSPyJkb3duLWljb24iOiJ1cC1pY29uIil9fWNsYXNzIHlfdHtjb25zdHJ1Y3Rvcigpe3RoaXMuc2VsZWN0ZWQ9ITEsdGhpcy5vblNob3dTaW1pbGFyQW5ub3RhdGlvbnM9bmV3IEFiLHRoaXMuU29ydE9yZGVyPVZodCx0aGlzLndpZHRoPTEwLHRoaXMuY2hhcnRXaWR0aD0xMCx0aGlzLmNoYXJ0SGVpZ2h0PTEwLHRoaXMubWF4RG90UmFkaXVzPTEwLHRoaXMuY291bnREb3RPZmZzZXQ9NzAsdGhpcy5jb3VudFRleHRQYWRkaW5nPTIsdGhpcy5tYXJnaW49e3RvcDowLHJpZ2h0OjAsYm90dG9tOjAsbGVmdDoxMDB9LHRoaXMuc3Ryb2tlQ29sb3I9IiNmZmYiLHRoaXMudGV4dENsYXNzPSJkZWZhdWx0LXRleHQiLHRoaXMucnVucz1bXX1vblJlc2l6ZSh0KXt0aGlzLnJlZHJhdygpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuc3ZnPXI2KHRoaXMuYW5ub3RhdGlvbkNvbnRhaW5lci5uYXRpdmVFbGVtZW50KS5zZWxlY3QoInN2ZyIpLHRoaXMueFNjYWxlPVF0dCgpLnBhZGRpbmcoMCksdGhpcy55U2NhbGU9UXR0KCkucGFkZGluZygwKSx0aGlzLnNpemVTY2FsZT1wZXQoKS5kb21haW4oWzAsMV0pLHRoaXMuY291bnRTaXplU2NhbGU9cGV0KCkucmFuZ2UoWzIsdGhpcy5tYXhEb3RSYWRpdXNdKSx0aGlzLm1haW5Db250YWluZXI9dGhpcy5zdmcuYXBwZW5kKCJnIikuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7dGhpcy5tYXJnaW4ubGVmdH0sICR7dGhpcy5tYXJnaW4udG9wfSlgKSx0aGlzLmJhcnNHcm91cD10aGlzLm1haW5Db250YWluZXIuYXBwZW5kKCJnIiksdGhpcy5jb3VudERvdHNHcm91cD10aGlzLm1haW5Db250YWluZXIuYXBwZW5kKCJnIiksdGhpcy50ZXh0c0dyb3VwPXRoaXMubWFpbkNvbnRhaW5lci5hcHBlbmQoImciKSx0aGlzLmNvdW50VGV4dHNHcm91cD10aGlzLm1haW5Db250YWluZXIuYXBwZW5kKCJnIiksdGhpcy5ydW5IaW50R3JvdXA9dGhpcy5zdmcuYXBwZW5kKCJnIiksdGhpcy5yZWRyYXcoKX1uZ09uQ2hhbmdlcyh0KXt0aGlzLnN2ZyYmdGhpcy5yZWRyYXcoKX1yZWRyYXcoKXt0aGlzLnNlbGVjdGVkPXRoaXMuc2VsZWN0ZWRBbm5vdGF0aW9ucy5pbmNsdWRlcyh0aGlzLmFubm90YXRpb24pLHRoaXMudXBkYXRlRGltZW5zaW9ucygpLHRoaXMuc2V0VGV4dENsYXNzKCksdGhpcy51cGRhdGVBeGVzKCksdGhpcy5kcmF3KCl9dXBkYXRlRGltZW5zaW9ucygpe2NvbnN0IHQ9bmV3IFNldDt0aGlzLmRhdGEuZm9yRWFjaCgoZT0+e3QuYWRkKGUucnVuKX0pKSx0aGlzLnJ1bnM9Wy4uLnRdLHRoaXMuc3ZnLnN0eWxlKCJoZWlnaHQiLHRoaXMubnVtQWN0aXZlUnVucyp0aGlzLnJ1bkhlaWdodCsicHgiKSx0aGlzLmNoYXJ0SGVpZ2h0PXRoaXMucnVucy5sZW5ndGgqdGhpcy5ydW5IZWlnaHQtdGhpcy5tYXJnaW4udG9wLXRoaXMubWFyZ2luLmJvdHRvbSx0aGlzLndpZHRoPXRoaXMuYW5ub3RhdGlvbkNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRofHwxMCx0aGlzLmNoYXJ0V2lkdGg9dGhpcy53aWR0aC10aGlzLm1hcmdpbi5sZWZ0LXRoaXMubWFyZ2luLnJpZ2h0fXNldFRleHRDbGFzcygpe3RoaXMudGV4dENsYXNzPSJkZWZhdWx0LXRleHQiLHRoaXMuZmxhZ2dlZEFubm90YXRpb25zLmluY2x1ZGVzKHRoaXMuYW5ub3RhdGlvbik/dGhpcy50ZXh0Q2xhc3M9ImZsYWctdGV4dCI6dGhpcy5oaWRkZW5Bbm5vdGF0aW9ucy5pbmNsdWRlcyh0aGlzLmFubm90YXRpb24pJiYodGhpcy50ZXh0Q2xhc3M9ImhpZGRlbi10ZXh0Iil9dXBkYXRlQXhlcygpe3RoaXMueFNjYWxlLnJhbmdlUm91bmQoWzAsdGhpcy5jaGFydFdpZHRoLXRoaXMuY2hhcnRXaWR0aC90aGlzLmFjdGl2ZU1ldHJpY3MubGVuZ3RoXSkuZG9tYWluKHRoaXMuYWN0aXZlTWV0cmljcy5tYXAoKHQ9PlZidCh0KSkpKSx0aGlzLnlTY2FsZS5yYW5nZVJvdW5kKFswLHRoaXMuY2hhcnRIZWlnaHQtdGhpcy5ydW5IZWlnaHRdKS5kb21haW4odGhpcy5ydW5zKSx0aGlzLnNpemVTY2FsZS5yYW5nZShbMCx0aGlzLmNoYXJ0V2lkdGgvdGhpcy5hY3RpdmVNZXRyaWNzLmxlbmd0aF0pLHRoaXMuY291bnRTaXplU2NhbGUuZG9tYWluKFswLHRoaXMubWF4Q291bnRdKX1kcmF3KCl7dGhpcy5kcmF3UnVuSW5kaWNhdG9ycygpLHRoaXMuZHJhd1J1bkhpbnRUZXh0cygpLHRoaXMuZHJhd0JhcnMoKSx0aGlzLmRyYXdUZXh0cygpLHRoaXMuc2hvd0NvdW50cz8odGhpcy5kcmF3Q291bnREb3RzKCksdGhpcy5kcmF3Q291bnRUZXh0cygpKToodGhpcy5jb3VudERvdHNHcm91cC5zZWxlY3RBbGwoIi5jb3VudC1kb3QiKS5yZW1vdmUoKSx0aGlzLmNvdW50VGV4dHNHcm91cC5zZWxlY3RBbGwoIi5jb3VudC1iYWNrZ3JvdW5kLXRleHQiKS5yZW1vdmUoKSx0aGlzLmNvdW50VGV4dHNHcm91cC5zZWxlY3RBbGwoIi5jb3VudC10ZXh0IikucmVtb3ZlKCkpfWRyYXdSdW5JbmRpY2F0b3JzKCl7cjYodGhpcy5jbGlwUGF0aEVsZW1lbnQubmF0aXZlRWxlbWVudCkuc2VsZWN0KCJyZWN0IikuYXR0cigid2lkdGgiLHRoaXMubWFyZ2luLmxlZnQtMzApLmF0dHIoImhlaWdodCIsdGhpcy5jaGFydEhlaWdodCk7Y29uc3QgdD10aGlzLnJ1bkhpbnRHcm91cC5zZWxlY3RBbGwoIi5oaW50IikuZGF0YSh0aGlzLnJ1bnMpLGU9dC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiaGludCIpO2UuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCAwIEwgMTUgMCBMIDEwIDEwIEwgMTUgMjAgTCAwIDIwIFoiKSxlLm1lcmdlKHQpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7cmV0dXJuYHRyYW5zbGF0ZSgxMCwgJHt0aGlzLnlTY2FsZSh0KSs1fSlgfS5iaW5kKHRoaXMpKS5hdHRyKCJmaWxsIixmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jb2xvclNjYWxlKHQpfS5iaW5kKHRoaXMpKSx0LmV4aXQoKS5yZW1vdmUoKX1kcmF3UnVuSGludFRleHRzKCl7Y29uc3QgdD10aGlzLnJ1bkhpbnRHcm91cC5zZWxlY3RBbGwoIi5oaW50LXRleHQiKS5kYXRhKHRoaXMucnVucyk7dC5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLDI1KS5hdHRyKCJmb250LXNpemUiLCIxMHB4IikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigiY2xpcC1wYXRoIiwidXJsKCNoaW50LWNsaXApIikubWVyZ2UodCkuYXR0cigieSIsZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueVNjYWxlKHQpKzE1fS5iaW5kKHRoaXMpKS5hdHRyKCJjbGFzcyIsYGhpbnQtdGV4dCAke3RoaXMudGV4dENsYXNzfWApLnRleHQoKHQ9Pnt2YXIgZTtyZXR1cm4obnVsbD09PShlPXRoaXMucnVuSWRUb1J1bnMuZ2V0KHQpKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5uYW1lKXx8IiJ9KSksdC5leGl0KCkucmVtb3ZlKCl9ZHJhd0JhcnMoKXtjb25zdCB0PXRoaXMuYmFyc0dyb3VwLnNlbGVjdEFsbCgiLmJhciIpLmRhdGEodGhpcy5kYXRhKTt0LmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJiYXIiKS5hdHRyKCJoZWlnaHQiLDIwKS5tZXJnZSh0KS5hdHRyKCJmaWxsIiwodD0+bnVsbD09PXQublBNSVZhbHVlPyIiOnQublBNSVZhbHVlPj0wP3hvdCh0Lm5QTUlWYWx1ZSk6UG90KC0xKnQublBNSVZhbHVlKSkpLmF0dHIoIngiLGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnhTY2FsZSh0Lm1ldHJpYyl9LmJpbmQodGhpcykpLmF0dHIoInkiLGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnlTY2FsZSh0LnJ1bikrNX0uYmluZCh0aGlzKSkuYXR0cigid2lkdGgiLGZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT09dC5uUE1JVmFsdWU/MDp0aGlzLnNpemVTY2FsZShNYXRoLmFicyh0Lm5QTUlWYWx1ZSkpfS5iaW5kKHRoaXMpKSx0LmV4aXQoKS5yZW1vdmUoKX1kcmF3Q291bnREb3RzKCl7Y29uc3QgdD10aGlzLmNvdW50RG90c0dyb3VwLnNlbGVjdEFsbCgiLmNvdW50LWRvdCIpLmRhdGEodGhpcy5kYXRhKTt0LmVudGVyKCkuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjbGFzcyIsImNvdW50LWRvdCIpLmF0dHIoInN0cm9rZSIsImJsYWNrIikubWVyZ2UodCkuYXR0cigiZmlsbCIsZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PT10LmNvdW50VmFsdWU/IiI6T290KHQuY291bnRWYWx1ZS90aGlzLm1heENvdW50KX0uYmluZCh0aGlzKSkuYXR0cigiY3giLGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnhTY2FsZSh0Lm1ldHJpYykrdGhpcy5jb3VudERvdE9mZnNldH0uYmluZCh0aGlzKSkuYXR0cigiY3kiLGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnlTY2FsZSh0LnJ1bikrdGhpcy5ydW5IZWlnaHQvMn0uYmluZCh0aGlzKSkuYXR0cigiciIsZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PT10LmNvdW50VmFsdWU/MDp0aGlzLmNvdW50U2l6ZVNjYWxlKHQuY291bnRWYWx1ZSl9LmJpbmQodGhpcykpLHQuZXhpdCgpLnJlbW92ZSgpfWRyYXdUZXh0cygpe2NvbnN0IHQ9dGhpcy50ZXh0c0dyb3VwLnNlbGVjdEFsbCgiLm5wbWktYmFja2dyb3VuZC10ZXh0IikuZGF0YSh0aGlzLmRhdGEpO3QuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsIm5wbWktYmFja2dyb3VuZC10ZXh0IikuYXR0cigic3Ryb2tlLXdpZHRoIiwzKS5hdHRyKCJzdHJva2UtbGluZWpvaW4iLCJyb3VuZCIpLmF0dHIoInN0cm9rZSIsdGhpcy5zdHJva2VDb2xvcikuYXR0cigiZm9udC1zaXplIiwiMTNweCIpLmF0dHIoImFsaWdubWVudC1iYXNlbGluZSIsIm1pZGRsZSIpLm1lcmdlKHQpLmF0dHIoIngiLGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnhTY2FsZSh0Lm1ldHJpYykrNX0uYmluZCh0aGlzKSkuYXR0cigieSIsZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueVNjYWxlKHQucnVuKSt0aGlzLnJ1bkhlaWdodC8yfS5iaW5kKHRoaXMpKS50ZXh0KCh0PT5udWxsPT09dC5uUE1JVmFsdWU/Im51bGwiOk1hdGgucm91bmQoMWUzKih0Lm5QTUlWYWx1ZStOdW1iZXIuRVBTSUxPTikpLzFlMykpLHQuZXhpdCgpLnJlbW92ZSgpO2NvbnN0IGU9dGhpcy50ZXh0c0dyb3VwLnNlbGVjdEFsbCgiLm5wbWktdGV4dCIpLmRhdGEodGhpcy5kYXRhKTtlLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJucG1pLXRleHQiKS5hdHRyKCJmb250LXNpemUiLCIxM3B4IikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwibWlkZGxlIikubWVyZ2UoZSkuYXR0cigieCIsZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueFNjYWxlKHQubWV0cmljKSs1fS5iaW5kKHRoaXMpKS5hdHRyKCJ5IixmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy55U2NhbGUodC5ydW4pK3RoaXMucnVuSGVpZ2h0LzJ9LmJpbmQodGhpcykpLnRleHQoKHQ9Pm51bGw9PT10Lm5QTUlWYWx1ZT8ibnVsbCI6TWF0aC5yb3VuZCgxZTMqKHQublBNSVZhbHVlK051bWJlci5FUFNJTE9OKSkvMWUzKSksZS5leGl0KCkucmVtb3ZlKCl9ZHJhd0NvdW50VGV4dHMoKXtjb25zdCB0PXRoaXMuY291bnRUZXh0c0dyb3VwLnNlbGVjdEFsbCgiLmNvdW50LWJhY2tncm91bmQtdGV4dCIpLmRhdGEodGhpcy5kYXRhKTt0LmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJjb3VudC1iYWNrZ3JvdW5kLXRleHQiKS5hdHRyKCJzdHJva2Utd2lkdGgiLDMpLmF0dHIoInN0cm9rZS1saW5lam9pbiIsInJvdW5kIikuYXR0cigic3Ryb2tlIix0aGlzLnN0cm9rZUNvbG9yKS5hdHRyKCJmb250LXNpemUiLCIxMHB4IikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwibWlkZGxlIikubWVyZ2UodCkuYXR0cigieCIsZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueFNjYWxlKHQubWV0cmljKSt0aGlzLmNvdW50RG90T2Zmc2V0K3RoaXMuY291bnRUZXh0UGFkZGluZyt0aGlzLm1heERvdFJhZGl1c30uYmluZCh0aGlzKSkuYXR0cigieSIsZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueVNjYWxlKHQucnVuKSt0aGlzLnJ1bkhlaWdodC8yfS5iaW5kKHRoaXMpKS50ZXh0KCh0PT5udWxsPT09dC5jb3VudFZhbHVlPyIiOkludGwuTnVtYmVyRm9ybWF0KCkuZm9ybWF0KHQuY291bnRWYWx1ZSkpKSx0LmV4aXQoKS5yZW1vdmUoKTtjb25zdCBlPXRoaXMuY291bnRUZXh0c0dyb3VwLnNlbGVjdEFsbCgiLmNvdW50LXRleHQiKS5kYXRhKHRoaXMuZGF0YSk7ZS5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwiY291bnQtdGV4dCIpLmF0dHIoImZvbnQtc2l6ZSIsIjEwcHgiKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5tZXJnZShlKS5hdHRyKCJ4IixmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54U2NhbGUodC5tZXRyaWMpK3RoaXMuY291bnREb3RPZmZzZXQrdGhpcy5jb3VudFRleHRQYWRkaW5nK3RoaXMubWF4RG90UmFkaXVzfS5iaW5kKHRoaXMpKS5hdHRyKCJ5IixmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy55U2NhbGUodC5ydW4pK3RoaXMucnVuSGVpZ2h0LzJ9LmJpbmQodGhpcykpLnRleHQoKHQ9Pm51bGw9PT10LmNvdW50VmFsdWU/IiI6SW50bC5OdW1iZXJGb3JtYXQoKS5mb3JtYXQodC5jb3VudFZhbHVlKSkpLGUuZXhpdCgpLnJlbW92ZSgpfXNpbWlsYXJpdHlTb3J0KHQpe3RoaXMuaGFzRW1iZWRkaW5nJiYodC5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLm9uU2hvd1NpbWlsYXJBbm5vdGF0aW9ucy5lbWl0KCkpfX15X3QuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHlfdCl9LHlfdC7JtWNtcD1Vbyh7dHlwZTp5X3Qsc2VsZWN0b3JzOltbImFubm90YXRpb24tY29tcG9uZW50Il1dLHZpZXdRdWVyeTpmdW5jdGlvbiB0KGUsbil7aWYoMSZlJiYoV2IodV90LDMsY2gpLFdiKGZfdCwzLGNoKSksMiZlKXtsZXQgdDtVYih0PVliKCkpJiYobi5hbm5vdGF0aW9uQ29udGFpbmVyPXQuZmlyc3QpLFViKHQ9WWIoKSkmJihuLmNsaXBQYXRoRWxlbWVudD10LmZpcnN0KX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJk51KCJyZXNpemUiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub25SZXNpemUoKX0pLCExLHFsKSwyJmUmJmFmKCJzZWxlY3RlZC1yb3ciLG4uc2VsZWN0ZWQpfSxpbnB1dHM6e2RhdGE6ImRhdGEiLG1heENvdW50OiJtYXhDb3VudCIsc2VsZWN0ZWRBbm5vdGF0aW9uczoic2VsZWN0ZWRBbm5vdGF0aW9ucyIsZmxhZ2dlZEFubm90YXRpb25zOiJmbGFnZ2VkQW5ub3RhdGlvbnMiLGhpZGRlbkFubm90YXRpb25zOiJoaWRkZW5Bbm5vdGF0aW9ucyIsYWN0aXZlTWV0cmljczoiYWN0aXZlTWV0cmljcyIsbnVtQWN0aXZlUnVuczoibnVtQWN0aXZlUnVucyIsc2hvd0NvdW50czoic2hvd0NvdW50cyIsYW5ub3RhdGlvbjoiYW5ub3RhdGlvbiIscnVuSGVpZ2h0OiJydW5IZWlnaHQiLGhhc0VtYmVkZGluZzoiaGFzRW1iZWRkaW5nIixzb3J0OiJzb3J0IixzaWRlYmFyV2lkdGg6InNpZGViYXJXaWR0aCIsY29sb3JTY2FsZToiY29sb3JTY2FsZSIscnVuSWRUb1J1bnM6InJ1bklkVG9SdW5zIn0sb3V0cHV0czp7b25TaG93U2ltaWxhckFubm90YXRpb25zOiJvblNob3dTaW1pbGFyQW5ub3RhdGlvbnMifSxmZWF0dXJlczpbU2ldLGRlY2xzOjE0LHZhcnM6MTAsY29uc3RzOltbMSwiYW5ub3RhdGlvbi10aXRsZSJdLFsxLCJhbm5vdGF0aW9uLWNoZWNrYm94IiwzLCJjaGVja2VkIiwiY2xpY2siXSxbMSwiYW5ub3RhdGlvbi1idXR0b24iLDMsIm5nQ2xhc3MiLCJjbGljayJdLFsiY2xhc3MiLCJmbGFnZ2VkLWljb24iLCJzdmdJY29uIiwiZmxhZ18yNHB4Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImhpZGRlbi1pY29uIiwic3ZnSWNvbiIsInZpc2liaWxpdHlfb2ZmXzI0cHgiLDQsIm5nSWYiXSxbImNsYXNzIiwiYW5ub3RhdGlvbi1pY29uIiwzLCJzdmdJY29uIiwibmdDbGFzcyIsNCwibmdJZiJdLFsxLCJjaGFydC1kaXYiXSxbImNoYXJ0IiwiIl0sWzEsImNoYXJ0LXN2ZyJdLFsiaWQiLCJoaW50LWNsaXAiXSxbImhpbnRDbGlwIiwiIl0sWyJ4IiwiMCIsInkiLCIwIl0sWyJzdmdJY29uIiwiZmxhZ18yNHB4IiwxLCJmbGFnZ2VkLWljb24iXSxbInN2Z0ljb24iLCJ2aXNpYmlsaXR5X29mZl8yNHB4IiwxLCJoaWRkZW4taWNvbiJdLFsxLCJhbm5vdGF0aW9uLWljb24iLDMsInN2Z0ljb24iLCJuZ0NsYXNzIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihPdSgwLCJkaXYiLDApLE91KDEsIm1hdC1jaGVja2JveCIsMSksTnUoImNsaWNrIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpfSkpLFB1KCksT3UoMiwiYnV0dG9uIiwyKSxOdSgiY2xpY2siLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLnNpbWlsYXJpdHlTb3J0KGUpfSkpLE1mKDMpLFB1KCksV20oNCxnX3QsMSwwLCJtYXQtaWNvbiIsMyksV20oNSxoX3QsMSwwLCJtYXQtaWNvbiIsNCksV20oNixiX3QsMSwyLCJtYXQtaWNvbiIsNSksUHUoKSxPdSg3LCJkaXYiLDYsNyksSGEoKSxPdSg5LCJzdmciLDgpLE91KDEwLCJkZWZzIiksT3UoMTEsImNsaXBQYXRoIiw5LDEwKSx3dSgxMywicmVjdCIsMTEpLFB1KCksUHUoKSxQdSgpLFB1KCkpLDImZSYmKGFmKCJmbGFnZ2VkLWFubm90YXRpb24iLG4uZmxhZ2dlZEFubm90YXRpb25zLmluY2x1ZGVzKG4uYW5ub3RhdGlvbikpKCJoaWRkZW4tYW5ub3RhdGlvbiIsbi5oaWRkZW5Bbm5vdGF0aW9ucy5pbmNsdWRlcyhuLmFubm90YXRpb24pJiYhbi5mbGFnZ2VkQW5ub3RhdGlvbnMuaW5jbHVkZXMobi5hbm5vdGF0aW9uKSksSmMoMSksdnUoImNoZWNrZWQiLG4uc2VsZWN0ZWRBbm5vdGF0aW9ucy5pbmNsdWRlcyhuLmFubm90YXRpb24pKSxKYygxKSx2dSgibmdDbGFzcyIsbi5oYXNFbWJlZGRpbmc/ImNsaWNrYWJsZS1hbm5vdGF0aW9uIjoiIiksSmMoMSkseGYoIiAiLG4uYW5ub3RhdGlvbiwiICIpLEpjKDEpLHZ1KCJuZ0lmIixuLmZsYWdnZWRBbm5vdGF0aW9ucy5pbmNsdWRlcyhuLmFubm90YXRpb24pKSxKYygxKSx2dSgibmdJZiIsbi5oaWRkZW5Bbm5vdGF0aW9ucy5pbmNsdWRlcyhuLmFubm90YXRpb24pKSxKYygxKSx2dSgibmdJZiIsbi5hbm5vdGF0aW9uPT09bi5zb3J0Lm1ldHJpYykpfSxkaXJlY3RpdmVzOlt1WSx0dixhdixjR10sc3R5bGVzOlsnLm1hdC1iYWRnZS1jb250ZW50e2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1iYWRnZS1zbWFsbCAubWF0LWJhZGdlLWNvbnRlbnR7Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlIC5tYXQtYmFkZ2UtY29udGVudHtmb250LXNpemU6MjRweH0ubWF0LWgxLC5tYXQtaGVhZGxpbmUsLm1hdC10eXBvZ3JhcGh5IGgxe2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyLC5tYXQtdGl0bGUsLm1hdC10eXBvZ3JhcGh5IGgye2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgzLC5tYXQtc3ViaGVhZGluZy0yLC5tYXQtdHlwb2dyYXBoeSBoM3tmb250OjQwMCAxNnB4LzI4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNCwubWF0LXN1YmhlYWRpbmctMSwubWF0LXR5cG9ncmFwaHkgaDR7Zm9udDo0MDAgMTVweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDUsLm1hdC10eXBvZ3JhcGh5IGg1e2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2LC5tYXQtdHlwb2dyYXBoeSBoNntmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZywubWF0LWJvZHktMntmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHksLm1hdC1ib2R5LTEsLm1hdC10eXBvZ3JhcGh5e2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keSBwLC5tYXQtYm9keS0xIHAsLm1hdC10eXBvZ3JhcGh5IHB7bWFyZ2luOjAgMCAxMnB4fS5tYXQtc21hbGwsLm1hdC1jYXB0aW9ue2ZvbnQ6NDAwIDEycHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZGlzcGxheS00LC5tYXQtdHlwb2dyYXBoeSAubWF0LWRpc3BsYXktNHtmb250OjMwMCAxMTJweC8xMTJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDVlbTttYXJnaW46MCAwIDU2cHh9Lm1hdC1kaXNwbGF5LTMsLm1hdC10eXBvZ3JhcGh5IC5tYXQtZGlzcGxheS0ze2ZvbnQ6NDAwIDU2cHgvNTZweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDJlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTIsLm1hdC10eXBvZ3JhcGh5IC5tYXQtZGlzcGxheS0ye2ZvbnQ6NDAwIDQ1cHgvNDhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDA1ZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0xLC5tYXQtdHlwb2dyYXBoeSAubWF0LWRpc3BsYXktMXtmb250OjQwMCAzNHB4LzQwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDY0cHh9Lm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVye2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYnV0dG9uLC5tYXQtcmFpc2VkLWJ1dHRvbiwubWF0LWljb24tYnV0dG9uLC5tYXQtc3Ryb2tlZC1idXR0b24sLm1hdC1mbGF0LWJ1dHRvbiwubWF0LWZhYiwubWF0LW1pbmktZmFie2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xle2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmR7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZC10aXRsZXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlciAubWF0LWNhcmQtdGl0bGV7Zm9udC1zaXplOjIwcHh9Lm1hdC1jYXJkLXN1YnRpdGxlLC5tYXQtY2FyZC1jb250ZW50e2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2hlY2tib3h7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0IC5tYXQtY2hlY2tib3gtbGFiZWx7bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXB7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2hpcCAubWF0LWNoaXAtdHJhaWxpbmctaWNvbi5tYXQtaWNvbiwubWF0LWNoaXAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbntmb250LXNpemU6MThweH0ubWF0LXRhYmxle2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWhlYWRlci1jZWxse2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGwsLm1hdC1mb290ZXItY2VsbHtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFye2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhbGVuZGFyLWJvZHl7Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsLC5tYXQtY2FsZW5kYXItcGVyaW9kLWJ1dHRvbntmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXIgdGh7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxle2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnR7Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxke2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjEyNTtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZC13cmFwcGVye3BhZGRpbmctYm90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbiwubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbntmb250LXNpemU6MTUwJTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbi1idXR0b24sLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb24tYnV0dG9ue2hlaWdodDoxLjVlbTt3aWR0aDoxLjVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29uLC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29uLWJ1dHRvbiAubWF0LWljb257aGVpZ2h0OjEuMTI1ZW07bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLWluZml4e3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgdHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVye3RvcDotMC44NDM3NWVtO3BhZGRpbmctdG9wOi44NDM3NWVtfS5tYXQtZm9ybS1maWVsZC1sYWJlbHt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7Ym90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJ7Zm9udC1zaXplOjc1JTttYXJnaW4tdG9wOi42NjY2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNzkxNjY2NjY2N2VtKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJ7cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtaW5maXh7cGFkZGluZzouNDM3NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbDotd2Via2l0LWF1dG9maWxsKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcltsYWJlbF06bm90KDpsYWJlbC1zaG93bikrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIzZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RvcDoxLjI4MTI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7Ym90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVye21hcmdpbi10b3A6LjU0MTY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2NjY2NjY3ZW0pfUBtZWRpYSBwcmludHsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcjpmb2N1cysubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjJlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbDotd2Via2l0LWF1dG9maWxsKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMWVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMmVtKSBzY2FsZSgwLjc1KX19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtaW5maXh7cGFkZGluZzouMjVlbSAwIC43NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtbGFiZWx7dG9wOjEuMDkzNzVlbTttYXJnaW4tdG9wOi0wLjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtaW5maXh7cGFkZGluZzoxZW0gMCAxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0b3A6MS44NDM3NWVtO21hcmdpbi10b3A6LTAuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyLC5tYXQtZ3JpZC10aWxlLWZvb3Rlcntmb250LXNpemU6MTRweH0ubWF0LWdyaWQtdGlsZS1oZWFkZXIgLm1hdC1saW5lLC5tYXQtZ3JpZC10aWxlLWZvb3RlciAubWF0LWxpbmV7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtZ3JpZC10aWxlLWhlYWRlciAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMiksLm1hdC1ncmlkLXRpbGUtZm9vdGVyIC5tYXQtbGluZTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH1pbnB1dC5tYXQtaW5wdXQtZWxlbWVudHttYXJnaW4tdG9wOi0wLjA2MjVlbX0ubWF0LW1lbnUtaXRlbXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtcGFnaW5hdG9yLC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZSAubWF0LXNlbGVjdC10cmlnZ2Vye2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweH0ubWF0LXJhZGlvLWJ1dHRvbntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3R7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJ7aGVpZ2h0OjEuMTI1ZW19Lm1hdC1zbGlkZS10b2dnbGUtY29udGVudHtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dHtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci12ZXJ0aWNhbCwubWF0LXN0ZXBwZXItaG9yaXpvbnRhbHtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVse2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXN0ZXAtc3ViLWxhYmVsLWVycm9ye2ZvbnQtd2VpZ2h0Om5vcm1hbH0ubWF0LXN0ZXAtbGFiZWwtZXJyb3J7Zm9udC1zaXplOjE0cHh9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVke2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRhYi1ncm91cHtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWwsLm1hdC10YWItbGlua3tmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdG9vbGJhciwubWF0LXRvb2xiYXIgaDEsLm1hdC10b29sYmFyIGgyLC5tYXQtdG9vbGJhciBoMywubWF0LXRvb2xiYXIgaDQsLm1hdC10b29sYmFyIGg1LC5tYXQtdG9vbGJhciBoNntmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MH0ubWF0LXRvb2x0aXB7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB4O3BhZGRpbmctdG9wOjZweDtwYWRkaW5nLWJvdHRvbTo2cHh9Lm1hdC10b29sdGlwLWhhbmRzZXR7Zm9udC1zaXplOjE0cHg7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LWxpc3QtaXRlbXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LWl0ZW17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LWl0ZW0gLm1hdC1saW5le3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZSAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LW9wdGlvbntmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGluZXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2UgLm1hdC1zdWJoZWFkZXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWxpc3QtYmFzZVtkZW5zZV0gLm1hdC1saXN0LWl0ZW17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGluZXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGluZTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbntmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmV7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGluZTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV0gLm1hdC1zdWJoZWFkZXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE2cHh9Lm1hdC1vcHRncm91cC1sYWJlbHtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LXNpbXBsZS1zbmFja2Jhcntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9ue2xpbmUtaGVpZ2h0OjE7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo1MDB9Lm1hdC10cmVle2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRyZWUtbm9kZSwubWF0LW5lc3RlZC10cmVlLW5vZGV7Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4fS5tYXQtcmlwcGxle292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXJpcHBsZTpub3QoOmVtcHR5KXt0cmFuc2Zvcm06dHJhbnNsYXRlWigwKX0ubWF0LXJpcHBsZS5tYXQtcmlwcGxlLXVuYm91bmRlZHtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcmlwcGxlLWVsZW1lbnR7cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXJpcHBsZS1lbGVtZW50e2Rpc3BsYXk6bm9uZX0uY2RrLXZpc3VhbGx5LWhpZGRlbntib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lfS5jZGstb3ZlcmxheS1jb250YWluZXIsLmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVye3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7bGVmdDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmNkay1vdmVybGF5LWNvbnRhaW5lcntwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcjplbXB0eXtkaXNwbGF5Om5vbmV9LmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVye2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LXBhbmV7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9we3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO3otaW5kZXg6MTAwMDtwb2ludGVyLWV2ZW50czphdXRvOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDt0cmFuc2l0aW9uOm9wYWNpdHkgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSk7b3BhY2l0eTowfS5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5ne29wYWNpdHk6MX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5ne29wYWNpdHk6LjZ9LmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3B7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4zMil9LmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wLC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5ne29wYWNpdHk6MH0uY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveHtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2Nre3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHsvKiEqL31Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZHsvKiEqL30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkOm5vdCg6LXdlYmtpdC1hdXRvZmlsbCl7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCAwcyAxbXN9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXple3Jlc2l6ZTpub25lfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmd7cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveHtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDowICFpbXBvcnRhbnR9Lm1hdC1mb2N1cy1pbmRpY2F0b3J7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9ye3Bvc2l0aW9uOnJlbGF0aXZlfTpob3N0e3BhZGRpbmctdG9wOjVweH0uYW5ub3RhdGlvbi10aXRsZXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZvbnQtc2l6ZToxM3B4O2hlaWdodDoyMHB4O3BhZGRpbmc6MCAxMHB4O3VzZXItc2VsZWN0Om5vbmV9LnNlbGVjdGVkLXJvd3tiYWNrZ3JvdW5kLWNvbG9yOiNlMGUwZTA7ZGlzcGxheTpibG9ja30uZmxhZ2dlZC1hbm5vdGF0aW9ue2NvbG9yOiNmNTdjMDB9LmhpZGRlbi1hbm5vdGF0aW9ue2NvbG9yOiM3NTc1NzV9LmFubm90YXRpb24tY2hlY2tib3h7cGFkZGluZy1yaWdodDo1cHh9LmZsYWdnZWQtaWNvbnt0cmFuc2Zvcm06c2NhbGUoMC42KX0uaGlkZGVuLWljb257dHJhbnNmb3JtOnNjYWxlKDAuNil9LmFubm90YXRpb24taWNvbnt0cmFuc2Zvcm06c2NhbGUoMC42KX0uY2hhcnQtZGl2e2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWJ9LmNoYXJ0LXN2Z3t3aWR0aDoxMDAlO3VzZXItc2VsZWN0Om5vbmV9LmRlZmF1bHQtdGV4dHtmaWxsOiMwMDB9LmZsYWctdGV4dHtmaWxsOiNmNTdjMDB9LmhpZGRlbi10ZXh0e2ZpbGw6Izc1NzU3NX0uY2xpY2thYmxlLWFubm90YXRpb257Y3Vyc29yOnBvaW50ZXJ9YnV0dG9ue2FsbDp1bnNldH1cbiddLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoeV90LFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6ImFubm90YXRpb24tY29tcG9uZW50Iix0ZW1wbGF0ZVVybDoiLi9hbm5vdGF0aW9uX2NvbXBvbmVudC5uZy5odG1sIixzdHlsZVVybHM6WyIuL2Fubm90YXRpb25fY29tcG9uZW50LmNzcyJdLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2gsZW5jYXBzdWxhdGlvbjpQby5Ob25lfV19XSxudWxsLHtkYXRhOlt7dHlwZTp5X31dLG1heENvdW50Olt7dHlwZTp5X31dLHNlbGVjdGVkQW5ub3RhdGlvbnM6W3t0eXBlOnlffV0sZmxhZ2dlZEFubm90YXRpb25zOlt7dHlwZTp5X31dLGhpZGRlbkFubm90YXRpb25zOlt7dHlwZTp5X31dLGFjdGl2ZU1ldHJpY3M6W3t0eXBlOnlffV0sbnVtQWN0aXZlUnVuczpbe3R5cGU6eV99XSxzaG93Q291bnRzOlt7dHlwZTp5X31dLGFubm90YXRpb246W3t0eXBlOnlffV0scnVuSGVpZ2h0Olt7dHlwZTp5X31dLGhhc0VtYmVkZGluZzpbe3R5cGU6eV99XSxzb3J0Olt7dHlwZTp5X31dLHNpZGViYXJXaWR0aDpbe3R5cGU6eV99XSxjb2xvclNjYWxlOlt7dHlwZTp5X31dLHJ1bklkVG9SdW5zOlt7dHlwZTp5X31dLGFubm90YXRpb25Db250YWluZXI6W3t0eXBlOkZyLGFyZ3M6WyJjaGFydCIse3N0YXRpYzohMCxyZWFkOmNofV19XSxjbGlwUGF0aEVsZW1lbnQ6W3t0eXBlOkZyLGFyZ3M6WyJoaW50Q2xpcCIse3N0YXRpYzohMCxyZWFkOmNofV19XSxzZWxlY3RlZDpbe3R5cGU6Q18sYXJnczpbImNsYXNzLnNlbGVjdGVkLXJvdyJdfV0sb25SZXNpemU6W3t0eXBlOk1fLGFyZ3M6WyJ3aW5kb3c6cmVzaXplIl19XSxvblNob3dTaW1pbGFyQW5ub3RhdGlvbnM6W3t0eXBlOl9ffV19KTtjbGFzcyBfX3R7Y29uc3RydWN0b3IodCl7dGhpcy5zdG9yZT10LHRoaXMuc29ydCQ9dGhpcy5zdG9yZS5zZWxlY3QoZWJ0KSx0aGlzLmZsYWdnZWRBbm5vdGF0aW9ucyQ9dGhpcy5zdG9yZS5zZWxlY3QoWGh0KSx0aGlzLmhpZGRlbkFubm90YXRpb25zJD10aGlzLnN0b3JlLnNlbGVjdChLaHQpLHRoaXMuc2VsZWN0ZWRBbm5vdGF0aW9ucyQ9dGhpcy5zdG9yZS5zZWxlY3QoWmh0KSx0aGlzLnNob3dDb3VudHMkPXRoaXMuc3RvcmUuc2VsZWN0KGFidCksdGhpcy5zaWRlYmFyV2lkdGgkPXRoaXMuc3RvcmUuc2VsZWN0KGxidCksdGhpcy5ydW5Db2xvclNjYWxlJD10aGlzLnN0b3JlLnNlbGVjdChDTikucGlwZShodCgodD0+ZT0+e2lmKCF0Lmhhc093blByb3BlcnR5KGUpKXRocm93IG5ldyBFcnJvcihgW0NvbG9yIHNjYWxlXSB1bmtub3duIHJ1bklkOiAke2V9LmApO3JldHVybiB0W2VdfSkpKSx0aGlzLnJ1bklkVG9SdW5zJD10aGlzLnN0b3JlLnNlbGVjdChwTil9c2hvd1NpbWlsYXJBbm5vdGF0aW9ucygpe3RoaXMuc3RvcmUuZGlzcGF0Y2goa2J0KHthbm5vdGF0aW9uOnRoaXMuYW5ub3RhdGlvbn0pKX19ZnVuY3Rpb24gQ190KHQsZSl7aWYoMSZ0KXtjb25zdCB0PUV1KCk7T3UoMCwibnBtaS1hbm5vdGF0aW9uIiw1KSxOdSgiY2xpY2siLChmdW5jdGlvbiBuKG8pe3JhKHQpO2NvbnN0IGk9ZS4kaW1wbGljaXQ7cmV0dXJuIEx1KDIpLnJvd0NsaWNrZWQobyxpKX0pKSxQdSgpfWlmKDImdCl7Y29uc3QgdD1lLiRpbXBsaWNpdCxuPUx1KDIpO3Z1KCJkYXRhIixuLmFubm90YXRpb25zW3RdKSgiYWN0aXZlTWV0cmljcyIsbi5hY3RpdmVNZXRyaWNzKSgibnVtQWN0aXZlUnVucyIsbi5udW1BY3RpdmVSdW5zKSgibWF4Q291bnQiLG4ubWF4Q291bnQpKCJhbm5vdGF0aW9uIix0KSgicnVuSGVpZ2h0IixuLnJ1bkhlaWdodCkoImhhc0VtYmVkZGluZyIsbi5lbWJlZGRpbmdEYXRhJiZ2b2lkIDAhPT1uLmVtYmVkZGluZ0RhdGFbdF0pfX1mdW5jdGlvbiBNX3QodCxlKXtpZigxJnQmJihrdSgwKSx3dSgxLCJucG1pLWFubm90YXRpb25zLWxpc3QtbGVnZW5kIiksd3UoMiwibnBtaS1hbm5vdGF0aW9ucy1saXN0LWhlYWRlciIsMiksT3UoMywiY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0IiwzKSxXbSg0LENfdCwxLDcsIm5wbWktYW5ub3RhdGlvbiIsNCksUHUoKSxTdSgpKSwyJnQpe2NvbnN0IHQ9THUoKTtKYygyKSx2dSgiYW5ub3RhdGlvbnMiLHQuYW5ub3RhdGlvbnMpKCJudW1Bbm5vdGF0aW9ucyIsdC5udW1Bbm5vdGF0aW9ucykoImFjdGl2ZU1ldHJpY3MiLHQuYWN0aXZlTWV0cmljcyksSmMoMSksVXUoIml0ZW1TaXplIix0Lm51bUFjdGl2ZVJ1bnMqdC5ydW5IZWlnaHQrMjUpLEpjKDEpLHZ1KCJjZGtWaXJ0dWFsRm9yT2YiLHQuc29ydGVkQW5ub3RhdGlvbnMpfX1fX3QuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fF9fdCkoTXUoRWspKX0sX190Lsm1Y21wPVVvKHt0eXBlOl9fdCxzZWxlY3RvcnM6W1sibnBtaS1hbm5vdGF0aW9uIl1dLGlucHV0czp7ZGF0YToiZGF0YSIsbWF4Q291bnQ6Im1heENvdW50IixhY3RpdmVNZXRyaWNzOiJhY3RpdmVNZXRyaWNzIixudW1BY3RpdmVSdW5zOiJudW1BY3RpdmVSdW5zIixhbm5vdGF0aW9uOiJhbm5vdGF0aW9uIixydW5IZWlnaHQ6InJ1bkhlaWdodCIsaGFzRW1iZWRkaW5nOiJoYXNFbWJlZGRpbmcifSxkZWNsczo5LHZhcnM6MzEsY29uc3RzOltbMywiZGF0YSIsIm1heENvdW50IiwiYWN0aXZlTWV0cmljcyIsIm51bUFjdGl2ZVJ1bnMiLCJhbm5vdGF0aW9uIiwicnVuSGVpZ2h0IiwiaGFzRW1iZWRkaW5nIiwic29ydCIsInNlbGVjdGVkQW5ub3RhdGlvbnMiLCJmbGFnZ2VkQW5ub3RhdGlvbnMiLCJoaWRkZW5Bbm5vdGF0aW9ucyIsInNob3dDb3VudHMiLCJzaWRlYmFyV2lkdGgiLCJjb2xvclNjYWxlIiwicnVuSWRUb1J1bnMiLCJvblNob3dTaW1pbGFyQW5ub3RhdGlvbnMiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKE91KDAsImFubm90YXRpb24tY29tcG9uZW50IiwwKSxOdSgib25TaG93U2ltaWxhckFubm90YXRpb25zIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLnNob3dTaW1pbGFyQW5ub3RhdGlvbnMoKX0pKSxPYigxLCJhc3luYyIpLE9iKDIsImFzeW5jIiksT2IoMywiYXN5bmMiKSxPYig0LCJhc3luYyIpLE9iKDUsImFzeW5jIiksT2IoNiwiYXN5bmMiKSxPYig3LCJhc3luYyIpLE9iKDgsImFzeW5jIiksUHUoKSksMiZlJiZ2dSgiZGF0YSIsbi5kYXRhKSgibWF4Q291bnQiLG4ubWF4Q291bnQpKCJhY3RpdmVNZXRyaWNzIixuLmFjdGl2ZU1ldHJpY3MpKCJudW1BY3RpdmVSdW5zIixuLm51bUFjdGl2ZVJ1bnMpKCJhbm5vdGF0aW9uIixuLmFubm90YXRpb24pKCJydW5IZWlnaHQiLG4ucnVuSGVpZ2h0KSgiaGFzRW1iZWRkaW5nIixuLmhhc0VtYmVkZGluZykoInNvcnQiLFBiKDEsMTUsbi5zb3J0JCkpKCJzZWxlY3RlZEFubm90YXRpb25zIixQYigyLDE3LG4uc2VsZWN0ZWRBbm5vdGF0aW9ucyQpKSgiZmxhZ2dlZEFubm90YXRpb25zIixQYigzLDE5LG4uZmxhZ2dlZEFubm90YXRpb25zJCkpKCJoaWRkZW5Bbm5vdGF0aW9ucyIsUGIoNCwyMSxuLmhpZGRlbkFubm90YXRpb25zJCkpKCJzaG93Q291bnRzIixQYig1LDIzLG4uc2hvd0NvdW50cyQpKSgic2lkZWJhcldpZHRoIixQYig2LDI1LG4uc2lkZWJhcldpZHRoJCkpKCJjb2xvclNjYWxlIixQYig3LDI3LG4ucnVuQ29sb3JTY2FsZSQpKSgicnVuSWRUb1J1bnMiLFBiKDgsMjksbi5ydW5JZFRvUnVucyQpKX0sZGlyZWN0aXZlczpbeV90XSxwaXBlczpbTXZdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoX190LFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6Im5wbWktYW5ub3RhdGlvbiIsdGVtcGxhdGU6J1xuICAgIDxhbm5vdGF0aW9uLWNvbXBvbmVudFxuICAgICAgW2RhdGFdPSJkYXRhIlxuICAgICAgW21heENvdW50XT0ibWF4Q291bnQiXG4gICAgICBbYWN0aXZlTWV0cmljc109ImFjdGl2ZU1ldHJpY3MiXG4gICAgICBbbnVtQWN0aXZlUnVuc109Im51bUFjdGl2ZVJ1bnMiXG4gICAgICBbYW5ub3RhdGlvbl09ImFubm90YXRpb24iXG4gICAgICBbcnVuSGVpZ2h0XT0icnVuSGVpZ2h0IlxuICAgICAgW2hhc0VtYmVkZGluZ109Imhhc0VtYmVkZGluZyJcbiAgICAgIFtzb3J0XT0ic29ydCQgfCBhc3luYyJcbiAgICAgIFtzZWxlY3RlZEFubm90YXRpb25zXT0ic2VsZWN0ZWRBbm5vdGF0aW9ucyQgfCBhc3luYyJcbiAgICAgIFtmbGFnZ2VkQW5ub3RhdGlvbnNdPSJmbGFnZ2VkQW5ub3RhdGlvbnMkIHwgYXN5bmMiXG4gICAgICBbaGlkZGVuQW5ub3RhdGlvbnNdPSJoaWRkZW5Bbm5vdGF0aW9ucyQgfCBhc3luYyJcbiAgICAgIFtzaG93Q291bnRzXT0ic2hvd0NvdW50cyQgfCBhc3luYyJcbiAgICAgIFtzaWRlYmFyV2lkdGhdPSJzaWRlYmFyV2lkdGgkIHwgYXN5bmMiXG4gICAgICBbY29sb3JTY2FsZV09InJ1bkNvbG9yU2NhbGUkIHwgYXN5bmMiXG4gICAgICBbcnVuSWRUb1J1bnNdPSJydW5JZFRvUnVucyQgfCBhc3luYyJcbiAgICAgIChvblNob3dTaW1pbGFyQW5ub3RhdGlvbnMpPSJzaG93U2ltaWxhckFubm90YXRpb25zKCkiXG4gICAgPjwvYW5ub3RhdGlvbi1jb21wb25lbnQ+XG4gICcsY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkVrfV19KSx7ZGF0YTpbe3R5cGU6eV99XSxtYXhDb3VudDpbe3R5cGU6eV99XSxhY3RpdmVNZXRyaWNzOlt7dHlwZTp5X31dLG51bUFjdGl2ZVJ1bnM6W3t0eXBlOnlffV0sYW5ub3RhdGlvbjpbe3R5cGU6eV99XSxydW5IZWlnaHQ6W3t0eXBlOnlffV0saGFzRW1iZWRkaW5nOlt7dHlwZTp5X31dfSk7Y2xhc3Mgdl90e2NvbnN0cnVjdG9yKCl7dGhpcy5vblJvd0NsaWNrPW5ldyBBYix0aGlzLnJ1bkhlaWdodD0zMH1yb3dDbGlja2VkKHQsZSl7aWYodC5zaGlmdEtleSl7bGV0IHQ9dGhpcy5zb3J0ZWRBbm5vdGF0aW9ucy5pbmRleE9mKGUpO2lmKDA9PT10aGlzLnNlbGVjdGVkQW5ub3RhdGlvbnMubGVuZ3RoKXRoaXMub25Sb3dDbGljay5lbWl0KHRoaXMuc29ydGVkQW5ub3RhdGlvbnMuc2xpY2UoMCx0KzEpKTtlbHNle2NvbnN0IGU9dGhpcy5zb3J0ZWRBbm5vdGF0aW9ucy5pbmRleE9mKHRoaXMuc2VsZWN0ZWRBbm5vdGF0aW9uc1t0aGlzLnNlbGVjdGVkQW5ub3RhdGlvbnMubGVuZ3RoLTFdKTt0aGlzLm9uUm93Q2xpY2suZW1pdChlPHQ/dGhpcy5zb3J0ZWRBbm5vdGF0aW9ucy5zbGljZShlLHQrMSk6dGhpcy5zb3J0ZWRBbm5vdGF0aW9ucy5zbGljZSh0LGUrMSkpfX1lbHNlIHRoaXMub25Sb3dDbGljay5lbWl0KFtlXSl9fXZfdC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8dl90KX0sdl90Lsm1Y21wPVVvKHt0eXBlOnZfdCxzZWxlY3RvcnM6W1siYW5ub3RhdGlvbnMtbGlzdC1jb21wb25lbnQiXV0saW5wdXRzOnthbm5vdGF0aW9uczoiYW5ub3RhdGlvbnMiLGVtYmVkZGluZ0RhdGE6ImVtYmVkZGluZ0RhdGEiLGFubm90YXRpb25zRXhwYW5kZWQ6ImFubm90YXRpb25zRXhwYW5kZWQiLG51bUFubm90YXRpb25zOiJudW1Bbm5vdGF0aW9ucyIsYW5ub3RhdGlvblNvcnQ6ImFubm90YXRpb25Tb3J0IixhY3RpdmVNZXRyaWNzOiJhY3RpdmVNZXRyaWNzIixudW1BY3RpdmVSdW5zOiJudW1BY3RpdmVSdW5zIixzb3J0ZWRBbm5vdGF0aW9uczoic29ydGVkQW5ub3RhdGlvbnMiLHNlbGVjdGVkQW5ub3RhdGlvbnM6InNlbGVjdGVkQW5ub3RhdGlvbnMiLG1heENvdW50OiJtYXhDb3VudCJ9LG91dHB1dHM6e29uUm93Q2xpY2s6Im9uUm93Q2xpY2sifSxkZWNsczoyLHZhcnM6Myxjb25zdHM6W1szLCJudW1Bbm5vdGF0aW9ucyIsImV4cGFuZGVkIl0sWzQsIm5nSWYiXSxbMywiYW5ub3RhdGlvbnMiLCJudW1Bbm5vdGF0aW9ucyIsImFjdGl2ZU1ldHJpY3MiXSxbIm1pbkJ1ZmZlclB4IiwiMzAwIiwibWF4QnVmZmVyUHgiLCI2MDAiLDEsImFubm90YXRpb24tcm93cyIsMywiaXRlbVNpemUiXSxbMywiZGF0YSIsImFjdGl2ZU1ldHJpY3MiLCJudW1BY3RpdmVSdW5zIiwibWF4Q291bnQiLCJhbm5vdGF0aW9uIiwicnVuSGVpZ2h0IiwiaGFzRW1iZWRkaW5nIiwiY2xpY2siLDQsImNka1ZpcnR1YWxGb3IiLCJjZGtWaXJ0dWFsRm9yT2YiXSxbMywiZGF0YSIsImFjdGl2ZU1ldHJpY3MiLCJudW1BY3RpdmVSdW5zIiwibWF4Q291bnQiLCJhbm5vdGF0aW9uIiwicnVuSGVpZ2h0IiwiaGFzRW1iZWRkaW5nIiwiY2xpY2siXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKHd1KDAsIm5wbWktYW5ub3RhdGlvbnMtbGlzdC10b29sYmFyIiwwKSxXbSgxLE1fdCw1LDUsIm5nLWNvbnRhaW5lciIsMSkpLDImZSYmKHZ1KCJudW1Bbm5vdGF0aW9ucyIsbi5udW1Bbm5vdGF0aW9ucykoImV4cGFuZGVkIixuLmFubm90YXRpb25zRXhwYW5kZWQpLEpjKDEpLHZ1KCJuZ0lmIixuLmFubm90YXRpb25zRXhwYW5kZWQpKX0sZGlyZWN0aXZlczpbYV90LGF2LGxfdCxtX3QsdEYsWEgsbkYsX190XSxzdHlsZXM6WycubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1iYWRnZS1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo5cHh9Lm1hdC1iYWRnZS1sYXJnZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4fS5tYXQtaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWhlYWRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAyNHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE1cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjgzKS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1oNltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC42NykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtYm9keS1zdHJvbmdbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MCAwIDEycHh9Lm1hdC1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FwdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTJweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6MzAwIDExMnB4LzExMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wNWVtO21hcmdpbjowIDAgNTZweH0ubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNTZweC81NnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMmVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNDVweC80OHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMDVlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDM0cHgvNDBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1yYWlzZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3Ryb2tlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZsYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mYWJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW1pbmktZmFiW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtYnV0dG9uLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FyZC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjBweH0ubWF0LWNhcmQtc3VidGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hlY2tib3gtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC10cmFpbGluZy1pY29uLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC1yZW1vdmUubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxOHB4fS5tYXQtdGFibGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWhlYWRlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb290ZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jYWxlbmRhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FsZW5kYXItYm9keVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYWxlbmRhci1wZXJpb2QtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWRpYWxvZy10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTI1O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTUwJTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjVlbTt3aWR0aDoxLjVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW07bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41ZW0gMDtib3JkZXItdG9wOi44NDM3NWVtIHNvbGlkIHRyYW5zcGFyZW50fS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3RvcDotMC44NDM3NWVtO3BhZGRpbmctdG9wOi44NDM3NWVtfS5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjc1JTttYXJnaW4tdG9wOi42NjY2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNzkxNjY2NjY2N2VtKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAycHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyM2VtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzUzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi41NDE2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNjY2NjY2NjY2N2VtKX1AbWVkaWEgcHJpbnR7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIyZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIxZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMmVtKSBzY2FsZSgwLjc1KX19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjI1ZW0gMCAuNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4wOTM3NWVtO21hcmdpbi10b3A6LTAuNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MWVtIDAgMWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjg0Mzc1ZW07bWFyZ2luLXRvcDotMC4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH1pbnB1dC5tYXQtaW5wdXQtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDotMC4wNjI1ZW19Lm1hdC1tZW51LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1wYWdpbmF0b3JbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXBhZ2luYXRvci1wYWdlLXNpemVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3RbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXN0ZXBwZXItdmVydGljYWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc3RlcC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0Om5vcm1hbH0ubWF0LXN0ZXAtbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRhYi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjB9Lm1hdC10b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTZweH0ubWF0LW9wdGdyb3VwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LXNpbXBsZS1zbmFja2Jhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbltfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRyZWVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbmVzdGVkLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4fS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVdOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtcmlwcGxlLm1hdC1yaXBwbGUtdW5ib3VuZGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6NTAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7dHJhbnNmb3JtOnNjYWxlKDApfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpub25lfS5jZGstdmlzdWFsbHktaGlkZGVuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7bGVmdDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmVtcHR5e2Rpc3BsYXk6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LXBhbmVbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOmF1dG87Ym94LXNpemluZzpib3JkZXItYm94O3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7bWF4LXdpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlfS5jZGstb3ZlcmxheS1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKTtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5Oi42fS5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjMyKX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTowfS5jZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO292ZXJmbG93LXk6c2Nyb2xsfUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnR7fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5ke30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxse2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCAwcyAxbXN9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06bm90KDotd2Via2l0LWF1dG9maWxsKXthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIDBzIDFtc310ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemVbX25nY29udGVudC0lQ09NUCVde3Jlc2l6ZTpub25lfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmdbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OmF1dG8gIWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW4gIWltcG9ydGFudH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nLWZpcmVmb3hbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OjAgIWltcG9ydGFudH0ubWF0LWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX1bX25naG9zdC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNlYmViZWI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtoZWlnaHQ6Y2FsYygxMDAlIC0gMnB4KTt3aWR0aDpjYWxjKDEwMCUgLSAycHgpfS5hbm5vdGF0aW9uLXJvd3NbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleDoxIDE7b3ZlcmZsb3cteTphdXRvfSddLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYih2X3QsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoiYW5ub3RhdGlvbnMtbGlzdC1jb21wb25lbnQiLHRlbXBsYXRlVXJsOiIuL2Fubm90YXRpb25zX2xpc3RfY29tcG9uZW50Lm5nLmh0bWwiLHN0eWxlVXJsczpbIi4vYW5ub3RhdGlvbnNfbGlzdF9jb21wb25lbnQuY3NzIl0sY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sbnVsbCx7YW5ub3RhdGlvbnM6W3t0eXBlOnlffV0sZW1iZWRkaW5nRGF0YTpbe3R5cGU6eV99XSxhbm5vdGF0aW9uc0V4cGFuZGVkOlt7dHlwZTp5X31dLG51bUFubm90YXRpb25zOlt7dHlwZTp5X31dLGFubm90YXRpb25Tb3J0Olt7dHlwZTp5X31dLGFjdGl2ZU1ldHJpY3M6W3t0eXBlOnlffV0sbnVtQWN0aXZlUnVuczpbe3R5cGU6eV99XSxzb3J0ZWRBbm5vdGF0aW9uczpbe3R5cGU6eV99XSxzZWxlY3RlZEFubm90YXRpb25zOlt7dHlwZTp5X31dLG1heENvdW50Olt7dHlwZTp5X31dLG9uUm93Q2xpY2s6W3t0eXBlOl9ffV19KTtjbGFzcyB4X3R7Y29uc3RydWN0b3IodCl7dGhpcy5zdG9yZT10LHRoaXMuYW5ub3RhdGlvbnNFeHBhbmRlZCQ9dGhpcy5zdG9yZS5waXBlKFJrKG9idCkpLHRoaXMuYWN0aXZlUnVucyQ9dGhpcy5zdG9yZS5waXBlKFJrKHZOKSkucGlwZShodCgodD0+dD9BcnJheS5mcm9tKHQuZW50cmllcygpKS5maWx0ZXIoKHQ9PnRbMV0pKS5tYXAoKHQ9PnRbMF0pKTpbXSkpKSx0aGlzLmVtYmVkZGluZ0RhdGEkPXRoaXMuc3RvcmUucGlwZShSayhxaHQpKSx0aGlzLm51bUFjdGl2ZVJ1bnMkPXRoaXMuYWN0aXZlUnVucyQucGlwZShodCgodD0+dC5sZW5ndGgpKSksdGhpcy5hY3RpdmVNZXRyaWNzJD1EdChbdGhpcy5zdG9yZS5zZWxlY3QoWWh0KSx0aGlzLmFjdGl2ZVJ1bnMkLHRoaXMuc3RvcmUuc2VsZWN0KHRidCldKS5waXBlKGh0KCgoW3QsZSxuXSk9PntsZXQgbz1bXTtmb3IoY29uc3QgbiBvZiBlKXRbbl0mJihvPW8uY29uY2F0KHRbbl0uZmlsdGVyKCh0PT5CYnQodCkpKSkpO3JldHVybiBvPVsuLi5uZXcgU2V0KFsuLi5PYmplY3Qua2V5cyhuKSwuLi5vXSldLG99KSkpLHRoaXMudmlzaWJsZUFubm90YXRpb25zJD1EdChbdGhpcy5zdG9yZS5zZWxlY3QoR2h0KSx0aGlzLnN0b3JlLnNlbGVjdChLaHQpLHRoaXMuc3RvcmUuc2VsZWN0KHJidCldKS5waXBlKGh0KCgoW3QsZSxuXSk9PkR5dCh0LGUsbikpKSksdGhpcy5maWx0ZXJlZEFubm90YXRpb25zJD1EdChbdGhpcy52aXNpYmxlQW5ub3RhdGlvbnMkLHRoaXMuc3RvcmUuc2VsZWN0KCRodCksdGhpcy5zdG9yZS5zZWxlY3QodGJ0KSx0aGlzLmFjdGl2ZVJ1bnMkLHRoaXMuYWN0aXZlTWV0cmljcyQsdGhpcy5zdG9yZS5zZWxlY3QoSmh0KV0pLnBpcGUoaHQoKChbdCxlLG4sbyxpLGFdKT0+KGZ1bmN0aW9uIHIodCxlLG4sbyxpLGEpe2NvbnN0IHI9e30scz1uZXcgU2V0KGUpLGw9bmV3IFNldChpLm1hcCgodD0+VmJ0KHQpKSkpLGM9bmV3IFJlZ0V4cChhLCJpIik7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHQpLmZvckVhY2goKHQ9PntpZighYy50ZXN0KHRbMF0pKXJldHVybjtsZXQgZT10WzFdO2U9ZS5maWx0ZXIoKHQ9PnMuaGFzKHQucnVuKSYmbC5oYXModC5tZXRyaWMpKSksKGZ1bmN0aW9uIGkodCxlLG4pe3JldHVybiB0LmV2ZXJ5KCh0PT57aWYodC5raW5kPT09TGh0Lk9QRVJBVE9SKXJldHVybiEwO2NvbnN0IG89ZVt0Lm1ldHJpY107cmV0dXJuIHZvaWQgMD09PW98fG4uc29tZSgoZT0+ZS5tZXRyaWM9PT1WYnQodC5tZXRyaWMpJiYobnVsbD09PWUublBNSVZhbHVlP28uaW5jbHVkZU5hTjplLm5QTUlWYWx1ZTw9by5tYXgmJmUublBNSVZhbHVlPj1vLm1pbikpKX0pKX0pKG4sbyxlKSYmMCE9PWUubGVuZ3RoJiYoclt0WzBdXT1lKX0pKSxyfSkodCxvLGUsbixpLGEpKSkpLnBpcGUob24oKSksdGhpcy5udW1Bbm5vdGF0aW9ucyQ9dGhpcy5maWx0ZXJlZEFubm90YXRpb25zJC5waXBlKGh0KCh0PT5PYmplY3Qua2V5cyh0KS5sZW5ndGgpKSksdGhpcy5zb3J0ZWRBbm5vdGF0aW9ucyQ9RHQoW3RoaXMuZmlsdGVyZWRBbm5vdGF0aW9ucyQsdGhpcy5zdG9yZS5waXBlKFJrKGVidCkpLHRoaXMuZW1iZWRkaW5nRGF0YSRdKS5waXBlKGh0KCgoW3QsZSxuXSk9PihmdW5jdGlvbiBvKHQsZSxuKXtjb25zdCBvPU9iamVjdC5rZXlzKHQpLGk9ZS5vcmRlcj09PVZodC5ESVNTSU1JTEFSfHxlLm9yZGVyPT09Vmh0LlNJTUlMQVI7cmV0dXJuIiI9PT1lLm1ldHJpY3x8KHZvaWQgMD09PW58fHZvaWQgMD09PW4ucG9pbnRzW2UubWV0cmljXSkmJmk/bzooZnVuY3Rpb24gcyh0LGUsbil7cmV0dXJuIHQuc29ydChuPyh0LG4pPT5lW3RdLWVbbl06KHQsbik9PmVbbl0tZVt0XSl9KShvLGk/KGZ1bmN0aW9uIGEodCxlLG4pe2NvbnN0IG89e307bGV0IGk9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLGE9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO24ub3JkZXI9PT1WaHQuU0lNSUxBUiYmKGk9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLGE9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKTtmb3IoY29uc3QgciBvZiB0KW9bcl09cj09PW4ubWV0cmljP2k6dm9pZCAwPT09ZS5wb2ludHNbcl0/YTplLnBvaW50c1tyXS52ZWN0b3I/SHl0KGUucG9pbnRzW24ubWV0cmljXS52ZWN0b3IsZS5wb2ludHNbcl0udmVjdG9yLGEpOmE7cmV0dXJuIG99KShvLG4sZSk6KGZ1bmN0aW9uIHIodCxlLG4pe2NvbnN0IG89VmJ0KG4ubWV0cmljKSxpPXt9O2lmKG4ub3JkZXI9PT1WaHQuREVTQ0VORElORylmb3IoY29uc3QgbiBvZiB0KWlbbl09TWF0aC5tYXgoLi4uZVtuXS5maWx0ZXIoKHQ9PnQubWV0cmljPT09bykpLm1hcCgodD0+bnVsbD09PXQublBNSVZhbHVlPy0xLzA6dC5uUE1JVmFsdWUpKSk7ZWxzZSBmb3IoY29uc3QgbiBvZiB0KWlbbl09TWF0aC5taW4oLi4uZVtuXS5maWx0ZXIoKHQ9PnQubWV0cmljPT09bykpLm1hcCgodD0+bnVsbD09PXQublBNSVZhbHVlPzEvMDp0Lm5QTUlWYWx1ZSkpKTtyZXR1cm4gaX0pKG8sdCxlKSxlLm9yZGVyPT09Vmh0LkFTQ0VORE5HfHxlLm9yZGVyPT09Vmh0LlNJTUlMQVIpfSkodCxlLG4pKSkpLHRoaXMuc2VsZWN0ZWRBbm5vdGF0aW9ucyQ9dGhpcy5zdG9yZS5waXBlKFJrKFpodCkpLHRoaXMubWF4Q291bnQkPXRoaXMuZmlsdGVyZWRBbm5vdGF0aW9ucyQucGlwZShodCgodD0+e2xldCBlPTA7cmV0dXJuIE9iamVjdC52YWx1ZXModCkuZm9yRWFjaCgodD0+e3QuZm9yRWFjaCgodD0+e3QuY291bnRWYWx1ZSYmKGU9TWF0aC5tYXgoZSx0LmNvdW50VmFsdWUpKX0pKX0pKSxlfSkpKX1yb3dDbGlja2VkKHQpe3RoaXMuc3RvcmUuZGlzcGF0Y2goaGJ0KHthbm5vdGF0aW9uczp0fSkpfX14X3QuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHhfdCkoTXUoRWspKX0seF90Lsm1Y21wPVVvKHt0eXBlOnhfdCxzZWxlY3RvcnM6W1sibnBtaS1hbm5vdGF0aW9ucy1saXN0Il1dLGRlY2xzOjEwLHZhcnM6MjcsY29uc3RzOltbMywiYW5ub3RhdGlvbnMiLCJlbWJlZGRpbmdEYXRhIiwiYW5ub3RhdGlvbnNFeHBhbmRlZCIsIm51bUFubm90YXRpb25zIiwiYWN0aXZlTWV0cmljcyIsIm51bUFjdGl2ZVJ1bnMiLCJzb3J0ZWRBbm5vdGF0aW9ucyIsInNlbGVjdGVkQW5ub3RhdGlvbnMiLCJtYXhDb3VudCIsIm9uUm93Q2xpY2siXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKE91KDAsImFubm90YXRpb25zLWxpc3QtY29tcG9uZW50IiwwKSxOdSgib25Sb3dDbGljayIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ucm93Q2xpY2tlZChlKX0pKSxPYigxLCJhc3luYyIpLE9iKDIsImFzeW5jIiksT2IoMywiYXN5bmMiKSxPYig0LCJhc3luYyIpLE9iKDUsImFzeW5jIiksT2IoNiwiYXN5bmMiKSxPYig3LCJhc3luYyIpLE9iKDgsImFzeW5jIiksT2IoOSwiYXN5bmMiKSxQdSgpKSwyJmUmJnZ1KCJhbm5vdGF0aW9ucyIsUGIoMSw5LG4uZmlsdGVyZWRBbm5vdGF0aW9ucyQpKSgiZW1iZWRkaW5nRGF0YSIsUGIoMiwxMSxuLmVtYmVkZGluZ0RhdGEkKSkoImFubm90YXRpb25zRXhwYW5kZWQiLFBiKDMsMTMsbi5hbm5vdGF0aW9uc0V4cGFuZGVkJCkpKCJudW1Bbm5vdGF0aW9ucyIsUGIoNCwxNSxuLm51bUFubm90YXRpb25zJCkpKCJhY3RpdmVNZXRyaWNzIixQYig1LDE3LG4uYWN0aXZlTWV0cmljcyQpKSgibnVtQWN0aXZlUnVucyIsUGIoNiwxOSxuLm51bUFjdGl2ZVJ1bnMkKSkoInNvcnRlZEFubm90YXRpb25zIixQYig3LDIxLG4uc29ydGVkQW5ub3RhdGlvbnMkKSkoInNlbGVjdGVkQW5ub3RhdGlvbnMiLFBiKDgsMjMsbi5zZWxlY3RlZEFubm90YXRpb25zJCkpKCJtYXhDb3VudCIsUGIoOSwyNSxuLm1heENvdW50JCkpfSxkaXJlY3RpdmVzOlt2X3RdLHBpcGVzOltNdl0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYih4X3QsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoibnBtaS1hbm5vdGF0aW9ucy1saXN0Iix0ZW1wbGF0ZTonXG4gICAgPGFubm90YXRpb25zLWxpc3QtY29tcG9uZW50XG4gICAgICBbYW5ub3RhdGlvbnNdPSJmaWx0ZXJlZEFubm90YXRpb25zJCB8IGFzeW5jIlxuICAgICAgW2VtYmVkZGluZ0RhdGFdPSJlbWJlZGRpbmdEYXRhJCB8IGFzeW5jIlxuICAgICAgW2Fubm90YXRpb25zRXhwYW5kZWRdPSJhbm5vdGF0aW9uc0V4cGFuZGVkJCB8IGFzeW5jIlxuICAgICAgW251bUFubm90YXRpb25zXT0ibnVtQW5ub3RhdGlvbnMkIHwgYXN5bmMiXG4gICAgICBbYWN0aXZlTWV0cmljc109ImFjdGl2ZU1ldHJpY3MkIHwgYXN5bmMiXG4gICAgICBbbnVtQWN0aXZlUnVuc109Im51bUFjdGl2ZVJ1bnMkIHwgYXN5bmMiXG4gICAgICBbc29ydGVkQW5ub3RhdGlvbnNdPSJzb3J0ZWRBbm5vdGF0aW9ucyQgfCBhc3luYyJcbiAgICAgIFtzZWxlY3RlZEFubm90YXRpb25zXT0ic2VsZWN0ZWRBbm5vdGF0aW9ucyQgfCBhc3luYyJcbiAgICAgIFttYXhDb3VudF09Im1heENvdW50JCB8IGFzeW5jIlxuICAgICAgKG9uUm93Q2xpY2spPSJyb3dDbGlja2VkKCRldmVudCkiXG4gICAgPjwvYW5ub3RhdGlvbnMtbGlzdC1jb21wb25lbnQ+XG4gICcsY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkVrfV19KSxudWxsKTtjb25zdCBPX3Q9WyJjaGFydCJdO2NsYXNzIFBfdHtjb25zdHJ1Y3Rvcigpe3RoaXMud2lkdGg9MCx0aGlzLmNoYXJ0V2lkdGg9MCx0aGlzLmhlaWdodD0zMDAsdGhpcy5tYXJnaW49e3RvcDoyMCxyaWdodDo0MCxib3R0b206MjAsbGVmdDo0MH0sdGhpcy5jaGFydEhlaWdodD10aGlzLmhlaWdodC10aGlzLm1hcmdpbi50b3AtdGhpcy5tYXJnaW4uYm90dG9tfW9uUmVzaXplKHQpe3RoaXMucmVkcmF3KCl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5zdmc9cjYodGhpcy5zdmdFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpLHRoaXMubWFpbkNvbnRhaW5lcj10aGlzLnN2Zy5hcHBlbmQoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHt0aGlzLm1hcmdpbi5sZWZ0fSwgJHt0aGlzLm1hcmdpbi50b3B9KWApLHRoaXMuY29vcmRpbmF0ZXNHcm91cD10aGlzLm1haW5Db250YWluZXIuYXBwZW5kKCJnIiksdGhpcy5sYWJlbHNHcm91cD10aGlzLm1haW5Db250YWluZXIuYXBwZW5kKCJnIiksdGhpcy5heGlzR3JvdXA9dGhpcy5tYWluQ29udGFpbmVyLmFwcGVuZCgiZyIpLHRoaXMueFNjYWxlPVF0dCgpLnBhZGRpbmcoLjEpLHRoaXMueVNjYWxlPXBldCgpLnJhbmdlKFt0aGlzLmNoYXJ0SGVpZ2h0LDBdKSx0aGlzLnlBeGlzPVU1KHRoaXMueVNjYWxlKSx0aGlzLnJlZHJhdygpfW5nT25DaGFuZ2VzKHQpe3RoaXMuc3ZnJiZ0aGlzLnJlZHJhdygpfXJlZHJhdygpe3RoaXMudXBkYXRlRGltZW5zaW9ucygpLHRoaXMudXBkYXRlQXhlcygpLHRoaXMuZHJhdygpfXVwZGF0ZURpbWVuc2lvbnMoKXt0aGlzLndpZHRoPXRoaXMuc3ZnRWxlbWVudC5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRofHwxMCx0aGlzLmNoYXJ0V2lkdGg9dGhpcy53aWR0aC10aGlzLm1hcmdpbi5sZWZ0LXRoaXMubWFyZ2luLnJpZ2h0fXVwZGF0ZUF4ZXMoKXt0aGlzLnhTY2FsZS5yYW5nZVJvdW5kKFswLHRoaXMuY2hhcnRXaWR0aF0pLmRvbWFpbih0aGlzLmFjdGl2ZU1ldHJpY3MpLHRoaXMueVNjYWxlLmRvbWFpbihbdGhpcy5jb29yZGluYXRlRGF0YS5leHRyZW1lcy5taW4sdGhpcy5jb29yZGluYXRlRGF0YS5leHRyZW1lcy5tYXhdKX1kcmF3KCl7dGhpcy5kcmF3QXhlcygpLHRoaXMuZHJhd0F4aXNMYWJlbHMoKSx0aGlzLmRyYXdDb29yZGluYXRlcygpLHRoaXMuZHJhd0xhYmVscygpfWRyYXdBeGVzKCl7Y29uc3QgdD10aGlzLmF4aXNHcm91cC5zZWxlY3RBbGwoIi5heGlzLXkiKS5kYXRhKHRoaXMuYWN0aXZlTWV0cmljcyk7dC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiYXhpcy15IikubWVyZ2UodCkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih0KXtyZXR1cm5gdHJhbnNsYXRlKCR7dGhpcy54U2NhbGUodCl9LCAwKWB9LmJpbmQodGhpcykpLmNhbGwodGhpcy55QXhpcyksdC5leGl0KCkucmVtb3ZlKCl9ZHJhd0F4aXNMYWJlbHMoKXtjb25zdCB0PXRoaXMuYXhpc0dyb3VwLnNlbGVjdEFsbCgiLmF4aXMtYmctdGV4dCIpLmRhdGEodGhpcy5hY3RpdmVNZXRyaWNzKTt0LmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJheGlzLWJnLXRleHQiKS5hdHRyKCJmb250LXNpemUiLCIxM3B4IikuYXR0cigic3Ryb2tlLXdpZHRoIiwyKS5hdHRyKCJzdHJva2UtbGluZWpvaW4iLCJyb3VuZCIpLmF0dHIoInN0cm9rZSIsIndoaXRlIikubWVyZ2UodCkudGV4dCgodD0+dCkpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7cmV0dXJuYHRyYW5zbGF0ZSgke3RoaXMueFNjYWxlKHQpLTV9LCAke3RoaXMueVNjYWxlKHRoaXMuY29vcmRpbmF0ZURhdGEuZXh0cmVtZXMubWluKX0pIHJvdGF0ZSgtOTApYH0uYmluZCh0aGlzKSksdC5leGl0KCkucmVtb3ZlKCk7Y29uc3QgZT10aGlzLmF4aXNHcm91cC5zZWxlY3RBbGwoIi5heGlzLXRleHQiKS5kYXRhKHRoaXMuYWN0aXZlTWV0cmljcyk7ZS5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmF0dHIoImZvbnQtc2l6ZSIsIjEzcHgiKS5hdHRyKCJjbGFzcyIsImF4aXMtdGV4dCIpLm1lcmdlKGUpLnRleHQoKHQ9PnQpKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQpe3JldHVybmB0cmFuc2xhdGUoJHt0aGlzLnhTY2FsZSh0KS01fSwgJHt0aGlzLnlTY2FsZSh0aGlzLmNvb3JkaW5hdGVEYXRhLmV4dHJlbWVzLm1pbil9KSByb3RhdGUoLTkwKWB9LmJpbmQodGhpcykpLGUuZXhpdCgpLnJlbW92ZSgpfWRyYXdDb29yZGluYXRlcygpe2NvbnN0IHQ9dGhpcy5jb29yZGluYXRlc0dyb3VwLnNlbGVjdEFsbCgiLmNvb3JkIikuZGF0YSh0aGlzLmNvb3JkaW5hdGVEYXRhLmNvb3JkaW5hdGVzKTt0LmVudGVyKCkuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJjb29yZCIpLmF0dHIoImZpbGwiLCJub25lIikubWVyZ2UodCkuYXR0cigiZCIsdGhpcy5wYXRoLmJpbmQodGhpcykpLmF0dHIoInN0cm9rZSIsZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY29sb3JTY2FsZSh0LnJ1bklkKX0uYmluZCh0aGlzKSksdC5leGl0KCkucmVtb3ZlKCk7Y29uc3QgZT10aGlzLmNvb3JkaW5hdGVzR3JvdXAuc2VsZWN0QWxsKCIuaGlkZGVuQ29vcmQiKS5kYXRhKHRoaXMuY29vcmRpbmF0ZURhdGEuY29vcmRpbmF0ZXMpO2UuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImhpZGRlbkNvb3JkIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMTBweCIpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigic3Ryb2tlIiwicmdiYSgwLCAwLCAwLCAwLjApIikub24oIm1vdXNlb3ZlciIsdGhpcy5oYW5kbGVDb29yZGluYXRlTW91c2VPdmVyLmJpbmQodGhpcykpLm9uKCJtb3VzZW91dCIsdGhpcy5oYW5kbGVDb29yZGluYXRlTW91c2VPdXQuYmluZCh0aGlzKSkubWVyZ2UoZSkuYXR0cigiZCIsdGhpcy5wYXRoLmJpbmQodGhpcykpLGUuZXhpdCgpLnJlbW92ZSgpfXBhdGgodCl7cmV0dXJuIHQudmFsdWVzLnNvcnQoKCh0LGUpPT50aGlzLmFjdGl2ZU1ldHJpY3MuaW5kZXhPZih0Lm1ldHJpYyktdGhpcy5hY3RpdmVNZXRyaWNzLmluZGV4T2YoZS5tZXRyaWMpKSksQW90KCkodC52YWx1ZXMubWFwKGZ1bmN0aW9uKHQpe2xldCBlPXRoaXMueVNjYWxlKHQublBNSVZhbHVlKTtyZXR1cm5bdGhpcy54U2NhbGUodC5tZXRyaWMpLGVdfS5iaW5kKHRoaXMpKSl9aGFuZGxlQ29vcmRpbmF0ZU1vdXNlT3Zlcih0LGUpe3RoaXMubGFiZWxzR3JvdXAuc2VsZWN0QWxsKCIuY29vcmRpbmF0ZS1sYWJlbCIpLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIShlLmFubm90YXRpb249PT10LmFubm90YXRpb24pfSkpLnN0eWxlKCJvcGFjaXR5IiwuMSksdGhpcy5jb29yZGluYXRlc0dyb3VwLnNlbGVjdEFsbCgiLmNvb3JkIikuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4hKGUuYW5ub3RhdGlvbj09PXQuYW5ub3RhdGlvbil9KSkuc3R5bGUoIm9wYWNpdHkiLC4xKX1oYW5kbGVDb29yZGluYXRlTW91c2VPdXQoKXt0aGlzLmxhYmVsc0dyb3VwLnNlbGVjdEFsbCgiLmNvb3JkaW5hdGUtbGFiZWwiKS5zdHlsZSgib3BhY2l0eSIsMSksdGhpcy5jb29yZGluYXRlc0dyb3VwLnNlbGVjdEFsbCgiLmNvb3JkIikuc3R5bGUoIm9wYWNpdHkiLDEpfWRyYXdMYWJlbHMoKXtjb25zdCB0PTMwL3RoaXMueFNjYWxlLnN0ZXAoKSxlPXRoaXMuY29vcmRpbmF0ZURhdGEuY29vcmRpbmF0ZXMubGVuZ3RoPDMwP3RoaXMuY29vcmRpbmF0ZURhdGEuY29vcmRpbmF0ZXM6W10sbj10aGlzLmxhYmVsc0dyb3VwLnNlbGVjdEFsbCgiLmNvb3JkaW5hdGUtbGFiZWwiKS5kYXRhKGUpO24uZW50ZXIoKS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsImNvb3JkaW5hdGUtbGFiZWwiKS5hdHRyKCJmb250LXNpemUiLCIxMHB4IikubWVyZ2UobikudGV4dCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuYW5ub3RhdGlvbn0pKS5hdHRyKCJ4Iix0aGlzLnhTY2FsZSh0aGlzLmFjdGl2ZU1ldHJpY3NbMF0pKzMwKS5hdHRyKCJ5IixmdW5jdGlvbihlKXtjb25zdCBuPXRoaXMueVNjYWxlKGUudmFsdWVzWzBdLm5QTUlWYWx1ZT9lLnZhbHVlc1swXS5uUE1JVmFsdWU6MCksbz10aGlzLnlTY2FsZShlLnZhbHVlc1sxXS5uUE1JVmFsdWU/ZS52YWx1ZXNbMV0ublBNSVZhbHVlOjApO3JldHVybigxLXQpKm4rdCpvfS5iaW5kKHRoaXMpKSxuLmV4aXQoKS5yZW1vdmUoKX19UF90Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxQX3QpfSxQX3QuybVjbXA9VW8oe3R5cGU6UF90LHNlbGVjdG9yczpbWyJwYXJhbGxlbC1jb29yZGluYXRlcy1jb21wb25lbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJldiKE9fdCwzLGNoKSwyJmUpe2xldCB0O1ViKHQ9WWIoKSkmJihuLnN2Z0VsZW1lbnQ9dC5maXJzdCl9fSxob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezEmZSYmTnUoInJlc2l6ZSIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25SZXNpemUoZSl9KSwhMSxxbCl9LGlucHV0czp7YWN0aXZlTWV0cmljczoiYWN0aXZlTWV0cmljcyIsY29vcmRpbmF0ZURhdGE6ImNvb3JkaW5hdGVEYXRhIixzaWRlYmFyV2lkdGg6InNpZGViYXJXaWR0aCIsY29sb3JTY2FsZToiY29sb3JTY2FsZSJ9LGZlYXR1cmVzOltTaV0sZGVjbHM6Mix2YXJzOjAsY29uc3RzOltbMSwicGMtY2hhcnQiXSxbImNoYXJ0IiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihIYSgpLHd1KDAsInN2ZyIsMCwxKSl9LHN0eWxlczpbIi5wYy1jaGFydFtfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjMwMHB4O3dpZHRoOjEwMCV9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFBfdCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJwYXJhbGxlbC1jb29yZGluYXRlcy1jb21wb25lbnQiLHRlbXBsYXRlVXJsOiIuL3BhcmFsbGVsX2Nvb3JkaW5hdGVzX2NvbXBvbmVudC5uZy5odG1sIixzdHlsZVVybHM6WyIuL3BhcmFsbGVsX2Nvb3JkaW5hdGVzX2NvbXBvbmVudC5jc3MiXSxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSxudWxsLHthY3RpdmVNZXRyaWNzOlt7dHlwZTp5X31dLGNvb3JkaW5hdGVEYXRhOlt7dHlwZTp5X31dLHNpZGViYXJXaWR0aDpbe3R5cGU6eV99XSxjb2xvclNjYWxlOlt7dHlwZTp5X31dLHN2Z0VsZW1lbnQ6W3t0eXBlOkZyLGFyZ3M6WyJjaGFydCIse3N0YXRpYzohMCxyZWFkOmNofV19XSxvblJlc2l6ZTpbe3R5cGU6TV8sYXJnczpbIndpbmRvdzpyZXNpemUiLFsiJGV2ZW50Il1dfV19KTtjbGFzcyB3X3R7Y29uc3RydWN0b3IodCl7dGhpcy5zdG9yZT10LHRoaXMuYWN0aXZlUnVucyQ9dGhpcy5zdG9yZS5waXBlKFJrKHZOKSkucGlwZShodCgodD0+dD9BcnJheS5mcm9tKHQuZW50cmllcygpKS5maWx0ZXIoKHQ9PnRbMV0pKS5tYXAoKHQ9PnRbMF0pKTpbXSkpKSx0aGlzLmFjdGl2ZU1ldHJpY3MkPUR0KHRoaXMuc3RvcmUuc2VsZWN0KFlodCksdGhpcy5hY3RpdmVSdW5zJCx0aGlzLnN0b3JlLnNlbGVjdCh0YnQpKS5waXBlKGh0KCgoW3QsZSxuXSk9PntsZXQgbz1bXTtmb3IoY29uc3QgbiBvZiBlKXRbbl0mJihvPW8uY29uY2F0KHRbbl0uZmlsdGVyKCh0PT5CYnQodCkpKSkpO3JldHVybiBvPVsuLi5uZXcgU2V0KFsuLi5PYmplY3Qua2V5cyhuKSwuLi5vXSldLG8ubWFwKCh0PT5WYnQodCkpKX0pKSksdGhpcy5jb29yZGluYXRlRGF0YSQ9RHQoW3RoaXMuc3RvcmUuc2VsZWN0KEdodCksdGhpcy5zdG9yZS5zZWxlY3QoWmh0KSx0aGlzLmFjdGl2ZVJ1bnMkLHRoaXMuYWN0aXZlTWV0cmljcyRdKS5waXBlKGh0KCgoW3QsZSxuLG9dKT0+KGZ1bmN0aW9uIGkodCxlLG4sbyl7Y29uc3QgaT1bXSxhPXttYXg6LTEsbWluOjF9LHI9bmV3IFNldChuKSxzPW5ldyBTZXQobyk7cmV0dXJuIDA9PT1yLnNpemV8fDA9PT1zLnNpemV8fDA9PT1PYmplY3Qua2V5cyh0KS5sZW5ndGg/e2Nvb3JkaW5hdGVzOltdLGV4dHJlbWVzOnttaW46LTEsbWF4OjF9fTooZS5mb3JFYWNoKChlPT57Y29uc3Qgbj17fTt0W2VdLmZvckVhY2goKHQ9PntyLmhhcyh0LnJ1bikmJnMuaGFzKHQubWV0cmljKSYmKG5bdC5ydW5dP25bdC5ydW5dLnB1c2godCk6blt0LnJ1bl09W3RdLG51bGwhPT10Lm5QTUlWYWx1ZT8oYS5tYXg9TWF0aC5tYXgoYS5tYXgsdC5uUE1JVmFsdWUpLGEubWluPU1hdGgubWluKGEubWluLHQublBNSVZhbHVlKSk6KGEubWF4PU1hdGgubWF4KGEubWF4LDApLGEubWluPU1hdGgubWluKGEubWluLDApKSl9KSk7Zm9yKGNvbnN0IHQgb2YgT2JqZWN0LmtleXMobikpaS5wdXNoKHthbm5vdGF0aW9uOmUscnVuSWQ6dCx2YWx1ZXM6blt0XX0pfSkpLGEubWF4PGEubWluJiYoYS5tYXg9MSxhLm1pbj0tMSkse2Nvb3JkaW5hdGVzOmksZXh0cmVtZXM6YX0pfSkodCxlLG4sbykpKSksdGhpcy5zaWRlYmFyV2lkdGgkPXRoaXMuc3RvcmUuc2VsZWN0KGxidCksdGhpcy5ydW5Db2xvclNjYWxlJD10aGlzLnN0b3JlLnNlbGVjdChDTikucGlwZShodCgodD0+ZT0+e2lmKCF0Lmhhc093blByb3BlcnR5KGUpKXRocm93IG5ldyBFcnJvcihgW0NvbG9yIHNjYWxlXSB1bmtub3duIHJ1bklkOiAke2V9LmApO3JldHVybiB0W2VdfSkpKX19ZnVuY3Rpb24ga190KHQsZSl7MSZ0JiZ3dSgwLCJtYXQtaWNvbiIsOSl9ZnVuY3Rpb24gU190KHQsZSl7MSZ0JiZ3dSgwLCJtYXQtaWNvbiIsMTApfWZ1bmN0aW9uIERfdCh0LGUpezEmdCYmd3UoMCwibnBtaS1wYXJhbGxlbC1jb29yZGluYXRlcyIpfXdfdC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8d190KShNdShFaykpfSx3X3QuybVjbXA9VW8oe3R5cGU6d190LHNlbGVjdG9yczpbWyJucG1pLXBhcmFsbGVsLWNvb3JkaW5hdGVzIl1dLGRlY2xzOjUsdmFyczoxMixjb25zdHM6W1szLCJhY3RpdmVNZXRyaWNzIiwiY29vcmRpbmF0ZURhdGEiLCJzaWRlYmFyV2lkdGgiLCJjb2xvclNjYWxlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJih3dSgwLCJwYXJhbGxlbC1jb29yZGluYXRlcy1jb21wb25lbnQiLDApLE9iKDEsImFzeW5jIiksT2IoMiwiYXN5bmMiKSxPYigzLCJhc3luYyIpLE9iKDQsImFzeW5jIikpLDImZSYmdnUoImFjdGl2ZU1ldHJpY3MiLFBiKDEsNCxuLmFjdGl2ZU1ldHJpY3MkKSkoImNvb3JkaW5hdGVEYXRhIixQYigyLDYsbi5jb29yZGluYXRlRGF0YSQpKSgic2lkZWJhcldpZHRoIixQYigzLDgsbi5zaWRlYmFyV2lkdGgkKSkoImNvbG9yU2NhbGUiLFBiKDQsMTAsbi5ydW5Db2xvclNjYWxlJCkpfSxkaXJlY3RpdmVzOltQX3RdLHBpcGVzOltNdl0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYih3X3QsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoibnBtaS1wYXJhbGxlbC1jb29yZGluYXRlcyIsdGVtcGxhdGU6J1xuICAgIDxwYXJhbGxlbC1jb29yZGluYXRlcy1jb21wb25lbnRcbiAgICAgIFthY3RpdmVNZXRyaWNzXT0iYWN0aXZlTWV0cmljcyQgfCBhc3luYyJcbiAgICAgIFtjb29yZGluYXRlRGF0YV09ImNvb3JkaW5hdGVEYXRhJCB8IGFzeW5jIlxuICAgICAgW3NpZGViYXJXaWR0aF09InNpZGViYXJXaWR0aCQgfCBhc3luYyJcbiAgICAgIFtjb2xvclNjYWxlXT0icnVuQ29sb3JTY2FsZSQgfCBhc3luYyJcbiAgICA+PC9wYXJhbGxlbC1jb29yZGluYXRlcy1jb21wb25lbnQ+XG4gICcsY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkVrfV19KSxudWxsKTtjbGFzcyBFX3R7Y29uc3RydWN0b3IoKXt0aGlzLm9uQ2xlYXJTZWxlY3RlZEFubm90YXRpb25zPW5ldyBBYix0aGlzLm9uVG9nZ2xlRXhwYW5kZWQ9bmV3IEFifX1FX3QuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEVfdCl9LEVfdC7JtWNtcD1Vbyh7dHlwZTpFX3Qsc2VsZWN0b3JzOltbInNlbGVjdGVkLWFubm90YXRpb25zLWNvbXBvbmVudCJdXSxpbnB1dHM6e3BjRXhwYW5kZWQ6InBjRXhwYW5kZWQiLHNlbGVjdGVkQW5ub3RhdGlvbnM6InNlbGVjdGVkQW5ub3RhdGlvbnMifSxvdXRwdXRzOntvbkNsZWFyU2VsZWN0ZWRBbm5vdGF0aW9uczoib25DbGVhclNlbGVjdGVkQW5ub3RhdGlvbnMiLG9uVG9nZ2xlRXhwYW5kZWQ6Im9uVG9nZ2xlRXhwYW5kZWQifSxkZWNsczoxMSx2YXJzOjQsY29uc3RzOmZ1bmN0aW9uKCl7bGV0IHQsZTtyZXR1cm4gdD0idW5kZWZpbmVkIiE9dHlwZW9mIG5nSTE4bkNsb3N1cmVNb2RlJiZuZ0kxOG5DbG9zdXJlTW9kZT9nb29nLmdldE1zZygiQ2xlYXIgQW5ub3RhdGlvbiBTZWxlY3Rpb24iKTokbG9jYWxpemVgOkxhYmVsIGZvciBhIGJ1dHRvbiB0aGF0IGNsZWFycyB0aGUgYW5ub3RhdGlvbiBzZWxlY3Rpb24u4pCfMmI1MjI4OWYyYzRiN2Y1YjE4MmVkMjNjOTE1NDcyMmVjZDQ2YTJkNOKQnzI0OTQ2NjA1MjAzNDEzMDg4MzA6Q2xlYXIgQW5ub3RhdGlvbiBTZWxlY3Rpb25gLGU9InVuZGVmaW5lZCIhPXR5cGVvZiBuZ0kxOG5DbG9zdXJlTW9kZSYmbmdJMThuQ2xvc3VyZU1vZGU/Z29vZy5nZXRNc2coIkV4cGFuZC9IaWRlIFNlbGVjdGVkIEFubm90YXRpb25zIik6JGxvY2FsaXplYDpMYWJlbCBmb3IgYSBidXR0b24gdGhhdCBleHBhbmRzIG9yIGhpZGVzIHNlbGVjdGVkIGFubm90YXRpb25zLuKQnzhmNGFkMzA1YzE5ZTM2NTVmMzE4OWUzZTI2NGU4M2ZiNzZmN2JiOTXikJ81NjcwNzk3Nzg0MDcwOTUyMDk1OkV4cGFuZC9IaWRlIFNlbGVjdGVkIEFubm90YXRpb25zYCxbWzEsInBjLWNvbnRhaW5lciJdLFsxLCJwYy10b29sYmFyIl0sWzEsInBjLXRpdGxlIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIix0LCJ0aXRsZSIsIkRlc2VsZWN0cyBhbGwgc2VsZWN0ZWQgYW5ub3RhdGlvbnMuIiwxLCJjbGVhci1idXR0b24iLDMsImRpc2FibGVkIiwiY2xpY2siXSxbInN2Z0ljb24iLCJjbGVhcl8yNHB4Il0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIixlLDEsImV4cGFuZC1idXR0b24iLDMsImNsaWNrIl0sWyJzdmdJY29uIiwiZXhwYW5kX2xlc3NfMjRweCIsImNsYXNzIiwiZXhwYW5kLWxlc3MtaWNvbiIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJub3RFeHBhbmRlZCIsIiJdLFs0LCJuZ0lmIl0sWyJzdmdJY29uIiwiZXhwYW5kX2xlc3NfMjRweCIsMSwiZXhwYW5kLWxlc3MtaWNvbiJdLFsic3ZnSWNvbiIsImV4cGFuZF9tb3JlXzI0cHgiLDEsImV4cGFuZC1pY29uIl1dfSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7aWYoMSZlJiYoT3UoMCwiZGl2IiwwKSxPdSgxLCJkaXYiLDEpLE91KDIsImgzIiwyKSxNZigzLCJTZWxlY3RlZCBBbm5vdGF0aW9ucyIpLFB1KCksT3UoNCwiYnV0dG9uIiwzKSxOdSgiY2xpY2siLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub25DbGVhclNlbGVjdGVkQW5ub3RhdGlvbnMuZW1pdCgpfSkpLHd1KDUsIm1hdC1pY29uIiw0KSxQdSgpLE91KDYsImJ1dHRvbiIsNSksTnUoImNsaWNrIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uVG9nZ2xlRXhwYW5kZWQuZW1pdCgpfSkpLFdtKDcsa190LDEsMCwibWF0LWljb24iLDYpLFdtKDgsU190LDEsMCwibmctdGVtcGxhdGUiLG51bGwsNyxLYiksUHUoKSxQdSgpLFdtKDEwLERfdCwxLDAsIm5wbWktcGFyYWxsZWwtY29vcmRpbmF0ZXMiLDgpLFB1KCkpLDImZSl7Y29uc3QgdD1HbSg5KTtKYyg0KSx2dSgiZGlzYWJsZWQiLDA9PT1uLnNlbGVjdGVkQW5ub3RhdGlvbnMubGVuZ3RoKSxKYygzKSx2dSgibmdJZiIsbi5wY0V4cGFuZGVkKSgibmdJZkVsc2UiLHQpLEpjKDMpLHZ1KCJuZ0lmIixuLnBjRXhwYW5kZWQpfX0sZGlyZWN0aXZlczpbTkgsY0csYXYsd190XSxzdHlsZXM6WycubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1iYWRnZS1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo5cHh9Lm1hdC1iYWRnZS1sYXJnZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4fS5tYXQtaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWhlYWRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAyNHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE1cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjgzKS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1oNltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC42NykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtYm9keS1zdHJvbmdbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MCAwIDEycHh9Lm1hdC1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FwdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTJweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6MzAwIDExMnB4LzExMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wNWVtO21hcmdpbjowIDAgNTZweH0ubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNTZweC81NnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMmVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNDVweC80OHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMDVlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDM0cHgvNDBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1yYWlzZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3Ryb2tlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZsYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mYWJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW1pbmktZmFiW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtYnV0dG9uLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FyZC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjBweH0ubWF0LWNhcmQtc3VidGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hlY2tib3gtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC10cmFpbGluZy1pY29uLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC1yZW1vdmUubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxOHB4fS5tYXQtdGFibGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWhlYWRlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb290ZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jYWxlbmRhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FsZW5kYXItYm9keVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYWxlbmRhci1wZXJpb2QtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWRpYWxvZy10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTI1O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTUwJTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjVlbTt3aWR0aDoxLjVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW07bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41ZW0gMDtib3JkZXItdG9wOi44NDM3NWVtIHNvbGlkIHRyYW5zcGFyZW50fS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3RvcDotMC44NDM3NWVtO3BhZGRpbmctdG9wOi44NDM3NWVtfS5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjc1JTttYXJnaW4tdG9wOi42NjY2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNzkxNjY2NjY2N2VtKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAycHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyM2VtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzUzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi41NDE2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNjY2NjY2NjY2N2VtKX1AbWVkaWEgcHJpbnR7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIyZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIxZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMmVtKSBzY2FsZSgwLjc1KX19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjI1ZW0gMCAuNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4wOTM3NWVtO21hcmdpbi10b3A6LTAuNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MWVtIDAgMWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjg0Mzc1ZW07bWFyZ2luLXRvcDotMC4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH1pbnB1dC5tYXQtaW5wdXQtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDotMC4wNjI1ZW19Lm1hdC1tZW51LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1wYWdpbmF0b3JbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXBhZ2luYXRvci1wYWdlLXNpemVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3RbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXN0ZXBwZXItdmVydGljYWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc3RlcC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0Om5vcm1hbH0ubWF0LXN0ZXAtbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRhYi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjB9Lm1hdC10b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTZweH0ubWF0LW9wdGdyb3VwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LXNpbXBsZS1zbmFja2Jhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbltfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRyZWVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbmVzdGVkLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4fS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVdOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtcmlwcGxlLm1hdC1yaXBwbGUtdW5ib3VuZGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6NTAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7dHJhbnNmb3JtOnNjYWxlKDApfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpub25lfS5jZGstdmlzdWFsbHktaGlkZGVuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7bGVmdDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmVtcHR5e2Rpc3BsYXk6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LXBhbmVbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOmF1dG87Ym94LXNpemluZzpib3JkZXItYm94O3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7bWF4LXdpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlfS5jZGstb3ZlcmxheS1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKTtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5Oi42fS5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjMyKX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTowfS5jZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO292ZXJmbG93LXk6c2Nyb2xsfUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnR7fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5ke30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxse2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCAwcyAxbXN9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06bm90KDotd2Via2l0LWF1dG9maWxsKXthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIDBzIDFtc310ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemVbX25nY29udGVudC0lQ09NUCVde3Jlc2l6ZTpub25lfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmdbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OmF1dG8gIWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW4gIWltcG9ydGFudH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nLWZpcmVmb3hbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OjAgIWltcG9ydGFudH0ubWF0LWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0ucGMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZWJlYmVifS5wYy10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWJlYjtkaXNwbGF5OmZsZXg7aGVpZ2h0OjQycHg7cGFkZGluZzowIDE2cHh9LnBjLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDA7ZGlzcGxheTppbmxpbmU7ZmxleDoxIDF9J10sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEVfdCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJzZWxlY3RlZC1hbm5vdGF0aW9ucy1jb21wb25lbnQiLHRlbXBsYXRlVXJsOiIuL3NlbGVjdGVkX2Fubm90YXRpb25zX2NvbXBvbmVudC5uZy5odG1sIixzdHlsZVVybHM6WyIuL3NlbGVjdGVkX2Fubm90YXRpb25zX2NvbXBvbmVudC5jc3MiXSxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSxudWxsLHtwY0V4cGFuZGVkOlt7dHlwZTp5X31dLHNlbGVjdGVkQW5ub3RhdGlvbnM6W3t0eXBlOnlffV0sb25DbGVhclNlbGVjdGVkQW5ub3RhdGlvbnM6W3t0eXBlOl9ffV0sb25Ub2dnbGVFeHBhbmRlZDpbe3R5cGU6X199XX0pO2NsYXNzIEFfdHtjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXQsdGhpcy5wY0V4cGFuZGVkJD10aGlzLnN0b3JlLnBpcGUoUmsobmJ0KSksdGhpcy5zZWxlY3RlZEFubm90YXRpb25zJD10aGlzLnN0b3JlLnNlbGVjdChaaHQpfWNsZWFyU2VsZWN0ZWRBbm5vdGF0aW9ucygpe3RoaXMuc3RvcmUuZGlzcGF0Y2goeWJ0KCkpfXRvZ2dsZUV4cGFuZGVkKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChTYnQoKSl9fWZ1bmN0aW9uIFJfdCh0LGUpezEmdCYmKE91KDAsImRpdiIsNiksT3UoMSwiZGl2Iiw3KSx3dSgyLCJucG1pLXZpb2xpbi1maWx0ZXJzIiw4KSxPdSgzLCJkaXYiLDkpLHd1KDQsInJ1bnMtc2VsZWN0b3IiKSxQdSgpLFB1KCksUHUoKSksMiZ0JiZvZigid2lkdGgiLEx1KCkuc2lkZWJhcldpZHRoLCJweCIpfWZ1bmN0aW9uIFRfdCh0LGUpe2lmKDEmdCl7Y29uc3QgdD1FdSgpO091KDAsImRpdiIsMTApLE51KCJtb3VzZWRvd24iLChmdW5jdGlvbiBlKCl7cmV0dXJuIHJhKHQpLEx1KCkucmVzaXplR3JhYmJlZC5lbWl0KCl9KSksUHUoKX19ZnVuY3Rpb24gTl90KHQsZSl7MSZ0JiYoT3UoMCwiZGl2IiwxMSksd3UoMSwibnBtaS1hbm5vdGF0aW9ucy1saXN0IiwxMiksd3UoMiwibnBtaS1zZWxlY3RlZC1hbm5vdGF0aW9ucyIpLFB1KCkpfWZ1bmN0aW9uIElfdCh0LGUpezEmdCYmKE91KDAsImRpdiIsMTMpLE1mKDEsIllvdSBuZWVkIHRvIHNlbGVjdCBhdCBsZWFzdCBvbmUgcnVuLiIpLFB1KCkpfWZ1bmN0aW9uIHpfdCh0LGUpe2lmKDEmdCl7Y29uc3QgdD1FdSgpO091KDAsImRpdiIsMTQpLE91KDEsImJ1dHRvbiIsMTUpLE51KCJjbGljayIsKGZ1bmN0aW9uIGUoKXtyZXR1cm4gcmEodCksTHUoKS50b2dnbGVTaWRlYmFyRXhwYW5kZWQuZW1pdCgpfSkpLHd1KDIsIm1hdC1pY29uIiwxNiksUHUoKSxQdSgpfX1BX3QuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEFfdCkoTXUoRWspKX0sQV90Lsm1Y21wPVVvKHt0eXBlOkFfdCxzZWxlY3RvcnM6W1sibnBtaS1zZWxlY3RlZC1hbm5vdGF0aW9ucyJdXSxkZWNsczozLHZhcnM6Nixjb25zdHM6W1szLCJwY0V4cGFuZGVkIiwic2VsZWN0ZWRBbm5vdGF0aW9ucyIsIm9uQ2xlYXJTZWxlY3RlZEFubm90YXRpb25zIiwib25Ub2dnbGVFeHBhbmRlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoT3UoMCwic2VsZWN0ZWQtYW5ub3RhdGlvbnMtY29tcG9uZW50IiwwKSxOdSgib25DbGVhclNlbGVjdGVkQW5ub3RhdGlvbnMiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uY2xlYXJTZWxlY3RlZEFubm90YXRpb25zKCl9KSkoIm9uVG9nZ2xlRXhwYW5kZWQiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4udG9nZ2xlRXhwYW5kZWQoKX0pKSxPYigxLCJhc3luYyIpLE9iKDIsImFzeW5jIiksUHUoKSksMiZlJiZ2dSgicGNFeHBhbmRlZCIsUGIoMSwyLG4ucGNFeHBhbmRlZCQpKSgic2VsZWN0ZWRBbm5vdGF0aW9ucyIsUGIoMiw0LG4uc2VsZWN0ZWRBbm5vdGF0aW9ucyQpKX0sZGlyZWN0aXZlczpbRV90XSxwaXBlczpbTXZdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoQV90LFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6Im5wbWktc2VsZWN0ZWQtYW5ub3RhdGlvbnMiLHRlbXBsYXRlOidcbiAgICA8c2VsZWN0ZWQtYW5ub3RhdGlvbnMtY29tcG9uZW50XG4gICAgICBbcGNFeHBhbmRlZF09InBjRXhwYW5kZWQkIHwgYXN5bmMiXG4gICAgICBbc2VsZWN0ZWRBbm5vdGF0aW9uc109InNlbGVjdGVkQW5ub3RhdGlvbnMkIHwgYXN5bmMiXG4gICAgICAob25DbGVhclNlbGVjdGVkQW5ub3RhdGlvbnMpPSJjbGVhclNlbGVjdGVkQW5ub3RhdGlvbnMoKSJcbiAgICAgIChvblRvZ2dsZUV4cGFuZGVkKT0idG9nZ2xlRXhwYW5kZWQoKSJcbiAgICA+PC9zZWxlY3RlZC1hbm5vdGF0aW9ucy1jb21wb25lbnQ+XG4gICcsY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkVrfV19KSxudWxsKTtjbGFzcyBIX3R7Y29uc3RydWN0b3IoKXt0aGlzLnRvZ2dsZVNpZGViYXJFeHBhbmRlZD1uZXcgQWIsdGhpcy5yZXNpemVUcmlnZ2VyZWQ9bmV3IEFiLHRoaXMucmVzaXplR3JhYmJlZD1uZXcgQWIsdGhpcy5yZXNpemVSZWxlYXNlZD1uZXcgQWJ9fUhfdC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8SF90KX0sSF90Lsm1Y21wPVVvKHt0eXBlOkhfdCxzZWxlY3RvcnM6W1sibWFpbi1jb21wb25lbnQiXV0saW5wdXRzOntydW5BY3RpdmU6InJ1bkFjdGl2ZSIsc2lkZWJhckV4cGFuZGVkOiJzaWRlYmFyRXhwYW5kZWQiLHNpZGViYXJXaWR0aDoic2lkZWJhcldpZHRoIn0sb3V0cHV0czp7dG9nZ2xlU2lkZWJhckV4cGFuZGVkOiJ0b2dnbGVTaWRlYmFyRXhwYW5kZWQiLHJlc2l6ZVRyaWdnZXJlZDoicmVzaXplVHJpZ2dlcmVkIixyZXNpemVHcmFiYmVkOiJyZXNpemVHcmFiYmVkIixyZXNpemVSZWxlYXNlZDoicmVzaXplUmVsZWFzZWQifSxkZWNsczo4LHZhcnM6NSxjb25zdHM6ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gdD0idW5kZWZpbmVkIiE9dHlwZW9mIG5nSTE4bkNsb3N1cmVNb2RlJiZuZ0kxOG5DbG9zdXJlTW9kZT9nb29nLmdldE1zZygiVG9nZ2xlIFNpZGViYXIiKTokbG9jYWxpemVgOkxhYmVsIGZvciBhIGJ1dHRvbiB0aGF0IHRvZ2dsZXMgdGhlIHNpZGViYXIu4pCfZjYzYjU3OTMyZDE3OWNjYTYyYWM5ZmNhZTYzZGQ3ZjVlNmZhMzg5ZuKQnzQ0ODUwMDkzNDc0NDQ3MDQ4Nzg6VG9nZ2xlIFNpZGViYXJgLFtbMSwiY29udGVudCIsMywibW91c2V1cCIsIm1vdXNlbW92ZSJdLFsiY2xhc3MiLCJzaWRlYmFyLWNvbnRhaW5lciIsMywid2lkdGgiLDQsIm5nSWYiXSxbImNsYXNzIiwiZ3JhYmJlciIsMywibW91c2Vkb3duIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImFuYWx5c2lzLWNvbnRhaW5lciIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJub1J1biIsIiJdLFsiY2xhc3MiLCJzaWRlLXRvZ2dsZSIsNCwibmdJZiJdLFsxLCJzaWRlYmFyLWNvbnRhaW5lciJdLFsxLCJzaWRlYmFyLWNvbnRlbnRzIl0sWzEsInZpb2xpbi1maWx0ZXJzIl0sWzEsInJ1bi1zZWxlY3RvciJdLFsxLCJncmFiYmVyIiwzLCJtb3VzZWRvd24iXSxbMSwiYW5hbHlzaXMtY29udGFpbmVyIl0sWzEsImFubm90YXRpb25zLWxpc3QiXSxbMSwibm9SdW4iXSxbMSwic2lkZS10b2dnbGUiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLHQsMywiY2xpY2siXSxbInN2Z0ljb24iLCJjaGV2cm9uX3JpZ2h0XzI0cHgiXV19LHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJih3dSgwLCJucG1pLWRhdGEtc2VsZWN0aW9uIiksT3UoMSwiZGl2IiwwKSxOdSgibW91c2V1cCIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5yZXNpemVSZWxlYXNlZC5lbWl0KCl9KSkoIm1vdXNlbW92ZSIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ucmVzaXplVHJpZ2dlcmVkLmVtaXQoZSl9KSksV20oMixSX3QsNSwyLCJkaXYiLDEpLFdtKDMsVF90LDEsMCwiZGl2IiwyKSxXbSg0LE5fdCwzLDAsImRpdiIsMyksV20oNSxJX3QsMiwwLCJuZy10ZW1wbGF0ZSIsbnVsbCw0LEtiKSxQdSgpLFdtKDcsel90LDMsMCwiZGl2Iiw1KSksMiZlKXtjb25zdCB0PUdtKDYpO0pjKDIpLHZ1KCJuZ0lmIixuLnNpZGViYXJFeHBhbmRlZCksSmMoMSksdnUoIm5nSWYiLG4uc2lkZWJhckV4cGFuZGVkKSxKYygxKSx2dSgibmdJZiIsITA9PT1uLnJ1bkFjdGl2ZSkoIm5nSWZFbHNlIix0KSxKYygzKSx2dSgibmdJZiIsIW4uc2lkZWJhckV4cGFuZGVkKX19LGRpcmVjdGl2ZXM6W1N5dCxhdix6eXQsQTIseF90LEFfdCxOSCxjR10sc3R5bGVzOlsnLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEycHg7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtYmFkZ2Utc21hbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6OXB4fS5tYXQtYmFkZ2UtbGFyZ2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweH0ubWF0LWgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1oZWFkbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMjRweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNnB4LzI4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNXB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC44MykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtaDZbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuNjcpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWJvZHktc3Ryb25nW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjAgMCAxMnB4fS5tYXQtc21hbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDEycHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjMwMCAxMTJweC8xMTJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDVlbTttYXJnaW46MCAwIDU2cHh9Lm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDU2cHgvNTZweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDJlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDQ1cHgvNDhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDA1ZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAzNHB4LzQwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDY0cHh9Lm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcmFpc2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0cm9rZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mbGF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmFiW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1taW5pLWZhYltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWJ1dHRvbi10b2dnbGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhcmQtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjIwcHh9Lm1hdC1jYXJkLXN1YnRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2hlY2tib3hbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNoZWNrYm94LWxheW91dFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoZWNrYm94LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoyNHB4fS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtdHJhaWxpbmctaWNvbi5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtcmVtb3ZlLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MThweH0ubWF0LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1oZWFkZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2VsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9vdGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2FsZW5kYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhbGVuZGFyLWJvZHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxM3B4fS5tYXQtY2FsZW5kYXItYm9keS1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FsZW5kYXItcGVyaW9kLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo0MDB9Lm1hdC1kaWFsb2ctdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjEyNTtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE1MCU7bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS41ZW07d2lkdGg6MS41ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNWVtIDA7Ym9yZGVyLXRvcDouODQzNzVlbSBzb2xpZCB0cmFuc3BhcmVudH0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6LTAuODQzNzVlbTtwYWRkaW5nLXRvcDouODQzNzVlbX0ubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo3NSU7bWFyZ2luLXRvcDouNjY2NjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjc5MTY2NjY2NjdlbSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNDM3NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMnB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjNlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM1MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjI4MTI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDouNTQxNjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjY2NjY2NjY2NjdlbSl9QG1lZGlhIHByaW50ey5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMmVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMWVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTJlbSkgc2NhbGUoMC43NSl9fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi4yNWVtIDAgLjc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMDkzNzVlbTttYXJnaW4tdG9wOi0wLjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjFlbSAwIDFlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS44NDM3NWVtO21hcmdpbi10b3A6LTAuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9aW5wdXQubWF0LWlucHV0LWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LTAuMDYyNWVtfS5tYXQtbWVudS1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtcGFnaW5hdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweH0ubWF0LXJhZGlvLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW19Lm1hdC1zbGlkZS10b2dnbGUtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdGVwcGVyLWhvcml6b250YWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXN0ZXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXN0ZXAtc3ViLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDpub3JtYWx9Lm1hdC1zdGVwLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LXN0ZXAtbGFiZWwtc2VsZWN0ZWRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRhYi1ncm91cFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdGFiLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10YWItbGlua1tfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowfS5tYXQtdG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB4O3BhZGRpbmctdG9wOjZweDtwYWRkaW5nLWJvdHRvbTo2cHh9Lm1hdC10b29sdGlwLWhhbmRzZXRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9Lm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE2cHh9Lm1hdC1vcHRncm91cC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1zaW1wbGUtc25hY2tiYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweH0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb25bX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjE7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo1MDB9Lm1hdC10cmVlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW5lc3RlZC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjQwMDtmb250LXNpemU6MTRweH0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmVtcHR5KXt0cmFuc2Zvcm06dHJhbnNsYXRlWigwKX0ubWF0LXJpcHBsZS5tYXQtcmlwcGxlLXVuYm91bmRlZFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItcmFkaXVzOjUwJTtwb2ludGVyLWV2ZW50czpub25lO3RyYW5zaXRpb246b3BhY2l0eSx0cmFuc2Zvcm0gMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpO3RyYW5zZm9ybTpzY2FsZSgwKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6bm9uZX0uY2RrLXZpc3VhbGx5LWhpZGRlbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjA7Y2xpcDpyZWN0KDAgMCAwIDApO2hlaWdodDoxcHg7bWFyZ2luOi0xcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwO291dGxpbmU6MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb2ludGVyLWV2ZW50czpub25lO3RvcDowO2xlZnQ6MDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTplbXB0eXtkaXNwbGF5Om5vbmV9LmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1wYW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czphdXRvO2JveC1zaXppbmc6Ym9yZGVyLWJveDt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O21heC13aWR0aDoxMDAlO21heC1oZWlnaHQ6MTAwJX0uY2RrLW92ZXJsYXktYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO3otaW5kZXg6MTAwMDtwb2ludGVyLWV2ZW50czphdXRvOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDt0cmFuc2l0aW9uOm9wYWNpdHkgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSk7b3BhY2l0eTowfS5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjF9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAuY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTouNn0uY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4zMil9LmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MH0uY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWluLXdpZHRoOjFweDttaW4taGVpZ2h0OjFweH0uY2RrLWdsb2JhbC1zY3JvbGxibG9ja1tfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7d2lkdGg6MTAwJTtvdmVyZmxvdy15OnNjcm9sbH1Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0e31Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZHt9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbHthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQgMHMgMW1zfS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOm5vdCg6LXdlYmtpdC1hdXRvZmlsbCl7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCAwcyAxbXN9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplW19uZ2NvbnRlbnQtJUNPTVAlXXtyZXNpemU6bm9uZX10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDphdXRvICFpbXBvcnRhbnQ7b3ZlcmZsb3c6aGlkZGVuICFpbXBvcnRhbnR9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZy1maXJlZm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDowICFpbXBvcnRhbnR9Lm1hdC1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtbWRjLWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9W19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2hlaWdodDoxMDAlfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleDoxO21pbi1oZWlnaHQ6MHB4O3dpZHRoOjEwMCV9LnNpZGViYXItY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59LnNpZGViYXItY29udGVudHNbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWluLXdpZHRoOjE1MHB4fS5hbmFseXNpcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47aGVpZ2h0OjEwMCU7ZmxleDoxIDF9LnJ1bi1zZWxlY3Rvcltfbmdjb250ZW50LSVDT01QJV17bWF4LWhlaWdodDoxMDAlO3dpZHRoOjEwMCV9LnZpb2xpbi1maWx0ZXJzW19uZ2NvbnRlbnQtJUNPTVAlXXttaW4taGVpZ2h0OjBweDt3aWR0aDoxMDAlfS5zaWRlLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MzBweDtoZWlnaHQ6MzBweDtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjEwcHg7Ym90dG9tOjEwcHg7Ym9yZGVyOjFweCBzb2xpZCAjZWJlYmViO2JvcmRlci1yYWRpdXM6M3B4O2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uZ3JhYmJlcltfbmdjb250ZW50LSVDT01QJV17Y29udGVudDoiIjtjdXJzb3I6ZXctcmVzaXplO2hlaWdodDoxMDAlO3dpZHRoOjNweDtvdmVyZmxvdzpoaWRkZW47YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9LmFubm90YXRpb25zLWxpc3RbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCU7bWluLWhlaWdodDowcHg7ZmxleDoxIDF9J10sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEhfdCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJtYWluLWNvbXBvbmVudCIsdGVtcGxhdGVVcmw6Ii4vbWFpbl9jb21wb25lbnQubmcuaHRtbCIsc3R5bGVVcmxzOlsiLi9tYWluX2NvbXBvbmVudC5jc3MiXSxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSxudWxsLHtydW5BY3RpdmU6W3t0eXBlOnlffV0sc2lkZWJhckV4cGFuZGVkOlt7dHlwZTp5X31dLHNpZGViYXJXaWR0aDpbe3R5cGU6eV99XSx0b2dnbGVTaWRlYmFyRXhwYW5kZWQ6W3t0eXBlOl9ffV0scmVzaXplVHJpZ2dlcmVkOlt7dHlwZTpfX31dLHJlc2l6ZUdyYWJiZWQ6W3t0eXBlOl9ffV0scmVzaXplUmVsZWFzZWQ6W3t0eXBlOl9ffV19KTtjbGFzcyBGX3R7Y29uc3RydWN0b3IodCl7dGhpcy5zdG9yZT10LHRoaXMucnVuQWN0aXZlJD10aGlzLnN0b3JlLnBpcGUoUmsodk4pKS5waXBlKGh0KCh0PT4hIXQmJlsuLi50LnZhbHVlcygpXS5pbmNsdWRlcyghMCkpKSksdGhpcy5zaWRlYmFyRXhwYW5kZWQkPXRoaXMuc3RvcmUucGlwZShSayhpYnQpKSx0aGlzLnNpZGViYXJXaWR0aCQ9dGhpcy5zdG9yZS5waXBlKFJrKGxidCkpLHRoaXMucmVzaXppbmc9ITF9b25Ub2dnbGVTaWRlYmFyRXhwYW5kZWQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKEVidCgpKX1vblJlc2l6ZVRyaWdnZXJlZCh0KXt0aGlzLnJlc2l6aW5nJiZ0aGlzLnN0b3JlLmRpc3BhdGNoKE5idCh7c2lkZWJhcldpZHRoOnQuY2xpZW50WH0pKX1vblJlc2l6ZUdyYWJiZWQoKXt0aGlzLnJlc2l6aW5nPSEwfW9uUmVzaXplUmVsZWFzZWQoKXt0aGlzLnJlc2l6aW5nPSExfX1mdW5jdGlvbiBMX3QodCxlKXsxJnQmJihPdSgwLCJkaXYiLDYpLE91KDEsImRpdiIsNyksT3UoMiwiZGl2Iiw4KSx3dSgzLCJydW5zLXNlbGVjdG9yIiksUHUoKSxQdSgpLFB1KCkpLDImdCYmb2YoIndpZHRoIixMdSgpLnNpZGViYXJXaWR0aCwicHgiKX1mdW5jdGlvbiBCX3QodCxlKXtpZigxJnQpe2NvbnN0IHQ9RXUoKTtPdSgwLCJkaXYiLDkpLE51KCJtb3VzZWRvd24iLChmdW5jdGlvbiBlKCl7cmV0dXJuIHJhKHQpLEx1KCkucmVzaXplR3JhYmJlZC5lbWl0KCl9KSksUHUoKX19ZnVuY3Rpb24gVl90KHQsZSl7MSZ0JiYoT3UoMCwiZGl2IiwxMCksd3UoMSwibnBtaS1hbm5vdGF0aW9ucy1saXN0IiwxMSksd3UoMiwibnBtaS1zZWxlY3RlZC1hbm5vdGF0aW9ucyIpLFB1KCkpfWZ1bmN0aW9uIGpfdCh0LGUpezEmdCYmKE91KDAsImRpdiIsMTIpLE1mKDEsIllvdSBuZWVkIHRvIHNlbGVjdCBhdCBsZWFzdCBvbmUgcnVuLiIpLFB1KCkpfWZ1bmN0aW9uIFVfdCh0LGUpe2lmKDEmdCl7Y29uc3QgdD1FdSgpO091KDAsImRpdiIsMTMpLE91KDEsImJ1dHRvbiIsMTQpLE51KCJjbGljayIsKGZ1bmN0aW9uIGUoKXtyZXR1cm4gcmEodCksTHUoKS50b2dnbGVTaWRlYmFyRXhwYW5kZWQuZW1pdCgpfSkpLHd1KDIsIm1hdC1pY29uIiwxNSksUHUoKSxQdSgpfX1GX3QuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEZfdCkoTXUoRWspKX0sRl90Lsm1Y21wPVVvKHt0eXBlOkZfdCxzZWxlY3RvcnM6W1sibnBtaS1tYWluIl1dLGRlY2xzOjQsdmFyczo5LGNvbnN0czpbWzMsInJ1bkFjdGl2ZSIsInNpZGViYXJFeHBhbmRlZCIsInNpZGViYXJXaWR0aCIsInRvZ2dsZVNpZGViYXJFeHBhbmRlZCIsInJlc2l6ZVRyaWdnZXJlZCIsInJlc2l6ZUdyYWJiZWQiLCJyZXNpemVSZWxlYXNlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoT3UoMCwibWFpbi1jb21wb25lbnQiLDApLE51KCJ0b2dnbGVTaWRlYmFyRXhwYW5kZWQiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub25Ub2dnbGVTaWRlYmFyRXhwYW5kZWQoKX0pKSgicmVzaXplVHJpZ2dlcmVkIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vblJlc2l6ZVRyaWdnZXJlZChlKX0pKSgicmVzaXplR3JhYmJlZCIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vblJlc2l6ZUdyYWJiZWQoKX0pKSgicmVzaXplUmVsZWFzZWQiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub25SZXNpemVSZWxlYXNlZCgpfSkpLE9iKDEsImFzeW5jIiksT2IoMiwiYXN5bmMiKSxPYigzLCJhc3luYyIpLFB1KCkpLDImZSYmdnUoInJ1bkFjdGl2ZSIsUGIoMSwzLG4ucnVuQWN0aXZlJCkpKCJzaWRlYmFyRXhwYW5kZWQiLFBiKDIsNSxuLnNpZGViYXJFeHBhbmRlZCQpKSgic2lkZWJhcldpZHRoIixQYigzLDcsbi5zaWRlYmFyV2lkdGgkKSl9LGRpcmVjdGl2ZXM6W0hfdF0scGlwZXM6W012XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEZfdCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJucG1pLW1haW4iLHRlbXBsYXRlOidcbiAgICA8bWFpbi1jb21wb25lbnRcbiAgICAgIFtydW5BY3RpdmVdPSJydW5BY3RpdmUkIHwgYXN5bmMiXG4gICAgICBbc2lkZWJhckV4cGFuZGVkXT0ic2lkZWJhckV4cGFuZGVkJCB8IGFzeW5jIlxuICAgICAgW3NpZGViYXJXaWR0aF09InNpZGViYXJXaWR0aCQgfCBhc3luYyJcbiAgICAgICh0b2dnbGVTaWRlYmFyRXhwYW5kZWQpPSJvblRvZ2dsZVNpZGViYXJFeHBhbmRlZCgpIlxuICAgICAgKHJlc2l6ZVRyaWdnZXJlZCk9Im9uUmVzaXplVHJpZ2dlcmVkKCRldmVudCkiXG4gICAgICAocmVzaXplR3JhYmJlZCk9Im9uUmVzaXplR3JhYmJlZCgpIlxuICAgICAgKHJlc2l6ZVJlbGVhc2VkKT0ib25SZXNpemVSZWxlYXNlZCgpIlxuICAgID48L21haW4tY29tcG9uZW50PlxuICAnLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2h9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpFa31dfSksbnVsbCk7Y2xhc3MgV190e2NvbnN0cnVjdG9yKCl7dGhpcy50b2dnbGVTaWRlYmFyRXhwYW5kZWQ9bmV3IEFiLHRoaXMucmVzaXplVHJpZ2dlcmVkPW5ldyBBYix0aGlzLnJlc2l6ZUdyYWJiZWQ9bmV3IEFiLHRoaXMucmVzaXplUmVsZWFzZWQ9bmV3IEFifX1XX3QuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFdfdCl9LFdfdC7JtWNtcD1Vbyh7dHlwZTpXX3Qsc2VsZWN0b3JzOltbImVtYmVkZGluZ3MtY29tcG9uZW50Il1dLGlucHV0czp7cnVuQWN0aXZlOiJydW5BY3RpdmUiLHNpZGViYXJFeHBhbmRlZDoic2lkZWJhckV4cGFuZGVkIixzaWRlYmFyV2lkdGg6InNpZGViYXJXaWR0aCJ9LG91dHB1dHM6e3RvZ2dsZVNpZGViYXJFeHBhbmRlZDoidG9nZ2xlU2lkZWJhckV4cGFuZGVkIixyZXNpemVUcmlnZ2VyZWQ6InJlc2l6ZVRyaWdnZXJlZCIscmVzaXplR3JhYmJlZDoicmVzaXplR3JhYmJlZCIscmVzaXplUmVsZWFzZWQ6InJlc2l6ZVJlbGVhc2VkIn0sZGVjbHM6OCx2YXJzOjUsY29uc3RzOmZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIHQ9InVuZGVmaW5lZCIhPXR5cGVvZiBuZ0kxOG5DbG9zdXJlTW9kZSYmbmdJMThuQ2xvc3VyZU1vZGU/Z29vZy5nZXRNc2coIlRvZ2dsZSBTaWRlYmFyIik6JGxvY2FsaXplYDpMYWJlbCBmb3IgYSBidXR0b24gdGhhdCB0b2dnbGVzIHRoZSBzaWRlYmFyLuKQn2Y2M2I1NzkzMmQxNzljY2E2MmFjOWZjYWU2M2RkN2Y1ZTZmYTM4OWbikJ80NDg1MDA5MzQ3NDQ0NzA0ODc4OlRvZ2dsZSBTaWRlYmFyYCxbWzEsImNvbnRlbnQiLDMsIm1vdXNldXAiLCJtb3VzZW1vdmUiXSxbImNsYXNzIiwic2lkZWJhci1jb250YWluZXIiLDMsIndpZHRoIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImdyYWJiZXIiLDMsIm1vdXNlZG93biIsNCwibmdJZiJdLFsiY2xhc3MiLCJhbmFseXNpcy1jb250YWluZXIiLDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsibm9SdW4iLCIiXSxbImNsYXNzIiwic2lkZS10b2dnbGUiLDQsIm5nSWYiXSxbMSwic2lkZWJhci1jb250YWluZXIiXSxbMSwic2lkZWJhci1jb250ZW50cyJdLFsxLCJydW4tc2VsZWN0b3IiXSxbMSwiZ3JhYmJlciIsMywibW91c2Vkb3duIl0sWzEsImFuYWx5c2lzLWNvbnRhaW5lciJdLFsxLCJhbm5vdGF0aW9ucy1saXN0Il0sWzEsIm5vUnVuIl0sWzEsInNpZGUtdG9nZ2xlIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIix0LDMsImNsaWNrIl0sWyJzdmdJY29uIiwiY2hldnJvbl9yaWdodF8yNHB4Il1dfSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7aWYoMSZlJiYod3UoMCwibnBtaS1kYXRhLXNlbGVjdGlvbiIpLE91KDEsImRpdiIsMCksTnUoIm1vdXNldXAiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ucmVzaXplUmVsZWFzZWQuZW1pdCgpfSkpKCJtb3VzZW1vdmUiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLnJlc2l6ZVRyaWdnZXJlZC5lbWl0KGUpfSkpLFdtKDIsTF90LDQsMiwiZGl2IiwxKSxXbSgzLEJfdCwxLDAsImRpdiIsMiksV20oNCxWX3QsMywwLCJkaXYiLDMpLFdtKDUsal90LDIsMCwibmctdGVtcGxhdGUiLG51bGwsNCxLYiksUHUoKSxXbSg3LFVfdCwzLDAsImRpdiIsNSkpLDImZSl7Y29uc3QgdD1HbSg2KTtKYygyKSx2dSgibmdJZiIsbi5zaWRlYmFyRXhwYW5kZWQpLEpjKDEpLHZ1KCJuZ0lmIixuLnNpZGViYXJFeHBhbmRlZCksSmMoMSksdnUoIm5nSWYiLCEwPT09bi5ydW5BY3RpdmUpKCJuZ0lmRWxzZSIsdCksSmMoMyksdnUoIm5nSWYiLCFuLnNpZGViYXJFeHBhbmRlZCl9fSxkaXJlY3RpdmVzOltTeXQsYXYsQTIseF90LEFfdCxOSCxjR10sc3R5bGVzOlsnLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEycHg7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtYmFkZ2Utc21hbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6OXB4fS5tYXQtYmFkZ2UtbGFyZ2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweH0ubWF0LWgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1oZWFkbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMjRweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNnB4LzI4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNXB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC44MykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtaDZbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuNjcpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWJvZHktc3Ryb25nW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjAgMCAxMnB4fS5tYXQtc21hbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDEycHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjMwMCAxMTJweC8xMTJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDVlbTttYXJnaW46MCAwIDU2cHh9Lm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDU2cHgvNTZweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDJlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDQ1cHgvNDhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDA1ZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAzNHB4LzQwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDY0cHh9Lm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcmFpc2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0cm9rZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mbGF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmFiW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1taW5pLWZhYltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWJ1dHRvbi10b2dnbGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhcmQtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjIwcHh9Lm1hdC1jYXJkLXN1YnRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2hlY2tib3hbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNoZWNrYm94LWxheW91dFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoZWNrYm94LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoyNHB4fS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtdHJhaWxpbmctaWNvbi5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtcmVtb3ZlLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MThweH0ubWF0LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1oZWFkZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2VsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9vdGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2FsZW5kYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhbGVuZGFyLWJvZHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxM3B4fS5tYXQtY2FsZW5kYXItYm9keS1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FsZW5kYXItcGVyaW9kLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo0MDB9Lm1hdC1kaWFsb2ctdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjEyNTtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE1MCU7bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS41ZW07d2lkdGg6MS41ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNWVtIDA7Ym9yZGVyLXRvcDouODQzNzVlbSBzb2xpZCB0cmFuc3BhcmVudH0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6LTAuODQzNzVlbTtwYWRkaW5nLXRvcDouODQzNzVlbX0ubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo3NSU7bWFyZ2luLXRvcDouNjY2NjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjc5MTY2NjY2NjdlbSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNDM3NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMnB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjNlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM1MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjI4MTI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDouNTQxNjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjY2NjY2NjY2NjdlbSl9QG1lZGlhIHByaW50ey5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMmVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMWVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTJlbSkgc2NhbGUoMC43NSl9fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi4yNWVtIDAgLjc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMDkzNzVlbTttYXJnaW4tdG9wOi0wLjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjFlbSAwIDFlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS44NDM3NWVtO21hcmdpbi10b3A6LTAuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9aW5wdXQubWF0LWlucHV0LWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LTAuMDYyNWVtfS5tYXQtbWVudS1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtcGFnaW5hdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweH0ubWF0LXJhZGlvLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW19Lm1hdC1zbGlkZS10b2dnbGUtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdGVwcGVyLWhvcml6b250YWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXN0ZXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXN0ZXAtc3ViLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDpub3JtYWx9Lm1hdC1zdGVwLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LXN0ZXAtbGFiZWwtc2VsZWN0ZWRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRhYi1ncm91cFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdGFiLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10YWItbGlua1tfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowfS5tYXQtdG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB4O3BhZGRpbmctdG9wOjZweDtwYWRkaW5nLWJvdHRvbTo2cHh9Lm1hdC10b29sdGlwLWhhbmRzZXRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9Lm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE2cHh9Lm1hdC1vcHRncm91cC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1zaW1wbGUtc25hY2tiYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweH0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb25bX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjE7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo1MDB9Lm1hdC10cmVlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW5lc3RlZC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjQwMDtmb250LXNpemU6MTRweH0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmVtcHR5KXt0cmFuc2Zvcm06dHJhbnNsYXRlWigwKX0ubWF0LXJpcHBsZS5tYXQtcmlwcGxlLXVuYm91bmRlZFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItcmFkaXVzOjUwJTtwb2ludGVyLWV2ZW50czpub25lO3RyYW5zaXRpb246b3BhY2l0eSx0cmFuc2Zvcm0gMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpO3RyYW5zZm9ybTpzY2FsZSgwKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6bm9uZX0uY2RrLXZpc3VhbGx5LWhpZGRlbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjA7Y2xpcDpyZWN0KDAgMCAwIDApO2hlaWdodDoxcHg7bWFyZ2luOi0xcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwO291dGxpbmU6MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb2ludGVyLWV2ZW50czpub25lO3RvcDowO2xlZnQ6MDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTplbXB0eXtkaXNwbGF5Om5vbmV9LmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1wYW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czphdXRvO2JveC1zaXppbmc6Ym9yZGVyLWJveDt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O21heC13aWR0aDoxMDAlO21heC1oZWlnaHQ6MTAwJX0uY2RrLW92ZXJsYXktYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO3otaW5kZXg6MTAwMDtwb2ludGVyLWV2ZW50czphdXRvOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDt0cmFuc2l0aW9uOm9wYWNpdHkgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSk7b3BhY2l0eTowfS5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjF9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAuY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTouNn0uY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4zMil9LmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MH0uY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWluLXdpZHRoOjFweDttaW4taGVpZ2h0OjFweH0uY2RrLWdsb2JhbC1zY3JvbGxibG9ja1tfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7d2lkdGg6MTAwJTtvdmVyZmxvdy15OnNjcm9sbH1Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0e31Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZHt9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbHthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQgMHMgMW1zfS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOm5vdCg6LXdlYmtpdC1hdXRvZmlsbCl7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCAwcyAxbXN9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplW19uZ2NvbnRlbnQtJUNPTVAlXXtyZXNpemU6bm9uZX10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDphdXRvICFpbXBvcnRhbnQ7b3ZlcmZsb3c6aGlkZGVuICFpbXBvcnRhbnR9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZy1maXJlZm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDowICFpbXBvcnRhbnR9Lm1hdC1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtbWRjLWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9W19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2hlaWdodDoxMDAlfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleDoxO21pbi1oZWlnaHQ6MHB4O3dpZHRoOjEwMCV9LnNpZGViYXItY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59LnNpZGViYXItY29udGVudHNbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWluLXdpZHRoOjE1MHB4fS5hbmFseXNpcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47aGVpZ2h0OjEwMCU7ZmxleDoxIDF9LnJ1bi1zZWxlY3Rvcltfbmdjb250ZW50LSVDT01QJV17bWF4LWhlaWdodDoxMDAlO3dpZHRoOjEwMCV9LnNpZGUtdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDozMHB4O2hlaWdodDozMHB4O3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MTBweDtib3R0b206MTBweDtib3JkZXI6MXB4IHNvbGlkICNlYmViZWI7Ym9yZGVyLXJhZGl1czozcHg7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5ncmFiYmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtjb250ZW50OiIiO2N1cnNvcjpldy1yZXNpemU7aGVpZ2h0OjEwMCU7d2lkdGg6M3B4O292ZXJmbG93OmhpZGRlbjtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0uYW5ub3RhdGlvbnMtbGlzdFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJTttaW4taGVpZ2h0OjBweDtmbGV4OjEgMX0nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoV190LFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6ImVtYmVkZGluZ3MtY29tcG9uZW50Iix0ZW1wbGF0ZVVybDoiLi9lbWJlZGRpbmdzX2NvbXBvbmVudC5uZy5odG1sIixzdHlsZVVybHM6WyIuL2VtYmVkZGluZ3NfY29tcG9uZW50LmNzcyJdLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2h9XX1dLG51bGwse3J1bkFjdGl2ZTpbe3R5cGU6eV99XSxzaWRlYmFyRXhwYW5kZWQ6W3t0eXBlOnlffV0sc2lkZWJhcldpZHRoOlt7dHlwZTp5X31dLHRvZ2dsZVNpZGViYXJFeHBhbmRlZDpbe3R5cGU6X199XSxyZXNpemVUcmlnZ2VyZWQ6W3t0eXBlOl9ffV0scmVzaXplR3JhYmJlZDpbe3R5cGU6X199XSxyZXNpemVSZWxlYXNlZDpbe3R5cGU6X199XX0pO2NsYXNzIEdfdHtjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXQsdGhpcy5ydW5BY3RpdmUkPXRoaXMuc3RvcmUucGlwZShSayh2TikpLnBpcGUoaHQoKHQ9PiEhdCYmWy4uLnQudmFsdWVzKCldLmluY2x1ZGVzKCEwKSkpKSx0aGlzLnNpZGViYXJFeHBhbmRlZCQ9dGhpcy5zdG9yZS5waXBlKFJrKHBidCkpLHRoaXMuc2lkZWJhcldpZHRoJD10aGlzLnN0b3JlLnBpcGUoUmsoZGJ0KSksdGhpcy5yZXNpemluZz0hMX1vblRvZ2dsZVNpZGViYXJFeHBhbmRlZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goemJ0KCkpfW9uUmVzaXplVHJpZ2dlcmVkKHQpe3RoaXMucmVzaXppbmcmJnRoaXMuc3RvcmUuZGlzcGF0Y2goSWJ0KHtzaWRlYmFyV2lkdGg6dC5jbGllbnRYfSkpfW9uUmVzaXplR3JhYmJlZCgpe3RoaXMucmVzaXppbmc9ITB9b25SZXNpemVSZWxlYXNlZCgpe3RoaXMucmVzaXppbmc9ITF9fWZ1bmN0aW9uIFlfdCh0LGUpezEmdCYmd3UoMCwibnBtaS1pbmFjdGl2ZS12aWV3Iil9ZnVuY3Rpb24gcV90KHQsZSl7MSZ0JiZ3dSgwLCJucG1pLW1haW4iKX1mdW5jdGlvbiBaX3QodCxlKXsxJnQmJnd1KDAsIm5wbWktZW1iZWRkaW5ncyIpfWZ1bmN0aW9uIFhfdCh0LGUpe2lmKDEmdCYmKFdtKDAscV90LDEsMCwibnBtaS1tYWluIiwzKSxXbSgxLFpfdCwxLDAsIm5wbWktZW1iZWRkaW5ncyIsMykpLDImdCl7Y29uc3QgdD1MdSgpO3Z1KCJuZ0lmIix0LmFjdGl2ZVZpZXc9PT10LlZpZXdBY3RpdmUuREVGQVVMVCksSmMoMSksdnUoIm5nSWYiLHQuYWN0aXZlVmlldz09PXQuVmlld0FjdGl2ZS5FTUJFRERJTkdTKX19R190Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxHX3QpKE11KEVrKSl9LEdfdC7JtWNtcD1Vbyh7dHlwZTpHX3Qsc2VsZWN0b3JzOltbIm5wbWktZW1iZWRkaW5ncyJdXSxkZWNsczo0LHZhcnM6OSxjb25zdHM6W1szLCJydW5BY3RpdmUiLCJzaWRlYmFyRXhwYW5kZWQiLCJzaWRlYmFyV2lkdGgiLCJ0b2dnbGVTaWRlYmFyRXhwYW5kZWQiLCJyZXNpemVUcmlnZ2VyZWQiLCJyZXNpemVHcmFiYmVkIiwicmVzaXplUmVsZWFzZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKE91KDAsImVtYmVkZGluZ3MtY29tcG9uZW50IiwwKSxOdSgidG9nZ2xlU2lkZWJhckV4cGFuZGVkIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uVG9nZ2xlU2lkZWJhckV4cGFuZGVkKCl9KSkoInJlc2l6ZVRyaWdnZXJlZCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25SZXNpemVUcmlnZ2VyZWQoZSl9KSkoInJlc2l6ZUdyYWJiZWQiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub25SZXNpemVHcmFiYmVkKCl9KSkoInJlc2l6ZVJlbGVhc2VkIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uUmVzaXplUmVsZWFzZWQoKX0pKSxPYigxLCJhc3luYyIpLE9iKDIsImFzeW5jIiksT2IoMywiYXN5bmMiKSxQdSgpKSwyJmUmJnZ1KCJydW5BY3RpdmUiLFBiKDEsMyxuLnJ1bkFjdGl2ZSQpKSgic2lkZWJhckV4cGFuZGVkIixQYigyLDUsbi5zaWRlYmFyRXhwYW5kZWQkKSkoInNpZGViYXJXaWR0aCIsUGIoMyw3LG4uc2lkZWJhcldpZHRoJCkpfSxkaXJlY3RpdmVzOltXX3RdLHBpcGVzOltNdl0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihHX3QsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoibnBtaS1lbWJlZGRpbmdzIix0ZW1wbGF0ZTonXG4gICAgPGVtYmVkZGluZ3MtY29tcG9uZW50XG4gICAgICBbcnVuQWN0aXZlXT0icnVuQWN0aXZlJCB8IGFzeW5jIlxuICAgICAgW3NpZGViYXJFeHBhbmRlZF09InNpZGViYXJFeHBhbmRlZCQgfCBhc3luYyJcbiAgICAgIFtzaWRlYmFyV2lkdGhdPSJzaWRlYmFyV2lkdGgkIHwgYXN5bmMiXG4gICAgICAodG9nZ2xlU2lkZWJhckV4cGFuZGVkKT0ib25Ub2dnbGVTaWRlYmFyRXhwYW5kZWQoKSJcbiAgICAgIChyZXNpemVUcmlnZ2VyZWQpPSJvblJlc2l6ZVRyaWdnZXJlZCgkZXZlbnQpIlxuICAgICAgKHJlc2l6ZUdyYWJiZWQpPSJvblJlc2l6ZUdyYWJiZWQoKSJcbiAgICAgIChyZXNpemVSZWxlYXNlZCk9Im9uUmVzaXplUmVsZWFzZWQoKSJcbiAgICA+PC9lbWJlZGRpbmdzLWNvbXBvbmVudD5cbiAgJyxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6RWt9XX0pLG51bGwpO2NsYXNzIEtfdHtjb25zdHJ1Y3Rvcigpe3RoaXMuVmlld0FjdGl2ZT1CaHR9fUtfdC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8S190KX0sS190Lsm1Y21wPVVvKHt0eXBlOktfdCxzZWxlY3RvcnM6W1sibnBtaS1jb21wb25lbnQiXV0saW5wdXRzOntydW5zOiJydW5zIixhY3RpdmVWaWV3OiJhY3RpdmVWaWV3In0sZGVjbHM6NCx2YXJzOjIsY29uc3RzOltbMSwibnBtaS1jb250YWluZXIiXSxbNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJkYXRhQXZhaWxhYmxlIiwiIl0sWzQsIm5nSWYiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pe2lmKDEmZSYmKE91KDAsImRpdiIsMCksV20oMSxZX3QsMSwwLCJucG1pLWluYWN0aXZlLXZpZXciLDEpLFdtKDIsWF90LDIsMiwibmctdGVtcGxhdGUiLG51bGwsMixLYiksUHUoKSksMiZlKXtjb25zdCB0PUdtKDMpO0pjKDEpLHZ1KCJuZ0lmIiwwPT09bi5ydW5zLnNpemUpKCJuZ0lmRWxzZSIsdCl9fSxkaXJlY3RpdmVzOlthdixqaHQsRl90LEdfdF0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmZsZXg7aGVpZ2h0OjEwMCV9Lm5wbWktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjEgMX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoS190LFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6Im5wbWktY29tcG9uZW50Iix0ZW1wbGF0ZVVybDoiLi9ucG1pX2NvbXBvbmVudC5uZy5odG1sIixzdHlsZVVybHM6WyIuL25wbWlfY29tcG9uZW50LmNzcyJdLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2h9XX1dLG51bGwse3J1bnM6W3t0eXBlOnlffV0sYWN0aXZlVmlldzpbe3R5cGU6eV99XX0pO2NsYXNzIEpfdHtjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXQsdGhpcy5ydW5zJD10aGlzLnN0b3JlLnBpcGUoUmsodk4pKSx0aGlzLmFjdGl2ZVZpZXckPXRoaXMuc3RvcmUucGlwZShSayhzYnQpKX1uZ09uSW5pdCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2gobWJ0KCkpfX1KX3QuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEpfdCkoTXUoRWspKX0sSl90Lsm1Y21wPVVvKHt0eXBlOkpfdCxzZWxlY3RvcnM6W1sibnBtaSJdXSxkZWNsczozLHZhcnM6Nixjb25zdHM6W1szLCJydW5zIiwiYWN0aXZlVmlldyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYod3UoMCwibnBtaS1jb21wb25lbnQiLDApLE9iKDEsImFzeW5jIiksT2IoMiwiYXN5bmMiKSksMiZlJiZ2dSgicnVucyIsUGIoMSwyLG4ucnVucyQpKSgiYWN0aXZlVmlldyIsUGIoMiw0LG4uYWN0aXZlVmlldyQpKX0sZGlyZWN0aXZlczpbS190XSxwaXBlczpbTXZdLGVuY2Fwc3VsYXRpb246Mn0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoSl90LFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6Im5wbWkiLHRlbXBsYXRlOidcbiAgICA8bnBtaS1jb21wb25lbnRcbiAgICAgIFtydW5zXT0icnVucyQgfCBhc3luYyJcbiAgICAgIFthY3RpdmVWaWV3XT0iYWN0aXZlVmlldyQgfCBhc3luYyJcbiAgICA+PC9ucG1pLWNvbXBvbmVudD5cbiAgJ31dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkVrfV19KSxudWxsKTt2YXIgUV90PVl4KChmdW5jdGlvbih0LGUpe3ZhciBuPUd4JiZHeC5fX3ZhbHVlc3x8ZnVuY3Rpb24odCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdLG49MDtyZXR1cm4gZT9lLmNhbGwodCk6e25leHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdCYmbj49dC5sZW5ndGgmJih0PXZvaWQgMCkse3ZhbHVlOnQmJnRbbisrXSxkb25lOiF0fX19fTtmdW5jdGlvbiBvKHQsZSl7cmV0dXJuIE1hdGguZmxvb3IoZSgpKnQpfWZ1bmN0aW9uIGkodCl7Zm9yKHZhciBlPVtdLG49MDtuPHQ7bisrKWUucHVzaCh2b2lkIDApO3JldHVybiBlfWZ1bmN0aW9uIGEodCxlKXtyZXR1cm4gaSh0KS5tYXAoKGZ1bmN0aW9uKCl7cmV0dXJuIGV9KSl9ZnVuY3Rpb24gcih0KXtyZXR1cm4gYSh0LDApfWZ1bmN0aW9uIHModCl7cmV0dXJuIHQucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiB0K2V9KSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUudGF1UmFuZEludD1vLGUudGF1UmFuZD1mdW5jdGlvbiBsKHQpe3JldHVybiB0KCl9LGUubm9ybT1mdW5jdGlvbiBjKHQpe3ZhciBlLG8saT0wO3RyeXtmb3IodmFyIGE9bih0KSxyPWEubmV4dCgpOyFyLmRvbmU7cj1hLm5leHQoKSlpKz1NYXRoLnBvdyhyLnZhbHVlLDIpfWNhdGNoKHQpe2U9e2Vycm9yOnR9fWZpbmFsbHl7dHJ5e3ImJiFyLmRvbmUmJihvPWEucmV0dXJuKSYmby5jYWxsKGEpfWZpbmFsbHl7aWYoZSl0aHJvdyBlLmVycm9yfX1yZXR1cm4gTWF0aC5zcXJ0KGkpfSxlLmVtcHR5PWksZS5yYW5nZT1mdW5jdGlvbiBkKHQpe3JldHVybiBpKHQpLm1hcCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gZX0pKX0sZS5maWxsZWQ9YSxlLnplcm9zPXIsZS5vbmVzPWZ1bmN0aW9uIHAodCl7cmV0dXJuIGEodCwxKX0sZS5saW5lYXI9ZnVuY3Rpb24gbSh0LGUsbil7cmV0dXJuIGkobikubWFwKChmdW5jdGlvbihvLGkpe3JldHVybiB0K2kqKChlLXQpLyhuLTEpKX0pKX0sZS5zdW09cyxlLm1lYW49ZnVuY3Rpb24gdSh0KXtyZXR1cm4gcyh0KS90Lmxlbmd0aH0sZS5tYXg9ZnVuY3Rpb24gZih0KXtmb3IodmFyIGU9MCxuPTA7bjx0Lmxlbmd0aDtuKyspZT10W25dPmU/dFtuXTplO3JldHVybiBlfSxlLm1heDJkPWZ1bmN0aW9uIGcodCl7Zm9yKHZhciBlPTAsbj0wO248dC5sZW5ndGg7bisrKWZvcih2YXIgbz0wO288dFtuXS5sZW5ndGg7bysrKWU9dFtuXVtvXT5lP3Rbbl1bb106ZTtyZXR1cm4gZX0sZS5yZWplY3Rpb25TYW1wbGU9ZnVuY3Rpb24gaCh0LGUsbil7Zm9yKHZhciBpPXIodCksYT0wO2E8dDthKyspZm9yKHZhciBzPSEwO3M7KXtmb3IodmFyIGw9byhlLG4pLGM9ITEsZD0wO2Q8YTtkKyspaWYobD09PWlbZF0pe2M9ITA7YnJlYWt9Y3x8KHM9ITEpLGlbYV09bH1yZXR1cm4gaX0sZS5yZXNoYXBlMmQ9ZnVuY3Rpb24gYih0LGUsbil7dmFyIG89W10saT0wO2lmKHQubGVuZ3RoIT09ZSpuKXRocm93IG5ldyBFcnJvcigiQXJyYXkgZGltZW5zaW9ucyBtdXN0IG1hdGNoIGlucHV0IGxlbmd0aC4iKTtmb3IodmFyIGE9MDthPGU7YSsrKXtmb3IodmFyIHI9W10scz0wO3M8bjtzKyspci5wdXNoKHRbaV0pLGkrPTE7by5wdXNoKHIpfXJldHVybiBvfX0pKSwkX3Q9WXgoKGZ1bmN0aW9uKHQsZSl7dmFyIG49R3gmJkd4Ll9faW1wb3J0U3Rhcnx8ZnVuY3Rpb24odCl7aWYodCYmdC5fX2VzTW9kdWxlKXJldHVybiB0O3ZhciBlPXt9O2lmKG51bGwhPXQpZm9yKHZhciBuIGluIHQpT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwodCxuKSYmKGVbbl09dFtuXSk7cmV0dXJuIGUuZGVmYXVsdD10LGV9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1uKFFfdCk7ZnVuY3Rpb24gaSh0LGUpe3ZhciBuPWZ1bmN0aW9uKG4pe3JldHVybiBvLmVtcHR5KHQpLm1hcCgoZnVuY3Rpb24oKXtyZXR1cm4gby5maWxsZWQoZSxuKX0pKX0saT1bXTtyZXR1cm4gaS5wdXNoKG4oLTEpKSxpLnB1c2gobigxLzApKSxpLnB1c2gobigwKSksaX1mdW5jdGlvbiBhKHQsZSxuLG8saSl7ZT1NYXRoLmZsb29yKGUpO3ZhciBhPXRbMF1bZV07aWYobj49dFsxXVtlXVswXSlyZXR1cm4gMDtmb3IodmFyIHM9MDtzPGEubGVuZ3RoO3MrKylpZihvPT09YVtzXSlyZXR1cm4gMDtyZXR1cm4gcih0LGUsbixvLGkpfWZ1bmN0aW9uIHIodCxlLG4sbyxpKXt2YXIgYT10WzBdW2VdLHI9dFsxXVtlXSxzPXRbMl1bZV07aWYobj49clswXSlyZXR1cm4gMDtyWzBdPW4sYVswXT1vLHNbMF09aTtmb3IodmFyIGw9MCxjPTA7Oyl7dmFyIGQ9MipsKzEscD1kKzEsbT10WzBdWzBdLmxlbmd0aDtpZihkPj1tKWJyZWFrO2lmKHA+PW0pe2lmKCEocltkXT5uKSlicmVhaztjPWR9ZWxzZSBpZihyW2RdPj1yW3BdKXtpZighKG48cltkXSkpYnJlYWs7Yz1kfWVsc2V7aWYoIShuPHJbcF0pKWJyZWFrO2M9cH1yW2xdPXJbY10sYVtsXT1hW2NdLHNbbF09c1tjXSxsPWN9cmV0dXJuIHJbbF09bixhW2xdPW8sc1tsXT1pLDF9ZnVuY3Rpb24gcyh0LGUsbixvKXtmb3IoOzIqbysxPG47KXt2YXIgaT0yKm8rMSxhPWkrMSxyPW87aWYodFtyXTx0W2ldJiYocj1pKSxhPG4mJnRbcl08dFthXSYmKHI9YSkscj09PW8pYnJlYWs7dmFyIHM9dFtvXTt0W29dPXRbcl0sdFtyXT1zO3ZhciBsPWVbb107ZVtvXT1lW3JdLGVbcl09bCxvPXJ9fWUubWFrZUhlYXA9aSxlLnJlamVjdGlvblNhbXBsZT1mdW5jdGlvbiBsKHQsZSxuKXtmb3IodmFyIGk9by56ZXJvcyh0KSxhPTA7YTx0O2ErKyl7Zm9yKHZhciByPSEwLHM9MDtyOyl7cz1vLnRhdVJhbmRJbnQoZSxuKTtmb3IodmFyIGw9ITEsYz0wO2M8YTtjKyspaWYocz09PWlbY10pe2w9ITA7YnJlYWt9bHx8KHI9ITEpfWlbYV09c31yZXR1cm4gaX0sZS5oZWFwUHVzaD1hLGUudW5jaGVja2VkSGVhcFB1c2g9cixlLmJ1aWxkQ2FuZGlkYXRlcz1mdW5jdGlvbiBjKHQsZSxuLHIscyl7Zm9yKHZhciBsPWkoZSxyKSxjPTA7YzxlO2MrKylmb3IodmFyIGQ9MDtkPG47ZCsrKWlmKCEodFswXVtjXVtkXTwwKSl7dmFyIHA9dFswXVtjXVtkXSxtPXRbMl1bY11bZF0sdT1vLnRhdVJhbmQocyk7YShsLGMsdSxwLG0pLGEobCxwLHUsYyxtKSx0WzJdW2NdW2RdPTB9cmV0dXJuIGx9LGUuZGVoZWFwU29ydD1mdW5jdGlvbiBkKHQpe2Zvcih2YXIgZT10WzBdLG49dFsxXSxvPTA7bzxlLmxlbmd0aDtvKyspZm9yKHZhciBpPWVbb10sYT1uW29dLHI9MDtyPGkubGVuZ3RoLTE7cisrKXt2YXIgbD1pLmxlbmd0aC1yLTEsYz1hLmxlbmd0aC1yLTEsZD1pWzBdO2lbMF09aVtsXSxpW2xdPWQ7dmFyIHA9YVswXTthWzBdPWFbY10sYVtjXT1wLHMoYSxpLGMsMCl9cmV0dXJue2luZGljZXM6ZSx3ZWlnaHRzOm59fSxlLnNtYWxsZXN0RmxhZ2dlZD1mdW5jdGlvbiBwKHQsZSl7Zm9yKHZhciBuPXRbMF1bZV0sbz10WzFdW2VdLGk9dFsyXVtlXSxhPTEvMCxyPS0xLHM9MDtzPm4ubGVuZ3RoO3MrKykxPT09aVtzXSYmb1tzXTxhJiYoYT1vW3NdLHI9cyk7cmV0dXJuIHI+PTA/KGlbcl09MCxNYXRoLmZsb29yKG5bcl0pKTotMX19KSksdEN0PVl4KChmdW5jdGlvbih0LGUpe3ZhciBuLG89R3gmJkd4Ll9fcmVhZHx8ZnVuY3Rpb24odCxlKXt2YXIgbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl07aWYoIW4pcmV0dXJuIHQ7dmFyIG8saSxhPW4uY2FsbCh0KSxyPVtdO3RyeXtmb3IoOyh2b2lkIDA9PT1lfHxlLS0gPjApJiYhKG89YS5uZXh0KCkpLmRvbmU7KXIucHVzaChvLnZhbHVlKX1jYXRjaCh0KXtpPXtlcnJvcjp0fX1maW5hbGx5e3RyeXtvJiYhby5kb25lJiYobj1hLnJldHVybikmJm4uY2FsbChhKX1maW5hbGx5e2lmKGkpdGhyb3cgaS5lcnJvcn19cmV0dXJuIHJ9LGk9R3gmJkd4Ll9fdmFsdWVzfHxmdW5jdGlvbih0KXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl0sbj0wO3JldHVybiBlP2UuY2FsbCh0KTp7bmV4dDpmdW5jdGlvbigpe3JldHVybiB0JiZuPj10Lmxlbmd0aCYmKHQ9dm9pZCAwKSx7dmFsdWU6dCYmdFtuKytdLGRvbmU6IXR9fX19LGE9R3gmJkd4Ll9faW1wb3J0U3Rhcnx8ZnVuY3Rpb24odCl7aWYodCYmdC5fX2VzTW9kdWxlKXJldHVybiB0O3ZhciBlPXt9O2lmKG51bGwhPXQpZm9yKHZhciBuIGluIHQpT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwodCxuKSYmKGVbbl09dFtuXSk7cmV0dXJuIGUuZGVmYXVsdD10LGV9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1hKFFfdCkscz0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLG8pe2lmKHRoaXMuZW50cmllcz1uZXcgTWFwLHRoaXMublJvd3M9MCx0aGlzLm5Db2xzPTAsdC5sZW5ndGghPT1lLmxlbmd0aHx8dC5sZW5ndGghPT1uLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoInJvd3MsIGNvbHMgYW5kIHZhbHVlcyBhcnJheXMgbXVzdCBhbGwgaGF2ZSB0aGUgc2FtZSBsZW5ndGgiKTt0aGlzLm5Sb3dzPW9bMF0sdGhpcy5uQ29scz1vWzFdO2Zvcih2YXIgaT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgYT10W2ldLHI9ZVtpXTt0aGlzLmNoZWNrRGltcyhhLHIpO3ZhciBzPXRoaXMubWFrZUtleShhLHIpO3RoaXMuZW50cmllcy5zZXQocyx7dmFsdWU6bltpXSxyb3c6YSxjb2w6cn0pfX1yZXR1cm4gdC5wcm90b3R5cGUubWFrZUtleT1mdW5jdGlvbih0LGUpe3JldHVybiB0KyI6IitlfSx0LnByb3RvdHlwZS5jaGVja0RpbXM9ZnVuY3Rpb24odCxlKXtpZighKHQ8dGhpcy5uUm93cyYmZTx0aGlzLm5Db2xzKSl0aHJvdyBuZXcgRXJyb3IoInJvdyBhbmQvb3IgY29sIHNwZWNpZmllZCBvdXRzaWRlIG9mIG1hdHJpeCBkaW1lbnNpb25zIil9LHQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0LGUsbil7dGhpcy5jaGVja0RpbXModCxlKTt2YXIgbz10aGlzLm1ha2VLZXkodCxlKTt0aGlzLmVudHJpZXMuaGFzKG8pP3RoaXMuZW50cmllcy5nZXQobykudmFsdWU9bjp0aGlzLmVudHJpZXMuc2V0KG8se3ZhbHVlOm4scm93OnQsY29sOmV9KX0sdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQsZSxuKXt2b2lkIDA9PT1uJiYobj0wKSx0aGlzLmNoZWNrRGltcyh0LGUpO3ZhciBvPXRoaXMubWFrZUtleSh0LGUpO3JldHVybiB0aGlzLmVudHJpZXMuaGFzKG8pP3RoaXMuZW50cmllcy5nZXQobykudmFsdWU6bn0sdC5wcm90b3R5cGUuZ2V0QWxsPWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PSEwKTt2YXIgZT1bXTtyZXR1cm4gdGhpcy5lbnRyaWVzLmZvckVhY2goKGZ1bmN0aW9uKHQpe2UucHVzaCh0KX0pKSx0JiZlLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQucm93PT09ZS5yb3c/dC5jb2wtZS5jb2w6dC5yb3ctZS5yb3d9KSksZX0sdC5wcm90b3R5cGUuZ2V0RGltcz1mdW5jdGlvbigpe3JldHVyblt0aGlzLm5Sb3dzLHRoaXMubkNvbHNdfSx0LnByb3RvdHlwZS5nZXRSb3dzPWZ1bmN0aW9uKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5lbnRyaWVzLChmdW5jdGlvbih0KXtyZXR1cm4gbyh0LDIpWzFdLnJvd30pKX0sdC5wcm90b3R5cGUuZ2V0Q29scz1mdW5jdGlvbigpe3JldHVybiBBcnJheS5mcm9tKHRoaXMuZW50cmllcywoZnVuY3Rpb24odCl7cmV0dXJuIG8odCwyKVsxXS5jb2x9KSl9LHQucHJvdG90eXBlLmdldFZhbHVlcz1mdW5jdGlvbigpe3JldHVybiBBcnJheS5mcm9tKHRoaXMuZW50cmllcywoZnVuY3Rpb24odCl7cmV0dXJuIG8odCwyKVsxXS52YWx1ZX0pKX0sdC5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbih0KXt0aGlzLmVudHJpZXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIHQoZS52YWx1ZSxlLnJvdyxlLmNvbCl9KSl9LHQucHJvdG90eXBlLm1hcD1mdW5jdGlvbihlKXt2YXIgbj1bXTt0aGlzLmVudHJpZXMuZm9yRWFjaCgoZnVuY3Rpb24odCl7bi5wdXNoKGUodC52YWx1ZSx0LnJvdyx0LmNvbCkpfSkpO3ZhciBvPVt0aGlzLm5Sb3dzLHRoaXMubkNvbHNdO3JldHVybiBuZXcgdCh0aGlzLmdldFJvd3MoKSx0aGlzLmdldENvbHMoKSxuLG8pfSx0LnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXIuZW1wdHkodGhpcy5uUm93cykubWFwKChmdW5jdGlvbigpe3JldHVybiByLnplcm9zKHQubkNvbHMpfSkpO3JldHVybiB0aGlzLmVudHJpZXMuZm9yRWFjaCgoZnVuY3Rpb24odCl7ZVt0LnJvd11bdC5jb2xdPXQudmFsdWV9KSksZX0sdH0pKCk7ZS5TcGFyc2VNYXRyaXg9cyxlLnRyYW5zcG9zZT1mdW5jdGlvbiBsKHQpe3ZhciBlPVtdLG49W10sbz1bXTtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbih0LGksYSl7ZS5wdXNoKGkpLG4ucHVzaChhKSxvLnB1c2godCl9KSksbmV3IHMobixlLG8sW3QubkNvbHMsdC5uUm93c10pfSxlLmlkZW50aXR5PWZ1bmN0aW9uIGModCl7Zm9yKHZhciBlPW8odCwxKVswXSxuPW5ldyBzKFtdLFtdLFtdLHQpLGk9MDtpPGU7aSsrKW4uc2V0KGksaSwxKTtyZXR1cm4gbn0sZS5wYWlyd2lzZU11bHRpcGx5PWZ1bmN0aW9uIGQodCxlKXtyZXR1cm4geSh0LGUsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQqZX0pKX0sZS5hZGQ9ZnVuY3Rpb24gcCh0LGUpe3JldHVybiB5KHQsZSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlfSkpfSxlLnN1YnRyYWN0PWZ1bmN0aW9uIG0odCxlKXtyZXR1cm4geSh0LGUsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pKX0sZS5tYXhpbXVtPWZ1bmN0aW9uIHUodCxlKXtyZXR1cm4geSh0LGUsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+ZT90OmV9KSl9LGUubXVsdGlwbHlTY2FsYXI9ZnVuY3Rpb24gZih0LGUpe3JldHVybiB0Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQqZX0pKX0sZS5lbGltaW5hdGVaZXJvcz1mdW5jdGlvbiBnKHQpe2Zvcih2YXIgZT1uZXcgU2V0LG49dC5nZXRWYWx1ZXMoKSxvPXQuZ2V0Um93cygpLGk9dC5nZXRDb2xzKCksYT0wO2E8bi5sZW5ndGg7YSsrKTA9PT1uW2FdJiZlLmFkZChhKTt2YXIgcj1mdW5jdGlvbih0LG4pe3JldHVybiFlLmhhcyhuKX0sbD1uLmZpbHRlcihyKSxjPW8uZmlsdGVyKHIpLGQ9aS5maWx0ZXIocik7cmV0dXJuIG5ldyBzKGMsZCxsLHQuZ2V0RGltcygpKX0sZS5ub3JtYWxpemU9ZnVuY3Rpb24gaCh0LGUpe3ZhciBuLG87dm9pZCAwPT09ZSYmKGU9ImwyIik7dmFyIGE9YltlXSxyPW5ldyBNYXA7dC5mb3JFYWNoKChmdW5jdGlvbih0LGUsbil7dmFyIG89ci5nZXQoZSl8fFtdO28ucHVzaChuKSxyLnNldChlLG8pfSkpO3ZhciBsPW5ldyBzKFtdLFtdLFtdLHQuZ2V0RGltcygpKSxjPWZ1bmN0aW9uKGUpe2Zvcih2YXIgbj1yLmdldChlKS5zb3J0KCksbz1uLm1hcCgoZnVuY3Rpb24obil7cmV0dXJuIHQuZ2V0KGUsbil9KSksaT1hKG8pLHM9MDtzPGkubGVuZ3RoO3MrKylsLnNldChlLG5bc10saVtzXSl9O3RyeXtmb3IodmFyIGQ9aShyLmtleXMoKSkscD1kLm5leHQoKTshcC5kb25lO3A9ZC5uZXh0KCkpYyhwLnZhbHVlKX1jYXRjaCh0KXtuPXtlcnJvcjp0fX1maW5hbGx5e3RyeXtwJiYhcC5kb25lJiYobz1kLnJldHVybikmJm8uY2FsbChkKX1maW5hbGx5e2lmKG4pdGhyb3cgbi5lcnJvcn19cmV0dXJuIGx9O3ZhciBiPSgobj17fSkubWF4PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0tMS8wLG49MDtuPHQubGVuZ3RoO24rKyllPXRbbl0+ZT90W25dOmU7cmV0dXJuIHQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC9lfSkpfSxuLmwxPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLG49MDtuPHQubGVuZ3RoO24rKyllKz10W25dO3JldHVybiB0Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQvZX0pKX0sbi5sMj1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxuPTA7bjx0Lmxlbmd0aDtuKyspZSs9TWF0aC5wb3codFtuXSwyKTtyZXR1cm4gdC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnNxcnQoTWF0aC5wb3codCwyKS9lKX0pKX0sbik7ZnVuY3Rpb24geSh0LGUsbil7Zm9yKHZhciBvPW5ldyBTZXQsaT1bXSxhPVtdLHI9W10sbD1mdW5jdGlvbihvLHMpe2kucHVzaChvKSxhLnB1c2gocyk7dmFyIGw9bih0LmdldChvLHMpLGUuZ2V0KG8scykpO3IucHVzaChsKX0sYz10LmdldFZhbHVlcygpLGQ9dC5nZXRSb3dzKCkscD10LmdldENvbHMoKSxtPTA7bTxjLmxlbmd0aDttKyspby5hZGQoKGg9ZFttXSkrIjoiKyhiPXBbbV0pKSxsKGgsYik7dmFyIHU9ZS5nZXRWYWx1ZXMoKSxmPWUuZ2V0Um93cygpLGc9ZS5nZXRDb2xzKCk7Zm9yKG09MDttPHUubGVuZ3RoO20rKyl7dmFyIGgsYjtvLmhhcygoaD1mW21dKSsiOiIrKGI9Z1ttXSkpfHxsKGgsYil9cmV0dXJuIG5ldyBzKGksYSxyLFt0Lm5Sb3dzLHQubkNvbHNdKX1lLmdldENTUj1mdW5jdGlvbiBfKHQpe3ZhciBlPVtdO3QuZm9yRWFjaCgoZnVuY3Rpb24odCxuLG8pe2UucHVzaCh7dmFsdWU6dCxyb3c6bixjb2w6b30pfSkpLGUuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5yb3c9PT1lLnJvdz90LmNvbC1lLmNvbDp0LnJvdy1lLnJvd30pKTtmb3IodmFyIG49W10sbz1bXSxpPVtdLGE9LTEscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgcz1lW3JdLGw9cy5yb3csYz1zLmNvbCxkPXMudmFsdWU7bCE9PWEmJihhPWwsaS5wdXNoKHIpKSxuLnB1c2goYyksby5wdXNoKGQpfXJldHVybntpbmRpY2VzOm4sdmFsdWVzOm8saW5kcHRyOml9fX0pKSxlQ3Q9WXgoKGZ1bmN0aW9uKHQsZSl7dmFyIG49R3gmJkd4Ll9fcmVhZHx8ZnVuY3Rpb24odCxlKXt2YXIgbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl07aWYoIW4pcmV0dXJuIHQ7dmFyIG8saSxhPW4uY2FsbCh0KSxyPVtdO3RyeXtmb3IoOyh2b2lkIDA9PT1lfHxlLS0gPjApJiYhKG89YS5uZXh0KCkpLmRvbmU7KXIucHVzaChvLnZhbHVlKX1jYXRjaCh0KXtpPXtlcnJvcjp0fX1maW5hbGx5e3RyeXtvJiYhby5kb25lJiYobj1hLnJldHVybikmJm4uY2FsbChhKX1maW5hbGx5e2lmKGkpdGhyb3cgaS5lcnJvcn19cmV0dXJuIHJ9LG89R3gmJkd4Ll9fc3ByZWFkfHxmdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0PXQuY29uY2F0KG4oYXJndW1lbnRzW2VdKSk7cmV0dXJuIHR9LGk9R3gmJkd4Ll9fdmFsdWVzfHxmdW5jdGlvbih0KXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl0sbj0wO3JldHVybiBlP2UuY2FsbCh0KTp7bmV4dDpmdW5jdGlvbigpe3JldHVybiB0JiZuPj10Lmxlbmd0aCYmKHQ9dm9pZCAwKSx7dmFsdWU6dCYmdFtuKytdLGRvbmU6IXR9fX19LGE9R3gmJkd4Ll9faW1wb3J0U3Rhcnx8ZnVuY3Rpb24odCl7aWYodCYmdC5fX2VzTW9kdWxlKXJldHVybiB0O3ZhciBlPXt9O2lmKG51bGwhPXQpZm9yKHZhciBuIGluIHQpT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwodCxuKSYmKGVbbl09dFtuXSk7cmV0dXJuIGUuZGVmYXVsdD10LGV9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcixzPWEoUV90KTtmdW5jdGlvbiBsKHQsZSxuLG8saSl7aWYodm9pZCAwPT09biYmKG49MzApLGUubGVuZ3RoPm4pe3ZhciBhPShmdW5jdGlvbiByKHQsZSxuKXtmb3IodmFyIG89dFswXS5sZW5ndGgsaT1zLnRhdVJhbmRJbnQoZS5sZW5ndGgsbiksYT1zLnRhdVJhbmRJbnQoZS5sZW5ndGgsbikscj1lW2ldLGw9ZVthPShhKz1pPT09YT8xOjApJWUubGVuZ3RoXSxjPTAsZD1zLnplcm9zKG8pLHA9MDtwPGQubGVuZ3RoO3ArKylkW3BdPXRbcl1bcF0tdFtsXVtwXSxjLT1kW3BdKih0W3JdW3BdK3RbbF1bcF0pLzI7dmFyIG09MCx1PTAsZj1zLnplcm9zKGUubGVuZ3RoKTtmb3IocD0wO3A8ZS5sZW5ndGg7cCsrKXtmb3IodmFyIGc9YyxoPTA7aDxvO2grKylnKz1kW2hdKnRbZVtwXV1baF07MD09PWc/KGZbcF09cy50YXVSYW5kSW50KDIsbiksMD09PWZbcF0/bSs9MTp1Kz0xKTpnPjA/KGZbcF09MCxtKz0xKTooZltwXT0xLHUrPTEpfXZhciBiPXMuemVyb3MobSkseT1zLnplcm9zKHUpO2ZvcihtPTAsdT0wLHA9MDtwPGYubGVuZ3RoO3ArKykwPT09ZltwXT8oYlttXT1lW3BdLG0rPTEpOih5W3VdPWVbcF0sdSs9MSk7cmV0dXJue2luZGljZXNMZWZ0OmIsaW5kaWNlc1JpZ2h0OnksaHlwZXJwbGFuZTpkLG9mZnNldDpjfX0pKHQsZSxpKSxjPWEuaW5kaWNlc1JpZ2h0LGQ9YS5oeXBlcnBsYW5lLHA9YS5vZmZzZXQ7cmV0dXJue2xlZnRDaGlsZDpsKHQsYS5pbmRpY2VzTGVmdCxuLG8rMSxpKSxyaWdodENoaWxkOmwodCxjLG4sbysxLGkpLGlzTGVhZjohMSxoeXBlcnBsYW5lOmQsb2Zmc2V0OnB9fXJldHVybntpbmRpY2VzOmUsaXNMZWFmOiEwfX1mdW5jdGlvbiBjKHQsZSxuLGksYSxyLHMpe3ZhciBsO2lmKHQuaXNMZWFmKXJldHVybiBpW3JdWzBdPS1zLChsPWFbc10pLnNwbGljZS5hcHBseShsLG8oWzAsdC5pbmRpY2VzLmxlbmd0aF0sdC5pbmRpY2VzKSkse25vZGVOdW06cixsZWFmTnVtOnMrPTF9O2Vbcl09dC5oeXBlcnBsYW5lLG5bcl09dC5vZmZzZXQsaVtyXVswXT1yKzE7dmFyIGQ9cixwPWModC5sZWZ0Q2hpbGQsZSxuLGksYSxyKzEscyk7cmV0dXJuIHM9cC5sZWFmTnVtLGlbZF1bMV09KHI9cC5ub2RlTnVtKSsxLHtub2RlTnVtOihwPWModC5yaWdodENoaWxkLGUsbixpLGEscisxLHMpKS5ub2RlTnVtLGxlYWZOdW06cC5sZWFmTnVtfX1mdW5jdGlvbiBkKHQpe3JldHVybiB0LmlzTGVhZj8xOjErZCh0LmxlZnRDaGlsZCkrZCh0LnJpZ2h0Q2hpbGQpfWZ1bmN0aW9uIHAodCl7cmV0dXJuIHQuaXNMZWFmPzE6cCh0LmxlZnRDaGlsZCkrcCh0LnJpZ2h0Q2hpbGQpfWZ1bmN0aW9uIG0odCxlLG4sbyl7Zm9yKHZhciBpPWUsYT0wO2E8bi5sZW5ndGg7YSsrKWkrPXRbYV0qblthXTtyZXR1cm4gMD09PWk/cy50YXVSYW5kSW50KDIsbyk6aT4wPzA6MX1lLkZsYXRUcmVlPXI9ZnVuY3Rpb24gcih0LGUsbixvKXt0aGlzLmh5cGVycGxhbmVzPXQsdGhpcy5vZmZzZXRzPWUsdGhpcy5jaGlsZHJlbj1uLHRoaXMuaW5kaWNlcz1vfSxlLm1ha2VGb3Jlc3Q9ZnVuY3Rpb24gdSh0LGUsbixvKXt2YXIgaT1NYXRoLm1heCgxMCxlKTtyZXR1cm4gcy5yYW5nZShuKS5tYXAoKGZ1bmN0aW9uKGUsbil7cmV0dXJuKGZ1bmN0aW9uIGEodCxlLG4sbyl7cmV0dXJuIHZvaWQgMD09PWUmJihlPTMwKSxsKHQscy5yYW5nZSh0Lmxlbmd0aCksZSxuLG8pfSkodCxpLG4sbyl9KSkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4oZnVuY3Rpb24gZSh0LG4pe3ZhciBvPWQodCksaT1wKHQpLGE9cy5yYW5nZShvKS5tYXAoKGZ1bmN0aW9uKCl7cmV0dXJuIHMuemVyb3ModC5oeXBlcnBsYW5lP3QuaHlwZXJwbGFuZS5sZW5ndGg6MCl9KSksbD1zLnplcm9zKG8pLG09cy5yYW5nZShvKS5tYXAoKGZ1bmN0aW9uKCl7cmV0dXJuWy0xLC0xXX0pKSx1PXMucmFuZ2UoaSkubWFwKChmdW5jdGlvbigpe3JldHVybiBzLnJhbmdlKG4pLm1hcCgoZnVuY3Rpb24oKXtyZXR1cm4tMX0pKX0pKTtyZXR1cm4gYyh0LGEsbCxtLHUsMCwwKSxuZXcgcihhLGwsbSx1KX0pKHQsaSl9KSl9LGUubWFrZUxlYWZBcnJheT1mdW5jdGlvbiBmKHQpe3ZhciBlLG47aWYodC5sZW5ndGg+MCl7dmFyIGE9W107dHJ5e2Zvcih2YXIgcj1pKHQpLHM9ci5uZXh0KCk7IXMuZG9uZTtzPXIubmV4dCgpKWEucHVzaC5hcHBseShhLG8ocy52YWx1ZS5pbmRpY2VzKSl9Y2F0Y2godCl7ZT17ZXJyb3I6dH19ZmluYWxseXt0cnl7cyYmIXMuZG9uZSYmKG49ci5yZXR1cm4pJiZuLmNhbGwocil9ZmluYWxseXtpZihlKXRocm93IGUuZXJyb3J9fXJldHVybiBhfXJldHVybltbLTFdXX0sZS5zZWFyY2hGbGF0VHJlZT1mdW5jdGlvbiBnKHQsZSxuKXtmb3IodmFyIG89MDtlLmNoaWxkcmVuW29dWzBdPjA7KW89MD09PW0oZS5oeXBlcnBsYW5lc1tvXSxlLm9mZnNldHNbb10sdCxuKT9lLmNoaWxkcmVuW29dWzBdOmUuY2hpbGRyZW5bb11bMV07cmV0dXJuIGUuaW5kaWNlc1stMSplLmNoaWxkcmVuW29dWzBdXX19KSksbkN0PVl4KChmdW5jdGlvbih0LGUpe3ZhciBuPUd4JiZHeC5fX3ZhbHVlc3x8ZnVuY3Rpb24odCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdLG49MDtyZXR1cm4gZT9lLmNhbGwodCk6e25leHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdCYmbj49dC5sZW5ndGgmJih0PXZvaWQgMCkse3ZhbHVlOnQmJnRbbisrXSxkb25lOiF0fX19fSxvPUd4JiZHeC5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKHQpe2lmKHQmJnQuX19lc01vZHVsZSlyZXR1cm4gdDt2YXIgZT17fTtpZihudWxsIT10KWZvcih2YXIgbiBpbiB0KU9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbikmJihlW25dPXRbbl0pO3JldHVybiBlLmRlZmF1bHQ9dCxlfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGk9bygkX3QpLGE9byh0Q3QpLHI9byhlQ3QpLHM9byhRX3QpO2UubWFrZU5ORGVzY2VudD1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuIGZ1bmN0aW9uIG4obyxhLHIsbCxjLGQscCxtKXt2b2lkIDA9PT1sJiYobD0xMCksdm9pZCAwPT09YyYmKGM9NTApLHZvaWQgMD09PWQmJihkPS4wMDEpLHZvaWQgMD09PXAmJihwPS41KSx2b2lkIDA9PT1tJiYobT0hMCk7Zm9yKHZhciB1PW8ubGVuZ3RoLGY9aS5tYWtlSGVhcChvLmxlbmd0aCxyKSxnPTA7ZzxvLmxlbmd0aDtnKyspZm9yKHZhciBoPWkucmVqZWN0aW9uU2FtcGxlKHIsby5sZW5ndGgsZSksYj0wO2I8aC5sZW5ndGg7YisrKXt2YXIgeT10KG9bZ10sb1toW2JdXSk7aS5oZWFwUHVzaChmLGcseSxoW2JdLDEpLGkuaGVhcFB1c2goZixoW2JdLHksZywxKX1pZihtKWZvcih2YXIgXz0wO188YS5sZW5ndGg7XysrKWZvcihnPTA7ZzxhW19dLmxlbmd0aCYmIShhW19dW2ddPDApO2crKylmb3IoYj1nKzE7YjxhW19dLmxlbmd0aCYmIShhW19dW2JdPDApO2IrKyl5PXQob1thW19dW2ddXSxvW2FbX11bYl1dKSxpLmhlYXBQdXNoKGYsYVtfXVtnXSx5LGFbX11bYl0sMSksaS5oZWFwUHVzaChmLGFbX11bYl0seSxhW19dW2ddLDEpO2ZvcihfPTA7XzxsO18rKyl7dmFyIEM9aS5idWlsZENhbmRpZGF0ZXMoZix1LHIsYyxlKSxNPTA7Zm9yKGc9MDtnPHU7ZysrKWZvcihiPTA7YjxjO2IrKyl7dmFyIHY9TWF0aC5mbG9vcihDWzBdW2ddW2JdKTtpZighKHY8MHx8cy50YXVSYW5kKGUpPHApKWZvcih2YXIgeD0wO3g8Yzt4Kyspe3ZhciBPPU1hdGguZmxvb3IoQ1swXVtnXVt4XSk7TzwwfHwhQ1syXVtnXVtiXSYmIUNbMl1bZ11beF18fCh5PXQob1t2XSxvW09dKSxNKz1pLmhlYXBQdXNoKGYsdix5LE8sMSksTSs9aS5oZWFwUHVzaChmLE8seSx2LDEpKX19aWYoTTw9ZCpyKm8ubGVuZ3RoKWJyZWFrfXJldHVybiBpLmRlaGVhcFNvcnQoZil9fSxlLm1ha2VJbml0aWFsaXphdGlvbnM9ZnVuY3Rpb24gYyh0KXtyZXR1cm57aW5pdEZyb21SYW5kb206ZnVuY3Rpb24gZShuLG8sYSxyLGwpe2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKWZvcih2YXIgZD1zLnJlamVjdGlvblNhbXBsZShuLG8ubGVuZ3RoLGwpLHA9MDtwPGQubGVuZ3RoO3ArKylpZighKGRbcF08MCkpe3ZhciBtPXQob1tkW3BdXSxhW2NdKTtpLmhlYXBQdXNoKHIsYyxtLGRbcF0sMSl9fSxpbml0RnJvbVRyZWU6ZnVuY3Rpb24gbihlLG8sYSxzLGwpe2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKWZvcih2YXIgZD1yLnNlYXJjaEZsYXRUcmVlKGFbY10sZSxsKSxwPTA7cDxkLmxlbmd0aDtwKyspe2lmKGRbcF08MClyZXR1cm47dmFyIG09dChvW2RbcF1dLGFbY10pO2kuaGVhcFB1c2gocyxjLG0sZFtwXSwxKX19fX0sZS5tYWtlSW5pdGlhbGl6ZWROTlNlYXJjaD1mdW5jdGlvbiBkKHQpe3JldHVybiBmdW5jdGlvbiBlKG8scixzLGwpe2Zvcih2YXIgYyxkLHA9YS5nZXRDU1IociksbT1wLmluZGljZXMsdT1wLmluZHB0cixmPTA7ZjxsLmxlbmd0aDtmKyspZm9yKHZhciBnPW5ldyBTZXQoc1swXVtmXSk7Oyl7dmFyIGg9aS5zbWFsbGVzdEZsYWdnZWQocyxmKTtpZigtMT09PWgpYnJlYWs7dmFyIGI9bS5zbGljZSh1W2hdLHVbaCsxXSk7dHJ5e2Zvcih2YXIgeT1uKGIpLF89eS5uZXh0KCk7IV8uZG9uZTtfPXkubmV4dCgpKXt2YXIgQz1fLnZhbHVlO2lmKEMhPT1oJiYtMSE9PUMmJiFnLmhhcyhDKSl7dmFyIE09dChvW0NdLGxbZl0pO2kudW5jaGVja2VkSGVhcFB1c2gocyxmLE0sQywxKSxnLmFkZChDKX19fWNhdGNoKHQpe2M9e2Vycm9yOnR9fWZpbmFsbHl7dHJ5e18mJiFfLmRvbmUmJihkPXkucmV0dXJuKSYmZC5jYWxsKHkpfWZpbmFsbHl7aWYoYyl0aHJvdyBjLmVycm9yfX19cmV0dXJuIHN9fSxlLmluaXRpYWxpemVTZWFyY2g9ZnVuY3Rpb24gcCh0LGUsbyxhLHIscyxsKXt2YXIgYyxkLHA9aS5tYWtlSGVhcChvLmxlbmd0aCxhKTtpZihyKGEsZSxvLHAsbCksdCl0cnl7Zm9yKHZhciBtPW4odCksdT1tLm5leHQoKTshdS5kb25lO3U9bS5uZXh0KCkpcyh1LnZhbHVlLGUsbyxwLGwpfWNhdGNoKHQpe2M9e2Vycm9yOnR9fWZpbmFsbHl7dHJ5e3UmJiF1LmRvbmUmJihkPW0ucmV0dXJuKSYmZC5jYWxsKG0pfWZpbmFsbHl7aWYoYyl0aHJvdyBjLmVycm9yfX1yZXR1cm4gcH19KSk7Y29uc3Qgb0N0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7ZnVuY3Rpb24gaUN0KHQpe3JldHVybiBvQ3QuY2FsbCh0KS5lbmRzV2l0aCgiQXJyYXldIil9ZnVuY3Rpb24gYUN0KHQsZSxuKXtsZXQgbz0wO2NvbnN0IGk9bihlKTtmb3IobGV0IGU9MDtlPHQueC5sZW5ndGg7ZSsrKW8rPU1hdGguYWJzKHQueVtlXS1pKHQueFtlXSkpO3JldHVybiBvfWNvbnN0IHJDdD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO2Z1bmN0aW9uIHNDdCh0KXtyZXR1cm4gckN0LmNhbGwodCkuZW5kc1dpdGgoIkFycmF5XSIpfWZ1bmN0aW9uIGxDdCh0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307aWYoIXNDdCh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnB1dCBtdXN0IGJlIGFuIGFycmF5Iik7aWYoMD09PXQubGVuZ3RoKXRocm93IG5ldyBUeXBlRXJyb3IoImlucHV0IG11c3Qgbm90IGJlIGVtcHR5Iik7dmFyIG49ZS5mcm9tSW5kZXgsbz12b2lkIDA9PT1uPzA6bixpPWUudG9JbmRleCxhPXZvaWQgMD09PWk/dC5sZW5ndGg6aTtpZihvPDB8fG8+PXQubGVuZ3RofHwhTnVtYmVyLmlzSW50ZWdlcihvKSl0aHJvdyBuZXcgRXJyb3IoImZyb21JbmRleCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciBzbWFsbGVyIHRoYW4gbGVuZ3RoIik7aWYoYTw9b3x8YT50Lmxlbmd0aHx8IU51bWJlci5pc0ludGVnZXIoYSkpdGhyb3cgbmV3IEVycm9yKCJ0b0luZGV4IG11c3QgYmUgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gZnJvbUluZGV4IGFuZCBhdCBtb3N0IGVxdWFsIHRvIGxlbmd0aCIpO2Zvcih2YXIgcj10W29dLHM9bysxO3M8YTtzKyspdFtzXT5yJiYocj10W3NdKTtyZXR1cm4gcn1mdW5jdGlvbiBjQ3QodCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O2lmKCFzQ3QodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW5wdXQgbXVzdCBiZSBhbiBhcnJheSIpO2lmKDA9PT10Lmxlbmd0aCl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnB1dCBtdXN0IG5vdCBiZSBlbXB0eSIpO3ZhciBuPWUuZnJvbUluZGV4LG89dm9pZCAwPT09bj8wOm4saT1lLnRvSW5kZXgsYT12b2lkIDA9PT1pP3QubGVuZ3RoOmk7aWYobzwwfHxvPj10Lmxlbmd0aHx8IU51bWJlci5pc0ludGVnZXIobykpdGhyb3cgbmV3IEVycm9yKCJmcm9tSW5kZXggbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgc21hbGxlciB0aGFuIGxlbmd0aCIpO2lmKGE8PW98fGE+dC5sZW5ndGh8fCFOdW1iZXIuaXNJbnRlZ2VyKGEpKXRocm93IG5ldyBFcnJvcigidG9JbmRleCBtdXN0IGJlIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIGZyb21JbmRleCBhbmQgYXQgbW9zdCBlcXVhbCB0byBsZW5ndGgiKTtmb3IodmFyIHI9dFtvXSxzPW8rMTtzPGE7cysrKXRbc108ciYmKHI9dFtzXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gZEN0KHQpe3ZhciBlLG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O2lmKCFzQ3QodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW5wdXQgbXVzdCBiZSBhbiBhcnJheSIpO2lmKDA9PT10Lmxlbmd0aCl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnB1dCBtdXN0IG5vdCBiZSBlbXB0eSIpO2lmKHZvaWQgMCE9PW4ub3V0cHV0KXtpZighc0N0KG4ub3V0cHV0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJvdXRwdXQgb3B0aW9uIG11c3QgYmUgYW4gYXJyYXkgaWYgc3BlY2lmaWVkIik7ZT1uLm91dHB1dH1lbHNlIGU9bmV3IEFycmF5KHQubGVuZ3RoKTt2YXIgbz1jQ3QodCksaT1sQ3QodCk7aWYobz09PWkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm1pbmltdW0gYW5kIG1heGltdW0gaW5wdXQgdmFsdWVzIGFyZSBlcXVhbC4gQ2Fubm90IHJlc2NhbGUgYSBjb25zdGFudCBhcnJheSIpO3ZhciBhPW4ubWluLHI9dm9pZCAwPT09YT9uLmF1dG9NaW5NYXg/bzowOmEscz1uLm1heCxsPXZvaWQgMD09PXM/bi5hdXRvTWluTWF4P2k6MTpzO2lmKHI+PWwpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm1pbiBvcHRpb24gbXVzdCBiZSBzbWFsbGVyIHRoYW4gbWF4IG9wdGlvbiIpO2Zvcih2YXIgYz0obC1yKS8oaS1vKSxkPTA7ZDx0Lmxlbmd0aDtkKyspZVtkXT0odFtkXS1vKSpjK3I7cmV0dXJuIGV9Y29uc3QgcEN0PSIgIi5yZXBlYXQoMiksbUN0PSIgIi5yZXBlYXQoNCk7ZnVuY3Rpb24gdUN0KHQsZT17fSl7Y29uc3R7bWF4Um93czpuPTE1LG1heENvbHVtbnM6bz0xMCxtYXhOdW1TaXplOmk9OH09ZTtyZXR1cm5gJHt0LmNvbnN0cnVjdG9yLm5hbWV9IHtcbiR7cEN0fVtcbiR7bUN0fSR7KGZ1bmN0aW9uIGEodCxlLG4sbyl7Y29uc3R7cm93czppLGNvbHVtbnM6YX09dCxyPU1hdGgubWluKGksZSkscz1NYXRoLm1pbihhLG4pLGw9W107Zm9yKGxldCBlPTA7ZTxyO2UrKyl7bGV0IG49W107Zm9yKGxldCBpPTA7aTxzO2krKyluLnB1c2goZkN0KHQuZ2V0KGUsaSksbykpO2wucHVzaChgJHtuLmpvaW4oIiAiKX1gKX1yZXR1cm4gcyE9PWEmJihsW2wubGVuZ3RoLTFdKz1gIC4uLiAke2Etbn0gbW9yZSBjb2x1bW5zYCksciE9PWkmJmwucHVzaChgLi4uICR7aS1lfSBtb3JlIHJvd3NgKSxsLmpvaW4oYFxuJHttQ3R9YCl9KSh0LG4sbyxpKX1cbiR7cEN0fV1cbiR7cEN0fXJvd3M6ICR7dC5yb3dzfVxuJHtwQ3R9Y29sdW1uczogJHt0LmNvbHVtbnN9XG59YH1mdW5jdGlvbiBmQ3QodCxlKXtjb25zdCBuPVN0cmluZyh0KTtpZihuLmxlbmd0aDw9ZSlyZXR1cm4gbi5wYWRFbmQoZSwiICIpO2NvbnN0IG89dC50b1ByZWNpc2lvbihlLTIpO2lmKG8ubGVuZ3RoPD1lKXJldHVybiBvO2NvbnN0IGk9dC50b0V4cG9uZW50aWFsKGUtMiksYT1pLmluZGV4T2YoImUiKSxyPWkuc2xpY2UoYSk7cmV0dXJuIGkuc2xpY2UoMCxlLXIubGVuZ3RoKStyfWZ1bmN0aW9uIGdDdCh0LGUsbil7aWYoZTwwfHxlPihuP3Qucm93czp0LnJvd3MtMSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlJvdyBpbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBoQ3QodCxlLG4pe2lmKGU8MHx8ZT4obj90LmNvbHVtbnM6dC5jb2x1bW5zLTEpKXRocm93IG5ldyBSYW5nZUVycm9yKCJDb2x1bW4gaW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gYkN0KHQsZSl7aWYoZS50bzFEQXJyYXkmJihlPWUudG8xREFycmF5KCkpLGUubGVuZ3RoIT09dC5jb2x1bW5zKXRocm93IG5ldyBSYW5nZUVycm9yKCJ2ZWN0b3Igc2l6ZSBtdXN0IGJlIHRoZSBzYW1lIGFzIHRoZSBudW1iZXIgb2YgY29sdW1ucyIpO3JldHVybiBlfWZ1bmN0aW9uIHlDdCh0LGUpe2lmKGUudG8xREFycmF5JiYoZT1lLnRvMURBcnJheSgpKSxlLmxlbmd0aCE9PXQucm93cyl0aHJvdyBuZXcgUmFuZ2VFcnJvcigidmVjdG9yIHNpemUgbXVzdCBiZSB0aGUgc2FtZSBhcyB0aGUgbnVtYmVyIG9mIHJvd3MiKTtyZXR1cm4gZX1mdW5jdGlvbiBfQ3QodCxlKXtpZigib2JqZWN0IiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigidW5leHBlY3RlZCB0eXBlIGZvciByb3cgaW5kaWNlcyIpO2lmKGUuc29tZSgoZT0+ZTwwfHxlPj10LnJvd3MpKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigicm93IGluZGljZXMgYXJlIG91dCBvZiByYW5nZSIpO3JldHVybiBBcnJheS5pc0FycmF5KGUpfHwoZT1BcnJheS5mcm9tKGUpKSxlfWZ1bmN0aW9uIENDdCh0LGUpe2lmKCJvYmplY3QiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ1bmV4cGVjdGVkIHR5cGUgZm9yIGNvbHVtbiBpbmRpY2VzIik7aWYoZS5zb21lKChlPT5lPDB8fGU+PXQuY29sdW1ucykpKXRocm93IG5ldyBSYW5nZUVycm9yKCJjb2x1bW4gaW5kaWNlcyBhcmUgb3V0IG9mIHJhbmdlIik7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSl8fChlPUFycmF5LmZyb20oZSkpLGV9ZnVuY3Rpb24gTUN0KHQsZSxuLG8saSl7aWYoNSE9PWFyZ3VtZW50cy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoImV4cGVjdGVkIDQgYXJndW1lbnRzIik7aWYoeEN0KCJzdGFydFJvdyIsZSkseEN0KCJlbmRSb3ciLG4pLHhDdCgic3RhcnRDb2x1bW4iLG8pLHhDdCgiZW5kQ29sdW1uIixpKSxlPm58fG8+aXx8ZTwwfHxlPj10LnJvd3N8fG48MHx8bj49dC5yb3dzfHxvPDB8fG8+PXQuY29sdW1uc3x8aTwwfHxpPj10LmNvbHVtbnMpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlN1Ym1hdHJpeCBpbmRpY2VzIGFyZSBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiB2Q3QodCxlPTApe2xldCBuPVtdO2ZvcihsZXQgbz0wO288dDtvKyspbi5wdXNoKGUpO3JldHVybiBufWZ1bmN0aW9uIHhDdCh0LGUpe2lmKCJudW1iZXIiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKGAke3R9IG11c3QgYmUgYSBudW1iZXJgKX1mdW5jdGlvbiBPQ3QodCl7aWYodC5pc0VtcHR5KCkpdGhyb3cgbmV3IEVycm9yKCJFbXB0eSBtYXRyaXggaGFzIG5vIGVsZW1lbnRzIHRvIGluZGV4Iil9Y2xhc3MgUEN0e3N0YXRpYyBmcm9tMURBcnJheSh0LGUsbil7aWYodCplIT09bi5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoImRhdGEgbGVuZ3RoIGRvZXMgbm90IG1hdGNoIGdpdmVuIGRpbWVuc2lvbnMiKTtsZXQgbz1uZXcgU0N0KHQsZSk7Zm9yKGxldCBpPTA7aTx0O2krKylmb3IobGV0IHQ9MDt0PGU7dCsrKW8uc2V0KGksdCxuW2kqZSt0XSk7cmV0dXJuIG99c3RhdGljIHJvd1ZlY3Rvcih0KXtsZXQgZT1uZXcgU0N0KDEsdC5sZW5ndGgpO2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKWUuc2V0KDAsbix0W25dKTtyZXR1cm4gZX1zdGF0aWMgY29sdW1uVmVjdG9yKHQpe2xldCBlPW5ldyBTQ3QodC5sZW5ndGgsMSk7Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspZS5zZXQobiwwLHRbbl0pO3JldHVybiBlfXN0YXRpYyB6ZXJvcyh0LGUpe3JldHVybiBuZXcgU0N0KHQsZSl9c3RhdGljIG9uZXModCxlKXtyZXR1cm4gbmV3IFNDdCh0LGUpLmZpbGwoMSl9c3RhdGljIHJhbmQodCxlLG49e30pe2lmKCJvYmplY3QiIT10eXBlb2Ygbil0aHJvdyBuZXcgVHlwZUVycm9yKCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0Iik7Y29uc3R7cmFuZG9tOm89TWF0aC5yYW5kb219PW47bGV0IGk9bmV3IFNDdCh0LGUpO2ZvcihsZXQgbj0wO248dDtuKyspZm9yKGxldCB0PTA7dDxlO3QrKylpLnNldChuLHQsbygpKTtyZXR1cm4gaX1zdGF0aWMgcmFuZEludCh0LGUsbj17fSl7aWYoIm9iamVjdCIhPXR5cGVvZiBuKXRocm93IG5ldyBUeXBlRXJyb3IoIm9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QiKTtjb25zdHttaW46bz0wLG1heDppPTFlMyxyYW5kb206YT1NYXRoLnJhbmRvbX09bjtpZighTnVtYmVyLmlzSW50ZWdlcihvKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJtaW4gbXVzdCBiZSBhbiBpbnRlZ2VyIik7aWYoIU51bWJlci5pc0ludGVnZXIoaSkpdGhyb3cgbmV3IFR5cGVFcnJvcigibWF4IG11c3QgYmUgYW4gaW50ZWdlciIpO2lmKG8+PWkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm1pbiBtdXN0IGJlIHNtYWxsZXIgdGhhbiBtYXgiKTtsZXQgcj1pLW8scz1uZXcgU0N0KHQsZSk7Zm9yKGxldCBuPTA7bjx0O24rKylmb3IobGV0IHQ9MDt0PGU7dCsrKXtsZXQgZT1vK01hdGgucm91bmQoYSgpKnIpO3Muc2V0KG4sdCxlKX1yZXR1cm4gc31zdGF0aWMgZXllKHQsZSxuKXt2b2lkIDA9PT1lJiYoZT10KSx2b2lkIDA9PT1uJiYobj0xKTtsZXQgbz1NYXRoLm1pbih0LGUpLGk9dGhpcy56ZXJvcyh0LGUpO2ZvcihsZXQgdD0wO3Q8bzt0KyspaS5zZXQodCx0LG4pO3JldHVybiBpfXN0YXRpYyBkaWFnKHQsZSxuKXtsZXQgbz10Lmxlbmd0aDt2b2lkIDA9PT1lJiYoZT1vKSx2b2lkIDA9PT1uJiYobj1lKTtsZXQgaT1NYXRoLm1pbihvLGUsbiksYT10aGlzLnplcm9zKGUsbik7Zm9yKGxldCBlPTA7ZTxpO2UrKylhLnNldChlLGUsdFtlXSk7cmV0dXJuIGF9c3RhdGljIG1pbih0LGUpe3Q9dGhpcy5jaGVja01hdHJpeCh0KSxlPXRoaXMuY2hlY2tNYXRyaXgoZSk7bGV0IG49dC5yb3dzLG89dC5jb2x1bW5zLGk9bmV3IFNDdChuLG8pO2ZvcihsZXQgYT0wO2E8bjthKyspZm9yKGxldCBuPTA7bjxvO24rKylpLnNldChhLG4sTWF0aC5taW4odC5nZXQoYSxuKSxlLmdldChhLG4pKSk7cmV0dXJuIGl9c3RhdGljIG1heCh0LGUpe3Q9dGhpcy5jaGVja01hdHJpeCh0KSxlPXRoaXMuY2hlY2tNYXRyaXgoZSk7bGV0IG49dC5yb3dzLG89dC5jb2x1bW5zLGk9bmV3IHRoaXMobixvKTtmb3IobGV0IGE9MDthPG47YSsrKWZvcihsZXQgbj0wO248bztuKyspaS5zZXQoYSxuLE1hdGgubWF4KHQuZ2V0KGEsbiksZS5nZXQoYSxuKSkpO3JldHVybiBpfXN0YXRpYyBjaGVja01hdHJpeCh0KXtyZXR1cm4gUEN0LmlzTWF0cml4KHQpP3Q6bmV3IFNDdCh0KX1zdGF0aWMgaXNNYXRyaXgodCl7cmV0dXJuIG51bGwhPXQmJiJNYXRyaXgiPT09dC5rbGFzc31nZXQgc2l6ZSgpe3JldHVybiB0aGlzLnJvd3MqdGhpcy5jb2x1bW5zfWFwcGx5KHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIG11c3QgYmUgYSBmdW5jdGlvbiIpO2ZvcihsZXQgZT0wO2U8dGhpcy5yb3dzO2UrKylmb3IobGV0IG49MDtuPHRoaXMuY29sdW1ucztuKyspdC5jYWxsKHRoaXMsZSxuKTtyZXR1cm4gdGhpc310bzFEQXJyYXkoKXtsZXQgdD1bXTtmb3IobGV0IGU9MDtlPHRoaXMucm93cztlKyspZm9yKGxldCBuPTA7bjx0aGlzLmNvbHVtbnM7bisrKXQucHVzaCh0aGlzLmdldChlLG4pKTtyZXR1cm4gdH10bzJEQXJyYXkoKXtsZXQgdD1bXTtmb3IobGV0IGU9MDtlPHRoaXMucm93cztlKyspe3QucHVzaChbXSk7Zm9yKGxldCBuPTA7bjx0aGlzLmNvbHVtbnM7bisrKXRbZV0ucHVzaCh0aGlzLmdldChlLG4pKX1yZXR1cm4gdH10b0pTT04oKXtyZXR1cm4gdGhpcy50bzJEQXJyYXkoKX1pc1Jvd1ZlY3Rvcigpe3JldHVybiAxPT09dGhpcy5yb3dzfWlzQ29sdW1uVmVjdG9yKCl7cmV0dXJuIDE9PT10aGlzLmNvbHVtbnN9aXNWZWN0b3IoKXtyZXR1cm4gMT09PXRoaXMucm93c3x8MT09PXRoaXMuY29sdW1uc31pc1NxdWFyZSgpe3JldHVybiB0aGlzLnJvd3M9PT10aGlzLmNvbHVtbnN9aXNFbXB0eSgpe3JldHVybiAwPT09dGhpcy5yb3dzfHwwPT09dGhpcy5jb2x1bW5zfWlzU3ltbWV0cmljKCl7aWYodGhpcy5pc1NxdWFyZSgpKXtmb3IobGV0IHQ9MDt0PHRoaXMucm93czt0KyspZm9yKGxldCBlPTA7ZTw9dDtlKyspaWYodGhpcy5nZXQodCxlKSE9PXRoaXMuZ2V0KGUsdCkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuITF9aXNFY2hlbG9uRm9ybSgpe2xldCB0PTAsZT0wLG49LTEsbz0hMCxpPSExO2Zvcig7dDx0aGlzLnJvd3MmJm87KXtmb3IoZT0wLGk9ITE7ZTx0aGlzLmNvbHVtbnMmJiExPT09aTspMD09PXRoaXMuZ2V0KHQsZSk/ZSsrOjE9PT10aGlzLmdldCh0LGUpJiZlPm4/KGk9ITAsbj1lKToobz0hMSxpPSEwKTt0Kyt9cmV0dXJuIG99aXNSZWR1Y2VkRWNoZWxvbkZvcm0oKXtsZXQgdD0wLGU9MCxuPS0xLG89ITAsaT0hMTtmb3IoO3Q8dGhpcy5yb3dzJiZvOyl7Zm9yKGU9MCxpPSExO2U8dGhpcy5jb2x1bW5zJiYhMT09PWk7KTA9PT10aGlzLmdldCh0LGUpP2UrKzoxPT09dGhpcy5nZXQodCxlKSYmZT5uPyhpPSEwLG49ZSk6KG89ITEsaT0hMCk7Zm9yKGxldCBuPWUrMTtuPHRoaXMucm93cztuKyspMCE9PXRoaXMuZ2V0KHQsbikmJihvPSExKTt0Kyt9cmV0dXJuIG99ZWNoZWxvbkZvcm0oKXtsZXQgdD10aGlzLmNsb25lKCksZT0wLG49MDtmb3IoO2U8dC5yb3dzJiZuPHQuY29sdW1uczspe2xldCBvPWU7Zm9yKGxldCBpPWU7aTx0LnJvd3M7aSsrKXQuZ2V0KGksbik+dC5nZXQobyxuKSYmKG89aSk7aWYoMD09PXQuZ2V0KG8sbikpbisrO2Vsc2V7dC5zd2FwUm93cyhlLG8pO2xldCBpPXQuZ2V0KGUsbik7Zm9yKGxldCBvPW47bzx0LmNvbHVtbnM7bysrKXQuc2V0KGUsbyx0LmdldChlLG8pL2kpO2ZvcihsZXQgbz1lKzE7bzx0LnJvd3M7bysrKXtsZXQgaT10LmdldChvLG4pL3QuZ2V0KGUsbik7dC5zZXQobyxuLDApO2ZvcihsZXQgYT1uKzE7YTx0LmNvbHVtbnM7YSsrKXQuc2V0KG8sYSx0LmdldChvLGEpLXQuZ2V0KGUsYSkqaSl9ZSsrLG4rK319cmV0dXJuIHR9cmVkdWNlZEVjaGVsb25Gb3JtKCl7bGV0IHQ9dGhpcy5lY2hlbG9uRm9ybSgpLGU9dC5jb2x1bW5zLG49dC5yb3dzLG89bi0xO2Zvcig7bz49MDspaWYoMD09PXQubWF4Um93KG8pKW8tLTtlbHNle2xldCBpPTAsYT0hMTtmb3IoO2k8biYmITE9PT1hOykxPT09dC5nZXQobyxpKT9hPSEwOmkrKztmb3IobGV0IG49MDtuPG87bisrKXtsZXQgYT10LmdldChuLGkpO2ZvcihsZXQgcj1pO3I8ZTtyKyspe2xldCBlPXQuZ2V0KG4sciktYSp0LmdldChvLHIpO3Quc2V0KG4scixlKX19by0tfXJldHVybiB0fXNldCgpe3Rocm93IG5ldyBFcnJvcigic2V0IG1ldGhvZCBpcyB1bmltcGxlbWVudGVkIil9Z2V0KCl7dGhyb3cgbmV3IEVycm9yKCJnZXQgbWV0aG9kIGlzIHVuaW1wbGVtZW50ZWQiKX1yZXBlYXQodD17fSl7aWYoIm9iamVjdCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoIm9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QiKTtjb25zdHtyb3dzOmU9MSxjb2x1bW5zOm49MX09dDtpZighTnVtYmVyLmlzSW50ZWdlcihlKXx8ZTw9MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJyb3dzIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIik7aWYoIU51bWJlci5pc0ludGVnZXIobil8fG48PTApdGhyb3cgbmV3IFR5cGVFcnJvcigiY29sdW1ucyBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciIpO2xldCBvPW5ldyBTQ3QodGhpcy5yb3dzKmUsdGhpcy5jb2x1bW5zKm4pO2ZvcihsZXQgdD0wO3Q8ZTt0KyspZm9yKGxldCBlPTA7ZTxuO2UrKylvLnNldFN1Yk1hdHJpeCh0aGlzLHRoaXMucm93cyp0LHRoaXMuY29sdW1ucyplKTtyZXR1cm4gb31maWxsKHQpe2ZvcihsZXQgZT0wO2U8dGhpcy5yb3dzO2UrKylmb3IobGV0IG49MDtuPHRoaXMuY29sdW1ucztuKyspdGhpcy5zZXQoZSxuLHQpO3JldHVybiB0aGlzfW5lZygpe3JldHVybiB0aGlzLm11bFMoLTEpfWdldFJvdyh0KXtnQ3QodGhpcyx0KTtsZXQgZT1bXTtmb3IobGV0IG49MDtuPHRoaXMuY29sdW1ucztuKyspZS5wdXNoKHRoaXMuZ2V0KHQsbikpO3JldHVybiBlfWdldFJvd1ZlY3Rvcih0KXtyZXR1cm4gU0N0LnJvd1ZlY3Rvcih0aGlzLmdldFJvdyh0KSl9c2V0Um93KHQsZSl7Z0N0KHRoaXMsdCksZT1iQ3QodGhpcyxlKTtmb3IobGV0IG49MDtuPHRoaXMuY29sdW1ucztuKyspdGhpcy5zZXQodCxuLGVbbl0pO3JldHVybiB0aGlzfXN3YXBSb3dzKHQsZSl7Z0N0KHRoaXMsdCksZ0N0KHRoaXMsZSk7Zm9yKGxldCBuPTA7bjx0aGlzLmNvbHVtbnM7bisrKXtsZXQgbz10aGlzLmdldCh0LG4pO3RoaXMuc2V0KHQsbix0aGlzLmdldChlLG4pKSx0aGlzLnNldChlLG4sbyl9cmV0dXJuIHRoaXN9Z2V0Q29sdW1uKHQpe2hDdCh0aGlzLHQpO2xldCBlPVtdO2ZvcihsZXQgbj0wO248dGhpcy5yb3dzO24rKyllLnB1c2godGhpcy5nZXQobix0KSk7cmV0dXJuIGV9Z2V0Q29sdW1uVmVjdG9yKHQpe3JldHVybiBTQ3QuY29sdW1uVmVjdG9yKHRoaXMuZ2V0Q29sdW1uKHQpKX1zZXRDb2x1bW4odCxlKXtoQ3QodGhpcyx0KSxlPXlDdCh0aGlzLGUpO2ZvcihsZXQgbj0wO248dGhpcy5yb3dzO24rKyl0aGlzLnNldChuLHQsZVtuXSk7cmV0dXJuIHRoaXN9c3dhcENvbHVtbnModCxlKXtoQ3QodGhpcyx0KSxoQ3QodGhpcyxlKTtmb3IobGV0IG49MDtuPHRoaXMucm93cztuKyspe2xldCBvPXRoaXMuZ2V0KG4sdCk7dGhpcy5zZXQobix0LHRoaXMuZ2V0KG4sZSkpLHRoaXMuc2V0KG4sZSxvKX1yZXR1cm4gdGhpc31hZGRSb3dWZWN0b3IodCl7dD1iQ3QodGhpcyx0KTtmb3IobGV0IGU9MDtlPHRoaXMucm93cztlKyspZm9yKGxldCBuPTA7bjx0aGlzLmNvbHVtbnM7bisrKXRoaXMuc2V0KGUsbix0aGlzLmdldChlLG4pK3Rbbl0pO3JldHVybiB0aGlzfXN1YlJvd1ZlY3Rvcih0KXt0PWJDdCh0aGlzLHQpO2ZvcihsZXQgZT0wO2U8dGhpcy5yb3dzO2UrKylmb3IobGV0IG49MDtuPHRoaXMuY29sdW1ucztuKyspdGhpcy5zZXQoZSxuLHRoaXMuZ2V0KGUsbiktdFtuXSk7cmV0dXJuIHRoaXN9bXVsUm93VmVjdG9yKHQpe3Q9YkN0KHRoaXMsdCk7Zm9yKGxldCBlPTA7ZTx0aGlzLnJvd3M7ZSsrKWZvcihsZXQgbj0wO248dGhpcy5jb2x1bW5zO24rKyl0aGlzLnNldChlLG4sdGhpcy5nZXQoZSxuKSp0W25dKTtyZXR1cm4gdGhpc31kaXZSb3dWZWN0b3IodCl7dD1iQ3QodGhpcyx0KTtmb3IobGV0IGU9MDtlPHRoaXMucm93cztlKyspZm9yKGxldCBuPTA7bjx0aGlzLmNvbHVtbnM7bisrKXRoaXMuc2V0KGUsbix0aGlzLmdldChlLG4pL3Rbbl0pO3JldHVybiB0aGlzfWFkZENvbHVtblZlY3Rvcih0KXt0PXlDdCh0aGlzLHQpO2ZvcihsZXQgZT0wO2U8dGhpcy5yb3dzO2UrKylmb3IobGV0IG49MDtuPHRoaXMuY29sdW1ucztuKyspdGhpcy5zZXQoZSxuLHRoaXMuZ2V0KGUsbikrdFtlXSk7cmV0dXJuIHRoaXN9c3ViQ29sdW1uVmVjdG9yKHQpe3Q9eUN0KHRoaXMsdCk7Zm9yKGxldCBlPTA7ZTx0aGlzLnJvd3M7ZSsrKWZvcihsZXQgbj0wO248dGhpcy5jb2x1bW5zO24rKyl0aGlzLnNldChlLG4sdGhpcy5nZXQoZSxuKS10W2VdKTtyZXR1cm4gdGhpc31tdWxDb2x1bW5WZWN0b3IodCl7dD15Q3QodGhpcyx0KTtmb3IobGV0IGU9MDtlPHRoaXMucm93cztlKyspZm9yKGxldCBuPTA7bjx0aGlzLmNvbHVtbnM7bisrKXRoaXMuc2V0KGUsbix0aGlzLmdldChlLG4pKnRbZV0pO3JldHVybiB0aGlzfWRpdkNvbHVtblZlY3Rvcih0KXt0PXlDdCh0aGlzLHQpO2ZvcihsZXQgZT0wO2U8dGhpcy5yb3dzO2UrKylmb3IobGV0IG49MDtuPHRoaXMuY29sdW1ucztuKyspdGhpcy5zZXQoZSxuLHRoaXMuZ2V0KGUsbikvdFtlXSk7cmV0dXJuIHRoaXN9bXVsUm93KHQsZSl7Z0N0KHRoaXMsdCk7Zm9yKGxldCBuPTA7bjx0aGlzLmNvbHVtbnM7bisrKXRoaXMuc2V0KHQsbix0aGlzLmdldCh0LG4pKmUpO3JldHVybiB0aGlzfW11bENvbHVtbih0LGUpe2hDdCh0aGlzLHQpO2ZvcihsZXQgbj0wO248dGhpcy5yb3dzO24rKyl0aGlzLnNldChuLHQsdGhpcy5nZXQobix0KSplKTtyZXR1cm4gdGhpc31tYXgoKXtpZih0aGlzLmlzRW1wdHkoKSlyZXR1cm4gTmFOO2xldCB0PXRoaXMuZ2V0KDAsMCk7Zm9yKGxldCBlPTA7ZTx0aGlzLnJvd3M7ZSsrKWZvcihsZXQgbj0wO248dGhpcy5jb2x1bW5zO24rKyl0aGlzLmdldChlLG4pPnQmJih0PXRoaXMuZ2V0KGUsbikpO3JldHVybiB0fW1heEluZGV4KCl7T0N0KHRoaXMpO2xldCB0PXRoaXMuZ2V0KDAsMCksZT1bMCwwXTtmb3IobGV0IG49MDtuPHRoaXMucm93cztuKyspZm9yKGxldCBvPTA7bzx0aGlzLmNvbHVtbnM7bysrKXRoaXMuZ2V0KG4sbyk+dCYmKHQ9dGhpcy5nZXQobixvKSxlWzBdPW4sZVsxXT1vKTtyZXR1cm4gZX1taW4oKXtpZih0aGlzLmlzRW1wdHkoKSlyZXR1cm4gTmFOO2xldCB0PXRoaXMuZ2V0KDAsMCk7Zm9yKGxldCBlPTA7ZTx0aGlzLnJvd3M7ZSsrKWZvcihsZXQgbj0wO248dGhpcy5jb2x1bW5zO24rKyl0aGlzLmdldChlLG4pPHQmJih0PXRoaXMuZ2V0KGUsbikpO3JldHVybiB0fW1pbkluZGV4KCl7T0N0KHRoaXMpO2xldCB0PXRoaXMuZ2V0KDAsMCksZT1bMCwwXTtmb3IobGV0IG49MDtuPHRoaXMucm93cztuKyspZm9yKGxldCBvPTA7bzx0aGlzLmNvbHVtbnM7bysrKXRoaXMuZ2V0KG4sbyk8dCYmKHQ9dGhpcy5nZXQobixvKSxlWzBdPW4sZVsxXT1vKTtyZXR1cm4gZX1tYXhSb3codCl7aWYoZ0N0KHRoaXMsdCksdGhpcy5pc0VtcHR5KCkpcmV0dXJuIE5hTjtsZXQgZT10aGlzLmdldCh0LDApO2ZvcihsZXQgbj0xO248dGhpcy5jb2x1bW5zO24rKyl0aGlzLmdldCh0LG4pPmUmJihlPXRoaXMuZ2V0KHQsbikpO3JldHVybiBlfW1heFJvd0luZGV4KHQpe2dDdCh0aGlzLHQpLE9DdCh0aGlzKTtsZXQgZT10aGlzLmdldCh0LDApLG49W3QsMF07Zm9yKGxldCBvPTE7bzx0aGlzLmNvbHVtbnM7bysrKXRoaXMuZ2V0KHQsbyk+ZSYmKGU9dGhpcy5nZXQodCxvKSxuWzFdPW8pO3JldHVybiBufW1pblJvdyh0KXtpZihnQ3QodGhpcyx0KSx0aGlzLmlzRW1wdHkoKSlyZXR1cm4gTmFOO2xldCBlPXRoaXMuZ2V0KHQsMCk7Zm9yKGxldCBuPTE7bjx0aGlzLmNvbHVtbnM7bisrKXRoaXMuZ2V0KHQsbik8ZSYmKGU9dGhpcy5nZXQodCxuKSk7cmV0dXJuIGV9bWluUm93SW5kZXgodCl7Z0N0KHRoaXMsdCksT0N0KHRoaXMpO2xldCBlPXRoaXMuZ2V0KHQsMCksbj1bdCwwXTtmb3IobGV0IG89MTtvPHRoaXMuY29sdW1ucztvKyspdGhpcy5nZXQodCxvKTxlJiYoZT10aGlzLmdldCh0LG8pLG5bMV09byk7cmV0dXJuIG59bWF4Q29sdW1uKHQpe2lmKGhDdCh0aGlzLHQpLHRoaXMuaXNFbXB0eSgpKXJldHVybiBOYU47bGV0IGU9dGhpcy5nZXQoMCx0KTtmb3IobGV0IG49MTtuPHRoaXMucm93cztuKyspdGhpcy5nZXQobix0KT5lJiYoZT10aGlzLmdldChuLHQpKTtyZXR1cm4gZX1tYXhDb2x1bW5JbmRleCh0KXtoQ3QodGhpcyx0KSxPQ3QodGhpcyk7bGV0IGU9dGhpcy5nZXQoMCx0KSxuPVswLHRdO2ZvcihsZXQgbz0xO288dGhpcy5yb3dzO28rKyl0aGlzLmdldChvLHQpPmUmJihlPXRoaXMuZ2V0KG8sdCksblswXT1vKTtyZXR1cm4gbn1taW5Db2x1bW4odCl7aWYoaEN0KHRoaXMsdCksdGhpcy5pc0VtcHR5KCkpcmV0dXJuIE5hTjtsZXQgZT10aGlzLmdldCgwLHQpO2ZvcihsZXQgbj0xO248dGhpcy5yb3dzO24rKyl0aGlzLmdldChuLHQpPGUmJihlPXRoaXMuZ2V0KG4sdCkpO3JldHVybiBlfW1pbkNvbHVtbkluZGV4KHQpe2hDdCh0aGlzLHQpLE9DdCh0aGlzKTtsZXQgZT10aGlzLmdldCgwLHQpLG49WzAsdF07Zm9yKGxldCBvPTE7bzx0aGlzLnJvd3M7bysrKXRoaXMuZ2V0KG8sdCk8ZSYmKGU9dGhpcy5nZXQobyx0KSxuWzBdPW8pO3JldHVybiBufWRpYWcoKXtsZXQgdD1NYXRoLm1pbih0aGlzLnJvd3MsdGhpcy5jb2x1bW5zKSxlPVtdO2ZvcihsZXQgbj0wO248dDtuKyspZS5wdXNoKHRoaXMuZ2V0KG4sbikpO3JldHVybiBlfW5vcm0odD0iZnJvYmVuaXVzIil7bGV0IGU9MDtpZigibWF4Ij09PXQpcmV0dXJuIHRoaXMubWF4KCk7aWYoImZyb2Jlbml1cyI9PT10KXtmb3IobGV0IHQ9MDt0PHRoaXMucm93czt0KyspZm9yKGxldCBuPTA7bjx0aGlzLmNvbHVtbnM7bisrKWUrPXRoaXMuZ2V0KHQsbikqdGhpcy5nZXQodCxuKTtyZXR1cm4gTWF0aC5zcXJ0KGUpfXRocm93IG5ldyBSYW5nZUVycm9yKGB1bmtub3duIG5vcm0gdHlwZTogJHt0fWApfWN1bXVsYXRpdmVTdW0oKXtsZXQgdD0wO2ZvcihsZXQgZT0wO2U8dGhpcy5yb3dzO2UrKylmb3IobGV0IG49MDtuPHRoaXMuY29sdW1ucztuKyspdCs9dGhpcy5nZXQoZSxuKSx0aGlzLnNldChlLG4sdCk7cmV0dXJuIHRoaXN9ZG90KHQpe1BDdC5pc01hdHJpeCh0KSYmKHQ9dC50bzFEQXJyYXkoKSk7bGV0IGU9dGhpcy50bzFEQXJyYXkoKTtpZihlLmxlbmd0aCE9PXQubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJ2ZWN0b3JzIGRvIG5vdCBoYXZlIHRoZSBzYW1lIHNpemUiKTtsZXQgbj0wO2ZvcihsZXQgbz0wO288ZS5sZW5ndGg7bysrKW4rPWVbb10qdFtvXTtyZXR1cm4gbn1tbXVsKHQpe3Q9U0N0LmNoZWNrTWF0cml4KHQpO2xldCBlPXRoaXMucm93cyxuPXRoaXMuY29sdW1ucyxvPXQuY29sdW1ucyxpPW5ldyBTQ3QoZSxvKSxhPW5ldyBGbG9hdDY0QXJyYXkobik7Zm9yKGxldCByPTA7cjxvO3IrKyl7Zm9yKGxldCBlPTA7ZTxuO2UrKylhW2VdPXQuZ2V0KGUscik7Zm9yKGxldCB0PTA7dDxlO3QrKyl7bGV0IGU9MDtmb3IobGV0IG89MDtvPG47bysrKWUrPXRoaXMuZ2V0KHQsbykqYVtvXTtpLnNldCh0LHIsZSl9fXJldHVybiBpfXN0cmFzc2VuMngyKHQpe3Q9U0N0LmNoZWNrTWF0cml4KHQpO2xldCBlPW5ldyBTQ3QoMiwyKTtjb25zdCBuPXRoaXMuZ2V0KDAsMCksbz10LmdldCgwLDApLGk9dGhpcy5nZXQoMCwxKSxhPXQuZ2V0KDAsMSkscj10aGlzLmdldCgxLDApLHM9dC5nZXQoMSwwKSxsPXRoaXMuZ2V0KDEsMSksYz10LmdldCgxLDEpLGQ9KG4rbCkqKG8rYykscD0ocitsKSpvLG09biooYS1jKSx1PWwqKHMtbyksZj0obitpKSpjLGc9bStmLGg9cCt1LGI9ZC1wK20rKHItbikqKG8rYSk7cmV0dXJuIGUuc2V0KDAsMCxkK3UtZisoaS1sKSoocytjKSksZS5zZXQoMCwxLGcpLGUuc2V0KDEsMCxoKSxlLnNldCgxLDEsYiksZX1zdHJhc3NlbjN4Myh0KXt0PVNDdC5jaGVja01hdHJpeCh0KTtsZXQgZT1uZXcgU0N0KDMsMyk7Y29uc3Qgbj10aGlzLmdldCgwLDApLG89dGhpcy5nZXQoMCwxKSxpPXRoaXMuZ2V0KDAsMiksYT10aGlzLmdldCgxLDApLHI9dGhpcy5nZXQoMSwxKSxzPXRoaXMuZ2V0KDEsMiksbD10aGlzLmdldCgyLDApLGM9dGhpcy5nZXQoMiwxKSxkPXRoaXMuZ2V0KDIsMikscD10LmdldCgwLDApLG09dC5nZXQoMCwxKSx1PXQuZ2V0KDAsMiksZj10LmdldCgxLDApLGc9dC5nZXQoMSwxKSxoPXQuZ2V0KDEsMiksYj10LmdldCgyLDApLHk9dC5nZXQoMiwxKSxfPXQuZ2V0KDIsMiksQz0obi1hKSooLW0rZyksTT0oLW4rYStyKSoocC1tK2cpLHY9KGErcikqKC1wK20pLHg9bipwLE89KC1uK2wrYykqKHAtdStoKSxQPSgtbitsKSoodS1oKSx3PShsK2MpKigtcCt1KSxrPSgtaStjK2QpKihnK2IteSksUz0oaS1kKSooZy15KSxEPWkqYixFPShjK2QpKigtYit5KSxBPSgtaStyK3MpKihoK2ItXyksUj0oaS1zKSooaC1fKSxUPShyK3MpKigtYitfKSxOPShuK28raS1hLXItYy1kKSpnK00rdit4K2srRCtFLEk9eCtPK3crKG4rbytpLXItcy1sLWMpKmgrRCtBK1Qsej1DK3IqKC1wK20rZi1nLWgtYitfKStNK3grRCtBK1IsSD1DK00rdit4K3MqeSxGPUQrQStSK1QrYSp1LEw9eCtPK1ArYyooLXArdStmLWctaC1iK3kpK2srUytELEI9aytTK0QrRStsKm0sVj14K08rUCt3K2QqXztyZXR1cm4gZS5zZXQoMCwwLHgrRCtvKmYpLGUuc2V0KDAsMSxOKSxlLnNldCgwLDIsSSksZS5zZXQoMSwwLHopLGUuc2V0KDEsMSxIKSxlLnNldCgxLDIsRiksZS5zZXQoMiwwLEwpLGUuc2V0KDIsMSxCKSxlLnNldCgyLDIsViksZX1tbXVsU3RyYXNzZW4odCl7dD1TQ3QuY2hlY2tNYXRyaXgodCk7bGV0IGU9dGhpcy5jbG9uZSgpLG49ZS5yb3dzLG89ZS5jb2x1bW5zLGk9dC5yb3dzLGE9dC5jb2x1bW5zO2Z1bmN0aW9uIHIodCxlLG4pe2lmKHQucm93cz09PWUmJnQuY29sdW1ucz09PW4pcmV0dXJuIHQ7e2xldCBvPVBDdC56ZXJvcyhlLG4pO3JldHVybiBvPW8uc2V0U3ViTWF0cml4KHQsMCwwKSxvfX1vIT09aSYmY29uc29sZS53YXJuKGBNdWx0aXBseWluZyAke259IHggJHtvfSBhbmQgJHtpfSB4ICR7YX0gbWF0cml4OiBkaW1lbnNpb25zIGRvIG5vdCBtYXRjaC5gKTtsZXQgcz1NYXRoLm1heChuLGkpLGw9TWF0aC5tYXgobyxhKTtyZXR1cm4gZT1yKGUscyxsKSwoZnVuY3Rpb24gdChlLG4sbyxpKXtpZihvPD01MTJ8fGk8PTUxMilyZXR1cm4gZS5tbXVsKG4pO28lMj09MSYmaSUyPT0xPyhlPXIoZSxvKzEsaSsxKSxuPXIobixvKzEsaSsxKSk6byUyPT0xPyhlPXIoZSxvKzEsaSksbj1yKG4sbysxLGkpKTppJTI9PTEmJihlPXIoZSxvLGkrMSksbj1yKG4sbyxpKzEpKTtsZXQgYT1wYXJzZUludChlLnJvd3MvMiwxMCkscz1wYXJzZUludChlLmNvbHVtbnMvMiwxMCksbD1lLnN1Yk1hdHJpeCgwLGEtMSwwLHMtMSksYz1uLnN1Yk1hdHJpeCgwLGEtMSwwLHMtMSksZD1lLnN1Yk1hdHJpeCgwLGEtMSxzLGUuY29sdW1ucy0xKSxwPW4uc3ViTWF0cml4KDAsYS0xLHMsbi5jb2x1bW5zLTEpLG09ZS5zdWJNYXRyaXgoYSxlLnJvd3MtMSwwLHMtMSksdT1uLnN1Yk1hdHJpeChhLG4ucm93cy0xLDAscy0xKSxmPWUuc3ViTWF0cml4KGEsZS5yb3dzLTEscyxlLmNvbHVtbnMtMSksZz1uLnN1Yk1hdHJpeChhLG4ucm93cy0xLHMsbi5jb2x1bW5zLTEpLGg9dChQQ3QuYWRkKGwsZiksUEN0LmFkZChjLGcpLGEscyksYj10KFBDdC5hZGQobSxmKSxjLGEscykseT10KGwsUEN0LnN1YihwLGcpLGEscyksXz10KGYsUEN0LnN1Yih1LGMpLGEscyksQz10KFBDdC5hZGQobCxkKSxnLGEscyksTT10KFBDdC5zdWIobSxsKSxQQ3QuYWRkKGMscCksYSxzKSx2PXQoUEN0LnN1YihkLGYpLFBDdC5hZGQodSxnKSxhLHMpLHg9UEN0LmFkZChoLF8pO3guc3ViKEMpLHguYWRkKHYpO2xldCBPPVBDdC5hZGQoeSxDKSxQPVBDdC5hZGQoYixfKSx3PVBDdC5zdWIoaCxiKTt3LmFkZCh5KSx3LmFkZChNKTtsZXQgaz1QQ3QuemVyb3MoMip4LnJvd3MsMip4LmNvbHVtbnMpO3JldHVybiBrPWsuc2V0U3ViTWF0cml4KHgsMCwwKSxrPWsuc2V0U3ViTWF0cml4KE8seC5yb3dzLDApLGs9ay5zZXRTdWJNYXRyaXgoUCwwLHguY29sdW1ucyksaz1rLnNldFN1Yk1hdHJpeCh3LHgucm93cyx4LmNvbHVtbnMpLGsuc3ViTWF0cml4KDAsby0xLDAsaS0xKX0pKGUsdD1yKHQscyxsKSxzLGwpfXNjYWxlUm93cyh0PXt9KXtpZigib2JqZWN0IiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigib3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCIpO2NvbnN0e21pbjplPTAsbWF4Om49MX09dDtpZighTnVtYmVyLmlzRmluaXRlKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIm1pbiBtdXN0IGJlIGEgbnVtYmVyIik7aWYoIU51bWJlci5pc0Zpbml0ZShuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJtYXggbXVzdCBiZSBhIG51bWJlciIpO2lmKGU+PW4pdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm1pbiBtdXN0IGJlIHNtYWxsZXIgdGhhbiBtYXgiKTtsZXQgbz1uZXcgU0N0KHRoaXMucm93cyx0aGlzLmNvbHVtbnMpO2ZvcihsZXQgdD0wO3Q8dGhpcy5yb3dzO3QrKyl7Y29uc3QgaT10aGlzLmdldFJvdyh0KTtpLmxlbmd0aD4wJiZkQ3QoaSx7bWluOmUsbWF4Om4sb3V0cHV0Oml9KSxvLnNldFJvdyh0LGkpfXJldHVybiBvfXNjYWxlQ29sdW1ucyh0PXt9KXtpZigib2JqZWN0IiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigib3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCIpO2NvbnN0e21pbjplPTAsbWF4Om49MX09dDtpZighTnVtYmVyLmlzRmluaXRlKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIm1pbiBtdXN0IGJlIGEgbnVtYmVyIik7aWYoIU51bWJlci5pc0Zpbml0ZShuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJtYXggbXVzdCBiZSBhIG51bWJlciIpO2lmKGU+PW4pdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm1pbiBtdXN0IGJlIHNtYWxsZXIgdGhhbiBtYXgiKTtsZXQgbz1uZXcgU0N0KHRoaXMucm93cyx0aGlzLmNvbHVtbnMpO2ZvcihsZXQgdD0wO3Q8dGhpcy5jb2x1bW5zO3QrKyl7Y29uc3QgaT10aGlzLmdldENvbHVtbih0KTtpLmxlbmd0aCYmZEN0KGkse21pbjplLG1heDpuLG91dHB1dDppfSksby5zZXRDb2x1bW4odCxpKX1yZXR1cm4gb31mbGlwUm93cygpe2NvbnN0IHQ9TWF0aC5jZWlsKHRoaXMuY29sdW1ucy8yKTtmb3IobGV0IGU9MDtlPHRoaXMucm93cztlKyspZm9yKGxldCBuPTA7bjx0O24rKyl7bGV0IHQ9dGhpcy5nZXQoZSxuKSxvPXRoaXMuZ2V0KGUsdGhpcy5jb2x1bW5zLTEtbik7dGhpcy5zZXQoZSxuLG8pLHRoaXMuc2V0KGUsdGhpcy5jb2x1bW5zLTEtbix0KX1yZXR1cm4gdGhpc31mbGlwQ29sdW1ucygpe2NvbnN0IHQ9TWF0aC5jZWlsKHRoaXMucm93cy8yKTtmb3IobGV0IGU9MDtlPHRoaXMuY29sdW1ucztlKyspZm9yKGxldCBuPTA7bjx0O24rKyl7bGV0IHQ9dGhpcy5nZXQobixlKSxvPXRoaXMuZ2V0KHRoaXMucm93cy0xLW4sZSk7dGhpcy5zZXQobixlLG8pLHRoaXMuc2V0KHRoaXMucm93cy0xLW4sZSx0KX1yZXR1cm4gdGhpc31rcm9uZWNrZXJQcm9kdWN0KHQpe3Q9U0N0LmNoZWNrTWF0cml4KHQpO2xldCBlPXRoaXMucm93cyxuPXRoaXMuY29sdW1ucyxvPXQucm93cyxpPXQuY29sdW1ucyxhPW5ldyBTQ3QoZSpvLG4qaSk7Zm9yKGxldCByPTA7cjxlO3IrKylmb3IobGV0IGU9MDtlPG47ZSsrKWZvcihsZXQgbj0wO248bztuKyspZm9yKGxldCBzPTA7czxpO3MrKylhLnNldChvKnIrbixpKmUrcyx0aGlzLmdldChyLGUpKnQuZ2V0KG4scykpO3JldHVybiBhfWtyb25lY2tlclN1bSh0KXtpZih0PVNDdC5jaGVja01hdHJpeCh0KSwhdGhpcy5pc1NxdWFyZSgpfHwhdC5pc1NxdWFyZSgpKXRocm93IG5ldyBFcnJvcigiS3JvbmVja2VyIFN1bSBuZWVkcyB0d28gU3F1YXJlIE1hdHJpY2VzIik7bGV0IGU9dGhpcy5yb3dzLG49dC5yb3dzLG89dGhpcy5rcm9uZWNrZXJQcm9kdWN0KFNDdC5leWUobixuKSksaT1TQ3QuZXllKGUsZSkua3JvbmVja2VyUHJvZHVjdCh0KTtyZXR1cm4gby5hZGQoaSl9dHJhbnNwb3NlKCl7bGV0IHQ9bmV3IFNDdCh0aGlzLmNvbHVtbnMsdGhpcy5yb3dzKTtmb3IobGV0IGU9MDtlPHRoaXMucm93cztlKyspZm9yKGxldCBuPTA7bjx0aGlzLmNvbHVtbnM7bisrKXQuc2V0KG4sZSx0aGlzLmdldChlLG4pKTtyZXR1cm4gdH1zb3J0Um93cyh0PXdDdCl7Zm9yKGxldCBlPTA7ZTx0aGlzLnJvd3M7ZSsrKXRoaXMuc2V0Um93KGUsdGhpcy5nZXRSb3coZSkuc29ydCh0KSk7cmV0dXJuIHRoaXN9c29ydENvbHVtbnModD13Q3Qpe2ZvcihsZXQgZT0wO2U8dGhpcy5jb2x1bW5zO2UrKyl0aGlzLnNldENvbHVtbihlLHRoaXMuZ2V0Q29sdW1uKGUpLnNvcnQodCkpO3JldHVybiB0aGlzfXN1Yk1hdHJpeCh0LGUsbixvKXtNQ3QodGhpcyx0LGUsbixvKTtsZXQgaT1uZXcgU0N0KGUtdCsxLG8tbisxKTtmb3IobGV0IGE9dDthPD1lO2ErKylmb3IobGV0IGU9bjtlPD1vO2UrKylpLnNldChhLXQsZS1uLHRoaXMuZ2V0KGEsZSkpO3JldHVybiBpfXN1Yk1hdHJpeFJvdyh0LGUsbil7aWYodm9pZCAwPT09ZSYmKGU9MCksdm9pZCAwPT09biYmKG49dGhpcy5jb2x1bW5zLTEpLGU+bnx8ZTwwfHxlPj10aGlzLmNvbHVtbnN8fG48MHx8bj49dGhpcy5jb2x1bW5zKXRocm93IG5ldyBSYW5nZUVycm9yKCJBcmd1bWVudCBvdXQgb2YgcmFuZ2UiKTtsZXQgbz1uZXcgU0N0KHQubGVuZ3RoLG4tZSsxKTtmb3IobGV0IGk9MDtpPHQubGVuZ3RoO2krKylmb3IobGV0IGE9ZTthPD1uO2ErKyl7aWYodFtpXTwwfHx0W2ldPj10aGlzLnJvd3MpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYFJvdyBpbmRleCBvdXQgb2YgcmFuZ2U6ICR7dFtpXX1gKTtvLnNldChpLGEtZSx0aGlzLmdldCh0W2ldLGEpKX1yZXR1cm4gb31zdWJNYXRyaXhDb2x1bW4odCxlLG4pe2lmKHZvaWQgMD09PWUmJihlPTApLHZvaWQgMD09PW4mJihuPXRoaXMucm93cy0xKSxlPm58fGU8MHx8ZT49dGhpcy5yb3dzfHxuPDB8fG4+PXRoaXMucm93cyl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXJndW1lbnQgb3V0IG9mIHJhbmdlIik7bGV0IG89bmV3IFNDdChuLWUrMSx0Lmxlbmd0aCk7Zm9yKGxldCBpPTA7aTx0Lmxlbmd0aDtpKyspZm9yKGxldCBhPWU7YTw9bjthKyspe2lmKHRbaV08MHx8dFtpXT49dGhpcy5jb2x1bW5zKXRocm93IG5ldyBSYW5nZUVycm9yKGBDb2x1bW4gaW5kZXggb3V0IG9mIHJhbmdlOiAke3RbaV19YCk7by5zZXQoYS1lLGksdGhpcy5nZXQoYSx0W2ldKSl9cmV0dXJuIG99c2V0U3ViTWF0cml4KHQsZSxuKXtpZigodD1TQ3QuY2hlY2tNYXRyaXgodCkpLmlzRW1wdHkoKSlyZXR1cm4gdGhpcztNQ3QodGhpcyxlLGUrdC5yb3dzLTEsbixuK3QuY29sdW1ucy0xKTtmb3IobGV0IG89MDtvPHQucm93cztvKyspZm9yKGxldCBpPTA7aTx0LmNvbHVtbnM7aSsrKXRoaXMuc2V0KGUrbyxuK2ksdC5nZXQobyxpKSk7cmV0dXJuIHRoaXN9c2VsZWN0aW9uKHQsZSl7bGV0IG49KGZ1bmN0aW9uIG8odCxlLG4pe3JldHVybntyb3c6X0N0KHQsZSksY29sdW1uOkNDdCh0LG4pfX0pKHRoaXMsdCxlKSxpPW5ldyBTQ3QodC5sZW5ndGgsZS5sZW5ndGgpO2ZvcihsZXQgdD0wO3Q8bi5yb3cubGVuZ3RoO3QrKyl7bGV0IGU9bi5yb3dbdF07Zm9yKGxldCBvPTA7bzxuLmNvbHVtbi5sZW5ndGg7bysrKWkuc2V0KHQsbyx0aGlzLmdldChlLG4uY29sdW1uW29dKSl9cmV0dXJuIGl9dHJhY2UoKXtsZXQgdD1NYXRoLm1pbih0aGlzLnJvd3MsdGhpcy5jb2x1bW5zKSxlPTA7Zm9yKGxldCBuPTA7bjx0O24rKyllKz10aGlzLmdldChuLG4pO3JldHVybiBlfWNsb25lKCl7bGV0IHQ9bmV3IFNDdCh0aGlzLnJvd3MsdGhpcy5jb2x1bW5zKTtmb3IobGV0IGU9MDtlPHRoaXMucm93cztlKyspZm9yKGxldCBuPTA7bjx0aGlzLmNvbHVtbnM7bisrKXQuc2V0KGUsbix0aGlzLmdldChlLG4pKTtyZXR1cm4gdH1zdW0odCl7c3dpdGNoKHQpe2Nhc2Uicm93IjpyZXR1cm4oZnVuY3Rpb24gZSh0KXtsZXQgZT12Q3QodC5yb3dzKTtmb3IobGV0IG49MDtuPHQucm93czsrK24pZm9yKGxldCBvPTA7bzx0LmNvbHVtbnM7KytvKWVbbl0rPXQuZ2V0KG4sbyk7cmV0dXJuIGV9KSh0aGlzKTtjYXNlImNvbHVtbiI6cmV0dXJuKGZ1bmN0aW9uIG4odCl7bGV0IGU9dkN0KHQuY29sdW1ucyk7Zm9yKGxldCBuPTA7bjx0LnJvd3M7KytuKWZvcihsZXQgbz0wO288dC5jb2x1bW5zOysrbyllW29dKz10LmdldChuLG8pO3JldHVybiBlfSkodGhpcyk7Y2FzZSB2b2lkIDA6cmV0dXJuKGZ1bmN0aW9uIG8odCl7bGV0IGU9MDtmb3IobGV0IG49MDtuPHQucm93cztuKyspZm9yKGxldCBvPTA7bzx0LmNvbHVtbnM7bysrKWUrPXQuZ2V0KG4sbyk7cmV0dXJuIGV9KSh0aGlzKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgaW52YWxpZCBvcHRpb246ICR7dH1gKX19cHJvZHVjdCh0KXtzd2l0Y2godCl7Y2FzZSJyb3ciOnJldHVybihmdW5jdGlvbiBlKHQpe2xldCBlPXZDdCh0LnJvd3MsMSk7Zm9yKGxldCBuPTA7bjx0LnJvd3M7KytuKWZvcihsZXQgbz0wO288dC5jb2x1bW5zOysrbyllW25dKj10LmdldChuLG8pO3JldHVybiBlfSkodGhpcyk7Y2FzZSJjb2x1bW4iOnJldHVybihmdW5jdGlvbiBuKHQpe2xldCBlPXZDdCh0LmNvbHVtbnMsMSk7Zm9yKGxldCBuPTA7bjx0LnJvd3M7KytuKWZvcihsZXQgbz0wO288dC5jb2x1bW5zOysrbyllW29dKj10LmdldChuLG8pO3JldHVybiBlfSkodGhpcyk7Y2FzZSB2b2lkIDA6cmV0dXJuKGZ1bmN0aW9uIG8odCl7bGV0IGU9MTtmb3IobGV0IG49MDtuPHQucm93cztuKyspZm9yKGxldCBvPTA7bzx0LmNvbHVtbnM7bysrKWUqPXQuZ2V0KG4sbyk7cmV0dXJuIGV9KSh0aGlzKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgaW52YWxpZCBvcHRpb246ICR7dH1gKX19bWVhbih0KXtjb25zdCBlPXRoaXMuc3VtKHQpO3N3aXRjaCh0KXtjYXNlInJvdyI6Zm9yKGxldCB0PTA7dDx0aGlzLnJvd3M7dCsrKWVbdF0vPXRoaXMuY29sdW1ucztyZXR1cm4gZTtjYXNlImNvbHVtbiI6Zm9yKGxldCB0PTA7dDx0aGlzLmNvbHVtbnM7dCsrKWVbdF0vPXRoaXMucm93cztyZXR1cm4gZTtjYXNlIHZvaWQgMDpyZXR1cm4gZS90aGlzLnNpemU7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgb3B0aW9uOiAke3R9YCl9fXZhcmlhbmNlKHQsZT17fSl7aWYoIm9iamVjdCI9PXR5cGVvZiB0JiYoZT10LHQ9dm9pZCAwKSwib2JqZWN0IiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigib3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCIpO2NvbnN0e3VuYmlhc2VkOm49ITAsbWVhbjpvPXRoaXMubWVhbih0KX09ZTtpZigiYm9vbGVhbiIhPXR5cGVvZiBuKXRocm93IG5ldyBUeXBlRXJyb3IoInVuYmlhc2VkIG11c3QgYmUgYSBib29sZWFuIik7c3dpdGNoKHQpe2Nhc2Uicm93IjppZighQXJyYXkuaXNBcnJheShvKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJtZWFuIG11c3QgYmUgYW4gYXJyYXkiKTtyZXR1cm4oZnVuY3Rpb24gaSh0LGUsbil7Y29uc3Qgbz10LnJvd3MsaT10LmNvbHVtbnMsYT1bXTtmb3IobGV0IHI9MDtyPG87cisrKXtsZXQgbz0wLHM9MCxsPTA7Zm9yKGxldCBlPTA7ZTxpO2UrKylsPXQuZ2V0KHIsZSktbltyXSxvKz1sLHMrPWwqbDthLnB1c2goZT8ocy1vKm8vaSkvKGktMSk6KHMtbypvL2kpL2kpfXJldHVybiBhfSkodGhpcyxuLG8pO2Nhc2UiY29sdW1uIjppZighQXJyYXkuaXNBcnJheShvKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJtZWFuIG11c3QgYmUgYW4gYXJyYXkiKTtyZXR1cm4oZnVuY3Rpb24gYSh0LGUsbil7Y29uc3Qgbz10LnJvd3MsaT10LmNvbHVtbnMsYT1bXTtmb3IobGV0IHI9MDtyPGk7cisrKXtsZXQgaT0wLHM9MCxsPTA7Zm9yKGxldCBlPTA7ZTxvO2UrKylsPXQuZ2V0KGUsciktbltyXSxpKz1sLHMrPWwqbDthLnB1c2goZT8ocy1pKmkvbykvKG8tMSk6KHMtaSppL28pL28pfXJldHVybiBhfSkodGhpcyxuLG8pO2Nhc2Ugdm9pZCAwOmlmKCJudW1iZXIiIT10eXBlb2Ygbyl0aHJvdyBuZXcgVHlwZUVycm9yKCJtZWFuIG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4oZnVuY3Rpb24gcih0LGUsbil7Y29uc3Qgbz10LnJvd3MsaT10LmNvbHVtbnMsYT1vKmk7bGV0IHI9MCxzPTAsbD0wO2ZvcihsZXQgZT0wO2U8bztlKyspZm9yKGxldCBvPTA7bzxpO28rKylsPXQuZ2V0KGUsbyktbixyKz1sLHMrPWwqbDtyZXR1cm4gZT8ocy1yKnIvYSkvKGEtMSk6KHMtcipyL2EpL2F9KSh0aGlzLG4sbyk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgb3B0aW9uOiAke3R9YCl9fXN0YW5kYXJkRGV2aWF0aW9uKHQsZSl7Im9iamVjdCI9PXR5cGVvZiB0JiYoZT10LHQ9dm9pZCAwKTtjb25zdCBuPXRoaXMudmFyaWFuY2UodCxlKTtpZih2b2lkIDA9PT10KXJldHVybiBNYXRoLnNxcnQobik7Zm9yKGxldCB0PTA7dDxuLmxlbmd0aDt0Kyspblt0XT1NYXRoLnNxcnQoblt0XSk7cmV0dXJuIG59Y2VudGVyKHQsZT17fSl7aWYoIm9iamVjdCI9PXR5cGVvZiB0JiYoZT10LHQ9dm9pZCAwKSwib2JqZWN0IiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigib3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCIpO2NvbnN0e2NlbnRlcjpuPXRoaXMubWVhbih0KX09ZTtzd2l0Y2godCl7Y2FzZSJyb3ciOmlmKCFBcnJheS5pc0FycmF5KG4pKXRocm93IG5ldyBUeXBlRXJyb3IoImNlbnRlciBtdXN0IGJlIGFuIGFycmF5Iik7cmV0dXJuKGZ1bmN0aW9uIG8odCxlKXtmb3IobGV0IG49MDtuPHQucm93cztuKyspZm9yKGxldCBvPTA7bzx0LmNvbHVtbnM7bysrKXQuc2V0KG4sbyx0LmdldChuLG8pLWVbbl0pfSkodGhpcyxuKSx0aGlzO2Nhc2UiY29sdW1uIjppZighQXJyYXkuaXNBcnJheShuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJjZW50ZXIgbXVzdCBiZSBhbiBhcnJheSIpO3JldHVybihmdW5jdGlvbiBpKHQsZSl7Zm9yKGxldCBuPTA7bjx0LnJvd3M7bisrKWZvcihsZXQgbz0wO288dC5jb2x1bW5zO28rKyl0LnNldChuLG8sdC5nZXQobixvKS1lW29dKX0pKHRoaXMsbiksdGhpcztjYXNlIHZvaWQgMDppZigibnVtYmVyIiE9dHlwZW9mIG4pdGhyb3cgbmV3IFR5cGVFcnJvcigiY2VudGVyIG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4oZnVuY3Rpb24gYSh0LGUpe2ZvcihsZXQgbj0wO248dC5yb3dzO24rKylmb3IobGV0IG89MDtvPHQuY29sdW1ucztvKyspdC5zZXQobixvLHQuZ2V0KG4sbyktZSl9KSh0aGlzLG4pLHRoaXM7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgb3B0aW9uOiAke3R9YCl9fXNjYWxlKHQsZT17fSl7aWYoIm9iamVjdCI9PXR5cGVvZiB0JiYoZT10LHQ9dm9pZCAwKSwib2JqZWN0IiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigib3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCIpO2xldCBuPWUuc2NhbGU7c3dpdGNoKHQpe2Nhc2Uicm93IjppZih2b2lkIDA9PT1uKW49KGZ1bmN0aW9uIG8odCl7Y29uc3QgZT1bXTtmb3IobGV0IG49MDtuPHQucm93cztuKyspe2xldCBvPTA7Zm9yKGxldCBlPTA7ZTx0LmNvbHVtbnM7ZSsrKW8rPU1hdGgucG93KHQuZ2V0KG4sZSksMikvKHQuY29sdW1ucy0xKTtlLnB1c2goTWF0aC5zcXJ0KG8pKX1yZXR1cm4gZX0pKHRoaXMpO2Vsc2UgaWYoIUFycmF5LmlzQXJyYXkobikpdGhyb3cgbmV3IFR5cGVFcnJvcigic2NhbGUgbXVzdCBiZSBhbiBhcnJheSIpO3JldHVybihmdW5jdGlvbiBpKHQsZSl7Zm9yKGxldCBuPTA7bjx0LnJvd3M7bisrKWZvcihsZXQgbz0wO288dC5jb2x1bW5zO28rKyl0LnNldChuLG8sdC5nZXQobixvKS9lW25dKX0pKHRoaXMsbiksdGhpcztjYXNlImNvbHVtbiI6aWYodm9pZCAwPT09biluPShmdW5jdGlvbiBhKHQpe2NvbnN0IGU9W107Zm9yKGxldCBuPTA7bjx0LmNvbHVtbnM7bisrKXtsZXQgbz0wO2ZvcihsZXQgZT0wO2U8dC5yb3dzO2UrKylvKz1NYXRoLnBvdyh0LmdldChlLG4pLDIpLyh0LnJvd3MtMSk7ZS5wdXNoKE1hdGguc3FydChvKSl9cmV0dXJuIGV9KSh0aGlzKTtlbHNlIGlmKCFBcnJheS5pc0FycmF5KG4pKXRocm93IG5ldyBUeXBlRXJyb3IoInNjYWxlIG11c3QgYmUgYW4gYXJyYXkiKTtyZXR1cm4oZnVuY3Rpb24gcih0LGUpe2ZvcihsZXQgbj0wO248dC5yb3dzO24rKylmb3IobGV0IG89MDtvPHQuY29sdW1ucztvKyspdC5zZXQobixvLHQuZ2V0KG4sbykvZVtvXSl9KSh0aGlzLG4pLHRoaXM7Y2FzZSB2b2lkIDA6aWYodm9pZCAwPT09biluPShmdW5jdGlvbiBzKHQpe2NvbnN0IGU9dC5zaXplLTE7bGV0IG49MDtmb3IobGV0IG89MDtvPHQuY29sdW1ucztvKyspZm9yKGxldCBpPTA7aTx0LnJvd3M7aSsrKW4rPU1hdGgucG93KHQuZ2V0KGksbyksMikvZTtyZXR1cm4gTWF0aC5zcXJ0KG4pfSkodGhpcyk7ZWxzZSBpZigibnVtYmVyIiE9dHlwZW9mIG4pdGhyb3cgbmV3IFR5cGVFcnJvcigic2NhbGUgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybihmdW5jdGlvbiBsKHQsZSl7Zm9yKGxldCBuPTA7bjx0LnJvd3M7bisrKWZvcihsZXQgbz0wO288dC5jb2x1bW5zO28rKyl0LnNldChuLG8sdC5nZXQobixvKS9lKX0pKHRoaXMsbiksdGhpcztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgaW52YWxpZCBvcHRpb246ICR7dH1gKX19dG9TdHJpbmcodCl7cmV0dXJuIHVDdCh0aGlzLHQpfX1mdW5jdGlvbiB3Q3QodCxlKXtyZXR1cm4gdC1lfVBDdC5wcm90b3R5cGUua2xhc3M9Ik1hdHJpeCIsInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJihQQ3QucHJvdG90eXBlW1N5bWJvbC5mb3IoIm5vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tIildPWZ1bmN0aW9uIGtDdCgpe3JldHVybiB1Q3QodGhpcyl9KSxQQ3QucmFuZG9tPVBDdC5yYW5kLFBDdC5yYW5kb21JbnQ9UEN0LnJhbmRJbnQsUEN0LmRpYWdvbmFsPVBDdC5kaWFnLFBDdC5wcm90b3R5cGUuZGlhZ29uYWw9UEN0LnByb3RvdHlwZS5kaWFnLFBDdC5pZGVudGl0eT1QQ3QuZXllLFBDdC5wcm90b3R5cGUubmVnYXRlPVBDdC5wcm90b3R5cGUubmVnLFBDdC5wcm90b3R5cGUudGVuc29yUHJvZHVjdD1QQ3QucHJvdG90eXBlLmtyb25lY2tlclByb2R1Y3Q7Y2xhc3MgU0N0IGV4dGVuZHMgUEN0e2NvbnN0cnVjdG9yKHQsZSl7aWYoc3VwZXIoKSxTQ3QuaXNNYXRyaXgodCkpcmV0dXJuIHQuY2xvbmUoKTtpZihOdW1iZXIuaXNJbnRlZ2VyKHQpJiZ0Pj0wKXtpZih0aGlzLmRhdGE9W10sIShOdW1iZXIuaXNJbnRlZ2VyKGUpJiZlPj0wKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJuQ29sdW1ucyBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciIpO2ZvcihsZXQgbj0wO248dDtuKyspdGhpcy5kYXRhLnB1c2gobmV3IEZsb2F0NjRBcnJheShlKSl9ZWxzZXtpZighQXJyYXkuaXNBcnJheSh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJGaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyIG9yIGFuIGFycmF5Iik7e2NvbnN0IG49dDtpZigibnVtYmVyIiE9dHlwZW9mKGU9KHQ9bi5sZW5ndGgpP25bMF0ubGVuZ3RoOjApKXRocm93IG5ldyBUeXBlRXJyb3IoIkRhdGEgbXVzdCBiZSBhIDJEIGFycmF5IHdpdGggYXQgbGVhc3Qgb25lIGVsZW1lbnQiKTt0aGlzLmRhdGE9W107Zm9yKGxldCBvPTA7bzx0O28rKyl7aWYobltvXS5sZW5ndGghPT1lKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmNvbnNpc3RlbnQgYXJyYXkgZGltZW5zaW9ucyIpO3RoaXMuZGF0YS5wdXNoKEZsb2F0NjRBcnJheS5mcm9tKG5bb10pKX19fXRoaXMucm93cz10LHRoaXMuY29sdW1ucz1lfXNldCh0LGUsbil7cmV0dXJuIHRoaXMuZGF0YVt0XVtlXT1uLHRoaXN9Z2V0KHQsZSl7cmV0dXJuIHRoaXMuZGF0YVt0XVtlXX1yZW1vdmVSb3codCl7cmV0dXJuIGdDdCh0aGlzLHQpLHRoaXMuZGF0YS5zcGxpY2UodCwxKSx0aGlzLnJvd3MtPTEsdGhpc31hZGRSb3codCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9dCx0PXRoaXMucm93cyksZ0N0KHRoaXMsdCwhMCksZT1GbG9hdDY0QXJyYXkuZnJvbShiQ3QodGhpcyxlKSksdGhpcy5kYXRhLnNwbGljZSh0LDAsZSksdGhpcy5yb3dzKz0xLHRoaXN9cmVtb3ZlQ29sdW1uKHQpe2hDdCh0aGlzLHQpO2ZvcihsZXQgZT0wO2U8dGhpcy5yb3dzO2UrKyl7Y29uc3Qgbj1uZXcgRmxvYXQ2NEFycmF5KHRoaXMuY29sdW1ucy0xKTtmb3IobGV0IG89MDtvPHQ7bysrKW5bb109dGhpcy5kYXRhW2VdW29dO2ZvcihsZXQgbz10KzE7bzx0aGlzLmNvbHVtbnM7bysrKW5bby0xXT10aGlzLmRhdGFbZV1bb107dGhpcy5kYXRhW2VdPW59cmV0dXJuIHRoaXMuY29sdW1ucy09MSx0aGlzfWFkZENvbHVtbih0LGUpe3ZvaWQgMD09PWUmJihlPXQsdD10aGlzLmNvbHVtbnMpLGhDdCh0aGlzLHQsITApLGU9eUN0KHRoaXMsZSk7Zm9yKGxldCBuPTA7bjx0aGlzLnJvd3M7bisrKXtjb25zdCBvPW5ldyBGbG9hdDY0QXJyYXkodGhpcy5jb2x1bW5zKzEpO2xldCBpPTA7Zm9yKDtpPHQ7aSsrKW9baV09dGhpcy5kYXRhW25dW2ldO2ZvcihvW2krK109ZVtuXTtpPHRoaXMuY29sdW1ucysxO2krKylvW2ldPXRoaXMuZGF0YVtuXVtpLTFdO3RoaXMuZGF0YVtuXT1vfXJldHVybiB0aGlzLmNvbHVtbnMrPTEsdGhpc319IShmdW5jdGlvbiBEQ3QodCxlKXt0LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24gdChlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGU/dGhpcy5hZGRTKGUpOnRoaXMuYWRkTShlKX0sdC5wcm90b3R5cGUuYWRkUz1mdW5jdGlvbiB0KGUpe2ZvcihsZXQgdD0wO3Q8dGhpcy5yb3dzO3QrKylmb3IobGV0IG49MDtuPHRoaXMuY29sdW1ucztuKyspdGhpcy5zZXQodCxuLHRoaXMuZ2V0KHQsbikrZSk7cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLmFkZE09ZnVuY3Rpb24gdChuKXtpZihuPWUuY2hlY2tNYXRyaXgobiksdGhpcy5yb3dzIT09bi5yb3dzfHx0aGlzLmNvbHVtbnMhPT1uLmNvbHVtbnMpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk1hdHJpY2VzIGRpbWVuc2lvbnMgbXVzdCBiZSBlcXVhbCIpO2ZvcihsZXQgdD0wO3Q8dGhpcy5yb3dzO3QrKylmb3IobGV0IGU9MDtlPHRoaXMuY29sdW1ucztlKyspdGhpcy5zZXQodCxlLHRoaXMuZ2V0KHQsZSkrbi5nZXQodCxlKSk7cmV0dXJuIHRoaXN9LHQuYWRkPWZ1bmN0aW9uIHQobixvKXtyZXR1cm4gbmV3IGUobikuYWRkKG8pfSx0LnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24gdChlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGU/dGhpcy5zdWJTKGUpOnRoaXMuc3ViTShlKX0sdC5wcm90b3R5cGUuc3ViUz1mdW5jdGlvbiB0KGUpe2ZvcihsZXQgdD0wO3Q8dGhpcy5yb3dzO3QrKylmb3IobGV0IG49MDtuPHRoaXMuY29sdW1ucztuKyspdGhpcy5zZXQodCxuLHRoaXMuZ2V0KHQsbiktZSk7cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLnN1Yk09ZnVuY3Rpb24gdChuKXtpZihuPWUuY2hlY2tNYXRyaXgobiksdGhpcy5yb3dzIT09bi5yb3dzfHx0aGlzLmNvbHVtbnMhPT1uLmNvbHVtbnMpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk1hdHJpY2VzIGRpbWVuc2lvbnMgbXVzdCBiZSBlcXVhbCIpO2ZvcihsZXQgdD0wO3Q8dGhpcy5yb3dzO3QrKylmb3IobGV0IGU9MDtlPHRoaXMuY29sdW1ucztlKyspdGhpcy5zZXQodCxlLHRoaXMuZ2V0KHQsZSktbi5nZXQodCxlKSk7cmV0dXJuIHRoaXN9LHQuc3ViPWZ1bmN0aW9uIHQobixvKXtyZXR1cm4gbmV3IGUobikuc3ViKG8pfSx0LnByb3RvdHlwZS5zdWJ0cmFjdD10LnByb3RvdHlwZS5zdWIsdC5wcm90b3R5cGUuc3VidHJhY3RTPXQucHJvdG90eXBlLnN1YlMsdC5wcm90b3R5cGUuc3VidHJhY3RNPXQucHJvdG90eXBlLnN1Yk0sdC5zdWJ0cmFjdD10LnN1Yix0LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24gdChlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGU/dGhpcy5tdWxTKGUpOnRoaXMubXVsTShlKX0sdC5wcm90b3R5cGUubXVsUz1mdW5jdGlvbiB0KGUpe2ZvcihsZXQgdD0wO3Q8dGhpcy5yb3dzO3QrKylmb3IobGV0IG49MDtuPHRoaXMuY29sdW1ucztuKyspdGhpcy5zZXQodCxuLHRoaXMuZ2V0KHQsbikqZSk7cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLm11bE09ZnVuY3Rpb24gdChuKXtpZihuPWUuY2hlY2tNYXRyaXgobiksdGhpcy5yb3dzIT09bi5yb3dzfHx0aGlzLmNvbHVtbnMhPT1uLmNvbHVtbnMpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk1hdHJpY2VzIGRpbWVuc2lvbnMgbXVzdCBiZSBlcXVhbCIpO2ZvcihsZXQgdD0wO3Q8dGhpcy5yb3dzO3QrKylmb3IobGV0IGU9MDtlPHRoaXMuY29sdW1ucztlKyspdGhpcy5zZXQodCxlLHRoaXMuZ2V0KHQsZSkqbi5nZXQodCxlKSk7cmV0dXJuIHRoaXN9LHQubXVsPWZ1bmN0aW9uIHQobixvKXtyZXR1cm4gbmV3IGUobikubXVsKG8pfSx0LnByb3RvdHlwZS5tdWx0aXBseT10LnByb3RvdHlwZS5tdWwsdC5wcm90b3R5cGUubXVsdGlwbHlTPXQucHJvdG90eXBlLm11bFMsdC5wcm90b3R5cGUubXVsdGlwbHlNPXQucHJvdG90eXBlLm11bE0sdC5tdWx0aXBseT10Lm11bCx0LnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24gdChlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGU/dGhpcy5kaXZTKGUpOnRoaXMuZGl2TShlKX0sdC5wcm90b3R5cGUuZGl2Uz1mdW5jdGlvbiB0KGUpe2ZvcihsZXQgdD0wO3Q8dGhpcy5yb3dzO3QrKylmb3IobGV0IG49MDtuPHRoaXMuY29sdW1ucztuKyspdGhpcy5zZXQodCxuLHRoaXMuZ2V0KHQsbikvZSk7cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLmRpdk09ZnVuY3Rpb24gdChuKXtpZihuPWUuY2hlY2tNYXRyaXgobiksdGhpcy5yb3dzIT09bi5yb3dzfHx0aGlzLmNvbHVtbnMhPT1uLmNvbHVtbnMpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk1hdHJpY2VzIGRpbWVuc2lvbnMgbXVzdCBiZSBlcXVhbCIpO2ZvcihsZXQgdD0wO3Q8dGhpcy5yb3dzO3QrKylmb3IobGV0IGU9MDtlPHRoaXMuY29sdW1ucztlKyspdGhpcy5zZXQodCxlLHRoaXMuZ2V0KHQsZSkvbi5nZXQodCxlKSk7cmV0dXJuIHRoaXN9LHQuZGl2PWZ1bmN0aW9uIHQobixvKXtyZXR1cm4gbmV3IGUobikuZGl2KG8pfSx0LnByb3RvdHlwZS5kaXZpZGU9dC5wcm90b3R5cGUuZGl2LHQucHJvdG90eXBlLmRpdmlkZVM9dC5wcm90b3R5cGUuZGl2Uyx0LnByb3RvdHlwZS5kaXZpZGVNPXQucHJvdG90eXBlLmRpdk0sdC5kaXZpZGU9dC5kaXYsdC5wcm90b3R5cGUubW9kPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBlP3RoaXMubW9kUyhlKTp0aGlzLm1vZE0oZSl9LHQucHJvdG90eXBlLm1vZFM9ZnVuY3Rpb24gdChlKXtmb3IobGV0IHQ9MDt0PHRoaXMucm93czt0KyspZm9yKGxldCBuPTA7bjx0aGlzLmNvbHVtbnM7bisrKXRoaXMuc2V0KHQsbix0aGlzLmdldCh0LG4pJWUpO3JldHVybiB0aGlzfSx0LnByb3RvdHlwZS5tb2RNPWZ1bmN0aW9uIHQobil7aWYobj1lLmNoZWNrTWF0cml4KG4pLHRoaXMucm93cyE9PW4ucm93c3x8dGhpcy5jb2x1bW5zIT09bi5jb2x1bW5zKXRocm93IG5ldyBSYW5nZUVycm9yKCJNYXRyaWNlcyBkaW1lbnNpb25zIG11c3QgYmUgZXF1YWwiKTtmb3IobGV0IHQ9MDt0PHRoaXMucm93czt0KyspZm9yKGxldCBlPTA7ZTx0aGlzLmNvbHVtbnM7ZSsrKXRoaXMuc2V0KHQsZSx0aGlzLmdldCh0LGUpJW4uZ2V0KHQsZSkpO3JldHVybiB0aGlzfSx0Lm1vZD1mdW5jdGlvbiB0KG4sbyl7cmV0dXJuIG5ldyBlKG4pLm1vZChvKX0sdC5wcm90b3R5cGUubW9kdWx1cz10LnByb3RvdHlwZS5tb2QsdC5wcm90b3R5cGUubW9kdWx1c1M9dC5wcm90b3R5cGUubW9kUyx0LnByb3RvdHlwZS5tb2R1bHVzTT10LnByb3RvdHlwZS5tb2RNLHQubW9kdWx1cz10Lm1vZCx0LnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24gdChlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGU/dGhpcy5hbmRTKGUpOnRoaXMuYW5kTShlKX0sdC5wcm90b3R5cGUuYW5kUz1mdW5jdGlvbiB0KGUpe2ZvcihsZXQgdD0wO3Q8dGhpcy5yb3dzO3QrKylmb3IobGV0IG49MDtuPHRoaXMuY29sdW1ucztuKyspdGhpcy5zZXQodCxuLHRoaXMuZ2V0KHQsbikmZSk7cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLmFuZE09ZnVuY3Rpb24gdChuKXtpZihuPWUuY2hlY2tNYXRyaXgobiksdGhpcy5yb3dzIT09bi5yb3dzfHx0aGlzLmNvbHVtbnMhPT1uLmNvbHVtbnMpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk1hdHJpY2VzIGRpbWVuc2lvbnMgbXVzdCBiZSBlcXVhbCIpO2ZvcihsZXQgdD0wO3Q8dGhpcy5yb3dzO3QrKylmb3IobGV0IGU9MDtlPHRoaXMuY29sdW1ucztlKyspdGhpcy5zZXQodCxlLHRoaXMuZ2V0KHQsZSkmbi5nZXQodCxlKSk7cmV0dXJuIHRoaXN9LHQuYW5kPWZ1bmN0aW9uIHQobixvKXtyZXR1cm4gbmV3IGUobikuYW5kKG8pfSx0LnByb3RvdHlwZS5vcj1mdW5jdGlvbiB0KGUpe3JldHVybiJudW1iZXIiPT10eXBlb2YgZT90aGlzLm9yUyhlKTp0aGlzLm9yTShlKX0sdC5wcm90b3R5cGUub3JTPWZ1bmN0aW9uIHQoZSl7Zm9yKGxldCB0PTA7dDx0aGlzLnJvd3M7dCsrKWZvcihsZXQgbj0wO248dGhpcy5jb2x1bW5zO24rKyl0aGlzLnNldCh0LG4sdGhpcy5nZXQodCxuKXxlKTtyZXR1cm4gdGhpc30sdC5wcm90b3R5cGUub3JNPWZ1bmN0aW9uIHQobil7aWYobj1lLmNoZWNrTWF0cml4KG4pLHRoaXMucm93cyE9PW4ucm93c3x8dGhpcy5jb2x1bW5zIT09bi5jb2x1bW5zKXRocm93IG5ldyBSYW5nZUVycm9yKCJNYXRyaWNlcyBkaW1lbnNpb25zIG11c3QgYmUgZXF1YWwiKTtmb3IobGV0IHQ9MDt0PHRoaXMucm93czt0KyspZm9yKGxldCBlPTA7ZTx0aGlzLmNvbHVtbnM7ZSsrKXRoaXMuc2V0KHQsZSx0aGlzLmdldCh0LGUpfG4uZ2V0KHQsZSkpO3JldHVybiB0aGlzfSx0Lm9yPWZ1bmN0aW9uIHQobixvKXtyZXR1cm4gbmV3IGUobikub3Iobyl9LHQucHJvdG90eXBlLnhvcj1mdW5jdGlvbiB0KGUpe3JldHVybiJudW1iZXIiPT10eXBlb2YgZT90aGlzLnhvclMoZSk6dGhpcy54b3JNKGUpfSx0LnByb3RvdHlwZS54b3JTPWZ1bmN0aW9uIHQoZSl7Zm9yKGxldCB0PTA7dDx0aGlzLnJvd3M7dCsrKWZvcihsZXQgbj0wO248dGhpcy5jb2x1bW5zO24rKyl0aGlzLnNldCh0LG4sdGhpcy5nZXQodCxuKV5lKTtyZXR1cm4gdGhpc30sdC5wcm90b3R5cGUueG9yTT1mdW5jdGlvbiB0KG4pe2lmKG49ZS5jaGVja01hdHJpeChuKSx0aGlzLnJvd3MhPT1uLnJvd3N8fHRoaXMuY29sdW1ucyE9PW4uY29sdW1ucyl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiTWF0cmljZXMgZGltZW5zaW9ucyBtdXN0IGJlIGVxdWFsIik7Zm9yKGxldCB0PTA7dDx0aGlzLnJvd3M7dCsrKWZvcihsZXQgZT0wO2U8dGhpcy5jb2x1bW5zO2UrKyl0aGlzLnNldCh0LGUsdGhpcy5nZXQodCxlKV5uLmdldCh0LGUpKTtyZXR1cm4gdGhpc30sdC54b3I9ZnVuY3Rpb24gdChuLG8pe3JldHVybiBuZXcgZShuKS54b3Iobyl9LHQucHJvdG90eXBlLmxlZnRTaGlmdD1mdW5jdGlvbiB0KGUpe3JldHVybiJudW1iZXIiPT10eXBlb2YgZT90aGlzLmxlZnRTaGlmdFMoZSk6dGhpcy5sZWZ0U2hpZnRNKGUpfSx0LnByb3RvdHlwZS5sZWZ0U2hpZnRTPWZ1bmN0aW9uIHQoZSl7Zm9yKGxldCB0PTA7dDx0aGlzLnJvd3M7dCsrKWZvcihsZXQgbj0wO248dGhpcy5jb2x1bW5zO24rKyl0aGlzLnNldCh0LG4sdGhpcy5nZXQodCxuKTw8ZSk7cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLmxlZnRTaGlmdE09ZnVuY3Rpb24gdChuKXtpZihuPWUuY2hlY2tNYXRyaXgobiksdGhpcy5yb3dzIT09bi5yb3dzfHx0aGlzLmNvbHVtbnMhPT1uLmNvbHVtbnMpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk1hdHJpY2VzIGRpbWVuc2lvbnMgbXVzdCBiZSBlcXVhbCIpO2ZvcihsZXQgdD0wO3Q8dGhpcy5yb3dzO3QrKylmb3IobGV0IGU9MDtlPHRoaXMuY29sdW1ucztlKyspdGhpcy5zZXQodCxlLHRoaXMuZ2V0KHQsZSk8PG4uZ2V0KHQsZSkpO3JldHVybiB0aGlzfSx0LmxlZnRTaGlmdD1mdW5jdGlvbiB0KG4sbyl7cmV0dXJuIG5ldyBlKG4pLmxlZnRTaGlmdChvKX0sdC5wcm90b3R5cGUuc2lnblByb3BhZ2F0aW5nUmlnaHRTaGlmdD1mdW5jdGlvbiB0KGUpe3JldHVybiJudW1iZXIiPT10eXBlb2YgZT90aGlzLnNpZ25Qcm9wYWdhdGluZ1JpZ2h0U2hpZnRTKGUpOnRoaXMuc2lnblByb3BhZ2F0aW5nUmlnaHRTaGlmdE0oZSl9LHQucHJvdG90eXBlLnNpZ25Qcm9wYWdhdGluZ1JpZ2h0U2hpZnRTPWZ1bmN0aW9uIHQoZSl7Zm9yKGxldCB0PTA7dDx0aGlzLnJvd3M7dCsrKWZvcihsZXQgbj0wO248dGhpcy5jb2x1bW5zO24rKyl0aGlzLnNldCh0LG4sdGhpcy5nZXQodCxuKT4+ZSk7cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLnNpZ25Qcm9wYWdhdGluZ1JpZ2h0U2hpZnRNPWZ1bmN0aW9uIHQobil7aWYobj1lLmNoZWNrTWF0cml4KG4pLHRoaXMucm93cyE9PW4ucm93c3x8dGhpcy5jb2x1bW5zIT09bi5jb2x1bW5zKXRocm93IG5ldyBSYW5nZUVycm9yKCJNYXRyaWNlcyBkaW1lbnNpb25zIG11c3QgYmUgZXF1YWwiKTtmb3IobGV0IHQ9MDt0PHRoaXMucm93czt0KyspZm9yKGxldCBlPTA7ZTx0aGlzLmNvbHVtbnM7ZSsrKXRoaXMuc2V0KHQsZSx0aGlzLmdldCh0LGUpPj5uLmdldCh0LGUpKTtyZXR1cm4gdGhpc30sdC5zaWduUHJvcGFnYXRpbmdSaWdodFNoaWZ0PWZ1bmN0aW9uIHQobixvKXtyZXR1cm4gbmV3IGUobikuc2lnblByb3BhZ2F0aW5nUmlnaHRTaGlmdChvKX0sdC5wcm90b3R5cGUucmlnaHRTaGlmdD1mdW5jdGlvbiB0KGUpe3JldHVybiJudW1iZXIiPT10eXBlb2YgZT90aGlzLnJpZ2h0U2hpZnRTKGUpOnRoaXMucmlnaHRTaGlmdE0oZSl9LHQucHJvdG90eXBlLnJpZ2h0U2hpZnRTPWZ1bmN0aW9uIHQoZSl7Zm9yKGxldCB0PTA7dDx0aGlzLnJvd3M7dCsrKWZvcihsZXQgbj0wO248dGhpcy5jb2x1bW5zO24rKyl0aGlzLnNldCh0LG4sdGhpcy5nZXQodCxuKT4+PmUpO3JldHVybiB0aGlzfSx0LnByb3RvdHlwZS5yaWdodFNoaWZ0TT1mdW5jdGlvbiB0KG4pe2lmKG49ZS5jaGVja01hdHJpeChuKSx0aGlzLnJvd3MhPT1uLnJvd3N8fHRoaXMuY29sdW1ucyE9PW4uY29sdW1ucyl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiTWF0cmljZXMgZGltZW5zaW9ucyBtdXN0IGJlIGVxdWFsIik7Zm9yKGxldCB0PTA7dDx0aGlzLnJvd3M7dCsrKWZvcihsZXQgZT0wO2U8dGhpcy5jb2x1bW5zO2UrKyl0aGlzLnNldCh0LGUsdGhpcy5nZXQodCxlKT4+Pm4uZ2V0KHQsZSkpO3JldHVybiB0aGlzfSx0LnJpZ2h0U2hpZnQ9ZnVuY3Rpb24gdChuLG8pe3JldHVybiBuZXcgZShuKS5yaWdodFNoaWZ0KG8pfSx0LnByb3RvdHlwZS56ZXJvRmlsbFJpZ2h0U2hpZnQ9dC5wcm90b3R5cGUucmlnaHRTaGlmdCx0LnByb3RvdHlwZS56ZXJvRmlsbFJpZ2h0U2hpZnRTPXQucHJvdG90eXBlLnJpZ2h0U2hpZnRTLHQucHJvdG90eXBlLnplcm9GaWxsUmlnaHRTaGlmdE09dC5wcm90b3R5cGUucmlnaHRTaGlmdE0sdC56ZXJvRmlsbFJpZ2h0U2hpZnQ9dC5yaWdodFNoaWZ0LHQucHJvdG90eXBlLm5vdD1mdW5jdGlvbiB0KCl7Zm9yKGxldCB0PTA7dDx0aGlzLnJvd3M7dCsrKWZvcihsZXQgZT0wO2U8dGhpcy5jb2x1bW5zO2UrKyl0aGlzLnNldCh0LGUsfnRoaXMuZ2V0KHQsZSkpO3JldHVybiB0aGlzfSx0Lm5vdD1mdW5jdGlvbiB0KG4pe3JldHVybiBuZXcgZShuKS5ub3QoKX0sdC5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uIHQoKXtmb3IobGV0IHQ9MDt0PHRoaXMucm93czt0KyspZm9yKGxldCBlPTA7ZTx0aGlzLmNvbHVtbnM7ZSsrKXRoaXMuc2V0KHQsZSxNYXRoLmFicyh0aGlzLmdldCh0LGUpKSk7cmV0dXJuIHRoaXN9LHQuYWJzPWZ1bmN0aW9uIHQobil7cmV0dXJuIG5ldyBlKG4pLmFicygpfSx0LnByb3RvdHlwZS5hY29zPWZ1bmN0aW9uIHQoKXtmb3IobGV0IHQ9MDt0PHRoaXMucm93czt0KyspZm9yKGxldCBlPTA7ZTx0aGlzLmNvbHVtbnM7ZSsrKXRoaXMuc2V0KHQsZSxNYXRoLmFjb3ModGhpcy5nZXQodCxlKSkpO3JldHVybiB0aGlzfSx0LmFjb3M9ZnVuY3Rpb24gdChuKXtyZXR1cm4gbmV3IGUobikuYWNvcygpfSx0LnByb3RvdHlwZS5hY29zaD1mdW5jdGlvbiB0KCl7Zm9yKGxldCB0PTA7dDx0aGlzLnJvd3M7dCsrKWZvcihsZXQgZT0wO2U8dGhpcy5jb2x1bW5zO2UrKyl0aGlzLnNldCh0LGUsTWF0aC5hY29zaCh0aGlzLmdldCh0LGUpKSk7cmV0dXJuIHRoaXN9LHQuYWNvc2g9ZnVuY3Rpb24gdChuKXtyZXR1cm4gbmV3IGUobikuYWNvc2goKX0sdC5wcm90b3R5cGUuYXNpbj1mdW5jdGlvbiB0KCl7Zm9yKGxldCB0PTA7dDx0aGlzLnJvd3M7dCsrKWZvcihsZXQgZT0wO2U8dGhpcy5jb2x1bW5zO2UrKyl0aGlzLnNldCh0LGUsTWF0aC5hc2luKHRoaXMuZ2V0KHQsZSkpKTtyZXR1cm4gdGhpc30sdC5hc2luPWZ1bmN0aW9uIHQobil7cmV0dXJuIG5ldyBlKG4pLmFzaW4oKX0sdC5wcm90b3R5cGUuYXNpbmg9ZnVuY3Rpb24gdCgpe2ZvcihsZXQgdD0wO3Q8dGhpcy5yb3dzO3QrKylmb3IobGV0IGU9MDtlPHRoaXMuY29sdW1ucztlKyspdGhpcy5zZXQodCxlLE1hdGguYXNpbmgodGhpcy5nZXQodCxlKSkpO3JldHVybiB0aGlzfSx0LmFzaW5oPWZ1bmN0aW9uIHQobil7cmV0dXJuIG5ldyBlKG4pLmFzaW5oKCl9LHQucHJvdG90eXBlLmF0YW49ZnVuY3Rpb24gdCgpe2ZvcihsZXQgdD0wO3Q8dGhpcy5yb3dzO3QrKylmb3IobGV0IGU9MDtlPHRoaXMuY29sdW1ucztlKyspdGhpcy5zZXQodCxlLE1hdGguYXRhbih0aGlzLmdldCh0LGUpKSk7cmV0dXJuIHRoaXN9LHQuYXRhbj1mdW5jdGlvbiB0KG4pe3JldHVybiBuZXcgZShuKS5hdGFuKCl9LHQucHJvdG90eXBlLmF0YW5oPWZ1bmN0aW9uIHQoKXtmb3IobGV0IHQ9MDt0PHRoaXMucm93czt0KyspZm9yKGxldCBlPTA7ZTx0aGlzLmNvbHVtbnM7ZSsrKXRoaXMuc2V0KHQsZSxNYXRoLmF0YW5oKHRoaXMuZ2V0KHQsZSkpKTtyZXR1cm4gdGhpc30sdC5hdGFuaD1mdW5jdGlvbiB0KG4pe3JldHVybiBuZXcgZShuKS5hdGFuaCgpfSx0LnByb3RvdHlwZS5jYnJ0PWZ1bmN0aW9uIHQoKXtmb3IobGV0IHQ9MDt0PHRoaXMucm93czt0KyspZm9yKGxldCBlPTA7ZTx0aGlzLmNvbHVtbnM7ZSsrKXRoaXMuc2V0KHQsZSxNYXRoLmNicnQodGhpcy5nZXQodCxlKSkpO3JldHVybiB0aGlzfSx0LmNicnQ9ZnVuY3Rpb24gdChuKXtyZXR1cm4gbmV3IGUobikuY2JydCgpfSx0LnByb3RvdHlwZS5jZWlsPWZ1bmN0aW9uIHQoKXtmb3IobGV0IHQ9MDt0PHRoaXMucm93czt0KyspZm9yKGxldCBlPTA7ZTx0aGlzLmNvbHVtbnM7ZSsrKXRoaXMuc2V0KHQsZSxNYXRoLmNlaWwodGhpcy5nZXQodCxlKSkpO3JldHVybiB0aGlzfSx0LmNlaWw9ZnVuY3Rpb24gdChuKXtyZXR1cm4gbmV3IGUobikuY2VpbCgpfSx0LnByb3RvdHlwZS5jbHozMj1mdW5jdGlvbiB0KCl7Zm9yKGxldCB0PTA7dDx0aGlzLnJvd3M7dCsrKWZvcihsZXQgZT0wO2U8dGhpcy5jb2x1bW5zO2UrKyl0aGlzLnNldCh0LGUsTWF0aC5jbHozMih0aGlzLmdldCh0LGUpKSk7cmV0dXJuIHRoaXN9LHQuY2x6MzI9ZnVuY3Rpb24gdChuKXtyZXR1cm4gbmV3IGUobikuY2x6MzIoKX0sdC5wcm90b3R5cGUuY29zPWZ1bmN0aW9uIHQoKXtmb3IobGV0IHQ9MDt0PHRoaXMucm93czt0KyspZm9yKGxldCBlPTA7ZTx0aGlzLmNvbHVtbnM7ZSsrKXRoaXMuc2V0KHQsZSxNYXRoLmNvcyh0aGlzLmdldCh0LGUpKSk7cmV0dXJuIHRoaXN9LHQuY29zPWZ1bmN0aW9uIHQobil7cmV0dXJuIG5ldyBlKG4pLmNvcygpfSx0LnByb3RvdHlwZS5jb3NoPWZ1bmN0aW9uIHQoKXtmb3IobGV0IHQ9MDt0PHRoaXMucm93czt0KyspZm9yKGxldCBlPTA7ZTx0aGlzLmNvbHVtbnM7ZSsrKXRoaXMuc2V0KHQsZSxNYXRoLmNvc2godGhpcy5nZXQodCxlKSkpO3JldHVybiB0aGlzfSx0LmNvc2g9ZnVuY3Rpb24gdChuKXtyZXR1cm4gbmV3IGUobikuY29zaCgpfSx0LnByb3RvdHlwZS5leHA9ZnVuY3Rpb24gdCgpe2ZvcihsZXQgdD0wO3Q8dGhpcy5yb3dzO3QrKylmb3IobGV0IGU9MDtlPHRoaXMuY29sdW1ucztlKyspdGhpcy5zZXQodCxlLE1hdGguZXhwKHRoaXMuZ2V0KHQsZSkpKTtyZXR1cm4gdGhpc30sdC5leHA9ZnVuY3Rpb24gdChuKXtyZXR1cm4gbmV3IGUobikuZXhwKCl9LHQucHJvdG90eXBlLmV4cG0xPWZ1bmN0aW9uIHQoKXtmb3IobGV0IHQ9MDt0PHRoaXMucm93czt0KyspZm9yKGxldCBlPTA7ZTx0aGlzLmNvbHVtbnM7ZSsrKXRoaXMuc2V0KHQsZSxNYXRoLmV4cG0xKHRoaXMuZ2V0KHQsZSkpKTtyZXR1cm4gdGhpc30sdC5leHBtMT1mdW5jdGlvbiB0KG4pe3JldHVybiBuZXcgZShuKS5leHBtMSgpfSx0LnByb3RvdHlwZS5mbG9vcj1mdW5jdGlvbiB0KCl7Zm9yKGxldCB0PTA7dDx0aGlzLnJvd3M7dCsrKWZvcihsZXQgZT0wO2U8dGhpcy5jb2x1bW5zO2UrKyl0aGlzLnNldCh0LGUsTWF0aC5mbG9vcih0aGlzLmdldCh0LGUpKSk7cmV0dXJuIHRoaXN9LHQuZmxvb3I9ZnVuY3Rpb24gdChuKXtyZXR1cm4gbmV3IGUobikuZmxvb3IoKX0sdC5wcm90b3R5cGUuZnJvdW5kPWZ1bmN0aW9uIHQoKXtmb3IobGV0IHQ9MDt0PHRoaXMucm93czt0KyspZm9yKGxldCBlPTA7ZTx0aGlzLmNvbHVtbnM7ZSsrKXRoaXMuc2V0KHQsZSxNYXRoLmZyb3VuZCh0aGlzLmdldCh0LGUpKSk7cmV0dXJuIHRoaXN9LHQuZnJvdW5kPWZ1bmN0aW9uIHQobil7cmV0dXJuIG5ldyBlKG4pLmZyb3VuZCgpfSx0LnByb3RvdHlwZS5sb2c9ZnVuY3Rpb24gdCgpe2ZvcihsZXQgdD0wO3Q8dGhpcy5yb3dzO3QrKylmb3IobGV0IGU9MDtlPHRoaXMuY29sdW1ucztlKyspdGhpcy5zZXQodCxlLE1hdGgubG9nKHRoaXMuZ2V0KHQsZSkpKTtyZXR1cm4gdGhpc30sdC5sb2c9ZnVuY3Rpb24gdChuKXtyZXR1cm4gbmV3IGUobikubG9nKCl9LHQucHJvdG90eXBlLmxvZzFwPWZ1bmN0aW9uIHQoKXtmb3IobGV0IHQ9MDt0PHRoaXMucm93czt0KyspZm9yKGxldCBlPTA7ZTx0aGlzLmNvbHVtbnM7ZSsrKXRoaXMuc2V0KHQsZSxNYXRoLmxvZzFwKHRoaXMuZ2V0KHQsZSkpKTtyZXR1cm4gdGhpc30sdC5sb2cxcD1mdW5jdGlvbiB0KG4pe3JldHVybiBuZXcgZShuKS5sb2cxcCgpfSx0LnByb3RvdHlwZS5sb2cxMD1mdW5jdGlvbiB0KCl7Zm9yKGxldCB0PTA7dDx0aGlzLnJvd3M7dCsrKWZvcihsZXQgZT0wO2U8dGhpcy5jb2x1bW5zO2UrKyl0aGlzLnNldCh0LGUsTWF0aC5sb2cxMCh0aGlzLmdldCh0LGUpKSk7cmV0dXJuIHRoaXN9LHQubG9nMTA9ZnVuY3Rpb24gdChuKXtyZXR1cm4gbmV3IGUobikubG9nMTAoKX0sdC5wcm90b3R5cGUubG9nMj1mdW5jdGlvbiB0KCl7Zm9yKGxldCB0PTA7dDx0aGlzLnJvd3M7dCsrKWZvcihsZXQgZT0wO2U8dGhpcy5jb2x1bW5zO2UrKyl0aGlzLnNldCh0LGUsTWF0aC5sb2cyKHRoaXMuZ2V0KHQsZSkpKTtyZXR1cm4gdGhpc30sdC5sb2cyPWZ1bmN0aW9uIHQobil7cmV0dXJuIG5ldyBlKG4pLmxvZzIoKX0sdC5wcm90b3R5cGUucm91bmQ9ZnVuY3Rpb24gdCgpe2ZvcihsZXQgdD0wO3Q8dGhpcy5yb3dzO3QrKylmb3IobGV0IGU9MDtlPHRoaXMuY29sdW1ucztlKyspdGhpcy5zZXQodCxlLE1hdGgucm91bmQodGhpcy5nZXQodCxlKSkpO3JldHVybiB0aGlzfSx0LnJvdW5kPWZ1bmN0aW9uIHQobil7cmV0dXJuIG5ldyBlKG4pLnJvdW5kKCl9LHQucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24gdCgpe2ZvcihsZXQgdD0wO3Q8dGhpcy5yb3dzO3QrKylmb3IobGV0IGU9MDtlPHRoaXMuY29sdW1ucztlKyspdGhpcy5zZXQodCxlLE1hdGguc2lnbih0aGlzLmdldCh0LGUpKSk7cmV0dXJuIHRoaXN9LHQuc2lnbj1mdW5jdGlvbiB0KG4pe3JldHVybiBuZXcgZShuKS5zaWduKCl9LHQucHJvdG90eXBlLnNpbj1mdW5jdGlvbiB0KCl7Zm9yKGxldCB0PTA7dDx0aGlzLnJvd3M7dCsrKWZvcihsZXQgZT0wO2U8dGhpcy5jb2x1bW5zO2UrKyl0aGlzLnNldCh0LGUsTWF0aC5zaW4odGhpcy5nZXQodCxlKSkpO3JldHVybiB0aGlzfSx0LnNpbj1mdW5jdGlvbiB0KG4pe3JldHVybiBuZXcgZShuKS5zaW4oKX0sdC5wcm90b3R5cGUuc2luaD1mdW5jdGlvbiB0KCl7Zm9yKGxldCB0PTA7dDx0aGlzLnJvd3M7dCsrKWZvcihsZXQgZT0wO2U8dGhpcy5jb2x1bW5zO2UrKyl0aGlzLnNldCh0LGUsTWF0aC5zaW5oKHRoaXMuZ2V0KHQsZSkpKTtyZXR1cm4gdGhpc30sdC5zaW5oPWZ1bmN0aW9uIHQobil7cmV0dXJuIG5ldyBlKG4pLnNpbmgoKX0sdC5wcm90b3R5cGUuc3FydD1mdW5jdGlvbiB0KCl7Zm9yKGxldCB0PTA7dDx0aGlzLnJvd3M7dCsrKWZvcihsZXQgZT0wO2U8dGhpcy5jb2x1bW5zO2UrKyl0aGlzLnNldCh0LGUsTWF0aC5zcXJ0KHRoaXMuZ2V0KHQsZSkpKTtyZXR1cm4gdGhpc30sdC5zcXJ0PWZ1bmN0aW9uIHQobil7cmV0dXJuIG5ldyBlKG4pLnNxcnQoKX0sdC5wcm90b3R5cGUudGFuPWZ1bmN0aW9uIHQoKXtmb3IobGV0IHQ9MDt0PHRoaXMucm93czt0KyspZm9yKGxldCBlPTA7ZTx0aGlzLmNvbHVtbnM7ZSsrKXRoaXMuc2V0KHQsZSxNYXRoLnRhbih0aGlzLmdldCh0LGUpKSk7cmV0dXJuIHRoaXN9LHQudGFuPWZ1bmN0aW9uIHQobil7cmV0dXJuIG5ldyBlKG4pLnRhbigpfSx0LnByb3RvdHlwZS50YW5oPWZ1bmN0aW9uIHQoKXtmb3IobGV0IHQ9MDt0PHRoaXMucm93czt0KyspZm9yKGxldCBlPTA7ZTx0aGlzLmNvbHVtbnM7ZSsrKXRoaXMuc2V0KHQsZSxNYXRoLnRhbmgodGhpcy5nZXQodCxlKSkpO3JldHVybiB0aGlzfSx0LnRhbmg9ZnVuY3Rpb24gdChuKXtyZXR1cm4gbmV3IGUobikudGFuaCgpfSx0LnByb3RvdHlwZS50cnVuYz1mdW5jdGlvbiB0KCl7Zm9yKGxldCB0PTA7dDx0aGlzLnJvd3M7dCsrKWZvcihsZXQgZT0wO2U8dGhpcy5jb2x1bW5zO2UrKyl0aGlzLnNldCh0LGUsTWF0aC50cnVuYyh0aGlzLmdldCh0LGUpKSk7cmV0dXJuIHRoaXN9LHQudHJ1bmM9ZnVuY3Rpb24gdChuKXtyZXR1cm4gbmV3IGUobikudHJ1bmMoKX0sdC5wb3c9ZnVuY3Rpb24gdChuLG8pe3JldHVybiBuZXcgZShuKS5wb3cobyl9LHQucHJvdG90eXBlLnBvdz1mdW5jdGlvbiB0KGUpe3JldHVybiJudW1iZXIiPT10eXBlb2YgZT90aGlzLnBvd1MoZSk6dGhpcy5wb3dNKGUpfSx0LnByb3RvdHlwZS5wb3dTPWZ1bmN0aW9uIHQoZSl7Zm9yKGxldCB0PTA7dDx0aGlzLnJvd3M7dCsrKWZvcihsZXQgbj0wO248dGhpcy5jb2x1bW5zO24rKyl0aGlzLnNldCh0LG4sTWF0aC5wb3codGhpcy5nZXQodCxuKSxlKSk7cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLnBvd009ZnVuY3Rpb24gdChuKXtpZihuPWUuY2hlY2tNYXRyaXgobiksdGhpcy5yb3dzIT09bi5yb3dzfHx0aGlzLmNvbHVtbnMhPT1uLmNvbHVtbnMpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk1hdHJpY2VzIGRpbWVuc2lvbnMgbXVzdCBiZSBlcXVhbCIpO2ZvcihsZXQgdD0wO3Q8dGhpcy5yb3dzO3QrKylmb3IobGV0IGU9MDtlPHRoaXMuY29sdW1ucztlKyspdGhpcy5zZXQodCxlLE1hdGgucG93KHRoaXMuZ2V0KHQsZSksbi5nZXQodCxlKSkpO3JldHVybiB0aGlzfX0pKFBDdCxTQ3QpO2NsYXNzIEVDdCBleHRlbmRzIFBDdHtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuZGF0YT10LHRoaXMucm93cz10Lmxlbmd0aCx0aGlzLmNvbHVtbnM9dFswXS5sZW5ndGh9c2V0KHQsZSxuKXtyZXR1cm4gdGhpcy5kYXRhW3RdW2VdPW4sdGhpc31nZXQodCxlKXtyZXR1cm4gdGhpcy5kYXRhW3RdW2VdfX1jbGFzcyBBQ3R7Y29uc3RydWN0b3IodCl7bGV0IGUsbixvLGksYSxyLHMsbCxjLGQ9KHQ9RUN0LmNoZWNrTWF0cml4KHQpKS5jbG9uZSgpLHA9ZC5yb3dzLG09ZC5jb2x1bW5zLHU9bmV3IEZsb2F0NjRBcnJheShwKSxmPTE7Zm9yKGU9MDtlPHA7ZSsrKXVbZV09ZTtmb3IobD1uZXcgRmxvYXQ2NEFycmF5KHApLG49MDtuPG07bisrKXtmb3IoZT0wO2U8cDtlKyspbFtlXT1kLmdldChlLG4pO2ZvcihlPTA7ZTxwO2UrKyl7Zm9yKGM9TWF0aC5taW4oZSxuKSxhPTAsbz0wO288YztvKyspYSs9ZC5nZXQoZSxvKSpsW29dO2xbZV0tPWEsZC5zZXQoZSxuLGxbZV0pfWZvcihpPW4sZT1uKzE7ZTxwO2UrKylNYXRoLmFicyhsW2VdKT5NYXRoLmFicyhsW2ldKSYmKGk9ZSk7aWYoaSE9PW4pe2ZvcihvPTA7bzxtO28rKylyPWQuZ2V0KGksbyksZC5zZXQoaSxvLGQuZ2V0KG4sbykpLGQuc2V0KG4sbyxyKTtzPXVbaV0sdVtpXT11W25dLHVbbl09cyxmPS1mfWlmKG48cCYmMCE9PWQuZ2V0KG4sbikpZm9yKGU9bisxO2U8cDtlKyspZC5zZXQoZSxuLGQuZ2V0KGUsbikvZC5nZXQobixuKSl9dGhpcy5MVT1kLHRoaXMucGl2b3RWZWN0b3I9dSx0aGlzLnBpdm90U2lnbj1mfWlzU2luZ3VsYXIoKXtsZXQgdD10aGlzLkxVLGU9dC5jb2x1bW5zO2ZvcihsZXQgbj0wO248ZTtuKyspaWYoMD09PXQuZ2V0KG4sbikpcmV0dXJuITA7cmV0dXJuITF9c29sdmUodCl7dD1TQ3QuY2hlY2tNYXRyaXgodCk7bGV0IGU9dGhpcy5MVTtpZihlLnJvd3MhPT10LnJvd3MpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIG1hdHJpeCBkaW1lbnNpb25zIik7aWYodGhpcy5pc1Npbmd1bGFyKCkpdGhyb3cgbmV3IEVycm9yKCJMVSBtYXRyaXggaXMgc2luZ3VsYXIiKTtsZXQgbixvLGksYT10LmNvbHVtbnMscj10LnN1Yk1hdHJpeFJvdyh0aGlzLnBpdm90VmVjdG9yLDAsYS0xKSxzPWUuY29sdW1ucztmb3IoaT0wO2k8cztpKyspZm9yKG49aSsxO248cztuKyspZm9yKG89MDtvPGE7bysrKXIuc2V0KG4sbyxyLmdldChuLG8pLXIuZ2V0KGksbykqZS5nZXQobixpKSk7Zm9yKGk9cy0xO2k+PTA7aS0tKXtmb3Iobz0wO288YTtvKyspci5zZXQoaSxvLHIuZ2V0KGksbykvZS5nZXQoaSxpKSk7Zm9yKG49MDtuPGk7bisrKWZvcihvPTA7bzxhO28rKylyLnNldChuLG8sci5nZXQobixvKS1yLmdldChpLG8pKmUuZ2V0KG4saSkpfXJldHVybiByfWdldCBkZXRlcm1pbmFudCgpe2xldCB0PXRoaXMuTFU7aWYoIXQuaXNTcXVhcmUoKSl0aHJvdyBuZXcgRXJyb3IoIk1hdHJpeCBtdXN0IGJlIHNxdWFyZSIpO2xldCBlPXRoaXMucGl2b3RTaWduLG49dC5jb2x1bW5zO2ZvcihsZXQgbz0wO288bjtvKyspZSo9dC5nZXQobyxvKTtyZXR1cm4gZX1nZXQgbG93ZXJUcmlhbmd1bGFyTWF0cml4KCl7bGV0IHQ9dGhpcy5MVSxlPXQucm93cyxuPXQuY29sdW1ucyxvPW5ldyBTQ3QoZSxuKTtmb3IobGV0IGk9MDtpPGU7aSsrKWZvcihsZXQgZT0wO2U8bjtlKyspby5zZXQoaSxlLGk+ZT90LmdldChpLGUpOmk9PT1lPzE6MCk7cmV0dXJuIG99Z2V0IHVwcGVyVHJpYW5ndWxhck1hdHJpeCgpe2xldCB0PXRoaXMuTFUsZT10LnJvd3Msbj10LmNvbHVtbnMsbz1uZXcgU0N0KGUsbik7Zm9yKGxldCBpPTA7aTxlO2krKylmb3IobGV0IGU9MDtlPG47ZSsrKW8uc2V0KGksZSxpPD1lP3QuZ2V0KGksZSk6MCk7cmV0dXJuIG99Z2V0IHBpdm90UGVybXV0YXRpb25WZWN0b3IoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnBpdm90VmVjdG9yKX19ZnVuY3Rpb24gUkN0KHQsZSl7bGV0IG49MDtyZXR1cm4gTWF0aC5hYnModCk+TWF0aC5hYnMoZSk/KG49ZS90LE1hdGguYWJzKHQpKk1hdGguc3FydCgxK24qbikpOjAhPT1lPyhuPXQvZSxNYXRoLmFicyhlKSpNYXRoLnNxcnQoMStuKm4pKTowfWNsYXNzIFRDdHtjb25zdHJ1Y3Rvcih0KXtsZXQgZSxuLG8saSxhPSh0PUVDdC5jaGVja01hdHJpeCh0KSkuY2xvbmUoKSxyPXQucm93cyxzPXQuY29sdW1ucyxsPW5ldyBGbG9hdDY0QXJyYXkocyk7Zm9yKG89MDtvPHM7bysrKXtsZXQgdD0wO2ZvcihlPW87ZTxyO2UrKyl0PVJDdCh0LGEuZ2V0KGUsbykpO2lmKDAhPT10KXtmb3IoYS5nZXQobyxvKTwwJiYodD0tdCksZT1vO2U8cjtlKyspYS5zZXQoZSxvLGEuZ2V0KGUsbykvdCk7Zm9yKGEuc2V0KG8sbyxhLmdldChvLG8pKzEpLG49bysxO248cztuKyspe2ZvcihpPTAsZT1vO2U8cjtlKyspaSs9YS5nZXQoZSxvKSphLmdldChlLG4pO2ZvcihpPS1pL2EuZ2V0KG8sbyksZT1vO2U8cjtlKyspYS5zZXQoZSxuLGEuZ2V0KGUsbikraSphLmdldChlLG8pKX19bFtvXT0tdH10aGlzLlFSPWEsdGhpcy5SZGlhZz1sfXNvbHZlKHQpe3Q9U0N0LmNoZWNrTWF0cml4KHQpO2xldCBlPXRoaXMuUVIsbj1lLnJvd3M7aWYodC5yb3dzIT09bil0aHJvdyBuZXcgRXJyb3IoIk1hdHJpeCByb3cgZGltZW5zaW9ucyBtdXN0IGFncmVlIik7aWYoIXRoaXMuaXNGdWxsUmFuaygpKXRocm93IG5ldyBFcnJvcigiTWF0cml4IGlzIHJhbmsgZGVmaWNpZW50Iik7bGV0IG8saSxhLHIscz10LmNvbHVtbnMsbD10LmNsb25lKCksYz1lLmNvbHVtbnM7Zm9yKGE9MDthPGM7YSsrKWZvcihpPTA7aTxzO2krKyl7Zm9yKHI9MCxvPWE7bzxuO28rKylyKz1lLmdldChvLGEpKmwuZ2V0KG8saSk7Zm9yKHI9LXIvZS5nZXQoYSxhKSxvPWE7bzxuO28rKylsLnNldChvLGksbC5nZXQobyxpKStyKmUuZ2V0KG8sYSkpfWZvcihhPWMtMTthPj0wO2EtLSl7Zm9yKGk9MDtpPHM7aSsrKWwuc2V0KGEsaSxsLmdldChhLGkpL3RoaXMuUmRpYWdbYV0pO2ZvcihvPTA7bzxhO28rKylmb3IoaT0wO2k8cztpKyspbC5zZXQobyxpLGwuZ2V0KG8saSktbC5nZXQoYSxpKSplLmdldChvLGEpKX1yZXR1cm4gbC5zdWJNYXRyaXgoMCxjLTEsMCxzLTEpfWlzRnVsbFJhbmsoKXtsZXQgdD10aGlzLlFSLmNvbHVtbnM7Zm9yKGxldCBlPTA7ZTx0O2UrKylpZigwPT09dGhpcy5SZGlhZ1tlXSlyZXR1cm4hMTtyZXR1cm4hMH1nZXQgdXBwZXJUcmlhbmd1bGFyTWF0cml4KCl7bGV0IHQsZSxuPXRoaXMuUVIsbz1uLmNvbHVtbnMsaT1uZXcgU0N0KG8sbyk7Zm9yKHQ9MDt0PG87dCsrKWZvcihlPTA7ZTxvO2UrKylpLnNldCh0LGUsdDxlP24uZ2V0KHQsZSk6dD09PWU/dGhpcy5SZGlhZ1t0XTowKTtyZXR1cm4gaX1nZXQgb3J0aG9nb25hbE1hdHJpeCgpe2xldCB0LGUsbixvLGk9dGhpcy5RUixhPWkucm93cyxyPWkuY29sdW1ucyxzPW5ldyBTQ3QoYSxyKTtmb3Iobj1yLTE7bj49MDtuLS0pe2Zvcih0PTA7dDxhO3QrKylzLnNldCh0LG4sMCk7Zm9yKHMuc2V0KG4sbiwxKSxlPW47ZTxyO2UrKylpZigwIT09aS5nZXQobixuKSl7Zm9yKG89MCx0PW47dDxhO3QrKylvKz1pLmdldCh0LG4pKnMuZ2V0KHQsZSk7Zm9yKG89LW8vaS5nZXQobixuKSx0PW47dDxhO3QrKylzLnNldCh0LGUscy5nZXQodCxlKStvKmkuZ2V0KHQsbikpfX1yZXR1cm4gc319Y2xhc3MgTkN0e2NvbnN0cnVjdG9yKHQsZT17fSl7aWYoKHQ9RUN0LmNoZWNrTWF0cml4KHQpKS5pc0VtcHR5KCkpdGhyb3cgbmV3IEVycm9yKCJNYXRyaXggbXVzdCBiZSBub24tZW1wdHkiKTtsZXQgbj10LnJvd3Msbz10LmNvbHVtbnM7Y29uc3R7Y29tcHV0ZUxlZnRTaW5ndWxhclZlY3RvcnM6aT0hMCxjb21wdXRlUmlnaHRTaW5ndWxhclZlY3RvcnM6YT0hMCxhdXRvVHJhbnNwb3NlOnI9ITF9PWU7bGV0IHMsbD1Cb29sZWFuKGkpLGM9Qm9vbGVhbihhKSxkPSExO2lmKG48bylpZihyKXtzPXQudHJhbnNwb3NlKCksbj1zLnJvd3Msbz1zLmNvbHVtbnMsZD0hMDtsZXQgZT1sO2w9YyxjPWV9ZWxzZSBzPXQuY2xvbmUoKSxjb25zb2xlLndhcm4oIkNvbXB1dGluZyBTVkQgb24gYSBtYXRyaXggd2l0aCBtb3JlIGNvbHVtbnMgdGhhbiByb3dzLiBDb25zaWRlciBlbmFibGluZyBhdXRvVHJhbnNwb3NlIik7ZWxzZSBzPXQuY2xvbmUoKTtsZXQgcD1NYXRoLm1pbihuLG8pLG09TWF0aC5taW4obisxLG8pLHU9bmV3IEZsb2F0NjRBcnJheShtKSxmPW5ldyBTQ3QobixwKSxnPW5ldyBTQ3QobyxvKSxoPW5ldyBGbG9hdDY0QXJyYXkobyksYj1uZXcgRmxvYXQ2NEFycmF5KG4pLHk9bmV3IEZsb2F0NjRBcnJheShtKTtmb3IobGV0IHQ9MDt0PG07dCsrKXlbdF09dDtsZXQgXz1NYXRoLm1pbihuLTEsbyksQz1NYXRoLm1heCgwLE1hdGgubWluKG8tMixuKSksTT1NYXRoLm1heChfLEMpO2ZvcihsZXQgdD0wO3Q8TTt0Kyspe2lmKHQ8Xyl7dVt0XT0wO2ZvcihsZXQgZT10O2U8bjtlKyspdVt0XT1SQ3QodVt0XSxzLmdldChlLHQpKTtpZigwIT09dVt0XSl7cy5nZXQodCx0KTwwJiYodVt0XT0tdVt0XSk7Zm9yKGxldCBlPXQ7ZTxuO2UrKylzLnNldChlLHQscy5nZXQoZSx0KS91W3RdKTtzLnNldCh0LHQscy5nZXQodCx0KSsxKX11W3RdPS11W3RdfWZvcihsZXQgZT10KzE7ZTxvO2UrKyl7aWYodDxfJiYwIT09dVt0XSl7bGV0IG89MDtmb3IobGV0IGk9dDtpPG47aSsrKW8rPXMuZ2V0KGksdCkqcy5nZXQoaSxlKTtvPS1vL3MuZ2V0KHQsdCk7Zm9yKGxldCBpPXQ7aTxuO2krKylzLnNldChpLGUscy5nZXQoaSxlKStvKnMuZ2V0KGksdCkpfWhbZV09cy5nZXQodCxlKX1pZihsJiZ0PF8pZm9yKGxldCBlPXQ7ZTxuO2UrKylmLnNldChlLHQscy5nZXQoZSx0KSk7aWYodDxDKXtoW3RdPTA7Zm9yKGxldCBlPXQrMTtlPG87ZSsrKWhbdF09UkN0KGhbdF0saFtlXSk7aWYoMCE9PWhbdF0pe2hbdCsxXTwwJiYoaFt0XT0wLWhbdF0pO2ZvcihsZXQgZT10KzE7ZTxvO2UrKyloW2VdLz1oW3RdO2hbdCsxXSs9MX1pZihoW3RdPS1oW3RdLHQrMTxuJiYwIT09aFt0XSl7Zm9yKGxldCBlPXQrMTtlPG47ZSsrKWJbZV09MDtmb3IobGV0IGU9dCsxO2U8bjtlKyspZm9yKGxldCBuPXQrMTtuPG87bisrKWJbZV0rPWhbbl0qcy5nZXQoZSxuKTtmb3IobGV0IGU9dCsxO2U8bztlKyspe2xldCBvPS1oW2VdL2hbdCsxXTtmb3IobGV0IGk9dCsxO2k8bjtpKyspcy5zZXQoaSxlLHMuZ2V0KGksZSkrbypiW2ldKX19aWYoYylmb3IobGV0IGU9dCsxO2U8bztlKyspZy5zZXQoZSx0LGhbZV0pfX1sZXQgdj1NYXRoLm1pbihvLG4rMSk7aWYoXzxvJiYodVtfXT1zLmdldChfLF8pKSxuPHYmJih1W3YtMV09MCksQysxPHYmJihoW0NdPXMuZ2V0KEMsdi0xKSksaFt2LTFdPTAsbCl7Zm9yKGxldCB0PV87dDxwO3QrKyl7Zm9yKGxldCBlPTA7ZTxuO2UrKylmLnNldChlLHQsMCk7Zi5zZXQodCx0LDEpfWZvcihsZXQgdD1fLTE7dD49MDt0LS0paWYoMCE9PXVbdF0pe2ZvcihsZXQgZT10KzE7ZTxwO2UrKyl7bGV0IG89MDtmb3IobGV0IGk9dDtpPG47aSsrKW8rPWYuZ2V0KGksdCkqZi5nZXQoaSxlKTtvPS1vL2YuZ2V0KHQsdCk7Zm9yKGxldCBpPXQ7aTxuO2krKylmLnNldChpLGUsZi5nZXQoaSxlKStvKmYuZ2V0KGksdCkpfWZvcihsZXQgZT10O2U8bjtlKyspZi5zZXQoZSx0LC1mLmdldChlLHQpKTtmLnNldCh0LHQsMStmLmdldCh0LHQpKTtmb3IobGV0IGU9MDtlPHQtMTtlKyspZi5zZXQoZSx0LDApfWVsc2V7Zm9yKGxldCBlPTA7ZTxuO2UrKylmLnNldChlLHQsMCk7Zi5zZXQodCx0LDEpfX1pZihjKWZvcihsZXQgdD1vLTE7dD49MDt0LS0pe2lmKHQ8QyYmMCE9PWhbdF0pZm9yKGxldCBlPXQrMTtlPG87ZSsrKXtsZXQgbj0wO2ZvcihsZXQgaT10KzE7aTxvO2krKyluKz1nLmdldChpLHQpKmcuZ2V0KGksZSk7bj0tbi9nLmdldCh0KzEsdCk7Zm9yKGxldCBpPXQrMTtpPG87aSsrKWcuc2V0KGksZSxnLmdldChpLGUpK24qZy5nZXQoaSx0KSl9Zm9yKGxldCBlPTA7ZTxvO2UrKylnLnNldChlLHQsMCk7Zy5zZXQodCx0LDEpfWxldCB4PXYtMSxPPU51bWJlci5FUFNJTE9OO2Zvcig7dj4wOyl7bGV0IHQsZTtmb3IodD12LTI7dD49LTEmJi0xIT09dDt0LS0pe2NvbnN0IGU9TnVtYmVyLk1JTl9WQUxVRStPKk1hdGguYWJzKHVbdF0rTWF0aC5hYnModVt0KzFdKSk7aWYoTWF0aC5hYnMoaFt0XSk8PWV8fE51bWJlci5pc05hTihoW3RdKSl7aFt0XT0wO2JyZWFrfX1pZih0PT09di0yKWU9NDtlbHNle2xldCBuO2ZvcihuPXYtMTtuPj10JiZuIT09dDtuLS0pe2xldCBlPShuIT09dj9NYXRoLmFicyhoW25dKTowKSsobiE9PXQrMT9NYXRoLmFicyhoW24tMV0pOjApO2lmKE1hdGguYWJzKHVbbl0pPD1PKmUpe3Vbbl09MDticmVha319bj09PXQ/ZT0zOm49PT12LTE/ZT0xOihlPTIsdD1uKX1zd2l0Y2godCsrLGUpe2Nhc2UgMTp7bGV0IGU9aFt2LTJdO2hbdi0yXT0wO2ZvcihsZXQgbj12LTI7bj49dDtuLS0pe2xldCBpPVJDdCh1W25dLGUpLGE9dVtuXS9pLHI9ZS9pO2lmKHVbbl09aSxuIT09dCYmKGU9LXIqaFtuLTFdLGhbbi0xXT1hKmhbbi0xXSksYylmb3IobGV0IHQ9MDt0PG87dCsrKWk9YSpnLmdldCh0LG4pK3IqZy5nZXQodCx2LTEpLGcuc2V0KHQsdi0xLC1yKmcuZ2V0KHQsbikrYSpnLmdldCh0LHYtMSkpLGcuc2V0KHQsbixpKX1icmVha31jYXNlIDI6e2xldCBlPWhbdC0xXTtoW3QtMV09MDtmb3IobGV0IG89dDtvPHY7bysrKXtsZXQgaT1SQ3QodVtvXSxlKSxhPXVbb10vaSxyPWUvaTtpZih1W29dPWksZT0tcipoW29dLGhbb109YSpoW29dLGwpZm9yKGxldCBlPTA7ZTxuO2UrKylpPWEqZi5nZXQoZSxvKStyKmYuZ2V0KGUsdC0xKSxmLnNldChlLHQtMSwtcipmLmdldChlLG8pK2EqZi5nZXQoZSx0LTEpKSxmLnNldChlLG8saSl9YnJlYWt9Y2FzZSAzOntjb25zdCBlPU1hdGgubWF4KE1hdGguYWJzKHVbdi0xXSksTWF0aC5hYnModVt2LTJdKSxNYXRoLmFicyhoW3YtMl0pLE1hdGguYWJzKHVbdF0pLE1hdGguYWJzKGhbdF0pKSxpPXVbdi0xXS9lLGE9dVt2LTJdL2Uscj1oW3YtMl0vZSxzPXVbdF0vZSxkPWhbdF0vZSxwPSgoYStpKSooYS1pKStyKnIpLzIsbT1pKnIqKGkqcik7bGV0IGI9MDswPT09cCYmMD09PW18fChiPXA8MD8wLU1hdGguc3FydChwKnArbSk6TWF0aC5zcXJ0KHAqcCttKSxiPW0vKHArYikpO2xldCB5PShzK2kpKihzLWkpK2IsXz1zKmQ7Zm9yKGxldCBlPXQ7ZTx2LTE7ZSsrKXtsZXQgaT1SQ3QoeSxfKTswPT09aSYmKGk9TnVtYmVyLk1JTl9WQUxVRSk7bGV0IGE9eS9pLHI9Xy9pO2lmKGUhPT10JiYoaFtlLTFdPWkpLHk9YSp1W2VdK3IqaFtlXSxoW2VdPWEqaFtlXS1yKnVbZV0sXz1yKnVbZSsxXSx1W2UrMV09YSp1W2UrMV0sYylmb3IobGV0IHQ9MDt0PG87dCsrKWk9YSpnLmdldCh0LGUpK3IqZy5nZXQodCxlKzEpLGcuc2V0KHQsZSsxLC1yKmcuZ2V0KHQsZSkrYSpnLmdldCh0LGUrMSkpLGcuc2V0KHQsZSxpKTtpZihpPVJDdCh5LF8pLDA9PT1pJiYoaT1OdW1iZXIuTUlOX1ZBTFVFKSxhPXkvaSxyPV8vaSx1W2VdPWkseT1hKmhbZV0rcip1W2UrMV0sdVtlKzFdPS1yKmhbZV0rYSp1W2UrMV0sXz1yKmhbZSsxXSxoW2UrMV09YSpoW2UrMV0sbCYmZTxuLTEpZm9yKGxldCB0PTA7dDxuO3QrKylpPWEqZi5nZXQodCxlKStyKmYuZ2V0KHQsZSsxKSxmLnNldCh0LGUrMSwtcipmLmdldCh0LGUpK2EqZi5nZXQodCxlKzEpKSxmLnNldCh0LGUsaSl9aFt2LTJdPXk7YnJlYWt9Y2FzZSA0OmlmKHVbdF08PTAmJih1W3RdPXVbdF08MD8tdVt0XTowLGMpKWZvcihsZXQgZT0wO2U8PXg7ZSsrKWcuc2V0KGUsdCwtZy5nZXQoZSx0KSk7Zm9yKDt0PHgmJiEodVt0XT49dVt0KzFdKTspe2xldCBlPXVbdF07aWYodVt0XT11W3QrMV0sdVt0KzFdPWUsYyYmdDxvLTEpZm9yKGxldCBuPTA7bjxvO24rKyllPWcuZ2V0KG4sdCsxKSxnLnNldChuLHQrMSxnLmdldChuLHQpKSxnLnNldChuLHQsZSk7aWYobCYmdDxuLTEpZm9yKGxldCBvPTA7bzxuO28rKyllPWYuZ2V0KG8sdCsxKSxmLnNldChvLHQrMSxmLmdldChvLHQpKSxmLnNldChvLHQsZSk7dCsrfXYtLX19aWYoZCl7bGV0IHQ9ZztnPWYsZj10fXRoaXMubT1uLHRoaXMubj1vLHRoaXMucz11LHRoaXMuVT1mLHRoaXMuVj1nfXNvbHZlKHQpe2xldCBlPXQsbj10aGlzLnRocmVzaG9sZCxvPXRoaXMucy5sZW5ndGgsaT1TQ3QuemVyb3MobyxvKTtmb3IobGV0IHQ9MDt0PG87dCsrKU1hdGguYWJzKHRoaXMuc1t0XSk8PW4/aS5zZXQodCx0LDApOmkuc2V0KHQsdCwxL3RoaXMuc1t0XSk7bGV0IGE9dGhpcy5VLHI9dGhpcy5yaWdodFNpbmd1bGFyVmVjdG9ycyxzPXIubW11bChpKSxsPXIucm93cyxjPWEucm93cyxkPVNDdC56ZXJvcyhsLGMpO2ZvcihsZXQgdD0wO3Q8bDt0KyspZm9yKGxldCBlPTA7ZTxjO2UrKyl7bGV0IG49MDtmb3IobGV0IGk9MDtpPG87aSsrKW4rPXMuZ2V0KHQsaSkqYS5nZXQoZSxpKTtkLnNldCh0LGUsbil9cmV0dXJuIGQubW11bChlKX1zb2x2ZUZvckRpYWdvbmFsKHQpe3JldHVybiB0aGlzLnNvbHZlKFNDdC5kaWFnKHQpKX1pbnZlcnNlKCl7bGV0IHQ9dGhpcy5WLGU9dGhpcy50aHJlc2hvbGQsbj10LnJvd3Msbz10LmNvbHVtbnMsaT1uZXcgU0N0KG4sdGhpcy5zLmxlbmd0aCk7Zm9yKGxldCBhPTA7YTxuO2ErKylmb3IobGV0IG49MDtuPG87bisrKU1hdGguYWJzKHRoaXMuc1tuXSk+ZSYmaS5zZXQoYSxuLHQuZ2V0KGEsbikvdGhpcy5zW25dKTtsZXQgYT10aGlzLlUscj1hLnJvd3Mscz1hLmNvbHVtbnMsbD1uZXcgU0N0KG4scik7Zm9yKGxldCB0PTA7dDxuO3QrKylmb3IobGV0IGU9MDtlPHI7ZSsrKXtsZXQgbj0wO2ZvcihsZXQgbz0wO288cztvKyspbis9aS5nZXQodCxvKSphLmdldChlLG8pO2wuc2V0KHQsZSxuKX1yZXR1cm4gbH1nZXQgY29uZGl0aW9uKCl7cmV0dXJuIHRoaXMuc1swXS90aGlzLnNbTWF0aC5taW4odGhpcy5tLHRoaXMubiktMV19Z2V0IG5vcm0yKCl7cmV0dXJuIHRoaXMuc1swXX1nZXQgcmFuaygpe2xldCB0PU1hdGgubWF4KHRoaXMubSx0aGlzLm4pKnRoaXMuc1swXSpOdW1iZXIuRVBTSUxPTixlPTAsbj10aGlzLnM7Zm9yKGxldCBvPTAsaT1uLmxlbmd0aDtvPGk7bysrKW5bb10+dCYmZSsrO3JldHVybiBlfWdldCBkaWFnb25hbCgpe3JldHVybiBBcnJheS5mcm9tKHRoaXMucyl9Z2V0IHRocmVzaG9sZCgpe3JldHVybiBOdW1iZXIuRVBTSUxPTi8yKk1hdGgubWF4KHRoaXMubSx0aGlzLm4pKnRoaXMuc1swXX1nZXQgbGVmdFNpbmd1bGFyVmVjdG9ycygpe3JldHVybiB0aGlzLlV9Z2V0IHJpZ2h0U2luZ3VsYXJWZWN0b3JzKCl7cmV0dXJuIHRoaXMuVn1nZXQgZGlhZ29uYWxNYXRyaXgoKXtyZXR1cm4gU0N0LmRpYWcodGhpcy5zKX19ZnVuY3Rpb24gSUN0KHQsZSxuLG8saSl7bGV0IGE9U0N0LmV5ZShlLmxlbmd0aCxlLmxlbmd0aCxuKm8qbyk7Y29uc3Qgcj1pKGUpO2xldCBzPW5ldyBGbG9hdDY0QXJyYXkodC54Lmxlbmd0aCk7Zm9yKGxldCBlPTA7ZTx0LngubGVuZ3RoO2UrKylzW2VdPXIodC54W2VdKTtsZXQgbD0oZnVuY3Rpb24gYyh0LGUsbixvLGkpe2NvbnN0IGE9bi5sZW5ndGgscj10LngubGVuZ3RoO2xldCBzPW5ldyBBcnJheShhKTtmb3IobGV0IGw9MDtsPGE7bCsrKXtzW2xdPW5ldyBBcnJheShyKTtsZXQgYT1uLnNsaWNlKCk7YVtsXSs9bztsZXQgYz1pKGEpO2ZvcihsZXQgbj0wO248cjtuKyspc1tsXVtuXT1lW25dLWModC54W25dKX1yZXR1cm4gbmV3IFNDdChzKX0pKHQscyxlLG8saSksZD0oZnVuY3Rpb24gcCh0LGUpe2NvbnN0IG49dC54Lmxlbmd0aDtsZXQgbz1uZXcgQXJyYXkobik7Zm9yKGxldCBpPTA7aTxuO2krKylvW2ldPVt0LnlbaV0tZVtpXV07cmV0dXJuIG5ldyBTQ3Qobyl9KSh0LHMpLG09KGZ1bmN0aW9uIHUodCxlPSExKXtyZXR1cm4gdD1FQ3QuY2hlY2tNYXRyaXgodCksZT9uZXcgTkN0KHQpLmludmVyc2UoKTooZnVuY3Rpb24gbih0LGUsbz0hMSl7cmV0dXJuIHQ9RUN0LmNoZWNrTWF0cml4KHQpLGU9RUN0LmNoZWNrTWF0cml4KGUpLG8/bmV3IE5DdCh0KS5zb2x2ZShlKTp0LmlzU3F1YXJlKCk/bmV3IEFDdCh0KS5zb2x2ZShlKTpuZXcgVEN0KHQpLnNvbHZlKGUpfSkodCxTQ3QuZXllKHQucm93cykpfSkoYS5hZGQobC5tbXVsKGwudHJhbnNwb3NlKCkpKSk7cmV0dXJuKGU9KGU9bmV3IFNDdChbZV0pKS5zdWIobS5tbXVsKGwpLm1tdWwoZCkubXVsKG8pLnRyYW5zcG9zZSgpKSkudG8xREFycmF5KCl9dmFyIHpDdD1xeChPYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxkZWZhdWx0OmZ1bmN0aW9uIEhDdCh0LGUsbj17fSl7bGV0e21heEl0ZXJhdGlvbnM6bz0xMDAsZ3JhZGllbnREaWZmZXJlbmNlOmk9LjEsZGFtcGluZzphPTAsZXJyb3JUb2xlcmFuY2U6cj0uMDEsbWluVmFsdWVzOnMsbWF4VmFsdWVzOmwsaW5pdGlhbFZhbHVlczpjfT1uO2lmKGE8PTApdGhyb3cgbmV3IEVycm9yKCJUaGUgZGFtcGluZyBvcHRpb24gbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlciIpO2lmKCF0Lnh8fCF0LnkpdGhyb3cgbmV3IEVycm9yKCJUaGUgZGF0YSBwYXJhbWV0ZXIgbXVzdCBoYXZlIHggYW5kIHkgZWxlbWVudHMiKTtpZighaUN0KHQueCl8fHQueC5sZW5ndGg8Mnx8IWlDdCh0LnkpfHx0LnkubGVuZ3RoPDIpdGhyb3cgbmV3IEVycm9yKCJUaGUgZGF0YSBwYXJhbWV0ZXIgZWxlbWVudHMgbXVzdCBiZSBhbiBhcnJheSB3aXRoIG1vcmUgdGhhbiAyIHBvaW50cyIpO2lmKHQueC5sZW5ndGghPT10LnkubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiVGhlIGRhdGEgcGFyYW1ldGVyIGVsZW1lbnRzIG11c3QgaGF2ZSB0aGUgc2FtZSBzaXplIik7bGV0IGQ9Y3x8bmV3IEFycmF5KGUubGVuZ3RoKS5maWxsKDEpLHA9ZC5sZW5ndGg7aWYobD1sfHxuZXcgQXJyYXkocCkuZmlsbChOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikscz1zfHxuZXcgQXJyYXkocCkuZmlsbChOdW1iZXIuTUlOX1NBRkVfSU5URUdFUiksbC5sZW5ndGghPT1zLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIm1pblZhbHVlcyBhbmQgbWF4VmFsdWVzIG11c3QgYmUgdGhlIHNhbWUgc2l6ZSIpO2lmKCFpQ3QoZCkpdGhyb3cgbmV3IEVycm9yKCJpbml0aWFsVmFsdWVzIG11c3QgYmUgYW4gYXJyYXkiKTtsZXQgbSx1PWFDdCh0LGQsZSksZj11PD1yO2ZvcihtPTA7bTxvJiYhZjttKyspe2Q9SUN0KHQsZCxhLGksZSk7Zm9yKGxldCB0PTA7dDxwO3QrKylkW3RdPU1hdGgubWluKE1hdGgubWF4KHNbdF0sZFt0XSksbFt0XSk7aWYodT1hQ3QodCxkLGUpLGlzTmFOKHUpKWJyZWFrO2Y9dTw9cn1yZXR1cm57cGFyYW1ldGVyVmFsdWVzOmQscGFyYW1ldGVyRXJyb3I6dSxpdGVyYXRpb25zOm19fX0pKSxGQ3Q9WXgoKGZ1bmN0aW9uKHQsZSl7dmFyIG49R3gmJkd4Ll9fYXdhaXRlcnx8ZnVuY3Rpb24odCxlLG4sbyl7cmV0dXJuIG5ldyhufHwobj1Qcm9taXNlKSkoKGZ1bmN0aW9uKGksYSl7ZnVuY3Rpb24gcih0KXt0cnl7bChvLm5leHQodCkpfWNhdGNoKHQpe2EodCl9fWZ1bmN0aW9uIHModCl7dHJ5e2woby50aHJvdyh0KSl9Y2F0Y2godCl7YSh0KX19ZnVuY3Rpb24gbCh0KXt0LmRvbmU/aSh0LnZhbHVlKTpuZXcgbigoZnVuY3Rpb24oZSl7ZSh0LnZhbHVlKX0pKS50aGVuKHIscyl9bCgobz1vLmFwcGx5KHQsZXx8W10pKS5uZXh0KCkpfSkpfSxvPUd4JiZHeC5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24odCxlKXt2YXIgbixvLGksYSxyPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJmlbMF0pdGhyb3cgaVsxXTtyZXR1cm4gaVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBhPXtuZXh0OnMoMCksdGhyb3c6cygxKSxyZXR1cm46cygyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKGFbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksYTtmdW5jdGlvbiBzKGEpe3JldHVybiBmdW5jdGlvbihzKXtyZXR1cm4oZnVuY3Rpb24gbChhKXtpZihuKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO3I7KXRyeXtpZihuPTEsbyYmKGk9MiZhWzBdP28ucmV0dXJuOmFbMF0/by50aHJvd3x8KChpPW8ucmV0dXJuKSYmaS5jYWxsKG8pLDApOm8ubmV4dCkmJiEoaT1pLmNhbGwobyxhWzFdKSkuZG9uZSlyZXR1cm4gaTtzd2l0Y2gobz0wLGkmJihhPVsyJmFbMF0saS52YWx1ZV0pLGFbMF0pe2Nhc2UgMDpjYXNlIDE6aT1hO2JyZWFrO2Nhc2UgNDpyZXR1cm4gci5sYWJlbCsrLHt2YWx1ZTphWzFdLGRvbmU6ITF9O2Nhc2UgNTpyLmxhYmVsKyssbz1hWzFdLGE9WzBdO2NvbnRpbnVlO2Nhc2UgNzphPXIub3BzLnBvcCgpLHIudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKGk9KGk9ci50cnlzKS5sZW5ndGg+MCYmaVtpLmxlbmd0aC0xXSl8fDYhPT1hWzBdJiYyIT09YVswXSkpe3I9MDtjb250aW51ZX1pZigzPT09YVswXSYmKCFpfHxhWzFdPmlbMF0mJmFbMV08aVszXSkpe3IubGFiZWw9YVsxXTticmVha31pZig2PT09YVswXSYmci5sYWJlbDxpWzFdKXtyLmxhYmVsPWlbMV0saT1hO2JyZWFrfWlmKGkmJnIubGFiZWw8aVsyXSl7ci5sYWJlbD1pWzJdLHIub3BzLnB1c2goYSk7YnJlYWt9aVsyXSYmci5vcHMucG9wKCksci50cnlzLnBvcCgpO2NvbnRpbnVlfWE9ZS5jYWxsKHQscil9Y2F0Y2godCl7YT1bNix0XSxvPTB9ZmluYWxseXtuPWk9MH1pZig1JmFbMF0pdGhyb3cgYVsxXTtyZXR1cm57dmFsdWU6YVswXT9hWzFdOnZvaWQgMCxkb25lOiEwfX0pKFthLHNdKX19fSxpPUd4JiZHeC5fX3JlYWR8fGZ1bmN0aW9uKHQsZSl7dmFyIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdO2lmKCFuKXJldHVybiB0O3ZhciBvLGksYT1uLmNhbGwodCkscj1bXTt0cnl7Zm9yKDsodm9pZCAwPT09ZXx8ZS0tID4wKSYmIShvPWEubmV4dCgpKS5kb25lOylyLnB1c2goby52YWx1ZSl9Y2F0Y2godCl7aT17ZXJyb3I6dH19ZmluYWxseXt0cnl7byYmIW8uZG9uZSYmKG49YS5yZXR1cm4pJiZuLmNhbGwoYSl9ZmluYWxseXtpZihpKXRocm93IGkuZXJyb3J9fXJldHVybiByfSxhPUd4JiZHeC5fX3NwcmVhZHx8ZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdD10LmNvbmNhdChpKGFyZ3VtZW50c1tlXSkpO3JldHVybiB0fSxyPUd4JiZHeC5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKHQpe2lmKHQmJnQuX19lc01vZHVsZSlyZXR1cm4gdDt2YXIgZT17fTtpZihudWxsIT10KWZvcih2YXIgbiBpbiB0KU9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbikmJihlW25dPXRbbl0pO3JldHVybiBlLmRlZmF1bHQ9dCxlfSxzPUd4JiZHeC5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0Ll9fZXNNb2R1bGU/dDp7ZGVmYXVsdDp0fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBsPXIoJF90KSxjPXIodEN0KSxkPXIobkN0KSxwPXIoZUN0KSxtPXIoUV90KSx1PXMoekN0KSxmPTFlLTUsZz0uMDAxLGg9KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt2b2lkIDA9PT10JiYodD17fSk7dmFyIGU9dGhpczt0aGlzLmxlYXJuaW5nUmF0ZT0xLHRoaXMubG9jYWxDb25uZWN0aXZpdHk9MSx0aGlzLm1pbkRpc3Q9LjEsdGhpcy5uQ29tcG9uZW50cz0yLHRoaXMubkVwb2Nocz0wLHRoaXMubk5laWdoYm9ycz0xNSx0aGlzLm5lZ2F0aXZlU2FtcGxlUmF0ZT01LHRoaXMucmFuZG9tPU1hdGgucmFuZG9tLHRoaXMucmVwdWxzaW9uU3RyZW5ndGg9MSx0aGlzLnNldE9wTWl4UmF0aW89MSx0aGlzLnNwcmVhZD0xLHRoaXMudHJhbnNmb3JtUXVldWVTaXplPTQsdGhpcy50YXJnZXRNZXRyaWM9ImNhdGVnb3JpY2FsIix0aGlzLnRhcmdldFdlaWdodD0uNSx0aGlzLnRhcmdldE5OZWlnaGJvcnM9dGhpcy5uTmVpZ2hib3JzLHRoaXMuZGlzdGFuY2VGbj1iLHRoaXMuaXNJbml0aWFsaXplZD0hMSx0aGlzLnJwRm9yZXN0PVtdLHRoaXMuZW1iZWRkaW5nPVtdLHRoaXMub3B0aW1pemF0aW9uU3RhdGU9bmV3IF87dmFyIG49ZnVuY3Rpb24obil7dm9pZCAwIT09dFtuXSYmKGVbbl09dFtuXSl9O24oImRpc3RhbmNlRm4iKSxuKCJsZWFybmluZ1JhdGUiKSxuKCJsb2NhbENvbm5lY3Rpdml0eSIpLG4oIm1pbkRpc3QiKSxuKCJuQ29tcG9uZW50cyIpLG4oIm5FcG9jaHMiKSxuKCJuTmVpZ2hib3JzIiksbigibmVnYXRpdmVTYW1wbGVSYXRlIiksbigicmFuZG9tIiksbigicmVwdWxzaW9uU3RyZW5ndGgiKSxuKCJzZXRPcE1peFJhdGlvIiksbigic3ByZWFkIiksbigidHJhbnNmb3JtUXVldWVTaXplIil9cmV0dXJuIHQucHJvdG90eXBlLmZpdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbml0aWFsaXplRml0KHQpLHRoaXMub3B0aW1pemVMYXlvdXQoKSx0aGlzLmVtYmVkZGluZ30sdC5wcm90b3R5cGUuZml0QXN5bmM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9ZnVuY3Rpb24oKXtyZXR1cm4hMH0pLG4odGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbigpe3JldHVybiBvKHRoaXMsKGZ1bmN0aW9uKG4pe3N3aXRjaChuLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRoaXMuaW5pdGlhbGl6ZUZpdCh0KSxbNCx0aGlzLm9wdGltaXplTGF5b3V0QXN5bmMoZSldO2Nhc2UgMTpyZXR1cm4gbi5zZW50KCksWzIsdGhpcy5lbWJlZGRpbmddfX0pKX0pKX0sdC5wcm90b3R5cGUuc2V0U3VwZXJ2aXNlZFByb2plY3Rpb249ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT17fSksdGhpcy5ZPXQsdGhpcy50YXJnZXRNZXRyaWM9ZS50YXJnZXRNZXRyaWN8fHRoaXMudGFyZ2V0TWV0cmljLHRoaXMudGFyZ2V0V2VpZ2h0PWUudGFyZ2V0V2VpZ2h0fHx0aGlzLnRhcmdldFdlaWdodCx0aGlzLnRhcmdldE5OZWlnaGJvcnM9ZS50YXJnZXROTmVpZ2hib3JzfHx0aGlzLnRhcmdldE5OZWlnaGJvcnN9LHQucHJvdG90eXBlLnNldFByZWNvbXB1dGVkS05OPWZ1bmN0aW9uKHQsZSl7dGhpcy5rbm5JbmRpY2VzPXQsdGhpcy5rbm5EaXN0YW5jZXM9ZX0sdC5wcm90b3R5cGUuaW5pdGlhbGl6ZUZpdD1mdW5jdGlvbih0KXtpZih0Lmxlbmd0aDw9dGhpcy5uTmVpZ2hib3JzKXRocm93IG5ldyBFcnJvcigiTm90IGVub3VnaCBkYXRhIHBvaW50cyAoIit0Lmxlbmd0aCsiKSB0byBjcmVhdGUgbk5laWdoYm9yczogIit0aGlzLm5OZWlnaGJvcnMrIi4gIEFkZCBtb3JlIGRhdGEgcG9pbnRzIG9yIGFkanVzdCB0aGUgY29uZmlndXJhdGlvbi4iKTtpZih0aGlzLlg9PT10JiZ0aGlzLmlzSW5pdGlhbGl6ZWQpcmV0dXJuIHRoaXMuZ2V0TkVwb2NocygpO2lmKHRoaXMuWD10LCF0aGlzLmtubkluZGljZXMmJiF0aGlzLmtubkRpc3RhbmNlcyl7dmFyIGU9dGhpcy5uZWFyZXN0TmVpZ2hib3JzKHQpO3RoaXMua25uSW5kaWNlcz1lLmtubkluZGljZXMsdGhpcy5rbm5EaXN0YW5jZXM9ZS5rbm5EaXN0YW5jZXN9dGhpcy5ncmFwaD10aGlzLmZ1enp5U2ltcGxpY2lhbFNldCh0LHRoaXMubk5laWdoYm9ycyx0aGlzLnNldE9wTWl4UmF0aW8pLHRoaXMubWFrZVNlYXJjaEZucygpLHRoaXMuc2VhcmNoR3JhcGg9dGhpcy5tYWtlU2VhcmNoR3JhcGgodCksdGhpcy5wcm9jZXNzR3JhcGhGb3JTdXBlcnZpc2VkUHJvamVjdGlvbigpO3ZhciBuPXRoaXMuaW5pdGlhbGl6ZVNpbXBsaWNpYWxTZXRFbWJlZGRpbmcoKSxvPW4udGFpbCxpPW4uZXBvY2hzUGVyU2FtcGxlO3JldHVybiB0aGlzLm9wdGltaXphdGlvblN0YXRlLmhlYWQ9bi5oZWFkLHRoaXMub3B0aW1pemF0aW9uU3RhdGUudGFpbD1vLHRoaXMub3B0aW1pemF0aW9uU3RhdGUuZXBvY2hzUGVyU2FtcGxlPWksdGhpcy5pbml0aWFsaXplT3B0aW1pemF0aW9uKCksdGhpcy5wcmVwYXJlRm9yT3B0aW1pemF0aW9uTG9vcCgpLHRoaXMuaXNJbml0aWFsaXplZD0hMCx0aGlzLmdldE5FcG9jaHMoKX0sdC5wcm90b3R5cGUubWFrZVNlYXJjaEZucz1mdW5jdGlvbigpe3ZhciB0PWQubWFrZUluaXRpYWxpemF0aW9ucyh0aGlzLmRpc3RhbmNlRm4pLGU9dC5pbml0RnJvbVJhbmRvbTt0aGlzLmluaXRGcm9tVHJlZT10LmluaXRGcm9tVHJlZSx0aGlzLmluaXRGcm9tUmFuZG9tPWUsdGhpcy5zZWFyY2g9ZC5tYWtlSW5pdGlhbGl6ZWROTlNlYXJjaCh0aGlzLmRpc3RhbmNlRm4pfSx0LnByb3RvdHlwZS5tYWtlU2VhcmNoR3JhcGg9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMua25uSW5kaWNlcyxuPXRoaXMua25uRGlzdGFuY2VzLG89bmV3IGMuU3BhcnNlTWF0cml4KFtdLFtdLFtdLFt0Lmxlbmd0aCx0Lmxlbmd0aF0pLGk9MDtpPGUubGVuZ3RoO2krKylmb3IodmFyIGE9ZVtpXSxyPW5baV0scz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgbD1yW3NdO2w+MCYmby5zZXQoaSxhW3NdLGwpfXZhciBkPWMudHJhbnNwb3NlKG8pO3JldHVybiBjLm1heGltdW0obyxkKX0sdC5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10aGlzLlg7aWYodm9pZCAwPT09bnx8MD09PW4ubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiTm8gZGF0YSBoYXMgYmVlbiBmaXQuIik7dmFyIG89TWF0aC5mbG9vcih0aGlzLm5OZWlnaGJvcnMqdGhpcy50cmFuc2Zvcm1RdWV1ZVNpemUpO289TWF0aC5taW4obi5sZW5ndGgsbyk7dmFyIGk9ZC5pbml0aWFsaXplU2VhcmNoKHRoaXMucnBGb3Jlc3Qsbix0LG8sdGhpcy5pbml0RnJvbVJhbmRvbSx0aGlzLmluaXRGcm9tVHJlZSx0aGlzLnJhbmRvbSksYT10aGlzLnNlYXJjaChuLHRoaXMuc2VhcmNoR3JhcGgsaSx0KSxyPWwuZGVoZWFwU29ydChhKSxzPXIuaW5kaWNlcyxwPXIud2VpZ2h0cztzPXMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5zbGljZSgwLGUubk5laWdoYm9ycyl9KSkscD1wLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuc2xpY2UoMCxlLm5OZWlnaGJvcnMpfSkpO3ZhciB1PU1hdGgubWF4KDAsdGhpcy5sb2NhbENvbm5lY3Rpdml0eS0xKSxmPXRoaXMuc21vb3RoS05ORGlzdGFuY2UocCx0aGlzLm5OZWlnaGJvcnMsdSksZz10aGlzLmNvbXB1dGVNZW1iZXJzaGlwU3RyZW5ndGhzKHMscCxmLnNpZ21hcyxmLnJob3MpLGg9bmV3IGMuU3BhcnNlTWF0cml4KGcucm93cyxnLmNvbHMsZy52YWxzLFt0Lmxlbmd0aCxuLmxlbmd0aF0pLGI9Yy5ub3JtYWxpemUoaCwibDEiKSx5PWMuZ2V0Q1NSKGIpLF89dC5sZW5ndGgsQz1QKG0ucmVzaGFwZTJkKHkuaW5kaWNlcyxfLHRoaXMubk5laWdoYm9ycyksbS5yZXNoYXBlMmQoeS52YWx1ZXMsXyx0aGlzLm5OZWlnaGJvcnMpLHRoaXMuZW1iZWRkaW5nKSxNPXRoaXMubkVwb2Nocz90aGlzLm5FcG9jaHMvMzpoLm5Sb3dzPD0xZTQ/MTAwOjMwLHY9aC5nZXRWYWx1ZXMoKS5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU+dD9lOnR9KSwwKTtoPWgubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdDx2L00/MDp0fSkpLGg9Yy5lbGltaW5hdGVaZXJvcyhoKTt2YXIgeD10aGlzLm1ha2VFcG9jaHNQZXJTYW1wbGUoaC5nZXRWYWx1ZXMoKSxNKSxPPWguZ2V0Um93cygpLHc9aC5nZXRDb2xzKCk7cmV0dXJuIHRoaXMuYXNzaWduT3B0aW1pemF0aW9uU3RhdGVQYXJhbWV0ZXJzKHtoZWFkRW1iZWRkaW5nOkMsdGFpbEVtYmVkZGluZzp0aGlzLmVtYmVkZGluZyxoZWFkOk8sdGFpbDp3LGN1cnJlbnRFcG9jaDowLG5FcG9jaHM6TSxuVmVydGljZXM6aC5nZXREaW1zKClbMV0sZXBvY2hzUGVyU2FtcGxlOnh9KSx0aGlzLnByZXBhcmVGb3JPcHRpbWl6YXRpb25Mb29wKCksdGhpcy5vcHRpbWl6ZUxheW91dCgpfSx0LnByb3RvdHlwZS5wcm9jZXNzR3JhcGhGb3JTdXBlcnZpc2VkUHJvamVjdGlvbj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuWTtpZih0KXtpZih0Lmxlbmd0aCE9PXRoaXMuWC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJMZW5ndGggb2YgWCBhbmQgeSBtdXN0IGJlIGVxdWFsIik7ImNhdGVnb3JpY2FsIj09PXRoaXMudGFyZ2V0TWV0cmljJiYodGhpcy5ncmFwaD10aGlzLmNhdGVnb3JpY2FsU2ltcGxpY2lhbFNldEludGVyc2VjdGlvbih0aGlzLmdyYXBoLHQsdGhpcy50YXJnZXRXZWlnaHQ8MT8xLygxLXRoaXMudGFyZ2V0V2VpZ2h0KSoyLjU6MWUxMikpfX0sdC5wcm90b3R5cGUuc3RlcD1mdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW1pemF0aW9uU3RhdGUuY3VycmVudEVwb2NoO3JldHVybiB0PHRoaXMuZ2V0TkVwb2NocygpJiZ0aGlzLm9wdGltaXplTGF5b3V0U3RlcCh0KSx0aGlzLm9wdGltaXphdGlvblN0YXRlLmN1cnJlbnRFcG9jaH0sdC5wcm90b3R5cGUuZ2V0RW1iZWRkaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW1iZWRkaW5nfSx0LnByb3RvdHlwZS5uZWFyZXN0TmVpZ2hib3JzPWZ1bmN0aW9uKHQpe3ZhciBlLG49dGhpcy5uTmVpZ2hib3JzLG89ZC5tYWtlTk5EZXNjZW50KHRoaXMuZGlzdGFuY2VGbix0aGlzLnJhbmRvbSksaT01K01hdGguZmxvb3IoLjU9PShlPU1hdGgucG93KHQubGVuZ3RoLC41KS8yMCk/MDpNYXRoLnJvdW5kKGUpKSxhPU1hdGgubWF4KDUsTWF0aC5mbG9vcihNYXRoLnJvdW5kKChmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5sb2codCkvTWF0aC5sb2coMil9KSh0Lmxlbmd0aCkpKSk7dGhpcy5ycEZvcmVzdD1wLm1ha2VGb3Jlc3QodCxuLGksdGhpcy5yYW5kb20pO3ZhciByPW8odCxwLm1ha2VMZWFmQXJyYXkodGhpcy5ycEZvcmVzdCksbixhKTtyZXR1cm57a25uSW5kaWNlczpyLmluZGljZXMsa25uRGlzdGFuY2VzOnIud2VpZ2h0c319LHQucHJvdG90eXBlLmZ1enp5U2ltcGxpY2lhbFNldD1mdW5jdGlvbih0LGUsbil7dm9pZCAwPT09biYmKG49MSk7dmFyIG89dGhpcyxpPW8ua25uSW5kaWNlcyxhPXZvaWQgMD09PWk/W106aSxyPW8ua25uRGlzdGFuY2VzLHM9dm9pZCAwPT09cj9bXTpyLGw9dGhpcy5zbW9vdGhLTk5EaXN0YW5jZShzLGUsby5sb2NhbENvbm5lY3Rpdml0eSksZD10aGlzLmNvbXB1dGVNZW1iZXJzaGlwU3RyZW5ndGhzKGEscyxsLnNpZ21hcyxsLnJob3MpLHA9bmV3IGMuU3BhcnNlTWF0cml4KGQucm93cyxkLmNvbHMsZC52YWxzLFt0Lmxlbmd0aCx0Lmxlbmd0aF0pLG09Yy50cmFuc3Bvc2UocCksdT1jLnBhaXJ3aXNlTXVsdGlwbHkocCxtKSxmPWMuc3VidHJhY3QoYy5hZGQocCxtKSx1KSxnPWMubXVsdGlwbHlTY2FsYXIoZixuKSxoPWMubXVsdGlwbHlTY2FsYXIodSwxLW4pO3JldHVybiBjLmFkZChnLGgpfSx0LnByb3RvdHlwZS5jYXRlZ29yaWNhbFNpbXBsaWNpYWxTZXRJbnRlcnNlY3Rpb249ZnVuY3Rpb24odCxlLG4sbyl7dm9pZCAwPT09byYmKG89MSk7dmFyIGk9eCh0LGUsbyxuKTtyZXR1cm4gTyhpPWMuZWxpbWluYXRlWmVyb3MoaSkpfSx0LnByb3RvdHlwZS5zbW9vdGhLTk5EaXN0YW5jZT1mdW5jdGlvbih0LGUsbixvLGkpe3ZvaWQgMD09PW4mJihuPTEpLHZvaWQgMD09PW8mJihvPTY0KSx2b2lkIDA9PT1pJiYoaT0xKTtmb3IodmFyIGE9TWF0aC5sb2coZSkvTWF0aC5sb2coMikqaSxyPW0uemVyb3ModC5sZW5ndGgpLHM9bS56ZXJvcyh0Lmxlbmd0aCksbD0wO2w8dC5sZW5ndGg7bCsrKXt2YXIgYz0wLGQ9MS8wLHA9MSx1PXRbbF0saD11LmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQ+MH0pKTtpZihoLmxlbmd0aD49bil7dmFyIGI9TWF0aC5mbG9vcihuKSx5PW4tYjtiPjA/KHJbbF09aFtiLTFdLHk+ZiYmKHJbbF0rPXkqKGhbYl0taFtiLTFdKSkpOnJbbF09eSpoWzBdfWVsc2UgaC5sZW5ndGg+MCYmKHJbbF09bS5tYXgoaCkpO2Zvcih2YXIgXz0wO188bztfKyspe2Zvcih2YXIgQz0wLE09MTtNPHRbbF0ubGVuZ3RoO00rKyl7dmFyIHY9dFtsXVtNXS1yW2xdO0MrPXY+MD9NYXRoLmV4cCgtdi9wKToxfWlmKE1hdGguYWJzKEMtYSk8ZilicmVhaztDPmE/cD0oYysoZD1wKSkvMjooYz1wLGQ9PT0xLzA/cCo9MjpwPShjK2QpLzIpfWlmKHNbbF09cCxyW2xdPjApe3ZhciB4PW0ubWVhbih1KTtzW2xdPGcqeCYmKHNbbF09Zyp4KX1lbHNle3ZhciBPPW0ubWVhbih0Lm1hcChtLm1lYW4pKTtzW2xdPGcqTyYmKHNbbF09ZypPKX19cmV0dXJue3NpZ21hczpzLHJob3M6cn19LHQucHJvdG90eXBlLmNvbXB1dGVNZW1iZXJzaGlwU3RyZW5ndGhzPWZ1bmN0aW9uKHQsZSxuLG8pe2Zvcih2YXIgaT10Lmxlbmd0aCxhPXRbMF0ubGVuZ3RoLHI9bS56ZXJvcyhpKmEpLHM9bS56ZXJvcyhpKmEpLGw9bS56ZXJvcyhpKmEpLGM9MDtjPGk7YysrKWZvcih2YXIgZD0wO2Q8YTtkKyspe3ZhciBwPTA7LTEhPT10W2NdW2RdJiYocD10W2NdW2RdPT09Yz8wOmVbY11bZF0tb1tjXTw9MD8xOk1hdGguZXhwKC0oZVtjXVtkXS1vW2NdKS9uW2NdKSxyW2MqYStkXT1jLHNbYyphK2RdPXRbY11bZF0sbFtjKmErZF09cCl9cmV0dXJue3Jvd3M6cixjb2xzOnMsdmFsczpsfX0sdC5wcm90b3R5cGUuaW5pdGlhbGl6ZVNpbXBsaWNpYWxTZXRFbWJlZGRpbmc9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcyxlPXRoaXMuZ2V0TkVwb2NocygpLG49dGhpcy5uQ29tcG9uZW50cyxvPXRoaXMuZ3JhcGguZ2V0VmFsdWVzKCksaT0wLGE9MDthPG8ubGVuZ3RoO2ErKylpPG9bYV0mJihpPW9bYV0pO3ZhciByPXRoaXMuZ3JhcGgubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdDxpL2U/MDp0fSkpO3RoaXMuZW1iZWRkaW5nPW0uemVyb3Moci5uUm93cykubWFwKChmdW5jdGlvbigpe3JldHVybiBtLnplcm9zKG4pLm1hcCgoZnVuY3Rpb24oKXtyZXR1cm4gMjAqbS50YXVSYW5kKHQucmFuZG9tKS0xMH0pKX0pKTt2YXIgcz1bXSxsPVtdLGM9W10sZD1yLmdldEFsbCgpO2ZvcihhPTA7YTxkLmxlbmd0aDthKyspe3ZhciBwPWRbYV07cC52YWx1ZSYmKHMucHVzaChwLnZhbHVlKSxjLnB1c2gocC5yb3cpLGwucHVzaChwLmNvbCkpfXJldHVybntoZWFkOmwsdGFpbDpjLGVwb2Noc1BlclNhbXBsZTp0aGlzLm1ha2VFcG9jaHNQZXJTYW1wbGUocyxlKX19LHQucHJvdG90eXBlLm1ha2VFcG9jaHNQZXJTYW1wbGU9ZnVuY3Rpb24odCxlKXt2YXIgbj1tLmZpbGxlZCh0Lmxlbmd0aCwtMSksbz1tLm1heCh0KSxpPXQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC9vKmV9KSk7cmV0dXJuIGkuZm9yRWFjaCgoZnVuY3Rpb24odCxvKXt0PjAmJihuW29dPWUvaVtvXSl9KSksbn0sdC5wcm90b3R5cGUuYXNzaWduT3B0aW1pemF0aW9uU3RhdGVQYXJhbWV0ZXJzPWZ1bmN0aW9uKHQpe09iamVjdC5hc3NpZ24odGhpcy5vcHRpbWl6YXRpb25TdGF0ZSx0KX0sdC5wcm90b3R5cGUucHJlcGFyZUZvck9wdGltaXphdGlvbkxvb3A9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dC5yZXB1bHNpb25TdHJlbmd0aCxuPXQubGVhcm5pbmdSYXRlLG89dC5uZWdhdGl2ZVNhbXBsZVJhdGUsaT10aGlzLm9wdGltaXphdGlvblN0YXRlLHI9aS5lcG9jaHNQZXJTYW1wbGUscz1pLmhlYWRFbWJlZGRpbmcsbD1zWzBdLmxlbmd0aCxjPXMubGVuZ3RoPT09aS50YWlsRW1iZWRkaW5nLmxlbmd0aCxkPXIubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC9vfSkpLHA9YShkKSxtPWEocik7dGhpcy5hc3NpZ25PcHRpbWl6YXRpb25TdGF0ZVBhcmFtZXRlcnMoe2Vwb2NoT2ZOZXh0U2FtcGxlOm0sZXBvY2hPZk5leHROZWdhdGl2ZVNhbXBsZTpwLGVwb2Noc1Blck5lZ2F0aXZlU2FtcGxlOmQsbW92ZU90aGVyOmMsaW5pdGlhbEFscGhhOm4sYWxwaGE6bixnYW1tYTplLGRpbTpsfSl9LHQucHJvdG90eXBlLmluaXRpYWxpemVPcHRpbWl6YXRpb249ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVtYmVkZGluZyxlPXRoaXMuZW1iZWRkaW5nLG49dGhpcy5vcHRpbWl6YXRpb25TdGF0ZSxvPW4uaGVhZCxpPW4udGFpbCxhPW4uZXBvY2hzUGVyU2FtcGxlLHI9dGhpcy5nZXRORXBvY2hzKCkscz10aGlzLmdyYXBoLm5Db2xzLGw9dih0aGlzLnNwcmVhZCx0aGlzLm1pbkRpc3QpO3RoaXMuYXNzaWduT3B0aW1pemF0aW9uU3RhdGVQYXJhbWV0ZXJzKHtoZWFkRW1iZWRkaW5nOnQsdGFpbEVtYmVkZGluZzplLGhlYWQ6byx0YWlsOmksZXBvY2hzUGVyU2FtcGxlOmEsYTpsLmEsYjpsLmIsbkVwb2NoczpyLG5WZXJ0aWNlczpzfSl9LHQucHJvdG90eXBlLm9wdGltaXplTGF5b3V0U3RlcD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5vcHRpbWl6YXRpb25TdGF0ZSxuPWUuaGVhZCxvPWUudGFpbCxpPWUuaGVhZEVtYmVkZGluZyxhPWUudGFpbEVtYmVkZGluZyxyPWUuZXBvY2hzUGVyU2FtcGxlLHM9ZS5lcG9jaE9mTmV4dFNhbXBsZSxsPWUuZXBvY2hPZk5leHROZWdhdGl2ZVNhbXBsZSxjPWUuZXBvY2hzUGVyTmVnYXRpdmVTYW1wbGUsZD1lLm1vdmVPdGhlcixwPWUuaW5pdGlhbEFscGhhLHU9ZS5hbHBoYSxmPWUuZ2FtbWEsZz1lLmEsaD1lLmIsYj1lLmRpbSx5PWUubkVwb2NocyxfPWUublZlcnRpY2VzLHY9MDt2PHIubGVuZ3RoO3YrKylpZighKHNbdl0+dCkpe3ZhciB4PW5bdl0sTz1pW3hdLFA9YVtvW3ZdXSx3PU0oTyxQKSxrPTA7dz4wJiYoaz0tMipnKmgqTWF0aC5wb3codyxoLTEpLGsvPWcqTWF0aC5wb3codyxoKSsxKTtmb3IodmFyIFM9MDtTPGI7UysrKXt2YXIgRD1DKGsqKE9bU10tUFtTXSksNCk7T1tTXSs9RCp1LGQmJihQW1NdKz0tRCp1KX1zW3ZdKz1yW3ZdO2Zvcih2YXIgRT1NYXRoLmZsb29yKCh0LWxbdl0pL2Nbdl0pLEE9MDtBPEU7QSsrKXt2YXIgUj1tLnRhdVJhbmRJbnQoXyx0aGlzLnJhbmRvbSksVD1hW1JdLE49TShPLFQpLEk9MDtpZihOPjApST0yKmYqaCxJLz0oLjAwMStOKSooZypNYXRoLnBvdyhOLGgpKzEpO2Vsc2UgaWYoeD09PVIpY29udGludWU7Zm9yKFM9MDtTPGI7UysrKUQ9NCxJPjAmJihEPUMoSSooT1tTXS1UW1NdKSw0KSksT1tTXSs9RCp1fWxbdl0rPUUqY1t2XX1yZXR1cm4gZS5hbHBoYT1wKigxLXQveSksZS5jdXJyZW50RXBvY2grPTEsaX0sdC5wcm90b3R5cGUub3B0aW1pemVMYXlvdXRBc3luYz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiB2b2lkIDA9PT10JiYodD1mdW5jdGlvbigpe3JldHVybiEwfSksbmV3IFByb21pc2UoKGZ1bmN0aW9uKGksYSl7dmFyIHI9ZnVuY3Rpb24oKXtyZXR1cm4gbihlLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKCl7dmFyIGUsbixzLGwsYztyZXR1cm4gbyh0aGlzLChmdW5jdGlvbihvKXt0cnl7aWYobj0oZT10aGlzLm9wdGltaXphdGlvblN0YXRlKS5uRXBvY2hzLHRoaXMuZW1iZWRkaW5nPXRoaXMub3B0aW1pemVMYXlvdXRTdGVwKGUuY3VycmVudEVwb2NoKSxsPSExPT09dChzPXRoaXMub3B0aW1pemF0aW9uU3RhdGUuY3VycmVudEVwb2NoKSxjPXM9PT1uLGx8fGMpcmV0dXJuWzIsaShjKV07c2V0VGltZW91dCgoZnVuY3Rpb24oKXtyZXR1cm4gcigpfSksMCl9Y2F0Y2godCl7YSh0KX1yZXR1cm5bMl19KSl9KSl9O3NldFRpbWVvdXQoKGZ1bmN0aW9uKCl7cmV0dXJuIHIoKX0pLDApfSkpfSx0LnByb3RvdHlwZS5vcHRpbWl6ZUxheW91dD1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD1mdW5jdGlvbigpe3JldHVybiEwfSk7Zm9yKHZhciBlPSExLG49W107IWU7KXt2YXIgbz10aGlzLm9wdGltaXphdGlvblN0YXRlLGk9by5uRXBvY2hzO249dGhpcy5vcHRpbWl6ZUxheW91dFN0ZXAoby5jdXJyZW50RXBvY2gpO3ZhciBhPXRoaXMub3B0aW1pemF0aW9uU3RhdGUuY3VycmVudEVwb2NoLHI9ITE9PT10KGEpO2U9YT09PWl8fHJ9cmV0dXJuIG59LHQucHJvdG90eXBlLmdldE5FcG9jaHM9ZnVuY3Rpb24oKXtpZih0aGlzLm5FcG9jaHM+MClyZXR1cm4gdGhpcy5uRXBvY2hzO3ZhciB0PXRoaXMuZ3JhcGgublJvd3M7cmV0dXJuIHQ8PTI1MDA/NTAwOnQ8PTVlMz80MDA6dDw9NzUwMD8zMDA6MjAwfSx0fSkoKTtmdW5jdGlvbiBiKHQsZSl7Zm9yKHZhciBuPTAsbz0wO288dC5sZW5ndGg7bysrKW4rPU1hdGgucG93KHRbb10tZVtvXSwyKTtyZXR1cm4gTWF0aC5zcXJ0KG4pfWUuVU1BUD1oLGUuZXVjbGlkZWFuPWIsZS5jb3NpbmU9ZnVuY3Rpb24geSh0LGUpe2Zvcih2YXIgbj0wLG89MCxpPTAsYT0wO2E8dC5sZW5ndGg7YSsrKW4rPXRbYV0qZVthXSxvKz1NYXRoLnBvdyh0W2FdLDIpLGkrPU1hdGgucG93KGVbYV0sMik7cmV0dXJuIDA9PT1vJiYwPT09aT8wOjA9PT1vfHwwPT09aT8xOjEtbi9NYXRoLnNxcnQobyppKX07dmFyIF89ZnVuY3Rpb24gXygpe3RoaXMuY3VycmVudEVwb2NoPTAsdGhpcy5oZWFkRW1iZWRkaW5nPVtdLHRoaXMudGFpbEVtYmVkZGluZz1bXSx0aGlzLmhlYWQ9W10sdGhpcy50YWlsPVtdLHRoaXMuZXBvY2hzUGVyU2FtcGxlPVtdLHRoaXMuZXBvY2hPZk5leHRTYW1wbGU9W10sdGhpcy5lcG9jaE9mTmV4dE5lZ2F0aXZlU2FtcGxlPVtdLHRoaXMuZXBvY2hzUGVyTmVnYXRpdmVTYW1wbGU9W10sdGhpcy5tb3ZlT3RoZXI9ITAsdGhpcy5pbml0aWFsQWxwaGE9MSx0aGlzLmFscGhhPTEsdGhpcy5nYW1tYT0xLHRoaXMuYT0xLjU3Njk0MzQ2MDMxMTMwNzcsdGhpcy5iPS44OTUwNjA4Nzc5MTA5NzMzLHRoaXMuZGltPTIsdGhpcy5uRXBvY2hzPTUwMCx0aGlzLm5WZXJ0aWNlcz0wfTtmdW5jdGlvbiBDKHQsZSl7cmV0dXJuIHQ+ZT9lOnQ8LWU/LWU6dH1mdW5jdGlvbiBNKHQsZSl7Zm9yKHZhciBuPTAsbz0wO288dC5sZW5ndGg7bysrKW4rPU1hdGgucG93KHRbb10tZVtvXSwyKTtyZXR1cm4gbn1mdW5jdGlvbiB2KHQsZSl7dmFyIG49bS5saW5lYXIoMCwzKnQsMzAwKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0PGU/MTp0fSkpLG89bS56ZXJvcyhuLmxlbmd0aCkubWFwKChmdW5jdGlvbihvLGkpe3JldHVybiBuW2ldPj1lP01hdGguZXhwKC0obltpXS1lKS90KTpvfSkpLGE9dS5kZWZhdWx0KHt4Om4seTpvfSwoZnVuY3Rpb24odCl7dmFyIGU9aSh0LDIpLG49ZVswXSxvPWVbMV07cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiAxLygxK24qTWF0aC5wb3codCwyKm8pKX19KSx7ZGFtcGluZzoxLjUsaW5pdGlhbFZhbHVlczpbLjUsLjVdLGdyYWRpZW50RGlmZmVyZW5jZTouMSxtYXhJdGVyYXRpb25zOjEwMCxlcnJvclRvbGVyYW5jZTouMDF9KS5wYXJhbWV0ZXJWYWx1ZXMscj1pKGEsMik7cmV0dXJue2E6clswXSxiOnJbMV19fWZ1bmN0aW9uIHgodCxlLG4sbyl7cmV0dXJuIHZvaWQgMD09PW4mJihuPTEpLHZvaWQgMD09PW8mJihvPTUpLHQubWFwKChmdW5jdGlvbih0LGksYSl7cmV0dXJuLTE9PT1lW2ldfHwtMT09PWVbYV0/dCpNYXRoLmV4cCgtbik6ZVtpXSE9PWVbYV0/dCpNYXRoLmV4cCgtbyk6dH0pKX1mdW5jdGlvbiBPKHQpe3Q9Yy5ub3JtYWxpemUodCwibWF4Iik7dmFyIGU9Yy50cmFuc3Bvc2UodCksbj1jLnBhaXJ3aXNlTXVsdGlwbHkoZSx0KTtyZXR1cm4gdD1jLmFkZCh0LGMuc3VidHJhY3QoZSxuKSksYy5lbGltaW5hdGVaZXJvcyh0KX1mdW5jdGlvbiBQKHQsZSxuKXtmb3IodmFyIG89bS56ZXJvcyh0Lmxlbmd0aCkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gbS56ZXJvcyhuWzBdLmxlbmd0aCl9KSksaT0wO2k8dC5sZW5ndGg7aSsrKWZvcih2YXIgYT0wO2E8dFswXS5sZW5ndGg7YSsrKWZvcih2YXIgcj0wO3I8blswXS5sZW5ndGg7cisrKW9baV1bcl0rPWVbaV1bYV0qblt0W2ldW2FdXVtyXTtyZXR1cm4gb31lLmZpbmRBQlBhcmFtcz12LGUuZmFzdEludGVyc2VjdGlvbj14LGUucmVzZXRMb2NhbENvbm5lY3Rpdml0eT1PLGUuaW5pdFRyYW5zZm9ybT1QfSkpO2Z1bmN0aW9uIExDdCh0KXtsZXQgZSxuLG89dC5sZW5ndGg7Zm9yKDtvOyluPU1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpvLS0pLGU9dFtvXSx0W29dPXRbbl0sdFtuXT1lO3JldHVybiB0fWZ1bmN0aW9uIEJDdCh0LGUpe3JldHVybmAke2V9LyR7dH1gfVl4KChmdW5jdGlvbih0LGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLlVNQVA9RkN0LlVNQVB9KSk7Y2xhc3MgVkN0e2NvbnN0cnVjdG9yKHQpe3RoaXMuaHR0cD10LHRoaXMuaHR0cFBhdGhQcmVmaXg9ImRhdGEvcGx1Z2luL25wbWkifWZldGNoRGF0YSh0KXtyZXR1cm4gTHQodGhpcy5mZXRjaEFubm90YXRpb25zKHQpLHRoaXMuZmV0Y2hNZXRyaWNzKHQpLHRoaXMuZmV0Y2hWYWx1ZXModCksdGhpcy5mZXRjaEVtYmVkZGluZ3ModCkpLnBpcGUoaHQoKChbdCxlLG4sb10pPT57Y29uc3QgaT17fSxhPXt9O2xldCByLHM9MDtmb3IoY29uc3QgciBvZiBPYmplY3Qua2V5cyh0KSlmb3IoY29uc3QgbCBpbiB0W3JdKXtjb25zdCBjPXRbcl1bbF07T2JqZWN0LmtleXMobykubGVuZ3RoJiYhYVtjXSYmb1tyXVtsXSYmb1tyXVtsXS5zb21lKCh0PT4wIT09dCkpJiYoYVtjXT17dmVjdG9yOm9bcl1bbF0saW5kZXg6cyxuYW1lOmN9LHMrPTEpO2NvbnN0IGQ9bmV3IE1hcDtmb3IoY29uc3QgdCBpbiBlW3JdKXtjb25zdCBvPWVbcl1bdF0saT1WYnQobyk7bGV0IGE9ZC5nZXQoaSk7YXx8KGE9e25QTUlWYWx1ZTpudWxsLGNvdW50VmFsdWU6bnVsbCxhbm5vdGF0aW9uOmMsbWV0cmljOmkscnVuOnJ9LGQuc2V0KGksYSkpLEZidChvKT9hLmNvdW50VmFsdWU9bltyXVtsXVt0XTpMYnQobykmJihhLm5QTUlWYWx1ZT1uW3JdW2xdW3RdKX1pW2NdPVsuLi5pW2NdP2lbY106W10sLi4uZC52YWx1ZXMoKV19cmV0dXJuIE9iamVjdC5rZXlzKGEpLmxlbmd0aCYmKHI9KGZ1bmN0aW9uIGwodCl7Y29uc3QgZT1PYmplY3Qua2V5cyh0KTtyZXR1cm57cG9pbnRzOnQscG9pbnRLZXlzOmUsc2h1ZmZsZWREYXRhSW5kaWNlczpMQ3QoKG49ZS5sZW5ndGgsWy4uLm5ldyBBcnJheShuKV0ubWFwKCgodCxlKT0+ZSkpKSksaGFzVW1hcFJ1bjohMX07dmFyIG59KShhKSkse2Fubm90YXRpb25EYXRhOmksbWV0cmljczplLGVtYmVkZGluZ0RhdGFTZXQ6cn19KSkscmUoKHQ9PnQgaW5zdGFuY2VvZiBHRCYmNDAwPD10LnN0YXR1cyYmdC5zdGF0dXM8NTAwP1ooe2Fubm90YXRpb25EYXRhOnt9LG1ldHJpY3M6e30sZW1iZWRkaW5nRGF0YVNldDp2b2lkIDB9KTpYKHQpKSkpfWZldGNoQW5ub3RhdGlvbnModCl7cmV0dXJuIEx0KHQubWFwKCh0PT50aGlzLmh0dHAuZ2V0KGAvZXhwZXJpbWVudC8ke3R9LyR7dGhpcy5odHRwUGF0aFByZWZpeH0vYW5ub3RhdGlvbnNgKS5waXBlKGh0KChlPT4oZnVuY3Rpb24gbih0LGUpe3JldHVybiBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXModCkubWFwKCgoW3Qsbl0pPT5bQkN0KHQsZSksbl0pKSl9KShlLHQpKSkpKSkpLnBpcGUoaHQoKHQ9PntsZXQgZT17fTtmb3IoY29uc3QgbiBvZiB0KWU9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLG4pO3JldHVybiBlfSkpKX1mZXRjaE1ldHJpY3ModCl7cmV0dXJuIEx0KHQubWFwKCh0PT50aGlzLmh0dHAuZ2V0KGAvZXhwZXJpbWVudC8ke3R9LyR7dGhpcy5odHRwUGF0aFByZWZpeH0vbWV0cmljc2ApLnBpcGUoaHQoKGU9PihmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyh0KS5tYXAoKChbdCxuXSk9PltCQ3QodCxlKSxuXSkpKX0pKGUsdCkpKSkpKSkucGlwZShodCgodD0+e2xldCBlPXt9O2Zvcihjb25zdCBuIG9mIHQpZT1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZSksbik7cmV0dXJuIGV9KSkpfWZldGNoVmFsdWVzKHQpe3JldHVybiBMdCh0Lm1hcCgodD0+dGhpcy5odHRwLmdldChgL2V4cGVyaW1lbnQvJHt0fS8ke3RoaXMuaHR0cFBhdGhQcmVmaXh9L3ZhbHVlc2ApLnBpcGUoaHQoKGU9PihmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyh0KS5tYXAoKChbdCxuXSk9PltCQ3QodCxlKSxuXSkpKX0pKGUsdCkpKSkpKSkucGlwZShodCgodD0+e2xldCBlPXt9O2Zvcihjb25zdCBuIG9mIHQpZT1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZSksbik7cmV0dXJuIGV9KSkpfWZldGNoRW1iZWRkaW5ncyh0KXtyZXR1cm4gTHQodC5tYXAoKHQ9PnRoaXMuaHR0cC5nZXQoYC9leHBlcmltZW50LyR7dH0vJHt0aGlzLmh0dHBQYXRoUHJlZml4fS9lbWJlZGRpbmdzYCkucGlwZShodCgoZT0+KGZ1bmN0aW9uIG4odCxlKXtyZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKHQpLm1hcCgoKFt0LG5dKT0+W0JDdCh0LGUpLG5dKSkpfSkoZSx0KSkpKSkpKS5waXBlKGh0KCh0PT57bGV0IGU9e307Zm9yKGNvbnN0IG4gb2YgdCllPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSxuKTtyZXR1cm4gZX0pKSl9fVZDdC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8VkN0KSh1cyhFRSkpfSxWQ3QuybVwcm92PWxvKHt0b2tlbjpWQ3QsZmFjdG9yeTpWQ3QuybVmYWN9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFZDdCxbe3R5cGU6Sm19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6RUV9XX0pLG51bGwpO2NsYXNzIGpDdHt9akN0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxqQ3QpfSxqQ3QuybVtb2Q9Wm8oe3R5cGU6akN0fSksakN0Lsm1aW5qPWNvKHtwcm92aWRlcnM6W1ZDdF0saW1wb3J0czpbW0FFXV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKGpDdCx7aW1wb3J0czpbQUVdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihqQ3QsW3t0eXBlOmtfLGFyZ3M6W3tpbXBvcnRzOltBRV0scHJvdmlkZXJzOltWQ3RdfV19XSxudWxsLG51bGwpO2NsYXNzIFVDdHtjb25zdHJ1Y3Rvcih0LGUsbil7dGhpcy5hY3Rpb25zJD10LHRoaXMuc3RvcmU9ZSx0aGlzLmRhdGFTb3VyY2U9bix0aGlzLmxvYWREYXRhJD1nUygoKCk9Pld0KHRoaXMubG9hZFBsdWdpbkRhdGEoKSkucGlwZShodCgoKCk9Pih7fSkpKSkpLHtkaXNwYXRjaDohMX0pfWxvYWRQbHVnaW5EYXRhKCl7cmV0dXJuIHRoaXMuYWN0aW9ucyQucGlwZSh4UyhtYnQpLGtuKHRoaXMuc3RvcmUuc2VsZWN0KFdodCksdGhpcy5zdG9yZS5zZWxlY3QoeEQpKSxHdCgoKFssdCxlXSk9PnQhPT1CRS5MT0FESU5HJiZudWxsIT09ZSkpLF9uKCgoKT0+dGhpcy5zdG9yZS5kaXNwYXRjaCh1YnQoKSkpKSxUdCgoKFssLHRdKT0+dGhpcy5kYXRhU291cmNlLmZldGNoRGF0YSh0KS5waXBlKF9uKCh0PT57dGhpcy5zdG9yZS5kaXNwYXRjaChmYnQodCkpfSkpLGh0KCgoKT0+e30pKSxyZSgoKCk9Pih0aGlzLnN0b3JlLmRpc3BhdGNoKGdidCgpKSxVKSkpKSkpKX19VUN0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxVQ3QpKHVzKHZTKSx1cyhFayksdXMoVkN0KSl9LFVDdC7JtXByb3Y9bG8oe3Rva2VuOlVDdCxmYWN0b3J5OlVDdC7JtWZhY30pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoVUN0LFt7dHlwZTpKbX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTp2U30se3R5cGU6RWt9LHt0eXBlOlZDdH1dfSksbnVsbCk7Y2xhc3MgV0N0e31XQ3QuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFdDdCl9LFdDdC7JtW1vZD1abyh7dHlwZTpXQ3R9KSxXQ3QuybVpbmo9Y28oe30pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oV0N0LHtkZWNsYXJhdGlvbnM6W2podF0sZXhwb3J0czpbamh0XX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoV0N0LFt7dHlwZTprXyxhcmdzOlt7ZGVjbGFyYXRpb25zOltqaHRdLGV4cG9ydHM6W2podF19XX1dLG51bGwsbnVsbCk7Y2xhc3MgR0N0e31HQ3QuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEdDdCl9LEdDdC7JtW1vZD1abyh7dHlwZTpHQ3R9KSxHQ3QuybVpbmo9Y28oe2ltcG9ydHM6W1tCdixkRyxBWSxmMV1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhHQ3Qse2RlY2xhcmF0aW9uczpbWWJ0LHFidF0saW1wb3J0czpbQnYsZEcsQVksZjFdLGV4cG9ydHM6W3FidF19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEdDdCxbe3R5cGU6a18sYXJnczpbe2RlY2xhcmF0aW9uczpbWWJ0LHFidF0saW1wb3J0czpbQnYsZEcsQVksZjFdLGV4cG9ydHM6W3FidF19XX1dLG51bGwsbnVsbCk7Y2xhc3MgWUN0e31ZQ3QuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFlDdCl9LFlDdC7JtW1vZD1abyh7dHlwZTpZQ3R9KSxZQ3QuybVpbmo9Y28oe2ltcG9ydHM6W1tCdixWVSxqVSxkRyxneXQsWVFdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oWUN0LHtkZWNsYXJhdGlvbnM6W0N5dCxNeXRdLGltcG9ydHM6W0J2LFZVLGpVLGRHLGd5dCxZUV0sZXhwb3J0czpbTXl0XX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoWUN0LFt7dHlwZTprXyxhcmdzOlt7ZGVjbGFyYXRpb25zOltDeXQsTXl0XSxpbXBvcnRzOltCdixWVSxqVSxkRyxneXQsWVFdLGV4cG9ydHM6W015dF19XX1dLG51bGwsbnVsbCk7Y2xhc3MgcUN0e31xQ3QuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHFDdCl9LHFDdC7JtW1vZD1abyh7dHlwZTpxQ3R9KSxxQ3QuybVpbmo9Y28oe2ltcG9ydHM6W1tCdixneXRdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8ocUN0LHtkZWNsYXJhdGlvbnM6W3Z5dF0saW1wb3J0czpbQnYsZ3l0XSxleHBvcnRzOlt2eXRdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihxQ3QsW3t0eXBlOmtfLGFyZ3M6W3tkZWNsYXJhdGlvbnM6W3Z5dF0saW1wb3J0czpbQnYsZ3l0XSxleHBvcnRzOlt2eXRdfV19XSxudWxsLG51bGwpO2NsYXNzIFpDdHt9WkN0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxaQ3QpfSxaQ3QuybVtb2Q9Wm8oe3R5cGU6WkN0fSksWkN0Lsm1aW5qPWNvKHtpbXBvcnRzOltbQnYsZ3l0LFlDdCxxQ3RdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oWkN0LHtkZWNsYXJhdGlvbnM6W3d5dCxreXRdLGltcG9ydHM6W0J2LGd5dCxZQ3QscUN0XSxleHBvcnRzOltreXRdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihaQ3QsW3t0eXBlOmtfLGFyZ3M6W3tkZWNsYXJhdGlvbnM6W3d5dCxreXRdLGltcG9ydHM6W0J2LGd5dCxZQ3QscUN0XSxleHBvcnRzOltreXRdfV19XSxudWxsLG51bGwpO2NsYXNzIFhDdHt9WEN0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxYQ3QpfSxYQ3QuybVtb2Q9Wm8oe3R5cGU6WEN0fSksWEN0Lsm1aW5qPWNvKHtpbXBvcnRzOltbQnYsZEcsekhdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oWEN0LHtkZWNsYXJhdGlvbnM6W0tidCxKYnRdLGltcG9ydHM6W0J2LGRHLHpIXSxleHBvcnRzOltKYnRdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihYQ3QsW3t0eXBlOmtfLGFyZ3M6W3tkZWNsYXJhdGlvbnM6W0tidCxKYnRdLGltcG9ydHM6W0J2LGRHLHpIXSxleHBvcnRzOltKYnRdfV19XSxudWxsLG51bGwpO2NsYXNzIEtDdHt9S0N0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxLQ3QpfSxLQ3QuybVtb2Q9Wm8oe3R5cGU6S0N0fSksS0N0Lsm1aW5qPWNvKHtpbXBvcnRzOltbQnYsR0N0LFpDdCxYQ3RdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oS0N0LHtkZWNsYXJhdGlvbnM6W1N5dF0saW1wb3J0czpbQnYsR0N0LFpDdCxYQ3RdLGV4cG9ydHM6W1N5dF19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEtDdCxbe3R5cGU6a18sYXJnczpbe2RlY2xhcmF0aW9uczpbU3l0XSxpbXBvcnRzOltCdixHQ3QsWkN0LFhDdF0sZXhwb3J0czpbU3l0XX1dfV0sbnVsbCxudWxsKTtjbGFzcyBKQ3R7fUpDdC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8SkN0KX0sSkN0Lsm1bW9kPVpvKHt0eXBlOkpDdH0pLEpDdC7JtWluaj1jbyh7aW1wb3J0czpbW0J2LFZVLHpILGRHXV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKEpDdCx7ZGVjbGFyYXRpb25zOltBeXQsUnl0XSxpbXBvcnRzOltCdixWVSx6SCxkR10sZXhwb3J0czpbUnl0XX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoSkN0LFt7dHlwZTprXyxhcmdzOlt7ZGVjbGFyYXRpb25zOltBeXQsUnl0XSxpbXBvcnRzOltCdixWVSx6SCxkR10sZXhwb3J0czpbUnl0XX1dfV0sbnVsbCxudWxsKTtjbGFzcyBRQ3R7fVFDdC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8UUN0KX0sUUN0Lsm1bW9kPVpvKHt0eXBlOlFDdH0pLFFDdC7JtWluaj1jbyh7aW1wb3J0czpbW0J2LFZVLGRHLHpILEpDdF1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhRQ3Qse2RlY2xhcmF0aW9uczpbSXl0LHp5dF0saW1wb3J0czpbQnYsVlUsZEcsekgsSkN0XSxleHBvcnRzOlt6eXRdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihRQ3QsW3t0eXBlOmtfLGFyZ3M6W3tkZWNsYXJhdGlvbnM6W0l5dCx6eXRdLGltcG9ydHM6W0J2LFZVLGRHLHpILEpDdF0sZXhwb3J0czpbenl0XX1dfV0sbnVsbCxudWxsKTtjbGFzcyAkQ3R7fSRDdC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8JEN0KX0sJEN0Lsm1bW9kPVpvKHt0eXBlOiRDdH0pLCRDdC7JtWluaj1jbyh7aW1wb3J0czpbW0J2LFZVLGRHLEFZXV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKCRDdCx7ZGVjbGFyYXRpb25zOlt0X3QsZV90XSxpbXBvcnRzOltCdixWVSxkRyxBWV0sZXhwb3J0czpbZV90XX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoJEN0LFt7dHlwZTprXyxhcmdzOlt7ZGVjbGFyYXRpb25zOlt0X3QsZV90XSxpbXBvcnRzOltCdixWVSxkRyxBWV0sZXhwb3J0czpbZV90XX1dfV0sbnVsbCxudWxsKTtjbGFzcyB0TXR7fXRNdC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8dE10KX0sdE10Lsm1bW9kPVpvKHt0eXBlOnRNdH0pLHRNdC7JtWluaj1jbyh7aW1wb3J0czpbW0J2LFZVLGRHLHpILFF5dCwkQ3RdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8odE10LHtkZWNsYXJhdGlvbnM6W2lfdCxhX3RdLGltcG9ydHM6W0J2LFZVLGRHLHpILFF5dCwkQ3RdLGV4cG9ydHM6W2FfdF19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHRNdCxbe3R5cGU6a18sYXJnczpbe2RlY2xhcmF0aW9uczpbaV90LGFfdF0saW1wb3J0czpbQnYsVlUsZEcsekgsUXl0LCRDdF0sZXhwb3J0czpbYV90XX1dfV0sbnVsbCxudWxsKTtjbGFzcyBlTXR7fWVNdC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8ZU10KX0sZU10Lsm1bW9kPVpvKHt0eXBlOmVNdH0pLGVNdC7JtWluaj1jbyh7aW1wb3J0czpbW0J2LFZVLHlZLGRHXV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKGVNdCx7ZGVjbGFyYXRpb25zOltwX3QsbV90XSxpbXBvcnRzOltCdixWVSx5WSxkR10sZXhwb3J0czpbbV90XX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoZU10LFt7dHlwZTprXyxhcmdzOlt7ZGVjbGFyYXRpb25zOltwX3QsbV90XSxpbXBvcnRzOltCdixWVSx5WSxkR10sZXhwb3J0czpbbV90XX1dfV0sbnVsbCxudWxsKTtjbGFzcyBuTXR7fW5NdC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8bk10KX0sbk10Lsm1bW9kPVpvKHt0eXBlOm5NdH0pLG5NdC7JtWluaj1jbyh7aW1wb3J0czpbW0J2XV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKG5NdCx7ZGVjbGFyYXRpb25zOltzX3RdLGltcG9ydHM6W0J2XSxleHBvcnRzOltzX3RdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihuTXQsW3t0eXBlOmtfLGFyZ3M6W3tkZWNsYXJhdGlvbnM6W3NfdF0saW1wb3J0czpbQnZdLGV4cG9ydHM6W3NfdF19XX1dLG51bGwsbnVsbCk7Y2xhc3Mgb010e31vTXQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fG9NdCl9LG9NdC7JtW1vZD1abyh7dHlwZTpvTXR9KSxvTXQuybVpbmo9Y28oe2ltcG9ydHM6W1tuTXRdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8ob010LHtkZWNsYXJhdGlvbnM6W2xfdF0saW1wb3J0czpbbk10XSxleHBvcnRzOltsX3RdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihvTXQsW3t0eXBlOmtfLGFyZ3M6W3tkZWNsYXJhdGlvbnM6W2xfdF0saW1wb3J0czpbbk10XSxleHBvcnRzOltsX3RdfV19XSxudWxsLG51bGwpO2NsYXNzIGlNdHt9aU10Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxpTXQpfSxpTXQuybVtb2Q9Wm8oe3R5cGU6aU10fSksaU10Lsm1aW5qPWNvKHtpbXBvcnRzOltbQnYsVlUseVksZEcsekhdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oaU10LHtkZWNsYXJhdGlvbnM6W19fdCx5X3RdLGltcG9ydHM6W0J2LFZVLHlZLGRHLHpIXSxleHBvcnRzOltfX3RdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihpTXQsW3t0eXBlOmtfLGFyZ3M6W3tkZWNsYXJhdGlvbnM6W19fdCx5X3RdLGltcG9ydHM6W0J2LFZVLHlZLGRHLHpIXSxleHBvcnRzOltfX3RdfV19XSxudWxsLG51bGwpO2NsYXNzIGFNdHt9YU10Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxhTXQpfSxhTXQuybVtb2Q9Wm8oe3R5cGU6YU10fSksYU10Lsm1aW5qPWNvKHtpbXBvcnRzOltbQnYsdE10LGVNdCxvTXQsaUYsaU10XV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKGFNdCx7ZGVjbGFyYXRpb25zOlt2X3QseF90XSxpbXBvcnRzOltCdix0TXQsZU10LG9NdCxpRixpTXRdLGV4cG9ydHM6W3hfdF19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGFNdCxbe3R5cGU6a18sYXJnczpbe2RlY2xhcmF0aW9uczpbdl90LHhfdF0saW1wb3J0czpbQnYsdE10LGVNdCxvTXQsaUYsaU10XSxleHBvcnRzOlt4X3RdfV19XSxudWxsLG51bGwpO2NsYXNzIHJNdHt9ck10Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxyTXQpfSxyTXQuybVtb2Q9Wm8oe3R5cGU6ck10fSksck10Lsm1aW5qPWNvKHtpbXBvcnRzOltbQnZdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8ock10LHtkZWNsYXJhdGlvbnM6W1BfdCx3X3RdLGltcG9ydHM6W0J2XSxleHBvcnRzOlt3X3RdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihyTXQsW3t0eXBlOmtfLGFyZ3M6W3tkZWNsYXJhdGlvbnM6W1BfdCx3X3RdLGltcG9ydHM6W0J2XSxleHBvcnRzOlt3X3RdfV19XSxudWxsLG51bGwpO2NsYXNzIHNNdHt9c010Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxzTXQpfSxzTXQuybVtb2Q9Wm8oe3R5cGU6c010fSksc010Lsm1aW5qPWNvKHtpbXBvcnRzOltbQnYsZEcsekgsck10XV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKHNNdCx7ZGVjbGFyYXRpb25zOltFX3QsQV90XSxpbXBvcnRzOltCdixkRyx6SCxyTXRdLGV4cG9ydHM6W0FfdF19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHNNdCxbe3R5cGU6a18sYXJnczpbe2RlY2xhcmF0aW9uczpbRV90LEFfdF0saW1wb3J0czpbQnYsZEcsekgsck10XSxleHBvcnRzOltBX3RdfV19XSxudWxsLG51bGwpO2NsYXNzIGxNdHt9bE10Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxsTXQpfSxsTXQuybVtb2Q9Wm8oe3R5cGU6bE10fSksbE10Lsm1aW5qPWNvKHtpbXBvcnRzOltbQnYsVlUseVksZEcsamd0LEtDdCx6SCxRQ3QsYU10LHNNdF1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhsTXQse2RlY2xhcmF0aW9uczpbSF90LEZfdF0saW1wb3J0czpbQnYsVlUseVksZEcsamd0LEtDdCx6SCxRQ3QsYU10LHNNdF0sZXhwb3J0czpbRl90XX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIobE10LFt7dHlwZTprXyxhcmdzOlt7ZGVjbGFyYXRpb25zOltIX3QsRl90XSxpbXBvcnRzOltCdixWVSx5WSxkRyxqZ3QsS0N0LHpILFFDdCxhTXQsc010XSxleHBvcnRzOltGX3RdfV19XSxudWxsLG51bGwpO2NsYXNzIGNNdHt9Y010Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxjTXQpfSxjTXQuybVtb2Q9Wm8oe3R5cGU6Y010fSksY010Lsm1aW5qPWNvKHtpbXBvcnRzOltbQnYsVlUseVksZEcsamd0LEtDdCx6SCxhTXQsc010XV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKGNNdCx7ZGVjbGFyYXRpb25zOltXX3QsR190XSxpbXBvcnRzOltCdixWVSx5WSxkRyxqZ3QsS0N0LHpILGFNdCxzTXRdLGV4cG9ydHM6W0dfdF19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGNNdCxbe3R5cGU6a18sYXJnczpbe2RlY2xhcmF0aW9uczpbV190LEdfdF0saW1wb3J0czpbQnYsVlUseVksZEcsamd0LEtDdCx6SCxhTXQsc010XSxleHBvcnRzOltHX3RdfV19XSxudWxsLG51bGwpO2NsYXNzIGRNdHt9ZE10Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxkTXQpfSxkTXQuybVtb2Q9Wm8oe3R5cGU6ZE10fSksZE10Lsm1aW5qPWNvKHtpbXBvcnRzOltbQnYsV0N0LGxNdCxjTXQsakN0LGlTLmZvckZlYXR1cmUoSGh0LFVidCksTFMuZm9yRmVhdHVyZShbVUN0XSksYnEuZm9yUGx1Z2luKCJucG1pIixKX3QpXV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKGRNdCx7ZGVjbGFyYXRpb25zOltLX3QsSl90XSxpbXBvcnRzOltCdixXQ3QsbE10LGNNdCxqQ3Qsb1MsRlMsYnFdLGV4cG9ydHM6W0pfdF19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGRNdCxbe3R5cGU6a18sYXJnczpbe2RlY2xhcmF0aW9uczpbS190LEpfdF0saW1wb3J0czpbQnYsV0N0LGxNdCxjTXQsakN0LGlTLmZvckZlYXR1cmUoSGh0LFVidCksTFMuZm9yRmVhdHVyZShbVUN0XSksYnEuZm9yUGx1Z2luKCJucG1pIixKX3QpXSxleHBvcnRzOltKX3RdLGVudHJ5Q29tcG9uZW50czpbSl90XX1dfV0sbnVsbCxudWxsKTtjbGFzcyBwTXR7fXBNdC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8cE10KX0scE10Lsm1Y21wPVVvKHt0eXBlOnBNdCxzZWxlY3RvcnM6W1sidGV4dC1kYXNoYm9hcmQiXV0sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmTWYoMCwiIFRoaXMgaXMgdGhlIHRleHQgZGFzaGJvYXJkICIpfSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHBNdCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJ0ZXh0LWRhc2hib2FyZCIsdGVtcGxhdGU6IiBUaGlzIGlzIHRoZSB0ZXh0IGRhc2hib2FyZCAiLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2h9XX1dLG51bGwsbnVsbCk7Y2xhc3MgbU10e31tTXQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fG1NdCl9LG1NdC7JtW1vZD1abyh7dHlwZTptTXR9KSxtTXQuybVpbmo9Y28oe30pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8obU10LHtkZWNsYXJhdGlvbnM6W3BNdF0sZXhwb3J0czpbcE10XX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIobU10LFt7dHlwZTprXyxhcmdzOlt7ZGVjbGFyYXRpb25zOltwTXRdLGV4cG9ydHM6W3BNdF19XX1dLG51bGwsbnVsbCk7Y2xhc3MgdU10e311TXQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHVNdCl9LHVNdC7JtXByb3Y9bG8oe3Rva2VuOnVNdCxmYWN0b3J5OnVNdC7JtWZhY30pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIodU10LFt7dHlwZTpKbX1dLG51bGwsbnVsbCk7Y2xhc3MgZk10e2NvbnN0cnVjdG9yKHQpe3RoaXMuaHR0cD10LHRoaXMuaHR0cFBhdGhQcmVmaXg9ImRhdGEvcGx1Z2luL3RleHRfdjIifWZldGNoUnVuVG9UYWcoKXtyZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLmh0dHBQYXRoUHJlZml4KyIvdGFncyIpLnBpcGUoaHQoKHQ9Pntjb25zdCBlPW5ldyBNYXA7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHQpLmZvckVhY2goKChbdCxuXSk9PntlLnNldCh0LG4pfSkpLGV9KSkpfWZldGNoVGV4dERhdGEodCxlKXtjb25zdCBuPW5ldyBVUkxTZWFyY2hQYXJhbXMoe3J1bjp0LHRhZzplfSk7cmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5odHRwUGF0aFByZWZpeCtgL3RleHQ/JHtuLnRvU3RyaW5nKCl9YCkucGlwZShodCgodD0+dC5tYXAoKHQ9Pih7b3JpZ2luYWxTaGFwZTp0Lm9yaWdpbmFsX3NoYXBlLHN0ZXA6dC5zdGVwLHN0cmluZ0FycmF5OnQuc3RyaW5nX2FycmF5LHdhbGxUaW1lSW5NczoxZTMqdC53YWxsX3RpbWUsdHJ1bmNhdGVkOnQudHJ1bmNhdGVkfSkpKSkpKX19Zk10Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxmTXQpKHVzKEVFKSl9LGZNdC7JtXByb3Y9bG8oe3Rva2VuOmZNdCxmYWN0b3J5OmZNdC7JtWZhY30pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoZk10LFt7dHlwZTpKbX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpFRX1dfSksbnVsbCk7Y2xhc3MgZ010e31nTXQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGdNdCl9LGdNdC7JtW1vZD1abyh7dHlwZTpnTXR9KSxnTXQuybVpbmo9Y28oe3Byb3ZpZGVyczpbZk10LHtwcm92aWRlOnVNdCx1c2VFeGlzdGluZzpmTXR9XSxpbXBvcnRzOltbQUVdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oZ010LHtpbXBvcnRzOltBRV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGdNdCxbe3R5cGU6a18sYXJnczpbe2ltcG9ydHM6W0FFXSxwcm92aWRlcnM6W2ZNdCx7cHJvdmlkZTp1TXQsdXNlRXhpc3Rpbmc6Zk10fV19XX1dLG51bGwsbnVsbCk7Y29uc3QgaE10PVd3KCJbVGV4dF0gVGV4dCBQbHVnaW4gTG9hZGVkIiksYk10PVd3KCJbVGV4dF0gUnVucyBUbyBUYWcgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSkseU10PVd3KCJbVGV4dF0gVGFnIEdyb3VwIFZpc2liaWxpdHkgQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLF9NdD1XdygiW1RleHRdIFRleHQgRGF0YSBMb2FkZWQgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksQ010PSJ0ZXh0IixNTXQ9RmsoQ010KTt6ayhNTXQsKHQ9PnQucnVuVG9UYWdzKSk7Y29uc3Qgdk10PXprKE1NdCwodD0+e2NvbnN0IGU9bmV3IFNldCxuPW5ldyBTZXQ7Zm9yKGNvbnN0IG8gb2YgdC52aXNpYmxlUnVuVGFncy52YWx1ZXMoKSlmb3IoY29uc3QgdCBvZiBvKXtjb25zdCBvPUpTT04uc3RyaW5naWZ5KHQpO2UuaGFzKG8pfHwoZS5hZGQobyksbi5hZGQodCkpfXJldHVyblsuLi5uXX0pKSx4TXQ9emsoTU10LCgodCxlKT0+e2NvbnN0IG49dC5kYXRhLmdldChlLnJ1bik7cmV0dXJuIG4mJm4uZ2V0KGUudGFnKXx8bnVsbH0pKTtjbGFzcyBPTXR7Y29uc3RydWN0b3IodCxlLG4pe3RoaXMuYWN0aW9ucyQ9dCx0aGlzLnN0b3JlPWUsdGhpcy5kYXRhU291cmNlPW4sdGhpcy5sb2FkUnVuVG9UYWdzJD1nUygoKCk9PnRoaXMuYWN0aW9ucyQucGlwZSh4UyhoTXQpLGRuKCgoKT0+dGhpcy5kYXRhU291cmNlLmZldGNoUnVuVG9UYWcoKS5waXBlKF9uKCh0PT57dGhpcy5zdG9yZS5kaXNwYXRjaChiTXQoe3J1blRvVGFnczp0fSkpfSkpLGh0KCgoKT0+e30pKSkpKSkpLHtkaXNwYXRjaDohMX0pLHRoaXMubG9hZERhdGEkPWdTKCgoKT0+V3QodGhpcy5hY3Rpb25zJC5waXBlKHhTKHlNdCksZG4oKCh7dmlzaWJsZVRleHRDYXJkczp0fSk9Pkx0KHQubWFwKCgoe3J1bjp0LHRhZzplfSk9PnRoaXMuc3RvcmUuc2VsZWN0KHhNdCx7cnVuOnQsdGFnOmV9KS5waXBlKChmdW5jdGlvbiBuKHQsZSl7Y29uc3Qgbj1hcmd1bWVudHMubGVuZ3RoPj0yO3JldHVybiBvPT5vLnBpcGUodD9HdCgoKGUsbik9PnQoZSxuLG8pKSk6ZixXZSgxKSxuP2ZlKGUpOkVlKCgoKT0+bmV3IGZ0KSkpfSkoKSxodCgobj0+KHtydW46dCx0YWc6ZSx0ZXh0RGF0YTpufSkpKSkpKSkucGlwZShodCgodD0+dC5maWx0ZXIoKCh7dGV4dERhdGE6dH0pPT5udWxsPT09dCkpLm1hcCgoKHtydW46dCx0YWc6ZX0pPT4oe3J1bjp0LHRhZzplfSkpKSkpKSkpKSx0aGlzLmFjdGlvbnMkLnBpcGUoeFMoV0UsR0UpLGtuKHRoaXMuc3RvcmUuc2VsZWN0KHZNdCkpLGh0KCgoWyx0XSk9PnQpKSkpLnBpcGUoVHQoKHQ9Pkx0KHQubWFwKCh0PT50aGlzLmZldGNoVGV4dERhdGEodCkpKSkpKSkpLHtkaXNwYXRjaDohMX0pfWZldGNoVGV4dERhdGEodCl7Y29uc3R7cnVuOmUsdGFnOm59PXQ7cmV0dXJuIHRoaXMuZGF0YVNvdXJjZS5mZXRjaFRleHREYXRhKGUsbikucGlwZShfbigodD0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goX010KHtydW46ZSx0YWc6bixzdGVwRGF0YTp0fSkpfSkpLGh0KCgoKT0+e30pKSl9fU9NdC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8T010KSh1cyh2UyksdXMoRWspLHVzKHVNdCkpfSxPTXQuybVwcm92PWxvKHt0b2tlbjpPTXQsZmFjdG9yeTpPTXQuybVmYWN9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKE9NdCxbe3R5cGU6Sm19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6dlN9LHt0eXBlOkVrfSx7dHlwZTp1TXR9XX0pLG51bGwpO2NvbnN0IFBNdD1tUyh7cnVuVG9UYWdzOm5ldyBNYXAoW1sicnVuMSIsWyJhL2IiLCJhL2MiXV0sWyJydW4yIixbImEvYiIsImEvZCJdXSxbInJ1bjMiLFsiYyIsImEvYiJdXV0pLGRhdGE6bmV3IE1hcChbWyJydW4xIixuZXcgTWFwKFtbImEvYiIsW3tvcmlnaW5hbFNoYXBlOlszXSxzdGVwOjAsc3RyaW5nQXJyYXk6W1siZm9vIiwiYmFyIiwiYmF6Il1dLHdhbGxUaW1lSW5NczoxNTc3ODY1NmU1LHRydW5jYXRlZDohMX0se29yaWdpbmFsU2hhcGU6WzNdLHN0ZXA6MSxzdHJpbmdBcnJheTpbWyJmb28iLCJiYXoiXV0sd2FsbFRpbWVJbk1zOjE1Nzc4NjU2MDFlMyx0cnVuY2F0ZWQ6ITF9XV0sWyJhL2MiLFt7b3JpZ2luYWxTaGFwZTpbM10sc3RlcDowLHN0cmluZ0FycmF5OltbIldlIGNvbmR1Y3RlZCBhbiBleHBlcmltZW50IGFuZCBmb3VuZCB0aGUgZm9sbG93aW5nIGRhdGE6XG5cblBvdW5kcyBvZiBjaG9jb2xhdGUgfCBIYXBwaW5lc3Ncbi0tLXwtLS1cbjAgfCAxXG4xIHwgNFxuMiB8IDlcbjMgfCAxNlxuNCB8IDI1XG41IHwgMzZcbjYgfCA0OVxuNyB8IDY0XG44IHwgODFcbjkgfCAxMDBcbjEwIHwgMTIxIl1dLHdhbGxUaW1lSW5NczoxNTc3ODY1NmU1LHRydW5jYXRlZDohMX0se29yaWdpbmFsU2hhcGU6WzNdLHN0ZXA6MSxzdHJpbmdBcnJheTpbWyLDlyIsIioqMCoqIiwiKioxKioiLCIqKjIqKiIsIioqMyoqIiwiKio0KioiLCIqKjUqKiJdLFsiKiowKioiLCIwIiwiMCIsIjAiLCIwIiwiMCIsIjAiXSxbIioqMSoqIiwiMCIsIjEiLCIyIiwiMyIsIjQiLCI1Il0sWyIqKjIqKiIsIjAiLCIyIiwiNCIsIjYiLCI4IiwiMTAiXSxbIioqMyoqIiwiMCIsIjMiLCI2IiwiOSIsIjEyIiwiMTUiXSxbIioqNCoqIiwiMCIsIjQiLCI4IiwiMTIiLCIxNiIsIjIwIl0sWyIqKjUqKiIsIjAiLCI1IiwiMTAiLCIxNSIsIjIwIiwiMjUiXV0sd2FsbFRpbWVJbk1zOjE1Nzc4NjU2MDFlMyx0cnVuY2F0ZWQ6ITF9XV1dKV1dKSx2aXNpYmxlUnVuVGFnczpuZXcgTWFwfSk7ZnVuY3Rpb24gd010KHQsZSl7cmV0dXJuIFBNdCh0LGUpfWNsYXNzIGtNdHt9a010Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxrTXQpfSxrTXQuybVtb2Q9Wm8oe3R5cGU6a010fSksa010Lsm1aW5qPWNvKHtpbXBvcnRzOltbQnYsbU10LGJxLmZvclBsdWdpbigidGV4dF92MiIscE10KSxnTXQsaVMuZm9yRmVhdHVyZShDTXQsd010KSxMUy5mb3JGZWF0dXJlKFtPTXRdKV1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhrTXQse2ltcG9ydHM6W0J2LG1NdCxicSxnTXQsb1MsRlNdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihrTXQsW3t0eXBlOmtfLGFyZ3M6W3tpbXBvcnRzOltCdixtTXQsYnEuZm9yUGx1Z2luKCJ0ZXh0X3YyIixwTXQpLGdNdCxpUy5mb3JGZWF0dXJlKENNdCx3TXQpLExTLmZvckZlYXR1cmUoW09NdF0pXSxlbnRyeUNvbXBvbmVudHM6W3BNdF19XX1dLG51bGwsbnVsbCk7Y2xhc3MgU010e312YXIgRE10O1NNdC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8U010KX0sU010Lsm1bW9kPVpvKHt0eXBlOlNNdH0pLFNNdC7JtWluaj1jbyh7aW1wb3J0czpbW0JKLHpodCxkTXQsa010XV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKFNNdCx7aW1wb3J0czpbQkosemh0LGRNdCxrTXRdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihTTXQsW3t0eXBlOmtfLGFyZ3M6W3tpbXBvcnRzOltCSix6aHQsZE10LGtNdF19XX1dLG51bGwsbnVsbCksKGZ1bmN0aW9uKHQpe3QuQ1VTVE9NX0VMRU1FTlQ9IkNVU1RPTV9FTEVNRU5UIix0LklGUkFNRT0iSUZSQU1FIix0Lk5HX0NPTVBPTkVOVD0iTkdfQ09NUE9ORU5UIix0Lk5PTkU9Ik5PTkUifSkoRE10fHwoRE10PXt9KSk7Y29uc3QgRU10PVsicGx1Z2luQ29udGFpbmVyIl0sQU10PVsibmdQbHVnaW5Db250YWluZXIiXTtmdW5jdGlvbiBSTXQodCxlKXsxJnQmJkR1KDApfWZ1bmN0aW9uIFRNdCh0LGUpe2lmKDEmdCYmKGt1KDApLFdtKDEsUk10LDEsMCwibmctY29udGFpbmVyIiw5KSxTdSgpKSwyJnQpe2NvbnN0IHQ9THUoMiksZT1HbSg2KTtKYygxKSx2dSgibmdUZW1wbGF0ZU91dGxldCIsdC5lbnZpcm9ubWVudEZhaWx1cmVOb3RGb3VuZFRlbXBsYXRlP3QuZW52aXJvbm1lbnRGYWlsdXJlTm90Rm91bmRUZW1wbGF0ZTplKX19ZnVuY3Rpb24gTk10KHQsZSl7MSZ0JiZEdSgwKX1mdW5jdGlvbiBJTXQodCxlKXtpZigxJnQmJihrdSgwKSxXbSgxLE5NdCwxLDAsIm5nLWNvbnRhaW5lciIsOSksU3UoKSksMiZ0KXtjb25zdCB0PUx1KDIpLGU9R20oNik7SmMoMSksdnUoIm5nVGVtcGxhdGVPdXRsZXQiLHQuZW52aXJvbm1lbnRGYWlsdXJlVW5rbm93blRlbXBsYXRlP3QuZW52aXJvbm1lbnRGYWlsdXJlVW5rbm93blRlbXBsYXRlOmUpfX1mdW5jdGlvbiB6TXQodCxlKXtpZigxJnQmJihrdSgwKSxPdSgxLCJoMyIsMTApLE1mKDIsIiBUaGVyZeKAmXMgbm8gZGFzaGJvYXJkIGJ5IHRoZSBuYW1lIG9mIOKAnCIpLE91KDMsImNvZGUiKSxNZig0KSxQdSgpLE1mKDUsIuKAnS4gIiksUHUoKSxPdSg2LCJwIiksTWYoNywiWW91IGNhbiBzZWxlY3QgYSBkYXNoYm9hcmQgZnJvbSB0aGUgbGlzdCBhYm92ZS4iKSxQdSgpLE91KDgsInAiKSxEdSg5LDExKSxQdSgpLFN1KCkpLDImdCl7Y29uc3QgdD1MdSgyKSxlPUdtKDgpO0pjKDQpLHZmKHQuYWN0aXZlUGx1Z2luSWQpLEpjKDUpLHZ1KCJuZ1RlbXBsYXRlT3V0bGV0IixlKX19ZnVuY3Rpb24gSE10KHQsZSl7aWYoMSZ0JiYoa3UoMCksT3UoMSwiaDMiLDEyKSxNZigyLCIgTm8gZGFzaGJvYXJkcyBhcmUgYWN0aXZlIGZvciB0aGUgY3VycmVudCBkYXRhIHNldC4gIiksUHUoKSxPdSgzLCJwIiksTWYoNCwiUHJvYmFibGUgY2F1c2VzOiIpLFB1KCksT3UoNSwidWwiKSxPdSg2LCJsaSIpLE1mKDcsIllvdSBoYXZlbuKAmXQgd3JpdHRlbiBhbnkgZGF0YSB0byB5b3VyIGV2ZW50IGZpbGVzLiIpLFB1KCksT3UoOCwibGkiKSxNZig5LCJUZW5zb3JCb2FyZCBjYW7igJl0IGZpbmQgeW91ciBldmVudCBmaWxlcy4iKSxQdSgpLFB1KCksTWYoMTAsIiBJZiB5b3XigJlyZSBuZXcgdG8gdXNpbmcgVGVuc29yQm9hcmQsIGFuZCB3YW50IHRvIGZpbmQgb3V0IGhvdyB0byBhZGQgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUgIiksT3UoMTEsImEiLDEzKSxNZigxMiwiUkVBRE1FIiksUHUoKSxNZigxMywiIGFuZCBwZXJoYXBzIHRoZSAiKSxPdSgxNCwiYSIsMTQpLE1mKDE1LCJUZW5zb3JCb2FyZCB0dXRvcmlhbCIpLFB1KCksTWYoMTYsIi4gIiksT3UoMTcsInAiKSxNZigxOCwiIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlICIpLE91KDE5LCJhIiwxNSksTWYoMjAsInRoZSBzZWN0aW9uIG9mIHRoZSBSRUFETUUgZGV2b3RlZCB0byBtaXNzaW5nIGRhdGEgcHJvYmxlbXMiKSxQdSgpLE1mKDIxLCIgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuICIpLFB1KCksT3UoMjIsInAiKSxEdSgyMywxMSksUHUoKSxTdSgpKSwyJnQpe0x1KDIpO2NvbnN0IHQ9R20oOCk7SmMoMjMpLHZ1KCJuZ1RlbXBsYXRlT3V0bGV0Iix0KX19ZnVuY3Rpb24gRk10KHQsZSl7aWYoMSZ0JiYoT3UoMCwiZGl2Iiw2KSxPdSgxLCJkaXYiLDcpLFdtKDIsVE10LDIsMSwibmctY29udGFpbmVyIiw4KSxXbSgzLElNdCwyLDEsIm5nLWNvbnRhaW5lciIsOCksV20oNCx6TXQsMTAsMiwibmctY29udGFpbmVyIiw4KSxXbSg1LEhNdCwyNCwxLCJuZy1jb250YWluZXIiLDgpLFB1KCksUHUoKSksMiZ0KXtjb25zdCB0PUx1KCk7dnUoIm5nU3dpdGNoIix0LnBsdWdpbkxvYWRTdGF0ZSksSmMoMiksdnUoIm5nU3dpdGNoQ2FzZSIsdC5QbHVnaW5Mb2FkU3RhdGUuRU5WSVJPTk1FTlRfRkFJTFVSRV9OT1RfRk9VTkQpLEpjKDEpLHZ1KCJuZ1N3aXRjaENhc2UiLHQuUGx1Z2luTG9hZFN0YXRlLkVOVklST05NRU5UX0ZBSUxVUkVfVU5LTk9XTiksSmMoMSksdnUoIm5nU3dpdGNoQ2FzZSIsdC5QbHVnaW5Mb2FkU3RhdGUuVU5LTk9XTl9QTFVHSU5fSUQpLEpjKDEpLHZ1KCJuZ1N3aXRjaENhc2UiLHQuUGx1Z2luTG9hZFN0YXRlLk5PX0VOQUJMRURfUExVR0lOUyl9fWZ1bmN0aW9uIExNdCh0LGUpe2lmKDEmdCYmKE91KDAsImgzIiwxNiksTWYoMSwiRGF0YSBjb3VsZCBub3QgYmUgbG9hZGVkLiIpLFB1KCksT3UoMiwicCIpLE1mKDMsIlRoZSBUZW5zb3JCb2FyZCBzZXJ2ZXIgbWF5IGJlIGRvd24gb3IgaW5hY2Nlc3NpYmxlLiIpLFB1KCksT3UoNCwicCIpLER1KDUsMTEpLFB1KCkpLDImdCl7THUoKTtjb25zdCB0PUdtKDgpO0pjKDUpLHZ1KCJuZ1RlbXBsYXRlT3V0bGV0Iix0KX19ZnVuY3Rpb24gQk10KHQsZSl7aWYoMSZ0JiYoT3UoMCwicCIsMTkpLE91KDEsImkiKSxNZigyLCJMb2cgZGlyZWN0b3J5OiAiKSxPdSgzLCJzcGFuIiksTWYoNCksUHUoKSxQdSgpLFB1KCkpLDImdCl7Y29uc3QgdD1MdSgyKTtKYyg0KSx2Zih0LmRhdGFMb2NhdGlvbil9fWZ1bmN0aW9uIFZNdCh0LGUpe2lmKDEmdCYmKE91KDAsInNwYW4iLDE3KSxNZigxKSxPYigyLCJkYXRlIiksUHUoKSxXbSgzLEJNdCw1LDEsInAiLDE4KSksMiZ0KXtjb25zdCB0PUx1KCk7SmMoMSkseGYoIkxhc3QgcmVsb2FkOiAiLHdiKDIsMix0Lmxhc3RVcGRhdGVkLCJtZWRpdW0iKSwiIiksSmMoMiksdnUoIm5nSWYiLHQuZGF0YUxvY2F0aW9uKX19Y29uc3Qgak10PWZ1bmN0aW9uKHQpe3JldHVybntwbHVnaW5zOiEwLCJpcy1maXJzdC1wYXJ0eS1wbHVnaW4iOnR9fTt2YXIgVU10OyEoZnVuY3Rpb24odCl7dFt0LkVOVklST05NRU5UX0ZBSUxVUkVfTk9UX0ZPVU5EPTBdPSJFTlZJUk9OTUVOVF9GQUlMVVJFX05PVF9GT1VORCIsdFt0LkVOVklST05NRU5UX0ZBSUxVUkVfVU5LTk9XTj0xXT0iRU5WSVJPTk1FTlRfRkFJTFVSRV9VTktOT1dOIix0W3QuTk9fRU5BQkxFRF9QTFVHSU5TPTJdPSJOT19FTkFCTEVEX1BMVUdJTlMiLHRbdC5VTktOT1dOX1BMVUdJTl9JRD0zXT0iVU5LTk9XTl9QTFVHSU5fSUQiLHRbdC5MT0FERUQ9NF09IkxPQURFRCIsdFt0LkxPQURJTkc9NV09IkxPQURJTkcifSkoVU10fHwoVU10PXt9KSk7Y2xhc3MgV010e2NvbnN0cnVjdG9yKHQsZSxuKXt0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj10LHRoaXMucGx1Z2luUmVnaXN0cnk9ZSx0aGlzLnBsdWdpbkFwaUhvc3Q9bix0aGlzLlBsdWdpbkxvYWRTdGF0ZT1VTXQsdGhpcy5Mb2FkaW5nTWVjaGFuaXNtVHlwZT1ETXQsdGhpcy5wbHVnaW5JbnN0YW5jZXM9bmV3IE1hcH1uZ09uQ2hhbmdlcyh0KXt2YXIgZTtpZighdGhpcy5pc0ZlYXR1cmVGbGFnc0xvYWRlZHx8IXRoaXMuYWN0aXZlS25vd25QbHVnaW58fHRoaXMuc2V0dGluZ3NMb2FkU3RhdGU9PT1CRS5OT1RfTE9BREVEfHx0aGlzLnNldHRpbmdzTG9hZFN0YXRlPT09QkUuTE9BRElORylyZXR1cm47Y29uc3Qgbj1Cb29sZWFuKHRoaXMuYWN0aXZlS25vd25QbHVnaW4mJiF0aGlzLnBsdWdpbkluc3RhbmNlcy5oYXModGhpcy5hY3RpdmVLbm93blBsdWdpbi5pZCkpO2lmKHQuYWN0aXZlS25vd25QbHVnaW58fHQuaXNGZWF0dXJlRmxhZ3NMb2FkZWR8fHQuc2V0dGluZ3NMb2FkU3RhdGUpe2NvbnN0IG89bnVsbD09PShlPXQuYWN0aXZlS25vd25QbHVnaW4pfHx2b2lkIDA9PT1lP3ZvaWQgMDplLnByZXZpb3VzVmFsdWU7aWYobyYmby5pZCE9PXRoaXMuYWN0aXZlS25vd25QbHVnaW4uaWQmJnRoaXMuaGlkZVBsdWdpbihvKSxuKXtjb25zdCB0PXRoaXMuY3JlYXRlUGx1Z2luKHRoaXMuYWN0aXZlS25vd25QbHVnaW4pO3QmJnRoaXMucGx1Z2luSW5zdGFuY2VzLnNldCh0aGlzLmFjdGl2ZUtub3duUGx1Z2luLmlkLHQpfWVsc2UgdGhpcy5zaG93UGx1Z2luKHRoaXMuYWN0aXZlS25vd25QbHVnaW4pfShufHx0Lmxhc3RVcGRhdGVkKSYmdGhpcy5yZWxvYWQodGhpcy5hY3RpdmVLbm93blBsdWdpbixuKX1oaWRlUGx1Z2luKHQpe2lmKCF0aGlzLnBsdWdpbkluc3RhbmNlcy5oYXModC5pZCkpcmV0dXJuO2NvbnN0IGU9dGhpcy5wbHVnaW5JbnN0YW5jZXMuZ2V0KHQuaWQpO09iamVjdC5hc3NpZ24oZS5zdHlsZSx7bWF4SGVpZ2h0OjAsb3ZlcmZsb3c6ImhpZGRlbiIsdmlzaWJpbGl0eToiaGlkZGVuIixwb3NpdGlvbjoiYWJzb2x1dGUifSl9c2hvd1BsdWdpbih0KXtpZighdGhpcy5wbHVnaW5JbnN0YW5jZXMuaGFzKHQuaWQpKXJldHVybjtjb25zdCBlPXRoaXMucGx1Z2luSW5zdGFuY2VzLmdldCh0LmlkKTtPYmplY3QuYXNzaWduKGUuc3R5bGUse21heEhlaWdodDpudWxsLG92ZXJmbG93Om51bGwsdmlzaWJpbGl0eTpudWxsLHBvc2l0aW9uOm51bGx9KX1jcmVhdGVQbHVnaW4odCl7bGV0IGU9bnVsbDtzd2l0Y2godC5sb2FkaW5nX21lY2hhbmlzbS50eXBlKXtjYXNlIERNdC5DVVNUT01fRUxFTUVOVDplPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodC5sb2FkaW5nX21lY2hhbmlzbS5lbGVtZW50X25hbWUpLGUucmVsb2FkT25SZWFkeT0hMSxlLmZlYXR1cmVGbGFncz10aGlzLmZlYXR1cmVGbGFncyx0aGlzLnBsdWdpbnNDb250YWluZXIubmF0aXZlRWxlbWVudC5hcHBlbmRDaGlsZChlKTticmVhaztjYXNlIERNdC5JRlJBTUU6aWYoIXRoaXMucGx1Z2luQXBpSG9zdCl0aHJvdyBFcnJvcihgSUZSQU1FLWJhc2VkIHBsdWdpbnMgbm90IHN1cHBvcnRlZDogJHt0LmlkfWApO2U9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIiksZS5zZXRBdHRyaWJ1dGUoInNyYyIsYGRhdGEvcGx1Z2luX2VudHJ5Lmh0bWw/bmFtZT0ke3QuaWR9YCksdGhpcy5wbHVnaW5BcGlIb3N0LnJlZ2lzdGVyUGx1Z2luSWZyYW1lKGUsdC5pZCksdGhpcy5wbHVnaW5zQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZSk7YnJlYWs7Y2FzZSBETXQuTkdfQ09NUE9ORU5UOmNvbnN0IG49dGhpcy5wbHVnaW5SZWdpc3RyeS5nZXRDb21wb25lbnQodC5pZCk7aWYobil7Y29uc3QgdD10aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShuKTtlPXRoaXMubmdQbHVnaW5Db250YWluZXIuY3JlYXRlQ29tcG9uZW50KHQpLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnR9ZWxzZSBjb25zb2xlLmVycm9yKGBObyByZWdpc3RlcmVkIEFuZ3VsYXIgY29tcG9uZW50IGZvciBwbHVnaW46ICR7dC5pZH1gKTticmVhaztjYXNlIERNdC5OT05FOmJyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiVW5leHBlY3RlZCBwbHVnaW4iKX1yZXR1cm4gZX1yZWxvYWQodCxlKXtpZighZSYmdC5kaXNhYmxlX3JlbG9hZClyZXR1cm47Y29uc3Qgbj10aGlzLnBsdWdpbkluc3RhbmNlcy5nZXQodC5pZCk7biYmbi5yZWxvYWQmJm4ucmVsb2FkKCl9fVdNdC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8V010KShNdShyaCksTXUoYnEpLE11KFhOLDgpKX0sV010Lsm1Y21wPVVvKHt0eXBlOldNdCxzZWxlY3RvcnM6W1sicGx1Z2lucy1jb21wb25lbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJihXYihFTXQsMyxjaCksV2IoQU10LDMsWGgpKSwyJmUpe2xldCB0O1ViKHQ9WWIoKSkmJihuLnBsdWdpbnNDb250YWluZXI9dC5maXJzdCksVWIodD1ZYigpKSYmKG4ubmdQbHVnaW5Db250YWluZXI9dC5maXJzdCl9fSxpbnB1dHM6e2FjdGl2ZVBsdWdpbklkOiJhY3RpdmVQbHVnaW5JZCIsYWN0aXZlS25vd25QbHVnaW46ImFjdGl2ZUtub3duUGx1Z2luIixwbHVnaW5Mb2FkU3RhdGU6InBsdWdpbkxvYWRTdGF0ZSIsZGF0YUxvY2F0aW9uOiJkYXRhTG9jYXRpb24iLGlzRmVhdHVyZUZsYWdzTG9hZGVkOiJpc0ZlYXR1cmVGbGFnc0xvYWRlZCIsc2V0dGluZ3NMb2FkU3RhdGU6InNldHRpbmdzTG9hZFN0YXRlIixmZWF0dXJlRmxhZ3M6ImZlYXR1cmVGbGFncyIsbGFzdFVwZGF0ZWQ6Imxhc3RVcGRhdGVkIixlbnZpcm9ubWVudEZhaWx1cmVOb3RGb3VuZFRlbXBsYXRlOiJlbnZpcm9ubWVudEZhaWx1cmVOb3RGb3VuZFRlbXBsYXRlIixlbnZpcm9ubWVudEZhaWx1cmVVbmtub3duVGVtcGxhdGU6ImVudmlyb25tZW50RmFpbHVyZVVua25vd25UZW1wbGF0ZSJ9LGZlYXR1cmVzOltTaV0sZGVjbHM6OSx2YXJzOjQsY29uc3RzOltbMywibmdDbGFzcyJdLFsicGx1Z2luQ29udGFpbmVyIiwiIl0sWyJuZ1BsdWdpbkNvbnRhaW5lciIsIiJdLFsiY2xhc3MiLCJ3YXJuaW5nIiwzLCJuZ1N3aXRjaCIsNCwibmdJZiJdLFsiZW52aXJvbm1lbnRGYWlsdXJlRGVmYXVsdFRlbXBsYXRlIiwiIl0sWyJkYXRlQW5kRGF0YUxvY2F0aW9uIiwiIl0sWzEsIndhcm5pbmciLDMsIm5nU3dpdGNoIl0sWzEsIndhcm5pbmctbWVzc2FnZSJdLFs0LCJuZ1N3aXRjaENhc2UiXSxbNCwibmdUZW1wbGF0ZU91dGxldCJdLFsxLCJ1bmtub3duLXBsdWdpbiJdLFszLCJuZ1RlbXBsYXRlT3V0bGV0Il0sWzEsIm5vLWFjdGl2ZS1wbHVnaW4iXSxbImhyZWYiLCJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQiXSxbImhyZWYiLCJodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9nZXRfc3RhcnRlZC9zdW1tYXJpZXNfYW5kX3RlbnNvcmJvYXJkIl0sWyJocmVmIiwiaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI215LXRlbnNvcmJvYXJkLWlzbnQtc2hvd2luZy1hbnktZGF0YS13aGF0cy13cm9uZyJdLFsxLCJlbnZpcm9ubWVudC1ub3QtbG9hZGVkIl0sWzEsImxhc3QtcmVsb2FkLXRpbWUiXSxbImNsYXNzIiwiZGF0YS1sb2NhdGlvbiIsNCwibmdJZiJdLFsxLCJkYXRhLWxvY2F0aW9uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihPdSgwLCJkaXYiLDAsMSksRHUoMixudWxsLDIpLFB1KCksV20oNCxGTXQsNiw1LCJkaXYiLDMpLFdtKDUsTE10LDYsMSwibmctdGVtcGxhdGUiLG51bGwsNCxLYiksV20oNyxWTXQsNCw1LCJuZy10ZW1wbGF0ZSIsbnVsbCw1LEtiKSksMiZlJiYodnUoIm5nQ2xhc3MiLGdiKDIsak10LChudWxsPT1uLmFjdGl2ZUtub3duUGx1Z2luP251bGw6bi5hY3RpdmVLbm93blBsdWdpbi5sb2FkaW5nX21lY2hhbmlzbS50eXBlKSE9PW4uTG9hZGluZ01lY2hhbmlzbVR5cGUuSUZSQU1FKSksSmMoNCksdnUoIm5nSWYiLG4ucGx1Z2luTG9hZFN0YXRlIT09bi5QbHVnaW5Mb2FkU3RhdGUuTE9BREVEJiZuLnBsdWdpbkxvYWRTdGF0ZSE9PW4uUGx1Z2luTG9hZFN0YXRlLkxPQURJTkcpKX0sZGlyZWN0aXZlczpbdHYsYXYsY3YsZHYsaHZdLHBpcGVzOlt3dl0sc3R5bGVzOlsnLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEycHg7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtYmFkZ2Utc21hbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6OXB4fS5tYXQtYmFkZ2UtbGFyZ2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweH0ubWF0LWgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1oZWFkbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMjRweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNnB4LzI4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNXB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC44MykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtaDZbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuNjcpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWJvZHktc3Ryb25nW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjAgMCAxMnB4fS5tYXQtc21hbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDEycHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjMwMCAxMTJweC8xMTJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDVlbTttYXJnaW46MCAwIDU2cHh9Lm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDU2cHgvNTZweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDJlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDQ1cHgvNDhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDA1ZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAzNHB4LzQwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDY0cHh9Lm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcmFpc2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0cm9rZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mbGF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmFiW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1taW5pLWZhYltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWJ1dHRvbi10b2dnbGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhcmQtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjIwcHh9Lm1hdC1jYXJkLXN1YnRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2hlY2tib3hbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNoZWNrYm94LWxheW91dFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoZWNrYm94LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoyNHB4fS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtdHJhaWxpbmctaWNvbi5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtcmVtb3ZlLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MThweH0ubWF0LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1oZWFkZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2VsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9vdGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2FsZW5kYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhbGVuZGFyLWJvZHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxM3B4fS5tYXQtY2FsZW5kYXItYm9keS1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FsZW5kYXItcGVyaW9kLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo0MDB9Lm1hdC1kaWFsb2ctdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjEyNTtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE1MCU7bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS41ZW07d2lkdGg6MS41ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNWVtIDA7Ym9yZGVyLXRvcDouODQzNzVlbSBzb2xpZCB0cmFuc3BhcmVudH0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6LTAuODQzNzVlbTtwYWRkaW5nLXRvcDouODQzNzVlbX0ubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo3NSU7bWFyZ2luLXRvcDouNjY2NjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjc5MTY2NjY2NjdlbSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNDM3NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMnB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjNlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM1MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjI4MTI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDouNTQxNjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjY2NjY2NjY2NjdlbSl9QG1lZGlhIHByaW50ey5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMmVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMWVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTJlbSkgc2NhbGUoMC43NSl9fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi4yNWVtIDAgLjc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMDkzNzVlbTttYXJnaW4tdG9wOi0wLjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjFlbSAwIDFlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS44NDM3NWVtO21hcmdpbi10b3A6LTAuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9aW5wdXQubWF0LWlucHV0LWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LTAuMDYyNWVtfS5tYXQtbWVudS1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtcGFnaW5hdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweH0ubWF0LXJhZGlvLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW19Lm1hdC1zbGlkZS10b2dnbGUtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdGVwcGVyLWhvcml6b250YWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXN0ZXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXN0ZXAtc3ViLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDpub3JtYWx9Lm1hdC1zdGVwLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LXN0ZXAtbGFiZWwtc2VsZWN0ZWRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRhYi1ncm91cFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdGFiLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10YWItbGlua1tfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowfS5tYXQtdG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB4O3BhZGRpbmctdG9wOjZweDtwYWRkaW5nLWJvdHRvbTo2cHh9Lm1hdC10b29sdGlwLWhhbmRzZXRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9Lm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE2cHh9Lm1hdC1vcHRncm91cC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1zaW1wbGUtc25hY2tiYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweH0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb25bX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjE7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo1MDB9Lm1hdC10cmVlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW5lc3RlZC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjQwMDtmb250LXNpemU6MTRweH0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmVtcHR5KXt0cmFuc2Zvcm06dHJhbnNsYXRlWigwKX0ubWF0LXJpcHBsZS5tYXQtcmlwcGxlLXVuYm91bmRlZFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItcmFkaXVzOjUwJTtwb2ludGVyLWV2ZW50czpub25lO3RyYW5zaXRpb246b3BhY2l0eSx0cmFuc2Zvcm0gMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpO3RyYW5zZm9ybTpzY2FsZSgwKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6bm9uZX0uY2RrLXZpc3VhbGx5LWhpZGRlbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjA7Y2xpcDpyZWN0KDAgMCAwIDApO2hlaWdodDoxcHg7bWFyZ2luOi0xcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwO291dGxpbmU6MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb2ludGVyLWV2ZW50czpub25lO3RvcDowO2xlZnQ6MDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTplbXB0eXtkaXNwbGF5Om5vbmV9LmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1wYW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czphdXRvO2JveC1zaXppbmc6Ym9yZGVyLWJveDt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O21heC13aWR0aDoxMDAlO21heC1oZWlnaHQ6MTAwJX0uY2RrLW92ZXJsYXktYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO3otaW5kZXg6MTAwMDtwb2ludGVyLWV2ZW50czphdXRvOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDt0cmFuc2l0aW9uOm9wYWNpdHkgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSk7b3BhY2l0eTowfS5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjF9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAuY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTouNn0uY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4zMil9LmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MH0uY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWluLXdpZHRoOjFweDttaW4taGVpZ2h0OjFweH0uY2RrLWdsb2JhbC1zY3JvbGxibG9ja1tfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7d2lkdGg6MTAwJTtvdmVyZmxvdy15OnNjcm9sbH1Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0e31Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZHt9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbHthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQgMHMgMW1zfS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOm5vdCg6LXdlYmtpdC1hdXRvZmlsbCl7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCAwcyAxbXN9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplW19uZ2NvbnRlbnQtJUNPTVAlXXtyZXNpemU6bm9uZX10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDphdXRvICFpbXBvcnRhbnQ7b3ZlcmZsb3c6aGlkZGVuICFpbXBvcnRhbnR9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZy1maXJlZm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDowICFpbXBvcnRhbnR9Lm1hdC1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtbWRjLWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9W19uZ2hvc3QtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Y29sb3I6IzIxMjEyMTtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlfWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5wbHVnaW5zLmlzLWZpcnN0LXBhcnR5LXBsdWdpbltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwO2NvbG9yOiNmZmZ9LnBsdWdpbnNbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlO3Bvc2l0aW9uOnJlbGF0aXZlfS53YXJuaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MDtsZWZ0OjA7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MH0ud2FybmluZy1tZXNzYWdlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojMjEyMTIxO21hcmdpbjo4MHB4IGF1dG8gMDttYXgtd2lkdGg6NTQwcHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLndhcm5pbmctbWVzc2FnZVtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC53YXJuaW5nLW1lc3NhZ2VbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNmZmZ9Lmxhc3QtcmVsb2FkLXRpbWVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc3R5bGU6aXRhbGljfS5wbHVnaW5zW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgaWZyYW1le2JvcmRlcjowO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoV010LFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6InBsdWdpbnMtY29tcG9uZW50Iix0ZW1wbGF0ZVVybDoiLi9wbHVnaW5zX2NvbXBvbmVudC5uZy5odG1sIixzdHlsZVVybHM6WyJwbHVnaW5zX2NvbXBvbmVudC5jc3MiXSxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6cmh9LHt0eXBlOmJxfSx7dHlwZTpYTixkZWNvcmF0b3JzOlt7dHlwZTpfc31dfV19KSx7cGx1Z2luc0NvbnRhaW5lcjpbe3R5cGU6RnIsYXJnczpbInBsdWdpbkNvbnRhaW5lciIse3N0YXRpYzohMCxyZWFkOmNofV19XSxuZ1BsdWdpbkNvbnRhaW5lcjpbe3R5cGU6RnIsYXJnczpbIm5nUGx1Z2luQ29udGFpbmVyIix7c3RhdGljOiEwLHJlYWQ6WGh9XX1dLGFjdGl2ZVBsdWdpbklkOlt7dHlwZTp5X31dLGFjdGl2ZUtub3duUGx1Z2luOlt7dHlwZTp5X31dLHBsdWdpbkxvYWRTdGF0ZTpbe3R5cGU6eV99XSxkYXRhTG9jYXRpb246W3t0eXBlOnlffV0saXNGZWF0dXJlRmxhZ3NMb2FkZWQ6W3t0eXBlOnlffV0sc2V0dGluZ3NMb2FkU3RhdGU6W3t0eXBlOnlffV0sZmVhdHVyZUZsYWdzOlt7dHlwZTp5X31dLGxhc3RVcGRhdGVkOlt7dHlwZTp5X31dLGVudmlyb25tZW50RmFpbHVyZU5vdEZvdW5kVGVtcGxhdGU6W3t0eXBlOnlffV0sZW52aXJvbm1lbnRGYWlsdXJlVW5rbm93blRlbXBsYXRlOlt7dHlwZTp5X31dfSk7Y29uc3QgR010PXprKHBBLGRBLCgodCxlKT0+ZSYmdFtlXT9PYmplY3QuYXNzaWduKHtpZDplfSx0W2VdKTpudWxsKSk7Y2xhc3MgWU10e2NvbnN0cnVjdG9yKHQpe3RoaXMuc3RvcmU9dCx0aGlzLmFjdGl2ZUtub3duUGx1Z2luJD10aGlzLnN0b3JlLnNlbGVjdChHTXQpLHRoaXMuYWN0aXZlUGx1Z2luSWQkPXRoaXMuc3RvcmUuc2VsZWN0KGRBKSx0aGlzLnBsdWdpbkxvYWRTdGF0ZSQ9RHQodGhpcy5hY3RpdmVLbm93blBsdWdpbiQsdGhpcy5hY3RpdmVQbHVnaW5JZCQsdGhpcy5zdG9yZS5zZWxlY3QockEpKS5waXBlKGh0KCgoW3QsZSxuXSk9Pm51bGwhPT1uLmZhaWx1cmVDb2RlP24uZmFpbHVyZUNvZGU9PT1ORS5OT1RfRk9VTkQ/VU10LkVOVklST05NRU5UX0ZBSUxVUkVfTk9UX0ZPVU5EOlVNdC5FTlZJUk9OTUVOVF9GQUlMVVJFX1VOS05PV046bnVsbCE9PXQ/VU10LkxPQURFRDpudWxsPT09bi5sYXN0TG9hZGVkVGltZUluTXMmJm4uc3RhdGU9PT1CRS5MT0FESU5HP1VNdC5MT0FESU5HOmU/VU10LlVOS05PV05fUExVR0lOX0lEOlVNdC5OT19FTkFCTEVEX1BMVUdJTlMpKSksdGhpcy5sYXN0TG9hZGVkVGltZUluTXMkPXRoaXMuc3RvcmUuc2VsZWN0KGNBKSx0aGlzLmRhdGFMb2NhdGlvbiQ9dGhpcy5zdG9yZS5zZWxlY3QobUEpLnBpcGUoaHQoKHQ9PnQuZGF0YV9sb2NhdGlvbikpKSx0aGlzLmlzRmVhdHVyZUZsYWdzTG9hZGVkJD10aGlzLnN0b3JlLnNlbGVjdChiRSksdGhpcy5mZWF0dXJlRmxhZ3MkPXRoaXMuc3RvcmUuc2VsZWN0KHlFKSx0aGlzLnNldHRpbmdzTG9hZFN0YXRlJD10aGlzLnN0b3JlLnNlbGVjdChaRyl9fVlNdC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8WU10KShNdShFaykpfSxZTXQuybVjbXA9VW8oe3R5cGU6WU10LHNlbGVjdG9yczpbWyJwbHVnaW5zIl1dLGlucHV0czp7ZW52aXJvbm1lbnRGYWlsdXJlTm90Rm91bmRUZW1wbGF0ZToiZW52aXJvbm1lbnRGYWlsdXJlTm90Rm91bmRUZW1wbGF0ZSIsZW52aXJvbm1lbnRGYWlsdXJlVW5rbm93blRlbXBsYXRlOiJlbnZpcm9ubWVudEZhaWx1cmVVbmtub3duVGVtcGxhdGUifSxkZWNsczo5LHZhcnM6MjYsY29uc3RzOltbMywiYWN0aXZlS25vd25QbHVnaW4iLCJhY3RpdmVQbHVnaW5JZCIsImRhdGFMb2NhdGlvbiIsImxhc3RVcGRhdGVkIiwicGx1Z2luTG9hZFN0YXRlIiwiaXNGZWF0dXJlRmxhZ3NMb2FkZWQiLCJzZXR0aW5nc0xvYWRTdGF0ZSIsImZlYXR1cmVGbGFncyIsImVudmlyb25tZW50RmFpbHVyZU5vdEZvdW5kVGVtcGxhdGUiLCJlbnZpcm9ubWVudEZhaWx1cmVVbmtub3duVGVtcGxhdGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKHd1KDAsInBsdWdpbnMtY29tcG9uZW50IiwwKSxPYigxLCJhc3luYyIpLE9iKDIsImFzeW5jIiksT2IoMywiYXN5bmMiKSxPYig0LCJhc3luYyIpLE9iKDUsImFzeW5jIiksT2IoNiwiYXN5bmMiKSxPYig3LCJhc3luYyIpLE9iKDgsImFzeW5jIikpLDImZSYmdnUoImFjdGl2ZUtub3duUGx1Z2luIixQYigxLDEwLG4uYWN0aXZlS25vd25QbHVnaW4kKSkoImFjdGl2ZVBsdWdpbklkIixQYigyLDEyLG4uYWN0aXZlUGx1Z2luSWQkKSkoImRhdGFMb2NhdGlvbiIsUGIoMywxNCxuLmRhdGFMb2NhdGlvbiQpKSgibGFzdFVwZGF0ZWQiLFBiKDQsMTYsbi5sYXN0TG9hZGVkVGltZUluTXMkKSkoInBsdWdpbkxvYWRTdGF0ZSIsUGIoNSwxOCxuLnBsdWdpbkxvYWRTdGF0ZSQpKSgiaXNGZWF0dXJlRmxhZ3NMb2FkZWQiLFBiKDYsMjAsbi5pc0ZlYXR1cmVGbGFnc0xvYWRlZCQpKSgic2V0dGluZ3NMb2FkU3RhdGUiLFBiKDcsMjIsbi5zZXR0aW5nc0xvYWRTdGF0ZSQpKSgiZmVhdHVyZUZsYWdzIixQYig4LDI0LG4uZmVhdHVyZUZsYWdzJCkpKCJlbnZpcm9ubWVudEZhaWx1cmVOb3RGb3VuZFRlbXBsYXRlIixuLmVudmlyb25tZW50RmFpbHVyZU5vdEZvdW5kVGVtcGxhdGUpKCJlbnZpcm9ubWVudEZhaWx1cmVVbmtub3duVGVtcGxhdGUiLG4uZW52aXJvbm1lbnRGYWlsdXJlVW5rbm93blRlbXBsYXRlKX0sc3R5bGVzOlsicGx1Z2lucy1jb21wb25lbnRbX25nY29udGVudC0lQ09NUCVdIHsgaGVpZ2h0OiAxMDAlOyB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFlNdCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJwbHVnaW5zIix0ZW1wbGF0ZTonXG4gICAgPHBsdWdpbnMtY29tcG9uZW50XG4gICAgICBbYWN0aXZlS25vd25QbHVnaW5dPSJhY3RpdmVLbm93blBsdWdpbiQgfCBhc3luYyJcbiAgICAgIFthY3RpdmVQbHVnaW5JZF09ImFjdGl2ZVBsdWdpbklkJCB8IGFzeW5jIlxuICAgICAgW2RhdGFMb2NhdGlvbl09ImRhdGFMb2NhdGlvbiQgfCBhc3luYyJcbiAgICAgIFtsYXN0VXBkYXRlZF09Imxhc3RMb2FkZWRUaW1lSW5NcyQgfCBhc3luYyJcbiAgICAgIFtwbHVnaW5Mb2FkU3RhdGVdPSJwbHVnaW5Mb2FkU3RhdGUkIHwgYXN5bmMiXG4gICAgICBbaXNGZWF0dXJlRmxhZ3NMb2FkZWRdPSJpc0ZlYXR1cmVGbGFnc0xvYWRlZCQgfCBhc3luYyJcbiAgICAgIFtzZXR0aW5nc0xvYWRTdGF0ZV09InNldHRpbmdzTG9hZFN0YXRlJCB8IGFzeW5jIlxuICAgICAgW2ZlYXR1cmVGbGFnc109ImZlYXR1cmVGbGFncyQgfCBhc3luYyJcbiAgICAgIFtlbnZpcm9ubWVudEZhaWx1cmVOb3RGb3VuZFRlbXBsYXRlXT0iZW52aXJvbm1lbnRGYWlsdXJlTm90Rm91bmRUZW1wbGF0ZSJcbiAgICAgIFtlbnZpcm9ubWVudEZhaWx1cmVVbmtub3duVGVtcGxhdGVdPSJlbnZpcm9ubWVudEZhaWx1cmVVbmtub3duVGVtcGxhdGUiXG4gICAgPjwvcGx1Z2lucy1jb21wb25lbnQ+XG4gICcsc3R5bGVzOlsicGx1Z2lucy1jb21wb25lbnQgeyBoZWlnaHQ6IDEwMCU7IH0iXSxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6RWt9XX0pLHtlbnZpcm9ubWVudEZhaWx1cmVOb3RGb3VuZFRlbXBsYXRlOlt7dHlwZTp5X31dLGVudmlyb25tZW50RmFpbHVyZVVua25vd25UZW1wbGF0ZTpbe3R5cGU6eV99XX0pO2NsYXNzIHFNdHt9cU10Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxxTXQpfSxxTXQuybVtb2Q9Wm8oe3R5cGU6cU10fSkscU10Lsm1aW5qPWNvKHtpbXBvcnRzOltbQ0EsQnYsYnFdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8ocU10LHtkZWNsYXJhdGlvbnM6W1lNdCxXTXRdLGltcG9ydHM6W0NBLEJ2LGJxXSxleHBvcnRzOltZTXRdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihxTXQsW3t0eXBlOmtfLGFyZ3M6W3tkZWNsYXJhdGlvbnM6W1lNdCxXTXRdLGV4cG9ydHM6W1lNdF0saW1wb3J0czpbQ0EsQnYsYnFdfV19XSxudWxsLG51bGwpLFdvKFlNdCxbV010XSxbTXZdKTtjbGFzcyBaTXR7Y29uc3RydWN0b3IodCxlKXt0aGlzLnN0b3JlPXQsdGhpcy5kb2N1bWVudD1lLHRoaXMub25WaXNpYmlsaXR5Q2hhbmdlPXRoaXMub25WaXNpYmlsaXR5Q2hhbmdlSW1wbC5iaW5kKHRoaXMpLHRoaXMucmVsb2FkRW5hYmxlZCQ9dGhpcy5zdG9yZS5waXBlKFJrKFhHKSksdGhpcy5yZWxvYWRQZXJpb2RJbk1zJD10aGlzLnN0b3JlLnBpcGUoUmsoS0cpKSx0aGlzLnJlbG9hZFRpbWVySWQ9bnVsbCx0aGlzLm1pc3NlZEF1dG9SZWxvYWQ9ITF9bmdPbkluaXQoKXt0aGlzLmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLHRoaXMub25WaXNpYmlsaXR5Q2hhbmdlKSxEdCh0aGlzLnJlbG9hZEVuYWJsZWQkLnBpcGUoa2UoKSksdGhpcy5yZWxvYWRQZXJpb2RJbk1zJC5waXBlKGtlKCkpKS5zdWJzY3JpYmUoKChbdCxlXSk9Pnt0aGlzLmNhbmNlbExvYWQoKSx0JiZ0aGlzLmxvYWQoZSl9KSl9b25WaXNpYmlsaXR5Q2hhbmdlSW1wbCgpeyJ2aXNpYmxlIj09PXRoaXMuZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlJiZ0aGlzLm1pc3NlZEF1dG9SZWxvYWQmJih0aGlzLm1pc3NlZEF1dG9SZWxvYWQ9ITEsdGhpcy5zdG9yZS5kaXNwYXRjaChHRSgpKSl9bG9hZCh0KXt0aGlzLnJlbG9hZFRpbWVySWQ9c2V0VGltZW91dCgoKCk9PnsidmlzaWJsZSI9PT10aGlzLmRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZT90aGlzLnN0b3JlLmRpc3BhdGNoKEdFKCkpOnRoaXMubWlzc2VkQXV0b1JlbG9hZD0hMCx0aGlzLmxvYWQodCl9KSx0KX1jYW5jZWxMb2FkKCl7bnVsbCE9PXRoaXMucmVsb2FkVGltZXJJZCYmY2xlYXJUaW1lb3V0KHRoaXMucmVsb2FkVGltZXJJZCksdGhpcy5yZWxvYWRUaW1lcklkPW51bGx9bmdPbkRlc3Ryb3koKXt0aGlzLmNhbmNlbExvYWQoKSx0aGlzLmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLHRoaXMub25WaXNpYmlsaXR5Q2hhbmdlKX19Wk10Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxaTXQpKE11KEVrKSxNdShVQykpfSxaTXQuybVjbXA9VW8oe3R5cGU6Wk10LHNlbGVjdG9yczpbWyJyZWxvYWRlciJdXSxkZWNsczowLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7fSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFpNdCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJyZWxvYWRlciIsdGVtcGxhdGU6IiIsY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkVrfSx7dHlwZTpEb2N1bWVudCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltVQ119XX1dfSksbnVsbCk7Y2xhc3MgWE10e31YTXQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFhNdCl9LFhNdC7JtWNtcD1Vbyh7dHlwZTpYTXQsc2VsZWN0b3JzOltbInRlbnNvcmJvYXJkLXdyYXBwZXItY29tcG9uZW50Il1dLGRlY2xzOjIsdmFyczowLGNvbnN0czpbWzEsInBsdWdpbnMiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKHd1KDAsInBsdWdpbnMiLDApLHd1KDEsInJlbG9hZGVyIikpfSxkaXJlY3RpdmVzOltZTXQsWk10XSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgfVxuXG4gICAgICAucGx1Z2luc1tfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBmbGV4OiAxIDE7XG4gICAgICAgIG92ZXJmbG93OiBhdXRvO1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFhNdCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJ0ZW5zb3Jib2FyZC13cmFwcGVyLWNvbXBvbmVudCIsdGVtcGxhdGU6J1xuICAgIDxwbHVnaW5zIGNsYXNzPSJwbHVnaW5zIj48L3BsdWdpbnM+XG4gICAgPHJlbG9hZGVyPjwvcmVsb2FkZXI+XG4gICcsc3R5bGVzOlsiXG4gICAgICA6aG9zdCB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIH1cblxuICAgICAgLnBsdWdpbnMge1xuICAgICAgICBmbGV4OiAxIDE7XG4gICAgICAgIG92ZXJmbG93OiBhdXRvO1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB9XG4gICAgIl0sY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sbnVsbCxudWxsKTtjbGFzcyBLTXR7fUtNdC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8S010KX0sS010Lsm1cHJvdj1sbyh7dG9rZW46S010LGZhY3Rvcnk6S010Lsm1ZmFjfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihLTXQsW3t0eXBlOkptfV0sbnVsbCxudWxsKTtjb25zdCBKTXQ9InNtb290aGluZyIsUU10PSJydW5Db2xvckdyb3VwIiwkTXQ9InJlZ2V4OiI7bGV0IHR2dD1jbGFzcyBleHRlbmRzIEtNdHtnZXRNZXRyaWNzUGlubmVkQ2FyZHModCl7cmV0dXJuIER0KFt0LnNlbGVjdChOVCksdC5zZWxlY3QoelQpXSkucGlwZShodCgoKFt0LGVdKT0+e2lmKCF0Lmxlbmd0aCYmIWUubGVuZ3RoKXJldHVybltdO2NvbnN0IG49Wy4uLnQubWFwKCgoe3BsdWdpbjp0LHRhZzplLHNhbXBsZTpuLHJ1bklkOm99KT0+e2NvbnN0IGk9e3BsdWdpbjp0LHRhZzplfTtyZXR1cm4gZlIodCkmJihpLnJ1bklkPW8pLG1SKHQpJiYoaS5zYW1wbGU9biksaX0pKSwuLi5lXTtyZXR1cm5be2tleToicGlubmVkQ2FyZHMiLHZhbHVlOkpTT04uc3RyaW5naWZ5KG4pfV19KSkpfWdldEZlYXR1cmVGbGFnU3RhdGVzKHQpe3JldHVybiBEdChbdC5zZWxlY3QoeEUpLHQuc2VsZWN0KF9FKV0pLnBpcGUoaHQoKChbdCxlXSk9Pntjb25zdCBuPXQubWFwKCh0PT4oe2tleTpVUix2YWx1ZTp0fSkpKTtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBlLmVuYWJsZWRDb2xvckdyb3VwJiZuLnB1c2goe2tleTpHUix2YWx1ZTpTdHJpbmcoZS5lbmFibGVkQ29sb3JHcm91cCl9KSwiYm9vbGVhbiI9PXR5cGVvZiBlLmVuYWJsZWRDb2xvckdyb3VwQnlSZWdleCYmbi5wdXNoKHtrZXk6WVIsdmFsdWU6U3RyaW5nKGUuZW5hYmxlZENvbG9yR3JvdXBCeVJlZ2V4KX0pLG59KSkpfXNlcmlhbGl6ZVN0YXRlVG9RdWVyeVBhcmFtcyh0KXtyZXR1cm4gRHQoW3RoaXMuZ2V0TWV0cmljc1Bpbm5lZENhcmRzKHQpLHRoaXMuZ2V0RmVhdHVyZUZsYWdTdGF0ZXModCksdC5zZWxlY3QoTFQpLnBpcGUoaHQoKHQ9Pk51bWJlci5pc0Zpbml0ZSh0LnNjYWxhclNtb290aGluZyk/W3trZXk6Sk10LHZhbHVlOlN0cmluZyh0LnNjYWxhclNtb290aGluZyl9XTpbXSkpKSx0LnNlbGVjdChmTikucGlwZShodCgodD0+e2lmKCF0KXJldHVybltdO2xldCBlO3N3aXRjaCh0LmtleSl7Y2FzZSBlTi5FWFBFUklNRU5UOmU9ImV4cGVyaW1lbnQiO2JyZWFrO2Nhc2UgZU4uUlVOOmU9InJ1biI7YnJlYWs7Y2FzZSBlTi5SRUdFWDplPWByZWdleDoke3QucmVnZXhTdHJpbmd9YDticmVhaztkZWZhdWx0OnRocm93IG5ldyBSYW5nZUVycm9yKCJTZXJpYWxpemF0aW9uIG5vdCBpbXBsZW1lbnRlZCIpfXJldHVyblt7a2V5OlFNdCx2YWx1ZTplfV19KSkpXSkucGlwZShodCgodD0+dC5mbGF0KCkpKSl9ZGVzZXJpYWxpemVRdWVyeVBhcmFtcyh0KXtsZXQgZT1udWxsLG49bnVsbCxvPW51bGw7Zm9yKGNvbnN0e2tleTppLHZhbHVlOmF9b2YgdClzd2l0Y2goaSl7Y2FzZSJwaW5uZWRDYXJkcyI6ZT1ldnQoYSk7YnJlYWs7Y2FzZSBKTXQ6bj1OdW1iZXIoYSk7YnJlYWs7Y2FzZSBRTXQ6c3dpdGNoKGEpe2Nhc2UiZXhwZXJpbWVudCI6bz17a2V5OmVOLkVYUEVSSU1FTlR9O2JyZWFrO2Nhc2UicnVuIjpvPXtrZXk6ZU4uUlVOfX1pZihhLnN0YXJ0c1dpdGgoJE10KSl7Y29uc3QgdD1hLnNsaWNlKCRNdC5sZW5ndGgpO289e2tleTplTi5SRUdFWCxyZWdleFN0cmluZzp0fX19cmV0dXJue21ldHJpY3M6e3Bpbm5lZENhcmRzOmV8fFtdLHNtb290aGluZzpufSxydW5zOntncm91cEJ5Om99fX19O2Z1bmN0aW9uIGV2dCh0KXtsZXQgZTt0cnl7ZT1KU09OLnBhcnNlKHQpfWNhdGNoKHQpe3JldHVybiBudWxsfWlmKCFBcnJheS5pc0FycmF5KGUpKXJldHVybiBudWxsO2NvbnN0IG49W107Zm9yKGNvbnN0IHQgb2YgZSl7Y29uc3QgZT0ic3RyaW5nIj09dHlwZW9mIHQucnVuSWQsaT0ibnVtYmVyIj09dHlwZW9mIHQuc2FtcGxlLGE9InN0cmluZyI9PXR5cGVvZiB0LnRhZyxyPWV8fHZvaWQgMD09PXQucnVuSWQscz1pfHx2b2lkIDA9PT10LnNhbXBsZTtpZighKCJzdHJpbmciPT10eXBlb2YgdC5wbHVnaW4mJmEmJnImJnMpKWNvbnRpbnVlO2lmKChvPXQucGx1Z2luKSE9PXNSLlNDQUxBUlMmJm8hPT1zUi5ISVNUT0dSQU1TJiZvIT09c1IuSU1BR0VTKWNvbnRpbnVlO2lmKCF0LnRhZyljb250aW51ZTtpZihmUih0LnBsdWdpbikpe2lmKCF0LnJ1bklkKWNvbnRpbnVlfWVsc2UgaWYodC5ydW5JZCljb250aW51ZTtpZihpKXtpZighbVIodC5wbHVnaW4pKWNvbnRpbnVlO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKHQuc2FtcGxlKXx8dC5zYW1wbGU8MCljb250aW51ZX1jb25zdCBsPXtwbHVnaW46dC5wbHVnaW4sdGFnOnQudGFnfTtlJiYobC5ydW5JZD10LnJ1bklkKSxpJiYobC5zYW1wbGU9dC5zYW1wbGUpLG4ucHVzaChsKX12YXIgbztyZXR1cm4gbn1mdW5jdGlvbiBudnQoKXtyZXR1cm5be3JvdXRlS2luZDpqUy5FWFBFUklNRU5ULHBhdGg6Ii8iLG5nQ29tcG9uZW50OlhNdCxkZWZhdWx0Um91dGU6ITAsZGVlcExpbmtQcm92aWRlcjpuZXcgdHZ0fV19ZnVuY3Rpb24gb3Z0KHQpe3JldHVybihlLG4pPT57Y29uc3Qgbz10KGUsbik7cmV0dXJuIGNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQobi50eXBlKSxjb25zb2xlLmxvZygicHJldiBzdGF0ZSIsZSksY29uc29sZS5sb2coImFjdGlvbiIsbiksY29uc29sZS5sb2coIm5leHQgc3RhdGUiLG8pLGNvbnNvbGUuZ3JvdXBFbmQoKSxvfX1mdW5jdGlvbiBpdnQoKXtyZXR1cm4gdUMoKT9vdnQ6dD0+KGUsbik9PnQoZSxuKX10dnQ9KGZ1bmN0aW9uIGF2dCh0LGUsbixvKXt2YXIgaSxhPWFyZ3VtZW50cy5sZW5ndGgscj1hPDM/ZTpudWxsPT09bz9vPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSxuKTpvO2lmKCJvYmplY3QiPT10eXBlb2YgUmVmbGVjdCYmImZ1bmN0aW9uIj09dHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUpcj1SZWZsZWN0LmRlY29yYXRlKHQsZSxuLG8pO2Vsc2UgZm9yKHZhciBzPXQubGVuZ3RoLTE7cz49MDtzLS0pKGk9dFtzXSkmJihyPShhPDM/aShyKTphPjM/aShlLG4scik6aShlLG4pKXx8cik7cmV0dXJuIGE+MyYmciYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbixyKSxyfSkoW0ptKCldLHR2dCk7Y29uc3QgcnZ0PW5ldyBOcigiUm9vdCByZWR1Y2VycyB0b2tlbiIse2ZhY3Rvcnk6KCk9Pih7fSl9KTtjbGFzcyBzdnR7fXN2dC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8c3Z0KX0sc3Z0Lsm1bW9kPVpvKHt0eXBlOnN2dH0pLHN2dC7JtWluaj1jbyh7cHJvdmlkZXJzOlt7cHJvdmlkZTpkayx1c2VGYWN0b3J5Oml2dCxtdWx0aTohMH1dLGltcG9ydHM6W1tpUy5mb3JSb290KHJ2dCx7cnVudGltZUNoZWNrczp7c3RyaWN0U3RhdGVJbW11dGFiaWxpdHk6ITAsc3RyaWN0QWN0aW9uSW1tdXRhYmlsaXR5OiEwLHN0cmljdEFjdGlvblNlcmlhbGl6YWJpbGl0eTohMSxzdHJpY3RTdGF0ZVNlcmlhbGl6YWJpbGl0eTohMX19KSxMUy5mb3JSb290KFtdKV1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhzdnQse2ltcG9ydHM6W25TLEhTXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoc3Z0LFt7dHlwZTprXyxhcmdzOlt7aW1wb3J0czpbaVMuZm9yUm9vdChydnQse3J1bnRpbWVDaGVja3M6e3N0cmljdFN0YXRlSW1tdXRhYmlsaXR5OiEwLHN0cmljdEFjdGlvbkltbXV0YWJpbGl0eTohMCxzdHJpY3RBY3Rpb25TZXJpYWxpemFiaWxpdHk6ITEsc3RyaWN0U3RhdGVTZXJpYWxpemFiaWxpdHk6ITF9fSksTFMuZm9yUm9vdChbXSldLHByb3ZpZGVyczpbe3Byb3ZpZGU6ZGssdXNlRmFjdG9yeTppdnQsbXVsdGk6ITB9XX1dfV0sbnVsbCxudWxsKTtjbGFzcyBsdnR7fWx2dC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8bHZ0KX0sbHZ0Lsm1bW9kPVpvKHt0eXBlOmx2dH0pLGx2dC7JtWluaj1jbyh7fSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhsdnQse2RlY2xhcmF0aW9uczpbWk10XSxleHBvcnRzOltaTXRdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihsdnQsW3t0eXBlOmtfLGFyZ3M6W3tkZWNsYXJhdGlvbnM6W1pNdF0sZXhwb3J0czpbWk10XX1dfV0sbnVsbCxudWxsKTtjbGFzcyBjdnR7fWN2dC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8Y3Z0KX0sY3Z0Lsm1bW9kPVpvKHt0eXBlOmN2dH0pLGN2dC7JtWluaj1jbyh7aW1wb3J0czpbW0J2LHFNdCxsdnRdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oY3Z0LHtkZWNsYXJhdGlvbnM6W1hNdF0saW1wb3J0czpbQnYscU10LGx2dF0sZXhwb3J0czpbWE10XX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoY3Z0LFt7dHlwZTprXyxhcmdzOlt7ZGVjbGFyYXRpb25zOltYTXRdLGltcG9ydHM6W0J2LHFNdCxsdnRdLGV4cG9ydHM6W1hNdF0sZW50cnlDb21wb25lbnRzOltYTXRdfV19XSxudWxsLG51bGwpO2NsYXNzIGR2dHt9ZHZ0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxkdnQpfSxkdnQuybVtb2Q9Wm8oe3R5cGU6ZHZ0LGJvb3RzdHJhcDpbS1ldfSksZHZ0Lsm1aW5qPWNvKHtpbXBvcnRzOltbY1QsengsVncsRUQsUVksaEQucmVnaXN0ZXJSb3V0ZXMobnZ0KSxITCx6TCwkWSxjdnQsQ0EscnEsZXEsdXEsS0EsZnEsbnEsVlIsWE4scU10LEZOLHBxLHN2dCxTTXRdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oZHZ0LHtkZWNsYXJhdGlvbnM6W0tZXSxpbXBvcnRzOltjVCx6eCxWdyxFRCxRWSxoRCxITCx6TCwkWSxjdnQsQ0EscnEsZXEsdXEsS0EsZnEsbnEsVlIsWE4scU10LEZOLHBxLHN2dCxTTXRdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihkdnQsW3t0eXBlOmtfLGFyZ3M6W3tkZWNsYXJhdGlvbnM6W0tZXSxpbXBvcnRzOltjVCx6eCxWdyxFRCxRWSxoRC5yZWdpc3RlclJvdXRlcyhudnQpLEhMLHpMLCRZLGN2dCxDQSxycSxlcSx1cSxLQSxmcSxucSxWUixYTixxTXQsRk4scHEsc3Z0LFNNdF0sYm9vdHN0cmFwOltLWV19XX1dLG51bGwsbnVsbCksImxvYWRpbmciIT09ZG9jdW1lbnQucmVhZHlTdGF0ZT9BeCgpLmJvb3RzdHJhcE1vZHVsZShkdnQpOndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIiwoKCk9PntBeCgpLmJvb3RzdHJhcE1vZHVsZShkdnQpfSkpLChmdW5jdGlvbiBwdnQoKXtpZihtQyl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBlbmFibGUgcHJvZCBtb2RlIGFmdGVyIHBsYXRmb3JtIHNldHVwLiIpOyh2b2lkIDA9PT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiYoRW8ubmdEZXZNb2RlPSExKSxwQz0hMX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovKSgpfSkoKTsK", + "ok": true, + "headers": [ + [ + "content-type", + "application/javascript; charset=utf-8" + ] + ], + "status": 200, + "status_text": "" + }, + "https://localhost:6006/icon_bundle.svg": { + "data": "PD94bWwgdmVyc2lvbj0iMS4wIiA/Pjxzdmc+PGRlZnM+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iYXJyb3dfZG93bndhcmRfMjRweCI+PHBhdGggZmlsbD0iIzAxMDEwMSIgZD0iTTIwIDEybC0xLjQxLTEuNDFMMTMgMTYuMTdWNGgtMnYxMi4xN2wtNS41OC01LjU5TDQgMTJsOCA4IDgtOHoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJhcnJvd191cHdhcmRfMjRweCI+PHBhdGggZD0iTTQgMTJsMS40MSAxLjQxTDExIDcuODNWMjBoMlY3LjgzbDUuNTggNS41OUwyMCAxMmwtOC04LTggOHoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJicmlnaHRuZXNzXzZfMjRweCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0yMCAxNS4zMUwyMy4zMSAxMiAyMCA4LjY5VjRoLTQuNjlMMTIgLjY5IDguNjkgNEg0djQuNjlMLjY5IDEyIDQgMTUuMzFWMjBoNC42OUwxMiAyMy4zMSAxNS4zMSAyMEgyMHYtNC42OXpNMTIgMThWNmMzLjMxIDAgNiAyLjY5IDYgNnMtMi42OSA2LTYgNnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJidWdfcmVwb3J0XzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMjAgOGgtMi44MWMtLjQ1LS43OC0xLjA3LTEuNDUtMS44Mi0xLjk2TDE3IDQuNDEgMTUuNTkgM2wtMi4xNyAyLjE3QzEyLjk2IDUuMDYgMTIuNDkgNSAxMiA1Yy0uNDkgMC0uOTYuMDYtMS40MS4xN0w4LjQxIDMgNyA0LjQxbDEuNjIgMS42M0M3Ljg4IDYuNTUgNy4yNiA3LjIyIDYuODEgOEg0djJoMi4wOWMtLjA1LjMzLS4wOS42Ni0uMDkgMXYxSDR2MmgydjFjMCAuMzQuMDQuNjcuMDkgMUg0djJoMi44MWMxLjA0IDEuNzkgMi45NyAzIDUuMTkgM3M0LjE1LTEuMjEgNS4xOS0zSDIwdi0yaC0yLjA5Yy4wNS0uMzMuMDktLjY2LjA5LTF2LTFoMnYtMmgtMnYtMWMwLS4zNC0uMDQtLjY3LS4wOS0xSDIwVjh6bS02IDhoLTR2LTJoNHYyem0wLTRoLTR2LTJoNHYyeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImNhbmNlbF8yNHB4Ij48cGF0aCBkPSJNMTIgMkM2LjQ3IDIgMiA2LjQ3IDIgMTJzNC40NyAxMCAxMCAxMCAxMC00LjQ3IDEwLTEwUzE3LjUzIDIgMTIgMnptNSAxMy41OUwxNS41OSAxNyAxMiAxMy40MSA4LjQxIDE3IDcgMTUuNTkgMTAuNTkgMTIgNyA4LjQxIDguNDEgNyAxMiAxMC41OSAxNS41OSA3IDE3IDguNDEgMTMuNDEgMTIgMTcgMTUuNTl6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iY2hldnJvbl9sZWZ0XzI0cHgiPjxwYXRoIGQ9Ik0xNS40MSA3LjQxTDE0IDZsLTYgNiA2IDYgMS40MS0xLjQxTDEwLjgzIDEyeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImNoZXZyb25fcmlnaHRfMjRweCI+PHBhdGggZD0iTTEwIDZMOC41OSA3LjQxIDEzLjE3IDEybC00LjU4IDQuNTlMMTAgMThsNi02eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImNsZWFyXzI0cHgiPjxwYXRoIGQ9Ik0xOSA2LjQxTDE3LjU5IDUgMTIgMTAuNTkgNi40MSA1IDUgNi40MSAxMC41OSAxMiA1IDE3LjU5IDYuNDEgMTkgMTIgMTMuNDEgMTcuNTkgMTkgMTkgMTcuNTkgMTMuNDEgMTJ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0iY2xvc2VfMjRweCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0xOSA2LjQxTDE3LjU5IDUgMTIgMTAuNTkgNi40MSA1IDUgNi40MSAxMC41OSAxMiA1IDE3LjU5IDYuNDEgMTkgMTIgMTMuNDEgMTcuNTkgMTkgMTkgMTcuNTkgMTMuNDEgMTJ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iY29udGVudF9jb3B5XzI0cHgiPjxwYXRoIGQ9Ik0xNiAxSDRjLTEuMSAwLTIgLjktMiAydjE0aDJWM2gxMlYxem0zIDRIOGMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxMWMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0wIDE2SDhWN2gxMXYxNHoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMjQgMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0iZGFya19tb2RlXzI0cHgiPjxyZWN0IGZpbGw9Im5vbmUiIGhlaWdodD0iMjQiIHdpZHRoPSIyNCIvPjxwYXRoIGQ9Ik0xMiwzYy00Ljk3LDAtOSw0LjAzLTksOXM0LjAzLDksOSw5czktNC4wMyw5LTljMC0wLjQ2LTAuMDQtMC45Mi0wLjEtMS4zNmMtMC45OCwxLjM3LTIuNTgsMi4yNi00LjQsMi4yNiBjLTIuOTgsMC01LjQtMi40Mi01LjQtNS40YzAtMS44MSwwLjg5LTMuNDIsMi4yNi00LjRDMTIuOTIsMy4wNCwxMi40NiwzLDEyLDNMMTIsM3oiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJkb25lXzI0cHgiPjxwYXRoIGQ9Ik05IDE2LjJMNC44IDEybC0xLjQgMS40TDkgMTkgMjEgN2wtMS40LTEuNEw5IDE2LjJ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0iZWRpdF8yNHB4Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTMgMTcuMjVWMjFoMy43NUwxNy44MSA5Ljk0bC0zLjc1LTMuNzVMMyAxNy4yNXpNMjAuNzEgNy4wNGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC0yLjM0LTIuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0xLjgzIDEuODMgMy43NSAzLjc1IDEuODMtMS44M3oiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJlcnJvcl8yNHB4Ij48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMSAxNWgtMnYtMmgydjJ6bTAtNGgtMlY3aDJ2NnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJleHBhbmRfbGVzc18yNHB4Ij48cGF0aCBkPSJNMTIgOGwtNiA2IDEuNDEgMS40MUwxMiAxMC44M2w0LjU5IDQuNThMMTggMTR6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iZXhwYW5kX21vcmVfMjRweCI+PHBhdGggZD0iTTE2LjU5IDguNTlMMTIgMTMuMTcgNy40MSA4LjU5IDYgMTBsNiA2IDYtNnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMjQgMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0iZmlsdGVyX2FsdF8yNHB4Ij48Zz48cGF0aCBkPSJNMCwwaDI0IE0yNCwyNEgwIiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTQuMjUsNS42MUM2LjI3LDguMiwxMCwxMywxMCwxM3Y2YzAsMC41NSwwLjQ1LDEsMSwxaDJjMC41NSwwLDEtMC40NSwxLTF2LTZjMCwwLDMuNzItNC44LDUuNzQtNy4zOSBDMjAuMjUsNC45NSwxOS43OCw0LDE4Ljk1LDRINS4wNEM0LjIxLDQsMy43NCw0Ljk1LDQuMjUsNS42MXoiLz48cGF0aCBkPSJNMCwwaDI0djI0SDBWMHoiIGZpbGw9Im5vbmUiLz48L2c+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iZmxhZ18yNHB4Ij48cGF0aCBkPSJNMTQuNCA2TDE0IDRINXYxN2gydi03aDUuNmwuNCAyaDdWNnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJmdWxsc2NyZWVuXzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNNyAxNEg1djVoNXYtMkg3di0zem0tMi00aDJWN2gzVjVINXY1em0xMiA3aC0zdjJoNXYtNWgtMnYzek0xNCA1djJoM3YzaDJWNWgtNXoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJmdWxsc2NyZWVuX2V4aXRfMjRweCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik01IDE2aDN2M2gydi01SDV2MnptMy04SDV2Mmg1VjVIOHYzem02IDExaDJ2LTNoM3YtMmgtNXY1em0yLTExVjVoLTJ2NWg1VjhoLTN6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iZ2V0X2FwcF8yNHB4Ij48cGF0aCBkPSJNMTkgOWgtNFYzSDl2Nkg1bDcgNyA3LTd6TTUgMTh2MmgxNHYtMkg1eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9Imdyb3VwX3dvcmtfMjRweCI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6TTggMTcuNWMtMS4zOCAwLTIuNS0xLjEyLTIuNS0yLjVzMS4xMi0yLjUgMi41LTIuNSAyLjUgMS4xMiAyLjUgMi41LTEuMTIgMi41LTIuNSAyLjV6TTkuNSA4YzAtMS4zOCAxLjEyLTIuNSAyLjUtMi41czIuNSAxLjEyIDIuNSAyLjUtMS4xMiAyLjUtMi41IDIuNVM5LjUgOS4zOCA5LjUgOHptNi41IDkuNWMtMS4zOCAwLTIuNS0xLjEyLTIuNS0yLjVzMS4xMi0yLjUgMi41LTIuNSAyLjUgMS4xMiAyLjUgMi41LTEuMTIgMi41LTIuNSAyLjV6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iaGVscF9vdXRsaW5lXzI0cHgiPjxwYXRoIGQ9Ik0xMSAxOGgydi0yaC0ydjJ6bTEtMTZDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4em0wLTE0Yy0yLjIxIDAtNCAxLjc5LTQgNGgyYzAtMS4xLjktMiAyLTJzMiAuOSAyIDJjMCAyLTMgMS43NS0zIDVoMmMwLTIuMjUgMy0yLjUgMy01IDAtMi4yMS0xLjc5LTQtNC00eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9ImltYWdlX3NlYXJjaF8yNHB4Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTAgMGgyNHYyNEgwVjB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTE4IDEzdjdINFY2aDUuMDJjLjA1LS43MS4yMi0xLjM4LjQ4LTJINGMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMnYtNWwtMi0yem0tMS41IDVoLTExbDIuNzUtMy41MyAxLjk2IDIuMzYgMi43NS0zLjU0em0yLjgtOS4xMWMuNDQtLjcuNy0xLjUxLjctMi4zOUMyMCA0LjAxIDE3Ljk5IDIgMTUuNSAyUzExIDQuMDEgMTEgNi41czIuMDEgNC41IDQuNDkgNC41Yy44OCAwIDEuNy0uMjYgMi4zOS0uN0wyMSAxMy40MiAyMi40MiAxMiAxOS4zIDguODl6TTE1LjUgOUMxNC4xMiA5IDEzIDcuODggMTMgNi41UzE0LjEyIDQgMTUuNSA0IDE4IDUuMTIgMTggNi41IDE2Ljg4IDkgMTUuNSA5eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImluZm9fb3V0bGluZV8yNHB4Ij48cGF0aCBkPSJNMTEgMTdoMnYtNmgtMnY2em0xLTE1QzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHpNMTEgOWgyVjdoLTJ2MnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMjQgMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0ia2VlcF8yNHB4Ij48Zz48cmVjdCBmaWxsPSJub25lIiBoZWlnaHQ9IjI0IiB3aWR0aD0iMjQiLz48L2c+PGc+PHBhdGggZD0iTTE2LDlWNGwxLDBjMC41NSwwLDEtMC40NSwxLTF2MGMwLTAuNTUtMC40NS0xLTEtMUg3QzYuNDUsMiw2LDIuNDUsNiwzdjAgYzAsMC41NSwwLjQ1LDEsMSwxbDEsMHY1YzAsMS42Ni0xLjM0LDMtMywzaDB2Mmg1Ljk3djdsMSwxbDEtMXYtN0gxOXYtMmgwQzE3LjM0LDEyLDE2LDEwLjY2LDE2LDl6IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48L2c+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDI0IDI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9ImtlZXBfb3V0bGluZV8yNHB4Ij48Zz48cmVjdCBmaWxsPSJub25lIiBoZWlnaHQ9IjI0IiB3aWR0aD0iMjQiLz48L2c+PGc+PHBhdGggZD0iTTE0LDR2NWMwLDEuMTIsMC4zNywyLjE2LDEsM0g5YzAuNjUtMC44NiwxLTEuOSwxLTNWNEgxNCBNMTcsMkg3QzYuNDUsMiw2LDIuNDUsNiwzYzAsMC41NSwwLjQ1LDEsMSwxYzAsMCwwLDAsMCwwbDEsMHY1IGMwLDEuNjYtMS4zNCwzLTMsM3YyaDUuOTd2N2wxLDFsMS0xdi03SDE5di0yYzAsMCwwLDAsMCwwYy0xLjY2LDAtMy0xLjM0LTMtM1Y0bDEsMGMwLDAsMCwwLDAsMGMwLjU1LDAsMS0wLjQ1LDEtMSBDMTgsMi40NSwxNy41NSwyLDE3LDJMMTcsMnoiLz48L2c+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDI0IDI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9ImxpZ2h0X21vZGVfMjRweCI+PHJlY3QgZmlsbD0ibm9uZSIgaGVpZ2h0PSIyNCIgd2lkdGg9IjI0Ii8+PHBhdGggZD0iTTEyLDdjLTIuNzYsMC01LDIuMjQtNSw1czIuMjQsNSw1LDVzNS0yLjI0LDUtNVMxNC43Niw3LDEyLDdMMTIsN3ogTTIsMTNsMiwwYzAuNTUsMCwxLTAuNDUsMS0xcy0wLjQ1LTEtMS0xbC0yLDAgYy0wLjU1LDAtMSwwLjQ1LTEsMVMxLjQ1LDEzLDIsMTN6IE0yMCwxM2wyLDBjMC41NSwwLDEtMC40NSwxLTFzLTAuNDUtMS0xLTFsLTIsMGMtMC41NSwwLTEsMC40NS0xLDFTMTkuNDUsMTMsMjAsMTN6IE0xMSwydjIgYzAsMC41NSwwLjQ1LDEsMSwxczEtMC40NSwxLTFWMmMwLTAuNTUtMC40NS0xLTEtMVMxMSwxLjQ1LDExLDJ6IE0xMSwyMHYyYzAsMC41NSwwLjQ1LDEsMSwxczEtMC40NSwxLTF2LTJjMC0wLjU1LTAuNDUtMS0xLTEgQzExLjQ1LDE5LDExLDE5LjQ1LDExLDIweiBNNS45OSw0LjU4Yy0wLjM5LTAuMzktMS4wMy0wLjM5LTEuNDEsMGMtMC4zOSwwLjM5LTAuMzksMS4wMywwLDEuNDFsMS4wNiwxLjA2IGMwLjM5LDAuMzksMS4wMywwLjM5LDEuNDEsMHMwLjM5LTEuMDMsMC0xLjQxTDUuOTksNC41OHogTTE4LjM2LDE2Ljk1Yy0wLjM5LTAuMzktMS4wMy0wLjM5LTEuNDEsMGMtMC4zOSwwLjM5LTAuMzksMS4wMywwLDEuNDEgbDEuMDYsMS4wNmMwLjM5LDAuMzksMS4wMywwLjM5LDEuNDEsMGMwLjM5LTAuMzksMC4zOS0xLjAzLDAtMS40MUwxOC4zNiwxNi45NXogTTE5LjQyLDUuOTljMC4zOS0wLjM5LDAuMzktMS4wMywwLTEuNDEgYy0wLjM5LTAuMzktMS4wMy0wLjM5LTEuNDEsMGwtMS4wNiwxLjA2Yy0wLjM5LDAuMzktMC4zOSwxLjAzLDAsMS40MXMxLjAzLDAuMzksMS40MSwwTDE5LjQyLDUuOTl6IE03LjA1LDE4LjM2IGMwLjM5LTAuMzksMC4zOS0xLjAzLDAtMS40MWMtMC4zOS0wLjM5LTEuMDMtMC4zOS0xLjQxLDBsLTEuMDYsMS4wNmMtMC4zOSwwLjM5LTAuMzksMS4wMywwLDEuNDFzMS4wMywwLjM5LDEuNDEsMEw3LjA1LDE4LjM2eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAyNCAyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJsaW5lX3dlaWdodF8yNHB4Ij48Zz48cmVjdCBmaWxsPSJub25lIiBoZWlnaHQ9IjI0IiB3aWR0aD0iMjQiIHg9IjAiLz48L2c+PGc+PGc+PGc+PHBhdGggZD0iTTMsMTdoMTh2LTJIM1YxN3ogTTMsMjBoMTh2LTFIM1YyMHogTTMsMTNoMTh2LTNIM1YxM3ogTTMsNHY0aDE4VjRIM3oiLz48L2c+PC9nPjwvZz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJtb3JlX3ZlcnRfMjRweCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0xMiA4YzEuMSAwIDItLjkgMi0ycy0uOS0yLTItMi0yIC45LTIgMiAuOSAyIDIgMnptMCAyYy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnptMCA2Yy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJub3RpZmljYXRpb25zX25vbmVfMjRweCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0xMiAyMmMxLjEgMCAyLS45IDItMmgtNGMwIDEuMS45IDIgMiAyem02LTZ2LTVjMC0zLjA3LTEuNjMtNS42NC00LjUtNi4zMlY0YzAtLjgzLS42Ny0xLjUtMS41LTEuNXMtMS41LjY3LTEuNSAxLjV2LjY4QzcuNjQgNS4zNiA2IDcuOTIgNiAxMXY1bC0yIDJ2MWgxNnYtMWwtMi0yem0tMiAxSDh2LTZjMC0yLjQ4IDEuNTEtNC41IDQtNC41czQgMi4wMiA0IDQuNXY2eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9InBhbGV0dGVfMjRweCI+PHBhdGggZD0iTTEyIDNjLTQuOTcgMC05IDQuMDMtOSA5czQuMDMgOSA5IDljLjgzIDAgMS41LS42NyAxLjUtMS41IDAtLjM5LS4xNS0uNzQtLjM5LTEuMDEtLjIzLS4yNi0uMzgtLjYxLS4zOC0uOTkgMC0uODMuNjctMS41IDEuNS0xLjVIMTZjMi43NiAwIDUtMi4yNCA1LTUgMC00LjQyLTQuMDMtOC05LTh6bS01LjUgOWMtLjgzIDAtMS41LS42Ny0xLjUtMS41UzUuNjcgOSA2LjUgOSA4IDkuNjcgOCAxMC41IDcuMzMgMTIgNi41IDEyem0zLTRDOC42NyA4IDggNy4zMyA4IDYuNVM4LjY3IDUgOS41IDVzMS41LjY3IDEuNSAxLjVTMTAuMzMgOCA5LjUgOHptNSAwYy0uODMgMC0xLjUtLjY3LTEuNS0xLjVTMTMuNjcgNSAxNC41IDVzMS41LjY3IDEuNSAxLjVTMTUuMzMgOCAxNC41IDh6bTMgNGMtLjgzIDAtMS41LS42Ny0xLjUtMS41UzE2LjY3IDkgMTcuNSA5czEuNS42NyAxLjUgMS41LS42NyAxLjUtMS41IDEuNXoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJyZWZyZXNoXzI0cHgiPjxwYXRoIGQ9Ik0xNy42NSA2LjM1QzE2LjIgNC45IDE0LjIxIDQgMTIgNGMtNC40MiAwLTcuOTkgMy41OC03Ljk5IDhzMy41NyA4IDcuOTkgOGMzLjczIDAgNi44NC0yLjU1IDcuNzMtNmgtMi4wOGMtLjgyIDIuMzMtMy4wNCA0LTUuNjUgNC0zLjMxIDAtNi0yLjY5LTYtNnMyLjY5LTYgNi02YzEuNjYgMCAzLjE0LjY5IDQuMjIgMS43OEwxMyAxMWg3VjRsLTIuMzUgMi4zNXoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJzZWFyY2hfMjRweCI+PHBhdGggZD0iTTE1LjUgMTRoLS43OWwtLjI4LS4yN0MxNS40MSAxMi41OSAxNiAxMS4xMSAxNiA5LjUgMTYgNS45MSAxMy4wOSAzIDkuNSAzUzMgNS45MSAzIDkuNSA1LjkxIDE2IDkuNSAxNmMxLjYxIDAgMy4wOS0uNTkgNC4yMy0xLjU3bC4yNy4yOHYuNzlsNSA0Ljk5TDIwLjQ5IDE5bC00Ljk5LTV6bS02IDBDNy4wMSAxNCA1IDExLjk5IDUgOS41UzcuMDEgNSA5LjUgNSAxNCA3LjAxIDE0IDkuNSAxMS45OSAxNCA5LjUgMTR6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0ic2V0dGluZ3NfMjRweCI+PHBhdGggZD0iTTE5LjQzIDEyLjk4Yy4wNC0uMzIuMDctLjY0LjA3LS45OHMtLjAzLS42Ni0uMDctLjk4bDIuMTEtMS42NWMuMTktLjE1LjI0LS40Mi4xMi0uNjRsLTItMy40NmMtLjEyLS4yMi0uMzktLjMtLjYxLS4yMmwtMi40OSAxYy0uNTItLjQtMS4wOC0uNzMtMS42OS0uOThsLS4zOC0yLjY1QzE0LjQ2IDIuMTggMTQuMjUgMiAxNCAyaC00Yy0uMjUgMC0uNDYuMTgtLjQ5LjQybC0uMzggMi42NWMtLjYxLjI1LTEuMTcuNTktMS42OS45OGwtMi40OS0xYy0uMjMtLjA5LS40OSAwLS42MS4yMmwtMiAzLjQ2Yy0uMTMuMjItLjA3LjQ5LjEyLjY0bDIuMTEgMS42NWMtLjA0LjMyLS4wNy42NS0uMDcuOThzLjAzLjY2LjA3Ljk4bC0yLjExIDEuNjVjLS4xOS4xNS0uMjQuNDItLjEyLjY0bDIgMy40NmMuMTIuMjIuMzkuMy42MS4yMmwyLjQ5LTFjLjUyLjQgMS4wOC43MyAxLjY5Ljk4bC4zOCAyLjY1Yy4wMy4yNC4yNC40Mi40OS40Mmg0Yy4yNSAwIC40Ni0uMTguNDktLjQybC4zOC0yLjY1Yy42MS0uMjUgMS4xNy0uNTkgMS42OS0uOThsMi40OSAxYy4yMy4wOS40OSAwIC42MS0uMjJsMi0zLjQ2Yy4xMi0uMjIuMDctLjQ5LS4xMi0uNjRsLTIuMTEtMS42NXpNMTIgMTUuNWMtMS45MyAwLTMuNS0xLjU3LTMuNS0zLjVzMS41Ny0zLjUgMy41LTMuNSAzLjUgMS41NyAzLjUgMy41LTEuNTcgMy41LTMuNSAzLjV6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0ic2V0dGluZ3NfYmFja3VwX3Jlc3RvcmVfMjRweCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0xNCAxMmMwLTEuMS0uOS0yLTItMnMtMiAuOS0yIDIgLjkgMiAyIDIgMi0uOSAyLTJ6bS0yLTljLTQuOTcgMC05IDQuMDMtOSA5SDBsNCA0IDQtNEg1YzAtMy44NyAzLjEzLTcgNy03czcgMy4xMyA3IDctMy4xMyA3LTcgN2MtMS41MSAwLTIuOTEtLjQ5LTQuMDYtMS4zbC0xLjQyIDEuNDRDOC4wNCAyMC4zIDkuOTQgMjEgMTIgMjFjNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0ic2V0dGluZ3Nfb3ZlcnNjYW5fMjRweCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0xMi4wMSA1LjVMMTAgOGg0bC0xLjk5LTIuNXpNMTggMTB2NGwyLjUtMS45OUwxOCAxMHpNNiAxMGwtMi41IDIuMDFMNiAxNHYtNHptOCA2aC00bDIuMDEgMi41TDE0IDE2em03LTEzSDNjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxNi4wMUgzVjQuOTloMTh2MTQuMDJ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0idmlzaWJpbGl0eV9vZmZfMjRweCI+PHBhdGggZD0iTTEyIDdjMi43NiAwIDUgMi4yNCA1IDUgMCAuNjUtLjEzIDEuMjYtLjM2IDEuODNsMi45MiAyLjkyYzEuNTEtMS4yNiAyLjctMi44OSAzLjQzLTQuNzUtMS43My00LjM5LTYtNy41LTExLTcuNS0xLjQgMC0yLjc0LjI1LTMuOTguN2wyLjE2IDIuMTZDMTAuNzQgNy4xMyAxMS4zNSA3IDEyIDd6TTIgNC4yN2wyLjI4IDIuMjguNDYuNDZDMy4wOCA4LjMgMS43OCAxMC4wMiAxIDEyYzEuNzMgNC4zOSA2IDcuNSAxMSA3LjUgMS41NSAwIDMuMDMtLjMgNC4zOC0uODRsLjQyLjQyTDE5LjczIDIyIDIxIDIwLjczIDMuMjcgMyAyIDQuMjd6TTcuNTMgOS44bDEuNTUgMS41NWMtLjA1LjIxLS4wOC40My0uMDguNjUgMCAxLjY2IDEuMzQgMyAzIDMgLjIyIDAgLjQ0LS4wMy42NS0uMDhsMS41NSAxLjU1Yy0uNjcuMzMtMS40MS41My0yLjIuNTMtMi43NiAwLTUtMi4yNC01LTUgMC0uNzkuMi0xLjUzLjUzLTIuMnptNC4zMS0uNzhsMy4xNSAzLjE1LjAyLS4xNmMwLTEuNjYtMS4zNC0zLTMtM2wtLjE3LjAxeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9Indhcm5pbmdfMjRweCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0xIDIxaDIyTDEyIDIgMSAyMXptMTItM2gtMnYtMmgydjJ6bTAtNGgtMnYtNGgydjR6Ii8+PC9zdmc+PC9kZWZzPjwvc3ZnPgo=", + "ok": true, + "headers": [ + [ + "content-type", + "image/svg+xml; charset=utf-8" + ] + ], + "status": 200, + "status_text": "" + }, + "https://localhost:6006/data/environment": { + "data": "eyJ2ZXJzaW9uIjogIjIuNi4wIiwgImRhdGFfbG9jYXRpb24iOiAiLi9teV9sb2dzIiwgIndpbmRvd190aXRsZSI6ICIiLCAiZXhwZXJpbWVudF9uYW1lIjogIiIsICJleHBlcmltZW50X2Rlc2NyaXB0aW9uIjogIiIsICJjcmVhdGlvbl90aW1lIjogMC4wLCAiZGVidWciOiB7ImRhdGFfcHJvdmlkZXIiOiAiR3JwY0RhdGFQcm92aWRlcihhZGRyPSdsb2NhbGhvc3Q6NDE5OTUnKSIsICJmbGFncyI6IHsibG9nZGlyIjogIi4vbXlfbG9ncyIsICJsb2dkaXJfc3BlYyI6ICIiLCAiaG9zdCI6IG51bGwsICJiaW5kX2FsbCI6IGZhbHNlLCAicG9ydCI6IDYwMDYsICJyZXVzZV9wb3J0IjogZmFsc2UsICJsb2FkX2Zhc3QiOiAiYXV0byIsICJleHRyYV9kYXRhX3NlcnZlcl9mbGFncyI6ICIiLCAiZ3JwY19jcmVkc190eXBlIjogImxvY2FsIiwgImdycGNfZGF0YV9wcm92aWRlciI6ICIiLCAicHVyZ2Vfb3JwaGFuZWRfZGF0YSI6IHRydWUsICJkYiI6ICIiLCAiZGJfaW1wb3J0IjogZmFsc2UsICJpbnNwZWN0IjogZmFsc2UsICJ2ZXJzaW9uX3RiIjogZmFsc2UsICJ0YWciOiAiIiwgImV2ZW50X2ZpbGUiOiAiIiwgInBhdGhfcHJlZml4IjogIiIsICJ3aW5kb3dfdGl0bGUiOiAiIiwgIm1heF9yZWxvYWRfdGhyZWFkcyI6IDEsICJyZWxvYWRfaW50ZXJ2YWwiOiA1LjAsICJyZWxvYWRfdGFzayI6ICJhdXRvIiwgInJlbG9hZF9tdWx0aWZpbGUiOiBudWxsLCAicmVsb2FkX211bHRpZmlsZV9pbmFjdGl2ZV9zZWNzIjogODY0MDAsICJnZW5lcmljX2RhdGEiOiAiYXV0byIsICJzYW1wbGVzX3Blcl9wbHVnaW4iOiB7fSwgImN1c3RvbV9wcmVkaWN0X2ZuIjogIiIsICJ3aXRfZGF0YV9kaXIiOiAiIiwgIl9fdGVuc29yYm9hcmRfc3ViY29tbWFuZCI6ICJzZXJ2ZSJ9fX0=", + "ok": true, + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "status": 200, + "status_text": "" + }, + "https://localhost:6006/data/runs": { + "data": "WyJydW5fMjAyMV8wOF8yMi0yMl81Ml8xOS90cmFpbiIsICJydW5fMjAyMV8wOF8yMi0yMl81Ml8xOS92YWxpZGF0aW9uIiwgInJ1bl8yMDIxXzA4XzIyLTIyXzUzXzA0L3RyYWluIiwgInJ1bl8yMDIxXzA4XzIyLTIyXzUzXzA0L3ZhbGlkYXRpb24iXQ==", + "ok": true, + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "status": 200, + "status_text": "" + }, + "https://localhost:6006/data/plugins_listing": { + "data": "eyJzY2FsYXJzIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IHRydWUsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJzY2FsYXJzIiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIkNVU1RPTV9FTEVNRU5UIiwgImVsZW1lbnRfbmFtZSI6ICJ0Zi1zY2FsYXItZGFzaGJvYXJkIn19LCAiY3VzdG9tX3NjYWxhcnMiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJDdXN0b20gU2NhbGFycyIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJDVVNUT01fRUxFTUVOVCIsICJlbGVtZW50X25hbWUiOiAidGYtY3VzdG9tLXNjYWxhci1kYXNoYm9hcmQifX0sICJpbWFnZXMiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJpbWFnZXMiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLWltYWdlLWRhc2hib2FyZCJ9fSwgImF1ZGlvIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IGZhbHNlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAiYXVkaW8iLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLWF1ZGlvLWRhc2hib2FyZCJ9fSwgImRlYnVnZ2VyLXYyIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IGZhbHNlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAiRGVidWdnZXIgVjIiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiTkdfQ09NUE9ORU5UIn19LCAiZ3JhcGhzIjogeyJkaXNhYmxlX3JlbG9hZCI6IHRydWUsICJlbmFibGVkIjogdHJ1ZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogImdyYXBocyIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJDVVNUT01fRUxFTUVOVCIsICJlbGVtZW50X25hbWUiOiAidGYtZ3JhcGgtZGFzaGJvYXJkIn19LCAiZGlzdHJpYnV0aW9ucyI6IHsiZGlzYWJsZV9yZWxvYWQiOiBmYWxzZSwgImVuYWJsZWQiOiBmYWxzZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogImRpc3RyaWJ1dGlvbnMiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLWRpc3RyaWJ1dGlvbi1kYXNoYm9hcmQifX0sICJoaXN0b2dyYW1zIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IGZhbHNlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAiaGlzdG9ncmFtcyIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJDVVNUT01fRUxFTUVOVCIsICJlbGVtZW50X25hbWUiOiAidGYtaGlzdG9ncmFtLWRhc2hib2FyZCJ9fSwgInRleHQiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJ0ZXh0IiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIkNVU1RPTV9FTEVNRU5UIiwgImVsZW1lbnRfbmFtZSI6ICJ0Zi10ZXh0LWRhc2hib2FyZCJ9fSwgInByX2N1cnZlcyI6IHsiZGlzYWJsZV9yZWxvYWQiOiBmYWxzZSwgImVuYWJsZWQiOiBmYWxzZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogIlBSIEN1cnZlcyIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJDVVNUT01fRUxFTUVOVCIsICJlbGVtZW50X25hbWUiOiAidGYtcHItY3VydmUtZGFzaGJvYXJkIn19LCAicHJvZmlsZV9yZWRpcmVjdCI6IHsiZGlzYWJsZV9yZWxvYWQiOiBmYWxzZSwgImVuYWJsZWQiOiBmYWxzZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogIlByb2ZpbGUiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLXByb2ZpbGUtcmVkaXJlY3QtZGFzaGJvYXJkIn19LCAiaHBhcmFtcyI6IHsiZGlzYWJsZV9yZWxvYWQiOiBmYWxzZSwgImVuYWJsZWQiOiBmYWxzZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogImhwYXJhbXMiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLWhwYXJhbXMtZGFzaGJvYXJkIn19LCAibWVzaCI6IHsiZGlzYWJsZV9yZWxvYWQiOiBmYWxzZSwgImVuYWJsZWQiOiBmYWxzZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogIm1lc2giLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogIm1lc2gtZGFzaGJvYXJkIn19LCAidGltZXNlcmllcyI6IHsiZGlzYWJsZV9yZWxvYWQiOiBmYWxzZSwgImVuYWJsZWQiOiB0cnVlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAiVGltZSBTZXJpZXMiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiTkdfQ09NUE9ORU5UIn19LCAicHJvamVjdG9yIjogeyJkaXNhYmxlX3JlbG9hZCI6IHRydWUsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJwcm9qZWN0b3IiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiSUZSQU1FIiwgIm1vZHVsZV9wYXRoIjogIi9kYXRhL3BsdWdpbi9wcm9qZWN0b3IvaW5kZXguanMifX0sICJ3aGF0aWYiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJXaGF0LUlmIFRvb2wiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiSUZSQU1FIiwgIm1vZHVsZV9wYXRoIjogIi9kYXRhL3BsdWdpbi93aGF0aWYvaW5kZXguanMifX19", + "ok": true, + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "status": 200, + "status_text": "" + }, + "https://localhost:6006/font-roboto/RxZJdnzeo3R5zSexge8UUZBw1xU1rKptJj_0jans920.woff2": { + "data": "d09GMgABAAAAACokAA4AAAAAUkQAACnNAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGmQbmXocg0oGYACGTBEMCu1A1wwLg14AATYCJAOHNgQgBYMAByAbO0QF3Bhn2DiAgX12b1EEGwcBhTGLomxQFmT/lwnmGE77wayn0NBAJAPXITeLlQAVKYYKjM1mpr7CgS0HNgpkY1bqRLvLsXy3dA8XPXqvM/yN+w2v2FOlAb85QmOf5P7Az633/wJaSkUwMImTqgk4GDAic6S4MSrGqFakDCocigoYRBqEHnCIYBIGGExRT1Qeqv3690x3z90AwCasSP6ngswqFUVYHrB8VBQAKcYder52r1wzByMHJRZ//0+nNV9g+H/GsveOK0AqSpwZGZI47CReYMFvJOfQ2hTNUVES1lvdXXeyFKh29/XX4ACRY/9vTgMuqbMdO2B5UFAD4VG4vRkzpRE/HAS4Jss5uTZKgIn5b///mp923r+ZD/x22f0pcYRbsj0ne84XpsZN7mQyee9lwgszWcwvZJLFD4WkECjkFyHriuAA87NMWVUCV9VTC6S6tsdX+ApZK4nU+gqn6ipcefja71ffCTv/vpktBbH4Q8OmUzIhiS6SSKLxDYn4I3iKlCraxSKRmLCxMhnQLaUZLPeL70z9PLvdGe4aJpgghNJhdNDfIYfbP4Zrr4IRvQYW1AHHsRm/MoBA8QMAALCA4nacDoQBD4hYsRCpUiHSpUMwMSGyZUPkyoe4rB6qxyYEAgXAC0AAAgCBiIUA4KZAB3a3PfY7jNipySXnETvz4unnEjtv7bILiMECgG+hS5x7+iUX4AR8gRVUUNx1liijpQ3akVwcN9akGiFf5sfC53+NGKbR5WqKVWK9kAti+AS1eOOOyCvDaIwf8afMcFGbPJk65ZRuuRKVi5n34MXC5+eY8DF3ego/YaXaA/kGJCdNqR9aLDwevIQdJ0mKNBnyFChToUqNBoJTtOk4zZgJM5as2bDlwIkLV+48lSpzznk9evW57Y677uk3YNCQYfc98NAjk55Y9MySZa+9sWLVmnUbNiE0xggsAhGnnKBtjyf2QAgPTgoEFh8Jtbt2fBCTGwppEGEglZ5H9iEjajJmypb9zQ7WcvY+F29zpybfh8pFRalEVy+iPrfdcde9rn89b9acef9Z6HrqQ4ueWbLsjRWr1qx3vfW+d9770LXhbZuHCFeD868+CuUUv9RhOBpeRLDSKRtpW+4JClYxVTYdM1P8F5yw4yEH/bl6XJhQCcKlImFqL9vlsPiIpJtgDl7nnTDswuvDCv+DO1fDk/MxTTZl2ozHg0XCE4hnXuaoUGRvMwJjpuxnZEv+3pQmUBk753x56pZFeGbJ8s2IMhXxINvIiBgzZS/fU4ueWbJ8N5ZJIjmllGuC4g0HW6/PDdHeZGVFrFqzPhRHACMh5SpUzmRow4YNGzamMFQ4soqMGDNtbEWyl05HornGI/8uT9miZ5Ysd70RacWqNeumCoS86xhHXc3Jp1y9CINvDOn62prjoEx81Jz3IVIDWX7co1E3yT++FWYmuuNgIacdlV09TGcJJhPrX4ppsGwDXfCvkmLgAFmk6LCYxAftHyxYL1O0P9FCx9PR3lipv92N96FztJm7THzvXYCZF1CGmPHV7zjxlE+yUMyjYlkzeXrN1+XDXy7mZ4SaH3nFQ7Ww4uDmIe7T/PFaC3qFyJcS82v/iTr6GwvR3ze+XD27dfVbnYZQeRFxzohzSVz399nlr3kVWPXOwUJ5dHBrvN8bC/o9RRmDNlxKMCFjXvucAiWWoH0uC9Id0GRlZgrJ2SxOo/NX1BHQbaQBUf96uxZTd36ybZDQD2eu0GhiDfZmfDlc0VzFOlV8wKy9uuc9zoT+etNtsqFheWuKpVn11wnNyFUttlZgbJzVYnwrmDBpqX3O62J0xc3aVeaABaXbnkaGt5Tna0TncyyvCyiVfDTfNg2Tskx1qffMM0NtN69smvOiem3QnIGRMuk1rbqfMN9WYlYX54kVN9Zr843PpJvb6ivMNl+RmEB/BdWcgMMDITBSlFAjGMdJwzpJBRcNOoQYINvHmOh+Zu4HWLNzkAM9wsX9KDcejslxl1SqgpTK+nJ6LJP32jr7AVDWFUr1sbAX9oI4EVeZok7QfSSpICmKkKY4cpSbPOWhQPdQpggVKkKD8tGk3AhUzCkqSosK0Ka8dOguBhTPkHIg8915deAkWMcGli0ohh3l4ECFuVAublSIO+XiQfnlCI7BobVXOYT4INHaqwJUXCUV1+OO6HUPqn/XBA0YhnPfJMSUx7g9IXde/1qA99R9t0XLOL0eivXGOox6LVwgCIKWCEHQPYSoiOMCDwv1DyhKju6lTFGqFKXO+RXrwA1csBuEYRfwgABq5RhDmLJAVAIMYC0Me1CEI+XlzHGKeeAEnBafdFBUHkXlD0UUK7FHQxAEERAEEUvELYg9ALxA1QMUuICHcCSXIboBRsXRb32AMzlHPf3L87pFpik149XgSKLrYiABJiQbu7XX0EZ3qpa5pRm10HWgNpbmvXY2psKEBVBRiYumxxD0yfF+4RFhcOKf8uTBydDgQG9QA2iNNAqnhUWBFCuRLAAGylcAEIhW6rsQekPBdeKnxE2kSncIhFMQTwLtqlUHw4S5y9CmoHva/VBPrVxRoSAQJgJKgoic9kRheIYBERIBcwcACx1JTRqgQScM5u6itHBr0qhBsxat2rTrgDEjYrt2VZyzqFi6XHNdtxtQ2CIOaKHU/e2ri+Ee7MoA2fSUxbwhIBp/6EsBkrpI3jbygQfuiQiOrDHBHxAwqwyQgDwGALBLnUWCBAxYjpb9+Roy/wk3QM6CbfsB0CABSxQAnySXXv93+42ZtuaTv23HZhtjsRhL87XmG8w3mW8+33q+NN/tvsvue+KI0PgLi4TLN3UaMG7Gus+UbHrWnK8332j4spfb2B4r9owh3GMQ/P1r9sv3jkH4J/6/8X/35zeIF4eOyoczmc/Yz+9yx8tGBoAK8xg3HB/3Xk/VY2LM+/9p0k2ZNuOxJxgy/GvWnHn/WcCUORZ+dZZsb73z3gcbcmziBQDI4H0igCRkjW8HQ0ISbLrkpsva+aYOt3TqF2HAqN40JtW4af1pRo/H5k34z4I0Ty2b8twLDC+t+jetYVr3ydP0WaYvtr323Q9ZfvrtbfojJ/2tNjOyY0BujRxSHRqQl9GXAgoy+mFAYUY/DiiqJdZsXwtAMZBYr30DAKVAYqNqk4BzWWLzgAtZYuuAylpiWbUUUJUldguoyRKXBdRmiScCLuYjazwIlyBQnNDxd6jn4zYgH2sRfLeGyBuBeX8dvQgt3Aq6mTwCBwO5ip6gBxjoGBZbM34NE52ChI4XgbqSgsMohHqFmIhSL8HR1+qELePMETQQxH8ATAWSCRJ80KkVSFyshn4rVqc4xO4K9/sBbZUfGmjTrPCOlAJr8aYOsysMEbR4GDZjo5nqxAmguf2d+5ll4+q6dZTUZq1hMoksN66UXJTBBGyt+DrbhMcLq9Bk+7CpxVTXjuuYlC46w3z6kfH9bpWmwC9ElhFLbSMmAlXH7IyhWaYUCy19n4kkfj+MNwH1CXMxzHzrLGoTEVEJIpwww/SO24xCz4blyGgkPPISNVwJHMS8s9eaLgV7MO1MMFVxzgWKDObEffRpbR65hHZghKBm46hPHQIbxBUaIedU2SrMOQQSCxSYE85BZDigzEa1QKgIKEMqmHOWKIr7/orgvAATAUj2mnDy/ahrDOXUW7VsRjmHFUELlLgbeqsOaSaMtOVts1bo7cfGG5ZmMnzyvz7a9D8A49yfhKY0fT2zRlfuOMrMoba1d2Hf2SfChT0yvB6uDam/YVYHeti3rIR00JWgXBrYWqccXULUgWBDLc56ozkbZOKZwbkbwr43STuwCuPa2d9GGGB7Fc7RbV2Y1ryEAPZ+fo+bAVMVWitQuWZzibW7iEwCHXQ7lilW/mPjcU90+t1SKzITRy0tdDnD32eBJegGqTt8gwv7C7U0By0yLHifOEbuQI/HKbSqiN2A7cIrLxEuI4jzhl62d8SsW0WgmoflnBB4zekZkQIL7kLPmy8SnYVExDCJn/vsvX46iwidi74aH8QGlQbnqrSnHdb+O9sslbarcTLIeXWoS3vjlXrP/Atapqv5ib+Vp+qjuFwuDUd/fyHu9CVTIq+qFWJV1Ca09xxlk3lq/Sq37HDeHFvIRQz0Bit3uYQ2MH0kRGaKWNr6gj0uyh0nEF3uif0c7nh4lCgrKdH9hQwYPB6dSzZHuxICRr/dIPICn1SQxKhh5hC5lEbayfHCibqcyA3ZtYkTVgm64xjTZc9SxrTlX5q0if+LMeMTHtRHRueOGGKjMO15oLHaiPWlWmRl/IO10evXz7Uh09LcSPILgN4V8uqJuvCbsexNLzoP3QgU4zJftrAt4TZuhNhSaFJDq30QNy+xijFVzLR5y1ZKXp6namdX7u3I6Z6K8vco9tBP1UZPnALuwG2CMSEhWTElyCqRQIzcxyntYtKFHuO26n2pAIJzuhqKmVWMk0lxlhMvhrOMcQYnpoV7MSCclFSNxvg5F/MSasrgQr4o9P/8ce7LjPQpQTUxFy4xpt29wJlYCQSLskVnUbXUlJD+kq+gImoiUOysTerfknkgSGBDUDKkls/jNmRXBzLzuE4Pph76s3u6BjIpbNN2/uUtpLEO4NfUee3hd2ICHNJIbu7KwOJmXM0OKEjTZcEy+gJZO1A8QqI9juOkuT8zAuZZP3b47Ea8GRr/Yqom6GrAfgurEO3uc8eXUoGKktCRgBAsVnVIoJf9NmMuK5NrsY9ALjf2gU9eNkQ3qYUTAKnCxlt0ZamUlmPRKIzah/3WyZgfmmfwywWHYariaOMQdaAnLtycQZ5AEUKtcuPbwWIRiIXc0guTOqWrEHyCxSaVinmQAkGenh5YyHy4OjCmRFbrOukQ0opaxEEb9LTnu4pMNA5oajIR6FNAvzNYBLI5H1jCNkosMq20DStOahu6Tl25xsb5RqciLQK1kSpeRs15JKSgo+2DBNpTgyY1mugTZwLBQyFZ2LYikcEqfUfXzD5bqRfbmJc7cYYTstDGs2DiLeG4oBCqhtfubuK8OpzZGwftSZqHgjNcMqO0bGJkQTvYWwXWjfQkKZ/6Gt0O9Ma9RrPA7FkHm4ogchaY4T0BfhuQpl0SlqxIwD6dfNlAQepRTVGp5sm+1YGJbv55UKec+VpxVrICAWlg8rr/IVfIahPZWyD4cFFDlIMc+CTZ15JKxmYxJL5x33PQTi4/jNDXsEHs6OL1DQlR6YioBK1LayaotNggHdb6wZHpOYgdxN2h7EuKiQ2Cu82lamU02Q63JmZzS29vUgECR0IeX+G5RNlpnEnO7QNnchXLXsAOlQQHHeTBg7EsUtguvOiQEKbkgjf0n6GjHfqwIC4SWja8GiY+QtaysAIH+Xtc/S34rotjyJiIgZU5ikRm+iLHHqKCu1qwRWEv3fudKN0MuGkIb7vVjGeHHxCp9OWJ6ErT2plncvoXMmdytfNnJjFy1gw9xNMkd0saBFfI4o1358aFbq/Y7HG+0KmQY85AZYiQxA0RN7R7GoFWI0woIEO6jdfg5/lv1W9L8MdgGrzibDAjUzPbmi3IYPDcUi4SpawuXitn7HSA2yOtc0ts4mgYWjYsiSiVXBuGBQjXZXxxpS2Jq6yBdvXRk6hLpa/aV6B4YBjv08cEdkBW/TjBgnZNauhzxqZs3IZtaqmJYIwCdm2CuAwGScMv6WjknojNJSYEDVznSdIe4CUSKBCkndAmwd2jkRJS/wOiqKUozXfWEQvrk2GMFeh/k3cHmd+e5nwHpxKCSAEShab0a9gp/nOaf2S/o/xG9ll8TwiBm+JxaYSCbbEJObCxpFX4W0prjI5tAu+5849d5//w4G4tCb/Zm21f/T+Nbt3FsPz5tFFX9NlIbH+MUDEgQNPWNDZJoT5NdbIxox4IqtKPpOXydp7MulwVpi68NL3QjJdbr8VparAvCppfbCLx6mT+zMWP3/nLtb88S5po6i/tPz5fgrJign1I+C8ng+NvE7413p9rF168tNQhevfryFZSZJG3V0igtyMl6O9ysaVvgGqGS8vU4x6h4YtDo7tnP42xk5KyqVHRYYBXqWC0NOfkNTdnG6U3N+VkdtbnteAMzOxO65jaGRsbmNknmTiQDx9VYHY0ZGa1N+ST0xqbRVsbs1uw+hYOOkQjG1NTQ3NbbR0zW5Pf7ATySWpUAhnss/zDmi+ftaPolRu2TY+xLj7oy3F1rQgy9SGLmmrRS//lS2yb2xGz9qqistCVV0fiKdba0at0F5p/aiJS2moXkBRu+nbeQdPeSo9s6wkCN9L3MS9ieyHZcj2+9pNhhq58fh6l8yaHGNjLty5eiJdnZuh+NoqrBqvTz2Orv9swifLM8rOdS0p795yfyM/+IJ+ZrP3pVDKTYxpEhh8pOKo1y1L5Ha/zu0tFqbapOo5zFQVfP9S1p9gfZN4cTnie0LXRlfQ8qXwDaslp5pouMkwwuPsMOiE4aBZsOflG+ED4727GZgRNYxN9XVNjqrEZDCT0H52X7Qe9I/6E9zqfNz6qoQo7hPeaXz69V0QVtoQnI+7F0SO60X6TR2fG42gRPegI/N26X+yk+swhIP7btCIQRHWqtgyiJvtGpxYmsjNiZl/SSme/zt4Ji/uYe943oR5EfcllEZB2JjQoNCrSJzHSlR0ZfWs2gLH4Y3HYJ6Hd5x+6VMLVuBHe9WdPeF70sb1S6GFnUulRZzPjmYVAUOK4MXxDn61Pw5dKkhZ+SWJaEr0OQcdji2X+J/qSrn6ayTNrXK+e/51eTOBfc/d+4AuOj/SLTLiYk5FdGavnesQG1Hbfun/wIcp+umecGndz8Pmu/55jhWYX+XVxtsnULo8PN60YzgdNTK5k3ltIvMyZ3AAkf+lj/tJ/txSbX4a/APGYQkhYo4f8GZW4W9QBzMuFp9hX/bT43ghFd/nQxpC+T08fTX56yqdsHZrCmE1KDwtJSF6Kiz+44xkW1xdC9fcLpfWF0kDxtXdsSt3AG95nRWffzaXmLyFkYf0c3xov9MD9o/Po6sQzfuNk2yPGnpfTh58ktDOyE5tANdr8BVvFmjaoYk1lgw6b1+OBR5THfQ94Fx/8+pMaQh1UQ6ifwL0tQ7dm6M75BLKHm4+LQ5CXLRthbUwO33/58Fbd+Zq4GF0TpJCtdsrY6DQxgiXDv0ihT/A8P5cl7t3QuqBkyjQ1KTn3SXBi15Uk3FBBuF2KtIOuspLQaEZA2iKuQyBSJ5M4IjfcFcW5wfM5x+3gjWm7m5JfjmeNTykE/wmZd3no/oT7OI/gcnfKl+2fAYtdlacfU3kzjfOs1Tw9Dtic3BCSj8idAS1FWxWaDccRf9abIzQWp+/BxieuUAY4Fvs7MjriF3Ix8B/aoRRWwiT+2bfdReP76Bm04DfrWNneH9EMik9onGfaNlh0Le5++w/2ZydnfaE8OpE1Vawp0HL9y3Hc3o87gtUlOQUNrM/I29SN5u915eUZwlWyP5KdgzJtdaceGU/Xayq0jHL7rYg1jM/+QN5ab07+HAGdqByHgdsPegDH6nrUXeIA2teCTYJ/A45V8+hSlwlYwl2LgL3B127ta6hQQSejTE5FibMPfNr/6oc0nqOV9RXdiNwYw3YNWTseODkgBdYpsPNZbubQi/z2yPXYgYs7lzpH5DLsHv9+jP02v/J9dXKHGkUNC4hh0kGVWt851nI32nLbW34r7WccHf7nJBTdL39QUjEWHBhliem7iam4kUWM/VI0VWzF54bYrLdoykuh+WAdCb8fK+PiuvyukOrm4/sF1q+vzZfqCbVf7xJpP3caZmzmzhkItfsJtZYTYXYHu3UTaa7vAeS93ec+XGNz99/tivYf+A04luzXg78fz4tu/j75QCEzPykmujAvEVEH65Jr02lyNKefQ3Wlql8fGbLOE13d/MS/sdu3fjfXnfSd/UYPV1NLqlVBTPHgBw12eq/mS/JGElUMPfh2af/CphSmRNIYyekID2g8pnsxAz2DA4ljCfdZB9+sVmxGZE4l7UQVpGQkZAV7WpVSbP0mUzwbI2/umf9Uy0ktmcz+nVCXeYHBoIApdmVs5dfK0KN0MJ1jTb6V4v/+/3HuzUc7UyWlF4qOqYxBmdbeY2f3SIyyvkk0sHaD1eUgfqzRr9041pagnaRgtyT7OrL5i/+YoaCf4SxIlV5R5Dt26/HgsqTGbs3dJ4aWex4fg/DfFl2iB9MrRP+IHiyt2Aep97kfaNXLixA3Hh26BIdHZxoA79hwtwI4nlQAYsD6fAIv+xngqaASOJ5U3m0CvGMTiNs1dj2akplvk56fBM2U/vL+cpAoe/yAT243YP7wGJyNaa6b7M3ugJ5P5WQ7dz8v22AbItuZVvnAMfHeq3to+9sSKQdBtNMoyeD/R+mZme4Ohm42QDoitPNSevRecBYPdQnwwH4mKP7a2KvjnFt4VvzV6NrT2feIeRej4luQNtDocKUHY8xXMX60zvv+tDdcxzH7vnNIrQxuvcTdXMW4RdPdopNboUOSldQOFsf+X5cbbg+my7ABD0s8EaHpN++9V9z60pDUQyvXZ0zppZZHJ/eBk/D6wSNbB68k/HmVn7v8eR/qM8ydUV1FbwpipiUQvRYo3KSLfnG5AgnTQhyxZxLgCbOhu8G3e3y4m0gWxN2lq3Ze91rqXmKC9bGdjZMjvcEp3KHP9s1xfntFf+1DsIwqjmDUx+amJRsHUa/e+yz75Vsdoy+61DBxST+uNIZxF/YMj0Rn33TB5gyz+yK93DxKyKk4NuCBLZLZBDYiqmG4XvkGaaiTjRiGRrC3nlDZWN95kTQz4KQQi6bXidRmn02HhHsPXftVUw8Zq2PFQ3ei90GytP9z2iNCwEeeYYw9tWygNcxf7xxFBsbZA4HOnkG2QU4iZFhlT2Dv3SvRihZgE2D3CgGfQC8atsGlPWTfDXTy8S8lM1A2ASxOXEz88yar7JnAPu63nJfifq1kn1sVUvizxdmUfWc7q7+3Pq8/lp57B0io0K83MgPXKFSEDbjFl1xhlNSesZcn8F9wV1LuxpQT417qJp6jpvWBxfE/69JjN4KT+CgLgFtk7wRHtA69k9v61ph2h1pkELdhQCugMnrhH2W378pNmskrbMJbXIxjXrXKAVg8rkshfVe2kbzh2JT34fbNoY/9F9iGgW4OVn7GOhru2gd0rjhYxDqWfOkeyZj2PNvkvYG1p7v5evkagdicLkd/d7+bDv60TMsdmz3moqr+17qvcYDCAIWSOMrqnhy+y+6bauvSTuJiE1bh54v8tvhfe6mEf/fWE3aApGjZ9n5TiEqYWF97szYhxCBsdr5efn0LACd9+U1E7I/x/ndm/gy//TFjEV7YHj1bxoitPPcR2FT9cueJm5uemMURt70jqnhIHiQOhV88Ni8+YlkJXoFePnjPuVeD1wZfz6LXu5evKsrntqvjfi68andpd30zh/vZrg52fE2Av9cEYotXNTB/ZtZv2N+wfz+N+XNVQz73hlLXSu/Eq6FrQ69Gb19b6VYC82Eh1t3nBSYJ6hey9CROkMwC7QbbbiyWmTAIRel6hyVJthF20FL+GGGgiABNXYNsoqtHNtFQJ5vo6ZJNwKLDmR6Is1zBZI48KhZ/P/H+5uGHB5f2zz08dPPwq4mXNeI9/2GqVvCeNKrr2i51ILOS2mHH4K9mnrbrgfv7HtgEyYS74nsuj1dxfHnw89259ac93zyDgjycA1KDOL+ojwNpJqQ26eGDmsSU9LxCZpZv1ehEaH1hSV5hflFl1MBQJbWoNL+o9Byl9sGgd1VOXn6RRlp8TNjkXerSXVro5MfQh3eoz+9SQx/CEWFLnBef3f33FfI58uflZXdkVc6r5KhU/HC4LwiZfOKr4hOr26tgNDje0+rE9O3t4Bt9v31oYfoLhFfRs2LzPCzNM1z61G4r3Q1zuxDW0+xMVCRl+rUKPVz7zPPyEZtSlBwTn+NhY0d3SAscjHSuUAqzEjEVD5FMsPaxL5O7pvIiSo5mnekFuDkHJT1SNInkRyJF65EmFD78Ow0Gr+0qOi8T78x2n+m8N1tb115fXu3lauPkFpAZTYsOzHB1drbyaWA0lu8XbK27KFBXdciu8pBAI1Go5fwha4GmB33OJmMpxmN9zmV9zuSJoUGj8dvO4DkgQDKzTohOiwsOb4rpCFBOpuoaKSm08wV1pmRlXyhiaHnvs/JMlbI92pxNMQX7U4pOoHU4egIb30YCh4WrNVsLPJzAEY9FF+vzNvsutDETaXQd4n7l8Do86ZxA1eAlM10985qMQgM3bTVDQ4Ib5INKA+/V2qsgShuhXKhZOl8ZGlZZuVRdQ8lU1TdUVdE3pZBNg4zIID2c7jjuyFhg+I/7xy4IH/tlPWINXZV+ifuxkQEkGTsVgq6uWh+1uSKzsCr5bEiwv7dDbuRZEBgJs2Z4H7XTUSCeONrnWx+fVnglJpjOVCqTKqCwEgszW5PO9J3QV9E6PSbjnwFuIKwGu0XkhkFUn5CA5DmlUpoJMUJswgu8vSulNNZMbWgLcIvA4LRa4/w9P8f1Z+0w4FiQf59gbM40MSecMjcm6poagzbaUC5WEtxGq8Jn6RnKycgaHrHEHsoBpLKXMCFfEh4tDBxU70v3htT6BxuNLt4eqqm9O1zXifVxC7OycAkBLytvtzBLC7fQAKCVIfEqRUYWAcHOXhQPbzdnp2Df1e/efpwemno10dNQecXVzZzMFSWyraZhaMKISRWvjAnQIiGN33b7lu0RFVXWy1GmwPljo/uF75+3VgyMFcsEs5BTumOytJzw4Do1jEgggs2RjdXr2V2fbuJS3lK0OTQUSJorJwl3Xhst8HMoaCrZqh4ArVMDptOGyYd8CQ52mRutevc4Gv85c7D0mLlq8Lbo96oojSX65avg5sS44Ef21kk24Fhbi2vbiUWpz3PTYxGI27KeX9mcuj3f16Ij5q0fuZsoeZJo21VqlWXattAzZtV6wklh6GHSMTVvZ3uSooFLR6ZVppVT4oS5tauXVQ9mGyy8RH7nXiKazdkyWeNXq2s32971k109Apxco5z0vgiV7PSMvghnpDHHkdlN9EP2Lc6c8zXMbIrmoFGDgfrMabWUHkIm4cHjkUCE7mGo62ahdG3dNyl7V9LIwTOhsaByfO9vzmKbxkT8SnFezqvExFdZ5ZFrkwmMkkgXhebE2IdM89C2M4nWl6VNhjYVWczrdPPQgjXkb6pukZTTVJ6U1xQekTXeAaQow6+zX7e79I1No4xN9EmzWqZNsXU3CYaR3KUETWNjGzamzLVRHA8bFhT7Tw9XEMtm2t35ALnkU3NqsnxLtfq0t4zXqma7V5yNZZpukk6XlOOz+oEUJfT9tdxQEf3iHJfY0sHRrNHXx/Fb2Ma03mh2iGlsAhuiZsC3UTi2ibOklBdpIbQXCXKXN8c3Crv9Mvg7PeEwcNtIYb9vIK/GGT7Xy51TcFttsGsGXE784Jd7+TODRbS96R4K85voRlYrd05RDc25QNpQ0aLGUOcRMeZ7bkdGx/YbvpPoF87WjN5YekbPQCPzbgwts1dHoM+eniUcc2NfRGQsqKh84BkuryqrGuTjFy6E3QEy7slxrQl0L+8EemtSnMC0vC5RTp54WkFOR89HRw9Uae/Ck4q9JFOCTrWJnTCSK+MITyr31LzkrHLCSR4EG8XizVwYaGHFXA54BswA91eIN3NOQ4tr53ICg2agXTrO3C4JLS1dzAA3/2lgaSeZ22Wh1fcX+yBE7YyC73dikrljPqb84eJNX/8l4EzHeMbE+AXSY3yOe0RHB/rGRCFucEp0u6DpUIbwoYwm2HW95UX9rtguhJbQ/1cOQu3KLj9cx5W2inAPCfGH9P0pcPwQB9Ke354yH1IH759/xH5TGAfFH/kf9j9/uY2zzjffL8UPdLbCchm/u208JBNICr4x6JplVXLYYt+xiWz5qAhfL2/9ue45ZqDncpXLT/vzmYz0uG4oObvzx+8NN+eHRuJI8oBbZa8+R1MFHn98IlP+bIbNpDKnhJbvVeKqEqcWh9wmuIa+YTTXfRvYon2xpqWopLaltqKmpqO46GJ7bR9PCy0Kre1poUdgLgDPY5z+j4KHpud5z7rbdQGcMaE/7lIX+7bmwDtJuXzjnJ1w6SI5PTcjLuZKRV5qezri04u1jqIlauiR9EhkOHr0yIXiLA9eb0P9EBozP47eVMEsbW2sUnzyaf15ebOs7tG1Y8XJqiQDNSp0tNm0jdgkdZ+LgXNEaqRaulYK5VJsQV5dTEhKulakGjW4kpaaVkkTP6S65UKUp/wdbp1rdRhxkJT32gVrqroaLknM7MSYljpG7uUG5Nyp/54tvADh0sIYa582i6MGRrpEFWWiuab6KRJcy7vdejvud/wYOrmrQ3UPZzdAdj4bsl16trMHJwj9C8BBaPxKa5K4nayl8ATWSLdXfZuqajai9urlaXVLWl1S43gaFezUNHGc2viWGFVqfMapNI6ZqJrQkGIdrVlpSR2gMlMI5Rq69DmzV4hdMrcHAWfs9BAoTZU2Z769bOXxZc3VFkp4xWibBOFYwgTorrQA9CHSRO6XW+RWuU1ulzugk+IJJrd2XG6lfjva1JwnrQ15Fhg+vshoU78zxce0UticGgUkldh2f/wL0iv1vW3a8KS1TM8CWeMproOsp/4470mj6lkw1MdTho+p9Irw0VTODQiyMjyVlWFRVoYll3JHw5maAiAoawJL1qzs8owCRFg7UwQYHKuvA6APmyGAR8X+5eSiA+FGlKvISqHXVEyywqAtG9PLQDYOESOUrdi5bKecB7mT9W/92UnbzKds/CivQ1ggaPNaTYebto+Dm7It2LtszSNuSJ/mqPEUqaYzG67KzmDhcq440LVTrjHdCbAH3C3KLoZujDGxdgHfzSH/3ziKTf8HIG18azVlTW7R07J2d0c5mZEt3MkFd2eAu7W3sVJe7p0CX/6/fltthFVFKkqjtj7zaoWWRHyaxBAL0BcngJzxrUs1ANWoinudxTTyo7X3vEkF7WDJOkHMB/f2PmpRAYPiGEZh1PFXRQ6uOCwmCQHcLjO1QlaXT8roV1cmYLFRH/qIMoDdb6ZdyDqrc40JgDyupesAej3axsPANaHW0d+K3v6VKQO4dWcnBYyNfnCmBlndj15UYmvdLQVZXYXCAbDvSi53l78mgAvp6tvmI7ycB8vFRn4rC7Z0d8UzgaupqRsZLwDkzv5TIUDPRtu4pZzR/x9ttS/uo2IB5q++zRLVtCeAC/F3TemP0Fvzeym4EC8U3sW+Oa/B+37nEQDoFmu8ZrzdTlxV63fOfcsBAMDIT4LbAYC5ZvPd/8f+n1vebbmzALigAAAQwHHeYgTAdW6gdaFbBSKcajPz+Ekgi2VtdCuFUcG/XvOq0KvaX/LtBzg0FzbxQEo8IZXZxItGvw3ZH5eQQ0tmykBTWTCTZmJNLIkKSSU0YkCCXm33OCStrZMrQacrTnHJSMkVWjMprt2WUOdV1jUFdIKyYhLzf/dFofSrNUJPXZ0h23k0yS4yQ7itdzJmqjhwsrzqj+7MMqlnKY2qS+yyhGbcFLoA6XqJo95gFYoY6USEG+HNc6lmNUzcTbHsuFSqhFJgWYx5103ZxjzZymZTZ8QGj8RAxo2ShcMjb9pOU86KrQLkSLnRmOFGDjONFpx1CXp+s6dvOVx4h3IVL7nbxFUagep8f8S7NVocxKxEfnWDR6/hXkQ87T9Z9YNLZnCf9Dlmsfx8zbHCJMebeqYquSWXCc/YpjXvmnpUiazbSnKTQegpCAFh2s9hSjah52vufYbz9A+ryVFgrtCbZYzt0mfeGYLrgbJalzUNMqomgVWMVFks67y0EFM46+Y3I3DNNWVxTUwuiOvSaiYFqW2Ab7tDuU1RShGhKY6YnJTioazeKCeihEYwu6wmG9tUK49HpautZqJ1h+zsKPQcWAqIKVEnqsSSmJtqnhheK9M0WhgtmepO47uVyu7QWpqtDIeIjQmvctt4GOq3VGnMpi5Rs9OaD+OCoIJ9ijAlxEZ3q8K2cSvUZp3SmC0KHW3jbeojAD4qtIcFXFQPgB+g0B3g59viFAADqeUBeIDyWIQYj2NR/GIqMalKLI7FOYHJ8JDbG+VnZwxJhEixogQLFIRKghIFiqMigSxCBQ3lf2Jj4XzJMV2HhIZtGOJsxPx3x1+U6Iz5JTk2Ivg0hJqUYJ7IBqMJo7HA0wrlnUoclChnBYvwhxO5lcrUnXqV0epC08uiW50qEoH8CHRHjrfInPkG3P3JiRAlkIUK83VE+Guys6hlxhiJAQu2q5B9cEhhYPBIf8/JTwAA", + "ok": true, + "headers": [ + [ + "content-type", + "font/woff2" + ] + ], + "status": 200, + "status_text": "" + }, + "https://localhost:6006/data/plugin/scalars/tags": { + "data": "eyJydW5fMjAyMV8wOF8yMi0yMl81Ml8xOS92YWxpZGF0aW9uIjogeyJldmFsdWF0aW9uX2xvc3NfdnNfaXRlcmF0aW9ucyI6IHsiZGlzcGxheU5hbWUiOiAiIiwgImRlc2NyaXB0aW9uIjogIiJ9LCAiZXBvY2hfbG9zcyI6IHsiZGlzcGxheU5hbWUiOiAiIiwgImRlc2NyaXB0aW9uIjogIiJ9fSwgInJ1bl8yMDIxXzA4XzIyLTIyXzUzXzA0L3RyYWluIjogeyJlcG9jaF9sb3NzIjogeyJkaXNwbGF5TmFtZSI6ICIiLCAiZGVzY3JpcHRpb24iOiAiIn19LCAicnVuXzIwMjFfMDhfMjItMjJfNTNfMDQvdmFsaWRhdGlvbiI6IHsiZXZhbHVhdGlvbl9sb3NzX3ZzX2l0ZXJhdGlvbnMiOiB7ImRpc3BsYXlOYW1lIjogIiIsICJkZXNjcmlwdGlvbiI6ICIifSwgImVwb2NoX2xvc3MiOiB7ImRpc3BsYXlOYW1lIjogIiIsICJkZXNjcmlwdGlvbiI6ICIifX0sICJydW5fMjAyMV8wOF8yMi0yMl81Ml8xOS90cmFpbiI6IHsiZXBvY2hfbG9zcyI6IHsiZGlzcGxheU5hbWUiOiAiIiwgImRlc2NyaXB0aW9uIjogIiJ9fX0=", + "ok": true, + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "status": 200, + "status_text": "" + }, + "https://localhost:6006/data/plugin/scalars/scalars?run=run_2021_08_22-22_52_19%2Ftrain&tag=epoch_loss": { + "data": "W1sxNjI5NjcyNzQwLjk0NTgwOCwgMCwgMS44ODY2Mzk3MTQyNDEwMjc4XSwgWzE2Mjk2NzI3NDEuNzAwMjI1LCAxLCAwLjY1NzcxMjc1NzU4NzQzMjldLCBbMTYyOTY3Mjc0Mi40Mjk4ODUsIDIsIDAuNTkzNDE4NTM4NTcwNDA0XSwgWzE2Mjk2NzI3NDMuMTg2NzE1LCAzLCAwLjU1NTcxOTI1NjQwMTA2Ml0sIFsxNjI5NjcyNzQzLjk4MTI4NSwgNCwgMC41MjcxOTA1MDY0NTgyODI1XSwgWzE2Mjk2NzI3NDQuNzk3NzE5LCA1LCAwLjUwMzI5NzYyNjk3MjE5ODVdLCBbMTYyOTY3Mjc0NS41NTU4MiwgNiwgMC40ODUzNTU1ODU4MTM1MjIzNF0sIFsxNjI5NjcyNzQ2LjI5MTg4OSwgNywgMC40NzA5MTgwODkxNTEzODI0NV0sIFsxNjI5NjcyNzQ3LjAzNzE3LCA4LCAwLjQ1Nzc5OTM0NTI1NDg5ODA3XSwgWzE2Mjk2NzI3NDcuNzkxMDI0LCA5LCAwLjQ0NzQ0Njk3MjEzMTcyOTFdLCBbMTYyOTY3Mjc0OC41MTU4NzksIDEwLCAwLjQzOTMxMzYyMDMyODkwMzJdLCBbMTYyOTY3Mjc0OS4yNDY4NjYsIDExLCAwLjQzMTc2MDg3NzM3MDgzNDM1XSwgWzE2Mjk2NzI3NDkuOTkxOTMxLCAxMiwgMC40MjYwNTE1ODY4NjYzNzg4XSwgWzE2Mjk2NzI3NTAuNzQzMDE4LCAxMywgMC40MjAxNzY1MzU4NDQ4MDI4Nl0sIFsxNjI5NjcyNzUxLjUwMDYyLCAxNCwgMC40MTU0OTk4NjYwMDg3NTg1NF0sIFsxNjI5NjcyNzUyLjIzMzQwNywgMTUsIDAuNDExMTY0NDkyMzY4Njk4MV0sIFsxNjI5NjcyNzUyLjk3Mjg3LCAxNiwgMC40MDc3MDY1NTg3MDQzNzYyXSwgWzE2Mjk2NzI3NTMuNjk3NjE5LCAxNywgMC40MDM5NTI5ODYwMDE5Njg0XSwgWzE2Mjk2NzI3NTQuNDQ2MjM3LCAxOCwgMC40MDA0NTEwOTM5MTIxMjQ2M10sIFsxNjI5NjcyNzU1LjE3Nzg3LCAxOSwgMC4zOTc5NjIwMDM5NDYzMDQzXSwgWzE2Mjk2NzI3NTUuOTA2OTMxLCAyMCwgMC4zOTQ5MTc4NDU3MjYwMTMyXSwgWzE2Mjk2NzI3NTYuNjMxNjE0LCAyMSwgMC4zOTIzODM5MDMyNjQ5OTk0XSwgWzE2Mjk2NzI3NTcuMzk1MjA2LCAyMiwgMC4zODk4MDY3NzcyMzg4NDU4XSwgWzE2Mjk2NzI3NTguMTcwNTk5LCAyMywgMC4zODc0MTA3MDAzMjExOTc1XSwgWzE2Mjk2NzI3NTguOTA4NzA1LCAyNCwgMC4zODUwNzQ0MzY2NjQ1ODEzXSwgWzE2Mjk2NzI3NTkuNjMwMzI0LCAyNSwgMC4zODI5MTc1MjMzODQwOTQyNF0sIFsxNjI5NjcyNzYwLjM2OTA0NSwgMjYsIDAuMzgwODU1OTE3OTMwNjAzXSwgWzE2Mjk2NzI3NjEuMDk4MDM0LCAyNywgMC4zNzg3NTY0MzM3MjUzNTcwNl0sIFsxNjI5NjcyNzYxLjg2MTIyNCwgMjgsIDAuMzc2OTM1NTQxNjI5NzkxMjZdLCBbMTYyOTY3Mjc2Mi41NzczMDksIDI5LCAwLjM3NDk3NjA5ODUzNzQ0NTA3XV0=", + "ok": true, + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "status": 200, + "status_text": "" + }, + "https://localhost:6006/data/plugin/scalars/scalars?run=run_2021_08_22-22_53_04%2Ftrain&tag=epoch_loss": { + "data": "W1sxNjI5NjcyNzg1Ljk1MTU3NSwgMCwgMC41NTMwMDc2MDI2OTE2NTA0XSwgWzE2Mjk2NzI3ODYuNjk4ODgzLCAxLCA5Mi4yMTI0NDgxMjAxMTcxOV0sIFsxNjI5NjcyNzg3LjQyNDc5OSwgMiwgMC45MjkxNDcxMjQyOTA0NjYzXSwgWzE2Mjk2NzI3ODguMTc5NjAzLCAzLCAwLjg3NTQzNTExMzkwNjg2MDRdLCBbMTYyOTY3Mjc4OC45Mzg2NjIsIDQsIDAuODQ5NTMzMzE5NDczMjY2Nl0sIFsxNjI5NjcyNzg5LjY3NDkwMywgNSwgMC44MDg3MzUyNTE0MjY2OTY4XSwgWzE2Mjk2NzI3OTAuNDE1MDU4LCA2LCAwLjc4MzE4NjMxNjQ5MDE3MzNdLCBbMTYyOTY3Mjc5MS4xNjE4MywgNywgMC43NDUyMTE0ODIwNDgwMzQ3XSwgWzE2Mjk2NzI3OTEuOTA2OTgzLCA4LCAwLjczMTAwMDY2MTg0OTk3NTZdLCBbMTYyOTY3Mjc5Mi42NDY4MzgsIDksIDAuOTQ3MDY3NjE4MzcwMDU2Ml1d", + "ok": true, + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "status": 200, + "status_text": "" + }, + "https://localhost:6006/data/plugin/scalars/scalars?run=run_2021_08_22-22_52_19%2Fvalidation&tag=epoch_loss": { + "data": "W1sxNjI5NjcyNzQwLjk0NzE3MiwgMCwgMC43MTI2MDUzNTcxNzAxMDVdLCBbMTYyOTY3Mjc0MS43MDEwMTUsIDEsIDAuNjg4MDA4NzI1NjQzMTU4XSwgWzE2Mjk2NzI3NDIuNDMwNjU3LCAyLCAwLjU4MDMyODU4MzcxNzM0NjJdLCBbMTYyOTY3Mjc0My4xODg3NzIsIDMsIDAuNTE2NjA4NTM2MjQzNDM4N10sIFsxNjI5NjcyNzQzLjk4Mjc4OSwgNCwgMC40ODk1MDc1ODU3NjM5MzEzXSwgWzE2Mjk2NzI3NDQuNzk4NSwgNSwgMC40OTUwNzk0ODc1NjIxNzk1N10sIFsxNjI5NjcyNzQ1LjU1NjU0NiwgNiwgMC40ODYxMjUzMjAxOTYxNTE3M10sIFsxNjI5NjcyNzQ2LjI5MjY0NywgNywgMC40NTUzODAyMDEzMzk3MjE3XSwgWzE2Mjk2NzI3NDcuMDM4MjEzLCA4LCAwLjQ0MTMzNzEwODYxMjA2MDU1XSwgWzE2Mjk2NzI3NDcuNzkxODQxLCA5LCAwLjQzNzg2MzkxNjE1ODY3NjE1XSwgWzE2Mjk2NzI3NDguNTE2NzYxLCAxMCwgMC40Mzk2NDQ0NTU5MDk3MjldLCBbMTYyOTY3Mjc0OS4yNDc2MzgsIDExLCAwLjQ1MDY2ODg3MTQwMjc0MDVdLCBbMTYyOTY3Mjc0OS45OTM3ODIsIDEyLCAwLjM5OTcyMzUyOTgxNTY3MzgzXSwgWzE2Mjk2NzI3NTAuNzQzNzgxLCAxMywgMC4zOTU1ODkzMjE4NTE3MzAzNV0sIFsxNjI5NjcyNzUxLjUwMTM5NSwgMTQsIDAuMzkxNTcyNTM1MDM3OTk0NF0sIFsxNjI5NjcyNzUyLjIzNDE3LCAxNSwgMC4zOTM2Nzk0Njk4MjM4MzczXSwgWzE2Mjk2NzI3NTIuOTczNjEyLCAxNiwgMC4zODA5NDgwMDcxMDY3ODFdLCBbMTYyOTY3Mjc1My43MDAxMjYsIDE3LCAwLjM3OTM1MjAwMzMzNTk1Mjc2XSwgWzE2Mjk2NzI3NTQuNDQ3MDQ4LCAxOCwgMC4zODUwMTg4MjU1MzEwMDU4Nl0sIFsxNjI5NjcyNzU1LjE3ODYxMSwgMTksIDAuMzgwOTMzMzQ0MzY0MTY2MjZdLCBbMTYyOTY3Mjc1NS45MDc2OTIsIDIwLCAwLjM3MDA5MTcwNjUxNDM1ODVdLCBbMTYyOTY3Mjc1Ni42MzIzNDgsIDIxLCAwLjM3ODEwNTM3MjE5MDQ3NTQ2XSwgWzE2Mjk2NzI3NTcuMzk2MTY2LCAyMiwgMC4zNjQ5NzYzMTY2OTA0NDQ5NV0sIFsxNjI5NjcyNzU4LjE3MTYzOSwgMjMsIDAuMzY1NTI4MDc2ODg3MTMwNzRdLCBbMTYyOTY3Mjc1OC45MDk1MDIsIDI0LCAwLjM2MTA4MTMzMTk2ODMwNzVdLCBbMTYyOTY3Mjc1OS42MzIxNzMsIDI1LCAwLjM2MjYzMTA4MjUzNDc5MDA0XSwgWzE2Mjk2NzI3NjAuMzcwOTk2LCAyNiwgMC4zNTY0MzIwNTA0NjY1Mzc1XSwgWzE2Mjk2NzI3NjEuMDk4ODI0LCAyNywgMC4zNTc5NDA0OTUwMTQxOTA3XSwgWzE2Mjk2NzI3NjEuODYxOTU3LCAyOCwgMC4zNTYwMTQ5OTY3NjcwNDQwN10sIFsxNjI5NjcyNzYyLjU3ODAyNywgMjksIDAuMzU0NzcyMDYxMTA5NTQyODVdXQ==", + "ok": true, + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "status": 200, + "status_text": "" + }, + "https://localhost:6006/data/plugin/scalars/scalars?run=run_2021_08_22-22_53_04%2Fvalidation&tag=epoch_loss": { + "data": "W1sxNjI5NjcyNzg1Ljk1MjM5NSwgMCwgMzAyLjg1MDA2NzEzODY3MTldLCBbMTYyOTY3Mjc4Ni42OTk1NiwgMSwgMC45MTA2NzM0OTkxMDczNjA4XSwgWzE2Mjk2NzI3ODcuNDI1NTU1LCAyLCAwLjg4NjM2NDM0MDc4MjE2NTVdLCBbMTYyOTY3Mjc4OC4xODAzNzMsIDMsIDAuODE4MDk1OTIyNDcwMDkyOF0sIFsxNjI5NjcyNzg4Ljk0MDI4NywgNCwgMC44NDAwMTk0NjQ0OTI3OTc5XSwgWzE2Mjk2NzI3ODkuNjc1NjczLCA1LCAwLjcxOTAxODEwMTY5MjE5OTddLCBbMTYyOTY3Mjc5MC40MTU4MTMsIDYsIDAuNzg4NjA0MTk5ODg2MzIyXSwgWzE2Mjk2NzI3OTEuMTYyNTgzLCA3LCAwLjY1NzA4NTQxODcwMTE3MTldLCBbMTYyOTY3Mjc5MS45MDgwOTIsIDgsIDAuNjQ0NDUzNzA0MzU3MTQ3Ml0sIFsxNjI5NjcyNzkyLjY0NzUzOSwgOSwgMC45ODg4NTQ0MDgyNjQxNjAyXV0=", + "ok": true, + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "status": 200, + "status_text": "" + }, + "https://localhost:6006/data/plugin/scalars/scalars?run=run_2021_08_22-22_52_19%2Fvalidation&tag=evaluation_loss_vs_iterations": { + "data": "W1sxNjI5NjcyNzQwLjkyMDgyOSwgMzYzLCAwLjcxMjYwNTM1NzE3MDEwNV0sIFsxNjI5NjcyNzQxLjY3NTMxMiwgNzI2LCAwLjY4ODAwODcyNTY0MzE1OF0sIFsxNjI5NjcyNzQyLjQyMjg4OCwgMTA4OSwgMC41ODAzMjg1ODM3MTczNDYyXSwgWzE2Mjk2NzI3NDMuMTU4MTcyLCAxNDUyLCAwLjUxNjYwODUzNjI0MzQzODddLCBbMTYyOTY3Mjc0My45NjAwODQsIDE4MTUsIDAuNDg5NTA3NTg1NzYzOTMxM10sIFsxNjI5NjcyNzQ0Ljc2MTYyLCAyMTc4LCAwLjQ5NTA3OTQ4NzU2MjE3OTU3XSwgWzE2Mjk2NzI3NDUuNTE5MzU2LCAyNTQxLCAwLjQ4NjEyNTMyMDE5NjE1MTczXSwgWzE2Mjk2NzI3NDYuMjg0Nzc1LCAyOTA0LCAwLjQ1NTM4MDIwMTMzOTcyMTddLCBbMTYyOTY3Mjc0Ny4wMzA3NiwgMzI2NywgMC40NDEzMzcxMDg2MTIwNjA1NV0sIFsxNjI5NjcyNzQ3Ljc2NTc2NiwgMzYzMCwgMC40Mzc4NjM5MTYxNTg2NzYxNV0sIFsxNjI5NjcyNzQ4LjUwNzk4LCAzOTkzLCAwLjQzOTY0NDQ1NTkwOTcyOV0sIFsxNjI5NjcyNzQ5LjIzOTk2MywgNDM1NiwgMC40NTA2Njg4NzE0MDI3NDA1XSwgWzE2Mjk2NzI3NDkuOTg2MDI1LCA0NzE5LCAwLjM5OTcyMzUyOTgxNTY3MzgzXSwgWzE2Mjk2NzI3NTAuNzE1MTg4LCA1MDgyLCAwLjM5NTU4OTMyMTg1MTczMDM1XSwgWzE2Mjk2NzI3NTEuNDczOTE0LCA1NDQ1LCAwLjM5MTU3MjUzNTAzNzk5NDRdLCBbMTYyOTY3Mjc1Mi4yMjY3NzcsIDU4MDgsIDAuMzkzNjc5NDY5ODIzODM3M10sIFsxNjI5NjcyNzUyLjk2NjQ5NiwgNjE3MSwgMC4zODA5NDgwMDcxMDY3ODFdLCBbMTYyOTY3Mjc1My42OTE2ODEsIDY1MzQsIDAuMzc5MzUyMDAzMzM1OTUyNzZdLCBbMTYyOTY3Mjc1NC40Mzk4MDUsIDY4OTcsIDAuMzg1MDE4ODI1NTMxMDA1ODZdLCBbMTYyOTY3Mjc1NS4xNzAxODgsIDcyNjAsIDAuMzgwOTMzMzQ0MzY0MTY2MjZdLCBbMTYyOTY3Mjc1NS45MDAzNTksIDc2MjMsIDAuMzcwMDkxNzA2NTE0MzU4NV0sIFsxNjI5NjcyNzU2LjYyNDgyMiwgNzk4NiwgMC4zNzgxMDUzNzIxOTA0NzU0Nl0sIFsxNjI5NjcyNzU3LjM4NzYxMywgODM0OSwgMC4zNjQ5NzYzMTY2OTA0NDQ5NV0sIFsxNjI5NjcyNzU4LjEzNjE1NSwgODcxMiwgMC4zNjU1MjgwNzY4ODcxMzA3NF0sIFsxNjI5NjcyNzU4LjkwMTcwMywgOTA3NSwgMC4zNjEwODEzMzE5NjgzMDc1XSwgWzE2Mjk2NzI3NTkuNjI0ODI0LCA5NDM4LCAwLjM2MjYzMTA4MjUzNDc5MDA0XSwgWzE2Mjk2NzI3NjAuMzYzMzMzLCA5ODAxLCAwLjM1NjQzMjA1MDQ2NjUzNzVdLCBbMTYyOTY3Mjc2MS4wOTA4NjYsIDEwMTY0LCAwLjM1Nzk0MDQ5NTAxNDE5MDddLCBbMTYyOTY3Mjc2MS44NTQ3OTksIDEwNTI3LCAwLjM1NjAxNDk5Njc2NzA0NDA3XSwgWzE2Mjk2NzI3NjIuNTcwOTQ4LCAxMDg5MCwgMC4zNTQ3NzIwNjExMDk1NDI4NV1d", + "ok": true, + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "status": 200, + "status_text": "" + }, + "https://localhost:6006/data/plugin/scalars/scalars?run=run_2021_08_22-22_53_04%2Fvalidation&tag=evaluation_loss_vs_iterations": { + "data": "W1sxNjI5NjcyNzg1Ljk0NDQzNiwgMzYzLCAzMDIuODUwMDY3MTM4NjcxOV0sIFsxNjI5NjcyNzg2LjY5MjgwNCwgNzI2LCAwLjkxMDY3MzQ5OTEwNzM2MDhdLCBbMTYyOTY3Mjc4Ny40MTgyNTMsIDEwODksIDAuODg2MzY0MzQwNzgyMTY1NV0sIFsxNjI5NjcyNzg4LjE0NTA3OCwgMTQ1MiwgMC44MTgwOTU5MjI0NzAwOTI4XSwgWzE2Mjk2NzI3ODguOTA0MzE0LCAxODE1LCAwLjg0MDAxOTQ2NDQ5Mjc5NzldLCBbMTYyOTY3Mjc4OS42Mzg4NjQsIDIxNzgsIDAuNzE5MDE4MTAxNjkyMTk5N10sIFsxNjI5NjcyNzkwLjM3NDY3MSwgMjU0MSwgMC43ODg2MDQxOTk4ODYzMjJdLCBbMTYyOTY3Mjc5MS4xMjQ2MzQsIDI5MDQsIDAuNjU3MDg1NDE4NzAxMTcxOV0sIFsxNjI5NjcyNzkxLjkwMjEyNSwgMzI2NywgMC42NDQ0NTM3MDQzNTcxNDcyXSwgWzE2Mjk2NzI3OTIuNjQwNzQzLCAzNjMwLCAwLjk4ODg1NDQwODI2NDE2MDJdXQ==", + "ok": true, + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "status": 200, + "status_text": "" + }, + "https://localhost:6006/font-roboto/Hgo13k-tfSpn0qi1SFdUfZBw1xU1rKptJj_0jans920.woff2": { + "data": "d09GMgABAAAAACp8AA4AAAAAUwAAACokAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGmQbmUAcg0oGYACGTBEMCu882RYLg14AATYCJAOHNgQgBYJ8ByAbB0Wzon60XsEcRckcrcr+ywTtCAu7vIkKUSLAEkX79qHYsVrOIXiSMp377A39RgODYjP02tCGSQRohCSzPDz5F++ZOzNvvxxoA3ZwF1dQBbkTWP2kVEVi7w/83Hp/Y6PDGnqCKCJlUaKURMVGDUdvMDJHVIg4QBAkokTKpsw6k0LdbmmVFEuwwOtQpqUCDdCJ2b0GBxDpf/9u9j+XQGQGIl+tEq1VOr0S2T2sZ9/yxZFpIOkgKdrXFN+0M4foFz9c20sDSrJUtd8OCK1oKHa27U18eptmu8+6n1sZZrwh1iFPj21mdFClKFNUq/93o939u+KbE5lkB2SZJB2R5cAGsWTqrUM7zIdYBXl6atOlKtOWiEXbpgo81PXj7dWfHuECB1Jm2+HuZL8f70TNAaYHlnBAUZgNm3JkGG03jk1xP/499lO/h8a025fRsa1BIErglKnQ8fHzfnMpUDgA2BYKi5NUIDQ4QIQIgYgWDRErFiJBAkSyZIhU6RBVaqF0ewuBQAEzgDkQoECEQIBppKlg2GIrPTMQ2TfEnwgiB/rjvUHkMOfAGyCCAZD/FKAcur//DWACClAwQAGBpUlB5GIAtizHa0ttKaeKQm2vQ3WjLhTVQKGY0BvBgRIKqVANlwisjyMh0ppQ1Deh+NGEqrmqWJVvR6sBXG61pUbIcN+o7fsN1YWeG1N63ISEowypb1sGWKzY8DpJ3CkSTjtHmhx5511wiQJFylRcoU2HHkPGTJiyYMWGLXuOcuTKV6Bbj3t69ek3YNCQYSNGTZsxa868FVu2PfTIczt27dl34I23EJdyAwMFfBTxUCZghQAEb+JI40oBPPzwTqYFqckPl/DRyMe08rXrBG3owhTmxS1yn3W+YpMv2NPI6flaXgooRLGrJy3cQy/60I8B12qP3ccaHmAdG67NXtvCNh7iEXawiz3s48D1olde4hVeu970wtsMwjaH99Tmno4VDtFZAeNSrlHIXYr5hnI+ssI6gwG6/lZhafUuYcKQGyyyk21O8pl0F5anRKe+hKRJzioM2PG5intH5jlnvABOsOE15+h57j1YUvnOZcECFrGE5QH5YHFhVcVk89DKF64D2tCFORWrpzfpHFxyGfkocG32wha28RCPBmallW9chzZ0YY50bGIL23iIR92j6eBkRZYtblimWt8BdrGHfRwMjMGVcXiQh0IUU5XwBm/wBm/wRsbArPTgGMKouGlGscxMtljtDPousId9HHCk8eGjnchRVvmebT6Bxp77ruYXziqNopPv7ulXENErGQ4s+RyvBEcuYqbr2GmL3GDVUKy+Fj7ZKiznRWelhByWnEOKchUiN+kQOtihuhEG0J8bccBhQuqyeXrnTrum1lzT8jWp2mttvd+rXmrFWQVIfwX5paKwooXeF1k1MKMFSTfeC7JJvONjX+SHa4rSa/WkWSiSb/fh3hfYv4gLkMKyVHDm+2ltX5m8yJ7Zj+T0P384/U+tXkEdC+GzK+QVhIv8inJt93vWy/aEFWd2g4oPFenBdtqonu5m1d3tTZW48eREz/uAHZAvcedZrc/Z2ZBl7ZbD+VW1lVH3UtjKlWmNTW66A2eK6YxQXGCt7o8ih+Tr9u/et9hB7qnKD2j5a5i4Z9KsXOmQ+czviLa92Z982e1vGSa/gQdzLk/G24L+OfYP7itOpkh5++FJX0EunXxrrYAP7qX7eG+L2sz/9h83iBO6mH7laRzKccmdjdbuSS2w9+gvrXKTz/at3rbWE5gza5LxXcakfbfXdMP6xUO5j0tdabfOe5ev7B89BnJbvZQWauCDDYLpIrhE4fmNdpIEBpLkMbtERT9r0CJMGx6mFx9hzMxRFh5nE59gx8F/UmJxOQqdUvxdSrdHznnugHke87CFcr5fBBHkUDiUWBQxhYnL7ZQICTGkZHFOVtIKkBMhL59LsrssCwVFKCpESS7KslGRk4ZYmjLSyvxqzTAFhmqCgSlEM5ORhbxsZGYnD3uZOcghpTDmeEdBeciHcr3VYKHCBoFwKLkY0WMAyuB/3IaMwpg2D7FgGYsVitms2oC1GfPb8giT520GOw6g0Rsxww33kQ83sgCGM3wFS44oZ1gUKQXJiXJelIuZA7EZFpjhhxdOWOFqsKraELpcEJRAw3BEM4cIS9lYZwxiC5jAdGQXC1HSRElvI7JkE8AQbvjghu/I5y6KAIAtKPRAwQxrYDw/guAGOsE7e7/wGsZi+ukydWme9zxdUpnlFWHcdBcNHJ3NTcyqyq1Mrh6ktI2hnrTtVQtpR0P9yp1NdLkOk6PJsGPejIsG6rax+x1B8gGx/3dnPpA8zNPdGS6AQ2nG60cE+fiDkZAZgArFfpACYdfq1hcvVOAKcZBlx1exPgowcdUHjmrjNRnlbeurgqLfPvZhR61kpJob9SfpQOg1EJ7ycT9eWB0N8FQRgGw66oOyZnCnVokV0Y9MCYsG9eo0atLspha32r0VRNb1baECBKJr067DHZ1QEHyOALWRiiQM6Nd1OVBWeGiuLyOEPpR6zFPA6sDmVoettzPUAlWw0jws/AU4YFQcgIPcDGibdDpcqEGDNV9WLeXh2bCAchCGogdsBIeBEDBThEr5t9agCYv2vfcPkSmmMRFb8XDMhxPBHcUdx4nhFHDquONwi8fz7x+YCadSleJzD5m05MCHU8SkNy9OCHd47Mvdl/yWuwRyBEsOg/wh+PTl26TwTf3p/B0RqEKRBXJh7fST5zENEFDpawHrYY+J1v7H63WjdZv64frlx4i1YNGSZSvixFt135oH1m1IkPiD9gknSfbCS6+89kaKt9gAJXsfe3UUa+YWFWOchEZuwb24FYuxL7kb9+EePIgj8RAexwPkCZyKJ/EiHiQv4X68jDfwFN7EWzgNb+N9vIAP8CHOwEf4HK+SL3AWvsSPeJv8hLPxM/7AJ/gTf+Ec/I3/8RWZ4DySwvflZW3R+c6yo7CT6ILyeEJ0UXm8I7q4PN4TXeIczxcWiC51jpcUlhZd7hwvKywvuqp8vJLo2vLxaqLrnOONhU1E15ePtxDdWD4+TnRT+XhxyM2+pcAIboFAYarPf2YX+CGpvIeFOPMLceFeq6w/gTgKoAOPf8ccgYGG2FEPQNWhofLt/UALE/2mIyCoiUWA8u69T4ycPEbW3F4KAyVXBYbCtFbWDIAcu3egbYgijIKBSmtD3rZHg70UQqd9HYL1m5HgXPSvCAYWDOYwKN7mdOwa82gYrBC4l+W7YTuzMlPOrQBlwS/rf4hsqNQT0ZlDuzeZesi9DmVE0YpagF3r3PY2r9MVxxBTw2Hco1tnXKeDMuJAF1gsIMfjOmbAN1QXPTaSPaYCbcTshjElittS+z/nIl4/b9ZtQGSp2g1zHq1K41Qq7QFeCq6YYH7Dc1act4bNyMpcOWb3gdM0dyI+PWsGO50zEbTHmFCU3YtPIP04/5T7OCK1C77qhjQKb+TGUupLBOix9GHsmjPRi4XI1AiCigGn2ZgTpNVfKSstJaBY0ohrqVDeESsYjADmyaEiQtD64s8Ll5k9zYqF67Ram0p57DSqUwp1KYL2qu0iZU4uuafHGZIUzA/Lbp1zH7cp+VncGlW+u15Bul4rudhswtRWUi+ttiILG20q/+z4wOwPqX+o9gZy2NehB66FNVd4NRro0wqm4aTRZO/iiU0XCpl4YpiHYW0aOeEH8nhtpJV6KtIKO8h74pAu7IpgKUkDYKbDl3dUHnW4w08ZXtMxr2jrw0QmQAtrbcEUdRrS9zvQ7u9W6ZKaqpIdPYcBZ0OfG7xnLXsSYjof7vz2Ab8AR+H4rujx0VQdMg3PM+cokxlNDuMJMWHaGNJ0Rfk+kAWTf1009M98UKgRNLn+y5AIhhvD5j7PKyKGSIyXtSqbH9XMK6Gf3cnYdAy85G7oXdgsD4irnbLXImb7v5s3q9X6r1HsSfXtaptuM9pu/wkHteuoCqHP95OsuN1HphiTTkLsaTN5ZnvaiRx4g3gGLpd/Yi4bLbK4pKJVuFnlZkG6Phpl7KRdA6SrPzFppuJzTWST5rbdgy5L0O4MJlaMC7r4dPbKxEIQmEzFlvfnruhciE7XzhrtnkOe0USojrcyvQeZQNpa/Zv9WoyHHeiuGrEKWY4fYbJraxfWRlMprZXocIL5lOaP/8zbtZLTcCxjYnGpWmCj1FRZ86AMand3Su7LE40xRdnVeUGzTA/dVbM8B5hoivq182/t2V/4mirsvY66MUq9uJDrI/g0Ot2gespzFY0XL7+SKcKExsowxTf6JqTl++Ic0Ok5PDvF4IxCK2qjkxpNDy4QtjMvMMYELnsoDMhe7AriwA4ekL0R21UGh9R70/+ZdCbZ1t6gs4yyUwCzDGFZ5XJqmDs5Asx0Le2pVHLjxclmg04GIdxQGUMnwdL8LFIBDsWoW3ktMIWwVhnP+4K6agDowkRGVZn8jsqOCBlqoKCYlTjJz3k1eODW10lDTcflpoMhxO4l6MrkQSRsdNbMPBo9bNEwPrOSdY6ezTs+lrZGmnpQY/ZZIC1DyjNjOjqHlpZRyyXNd+ZVEMoleF5+i9Vxwi1foWkjhI8lwzFbKbqEPY7idhBST44a75IK9XCsd7mzTsbOuNSwXvCSXSlRLY8tArQFhNT7n+U5KKjGuluuQ/ZkOccGNfHQysY5LL3hutJgXHpyhEP9zmOPaK8fLdSYhEwHuoLbogcvj2XudCGKXCynsEsLUlkBrOEYmQbLUW7gl0tzpqoAJgS55SycCwUTUxqeEosN32jpJNHJUg2MzYX0hse5st1NKhhUchjvkL7ApR6ioKFOEgMPwm+dk9rkGla1ajkHb8jlUGaeBBsW2Fa5mFEZBnTqgQtLmC7kHZzRoEH1BjoU9TWd+cyswCZCXQRO208HPaFk9UL5zFUf0zWnCrbDpCGR0swhjHlHWprAOZSksdvo51vt71uyWcnolYB0FTuT4fm1F49PRbA8XrgjlScpL4Dn6vndtJm/jkn9X3OR9fsWNuK+x+ekfHmC589NrdoMGrktOpNFk43qvZRnTTvP9zS2aOEm+3h2ZsKu+5T0mOZsb6mU3pKWWl+4/ZrZZUSXvhLoOI2i2WqKfS8O03WdTT28eU2AjhSHxLw7ypQ8PhCW7+SNpPBTCiTHkBmJMgTXOHeHc2FjD9q7na2WxKWa8Yk5HqujY3lyNItQQxKQzSTMW/NlNYgmwItXI2cuqmaGAFtJSeOyXAt5YPMsU9Eetk5dMQhV/eq78AM7ohXTU/AS/9O9Ep7WG1s17oShrQgNnEst9OGam5O8LGUOojRXOb4aQJp7GJGWL1zgQG0qFYlu8B/F+tnM4XtFrz77kQUzRT2Gp1WeOBsxdrozEryYyTMRuze2TcCmETjB3TJ1cNQ4ZAHzQNvuRQW2dEdzQHo8r3I9gflbwYhaMyM40VkBtURhRp+mw9yUSsks19NaH/TC330nLVdxRVYWp6q6aogZW5i+zlWTuif/GE/EmPgYjnB8YtJsmytjbBqKvxfd5k1nKkAixEIK1bB3blMaczMgwHpHM/7FTMexvWR5QTEuhYW6evbeSbd+IbboMFVAe8GynImOj5qeA5mvhjd1cSnRSK4BKtKxE8/7KgECClcH07ranaNROF2Zd7NSPN5om6XkLAC2mn5Ot6bcI4SnGLiiE47zBL6mXXjfr2k0cgwVFv7qId4RM2TCrd18jzs8y3QmtDm5arXv2itPt0lvtIeMAYY+hsbbAYaRO0Yj+D0reacKjdgnIfZoOJRLArdDYUx1XscH9BaOi87p9QHn+UDeS0aoMefXqVE0RreFD0UKekWu387+2XdNugWdJAwqXElQFNyie07f59F/9r2FWrftb4ohoAjbX4fupIy0TpVnmp0jJTWTMzfZZwgztzmHDibJZdXd6bTy3DBKVoJDcDnRINejdm6qnX0A3z/Ftv18nFLaSa+htRcA9n5hTGXzj8rmJK2o8uYwak1DihPWnkC2NHejOGnbu1PMTD3IbuKjZ2Mqm75VN6ZoPdQlOTI4bBAsunbRdiIEWpi5B7l+P9A5JxnoX76sQVhNxMLDoNa4qLOtKPVmZVhmXUoFNWPZJvse6Udk88RBZniWgf6CZcDS5/vtXmF9pUFNA7bNemqa+euPV0Yr8mM7ytF8kqEJdTGuf4x9dAy8PWxcAsKB42QAl7QNg3g+AVJ1t0jF62ZU7cNGV6WiO/DfVeTHlh2i68RcVWd6EbrrJsR8QJQe3mrXjKP00YWzRv1Jx4S9RceoRilH9RgI17P+jSaVgEDOC13vY266oWg/D8ZAtQicm57/45NmKmvSs1JmShC00+vb+zzkebtv+0oIxHBqytmEoGJKgsKXgNPwCf4JZGqdGDJa0nxoNAcpYT5i2LNEuOLvKP9M5eHG3iXUaYzcjuL2xo40+hQZ87P6X111zf/I56P/NzJWVdYi8AO6KIDBpWb7vr/LB8KZdp/OU2mOPVYpVZW0nDu9+WTqjek5/9ipp8udhIiPFXfyZv6AsJxwmHvRdaMI07Systy09tpEip/fvWk8dWJnvc8zjh5wJvFkandU7+eduZgN9+B7YZTU4dbCkpbygux7RV0UuBC9toPf8aX43lI/feJ3rMSJbRFVeVvYfKk5vkHyk30daFg2/vJftb/zZ3Hg9SrXQABXbkNhRmn5+N3Ktuli8/DTGsog39nryYE5I8vJpWjSYxMw9JzpAc1zZzwichkj9YGS6Nqiid7C+48l4NwJAyPvS9NaHjW1tCyCap232J53uFidjhKhH1TkL/vFtntLhJ8uGIzo/bO1vPp7sy8sazjitLdEZLtf54u1qFfrmBPeScOtUoM3BXpqK0p6a1CuGuEt9QlJjZWxUY0lyYnNpXDxWvUV+34CKaw/0v1ZQuaN1xMxMdufZUWIKYap1gLgfpoBzXnMYoQyQBP303jc/aWM1rnb2tD6GBZpd89EyLVRneXaQiNAOUD5mtc1jHQG8rI5E1JU+eVQZ1rz1DAg5yBBihnjI5eMjjqphMfRyJTsJCSQjNRsjjW2TEy1EJ37ksJ9HToT9I+3iot59LeAmHgL+FQjDNnOP1sS/J1D8Ly23sMDackfuec4qoP/DtB89ANO66nKXmYOMIi0pBZ+YJrnybUudFw1WRmNFvxeGqE0v23Xdqb9qGH8rKzHT/en7fWsIqz8D1siX33951w2Fakb/8NDa6JOj+VfSfQ1aVtSNV33AihVFeblFUQfD6IH4bUSJe2CXOdRE4ZuwNBbX30c6vMLrfc6EXGoeDhy+MfGY+9eM7/y7sqMRHppaSjBqAjVmBKf1hrXJge6HyeE9gQ+v6j+UZV4Cgb6RxLP/K2uf8Xxm/9x2Fl//MQrcUz7790zo8Oj3QLdvF+1BR2HqsvPjSSMlp09WnOP+7zWE759fmmGqF/cZ58AKI/cazLh9EgBDD3ek+VkEyhXNzY0UgFDT/BkvdAA+tK3rthw4ZtuMtdknYHh7nMyDqhn3LvCU1SRioXahrm3okwt9b5/V1KTK/xktHGKlEQPFLwPu6d6jz2fSlOlhYHB87MEuU562L8f3n2dvr/zaJJaXldekNp6FymDfytz08xfP2NuqRruEudECd5T+SDnvuihCxh6GPB30kXzMKKdmNrV0kOZk0X3GBxFx/610giGeeALVd7s8eMwui0l7/bkSSgYjCRPp5xDapr+XSZeyJ9Mk0VqjaAqVRw1EsrJ+FZicfbDabZC9HupheWXp1lB1siYx1r/sIM9mJ3//fiDn3tQR29TYcG99ptIOBjEJC9lyycaMO2b6Z4CYwHzelRNuiSM1fAcuaEZqUmTmQqFsqUZ4V3l0muJ1Lp9g4M8u//mS8yz2bSateRT3l7ssdL+kyElvbfTikeb2mzhCkIIaUobjXDXyfFsaeBZepC1SwqfpIblzd5paRjPpZDaUhO9pv3xFT4tPIvPisEnbjyKWrzXNtg8nwfaGlqfAaNFldX6ydMJdM7Tn0N25OaLwIJ9vp8Mj16HbnYvz3gszXZtwY2OCNrh2t+Jonv0YHpFJ8BYkuSzC+u8YzIk3jiZ85vndrgCxSMEzenBfLUB/2WcyOD/LyBYUIMeAeJy14vcc57Nf3iW20BtomZ/fPZ8Pgdc8g6titBwO2n/Uf/DraZlwzv3WA8h+wsMrzQ9H1vB0QciK4B9s0LQAcZuHUBj6EFi2LNBANgoXRXTJayuyNy1iDnPzqXA0w9sJB4EwkUc3i/+3odDbi98nglmghYPg6uK8YiVT+nQrfhy7N3Xm9RAWlxyeE2kDRmi3/fd7ly6g6qCMpw+23dzSl/Aaad3D9qR6QiSbQIZVGV5/jw51f88oIEhxxewQHb1oz8devwfhox6UPeiIKDC9xTxhfXsbm79SzhjFN6YhiUFMLj4VffZEtd+iP/8r5L0dSk+rX1/lbElgDGiviSyuv3l6onF9gPwFvv99PTwtn+LIxmw4MuQ4V/zpHdXEijYxbp3BY/sRn7brWwXNLwBFd6Ux4nUTwVnSin/r9MixvfZXqoxCHavfKl0ytZQ1NO5FDvAzfs7sXuctz6ZnaGkYRQ+bXS4dMTWN7YVqFcyuR5SdPUJ9UtAuaA2wFvs79NTw4/8b2NKfP9bfvl5ym/OTcH0mlZEye38BjqqNMm/4mHfzpl/kT2AeWzHv0u4lxFJ62fELRer4HTX06e1aRRGJ8iTkElJjyc1p5wK2iNrJReOUxQoaZeSna2nPq/XD9z3FXrzM8rSLhxHXPqk2ud7FJPFB9T7xcVuqbdCKS4ptowCWKCs+4aU5RfMTH7yy4DjHzYJcOUqoG8rOnc43wD15ctuw8QgOyx1hTINmaGpqVFIWzVz4BxlBVKikhL8qqLEIvYpCvuF3TvZreTa6XFDtoeqANaSpZT/H6akbbBK/RQuo/zcTkxfZ+vbkplGpn7UVMs9zQmG2c7X+XpXTv+cBdXjI76u+h4HlZwiA2aLhCkMbHk88vAkhoxebHpfeKPMU8KN8bRdhbNPQeMHPLNHt/3qMdm+O/MoYkFF6wP4/WJZaXyXv+54j0fSqdzDs6DpHUig71uc8S0OwwUfkBWCkJsOgyuycyB7ldea5n1MqdxAz884aq2+oXOrPZPiWB4eEkzzMDMOtlLQLjXVDTJLfljT3v+qK42C9agOTAgv8gF+vCH/U5enyzaqlnpHrzEzOD81ppJoqSuTLpP8cF412bv07a2OKWRsiNx2/ieD+gNOikIgvKnly8mjCqsrOAu7KVCh/Ae3naAzl5oSgYv3/CE/AQ/2HZUw3jsKBG5Xm5lZbl5rAm+tAhXex5zoot3giRBLl5v+RNPDxYZdPB0+3eQdpUUf3v1Ethq7d4YdXNasiBYnPeWzhONkYuGV2yDe1EoCTQ1z57WGsJwGmaZnvY8YDzwOMHvQ1fCsUVbY4LP+5bVvd6/f1fu4iz7xyQgE2PGAHcADk1pogz7x9M+QGnfza03ps66wQbNs/e69J5ijW5nxUW/TswYZMHD5nVc/GH097EJnpeUpWWuXIF9vyKvqS9CJU7Y1vqbiKHvRyj3cB261kSBQOIwpD3+8X2/eMr+a1I2ojSlMfgGMKXOjOZy7lL1ugdUjL/97vHK8R+AhZbuYc3IZU+Ktf1hz4pj4kFtXrV967Hm4SArb82ojxkz8fR7dTKJTD9/0dK2stFET83Kiw3PoJUyiVh6gSY/X15o08nteW1BcZmZeXklt2N6Ja25oNrOob6pNbalNb2oxt2xujW56uh7SWF1jbqEaQ02Jev8sJSr6SWrku5TUmHePEuFJYsw74Ngi3k+hvbtsTZgjWBHUqeouVi5zLtaX09+lQjk7moKeonyjgMbH226hKUSczTmn1Bu1vwY3fYYuql2K95sjI6ULrW2VvSl++ur2FfrOjrcIVjS8W2CaJ85cyjaVWIWMrD398Wyekj3YVVXXkxRgqGxfoFsuOSrbR7BML3znzRYUYG2q6VipO3PR9hCJLdbfwiU+qOUiMOUF/rxpndfr7zz2/IMEmjyOhTVVkl2rnTatd++frqssdH264RVZlW6bEF5N9CJ6Bss9DaVXy53saGwQbauX7Wivkz5Ob7h5srPinNmtmXvWOhNR2hP3rGfGOyx1libGdRY6LSFp6JWJhXdiUGyg2436kOpUZXNDe2MbguZ1LwyhLiYhLIuWoGgnbKFvdN5f8XVj9H52BChEx1AO3/GSBPwGxxIdcbIztJBS/v/EbKKjXu443eAEvVa+nV517njHzcbj9DrphQ/WLlqonLLQ8Pi0K1rCF4mFjGoJXITVbGsdbZtem05jD1MNc4vrnkgrnNO44u3sDeJuMx7p6W74DNpCVvYELTuNoGZlGWduqaZhbn3tqrU1iPEqJxISu0hd5YTyLpLAf5/V8GpQXKioe+Wyp4/2FSM9Q0t7K21PYln673QqAR8UQni21AVcd0wtjBAHLSUVc21jPUdtBU+nUio5KotMuKRrryFYJZFDKKPGRFdHuHupeBiZWdrpXqMtaANvF2TtC3oCd65C2J3w7uS4Iv/DASiKgg+2yPnWWrdFGDMZMFvQxETMfxQQdD91jfnv7lPA0KF67sSg0RPNx0YD8G2wli/frsw7Catv7at6UcHijBXj4QhYLPQqONCwUfPiAKZAYhF9IDuHPlDuUHS7Pzunra/Cm8HfN97D1T+W4hgQEDflnxgEYq1IqExQb6+PkUdsdHxqFDk9FQmkIHXLYzfbZyZvkTynaQlmmlgiop5oYD5r0O8DyHDFme3FZV/kpzsRugRw+gRtYfsBc5ksdpScMti144kW9gaG5vZ7OcqT2zAwwHu7eSdsy7wX5+RW4ZG00XnXLCfBeuSNT3NSvRrdc9/Ed4DQFdVyTEiheOyr4JjBHG6ZFzOxq4bpYp8feZkWpXJ/aXm+0qU1Mlbxvn3Uns9PV9Am6hTA0Mm5/uplg81CXc35aOCkuE8NbDQXDTSmKIg4akYJGUtfMnEfSLdKMsxe7ag16zwXKeqmVySnFpoT6aJs6dsVb5ug7xT+xMw+PNj2O1oGDLn4UieIik6KzjveqU09jZllD9vnUBxWcRE5ETF10Z7BbJkvOrrC6V7inoqufb6BY08/IBteX49MDz5v6UkJkrLIjFXNdLO9Z7soCck3Q5g80M4xpEsnCuM6RnkaqMeKK9tBtlPw7f+YghsVpL/TaRExq6HU50l779gn3Vr0FK5J/GxoeJoie30+Mslz/poY4aNWfeowRfY62pVfSMzkliOpqn25x926vdwNn976YxWuPY/bD9xX0TIQ/vOx+ZFRP1jNr3uEv+s5/QoH11l7LfeXOaKlIb+2E9OItqcMKh1cZlw1fd4Wkm9o9qsrCZmK6Jy2rZr+OfuAxf1q5zshOQE1UYuqqR9zoOq/9Dr7Hy1IAcZKil1g08N8y3s5CLOEdZmL7zPEURQo4JsJen18oaWfcxLZkCaFlnjur3ml8R28Wj9B9hyPJhPO69JC8QHsn4LY4wefMMLT8zvP2MBesozyaysxhbadohynGL6WFTG+92Pb6feRnvFPxSv+wXLGcclfkh5lXKYqRW8lp68z5QqbaXz8a3Xl2NdFwdGJ76rj3xe0n03E3J3mKY86mt3QDZJ3vrCQGrrqu3zY3/7VA0bzACNfHyNDP4n6eNf7XU/PQPbqVVkZNVW58xpXz8lcUwPpznkn30ATvUyfy+feXrJG2RHJFtJqoj3DElKqVy8Bxz6Plqx1ECoxiuxrp9METGa6mnLWFFRcbDB+GUj7ozlNbjAGQxEZvxSE951YhaKSa8gxm/ZRcQDLEFRKDWV1QdZ7Q7yrqQneCdE7ZYx3NDXDOxvDwWneWE+xUF6xUE9g66CLRUbNa57DmwyJFO1fdgTtPVOOR66G+9HGx4kgvCizV8AR//8Pn0RhDg1ZD9UO2QxxHDnzv2vcUWYi6bjPxIM3uzU2NbU1oBLTqkZQg92NOy53SLd6B24mpCvwEkLkI74jPn9c/myoT9VCckG0nCMu7qSc1KAkq++PFKi52VIc9kMJMBvk/NU2z627MPmw72jvvy5/N8gb8xvJF56Uw+VH7+qbt4rCayiA6TOBdkF3uyhQEnz9S5Gu62SNxpzGuNi8BqQyszr7dkKifBav9WANtAq1on/LDbAOt7r9P7D0ROr/XlzgibSK7PXszUBfTRMkJSOiUc8gMk06ccGWfGTn6kmHsKykoNBMWmJAUSjW1QOr7nhN43aHvqO9jemxdhD9fMRaWZBfxyY2MIVGDswrCouvqElRXXm4O4GK97rsoSAl7UDwMdV1JBga2ztA9vqNdZJP7561OYRpKGvZTmoIm7mou5eRY+PLyO7qpq6aQlNaNspumUGh1Kxg08Ur7gbVeH1VdcL1WjddviYFW93ruuY6ikrWmto6ltrAb6lpFR2Unh1MKa8ITcyuQ7I0V1bWZoAfzHnFkTpE1UHJUM7L2dNY3+lGpYMbPGjrJHQW/YkwHI4ur835+mEdld4u8gCr4fkBjPDkh1pCvMFeCotLs1Qy+226pKjn24lUOg+KlxZjYHX1+TUKeellRQATRk0xDG5Er1gb9mVr37qKlJV6V1OVB8+g0bkooqnybdB7XjXYWmUGgwMOUO1VyingyvEbQModoD7XT5BWWCisnii3SR2uFx9cTSCuRQOuIU2kmdwkLeRWSetBgQXuxGpOimlVLwJF8Y17UBl0p1non2nuqJ/Wq9mVUfSLqkPcFVKe53eHRKu6f8hVcA8qje40d4mX46y7eta7BzFwp6UD8TJlZSwrOEtONUmraBE5+wfiTvOvf6Y/iJHl1WxdFpBUKYqEgf0A3Gm+ES9LmUqqKudNDXKQdUA07FHEnSajf6Z0zDavZoazxAEYouWwJNrSDCDa9gDiThNDvKxUSFL7As0GQStXDOVzyUWIl2kCB0nG1MO0wSIABnYKuNEkemCPZ7G8mi1rAY5lYm0PBXeaZMvrjWVP5VeBlQy8tgGgqpfacIJ9V4L8f3KeiS+5K/ajSLaLlCYfjmjsjiq3qtYyAaqrWqXTwNBP7K3ccAOCO/+m96iI1pZc+USQs3etLtfmHLIDD/WmG6xYgLvyRwtQSjGKoqu3soz0SOndUxRKtxD1QsApXdA7qVjIgaGMgbvpRlZEfVoyYRRc0ekoaB+PFM+IDBEkUMxP7ES9DfYx3bi8zUZXgVzMxgI7KLuBWou2NDvzr7bmmpgHCEbzbv02EhSeb/bNSIsQZXJCYoPqydWMFIlMZwBLgnbP6Dw3XMFMDgAV/Rt5aI1DsQscJup1rhmwoctZGwAq+rdi4/kclLX7FxUk/OjM1Ucy6a+yD8QSvUcpqM/1bdorWNwAQEUwINuV4wqPZmYGqOjfxhyHm+hW+gAet+kRIFaeV/y1GD+UfmcSngKAxy63FACvH5NPf+L+rDGLTAkApkIBFDA6bMIGMHXDFfGvBiva1UN9P2ncTCu/bDfnC4pCT0ZrYN5IAvpLPu0NYrFDjnRpUUK04h1pcXRLEqXQIVNeyqpnHd2rU4B2eMIFamhEDPThVQxfWkWWDEpNUD99H3ntpLBazWxkwK/9g+Xbge4uK7Yr627p0KOmR1Jk9aYiIWp13Wl1Nku4GBjesLO3ZryEt7cPqzek8+ls/azaJPl+TXV779hIknLbc7HNEGrTbMprNVWcNK0uqDvTr4GQ0ObetLk1kpJ2jEPzR2zH2US9K813WLab0jIrr6xm4bw+G7B5JCi/4esblQ1LOhgx2qbZ7ICPbIJ294V1k9jABFfqLuk6D9eMbBm11MuY9jRzD5U1rO60Zovcstn3aT4NR6j0qWjrCNVP8oDnXVOU1TrUZi9s8LIEr6IVCxlNmVns0pOHpxWqwlqg6jrPtHxXUz5xwbOPqMUSa6WAPidgYAO34YLg2sJqpI27SbPHbnMPuNvoCoYx5q1BXktzvQWybhEqypTGUQjiyI1D9VUZVEGVyqtfUDFICi9ELtydSnEmEW5cw5N6GA/F8mV3UfXhjIjn4lzzqcQuxUZi2jLVNT3SzdaVoeLsoNihhwhYQguKIMIJKjB06cYuSyiCCCeowNDQtWFqk6luS9SWOiyobTG78hIGOjuEGWf+9R3YVGGY5Jpqak/MZjoi1Iao/bQjB5apfE7xDOYqfH22UxgmwSukdrNd4CDADzIIsIaBAMwCAXUMLASYggANacwA9gAvfRFCHPqicAi2o5vsDNAXQ0ycjgVpfroczIxQQ+IrhD9P7jwEwpElTebjwtFCkiER4QfWdoMrKf2qAtFvwsAD3rxQvAB4/oLhuZFigsQFSSASHD1KRpXtLgiRM2Dh8hfAk9/oG1Ktci5SlOS0F8WMdZZtswP5UnAuOshpKc58obuujIwnhcSf+7xEnlzh3ZDRw/d+jh5tajQYMKXhbL8+6azgxtKLmxoAAA==", + "ok": true, + "headers": [ + [ + "content-type", + "font/woff2" + ] + ], + "status": 200, + "status_text": "" + } + }, + "base_uri": "https://localhost:8080/", + "height": 822 + } + }, + "source": [ + "%load_ext tensorboard\n", + "%tensorboard --logdir=./my_logs --port=6006" + ], + "execution_count": 86, + "outputs": [ + { + "output_type": "display_data", + "data": { + "application/javascript": [ + "\n", + " (async () => {\n", + " const url = new URL(await google.colab.kernel.proxyPort(6006, {'cache': true}));\n", + " url.searchParams.set('tensorboardColab', 'true');\n", + " const iframe = document.createElement('iframe');\n", + " iframe.src = url;\n", + " iframe.setAttribute('width', '100%');\n", + " iframe.setAttribute('height', '800');\n", + " iframe.setAttribute('frameborder', 0);\n", + " document.body.appendChild(iframe);\n", + " })();\n", + " " + ], + "text/plain": [ + "" + ] + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "Z1gPHFabCxB0", + "outputId": "80483729-c079-4f00-bff8-8616bde20449", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 35 + } + }, + "source": [ + "run_logdir2 = get_run_logdir()\n", + "run_logdir2" + ], + "execution_count": 87, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "string" + }, + "text/plain": [ + "'./my_logs/run_2021_08_22-22_53_04'" + ] + }, + "metadata": {}, + "execution_count": 87 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "8xZLsJphCxB0" + }, + "source": [ + "keras.backend.clear_session()\n", + "np.random.seed(42)\n", + "tf.random.set_seed(42)" + ], + "execution_count": 88, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "Az5ySo0mCxB0", + "outputId": "9ea3775a-0b5a-460a-f5c9-7a7611dc222c", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "model = keras.models.Sequential([\n", + " keras.layers.Dense(30, activation=\"relu\", input_shape=[8]),\n", + " keras.layers.Dense(30, activation=\"relu\"),\n", + " keras.layers.Dense(1)\n", + "]) \n", + "model.compile(loss=\"mse\", optimizer=keras.optimizers.SGD(lr=0.05))" + ], + "execution_count": 89, + "outputs": [ + { + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.7/dist-packages/keras/optimizer_v2/optimizer_v2.py:356: UserWarning: The `lr` argument is deprecated, use `learning_rate` instead.\n", + " \"The `lr` argument is deprecated, use `learning_rate` instead.\")\n" + ], + "name": "stderr" + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "WGVXzch-CxB1", + "outputId": "85667259-4bb0-4df8-c9f8-77f9391272d6", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "tensorboard_cb = keras.callbacks.TensorBoard(run_logdir2)\n", + "history = model.fit(X_train, y_train, epochs=30,\n", + " validation_data=(X_valid, y_valid),\n", + " callbacks=[checkpoint_cb, tensorboard_cb])" + ], + "execution_count": 90, + "outputs": [ + { + "output_type": "stream", + "text": [ + "Epoch 1/30\n", + "363/363 [==============================] - 1s 3ms/step - loss: 0.5530 - val_loss: 302.8501\n", + "Epoch 2/30\n", + "363/363 [==============================] - 1s 2ms/step - loss: 92.2124 - val_loss: 0.9107\n", + "Epoch 3/30\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.9291 - val_loss: 0.8864\n", + "Epoch 4/30\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.8754 - val_loss: 0.8181\n", + "Epoch 5/30\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.8495 - val_loss: 0.8400\n", + "Epoch 6/30\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.8087 - val_loss: 0.7190\n", + "Epoch 7/30\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.7832 - val_loss: 0.7886\n", + "Epoch 8/30\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.7452 - val_loss: 0.6571\n", + "Epoch 9/30\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.7310 - val_loss: 0.6445\n", + "Epoch 10/30\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.9471 - val_loss: 0.9889\n", + "Epoch 11/30\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.9150 - val_loss: 0.8715\n", + "Epoch 12/30\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.8971 - val_loss: 0.8913\n", + "Epoch 13/30\n", + "363/363 [==============================] - 1s 2ms/step - loss: 7.9472 - val_loss: 0.9471\n", + "Epoch 14/30\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.9446 - val_loss: 0.8746\n", + "Epoch 15/30\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.8675 - val_loss: 0.8190\n", + "Epoch 16/30\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.8220 - val_loss: 0.7647\n", + "Epoch 17/30\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.7626 - val_loss: 0.6938\n", + "Epoch 18/30\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.7682 - val_loss: 0.7478\n", + "Epoch 19/30\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.7817 - val_loss: 0.7442\n", + "Epoch 20/30\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.7599 - val_loss: 0.7292\n", + "Epoch 21/30\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.7385 - val_loss: 1.0907\n", + "Epoch 22/30\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.7197 - val_loss: 0.7698\n", + "Epoch 23/30\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.6648 - val_loss: 0.5595\n", + "Epoch 24/30\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.6681 - val_loss: 0.6636\n", + "Epoch 25/30\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.5831 - val_loss: 0.5468\n", + "Epoch 26/30\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.6095 - val_loss: 0.4990\n", + "Epoch 27/30\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.5505 - val_loss: 0.4485\n", + "Epoch 28/30\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.6104 - val_loss: 0.6129\n", + "Epoch 29/30\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.6054 - val_loss: 0.5005\n", + "Epoch 30/30\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.5755 - val_loss: 0.5436\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "bG3mZ8BACxB1" + }, + "source": [ + "텐서보드에 실행 결과가 2개 있습니다. 학습 곡선을 비교해 보세요." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "XjCGWpl7CxB1" + }, + "source": [ + "사용할 수 있는 로깅 옵션을 확인해 보죠:" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "Xpsi-oLgCxB1", + "outputId": "779d94d9-3242-4fa8-84c0-8354a69e025f", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "help(keras.callbacks.TensorBoard.__init__)" + ], + "execution_count": 91, + "outputs": [ + { + "output_type": "stream", + "text": [ + "Help on function __init__ in module keras.callbacks:\n", + "\n", + "__init__(self, log_dir='logs', histogram_freq=0, write_graph=True, write_images=False, write_steps_per_second=False, update_freq='epoch', profile_batch=2, embeddings_freq=0, embeddings_metadata=None, **kwargs)\n", + " Initialize self. See help(type(self)) for accurate signature.\n", + "\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "GB_cvePHCxB1" + }, + "source": [ + "# 하이퍼파라미터 튜닝" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "VH7h_0M_CxB1" + }, + "source": [ + "keras.backend.clear_session()\n", + "np.random.seed(42)\n", + "tf.random.set_seed(42)" + ], + "execution_count": 92, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "6zLJo-KTCxB1" + }, + "source": [ + "def build_model(n_hidden=1, n_neurons=30, learning_rate=3e-3, input_shape=[8]):\n", + " model = keras.models.Sequential()\n", + " model.add(keras.layers.InputLayer(input_shape=input_shape))\n", + " for layer in range(n_hidden):\n", + " model.add(keras.layers.Dense(n_neurons, activation=\"relu\"))\n", + " model.add(keras.layers.Dense(1))\n", + " optimizer = keras.optimizers.SGD(lr=learning_rate)\n", + " model.compile(loss=\"mse\", optimizer=optimizer)\n", + " return model" + ], + "execution_count": 93, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "kxTCe76yCxB1" + }, + "source": [ + "keras_reg = keras.wrappers.scikit_learn.KerasRegressor(build_model)" + ], + "execution_count": 94, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "bsuSAinwCxB1", + "outputId": "4192edd5-5e38-4aec-a6ad-00d9299c82ad", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "keras_reg.fit(X_train, y_train, epochs=100,\n", + " validation_data=(X_valid, y_valid),\n", + " callbacks=[keras.callbacks.EarlyStopping(patience=10)])" + ], + "execution_count": 95, + "outputs": [ + { + "output_type": "stream", + "text": [ + "Epoch 1/100\n" + ], + "name": "stdout" + }, + { + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.7/dist-packages/keras/optimizer_v2/optimizer_v2.py:356: UserWarning: The `lr` argument is deprecated, use `learning_rate` instead.\n", + " \"The `lr` argument is deprecated, use `learning_rate` instead.\")\n" + ], + "name": "stderr" + }, + { + "output_type": "stream", + "text": [ + "363/363 [==============================] - 1s 2ms/step - loss: 1.0896 - val_loss: 20.7721\n", + "Epoch 2/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.7606 - val_loss: 5.0266\n", + "Epoch 3/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.5456 - val_loss: 0.5490\n", + "Epoch 4/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4732 - val_loss: 0.4529\n", + "Epoch 5/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4503 - val_loss: 0.4188\n", + "Epoch 6/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4338 - val_loss: 0.4129\n", + "Epoch 7/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4241 - val_loss: 0.4004\n", + "Epoch 8/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4168 - val_loss: 0.3944\n", + "Epoch 9/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4108 - val_loss: 0.3961\n", + "Epoch 10/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4060 - val_loss: 0.4071\n", + "Epoch 11/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4021 - val_loss: 0.3855\n", + "Epoch 12/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3984 - val_loss: 0.4136\n", + "Epoch 13/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3951 - val_loss: 0.3997\n", + "Epoch 14/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3921 - val_loss: 0.3818\n", + "Epoch 15/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3894 - val_loss: 0.3829\n", + "Epoch 16/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3869 - val_loss: 0.3739\n", + "Epoch 17/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3848 - val_loss: 0.4022\n", + "Epoch 18/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3829 - val_loss: 0.3873\n", + "Epoch 19/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3807 - val_loss: 0.3768\n", + "Epoch 20/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3791 - val_loss: 0.4191\n", + "Epoch 21/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3774 - val_loss: 0.3927\n", + "Epoch 22/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3756 - val_loss: 0.4237\n", + "Epoch 23/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3742 - val_loss: 0.3523\n", + "Epoch 24/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3725 - val_loss: 0.3842\n", + "Epoch 25/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3710 - val_loss: 0.4162\n", + "Epoch 26/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3700 - val_loss: 0.3980\n", + "Epoch 27/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3691 - val_loss: 0.3474\n", + "Epoch 28/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3677 - val_loss: 0.3920\n", + "Epoch 29/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3670 - val_loss: 0.3566\n", + "Epoch 30/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3653 - val_loss: 0.4191\n", + "Epoch 31/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3647 - val_loss: 0.3721\n", + "Epoch 32/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3633 - val_loss: 0.3948\n", + "Epoch 33/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3632 - val_loss: 0.3423\n", + "Epoch 34/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3617 - val_loss: 0.3453\n", + "Epoch 35/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3610 - val_loss: 0.4068\n", + "Epoch 36/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3608 - val_loss: 0.3417\n", + "Epoch 37/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3596 - val_loss: 0.3787\n", + "Epoch 38/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3589 - val_loss: 0.3379\n", + "Epoch 39/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3582 - val_loss: 0.3419\n", + "Epoch 40/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3572 - val_loss: 0.3705\n", + "Epoch 41/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3570 - val_loss: 0.3660\n", + "Epoch 42/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3563 - val_loss: 0.3804\n", + "Epoch 43/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3551 - val_loss: 0.3765\n", + "Epoch 44/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3548 - val_loss: 0.3813\n", + "Epoch 45/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3543 - val_loss: 0.3326\n", + "Epoch 46/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3532 - val_loss: 0.3385\n", + "Epoch 47/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3527 - val_loss: 0.3656\n", + "Epoch 48/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3521 - val_loss: 0.3578\n", + "Epoch 49/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3525 - val_loss: 0.3359\n", + "Epoch 50/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3510 - val_loss: 0.3318\n", + "Epoch 51/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3504 - val_loss: 0.3562\n", + "Epoch 52/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3502 - val_loss: 0.3523\n", + "Epoch 53/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3496 - val_loss: 0.4585\n", + "Epoch 54/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3497 - val_loss: 0.3811\n", + "Epoch 55/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3490 - val_loss: 0.3539\n", + "Epoch 56/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3485 - val_loss: 0.3725\n", + "Epoch 57/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3479 - val_loss: 0.3337\n", + "Epoch 58/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3469 - val_loss: 0.4007\n", + "Epoch 59/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3475 - val_loss: 0.3264\n", + "Epoch 60/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3465 - val_loss: 0.3271\n", + "Epoch 61/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3452 - val_loss: 0.3347\n", + "Epoch 62/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3453 - val_loss: 0.3493\n", + "Epoch 63/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3444 - val_loss: 0.3402\n", + "Epoch 64/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3450 - val_loss: 0.3274\n", + "Epoch 65/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3437 - val_loss: 0.3297\n", + "Epoch 66/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3431 - val_loss: 0.3307\n", + "Epoch 67/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3428 - val_loss: 0.3252\n", + "Epoch 68/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3423 - val_loss: 0.3242\n", + "Epoch 69/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3419 - val_loss: 0.3254\n", + "Epoch 70/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3413 - val_loss: 0.3657\n", + "Epoch 71/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3414 - val_loss: 0.3381\n", + "Epoch 72/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3405 - val_loss: 0.3273\n", + "Epoch 73/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3400 - val_loss: 0.3241\n", + "Epoch 74/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3402 - val_loss: 0.3656\n", + "Epoch 75/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3397 - val_loss: 0.3286\n", + "Epoch 76/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3395 - val_loss: 0.3241\n", + "Epoch 77/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3383 - val_loss: 0.3377\n", + "Epoch 78/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3384 - val_loss: 0.3363\n", + "Epoch 79/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3383 - val_loss: 0.3224\n", + "Epoch 80/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3376 - val_loss: 0.3603\n", + "Epoch 81/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3384 - val_loss: 0.3437\n", + "Epoch 82/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3371 - val_loss: 0.3223\n", + "Epoch 83/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3368 - val_loss: 0.3306\n", + "Epoch 84/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3362 - val_loss: 0.4086\n", + "Epoch 85/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3369 - val_loss: 0.3282\n", + "Epoch 86/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3359 - val_loss: 0.3399\n", + "Epoch 87/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3356 - val_loss: 0.3789\n", + "Epoch 88/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3358 - val_loss: 0.3224\n", + "Epoch 89/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3346 - val_loss: 0.4135\n", + "Epoch 90/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3354 - val_loss: 0.3395\n", + "Epoch 91/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3341 - val_loss: 0.4533\n", + "Epoch 92/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3355 - val_loss: 0.4068\n" + ], + "name": "stdout" + }, + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "" + ] + }, + "metadata": {}, + "execution_count": 95 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "sWCth08-CxB1", + "outputId": "00a5b760-6483-44fd-be8d-3bba2012daf5", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "mse_test = keras_reg.score(X_test, y_test)" + ], + "execution_count": 96, + "outputs": [ + { + "output_type": "stream", + "text": [ + "162/162 [==============================] - 0s 1ms/step - loss: 0.3362\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "QWaAu9gTCxB1" + }, + "source": [ + "y_pred = keras_reg.predict(X_new)" + ], + "execution_count": 97, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "O70vsaG2CxB2" + }, + "source": [ + "np.random.seed(42)\n", + "tf.random.set_seed(42)" + ], + "execution_count": 98, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Zdbx_aShCxB2" + }, + "source": [ + "**경고**: 다음 셀은 훈련이 끝날 때 에러가 납니다. 이는 최근 사이킷런의 변화때문에 생긴 [케라스 이슈 #13586](https://github.com/keras-team/keras/issues/13586) 때문입니다. 이 이슈를 해결하기 위한 [풀 리퀘스트 #13598](https://github.com/keras-team/keras/pull/13598)가 있으므로 곧 해결될 것 같습니다. 그때까지는 `.tolist()`와 `.rvs(1000).tolist()`를 추가해 사용합니다." + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "ooOMVoZGCxB2", + "outputId": "ac6a3192-89c5-4b4c-9da2-05cb9928ded2", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "from scipy.stats import reciprocal\n", + "from sklearn.model_selection import RandomizedSearchCV\n", + "\n", + "param_distribs = {\n", + " \"n_hidden\": [0, 1, 2, 3],\n", + " \"n_neurons\": np.arange(1, 100).tolist(),\n", + " \"learning_rate\": reciprocal(3e-4, 3e-2).rvs(1000).tolist(),\n", + "}\n", + "\n", + "rnd_search_cv = RandomizedSearchCV(keras_reg, param_distribs, n_iter=10, cv=3, verbose=2)\n", + "rnd_search_cv.fit(X_train, y_train, epochs=100,\n", + " validation_data=(X_valid, y_valid),\n", + " callbacks=[keras.callbacks.EarlyStopping(patience=10)])" + ], + "execution_count": 99, + "outputs": [ + { + "output_type": "stream", + "text": [ + "Fitting 3 folds for each of 10 candidates, totalling 30 fits\n", + "[CV] n_neurons=4, n_hidden=1, learning_rate=0.022174573948353458 .....\n", + "Epoch 1/100\n" + ], + "name": "stdout" + }, + { + "output_type": "stream", + "text": [ + "[Parallel(n_jobs=1)]: Using backend SequentialBackend with 1 concurrent workers.\n", + "/usr/local/lib/python3.7/dist-packages/keras/optimizer_v2/optimizer_v2.py:356: UserWarning: The `lr` argument is deprecated, use `learning_rate` instead.\n", + " \"The `lr` argument is deprecated, use `learning_rate` instead.\")\n" + ], + "name": "stderr" + }, + { + "output_type": "stream", + "text": [ + "242/242 [==============================] - 1s 3ms/step - loss: 0.8420 - val_loss: 0.4703\n", + "Epoch 2/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4815 - val_loss: 0.4247\n", + "Epoch 3/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4519 - val_loss: 0.4052\n", + "Epoch 4/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4429 - val_loss: 0.3975\n", + "Epoch 5/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4368 - val_loss: 0.3991\n", + "Epoch 6/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4340 - val_loss: 0.4031\n", + "Epoch 7/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4351 - val_loss: 0.4043\n", + "Epoch 8/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4267 - val_loss: 0.3929\n", + "Epoch 9/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4258 - val_loss: 0.4040\n", + "Epoch 10/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4237 - val_loss: 0.3886\n", + "Epoch 11/100\n", + "242/242 [==============================] - 0s 2ms/step - loss: 0.4209 - val_loss: 0.3999\n", + "Epoch 12/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4170 - val_loss: 0.4085\n", + "Epoch 13/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4139 - val_loss: 0.3922\n", + "Epoch 14/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4132 - val_loss: 0.3918\n", + "Epoch 15/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4106 - val_loss: 0.3886\n", + "Epoch 16/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4092 - val_loss: 0.3933\n", + "Epoch 17/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4092 - val_loss: 0.3907\n", + "Epoch 18/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4087 - val_loss: 0.3955\n", + "Epoch 19/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4058 - val_loss: 0.3935\n", + "Epoch 20/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4053 - val_loss: 0.3891\n", + "121/121 [==============================] - 0s 1ms/step - loss: 0.4251\n", + "[CV] n_neurons=4, n_hidden=1, learning_rate=0.022174573948353458, total= 20.9s\n", + "[CV] n_neurons=4, n_hidden=1, learning_rate=0.022174573948353458 .....\n", + "Epoch 1/100\n" + ], + "name": "stdout" + }, + { + "output_type": "stream", + "text": [ + "[Parallel(n_jobs=1)]: Done 1 out of 1 | elapsed: 20.9s remaining: 0.0s\n" + ], + "name": "stderr" + }, + { + "output_type": "stream", + "text": [ + "242/242 [==============================] - 1s 2ms/step - loss: 0.7452 - val_loss: 0.4860\n", + "Epoch 2/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4649 - val_loss: 0.4280\n", + "Epoch 3/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4495 - val_loss: 0.5791\n", + "Epoch 4/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4438 - val_loss: 0.4549\n", + "Epoch 5/100\n", + "242/242 [==============================] - 0s 2ms/step - loss: 0.4414 - val_loss: 0.5250\n", + "Epoch 6/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4409 - val_loss: 0.5486\n", + "Epoch 7/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4388 - val_loss: 0.5871\n", + "Epoch 8/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4381 - val_loss: 0.4759\n", + "Epoch 9/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4371 - val_loss: 0.7523\n", + "Epoch 10/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4369 - val_loss: 0.7478\n", + "Epoch 11/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4344 - val_loss: 0.8981\n", + "Epoch 12/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4347 - val_loss: 0.8543\n", + "121/121 [==============================] - 0s 1ms/step - loss: 0.4537\n", + "[CV] n_neurons=4, n_hidden=1, learning_rate=0.022174573948353458, total= 10.8s\n", + "[CV] n_neurons=4, n_hidden=1, learning_rate=0.022174573948353458 .....\n", + "Epoch 1/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 10.8724 - val_loss: 4.2476\n", + "Epoch 2/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 1.0257 - val_loss: 0.5794\n", + "Epoch 3/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5263 - val_loss: 0.4357\n", + "Epoch 4/100\n", + "242/242 [==============================] - 0s 2ms/step - loss: 0.4640 - val_loss: 0.4169\n", + "Epoch 5/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4515 - val_loss: 0.4135\n", + "Epoch 6/100\n", + "242/242 [==============================] - 0s 2ms/step - loss: 0.4486 - val_loss: 0.4206\n", + "Epoch 7/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4567 - val_loss: 0.4100\n", + "Epoch 8/100\n", + "242/242 [==============================] - 0s 2ms/step - loss: 0.4495 - val_loss: 0.4155\n", + "Epoch 9/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4474 - val_loss: 0.4111\n", + "Epoch 10/100\n", + "242/242 [==============================] - 0s 2ms/step - loss: 0.4620 - val_loss: 0.4076\n", + "Epoch 11/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4470 - val_loss: 0.4062\n", + "Epoch 12/100\n", + "242/242 [==============================] - 0s 2ms/step - loss: 0.4460 - val_loss: 0.4078\n", + "Epoch 13/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4462 - val_loss: 0.4160\n", + "Epoch 14/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4445 - val_loss: 0.4158\n", + "Epoch 15/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4430 - val_loss: 0.4137\n", + "Epoch 16/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4515 - val_loss: 0.4069\n", + "Epoch 17/100\n", + "242/242 [==============================] - 0s 2ms/step - loss: 0.4422 - val_loss: 0.4119\n", + "Epoch 18/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4408 - val_loss: 0.4149\n", + "Epoch 19/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4429 - val_loss: 0.4081\n", + "Epoch 20/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4595 - val_loss: 0.4141\n", + "Epoch 21/100\n", + "242/242 [==============================] - 0s 2ms/step - loss: 0.4431 - val_loss: 0.4100\n", + "121/121 [==============================] - 0s 1ms/step - loss: 0.4473\n", + "[CV] n_neurons=4, n_hidden=1, learning_rate=0.022174573948353458, total= 11.5s\n", + "[CV] n_neurons=94, n_hidden=2, learning_rate=0.005432590230265343 ....\n", + "Epoch 1/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 1.1684 - val_loss: 6.2480\n", + "Epoch 2/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.6285 - val_loss: 5.2166\n", + "Epoch 3/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5212 - val_loss: 0.4474\n", + "Epoch 4/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4280 - val_loss: 0.3901\n", + "Epoch 5/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4008 - val_loss: 0.3736\n", + "Epoch 6/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3840 - val_loss: 0.3803\n", + "Epoch 7/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3730 - val_loss: 0.3813\n", + "Epoch 8/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3648 - val_loss: 0.3961\n", + "Epoch 9/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3591 - val_loss: 0.3988\n", + "Epoch 10/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3542 - val_loss: 0.3891\n", + "Epoch 11/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3510 - val_loss: 0.3870\n", + "Epoch 12/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3465 - val_loss: 0.3770\n", + "Epoch 13/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3424 - val_loss: 0.3770\n", + "Epoch 14/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3408 - val_loss: 0.3843\n", + "Epoch 15/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3371 - val_loss: 0.3770\n", + "121/121 [==============================] - 0s 1ms/step - loss: 0.3561\n", + "[CV] n_neurons=94, n_hidden=2, learning_rate=0.005432590230265343, total= 10.7s\n", + "[CV] n_neurons=94, n_hidden=2, learning_rate=0.005432590230265343 ....\n", + "Epoch 1/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.8828 - val_loss: 3.5738\n", + "Epoch 2/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4887 - val_loss: 0.7767\n", + "Epoch 3/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4267 - val_loss: 0.5515\n", + "Epoch 4/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4011 - val_loss: 0.5335\n", + "Epoch 5/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3852 - val_loss: 0.5336\n", + "Epoch 6/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3746 - val_loss: 0.6750\n", + "Epoch 7/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3678 - val_loss: 0.8462\n", + "Epoch 8/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3610 - val_loss: 0.8724\n", + "Epoch 9/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3554 - val_loss: 0.9645\n", + "Epoch 10/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3525 - val_loss: 0.7225\n", + "Epoch 11/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3475 - val_loss: 0.7257\n", + "Epoch 12/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3442 - val_loss: 0.7217\n", + "Epoch 13/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3422 - val_loss: 0.8443\n", + "Epoch 14/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3407 - val_loss: 0.7065\n", + "121/121 [==============================] - 0s 1ms/step - loss: 0.3650\n", + "[CV] n_neurons=94, n_hidden=2, learning_rate=0.005432590230265343, total= 10.7s\n", + "[CV] n_neurons=94, n_hidden=2, learning_rate=0.005432590230265343 ....\n", + "Epoch 1/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 1.0015 - val_loss: 2.9433\n", + "Epoch 2/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5546 - val_loss: 4.2557\n", + "Epoch 3/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4854 - val_loss: 2.8526\n", + "Epoch 4/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4594 - val_loss: 1.6798\n", + "Epoch 5/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4136 - val_loss: 0.4322\n", + "Epoch 6/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3937 - val_loss: 0.4172\n", + "Epoch 7/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3829 - val_loss: 0.3769\n", + "Epoch 8/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3753 - val_loss: 0.3688\n", + "Epoch 9/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3692 - val_loss: 0.4032\n", + "Epoch 10/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3655 - val_loss: 0.3418\n", + "Epoch 11/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3610 - val_loss: 0.4452\n", + "Epoch 12/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3575 - val_loss: 0.3453\n", + "Epoch 13/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3526 - val_loss: 0.3395\n", + "Epoch 14/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3503 - val_loss: 0.4355\n", + "Epoch 15/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3489 - val_loss: 0.3388\n", + "Epoch 16/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3455 - val_loss: 0.4036\n", + "Epoch 17/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3434 - val_loss: 0.3302\n", + "Epoch 18/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3406 - val_loss: 0.3581\n", + "Epoch 19/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3386 - val_loss: 0.3548\n", + "Epoch 20/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3361 - val_loss: 0.3465\n", + "Epoch 21/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3356 - val_loss: 0.3244\n", + "Epoch 22/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3339 - val_loss: 0.3256\n", + "Epoch 23/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3316 - val_loss: 0.3429\n", + "Epoch 24/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3302 - val_loss: 0.3396\n", + "Epoch 25/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3290 - val_loss: 0.3699\n", + "Epoch 26/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3269 - val_loss: 0.4030\n", + "Epoch 27/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3259 - val_loss: 0.3157\n", + "Epoch 28/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3236 - val_loss: 0.3172\n", + "Epoch 29/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3235 - val_loss: 0.4151\n", + "Epoch 30/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3232 - val_loss: 0.3183\n", + "Epoch 31/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3196 - val_loss: 0.3158\n", + "Epoch 32/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3177 - val_loss: 0.4224\n", + "Epoch 33/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3186 - val_loss: 0.3123\n", + "Epoch 34/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3151 - val_loss: 0.4123\n", + "Epoch 35/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3181 - val_loss: 0.4489\n", + "Epoch 36/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3142 - val_loss: 0.6385\n", + "Epoch 37/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3156 - val_loss: 0.5049\n", + "Epoch 38/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3191 - val_loss: 0.8745\n", + "Epoch 39/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3198 - val_loss: 0.6009\n", + "Epoch 40/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3161 - val_loss: 0.6455\n", + "Epoch 41/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3138 - val_loss: 0.3047\n", + "Epoch 42/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3089 - val_loss: 0.3888\n", + "Epoch 43/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3091 - val_loss: 0.3094\n", + "Epoch 44/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3065 - val_loss: 0.3637\n", + "Epoch 45/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3064 - val_loss: 0.3040\n", + "Epoch 46/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3040 - val_loss: 0.4073\n", + "Epoch 47/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3031 - val_loss: 0.3583\n", + "Epoch 48/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3032 - val_loss: 0.3281\n", + "Epoch 49/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3006 - val_loss: 0.3466\n", + "Epoch 50/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.2998 - val_loss: 0.3248\n", + "Epoch 51/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.2989 - val_loss: 0.3382\n", + "Epoch 52/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.2983 - val_loss: 0.2992\n", + "Epoch 53/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.2972 - val_loss: 0.3046\n", + "Epoch 54/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.2963 - val_loss: 0.3056\n", + "Epoch 55/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.2962 - val_loss: 0.3269\n", + "Epoch 56/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.2949 - val_loss: 0.4620\n", + "Epoch 57/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.2981 - val_loss: 0.2997\n", + "Epoch 58/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.2947 - val_loss: 0.3866\n", + "Epoch 59/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.2940 - val_loss: 0.3332\n", + "Epoch 60/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.2932 - val_loss: 0.6139\n", + "Epoch 61/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.2940 - val_loss: 0.6724\n", + "Epoch 62/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.2957 - val_loss: 1.0578\n", + "121/121 [==============================] - 0s 1ms/step - loss: 0.3059\n", + "[CV] n_neurons=94, n_hidden=2, learning_rate=0.005432590230265343, total= 35.2s\n", + "[CV] n_neurons=51, n_hidden=1, learning_rate=0.00037078874137762145 ..\n", + "Epoch 1/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 4.3936 - val_loss: 13.3699\n", + "Epoch 2/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 2.2098 - val_loss: 10.8972\n", + "Epoch 3/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 1.4360 - val_loss: 7.7330\n", + "Epoch 4/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 1.0926 - val_loss: 5.0744\n", + "Epoch 5/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.9168 - val_loss: 3.2363\n", + "Epoch 6/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.8186 - val_loss: 2.1597\n", + "Epoch 7/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.7619 - val_loss: 1.4840\n", + "Epoch 8/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.7266 - val_loss: 1.1083\n", + "Epoch 9/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.7031 - val_loss: 0.8942\n", + "Epoch 10/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.6858 - val_loss: 0.7687\n", + "Epoch 11/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.6720 - val_loss: 0.6947\n", + "Epoch 12/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.6602 - val_loss: 0.6524\n", + "Epoch 13/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.6498 - val_loss: 0.6234\n", + "Epoch 14/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.6401 - val_loss: 0.6061\n", + "Epoch 15/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.6312 - val_loss: 0.5933\n", + "Epoch 16/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.6227 - val_loss: 0.5819\n", + "Epoch 17/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.6147 - val_loss: 0.5733\n", + "Epoch 18/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.6070 - val_loss: 0.5650\n", + "Epoch 19/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5997 - val_loss: 0.5578\n", + "Epoch 20/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5926 - val_loss: 0.5508\n", + "Epoch 21/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5859 - val_loss: 0.5446\n", + "Epoch 22/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5794 - val_loss: 0.5384\n", + "Epoch 23/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5732 - val_loss: 0.5326\n", + "Epoch 24/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5671 - val_loss: 0.5266\n", + "Epoch 25/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5614 - val_loss: 0.5214\n", + "Epoch 26/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5558 - val_loss: 0.5166\n", + "Epoch 27/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5504 - val_loss: 0.5116\n", + "Epoch 28/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5453 - val_loss: 0.5076\n", + "Epoch 29/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5403 - val_loss: 0.5035\n", + "Epoch 30/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5356 - val_loss: 0.4989\n", + "Epoch 31/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5309 - val_loss: 0.4946\n", + "Epoch 32/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5265 - val_loss: 0.4915\n", + "Epoch 33/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5222 - val_loss: 0.4883\n", + "Epoch 34/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5181 - val_loss: 0.4856\n", + "Epoch 35/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5141 - val_loss: 0.4828\n", + "Epoch 36/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5103 - val_loss: 0.4789\n", + "Epoch 37/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5066 - val_loss: 0.4780\n", + "Epoch 38/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5030 - val_loss: 0.4742\n", + "Epoch 39/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4995 - val_loss: 0.4729\n", + "Epoch 40/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4962 - val_loss: 0.4714\n", + "Epoch 41/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4929 - val_loss: 0.4686\n", + "Epoch 42/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4897 - val_loss: 0.4666\n", + "Epoch 43/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4867 - val_loss: 0.4646\n", + "Epoch 44/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4837 - val_loss: 0.4636\n", + "Epoch 45/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4809 - val_loss: 0.4616\n", + "Epoch 46/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4781 - val_loss: 0.4582\n", + "Epoch 47/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4755 - val_loss: 0.4581\n", + "Epoch 48/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4729 - val_loss: 0.4573\n", + "Epoch 49/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4704 - val_loss: 0.4560\n", + "Epoch 50/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4680 - val_loss: 0.4544\n", + "Epoch 51/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4656 - val_loss: 0.4525\n", + "Epoch 52/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4633 - val_loss: 0.4527\n", + "Epoch 53/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4611 - val_loss: 0.4522\n", + "Epoch 54/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4589 - val_loss: 0.4509\n", + "Epoch 55/100\n", + "242/242 [==============================] - 0s 2ms/step - loss: 0.4568 - val_loss: 0.4509\n", + "Epoch 56/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4548 - val_loss: 0.4513\n", + "Epoch 57/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4529 - val_loss: 0.4496\n", + "Epoch 58/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4510 - val_loss: 0.4510\n", + "Epoch 59/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4491 - val_loss: 0.4502\n", + "Epoch 60/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4473 - val_loss: 0.4478\n", + "Epoch 61/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4456 - val_loss: 0.4485\n", + "Epoch 62/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4440 - val_loss: 0.4488\n", + "Epoch 63/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4423 - val_loss: 0.4477\n", + "Epoch 64/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4408 - val_loss: 0.4497\n", + "Epoch 65/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4392 - val_loss: 0.4512\n", + "Epoch 66/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4378 - val_loss: 0.4484\n", + "Epoch 67/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4363 - val_loss: 0.4483\n", + "Epoch 68/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4349 - val_loss: 0.4494\n", + "Epoch 69/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4336 - val_loss: 0.4492\n", + "Epoch 70/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4322 - val_loss: 0.4476\n", + "Epoch 71/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4309 - val_loss: 0.4481\n", + "Epoch 72/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4296 - val_loss: 0.4503\n", + "Epoch 73/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4284 - val_loss: 0.4486\n", + "Epoch 74/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4272 - val_loss: 0.4491\n", + "Epoch 75/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4261 - val_loss: 0.4496\n", + "Epoch 76/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4249 - val_loss: 0.4483\n", + "Epoch 77/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4238 - val_loss: 0.4474\n", + "Epoch 78/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4227 - val_loss: 0.4490\n", + "Epoch 79/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4217 - val_loss: 0.4495\n", + "Epoch 80/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4206 - val_loss: 0.4468\n", + "Epoch 81/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4196 - val_loss: 0.4492\n", + "Epoch 82/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4186 - val_loss: 0.4525\n", + "Epoch 83/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4177 - val_loss: 0.4504\n", + "Epoch 84/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4167 - val_loss: 0.4525\n", + "Epoch 85/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4158 - val_loss: 0.4495\n", + "Epoch 86/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4148 - val_loss: 0.4548\n", + "Epoch 87/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4140 - val_loss: 0.4512\n", + "Epoch 88/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4132 - val_loss: 0.4481\n", + "Epoch 89/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4123 - val_loss: 0.4472\n", + "Epoch 90/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4114 - val_loss: 0.4506\n", + "121/121 [==============================] - 0s 1ms/step - loss: 0.4209\n", + "[CV] n_neurons=51, n_hidden=1, learning_rate=0.00037078874137762145, total= 1.4min\n", + "[CV] n_neurons=51, n_hidden=1, learning_rate=0.00037078874137762145 ..\n", + "Epoch 1/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 3.4569 - val_loss: 7.5238\n", + "Epoch 2/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 1.5656 - val_loss: 8.6120\n", + "Epoch 3/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 1.0607 - val_loss: 8.4896\n", + "Epoch 4/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.8953 - val_loss: 7.7423\n", + "Epoch 5/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.8236 - val_loss: 6.8202\n", + "Epoch 6/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.7840 - val_loss: 5.9344\n", + "Epoch 7/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.7579 - val_loss: 5.1492\n", + "Epoch 8/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.7381 - val_loss: 4.4548\n", + "Epoch 9/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.7216 - val_loss: 3.9122\n", + "Epoch 10/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.7071 - val_loss: 3.4233\n", + "Epoch 11/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.6937 - val_loss: 2.9997\n", + "Epoch 12/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.6814 - val_loss: 2.6082\n", + "Epoch 13/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.6701 - val_loss: 2.2766\n", + "Epoch 14/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.6593 - val_loss: 1.9984\n", + "Epoch 15/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.6491 - val_loss: 1.7447\n", + "Epoch 16/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.6395 - val_loss: 1.5300\n", + "Epoch 17/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.6303 - val_loss: 1.3410\n", + "Epoch 18/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.6217 - val_loss: 1.1762\n", + "Epoch 19/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.6133 - val_loss: 1.0345\n", + "Epoch 20/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.6055 - val_loss: 0.9174\n", + "Epoch 21/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5980 - val_loss: 0.8153\n", + "Epoch 22/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5908 - val_loss: 0.7363\n", + "Epoch 23/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5839 - val_loss: 0.6696\n", + "Epoch 24/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5774 - val_loss: 0.6187\n", + "Epoch 25/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5711 - val_loss: 0.5778\n", + "Epoch 26/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5652 - val_loss: 0.5491\n", + "Epoch 27/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5594 - val_loss: 0.5299\n", + "Epoch 28/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5540 - val_loss: 0.5199\n", + "Epoch 29/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5486 - val_loss: 0.5172\n", + "Epoch 30/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5438 - val_loss: 0.5206\n", + "Epoch 31/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5389 - val_loss: 0.5312\n", + "Epoch 32/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5343 - val_loss: 0.5447\n", + "Epoch 33/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5298 - val_loss: 0.5639\n", + "Epoch 34/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5256 - val_loss: 0.5821\n", + "Epoch 35/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5216 - val_loss: 0.6039\n", + "Epoch 36/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5177 - val_loss: 0.6306\n", + "Epoch 37/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5140 - val_loss: 0.6564\n", + "Epoch 38/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5104 - val_loss: 0.6820\n", + "Epoch 39/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5069 - val_loss: 0.7087\n", + "121/121 [==============================] - 0s 1ms/step - loss: 0.5160\n", + "[CV] n_neurons=51, n_hidden=1, learning_rate=0.00037078874137762145, total= 22.4s\n", + "[CV] n_neurons=51, n_hidden=1, learning_rate=0.00037078874137762145 ..\n", + "Epoch 1/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 4.0974 - val_loss: 7.4460\n", + "Epoch 2/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 2.1844 - val_loss: 5.2071\n", + "Epoch 3/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 1.4253 - val_loss: 2.9554\n", + "Epoch 4/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 1.0762 - val_loss: 1.7752\n", + "Epoch 5/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.9094 - val_loss: 1.1201\n", + "Epoch 6/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.8243 - val_loss: 0.8519\n", + "Epoch 7/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.7768 - val_loss: 0.7512\n", + "Epoch 8/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.7473 - val_loss: 0.7064\n", + "Epoch 9/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.7264 - val_loss: 0.6896\n", + "Epoch 10/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.7098 - val_loss: 0.6760\n", + "Epoch 11/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.6955 - val_loss: 0.6687\n", + "Epoch 12/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.6830 - val_loss: 0.6577\n", + "Epoch 13/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.6713 - val_loss: 0.6454\n", + "Epoch 14/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.6604 - val_loss: 0.6355\n", + "Epoch 15/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.6503 - val_loss: 0.6256\n", + "Epoch 16/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.6407 - val_loss: 0.6213\n", + "Epoch 17/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.6317 - val_loss: 0.6120\n", + "Epoch 18/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.6230 - val_loss: 0.6024\n", + "Epoch 19/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.6148 - val_loss: 0.5998\n", + "Epoch 20/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.6072 - val_loss: 0.5901\n", + "Epoch 21/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5996 - val_loss: 0.5822\n", + "Epoch 22/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5925 - val_loss: 0.5763\n", + "Epoch 23/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5857 - val_loss: 0.5664\n", + "Epoch 24/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5791 - val_loss: 0.5574\n", + "Epoch 25/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5728 - val_loss: 0.5527\n", + "Epoch 26/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5668 - val_loss: 0.5452\n", + "Epoch 27/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5610 - val_loss: 0.5437\n", + "Epoch 28/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5555 - val_loss: 0.5366\n", + "Epoch 29/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5501 - val_loss: 0.5322\n", + "Epoch 30/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5450 - val_loss: 0.5264\n", + "Epoch 31/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5399 - val_loss: 0.5234\n", + "Epoch 32/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5352 - val_loss: 0.5175\n", + "Epoch 33/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5305 - val_loss: 0.5137\n", + "Epoch 34/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5262 - val_loss: 0.5078\n", + "Epoch 35/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5219 - val_loss: 0.5045\n", + "Epoch 36/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5178 - val_loss: 0.4970\n", + "Epoch 37/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5139 - val_loss: 0.4911\n", + "Epoch 38/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5101 - val_loss: 0.4887\n", + "Epoch 39/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5064 - val_loss: 0.4847\n", + "Epoch 40/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5029 - val_loss: 0.4815\n", + "Epoch 41/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4994 - val_loss: 0.4776\n", + "Epoch 42/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4962 - val_loss: 0.4736\n", + "Epoch 43/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4930 - val_loss: 0.4706\n", + "Epoch 44/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4901 - val_loss: 0.4673\n", + "Epoch 45/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4871 - val_loss: 0.4655\n", + "Epoch 46/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4843 - val_loss: 0.4625\n", + "Epoch 47/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4816 - val_loss: 0.4576\n", + "Epoch 48/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4789 - val_loss: 0.4554\n", + "Epoch 49/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4764 - val_loss: 0.4525\n", + "Epoch 50/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4740 - val_loss: 0.4495\n", + "Epoch 51/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4716 - val_loss: 0.4468\n", + "Epoch 52/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4693 - val_loss: 0.4446\n", + "Epoch 53/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4670 - val_loss: 0.4420\n", + "Epoch 54/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4649 - val_loss: 0.4394\n", + "Epoch 55/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4628 - val_loss: 0.4373\n", + "Epoch 56/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4607 - val_loss: 0.4349\n", + "Epoch 57/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4588 - val_loss: 0.4330\n", + "Epoch 58/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4569 - val_loss: 0.4311\n", + "Epoch 59/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4550 - val_loss: 0.4291\n", + "Epoch 60/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4532 - val_loss: 0.4277\n", + "Epoch 61/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4515 - val_loss: 0.4257\n", + "Epoch 62/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4498 - val_loss: 0.4241\n", + "Epoch 63/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4482 - val_loss: 0.4224\n", + "Epoch 64/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4466 - val_loss: 0.4208\n", + "Epoch 65/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4451 - val_loss: 0.4193\n", + "Epoch 66/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4436 - val_loss: 0.4180\n", + "Epoch 67/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4422 - val_loss: 0.4164\n", + "Epoch 68/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4408 - val_loss: 0.4151\n", + "Epoch 69/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4395 - val_loss: 0.4141\n", + "Epoch 70/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4382 - val_loss: 0.4124\n", + "Epoch 71/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4369 - val_loss: 0.4112\n", + "Epoch 72/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4357 - val_loss: 0.4101\n", + "Epoch 73/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4345 - val_loss: 0.4088\n", + "Epoch 74/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4334 - val_loss: 0.4081\n", + "Epoch 75/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4323 - val_loss: 0.4073\n", + "Epoch 76/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4312 - val_loss: 0.4070\n", + "Epoch 77/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4301 - val_loss: 0.4056\n", + "Epoch 78/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4291 - val_loss: 0.4040\n", + "Epoch 79/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4281 - val_loss: 0.4034\n", + "Epoch 80/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4271 - val_loss: 0.4033\n", + "Epoch 81/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4262 - val_loss: 0.4019\n", + "Epoch 82/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4253 - val_loss: 0.4008\n", + "Epoch 83/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4244 - val_loss: 0.4002\n", + "Epoch 84/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4236 - val_loss: 0.3996\n", + "Epoch 85/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4227 - val_loss: 0.3983\n", + "Epoch 86/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4219 - val_loss: 0.3980\n", + "Epoch 87/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4211 - val_loss: 0.3981\n", + "Epoch 88/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4203 - val_loss: 0.3969\n", + "Epoch 89/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4195 - val_loss: 0.3978\n", + "Epoch 90/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4188 - val_loss: 0.3961\n", + "Epoch 91/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4180 - val_loss: 0.3951\n", + "Epoch 92/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4173 - val_loss: 0.3938\n", + "Epoch 93/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4166 - val_loss: 0.3938\n", + "Epoch 94/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4159 - val_loss: 0.3935\n", + "Epoch 95/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4152 - val_loss: 0.3934\n", + "Epoch 96/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4146 - val_loss: 0.3932\n", + "Epoch 97/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4139 - val_loss: 0.3939\n", + "Epoch 98/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4132 - val_loss: 0.3913\n", + "Epoch 99/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4127 - val_loss: 0.3916\n", + "Epoch 100/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4121 - val_loss: 0.3918\n", + "121/121 [==============================] - 0s 1ms/step - loss: 0.4139\n", + "[CV] n_neurons=51, n_hidden=1, learning_rate=0.00037078874137762145, total= 1.4min\n", + "[CV] n_neurons=70, n_hidden=2, learning_rate=0.0016535051383872363 ...\n", + "Epoch 1/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 2.0765 - val_loss: 1.3536\n", + "Epoch 2/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.7485 - val_loss: 0.7463\n", + "Epoch 3/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.6415 - val_loss: 0.5899\n", + "Epoch 4/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5900 - val_loss: 0.5366\n", + "Epoch 5/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5507 - val_loss: 0.5063\n", + "Epoch 6/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.5188 - val_loss: 0.4813\n", + "Epoch 7/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4926 - val_loss: 0.4639\n", + "Epoch 8/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4721 - val_loss: 0.4427\n", + "Epoch 9/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4552 - val_loss: 0.4393\n", + "Epoch 10/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4420 - val_loss: 0.4137\n", + "Epoch 11/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4313 - val_loss: 0.4071\n", + "Epoch 12/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4224 - val_loss: 0.3983\n", + "Epoch 13/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4147 - val_loss: 0.3933\n", + "Epoch 14/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4089 - val_loss: 0.3972\n", + "Epoch 15/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4029 - val_loss: 0.3852\n", + "Epoch 16/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3986 - val_loss: 0.3830\n", + "Epoch 17/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3939 - val_loss: 0.3947\n", + "Epoch 18/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3900 - val_loss: 0.3713\n", + "Epoch 19/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3857 - val_loss: 0.3752\n", + "Epoch 20/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3828 - val_loss: 0.3741\n", + "Epoch 21/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3803 - val_loss: 0.3782\n", + "Epoch 22/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3766 - val_loss: 0.3637\n", + "Epoch 23/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3742 - val_loss: 0.3723\n", + "Epoch 24/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3721 - val_loss: 0.3707\n", + "Epoch 25/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3691 - val_loss: 0.4047\n", + "Epoch 26/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3679 - val_loss: 0.3839\n", + "Epoch 27/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3654 - val_loss: 0.4167\n", + "Epoch 28/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3637 - val_loss: 0.3500\n", + "Epoch 29/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3607 - val_loss: 0.3792\n", + "Epoch 30/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3602 - val_loss: 0.3636\n", + "Epoch 31/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3576 - val_loss: 0.3476\n", + "Epoch 32/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3566 - val_loss: 0.3566\n", + "Epoch 33/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3548 - val_loss: 0.3611\n", + "Epoch 34/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3541 - val_loss: 0.3414\n", + "Epoch 35/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3527 - val_loss: 0.3474\n", + "Epoch 36/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3508 - val_loss: 0.3944\n", + "Epoch 37/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3507 - val_loss: 0.4401\n", + "Epoch 38/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3502 - val_loss: 0.4721\n", + "Epoch 39/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3495 - val_loss: 0.3722\n", + "Epoch 40/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3481 - val_loss: 0.4019\n", + "Epoch 41/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3467 - val_loss: 0.3376\n", + "Epoch 42/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3449 - val_loss: 0.3377\n", + "Epoch 43/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3450 - val_loss: 0.3354\n", + "Epoch 44/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3433 - val_loss: 0.3737\n", + "Epoch 45/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3441 - val_loss: 0.3336\n", + "Epoch 46/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3421 - val_loss: 0.3563\n", + "Epoch 47/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3415 - val_loss: 0.3547\n", + "Epoch 48/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3410 - val_loss: 0.3399\n", + "Epoch 49/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3400 - val_loss: 0.3304\n", + "Epoch 50/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3395 - val_loss: 0.3850\n", + "Epoch 51/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3393 - val_loss: 0.3430\n", + "Epoch 52/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3382 - val_loss: 0.3363\n", + "Epoch 53/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3378 - val_loss: 0.3386\n", + "Epoch 54/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3373 - val_loss: 0.3294\n", + "Epoch 55/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3360 - val_loss: 0.3655\n", + "Epoch 56/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3369 - val_loss: 0.3310\n", + "Epoch 57/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3354 - val_loss: 0.3730\n", + "Epoch 58/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3347 - val_loss: 0.3375\n", + "Epoch 59/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3340 - val_loss: 0.3263\n", + "Epoch 60/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3331 - val_loss: 0.3403\n", + "Epoch 61/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3329 - val_loss: 0.3436\n", + "Epoch 62/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3321 - val_loss: 0.3583\n", + "Epoch 63/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3320 - val_loss: 0.3306\n", + "Epoch 64/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3310 - val_loss: 0.3679\n", + "Epoch 65/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3310 - val_loss: 0.3298\n", + "Epoch 66/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3310 - val_loss: 0.3272\n", + "Epoch 67/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3299 - val_loss: 0.3565\n", + "Epoch 68/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3294 - val_loss: 0.3295\n", + "Epoch 69/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3282 - val_loss: 0.3440\n", + "121/121 [==============================] - 0s 2ms/step - loss: 0.3550\n", + "[CV] n_neurons=70, n_hidden=2, learning_rate=0.0016535051383872363, total= 42.7s\n", + "[CV] n_neurons=70, n_hidden=2, learning_rate=0.0016535051383872363 ...\n", + "Epoch 1/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 1.8880 - val_loss: 3.4090\n", + "Epoch 2/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.7244 - val_loss: 1.6754\n", + "Epoch 3/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.6372 - val_loss: 0.9319\n", + "Epoch 4/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.5910 - val_loss: 0.6042\n", + "Epoch 5/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.5529 - val_loss: 0.5061\n", + "Epoch 6/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5225 - val_loss: 0.5058\n", + "Epoch 7/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4977 - val_loss: 0.5272\n", + "Epoch 8/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4770 - val_loss: 0.5600\n", + "Epoch 9/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4600 - val_loss: 0.5367\n", + "Epoch 10/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4469 - val_loss: 0.5221\n", + "Epoch 11/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4356 - val_loss: 0.4878\n", + "Epoch 12/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4264 - val_loss: 0.4531\n", + "Epoch 13/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4187 - val_loss: 0.4182\n", + "Epoch 14/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4124 - val_loss: 0.3877\n", + "Epoch 15/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4064 - val_loss: 0.3818\n", + "Epoch 16/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4014 - val_loss: 0.4022\n", + "Epoch 17/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3962 - val_loss: 0.4348\n", + "Epoch 18/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3926 - val_loss: 0.4935\n", + "Epoch 19/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3878 - val_loss: 0.5340\n", + "Epoch 20/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3847 - val_loss: 0.5982\n", + "Epoch 21/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3819 - val_loss: 0.6541\n", + "Epoch 22/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3786 - val_loss: 0.7245\n", + "Epoch 23/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3758 - val_loss: 0.8045\n", + "Epoch 24/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3735 - val_loss: 0.8587\n", + "Epoch 25/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3711 - val_loss: 0.9089\n", + "121/121 [==============================] - 0s 2ms/step - loss: 0.3884\n", + "[CV] n_neurons=70, n_hidden=2, learning_rate=0.0016535051383872363, total= 21.0s\n", + "[CV] n_neurons=70, n_hidden=2, learning_rate=0.0016535051383872363 ...\n", + "Epoch 1/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 2.1014 - val_loss: 2.1643\n", + "Epoch 2/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.7146 - val_loss: 0.6141\n", + "Epoch 3/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.6063 - val_loss: 0.5601\n", + "Epoch 4/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.5633 - val_loss: 0.5241\n", + "Epoch 5/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5302 - val_loss: 0.5017\n", + "Epoch 6/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.5034 - val_loss: 0.4749\n", + "Epoch 7/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4814 - val_loss: 0.4558\n", + "Epoch 8/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4633 - val_loss: 0.4297\n", + "Epoch 9/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4483 - val_loss: 0.4464\n", + "Epoch 10/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4374 - val_loss: 0.4189\n", + "Epoch 11/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4266 - val_loss: 0.4438\n", + "Epoch 12/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4188 - val_loss: 0.4250\n", + "Epoch 13/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4121 - val_loss: 0.4009\n", + "Epoch 14/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4067 - val_loss: 0.4403\n", + "Epoch 15/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4025 - val_loss: 0.4014\n", + "Epoch 16/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3981 - val_loss: 0.4247\n", + "Epoch 17/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3946 - val_loss: 0.3964\n", + "Epoch 18/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3914 - val_loss: 0.3974\n", + "Epoch 19/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3887 - val_loss: 0.4229\n", + "Epoch 20/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3860 - val_loss: 0.4053\n", + "Epoch 21/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3840 - val_loss: 0.3989\n", + "Epoch 22/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3815 - val_loss: 0.3957\n", + "Epoch 23/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3793 - val_loss: 0.3864\n", + "Epoch 24/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3774 - val_loss: 0.4022\n", + "Epoch 25/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3756 - val_loss: 0.3729\n", + "Epoch 26/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3733 - val_loss: 0.3645\n", + "Epoch 27/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3716 - val_loss: 0.4107\n", + "Epoch 28/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3702 - val_loss: 0.3925\n", + "Epoch 29/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3688 - val_loss: 0.4265\n", + "Epoch 30/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3677 - val_loss: 0.3879\n", + "Epoch 31/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3659 - val_loss: 0.3789\n", + "Epoch 32/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3643 - val_loss: 0.4080\n", + "Epoch 33/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3631 - val_loss: 0.3873\n", + "Epoch 34/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3617 - val_loss: 0.4232\n", + "Epoch 35/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3613 - val_loss: 0.3718\n", + "Epoch 36/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3593 - val_loss: 0.3663\n", + "121/121 [==============================] - 0s 2ms/step - loss: 0.3555\n", + "[CV] n_neurons=70, n_hidden=2, learning_rate=0.0016535051383872363, total= 41.6s\n", + "[CV] n_neurons=40, n_hidden=0, learning_rate=0.01824796188192035 .....\n", + "Epoch 1/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 1.2908 - val_loss: 297.3652\n", + "Epoch 2/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 2.1716 - val_loss: 539.0366\n", + "Epoch 3/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 6.2333 - val_loss: 3736.4507\n", + "Epoch 4/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 11.9933 - val_loss: 12227.6982\n", + "Epoch 5/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 54.7041 - val_loss: 61529.1016\n", + "Epoch 6/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 2281.0823 - val_loss: 268363.5625\n", + "Epoch 7/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 2760.9927 - val_loss: 1210517.0000\n", + "Epoch 8/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 40359.3789 - val_loss: 5411004.0000\n", + "Epoch 9/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 83691.9375 - val_loss: 24506690.0000\n", + "Epoch 10/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 1055625.6250 - val_loss: 119813024.0000\n", + "Epoch 11/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 1860447.1250 - val_loss: 529731008.0000\n", + "121/121 [==============================] - 0s 1ms/step - loss: 1402365.2500\n", + "[CV] n_neurons=40, n_hidden=0, learning_rate=0.01824796188192035, total= 6.8s\n", + "[CV] n_neurons=40, n_hidden=0, learning_rate=0.01824796188192035 .....\n", + "Epoch 1/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 1.0446 - val_loss: 15.8284\n", + "Epoch 2/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5210 - val_loss: 22.4892\n", + "Epoch 3/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5063 - val_loss: 24.7894\n", + "Epoch 4/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5101 - val_loss: 22.4864\n", + "Epoch 5/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5097 - val_loss: 21.9009\n", + "Epoch 6/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5089 - val_loss: 21.2895\n", + "Epoch 7/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5113 - val_loss: 19.9064\n", + "Epoch 8/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5102 - val_loss: 22.5013\n", + "Epoch 9/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5069 - val_loss: 20.0987\n", + "Epoch 10/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5087 - val_loss: 10.7128\n", + "Epoch 11/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5083 - val_loss: 19.7319\n", + "Epoch 12/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5049 - val_loss: 24.3237\n", + "Epoch 13/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5077 - val_loss: 25.9485\n", + "Epoch 14/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5199 - val_loss: 10.5277\n", + "Epoch 15/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5078 - val_loss: 17.1916\n", + "Epoch 16/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5064 - val_loss: 21.8347\n", + "Epoch 17/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5058 - val_loss: 11.7743\n", + "Epoch 18/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5101 - val_loss: 14.1555\n", + "Epoch 19/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5071 - val_loss: 20.9814\n", + "Epoch 20/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5032 - val_loss: 12.3621\n", + "Epoch 21/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5071 - val_loss: 25.9146\n", + "Epoch 22/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.5132 - val_loss: 16.0461\n", + "Epoch 23/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5071 - val_loss: 19.4877\n", + "Epoch 24/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5084 - val_loss: 12.1054\n", + "121/121 [==============================] - 0s 1ms/step - loss: 0.7813\n", + "[CV] n_neurons=40, n_hidden=0, learning_rate=0.01824796188192035, total= 21.0s\n", + "[CV] n_neurons=40, n_hidden=0, learning_rate=0.01824796188192035 .....\n", + "Epoch 1/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 1.2328 - val_loss: 307.7496\n", + "Epoch 2/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.9214 - val_loss: 76.3015\n", + "Epoch 3/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 1.3774 - val_loss: 795.2292\n", + "Epoch 4/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 34.9847 - val_loss: 704.0450\n", + "Epoch 5/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 1.3027 - val_loss: 2668.0286\n", + "Epoch 6/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 9.2431 - val_loss: 1446.2605\n", + "Epoch 7/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 4.8034 - val_loss: 1540.5377\n", + "Epoch 8/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 41.9016 - val_loss: 1396.7115\n", + "Epoch 9/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 10.9509 - val_loss: 1334.0847\n", + "Epoch 10/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 1.4803 - val_loss: 216.7268\n", + "Epoch 11/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 13.8366 - val_loss: 125.2065\n", + "Epoch 12/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.6450 - val_loss: 2.2902\n", + "Epoch 13/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.7449 - val_loss: 790.5424\n", + "Epoch 14/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 9.2398 - val_loss: 468.7424\n", + "Epoch 15/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 2.2300 - val_loss: 1073.9149\n", + "Epoch 16/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 37.3800 - val_loss: 865.6385\n", + "Epoch 17/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 8.9708 - val_loss: 1128.1501\n", + "Epoch 18/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 3.8291 - val_loss: 499.5191\n", + "Epoch 19/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 24.8681 - val_loss: 309.7941\n", + "Epoch 20/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 3.6469 - val_loss: 354.6341\n", + "Epoch 21/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 4.2841 - val_loss: 559.4488\n", + "Epoch 22/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 4.5495 - val_loss: 393.8696\n", + "121/121 [==============================] - 0s 1ms/step - loss: 0.6226\n", + "[CV] n_neurons=40, n_hidden=0, learning_rate=0.01824796188192035, total= 21.0s\n", + "[CV] n_neurons=30, n_hidden=3, learning_rate=0.0045455096956331 ......\n", + "Epoch 1/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 1.2632 - val_loss: 1.4543\n", + "Epoch 2/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.6364 - val_loss: 0.9557\n", + "Epoch 3/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.5396 - val_loss: 0.4628\n", + "Epoch 4/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4783 - val_loss: 0.4214\n", + "Epoch 5/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4400 - val_loss: 0.3984\n", + "Epoch 6/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4169 - val_loss: 0.4056\n", + "Epoch 7/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4004 - val_loss: 0.3741\n", + "Epoch 8/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3888 - val_loss: 0.3926\n", + "Epoch 9/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3809 - val_loss: 0.3832\n", + "Epoch 10/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3743 - val_loss: 0.3929\n", + "Epoch 11/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3697 - val_loss: 0.3570\n", + "Epoch 12/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3640 - val_loss: 0.3790\n", + "Epoch 13/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3595 - val_loss: 0.3840\n", + "Epoch 14/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3569 - val_loss: 0.3950\n", + "Epoch 15/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3530 - val_loss: 0.3751\n", + "Epoch 16/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3503 - val_loss: 0.3955\n", + "Epoch 17/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3476 - val_loss: 0.3900\n", + "Epoch 18/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3455 - val_loss: 0.3905\n", + "Epoch 19/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3420 - val_loss: 0.3944\n", + "Epoch 20/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3404 - val_loss: 0.3811\n", + "Epoch 21/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3378 - val_loss: 0.3906\n", + "121/121 [==============================] - 0s 2ms/step - loss: 0.3624\n", + "[CV] n_neurons=30, n_hidden=3, learning_rate=0.0045455096956331, total= 14.4s\n", + "[CV] n_neurons=30, n_hidden=3, learning_rate=0.0045455096956331 ......\n", + "Epoch 1/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 1.0130 - val_loss: 0.5822\n", + "Epoch 2/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.5558 - val_loss: 0.4873\n", + "Epoch 3/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4781 - val_loss: 0.4420\n", + "Epoch 4/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4376 - val_loss: 0.4139\n", + "Epoch 5/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4111 - val_loss: 0.4132\n", + "Epoch 6/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3947 - val_loss: 0.4464\n", + "Epoch 7/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3840 - val_loss: 0.4717\n", + "Epoch 8/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3760 - val_loss: 0.5331\n", + "Epoch 9/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3682 - val_loss: 0.6951\n", + "Epoch 10/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3633 - val_loss: 0.6944\n", + "Epoch 11/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3574 - val_loss: 0.8506\n", + "Epoch 12/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3535 - val_loss: 0.7660\n", + "Epoch 13/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3509 - val_loss: 0.8731\n", + "Epoch 14/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3487 - val_loss: 0.9306\n", + "Epoch 15/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3463 - val_loss: 0.9345\n", + "121/121 [==============================] - 0s 2ms/step - loss: 0.3685\n", + "[CV] n_neurons=30, n_hidden=3, learning_rate=0.0045455096956331, total= 10.9s\n", + "[CV] n_neurons=30, n_hidden=3, learning_rate=0.0045455096956331 ......\n", + "Epoch 1/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 1.1090 - val_loss: 0.6796\n", + "Epoch 2/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.5639 - val_loss: 0.4957\n", + "Epoch 3/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4920 - val_loss: 0.4633\n", + "Epoch 4/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4547 - val_loss: 0.4565\n", + "Epoch 5/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4305 - val_loss: 0.4150\n", + "Epoch 6/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4141 - val_loss: 0.4331\n", + "Epoch 7/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4026 - val_loss: 0.3887\n", + "Epoch 8/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3936 - val_loss: 0.3785\n", + "Epoch 9/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3857 - val_loss: 0.4233\n", + "Epoch 10/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3819 - val_loss: 0.3652\n", + "Epoch 11/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3760 - val_loss: 0.4336\n", + "Epoch 12/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3725 - val_loss: 0.3763\n", + "Epoch 13/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3683 - val_loss: 0.3632\n", + "Epoch 14/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3644 - val_loss: 0.4460\n", + "Epoch 15/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3624 - val_loss: 0.3555\n", + "Epoch 16/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3584 - val_loss: 0.3947\n", + "Epoch 17/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3560 - val_loss: 0.3623\n", + "Epoch 18/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3525 - val_loss: 0.3774\n", + "Epoch 19/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3505 - val_loss: 0.3806\n", + "Epoch 20/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3479 - val_loss: 0.3420\n", + "Epoch 21/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3463 - val_loss: 0.3452\n", + "Epoch 22/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3446 - val_loss: 0.3273\n", + "Epoch 23/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3425 - val_loss: 0.3279\n", + "Epoch 24/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3395 - val_loss: 0.4328\n", + "Epoch 25/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3401 - val_loss: 0.3426\n", + "Epoch 26/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3366 - val_loss: 0.3228\n", + "Epoch 27/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3342 - val_loss: 0.4407\n", + "Epoch 28/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3357 - val_loss: 0.3301\n", + "Epoch 29/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3331 - val_loss: 0.4053\n", + "Epoch 30/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3323 - val_loss: 0.3360\n", + "Epoch 31/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3293 - val_loss: 0.3329\n", + "Epoch 32/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3279 - val_loss: 0.3659\n", + "Epoch 33/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3270 - val_loss: 0.3483\n", + "Epoch 34/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3243 - val_loss: 0.3597\n", + "Epoch 35/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3246 - val_loss: 0.3132\n", + "Epoch 36/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3224 - val_loss: 0.3623\n", + "Epoch 37/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3221 - val_loss: 0.3365\n", + "Epoch 38/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3211 - val_loss: 0.5344\n", + "Epoch 39/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3231 - val_loss: 0.3311\n", + "Epoch 40/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3195 - val_loss: 0.4003\n", + "Epoch 41/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3186 - val_loss: 0.3126\n", + "Epoch 42/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3164 - val_loss: 0.3867\n", + "Epoch 43/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3161 - val_loss: 0.3084\n", + "Epoch 44/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3144 - val_loss: 0.3481\n", + "Epoch 45/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3151 - val_loss: 0.3085\n", + "Epoch 46/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3128 - val_loss: 0.3754\n", + "Epoch 47/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3119 - val_loss: 0.3117\n", + "Epoch 48/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3119 - val_loss: 0.3004\n", + "Epoch 49/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3095 - val_loss: 0.4113\n", + "Epoch 50/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3113 - val_loss: 0.2997\n", + "Epoch 51/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3085 - val_loss: 0.4087\n", + "Epoch 52/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3089 - val_loss: 0.3072\n", + "Epoch 53/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3077 - val_loss: 0.3030\n", + "Epoch 54/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3070 - val_loss: 0.2966\n", + "Epoch 55/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3059 - val_loss: 0.2950\n", + "Epoch 56/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3037 - val_loss: 0.3551\n", + "Epoch 57/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3058 - val_loss: 0.3012\n", + "Epoch 58/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3047 - val_loss: 0.2981\n", + "Epoch 59/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3033 - val_loss: 0.3262\n", + "Epoch 60/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3045 - val_loss: 0.3689\n", + "Epoch 61/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3033 - val_loss: 0.3175\n", + "Epoch 62/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3013 - val_loss: 0.2994\n", + "Epoch 63/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3009 - val_loss: 0.2967\n", + "Epoch 64/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3005 - val_loss: 0.2973\n", + "Epoch 65/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3008 - val_loss: 0.3042\n", + "121/121 [==============================] - 0s 2ms/step - loss: 0.3098\n", + "[CV] n_neurons=30, n_hidden=3, learning_rate=0.0045455096956331, total= 1.4min\n", + "[CV] n_neurons=49, n_hidden=1, learning_rate=0.0020587676114196545 ...\n", + "Epoch 1/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 2.1150 - val_loss: 29.5063\n", + "Epoch 2/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 1.0854 - val_loss: 33.7784\n", + "Epoch 3/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.9418 - val_loss: 4.0125\n", + "Epoch 4/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.6369 - val_loss: 0.5556\n", + "Epoch 5/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5632 - val_loss: 0.5119\n", + "Epoch 6/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.5371 - val_loss: 0.4888\n", + "Epoch 7/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5149 - val_loss: 0.4729\n", + "Epoch 8/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4964 - val_loss: 0.4559\n", + "Epoch 9/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4803 - val_loss: 0.4601\n", + "Epoch 10/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4670 - val_loss: 0.4303\n", + "Epoch 11/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4561 - val_loss: 0.4205\n", + "Epoch 12/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4469 - val_loss: 0.4242\n", + "Epoch 13/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4391 - val_loss: 0.4107\n", + "Epoch 14/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4325 - val_loss: 0.4231\n", + "Epoch 15/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4270 - val_loss: 0.4221\n", + "Epoch 16/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4221 - val_loss: 0.4084\n", + "Epoch 17/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4179 - val_loss: 0.4209\n", + "Epoch 18/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4143 - val_loss: 0.4017\n", + "Epoch 19/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4106 - val_loss: 0.4322\n", + "Epoch 20/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4080 - val_loss: 0.4001\n", + "Epoch 21/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4050 - val_loss: 0.4263\n", + "Epoch 22/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4027 - val_loss: 0.4032\n", + "Epoch 23/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4002 - val_loss: 0.4039\n", + "Epoch 24/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3981 - val_loss: 0.3764\n", + "Epoch 25/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3962 - val_loss: 0.4241\n", + "Epoch 26/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3944 - val_loss: 0.3779\n", + "Epoch 27/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3925 - val_loss: 0.4126\n", + "Epoch 28/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3910 - val_loss: 0.3967\n", + "Epoch 29/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3889 - val_loss: 0.4045\n", + "Epoch 30/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3880 - val_loss: 0.3748\n", + "Epoch 31/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3864 - val_loss: 0.3717\n", + "Epoch 32/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3851 - val_loss: 0.3676\n", + "Epoch 33/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3837 - val_loss: 0.4054\n", + "Epoch 34/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3825 - val_loss: 0.3924\n", + "Epoch 35/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3815 - val_loss: 0.3611\n", + "Epoch 36/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3800 - val_loss: 0.4182\n", + "Epoch 37/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3792 - val_loss: 0.3539\n", + "Epoch 38/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3779 - val_loss: 0.4403\n", + "Epoch 39/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3769 - val_loss: 0.3551\n", + "Epoch 40/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3757 - val_loss: 0.4125\n", + "Epoch 41/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3748 - val_loss: 0.3665\n", + "Epoch 42/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3735 - val_loss: 0.3591\n", + "Epoch 43/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3730 - val_loss: 0.3570\n", + "Epoch 44/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3717 - val_loss: 0.4125\n", + "Epoch 45/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3714 - val_loss: 0.3547\n", + "Epoch 46/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3699 - val_loss: 0.3779\n", + "Epoch 47/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3692 - val_loss: 0.3886\n", + "121/121 [==============================] - 0s 2ms/step - loss: 0.3877\n", + "[CV] n_neurons=49, n_hidden=1, learning_rate=0.0020587676114196545, total= 29.5s\n", + "[CV] n_neurons=49, n_hidden=1, learning_rate=0.0020587676114196545 ...\n", + "Epoch 1/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 1.8463 - val_loss: 0.7805\n", + "Epoch 2/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.7088 - val_loss: 1.1550\n", + "Epoch 3/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.6196 - val_loss: 1.8115\n", + "Epoch 4/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.5692 - val_loss: 2.6113\n", + "Epoch 5/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.5319 - val_loss: 3.2626\n", + "Epoch 6/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.5046 - val_loss: 3.5247\n", + "Epoch 7/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4841 - val_loss: 3.5926\n", + "Epoch 8/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4679 - val_loss: 3.5562\n", + "Epoch 9/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4551 - val_loss: 2.9541\n", + "Epoch 10/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4459 - val_loss: 2.5606\n", + "Epoch 11/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4377 - val_loss: 2.1560\n", + "121/121 [==============================] - 0s 1ms/step - loss: 0.4866\n", + "[CV] n_neurons=49, n_hidden=1, learning_rate=0.0020587676114196545, total= 7.4s\n", + "[CV] n_neurons=49, n_hidden=1, learning_rate=0.0020587676114196545 ...\n", + "Epoch 1/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 1.7445 - val_loss: 2.5834\n", + "Epoch 2/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.7268 - val_loss: 3.5564\n", + "Epoch 3/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.6419 - val_loss: 1.7895\n", + "Epoch 4/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.6134 - val_loss: 1.7436\n", + "Epoch 5/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.5564 - val_loss: 0.6344\n", + "Epoch 6/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.5303 - val_loss: 0.8713\n", + "Epoch 7/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.5070 - val_loss: 0.5604\n", + "Epoch 8/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4919 - val_loss: 0.4695\n", + "Epoch 9/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4759 - val_loss: 0.4942\n", + "Epoch 10/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4659 - val_loss: 0.4375\n", + "Epoch 11/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4561 - val_loss: 0.4536\n", + "Epoch 12/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4481 - val_loss: 0.4276\n", + "Epoch 13/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4408 - val_loss: 0.4084\n", + "Epoch 14/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4354 - val_loss: 0.4897\n", + "Epoch 15/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4300 - val_loss: 0.4018\n", + "Epoch 16/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4246 - val_loss: 0.5505\n", + "Epoch 17/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4211 - val_loss: 0.4602\n", + "Epoch 18/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4171 - val_loss: 0.4347\n", + "Epoch 19/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4132 - val_loss: 0.3835\n", + "Epoch 20/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4092 - val_loss: 0.4115\n", + "Epoch 21/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4065 - val_loss: 0.3817\n", + "Epoch 22/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.4035 - val_loss: 0.3737\n", + "Epoch 23/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4008 - val_loss: 0.3720\n", + "Epoch 24/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3983 - val_loss: 0.4318\n", + "Epoch 25/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3970 - val_loss: 0.4158\n", + "Epoch 26/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3943 - val_loss: 0.3821\n", + "Epoch 27/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3922 - val_loss: 0.4069\n", + "Epoch 28/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3909 - val_loss: 0.4024\n", + "Epoch 29/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3887 - val_loss: 0.5904\n", + "Epoch 30/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3898 - val_loss: 0.4027\n", + "Epoch 31/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3858 - val_loss: 0.4216\n", + "Epoch 32/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3847 - val_loss: 0.3603\n", + "Epoch 33/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3825 - val_loss: 0.4134\n", + "Epoch 34/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3819 - val_loss: 0.3633\n", + "Epoch 35/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3805 - val_loss: 0.3542\n", + "Epoch 36/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3786 - val_loss: 0.3568\n", + "Epoch 37/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3783 - val_loss: 0.4216\n", + "Epoch 38/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3770 - val_loss: 0.5522\n", + "Epoch 39/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3792 - val_loss: 0.5648\n", + "Epoch 40/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3763 - val_loss: 0.6416\n", + "Epoch 41/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3785 - val_loss: 0.3847\n", + "Epoch 42/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3729 - val_loss: 0.5255\n", + "Epoch 43/100\n", + "242/242 [==============================] - 1s 2ms/step - loss: 0.3744 - val_loss: 0.7023\n", + "Epoch 44/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3741 - val_loss: 0.7507\n", + "Epoch 45/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3771 - val_loss: 0.5608\n", + "121/121 [==============================] - 0s 1ms/step - loss: 0.3745\n", + "[CV] n_neurons=49, n_hidden=1, learning_rate=0.0020587676114196545, total= 41.4s\n", + "[CV] n_neurons=74, n_hidden=3, learning_rate=0.005803602934201024 ....\n", + "Epoch 1/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 1.0682 - val_loss: 6.4183\n", + "Epoch 2/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.7154 - val_loss: 16.7917\n", + "Epoch 3/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.5830 - val_loss: 4.7823\n", + "Epoch 4/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4475 - val_loss: 8.6076\n", + "Epoch 5/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4779 - val_loss: 1.8025\n", + "Epoch 6/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4007 - val_loss: 0.3655\n", + "Epoch 7/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3682 - val_loss: 0.3786\n", + "Epoch 8/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3591 - val_loss: 0.4054\n", + "Epoch 9/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3533 - val_loss: 0.3910\n", + "Epoch 10/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3488 - val_loss: 0.3912\n", + "Epoch 11/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3445 - val_loss: 0.3550\n", + "Epoch 12/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3394 - val_loss: 0.3612\n", + "Epoch 13/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3351 - val_loss: 0.3650\n", + "Epoch 14/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3334 - val_loss: 0.3625\n", + "Epoch 15/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3292 - val_loss: 0.3565\n", + "Epoch 16/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3272 - val_loss: 0.3558\n", + "Epoch 17/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3239 - val_loss: 0.3555\n", + "Epoch 18/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3223 - val_loss: 0.3500\n", + "Epoch 19/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3185 - val_loss: 0.3504\n", + "Epoch 20/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3162 - val_loss: 0.3392\n", + "Epoch 21/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3145 - val_loss: 0.3365\n", + "Epoch 22/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3120 - val_loss: 0.3693\n", + "Epoch 23/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3099 - val_loss: 0.3195\n", + "Epoch 24/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3090 - val_loss: 0.3087\n", + "Epoch 25/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3046 - val_loss: 0.3589\n", + "Epoch 26/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3035 - val_loss: 0.3122\n", + "Epoch 27/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3030 - val_loss: 0.3275\n", + "Epoch 28/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3019 - val_loss: 0.3536\n", + "Epoch 29/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2986 - val_loss: 0.3315\n", + "Epoch 30/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2963 - val_loss: 0.2960\n", + "Epoch 31/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2953 - val_loss: 0.3122\n", + "Epoch 32/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2935 - val_loss: 0.2887\n", + "Epoch 33/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2911 - val_loss: 0.3220\n", + "Epoch 34/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2890 - val_loss: 0.3172\n", + "Epoch 35/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2880 - val_loss: 0.2943\n", + "Epoch 36/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2869 - val_loss: 0.3723\n", + "Epoch 37/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2858 - val_loss: 0.3260\n", + "Epoch 38/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2851 - val_loss: 0.3555\n", + "Epoch 39/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2838 - val_loss: 0.2923\n", + "Epoch 40/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2823 - val_loss: 0.3324\n", + "Epoch 41/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2808 - val_loss: 0.2885\n", + "Epoch 42/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2800 - val_loss: 0.2909\n", + "Epoch 43/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2792 - val_loss: 0.2860\n", + "Epoch 44/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2768 - val_loss: 0.3188\n", + "Epoch 45/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2767 - val_loss: 0.3108\n", + "Epoch 46/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2756 - val_loss: 0.3249\n", + "Epoch 47/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2739 - val_loss: 0.2890\n", + "Epoch 48/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2737 - val_loss: 0.2840\n", + "Epoch 49/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2713 - val_loss: 0.2777\n", + "Epoch 50/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2714 - val_loss: 0.3328\n", + "Epoch 51/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2700 - val_loss: 0.3179\n", + "Epoch 52/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2687 - val_loss: 0.3177\n", + "Epoch 53/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2684 - val_loss: 0.2842\n", + "Epoch 54/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2667 - val_loss: 0.2830\n", + "Epoch 55/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2653 - val_loss: 0.2988\n", + "Epoch 56/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2660 - val_loss: 0.2723\n", + "Epoch 57/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2639 - val_loss: 0.3335\n", + "Epoch 58/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2645 - val_loss: 0.2753\n", + "Epoch 59/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2633 - val_loss: 0.2905\n", + "Epoch 60/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2614 - val_loss: 0.2812\n", + "Epoch 61/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2627 - val_loss: 0.3755\n", + "Epoch 62/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2613 - val_loss: 0.2795\n", + "Epoch 63/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2600 - val_loss: 0.3285\n", + "Epoch 64/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2603 - val_loss: 0.2762\n", + "Epoch 65/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2574 - val_loss: 0.3070\n", + "Epoch 66/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2584 - val_loss: 0.3185\n", + "121/121 [==============================] - 0s 2ms/step - loss: 0.3105\n", + "[CV] n_neurons=74, n_hidden=3, learning_rate=0.005803602934201024, total= 44.9s\n", + "[CV] n_neurons=74, n_hidden=3, learning_rate=0.005803602934201024 ....\n", + "Epoch 1/100\n", + "242/242 [==============================] - 1s 4ms/step - loss: 0.8717 - val_loss: 0.7369\n", + "Epoch 2/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.5007 - val_loss: 0.4431\n", + "Epoch 3/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4272 - val_loss: 0.3919\n", + "Epoch 4/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3961 - val_loss: 0.3834\n", + "Epoch 5/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3777 - val_loss: 0.3951\n", + "Epoch 6/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3661 - val_loss: 0.4650\n", + "Epoch 7/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3580 - val_loss: 0.6408\n", + "Epoch 8/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3524 - val_loss: 0.7273\n", + "Epoch 9/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3462 - val_loss: 0.9104\n", + "Epoch 10/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3421 - val_loss: 0.6969\n", + "Epoch 11/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3364 - val_loss: 0.6999\n", + "Epoch 12/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3327 - val_loss: 0.7835\n", + "Epoch 13/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3292 - val_loss: 0.8539\n", + "Epoch 14/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3277 - val_loss: 0.8282\n", + "121/121 [==============================] - 0s 2ms/step - loss: 0.3525\n", + "[CV] n_neurons=74, n_hidden=3, learning_rate=0.005803602934201024, total= 10.5s\n", + "[CV] n_neurons=74, n_hidden=3, learning_rate=0.005803602934201024 ....\n", + "Epoch 1/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.9177 - val_loss: 0.9196\n", + "Epoch 2/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4767 - val_loss: 2.1030\n", + "Epoch 3/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4329 - val_loss: 3.5546\n", + "Epoch 4/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4408 - val_loss: 1.5870\n", + "Epoch 5/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3906 - val_loss: 0.4229\n", + "Epoch 6/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3713 - val_loss: 0.3736\n", + "Epoch 7/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3634 - val_loss: 0.3347\n", + "Epoch 8/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3569 - val_loss: 0.3389\n", + "Epoch 9/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3518 - val_loss: 0.3714\n", + "Epoch 10/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3515 - val_loss: 0.3271\n", + "Epoch 11/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3456 - val_loss: 0.3873\n", + "Epoch 12/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3418 - val_loss: 0.3337\n", + "Epoch 13/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3372 - val_loss: 0.3220\n", + "Epoch 14/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3345 - val_loss: 0.3691\n", + "Epoch 15/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3321 - val_loss: 0.3202\n", + "Epoch 16/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3290 - val_loss: 0.3598\n", + "Epoch 17/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3268 - val_loss: 0.3241\n", + "Epoch 18/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3238 - val_loss: 0.3532\n", + "Epoch 19/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3222 - val_loss: 0.3357\n", + "Epoch 20/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3194 - val_loss: 0.3616\n", + "Epoch 21/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3176 - val_loss: 0.3152\n", + "Epoch 22/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3152 - val_loss: 0.3175\n", + "Epoch 23/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3129 - val_loss: 0.3580\n", + "Epoch 24/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3118 - val_loss: 0.3041\n", + "Epoch 25/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3096 - val_loss: 0.3216\n", + "Epoch 26/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3067 - val_loss: 0.3245\n", + "Epoch 27/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3053 - val_loss: 0.3125\n", + "Epoch 28/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3044 - val_loss: 0.3490\n", + "Epoch 29/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3051 - val_loss: 0.3862\n", + "Epoch 30/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3034 - val_loss: 0.3183\n", + "Epoch 31/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2996 - val_loss: 0.3122\n", + "Epoch 32/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2974 - val_loss: 0.3014\n", + "Epoch 33/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2976 - val_loss: 0.3222\n", + "Epoch 34/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2959 - val_loss: 0.3020\n", + "Epoch 35/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2932 - val_loss: 0.2965\n", + "Epoch 36/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2908 - val_loss: 0.4448\n", + "Epoch 37/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2910 - val_loss: 0.3683\n", + "Epoch 38/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2941 - val_loss: 0.4166\n", + "Epoch 39/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2913 - val_loss: 0.2964\n", + "Epoch 40/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2919 - val_loss: 0.3617\n", + "Epoch 41/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2875 - val_loss: 0.3154\n", + "Epoch 42/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2859 - val_loss: 0.3138\n", + "Epoch 43/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2860 - val_loss: 0.2842\n", + "Epoch 44/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2830 - val_loss: 0.3241\n", + "Epoch 45/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2837 - val_loss: 0.2951\n", + "Epoch 46/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2811 - val_loss: 0.3328\n", + "Epoch 47/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2803 - val_loss: 0.2820\n", + "Epoch 48/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2800 - val_loss: 0.2838\n", + "Epoch 49/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2797 - val_loss: 0.3641\n", + "Epoch 50/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2781 - val_loss: 0.2970\n", + "Epoch 51/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2772 - val_loss: 0.3488\n", + "Epoch 52/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2765 - val_loss: 0.2949\n", + "Epoch 53/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2758 - val_loss: 0.2940\n", + "Epoch 54/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2754 - val_loss: 0.2973\n", + "Epoch 55/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2739 - val_loss: 0.2806\n", + "Epoch 56/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2746 - val_loss: 0.3015\n", + "Epoch 57/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2733 - val_loss: 0.3550\n", + "Epoch 58/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2752 - val_loss: 0.2928\n", + "Epoch 59/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2720 - val_loss: 0.3158\n", + "Epoch 60/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2709 - val_loss: 0.2777\n", + "Epoch 61/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2694 - val_loss: 0.3425\n", + "Epoch 62/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2696 - val_loss: 0.2753\n", + "Epoch 63/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2688 - val_loss: 0.3171\n", + "Epoch 64/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2686 - val_loss: 0.2864\n", + "Epoch 65/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2689 - val_loss: 0.2885\n", + "Epoch 66/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2660 - val_loss: 0.2939\n", + "Epoch 67/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2654 - val_loss: 0.2901\n", + "Epoch 68/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2720 - val_loss: 0.2933\n", + "Epoch 69/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2652 - val_loss: 0.2779\n", + "Epoch 70/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2630 - val_loss: 0.2849\n", + "Epoch 71/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2643 - val_loss: 0.2742\n", + "Epoch 72/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2641 - val_loss: 0.2750\n", + "Epoch 73/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2637 - val_loss: 0.2925\n", + "Epoch 74/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2631 - val_loss: 0.2811\n", + "Epoch 75/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2625 - val_loss: 0.2931\n", + "Epoch 76/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2590 - val_loss: 0.3316\n", + "Epoch 77/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2619 - val_loss: 0.2795\n", + "Epoch 78/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2611 - val_loss: 0.4124\n", + "Epoch 79/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2609 - val_loss: 0.2784\n", + "Epoch 80/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2583 - val_loss: 0.2716\n", + "Epoch 81/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2587 - val_loss: 0.2975\n", + "Epoch 82/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2570 - val_loss: 0.2786\n", + "Epoch 83/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2579 - val_loss: 0.3338\n", + "Epoch 84/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2599 - val_loss: 0.2742\n", + "Epoch 85/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2568 - val_loss: 0.2930\n", + "Epoch 86/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2561 - val_loss: 0.2810\n", + "Epoch 87/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2567 - val_loss: 0.3121\n", + "Epoch 88/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2540 - val_loss: 0.2711\n", + "Epoch 89/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2541 - val_loss: 0.2792\n", + "Epoch 90/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2549 - val_loss: 0.3115\n", + "Epoch 91/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2564 - val_loss: 0.2751\n", + "Epoch 92/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2544 - val_loss: 0.2695\n", + "Epoch 93/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2531 - val_loss: 0.2903\n", + "Epoch 94/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2523 - val_loss: 0.2842\n", + "Epoch 95/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2519 - val_loss: 0.3035\n", + "Epoch 96/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2502 - val_loss: 0.3096\n", + "Epoch 97/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2538 - val_loss: 0.2928\n", + "Epoch 98/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2530 - val_loss: 0.3358\n", + "Epoch 99/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2514 - val_loss: 0.2702\n", + "Epoch 100/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2515 - val_loss: 0.2945\n", + "121/121 [==============================] - 0s 2ms/step - loss: 0.2939\n", + "[CV] n_neurons=74, n_hidden=3, learning_rate=0.005803602934201024, total= 1.4min\n", + "[CV] n_neurons=80, n_hidden=3, learning_rate=0.0059640580092043885 ...\n", + "Epoch 1/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.9615 - val_loss: 10.9250\n", + "Epoch 2/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.5921 - val_loss: 3.3912\n", + "Epoch 3/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4539 - val_loss: 0.4039\n", + "Epoch 4/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3914 - val_loss: 0.3692\n", + "Epoch 5/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3713 - val_loss: 0.3555\n", + "Epoch 6/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3601 - val_loss: 0.3875\n", + "Epoch 7/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3523 - val_loss: 0.3633\n", + "Epoch 8/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3454 - val_loss: 0.3991\n", + "Epoch 9/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3411 - val_loss: 0.3797\n", + "Epoch 10/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3382 - val_loss: 0.3705\n", + "Epoch 11/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3351 - val_loss: 0.3311\n", + "Epoch 12/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3304 - val_loss: 0.3510\n", + "Epoch 13/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3269 - val_loss: 0.3788\n", + "Epoch 14/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3261 - val_loss: 0.3316\n", + "Epoch 15/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3217 - val_loss: 0.3492\n", + "Epoch 16/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3194 - val_loss: 0.3485\n", + "Epoch 17/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3172 - val_loss: 0.3253\n", + "Epoch 18/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3157 - val_loss: 0.3438\n", + "Epoch 19/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3124 - val_loss: 0.3338\n", + "Epoch 20/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3108 - val_loss: 0.3216\n", + "Epoch 21/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3086 - val_loss: 0.3926\n", + "Epoch 22/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3087 - val_loss: 0.3103\n", + "Epoch 23/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3050 - val_loss: 0.3752\n", + "Epoch 24/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3068 - val_loss: 0.3714\n", + "Epoch 25/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3032 - val_loss: 0.3220\n", + "Epoch 26/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2987 - val_loss: 0.3083\n", + "Epoch 27/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2978 - val_loss: 0.3303\n", + "Epoch 28/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2971 - val_loss: 0.3395\n", + "Epoch 29/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2942 - val_loss: 0.3366\n", + "Epoch 30/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2922 - val_loss: 0.3121\n", + "Epoch 31/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2922 - val_loss: 0.3181\n", + "Epoch 32/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2898 - val_loss: 0.2886\n", + "Epoch 33/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2873 - val_loss: 0.3384\n", + "Epoch 34/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2856 - val_loss: 0.2906\n", + "Epoch 35/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2839 - val_loss: 0.2999\n", + "Epoch 36/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2826 - val_loss: 0.4515\n", + "Epoch 37/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2842 - val_loss: 0.6267\n", + "Epoch 38/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2918 - val_loss: 0.4893\n", + "Epoch 39/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2845 - val_loss: 0.2884\n", + "Epoch 40/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2818 - val_loss: 0.3473\n", + "Epoch 41/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2799 - val_loss: 0.2923\n", + "Epoch 42/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2778 - val_loss: 0.3041\n", + "Epoch 43/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2776 - val_loss: 0.2873\n", + "Epoch 44/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2756 - val_loss: 0.3304\n", + "Epoch 45/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2758 - val_loss: 0.2796\n", + "Epoch 46/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2742 - val_loss: 0.3144\n", + "Epoch 47/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2726 - val_loss: 0.3185\n", + "Epoch 48/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2722 - val_loss: 0.3024\n", + "Epoch 49/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2704 - val_loss: 0.2762\n", + "Epoch 50/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2703 - val_loss: 0.3676\n", + "Epoch 51/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2691 - val_loss: 0.3115\n", + "Epoch 52/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2665 - val_loss: 0.3507\n", + "Epoch 53/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2681 - val_loss: 0.2735\n", + "Epoch 54/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2651 - val_loss: 0.3027\n", + "Epoch 55/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2642 - val_loss: 0.2830\n", + "Epoch 56/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2644 - val_loss: 0.2804\n", + "Epoch 57/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2630 - val_loss: 0.3494\n", + "Epoch 58/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2634 - val_loss: 0.2916\n", + "Epoch 59/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2628 - val_loss: 0.2750\n", + "Epoch 60/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2616 - val_loss: 0.3144\n", + "Epoch 61/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2613 - val_loss: 0.3114\n", + "Epoch 62/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2597 - val_loss: 0.3386\n", + "Epoch 63/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2604 - val_loss: 0.2923\n", + "121/121 [==============================] - 0s 2ms/step - loss: 0.3123\n", + "[CV] n_neurons=80, n_hidden=3, learning_rate=0.0059640580092043885, total= 1.4min\n", + "[CV] n_neurons=80, n_hidden=3, learning_rate=0.0059640580092043885 ...\n", + "Epoch 1/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.8381 - val_loss: 0.6551\n", + "Epoch 2/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4570 - val_loss: 0.4129\n", + "Epoch 3/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4107 - val_loss: 0.6097\n", + "Epoch 4/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3910 - val_loss: 0.6571\n", + "Epoch 5/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3755 - val_loss: 0.6378\n", + "Epoch 6/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3647 - val_loss: 0.8581\n", + "Epoch 7/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3602 - val_loss: 1.0634\n", + "Epoch 8/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3515 - val_loss: 1.1230\n", + "Epoch 9/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3456 - val_loss: 1.2174\n", + "Epoch 10/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3424 - val_loss: 0.7974\n", + "Epoch 11/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3374 - val_loss: 0.8339\n", + "Epoch 12/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3337 - val_loss: 0.7604\n", + "121/121 [==============================] - 0s 2ms/step - loss: 0.3594\n", + "[CV] n_neurons=80, n_hidden=3, learning_rate=0.0059640580092043885, total= 8.9s\n", + "[CV] n_neurons=80, n_hidden=3, learning_rate=0.0059640580092043885 ...\n", + "Epoch 1/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.8683 - val_loss: 2.2007\n", + "Epoch 2/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.5072 - val_loss: 3.3028\n", + "Epoch 3/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4486 - val_loss: 0.9130\n", + "Epoch 4/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4071 - val_loss: 0.5328\n", + "Epoch 5/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3842 - val_loss: 0.3609\n", + "Epoch 6/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3729 - val_loss: 0.4151\n", + "Epoch 7/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3659 - val_loss: 0.3580\n", + "Epoch 8/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3596 - val_loss: 0.3516\n", + "Epoch 9/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3528 - val_loss: 0.3983\n", + "Epoch 10/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3511 - val_loss: 0.3323\n", + "Epoch 11/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3445 - val_loss: 0.4228\n", + "Epoch 12/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3420 - val_loss: 0.3284\n", + "Epoch 13/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3374 - val_loss: 0.3469\n", + "Epoch 14/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3337 - val_loss: 0.4038\n", + "Epoch 15/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3326 - val_loss: 0.3274\n", + "Epoch 16/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3291 - val_loss: 0.3821\n", + "Epoch 17/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3262 - val_loss: 0.3207\n", + "Epoch 18/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3229 - val_loss: 0.3242\n", + "Epoch 19/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3216 - val_loss: 0.3804\n", + "Epoch 20/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3191 - val_loss: 0.3388\n", + "Epoch 21/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3181 - val_loss: 0.3510\n", + "Epoch 22/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3160 - val_loss: 0.3075\n", + "Epoch 23/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3137 - val_loss: 0.3380\n", + "Epoch 24/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3121 - val_loss: 0.3562\n", + "Epoch 25/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3102 - val_loss: 0.3158\n", + "Epoch 26/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3076 - val_loss: 0.3245\n", + "Epoch 27/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3047 - val_loss: 0.4195\n", + "Epoch 28/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3096 - val_loss: 0.3261\n", + "Epoch 29/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3068 - val_loss: 0.4709\n", + "Epoch 30/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3060 - val_loss: 0.3084\n", + "Epoch 31/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3013 - val_loss: 0.3303\n", + "Epoch 32/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2990 - val_loss: 0.3561\n", + "121/121 [==============================] - 0s 2ms/step - loss: 0.3031\n", + "[CV] n_neurons=80, n_hidden=3, learning_rate=0.0059640580092043885, total= 23.0s\n", + "[CV] n_neurons=59, n_hidden=2, learning_rate=0.004591455636549438 ....\n", + "Epoch 1/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 1.2259 - val_loss: 0.5753\n", + "Epoch 2/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.5658 - val_loss: 8.9879\n", + "Epoch 3/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.5484 - val_loss: 11.0986\n", + "Epoch 4/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.5602 - val_loss: 1.1306\n", + "Epoch 5/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4336 - val_loss: 0.5258\n", + "Epoch 6/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4072 - val_loss: 0.4499\n", + "Epoch 7/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3939 - val_loss: 0.4056\n", + "Epoch 8/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3835 - val_loss: 0.3998\n", + "Epoch 9/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3766 - val_loss: 0.3957\n", + "Epoch 10/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3712 - val_loss: 0.3903\n", + "Epoch 11/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3672 - val_loss: 0.3688\n", + "Epoch 12/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3630 - val_loss: 0.3651\n", + "Epoch 13/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3587 - val_loss: 0.3709\n", + "Epoch 14/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3579 - val_loss: 0.3817\n", + "Epoch 15/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3535 - val_loss: 0.3623\n", + "Epoch 16/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3528 - val_loss: 0.3671\n", + "Epoch 17/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3490 - val_loss: 0.3672\n", + "Epoch 18/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3475 - val_loss: 0.3606\n", + "Epoch 19/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3445 - val_loss: 0.3552\n", + "Epoch 20/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3421 - val_loss: 0.3536\n", + "Epoch 21/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3416 - val_loss: 0.3519\n", + "Epoch 22/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3388 - val_loss: 0.3474\n", + "Epoch 23/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3372 - val_loss: 0.3510\n", + "Epoch 24/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3374 - val_loss: 0.3304\n", + "Epoch 25/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3333 - val_loss: 0.3686\n", + "Epoch 26/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3334 - val_loss: 0.3246\n", + "Epoch 27/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3336 - val_loss: 0.3387\n", + "Epoch 28/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3322 - val_loss: 0.3367\n", + "Epoch 29/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3279 - val_loss: 0.3389\n", + "Epoch 30/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3276 - val_loss: 0.3209\n", + "Epoch 31/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3255 - val_loss: 0.3227\n", + "Epoch 32/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3256 - val_loss: 0.3150\n", + "Epoch 33/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3238 - val_loss: 0.3511\n", + "Epoch 34/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3222 - val_loss: 0.3161\n", + "Epoch 35/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3209 - val_loss: 0.3141\n", + "Epoch 36/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3191 - val_loss: 0.3843\n", + "Epoch 37/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3189 - val_loss: 0.3600\n", + "Epoch 38/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3190 - val_loss: 0.3544\n", + "Epoch 39/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3159 - val_loss: 0.3168\n", + "Epoch 40/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3154 - val_loss: 0.3405\n", + "Epoch 41/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3190 - val_loss: 0.3163\n", + "Epoch 42/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3150 - val_loss: 0.3164\n", + "Epoch 43/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3148 - val_loss: 0.3143\n", + "Epoch 44/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3112 - val_loss: 0.3418\n", + "Epoch 45/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3144 - val_loss: 0.3057\n", + "Epoch 46/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3102 - val_loss: 0.3302\n", + "Epoch 47/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3089 - val_loss: 0.3330\n", + "Epoch 48/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3118 - val_loss: 0.3175\n", + "Epoch 49/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3073 - val_loss: 0.3019\n", + "Epoch 50/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3068 - val_loss: 0.3649\n", + "Epoch 51/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3061 - val_loss: 0.3269\n", + "Epoch 52/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3047 - val_loss: 0.3405\n", + "Epoch 53/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3051 - val_loss: 0.3068\n", + "Epoch 54/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3034 - val_loss: 0.3089\n", + "Epoch 55/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3030 - val_loss: 0.3346\n", + "Epoch 56/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3041 - val_loss: 0.3000\n", + "Epoch 57/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3014 - val_loss: 0.3707\n", + "Epoch 58/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3036 - val_loss: 0.3165\n", + "Epoch 59/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3001 - val_loss: 0.2981\n", + "Epoch 60/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2991 - val_loss: 0.3177\n", + "Epoch 61/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2997 - val_loss: 0.3231\n", + "Epoch 62/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2982 - val_loss: 0.3422\n", + "Epoch 63/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2984 - val_loss: 0.3082\n", + "Epoch 64/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2962 - val_loss: 0.4176\n", + "Epoch 65/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2971 - val_loss: 0.3030\n", + "Epoch 66/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3034 - val_loss: 0.3343\n", + "Epoch 67/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2953 - val_loss: 0.2985\n", + "Epoch 68/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2943 - val_loss: 0.3713\n", + "Epoch 69/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2958 - val_loss: 0.2969\n", + "Epoch 70/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2947 - val_loss: 0.3563\n", + "Epoch 71/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2926 - val_loss: 0.2941\n", + "Epoch 72/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2912 - val_loss: 0.3500\n", + "Epoch 73/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2915 - val_loss: 0.2962\n", + "Epoch 74/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2903 - val_loss: 0.4277\n", + "Epoch 75/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2917 - val_loss: 0.2926\n", + "Epoch 76/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2892 - val_loss: 0.3673\n", + "Epoch 77/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2926 - val_loss: 0.3217\n", + "Epoch 78/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2894 - val_loss: 0.5634\n", + "Epoch 79/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2941 - val_loss: 0.3334\n", + "Epoch 80/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2879 - val_loss: 0.5032\n", + "Epoch 81/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2882 - val_loss: 0.3119\n", + "Epoch 82/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2863 - val_loss: 0.6628\n", + "Epoch 83/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2921 - val_loss: 0.6841\n", + "Epoch 84/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2900 - val_loss: 0.8619\n", + "Epoch 85/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.2912 - val_loss: 0.3784\n", + "121/121 [==============================] - 0s 2ms/step - loss: 0.3198\n", + "[CV] n_neurons=59, n_hidden=2, learning_rate=0.004591455636549438, total= 1.4min\n", + "[CV] n_neurons=59, n_hidden=2, learning_rate=0.004591455636549438 ....\n", + "Epoch 1/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 1.1975 - val_loss: 0.8898\n", + "Epoch 2/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.5319 - val_loss: 0.5270\n", + "Epoch 3/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4524 - val_loss: 0.4844\n", + "Epoch 4/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4199 - val_loss: 0.4250\n", + "Epoch 5/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4023 - val_loss: 0.3735\n", + "Epoch 6/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3907 - val_loss: 0.3859\n", + "Epoch 7/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3833 - val_loss: 0.4576\n", + "Epoch 8/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3754 - val_loss: 0.4928\n", + "Epoch 9/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3691 - val_loss: 0.6246\n", + "Epoch 10/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3660 - val_loss: 0.5255\n", + "Epoch 11/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3611 - val_loss: 0.5956\n", + "Epoch 12/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3570 - val_loss: 0.6364\n", + "Epoch 13/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3550 - val_loss: 0.7456\n", + "Epoch 14/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3529 - val_loss: 0.7136\n", + "Epoch 15/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3503 - val_loss: 0.6905\n", + "121/121 [==============================] - 0s 2ms/step - loss: 0.3615\n", + "[CV] n_neurons=59, n_hidden=2, learning_rate=0.004591455636549438, total= 11.0s\n", + "[CV] n_neurons=59, n_hidden=2, learning_rate=0.004591455636549438 ....\n", + "Epoch 1/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 1.1315 - val_loss: 2.8528\n", + "Epoch 2/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.6016 - val_loss: 2.3412\n", + "Epoch 3/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.5108 - val_loss: 0.9015\n", + "Epoch 4/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4594 - val_loss: 0.8313\n", + "Epoch 5/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4291 - val_loss: 0.5217\n", + "Epoch 6/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4115 - val_loss: 0.4956\n", + "Epoch 7/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.4016 - val_loss: 0.3745\n", + "Epoch 8/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3917 - val_loss: 0.4012\n", + "Epoch 9/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3848 - val_loss: 0.4169\n", + "Epoch 10/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3815 - val_loss: 0.3843\n", + "Epoch 11/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3756 - val_loss: 0.6122\n", + "Epoch 12/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3743 - val_loss: 0.3579\n", + "Epoch 13/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3671 - val_loss: 0.3497\n", + "Epoch 14/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3632 - val_loss: 0.5161\n", + "Epoch 15/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3635 - val_loss: 0.4273\n", + "Epoch 16/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3592 - val_loss: 0.5739\n", + "Epoch 17/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3601 - val_loss: 0.4975\n", + "Epoch 18/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3547 - val_loss: 0.4886\n", + "Epoch 19/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3535 - val_loss: 0.3371\n", + "Epoch 20/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3485 - val_loss: 0.4118\n", + "Epoch 21/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3485 - val_loss: 0.3310\n", + "Epoch 22/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3460 - val_loss: 0.3289\n", + "Epoch 23/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3435 - val_loss: 0.3287\n", + "Epoch 24/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3410 - val_loss: 0.5224\n", + "Epoch 25/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3438 - val_loss: 0.7689\n", + "Epoch 26/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3423 - val_loss: 0.8909\n", + "Epoch 27/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3448 - val_loss: 0.4864\n", + "Epoch 28/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3369 - val_loss: 0.6169\n", + "Epoch 29/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3373 - val_loss: 0.3470\n", + "Epoch 30/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3327 - val_loss: 0.5750\n", + "Epoch 31/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3332 - val_loss: 0.3685\n", + "Epoch 32/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3308 - val_loss: 0.7292\n", + "Epoch 33/100\n", + "242/242 [==============================] - 1s 3ms/step - loss: 0.3344 - val_loss: 0.3932\n", + "121/121 [==============================] - 0s 2ms/step - loss: 0.3362\n", + "[CV] n_neurons=59, n_hidden=2, learning_rate=0.004591455636549438, total= 41.5s\n", + "Epoch 1/100\n" + ], + "name": "stdout" + }, + { + "output_type": "stream", + "text": [ + "[Parallel(n_jobs=1)]: Done 30 out of 30 | elapsed: 16.9min finished\n" + ], + "name": "stderr" + }, + { + "output_type": "stream", + "text": [ + "363/363 [==============================] - 1s 2ms/step - loss: 0.8194 - val_loss: 1.8036\n", + "Epoch 2/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4857 - val_loss: 2.0827\n", + "Epoch 3/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.4266 - val_loss: 0.3796\n", + "Epoch 4/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3857 - val_loss: 0.4283\n", + "Epoch 5/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3740 - val_loss: 0.3617\n", + "Epoch 6/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3620 - val_loss: 0.4566\n", + "Epoch 7/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3566 - val_loss: 0.3573\n", + "Epoch 8/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3492 - val_loss: 0.3380\n", + "Epoch 9/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3432 - val_loss: 0.3757\n", + "Epoch 10/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3389 - val_loss: 0.4069\n", + "Epoch 11/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3380 - val_loss: 0.5469\n", + "Epoch 12/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3368 - val_loss: 0.6487\n", + "Epoch 13/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3318 - val_loss: 0.3108\n", + "Epoch 14/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3257 - val_loss: 0.3198\n", + "Epoch 15/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3240 - val_loss: 0.3064\n", + "Epoch 16/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3203 - val_loss: 0.3235\n", + "Epoch 17/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3174 - val_loss: 0.4025\n", + "Epoch 18/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3154 - val_loss: 0.2985\n", + "Epoch 19/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3139 - val_loss: 0.3128\n", + "Epoch 20/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3112 - val_loss: 0.4343\n", + "Epoch 21/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3109 - val_loss: 0.3255\n", + "Epoch 22/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3075 - val_loss: 0.5121\n", + "Epoch 23/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3065 - val_loss: 0.5495\n", + "Epoch 24/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3046 - val_loss: 0.5264\n", + "Epoch 25/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3027 - val_loss: 0.3360\n", + "Epoch 26/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.2997 - val_loss: 0.4583\n", + "Epoch 27/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.2993 - val_loss: 0.5754\n", + "Epoch 28/100\n", + "363/363 [==============================] - 1s 2ms/step - loss: 0.3002 - val_loss: 0.4624\n" + ], + "name": "stdout" + }, + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "RandomizedSearchCV(cv=3, error_score=nan,\n", + " estimator=,\n", + " iid='deprecated', n_iter=10, n_jobs=None,\n", + " param_distributions={'learning_rate': [0.001683454924600351,\n", + " 0.02390836445593178,\n", + " 0.008731907739399206,\n", + " 0.004725396149933917,\n", + " 0.0006154014789262348,\n", + " 0.0006153331256530192,\n", + " 0.0003920021771415983,\n", + " 0.01619...\n", + " 0.0024505367684280487,\n", + " 0.011155092541719619,\n", + " 0.0007524347058135697,\n", + " 0.0032032448128444043,\n", + " 0.004591455636549438,\n", + " 0.0003715541189658278, ...],\n", + " 'n_hidden': [0, 1, 2, 3],\n", + " 'n_neurons': [1, 2, 3, 4, 5, 6, 7, 8, 9,\n", + " 10, 11, 12, 13, 14, 15,\n", + " 16, 17, 18, 19, 20, 21,\n", + " 22, 23, 24, 25, 26, 27,\n", + " 28, 29, 30, ...]},\n", + " pre_dispatch='2*n_jobs', random_state=None, refit=True,\n", + " return_train_score=False, scoring=None, verbose=2)" + ] + }, + "metadata": {}, + "execution_count": 99 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "Qf1GF2LaCxB2", + "outputId": "15ef4040-fc78-42ac-861d-2bddf90d39f3", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "rnd_search_cv.best_params_" + ], + "execution_count": 100, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "{'learning_rate': 0.005803602934201024, 'n_hidden': 3, 'n_neurons': 74}" + ] + }, + "metadata": {}, + "execution_count": 100 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "hdGoqzGcCxB2", + "outputId": "fe160518-afb1-47d7-f2a3-96fa2b9dd884", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "rnd_search_cv.best_score_" + ], + "execution_count": 101, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "-0.3189570407072703" + ] + }, + "metadata": {}, + "execution_count": 101 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "scrolled": true, + "id": "VH2zj386CxB2", + "outputId": "0184b427-6fb6-423d-a9ac-0d590ab358d1", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "rnd_search_cv.best_estimator_" + ], + "execution_count": 102, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "" + ] + }, + "metadata": {}, + "execution_count": 102 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "scrolled": true, + "id": "oOxsnHYYCxB2", + "outputId": "fa446fd4-3ab7-452a-dac1-b03efb855af1", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "rnd_search_cv.score(X_test, y_test)" + ], + "execution_count": 103, + "outputs": [ + { + "output_type": "stream", + "text": [ + "162/162 [==============================] - 0s 1ms/step - loss: 0.3022\n" + ], + "name": "stdout" + }, + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "-0.30217668414115906" + ] + }, + "metadata": {}, + "execution_count": 103 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "scrolled": true, + "id": "ErZwN_kmCxB2", + "outputId": "57d71f66-f89e-46f9-f497-d93dc45a22e0", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "model = rnd_search_cv.best_estimator_.model\n", + "model" + ], + "execution_count": 104, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "" + ] + }, + "metadata": {}, + "execution_count": 104 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "scrolled": true, + "id": "kX65T4sDCxB2", + "outputId": "c946d2ae-b486-4d12-f9c5-0dd1ca46420d", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "model.evaluate(X_test, y_test)" + ], + "execution_count": 105, + "outputs": [ + { + "output_type": "stream", + "text": [ + "162/162 [==============================] - 0s 1ms/step - loss: 0.3022\n" + ], + "name": "stdout" + }, + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "0.30217668414115906" + ] + }, + "metadata": {}, + "execution_count": 105 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true, + "id": "CKfWKtJ5CxB2" + }, + "source": [ + "# 연습문제 해답" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "DwgQm2XSCxB2" + }, + "source": [ + "## 1. to 9." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true, + "id": "51XxRzWFCxB3" + }, + "source": [ + "부록 A 참조." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "h6f2gZi9CxB3" + }, + "source": [ + "## 10." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "fMe-x7JQCxB3" + }, + "source": [ + "*문제: 심층 MLP를 MNIST 데이터셋에 훈련해보세요(`keras.datasets.mnist.load_data()` 함수를 사용해 데이터를 적재할 수 있습니다). 98% 이상의 정확도를 얻을 수 있는지 확인해보세요. 이 장에서 소개한 방법을 사용해 최적의 학습률을 찾아보세요(즉 학습률을 지수적으로 증가시키면서 손실을 그래프로 그립니다. 그다음 손실이 다시 증가하는 지점을 찾습니다). 모든 부가 기능을 추가해보세요. 즉, 체크포인트를 저장하고, 조기 종료를 사용하고, 텐서보드를 사용해 학습 곡선을 그려보세요.*" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Mu1Gp7UwCxB3" + }, + "source": [ + "데이터셋을 적재해보죠:" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "Z5Z_mWR9CxB3", + "outputId": "d800f261-0d2e-4ecc-febf-96c59f49773e", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "(X_train_full, y_train_full), (X_test, y_test) = keras.datasets.mnist.load_data()" + ], + "execution_count": 106, + "outputs": [ + { + "output_type": "stream", + "text": [ + "Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz\n", + "11493376/11490434 [==============================] - 0s 0us/step\n", + "11501568/11490434 [==============================] - 0s 0us/step\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "5KySlCtFCxB3" + }, + "source": [ + "패션 MNIST 데이터셋처럼 MNIST 훈련 세트는 28x28 픽셀의 흑백 이미지 60,000개로 이루어져 있습니다:" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "X_0Pyek1CxB3", + "outputId": "896479f6-0e4b-432e-b0e5-152cbf6a8b75", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "X_train_full.shape" + ], + "execution_count": 107, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "(60000, 28, 28)" + ] + }, + "metadata": {}, + "execution_count": 107 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "hI3AH5JmCxB3" + }, + "source": [ + "각 픽셀 강도는 바이트(0~255)로 표현됩니다:" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "NKTjzPPYCxB3", + "outputId": "7c3ce99e-2406-45ee-c421-e3492cf3334a", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "X_train_full.dtype" + ], + "execution_count": 108, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "dtype('uint8')" + ] + }, + "metadata": {}, + "execution_count": 108 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "dQeRsKZtCxB3" + }, + "source": [ + "전체 훈련 세트를 검증 세트와 (더 작은) 훈련 세트로 나누어 보겠습니다. 패션 MNIST처럼 픽셀 강도를 255로 나누어 0-1 범위의 실수로 변환합니다:" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "DfaLKdYcCxB3" + }, + "source": [ + "X_valid, X_train = X_train_full[:5000] / 255., X_train_full[5000:] / 255.\n", + "y_valid, y_train = y_train_full[:5000], y_train_full[5000:]\n", + "X_test = X_test / 255." + ], + "execution_count": 109, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "MV5re-P3CxB3" + }, + "source": [ + "맷플롯립의 `imshow()` 함수와 `'binary'` 컬러 맵으로 이미지를 출력해 보죠:" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "1veea5cxCxB4", + "outputId": "267d3ee9-5338-4b1d-d53c-ce229d3d8892", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 248 + } + }, + "source": [ + "plt.imshow(X_train[0], cmap=\"binary\")\n", + "plt.axis('off')\n", + "plt.show()" + ], + "execution_count": 110, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAOcAAADnCAYAAADl9EEgAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAGHElEQVR4nO3cz4tNfQDH8blPU4Zc42dKydrCpJQaopSxIdlYsLSykDBbO1slJWExSjKRP2GytSEWyvjRGKUkGzYUcp/dU2rO9z7umTv3c++8XkufzpkjvTvl25lGq9UaAvL80+sHABYmTgglTgglTgglTgg13Gb3X7nQfY2F/tCbE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0IN9/oBlqPbt29Xbo1Go3jthg0bivvLly+L+/j4eHHft29fcWfpeHNCKHFCKHFCKHFCKHFCKHFCKHFCqJ6dc967d6+4P3v2rLhPTU0t5uMsqS9fvnR87fBw+Z/sx48fxX1kZKS4r1q1qnIbGxsrXvvgwYPivmnTpuLOn7w5IZQ4IZQ4IZQ4IZQ4IZQ4IZQ4IVSj1WqV9uLYzoULFyq3q1evFq/9/ft3nR9NDxw4cKC4T09PF/fNmzcv5uP0kwU/4vXmhFDihFDihFDihFDihFDihFDihFBdPefcunVr5fbhw4fite2+HVy5cmVHz7QY9u7dW9yPHTu2RE/y92ZmZor7nTt3Krf5+flaP7vdOej9+/crtwH/FtQ5J/QTcUIocUIocUIocUIocUIocUKorp5zvn79unJ78eJF8dqJiYni3mw2O3omyubm5iq3w4cPF6+dnZ2t9bMvX75cuU1OTta6dzjnnNBPxAmhxAmhxAmhxAmhxAmhunqUwmB5+PBhcT9+/Hit+2/cuLFy+/z5c617h3OUAv1EnBBKnBBKnBBKnBBKnBBKnBBKnBBKnBBKnBBKnBBKnBBKnBBKnBBKnBBquNcPQJbr169Xbk+ePOnqz/7+/Xvl9vTp0+K1u3btWuzH6TlvTgglTgglTgglTgglTgglTgglTgjl99b2wMePHyu3u3fvFq+9cuXKYj/OH0rP1ktr1qwp7l+/fl2iJ+kKv7cW+ok4IZQ4IZQ4IZQ4IZQ4IZQ4IZTvOTswMzNT3Nt9e3jz5s3K7d27dx0906A7depUrx9hyXlzQihxQihxQihxQihxQihxQqhleZTy5s2b4n769Oni/ujRo8V8nL+ybdu24r5u3bpa97906VLlNjIyUrz2zJkzxf3Vq1cdPdPQ0NDQli1bOr62X3lzQihxQihxQihxQihxQihxQihxQqiBPecs/QrJa9euFa+dm5sr7qtXry7uo6Ojxf38+fOVW7vzvD179hT3dueg3dTu791Os9ms3I4cOVLr3v3ImxNCiRNCiRNCiRNCiRNCiRNCiRNCDew55+PHjyu3dueYR48eLe6Tk5PFff/+/cW9Xz1//ry4v3//vtb9V6xYUblt37691r37kTcnhBInhBInhBInhBInhBInhBInhBrYc84bN25UbmNjY8VrL168uNiPMxDevn1b3D99+lTr/gcPHqx1/aDx5oRQ4oRQ4oRQ4oRQ4oRQ4oRQA3uUsn79+srNUUlnSp/h/R9r164t7mfPnq11/0HjzQmhxAmhxAmhxAmhxAmhxAmhxAmhBvack87s2LGjcpudna1170OHDhX38fHxWvcfNN6cEEqcEEqcEEqcEEqcEEqcEEqcEMo5J3+Yn5+v3H79+lW8dnR0tLifO3euk0datrw5IZQ4IZQ4IZQ4IZQ4IZQ4IZQ4IZRzzmVmenq6uH/79q1yazabxWtv3bpV3H2v+Xe8OSGUOCGUOCGUOCGUOCGUOCGUOCFUo9VqlfbiSJ6fP38W9927dxf30u+mPXHiRPHaqamp4k6lxkJ/6M0JocQJocQJocQJocQJocQJoXwyNmAajQX/V/4/J0+eLO47d+6s3CYmJjp6JjrjzQmhxAmhxAmhxAmhxAmhxAmhxAmhfDIGveeTMegn4oRQ4oRQ4oRQ4oRQ4oRQ4oRQ7b7nLH8cCHSNNyeEEieEEieEEieEEieEEieE+helotX4Ho/9UQAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "9y6aHirzCxB4" + }, + "source": [ + "레이블은 (uint8로 표현된) 0에서 9까지 클래스 아이디입니다. 편리하게도 클래스 아이디는 이미지가 나타내는 숫자와 같습니다. 따라서 `class_names` 배열을 만들 필요가 없습니다:" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "BvvoJ3yUCxB4", + "outputId": "faf707cb-676a-42ff-b066-69d9a39ed738", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "y_train" + ], + "execution_count": 111, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([7, 3, 4, ..., 5, 6, 8], dtype=uint8)" + ] + }, + "metadata": {}, + "execution_count": 111 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "CfBn_UnfCxB4" + }, + "source": [ + "검증 세트는 5,000개의 이미지를 담고 있고 테스트 세트는 10,000개의 이미지를 담고 있습니다:" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "mgWBXgSwCxB4", + "outputId": "7ff9c708-707b-467f-829f-2a0b03fe2679", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "X_valid.shape" + ], + "execution_count": 112, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "(5000, 28, 28)" + ] + }, + "metadata": {}, + "execution_count": 112 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "sS1u383UCxB4", + "outputId": "74a970d0-2c42-4e61-fcda-3067b1be3665", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "X_test.shape" + ], + "execution_count": 113, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "(10000, 28, 28)" + ] + }, + "metadata": {}, + "execution_count": 113 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "TOkB8Or-CxB4" + }, + "source": [ + "이 데이터셋에 있는 이미지 샘플 몇 개를 출력해 보죠:" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "jz9OnbzPCxB4", + "outputId": "c47d46b9-a688-48fb-cc86-802c5857bedc", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 308 + } + }, + "source": [ + "n_rows = 4\n", + "n_cols = 10\n", + "plt.figure(figsize=(n_cols * 1.2, n_rows * 1.2))\n", + "for row in range(n_rows):\n", + " for col in range(n_cols):\n", + " index = n_cols * row + col\n", + " plt.subplot(n_rows, n_cols, index + 1)\n", + " plt.imshow(X_train[index], cmap=\"binary\", interpolation=\"nearest\")\n", + " plt.axis('off')\n", + " plt.title(y_train[index], fontsize=12)\n", + "plt.subplots_adjust(wspace=0.2, hspace=0.5)\n", + "plt.show()" + ], + "execution_count": 114, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAqIAAAEjCAYAAADpBWMTAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzdebyN1ffA8c8KJUMDRaUMlZKhNHybxferQZOSkgakSSlNmmk0Nc8lDSJKo1QqzYV+DTTQSBqElCFlCIX9++Ox9nPOvede1x3OPsN6v15ernPPvXff7Rn2s/baa4tzDmOMMcYYY9Jtg9ANMMYYY4wx+ckGosYYY4wxJggbiBpjjDHGmCBsIGqMMcYYY4KwgagxxhhjjAnCBqLGGGOMMSYIG4gaY4wxxpgg0j4QFZGlBf6sFpF7092OTCIiI0VkrogsFpHpInJm6DZlAhFpLCIrRGRk6LaEJiKdReRbEVkmIj+ISKvQbQpFRM4XkckislJEhoVuT2gi0lBEXhWRRSLym4jcJyKVQ7crFDs+ChORWiLywtrrx0wROTl0m0ISkV1E5B0R+UtEZohIh9BtCin0NSTtA1HnXA39A2wFLAeeTXc7MswgoKFzbhOgPdBfRPYM3KZMcD8wKXQjQhORQ4Cbge5ATeAg4MegjQrrV6A/MDR0QzLEA8A8YGugJdAa6Bm0RWHZ8VHY/cA/QF3gFGCwiDQL26Qw1g6wXgTGArWAs4GRIrJT0IaFFfQaEnpqviPRLz8hcDuCcs597Zxbqf9c+2eHgE0KTkQ6A38Cb4duSwa4AbjROfeRc26Nc26Oc25O6EaF4pwb7ZwbAywM3ZYM0Qh4xjm3wjn3GzAOyMtBBtjxUZCIVCe6117jnFvqnJsIvAR0CduyYJoA2wB3OudWO+feAT4gf/sDAl9DQg9EuwGPO9tnFBF5QET+Br4D5gKvBm5SMCKyCXAjcEnotoQmIpWAvYAt104hzV47bbJx6LaZjHEX0FlEqolIPeBwohuJMQA7Aaucc9MTXptCHj+spCBA89CNCCjoNSTYQFREGhCFf4eHakMmcc71JJp2bQWMBlYW/xU5rR/wqHNuduiGZIC6QBXgeKJjoyWwO9A3ZKNMRhlPNKhYDMwGJgNjgrbIZJIaRMdGor+I7jf5aBrRTOxlIlJFRA4lGotUC9usoIJeQ0JGRLsAE51zPwVsQ0ZZO00wEdgWODd0e0IQkZbAwcCdoduSIZav/fte59xc59wC4A7giIBtMhlCRDYgilyMBqoDWwCbE+UUGwOwFNikwGubAEsCtCU459y/wLHAkcBvQG/gGaIBWN7JhGtIyIFoVywaWpTK5G+OaBugIfCLiPwGXAp0FJHPQjYqFOfcIqILZGL6St6nshivFlAfuM85t9I5txB4DHtQMbHpQGURaZzw2m7A14HaE5xzbqpzrrVzrrZz7jBge+CT0O0KJPg1JMhAVET2B+phq+URkTprS/PUEJFKInIYcBL5u0jnIaJBeMu1fx4EXgEOC9mowB4Deq09VjYHLiZa8ZmXRKSyiFQFKgGVRKRqvpYrWhsh/wk4d22/bEaUez81bMvCseMjmXNuGVG060YRqS4iBwDHACPCtiwcEdl17XFRTUQuJVotPixws4LIhGtIqIhoN2C0cy4vpwYKcETT8LOBRcBtwEXOuZeCtioQ59zfzrnf9A/RtNIK59z80G0LqB9RGavpwLfA58CAoC0Kqy9RysKVwKlrP87nnNnjgHbAfGAG8C/Rw0q+suOjsJ7AxkS5kaOAc51zeRsRJUoNnEvUH22BQxIq1+SjoNcQsQXrxhhjjDEmhNDlm4wxxhhjTJ6ygagxxhhjjAnCBqLGGGOMMSYIG4gaY4wxxpggbCBqjDHGGGOCWFdttWxfUi/l/P2sP5JZfySz/ijM+iSZ9Ucy649k1h/JrD+S5WR/WETUGGOMMcYEYQNRY4wxxhgThA1EjTHGGGNMEHm7/64x2WrNmjX07t0bgPvuuw+ADz/8EIC99torWLuMMcaY9WURUWOMMcYYE4RFRI3JEvPmzQPgmmuu4aGHHkr63E8//QTkX0T0rLPOAmDkyJF88MEHAOyxxx4hm2Qy0I033shTTz0FwNixYwHYfvvtQzYprb755hsA7rrrLgAefvhhevToAcCDDz4YrF0mvHnz5jFlyhQAXnzxRQDGjx/PV199BUD37t0B2GGHHQDo3bs3G220UdL3+OOPP6hVq1ap22ARUWOMMcYYE4RFRDPAzJkzgegpFWDAgAGIROW2nIvKhu2yyy4A9O/fn+OOOy5AK00oc+fOBeCWW24BSIqGtmrVCoB99tkn/Q3LAA0aNABgxYoVfP/994BFRAEmTpzIkCFDgChaXJAeN3ot6dq1a5kiGplq4cKFQHRtnT17NgCfffYZkD8R0eHDh3PNNdcA+D4QEV599dWU7x85ciTHHHMMADVr1kxPI03aPfLIIwAMHDjQj0GUc86PQYYNG5b0uY033piLL7446bWTTjqJ119/vdRtsYFoIPPnzwdg0KBBPPHEEwAsWLAAiC4SehCoadOmAVFY/KCDDgJgiy22SFdzK8w///wDQNu2bYHoBqo222wzAKZOncp2222X/sZlgFWrVjFgwAAA7r//fv/6eeedB8Add9wBwIYbbpj+xmUAHYhCdMMFOPHEE0M1J5hVq1YBcP311wPRsfLXX38BFLqWAEyYMAGIz7cvvvii0A0nF+gxoQOwfPDvv/8C+IHB2Wef7V8rzuDBgwG44IILaNSoEQD9+vUDcuuc+uGHH3yKgqbzfPvttz5FoVu3bsHalg466Bw4cGDSvyEaZALUqFHDXzd0XLJmzRoALr30UjbddFMATj/9dAB+/fXXMrXJpuaNMcYYY0wQaYuIPvbYY0D0dF67dm0gegoB2G+//fxUUa7r378/gJ8qERE//a5PIPXr12fLLbdM+jp9Kvn55599RFQT0LORRkLPOOMMIDkSeuyxxwJw5ZVXArDNNtsU+71+//13AOrWrVvu7QztqquuSoqEAvTo0cOXbTKxfI0KA/Tp0weAW2+9FUieWivooIMO4v3330967Y033mDJkiVAbk3Hvvfee6GbkHY6S3LVVVcV+Z4mTZpw4YUXJr2m95jVq1czY8YMAM455xz/+WyNimo0+OmnnwaiiKdeK/S8mTx5ct5ERPUaoZHQDTfckBNOOAHAT7nvvvvu/v3PPPMMADfddBMAU6ZMYcWKFUnfc1336HWxiKgxxhhjjAlivSOiTz75JACff/45AEOHDi3R1/3555/xD60c/ViNilWtWpVq1aoBsOuuuwLxKLxgZDDbaXkEjVYkRi2aNm0KRE/xBfM/NaerdevWPl80m91+++1A4YUU5513HrfddhsQHRfr0rt3bx9tv/baawG46KKLyrOpQVx33XUAvi8Azj//fCCOeBh44YUX/McnnXRSwJakn+aF9unTp9AxUb16dS655BIAOnToAEQzLQCbbLKJz+3S/PQtttjCX5dzgc6waA5gPtDIn5biSUVz7R966CEOPPDAdX5PzTPu0aMHkydPBuKIWqbT8YXOPupiz2bNmnHnnXcCcMghhwBRDvGsWbOA+F6r+ZK5VhJv1KhRSf8+8MADefzxx4t8f6dOnQCoU6cOEK/nSKSL20qrxFcevajdfffdQJy4Whp6gKgVK1b4UK9Opeg0wKhRo3JiylXTEL777jsgvilsueWWftCpN5O+ffty9dVXJ71PUxd0Gh/i1dNnn312RTe/XH311Vc+CV7pdOBdd91VohvipEmTgGhF36JFi8q/kYF89NFHANx7773+Na33p+feBhvYRIY+CL/yyitANJBq3759yCalnQ4iEwcGO++8MxA9yLdo0aLIry2YxrDjjjv6G28u+OOPP5L+znWrV6/2x4HWS02k6VzPP/88gE+PS3TkkUcCUU3iESNG+O8LsHjxYpo1a1b+Da8gK1eu5MwzzwTiYIeeD8OGDStUWWPbbbf19yD9PbVSzZtvvpmWNqeLnhMaBCvp/2vjxo2BKAWuefPmSZ8ry3gQbGreGGOMMcYEUuKI6LPPPgvEI1+dQi/qKfqAAw4A4oUnxXnrrbd8aPjnn38G4N133wWi6TZNMs7maXp9utJInkZBE6fgNcL50EMP+SinRkRHjx4NJJd2ytZ6ojfddBPLly8HoEqVKgC89NJLACWeHtQp6z/++MNHd0pyrGU6TS/QKO/RRx/tp5YsEhrTWRX9e4MNNsipiF5J6OIB5xwtW7YEYNy4cUDqhXt///03EC3a0Klrvf7o9SWXbbXVVkAU/co1kyZNom/fvik/t//++/Pyyy8DxS9E0yjh0KFD/WI23bEtW6xcuRKIUps0EqpjFS1npcdBQTrGmTNnDhDPGixbtozq1atXXKPTTFN1NE3w6aef9uWsUtGUjMsvvxyApUuX+pKCGmkv673J7mzGGGOMMSaIEkdE3377bQC//6gm+ZZHqY9WrVr5kgmap6K5lO+++66Plvbu3bvMPyu0Jk2aFPk5jU7svPPOPodHk6oTox8aGc7Wgvaffvqp/7hdu3YAtGnTxr+meUkFc4khKkYMJJWf6dixIwANGzYs76am3Zdffpn077POOot69eoFak3m0lw3E82S6PUhMRKqs1dffPEFAKeeeioQXVs111yvt7lGr5uJNDK27777prs5FUZzOTVClWj//fcHont3wb3Bc5VGfm+++WY/m6izBEVFQlXigmqIN1TJpWgo4KOf06dPB6LNcrTUl5ZvGj9+vD+m9J67bNky/z10xvr//u//APwMZ2lZRNQYY4wxxgRR4ojoTjvtlPR3edN9f3U1tRZYhTgamAsRUTV+/Hggik5oZFPzSKdNm+b3Dp83bx4Qr3CrU6cOr732WrqbW2E0p0d98sknPtepJKsVt9pqK19hIJuNHTsWgN9++w2I83+POuqoYG3KZHPnzg3dhIyipVUSaSQ0VfkZnYlItcI6F6Ta7CMXcsiVRqn02qd5jRDn7Wl0cH2jod9//31S9Atg00039ffoTLRw4UIALrvsMiDaolIL1G+99dbr/Pq5c+fy3HPPVVwDM4hGirVEYOfOnX1pK/27uA0x9t57bw477DAgXknfo0ePMo3PcqdwXJbReqwPPfRQoZ2VnHN+AKqf0+n4Xr16FSo9kW2uuOIKunfvDsQh/v/9739ANOW+PqUgzjrrrEKlJLJRwcUixx9/PJB6n/DirFmzxhY15QmdOoR48LHbbrsB0Q2i4I1VByS9evXixhtvBEpWqzdX5FIagqYjJQ5AldbTLW3a3IMPPujvP6pevXr+GMtEWu9UFzvvvvvuHH744UW+X9O/hg0bBkT7rv/4448V2sZMoUGwktajbt26NYDfzW+HHXYo91QPu2MZY4wxxpggMiYi+sADDwBxqYBEmgiri1z23HPP9DWsgiVGvFJ9rE+h+vSS7dFQgF9++cV/rLuBaGQU4sUEWmZizpw53HPPPSm/V67selGw8HaqgtOpfPjhhwB+Gmr27Nm+DEmtWrXKsYWZ459//ilUVqa4RYC56tFHHwWgefPmfipVFw988MEHhaLpeg6dddZZaWxl+o0YMcJHyFSNGjWoVKlSoBaVr2eeecYv5lXVq1dnv/32A0of+dW0IC0jmKise4mn26xZs/x1sGBZt5deesnv3KjHScOGDbniiiuAaKETrHtxU7YZM2YMEJcI1IXnqTjn/PVCd/QrTuJGO6VhEVFjjDHGGBNE2iKiurhg5MiRKUtrFLf4QJ/2NY+w4NNuNjr55JMBmDlzJgsWLADiklVLly7179NcrlyIhKrTTz+90BaDqnPnzn4/ZI1gDBo0qND7dJ/kI444ooJamT6LFi3y5dFKYtmyZX5WQCODiaWudDtezX/KNcuWLSu0h/jBBx8cqDXpp8XoNc+8qGiEvq6LdHI9Eqrldx599NFCiyAvvvjinCmD9vPPPxcqbde8eXPeeOONMn3fhx9+GEgu06O5gBotzFSNGjUC4gU4N9xwg98jPRW9x+ji6HPOOcfvNa8RUS1/lQvmzZvHhRdeCOB/T50x2Wijjfz2yFr0/6+//qJatWol/v7ru5ahoAobiL711ltAPJ0+ZMgQoGw7NZx++ullb1iG0Cn3xARwHYj26dPHh9F1JZqulM/W2qGJtt12W6688soSvz9VHbcLLrgAKPlOTJls1apVSQ8fRRk1ahQQrWycNm1ake/LhQe14qR6aNVV4Lnqxx9/9Nc/raGrF//Em8Dee+8NRHV5dS/6d955B4irUGgN6FyjA9HEGsM6kNphhx2CtCldjjnmmFJ/rT6w6AKeRJom1bZt21J//3TQc+D6668HoGnTpv4eqnSqvVOnTilryWpVAN2lTGsVF7VjVTbQQeduu+3m7wu6iE1/r9NPP92ngvXs2ROIUr206sJpp50GFL970rnnnlumdtrUvDHGGGOMCaJcw0nff/89EIW59Sk8lQYNGgCw+eab+9c0RK7lRDRBNjHyky0J0/PnzwfikkslpQsunn/+eV96QneF0H1zL7roovJqZtZIfBLTj3fcccdQzSl31apVY+eddwYoFOlcvHgxTz/9NABnn312ib5fru+5rtcKiOus5lLqSiJdcNG1a9dC081qn3328QtUNKJRq1YtPzWpC/p0ai5Vjc1ckGp3F73H6M59ueqAAw4o9de+8sorQJwGlkjT4bJNp06dip2aT2XJkiVAvHC0pAtGM1n//v2BaJZMU1N0EVKqurq6aPynn37ipZdeAuIUIN2ZLRW97pSWRUSNMcYYY0wQ5RIR1cVHWvD0xx9/pEaNGkC0IwPEe5hus802PglYI6Op6NdBnNOQDbvMjB8/3ud1aoRT9wNeH7pjhiYPF5cTmOsSy4kceuihQFSwOFdUr17dHyv6/3zNNdcAUZK5FmkuiZYtW/q9hHNV4sIujXjlSmkeped9165dgWgHMi1gr3um6/7Q//3vf1Mu/tNcNy3XMnDgQCDavUxzSXOJRnwT6Q4wue7aa69NKoG3LgsWLPDlv3SBTyLNqe3SpUv5NDAL6EymlhfU8oHZ7MUXX/Qfa2RTF/oW55hjjvGL33TP+eIiomVlEVFjjDHGGBNEuUREtai2bpHVvn17HxVc323BdH/kmTNn+td05aPuxZ6J9GmqR48e1K1bFyhdJBSi8hk9evQAyl4oNpvpKr/Fixf713I1R1b/v3Wl4ieffFKir9PVolqap1+/fin3Hc8Fv//+OxBvgpDLpkyZAuDzQhs0aOBXvZc0P1pL/Hz88cdAVJ0h8e9codfeRYsW+dc0t1Fn6XLd3Llz/XafqcpUaZRPKykMHjyY2bNnF/n9tEJHw4YNy7mlmeu9995L+ncuVKjR8YNzbr02OOnUqZOf6dbtXvU+vMkmm5RzK8tpIKq7uuiUUVnKHcyYMQOIbzqQHTUCX3jhBSCaWm3Tpk2pvse3334LRPsI6xStDjTycecYHYzNnDnTTz3m6m5BujhNB5G6y0lRdD9prUebDWkrZaWLtbRMD8S/f67SG8nxxx+/Xgv0Fi9ezPHHHw/EZZtylU5JJ+7KpzUQtbzbqlWrcqLUG0TT5bqA8fPPPwdg+vTpfvCd6hq5cOFCIL6/pqKpcp07d6Z58+bl2uZsUHB3u1ygKRYLFizg9ttvB+KUnuKuJ5UqVfL3XL3e6lS9XlcSvf7662VKg7GpeWOMMcYYE0S5PCLqE1h5FH7VaX612Wab+eLlmaxVq1ZAFMHQgspacmmXXXbxO+EoTT2YMGECo0ePBuK9YJ1zPhKqU9GpEvFzXa9evfzHuvjtP//5T6jmBNG9e3e/6OSMM84AohJWuV6iKZFOIermGBDPkuTqYpTddtsNiMvZJU4x9+nTB8AvXoI44qUzKSeffLKfjtVrSdOmTYHcWuhXlLFjxwJxKbNrrrkmZXmibLT11lv7e63OCKxcudKXTyypKlWqAHHKm0ZZtZScyX660cHHH3/sd9rTknAa9U51Db377rt9apymKBx99NFF/pxLL73UIqLGGGOMMSb7ZEzSTIsWLYB4m0t16KGHst9++4Vo0nrRp8rjjjvORza19IqIFCq4rdGKBQsW+DywxK369Ik3G6LBFSWxgLdGiPKFFh3u2bNnzpUmWl+aLK+LMSAuUF7WPY4zlUYXbr31ViC6DmiO19ChQ4HkhaC68YWeM4mzKvvssw8Q7yWea9F0nZHTkn+JW9xq1C9X9plXWlpIZ9q++eabpNzpdWnatKkv23TCCSeUfwNzgK55yWa6CPauu+7y11HdTloXMerfiRKvH3ru6KLxVMo6U5kxA1GtlagrOvWikm2rpB988EE/yExMnteP9T83cfCpifU6mL3qqqs47rjj0tbmbJAvg7FU+6ibZK1ataJ9+/ahm5EWek1o0qSJH2joMZJYI7CgJk2acMoppwBw+eWXA6SsNZoLNE1D0xe6dOni01m0ektF1kAMaeLEiQD8+uuvvk6k7pGuA4xBgwYVun6ecMIJxdbxNtC4cePQTSgzTd+ZNGmSfxDVQNlXX31V5Ne1bt3aT+vrdaQ4+nBcWjY1b4wxxhhjgpB11KlMSxHLUaNG+SfW6tWrA/DII48ArPd+sQWU97xdifpjwYIFQLw7DsCQIUOAqDQTJNco04VIaSjRFKQ/SqtRo0ZAFC3XaI4u1NDdYsooq/ojDSpintv6JFmp+0NL2hVcFPrWW2/52sU6k6JR0AqQMf2RIaw/kmVtf9x2220AXHbZZUCU7gBlrl+etf1RQVL2h0VEjTHGGGNMEEFzRHWHlFtuucVHvLRYahkjoUFptHPw4MH+tcSPTclo+aZ+/fr5/LgNNrBnJ5OfNOqpuV7GmPKnOwfVrFkzcEvyh93VjTHGGGNMEEFzRHWF/J133ulXOR5yyCHl+SMsPyOZ9Ucy649kliNamB0jyaw/kll/JLP+SGb9kSxlf2TEYqUKZAdBMuuPZNYfyWwgWpgdI8msP5JZfySz/khm/ZHMFisZY4wxxpjMsa6IqDHGGGOMMRXCIqLGGGOMMSYIG4gaY4wxxpggbCBqjDHGGGOCsIGoMcYYY4wJwgaixhhjjDEmCBuIGmOMMcaYIGwgaowxxhhjgrCBqDHGGGOMCSLIQFREaonICyKyTERmisjJIdqRKURkpIjMFZHFIjJdRM4M3aaQROR8EZksIitFZFjo9oQkIhuJyKNrz5MlIvKFiBweul2hiMjSAn9Wi8i9odsVkl1Pk9k5U5iI7CIi74jIXyIyQ0Q6hG5TaCLSWUS+XXve/CAirUK3KZTQ15DK6fxhCe4H/gHqAi2BV0RkinPu60DtCW0QcIZzbqWINAHeE5HPnXOfhm5YIL8C/YHDgI0DtyW0ysAsoDXwC3AE8IyItHDO/RyyYSE452roxyJSA/gNeDZcizKCXU+T2TmTQEQqAy8CDwKHEPXLyyKyu3NuetDGBSIihwA3AycCnwBbh21RcEGvIWnf4lNEqgOLgOZ6EojICGCOc+7KtDYmA4nIzsB7wIXOuWcCNycoEekPbOucOy10WzKJiEwFbnDOPR+6LSGJSDfgOmAHl6d7Fdv1tGTy+ZwRkebAR0BNPU9E5A3gY+fcNUEbF4iI/B/wqHPu0dBtCS0TriEhpuZ3AlYVeBKbAjQL0JaMISIPiMjfwHfAXODVwE0yGUhE6hKdQ/ka7UrUDXg8Xweha9n1dB3snElJgOahGxGCiFQC9gK2XJumMFtE7hORfJ19C34NCTEQrQEsLvDaX0DNAG3JGM65nkR90AoYDawM2yKTaUSkCvAEMNw5913o9oQkIg2IphiHh25LYHY9LYadMwBMA+YBl4lIFRE5lOjcqRa2WcHUBaoAxxPdb1sCuwN9QzYqoODXkBAD0aXAJgVe2wRYEqAtGcU5t9o5NxHYFjg3dHtM5hCRDYARRHk85wduTiboAkx0zv0UuiGB2fW0CHbORJxz/wLHAkcS5VT3Bp4BZodsV0DL1/59r3NurnNuAXAHUS5xPgp+DQkxEJ0OVBaRxgmv7YZNmySqDOwQuhEmM4iIAI8SPcl3XHtjyXddsWgo2PU0JTtnkjnnpjrnWjvnajvnDgO2J1qkk3ecc4uIBuGJKT35nN4T/BqS9oGoc24Z0dTzjSJSXUQOAI4henLNOyJSZ20ZiRoiUklEDgNOAt4O3bZQRKSyiFQFKgGVRKTq2pWf+WowsAtwtHNu+brenOtEZH+gHrZa3q6nRbNzJoGI7Lr2OlpNRC4lWiU+LHCzQnoM6LX2/rs5cDEwNnCbgsiEa0iogvY9icryzANGAefmcakRRzQNP5to5dptwEXOuZeCtiqsvkTTJ1cCp679OC/zd9bmQvYgymP6LaF+5imBmxZSN2C0cy7vp5/XsutpAjtnUupCtAh2HtAWOMQ5l8/rEPoBk4iigd8CnwMDgrYorKDXkLSXbzLGGGOMMQZsi09jjDHGGBOIDUSNMcYYY0wQNhA1xhhjjDFB2EDUGGOMMcYEYQNRY4wxxhgTxLpqM2b7knop5+9n/ZHM+iOZ9Udh1ifJrD+SWX8ks/5IZv2RLCf7wyKixhhjjDEmCBuIGmOMMcaYIGwgaowxxhhjgsjn/buNMcbkmDVr1vDzzz8nvTZs2DBatmwJwH777QfA1ltvne6mmSzQt2+0m/SCBQsA6N69O/vss0/IJuU8i4gaY4wxxpggLCKaZpMnTwbg22+/BeD3339n2rRpAIwfPx6A6dOns+222wJw7bXXAnDWWWelu6nB9OrVC4D7778fgHfeeYc2bdoEbJEx2UEjgS+//DKjR48G4L333gNApPCC1XfffReA1q1bp6V9FWnSpEkA3HLLLTz//POFPu9ctOC4Tp06AP49Bx54YJpaaDLVlClT/D126tSpAKxcudL/rdH0jTbaKEwD0+SOO+4AoE2bNn7GIB0zBxYRNcYYY4wxQVR4RFSfQp966ikAbrjhBh8BTGXnnXcG4O233wagbt26VK6c/YHbsWPHAtChQwcAVq1aBSRHKbSvRIQ5c+YAcP755ye9/9xzz01PgwPSPtG/33jjjZyPiP72228AvPbaa0AcMf/mm2949dVXAejduzcARxxxBKYqtdAAACAASURBVLvssgsAG2+8MQCbbropAKtXr+bxxx8HYNmyZQD06NGDKlWqpOPXMIHocXP11VcDcVQHCp9PiY499lggigjVr1+/optZrpYvXw7AqaeeCsDrr78OwN9//+3fc+SRRwJRVGfJkiUAPP300wAcc8wxAMyePdufRya/XHXVVUA0PimYV6yGDRvm37fTTjulq2kVTsdYd999N1OmTAFg1qxZAGy22WY++tugQQMAPvroowprS4WN8NasWQPE06sXXHCB/9wGG0SB2OrVqwPRIEsvKjpI1anp5s2b89ZbbwHRoDRb6TTQ6tWrgfimULNmTfbaa6+k9+66664sXboUgJEjRwIwatQoAM4888y8G1R89dVX/PvvvwA5+bsPHz6c7t27A6kHC/ra7bffDsTTJwDbb789gB98TpgwwV80VevWrWnRokX5N9wE9c8//wDR8aAD0FTHT3H++usvAO677z5uueWW8m1gBdOB5Pvvvw/ED+lHHXUU+++/PxBPpVaqVMnfk/Qa/NxzzwHR737ZZZelr+FpotfMWbNmccMNNwDxdaI4F1xwAddddx0Am2++ObD+x1UmW7p0qU9beeCBBwBYvHhxke9v1qwZm2yySVralg4LFy4E4JJLLgGi+2tBel0A+PPPPwH8OfXkk0/SsGHDcm2TTc0bY4wxxpggRKeDi1Dq7aQeeughIJoWTFS5cmX/tKVlEn755Rf/ND5kyBAgnoqGKCoK8MEHHwCsz9NJxmyvpRHOI444Aoiju3feeaeP/qZy+eWXA3DbbbcB0dN7z549S9uMjOmP4mj0XKPpzjn/hFazZs3y/FFB++PXX38FoEWLFixatChqUIrIg06N6NRRcdEJ55z//BZbbAFEUyqNGjUqSZOCb/E5YsQIAD7++ONS/0CdXXnsscf8axoNK4WMO2f0mn3zzTcD0KdPn6S0nqLerwsfAfr165f0uYYNG/LKK68A+LSPImRMf+i1QKOZib9fcXTBqKb79OnTp9AswnrImP7QY1yvE4cffjgA33//fakbo2kMJ5xwQkm/JGP6oyg9e/Zk8ODB63xfvXr1gOh+pPfhUsiY/tDZ1QcffBCADz/8sNB79JzafPPNWbFiBQDz5s1Les9FF13kZ+c0WrrZZpuVtBm2xacxxhhjjMkcFZIjunr1al8ypKArr7zSR0JV/fr1ue+++4C4jMiFF14IwNy5c30OgyahZ2O+Ro0aNYD499IIVXHR0MSvUy+88EJZIqImg2iyuD5VQrx45Prrr/evaWRz/vz5/v2nnXYaADNnziz0fWvVqgXE0YwSRkMzwsSJEwF45JFH/GvFRfsS31Pw8/rvHXfcsbybGYQuKNBZI/07keZutW/f3i+MPOigg5Le8/333/uIqJo5cya//PILsM6IaMZZ3wUkmpOv+dW54ssvvwRg9913L/Q5za1PvHc2adIEiAu3699//vmnz6O96aabADjkkEPWJ+qVkfT80cWfRdHxSZcuXYDcWKD04osv0rVrV6D46+iLL74IROOwuXPnAvGCP+2/8ePH+4WzWnLykUceYbfddit1+ypkIDpv3jy/uEY1a9YMiBbbFEenAO68804A3xm5omPHjmX6+qJW9pnskzg9pAv39CaiK4AB/vOf/wBxncSXX3455QBU6cNNNlYa0IVY/fv395U2/vjjD6D4C+j8+fP9wgOlD3033nhjRTQ1rZxzxQ5ANeVn0KBBAHmxOE3Tv1IttiiO3jy/++67cm9TuumAcfr06XTu3Dnle3bddVe/WEkXeKWi6TD9+vXzg7XPP/8ciNJA9NjKFjoGOeecc4B48Zam7iSqWrWqP6+0CoMuqs5mOh3ftWtXikrDPPXUU1MuYtP6oY0bNwbgiy++AKLUlk8//TTpve3bty/2nrQu2d/TxhhjjDEmK1VIRHTMmDH+4w033BDAL0bShRfr8uSTTwLRvsBaY3H48OEAXHrppVSqVKnc2puJNJH4hRdeSHo916aT8plOmU6aNMkvZituwUWqKeqqVasCUcoLROeZTqG8+eabQDStli00Mly9enW/w1ZJvPnmmz4iqtOPWp6kYHpLNkks0ZQqEgrRTkFapzifnHTSSaX6Oo2MJS6IzTZ6vTj77LOBuE53ovPOOw+IFrxut912RX4vrTesi9/WNXWdDZ566imfwlZcaSbtl8suu8xPXeeCoUOHAvGsUOI9Q8dgTzzxBJA6lSORTrlrubOC3w+iOtiaTrWuWe9ULCJqjDHGGGOCKNeIqO5ckVhwW5PnNYeppPTrunXr5p/UNOpz7LHH+h2Ycokuxho7dqyPjGmBf43yFFzoZbKXLgSYN28ew4YNA0pWOLpBgwb+KfbSSy8F4mLDS5cu9aU1dLedbIqIlpYm2UO8GGVdCwGzgeZd9enTp9DntIC7RsVMyRScZcpGunYiMRKqs486E6DHR3HRUMDvsZ44k6l0gVLt2rXL2OL0ePnllwE45ZRTSlSyTUt51alTp0LblW4anUzcZWybbbYB4NlnnwUotJFOUXTR1jXXXOO/j5Z5mj59OhDNLmiUvjQsImqMMcYYY4Io14io5jPNmDGj3L5n06ZNC702ZMiQpKhrNtI++uCDD/y+4uPGjQOS94lW+nTbqlWrNLXQpMu11167XvluzZs39ysai6PHVT64//77fTT5wAMPDNya8qMrvBNXvGqOl+YAlqbckn6/xO+7js1Nsp6Wp9LZB9WyZcsArSm95cuXc/TRRye91qxZMz9zWNLZR70HaVQw0WGHHQbEVRgyvY+0csKJJ54IFL+BxVFHHcWjjz4KxKXxUtEqJYmVe/bYYw8gs2db/v77b58HnUhnTkoaCVUaDddygI0bN/aR0MRKDbry/qKLLlrvNlfYXvNKdyfIZ3/88Qd77rknEO+mU3Df46Lo9Oqhhx5agS00ITVs2LDc9u795ptv/MfZVg+yLETED0RzYV9srRmrJYoSfyctcVfa/9/+/fsX6qM2bdoUqjeaa7QMmC7OadeuHQAHH3xwsDaVxqhRo/xAQKfj+/Xrt17pb2PHjvVTron7iitNg8v0AajS+2iq0kxK62EOHTrUL/LUBZ26i18iHaAnDkS1P7p27cr5558PxDVaM0WPHj347LPPkl475phjSrzzWEHVqlUD4Pjjj/ev6fGXSBfJloZNzRtjjDHGmCDKNSKqxVMTde/evTx/RFZasmRJqYu9auQiF4rrllTBacNcnzIsDzqN9Oqrr1K3bl0gTufIZTp1nWjhwoVAFBmAaApSp+70fOrbt6+PaGQijcYkTptqMfLEXbfWxxlnnAEkb5agLrnkEh/5yEUTJ04stLPMrbfeCmReRGtdEqNRmp6hO7KtyxVXXAHAww8/nDISClC3bl2aN29exlamly5SSkUXa2r5oeeee84v5nn//ffX6+doUfcvvviCtm3bAtGGAZlA0xW1LBPEC9VGjx5dIT8z8d5clnTJ/BndGGOMMcaYjFKuEdGffvqpPL9dzqhdu7ZP6p0zZw4Q56tstdVW/n1auP/BBx/0W3lqro7SJPJclirXT7dp1CiGiWhO1FFHHQVET6h6TOnWbNnozz//9NEHze3TZPlEb7zxRqHX7rvvvkKvtW7dGogjR1qyJlOlimDoIqXSRi4nTpwIxPmnEPdLNi+CnDdvHgAvvfQSEEX7CuYKTp8+nZUrVwLxdeX5558HotIz2ZILWdCOO+64zvcsXrzYlzd7+OGHgej8KspTTz2VNeWalJaZSkVni7Tk47x581ixYkVa2pVOX375JZB831xXsfrSmD59OldffXWhn1UWFb5YyUQ7u+hOUSVx5plnFqrtpsnUhxxySF5N0yutyGAiWrO3W7duACxYsACILgz6kJONPvnkEyCaOn/77beB1DtKFUcHV4kD0lTVNzKZThkmTn3deeedpfpeurjp+++/L/Q5ndrddNNNS/W9Q1m+fDnXXXcdAPfeey+AH2gWRa+busBH918fNGiQX4WuD3RdunTxC0p1IDN79mwg7s9MoAPL9u3b+8HY//3f/wHxVPQnn3xSooUkunhrn332qYimVqhUe6UrHXQXN/gWEX8OaMpCtqWE6c6TIkKLFi0AfHWA8vTAAw/w448/Jr1Wp04dX7GgNPJvRGOMMcYYYzJChUVEdc/o+vXrl/v3zsVdlRLVqlXLTxvpjjm6l/Rzzz1Hp06dgrXNZAbdUSVxRyGIyotolCsb6T7Xb731lp921AiW/juxlFn//v2BqMSKnhep9t3ONmUtRbVs2TJfz0+vJYnfS3dJSSzJkg100dmZZ57po+eagqLXyjZt2hRaJLvVVlsxZMgQII7+aprPF1984ftI//71119ZtGgREEeVNOITOiK6ww47+I81feWggw7yu++VtoyO7i6kpY3ygV4ra9So4dMRBg4cCBQfQd19993ZcsstK76BpdSzZ0+gbDti/f7770CcytOvXz8g2pmp4HWpatWqJaptXRSLiBpjjDHGmCAqLCKqlf0XL15cqq/XXTBuu+22Qp8L/US6LrrnauXKUfeW5QlT83Y++ugjIMpnsohoftIFGGeccYaPHKpmzZoBUYSwLE+moenvcdFFF/kncJ1dSWXw4MFAvNAv32k+4+WXX56ytBVEm4xkW1m9d999F4gjWN999x2nnXYaEEc29bqredMQ74Dzyiuv+Lw5pQX8Z82a5Qubn3nmmQD06dPHR0779u0LQO/evcv3lyql008/3ecQ69qD4hYK165d2/+uWsLqzTff5IEHHkh6X67PNKaiG8Y450q02Fojgd26dcvo6+xuu+1Wpq//4osvfN60bsJTnPbt25fp51lE1BhjjDHGBFGuEdHEwq66ylnzLQrujbsup556KhCXJAD8XrqZvMJz/vz5fuXlySefDMCFF164Xt/j33//9flMBVfb61O/yX66yvG1114rtrDyf/7zHwA+/vhjIF4hn0hL15TXVqGh6GxHaWY9si3Kt740f7Fjx46FPqfXGJ1JKioaClFUTEtBZQv93b/77jsAmjdvzjbbbAPEUXQtybN48WL/+2mh8+IKtG+33XZ+u0u9dj/00EMZW9qqUqVKfrZAV/Z//fXXfvZRcxsPP/xwIDovtKi7uummm/zH2lfZfP7oZg06I1BSBVd/F2WjjTYC4JxzzgHW/56eDomr/DVPfurUqUBUru7TTz8F4qhu4j1H7x/vvfde0nvW9XO0vKSO80qrXAeiuvOHHhQQ1wAsqUGDBgHxTRegSZMmQLxTSqVKlcrUzor05Zdf+iR6TRqfP39+sSf5Cy+8ACTXS9RpgoKla+6+++6KabhJG619mXhMFFeiSBeqJb5HL4z6wJLtA9D1pTdb3TcccmuRxYEHHggkl1zSclQ6Vab/9998802xx49+Tq+turtONilYQ/arr77yC5eULuK56aab/IChpHR3JV2wo9PxmapRo0ZAHKj4448/fDqclrFKtVBYa8kmLmjab7/9gOSa1tlGHyA0GKYDsPKw++67M27cOCA+PjJR4gLHe+65B4jTA/v37+8fVPR9qXbWKukiyfJ+eLGpeWOMMcYYE0S5RkQ1ItG8eXP/tKqhb93X+ZJLLmH77bcv9LVvvfUWgC9SrE93TZo08XsjZ/KUvNpqq638Lh1aWmPgwIEMGDAAiJ80UkUwUr228cYbA1G/AYWmWHLN6tWrcz79QJ+uUz11lqRcj4iw5557AlGpmnyk59bMmTMDt6RinHvuuUBczmrevHl+ur3gtHviMZP4sU5Zn3LKKUB8DclGGqG8+OKLgei413JFuqBTU6H09XxSq1atEr3vlltuAUjaWahXr14V0qZ0qlevHhCfL6+88gqXXnopEG/+UZwqVaqwxx57JL2mM7Dt2rXL6Eio0iilpudAtGsYRJsxrO/GIEpn3/Se06pVKx8JLa/d+ywiaowxxhhjgpB1bGNVqj2ufv/9dw4++GCAQnk8jRs39sVW1fDhw/nhhx+Awk8v999/f6H3r4fy2Qg1VqL+mDx5MhAXgB03blyxW1TqE4rmOP3888/+KfW4444D4pyxMgrSH+tjzpw5hXKbNtxwQ7/oQI+rcpL2/liyZAn/+9//APjss8/iLyzB02qq9+iCDc2J2nzzzde3zYnKuz+gAo4RiJPqtS832mgjHynUxV3lJOg5o4sIOnToUPw3XXts1KxZE4hy5UaOHAlQ3guTgvSHzpDpNpv16tXzGx0ElvHXVIjzinUGZcaMGT7PVPNGy6kcUcb0h+bWa2k3vadWq1bNL3xWVatW9Quky1na+kO3ex04cKA/53UR3tSpU/124RoN10WvlStX9vcRXfy2wQYb+P7SNTpHHHFEebQ/ZX9UyEAU4n1udT/fggPSouy0004Afjq+fv36ZdlbPSNOigkTJvibgq6UPuyww4BooKm/37HHHgvA9OnTfRi8nGVEfxRnyZIlvr6dHgPXXXedX8FaztLeH1OmTCk0BQRFD0SPPvpoP/jW99xzzz2FVnvOnTsXKHMyfdYNRNu2bQtEe8knVtgoR0HPGV2UNXLkyGJX6uqxobsAVeAK6Iy/hqRZVvSHTsnrKmeIB6C6I1U5yYr+SKOM64/p06cDcRpDzZo1kxaYV7CU/WFT88YYY4wxJogKi4gqTZbVfUuHDBnChAkTgOT6bKeffjoQ74ShZQfKKOOeRgKz/kiW9v749ddf/aKRZ5991r9erVo1AK699log3h2mVq1ahc6Fv/76y5do+frrr4F4OrpGjRplaX/WRkS7devG0KFDK+JH2TmTzPojWcb3x5w5c3wKi5YDa9eunU93KudyiBnfH2lm/ZHMIqLGGGOMMSZzVNhe8/4HrI3maHmFG2+8saJ/pDEZa5tttvG7Xujf6yuxjFk2lBWpCLopgCrrXsfG5KpZs2YlbYwA0Lp164zeGMbkF4uIGmOMMcaYICo8ImqMMeVNN89o0aIFEFecMMYk23fffX1ZHmMyUYUvVgrMEoWTWX8ks/5IljWLldLIjpFk1h/JrD+SWX8ks/5IZouVjDHGGGNM5lhXRNQYY4wxxpgKYRFRY4wxxhgThA1EjTHGGGNMEDYQNcYYY4wxQdhA1BhjjDHGBGEDUWOMMcYYE4QNRI0xxhhjTBA2EDXGGGOMMUHYQNQYY4wxxgRhA1FjjDHGGBNE2geiInK+iEwWkZUiMizdPz9TiUhnEflWRJaJyA8i0ip0m0IQkaUF/qwWkXtDtyskO2eSicguIvKOiPwlIjNEpEPoNoVk50xqdk2Nich7IrIi4RiZFrpNIVl/JBORhiLyqogsEpHfROQ+Eamcrp8fIiL6K9AfGBrgZ2ckETkEuBnoDtQEDgJ+DNqoQJxzNfQPsBWwHHg2cLNCs3NmrbUXxxeBsUAt4GxgpIjsFLRhAdk5U5hdU1M6P+FY2Tl0YzKA9UfsAWAesDXQEmgN9EzXD0/7QNQ5N9o5NwZYmO6fncFuAG50zn3knFvjnJvjnJsTulEZoCPRyTEhdENCsnMmSRNgG+BO59xq59w7wAdAl7DNyhh2zkTsmmpMyTUCnnHOrXDO/QaMA5ql64dbjmhgIlIJ2AvYcu004+y1YfGNQ7ctA3QDHnfOudANMRlNgOahG5Eh8v6csWtqkQaJyAIR+UBE2oRuTAaw/ojdBXQWkWoiUg84nGgwmhY2EA2vLlAFOB5oRRQW3x3oG7JRoYlIA6LpgeGh22IyyjSiiN9lIlJFRA4lOk6qhW1WeHbOeHZNLewKYHugHvAQ8LKI7BC2SUFZfyQbTxQBXQzMBiYDY9L1w20gGt7ytX/f65yb65xbANwBHBGwTZmgCzDROfdT6IaYzOGc+xc4FjgS+A3oDTxDdPHMd3bOROyaWoBz7mPn3BLn3Ern3HCidBbrD+sPRGQDoujnaKA6sAWwOVGOdVrYQDQw59wiopto4lRa3k6rJeiKRXZMCs65qc651s652s65w4giG5+EblcGsHMGu6aWkCNKaTGRfO6PWkB94L61A/OFwGOkcWAeonxTZRGpClQCKolI1XSWCchQjwG9RKSOiGwOXEy0Kjgvicj+RFMmeb3yV9k5k0xEdl3bB9VE5FKilZ7DAjcrKDtnCrFr6loispmIHKbXDRE5haiKQNpyADOJ9UeytTMGPwHnru2PzYhyzaemqw0hIqJ9iaZOrgROXftxPufuAPQDJgHTgW+Bz4EBQVsUVjdgtHNuSeiGZAg7Z5J1AeYS5Yq2BQ5xzq0M26Tg7JxJZtfUWBWi8m/zgQVAL+BY59z0oK0Kx/qjsOOAdkR9MgP4l+jhLS0kjxdXGmOMMcaYgCxH1BhjjDHGBGEDUWOMMcYYE4QNRI0xxhhjTBA2EDXGGGOMMUGsqwRMtq9kKu+6YNYfyaw/kll/FGZ9ksz6I5n1RzLrj2TWH8lysj8sImqMMcYYY4KwgagxxhhjjAnCBqIZ6JtvvqFWrVrUqlWLnj170rNnT5xzWM1XY4wxxuQSG4gaY4wxxpgg1rWzUraH4LIqUXj58uUAnHfeeTz22GNJn/vnn38AqFKlSll+RFb1RxpYfySzxUqF2TGSLKv64+OPPwZgxIgRjB8/HoAVK1YAcOihh/q/DzvsMAA22mij9f0RWdUfaWD9kcz6I5ktVjLGGGOMMZkj7RHRpUuXMnDgQAC6dOkCwC677FLeP0Zl1dPIxIkTAWjVqpV/bauttgJg1qxZAFSuvK6KW8XKqv5Ig6zsj2effZYTTzwRgGeeeQaA448/vjy+tUVEC8vKY6QCZUV/TJ48GYCjjjoKgPnz5/sce5HCv8Jpp50GwKOPPrq+Pyor+iONrD+SWX8ks4ioMcYYY4zJHGUKr5XGp59+yu233w7gI6P5bunSpQDcc889hT530kknAWWOhJoc0q9fv5RRHWNMlAN63HHHAVEkFGDvvffm5JNPBqBz584APg//ueeeY9iwYUCcI/rAAw+ks8nG5LUgoxtdeDN8+HAAunXrFqIZGWPcuHFANOWqGjVqBMC5554bpE0V6eGHH/a/s/5+Bx98cLFfM3v2bADefvttID+PmVGjRgHw/fffB25Jet13330A9OrVC4AmTZpQu3ZtIE5nyScffvghAAcccAAAe+65Jy+++CIA22yzTbB2hbZs2TIgmmafM2cOAJttthkAAwYM4H//+1/S+y+//HIAunfvTvv27QF47bXXAPjzzz/915rIt99+m/TvCkypKxdLliwB4oDX9ttvD8CXX37p3/PGG28AULVqVaZMmVLk9+rRowcAd999N1CqRW0Z69NPP/UfDxgwAIAxY8b4VBb9f95yyy39vy+88MKkz5WVTc0bY4wxxpgggs73rlq1KuSPzwjLli3jtttuK/T6U089BUDjxo3T3aQK8+qrrwJwySWX+HSEd955B4Add9wRgA4dOlCvXj0gjoQBLF68GIBff/0VgEMOOQTIrwjQtGnTgHhGIdcNGjQIgL59+wLxIr5///2Xr7/+GoBzzjkHgOuvv94v7MsXmp7x2WefsdNOOwFw5JFH+s/vscceABx00EEA/j0aTc41mr6kCzsBdtttN4BC0dBEW265Ja+88goAv/32G1DmMnkZS6OaXbt2ZdKkSet8/+jRo4HoXPzuu++SPnfVVVcBcPXVV5dzK8vHm2++CcDNN99covcXl+70+eefA/D7778DUL9+/TK2LhxNV9Hr61133eV/91QL+vS+o///EydO9FFU/b/v0KFDmdpkEVFjjDHGGBNE2iOiGsmAOEf0jDPOSHczglu9ejUQRTC06LISETbZZJMQzapQmqNTp04dHxH9888/gbjciv69LnfeeScAt956a3k3M2PdeOONQPFP7rlEZwU0Qj5ixAgAGjRowBFHHAHAkCFDAGjWrJnPIc1Hf//9NxAtvFH6sUY5yrnUV8YZOnQoAJ988ol/TaPB61KrVq2kv3ONRsF0Ede0adP8tVavJ1rwf8yYMf7jxEhZwaiZzlRkakS0IG3/nnvu6aN8Z599NhCdEz/99BOAzy/u2LGj/9o6deoAUK1atbS1t7zpMaC/S8H/z8SPmzRpQvXq1VN+n++++84fO3369AGiWZaSnmuppH0gWrNmTf+xJr/mo7/++guA999/37+24YYbAtEgq0mTJkHaVZH0d+rYsWOhAaQe9I0aNaJGjRoAfPTRR+ltYIZbR83fnDJu3DimTp0KwJNPPglEA1C16667AvHiknySuLhgffTr1w+IFjltvfXW5dmkjKCLUkTELzQ677zzQjYpY3Tt2hWIp1lFhL333tt/DMnTsvpa4kOvfqwLd7KNpmkkPqgk2meffdLZnLTTqfiC/7cdOnTwA0rVpEmTIgfdAwcO9A8hejw98sgj/vsl1kEvKZuaN8YYY4wxQaQ9IqoLVgA/vZaPEhfiKH1C7dmzZ7qbk1bXX3+93+9ZS1Zp8vfTTz9N1apVgXgaScvVQBw5zfU+SiXxSXaLLbYAYNtttw3ZpAqTWMpM9wFPdNNNNwHxQoR33303b6bmddpUI1ht2rTxi/50Md/TTz/t33/JJZcAcdmamTNn5lREVCNcOqUqIj5ql8+zbuqcc87h9ddfB1JPw6b6t55zughFp7CzyZgxY1K+/v777/vz5OWXXwaS01X0Ppxr11ZNO9H/Z51Kf/755wu999tvv2XmzJlA3I+aBiUihY6dESNGMHLkyKTvr/fvVN+/IIuIGmOMMcaYIIKWb9Li5Pm0WEmfxBIjPhtvvDEAZ555ZpA2pVu1atX8LlKaw6VR0AYNGvDVV18BcSmVRFqiRQv+5wMtopxIS/Hsu+++6W5OhdLSVFOnTuXwww8Hil9Ast9++wHxeZUPCuZ4zZ07139Oy5ldfPHF/rXevXsnvT/XFNyhr06dOkkLTfJV//79AXjhhRf8/71GwVIVIj/rrLP8x1r6K1utWbOGX375Jem1b775BoB27dqxcuXKpM/pD8QFrAAAIABJREFUwkiIFj5CPNuSKzO3+nvpsaDlmBI3KtBzacyYMX6DiILXm1R5wwU/BmjatGmJ22YRUWOMMcYYE0TaI6I6KgeYMWNGun98cFogWKN+EJfByMdtK3feeedCr/34448AvpwGQN26dYF4m8t8sXDhQh588MFCr3fp0iVAayqebss3efJkv21lcTbddFMgLgOWj6ZPn57y9YLnSosWLYDka3Au+OGHH5L+fd5557HnnnsGak04Wp5HZ1A0uuWco3Xr1gC89957QdqWbu+//77PpVYl3QhES0xqbnXbtm1zYktPzfc99thjgTj3s2nTpikrJxTMA008pzR/VL+uX79+PidU1y+sj7QPREuztD+XJNZRVVon0UTuuOOOQq9puZ7//ve/6W5OUKNGjSo00GjZsiVHH310oBZVrJdeesl/3LBhwyLfp4nx48aNA6Kp6NNOOw2Agw8+GIBTTz21YhoZmE6bap3QogZdiQtDAS666CIguYReNtPzQtMy9MaZj/eY+fPn+ylkLe+VOFVa1p1vso3WzE2lbdu2Pu1HFyZBvAhQA0N6fGnN72ynQTCdki9uWl1EePzxx4F4ij0xXUN3tNPB56GHHlqmttnUvDHGGGOMCSLoYqV8ok8hiUnRECXWd+rUqciv04Vcum/uSy+9RMuWLSuoleG9+eabKQsO59sTvZowYYKP9OjfjRs3zqnyO4kOOOAA/7H+n2v0QhdoAYXSFXSnLcAXM8/ViOgVV1wBxJHfVBHRL774wkeX9bjRjSJyhUZCNS2juMVYM2bM8ItjtbTVgQceCMQ7lmWzgw46yBcXT1WWSRev6Xnz6aefZvUuQeuy8cYb+99PF2jpTo6bbbYZVapUKfQ1en3RiKh65JFHuOCCCyqyuRVu5MiRftHivHnzgOJ3VurQoYMv4ZWqBFqqdLGysIioMcYYY4wJwiKiafLZZ58BhRdVtGnTxpdvUqtWrfIFmXX/ZNWhQ4ekRTy5QovWP/zwwyxfvrzQ53X7U42CaJmafFAw0nPttdcGaknF07zQTp06+Tyv+++/v8j3awS1UaNGvmC7FnfPdcUtyBk/fjxLly4FcrdsU0m89dZbQLStsC6E0/6YMGECEC0c1fy5bKOld6ZNm5Yyz6/gxxo1HT16dM7OGEC0zkDvoakWxK6PVPejbKHHde/evVmwYAEQ7zWv+Z1nnXUWAwYMAKJSXxAtZNItlVOt2ShvQQeiOl09bdq0Mh8s2SpVku9TTz1VaACq1qxZU9FNSquJEycC8TSsniwFaY1VnU7TOqxbbLGFry2aL3SleC7SB46nn37aT6Hq/3Vi7T8dsOrxANGOXRDvujRlyhQg3mM6HyxcuBCAwYMH+9e0j/JpoZ8O0DS1aenSpX5XNl3op8dXLlRcOOWUU/z9VBdrXX311UC0kEkH3To4GzhwYE4PRKHsA9BspjVANc1g3rx5/mFExxyJ1wjd/Shx4KrpTnre9OvXr8Laa1PzxhhjjDEmiKChJJ0q0b9z2eabbw7EEZ9Vq1YBUYRTp480Cqr/TmXx4sV+h4j12bkgU+lUe1GR0II0gqqLdW6//XZf7y2X6IKtjz/+2L921FFHAcXvNJSLTjjhhPV6v0ZOdbFOPkVEtXZoYskvnW3QaEfiDjq5aMCAAb7u4+zZs/3rWvJLF63kAt0hacSIEUW+Z4sttvDX18Qpeo0ap9plyWQ3nWLXVAwR8dHRbbfdFohTUxLLnel0/cSJE7nrrruSvpdFRI0xxhhjTM5Je0S0du3avqByPkRCVcECuhrZO/vss9fr+7Ro0SInIqFKo3wffPABkFy+pyRefPHFnIyIavHxWbNm+de0/EbBxW0mtaJ2HMpFOsPy+uuvA1EZFr3OJu47n0vatGkDxHmPmvOWakbpqaee8tfe888/H4hL1Wh5n1ymu93o3wsWLPA7MVlENKKzc7ng4YcfBuJj/JRTTvElqEq685F+bTrWpVhE1BhjjDHGBJH2iGjz5s39lpa6yi+fnHjiiUAcES0pjYLptn65QosOa97KRhttlLQ6GqK8lZNOOinl15dmX9tMplG8uXPnAsnFhnW/aJNaLuwHXVqaB6rbeopITpf5StSnTx8gLrKdqlzVxhtv7N+nka+qVasC0K5du3Q0s1xpvq/m9K2LRj21b0Qkp2bWyoOWMCqoc+fOaW5J+dH/77PPPnu975X6tRtsUPHxyiCLlfTE14Ho7Nmz2WuvvUI0Je26dOkCwBNPPAHARx99VOz7W7RoAcDll18OxDXAck39+vUBuOSSSxg0aFDS55o2bcrxxx8follppyWHfvnlFyC6GOTyTlrlSY8RLVuTL6ZPn84rr7wCxDePtm3b0qtXr5DNShsNbBTnpJNO4u+//wbiPtL0l3333bfiGldBdK9v/Z3WVYqpf//+QLyrzjnnnJNzD/FlMWHCBMaOHZv0WteuXYH43pRNateuDcSBDE3DWBct2fTEE0/43zuxzFNFsal5Y4wxxhgTRJCI6LHHHgvgywPcdNNNtG3bFoinaitVqhSiaRVOi5Hr7i8LFy70C5m++uorINpLXKfVdOoll/cFNsXTKLopXuPGjYF4QeCcOXNCNidtUpVVOfjgg32puHyhkdFUi04Sd8fRWaWOHTump2EVQKOZjzzyCBDtslXUoqP+/ftz8803A/HvnuslvCCOAmppK52JTUxJePfdd4HoWNCUML1Hn3zyyUB27kyWmIKxPnSR04IFC/yYI9Ve8+XNIqLGGGOMMSaIIBHR/fffH4C6desCUdFufZr79NNPkz6Xq3Tx0bbbbuv3yDapjRkzxudzae6LMUXRKIBGOxYsWJCT+XC6AcYTTzzhc8GuvPJKIM4pzye6CcSwYcP8whONhLZo0YInn3wSgE022QSIF0hmI70e6qLXpk2b+nuoHgtazHznnXf2Wz7qdq977LFHWtsbguY23nrrrQBJZf60hJeu1fjrr7/853SNQqrtt7PFKaecAsAbb7wBwN133+33jt9zzz2BOGL8+uuv+3xYPXZEhNtvvx2AJk2aVHh7gwxEq1SpAsQrPNu1a+cvDrk+ADXF23///f1q1hUrVgBRyoJeSPNtINqtW7e8qHNYnrQ2re5K9eyzz3LuueeGbFK50vrLd999NxDdNHSg3bNnz2DtCk13W7vqqqu46qqrAremYmn9aR18jhw50g88EwcTEA1INQ0hHQtPMsV7770HwD///APEA9HRo0f7xaCqRo0aPsVlfWt7ZyLdLUmvCxMmTODII48EYLvttgPi3QxnzpxZaAq/Y8eOJa7IUB5sat4YY4wxxgQhiXUKUyj2k1mgvLOMrT+SVUh/7LPPPkA81QbRUxuUeymNrOiPNKqIrPy094nuLqSLEw4++GD/Wilq4mXcMaLTsvfee69/bdKkSUBaplwzrj8CC9oful/8wIEDi6zLfcwxx/h9xtMgY46P7t27AzB8+PBCn9NZWa1PfdFFF1VUmbyM6A8R8VHPghFz55xfxKZT+ldffXVFpTOl7A+LiBpjjDHGmCCC5IgaUxzdAeWYY44J3BKTjf773/8C0KlTJwCeeeYZXnjhBSC7S/YozYVUgwcPzovFJ6YwzRHVEkUmpjMHujB4xowZQNRnOuumJZpy3bhx4/wirPHjxwNxRLRHjx6+nFeo64hFRI0xxhhjTBCWI7p+rD+SWX8ks/4ozPokmfVHMuuPZNYfyaw/kuVkf1hE1BhjjDHGBGEDUWOMMcYYE8S6puaNMcYYY4ypEBYRNcYYY4wxQdhA1BhjjDHGBGEDUWOMMcYYE4QNRI0xxhhjTBA2EDXGGGOMMUHYQNQYY4wxxgRhA1FjjDHGGBOEDUSNMcYYY0wQQQaiItJQRF4VkUUi8puI3CcilUO0JROIyEgRmSsii0VkuoicGbpNmUBEGovIChEZGbotmcD6I2LXj2QisrTAn9Uicm/odoVk19TCRKSziHwrIstE5AcRaRW6TSHZ9TRZyOMjVET0AWAesDXQEmgN9AzUlkwwCGjonNsEaA/0F5E9A7cpE9wPTArdiAxi/RGx60cC51wN/QNsBSwHng3crNDsmppARA4Bbga6AzWBg4AfgzYqPLuerhX6+Ag1EG0EPOOcW+Gc+w0YBzQL1JbgnHNfO+dW6j/X/tkhYJOCE5HOwJ/A26HbkgmsP5LY9aNoHYkG6RNCNyQku6YWcgNwo3PuI+fcGufcHOfcnNCNCsWup4UEPT5CDUTvAjqLSDURqQccTnQzyVsi8oCI/A18B8wFXg3cpGBEZBPgRuCS0G3JBNYfhdj1o2jdgMedcy50Q0Kza2pERCoBewFbisgMEZm9Np1l49BtC8Gup8ky4fgINRAdTxTBWAzMBiYDYwK1JSM453oShcRbAaOBlcV/RU7rBzzqnJsduiEZwvojmV0/UhCRBkRpCsNDtyUT2DXVqwtUAY4n6ouWwO5A35CNCsiup8mCHx9pH4iKyAZE0YvRQHVgC2BzovyEvOacW+2cmwhsC5wbuj0hiEhL4GDgztBtyQTWH8ns+lGsLsBE59xPoRuSKeyaCkQ5wwD3OufmOucWAHcARwRsUxB2PU0p+PERYqVpLaA+cN/aHJ6VIvIY0B+4PEB7MlFl8jefqQ3QEPhFRABqAP/f3r1HWT3vfxx/foszg6RoKhHlWgiRtaoVxiXlEkJWLVTuHJxyr0XqnC7KXS7lJyW3EkIr91shlwoVp5hmnVxSKIyaUpL9+2N7f/beM3v27JnZe3+/+zuvx1rWaN/msz/z3d/9+b4/n8/73dDzvAMikchhPrbLL8WoP+Lp/FG1/sBYvxsRUPX2nBqJRH71PG8l0XWy7ma/2uOzYnQ+TRCE4yPnEdG/R9srgMs9z9vG87wmRNc1Lcl1W4LA87zmf6dNaOR5XkPP83oA/ai/i6j/j+gXxqF//zcReAno4WejfKT+iKPzR3Ke53UFdkO75XVOTW4KcNXffdMUuBqY7XOb/KDzaXK+Hh9+rRE9A+gJrAFKgS1E33h9FCE6ZbQS+BW4AxgciURm+doqn0QikY2RSOQH+w8oBzZFIpE1frfND+qPpHT+qGwAMDMSiaz3uyEBoHNqZSOJpioqAZYBnwGjfW2RD3Q+rZKvx4enzZUiIiIi4geV+BQRERERX2ggKiIiIiK+0EBURERERHyhgaiIiIiI+KK6PKL5vpPJy/DrqT8SqT8SqT8qU58kUn8kUn8kUn8kUn8kCmV/KCIqIiIiIr7QQFREREREfKGBqIiIiIj4QgNREREREfGFBqIiIiICwNdff02fPn3o06cPLVu2pGXLlixevNjvZonPli9fzvLly7n77rtp1aoVrVq1om3btrRt25Z+/frV6bU1EBURERERX1SXvkmybOrUqTz33HMAzJ49G4BIJILnJc/6MGzYMC666CIAmjdvDkBBQUEOWlp79l7sZ0FBAR999BEAhxxyiG/tEhGRqC+++AKAnj17smrVKiD6XQQwffp0navrmdLSUgAeeughAB5//HEAfvzxx0qP3bRpE2vWrAGgqKioxr9LEVERERER8YVnVzxVyEry1GOOOQaAOXPmuNuGDx8OwIgRIzL5qwKbTHbq1KkA3HLLLaxcuTLxl6SIiMbf9+yzzwLQu3fvdH+tL/3RoEH0eqdhw4butpNPPhmAF154IcNNqpHAHh8+ybuE9jNmzADg1ltvZdGiRWk/b+DAgUyZMiWdhwbiGCkqKqJ///4A3HnnnRltUA0Foj8ANm/eDMBnn30GwPvvvw/AvHnz3IzLDz/8UOl5du654447AGjXrl1tmwAB6o/aevnllwHcTFt8n9n44IEHHuCf//xnOi+X9/2RYXnVH1u3bgXgkUce4brrrgNg/fr1ADRr1gyALl26cPjhh0cb8/fx8eijjzJ37lwA9txzz1S/Iml/+DIQrWqQFe+dd94BoLi4uE6/qi5PTiJj/bFgwQIAOnfu7G7bb7/9gOTT1SUlJQAsWrTI9Z89bu7cuey4447p/Fpf+uPjjz8GEkP8PXv2BGDmzJkAbLvttilf448//gBg8ODBQOxL5B//+AfbbFPrFSaBPT5+++03ANq2bcuhhx4KwNtvv53Wc22KrW3btgDssMMO6f7aQA9Ely5dCkSPo2nTpgGwbt06IHZ8pMvzPDewq2ZAGohjpHnz5qxduxbADbgPPvjgzLUqfYHoD4AhQ4YAMG7cuFo9384bCxYscJ+xWghMf9TUpEmTABg6dCgAP//8MwAtWrTgP//5DxA9vwKce+65CYGEFALXH5s2bQKgV69eQDT4c+SRR9b1ZdMVuP5Ixgag5513HgDTpk1zf/tjjz0WgLvvvhtIfuE2YcIEzj33XIDqxiKqrCQiIiIiwRGIiGhxcXHCNH28d955py5R0cBejZSVlQEwevRo9tlnHwD69u0LwE477VTp8RYeP/bYY/n0008B6NOnDxBdSJ4mX/tj2LBhAIwdO9bdZpHNQYMGpXzu+eefD8ATTzyRcPv06dM588wza9KMeIE9Puzqctq0aS5SPm/ePAB23nnnKp9XWlrqHm+zCkcffXS6vzbQEdE99tgDoNJSlrr666+/Ut0diGMkPiLao0cPAJ555hkAGjVqlKGmpSUQ/QHw6quvAnDiiScCuKhm586dXbTzwgsvdI+/9tprgcozC9OmTXPn3loITH/UxOzZs12E0L6PbUr1rbfeYq+99qrtSweuP0aNGgXEvn8mT57svk9SsSUKt99+u1symObMY7zA9UdFa9eudf1hG6YhtuzJxhkZooioiIiIiARHINI3HX300S56Y5FR29B0zDHHuIiobWiq47rRQGjSpAkQvdpKh12JdezYkU8++QSAr776CohGS2txpZY3FixY4N5z2D388MMALqUXwN577w2kjoTaGklb2wXRBeRQo4hooNi6JYtofP/992k9b/fddwdiEY0///wzC63zj0UCLcJja7fqm+OPPx6AFStWALHPR+PGjWv0OrvuumtmGxZg7777LhBbLwmx9fmWnqcO0dBAsTWv999/PwBt2rQBqDYaaucNO75KS0vdLMQJJ5yQjab6qkePHm6W1daFzps3j06dOuWsDYEYiMazQaYtGRgxYgT//ve/gdggtZrlBKHy+eefA7gdaZMmTXJTKbvttptv7coFG4gsWLCAZcuWJdxn0wV2sgiLSy+9FIhNl7Vv356JEydW+zybRnnyySfdbU2bNs1CC3Pn999/B2D8+PFA4ue+devWAG4n77777uvus/y6CxcuBKLLX+xLKZ7tAs1XEyZMAKBDhw5ccMEFaT+vpKTEPf6cc84B4PLLL898A7PMpt9tgJHKxx9/7DaIGhtw7b///hlvW9AsX74ciGWl8TzPDUDtwqZbt26+tC1bXnvtNSCW9/KWW25J+Xi70LWsCv/973+B6JKgMA5Ar7/+eiC6+dHOmbb8y5YL5oqm5kVERETEF4GLiFY0YsSITOcWDbyNGze6SI/l2bTNSvFuvvlmoFYLqPOCVfdItpHJpuGSbezKR5aOqKKZM2e6qeZkLGoYPz1rkdB8jHLFs7RTlt8wfhnLrFmzgMRUZxYxtcjH6NGjq3xtz/Pc5ycfRCIRtwltwIABAIwcORKIbsix84NNOzZu3JgtW7YAsfRpFiEeN26cm360tHD5fqxUZEtVbEZp0KBBlc6hlraoZcuWuW2cD+677z4gMXf3W2+9BYQvEmpsaVK6bHZg8eLFQGzJQqrzSD5asmQJENsoDLFza64joUYRURERERHxRSAiorb+sToWGQ1DhNSuzi2pMMQ2qpSVlSWt52psbdhhhx2WxRb656mnngJia3zCrqSkhCuvvBKIRfVsXaRFwapiybytukzTpk1d1CN+3WQ+ss9Iuhv6LAqWTgSjqKiIf/3rX7VvXI55nucS2FskzzaxDRgwgKuvvhqAe+65B4DCwkKXlsrWBybToUOHrLXZT1dccQWQeH411n8WaQ+7UaNGue+WgoICIHp+CWsk1Pz0009pP3bcuHF88MEHCbd17doViKXSy3dWJKViusObbrqJs88+248mOYqIioiIiIgvAhERnTNnTqUop0VJkyW6Ly4uzrsUTlYH2Upa2vuzSFa8+Hry22+/PQDdu3cHoutCrc5rGFhy+44dOwLw7bffujWhVr4xnu2QrW4HZD5ZtWqVK3Bgf3fb5W1JyyG2i7NLly4usmG75e15w4YNC02Uy9Y+WynH+EIIFtWyOtkQ+4ylo7y83H0G8yW91UEHHZTwb4tiNGjQgJtuugmIRT/jzyHJtG/fHoitHQyb119/vdJtRUVFAG72IewsBdzYsWPZvHkzgKsffvHFF/vWLr/YDMgvv/ziUjrZ9/Hnn39eqbBF2DKylJaWJvy0rDtDhgyhsLDQt3aBDwPRqiooWYqmiix3KMRSO+XbIBTg6aefBuDBBx8EYlOwVX1ZWC48q4Pdu3fvbDcx66zySbNmzVyVGPt53HHHpfUatoDc0k3ksw0bNgBwww03VLovPh9oRQ0bNnR1n2062k6aYfqStc+GXaTYe966davLO2znjYULF6a9xAdgzJgxeTMABfjyyy+r3JR41llnuWlES981efJkvv76awA3CDFNmjRh6tSpABxwwAFZarG/bPOeVVYqKytjzZo1AC4dWqrPWBjYZp0NGzbQs2dPIPzvORWrwBWfxsvyZjZu3NgFA4xtlgyDDRs28Oabbybc9thjjwE5r8yWlKbmRURERMQXOas1X7FiUlUs0pGhqGdg6rxaxMJSqVi/d+3alY0bNwKxjSkzZsxg4MCBQDSykUGB6I9u3bq5fqgp24CzdOnSWj2/Al/7wxbTx1d2SRUpt6mUSCTiUltZ5NzS1KRK9ZSGQNeat+kjiwLXhC1nsc0rrVu3TlmpKk4gPjM19eOPP7pIsqVqMmPHjk0ahU9TXvVHeXk5EF2CYJvYLK3Vhx9+CNR502fg+sOWudlsQaNGjXjvvfeAxPODFQSwKn8ZEpj+sI2cVoHM/u7bbLON+z62ZT9btmzhtNNOA2JpnCxi2KBBneJ1geiPsrIyt5zJzqPVVWSzKfyHHnoIiG10GzJkSF2iqKo1LyIiIiLBkbM1ovFrQ+PXfULi+tB8XP+ZDlscbnWvTzrpJABuvPFGd5utARsxYoRbRN25c2cAnn/+eSAcdZGnT5/uSqbZGtFff/0ViF6923u0Ep//+9//fGhl9m233XZANImwXX0aSyx82mmnuei4RfD69u3rIqJ2Xx0joYH03XffAbFjpKalfS3Z/SGHHOLWzsYnwA8jS/t21FFHsXr16oT77BxUh2ho3rHIzdChQ10pS6u3bpvbwpYGzxLVmz///NMVLLBSydtuu63bnGMJzsNWMvrGG28EYrMhVvyjoKCgUslOO48C3HnnnUCdI6GBUlZW5tYMW9GLZOw7d9iwYW5DV8VCEG3atMl46rOcb1YaPnx4qPKBpsv++KkOAtOuXTv3IZg/fz4QC4+Hoc923313N7VuOzttSUbHjh3dBgMbiFhN6LCxC4+vvvoqrcdbla25c+e6L88xY8Zkp3E+sWn3ZcuW0adPH4BKg/Sq2BTj6aefDsQ+M7bBLczsYnbUqFFANDetLe+wvIFVbQitL+wzYwNRyxiQT/lkU7GMCRU33WzevNkNQC0X7fz5890mNquxHraBqEm1+90G4c8//zytW7cGYlPQYVJeXs6mTZsAOPXUUyvdbxewVrUtVQ7vL774IuPtC8+QX0RERETyStYiojYVb1fhNh0ftql3u6q0q9GKuf5qyzYu7b///gCcfPLJGXndoLFoTcVqD1KZLbr3PM/lA7Tp/Xy2detWF5mwDQaWHzVdTZo0cVH1sE+/V7R69Wo37R6fV9XOIddffz0QjmU9dfHll18m/NuiQOXl5YFIYVNXNqVs+YZNYWGhqyu+cuVKAE455RQ3dW2Vgyy9zx577JGT9gaBbdhZt24dZ5xxBpDxzVuB8Mknn7j/X7FiRcJ9a9eudamt4vOa24yUzVK9+OKLWWufIqIiIiIi4ousR0TtpyWPDltE1GqC25Xmvffem5HXrVgn3CJERxxxREZeX/KHbaooKSlxt7Vq1cqv5mTcwIEDXSL22mrUqFG9i4Sa+fPnJ0RCIVo8wm6r75FQiFbQqbiJx9L5lJWVhSIiahsWK27qGzVqVNLNJRYRtdm8RYsWAfUrImoV7ACuuOIKH1uSXZauCuCDDz4AcBvYevTo4SKhVrnwtttucwn9LVJs/7bnZZIioiIiIiLiC19rzcfv4rT1XfnGog1W+3zLli2ujGdtrV+/nkceeQSIRcHi13jUZ5bmyaIb6ZYGzWdWqtF2Rrdu3ToUpRn79esH1Hw9aOfOnfnoo48Sbvv+++9d6cbLLrssMw0MONsFa+873quvvkqLFi1y3aTAsGjnoEGDAHj44Yfd58fYuvSwpD6z2TnLlmB//zPPPNPtZbCZO8tMArHE9lbusj6w1FXxx0SYSnqmsnDhQiCaRhGikfD27dsDMHv2bCB6TrYMPXbsWIYW27eSSTkbiManHUpWXSlfp+wtBY/9sSZOnOhq2d58880AdOnSpVJtdEtNtHr1andAWHh8zpw57mSy/fbbA3DNNddk823kDcspaZszHnvsMTdNPXjwYCB6UXDrrbcCsS8kM2vWrFw1NSN+//33ShUwxo8fT1FRkU8tyhw77pNVkUrFphLjRSKRSn/rsFq3bh0QrTEP8MYbb7j77Lb6OAi1QcX06dO56667gMTNF8a+f26//fbcNc4HVlHrhBNOcDmIk1W069WrF4CrR18f2Ma1V155BYimtWrZsqWfTcqqnXfemXbt2gGx937JJZcA0UG55Su34ICljQTo378/AFdddVXW2qepeRERERHxRc4josXFxQlVliB/p+UBunfvDsQWA3/44Yd8+umnAPTu3RuAZs2aVYoCP/NroXp8AAADlUlEQVTMM0DyaJDnee52u2o55ZRTstD6YLPEwskqD1lEuXv37q6vLCL25ptvuuTV+V4dY9y4cS6q07RpUwBXE7m+it9gYFq0aOHSjYSd1ce2dDue57H33nsDsfrYYWUzIk888YS7zQpC2HIN23QTr6CgwKU8s+8im5IOi5122gmI9ZFJNoMAsQ3EkyZNym7D8kCbNm3c+TWMdtllFzcb2KFDByCxYtKUKVMqPcfSv40cORLIbmGQ/P6WFhEREZG8lbNLQtuYFL9BKQxJ7m0N5+TJk4FoEtiKJbB+/vlnnn322bRf8+yzz3brHutzWT5bV/vUU0+58pa2IL+8vByIrguz9XDxC/At+Xu+Rj0s4jtjxgwX8bX3FBZW7tZqINdGYWEhAO3btw/1Gi+IRUAnTJgAJM6mXHrppUA4ChwkYxv2bJYpWdQznkW3OnXqBETLeWZjk0WQ2AbXit+nhYWFnHPOOQA0btwYiG5gik/pI+FnKSEff/xxIDrOqMgS23fq1Mlt+sxFqkCvYs6xClLemYpNv6famJSDKfma7YKoXrX98dNPP7ld8y+99BKAm6oHOPzww6Mv9He/t2rVipNOOgmIVU/K4i7OnPdHplkONKtRP378eF5//XUg+bFWjcD2hx0Tr732mtvNunjxYiA2ZZIFme4PSNEndsHWq1cv97ezC46ysjK3ETDZ4Mp2Qx944IFA8vrJGRKYY8Qudu2Cy6bKxowZ4zYz5mApii/9kU5deKuIc8EFFzB06FAguiwqywJzfAREXvTH0qVLgcTzR5YqB+VFf+RQ0v7Q1LyIiIiI+CJrEVFjkQ6LkA4fPjwhlVOW6WokkfojUeD6Y8OGDQB069YNgCVLlrhptRxsRMlpRDSZVatWAdHlGLYR0OeKSYE5Rqw2ui1BsLx+Fv3LEV/6w5aq2Iajb775xk0Z2uY9ywua4ypJgTk+AiIv+kMRUd8oIioiIiIiwZH1iKjPdDWSSP2RKHD9YesmLQq43Xbb8d577wHQsWPHur58dXyPiAZQ4I4Rn6k/Eqk/EuVFf9jsQt++fYFoIZosbWbLi/7IIUVERURERCQ4FBGtGfVHIvVHIvVHZeqTROqPROqPROqPROqPRKHsD0VERURERMQXGoiKiIiIiC+qm5oXEREREckKRURFRERExBcaiIqIiIiILzQQFRERERFfaCAqIiIiIr7QQFREREREfKGBqIiIiIj44v8BpNYsCO1bctsAAAAASUVORK5CYII=\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "yu798gpsCxB5" + }, + "source": [ + "간단한 밀집 신경망을 만들고 최적의 학습률을 찾아 보겠습니다. 반복마다 학습률을 증가시키기 위해 콜백을 사용합니다. 이 콜백은 반복마다 학습률과 손실을 기록합니다:" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "-AjFsfgpCxB5" + }, + "source": [ + "K = keras.backend\n", + "\n", + "class ExponentialLearningRate(keras.callbacks.Callback):\n", + " def __init__(self, factor):\n", + " self.factor = factor\n", + " self.rates = []\n", + " self.losses = []\n", + " def on_batch_end(self, batch, logs):\n", + " self.rates.append(K.get_value(self.model.optimizer.lr))\n", + " self.losses.append(logs[\"loss\"])\n", + " K.set_value(self.model.optimizer.lr, self.model.optimizer.lr * self.factor)" + ], + "execution_count": 115, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "WhR3sXdwCxB5" + }, + "source": [ + "keras.backend.clear_session()\n", + "np.random.seed(42)\n", + "tf.random.set_seed(42)" + ], + "execution_count": 116, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "PTVjIar9CxB5" + }, + "source": [ + "model = keras.models.Sequential([\n", + " keras.layers.Flatten(input_shape=[28, 28]),\n", + " keras.layers.Dense(300, activation=\"relu\"),\n", + " keras.layers.Dense(100, activation=\"relu\"),\n", + " keras.layers.Dense(10, activation=\"softmax\")\n", + "])" + ], + "execution_count": 117, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "i_eBlDxwCxB5" + }, + "source": [ + "작은 학습률 1e-3에서 시작하여 반복마다 0.5%씩 증가합니다:" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "FfsS2Af8CxB5", + "outputId": "29192883-f8cd-4480-d029-95a858b3be36", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "model.compile(loss=\"sparse_categorical_crossentropy\",\n", + " optimizer=keras.optimizers.SGD(lr=1e-3),\n", + " metrics=[\"accuracy\"])\n", + "expon_lr = ExponentialLearningRate(factor=1.005)" + ], + "execution_count": 118, + "outputs": [ + { + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.7/dist-packages/keras/optimizer_v2/optimizer_v2.py:356: UserWarning: The `lr` argument is deprecated, use `learning_rate` instead.\n", + " \"The `lr` argument is deprecated, use `learning_rate` instead.\")\n" + ], + "name": "stderr" + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "TX6nJvpTCxB5" + }, + "source": [ + "모델을 1 에포크만 훈련해 보죠:" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "mVaKZ41kCxB5", + "outputId": "6cd8ac0f-fc29-454b-ec45-a5cb4dde94c2", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "history = model.fit(X_train, y_train, epochs=1,\n", + " validation_data=(X_valid, y_valid),\n", + " callbacks=[expon_lr])" + ], + "execution_count": 119, + "outputs": [ + { + "output_type": "stream", + "text": [ + " 1/1719 [..............................] - ETA: 6:39 - loss: 2.5649 - accuracy: 0.0625WARNING:tensorflow:Callback method `on_train_batch_end` is slow compared to the batch time (batch time: 0.0019s vs `on_train_batch_end` time: 0.0023s). Check your callbacks.\n", + "1719/1719 [==============================] - 6s 3ms/step - loss: nan - accuracy: 0.5935 - val_loss: nan - val_accuracy: 0.0958\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "iv8vRAI1CxB5" + }, + "source": [ + "학습률에 대한 함수로 손실을 그릴 수 있습니다:" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "EZEzoNiuCxB5", + "outputId": "c0abd001-4675-4a80-cc18-ddf51e377569", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 307 + } + }, + "source": [ + "plt.plot(expon_lr.rates, expon_lr.losses)\n", + "plt.gca().set_xscale('log')\n", + "plt.hlines(min(expon_lr.losses), min(expon_lr.rates), max(expon_lr.rates))\n", + "plt.axis([min(expon_lr.rates), max(expon_lr.rates), 0, expon_lr.losses[0]])\n", + "plt.grid()\n", + "plt.xlabel(\"Learning rate\")\n", + "plt.ylabel(\"Loss\")" + ], + "execution_count": 120, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "Text(0, 0.5, 'Loss')" + ] + }, + "metadata": {}, + "execution_count": 120 + }, + { + "output_type": "display_data", + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYkAAAERCAYAAACO6FuTAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3deXxU1f3/8dcne8gKBELYguw7KCC7gLjiglZbrUu1WrAu1Wqt1VZatVarVvu11vZXqha1LqhFUVS0KpEdZFXZlC0skVW2sEPO7487YExzQ4LJncnM+/l4zIOZO2cmnzlA3nPPufdcc84hIiJSnrhwFyAiIpFLISEiIr4UEiIi4kshISIivhQSIiLiSyEhIiK+EsJdQHVKqJPlundsE+4yot7u3btJS0sLdxlRT/0cDL9+PnjYsXTDTppkp1IvLSkMlQVn7ty5W5xzDcp7LqpCIj6rIVOmzyI1KT7cpUS1goICBg8eHO4yop76ORh+/bxx5z56P/Ah91/Yhct6Nw++sACZWaHfc4ENN5lZspk9bWaFZrbLzBaY2dk+ba82s8NmVlzqNrgyP2fPgUPVWreISCwLck8iAVgLDALWAMOAV8ysi3NudTntZzjnBlT1h+w9ePg7FSkiAqDFKDyBhYRzbjdwT6lNE8xsFdADWF1dP2efQkJEqpFZuCsIr7DNSZhZLtAWWOTT5EQz2wJ8DTwPPOic+5+xJDMbCYwESGrUmiffnMHw1tE9yRRuxcXFFBQUhLuMqKd+DoZfP2/bVwLAsmXLKNizMuCqIkdYQsLMEoEXgGedc0vLaTIZ6AwUAp2AscAh4MGyDZ1zo4HRAMl5bdzryw9imQ157Afda6r8mKcJ1WCon4Ph189f7dgLBR/Rrl07Bp8c3RPXFQn8PAkzi8PbMzgA3FReG+fcSufcKudciXPuM+A+4OJjvXdCnLdfOG7eem54YW71FS0iMSvGR5uCDQkzM+BpIBe4yDl3sJIvdVTi76plg/Sj99/5bAP7Dh5m38HDbN9z4HjKFRGJeUEPN/0d6ACc5pzb69codGjsPOfcRjNrD4wCXj3WmycnxPHpg8P4aOkmrn12Du1HTQS8PYxR53bkqn4tquVDiEj009FNniDPk8gHrgO6AxtKnf9wuZk1D90/MvA3FPjUzHYD7wDjgAcq+XM4tX1DHriwy9Fth0ocv3tzEec9MZW1X++p1s8lItFNRzcFxDlXSMVDRuml2t4O3H68P8vMuKx3c/q2qk96cgLpyQn8+YMvGD15JQMfnkTLnDQGtMnhp4Na0Tg79Xh/jIhI1IuqZTnKOiHnm/VYfj2sAz/o2Yy3FhYxadkmnptRyEuz1zBiYEsu7dWcZvVSsVj/yiAiUkZUh0RZrRumc+vpbbn19LZ8uXEXfytYcfSWl5XCZSc350f9WpCVmhjuUkUkzDQl4YmpkCitTW4Gf76kO7cMbcPU5Vt4b9EGHv3vF4yespJzu+ZxSpsGnNGpEfFx2rsQiWUW4wfBxmxIHNEiJ40WOWlc0SefRUU7+OtHyxm/oIiXZq+lVYM0vt+zGRee2ITczJRwlyoiEriYD4nSOjXO4u9X9ODAoRI+WLKRf0xeyR/fXcrDE5cyqG0Dvt+zGUM7NCQ5QUuRi0Q7p2NgAYVEuZIS4hjWJY9hXfJYubmY1+auC53FPY+6dRIZ3r0J53TNo3uzbBLjdXE/kagW26NNColjadkgnTvOas8vzmjHlC838+qcdbw4aw1jpq8mLSmevq1yGN69Mad3zCUlUXsYIhJdFBKVFB9nDG7XkMHtGrJj70FmrNjC1OVb+GDxJj5YspGM5AQGtfOGpPq2rE9SgvYwRGozjTZ5FBLHISs1kbM653FW5zzuPd8xa+VWxi8o4r3FG5jw6VekJcXTp2V9BrVrwJmdGmnSW6QWi/HRJoXEdxUfZ/RrnUO/1jnce7ATU7/cwqRlm5i2fAsfLt3Eb8cvolvTLM7v3oQLujemfnpyuEsWEak0hUQ1SkmM57SOuZzWMReALzfu4v3FG3n386/4/YTF/PHdJQxtn8sPejVlYJsGmvQWkYinkKhBbXIzaJObwY1DWrN0w05em7OO1+evZ+KiDWSlJnJetzy+36MZXZtmaUkQkQgV6/83FRIBad8ok7vP7civzm5PwbLNvLWwiFfnrOPfM9fQNjed4d2bcOGJTbTgoIhEFIVEwBLj4zi9Yy6nd8xlx96DTPi0iHHz1vPIe8v40/vL6NuyPt87qSlndW5EerL+ekQkvPRbKIyyUhO5vHc+l/fOZ83WPbw+fz3j5q/j9lcXMuqNzzmzUy7fO6kp/VvnaA0pkYDpEFiPQiJCNK9fh1tOa8PNQ1szb802/jNvPRMWFvHGgiIaZ6VwZd8WXNqrGXXTksJdqkhMifWvZwqJCGNm9MivR4/8evz23I58uGQT/55ZyEMTl/L4h19w4YlNuLrfCbRrlBHuUkUkBigkIlhKYjzndM3jnK55LPlqJ89OX824eet5afZa+rWqz4/7n8Cp7RtqKEqkBjhdUQII8BrX8t10yMvkjxd1ZcZdQ7njrHas2rKbEc/NYcifCnhqykqK9x8Kd4kiUSnGj4BVSNQ29dKSuGFwaybfMYQnLzuJhhnJ3P/2EgY89BFPTlqusBCRaqXhploqMT7u6FDU/DXb+MuHX/LIe8v455SVjBjYkqv6tdAhtCLfgY5u8mhPIgqc2Lwu//rxybxxY39ObJbNI+8tY8BDH/G3guXsPXA43OWJ1GoabpKo0b1Z9tGw6N4sm4cnLuOURybx/IzVHDhUEu7yRKQWUkhEoe7Nshnz45N59ad9OaF+GqPGL+K0xz7mnc++0iUZRSpJ/1M8Coko1qtFPcZe14d//bgXqYnx3PDCPC75x0w+W7cj3KWJ1BoW46fTKSSinJkxpF1D3r55AH+4sDMrNhdz/pNTuf3VhWzcuS/c5YlIhFNIxIiE+Dgu753PpF8OZuQpLXlzQRFD/lTAXz78UpPbIuJLIRFjMlMSuevsDvz3tlMY1LYBj/33C4Y+WsD4Bes1XyFSiv4/eBQSMSq/fhp/v6IHL4/sQ920JG55eQEjnpvD5l37w12aSETRIbAS0/q0rM+bNw1g1LkdmfzlFs78v8lM+LRI36JEBFBICBAfZ1w74ATe/tkAmtZN5aYX5zPiuTkUbd8b7tJEwkZfkzwKCTmqTW4G467vx93ndGDa8q2c/tjHPD9jNSUl+u8iEqsCCwkzSzazp82s0Mx2mdkCMzu7gva3mtkGM9tpZs+YWXJQtcayhPg4fjKwJe/fegon5ddl1PhFXDp6Jmu/3hPu0kQkDILck0gA1gKDgCzgbuAVM2tRtqGZnQncCQwF8oGWwL1BFSrQrF4dnrvmZB65uCtLvtrJsMenMH7B+nCXJRIYTct5AgsJ59xu59w9zrnVzrkS59wEYBXQo5zmVwFPO+cWOee2Ab8Hrg6qVvGYGd/v2Yx3bhlIm9x0bnl5Abe9soC9h/S/R2KHxfjhTWGbkzCzXKAtsKicpzsBC0s9Xgjkmln9IGqTb2tWrw6vXNeXW4a24Y356/nttL1a2kMkRoTlggNmlgi8ADzrnFtaTpN0oPRvoSP3M4CtZd5rJDASIDc3l4KCgmqvVzwnJsKdJ6fwt/l7ufDJqVzWIYkhzRJi/ptWTSkuLta/5wD49XNRsbdy8uLFi8nc9kXAVUWOwEPCzOKA54EDwE0+zYqBzFKPj9zfVbahc240MBqgZ8+ebvDgwdVWq/yvwUBe2iReW5fGc4s3U5zcgD9c2IXUpPhwlxZ1CgoK0L/nmufXz8s37YKpk+nYsSODuzUOvrAIEehwk3lfOZ8GcoGLnHMHfZouArqVetwN2Oic2+rTXgKUkWT86+pe3HpaW15fsJ6L/j6dddt09JNEp1jfTw56TuLvQAfgPOdcRWdqPQdca2YdzSwb70ioMQHUJ5UUF2fcclobnrmqF2u37eH8v05jxgpluEi0CfI8iXzgOqA7sMHMikO3y82seeh+cwDn3ETgYWASsAYoBH4XVK1SeUPaN2T8jf2pWyeRK56exbPTV2tJD4kK+mfsCWxOwjlXSMV7bull2j8GPFajRUm1aNkgnTdu7M+tYxfwuzcXsahoB7+/oDPJCZqnkNov1o/L0LIcUi0yUhIZfWVPbj61Na/MWcelo2eySRc1Eqn1FBJSbeLijNvOaMffLj+JpV/t4twnpjJp2aZwlyVyXDTa5FFISLUb1iWPcTf0I7tOIj/+1yfc99ZiDh0uCXdZIsdF17gWqQEd8jJ586YBXNU3n2emreKaZ+ewY6/fEc8iEqkUElJjUhLjuXd4Z/74vS7MWLGFC56cxtINO8Ndlkil6Ogmj0JCatylJzfnxRF92L3/EBc8OU2ryUqt4EKzEjq6SSQAvVrUY8LNA+jaJJtbXl7AA+8s0TyFRLQjexIxnhEKCQlOw4wUXhjRmx/1zWf05JVc/tQsNuzQYbISmY6GRIynhEJCApUYH8d9wzvz2A+68dn6HQz7yxSmfrkl3GWJ/A939CDY2E4JhYSExfdOaspbPxtATnoSP3pmFn8vWKHlPCSiaE/Co5CQsGnVIJ3Xb+jPsC55PDRxKTe8MI/i/YfCXZbIt8R4RigkJLzSkhN44ocncvc5HXh/8UaG/3UqyzcVh7sskVJ7ErEdEwoJCTsz4ycDW/Lva3uzfc9BLnhyGhM/3xDusiTGHT0ENsx1hJtCQiJG31b1mXDzAFo1TOen/57LQxOXcrhE8xQSHpqT8CgkJKLkZaXyynV9uKx3c/5esIKrnpnN1uL94S5LYtDRY5sUEiKRJTkhngcu7MLDF3Vl9uqvOfeJqcwt3BbusiTGHDnaTgv8iUSoH/Rqxrjr+5EYH8cl/5jBM1NX6TBZCczRf2mxnREKCYlsnZtk8dbPBjCkfUPum7CYG1+cx659Wk1Wap6W5fAoJCTiZaUmMvrKHvx6WHveW7SR8/86jUVFO8JdlkS9Iwv8xXZMKCSkVjAzRp7SipdG9GHPgUNc+OR0xkzT8JNITVNISK1y8gn1ePeWUxjYJod73lrMiOfmsm33gXCXJVFIw00ehYTUOvXSknjqqp6MOrcjH3+xiWF/mcKslVvDXZZEGR0C61FISK1kZlw74ATGXd+f5IQ4fvjPmTz+wZc6+U6qzTd7ErGdEgoJqdW6NM1iws0DGd69CX/+4Asu++dMXaNCqsXR8yRiOyMUElL7pScn8OdLuvPo971rVJz9+GQ+XLIx3GVJLaerSXgUEhI1LurhXaMiLyuVa5+dw13jPtPS43LcnFICUEhIlGnVIJ1xN/TjulNa8vInazjzz5OZvlxXvpOq+2YV2NhOCYWERJ2UxHjuGtaB137al6SEOC57aha/Hf85u7VXIVWhVWABhYREsR759Xjn5oFc0/8Enp9ZyNmPT2H2qq/DXZbUEhpt8igkJKqlJsXz2/M68vKIPgBcMnoG9721mL0HDoe5Mol0ujKdRyEhMaF3y/pM/PlAruyTzzPTVnH245OZqRPwpAJH5yRiOyMUEhI76iQlcN/wzrw4ojclDi4dPZPbX12oixpJubQshyfQkDCzm8xsjpntN7MxFbS72swOm1lxqdvg4CqVaNavVQ4Tfz6QGwa3YvyC9Zzx58m8ubBIiwXKt2hZDk/QexJFwP3AM5VoO8M5l17qVlCzpUksqZOUwB1ntWfCzwbSODuVm1+az5VPz2bl5uJwlyYRwulECSDgkHDOjXPOvQFoMFgiQrtGGbxxY3/uG96Jheu2c9b/TeHR95ex76AmtmOd9iQ8kTwncaKZbTGzL8xslJklhLsgiU7xccaP+rbgw18M4pyueTzx0XJO//PHfLRUS3vENM1JABCpv3gnA52BQqATMBY4BDxYtqGZjQRGAuTm5lJQUBBclTGquLg4avt5eC607ZXC84v3cc2YOZzUMJ7LOyRRPzX471PR3M+RxK+fF27yTr6cP28eO1bGB1xV5LBwTNaZ2f1AU+fc1ZVsfynwS+dcj4ra9ezZ082ZM6caKpSKFBQUMHjw4HCXUaMOHCrhmWmrePyDLwH42dDWXNP/BFISg/tlEQv9HAn8+vnDJRu59tk5jL+xP92aZQdfWIDMbK5zrmd5z0XycFNpDu31SYCSEuL46aBWfPCLQQxsk8PDE5cx9NGPeX3+Okp0zYqY4LQsBxD8IbAJZpYCxAPxZpZS3lyDmZ1tZrmh++2BUcD4IGsVAWiSncroH/XkxZ/0pm5aIreOXch5f52qRQNjwDfHNsV2SgS9J3E3sBe4E7gidP9uM2seOheieajdUOBTM9sNvAOMAx4IuFaRo/q1zuHNGwfw+KXd2b7nIJc9NYtrxnzC4qKd4S5NaoguOuQJdOLaOXcPcI/P0+ml2t0O3B5ASSKVFhdnDO/ehDM7NeLZ6at5ctJyznliCud1bcwvzmhLfv20cJco1UiDip7vvCdhZonVUYhIbZGSGM91g1ox5Y5TuX5QK95fvIFTH/2YO15byNqv94S7PKkmmpPwVCkkzOxmM7uo1OOngb1mtszM2lV7dSIRLKtOInec1Z7JvxzClX3yeWNBEUP+VMBd4z5l3TaFRe2niw5B1fckbgY2A5jZKcAPgMuABcCj1VuaSO3QMDOFe87vxORfDuHy3s35z9z1DPlTAb9+/TPWb98b7vLkOGlPwlPVOYkmwKrQ/fOAV51zr5jZZ8CUaq1MpJZplJXCvcM7c92gVvytYDljP1nLq3PWckmvZtw4pDV5WanhLlGqQMtyeKq6J7ETaBi6fzrwYej+QSCluooSqc0aZ6dy/wVdKPjlEL7fsxljP1nLoIcL+O34z9mwY1+4y5NK+map8NhOiaqGxPvAP83sKaA18G5oeye+2cMQEbxzLB64sAuTbh/MRT2a8OKsNZzyyCTueXORhqFqAV10yFPVkLgRmAY0AC52zh25YPBJwEvVWZhItGhatw4Pfq8rk24fzIXdm/DvmYUMengSt45dwOfrd4S7PPGhiw55qjQn4ZzbCfysnO2/q7aKRKJUs3p1eOjirtx8WhuembqKl2ev4fX56+mRX5cr++RzdpdGJCfE7kJykUZzEp6qHgLbsfShrmZ2upn928zuMjP96xaphCbZqYw6tyPT7xrKqHM7srV4Pz8fu4C+D37Eg+8u0bkWEUIXHfJU9eimZ4D/A5aZWTO89ZQK8IahMoG7qrU6kSiWlZrItQNO4Mf9WjB9xVaen7map6asYvTklQxp15BuaYcYWOKIj4vtX1LhFut7ElUNifbAvND9i4FZzrlhZjYE+BcKCZEqi4szBrTJYUCbHL7asZeXZq/lpdlr+GjXfv6zqoAr+jTn4h7NqJeWFO5SY4rmJDxVnbiOBw6E7g/FW3wPYAWQW11FicSqvKxUbju9LdN+dSo3dEumUWYKD7yzlD4PfsitYxcwZ/XXhOMaMLHom6ObYjsmqron8TlwvZlNwAuJI3sOTQCtnSxSTZIS4jg5L4E7ftiXZRt28eKsQsbNW8/r89fTLjeDy/s054ITm5CZoqXTaor2JDxV3ZP4FTACbx7iJefcZ6Ht5wOzq7EuEQlp1yiDe4d3ZtZvhvLQRV1ISojjt+MX0fsPH3Lnfz7ls3U6jLYmaFkOT1UPgZ1sZg2ATOfctlJP/QPQIRkiNahOUgKX9GrOJb2a8+m67bwwcw3jFxTx8idr6do0i8t7N+e8bo2pkxSpl66vXQ6HUiIuxlOiyv+anHOHzWyvmXXGO5R4hXNudbVXJiK+ujbNpuvF2fz6nA68MX89L8wq5Ff/+Yz7317CBd2b0K1ZNoPaNqBBRnK4S621jsz9xPrRZVUKidClRh8EbgKS8Ibr9pvZE8BvnHMHq79EEfGTlZrIVf1a8KO++cwp3MYLMwsZ+8lanp9ZSJxB/9Y5XNyjKWd2akRKok5lqorDJd6f2pOomoeBHwI/BaaGtg3EC444dDU5kbAwM3q1qEevFvV44HuHKNy6h7c//YrX56/nlpcXkJGSwFmdGnF+98b0bVmfhPigr1xc+xwdborxrqpqSFwGXOOce6fUthVmthl4CoWESNjVSUqgQ14mHfIyue30tsxYuZVx89bz7ucbeHXuOnLSkzm3ax7ndM3jpOZ1Y344xc/R4SbtSVRJFt45EWWtALK/ezkiUp3i4oz+rXPo3zqHPxzszKSlmxi/oIgXZ69hzPTV5KQnc3rHhpzRqRH9WtXX2lGlHC7RxDVUPSQW4l2d7sYy228JPSciESolMZ6zu+Rxdpc8du07yKRlm3lv0QbeXFDES7PXkp6cwGkdGnJu18YMbJsT84FxNCRifE+rqiFxB/COmZ0GzAxt6wM0Bs6uzsJEpOZkpCRyfrfGnN+tMfsOHmb6ii1M/HwD7y3ayBsLishMSeCMTo04p0se/VrH5h7GkfMkYn047njOk2iLtyfRPrT5VbzlOX7ON5PZIlJLpCTGc2r7XE5tn8v9F5QwbfkW3vq0iPc+38Brc9eRnpzAkPYNOatTIwa3a0Bacmych/HNeRJhLiTMjuc8iSLgN6W3mVk34KLqKkpEwiMpIY4h7RsypH1D9h86zPTlW5n4+Qb+u2Qjby0sIik+jh75dRnQxpvn6NIkK2q/aWtOwhMbXwlEpMqSE+KPBsYDJY45q7/mgyUbmbZ8K4+8t4xH3ltGZkoCfVvVZ0BocvyEnLSoWRBPJ9N5FBIickzxcUbvlvXp3bI+AFuL9zN9xVamLd/ClC+38N6ijQA0zkqhf2tv2fN+rXJq9RnfOpnOo5AQkSqrn57Med0ac163xjjnWPP1HqYu38K05Vt4f/FGXp27DoD2jTK80Gidw8kn1KtV8xmak/BU6m/MzN48RpPMaqhFRGohMyO/fhr59dO4vHc+h0sci4t2Hg2N52cW8vTUVSTEGe0aZdAzvy59W+XQp2U9sutE7oWUnHPEma4nUdlY31qJ51d9x1pEJArExxldmmbRpWkW1w9uxb6Dh5lbuI1py7ewcN12XpmzjmdnFGIGHfMy6dWiHl2bZnFS87rk168TMb+UD5e4mB9qgkqGhHPuxzVdiIhEp5TE+KNnfQMcOFTCp+u2M33FVqav2MLYT9YyZvpqAHIzk2lWtw7dmmWTlBBHx7xMeuTXJS8rJfDwOOxczJ9IB5qTEJGAJSXE0bNFPXq2qMfNQ9tw6HAJyzcX88nqbcwv3Ebh13t4bsZqStw3h6Fm10mkVYN0OuZl0r1ZNt2bZ3NC/bQa/SXunNZtAoWEiIRZQnwc7Rtl0r5RJlf2yQegpMRR4hxLvtrFvDXbWLphFys2FzNu3jqen1kIQGpiPPn169CuUQbtG2XSKCuZpnXr0KpBOvXSvvtchzfc9J3fptZTSIhIxImLM+L4Zm7jiMMljhWbi1mwZjtfbNzFyi27mbN6G+MXFH3r9Uf2PFrmpNGqofdnywbppCbFk56UQFYd79rgm3ftZ+7GQ8R/uZm8rFSa1UslOSEe5xxzC7fRKCsl0M8diezICSOB/DCzm4CrgS5418i+uoK2t+JdU7sO8BpwvXNuf0Xvn5GR4Xr06FFt9Ur5tm/fTna2Fv2taernyjscn0xJYh0OpmRzMKUeB1PrcSj05+Gk9P9pH3doHw7DJZQ5j8OVEH9gF/GH9nEgLZf6K98nY1P0r1368ccfz3XO9SzvuaD3JIqA+4EzgVS/RmZ2JnAncGroNa8D94a2iYh8S/zh/cQf3k/ivm2UPdCyJD7paHA4i6ckIZlDydngDpNwcDcH1y8hPTOTQ8lZHEypy6HkbA4lZ5D51RzSN38Wng8UQQINCefcOAAz6wk0raDpVcDTzrlFofa/B17gGCHRrl07CgoKqqdY8VVQUMDgwYPDXUbUUz8HQ/1c8bkgkTon0QkYX+rxQiDXzOo75751zoaZjQRGAuTm5iokAlBcXKx+DoD6ORjq54pFakikAztKPT5yP4MyJ/Y550YDowF69uzpYv0bQRD0zSsY6udgqJ8rFqmX+C7m20t9HLm/Kwy1iIjErEgNiUVAt1KPuwEbyw41iYhIzQo0JMwswcxSgHgg3sxSzKy8Ia/ngGvNrKOZZQN3A2MCLFVERAh+T+JuYC/eUUpXhO7fbWbNzazYzJoDOOcmAg8Dk4A1QCHwu4BrFRGJeUEfAnsPcI/P098648U59xjwWA2XJCIiFYjUOQkREYkACgkREfGlkBAREV8KCRER8aWQEBERXwoJERHxpZAQERFfCgkREfGlkBAREV8KCRER8aWQEBERXwoJERHxpZAQERFfCgkREfGlkBAREV8KCRER8aWQEBERXwoJERHxpZAQERFfCgkREfGlkBAREV8KCRER8aWQEBERXwoJERHxpZAQERFfCgkREfGlkBAREV8KCRER8aWQEBERXwoJERHxpZAQERFfCgkREfEVaEiYWT0ze93MdptZoZld5tPuHjM7aGbFpW4tg6xVREQgIeCf9yRwAMgFugNvm9lC59yictqOdc5dEWh1IiLyLYHtSZhZGnARMMo5V+ycmwq8CVwZVA0iIlI1QQ43tQUOOee+KLVtIdDJp/15Zva1mS0ys+trvjwRESkryOGmdGBnmW07gIxy2r4CjAY2Ar2B/5jZdufcS2UbmtlIYCRAbm4uBQUF1VmzlKO4uFj9HAD1czDUzxULMiSKgcwy2zKBXWUbOucWl3o43cweBy4G/icknHOj8QKFnj17usGDB1dXveKjoKAA9XPNUz8HQ/1csSCHm74AEsysTalt3YDyJq3LcoDVSFUiIuIrsJBwzu0GxgH3mVmamfUHhgPPl21rZsPNrK55TgZuBsYHVauIiHiCPpnuBiAV2IQ3dHS9c26RmQ00s+JS7S4FluMNRT0HPOScezbgWkVEYl6g50k4574GLihn+xS8ie0jj38YZF0iIlI+LcshIiK+FBIiIuJLISEiIr4UEiIi4kshISIivhQSIiLiSyEhIiK+FBIiIuJLISEiIr4UEiIi4kshISIivhQSIiLiSyEhIiK+FBIiIuJLISEiIr4UEiIi4kshISIivhQSIiLiSyEhIiK+FBIiIuJLISEiIr4UEiIi4kshISIivhQSIiLiSyEhIiK+FBIiIkJ/POwAAAgySURBVOJLISEiIr4UEiIi4kshISIivhQSIiLiSyEhIiK+FBIiIuJLISEiIr4CDQkzq2dmr5vZbjMrNLPLfNqZmT1kZltDt4fMzIKsVUREICHgn/ckcADIBboDb5vZQufcojLtRgIXAN0AB/wXWAX8vwBrFRGJeYHtSZhZGnARMMo5V+ycmwq8CVxZTvOrgEedc+ucc+uBR4Grg6pVREQ8Qe5JtAUOOee+KLVtITConLadQs+VbtepvDc1s5F4ex4AxWa2rBpqrYwsYEdAr69M24ra+D1X3vbKbMsBthyjnuqifg6G+jkYkdrP+b4tnHOB3ICBwIYy20YABeW0PQy0L/W4Dd6wkwVVbyU+z+igXl+ZthW18XuuvO2V2QbMUT+rn9XP0d3PR25BTlwXA5lltmUCuyrRNhModqFPFSHeCvD1lWlbURu/58rbXtltQVE/B0P9HIza1M9A6Jt5EEJzEtuATs65L0PbngOKnHN3lmk7HfiXc+6focfXACOdc30CKVYqZGZznHM9w11HtFM/B0P9XLHA9iScc7uBccB9ZpZmZv2B4cDz5TR/DrjNzJqYWWPgF8CYoGqVYxod7gJihPo5GOrnCgS2JwHeeRLAM8DpwFbgTufci2Y2EHjXOZceamfAQ8BPQi99CvhVhA03iYhEvUBDQkREahctyyEiIr4UElIjzOxkM5thZpPN7CUzSwx3TdHIzLLMbLaZFZtZ53DXE01CywFNMbPnY/nfr0JCaspa4FTn3CnAaryDFKT67QHOAV4LdyHRxMy6AU2ccwOBpcDFYS4pbBQSUiOcc1855/aGHh4ASsJZT7Ryzh10zm0Odx1RqB/wfuj+RKB/GGsJK4WEYGY3mdkcM9tvZmPKPFeplXsreO984AzCewJTRKjJfpbyfYc+rwvsDN3fAdQLqOSIE/QqsBKZioD7gTOB1DLP+a7ca2aNgJfLeb9LnXMbzCwT7zyYq51zB2uu/FqjRvq5JguOAsfV58B2vln1IQv4OphyI49CQnDOjQMws55A0yPbS63c29k5VwxMNbMjK/feGfoFNbi89zSzBLxfbPc654JadDGi1UQ/S8WOt8+B6cBteCf2nglMC7j0iKHhJqmI38q95a7IW8YPgd7AKDMrMLNLaqLAKPFd+hkzewdvSO+fZnZ19ZcXlSrsc+fcAmCjmU0JbftP8CVGBu1JSEXS+WZc9ogdQMaxXuice57yl1yR/3Xc/QzgnBtW7RVFv2P2uXPul4FWFKG0JyEVqcrKvXL81M/BU59XkkJCKvIFkGBmbUpt6waUvdysfDfq5+CpzytJISGYWYKZpQDxQLyZpZhZQhVX7pVjUD8HT31eDYK6IpNukXsD7sG78l/p2z2h5+oBbwC7gTXAZeGut7be1M/q89p40yqwIiLiS8NNIiLiSyEhIiK+FBIiIuJLISEiIr4UEiIi4kshISIivhQSIiLiSyEhUo3M7B4z+zzcdYhUF51MJ7VO6ApjOc65c8NdS1lmlg4kO+e2hrsWP2bmgO8753RdbDkm7UmIVIKZJVWmnXOuOBwBYWZxZhYf9M+V6KeQkKhjZh3N7G0z22Vmm8zspdAlQI8838vM3jezLWa208ymmlnfMu/hzOxGMxtnZruBB44MJZnZpWa2IvT+b5hZTqnXfWu4yczGmNkEM7vFzNab2TYz+5eZ1SnVJs3MnjOzYjPbaGZ3hV4zpoLPeHWo/bDQzzsAdDjWZzOz1aG7r4Y+4+pSz51nZnPNbJ+ZrTKzP1Q2HCV6KSQkqphZHjAZ+Bw4GTgN7wIz483syL/3DLzVPgeG2iwA3jGz+mXe7nfAO0AXvOshA7QALgEuxLsa3InAH45R1kCgc6iWI6+9pdTzjwKDQttPxVuyemAlPm4KMAq4DugIFFbis/UK/TkCyDvy2MzOBF4A/op3JbZrgIuBBypRh0SzcK8wqJtuVb0BY4AJPs/dB3xYZltdvNU/T/Z5jQFfAVeU2uaAJ8q0uwfYB2SV2vYbYHmZNp+XqXUtEF9q2z+BD0L30/H2Ai4t9XwasA0YU0EfXB2qsccx+srvs11cpt1kYFSZbRfgXZzHwv13rlv4btqTkGjTAzglNBRTbGbFeL+kAVoBmFlDM/uHmX1hZjvwrkbWEGhe5r3mlPP+hc65HaUeF4VeW5HFzrnDPq9pBSQCs4886bxrHVTmCKlDeHsKR1Xhs5XVA/hNmX57ES+wGlX8Uolmusa1RJs44G3g9nKe2xj681kgF7gVWA3sBz4Eyo6/7y7nPQ6Weew49rDt8bymMvaXCR+o/GcrKw64F3i1nOc2f7cypTZTSEi0mQf8AO8bf9lfzkcMAG52zr0NYGa5eOPz4bACL0R6AStD9dTBm8NYcRzvV5nPdhDvSm2lzQPaO+eWH8fPlCimkJDaKtPMupfZth1vgnkEMNbMHsL7FtwSLzh+4ZzbhXd94yvMbBbecMrDePMCgXPOFZvZM8BDZrYFb/7gbrxv9sdzElNlPttqYKiZfYy3N7INby5ngpkVAq/gDWV1xpvHueM46pAooTkJqa0GAvPL3P7knCsC+gMlwES8C9s/iTfssj/02mvwJoznAi8Dz+D94gyX24EpwJvAJOBTvPmQfcfxXpX5bL8AhuDN1cwHcM69B5wT2j47dLsT77KeEsN0xrVIhDGzZLzDWR9xzj0a7noktmm4SSTMzOxEoAPet/cM4FehP8eGsy4RUEiIRIrbgHZ8c1jrKc65deEtSUTDTSIiUgFNXIuIiC+FhIiI+FJIiIiIL4WEiIj4UkiIiIgvhYSIiPj6/0TZ/3hNp1S+AAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "uyPClO_dCxB5" + }, + "source": [ + "학습률이 6e-1을 지날 떄 손실이 갑자기 솟구치기 때문에 3e-1을 학습률로 사용하겠습니다:" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "fz175oUJCxB6" + }, + "source": [ + "keras.backend.clear_session()\n", + "np.random.seed(42)\n", + "tf.random.set_seed(42)" + ], + "execution_count": 121, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "zGYkdan9CxB6" + }, + "source": [ + "model = keras.models.Sequential([\n", + " keras.layers.Flatten(input_shape=[28, 28]),\n", + " keras.layers.Dense(300, activation=\"relu\"),\n", + " keras.layers.Dense(100, activation=\"relu\"),\n", + " keras.layers.Dense(10, activation=\"softmax\")\n", + "])" + ], + "execution_count": 122, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "goUfEqx9CxB6", + "outputId": "e8a926d1-6cf8-4838-8f9b-3ac1451d16c3", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "model.compile(loss=\"sparse_categorical_crossentropy\",\n", + " optimizer=keras.optimizers.SGD(lr=3e-1),\n", + " metrics=[\"accuracy\"])" + ], + "execution_count": 123, + "outputs": [ + { + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.7/dist-packages/keras/optimizer_v2/optimizer_v2.py:356: UserWarning: The `lr` argument is deprecated, use `learning_rate` instead.\n", + " \"The `lr` argument is deprecated, use `learning_rate` instead.\")\n" + ], + "name": "stderr" + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "9a7lSBTbCxB6", + "outputId": "14f6edeb-519c-4250-93d4-d7ceaffeaf2c", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 35 + } + }, + "source": [ + "run_index = 1 # 실행할 때마다 이 값을 늘립니다\n", + "run_logdir = os.path.join(os.curdir, \"my_mnist_logs\", \"run_{:03d}\".format(run_index))\n", + "run_logdir" + ], + "execution_count": 124, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "string" + }, + "text/plain": [ + "'./my_mnist_logs/run_001'" + ] + }, + "metadata": {}, + "execution_count": 124 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "ue6qucbZCxB6", + "outputId": "da45867b-ac04-40e1-dcad-8bc02353fadd", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "early_stopping_cb = keras.callbacks.EarlyStopping(patience=20)\n", + "checkpoint_cb = keras.callbacks.ModelCheckpoint(\"my_mnist_model.h5\", save_best_only=True)\n", + "tensorboard_cb = keras.callbacks.TensorBoard(run_logdir)\n", + "\n", + "history = model.fit(X_train, y_train, epochs=100,\n", + " validation_data=(X_valid, y_valid),\n", + " callbacks=[checkpoint_cb, early_stopping_cb, tensorboard_cb])" + ], + "execution_count": 125, + "outputs": [ + { + "output_type": "stream", + "text": [ + "Epoch 1/100\n", + "1719/1719 [==============================] - 5s 3ms/step - loss: 0.2363 - accuracy: 0.9264 - val_loss: 0.1022 - val_accuracy: 0.9696\n", + "Epoch 2/100\n", + "1719/1719 [==============================] - 4s 2ms/step - loss: 0.0944 - accuracy: 0.9703 - val_loss: 0.0907 - val_accuracy: 0.9730\n", + "Epoch 3/100\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.0676 - accuracy: 0.9785 - val_loss: 0.0840 - val_accuracy: 0.9754\n", + "Epoch 4/100\n", + "1719/1719 [==============================] - 4s 2ms/step - loss: 0.0482 - accuracy: 0.9844 - val_loss: 0.0695 - val_accuracy: 0.9812\n", + "Epoch 5/100\n", + "1719/1719 [==============================] - 4s 2ms/step - loss: 0.0342 - accuracy: 0.9890 - val_loss: 0.0813 - val_accuracy: 0.9808\n", + "Epoch 6/100\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.0303 - accuracy: 0.9898 - val_loss: 0.0692 - val_accuracy: 0.9828\n", + "Epoch 7/100\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.0237 - accuracy: 0.9920 - val_loss: 0.0810 - val_accuracy: 0.9812\n", + "Epoch 8/100\n", + "1719/1719 [==============================] - 4s 2ms/step - loss: 0.0193 - accuracy: 0.9935 - val_loss: 0.0863 - val_accuracy: 0.9764\n", + "Epoch 9/100\n", + "1719/1719 [==============================] - 4s 2ms/step - loss: 0.0185 - accuracy: 0.9937 - val_loss: 0.0949 - val_accuracy: 0.9798\n", + "Epoch 10/100\n", + "1719/1719 [==============================] - 4s 2ms/step - loss: 0.0141 - accuracy: 0.9951 - val_loss: 0.0842 - val_accuracy: 0.9828\n", + "Epoch 11/100\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.0144 - accuracy: 0.9955 - val_loss: 0.1024 - val_accuracy: 0.9798\n", + "Epoch 12/100\n", + "1719/1719 [==============================] - 4s 2ms/step - loss: 0.0081 - accuracy: 0.9973 - val_loss: 0.1284 - val_accuracy: 0.9728\n", + "Epoch 13/100\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.0078 - accuracy: 0.9976 - val_loss: 0.1002 - val_accuracy: 0.9820\n", + "Epoch 14/100\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.0129 - accuracy: 0.9959 - val_loss: 0.0897 - val_accuracy: 0.9836\n", + "Epoch 15/100\n", + "1719/1719 [==============================] - 4s 2ms/step - loss: 0.0083 - accuracy: 0.9974 - val_loss: 0.0812 - val_accuracy: 0.9858\n", + "Epoch 16/100\n", + "1719/1719 [==============================] - 4s 2ms/step - loss: 0.0095 - accuracy: 0.9967 - val_loss: 0.1058 - val_accuracy: 0.9814\n", + "Epoch 17/100\n", + "1719/1719 [==============================] - 4s 2ms/step - loss: 0.0080 - accuracy: 0.9974 - val_loss: 0.0867 - val_accuracy: 0.9862\n", + "Epoch 18/100\n", + "1719/1719 [==============================] - 4s 2ms/step - loss: 0.0027 - accuracy: 0.9992 - val_loss: 0.0997 - val_accuracy: 0.9850\n", + "Epoch 19/100\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.0043 - accuracy: 0.9987 - val_loss: 0.0981 - val_accuracy: 0.9842\n", + "Epoch 20/100\n", + "1719/1719 [==============================] - 4s 2ms/step - loss: 0.0016 - accuracy: 0.9995 - val_loss: 0.0913 - val_accuracy: 0.9856\n", + "Epoch 21/100\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 3.5843e-04 - accuracy: 0.9999 - val_loss: 0.0860 - val_accuracy: 0.9862\n", + "Epoch 22/100\n", + "1719/1719 [==============================] - 4s 2ms/step - loss: 1.0448e-04 - accuracy: 1.0000 - val_loss: 0.0844 - val_accuracy: 0.9878\n", + "Epoch 23/100\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 5.7757e-05 - accuracy: 1.0000 - val_loss: 0.0855 - val_accuracy: 0.9876\n", + "Epoch 24/100\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 4.7349e-05 - accuracy: 1.0000 - val_loss: 0.0859 - val_accuracy: 0.9876\n", + "Epoch 25/100\n", + "1719/1719 [==============================] - 4s 2ms/step - loss: 4.1029e-05 - accuracy: 1.0000 - val_loss: 0.0863 - val_accuracy: 0.9876\n", + "Epoch 26/100\n", + "1719/1719 [==============================] - 4s 2ms/step - loss: 3.6531e-05 - accuracy: 1.0000 - val_loss: 0.0869 - val_accuracy: 0.9874\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "fsWHfKNuCxB6", + "outputId": "076e7678-d3e4-4fb7-823e-bcdc240dcd9d", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "model = keras.models.load_model(\"my_mnist_model.h5\") # rollback to best model\n", + "model.evaluate(X_test, y_test)" + ], + "execution_count": 126, + "outputs": [ + { + "output_type": "stream", + "text": [ + "313/313 [==============================] - 1s 2ms/step - loss: 0.0716 - accuracy: 0.9792\n" + ], + "name": "stdout" + }, + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "[0.07158412784337997, 0.979200005531311]" + ] + }, + "metadata": {}, + "execution_count": 126 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "5aCQsLQHCxB6" + }, + "source": [ + "98% 정확도를 얻었습니다. 마지막으로 텐서보드를 사용해 학습 곡선을 살펴보겠습니다:" + ] + }, + { + "cell_type": "code", + "metadata": { + "scrolled": true, + "id": "kkJVdA6sCxB6", + "outputId": "80a343bf-4b07-4681-c4cf-6c206355bf96", + "colab": { + "resources": { + "https://localhost:6007/?tensorboardColab=true": { + "data": "PCFkb2N0eXBlIGh0bWw+PG1ldGEgbmFtZT0idGItcmVsYXRpdmUtcm9vdCIgY29udGVudD0iLi8iPjwhZG9jdHlwZSBodG1sPjwhLS0KQGxpY2Vuc2UKQ29weXJpZ2h0IDIwMTkgVGhlIFRlbnNvckZsb3cgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwp5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQpkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZApsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0+PGh0bWw+PGhlYWQ+PG1ldGEgY2hhcnNldD0idXRmLTgiPgo8dGl0bGU+VGVuc29yQm9hcmQ8L3RpdGxlPgo8bGluayByZWw9InNob3J0Y3V0IGljb24iIGhyZWY9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBTVFBQUFERUNBWUFBQURBcG81ckFBQUFCSE5DU1ZRSUNBZ0lmQWhraUFBQUFBbHdTRmx6QUFCYWJnQUFXbTRCeFdzak9BQUFBQmwwUlZoMFUyOW1kSGRoY21VQWQzZDNMbWx1YTNOallYQmxMbTl5WjV2dVBCb0FBQmwwU1VSQlZIaWM3WjE1ZUZUVjNjYy92NXNGQ1ZSeHFWdHB0VlcyVmx4ZjYxcXRpcTBMOUdsOU5YVUJGRXBGUlRJaGhCQURDVGRBTUFFa0NZc0s3cUI5K2tENzJxZkJXaXZxVzdWYTY3NGlyZTlyYXhYMWJaVldaVEhML040LzVnNEdTR0R1ekwxejc1MDVuMzg0ek13NTU4dk0vWEsyM3prSERJR2ppemhQRjNGZTBEb01JRUVMeUdkMFBvT3dhQUF1Y1Y1YWgwVzVWUEI2a0xyeUdXT0lBRkNiL3ZTakVxZ0crdXp3S3dnZHdDMTBVQ2ZWL0RzWWhmbUxNVVFXVVJ1TEVrWUQ4eEVPMnY3R2pvWndQc3hIV014aElFdWxsSzVzNnN4bmpDR3loQzdnSkpSVzRDU2daeFAwbkg0Smk1aVU4N2pmR2czR0VMNmpUUXdFNWdHamtXN2ZkK3FHU0xLV0lzcGtNbS83SU5QZ1lBemhFMnBUUWgrcXNLZ0MrZ0x1VGJCcmVpdXdtSFlhWkRxZmVpcllBQmhEZUk0cVFpTVhBd3NRRHZQQUJEMmxOeUxVczRuYnhTYWV1V3BERW1NSUQ5RWJPUUZvUlRodCs0ditHQ0w1NTdOQXVjUjRLaTNCaGwwd2h2QUFiZUFRTEd4Z0FtRDVhb0x1NmNTZml2QUxsRXFKOFk1TDZZYWRNSWJJQUxVcHBvaHJFV1lqN0wzOWpld2FJcG5lakxLUXZXbVVjV3hMNlI5ZzJBVmppRFRSdVl6Q29nWDRCcEE5RTNSUDkveiszNEdaVXNiS1hxUWJkb014aEV1MGdhTVJtbEhPOXZBQi82T1RPdGtEUXlUU3lpTW81UkxqdFo3K0hZYWVzWUlXRUJYVVpqK2RTeXZ3UE1yWkhoVzdFV0VpbjNFYVV6a1ZvUlQ0bXljbEMrZGc4Ykl1WmFYZXdvR2VsSmtIbUJaaUQ2aE5JVVdNUjJrQUR2Q29WZGlLc0pqNHJ1c0p1cHdTUHFNS3FFS2M5WXZleWttOXprMUFFd2ZTTEtXMFkrZ1ZZNGpkb1BXY2cwVUx3bEhiWDh6Y0VHc1J5bVRhN2xlY3RZbUJGRGtyM095d3hwMk9JWkxwRFFoVDVUb2UyRjNkK1l3eFJBL29IQVpCdDdCc2IxcUZGeW1nWENyZHhTVHBJczRFV2hDTzNhWE05TFdzbzRDWVhNTWJiclRrQThZUTNWQ2IvZ2lWeUU1aDJaa1o0aU9FT1J5ZWZ0U3EybGdNWURUS2ZPQWdqM1Ixb054Q0lYVXkwWVNaSnpHR3dIbmdMT2VCNnlrc083MEhML0hBaVhmN0duUVovV252d2JEcGF3U2NNUFA5VEpnNUdFT2dzMU1JeTNiL3NLMGpUa3hxL09tU2FDdURVQnFRN1R2dHZPald2WWhRTHRma2Q1aDUzaHBDYlJkaDJhay9WQnRRS3FTRzMzZ3F0aGUwbFhPQUZ1QW9EOWRFMWxKQW1mdzBQOFBNODg0UWFsTUN6clJtcW1IWmUzNlFOaUUwOFRuTlltZDNXbE50Q3RtWDhZZ3pMZHk3UmpmcFJKaDVFUTN5ay93S004OGJReWdJZFZ5TXhRTFVaVmgyNys5M290eUpNRk5xK0lmWG10MmdpOWlQUW1ZQjF5RVVibjhqTTNPOGgxTERSRmFKb0o0S0RpbDVZUWl0NVFRa2c3RHNubDk3Rkl0eXFlWlZUOFZtaUM1aEtFb3o0aHhyNDAxWDZsbVVtRnpEMHg1S0RTVTViUWl0NFJDS3NORU13N0ozZk8wdGxCcVp5UnFQNVhxS0xtWVVRZ3ZpQkI5Q3B1WlE0RjQ2cUpKSmZPQ3AyQkNSazRaUW0ySTZQUXpMVHZ5WkNLL2VoeHVsak04OWx1d0xhbFBNL3M3M0FIdDcxRnBzUmxoSVlXNkdtZWVjSVhTRzUySFpjWVQ3RUtiSkRENzBWbTEyME9VY1FnYzI0clNVNE1YMzhoWkNqVXdJZDB2cGxwd3hoTjdBVUFwb0JzN3pjQXJ5R1pTWTFQR01oMUlEUTI5MnRyZ3FwM24ySFZrOFNwd3A4bE5lOFZCcVlFVGVFR3F6SHgzTVFyZ09uTm1Wekgvc2Q0RVoxT2JlN0lvcXdpM09JUWh3R09ERjk5V0pPTE50NDRPZGJjdVV5QnBDYlFycFlEeDRHcGE5QlZqQWwyaVNDclo2S0RkMDZISks2S1FLU1NITVBOVzB4U2JpTkxGM2RNUE1JMmtJclhGV2FMMEx5MWJnRnhRd1RXWjZ0RUVuSXVqaUZNTE0zYVlUWWVZVk1pNDdLL1plRWlsRDZFd0dFZmM4TFBzNUxNcWxqajk0cHpSNjZNMmM2VXhHN0JwbTdqYjl4V3ZyS0tSTXhyTGVPNlgrRWdsRHFPMUVlU3JWQ0gyMnY1R1pJVFlDOVdBTyswcWlOaFlITzRjeGR3OHpoMHpXYlJKUnZ4M1JDRE1QdFNIVXhtSXJvN0djSHdpOGFCWGFnVnNwWWFZNURySm5kQm45c2FqRWNzTE1JUk5ESkVtRW1mY05kNWg1YUEyaE4zUUx5L1p1R25VdFFreHMvdGREcVRtTDNzb2d4T21pWm02SVpQb0ZsSElaeHhOZWF2V0swQmxDcXhpSTFXMlFCMTYwQ2kraGxNc2NmdStwMkR4QlZ6RENpWTlLVEdKa1pvaGtlaTF4SnNzNC91cWwxa3dKalNIVXBvUXR6alFnOVBXb1ZVaHMzMXpQVWxrVDNtWTZDcWhOSVY5eFRoOFJKOHdjTWpFRUpLYTVsOUNYdVZMS1o5NHFUby9BRGFFZ1RPTml4RmtvY3YrbDlwUk9YRXZWVHAwMGhYOGdGeVgwZHZaRG1RVk1BZ295TkVReS9SNUNEYU9EWHdnTjFCQTZsUk93ZWduTFR0OFE2eERLWlk2NXVOQlA5RGFHQVl1UWJyZW5adjdiL1FtTG1JemVmcEpoMWduRUVGcnVoR1h2N3JSczkxL3FCdUpNbFhubXpLRnNvcmN6Q3B4Z1NtOWFkMFdjTVBOeDJROHp6Nm9obk83Uk5KUmFoUDQ5cW5EL3BYNE0xRlBFeldMVDZhMWlReXJvWGV4Rm5BcmdCcUMvUitPL1Q3Q1lReEdMc3hrR2t2VVdRaXM0emprTjc0d2VWYVJ1aUVSWWRoR1ZZdk4vZm1nMXVFT1hjd2lGUG9XWlg1R2RNUFBBeGhCYXlTaUVWdURycmcyaFBJb3dSZWJsUnNoeHJxRjNjd0pkenRqUXV6V2tSMUhLWmJTL1czYURIVlRiRkxPWmF4SG1BRi9hUVZIUFg4eGJXTlJJUTI1dFNzbEZWQkh1OWlITUhPNmtpSmxTNmsrWWVlRFRyZ0JheGFIQUxHQUMwbU5UbTlpMldFeWoyTG0zYlRHWDBlV1VVSnppYWVhcHB6ZWgxSE1veStRc2I4ZU5vVEJFRXEzaVA1eHUxS21Pc3NURzlpNnFaRUh1Ym16UEIvUTJCbExNUE5URE1ITjRFNHNLdVpRSHZkSVpLa09BTXhNMW5URUlGMk5oeXp4ZUNGcVR3VHYwTHI3cmhKa2ZzLzNGek0xeFAzRXE1WXJNWTlSQ1p3aEQ3cU0yRm9jN1llYVNRWmo1anVrT0xHNmhnMW9aelNmcGFqT0dNQVNHcnFZL1c3dWRaZzZadHhiQyt5ZzJGbmVrRTJadURHRUlITDJQUVhTbEVXYSt1elE4ajBXNWxQS2tHeTNHRUliUW9QZHdQc0lpaEtGQXBvYUF4S1gyRStUSDNKbXFCdGUza0dvNUU3U2NIN3JOWnpEc0NibVNCOW5LMGNCRTRKOWVGQWtjNmlhRCsydDVsU05SN3RjWTYvUjZ4OGtHZzBmSVJEcGtEQ3Zvd3hCZ01XUjNIMHM2aGloeVV1ZFF3Q3NhbzFXdjZ4YW9aekI0Z0pUeXNZd21ScHpod0crelZhOTdRMWpiRFFGUUJKUlJ4SHFOTWRZelZRYURnNHhsdll6bWZJUWZnUDk3NFROcElib3pFTGhIeTNqWWRLTU1maUNYMDBZUnc0QnlTSCtkWVUrNE53UTlHaUtCTUlJQ1h0WXBOS3JOWHVuTE1oaDJSVXBwbHl0b1JSZ0cvcHlsNWEwaEVoU2pUT2Rmdks0eFJxWWp5bURZSFhJWkc4R2Z2ZGQrR0NMSk54RGFkQXB0V3NuWDA2akhZTWc2WG8waGRzZEl1bmhkSzdCTk44b1FkaktkWlVxVnZpaXorSVRYdEpJTDA4aHZNR1NGYkxRUTNUbUNPR3UxZ2pZdDUvQU15akVZZk1IUE1jVHVHRWtCYjJpbDZVWVp3a1ZRaG9Ca04rcFRYdFZwWE9CUm1RWkRSZ1JwaUNSSG9qeWdVMm5UYXRPTk1nUkx0c2NRdlNPTXBKUFh0UXBiSjNlN0ZNVmd5Q0x1RFNFK0dTSkJDY29zK3ZDYVR1dDJacWpCa0NYQzBHWGFGZUZJNEVHdG9rMm5PbWY2R0F4WklKeUcrSUxFYkpUcFJobXlSTmdOQVZBQ3pLS0VWM1U2Mzg5eTNZWThJd3FHU0RJSStLMVcwNmJUK1ZwQUdndzVUcFFNa1VBWmliQmVxN0hWcGpoUUxZYWNJM3FHU0pEb1JtM2pWYTNtZTBHTE1lUU9VVFZFa3NFSUQra050T2tNdmhxMEdFUDBpYm9oa293a3pucXRNZDBvUTJia2lpRUErZ0d6YU9jVnJlSGNvTVVZb29rclEyamk0S2RDbjdSNHhSRGdkenJEZEtNTTduSFhRbHdkZWpOMFp5U3dYbWVhYmxSZUUzZDNHSUhiTGxOWXUwdTkwUTlsRmwyOHJETVpFYlFZUTFiWmpGTFBOaGE1eWVUT0VQdEd6aEFKbEtIQTczUW1LN1dHZzRLV1kvQVZCVmJSd1NDNURGdkd1YnVDelowaE9pTnFpQVFDaktHQURUcVRtTnFSNnY0WlVrSDVFeGFueWFXTWxURzhuMDRSN2d6UkZXbERKTmtIb1lVdW50TmFUZ3Rhak1FVDNrVzRra3M1V1VwNU9wT0MzQm5DcjgxQndYQU13aE5hWjdwUmtVWFpBdFJUd0dDNWxKVWltUjllNXM0UThad3lCQ1M3VVlXOHFYWEU5QklLZ2haa1NCRmhGVVVNbHN1d3BaU3QzaFhyQXIyZW9SU3czbFdwMFVxL2hEQkpiSjdDa0plNGF5R0tjcTZGMkpsamdTZlZacVhhSEJpMEdFUDJ5ZWN4Uk0rbzA0MkNEVnBQVEZlYmJsUStZUXpST3dOUVdsalBzenFiVTRJV1k4Z091YjVTN1FYSG9meEI2MW1wOC9oeTBHSU0vbUphaU5SSWRLTTYyYUJ6VERjcWwzRm5DTW43SUxsOVVWcll3SjkwTGljSExjYmdQYWJMbEE3SzhTaFA2UnpUamNvMVRKY3BmUkxkcUM3VGpjb2xUQXVST2ZzaXRQQVhudEhabkJTMEdFTm11RE5FZXJjSDVRZktDVmc4cFhOWnFUWUhCQzNIa0I2bWhmQVdDMkVNUld6UUJtSnFwN1ZuUFZSb013T0MxcEFKdXBxRDNYemU3USsyNXowRXJxS2pjcGI5Z0JhS2VWSWJPU1pvTWVtZ1N6aFVsN0tjWXVZRXJTVWRkQlZEOUdjOFFBZFQzZVJ6TzZoMk4rMXF6SEVLU2xuUUl0eWdOc1c2aEJnV2J5SmNUWG9uc3dTRzNzZStlaCtOV0x3QzdtK21jcmRyVENsSyt5SGZNZDltNERHZ2pTNmVvSWpIMEJ6ZGt4Q25QV2dKcWFMTEdJWFNDdEc3VjF4dExJNWdOTEFBMGcvTWRMdU5NcE14eE5zb0R3TnIyWWVIeFA3aVFkRktLb0Q3TWlnN3ZBZ2RRVXZZRTdxTVk0blRnbkptMEZyU1FlL2pMT0swSUJ5ZGFWbnVER0ZSNUdKUFVoZUovUVZyRWRya0pwN3Y3WU95a0o5cEpaZEREdDVoTGVGdElYUXArd04xeEprRTBWdEgwWlY4RFl1NUtHTzg2cDY3N3pMdG5zMkkweFVxNU5leWdBOWNLTG1lTHI1TDRnUyszRUhEMTBMb2NvcG81enJpMUNQc0U3UWV0K2hLK2lGTUE2YWo3T1hsV05XTEx0UGJDQThqdTNhRjNDQ04vRldyYUVDWmwzZ2huVkpDU01nTW9Zc1p3ZWUwQU44S1dvdGJWQkh1WlF4S0U3aWJUazJWZEF6eFJWY29UcHNzN3IwcjVKb1NGckNaVWhJNzEzSURLeHlHMEtVTXBvdEZLQmRHOFQ4YnZZc1RXVVVyK0xzM3haMGh1cmliSXVaTE14LzdJVVpzT3JXUzZ4Q2VwUHQwWDIvN29LTkJvR01JYldZQVFqVmRUSUhvUlN2clBYd0Z1QkVZVFJaK2ZWZUdrS1c4NlplUTdYVXM1R21keG5MZ1dyL3J5Z29CZFpuVXhtSkE1dE9RUWFHcjZjdFd5b0Fad0pleVZXODRGMTIyVVkzdzNoNC9GNFhXSW9CWkpyMkpzOWlIRjRCN2lLSVo3bUlVVzNnRHBaRXNtZ0ZDYWdoWndpZEFoYnRNL21qSm1DeTJFSG9UWDlWbVZtTHhLRVF2WkVUdjVIaTlpOGNSZmcwY0hvU0cwSjV2S2syczFtbU1SaGpsUHJNUGd0SWxDNGJRQmZURFlockNkR0F2dit2ekdyMkgvZW1pRGdsK1BTUzBoZ0RBNG5xVXM0RCthWmNSdkRsODZ6S3BJaXppWW9TRkVMMnJpblU1UlJSekhWM2hXUThKWlpjcGlUVHhEa0s5ZHdWNlZsTHErRFR0cWdzNWtVVThDYXdtaW1hNGt4RVU4UkpLQzRURERKQmxRNmhOb2JwOUxQdlNBcnpvdVpqc21HTVR5cXRlRnFoTkhLb0xXWTd3UitCVUw4dk9Cbm9IUS9SMkhuRGkycjRadEo2ZDhkMFFPcGsrT29VUldrRXJuL0F1VTdqS1RYNng2VVM1bXNTQ29ELzRZUTdsQXl6T2tocmU4S3pJaFZ4RUFYK0c2SVZsQStqdGpBZGVROXlIWldjTFg3NVVuVUpmbmNJb25jSktDdmtRZUJnb0F3NUNhTllxQnJvcFQrYnpISEN6SDFwM3JjeVRVdDZtZ085SU5TOTdVdG9YSEVPMFk3MkdFZkp4cTJmaXRKd0JLT2NpakVMNUVkQy9sNGRySDdxNEJWek9IaWt6RUg0RTdzeVVFZW1aNHpVSytiNU1aNlBIYWd4WklLTVdRaWV4djhZWXF6SGFVRDRrTWNBYnc1NW5oVVpxQlQ5MlU1Zk01MU1rOUx2UEhxZUEwNDBab290clEraGtCbW9aVjJ1TU5ncDVuOFJxNkVqY3hza0lTN1hTM1NxcU5ISS95cTljMWVNVmUyNHQxbExDZVZMTnY3T2d4dUFUN2k1dUwrY2lMTjVCV0U3Q0JKbnNvRHVBT00ydWN5bVRJT0NIYm1kektQZnlaUzZTQ3U5dXNqRUVnOXNydGZyaDVaeU1jTGxPNVlldXNzeG5JOG9zenpSa2lzVVN1cmhTSm9ZanpOdVFHY0ZQM1FrM2F6WDd1c3JUbHlYQUgvMFJsRElLMU1zTXlzUW1IckFXZzBjRWJ3ZzRoRTZhM0dRUW16Z1dFeUd3LzVXN1VLNlJXdXlBNmpmNFJCZ01BVEJCcC9FOU54bGtIcThBUzN6U3N6dmFFUzZUT2xZRVVMZkJaOEppQ0NIT2NyVmRCdkgxb1JaNDJ4OUpQYklaWVpUTVpFMFc2elJra2JBWUFvVEQyY3hjVjFsc3RqZ2h3OW5nWXl4R1NDMi95MUo5aGdBSWp5RVNUTmJwbk80bWc4empRZUFYUHVsSjhnN0NxVEl6OElHOHdXZkNaZ2lMT0xlcjdYS1RTeWVUZ1gvNUk0bjFGSEM2MUxMQnAvSU5JU0pzaGdBWXdtWnEzV1J3RGtTYjZZT1c1eWppVEpuSjM5TXRRQnM0eWt0QkJuOEpveUVBcXJTYUUxemxLT1lXNENrUE5UekdYcHd0TmZ3ajNRTDBScVlqVkhxb3llQXpZVFZFSVhIdTBLdFREdzBSbXpnRlhJTTNheE8vQWk2UTZYeWFiZ0hhd0d6bjFBaERoQWlySVFDT1lRQlZiakxJSEY1RjBvaVAycEc3Z1V2RVpsczZtVlVSYmFBRmNkZnRNNFNETUJzQ29GYW51enlEZEFzMjhEOXAxU1kwaWMwNHNlbE1KN3V1cG9CNTNBN0UwcXJmRURoaE4wUWY0QTY5SlBXalNhU1pyVTVFYk9vSWlsSXBOdFZ1QlNiUjFSVHdaKzRDeHFkYmhpRjR3bTRJVUU3aTYweDJrMFhtOFJEQ3oxUDhlQmN3UVdaemszdHhDZFNtbUQrekJtRk11bVVZd2tINERRRWdOR2cxUjdyS0U2Y2MyTFNIVDMxT1lyeHdaN3JTMUthRVF0cUFINlZiaGlFOFJNTVFVSUp5bTVzamJHUWVIOEp1dTBEL3dtS0V6T2IrZEVYcEF2bzVabkFWbUdnSUwxRXhCTUIzcWVhbnJuSTBjQnZ3WkEvdkpJNklzWHQ4THlYVVpnRGJXQWVjblc0Wmh2QVJKVU9Bc2tCbjhOVlVQeTZKVFR3VFNIU05raVNPaUxGNUtXMFpOZ2RTd0g4REo2ZGJoaUdjUk1zUXNEZGQzT29tZzh4bEE3RFErZXZyeFBtTzJMeVZyZ0MxT1pnQ0hpR0NwMnNiOWt6VURBRndnVlp6aGFzY2hjeEZ1WnNDVHBlR0ZPNmQ2QVdkeTJGWVBBRW1QaWxYQ2ZVcGFydWhWV3RZNXd5Yzk0aXo2and1a3dyVlpqQngxa0hxWFRaRDlJaGlDd0d3UDhyaWJGV21jeGlHeFdNWU0rUThVVFVFS0tWNkF4ZjVYbzNOOGNSNUhEalU3N29Nd1JOZFF5UllwamI3K1ZXNHp1WkVoSWVCQS95cXd4QXVvbTZJZzltV2ZzakY3dERabklueUNQaG5PRVA0aUxvaFFMaEtxem5QeXlLMW52T0o4eUJadmdIVEVEelJOd1NBc0Z5cnZIbDQxZVlIS1BjRGZiMG96eEF0Y3NNUThEVUt1VEhUUXJTT3k0QmZrZ2c3TitRaHVXSUlnR3QxQm1la20xbHRya2E0bCtpdXpSZzhJSmNNWWFIY3BsUGNkM1cwamtuQXJlVFc5MkZJZzF4N0FBWlQ0dTRBWXExak9zSlNOQVEzV2hzQ0o5Y01BY3BVcmVYRWxENDZpM293SjJQa01HK2cvTkpOQm5lRzZPSnhKUFJubXhZUTV3NjFlNy9pUzBGMEZxMG9kZGtVWnNnYW00QnFDamxPUnJzN2Z0VFZBRktXOFRmZyt6cUZFY1JwQVpjblltU1A0YlJ6QTFDLzh4dHFZOUhKQ3BTZkJLREw0Qzl4NEQ2S21DcWw2UjB3bDFhWFNacFp4MWFPUXlrbjZQdmVla09vMFZxR2QzOUpMNkdBVHU1RWpCbHlEdUZSTEk2VEt4aWJyaGtnZ3pHRXJLQkRGdE5LSjBjQWkwbWNYaEVtaW9semo5cUpWbEJ0aWhuS2FvUXJneFptOEpTM0VFcmxDczZSeTNrbDA4SXlIbFRMTWo2U1ZtSUl3NEdITWkzUFk0NmpnM0tkVEI4NldRUCtSOGNhc3NabW9KNU9oc3NWM2wxZzQ5a2lsTFN3SGpoUFkxeUNNQjg0M0t1eU0wS1l6VDVjQkp3U3RCU0RKeWh3TDUxVXlUZys4THB3ejZkZHBaVTFER0FJUWpud2lkZmxwMEZmakJseWhXZFJUcE94alBYRERPRFRPb1RZdEVzenJSUXhERmdCNXRwYVEwYThoM0lsWXpoSnJ1UnBQeXZ5ZFdGTzVyTlJtcGtJbkFUOHdjKzZERG5KVnFDSnZneVZxMWdwZ3ZwZFlWWUMyYVNaNXhTK1F3VVhBd3VBdzdKUnJ5SFNyRVdaTEZmeDEyeFdtclhRRFFHVlJhemhNNzZKVUUvQy9RYkR6cnlBY29aY3hTZ1psMTB6UUFDeFRMS0NMYklRbXdJR0E2dkEvMmJRRUFrK0FzcnB4N2RsSEU4RUpTS3c0RDZaejd0eUUyT0JVeEJ6M1cwZTB3RXNwcDBqWkJ5dFVocnNBbS9nMGE2eWtHZm94Mm5PQ25KS0I0OFpjb1oxd0xFeW5waE1ERWNJVU9DR2dNU0ZpYktBbFNoSE9PT0x6L2VZeVJCbE5tQnhvWXpuWEJuUEcwR0w2VTRvREpGRUZySlo1bU5Ud0ZHSWQ4dnhodER3TWNway9zNVJNbzdmQkMybUowSzVmMWdhZVFzbzFXck9kc0xNaCs4cGp5SDh5SVRNRDRMd20xQzFFRHNqalR4S0NjY2pUSVQwUTNvTmhsUUp0U0VBeEtaVEdsbUJNQVNsQ1dnUFdwTWhkd205SVpKSUk1dGtQdFhFT1JyQzJmODBSSi9JR0NLSnpHZUROSEloY0M2RWE0YkNFSDBpWjRnazBzZzZQdUpZSjh3OEZIUFlodWdUV1VPQXM0MTFIcTNBRWM0RkttSGJ4bXFJR0pFMlJCSzVrWS9rUm1MRU9SRjRQR2c5aHVpU0U0WklJbzI4S1BNNEUvZ0I4SGJRZWd6Ukk2Y01rVVFhYUdNTDMwS3BCajROV284aE91U2tJUUNrbWEweWp5WUtHWXFhYmF5RzFNaFpReVFSbTQzU3dFU1VreENlQ2xwUHhQZ3Y0dHN2dmM4TGN0NFFTYVNCNTVqTjZRaWx3RHRCNndrNWJ3TG55eVQrVXlibjExZ3Nid3dCempiVzJheWhnR0Vrem4zZEZyU21rUEV4U2puL1pMaE00cmRCaXdtQ3ZESkVFckhaSXJPeHNSZ0VyQ0lMcHptRW5FNWdCVVVNa2NtMGlrMW4wSUtDSWk4TmtVUnMzcFhaaktXTHM0Q1hndFlUQ01vanhEbE9Kak5SSnZMUG9PVUVUVjRiSW9uTTRmY0lKK1RaTnRhL0lKUktHU01reG10Qml3a0x4aEFPWWhNWG01WEFrWkRUMjFnL1E2a0hoc3Rrc3l0eFo0d2hka0pzUGhNYm13S0dRMDQ5TUhGZ0ZjcVJFc09Xc3B3MWZFYUVjZ3RwR0pCYS9nS1VhajNuQU0xRWV4dnJNeWd4S2VlWm9JV0VIZE5DN0FHWnhTTW94ME1rdDdHK0MxeEpqRk9NR1ZMREdDSUZ4S1pUNmxoQm5LRWtia3NLKzdUa0ZxQ2VPSU9sUER1SEJPY0t4aEF1RUp1UHBZNFlCUXhIZVRCb1BUMmd3QnE2K0taTXdaWUtjMzZ1Vzh3WUlnMmtoamVCQzNRT0kwaTBHTU1DbGdUQzgwQk1wcGhyQnpMQnRCQVpJTFdzNDhzY0UvQnRyTzhqVE9UZmZOdVlJWE9NSVRKRUp0SWh0YlJpY1FTUzFXMnM3Y0JpaWhncVUxZ2h0Z2x2OXdKakNJK1FHajZTR21MQXQ4SDM0OXpYWWpGTXBoS1RzbERjNDVjem1ER0V4OGdNWGdETzBMbU13cUxWNCtMZlJEaGJwdktZeCtVYURQNmpOaVhheUJsQjZ6Q2t6djhEUWQ3UXJNYkxSMUFBQUFBQVNVVk9SSzVDWUlJPSI+CjxsaW5rIHJlbD0iYXBwbGUtdG91Y2gtaWNvbiIgaHJlZj0iZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFNUUFBQURFQ0FZQUFBREFwbzVyQUFBQUJITkNTVlFJQ0FnSWZBaGtpQUFBQUFsd1NGbHpBQUJhYmdBQVdtNEJ4V3NqT0FBQUFCbDBSVmgwVTI5bWRIZGhjbVVBZDNkM0xtbHVhM05qWVhCbExtOXlaNXZ1UEJvQUFCbDBTVVJCVkhpYzdaMTVlRlRWM2NjL3Y1c0ZDVlJ4cVZ0cHRWVzJWbHhmNjFxdGlxMEw5R2w5TlhVQkZFcEZSVEloaEJBRENUZEFNQUVrQ1lzSzdxQjkra0Q3MnFmQldpdnFXN1ZhNjc0aXJlOXJheFgxYlpWV1pUSEwvTjQvNWc0R1NHRHV6TDF6NzUwNW4zODR6TXc1NTh2TS9YSzIzemtIRElHaml6aFBGM0ZlMERvTUlFRUx5R2QwUG9Pd2FBQXVjVjVhaDBXNVZQQjZrTHJ5R1dPSUFGQ2IvdlNqRXFnRyt1endLd2dkd0MxMFVDZlYvRHNZaGZtTE1VUVdVUnVMRWtZRDh4RU8ydjdHam9ad1BzeEhXTXhoSUV1bGxLNXM2c3huakNHeWhDN2dKSlJXNENTZ1p4UDBuSDRKaTVpVTg3amZHZzNHRUw2alRRd0U1Z0dqa1c3ZmQrcUdTTEtXSXNwa01tLzdJTlBnWUF6aEUycFRRaCtxc0tnQytnTHVUYkJyZWl1d21IWWFaRHFmZWlyWUFCaERlSTRxUWlNWEF3c1FEdlBBQkQybE55TFVzNG5ieFNhZXVXcERFbU1JRDlFYk9RRm9SVGh0KzR2K0dDTDU1N05BdWNSNEtpM0JobDB3aHZBQWJlQVFMR3hnQW1ENWFvTHU2Y1NmaXZBTGxFcUo4WTVMNllhZE1JYklBTFVwcG9ockVXWWo3TDM5amV3YUlwbmVqTEtRdldtVWNXeEw2UjlnMkFWamlEVFJ1WXpDb2dYNEJwQTlFM1JQOS96KzM0R1pVc2JLWHFRYmRvTXhoRXUwZ2FNUm1sSE85dkFCLzZPVE90a0RReVRTeWlNbzVSTGp0WjcrSFlhZXNZSVdFQlhVWmorZFN5dndQTXJaSGhXN0VXRWluM0VhVXprVm9SVDRteWNsQytkZzhiSXVaYVhld29HZWxKa0htQlppRDZoTklVV01SMmtBRHZDb1ZkaUtzSmo0cnVzSnVwd1NQcU1LcUVLYzlZdmV5a205emsxQUV3ZlNMS1cwWStnVlk0amRvUFdjZzBVTHdsSGJYOHpjRUdzUnltVGE3bGVjdFltQkZEa3IzT3l3eHAyT0laTHBEUWhUNVRvZTJGM2QrWXd4UkEvb0hBWkJ0N0JzYjFxRkZ5bWdYQ3JkeFNUcElzNEVXaENPM2FYTTlMV3NvNENZWE1NYmJyVGtBOFlRM1ZDYi9naVZ5RTVoMlprWjRpT0VPUnllZnRTcTJsZ01ZRFRLZk9BZ2ozUjFvTnhDSVhVeTBZU1pKekdHd0huZ0xPZUI2eWtzTzcwSEwvSEFpWGY3R25RWi9XbnZ3YkRwYXdTY01QUDlUSmc1R0VPZ3MxTUl5M2Ivc0swalRreHEvT21TYUN1RFVCcVE3VHZ0dk9qV3ZZaFFMdGZrZDVoNTNocENiUmRoMmFrL1ZCdFFLcVNHMzNncXRoZTBsWE9BRnVBb0Q5ZEUxbEpBbWZ3MFA4UE04ODRRYWxNQ3pyUm1xbUhaZTM2UU5pRTA4VG5OWW1kM1dsTnRDdG1YOFlnekxkeTdSamZwUkpoNUVRM3lrL3dLTTg4YlF5Z0lkVnlNeFFMVVpWaDI3Kzkzb3R5Sk1GTnErSWZYbXQyZ2k5aVBRbVlCMXlFVWJuOGpNM084aDFMRFJGYUpvSjRLRGlsNVlRaXQ1UVFrZzdEc25sOTdGSXR5cWVaVlQ4Vm1pQzVoS0VvejRoeHI0MDFYNmxtVW1GekQweDVLRFNVNWJRaXQ0UkNLc05FTXc3SjNmTzB0bEJxWnlScVA1WHFLTG1ZVVFndmlCQjlDcHVaUTRGNDZxSkpKZk9DcDJCQ1JrNFpRbTJJNlBRekxUdnlaQ0svZWh4dWxqTTg5bHV3TGFsUE0vczczQUh0NzFGcHNSbGhJWVc2R21lZWNJWFNHNTJIWmNZVDdFS2JKREQ3MFZtMTIwT1VjUWdjMjRyU1U0TVgzOGhaQ2pVd0lkMHZwbHB3eGhON0FVQXBvQnM3emNBcnlHWlNZMVBHTWgxSURRMjkydHJncXAzbjJIVms4U3B3cDhsTmU4VkJxWUVUZUVHcXpIeDNNUXJnT25ObVZ6SC9zZDRFWjFPYmU3SW9xd2kzT0lRaHdHT0RGOTlXSk9MTnQ0NE9kYmN1VXlCcENiUXJwWUR4NEdwYTlCVmpBbDJpU0NyWjZLRGQwNkhKSzZLUUtTU0hNUE5XMHhTYmlOTEYzZE1QTUkya0lyWEZXYUwwTHkxYmdGeFF3VFdaNnRFRW5JdWppRk1MTTNhWVRZZVlWTWk0N0svWmVFaWxENkV3R0VmYzhMUHM1TE1xbGpqOTRwelI2Nk0yYzZVeEc3QnBtN2piOXhXdnJLS1JNeHJMZU82WCtFZ2xEcU8xRWVTclZDSDIydjVHWklUWUM5V0FPKzBxaU5oWUhPNGN4ZHc4emgweldiUkpSdngzUkNETVB0U0hVeG1Jcm83R2NId2k4YUJYYWdWc3BZYVk1RHJKbmRCbjlzYWpFY3NMTUlSTkRKRW1FbWZjTmQ1aDVhQTJoTjNRTHkvWnVHblV0UWt4cy90ZERxVG1MM3NvZ3hPbWlabTZJWlBvRmxISVp4eE5lYXZXSzBCbENxeGlJMVcyUUIxNjBDaStobE1zY2Z1K3AyRHhCVnpEQ2lZOUtUR0prWm9oa2VpMXhKc3M0L3VxbDFrd0pqU0hVcG9RdHpqUWc5UFdvVlVoczMxelBVbGtUM21ZNkNxaE5JVjl4VGg4Uko4d2NNakVFSkthNWw5Q1h1VkxLWjk0cVRvL0FEYUVnVE9OaXhGa29jditsOXBST1hFdlZUcDAwaFg4Z0Z5WDBkdlpEbVFWTUFnb3lORVF5L1I1Q0RhT0RYd2dOMUJBNmxST3dlZ25MVHQ4UTZ4REtaWTY1dU5CUDlEYUdBWXVRYnJlblp2N2IvUW1MbUl6ZWZwSmgxZ25FRUZydWhHWHY3clJzOTEvcUJ1Sk1sWG5tektGc29yY3pDcHhnU205YWQwV2NNUE54MlE4eno2b2huTzdSTkpSYWhQNDlxbkQvcFg0TTFGUEV6V0xUNmExaVF5cm9YZXhGbkFyZ0JxQy9SK08vVDdDWVF4R0xzeGtHa3ZVV1FpczR6amtONzR3ZVZhUnVpRVJZZGhHVll2Ti9mbWcxdUVPWGN3aUZQb1daWDVHZE1QUEF4aEJheVNpRVZ1RHJyZzJoUElvd1JlYmxSc2h4cnFGM2N3SmR6dGpRdXpXa1IxSEtaYlMvVzNhREhWVGJGTE9aYXhIbUFGL2FRVkhQWDh4YldOUklRMjV0U3NsRlZCSHU5aUhNSE82a2lKbFM2aytZZWVEVHJnQmF4YUhBTEdBQzBtTlRtOWkyV0V5ajJMbTNiVEdYMGVXVVVKemlhZWFwcHplaDFITW95K1FzYjhlTm9UQkVFcTNpUDV4dTFLbU9zc1RHOWk2cVpFSHVibXpQQi9RMkJsTE1QTlRETUhONEU0c0t1WlFIdmRJWktrT0FNeE0xblRFSUYyTmh5enhlQ0ZxVHdUdjBMcjdyaEprZnMvM0Z6TTF4UDNFcTVZck1ZOVJDWndoRDdxTTJGb2M3WWVhU1FaajVqdWtPTEc2aGcxb1p6U2ZwYWpPR01BU0dycVkvVzd1ZFpnNlp0eGJDK3lnMkZuZWtFMlp1REdFSUhMMlBRWFNsRVdhK3V6UThqMFc1bFBLa0d5M0dFSWJRb1Bkd1BzSWloS0ZBcG9hQXhLWDJFK1RIM0ptcUJ0ZTNrR281RTdTY0g3ck5aekRzQ2JtU0I5bkswY0JFNEo5ZUZBa2M2aWFEKzJ0NWxTTlI3dGNZNi9SNng4a0dnMGZJUkRwa0RDdm93eEJnTVdSM0gwczZoaWh5VXVkUXdDc2FvMVd2Nnhhb1p6QjRnSlR5c1l3bVJwemh3Ryt6VmE5N1ExamJEUUZRQkpSUnhIcU5NZFl6VlFhRGc0eGx2WXptZklRZmdQOTc0VE5wSWJvekVMaEh5M2pZZEtNTWZpQ1gwMFlSdzRCeVNIK2RZVSs0TndROUdpS0JNSUlDWHRZcE5Lck5YdW5MTWhoMlJVcHBseXRvUlJnRy9weWw1YTBoRWhTalRPZGZ2SzR4UnFZanltRFlIWElaRzhHZnZkZCtHQ0xKTnhEYWRBcHRXc25YMDZqSFlNZzZYbzBoZHNkSXVuaGRLN0JOTjhvUWRqS2RaVXFWdmlpeitJVFh0SklMMDhodk1HU0ZiTFFRM1RtQ09HdTFnall0NS9BTXlqRVlmTUhQTWNUdUdFa0JiMmlsNlVZWndrVlFob0JrTitwVFh0VnBYT0JSbVFaRFJnUnBpQ1JIb2p5Z1UyblRhdE9OTWdSTHRzY1F2U09NcEpQWHRRcGJKM2U3Rk1WZ3lDTHVEU0UrR1NKQkNjb3MrdkNhVHV0MlpxakJrQ1hDMEdYYUZlRkk0RUd0b2sybk9tZjZHQXhaSUp5RytJTEViSlRwUmhteVJOZ05BVkFDektLRVYzVTYzODl5M1lZOEl3cUdTRElJK0sxVzA2YlQrVnBBR2d3NVRwUU1rVUFaaWJCZXE3SFZwamhRTFlhY0kzcUdTSkRvUm0zalZhM21lMEdMTWVRT1VUVkVrc0VJRCtrTnRPa012aHEwR0VQMGlib2hrb3drem5xdE1kMG9RMmJraWlFQStnR3phT2NWcmVIY29NVVlvb2tyUTJqaTRLZENuN1I0eFJEZ2R6ckRkS01NN25IWFFsd2Rlak4wWnlTd1htZWFibFJlRTNkM0dJSGJMbE5ZdTB1OTBROWxGbDI4ckRNWkViUVlRMWJaakZMUE5oYTV5ZVRPRVB0R3poQUpsS0hBNzNRbUs3V0dnNEtXWS9BVkJWYlJ3U0M1REZ2R3VidUN6WjBoT2lOcWlBUUNqS0dBRFRxVG1OcVI2djRaVWtINUV4YW55YVdNbFRHOG4wNFI3Z3pSRldsREpOa0hvWVV1bnROYVRndGFqTUVUM2tXNGtrczVXVXA1T3BPQzNCbkNyODFCd1hBTXdoTmFaN3BSa1VYWkF0UlR3R0M1bEpVaW1SOWU1czRROFp3eUJDUzdVWVc4cVhYRTlCSUtnaFprU0JGaEZVVU1sc3V3cFpTdDNoWHJBcjJlb1JTdzNsV3AwVXEvaERCSmJKN0NrSmU0YXlHS2NxNkYySmxqZ1NmVlpxWGFIQmkwR0VQMnllY3hSTStvMDQyQ0RWcFBURmViYmxRK1lRelJPd05RV2xqUHN6cWJVNElXWThnT3ViNVM3UVhIb2Z4QjYxbXA4L2h5MEdJTS9tSmFpTlJJZEtNNjJhQnpURGNxbDNGbkNNbjdJTGw5VVZyWXdKOTBMaWNITGNiZ1BhYkxsQTdLOFNoUDZSelRqY28xVEpjcGZSTGRxQzdUamNvbFRBdVJPZnNpdFBBWG50SFpuQlMwR0VObXVETkVlcmNINVFmS0NWZzhwWE5acVRZSEJDM0hrQjZtaGZBV0MyRU1SV3pRQm1KcXA3Vm5QVlJvTXdPQzFwQUp1cHFEM1h6ZTdRKzI1ejBFcnFLamNwYjlnQmFLZVZJYk9TWm9NZW1nU3poVWw3S2NZdVlFclNVZGRCVkQ5R2M4UUFkVDNlUnpPNmgyTisxcXpIRUtTbG5RSXR5Z05zVzZoQmdXYnlKY1RYb25zd1NHM3NlK2VoK05XTHdDN20rbWNyZHJUQ2xLK3lIZk1kOW00REdnalM2ZW9JakgwQnpka3hDblBXZ0pxYUxMR0lYU0N0RzdWMXh0TEk1Z05MQUEwZy9NZEx1Tk1wTXh4TnNvRHdOcjJZZUh4UDdpUWRGS0tvRDdNaWc3dkFnZFFVdllFN3FNWTRuVGduSm0wRnJTUWUvakxPSzBJQnlkYVZudURHRlI1R0pQVWhlSi9RVnJFZHJrSnA3djdZT3lrSjlwSlpkRER0NWhMZUZ0SVhRcCt3TjF4SmtFMFZ0SDBaVjhEWXU1S0dPODZwNjc3ekx0bnMySTB4VXE1TmV5Z0E5Y0tMbWVMcjVMNGdTKzNFSEQxMExvY29wbzV6cmkxQ1BzRTdRZXQraEsraUZNQTZhajdPWGxXTldMTHRQYkNBOGp1M2FGM0NDTi9GV3JhRUNabDNnaG5WSkNTTWdNb1lzWndlZTBBTjhLV290YlZCSHVaUXhLRTdpYlRrMlZkQXp4UlZjb1Rwc3M3cjByNUpvU0ZyQ1pVaEk3MTNJREt4eUcwS1VNcG90RktCZEc4VDhidllzVFdVVXIrTHMzeFowaHVyaWJJdVpMTXgvN0lVWnNPcldTNnhDZXBQdDBYMi83b0tOQm9HTUliV1lBUWpWZFRJSG9SU3ZyUFh3RnVCRVlUUlorZlZlR2tLVzg2WmVRN1hVczVHbWR4bkxnV3Ivcnlnb0JkWm5VeG1KQTV0T1FRYUdyNmN0V3lvQVp3SmV5Vlc4NEYxMjJVWTN3M2g0L0Y0WFdJb0JaSnIySnM5aUhGNEI3aUtJWjdtSVVXM2dEcFpFc21nRkNhZ2had2lkQWhidE0vbWpKbUN5MkVIb1RYOVZtVm1MeEtFUXZaRVR2NUhpOWk4Y1JmZzBjSG9TRzBKNXZLazJzMW1tTVJoamxQck1QZ3RJbEM0YlFCZlREWWhyQ2RHQXZ2K3Z6R3IySC9lbWlEZ2wrUFNTMGhnREE0bnFVczREK2FaY1J2RGw4NnpLcElpemlZb1NGRUwycmluVTVSUlJ6SFYzaFdROEpaWmNwaVRUeERrSzlkd1Y2VmxMcStEVHRxZ3M1a1VVOENhd21pbWE0a3hFVThSSktDNFREREpCbFE2aE5vYnA5TFB2U0Fyem91WmpzbUdNVHlxdGVGcWhOSEtvTFdZN3dSK0JVTDh2T0Jub0hRL1IySG5EaTJyNFp0SjZkOGQwUU9waytPb1VSV2tFcm4vQXVVN2pLVFg2eDZVUzVtc1NDb0QvNFlRN2xBeXpPa2hyZThLekloVnhFQVgrRzZJVmxBK2p0akFkZVE5eUhaV2NMWDc1VW5VSmZuY0lvbmNKS0N2a1FlQmdvQXc1Q2FOWXFCcm9wVCtiekhIQ3pIMXAzcmN5VFV0Nm1nTzlJTlM5N1V0b1hIRU8wWTcyR0VmSnhxMmZpdEp3QktPY2lqRUw1RWRDL2w0ZHJIN3E0QlZ6T0hpa3pFSDRFN3N5VUVlbVo0elVLK2I1TVo2UEhhZ3haSUtNV1FpZXh2OFlZcXpIYVVENGtNY0FidzU1bmhVWnFCVDkyVTVmTTUxTWs5THZQSHFlQTA0MFpvb3RyUStoa0Jtb1pWMnVNTmdwNW44UnE2RWpjeHNrSVM3WFMzU3FxTkhJL3lxOWMxZU1WZTI0dDFsTENlVkxOdjdPZ3h1QVQ3aTV1TCtjaUxONUJXRTdDQkpuc29EdUFPTTJ1Y3ltVElPQ0hibWR6S1BmeVpTNlNDdTl1c2pFRWc5c3J0ZnJoNVp5TWNMbE81WWV1c3N4bkk4b3N6elJraXNVU3VyaFNKb1lqek51UUdjRlAzUWszYXpYN3VzclRseVhBSC8wUmxESUsxTXNNeXNRbUhyQVdnMGNFYndnNGhFNmEzR1FRbXpnV0V5R3cvNVc3VUs2Uld1eUE2amY0UkJnTUFUQkJwL0U5Tnhsa0hxOEFTM3pTc3p2YUVTNlRPbFlFVUxmQlo4SmlDQ0hPY3JWZEJ2SDFvUlo0Mng5SlBiSVpZWlRNWkUwVzZ6UmtrYkFZQW9URDJjeGNWMWxzdGpnaHc5bmdZeXhHU0MyL3kxSjloZ0FJanlFU1ROYnBuTzRtZzh6alFlQVhQdWxKOGc3Q3FUSXo4SUc4d1dmQ1pnaUxPTGVyN1hLVFN5ZVRnWC81STRuMUZIQzYxTExCcC9JTklTSnNoZ0FZd21acTNXUndEa1NiNllPVzV5amlUSm5KMzlNdFFCczR5a3RCQm44Sm95RUFxclNhRTF6bEtPWVc0Q2tQTlR6R1hwd3ROZndqM1FMMFJxWWpWSHFveWVBellUVkVJWEh1MEt0VER3MFJtemdGWElNM2F4Ty9BaTZRNlh5YWJnSGF3R3puMUFoRGhBaXJJUUNPWVFCVmJqTElIRjVGMG9pUDJwRzdnVXZFWmxzNm1WVVJiYUFGY2RmdE00U0RNQnNDb0ZhbnV6eURkQXMyOEQ5cDFTWTBpYzA0c2VsTUo3dXVwb0I1M0E3RTBxcmZFRGhoTjBRZjRBNjlKUFdqU2FTWnJVNUViT29JaWxJcE50VnVCU2JSMVJUd1orNEN4cWRiaGlGNHdtNElVRTdpNjB4MmswWG04UkRDejFQOGVCY3dRV1p6azN0eENkU21tRCt6Qm1GTXVtVVl3a0g0RFFFZ05HZzFSN3JLRTZjYzJMU0hUMzFPWXJ4d1o3clMxS2FFUXRxQUg2VmJoaUU4Uk1NUVVJSnltNXNqYkdRZUg4SnV1MEQvd21LRXpPYitkRVhwQXZvNVpuQVZtR2dJTDFFeEJNQjNxZWFucm5JMGNCdndaQS92Skk2SXNYdDhMeVhVWmdEYldBZWNuVzRaaHZBUkpVT0Fza0JuOE5WVVB5NkpUVHdUU0hTTmtpU09pTEY1S1cwWk5nZFN3SDhESjZkYmhpR2NSTXNRc0RkZDNPb21nOHhsQTdEUStldnJ4UG1PMkx5VnJnQzFPWmdDSGlHQ3Ayc2I5a3pVREFGd2dWWnpoYXNjaGN4RnVac0NUcGVHRk82ZDZBV2R5MkZZUEFFbVBpbFhDZlVwYXJ1aFZXdFk1d3ljOTRpejZqd3Vrd3JWWmpCeDFrSHFYVFpEOUloaUN3R3dQOHJpYkZXbWN4aUd4V01ZTStROFVUVUVLS1Y2QXhmNVhvM044Y1I1SERqVTc3b013Uk5kUXlSWXBqYjcrVlc0enVaRWhJZUJBL3lxd3hBdW9tNklnOW1XZnNqRjd0RFpuSW55Q1Bobk9FUDRpTG9oUUxoS3F6blB5eUsxbnZPSjh5Qlp2Z0hURUR6Uk53U0FzRnlydkhsNDFlWUhLUGNEZmIwb3p4QXRjc01ROERVS3VUSFRRclNPeTRCZmtnZzdOK1FodVdJSWdHdDFCbWVrbTFsdHJrYTRsK2l1elJnOElKY01ZYUhjcGxQY2QzVzBqa25BcmVUVzkyRklnMXg3QUFaVDR1NEFZcTFqT3NKU05BUTNXaHNDSjljTUFjcFVyZVhFbEQ0Nmkzb3dKMlBrTUcrZy9OSk5CbmVHNk9KeEpQUm5teFlRNXc2MWU3L2lTMEYwRnEwb2Rka1Vac2dhbTRCcUNqbE9ScnM3ZnRUVkFGS1c4VGZnK3pxRkVjUnBBWmNuWW1TUDRiUnpBMUMvOHh0cVk5SEpDcFNmQktETDRDOXg0RDZLbUNxbDZSMHdsMWFYU1pwWngxYU9ReWtuNlB2ZWVrT28wVnFHZDM5Skw2R0FUdTVFakJseUR1RlJMSTZUS3hpYnJoa2dnekdFcktCREZ0TktKMGNBaTBtY1hoRW1pb2x6ajlxSlZsQnRpaG5LYW9Rcmd4Wm04SlMzRUVybENzNlJ5M2tsMDhJeUhsVExNajZTVm1JSXc0R0hNaTNQWTQ2amczS2RUQjg2V1FQK1I4Y2Fzc1ptb0o1T2hzc1YzbDFnNDlraWxMU3dIamhQWTF5Q01CODQzS3V5TTBLWXpUNWNCSndTdEJTREp5aHdMNTFVeVRnKzhMcHd6NmRkcFpVMURHQUlRam53aWRmbHAwRmZqQmx5aFdkUlRwT3hqUFhERE9EVE9vVFl0RXN6clJReERGZ0I1dHBhUTBhOGgzSWxZemhKcnVScFB5dnlkV0ZPNXJOUm1wa0luQVQ4d2MrNkREbkpWcUNKdmd5VnExZ3BndnBkWVZZQzJhU1o1eFMrUXdVWEF3dUF3N0pScnlIU3JFV1pMRmZ4MTJ4V21yWFFEUUdWUmF6aE03NkpVRS9DL1FiRHpyeUFjb1pjeFNnWmwxMHpRQUN4VExLQ0xiSVFtd0lHQTZ2QS8yYlFFQWsrQXNycHg3ZGxIRThFSlNLdzRENlp6N3R5RTJPQlV4QnozVzBlMHdFc3BwMGpaQnl0VWhyc0FtL2cwYTZ5a0dmb3gybk9DbkpLQjQ4WmNvWjF3TEV5bnBoTURFY0lVT0NHZ01TRmliS0FsU2hIT09PTHovZVl5UkJsTm1CeG9Zem5YQm5QRzBHTDZVNG9ESkZFRnJKWjVtTlR3RkdJZDh2eGh0RHdNY3BrL3M1Uk1vN2ZCQzJtSjBLNWYxZ2FlUXNvMVdyT2RzTE1oKzhwanlIOHlJVE1ENEx3bTFDMUVEc2pqVHhLQ2NjalRJVDBRM29OaGxRSnRTRUF4S1pUR2xtQk1BU2xDV2dQV3BNaGR3bTlJWkpJSTV0a1B0WEVPUnJDMmY4MFJKL0lHQ0tKekdlRE5ISWhjQzZFYTRiQ0VIMGlaNGdrMHNnNlB1SllKOHc4RkhQWWh1Z1RXVU9BczQxMUhxM0FFYzRGS21IYnhtcUlHSkUyUkJLNWtZL2tSbUxFT1JGNFBHZzlodWlTRTRaSUlvMjhLUE00RS9nQjhIYlFlZ3pSSTZjTWtVUWFhR01MMzBLcEJqNE5XbzhoT3VTa0lRQ2ttYTB5anlZS0dZcWFiYXlHMU1oWlF5UVJtNDNTd0VTVWt4Q2VDbHBQeFBndjR0c3Z2YzhMY3Q0UVNhU0I1NWpONlFpbHdEdEI2d2s1YndMbnl5VCtVeWJuMTFnc2J3d0J6amJXMmF5aGdHRWt6bjNkRnJTbWtQRXhTam4vWkxoTTRyZEJpd21DdkRKRUVySFpJck94c1JnRXJDSUxwem1FbkU1Z0JVVU1rY20waWsxbjBJS0NJaThOa1VSczNwWFpqS1dMczRDWGd0WVRDTW9qeERsT0pqTlJKdkxQb09VRVRWNGJJb25NNGZjSUorVFpOdGEvSUpSS0dTTWt4bXRCaXdrTHhoQU9ZaE1YbTVYQWtaRFQyMWcvUTZrSGhzdGtzeXR4WjR3aGRrSnNQaE1ibXdLR1EwNDlNSEZnRmNxUkVzT1dzcHcxZkVhRWNndHBHSkJhL2dLVWFqM25BTTFFZXh2ck15Z3hLZWVab0lXRUhkTkM3QUdaeFNNb3gwTWt0N0crQzF4SmpGT01HVkxER0NJRnhLWlQ2bGhCbktFa2Jrc0srN1RrRnFDZU9JT2xQRHVIQk9jS3hoQXVFSnVQcFk0WUJReEhlVEJvUFQyZ3dCcTYrS1pNd1pZS2MzNnVXOHdZSWcya2hqZUJDM1FPSTBpMEdNTUNsZ1RDODBCTXBwaHJCekxCdEJBWklMV3M0OHNjRS9CdHJPOGpUT1RmZk51WUlYT01JVEpFSnRJaHRiUmljUVNTMVcyczdjQmlpaGdxVTFnaHRnbHY5d0pqQ0krUUdqNlNHbUxBdDhIMzQ5elhZakZNcGhLVHNsRGM0NWN6bURHRXg4Z01YZ0RPMExtTXdxTFY0K0xmUkRoYnB2S1l4K1VhRFA2ak5pWGF5QmxCNnpDa3p2OERRZDdRck1iTFIxQUFBQUFBU1VWT1JLNUNZSUk9Ij4KCjxzdHlsZT4KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90bycpLCBsb2NhbCgnUm9ib3RvLVJlZ3VsYXInKSwgdXJsKC9mb250LXJvYm90by91WUVDTUtvSGNPOXgxd2RtYnlISW0zLV9rZjZCeVlPNkNMWWRCNEhRRS1ZLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDAwLTA0NUYsIFUrMDQ5MC0wNDkxLCBVKzA0QjAtMDRCMSwgVSsyMTE2Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8nKSwgbG9jYWwoJ1JvYm90by1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vc1RkYUE2ajBQc2I5MjBWanYtbXJ6SC1fa2Y2QnlZTzZDTFlkQjRIUUUtWS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQ2MC0wNTJGLCBVKzIwQjQsIFUrMkRFMC0yREZGLCBVK0E2NDAtQTY5RjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvJyksIGxvY2FsKCdSb2JvdG8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL19WWUZ4LXM4MjRrWHFfVWwyQkhxWUgtX2tmNkJ5WU82Q0xZZEI0SFFFLVkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzNzAtMDNGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvJyksIGxvY2FsKCdSb2JvdG8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL3RuajRTQjZETmJkYVFuc004Q0ZxQlgtX2tmNkJ5WU82Q0xZZEI0SFFFLVkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzFGMDAtMUZGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvJyksIGxvY2FsKCdSb2JvdG8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL29NTWdmWk1RdGhPcnlRbzluMjJkY3V2dkRpbjFwSzhhS3RlTHBlWjVjMEEud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkM2LCBVKzAyREEsIFUrMDJEQywgVSsyMDAwLTIwNkYsIFUrMjA3NCwgVSsyMEFDLCBVKzIyMTIsIFUrMjIxNTsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvJyksIGxvY2FsKCdSb2JvdG8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL0tzX2NWeGlDaXdVV1ZzRldGQTNCam4tX2tmNkJ5WU82Q0xZZEI0SFFFLVkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDAtMDI0RiwgVSsxRTAwLTFFRkYsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDRiwgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8nKSwgbG9jYWwoJ1JvYm90by1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vTko0dnhsZ1d3V2JFc3YxOGRBaHFubi1fa2Y2QnlZTzZDTFlkQjRIUUUtWS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMi0wMTAzLCBVKzFFQTAtMUVGOSwgVSsyMEFCOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9pc1otd2JDWE5LQWJuam82X1R3SFRvWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDAwLTA0NUYsIFUrMDQ5MC0wNDkxLCBVKzA0QjAtMDRCMSwgVSsyMTE2Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by83N0ZYRmpSYkd6TjRhQ3JTRmhsaDNvWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9qU04yQ0dWRGJjVnlDbmZKZmpTZGZJWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMzcwLTAzRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkJyksIGxvY2FsKCdSb2JvdG8tQm9sZCcpLCB1cmwoL2ZvbnQtcm9ib3RvL1VYNmk0SnhRRG0zZlZUYzFDUHV3cW9YMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzFGMDAtMUZGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQnKSwgbG9jYWwoJ1JvYm90by1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vZC02SVlwbE9Gb2NDYWNLenh3WFNPSkJ3MXhVMXJLcHRKal8wamFuczkyMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by85N3VhaHhpcVpSb25jQmFDRUkzYVc0WDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAwLTAyNEYsIFUrMUUwMC0xRUZGLCBVKzIwQTAtMjBBQiwgVSsyMEFELTIwQ0YsIFUrMkM2MC0yQzdGLCBVK0E3MjAtQTdGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQnKSwgbG9jYWwoJ1JvYm90by1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vUHdaYy1ZYklMNDE0d0I5ckIxSUFQWVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMi0wMTAzLCBVKzFFQTAtMUVGOSwgVSsyMEFCOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1Cb2xkSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vdDZOZDRjZlBSaFpQNDRRNVFBamNDMTRzWVlkSmc1ZFUycXpKRVZTdXRhMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQgSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tQm9sZEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL3Q2TmQ0Y2ZQUmhaUDQ0UTVRQWpjQ19acmFSMlRnOHcybHptN2tMTkwwLXcud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0NjAtMDUyRiwgVSsyMEI0LCBVKzJERTAtMkRGRiwgVStBNjQwLUE2OUY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUJvbGRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by90Nk5kNGNmUFJoWlA0NFE1UUFqY0N3dF9SbTY5MUxUZWJLZlkyWmtLU21JLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMzcwLTAzRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUJvbGRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by90Nk5kNGNmUFJoWlA0NFE1UUFqY0MxQlcyNlF4cFNqLV9aS21feFQ0aFd3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUJvbGRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by90Nk5kNGNmUFJoWlA0NFE1UUFqY0M0Z3A5UThnYllyaHFHbFJhdl9JWGZrLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMDAwLTAwRkYsIFUrMDEzMSwgVSswMTUyLTAxNTMsIFUrMDJDNiwgVSswMkRBLCBVKzAyREMsIFUrMjAwMC0yMDZGLCBVKzIwNzQsIFUrMjBBQywgVSsyMjEyLCBVKzIyMTU7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUJvbGRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by90Nk5kNGNmUFJoWlA0NFE1UUFqY0M2RThrTTR4V1IxXzFiWVVSUm9qUkdjLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAwLTAyNEYsIFUrMUUwMC0xRUZGLCBVKzIwQTAtMjBBQiwgVSsyMEFELTIwQ0YsIFUrMkM2MC0yQzdGLCBVK0E3MjAtQTdGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQgSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tQm9sZEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL3Q2TmQ0Y2ZQUmhaUDQ0UTVRQWpjQzlEaU5zUjVhLTlPZV9JdnB1OFhXbFkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL09wWFVxVG8wVWdRUWhHal9TRmRMV0JrQXo0clluNDdaeTJydmlnV1FmNncud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0MDAtMDQ1RiwgVSswNDkwLTA0OTEsIFUrMDRCMC0wNEIxLCBVKzIxMTY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9XeHJYSmEwQzNLZHRDN2xNYWZHNGRSa0F6NHJZbjQ3WnkycnZpZ1dRZjZ3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vY0RLaFJhWG5RVE9WYmFveHdkT3I5eGtBejRyWW40N1p5MnJ2aWdXUWY2dy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vMWhaZjAyUE9BTmgzMmsyVmtnRW9VQmtBejRyWW40N1p5MnJ2aWdXUWY2dy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMUYwMC0xRkZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vdlBjeW5TTDBxSHFfNmRYN2xLVkJ5WFloamJTcHZjNDdlZTZ4Ul84MEhudy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vdlN6dWxmS1NLMExMampmZWF4Y1JFaGtBejRyWW40N1p5MnJ2aWdXUWY2dy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9LMjNjeFdWVHJJRkQ2REpzRVZpMDdSa0F6NHJZbjQ3WnkycnZpZ1dRZjZ3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAyLTAxMDMsIFUrMUVBMC0xRUY5LCBVKzIwQUI7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCcpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0JyksIHVybCgvZm9udC1yb2JvdG8vRmw0eTBRZE94eXlUSEVHTVhYOGtjWVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0JyksIGxvY2FsKCdSb2JvdG8tTGlnaHQnKSwgdXJsKC9mb250LXJvYm90by8wZUM2ZmwwNmx1WEVZV3BCU0p2WENJWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQnKSwgbG9jYWwoJ1JvYm90by1MaWdodCcpLCB1cmwoL2ZvbnQtcm9ib3RvL0kzUzF3c2dTZzlZQ3VyVjZQVWtUT1lYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzNzAtMDNGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0JyksIGxvY2FsKCdSb2JvdG8tTGlnaHQnKSwgdXJsKC9mb250LXJvYm90by8tTDE0SmswNm02cFVIQi01bVhRUW5ZWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCcpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0JyksIHVybCgvZm9udC1yb2JvdG8vSGdvMTNrLXRmU3BuMHFpMVNGZFVmWkJ3MXhVMXJLcHRKal8wamFuczkyMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQnKSwgbG9jYWwoJ1JvYm90by1MaWdodCcpLCB1cmwoL2ZvbnQtcm9ib3RvL1BydTMzcWpTaHBaU21HM3o2Vll3bllYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDAtMDI0RiwgVSsxRTAwLTFFRkYsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDRiwgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQnKSwgbG9jYWwoJ1JvYm90by1MaWdodCcpLCB1cmwoL2ZvbnQtcm9ib3RvL05ZRFdCZEQ0Z0lxMjZHNVhZYkhzRklYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0IEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0SXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vN204bDdUbEZPLVMzVmtoSHVSMGF0MTRzWVlkSmc1ZFUycXpKRVZTdXRhMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0IEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0SXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vN204bDdUbEZPLVMzVmtoSHVSMGF0X1pyYVIyVGc4dzJsem03a0xOTDAtdy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQ2MC0wNTJGLCBVKzIwQjQsIFUrMkRFMC0yREZGLCBVK0E2NDAtQTY5RjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0IEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0SXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vN204bDdUbEZPLVMzVmtoSHVSMGF0d3RfUm02OTFMVGViS2ZZMlprS1NtSS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQgSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tTGlnaHRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by83bThsN1RsRk8tUzNWa2hIdVIwYXQxQlcyNlF4cFNqLV9aS21feFQ0aFd3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1MaWdodEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvLzdtOGw3VGxGTy1TM1ZraEh1UjBhdDRncDlROGdiWXJocUdsUmF2X0lYZmsud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkM2LCBVKzAyREEsIFUrMDJEQywgVSsyMDAwLTIwNkYsIFUrMjA3NCwgVSsyMEFDLCBVKzIyMTIsIFUrMjIxNTsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0IEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0SXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vN204bDdUbEZPLVMzVmtoSHVSMGF0NkU4a000eFdSMV8xYllVUlJvalJHYy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1MaWdodEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvLzdtOGw3VGxGTy1TM1ZraEh1UjBhdDlEaU5zUjVhLTlPZV9JdnB1OFhXbFkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1lZGl1bScpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bScpLCB1cmwoL2ZvbnQtcm9ib3RvL29IaTMwa3dRV3ZwQ1dxQWh6SGNDU0lYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0MDAtMDQ1RiwgVSswNDkwLTA0OTEsIFUrMDRCMC0wNEIxLCBVKzIxMTY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0nKSwgbG9jYWwoJ1JvYm90by1NZWRpdW0nKSwgdXJsKC9mb250LXJvYm90by9aTHFLZWVsWWJBVEc2MEVwWkJTRHk0WDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtJyksIHVybCgvZm9udC1yb2JvdG8vbXg5VWNrNnVCNjNWSUtGWW5FTVhyWVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtJyksIHVybCgvZm9udC1yb2JvdG8vckd2SGRKbnIybDc1cWIwWU5EOU55SVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMUYwMC0xRkZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtJyksIHVybCgvZm9udC1yb2JvdG8vUnhaSmRuemVvM1I1elNleGdlOFVVWkJ3MXhVMXJLcHRKal8wamFuczkyMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtJyksIHVybCgvZm9udC1yb2JvdG8vb09lRndaTmxyVGVmekxZbWxWVjFVSVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0nKSwgbG9jYWwoJ1JvYm90by1NZWRpdW0nKSwgdXJsKC9mb250LXJvYm90by9tYm1ocHJNSDY5Wmk2ZUVQQllWRmhZWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAyLTAxMDMsIFUrMUVBMC0xRUY5LCBVKzIwQUI7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vT0xmZkdCVGFGMFhGT1cxZ251SEYwVjRzWVlkSmc1ZFUycXpKRVZTdXRhMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1lZGl1bSBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1NZWRpdW1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9PTGZmR0JUYUYwWEZPVzFnbnVIRjBmWnJhUjJUZzh3Mmx6bTdrTE5MMC13LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL09MZmZHQlRhRjBYRk9XMWdudUhGMFF0X1JtNjkxTFRlYktmWTJaa0tTbUkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzNzAtMDNGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1lZGl1bSBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1NZWRpdW1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9PTGZmR0JUYUYwWEZPVzFnbnVIRjBWQlcyNlF4cFNqLV9aS21feFQ0aFd3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vT0xmZkdCVGFGMFhGT1cxZ251SEYwWWdwOVE4Z2JZcmhxR2xSYXZfSVhmay53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL09MZmZHQlRhRjBYRk9XMWdudUhGMGFFOGtNNHhXUjFfMWJZVVJSb2pSR2Mud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDAtMDI0RiwgVSsxRTAwLTFFRkYsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDRiwgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL09MZmZHQlRhRjBYRk9XMWdudUhGMGREaU5zUjVhLTlPZV9JdnB1OFhXbFkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubycpLCBsb2NhbCgnUm9ib3RvTW9uby1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vaE1xUE5Mc3VfZHl3TWE0Q19ERXBZMTRzWVlkSmc1ZFUycXpKRVZTdXRhMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubycpLCBsb2NhbCgnUm9ib3RvTW9uby1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vaE1xUE5Mc3VfZHl3TWE0Q19ERXBZX1pyYVIyVGc4dzJsem03a0xOTDAtdy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQ2MC0wNTJGLCBVKzIwQjQsIFUrMkRFMC0yREZGLCBVK0E2NDAtQTY5RjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubycpLCBsb2NhbCgnUm9ib3RvTW9uby1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vaE1xUE5Mc3VfZHl3TWE0Q19ERXBZd3RfUm02OTFMVGViS2ZZMlprS1NtSS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNb25vJyksIGxvY2FsKCdSb2JvdG9Nb25vLVJlZ3VsYXInKSwgdXJsKC9mb250LXJvYm90by9oTXFQTkxzdV9keXdNYTRDX0RFcFkxQlcyNlF4cFNqLV9aS21feFQ0aFd3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8nKSwgbG9jYWwoJ1JvYm90b01vbm8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL2hNcVBOTHN1X2R5d01hNENfREVwWTRncDlROGdiWXJocUdsUmF2X0lYZmsud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkM2LCBVKzAyREEsIFUrMDJEQywgVSsyMDAwLTIwNkYsIFUrMjA3NCwgVSsyMEFDLCBVKzIyMTIsIFUrMjIxNTsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubycpLCBsb2NhbCgnUm9ib3RvTW9uby1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vaE1xUE5Mc3VfZHl3TWE0Q19ERXBZNkU4a000eFdSMV8xYllVUlJvalJHYy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8nKSwgbG9jYWwoJ1JvYm90b01vbm8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL2hNcVBOTHN1X2R5d01hNENfREVwWTlEaU5zUjVhLTlPZV9JdnB1OFhXbFkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubyBCb2xkJyksIGxvY2FsKCdSb2JvdG9Nb25vLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9ONGR1VmM5QzU4dXdQaVk4XzU5RnoxeC1NMUkxdzVPTWlxblZGOHhCTGhVLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDAwLTA0NUYsIFUrMDQ5MC0wNDkxLCBVKzA0QjAtMDRCMSwgVSsyMTE2Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNb25vIEJvbGQnKSwgbG9jYWwoJ1JvYm90b01vbm8tQm9sZCcpLCB1cmwoL2ZvbnQtcm9ib3RvL040ZHVWYzlDNTh1d1BpWThfNTlGendYYUFYdXA1bVpsZks2eFJMcmhzY28ud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0NjAtMDUyRiwgVSsyMEI0LCBVKzJERTAtMkRGRiwgVStBNjQwLUE2OUY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvTW9uby1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vTjRkdVZjOUM1OHV3UGlZOF81OUZ6d242V3F4by14d3hpbERYUFU4Y2hWVS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNb25vIEJvbGQnKSwgbG9jYWwoJ1JvYm90b01vbm8tQm9sZCcpLCB1cmwoL2ZvbnQtcm9ib3RvL040ZHVWYzlDNTh1d1BpWThfNTlGejFUN2FKTEs2bktwbjM2SU13VGNNTWMud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzFGMDAtMUZGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubyBCb2xkJyksIGxvY2FsKCdSb2JvdG9Nb25vLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9ONGR1VmM5QzU4dXdQaVk4XzU5RnpfNzlfWnVVeENpZ00yRGVzcFRuRmF3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMDAwLTAwRkYsIFUrMDEzMSwgVSswMTUyLTAxNTMsIFUrMDJDNiwgVSswMkRBLCBVKzAyREMsIFUrMjAwMC0yMDZGLCBVKzIwNzQsIFUrMjBBQywgVSsyMjEyLCBVKzIyMTU7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvTW9uby1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vTjRkdVZjOUM1OHV3UGlZOF81OUZ6NGdkOU9FUFVDTjNBZFlXMGU4dGF0NC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvTW9uby1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vTjRkdVZjOUM1OHV3UGlZOF81OUZ6OGJJUVNZWm5XTGFXQzlRTkNwVEtfVS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMi0wMTAzLCBVKzFFQTAtMUVGOSwgVSsyMEFCOwp9Cjwvc3R5bGU+CgoKCjxzdHlsZT4ubWF0LWJhZGdlLWNvbnRlbnR7Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsIC5tYXQtYmFkZ2UtY29udGVudHtmb250LXNpemU6OXB4fS5tYXQtYmFkZ2UtbGFyZ2UgLm1hdC1iYWRnZS1jb250ZW50e2ZvbnQtc2l6ZToyNHB4fS5tYXQtaDEsLm1hdC1oZWFkbGluZSwubWF0LXR5cG9ncmFwaHkgaDF7Zm9udDo0MDAgMjRweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDIsLm1hdC10aXRsZSwubWF0LXR5cG9ncmFwaHkgaDJ7Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDMsLm1hdC1zdWJoZWFkaW5nLTIsLm1hdC10eXBvZ3JhcGh5IGgze2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg0LC5tYXQtc3ViaGVhZGluZy0xLC5tYXQtdHlwb2dyYXBoeSBoNHtmb250OjQwMCAxNXB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNSwubWF0LXR5cG9ncmFwaHkgaDV7Zm9udDo0MDAgY2FsYygxNHB4ICogMC44MykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtaDYsLm1hdC10eXBvZ3JhcGh5IGg2e2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuNjcpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWJvZHktc3Ryb25nLC5tYXQtYm9keS0ye2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keSwubWF0LWJvZHktMSwubWF0LXR5cG9ncmFwaHl7Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5IHAsLm1hdC1ib2R5LTEgcCwubWF0LXR5cG9ncmFwaHkgcHttYXJnaW46MCAwIDEycHh9Lm1hdC1zbWFsbCwubWF0LWNhcHRpb257Zm9udDo0MDAgMTJweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1kaXNwbGF5LTQsLm1hdC10eXBvZ3JhcGh5IC5tYXQtZGlzcGxheS00e2ZvbnQ6MzAwIDExMnB4LzExMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wNWVtO21hcmdpbjowIDAgNTZweH0ubWF0LWRpc3BsYXktMywubWF0LXR5cG9ncmFwaHkgLm1hdC1kaXNwbGF5LTN7Zm9udDo0MDAgNTZweC81NnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMmVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMiwubWF0LXR5cG9ncmFwaHkgLm1hdC1kaXNwbGF5LTJ7Zm9udDo0MDAgNDVweC80OHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMDVlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTEsLm1hdC10eXBvZ3JhcGh5IC5tYXQtZGlzcGxheS0xe2ZvbnQ6NDAwIDM0cHgvNDBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJ7Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b24sLm1hdC1yYWlzZWQtYnV0dG9uLC5tYXQtaWNvbi1idXR0b24sLm1hdC1zdHJva2VkLWJ1dHRvbiwubWF0LWZsYXQtYnV0dG9uLC5tYXQtZmFiLC5tYXQtbWluaS1mYWJ7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWJ1dHRvbi10b2dnbGV7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZHtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxle2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhcmQtaGVhZGVyIC5tYXQtY2FyZC10aXRsZXtmb250LXNpemU6MjBweH0ubWF0LWNhcmQtc3VidGl0bGUsLm1hdC1jYXJkLWNvbnRlbnR7Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveHtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXQgLm1hdC1jaGVja2JveC1sYWJlbHtsaW5lLWhlaWdodDoyNHB4fS5tYXQtY2hpcHtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jaGlwIC5tYXQtY2hpcC10cmFpbGluZy1pY29uLm1hdC1pY29uLC5tYXQtY2hpcCAubWF0LWNoaXAtcmVtb3ZlLm1hdC1pY29ue2ZvbnQtc2l6ZToxOHB4fS5tYXQtdGFibGV7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGx7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2VsbCwubWF0LWZvb3Rlci1jZWxse2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2FsZW5kYXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FsZW5kYXItYm9keXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWwsLm1hdC1jYWxlbmRhci1wZXJpb2QtYnV0dG9ue2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlciB0aHtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo0MDB9Lm1hdC1kaWFsb2ctdGl0bGV7Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVye2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudHtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGR7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTI1O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJ7cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29ue2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLWJ1dHRvbiwubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbi1idXR0b257aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLWJ1dHRvbiAubWF0LWljb24sLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb24tYnV0dG9uIC5tYXQtaWNvbntoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXh7cGFkZGluZzouNWVtIDA7Ym9yZGVyLXRvcDouODQzNzVlbSBzb2xpZCB0cmFuc3BhcmVudH0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcjpmb2N1cysubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJ7dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVse3RvcDoxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcntmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtd3JhcHBlcntwYWRkaW5nLWJvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcjpmb2N1cysubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sOi13ZWJraXQtYXV0b2ZpbGwrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMnB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjNlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM1MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtbGFiZWx7dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJ7bWFyZ2luLXRvcDouNTQxNjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjY2NjY2NjY2NjdlbSl9QG1lZGlhIHByaW50ey5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMmVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sOi13ZWJraXQtYXV0b2ZpbGwrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIxZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nOi4yNWVtIDAgLjc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0b3A6MS4wOTM3NWVtO21hcmdpbi10b3A6LTAuNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcltsYWJlbF06bm90KDpsYWJlbC1zaG93bikrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nOjFlbSAwIDFlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RvcDoxLjg0Mzc1ZW07bWFyZ2luLXRvcDotMC4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcltsYWJlbF06bm90KDpsYWJlbC1zaG93bikrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXIsLm1hdC1ncmlkLXRpbGUtZm9vdGVye2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlciAubWF0LWxpbmUsLm1hdC1ncmlkLXRpbGUtZm9vdGVyIC5tYXQtbGluZXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyIC5tYXQtbGluZTpudGgtY2hpbGQobisyKSwubWF0LWdyaWQtdGlsZS1mb290ZXIgLm1hdC1saW5lOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50e21hcmdpbi10b3A6LTAuMDYyNWVtfS5tYXQtbWVudS1pdGVte2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1wYWdpbmF0b3IsLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplIC5tYXQtc2VsZWN0LXRyaWdnZXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9ue2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdHtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3QtdHJpZ2dlcntoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50e2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsLC5tYXQtc3RlcHBlci1ob3Jpem9udGFse2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXN0ZXAtbGFiZWx7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3J7Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcntmb250LXNpemU6MTRweH0ubWF0LXN0ZXAtbGFiZWwtc2VsZWN0ZWR7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3Vwe2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1saW5re2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyLC5tYXQtdG9vbGJhciBoMSwubWF0LXRvb2xiYXIgaDIsLm1hdC10b29sYmFyIGgzLC5tYXQtdG9vbGJhciBoNCwubWF0LXRvb2xiYXIgaDUsLm1hdC10b29sYmFyIGg2e2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowfS5tYXQtdG9vbHRpcHtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldHtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVte2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3Qtb3B0aW9ue2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3QtYmFzZSAubWF0LWxpc3QtaXRlbXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZSAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmV7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGluZTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZSAubWF0LWxpc3Qtb3B0aW9ue2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saW5le3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGluZTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZSAubWF0LXN1YmhlYWRlcntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXSAubWF0LWxpc3QtaXRlbXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saW5le3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saW5lOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9ue2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGluZXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saW5lOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXSAubWF0LXN1YmhlYWRlcntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtb3B0aW9ue2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTZweH0ubWF0LW9wdGdyb3VwLWxhYmVse2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFye2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweH0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb257bGluZS1oZWlnaHQ6MTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRyZWV7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlLC5tYXQtbmVzdGVkLXRyZWUtbm9kZXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGV7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtcmlwcGxlOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtcmlwcGxlLm1hdC1yaXBwbGUtdW5ib3VuZGVke292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudHtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItcmFkaXVzOjUwJTtwb2ludGVyLWV2ZW50czpub25lO3RyYW5zaXRpb246b3BhY2l0eSx0cmFuc2Zvcm0gMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpO3RyYW5zZm9ybTpzY2FsZSgwKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtcmlwcGxlLWVsZW1lbnR7ZGlzcGxheTpub25lfS5jZGstdmlzdWFsbHktaGlkZGVue2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1vdmVybGF5LWNvbnRhaW5lciwuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJ7cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVye3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktY29udGFpbmVyOmVtcHR5e2Rpc3BsYXk6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJ7ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZXtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czphdXRvO2JveC1zaXppbmc6Ym9yZGVyLWJveDt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O21heC13aWR0aDoxMDAlO21heC1oZWlnaHQ6MTAwJX0uY2RrLW92ZXJsYXktYmFja2Ryb3B7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKTtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmd7b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmd7b3BhY2l0eTouNn0uY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcHtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjMyKX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AsLmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmd7b3BhY2l0eTowfS5jZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94e3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2t7cG9zaXRpb246Zml4ZWQ7d2lkdGg6MTAwJTtvdmVyZmxvdy15OnNjcm9sbH1Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0ey8qISovfUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5key8qISovfS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWQ6LXdlYmtpdC1hdXRvZmlsbHthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQgMHMgMW1zfS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWQ6bm90KDotd2Via2l0LWF1dG9maWxsKXthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIDBzIDFtc310ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemV7cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ3twYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDphdXRvICFpbXBvcnRhbnQ7b3ZlcmZsb3c6aGlkZGVuICFpbXBvcnRhbnR9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZy1maXJlZm94e3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OjAgIWltcG9ydGFudH0ubWF0LWZvY3VzLWluZGljYXRvcntwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3J7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEpfS5tYXQtb3B0aW9ue2NvbG9yOiMyMTIxMjF9Lm1hdC1vcHRpb246aG92ZXI6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKSwubWF0LW9wdGlvbjpmb2N1czpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDQpfS5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tbXVsdGlwbGUpOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1vcHRpb24ubWF0LWFjdGl2ZXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjA0KTtjb2xvcjojMjEyMTIxfS5tYXQtb3B0aW9uLm1hdC1vcHRpb24tZGlzYWJsZWR7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtcHJpbWFyeSAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtjb2xvcjojZjU3YzAwfS5tYXQtYWNjZW50IC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2NvbG9yOiNmZjk4MDB9Lm1hdC13YXJuIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2NvbG9yOiNmNDQzMzZ9Lm1hdC1vcHRncm91cC1sYWJlbHtjb2xvcjojNjE2MTYxfS5tYXQtb3B0Z3JvdXAtZGlzYWJsZWQgLm1hdC1vcHRncm91cC1sYWJlbHtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1wc2V1ZG8tY2hlY2tib3h7Y29sb3I6IzYxNjE2MX0ubWF0LXBzZXVkby1jaGVja2JveDo6YWZ0ZXJ7Y29sb3I6I2ZmZn0ubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZHtjb2xvcjojYjBiMGIwfS5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLC5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRle2JhY2tncm91bmQ6I2Y1N2MwMH0ubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUsLm1hdC1hY2NlbnQgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCwubWF0LWFjY2VudCAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRle2JhY2tncm91bmQ6I2ZmOTgwMH0ubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCwubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZXtiYWNrZ3JvdW5kOiNmNDQzMzZ9Lm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVkLC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZHtiYWNrZ3JvdW5kOiNiMGIwYjB9Lm1hdC1hcHAtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWVsZXZhdGlvbi16MHtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejF7Ym94LXNoYWRvdzowcHggMnB4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMXB4IDFweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16Mntib3gtc2hhZG93OjBweCAzcHggMXB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAycHggMnB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoze2JveC1zaGFkb3c6MHB4IDNweCAzcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDNweCA0cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCA4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejR7Ym94LXNoYWRvdzowcHggMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNHB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejV7Ym94LXNoYWRvdzowcHggM3B4IDVweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNXB4IDhweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDE0cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejZ7Ym94LXNoYWRvdzowcHggM3B4IDVweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNnB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAxOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXo3e2JveC1zaGFkb3c6MHB4IDRweCA1cHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDdweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAycHggMTZweCAxcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16OHtib3gtc2hhZG93OjBweCA1cHggNXB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA4cHggMTBweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggM3B4IDE0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejl7Ym94LXNoYWRvdzowcHggNXB4IDZweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggOXB4IDEycHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDNweCAxNnB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxMHtib3gtc2hhZG93OjBweCA2cHggNnB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxMHB4IDE0cHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDRweCAxOHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxMXtib3gtc2hhZG93OjBweCA2cHggN3B4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxMXB4IDE1cHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDRweCAyMHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxMntib3gtc2hhZG93OjBweCA3cHggOHB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxMnB4IDE3cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDVweCAyMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxM3tib3gtc2hhZG93OjBweCA3cHggOHB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxM3B4IDE5cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDVweCAyNHB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxNHtib3gtc2hhZG93OjBweCA3cHggOXB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxNHB4IDIxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDVweCAyNnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxNXtib3gtc2hhZG93OjBweCA4cHggOXB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxNXB4IDIycHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDZweCAyOHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxNntib3gtc2hhZG93OjBweCA4cHggMTBweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMTZweCAyNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA2cHggMzBweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MTd7Ym94LXNoYWRvdzowcHggOHB4IDExcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDE3cHggMjZweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggNnB4IDMycHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejE4e2JveC1zaGFkb3c6MHB4IDlweCAxMXB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxOHB4IDI4cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDdweCAzNHB4IDZweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxOXtib3gtc2hhZG93OjBweCA5cHggMTJweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMTlweCAyOXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA3cHggMzZweCA2cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MjB7Ym94LXNoYWRvdzowcHggMTBweCAxM3B4IC02cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAyMHB4IDMxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDhweCAzOHB4IDdweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoyMXtib3gtc2hhZG93OjBweCAxMHB4IDEzcHggLTZweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDIxcHggMzNweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggOHB4IDQwcHggN3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejIye2JveC1zaGFkb3c6MHB4IDEwcHggMTRweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMjJweCAzNXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA4cHggNDJweCA3cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MjN7Ym94LXNoYWRvdzowcHggMTFweCAxNHB4IC03cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAyM3B4IDM2cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDlweCA0NHB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoyNHtib3gtc2hhZG93OjBweCAxMXB4IDE1cHggLTdweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDI0cHggMzhweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggOXB4IDQ2cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC10aGVtZS1sb2FkZWQtbWFya2Vye2Rpc3BsYXk6bm9uZX0ubWF0LWF1dG9jb21wbGV0ZS1wYW5lbHtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWF1dG9jb21wbGV0ZS1wYW5lbDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA0cHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWF1dG9jb21wbGV0ZS1wYW5lbCAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtYWN0aXZlKTpub3QoOmhvdmVyKXtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC1hdXRvY29tcGxldGUtcGFuZWwgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LWFjdGl2ZSk6bm90KDpob3Zlcik6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtjb2xvcjojMjEyMTIxfS5tYXQtYmFkZ2UtY29udGVudHtjb2xvcjojZmZmO2JhY2tncm91bmQ6I2Y1N2MwMH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYmFkZ2UtY29udGVudHtvdXRsaW5lOnNvbGlkIDFweDtib3JkZXItcmFkaXVzOjB9Lm1hdC1iYWRnZS1hY2NlbnQgLm1hdC1iYWRnZS1jb250ZW50e2JhY2tncm91bmQ6I2ZmOTgwMDtjb2xvcjojZmZmfS5tYXQtYmFkZ2Utd2FybiAubWF0LWJhZGdlLWNvbnRlbnR7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOiNmNDQzMzZ9Lm1hdC1iYWRnZXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LWJhZGdlLWhpZGRlbiAubWF0LWJhZGdlLWNvbnRlbnR7ZGlzcGxheTpub25lfS5tYXQtYmFkZ2UtZGlzYWJsZWQgLm1hdC1iYWRnZS1jb250ZW50e2JhY2tncm91bmQ6I2JkYmRiZDtjb2xvcjojNzU3NTc1fS5tYXQtYmFkZ2UtY29udGVudHtwb3NpdGlvbjphYnNvbHV0ZTt0ZXh0LWFsaWduOmNlbnRlcjtkaXNwbGF5OmlubGluZS1ibG9jaztib3JkZXItcmFkaXVzOjUwJTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAyMDBtcyBlYXNlLWluLW91dDt0cmFuc2Zvcm06c2NhbGUoMC42KTtvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7cG9pbnRlci1ldmVudHM6bm9uZX0ubmctYW5pbWF0ZS1kaXNhYmxlZCAubWF0LWJhZGdlLWNvbnRlbnQsLm1hdC1iYWRnZS1jb250ZW50Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxle3RyYW5zaXRpb246bm9uZX0ubWF0LWJhZGdlLWNvbnRlbnQubWF0LWJhZGdlLWFjdGl2ZXt0cmFuc2Zvcm06bm9uZX0ubWF0LWJhZGdlLXNtYWxsIC5tYXQtYmFkZ2UtY29udGVudHt3aWR0aDoxNnB4O2hlaWdodDoxNnB4O2xpbmUtaGVpZ2h0OjE2cHh9Lm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYWJvdmUgLm1hdC1iYWRnZS1jb250ZW50e3RvcDotOHB4fS5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWJlbG93IC5tYXQtYmFkZ2UtY29udGVudHtib3R0b206LThweH0ubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6LTE2cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDphdXRvO3JpZ2h0Oi0xNnB4fS5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDotMTZweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0OmF1dG87bGVmdDotMTZweH0ubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6LThweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0OmF1dG87cmlnaHQ6LThweH0ubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6LThweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0OmF1dG87bGVmdDotOHB4fS5tYXQtYmFkZ2UtbWVkaXVtIC5tYXQtYmFkZ2UtY29udGVudHt3aWR0aDoyMnB4O2hlaWdodDoyMnB4O2xpbmUtaGVpZ2h0OjIycHh9Lm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWFib3ZlIC5tYXQtYmFkZ2UtY29udGVudHt0b3A6LTExcHh9Lm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWJlbG93IC5tYXQtYmFkZ2UtY29udGVudHtib3R0b206LTExcHh9Lm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDotMjJweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDphdXRvO3JpZ2h0Oi0yMnB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6LTIycHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6YXV0bztsZWZ0Oi0yMnB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6LTExcHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6YXV0bztyaWdodDotMTFweH0ubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi0xMXB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0OmF1dG87bGVmdDotMTFweH0ubWF0LWJhZGdlLWxhcmdlIC5tYXQtYmFkZ2UtY29udGVudHt3aWR0aDoyOHB4O2hlaWdodDoyOHB4O2xpbmUtaGVpZ2h0OjI4cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYWJvdmUgLm1hdC1iYWRnZS1jb250ZW50e3RvcDotMTRweH0ubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1iZWxvdyAubWF0LWJhZGdlLWNvbnRlbnR7Ym90dG9tOi0xNHB4fS5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDotMjhweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0OmF1dG87cmlnaHQ6LTI4cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi0yOHB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6YXV0bztsZWZ0Oi0yOHB4fS5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDotMTRweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0OmF1dG87cmlnaHQ6LTE0cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi0xNHB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6YXV0bztsZWZ0Oi0xNHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcntib3gtc2hhZG93OjBweCA4cHggMTBweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMTZweCAyNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA2cHggMzBweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKTtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWJ1dHRvbiwubWF0LWljb24tYnV0dG9uLC5tYXQtc3Ryb2tlZC1idXR0b257Y29sb3I6aW5oZXJpdDtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50fS5tYXQtYnV0dG9uLm1hdC1wcmltYXJ5LC5tYXQtaWNvbi1idXR0b24ubWF0LXByaW1hcnksLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtcHJpbWFyeXtjb2xvcjojZjU3YzAwfS5tYXQtYnV0dG9uLm1hdC1hY2NlbnQsLm1hdC1pY29uLWJ1dHRvbi5tYXQtYWNjZW50LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWFjY2VudHtjb2xvcjojZmY5ODAwfS5tYXQtYnV0dG9uLm1hdC13YXJuLC5tYXQtaWNvbi1idXR0b24ubWF0LXdhcm4sLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtd2Fybntjb2xvcjojZjQ0MzM2fS5tYXQtYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtaWNvbi1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWljb24tYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWljb24tYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1pY29uLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWljb24tYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMH0ubWF0LWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwfS5tYXQtYnV0dG9uLm1hdC13YXJuIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbi5tYXQtd2FybiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXdhcm4gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9Lm1hdC1idXR0b24gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LWljb24tYnV0dG9uIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1zdHJva2VkLWJ1dHRvbiAubWF0LXJpcHBsZS1lbGVtZW50e29wYWNpdHk6LjE7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3J9Lm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kOiMwMDB9Lm1hdC1zdHJva2VkLWJ1dHRvbjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpe2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1mbGF0LWJ1dHRvbiwubWF0LXJhaXNlZC1idXR0b24sLm1hdC1mYWIsLm1hdC1taW5pLWZhYntjb2xvcjojMjEyMTIxO2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubWF0LWZsYXQtYnV0dG9uLm1hdC1wcmltYXJ5LC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeSwubWF0LWZhYi5tYXQtcHJpbWFyeSwubWF0LW1pbmktZmFiLm1hdC1wcmltYXJ5e2NvbG9yOiNmZmZ9Lm1hdC1mbGF0LWJ1dHRvbi5tYXQtYWNjZW50LC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYWNjZW50LC5tYXQtZmFiLm1hdC1hY2NlbnQsLm1hdC1taW5pLWZhYi5tYXQtYWNjZW50e2NvbG9yOiNmZmZ9Lm1hdC1mbGF0LWJ1dHRvbi5tYXQtd2FybiwubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm4sLm1hdC1mYWIubWF0LXdhcm4sLm1hdC1taW5pLWZhYi5tYXQtd2Fybntjb2xvcjojZmZmfS5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZsYXQtYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXJhaXNlZC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmFiLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mYWIubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmFiLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mYWIubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtbWluaS1mYWIubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LW1pbmktZmFiLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LW1pbmktZmFiLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1taW5pLWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWR7Y29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnksLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5LC5tYXQtZmFiLm1hdC1wcmltYXJ5LC5tYXQtbWluaS1mYWIubWF0LXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfS5tYXQtZmxhdC1idXR0b24ubWF0LWFjY2VudCwubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudCwubWF0LWZhYi5tYXQtYWNjZW50LC5tYXQtbWluaS1mYWIubWF0LWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDB9Lm1hdC1mbGF0LWJ1dHRvbi5tYXQtd2FybiwubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm4sLm1hdC1mYWIubWF0LXdhcm4sLm1hdC1taW5pLWZhYi5tYXQtd2FybntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC1mbGF0LWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmxhdC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZsYXQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mYWIubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZhYi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mYWIubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1taW5pLWZhYi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtbWluaS1mYWIubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtbWluaS1mYWIubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LW1pbmktZmFiLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWZsYXQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1mYWIubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LW1pbmktZmFiLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX0ubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtZmFiLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LW1pbmktZmFiLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfS5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LWZhYi5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtbWluaS1mYWIubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfS5tYXQtc3Ryb2tlZC1idXR0b246bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksLm1hdC1mbGF0LWJ1dHRvbjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1yYWlzZWQtYnV0dG9uOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDJweCAycHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1yYWlzZWQtYnV0dG9uOm5vdCgubWF0LWJ1dHRvbi1kaXNhYmxlZCk6YWN0aXZlOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDVweCA1cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDhweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAzcHggMTRweCAycHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LXJhaXNlZC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1mYWI6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksLm1hdC1taW5pLWZhYjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAzcHggNXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA2cHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDE4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1mYWI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKTphY3RpdmU6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksLm1hdC1taW5pLWZhYjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpOmFjdGl2ZTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCA3cHggOHB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxMnB4IDE3cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDVweCAyMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZmFiLm1hdC1idXR0b24tZGlzYWJsZWQ6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksLm1hdC1taW5pLWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZSwubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXB7Ym94LXNoYWRvdzowcHggM3B4IDFweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMnB4IDJweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkLC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJke2JveC1zaGFkb3c6bm9uZX0ubWF0LWJ1dHRvbi10b2dnbGV7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtYnV0dG9uLXRvZ2dsZSAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZHtjb2xvcjojMjEyMTIxO2JhY2tncm91bmQ6I2ZmZn0ubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDB9Lm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlKy5tYXQtYnV0dG9uLXRvZ2dsZXtib3JkZXItbGVmdDpzb2xpZCAxcHggcmdiYSgwLDAsMCwuMTIpfVtkaXI9cnRsXSAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWJ1dHRvbi10b2dnbGUrLm1hdC1idXR0b24tdG9nZ2xle2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLXJpZ2h0OnNvbGlkIDFweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQubWF0LWJ1dHRvbi10b2dnbGUtdmVydGljYWwgLm1hdC1idXR0b24tdG9nZ2xlKy5tYXQtYnV0dG9uLXRvZ2dsZXtib3JkZXItbGVmdDpub25lO2JvcmRlci1yaWdodDpub25lO2JvcmRlci10b3A6c29saWQgMXB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZHtiYWNrZ3JvdW5kLWNvbG9yOiNlMGUwZTA7Y29sb3I6IzYxNjE2MX0ubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZC5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJke2NvbG9yOiMyMTIxMjF9Lm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVke2NvbG9yOnJnYmEoMCwwLDAsLjI2KTtiYWNrZ3JvdW5kLWNvbG9yOiNlZWV9Lm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVkLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmR7YmFja2dyb3VuZDojZmZmfS5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZC5tYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2Vke2JhY2tncm91bmQtY29sb3I6I2JkYmRiZH0ubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkLC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJke2JvcmRlcjpzb2xpZCAxcHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtYnV0dG9uLXRvZ2dsZS1sYWJlbC1jb250ZW50e2xpbmUtaGVpZ2h0OjQ4cHh9Lm1hdC1jYXJke2JhY2tncm91bmQ6I2ZmZjtjb2xvcjojMjEyMTIxfS5tYXQtY2FyZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAycHggMXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxcHggMXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggM3B4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtY2FyZC5tYXQtY2FyZC1mbGF0Om5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWNhcmQtc3VidGl0bGV7Y29sb3I6IzYxNjE2MX0ubWF0LWNoZWNrYm94LWZyYW1le2JvcmRlci1jb2xvcjojNjE2MTYxfS5tYXQtY2hlY2tib3gtY2hlY2ttYXJre2ZpbGw6I2ZmZn0ubWF0LWNoZWNrYm94LWNoZWNrbWFyay1wYXRoe3N0cm9rZTojZmZmICFpbXBvcnRhbnR9Lm1hdC1jaGVja2JveC1taXhlZG1hcmt7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHJpbWFyeSAubWF0LWNoZWNrYm94LWJhY2tncm91bmQsLm1hdC1jaGVja2JveC1jaGVja2VkLm1hdC1wcmltYXJ5IC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Lm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1hY2NlbnQgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLC5tYXQtY2hlY2tib3gtY2hlY2tlZC5tYXQtYWNjZW50IC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDB9Lm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC13YXJuIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCwubWF0LWNoZWNrYm94LWNoZWNrZWQubWF0LXdhcm4gLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn0ubWF0LWNoZWNrYm94LWRpc2FibGVkLm1hdC1jaGVja2JveC1jaGVja2VkIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCwubWF0LWNoZWNrYm94LWRpc2FibGVkLm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiNiMGIwYjB9Lm1hdC1jaGVja2JveC1kaXNhYmxlZDpub3QoLm1hdC1jaGVja2JveC1jaGVja2VkKSAubWF0LWNoZWNrYm94LWZyYW1le2JvcmRlci1jb2xvcjojYjBiMGIwfS5tYXQtY2hlY2tib3gtZGlzYWJsZWQgLm1hdC1jaGVja2JveC1sYWJlbHtjb2xvcjojNjE2MTYxfS5tYXQtY2hlY2tib3ggLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiMwMDB9Lm1hdC1jaGVja2JveC1jaGVja2VkOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtY2hlY2tib3g6YWN0aXZlOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQ6I2Y1N2MwMH0ubWF0LWNoZWNrYm94LWNoZWNrZWQ6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LWNoZWNrYm94OmFjdGl2ZTpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQ6I2ZmOTgwMH0ubWF0LWNoZWNrYm94LWNoZWNrZWQ6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1jaGVja2JveDphY3RpdmU6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZDojZjQ0MzM2fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcHtiYWNrZ3JvdW5kLWNvbG9yOiNlMGUwZTA7Y29sb3I6IzIxMjEyMX0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAgLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjojMjEyMTIxO29wYWNpdHk6LjR9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwOm5vdCgubWF0LWNoaXAtZGlzYWJsZWQpOmFjdGl2ZXtib3gtc2hhZG93OjBweCAzcHggM3B4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAzcHggNHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcDpub3QoLm1hdC1jaGlwLWRpc2FibGVkKSAubWF0LWNoaXAtcmVtb3ZlOmhvdmVye29wYWNpdHk6LjU0fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1kaXNhYmxlZHtvcGFjaXR5Oi40fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcDo6YWZ0ZXJ7YmFja2dyb3VuZDojMDAwfS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDA7Y29sb3I6I2ZmZn0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXByaW1hcnkgLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjojZmZmO29wYWNpdHk6LjR9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXdhcm57YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2O2NvbG9yOiNmZmZ9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC13YXJuIC5tYXQtY2hpcC1yZW1vdmV7Y29sb3I6I2ZmZjtvcGFjaXR5Oi40fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwO2NvbG9yOiNmZmZ9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1hY2NlbnQgLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjojZmZmO29wYWNpdHk6LjR9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfS5tYXQtdGFibGV7YmFja2dyb3VuZDojZmZmfS5tYXQtdGFibGUgdGhlYWQsLm1hdC10YWJsZSB0Ym9keSwubWF0LXRhYmxlIHRmb290LG1hdC1oZWFkZXItcm93LG1hdC1yb3csbWF0LWZvb3Rlci1yb3csW21hdC1oZWFkZXItcm93XSxbbWF0LXJvd10sW21hdC1mb290ZXItcm93XSwubWF0LXRhYmxlLXN0aWNreXtiYWNrZ3JvdW5kOmluaGVyaXR9bWF0LXJvdyxtYXQtaGVhZGVyLXJvdyxtYXQtZm9vdGVyLXJvdyx0aC5tYXQtaGVhZGVyLWNlbGwsdGQubWF0LWNlbGwsdGQubWF0LWZvb3Rlci1jZWxse2JvcmRlci1ib3R0b20tY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtaGVhZGVyLWNlbGx7Y29sb3I6IzYxNjE2MX0ubWF0LWNlbGwsLm1hdC1mb290ZXItY2VsbHtjb2xvcjojMjEyMTIxfS5tYXQtY2FsZW5kYXItYXJyb3d7Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1kYXRlcGlja2VyLXRvZ2dsZSwubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LWNhbGVuZGFyLW5leHQtYnV0dG9uLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtY2FsZW5kYXItcHJldmlvdXMtYnV0dG9ue2NvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcntjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXItZGl2aWRlcjo6YWZ0ZXJ7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVse2NvbG9yOiM2MTYxNjF9Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudCwubWF0LWRhdGUtcmFuZ2UtaW5wdXQtc2VwYXJhdG9ye2NvbG9yOiMyMTIxMjE7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50fS5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2NvbG9yOiM3NTc1NzV9Lm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZGF0ZS1yYW5nZS1pbnB1dC1zZXBhcmF0b3J7Y29sb3I6Izc1NzU3NX0ubWF0LWNhbGVuZGFyLWJvZHktaW4tcHJldmlld3tjb2xvcjpyZ2JhKDAsMCwwLC4yNCl9Lm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS10b2RheTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMTgpfS5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyNDUsMTI0LDAsLjIpfS5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCwubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyNDksMTcxLDAsLjIpfS5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3JlLFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMjQ1LCAxMjQsIDAsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3JlLFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBsZWZ0LCByZ2JhKDI0NSwgMTI0LCAwLCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfS5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2UubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmFmdGVye2JhY2tncm91bmQ6I2E4ZGFiNX0ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQsLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQ6IzQ2YTM1ZX0ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwO2NvbG9yOiNmZmZ9Lm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ1LDEyNCwwLC40KX0ubWF0LWNhbGVuZGFyLWJvZHktdG9kYXkubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggI2ZmZn0ubWF0LWNhbGVuZGFyLWJvZHktY2VsbDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkKTpob3Zlcj4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpLC5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCksLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDUsMTI0LDAsLjMpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50e2JveC1zaGFkb3c6MHB4IDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDRweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpO2JhY2tncm91bmQtY29sb3I6I2ZmZjtjb2xvcjojMjEyMTIxfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDI1NSwxNTIsMCwuMil9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyNDksMTcxLDAsLjIpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmUsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDI1NSwgMTUyLCAwLCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3JlLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgW2Rpcj1ydGxdIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIGxlZnQsIHJnYmEoMjU1LCAxNTIsIDAsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2UubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmFmdGVye2JhY2tncm91bmQ6I2E4ZGFiNX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kOiM0NmEzNWV9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwO2NvbG9yOiNmZmZ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTUyLDAsLjQpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY2VsbDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkKTpob3Zlcj4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKSwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDE1MiwwLC4zKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjQ0LDY3LDU0LC4yKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjQ5LDE3MSwwLC4yKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZSwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDI0NCwgNjcsIDU0LCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1lbmQ6OmJlZm9yZSwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwgcmdiYSgyNDQsIDY3LCA1NCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjphZnRlcntiYWNrZ3JvdW5kOiNhOGRhYjV9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kOiM0NmEzNWV9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNjtjb2xvcjojZmZmfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuNCl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWNlbGw6bm90KC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZCk6aG92ZXI+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKSwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC4zKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC10b3VjaHtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1kYXRlcGlja2VyLXRvZ2dsZS1hY3RpdmV7Y29sb3I6I2Y1N2MwMH0ubWF0LWRhdGVwaWNrZXItdG9nZ2xlLWFjdGl2ZS5tYXQtYWNjZW50e2NvbG9yOiNmZjk4MDB9Lm1hdC1kYXRlcGlja2VyLXRvZ2dsZS1hY3RpdmUubWF0LXdhcm57Y29sb3I6I2Y0NDMzNn0ubWF0LWRhdGUtcmFuZ2UtaW5wdXQtaW5uZXJbZGlzYWJsZWRde2NvbG9yOiM3NTc1NzV9Lm1hdC1kaWFsb2ctY29udGFpbmVye2JveC1zaGFkb3c6MHB4IDExcHggMTVweCAtN3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMjRweCAzOHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA5cHggNDZweCA4cHggcmdiYSgwLCAwLCAwLCAwLjEyKTtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWRpdmlkZXJ7Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1kaXZpZGVyLXZlcnRpY2Fse2JvcmRlci1yaWdodC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1leHBhbnNpb24tcGFuZWx7YmFja2dyb3VuZDojZmZmO2NvbG9yOiMyMTIxMjF9Lm1hdC1leHBhbnNpb24tcGFuZWw6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggM3B4IDFweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMnB4IDJweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWFjdGlvbi1yb3d7Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1leHBhbnNpb24tcGFuZWwgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSksLm1hdC1leHBhbnNpb24tcGFuZWwgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKSwubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoLm1hdC1leHBhbmRlZCkgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyOmhvdmVyOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSl7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNCl9QG1lZGlhKGhvdmVyOiBub25lKXsubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoLm1hdC1leHBhbmRlZCk6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI6aG92ZXJ7YmFja2dyb3VuZDojZmZmfX0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGV7Y29sb3I6IzIxMjEyMX0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24sLm1hdC1leHBhbnNpb24taW5kaWNhdG9yOjphZnRlcntjb2xvcjojNjE2MTYxfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlclthcmlhLWRpc2FibGVkPXRydWVde2NvbG9yOnJnYmEoMCwwLDAsLjI2KX0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbYXJpYS1kaXNhYmxlZD10cnVlXSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGUsLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0gLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9ue2NvbG9yOmluaGVyaXR9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVye2hlaWdodDo0OHB4fS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci5tYXQtZXhwYW5kZWR7aGVpZ2h0OjY0cHh9Lm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOnJnYmEoOTcsOTcsOTcsLjYpfS5tYXQtaGludHtjb2xvcjpyZ2JhKDk3LDk3LDk3LC42KX0ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOiNmNTdjMDB9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbC5tYXQtYWNjZW50e2NvbG9yOiNmZjk4MDB9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbC5tYXQtd2Fybntjb2xvcjojZjQ0MzM2fS5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmVxdWlyZWQtbWFya2Vye2NvbG9yOiNmZjk4MDB9Lm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUubWF0LWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDB9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUubWF0LXdhcm57YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb2N1c2VkOm5vdCgubWF0LWZvcm0tZmllbGQtaW52YWxpZCkgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjojZjU3YzAwfS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb2N1c2VkOm5vdCgubWF0LWZvcm0tZmllbGQtaW52YWxpZCkubWF0LWFjY2VudCAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVye2NvbG9yOiNmZjk4MDB9Lm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvY3VzZWQ6bm90KC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkKS5tYXQtd2FybiAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVye2NvbG9yOiNmNDQzMzZ9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOiNmNDQzMzZ9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLm1hdC1hY2NlbnQsLm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIC5tYXQtZm9ybS1maWVsZC1yZXF1aXJlZC1tYXJrZXJ7Y29sb3I6I2Y0NDMzNn0ubWF0LWZvcm0tZmllbGQubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUubWF0LWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC1lcnJvcntjb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6IzYxNjE2MX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1oaW50e2NvbG9yOiM2MTYxNjF9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC40Mil9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMCwgMCwgMCwgMC40MikgMCUsIHJnYmEoMCwgMCwgMCwgMC40MikgMzMlLCB0cmFuc3BhcmVudCAwJSk7YmFja2dyb3VuZC1zaXplOjRweCAxMDAlO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC40Mil9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgwLCAwLCAwLCAwLjQyKSAwJSwgcmdiYSgwLCAwLCAwLCAwLjQyKSAzMyUsIHRyYW5zcGFyZW50IDAlKTtiYWNrZ3JvdW5kLXNpemU6NHB4IDEwMCU7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXh9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtZmxleHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjA0KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1mbGV4e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMDIpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZTo6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuNDIpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOiM3NTc1NzV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lOjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le2NvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiNmNTdjMDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZC5tYXQtYWNjZW50IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiNmZjk4MDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZC5tYXQtd2FybiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tjb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtaW52YWxpZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiNmNDQzMzZ9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6Izc1NzU3NX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le2NvbG9yOnJnYmEoMCwwLDAsLjA2KX0ubWF0LWljb24ubWF0LXByaW1hcnl7Y29sb3I6I2Y1N2MwMH0ubWF0LWljb24ubWF0LWFjY2VudHtjb2xvcjojZmY5ODAwfS5tYXQtaWNvbi5tYXQtd2Fybntjb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0IC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6IzYxNjE2MX0ubWF0LWlucHV0LWVsZW1lbnQ6ZGlzYWJsZWQsLm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjojNzU3NTc1fS5tYXQtaW5wdXQtZWxlbWVudHtjYXJldC1jb2xvcjojZjU3YzAwfS5tYXQtaW5wdXQtZWxlbWVudDo6cGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSg5Nyw5Nyw5NywuNDIpfS5tYXQtaW5wdXQtZWxlbWVudDo6LW1vei1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDk3LDk3LDk3LC40Mil9Lm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoOTcsOTcsOTcsLjQyKX0ubWF0LWlucHV0LWVsZW1lbnQ6LW1zLWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoOTcsOTcsOTcsLjQyKX0ubWF0LWZvcm0tZmllbGQubWF0LWFjY2VudCAubWF0LWlucHV0LWVsZW1lbnR7Y2FyZXQtY29sb3I6I2ZmOTgwMH0ubWF0LWZvcm0tZmllbGQubWF0LXdhcm4gLm1hdC1pbnB1dC1lbGVtZW50LC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtaW5wdXQtZWxlbWVudHtjYXJldC1jb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjojZjQ0MzM2fS5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1pdGVte2NvbG9yOiMyMTIxMjF9Lm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LW9wdGlvbntjb2xvcjojMjEyMTIxfS5tYXQtbGlzdC1iYXNlIC5tYXQtc3ViaGVhZGVye2NvbG9yOiM2MTYxNjF9Lm1hdC1saXN0LWl0ZW0tZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjojZWVlfS5tYXQtbGlzdC1vcHRpb246aG92ZXIsLm1hdC1saXN0LW9wdGlvbjpmb2N1cywubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtOmhvdmVyLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW06Zm9jdXMsLm1hdC1hY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbTpob3ZlciwubWF0LWFjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtOmZvY3Vze2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDQpfS5tYXQtbGlzdC1zaW5nbGUtc2VsZWN0ZWQtb3B0aW9uLC5tYXQtbGlzdC1zaW5nbGUtc2VsZWN0ZWQtb3B0aW9uOmhvdmVyLC5tYXQtbGlzdC1zaW5nbGUtc2VsZWN0ZWQtb3B0aW9uOmZvY3Vze2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMTIpfS5tYXQtbWVudS1wYW5lbHtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC1tZW51LXBhbmVsOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDRweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtbWVudS1pdGVte2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Y29sb3I6IzIxMjEyMX0ubWF0LW1lbnUtaXRlbVtkaXNhYmxlZF0sLm1hdC1tZW51LWl0ZW1bZGlzYWJsZWRdOjphZnRlciwubWF0LW1lbnUtaXRlbVtkaXNhYmxlZF0gLm1hdC1pY29uLW5vLWNvbG9ye2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LW1lbnUtaXRlbSAubWF0LWljb24tbm8tY29sb3IsLm1hdC1tZW51LWl0ZW0tc3VibWVudS10cmlnZ2VyOjphZnRlcntjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1tZW51LWl0ZW06aG92ZXI6bm90KFtkaXNhYmxlZF0pLC5tYXQtbWVudS1pdGVtLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KFtkaXNhYmxlZF0pLC5tYXQtbWVudS1pdGVtLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdChbZGlzYWJsZWRdKSwubWF0LW1lbnUtaXRlbS1oaWdobGlnaHRlZDpub3QoW2Rpc2FibGVkXSl7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1wYWdpbmF0b3J7YmFja2dyb3VuZDojZmZmfS5tYXQtcGFnaW5hdG9yLC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZSAubWF0LXNlbGVjdC10cmlnZ2Vye2NvbG9yOiM2MTYxNjF9Lm1hdC1wYWdpbmF0b3ItZGVjcmVtZW50LC5tYXQtcGFnaW5hdG9yLWluY3JlbWVudHtib3JkZXItdG9wOjJweCBzb2xpZCByZ2JhKDAsMCwwLC41NCk7Ym9yZGVyLXJpZ2h0OjJweCBzb2xpZCByZ2JhKDAsMCwwLC41NCl9Lm1hdC1wYWdpbmF0b3ItZmlyc3QsLm1hdC1wYWdpbmF0b3ItbGFzdHtib3JkZXItdG9wOjJweCBzb2xpZCByZ2JhKDAsMCwwLC41NCl9Lm1hdC1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1wYWdpbmF0b3ItZGVjcmVtZW50LC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtcGFnaW5hdG9yLWluY3JlbWVudCwubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LXBhZ2luYXRvci1maXJzdCwubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LXBhZ2luYXRvci1sYXN0e2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1wYWdpbmF0b3ItY29udGFpbmVye21pbi1oZWlnaHQ6NTZweH0ubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5ke2ZpbGw6I2ZmYTcyNn0ubWF0LXByb2dyZXNzLWJhci1idWZmZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZhNzI2fS5tYXQtcHJvZ3Jlc3MtYmFyLWZpbGw6OmFmdGVye2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMH0ubWF0LXByb2dyZXNzLWJhci5tYXQtYWNjZW50IC5tYXQtcHJvZ3Jlc3MtYmFyLWJhY2tncm91bmR7ZmlsbDojZmZlMGIyfS5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC1hY2NlbnQgLm1hdC1wcm9ncmVzcy1iYXItYnVmZmVye2JhY2tncm91bmQtY29sb3I6I2ZmZTBiMn0ubWF0LXByb2dyZXNzLWJhci5tYXQtYWNjZW50IC5tYXQtcHJvZ3Jlc3MtYmFyLWZpbGw6OmFmdGVye2JhY2tncm91bmQtY29sb3I6I2ZmOTgwMH0ubWF0LXByb2dyZXNzLWJhci5tYXQtd2FybiAubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5ke2ZpbGw6I2ZmY2RkMn0ubWF0LXByb2dyZXNzLWJhci5tYXQtd2FybiAubWF0LXByb2dyZXNzLWJhci1idWZmZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZjZGQyfS5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC13YXJuIC5tYXQtcHJvZ3Jlc3MtYmFyLWZpbGw6OmFmdGVye2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn0ubWF0LXByb2dyZXNzLXNwaW5uZXIgY2lyY2xlLC5tYXQtc3Bpbm5lciBjaXJjbGV7c3Ryb2tlOiNmNTdjMDB9Lm1hdC1wcm9ncmVzcy1zcGlubmVyLm1hdC1hY2NlbnQgY2lyY2xlLC5tYXQtc3Bpbm5lci5tYXQtYWNjZW50IGNpcmNsZXtzdHJva2U6I2ZmOTgwMH0ubWF0LXByb2dyZXNzLXNwaW5uZXIubWF0LXdhcm4gY2lyY2xlLC5tYXQtc3Bpbm5lci5tYXQtd2FybiBjaXJjbGV7c3Ryb2tlOiNmNDQzMzZ9Lm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOiM2MTYxNjF9Lm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnkubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOiNmNTdjMDB9Lm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1yYWRpby1pbm5lci1jaXJjbGUsLm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudDpub3QoLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSksLm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnkubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSwubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeTphY3RpdmUgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Lm1hdC1yYWRpby1idXR0b24ubWF0LWFjY2VudC5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6I2ZmOTgwMH0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtcmFkaW8taW5uZXItY2lyY2xlLC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudDpub3QoLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSksLm1hdC1yYWRpby1idXR0b24ubWF0LWFjY2VudC5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlLC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnQ6YWN0aXZlIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwfS5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuLm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xle2JvcmRlci1jb2xvcjojZjQ0MzM2fS5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuIC5tYXQtcmFkaW8taW5uZXItY2lyY2xlLC5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuIC5tYXQtcmFkaW8tcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnQ6bm90KC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGUpLC5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuLm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGUsLm1hdC1yYWRpby1idXR0b24ubWF0LXdhcm46YWN0aXZlIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtcmFkaW8tYnV0dG9uLm1hdC1yYWRpby1kaXNhYmxlZC5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZSwubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcmFkaW8tZGlzYWJsZWQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcmFkaW8tZGlzYWJsZWQgLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcmFkaW8tZGlzYWJsZWQgLm1hdC1yYWRpby1pbm5lci1jaXJjbGV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1yYWRpby1idXR0b24ubWF0LXJhZGlvLWRpc2FibGVkIC5tYXQtcmFkaW8tbGFiZWwtY29udGVudHtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1yYWRpby1idXR0b24gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiMwMDB9Lm1hdC1zZWxlY3QtdmFsdWV7Y29sb3I6IzIxMjEyMX0ubWF0LXNlbGVjdC1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDk3LDk3LDk3LC40Mil9Lm1hdC1zZWxlY3QtZGlzYWJsZWQgLm1hdC1zZWxlY3QtdmFsdWV7Y29sb3I6Izc1NzU3NX0ubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojNjE2MTYxfS5tYXQtc2VsZWN0LXBhbmVse2JhY2tncm91bmQ6I2ZmZn0ubWF0LXNlbGVjdC1wYW5lbDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA0cHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LXNlbGVjdC1wYW5lbCAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLW11bHRpcGxlKXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQubWF0LXByaW1hcnkgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6I2Y1N2MwMH0ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQubWF0LWFjY2VudCAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojZmY5ODAwfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZC5tYXQtd2FybiAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZCAubWF0LXNlbGVjdC5tYXQtc2VsZWN0LWludmFsaWQgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6I2Y0NDMzNn0ubWF0LWZvcm0tZmllbGQgLm1hdC1zZWxlY3QubWF0LXNlbGVjdC1kaXNhYmxlZCAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojNzU3NTc1fS5tYXQtZHJhd2VyLWNvbnRhaW5lcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWRyYXdlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWRyYXdlci5tYXQtZHJhd2VyLXB1c2h7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tYXQtZHJhd2VyOm5vdCgubWF0LWRyYXdlci1zaWRlKXtib3gtc2hhZG93OjBweCA4cHggMTBweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMTZweCAyNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA2cHggMzBweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWRyYXdlci1zaWRle2JvcmRlci1yaWdodDpzb2xpZCAxcHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZHJhd2VyLXNpZGUubWF0LWRyYXdlci1lbmR7Ym9yZGVyLWxlZnQ6c29saWQgMXB4IHJnYmEoMCwwLDAsLjEyKTtib3JkZXItcmlnaHQ6bm9uZX1bZGlyPXJ0bF0gLm1hdC1kcmF3ZXItc2lkZXtib3JkZXItbGVmdDpzb2xpZCAxcHggcmdiYSgwLDAsMCwuMTIpO2JvcmRlci1yaWdodDpub25lfVtkaXI9cnRsXSAubWF0LWRyYXdlci1zaWRlLm1hdC1kcmF3ZXItZW5ke2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLXJpZ2h0OnNvbGlkIDFweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1kcmF3ZXItYmFja2Ryb3AubWF0LWRyYXdlci1zaG93bntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjYpfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1ie2JhY2tncm91bmQtY29sb3I6I2ZmOTgwMH0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtY2hlY2tlZCAubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxNTIsMCwuNTQpfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1jaGVja2VkIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1wcmltYXJ5Lm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1ie2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMH0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtcHJpbWFyeS5tYXQtY2hlY2tlZCAubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NSwxMjQsMCwuNTQpfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1wcmltYXJ5Lm1hdC1jaGVja2VkIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC13YXJuLm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1ie2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtd2Fybi5tYXQtY2hlY2tlZCAubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuNTQpfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC13YXJuLm1hdC1jaGVja2VkIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtc2xpZGUtdG9nZ2xlOm5vdCgubWF0LWNoZWNrZWQpIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojMDAwfS5tYXQtc2xpZGUtdG9nZ2xlLXRodW1ie2JveC1zaGFkb3c6MHB4IDJweCAxcHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDFweCAxcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAzcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMik7YmFja2dyb3VuZC1jb2xvcjojZmFmYWZhfS5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtcHJpbWFyeSAubWF0LXNsaWRlci10cmFjay1maWxsLC5tYXQtcHJpbWFyeSAubWF0LXNsaWRlci10aHVtYiwubWF0LXByaW1hcnkgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfS5tYXQtcHJpbWFyeSAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e2NvbG9yOiNmZmZ9Lm1hdC1wcmltYXJ5IC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NSwxMjQsMCwuMil9Lm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdHJhY2stZmlsbCwubWF0LWFjY2VudCAubWF0LXNsaWRlci10aHVtYiwubWF0LWFjY2VudCAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDB9Lm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dHtjb2xvcjojZmZmfS5tYXQtYWNjZW50IC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxNTIsMCwuMil9Lm1hdC13YXJuIC5tYXQtc2xpZGVyLXRyYWNrLWZpbGwsLm1hdC13YXJuIC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtd2FybiAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC13YXJuIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7Y29sb3I6I2ZmZn0ubWF0LXdhcm4gLm1hdC1zbGlkZXItZm9jdXMtcmluZ3tiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC4yKX0ubWF0LXNsaWRlcjpob3ZlciAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5kLC5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmQsLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdHJhY2stZmlsbCwubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjI2KX0ubWF0LXNsaWRlci1kaXNhYmxlZDpob3ZlciAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtc2xpZGVyLW1pbi12YWx1ZSAubWF0LXNsaWRlci1mb2N1cy1yaW5ne2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtc2xpZGVyLW1pbi12YWx1ZS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXItbWluLXZhbHVlLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LXNsaWRlci1taW4tdmFsdWUubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtc2xpZGVyLW1pbi12YWx1ZS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1zbGlkZXItbWluLXZhbHVlOm5vdCgubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nKSAubWF0LXNsaWRlci10aHVtYntib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMjYpO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9Lm1hdC1zbGlkZXItbWluLXZhbHVlOm5vdCgubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nKTpob3ZlciAubWF0LXNsaWRlci10aHVtYiwubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1ie2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1zbGlkZXItbWluLXZhbHVlOm5vdCgubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nKTpob3Zlci5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtc2xpZGVyLW1pbi12YWx1ZTpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZykuY2RrLWZvY3VzZWQubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10aHVtYntib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtc2xpZGVyLWhhcy10aWNrcyAubWF0LXNsaWRlci13cmFwcGVyOjphZnRlcntib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuNyl9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10aWNrc3tiYWNrZ3JvdW5kLWltYWdlOnJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMCwgMCwgMCwgMC43KSwgcmdiYSgwLCAwLCAwLCAwLjcpIDJweCwgdHJhbnNwYXJlbnQgMCwgdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6LW1vei1yZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KDAuMDAwMWRlZywgcmdiYSgwLCAwLCAwLCAwLjcpLCByZ2JhKDAsIDAsIDAsIDAuNykgMnB4LCB0cmFuc3BhcmVudCAwLCB0cmFuc3BhcmVudCl9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdGlja3N7YmFja2dyb3VuZC1pbWFnZTpyZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgcmdiYSgwLCAwLCAwLCAwLjcpLCByZ2JhKDAsIDAsIDAsIDAuNykgMnB4LCB0cmFuc3BhcmVudCAwLCB0cmFuc3BhcmVudCl9Lm1hdC1zdGVwLWhlYWRlci5jZGsta2V5Ym9hcmQtZm9jdXNlZCwubWF0LXN0ZXAtaGVhZGVyLmNkay1wcm9ncmFtLWZvY3VzZWQsLm1hdC1zdGVwLWhlYWRlcjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjA0KX1AbWVkaWEoaG92ZXI6IG5vbmUpey5tYXQtc3RlcC1oZWFkZXI6aG92ZXJ7YmFja2dyb3VuZDpub25lfX0ubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1sYWJlbCwubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1vcHRpb25hbHtjb2xvcjojNjE2MTYxfS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb257YmFja2dyb3VuZC1jb2xvcjojNjE2MTYxO2NvbG9yOiNmZmZ9Lm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbi1zZWxlY3RlZCwubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1pY29uLXN0YXRlLWRvbmUsLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1lZGl0e2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMDtjb2xvcjojZmZmfS5tYXQtc3RlcC1oZWFkZXIubWF0LWFjY2VudCAubWF0LXN0ZXAtaWNvbntjb2xvcjojZmZmfS5tYXQtc3RlcC1oZWFkZXIubWF0LWFjY2VudCAubWF0LXN0ZXAtaWNvbi1zZWxlY3RlZCwubWF0LXN0ZXAtaGVhZGVyLm1hdC1hY2NlbnQgLm1hdC1zdGVwLWljb24tc3RhdGUtZG9uZSwubWF0LXN0ZXAtaGVhZGVyLm1hdC1hY2NlbnQgLm1hdC1zdGVwLWljb24tc3RhdGUtZWRpdHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDA7Y29sb3I6I2ZmZn0ubWF0LXN0ZXAtaGVhZGVyLm1hdC13YXJuIC5tYXQtc3RlcC1pY29ue2NvbG9yOiNmZmZ9Lm1hdC1zdGVwLWhlYWRlci5tYXQtd2FybiAubWF0LXN0ZXAtaWNvbi1zZWxlY3RlZCwubWF0LXN0ZXAtaGVhZGVyLm1hdC13YXJuIC5tYXQtc3RlcC1pY29uLXN0YXRlLWRvbmUsLm1hdC1zdGVwLWhlYWRlci5tYXQtd2FybiAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1lZGl0e2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNjtjb2xvcjojZmZmfS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb24tc3RhdGUtZXJyb3J7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtjb2xvcjojZjQ0MzM2fS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWxhYmVsLm1hdC1zdGVwLWxhYmVsLWFjdGl2ZXtjb2xvcjojMjEyMTIxfS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWxhYmVsLm1hdC1zdGVwLWxhYmVsLWVycm9ye2NvbG9yOiNmNDQzMzZ9Lm1hdC1zdGVwcGVyLWhvcml6b250YWwsLm1hdC1zdGVwcGVyLXZlcnRpY2Fse2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubWF0LXN0ZXBwZXItdmVydGljYWwtbGluZTo6YmVmb3Jle2JvcmRlci1sZWZ0LWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXI6OmJlZm9yZSwubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXI6OmFmdGVyLC5tYXQtc3RlcHBlci1ob3Jpem9udGFsLWxpbmV7Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVye2hlaWdodDo3MnB4fS5tYXQtc3RlcHBlci1sYWJlbC1wb3NpdGlvbi1ib3R0b20gLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyLC5tYXQtdmVydGljYWwtc3RlcHBlci1oZWFkZXJ7cGFkZGluZzoyNHB4IDI0cHh9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsLWxpbmU6OmJlZm9yZXt0b3A6LTE2cHg7Ym90dG9tOi0xNnB4fS5tYXQtc3RlcHBlci1sYWJlbC1wb3NpdGlvbi1ib3R0b20gLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyOjphZnRlciwubWF0LXN0ZXBwZXItbGFiZWwtcG9zaXRpb24tYm90dG9tIC5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlcjo6YmVmb3Jle3RvcDozNnB4fS5tYXQtc3RlcHBlci1sYWJlbC1wb3NpdGlvbi1ib3R0b20gLm1hdC1zdGVwcGVyLWhvcml6b250YWwtbGluZXt0b3A6MzZweH0ubWF0LXNvcnQtaGVhZGVyLWFycm93e2NvbG9yOiM2MTYxNjF9Lm1hdC10YWItbmF2LWJhciwubWF0LXRhYi1oZWFkZXJ7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgcmdiYSgwLDAsMCwuMTIpfS5tYXQtdGFiLWdyb3VwLWludmVydGVkLWhlYWRlciAubWF0LXRhYi1uYXYtYmFyLC5tYXQtdGFiLWdyb3VwLWludmVydGVkLWhlYWRlciAubWF0LXRhYi1oZWFkZXJ7Ym9yZGVyLXRvcDoxcHggc29saWQgcmdiYSgwLDAsMCwuMTIpO2JvcmRlci1ib3R0b206bm9uZX0ubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1saW5re2NvbG9yOiMyMTIxMjF9Lm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7Y29sb3I6Izc1NzU3NX0ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjojMjEyMTIxfS5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOiM3NTc1NzV9Lm1hdC10YWItZ3JvdXBbY2xhc3MqPW1hdC1iYWNrZ3JvdW5kLV0gLm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLW5hdi1iYXJbY2xhc3MqPW1hdC1iYWNrZ3JvdW5kLV17Ym9yZGVyLWJvdHRvbTpub25lO2JvcmRlci10b3A6bm9uZX0ubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxNjcsMzgsLjMpfS5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Lm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5Lm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyMjQsMTc4LC4zKX0ubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2ZmOTgwMH0ubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50Lm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LWluay1iYXIsLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50Lm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDIwNSwyMTAsLjMpfS5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC10YWItZ3JvdXAubWF0LXdhcm4ubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4ubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4ubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxNjcsMzgsLjMpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb257YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluaywubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5re2NvbG9yOiNmZmZ9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC40KX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rcyAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmtzIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3Jle2JvcmRlci1jb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjI0LDE3OCwuMyl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbntiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDB9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluaywubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGlua3tjb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC40KX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGlua3MgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rcyAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3Jle2JvcmRlci1jb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjQpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyMDUsMjEwLC4zKX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9ue2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmssLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGlua3tjb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGlua3MgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rcyAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXtib3JkZXItY29sb3I6I2ZmZn0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjQpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX0ubWF0LXRvb2xiYXJ7YmFja2dyb3VuZDojZjU3YzAwO2NvbG9yOiMyMTIxMjF9Lm1hdC10b29sYmFyLm1hdC1wcmltYXJ5e2JhY2tncm91bmQ6I2Y1N2MwMDtjb2xvcjojZmZmfS5tYXQtdG9vbGJhci5tYXQtYWNjZW50e2JhY2tncm91bmQ6I2ZmOTgwMDtjb2xvcjojZmZmfS5tYXQtdG9vbGJhci5tYXQtd2FybntiYWNrZ3JvdW5kOiNmNDQzMzY7Y29sb3I6I2ZmZn0ubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSwubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZSwubWF0LXRvb2xiYXIgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3J9Lm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LXRvb2xiYXIgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LXRvb2xiYXIgLm1hdC1zZWxlY3QtdmFsdWUsLm1hdC10b29sYmFyIC5tYXQtc2VsZWN0LWFycm93LC5tYXQtdG9vbGJhciAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6aW5oZXJpdH0ubWF0LXRvb2xiYXIgLm1hdC1pbnB1dC1lbGVtZW50e2NhcmV0LWNvbG9yOmN1cnJlbnRDb2xvcn0ubWF0LXRvb2xiYXItbXVsdGlwbGUtcm93c3ttaW4taGVpZ2h0OjY0cHh9Lm1hdC10b29sYmFyLXJvdywubWF0LXRvb2xiYXItc2luZ2xlLXJvd3toZWlnaHQ6NjRweH1AbWVkaWEobWF4LXdpZHRoOiA1OTlweCl7Lm1hdC10b29sYmFyLW11bHRpcGxlLXJvd3N7bWluLWhlaWdodDo1NnB4fS5tYXQtdG9vbGJhci1yb3csLm1hdC10b29sYmFyLXNpbmdsZS1yb3d7aGVpZ2h0OjU2cHh9fS5tYXQtdG9vbHRpcHtiYWNrZ3JvdW5kOnJnYmEoOTcsOTcsOTcsLjkpfS5tYXQtdHJlZXtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC10cmVlLW5vZGUsLm1hdC1uZXN0ZWQtdHJlZS1ub2Rle2NvbG9yOiMyMTIxMjF9Lm1hdC10cmVlLW5vZGV7bWluLWhlaWdodDo0OHB4fS5tYXQtc25hY2stYmFyLWNvbnRhaW5lcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KTtiYWNrZ3JvdW5kOiMzMjMyMzI7Ym94LXNoYWRvdzowcHggM3B4IDVweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNnB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAxOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbntjb2xvcjojZmY5ODAwfWE6bm90KC5tYXQtYnV0dG9uLC5tYXQtaWNvbi1idXR0b24pe2NvbG9yOiMxOTc2ZDJ9YTpub3QoLm1hdC1idXR0b24sLm1hdC1pY29uLWJ1dHRvbik6dmlzaXRlZHtjb2xvcjojN2IxZmEyfWJvZHkuZGFyay1tb2Rle2JhY2tncm91bmQtY29sb3I6IzMwMzAzMH1ib2R5LmRhcmstbW9kZSBhOm5vdCgubWF0LWJ1dHRvbiwubWF0LWljb24tYnV0dG9uKXtjb2xvcjojNDJhNWY1fWJvZHkuZGFyay1tb2RlIGE6bm90KC5tYXQtYnV0dG9uLC5tYXQtaWNvbi1idXR0b24pOnZpc2l0ZWR7Y29sb3I6I2JhNjhjOH1ib2R5LmRhcmstbW9kZSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1vcHRpb257Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LW9wdGlvbjpob3Zlcjpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtb3B0aW9uOmZvY3VzOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4wNCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1tdWx0aXBsZSk6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjA0KX1ib2R5LmRhcmstbW9kZSAubWF0LW9wdGlvbi5tYXQtYWN0aXZle2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMDQpO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1vcHRpb24ubWF0LW9wdGlvbi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LXByaW1hcnkgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWFjY2VudCAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtd2FybiAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtb3B0Z3JvdXAtbGFiZWx7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1vcHRncm91cC1kaXNhYmxlZCAubWF0LW9wdGdyb3VwLWxhYmVse2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtcHNldWRvLWNoZWNrYm94e2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtcHNldWRvLWNoZWNrYm94OjphZnRlcntjb2xvcjojMzAzMDMwfWJvZHkuZGFyay1tb2RlIC5tYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVke2NvbG9yOiM2ODY4Njh9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcmltYXJ5IC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1wcmltYXJ5IC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGV7YmFja2dyb3VuZDojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSxib2R5LmRhcmstbW9kZSAubWF0LWFjY2VudCAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtYWNjZW50IC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGV7YmFja2dyb3VuZDojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtd2FybiAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtd2FybiAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRle2JhY2tncm91bmQ6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVke2JhY2tncm91bmQ6IzY4Njg2OH1ib2R5LmRhcmstbW9kZSAubWF0LWFwcC1iYWNrZ3JvdW5kLGJvZHkuZGFyay1tb2RlLm1hdC1hcHAtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzA7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MHtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejF7Ym94LXNoYWRvdzowcHggMnB4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMXB4IDFweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16Mntib3gtc2hhZG93OjBweCAzcHggMXB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAycHggMnB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoze2JveC1zaGFkb3c6MHB4IDNweCAzcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDNweCA0cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCA4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejR7Ym94LXNoYWRvdzowcHggMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNHB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejV7Ym94LXNoYWRvdzowcHggM3B4IDVweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNXB4IDhweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDE0cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejZ7Ym94LXNoYWRvdzowcHggM3B4IDVweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNnB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAxOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXo3e2JveC1zaGFkb3c6MHB4IDRweCA1cHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDdweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAycHggMTZweCAxcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16OHtib3gtc2hhZG93OjBweCA1cHggNXB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA4cHggMTBweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggM3B4IDE0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejl7Ym94LXNoYWRvdzowcHggNXB4IDZweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggOXB4IDEycHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDNweCAxNnB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoxMHtib3gtc2hhZG93OjBweCA2cHggNnB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxMHB4IDE0cHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDRweCAxOHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoxMXtib3gtc2hhZG93OjBweCA2cHggN3B4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxMXB4IDE1cHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDRweCAyMHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoxMntib3gtc2hhZG93OjBweCA3cHggOHB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxMnB4IDE3cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDVweCAyMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoxM3tib3gtc2hhZG93OjBweCA3cHggOHB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxM3B4IDE5cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDVweCAyNHB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoxNHtib3gtc2hhZG93OjBweCA3cHggOXB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxNHB4IDIxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDVweCAyNnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoxNXtib3gtc2hhZG93OjBweCA4cHggOXB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxNXB4IDIycHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDZweCAyOHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoxNntib3gtc2hhZG93OjBweCA4cHggMTBweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMTZweCAyNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA2cHggMzBweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MTd7Ym94LXNoYWRvdzowcHggOHB4IDExcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDE3cHggMjZweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggNnB4IDMycHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejE4e2JveC1zaGFkb3c6MHB4IDlweCAxMXB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxOHB4IDI4cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDdweCAzNHB4IDZweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoxOXtib3gtc2hhZG93OjBweCA5cHggMTJweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMTlweCAyOXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA3cHggMzZweCA2cHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MjB7Ym94LXNoYWRvdzowcHggMTBweCAxM3B4IC02cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAyMHB4IDMxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDhweCAzOHB4IDdweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoyMXtib3gtc2hhZG93OjBweCAxMHB4IDEzcHggLTZweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDIxcHggMzNweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggOHB4IDQwcHggN3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejIye2JveC1zaGFkb3c6MHB4IDEwcHggMTRweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMjJweCAzNXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA4cHggNDJweCA3cHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MjN7Ym94LXNoYWRvdzowcHggMTFweCAxNHB4IC03cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAyM3B4IDM2cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDlweCA0NHB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoyNHtib3gtc2hhZG93OjBweCAxMXB4IDE1cHggLTdweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDI0cHggMzhweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggOXB4IDQ2cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC10aGVtZS1sb2FkZWQtbWFya2Vye2Rpc3BsYXk6bm9uZX1ib2R5LmRhcmstbW9kZSAubWF0LWF1dG9jb21wbGV0ZS1wYW5lbHtiYWNrZ3JvdW5kOiM0MjQyNDI7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWF1dG9jb21wbGV0ZS1wYW5lbDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA0cHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWF1dG9jb21wbGV0ZS1wYW5lbCAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtYWN0aXZlKTpub3QoOmhvdmVyKXtiYWNrZ3JvdW5kOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1hdXRvY29tcGxldGUtcGFuZWwgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LWFjdGl2ZSk6bm90KDpob3Zlcik6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtYmFkZ2UtY29udGVudHtjb2xvcjojZmZmO2JhY2tncm91bmQ6I2VmNmMwMH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIGJvZHkuZGFyay1tb2RlIC5tYXQtYmFkZ2UtY29udGVudHtvdXRsaW5lOnNvbGlkIDFweDtib3JkZXItcmFkaXVzOjB9Ym9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS1hY2NlbnQgLm1hdC1iYWRnZS1jb250ZW50e2JhY2tncm91bmQ6I2VmNmMwMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtYmFkZ2Utd2FybiAubWF0LWJhZGdlLWNvbnRlbnR7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZXtwb3NpdGlvbjpyZWxhdGl2ZX1ib2R5LmRhcmstbW9kZSAubWF0LWJhZGdlLWhpZGRlbiAubWF0LWJhZGdlLWNvbnRlbnR7ZGlzcGxheTpub25lfWJvZHkuZGFyay1tb2RlIC5tYXQtYmFkZ2UtZGlzYWJsZWQgLm1hdC1iYWRnZS1jb250ZW50e2JhY2tncm91bmQ6IzZlNmU2ZTtjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlIC5tYXQtYmFkZ2UtY29udGVudHtwb3NpdGlvbjphYnNvbHV0ZTt0ZXh0LWFsaWduOmNlbnRlcjtkaXNwbGF5OmlubGluZS1ibG9jaztib3JkZXItcmFkaXVzOjUwJTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAyMDBtcyBlYXNlLWluLW91dDt0cmFuc2Zvcm06c2NhbGUoMC42KTtvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7cG9pbnRlci1ldmVudHM6bm9uZX1ib2R5LmRhcmstbW9kZSAubmctYW5pbWF0ZS1kaXNhYmxlZCAubWF0LWJhZGdlLWNvbnRlbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS1jb250ZW50Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxle3RyYW5zaXRpb246bm9uZX1ib2R5LmRhcmstbW9kZSAubWF0LWJhZGdlLWNvbnRlbnQubWF0LWJhZGdlLWFjdGl2ZXt0cmFuc2Zvcm06bm9uZX1ib2R5LmRhcmstbW9kZSAubWF0LWJhZGdlLXNtYWxsIC5tYXQtYmFkZ2UtY29udGVudHt3aWR0aDoxNnB4O2hlaWdodDoxNnB4O2xpbmUtaGVpZ2h0OjE2cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYWJvdmUgLm1hdC1iYWRnZS1jb250ZW50e3RvcDotOHB4fWJvZHkuZGFyay1tb2RlIC5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWJlbG93IC5tYXQtYmFkZ2UtY29udGVudHtib3R0b206LThweH1ib2R5LmRhcmstbW9kZSAubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6LTE2cHh9W2Rpcj1ydGxdIGJvZHkuZGFyay1tb2RlIC5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDphdXRvO3JpZ2h0Oi0xNnB4fWJvZHkuZGFyay1tb2RlIC5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDotMTZweH1bZGlyPXJ0bF0gYm9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0OmF1dG87bGVmdDotMTZweH1ib2R5LmRhcmstbW9kZSAubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6LThweH1bZGlyPXJ0bF0gYm9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0OmF1dG87cmlnaHQ6LThweH1ib2R5LmRhcmstbW9kZSAubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6LThweH1bZGlyPXJ0bF0gYm9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0OmF1dG87bGVmdDotOHB4fWJvZHkuZGFyay1tb2RlIC5tYXQtYmFkZ2UtbWVkaXVtIC5tYXQtYmFkZ2UtY29udGVudHt3aWR0aDoyMnB4O2hlaWdodDoyMnB4O2xpbmUtaGVpZ2h0OjIycHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWFib3ZlIC5tYXQtYmFkZ2UtY29udGVudHt0b3A6LTExcHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWJlbG93IC5tYXQtYmFkZ2UtY29udGVudHtib3R0b206LTExcHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDotMjJweH1bZGlyPXJ0bF0gYm9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDphdXRvO3JpZ2h0Oi0yMnB4fWJvZHkuZGFyay1tb2RlIC5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6LTIycHh9W2Rpcj1ydGxdIGJvZHkuZGFyay1tb2RlIC5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6YXV0bztsZWZ0Oi0yMnB4fWJvZHkuZGFyay1tb2RlIC5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6LTExcHh9W2Rpcj1ydGxdIGJvZHkuZGFyay1tb2RlIC5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6YXV0bztyaWdodDotMTFweH1ib2R5LmRhcmstbW9kZSAubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi0xMXB4fVtkaXI9cnRsXSBib2R5LmRhcmstbW9kZSAubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0OmF1dG87bGVmdDotMTFweH1ib2R5LmRhcmstbW9kZSAubWF0LWJhZGdlLWxhcmdlIC5tYXQtYmFkZ2UtY29udGVudHt3aWR0aDoyOHB4O2hlaWdodDoyOHB4O2xpbmUtaGVpZ2h0OjI4cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYWJvdmUgLm1hdC1iYWRnZS1jb250ZW50e3RvcDotMTRweH1ib2R5LmRhcmstbW9kZSAubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1iZWxvdyAubWF0LWJhZGdlLWNvbnRlbnR7Ym90dG9tOi0xNHB4fWJvZHkuZGFyay1tb2RlIC5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDotMjhweH1bZGlyPXJ0bF0gYm9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0OmF1dG87cmlnaHQ6LTI4cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi0yOHB4fVtkaXI9cnRsXSBib2R5LmRhcmstbW9kZSAubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6YXV0bztsZWZ0Oi0yOHB4fWJvZHkuZGFyay1tb2RlIC5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDotMTRweH1bZGlyPXJ0bF0gYm9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0OmF1dG87cmlnaHQ6LTE0cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi0xNHB4fVtkaXI9cnRsXSBib2R5LmRhcmstbW9kZSAubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6YXV0bztsZWZ0Oi0xNHB4fWJvZHkuZGFyay1tb2RlIC5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcntib3gtc2hhZG93OjBweCA4cHggMTBweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMTZweCAyNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA2cHggMzBweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKTtiYWNrZ3JvdW5kOiM0MjQyNDI7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbixib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uLGJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b257Y29sb3I6aW5oZXJpdDtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50fWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLm1hdC1wcmltYXJ5LGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b24ubWF0LXByaW1hcnksYm9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtcHJpbWFyeXtjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLm1hdC1hY2NlbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbi5tYXQtYWNjZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWFjY2VudHtjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLm1hdC13YXJuLGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b24ubWF0LXdhcm4sYm9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtd2Fybntjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSxib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSxib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSxib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24ubWF0LXdhcm4gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSxib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uLm1hdC13YXJuIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksYm9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtd2FybiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksYm9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbiAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b24gLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9uIC5tYXQtcmlwcGxlLWVsZW1lbnR7b3BhY2l0eTouMTtiYWNrZ3JvdW5kLWNvbG9yOmN1cnJlbnRDb2xvcn1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQ6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9uOm5vdCgubWF0LWJ1dHRvbi1kaXNhYmxlZCl7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbixib2R5LmRhcmstbW9kZSAubWF0LWZhYixib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFie2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojNDI0MjQyfWJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnksYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5LGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC1wcmltYXJ5LGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LXByaW1hcnl7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LWFjY2VudCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC1hY2NlbnR7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC13YXJuLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtd2Fybixib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtd2Fybixib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC13YXJue2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC1wcmltYXJ5LGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeSxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtcHJpbWFyeSxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC1wcmltYXJ5e2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LWFjY2VudCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm4sYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC13YXJuLGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC13YXJuLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LXdhcm57YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9uOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pLGJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b246bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAzcHggMXB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAycHggMnB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpOmFjdGl2ZTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCA1cHggNXB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA4cHggMTBweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggM3B4IDE0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQ6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZmFiOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWI6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggM3B4IDVweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNnB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAxOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZmFiOm5vdCgubWF0LWJ1dHRvbi1kaXNhYmxlZCk6YWN0aXZlOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKTphY3RpdmU6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggN3B4IDhweCAtNHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMTJweCAxN3B4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA1cHggMjJweCA0cHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LWJ1dHRvbi1kaXNhYmxlZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUsYm9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWdyb3Vwe2JveC1zaGFkb3c6MHB4IDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDJweCAycHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCxib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZHtib3gtc2hhZG93Om5vbmV9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xle2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZSAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZHtjb2xvcjojZmZmO2JhY2tncm91bmQ6IzQyNDI0Mn1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlKy5tYXQtYnV0dG9uLXRvZ2dsZXtib3JkZXItbGVmdDpzb2xpZCAxcHggcmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIFtkaXI9cnRsXSAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWJ1dHRvbi10b2dnbGUrLm1hdC1idXR0b24tdG9nZ2xle2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLXJpZ2h0OnNvbGlkIDFweCByZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQubWF0LWJ1dHRvbi10b2dnbGUtdmVydGljYWwgLm1hdC1idXR0b24tdG9nZ2xlKy5tYXQtYnV0dG9uLXRvZ2dsZXtib3JkZXItbGVmdDpub25lO2JvcmRlci1yaWdodDpub25lO2JvcmRlci10b3A6c29saWQgMXB4IHJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZHtiYWNrZ3JvdW5kLWNvbG9yOiMyMTIxMjE7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWQubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZHtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKTtiYWNrZ3JvdW5kLWNvbG9yOiMwMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVkLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmR7YmFja2dyb3VuZDojNDI0MjQyfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZC5tYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2Vke2JhY2tncm91bmQtY29sb3I6IzQyNDI0Mn1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkLGJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJke2JvcmRlcjpzb2xpZCAxcHggcmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FyZHtiYWNrZ3JvdW5kOiM0MjQyNDI7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWNhcmQ6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggMnB4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMXB4IDFweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWNhcmQubWF0LWNhcmQtZmxhdDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYXJkLXN1YnRpdGxle2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtZnJhbWV7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJre2ZpbGw6IzMwMzAzMH1ib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWNoZWNrbWFyay1wYXRoe3N0cm9rZTojMzAzMDMwICFpbXBvcnRhbnR9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1taXhlZG1hcmt7YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHJpbWFyeSAubWF0LWNoZWNrYm94LWJhY2tncm91bmQsYm9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1jaGVja2VkLm1hdC1wcmltYXJ5IC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1hY2NlbnQgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLGJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtY2hlY2tlZC5tYXQtYWNjZW50IC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC13YXJuIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCxib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWNoZWNrZWQubWF0LXdhcm4gLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWRpc2FibGVkLm1hdC1jaGVja2JveC1jaGVja2VkIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCxib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWRpc2FibGVkLm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiM2ODY4Njh9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1kaXNhYmxlZDpub3QoLm1hdC1jaGVja2JveC1jaGVja2VkKSAubWF0LWNoZWNrYm94LWZyYW1le2JvcmRlci1jb2xvcjojNjg2ODY4fWJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtZGlzYWJsZWQgLm1hdC1jaGVja2JveC1sYWJlbHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtY2hlY2tlZDpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94OmFjdGl2ZTpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1jaGVja2VkOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveDphY3RpdmU6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1jaGVja2VkOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3g6YWN0aXZlOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQ6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXB7YmFja2dyb3VuZC1jb2xvcjojNjE2MTYxO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwIC5tYXQtY2hpcC1yZW1vdmV7Y29sb3I6I2ZmZjtvcGFjaXR5Oi40fWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcDpub3QoLm1hdC1jaGlwLWRpc2FibGVkKTphY3RpdmV7Ym94LXNoYWRvdzowcHggM3B4IDNweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggM3B4IDRweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDhweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXA6bm90KC5tYXQtY2hpcC1kaXNhYmxlZCkgLm1hdC1jaGlwLXJlbW92ZTpob3ZlcntvcGFjaXR5Oi41NH1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtZGlzYWJsZWR7b3BhY2l0eTouNH1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXA6OmFmdGVye2JhY2tncm91bmQ6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1wcmltYXJ5IC5tYXQtY2hpcC1yZW1vdmV7Y29sb3I6I2ZmZjtvcGFjaXR5Oi40fWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC13YXJue2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNjtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtd2FybiAubWF0LWNoaXAtcmVtb3Zle2NvbG9yOiNmZmY7b3BhY2l0eTouNH1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtYWNjZW50e2JhY2tncm91bmQtY29sb3I6I2VmNmMwMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtYWNjZW50IC5tYXQtY2hpcC1yZW1vdmV7Y29sb3I6I2ZmZjtvcGFjaXR5Oi40fWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYmxle2JhY2tncm91bmQ6IzQyNDI0Mn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYmxlIHRoZWFkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFibGUgdGJvZHksYm9keS5kYXJrLW1vZGUgLm1hdC10YWJsZSB0Zm9vdCxib2R5LmRhcmstbW9kZSBtYXQtaGVhZGVyLXJvdyxib2R5LmRhcmstbW9kZSBtYXQtcm93LGJvZHkuZGFyay1tb2RlIG1hdC1mb290ZXItcm93LGJvZHkuZGFyay1tb2RlIFttYXQtaGVhZGVyLXJvd10sYm9keS5kYXJrLW1vZGUgW21hdC1yb3ddLGJvZHkuZGFyay1tb2RlIFttYXQtZm9vdGVyLXJvd10sYm9keS5kYXJrLW1vZGUgLm1hdC10YWJsZS1zdGlja3l7YmFja2dyb3VuZDppbmhlcml0fWJvZHkuZGFyay1tb2RlIG1hdC1yb3csYm9keS5kYXJrLW1vZGUgbWF0LWhlYWRlci1yb3csYm9keS5kYXJrLW1vZGUgbWF0LWZvb3Rlci1yb3csYm9keS5kYXJrLW1vZGUgdGgubWF0LWhlYWRlci1jZWxsLGJvZHkuZGFyay1tb2RlIHRkLm1hdC1jZWxsLGJvZHkuZGFyay1tb2RlIHRkLm1hdC1mb290ZXItY2VsbHtib3JkZXItYm90dG9tLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWhlYWRlci1jZWxse2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2VsbCxib2R5LmRhcmstbW9kZSAubWF0LWZvb3Rlci1jZWxse2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1hcnJvd3tib3JkZXItdG9wLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLXRvZ2dsZSxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LWNhbGVuZGFyLW5leHQtYnV0dG9uLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtY2FsZW5kYXItcHJldmlvdXMtYnV0dG9ue2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXItZGl2aWRlcjo6YWZ0ZXJ7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWxhYmVse2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlLXJhbmdlLWlucHV0LXNlcGFyYXRvcntjb2xvcjojZmZmO2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudH1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWRhdGUtcmFuZ2UtaW5wdXQtc2VwYXJhdG9ye2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWluLXByZXZpZXd7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMjQpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS10b2RheTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS10b2RheTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDIzOSwxMDgsMCwuMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLGJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDI0OSwxNzEsMCwuMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgW2Rpcj1ydGxdIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1lbmQ6OmJlZm9yZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgyMzksIDEwOCwgMCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgW2Rpcj1ydGxdIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIGxlZnQsIHJnYmEoMjM5LCAxMDgsIDAsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCxib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZS5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YWZ0ZXJ7YmFja2dyb3VuZDojYThkYWI1fWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCxib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZDojNDZhMzVlfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDA7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgyMzksMTA4LDAsLjQpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS10b2RheS5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCAjZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1jZWxsOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQpOmhvdmVyPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCksYm9keS5kYXJrLW1vZGUgLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKSxib2R5LmRhcmstbW9kZSAuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIzOSwxMDgsMCwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnR7Ym94LXNoYWRvdzowcHggMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNHB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMik7YmFja2dyb3VuZC1jb2xvcjojNDI0MjQyO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjM5LDEwOCwwLC4yKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDI0OSwxNzEsMCwuMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMjM5LCAxMDgsIDAsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwgcmdiYSgyMzksIDEwOCwgMCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZS5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YWZ0ZXJ7YmFja2dyb3VuZDojYThkYWI1fWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQ6IzQ2YTM1ZX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDA7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIzOSwxMDgsMCwuNCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXkubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggI2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1jZWxsOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQpOmhvdmVyPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCksYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyMzksMTA4LDAsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyNDQsNjcsNTQsLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyNDksMTcxLDAsLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMjQ0LCA2NywgNTQsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBsZWZ0LCByZ2JhKDI0NCwgNjcsIDU0LCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2UubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmFmdGVye2JhY2tncm91bmQ6I2E4ZGFiNX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQ6IzQ2YTM1ZX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2O2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC40KX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXkubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggI2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktY2VsbDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkKTpob3Zlcj4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCksYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDQsNjcsNTQsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50LXRvdWNoe2JveC1zaGFkb3c6MHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItdG9nZ2xlLWFjdGl2ZXtjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci10b2dnbGUtYWN0aXZlLm1hdC1hY2NlbnR7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItdG9nZ2xlLWFjdGl2ZS5tYXQtd2Fybntjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZS1yYW5nZS1pbnB1dC1pbm5lcltkaXNhYmxlZF17Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LWRpYWxvZy1jb250YWluZXJ7Ym94LXNoYWRvdzowcHggMTFweCAxNXB4IC03cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAyNHB4IDM4cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDlweCA0NnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTIpO2JhY2tncm91bmQ6IzQyNDI0Mjtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZGl2aWRlcntib3JkZXItdG9wLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWRpdmlkZXItdmVydGljYWx7Ym9yZGVyLXJpZ2h0LWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbHtiYWNrZ3JvdW5kOiM0MjQyNDI7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAzcHggMXB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAycHggMnB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtYWN0aW9uLXJvd3tib3JkZXItdG9wLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbCAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKSxib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbCAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0pLGJvZHkuZGFyay1tb2RlIC5tYXQtZXhwYW5zaW9uLXBhbmVsOm5vdCgubWF0LWV4cGFuZGVkKSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI6aG92ZXI6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjA0KX1AbWVkaWEoaG92ZXI6IG5vbmUpe2JvZHkuZGFyay1tb2RlIC5tYXQtZXhwYW5zaW9uLXBhbmVsOm5vdCgubWF0LWV4cGFuZGVkKTpub3QoW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0pIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcjpob3ZlcntiYWNrZ3JvdW5kOiM0MjQyNDJ9fWJvZHkuZGFyay1tb2RlIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci10aXRsZXtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbixib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1pbmRpY2F0b3I6OmFmdGVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlclthcmlhLWRpc2FibGVkPXRydWVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlclthcmlhLWRpc2FibGVkPXRydWVdIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci10aXRsZSxib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbYXJpYS1kaXNhYmxlZD10cnVlXSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb257Y29sb3I6aW5oZXJpdH1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1oaW50e2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLm1hdC1hY2NlbnR7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLm1hdC13YXJue2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yZXF1aXJlZC1tYXJrZXJ7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtcmlwcGxle2JhY2tncm91bmQtY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUubWF0LWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUubWF0LXdhcm57YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb2N1c2VkOm5vdCgubWF0LWZvcm0tZmllbGQtaW52YWxpZCkgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb2N1c2VkOm5vdCgubWF0LWZvcm0tZmllbGQtaW52YWxpZCkubWF0LWFjY2VudCAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVye2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvY3VzZWQ6bm90KC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkKS5tYXQtd2FybiAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVye2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLm1hdC1hY2NlbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIC5tYXQtZm9ybS1maWVsZC1yZXF1aXJlZC1tYXJrZXJ7Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLGJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUubWF0LWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1lcnJvcntjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtaGludHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNykgMCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSAzMyUsIHRyYW5zcGFyZW50IDAlKTtiYWNrZ3JvdW5kLXNpemU6NHB4IDEwMCU7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXh9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSAwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpIDMzJSwgdHJhbnNwYXJlbnQgMCUpO2JhY2tncm91bmQtc2l6ZTo0cHggMTAwJTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteH1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1mbGV4e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtZmxleHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjA1KX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmU6OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lOjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2t7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZC5tYXQtYWNjZW50IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZC5tYXQtd2FybiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtaW52YWxpZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjE1KX1ib2R5LmRhcmstbW9kZSAubWF0LWljb24ubWF0LXByaW1hcnl7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWljb24ubWF0LWFjY2VudHtjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi5tYXQtd2Fybntjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0IC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1pbnB1dC1lbGVtZW50OmRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LWlucHV0LWVsZW1lbnR7Y2FyZXQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWlucHV0LWVsZW1lbnQ6OnBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtaW5wdXQtZWxlbWVudDo6LW1vei1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1pbnB1dC1lbGVtZW50Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LWlucHV0LWVsZW1lbnQgb3B0aW9ue2NvbG9yOnJnYmEoMCwwLDAsLjg3KX1ib2R5LmRhcmstbW9kZSAubWF0LWlucHV0LWVsZW1lbnQgb3B0aW9uOmRpc2FibGVke2NvbG9yOnJnYmEoMCwwLDAsLjM4KX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LWFjY2VudCAubWF0LWlucHV0LWVsZW1lbnR7Y2FyZXQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LXdhcm4gLm1hdC1pbnB1dC1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtaW5wdXQtZWxlbWVudHtjYXJldC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1pdGVte2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LW9wdGlvbntjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtbGlzdC1iYXNlIC5tYXQtc3ViaGVhZGVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtbGlzdC1pdGVtLWRpc2FibGVke2JhY2tncm91bmQtY29sb3I6IzAwMH1ib2R5LmRhcmstbW9kZSAubWF0LWxpc3Qtb3B0aW9uOmhvdmVyLGJvZHkuZGFyay1tb2RlIC5tYXQtbGlzdC1vcHRpb246Zm9jdXMsYm9keS5kYXJrLW1vZGUgLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbTpob3Zlcixib2R5LmRhcmstbW9kZSAubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtOmZvY3VzLGJvZHkuZGFyay1tb2RlIC5tYXQtYWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW06aG92ZXIsYm9keS5kYXJrLW1vZGUgLm1hdC1hY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbTpmb2N1c3tiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjA0KX1ib2R5LmRhcmstbW9kZSAubWF0LWxpc3Qtc2luZ2xlLXNlbGVjdGVkLW9wdGlvbixib2R5LmRhcmstbW9kZSAubWF0LWxpc3Qtc2luZ2xlLXNlbGVjdGVkLW9wdGlvbjpob3Zlcixib2R5LmRhcmstbW9kZSAubWF0LWxpc3Qtc2luZ2xlLXNlbGVjdGVkLW9wdGlvbjpmb2N1c3tiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtcGFuZWx7YmFja2dyb3VuZDojNDI0MjQyfWJvZHkuZGFyay1tb2RlIC5tYXQtbWVudS1wYW5lbDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA0cHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtaXRlbXtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZW51LWl0ZW1bZGlzYWJsZWRdLGJvZHkuZGFyay1tb2RlIC5tYXQtbWVudS1pdGVtW2Rpc2FibGVkXTo6YWZ0ZXIsYm9keS5kYXJrLW1vZGUgLm1hdC1tZW51LWl0ZW1bZGlzYWJsZWRdIC5tYXQtaWNvbi1uby1jb2xvcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtaXRlbSAubWF0LWljb24tbm8tY29sb3IsYm9keS5kYXJrLW1vZGUgLm1hdC1tZW51LWl0ZW0tc3VibWVudS10cmlnZ2VyOjphZnRlcntjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtbWVudS1pdGVtOmhvdmVyOm5vdChbZGlzYWJsZWRdKSxib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtaXRlbS5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdChbZGlzYWJsZWRdKSxib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtaXRlbS5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoW2Rpc2FibGVkXSksYm9keS5kYXJrLW1vZGUgLm1hdC1tZW51LWl0ZW0taGlnaGxpZ2h0ZWQ6bm90KFtkaXNhYmxlZF0pe2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMDQpfWJvZHkuZGFyay1tb2RlIC5tYXQtcGFnaW5hdG9ye2JhY2tncm91bmQ6IzQyNDI0Mn1ib2R5LmRhcmstbW9kZSAubWF0LXBhZ2luYXRvcixib2R5LmRhcmstbW9kZSAubWF0LXBhZ2luYXRvci1wYWdlLXNpemUgLm1hdC1zZWxlY3QtdHJpZ2dlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LXBhZ2luYXRvci1kZWNyZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1wYWdpbmF0b3ItaW5jcmVtZW50e2JvcmRlci10b3A6MnB4IHNvbGlkICNmZmY7Ym9yZGVyLXJpZ2h0OjJweCBzb2xpZCAjZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtcGFnaW5hdG9yLWZpcnN0LGJvZHkuZGFyay1tb2RlIC5tYXQtcGFnaW5hdG9yLWxhc3R7Ym9yZGVyLXRvcDoycHggc29saWQgI2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LXBhZ2luYXRvci1kZWNyZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1wYWdpbmF0b3ItaW5jcmVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtcGFnaW5hdG9yLWZpcnN0LGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtcGFnaW5hdG9yLWxhc3R7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtcHJvZ3Jlc3MtYmFyLWJhY2tncm91bmR7ZmlsbDojZmI4YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtcHJvZ3Jlc3MtYmFyLWJ1ZmZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmYjhjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXItZmlsbDo6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC1hY2NlbnQgLm1hdC1wcm9ncmVzcy1iYXItYmFja2dyb3VuZHtmaWxsOiNmYjhjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCAubWF0LXByb2dyZXNzLWJhci1idWZmZXJ7YmFja2dyb3VuZC1jb2xvcjojZmI4YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC1hY2NlbnQgLm1hdC1wcm9ncmVzcy1iYXItZmlsbDo6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC13YXJuIC5tYXQtcHJvZ3Jlc3MtYmFyLWJhY2tncm91bmR7ZmlsbDojZmZjZGQyfWJvZHkuZGFyay1tb2RlIC5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC13YXJuIC5tYXQtcHJvZ3Jlc3MtYmFyLWJ1ZmZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmNkZDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXIubWF0LXdhcm4gLm1hdC1wcm9ncmVzcy1iYXItZmlsbDo6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBjaXJjbGUsYm9keS5kYXJrLW1vZGUgLm1hdC1zcGlubmVyIGNpcmNsZXtzdHJva2U6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXByb2dyZXNzLXNwaW5uZXIubWF0LWFjY2VudCBjaXJjbGUsYm9keS5kYXJrLW1vZGUgLm1hdC1zcGlubmVyLm1hdC1hY2NlbnQgY2lyY2xle3N0cm9rZTojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci5tYXQtd2FybiBjaXJjbGUsYm9keS5kYXJrLW1vZGUgLm1hdC1zcGlubmVyLm1hdC13YXJuIGNpcmNsZXtzdHJva2U6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnkubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1yYWRpby1pbm5lci1jaXJjbGUsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudDpub3QoLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSksYm9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnkubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSxib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeTphY3RpdmUgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LWFjY2VudC5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtcmFkaW8taW5uZXItY2lyY2xlLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudDpub3QoLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSksYm9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LWFjY2VudC5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnQ6YWN0aXZlIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuLm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xle2JvcmRlci1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuIC5tYXQtcmFkaW8taW5uZXItY2lyY2xlLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuIC5tYXQtcmFkaW8tcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnQ6bm90KC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGUpLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuLm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGUsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXdhcm46YWN0aXZlIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1yYWRpby1kaXNhYmxlZC5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZSxib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcmFkaW8tZGlzYWJsZWQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1yYWRpby1kaXNhYmxlZCAubWF0LXJhZGlvLXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1yYWRpby1kaXNhYmxlZCAubWF0LXJhZGlvLWlubmVyLWNpcmNsZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1yYWRpby1kaXNhYmxlZCAubWF0LXJhZGlvLWxhYmVsLWNvbnRlbnR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zZWxlY3QtdmFsdWV7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXNlbGVjdC1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LXNlbGVjdC1kaXNhYmxlZCAubWF0LXNlbGVjdC12YWx1ZXtjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlIC5tYXQtc2VsZWN0LWFycm93e2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2VsZWN0LXBhbmVse2JhY2tncm91bmQ6IzQyNDI0Mn1ib2R5LmRhcmstbW9kZSAubWF0LXNlbGVjdC1wYW5lbDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA0cHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LXNlbGVjdC1wYW5lbCAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLW11bHRpcGxlKXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQubWF0LXByaW1hcnkgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQubWF0LWFjY2VudCAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZC5tYXQtd2FybiAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZCAubWF0LXNlbGVjdC5tYXQtc2VsZWN0LWludmFsaWQgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQgLm1hdC1zZWxlY3QubWF0LXNlbGVjdC1kaXNhYmxlZCAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlIC5tYXQtZHJhd2VyLWNvbnRhaW5lcntiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzA7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWRyYXdlcntiYWNrZ3JvdW5kLWNvbG9yOiM0MjQyNDI7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWRyYXdlci5tYXQtZHJhd2VyLXB1c2h7YmFja2dyb3VuZC1jb2xvcjojNDI0MjQyfWJvZHkuZGFyay1tb2RlIC5tYXQtZHJhd2VyOm5vdCgubWF0LWRyYXdlci1zaWRlKXtib3gtc2hhZG93OjBweCA4cHggMTBweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMTZweCAyNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA2cHggMzBweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWRyYXdlci1zaWRle2JvcmRlci1yaWdodDpzb2xpZCAxcHggcmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZHJhd2VyLXNpZGUubWF0LWRyYXdlci1lbmR7Ym9yZGVyLWxlZnQ6c29saWQgMXB4IHJnYmEoMjU1LDI1NSwyNTUsLjEyKTtib3JkZXItcmlnaHQ6bm9uZX1ib2R5LmRhcmstbW9kZSBbZGlyPXJ0bF0gLm1hdC1kcmF3ZXItc2lkZXtib3JkZXItbGVmdDpzb2xpZCAxcHggcmdiYSgyNTUsMjU1LDI1NSwuMTIpO2JvcmRlci1yaWdodDpub25lfWJvZHkuZGFyay1tb2RlIFtkaXI9cnRsXSAubWF0LWRyYXdlci1zaWRlLm1hdC1kcmF3ZXItZW5ke2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLXJpZ2h0OnNvbGlkIDFweCByZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1kcmF3ZXItYmFja2Ryb3AubWF0LWRyYXdlci1zaG93bntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTg5LDE4OSwxODksLjYpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1ie2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlLXRvZ2dsZS5tYXQtY2hlY2tlZCAubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIzOSwxMDgsMCwuNTQpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1jaGVja2VkIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1wcmltYXJ5Lm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1ie2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlLXRvZ2dsZS5tYXQtcHJpbWFyeS5tYXQtY2hlY2tlZCAubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIzOSwxMDgsMCwuNTQpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1wcmltYXJ5Lm1hdC1jaGVja2VkIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLm1hdC13YXJuLm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1ie2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlLXRvZ2dsZS5tYXQtd2Fybi5tYXQtY2hlY2tlZCAubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuNTQpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLm1hdC13YXJuLm1hdC1jaGVja2VkIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlOm5vdCgubWF0LWNoZWNrZWQpIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1ie2JveC1zaGFkb3c6MHB4IDJweCAxcHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDFweCAxcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAzcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMik7YmFja2dyb3VuZC1jb2xvcjojYmRiZGJkfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXByaW1hcnkgLm1hdC1zbGlkZXItdHJhY2stZmlsbCxib2R5LmRhcmstbW9kZSAubWF0LXByaW1hcnkgLm1hdC1zbGlkZXItdGh1bWIsYm9keS5kYXJrLW1vZGUgLm1hdC1wcmltYXJ5IC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXByaW1hcnkgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dHtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtcHJpbWFyeSAubWF0LXNsaWRlci1mb2N1cy1yaW5ne2JhY2tncm91bmQtY29sb3I6cmdiYSgyMzksMTA4LDAsLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtYWNjZW50IC5tYXQtc2xpZGVyLXRyYWNrLWZpbGwsYm9keS5kYXJrLW1vZGUgLm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdGh1bWIsYm9keS5kYXJrLW1vZGUgLm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtYWNjZW50IC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWFjY2VudCAubWF0LXNsaWRlci1mb2N1cy1yaW5ne2JhY2tncm91bmQtY29sb3I6cmdiYSgyMzksMTA4LDAsLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtd2FybiAubWF0LXNsaWRlci10cmFjay1maWxsLGJvZHkuZGFyay1tb2RlIC5tYXQtd2FybiAubWF0LXNsaWRlci10aHVtYixib2R5LmRhcmstbW9kZSAubWF0LXdhcm4gLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtd2FybiAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC13YXJuIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXI6aG92ZXIgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZCxib2R5LmRhcmstbW9kZSAuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmQsYm9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdHJhY2stZmlsbCxib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLWRpc2FibGVkOmhvdmVyIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci1taW4tdmFsdWUgLm1hdC1zbGlkZXItZm9jdXMtcmluZ3tiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci1taW4tdmFsdWUubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nIC5tYXQtc2xpZGVyLXRodW1iLGJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLW1pbi12YWx1ZS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLW1pbi12YWx1ZS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWIsYm9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXItbWluLXZhbHVlLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZy5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLW1pbi12YWx1ZTpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZykgLm1hdC1zbGlkZXItdGh1bWJ7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjMpO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXItbWluLXZhbHVlOm5vdCgubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nKTpob3ZlciAubWF0LXNsaWRlci10aHVtYixib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1ie2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpOmhvdmVyLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdGh1bWIsYm9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXItbWluLXZhbHVlOm5vdCgubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nKS5jZGstZm9jdXNlZC5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRodW1ie2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci1oYXMtdGlja3MgLm1hdC1zbGlkZXItd3JhcHBlcjo6YWZ0ZXJ7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdGlja3N7YmFja2dyb3VuZC1pbWFnZTpyZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyksIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSAycHgsIHRyYW5zcGFyZW50IDAsIHRyYW5zcGFyZW50KTtiYWNrZ3JvdW5kLWltYWdlOi1tb3otcmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCgwLjAwMDFkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpIDJweCwgdHJhbnNwYXJlbnQgMCwgdHJhbnNwYXJlbnQpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXRpY2tze2JhY2tncm91bmQtaW1hZ2U6cmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpIDJweCwgdHJhbnNwYXJlbnQgMCwgdHJhbnNwYXJlbnQpfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIuY2RrLWtleWJvYXJkLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlci5jZGstcHJvZ3JhbS1mb2N1c2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4wNCl9QG1lZGlhKGhvdmVyOiBub25lKXtib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyOmhvdmVye2JhY2tncm91bmQ6bm9uZX19Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtb3B0aW9uYWx7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbi1zZWxlY3RlZCxib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1pY29uLXN0YXRlLWRvbmUsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1lZGl0e2JhY2tncm91bmQtY29sb3I6I2VmNmMwMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIubWF0LWFjY2VudCAubWF0LXN0ZXAtaWNvbntjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIubWF0LWFjY2VudCAubWF0LXN0ZXAtaWNvbi1zZWxlY3RlZCxib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyLm1hdC1hY2NlbnQgLm1hdC1zdGVwLWljb24tc3RhdGUtZG9uZSxib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyLm1hdC1hY2NlbnQgLm1hdC1zdGVwLWljb24tc3RhdGUtZWRpdHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDA7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyLm1hdC13YXJuIC5tYXQtc3RlcC1pY29ue2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlci5tYXQtd2FybiAubWF0LXN0ZXAtaWNvbi1zZWxlY3RlZCxib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyLm1hdC13YXJuIC5tYXQtc3RlcC1pY29uLXN0YXRlLWRvbmUsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlci5tYXQtd2FybiAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1lZGl0e2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNjtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb24tc3RhdGUtZXJyb3J7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWxhYmVsLm1hdC1zdGVwLWxhYmVsLWFjdGl2ZXtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWxhYmVsLm1hdC1zdGVwLWxhYmVsLWVycm9ye2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwcGVyLWhvcml6b250YWwsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwcGVyLXZlcnRpY2Fse2JhY2tncm91bmQtY29sb3I6IzQyNDI0Mn1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXBwZXItdmVydGljYWwtbGluZTo6YmVmb3Jle2JvcmRlci1sZWZ0LWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXI6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXI6OmFmdGVyLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsLWxpbmV7Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1zb3J0LWhlYWRlci1hcnJvd3tjb2xvcjojYzZjNmM2fWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItaGVhZGVye2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC1pbnZlcnRlZC1oZWFkZXIgLm1hdC10YWItbmF2LWJhcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC1pbnZlcnRlZC1oZWFkZXIgLm1hdC10YWItaGVhZGVye2JvcmRlci10b3A6MXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsLjEyKTtib3JkZXItYm90dG9tOm5vbmV9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbGlua3tjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVke2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwW2NsYXNzKj1tYXQtYmFja2dyb3VuZC1dIC5tYXQtdGFiLWhlYWRlcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyW2NsYXNzKj1tYXQtYmFja2dyb3VuZC1de2JvcmRlci1ib3R0b206bm9uZTtib3JkZXItdG9wOm5vbmV9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTEsMTQwLDAsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtaW5rLWJhcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5Lm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1pbmstYmFyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1MSwxNDAsMCwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LWluay1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWFjY2VudC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtaW5rLWJhcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50Lm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50Lm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyMDUsMjEwLC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LWluay1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtaW5rLWJhcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtd2Fybi5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtaW5rLWJhcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtaW5rLWJhcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTEsMTQwLDAsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb257YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluayxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5re2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC40KX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rcyAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmtzIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3Jle2JvcmRlci1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTEsMTQwLDAsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb257YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmssYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmt7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmtzIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGlua3MgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXtib3JkZXItY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC40KX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjA1LDIxMCwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmt7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVke2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjQpfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmtzIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGlua3MgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmV7Ym9yZGVyLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC40KX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFye2JhY2tncm91bmQ6I2VmNmMwMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhci5tYXQtcHJpbWFyeXtiYWNrZ3JvdW5kOiNlZjZjMDA7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIubWF0LWFjY2VudHtiYWNrZ3JvdW5kOiNlZjZjMDA7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIubWF0LXdhcm57YmFja2dyb3VuZDojZjQ0MzM2O2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmUsYm9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUsYm9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyIC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmlwcGxle2JhY2tncm91bmQtY29sb3I6Y3VycmVudENvbG9yfWJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhciAubWF0LWZvcm0tZmllbGQtbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyIC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyIC5tYXQtc2VsZWN0LXZhbHVlLGJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhciAubWF0LXNlbGVjdC1hcnJvdyxib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtc2VsZWN0LWFycm93e2NvbG9yOmluaGVyaXR9Ym9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyIC5tYXQtaW5wdXQtZWxlbWVudHtjYXJldC1jb2xvcjpjdXJyZW50Q29sb3J9Ym9keS5kYXJrLW1vZGUgLm1hdC10b29sdGlwe2JhY2tncm91bmQ6cmdiYSg5Nyw5Nyw5NywuOSl9Ym9keS5kYXJrLW1vZGUgLm1hdC10cmVle2JhY2tncm91bmQ6IzQyNDI0Mn1ib2R5LmRhcmstbW9kZSAubWF0LXRyZWUtbm9kZSxib2R5LmRhcmstbW9kZSAubWF0LW5lc3RlZC10cmVlLW5vZGV7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXNuYWNrLWJhci1jb250YWluZXJ7Y29sb3I6cmdiYSgwLDAsMCwuODcpO2JhY2tncm91bmQ6I2ZhZmFmYTtib3gtc2hhZG93OjBweCAzcHggNXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA2cHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDE4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9ue2NvbG9yOmluaGVyaXR9Cjwvc3R5bGU+Cgo8c3R5bGU+CiAgaHRtbCwKICBib2R5IHsKICAgIG1hcmdpbjogMDsKICAgIHBhZGRpbmc6IDA7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBmb250LWZhbWlseTogUm9ib3RvLCBzYW5zLXNlcmlmOwogICAgY29sb3I6IHZhcigtLXByaW1hcnktdGV4dC1jb2xvcik7CgogICAgLyogTGVnYWN5IG1lY2hhbmlzbSB0byBhdm9pZCBpc3N1ZXMgd2l0aCBzdWJwaXhlbCBhbnRpLWFsaWFzaW5nIG9uIG1hY09TLgogICAgICoKICAgICAqIEluIHRoZSBwYXN0IFsxXSwgbWFjT1Mgc3VicGl4ZWwgQUEgY2F1c2VkIGV4Y2Vzc2l2ZSBib2xkaW5nIGZvciBsaWdodC1vbi1kYXJrIHRleHQ7IHRoaXMgcnVsZQogICAgICogYXZvaWRzIHRoYXQgYnkgcmVxdWVzdGluZyBub24tc3VicGl4ZWwgQUEgYWx3YXlzLCByYXRoZXIgdGhhbiB0aGUgZGVmYXVsdCBiZWhhdmlvciwgd2hpY2ggaXMKICAgICAqIHRvIHVzZSBzdWJwaXhlbCBBQSB3aGVuIGF2YWlsYWJsZS4gVGhlIG9yaWdpbmFsIGlzc3VlIHdhcyAiZml4ZWQiIGJ5IHJlbW92aW5nIHN1YnBpeGVsIEFBIGluCiAgICAgKiBtYWNPUyAxNCAoTW9qYXZlKSwgYnV0IGZvciBsZWdhY3kgcmVhc29ucyB0aGV5IHByZXNlcnZlZCB0aGUgYm9sZGluZyBlZmZlY3QgYXMgYW4gb3B0aW9uLgogICAgICogQ2hyb21lIHRoZW4gaW4gdHVybiB1cGRhdGVkIGl0cyBmb250IHJlbmRlcmluZyB0byBhcHBseSB0aGF0IGJvbGRpbmcgZWZmZWN0IFsyXSwgd2hpY2ggbWVhbnMKICAgICAqIHRoYXQgZXZlbiB0aG91Z2ggdGhlIGAtd2Via2l0LWZvbnQtc21vb3RoaW5nYCBkb2NzIFszXSBzdWdnZXN0IHRoYXQgc2V0dGluZyBgYW50aWFsaWFzZWRgCiAgICAgKiB3b3VsZCBoYXZlIG5vIGVmZmVjdCBmb3IgcmVjZW50IHZlcnNpb25zIG9mIG1hY09TLCBpdCBzdGlsbCBpcyBuZWVkZWQgdG8gYXZvaWQgdGhlIGJvbGRpbmcuCiAgICAgKgogICAgICogWzFdOiBodHRwOi8vd3d3LmxpZ2h0ZXJyYS5jb20vYXJ0aWNsZXMvbWFjb3N4dGV4dGFhYnVnLwogICAgICogWzJdOiBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD04NTg4NjEKICAgICAqIFszXTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL2ZvbnQtc21vb3RoCiAgICAgKgogICAgICovCgogICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CiAgfQogIG5vc2NyaXB0IHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgbWFyZ2luOiAwIGF1dG87CiAgICBtYXgtd2lkdGg6IDYwMHB4OwogICAgcGFkZGluZzogMTBweDsKICB9Cjwvc3R5bGU+Cgo8L2hlYWQ+PGJvZHk+PG5vc2NyaXB0PgogICAgPGgxPlRlbnNvckJvYXJkIHJlcXVpcmVzIEphdmFTY3JpcHQ8L2gxPgogICAgPHA+UGxlYXNlIGVuYWJsZSBKYXZhU2NyaXB0IGFuZCByZWxvYWQgdGhpcyBwYWdlLjwvcD4KICA8L25vc2NyaXB0Pjx0Yi13ZWJhcHA+PC90Yi13ZWJhcHA+PHNjcmlwdCBzcmM9ImluZGV4LmpzP19maWxlX2hhc2g9OGYzOWIwMjciPjwvc2NyaXB0PjwvYm9keT48L2h0bWw+", + "ok": true, + "headers": [ + [ + "content-type", + "text/html; charset=utf-8" + ] + ], + "status": 200, + "status_text": "" + }, + "https://localhost:6007/font-roboto/oMMgfZMQthOryQo9n22dcuvvDin1pK8aKteLpeZ5c0A.woff2": { + "data": "d09GMgABAAAAACn8AA4AAAAAUjgAACmjAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGmQbmUAcg0oGYACGTBEMCu1810YLg14AATYCJAOHNgQgBYJ0ByAbL0RFB2LYOGCA7DduwB2DjQOQz3hJ9n+ZwI0hWB/YxYSYMBRSFENBsWqrAkWbJBHpUKamYBECLd7YUy2OVYvlKX1dMf05+T/7LtU4wMKUW3v6cz1MLF0FGyHJLEG01r/VMHufgpZJIoGKBHQMKsYkFpgU4tsDmtv9xsaIGoiNiIJRtJKSElLSIdGjQuiRIypl0JtBlKISJSqZZnH/Oq0ZWaYZyYoPCFpukb7+N+xuwk6iBRZMI8WdlLQH1F3R7l157zoCyXjA9AD36nWBrP07PZhwgBLSeMnLEQ4VqJsqlv8siGuabsED3LeKFnxrugO3hMah9NJJ/ipRkvNo0bWSH6xvN8TX2qedvrqte1s1/yDEW6dCUB4tkIxQEeoDTSYMiiaAuBEGJLK/dSEgoaIi0Ua4CGXj/7vX2aa3YewLW7L1Fw6EC+fgxB/7NWWpMKZaUyFMhaxEyArLmA7J/62Zdje5MjlgYyvcOTf7ZycwswkX9oD2CklKoSNIzN4VWFXVET5/gKgKaO9USZgKCaxcreurQxDS1KS6SqUxAJqz+B+OtbQOoul9mcsgjITAKKN32318dn4Bhdn5t38EFHq8pCEUmUMECIAIFw4RKRIiRgxEnDiIBEkQpSqgdDmAQKCAVcCaECAgAiDACvyk0ex3gJounDg3gOACJy4k2DnDicusvN3gBBrAILTCpecT3AAH9C0NYpDo+7rNUJuyf/BUQ/cM42KIV0v11FyNhkyiUDj0XDKjjuX1lEnr9K7FjMnEPpZVifqZhCWKr4SbqzTQwLYaKjSBrueqpWpPjRbN9WixjymuFFH/CwqFBhYDRux4XXDRJZfdwE+IMBGibhEnQYq021SoUqPpHm069BkyZsKMhXQZsmTrQkH1yGNPPNWtR68+/Z4b8cJLr0x66515C1atWbdh05Z9BxC3mkNDHAcJeFI4TeKEYI8bP9Y44ePEm77r41+ewEGxRUrtUWZUuIsOetH6bTJql3HbzKjlpPZkximHvICSPiqPeMwTngZTLZpmhlleMxe8ac9b3jHPAmuss8EmW8F2u3bYZS/Yb9vBNIRJvask5+7FELPwimHcaoZ46yTaJ9WCSTY0DsjmwGD82Y7DoWmOfu1MGuY6fi64i8JTF1OyuErRYMJBFtuDaaussAMsMLJnmS0vuQHreu+JDYwyxjgTDXPAYsWQxpkTT6ltykCFu+glcU3S4tKxymCyyA7etO0t75hnoWEGSu1TRoW76JHEG97yjnkWzo2mioUhQSbYYOmYZg2ss8EmWw1jsBYFTyY55CV9Yp999tlnP46GGajhpolWtE5hDEphgsHaYdbBBptsWWTntaOdq59hH5i0BI2pTbJ9tW44FNXel24XIjwwjRl9q3SNYW6MMqPqdvrNMVySVP2Trj0U3CvhlYipV1w9cpuCyIgMoYoJ6uAoNADzvug45Zj7yoBXfrjWup4FNpUP90w83Gjmo+puO/m8JAbcN3D4dUpCw6N96EFl/RgLIB76ETisxR/w6aPfR7D+NjfOfbeHOYYeHrwM6cPqaG0C4EDa+qeN8E9UN/umlSM27Cex9S8bW/9cmENaN4plychcK2z/rnfLbrbSThvtiLBzSrZHuO7Wmpvu9U1ldbZfCTb4hlrtIxcAHO5g65ppXrrnhMPC1kvnK5fWHKkuAKxYS2ygcV0rlvjEtGOxglUm6USA2od7bZ7ZA0zgcMNXu6Vq96DjVnaFuUnt8GvYm+2/bLjrmx9odH8OHtYJcBgN/b8kxzn07RsPkp7oNsv+PxY7vLXhbI0B2O6kbBr78YIaGQ9mNpD/ZDn01If3Bh8OOu7XP4HYqD7kLYGVOfcyTk47aKYl0X7mMjiMDjPg7M42er6j3/abnabFTbZeexnmm/4ZPQMO37lXsuKw1GmniQNWEawkgpUo+P+g8bqExlXC6NwiDU+RkuNUiKeoeU+7RxcXffIw9p5jytx58d4L0uW4KO/t67osuGHVFr1lzLkJFBG7OIqjOKlO+kwUPh53gWwuEnGJGNdJ7wYZ8JOTEBHC5HCLTMRIT5wnSPAYSbKSIiNpslAk1h3SUiqP+NULp2hOtdHQAdF0S1ofe7ErOh/EMyMdczKLF9olnjsqE3JyqeeOygFPyuNJXV4ExVMo3X9j06MfxnOvIEZNoDdJXkZT5mC98R7x1gKc1fs01mxBk9dJBzawOQ5sKDkp7MUhWOFQrjBRrvMoIaKIEOVmyUxYL3rQ4QjYwQIGsIZUnapA3GVBSAIaNA5ND0QYkJFRiSHMgAOcYxIJoiQSJek+IlUaTgrBBg6wgcNx6IRwArCCIg8o0IFB0e4sQGgD2sfstj0Yi/vtsrpEq52XqxUx7wXavU9R5AbVfbV1p6EDtGWnJA/XVOMRsvo8RlPdHad9NxBpoVtpYHLL0QrVHnveFe6uwPf/7jyBq5c52luBaALJx8pX+LgSQAvlHBSU/jQISHSdPDXyK0T8EDNBpjzkeaygcCLzJqgiKV9QtldXCkW9eOkpVFBLmWjZoyokvMYGYuM3q7LDGjTAj7sPXGsYBaVQYdkTHmY1/zyKJHrVqlSqUatOvQaNHgpOvOwmgbx4I2vWolWbdigIDqeB6phIgQHjoSEEYoO3GfWG+xmO9H2b14EtgH09CwceqakEMmDjtbHwH1ywyEvghjwO6F0GGbeagAYru65f6TdFf8NxEZpQA3bCjcYxgDMmoUrc/1DdhozZ9MEhMsFlbnKRv254PFwOt8PD8DLMhvlhdVifRh0CAEy4lSj1fMkew8Zt+fiWtyg/Gs6H67an546+N+CsD3294PDnwOcHM058+/z/7Vt/15TJ8MUb+x/6/XXxtmRzAC4jjHlHw5q/XvcP1+XZL9e/HyHSqDHjJkyKEm3KtBmzXpsTI/YX7U0Txdm2Y9eeffEOMAIAZPHeNcAFkH5MT6DhJhQar4QOSmnAxmukk4d0404Pg1C8IcIZ7jem0m8c6GKCWZ7xmjkieMMCoyyyRBTLbDDlbRLDFh94430klk98Z5Uf/ITIL/6x7f0n3jtUBxqZCCT4yEItBRI1aiOQrFEfAiSN+hJI8bmP1LFAqs99ri4F0n3ua3UrkKW5HwRyNfeLQJ7PPVUzgXzNPRco1NwrgSLNvRYo1jyHQ6BkqJuBg+pwqVfwfijyRYUwvQnHv6TWp0PyKigaNh96H4GBhmyOegPVB40f59xGEvqhc+sAD9WxCKjVXrZAVDdIs68AhHKCotyajCaMMM33GHhE96JFqxBPQEEEoqpC8iJOGGL05OS/t6P7dswwoetDgYYOgzlyg98MT+zFf0ajcoEikxZ3w24atFBdBAG0lP/g72LZuroeHO2D0lGazKLkzmMauyiDCdhr2a5txrOVjSChgd2ova0t77MhhbcusVxATqdNzYG/FtlUbXRQPRO4OeZ3jE2LIpfa374QSXm/jXcJ1RlLGxZ+dBY1t4Brn0S4YIb5A885pd4Nm4nTxHTsncPU/uJFsrvfCo55+xh0RpRwlNVFmRZ5JT0a8vqz7YKjXITu0NETuTeLgWx0wlG1ZKwnE8zEIEPVAl29KW8grf5KvdJSAaHPwFwMFyKZcNGCzUM5o39uRYwWpCG2syOpPpQYJcOaFn+YiakAyoJBWW1PdQ3gky5Lyrv1Qu08YS8gSdFMp6Xw8V//1cwtjV/OeuogqHw10Ysw1TOlp8shZnahTTWfy4ZZH3Bv01/rq0FPiwuORTUH3Rr39SnJaRmeqQkMhbRqn4TlQFNuBzh2XJgnuDqHspyu0HjUXsMzfPUKBo4oQFl/59ra8oQdbCz13uBAOQ+7IIF6czUJA1lU66Bw5NYfWV31oNN7ypngGeWsuTqsEsrhFQEqG1WQZkIcz5vH8rsZjFklUsoKdqUiEv68IaVRHWA1ltQdWoR4IBbvBaMNWXDw7xohT2WjEINN7BucggQF7qiNneY8xhDhaJpbjN+TprJdqRJ68eUpZ5QTOoqiy71R/rGSuGKW/zv5f6bK+V+XqNf9bxu3tMVwufyHCz+PSnKjrh9+fWXoqLsUjumye4LFDWIi7dtumjw+brjklOBI+ScdTjXMTJQ4+jRhyjVAOkeCkt30cx/S2Z8qaXHhEDOrpWN7sCJd6FjeIVEmfARcWahxPLsI1sVRRvQyvF1z0BOqq/mw7dXZ5YiDWzSTRl1gQmV52yFfjGnz20KQxu571VcjSo6/lSSUtDza2mZJtR3ssJefgx5bpVWyM8HDYK/wkP5JPnL6UqVarauNUmfRkTOho3FTlGoP6PIFDRtZeBq6BcMRkGuIiNY4MYmDV0ujHNQz+aSb3NheHTbPCEeU8Mg3wvEIObtW60VLwLt7tL9LwT6HZUmRTfWEN7twFXImIwjFDI64QVhZ3NhBFt8eBbxHMZ8CaIe7H1C8xvXMdyxLPb6VIsSjjQ5Tu6SCqgAr05exOiWSIOmZeqYl2yAKsJ4IfFNStZo5LrDOMVUi2QHIrmqZ8dR/Sd8CWKfN1Wr8Mskb5eGEuUnILSj6pq4YSmagxspkGt6pTX8GqCojM8mUjwKb6kdQiWqQsEttHrQP39bBMb/jp+WMbYfEKRvFj3/DjHhrj/gV5E+5wKkhbQbvSCZBg9oF+S042qt+KCNAGgjS24pSDB1vg0HdlcYmpwORmpccTd0pV+zgEtazSNPfQ0pIHnElz5rKRywGsg04LtCsfnVCrglVCXW2UwSoJrdok1FMXuGCi+3BkEsTB73xIylxRo9pfLYQYxLuUC1A6WAXzk0miNkeiw1OG6sUC1JVAcxx+9QSh5gpb4ljMlXlQ8qQQ3dgkoicYMp93+rZewvB1cgE6qFuCI/w2OaxiJkb+/Jx6REGfgqeugr5MzGoCXlAhbvvgpRRatUGSqa0aT40UTVEIniStK2KkQNSWnadTS44MC0ZcShqn/tNbjSpzhJPWqmVtdIahqMy4JIurfISwFqdDknlN/ZkJWaJOfPmu0hCIViLEiCXeDo1fx31S8zs39RXB2funyM/h/4qJvzk1FE1AlLSBoRckNzDUC2Vie0A3dVydpP2+nlQlXWLmsM6kpxf2qNAnzxXE9I8zbaSdNBbUmBp9qN4v7SdxKEPSQw7OPKYqmGDHU1G25UrXOzQT8UESQ8gg7ZI7KplJNU1l8Ei8eqUd9TGu/Hq7MDh3qFLtVYpmTYB1RVu8jGGn+HIKixbp7pl08klbTB60qEpikY9sjLo9EaglvU96Bz3EvfEcLRjtkf+1rba2RopIJY4orU7uObY3Y9SlGnOR8UZRdWYYRWrEpkS6FgkfdvN4lxqew4RQe5mP6W+wnEkhvXYbXxIZd2qOGV+DxkBE9TT6D3p7Zq2VzJUAseOmluQLiocOOkAKDVWaXR015dYYhhgYrCcD6ml8QGDF/GOWXf4pN3DFIOvh2olo92vyup7stXa0MvaZcUB90LXMpfiqT0HdGwvKlR7KYetkJMa2zJ/eArTc+pPLwuQVoRD7jxII8nWDhElbFkfTa6MUhEyZ1g5yvyhBBlM5pzxUDZLT/37WD/EMrpTwTbt4IhlG7ZotGO0+OI4aZ8Go5MwWJcz21FJpnoSIFY/ccFOPVCPGOEsSkbF/PQIj5jGOrVbVnfwRTqNq6nNasQEQSYH7oLXLiW31UgXpk8J44vqKc0GKe+BUadt3wUGAkJHB7zFtQeGQxccdSieReslSPWf21E+PxPTi3gAyczhLgUOemFaBT28Nb0szb2eFfH0QV74/FTUWTUSxGVUnmvtGSxEF+eUJztVfeYpr5KlNEbYbqQ/w8UBwJAH0HamgKFli1D0/cDgt1aKRsyIiBkajPOqYfpIH2OmzjUXl2DjQBcnYNPzP23nDgeJTLHZjvA3F6eZS+qL+hBHp2CFSjh9r5hEHI5LWf8yYeu+fiXuj2dEpxTy4BSscCAS7mcaFpIjOC3TN15a8XSiiv1d5nw1J3XvVVdSdCXBLyTQ7X6UP791na9WoVPtyKsOfHdGN4V1cnOIkpCaGROZGQLYjJzIqtrI6Io6olJUVVV4RG1VQhxWw8BWVUnfSk9FQ88uQ89O+1zrjciqGmx1dYKSoDTFEzCaH0DKetZ6qpr6NipKhta6Pz/vyl71JjjIgm2Mo3dThbeljyxJqar/UU1W/8NoQ8MMt3tOGvIR8uHF1YdJ9djPRUuCiuyQgv0MsjKrmh7gbl1DWxUY4ZuThDq3YelD8tGWvyGgLy1vY6imbeEGLDOpHO7hsJgJURqr/sUfdMIUeQNS3akvcKdANyLxpG6ttwWvR5SKf+OeDogqLHnnfDSKVObzyPWhfkSuc08aOBScttLk84hUfq/nmw8c5a+vGV3LuuaOM8ilM73oei1b0HiQOciMcqb1WLAxXFpjymrKekl9Wf4AqqVC9FkHJbMIdHx1e6qd9XNg5NrO3gaSJT+J0MR/vZGQBOTgYj7stSKQKXNVXJDY31kSRgv+kF24ebC3cBUl1sW4FzlLSg6fQRYu7hOXE+KiplBr8IY64U2sYRs6DULU6B833EN1i/QIcale8TkFiZTnqB9vXuxNN79muxhd9Q6O2QgmRCCZ0QQ4jJKJnpTGv+v9oztv+iwCmx2v+PFGND0YOBw/gIUOqldmXGhMUkLkg/zYNCQBblntjGSPaFO1s10v9n8avPBleHDEAF69UZnZrVe/kugkTRzewS6vfEa97f0yw/q4iTWYFOobntaUn1ZEjgpQEKYF4W/NhTyv0Yd/jpcJkcNPVxmmV74yjU6gZf4ppenXaNNMkCyKPbn0FNpK3wWEJHdmZqV0gZyeMm+7ch9v5jGOnDmQHhB2JdRa3fDkj3rk9+T/0vjk3+XHvmFPPPktb7jXunTtve7t2X9N52URmJf7Oyv7Z1pSZER6MpvtCdeYGG/3KOJiemfEJYDQapiYQomOZSg1yG6ZmOa28yKIOPdT7qhorWaMNs35ggvr6G+bbL/MCjzP6ah2FK4FBKZTczOTe4A20vPvgNDZoDTV5MABkCq/LlcqJyNXIgcCLfEZqKciVoFpdFmDesA2F/EViFPTiYjRMXd1dPV1vB/kbEJBSleHOp5MjjQ3lda6OCtr5fRIdt1PHpfS7wyfXh9tfyRcLaIbr62anLqFf8lc4Y96mu5478FlTWmhS/jNdM+EJUwrPupOtsbzm0OtfvTfGH6QXPh6JozbrrScJ8y+FHD8bb/cUsVwggG/0BH0/sMvm6XGSpkVD6YkrWxDSTe7c+a4a9+DZXxyDkByItiaGDTEM0iu4ZkhD7Yc//CjBmoBQ54/eN/fc9+rwOayDzexK2zg39L2rRpGqZi8+EBartu5PKFZIS7+CS6kU6AePnpik+v3e5Sop2jiixQhuoqm7aMozvXeY41V+Vld4yx/kg4Gj7aU1KWcbDU7WvOfnqsuEoFnZqNFInyV/QiTCN5nZPE7+yH+3MbPICCNKvWjWSgsBAw5vWhq2g8k+yJtInsAQ44pGvpsA+o93SqOOAdyC3tVlhAy8kBF0JFz/cg210yPCDdP7xAzQPhtibvbpfSGstK9AlbQCoPe0sXS0v49hEVCL/h99hL428m9tBO/9ybefFp41hNCTIjwS8uEGDhR0dy1v7/a8ZixbckIvvJrm+BY0FLoZabrhRNHyKcHKnr6S5R8k83m9Hp++unpHLzlzRK4Kve1aWvrXsVreu2rvX03aKXVzpKkaavJDXQ1abeQV46TqbL0dQ1N9DUkmZmnCHqM41HHOAfqm/OfSS4K9QUz6i84iIkjPTGOf2D+8nwat/5Dv8AorzwlLqI8PxllC1r42qlofn899IsIf8EvSmxaRteT6WtFppluQF5yPm0H5ff4GW+Z9FRNX92p9/Tqd9zSLDHteYSAniPjaOrOBVJNenBsCSkb+ECP+P3O8mhOA355PmvXK+xFQG9UdVZuclGwu1FWoJPdy0Drcvdm9umtLDQhcfhBb1RfTnlOadBspjeo+OCnAYPvBgx+qug+qFaSF+EVYN6xnP1wEkFWlp++LWp8WFre0Fj0DuL/n6Bpnjw7SK47206egNWRk90XG/Don2Vs6T8vNHH1M59b7+U8Qm7CD/ByunG6sXvzNnHWWfcvykeYXlt9MTG7sG530/7m2uuFlxMrYDsd9PbtGZvUMz1npmGdh1sFsoXnUwTWI9iKfiQBd/t2N2CJ3TkBQNsVAKhoMpkPe40M8E5YoCEH5vQGfmL1womKR09WGi7PPrg0Ww9iYdkZ2RlwuuJtMcK7BBcPd0eHRbeWvGxLqAXqTpuelRfB0ybaRol6j5A1YOD7aIqKLv+cyWvA+jXRIN+IR2kxVXfYwMsK5FBsP9eu9rxyT8EF1wEWKFLu8fHLl9BdNE9SX8V1atZO69a2Rae/AqkIm3Q/WqMmGlOf6gEbtwUaPjhT5PVtLjaj4+Mb2sYmWofkGMekvJGec49yn4M576+9691P3cKFKYCFOpyXW+zQ432hn13YruyxGLJW4SftnAZi9gSosc+zc3/mKQ38O58cPrVzBK2+gC5uGYi3jtUUlPUwiB3He414ZJexpXEx0ybG5sFWfT2p3v0h5UmdzDJd5raIsZWDNWGLtFUPFrz/di73Drkl4PxquSd/fvrZZ8lGXN/CzTetITYrO97M7UHP010ByufOzPHYpntF73Xz6mKzJ4BDpzMwa9AAFfGC8hK8HdzdjWMteNXRFMACBfQo4pRhrmuuLiHGQS7OwNEm3nnrpJRAxg9haRk5nUd4rqtuIqKZvwlQvnr5B2uUXmrtq2WzUtE/4/MG9JI3MrBXiNP4+SaMrN1rFFFvsPC1xfjPUEa8HQkh9rGB9Paj1MH9rQ65PE6KOLC3iWNig/KfOSOIf67GfMXB/xbjSAusAv+Zivx/LyekzbMK/KXg2qreJCZVzg+31MwnxlW/AdlVth8r13oHPYLpKIB5W4vz80h43r/Ki+1Cd+ZPEWt0MjDa6fXRBZNgznu4PjDY4xZG61IHmLcUGnc/6sA2/98uWmrBVHSlfireILkspnAaLnllZAl0yOQBRbwNFWycUi36BPjPnrnroX1MokJHw0srermzqWv9SQZVLczV2s7TQEneUZ5Dql5P298gdeshJWLYxKPCkkJjGu9CcAzVhWM+MtgR0kixrIiMLHdQljK7YnBIZnzxIGkQC4Jhzs6hE41tz2Cgh/Lo+7NpxUJ2ijgZPv5e6b/95JiCeNKxKPEnoFBy6JYEhb1NPIvVS5gVLZzFXiHexaRzmaX/ciZ8f/ghfs6K04Vn9lfGr4zXLjxWnLNwwMzSf2XopPCKLdM8jwJjFru5w92zthddj52/PgJiWQHZJkReneNqucKR4OdKFmhZfzz8ZTp1+vM40vFwuUWQlzAud2JkrcqwymhjFIV/JQvyTJmAfZoJ+N8jMli6+a02nbZ7Oy9OjMvxEsgCzcvQNflhOnX6y8jjtpWHAqDxha6IOhen/EC4Jl3l3GUNHSfzEqSk81WCWsLtppJfvWrmXhZQW18D0xx9jJlqUfd4qETYpvvTGjZhQgafkY7vUHZbzg6fnD83/fwUmXuVspTJ2T2FyWx/XN5I63GlfZcnZbwABbhCdX+BCMQCRztfWViCQw9/PXj2dGGquds5NMjdMTw3BIe+XQgKHz2KIifGisKjY8Nj4hPt80dG3cvSssJj0zIL/foHivwzsiOJWbmuZS8G7IqSSZGx4qigIMJUf8Bqf6DHZNCww4C/h2e/370LcLb1uFDWjNsYJkShUiFYQa5XTjpYulI6hJZG+RykMR2lHn1G/U4FpdSmJxRdBX6lWNsa9NC6x7ObirfiPV5RkIjWrAJipbelUZLDuFT7jW430zx3aruBLP+dWNsq+uHFbfTKK0pIdV5CcgnBWvGmZowMl2aNkoelWBhXndFR1ROaeFVbxTsimlGyJ++R1dl1bBUN410Aq2cyj4Fgrmu8HNb/FBQ/6+U2lBQVPp7scCM/ncwvqS/PTLMx1zUxd44L8vR3jjM3NdWx+x/ZUHweXynDVll8vqGu8Cy+qrSEvaLoHKF2hGqkOhSmMkQ1GhlsNVAdHxpUHW03AMeeZr27emF+4UH27lV+DS7CscGKGiJCJQz29eFx0bnJMZJWx7VMAq8YXKAme2iDobSQOUis+FFx0aW3wWgO0UEYcqC8klL2moKzDfUF3Ozpp1v3V+2kexy5NREhQQ9kAgQgV0ofw5o6ReFmsSCgmx4UKCEGsqIq6pK28SC4wVlCKgHc+R6HjHwnh7Q8R6e0TAfHzMz/R0RV7oiJq6iK3lTVcFFVgYvp+i7ZLkXVReHZ4YXVHBxf5HPkoS7PwOXKcRc7RYG/knfv3BUrJFSl43JD3RycnHQ0mlJIwJpxX1dVSZL/2s4dMVXBS4XWZYHBcfn+DjcVjWWPZVwkOdUGE6MqQ5yLrmlIyN9RlhDyzEcMgX0Ilhl4M+GIsHgAlN3P9x6WyuamilfjCKYxdelayjMUwLyFGJzuJu7f7Azd/00mwJAhbe73yGi98ZCQDKdbc06kWRV7kLBOmvpCN67+ssKdiYb3eYVGr2+FWXvjgbbCpuhRX17+o54q1WJqr/CT3soyjK2lp66OOcFOw8bSU+eehStiCXerwfFiqIVPZw+9NYerF8HVNtjDhIKULL/oHJh51tpY/NDFQ1Y9rUcyfuzXrqbD6OMBXsyWwi8tV29iyJ05reyzGtnKR/C9emz+z7jmwVBZRVNJwzdQWUN5mq+koaJpVdXq8iy6yqyPuGeZl0zafNLtoDNDavVsevD9iqSi/0QqwislY/PVKvGcPNHOrWoRVqaAFlPHzQgeHU/j2wGzsc9NTgyZ92j6Owff3tA+2s01vBgVMGTKY54jycVZ/kHFWbEAz1AMxkd3qW0DLcUhD0YUhVTNH5H0YtWKR5o77rVdMbmcxxJzRcTZw0xbWMXicZp+3D2j+FFdc3snw7e8oLHMgYltldFbMUuqftSQXbjauLCk5+wa6OCY4HqvE0/61PbIq0lbQFtao1HfcXILdrzmsE2NTzMz/O++vx1b6H/bI0u5UOXIwbo3kuCqo+5oKoIW9sqoY40/cSYqOg2EFI/8pM01K/L++5oUE/suzH8pJt19ezQ8vNzf80ZfYuKbdGXr7ohI4w7+W0XvRR7GPw5TtsFGMh1ljFc2TS19Wp1Y1R8WkrPSBXKThptdmxZiMZHcSEhC/WAVfhwwcr7SgX+X40luZpeU04PtXvblyhQF/Vsipjjo8ahkBNuMvMzoEu2zdNNvX1KOr35j19ah76bT5CCXUPWWAnKE0fTiaUsooh6RfbKHelRxKnikgFYzB6HsX2YCM9SJNMSz/ssqC65lv/Nj4Uuu0I9mQUnmpKcdU7ILs0tj7zoyKjbVtwuWfCX+/94Sk+OeeUvayNj1EzzGdv7teY9ia8sHYh77OauEECO/xb50l7aRsh7yiJmnvfG/C9dZ/Dohrnh2tKNkLj62dEZufNYms+xIHPOJEGIm8Nu+p8/NrM2ozWX8xuIBPD5hBkHeJqaBPg2BAV2BAap6N+TkBfjlZa3lFAQEZRVBaGPeJTDa9FKrpVTDqUtFAkFYZ/8Es3NeFmJnz1y5JX8NWDfZHZVMQ1FpxC7v+5bDQJfB6aBkGo4ipXRGgI3lECSecFA2DkWl+lJs7ayfQ+JVByVjIiqHQqlwsZ6cv50bQmqFs+U44MppDNzcTU08Xcx4DVxdzc3c3AzhNC+SmMQXyc4XlQTMXu2zkGVMRpKQZChztf9XC2d/bUXwp8PQfa0Tld52Z9mL/U77/zx1HsPQEtwS1xLSQoc5xfXFKYaLvdSFx62CPIJ59CAkLC4MpFsS5LPlYWTu2FLT9tHnTzzqJLnygwU8/RycnM0XSAv1Ko2WUQhjE8Su9mzSeT5JKQc+HL7Q0N3ZbHdZEjBzlLlngRRjHMHL0cV8kbT46iml1KdRxEuEMJrPJpQ6HKgfYi0ferUX0wUKZdmNSQn59VCcXJ7XmJCUXY8UFGB74qPRra19CVHoNsCNDMfvAs3LzhHOtYW1fhg7f0xp0M7SWQZwjxBIXYwyO7JVVStzSjUsmRgQXJwSE1AVgrF9mM76elklVQVpdTVVlTrguZFrzMYI54dKhxF8Y1L8vItyoxKqKrOFflz46uUOuVPolSssPMdp696WUtcIvnMXKp40pVaZpg1GBBC/j6+vaLz42KnYn7Uv2klOxfL31Tv42mf5hISqKoiDwupi0rdVxYRF7oqF4k2b8OHmOv/1LY/vTvvDtz33k7HzTYwLDSgrDo/Lr0Cl7/5RIvvag6xIq8BC80t3JHU0NCUl7urIy6qow/BDX2R/8eCH/sKLD/7dvqB0/Tw9bdbyF/8BbA7/B8ACfv5RXi4s/FISFuuq3TPy/xld+aEw/7/MKFgNXAXhBB65quZ3mSNchXEMzjWjNmffEVy77YdFatbn0cri6o3s6doSBL/VEMh8d5R8AGqv7OXj7Ca4f4GMTaYvg+n0kAfMWAUnGXGbq5WubLETFC6/WIYgF1AL8uFFVasHdK2u0/W6QTfiIbHA5gvygmuF4A/RnOkT3Way54spBkO81cmv3dOk0ApZXJgOiMn5By5dK/gTcmD6RLyZLGPEyQCumQpztelDxEyeZUacZg8r6CL+WCHfqB23tFDzijCT7c2n2ArJAFtxcrcVQzi4EqKJ6RNUM9nAiJOvVkoJxLqiODYDRAJrtvBsknxFNpJyCU2M1VykPk3yDYNVohi3tQoHgVZp6OZCZDnjOkFDskq4nijcegh9PuvE5JKvQ50g+jd1bdeqZ1sdixjTOjCv6diLvkJ1nJdYR4410sawNoJ+zUjOShINpFgzFZyEmXM6HtqB8mpjAeduDMj/r/PZkuf+D7hl/haureDS0u+otzR8X3bZVuu5csq/2umBcedopEW8gHvF349HyjOhk4pHKvnj+bNyaIF8NLGTbM6MmQDumb/1qAmimZ+PBplWJmXh6LqSU9bIxFQDfVc/Ooi7qETTFD9xKpmamfyj8OaZZEJ1OAXGegvRs0KesdMf8OOk8lvar+fGgFrQByzkYE7awz8Q118VeWAeDX/e4QBmRp+xoE2+m7GMlofvvD/oaG9B4fka2H8Se6HrFqJLTH+wgH5KKNfdqN0JIDb2+w0mUSZMl/ar/dZgRnxZN8SfnmUeAnHhOHQfyB3h9xrb8lTF+40BiaA+G/tMsBstPAFki2qMQUS/5tcNCQScSy8XOQVfxRiEALnJ2ldCUowtWCR/bx1fBoCnf+puD8A7of3bP+v8X7X5l3kBy6EAAiwuW1oFsPzgUpZe2gHEfVPfVyJbQ+Pfi3eaa0BJkhD7gF+HchvzHPsXu7Bjn49F5zN8RXCq42hEmtMpgjdPSik1+KfGC9Rhhjki5BGFOh7P2jY+iolml5qNctvK6etiatjdxQ1O45ZT/UftEOE3bqvtRDIu1wZeAkdbRF7T2U5EBo1LadSY/qpN8LQwvoPx7dm69oGa7qbVQwQGv8Rx1KnFcVKDBsR6FEuP0M8z0krZRXo2dGVIpgrQZACxNubaIRKbn2lHsmgpZjlM0jyXZTtIjE+SYmfuBjMu9EnBAg0J7SSxU5jouEQW2Q64r7UQXTsi1rKzExqu1A+X6jlOatkw28nEF02OfXiKPKIS2pJjVzEZbbh3ISyxJ723GZchu0mFSaVLr173282DSdX1rOok5z8RfYdVfiCXH0hnhKAmyqsd8skpPf7wplGBVT7cT4/7Y57eJEJrEuNezyksAufPrcCIunfeVFXdJ2HqpdFkoZ1KqYlMukBm/Ja/KOWwUGBVA2qzUUANCRoyyqbbUiKXJc7FH9nO5zSHfEcye4+oFvHDWEbe54KHMapyEvmBaIey6DQ17eZMJ5Ccps8yPphAoIU0opigjziaqITS2h0IHAZOJg0ztFwK+wTcwrzSCwDrvIzxyBPmHfMMp0JDJH6JwCfgTFgBHAL+5BPz43dD42VNaMz8iDuhIZIjIvBGKEtHgB+QcNKFyZXG6iChNoVd1bfMfWhI0wE4A1wvQzAyX4bCzEmN3qWmgWUYfPyXYZ1S1F1muqjkufMQgMCRPQfeuAniJ9At5KbEXeAZLuxWVeHGxnWjrMG7WLQ1mFfOaLe47BD4atnWdUN2Z13y3lDgbc+HC6sgr7+IwIsjc7PHX98u5CYJ6wVv6hZ2bQUWvb15EHej0/q5rrPikXjbcGDnOhsJmr8hO7LRvBu4V/sNalTIU6RBh6Jrts38i4GTzfts3QMAAAA=", + "ok": true, + "headers": [ + [ + "content-type", + "font/woff2" + ] + ], + "status": 200, + "status_text": "" + }, + "https://localhost:6007/index.js?_file_hash=8f39b027": { + "data": "dmFyIENMT1NVUkVfTk9fREVQUyA9IHRydWU7CndpbmRvdy5wb2x5bWVyU2tpcExvYWRpbmdGb250Um9ib3RvID0gdHJ1ZTsKLyoqIHZpbTogZXQ6dHM9NDpzdz00OnN0cz00CiAqIEBsaWNlbnNlIFJlcXVpcmVKUyAyLjMuNiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycy4KICogUmVsZWFzZWQgdW5kZXIgTUlUIGxpY2Vuc2UsIGh0dHBzOi8vZ2l0aHViLmNvbS9yZXF1aXJlanMvcmVxdWlyZWpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0UKICovCi8vTm90IHVzaW5nIHN0cmljdDogdW5ldmVuIHN0cmljdCBzdXBwb3J0IGluIGJyb3dzZXJzLCAjMzkyLCBhbmQgY2F1c2VzCi8vcHJvYmxlbXMgd2l0aCByZXF1aXJlanMuZXhlYygpL3RyYW5zcGlsZXIgcGx1Z2lucyB0aGF0IG1heSBub3QgYmUgc3RyaWN0LgovKmpzbGludCByZWdleHA6IHRydWUsIG5vbWVuOiB0cnVlLCBzbG9wcHk6IHRydWUgKi8KLypnbG9iYWwgd2luZG93LCBuYXZpZ2F0b3IsIGRvY3VtZW50LCBpbXBvcnRTY3JpcHRzLCBzZXRUaW1lb3V0LCBvcGVyYSAqLwoKdmFyIHJlcXVpcmVqcywgcmVxdWlyZSwgZGVmaW5lOwooZnVuY3Rpb24gKGdsb2JhbCwgc2V0VGltZW91dCkgewogICAgdmFyIHJlcSwgcywgaGVhZCwgYmFzZUVsZW1lbnQsIGRhdGFNYWluLCBzcmMsCiAgICAgICAgaW50ZXJhY3RpdmVTY3JpcHQsIGN1cnJlbnRseUFkZGluZ1NjcmlwdCwgbWFpblNjcmlwdCwgc3ViUGF0aCwKICAgICAgICB2ZXJzaW9uID0gJzIuMy42JywKICAgICAgICBjb21tZW50UmVnRXhwID0gL1wvXCpbXHNcU10qP1wqXC98KFteOiInPV18XilcL1wvLiokL21nLAogICAgICAgIGNqc1JlcXVpcmVSZWdFeHAgPSAvW14uXVxzKnJlcXVpcmVccypcKFxzKlsiJ10oW14nIlxzXSspWyInXVxzKlwpL2csCiAgICAgICAganNTdWZmaXhSZWdFeHAgPSAvXC5qcyQvLAogICAgICAgIGN1cnJEaXJSZWdFeHAgPSAvXlwuXC8vLAogICAgICAgIG9wID0gT2JqZWN0LnByb3RvdHlwZSwKICAgICAgICBvc3RyaW5nID0gb3AudG9TdHJpbmcsCiAgICAgICAgaGFzT3duID0gb3AuaGFzT3duUHJvcGVydHksCiAgICAgICAgaXNCcm93c2VyID0gISEodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmRvY3VtZW50KSwKICAgICAgICBpc1dlYldvcmtlciA9ICFpc0Jyb3dzZXIgJiYgdHlwZW9mIGltcG9ydFNjcmlwdHMgIT09ICd1bmRlZmluZWQnLAogICAgICAgIC8vUFMzIGluZGljYXRlcyBsb2FkZWQgYW5kIGNvbXBsZXRlLCBidXQgbmVlZCB0byB3YWl0IGZvciBjb21wbGV0ZQogICAgICAgIC8vc3BlY2lmaWNhbGx5LiBTZXF1ZW5jZSBpcyAnbG9hZGluZycsICdsb2FkZWQnLCBleGVjdXRpb24sCiAgICAgICAgLy8gdGhlbiAnY29tcGxldGUnLiBUaGUgVUEgY2hlY2sgaXMgdW5mb3J0dW5hdGUsIGJ1dCBub3Qgc3VyZSBob3cKICAgICAgICAvL3RvIGZlYXR1cmUgdGVzdCB3L28gY2F1c2luZyBwZXJmIGlzc3Vlcy4KICAgICAgICByZWFkeVJlZ0V4cCA9IGlzQnJvd3NlciAmJiBuYXZpZ2F0b3IucGxhdGZvcm0gPT09ICdQTEFZU1RBVElPTiAzJyA/CiAgICAgICAgICAgICAgICAgICAgICAvXmNvbXBsZXRlJC8gOiAvXihjb21wbGV0ZXxsb2FkZWQpJC8sCiAgICAgICAgZGVmQ29udGV4dE5hbWUgPSAnXycsCiAgICAgICAgLy9PaCB0aGUgdHJhZ2VkeSwgZGV0ZWN0aW5nIG9wZXJhLiBTZWUgdGhlIHVzYWdlIG9mIGlzT3BlcmEgZm9yIHJlYXNvbi4KICAgICAgICBpc09wZXJhID0gdHlwZW9mIG9wZXJhICE9PSAndW5kZWZpbmVkJyAmJiBvcGVyYS50b1N0cmluZygpID09PSAnW29iamVjdCBPcGVyYV0nLAogICAgICAgIGNvbnRleHRzID0ge30sCiAgICAgICAgY2ZnID0ge30sCiAgICAgICAgZ2xvYmFsRGVmUXVldWUgPSBbXSwKICAgICAgICB1c2VJbnRlcmFjdGl2ZSA9IGZhbHNlOwoKICAgIC8vQ291bGQgbWF0Y2ggc29tZXRoaW5nIGxpa2UgJykvL2NvbW1lbnQnLCBkbyBub3QgbG9zZSB0aGUgcHJlZml4IHRvIGNvbW1lbnQuCiAgICBmdW5jdGlvbiBjb21tZW50UmVwbGFjZShtYXRjaCwgc2luZ2xlUHJlZml4KSB7CiAgICAgICAgcmV0dXJuIHNpbmdsZVByZWZpeCB8fCAnJzsKICAgIH0KCiAgICBmdW5jdGlvbiBpc0Z1bmN0aW9uKGl0KSB7CiAgICAgICAgcmV0dXJuIG9zdHJpbmcuY2FsbChpdCkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7CiAgICB9CgogICAgZnVuY3Rpb24gaXNBcnJheShpdCkgewogICAgICAgIHJldHVybiBvc3RyaW5nLmNhbGwoaXQpID09PSAnW29iamVjdCBBcnJheV0nOwogICAgfQoKICAgIC8qKgogICAgICogSGVscGVyIGZ1bmN0aW9uIGZvciBpdGVyYXRpbmcgb3ZlciBhbiBhcnJheS4gSWYgdGhlIGZ1bmMgcmV0dXJucwogICAgICogYSB0cnVlIHZhbHVlLCBpdCB3aWxsIGJyZWFrIG91dCBvZiB0aGUgbG9vcC4KICAgICAqLwogICAgZnVuY3Rpb24gZWFjaChhcnksIGZ1bmMpIHsKICAgICAgICBpZiAoYXJ5KSB7CiAgICAgICAgICAgIHZhciBpOwogICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXJ5Lmxlbmd0aDsgaSArPSAxKSB7CiAgICAgICAgICAgICAgICBpZiAoYXJ5W2ldICYmIGZ1bmMoYXJ5W2ldLCBpLCBhcnkpKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBIZWxwZXIgZnVuY3Rpb24gZm9yIGl0ZXJhdGluZyBvdmVyIGFuIGFycmF5IGJhY2t3YXJkcy4gSWYgdGhlIGZ1bmMKICAgICAqIHJldHVybnMgYSB0cnVlIHZhbHVlLCBpdCB3aWxsIGJyZWFrIG91dCBvZiB0aGUgbG9vcC4KICAgICAqLwogICAgZnVuY3Rpb24gZWFjaFJldmVyc2UoYXJ5LCBmdW5jKSB7CiAgICAgICAgaWYgKGFyeSkgewogICAgICAgICAgICB2YXIgaTsKICAgICAgICAgICAgZm9yIChpID0gYXJ5Lmxlbmd0aCAtIDE7IGkgPiAtMTsgaSAtPSAxKSB7CiAgICAgICAgICAgICAgICBpZiAoYXJ5W2ldICYmIGZ1bmMoYXJ5W2ldLCBpLCBhcnkpKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gaGFzUHJvcChvYmosIHByb3ApIHsKICAgICAgICByZXR1cm4gaGFzT3duLmNhbGwob2JqLCBwcm9wKTsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRPd24ob2JqLCBwcm9wKSB7CiAgICAgICAgcmV0dXJuIGhhc1Byb3Aob2JqLCBwcm9wKSAmJiBvYmpbcHJvcF07CiAgICB9CgogICAgLyoqCiAgICAgKiBDeWNsZXMgb3ZlciBwcm9wZXJ0aWVzIGluIGFuIG9iamVjdCBhbmQgY2FsbHMgYSBmdW5jdGlvbiBmb3IgZWFjaAogICAgICogcHJvcGVydHkgdmFsdWUuIElmIHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgdHJ1dGh5IHZhbHVlLCB0aGVuIHRoZQogICAgICogaXRlcmF0aW9uIGlzIHN0b3BwZWQuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGVhY2hQcm9wKG9iaiwgZnVuYykgewogICAgICAgIHZhciBwcm9wOwogICAgICAgIGZvciAocHJvcCBpbiBvYmopIHsKICAgICAgICAgICAgaWYgKGhhc1Byb3Aob2JqLCBwcm9wKSkgewogICAgICAgICAgICAgICAgaWYgKGZ1bmMob2JqW3Byb3BdLCBwcm9wKSkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogU2ltcGxlIGZ1bmN0aW9uIHRvIG1peCBpbiBwcm9wZXJ0aWVzIGZyb20gc291cmNlIGludG8gdGFyZ2V0LAogICAgICogYnV0IG9ubHkgaWYgdGFyZ2V0IGRvZXMgbm90IGFscmVhZHkgaGF2ZSBhIHByb3BlcnR5IG9mIHRoZSBzYW1lIG5hbWUuCiAgICAgKi8KICAgIGZ1bmN0aW9uIG1peGluKHRhcmdldCwgc291cmNlLCBmb3JjZSwgZGVlcFN0cmluZ01peGluKSB7CiAgICAgICAgaWYgKHNvdXJjZSkgewogICAgICAgICAgICBlYWNoUHJvcChzb3VyY2UsIGZ1bmN0aW9uICh2YWx1ZSwgcHJvcCkgewogICAgICAgICAgICAgICAgaWYgKGZvcmNlIHx8ICFoYXNQcm9wKHRhcmdldCwgcHJvcCkpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoZGVlcFN0cmluZ01peGluICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYKICAgICAgICAgICAgICAgICAgICAgICAgIWlzQXJyYXkodmFsdWUpICYmICFpc0Z1bmN0aW9uKHZhbHVlKSAmJgogICAgICAgICAgICAgICAgICAgICAgICAhKHZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSkgewoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0YXJnZXRbcHJvcF0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFtwcm9wXSA9IHt9OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIG1peGluKHRhcmdldFtwcm9wXSwgdmFsdWUsIGZvcmNlLCBkZWVwU3RyaW5nTWl4aW4pOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFtwcm9wXSA9IHZhbHVlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0YXJnZXQ7CiAgICB9CgogICAgLy9TaW1pbGFyIHRvIEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLCBidXQgdGhlICd0aGlzJyBvYmplY3QgaXMgc3BlY2lmaWVkCiAgICAvL2ZpcnN0LCBzaW5jZSBpdCBpcyBlYXNpZXIgdG8gcmVhZC9maWd1cmUgb3V0IHdoYXQgJ3RoaXMnIHdpbGwgYmUuCiAgICBmdW5jdGlvbiBiaW5kKG9iaiwgZm4pIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgewogICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkob2JqLCBhcmd1bWVudHMpOwogICAgICAgIH07CiAgICB9CgogICAgZnVuY3Rpb24gc2NyaXB0cygpIHsKICAgICAgICByZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NjcmlwdCcpOwogICAgfQoKICAgIGZ1bmN0aW9uIGRlZmF1bHRPbkVycm9yKGVycikgewogICAgICAgIHRocm93IGVycjsKICAgIH0KCiAgICAvL0FsbG93IGdldHRpbmcgYSBnbG9iYWwgdGhhdCBpcyBleHByZXNzZWQgaW4KICAgIC8vZG90IG5vdGF0aW9uLCBsaWtlICdhLmIuYycuCiAgICBmdW5jdGlvbiBnZXRHbG9iYWwodmFsdWUpIHsKICAgICAgICBpZiAoIXZhbHVlKSB7CiAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICAgICB9CiAgICAgICAgdmFyIGcgPSBnbG9iYWw7CiAgICAgICAgZWFjaCh2YWx1ZS5zcGxpdCgnLicpLCBmdW5jdGlvbiAocGFydCkgewogICAgICAgICAgICBnID0gZ1twYXJ0XTsKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gZzsKICAgIH0KCiAgICAvKioKICAgICAqIENvbnN0cnVjdHMgYW4gZXJyb3Igd2l0aCBhIHBvaW50ZXIgdG8gYW4gVVJMIHdpdGggbW9yZSBpbmZvcm1hdGlvbi4KICAgICAqIEBwYXJhbSB7U3RyaW5nfSBpZCB0aGUgZXJyb3IgSUQgdGhhdCBtYXBzIHRvIGFuIElEIG9uIGEgd2ViIHBhZ2UuCiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSBodW1hbiByZWFkYWJsZSBlcnJvci4KICAgICAqIEBwYXJhbSB7RXJyb3J9IFtlcnJdIHRoZSBvcmlnaW5hbCBlcnJvciwgaWYgdGhlcmUgaXMgb25lLgogICAgICoKICAgICAqIEByZXR1cm5zIHtFcnJvcn0KICAgICAqLwogICAgZnVuY3Rpb24gbWFrZUVycm9yKGlkLCBtc2csIGVyciwgcmVxdWlyZU1vZHVsZXMpIHsKICAgICAgICB2YXIgZSA9IG5ldyBFcnJvcihtc2cgKyAnXG5odHRwczovL3JlcXVpcmVqcy5vcmcvZG9jcy9lcnJvcnMuaHRtbCMnICsgaWQpOwogICAgICAgIGUucmVxdWlyZVR5cGUgPSBpZDsKICAgICAgICBlLnJlcXVpcmVNb2R1bGVzID0gcmVxdWlyZU1vZHVsZXM7CiAgICAgICAgaWYgKGVycikgewogICAgICAgICAgICBlLm9yaWdpbmFsRXJyb3IgPSBlcnI7CiAgICAgICAgfQogICAgICAgIHJldHVybiBlOwogICAgfQoKICAgIGlmICh0eXBlb2YgZGVmaW5lICE9PSAndW5kZWZpbmVkJykgewogICAgICAgIC8vSWYgYSBkZWZpbmUgaXMgYWxyZWFkeSBpbiBwbGF5IHZpYSBhbm90aGVyIEFNRCBsb2FkZXIsCiAgICAgICAgLy9kbyBub3Qgb3ZlcndyaXRlLgogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAodHlwZW9mIHJlcXVpcmVqcyAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICBpZiAoaXNGdW5jdGlvbihyZXF1aXJlanMpKSB7CiAgICAgICAgICAgIC8vRG8gbm90IG92ZXJ3cml0ZSBhbiBleGlzdGluZyByZXF1aXJlanMgaW5zdGFuY2UuCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgY2ZnID0gcmVxdWlyZWpzOwogICAgICAgIHJlcXVpcmVqcyA9IHVuZGVmaW5lZDsKICAgIH0KCiAgICAvL0FsbG93IGZvciBhIHJlcXVpcmUgY29uZmlnIG9iamVjdAogICAgaWYgKHR5cGVvZiByZXF1aXJlICE9PSAndW5kZWZpbmVkJyAmJiAhaXNGdW5jdGlvbihyZXF1aXJlKSkgewogICAgICAgIC8vYXNzdW1lIGl0IGlzIGEgY29uZmlnIG9iamVjdC4KICAgICAgICBjZmcgPSByZXF1aXJlOwogICAgICAgIHJlcXVpcmUgPSB1bmRlZmluZWQ7CiAgICB9CgogICAgZnVuY3Rpb24gbmV3Q29udGV4dChjb250ZXh0TmFtZSkgewogICAgICAgIHZhciBpbkNoZWNrTG9hZGVkLCBNb2R1bGUsIGNvbnRleHQsIGhhbmRsZXJzLAogICAgICAgICAgICBjaGVja0xvYWRlZFRpbWVvdXRJZCwKICAgICAgICAgICAgY29uZmlnID0gewogICAgICAgICAgICAgICAgLy9EZWZhdWx0cy4gRG8gbm90IHNldCBhIGRlZmF1bHQgZm9yIG1hcAogICAgICAgICAgICAgICAgLy9jb25maWcgdG8gc3BlZWQgdXAgbm9ybWFsaXplKCksIHdoaWNoCiAgICAgICAgICAgICAgICAvL3dpbGwgcnVuIGZhc3RlciBpZiB0aGVyZSBpcyBubyBkZWZhdWx0LgogICAgICAgICAgICAgICAgd2FpdFNlY29uZHM6IDcsCiAgICAgICAgICAgICAgICBiYXNlVXJsOiAnLi8nLAogICAgICAgICAgICAgICAgcGF0aHM6IHt9LAogICAgICAgICAgICAgICAgYnVuZGxlczoge30sCiAgICAgICAgICAgICAgICBwa2dzOiB7fSwKICAgICAgICAgICAgICAgIHNoaW06IHt9LAogICAgICAgICAgICAgICAgY29uZmlnOiB7fQogICAgICAgICAgICB9LAogICAgICAgICAgICByZWdpc3RyeSA9IHt9LAogICAgICAgICAgICAvL3JlZ2lzdHJ5IG9mIGp1c3QgZW5hYmxlZCBtb2R1bGVzLCB0byBzcGVlZAogICAgICAgICAgICAvL2N5Y2xlIGJyZWFraW5nIGNvZGUgd2hlbiBsb3RzIG9mIG1vZHVsZXMKICAgICAgICAgICAgLy9hcmUgcmVnaXN0ZXJlZCwgYnV0IG5vdCBhY3RpdmF0ZWQuCiAgICAgICAgICAgIGVuYWJsZWRSZWdpc3RyeSA9IHt9LAogICAgICAgICAgICB1bmRlZkV2ZW50cyA9IHt9LAogICAgICAgICAgICBkZWZRdWV1ZSA9IFtdLAogICAgICAgICAgICBkZWZpbmVkID0ge30sCiAgICAgICAgICAgIHVybEZldGNoZWQgPSB7fSwKICAgICAgICAgICAgYnVuZGxlc01hcCA9IHt9LAogICAgICAgICAgICByZXF1aXJlQ291bnRlciA9IDEsCiAgICAgICAgICAgIHVubm9ybWFsaXplZENvdW50ZXIgPSAxOwoKICAgICAgICAvKioKICAgICAgICAgKiBUcmltcyB0aGUgLiBhbmQgLi4gZnJvbSBhbiBhcnJheSBvZiBwYXRoIHNlZ21lbnRzLgogICAgICAgICAqIEl0IHdpbGwga2VlcCBhIGxlYWRpbmcgcGF0aCBzZWdtZW50IGlmIGEgLi4gd2lsbCBiZWNvbWUKICAgICAgICAgKiB0aGUgZmlyc3QgcGF0aCBzZWdtZW50LCB0byBoZWxwIHdpdGggbW9kdWxlIG5hbWUgbG9va3VwcywKICAgICAgICAgKiB3aGljaCBhY3QgbGlrZSBwYXRocywgYnV0IGNhbiBiZSByZW1hcHBlZC4gQnV0IHRoZSBlbmQgcmVzdWx0LAogICAgICAgICAqIGFsbCBwYXRocyB0aGF0IHVzZSB0aGlzIGZ1bmN0aW9uIHNob3VsZCBsb29rIG5vcm1hbGl6ZWQuCiAgICAgICAgICogTk9URTogdGhpcyBtZXRob2QgTU9ESUZJRVMgdGhlIGlucHV0IGFycmF5LgogICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IGFyeSB0aGUgYXJyYXkgb2YgcGF0aCBzZWdtZW50cy4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiB0cmltRG90cyhhcnkpIHsKICAgICAgICAgICAgdmFyIGksIHBhcnQ7CiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBhcnkubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIHBhcnQgPSBhcnlbaV07CiAgICAgICAgICAgICAgICBpZiAocGFydCA9PT0gJy4nKSB7CiAgICAgICAgICAgICAgICAgICAgYXJ5LnNwbGljZShpLCAxKTsKICAgICAgICAgICAgICAgICAgICBpIC09IDE7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcnQgPT09ICcuLicpIHsKICAgICAgICAgICAgICAgICAgICAvLyBJZiBhdCB0aGUgc3RhcnQsIG9yIHByZXZpb3VzIHZhbHVlIGlzIHN0aWxsIC4uLAogICAgICAgICAgICAgICAgICAgIC8vIGtlZXAgdGhlbSBzbyB0aGF0IHdoZW4gY29udmVydGVkIHRvIGEgcGF0aCBpdCBtYXkKICAgICAgICAgICAgICAgICAgICAvLyBzdGlsbCB3b3JrIHdoZW4gY29udmVydGVkIHRvIGEgcGF0aCwgZXZlbiB0aG91Z2gKICAgICAgICAgICAgICAgICAgICAvLyBhcyBhbiBJRCBpdCBpcyBsZXNzIHRoYW4gaWRlYWwuIEluIGxhcmdlciBwb2ludAogICAgICAgICAgICAgICAgICAgIC8vIHJlbGVhc2VzLCBtYXkgYmUgYmV0dGVyIHRvIGp1c3Qga2ljayBvdXQgYW4gZXJyb3IuCiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT09IDAgfHwgKGkgPT09IDEgJiYgYXJ5WzJdID09PSAnLi4nKSB8fCBhcnlbaSAtIDFdID09PSAnLi4nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaSA+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgYXJ5LnNwbGljZShpIC0gMSwgMik7CiAgICAgICAgICAgICAgICAgICAgICAgIGkgLT0gMjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEdpdmVuIGEgcmVsYXRpdmUgbW9kdWxlIG5hbWUsIGxpa2UgLi9zb21ldGhpbmcsIG5vcm1hbGl6ZSBpdCB0bwogICAgICAgICAqIGEgcmVhbCBuYW1lIHRoYXQgY2FuIGJlIG1hcHBlZCB0byBhIHBhdGguCiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgdGhlIHJlbGF0aXZlIG5hbWUKICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gYmFzZU5hbWUgYSByZWFsIG5hbWUgdGhhdCB0aGUgbmFtZSBhcmcgaXMgcmVsYXRpdmUKICAgICAgICAgKiB0by4KICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IGFwcGx5TWFwIGFwcGx5IHRoZSBtYXAgY29uZmlnIHRvIHRoZSB2YWx1ZS4gU2hvdWxkCiAgICAgICAgICogb25seSBiZSBkb25lIGlmIHRoaXMgbm9ybWFsaXphdGlvbiBpcyBmb3IgYSBkZXBlbmRlbmN5IElELgogICAgICAgICAqIEByZXR1cm5zIHtTdHJpbmd9IG5vcm1hbGl6ZWQgbmFtZQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZShuYW1lLCBiYXNlTmFtZSwgYXBwbHlNYXApIHsKICAgICAgICAgICAgdmFyIHBrZ01haW4sIG1hcFZhbHVlLCBuYW1lUGFydHMsIGksIGosIG5hbWVTZWdtZW50LCBsYXN0SW5kZXgsCiAgICAgICAgICAgICAgICBmb3VuZE1hcCwgZm91bmRJLCBmb3VuZFN0YXJNYXAsIHN0YXJJLCBub3JtYWxpemVkQmFzZVBhcnRzLAogICAgICAgICAgICAgICAgYmFzZVBhcnRzID0gKGJhc2VOYW1lICYmIGJhc2VOYW1lLnNwbGl0KCcvJykpLAogICAgICAgICAgICAgICAgbWFwID0gY29uZmlnLm1hcCwKICAgICAgICAgICAgICAgIHN0YXJNYXAgPSBtYXAgJiYgbWFwWycqJ107CgogICAgICAgICAgICAvL0FkanVzdCBhbnkgcmVsYXRpdmUgcGF0aHMuCiAgICAgICAgICAgIGlmIChuYW1lKSB7CiAgICAgICAgICAgICAgICBuYW1lID0gbmFtZS5zcGxpdCgnLycpOwogICAgICAgICAgICAgICAgbGFzdEluZGV4ID0gbmFtZS5sZW5ndGggLSAxOwoKICAgICAgICAgICAgICAgIC8vIElmIHdhbnRpbmcgbm9kZSBJRCBjb21wYXRpYmlsaXR5LCBzdHJpcCAuanMgZnJvbSBlbmQKICAgICAgICAgICAgICAgIC8vIG9mIElEcy4gSGF2ZSB0byBkbyB0aGlzIGhlcmUsIGFuZCBub3QgaW4gbmFtZVRvVXJsCiAgICAgICAgICAgICAgICAvLyBiZWNhdXNlIG5vZGUgYWxsb3dzIGVpdGhlciAuanMgb3Igbm9uIC5qcyB0byBtYXAKICAgICAgICAgICAgICAgIC8vIHRvIHNhbWUgZmlsZS4KICAgICAgICAgICAgICAgIGlmIChjb25maWcubm9kZUlkQ29tcGF0ICYmIGpzU3VmZml4UmVnRXhwLnRlc3QobmFtZVtsYXN0SW5kZXhdKSkgewogICAgICAgICAgICAgICAgICAgIG5hbWVbbGFzdEluZGV4XSA9IG5hbWVbbGFzdEluZGV4XS5yZXBsYWNlKGpzU3VmZml4UmVnRXhwLCAnJyk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gU3RhcnRzIHdpdGggYSAnLicgc28gbmVlZCB0aGUgYmFzZU5hbWUKICAgICAgICAgICAgICAgIGlmIChuYW1lWzBdLmNoYXJBdCgwKSA9PT0gJy4nICYmIGJhc2VQYXJ0cykgewogICAgICAgICAgICAgICAgICAgIC8vQ29udmVydCBiYXNlTmFtZSB0byBhcnJheSwgYW5kIGxvcCBvZmYgdGhlIGxhc3QgcGFydCwKICAgICAgICAgICAgICAgICAgICAvL3NvIHRoYXQgLiBtYXRjaGVzIHRoYXQgJ2RpcmVjdG9yeScgYW5kIG5vdCBuYW1lIG9mIHRoZSBiYXNlTmFtZSdzCiAgICAgICAgICAgICAgICAgICAgLy9tb2R1bGUuIEZvciBpbnN0YW5jZSwgYmFzZU5hbWUgb2YgJ29uZS90d28vdGhyZWUnLCBtYXBzIHRvCiAgICAgICAgICAgICAgICAgICAgLy8nb25lL3R3by90aHJlZS5qcycsIGJ1dCB3ZSB3YW50IHRoZSBkaXJlY3RvcnksICdvbmUvdHdvJyBmb3IKICAgICAgICAgICAgICAgICAgICAvL3RoaXMgbm9ybWFsaXphdGlvbi4KICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkQmFzZVBhcnRzID0gYmFzZVBhcnRzLnNsaWNlKDAsIGJhc2VQYXJ0cy5sZW5ndGggLSAxKTsKICAgICAgICAgICAgICAgICAgICBuYW1lID0gbm9ybWFsaXplZEJhc2VQYXJ0cy5jb25jYXQobmFtZSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdHJpbURvdHMobmFtZSk7CiAgICAgICAgICAgICAgICBuYW1lID0gbmFtZS5qb2luKCcvJyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vQXBwbHkgbWFwIGNvbmZpZyBpZiBhdmFpbGFibGUuCiAgICAgICAgICAgIGlmIChhcHBseU1hcCAmJiBtYXAgJiYgKGJhc2VQYXJ0cyB8fCBzdGFyTWFwKSkgewogICAgICAgICAgICAgICAgbmFtZVBhcnRzID0gbmFtZS5zcGxpdCgnLycpOwoKICAgICAgICAgICAgICAgIG91dGVyTG9vcDogZm9yIChpID0gbmFtZVBhcnRzLmxlbmd0aDsgaSA+IDA7IGkgLT0gMSkgewogICAgICAgICAgICAgICAgICAgIG5hbWVTZWdtZW50ID0gbmFtZVBhcnRzLnNsaWNlKDAsIGkpLmpvaW4oJy8nKTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKGJhc2VQYXJ0cykgewogICAgICAgICAgICAgICAgICAgICAgICAvL0ZpbmQgdGhlIGxvbmdlc3QgYmFzZU5hbWUgc2VnbWVudCBtYXRjaCBpbiB0aGUgY29uZmlnLgogICAgICAgICAgICAgICAgICAgICAgICAvL1NvLCBkbyBqb2lucyBvbiB0aGUgYmlnZ2VzdCB0byBzbWFsbGVzdCBsZW5ndGhzIG9mIGJhc2VQYXJ0cy4KICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gYmFzZVBhcnRzLmxlbmd0aDsgaiA+IDA7IGogLT0gMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwVmFsdWUgPSBnZXRPd24obWFwLCBiYXNlUGFydHMuc2xpY2UoMCwgaikuam9pbignLycpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2Jhc2VOYW1lIHNlZ21lbnQgaGFzIGNvbmZpZywgZmluZCBpZiBpdCBoYXMgb25lIGZvcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy90aGlzIG5hbWUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFwVmFsdWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBWYWx1ZSA9IGdldE93bihtYXBWYWx1ZSwgbmFtZVNlZ21lbnQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXBWYWx1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL01hdGNoLCB1cGRhdGUgbmFtZSB0byB0aGUgbmV3IHZhbHVlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZE1hcCA9IG1hcFZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZEkgPSBpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvdXRlckxvb3A7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAvL0NoZWNrIGZvciBhIHN0YXIgbWFwIG1hdGNoLCBidXQganVzdCBob2xkIG9uIHRvIGl0LAogICAgICAgICAgICAgICAgICAgIC8vaWYgdGhlcmUgaXMgYSBzaG9ydGVyIHNlZ21lbnQgbWF0Y2ggbGF0ZXIgaW4gYSBtYXRjaGluZwogICAgICAgICAgICAgICAgICAgIC8vY29uZmlnLCB0aGVuIGZhdm9yIG92ZXIgdGhpcyBzdGFyIG1hcC4KICAgICAgICAgICAgICAgICAgICBpZiAoIWZvdW5kU3Rhck1hcCAmJiBzdGFyTWFwICYmIGdldE93bihzdGFyTWFwLCBuYW1lU2VnbWVudCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRTdGFyTWFwID0gZ2V0T3duKHN0YXJNYXAsIG5hbWVTZWdtZW50KTsKICAgICAgICAgICAgICAgICAgICAgICAgc3RhckkgPSBpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIWZvdW5kTWFwICYmIGZvdW5kU3Rhck1hcCkgewogICAgICAgICAgICAgICAgICAgIGZvdW5kTWFwID0gZm91bmRTdGFyTWFwOwogICAgICAgICAgICAgICAgICAgIGZvdW5kSSA9IHN0YXJJOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChmb3VuZE1hcCkgewogICAgICAgICAgICAgICAgICAgIG5hbWVQYXJ0cy5zcGxpY2UoMCwgZm91bmRJLCBmb3VuZE1hcCk7CiAgICAgICAgICAgICAgICAgICAgbmFtZSA9IG5hbWVQYXJ0cy5qb2luKCcvJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIElmIHRoZSBuYW1lIHBvaW50cyB0byBhIHBhY2thZ2UncyBuYW1lLCB1c2UKICAgICAgICAgICAgLy8gdGhlIHBhY2thZ2UgbWFpbiBpbnN0ZWFkLgogICAgICAgICAgICBwa2dNYWluID0gZ2V0T3duKGNvbmZpZy5wa2dzLCBuYW1lKTsKCiAgICAgICAgICAgIHJldHVybiBwa2dNYWluID8gcGtnTWFpbiA6IG5hbWU7CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiByZW1vdmVTY3JpcHQobmFtZSkgewogICAgICAgICAgICBpZiAoaXNCcm93c2VyKSB7CiAgICAgICAgICAgICAgICBlYWNoKHNjcmlwdHMoKSwgZnVuY3Rpb24gKHNjcmlwdE5vZGUpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoc2NyaXB0Tm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtcmVxdWlyZW1vZHVsZScpID09PSBuYW1lICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHROb2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1yZXF1aXJlY29udGV4dCcpID09PSBjb250ZXh0LmNvbnRleHROYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdE5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzY3JpcHROb2RlKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIGhhc1BhdGhGYWxsYmFjayhpZCkgewogICAgICAgICAgICB2YXIgcGF0aENvbmZpZyA9IGdldE93bihjb25maWcucGF0aHMsIGlkKTsKICAgICAgICAgICAgaWYgKHBhdGhDb25maWcgJiYgaXNBcnJheShwYXRoQ29uZmlnKSAmJiBwYXRoQ29uZmlnLmxlbmd0aCA+IDEpIHsKICAgICAgICAgICAgICAgIC8vUG9wIG9mZiB0aGUgZmlyc3QgYXJyYXkgdmFsdWUsIHNpbmNlIGl0IGZhaWxlZCwgYW5kCiAgICAgICAgICAgICAgICAvL3JldHJ5CiAgICAgICAgICAgICAgICBwYXRoQ29uZmlnLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICBjb250ZXh0LnJlcXVpcmUudW5kZWYoaWQpOwoKICAgICAgICAgICAgICAgIC8vQ3VzdG9tIHJlcXVpcmUgdGhhdCBkb2VzIG5vdCBkbyBtYXAgdHJhbnNsYXRpb24sIHNpbmNlCiAgICAgICAgICAgICAgICAvL0lEIGlzICJhYnNvbHV0ZSIsIGFscmVhZHkgbWFwcGVkL3Jlc29sdmVkLgogICAgICAgICAgICAgICAgY29udGV4dC5tYWtlUmVxdWlyZShudWxsLCB7CiAgICAgICAgICAgICAgICAgICAgc2tpcE1hcDogdHJ1ZQogICAgICAgICAgICAgICAgfSkoW2lkXSk7CgogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vVHVybnMgYSBwbHVnaW4hcmVzb3VyY2UgdG8gW3BsdWdpbiwgcmVzb3VyY2VdCiAgICAgICAgLy93aXRoIHRoZSBwbHVnaW4gYmVpbmcgdW5kZWZpbmVkIGlmIHRoZSBuYW1lCiAgICAgICAgLy9kaWQgbm90IGhhdmUgYSBwbHVnaW4gcHJlZml4LgogICAgICAgIGZ1bmN0aW9uIHNwbGl0UHJlZml4KG5hbWUpIHsKICAgICAgICAgICAgdmFyIHByZWZpeCwKICAgICAgICAgICAgICAgIGluZGV4ID0gbmFtZSA/IG5hbWUuaW5kZXhPZignIScpIDogLTE7CiAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7CiAgICAgICAgICAgICAgICBwcmVmaXggPSBuYW1lLnN1YnN0cmluZygwLCBpbmRleCk7CiAgICAgICAgICAgICAgICBuYW1lID0gbmFtZS5zdWJzdHJpbmcoaW5kZXggKyAxLCBuYW1lLmxlbmd0aCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIFtwcmVmaXgsIG5hbWVdOwogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogQ3JlYXRlcyBhIG1vZHVsZSBtYXBwaW5nIHRoYXQgaW5jbHVkZXMgcGx1Z2luIHByZWZpeCwgbW9kdWxlCiAgICAgICAgICogbmFtZSwgYW5kIHBhdGguIElmIHBhcmVudE1vZHVsZU1hcCBpcyBwcm92aWRlZCBpdCB3aWxsCiAgICAgICAgICogYWxzbyBub3JtYWxpemUgdGhlIG5hbWUgdmlhIHJlcXVpcmUubm9ybWFsaXplKCkKICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIHRoZSBtb2R1bGUgbmFtZQogICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBbcGFyZW50TW9kdWxlTWFwXSBwYXJlbnQgbW9kdWxlIG1hcAogICAgICAgICAqIGZvciB0aGUgbW9kdWxlIG5hbWUsIHVzZWQgdG8gcmVzb2x2ZSByZWxhdGl2ZSBuYW1lcy4KICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IGlzTm9ybWFsaXplZDogaXMgdGhlIElEIGFscmVhZHkgbm9ybWFsaXplZC4KICAgICAgICAgKiBUaGlzIGlzIHRydWUgaWYgdGhpcyBjYWxsIGlzIGRvbmUgZm9yIGEgZGVmaW5lKCkgbW9kdWxlIElELgogICAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gYXBwbHlNYXA6IGFwcGx5IHRoZSBtYXAgY29uZmlnIHRvIHRoZSBJRC4KICAgICAgICAgKiBTaG91bGQgb25seSBiZSB0cnVlIGlmIHRoaXMgbWFwIGlzIGZvciBhIGRlcGVuZGVuY3kuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIG1ha2VNb2R1bGVNYXAobmFtZSwgcGFyZW50TW9kdWxlTWFwLCBpc05vcm1hbGl6ZWQsIGFwcGx5TWFwKSB7CiAgICAgICAgICAgIHZhciB1cmwsIHBsdWdpbk1vZHVsZSwgc3VmZml4LCBuYW1lUGFydHMsCiAgICAgICAgICAgICAgICBwcmVmaXggPSBudWxsLAogICAgICAgICAgICAgICAgcGFyZW50TmFtZSA9IHBhcmVudE1vZHVsZU1hcCA/IHBhcmVudE1vZHVsZU1hcC5uYW1lIDogbnVsbCwKICAgICAgICAgICAgICAgIG9yaWdpbmFsTmFtZSA9IG5hbWUsCiAgICAgICAgICAgICAgICBpc0RlZmluZSA9IHRydWUsCiAgICAgICAgICAgICAgICBub3JtYWxpemVkTmFtZSA9ICcnOwoKICAgICAgICAgICAgLy9JZiBubyBuYW1lLCB0aGVuIGl0IG1lYW5zIGl0IGlzIGEgcmVxdWlyZSBjYWxsLCBnZW5lcmF0ZSBhbgogICAgICAgICAgICAvL2ludGVybmFsIG5hbWUuCiAgICAgICAgICAgIGlmICghbmFtZSkgewogICAgICAgICAgICAgICAgaXNEZWZpbmUgPSBmYWxzZTsKICAgICAgICAgICAgICAgIG5hbWUgPSAnX0ByJyArIChyZXF1aXJlQ291bnRlciArPSAxKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbmFtZVBhcnRzID0gc3BsaXRQcmVmaXgobmFtZSk7CiAgICAgICAgICAgIHByZWZpeCA9IG5hbWVQYXJ0c1swXTsKICAgICAgICAgICAgbmFtZSA9IG5hbWVQYXJ0c1sxXTsKCiAgICAgICAgICAgIGlmIChwcmVmaXgpIHsKICAgICAgICAgICAgICAgIHByZWZpeCA9IG5vcm1hbGl6ZShwcmVmaXgsIHBhcmVudE5hbWUsIGFwcGx5TWFwKTsKICAgICAgICAgICAgICAgIHBsdWdpbk1vZHVsZSA9IGdldE93bihkZWZpbmVkLCBwcmVmaXgpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvL0FjY291bnQgZm9yIHJlbGF0aXZlIHBhdGhzIGlmIHRoZXJlIGlzIGEgYmFzZSBuYW1lLgogICAgICAgICAgICBpZiAobmFtZSkgewogICAgICAgICAgICAgICAgaWYgKHByZWZpeCkgewogICAgICAgICAgICAgICAgICAgIGlmIChpc05vcm1hbGl6ZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZE5hbWUgPSBuYW1lOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGx1Z2luTW9kdWxlICYmIHBsdWdpbk1vZHVsZS5ub3JtYWxpemUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy9QbHVnaW4gaXMgbG9hZGVkLCB1c2UgaXRzIG5vcm1hbGl6ZSBtZXRob2QuCiAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWROYW1lID0gcGx1Z2luTW9kdWxlLm5vcm1hbGl6ZShuYW1lLCBmdW5jdGlvbiAobmFtZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZShuYW1lLCBwYXJlbnROYW1lLCBhcHBseU1hcCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIG5lc3RlZCBwbHVnaW4gcmVmZXJlbmNlcywgdGhlbiBkbyBub3QgdHJ5IHRvCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vcm1hbGl6ZSwgYXMgaXQgd2lsbCBub3Qgbm9ybWFsaXplIGNvcnJlY3RseS4gVGhpcwogICAgICAgICAgICAgICAgICAgICAgICAvLyBwbGFjZXMgYSByZXN0cmljdGlvbiBvbiByZXNvdXJjZUlkcywgYW5kIHRoZSBsb25nZXIKICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGVybSBzb2x1dGlvbiBpcyBub3QgdG8gbm9ybWFsaXplIHVudGlsIHBsdWdpbnMgYXJlCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxvYWRlZCBhbmQgYWxsIG5vcm1hbGl6YXRpb25zIHRvIGFsbG93IGZvciBhc3luYwogICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2FkaW5nIG9mIGEgbG9hZGVyIHBsdWdpbi4gQnV0IGZvciBub3csIGZpeGVzIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAvLyBjb21tb24gdXNlcy4gRGV0YWlscyBpbiAjMTEzMQogICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTmFtZSA9IG5hbWUuaW5kZXhPZignIScpID09PSAtMSA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplKG5hbWUsIHBhcmVudE5hbWUsIGFwcGx5TWFwKSA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIC8vQSByZWd1bGFyIG1vZHVsZS4KICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTmFtZSA9IG5vcm1hbGl6ZShuYW1lLCBwYXJlbnROYW1lLCBhcHBseU1hcCk7CgogICAgICAgICAgICAgICAgICAgIC8vTm9ybWFsaXplZCBuYW1lIG1heSBiZSBhIHBsdWdpbiBJRCBkdWUgdG8gbWFwIGNvbmZpZwogICAgICAgICAgICAgICAgICAgIC8vYXBwbGljYXRpb24gaW4gbm9ybWFsaXplLiBUaGUgbWFwIGNvbmZpZyB2YWx1ZXMgbXVzdAogICAgICAgICAgICAgICAgICAgIC8vYWxyZWFkeSBiZSBub3JtYWxpemVkLCBzbyBkbyBub3QgbmVlZCB0byByZWRvIHRoYXQgcGFydC4KICAgICAgICAgICAgICAgICAgICBuYW1lUGFydHMgPSBzcGxpdFByZWZpeChub3JtYWxpemVkTmFtZSk7CiAgICAgICAgICAgICAgICAgICAgcHJlZml4ID0gbmFtZVBhcnRzWzBdOwogICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWROYW1lID0gbmFtZVBhcnRzWzFdOwogICAgICAgICAgICAgICAgICAgIGlzTm9ybWFsaXplZCA9IHRydWU7CgogICAgICAgICAgICAgICAgICAgIHVybCA9IGNvbnRleHQubmFtZVRvVXJsKG5vcm1hbGl6ZWROYW1lKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy9JZiB0aGUgaWQgaXMgYSBwbHVnaW4gaWQgdGhhdCBjYW5ub3QgYmUgZGV0ZXJtaW5lZCBpZiBpdCBuZWVkcwogICAgICAgICAgICAvL25vcm1hbGl6YXRpb24sIHN0YW1wIGl0IHdpdGggYSB1bmlxdWUgSUQgc28gdHdvIG1hdGNoaW5nIHJlbGF0aXZlCiAgICAgICAgICAgIC8vaWRzIHRoYXQgbWF5IGNvbmZsaWN0IGNhbiBiZSBzZXBhcmF0ZS4KICAgICAgICAgICAgc3VmZml4ID0gcHJlZml4ICYmICFwbHVnaW5Nb2R1bGUgJiYgIWlzTm9ybWFsaXplZCA/CiAgICAgICAgICAgICAgICAgICAgICdfdW5ub3JtYWxpemVkJyArICh1bm5vcm1hbGl6ZWRDb3VudGVyICs9IDEpIDoKICAgICAgICAgICAgICAgICAgICAgJyc7CgogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgcHJlZml4OiBwcmVmaXgsCiAgICAgICAgICAgICAgICBuYW1lOiBub3JtYWxpemVkTmFtZSwKICAgICAgICAgICAgICAgIHBhcmVudE1hcDogcGFyZW50TW9kdWxlTWFwLAogICAgICAgICAgICAgICAgdW5ub3JtYWxpemVkOiAhIXN1ZmZpeCwKICAgICAgICAgICAgICAgIHVybDogdXJsLAogICAgICAgICAgICAgICAgb3JpZ2luYWxOYW1lOiBvcmlnaW5hbE5hbWUsCiAgICAgICAgICAgICAgICBpc0RlZmluZTogaXNEZWZpbmUsCiAgICAgICAgICAgICAgICBpZDogKHByZWZpeCA/CiAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeCArICchJyArIG5vcm1hbGl6ZWROYW1lIDoKICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZE5hbWUpICsgc3VmZml4CiAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBnZXRNb2R1bGUoZGVwTWFwKSB7CiAgICAgICAgICAgIHZhciBpZCA9IGRlcE1hcC5pZCwKICAgICAgICAgICAgICAgIG1vZCA9IGdldE93bihyZWdpc3RyeSwgaWQpOwoKICAgICAgICAgICAgaWYgKCFtb2QpIHsKICAgICAgICAgICAgICAgIG1vZCA9IHJlZ2lzdHJ5W2lkXSA9IG5ldyBjb250ZXh0Lk1vZHVsZShkZXBNYXApOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gbW9kOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gb24oZGVwTWFwLCBuYW1lLCBmbikgewogICAgICAgICAgICB2YXIgaWQgPSBkZXBNYXAuaWQsCiAgICAgICAgICAgICAgICBtb2QgPSBnZXRPd24ocmVnaXN0cnksIGlkKTsKCiAgICAgICAgICAgIGlmIChoYXNQcm9wKGRlZmluZWQsIGlkKSAmJgogICAgICAgICAgICAgICAgICAgICghbW9kIHx8IG1vZC5kZWZpbmVFbWl0Q29tcGxldGUpKSB7CiAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gJ2RlZmluZWQnKSB7CiAgICAgICAgICAgICAgICAgICAgZm4oZGVmaW5lZFtpZF0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgbW9kID0gZ2V0TW9kdWxlKGRlcE1hcCk7CiAgICAgICAgICAgICAgICBpZiAobW9kLmVycm9yICYmIG5hbWUgPT09ICdlcnJvcicpIHsKICAgICAgICAgICAgICAgICAgICBmbihtb2QuZXJyb3IpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBtb2Qub24obmFtZSwgZm4pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBvbkVycm9yKGVyciwgZXJyYmFjaykgewogICAgICAgICAgICB2YXIgaWRzID0gZXJyLnJlcXVpcmVNb2R1bGVzLAogICAgICAgICAgICAgICAgbm90aWZpZWQgPSBmYWxzZTsKCiAgICAgICAgICAgIGlmIChlcnJiYWNrKSB7CiAgICAgICAgICAgICAgICBlcnJiYWNrKGVycik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBlYWNoKGlkcywgZnVuY3Rpb24gKGlkKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIG1vZCA9IGdldE93bihyZWdpc3RyeSwgaWQpOwogICAgICAgICAgICAgICAgICAgIGlmIChtb2QpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy9TZXQgZXJyb3Igb24gbW9kdWxlLCBzbyBpdCBza2lwcyB0aW1lb3V0IGNoZWNrcy4KICAgICAgICAgICAgICAgICAgICAgICAgbW9kLmVycm9yID0gZXJyOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9kLmV2ZW50cy5lcnJvcikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kLmVtaXQoJ2Vycm9yJywgZXJyKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIGlmICghbm90aWZpZWQpIHsKICAgICAgICAgICAgICAgICAgICByZXEub25FcnJvcihlcnIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBJbnRlcm5hbCBtZXRob2QgdG8gdHJhbnNmZXIgZ2xvYmFsUXVldWUgaXRlbXMgdG8gdGhpcyBjb250ZXh0J3MKICAgICAgICAgKiBkZWZRdWV1ZS4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiB0YWtlR2xvYmFsUXVldWUoKSB7CiAgICAgICAgICAgIC8vUHVzaCBhbGwgdGhlIGdsb2JhbERlZlF1ZXVlIGl0ZW1zIGludG8gdGhlIGNvbnRleHQncyBkZWZRdWV1ZQogICAgICAgICAgICBpZiAoZ2xvYmFsRGVmUXVldWUubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICBlYWNoKGdsb2JhbERlZlF1ZXVlLCBmdW5jdGlvbihxdWV1ZUl0ZW0pIHsKICAgICAgICAgICAgICAgICAgICB2YXIgaWQgPSBxdWV1ZUl0ZW1bMF07CiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpZCA9PT0gJ3N0cmluZycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kZWZRdWV1ZU1hcFtpZF0gPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBkZWZRdWV1ZS5wdXNoKHF1ZXVlSXRlbSk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIGdsb2JhbERlZlF1ZXVlID0gW107CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGhhbmRsZXJzID0gewogICAgICAgICAgICAncmVxdWlyZSc6IGZ1bmN0aW9uIChtb2QpIHsKICAgICAgICAgICAgICAgIGlmIChtb2QucmVxdWlyZSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBtb2QucmVxdWlyZTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChtb2QucmVxdWlyZSA9IGNvbnRleHQubWFrZVJlcXVpcmUobW9kLm1hcCkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAnZXhwb3J0cyc6IGZ1bmN0aW9uIChtb2QpIHsKICAgICAgICAgICAgICAgIG1vZC51c2luZ0V4cG9ydHMgPSB0cnVlOwogICAgICAgICAgICAgICAgaWYgKG1vZC5tYXAuaXNEZWZpbmUpIHsKICAgICAgICAgICAgICAgICAgICBpZiAobW9kLmV4cG9ydHMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChkZWZpbmVkW21vZC5tYXAuaWRdID0gbW9kLmV4cG9ydHMpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAobW9kLmV4cG9ydHMgPSBkZWZpbmVkW21vZC5tYXAuaWRdID0ge30pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgJ21vZHVsZSc6IGZ1bmN0aW9uIChtb2QpIHsKICAgICAgICAgICAgICAgIGlmIChtb2QubW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vZC5tb2R1bGU7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAobW9kLm1vZHVsZSA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IG1vZC5tYXAuaWQsCiAgICAgICAgICAgICAgICAgICAgICAgIHVyaTogbW9kLm1hcC51cmwsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZzogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldE93bihjb25maWcuY29uZmlnLCBtb2QubWFwLmlkKSB8fCB7fTsKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0czogbW9kLmV4cG9ydHMgfHwgKG1vZC5leHBvcnRzID0ge30pCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICBmdW5jdGlvbiBjbGVhblJlZ2lzdHJ5KGlkKSB7CiAgICAgICAgICAgIC8vQ2xlYW4gdXAgbWFjaGluZXJ5IHVzZWQgZm9yIHdhaXRpbmcgbW9kdWxlcy4KICAgICAgICAgICAgZGVsZXRlIHJlZ2lzdHJ5W2lkXTsKICAgICAgICAgICAgZGVsZXRlIGVuYWJsZWRSZWdpc3RyeVtpZF07CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBicmVha0N5Y2xlKG1vZCwgdHJhY2VkLCBwcm9jZXNzZWQpIHsKICAgICAgICAgICAgdmFyIGlkID0gbW9kLm1hcC5pZDsKCiAgICAgICAgICAgIGlmIChtb2QuZXJyb3IpIHsKICAgICAgICAgICAgICAgIG1vZC5lbWl0KCdlcnJvcicsIG1vZC5lcnJvcik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0cmFjZWRbaWRdID0gdHJ1ZTsKICAgICAgICAgICAgICAgIGVhY2gobW9kLmRlcE1hcHMsIGZ1bmN0aW9uIChkZXBNYXAsIGkpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgZGVwSWQgPSBkZXBNYXAuaWQsCiAgICAgICAgICAgICAgICAgICAgICAgIGRlcCA9IGdldE93bihyZWdpc3RyeSwgZGVwSWQpOwoKICAgICAgICAgICAgICAgICAgICAvL09ubHkgZm9yY2UgdGhpbmdzIHRoYXQgaGF2ZSBub3QgY29tcGxldGVkCiAgICAgICAgICAgICAgICAgICAgLy9iZWluZyBkZWZpbmVkLCBzbyBzdGlsbCBpbiB0aGUgcmVnaXN0cnksCiAgICAgICAgICAgICAgICAgICAgLy9hbmQgb25seSBpZiBpdCBoYXMgbm90IGJlZW4gbWF0Y2hlZCB1cAogICAgICAgICAgICAgICAgICAgIC8vaW4gdGhlIG1vZHVsZSBhbHJlYWR5LgogICAgICAgICAgICAgICAgICAgIGlmIChkZXAgJiYgIW1vZC5kZXBNYXRjaGVkW2ldICYmICFwcm9jZXNzZWRbZGVwSWRdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnZXRPd24odHJhY2VkLCBkZXBJZCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZC5kZWZpbmVEZXAoaSwgZGVmaW5lZFtkZXBJZF0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kLmNoZWNrKCk7IC8vcGFzcyBmYWxzZT8KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrQ3ljbGUoZGVwLCB0cmFjZWQsIHByb2Nlc3NlZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIHByb2Nlc3NlZFtpZF0gPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBjaGVja0xvYWRlZCgpIHsKICAgICAgICAgICAgdmFyIGVyciwgdXNpbmdQYXRoRmFsbGJhY2ssCiAgICAgICAgICAgICAgICB3YWl0SW50ZXJ2YWwgPSBjb25maWcud2FpdFNlY29uZHMgKiAxMDAwLAogICAgICAgICAgICAgICAgLy9JdCBpcyBwb3NzaWJsZSB0byBkaXNhYmxlIHRoZSB3YWl0IGludGVydmFsIGJ5IHVzaW5nIHdhaXRTZWNvbmRzIG9mIDAuCiAgICAgICAgICAgICAgICBleHBpcmVkID0gd2FpdEludGVydmFsICYmIChjb250ZXh0LnN0YXJ0VGltZSArIHdhaXRJbnRlcnZhbCkgPCBuZXcgRGF0ZSgpLmdldFRpbWUoKSwKICAgICAgICAgICAgICAgIG5vTG9hZHMgPSBbXSwKICAgICAgICAgICAgICAgIHJlcUNhbGxzID0gW10sCiAgICAgICAgICAgICAgICBzdGlsbExvYWRpbmcgPSBmYWxzZSwKICAgICAgICAgICAgICAgIG5lZWRDeWNsZUNoZWNrID0gdHJ1ZTsKCiAgICAgICAgICAgIC8vRG8gbm90IGJvdGhlciBpZiB0aGlzIGNhbGwgd2FzIGEgcmVzdWx0IG9mIGEgY3ljbGUgYnJlYWsuCiAgICAgICAgICAgIGlmIChpbkNoZWNrTG9hZGVkKSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGluQ2hlY2tMb2FkZWQgPSB0cnVlOwoKICAgICAgICAgICAgLy9GaWd1cmUgb3V0IHRoZSBzdGF0ZSBvZiBhbGwgdGhlIG1vZHVsZXMuCiAgICAgICAgICAgIGVhY2hQcm9wKGVuYWJsZWRSZWdpc3RyeSwgZnVuY3Rpb24gKG1vZCkgewogICAgICAgICAgICAgICAgdmFyIG1hcCA9IG1vZC5tYXAsCiAgICAgICAgICAgICAgICAgICAgbW9kSWQgPSBtYXAuaWQ7CgogICAgICAgICAgICAgICAgLy9Ta2lwIHRoaW5ncyB0aGF0IGFyZSBub3QgZW5hYmxlZCBvciBpbiBlcnJvciBzdGF0ZS4KICAgICAgICAgICAgICAgIGlmICghbW9kLmVuYWJsZWQpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCFtYXAuaXNEZWZpbmUpIHsKICAgICAgICAgICAgICAgICAgICByZXFDYWxscy5wdXNoKG1vZCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCFtb2QuZXJyb3IpIHsKICAgICAgICAgICAgICAgICAgICAvL0lmIHRoZSBtb2R1bGUgc2hvdWxkIGJlIGV4ZWN1dGVkLCBhbmQgaXQgaGFzIG5vdAogICAgICAgICAgICAgICAgICAgIC8vYmVlbiBpbml0ZWQgYW5kIHRpbWUgaXMgdXAsIHJlbWVtYmVyIGl0LgogICAgICAgICAgICAgICAgICAgIGlmICghbW9kLmluaXRlZCAmJiBleHBpcmVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNQYXRoRmFsbGJhY2sobW9kSWQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2luZ1BhdGhGYWxsYmFjayA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGlsbExvYWRpbmcgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9Mb2Fkcy5wdXNoKG1vZElkKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZVNjcmlwdChtb2RJZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFtb2QuaW5pdGVkICYmIG1vZC5mZXRjaGVkICYmIG1hcC5pc0RlZmluZSkgewogICAgICAgICAgICAgICAgICAgICAgICBzdGlsbExvYWRpbmcgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1hcC5wcmVmaXgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vTm8gcmVhc29uIHRvIGtlZXAgbG9va2luZyBmb3IgdW5maW5pc2hlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9sb2FkaW5nLiBJZiB0aGUgb25seSBzdGlsbExvYWRpbmcgaXMgYQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9wbHVnaW4gcmVzb3VyY2UgdGhvdWdoLCBrZWVwIGdvaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9iZWNhdXNlIGl0IG1heSBiZSB0aGF0IGEgcGx1Z2luIHJlc291cmNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2lzIHdhaXRpbmcgb24gYSBub24tcGx1Z2luIGN5Y2xlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChuZWVkQ3ljbGVDaGVjayA9IGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICBpZiAoZXhwaXJlZCAmJiBub0xvYWRzLmxlbmd0aCkgewogICAgICAgICAgICAgICAgLy9JZiB3YWl0IHRpbWUgZXhwaXJlZCwgdGhyb3cgZXJyb3Igb2YgdW5sb2FkZWQgbW9kdWxlcy4KICAgICAgICAgICAgICAgIGVyciA9IG1ha2VFcnJvcigndGltZW91dCcsICdMb2FkIHRpbWVvdXQgZm9yIG1vZHVsZXM6ICcgKyBub0xvYWRzLCBudWxsLCBub0xvYWRzKTsKICAgICAgICAgICAgICAgIGVyci5jb250ZXh0TmFtZSA9IGNvbnRleHQuY29udGV4dE5hbWU7CiAgICAgICAgICAgICAgICByZXR1cm4gb25FcnJvcihlcnIpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvL05vdCBleHBpcmVkLCBjaGVjayBmb3IgYSBjeWNsZS4KICAgICAgICAgICAgaWYgKG5lZWRDeWNsZUNoZWNrKSB7CiAgICAgICAgICAgICAgICBlYWNoKHJlcUNhbGxzLCBmdW5jdGlvbiAobW9kKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWtDeWNsZShtb2QsIHt9LCB7fSk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy9JZiBzdGlsbCB3YWl0aW5nIG9uIGxvYWRzLCBhbmQgdGhlIHdhaXRpbmcgbG9hZCBpcyBzb21ldGhpbmcKICAgICAgICAgICAgLy9vdGhlciB0aGFuIGEgcGx1Z2luIHJlc291cmNlLCBvciB0aGVyZSBhcmUgc3RpbGwgb3V0c3RhbmRpbmcKICAgICAgICAgICAgLy9zY3JpcHRzLCB0aGVuIGp1c3QgdHJ5IGJhY2sgbGF0ZXIuCiAgICAgICAgICAgIGlmICgoIWV4cGlyZWQgfHwgdXNpbmdQYXRoRmFsbGJhY2spICYmIHN0aWxsTG9hZGluZykgewogICAgICAgICAgICAgICAgLy9Tb21ldGhpbmcgaXMgc3RpbGwgd2FpdGluZyB0byBsb2FkLiBXYWl0IGZvciBpdCwgYnV0IG9ubHkKICAgICAgICAgICAgICAgIC8vaWYgYSB0aW1lb3V0IGlzIG5vdCBhbHJlYWR5IGluIGVmZmVjdC4KICAgICAgICAgICAgICAgIGlmICgoaXNCcm93c2VyIHx8IGlzV2ViV29ya2VyKSAmJiAhY2hlY2tMb2FkZWRUaW1lb3V0SWQpIHsKICAgICAgICAgICAgICAgICAgICBjaGVja0xvYWRlZFRpbWVvdXRJZCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgICBjaGVja0xvYWRlZFRpbWVvdXRJZCA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrTG9hZGVkKCk7CiAgICAgICAgICAgICAgICAgICAgfSwgNTApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBpbkNoZWNrTG9hZGVkID0gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICBNb2R1bGUgPSBmdW5jdGlvbiAobWFwKSB7CiAgICAgICAgICAgIHRoaXMuZXZlbnRzID0gZ2V0T3duKHVuZGVmRXZlbnRzLCBtYXAuaWQpIHx8IHt9OwogICAgICAgICAgICB0aGlzLm1hcCA9IG1hcDsKICAgICAgICAgICAgdGhpcy5zaGltID0gZ2V0T3duKGNvbmZpZy5zaGltLCBtYXAuaWQpOwogICAgICAgICAgICB0aGlzLmRlcEV4cG9ydHMgPSBbXTsKICAgICAgICAgICAgdGhpcy5kZXBNYXBzID0gW107CiAgICAgICAgICAgIHRoaXMuZGVwTWF0Y2hlZCA9IFtdOwogICAgICAgICAgICB0aGlzLnBsdWdpbk1hcHMgPSB7fTsKICAgICAgICAgICAgdGhpcy5kZXBDb3VudCA9IDA7CgogICAgICAgICAgICAvKiB0aGlzLmV4cG9ydHMgdGhpcy5mYWN0b3J5CiAgICAgICAgICAgICAgIHRoaXMuZGVwTWFwcyA9IFtdLAogICAgICAgICAgICAgICB0aGlzLmVuYWJsZWQsIHRoaXMuZmV0Y2hlZAogICAgICAgICAgICAqLwogICAgICAgIH07CgogICAgICAgIE1vZHVsZS5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgIGluaXQ6IGZ1bmN0aW9uIChkZXBNYXBzLCBmYWN0b3J5LCBlcnJiYWNrLCBvcHRpb25zKSB7CiAgICAgICAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKCiAgICAgICAgICAgICAgICAvL0RvIG5vdCBkbyBtb3JlIGluaXRzIGlmIGFscmVhZHkgZG9uZS4gQ2FuIGhhcHBlbiBpZiB0aGVyZQogICAgICAgICAgICAgICAgLy9hcmUgbXVsdGlwbGUgZGVmaW5lIGNhbGxzIGZvciB0aGUgc2FtZSBtb2R1bGUuIFRoYXQgaXMgbm90CiAgICAgICAgICAgICAgICAvL2Egbm9ybWFsLCBjb21tb24gY2FzZSwgYnV0IGl0IGlzIGFsc28gbm90IHVuZXhwZWN0ZWQuCiAgICAgICAgICAgICAgICBpZiAodGhpcy5pbml0ZWQpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdGhpcy5mYWN0b3J5ID0gZmFjdG9yeTsKCiAgICAgICAgICAgICAgICBpZiAoZXJyYmFjaykgewogICAgICAgICAgICAgICAgICAgIC8vUmVnaXN0ZXIgZm9yIGVycm9ycyBvbiB0aGlzIG1vZHVsZS4KICAgICAgICAgICAgICAgICAgICB0aGlzLm9uKCdlcnJvcicsIGVycmJhY2spOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmV2ZW50cy5lcnJvcikgewogICAgICAgICAgICAgICAgICAgIC8vSWYgbm8gZXJyYmFjayBhbHJlYWR5LCBidXQgdGhlcmUgYXJlIGVycm9yIGxpc3RlbmVycwogICAgICAgICAgICAgICAgICAgIC8vb24gdGhpcyBtb2R1bGUsIHNldCB1cCBhbiBlcnJiYWNrIHRvIHBhc3MgdG8gdGhlIGRlcHMuCiAgICAgICAgICAgICAgICAgICAgZXJyYmFjayA9IGJpbmQodGhpcywgZnVuY3Rpb24gKGVycikgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvL0RvIGEgY29weSBvZiB0aGUgZGVwZW5kZW5jeSBhcnJheSwgc28gdGhhdAogICAgICAgICAgICAgICAgLy9zb3VyY2UgaW5wdXRzIGFyZSBub3QgbW9kaWZpZWQuIEZvciBleGFtcGxlCiAgICAgICAgICAgICAgICAvLyJzaGltIiBkZXBzIGFyZSBwYXNzZWQgaW4gaGVyZSBkaXJlY3RseSwgYW5kCiAgICAgICAgICAgICAgICAvL2RvaW5nIGEgZGlyZWN0IG1vZGlmaWNhdGlvbiBvZiB0aGUgZGVwTWFwcyBhcnJheQogICAgICAgICAgICAgICAgLy93b3VsZCBhZmZlY3QgdGhhdCBjb25maWcuCiAgICAgICAgICAgICAgICB0aGlzLmRlcE1hcHMgPSBkZXBNYXBzICYmIGRlcE1hcHMuc2xpY2UoMCk7CgogICAgICAgICAgICAgICAgdGhpcy5lcnJiYWNrID0gZXJyYmFjazsKCiAgICAgICAgICAgICAgICAvL0luZGljYXRlIHRoaXMgbW9kdWxlIGhhcyBiZSBpbml0aWFsaXplZAogICAgICAgICAgICAgICAgdGhpcy5pbml0ZWQgPSB0cnVlOwoKICAgICAgICAgICAgICAgIHRoaXMuaWdub3JlID0gb3B0aW9ucy5pZ25vcmU7CgogICAgICAgICAgICAgICAgLy9Db3VsZCBoYXZlIG9wdGlvbiB0byBpbml0IHRoaXMgbW9kdWxlIGluIGVuYWJsZWQgbW9kZSwKICAgICAgICAgICAgICAgIC8vb3IgY291bGQgaGF2ZSBiZWVuIHByZXZpb3VzbHkgbWFya2VkIGFzIGVuYWJsZWQuIEhvd2V2ZXIsCiAgICAgICAgICAgICAgICAvL3RoZSBkZXBlbmRlbmNpZXMgYXJlIG5vdCBrbm93biB1bnRpbCBpbml0IGlzIGNhbGxlZC4gU28KICAgICAgICAgICAgICAgIC8vaWYgZW5hYmxlZCBwcmV2aW91c2x5LCBub3cgdHJpZ2dlciBkZXBlbmRlbmNpZXMgYXMgZW5hYmxlZC4KICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmVuYWJsZWQgfHwgdGhpcy5lbmFibGVkKSB7CiAgICAgICAgICAgICAgICAgICAgLy9FbmFibGUgdGhpcyBtb2R1bGUgYW5kIGRlcGVuZGVuY2llcy4KICAgICAgICAgICAgICAgICAgICAvL1dpbGwgY2FsbCB0aGlzLmNoZWNrKCkKICAgICAgICAgICAgICAgICAgICB0aGlzLmVuYWJsZSgpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBkZWZpbmVEZXA6IGZ1bmN0aW9uIChpLCBkZXBFeHBvcnRzKSB7CiAgICAgICAgICAgICAgICAvL0JlY2F1c2Ugb2YgY3ljbGVzLCBkZWZpbmVkIGNhbGxiYWNrIGZvciBhIGdpdmVuCiAgICAgICAgICAgICAgICAvL2V4cG9ydCBjYW4gYmUgY2FsbGVkIG1vcmUgdGhhbiBvbmNlLgogICAgICAgICAgICAgICAgaWYgKCF0aGlzLmRlcE1hdGNoZWRbaV0pIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmRlcE1hdGNoZWRbaV0gPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIHRoaXMuZGVwQ291bnQgLT0gMTsKICAgICAgICAgICAgICAgICAgICB0aGlzLmRlcEV4cG9ydHNbaV0gPSBkZXBFeHBvcnRzOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAoKICAgICAgICAgICAgZmV0Y2g6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIGlmICh0aGlzLmZldGNoZWQpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB0aGlzLmZldGNoZWQgPSB0cnVlOwoKICAgICAgICAgICAgICAgIGNvbnRleHQuc3RhcnRUaW1lID0gKG5ldyBEYXRlKCkpLmdldFRpbWUoKTsKCiAgICAgICAgICAgICAgICB2YXIgbWFwID0gdGhpcy5tYXA7CgogICAgICAgICAgICAgICAgLy9JZiB0aGUgbWFuYWdlciBpcyBmb3IgYSBwbHVnaW4gbWFuYWdlZCByZXNvdXJjZSwKICAgICAgICAgICAgICAgIC8vYXNrIHRoZSBwbHVnaW4gdG8gbG9hZCBpdCBub3cuCiAgICAgICAgICAgICAgICBpZiAodGhpcy5zaGltKSB7CiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5tYWtlUmVxdWlyZSh0aGlzLm1hcCwgewogICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVCdWlsZENhbGxiYWNrOiB0cnVlCiAgICAgICAgICAgICAgICAgICAgfSkodGhpcy5zaGltLmRlcHMgfHwgW10sIGJpbmQodGhpcywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWFwLnByZWZpeCA/IHRoaXMuY2FsbFBsdWdpbigpIDogdGhpcy5sb2FkKCk7CiAgICAgICAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvL1JlZ3VsYXIgZGVwZW5kZW5jeS4KICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWFwLnByZWZpeCA/IHRoaXMuY2FsbFBsdWdpbigpIDogdGhpcy5sb2FkKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBsb2FkOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICB2YXIgdXJsID0gdGhpcy5tYXAudXJsOwoKICAgICAgICAgICAgICAgIC8vUmVndWxhciBkZXBlbmRlbmN5LgogICAgICAgICAgICAgICAgaWYgKCF1cmxGZXRjaGVkW3VybF0pIHsKICAgICAgICAgICAgICAgICAgICB1cmxGZXRjaGVkW3VybF0gPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIGNvbnRleHQubG9hZCh0aGlzLm1hcC5pZCwgdXJsKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDaGVja3MgaWYgdGhlIG1vZHVsZSBpcyByZWFkeSB0byBkZWZpbmUgaXRzZWxmLCBhbmQgaWYgc28sCiAgICAgICAgICAgICAqIGRlZmluZSBpdC4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGNoZWNrOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZW5hYmxlZCB8fCB0aGlzLmVuYWJsaW5nKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBlcnIsIGNqc01vZHVsZSwKICAgICAgICAgICAgICAgICAgICBpZCA9IHRoaXMubWFwLmlkLAogICAgICAgICAgICAgICAgICAgIGRlcEV4cG9ydHMgPSB0aGlzLmRlcEV4cG9ydHMsCiAgICAgICAgICAgICAgICAgICAgZXhwb3J0cyA9IHRoaXMuZXhwb3J0cywKICAgICAgICAgICAgICAgICAgICBmYWN0b3J5ID0gdGhpcy5mYWN0b3J5OwoKICAgICAgICAgICAgICAgIGlmICghdGhpcy5pbml0ZWQpIHsKICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IGZldGNoIGlmIG5vdCBhbHJlYWR5IGluIHRoZSBkZWZRdWV1ZS4KICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc1Byb3AoY29udGV4dC5kZWZRdWV1ZU1hcCwgaWQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmV0Y2goKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZXJyb3IpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgdGhpcy5lcnJvcik7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmRlZmluaW5nKSB7CiAgICAgICAgICAgICAgICAgICAgLy9UaGUgZmFjdG9yeSBjb3VsZCB0cmlnZ2VyIGFub3RoZXIgcmVxdWlyZSBjYWxsCiAgICAgICAgICAgICAgICAgICAgLy90aGF0IHdvdWxkIHJlc3VsdCBpbiBjaGVja2luZyB0aGlzIG1vZHVsZSB0bwogICAgICAgICAgICAgICAgICAgIC8vZGVmaW5lIGl0c2VsZiBhZ2Fpbi4gSWYgYWxyZWFkeSBpbiB0aGUgcHJvY2VzcwogICAgICAgICAgICAgICAgICAgIC8vb2YgZG9pbmcgdGhhdCwgc2tpcCB0aGlzIHdvcmsuCiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZpbmluZyA9IHRydWU7CgogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlcENvdW50IDwgMSAmJiAhdGhpcy5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGZhY3RvcnkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0lmIHRoZXJlIGlzIGFuIGVycm9yIGxpc3RlbmVyLCBmYXZvciBwYXNzaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3RvIHRoYXQgaW5zdGVhZCBvZiB0aHJvd2luZyBhbiBlcnJvci4gSG93ZXZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vb25seSBkbyBpdCBmb3IgZGVmaW5lKCknZCAgbW9kdWxlcy4gcmVxdWlyZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9lcnJiYWNrcyBzaG91bGQgbm90IGJlIGNhbGxlZCBmb3IgZmFpbHVyZXMgaW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdGhlaXIgY2FsbGJhY2tzICgjNjk5KS4gSG93ZXZlciBpZiBhIGdsb2JhbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9vbkVycm9yIGlzIHNldCwgdXNlIHRoYXQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHRoaXMuZXZlbnRzLmVycm9yICYmIHRoaXMubWFwLmlzRGVmaW5lKSB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcS5vbkVycm9yICE9PSBkZWZhdWx0T25FcnJvcikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydHMgPSBjb250ZXh0LmV4ZWNDYihpZCwgZmFjdG9yeSwgZGVwRXhwb3J0cywgZXhwb3J0cyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIgPSBlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0cyA9IGNvbnRleHQuZXhlY0NiKGlkLCBmYWN0b3J5LCBkZXBFeHBvcnRzLCBleHBvcnRzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGYXZvciByZXR1cm4gdmFsdWUgb3ZlciBleHBvcnRzLiBJZiBub2RlL2NqcyBpbiBwbGF5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlbiB3aWxsIG5vdCBoYXZlIGEgcmV0dXJuIHZhbHVlIGFueXdheS4gRmF2b3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1vZHVsZS5leHBvcnRzIGFzc2lnbm1lbnQgb3ZlciBleHBvcnRzIG9iamVjdC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hcC5pc0RlZmluZSAmJiBleHBvcnRzID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjanNNb2R1bGUgPSB0aGlzLm1vZHVsZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2pzTW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydHMgPSBjanNNb2R1bGUuZXhwb3J0czsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudXNpbmdFeHBvcnRzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vZXhwb3J0cyBhbHJlYWR5IHNldCB0aGUgZGVmaW5lZCB2YWx1ZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0cyA9IHRoaXMuZXhwb3J0czsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyci5yZXF1aXJlTWFwID0gdGhpcy5tYXA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyLnJlcXVpcmVNb2R1bGVzID0gdGhpcy5tYXAuaXNEZWZpbmUgPyBbdGhpcy5tYXAuaWRdIDogbnVsbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIucmVxdWlyZVR5cGUgPSB0aGlzLm1hcC5pc0RlZmluZSA/ICdkZWZpbmUnIDogJ3JlcXVpcmUnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvbkVycm9yKCh0aGlzLmVycm9yID0gZXJyKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9KdXN0IGEgbGl0ZXJhbCB2YWx1ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0cyA9IGZhY3Rvcnk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwb3J0cyA9IGV4cG9ydHM7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXAuaXNEZWZpbmUgJiYgIXRoaXMuaWdub3JlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVkW2lkXSA9IGV4cG9ydHM7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcS5vblJlc291cmNlTG9hZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXNMb2FkTWFwcyA9IFtdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVhY2godGhpcy5kZXBNYXBzLCBmdW5jdGlvbiAoZGVwTWFwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc0xvYWRNYXBzLnB1c2goZGVwTWFwLm5vcm1hbGl6ZWRNYXAgfHwgZGVwTWFwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXEub25SZXNvdXJjZUxvYWQoY29udGV4dCwgdGhpcy5tYXAsIHJlc0xvYWRNYXBzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy9DbGVhbiB1cAogICAgICAgICAgICAgICAgICAgICAgICBjbGVhblJlZ2lzdHJ5KGlkKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmaW5lZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAvL0ZpbmlzaGVkIHRoZSBkZWZpbmUgc3RhZ2UuIEFsbG93IGNhbGxpbmcgY2hlY2sgYWdhaW4KICAgICAgICAgICAgICAgICAgICAvL3RvIGFsbG93IGRlZmluZSBub3RpZmljYXRpb25zIGJlbG93IGluIHRoZSBjYXNlIG9mIGEKICAgICAgICAgICAgICAgICAgICAvL2N5Y2xlLgogICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmaW5pbmcgPSBmYWxzZTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGVmaW5lZCAmJiAhdGhpcy5kZWZpbmVFbWl0dGVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmaW5lRW1pdHRlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnZGVmaW5lZCcsIHRoaXMuZXhwb3J0cyk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmaW5lRW1pdENvbXBsZXRlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAoKICAgICAgICAgICAgY2FsbFBsdWdpbjogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgdmFyIG1hcCA9IHRoaXMubWFwLAogICAgICAgICAgICAgICAgICAgIGlkID0gbWFwLmlkLAogICAgICAgICAgICAgICAgICAgIC8vTWFwIGFscmVhZHkgbm9ybWFsaXplZCB0aGUgcHJlZml4LgogICAgICAgICAgICAgICAgICAgIHBsdWdpbk1hcCA9IG1ha2VNb2R1bGVNYXAobWFwLnByZWZpeCk7CgogICAgICAgICAgICAgICAgLy9NYXJrIHRoaXMgYXMgYSBkZXBlbmRlbmN5IGZvciB0aGlzIHBsdWdpbiwgc28gaXQKICAgICAgICAgICAgICAgIC8vY2FuIGJlIHRyYWNlZCBmb3IgY3ljbGVzLgogICAgICAgICAgICAgICAgdGhpcy5kZXBNYXBzLnB1c2gocGx1Z2luTWFwKTsKCiAgICAgICAgICAgICAgICBvbihwbHVnaW5NYXAsICdkZWZpbmVkJywgYmluZCh0aGlzLCBmdW5jdGlvbiAocGx1Z2luKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGxvYWQsIG5vcm1hbGl6ZWRNYXAsIG5vcm1hbGl6ZWRNb2QsCiAgICAgICAgICAgICAgICAgICAgICAgIGJ1bmRsZUlkID0gZ2V0T3duKGJ1bmRsZXNNYXAsIHRoaXMubWFwLmlkKSwKICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHRoaXMubWFwLm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE5hbWUgPSB0aGlzLm1hcC5wYXJlbnRNYXAgPyB0aGlzLm1hcC5wYXJlbnRNYXAubmFtZSA6IG51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsUmVxdWlyZSA9IGNvbnRleHQubWFrZVJlcXVpcmUobWFwLnBhcmVudE1hcCwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlQnVpbGRDYWxsYmFjazogdHJ1ZQogICAgICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgLy9JZiBjdXJyZW50IG1hcCBpcyBub3Qgbm9ybWFsaXplZCwgd2FpdCBmb3IgdGhhdAogICAgICAgICAgICAgICAgICAgIC8vbm9ybWFsaXplZCBuYW1lIHRvIGxvYWQgaW5zdGVhZCBvZiBjb250aW51aW5nLgogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hcC51bm5vcm1hbGl6ZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy9Ob3JtYWxpemUgdGhlIElEIGlmIHRoZSBwbHVnaW4gYWxsb3dzIGl0LgogICAgICAgICAgICAgICAgICAgICAgICBpZiAocGx1Z2luLm5vcm1hbGl6ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHBsdWdpbi5ub3JtYWxpemUobmFtZSwgZnVuY3Rpb24gKG5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplKG5hbWUsIHBhcmVudE5hbWUsIHRydWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkgfHwgJyc7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vcHJlZml4IGFuZCBuYW1lIHNob3VsZCBhbHJlYWR5IGJlIG5vcm1hbGl6ZWQsIG5vIG5lZWQKICAgICAgICAgICAgICAgICAgICAgICAgLy9mb3IgYXBwbHlpbmcgbWFwIGNvbmZpZyBhZ2FpbiBlaXRoZXIuCiAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRNYXAgPSBtYWtlTW9kdWxlTWFwKG1hcC5wcmVmaXggKyAnIScgKyBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcC5wYXJlbnRNYXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUpOwogICAgICAgICAgICAgICAgICAgICAgICBvbihub3JtYWxpemVkTWFwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlZmluZWQnLCBiaW5kKHRoaXMsIGZ1bmN0aW9uICh2YWx1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWFwLm5vcm1hbGl6ZWRNYXAgPSBub3JtYWxpemVkTWFwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdChbXSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdmFsdWU7IH0sIG51bGwsIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlOiB0cnVlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7CgogICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTW9kID0gZ2V0T3duKHJlZ2lzdHJ5LCBub3JtYWxpemVkTWFwLmlkKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWRNb2QpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vTWFyayB0aGlzIGFzIGEgZGVwZW5kZW5jeSBmb3IgdGhpcyBwbHVnaW4sIHNvIGl0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2NhbiBiZSB0cmFjZWQgZm9yIGN5Y2xlcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVwTWFwcy5wdXNoKG5vcm1hbGl6ZWRNYXApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmV2ZW50cy5lcnJvcikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRNb2Qub24oJ2Vycm9yJywgYmluZCh0aGlzLCBmdW5jdGlvbiAoZXJyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCBlcnIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRNb2QuZW5hYmxlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIC8vSWYgYSBwYXRocyBjb25maWcsIHRoZW4ganVzdCBsb2FkIHRoYXQgZmlsZSBpbnN0ZWFkIHRvCiAgICAgICAgICAgICAgICAgICAgLy9yZXNvbHZlIHRoZSBwbHVnaW4sIGFzIGl0IGlzIGJ1aWx0IGludG8gdGhhdCBwYXRocyBsYXllci4KICAgICAgICAgICAgICAgICAgICBpZiAoYnVuZGxlSWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXAudXJsID0gY29udGV4dC5uYW1lVG9VcmwoYnVuZGxlSWQpOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgbG9hZCA9IGJpbmQodGhpcywgZnVuY3Rpb24gKHZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdChbXSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdmFsdWU7IH0sIG51bGwsIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgICAgIGxvYWQuZXJyb3IgPSBiaW5kKHRoaXMsIGZ1bmN0aW9uIChlcnIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gZXJyOwogICAgICAgICAgICAgICAgICAgICAgICBlcnIucmVxdWlyZU1vZHVsZXMgPSBbaWRdOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy9SZW1vdmUgdGVtcCB1bm5vcm1hbGl6ZWQgbW9kdWxlcyBmb3IgdGhpcyBtb2R1bGUsCiAgICAgICAgICAgICAgICAgICAgICAgIC8vc2luY2UgdGhleSB3aWxsIG5ldmVyIGJlIHJlc29sdmVkIG90aGVyd2lzZSBub3cuCiAgICAgICAgICAgICAgICAgICAgICAgIGVhY2hQcm9wKHJlZ2lzdHJ5LCBmdW5jdGlvbiAobW9kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9kLm1hcC5pZC5pbmRleE9mKGlkICsgJ191bm5vcm1hbGl6ZWQnKSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFuUmVnaXN0cnkobW9kLm1hcC5pZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICAgICAgb25FcnJvcihlcnIpOwogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICAvL0FsbG93IHBsdWdpbnMgdG8gbG9hZCBvdGhlciBjb2RlIHdpdGhvdXQgaGF2aW5nIHRvIGtub3cgdGhlCiAgICAgICAgICAgICAgICAgICAgLy9jb250ZXh0IG9yIGhvdyB0byAnY29tcGxldGUnIHRoZSBsb2FkLgogICAgICAgICAgICAgICAgICAgIGxvYWQuZnJvbVRleHQgPSBiaW5kKHRoaXMsIGZ1bmN0aW9uICh0ZXh0LCB0ZXh0QWx0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8qanNsaW50IGV2aWw6IHRydWUgKi8KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1vZHVsZU5hbWUgPSBtYXAubmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZU1hcCA9IG1ha2VNb2R1bGVNYXAobW9kdWxlTmFtZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNJbnRlcmFjdGl2ZSA9IHVzZUludGVyYWN0aXZlOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy9BcyBvZiAyLjEuMCwgc3VwcG9ydCBqdXN0IHBhc3NpbmcgdGhlIHRleHQsIHRvIHJlaW5mb3JjZQogICAgICAgICAgICAgICAgICAgICAgICAvL2Zyb21UZXh0IG9ubHkgYmVpbmcgY2FsbGVkIG9uY2UgcGVyIHJlc291cmNlLiBTdGlsbAogICAgICAgICAgICAgICAgICAgICAgICAvL3N1cHBvcnQgb2xkIHN0eWxlIG9mIHBhc3NpbmcgbW9kdWxlTmFtZSBidXQgZGlzY2FyZAogICAgICAgICAgICAgICAgICAgICAgICAvL3RoYXQgbW9kdWxlTmFtZSBpbiBmYXZvciBvZiB0aGUgaW50ZXJuYWwgcmVmLgogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4dEFsdCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCA9IHRleHRBbHQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vVHVybiBvZmYgaW50ZXJhY3RpdmUgc2NyaXB0IG1hdGNoaW5nIGZvciBJRSBmb3IgYW55IGRlZmluZQogICAgICAgICAgICAgICAgICAgICAgICAvL2NhbGxzIGluIHRoZSB0ZXh0LCB0aGVuIHR1cm4gaXQgYmFjayBvbiBhdCB0aGUgZW5kLgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSW50ZXJhY3RpdmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZUludGVyYWN0aXZlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vUHJpbWUgdGhlIHN5c3RlbSBieSBjcmVhdGluZyBhIG1vZHVsZSBpbnN0YW5jZSBmb3IKICAgICAgICAgICAgICAgICAgICAgICAgLy9pdC4KICAgICAgICAgICAgICAgICAgICAgICAgZ2V0TW9kdWxlKG1vZHVsZU1hcCk7CgogICAgICAgICAgICAgICAgICAgICAgICAvL1RyYW5zZmVyIGFueSBjb25maWcgdG8gdGhpcyBvdGhlciBtb2R1bGUuCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNQcm9wKGNvbmZpZy5jb25maWcsIGlkKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLmNvbmZpZ1ttb2R1bGVOYW1lXSA9IGNvbmZpZy5jb25maWdbaWRdOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxLmV4ZWModGV4dCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvbkVycm9yKG1ha2VFcnJvcignZnJvbXRleHRldmFsJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Zyb21UZXh0IGV2YWwgZm9yICcgKyBpZCArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyBmYWlsZWQ6ICcgKyBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNJbnRlcmFjdGl2ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlSW50ZXJhY3RpdmUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvL01hcmsgdGhpcyBhcyBhIGRlcGVuZGVuY3kgZm9yIHRoZSBwbHVnaW4KICAgICAgICAgICAgICAgICAgICAgICAgLy9yZXNvdXJjZQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlcE1hcHMucHVzaChtb2R1bGVNYXApOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy9TdXBwb3J0IGFub255bW91cyBtb2R1bGVzLgogICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmNvbXBsZXRlTG9hZChtb2R1bGVOYW1lKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vQmluZCB0aGUgdmFsdWUgb2YgdGhhdCBtb2R1bGUgdG8gdGhlIHZhbHVlIGZvciB0aGlzCiAgICAgICAgICAgICAgICAgICAgICAgIC8vcmVzb3VyY2UgSUQuCiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsUmVxdWlyZShbbW9kdWxlTmFtZV0sIGxvYWQpOwogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICAvL1VzZSBwYXJlbnROYW1lIGhlcmUgc2luY2UgdGhlIHBsdWdpbidzIG5hbWUgaXMgbm90IHJlbGlhYmxlLAogICAgICAgICAgICAgICAgICAgIC8vY291bGQgYmUgc29tZSB3ZWlyZCBzdHJpbmcgd2l0aCBubyBwYXRoIHRoYXQgYWN0dWFsbHkgd2FudHMgdG8KICAgICAgICAgICAgICAgICAgICAvL3JlZmVyZW5jZSB0aGUgcGFyZW50TmFtZSdzIHBhdGguCiAgICAgICAgICAgICAgICAgICAgcGx1Z2luLmxvYWQobWFwLm5hbWUsIGxvY2FsUmVxdWlyZSwgbG9hZCwgY29uZmlnKTsKICAgICAgICAgICAgICAgIH0pKTsKCiAgICAgICAgICAgICAgICBjb250ZXh0LmVuYWJsZShwbHVnaW5NYXAsIHRoaXMpOwogICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5NYXBzW3BsdWdpbk1hcC5pZF0gPSBwbHVnaW5NYXA7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBlbmFibGU6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIGVuYWJsZWRSZWdpc3RyeVt0aGlzLm1hcC5pZF0gPSB0aGlzOwogICAgICAgICAgICAgICAgdGhpcy5lbmFibGVkID0gdHJ1ZTsKCiAgICAgICAgICAgICAgICAvL1NldCBmbGFnIG1lbnRpb25pbmcgdGhhdCB0aGUgbW9kdWxlIGlzIGVuYWJsaW5nLAogICAgICAgICAgICAgICAgLy9zbyB0aGF0IGltbWVkaWF0ZSBjYWxscyB0byB0aGUgZGVmaW5lZCBjYWxsYmFja3MKICAgICAgICAgICAgICAgIC8vZm9yIGRlcGVuZGVuY2llcyBkbyBub3QgdHJpZ2dlciBpbmFkdmVydGVudCBsb2FkCiAgICAgICAgICAgICAgICAvL3dpdGggdGhlIGRlcENvdW50IHN0aWxsIGJlaW5nIHplcm8uCiAgICAgICAgICAgICAgICB0aGlzLmVuYWJsaW5nID0gdHJ1ZTsKCiAgICAgICAgICAgICAgICAvL0VuYWJsZSBlYWNoIGRlcGVuZGVuY3kKICAgICAgICAgICAgICAgIGVhY2godGhpcy5kZXBNYXBzLCBiaW5kKHRoaXMsIGZ1bmN0aW9uIChkZXBNYXAsIGkpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgaWQsIG1vZCwgaGFuZGxlcjsKCiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkZXBNYXAgPT09ICdzdHJpbmcnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vRGVwZW5kZW5jeSBuZWVkcyB0byBiZSBjb252ZXJ0ZWQgdG8gYSBkZXBNYXAKICAgICAgICAgICAgICAgICAgICAgICAgLy9hbmQgd2lyZWQgdXAgdG8gdGhpcyBtb2R1bGUuCiAgICAgICAgICAgICAgICAgICAgICAgIGRlcE1hcCA9IG1ha2VNb2R1bGVNYXAoZGVwTWFwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLm1hcC5pc0RlZmluZSA/IHRoaXMubWFwIDogdGhpcy5tYXAucGFyZW50TWFwKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhdGhpcy5za2lwTWFwKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXBNYXBzW2ldID0gZGVwTWFwOwoKICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlciA9IGdldE93bihoYW5kbGVycywgZGVwTWFwLmlkKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYW5kbGVyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlcEV4cG9ydHNbaV0gPSBoYW5kbGVyKHRoaXMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlcENvdW50ICs9IDE7CgogICAgICAgICAgICAgICAgICAgICAgICBvbihkZXBNYXAsICdkZWZpbmVkJywgYmluZCh0aGlzLCBmdW5jdGlvbiAoZGVwRXhwb3J0cykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudW5kZWZlZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmaW5lRGVwKGksIGRlcEV4cG9ydHMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGVjaygpOwogICAgICAgICAgICAgICAgICAgICAgICB9KSk7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5lcnJiYWNrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbihkZXBNYXAsICdlcnJvcicsIGJpbmQodGhpcywgdGhpcy5lcnJiYWNrKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5ldmVudHMuZXJyb3IpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vIGRpcmVjdCBlcnJiYWNrIG9uIHRoaXMgbW9kdWxlLCBidXQgc29tZXRoaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlbHNlIGlzIGxpc3RlbmluZyBmb3IgZXJyb3JzLCBzbyBiZSBzdXJlIHRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwcm9wYWdhdGUgdGhlIGVycm9yIGNvcnJlY3RseS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uKGRlcE1hcCwgJ2Vycm9yJywgYmluZCh0aGlzLCBmdW5jdGlvbihlcnIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWQgPSBkZXBNYXAuaWQ7CiAgICAgICAgICAgICAgICAgICAgbW9kID0gcmVnaXN0cnlbaWRdOwoKICAgICAgICAgICAgICAgICAgICAvL1NraXAgc3BlY2lhbCBtb2R1bGVzIGxpa2UgJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnCiAgICAgICAgICAgICAgICAgICAgLy9BbHNvLCBkb24ndCBjYWxsIGVuYWJsZSBpZiBpdCBpcyBhbHJlYWR5IGVuYWJsZWQsCiAgICAgICAgICAgICAgICAgICAgLy9pbXBvcnRhbnQgaW4gY2lyY3VsYXIgZGVwZW5kZW5jeSBjYXNlcy4KICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc1Byb3AoaGFuZGxlcnMsIGlkKSAmJiBtb2QgJiYgIW1vZC5lbmFibGVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZW5hYmxlKGRlcE1hcCwgdGhpcyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSkpOwoKICAgICAgICAgICAgICAgIC8vRW5hYmxlIGVhY2ggcGx1Z2luIHRoYXQgaXMgdXNlZCBpbgogICAgICAgICAgICAgICAgLy9hIGRlcGVuZGVuY3kKICAgICAgICAgICAgICAgIGVhY2hQcm9wKHRoaXMucGx1Z2luTWFwcywgYmluZCh0aGlzLCBmdW5jdGlvbiAocGx1Z2luTWFwKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIG1vZCA9IGdldE93bihyZWdpc3RyeSwgcGx1Z2luTWFwLmlkKTsKICAgICAgICAgICAgICAgICAgICBpZiAobW9kICYmICFtb2QuZW5hYmxlZCkgewogICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmVuYWJsZShwbHVnaW5NYXAsIHRoaXMpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pKTsKCiAgICAgICAgICAgICAgICB0aGlzLmVuYWJsaW5nID0gZmFsc2U7CgogICAgICAgICAgICAgICAgdGhpcy5jaGVjaygpOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgb246IGZ1bmN0aW9uIChuYW1lLCBjYikgewogICAgICAgICAgICAgICAgdmFyIGNicyA9IHRoaXMuZXZlbnRzW25hbWVdOwogICAgICAgICAgICAgICAgaWYgKCFjYnMpIHsKICAgICAgICAgICAgICAgICAgICBjYnMgPSB0aGlzLmV2ZW50c1tuYW1lXSA9IFtdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY2JzLnB1c2goY2IpOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgZW1pdDogZnVuY3Rpb24gKG5hbWUsIGV2dCkgewogICAgICAgICAgICAgICAgZWFjaCh0aGlzLmV2ZW50c1tuYW1lXSwgZnVuY3Rpb24gKGNiKSB7CiAgICAgICAgICAgICAgICAgICAgY2IoZXZ0KTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdlcnJvcicpIHsKICAgICAgICAgICAgICAgICAgICAvL05vdyB0aGF0IHRoZSBlcnJvciBoYW5kbGVyIHdhcyB0cmlnZ2VyZWQsIHJlbW92ZQogICAgICAgICAgICAgICAgICAgIC8vdGhlIGxpc3RlbmVycywgc2luY2UgdGhpcyBicm9rZW4gTW9kdWxlIGluc3RhbmNlCiAgICAgICAgICAgICAgICAgICAgLy9jYW4gc3RheSBhcm91bmQgZm9yIGEgd2hpbGUgaW4gdGhlIHJlZ2lzdHJ5LgogICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmV2ZW50c1tuYW1lXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH07CgogICAgICAgIGZ1bmN0aW9uIGNhbGxHZXRNb2R1bGUoYXJncykgewogICAgICAgICAgICAvL1NraXAgbW9kdWxlcyBhbHJlYWR5IGRlZmluZWQuCiAgICAgICAgICAgIGlmICghaGFzUHJvcChkZWZpbmVkLCBhcmdzWzBdKSkgewogICAgICAgICAgICAgICAgZ2V0TW9kdWxlKG1ha2VNb2R1bGVNYXAoYXJnc1swXSwgbnVsbCwgdHJ1ZSkpLmluaXQoYXJnc1sxXSwgYXJnc1syXSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKG5vZGUsIGZ1bmMsIG5hbWUsIGllTmFtZSkgewogICAgICAgICAgICAvL0Zhdm9yIGRldGFjaEV2ZW50IGJlY2F1c2Ugb2YgSUU5CiAgICAgICAgICAgIC8vaXNzdWUsIHNlZSBhdHRhY2hFdmVudC9hZGRFdmVudExpc3RlbmVyIGNvbW1lbnQgZWxzZXdoZXJlCiAgICAgICAgICAgIC8vaW4gdGhpcyBmaWxlLgogICAgICAgICAgICBpZiAobm9kZS5kZXRhY2hFdmVudCAmJiAhaXNPcGVyYSkgewogICAgICAgICAgICAgICAgLy9Qcm9iYWJseSBJRS4gSWYgbm90IGl0IHdpbGwgdGhyb3cgYW4gZXJyb3IsIHdoaWNoIHdpbGwgYmUKICAgICAgICAgICAgICAgIC8vdXNlZnVsIHRvIGtub3cuCiAgICAgICAgICAgICAgICBpZiAoaWVOYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgbm9kZS5kZXRhY2hFdmVudChpZU5hbWUsIGZ1bmMpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgbm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKG5hbWUsIGZ1bmMsIGZhbHNlKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogR2l2ZW4gYW4gZXZlbnQgZnJvbSBhIHNjcmlwdCBub2RlLCBnZXQgdGhlIHJlcXVpcmVqcyBpbmZvIGZyb20gaXQsCiAgICAgICAgICogYW5kIHRoZW4gcmVtb3ZlcyB0aGUgZXZlbnQgbGlzdGVuZXJzIG9uIHRoZSBub2RlLgogICAgICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2dAogICAgICAgICAqIEByZXR1cm5zIHtPYmplY3R9CiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0U2NyaXB0RGF0YShldnQpIHsKICAgICAgICAgICAgLy9Vc2luZyBjdXJyZW50VGFyZ2V0IGluc3RlYWQgb2YgdGFyZ2V0IGZvciBGaXJlZm94IDIuMCdzIHNha2UuIE5vdAogICAgICAgICAgICAvL2FsbCBvbGQgYnJvd3NlcnMgd2lsbCBiZSBzdXBwb3J0ZWQsIGJ1dCB0aGlzIG9uZSB3YXMgZWFzeSBlbm91Z2gKICAgICAgICAgICAgLy90byBzdXBwb3J0IGFuZCBzdGlsbCBtYWtlcyBzZW5zZS4KICAgICAgICAgICAgdmFyIG5vZGUgPSBldnQuY3VycmVudFRhcmdldCB8fCBldnQuc3JjRWxlbWVudDsKCiAgICAgICAgICAgIC8vUmVtb3ZlIHRoZSBsaXN0ZW5lcnMgb25jZSBoZXJlLgogICAgICAgICAgICByZW1vdmVMaXN0ZW5lcihub2RlLCBjb250ZXh0Lm9uU2NyaXB0TG9hZCwgJ2xvYWQnLCAnb25yZWFkeXN0YXRlY2hhbmdlJyk7CiAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKG5vZGUsIGNvbnRleHQub25TY3JpcHRFcnJvciwgJ2Vycm9yJyk7CgogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgbm9kZTogbm9kZSwKICAgICAgICAgICAgICAgIGlkOiBub2RlICYmIG5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLXJlcXVpcmVtb2R1bGUnKQogICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gaW50YWtlRGVmaW5lcygpIHsKICAgICAgICAgICAgdmFyIGFyZ3M7CgogICAgICAgICAgICAvL0FueSBkZWZpbmVkIG1vZHVsZXMgaW4gdGhlIGdsb2JhbCBxdWV1ZSwgaW50YWtlIHRoZW0gbm93LgogICAgICAgICAgICB0YWtlR2xvYmFsUXVldWUoKTsKCiAgICAgICAgICAgIC8vTWFrZSBzdXJlIGFueSByZW1haW5pbmcgZGVmUXVldWUgaXRlbXMgZ2V0IHByb3Blcmx5IHByb2Nlc3NlZC4KICAgICAgICAgICAgd2hpbGUgKGRlZlF1ZXVlLmxlbmd0aCkgewogICAgICAgICAgICAgICAgYXJncyA9IGRlZlF1ZXVlLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICBpZiAoYXJnc1swXSA9PT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBvbkVycm9yKG1ha2VFcnJvcignbWlzbWF0Y2gnLCAnTWlzbWF0Y2hlZCBhbm9ueW1vdXMgZGVmaW5lKCkgbW9kdWxlOiAnICsKICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1thcmdzLmxlbmd0aCAtIDFdKSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIC8vYXJncyBhcmUgaWQsIGRlcHMsIGZhY3RvcnkuIFNob3VsZCBiZSBub3JtYWxpemVkIGJ5IHRoZQogICAgICAgICAgICAgICAgICAgIC8vZGVmaW5lKCkgZnVuY3Rpb24uCiAgICAgICAgICAgICAgICAgICAgY2FsbEdldE1vZHVsZShhcmdzKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBjb250ZXh0LmRlZlF1ZXVlTWFwID0ge307CiAgICAgICAgfQoKICAgICAgICBjb250ZXh0ID0gewogICAgICAgICAgICBjb25maWc6IGNvbmZpZywKICAgICAgICAgICAgY29udGV4dE5hbWU6IGNvbnRleHROYW1lLAogICAgICAgICAgICByZWdpc3RyeTogcmVnaXN0cnksCiAgICAgICAgICAgIGRlZmluZWQ6IGRlZmluZWQsCiAgICAgICAgICAgIHVybEZldGNoZWQ6IHVybEZldGNoZWQsCiAgICAgICAgICAgIGRlZlF1ZXVlOiBkZWZRdWV1ZSwKICAgICAgICAgICAgZGVmUXVldWVNYXA6IHt9LAogICAgICAgICAgICBNb2R1bGU6IE1vZHVsZSwKICAgICAgICAgICAgbWFrZU1vZHVsZU1hcDogbWFrZU1vZHVsZU1hcCwKICAgICAgICAgICAgbmV4dFRpY2s6IHJlcS5uZXh0VGljaywKICAgICAgICAgICAgb25FcnJvcjogb25FcnJvciwKCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBTZXQgYSBjb25maWd1cmF0aW9uIGZvciB0aGUgY29udGV4dC4KICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNmZyBjb25maWcgb2JqZWN0IHRvIGludGVncmF0ZS4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGNvbmZpZ3VyZTogZnVuY3Rpb24gKGNmZykgewogICAgICAgICAgICAgICAgLy9NYWtlIHN1cmUgdGhlIGJhc2VVcmwgZW5kcyBpbiBhIHNsYXNoLgogICAgICAgICAgICAgICAgaWYgKGNmZy5iYXNlVXJsKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGNmZy5iYXNlVXJsLmNoYXJBdChjZmcuYmFzZVVybC5sZW5ndGggLSAxKSAhPT0gJy8nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNmZy5iYXNlVXJsICs9ICcvJzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gQ29udmVydCBvbGQgc3R5bGUgdXJsQXJncyBzdHJpbmcgdG8gYSBmdW5jdGlvbi4KICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY2ZnLnVybEFyZ3MgPT09ICdzdHJpbmcnKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHVybEFyZ3MgPSBjZmcudXJsQXJnczsKICAgICAgICAgICAgICAgICAgICBjZmcudXJsQXJncyA9IGZ1bmN0aW9uKGlkLCB1cmwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh1cmwuaW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICcmJykgKyB1cmxBcmdzOwogICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy9TYXZlIG9mZiB0aGUgcGF0aHMgc2luY2UgdGhleSByZXF1aXJlIHNwZWNpYWwgcHJvY2Vzc2luZywKICAgICAgICAgICAgICAgIC8vdGhleSBhcmUgYWRkaXRpdmUuCiAgICAgICAgICAgICAgICB2YXIgc2hpbSA9IGNvbmZpZy5zaGltLAogICAgICAgICAgICAgICAgICAgIG9ianMgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhzOiB0cnVlLAogICAgICAgICAgICAgICAgICAgICAgICBidW5kbGVzOiB0cnVlLAogICAgICAgICAgICAgICAgICAgICAgICBjb25maWc6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgIG1hcDogdHJ1ZQogICAgICAgICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgICAgZWFjaFByb3AoY2ZnLCBmdW5jdGlvbiAodmFsdWUsIHByb3ApIHsKICAgICAgICAgICAgICAgICAgICBpZiAob2Jqc1twcm9wXSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbmZpZ1twcm9wXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnW3Byb3BdID0ge307CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgbWl4aW4oY29uZmlnW3Byb3BdLCB2YWx1ZSwgdHJ1ZSwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnW3Byb3BdID0gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgLy9SZXZlcnNlIG1hcCB0aGUgYnVuZGxlcwogICAgICAgICAgICAgICAgaWYgKGNmZy5idW5kbGVzKSB7CiAgICAgICAgICAgICAgICAgICAgZWFjaFByb3AoY2ZnLmJ1bmRsZXMsIGZ1bmN0aW9uICh2YWx1ZSwgcHJvcCkgewogICAgICAgICAgICAgICAgICAgICAgICBlYWNoKHZhbHVlLCBmdW5jdGlvbiAodikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHYgIT09IHByb3ApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidW5kbGVzTWFwW3ZdID0gcHJvcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy9NZXJnZSBzaGltCiAgICAgICAgICAgICAgICBpZiAoY2ZnLnNoaW0pIHsKICAgICAgICAgICAgICAgICAgICBlYWNoUHJvcChjZmcuc2hpbSwgZnVuY3Rpb24gKHZhbHVlLCBpZCkgewogICAgICAgICAgICAgICAgICAgICAgICAvL05vcm1hbGl6ZSB0aGUgc3RydWN0dXJlCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0FycmF5KHZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwczogdmFsdWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh2YWx1ZS5leHBvcnRzIHx8IHZhbHVlLmluaXQpICYmICF2YWx1ZS5leHBvcnRzRm4pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLmV4cG9ydHNGbiA9IGNvbnRleHQubWFrZVNoaW1FeHBvcnRzKHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBzaGltW2lkXSA9IHZhbHVlOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIGNvbmZpZy5zaGltID0gc2hpbTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvL0FkanVzdCBwYWNrYWdlcyBpZiBuZWNlc3NhcnkuCiAgICAgICAgICAgICAgICBpZiAoY2ZnLnBhY2thZ2VzKSB7CiAgICAgICAgICAgICAgICAgICAgZWFjaChjZmcucGFja2FnZXMsIGZ1bmN0aW9uIChwa2dPYmopIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxvY2F0aW9uLCBuYW1lOwoKICAgICAgICAgICAgICAgICAgICAgICAgcGtnT2JqID0gdHlwZW9mIHBrZ09iaiA9PT0gJ3N0cmluZycgPyB7bmFtZTogcGtnT2JqfSA6IHBrZ09iajsKCiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBwa2dPYmoubmFtZTsKICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24gPSBwa2dPYmoubG9jYXRpb247CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb2NhdGlvbikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLnBhdGhzW25hbWVdID0gcGtnT2JqLmxvY2F0aW9uOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvL1NhdmUgcG9pbnRlciB0byBtYWluIG1vZHVsZSBJRCBmb3IgcGtnIG5hbWUuCiAgICAgICAgICAgICAgICAgICAgICAgIC8vUmVtb3ZlIGxlYWRpbmcgZG90IGluIG1haW4sIHNvIG1haW4gcGF0aHMgYXJlIG5vcm1hbGl6ZWQsCiAgICAgICAgICAgICAgICAgICAgICAgIC8vYW5kIHJlbW92ZSBhbnkgdHJhaWxpbmcgLmpzLCBzaW5jZSBkaWZmZXJlbnQgcGFja2FnZQogICAgICAgICAgICAgICAgICAgICAgICAvL2VudnMgaGF2ZSBkaWZmZXJlbnQgY29udmVudGlvbnM6IHNvbWUgdXNlIGEgbW9kdWxlIG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIC8vc29tZSB1c2UgYSBmaWxlIG5hbWUuCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5wa2dzW25hbWVdID0gcGtnT2JqLm5hbWUgKyAnLycgKyAocGtnT2JqLm1haW4gfHwgJ21haW4nKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoY3VyckRpclJlZ0V4cCwgJycpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShqc1N1ZmZpeFJlZ0V4cCwgJycpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vSWYgdGhlcmUgYXJlIGFueSAid2FpdGluZyB0byBleGVjdXRlIiBtb2R1bGVzIGluIHRoZSByZWdpc3RyeSwKICAgICAgICAgICAgICAgIC8vdXBkYXRlIHRoZSBtYXBzIGZvciB0aGVtLCBzaW5jZSB0aGVpciBpbmZvLCBsaWtlIFVSTHMgdG8gbG9hZCwKICAgICAgICAgICAgICAgIC8vbWF5IGhhdmUgY2hhbmdlZC4KICAgICAgICAgICAgICAgIGVhY2hQcm9wKHJlZ2lzdHJ5LCBmdW5jdGlvbiAobW9kLCBpZCkgewogICAgICAgICAgICAgICAgICAgIC8vSWYgbW9kdWxlIGFscmVhZHkgaGFzIGluaXQgY2FsbGVkLCBzaW5jZSBpdCBpcyB0b28KICAgICAgICAgICAgICAgICAgICAvL2xhdGUgdG8gbW9kaWZ5IHRoZW0sIGFuZCBpZ25vcmUgdW5ub3JtYWxpemVkIG9uZXMKICAgICAgICAgICAgICAgICAgICAvL3NpbmNlIHRoZXkgYXJlIHRyYW5zaWVudC4KICAgICAgICAgICAgICAgICAgICBpZiAoIW1vZC5pbml0ZWQgJiYgIW1vZC5tYXAudW5ub3JtYWxpemVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG1vZC5tYXAgPSBtYWtlTW9kdWxlTWFwKGlkLCBudWxsLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAvL0lmIGEgZGVwcyBhcnJheSBvciBhIGNvbmZpZyBjYWxsYmFjayBpcyBzcGVjaWZpZWQsIHRoZW4gY2FsbAogICAgICAgICAgICAgICAgLy9yZXF1aXJlIHdpdGggdGhvc2UgYXJncy4gVGhpcyBpcyB1c2VmdWwgd2hlbiByZXF1aXJlIGlzIGRlZmluZWQgYXMgYQogICAgICAgICAgICAgICAgLy9jb25maWcgb2JqZWN0IGJlZm9yZSByZXF1aXJlLmpzIGlzIGxvYWRlZC4KICAgICAgICAgICAgICAgIGlmIChjZmcuZGVwcyB8fCBjZmcuY2FsbGJhY2spIHsKICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcXVpcmUoY2ZnLmRlcHMgfHwgW10sIGNmZy5jYWxsYmFjayk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBtYWtlU2hpbUV4cG9ydHM6IGZ1bmN0aW9uICh2YWx1ZSkgewogICAgICAgICAgICAgICAgZnVuY3Rpb24gZm4oKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHJldDsKICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUuaW5pdCkgewogICAgICAgICAgICAgICAgICAgICAgICByZXQgPSB2YWx1ZS5pbml0LmFwcGx5KGdsb2JhbCwgYXJndW1lbnRzKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldCB8fCAodmFsdWUuZXhwb3J0cyAmJiBnZXRHbG9iYWwodmFsdWUuZXhwb3J0cykpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIGZuOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgbWFrZVJlcXVpcmU6IGZ1bmN0aW9uIChyZWxNYXAsIG9wdGlvbnMpIHsKICAgICAgICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OwoKICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGxvY2FsUmVxdWlyZShkZXBzLCBjYWxsYmFjaywgZXJyYmFjaykgewogICAgICAgICAgICAgICAgICAgIHZhciBpZCwgbWFwLCByZXF1aXJlTW9kOwoKICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5lbmFibGVCdWlsZENhbGxiYWNrICYmIGNhbGxiYWNrICYmIGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLl9fcmVxdWlyZUpzQnVpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkZXBzID09PSAnc3RyaW5nJykgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihjYWxsYmFjaykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vSW52YWxpZCBjYWxsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb25FcnJvcihtYWtlRXJyb3IoJ3JlcXVpcmVhcmdzJywgJ0ludmFsaWQgcmVxdWlyZSBjYWxsJyksIGVycmJhY2spOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvL0lmIHJlcXVpcmV8ZXhwb3J0c3xtb2R1bGUgYXJlIHJlcXVlc3RlZCwgZ2V0IHRoZQogICAgICAgICAgICAgICAgICAgICAgICAvL3ZhbHVlIGZvciB0aGVtIGZyb20gdGhlIHNwZWNpYWwgaGFuZGxlcnMuIENhdmVhdDoKICAgICAgICAgICAgICAgICAgICAgICAgLy90aGlzIG9ubHkgd29ya3Mgd2hpbGUgbW9kdWxlIGlzIGJlaW5nIGRlZmluZWQuCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWxNYXAgJiYgaGFzUHJvcChoYW5kbGVycywgZGVwcykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGVyc1tkZXBzXShyZWdpc3RyeVtyZWxNYXAuaWRdKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy9TeW5jaHJvbm91cyBhY2Nlc3MgdG8gb25lIG1vZHVsZS4gSWYgcmVxdWlyZS5nZXQgaXMKICAgICAgICAgICAgICAgICAgICAgICAgLy9hdmFpbGFibGUgKGFzIGluIHRoZSBOb2RlIGFkYXB0ZXIpLCBwcmVmZXIgdGhhdC4KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcS5nZXQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXEuZ2V0KGNvbnRleHQsIGRlcHMsIHJlbE1hcCwgbG9jYWxSZXF1aXJlKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy9Ob3JtYWxpemUgbW9kdWxlIG5hbWUsIGlmIGl0IGNvbnRhaW5zIC4gb3IgLi4KICAgICAgICAgICAgICAgICAgICAgICAgbWFwID0gbWFrZU1vZHVsZU1hcChkZXBzLCByZWxNYXAsIGZhbHNlLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWQgPSBtYXAuaWQ7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc1Byb3AoZGVmaW5lZCwgaWQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb25FcnJvcihtYWtlRXJyb3IoJ25vdGxvYWRlZCcsICdNb2R1bGUgbmFtZSAiJyArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIiBoYXMgbm90IGJlZW4gbG9hZGVkIHlldCBmb3IgY29udGV4dDogJyArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0TmFtZSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVsTWFwID8gJycgOiAnLiBVc2UgcmVxdWlyZShbXSknKSkpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkZWZpbmVkW2lkXTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIC8vR3JhYiBkZWZpbmVzIHdhaXRpbmcgaW4gdGhlIGdsb2JhbCBxdWV1ZS4KICAgICAgICAgICAgICAgICAgICBpbnRha2VEZWZpbmVzKCk7CgogICAgICAgICAgICAgICAgICAgIC8vTWFyayBhbGwgdGhlIGRlcGVuZGVuY2llcyBhcyBuZWVkaW5nIHRvIGJlIGxvYWRlZC4KICAgICAgICAgICAgICAgICAgICBjb250ZXh0Lm5leHRUaWNrKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy9Tb21lIGRlZmluZXMgY291bGQgaGF2ZSBiZWVuIGFkZGVkIHNpbmNlIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAvL3JlcXVpcmUgY2FsbCwgY29sbGVjdCB0aGVtLgogICAgICAgICAgICAgICAgICAgICAgICBpbnRha2VEZWZpbmVzKCk7CgogICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlTW9kID0gZ2V0TW9kdWxlKG1ha2VNb2R1bGVNYXAobnVsbCwgcmVsTWFwKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAvL1N0b3JlIGlmIG1hcCBjb25maWcgc2hvdWxkIGJlIGFwcGxpZWQgdG8gdGhpcyByZXF1aXJlCiAgICAgICAgICAgICAgICAgICAgICAgIC8vY2FsbCBmb3IgZGVwZW5kZW5jaWVzLgogICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlTW9kLnNraXBNYXAgPSBvcHRpb25zLnNraXBNYXA7CgogICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlTW9kLmluaXQoZGVwcywgY2FsbGJhY2ssIGVycmJhY2ssIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgICAgICAgICBjaGVja0xvYWRlZCgpOwogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gbG9jYWxSZXF1aXJlOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIG1peGluKGxvY2FsUmVxdWlyZSwgewogICAgICAgICAgICAgICAgICAgIGlzQnJvd3NlcjogaXNCcm93c2VyLAoKICAgICAgICAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgKiBDb252ZXJ0cyBhIG1vZHVsZSBuYW1lICsgLmV4dGVuc2lvbiBpbnRvIGFuIFVSTCBwYXRoLgogICAgICAgICAgICAgICAgICAgICAqICpSZXF1aXJlcyogdGhlIHVzZSBvZiBhIG1vZHVsZSBuYW1lLiBJdCBkb2VzIG5vdCBzdXBwb3J0IHVzaW5nCiAgICAgICAgICAgICAgICAgICAgICogcGxhaW4gVVJMcyBsaWtlIG5hbWVUb1VybC4KICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICB0b1VybDogZnVuY3Rpb24gKG1vZHVsZU5hbWVQbHVzRXh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9IG1vZHVsZU5hbWVQbHVzRXh0Lmxhc3RJbmRleE9mKCcuJyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWdtZW50ID0gbW9kdWxlTmFtZVBsdXNFeHQuc3BsaXQoJy8nKVswXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVsYXRpdmUgPSBzZWdtZW50ID09PSAnLicgfHwgc2VnbWVudCA9PT0gJy4uJzsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vSGF2ZSBhIGZpbGUgZXh0ZW5zaW9uIGFsaWFzLCBhbmQgaXQgaXMgbm90IHRoZQogICAgICAgICAgICAgICAgICAgICAgICAvL2RvdHMgZnJvbSBhIHJlbGF0aXZlIHBhdGguCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEgJiYgKCFpc1JlbGF0aXZlIHx8IGluZGV4ID4gMSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dCA9IG1vZHVsZU5hbWVQbHVzRXh0LnN1YnN0cmluZyhpbmRleCwgbW9kdWxlTmFtZVBsdXNFeHQubGVuZ3RoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZU5hbWVQbHVzRXh0ID0gbW9kdWxlTmFtZVBsdXNFeHQuc3Vic3RyaW5nKDAsIGluZGV4KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQubmFtZVRvVXJsKG5vcm1hbGl6ZShtb2R1bGVOYW1lUGx1c0V4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsTWFwICYmIHJlbE1hcC5pZCwgdHJ1ZSksIGV4dCwgIHRydWUpOwogICAgICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgICAgIGRlZmluZWQ6IGZ1bmN0aW9uIChpZCkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFzUHJvcChkZWZpbmVkLCBtYWtlTW9kdWxlTWFwKGlkLCByZWxNYXAsIGZhbHNlLCB0cnVlKS5pZCk7CiAgICAgICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkOiBmdW5jdGlvbiAoaWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWQgPSBtYWtlTW9kdWxlTWFwKGlkLCByZWxNYXAsIGZhbHNlLCB0cnVlKS5pZDsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhc1Byb3AoZGVmaW5lZCwgaWQpIHx8IGhhc1Byb3AocmVnaXN0cnksIGlkKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAvL09ubHkgYWxsb3cgdW5kZWYgb24gdG9wIGxldmVsIHJlcXVpcmUgY2FsbHMKICAgICAgICAgICAgICAgIGlmICghcmVsTWFwKSB7CiAgICAgICAgICAgICAgICAgICAgbG9jYWxSZXF1aXJlLnVuZGVmID0gZnVuY3Rpb24gKGlkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vQmluZCBhbnkgd2FpdGluZyBkZWZpbmUoKSBjYWxscyB0byB0aGlzIGNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgIC8vZml4IGZvciAjNDA4CiAgICAgICAgICAgICAgICAgICAgICAgIHRha2VHbG9iYWxRdWV1ZSgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hcCA9IG1ha2VNb2R1bGVNYXAoaWQsIHJlbE1hcCwgdHJ1ZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2QgPSBnZXRPd24ocmVnaXN0cnksIGlkKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIG1vZC51bmRlZmVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlU2NyaXB0KGlkKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBkZWZpbmVkW2lkXTsKICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHVybEZldGNoZWRbbWFwLnVybF07CiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB1bmRlZkV2ZW50c1tpZF07CgogICAgICAgICAgICAgICAgICAgICAgICAvL0NsZWFuIHF1ZXVlZCBkZWZpbmVzIHRvby4gR28gYmFja3dhcmRzCiAgICAgICAgICAgICAgICAgICAgICAgIC8vaW4gYXJyYXkgc28gdGhhdCB0aGUgc3BsaWNlcyBkbyBub3QKICAgICAgICAgICAgICAgICAgICAgICAgLy9tZXNzIHVwIHRoZSBpdGVyYXRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgIGVhY2hSZXZlcnNlKGRlZlF1ZXVlLCBmdW5jdGlvbihhcmdzLCBpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJnc1swXSA9PT0gaWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZRdWV1ZS5zcGxpY2UoaSwgMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgY29udGV4dC5kZWZRdWV1ZU1hcFtpZF07CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0hvbGQgb24gdG8gbGlzdGVuZXJzIGluIGNhc2UgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL21vZHVsZSB3aWxsIGJlIGF0dGVtcHRlZCB0byBiZSByZWxvYWRlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy91c2luZyBhIGRpZmZlcmVudCBjb25maWcuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9kLmV2ZW50cy5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZFdmVudHNbaWRdID0gbW9kLmV2ZW50czsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhblJlZ2lzdHJ5KGlkKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIGxvY2FsUmVxdWlyZTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDYWxsZWQgdG8gZW5hYmxlIGEgbW9kdWxlIGlmIGl0IGlzIHN0aWxsIGluIHRoZSByZWdpc3RyeQogICAgICAgICAgICAgKiBhd2FpdGluZyBlbmFibGVtZW50LiBBIHNlY29uZCBhcmcsIHBhcmVudCwgdGhlIHBhcmVudCBtb2R1bGUsCiAgICAgICAgICAgICAqIGlzIHBhc3NlZCBpbiBmb3IgY29udGV4dCwgd2hlbiB0aGlzIG1ldGhvZCBpcyBvdmVycmlkZGVuIGJ5CiAgICAgICAgICAgICAqIHRoZSBvcHRpbWl6ZXIuIE5vdCBzaG93biBoZXJlIHRvIGtlZXAgY29kZSBjb21wYWN0LgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZW5hYmxlOiBmdW5jdGlvbiAoZGVwTWFwKSB7CiAgICAgICAgICAgICAgICB2YXIgbW9kID0gZ2V0T3duKHJlZ2lzdHJ5LCBkZXBNYXAuaWQpOwogICAgICAgICAgICAgICAgaWYgKG1vZCkgewogICAgICAgICAgICAgICAgICAgIGdldE1vZHVsZShkZXBNYXApLmVuYWJsZSgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAoKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIEludGVybmFsIG1ldGhvZCB1c2VkIGJ5IGVudmlyb25tZW50IGFkYXB0ZXJzIHRvIGNvbXBsZXRlIGEgbG9hZCBldmVudC4KICAgICAgICAgICAgICogQSBsb2FkIGV2ZW50IGNvdWxkIGJlIGEgc2NyaXB0IGxvYWQgb3IganVzdCBhIGxvYWQgcGFzcyBmcm9tIGEgc3luY2hyb25vdXMKICAgICAgICAgICAgICogbG9hZCBjYWxsLgogICAgICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gbW9kdWxlTmFtZSB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlIHRvIHBvdGVudGlhbGx5IGNvbXBsZXRlLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgY29tcGxldGVMb2FkOiBmdW5jdGlvbiAobW9kdWxlTmFtZSkgewogICAgICAgICAgICAgICAgdmFyIGZvdW5kLCBhcmdzLCBtb2QsCiAgICAgICAgICAgICAgICAgICAgc2hpbSA9IGdldE93bihjb25maWcuc2hpbSwgbW9kdWxlTmFtZSkgfHwge30sCiAgICAgICAgICAgICAgICAgICAgc2hFeHBvcnRzID0gc2hpbS5leHBvcnRzOwoKICAgICAgICAgICAgICAgIHRha2VHbG9iYWxRdWV1ZSgpOwoKICAgICAgICAgICAgICAgIHdoaWxlIChkZWZRdWV1ZS5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICBhcmdzID0gZGVmUXVldWUuc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICBpZiAoYXJnc1swXSA9PT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICBhcmdzWzBdID0gbW9kdWxlTmFtZTsKICAgICAgICAgICAgICAgICAgICAgICAgLy9JZiBhbHJlYWR5IGZvdW5kIGFuIGFub255bW91cyBtb2R1bGUgYW5kIGJvdW5kIGl0CiAgICAgICAgICAgICAgICAgICAgICAgIC8vdG8gdGhpcyBuYW1lLCB0aGVuIHRoaXMgaXMgc29tZSBvdGhlciBhbm9uIG1vZHVsZQogICAgICAgICAgICAgICAgICAgICAgICAvL3dhaXRpbmcgZm9yIGl0cyBjb21wbGV0ZUxvYWQgdG8gZmlyZS4KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhcmdzWzBdID09PSBtb2R1bGVOYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vRm91bmQgbWF0Y2hpbmcgZGVmaW5lIGNhbGwgZm9yIHRoaXMgc2NyaXB0IQogICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBjYWxsR2V0TW9kdWxlKGFyZ3MpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY29udGV4dC5kZWZRdWV1ZU1hcCA9IHt9OwoKICAgICAgICAgICAgICAgIC8vRG8gdGhpcyBhZnRlciB0aGUgY3ljbGUgb2YgY2FsbEdldE1vZHVsZSBpbiBjYXNlIHRoZSByZXN1bHQKICAgICAgICAgICAgICAgIC8vb2YgdGhvc2UgY2FsbHMvaW5pdCBjYWxscyBjaGFuZ2VzIHRoZSByZWdpc3RyeS4KICAgICAgICAgICAgICAgIG1vZCA9IGdldE93bihyZWdpc3RyeSwgbW9kdWxlTmFtZSk7CgogICAgICAgICAgICAgICAgaWYgKCFmb3VuZCAmJiAhaGFzUHJvcChkZWZpbmVkLCBtb2R1bGVOYW1lKSAmJiBtb2QgJiYgIW1vZC5pbml0ZWQpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnLmVuZm9yY2VEZWZpbmUgJiYgKCFzaEV4cG9ydHMgfHwgIWdldEdsb2JhbChzaEV4cG9ydHMpKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzUGF0aEZhbGxiYWNrKG1vZHVsZU5hbWUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb25FcnJvcihtYWtlRXJyb3IoJ25vZGVmaW5lJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ05vIGRlZmluZSBjYWxsIGZvciAnICsgbW9kdWxlTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21vZHVsZU5hbWVdKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAvL0Egc2NyaXB0IHRoYXQgZG9lcyBub3QgY2FsbCBkZWZpbmUoKSwgc28ganVzdCBzaW11bGF0ZQogICAgICAgICAgICAgICAgICAgICAgICAvL3RoZSBjYWxsIGZvciBpdC4KICAgICAgICAgICAgICAgICAgICAgICAgY2FsbEdldE1vZHVsZShbbW9kdWxlTmFtZSwgKHNoaW0uZGVwcyB8fCBbXSksIHNoaW0uZXhwb3J0c0ZuXSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGNoZWNrTG9hZGVkKCk7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ29udmVydHMgYSBtb2R1bGUgbmFtZSB0byBhIGZpbGUgcGF0aC4gU3VwcG9ydHMgY2FzZXMgd2hlcmUKICAgICAgICAgICAgICogbW9kdWxlTmFtZSBtYXkgYWN0dWFsbHkgYmUganVzdCBhbiBVUkwuCiAgICAgICAgICAgICAqIE5vdGUgdGhhdCBpdCAqKmRvZXMgbm90KiogY2FsbCBub3JtYWxpemUgb24gdGhlIG1vZHVsZU5hbWUsCiAgICAgICAgICAgICAqIGl0IGlzIGFzc3VtZWQgdG8gaGF2ZSBhbHJlYWR5IGJlZW4gbm9ybWFsaXplZC4gVGhpcyBpcyBhbgogICAgICAgICAgICAgKiBpbnRlcm5hbCBBUEksIG5vdCBhIHB1YmxpYyBvbmUuIFVzZSB0b1VybCBmb3IgdGhlIHB1YmxpYyBBUEkuCiAgICAgICAgICAgICAqLwogICAgICAgICAgICBuYW1lVG9Vcmw6IGZ1bmN0aW9uIChtb2R1bGVOYW1lLCBleHQsIHNraXBFeHQpIHsKICAgICAgICAgICAgICAgIHZhciBwYXRocywgc3ltcywgaSwgcGFyZW50TW9kdWxlLCB1cmwsCiAgICAgICAgICAgICAgICAgICAgcGFyZW50UGF0aCwgYnVuZGxlSWQsCiAgICAgICAgICAgICAgICAgICAgcGtnTWFpbiA9IGdldE93bihjb25maWcucGtncywgbW9kdWxlTmFtZSk7CgogICAgICAgICAgICAgICAgaWYgKHBrZ01haW4pIHsKICAgICAgICAgICAgICAgICAgICBtb2R1bGVOYW1lID0gcGtnTWFpbjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBidW5kbGVJZCA9IGdldE93bihidW5kbGVzTWFwLCBtb2R1bGVOYW1lKTsKCiAgICAgICAgICAgICAgICBpZiAoYnVuZGxlSWQpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5uYW1lVG9VcmwoYnVuZGxlSWQsIGV4dCwgc2tpcEV4dCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy9JZiBhIGNvbG9uIGlzIGluIHRoZSBVUkwsIGl0IGluZGljYXRlcyBhIHByb3RvY29sIGlzIHVzZWQgYW5kIGl0IGlzIGp1c3QKICAgICAgICAgICAgICAgIC8vYW4gVVJMIHRvIGEgZmlsZSwgb3IgaWYgaXQgc3RhcnRzIHdpdGggYSBzbGFzaCwgY29udGFpbnMgYSBxdWVyeSBhcmcgKGkuZS4gPykKICAgICAgICAgICAgICAgIC8vb3IgZW5kcyB3aXRoIC5qcywgdGhlbiBhc3N1bWUgdGhlIHVzZXIgbWVhbnQgdG8gdXNlIGFuIHVybCBhbmQgbm90IGEgbW9kdWxlIGlkLgogICAgICAgICAgICAgICAgLy9UaGUgc2xhc2ggaXMgaW1wb3J0YW50IGZvciBwcm90b2NvbC1sZXNzIFVSTHMgYXMgd2VsbCBhcyBmdWxsIHBhdGhzLgogICAgICAgICAgICAgICAgaWYgKHJlcS5qc0V4dFJlZ0V4cC50ZXN0KG1vZHVsZU5hbWUpKSB7CiAgICAgICAgICAgICAgICAgICAgLy9KdXN0IGEgcGxhaW4gcGF0aCwgbm90IG1vZHVsZSBuYW1lIGxvb2t1cCwgc28ganVzdCByZXR1cm4gaXQuCiAgICAgICAgICAgICAgICAgICAgLy9BZGQgZXh0ZW5zaW9uIGlmIGl0IGlzIGluY2x1ZGVkLiBUaGlzIGlzIGEgYml0IHdvbmt5LCBvbmx5IG5vbi0uanMgdGhpbmdzIHBhc3MKICAgICAgICAgICAgICAgICAgICAvL2FuIGV4dGVuc2lvbiwgdGhpcyBtZXRob2QgcHJvYmFibHkgbmVlZHMgdG8gYmUgcmV3b3JrZWQuCiAgICAgICAgICAgICAgICAgICAgdXJsID0gbW9kdWxlTmFtZSArIChleHQgfHwgJycpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvL0EgbW9kdWxlIHRoYXQgbmVlZHMgdG8gYmUgY29udmVydGVkIHRvIGEgcGF0aC4KICAgICAgICAgICAgICAgICAgICBwYXRocyA9IGNvbmZpZy5wYXRoczsKCiAgICAgICAgICAgICAgICAgICAgc3ltcyA9IG1vZHVsZU5hbWUuc3BsaXQoJy8nKTsKICAgICAgICAgICAgICAgICAgICAvL0ZvciBlYWNoIG1vZHVsZSBuYW1lIHNlZ21lbnQsIHNlZSBpZiB0aGVyZSBpcyBhIHBhdGgKICAgICAgICAgICAgICAgICAgICAvL3JlZ2lzdGVyZWQgZm9yIGl0LiBTdGFydCB3aXRoIG1vc3Qgc3BlY2lmaWMgbmFtZQogICAgICAgICAgICAgICAgICAgIC8vYW5kIHdvcmsgdXAgZnJvbSBpdC4KICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSBzeW1zLmxlbmd0aDsgaSA+IDA7IGkgLT0gMSkgewogICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRNb2R1bGUgPSBzeW1zLnNsaWNlKDAsIGkpLmpvaW4oJy8nKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFBhdGggPSBnZXRPd24ocGF0aHMsIHBhcmVudE1vZHVsZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRQYXRoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0lmIGFuIGFycmF5LCBpdCBtZWFucyB0aGVyZSBhcmUgYSBmZXcgY2hvaWNlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vQ2hvb3NlIHRoZSBvbmUgdGhhdCBpcyBkZXNpcmVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNBcnJheShwYXJlbnRQYXRoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFBhdGggPSBwYXJlbnRQYXRoWzBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltcy5zcGxpY2UoMCwgaSwgcGFyZW50UGF0aCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgLy9Kb2luIHRoZSBwYXRoIHBhcnRzIHRvZ2V0aGVyLCB0aGVuIGZpZ3VyZSBvdXQgaWYgYmFzZVVybCBpcyBuZWVkZWQuCiAgICAgICAgICAgICAgICAgICAgdXJsID0gc3ltcy5qb2luKCcvJyk7CiAgICAgICAgICAgICAgICAgICAgdXJsICs9IChleHQgfHwgKC9eZGF0YVw6fF5ibG9iXDp8XD8vLnRlc3QodXJsKSB8fCBza2lwRXh0ID8gJycgOiAnLmpzJykpOwogICAgICAgICAgICAgICAgICAgIHVybCA9ICh1cmwuY2hhckF0KDApID09PSAnLycgfHwgdXJsLm1hdGNoKC9eW1x3XCtcLlwtXSs6LykgPyAnJyA6IGNvbmZpZy5iYXNlVXJsKSArIHVybDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gY29uZmlnLnVybEFyZ3MgJiYgIS9eYmxvYlw6Ly50ZXN0KHVybCkgPwogICAgICAgICAgICAgICAgICAgICAgIHVybCArIGNvbmZpZy51cmxBcmdzKG1vZHVsZU5hbWUsIHVybCkgOiB1cmw7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICAvL0RlbGVnYXRlcyB0byByZXEubG9hZC4gQnJva2VuIG91dCBhcyBhIHNlcGFyYXRlIGZ1bmN0aW9uIHRvCiAgICAgICAgICAgIC8vYWxsb3cgb3ZlcnJpZGluZyBpbiB0aGUgb3B0aW1pemVyLgogICAgICAgICAgICBsb2FkOiBmdW5jdGlvbiAoaWQsIHVybCkgewogICAgICAgICAgICAgICAgcmVxLmxvYWQoY29udGV4dCwgaWQsIHVybCk7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogRXhlY3V0ZXMgYSBtb2R1bGUgY2FsbGJhY2sgZnVuY3Rpb24uIEJyb2tlbiBvdXQgYXMgYSBzZXBhcmF0ZSBmdW5jdGlvbgogICAgICAgICAgICAgKiBzb2xlbHkgdG8gYWxsb3cgdGhlIGJ1aWxkIHN5c3RlbSB0byBzZXF1ZW5jZSB0aGUgZmlsZXMgaW4gdGhlIGJ1aWx0CiAgICAgICAgICAgICAqIGxheWVyIGluIHRoZSByaWdodCBzZXF1ZW5jZS4KICAgICAgICAgICAgICoKICAgICAgICAgICAgICogQHByaXZhdGUKICAgICAgICAgICAgICovCiAgICAgICAgICAgIGV4ZWNDYjogZnVuY3Rpb24gKG5hbWUsIGNhbGxiYWNrLCBhcmdzLCBleHBvcnRzKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkoZXhwb3J0cywgYXJncyk7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogY2FsbGJhY2sgZm9yIHNjcmlwdCBsb2FkcywgdXNlZCB0byBjaGVjayBzdGF0dXMgb2YgbG9hZGluZy4KICAgICAgICAgICAgICoKICAgICAgICAgICAgICogQHBhcmFtIHtFdmVudH0gZXZ0IHRoZSBldmVudCBmcm9tIHRoZSBicm93c2VyIGZvciB0aGUgc2NyaXB0CiAgICAgICAgICAgICAqIHRoYXQgd2FzIGxvYWRlZC4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIG9uU2NyaXB0TG9hZDogZnVuY3Rpb24gKGV2dCkgewogICAgICAgICAgICAgICAgLy9Vc2luZyBjdXJyZW50VGFyZ2V0IGluc3RlYWQgb2YgdGFyZ2V0IGZvciBGaXJlZm94IDIuMCdzIHNha2UuIE5vdAogICAgICAgICAgICAgICAgLy9hbGwgb2xkIGJyb3dzZXJzIHdpbGwgYmUgc3VwcG9ydGVkLCBidXQgdGhpcyBvbmUgd2FzIGVhc3kgZW5vdWdoCiAgICAgICAgICAgICAgICAvL3RvIHN1cHBvcnQgYW5kIHN0aWxsIG1ha2VzIHNlbnNlLgogICAgICAgICAgICAgICAgaWYgKGV2dC50eXBlID09PSAnbG9hZCcgfHwKICAgICAgICAgICAgICAgICAgICAgICAgKHJlYWR5UmVnRXhwLnRlc3QoKGV2dC5jdXJyZW50VGFyZ2V0IHx8IGV2dC5zcmNFbGVtZW50KS5yZWFkeVN0YXRlKSkpIHsKICAgICAgICAgICAgICAgICAgICAvL1Jlc2V0IGludGVyYWN0aXZlIHNjcmlwdCBzbyBhIHNjcmlwdCBub2RlIGlzIG5vdCBoZWxkIG9udG8gZm9yCiAgICAgICAgICAgICAgICAgICAgLy90byBsb25nLgogICAgICAgICAgICAgICAgICAgIGludGVyYWN0aXZlU2NyaXB0ID0gbnVsbDsKCiAgICAgICAgICAgICAgICAgICAgLy9QdWxsIG91dCB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlIGFuZCB0aGUgY29udGV4dC4KICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IGdldFNjcmlwdERhdGEoZXZ0KTsKICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmNvbXBsZXRlTG9hZChkYXRhLmlkKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDYWxsYmFjayBmb3Igc2NyaXB0IGVycm9ycy4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIG9uU2NyaXB0RXJyb3I6IGZ1bmN0aW9uIChldnQpIHsKICAgICAgICAgICAgICAgIHZhciBkYXRhID0gZ2V0U2NyaXB0RGF0YShldnQpOwogICAgICAgICAgICAgICAgaWYgKCFoYXNQYXRoRmFsbGJhY2soZGF0YS5pZCkpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgcGFyZW50cyA9IFtdOwogICAgICAgICAgICAgICAgICAgIGVhY2hQcm9wKHJlZ2lzdHJ5LCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrZXkuaW5kZXhPZignX0ByJykgIT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVhY2godmFsdWUuZGVwTWFwcywgZnVuY3Rpb24oZGVwTWFwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlcE1hcC5pZCA9PT0gZGF0YS5pZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRzLnB1c2goa2V5KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gb25FcnJvcihtYWtlRXJyb3IoJ3NjcmlwdGVycm9yJywgJ1NjcmlwdCBlcnJvciBmb3IgIicgKyBkYXRhLmlkICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhcmVudHMubGVuZ3RoID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyIsIG5lZWRlZCBieTogJyArIHBhcmVudHMuam9pbignLCAnKSA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICciJyksIGV2dCwgW2RhdGEuaWRdKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICBjb250ZXh0LnJlcXVpcmUgPSBjb250ZXh0Lm1ha2VSZXF1aXJlKCk7CiAgICAgICAgcmV0dXJuIGNvbnRleHQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBNYWluIGVudHJ5IHBvaW50LgogICAgICoKICAgICAqIElmIHRoZSBvbmx5IGFyZ3VtZW50IHRvIHJlcXVpcmUgaXMgYSBzdHJpbmcsIHRoZW4gdGhlIG1vZHVsZSB0aGF0CiAgICAgKiBpcyByZXByZXNlbnRlZCBieSB0aGF0IHN0cmluZyBpcyBmZXRjaGVkIGZvciB0aGUgYXBwcm9wcmlhdGUgY29udGV4dC4KICAgICAqCiAgICAgKiBJZiB0aGUgZmlyc3QgYXJndW1lbnQgaXMgYW4gYXJyYXksIHRoZW4gaXQgd2lsbCBiZSB0cmVhdGVkIGFzIGFuIGFycmF5CiAgICAgKiBvZiBkZXBlbmRlbmN5IHN0cmluZyBuYW1lcyB0byBmZXRjaC4gQW4gb3B0aW9uYWwgZnVuY3Rpb24gY2FsbGJhY2sgY2FuCiAgICAgKiBiZSBzcGVjaWZpZWQgdG8gZXhlY3V0ZSB3aGVuIGFsbCBvZiB0aG9zZSBkZXBlbmRlbmNpZXMgYXJlIGF2YWlsYWJsZS4KICAgICAqCiAgICAgKiBNYWtlIGEgbG9jYWwgcmVxIHZhcmlhYmxlIHRvIGhlbHAgQ2FqYSBjb21wbGlhbmNlIChpdCBhc3N1bWVzIHRoaW5ncwogICAgICogb24gYSByZXF1aXJlIHRoYXQgYXJlIG5vdCBzdGFuZGFyZGl6ZWQpLCBhbmQgdG8gZ2l2ZSBhIHNob3J0CiAgICAgKiBuYW1lIGZvciBtaW5pZmljYXRpb24vbG9jYWwgc2NvcGUgdXNlLgogICAgICovCiAgICByZXEgPSByZXF1aXJlanMgPSBmdW5jdGlvbiAoZGVwcywgY2FsbGJhY2ssIGVycmJhY2ssIG9wdGlvbmFsKSB7CgogICAgICAgIC8vRmluZCB0aGUgcmlnaHQgY29udGV4dCwgdXNlIGRlZmF1bHQKICAgICAgICB2YXIgY29udGV4dCwgY29uZmlnLAogICAgICAgICAgICBjb250ZXh0TmFtZSA9IGRlZkNvbnRleHROYW1lOwoKICAgICAgICAvLyBEZXRlcm1pbmUgaWYgaGF2ZSBjb25maWcgb2JqZWN0IGluIHRoZSBjYWxsLgogICAgICAgIGlmICghaXNBcnJheShkZXBzKSAmJiB0eXBlb2YgZGVwcyAhPT0gJ3N0cmluZycpIHsKICAgICAgICAgICAgLy8gZGVwcyBpcyBhIGNvbmZpZyBvYmplY3QKICAgICAgICAgICAgY29uZmlnID0gZGVwczsKICAgICAgICAgICAgaWYgKGlzQXJyYXkoY2FsbGJhY2spKSB7CiAgICAgICAgICAgICAgICAvLyBBZGp1c3QgYXJncyBpZiB0aGVyZSBhcmUgZGVwZW5kZW5jaWVzCiAgICAgICAgICAgICAgICBkZXBzID0gY2FsbGJhY2s7CiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGVycmJhY2s7CiAgICAgICAgICAgICAgICBlcnJiYWNrID0gb3B0aW9uYWw7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBkZXBzID0gW107CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChjb25maWcgJiYgY29uZmlnLmNvbnRleHQpIHsKICAgICAgICAgICAgY29udGV4dE5hbWUgPSBjb25maWcuY29udGV4dDsKICAgICAgICB9CgogICAgICAgIGNvbnRleHQgPSBnZXRPd24oY29udGV4dHMsIGNvbnRleHROYW1lKTsKICAgICAgICBpZiAoIWNvbnRleHQpIHsKICAgICAgICAgICAgY29udGV4dCA9IGNvbnRleHRzW2NvbnRleHROYW1lXSA9IHJlcS5zLm5ld0NvbnRleHQoY29udGV4dE5hbWUpOwogICAgICAgIH0KCiAgICAgICAgaWYgKGNvbmZpZykgewogICAgICAgICAgICBjb250ZXh0LmNvbmZpZ3VyZShjb25maWcpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGNvbnRleHQucmVxdWlyZShkZXBzLCBjYWxsYmFjaywgZXJyYmFjayk7CiAgICB9OwoKICAgIC8qKgogICAgICogU3VwcG9ydCByZXF1aXJlLmNvbmZpZygpIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGNvb3BlcmF0ZSB3aXRoIG90aGVyCiAgICAgKiBBTUQgbG9hZGVycyBvbiBnbG9iYWxseSBhZ3JlZWQgbmFtZXMuCiAgICAgKi8KICAgIHJlcS5jb25maWcgPSBmdW5jdGlvbiAoY29uZmlnKSB7CiAgICAgICAgcmV0dXJuIHJlcShjb25maWcpOwogICAgfTsKCiAgICAvKioKICAgICAqIEV4ZWN1dGUgc29tZXRoaW5nIGFmdGVyIHRoZSBjdXJyZW50IHRpY2sKICAgICAqIG9mIHRoZSBldmVudCBsb29wLiBPdmVycmlkZSBmb3Igb3RoZXIgZW52cwogICAgICogdGhhdCBoYXZlIGEgYmV0dGVyIHNvbHV0aW9uIHRoYW4gc2V0VGltZW91dC4KICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBmbiBmdW5jdGlvbiB0byBleGVjdXRlIGxhdGVyLgogICAgICovCiAgICByZXEubmV4dFRpY2sgPSB0eXBlb2Ygc2V0VGltZW91dCAhPT0gJ3VuZGVmaW5lZCcgPyBmdW5jdGlvbiAoZm4pIHsKICAgICAgICBzZXRUaW1lb3V0KGZuLCA0KTsKICAgIH0gOiBmdW5jdGlvbiAoZm4pIHsgZm4oKTsgfTsKCiAgICAvKioKICAgICAqIEV4cG9ydCByZXF1aXJlIGFzIGEgZ2xvYmFsLCBidXQgb25seSBpZiBpdCBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0LgogICAgICovCiAgICBpZiAoIXJlcXVpcmUpIHsKICAgICAgICByZXF1aXJlID0gcmVxOwogICAgfQoKICAgIHJlcS52ZXJzaW9uID0gdmVyc2lvbjsKCiAgICAvL1VzZWQgdG8gZmlsdGVyIG91dCBkZXBlbmRlbmNpZXMgdGhhdCBhcmUgYWxyZWFkeSBwYXRocy4KICAgIHJlcS5qc0V4dFJlZ0V4cCA9IC9eXC98OnxcP3xcLmpzJC87CiAgICByZXEuaXNCcm93c2VyID0gaXNCcm93c2VyOwogICAgcyA9IHJlcS5zID0gewogICAgICAgIGNvbnRleHRzOiBjb250ZXh0cywKICAgICAgICBuZXdDb250ZXh0OiBuZXdDb250ZXh0CiAgICB9OwoKICAgIC8vQ3JlYXRlIGRlZmF1bHQgY29udGV4dC4KICAgIHJlcSh7fSk7CgogICAgLy9FeHBvcnRzIHNvbWUgY29udGV4dC1zZW5zaXRpdmUgbWV0aG9kcyBvbiBnbG9iYWwgcmVxdWlyZS4KICAgIGVhY2goWwogICAgICAgICd0b1VybCcsCiAgICAgICAgJ3VuZGVmJywKICAgICAgICAnZGVmaW5lZCcsCiAgICAgICAgJ3NwZWNpZmllZCcKICAgIF0sIGZ1bmN0aW9uIChwcm9wKSB7CiAgICAgICAgLy9SZWZlcmVuY2UgZnJvbSBjb250ZXh0cyBpbnN0ZWFkIG9mIGVhcmx5IGJpbmRpbmcgdG8gZGVmYXVsdCBjb250ZXh0LAogICAgICAgIC8vc28gdGhhdCBkdXJpbmcgYnVpbGRzLCB0aGUgbGF0ZXN0IGluc3RhbmNlIG9mIHRoZSBkZWZhdWx0IGNvbnRleHQKICAgICAgICAvL3dpdGggaXRzIGNvbmZpZyBnZXRzIHVzZWQuCiAgICAgICAgcmVxW3Byb3BdID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgY3R4ID0gY29udGV4dHNbZGVmQ29udGV4dE5hbWVdOwogICAgICAgICAgICByZXR1cm4gY3R4LnJlcXVpcmVbcHJvcF0uYXBwbHkoY3R4LCBhcmd1bWVudHMpOwogICAgICAgIH07CiAgICB9KTsKCiAgICBpZiAoaXNCcm93c2VyKSB7CiAgICAgICAgaGVhZCA9IHMuaGVhZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07CiAgICAgICAgLy9JZiBCQVNFIHRhZyBpcyBpbiBwbGF5LCB1c2luZyBhcHBlbmRDaGlsZCBpcyBhIHByb2JsZW0gZm9yIElFNi4KICAgICAgICAvL1doZW4gdGhhdCBicm93c2VyIGRpZXMsIHRoaXMgY2FuIGJlIHJlbW92ZWQuIERldGFpbHMgaW4gdGhpcyBqUXVlcnkgYnVnOgogICAgICAgIC8vaHR0cDovL2Rldi5qcXVlcnkuY29tL3RpY2tldC8yNzA5CiAgICAgICAgYmFzZUVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYmFzZScpWzBdOwogICAgICAgIGlmIChiYXNlRWxlbWVudCkgewogICAgICAgICAgICBoZWFkID0gcy5oZWFkID0gYmFzZUVsZW1lbnQucGFyZW50Tm9kZTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBBbnkgZXJyb3JzIHRoYXQgcmVxdWlyZSBleHBsaWNpdGx5IGdlbmVyYXRlcyB3aWxsIGJlIHBhc3NlZCB0byB0aGlzCiAgICAgKiBmdW5jdGlvbi4gSW50ZXJjZXB0L292ZXJyaWRlIGl0IGlmIHlvdSB3YW50IGN1c3RvbSBlcnJvciBoYW5kbGluZy4KICAgICAqIEBwYXJhbSB7RXJyb3J9IGVyciB0aGUgZXJyb3Igb2JqZWN0LgogICAgICovCiAgICByZXEub25FcnJvciA9IGRlZmF1bHRPbkVycm9yOwoKICAgIC8qKgogICAgICogQ3JlYXRlcyB0aGUgbm9kZSBmb3IgdGhlIGxvYWQgY29tbWFuZC4gT25seSB1c2VkIGluIGJyb3dzZXIgZW52cy4KICAgICAqLwogICAgcmVxLmNyZWF0ZU5vZGUgPSBmdW5jdGlvbiAoY29uZmlnLCBtb2R1bGVOYW1lLCB1cmwpIHsKICAgICAgICB2YXIgbm9kZSA9IGNvbmZpZy54aHRtbCA/CiAgICAgICAgICAgICAgICBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwnLCAnaHRtbDpzY3JpcHQnKSA6CiAgICAgICAgICAgICAgICBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsKICAgICAgICBub2RlLnR5cGUgPSBjb25maWcuc2NyaXB0VHlwZSB8fCAndGV4dC9qYXZhc2NyaXB0JzsKICAgICAgICBub2RlLmNoYXJzZXQgPSAndXRmLTgnOwogICAgICAgIG5vZGUuYXN5bmMgPSB0cnVlOwogICAgICAgIHJldHVybiBub2RlOwogICAgfTsKCiAgICAvKioKICAgICAqIERvZXMgdGhlIHJlcXVlc3QgdG8gbG9hZCBhIG1vZHVsZSBmb3IgdGhlIGJyb3dzZXIgY2FzZS4KICAgICAqIE1ha2UgdGhpcyBhIHNlcGFyYXRlIGZ1bmN0aW9uIHRvIGFsbG93IG90aGVyIGVudmlyb25tZW50cwogICAgICogdG8gb3ZlcnJpZGUgaXQuCiAgICAgKgogICAgICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHQgdGhlIHJlcXVpcmUgY29udGV4dCB0byBmaW5kIHN0YXRlLgogICAgICogQHBhcmFtIHtTdHJpbmd9IG1vZHVsZU5hbWUgdGhlIG5hbWUgb2YgdGhlIG1vZHVsZS4KICAgICAqIEBwYXJhbSB7T2JqZWN0fSB1cmwgdGhlIFVSTCB0byB0aGUgbW9kdWxlLgogICAgICovCiAgICByZXEubG9hZCA9IGZ1bmN0aW9uIChjb250ZXh0LCBtb2R1bGVOYW1lLCB1cmwpIHsKICAgICAgICB2YXIgY29uZmlnID0gKGNvbnRleHQgJiYgY29udGV4dC5jb25maWcpIHx8IHt9LAogICAgICAgICAgICBub2RlOwogICAgICAgIGlmIChpc0Jyb3dzZXIpIHsKICAgICAgICAgICAgLy9JbiB0aGUgYnJvd3NlciBzbyB1c2UgYSBzY3JpcHQgdGFnCiAgICAgICAgICAgIG5vZGUgPSByZXEuY3JlYXRlTm9kZShjb25maWcsIG1vZHVsZU5hbWUsIHVybCk7CgogICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZSgnZGF0YS1yZXF1aXJlY29udGV4dCcsIGNvbnRleHQuY29udGV4dE5hbWUpOwogICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZSgnZGF0YS1yZXF1aXJlbW9kdWxlJywgbW9kdWxlTmFtZSk7CgogICAgICAgICAgICAvL1NldCB1cCBsb2FkIGxpc3RlbmVyLiBUZXN0IGF0dGFjaEV2ZW50IGZpcnN0IGJlY2F1c2UgSUU5IGhhcwogICAgICAgICAgICAvL2Egc3VidGxlIGlzc3VlIGluIGl0cyBhZGRFdmVudExpc3RlbmVyIGFuZCBzY3JpcHQgb25sb2FkIGZpcmluZ3MKICAgICAgICAgICAgLy90aGF0IGRvIG5vdCBtYXRjaCB0aGUgYmVoYXZpb3Igb2YgYWxsIG90aGVyIGJyb3dzZXJzIHdpdGgKICAgICAgICAgICAgLy9hZGRFdmVudExpc3RlbmVyIHN1cHBvcnQsIHdoaWNoIGZpcmUgdGhlIG9ubG9hZCBldmVudCBmb3IgYQogICAgICAgICAgICAvL3NjcmlwdCByaWdodCBhZnRlciB0aGUgc2NyaXB0IGV4ZWN1dGlvbi4gU2VlOgogICAgICAgICAgICAvL2h0dHBzOi8vY29ubmVjdC5taWNyb3NvZnQuY29tL0lFL2ZlZWRiYWNrL2RldGFpbHMvNjQ4MDU3L3NjcmlwdC1vbmxvYWQtZXZlbnQtaXMtbm90LWZpcmVkLWltbWVkaWF0ZWx5LWFmdGVyLXNjcmlwdC1leGVjdXRpb24KICAgICAgICAgICAgLy9VTkZPUlRVTkFURUxZIE9wZXJhIGltcGxlbWVudHMgYXR0YWNoRXZlbnQgYnV0IGRvZXMgbm90IGZvbGxvdyB0aGUgc2NyaXB0CiAgICAgICAgICAgIC8vc2NyaXB0IGV4ZWN1dGlvbiBtb2RlLgogICAgICAgICAgICBpZiAobm9kZS5hdHRhY2hFdmVudCAmJgogICAgICAgICAgICAgICAgICAgIC8vQ2hlY2sgaWYgbm9kZS5hdHRhY2hFdmVudCBpcyBhcnRpZmljaWFsbHkgYWRkZWQgYnkgY3VzdG9tIHNjcmlwdCBvcgogICAgICAgICAgICAgICAgICAgIC8vbmF0aXZlbHkgc3VwcG9ydGVkIGJ5IGJyb3dzZXIKICAgICAgICAgICAgICAgICAgICAvL3JlYWQgaHR0cHM6Ly9naXRodWIuY29tL3JlcXVpcmVqcy9yZXF1aXJlanMvaXNzdWVzLzE4NwogICAgICAgICAgICAgICAgICAgIC8vaWYgd2UgY2FuIE5PVCBmaW5kIFtuYXRpdmUgY29kZV0gdGhlbiBpdCBtdXN0IE5PVCBuYXRpdmVseSBzdXBwb3J0ZWQuCiAgICAgICAgICAgICAgICAgICAgLy9pbiBJRTgsIG5vZGUuYXR0YWNoRXZlbnQgZG9lcyBub3QgaGF2ZSB0b1N0cmluZygpCiAgICAgICAgICAgICAgICAgICAgLy9Ob3RlIHRoZSB0ZXN0IGZvciAiW25hdGl2ZSBjb2RlIiB3aXRoIG5vIGNsb3NpbmcgYnJhY2UsIHNlZToKICAgICAgICAgICAgICAgICAgICAvL2h0dHBzOi8vZ2l0aHViLmNvbS9yZXF1aXJlanMvcmVxdWlyZWpzL2lzc3Vlcy8yNzMKICAgICAgICAgICAgICAgICAgICAhKG5vZGUuYXR0YWNoRXZlbnQudG9TdHJpbmcgJiYgbm9kZS5hdHRhY2hFdmVudC50b1N0cmluZygpLmluZGV4T2YoJ1tuYXRpdmUgY29kZScpIDwgMCkgJiYKICAgICAgICAgICAgICAgICAgICAhaXNPcGVyYSkgewogICAgICAgICAgICAgICAgLy9Qcm9iYWJseSBJRS4gSUUgKGF0IGxlYXN0IDYtOCkgZG8gbm90IGZpcmUKICAgICAgICAgICAgICAgIC8vc2NyaXB0IG9ubG9hZCByaWdodCBhZnRlciBleGVjdXRpbmcgdGhlIHNjcmlwdCwgc28KICAgICAgICAgICAgICAgIC8vd2UgY2Fubm90IHRpZSB0aGUgYW5vbnltb3VzIGRlZmluZSBjYWxsIHRvIGEgbmFtZS4KICAgICAgICAgICAgICAgIC8vSG93ZXZlciwgSUUgcmVwb3J0cyB0aGUgc2NyaXB0IGFzIGJlaW5nIGluICdpbnRlcmFjdGl2ZScKICAgICAgICAgICAgICAgIC8vcmVhZHlTdGF0ZSBhdCB0aGUgdGltZSBvZiB0aGUgZGVmaW5lIGNhbGwuCiAgICAgICAgICAgICAgICB1c2VJbnRlcmFjdGl2ZSA9IHRydWU7CgogICAgICAgICAgICAgICAgbm9kZS5hdHRhY2hFdmVudCgnb25yZWFkeXN0YXRlY2hhbmdlJywgY29udGV4dC5vblNjcmlwdExvYWQpOwogICAgICAgICAgICAgICAgLy9JdCB3b3VsZCBiZSBncmVhdCB0byBhZGQgYW4gZXJyb3IgaGFuZGxlciBoZXJlIHRvIGNhdGNoCiAgICAgICAgICAgICAgICAvLzQwNHMgaW4gSUU5Ky4gSG93ZXZlciwgb25yZWFkeXN0YXRlY2hhbmdlIHdpbGwgZmlyZSBiZWZvcmUKICAgICAgICAgICAgICAgIC8vdGhlIGVycm9yIGhhbmRsZXIsIHNvIHRoYXQgZG9lcyBub3QgaGVscC4gSWYgYWRkRXZlbnRMaXN0ZW5lcgogICAgICAgICAgICAgICAgLy9pcyB1c2VkLCB0aGVuIElFIHdpbGwgZmlyZSBlcnJvciBiZWZvcmUgbG9hZCwgYnV0IHdlIGNhbm5vdAogICAgICAgICAgICAgICAgLy91c2UgdGhhdCBwYXRod2F5IGdpdmVuIHRoZSBjb25uZWN0Lm1pY3Jvc29mdC5jb20gaXNzdWUKICAgICAgICAgICAgICAgIC8vbWVudGlvbmVkIGFib3ZlIGFib3V0IG5vdCBkb2luZyB0aGUgJ3NjcmlwdCBleGVjdXRlLAogICAgICAgICAgICAgICAgLy90aGVuIGZpcmUgdGhlIHNjcmlwdCBsb2FkIGV2ZW50IGxpc3RlbmVyIGJlZm9yZSBleGVjdXRlCiAgICAgICAgICAgICAgICAvL25leHQgc2NyaXB0JyB0aGF0IG90aGVyIGJyb3dzZXJzIGRvLgogICAgICAgICAgICAgICAgLy9CZXN0IGhvcGU6IElFMTAgZml4ZXMgdGhlIGlzc3VlcywKICAgICAgICAgICAgICAgIC8vYW5kIHRoZW4gZGVzdHJveXMgYWxsIGluc3RhbGxzIG9mIElFIDYtOS4KICAgICAgICAgICAgICAgIC8vbm9kZS5hdHRhY2hFdmVudCgnb25lcnJvcicsIGNvbnRleHQub25TY3JpcHRFcnJvcik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBjb250ZXh0Lm9uU2NyaXB0TG9hZCwgZmFsc2UpOwogICAgICAgICAgICAgICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGNvbnRleHQub25TY3JpcHRFcnJvciwgZmFsc2UpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG5vZGUuc3JjID0gdXJsOwoKICAgICAgICAgICAgLy9DYWxsaW5nIG9uTm9kZUNyZWF0ZWQgYWZ0ZXIgYWxsIHByb3BlcnRpZXMgb24gdGhlIG5vZGUgaGF2ZSBiZWVuCiAgICAgICAgICAgIC8vc2V0LCBidXQgYmVmb3JlIGl0IGlzIHBsYWNlZCBpbiB0aGUgRE9NLgogICAgICAgICAgICBpZiAoY29uZmlnLm9uTm9kZUNyZWF0ZWQpIHsKICAgICAgICAgICAgICAgIGNvbmZpZy5vbk5vZGVDcmVhdGVkKG5vZGUsIGNvbmZpZywgbW9kdWxlTmFtZSwgdXJsKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy9Gb3Igc29tZSBjYWNoZSBjYXNlcyBpbiBJRSA2LTgsIHRoZSBzY3JpcHQgZXhlY3V0ZXMgYmVmb3JlIHRoZSBlbmQKICAgICAgICAgICAgLy9vZiB0aGUgYXBwZW5kQ2hpbGQgZXhlY3V0aW9uLCBzbyB0byB0aWUgYW4gYW5vbnltb3VzIGRlZmluZQogICAgICAgICAgICAvL2NhbGwgdG8gdGhlIG1vZHVsZSBuYW1lICh3aGljaCBpcyBzdG9yZWQgb24gdGhlIG5vZGUpLCBob2xkIG9uCiAgICAgICAgICAgIC8vdG8gYSByZWZlcmVuY2UgdG8gdGhpcyBub2RlLCBidXQgY2xlYXIgYWZ0ZXIgdGhlIERPTSBpbnNlcnRpb24uCiAgICAgICAgICAgIGN1cnJlbnRseUFkZGluZ1NjcmlwdCA9IG5vZGU7CiAgICAgICAgICAgIGlmIChiYXNlRWxlbWVudCkgewogICAgICAgICAgICAgICAgaGVhZC5pbnNlcnRCZWZvcmUobm9kZSwgYmFzZUVsZW1lbnQpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaGVhZC5hcHBlbmRDaGlsZChub2RlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjdXJyZW50bHlBZGRpbmdTY3JpcHQgPSBudWxsOwoKICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgICAgfSBlbHNlIGlmIChpc1dlYldvcmtlcikgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgLy9JbiBhIHdlYiB3b3JrZXIsIHVzZSBpbXBvcnRTY3JpcHRzLiBUaGlzIGlzIG5vdCBhIHZlcnkKICAgICAgICAgICAgICAgIC8vZWZmaWNpZW50IHVzZSBvZiBpbXBvcnRTY3JpcHRzLCBpbXBvcnRTY3JpcHRzIHdpbGwgYmxvY2sgdW50aWwKICAgICAgICAgICAgICAgIC8vaXRzIHNjcmlwdCBpcyBkb3dubG9hZGVkIGFuZCBldmFsdWF0ZWQuIEhvd2V2ZXIsIGlmIHdlYiB3b3JrZXJzCiAgICAgICAgICAgICAgICAvL2FyZSBpbiBwbGF5LCB0aGUgZXhwZWN0YXRpb24gaXMgdGhhdCBhIGJ1aWxkIGhhcyBiZWVuIGRvbmUgc28KICAgICAgICAgICAgICAgIC8vdGhhdCBvbmx5IG9uZSBzY3JpcHQgbmVlZHMgdG8gYmUgbG9hZGVkIGFueXdheS4gVGhpcyBtYXkgbmVlZAogICAgICAgICAgICAgICAgLy90byBiZSByZWV2YWx1YXRlZCBpZiBvdGhlciB1c2UgY2FzZXMgYmVjb21lIGNvbW1vbi4KCiAgICAgICAgICAgICAgICAvLyBQb3N0IGEgdGFzayB0byB0aGUgZXZlbnQgbG9vcCB0byB3b3JrIGFyb3VuZCBhIGJ1ZyBpbiBXZWJLaXQKICAgICAgICAgICAgICAgIC8vIHdoZXJlIHRoZSB3b3JrZXIgZ2V0cyBnYXJiYWdlLWNvbGxlY3RlZCBhZnRlciBjYWxsaW5nCiAgICAgICAgICAgICAgICAvLyBpbXBvcnRTY3JpcHRzKCk6IGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE1MzMxNwogICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHt9LCAwKTsKICAgICAgICAgICAgICAgIGltcG9ydFNjcmlwdHModXJsKTsKCiAgICAgICAgICAgICAgICAvL0FjY291bnQgZm9yIGFub255bW91cyBtb2R1bGVzCiAgICAgICAgICAgICAgICBjb250ZXh0LmNvbXBsZXRlTG9hZChtb2R1bGVOYW1lKTsKICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgY29udGV4dC5vbkVycm9yKG1ha2VFcnJvcignaW1wb3J0c2NyaXB0cycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ltcG9ydFNjcmlwdHMgZmFpbGVkIGZvciAnICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlTmFtZSArICcgYXQgJyArIHVybCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttb2R1bGVOYW1lXSkpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKCiAgICBmdW5jdGlvbiBnZXRJbnRlcmFjdGl2ZVNjcmlwdCgpIHsKICAgICAgICBpZiAoaW50ZXJhY3RpdmVTY3JpcHQgJiYgaW50ZXJhY3RpdmVTY3JpcHQucmVhZHlTdGF0ZSA9PT0gJ2ludGVyYWN0aXZlJykgewogICAgICAgICAgICByZXR1cm4gaW50ZXJhY3RpdmVTY3JpcHQ7CiAgICAgICAgfQoKICAgICAgICBlYWNoUmV2ZXJzZShzY3JpcHRzKCksIGZ1bmN0aW9uIChzY3JpcHQpIHsKICAgICAgICAgICAgaWYgKHNjcmlwdC5yZWFkeVN0YXRlID09PSAnaW50ZXJhY3RpdmUnKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gKGludGVyYWN0aXZlU2NyaXB0ID0gc2NyaXB0KTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIHJldHVybiBpbnRlcmFjdGl2ZVNjcmlwdDsKICAgIH0KCiAgICAvL0xvb2sgZm9yIGEgZGF0YS1tYWluIHNjcmlwdCBhdHRyaWJ1dGUsIHdoaWNoIGNvdWxkIGFsc28gYWRqdXN0IHRoZSBiYXNlVXJsLgogICAgaWYgKGlzQnJvd3NlciAmJiAhY2ZnLnNraXBEYXRhTWFpbikgewogICAgICAgIC8vRmlndXJlIG91dCBiYXNlVXJsLiBHZXQgaXQgZnJvbSB0aGUgc2NyaXB0IHRhZyB3aXRoIHJlcXVpcmUuanMgaW4gaXQuCiAgICAgICAgZWFjaFJldmVyc2Uoc2NyaXB0cygpLCBmdW5jdGlvbiAoc2NyaXB0KSB7CiAgICAgICAgICAgIC8vU2V0IHRoZSAnaGVhZCcgd2hlcmUgd2UgY2FuIGFwcGVuZCBjaGlsZHJlbiBieQogICAgICAgICAgICAvL3VzaW5nIHRoZSBzY3JpcHQncyBwYXJlbnQuCiAgICAgICAgICAgIGlmICghaGVhZCkgewogICAgICAgICAgICAgICAgaGVhZCA9IHNjcmlwdC5wYXJlbnROb2RlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvL0xvb2sgZm9yIGEgZGF0YS1tYWluIGF0dHJpYnV0ZSB0byBzZXQgbWFpbiBzY3JpcHQgZm9yIHRoZSBwYWdlCiAgICAgICAgICAgIC8vdG8gbG9hZC4gSWYgaXQgaXMgdGhlcmUsIHRoZSBwYXRoIHRvIGRhdGEgbWFpbiBiZWNvbWVzIHRoZQogICAgICAgICAgICAvL2Jhc2VVcmwsIGlmIGl0IGlzIG5vdCBhbHJlYWR5IHNldC4KICAgICAgICAgICAgZGF0YU1haW4gPSBzY3JpcHQuZ2V0QXR0cmlidXRlKCdkYXRhLW1haW4nKTsKICAgICAgICAgICAgaWYgKGRhdGFNYWluKSB7CiAgICAgICAgICAgICAgICAvL1ByZXNlcnZlIGRhdGFNYWluIGluIGNhc2UgaXQgaXMgYSBwYXRoIChpLmUuIGNvbnRhaW5zICc/JykKICAgICAgICAgICAgICAgIG1haW5TY3JpcHQgPSBkYXRhTWFpbjsKCiAgICAgICAgICAgICAgICAvL1NldCBmaW5hbCBiYXNlVXJsIGlmIHRoZXJlIGlzIG5vdCBhbHJlYWR5IGFuIGV4cGxpY2l0IG9uZSwKICAgICAgICAgICAgICAgIC8vYnV0IG9ubHkgZG8gc28gaWYgdGhlIGRhdGEtbWFpbiB2YWx1ZSBpcyBub3QgYSBsb2FkZXIgcGx1Z2luCiAgICAgICAgICAgICAgICAvL21vZHVsZSBJRC4KICAgICAgICAgICAgICAgIGlmICghY2ZnLmJhc2VVcmwgJiYgbWFpblNjcmlwdC5pbmRleE9mKCchJykgPT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgLy9QdWxsIG9mZiB0aGUgZGlyZWN0b3J5IG9mIGRhdGEtbWFpbiBmb3IgdXNlIGFzIHRoZQogICAgICAgICAgICAgICAgICAgIC8vYmFzZVVybC4KICAgICAgICAgICAgICAgICAgICBzcmMgPSBtYWluU2NyaXB0LnNwbGl0KCcvJyk7CiAgICAgICAgICAgICAgICAgICAgbWFpblNjcmlwdCA9IHNyYy5wb3AoKTsKICAgICAgICAgICAgICAgICAgICBzdWJQYXRoID0gc3JjLmxlbmd0aCA/IHNyYy5qb2luKCcvJykgICsgJy8nIDogJy4vJzsKCiAgICAgICAgICAgICAgICAgICAgY2ZnLmJhc2VVcmwgPSBzdWJQYXRoOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vU3RyaXAgb2ZmIGFueSB0cmFpbGluZyAuanMgc2luY2UgbWFpblNjcmlwdCBpcyBub3cKICAgICAgICAgICAgICAgIC8vbGlrZSBhIG1vZHVsZSBuYW1lLgogICAgICAgICAgICAgICAgbWFpblNjcmlwdCA9IG1haW5TY3JpcHQucmVwbGFjZShqc1N1ZmZpeFJlZ0V4cCwgJycpOwoKICAgICAgICAgICAgICAgIC8vSWYgbWFpblNjcmlwdCBpcyBzdGlsbCBhIHBhdGgsIGZhbGwgYmFjayB0byBkYXRhTWFpbgogICAgICAgICAgICAgICAgaWYgKHJlcS5qc0V4dFJlZ0V4cC50ZXN0KG1haW5TY3JpcHQpKSB7CiAgICAgICAgICAgICAgICAgICAgbWFpblNjcmlwdCA9IGRhdGFNYWluOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vUHV0IHRoZSBkYXRhLW1haW4gc2NyaXB0IGluIHRoZSBmaWxlcyB0byBsb2FkLgogICAgICAgICAgICAgICAgY2ZnLmRlcHMgPSBjZmcuZGVwcyA/IGNmZy5kZXBzLmNvbmNhdChtYWluU2NyaXB0KSA6IFttYWluU2NyaXB0XTsKCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfQoKICAgIC8qKgogICAgICogVGhlIGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyBkZWZpbml0aW9ucyBvZiBtb2R1bGVzLiBEaWZmZXJzIGZyb20KICAgICAqIHJlcXVpcmUoKSBpbiB0aGF0IGEgc3RyaW5nIGZvciB0aGUgbW9kdWxlIHNob3VsZCBiZSB0aGUgZmlyc3QgYXJndW1lbnQsCiAgICAgKiBhbmQgdGhlIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgYWZ0ZXIgZGVwZW5kZW5jaWVzIGFyZSBsb2FkZWQgc2hvdWxkCiAgICAgKiByZXR1cm4gYSB2YWx1ZSB0byBkZWZpbmUgdGhlIG1vZHVsZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBmaXJzdCBhcmd1bWVudCdzCiAgICAgKiBuYW1lLgogICAgICovCiAgICBkZWZpbmUgPSBmdW5jdGlvbiAobmFtZSwgZGVwcywgY2FsbGJhY2spIHsKICAgICAgICB2YXIgbm9kZSwgY29udGV4dDsKCiAgICAgICAgLy9BbGxvdyBmb3IgYW5vbnltb3VzIG1vZHVsZXMKICAgICAgICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSB7CiAgICAgICAgICAgIC8vQWRqdXN0IGFyZ3MgYXBwcm9wcmlhdGVseQogICAgICAgICAgICBjYWxsYmFjayA9IGRlcHM7CiAgICAgICAgICAgIGRlcHMgPSBuYW1lOwogICAgICAgICAgICBuYW1lID0gbnVsbDsKICAgICAgICB9CgogICAgICAgIC8vVGhpcyBtb2R1bGUgbWF5IG5vdCBoYXZlIGRlcGVuZGVuY2llcwogICAgICAgIGlmICghaXNBcnJheShkZXBzKSkgewogICAgICAgICAgICBjYWxsYmFjayA9IGRlcHM7CiAgICAgICAgICAgIGRlcHMgPSBudWxsOwogICAgICAgIH0KCiAgICAgICAgLy9JZiBubyBuYW1lLCBhbmQgY2FsbGJhY2sgaXMgYSBmdW5jdGlvbiwgdGhlbiBmaWd1cmUgb3V0IGlmIGl0IGEKICAgICAgICAvL0NvbW1vbkpTIHRoaW5nIHdpdGggZGVwZW5kZW5jaWVzLgogICAgICAgIGlmICghZGVwcyAmJiBpc0Z1bmN0aW9uKGNhbGxiYWNrKSkgewogICAgICAgICAgICBkZXBzID0gW107CiAgICAgICAgICAgIC8vUmVtb3ZlIGNvbW1lbnRzIGZyb20gdGhlIGNhbGxiYWNrIHN0cmluZywKICAgICAgICAgICAgLy9sb29rIGZvciByZXF1aXJlIGNhbGxzLCBhbmQgcHVsbCB0aGVtIGludG8gdGhlIGRlcGVuZGVuY2llcywKICAgICAgICAgICAgLy9idXQgb25seSBpZiB0aGVyZSBhcmUgZnVuY3Rpb24gYXJncy4KICAgICAgICAgICAgaWYgKGNhbGxiYWNrLmxlbmd0aCkgewogICAgICAgICAgICAgICAgY2FsbGJhY2sKICAgICAgICAgICAgICAgICAgICAudG9TdHJpbmcoKQogICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKGNvbW1lbnRSZWdFeHAsIGNvbW1lbnRSZXBsYWNlKQogICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKGNqc1JlcXVpcmVSZWdFeHAsIGZ1bmN0aW9uIChtYXRjaCwgZGVwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRlcHMucHVzaChkZXApOwogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIC8vTWF5IGJlIGEgQ29tbW9uSlMgdGhpbmcgZXZlbiB3aXRob3V0IHJlcXVpcmUgY2FsbHMsIGJ1dCBzdGlsbAogICAgICAgICAgICAgICAgLy9jb3VsZCB1c2UgZXhwb3J0cywgYW5kIG1vZHVsZS4gQXZvaWQgZG9pbmcgZXhwb3J0cyBhbmQgbW9kdWxlCiAgICAgICAgICAgICAgICAvL3dvcmsgdGhvdWdoIGlmIGl0IGp1c3QgbmVlZHMgcmVxdWlyZS4KICAgICAgICAgICAgICAgIC8vUkVRVUlSRVMgdGhlIGZ1bmN0aW9uIHRvIGV4cGVjdCB0aGUgQ29tbW9uSlMgdmFyaWFibGVzIGluIHRoZQogICAgICAgICAgICAgICAgLy9vcmRlciBsaXN0ZWQgYmVsb3cuCiAgICAgICAgICAgICAgICBkZXBzID0gKGNhbGxiYWNrLmxlbmd0aCA9PT0gMSA/IFsncmVxdWlyZSddIDogWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJ10pLmNvbmNhdChkZXBzKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy9JZiBpbiBJRSA2LTggYW5kIGhpdCBhbiBhbm9ueW1vdXMgZGVmaW5lKCkgY2FsbCwgZG8gdGhlIGludGVyYWN0aXZlCiAgICAgICAgLy93b3JrLgogICAgICAgIGlmICh1c2VJbnRlcmFjdGl2ZSkgewogICAgICAgICAgICBub2RlID0gY3VycmVudGx5QWRkaW5nU2NyaXB0IHx8IGdldEludGVyYWN0aXZlU2NyaXB0KCk7CiAgICAgICAgICAgIGlmIChub2RlKSB7CiAgICAgICAgICAgICAgICBpZiAoIW5hbWUpIHsKICAgICAgICAgICAgICAgICAgICBuYW1lID0gbm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtcmVxdWlyZW1vZHVsZScpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY29udGV4dCA9IGNvbnRleHRzW25vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLXJlcXVpcmVjb250ZXh0JyldOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvL0Fsd2F5cyBzYXZlIG9mZiBldmFsdWF0aW5nIHRoZSBkZWYgY2FsbCB1bnRpbCB0aGUgc2NyaXB0IG9ubG9hZCBoYW5kbGVyLgogICAgICAgIC8vVGhpcyBhbGxvd3MgbXVsdGlwbGUgbW9kdWxlcyB0byBiZSBpbiBhIGZpbGUgd2l0aG91dCBwcmVtYXR1cmVseQogICAgICAgIC8vdHJhY2luZyBkZXBlbmRlbmNpZXMsIGFuZCBhbGxvd3MgZm9yIGFub255bW91cyBtb2R1bGUgc3VwcG9ydCwKICAgICAgICAvL3doZXJlIHRoZSBtb2R1bGUgbmFtZSBpcyBub3Qga25vd24gdW50aWwgdGhlIHNjcmlwdCBvbmxvYWQgZXZlbnQKICAgICAgICAvL29jY3Vycy4gSWYgbm8gY29udGV4dCwgdXNlIHRoZSBnbG9iYWwgcXVldWUsIGFuZCBnZXQgaXQgcHJvY2Vzc2VkCiAgICAgICAgLy9pbiB0aGUgb25zY3JpcHQgbG9hZCBjYWxsYmFjay4KICAgICAgICBpZiAoY29udGV4dCkgewogICAgICAgICAgICBjb250ZXh0LmRlZlF1ZXVlLnB1c2goW25hbWUsIGRlcHMsIGNhbGxiYWNrXSk7CiAgICAgICAgICAgIGNvbnRleHQuZGVmUXVldWVNYXBbbmFtZV0gPSB0cnVlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGdsb2JhbERlZlF1ZXVlLnB1c2goW25hbWUsIGRlcHMsIGNhbGxiYWNrXSk7CiAgICAgICAgfQogICAgfTsKCiAgICBkZWZpbmUuYW1kID0gewogICAgICAgIGpRdWVyeTogdHJ1ZQogICAgfTsKCiAgICAvKioKICAgICAqIEV4ZWN1dGVzIHRoZSB0ZXh0LiBOb3JtYWxseSBqdXN0IHVzZXMgZXZhbCwgYnV0IGNhbiBiZSBtb2RpZmllZAogICAgICogdG8gdXNlIGEgYmV0dGVyLCBlbnZpcm9ubWVudC1zcGVjaWZpYyBjYWxsLiBPbmx5IHVzZWQgZm9yIHRyYW5zcGlsaW5nCiAgICAgKiBsb2FkZXIgcGx1Z2lucywgbm90IGZvciBwbGFpbiBKUyBtb2R1bGVzLgogICAgICogQHBhcmFtIHtTdHJpbmd9IHRleHQgdGhlIHRleHQgdG8gZXhlY3V0ZS9ldmFsdWF0ZS4KICAgICAqLwogICAgcmVxLmV4ZWMgPSBmdW5jdGlvbiAodGV4dCkgewogICAgICAgIC8qanNsaW50IGV2aWw6IHRydWUgKi8KICAgICAgICByZXR1cm4gZXZhbCh0ZXh0KTsKICAgIH07CgogICAgLy9TZXQgdXAgd2l0aCBjb25maWcgaW5mby4KICAgIHJlcShjZmcpOwp9KHRoaXMsICh0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBzZXRUaW1lb3V0KSkpOwoKLy8gQ29weXJpZ2h0IDIwMTQgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLy8KLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLy8gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAovLwovLyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLy8KLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQovLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAovLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLy8gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgohZnVuY3Rpb24oKXt2YXIgYT17fSxiPXt9LGM9e307IWZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhKXtpZigibnVtYmVyIj09dHlwZW9mIGEpcmV0dXJuIGE7dmFyIGI9e307Zm9yKHZhciBjIGluIGEpYltjXT1hW2NdO3JldHVybiBifWZ1bmN0aW9uIGQoKXt0aGlzLl9kZWxheT0wLHRoaXMuX2VuZERlbGF5PTAsdGhpcy5fZmlsbD0ibm9uZSIsdGhpcy5faXRlcmF0aW9uU3RhcnQ9MCx0aGlzLl9pdGVyYXRpb25zPTEsdGhpcy5fZHVyYXRpb249MCx0aGlzLl9wbGF5YmFja1JhdGU9MSx0aGlzLl9kaXJlY3Rpb249Im5vcm1hbCIsdGhpcy5fZWFzaW5nPSJsaW5lYXIiLHRoaXMuX2Vhc2luZ0Z1bmN0aW9uPXh9ZnVuY3Rpb24gZSgpe3JldHVybiBhLmlzRGVwcmVjYXRlZCgiSW52YWxpZCB0aW1pbmcgaW5wdXRzIiwiMjAxNi0wMy0wMiIsIlR5cGVFcnJvciBleGNlcHRpb25zIHdpbGwgYmUgdGhyb3duIGluc3RlYWQuIiwhMCl9ZnVuY3Rpb24gZihiLGMsZSl7dmFyIGY9bmV3IGQ7cmV0dXJuIGMmJihmLmZpbGw9ImJvdGgiLGYuZHVyYXRpb249ImF1dG8iKSwibnVtYmVyIiE9dHlwZW9mIGJ8fGlzTmFOKGIpP3ZvaWQgMCE9PWImJk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGIpLmZvckVhY2goZnVuY3Rpb24oYyl7aWYoImF1dG8iIT1iW2NdKXtpZigoIm51bWJlciI9PXR5cGVvZiBmW2NdfHwiZHVyYXRpb24iPT1jKSYmKCJudW1iZXIiIT10eXBlb2YgYltjXXx8aXNOYU4oYltjXSkpKXJldHVybjtpZigiZmlsbCI9PWMmJi0xPT12LmluZGV4T2YoYltjXSkpcmV0dXJuO2lmKCJkaXJlY3Rpb24iPT1jJiYtMT09dy5pbmRleE9mKGJbY10pKXJldHVybjtpZigicGxheWJhY2tSYXRlIj09YyYmMSE9PWJbY10mJmEuaXNEZXByZWNhdGVkKCJBbmltYXRpb25FZmZlY3RUaW1pbmcucGxheWJhY2tSYXRlIiwiMjAxNC0xMS0yOCIsIlVzZSBBbmltYXRpb24ucGxheWJhY2tSYXRlIGluc3RlYWQuIikpcmV0dXJuO2ZbY109YltjXX19KTpmLmR1cmF0aW9uPWIsZn1mdW5jdGlvbiBnKGEpe3JldHVybiJudW1iZXIiPT10eXBlb2YgYSYmKGE9aXNOYU4oYSk/e2R1cmF0aW9uOjB9OntkdXJhdGlvbjphfSksYX1mdW5jdGlvbiBoKGIsYyl7cmV0dXJuIGI9YS5udW1lcmljVGltaW5nVG9PYmplY3QoYiksZihiLGMpfWZ1bmN0aW9uIGkoYSxiLGMsZCl7cmV0dXJuIGE8MHx8YT4xfHxjPDB8fGM+MT94OmZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGYoYSxiLGMpe3JldHVybiAzKmEqKDEtYykqKDEtYykqYyszKmIqKDEtYykqYypjK2MqYypjfWlmKGU8PTApe3ZhciBnPTA7cmV0dXJuIGE+MD9nPWIvYTohYiYmYz4wJiYoZz1kL2MpLGcqZX1pZihlPj0xKXt2YXIgaD0wO3JldHVybiBjPDE/aD0oZC0xKS8oYy0xKToxPT1jJiZhPDEmJihoPShiLTEpLyhhLTEpKSwxK2gqKGUtMSl9Zm9yKHZhciBpPTAsaj0xO2k8ajspe3ZhciBrPShpK2opLzIsbD1mKGEsYyxrKTtpZihNYXRoLmFicyhlLWwpPDFlLTUpcmV0dXJuIGYoYixkLGspO2w8ZT9pPWs6aj1rfXJldHVybiBmKGIsZCxrKX19ZnVuY3Rpb24gaihhLGIpe3JldHVybiBmdW5jdGlvbihjKXtpZihjPj0xKXJldHVybiAxO3ZhciBkPTEvYTtyZXR1cm4oYys9YipkKS1jJWR9fWZ1bmN0aW9uIGsoYSl7Q3x8KEM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iikuc3R5bGUpLEMuYW5pbWF0aW9uVGltaW5nRnVuY3Rpb249IiIsQy5hbmltYXRpb25UaW1pbmdGdW5jdGlvbj1hO3ZhciBiPUMuYW5pbWF0aW9uVGltaW5nRnVuY3Rpb247aWYoIiI9PWImJmUoKSl0aHJvdyBuZXcgVHlwZUVycm9yKGErIiBpcyBub3QgYSB2YWxpZCB2YWx1ZSBmb3IgZWFzaW5nIik7cmV0dXJuIGJ9ZnVuY3Rpb24gbChhKXtpZigibGluZWFyIj09YSlyZXR1cm4geDt2YXIgYj1FLmV4ZWMoYSk7aWYoYilyZXR1cm4gaS5hcHBseSh0aGlzLGIuc2xpY2UoMSkubWFwKE51bWJlcikpO3ZhciBjPUYuZXhlYyhhKTtpZihjKXJldHVybiBqKE51bWJlcihjWzFdKSxBKTt2YXIgZD1HLmV4ZWMoYSk7cmV0dXJuIGQ/aihOdW1iZXIoZFsxXSkse3N0YXJ0OnksbWlkZGxlOnosZW5kOkF9W2RbMl1dKTpCW2FdfHx4fWZ1bmN0aW9uIG0oYSl7cmV0dXJuIE1hdGguYWJzKG4oYSkvYS5wbGF5YmFja1JhdGUpfWZ1bmN0aW9uIG4oYSl7cmV0dXJuIDA9PT1hLmR1cmF0aW9ufHwwPT09YS5pdGVyYXRpb25zPzA6YS5kdXJhdGlvbiphLml0ZXJhdGlvbnN9ZnVuY3Rpb24gbyhhLGIsYyl7aWYobnVsbD09YilyZXR1cm4gSDt2YXIgZD1jLmRlbGF5K2ErYy5lbmREZWxheTtyZXR1cm4gYjxNYXRoLm1pbihjLmRlbGF5LGQpP0k6Yj49TWF0aC5taW4oYy5kZWxheSthLGQpP0o6S31mdW5jdGlvbiBwKGEsYixjLGQsZSl7c3dpdGNoKGQpe2Nhc2UgSTpyZXR1cm4iYmFja3dhcmRzIj09Ynx8ImJvdGgiPT1iPzA6bnVsbDtjYXNlIEs6cmV0dXJuIGMtZTtjYXNlIEo6cmV0dXJuImZvcndhcmRzIj09Ynx8ImJvdGgiPT1iP2E6bnVsbDtjYXNlIEg6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIHEoYSxiLGMsZCxlKXt2YXIgZj1lO3JldHVybiAwPT09YT9iIT09SSYmKGYrPWMpOmYrPWQvYSxmfWZ1bmN0aW9uIHIoYSxiLGMsZCxlLGYpe3ZhciBnPWE9PT0xLzA/YiUxOmElMTtyZXR1cm4gMCE9PWd8fGMhPT1KfHwwPT09ZHx8MD09PWUmJjAhPT1mfHwoZz0xKSxnfWZ1bmN0aW9uIHMoYSxiLGMsZCl7cmV0dXJuIGE9PT1KJiZiPT09MS8wPzEvMDoxPT09Yz9NYXRoLmZsb29yKGQpLTE6TWF0aC5mbG9vcihkKX1mdW5jdGlvbiB0KGEsYixjKXt2YXIgZD1hO2lmKCJub3JtYWwiIT09YSYmInJldmVyc2UiIT09YSl7dmFyIGU9YjsiYWx0ZXJuYXRlLXJldmVyc2UiPT09YSYmKGUrPTEpLGQ9Im5vcm1hbCIsZSE9PTEvMCYmZSUyIT0wJiYoZD0icmV2ZXJzZSIpfXJldHVybiJub3JtYWwiPT09ZD9jOjEtY31mdW5jdGlvbiB1KGEsYixjKXt2YXIgZD1vKGEsYixjKSxlPXAoYSxjLmZpbGwsYixkLGMuZGVsYXkpO2lmKG51bGw9PT1lKXJldHVybiBudWxsO3ZhciBmPXEoYy5kdXJhdGlvbixkLGMuaXRlcmF0aW9ucyxlLGMuaXRlcmF0aW9uU3RhcnQpLGc9cihmLGMuaXRlcmF0aW9uU3RhcnQsZCxjLml0ZXJhdGlvbnMsZSxjLmR1cmF0aW9uKSxoPXMoZCxjLml0ZXJhdGlvbnMsZyxmKSxpPXQoYy5kaXJlY3Rpb24saCxnKTtyZXR1cm4gYy5fZWFzaW5nRnVuY3Rpb24oaSl9dmFyIHY9ImJhY2t3YXJkc3xmb3J3YXJkc3xib3RofG5vbmUiLnNwbGl0KCJ8Iiksdz0icmV2ZXJzZXxhbHRlcm5hdGV8YWx0ZXJuYXRlLXJldmVyc2UiLnNwbGl0KCJ8IikseD1mdW5jdGlvbihhKXtyZXR1cm4gYX07ZC5wcm90b3R5cGU9e19zZXRNZW1iZXI6ZnVuY3Rpb24oYixjKXt0aGlzWyJfIitiXT1jLHRoaXMuX2VmZmVjdCYmKHRoaXMuX2VmZmVjdC5fdGltaW5nSW5wdXRbYl09Yyx0aGlzLl9lZmZlY3QuX3RpbWluZz1hLm5vcm1hbGl6ZVRpbWluZ0lucHV0KHRoaXMuX2VmZmVjdC5fdGltaW5nSW5wdXQpLHRoaXMuX2VmZmVjdC5hY3RpdmVEdXJhdGlvbj1hLmNhbGN1bGF0ZUFjdGl2ZUR1cmF0aW9uKHRoaXMuX2VmZmVjdC5fdGltaW5nKSx0aGlzLl9lZmZlY3QuX2FuaW1hdGlvbiYmdGhpcy5fZWZmZWN0Ll9hbmltYXRpb24uX3JlYnVpbGRVbmRlcmx5aW5nQW5pbWF0aW9uKCkpfSxnZXQgcGxheWJhY2tSYXRlKCl7cmV0dXJuIHRoaXMuX3BsYXliYWNrUmF0ZX0sc2V0IGRlbGF5KGEpe3RoaXMuX3NldE1lbWJlcigiZGVsYXkiLGEpfSxnZXQgZGVsYXkoKXtyZXR1cm4gdGhpcy5fZGVsYXl9LHNldCBlbmREZWxheShhKXt0aGlzLl9zZXRNZW1iZXIoImVuZERlbGF5IixhKX0sZ2V0IGVuZERlbGF5KCl7cmV0dXJuIHRoaXMuX2VuZERlbGF5fSxzZXQgZmlsbChhKXt0aGlzLl9zZXRNZW1iZXIoImZpbGwiLGEpfSxnZXQgZmlsbCgpe3JldHVybiB0aGlzLl9maWxsfSxzZXQgaXRlcmF0aW9uU3RhcnQoYSl7aWYoKGlzTmFOKGEpfHxhPDApJiZlKCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiaXRlcmF0aW9uU3RhcnQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIsIHJlY2VpdmVkOiAiK2EpO3RoaXMuX3NldE1lbWJlcigiaXRlcmF0aW9uU3RhcnQiLGEpfSxnZXQgaXRlcmF0aW9uU3RhcnQoKXtyZXR1cm4gdGhpcy5faXRlcmF0aW9uU3RhcnR9LHNldCBkdXJhdGlvbihhKXtpZigiYXV0byIhPWEmJihpc05hTihhKXx8YTwwKSYmZSgpKXRocm93IG5ldyBUeXBlRXJyb3IoImR1cmF0aW9uIG11c3QgYmUgbm9uLW5lZ2F0aXZlIG9yIGF1dG8sIHJlY2VpdmVkOiAiK2EpO3RoaXMuX3NldE1lbWJlcigiZHVyYXRpb24iLGEpfSxnZXQgZHVyYXRpb24oKXtyZXR1cm4gdGhpcy5fZHVyYXRpb259LHNldCBkaXJlY3Rpb24oYSl7dGhpcy5fc2V0TWVtYmVyKCJkaXJlY3Rpb24iLGEpfSxnZXQgZGlyZWN0aW9uKCl7cmV0dXJuIHRoaXMuX2RpcmVjdGlvbn0sc2V0IGVhc2luZyhhKXt0aGlzLl9lYXNpbmdGdW5jdGlvbj1sKGsoYSkpLHRoaXMuX3NldE1lbWJlcigiZWFzaW5nIixhKX0sZ2V0IGVhc2luZygpe3JldHVybiB0aGlzLl9lYXNpbmd9LHNldCBpdGVyYXRpb25zKGEpe2lmKChpc05hTihhKXx8YTwwKSYmZSgpKXRocm93IG5ldyBUeXBlRXJyb3IoIml0ZXJhdGlvbnMgbXVzdCBiZSBub24tbmVnYXRpdmUsIHJlY2VpdmVkOiAiK2EpO3RoaXMuX3NldE1lbWJlcigiaXRlcmF0aW9ucyIsYSl9LGdldCBpdGVyYXRpb25zKCl7cmV0dXJuIHRoaXMuX2l0ZXJhdGlvbnN9fTt2YXIgeT0xLHo9LjUsQT0wLEI9e2Vhc2U6aSguMjUsLjEsLjI1LDEpLCJlYXNlLWluIjppKC40MiwwLDEsMSksImVhc2Utb3V0IjppKDAsMCwuNTgsMSksImVhc2UtaW4tb3V0IjppKC40MiwwLC41OCwxKSwic3RlcC1zdGFydCI6aigxLHkpLCJzdGVwLW1pZGRsZSI6aigxLHopLCJzdGVwLWVuZCI6aigxLEEpfSxDPW51bGwsRD0iXFxzKigtP1xcZCtcXC4/XFxkKnwtP1xcLlxcZCspXFxzKiIsRT1uZXcgUmVnRXhwKCJjdWJpYy1iZXppZXJcXCgiK0QrIiwiK0QrIiwiK0QrIiwiK0QrIlxcKSIpLEY9L3N0ZXBzXChccyooXGQrKVxzKlwpLyxHPS9zdGVwc1woXHMqKFxkKylccyosXHMqKHN0YXJ0fG1pZGRsZXxlbmQpXHMqXCkvLEg9MCxJPTEsSj0yLEs9MzthLmNsb25lVGltaW5nSW5wdXQ9YyxhLm1ha2VUaW1pbmc9ZixhLm51bWVyaWNUaW1pbmdUb09iamVjdD1nLGEubm9ybWFsaXplVGltaW5nSW5wdXQ9aCxhLmNhbGN1bGF0ZUFjdGl2ZUR1cmF0aW9uPW0sYS5jYWxjdWxhdGVJdGVyYXRpb25Qcm9ncmVzcz11LGEuY2FsY3VsYXRlUGhhc2U9byxhLm5vcm1hbGl6ZUVhc2luZz1rLGEucGFyc2VFYXNpbmdGdW5jdGlvbj1sfShhKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSxiKXtyZXR1cm4gYSBpbiBrP2tbYV1bYl18fGI6Yn1mdW5jdGlvbiBkKGEpe3JldHVybiJkaXNwbGF5Ij09PWF8fDA9PT1hLmxhc3RJbmRleE9mKCJhbmltYXRpb24iLDApfHwwPT09YS5sYXN0SW5kZXhPZigidHJhbnNpdGlvbiIsMCl9ZnVuY3Rpb24gZShhLGIsZSl7aWYoIWQoYSkpe3ZhciBmPWhbYV07aWYoZil7aS5zdHlsZVthXT1iO2Zvcih2YXIgZyBpbiBmKXt2YXIgaj1mW2ddLGs9aS5zdHlsZVtqXTtlW2pdPWMoaixrKX19ZWxzZSBlW2FdPWMoYSxiKX19ZnVuY3Rpb24gZihhKXt2YXIgYj1bXTtmb3IodmFyIGMgaW4gYSlpZighKGMgaW5bImVhc2luZyIsIm9mZnNldCIsImNvbXBvc2l0ZSJdKSl7dmFyIGQ9YVtjXTtBcnJheS5pc0FycmF5KGQpfHwoZD1bZF0pO2Zvcih2YXIgZSxmPWQubGVuZ3RoLGc9MDtnPGY7ZysrKWU9e30sZS5vZmZzZXQ9Im9mZnNldCJpbiBhP2Eub2Zmc2V0OjE9PWY/MTpnLyhmLTEpLCJlYXNpbmciaW4gYSYmKGUuZWFzaW5nPWEuZWFzaW5nKSwiY29tcG9zaXRlImluIGEmJihlLmNvbXBvc2l0ZT1hLmNvbXBvc2l0ZSksZVtjXT1kW2ddLGIucHVzaChlKX1yZXR1cm4gYi5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEub2Zmc2V0LWIub2Zmc2V0fSksYn1mdW5jdGlvbiBnKGIpe2Z1bmN0aW9uIGMoKXt2YXIgYT1kLmxlbmd0aDtudWxsPT1kW2EtMV0ub2Zmc2V0JiYoZFthLTFdLm9mZnNldD0xKSxhPjEmJm51bGw9PWRbMF0ub2Zmc2V0JiYoZFswXS5vZmZzZXQ9MCk7Zm9yKHZhciBiPTAsYz1kWzBdLm9mZnNldCxlPTE7ZTxhO2UrKyl7dmFyIGY9ZFtlXS5vZmZzZXQ7aWYobnVsbCE9Zil7Zm9yKHZhciBnPTE7ZzxlLWI7ZysrKWRbYitnXS5vZmZzZXQ9YysoZi1jKSpnLyhlLWIpO2I9ZSxjPWZ9fX1pZihudWxsPT1iKXJldHVybltdO3dpbmRvdy5TeW1ib2wmJlN5bWJvbC5pdGVyYXRvciYmQXJyYXkucHJvdG90eXBlLmZyb20mJmJbU3ltYm9sLml0ZXJhdG9yXSYmKGI9QXJyYXkuZnJvbShiKSksQXJyYXkuaXNBcnJheShiKXx8KGI9ZihiKSk7Zm9yKHZhciBkPWIubWFwKGZ1bmN0aW9uKGIpe3ZhciBjPXt9O2Zvcih2YXIgZCBpbiBiKXt2YXIgZj1iW2RdO2lmKCJvZmZzZXQiPT1kKXtpZihudWxsIT1mKXtpZihmPU51bWJlcihmKSwhaXNGaW5pdGUoZikpdGhyb3cgbmV3IFR5cGVFcnJvcigiS2V5ZnJhbWUgb2Zmc2V0cyBtdXN0IGJlIG51bWJlcnMuIik7aWYoZjwwfHxmPjEpdGhyb3cgbmV3IFR5cGVFcnJvcigiS2V5ZnJhbWUgb2Zmc2V0cyBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMS4iKX19ZWxzZSBpZigiY29tcG9zaXRlIj09ZCl7aWYoImFkZCI9PWZ8fCJhY2N1bXVsYXRlIj09Zil0aHJvd3t0eXBlOkRPTUV4Y2VwdGlvbi5OT1RfU1VQUE9SVEVEX0VSUixuYW1lOiJOb3RTdXBwb3J0ZWRFcnJvciIsbWVzc2FnZToiYWRkIGNvbXBvc2l0aW5nIGlzIG5vdCBzdXBwb3J0ZWQifTtpZigicmVwbGFjZSIhPWYpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBjb21wb3NpdGUgbW9kZSAiK2YrIi4iKX1lbHNlIGY9ImVhc2luZyI9PWQ/YS5ub3JtYWxpemVFYXNpbmcoZik6IiIrZjtlKGQsZixjKX1yZXR1cm4gdm9pZCAwPT1jLm9mZnNldCYmKGMub2Zmc2V0PW51bGwpLHZvaWQgMD09Yy5lYXNpbmcmJihjLmVhc2luZz0ibGluZWFyIiksY30pLGc9ITAsaD0tMS8wLGk9MDtpPGQubGVuZ3RoO2krKyl7dmFyIGo9ZFtpXS5vZmZzZXQ7aWYobnVsbCE9ail7aWYoajxoKXRocm93IG5ldyBUeXBlRXJyb3IoIktleWZyYW1lcyBhcmUgbm90IGxvb3NlbHkgc29ydGVkIGJ5IG9mZnNldC4gU29ydCBvciBzcGVjaWZ5IG9mZnNldHMuIik7aD1qfWVsc2UgZz0hMX1yZXR1cm4gZD1kLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4gYS5vZmZzZXQ+PTAmJmEub2Zmc2V0PD0xfSksZ3x8YygpLGR9dmFyIGg9e2JhY2tncm91bmQ6WyJiYWNrZ3JvdW5kSW1hZ2UiLCJiYWNrZ3JvdW5kUG9zaXRpb24iLCJiYWNrZ3JvdW5kU2l6ZSIsImJhY2tncm91bmRSZXBlYXQiLCJiYWNrZ3JvdW5kQXR0YWNobWVudCIsImJhY2tncm91bmRPcmlnaW4iLCJiYWNrZ3JvdW5kQ2xpcCIsImJhY2tncm91bmRDb2xvciJdLGJvcmRlcjpbImJvcmRlclRvcENvbG9yIiwiYm9yZGVyVG9wU3R5bGUiLCJib3JkZXJUb3BXaWR0aCIsImJvcmRlclJpZ2h0Q29sb3IiLCJib3JkZXJSaWdodFN0eWxlIiwiYm9yZGVyUmlnaHRXaWR0aCIsImJvcmRlckJvdHRvbUNvbG9yIiwiYm9yZGVyQm90dG9tU3R5bGUiLCJib3JkZXJCb3R0b21XaWR0aCIsImJvcmRlckxlZnRDb2xvciIsImJvcmRlckxlZnRTdHlsZSIsImJvcmRlckxlZnRXaWR0aCJdLGJvcmRlckJvdHRvbTpbImJvcmRlckJvdHRvbVdpZHRoIiwiYm9yZGVyQm90dG9tU3R5bGUiLCJib3JkZXJCb3R0b21Db2xvciJdLGJvcmRlckNvbG9yOlsiYm9yZGVyVG9wQ29sb3IiLCJib3JkZXJSaWdodENvbG9yIiwiYm9yZGVyQm90dG9tQ29sb3IiLCJib3JkZXJMZWZ0Q29sb3IiXSxib3JkZXJMZWZ0OlsiYm9yZGVyTGVmdFdpZHRoIiwiYm9yZGVyTGVmdFN0eWxlIiwiYm9yZGVyTGVmdENvbG9yIl0sYm9yZGVyUmFkaXVzOlsiYm9yZGVyVG9wTGVmdFJhZGl1cyIsImJvcmRlclRvcFJpZ2h0UmFkaXVzIiwiYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMiLCJib3JkZXJCb3R0b21MZWZ0UmFkaXVzIl0sYm9yZGVyUmlnaHQ6WyJib3JkZXJSaWdodFdpZHRoIiwiYm9yZGVyUmlnaHRTdHlsZSIsImJvcmRlclJpZ2h0Q29sb3IiXSxib3JkZXJUb3A6WyJib3JkZXJUb3BXaWR0aCIsImJvcmRlclRvcFN0eWxlIiwiYm9yZGVyVG9wQ29sb3IiXSxib3JkZXJXaWR0aDpbImJvcmRlclRvcFdpZHRoIiwiYm9yZGVyUmlnaHRXaWR0aCIsImJvcmRlckJvdHRvbVdpZHRoIiwiYm9yZGVyTGVmdFdpZHRoIl0sZmxleDpbImZsZXhHcm93IiwiZmxleFNocmluayIsImZsZXhCYXNpcyJdLGZvbnQ6WyJmb250RmFtaWx5IiwiZm9udFNpemUiLCJmb250U3R5bGUiLCJmb250VmFyaWFudCIsImZvbnRXZWlnaHQiLCJsaW5lSGVpZ2h0Il0sbWFyZ2luOlsibWFyZ2luVG9wIiwibWFyZ2luUmlnaHQiLCJtYXJnaW5Cb3R0b20iLCJtYXJnaW5MZWZ0Il0sb3V0bGluZTpbIm91dGxpbmVDb2xvciIsIm91dGxpbmVTdHlsZSIsIm91dGxpbmVXaWR0aCJdLHBhZGRpbmc6WyJwYWRkaW5nVG9wIiwicGFkZGluZ1JpZ2h0IiwicGFkZGluZ0JvdHRvbSIsInBhZGRpbmdMZWZ0Il19LGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiZGl2Iiksaj17dGhpbjoiMXB4IixtZWRpdW06IjNweCIsdGhpY2s6IjVweCJ9LGs9e2JvcmRlckJvdHRvbVdpZHRoOmosYm9yZGVyTGVmdFdpZHRoOmosYm9yZGVyUmlnaHRXaWR0aDpqLGJvcmRlclRvcFdpZHRoOmosZm9udFNpemU6eyJ4eC1zbWFsbCI6IjYwJSIsIngtc21hbGwiOiI3NSUiLHNtYWxsOiI4OSUiLG1lZGl1bToiMTAwJSIsbGFyZ2U6IjEyMCUiLCJ4LWxhcmdlIjoiMTUwJSIsInh4LWxhcmdlIjoiMjAwJSJ9LGZvbnRXZWlnaHQ6e25vcm1hbDoiNDAwIixib2xkOiI3MDAifSxvdXRsaW5lV2lkdGg6aix0ZXh0U2hhZG93Ontub25lOiIwcHggMHB4IDBweCB0cmFuc3BhcmVudCJ9LGJveFNoYWRvdzp7bm9uZToiMHB4IDBweCAwcHggMHB4IHRyYW5zcGFyZW50In19O2EuY29udmVydFRvQXJyYXlGb3JtPWYsYS5ub3JtYWxpemVLZXlmcmFtZXM9Z30oYSksZnVuY3Rpb24oYSl7dmFyIGI9e307YS5pc0RlcHJlY2F0ZWQ9ZnVuY3Rpb24oYSxjLGQsZSl7dmFyIGY9ZT8iYXJlIjoiaXMiLGc9bmV3IERhdGUsaD1uZXcgRGF0ZShjKTtyZXR1cm4gaC5zZXRNb250aChoLmdldE1vbnRoKCkrMyksIShnPGgmJihhIGluIGJ8fGNvbnNvbGUud2FybigiV2ViIEFuaW1hdGlvbnM6ICIrYSsiICIrZisiIGRlcHJlY2F0ZWQgYW5kIHdpbGwgc3RvcCB3b3JraW5nIG9uICIraC50b0RhdGVTdHJpbmcoKSsiLiAiK2QpLGJbYV09ITAsMSkpfSxhLmRlcHJlY2F0ZWQ9ZnVuY3Rpb24oYixjLGQsZSl7dmFyIGY9ZT8iYXJlIjoiaXMiO2lmKGEuaXNEZXByZWNhdGVkKGIsYyxkLGUpKXRocm93IG5ldyBFcnJvcihiKyIgIitmKyIgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gIitkKX19KGEpLGZ1bmN0aW9uKCl7aWYoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFuaW1hdGUpe3ZhciBjPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hbmltYXRlKFtdLDApLGQ9ITA7aWYoYyYmKGQ9ITEsInBsYXl8Y3VycmVudFRpbWV8cGF1c2V8cmV2ZXJzZXxwbGF5YmFja1JhdGV8Y2FuY2VsfGZpbmlzaHxzdGFydFRpbWV8cGxheVN0YXRlIi5zcGxpdCgifCIpLmZvckVhY2goZnVuY3Rpb24oYSl7dm9pZCAwPT09Y1thXSYmKGQ9ITApfSkpLCFkKXJldHVybn0hZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYSl7Zm9yKHZhciBiPXt9LGM9MDtjPGEubGVuZ3RoO2MrKylmb3IodmFyIGQgaW4gYVtjXSlpZigib2Zmc2V0IiE9ZCYmImVhc2luZyIhPWQmJiJjb21wb3NpdGUiIT1kKXt2YXIgZT17b2Zmc2V0OmFbY10ub2Zmc2V0LGVhc2luZzphW2NdLmVhc2luZyx2YWx1ZTphW2NdW2RdfTtiW2RdPWJbZF18fFtdLGJbZF0ucHVzaChlKX1mb3IodmFyIGYgaW4gYil7dmFyIGc9YltmXTtpZigwIT1nWzBdLm9mZnNldHx8MSE9Z1tnLmxlbmd0aC0xXS5vZmZzZXQpdGhyb3d7dHlwZTpET01FeGNlcHRpb24uTk9UX1NVUFBPUlRFRF9FUlIsbmFtZToiTm90U3VwcG9ydGVkRXJyb3IiLG1lc3NhZ2U6IlBhcnRpYWwga2V5ZnJhbWVzIGFyZSBub3Qgc3VwcG9ydGVkIn19cmV0dXJuIGJ9ZnVuY3Rpb24gZShjKXt2YXIgZD1bXTtmb3IodmFyIGUgaW4gYylmb3IodmFyIGY9Y1tlXSxnPTA7ZzxmLmxlbmd0aC0xO2crKyl7dmFyIGg9ZyxpPWcrMSxqPWZbaF0ub2Zmc2V0LGs9ZltpXS5vZmZzZXQsbD1qLG09azswPT1nJiYobD0tMS8wLDA9PWsmJihpPWgpKSxnPT1mLmxlbmd0aC0yJiYobT0xLzAsMT09aiYmKGg9aSkpLGQucHVzaCh7YXBwbHlGcm9tOmwsYXBwbHlUbzptLHN0YXJ0T2Zmc2V0OmZbaF0ub2Zmc2V0LGVuZE9mZnNldDpmW2ldLm9mZnNldCxlYXNpbmdGdW5jdGlvbjphLnBhcnNlRWFzaW5nRnVuY3Rpb24oZltoXS5lYXNpbmcpLHByb3BlcnR5OmUsaW50ZXJwb2xhdGlvbjpiLnByb3BlcnR5SW50ZXJwb2xhdGlvbihlLGZbaF0udmFsdWUsZltpXS52YWx1ZSl9KX1yZXR1cm4gZC5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuc3RhcnRPZmZzZXQtYi5zdGFydE9mZnNldH0pLGR9Yi5jb252ZXJ0RWZmZWN0SW5wdXQ9ZnVuY3Rpb24oYyl7dmFyIGY9YS5ub3JtYWxpemVLZXlmcmFtZXMoYyksZz1kKGYpLGg9ZShnKTtyZXR1cm4gZnVuY3Rpb24oYSxjKXtpZihudWxsIT1jKWguZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBjPj1hLmFwcGx5RnJvbSYmYzxhLmFwcGx5VG99KS5mb3JFYWNoKGZ1bmN0aW9uKGQpe3ZhciBlPWMtZC5zdGFydE9mZnNldCxmPWQuZW5kT2Zmc2V0LWQuc3RhcnRPZmZzZXQsZz0wPT1mPzA6ZC5lYXNpbmdGdW5jdGlvbihlL2YpO2IuYXBwbHkoYSxkLnByb3BlcnR5LGQuaW50ZXJwb2xhdGlvbihnKSl9KTtlbHNlIGZvcih2YXIgZCBpbiBnKSJvZmZzZXQiIT1kJiYiZWFzaW5nIiE9ZCYmImNvbXBvc2l0ZSIhPWQmJmIuY2xlYXIoYSxkKX19fShhLGIpLGZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEpe3JldHVybiBhLnJlcGxhY2UoLy0oLikvZyxmdW5jdGlvbihhLGIpe3JldHVybiBiLnRvVXBwZXJDYXNlKCl9KX1mdW5jdGlvbiBlKGEsYixjKXtoW2NdPWhbY118fFtdLGhbY10ucHVzaChbYSxiXSl9ZnVuY3Rpb24gZihhLGIsYyl7Zm9yKHZhciBmPTA7ZjxjLmxlbmd0aDtmKyspe2UoYSxiLGQoY1tmXSkpfX1mdW5jdGlvbiBnKGMsZSxmKXt2YXIgZz1jOy8tLy50ZXN0KGMpJiYhYS5pc0RlcHJlY2F0ZWQoIkh5cGhlbmF0ZWQgcHJvcGVydHkgbmFtZXMiLCIyMDE2LTAzLTIyIiwiVXNlIGNhbWVsQ2FzZSBpbnN0ZWFkLiIsITApJiYoZz1kKGMpKSwiaW5pdGlhbCIhPWUmJiJpbml0aWFsIiE9Znx8KCJpbml0aWFsIj09ZSYmKGU9aVtnXSksImluaXRpYWwiPT1mJiYoZj1pW2ddKSk7Zm9yKHZhciBqPWU9PWY/W106aFtnXSxrPTA7aiYmazxqLmxlbmd0aDtrKyspe3ZhciBsPWpba11bMF0oZSksbT1qW2tdWzBdKGYpO2lmKHZvaWQgMCE9PWwmJnZvaWQgMCE9PW0pe3ZhciBuPWpba11bMV0obCxtKTtpZihuKXt2YXIgbz1iLkludGVycG9sYXRpb24uYXBwbHkobnVsbCxuKTtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIDA9PWE/ZToxPT1hP2Y6byhhKX19fX1yZXR1cm4gYi5JbnRlcnBvbGF0aW9uKCExLCEwLGZ1bmN0aW9uKGEpe3JldHVybiBhP2Y6ZX0pfXZhciBoPXt9O2IuYWRkUHJvcGVydGllc0hhbmRsZXI9Zjt2YXIgaT17YmFja2dyb3VuZENvbG9yOiJ0cmFuc3BhcmVudCIsYmFja2dyb3VuZFBvc2l0aW9uOiIwJSAwJSIsYm9yZGVyQm90dG9tQ29sb3I6ImN1cnJlbnRDb2xvciIsYm9yZGVyQm90dG9tTGVmdFJhZGl1czoiMHB4Iixib3JkZXJCb3R0b21SaWdodFJhZGl1czoiMHB4Iixib3JkZXJCb3R0b21XaWR0aDoiM3B4Iixib3JkZXJMZWZ0Q29sb3I6ImN1cnJlbnRDb2xvciIsYm9yZGVyTGVmdFdpZHRoOiIzcHgiLGJvcmRlclJpZ2h0Q29sb3I6ImN1cnJlbnRDb2xvciIsYm9yZGVyUmlnaHRXaWR0aDoiM3B4Iixib3JkZXJTcGFjaW5nOiIycHgiLGJvcmRlclRvcENvbG9yOiJjdXJyZW50Q29sb3IiLGJvcmRlclRvcExlZnRSYWRpdXM6IjBweCIsYm9yZGVyVG9wUmlnaHRSYWRpdXM6IjBweCIsYm9yZGVyVG9wV2lkdGg6IjNweCIsYm90dG9tOiJhdXRvIixjbGlwOiJyZWN0KDBweCwgMHB4LCAwcHgsIDBweCkiLGNvbG9yOiJibGFjayIsZm9udFNpemU6IjEwMCUiLGZvbnRXZWlnaHQ6IjQwMCIsaGVpZ2h0OiJhdXRvIixsZWZ0OiJhdXRvIixsZXR0ZXJTcGFjaW5nOiJub3JtYWwiLGxpbmVIZWlnaHQ6IjEyMCUiLG1hcmdpbkJvdHRvbToiMHB4IixtYXJnaW5MZWZ0OiIwcHgiLG1hcmdpblJpZ2h0OiIwcHgiLG1hcmdpblRvcDoiMHB4IixtYXhIZWlnaHQ6Im5vbmUiLG1heFdpZHRoOiJub25lIixtaW5IZWlnaHQ6IjBweCIsbWluV2lkdGg6IjBweCIsb3BhY2l0eToiMS4wIixvdXRsaW5lQ29sb3I6ImludmVydCIsb3V0bGluZU9mZnNldDoiMHB4IixvdXRsaW5lV2lkdGg6IjNweCIscGFkZGluZ0JvdHRvbToiMHB4IixwYWRkaW5nTGVmdDoiMHB4IixwYWRkaW5nUmlnaHQ6IjBweCIscGFkZGluZ1RvcDoiMHB4IixyaWdodDoiYXV0byIsc3Ryb2tlRGFzaGFycmF5OiJub25lIixzdHJva2VEYXNob2Zmc2V0OiIwcHgiLHRleHRJbmRlbnQ6IjBweCIsdGV4dFNoYWRvdzoiMHB4IDBweCAwcHggdHJhbnNwYXJlbnQiLHRvcDoiYXV0byIsdHJhbnNmb3JtOiIiLHZlcnRpY2FsQWxpZ246IjBweCIsdmlzaWJpbGl0eToidmlzaWJsZSIsd2lkdGg6ImF1dG8iLHdvcmRTcGFjaW5nOiJub3JtYWwiLHpJbmRleDoiYXV0byJ9O2IucHJvcGVydHlJbnRlcnBvbGF0aW9uPWd9KGEsYiksZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYil7dmFyIGM9YS5jYWxjdWxhdGVBY3RpdmVEdXJhdGlvbihiKSxkPWZ1bmN0aW9uKGQpe3JldHVybiBhLmNhbGN1bGF0ZUl0ZXJhdGlvblByb2dyZXNzKGMsZCxiKX07cmV0dXJuIGQuX3RvdGFsRHVyYXRpb249Yi5kZWxheStjK2IuZW5kRGVsYXksZH1iLktleWZyYW1lRWZmZWN0PWZ1bmN0aW9uKGMsZSxmLGcpe3ZhciBoLGk9ZChhLm5vcm1hbGl6ZVRpbWluZ0lucHV0KGYpKSxqPWIuY29udmVydEVmZmVjdElucHV0KGUpLGs9ZnVuY3Rpb24oKXtqKGMsaCl9O3JldHVybiBrLl91cGRhdGU9ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGwhPT0oaD1pKGEpKX0say5fY2xlYXI9ZnVuY3Rpb24oKXtqKGMsbnVsbCl9LGsuX2hhc1NhbWVUYXJnZXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGM9PT1hfSxrLl90YXJnZXQ9YyxrLl90b3RhbER1cmF0aW9uPWkuX3RvdGFsRHVyYXRpb24say5faWQ9ZyxrfX0oYSxiKSxmdW5jdGlvbihhLGIpe2EuYXBwbHk9ZnVuY3Rpb24oYixjLGQpe2Iuc3R5bGVbYS5wcm9wZXJ0eU5hbWUoYyldPWR9LGEuY2xlYXI9ZnVuY3Rpb24oYixjKXtiLnN0eWxlW2EucHJvcGVydHlOYW1lKGMpXT0iIn19KGIpLGZ1bmN0aW9uKGEpe3dpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKGIsYyl7dmFyIGQ9IiI7cmV0dXJuIGMmJmMuaWQmJihkPWMuaWQpLGEudGltZWxpbmUuX3BsYXkoYS5LZXlmcmFtZUVmZmVjdCh0aGlzLGIsYyxkKSl9fShiKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSxiLGQpe2lmKCJudW1iZXIiPT10eXBlb2YgYSYmIm51bWJlciI9PXR5cGVvZiBiKXJldHVybiBhKigxLWQpK2IqZDtpZigiYm9vbGVhbiI9PXR5cGVvZiBhJiYiYm9vbGVhbiI9PXR5cGVvZiBiKXJldHVybiBkPC41P2E6YjtpZihhLmxlbmd0aD09Yi5sZW5ndGgpe2Zvcih2YXIgZT1bXSxmPTA7ZjxhLmxlbmd0aDtmKyspZS5wdXNoKGMoYVtmXSxiW2ZdLGQpKTtyZXR1cm4gZX10aHJvdyJNaXNtYXRjaGVkIGludGVycG9sYXRpb24gYXJndW1lbnRzICIrYSsiOiIrYn1hLkludGVycG9sYXRpb249ZnVuY3Rpb24oYSxiLGQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZChjKGEsYixlKSl9fX0oYiksZnVuY3Rpb24oYSxiLGMpe2Euc2VxdWVuY2VOdW1iZXI9MDt2YXIgZD1mdW5jdGlvbihhLGIsYyl7dGhpcy50YXJnZXQ9YSx0aGlzLmN1cnJlbnRUaW1lPWIsdGhpcy50aW1lbGluZVRpbWU9Yyx0aGlzLnR5cGU9ImZpbmlzaCIsdGhpcy5idWJibGVzPSExLHRoaXMuY2FuY2VsYWJsZT0hMSx0aGlzLmN1cnJlbnRUYXJnZXQ9YSx0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITEsdGhpcy5ldmVudFBoYXNlPUV2ZW50LkFUX1RBUkdFVCx0aGlzLnRpbWVTdGFtcD1EYXRlLm5vdygpfTtiLkFuaW1hdGlvbj1mdW5jdGlvbihiKXt0aGlzLmlkPSIiLGImJmIuX2lkJiYodGhpcy5pZD1iLl9pZCksdGhpcy5fc2VxdWVuY2VOdW1iZXI9YS5zZXF1ZW5jZU51bWJlcisrLHRoaXMuX2N1cnJlbnRUaW1lPTAsdGhpcy5fc3RhcnRUaW1lPW51bGwsdGhpcy5fcGF1c2VkPSExLHRoaXMuX3BsYXliYWNrUmF0ZT0xLHRoaXMuX2luVGltZWxpbmU9ITAsdGhpcy5fZmluaXNoZWRGbGFnPSEwLHRoaXMub25maW5pc2g9bnVsbCx0aGlzLl9maW5pc2hIYW5kbGVycz1bXSx0aGlzLl9lZmZlY3Q9Yix0aGlzLl9pbkVmZmVjdD10aGlzLl9lZmZlY3QuX3VwZGF0ZSgwKSx0aGlzLl9pZGxlPSEwLHRoaXMuX2N1cnJlbnRUaW1lUGVuZGluZz0hMX0sYi5BbmltYXRpb24ucHJvdG90eXBlPXtfZW5zdXJlQWxpdmU6ZnVuY3Rpb24oKXt0aGlzLnBsYXliYWNrUmF0ZTwwJiYwPT09dGhpcy5jdXJyZW50VGltZT90aGlzLl9pbkVmZmVjdD10aGlzLl9lZmZlY3QuX3VwZGF0ZSgtMSk6dGhpcy5faW5FZmZlY3Q9dGhpcy5fZWZmZWN0Ll91cGRhdGUodGhpcy5jdXJyZW50VGltZSksdGhpcy5faW5UaW1lbGluZXx8IXRoaXMuX2luRWZmZWN0JiZ0aGlzLl9maW5pc2hlZEZsYWd8fCh0aGlzLl9pblRpbWVsaW5lPSEwLGIudGltZWxpbmUuX2FuaW1hdGlvbnMucHVzaCh0aGlzKSl9LF90aWNrQ3VycmVudFRpbWU6ZnVuY3Rpb24oYSxiKXthIT10aGlzLl9jdXJyZW50VGltZSYmKHRoaXMuX2N1cnJlbnRUaW1lPWEsdGhpcy5faXNGaW5pc2hlZCYmIWImJih0aGlzLl9jdXJyZW50VGltZT10aGlzLl9wbGF5YmFja1JhdGU+MD90aGlzLl90b3RhbER1cmF0aW9uOjApLHRoaXMuX2Vuc3VyZUFsaXZlKCkpfSxnZXQgY3VycmVudFRpbWUoKXtyZXR1cm4gdGhpcy5faWRsZXx8dGhpcy5fY3VycmVudFRpbWVQZW5kaW5nP251bGw6dGhpcy5fY3VycmVudFRpbWV9LHNldCBjdXJyZW50VGltZShhKXthPSthLGlzTmFOKGEpfHwoYi5yZXN0YXJ0KCksdGhpcy5fcGF1c2VkfHxudWxsPT10aGlzLl9zdGFydFRpbWV8fCh0aGlzLl9zdGFydFRpbWU9dGhpcy5fdGltZWxpbmUuY3VycmVudFRpbWUtYS90aGlzLl9wbGF5YmFja1JhdGUpLHRoaXMuX2N1cnJlbnRUaW1lUGVuZGluZz0hMSx0aGlzLl9jdXJyZW50VGltZSE9YSYmKHRoaXMuX2lkbGUmJih0aGlzLl9pZGxlPSExLHRoaXMuX3BhdXNlZD0hMCksdGhpcy5fdGlja0N1cnJlbnRUaW1lKGEsITApLGIuYXBwbHlEaXJ0aWVkQW5pbWF0aW9uKHRoaXMpKSl9LGdldCBzdGFydFRpbWUoKXtyZXR1cm4gdGhpcy5fc3RhcnRUaW1lfSxzZXQgc3RhcnRUaW1lKGEpe2E9K2EsaXNOYU4oYSl8fHRoaXMuX3BhdXNlZHx8dGhpcy5faWRsZXx8KHRoaXMuX3N0YXJ0VGltZT1hLHRoaXMuX3RpY2tDdXJyZW50VGltZSgodGhpcy5fdGltZWxpbmUuY3VycmVudFRpbWUtdGhpcy5fc3RhcnRUaW1lKSp0aGlzLnBsYXliYWNrUmF0ZSksYi5hcHBseURpcnRpZWRBbmltYXRpb24odGhpcykpfSxnZXQgcGxheWJhY2tSYXRlKCl7cmV0dXJuIHRoaXMuX3BsYXliYWNrUmF0ZX0sc2V0IHBsYXliYWNrUmF0ZShhKXtpZihhIT10aGlzLl9wbGF5YmFja1JhdGUpe3ZhciBjPXRoaXMuY3VycmVudFRpbWU7dGhpcy5fcGxheWJhY2tSYXRlPWEsdGhpcy5fc3RhcnRUaW1lPW51bGwsInBhdXNlZCIhPXRoaXMucGxheVN0YXRlJiYiaWRsZSIhPXRoaXMucGxheVN0YXRlJiYodGhpcy5fZmluaXNoZWRGbGFnPSExLHRoaXMuX2lkbGU9ITEsdGhpcy5fZW5zdXJlQWxpdmUoKSxiLmFwcGx5RGlydGllZEFuaW1hdGlvbih0aGlzKSksbnVsbCE9YyYmKHRoaXMuY3VycmVudFRpbWU9Yyl9fSxnZXQgX2lzRmluaXNoZWQoKXtyZXR1cm4hdGhpcy5faWRsZSYmKHRoaXMuX3BsYXliYWNrUmF0ZT4wJiZ0aGlzLl9jdXJyZW50VGltZT49dGhpcy5fdG90YWxEdXJhdGlvbnx8dGhpcy5fcGxheWJhY2tSYXRlPDAmJnRoaXMuX2N1cnJlbnRUaW1lPD0wKX0sZ2V0IF90b3RhbER1cmF0aW9uKCl7cmV0dXJuIHRoaXMuX2VmZmVjdC5fdG90YWxEdXJhdGlvbn0sZ2V0IHBsYXlTdGF0ZSgpe3JldHVybiB0aGlzLl9pZGxlPyJpZGxlIjpudWxsPT10aGlzLl9zdGFydFRpbWUmJiF0aGlzLl9wYXVzZWQmJjAhPXRoaXMucGxheWJhY2tSYXRlfHx0aGlzLl9jdXJyZW50VGltZVBlbmRpbmc/InBlbmRpbmciOnRoaXMuX3BhdXNlZD8icGF1c2VkIjp0aGlzLl9pc0ZpbmlzaGVkPyJmaW5pc2hlZCI6InJ1bm5pbmcifSxfcmV3aW5kOmZ1bmN0aW9uKCl7aWYodGhpcy5fcGxheWJhY2tSYXRlPj0wKXRoaXMuX2N1cnJlbnRUaW1lPTA7ZWxzZXtpZighKHRoaXMuX3RvdGFsRHVyYXRpb248MS8wKSl0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCJVbmFibGUgdG8gcmV3aW5kIG5lZ2F0aXZlIHBsYXliYWNrIHJhdGUgYW5pbWF0aW9uIHdpdGggaW5maW5pdGUgZHVyYXRpb24iLCJJbnZhbGlkU3RhdGVFcnJvciIpO3RoaXMuX2N1cnJlbnRUaW1lPXRoaXMuX3RvdGFsRHVyYXRpb259fSxwbGF5OmZ1bmN0aW9uKCl7dGhpcy5fcGF1c2VkPSExLCh0aGlzLl9pc0ZpbmlzaGVkfHx0aGlzLl9pZGxlKSYmKHRoaXMuX3Jld2luZCgpLHRoaXMuX3N0YXJ0VGltZT1udWxsKSx0aGlzLl9maW5pc2hlZEZsYWc9ITEsdGhpcy5faWRsZT0hMSx0aGlzLl9lbnN1cmVBbGl2ZSgpLGIuYXBwbHlEaXJ0aWVkQW5pbWF0aW9uKHRoaXMpfSxwYXVzZTpmdW5jdGlvbigpe3RoaXMuX2lzRmluaXNoZWR8fHRoaXMuX3BhdXNlZHx8dGhpcy5faWRsZT90aGlzLl9pZGxlJiYodGhpcy5fcmV3aW5kKCksdGhpcy5faWRsZT0hMSk6dGhpcy5fY3VycmVudFRpbWVQZW5kaW5nPSEwLHRoaXMuX3N0YXJ0VGltZT1udWxsLHRoaXMuX3BhdXNlZD0hMH0sZmluaXNoOmZ1bmN0aW9uKCl7dGhpcy5faWRsZXx8KHRoaXMuY3VycmVudFRpbWU9dGhpcy5fcGxheWJhY2tSYXRlPjA/dGhpcy5fdG90YWxEdXJhdGlvbjowLHRoaXMuX3N0YXJ0VGltZT10aGlzLl90b3RhbER1cmF0aW9uLXRoaXMuY3VycmVudFRpbWUsdGhpcy5fY3VycmVudFRpbWVQZW5kaW5nPSExLGIuYXBwbHlEaXJ0aWVkQW5pbWF0aW9uKHRoaXMpKX0sY2FuY2VsOmZ1bmN0aW9uKCl7dGhpcy5faW5FZmZlY3QmJih0aGlzLl9pbkVmZmVjdD0hMSx0aGlzLl9pZGxlPSEwLHRoaXMuX3BhdXNlZD0hMSx0aGlzLl9maW5pc2hlZEZsYWc9ITAsdGhpcy5fY3VycmVudFRpbWU9MCx0aGlzLl9zdGFydFRpbWU9bnVsbCx0aGlzLl9lZmZlY3QuX3VwZGF0ZShudWxsKSxiLmFwcGx5RGlydGllZEFuaW1hdGlvbih0aGlzKSl9LHJldmVyc2U6ZnVuY3Rpb24oKXt0aGlzLnBsYXliYWNrUmF0ZSo9LTEsdGhpcy5wbGF5KCl9LGFkZEV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxiKXsiZnVuY3Rpb24iPT10eXBlb2YgYiYmImZpbmlzaCI9PWEmJnRoaXMuX2ZpbmlzaEhhbmRsZXJzLnB1c2goYil9LHJlbW92ZUV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxiKXtpZigiZmluaXNoIj09YSl7dmFyIGM9dGhpcy5fZmluaXNoSGFuZGxlcnMuaW5kZXhPZihiKTtjPj0wJiZ0aGlzLl9maW5pc2hIYW5kbGVycy5zcGxpY2UoYywxKX19LF9maXJlRXZlbnRzOmZ1bmN0aW9uKGEpe2lmKHRoaXMuX2lzRmluaXNoZWQpe2lmKCF0aGlzLl9maW5pc2hlZEZsYWcpe3ZhciBiPW5ldyBkKHRoaXMsdGhpcy5fY3VycmVudFRpbWUsYSksYz10aGlzLl9maW5pc2hIYW5kbGVycy5jb25jYXQodGhpcy5vbmZpbmlzaD9bdGhpcy5vbmZpbmlzaF06W10pO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtjLmZvckVhY2goZnVuY3Rpb24oYSl7YS5jYWxsKGIudGFyZ2V0LGIpfSl9LDApLHRoaXMuX2ZpbmlzaGVkRmxhZz0hMH19ZWxzZSB0aGlzLl9maW5pc2hlZEZsYWc9ITF9LF90aWNrOmZ1bmN0aW9uKGEsYil7dGhpcy5faWRsZXx8dGhpcy5fcGF1c2VkfHwobnVsbD09dGhpcy5fc3RhcnRUaW1lP2ImJih0aGlzLnN0YXJ0VGltZT1hLXRoaXMuX2N1cnJlbnRUaW1lL3RoaXMucGxheWJhY2tSYXRlKTp0aGlzLl9pc0ZpbmlzaGVkfHx0aGlzLl90aWNrQ3VycmVudFRpbWUoKGEtdGhpcy5fc3RhcnRUaW1lKSp0aGlzLnBsYXliYWNrUmF0ZSkpLGImJih0aGlzLl9jdXJyZW50VGltZVBlbmRpbmc9ITEsdGhpcy5fZmlyZUV2ZW50cyhhKSl9LGdldCBfbmVlZHNUaWNrKCl7cmV0dXJuIHRoaXMucGxheVN0YXRlIGlue3BlbmRpbmc6MSxydW5uaW5nOjF9fHwhdGhpcy5fZmluaXNoZWRGbGFnfSxfdGFyZ2V0QW5pbWF0aW9uczpmdW5jdGlvbigpe3ZhciBhPXRoaXMuX2VmZmVjdC5fdGFyZ2V0O3JldHVybiBhLl9hY3RpdmVBbmltYXRpb25zfHwoYS5fYWN0aXZlQW5pbWF0aW9ucz1bXSksYS5fYWN0aXZlQW5pbWF0aW9uc30sX21hcmtUYXJnZXQ6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl90YXJnZXRBbmltYXRpb25zKCk7LTE9PT1hLmluZGV4T2YodGhpcykmJmEucHVzaCh0aGlzKX0sX3VubWFya1RhcmdldDpmdW5jdGlvbigpe3ZhciBhPXRoaXMuX3RhcmdldEFuaW1hdGlvbnMoKSxiPWEuaW5kZXhPZih0aGlzKTstMSE9PWImJmEuc3BsaWNlKGIsMSl9fX0oYSxiKSxmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZChhKXt2YXIgYj1qO2o9W10sYTxxLmN1cnJlbnRUaW1lJiYoYT1xLmN1cnJlbnRUaW1lKSxxLl9hbmltYXRpb25zLnNvcnQoZSkscS5fYW5pbWF0aW9ucz1oKGEsITAscS5fYW5pbWF0aW9ucylbMF0sYi5mb3JFYWNoKGZ1bmN0aW9uKGIpe2JbMV0oYSl9KSxnKCksbD12b2lkIDB9ZnVuY3Rpb24gZShhLGIpe3JldHVybiBhLl9zZXF1ZW5jZU51bWJlci1iLl9zZXF1ZW5jZU51bWJlcn1mdW5jdGlvbiBmKCl7dGhpcy5fYW5pbWF0aW9ucz1bXSx0aGlzLmN1cnJlbnRUaW1lPXdpbmRvdy5wZXJmb3JtYW5jZSYmcGVyZm9ybWFuY2Uubm93P3BlcmZvcm1hbmNlLm5vdygpOjB9ZnVuY3Rpb24gZygpe28uZm9yRWFjaChmdW5jdGlvbihhKXthKCl9KSxvLmxlbmd0aD0wfWZ1bmN0aW9uIGgoYSxjLGQpe3A9ITAsbj0hMSxiLnRpbWVsaW5lLmN1cnJlbnRUaW1lPWEsbT0hMTt2YXIgZT1bXSxmPVtdLGc9W10saD1bXTtyZXR1cm4gZC5mb3JFYWNoKGZ1bmN0aW9uKGIpe2IuX3RpY2soYSxjKSxiLl9pbkVmZmVjdD8oZi5wdXNoKGIuX2VmZmVjdCksYi5fbWFya1RhcmdldCgpKTooZS5wdXNoKGIuX2VmZmVjdCksYi5fdW5tYXJrVGFyZ2V0KCkpLGIuX25lZWRzVGljayYmKG09ITApO3ZhciBkPWIuX2luRWZmZWN0fHxiLl9uZWVkc1RpY2s7Yi5faW5UaW1lbGluZT1kLGQ/Zy5wdXNoKGIpOmgucHVzaChiKX0pLG8ucHVzaC5hcHBseShvLGUpLG8ucHVzaC5hcHBseShvLGYpLG0mJnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe30pLHA9ITEsW2csaF19dmFyIGk9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSxqPVtdLGs9MDt3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lPWZ1bmN0aW9uKGEpe3ZhciBiPWsrKztyZXR1cm4gMD09ai5sZW5ndGgmJmkoZCksai5wdXNoKFtiLGFdKSxifSx3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWU9ZnVuY3Rpb24oYSl7ai5mb3JFYWNoKGZ1bmN0aW9uKGIpe2JbMF09PWEmJihiWzFdPWZ1bmN0aW9uKCl7fSl9KX0sZi5wcm90b3R5cGU9e19wbGF5OmZ1bmN0aW9uKGMpe2MuX3RpbWluZz1hLm5vcm1hbGl6ZVRpbWluZ0lucHV0KGMudGltaW5nKTt2YXIgZD1uZXcgYi5BbmltYXRpb24oYyk7cmV0dXJuIGQuX2lkbGU9ITEsZC5fdGltZWxpbmU9dGhpcyx0aGlzLl9hbmltYXRpb25zLnB1c2goZCksYi5yZXN0YXJ0KCksYi5hcHBseURpcnRpZWRBbmltYXRpb24oZCksZH19O3ZhciBsPXZvaWQgMCxtPSExLG49ITE7Yi5yZXN0YXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIG18fChtPSEwLHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe30pLG49ITApLG59LGIuYXBwbHlEaXJ0aWVkQW5pbWF0aW9uPWZ1bmN0aW9uKGEpe2lmKCFwKXthLl9tYXJrVGFyZ2V0KCk7dmFyIGM9YS5fdGFyZ2V0QW5pbWF0aW9ucygpO2Muc29ydChlKSxoKGIudGltZWxpbmUuY3VycmVudFRpbWUsITEsYy5zbGljZSgpKVsxXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBiPXEuX2FuaW1hdGlvbnMuaW5kZXhPZihhKTstMSE9PWImJnEuX2FuaW1hdGlvbnMuc3BsaWNlKGIsMSl9KSxnKCl9fTt2YXIgbz1bXSxwPSExLHE9bmV3IGY7Yi50aW1lbGluZT1xfShhLGIpLGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoYSxiKXt2YXIgYz1hLmV4ZWMoYik7aWYoYylyZXR1cm4gYz1hLmlnbm9yZUNhc2U/Y1swXS50b0xvd2VyQ2FzZSgpOmNbMF0sW2MsYi5zdWJzdHIoYy5sZW5ndGgpXX1mdW5jdGlvbiBjKGEsYil7Yj1iLnJlcGxhY2UoL15ccyovLCIiKTt2YXIgYz1hKGIpO2lmKGMpcmV0dXJuW2NbMF0sY1sxXS5yZXBsYWNlKC9eXHMqLywiIildfWZ1bmN0aW9uIGQoYSxkLGUpe2E9Yy5iaW5kKG51bGwsYSk7Zm9yKHZhciBmPVtdOzspe3ZhciBnPWEoZSk7aWYoIWcpcmV0dXJuW2YsZV07aWYoZi5wdXNoKGdbMF0pLGU9Z1sxXSwhKGc9YihkLGUpKXx8IiI9PWdbMV0pcmV0dXJuW2YsZV07ZT1nWzFdfX1mdW5jdGlvbiBlKGEsYil7Zm9yKHZhciBjPTAsZD0wO2Q8Yi5sZW5ndGgmJighL1xzfCwvLnRlc3QoYltkXSl8fDAhPWMpO2QrKylpZigiKCI9PWJbZF0pYysrO2Vsc2UgaWYoIikiPT1iW2RdJiYoYy0tLDA9PWMmJmQrKyxjPD0wKSlicmVhazt2YXIgZT1hKGIuc3Vic3RyKDAsZCkpO3JldHVybiB2b2lkIDA9PWU/dm9pZCAwOltlLGIuc3Vic3RyKGQpXX1mdW5jdGlvbiBmKGEsYil7Zm9yKHZhciBjPWEsZD1iO2MmJmQ7KWM+ZD9jJT1kOmQlPWM7cmV0dXJuIGM9YSpiLyhjK2QpfWZ1bmN0aW9uIGcoYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe3ZhciBjPWEoYik7cmV0dXJuIGMmJihjWzBdPXZvaWQgMCksY319ZnVuY3Rpb24gaChhLGIpe3JldHVybiBmdW5jdGlvbihjKXtyZXR1cm4gYShjKXx8W2IsY119fWZ1bmN0aW9uIGkoYixjKXtmb3IodmFyIGQ9W10sZT0wO2U8Yi5sZW5ndGg7ZSsrKXt2YXIgZj1hLmNvbnN1bWVUcmltbWVkKGJbZV0sYyk7aWYoIWZ8fCIiPT1mWzBdKXJldHVybjt2b2lkIDAhPT1mWzBdJiZkLnB1c2goZlswXSksYz1mWzFdfWlmKCIiPT1jKXJldHVybiBkfWZ1bmN0aW9uIGooYSxiLGMsZCxlKXtmb3IodmFyIGc9W10saD1bXSxpPVtdLGo9ZihkLmxlbmd0aCxlLmxlbmd0aCksaz0wO2s8ajtrKyspe3ZhciBsPWIoZFtrJWQubGVuZ3RoXSxlW2slZS5sZW5ndGhdKTtpZighbClyZXR1cm47Zy5wdXNoKGxbMF0pLGgucHVzaChsWzFdKSxpLnB1c2gobFsyXSl9cmV0dXJuW2csaCxmdW5jdGlvbihiKXt2YXIgZD1iLm1hcChmdW5jdGlvbihhLGIpe3JldHVybiBpW2JdKGEpfSkuam9pbihjKTtyZXR1cm4gYT9hKGQpOmR9XX1mdW5jdGlvbiBrKGEsYixjKXtmb3IodmFyIGQ9W10sZT1bXSxmPVtdLGc9MCxoPTA7aDxjLmxlbmd0aDtoKyspaWYoImZ1bmN0aW9uIj09dHlwZW9mIGNbaF0pe3ZhciBpPWNbaF0oYVtnXSxiW2crK10pO2QucHVzaChpWzBdKSxlLnB1c2goaVsxXSksZi5wdXNoKGlbMl0pfWVsc2UhZnVuY3Rpb24oYSl7ZC5wdXNoKCExKSxlLnB1c2goITEpLGYucHVzaChmdW5jdGlvbigpe3JldHVybiBjW2FdfSl9KGgpO3JldHVybltkLGUsZnVuY3Rpb24oYSl7Zm9yKHZhciBiPSIiLGM9MDtjPGEubGVuZ3RoO2MrKyliKz1mW2NdKGFbY10pO3JldHVybiBifV19YS5jb25zdW1lVG9rZW49YixhLmNvbnN1bWVUcmltbWVkPWMsYS5jb25zdW1lUmVwZWF0ZWQ9ZCxhLmNvbnN1bWVQYXJlbnRoZXNpc2VkPWUsYS5pZ25vcmU9ZyxhLm9wdGlvbmFsPWgsYS5jb25zdW1lTGlzdD1pLGEubWVyZ2VOZXN0ZWRSZXBlYXRlZD1qLmJpbmQobnVsbCxudWxsKSxhLm1lcmdlV3JhcHBlZE5lc3RlZFJlcGVhdGVkPWosYS5tZXJnZUxpc3Q9a30oYiksZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihiKXtmdW5jdGlvbiBjKGIpe3ZhciBjPWEuY29uc3VtZVRva2VuKC9eaW5zZXQvaSxiKTtyZXR1cm4gYz8oZC5pbnNldD0hMCxjKTooYz1hLmNvbnN1bWVMZW5ndGhPclBlcmNlbnQoYikpPyhkLmxlbmd0aHMucHVzaChjWzBdKSxjKTooYz1hLmNvbnN1bWVDb2xvcihiKSxjPyhkLmNvbG9yPWNbMF0sYyk6dm9pZCAwKX12YXIgZD17aW5zZXQ6ITEsbGVuZ3RoczpbXSxjb2xvcjpudWxsfSxlPWEuY29uc3VtZVJlcGVhdGVkKGMsL14vLGIpO2lmKGUmJmVbMF0ubGVuZ3RoKXJldHVybltkLGVbMV1dfWZ1bmN0aW9uIGMoYyl7dmFyIGQ9YS5jb25zdW1lUmVwZWF0ZWQoYiwvXiwvLGMpO2lmKGQmJiIiPT1kWzFdKXJldHVybiBkWzBdfWZ1bmN0aW9uIGQoYixjKXtmb3IoO2IubGVuZ3Rocy5sZW5ndGg8TWF0aC5tYXgoYi5sZW5ndGhzLmxlbmd0aCxjLmxlbmd0aHMubGVuZ3RoKTspYi5sZW5ndGhzLnB1c2goe3B4OjB9KTtmb3IoO2MubGVuZ3Rocy5sZW5ndGg8TWF0aC5tYXgoYi5sZW5ndGhzLmxlbmd0aCxjLmxlbmd0aHMubGVuZ3RoKTspYy5sZW5ndGhzLnB1c2goe3B4OjB9KTtpZihiLmluc2V0PT1jLmluc2V0JiYhIWIuY29sb3I9PSEhYy5jb2xvcil7Zm9yKHZhciBkLGU9W10sZj1bW10sMF0sZz1bW10sMF0saD0wO2g8Yi5sZW5ndGhzLmxlbmd0aDtoKyspe3ZhciBpPWEubWVyZ2VEaW1lbnNpb25zKGIubGVuZ3Roc1toXSxjLmxlbmd0aHNbaF0sMj09aCk7ZlswXS5wdXNoKGlbMF0pLGdbMF0ucHVzaChpWzFdKSxlLnB1c2goaVsyXSl9aWYoYi5jb2xvciYmYy5jb2xvcil7dmFyIGo9YS5tZXJnZUNvbG9ycyhiLmNvbG9yLGMuY29sb3IpO2ZbMV09alswXSxnWzFdPWpbMV0sZD1qWzJdfXJldHVybltmLGcsZnVuY3Rpb24oYSl7Zm9yKHZhciBjPWIuaW5zZXQ/Imluc2V0ICI6IiAiLGY9MDtmPGUubGVuZ3RoO2YrKyljKz1lW2ZdKGFbMF1bZl0pKyIgIjtyZXR1cm4gZCYmKGMrPWQoYVsxXSkpLGN9XX19ZnVuY3Rpb24gZShiLGMsZCxlKXtmdW5jdGlvbiBmKGEpe3JldHVybntpbnNldDphLGNvbG9yOlswLDAsMCwwXSxsZW5ndGhzOlt7cHg6MH0se3B4OjB9LHtweDowfSx7cHg6MH1dfX1mb3IodmFyIGc9W10saD1bXSxpPTA7aTxkLmxlbmd0aHx8aTxlLmxlbmd0aDtpKyspe3ZhciBqPWRbaV18fGYoZVtpXS5pbnNldCksaz1lW2ldfHxmKGRbaV0uaW5zZXQpO2cucHVzaChqKSxoLnB1c2goayl9cmV0dXJuIGEubWVyZ2VOZXN0ZWRSZXBlYXRlZChiLGMsZyxoKX12YXIgZj1lLmJpbmQobnVsbCxkLCIsICIpO2EuYWRkUHJvcGVydGllc0hhbmRsZXIoYyxmLFsiYm94LXNoYWRvdyIsInRleHQtc2hhZG93Il0pfShiKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSl7cmV0dXJuIGEudG9GaXhlZCgzKS5yZXBsYWNlKC8wKyQvLCIiKS5yZXBsYWNlKC9cLiQvLCIiKX1mdW5jdGlvbiBkKGEsYixjKXtyZXR1cm4gTWF0aC5taW4oYixNYXRoLm1heChhLGMpKX1mdW5jdGlvbiBlKGEpe2lmKC9eXHMqWy0rXT8oXGQqXC4pP1xkK1xzKiQvLnRlc3QoYSkpcmV0dXJuIE51bWJlcihhKX1mdW5jdGlvbiBmKGEsYil7cmV0dXJuW2EsYixjXX1mdW5jdGlvbiBnKGEsYil7aWYoMCE9YSlyZXR1cm4gaSgwLDEvMCkoYSxiKX1mdW5jdGlvbiBoKGEsYil7cmV0dXJuW2EsYixmdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5yb3VuZChkKDEsMS8wLGEpKX1dfWZ1bmN0aW9uIGkoYSxiKXtyZXR1cm4gZnVuY3Rpb24oZSxmKXtyZXR1cm5bZSxmLGZ1bmN0aW9uKGUpe3JldHVybiBjKGQoYSxiLGUpKX1dfX1mdW5jdGlvbiBqKGEpe3ZhciBiPWEudHJpbSgpLnNwbGl0KC9ccypbXHMsXVxzKi8pO2lmKDAhPT1iLmxlbmd0aCl7Zm9yKHZhciBjPVtdLGQ9MDtkPGIubGVuZ3RoO2QrKyl7dmFyIGY9ZShiW2RdKTtpZih2b2lkIDA9PT1mKXJldHVybjtjLnB1c2goZil9cmV0dXJuIGN9fWZ1bmN0aW9uIGsoYSxiKXtpZihhLmxlbmd0aD09Yi5sZW5ndGgpcmV0dXJuW2EsYixmdW5jdGlvbihhKXtyZXR1cm4gYS5tYXAoYykuam9pbigiICIpfV19ZnVuY3Rpb24gbChhLGIpe3JldHVyblthLGIsTWF0aC5yb3VuZF19YS5jbGFtcD1kLGEuYWRkUHJvcGVydGllc0hhbmRsZXIoaixrLFsic3Ryb2tlLWRhc2hhcnJheSJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGUsaSgwLDEvMCksWyJib3JkZXItaW1hZ2Utd2lkdGgiLCJsaW5lLWhlaWdodCJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGUsaSgwLDEpLFsib3BhY2l0eSIsInNoYXBlLWltYWdlLXRocmVzaG9sZCJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGUsZyxbImZsZXgtZ3JvdyIsImZsZXgtc2hyaW5rIl0pLGEuYWRkUHJvcGVydGllc0hhbmRsZXIoZSxoLFsib3JwaGFucyIsIndpZG93cyJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGUsbCxbInotaW5kZXgiXSksYS5wYXJzZU51bWJlcj1lLGEucGFyc2VOdW1iZXJMaXN0PWosYS5tZXJnZU51bWJlcnM9ZixhLm51bWJlclRvU3RyaW5nPWN9KGIpLGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhLGIpe2lmKCJ2aXNpYmxlIj09YXx8InZpc2libGUiPT1iKXJldHVyblswLDEsZnVuY3Rpb24oYyl7cmV0dXJuIGM8PTA/YTpjPj0xP2I6InZpc2libGUifV19YS5hZGRQcm9wZXJ0aWVzSGFuZGxlcihTdHJpbmcsYyxbInZpc2liaWxpdHkiXSl9KGIpLGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhKXthPWEudHJpbSgpLGYuZmlsbFN0eWxlPSIjMDAwIixmLmZpbGxTdHlsZT1hO3ZhciBiPWYuZmlsbFN0eWxlO2lmKGYuZmlsbFN0eWxlPSIjZmZmIixmLmZpbGxTdHlsZT1hLGI9PWYuZmlsbFN0eWxlKXtmLmZpbGxSZWN0KDAsMCwxLDEpO3ZhciBjPWYuZ2V0SW1hZ2VEYXRhKDAsMCwxLDEpLmRhdGE7Zi5jbGVhclJlY3QoMCwwLDEsMSk7dmFyIGQ9Y1szXS8yNTU7cmV0dXJuW2NbMF0qZCxjWzFdKmQsY1syXSpkLGRdfX1mdW5jdGlvbiBkKGIsYyl7cmV0dXJuW2IsYyxmdW5jdGlvbihiKXtmdW5jdGlvbiBjKGEpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKDI1NSxhKSl9aWYoYlszXSlmb3IodmFyIGQ9MDtkPDM7ZCsrKWJbZF09TWF0aC5yb3VuZChjKGJbZF0vYlszXSkpO3JldHVybiBiWzNdPWEubnVtYmVyVG9TdHJpbmcoYS5jbGFtcCgwLDEsYlszXSkpLCJyZ2JhKCIrYi5qb2luKCIsIikrIikifV19dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiY2FudmFzIik7ZS53aWR0aD1lLmhlaWdodD0xO3ZhciBmPWUuZ2V0Q29udGV4dCgiMmQiKTthLmFkZFByb3BlcnRpZXNIYW5kbGVyKGMsZCxbImJhY2tncm91bmQtY29sb3IiLCJib3JkZXItYm90dG9tLWNvbG9yIiwiYm9yZGVyLWxlZnQtY29sb3IiLCJib3JkZXItcmlnaHQtY29sb3IiLCJib3JkZXItdG9wLWNvbG9yIiwiY29sb3IiLCJmaWxsIiwiZmxvb2QtY29sb3IiLCJsaWdodGluZy1jb2xvciIsIm91dGxpbmUtY29sb3IiLCJzdG9wLWNvbG9yIiwic3Ryb2tlIiwidGV4dC1kZWNvcmF0aW9uLWNvbG9yIl0pLGEuY29uc3VtZUNvbG9yPWEuY29uc3VtZVBhcmVudGhlc2lzZWQuYmluZChudWxsLGMpLGEubWVyZ2VDb2xvcnM9ZH0oYiksZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEpe2Z1bmN0aW9uIGIoKXt2YXIgYj1oLmV4ZWMoYSk7Zz1iP2JbMF06dm9pZCAwfWZ1bmN0aW9uIGMoKXt2YXIgYT1OdW1iZXIoZyk7cmV0dXJuIGIoKSxhfWZ1bmN0aW9uIGQoKXtpZigiKCIhPT1nKXJldHVybiBjKCk7YigpO3ZhciBhPWYoKTtyZXR1cm4iKSIhPT1nP05hTjooYigpLGEpfWZ1bmN0aW9uIGUoKXtmb3IodmFyIGE9ZCgpOyIqIj09PWd8fCIvIj09PWc7KXt2YXIgYz1nO2IoKTt2YXIgZT1kKCk7IioiPT09Yz9hKj1lOmEvPWV9cmV0dXJuIGF9ZnVuY3Rpb24gZigpe2Zvcih2YXIgYT1lKCk7IisiPT09Z3x8Ii0iPT09Zzspe3ZhciBjPWc7YigpO3ZhciBkPWUoKTsiKyI9PT1jP2ErPWQ6YS09ZH1yZXR1cm4gYX12YXIgZyxoPS8oW1wrXC1cd1wuXSt8W1woXClcKlwvXSkvZztyZXR1cm4gYigpLGYoKX1mdW5jdGlvbiBkKGEsYil7aWYoIjAiPT0oYj1iLnRyaW0oKS50b0xvd2VyQ2FzZSgpKSYmInB4Ii5zZWFyY2goYSk+PTApcmV0dXJue3B4OjB9O2lmKC9eW14oXSokfF5jYWxjLy50ZXN0KGIpKXtiPWIucmVwbGFjZSgvY2FsY1woL2csIigiKTt2YXIgZD17fTtiPWIucmVwbGFjZShhLGZ1bmN0aW9uKGEpe3JldHVybiBkW2FdPW51bGwsIlUiK2F9KTtmb3IodmFyIGU9IlUoIithLnNvdXJjZSsiKSIsZj1iLnJlcGxhY2UoL1stK10/KFxkKlwuKT9cZCsoW0VlXVstK10/XGQrKT8vZywiTiIpLnJlcGxhY2UobmV3IFJlZ0V4cCgiTiIrZSwiZyIpLCJEIikucmVwbGFjZSgvXHNbKy1dXHMvZywiTyIpLnJlcGxhY2UoL1xzL2csIiIpLGc9Wy9OXCooRCkvZywvKE58RClbKlwvXU4vZywvKE58RClPXDEvZywvXCgoTnxEKVwpL2ddLGg9MDtoPGcubGVuZ3RoOylnW2hdLnRlc3QoZik/KGY9Zi5yZXBsYWNlKGdbaF0sIiQxIiksaD0wKTpoKys7aWYoIkQiPT1mKXtmb3IodmFyIGkgaW4gZCl7dmFyIGo9YyhiLnJlcGxhY2UobmV3IFJlZ0V4cCgiVSIraSwiZyIpLCIiKS5yZXBsYWNlKG5ldyBSZWdFeHAoZSwiZyIpLCIqMCIpKTtpZighaXNGaW5pdGUoaikpcmV0dXJuO2RbaV09an1yZXR1cm4gZH19fWZ1bmN0aW9uIGUoYSxiKXtyZXR1cm4gZihhLGIsITApfWZ1bmN0aW9uIGYoYixjLGQpe3ZhciBlLGY9W107Zm9yKGUgaW4gYilmLnB1c2goZSk7Zm9yKGUgaW4gYylmLmluZGV4T2YoZSk8MCYmZi5wdXNoKGUpO3JldHVybiBiPWYubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBiW2FdfHwwfSksYz1mLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gY1thXXx8MH0pLFtiLGMsZnVuY3Rpb24oYil7dmFyIGM9Yi5tYXAoZnVuY3Rpb24oYyxlKXtyZXR1cm4gMT09Yi5sZW5ndGgmJmQmJihjPU1hdGgubWF4KGMsMCkpLGEubnVtYmVyVG9TdHJpbmcoYykrZltlXX0pLmpvaW4oIiArICIpO3JldHVybiBiLmxlbmd0aD4xPyJjYWxjKCIrYysiKSI6Y31dfXZhciBnPSJweHxlbXxleHxjaHxyZW18dnd8dmh8dm1pbnx2bWF4fGNtfG1tfGlufHB0fHBjIixoPWQuYmluZChudWxsLG5ldyBSZWdFeHAoZywiZyIpKSxpPWQuYmluZChudWxsLG5ldyBSZWdFeHAoZysifCUiLCJnIikpLGo9ZC5iaW5kKG51bGwsL2RlZ3xyYWR8Z3JhZHx0dXJuL2cpO2EucGFyc2VMZW5ndGg9aCxhLnBhcnNlTGVuZ3RoT3JQZXJjZW50PWksYS5jb25zdW1lTGVuZ3RoT3JQZXJjZW50PWEuY29uc3VtZVBhcmVudGhlc2lzZWQuYmluZChudWxsLGkpLGEucGFyc2VBbmdsZT1qLGEubWVyZ2VEaW1lbnNpb25zPWY7dmFyIGs9YS5jb25zdW1lUGFyZW50aGVzaXNlZC5iaW5kKG51bGwsaCksbD1hLmNvbnN1bWVSZXBlYXRlZC5iaW5kKHZvaWQgMCxrLC9eLyksbT1hLmNvbnN1bWVSZXBlYXRlZC5iaW5kKHZvaWQgMCxsLC9eLC8pO2EuY29uc3VtZVNpemVQYWlyTGlzdD1tO3ZhciBuPWZ1bmN0aW9uKGEpe3ZhciBiPW0oYSk7aWYoYiYmIiI9PWJbMV0pcmV0dXJuIGJbMF19LG89YS5tZXJnZU5lc3RlZFJlcGVhdGVkLmJpbmQodm9pZCAwLGUsIiAiKSxwPWEubWVyZ2VOZXN0ZWRSZXBlYXRlZC5iaW5kKHZvaWQgMCxvLCIsIik7YS5tZXJnZU5vbk5lZ2F0aXZlU2l6ZVBhaXI9byxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKG4scCxbImJhY2tncm91bmQtc2l6ZSJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGksZSxbImJvcmRlci1ib3R0b20td2lkdGgiLCJib3JkZXItaW1hZ2Utd2lkdGgiLCJib3JkZXItbGVmdC13aWR0aCIsImJvcmRlci1yaWdodC13aWR0aCIsImJvcmRlci10b3Atd2lkdGgiLCJmbGV4LWJhc2lzIiwiZm9udC1zaXplIiwiaGVpZ2h0IiwibGluZS1oZWlnaHQiLCJtYXgtaGVpZ2h0IiwibWF4LXdpZHRoIiwib3V0bGluZS13aWR0aCIsIndpZHRoIl0pLGEuYWRkUHJvcGVydGllc0hhbmRsZXIoaSxmLFsiYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1cyIsImJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzIiwiYm9yZGVyLXRvcC1sZWZ0LXJhZGl1cyIsImJvcmRlci10b3AtcmlnaHQtcmFkaXVzIiwiYm90dG9tIiwibGVmdCIsImxldHRlci1zcGFjaW5nIiwibWFyZ2luLWJvdHRvbSIsIm1hcmdpbi1sZWZ0IiwibWFyZ2luLXJpZ2h0IiwibWFyZ2luLXRvcCIsIm1pbi1oZWlnaHQiLCJtaW4td2lkdGgiLCJvdXRsaW5lLW9mZnNldCIsInBhZGRpbmctYm90dG9tIiwicGFkZGluZy1sZWZ0IiwicGFkZGluZy1yaWdodCIsInBhZGRpbmctdG9wIiwicGVyc3BlY3RpdmUiLCJyaWdodCIsInNoYXBlLW1hcmdpbiIsInN0cm9rZS1kYXNob2Zmc2V0IiwidGV4dC1pbmRlbnQiLCJ0b3AiLCJ2ZXJ0aWNhbC1hbGlnbiIsIndvcmQtc3BhY2luZyJdKX0oYiksZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGIpe3JldHVybiBhLmNvbnN1bWVMZW5ndGhPclBlcmNlbnQoYil8fGEuY29uc3VtZVRva2VuKC9eYXV0by8sYil9ZnVuY3Rpb24gZChiKXt2YXIgZD1hLmNvbnN1bWVMaXN0KFthLmlnbm9yZShhLmNvbnN1bWVUb2tlbi5iaW5kKG51bGwsL15yZWN0LykpLGEuaWdub3JlKGEuY29uc3VtZVRva2VuLmJpbmQobnVsbCwvXlwoLykpLGEuY29uc3VtZVJlcGVhdGVkLmJpbmQobnVsbCxjLC9eLC8pLGEuaWdub3JlKGEuY29uc3VtZVRva2VuLmJpbmQobnVsbCwvXlwpLykpXSxiKTtpZihkJiY0PT1kWzBdLmxlbmd0aClyZXR1cm4gZFswXX1mdW5jdGlvbiBlKGIsYyl7cmV0dXJuImF1dG8iPT1ifHwiYXV0byI9PWM/WyEwLCExLGZ1bmN0aW9uKGQpe3ZhciBlPWQ/YjpjO2lmKCJhdXRvIj09ZSlyZXR1cm4iYXV0byI7dmFyIGY9YS5tZXJnZURpbWVuc2lvbnMoZSxlKTtyZXR1cm4gZlsyXShmWzBdKX1dOmEubWVyZ2VEaW1lbnNpb25zKGIsYyl9ZnVuY3Rpb24gZihhKXtyZXR1cm4icmVjdCgiK2ErIikifXZhciBnPWEubWVyZ2VXcmFwcGVkTmVzdGVkUmVwZWF0ZWQuYmluZChudWxsLGYsZSwiLCAiKTthLnBhcnNlQm94PWQsYS5tZXJnZUJveGVzPWcsYS5hZGRQcm9wZXJ0aWVzSGFuZGxlcihkLGcsWyJjbGlwIl0pfShiKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe3ZhciBjPTA7cmV0dXJuIGEubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhPT09az9iW2MrK106YX0pfX1mdW5jdGlvbiBkKGEpe3JldHVybiBhfWZ1bmN0aW9uIGUoYil7aWYoIm5vbmUiPT0oYj1iLnRvTG93ZXJDYXNlKCkudHJpbSgpKSlyZXR1cm5bXTtmb3IodmFyIGMsZD0vXHMqKFx3KylcKChbXildKilcKS9nLGU9W10sZj0wO2M9ZC5leGVjKGIpOyl7aWYoYy5pbmRleCE9ZilyZXR1cm47Zj1jLmluZGV4K2NbMF0ubGVuZ3RoO3ZhciBnPWNbMV0saD1uW2ddO2lmKCFoKXJldHVybjt2YXIgaT1jWzJdLnNwbGl0KCIsIiksaj1oWzBdO2lmKGoubGVuZ3RoPGkubGVuZ3RoKXJldHVybjtmb3IodmFyIGs9W10sbz0wO288ai5sZW5ndGg7bysrKXt2YXIgcCxxPWlbb10scj1qW29dO2lmKHZvaWQgMD09PShwPXE/e0E6ZnVuY3Rpb24oYil7cmV0dXJuIjAiPT1iLnRyaW0oKT9tOmEucGFyc2VBbmdsZShiKX0sTjphLnBhcnNlTnVtYmVyLFQ6YS5wYXJzZUxlbmd0aE9yUGVyY2VudCxMOmEucGFyc2VMZW5ndGh9W3IudG9VcHBlckNhc2UoKV0ocSk6e2E6bSxuOmtbMF0sdDpsfVtyXSkpcmV0dXJuO2sucHVzaChwKX1pZihlLnB1c2goe3Q6ZyxkOmt9KSxkLmxhc3RJbmRleD09Yi5sZW5ndGgpcmV0dXJuIGV9fWZ1bmN0aW9uIGYoYSl7cmV0dXJuIGEudG9GaXhlZCg2KS5yZXBsYWNlKCIuMDAwMDAwIiwiIil9ZnVuY3Rpb24gZyhiLGMpe2lmKGIuZGVjb21wb3NpdGlvblBhaXIhPT1jKXtiLmRlY29tcG9zaXRpb25QYWlyPWM7dmFyIGQ9YS5tYWtlTWF0cml4RGVjb21wb3NpdGlvbihiKX1pZihjLmRlY29tcG9zaXRpb25QYWlyIT09Yil7Yy5kZWNvbXBvc2l0aW9uUGFpcj1iO3ZhciBlPWEubWFrZU1hdHJpeERlY29tcG9zaXRpb24oYyl9cmV0dXJuIG51bGw9PWRbMF18fG51bGw9PWVbMF0/W1shMV0sWyEwXSxmdW5jdGlvbihhKXtyZXR1cm4gYT9jWzBdLmQ6YlswXS5kfV06KGRbMF0ucHVzaCgwKSxlWzBdLnB1c2goMSksW2QsZSxmdW5jdGlvbihiKXt2YXIgYz1hLnF1YXQoZFswXVszXSxlWzBdWzNdLGJbNV0pO3JldHVybiBhLmNvbXBvc2VNYXRyaXgoYlswXSxiWzFdLGJbMl0sYyxiWzRdKS5tYXAoZikuam9pbigiLCIpfV0pfWZ1bmN0aW9uIGgoYSl7cmV0dXJuIGEucmVwbGFjZSgvW3h5XS8sIiIpfWZ1bmN0aW9uIGkoYSl7cmV0dXJuIGEucmVwbGFjZSgvKHh8eXx6fDNkKT8kLywiM2QiKX1mdW5jdGlvbiBqKGIsYyl7dmFyIGQ9YS5tYWtlTWF0cml4RGVjb21wb3NpdGlvbiYmITAsZT0hMTtpZighYi5sZW5ndGh8fCFjLmxlbmd0aCl7Yi5sZW5ndGh8fChlPSEwLGI9YyxjPVtdKTtmb3IodmFyIGY9MDtmPGIubGVuZ3RoO2YrKyl7dmFyIGo9YltmXS50LGs9YltmXS5kLGw9InNjYWxlIj09ai5zdWJzdHIoMCw1KT8xOjA7Yy5wdXNoKHt0OmosZDprLm1hcChmdW5jdGlvbihhKXtpZigibnVtYmVyIj09dHlwZW9mIGEpcmV0dXJuIGw7dmFyIGI9e307Zm9yKHZhciBjIGluIGEpYltjXT1sO3JldHVybiBifSl9KX19dmFyIG09ZnVuY3Rpb24oYSxiKXtyZXR1cm4icGVyc3BlY3RpdmUiPT1hJiYicGVyc3BlY3RpdmUiPT1ifHwoIm1hdHJpeCI9PWF8fCJtYXRyaXgzZCI9PWEpJiYoIm1hdHJpeCI9PWJ8fCJtYXRyaXgzZCI9PWIpfSxvPVtdLHA9W10scT1bXTtpZihiLmxlbmd0aCE9Yy5sZW5ndGgpe2lmKCFkKXJldHVybjt2YXIgcj1nKGIsYyk7bz1bclswXV0scD1bclsxXV0scT1bWyJtYXRyaXgiLFtyWzJdXV1dfWVsc2UgZm9yKHZhciBmPTA7ZjxiLmxlbmd0aDtmKyspe3ZhciBqLHM9YltmXS50LHQ9Y1tmXS50LHU9YltmXS5kLHY9Y1tmXS5kLHc9bltzXSx4PW5bdF07aWYobShzLHQpKXtpZighZClyZXR1cm47dmFyIHI9ZyhbYltmXV0sW2NbZl1dKTtvLnB1c2goclswXSkscC5wdXNoKHJbMV0pLHEucHVzaChbIm1hdHJpeCIsW3JbMl1dXSl9ZWxzZXtpZihzPT10KWo9cztlbHNlIGlmKHdbMl0mJnhbMl0mJmgocyk9PWgodCkpaj1oKHMpLHU9d1syXSh1KSx2PXhbMl0odik7ZWxzZXtpZighd1sxXXx8IXhbMV18fGkocykhPWkodCkpe2lmKCFkKXJldHVybjt2YXIgcj1nKGIsYyk7bz1bclswXV0scD1bclsxXV0scT1bWyJtYXRyaXgiLFtyWzJdXV1dO2JyZWFrfWo9aShzKSx1PXdbMV0odSksdj14WzFdKHYpfWZvcih2YXIgeT1bXSx6PVtdLEE9W10sQj0wO0I8dS5sZW5ndGg7QisrKXt2YXIgQz0ibnVtYmVyIj09dHlwZW9mIHVbQl0/YS5tZXJnZU51bWJlcnM6YS5tZXJnZURpbWVuc2lvbnMscj1DKHVbQl0sdltCXSk7eVtCXT1yWzBdLHpbQl09clsxXSxBLnB1c2goclsyXSl9by5wdXNoKHkpLHAucHVzaCh6KSxxLnB1c2goW2osQV0pfX1pZihlKXt2YXIgRD1vO289cCxwPUR9cmV0dXJuW28scCxmdW5jdGlvbihhKXtyZXR1cm4gYS5tYXAoZnVuY3Rpb24oYSxiKXt2YXIgYz1hLm1hcChmdW5jdGlvbihhLGMpe3JldHVybiBxW2JdWzFdW2NdKGEpfSkuam9pbigiLCIpO3JldHVybiJtYXRyaXgiPT1xW2JdWzBdJiYxNj09Yy5zcGxpdCgiLCIpLmxlbmd0aCYmKHFbYl1bMF09Im1hdHJpeDNkIikscVtiXVswXSsiKCIrYysiKSJ9KS5qb2luKCIgIil9XX12YXIgaz1udWxsLGw9e3B4OjB9LG09e2RlZzowfSxuPXttYXRyaXg6WyJOTk5OTk4iLFtrLGssMCwwLGssaywwLDAsMCwwLDEsMCxrLGssMCwxXSxkXSxtYXRyaXgzZDpbIk5OTk5OTk5OTk5OTk5OTk4iLGRdLHJvdGF0ZTpbIkEiXSxyb3RhdGV4OlsiQSJdLHJvdGF0ZXk6WyJBIl0scm90YXRlejpbIkEiXSxyb3RhdGUzZDpbIk5OTkEiXSxwZXJzcGVjdGl2ZTpbIkwiXSxzY2FsZTpbIk5uIixjKFtrLGssMV0pLGRdLHNjYWxleDpbIk4iLGMoW2ssMSwxXSksYyhbaywxXSldLHNjYWxleTpbIk4iLGMoWzEsaywxXSksYyhbMSxrXSldLHNjYWxlejpbIk4iLGMoWzEsMSxrXSldLHNjYWxlM2Q6WyJOTk4iLGRdLHNrZXc6WyJBYSIsbnVsbCxkXSxza2V3eDpbIkEiLG51bGwsYyhbayxtXSldLHNrZXd5OlsiQSIsbnVsbCxjKFttLGtdKV0sdHJhbnNsYXRlOlsiVHQiLGMoW2ssayxsXSksZF0sdHJhbnNsYXRleDpbIlQiLGMoW2ssbCxsXSksYyhbayxsXSldLHRyYW5zbGF0ZXk6WyJUIixjKFtsLGssbF0pLGMoW2wsa10pXSx0cmFuc2xhdGV6OlsiTCIsYyhbbCxsLGtdKV0sdHJhbnNsYXRlM2Q6WyJUVEwiLGRdfTthLmFkZFByb3BlcnRpZXNIYW5kbGVyKGUsaixbInRyYW5zZm9ybSJdKSxhLnRyYW5zZm9ybVRvU3ZnTWF0cml4PWZ1bmN0aW9uKGIpe3ZhciBjPWEudHJhbnNmb3JtTGlzdFRvTWF0cml4KGUoYikpO3JldHVybiJtYXRyaXgoIitmKGNbMF0pKyIgIitmKGNbMV0pKyIgIitmKGNbNF0pKyIgIitmKGNbNV0pKyIgIitmKGNbMTJdKSsiICIrZihjWzEzXSkrIikifX0oYiksZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEsYil7Yi5jb25jYXQoW2FdKS5mb3JFYWNoKGZ1bmN0aW9uKGIpe2IgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlJiYoZFthXT1iKSxlW2JdPWF9KX12YXIgZD17fSxlPXt9O2MoInRyYW5zZm9ybSIsWyJ3ZWJraXRUcmFuc2Zvcm0iLCJtc1RyYW5zZm9ybSJdKSxjKCJ0cmFuc2Zvcm1PcmlnaW4iLFsid2Via2l0VHJhbnNmb3JtT3JpZ2luIl0pLGMoInBlcnNwZWN0aXZlIixbIndlYmtpdFBlcnNwZWN0aXZlIl0pLGMoInBlcnNwZWN0aXZlT3JpZ2luIixbIndlYmtpdFBlcnNwZWN0aXZlT3JpZ2luIl0pLGEucHJvcGVydHlOYW1lPWZ1bmN0aW9uKGEpe3JldHVybiBkW2FdfHxhfSxhLnVucHJlZml4ZWRQcm9wZXJ0eU5hbWU9ZnVuY3Rpb24oYSl7cmV0dXJuIGVbYV18fGF9fShiKX0oKSxmdW5jdGlvbigpe2lmKHZvaWQgMD09PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLmFuaW1hdGUoW10pLm9uY2FuY2VsKXt2YXIgYTtpZih3aW5kb3cucGVyZm9ybWFuY2UmJnBlcmZvcm1hbmNlLm5vdyl2YXIgYT1mdW5jdGlvbigpe3JldHVybiBwZXJmb3JtYW5jZS5ub3coKX07ZWxzZSB2YXIgYT1mdW5jdGlvbigpe3JldHVybiBEYXRlLm5vdygpfTt2YXIgYj1mdW5jdGlvbihhLGIsYyl7dGhpcy50YXJnZXQ9YSx0aGlzLmN1cnJlbnRUaW1lPWIsdGhpcy50aW1lbGluZVRpbWU9Yyx0aGlzLnR5cGU9ImNhbmNlbCIsdGhpcy5idWJibGVzPSExLHRoaXMuY2FuY2VsYWJsZT0hMSx0aGlzLmN1cnJlbnRUYXJnZXQ9YSx0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITEsdGhpcy5ldmVudFBoYXNlPUV2ZW50LkFUX1RBUkdFVCx0aGlzLnRpbWVTdGFtcD1EYXRlLm5vdygpfSxjPXdpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5hbmltYXRlO3dpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKGQsZSl7dmFyIGY9Yy5jYWxsKHRoaXMsZCxlKTtmLl9jYW5jZWxIYW5kbGVycz1bXSxmLm9uY2FuY2VsPW51bGw7dmFyIGc9Zi5jYW5jZWw7Zi5jYW5jZWw9ZnVuY3Rpb24oKXtnLmNhbGwodGhpcyk7dmFyIGM9bmV3IGIodGhpcyxudWxsLGEoKSksZD10aGlzLl9jYW5jZWxIYW5kbGVycy5jb25jYXQodGhpcy5vbmNhbmNlbD9bdGhpcy5vbmNhbmNlbF06W10pO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtkLmZvckVhY2goZnVuY3Rpb24oYSl7YS5jYWxsKGMudGFyZ2V0LGMpfSl9LDApfTt2YXIgaD1mLmFkZEV2ZW50TGlzdGVuZXI7Zi5hZGRFdmVudExpc3RlbmVyPWZ1bmN0aW9uKGEsYil7ImZ1bmN0aW9uIj09dHlwZW9mIGImJiJjYW5jZWwiPT1hP3RoaXMuX2NhbmNlbEhhbmRsZXJzLnB1c2goYik6aC5jYWxsKHRoaXMsYSxiKX07dmFyIGk9Zi5yZW1vdmVFdmVudExpc3RlbmVyO3JldHVybiBmLnJlbW92ZUV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24oYSxiKXtpZigiY2FuY2VsIj09YSl7dmFyIGM9dGhpcy5fY2FuY2VsSGFuZGxlcnMuaW5kZXhPZihiKTtjPj0wJiZ0aGlzLl9jYW5jZWxIYW5kbGVycy5zcGxpY2UoYywxKX1lbHNlIGkuY2FsbCh0aGlzLGEsYil9LGZ9fX0oKSxmdW5jdGlvbihhKXt2YXIgYj1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsYz1udWxsLGQ9ITE7dHJ5e3ZhciBlPWdldENvbXB1dGVkU3R5bGUoYikuZ2V0UHJvcGVydHlWYWx1ZSgib3BhY2l0eSIpLGY9IjAiPT1lPyIxIjoiMCI7Yz1iLmFuaW1hdGUoe29wYWNpdHk6W2YsZl19LHtkdXJhdGlvbjoxfSksYy5jdXJyZW50VGltZT0wLGQ9Z2V0Q29tcHV0ZWRTdHlsZShiKS5nZXRQcm9wZXJ0eVZhbHVlKCJvcGFjaXR5Iik9PWZ9Y2F0Y2goYSl7fWZpbmFsbHl7YyYmYy5jYW5jZWwoKX1pZighZCl7dmFyIGc9d2luZG93LkVsZW1lbnQucHJvdG90eXBlLmFuaW1hdGU7d2luZG93LkVsZW1lbnQucHJvdG90eXBlLmFuaW1hdGU9ZnVuY3Rpb24oYixjKXtyZXR1cm4gd2luZG93LlN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yJiZBcnJheS5wcm90b3R5cGUuZnJvbSYmYltTeW1ib2wuaXRlcmF0b3JdJiYoYj1BcnJheS5mcm9tKGIpKSxBcnJheS5pc0FycmF5KGIpfHxudWxsPT09Ynx8KGI9YS5jb252ZXJ0VG9BcnJheUZvcm0oYikpLGcuY2FsbCh0aGlzLGIsYyl9fX0oYSksZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYSl7dmFyIGM9Yi50aW1lbGluZTtjLmN1cnJlbnRUaW1lPWEsYy5fZGlzY2FyZEFuaW1hdGlvbnMoKSwwPT1jLl9hbmltYXRpb25zLmxlbmd0aD9mPSExOnJlcXVlc3RBbmltYXRpb25GcmFtZShkKX12YXIgZT13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lO3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU9ZnVuY3Rpb24oYSl7cmV0dXJuIGUoZnVuY3Rpb24oYyl7Yi50aW1lbGluZS5fdXBkYXRlQW5pbWF0aW9uc1Byb21pc2VzKCksYShjKSxiLnRpbWVsaW5lLl91cGRhdGVBbmltYXRpb25zUHJvbWlzZXMoKX0pfSxiLkFuaW1hdGlvblRpbWVsaW5lPWZ1bmN0aW9uKCl7dGhpcy5fYW5pbWF0aW9ucz1bXSx0aGlzLmN1cnJlbnRUaW1lPXZvaWQgMH0sYi5BbmltYXRpb25UaW1lbGluZS5wcm90b3R5cGU9e2dldEFuaW1hdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGlzY2FyZEFuaW1hdGlvbnMoKSx0aGlzLl9hbmltYXRpb25zLnNsaWNlKCl9LF91cGRhdGVBbmltYXRpb25zUHJvbWlzZXM6ZnVuY3Rpb24oKXtiLmFuaW1hdGlvbnNXaXRoUHJvbWlzZXM9Yi5hbmltYXRpb25zV2l0aFByb21pc2VzLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4gYS5fdXBkYXRlUHJvbWlzZXMoKX0pfSxfZGlzY2FyZEFuaW1hdGlvbnM6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVBbmltYXRpb25zUHJvbWlzZXMoKSx0aGlzLl9hbmltYXRpb25zPXRoaXMuX2FuaW1hdGlvbnMuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiJmaW5pc2hlZCIhPWEucGxheVN0YXRlJiYiaWRsZSIhPWEucGxheVN0YXRlfSl9LF9wbGF5OmZ1bmN0aW9uKGEpe3ZhciBjPW5ldyBiLkFuaW1hdGlvbihhLHRoaXMpO3JldHVybiB0aGlzLl9hbmltYXRpb25zLnB1c2goYyksYi5yZXN0YXJ0V2ViQW5pbWF0aW9uc05leHRUaWNrKCksYy5fdXBkYXRlUHJvbWlzZXMoKSxjLl9hbmltYXRpb24ucGxheSgpLGMuX3VwZGF0ZVByb21pc2VzKCksY30scGxheTpmdW5jdGlvbihhKXtyZXR1cm4gYSYmYS5yZW1vdmUoKSx0aGlzLl9wbGF5KGEpfX07dmFyIGY9ITE7Yi5yZXN0YXJ0V2ViQW5pbWF0aW9uc05leHRUaWNrPWZ1bmN0aW9uKCl7Znx8KGY9ITAscmVxdWVzdEFuaW1hdGlvbkZyYW1lKGQpKX07dmFyIGc9bmV3IGIuQW5pbWF0aW9uVGltZWxpbmU7Yi50aW1lbGluZT1nO3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LmRvY3VtZW50LCJ0aW1lbGluZSIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZ319KX1jYXRjaChhKXt9dHJ5e3dpbmRvdy5kb2N1bWVudC50aW1lbGluZT1nfWNhdGNoKGEpe319KDAsYyksZnVuY3Rpb24oYSxiLGMpe2IuYW5pbWF0aW9uc1dpdGhQcm9taXNlcz1bXSxiLkFuaW1hdGlvbj1mdW5jdGlvbihiLGMpe2lmKHRoaXMuaWQ9IiIsYiYmYi5faWQmJih0aGlzLmlkPWIuX2lkKSx0aGlzLmVmZmVjdD1iLGImJihiLl9hbmltYXRpb249dGhpcyksIWMpdGhyb3cgbmV3IEVycm9yKCJBbmltYXRpb24gd2l0aCBudWxsIHRpbWVsaW5lIGlzIG5vdCBzdXBwb3J0ZWQiKTt0aGlzLl90aW1lbGluZT1jLHRoaXMuX3NlcXVlbmNlTnVtYmVyPWEuc2VxdWVuY2VOdW1iZXIrKyx0aGlzLl9ob2xkVGltZT0wLHRoaXMuX3BhdXNlZD0hMSx0aGlzLl9pc0dyb3VwPSExLHRoaXMuX2FuaW1hdGlvbj1udWxsLHRoaXMuX2NoaWxkQW5pbWF0aW9ucz1bXSx0aGlzLl9jYWxsYmFjaz1udWxsLHRoaXMuX29sZFBsYXlTdGF0ZT0iaWRsZSIsdGhpcy5fcmVidWlsZFVuZGVybHlpbmdBbmltYXRpb24oKSx0aGlzLl9hbmltYXRpb24uY2FuY2VsKCksdGhpcy5fdXBkYXRlUHJvbWlzZXMoKX0sYi5BbmltYXRpb24ucHJvdG90eXBlPXtfdXBkYXRlUHJvbWlzZXM6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9vbGRQbGF5U3RhdGUsYj10aGlzLnBsYXlTdGF0ZTtyZXR1cm4gdGhpcy5fcmVhZHlQcm9taXNlJiZiIT09YSYmKCJpZGxlIj09Yj8odGhpcy5fcmVqZWN0UmVhZHlQcm9taXNlKCksdGhpcy5fcmVhZHlQcm9taXNlPXZvaWQgMCk6InBlbmRpbmciPT1hP3RoaXMuX3Jlc29sdmVSZWFkeVByb21pc2UoKToicGVuZGluZyI9PWImJih0aGlzLl9yZWFkeVByb21pc2U9dm9pZCAwKSksdGhpcy5fZmluaXNoZWRQcm9taXNlJiZiIT09YSYmKCJpZGxlIj09Yj8odGhpcy5fcmVqZWN0RmluaXNoZWRQcm9taXNlKCksdGhpcy5fZmluaXNoZWRQcm9taXNlPXZvaWQgMCk6ImZpbmlzaGVkIj09Yj90aGlzLl9yZXNvbHZlRmluaXNoZWRQcm9taXNlKCk6ImZpbmlzaGVkIj09YSYmKHRoaXMuX2ZpbmlzaGVkUHJvbWlzZT12b2lkIDApKSx0aGlzLl9vbGRQbGF5U3RhdGU9dGhpcy5wbGF5U3RhdGUsdGhpcy5fcmVhZHlQcm9taXNlfHx0aGlzLl9maW5pc2hlZFByb21pc2V9LF9yZWJ1aWxkVW5kZXJseWluZ0FuaW1hdGlvbjpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCk7dmFyIGEsYyxkLGUsZj0hIXRoaXMuX2FuaW1hdGlvbjtmJiYoYT10aGlzLnBsYXliYWNrUmF0ZSxjPXRoaXMuX3BhdXNlZCxkPXRoaXMuc3RhcnRUaW1lLGU9dGhpcy5jdXJyZW50VGltZSx0aGlzLl9hbmltYXRpb24uY2FuY2VsKCksdGhpcy5fYW5pbWF0aW9uLl93cmFwcGVyPW51bGwsdGhpcy5fYW5pbWF0aW9uPW51bGwpLCghdGhpcy5lZmZlY3R8fHRoaXMuZWZmZWN0IGluc3RhbmNlb2Ygd2luZG93LktleWZyYW1lRWZmZWN0KSYmKHRoaXMuX2FuaW1hdGlvbj1iLm5ld1VuZGVybHlpbmdBbmltYXRpb25Gb3JLZXlmcmFtZUVmZmVjdCh0aGlzLmVmZmVjdCksYi5iaW5kQW5pbWF0aW9uRm9yS2V5ZnJhbWVFZmZlY3QodGhpcykpLCh0aGlzLmVmZmVjdCBpbnN0YW5jZW9mIHdpbmRvdy5TZXF1ZW5jZUVmZmVjdHx8dGhpcy5lZmZlY3QgaW5zdGFuY2VvZiB3aW5kb3cuR3JvdXBFZmZlY3QpJiYodGhpcy5fYW5pbWF0aW9uPWIubmV3VW5kZXJseWluZ0FuaW1hdGlvbkZvckdyb3VwKHRoaXMuZWZmZWN0KSxiLmJpbmRBbmltYXRpb25Gb3JHcm91cCh0aGlzKSksdGhpcy5lZmZlY3QmJnRoaXMuZWZmZWN0Ll9vbnNhbXBsZSYmYi5iaW5kQW5pbWF0aW9uRm9yQ3VzdG9tRWZmZWN0KHRoaXMpLGYmJigxIT1hJiYodGhpcy5wbGF5YmFja1JhdGU9YSksbnVsbCE9PWQ/dGhpcy5zdGFydFRpbWU9ZDpudWxsIT09ZT90aGlzLmN1cnJlbnRUaW1lPWU6bnVsbCE9PXRoaXMuX2hvbGRUaW1lJiYodGhpcy5jdXJyZW50VGltZT10aGlzLl9ob2xkVGltZSksYyYmdGhpcy5wYXVzZSgpKSx0aGlzLl91cGRhdGVQcm9taXNlcygpfSxfdXBkYXRlQ2hpbGRyZW46ZnVuY3Rpb24oKXtpZih0aGlzLmVmZmVjdCYmImlkbGUiIT10aGlzLnBsYXlTdGF0ZSl7dmFyIGE9dGhpcy5lZmZlY3QuX3RpbWluZy5kZWxheTt0aGlzLl9jaGlsZEFuaW1hdGlvbnMuZm9yRWFjaChmdW5jdGlvbihjKXt0aGlzLl9hcnJhbmdlQ2hpbGRyZW4oYyxhKSx0aGlzLmVmZmVjdCBpbnN0YW5jZW9mIHdpbmRvdy5TZXF1ZW5jZUVmZmVjdCYmKGErPWIuZ3JvdXBDaGlsZER1cmF0aW9uKGMuZWZmZWN0KSl9LmJpbmQodGhpcykpfX0sX3NldEV4dGVybmFsQW5pbWF0aW9uOmZ1bmN0aW9uKGEpe2lmKHRoaXMuZWZmZWN0JiZ0aGlzLl9pc0dyb3VwKWZvcih2YXIgYj0wO2I8dGhpcy5lZmZlY3QuY2hpbGRyZW4ubGVuZ3RoO2IrKyl0aGlzLmVmZmVjdC5jaGlsZHJlbltiXS5fYW5pbWF0aW9uPWEsdGhpcy5fY2hpbGRBbmltYXRpb25zW2JdLl9zZXRFeHRlcm5hbEFuaW1hdGlvbihhKX0sX2NvbnN0cnVjdENoaWxkQW5pbWF0aW9uczpmdW5jdGlvbigpe2lmKHRoaXMuZWZmZWN0JiZ0aGlzLl9pc0dyb3VwKXt2YXIgYT10aGlzLmVmZmVjdC5fdGltaW5nLmRlbGF5O3RoaXMuX3JlbW92ZUNoaWxkQW5pbWF0aW9ucygpLHRoaXMuZWZmZWN0LmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oYyl7dmFyIGQ9Yi50aW1lbGluZS5fcGxheShjKTt0aGlzLl9jaGlsZEFuaW1hdGlvbnMucHVzaChkKSxkLnBsYXliYWNrUmF0ZT10aGlzLnBsYXliYWNrUmF0ZSx0aGlzLl9wYXVzZWQmJmQucGF1c2UoKSxjLl9hbmltYXRpb249dGhpcy5lZmZlY3QuX2FuaW1hdGlvbix0aGlzLl9hcnJhbmdlQ2hpbGRyZW4oZCxhKSx0aGlzLmVmZmVjdCBpbnN0YW5jZW9mIHdpbmRvdy5TZXF1ZW5jZUVmZmVjdCYmKGErPWIuZ3JvdXBDaGlsZER1cmF0aW9uKGMpKX0uYmluZCh0aGlzKSl9fSxfYXJyYW5nZUNoaWxkcmVuOmZ1bmN0aW9uKGEsYil7bnVsbD09PXRoaXMuc3RhcnRUaW1lP2EuY3VycmVudFRpbWU9dGhpcy5jdXJyZW50VGltZS1iL3RoaXMucGxheWJhY2tSYXRlOmEuc3RhcnRUaW1lIT09dGhpcy5zdGFydFRpbWUrYi90aGlzLnBsYXliYWNrUmF0ZSYmKGEuc3RhcnRUaW1lPXRoaXMuc3RhcnRUaW1lK2IvdGhpcy5wbGF5YmFja1JhdGUpfSxnZXQgdGltZWxpbmUoKXtyZXR1cm4gdGhpcy5fdGltZWxpbmV9LGdldCBwbGF5U3RhdGUoKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9uP3RoaXMuX2FuaW1hdGlvbi5wbGF5U3RhdGU6ImlkbGUifSxnZXQgZmluaXNoZWQoKXtyZXR1cm4gd2luZG93LlByb21pc2U/KHRoaXMuX2ZpbmlzaGVkUHJvbWlzZXx8KC0xPT1iLmFuaW1hdGlvbnNXaXRoUHJvbWlzZXMuaW5kZXhPZih0aGlzKSYmYi5hbmltYXRpb25zV2l0aFByb21pc2VzLnB1c2godGhpcyksdGhpcy5fZmluaXNoZWRQcm9taXNlPW5ldyBQcm9taXNlKGZ1bmN0aW9uKGEsYil7dGhpcy5fcmVzb2x2ZUZpbmlzaGVkUHJvbWlzZT1mdW5jdGlvbigpe2EodGhpcyl9LHRoaXMuX3JlamVjdEZpbmlzaGVkUHJvbWlzZT1mdW5jdGlvbigpe2Ioe3R5cGU6RE9NRXhjZXB0aW9uLkFCT1JUX0VSUixuYW1lOiJBYm9ydEVycm9yIn0pfX0uYmluZCh0aGlzKSksImZpbmlzaGVkIj09dGhpcy5wbGF5U3RhdGUmJnRoaXMuX3Jlc29sdmVGaW5pc2hlZFByb21pc2UoKSksdGhpcy5fZmluaXNoZWRQcm9taXNlKTooY29uc29sZS53YXJuKCJBbmltYXRpb24gUHJvbWlzZXMgcmVxdWlyZSBKYXZhU2NyaXB0IFByb21pc2UgY29uc3RydWN0b3IiKSxudWxsKX0sZ2V0IHJlYWR5KCl7cmV0dXJuIHdpbmRvdy5Qcm9taXNlPyh0aGlzLl9yZWFkeVByb21pc2V8fCgtMT09Yi5hbmltYXRpb25zV2l0aFByb21pc2VzLmluZGV4T2YodGhpcykmJmIuYW5pbWF0aW9uc1dpdGhQcm9taXNlcy5wdXNoKHRoaXMpLHRoaXMuX3JlYWR5UHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbihhLGIpe3RoaXMuX3Jlc29sdmVSZWFkeVByb21pc2U9ZnVuY3Rpb24oKXthKHRoaXMpfSx0aGlzLl9yZWplY3RSZWFkeVByb21pc2U9ZnVuY3Rpb24oKXtiKHt0eXBlOkRPTUV4Y2VwdGlvbi5BQk9SVF9FUlIsbmFtZToiQWJvcnRFcnJvciJ9KX19LmJpbmQodGhpcykpLCJwZW5kaW5nIiE9PXRoaXMucGxheVN0YXRlJiZ0aGlzLl9yZXNvbHZlUmVhZHlQcm9taXNlKCkpLHRoaXMuX3JlYWR5UHJvbWlzZSk6KGNvbnNvbGUud2FybigiQW5pbWF0aW9uIFByb21pc2VzIHJlcXVpcmUgSmF2YVNjcmlwdCBQcm9taXNlIGNvbnN0cnVjdG9yIiksbnVsbCl9LGdldCBvbmZpbmlzaCgpe3JldHVybiB0aGlzLl9hbmltYXRpb24ub25maW5pc2h9LHNldCBvbmZpbmlzaChhKXt0aGlzLl9hbmltYXRpb24ub25maW5pc2g9ImZ1bmN0aW9uIj09dHlwZW9mIGE/ZnVuY3Rpb24oYil7Yi50YXJnZXQ9dGhpcyxhLmNhbGwodGhpcyxiKX0uYmluZCh0aGlzKTphfSxnZXQgb25jYW5jZWwoKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9uLm9uY2FuY2VsfSxzZXQgb25jYW5jZWwoYSl7dGhpcy5fYW5pbWF0aW9uLm9uY2FuY2VsPSJmdW5jdGlvbiI9PXR5cGVvZiBhP2Z1bmN0aW9uKGIpe2IudGFyZ2V0PXRoaXMsYS5jYWxsKHRoaXMsYil9LmJpbmQodGhpcyk6YX0sZ2V0IGN1cnJlbnRUaW1lKCl7dGhpcy5fdXBkYXRlUHJvbWlzZXMoKTt2YXIgYT10aGlzLl9hbmltYXRpb24uY3VycmVudFRpbWU7cmV0dXJuIHRoaXMuX3VwZGF0ZVByb21pc2VzKCksYX0sc2V0IGN1cnJlbnRUaW1lKGEpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCksdGhpcy5fYW5pbWF0aW9uLmN1cnJlbnRUaW1lPWlzRmluaXRlKGEpP2E6TWF0aC5zaWduKGEpKk51bWJlci5NQVhfVkFMVUUsdGhpcy5fcmVnaXN0ZXIoKSx0aGlzLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24oYixjKXtiLmN1cnJlbnRUaW1lPWEtY30pLHRoaXMuX3VwZGF0ZVByb21pc2VzKCl9LGdldCBzdGFydFRpbWUoKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9uLnN0YXJ0VGltZX0sc2V0IHN0YXJ0VGltZShhKXt0aGlzLl91cGRhdGVQcm9taXNlcygpLHRoaXMuX2FuaW1hdGlvbi5zdGFydFRpbWU9aXNGaW5pdGUoYSk/YTpNYXRoLnNpZ24oYSkqTnVtYmVyLk1BWF9WQUxVRSx0aGlzLl9yZWdpc3RlcigpLHRoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihiLGMpe2Iuc3RhcnRUaW1lPWErY30pLHRoaXMuX3VwZGF0ZVByb21pc2VzKCl9LGdldCBwbGF5YmFja1JhdGUoKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9uLnBsYXliYWNrUmF0ZX0sc2V0IHBsYXliYWNrUmF0ZShhKXt0aGlzLl91cGRhdGVQcm9taXNlcygpO3ZhciBiPXRoaXMuY3VycmVudFRpbWU7dGhpcy5fYW5pbWF0aW9uLnBsYXliYWNrUmF0ZT1hLHRoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihiKXtiLnBsYXliYWNrUmF0ZT1hfSksbnVsbCE9PWImJih0aGlzLmN1cnJlbnRUaW1lPWIpLHRoaXMuX3VwZGF0ZVByb21pc2VzKCl9LHBsYXk6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVQcm9taXNlcygpLHRoaXMuX3BhdXNlZD0hMSx0aGlzLl9hbmltYXRpb24ucGxheSgpLC0xPT10aGlzLl90aW1lbGluZS5fYW5pbWF0aW9ucy5pbmRleE9mKHRoaXMpJiZ0aGlzLl90aW1lbGluZS5fYW5pbWF0aW9ucy5wdXNoKHRoaXMpLHRoaXMuX3JlZ2lzdGVyKCksYi5hd2FpdFN0YXJ0VGltZSh0aGlzKSx0aGlzLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24oYSl7dmFyIGI9YS5jdXJyZW50VGltZTthLnBsYXkoKSxhLmN1cnJlbnRUaW1lPWJ9KSx0aGlzLl91cGRhdGVQcm9taXNlcygpfSxwYXVzZTpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCksdGhpcy5jdXJyZW50VGltZSYmKHRoaXMuX2hvbGRUaW1lPXRoaXMuY3VycmVudFRpbWUpLHRoaXMuX2FuaW1hdGlvbi5wYXVzZSgpLHRoaXMuX3JlZ2lzdGVyKCksdGhpcy5fZm9yRWFjaENoaWxkKGZ1bmN0aW9uKGEpe2EucGF1c2UoKX0pLHRoaXMuX3BhdXNlZD0hMCx0aGlzLl91cGRhdGVQcm9taXNlcygpfSxmaW5pc2g6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVQcm9taXNlcygpLHRoaXMuX2FuaW1hdGlvbi5maW5pc2goKSx0aGlzLl9yZWdpc3RlcigpLHRoaXMuX3VwZGF0ZVByb21pc2VzKCl9LGNhbmNlbDpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCksdGhpcy5fYW5pbWF0aW9uLmNhbmNlbCgpLHRoaXMuX3JlZ2lzdGVyKCksdGhpcy5fcmVtb3ZlQ2hpbGRBbmltYXRpb25zKCksdGhpcy5fdXBkYXRlUHJvbWlzZXMoKX0scmV2ZXJzZTpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCk7dmFyIGE9dGhpcy5jdXJyZW50VGltZTt0aGlzLl9hbmltYXRpb24ucmV2ZXJzZSgpLHRoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihhKXthLnJldmVyc2UoKX0pLG51bGwhPT1hJiYodGhpcy5jdXJyZW50VGltZT1hKSx0aGlzLl91cGRhdGVQcm9taXNlcygpfSxhZGRFdmVudExpc3RlbmVyOmZ1bmN0aW9uKGEsYil7dmFyIGM9YjsiZnVuY3Rpb24iPT10eXBlb2YgYiYmKGM9ZnVuY3Rpb24oYSl7YS50YXJnZXQ9dGhpcyxiLmNhbGwodGhpcyxhKX0uYmluZCh0aGlzKSxiLl93cmFwcGVyPWMpLHRoaXMuX2FuaW1hdGlvbi5hZGRFdmVudExpc3RlbmVyKGEsYyl9LHJlbW92ZUV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxiKXt0aGlzLl9hbmltYXRpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGImJmIuX3dyYXBwZXJ8fGIpfSxfcmVtb3ZlQ2hpbGRBbmltYXRpb25zOmZ1bmN0aW9uKCl7Zm9yKDt0aGlzLl9jaGlsZEFuaW1hdGlvbnMubGVuZ3RoOyl0aGlzLl9jaGlsZEFuaW1hdGlvbnMucG9wKCkuY2FuY2VsKCl9LF9mb3JFYWNoQ2hpbGQ6ZnVuY3Rpb24oYil7dmFyIGM9MDtpZih0aGlzLmVmZmVjdC5jaGlsZHJlbiYmdGhpcy5fY2hpbGRBbmltYXRpb25zLmxlbmd0aDx0aGlzLmVmZmVjdC5jaGlsZHJlbi5sZW5ndGgmJnRoaXMuX2NvbnN0cnVjdENoaWxkQW5pbWF0aW9ucygpLHRoaXMuX2NoaWxkQW5pbWF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2IuY2FsbCh0aGlzLGEsYyksdGhpcy5lZmZlY3QgaW5zdGFuY2VvZiB3aW5kb3cuU2VxdWVuY2VFZmZlY3QmJihjKz1hLmVmZmVjdC5hY3RpdmVEdXJhdGlvbil9LmJpbmQodGhpcykpLCJwZW5kaW5nIiE9dGhpcy5wbGF5U3RhdGUpe3ZhciBkPXRoaXMuZWZmZWN0Ll90aW1pbmcsZT10aGlzLmN1cnJlbnRUaW1lO251bGwhPT1lJiYoZT1hLmNhbGN1bGF0ZUl0ZXJhdGlvblByb2dyZXNzKGEuY2FsY3VsYXRlQWN0aXZlRHVyYXRpb24oZCksZSxkKSksKG51bGw9PWV8fGlzTmFOKGUpKSYmdGhpcy5fcmVtb3ZlQ2hpbGRBbmltYXRpb25zKCl9fX0sd2luZG93LkFuaW1hdGlvbj1iLkFuaW1hdGlvbn0oYSxjKSxmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZChiKXt0aGlzLl9mcmFtZXM9YS5ub3JtYWxpemVLZXlmcmFtZXMoYil9ZnVuY3Rpb24gZSgpe2Zvcih2YXIgYT0hMTtpLmxlbmd0aDspaS5zaGlmdCgpLl91cGRhdGVDaGlsZHJlbigpLGE9ITA7cmV0dXJuIGF9dmFyIGY9ZnVuY3Rpb24oYSl7aWYoYS5fYW5pbWF0aW9uPXZvaWQgMCxhIGluc3RhbmNlb2Ygd2luZG93LlNlcXVlbmNlRWZmZWN0fHxhIGluc3RhbmNlb2Ygd2luZG93Lkdyb3VwRWZmZWN0KWZvcih2YXIgYj0wO2I8YS5jaGlsZHJlbi5sZW5ndGg7YisrKWYoYS5jaGlsZHJlbltiXSl9O2IucmVtb3ZlTXVsdGk9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9MDtjPGEubGVuZ3RoO2MrKyl7dmFyIGQ9YVtjXTtkLl9wYXJlbnQ/KC0xPT1iLmluZGV4T2YoZC5fcGFyZW50KSYmYi5wdXNoKGQuX3BhcmVudCksZC5fcGFyZW50LmNoaWxkcmVuLnNwbGljZShkLl9wYXJlbnQuY2hpbGRyZW4uaW5kZXhPZihkKSwxKSxkLl9wYXJlbnQ9bnVsbCxmKGQpKTpkLl9hbmltYXRpb24mJmQuX2FuaW1hdGlvbi5lZmZlY3Q9PWQmJihkLl9hbmltYXRpb24uY2FuY2VsKCksZC5fYW5pbWF0aW9uLmVmZmVjdD1uZXcgS2V5ZnJhbWVFZmZlY3QobnVsbCxbXSksZC5fYW5pbWF0aW9uLl9jYWxsYmFjayYmKGQuX2FuaW1hdGlvbi5fY2FsbGJhY2suX2FuaW1hdGlvbj1udWxsKSxkLl9hbmltYXRpb24uX3JlYnVpbGRVbmRlcmx5aW5nQW5pbWF0aW9uKCksZihkKSl9Zm9yKGM9MDtjPGIubGVuZ3RoO2MrKyliW2NdLl9yZWJ1aWxkKCl9LGIuS2V5ZnJhbWVFZmZlY3Q9ZnVuY3Rpb24oYixjLGUsZil7cmV0dXJuIHRoaXMudGFyZ2V0PWIsdGhpcy5fcGFyZW50PW51bGwsZT1hLm51bWVyaWNUaW1pbmdUb09iamVjdChlKSx0aGlzLl90aW1pbmdJbnB1dD1hLmNsb25lVGltaW5nSW5wdXQoZSksdGhpcy5fdGltaW5nPWEubm9ybWFsaXplVGltaW5nSW5wdXQoZSksdGhpcy50aW1pbmc9YS5tYWtlVGltaW5nKGUsITEsdGhpcyksdGhpcy50aW1pbmcuX2VmZmVjdD10aGlzLCJmdW5jdGlvbiI9PXR5cGVvZiBjPyhhLmRlcHJlY2F0ZWQoIkN1c3RvbSBLZXlmcmFtZUVmZmVjdCIsIjIwMTUtMDYtMjIiLCJVc2UgS2V5ZnJhbWVFZmZlY3Qub25zYW1wbGUgaW5zdGVhZC4iKSx0aGlzLl9ub3JtYWxpemVkS2V5ZnJhbWVzPWMpOnRoaXMuX25vcm1hbGl6ZWRLZXlmcmFtZXM9bmV3IGQoYyksdGhpcy5fa2V5ZnJhbWVzPWMsdGhpcy5hY3RpdmVEdXJhdGlvbj1hLmNhbGN1bGF0ZUFjdGl2ZUR1cmF0aW9uKHRoaXMuX3RpbWluZyksdGhpcy5faWQ9Zix0aGlzfSxiLktleWZyYW1lRWZmZWN0LnByb3RvdHlwZT17Z2V0RnJhbWVzOmZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuX25vcm1hbGl6ZWRLZXlmcmFtZXM/dGhpcy5fbm9ybWFsaXplZEtleWZyYW1lczp0aGlzLl9ub3JtYWxpemVkS2V5ZnJhbWVzLl9mcmFtZXN9LHNldCBvbnNhbXBsZShhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5nZXRGcmFtZXMoKSl0aHJvdyBuZXcgRXJyb3IoIlNldHRpbmcgb25zYW1wbGUgb24gY3VzdG9tIGVmZmVjdCBLZXlmcmFtZUVmZmVjdCBpcyBub3Qgc3VwcG9ydGVkLiIpO3RoaXMuX29uc2FtcGxlPWEsdGhpcy5fYW5pbWF0aW9uJiZ0aGlzLl9hbmltYXRpb24uX3JlYnVpbGRVbmRlcmx5aW5nQW5pbWF0aW9uKCl9LGdldCBwYXJlbnQoKXtyZXR1cm4gdGhpcy5fcGFyZW50fSxjbG9uZTpmdW5jdGlvbigpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLmdldEZyYW1lcygpKXRocm93IG5ldyBFcnJvcigiQ2xvbmluZyBjdXN0b20gZWZmZWN0cyBpcyBub3Qgc3VwcG9ydGVkLiIpO3ZhciBiPW5ldyBLZXlmcmFtZUVmZmVjdCh0aGlzLnRhcmdldCxbXSxhLmNsb25lVGltaW5nSW5wdXQodGhpcy5fdGltaW5nSW5wdXQpLHRoaXMuX2lkKTtyZXR1cm4gYi5fbm9ybWFsaXplZEtleWZyYW1lcz10aGlzLl9ub3JtYWxpemVkS2V5ZnJhbWVzLGIuX2tleWZyYW1lcz10aGlzLl9rZXlmcmFtZXMsYn0scmVtb3ZlOmZ1bmN0aW9uKCl7Yi5yZW1vdmVNdWx0aShbdGhpc10pfX07dmFyIGc9RWxlbWVudC5wcm90b3R5cGUuYW5pbWF0ZTtFbGVtZW50LnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKGEsYyl7dmFyIGQ9IiI7cmV0dXJuIGMmJmMuaWQmJihkPWMuaWQpLGIudGltZWxpbmUuX3BsYXkobmV3IGIuS2V5ZnJhbWVFZmZlY3QodGhpcyxhLGMsZCkpfTt2YXIgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJkaXYiKTtiLm5ld1VuZGVybHlpbmdBbmltYXRpb25Gb3JLZXlmcmFtZUVmZmVjdD1mdW5jdGlvbihhKXtpZihhKXt2YXIgYj1hLnRhcmdldHx8aCxjPWEuX2tleWZyYW1lczsiZnVuY3Rpb24iPT10eXBlb2YgYyYmKGM9W10pO3ZhciBkPWEuX3RpbWluZ0lucHV0O2QuaWQ9YS5faWR9ZWxzZSB2YXIgYj1oLGM9W10sZD0wO3JldHVybiBnLmFwcGx5KGIsW2MsZF0pfSxiLmJpbmRBbmltYXRpb25Gb3JLZXlmcmFtZUVmZmVjdD1mdW5jdGlvbihhKXthLmVmZmVjdCYmImZ1bmN0aW9uIj09dHlwZW9mIGEuZWZmZWN0Ll9ub3JtYWxpemVkS2V5ZnJhbWVzJiZiLmJpbmRBbmltYXRpb25Gb3JDdXN0b21FZmZlY3QoYSl9O3ZhciBpPVtdO2IuYXdhaXRTdGFydFRpbWU9ZnVuY3Rpb24oYSl7bnVsbD09PWEuc3RhcnRUaW1lJiZhLl9pc0dyb3VwJiYoMD09aS5sZW5ndGgmJnJlcXVlc3RBbmltYXRpb25GcmFtZShlKSxpLnB1c2goYSkpfTt2YXIgaj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZTtPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCJnZXRDb21wdXRlZFN0eWxlIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6ZnVuY3Rpb24oKXtiLnRpbWVsaW5lLl91cGRhdGVBbmltYXRpb25zUHJvbWlzZXMoKTt2YXIgYT1qLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZSgpJiYoYT1qLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksYi50aW1lbGluZS5fdXBkYXRlQW5pbWF0aW9uc1Byb21pc2VzKCksYX19KSx3aW5kb3cuS2V5ZnJhbWVFZmZlY3Q9Yi5LZXlmcmFtZUVmZmVjdCx3aW5kb3cuRWxlbWVudC5wcm90b3R5cGUuZ2V0QW5pbWF0aW9ucz1mdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC50aW1lbGluZS5nZXRBbmltYXRpb25zKCkuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBudWxsIT09YS5lZmZlY3QmJmEuZWZmZWN0LnRhcmdldD09dGhpc30uYmluZCh0aGlzKSl9fShhLGMpLGZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEpe2EuX3JlZ2lzdGVyZWR8fChhLl9yZWdpc3RlcmVkPSEwLGcucHVzaChhKSxofHwoaD0hMCxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZSkpKX1mdW5jdGlvbiBlKGEpe3ZhciBiPWc7Zz1bXSxiLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5fc2VxdWVuY2VOdW1iZXItYi5fc2VxdWVuY2VOdW1iZXJ9KSxiPWIuZmlsdGVyKGZ1bmN0aW9uKGEpe2EoKTt2YXIgYj1hLl9hbmltYXRpb24/YS5fYW5pbWF0aW9uLnBsYXlTdGF0ZToiaWRsZSI7cmV0dXJuInJ1bm5pbmciIT1iJiYicGVuZGluZyIhPWImJihhLl9yZWdpc3RlcmVkPSExKSxhLl9yZWdpc3RlcmVkfSksZy5wdXNoLmFwcGx5KGcsYiksZy5sZW5ndGg/KGg9ITAscmVxdWVzdEFuaW1hdGlvbkZyYW1lKGUpKTpoPSExfXZhciBmPShkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJkaXYiKSwwKTtiLmJpbmRBbmltYXRpb25Gb3JDdXN0b21FZmZlY3Q9ZnVuY3Rpb24oYil7dmFyIGMsZT1iLmVmZmVjdC50YXJnZXQsZz0iZnVuY3Rpb24iPT10eXBlb2YgYi5lZmZlY3QuZ2V0RnJhbWVzKCk7Yz1nP2IuZWZmZWN0LmdldEZyYW1lcygpOmIuZWZmZWN0Ll9vbnNhbXBsZTt2YXIgaD1iLmVmZmVjdC50aW1pbmcsaT1udWxsO2g9YS5ub3JtYWxpemVUaW1pbmdJbnB1dChoKTt2YXIgaj1mdW5jdGlvbigpe3ZhciBkPWouX2FuaW1hdGlvbj9qLl9hbmltYXRpb24uY3VycmVudFRpbWU6bnVsbDtudWxsIT09ZCYmKGQ9YS5jYWxjdWxhdGVJdGVyYXRpb25Qcm9ncmVzcyhhLmNhbGN1bGF0ZUFjdGl2ZUR1cmF0aW9uKGgpLGQsaCksaXNOYU4oZCkmJihkPW51bGwpKSxkIT09aSYmKGc/YyhkLGUsYi5lZmZlY3QpOmMoZCxiLmVmZmVjdCxiLmVmZmVjdC5fYW5pbWF0aW9uKSksaT1kfTtqLl9hbmltYXRpb249YixqLl9yZWdpc3RlcmVkPSExLGouX3NlcXVlbmNlTnVtYmVyPWYrKyxiLl9jYWxsYmFjaz1qLGQoail9O3ZhciBnPVtdLGg9ITE7Yi5BbmltYXRpb24ucHJvdG90eXBlLl9yZWdpc3Rlcj1mdW5jdGlvbigpe3RoaXMuX2NhbGxiYWNrJiZkKHRoaXMuX2NhbGxiYWNrKX19KGEsYyksZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYSl7cmV0dXJuIGEuX3RpbWluZy5kZWxheSthLmFjdGl2ZUR1cmF0aW9uK2EuX3RpbWluZy5lbmREZWxheX1mdW5jdGlvbiBlKGIsYyxkKXt0aGlzLl9pZD1kLHRoaXMuX3BhcmVudD1udWxsLHRoaXMuY2hpbGRyZW49Ynx8W10sdGhpcy5fcmVwYXJlbnQodGhpcy5jaGlsZHJlbiksYz1hLm51bWVyaWNUaW1pbmdUb09iamVjdChjKSx0aGlzLl90aW1pbmdJbnB1dD1hLmNsb25lVGltaW5nSW5wdXQoYyksdGhpcy5fdGltaW5nPWEubm9ybWFsaXplVGltaW5nSW5wdXQoYywhMCksdGhpcy50aW1pbmc9YS5tYWtlVGltaW5nKGMsITAsdGhpcyksdGhpcy50aW1pbmcuX2VmZmVjdD10aGlzLCJhdXRvIj09PXRoaXMuX3RpbWluZy5kdXJhdGlvbiYmKHRoaXMuX3RpbWluZy5kdXJhdGlvbj10aGlzLmFjdGl2ZUR1cmF0aW9uKX13aW5kb3cuU2VxdWVuY2VFZmZlY3Q9ZnVuY3Rpb24oKXtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sd2luZG93Lkdyb3VwRWZmZWN0PWZ1bmN0aW9uKCl7ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGUucHJvdG90eXBlPXtfaXNBbmNlc3RvcjpmdW5jdGlvbihhKXtmb3IodmFyIGI9dGhpcztudWxsIT09Yjspe2lmKGI9PWEpcmV0dXJuITA7Yj1iLl9wYXJlbnR9cmV0dXJuITF9LF9yZWJ1aWxkOmZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXM7YTspImF1dG8iPT09YS50aW1pbmcuZHVyYXRpb24mJihhLl90aW1pbmcuZHVyYXRpb249YS5hY3RpdmVEdXJhdGlvbiksYT1hLl9wYXJlbnQ7dGhpcy5fYW5pbWF0aW9uJiZ0aGlzLl9hbmltYXRpb24uX3JlYnVpbGRVbmRlcmx5aW5nQW5pbWF0aW9uKCl9LF9yZXBhcmVudDpmdW5jdGlvbihhKXtiLnJlbW92ZU11bHRpKGEpO2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKWFbY10uX3BhcmVudD10aGlzfSxfcHV0Q2hpbGQ6ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9Yj8iQ2Fubm90IGFwcGVuZCBhbiBhbmNlc3RvciBvciBzZWxmIjoiQ2Fubm90IHByZXBlbmQgYW4gYW5jZXN0b3Igb3Igc2VsZiIsZD0wO2Q8YS5sZW5ndGg7ZCsrKWlmKHRoaXMuX2lzQW5jZXN0b3IoYVtkXSkpdGhyb3d7dHlwZTpET01FeGNlcHRpb24uSElFUkFSQ0hZX1JFUVVFU1RfRVJSLG5hbWU6IkhpZXJhcmNoeVJlcXVlc3RFcnJvciIsbWVzc2FnZTpjfTtmb3IodmFyIGQ9MDtkPGEubGVuZ3RoO2QrKyliP3RoaXMuY2hpbGRyZW4ucHVzaChhW2RdKTp0aGlzLmNoaWxkcmVuLnVuc2hpZnQoYVtkXSk7dGhpcy5fcmVwYXJlbnQoYSksdGhpcy5fcmVidWlsZCgpfSxhcHBlbmQ6ZnVuY3Rpb24oKXt0aGlzLl9wdXRDaGlsZChhcmd1bWVudHMsITApfSxwcmVwZW5kOmZ1bmN0aW9uKCl7dGhpcy5fcHV0Q2hpbGQoYXJndW1lbnRzLCExKX0sZ2V0IHBhcmVudCgpe3JldHVybiB0aGlzLl9wYXJlbnR9LGdldCBmaXJzdENoaWxkKCl7cmV0dXJuIHRoaXMuY2hpbGRyZW4ubGVuZ3RoP3RoaXMuY2hpbGRyZW5bMF06bnVsbH0sZ2V0IGxhc3RDaGlsZCgpe3JldHVybiB0aGlzLmNoaWxkcmVuLmxlbmd0aD90aGlzLmNoaWxkcmVuW3RoaXMuY2hpbGRyZW4ubGVuZ3RoLTFdOm51bGx9LGNsb25lOmZ1bmN0aW9uKCl7Zm9yKHZhciBiPWEuY2xvbmVUaW1pbmdJbnB1dCh0aGlzLl90aW1pbmdJbnB1dCksYz1bXSxkPTA7ZDx0aGlzLmNoaWxkcmVuLmxlbmd0aDtkKyspYy5wdXNoKHRoaXMuY2hpbGRyZW5bZF0uY2xvbmUoKSk7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBHcm91cEVmZmVjdD9uZXcgR3JvdXBFZmZlY3QoYyxiKTpuZXcgU2VxdWVuY2VFZmZlY3QoYyxiKX0scmVtb3ZlOmZ1bmN0aW9uKCl7Yi5yZW1vdmVNdWx0aShbdGhpc10pfX0sd2luZG93LlNlcXVlbmNlRWZmZWN0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNlcXVlbmNlRWZmZWN0LnByb3RvdHlwZSwiYWN0aXZlRHVyYXRpb24iLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgYT0wO3JldHVybiB0aGlzLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oYil7YSs9ZChiKX0pLE1hdGgubWF4KGEsMCl9fSksd2luZG93Lkdyb3VwRWZmZWN0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93Lkdyb3VwRWZmZWN0LnByb3RvdHlwZSwiYWN0aXZlRHVyYXRpb24iLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgYT0wO3JldHVybiB0aGlzLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oYil7YT1NYXRoLm1heChhLGQoYikpfSksYX19KSxiLm5ld1VuZGVybHlpbmdBbmltYXRpb25Gb3JHcm91cD1mdW5jdGlvbihjKXt2YXIgZCxlPW51bGwsZj1mdW5jdGlvbihiKXt2YXIgYz1kLl93cmFwcGVyO2lmKGMmJiJwZW5kaW5nIiE9Yy5wbGF5U3RhdGUmJmMuZWZmZWN0KXJldHVybiBudWxsPT1iP3ZvaWQgYy5fcmVtb3ZlQ2hpbGRBbmltYXRpb25zKCk6MD09YiYmYy5wbGF5YmFja1JhdGU8MCYmKGV8fChlPWEubm9ybWFsaXplVGltaW5nSW5wdXQoYy5lZmZlY3QudGltaW5nKSksYj1hLmNhbGN1bGF0ZUl0ZXJhdGlvblByb2dyZXNzKGEuY2FsY3VsYXRlQWN0aXZlRHVyYXRpb24oZSksLTEsZSksaXNOYU4oYil8fG51bGw9PWIpPyhjLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24oYSl7YS5jdXJyZW50VGltZT0tMX0pLHZvaWQgYy5fcmVtb3ZlQ2hpbGRBbmltYXRpb25zKCkpOnZvaWQgMH0sZz1uZXcgS2V5ZnJhbWVFZmZlY3QobnVsbCxbXSxjLl90aW1pbmcsYy5faWQpO3JldHVybiBnLm9uc2FtcGxlPWYsZD1iLnRpbWVsaW5lLl9wbGF5KGcpfSxiLmJpbmRBbmltYXRpb25Gb3JHcm91cD1mdW5jdGlvbihhKXthLl9hbmltYXRpb24uX3dyYXBwZXI9YSxhLl9pc0dyb3VwPSEwLGIuYXdhaXRTdGFydFRpbWUoYSksYS5fY29uc3RydWN0Q2hpbGRBbmltYXRpb25zKCksYS5fc2V0RXh0ZXJuYWxBbmltYXRpb24oYSl9LGIuZ3JvdXBDaGlsZER1cmF0aW9uPWR9KGEsYyl9KCk7CgohKGZ1bmN0aW9uKCl7Ci8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uCgogICAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CiAgICBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuCgogICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEgKICAgIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQogICAgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULAogICAgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NCiAgICBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUgogICAgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUgogICAgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCmZ1bmN0aW9uIHQodCxlLG4saSl7dmFyIHIsbz1hcmd1bWVudHMubGVuZ3RoLGE9bzwzP2U6bnVsbD09PWk/aT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsbik6aTtpZigib2JqZWN0Ij09dHlwZW9mIFJlZmxlY3QmJiJmdW5jdGlvbiI9PXR5cGVvZiBSZWZsZWN0LmRlY29yYXRlKWE9UmVmbGVjdC5kZWNvcmF0ZSh0LGUsbixpKTtlbHNlIGZvcih2YXIgcz10Lmxlbmd0aC0xO3M+PTA7cy0tKShyPXRbc10pJiYoYT0obzwzP3IoYSk6bz4zP3IoZSxuLGEpOnIoZSxuKSl8fGEpO3JldHVybiBvPjMmJmEmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4sYSksYX1mdW5jdGlvbiBlKHQsZSl7aWYoIm9iamVjdCI9PXR5cGVvZiBSZWZsZWN0JiYiZnVuY3Rpb24iPT10eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSlyZXR1cm4gUmVmbGVjdC5tZXRhZGF0YSh0LGUpfWZ1bmN0aW9uIG4odCxlLG4saSl7cmV0dXJuIG5ldyhufHwobj1Qcm9taXNlKSkoKGZ1bmN0aW9uKHIsbyl7ZnVuY3Rpb24gYSh0KXt0cnl7bChpLm5leHQodCkpfWNhdGNoKHQpe28odCl9fWZ1bmN0aW9uIHModCl7dHJ5e2woaS50aHJvdyh0KSl9Y2F0Y2godCl7byh0KX19ZnVuY3Rpb24gbCh0KXt0LmRvbmU/cih0LnZhbHVlKTooZnVuY3Rpb24gZSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIG4/dDpuZXcgbigoZnVuY3Rpb24oZSl7ZSh0KX0pKX0pKHQudmFsdWUpLnRoZW4oYSxzKX1sKChpPWkuYXBwbHkodCxlfHxbXSkpLm5leHQoKSl9KSl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCAoYykgMjAxNiBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICAgKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgICAqIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kCiAgICAgKiBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5CiAgICAgKiBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5CiAgICAgKiBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQCiAgICAgKiByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAgKi9mdW5jdGlvbiBpKHQpe3JldHVybiBlPT57aWYodClpZihlLmhhc093blByb3BlcnR5KCJpcyIpKXtpZih0IT09ZS5pcyl0aHJvdyBuZXcgRXJyb3IoYGN1c3RvbSBlbGVtZW50IHRhZyBuYW1lcyBkbyBub3QgbWF0Y2g6ICgke3R9ICE9PSAke2UuaXN9KWApfWVsc2UgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImlzIix7dmFsdWU6dH0pO3dpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUoZS5pcyxlKX19ZnVuY3Rpb24gcih0LGUsbil7dC5jb25zdHJ1Y3Rvci5oYXNPd25Qcm9wZXJ0eSgicHJvcGVydGllcyIpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5jb25zdHJ1Y3RvciwicHJvcGVydGllcyIse3ZhbHVlOnt9fSksdC5jb25zdHJ1Y3Rvci5wcm9wZXJ0aWVzW2VdPU9iamVjdC5hc3NpZ24oe30sdC5jb25zdHJ1Y3Rvci5wcm9wZXJ0aWVzW2VdLG4pfWZ1bmN0aW9uIG8odCl7cmV0dXJuKGUsbik9PntyKGUsbix0KX19ZnVuY3Rpb24gYSguLi50KXtyZXR1cm4oZSxuKT0+e2UuY29uc3RydWN0b3IuaGFzT3duUHJvcGVydHkoIm9ic2VydmVycyIpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5jb25zdHJ1Y3Rvciwib2JzZXJ2ZXJzIix7dmFsdWU6W119KSxlLmNvbnN0cnVjdG9yLm9ic2VydmVycy5wdXNoKGAke259KCR7dC5qb2luKCIsIil9KWApfX1mdW5jdGlvbiBzKHQsLi4uZSl7cmV0dXJuKG4saSxvKT0+e2NvbnN0IGE9YF9fY29tcHV0ZSR7aX1gO09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLGEse3ZhbHVlOm8uZ2V0fSksby5nZXQ9dm9pZCAwLHIobixpLHtjb21wdXRlZDpgJHthfSgke1t0LC4uLmVdLmpvaW4oIiwiKX0pYH0pfX0KLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi93aW5kb3cuSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eT1mdW5jdGlvbih0LGUpe3JldHVybiB0fTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KbGV0IGwsYyx1PS8odXJsXCgpKFteKV0qKShcKSkvZyxoPS8oXlwvW15cL10pfCheIyl8KF5bXHctXGRdKjopLztmdW5jdGlvbiBkKHQsZSl7aWYodCYmaC50ZXN0KHQpKXJldHVybiB0O2lmKCIvLyI9PT10KXJldHVybiB0O2lmKHZvaWQgMD09PWwpe2w9ITE7dHJ5e2NvbnN0IHQ9bmV3IFVSTCgiYiIsImh0dHA6Ly9hIik7dC5wYXRobmFtZT0iYyUyMGQiLGw9Imh0dHA6Ly9hL2MlMjBkIj09PXQuaHJlZn1jYXRjaCh0KXt9fWlmKGV8fChlPWRvY3VtZW50LmJhc2VVUkl8fHdpbmRvdy5sb2NhdGlvbi5ocmVmKSxsKXRyeXtyZXR1cm4gbmV3IFVSTCh0LGUpLmhyZWZ9Y2F0Y2goZSl7cmV0dXJuIHR9cmV0dXJuIGN8fChjPWRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgidGVtcCIpLGMuYmFzZT1jLmNyZWF0ZUVsZW1lbnQoImJhc2UiKSxjLmhlYWQuYXBwZW5kQ2hpbGQoYy5iYXNlKSxjLmFuY2hvcj1jLmNyZWF0ZUVsZW1lbnQoImEiKSxjLmJvZHkuYXBwZW5kQ2hpbGQoYy5hbmNob3IpKSxjLmJhc2UuaHJlZj1lLGMuYW5jaG9yLmhyZWY9dCxjLmFuY2hvci5ocmVmfHx0fWZ1bmN0aW9uIHAodCxlKXtyZXR1cm4gdC5yZXBsYWNlKHUsKGZ1bmN0aW9uKHQsbixpLHIpe3JldHVybiBuKyInIitkKGkucmVwbGFjZSgvWyInXS9nLCIiKSxlKSsiJyIrcn0pKX1mdW5jdGlvbiBmKHQpe3JldHVybiB0LnN1YnN0cmluZygwLHQubGFzdEluZGV4T2YoIi8iKSsxKX0KLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi9jb25zdCBtPSF3aW5kb3cuU2hhZHlET018fCF3aW5kb3cuU2hhZHlET00uaW5Vc2U7Qm9vbGVhbighd2luZG93LlNoYWR5Q1NTfHx3aW5kb3cuU2hhZHlDU1MubmF0aXZlQ3NzKTtjb25zdCBnPW0mJiJhZG9wdGVkU3R5bGVTaGVldHMiaW4gRG9jdW1lbnQucHJvdG90eXBlJiYicmVwbGFjZVN5bmMiaW4gQ1NTU3R5bGVTaGVldC5wcm90b3R5cGUmJigoKT0+e3RyeXtjb25zdCB0PW5ldyBDU1NTdHlsZVNoZWV0O3QucmVwbGFjZVN5bmMoIiIpO2NvbnN0IGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIGUuYXR0YWNoU2hhZG93KHttb2RlOiJvcGVuIn0pLGUuc2hhZG93Um9vdC5hZG9wdGVkU3R5bGVTaGVldHM9W3RdLGUuc2hhZG93Um9vdC5hZG9wdGVkU3R5bGVTaGVldHNbMF09PT10fWNhdGNoKHQpe3JldHVybiExfX0pKCk7bGV0IF89d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLnJvb3RQYXRofHxmKGRvY3VtZW50LmJhc2VVUkl8fHdpbmRvdy5sb2NhdGlvbi5ocmVmKSx5PXdpbmRvdy5Qb2x5bWVyJiZ3aW5kb3cuUG9seW1lci5zYW5pdGl6ZURPTVZhbHVlfHx2b2lkIDAsdj13aW5kb3cuUG9seW1lciYmd2luZG93LlBvbHltZXIuc2V0UGFzc2l2ZVRvdWNoR2VzdHVyZXN8fCExLGI9d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLnN0cmljdFRlbXBsYXRlUG9saWN5fHwhMSx4PXdpbmRvdy5Qb2x5bWVyJiZ3aW5kb3cuUG9seW1lci5hbGxvd1RlbXBsYXRlRnJvbURvbU1vZHVsZXx8ITEsdz13aW5kb3cuUG9seW1lciYmd2luZG93LlBvbHltZXIubGVnYWN5T3B0aW1pemF0aW9uc3x8ITEsUz13aW5kb3cuUG9seW1lciYmd2luZG93LlBvbHltZXIubGVnYWN5V2FybmluZ3N8fCExLE09d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLnN5bmNJbml0aWFsUmVuZGVyfHwhMSxFPXdpbmRvdy5Qb2x5bWVyJiZ3aW5kb3cuUG9seW1lci5sZWdhY3lVbmRlZmluZWR8fCExLFQ9d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLm9yZGVyZWRDb21wdXRlZHx8ITEsQz13aW5kb3cuUG9seW1lciYmd2luZG93LlBvbHltZXIucmVtb3ZlTmVzdGVkVGVtcGxhdGVzfHwhMSxBPXdpbmRvdy5Qb2x5bWVyJiZ3aW5kb3cuUG9seW1lci5mYXN0RG9tSWZ8fCExLGs9d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLnN1cHByZXNzVGVtcGxhdGVOb3RpZmljYXRpb25zfHwhMSxMPXdpbmRvdy5Qb2x5bWVyJiZ3aW5kb3cuUG9seW1lci5sZWdhY3lOb09ic2VydmVkQXR0cmlidXRlc3x8ITEsUD13aW5kb3cuUG9seW1lciYmd2luZG93LlBvbHltZXIudXNlQWRvcHRlZFN0eWxlU2hlZXRzV2l0aEJ1aWx0Q1NTfHwhMSxOPTA7Y29uc3QgST1mdW5jdGlvbih0KXtsZXQgZT10Ll9fbWl4aW5BcHBsaWNhdGlvbnM7ZXx8KGU9bmV3IFdlYWtNYXAsdC5fX21peGluQXBwbGljYXRpb25zPWUpO2xldCBuPU4rKztyZXR1cm4gZnVuY3Rpb24gaShyKXtsZXQgbz1yLl9fbWl4aW5TZXQ7aWYobyYmb1tuXSlyZXR1cm4gcjtsZXQgYT1lLHM9YS5nZXQocik7aWYoIXMpe3M9dChyKSxhLnNldChyLHMpO2xldCBlPU9iamVjdC5jcmVhdGUocy5fX21peGluU2V0fHxvfHxudWxsKTtlW25dPSEwLHMuX19taXhpblNldD1lfXJldHVybiBzfX07Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovbGV0IE89e30sUj17fTtmdW5jdGlvbiB6KHQsZSl7T1t0XT1SW3QudG9Mb3dlckNhc2UoKV09ZX1mdW5jdGlvbiBEKHQpe3JldHVybiBPW3RdfHxSW3QudG9Mb3dlckNhc2UoKV19Y2xhc3MgQiBleHRlbmRzIEhUTUxFbGVtZW50e3N0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCl7cmV0dXJuWyJpZCJdfXN0YXRpYyBpbXBvcnQodCxlKXtpZih0KXtsZXQgbj1EKHQpO3JldHVybiBuJiZlP24ucXVlcnlTZWxlY3RvcihlKTpufXJldHVybiBudWxsfWF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayh0LGUsbixpKXtlIT09biYmdGhpcy5yZWdpc3RlcigpfWdldCBhc3NldHBhdGgoKXtpZighdGhpcy5fX2Fzc2V0cGF0aCl7Y29uc3QgdD13aW5kb3cuSFRNTEltcG9ydHMmJkhUTUxJbXBvcnRzLmltcG9ydEZvckVsZW1lbnQ/SFRNTEltcG9ydHMuaW1wb3J0Rm9yRWxlbWVudCh0aGlzKXx8ZG9jdW1lbnQ6dGhpcy5vd25lckRvY3VtZW50LGU9ZCh0aGlzLmdldEF0dHJpYnV0ZSgiYXNzZXRwYXRoIil8fCIiLHQuYmFzZVVSSSk7dGhpcy5fX2Fzc2V0cGF0aD1mKGUpfXJldHVybiB0aGlzLl9fYXNzZXRwYXRofXJlZ2lzdGVyKHQpe2lmKHQ9dHx8dGhpcy5pZCl7aWYoYiYmdm9pZCAwIT09RCh0KSl0aHJvdyB6KHQsbnVsbCksbmV3IEVycm9yKGBzdHJpY3RUZW1wbGF0ZVBvbGljeTogZG9tLW1vZHVsZSAke3R9IHJlLXJlZ2lzdGVyZWRgKTt0aGlzLmlkPXQseih0LHRoaXMpLChmdW5jdGlvbiBlKHQpe3QucXVlcnlTZWxlY3Rvcigic3R5bGUiKSYmY29uc29sZS53YXJuKCJkb20tbW9kdWxlICVzIGhhcyBzdHlsZSBvdXRzaWRlIHRlbXBsYXRlIix0LmlkKX0pKHRoaXMpfX19Qi5wcm90b3R5cGUubW9kdWxlcz1PLGN1c3RvbUVsZW1lbnRzLmRlZmluZSgiZG9tLW1vZHVsZSIsQik7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCmNvbnN0IEg9InNoYWR5LXVuc2NvcGVkIjtmdW5jdGlvbiBGKHQpe3JldHVybiBCLmltcG9ydCh0KX1mdW5jdGlvbiBWKHQpe2NvbnN0IGU9cCgodC5ib2R5P3QuYm9keTp0KS50ZXh0Q29udGVudCx0LmJhc2VVUkkpLG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtyZXR1cm4gbi50ZXh0Q29udGVudD1lLG59ZnVuY3Rpb24gVSh0KXtjb25zdCBlPXQudHJpbSgpLnNwbGl0KC9ccysvKSxuPVtdO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKW4ucHVzaCguLi5qKGVbdF0pKTtyZXR1cm4gbn1mdW5jdGlvbiBqKHQpe2NvbnN0IGU9Rih0KTtpZighZSlyZXR1cm4gY29uc29sZS53YXJuKCJDb3VsZCBub3QgZmluZCBzdHlsZSBkYXRhIGluIG1vZHVsZSBuYW1lZCIsdCksW107aWYodm9pZCAwPT09ZS5fc3R5bGVzKXtjb25zdCB0PVtdO3QucHVzaCguLi5XKGUpKTtjb25zdCBuPWUucXVlcnlTZWxlY3RvcigidGVtcGxhdGUiKTtuJiZ0LnB1c2goLi4uRyhuLGUuYXNzZXRwYXRoKSksZS5fc3R5bGVzPXR9cmV0dXJuIGUuX3N0eWxlc31mdW5jdGlvbiBHKHQsZSl7aWYoIXQuX3N0eWxlcyl7Y29uc3Qgbj1bXSxpPXQuY29udGVudC5xdWVyeVNlbGVjdG9yQWxsKCJzdHlsZSIpO2ZvcihsZXQgdD0wO3Q8aS5sZW5ndGg7dCsrKXtsZXQgcj1pW3RdLG89ci5nZXRBdHRyaWJ1dGUoImluY2x1ZGUiKTtvJiZuLnB1c2goLi4uVShvKS5maWx0ZXIoKGZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gbi5pbmRleE9mKHQpPT09ZX0pKSksZSYmKHIudGV4dENvbnRlbnQ9cChyLnRleHRDb250ZW50LGUpKSxuLnB1c2gocil9dC5fc3R5bGVzPW59cmV0dXJuIHQuX3N0eWxlc31mdW5jdGlvbiBXKHQpe2NvbnN0IGU9W10sbj10LnF1ZXJ5U2VsZWN0b3JBbGwoImxpbmtbcmVsPWltcG9ydF1bdHlwZX49Y3NzXSIpO2ZvcihsZXQgdD0wO3Q8bi5sZW5ndGg7dCsrKXtsZXQgaT1uW3RdO2lmKGkuaW1wb3J0KXtjb25zdCB0PWkuaW1wb3J0LG49aS5oYXNBdHRyaWJ1dGUoSCk7aWYobiYmIXQuX3Vuc2NvcGVkU3R5bGUpe2NvbnN0IGU9Vih0KTtlLnNldEF0dHJpYnV0ZShILCIiKSx0Ll91bnNjb3BlZFN0eWxlPWV9ZWxzZSB0Ll9zdHlsZXx8KHQuX3N0eWxlPVYodCkpO2UucHVzaChuP3QuX3Vuc2NvcGVkU3R5bGU6dC5fc3R5bGUpfX1yZXR1cm4gZX1mdW5jdGlvbiBxKHQpe2xldCBlPUYodCk7aWYoZSYmdm9pZCAwPT09ZS5fY3NzVGV4dCl7bGV0IHQ9KGZ1bmN0aW9uIG4odCl7bGV0IGU9IiIsbj1XKHQpO2ZvcihsZXQgdD0wO3Q8bi5sZW5ndGg7dCsrKWUrPW5bdF0udGV4dENvbnRlbnQ7cmV0dXJuIGV9Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovKShlKSxuPWUucXVlcnlTZWxlY3RvcigidGVtcGxhdGUiKTtuJiYodCs9KGZ1bmN0aW9uIGkodCxlKXtsZXQgbj0iIjtjb25zdCBpPUcodCxlKTtmb3IobGV0IHQ9MDt0PGkubGVuZ3RoO3QrKyl7bGV0IGU9aVt0XTtlLnBhcmVudE5vZGUmJmUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlKSxuKz1lLnRleHRDb250ZW50fXJldHVybiBufSkobixlLmFzc2V0cGF0aCkpLGUuX2Nzc1RleHQ9dHx8bnVsbH1yZXR1cm4gZXx8Y29uc29sZS53YXJuKCJDb3VsZCBub3QgZmluZCBzdHlsZSBkYXRhIGluIG1vZHVsZSBuYW1lZCIsdCksZSYmZS5fY3NzVGV4dHx8IiJ9Y29uc3QgWT13aW5kb3cuU2hhZHlET00mJndpbmRvdy5TaGFkeURPTS5ub1BhdGNoJiZ3aW5kb3cuU2hhZHlET00ud3JhcD93aW5kb3cuU2hhZHlET00ud3JhcDp3aW5kb3cuU2hhZHlET00/dD0+U2hhZHlET00ucGF0Y2godCk6dD0+dDsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi9mdW5jdGlvbiBYKHQpe3JldHVybiB0LmluZGV4T2YoIi4iKT49MH1mdW5jdGlvbiAkKHQpe2xldCBlPXQuaW5kZXhPZigiLiIpO3JldHVybi0xPT09ZT90OnQuc2xpY2UoMCxlKX1mdW5jdGlvbiBLKHQsZSl7cmV0dXJuIDA9PT10LmluZGV4T2YoZSsiLiIpfWZ1bmN0aW9uIFoodCxlKXtyZXR1cm4gMD09PWUuaW5kZXhPZih0KyIuIil9ZnVuY3Rpb24gSih0LGUsbil7cmV0dXJuIGUrbi5zbGljZSh0Lmxlbmd0aCl9ZnVuY3Rpb24gUSh0LGUpe3JldHVybiB0PT09ZXx8Syh0LGUpfHxaKHQsZSl9ZnVuY3Rpb24gdHQodCl7aWYoQXJyYXkuaXNBcnJheSh0KSl7bGV0IGU9W107Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspe2xldCBpPXRbbl0udG9TdHJpbmcoKS5zcGxpdCgiLiIpO2ZvcihsZXQgdD0wO3Q8aS5sZW5ndGg7dCsrKWUucHVzaChpW3RdKX1yZXR1cm4gZS5qb2luKCIuIil9cmV0dXJuIHR9ZnVuY3Rpb24gZXQodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/dHQodCkuc3BsaXQoIi4iKTp0LnRvU3RyaW5nKCkuc3BsaXQoIi4iKX1mdW5jdGlvbiBudCh0LGUsbil7bGV0IGk9dCxyPWV0KGUpO2ZvcihsZXQgdD0wO3Q8ci5sZW5ndGg7dCsrKXtpZighaSlyZXR1cm47aT1pW3JbdF1dfXJldHVybiBuJiYobi5wYXRoPXIuam9pbigiLiIpKSxpfWZ1bmN0aW9uIGl0KHQsZSxuKXtsZXQgaT10LHI9ZXQoZSksbz1yW3IubGVuZ3RoLTFdO2lmKHIubGVuZ3RoPjEpe2ZvcihsZXQgdD0wO3Q8ci5sZW5ndGgtMTt0KyspaWYoaT1pW3JbdF1dLCFpKXJldHVybjtpW29dPW59ZWxzZSBpW2VdPW47cmV0dXJuIHIuam9pbigiLiIpfQovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dAogICAgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28KICAgIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqL2NvbnN0IHJ0PXt9LG90PS8tW2Etel0vZyxhdD0vKFtBLVpdKS9nO2Z1bmN0aW9uIHN0KHQpe3JldHVybiBydFt0XXx8KHJ0W3RdPXQuaW5kZXhPZigiLSIpPDA/dDp0LnJlcGxhY2Uob3QsKHQ9PnRbMV0udG9VcHBlckNhc2UoKSkpKX1mdW5jdGlvbiBsdCh0KXtyZXR1cm4gcnRbdF18fChydFt0XT10LnJlcGxhY2UoYXQsIi0kMSIpLnRvTG93ZXJDYXNlKCkpfQovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dAogICAgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28KICAgIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqL2xldCBjdD0wLHV0PTAsaHQ9W10sZHQ9MCxwdD0hMSxmdD1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIik7bmV3IHdpbmRvdy5NdXRhdGlvbk9ic2VydmVyKChmdW5jdGlvbiBtdCgpe3B0PSExO2NvbnN0IHQ9aHQubGVuZ3RoO2ZvcihsZXQgZT0wO2U8dDtlKyspe2xldCB0PWh0W2VdO2lmKHQpdHJ5e3QoKX1jYXRjaCh0KXtzZXRUaW1lb3V0KCgoKT0+e3Rocm93IHR9KSl9fWh0LnNwbGljZSgwLHQpLHV0Kz10fSkpLm9ic2VydmUoZnQse2NoYXJhY3RlckRhdGE6ITB9KTtjb25zdCBndD17YWZ0ZXI6dD0+KHtydW46ZT0+d2luZG93LnNldFRpbWVvdXQoZSx0KSxjYW5jZWwodCl7d2luZG93LmNsZWFyVGltZW91dCh0KX19KSxydW46KHQsZSk9PndpbmRvdy5zZXRUaW1lb3V0KHQsZSksY2FuY2VsKHQpe3dpbmRvdy5jbGVhclRpbWVvdXQodCl9fSxfdD17cnVuOnQ9PndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodCksY2FuY2VsKHQpe3dpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0KX19LHl0PXtydW46dD0+d2luZG93LnJlcXVlc3RJZGxlQ2FsbGJhY2s/d2luZG93LnJlcXVlc3RJZGxlQ2FsbGJhY2sodCk6d2luZG93LnNldFRpbWVvdXQodCwxNiksY2FuY2VsKHQpe3dpbmRvdy5jYW5jZWxJZGxlQ2FsbGJhY2s/d2luZG93LmNhbmNlbElkbGVDYWxsYmFjayh0KTp3aW5kb3cuY2xlYXJUaW1lb3V0KHQpfX0sdnQ9e3J1bjp0PT4ocHR8fChwdD0hMCxmdC50ZXh0Q29udGVudD1kdCsrKSxodC5wdXNoKHQpLGN0KyspLGNhbmNlbCh0KXtjb25zdCBlPXQtdXQ7aWYoZT49MCl7aWYoIWh0W2VdKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBhc3luYyBoYW5kbGU6ICIrdCk7aHRbZV09bnVsbH19fSxidD12dCx4dD1JKCh0PT5jbGFzcyBleHRlbmRzIHR7c3RhdGljIGNyZWF0ZVByb3BlcnRpZXModCl7Y29uc3QgZT10aGlzLnByb3RvdHlwZTtmb3IobGV0IG4gaW4gdCluIGluIGV8fGUuX2NyZWF0ZVByb3BlcnR5QWNjZXNzb3Iobil9c3RhdGljIGF0dHJpYnV0ZU5hbWVGb3JQcm9wZXJ0eSh0KXtyZXR1cm4gdC50b0xvd2VyQ2FzZSgpfXN0YXRpYyB0eXBlRm9yUHJvcGVydHkodCl7fV9jcmVhdGVQcm9wZXJ0eUFjY2Vzc29yKHQsZSl7dGhpcy5fYWRkUHJvcGVydHlUb0F0dHJpYnV0ZU1hcCh0KSx0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9fZGF0YUhhc0FjY2Vzc29yIix0aGlzKSl8fCh0aGlzLl9fZGF0YUhhc0FjY2Vzc29yPU9iamVjdC5hc3NpZ24oe30sdGhpcy5fX2RhdGFIYXNBY2Nlc3NvcikpLHRoaXMuX19kYXRhSGFzQWNjZXNzb3JbdF18fCh0aGlzLl9fZGF0YUhhc0FjY2Vzc29yW3RdPSEwLHRoaXMuX2RlZmluZVByb3BlcnR5QWNjZXNzb3IodCxlKSl9X2FkZFByb3BlcnR5VG9BdHRyaWJ1dGVNYXAodCl7dGhpcy5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfX2RhdGFBdHRyaWJ1dGVzIix0aGlzKSl8fCh0aGlzLl9fZGF0YUF0dHJpYnV0ZXM9T2JqZWN0LmFzc2lnbih7fSx0aGlzLl9fZGF0YUF0dHJpYnV0ZXMpKTtsZXQgZT10aGlzLl9fZGF0YUF0dHJpYnV0ZXNbdF07cmV0dXJuIGV8fChlPXRoaXMuY29uc3RydWN0b3IuYXR0cmlidXRlTmFtZUZvclByb3BlcnR5KHQpLHRoaXMuX19kYXRhQXR0cmlidXRlc1tlXT10KSxlfV9kZWZpbmVQcm9wZXJ0eUFjY2Vzc29yKHQsZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsdCx7Z2V0KCl7cmV0dXJuIHRoaXMuX19kYXRhW3RdfSxzZXQ6ZT9mdW5jdGlvbigpe306ZnVuY3Rpb24oZSl7dGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5KHQsZSwhMCkmJnRoaXMuX2ludmFsaWRhdGVQcm9wZXJ0aWVzKCl9fSl9Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX19kYXRhRW5hYmxlZD0hMSx0aGlzLl9fZGF0YVJlYWR5PSExLHRoaXMuX19kYXRhSW52YWxpZD0hMSx0aGlzLl9fZGF0YT17fSx0aGlzLl9fZGF0YVBlbmRpbmc9bnVsbCx0aGlzLl9fZGF0YU9sZD1udWxsLHRoaXMuX19kYXRhSW5zdGFuY2VQcm9wcz1udWxsLHRoaXMuX19kYXRhQ291bnRlcj0wLHRoaXMuX19zZXJpYWxpemluZz0hMSx0aGlzLl9pbml0aWFsaXplUHJvcGVydGllcygpfXJlYWR5KCl7dGhpcy5fX2RhdGFSZWFkeT0hMCx0aGlzLl9mbHVzaFByb3BlcnRpZXMoKX1faW5pdGlhbGl6ZVByb3BlcnRpZXMoKXtmb3IobGV0IHQgaW4gdGhpcy5fX2RhdGFIYXNBY2Nlc3Nvcil0aGlzLmhhc093blByb3BlcnR5KHQpJiYodGhpcy5fX2RhdGFJbnN0YW5jZVByb3BzPXRoaXMuX19kYXRhSW5zdGFuY2VQcm9wc3x8e30sdGhpcy5fX2RhdGFJbnN0YW5jZVByb3BzW3RdPXRoaXNbdF0sZGVsZXRlIHRoaXNbdF0pfV9pbml0aWFsaXplSW5zdGFuY2VQcm9wZXJ0aWVzKHQpe09iamVjdC5hc3NpZ24odGhpcyx0KX1fc2V0UHJvcGVydHkodCxlKXt0aGlzLl9zZXRQZW5kaW5nUHJvcGVydHkodCxlKSYmdGhpcy5faW52YWxpZGF0ZVByb3BlcnRpZXMoKX1fZ2V0UHJvcGVydHkodCl7cmV0dXJuIHRoaXMuX19kYXRhW3RdfV9zZXRQZW5kaW5nUHJvcGVydHkodCxlLG4pe2xldCBpPXRoaXMuX19kYXRhW3RdLHI9dGhpcy5fc2hvdWxkUHJvcGVydHlDaGFuZ2UodCxlLGkpO3JldHVybiByJiYodGhpcy5fX2RhdGFQZW5kaW5nfHwodGhpcy5fX2RhdGFQZW5kaW5nPXt9LHRoaXMuX19kYXRhT2xkPXt9KSx0aGlzLl9fZGF0YU9sZCYmISh0IGluIHRoaXMuX19kYXRhT2xkKSYmKHRoaXMuX19kYXRhT2xkW3RdPWkpLHRoaXMuX19kYXRhW3RdPWUsdGhpcy5fX2RhdGFQZW5kaW5nW3RdPWUpLHJ9X2lzUHJvcGVydHlQZW5kaW5nKHQpe3JldHVybiEoIXRoaXMuX19kYXRhUGVuZGluZ3x8IXRoaXMuX19kYXRhUGVuZGluZy5oYXNPd25Qcm9wZXJ0eSh0KSl9X2ludmFsaWRhdGVQcm9wZXJ0aWVzKCl7IXRoaXMuX19kYXRhSW52YWxpZCYmdGhpcy5fX2RhdGFSZWFkeSYmKHRoaXMuX19kYXRhSW52YWxpZD0hMCxidC5ydW4oKCgpPT57dGhpcy5fX2RhdGFJbnZhbGlkJiYodGhpcy5fX2RhdGFJbnZhbGlkPSExLHRoaXMuX2ZsdXNoUHJvcGVydGllcygpKX0pKSl9X2VuYWJsZVByb3BlcnRpZXMoKXt0aGlzLl9fZGF0YUVuYWJsZWR8fCh0aGlzLl9fZGF0YUVuYWJsZWQ9ITAsdGhpcy5fX2RhdGFJbnN0YW5jZVByb3BzJiYodGhpcy5faW5pdGlhbGl6ZUluc3RhbmNlUHJvcGVydGllcyh0aGlzLl9fZGF0YUluc3RhbmNlUHJvcHMpLHRoaXMuX19kYXRhSW5zdGFuY2VQcm9wcz1udWxsKSx0aGlzLnJlYWR5KCkpfV9mbHVzaFByb3BlcnRpZXMoKXt0aGlzLl9fZGF0YUNvdW50ZXIrKztjb25zdCB0PXRoaXMuX19kYXRhLGU9dGhpcy5fX2RhdGFQZW5kaW5nLG49dGhpcy5fX2RhdGFPbGQ7dGhpcy5fc2hvdWxkUHJvcGVydGllc0NoYW5nZSh0LGUsbikmJih0aGlzLl9fZGF0YVBlbmRpbmc9bnVsbCx0aGlzLl9fZGF0YU9sZD1udWxsLHRoaXMuX3Byb3BlcnRpZXNDaGFuZ2VkKHQsZSxuKSksdGhpcy5fX2RhdGFDb3VudGVyLS19X3Nob3VsZFByb3BlcnRpZXNDaGFuZ2UodCxlLG4pe3JldHVybiBCb29sZWFuKGUpfV9wcm9wZXJ0aWVzQ2hhbmdlZCh0LGUsbil7fV9zaG91bGRQcm9wZXJ0eUNoYW5nZSh0LGUsbil7cmV0dXJuIG4hPT1lJiYobj09bnx8ZT09ZSl9YXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHQsZSxuLGkpe2UhPT1uJiZ0aGlzLl9hdHRyaWJ1dGVUb1Byb3BlcnR5KHQsbiksc3VwZXIuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrJiZzdXBlci5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sodCxlLG4saSl9X2F0dHJpYnV0ZVRvUHJvcGVydHkodCxlLG4pe2lmKCF0aGlzLl9fc2VyaWFsaXppbmcpe2NvbnN0IGk9dGhpcy5fX2RhdGFBdHRyaWJ1dGVzLHI9aSYmaVt0XXx8dDt0aGlzW3JdPXRoaXMuX2Rlc2VyaWFsaXplVmFsdWUoZSxufHx0aGlzLmNvbnN0cnVjdG9yLnR5cGVGb3JQcm9wZXJ0eShyKSl9fV9wcm9wZXJ0eVRvQXR0cmlidXRlKHQsZSxuKXt0aGlzLl9fc2VyaWFsaXppbmc9ITAsdGhpcy5fdmFsdWVUb05vZGVBdHRyaWJ1dGUodGhpcyxuPWFyZ3VtZW50cy5sZW5ndGg8Mz90aGlzW3RdOm4sZXx8dGhpcy5jb25zdHJ1Y3Rvci5hdHRyaWJ1dGVOYW1lRm9yUHJvcGVydHkodCkpLHRoaXMuX19zZXJpYWxpemluZz0hMX1fdmFsdWVUb05vZGVBdHRyaWJ1dGUodCxlLG4pe2NvbnN0IGk9dGhpcy5fc2VyaWFsaXplVmFsdWUoZSk7ImNsYXNzIiE9PW4mJiJuYW1lIiE9PW4mJiJzbG90IiE9PW58fCh0PVkodCkpLHZvaWQgMD09PWk/dC5yZW1vdmVBdHRyaWJ1dGUobik6dC5zZXRBdHRyaWJ1dGUobixpKX1fc2VyaWFsaXplVmFsdWUodCl7c3dpdGNoKHR5cGVvZiB0KXtjYXNlImJvb2xlYW4iOnJldHVybiB0PyIiOnZvaWQgMDtkZWZhdWx0OnJldHVybiBudWxsIT10P3QudG9TdHJpbmcoKTp2b2lkIDB9fV9kZXNlcmlhbGl6ZVZhbHVlKHQsZSl7c3dpdGNoKGUpe2Nhc2UgQm9vbGVhbjpyZXR1cm4gbnVsbCE9PXQ7Y2FzZSBOdW1iZXI6cmV0dXJuIE51bWJlcih0KTtkZWZhdWx0OnJldHVybiB0fX19KSksd3Q9e307bGV0IFN0PUhUTUxFbGVtZW50LnByb3RvdHlwZTtmb3IoO1N0Oyl7bGV0IHQ9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoU3QpO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKXd0W3RbZV1dPSEwO1N0PU9iamVjdC5nZXRQcm90b3R5cGVPZihTdCl9Y29uc3QgTXQ9SSgodD0+e2NvbnN0IGU9eHQodCk7cmV0dXJuIGNsYXNzIGV4dGVuZHMgZXtzdGF0aWMgY3JlYXRlUHJvcGVydGllc0ZvckF0dHJpYnV0ZXMoKXtsZXQgdD10aGlzLm9ic2VydmVkQXR0cmlidXRlcztmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKyl0aGlzLnByb3RvdHlwZS5fY3JlYXRlUHJvcGVydHlBY2Nlc3NvcihzdCh0W2VdKSl9c3RhdGljIGF0dHJpYnV0ZU5hbWVGb3JQcm9wZXJ0eSh0KXtyZXR1cm4gbHQodCl9X2luaXRpYWxpemVQcm9wZXJ0aWVzKCl7dGhpcy5fX2RhdGFQcm90byYmKHRoaXMuX2luaXRpYWxpemVQcm90b1Byb3BlcnRpZXModGhpcy5fX2RhdGFQcm90byksdGhpcy5fX2RhdGFQcm90bz1udWxsKSxzdXBlci5faW5pdGlhbGl6ZVByb3BlcnRpZXMoKX1faW5pdGlhbGl6ZVByb3RvUHJvcGVydGllcyh0KXtmb3IobGV0IGUgaW4gdCl0aGlzLl9zZXRQcm9wZXJ0eShlLHRbZV0pfV9lbnN1cmVBdHRyaWJ1dGUodCxlKXt0aGlzLmhhc0F0dHJpYnV0ZSh0KXx8dGhpcy5fdmFsdWVUb05vZGVBdHRyaWJ1dGUodGhpcyxlLHQpfV9zZXJpYWxpemVWYWx1ZSh0KXtzd2l0Y2godHlwZW9mIHQpe2Nhc2Uib2JqZWN0IjppZih0IGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gdC50b1N0cmluZygpO2lmKHQpdHJ5e3JldHVybiBKU09OLnN0cmluZ2lmeSh0KX1jYXRjaCh0KXtyZXR1cm4iIn1kZWZhdWx0OnJldHVybiBzdXBlci5fc2VyaWFsaXplVmFsdWUodCl9fV9kZXNlcmlhbGl6ZVZhbHVlKHQsZSl7bGV0IG47c3dpdGNoKGUpe2Nhc2UgT2JqZWN0OnRyeXtuPUpTT04ucGFyc2UodCl9Y2F0Y2goZSl7bj10fWJyZWFrO2Nhc2UgQXJyYXk6dHJ5e249SlNPTi5wYXJzZSh0KX1jYXRjaChlKXtuPW51bGwsY29uc29sZS53YXJuKGBQb2x5bWVyOjpBdHRyaWJ1dGVzOiBjb3VsZG4ndCBkZWNvZGUgQXJyYXkgYXMgSlNPTjogJHt0fWApfWJyZWFrO2Nhc2UgRGF0ZTpuPWlzTmFOKHQpP1N0cmluZyh0KTpOdW1iZXIodCksbj1uZXcgRGF0ZShuKTticmVhaztkZWZhdWx0Om49c3VwZXIuX2Rlc2VyaWFsaXplVmFsdWUodCxlKX1yZXR1cm4gbn1fZGVmaW5lUHJvcGVydHlBY2Nlc3Nvcih0LGUpeyEoZnVuY3Rpb24gbih0LGUpe2lmKCF3dFtlXSl7bGV0IG49dFtlXTt2b2lkIDAhPT1uJiYodC5fX2RhdGE/dC5fc2V0UGVuZGluZ1Byb3BlcnR5KGUsbik6KHQuX19kYXRhUHJvdG8/dC5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfX2RhdGFQcm90byIsdCkpfHwodC5fX2RhdGFQcm90bz1PYmplY3QuY3JlYXRlKHQuX19kYXRhUHJvdG8pKTp0Ll9fZGF0YVByb3RvPXt9LHQuX19kYXRhUHJvdG9bZV09bikpfX0pKHRoaXMsdCksc3VwZXIuX2RlZmluZVByb3BlcnR5QWNjZXNzb3IodCxlKX1faGFzQWNjZXNzb3IodCl7cmV0dXJuIHRoaXMuX19kYXRhSGFzQWNjZXNzb3ImJnRoaXMuX19kYXRhSGFzQWNjZXNzb3JbdF19X2lzUHJvcGVydHlQZW5kaW5nKHQpe3JldHVybiBCb29sZWFuKHRoaXMuX19kYXRhUGVuZGluZyYmdCBpbiB0aGlzLl9fZGF0YVBlbmRpbmcpfX19KSksRXQ9eyJkb20taWYiOiEwLCJkb20tcmVwZWF0IjohMH07Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovbGV0IFR0PSExLEN0PSExO2Z1bmN0aW9uIEF0KHQpe2xldCBlPXQuZ2V0QXR0cmlidXRlKCJpcyIpO2lmKGUmJkV0W2VdKXtsZXQgbj10O2ZvcihuLnJlbW92ZUF0dHJpYnV0ZSgiaXMiKSx0PW4ub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KGUpLG4ucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQodCxuKSx0LmFwcGVuZENoaWxkKG4pO24uYXR0cmlidXRlcy5sZW5ndGg7KXQuc2V0QXR0cmlidXRlKG4uYXR0cmlidXRlc1swXS5uYW1lLG4uYXR0cmlidXRlc1swXS52YWx1ZSksbi5yZW1vdmVBdHRyaWJ1dGUobi5hdHRyaWJ1dGVzWzBdLm5hbWUpfXJldHVybiB0fWZ1bmN0aW9uIGt0KHQsZSl7bGV0IG49ZS5wYXJlbnRJbmZvJiZrdCh0LGUucGFyZW50SW5mbyk7aWYoIW4pcmV0dXJuIHQ7Zm9yKGxldCB0PW4uZmlyc3RDaGlsZCxpPTA7dDt0PXQubmV4dFNpYmxpbmcpaWYoZS5wYXJlbnRJbmRleD09PWkrKylyZXR1cm4gdH1mdW5jdGlvbiBMdCh0LGUsbixpKXtpLmlkJiYoZVtpLmlkXT1uKX1mdW5jdGlvbiBQdCh0LGUsbil7aWYobi5ldmVudHMmJm4uZXZlbnRzLmxlbmd0aClmb3IobGV0IGkscj0wLG89bi5ldmVudHM7cjxvLmxlbmd0aCYmKGk9b1tyXSk7cisrKXQuX2FkZE1ldGhvZEV2ZW50TGlzdGVuZXJUb05vZGUoZSxpLm5hbWUsaS52YWx1ZSx0KX1mdW5jdGlvbiBOdCh0LGUsbixpKXtuLnRlbXBsYXRlSW5mbyYmKGUuX3RlbXBsYXRlSW5mbz1uLnRlbXBsYXRlSW5mbyxlLl9wYXJlbnRUZW1wbGF0ZUluZm89aSl9Y29uc3QgSXQ9SSgodD0+Y2xhc3MgZXh0ZW5kcyB0e3N0YXRpYyBfcGFyc2VUZW1wbGF0ZSh0LGUpe2lmKCF0Ll90ZW1wbGF0ZUluZm8pe2xldCBuPXQuX3RlbXBsYXRlSW5mbz17fTtuLm5vZGVJbmZvTGlzdD1bXSxuLm5lc3RlZFRlbXBsYXRlPUJvb2xlYW4oZSksbi5zdHJpcFdoaXRlU3BhY2U9ZSYmZS5zdHJpcFdoaXRlU3BhY2V8fHQuaGFzQXR0cmlidXRlKCJzdHJpcC13aGl0ZXNwYWNlIiksdGhpcy5fcGFyc2VUZW1wbGF0ZUNvbnRlbnQodCxuLHtwYXJlbnQ6bnVsbH0pfXJldHVybiB0Ll90ZW1wbGF0ZUluZm99c3RhdGljIF9wYXJzZVRlbXBsYXRlQ29udGVudCh0LGUsbil7cmV0dXJuIHRoaXMuX3BhcnNlVGVtcGxhdGVOb2RlKHQuY29udGVudCxlLG4pfXN0YXRpYyBfcGFyc2VUZW1wbGF0ZU5vZGUodCxlLG4pe2xldCBpPSExLHI9dDtyZXR1cm4idGVtcGxhdGUiIT1yLmxvY2FsTmFtZXx8ci5oYXNBdHRyaWJ1dGUoInByZXNlcnZlLWNvbnRlbnQiKT8ic2xvdCI9PT1yLmxvY2FsTmFtZSYmKGUuaGFzSW5zZXJ0aW9uUG9pbnQ9ITApOmk9dGhpcy5fcGFyc2VUZW1wbGF0ZU5lc3RlZFRlbXBsYXRlKHIsZSxuKXx8aSwoZnVuY3Rpb24gbyh0KXsoZnVuY3Rpb24gZSgpe2lmKCFUdCl7VHQ9ITA7Y29uc3QgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpO3QucGxhY2Vob2xkZXI9ImEiLEN0PXQucGxhY2Vob2xkZXI9PT10LnRleHRDb250ZW50fXJldHVybiBDdH0pKCkmJiJ0ZXh0YXJlYSI9PT10LmxvY2FsTmFtZSYmdC5wbGFjZWhvbGRlciYmdC5wbGFjZWhvbGRlcj09PXQudGV4dENvbnRlbnQmJih0LnRleHRDb250ZW50PW51bGwpfSkociksci5maXJzdENoaWxkJiZ0aGlzLl9wYXJzZVRlbXBsYXRlQ2hpbGROb2RlcyhyLGUsbiksci5oYXNBdHRyaWJ1dGVzJiZyLmhhc0F0dHJpYnV0ZXMoKSYmKGk9dGhpcy5fcGFyc2VUZW1wbGF0ZU5vZGVBdHRyaWJ1dGVzKHIsZSxuKXx8aSksaXx8bi5ub3RlZH1zdGF0aWMgX3BhcnNlVGVtcGxhdGVDaGlsZE5vZGVzKHQsZSxuKXtpZigic2NyaXB0IiE9PXQubG9jYWxOYW1lJiYic3R5bGUiIT09dC5sb2NhbE5hbWUpZm9yKGxldCBpLHI9dC5maXJzdENoaWxkLG89MDtyO3I9aSl7aWYoInRlbXBsYXRlIj09ci5sb2NhbE5hbWUmJihyPUF0KHIpKSxpPXIubmV4dFNpYmxpbmcsci5ub2RlVHlwZT09PU5vZGUuVEVYVF9OT0RFKXtsZXQgbj1pO2Zvcig7biYmbi5ub2RlVHlwZT09PU5vZGUuVEVYVF9OT0RFOylyLnRleHRDb250ZW50Kz1uLnRleHRDb250ZW50LGk9bi5uZXh0U2libGluZyx0LnJlbW92ZUNoaWxkKG4pLG49aTtpZihlLnN0cmlwV2hpdGVTcGFjZSYmIXIudGV4dENvbnRlbnQudHJpbSgpKXt0LnJlbW92ZUNoaWxkKHIpO2NvbnRpbnVlfX1sZXQgYT17cGFyZW50SW5kZXg6byxwYXJlbnRJbmZvOm59O3RoaXMuX3BhcnNlVGVtcGxhdGVOb2RlKHIsZSxhKSYmKGEuaW5mb0luZGV4PWUubm9kZUluZm9MaXN0LnB1c2goYSktMSksci5wYXJlbnROb2RlJiZvKyt9fXN0YXRpYyBfcGFyc2VUZW1wbGF0ZU5lc3RlZFRlbXBsYXRlKHQsZSxuKXtsZXQgaT10LHI9dGhpcy5fcGFyc2VUZW1wbGF0ZShpLGUpO3JldHVybihyLmNvbnRlbnQ9aS5jb250ZW50Lm93bmVyRG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKS5hcHBlbmRDaGlsZChpLmNvbnRlbnQpLG4udGVtcGxhdGVJbmZvPXIsITB9c3RhdGljIF9wYXJzZVRlbXBsYXRlTm9kZUF0dHJpYnV0ZXModCxlLG4pe2xldCBpPSExLHI9QXJyYXkuZnJvbSh0LmF0dHJpYnV0ZXMpO2ZvcihsZXQgbyxhPXIubGVuZ3RoLTE7bz1yW2FdO2EtLSlpPXRoaXMuX3BhcnNlVGVtcGxhdGVOb2RlQXR0cmlidXRlKHQsZSxuLG8ubmFtZSxvLnZhbHVlKXx8aTtyZXR1cm4gaX1zdGF0aWMgX3BhcnNlVGVtcGxhdGVOb2RlQXR0cmlidXRlKHQsZSxuLGkscil7cmV0dXJuIm9uLSI9PT1pLnNsaWNlKDAsMyk/KHQucmVtb3ZlQXR0cmlidXRlKGkpLG4uZXZlbnRzPW4uZXZlbnRzfHxbXSxuLmV2ZW50cy5wdXNoKHtuYW1lOmkuc2xpY2UoMyksdmFsdWU6cn0pLCEwKToiaWQiPT09aSYmKG4uaWQ9ciwhMCl9c3RhdGljIF9jb250ZW50Rm9yVGVtcGxhdGUodCl7bGV0IGU9dC5fdGVtcGxhdGVJbmZvO3JldHVybiBlJiZlLmNvbnRlbnR8fHQuY29udGVudH1fc3RhbXBUZW1wbGF0ZSh0LGUpe3QmJiF0LmNvbnRlbnQmJndpbmRvdy5IVE1MVGVtcGxhdGVFbGVtZW50JiZIVE1MVGVtcGxhdGVFbGVtZW50LmRlY29yYXRlJiZIVE1MVGVtcGxhdGVFbGVtZW50LmRlY29yYXRlKHQpO2xldCBuPShlPWV8fHRoaXMuY29uc3RydWN0b3IuX3BhcnNlVGVtcGxhdGUodCkpLm5vZGVJbmZvTGlzdCxpPWRvY3VtZW50LmltcG9ydE5vZGUoZS5jb250ZW50fHx0LmNvbnRlbnQsITApO2kuX19ub0luc2VydGlvblBvaW50PSFlLmhhc0luc2VydGlvblBvaW50O2xldCByPWkubm9kZUxpc3Q9bmV3IEFycmF5KG4ubGVuZ3RoKTtpLiQ9e307Zm9yKGxldCB0LG89MCxhPW4ubGVuZ3RoO288YSYmKHQ9bltvXSk7bysrKXtsZXQgbj1yW29dPWt0KGksdCk7THQoMCxpLiQsbix0KSxOdCgwLG4sdCxlKSxQdCh0aGlzLG4sdCl9cmV0dXJuIGk9aSxpfV9hZGRNZXRob2RFdmVudExpc3RlbmVyVG9Ob2RlKHQsZSxuLGkpe2xldCByPShmdW5jdGlvbiBvKHQsZSxuKXtyZXR1cm4gdD10Ll9tZXRob2RIb3N0fHx0LGZ1bmN0aW9uKGUpe3Rbbl0/dFtuXShlLGUuZGV0YWlsKTpjb25zb2xlLndhcm4oImxpc3RlbmVyIG1ldGhvZCBgIituKyJgIG5vdCBkZWZpbmVkIil9fSkoaT1pfHx0LDAsbik7cmV0dXJuIHRoaXMuX2FkZEV2ZW50TGlzdGVuZXJUb05vZGUodCxlLHIpLHJ9X2FkZEV2ZW50TGlzdGVuZXJUb05vZGUodCxlLG4pe3QuYWRkRXZlbnRMaXN0ZW5lcihlLG4pfV9yZW1vdmVFdmVudExpc3RlbmVyRnJvbU5vZGUodCxlLG4pe3QucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLG4pfX0pKTsKLyoqCiAgICAgKiBAZmlsZW92ZXJ2aWV3CiAgICAgKiBAc3VwcHJlc3Mge2NoZWNrUHJvdG90eXBhbFR5cGVzfQogICAgICogQGxpY2Vuc2UgQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgICAqIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgICogaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQKICAgICAqIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkKICAgICAqIGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkKICAgICAqIEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAKICAgICAqIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICAqL2xldCBPdD0wO2NvbnN0IFJ0PVtdLHp0PXtDT01QVVRFOiJfX2NvbXB1dGVFZmZlY3RzIixSRUZMRUNUOiJfX3JlZmxlY3RFZmZlY3RzIixOT1RJRlk6Il9fbm90aWZ5RWZmZWN0cyIsUFJPUEFHQVRFOiJfX3Byb3BhZ2F0ZUVmZmVjdHMiLE9CU0VSVkU6Il9fb2JzZXJ2ZUVmZmVjdHMiLFJFQURfT05MWToiX19yZWFkT25seSJ9LER0PS9bQS1aXS87ZnVuY3Rpb24gQnQodCxlLG4pe2xldCBpPXRbZV07aWYoaSl7aWYoIXQuaGFzT3duUHJvcGVydHkoZSkmJihpPXRbZV09T2JqZWN0LmNyZWF0ZSh0W2VdKSxuKSlmb3IobGV0IHQgaW4gaSl7bGV0IGU9aVt0XSxuPWlbdF09QXJyYXkoZS5sZW5ndGgpO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKW5bdF09ZVt0XX19ZWxzZSBpPXRbZV09e307cmV0dXJuIGl9ZnVuY3Rpb24gSHQodCxlLG4saSxyLG8pe2lmKGUpe2xldCBhPSExO2NvbnN0IHM9T3QrKztmb3IobGV0IGwgaW4gbil7bGV0IGM9ZVtyPyQobCk6bF07aWYoYylmb3IobGV0IGUsdT0wLGg9Yy5sZW5ndGg7dTxoJiYoZT1jW3VdKTt1KyspZS5pbmZvJiZlLmluZm8ubGFzdFJ1bj09PXN8fHImJiFWdChsLGUudHJpZ2dlcil8fChlLmluZm8mJihlLmluZm8ubGFzdFJ1bj1zKSxlLmZuKHQsbCxuLGksZS5pbmZvLHIsbyksYT0hMCl9cmV0dXJuIGF9cmV0dXJuITF9ZnVuY3Rpb24gRnQodCxlLG4saSxyLG8sYSxzKXtsZXQgbD0hMSxjPWVbYT8kKGkpOmldO2lmKGMpZm9yKGxldCBlLHU9MCxoPWMubGVuZ3RoO3U8aCYmKGU9Y1t1XSk7dSsrKWUuaW5mbyYmZS5pbmZvLmxhc3RSdW49PT1ufHxhJiYhVnQoaSxlLnRyaWdnZXIpfHwoZS5pbmZvJiYoZS5pbmZvLmxhc3RSdW49biksZS5mbih0LGkscixvLGUuaW5mbyxhLHMpLGw9ITApO3JldHVybiBsfWZ1bmN0aW9uIFZ0KHQsZSl7aWYoZSl7bGV0IG49ZS5uYW1lO3JldHVybiBuPT10fHwhKCFlLnN0cnVjdHVyZWR8fCFLKG4sdCkpfHwhKCFlLndpbGRjYXJkfHwhWihuLHQpKX1yZXR1cm4hMH1mdW5jdGlvbiBVdCh0LGUsbixpLHIpe2xldCBvPSJzdHJpbmciPT10eXBlb2Ygci5tZXRob2Q/dFtyLm1ldGhvZF06ci5tZXRob2QsYT1yLnByb3BlcnR5O28/by5jYWxsKHQsdC5fX2RhdGFbYV0saVthXSk6ci5keW5hbWljRm58fGNvbnNvbGUud2Fybigib2JzZXJ2ZXIgbWV0aG9kIGAiK3IubWV0aG9kKyJgIG5vdCBkZWZpbmVkIil9ZnVuY3Rpb24ganQodCxlLG4pe2xldCBpPSQoZSk7cmV0dXJuIGkhPT1lJiYoR3QodCxsdChpKSsiLWNoYW5nZWQiLG5bZV0sZSksITApfWZ1bmN0aW9uIEd0KHQsZSxuLGkpe2xldCByPXt2YWx1ZTpuLHF1ZXVlUHJvcGVydHk6ITB9O2kmJihyLnBhdGg9aSksWSh0KS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChlLHtkZXRhaWw6cn0pKX1mdW5jdGlvbiBXdCh0LGUsbixpLHIsbyl7bGV0IGE9KG8/JChlKTplKSE9ZT9lOm51bGwscz1hP250KHQsYSk6dC5fX2RhdGFbZV07YSYmdm9pZCAwPT09cyYmKHM9bltlXSksR3QodCxyLmV2ZW50TmFtZSxzLGEpfWZ1bmN0aW9uIHF0KHQsZSxuLGkscil7bGV0IG89dC5fX2RhdGFbZV07eSYmKG89eShvLHIuYXR0ck5hbWUsImF0dHJpYnV0ZSIsdCkpLHQuX3Byb3BlcnR5VG9BdHRyaWJ1dGUoZSxyLmF0dHJOYW1lLG8pfWNvbnN0IFl0PSh0LGUsbik9PntsZXQgaT0wLHI9ZS5sZW5ndGgtMSxvPS0xO2Zvcig7aTw9cjspe2NvbnN0IGE9aStyPj4xLHM9bi5nZXQoZVthXS5tZXRob2RJbmZvKS1uLmdldCh0Lm1ldGhvZEluZm8pO2lmKHM8MClpPWErMTtlbHNle2lmKCEocz4wKSl7bz1hO2JyZWFrfXI9YS0xfX1vPDAmJihvPXIrMSksZS5zcGxpY2UobywwLHQpfSxYdD0odCxlLG4saSxyKT0+e2NvbnN0IG89ZVtyPyQodCk6dF07aWYobylmb3IobGV0IGU9MDtlPG8ubGVuZ3RoO2UrKyl7Y29uc3QgYT1vW2VdO2EuaW5mby5sYXN0UnVuPT09T3R8fHImJiFWdCh0LGEudHJpZ2dlcil8fChhLmluZm8ubGFzdFJ1bj1PdCxZdChhLmluZm8sbixpKSl9fTtmdW5jdGlvbiAkdCh0LGUsbixpLHIpe2xldCBvPW5lKHQsZSxuLDAscik7aWYobz09PVJ0KXJldHVybiExO2xldCBhPXIubWV0aG9kSW5mbztyZXR1cm4gdC5fX2RhdGFIYXNBY2Nlc3NvciYmdC5fX2RhdGFIYXNBY2Nlc3NvclthXT90Ll9zZXRQZW5kaW5nUHJvcGVydHkoYSxvLCEwKToodFthXT1vLCExKX1mdW5jdGlvbiBLdCh0LGUsbixpLHIsbyxhKXtuLmJpbmRpbmdzPW4uYmluZGluZ3N8fFtdO2xldCBzPXtraW5kOmksdGFyZ2V0OnIscGFydHM6byxsaXRlcmFsOmEsaXNDb21wb3VuZDoxIT09by5sZW5ndGh9O2lmKG4uYmluZGluZ3MucHVzaChzKSwoZnVuY3Rpb24gbCh0KXtyZXR1cm4gQm9vbGVhbih0LnRhcmdldCkmJiJhdHRyaWJ1dGUiIT10LmtpbmQmJiJ0ZXh0IiE9dC5raW5kJiYhdC5pc0NvbXBvdW5kJiYieyI9PT10LnBhcnRzWzBdLm1vZGV9KShzKSl7bGV0e2V2ZW50OnQsbmVnYXRlOmV9PXMucGFydHNbMF07cy5saXN0ZW5lckV2ZW50PXR8fGx0KHIpKyItY2hhbmdlZCIscy5saXN0ZW5lck5lZ2F0ZT1lfWxldCBjPWUubm9kZUluZm9MaXN0Lmxlbmd0aDtmb3IobGV0IG49MDtuPHMucGFydHMubGVuZ3RoO24rKyl7bGV0IGk9cy5wYXJ0c1tuXTtpLmNvbXBvdW5kSW5kZXg9bixadCh0LGUscyxpLGMpfX1mdW5jdGlvbiBadCh0LGUsbixpLHIpe2lmKCFpLmxpdGVyYWwpaWYoImF0dHJpYnV0ZSI9PT1uLmtpbmQmJiItIj09PW4udGFyZ2V0WzBdKWNvbnNvbGUud2FybigiQ2Fubm90IHNldCBhdHRyaWJ1dGUgIituLnRhcmdldCsnIGJlY2F1c2UgIi0iIGlzIG5vdCBhIHZhbGlkIGF0dHJpYnV0ZSBzdGFydGluZyBjaGFyYWN0ZXInKTtlbHNle2xldCBvPWkuZGVwZW5kZW5jaWVzLGE9e2luZGV4OnIsYmluZGluZzpuLHBhcnQ6aSxldmFsdWF0b3I6dH07Zm9yKGxldCBuPTA7bjxvLmxlbmd0aDtuKyspe2xldCBpPW9bbl07InN0cmluZyI9PXR5cGVvZiBpJiYoaT1zZShpKSxpLndpbGRjYXJkPSEwKSx0Ll9hZGRUZW1wbGF0ZVByb3BlcnR5RWZmZWN0KGUsaS5yb290UHJvcGVydHkse2ZuOkp0LGluZm86YSx0cmlnZ2VyOml9KX19fWZ1bmN0aW9uIEp0KHQsZSxuLGkscixvLGEpe2xldCBzPWFbci5pbmRleF0sbD1yLmJpbmRpbmcsYz1yLnBhcnQ7aWYobyYmYy5zb3VyY2UmJmUubGVuZ3RoPmMuc291cmNlLmxlbmd0aCYmInByb3BlcnR5Ij09bC5raW5kJiYhbC5pc0NvbXBvdW5kJiZzLl9faXNQcm9wZXJ0eUVmZmVjdHNDbGllbnQmJnMuX19kYXRhSGFzQWNjZXNzb3ImJnMuX19kYXRhSGFzQWNjZXNzb3JbbC50YXJnZXRdKXtsZXQgaT1uW2VdO2U9SihjLnNvdXJjZSxsLnRhcmdldCxlKSxzLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgoZSxpLCExLCEwKSYmdC5fZW5xdWV1ZUNsaWVudChzKX1lbHNle2xldCBhPXIuZXZhbHVhdG9yLl9ldmFsdWF0ZUJpbmRpbmcodCxjLGUsbixpLG8pO2EhPT1SdCYmKGZ1bmN0aW9uIHUodCxlLG4saSxyKXtpZihyPShmdW5jdGlvbiBvKHQsZSxuLGkpe2lmKG4uaXNDb21wb3VuZCl7bGV0IHI9dC5fX2RhdGFDb21wb3VuZFN0b3JhZ2Vbbi50YXJnZXRdO3JbaS5jb21wb3VuZEluZGV4XT1lLGU9ci5qb2luKCIiKX1yZXR1cm4iYXR0cmlidXRlIiE9PW4ua2luZCYmKCJ0ZXh0Q29udGVudCIhPT1uLnRhcmdldCYmKCJ2YWx1ZSIhPT1uLnRhcmdldHx8ImlucHV0IiE9PXQubG9jYWxOYW1lJiYidGV4dGFyZWEiIT09dC5sb2NhbE5hbWUpfHwoZT1udWxsPT1lPyIiOmUpKSxlfSkoZSxyLG4saSkseSYmKHI9eShyLG4udGFyZ2V0LG4ua2luZCxlKSksImF0dHJpYnV0ZSI9PW4ua2luZCl0Ll92YWx1ZVRvTm9kZUF0dHJpYnV0ZShlLHIsbi50YXJnZXQpO2Vsc2V7bGV0IGk9bi50YXJnZXQ7ZS5fX2lzUHJvcGVydHlFZmZlY3RzQ2xpZW50JiZlLl9fZGF0YUhhc0FjY2Vzc29yJiZlLl9fZGF0YUhhc0FjY2Vzc29yW2ldP2VbenQuUkVBRF9PTkxZXSYmZVt6dC5SRUFEX09OTFldW2ldfHxlLl9zZXRQZW5kaW5nUHJvcGVydHkoaSxyKSYmdC5fZW5xdWV1ZUNsaWVudChlKTp0Ll9zZXRVbm1hbmFnZWRQcm9wZXJ0eVRvTm9kZShlLGkscil9fSkodCxzLGwsYyxhKX19ZnVuY3Rpb24gUXQodCxlKXtpZihlLmlzQ29tcG91bmQpe2xldCBuPXQuX19kYXRhQ29tcG91bmRTdG9yYWdlfHwodC5fX2RhdGFDb21wb3VuZFN0b3JhZ2U9e30pLGk9ZS5wYXJ0cyxyPW5ldyBBcnJheShpLmxlbmd0aCk7Zm9yKGxldCB0PTA7dDxpLmxlbmd0aDt0Kyspclt0XT1pW3RdLmxpdGVyYWw7bGV0IG89ZS50YXJnZXQ7bltvXT1yLGUubGl0ZXJhbCYmInByb3BlcnR5Ij09ZS5raW5kJiYoImNsYXNzTmFtZSI9PT1vJiYodD1ZKHQpKSx0W29dPWUubGl0ZXJhbCl9fWZ1bmN0aW9uIHRlKHQsZSxuKXtpZihuLmxpc3RlbmVyRXZlbnQpe2xldCBpPW4ucGFydHNbMF07dC5hZGRFdmVudExpc3RlbmVyKG4ubGlzdGVuZXJFdmVudCwoZnVuY3Rpb24odCl7IShmdW5jdGlvbiByKHQsZSxuLGksbyl7bGV0IGEscz10LmRldGFpbCxsPXMmJnMucGF0aDtsPyhpPUoobixpLGwpLGE9cyYmcy52YWx1ZSk6YT10LmN1cnJlbnRUYXJnZXRbbl0sYT1vPyFhOmEsZVt6dC5SRUFEX09OTFldJiZlW3p0LlJFQURfT05MWV1baV18fCFlLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgoaSxhLCEwLEJvb2xlYW4obCkpfHxzJiZzLnF1ZXVlUHJvcGVydHl8fGUuX2ludmFsaWRhdGVQcm9wZXJ0aWVzKCl9KSh0LGUsbi50YXJnZXQsaS5zb3VyY2UsaS5uZWdhdGUpfSkpfX1mdW5jdGlvbiBlZSh0LGUsbixpLHIsbyl7bGV0IGE9e21ldGhvZE5hbWU6ZS5tZXRob2ROYW1lLGFyZ3M6ZS5hcmdzLG1ldGhvZEluZm86cixkeW5hbWljRm46bz1lLnN0YXRpY3x8byYmKCJvYmplY3QiIT10eXBlb2Ygb3x8b1tlLm1ldGhvZE5hbWVdKX07Zm9yKGxldCByLG89MDtvPGUuYXJncy5sZW5ndGgmJihyPWUuYXJnc1tvXSk7bysrKXIubGl0ZXJhbHx8dC5fYWRkUHJvcGVydHlFZmZlY3Qoci5yb290UHJvcGVydHksbix7Zm46aSxpbmZvOmEsdHJpZ2dlcjpyfSk7cmV0dXJuIG8mJnQuX2FkZFByb3BlcnR5RWZmZWN0KGUubWV0aG9kTmFtZSxuLHtmbjppLGluZm86YX0pLGF9ZnVuY3Rpb24gbmUodCxlLG4saSxyKXtsZXQgbz10Ll9tZXRob2RIb3N0fHx0LGE9b1tyLm1ldGhvZE5hbWVdO2lmKGEpe2xldCBpPXQuX21hcnNoYWxBcmdzKHIuYXJncyxlLG4pO3JldHVybiBpPT09UnQ/UnQ6YS5hcHBseShvLGkpfXIuZHluYW1pY0ZufHxjb25zb2xlLndhcm4oIm1ldGhvZCBgIityLm1ldGhvZE5hbWUrImAgbm90IGRlZmluZWQiKX1jb25zdCBpZT1bXSxyZT1uZXcgUmVnRXhwKCIoXFxbXFxbfHt7KVxccyooPzooISlcXHMqKT8oKD86W2EtekEtWl8kXVtcXHcuOiRcXC0qXSopXFxzKig/OlxcKFxccyooPzooPzooPzooKD86W2EtekEtWl8kXVtcXHcuOiRcXC0qXSopfCg/OlstK10/WzAtOV0qXFwuP1swLTldKyg/OltlRV1bLStdP1swLTldKyk/KXwoPzooPzonKD86W14nXFxcXF18XFxcXC4pKicpfCg/OlwiKD86W15cIlxcXFxdfFxcXFwuKSpcIikpKVxccyopKD86LFxccyooPzooKD86W2EtekEtWl8kXVtcXHcuOiRcXC0qXSopfCg/OlstK10/WzAtOV0qXFwuP1swLTldKyg/OltlRV1bLStdP1swLTldKyk/KXwoPzooPzonKD86W14nXFxcXF18XFxcXC4pKicpfCg/OlwiKD86W15cIlxcXFxdfFxcXFwuKSpcIikpKVxccyopKSopPylcXClcXHMqKT8pKD86XV18fX0pIiwiZyIpO2Z1bmN0aW9uIG9lKHQpe2xldCBlPSIiO2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKWUrPXRbbl0ubGl0ZXJhbHx8IiI7cmV0dXJuIGV9ZnVuY3Rpb24gYWUodCl7bGV0IGU9dC5tYXRjaCgvKFteXHNdKz8pXCgoW1xzXFNdKilcKS8pO2lmKGUpe2xldCB0PXttZXRob2ROYW1lOmVbMV0sc3RhdGljOiEwLGFyZ3M6aWV9O3JldHVybiBlWzJdLnRyaW0oKT8oZnVuY3Rpb24gbih0LGUpe3JldHVybiBlLmFyZ3M9dC5tYXAoKGZ1bmN0aW9uKHQpe2xldCBuPXNlKHQpO3JldHVybiBuLmxpdGVyYWx8fChlLnN0YXRpYz0hMSksbn0pLHRoaXMpLGV9KShlWzJdLnJlcGxhY2UoL1xcLC9nLCImY29tbWE7Iikuc3BsaXQoIiwiKSx0KTp0fXJldHVybiBudWxsfWZ1bmN0aW9uIHNlKHQpe2xldCBlPXQudHJpbSgpLnJlcGxhY2UoLyZjb21tYTsvZywiLCIpLnJlcGxhY2UoL1xcKC4pL2csIiQxIiksbj17bmFtZTplLHZhbHVlOiIiLGxpdGVyYWw6ITF9LGk9ZVswXTtzd2l0Y2goIi0iPT09aSYmKGk9ZVsxXSksaT49IjAiJiZpPD0iOSImJihpPSIjIiksaSl7Y2FzZSInIjpjYXNlJyInOm4udmFsdWU9ZS5zbGljZSgxLC0xKSxuLmxpdGVyYWw9ITA7YnJlYWs7Y2FzZSIjIjpuLnZhbHVlPU51bWJlcihlKSxuLmxpdGVyYWw9ITB9cmV0dXJuIG4ubGl0ZXJhbHx8KG4ucm9vdFByb3BlcnR5PSQoZSksbi5zdHJ1Y3R1cmVkPVgoZSksbi5zdHJ1Y3R1cmVkJiYobi53aWxkY2FyZD0iLioiPT1lLnNsaWNlKC0yKSxuLndpbGRjYXJkJiYobi5uYW1lPWUuc2xpY2UoMCwtMikpKSksbn1mdW5jdGlvbiBsZSh0LGUsbil7bGV0IGk9bnQodCxuKTtyZXR1cm4gdm9pZCAwPT09aSYmKGk9ZVtuXSksaX1mdW5jdGlvbiBjZSh0LGUsbixpKXtjb25zdCByPXtpbmRleFNwbGljZXM6aX07RSYmIXQuX292ZXJyaWRlTGVnYWN5VW5kZWZpbmVkJiYoZS5zcGxpY2VzPXIpLHQubm90aWZ5UGF0aChuKyIuc3BsaWNlcyIsciksdC5ub3RpZnlQYXRoKG4rIi5sZW5ndGgiLGUubGVuZ3RoKSxFJiYhdC5fb3ZlcnJpZGVMZWdhY3lVbmRlZmluZWQmJihyLmluZGV4U3BsaWNlcz1bXSl9ZnVuY3Rpb24gdWUodCxlLG4saSxyLG8pe2NlKHQsZSxuLFt7aW5kZXg6aSxhZGRlZENvdW50OnIscmVtb3ZlZDpvLG9iamVjdDplLHR5cGU6InNwbGljZSJ9XSl9Y29uc3QgaGU9SSgodD0+e2NvbnN0IGU9SXQoTXQodCkpO3JldHVybiBjbGFzcyBleHRlbmRzIGV7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX19pc1Byb3BlcnR5RWZmZWN0c0NsaWVudD0hMH1nZXQgUFJPUEVSVFlfRUZGRUNUX1RZUEVTKCl7cmV0dXJuIHp0fV9pbml0aWFsaXplUHJvcGVydGllcygpe3N1cGVyLl9pbml0aWFsaXplUHJvcGVydGllcygpLHRoaXMuX3JlZ2lzdGVySG9zdCgpLHRoaXMuX19kYXRhQ2xpZW50c1JlYWR5PSExLHRoaXMuX19kYXRhUGVuZGluZ0NsaWVudHM9bnVsbCx0aGlzLl9fZGF0YVRvTm90aWZ5PW51bGwsdGhpcy5fX2RhdGFMaW5rZWRQYXRocz1udWxsLHRoaXMuX19kYXRhSGFzUGF0aHM9ITEsdGhpcy5fX2RhdGFDb21wb3VuZFN0b3JhZ2U9dGhpcy5fX2RhdGFDb21wb3VuZFN0b3JhZ2V8fG51bGwsdGhpcy5fX2RhdGFIb3N0PXRoaXMuX19kYXRhSG9zdHx8bnVsbCx0aGlzLl9fZGF0YVRlbXA9e30sdGhpcy5fX2RhdGFDbGllbnRzSW5pdGlhbGl6ZWQ9ITF9X3JlZ2lzdGVySG9zdCgpe2lmKGRlLmxlbmd0aCl7bGV0IHQ9ZGVbZGUubGVuZ3RoLTFdO3QuX2VucXVldWVDbGllbnQodGhpcyksdGhpcy5fX2RhdGFIb3N0PXR9fV9pbml0aWFsaXplUHJvdG9Qcm9wZXJ0aWVzKHQpe3RoaXMuX19kYXRhPU9iamVjdC5jcmVhdGUodCksdGhpcy5fX2RhdGFQZW5kaW5nPU9iamVjdC5jcmVhdGUodCksdGhpcy5fX2RhdGFPbGQ9e319X2luaXRpYWxpemVJbnN0YW5jZVByb3BlcnRpZXModCl7bGV0IGU9dGhpc1t6dC5SRUFEX09OTFldO2ZvcihsZXQgbiBpbiB0KWUmJmVbbl18fCh0aGlzLl9fZGF0YVBlbmRpbmc9dGhpcy5fX2RhdGFQZW5kaW5nfHx7fSx0aGlzLl9fZGF0YU9sZD10aGlzLl9fZGF0YU9sZHx8e30sdGhpcy5fX2RhdGFbbl09dGhpcy5fX2RhdGFQZW5kaW5nW25dPXRbbl0pfV9hZGRQcm9wZXJ0eUVmZmVjdCh0LGUsbil7dGhpcy5fY3JlYXRlUHJvcGVydHlBY2Nlc3Nvcih0LGU9PXp0LlJFQURfT05MWSk7bGV0IGk9QnQodGhpcyxlLCEwKVt0XTtpfHwoaT10aGlzW2VdW3RdPVtdKSxpLnB1c2gobil9X3JlbW92ZVByb3BlcnR5RWZmZWN0KHQsZSxuKXtsZXQgaT1CdCh0aGlzLGUsITApW3RdLHI9aS5pbmRleE9mKG4pO3I+PTAmJmkuc3BsaWNlKHIsMSl9X2hhc1Byb3BlcnR5RWZmZWN0KHQsZSl7bGV0IG49dGhpc1tlXTtyZXR1cm4gQm9vbGVhbihuJiZuW3RdKX1faGFzUmVhZE9ubHlFZmZlY3QodCl7cmV0dXJuIHRoaXMuX2hhc1Byb3BlcnR5RWZmZWN0KHQsenQuUkVBRF9PTkxZKX1faGFzTm90aWZ5RWZmZWN0KHQpe3JldHVybiB0aGlzLl9oYXNQcm9wZXJ0eUVmZmVjdCh0LHp0Lk5PVElGWSl9X2hhc1JlZmxlY3RFZmZlY3QodCl7cmV0dXJuIHRoaXMuX2hhc1Byb3BlcnR5RWZmZWN0KHQsenQuUkVGTEVDVCl9X2hhc0NvbXB1dGVkRWZmZWN0KHQpe3JldHVybiB0aGlzLl9oYXNQcm9wZXJ0eUVmZmVjdCh0LHp0LkNPTVBVVEUpfV9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgodCxlLG4saSl7aWYoaXx8JChBcnJheS5pc0FycmF5KHQpP3RbMF06dCkhPT10KXtpZighaSl7bGV0IG49bnQodGhpcyx0KTtpZighKHQ9aXQodGhpcyx0LGUpKXx8IXN1cGVyLl9zaG91bGRQcm9wZXJ0eUNoYW5nZSh0LGUsbikpcmV0dXJuITF9aWYodGhpcy5fX2RhdGFIYXNQYXRocz0hMCx0aGlzLl9zZXRQZW5kaW5nUHJvcGVydHkodCxlLG4pKXJldHVybihmdW5jdGlvbiByKHQsZSxuKXtsZXQgaT10Ll9fZGF0YUxpbmtlZFBhdGhzO2lmKGkpe2xldCByO2ZvcihsZXQgbyBpbiBpKXtsZXQgYT1pW29dO1oobyxlKT8ocj1KKG8sYSxlKSx0Ll9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgocixuLCEwLCEwKSk6WihhLGUpJiYocj1KKGEsbyxlKSx0Ll9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgocixuLCEwLCEwKSl9fX0pKHRoaXMsdCxlKSwhMH1lbHNle2lmKHRoaXMuX19kYXRhSGFzQWNjZXNzb3ImJnRoaXMuX19kYXRhSGFzQWNjZXNzb3JbdF0pcmV0dXJuIHRoaXMuX3NldFBlbmRpbmdQcm9wZXJ0eSh0LGUsbik7dGhpc1t0XT1lfXJldHVybiExfV9zZXRVbm1hbmFnZWRQcm9wZXJ0eVRvTm9kZSh0LGUsbil7bj09PXRbZV0mJiJvYmplY3QiIT10eXBlb2Ygbnx8KCJjbGFzc05hbWUiPT09ZSYmKHQ9WSh0KSksdFtlXT1uKX1fc2V0UGVuZGluZ1Byb3BlcnR5KHQsZSxuKXtsZXQgaT10aGlzLl9fZGF0YUhhc1BhdGhzJiZYKHQpO3JldHVybiEhdGhpcy5fc2hvdWxkUHJvcGVydHlDaGFuZ2UodCxlLChpP3RoaXMuX19kYXRhVGVtcDp0aGlzLl9fZGF0YSlbdF0pJiYodGhpcy5fX2RhdGFQZW5kaW5nfHwodGhpcy5fX2RhdGFQZW5kaW5nPXt9LHRoaXMuX19kYXRhT2xkPXt9KSx0IGluIHRoaXMuX19kYXRhT2xkfHwodGhpcy5fX2RhdGFPbGRbdF09dGhpcy5fX2RhdGFbdF0pLGk/dGhpcy5fX2RhdGFUZW1wW3RdPWU6dGhpcy5fX2RhdGFbdF09ZSx0aGlzLl9fZGF0YVBlbmRpbmdbdF09ZSwoaXx8dGhpc1t6dC5OT1RJRlldJiZ0aGlzW3p0Lk5PVElGWV1bdF0pJiYodGhpcy5fX2RhdGFUb05vdGlmeT10aGlzLl9fZGF0YVRvTm90aWZ5fHx7fSx0aGlzLl9fZGF0YVRvTm90aWZ5W3RdPW4pLCEwKX1fc2V0UHJvcGVydHkodCxlKXt0aGlzLl9zZXRQZW5kaW5nUHJvcGVydHkodCxlLCEwKSYmdGhpcy5faW52YWxpZGF0ZVByb3BlcnRpZXMoKX1faW52YWxpZGF0ZVByb3BlcnRpZXMoKXt0aGlzLl9fZGF0YVJlYWR5JiZ0aGlzLl9mbHVzaFByb3BlcnRpZXMoKX1fZW5xdWV1ZUNsaWVudCh0KXt0aGlzLl9fZGF0YVBlbmRpbmdDbGllbnRzPXRoaXMuX19kYXRhUGVuZGluZ0NsaWVudHN8fFtdLHQhPT10aGlzJiZ0aGlzLl9fZGF0YVBlbmRpbmdDbGllbnRzLnB1c2godCl9X2ZsdXNoQ2xpZW50cygpe3RoaXMuX19kYXRhQ2xpZW50c1JlYWR5P3RoaXMuX19lbmFibGVPckZsdXNoQ2xpZW50cygpOih0aGlzLl9fZGF0YUNsaWVudHNSZWFkeT0hMCx0aGlzLl9yZWFkeUNsaWVudHMoKSx0aGlzLl9fZGF0YVJlYWR5PSEwKX1fX2VuYWJsZU9yRmx1c2hDbGllbnRzKCl7bGV0IHQ9dGhpcy5fX2RhdGFQZW5kaW5nQ2xpZW50cztpZih0KXt0aGlzLl9fZGF0YVBlbmRpbmdDbGllbnRzPW51bGw7Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspe2xldCBuPXRbZV07bi5fX2RhdGFFbmFibGVkP24uX19kYXRhUGVuZGluZyYmbi5fZmx1c2hQcm9wZXJ0aWVzKCk6bi5fZW5hYmxlUHJvcGVydGllcygpfX19X3JlYWR5Q2xpZW50cygpe3RoaXMuX19lbmFibGVPckZsdXNoQ2xpZW50cygpfXNldFByb3BlcnRpZXModCxlKXtmb3IobGV0IG4gaW4gdCkhZSYmdGhpc1t6dC5SRUFEX09OTFldJiZ0aGlzW3p0LlJFQURfT05MWV1bbl18fHRoaXMuX3NldFBlbmRpbmdQcm9wZXJ0eU9yUGF0aChuLHRbbl0sITApO3RoaXMuX2ludmFsaWRhdGVQcm9wZXJ0aWVzKCl9cmVhZHkoKXt0aGlzLl9mbHVzaFByb3BlcnRpZXMoKSx0aGlzLl9fZGF0YUNsaWVudHNSZWFkeXx8dGhpcy5fZmx1c2hDbGllbnRzKCksdGhpcy5fX2RhdGFQZW5kaW5nJiZ0aGlzLl9mbHVzaFByb3BlcnRpZXMoKX1fcHJvcGVydGllc0NoYW5nZWQodCxlLG4pe2xldCBpLHI9dGhpcy5fX2RhdGFIYXNQYXRoczt0aGlzLl9fZGF0YUhhc1BhdGhzPSExLChmdW5jdGlvbiBvKHQsZSxuLGkpe2xldCByPXRbenQuQ09NUFVURV07aWYocilpZihUKXtPdCsrO2NvbnN0IG89KGZ1bmN0aW9uIG8odCl7bGV0IGU9dC5jb25zdHJ1Y3Rvci5fX29yZGVyZWRDb21wdXRlZERlcHM7aWYoIWUpe2U9bmV3IE1hcDtjb25zdCBuPXRbenQuQ09NUFVURV07bGV0IGkse2NvdW50czpyLHJlYWR5Om8sdG90YWw6YX09KGZ1bmN0aW9uIG4odCl7Y29uc3QgZT10Ll9fY29tcHV0ZUluZm8sbj17fSxpPXRbenQuQ09NUFVURV0scj1bXTtsZXQgbz0wO2ZvcihsZXQgdCBpbiBlKXtjb25zdCBpPWVbdF07bys9blt0XT1pLmFyZ3MuZmlsdGVyKCh0PT4hdC5saXRlcmFsKSkubGVuZ3RoKyhpLmR5bmFtaWNGbj8xOjApfWZvcihsZXQgdCBpbiBpKWVbdF18fHIucHVzaCh0KTtyZXR1cm57Y291bnRzOm4scmVhZHk6cix0b3RhbDpvfX0pKHQpO2Zvcig7aT1vLnNoaWZ0KCk7KXtlLnNldChpLGUuc2l6ZSk7Y29uc3QgdD1uW2ldO3QmJnQuZm9yRWFjaCgodD0+e2NvbnN0IGU9dC5pbmZvLm1ldGhvZEluZm87LS1hLDA9PS0tcltlXSYmby5wdXNoKGUpfSkpfTAhPT1hJiZjb25zb2xlLndhcm4oYENvbXB1dGVkIGdyYXBoIGZvciAke3QubG9jYWxOYW1lfSBpbmNvbXBsZXRlOyBjaXJjdWxhcj9gKSx0LmNvbnN0cnVjdG9yLl9fb3JkZXJlZENvbXB1dGVkRGVwcz1lfXJldHVybiBlfSkodCksYT1bXTtmb3IobGV0IHQgaW4gZSlYdCh0LHIsYSxvLGkpO2xldCBzO2Zvcig7cz1hLnNoaWZ0KCk7KSR0KHQsIiIsZSwwLHMpJiZYdChzLm1ldGhvZEluZm8scixhLG8saSk7T2JqZWN0LmFzc2lnbihuLHQuX19kYXRhT2xkKSxPYmplY3QuYXNzaWduKGUsdC5fX2RhdGFQZW5kaW5nKSx0Ll9fZGF0YVBlbmRpbmc9bnVsbH1lbHNle2xldCBvPWU7Zm9yKDtIdCh0LHIsbyxuLGkpOylPYmplY3QuYXNzaWduKG4sdC5fX2RhdGFPbGQpLE9iamVjdC5hc3NpZ24oZSx0Ll9fZGF0YVBlbmRpbmcpLG89dC5fX2RhdGFQZW5kaW5nLHQuX19kYXRhUGVuZGluZz1udWxsfX0pKHRoaXMsZSxuLHIpLGk9dGhpcy5fX2RhdGFUb05vdGlmeSx0aGlzLl9fZGF0YVRvTm90aWZ5PW51bGwsdGhpcy5fcHJvcGFnYXRlUHJvcGVydHlDaGFuZ2VzKGUsbixyKSx0aGlzLl9mbHVzaENsaWVudHMoKSxIdCh0aGlzLHRoaXNbenQuUkVGTEVDVF0sZSxuLHIpLEh0KHRoaXMsdGhpc1t6dC5PQlNFUlZFXSxlLG4sciksaSYmKGZ1bmN0aW9uIGEodCxlLG4saSxyKXtsZXQgbyxhLHM9dFt6dC5OT1RJRlldLGw9T3QrKztmb3IobGV0IGEgaW4gZSllW2FdJiYocyYmRnQodCxzLGwsYSxuLGkscil8fHImJmp0KHQsYSxuKSkmJihvPSEwKTtvJiYoYT10Ll9fZGF0YUhvc3QpJiZhLl9pbnZhbGlkYXRlUHJvcGVydGllcyYmYS5faW52YWxpZGF0ZVByb3BlcnRpZXMoKX0pKHRoaXMsaSxlLG4sciksMT09dGhpcy5fX2RhdGFDb3VudGVyJiYodGhpcy5fX2RhdGFUZW1wPXt9KX1fcHJvcGFnYXRlUHJvcGVydHlDaGFuZ2VzKHQsZSxuKXt0aGlzW3p0LlBST1BBR0FURV0mJkh0KHRoaXMsdGhpc1t6dC5QUk9QQUdBVEVdLHQsZSxuKSx0aGlzLl9fdGVtcGxhdGVJbmZvJiZ0aGlzLl9ydW5FZmZlY3RzRm9yVGVtcGxhdGUodGhpcy5fX3RlbXBsYXRlSW5mbyx0LGUsbil9X3J1bkVmZmVjdHNGb3JUZW1wbGF0ZSh0LGUsbixpKXtjb25zdCByPShlLGkpPT57SHQodGhpcyx0LnByb3BlcnR5RWZmZWN0cyxlLG4saSx0Lm5vZGVMaXN0KTtmb3IobGV0IHI9dC5maXJzdENoaWxkO3I7cj1yLm5leHRTaWJsaW5nKXRoaXMuX3J1bkVmZmVjdHNGb3JUZW1wbGF0ZShyLGUsbixpKX07dC5ydW5FZmZlY3RzP3QucnVuRWZmZWN0cyhyLGUsaSk6cihlLGkpfWxpbmtQYXRocyh0LGUpe3Q9dHQodCksZT10dChlKSx0aGlzLl9fZGF0YUxpbmtlZFBhdGhzPXRoaXMuX19kYXRhTGlua2VkUGF0aHN8fHt9LHRoaXMuX19kYXRhTGlua2VkUGF0aHNbdF09ZX11bmxpbmtQYXRocyh0KXt0PXR0KHQpLHRoaXMuX19kYXRhTGlua2VkUGF0aHMmJmRlbGV0ZSB0aGlzLl9fZGF0YUxpbmtlZFBhdGhzW3RdfW5vdGlmeVNwbGljZXModCxlKXtsZXQgbj17cGF0aDoiIn07Y2UodGhpcyxudCh0aGlzLHQsbiksbi5wYXRoLGUpfWdldCh0LGUpe3JldHVybiBudChlfHx0aGlzLHQpfXNldCh0LGUsbil7bj9pdChuLHQsZSk6dGhpc1t6dC5SRUFEX09OTFldJiZ0aGlzW3p0LlJFQURfT05MWV1bdF18fHRoaXMuX3NldFBlbmRpbmdQcm9wZXJ0eU9yUGF0aCh0LGUsITApJiZ0aGlzLl9pbnZhbGlkYXRlUHJvcGVydGllcygpfXB1c2godCwuLi5lKXtsZXQgbj17cGF0aDoiIn0saT1udCh0aGlzLHQsbikscj1pLmxlbmd0aCxvPWkucHVzaCguLi5lKTtyZXR1cm4gZS5sZW5ndGgmJnVlKHRoaXMsaSxuLnBhdGgscixlLmxlbmd0aCxbXSksb31wb3AodCl7bGV0IGU9e3BhdGg6IiJ9LG49bnQodGhpcyx0LGUpLGk9Qm9vbGVhbihuLmxlbmd0aCkscj1uLnBvcCgpO3JldHVybiBpJiZ1ZSh0aGlzLG4sZS5wYXRoLG4ubGVuZ3RoLDAsW3JdKSxyfXNwbGljZSh0LGUsbiwuLi5pKXtsZXQgcixvPXtwYXRoOiIifSxhPW50KHRoaXMsdCxvKTtyZXR1cm4gZTwwP2U9YS5sZW5ndGgtTWF0aC5mbG9vcigtZSk6ZSYmKGU9TWF0aC5mbG9vcihlKSkscj0yPT09YXJndW1lbnRzLmxlbmd0aD9hLnNwbGljZShlKTphLnNwbGljZShlLG4sLi4uaSksKGkubGVuZ3RofHxyLmxlbmd0aCkmJnVlKHRoaXMsYSxvLnBhdGgsZSxpLmxlbmd0aCxyKSxyfXNoaWZ0KHQpe2xldCBlPXtwYXRoOiIifSxuPW50KHRoaXMsdCxlKSxpPUJvb2xlYW4obi5sZW5ndGgpLHI9bi5zaGlmdCgpO3JldHVybiBpJiZ1ZSh0aGlzLG4sZS5wYXRoLDAsMCxbcl0pLHJ9dW5zaGlmdCh0LC4uLmUpe2xldCBuPXtwYXRoOiIifSxpPW50KHRoaXMsdCxuKSxyPWkudW5zaGlmdCguLi5lKTtyZXR1cm4gZS5sZW5ndGgmJnVlKHRoaXMsaSxuLnBhdGgsMCxlLmxlbmd0aCxbXSkscn1ub3RpZnlQYXRoKHQsZSl7bGV0IG47aWYoMT09YXJndW1lbnRzLmxlbmd0aCl7bGV0IGk9e3BhdGg6IiJ9O2U9bnQodGhpcyx0LGkpLG49aS5wYXRofWVsc2Ugbj1BcnJheS5pc0FycmF5KHQpP3R0KHQpOnQ7dGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5T3JQYXRoKG4sZSwhMCwhMCkmJnRoaXMuX2ludmFsaWRhdGVQcm9wZXJ0aWVzKCl9X2NyZWF0ZVJlYWRPbmx5UHJvcGVydHkodCxlKXt0aGlzLl9hZGRQcm9wZXJ0eUVmZmVjdCh0LHp0LlJFQURfT05MWSksZSYmKHRoaXNbIl9zZXQiKyhmdW5jdGlvbiBuKHQpe3JldHVybiB0WzBdLnRvVXBwZXJDYXNlKCkrdC5zdWJzdHJpbmcoMSl9KSh0KV09ZnVuY3Rpb24oZSl7dGhpcy5fc2V0UHJvcGVydHkodCxlKX0pfV9jcmVhdGVQcm9wZXJ0eU9ic2VydmVyKHQsZSxuKXtsZXQgaT17cHJvcGVydHk6dCxtZXRob2Q6ZSxkeW5hbWljRm46Qm9vbGVhbihuKX07dGhpcy5fYWRkUHJvcGVydHlFZmZlY3QodCx6dC5PQlNFUlZFLHtmbjpVdCxpbmZvOmksdHJpZ2dlcjp7bmFtZTp0fX0pLG4mJnRoaXMuX2FkZFByb3BlcnR5RWZmZWN0KGUsenQuT0JTRVJWRSx7Zm46VXQsaW5mbzppLHRyaWdnZXI6e25hbWU6ZX19KX1fY3JlYXRlTWV0aG9kT2JzZXJ2ZXIodCxlKXtsZXQgbj1hZSh0KTtpZighbil0aHJvdyBuZXcgRXJyb3IoIk1hbGZvcm1lZCBvYnNlcnZlciBleHByZXNzaW9uICciK3QrIiciKTtlZSh0aGlzLG4senQuT0JTRVJWRSxuZSxudWxsLGUpfV9jcmVhdGVOb3RpZnlpbmdQcm9wZXJ0eSh0KXt0aGlzLl9hZGRQcm9wZXJ0eUVmZmVjdCh0LHp0Lk5PVElGWSx7Zm46V3QsaW5mbzp7ZXZlbnROYW1lOmx0KHQpKyItY2hhbmdlZCIscHJvcGVydHk6dH19KX1fY3JlYXRlUmVmbGVjdGVkUHJvcGVydHkodCl7bGV0IGU9dGhpcy5jb25zdHJ1Y3Rvci5hdHRyaWJ1dGVOYW1lRm9yUHJvcGVydHkodCk7Ii0iPT09ZVswXT9jb25zb2xlLndhcm4oIlByb3BlcnR5ICIrdCsiIGNhbm5vdCBiZSByZWZsZWN0ZWQgdG8gYXR0cmlidXRlICIrZSsnIGJlY2F1c2UgIi0iIGlzIG5vdCBhIHZhbGlkIHN0YXJ0aW5nIGF0dHJpYnV0ZSBuYW1lLiBVc2UgYSBsb3dlcmNhc2UgZmlyc3QgbGV0dGVyIGZvciB0aGUgcHJvcGVydHkgaW5zdGVhZC4nKTp0aGlzLl9hZGRQcm9wZXJ0eUVmZmVjdCh0LHp0LlJFRkxFQ1Qse2ZuOnF0LGluZm86e2F0dHJOYW1lOmV9fSl9X2NyZWF0ZUNvbXB1dGVkUHJvcGVydHkodCxlLG4pe2xldCBpPWFlKGUpO2lmKCFpKXRocm93IG5ldyBFcnJvcigiTWFsZm9ybWVkIGNvbXB1dGVkIGV4cHJlc3Npb24gJyIrZSsiJyIpO2NvbnN0IHI9ZWUodGhpcyxpLHp0LkNPTVBVVEUsJHQsdCxuKTtCdCh0aGlzLCJfX2NvbXB1dGVJbmZvIilbdF09cn1fbWFyc2hhbEFyZ3ModCxlLG4pe2NvbnN0IGk9dGhpcy5fX2RhdGEscj1bXTtmb3IobGV0IG89MCxhPXQubGVuZ3RoO288YTtvKyspe2xldHtuYW1lOmEsc3RydWN0dXJlZDpzLHdpbGRjYXJkOmwsdmFsdWU6YyxsaXRlcmFsOnV9PXRbb107aWYoIXUpaWYobCl7Y29uc3QgdD1aKGEsZSkscj1sZShpLG4sdD9lOmEpO2M9e3BhdGg6dD9lOmEsdmFsdWU6cixiYXNlOnQ/bnQoaSxhKTpyfX1lbHNlIGM9cz9sZShpLG4sYSk6aVthXTtpZihFJiYhdGhpcy5fb3ZlcnJpZGVMZWdhY3lVbmRlZmluZWQmJnZvaWQgMD09PWMmJnQubGVuZ3RoPjEpcmV0dXJuIFJ0O3Jbb109Y31yZXR1cm4gcn1zdGF0aWMgYWRkUHJvcGVydHlFZmZlY3QodCxlLG4pe3RoaXMucHJvdG90eXBlLl9hZGRQcm9wZXJ0eUVmZmVjdCh0LGUsbil9c3RhdGljIGNyZWF0ZVByb3BlcnR5T2JzZXJ2ZXIodCxlLG4pe3RoaXMucHJvdG90eXBlLl9jcmVhdGVQcm9wZXJ0eU9ic2VydmVyKHQsZSxuKX1zdGF0aWMgY3JlYXRlTWV0aG9kT2JzZXJ2ZXIodCxlKXt0aGlzLnByb3RvdHlwZS5fY3JlYXRlTWV0aG9kT2JzZXJ2ZXIodCxlKX1zdGF0aWMgY3JlYXRlTm90aWZ5aW5nUHJvcGVydHkodCl7dGhpcy5wcm90b3R5cGUuX2NyZWF0ZU5vdGlmeWluZ1Byb3BlcnR5KHQpfXN0YXRpYyBjcmVhdGVSZWFkT25seVByb3BlcnR5KHQsZSl7dGhpcy5wcm90b3R5cGUuX2NyZWF0ZVJlYWRPbmx5UHJvcGVydHkodCxlKX1zdGF0aWMgY3JlYXRlUmVmbGVjdGVkUHJvcGVydHkodCl7dGhpcy5wcm90b3R5cGUuX2NyZWF0ZVJlZmxlY3RlZFByb3BlcnR5KHQpfXN0YXRpYyBjcmVhdGVDb21wdXRlZFByb3BlcnR5KHQsZSxuKXt0aGlzLnByb3RvdHlwZS5fY3JlYXRlQ29tcHV0ZWRQcm9wZXJ0eSh0LGUsbil9c3RhdGljIGJpbmRUZW1wbGF0ZSh0KXtyZXR1cm4gdGhpcy5wcm90b3R5cGUuX2JpbmRUZW1wbGF0ZSh0KX1fYmluZFRlbXBsYXRlKHQsZSl7bGV0IG49dGhpcy5jb25zdHJ1Y3Rvci5fcGFyc2VUZW1wbGF0ZSh0KSxpPXRoaXMuX19wcmVCb3VuZFRlbXBsYXRlSW5mbz09bjtpZighaSlmb3IobGV0IHQgaW4gbi5wcm9wZXJ0eUVmZmVjdHMpdGhpcy5fY3JlYXRlUHJvcGVydHlBY2Nlc3Nvcih0KTtpZihlKWlmKG49T2JqZWN0LmNyZWF0ZShuKSxuLndhc1ByZUJvdW5kPWksdGhpcy5fX3RlbXBsYXRlSW5mbyl7Y29uc3QgZT10Ll9wYXJlbnRUZW1wbGF0ZUluZm98fHRoaXMuX190ZW1wbGF0ZUluZm8saT1lLmxhc3RDaGlsZDtuLnBhcmVudD1lLGUubGFzdENoaWxkPW4sbi5wcmV2aW91c1NpYmxpbmc9aSxpP2kubmV4dFNpYmxpbmc9bjplLmZpcnN0Q2hpbGQ9bn1lbHNlIHRoaXMuX190ZW1wbGF0ZUluZm89bjtlbHNlIHRoaXMuX19wcmVCb3VuZFRlbXBsYXRlSW5mbz1uO3JldHVybiBufXN0YXRpYyBfYWRkVGVtcGxhdGVQcm9wZXJ0eUVmZmVjdCh0LGUsbil7KHQuaG9zdFByb3BzPXQuaG9zdFByb3BzfHx7fSlbZV09ITA7bGV0IGk9dC5wcm9wZXJ0eUVmZmVjdHM9dC5wcm9wZXJ0eUVmZmVjdHN8fHt9OyhpW2VdPWlbZV18fFtdKS5wdXNoKG4pfV9zdGFtcFRlbXBsYXRlKHQsZSl7ZT1lfHx0aGlzLl9iaW5kVGVtcGxhdGUodCwhMCksZGUucHVzaCh0aGlzKTtsZXQgbj1zdXBlci5fc3RhbXBUZW1wbGF0ZSh0LGUpO2lmKGRlLnBvcCgpLGUubm9kZUxpc3Q9bi5ub2RlTGlzdCwhZS53YXNQcmVCb3VuZCl7bGV0IHQ9ZS5jaGlsZE5vZGVzPVtdO2ZvcihsZXQgZT1uLmZpcnN0Q2hpbGQ7ZTtlPWUubmV4dFNpYmxpbmcpdC5wdXNoKGUpfXJldHVybiBuLnRlbXBsYXRlSW5mbz1lLChmdW5jdGlvbiBpKHQsZSl7bGV0e25vZGVMaXN0Om4sbm9kZUluZm9MaXN0Oml9PWU7aWYoaS5sZW5ndGgpZm9yKGxldCBlPTA7ZTxpLmxlbmd0aDtlKyspe2xldCByPW5bZV0sbz1pW2VdLmJpbmRpbmdzO2lmKG8pZm9yKGxldCBlPTA7ZTxvLmxlbmd0aDtlKyspe2xldCBuPW9bZV07UXQocixuKSx0ZShyLHQsbil9ci5fX2RhdGFIb3N0PXR9fSkodGhpcyxlKSx0aGlzLl9fZGF0YUNsaWVudHNSZWFkeSYmKHRoaXMuX3J1bkVmZmVjdHNGb3JUZW1wbGF0ZShlLHRoaXMuX19kYXRhLG51bGwsITEpLHRoaXMuX2ZsdXNoQ2xpZW50cygpKSxufV9yZW1vdmVCb3VuZERvbSh0KXtjb25zdCBlPXQudGVtcGxhdGVJbmZvLHtwcmV2aW91c1NpYmxpbmc6bixuZXh0U2libGluZzppLHBhcmVudDpyfT1lO24/bi5uZXh0U2libGluZz1pOnImJihyLmZpcnN0Q2hpbGQ9aSksaT9pLnByZXZpb3VzU2libGluZz1uOnImJihyLmxhc3RDaGlsZD1uKSxlLm5leHRTaWJsaW5nPWUucHJldmlvdXNTaWJsaW5nPW51bGw7bGV0IG89ZS5jaGlsZE5vZGVzO2ZvcihsZXQgdD0wO3Q8by5sZW5ndGg7dCsrKXtsZXQgZT1vW3RdO1koWShlKS5wYXJlbnROb2RlKS5yZW1vdmVDaGlsZChlKX19c3RhdGljIF9wYXJzZVRlbXBsYXRlTm9kZSh0LG4saSl7bGV0IHI9ZS5fcGFyc2VUZW1wbGF0ZU5vZGUuY2FsbCh0aGlzLHQsbixpKTtpZih0Lm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREUpe2xldCBlPXRoaXMuX3BhcnNlQmluZGluZ3ModC50ZXh0Q29udGVudCxuKTtlJiYodC50ZXh0Q29udGVudD1vZShlKXx8IiAiLEt0KHRoaXMsbixpLCJ0ZXh0IiwidGV4dENvbnRlbnQiLGUpLHI9ITApfXJldHVybiByfXN0YXRpYyBfcGFyc2VUZW1wbGF0ZU5vZGVBdHRyaWJ1dGUodCxuLGkscixvKXtsZXQgYT10aGlzLl9wYXJzZUJpbmRpbmdzKG8sbik7aWYoYSl7bGV0IGU9cixvPSJwcm9wZXJ0eSI7RHQudGVzdChyKT9vPSJhdHRyaWJ1dGUiOiIkIj09cltyLmxlbmd0aC0xXSYmKHI9ci5zbGljZSgwLC0xKSxvPSJhdHRyaWJ1dGUiKTtsZXQgcz1vZShhKTtyZXR1cm4gcyYmImF0dHJpYnV0ZSI9PW8mJigiY2xhc3MiPT1yJiZ0Lmhhc0F0dHJpYnV0ZSgiY2xhc3MiKSYmKHMrPSIgIit0LmdldEF0dHJpYnV0ZShyKSksdC5zZXRBdHRyaWJ1dGUocixzKSksImF0dHJpYnV0ZSI9PW8mJiJkaXNhYmxlLXVwZ3JhZGUkIj09ZSYmdC5zZXRBdHRyaWJ1dGUociwiIiksImlucHV0Ij09PXQubG9jYWxOYW1lJiYidmFsdWUiPT09ZSYmdC5zZXRBdHRyaWJ1dGUoZSwiIiksdC5yZW1vdmVBdHRyaWJ1dGUoZSksInByb3BlcnR5Ij09PW8mJihyPXN0KHIpKSxLdCh0aGlzLG4saSxvLHIsYSxzKSwhMH1yZXR1cm4gZS5fcGFyc2VUZW1wbGF0ZU5vZGVBdHRyaWJ1dGUuY2FsbCh0aGlzLHQsbixpLHIsbyl9c3RhdGljIF9wYXJzZVRlbXBsYXRlTmVzdGVkVGVtcGxhdGUodCxuLGkpe2xldCByPWUuX3BhcnNlVGVtcGxhdGVOZXN0ZWRUZW1wbGF0ZS5jYWxsKHRoaXMsdCxuLGkpO2NvbnN0IG89dC5wYXJlbnROb2RlLGE9aS50ZW1wbGF0ZUluZm8scz0iZG9tLWlmIj09PW8ubG9jYWxOYW1lO0MmJihzfHwiZG9tLXJlcGVhdCI9PT1vLmxvY2FsTmFtZSkmJihvLnJlbW92ZUNoaWxkKHQpLChpPWkucGFyZW50SW5mbykudGVtcGxhdGVJbmZvPWEsaS5ub3RlZD0hMCxyPSExKTtsZXQgbD1hLmhvc3RQcm9wcztpZihBJiZzKWwmJihuLmhvc3RQcm9wcz1PYmplY3QuYXNzaWduKG4uaG9zdFByb3BzfHx7fSxsKSxDfHwoaS5wYXJlbnRJbmZvLm5vdGVkPSEwKSk7ZWxzZXtsZXQgdD0ieyI7Zm9yKGxldCBlIGluIGwpS3QodGhpcyxuLGksInByb3BlcnR5IiwiX2hvc3RfIitlLFt7bW9kZTp0LHNvdXJjZTplLGRlcGVuZGVuY2llczpbZV0saG9zdFByb3A6ITB9XSl9cmV0dXJuIHJ9c3RhdGljIF9wYXJzZUJpbmRpbmdzKHQsZSl7bGV0IG4saT1bXSxyPTA7Zm9yKDtudWxsIT09KG49cmUuZXhlYyh0KSk7KXtuLmluZGV4PnImJmkucHVzaCh7bGl0ZXJhbDp0LnNsaWNlKHIsbi5pbmRleCl9KTtsZXQgbz1uWzFdWzBdLGE9Qm9vbGVhbihuWzJdKSxzPW5bM10udHJpbSgpLGw9ITEsYz0iIix1PS0xOyJ7Ij09byYmKHU9cy5pbmRleE9mKCI6OiIpKT4wJiYoYz1zLnN1YnN0cmluZyh1KzIpLHM9cy5zdWJzdHJpbmcoMCx1KSxsPSEwKTtsZXQgaD1hZShzKSxkPVtdO2lmKGgpe2xldHthcmdzOnQsbWV0aG9kTmFtZTpufT1oO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKXtsZXQgbj10W2VdO24ubGl0ZXJhbHx8ZC5wdXNoKG4pfWxldCBpPWUuZHluYW1pY0ZuczsoaSYmaVtuXXx8aC5zdGF0aWMpJiYoZC5wdXNoKG4pLGguZHluYW1pY0ZuPSEwKX1lbHNlIGQucHVzaChzKTtpLnB1c2goe3NvdXJjZTpzLG1vZGU6byxuZWdhdGU6YSxjdXN0b21FdmVudDpsLHNpZ25hdHVyZTpoLGRlcGVuZGVuY2llczpkLGV2ZW50OmN9KSxyPXJlLmxhc3RJbmRleH1pZihyJiZyPHQubGVuZ3RoKXtsZXQgZT10LnN1YnN0cmluZyhyKTtlJiZpLnB1c2goe2xpdGVyYWw6ZX0pfXJldHVybiBpLmxlbmd0aD9pOm51bGx9c3RhdGljIF9ldmFsdWF0ZUJpbmRpbmcodCxlLG4saSxyLG8pe2xldCBhO3JldHVybiBhPWUuc2lnbmF0dXJlP25lKHQsbixpLDAsZS5zaWduYXR1cmUpOm4hPWUuc291cmNlP250KHQsZS5zb3VyY2UpOm8mJlgobik/bnQodCxuKTp0Ll9fZGF0YVtuXSxlLm5lZ2F0ZSYmKGE9IWEpLGF9fX0pKSxkZT1bXSxwZT1JKCh0PT57Y29uc3QgZT14dCh0KTtmdW5jdGlvbiBuKHQpe2NvbnN0IGU9T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpO3JldHVybiBlLnByb3RvdHlwZSBpbnN0YW5jZW9mIHI/ZTpudWxsfWZ1bmN0aW9uIGkodCl7aWYoIXQuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX19vd25Qcm9wZXJ0aWVzIix0KSkpe2xldCBlPW51bGw7aWYodC5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJwcm9wZXJ0aWVzIix0KSkpe2NvbnN0IG49dC5wcm9wZXJ0aWVzO24mJihlPSgKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KZnVuY3Rpb24gZSh0KXtjb25zdCBlPXt9O2ZvcihsZXQgbiBpbiB0KXtjb25zdCBpPXRbbl07ZVtuXT0iZnVuY3Rpb24iPT10eXBlb2YgaT97dHlwZTppfTppfXJldHVybiBlfSkobikpfXQuX19vd25Qcm9wZXJ0aWVzPWV9cmV0dXJuIHQuX19vd25Qcm9wZXJ0aWVzfWNsYXNzIHIgZXh0ZW5kcyBle3N0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCl7aWYoIXRoaXMuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX19vYnNlcnZlZEF0dHJpYnV0ZXMiLHRoaXMpKSl7Y29uc3QgdD10aGlzLl9wcm9wZXJ0aWVzO3RoaXMuX19vYnNlcnZlZEF0dHJpYnV0ZXM9dD9PYmplY3Qua2V5cyh0KS5tYXAoKHQ9PnRoaXMucHJvdG90eXBlLl9hZGRQcm9wZXJ0eVRvQXR0cmlidXRlTWFwKHQpKSk6W119cmV0dXJuIHRoaXMuX19vYnNlcnZlZEF0dHJpYnV0ZXN9c3RhdGljIGZpbmFsaXplKCl7aWYoIXRoaXMuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX19maW5hbGl6ZWQiLHRoaXMpKSl7Y29uc3QgdD1uKHRoaXMpO3QmJnQuZmluYWxpemUoKSx0aGlzLl9fZmluYWxpemVkPSEwLHRoaXMuX2ZpbmFsaXplQ2xhc3MoKX19c3RhdGljIF9maW5hbGl6ZUNsYXNzKCl7Y29uc3QgdD1pKHRoaXMpO3QmJnRoaXMuY3JlYXRlUHJvcGVydGllcyh0KX1zdGF0aWMgZ2V0IF9wcm9wZXJ0aWVzKCl7aWYoIXRoaXMuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX19wcm9wZXJ0aWVzIix0aGlzKSkpe2NvbnN0IHQ9bih0aGlzKTt0aGlzLl9fcHJvcGVydGllcz1PYmplY3QuYXNzaWduKHt9LHQmJnQuX3Byb3BlcnRpZXMsaSh0aGlzKSl9cmV0dXJuIHRoaXMuX19wcm9wZXJ0aWVzfXN0YXRpYyB0eXBlRm9yUHJvcGVydHkodCl7Y29uc3QgZT10aGlzLl9wcm9wZXJ0aWVzW3RdO3JldHVybiBlJiZlLnR5cGV9X2luaXRpYWxpemVQcm9wZXJ0aWVzKCl7dGhpcy5jb25zdHJ1Y3Rvci5maW5hbGl6ZSgpLHN1cGVyLl9pbml0aWFsaXplUHJvcGVydGllcygpfWNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2smJnN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5fZW5hYmxlUHJvcGVydGllcygpfWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2smJnN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCl9fXJldHVybiByfSkpLGZlPXdpbmRvdy5TaGFkeUNTUyYmd2luZG93LlNoYWR5Q1NTLmNzc0J1aWxkLG1lPUkoKHQ9Pntjb25zdCBlPXBlKGhlKHQpKTtmdW5jdGlvbiBuKHQsZSxuLGkpe24uY29tcHV0ZWQmJihuLnJlYWRPbmx5PSEwKSxuLmNvbXB1dGVkJiYodC5faGFzUmVhZE9ubHlFZmZlY3QoZSk/Y29uc29sZS53YXJuKGBDYW5ub3QgcmVkZWZpbmUgY29tcHV0ZWQgcHJvcGVydHkgJyR7ZX0nLmApOnQuX2NyZWF0ZUNvbXB1dGVkUHJvcGVydHkoZSxuLmNvbXB1dGVkLGkpKSxuLnJlYWRPbmx5JiYhdC5faGFzUmVhZE9ubHlFZmZlY3QoZSk/dC5fY3JlYXRlUmVhZE9ubHlQcm9wZXJ0eShlLCFuLmNvbXB1dGVkKTohMT09PW4ucmVhZE9ubHkmJnQuX2hhc1JlYWRPbmx5RWZmZWN0KGUpJiZjb25zb2xlLndhcm4oYENhbm5vdCBtYWtlIHJlYWRPbmx5IHByb3BlcnR5ICcke2V9JyBub24tcmVhZE9ubHkuYCksbi5yZWZsZWN0VG9BdHRyaWJ1dGUmJiF0Ll9oYXNSZWZsZWN0RWZmZWN0KGUpP3QuX2NyZWF0ZVJlZmxlY3RlZFByb3BlcnR5KGUpOiExPT09bi5yZWZsZWN0VG9BdHRyaWJ1dGUmJnQuX2hhc1JlZmxlY3RFZmZlY3QoZSkmJmNvbnNvbGUud2FybihgQ2Fubm90IG1ha2UgcmVmbGVjdGVkIHByb3BlcnR5ICcke2V9JyBub24tcmVmbGVjdGVkLmApLG4ubm90aWZ5JiYhdC5faGFzTm90aWZ5RWZmZWN0KGUpP3QuX2NyZWF0ZU5vdGlmeWluZ1Byb3BlcnR5KGUpOiExPT09bi5ub3RpZnkmJnQuX2hhc05vdGlmeUVmZmVjdChlKSYmY29uc29sZS53YXJuKGBDYW5ub3QgbWFrZSBub3RpZnkgcHJvcGVydHkgJyR7ZX0nIG5vbi1ub3RpZnkuYCksbi5vYnNlcnZlciYmdC5fY3JlYXRlUHJvcGVydHlPYnNlcnZlcihlLG4ub2JzZXJ2ZXIsaVtuLm9ic2VydmVyXSksdC5fYWRkUHJvcGVydHlUb0F0dHJpYnV0ZU1hcChlKX1yZXR1cm4gY2xhc3MgZXh0ZW5kcyBle3N0YXRpYyBnZXQgcG9seW1lckVsZW1lbnRWZXJzaW9uKCl7cmV0dXJuIjMuNC4xIn1zdGF0aWMgX2ZpbmFsaXplQ2xhc3MoKXtlLl9maW5hbGl6ZUNsYXNzLmNhbGwodGhpcyk7Y29uc3QgdD0oZnVuY3Rpb24gbih0KXtyZXR1cm4gdC5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfX293bk9ic2VydmVycyIsdCkpfHwodC5fX293bk9ic2VydmVycz10Lmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIm9ic2VydmVycyIsdCkpP3Qub2JzZXJ2ZXJzOm51bGwpLHQuX19vd25PYnNlcnZlcnN9KSh0aGlzKTt0JiZ0aGlzLmNyZWF0ZU9ic2VydmVycyh0LHRoaXMuX3Byb3BlcnRpZXMpLHRoaXMuX3ByZXBhcmVUZW1wbGF0ZSgpfXN0YXRpYyBfcHJlcGFyZVRlbXBsYXRlKCl7bGV0IHQ9dGhpcy50ZW1wbGF0ZTt0JiYoInN0cmluZyI9PXR5cGVvZiB0Pyhjb25zb2xlLmVycm9yKCJ0ZW1wbGF0ZSBnZXR0ZXIgbXVzdCByZXR1cm4gSFRNTFRlbXBsYXRlRWxlbWVudCIpLHQ9bnVsbCk6d3x8KHQ9dC5jbG9uZU5vZGUoITApKSksdGhpcy5wcm90b3R5cGUuX3RlbXBsYXRlPXR9c3RhdGljIGNyZWF0ZVByb3BlcnRpZXModCl7Zm9yKGxldCBlIGluIHQpbih0aGlzLnByb3RvdHlwZSxlLHRbZV0sdCl9c3RhdGljIGNyZWF0ZU9ic2VydmVycyh0LGUpe2NvbnN0IG49dGhpcy5wcm90b3R5cGU7Zm9yKGxldCBpPTA7aTx0Lmxlbmd0aDtpKyspbi5fY3JlYXRlTWV0aG9kT2JzZXJ2ZXIodFtpXSxlKX1zdGF0aWMgZ2V0IHRlbXBsYXRlKCl7aWYoIXRoaXMuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX3RlbXBsYXRlIix0aGlzKSkpe2NvbnN0IHQ9dGhpcy5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX3RlbXBsYXRlIix0aGlzLnByb3RvdHlwZSkpP3RoaXMucHJvdG90eXBlLl90ZW1wbGF0ZTp2b2lkIDA7dGhpcy5fdGVtcGxhdGU9dm9pZCAwIT09dD90OnRoaXMuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiaXMiLHRoaXMpKSYmKGZ1bmN0aW9uIHQoZSl7bGV0IG49bnVsbDtpZihlJiYoIWJ8fHgpJiYobj1CLmltcG9ydChlLCJ0ZW1wbGF0ZSIpLGImJiFuKSl0aHJvdyBuZXcgRXJyb3IoYHN0cmljdFRlbXBsYXRlUG9saWN5OiBleHBlY3RpbmcgZG9tLW1vZHVsZSBvciBudWxsIHRlbXBsYXRlIGZvciAke2V9YCk7cmV0dXJuIG59KSh0aGlzLmlzKXx8T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMucHJvdG90eXBlKS5jb25zdHJ1Y3Rvci50ZW1wbGF0ZX1yZXR1cm4gdGhpcy5fdGVtcGxhdGV9c3RhdGljIHNldCB0ZW1wbGF0ZSh0KXt0aGlzLl90ZW1wbGF0ZT10fXN0YXRpYyBnZXQgaW1wb3J0UGF0aCgpe2lmKCF0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9pbXBvcnRQYXRoIix0aGlzKSkpe2NvbnN0IHQ9dGhpcy5pbXBvcnRNZXRhO2lmKHQpdGhpcy5faW1wb3J0UGF0aD1mKHQudXJsKTtlbHNle2NvbnN0IHQ9Qi5pbXBvcnQodGhpcy5pcyk7dGhpcy5faW1wb3J0UGF0aD10JiZ0LmFzc2V0cGF0aHx8T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMucHJvdG90eXBlKS5jb25zdHJ1Y3Rvci5pbXBvcnRQYXRofX1yZXR1cm4gdGhpcy5faW1wb3J0UGF0aH1jb25zdHJ1Y3Rvcigpe3N1cGVyKCl9X2luaXRpYWxpemVQcm9wZXJ0aWVzKCl7dGhpcy5jb25zdHJ1Y3Rvci5maW5hbGl6ZSgpLHRoaXMuY29uc3RydWN0b3IuX2ZpbmFsaXplVGVtcGxhdGUodGhpcy5sb2NhbE5hbWUpLHN1cGVyLl9pbml0aWFsaXplUHJvcGVydGllcygpLHRoaXMucm9vdFBhdGg9Xyx0aGlzLmltcG9ydFBhdGg9dGhpcy5jb25zdHJ1Y3Rvci5pbXBvcnRQYXRoO2xldCB0PShmdW5jdGlvbiBlKHQpe2lmKCF0Lmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9fcHJvcGVydHlEZWZhdWx0cyIsdCkpKXt0Ll9fcHJvcGVydHlEZWZhdWx0cz1udWxsO2xldCBlPXQuX3Byb3BlcnRpZXM7Zm9yKGxldCBuIGluIGUpe2xldCBpPWVbbl07InZhbHVlImluIGkmJih0Ll9fcHJvcGVydHlEZWZhdWx0cz10Ll9fcHJvcGVydHlEZWZhdWx0c3x8e30sdC5fX3Byb3BlcnR5RGVmYXVsdHNbbl09aSl9fXJldHVybiB0Ll9fcHJvcGVydHlEZWZhdWx0c30pKHRoaXMuY29uc3RydWN0b3IpO2lmKHQpZm9yKGxldCBlIGluIHQpe2xldCBuPXRbZV07aWYodGhpcy5fY2FuQXBwbHlQcm9wZXJ0eURlZmF1bHQoZSkpe2xldCB0PSJmdW5jdGlvbiI9PXR5cGVvZiBuLnZhbHVlP24udmFsdWUuY2FsbCh0aGlzKTpuLnZhbHVlO3RoaXMuX2hhc0FjY2Vzc29yKGUpP3RoaXMuX3NldFBlbmRpbmdQcm9wZXJ0eShlLHQsITApOnRoaXNbZV09dH19fV9jYW5BcHBseVByb3BlcnR5RGVmYXVsdCh0KXtyZXR1cm4hdGhpcy5oYXNPd25Qcm9wZXJ0eSh0KX1zdGF0aWMgX3Byb2Nlc3NTdHlsZVRleHQodCxlKXtyZXR1cm4gcCh0LGUpfXN0YXRpYyBfZmluYWxpemVUZW1wbGF0ZSh0KXtjb25zdCBlPXRoaXMucHJvdG90eXBlLl90ZW1wbGF0ZTtpZihlJiYhZS5fX3BvbHltZXJGaW5hbGl6ZWQpe2UuX19wb2x5bWVyRmluYWxpemVkPSEwO2NvbnN0IG49dGhpcy5pbXBvcnRQYXRoOyhmdW5jdGlvbiBuKHQsZSxpLHIpe2lmKCFmZSl7Y29uc3Qgbj1lLmNvbnRlbnQucXVlcnlTZWxlY3RvckFsbCgic3R5bGUiKSxvPUcoZSksYT0oZnVuY3Rpb24gbyh0KXtsZXQgZT1GKHQpO3JldHVybiBlP1coZSk6W119KShpKSxzPWUuY29udGVudC5maXJzdEVsZW1lbnRDaGlsZDtmb3IobGV0IG49MDtuPGEubGVuZ3RoO24rKyl7bGV0IGk9YVtuXTtpLnRleHRDb250ZW50PXQuX3Byb2Nlc3NTdHlsZVRleHQoaS50ZXh0Q29udGVudCxyKSxlLmNvbnRlbnQuaW5zZXJ0QmVmb3JlKGkscyl9bGV0IGw9MDtmb3IobGV0IGU9MDtlPG8ubGVuZ3RoO2UrKyl7bGV0IGk9b1tlXSxhPW5bbF07YSE9PWk/KGk9aS5jbG9uZU5vZGUoITApLGEucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoaSxhKSk6bCsrLGkudGV4dENvbnRlbnQ9dC5fcHJvY2Vzc1N0eWxlVGV4dChpLnRleHRDb250ZW50LHIpfX1pZih3aW5kb3cuU2hhZHlDU1MmJndpbmRvdy5TaGFkeUNTUy5wcmVwYXJlVGVtcGxhdGUoZSxpKSxQJiZmZSYmZyl7Y29uc3Qgbj1lLmNvbnRlbnQucXVlcnlTZWxlY3RvckFsbCgic3R5bGUiKTtpZihuKXtsZXQgZT0iIjtBcnJheS5mcm9tKG4pLmZvckVhY2goKHQ9PntlKz10LnRleHRDb250ZW50LHQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KX0pKSx0Ll9zdHlsZVNoZWV0PW5ldyBDU1NTdHlsZVNoZWV0LHQuX3N0eWxlU2hlZXQucmVwbGFjZVN5bmMoZSl9fX0pKHRoaXMsZSx0LG4/ZChuKToiIiksdGhpcy5wcm90b3R5cGUuX2JpbmRUZW1wbGF0ZShlKX19Y29ubmVjdGVkQ2FsbGJhY2soKXt3aW5kb3cuU2hhZHlDU1MmJnRoaXMuX3RlbXBsYXRlJiZ3aW5kb3cuU2hhZHlDU1Muc3R5bGVFbGVtZW50KHRoaXMpLHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCl9cmVhZHkoKXt0aGlzLl90ZW1wbGF0ZSYmKHRoaXMucm9vdD10aGlzLl9zdGFtcFRlbXBsYXRlKHRoaXMuX3RlbXBsYXRlKSx0aGlzLiQ9dGhpcy5yb290LiQpLHN1cGVyLnJlYWR5KCl9X3JlYWR5Q2xpZW50cygpe3RoaXMuX3RlbXBsYXRlJiYodGhpcy5yb290PXRoaXMuX2F0dGFjaERvbSh0aGlzLnJvb3QpKSxzdXBlci5fcmVhZHlDbGllbnRzKCl9X2F0dGFjaERvbSh0KXtjb25zdCBlPVkodGhpcyk7aWYoZS5hdHRhY2hTaGFkb3cpcmV0dXJuIHQ/KGUuc2hhZG93Um9vdHx8KGUuYXR0YWNoU2hhZG93KHttb2RlOiJvcGVuIixzaGFkeVVwZ3JhZGVGcmFnbWVudDp0fSksZS5zaGFkb3dSb290LmFwcGVuZENoaWxkKHQpLHRoaXMuY29uc3RydWN0b3IuX3N0eWxlU2hlZXQmJihlLnNoYWRvd1Jvb3QuYWRvcHRlZFN0eWxlU2hlZXRzPVt0aGlzLmNvbnN0cnVjdG9yLl9zdHlsZVNoZWV0XSkpLE0mJndpbmRvdy5TaGFkeURPTSYmd2luZG93LlNoYWR5RE9NLmZsdXNoSW5pdGlhbChlLnNoYWRvd1Jvb3QpLGUuc2hhZG93Um9vdCk6bnVsbDt0aHJvdyBuZXcgRXJyb3IoIlNoYWRvd0RPTSBub3QgYXZhaWxhYmxlLiBQb2x5bWVyRWxlbWVudCBjYW4gY3JlYXRlIGRvbSBhcyBjaGlsZHJlbiBpbnN0ZWFkIG9mIGluIFNoYWRvd0RPTSBieSBzZXR0aW5nIGB0aGlzLnJvb3QgPSB0aGlzO2AgYmVmb3JlIGByZWFkeWAuIil9dXBkYXRlU3R5bGVzKHQpe3dpbmRvdy5TaGFkeUNTUyYmd2luZG93LlNoYWR5Q1NTLnN0eWxlU3VidHJlZSh0aGlzLHQpfXJlc29sdmVVcmwodCxlKXtyZXR1cm4hZSYmdGhpcy5pbXBvcnRQYXRoJiYoZT1kKHRoaXMuaW1wb3J0UGF0aCkpLGQodCxlKX1zdGF0aWMgX3BhcnNlVGVtcGxhdGVDb250ZW50KHQsbixpKXtyZXR1cm4gbi5keW5hbWljRm5zPW4uZHluYW1pY0Zuc3x8dGhpcy5fcHJvcGVydGllcyxlLl9wYXJzZVRlbXBsYXRlQ29udGVudC5jYWxsKHRoaXMsdCxuLGkpfXN0YXRpYyBfYWRkVGVtcGxhdGVQcm9wZXJ0eUVmZmVjdCh0LG4saSl7cmV0dXJuIVN8fG4gaW4gdGhpcy5fcHJvcGVydGllc3x8aS5pbmZvLnBhcnQuc2lnbmF0dXJlJiZpLmluZm8ucGFydC5zaWduYXR1cmUuc3RhdGljfHxpLmluZm8ucGFydC5ob3N0UHJvcHx8dC5uZXN0ZWRUZW1wbGF0ZXx8Y29uc29sZS53YXJuKGBQcm9wZXJ0eSAnJHtufScgdXNlZCBpbiB0ZW1wbGF0ZSBidXQgbm90IGRlY2xhcmVkIGluICdwcm9wZXJ0aWVzJzsgYXR0cmlidXRlIHdpbGwgbm90IGJlIG9ic2VydmVkLmApLGUuX2FkZFRlbXBsYXRlUHJvcGVydHlFZmZlY3QuY2FsbCh0aGlzLHQsbixpKX19fSkpOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dAogICAgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28KICAgIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpjbGFzcyBnZXtjb25zdHJ1Y3Rvcih0KXt0aGlzLnZhbHVlPXQudG9TdHJpbmcoKX10b1N0cmluZygpe3JldHVybiB0aGlzLnZhbHVlfX1jb25zdCBfZT1mdW5jdGlvbiB0KGUsLi4ubil7Y29uc3QgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO3JldHVybiBpLmlubmVySFRNTD1uLnJlZHVjZSgoKHQsbixpKT0+dCsoZnVuY3Rpb24gcih0KXtpZih0IGluc3RhbmNlb2YgSFRNTFRlbXBsYXRlRWxlbWVudClyZXR1cm4gdC5pbm5lckhUTUw7aWYodCBpbnN0YW5jZW9mIGdlKXJldHVybihmdW5jdGlvbiBlKHQpe2lmKHQgaW5zdGFuY2VvZiBnZSlyZXR1cm4gdC52YWx1ZTt0aHJvdyBuZXcgRXJyb3IoYG5vbi1saXRlcmFsIHZhbHVlIHBhc3NlZCB0byBQb2x5bWVyJ3MgaHRtbExpdGVyYWwgZnVuY3Rpb246ICR7dH1gKX0pKHQpO3Rocm93IG5ldyBFcnJvcihgbm9uLXRlbXBsYXRlIHZhbHVlIHBhc3NlZCB0byBQb2x5bWVyJ3MgaHRtbCBmdW5jdGlvbjogJHt0fWApfSkobikrZVtpKzFdKSxlWzBdKSxpfSx5ZT1tZShIVE1MRWxlbWVudCk7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovdmFyIHZlPSJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzoidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6e307ZnVuY3Rpb24gYmUodCxlLG4pe3JldHVybiB0KG49e3BhdGg6ZSxleHBvcnRzOnt9LHJlcXVpcmU6ZnVuY3Rpb24odCxlKXtyZXR1cm4oZnVuY3Rpb24gbigpe3Rocm93IG5ldyBFcnJvcigiRHluYW1pYyByZXF1aXJlcyBhcmUgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQgYnkgQHJvbGx1cC9wbHVnaW4tY29tbW9uanMiKX0pKCl9fSxuLmV4cG9ydHMpLG4uZXhwb3J0c31mdW5jdGlvbiB4ZSh0KXtpZih0Ll9fZXNNb2R1bGUpcmV0dXJuIHQ7dmFyIGU9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtyZXR1cm4gT2JqZWN0LmtleXModCkuZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIGk9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4saS5nZXQ/aTp7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KX0pKSxlfXZhciB3ZT1iZSgoZnVuY3Rpb24odCxlKXsoZnVuY3Rpb24oKXt2YXIgbixpPSJFeHBlY3RlZCBhIGZ1bmN0aW9uIixyPSJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIixvPSJfX2xvZGFzaF9wbGFjZWhvbGRlcl9fIixhPTMyLHM9MTI4LGw9MS8wLGM9OTAwNzE5OTI1NDc0MDk5MSx1PU5hTixoPTQyOTQ5NjcyOTUsZD1bWyJhcnkiLHNdLFsiYmluZCIsMV0sWyJiaW5kS2V5IiwyXSxbImN1cnJ5Iiw4XSxbImN1cnJ5UmlnaHQiLDE2XSxbImZsaXAiLDUxMl0sWyJwYXJ0aWFsIixhXSxbInBhcnRpYWxSaWdodCIsNjRdLFsicmVhcmciLDI1Nl1dLHA9IltvYmplY3QgQXJndW1lbnRzXSIsZj0iW29iamVjdCBBcnJheV0iLG09IltvYmplY3QgQm9vbGVhbl0iLGc9IltvYmplY3QgRGF0ZV0iLF89IltvYmplY3QgRXJyb3JdIix5PSJbb2JqZWN0IEZ1bmN0aW9uXSIsdj0iW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iLGI9IltvYmplY3QgTWFwXSIseD0iW29iamVjdCBOdW1iZXJdIix3PSJbb2JqZWN0IE9iamVjdF0iLFM9IltvYmplY3QgUHJvbWlzZV0iLE09IltvYmplY3QgUmVnRXhwXSIsRT0iW29iamVjdCBTZXRdIixUPSJbb2JqZWN0IFN0cmluZ10iLEM9IltvYmplY3QgU3ltYm9sXSIsQT0iW29iamVjdCBXZWFrTWFwXSIsaz0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLEw9IltvYmplY3QgRGF0YVZpZXddIixQPSJbb2JqZWN0IEZsb2F0MzJBcnJheV0iLE49IltvYmplY3QgRmxvYXQ2NEFycmF5XSIsST0iW29iamVjdCBJbnQ4QXJyYXldIixPPSJbb2JqZWN0IEludDE2QXJyYXldIixSPSJbb2JqZWN0IEludDMyQXJyYXldIix6PSJbb2JqZWN0IFVpbnQ4QXJyYXldIixEPSJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSIsQj0iW29iamVjdCBVaW50MTZBcnJheV0iLEg9IltvYmplY3QgVWludDMyQXJyYXldIixGPS9cYl9fcCBcKz0gJyc7L2csVj0vXGIoX19wIFwrPSkgJycgXCsvZyxVPS8oX19lXCguKj9cKXxcYl9fdFwpKSBcK1xuJyc7L2csaj0vJig/OmFtcHxsdHxndHxxdW90fCMzOSk7L2csRz0vWyY8PiInXS9nLFc9UmVnRXhwKGouc291cmNlKSxxPVJlZ0V4cChHLnNvdXJjZSksWT0vPCUtKFtcc1xTXSs/KSU+L2csWD0vPCUoW1xzXFNdKz8pJT4vZywkPS88JT0oW1xzXFNdKz8pJT4vZyxLPS9cLnxcWyg/OlteW1xdXSp8KFsiJ10pKD86KD8hXDEpW15cXF18XFwuKSo/XDEpXF0vLFo9L15cdyokLyxKPS9bXi5bXF1dK3xcWyg/OigtP1xkKyg/OlwuXGQrKT8pfChbIiddKSgoPzooPyFcMilbXlxcXXxcXC4pKj8pXDIpXF18KD89KD86XC58XFtcXSkoPzpcLnxcW1xdfCQpKS9nLFE9L1tcXF4kLiorPygpW1xde318XS9nLHR0PVJlZ0V4cChRLnNvdXJjZSksZXQ9L15ccysvLG50PS9ccy8saXQ9L1x7KD86XG5cL1wqIFxbd3JhcHBlZCB3aXRoIC4rXF0gXCpcLyk/XG4/LyxydD0vXHtcblwvXCogXFt3cmFwcGVkIHdpdGggKC4rKVxdIFwqLyxvdD0vLD8gJiAvLGF0PS9bXlx4MDAtXHgyZlx4M2EtXHg0MFx4NWItXHg2MFx4N2ItXHg3Zl0rL2csc3Q9L1soKT0se31cW1xdXC9cc10vLGx0PS9cXChcXCk/L2csY3Q9L1wkXHsoW15cXH1dKig/OlxcLlteXFx9XSopKilcfS9nLHV0PS9cdyokLyxodD0vXlstK10weFswLTlhLWZdKyQvaSxkdD0vXjBiWzAxXSskL2kscHQ9L15cW29iamVjdCAuKz9Db25zdHJ1Y3RvclxdJC8sZnQ9L14wb1swLTddKyQvaSxtdD0vXig/OjB8WzEtOV1cZCopJC8sZ3Q9L1tceGMwLVx4ZDZceGQ4LVx4ZjZceGY4LVx4ZmZcdTAxMDAtXHUwMTdmXS9nLF90PS8oJF4pLyx5dD0vWydcblxyXHUyMDI4XHUyMDI5XFxdL2csdnQ9IlxcdTAzMDAtXFx1MDM2ZlxcdWZlMjAtXFx1ZmUyZlxcdTIwZDAtXFx1MjBmZiIsYnQ9ImEtelxceGRmLVxceGY2XFx4ZjgtXFx4ZmYiLHh0PSJBLVpcXHhjMC1cXHhkNlxceGQ4LVxceGRlIix3dD0iXFx4YWNcXHhiMVxceGQ3XFx4ZjdcXHgwMC1cXHgyZlxceDNhLVxceDQwXFx4NWItXFx4NjBcXHg3Yi1cXHhiZlxcdTIwMDAtXFx1MjA2ZiBcXHRcXHgwYlxcZlxceGEwXFx1ZmVmZlxcblxcclxcdTIwMjhcXHUyMDI5XFx1MTY4MFxcdTE4MGVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzXFx1MjAwNFxcdTIwMDVcXHUyMDA2XFx1MjAwN1xcdTIwMDhcXHUyMDA5XFx1MjAwYVxcdTIwMmZcXHUyMDVmXFx1MzAwMCIsU3Q9IlsiK3d0KyJdIixNdD0iWyIrdnQrIl0iLEV0PSJcXGQrIixUdD0iWyIrYnQrIl0iLEN0PSJbXlxcdWQ4MDAtXFx1ZGZmZiIrd3QrRXQrIlxcdTI3MDAtXFx1MjdiZiIrYnQreHQrIl0iLEF0PSJcXHVkODNjW1xcdWRmZmItXFx1ZGZmZl0iLGt0PSJbXlxcdWQ4MDAtXFx1ZGZmZl0iLEx0PSIoPzpcXHVkODNjW1xcdWRkZTYtXFx1ZGRmZl0pezJ9IixQdD0iW1xcdWQ4MDAtXFx1ZGJmZl1bXFx1ZGMwMC1cXHVkZmZmXSIsTnQ9IlsiK3h0KyJdIixJdD0iKD86IitUdCsifCIrQ3QrIikiLE90PSIoPzoiK050KyJ8IitDdCsiKSIsUnQ9Iig/Olsn4oCZXSg/OmR8bGx8bXxyZXxzfHR8dmUpKT8iLHp0PSIoPzpbJ+KAmV0oPzpEfExMfE18UkV8U3xUfFZFKSk/IixEdD0iKD86IitNdCsifCIrQXQrIik/IixCdD0iW1xcdWZlMGVcXHVmZTBmXT8iLEh0PUJ0K0R0KyIoPzpcXHUyMDBkKD86Iitba3QsTHQsUHRdLmpvaW4oInwiKSsiKSIrQnQrRHQrIikqIixGdD0iKD86IitbIltcXHUyNzAwLVxcdTI3YmZdIixMdCxQdF0uam9pbigifCIpKyIpIitIdCxWdD0iKD86Iitba3QrTXQrIj8iLE10LEx0LFB0LCJbXFx1ZDgwMC1cXHVkZmZmXSJdLmpvaW4oInwiKSsiKSIsVXQ9UmVnRXhwKCJbJ+KAmV0iLCJnIiksanQ9UmVnRXhwKE10LCJnIiksR3Q9UmVnRXhwKEF0KyIoPz0iK0F0KyIpfCIrVnQrSHQsImciKSxXdD1SZWdFeHAoW050KyI/IitUdCsiKyIrUnQrIig/PSIrW1N0LE50LCIkIl0uam9pbigifCIpKyIpIixPdCsiKyIrenQrIig/PSIrW1N0LE50K0l0LCIkIl0uam9pbigifCIpKyIpIixOdCsiPyIrSXQrIisiK1J0LE50KyIrIit6dCwiXFxkKig/OjFTVHwyTkR8M1JEfCg/IVsxMjNdKVxcZFRIKSg/PVxcYnxbYS16X10pIiwiXFxkKig/OjFzdHwybmR8M3JkfCg/IVsxMjNdKVxcZHRoKSg/PVxcYnxbQS1aX10pIixFdCxGdF0uam9pbigifCIpLCJnIikscXQ9UmVnRXhwKCJbXFx1MjAwZFxcdWQ4MDAtXFx1ZGZmZiIrdnQrIlxcdWZlMGVcXHVmZTBmXSIpLFl0PS9bYS16XVtBLVpdfFtBLVpdezJ9W2Etel18WzAtOV1bYS16QS1aXXxbYS16QS1aXVswLTldfFteYS16QS1aMC05IF0vLFh0PVsiQXJyYXkiLCJCdWZmZXIiLCJEYXRhVmlldyIsIkRhdGUiLCJFcnJvciIsIkZsb2F0MzJBcnJheSIsIkZsb2F0NjRBcnJheSIsIkZ1bmN0aW9uIiwiSW50OEFycmF5IiwiSW50MTZBcnJheSIsIkludDMyQXJyYXkiLCJNYXAiLCJNYXRoIiwiT2JqZWN0IiwiUHJvbWlzZSIsIlJlZ0V4cCIsIlNldCIsIlN0cmluZyIsIlN5bWJvbCIsIlR5cGVFcnJvciIsIlVpbnQ4QXJyYXkiLCJVaW50OENsYW1wZWRBcnJheSIsIlVpbnQxNkFycmF5IiwiVWludDMyQXJyYXkiLCJXZWFrTWFwIiwiXyIsImNsZWFyVGltZW91dCIsImlzRmluaXRlIiwicGFyc2VJbnQiLCJzZXRUaW1lb3V0Il0sJHQ9LTEsS3Q9e307S3RbUF09S3RbTl09S3RbSV09S3RbT109S3RbUl09S3Rbel09S3RbRF09S3RbQl09S3RbSF09ITAsS3RbcF09S3RbZl09S3Rba109S3RbbV09S3RbTF09S3RbZ109S3RbX109S3RbeV09S3RbYl09S3RbeF09S3Rbd109S3RbTV09S3RbRV09S3RbVF09S3RbQV09ITE7dmFyIFp0PXt9O1p0W3BdPVp0W2ZdPVp0W2tdPVp0W0xdPVp0W21dPVp0W2ddPVp0W1BdPVp0W05dPVp0W0ldPVp0W09dPVp0W1JdPVp0W2JdPVp0W3hdPVp0W3ddPVp0W01dPVp0W0VdPVp0W1RdPVp0W0NdPVp0W3pdPVp0W0RdPVp0W0JdPVp0W0hdPSEwLFp0W19dPVp0W3ldPVp0W0FdPSExO3ZhciBKdD17IlxcIjoiXFwiLCInIjoiJyIsIlxuIjoibiIsIlxyIjoiciIsIlx1MjAyOCI6InUyMDI4IiwiXHUyMDI5IjoidTIwMjkifSxRdD1wYXJzZUZsb2F0LHRlPXBhcnNlSW50LGVlPSJvYmplY3QiPT10eXBlb2YgdmUmJnZlJiZ2ZS5PYmplY3Q9PT1PYmplY3QmJnZlLG5lPSJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGYsaWU9ZWV8fG5lfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpLHJlPWUmJiFlLm5vZGVUeXBlJiZlLG9lPXJlJiZ0JiYhdC5ub2RlVHlwZSYmdCxhZT1vZSYmb2UuZXhwb3J0cz09PXJlLHNlPWFlJiZlZS5wcm9jZXNzLGxlPShmdW5jdGlvbigpe3RyeXtyZXR1cm4gb2UmJm9lLnJlcXVpcmUmJm9lLnJlcXVpcmUoInV0aWwiKS50eXBlc3x8c2UmJnNlLmJpbmRpbmcmJnNlLmJpbmRpbmcoInV0aWwiKX1jYXRjaCh0KXt9fSkoKSxjZT1sZSYmbGUuaXNBcnJheUJ1ZmZlcix1ZT1sZSYmbGUuaXNEYXRlLGhlPWxlJiZsZS5pc01hcCxkZT1sZSYmbGUuaXNSZWdFeHAscGU9bGUmJmxlLmlzU2V0LGZlPWxlJiZsZS5pc1R5cGVkQXJyYXk7ZnVuY3Rpb24gbWUodCxlLG4pe3N3aXRjaChuLmxlbmd0aCl7Y2FzZSAwOnJldHVybiB0LmNhbGwoZSk7Y2FzZSAxOnJldHVybiB0LmNhbGwoZSxuWzBdKTtjYXNlIDI6cmV0dXJuIHQuY2FsbChlLG5bMF0sblsxXSk7Y2FzZSAzOnJldHVybiB0LmNhbGwoZSxuWzBdLG5bMV0sblsyXSl9cmV0dXJuIHQuYXBwbHkoZSxuKX1mdW5jdGlvbiBnZSh0LGUsbixpKXtmb3IodmFyIHI9LTEsbz1udWxsPT10PzA6dC5sZW5ndGg7KytyPG87KXt2YXIgYT10W3JdO2UoaSxhLG4oYSksdCl9cmV0dXJuIGl9ZnVuY3Rpb24gX2UodCxlKXtmb3IodmFyIG49LTEsaT1udWxsPT10PzA6dC5sZW5ndGg7KytuPGkmJiExIT09ZSh0W25dLG4sdCk7KTtyZXR1cm4gdH1mdW5jdGlvbiB5ZSh0LGUpe2Zvcih2YXIgbj1udWxsPT10PzA6dC5sZW5ndGg7bi0tJiYhMSE9PWUodFtuXSxuLHQpOyk7cmV0dXJuIHR9ZnVuY3Rpb24gYmUodCxlKXtmb3IodmFyIG49LTEsaT1udWxsPT10PzA6dC5sZW5ndGg7KytuPGk7KWlmKCFlKHRbbl0sbix0KSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiB4ZSh0LGUpe2Zvcih2YXIgbj0tMSxpPW51bGw9PXQ/MDp0Lmxlbmd0aCxyPTAsbz1bXTsrK248aTspe3ZhciBhPXRbbl07ZShhLG4sdCkmJihvW3IrK109YSl9cmV0dXJuIG99ZnVuY3Rpb24gd2UodCxlKXtyZXR1cm4hKG51bGw9PXR8fCF0Lmxlbmd0aCkmJk5lKHQsZSwwKT4tMX1mdW5jdGlvbiBTZSh0LGUsbil7Zm9yKHZhciBpPS0xLHI9bnVsbD09dD8wOnQubGVuZ3RoOysraTxyOylpZihuKGUsdFtpXSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gTWUodCxlKXtmb3IodmFyIG49LTEsaT1udWxsPT10PzA6dC5sZW5ndGgscj1BcnJheShpKTsrK248aTspcltuXT1lKHRbbl0sbix0KTtyZXR1cm4gcn1mdW5jdGlvbiBFZSh0LGUpe2Zvcih2YXIgbj0tMSxpPWUubGVuZ3RoLHI9dC5sZW5ndGg7KytuPGk7KXRbcituXT1lW25dO3JldHVybiB0fWZ1bmN0aW9uIFRlKHQsZSxuLGkpe3ZhciByPS0xLG89bnVsbD09dD8wOnQubGVuZ3RoO2ZvcihpJiZvJiYobj10Wysrcl0pOysrcjxvOyluPWUobix0W3JdLHIsdCk7cmV0dXJuIG59ZnVuY3Rpb24gQ2UodCxlLG4saSl7dmFyIHI9bnVsbD09dD8wOnQubGVuZ3RoO2ZvcihpJiZyJiYobj10Wy0tcl0pO3ItLTspbj1lKG4sdFtyXSxyLHQpO3JldHVybiBufWZ1bmN0aW9uIEFlKHQsZSl7Zm9yKHZhciBuPS0xLGk9bnVsbD09dD8wOnQubGVuZ3RoOysrbjxpOylpZihlKHRbbl0sbix0KSlyZXR1cm4hMDtyZXR1cm4hMX12YXIga2U9emUoImxlbmd0aCIpO2Z1bmN0aW9uIExlKHQsZSxuKXt2YXIgaTtyZXR1cm4gbih0LChmdW5jdGlvbih0LG4scil7aWYoZSh0LG4scikpcmV0dXJuIGk9biwhMX0pKSxpfWZ1bmN0aW9uIFBlKHQsZSxuLGkpe2Zvcih2YXIgcj10Lmxlbmd0aCxvPW4rKGk/MTotMSk7aT9vLS06KytvPHI7KWlmKGUodFtvXSxvLHQpKXJldHVybiBvO3JldHVybi0xfWZ1bmN0aW9uIE5lKHQsZSxuKXtyZXR1cm4gZT09ZT8oZnVuY3Rpb24gaSh0LGUsbil7Zm9yKHZhciBpPW4tMSxyPXQubGVuZ3RoOysraTxyOylpZih0W2ldPT09ZSlyZXR1cm4gaTtyZXR1cm4tMX0pKHQsZSxuKTpQZSh0LE9lLG4pfWZ1bmN0aW9uIEllKHQsZSxuLGkpe2Zvcih2YXIgcj1uLTEsbz10Lmxlbmd0aDsrK3I8bzspaWYoaSh0W3JdLGUpKXJldHVybiByO3JldHVybi0xfWZ1bmN0aW9uIE9lKHQpe3JldHVybiB0IT10fWZ1bmN0aW9uIFJlKHQsZSl7dmFyIG49bnVsbD09dD8wOnQubGVuZ3RoO3JldHVybiBuP0hlKHQsZSkvbjp1fWZ1bmN0aW9uIHplKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT9uOmVbdF19fWZ1bmN0aW9uIERlKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09dD9uOnRbZV19fWZ1bmN0aW9uIEJlKHQsZSxuLGkscil7cmV0dXJuIHIodCwoZnVuY3Rpb24odCxyLG8pe249aT8oaT0hMSx0KTplKG4sdCxyLG8pfSkpLG59ZnVuY3Rpb24gSGUodCxlKXtmb3IodmFyIGkscj0tMSxvPXQubGVuZ3RoOysrcjxvOyl7dmFyIGE9ZSh0W3JdKTthIT09biYmKGk9aT09PW4/YTppK2EpfXJldHVybiBpfWZ1bmN0aW9uIEZlKHQsZSl7Zm9yKHZhciBuPS0xLGk9QXJyYXkodCk7KytuPHQ7KWlbbl09ZShuKTtyZXR1cm4gaX1mdW5jdGlvbiBWZSh0KXtyZXR1cm4gdD90LnNsaWNlKDAsYW4odCkrMSkucmVwbGFjZShldCwiIik6dH1mdW5jdGlvbiBVZSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSl9fWZ1bmN0aW9uIGplKHQsZSl7cmV0dXJuIE1lKGUsKGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSkpfWZ1bmN0aW9uIEdlKHQsZSl7cmV0dXJuIHQuaGFzKGUpfWZ1bmN0aW9uIFdlKHQsZSl7Zm9yKHZhciBuPS0xLGk9dC5sZW5ndGg7KytuPGkmJk5lKGUsdFtuXSwwKT4tMTspO3JldHVybiBufWZ1bmN0aW9uIHFlKHQsZSl7Zm9yKHZhciBuPXQubGVuZ3RoO24tLSYmTmUoZSx0W25dLDApPi0xOyk7cmV0dXJuIG59ZnVuY3Rpb24gWWUodCxlKXtmb3IodmFyIG49dC5sZW5ndGgsaT0wO24tLTspdFtuXT09PWUmJisraTtyZXR1cm4gaX12YXIgWGU9RGUoeyLDgCI6IkEiLCLDgSI6IkEiLCLDgiI6IkEiLCLDgyI6IkEiLCLDhCI6IkEiLCLDhSI6IkEiLCLDoCI6ImEiLCLDoSI6ImEiLCLDoiI6ImEiLCLDoyI6ImEiLCLDpCI6ImEiLCLDpSI6ImEiLCLDhyI6IkMiLCLDpyI6ImMiLCLDkCI6IkQiLCLDsCI6ImQiLCLDiCI6IkUiLCLDiSI6IkUiLCLDiiI6IkUiLCLDiyI6IkUiLCLDqCI6ImUiLCLDqSI6ImUiLCLDqiI6ImUiLCLDqyI6ImUiLCLDjCI6IkkiLCLDjSI6IkkiLCLDjiI6IkkiLCLDjyI6IkkiLCLDrCI6ImkiLCLDrSI6ImkiLCLDriI6ImkiLCLDryI6ImkiLCLDkSI6Ik4iLCLDsSI6Im4iLCLDkiI6Ik8iLCLDkyI6Ik8iLCLDlCI6Ik8iLCLDlSI6Ik8iLCLDliI6Ik8iLCLDmCI6Ik8iLCLDsiI6Im8iLCLDsyI6Im8iLCLDtCI6Im8iLCLDtSI6Im8iLCLDtiI6Im8iLCLDuCI6Im8iLCLDmSI6IlUiLCLDmiI6IlUiLCLDmyI6IlUiLCLDnCI6IlUiLCLDuSI6InUiLCLDuiI6InUiLCLDuyI6InUiLCLDvCI6InUiLCLDnSI6IlkiLCLDvSI6InkiLCLDvyI6InkiLCLDhiI6IkFlIiwiw6YiOiJhZSIsIsOeIjoiVGgiLCLDviI6InRoIiwiw58iOiJzcyIsIsSAIjoiQSIsIsSCIjoiQSIsIsSEIjoiQSIsIsSBIjoiYSIsIsSDIjoiYSIsIsSFIjoiYSIsIsSGIjoiQyIsIsSIIjoiQyIsIsSKIjoiQyIsIsSMIjoiQyIsIsSHIjoiYyIsIsSJIjoiYyIsIsSLIjoiYyIsIsSNIjoiYyIsIsSOIjoiRCIsIsSQIjoiRCIsIsSPIjoiZCIsIsSRIjoiZCIsIsSSIjoiRSIsIsSUIjoiRSIsIsSWIjoiRSIsIsSYIjoiRSIsIsSaIjoiRSIsIsSTIjoiZSIsIsSVIjoiZSIsIsSXIjoiZSIsIsSZIjoiZSIsIsSbIjoiZSIsIsScIjoiRyIsIsSeIjoiRyIsIsSgIjoiRyIsIsSiIjoiRyIsIsSdIjoiZyIsIsSfIjoiZyIsIsShIjoiZyIsIsSjIjoiZyIsIsSkIjoiSCIsIsSmIjoiSCIsIsSlIjoiaCIsIsSnIjoiaCIsIsSoIjoiSSIsIsSqIjoiSSIsIsSsIjoiSSIsIsSuIjoiSSIsIsSwIjoiSSIsIsSpIjoiaSIsIsSrIjoiaSIsIsStIjoiaSIsIsSvIjoiaSIsIsSxIjoiaSIsIsS0IjoiSiIsIsS1IjoiaiIsIsS2IjoiSyIsIsS3IjoiayIsIsS4IjoiayIsIsS5IjoiTCIsIsS7IjoiTCIsIsS9IjoiTCIsIsS/IjoiTCIsIsWBIjoiTCIsIsS6IjoibCIsIsS8IjoibCIsIsS+IjoibCIsIsWAIjoibCIsIsWCIjoibCIsIsWDIjoiTiIsIsWFIjoiTiIsIsWHIjoiTiIsIsWKIjoiTiIsIsWEIjoibiIsIsWGIjoibiIsIsWIIjoibiIsIsWLIjoibiIsIsWMIjoiTyIsIsWOIjoiTyIsIsWQIjoiTyIsIsWNIjoibyIsIsWPIjoibyIsIsWRIjoibyIsIsWUIjoiUiIsIsWWIjoiUiIsIsWYIjoiUiIsIsWVIjoiciIsIsWXIjoiciIsIsWZIjoiciIsIsWaIjoiUyIsIsWcIjoiUyIsIsWeIjoiUyIsIsWgIjoiUyIsIsWbIjoicyIsIsWdIjoicyIsIsWfIjoicyIsIsWhIjoicyIsIsWiIjoiVCIsIsWkIjoiVCIsIsWmIjoiVCIsIsWjIjoidCIsIsWlIjoidCIsIsWnIjoidCIsIsWoIjoiVSIsIsWqIjoiVSIsIsWsIjoiVSIsIsWuIjoiVSIsIsWwIjoiVSIsIsWyIjoiVSIsIsWpIjoidSIsIsWrIjoidSIsIsWtIjoidSIsIsWvIjoidSIsIsWxIjoidSIsIsWzIjoidSIsIsW0IjoiVyIsIsW1IjoidyIsIsW2IjoiWSIsIsW3IjoieSIsIsW4IjoiWSIsIsW5IjoiWiIsIsW7IjoiWiIsIsW9IjoiWiIsIsW6IjoieiIsIsW8IjoieiIsIsW+IjoieiIsIsSyIjoiSUoiLCLEsyI6ImlqIiwixZIiOiJPZSIsIsWTIjoib2UiLCLFiSI6IiduIiwixb8iOiJzIn0pLCRlPURlKHsiJiI6IiZhbXA7IiwiPCI6IiZsdDsiLCI+IjoiJmd0OyIsJyInOiImcXVvdDsiLCInIjoiJiMzOTsifSk7ZnVuY3Rpb24gS2UodCl7cmV0dXJuIlxcIitKdFt0XX1mdW5jdGlvbiBaZSh0KXtyZXR1cm4gcXQudGVzdCh0KX1mdW5jdGlvbiBKZSh0KXt2YXIgZT0tMSxuPUFycmF5KHQuc2l6ZSk7cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24odCxpKXtuWysrZV09W2ksdF19KSksbn1mdW5jdGlvbiBRZSh0LGUpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdChlKG4pKX19ZnVuY3Rpb24gdG4odCxlKXtmb3IodmFyIG49LTEsaT10Lmxlbmd0aCxyPTAsYT1bXTsrK248aTspe3ZhciBzPXRbbl07cyE9PWUmJnMhPT1vfHwodFtuXT1vLGFbcisrXT1uKX1yZXR1cm4gYX1mdW5jdGlvbiBlbih0KXt2YXIgZT0tMSxuPUFycmF5KHQuc2l6ZSk7cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7blsrK2VdPXR9KSksbn1mdW5jdGlvbiBubih0KXt2YXIgZT0tMSxuPUFycmF5KHQuc2l6ZSk7cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7blsrK2VdPVt0LHRdfSkpLG59ZnVuY3Rpb24gcm4odCl7cmV0dXJuIFplKHQpPyhmdW5jdGlvbiBlKHQpe2Zvcih2YXIgZT1HdC5sYXN0SW5kZXg9MDtHdC50ZXN0KHQpOykrK2U7cmV0dXJuIGV9KSh0KTprZSh0KX1mdW5jdGlvbiBvbih0KXtyZXR1cm4gWmUodCk/KGZ1bmN0aW9uIGUodCl7cmV0dXJuIHQubWF0Y2goR3QpfHxbXX0pKHQpOihmdW5jdGlvbiBuKHQpe3JldHVybiB0LnNwbGl0KCIiKX0pKHQpfWZ1bmN0aW9uIGFuKHQpe2Zvcih2YXIgZT10Lmxlbmd0aDtlLS0mJm50LnRlc3QodC5jaGFyQXQoZSkpOyk7cmV0dXJuIGV9dmFyIHNuPURlKHsiJmFtcDsiOiImIiwiJmx0OyI6IjwiLCImZ3Q7IjoiPiIsIiZxdW90OyI6JyInLCImIzM5OyI6IicifSksbG49KGZ1bmN0aW9uIHQoZSl7dmFyIG50LHZ0PShlPW51bGw9PWU/aWU6bG4uZGVmYXVsdHMoaWUuT2JqZWN0KCksZSxsbi5waWNrKGllLFh0KSkpLkFycmF5LGJ0PWUuRGF0ZSx4dD1lLkVycm9yLHd0PWUuRnVuY3Rpb24sU3Q9ZS5NYXRoLE10PWUuT2JqZWN0LEV0PWUuUmVnRXhwLFR0PWUuU3RyaW5nLEN0PWUuVHlwZUVycm9yLEF0PXZ0LnByb3RvdHlwZSxrdD1NdC5wcm90b3R5cGUsTHQ9ZVsiX19jb3JlLWpzX3NoYXJlZF9fIl0sUHQ9d3QucHJvdG90eXBlLnRvU3RyaW5nLE50PWt0Lmhhc093blByb3BlcnR5LEl0PTAsT3Q9KG50PS9bXi5dKyQvLmV4ZWMoTHQmJkx0LmtleXMmJkx0LmtleXMuSUVfUFJPVE98fCIiKSk/IlN5bWJvbChzcmMpXzEuIitudDoiIixSdD1rdC50b1N0cmluZyx6dD1QdC5jYWxsKE10KSxEdD1pZS5fLEJ0PUV0KCJeIitQdC5jYWxsKE50KS5yZXBsYWNlKFEsIlxcJCYiKS5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcKCl8IGZvciAuKz8oPz1cXFxdKS9nLCIkMS4qPyIpKyIkIiksSHQ9YWU/ZS5CdWZmZXI6bixGdD1lLlN5bWJvbCxWdD1lLlVpbnQ4QXJyYXksR3Q9SHQ/SHQuYWxsb2NVbnNhZmU6bixxdD1RZShNdC5nZXRQcm90b3R5cGVPZixNdCksSnQ9TXQuY3JlYXRlLGVlPWt0LnByb3BlcnR5SXNFbnVtZXJhYmxlLG5lPUF0LnNwbGljZSxyZT1GdD9GdC5pc0NvbmNhdFNwcmVhZGFibGU6bixvZT1GdD9GdC5pdGVyYXRvcjpuLHNlPUZ0P0Z0LnRvU3RyaW5nVGFnOm4sbGU9KGZ1bmN0aW9uKCl7dHJ5e3ZhciB0PVBvKE10LCJkZWZpbmVQcm9wZXJ0eSIpO3JldHVybiB0KHt9LCIiLHt9KSx0fWNhdGNoKHQpe319KSgpLHZlPWUuY2xlYXJUaW1lb3V0IT09aWUuY2xlYXJUaW1lb3V0JiZlLmNsZWFyVGltZW91dCxrZT1idCYmYnQubm93IT09aWUuRGF0ZS5ub3cmJmJ0Lm5vdyxEZT1lLnNldFRpbWVvdXQhPT1pZS5zZXRUaW1lb3V0JiZlLnNldFRpbWVvdXQsY249U3QuY2VpbCx1bj1TdC5mbG9vcixobj1NdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsZG49SHQ/SHQuaXNCdWZmZXI6bixwbj1lLmlzRmluaXRlLGZuPUF0LmpvaW4sbW49UWUoTXQua2V5cyxNdCksZ249U3QubWF4LF9uPVN0Lm1pbix5bj1idC5ub3csdm49ZS5wYXJzZUludCxibj1TdC5yYW5kb20seG49QXQucmV2ZXJzZSx3bj1QbyhlLCJEYXRhVmlldyIpLFNuPVBvKGUsIk1hcCIpLE1uPVBvKGUsIlByb21pc2UiKSxFbj1QbyhlLCJTZXQiKSxUbj1QbyhlLCJXZWFrTWFwIiksQ249UG8oTXQsImNyZWF0ZSIpLEFuPVRuJiZuZXcgVG4sa249e30sTG49b2Eod24pLFBuPW9hKFNuKSxObj1vYShNbiksSW49b2EoRW4pLE9uPW9hKFRuKSxSbj1GdD9GdC5wcm90b3R5cGU6bix6bj1Sbj9Sbi52YWx1ZU9mOm4sRG49Um4/Um4udG9TdHJpbmc6bjtmdW5jdGlvbiBCbih0KXtpZihNcyh0KSYmIWhzKHQpJiYhKHQgaW5zdGFuY2VvZiBVbikpe2lmKHQgaW5zdGFuY2VvZiBWbilyZXR1cm4gdDtpZihOdC5jYWxsKHQsIl9fd3JhcHBlZF9fIikpcmV0dXJuIGFhKHQpfXJldHVybiBuZXcgVm4odCl9dmFyIEhuPShmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKCFTcyhlKSlyZXR1cm57fTtpZihKdClyZXR1cm4gSnQoZSk7dC5wcm90b3R5cGU9ZTt2YXIgaT1uZXcgdDtyZXR1cm4gdC5wcm90b3R5cGU9bixpfX0pKCk7ZnVuY3Rpb24gRm4oKXt9ZnVuY3Rpb24gVm4odCxlKXt0aGlzLl9fd3JhcHBlZF9fPXQsdGhpcy5fX2FjdGlvbnNfXz1bXSx0aGlzLl9fY2hhaW5fXz0hIWUsdGhpcy5fX2luZGV4X189MCx0aGlzLl9fdmFsdWVzX189bn1mdW5jdGlvbiBVbih0KXt0aGlzLl9fd3JhcHBlZF9fPXQsdGhpcy5fX2FjdGlvbnNfXz1bXSx0aGlzLl9fZGlyX189MSx0aGlzLl9fZmlsdGVyZWRfXz0hMSx0aGlzLl9faXRlcmF0ZWVzX189W10sdGhpcy5fX3Rha2VDb3VudF9fPWgsdGhpcy5fX3ZpZXdzX189W119ZnVuY3Rpb24gam4odCl7dmFyIGU9LTEsbj1udWxsPT10PzA6dC5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2U8bjspe3ZhciBpPXRbZV07dGhpcy5zZXQoaVswXSxpWzFdKX19ZnVuY3Rpb24gR24odCl7dmFyIGU9LTEsbj1udWxsPT10PzA6dC5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2U8bjspe3ZhciBpPXRbZV07dGhpcy5zZXQoaVswXSxpWzFdKX19ZnVuY3Rpb24gV24odCl7dmFyIGU9LTEsbj1udWxsPT10PzA6dC5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2U8bjspe3ZhciBpPXRbZV07dGhpcy5zZXQoaVswXSxpWzFdKX19ZnVuY3Rpb24gcW4odCl7dmFyIGU9LTEsbj1udWxsPT10PzA6dC5sZW5ndGg7Zm9yKHRoaXMuX19kYXRhX189bmV3IFduOysrZTxuOyl0aGlzLmFkZCh0W2VdKX1mdW5jdGlvbiBZbih0KXt2YXIgZT10aGlzLl9fZGF0YV9fPW5ldyBHbih0KTt0aGlzLnNpemU9ZS5zaXplfWZ1bmN0aW9uIFhuKHQsZSl7dmFyIG49aHModCksaT0hbiYmdXModCkscj0hbiYmIWkmJmdzKHQpLG89IW4mJiFpJiYhciYmUnModCksYT1ufHxpfHxyfHxvLHM9YT9GZSh0Lmxlbmd0aCxUdCk6W10sbD1zLmxlbmd0aDtmb3IodmFyIGMgaW4gdCkhZSYmIU50LmNhbGwodCxjKXx8YSYmKCJsZW5ndGgiPT1jfHxyJiYoIm9mZnNldCI9PWN8fCJwYXJlbnQiPT1jKXx8byYmKCJidWZmZXIiPT1jfHwiYnl0ZUxlbmd0aCI9PWN8fCJieXRlT2Zmc2V0Ij09Yyl8fEJvKGMsbCkpfHxzLnB1c2goYyk7cmV0dXJuIHN9ZnVuY3Rpb24gJG4odCl7dmFyIGU9dC5sZW5ndGg7cmV0dXJuIGU/dFtwcigwLGUtMSldOm59ZnVuY3Rpb24gS24odCxlKXtyZXR1cm4gZWEoWHIodCksb2koZSwwLHQubGVuZ3RoKSl9ZnVuY3Rpb24gWm4odCl7cmV0dXJuIGVhKFhyKHQpKX1mdW5jdGlvbiBKbih0LGUsaSl7KGkhPT1uJiYhc3ModFtlXSxpKXx8aT09PW4mJiEoZSBpbiB0KSkmJmlpKHQsZSxpKX1mdW5jdGlvbiBRbih0LGUsaSl7dmFyIHI9dFtlXTtOdC5jYWxsKHQsZSkmJnNzKHIsaSkmJihpIT09bnx8ZSBpbiB0KXx8aWkodCxlLGkpfWZ1bmN0aW9uIHRpKHQsZSl7Zm9yKHZhciBuPXQubGVuZ3RoO24tLTspaWYoc3ModFtuXVswXSxlKSlyZXR1cm4gbjtyZXR1cm4tMX1mdW5jdGlvbiBlaSh0LGUsbixpKXtyZXR1cm4gTmkodCwoZnVuY3Rpb24odCxyLG8pe2UoaSx0LG4odCksbyl9KSksaX1mdW5jdGlvbiBuaSh0LGUpe3JldHVybiB0JiYkcihlLHJsKGUpLHQpfWZ1bmN0aW9uIGlpKHQsZSxuKXsiX19wcm90b19fIj09ZSYmbGU/bGUodCxlLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpuLHdyaXRhYmxlOiEwfSk6dFtlXT1ufWZ1bmN0aW9uIHJpKHQsZSl7Zm9yKHZhciBpPS0xLHI9ZS5sZW5ndGgsbz12dChyKSxhPW51bGw9PXQ7KytpPHI7KW9baV09YT9uOlFzKHQsZVtpXSk7cmV0dXJuIG99ZnVuY3Rpb24gb2kodCxlLGkpe3JldHVybiB0PT10JiYoaSE9PW4mJih0PXQ8PWk/dDppKSxlIT09biYmKHQ9dD49ZT90OmUpKSx0fWZ1bmN0aW9uIGFpKHQsZSxpLHIsbyxhKXt2YXIgcyxsPTEmZSxjPTImZSx1PTQmZTtpZihpJiYocz1vP2kodCxyLG8sYSk6aSh0KSkscyE9PW4pcmV0dXJuIHM7aWYoIVNzKHQpKXJldHVybiB0O3ZhciBoPWhzKHQpO2lmKGgpe2lmKHM9KGZ1bmN0aW9uIGQodCl7dmFyIGU9dC5sZW5ndGgsbj1uZXcgdC5jb25zdHJ1Y3RvcihlKTtyZXR1cm4gZSYmInN0cmluZyI9PXR5cGVvZiB0WzBdJiZOdC5jYWxsKHQsImluZGV4IikmJihuLmluZGV4PXQuaW5kZXgsbi5pbnB1dD10LmlucHV0KSxufSkodCksIWwpcmV0dXJuIFhyKHQscyl9ZWxzZXt2YXIgZj1Pbyh0KSxfPWY9PXl8fGY9PXY7aWYoZ3ModCkpcmV0dXJuIFVyKHQsbCk7aWYoZj09d3x8Zj09cHx8XyYmIW8pe2lmKHM9Y3x8Xz97fTp6byh0KSwhbClyZXR1cm4gYz8oZnVuY3Rpb24gQSh0LGUpe3JldHVybiAkcih0LElvKHQpLGUpfSkodCwoZnVuY3Rpb24gUyh0LGUpe3JldHVybiB0JiYkcihlLG9sKGUpLHQpfSkocyx0KSk6KGZ1bmN0aW9uIEYodCxlKXtyZXR1cm4gJHIodCxObyh0KSxlKX0pKHQsbmkocyx0KSl9ZWxzZXtpZighWnRbZl0pcmV0dXJuIG8/dDp7fTtzPShmdW5jdGlvbiBWKHQsZSxuKXt2YXIgaT10LmNvbnN0cnVjdG9yO3N3aXRjaChlKXtjYXNlIGs6cmV0dXJuIGpyKHQpO2Nhc2UgbTpjYXNlIGc6cmV0dXJuIG5ldyBpKCt0KTtjYXNlIEw6cmV0dXJuKGZ1bmN0aW9uIHIodCxlKXt2YXIgbj1lP2pyKHQuYnVmZmVyKTp0LmJ1ZmZlcjtyZXR1cm4gbmV3IHQuY29uc3RydWN0b3Iobix0LmJ5dGVPZmZzZXQsdC5ieXRlTGVuZ3RoKX0pKHQsbik7Y2FzZSBQOmNhc2UgTjpjYXNlIEk6Y2FzZSBPOmNhc2UgUjpjYXNlIHo6Y2FzZSBEOmNhc2UgQjpjYXNlIEg6cmV0dXJuIEdyKHQsbik7Y2FzZSBiOnJldHVybiBuZXcgaTtjYXNlIHg6Y2FzZSBUOnJldHVybiBuZXcgaSh0KTtjYXNlIE06cmV0dXJuKGZ1bmN0aW9uIG8odCl7dmFyIGU9bmV3IHQuY29uc3RydWN0b3IodC5zb3VyY2UsdXQuZXhlYyh0KSk7cmV0dXJuIGUubGFzdEluZGV4PXQubGFzdEluZGV4LGV9KSh0KTtjYXNlIEU6cmV0dXJuIG5ldyBpO2Nhc2UgQzpyZXR1cm4oZnVuY3Rpb24gYSh0KXtyZXR1cm4gem4/TXQoem4uY2FsbCh0KSk6e319KSh0KX19KSh0LGYsbCl9fWF8fChhPW5ldyBZbik7dmFyIFU9YS5nZXQodCk7aWYoVSlyZXR1cm4gVTthLnNldCh0LHMpLFBzKHQpP3QuZm9yRWFjaCgoZnVuY3Rpb24obil7cy5hZGQoYWkobixlLGksbix0LGEpKX0pKTpFcyh0KSYmdC5mb3JFYWNoKChmdW5jdGlvbihuLHIpe3Muc2V0KHIsYWkobixlLGkscix0LGEpKX0pKTt2YXIgaj1oP246KHU/Yz9NbzpTbzpjP29sOnJsKSh0KTtyZXR1cm4gX2Uoanx8dCwoZnVuY3Rpb24obixyKXtqJiYobj10W3I9bl0pLFFuKHMscixhaShuLGUsaSxyLHQsYSkpfSkpLHN9ZnVuY3Rpb24gc2kodCxlLGkpe3ZhciByPWkubGVuZ3RoO2lmKG51bGw9PXQpcmV0dXJuIXI7Zm9yKHQ9TXQodCk7ci0tOyl7dmFyIG89aVtyXSxhPXRbb107aWYoYT09PW4mJiEobyBpbiB0KXx8ISgwLGVbb10pKGEpKXJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIGxpKHQsZSxyKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgQ3QoaSk7cmV0dXJuIFpvKChmdW5jdGlvbigpe3QuYXBwbHkobixyKX0pLGUpfWZ1bmN0aW9uIGNpKHQsZSxuLGkpe3ZhciByPS0xLG89d2UsYT0hMCxzPXQubGVuZ3RoLGw9W10sYz1lLmxlbmd0aDtpZighcylyZXR1cm4gbDtuJiYoZT1NZShlLFVlKG4pKSksaT8obz1TZSxhPSExKTplLmxlbmd0aD49MjAwJiYobz1HZSxhPSExLGU9bmV3IHFuKGUpKTt0OmZvcig7KytyPHM7KXt2YXIgdT10W3JdLGg9bnVsbD09bj91Om4odSk7aWYodT1pfHwwIT09dT91OjAsYSYmaD09aCl7Zm9yKHZhciBkPWM7ZC0tOylpZihlW2RdPT09aCljb250aW51ZSB0O2wucHVzaCh1KX1lbHNlIG8oZSxoLGkpfHxsLnB1c2godSl9cmV0dXJuIGx9Qm4udGVtcGxhdGVTZXR0aW5ncz17ZXNjYXBlOlksZXZhbHVhdGU6WCxpbnRlcnBvbGF0ZTokLHZhcmlhYmxlOiIiLGltcG9ydHM6e186Qm59fSwoQm4ucHJvdG90eXBlPUZuLnByb3RvdHlwZSkuY29uc3RydWN0b3I9Qm4sKFZuLnByb3RvdHlwZT1IbihGbi5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1WbiwoVW4ucHJvdG90eXBlPUhuKEZuLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPVVuLGpuLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbiB1aSgpe3RoaXMuX19kYXRhX189Q24/Q24obnVsbCk6e30sdGhpcy5zaXplPTB9LGpuLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24gaGkodCl7dmFyIGU9dGhpcy5oYXModCkmJmRlbGV0ZSB0aGlzLl9fZGF0YV9fW3RdO3JldHVybiB0aGlzLnNpemUtPWU/MTowLGV9LGpuLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24gZGkodCl7dmFyIGU9dGhpcy5fX2RhdGFfXztpZihDbil7dmFyIGk9ZVt0XTtyZXR1cm4gaT09PXI/bjppfXJldHVybiBOdC5jYWxsKGUsdCk/ZVt0XTpufSxqbi5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uIHBpKHQpe3ZhciBlPXRoaXMuX19kYXRhX187cmV0dXJuIENuP2VbdF0hPT1uOk50LmNhbGwoZSx0KX0sam4ucHJvdG90eXBlLnNldD1mdW5jdGlvbiBmaSh0LGUpe3ZhciBpPXRoaXMuX19kYXRhX187cmV0dXJuIHRoaXMuc2l6ZSs9dGhpcy5oYXModCk/MDoxLGlbdF09Q24mJmU9PT1uP3I6ZSx0aGlzfSxHbi5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24gbWkoKXt0aGlzLl9fZGF0YV9fPVtdLHRoaXMuc2l6ZT0wfSxHbi5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uIGdpKHQpe3ZhciBlPXRoaXMuX19kYXRhX18sbj10aShlLHQpO3JldHVybiEobjwwfHwobj09ZS5sZW5ndGgtMT9lLnBvcCgpOm5lLmNhbGwoZSxuLDEpLC0tdGhpcy5zaXplLDApKX0sR24ucHJvdG90eXBlLmdldD1mdW5jdGlvbiBfaSh0KXt2YXIgZT10aGlzLl9fZGF0YV9fLGk9dGkoZSx0KTtyZXR1cm4gaTwwP246ZVtpXVsxXX0sR24ucHJvdG90eXBlLmhhcz1mdW5jdGlvbiB5aSh0KXtyZXR1cm4gdGkodGhpcy5fX2RhdGFfXyx0KT4tMX0sR24ucHJvdG90eXBlLnNldD1mdW5jdGlvbiB2aSh0LGUpe3ZhciBuPXRoaXMuX19kYXRhX18saT10aShuLHQpO3JldHVybiBpPDA/KCsrdGhpcy5zaXplLG4ucHVzaChbdCxlXSkpOm5baV1bMV09ZSx0aGlzfSxXbi5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24gYmkoKXt0aGlzLnNpemU9MCx0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyBqbixtYXA6bmV3KFNufHxHbiksc3RyaW5nOm5ldyBqbn19LFduLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24geGkodCl7dmFyIGU9a28odGhpcyx0KS5kZWxldGUodCk7cmV0dXJuIHRoaXMuc2l6ZS09ZT8xOjAsZX0sV24ucHJvdG90eXBlLmdldD1mdW5jdGlvbiB3aSh0KXtyZXR1cm4ga28odGhpcyx0KS5nZXQodCl9LFduLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24gU2kodCl7cmV0dXJuIGtvKHRoaXMsdCkuaGFzKHQpfSxXbi5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uIE1pKHQsZSl7dmFyIG49a28odGhpcyx0KSxpPW4uc2l6ZTtyZXR1cm4gbi5zZXQodCxlKSx0aGlzLnNpemUrPW4uc2l6ZT09aT8wOjEsdGhpc30scW4ucHJvdG90eXBlLmFkZD1xbi5wcm90b3R5cGUucHVzaD1mdW5jdGlvbiBFaSh0KXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5zZXQodCxyKSx0aGlzfSxxbi5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uIFRpKHQpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyh0KX0sWW4ucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uIENpKCl7dGhpcy5fX2RhdGFfXz1uZXcgR24sdGhpcy5zaXplPTB9LFluLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24gQWkodCl7dmFyIGU9dGhpcy5fX2RhdGFfXyxuPWUuZGVsZXRlKHQpO3JldHVybiB0aGlzLnNpemU9ZS5zaXplLG59LFluLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24ga2kodCl7cmV0dXJuIHRoaXMuX19kYXRhX18uZ2V0KHQpfSxZbi5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uIExpKHQpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyh0KX0sWW4ucHJvdG90eXBlLnNldD1mdW5jdGlvbiBQaSh0LGUpe3ZhciBuPXRoaXMuX19kYXRhX187aWYobiBpbnN0YW5jZW9mIEduKXt2YXIgaT1uLl9fZGF0YV9fO2lmKCFTbnx8aS5sZW5ndGg8MTk5KXJldHVybiBpLnB1c2goW3QsZV0pLHRoaXMuc2l6ZT0rK24uc2l6ZSx0aGlzO249dGhpcy5fX2RhdGFfXz1uZXcgV24oaSl9cmV0dXJuIG4uc2V0KHQsZSksdGhpcy5zaXplPW4uc2l6ZSx0aGlzfTt2YXIgTmk9SnIoRmkpLElpPUpyKFZpLCEwKTtmdW5jdGlvbiBPaSh0LGUpe3ZhciBuPSEwO3JldHVybiBOaSh0LChmdW5jdGlvbih0LGkscil7cmV0dXJuIG49ISFlKHQsaSxyKX0pKSxufWZ1bmN0aW9uIFJpKHQsZSxpKXtmb3IodmFyIHI9LTEsbz10Lmxlbmd0aDsrK3I8bzspe3ZhciBhPXRbcl0scz1lKGEpO2lmKG51bGwhPXMmJihsPT09bj9zPT1zJiYhT3Mocyk6aShzLGwpKSl2YXIgbD1zLGM9YX1yZXR1cm4gY31mdW5jdGlvbiB6aSh0LGUpe3ZhciBuPVtdO3JldHVybiBOaSh0LChmdW5jdGlvbih0LGkscil7ZSh0LGkscikmJm4ucHVzaCh0KX0pKSxufWZ1bmN0aW9uIERpKHQsZSxuLGkscil7dmFyIG89LTEsYT10Lmxlbmd0aDtmb3Iobnx8KG49RG8pLHJ8fChyPVtdKTsrK288YTspe3ZhciBzPXRbb107ZT4wJiZuKHMpP2U+MT9EaShzLGUtMSxuLGkscik6RWUocixzKTppfHwocltyLmxlbmd0aF09cyl9cmV0dXJuIHJ9dmFyIEJpPVFyKCksSGk9UXIoITApO2Z1bmN0aW9uIEZpKHQsZSl7cmV0dXJuIHQmJkJpKHQsZSxybCl9ZnVuY3Rpb24gVmkodCxlKXtyZXR1cm4gdCYmSGkodCxlLHJsKX1mdW5jdGlvbiBVaSh0LGUpe3JldHVybiB4ZShlLChmdW5jdGlvbihlKXtyZXR1cm4gYnModFtlXSl9KSl9ZnVuY3Rpb24gamkodCxlKXtmb3IodmFyIGk9MCxyPShlPUJyKGUsdCkpLmxlbmd0aDtudWxsIT10JiZpPHI7KXQ9dFtyYShlW2krK10pXTtyZXR1cm4gaSYmaT09cj90Om59ZnVuY3Rpb24gR2kodCxlLG4pe3ZhciBpPWUodCk7cmV0dXJuIGhzKHQpP2k6RWUoaSxuKHQpKX1mdW5jdGlvbiBXaSh0KXtyZXR1cm4gbnVsbD09dD90PT09bj8iW29iamVjdCBVbmRlZmluZWRdIjoiW29iamVjdCBOdWxsXSI6c2UmJnNlIGluIE10KHQpPyhmdW5jdGlvbiBlKHQpe3ZhciBlPU50LmNhbGwodCxzZSksaT10W3NlXTt0cnl7dFtzZV09bjt2YXIgcj0hMH1jYXRjaCh0KXt9dmFyIG89UnQuY2FsbCh0KTtyZXR1cm4gciYmKGU/dFtzZV09aTpkZWxldGUgdFtzZV0pLG99KSh0KTooZnVuY3Rpb24gaSh0KXtyZXR1cm4gUnQuY2FsbCh0KX0pKHQpfWZ1bmN0aW9uIHFpKHQsZSl7cmV0dXJuIHQ+ZX1mdW5jdGlvbiBZaSh0LGUpe3JldHVybiBudWxsIT10JiZOdC5jYWxsKHQsZSl9ZnVuY3Rpb24gWGkodCxlKXtyZXR1cm4gbnVsbCE9dCYmZSBpbiBNdCh0KX1mdW5jdGlvbiAkaSh0LGUsaSl7Zm9yKHZhciByPWk/U2U6d2Usbz10WzBdLmxlbmd0aCxhPXQubGVuZ3RoLHM9YSxsPXZ0KGEpLGM9MS8wLHU9W107cy0tOyl7dmFyIGg9dFtzXTtzJiZlJiYoaD1NZShoLFVlKGUpKSksYz1fbihoLmxlbmd0aCxjKSxsW3NdPSFpJiYoZXx8bz49MTIwJiZoLmxlbmd0aD49MTIwKT9uZXcgcW4ocyYmaCk6bn1oPXRbMF07dmFyIGQ9LTEscD1sWzBdO3Q6Zm9yKDsrK2Q8byYmdS5sZW5ndGg8Yzspe3ZhciBmPWhbZF0sbT1lP2UoZik6ZjtpZihmPWl8fDAhPT1mP2Y6MCwhKHA/R2UocCxtKTpyKHUsbSxpKSkpe2ZvcihzPWE7LS1zOyl7dmFyIGc9bFtzXTtpZighKGc/R2UoZyxtKTpyKHRbc10sbSxpKSkpY29udGludWUgdH1wJiZwLnB1c2gobSksdS5wdXNoKGYpfX1yZXR1cm4gdX1mdW5jdGlvbiBLaSh0LGUsaSl7dmFyIHI9bnVsbD09KHQ9WW8odCxlPUJyKGUsdCkpKT90OnRbcmEoX2EoZSkpXTtyZXR1cm4gbnVsbD09cj9uOm1lKHIsdCxpKX1mdW5jdGlvbiBaaSh0KXtyZXR1cm4gTXModCkmJldpKHQpPT1wfWZ1bmN0aW9uIEppKHQsZSxpLHIsbyl7cmV0dXJuIHQ9PT1lfHwobnVsbD09dHx8bnVsbD09ZXx8IU1zKHQpJiYhTXMoZSk/dCE9dCYmZSE9ZTooZnVuY3Rpb24gYSh0LGUsaSxyLG8scyl7dmFyIGw9aHModCksYz1ocyhlKSx1PWw/ZjpPbyh0KSxoPWM/ZjpPbyhlKSxkPSh1PXU9PXA/dzp1KT09dyx5PShoPWg9PXA/dzpoKT09dyx2PXU9PWg7aWYodiYmZ3ModCkpe2lmKCFncyhlKSlyZXR1cm4hMTtsPSEwLGQ9ITF9aWYodiYmIWQpcmV0dXJuIHN8fChzPW5ldyBZbiksbHx8UnModCk/eG8odCxlLGkscixvLHMpOihmdW5jdGlvbiBTKHQsZSxuLGkscixvLGEpe3N3aXRjaChuKXtjYXNlIEw6aWYodC5ieXRlTGVuZ3RoIT1lLmJ5dGVMZW5ndGh8fHQuYnl0ZU9mZnNldCE9ZS5ieXRlT2Zmc2V0KXJldHVybiExO3Q9dC5idWZmZXIsZT1lLmJ1ZmZlcjtjYXNlIGs6cmV0dXJuISh0LmJ5dGVMZW5ndGghPWUuYnl0ZUxlbmd0aHx8IW8obmV3IFZ0KHQpLG5ldyBWdChlKSkpO2Nhc2UgbTpjYXNlIGc6Y2FzZSB4OnJldHVybiBzcygrdCwrZSk7Y2FzZSBfOnJldHVybiB0Lm5hbWU9PWUubmFtZSYmdC5tZXNzYWdlPT1lLm1lc3NhZ2U7Y2FzZSBNOmNhc2UgVDpyZXR1cm4gdD09ZSsiIjtjYXNlIGI6dmFyIHM9SmU7Y2FzZSBFOmlmKHN8fChzPWVuKSx0LnNpemUhPWUuc2l6ZSYmISgxJmkpKXJldHVybiExO3ZhciBsPWEuZ2V0KHQpO2lmKGwpcmV0dXJuIGw9PWU7aXw9MixhLnNldCh0LGUpO3ZhciBjPXhvKHModCkscyhlKSxpLHIsbyxhKTtyZXR1cm4gYS5kZWxldGUodCksYztjYXNlIEM6aWYoem4pcmV0dXJuIHpuLmNhbGwodCk9PXpuLmNhbGwoZSl9cmV0dXJuITF9KSh0LGUsdSxpLHIsbyxzKTtpZighKDEmaSkpe3ZhciBBPWQmJk50LmNhbGwodCwiX193cmFwcGVkX18iKSxQPXkmJk50LmNhbGwoZSwiX193cmFwcGVkX18iKTtpZihBfHxQKXt2YXIgTj1BP3QudmFsdWUoKTp0LEk9UD9lLnZhbHVlKCk6ZTtyZXR1cm4gc3x8KHM9bmV3IFluKSxvKE4sSSxpLHIscyl9fXJldHVybiEhdiYmKHN8fChzPW5ldyBZbiksKGZ1bmN0aW9uIE8odCxlLGkscixvLGEpe3ZhciBzPTEmaSxsPVNvKHQpLGM9bC5sZW5ndGg7aWYoYyE9U28oZSkubGVuZ3RoJiYhcylyZXR1cm4hMTtmb3IodmFyIHU9Yzt1LS07KXt2YXIgaD1sW3VdO2lmKCEocz9oIGluIGU6TnQuY2FsbChlLGgpKSlyZXR1cm4hMX12YXIgZD1hLmdldCh0KSxwPWEuZ2V0KGUpO2lmKGQmJnApcmV0dXJuIGQ9PWUmJnA9PXQ7dmFyIGY9ITA7YS5zZXQodCxlKSxhLnNldChlLHQpO2Zvcih2YXIgbT1zOysrdTxjOyl7dmFyIGc9dFtoPWxbdV1dLF89ZVtoXTtpZihyKXZhciB5PXM/cihfLGcsaCxlLHQsYSk6cihnLF8saCx0LGUsYSk7aWYoISh5PT09bj9nPT09X3x8byhnLF8saSxyLGEpOnkpKXtmPSExO2JyZWFrfW18fChtPSJjb25zdHJ1Y3RvciI9PWgpfWlmKGYmJiFtKXt2YXIgdj10LmNvbnN0cnVjdG9yLGI9ZS5jb25zdHJ1Y3Rvcjt2PT1ifHwhKCJjb25zdHJ1Y3RvciJpbiB0KXx8ISgiY29uc3RydWN0b3IiaW4gZSl8fCJmdW5jdGlvbiI9PXR5cGVvZiB2JiZ2IGluc3RhbmNlb2YgdiYmImZ1bmN0aW9uIj09dHlwZW9mIGImJmIgaW5zdGFuY2VvZiBifHwoZj0hMSl9cmV0dXJuIGEuZGVsZXRlKHQpLGEuZGVsZXRlKGUpLGZ9KSh0LGUsaSxyLG8scykpfSkodCxlLGkscixKaSxvKSl9ZnVuY3Rpb24gUWkodCxlLGkscil7dmFyIG89aS5sZW5ndGgsYT1vLHM9IXI7aWYobnVsbD09dClyZXR1cm4hYTtmb3IodD1NdCh0KTtvLS07KXt2YXIgbD1pW29dO2lmKHMmJmxbMl0/bFsxXSE9PXRbbFswXV06IShsWzBdaW4gdCkpcmV0dXJuITF9Zm9yKDsrK288YTspe3ZhciBjPShsPWlbb10pWzBdLHU9dFtjXSxoPWxbMV07aWYocyYmbFsyXSl7aWYodT09PW4mJiEoYyBpbiB0KSlyZXR1cm4hMX1lbHNle3ZhciBkPW5ldyBZbjtpZihyKXZhciBwPXIodSxoLGMsdCxlLGQpO2lmKCEocD09PW4/SmkoaCx1LDMscixkKTpwKSlyZXR1cm4hMX19cmV0dXJuITB9ZnVuY3Rpb24gdHIodCl7cmV0dXJuISghU3ModCl8fChmdW5jdGlvbiBlKHQpe3JldHVybiEhT3QmJk90IGluIHR9KSh0KSkmJihicyh0KT9CdDpwdCkudGVzdChvYSh0KSl9ZnVuY3Rpb24gZXIodCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpudWxsPT10P0xsOiJvYmplY3QiPT10eXBlb2YgdD9ocyh0KT9hcih0WzBdLHRbMV0pOm9yKHQpOkhsKHQpfWZ1bmN0aW9uIG5yKHQpe2lmKCFqbyh0KSlyZXR1cm4gbW4odCk7dmFyIGU9W107Zm9yKHZhciBuIGluIE10KHQpKU50LmNhbGwodCxuKSYmImNvbnN0cnVjdG9yIiE9biYmZS5wdXNoKG4pO3JldHVybiBlfWZ1bmN0aW9uIGlyKHQsZSl7cmV0dXJuIHQ8ZX1mdW5jdGlvbiBycih0LGUpe3ZhciBuPS0xLGk9ZnModCk/dnQodC5sZW5ndGgpOltdO3JldHVybiBOaSh0LChmdW5jdGlvbih0LHIsbyl7aVsrK25dPWUodCxyLG8pfSkpLGl9ZnVuY3Rpb24gb3IodCl7dmFyIGU9TG8odCk7cmV0dXJuIDE9PWUubGVuZ3RoJiZlWzBdWzJdP1dvKGVbMF1bMF0sZVswXVsxXSk6ZnVuY3Rpb24obil7cmV0dXJuIG49PT10fHxRaShuLHQsZSl9fWZ1bmN0aW9uIGFyKHQsZSl7cmV0dXJuIEZvKHQpJiZHbyhlKT9XbyhyYSh0KSxlKTpmdW5jdGlvbihpKXt2YXIgcj1RcyhpLHQpO3JldHVybiByPT09biYmcj09PWU/dGwoaSx0KTpKaShlLHIsMyl9fWZ1bmN0aW9uIHNyKHQsZSxpLHIsbyl7dCE9PWUmJkJpKGUsKGZ1bmN0aW9uKGEscyl7aWYob3x8KG89bmV3IFluKSxTcyhhKSkhKGZ1bmN0aW9uIGwodCxlLGkscixvLGEscyl7dmFyIGw9JG8odCxpKSxjPSRvKGUsaSksdT1zLmdldChjKTtpZih1KUpuKHQsaSx1KTtlbHNle3ZhciBoPWE/YShsLGMsaSsiIix0LGUscyk6bixkPWg9PT1uO2lmKGQpe3ZhciBwPWhzKGMpLGY9IXAmJmdzKGMpLG09IXAmJiFmJiZScyhjKTtoPWMscHx8Znx8bT9ocyhsKT9oPWw6bXMobCk/aD1YcihsKTpmPyhkPSExLGg9VXIoYywhMCkpOm0/KGQ9ITEsaD1HcihjLCEwKSk6aD1bXTpBcyhjKXx8dXMoYyk/KGg9bCx1cyhsKT9oPUdzKGwpOlNzKGwpJiYhYnMobCl8fChoPXpvKGMpKSk6ZD0hMX1kJiYocy5zZXQoYyxoKSxvKGgsYyxyLGEscykscy5kZWxldGUoYykpLEpuKHQsaSxoKX19KSh0LGUscyxpLHNyLHIsbyk7ZWxzZXt2YXIgYz1yP3IoJG8odCxzKSxhLHMrIiIsdCxlLG8pOm47Yz09PW4mJihjPWEpLEpuKHQscyxjKX19KSxvbCl9ZnVuY3Rpb24gbHIodCxlKXt2YXIgaT10Lmxlbmd0aDtpZihpKXJldHVybiBCbyhlKz1lPDA/aTowLGkpP3RbZV06bn1mdW5jdGlvbiBjcih0LGUsbil7ZT1lLmxlbmd0aD9NZShlLChmdW5jdGlvbih0KXtyZXR1cm4gaHModCk/ZnVuY3Rpb24oZSl7cmV0dXJuIGppKGUsMT09PXQubGVuZ3RoP3RbMF06dCl9OnR9KSk6W0xsXTt2YXIgaT0tMTtyZXR1cm4gZT1NZShlLFVlKEFvKCkpKSwoZnVuY3Rpb24gcih0LGUpe3ZhciBuPXQubGVuZ3RoO2Zvcih0LnNvcnQoZSk7bi0tOyl0W25dPXRbbl0udmFsdWU7cmV0dXJuIHR9KShycih0LChmdW5jdGlvbih0LG4scil7cmV0dXJue2NyaXRlcmlhOk1lKGUsKGZ1bmN0aW9uKGUpe3JldHVybiBlKHQpfSkpLGluZGV4OisraSx2YWx1ZTp0fX0pKSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZnVuY3Rpb24gaSh0LGUsbil7Zm9yKHZhciBpPS0xLHI9dC5jcml0ZXJpYSxvPWUuY3JpdGVyaWEsYT1yLmxlbmd0aCxzPW4ubGVuZ3RoOysraTxhOyl7dmFyIGw9V3IocltpXSxvW2ldKTtpZihsKXJldHVybiBpPj1zP2w6bCooImRlc2MiPT1uW2ldPy0xOjEpfXJldHVybiB0LmluZGV4LWUuaW5kZXh9KSh0LGUsbil9KSl9ZnVuY3Rpb24gdXIodCxlLG4pe2Zvcih2YXIgaT0tMSxyPWUubGVuZ3RoLG89e307KytpPHI7KXt2YXIgYT1lW2ldLHM9amkodCxhKTtuKHMsYSkmJnlyKG8sQnIoYSx0KSxzKX1yZXR1cm4gb31mdW5jdGlvbiBocih0LGUsbixpKXt2YXIgcj1pP0llOk5lLG89LTEsYT1lLmxlbmd0aCxzPXQ7Zm9yKHQ9PT1lJiYoZT1YcihlKSksbiYmKHM9TWUodCxVZShuKSkpOysrbzxhOylmb3IodmFyIGw9MCxjPWVbb10sdT1uP24oYyk6YzsobD1yKHMsdSxsLGkpKT4tMTspcyE9PXQmJm5lLmNhbGwocyxsLDEpLG5lLmNhbGwodCxsLDEpO3JldHVybiB0fWZ1bmN0aW9uIGRyKHQsZSl7Zm9yKHZhciBuPXQ/ZS5sZW5ndGg6MCxpPW4tMTtuLS07KXt2YXIgcj1lW25dO2lmKG49PWl8fHIhPT1vKXt2YXIgbz1yO0JvKHIpP25lLmNhbGwodCxyLDEpOkxyKHQscil9fXJldHVybiB0fWZ1bmN0aW9uIHByKHQsZSl7cmV0dXJuIHQrdW4oYm4oKSooZS10KzEpKX1mdW5jdGlvbiBmcih0LGUpe3ZhciBuPSIiO2lmKCF0fHxlPDF8fGU+YylyZXR1cm4gbjtkb3tlJTImJihuKz10KSwoZT11bihlLzIpKSYmKHQrPXQpfXdoaWxlKGUpO3JldHVybiBufWZ1bmN0aW9uIG1yKHQsZSl7cmV0dXJuIEpvKHFvKHQsZSxMbCksdCsiIil9ZnVuY3Rpb24gZ3IodCl7cmV0dXJuICRuKHBsKHQpKX1mdW5jdGlvbiBfcih0LGUpe3ZhciBuPXBsKHQpO3JldHVybiBlYShuLG9pKGUsMCxuLmxlbmd0aCkpfWZ1bmN0aW9uIHlyKHQsZSxpLHIpe2lmKCFTcyh0KSlyZXR1cm4gdDtmb3IodmFyIG89LTEsYT0oZT1CcihlLHQpKS5sZW5ndGgscz1hLTEsbD10O251bGwhPWwmJisrbzxhOyl7dmFyIGM9cmEoZVtvXSksdT1pO2lmKCJfX3Byb3RvX18iPT09Y3x8ImNvbnN0cnVjdG9yIj09PWN8fCJwcm90b3R5cGUiPT09YylyZXR1cm4gdDtpZihvIT1zKXt2YXIgaD1sW2NdOyh1PXI/cihoLGMsbCk6bik9PT1uJiYodT1TcyhoKT9oOkJvKGVbbysxXSk/W106e30pfVFuKGwsYyx1KSxsPWxbY119cmV0dXJuIHR9dmFyIHZyPUFuP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIEFuLnNldCh0LGUpLHR9OkxsLGJyPWxlP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIGxlKHQsInRvU3RyaW5nIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsdmFsdWU6Q2woZSksd3JpdGFibGU6ITB9KX06TGw7ZnVuY3Rpb24geHIodCl7cmV0dXJuIGVhKHBsKHQpKX1mdW5jdGlvbiB3cih0LGUsbil7dmFyIGk9LTEscj10Lmxlbmd0aDtlPDAmJihlPS1lPnI/MDpyK2UpLChuPW4+cj9yOm4pPDAmJihuKz1yKSxyPWU+bj8wOm4tZT4+PjAsZT4+Pj0wO2Zvcih2YXIgbz12dChyKTsrK2k8cjspb1tpXT10W2krZV07cmV0dXJuIG99ZnVuY3Rpb24gU3IodCxlKXt2YXIgbjtyZXR1cm4gTmkodCwoZnVuY3Rpb24odCxpLHIpe3JldHVybiEobj1lKHQsaSxyKSl9KSksISFufWZ1bmN0aW9uIE1yKHQsZSxuKXt2YXIgaT0wLHI9bnVsbD09dD9pOnQubGVuZ3RoO2lmKCJudW1iZXIiPT10eXBlb2YgZSYmZT09ZSYmcjw9MjE0NzQ4MzY0Nyl7Zm9yKDtpPHI7KXt2YXIgbz1pK3I+Pj4xLGE9dFtvXTtudWxsIT09YSYmIU9zKGEpJiYobj9hPD1lOmE8ZSk/aT1vKzE6cj1vfXJldHVybiByfXJldHVybiBFcih0LGUsTGwsbil9ZnVuY3Rpb24gRXIodCxlLGkscil7dmFyIG89MCxhPW51bGw9PXQ/MDp0Lmxlbmd0aDtpZigwPT09YSlyZXR1cm4gMDtmb3IodmFyIHM9KGU9aShlKSkhPWUsbD1udWxsPT09ZSxjPU9zKGUpLHU9ZT09PW47bzxhOyl7dmFyIGg9dW4oKG8rYSkvMiksZD1pKHRbaF0pLHA9ZCE9PW4sZj1udWxsPT09ZCxtPWQ9PWQsZz1PcyhkKTtpZihzKXZhciBfPXJ8fG07ZWxzZSBfPXU/bSYmKHJ8fHApOmw/bSYmcCYmKHJ8fCFmKTpjP20mJnAmJiFmJiYocnx8IWcpOiFmJiYhZyYmKHI/ZDw9ZTpkPGUpO18/bz1oKzE6YT1ofXJldHVybiBfbihhLDQyOTQ5NjcyOTQpfWZ1bmN0aW9uIFRyKHQsZSl7Zm9yKHZhciBuPS0xLGk9dC5sZW5ndGgscj0wLG89W107KytuPGk7KXt2YXIgYT10W25dLHM9ZT9lKGEpOmE7aWYoIW58fCFzcyhzLGwpKXt2YXIgbD1zO29bcisrXT0wPT09YT8wOmF9fXJldHVybiBvfWZ1bmN0aW9uIENyKHQpe3JldHVybiJudW1iZXIiPT10eXBlb2YgdD90Ok9zKHQpP3U6K3R9ZnVuY3Rpb24gQXIodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiB0O2lmKGhzKHQpKXJldHVybiBNZSh0LEFyKSsiIjtpZihPcyh0KSlyZXR1cm4gRG4/RG4uY2FsbCh0KToiIjt2YXIgZT10KyIiO3JldHVybiIwIj09ZSYmMS90PT0tMS8wPyItMCI6ZX1mdW5jdGlvbiBrcih0LGUsbil7dmFyIGk9LTEscj13ZSxvPXQubGVuZ3RoLGE9ITAscz1bXSxsPXM7aWYobilhPSExLHI9U2U7ZWxzZSBpZihvPj0yMDApe3ZhciBjPWU/bnVsbDptbyh0KTtpZihjKXJldHVybiBlbihjKTthPSExLHI9R2UsbD1uZXcgcW59ZWxzZSBsPWU/W106czt0OmZvcig7KytpPG87KXt2YXIgdT10W2ldLGg9ZT9lKHUpOnU7aWYodT1ufHwwIT09dT91OjAsYSYmaD09aCl7Zm9yKHZhciBkPWwubGVuZ3RoO2QtLTspaWYobFtkXT09PWgpY29udGludWUgdDtlJiZsLnB1c2goaCkscy5wdXNoKHUpfWVsc2UgcihsLGgsbil8fChsIT09cyYmbC5wdXNoKGgpLHMucHVzaCh1KSl9cmV0dXJuIHN9ZnVuY3Rpb24gTHIodCxlKXtyZXR1cm4gbnVsbD09KHQ9WW8odCxlPUJyKGUsdCkpKXx8ZGVsZXRlIHRbcmEoX2EoZSkpXX1mdW5jdGlvbiBQcih0LGUsbixpKXtyZXR1cm4geXIodCxlLG4oamkodCxlKSksaSl9ZnVuY3Rpb24gTnIodCxlLG4saSl7Zm9yKHZhciByPXQubGVuZ3RoLG89aT9yOi0xOyhpP28tLTorK288cikmJmUodFtvXSxvLHQpOyk7cmV0dXJuIG4/d3IodCxpPzA6byxpP28rMTpyKTp3cih0LGk/bysxOjAsaT9yOm8pfWZ1bmN0aW9uIElyKHQsZSl7dmFyIG49dDtyZXR1cm4gbiBpbnN0YW5jZW9mIFVuJiYobj1uLnZhbHVlKCkpLFRlKGUsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZnVuYy5hcHBseShlLnRoaXNBcmcsRWUoW3RdLGUuYXJncykpfSksbil9ZnVuY3Rpb24gT3IodCxlLG4pe3ZhciBpPXQubGVuZ3RoO2lmKGk8MilyZXR1cm4gaT9rcih0WzBdKTpbXTtmb3IodmFyIHI9LTEsbz12dChpKTsrK3I8aTspZm9yKHZhciBhPXRbcl0scz0tMTsrK3M8aTspcyE9ciYmKG9bcl09Y2kob1tyXXx8YSx0W3NdLGUsbikpO3JldHVybiBrcihEaShvLDEpLGUsbil9ZnVuY3Rpb24gUnIodCxlLGkpe2Zvcih2YXIgcj0tMSxvPXQubGVuZ3RoLGE9ZS5sZW5ndGgscz17fTsrK3I8bzspaShzLHRbcl0scjxhP2Vbcl06bik7cmV0dXJuIHN9ZnVuY3Rpb24genIodCl7cmV0dXJuIG1zKHQpP3Q6W119ZnVuY3Rpb24gRHIodCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpMbH1mdW5jdGlvbiBCcih0LGUpe3JldHVybiBocyh0KT90OkZvKHQsZSk/W3RdOm5hKFdzKHQpKX12YXIgSHI9bXI7ZnVuY3Rpb24gRnIodCxlLGkpe3ZhciByPXQubGVuZ3RoO3JldHVybiBpPWk9PT1uP3I6aSwhZSYmaT49cj90OndyKHQsZSxpKX12YXIgVnI9dmV8fGZ1bmN0aW9uKHQpe3JldHVybiBpZS5jbGVhclRpbWVvdXQodCl9O2Z1bmN0aW9uIFVyKHQsZSl7aWYoZSlyZXR1cm4gdC5zbGljZSgpO3ZhciBuPXQubGVuZ3RoLGk9R3Q/R3Qobik6bmV3IHQuY29uc3RydWN0b3Iobik7cmV0dXJuIHQuY29weShpKSxpfWZ1bmN0aW9uIGpyKHQpe3ZhciBlPW5ldyB0LmNvbnN0cnVjdG9yKHQuYnl0ZUxlbmd0aCk7cmV0dXJuIG5ldyBWdChlKS5zZXQobmV3IFZ0KHQpKSxlfWZ1bmN0aW9uIEdyKHQsZSl7dmFyIG49ZT9qcih0LmJ1ZmZlcik6dC5idWZmZXI7cmV0dXJuIG5ldyB0LmNvbnN0cnVjdG9yKG4sdC5ieXRlT2Zmc2V0LHQubGVuZ3RoKX1mdW5jdGlvbiBXcih0LGUpe2lmKHQhPT1lKXt2YXIgaT10IT09bixyPW51bGw9PT10LG89dD09dCxhPU9zKHQpLHM9ZSE9PW4sbD1udWxsPT09ZSxjPWU9PWUsdT1PcyhlKTtpZighbCYmIXUmJiFhJiZ0PmV8fGEmJnMmJmMmJiFsJiYhdXx8ciYmcyYmY3x8IWkmJmN8fCFvKXJldHVybiAxO2lmKCFyJiYhYSYmIXUmJnQ8ZXx8dSYmaSYmbyYmIXImJiFhfHxsJiZpJiZvfHwhcyYmb3x8IWMpcmV0dXJuLTF9cmV0dXJuIDB9ZnVuY3Rpb24gcXIodCxlLG4saSl7Zm9yKHZhciByPS0xLG89dC5sZW5ndGgsYT1uLmxlbmd0aCxzPS0xLGw9ZS5sZW5ndGgsYz1nbihvLWEsMCksdT12dChsK2MpLGg9IWk7KytzPGw7KXVbc109ZVtzXTtmb3IoOysrcjxhOykoaHx8cjxvKSYmKHVbbltyXV09dFtyXSk7Zm9yKDtjLS07KXVbcysrXT10W3IrK107cmV0dXJuIHV9ZnVuY3Rpb24gWXIodCxlLG4saSl7Zm9yKHZhciByPS0xLG89dC5sZW5ndGgsYT0tMSxzPW4ubGVuZ3RoLGw9LTEsYz1lLmxlbmd0aCx1PWduKG8tcywwKSxoPXZ0KHUrYyksZD0haTsrK3I8dTspaFtyXT10W3JdO2Zvcih2YXIgcD1yOysrbDxjOyloW3ArbF09ZVtsXTtmb3IoOysrYTxzOykoZHx8cjxvKSYmKGhbcCtuW2FdXT10W3IrK10pO3JldHVybiBofWZ1bmN0aW9uIFhyKHQsZSl7dmFyIG49LTEsaT10Lmxlbmd0aDtmb3IoZXx8KGU9dnQoaSkpOysrbjxpOyllW25dPXRbbl07cmV0dXJuIGV9ZnVuY3Rpb24gJHIodCxlLGkscil7dmFyIG89IWk7aXx8KGk9e30pO2Zvcih2YXIgYT0tMSxzPWUubGVuZ3RoOysrYTxzOyl7dmFyIGw9ZVthXSxjPXI/cihpW2xdLHRbbF0sbCxpLHQpOm47Yz09PW4mJihjPXRbbF0pLG8/aWkoaSxsLGMpOlFuKGksbCxjKX1yZXR1cm4gaX1mdW5jdGlvbiBLcih0LGUpe3JldHVybiBmdW5jdGlvbihuLGkpe3ZhciByPWhzKG4pP2dlOmVpLG89ZT9lKCk6e307cmV0dXJuIHIobix0LEFvKGksMiksbyl9fWZ1bmN0aW9uIFpyKHQpe3JldHVybiBtcigoZnVuY3Rpb24oZSxpKXt2YXIgcj0tMSxvPWkubGVuZ3RoLGE9bz4xP2lbby0xXTpuLHM9bz4yP2lbMl06bjtmb3IoYT10Lmxlbmd0aD4zJiYiZnVuY3Rpb24iPT10eXBlb2YgYT8oby0tLGEpOm4scyYmSG8oaVswXSxpWzFdLHMpJiYoYT1vPDM/bjphLG89MSksZT1NdChlKTsrK3I8bzspe3ZhciBsPWlbcl07bCYmdChlLGwscixhKX1yZXR1cm4gZX0pKX1mdW5jdGlvbiBKcih0LGUpe3JldHVybiBmdW5jdGlvbihuLGkpe2lmKG51bGw9PW4pcmV0dXJuIG47aWYoIWZzKG4pKXJldHVybiB0KG4saSk7Zm9yKHZhciByPW4ubGVuZ3RoLG89ZT9yOi0xLGE9TXQobik7KGU/by0tOisrbzxyKSYmITEhPT1pKGFbb10sbyxhKTspO3JldHVybiBufX1mdW5jdGlvbiBRcih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuLGkpe2Zvcih2YXIgcj0tMSxvPU10KGUpLGE9aShlKSxzPWEubGVuZ3RoO3MtLTspe3ZhciBsPWFbdD9zOisrcl07aWYoITE9PT1uKG9bbF0sbCxvKSlicmVha31yZXR1cm4gZX19ZnVuY3Rpb24gdG8odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBpPVplKGU9V3MoZSkpP29uKGUpOm4scj1pP2lbMF06ZS5jaGFyQXQoMCksbz1pP0ZyKGksMSkuam9pbigiIik6ZS5zbGljZSgxKTtyZXR1cm4gclt0XSgpK299fWZ1bmN0aW9uIGVvKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gVGUoTWwoZ2woZSkucmVwbGFjZShVdCwiIikpLHQsIiIpfX1mdW5jdGlvbiBubyh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHM7c3dpdGNoKGUubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIG5ldyB0O2Nhc2UgMTpyZXR1cm4gbmV3IHQoZVswXSk7Y2FzZSAyOnJldHVybiBuZXcgdChlWzBdLGVbMV0pO2Nhc2UgMzpyZXR1cm4gbmV3IHQoZVswXSxlWzFdLGVbMl0pO2Nhc2UgNDpyZXR1cm4gbmV3IHQoZVswXSxlWzFdLGVbMl0sZVszXSk7Y2FzZSA1OnJldHVybiBuZXcgdChlWzBdLGVbMV0sZVsyXSxlWzNdLGVbNF0pO2Nhc2UgNjpyZXR1cm4gbmV3IHQoZVswXSxlWzFdLGVbMl0sZVszXSxlWzRdLGVbNV0pO2Nhc2UgNzpyZXR1cm4gbmV3IHQoZVswXSxlWzFdLGVbMl0sZVszXSxlWzRdLGVbNV0sZVs2XSl9dmFyIG49SG4odC5wcm90b3R5cGUpLGk9dC5hcHBseShuLGUpO3JldHVybiBTcyhpKT9pOm59fWZ1bmN0aW9uIGlvKHQpe3JldHVybiBmdW5jdGlvbihlLGkscil7dmFyIG89TXQoZSk7aWYoIWZzKGUpKXt2YXIgYT1BbyhpLDMpO2U9cmwoZSksaT1mdW5jdGlvbih0KXtyZXR1cm4gYShvW3RdLHQsbyl9fXZhciBzPXQoZSxpLHIpO3JldHVybiBzPi0xP29bYT9lW3NdOnNdOm59fWZ1bmN0aW9uIHJvKHQpe3JldHVybiB3bygoZnVuY3Rpb24oZSl7dmFyIHI9ZS5sZW5ndGgsbz1yLGE9Vm4ucHJvdG90eXBlLnRocnU7Zm9yKHQmJmUucmV2ZXJzZSgpO28tLTspe3ZhciBzPWVbb107aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHMpdGhyb3cgbmV3IEN0KGkpO2lmKGEmJiFsJiYid3JhcHBlciI9PVRvKHMpKXZhciBsPW5ldyBWbihbXSwhMCl9Zm9yKG89bD9vOnI7KytvPHI7KXt2YXIgYz1UbyhzPWVbb10pLHU9IndyYXBwZXIiPT1jP0VvKHMpOm47bD11JiZWbyh1WzBdKSYmNDI0PT11WzFdJiYhdVs0XS5sZW5ndGgmJjE9PXVbOV0/bFtUbyh1WzBdKV0uYXBwbHkobCx1WzNdKToxPT1zLmxlbmd0aCYmVm8ocyk/bFtjXSgpOmwudGhydShzKX1yZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMsbj10WzBdO2lmKGwmJjE9PXQubGVuZ3RoJiZocyhuKSlyZXR1cm4gbC5wbGFudChuKS52YWx1ZSgpO2Zvcih2YXIgaT0wLG89cj9lW2ldLmFwcGx5KHRoaXMsdCk6bjsrK2k8cjspbz1lW2ldLmNhbGwodGhpcyxvKTtyZXR1cm4gb319KSl9ZnVuY3Rpb24gb28odCxlLGkscixvLGEsbCxjLHUsaCl7dmFyIGQ9ZSZzLHA9MSZlLGY9MiZlLG09MjQmZSxnPTUxMiZlLF89Zj9uOm5vKHQpO3JldHVybiBmdW5jdGlvbiBuKCl7Zm9yKHZhciBzPWFyZ3VtZW50cy5sZW5ndGgseT12dChzKSx2PXM7di0tOyl5W3ZdPWFyZ3VtZW50c1t2XTtpZihtKXZhciBiPUNvKG4pLHg9WWUoeSxiKTtpZihyJiYoeT1xcih5LHIsbyxtKSksYSYmKHk9WXIoeSxhLGwsbSkpLHMtPXgsbSYmczxoKXt2YXIgdz10bih5LGIpO3JldHVybiBwbyh0LGUsb28sbi5wbGFjZWhvbGRlcixpLHksdyxjLHUsaC1zKX12YXIgUz1wP2k6dGhpcyxNPWY/U1t0XTp0O3JldHVybiBzPXkubGVuZ3RoLGM/eT1Ybyh5LGMpOmcmJnM+MSYmeS5yZXZlcnNlKCksZCYmdTxzJiYoeS5sZW5ndGg9dSksdGhpcyYmdGhpcyE9PWllJiZ0aGlzIGluc3RhbmNlb2YgbiYmKE09X3x8bm8oTSkpLE0uYXBwbHkoUyx5KX19ZnVuY3Rpb24gYW8odCxlKXtyZXR1cm4gZnVuY3Rpb24obixpKXtyZXR1cm4oZnVuY3Rpb24gcih0LGUsbixpKXtyZXR1cm4gRmkodCwoZnVuY3Rpb24odCxyLG8pe2UoaSxuKHQpLHIsbyl9KSksaX0pKG4sdCxlKGkpLHt9KX19ZnVuY3Rpb24gc28odCxlKXtyZXR1cm4gZnVuY3Rpb24oaSxyKXt2YXIgbztpZihpPT09biYmcj09PW4pcmV0dXJuIGU7aWYoaSE9PW4mJihvPWkpLHIhPT1uKXtpZihvPT09bilyZXR1cm4gcjsic3RyaW5nIj09dHlwZW9mIGl8fCJzdHJpbmciPT10eXBlb2Ygcj8oaT1BcihpKSxyPUFyKHIpKTooaT1DcihpKSxyPUNyKHIpKSxvPXQoaSxyKX1yZXR1cm4gb319ZnVuY3Rpb24gbG8odCl7cmV0dXJuIHdvKChmdW5jdGlvbihlKXtyZXR1cm4gZT1NZShlLFVlKEFvKCkpKSxtcigoZnVuY3Rpb24obil7dmFyIGk9dGhpcztyZXR1cm4gdChlLChmdW5jdGlvbih0KXtyZXR1cm4gbWUodCxpLG4pfSkpfSkpfSkpfWZ1bmN0aW9uIGNvKHQsZSl7dmFyIGk9KGU9ZT09PW4/IiAiOkFyKGUpKS5sZW5ndGg7aWYoaTwyKXJldHVybiBpP2ZyKGUsdCk6ZTt2YXIgcj1mcihlLGNuKHQvcm4oZSkpKTtyZXR1cm4gWmUoZSk/RnIob24ociksMCx0KS5qb2luKCIiKTpyLnNsaWNlKDAsdCl9ZnVuY3Rpb24gdW8odCl7cmV0dXJuIGZ1bmN0aW9uKGUsaSxyKXtyZXR1cm4gciYmIm51bWJlciIhPXR5cGVvZiByJiZIbyhlLGkscikmJihpPXI9biksZT1GcyhlKSxpPT09bj8oaT1lLGU9MCk6aT1GcyhpKSwoZnVuY3Rpb24gbyh0LGUsbixpKXtmb3IodmFyIHI9LTEsbz1nbihjbigoZS10KS8obnx8MSkpLDApLGE9dnQobyk7by0tOylhW2k/bzorK3JdPXQsdCs9bjtyZXR1cm4gYX0pKGUsaSxyPXI9PT1uP2U8aT8xOi0xOkZzKHIpLHQpfX1mdW5jdGlvbiBobyh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGUmJiJzdHJpbmciPT10eXBlb2Ygbnx8KGU9anMoZSksbj1qcyhuKSksdChlLG4pfX1mdW5jdGlvbiBwbyh0LGUsaSxyLG8scyxsLGMsdSxoKXt2YXIgZD04JmU7ZXw9ZD9hOjY0LDQmKGUmPX4oZD82NDphKSl8fChlJj0tNCk7dmFyIHA9W3QsZSxvLGQ/czpuLGQ/bDpuLGQ/bjpzLGQ/bjpsLGMsdSxoXSxmPWkuYXBwbHkobixwKTtyZXR1cm4gVm8odCkmJktvKGYscCksZi5wbGFjZWhvbGRlcj1yLFFvKGYsdCxlKX1mdW5jdGlvbiBmbyh0KXt2YXIgZT1TdFt0XTtyZXR1cm4gZnVuY3Rpb24odCxuKXtpZih0PWpzKHQpLChuPW51bGw9PW4/MDpfbihWcyhuKSwyOTIpKSYmcG4odCkpe3ZhciBpPShXcyh0KSsiZSIpLnNwbGl0KCJlIik7cmV0dXJuKygoaT0oV3MoZShpWzBdKyJlIisoK2lbMV0rbikpKSsiZSIpLnNwbGl0KCJlIikpWzBdKyJlIisoK2lbMV0tbikpfXJldHVybiBlKHQpfX12YXIgbW89RW4mJjEvZW4obmV3IEVuKFssLTBdKSlbMV09PWw/ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBFbih0KX06Umw7ZnVuY3Rpb24gZ28odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPU9vKGUpO3JldHVybiBuPT1iP0plKGUpOm49PUU/bm4oZSk6KGZ1bmN0aW9uIGkodCxlKXtyZXR1cm4gTWUoZSwoZnVuY3Rpb24oZSl7cmV0dXJuW2UsdFtlXV19KSl9KShlLHQoZSkpfX1mdW5jdGlvbiBfbyh0LGUscixsLGMsdSxoLGQpe3ZhciBwPTImZTtpZighcCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEN0KGkpO3ZhciBmPWw/bC5sZW5ndGg6MDtpZihmfHwoZSY9LTk3LGw9Yz1uKSxoPWg9PT1uP2g6Z24oVnMoaCksMCksZD1kPT09bj9kOlZzKGQpLGYtPWM/Yy5sZW5ndGg6MCw2NCZlKXt2YXIgbT1sLGc9YztsPWM9bn12YXIgXz1wP246RW8odCkseT1bdCxlLHIsbCxjLG0sZyx1LGgsZF07aWYoXyYmKGZ1bmN0aW9uIHYodCxlKXt2YXIgbj10WzFdLGk9ZVsxXSxyPW58aTtpZighKHI8MTMxfHxpPT1zJiY4PT1ufHxpPT1zJiYyNTY9PW4mJnRbN10ubGVuZ3RoPD1lWzhdfHwzODQ9PWkmJmVbN10ubGVuZ3RoPD1lWzhdJiY4PT1uKSlyZXR1cm4gdDsxJmkmJih0WzJdPWVbMl0scnw9MSZuPzA6NCk7dmFyIGE9ZVszXTtpZihhKXt2YXIgbD10WzNdO3RbM109bD9xcihsLGEsZVs0XSk6YSx0WzRdPWw/dG4odFszXSxvKTplWzRdfShhPWVbNV0pJiYodFs1XT0obD10WzVdKT9ZcihsLGEsZVs2XSk6YSx0WzZdPWw/dG4odFs1XSxvKTplWzZdKSwoYT1lWzddKSYmKHRbN109YSksaSZzJiYodFs4XT1udWxsPT10WzhdP2VbOF06X24odFs4XSxlWzhdKSksbnVsbD09dFs5XSYmKHRbOV09ZVs5XSksdFswXT1lWzBdLHRbMV09cn0pKHksXyksdD15WzBdLGU9eVsxXSxyPXlbMl0sbD15WzNdLGM9eVs0XSwhKGQ9eVs5XT15WzldPT09bj9wPzA6dC5sZW5ndGg6Z24oeVs5XS1mLDApKSYmMjQmZSYmKGUmPS0yNSksZSYmMSE9ZSl3PTg9PWV8fDE2PT1lPyhmdW5jdGlvbiBiKHQsZSxpKXt2YXIgcj1ubyh0KTtyZXR1cm4gZnVuY3Rpb24gbygpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLHM9dnQoYSksbD1hLGM9Q28obyk7bC0tOylzW2xdPWFyZ3VtZW50c1tsXTt2YXIgdT1hPDMmJnNbMF0hPT1jJiZzW2EtMV0hPT1jP1tdOnRuKHMsYyk7cmV0dXJuKGEtPXUubGVuZ3RoKTxpP3BvKHQsZSxvbyxvLnBsYWNlaG9sZGVyLG4scyx1LG4sbixpLWEpOm1lKHRoaXMmJnRoaXMhPT1pZSYmdGhpcyBpbnN0YW5jZW9mIG8/cjp0LHRoaXMscyl9fSkodCxlLGQpOmUhPWEmJjMzIT1lfHxjLmxlbmd0aD9vby5hcHBseShuLHkpOihmdW5jdGlvbiB4KHQsZSxuLGkpe3ZhciByPTEmZSxvPW5vKHQpO3JldHVybiBmdW5jdGlvbiBlKCl7Zm9yKHZhciBhPS0xLHM9YXJndW1lbnRzLmxlbmd0aCxsPS0xLGM9aS5sZW5ndGgsdT12dChjK3MpLGg9dGhpcyYmdGhpcyE9PWllJiZ0aGlzIGluc3RhbmNlb2YgZT9vOnQ7KytsPGM7KXVbbF09aVtsXTtmb3IoO3MtLTspdVtsKytdPWFyZ3VtZW50c1srK2FdO3JldHVybiBtZShoLHI/bjp0aGlzLHUpfX0pKHQsZSxyLGwpO2Vsc2UgdmFyIHc9KGZ1bmN0aW9uIFModCxlLG4pe3ZhciBpPTEmZSxyPW5vKHQpO3JldHVybiBmdW5jdGlvbiBlKCl7cmV0dXJuKHRoaXMmJnRoaXMhPT1pZSYmdGhpcyBpbnN0YW5jZW9mIGU/cjp0KS5hcHBseShpP246dGhpcyxhcmd1bWVudHMpfX0pKHQsZSxyKTtyZXR1cm4gUW8oKF8/dnI6S28pKHcseSksdCxlKX1mdW5jdGlvbiB5byh0LGUsaSxyKXtyZXR1cm4gdD09PW58fHNzKHQsa3RbaV0pJiYhTnQuY2FsbChyLGkpP2U6dH1mdW5jdGlvbiB2byh0LGUsaSxyLG8sYSl7cmV0dXJuIFNzKHQpJiZTcyhlKSYmKGEuc2V0KGUsdCksc3IodCxlLG4sdm8sYSksYS5kZWxldGUoZSkpLHR9ZnVuY3Rpb24gYm8odCl7cmV0dXJuIEFzKHQpP246dH1mdW5jdGlvbiB4byh0LGUsaSxyLG8sYSl7dmFyIHM9MSZpLGw9dC5sZW5ndGgsYz1lLmxlbmd0aDtpZihsIT1jJiYhKHMmJmM+bCkpcmV0dXJuITE7dmFyIHU9YS5nZXQodCksaD1hLmdldChlKTtpZih1JiZoKXJldHVybiB1PT1lJiZoPT10O3ZhciBkPS0xLHA9ITAsZj0yJmk/bmV3IHFuOm47Zm9yKGEuc2V0KHQsZSksYS5zZXQoZSx0KTsrK2Q8bDspe3ZhciBtPXRbZF0sZz1lW2RdO2lmKHIpdmFyIF89cz9yKGcsbSxkLGUsdCxhKTpyKG0sZyxkLHQsZSxhKTtpZihfIT09bil7aWYoXyljb250aW51ZTtwPSExO2JyZWFrfWlmKGYpe2lmKCFBZShlLChmdW5jdGlvbih0LGUpe2lmKCFHZShmLGUpJiYobT09PXR8fG8obSx0LGkscixhKSkpcmV0dXJuIGYucHVzaChlKX0pKSl7cD0hMTticmVha319ZWxzZSBpZihtIT09ZyYmIW8obSxnLGkscixhKSl7cD0hMTticmVha319cmV0dXJuIGEuZGVsZXRlKHQpLGEuZGVsZXRlKGUpLHB9ZnVuY3Rpb24gd28odCl7cmV0dXJuIEpvKHFvKHQsbixkYSksdCsiIil9ZnVuY3Rpb24gU28odCl7cmV0dXJuIEdpKHQscmwsTm8pfWZ1bmN0aW9uIE1vKHQpe3JldHVybiBHaSh0LG9sLElvKX12YXIgRW89QW4/ZnVuY3Rpb24odCl7cmV0dXJuIEFuLmdldCh0KX06Umw7ZnVuY3Rpb24gVG8odCl7Zm9yKHZhciBlPXQubmFtZSsiIixuPWtuW2VdLGk9TnQuY2FsbChrbixlKT9uLmxlbmd0aDowO2ktLTspe3ZhciByPW5baV0sbz1yLmZ1bmM7aWYobnVsbD09b3x8bz09dClyZXR1cm4gci5uYW1lfXJldHVybiBlfWZ1bmN0aW9uIENvKHQpe3JldHVybihOdC5jYWxsKEJuLCJwbGFjZWhvbGRlciIpP0JuOnQpLnBsYWNlaG9sZGVyfWZ1bmN0aW9uIEFvKCl7dmFyIHQ9Qm4uaXRlcmF0ZWV8fFBsO3JldHVybiB0PXQ9PT1QbD9lcjp0LGFyZ3VtZW50cy5sZW5ndGg/dChhcmd1bWVudHNbMF0sYXJndW1lbnRzWzFdKTp0fWZ1bmN0aW9uIGtvKHQsZSl7dmFyIG49dC5fX2RhdGFfXztyZXR1cm4oZnVuY3Rpb24gaSh0KXt2YXIgZT10eXBlb2YgdDtyZXR1cm4ic3RyaW5nIj09ZXx8Im51bWJlciI9PWV8fCJzeW1ib2wiPT1lfHwiYm9vbGVhbiI9PWU/Il9fcHJvdG9fXyIhPT10Om51bGw9PT10fSkoZSk/blsic3RyaW5nIj09dHlwZW9mIGU/InN0cmluZyI6Imhhc2giXTpuLm1hcH1mdW5jdGlvbiBMbyh0KXtmb3IodmFyIGU9cmwodCksbj1lLmxlbmd0aDtuLS07KXt2YXIgaT1lW25dLHI9dFtpXTtlW25dPVtpLHIsR28ocildfXJldHVybiBlfWZ1bmN0aW9uIFBvKHQsZSl7dmFyIGk9KGZ1bmN0aW9uIHIodCxlKXtyZXR1cm4gbnVsbD09dD9uOnRbZV19KSh0LGUpO3JldHVybiB0cihpKT9pOm59dmFyIE5vPWhuP2Z1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P1tdOih0PU10KHQpLHhlKGhuKHQpLChmdW5jdGlvbihlKXtyZXR1cm4gZWUuY2FsbCh0LGUpfSkpKX06VWwsSW89aG4/ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdO3Q7KUVlKGUsTm8odCkpLHQ9cXQodCk7cmV0dXJuIGV9OlVsLE9vPVdpO2Z1bmN0aW9uIFJvKHQsZSxuKXtmb3IodmFyIGk9LTEscj0oZT1CcihlLHQpKS5sZW5ndGgsbz0hMTsrK2k8cjspe3ZhciBhPXJhKGVbaV0pO2lmKCEobz1udWxsIT10JiZuKHQsYSkpKWJyZWFrO3Q9dFthXX1yZXR1cm4gb3x8KytpIT1yP286ISEocj1udWxsPT10PzA6dC5sZW5ndGgpJiZ3cyhyKSYmQm8oYSxyKSYmKGhzKHQpfHx1cyh0KSl9ZnVuY3Rpb24gem8odCl7cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIHQuY29uc3RydWN0b3J8fGpvKHQpP3t9OkhuKHF0KHQpKX1mdW5jdGlvbiBEbyh0KXtyZXR1cm4gaHModCl8fHVzKHQpfHwhIShyZSYmdCYmdFtyZV0pfWZ1bmN0aW9uIEJvKHQsZSl7dmFyIG49dHlwZW9mIHQ7cmV0dXJuISEoZT1udWxsPT1lP2M6ZSkmJigibnVtYmVyIj09bnx8InN5bWJvbCIhPW4mJm10LnRlc3QodCkpJiZ0Pi0xJiZ0JTE9PTAmJnQ8ZX1mdW5jdGlvbiBIbyh0LGUsbil7aWYoIVNzKG4pKXJldHVybiExO3ZhciBpPXR5cGVvZiBlO3JldHVybiEhKCJudW1iZXIiPT1pP2ZzKG4pJiZCbyhlLG4ubGVuZ3RoKToic3RyaW5nIj09aSYmZSBpbiBuKSYmc3MobltlXSx0KX1mdW5jdGlvbiBGbyh0LGUpe2lmKGhzKHQpKXJldHVybiExO3ZhciBuPXR5cGVvZiB0O3JldHVybiEoIm51bWJlciIhPW4mJiJzeW1ib2wiIT1uJiYiYm9vbGVhbiIhPW4mJm51bGwhPXQmJiFPcyh0KSl8fFoudGVzdCh0KXx8IUsudGVzdCh0KXx8bnVsbCE9ZSYmdCBpbiBNdChlKX1mdW5jdGlvbiBWbyh0KXt2YXIgZT1Ubyh0KSxuPUJuW2VdO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBufHwhKGUgaW4gVW4ucHJvdG90eXBlKSlyZXR1cm4hMTtpZih0PT09bilyZXR1cm4hMDt2YXIgaT1FbyhuKTtyZXR1cm4hIWkmJnQ9PT1pWzBdfSh3biYmT28obmV3IHduKG5ldyBBcnJheUJ1ZmZlcigxKSkpIT1MfHxTbiYmT28obmV3IFNuKSE9Ynx8TW4mJk9vKE1uLnJlc29sdmUoKSkhPVN8fEVuJiZPbyhuZXcgRW4pIT1FfHxUbiYmT28obmV3IFRuKSE9QSkmJihPbz1mdW5jdGlvbih0KXt2YXIgZT1XaSh0KSxpPWU9PXc/dC5jb25zdHJ1Y3RvcjpuLHI9aT9vYShpKToiIjtpZihyKXN3aXRjaChyKXtjYXNlIExuOnJldHVybiBMO2Nhc2UgUG46cmV0dXJuIGI7Y2FzZSBObjpyZXR1cm4gUztjYXNlIEluOnJldHVybiBFO2Nhc2UgT246cmV0dXJuIEF9cmV0dXJuIGV9KTt2YXIgVW89THQ/YnM6amw7ZnVuY3Rpb24gam8odCl7dmFyIGU9dCYmdC5jb25zdHJ1Y3RvcjtyZXR1cm4gdD09PSgiZnVuY3Rpb24iPT10eXBlb2YgZSYmZS5wcm90b3R5cGV8fGt0KX1mdW5jdGlvbiBHbyh0KXtyZXR1cm4gdD09dCYmIVNzKHQpfWZ1bmN0aW9uIFdvKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiBudWxsIT1pJiZpW3RdPT09ZSYmKGUhPT1ufHx0IGluIE10KGkpKX19ZnVuY3Rpb24gcW8odCxlLGkpe3JldHVybiBlPWduKGU9PT1uP3QubGVuZ3RoLTE6ZSwwKSxmdW5jdGlvbigpe2Zvcih2YXIgbj1hcmd1bWVudHMscj0tMSxvPWduKG4ubGVuZ3RoLWUsMCksYT12dChvKTsrK3I8bzspYVtyXT1uW2Urcl07cj0tMTtmb3IodmFyIHM9dnQoZSsxKTsrK3I8ZTspc1tyXT1uW3JdO3JldHVybiBzW2VdPWkoYSksbWUodCx0aGlzLHMpfX1mdW5jdGlvbiBZbyh0LGUpe3JldHVybiBlLmxlbmd0aDwyP3Q6amkodCx3cihlLDAsLTEpKX1mdW5jdGlvbiBYbyh0LGUpe2Zvcih2YXIgaT10Lmxlbmd0aCxyPV9uKGUubGVuZ3RoLGkpLG89WHIodCk7ci0tOyl7dmFyIGE9ZVtyXTt0W3JdPUJvKGEsaSk/b1thXTpufXJldHVybiB0fWZ1bmN0aW9uICRvKHQsZSl7aWYoKCJjb25zdHJ1Y3RvciIhPT1lfHwiZnVuY3Rpb24iIT10eXBlb2YgdFtlXSkmJiJfX3Byb3RvX18iIT1lKXJldHVybiB0W2VdfXZhciBLbz10YSh2ciksWm89RGV8fGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGllLnNldFRpbWVvdXQodCxlKX0sSm89dGEoYnIpO2Z1bmN0aW9uIFFvKHQsZSxuKXt2YXIgaT1lKyIiO3JldHVybiBKbyh0LChmdW5jdGlvbiBhKHQsZSl7dmFyIG49ZS5sZW5ndGg7aWYoIW4pcmV0dXJuIHQ7dmFyIGk9bi0xO3JldHVybiBlW2ldPShuPjE/IiYgIjoiIikrZVtpXSxlPWUuam9pbihuPjI/IiwgIjoiICIpLHQucmVwbGFjZShpdCwie1xuLyogW3dyYXBwZWQgd2l0aCAiK2UrIl0gKi9cbiIpfSkoaSwoZnVuY3Rpb24gbyh0LGUpe3JldHVybiBfZShkLChmdW5jdGlvbihuKXt2YXIgaT0iXy4iK25bMF07ZSZuWzFdJiYhd2UodCxpKSYmdC5wdXNoKGkpfSkpLHQuc29ydCgpfSkoKGZ1bmN0aW9uIHIodCl7dmFyIGU9dC5tYXRjaChydCk7cmV0dXJuIGU/ZVsxXS5zcGxpdChvdCk6W119KShpKSxuKSkpfWZ1bmN0aW9uIHRhKHQpe3ZhciBlPTAsaT0wO3JldHVybiBmdW5jdGlvbigpe3ZhciByPXluKCksbz0xNi0oci1pKTtpZihpPXIsbz4wKXtpZigrK2U+PTgwMClyZXR1cm4gYXJndW1lbnRzWzBdfWVsc2UgZT0wO3JldHVybiB0LmFwcGx5KG4sYXJndW1lbnRzKX19ZnVuY3Rpb24gZWEodCxlKXt2YXIgaT0tMSxyPXQubGVuZ3RoLG89ci0xO2ZvcihlPWU9PT1uP3I6ZTsrK2k8ZTspe3ZhciBhPXByKGksbykscz10W2FdO3RbYV09dFtpXSx0W2ldPXN9cmV0dXJuIHQubGVuZ3RoPWUsdH12YXIgbmE9KGZ1bmN0aW9uIGlhKHQpe3ZhciBlPWVzKHQsKGZ1bmN0aW9uKHQpe3JldHVybiA1MDA9PT1uLnNpemUmJm4uY2xlYXIoKSx0fSkpLG49ZS5jYWNoZTtyZXR1cm4gZX0pKChmdW5jdGlvbih0KXt2YXIgZT1bXTtyZXR1cm4gNDY9PT10LmNoYXJDb2RlQXQoMCkmJmUucHVzaCgiIiksdC5yZXBsYWNlKEosKGZ1bmN0aW9uKHQsbixpLHIpe2UucHVzaChpP3IucmVwbGFjZShsdCwiJDEiKTpufHx0KX0pKSxlfSkpO2Z1bmN0aW9uIHJhKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdHx8T3ModCkpcmV0dXJuIHQ7dmFyIGU9dCsiIjtyZXR1cm4iMCI9PWUmJjEvdD09LTEvMD8iLTAiOmV9ZnVuY3Rpb24gb2EodCl7aWYobnVsbCE9dCl7dHJ5e3JldHVybiBQdC5jYWxsKHQpfWNhdGNoKHQpe310cnl7cmV0dXJuIHQrIiJ9Y2F0Y2godCl7fX1yZXR1cm4iIn1mdW5jdGlvbiBhYSh0KXtpZih0IGluc3RhbmNlb2YgVW4pcmV0dXJuIHQuY2xvbmUoKTt2YXIgZT1uZXcgVm4odC5fX3dyYXBwZWRfXyx0Ll9fY2hhaW5fXyk7cmV0dXJuIGUuX19hY3Rpb25zX189WHIodC5fX2FjdGlvbnNfXyksZS5fX2luZGV4X189dC5fX2luZGV4X18sZS5fX3ZhbHVlc19fPXQuX192YWx1ZXNfXyxlfXZhciBzYT1tcigoZnVuY3Rpb24odCxlKXtyZXR1cm4gbXModCk/Y2kodCxEaShlLDEsbXMsITApKTpbXX0pKSxsYT1tcigoZnVuY3Rpb24odCxlKXt2YXIgaT1fYShlKTtyZXR1cm4gbXMoaSkmJihpPW4pLG1zKHQpP2NpKHQsRGkoZSwxLG1zLCEwKSxBbyhpLDIpKTpbXX0pKSxjYT1tcigoZnVuY3Rpb24odCxlKXt2YXIgaT1fYShlKTtyZXR1cm4gbXMoaSkmJihpPW4pLG1zKHQpP2NpKHQsRGkoZSwxLG1zLCEwKSxuLGkpOltdfSkpO2Z1bmN0aW9uIHVhKHQsZSxuKXt2YXIgaT1udWxsPT10PzA6dC5sZW5ndGg7aWYoIWkpcmV0dXJuLTE7dmFyIHI9bnVsbD09bj8wOlZzKG4pO3JldHVybiByPDAmJihyPWduKGkrciwwKSksUGUodCxBbyhlLDMpLHIpfWZ1bmN0aW9uIGhhKHQsZSxpKXt2YXIgcj1udWxsPT10PzA6dC5sZW5ndGg7aWYoIXIpcmV0dXJuLTE7dmFyIG89ci0xO3JldHVybiBpIT09biYmKG89VnMoaSksbz1pPDA/Z24ocitvLDApOl9uKG8sci0xKSksUGUodCxBbyhlLDMpLG8sITApfWZ1bmN0aW9uIGRhKHQpe3JldHVybiBudWxsIT10JiZ0Lmxlbmd0aD9EaSh0LDEpOltdfWZ1bmN0aW9uIHBhKHQpe3JldHVybiB0JiZ0Lmxlbmd0aD90WzBdOm59dmFyIGZhPW1yKChmdW5jdGlvbih0KXt2YXIgZT1NZSh0LHpyKTtyZXR1cm4gZS5sZW5ndGgmJmVbMF09PT10WzBdPyRpKGUpOltdfSkpLG1hPW1yKChmdW5jdGlvbih0KXt2YXIgZT1fYSh0KSxpPU1lKHQsenIpO3JldHVybiBlPT09X2EoaSk/ZT1uOmkucG9wKCksaS5sZW5ndGgmJmlbMF09PT10WzBdPyRpKGksQW8oZSwyKSk6W119KSksZ2E9bXIoKGZ1bmN0aW9uKHQpe3ZhciBlPV9hKHQpLGk9TWUodCx6cik7cmV0dXJuKGU9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpuKSYmaS5wb3AoKSxpLmxlbmd0aCYmaVswXT09PXRbMF0/JGkoaSxuLGUpOltdfSkpO2Z1bmN0aW9uIF9hKHQpe3ZhciBlPW51bGw9PXQ/MDp0Lmxlbmd0aDtyZXR1cm4gZT90W2UtMV06bn12YXIgeWE9bXIodmEpO2Z1bmN0aW9uIHZhKHQsZSl7cmV0dXJuIHQmJnQubGVuZ3RoJiZlJiZlLmxlbmd0aD9ocih0LGUpOnR9dmFyIGJhPXdvKChmdW5jdGlvbih0LGUpe3ZhciBuPW51bGw9PXQ/MDp0Lmxlbmd0aCxpPXJpKHQsZSk7cmV0dXJuIGRyKHQsTWUoZSwoZnVuY3Rpb24odCl7cmV0dXJuIEJvKHQsbik/K3Q6dH0pKS5zb3J0KFdyKSksaX0pKTtmdW5jdGlvbiB4YSh0KXtyZXR1cm4gbnVsbD09dD90OnhuLmNhbGwodCl9dmFyIHdhPW1yKChmdW5jdGlvbih0KXtyZXR1cm4ga3IoRGkodCwxLG1zLCEwKSl9KSksU2E9bXIoKGZ1bmN0aW9uKHQpe3ZhciBlPV9hKHQpO3JldHVybiBtcyhlKSYmKGU9biksa3IoRGkodCwxLG1zLCEwKSxBbyhlLDIpKX0pKSxNYT1tcigoZnVuY3Rpb24odCl7dmFyIGU9X2EodCk7cmV0dXJuIGU9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpuLGtyKERpKHQsMSxtcywhMCksbixlKX0pKTtmdW5jdGlvbiBFYSh0KXtpZighdHx8IXQubGVuZ3RoKXJldHVybltdO3ZhciBlPTA7cmV0dXJuIHQ9eGUodCwoZnVuY3Rpb24odCl7aWYobXModCkpcmV0dXJuIGU9Z24odC5sZW5ndGgsZSksITB9KSksRmUoZSwoZnVuY3Rpb24oZSl7cmV0dXJuIE1lKHQsemUoZSkpfSkpfWZ1bmN0aW9uIFRhKHQsZSl7aWYoIXR8fCF0Lmxlbmd0aClyZXR1cm5bXTt2YXIgaT1FYSh0KTtyZXR1cm4gbnVsbD09ZT9pOk1lKGksKGZ1bmN0aW9uKHQpe3JldHVybiBtZShlLG4sdCl9KSl9dmFyIENhPW1yKChmdW5jdGlvbih0LGUpe3JldHVybiBtcyh0KT9jaSh0LGUpOltdfSkpLEFhPW1yKChmdW5jdGlvbih0KXtyZXR1cm4gT3IoeGUodCxtcykpfSkpLGthPW1yKChmdW5jdGlvbih0KXt2YXIgZT1fYSh0KTtyZXR1cm4gbXMoZSkmJihlPW4pLE9yKHhlKHQsbXMpLEFvKGUsMikpfSkpLExhPW1yKChmdW5jdGlvbih0KXt2YXIgZT1fYSh0KTtyZXR1cm4gZT0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOm4sT3IoeGUodCxtcyksbixlKX0pKSxQYT1tcihFYSksTmE9bXIoKGZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoLGk9ZT4xP3RbZS0xXTpuO3JldHVybiBpPSJmdW5jdGlvbiI9PXR5cGVvZiBpPyh0LnBvcCgpLGkpOm4sVGEodCxpKX0pKTtmdW5jdGlvbiBJYSh0KXt2YXIgZT1Cbih0KTtyZXR1cm4gZS5fX2NoYWluX189ITAsZX1mdW5jdGlvbiBPYSh0LGUpe3JldHVybiBlKHQpfXZhciBSYT13bygoZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGgsaT1lP3RbMF06MCxyPXRoaXMuX193cmFwcGVkX18sbz1mdW5jdGlvbihlKXtyZXR1cm4gcmkoZSx0KX07cmV0dXJuIShlPjF8fHRoaXMuX19hY3Rpb25zX18ubGVuZ3RoKSYmciBpbnN0YW5jZW9mIFVuJiZCbyhpKT8oKHI9ci5zbGljZShpLCtpKyhlPzE6MCkpKS5fX2FjdGlvbnNfXy5wdXNoKHtmdW5jOk9hLGFyZ3M6W29dLHRoaXNBcmc6bn0pLG5ldyBWbihyLHRoaXMuX19jaGFpbl9fKS50aHJ1KChmdW5jdGlvbih0KXtyZXR1cm4gZSYmIXQubGVuZ3RoJiZ0LnB1c2gobiksdH0pKSk6dGhpcy50aHJ1KG8pfSkpLHphPUtyKChmdW5jdGlvbih0LGUsbil7TnQuY2FsbCh0LG4pPysrdFtuXTppaSh0LG4sMSl9KSksRGE9aW8odWEpLEJhPWlvKGhhKTtmdW5jdGlvbiBIYSh0LGUpe3JldHVybihocyh0KT9fZTpOaSkodCxBbyhlLDMpKX1mdW5jdGlvbiBGYSh0LGUpe3JldHVybihocyh0KT95ZTpJaSkodCxBbyhlLDMpKX12YXIgVmE9S3IoKGZ1bmN0aW9uKHQsZSxuKXtOdC5jYWxsKHQsbik/dFtuXS5wdXNoKGUpOmlpKHQsbixbZV0pfSkpLFVhPW1yKChmdW5jdGlvbih0LGUsbil7dmFyIGk9LTEscj0iZnVuY3Rpb24iPT10eXBlb2YgZSxvPWZzKHQpP3Z0KHQubGVuZ3RoKTpbXTtyZXR1cm4gTmkodCwoZnVuY3Rpb24odCl7b1srK2ldPXI/bWUoZSx0LG4pOktpKHQsZSxuKX0pKSxvfSkpLGphPUtyKChmdW5jdGlvbih0LGUsbil7aWkodCxuLGUpfSkpO2Z1bmN0aW9uIEdhKHQsZSl7cmV0dXJuKGhzKHQpP01lOnJyKSh0LEFvKGUsMykpfXZhciBXYT1LcigoZnVuY3Rpb24odCxlLG4pe3Rbbj8wOjFdLnB1c2goZSl9KSwoZnVuY3Rpb24oKXtyZXR1cm5bW10sW11dfSkpLHFhPW1yKChmdW5jdGlvbih0LGUpe2lmKG51bGw9PXQpcmV0dXJuW107dmFyIG49ZS5sZW5ndGg7cmV0dXJuIG4+MSYmSG8odCxlWzBdLGVbMV0pP2U9W106bj4yJiZIbyhlWzBdLGVbMV0sZVsyXSkmJihlPVtlWzBdXSksY3IodCxEaShlLDEpLFtdKX0pKSxZYT1rZXx8ZnVuY3Rpb24oKXtyZXR1cm4gaWUuRGF0ZS5ub3coKX07ZnVuY3Rpb24gWGEodCxlLGkpe3JldHVybiBlPWk/bjplLF9vKHQscyxuLG4sbixuLGU9dCYmbnVsbD09ZT90Lmxlbmd0aDplKX1mdW5jdGlvbiAkYSh0LGUpe3ZhciByO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBDdChpKTtyZXR1cm4gdD1Wcyh0KSxmdW5jdGlvbigpe3JldHVybi0tdD4wJiYocj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksdDw9MSYmKGU9bikscn19dmFyIEthPW1yKChmdW5jdGlvbih0LGUsbil7dmFyIGk9MTtpZihuLmxlbmd0aCl7dmFyIHI9dG4obixDbyhLYSkpO2l8PWF9cmV0dXJuIF9vKHQsaSxlLG4scil9KSksWmE9bXIoKGZ1bmN0aW9uKHQsZSxuKXt2YXIgaT0zO2lmKG4ubGVuZ3RoKXt2YXIgcj10bihuLENvKFphKSk7aXw9YX1yZXR1cm4gX28oZSxpLHQsbixyKX0pKTtmdW5jdGlvbiBKYSh0LGUscil7dmFyIG8sYSxzLGwsYyx1LGg9MCxkPSExLHA9ITEsZj0hMDtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgQ3QoaSk7ZnVuY3Rpb24gbShlKXt2YXIgaT1vLHI9YTtyZXR1cm4gbz1hPW4saD1lLGw9dC5hcHBseShyLGkpfWZ1bmN0aW9uIGcodCl7cmV0dXJuIGg9dCxjPVpvKHksZSksZD9tKHQpOmx9ZnVuY3Rpb24gXyh0KXt2YXIgaT10LXU7cmV0dXJuIHU9PT1ufHxpPj1lfHxpPDB8fHAmJnQtaD49c31mdW5jdGlvbiB5KCl7dmFyIHQ9WWEoKTtpZihfKHQpKXJldHVybiB2KHQpO2M9Wm8oeSwoZnVuY3Rpb24gbih0KXt2YXIgbj1lLSh0LXUpO3JldHVybiBwP19uKG4scy0odC1oKSk6bn0pKHQpKX1mdW5jdGlvbiB2KHQpe3JldHVybiBjPW4sZiYmbz9tKHQpOihvPWE9bixsKX1mdW5jdGlvbiBiKCl7dmFyIHQ9WWEoKSxpPV8odCk7aWYobz1hcmd1bWVudHMsYT10aGlzLHU9dCxpKXtpZihjPT09bilyZXR1cm4gZyh1KTtpZihwKXJldHVybiBWcihjKSxjPVpvKHksZSksbSh1KX1yZXR1cm4gYz09PW4mJihjPVpvKHksZSkpLGx9cmV0dXJuIGU9anMoZSl8fDAsU3MocikmJihkPSEhci5sZWFkaW5nLHM9KHA9Im1heFdhaXQiaW4gcik/Z24oanMoci5tYXhXYWl0KXx8MCxlKTpzLGY9InRyYWlsaW5nImluIHI/ISFyLnRyYWlsaW5nOmYpLGIuY2FuY2VsPWZ1bmN0aW9uIHgoKXtjIT09biYmVnIoYyksaD0wLG89dT1hPWM9bn0sYi5mbHVzaD1mdW5jdGlvbiB3KCl7cmV0dXJuIGM9PT1uP2w6dihZYSgpKX0sYn12YXIgUWE9bXIoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGxpKHQsMSxlKX0pKSx0cz1tcigoZnVuY3Rpb24odCxlLG4pe3JldHVybiBsaSh0LGpzKGUpfHwwLG4pfSkpO2Z1bmN0aW9uIGVzKHQsZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHR8fG51bGwhPWUmJiJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBDdChpKTt2YXIgbj1mdW5jdGlvbigpe3ZhciBpPWFyZ3VtZW50cyxyPWU/ZS5hcHBseSh0aGlzLGkpOmlbMF0sbz1uLmNhY2hlO2lmKG8uaGFzKHIpKXJldHVybiBvLmdldChyKTt2YXIgYT10LmFwcGx5KHRoaXMsaSk7cmV0dXJuIG4uY2FjaGU9by5zZXQocixhKXx8byxhfTtyZXR1cm4gbi5jYWNoZT1uZXcoZXMuQ2FjaGV8fFduKSxufWZ1bmN0aW9uIG5zKHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBDdChpKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHM7c3dpdGNoKGUubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIXQuY2FsbCh0aGlzKTtjYXNlIDE6cmV0dXJuIXQuY2FsbCh0aGlzLGVbMF0pO2Nhc2UgMjpyZXR1cm4hdC5jYWxsKHRoaXMsZVswXSxlWzFdKTtjYXNlIDM6cmV0dXJuIXQuY2FsbCh0aGlzLGVbMF0sZVsxXSxlWzJdKX1yZXR1cm4hdC5hcHBseSh0aGlzLGUpfX1lcy5DYWNoZT1Xbjt2YXIgaXM9SHIoKGZ1bmN0aW9uKHQsZSl7dmFyIG49KGU9MT09ZS5sZW5ndGgmJmhzKGVbMF0pP01lKGVbMF0sVWUoQW8oKSkpOk1lKERpKGUsMSksVWUoQW8oKSkpKS5sZW5ndGg7cmV0dXJuIG1yKChmdW5jdGlvbihpKXtmb3IodmFyIHI9LTEsbz1fbihpLmxlbmd0aCxuKTsrK3I8bzspaVtyXT1lW3JdLmNhbGwodGhpcyxpW3JdKTtyZXR1cm4gbWUodCx0aGlzLGkpfSkpfSkpLHJzPW1yKChmdW5jdGlvbih0LGUpe3ZhciBpPXRuKGUsQ28ocnMpKTtyZXR1cm4gX28odCxhLG4sZSxpKX0pKSxvcz1tcigoZnVuY3Rpb24odCxlKXt2YXIgaT10bihlLENvKG9zKSk7cmV0dXJuIF9vKHQsNjQsbixlLGkpfSkpLGFzPXdvKChmdW5jdGlvbih0LGUpe3JldHVybiBfbyh0LDI1NixuLG4sbixlKX0pKTtmdW5jdGlvbiBzcyh0LGUpe3JldHVybiB0PT09ZXx8dCE9dCYmZSE9ZX12YXIgbHM9aG8ocWkpLGNzPWhvKChmdW5jdGlvbih0LGUpe3JldHVybiB0Pj1lfSkpLHVzPVppKChmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KSgpKT9aaTpmdW5jdGlvbih0KXtyZXR1cm4gTXModCkmJk50LmNhbGwodCwiY2FsbGVlIikmJiFlZS5jYWxsKHQsImNhbGxlZSIpfSxocz12dC5pc0FycmF5LGRzPWNlP1VlKGNlKTpmdW5jdGlvbiBwcyh0KXtyZXR1cm4gTXModCkmJldpKHQpPT1rfTtmdW5jdGlvbiBmcyh0KXtyZXR1cm4gbnVsbCE9dCYmd3ModC5sZW5ndGgpJiYhYnModCl9ZnVuY3Rpb24gbXModCl7cmV0dXJuIE1zKHQpJiZmcyh0KX12YXIgZ3M9ZG58fGpsLF9zPXVlP1VlKHVlKTpmdW5jdGlvbiB5cyh0KXtyZXR1cm4gTXModCkmJldpKHQpPT1nfTtmdW5jdGlvbiB2cyh0KXtpZighTXModCkpcmV0dXJuITE7dmFyIGU9V2kodCk7cmV0dXJuIGU9PV98fCJbb2JqZWN0IERPTUV4Y2VwdGlvbl0iPT1lfHwic3RyaW5nIj09dHlwZW9mIHQubWVzc2FnZSYmInN0cmluZyI9PXR5cGVvZiB0Lm5hbWUmJiFBcyh0KX1mdW5jdGlvbiBicyh0KXtpZighU3ModCkpcmV0dXJuITE7dmFyIGU9V2kodCk7cmV0dXJuIGU9PXl8fGU9PXZ8fCJbb2JqZWN0IEFzeW5jRnVuY3Rpb25dIj09ZXx8IltvYmplY3QgUHJveHldIj09ZX1mdW5jdGlvbiB4cyh0KXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQmJnQ9PVZzKHQpfWZ1bmN0aW9uIHdzKHQpe3JldHVybiJudW1iZXIiPT10eXBlb2YgdCYmdD4tMSYmdCUxPT0wJiZ0PD1jfWZ1bmN0aW9uIFNzKHQpe3ZhciBlPXR5cGVvZiB0O3JldHVybiBudWxsIT10JiYoIm9iamVjdCI9PWV8fCJmdW5jdGlvbiI9PWUpfWZ1bmN0aW9uIE1zKHQpe3JldHVybiBudWxsIT10JiYib2JqZWN0Ij09dHlwZW9mIHR9dmFyIEVzPWhlP1VlKGhlKTpmdW5jdGlvbiBUcyh0KXtyZXR1cm4gTXModCkmJk9vKHQpPT1ifTtmdW5jdGlvbiBDcyh0KXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHR8fE1zKHQpJiZXaSh0KT09eH1mdW5jdGlvbiBBcyh0KXtpZighTXModCl8fFdpKHQpIT13KXJldHVybiExO3ZhciBlPXF0KHQpO2lmKG51bGw9PT1lKXJldHVybiEwO3ZhciBuPU50LmNhbGwoZSwiY29uc3RydWN0b3IiKSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgbiYmbiBpbnN0YW5jZW9mIG4mJlB0LmNhbGwobik9PXp0fXZhciBrcz1kZT9VZShkZSk6ZnVuY3Rpb24gTHModCl7cmV0dXJuIE1zKHQpJiZXaSh0KT09TX0sUHM9cGU/VWUocGUpOmZ1bmN0aW9uIE5zKHQpe3JldHVybiBNcyh0KSYmT28odCk9PUV9O2Z1bmN0aW9uIElzKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdHx8IWhzKHQpJiZNcyh0KSYmV2kodCk9PVR9ZnVuY3Rpb24gT3ModCl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0fHxNcyh0KSYmV2kodCk9PUN9dmFyIFJzPWZlP1VlKGZlKTpmdW5jdGlvbiB6cyh0KXtyZXR1cm4gTXModCkmJndzKHQubGVuZ3RoKSYmISFLdFtXaSh0KV19LERzPWhvKGlyKSxCcz1obygoZnVuY3Rpb24odCxlKXtyZXR1cm4gdDw9ZX0pKTtmdW5jdGlvbiBIcyh0KXtpZighdClyZXR1cm5bXTtpZihmcyh0KSlyZXR1cm4gSXModCk/b24odCk6WHIodCk7aWYob2UmJnRbb2VdKXJldHVybihmdW5jdGlvbiBlKHQpe2Zvcih2YXIgZSxuPVtdOyEoZT10Lm5leHQoKSkuZG9uZTspbi5wdXNoKGUudmFsdWUpO3JldHVybiBufSkodFtvZV0oKSk7dmFyIG49T28odCk7cmV0dXJuKG49PWI/SmU6bj09RT9lbjpwbCkodCl9ZnVuY3Rpb24gRnModCl7cmV0dXJuIHQ/KHQ9anModCkpPT09bHx8dD09PS0xLzA/MTc5NzY5MzEzNDg2MjMxNTdlMjkyKih0PDA/LTE6MSk6dD09dD90OjA6MD09PXQ/dDowfWZ1bmN0aW9uIFZzKHQpe3ZhciBlPUZzKHQpLG49ZSUxO3JldHVybiBlPT1lP24/ZS1uOmU6MH1mdW5jdGlvbiBVcyh0KXtyZXR1cm4gdD9vaShWcyh0KSwwLGgpOjB9ZnVuY3Rpb24ganModCl7aWYoIm51bWJlciI9PXR5cGVvZiB0KXJldHVybiB0O2lmKE9zKHQpKXJldHVybiB1O2lmKFNzKHQpKXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2YgdC52YWx1ZU9mP3QudmFsdWVPZigpOnQ7dD1TcyhlKT9lKyIiOmV9aWYoInN0cmluZyIhPXR5cGVvZiB0KXJldHVybiAwPT09dD90Oit0O3Q9VmUodCk7dmFyIG49ZHQudGVzdCh0KTtyZXR1cm4gbnx8ZnQudGVzdCh0KT90ZSh0LnNsaWNlKDIpLG4/Mjo4KTpodC50ZXN0KHQpP3U6K3R9ZnVuY3Rpb24gR3ModCl7cmV0dXJuICRyKHQsb2wodCkpfWZ1bmN0aW9uIFdzKHQpe3JldHVybiBudWxsPT10PyIiOkFyKHQpfXZhciBxcz1acigoZnVuY3Rpb24odCxlKXtpZihqbyhlKXx8ZnMoZSkpJHIoZSxybChlKSx0KTtlbHNlIGZvcih2YXIgbiBpbiBlKU50LmNhbGwoZSxuKSYmUW4odCxuLGVbbl0pfSkpLFlzPVpyKChmdW5jdGlvbih0LGUpeyRyKGUsb2woZSksdCl9KSksWHM9WnIoKGZ1bmN0aW9uKHQsZSxuLGkpeyRyKGUsb2woZSksdCxpKX0pKSwkcz1acigoZnVuY3Rpb24odCxlLG4saSl7JHIoZSxybChlKSx0LGkpfSkpLEtzPXdvKHJpKSxacz1tcigoZnVuY3Rpb24odCxlKXt0PU10KHQpO3ZhciBpPS0xLHI9ZS5sZW5ndGgsbz1yPjI/ZVsyXTpuO2ZvcihvJiZIbyhlWzBdLGVbMV0sbykmJihyPTEpOysraTxyOylmb3IodmFyIGE9ZVtpXSxzPW9sKGEpLGw9LTEsYz1zLmxlbmd0aDsrK2w8Yzspe3ZhciB1PXNbbF0saD10W3VdOyhoPT09bnx8c3MoaCxrdFt1XSkmJiFOdC5jYWxsKHQsdSkpJiYodFt1XT1hW3VdKX1yZXR1cm4gdH0pKSxKcz1tcigoZnVuY3Rpb24odCl7cmV0dXJuIHQucHVzaChuLHZvKSxtZShzbCxuLHQpfSkpO2Z1bmN0aW9uIFFzKHQsZSxpKXt2YXIgcj1udWxsPT10P246amkodCxlKTtyZXR1cm4gcj09PW4/aTpyfWZ1bmN0aW9uIHRsKHQsZSl7cmV0dXJuIG51bGwhPXQmJlJvKHQsZSxYaSl9dmFyIGVsPWFvKChmdW5jdGlvbih0LGUsbil7bnVsbCE9ZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGUudG9TdHJpbmcmJihlPVJ0LmNhbGwoZSkpLHRbZV09bn0pLENsKExsKSksbmw9YW8oKGZ1bmN0aW9uKHQsZSxuKXtudWxsIT1lJiYiZnVuY3Rpb24iIT10eXBlb2YgZS50b1N0cmluZyYmKGU9UnQuY2FsbChlKSksTnQuY2FsbCh0LGUpP3RbZV0ucHVzaChuKTp0W2VdPVtuXX0pLEFvKSxpbD1tcihLaSk7ZnVuY3Rpb24gcmwodCl7cmV0dXJuIGZzKHQpP1huKHQpOm5yKHQpfWZ1bmN0aW9uIG9sKHQpe3JldHVybiBmcyh0KT9Ybih0LCEwKTooZnVuY3Rpb24gZSh0KXtpZighU3ModCkpcmV0dXJuKGZ1bmN0aW9uIGUodCl7dmFyIGU9W107aWYobnVsbCE9dClmb3IodmFyIG4gaW4gTXQodCkpZS5wdXNoKG4pO3JldHVybiBlfSkodCk7dmFyIG49am8odCksaT1bXTtmb3IodmFyIHIgaW4gdCkoImNvbnN0cnVjdG9yIiE9cnx8IW4mJk50LmNhbGwodCxyKSkmJmkucHVzaChyKTtyZXR1cm4gaX0pKHQpfXZhciBhbD1acigoZnVuY3Rpb24odCxlLG4pe3NyKHQsZSxuKX0pKSxzbD1acigoZnVuY3Rpb24odCxlLG4saSl7c3IodCxlLG4saSl9KSksbGw9d28oKGZ1bmN0aW9uKHQsZSl7dmFyIG49e307aWYobnVsbD09dClyZXR1cm4gbjt2YXIgaT0hMTtlPU1lKGUsKGZ1bmN0aW9uKGUpe3JldHVybiBlPUJyKGUsdCksaXx8KGk9ZS5sZW5ndGg+MSksZX0pKSwkcih0LE1vKHQpLG4pLGkmJihuPWFpKG4sNyxibykpO2Zvcih2YXIgcj1lLmxlbmd0aDtyLS07KUxyKG4sZVtyXSk7cmV0dXJuIG59KSksY2w9d28oKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG51bGw9PXQ/e306KGZ1bmN0aW9uIG4odCxlKXtyZXR1cm4gdXIodCxlLChmdW5jdGlvbihlLG4pe3JldHVybiB0bCh0LG4pfSkpfSkodCxlKX0pKTtmdW5jdGlvbiB1bCh0LGUpe2lmKG51bGw9PXQpcmV0dXJue307dmFyIG49TWUoTW8odCksKGZ1bmN0aW9uKHQpe3JldHVyblt0XX0pKTtyZXR1cm4gZT1BbyhlKSx1cih0LG4sKGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUodCxuWzBdKX0pKX12YXIgaGw9Z28ocmwpLGRsPWdvKG9sKTtmdW5jdGlvbiBwbCh0KXtyZXR1cm4gbnVsbD09dD9bXTpqZSh0LHJsKHQpKX12YXIgZmw9ZW8oKGZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gZT1lLnRvTG93ZXJDYXNlKCksdCsobj9tbChlKTplKX0pKTtmdW5jdGlvbiBtbCh0KXtyZXR1cm4gU2woV3ModCkudG9Mb3dlckNhc2UoKSl9ZnVuY3Rpb24gZ2wodCl7cmV0dXJuKHQ9V3ModCkpJiZ0LnJlcGxhY2UoZ3QsWGUpLnJlcGxhY2UoanQsIiIpfXZhciBfbD1lbygoZnVuY3Rpb24odCxlLG4pe3JldHVybiB0KyhuPyItIjoiIikrZS50b0xvd2VyQ2FzZSgpfSkpLHlsPWVvKChmdW5jdGlvbih0LGUsbil7cmV0dXJuIHQrKG4/IiAiOiIiKStlLnRvTG93ZXJDYXNlKCl9KSksdmw9dG8oInRvTG93ZXJDYXNlIiksYmw9ZW8oKGZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdCsobj8iXyI6IiIpK2UudG9Mb3dlckNhc2UoKX0pKSx4bD1lbygoZnVuY3Rpb24odCxlLG4pe3JldHVybiB0KyhuPyIgIjoiIikrU2woZSl9KSksd2w9ZW8oKGZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdCsobj8iICI6IiIpK2UudG9VcHBlckNhc2UoKX0pKSxTbD10bygidG9VcHBlckNhc2UiKTtmdW5jdGlvbiBNbCh0LGUsaSl7cmV0dXJuIHQ9V3ModCksKGU9aT9uOmUpPT09bj8oZnVuY3Rpb24gcih0KXtyZXR1cm4gWXQudGVzdCh0KX0pKHQpPyhmdW5jdGlvbiBvKHQpe3JldHVybiB0Lm1hdGNoKFd0KXx8W119KSh0KTooZnVuY3Rpb24gYSh0KXtyZXR1cm4gdC5tYXRjaChhdCl8fFtdfSkodCk6dC5tYXRjaChlKXx8W119dmFyIEVsPW1yKChmdW5jdGlvbih0LGUpe3RyeXtyZXR1cm4gbWUodCxuLGUpfWNhdGNoKHQpe3JldHVybiB2cyh0KT90Om5ldyB4dCh0KX19KSksVGw9d28oKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIF9lKGUsKGZ1bmN0aW9uKGUpe2U9cmEoZSksaWkodCxlLEthKHRbZV0sdCkpfSkpLHR9KSk7ZnVuY3Rpb24gQ2wodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fXZhciBBbD1ybygpLGtsPXJvKCEwKTtmdW5jdGlvbiBMbCh0KXtyZXR1cm4gdH1mdW5jdGlvbiBQbCh0KXtyZXR1cm4gZXIoImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDphaSh0LDEpKX12YXIgTmw9bXIoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBLaShuLHQsZSl9fSkpLElsPW1yKChmdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gS2kodCxuLGUpfX0pKTtmdW5jdGlvbiBPbCh0LGUsbil7dmFyIGk9cmwoZSkscj1VaShlLGkpO251bGwhPW58fFNzKGUpJiYoci5sZW5ndGh8fCFpLmxlbmd0aCl8fChuPWUsZT10LHQ9dGhpcyxyPVVpKGUscmwoZSkpKTt2YXIgbz0hKFNzKG4pJiYiY2hhaW4iaW4gbiYmIW4uY2hhaW4pLGE9YnModCk7cmV0dXJuIF9lKHIsKGZ1bmN0aW9uKG4pe3ZhciBpPWVbbl07dFtuXT1pLGEmJih0LnByb3RvdHlwZVtuXT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX19jaGFpbl9fO2lmKG98fGUpe3ZhciBuPXQodGhpcy5fX3dyYXBwZWRfXykscj1uLl9fYWN0aW9uc19fPVhyKHRoaXMuX19hY3Rpb25zX18pO3JldHVybiByLnB1c2goe2Z1bmM6aSxhcmdzOmFyZ3VtZW50cyx0aGlzQXJnOnR9KSxuLl9fY2hhaW5fXz1lLG59cmV0dXJuIGkuYXBwbHkodCxFZShbdGhpcy52YWx1ZSgpXSxhcmd1bWVudHMpKX0pfSkpLHR9ZnVuY3Rpb24gUmwoKXt9dmFyIHpsPWxvKE1lKSxEbD1sbyhiZSksQmw9bG8oQWUpO2Z1bmN0aW9uIEhsKHQpe3JldHVybiBGbyh0KT96ZShyYSh0KSk6KGZ1bmN0aW9uIGUodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBqaShlLHQpfX0pKHQpfXZhciBGbD11bygpLFZsPXVvKCEwKTtmdW5jdGlvbiBVbCgpe3JldHVybltdfWZ1bmN0aW9uIGpsKCl7cmV0dXJuITF9dmFyIEdsLFdsPXNvKChmdW5jdGlvbih0LGUpe3JldHVybiB0K2V9KSwwKSxxbD1mbygiY2VpbCIpLFlsPXNvKChmdW5jdGlvbih0LGUpe3JldHVybiB0L2V9KSwxKSxYbD1mbygiZmxvb3IiKSwkbD1zbygoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCplfSksMSksS2w9Zm8oInJvdW5kIiksWmw9c28oKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pLDApO3JldHVybiBCbi5hZnRlcj1mdW5jdGlvbiBKbCh0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBDdChpKTtyZXR1cm4gdD1Wcyh0KSxmdW5jdGlvbigpe2lmKC0tdDwxKXJldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LEJuLmFyeT1YYSxCbi5hc3NpZ249cXMsQm4uYXNzaWduSW49WXMsQm4uYXNzaWduSW5XaXRoPVhzLEJuLmFzc2lnbldpdGg9JHMsQm4uYXQ9S3MsQm4uYmVmb3JlPSRhLEJuLmJpbmQ9S2EsQm4uYmluZEFsbD1UbCxCbi5iaW5kS2V5PVphLEJuLmNhc3RBcnJheT1mdW5jdGlvbiBRbCgpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybltdO3ZhciB0PWFyZ3VtZW50c1swXTtyZXR1cm4gaHModCk/dDpbdF19LEJuLmNoYWluPUlhLEJuLmNodW5rPWZ1bmN0aW9uIHRjKHQsZSxpKXtlPShpP0hvKHQsZSxpKTplPT09bik/MTpnbihWcyhlKSwwKTt2YXIgcj1udWxsPT10PzA6dC5sZW5ndGg7aWYoIXJ8fGU8MSlyZXR1cm5bXTtmb3IodmFyIG89MCxhPTAscz12dChjbihyL2UpKTtvPHI7KXNbYSsrXT13cih0LG8sbys9ZSk7cmV0dXJuIHN9LEJuLmNvbXBhY3Q9ZnVuY3Rpb24gZWModCl7Zm9yKHZhciBlPS0xLG49bnVsbD09dD8wOnQubGVuZ3RoLGk9MCxyPVtdOysrZTxuOyl7dmFyIG89dFtlXTtvJiYocltpKytdPW8pfXJldHVybiByfSxCbi5jb25jYXQ9ZnVuY3Rpb24gbmMoKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoO2lmKCF0KXJldHVybltdO2Zvcih2YXIgZT12dCh0LTEpLG49YXJndW1lbnRzWzBdLGk9dDtpLS07KWVbaS0xXT1hcmd1bWVudHNbaV07cmV0dXJuIEVlKGhzKG4pP1hyKG4pOltuXSxEaShlLDEpKX0sQm4uY29uZD1mdW5jdGlvbiBpYyh0KXt2YXIgZT1udWxsPT10PzA6dC5sZW5ndGgsbj1BbygpO3JldHVybiB0PWU/TWUodCwoZnVuY3Rpb24odCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHRbMV0pdGhyb3cgbmV3IEN0KGkpO3JldHVybltuKHRbMF0pLHRbMV1dfSkpOltdLG1yKChmdW5jdGlvbihuKXtmb3IodmFyIGk9LTE7KytpPGU7KXt2YXIgcj10W2ldO2lmKG1lKHJbMF0sdGhpcyxuKSlyZXR1cm4gbWUoclsxXSx0aGlzLG4pfX0pKX0sQm4uY29uZm9ybXM9ZnVuY3Rpb24gcmModCl7cmV0dXJuKGZ1bmN0aW9uIGUodCl7dmFyIGU9cmwodCk7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBzaShuLHQsZSl9fSkoYWkodCwxKSl9LEJuLmNvbnN0YW50PUNsLEJuLmNvdW50Qnk9emEsQm4uY3JlYXRlPWZ1bmN0aW9uIG9jKHQsZSl7dmFyIG49SG4odCk7cmV0dXJuIG51bGw9PWU/bjpuaShuLGUpfSxCbi5jdXJyeT1mdW5jdGlvbiB0KGUsaSxyKXt2YXIgbz1fbyhlLDgsbixuLG4sbixuLGk9cj9uOmkpO3JldHVybiBvLnBsYWNlaG9sZGVyPXQucGxhY2Vob2xkZXIsb30sQm4uY3VycnlSaWdodD1mdW5jdGlvbiB0KGUsaSxyKXt2YXIgbz1fbyhlLDE2LG4sbixuLG4sbixpPXI/bjppKTtyZXR1cm4gby5wbGFjZWhvbGRlcj10LnBsYWNlaG9sZGVyLG99LEJuLmRlYm91bmNlPUphLEJuLmRlZmF1bHRzPVpzLEJuLmRlZmF1bHRzRGVlcD1KcyxCbi5kZWZlcj1RYSxCbi5kZWxheT10cyxCbi5kaWZmZXJlbmNlPXNhLEJuLmRpZmZlcmVuY2VCeT1sYSxCbi5kaWZmZXJlbmNlV2l0aD1jYSxCbi5kcm9wPWZ1bmN0aW9uIGFjKHQsZSxpKXt2YXIgcj1udWxsPT10PzA6dC5sZW5ndGg7cmV0dXJuIHI/d3IodCwoZT1pfHxlPT09bj8xOlZzKGUpKTwwPzA6ZSxyKTpbXX0sQm4uZHJvcFJpZ2h0PWZ1bmN0aW9uIHNjKHQsZSxpKXt2YXIgcj1udWxsPT10PzA6dC5sZW5ndGg7cmV0dXJuIHI/d3IodCwwLChlPXItKGU9aXx8ZT09PW4/MTpWcyhlKSkpPDA/MDplKTpbXX0sQm4uZHJvcFJpZ2h0V2hpbGU9ZnVuY3Rpb24gbGModCxlKXtyZXR1cm4gdCYmdC5sZW5ndGg/TnIodCxBbyhlLDMpLCEwLCEwKTpbXX0sQm4uZHJvcFdoaWxlPWZ1bmN0aW9uIGNjKHQsZSl7cmV0dXJuIHQmJnQubGVuZ3RoP05yKHQsQW8oZSwzKSwhMCk6W119LEJuLmZpbGw9ZnVuY3Rpb24gdWModCxlLGkscil7dmFyIG89bnVsbD09dD8wOnQubGVuZ3RoO3JldHVybiBvPyhpJiYibnVtYmVyIiE9dHlwZW9mIGkmJkhvKHQsZSxpKSYmKGk9MCxyPW8pLChmdW5jdGlvbiBhKHQsZSxpLHIpe3ZhciBvPXQubGVuZ3RoO2ZvcigoaT1WcyhpKSk8MCYmKGk9LWk+bz8wOm8raSksKHI9cj09PW58fHI+bz9vOlZzKHIpKTwwJiYocis9bykscj1pPnI/MDpVcyhyKTtpPHI7KXRbaSsrXT1lO3JldHVybiB0fSkodCxlLGkscikpOltdfSxCbi5maWx0ZXI9ZnVuY3Rpb24gaGModCxlKXtyZXR1cm4oaHModCk/eGU6emkpKHQsQW8oZSwzKSl9LEJuLmZsYXRNYXA9ZnVuY3Rpb24gZGModCxlKXtyZXR1cm4gRGkoR2EodCxlKSwxKX0sQm4uZmxhdE1hcERlZXA9ZnVuY3Rpb24gcGModCxlKXtyZXR1cm4gRGkoR2EodCxlKSxsKX0sQm4uZmxhdE1hcERlcHRoPWZ1bmN0aW9uIGZjKHQsZSxpKXtyZXR1cm4gaT1pPT09bj8xOlZzKGkpLERpKEdhKHQsZSksaSl9LEJuLmZsYXR0ZW49ZGEsQm4uZmxhdHRlbkRlZXA9ZnVuY3Rpb24gbWModCl7cmV0dXJuIG51bGwhPXQmJnQubGVuZ3RoP0RpKHQsbCk6W119LEJuLmZsYXR0ZW5EZXB0aD1mdW5jdGlvbiBnYyh0LGUpe3JldHVybiBudWxsIT10JiZ0Lmxlbmd0aD9EaSh0LGU9ZT09PW4/MTpWcyhlKSk6W119LEJuLmZsaXA9ZnVuY3Rpb24gX2ModCl7cmV0dXJuIF9vKHQsNTEyKX0sQm4uZmxvdz1BbCxCbi5mbG93UmlnaHQ9a2wsQm4uZnJvbVBhaXJzPWZ1bmN0aW9uIHljKHQpe2Zvcih2YXIgZT0tMSxuPW51bGw9PXQ/MDp0Lmxlbmd0aCxpPXt9OysrZTxuOyl7dmFyIHI9dFtlXTtpW3JbMF1dPXJbMV19cmV0dXJuIGl9LEJuLmZ1bmN0aW9ucz1mdW5jdGlvbiB2Yyh0KXtyZXR1cm4gbnVsbD09dD9bXTpVaSh0LHJsKHQpKX0sQm4uZnVuY3Rpb25zSW49ZnVuY3Rpb24gYmModCl7cmV0dXJuIG51bGw9PXQ/W106VWkodCxvbCh0KSl9LEJuLmdyb3VwQnk9VmEsQm4uaW5pdGlhbD1mdW5jdGlvbiB4Yyh0KXtyZXR1cm4gbnVsbCE9dCYmdC5sZW5ndGg/d3IodCwwLC0xKTpbXX0sQm4uaW50ZXJzZWN0aW9uPWZhLEJuLmludGVyc2VjdGlvbkJ5PW1hLEJuLmludGVyc2VjdGlvbldpdGg9Z2EsQm4uaW52ZXJ0PWVsLEJuLmludmVydEJ5PW5sLEJuLmludm9rZU1hcD1VYSxCbi5pdGVyYXRlZT1QbCxCbi5rZXlCeT1qYSxCbi5rZXlzPXJsLEJuLmtleXNJbj1vbCxCbi5tYXA9R2EsQm4ubWFwS2V5cz1mdW5jdGlvbiB3Yyh0LGUpe3ZhciBuPXt9O3JldHVybiBlPUFvKGUsMyksRmkodCwoZnVuY3Rpb24odCxpLHIpe2lpKG4sZSh0LGksciksdCl9KSksbn0sQm4ubWFwVmFsdWVzPWZ1bmN0aW9uIFNjKHQsZSl7dmFyIG49e307cmV0dXJuIGU9QW8oZSwzKSxGaSh0LChmdW5jdGlvbih0LGkscil7aWkobixpLGUodCxpLHIpKX0pKSxufSxCbi5tYXRjaGVzPWZ1bmN0aW9uIE1jKHQpe3JldHVybiBvcihhaSh0LDEpKX0sQm4ubWF0Y2hlc1Byb3BlcnR5PWZ1bmN0aW9uIEVjKHQsZSl7cmV0dXJuIGFyKHQsYWkoZSwxKSl9LEJuLm1lbW9pemU9ZXMsQm4ubWVyZ2U9YWwsQm4ubWVyZ2VXaXRoPXNsLEJuLm1ldGhvZD1ObCxCbi5tZXRob2RPZj1JbCxCbi5taXhpbj1PbCxCbi5uZWdhdGU9bnMsQm4ubnRoQXJnPWZ1bmN0aW9uIFRjKHQpe3JldHVybiB0PVZzKHQpLG1yKChmdW5jdGlvbihlKXtyZXR1cm4gbHIoZSx0KX0pKX0sQm4ub21pdD1sbCxCbi5vbWl0Qnk9ZnVuY3Rpb24gQ2ModCxlKXtyZXR1cm4gdWwodCxucyhBbyhlKSkpfSxCbi5vbmNlPWZ1bmN0aW9uIEFjKHQpe3JldHVybiAkYSgyLHQpfSxCbi5vcmRlckJ5PWZ1bmN0aW9uIGtjKHQsZSxpLHIpe3JldHVybiBudWxsPT10P1tdOihocyhlKXx8KGU9bnVsbD09ZT9bXTpbZV0pLGhzKGk9cj9uOmkpfHwoaT1udWxsPT1pP1tdOltpXSksY3IodCxlLGkpKX0sQm4ub3Zlcj16bCxCbi5vdmVyQXJncz1pcyxCbi5vdmVyRXZlcnk9RGwsQm4ub3ZlclNvbWU9QmwsQm4ucGFydGlhbD1ycyxCbi5wYXJ0aWFsUmlnaHQ9b3MsQm4ucGFydGl0aW9uPVdhLEJuLnBpY2s9Y2wsQm4ucGlja0J5PXVsLEJuLnByb3BlcnR5PUhsLEJuLnByb3BlcnR5T2Y9ZnVuY3Rpb24gTGModCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT10P246amkodCxlKX19LEJuLnB1bGw9eWEsQm4ucHVsbEFsbD12YSxCbi5wdWxsQWxsQnk9ZnVuY3Rpb24gUGModCxlLG4pe3JldHVybiB0JiZ0Lmxlbmd0aCYmZSYmZS5sZW5ndGg/aHIodCxlLEFvKG4sMikpOnR9LEJuLnB1bGxBbGxXaXRoPWZ1bmN0aW9uIE5jKHQsZSxpKXtyZXR1cm4gdCYmdC5sZW5ndGgmJmUmJmUubGVuZ3RoP2hyKHQsZSxuLGkpOnR9LEJuLnB1bGxBdD1iYSxCbi5yYW5nZT1GbCxCbi5yYW5nZVJpZ2h0PVZsLEJuLnJlYXJnPWFzLEJuLnJlamVjdD1mdW5jdGlvbiBJYyh0LGUpe3JldHVybihocyh0KT94ZTp6aSkodCxucyhBbyhlLDMpKSl9LEJuLnJlbW92ZT1mdW5jdGlvbiBPYyh0LGUpe3ZhciBuPVtdO2lmKCF0fHwhdC5sZW5ndGgpcmV0dXJuIG47dmFyIGk9LTEscj1bXSxvPXQubGVuZ3RoO2ZvcihlPUFvKGUsMyk7KytpPG87KXt2YXIgYT10W2ldO2UoYSxpLHQpJiYobi5wdXNoKGEpLHIucHVzaChpKSl9cmV0dXJuIGRyKHQsciksbn0sQm4ucmVzdD1mdW5jdGlvbiBSYyh0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBDdChpKTtyZXR1cm4gbXIodCxlPWU9PT1uP2U6VnMoZSkpfSxCbi5yZXZlcnNlPXhhLEJuLnNhbXBsZVNpemU9ZnVuY3Rpb24gemModCxlLGkpe3JldHVybiBlPShpP0hvKHQsZSxpKTplPT09bik/MTpWcyhlKSwoaHModCk/S246X3IpKHQsZSl9LEJuLnNldD1mdW5jdGlvbiBEYyh0LGUsbil7cmV0dXJuIG51bGw9PXQ/dDp5cih0LGUsbil9LEJuLnNldFdpdGg9ZnVuY3Rpb24gQmModCxlLGkscil7cmV0dXJuIHI9ImZ1bmN0aW9uIj09dHlwZW9mIHI/cjpuLG51bGw9PXQ/dDp5cih0LGUsaSxyKX0sQm4uc2h1ZmZsZT1mdW5jdGlvbiBIYyh0KXtyZXR1cm4oaHModCk/Wm46eHIpKHQpfSxCbi5zbGljZT1mdW5jdGlvbiBGYyh0LGUsaSl7dmFyIHI9bnVsbD09dD8wOnQubGVuZ3RoO3JldHVybiByPyhpJiYibnVtYmVyIiE9dHlwZW9mIGkmJkhvKHQsZSxpKT8oZT0wLGk9cik6KGU9bnVsbD09ZT8wOlZzKGUpLGk9aT09PW4/cjpWcyhpKSksd3IodCxlLGkpKTpbXX0sQm4uc29ydEJ5PXFhLEJuLnNvcnRlZFVuaXE9ZnVuY3Rpb24gVmModCl7cmV0dXJuIHQmJnQubGVuZ3RoP1RyKHQpOltdfSxCbi5zb3J0ZWRVbmlxQnk9ZnVuY3Rpb24gVWModCxlKXtyZXR1cm4gdCYmdC5sZW5ndGg/VHIodCxBbyhlLDIpKTpbXX0sQm4uc3BsaXQ9ZnVuY3Rpb24gamModCxlLGkpe3JldHVybiBpJiYibnVtYmVyIiE9dHlwZW9mIGkmJkhvKHQsZSxpKSYmKGU9aT1uKSwoaT1pPT09bj9oOmk+Pj4wKT8odD1Xcyh0KSkmJigic3RyaW5nIj09dHlwZW9mIGV8fG51bGwhPWUmJiFrcyhlKSkmJiEoZT1BcihlKSkmJlplKHQpP0ZyKG9uKHQpLDAsaSk6dC5zcGxpdChlLGkpOltdfSxCbi5zcHJlYWQ9ZnVuY3Rpb24gR2ModCxlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgQ3QoaSk7cmV0dXJuIGU9bnVsbD09ZT8wOmduKFZzKGUpLDApLG1yKChmdW5jdGlvbihuKXt2YXIgaT1uW2VdLHI9RnIobiwwLGUpO3JldHVybiBpJiZFZShyLGkpLG1lKHQsdGhpcyxyKX0pKX0sQm4udGFpbD1mdW5jdGlvbiBXYyh0KXt2YXIgZT1udWxsPT10PzA6dC5sZW5ndGg7cmV0dXJuIGU/d3IodCwxLGUpOltdfSxCbi50YWtlPWZ1bmN0aW9uIHFjKHQsZSxpKXtyZXR1cm4gdCYmdC5sZW5ndGg/d3IodCwwLChlPWl8fGU9PT1uPzE6VnMoZSkpPDA/MDplKTpbXX0sQm4udGFrZVJpZ2h0PWZ1bmN0aW9uIFljKHQsZSxpKXt2YXIgcj1udWxsPT10PzA6dC5sZW5ndGg7cmV0dXJuIHI/d3IodCwoZT1yLShlPWl8fGU9PT1uPzE6VnMoZSkpKTwwPzA6ZSxyKTpbXX0sQm4udGFrZVJpZ2h0V2hpbGU9ZnVuY3Rpb24gWGModCxlKXtyZXR1cm4gdCYmdC5sZW5ndGg/TnIodCxBbyhlLDMpLCExLCEwKTpbXX0sQm4udGFrZVdoaWxlPWZ1bmN0aW9uICRjKHQsZSl7cmV0dXJuIHQmJnQubGVuZ3RoP05yKHQsQW8oZSwzKSk6W119LEJuLnRhcD1mdW5jdGlvbiBLYyh0LGUpe3JldHVybiBlKHQpLHR9LEJuLnRocm90dGxlPWZ1bmN0aW9uIFpjKHQsZSxuKXt2YXIgcj0hMCxvPSEwO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBDdChpKTtyZXR1cm4gU3MobikmJihyPSJsZWFkaW5nImluIG4/ISFuLmxlYWRpbmc6cixvPSJ0cmFpbGluZyJpbiBuPyEhbi50cmFpbGluZzpvKSxKYSh0LGUse2xlYWRpbmc6cixtYXhXYWl0OmUsdHJhaWxpbmc6b30pfSxCbi50aHJ1PU9hLEJuLnRvQXJyYXk9SHMsQm4udG9QYWlycz1obCxCbi50b1BhaXJzSW49ZGwsQm4udG9QYXRoPWZ1bmN0aW9uIEpjKHQpe3JldHVybiBocyh0KT9NZSh0LHJhKTpPcyh0KT9bdF06WHIobmEoV3ModCkpKX0sQm4udG9QbGFpbk9iamVjdD1HcyxCbi50cmFuc2Zvcm09ZnVuY3Rpb24gUWModCxlLG4pe3ZhciBpPWhzKHQpLHI9aXx8Z3ModCl8fFJzKHQpO2lmKGU9QW8oZSw0KSxudWxsPT1uKXt2YXIgbz10JiZ0LmNvbnN0cnVjdG9yO249cj9pP25ldyBvOltdOlNzKHQpJiZicyhvKT9IbihxdCh0KSk6e319cmV0dXJuKHI/X2U6RmkpKHQsKGZ1bmN0aW9uKHQsaSxyKXtyZXR1cm4gZShuLHQsaSxyKX0pKSxufSxCbi51bmFyeT1mdW5jdGlvbiB0dSh0KXtyZXR1cm4gWGEodCwxKX0sQm4udW5pb249d2EsQm4udW5pb25CeT1TYSxCbi51bmlvbldpdGg9TWEsQm4udW5pcT1mdW5jdGlvbiBldSh0KXtyZXR1cm4gdCYmdC5sZW5ndGg/a3IodCk6W119LEJuLnVuaXFCeT1mdW5jdGlvbiBudSh0LGUpe3JldHVybiB0JiZ0Lmxlbmd0aD9rcih0LEFvKGUsMikpOltdfSxCbi51bmlxV2l0aD1mdW5jdGlvbiBpdSh0LGUpe3JldHVybiBlPSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6bix0JiZ0Lmxlbmd0aD9rcih0LG4sZSk6W119LEJuLnVuc2V0PWZ1bmN0aW9uIHJ1KHQsZSl7cmV0dXJuIG51bGw9PXR8fExyKHQsZSl9LEJuLnVuemlwPUVhLEJuLnVuemlwV2l0aD1UYSxCbi51cGRhdGU9ZnVuY3Rpb24gb3UodCxlLG4pe3JldHVybiBudWxsPT10P3Q6UHIodCxlLERyKG4pKX0sQm4udXBkYXRlV2l0aD1mdW5jdGlvbiBhdSh0LGUsaSxyKXtyZXR1cm4gcj0iZnVuY3Rpb24iPT10eXBlb2Ygcj9yOm4sbnVsbD09dD90OlByKHQsZSxEcihpKSxyKX0sQm4udmFsdWVzPXBsLEJuLnZhbHVlc0luPWZ1bmN0aW9uIHN1KHQpe3JldHVybiBudWxsPT10P1tdOmplKHQsb2wodCkpfSxCbi53aXRob3V0PUNhLEJuLndvcmRzPU1sLEJuLndyYXA9ZnVuY3Rpb24gbHUodCxlKXtyZXR1cm4gcnMoRHIoZSksdCl9LEJuLnhvcj1BYSxCbi54b3JCeT1rYSxCbi54b3JXaXRoPUxhLEJuLnppcD1QYSxCbi56aXBPYmplY3Q9ZnVuY3Rpb24gY3UodCxlKXtyZXR1cm4gUnIodHx8W10sZXx8W10sUW4pfSxCbi56aXBPYmplY3REZWVwPWZ1bmN0aW9uIHV1KHQsZSl7cmV0dXJuIFJyKHR8fFtdLGV8fFtdLHlyKX0sQm4uemlwV2l0aD1OYSxCbi5lbnRyaWVzPWhsLEJuLmVudHJpZXNJbj1kbCxCbi5leHRlbmQ9WXMsQm4uZXh0ZW5kV2l0aD1YcyxPbChCbixCbiksQm4uYWRkPVdsLEJuLmF0dGVtcHQ9RWwsQm4uY2FtZWxDYXNlPWZsLEJuLmNhcGl0YWxpemU9bWwsQm4uY2VpbD1xbCxCbi5jbGFtcD1mdW5jdGlvbiBodSh0LGUsaSl7cmV0dXJuIGk9PT1uJiYoaT1lLGU9biksaSE9PW4mJihpPShpPWpzKGkpKT09aT9pOjApLGUhPT1uJiYoZT0oZT1qcyhlKSk9PWU/ZTowKSxvaShqcyh0KSxlLGkpfSxCbi5jbG9uZT1mdW5jdGlvbiBkdSh0KXtyZXR1cm4gYWkodCw0KX0sQm4uY2xvbmVEZWVwPWZ1bmN0aW9uIHB1KHQpe3JldHVybiBhaSh0LDUpfSxCbi5jbG9uZURlZXBXaXRoPWZ1bmN0aW9uIGZ1KHQsZSl7cmV0dXJuIGFpKHQsNSxlPSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6bil9LEJuLmNsb25lV2l0aD1mdW5jdGlvbiBtdSh0LGUpe3JldHVybiBhaSh0LDQsZT0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOm4pfSxCbi5jb25mb3Jtc1RvPWZ1bmN0aW9uIGd1KHQsZSl7cmV0dXJuIG51bGw9PWV8fHNpKHQsZSxybChlKSl9LEJuLmRlYnVycj1nbCxCbi5kZWZhdWx0VG89ZnVuY3Rpb24gX3UodCxlKXtyZXR1cm4gbnVsbD09dHx8dCE9dD9lOnR9LEJuLmRpdmlkZT1ZbCxCbi5lbmRzV2l0aD1mdW5jdGlvbiB5dSh0LGUsaSl7dD1Xcyh0KSxlPUFyKGUpO3ZhciByPXQubGVuZ3RoLG89aT1pPT09bj9yOm9pKFZzKGkpLDAscik7cmV0dXJuKGktPWUubGVuZ3RoKT49MCYmdC5zbGljZShpLG8pPT1lfSxCbi5lcT1zcyxCbi5lc2NhcGU9ZnVuY3Rpb24gdnUodCl7cmV0dXJuKHQ9V3ModCkpJiZxLnRlc3QodCk/dC5yZXBsYWNlKEcsJGUpOnR9LEJuLmVzY2FwZVJlZ0V4cD1mdW5jdGlvbiBidSh0KXtyZXR1cm4odD1Xcyh0KSkmJnR0LnRlc3QodCk/dC5yZXBsYWNlKFEsIlxcJCYiKTp0fSxCbi5ldmVyeT1mdW5jdGlvbiB4dSh0LGUsaSl7dmFyIHI9aHModCk/YmU6T2k7cmV0dXJuIGkmJkhvKHQsZSxpKSYmKGU9bikscih0LEFvKGUsMykpfSxCbi5maW5kPURhLEJuLmZpbmRJbmRleD11YSxCbi5maW5kS2V5PWZ1bmN0aW9uIHd1KHQsZSl7cmV0dXJuIExlKHQsQW8oZSwzKSxGaSl9LEJuLmZpbmRMYXN0PUJhLEJuLmZpbmRMYXN0SW5kZXg9aGEsQm4uZmluZExhc3RLZXk9ZnVuY3Rpb24gU3UodCxlKXtyZXR1cm4gTGUodCxBbyhlLDMpLFZpKX0sQm4uZmxvb3I9WGwsQm4uZm9yRWFjaD1IYSxCbi5mb3JFYWNoUmlnaHQ9RmEsQm4uZm9ySW49ZnVuY3Rpb24gTXUodCxlKXtyZXR1cm4gbnVsbD09dD90OkJpKHQsQW8oZSwzKSxvbCl9LEJuLmZvckluUmlnaHQ9ZnVuY3Rpb24gRXUodCxlKXtyZXR1cm4gbnVsbD09dD90OkhpKHQsQW8oZSwzKSxvbCl9LEJuLmZvck93bj1mdW5jdGlvbiBUdSh0LGUpe3JldHVybiB0JiZGaSh0LEFvKGUsMykpfSxCbi5mb3JPd25SaWdodD1mdW5jdGlvbiBDdSh0LGUpe3JldHVybiB0JiZWaSh0LEFvKGUsMykpfSxCbi5nZXQ9UXMsQm4uZ3Q9bHMsQm4uZ3RlPWNzLEJuLmhhcz1mdW5jdGlvbiBBdSh0LGUpe3JldHVybiBudWxsIT10JiZSbyh0LGUsWWkpfSxCbi5oYXNJbj10bCxCbi5oZWFkPXBhLEJuLmlkZW50aXR5PUxsLEJuLmluY2x1ZGVzPWZ1bmN0aW9uIGt1KHQsZSxuLGkpe3Q9ZnModCk/dDpwbCh0KSxuPW4mJiFpP1ZzKG4pOjA7dmFyIHI9dC5sZW5ndGg7cmV0dXJuIG48MCYmKG49Z24ocituLDApKSxJcyh0KT9uPD1yJiZ0LmluZGV4T2YoZSxuKT4tMTohIXImJk5lKHQsZSxuKT4tMX0sQm4uaW5kZXhPZj1mdW5jdGlvbiBMdSh0LGUsbil7dmFyIGk9bnVsbD09dD8wOnQubGVuZ3RoO2lmKCFpKXJldHVybi0xO3ZhciByPW51bGw9PW4/MDpWcyhuKTtyZXR1cm4gcjwwJiYocj1nbihpK3IsMCkpLE5lKHQsZSxyKX0sQm4uaW5SYW5nZT1mdW5jdGlvbiBQdSh0LGUsaSl7cmV0dXJuIGU9RnMoZSksaT09PW4/KGk9ZSxlPTApOmk9RnMoaSksKGZ1bmN0aW9uIHIodCxlLG4pe3JldHVybiB0Pj1fbihlLG4pJiZ0PGduKGUsbil9KSh0PWpzKHQpLGUsaSl9LEJuLmludm9rZT1pbCxCbi5pc0FyZ3VtZW50cz11cyxCbi5pc0FycmF5PWhzLEJuLmlzQXJyYXlCdWZmZXI9ZHMsQm4uaXNBcnJheUxpa2U9ZnMsQm4uaXNBcnJheUxpa2VPYmplY3Q9bXMsQm4uaXNCb29sZWFuPWZ1bmN0aW9uIE51KHQpe3JldHVybiEwPT09dHx8ITE9PT10fHxNcyh0KSYmV2kodCk9PW19LEJuLmlzQnVmZmVyPWdzLEJuLmlzRGF0ZT1fcyxCbi5pc0VsZW1lbnQ9ZnVuY3Rpb24gSXUodCl7cmV0dXJuIE1zKHQpJiYxPT09dC5ub2RlVHlwZSYmIUFzKHQpfSxCbi5pc0VtcHR5PWZ1bmN0aW9uIE91KHQpe2lmKG51bGw9PXQpcmV0dXJuITA7aWYoZnModCkmJihocyh0KXx8InN0cmluZyI9PXR5cGVvZiB0fHwiZnVuY3Rpb24iPT10eXBlb2YgdC5zcGxpY2V8fGdzKHQpfHxScyh0KXx8dXModCkpKXJldHVybiF0Lmxlbmd0aDt2YXIgZT1Pbyh0KTtpZihlPT1ifHxlPT1FKXJldHVybiF0LnNpemU7aWYoam8odCkpcmV0dXJuIW5yKHQpLmxlbmd0aDtmb3IodmFyIG4gaW4gdClpZihOdC5jYWxsKHQsbikpcmV0dXJuITE7cmV0dXJuITB9LEJuLmlzRXF1YWw9ZnVuY3Rpb24gUnUodCxlKXtyZXR1cm4gSmkodCxlKX0sQm4uaXNFcXVhbFdpdGg9ZnVuY3Rpb24genUodCxlLGkpe3ZhciByPShpPSJmdW5jdGlvbiI9PXR5cGVvZiBpP2k6bik/aSh0LGUpOm47cmV0dXJuIHI9PT1uP0ppKHQsZSxuLGkpOiEhcn0sQm4uaXNFcnJvcj12cyxCbi5pc0Zpbml0ZT1mdW5jdGlvbiBEdSh0KXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQmJnBuKHQpfSxCbi5pc0Z1bmN0aW9uPWJzLEJuLmlzSW50ZWdlcj14cyxCbi5pc0xlbmd0aD13cyxCbi5pc01hcD1FcyxCbi5pc01hdGNoPWZ1bmN0aW9uIEJ1KHQsZSl7cmV0dXJuIHQ9PT1lfHxRaSh0LGUsTG8oZSkpfSxCbi5pc01hdGNoV2l0aD1mdW5jdGlvbiBIdSh0LGUsaSl7cmV0dXJuIGk9ImZ1bmN0aW9uIj09dHlwZW9mIGk/aTpuLFFpKHQsZSxMbyhlKSxpKX0sQm4uaXNOYU49ZnVuY3Rpb24gRnUodCl7cmV0dXJuIENzKHQpJiZ0IT0rdH0sQm4uaXNOYXRpdmU9ZnVuY3Rpb24gVnUodCl7aWYoVW8odCkpdGhyb3cgbmV3IHh0KCJVbnN1cHBvcnRlZCBjb3JlLWpzIHVzZS4gVHJ5IGh0dHBzOi8vbnBtcy5pby9zZWFyY2g/cT1wb255ZmlsbC4iKTtyZXR1cm4gdHIodCl9LEJuLmlzTmlsPWZ1bmN0aW9uIFV1KHQpe3JldHVybiBudWxsPT10fSxCbi5pc051bGw9ZnVuY3Rpb24ganUodCl7cmV0dXJuIG51bGw9PT10fSxCbi5pc051bWJlcj1DcyxCbi5pc09iamVjdD1TcyxCbi5pc09iamVjdExpa2U9TXMsQm4uaXNQbGFpbk9iamVjdD1BcyxCbi5pc1JlZ0V4cD1rcyxCbi5pc1NhZmVJbnRlZ2VyPWZ1bmN0aW9uIEd1KHQpe3JldHVybiB4cyh0KSYmdD49LTkwMDcxOTkyNTQ3NDA5OTEmJnQ8PWN9LEJuLmlzU2V0PVBzLEJuLmlzU3RyaW5nPUlzLEJuLmlzU3ltYm9sPU9zLEJuLmlzVHlwZWRBcnJheT1ScyxCbi5pc1VuZGVmaW5lZD1mdW5jdGlvbiBXdSh0KXtyZXR1cm4gdD09PW59LEJuLmlzV2Vha01hcD1mdW5jdGlvbiBxdSh0KXtyZXR1cm4gTXModCkmJk9vKHQpPT1BfSxCbi5pc1dlYWtTZXQ9ZnVuY3Rpb24gWXUodCl7cmV0dXJuIE1zKHQpJiYiW29iamVjdCBXZWFrU2V0XSI9PVdpKHQpfSxCbi5qb2luPWZ1bmN0aW9uIFh1KHQsZSl7cmV0dXJuIG51bGw9PXQ/IiI6Zm4uY2FsbCh0LGUpfSxCbi5rZWJhYkNhc2U9X2wsQm4ubGFzdD1fYSxCbi5sYXN0SW5kZXhPZj1mdW5jdGlvbiAkdSh0LGUsaSl7dmFyIHI9bnVsbD09dD8wOnQubGVuZ3RoO2lmKCFyKXJldHVybi0xO3ZhciBvPXI7cmV0dXJuIGkhPT1uJiYobz0obz1WcyhpKSk8MD9nbihyK28sMCk6X24obyxyLTEpKSxlPT1lPyhmdW5jdGlvbiBhKHQsZSxuKXtmb3IodmFyIGk9bisxO2ktLTspaWYodFtpXT09PWUpcmV0dXJuIGk7cmV0dXJuIGl9KSh0LGUsbyk6UGUodCxPZSxvLCEwKX0sQm4ubG93ZXJDYXNlPXlsLEJuLmxvd2VyRmlyc3Q9dmwsQm4ubHQ9RHMsQm4ubHRlPUJzLEJuLm1heD1mdW5jdGlvbiBLdSh0KXtyZXR1cm4gdCYmdC5sZW5ndGg/UmkodCxMbCxxaSk6bn0sQm4ubWF4Qnk9ZnVuY3Rpb24gWnUodCxlKXtyZXR1cm4gdCYmdC5sZW5ndGg/UmkodCxBbyhlLDIpLHFpKTpufSxCbi5tZWFuPWZ1bmN0aW9uIEp1KHQpe3JldHVybiBSZSh0LExsKX0sQm4ubWVhbkJ5PWZ1bmN0aW9uIFF1KHQsZSl7cmV0dXJuIFJlKHQsQW8oZSwyKSl9LEJuLm1pbj1mdW5jdGlvbiB0aCh0KXtyZXR1cm4gdCYmdC5sZW5ndGg/UmkodCxMbCxpcik6bn0sQm4ubWluQnk9ZnVuY3Rpb24gZWgodCxlKXtyZXR1cm4gdCYmdC5sZW5ndGg/UmkodCxBbyhlLDIpLGlyKTpufSxCbi5zdHViQXJyYXk9VWwsQm4uc3R1YkZhbHNlPWpsLEJuLnN0dWJPYmplY3Q9ZnVuY3Rpb24gbmgoKXtyZXR1cm57fX0sQm4uc3R1YlN0cmluZz1mdW5jdGlvbiBpaCgpe3JldHVybiIifSxCbi5zdHViVHJ1ZT1mdW5jdGlvbiByaCgpe3JldHVybiEwfSxCbi5tdWx0aXBseT0kbCxCbi5udGg9ZnVuY3Rpb24gb2godCxlKXtyZXR1cm4gdCYmdC5sZW5ndGg/bHIodCxWcyhlKSk6bn0sQm4ubm9Db25mbGljdD1mdW5jdGlvbiBhaCgpe3JldHVybiBpZS5fPT09dGhpcyYmKGllLl89RHQpLHRoaXN9LEJuLm5vb3A9UmwsQm4ubm93PVlhLEJuLnBhZD1mdW5jdGlvbiBzaCh0LGUsbil7dD1Xcyh0KTt2YXIgaT0oZT1WcyhlKSk/cm4odCk6MDtpZighZXx8aT49ZSlyZXR1cm4gdDt2YXIgcj0oZS1pKS8yO3JldHVybiBjbyh1bihyKSxuKSt0K2NvKGNuKHIpLG4pfSxCbi5wYWRFbmQ9ZnVuY3Rpb24gbGgodCxlLG4pe3Q9V3ModCk7dmFyIGk9KGU9VnMoZSkpP3JuKHQpOjA7cmV0dXJuIGUmJmk8ZT90K2NvKGUtaSxuKTp0fSxCbi5wYWRTdGFydD1mdW5jdGlvbiBjaCh0LGUsbil7dD1Xcyh0KTt2YXIgaT0oZT1WcyhlKSk/cm4odCk6MDtyZXR1cm4gZSYmaTxlP2NvKGUtaSxuKSt0OnR9LEJuLnBhcnNlSW50PWZ1bmN0aW9uIHVoKHQsZSxuKXtyZXR1cm4gbnx8bnVsbD09ZT9lPTA6ZSYmKGU9K2UpLHZuKFdzKHQpLnJlcGxhY2UoZXQsIiIpLGV8fDApfSxCbi5yYW5kb209ZnVuY3Rpb24gaGgodCxlLGkpe2lmKGkmJiJib29sZWFuIiE9dHlwZW9mIGkmJkhvKHQsZSxpKSYmKGU9aT1uKSxpPT09biYmKCJib29sZWFuIj09dHlwZW9mIGU/KGk9ZSxlPW4pOiJib29sZWFuIj09dHlwZW9mIHQmJihpPXQsdD1uKSksdD09PW4mJmU9PT1uPyh0PTAsZT0xKToodD1Gcyh0KSxlPT09bj8oZT10LHQ9MCk6ZT1GcyhlKSksdD5lKXt2YXIgcj10O3Q9ZSxlPXJ9aWYoaXx8dCUxfHxlJTEpe3ZhciBvPWJuKCk7cmV0dXJuIF9uKHQrbyooZS10K1F0KCIxZS0iKygobysiIikubGVuZ3RoLTEpKSksZSl9cmV0dXJuIHByKHQsZSl9LEJuLnJlZHVjZT1mdW5jdGlvbiBkaCh0LGUsbil7dmFyIGk9aHModCk/VGU6QmUscj1hcmd1bWVudHMubGVuZ3RoPDM7cmV0dXJuIGkodCxBbyhlLDQpLG4scixOaSl9LEJuLnJlZHVjZVJpZ2h0PWZ1bmN0aW9uIHBoKHQsZSxuKXt2YXIgaT1ocyh0KT9DZTpCZSxyPWFyZ3VtZW50cy5sZW5ndGg8MztyZXR1cm4gaSh0LEFvKGUsNCksbixyLElpKX0sQm4ucmVwZWF0PWZ1bmN0aW9uIGZoKHQsZSxpKXtyZXR1cm4gZT0oaT9Ibyh0LGUsaSk6ZT09PW4pPzE6VnMoZSksZnIoV3ModCksZSl9LEJuLnJlcGxhY2U9ZnVuY3Rpb24gbWgoKXt2YXIgdD1hcmd1bWVudHMsZT1Xcyh0WzBdKTtyZXR1cm4gdC5sZW5ndGg8Mz9lOmUucmVwbGFjZSh0WzFdLHRbMl0pfSxCbi5yZXN1bHQ9ZnVuY3Rpb24gZ2godCxlLGkpe3ZhciByPS0xLG89KGU9QnIoZSx0KSkubGVuZ3RoO2ZvcihvfHwobz0xLHQ9bik7KytyPG87KXt2YXIgYT1udWxsPT10P246dFtyYShlW3JdKV07YT09PW4mJihyPW8sYT1pKSx0PWJzKGEpP2EuY2FsbCh0KTphfXJldHVybiB0fSxCbi5yb3VuZD1LbCxCbi5ydW5JbkNvbnRleHQ9dCxCbi5zYW1wbGU9ZnVuY3Rpb24gX2godCl7cmV0dXJuKGhzKHQpPyRuOmdyKSh0KX0sQm4uc2l6ZT1mdW5jdGlvbiB5aCh0KXtpZihudWxsPT10KXJldHVybiAwO2lmKGZzKHQpKXJldHVybiBJcyh0KT9ybih0KTp0Lmxlbmd0aDt2YXIgZT1Pbyh0KTtyZXR1cm4gZT09Ynx8ZT09RT90LnNpemU6bnIodCkubGVuZ3RofSxCbi5zbmFrZUNhc2U9YmwsQm4uc29tZT1mdW5jdGlvbiB2aCh0LGUsaSl7dmFyIHI9aHModCk/QWU6U3I7cmV0dXJuIGkmJkhvKHQsZSxpKSYmKGU9bikscih0LEFvKGUsMykpfSxCbi5zb3J0ZWRJbmRleD1mdW5jdGlvbiBiaCh0LGUpe3JldHVybiBNcih0LGUpfSxCbi5zb3J0ZWRJbmRleEJ5PWZ1bmN0aW9uIHhoKHQsZSxuKXtyZXR1cm4gRXIodCxlLEFvKG4sMikpfSxCbi5zb3J0ZWRJbmRleE9mPWZ1bmN0aW9uIHdoKHQsZSl7dmFyIG49bnVsbD09dD8wOnQubGVuZ3RoO2lmKG4pe3ZhciBpPU1yKHQsZSk7aWYoaTxuJiZzcyh0W2ldLGUpKXJldHVybiBpfXJldHVybi0xfSxCbi5zb3J0ZWRMYXN0SW5kZXg9ZnVuY3Rpb24gU2godCxlKXtyZXR1cm4gTXIodCxlLCEwKX0sQm4uc29ydGVkTGFzdEluZGV4Qnk9ZnVuY3Rpb24gTWgodCxlLG4pe3JldHVybiBFcih0LGUsQW8obiwyKSwhMCl9LEJuLnNvcnRlZExhc3RJbmRleE9mPWZ1bmN0aW9uIEVoKHQsZSl7aWYobnVsbCE9dCYmdC5sZW5ndGgpe3ZhciBuPU1yKHQsZSwhMCktMTtpZihzcyh0W25dLGUpKXJldHVybiBufXJldHVybi0xfSxCbi5zdGFydENhc2U9eGwsQm4uc3RhcnRzV2l0aD1mdW5jdGlvbiBUaCh0LGUsbil7cmV0dXJuIHQ9V3ModCksbj1udWxsPT1uPzA6b2koVnMobiksMCx0Lmxlbmd0aCksZT1BcihlKSx0LnNsaWNlKG4sbitlLmxlbmd0aCk9PWV9LEJuLnN1YnRyYWN0PVpsLEJuLnN1bT1mdW5jdGlvbiBDaCh0KXtyZXR1cm4gdCYmdC5sZW5ndGg/SGUodCxMbCk6MH0sQm4uc3VtQnk9ZnVuY3Rpb24gQWgodCxlKXtyZXR1cm4gdCYmdC5sZW5ndGg/SGUodCxBbyhlLDIpKTowfSxCbi50ZW1wbGF0ZT1mdW5jdGlvbiBraCh0LGUsaSl7dmFyIHI9Qm4udGVtcGxhdGVTZXR0aW5ncztpJiZIbyh0LGUsaSkmJihlPW4pLHQ9V3ModCksZT1Ycyh7fSxlLHIseW8pO3ZhciBvLGEscz1Ycyh7fSxlLmltcG9ydHMsci5pbXBvcnRzLHlvKSxsPXJsKHMpLGM9amUocyxsKSx1PTAsaD1lLmludGVycG9sYXRlfHxfdCxkPSJfX3AgKz0gJyIscD1FdCgoZS5lc2NhcGV8fF90KS5zb3VyY2UrInwiK2guc291cmNlKyJ8IisoaD09PSQ/Y3Q6X3QpLnNvdXJjZSsifCIrKGUuZXZhbHVhdGV8fF90KS5zb3VyY2UrInwkIiwiZyIpLGY9Ii8vIyBzb3VyY2VVUkw9IisoTnQuY2FsbChlLCJzb3VyY2VVUkwiKT8oZS5zb3VyY2VVUkwrIiIpLnJlcGxhY2UoL1xzL2csIiAiKToibG9kYXNoLnRlbXBsYXRlU291cmNlc1siKyArKyR0KyJdIikrIlxuIjt0LnJlcGxhY2UocCwoZnVuY3Rpb24oZSxuLGkscixzLGwpe3JldHVybiBpfHwoaT1yKSxkKz10LnNsaWNlKHUsbCkucmVwbGFjZSh5dCxLZSksbiYmKG89ITAsZCs9IicgK1xuX19lKCIrbisiKSArXG4nIikscyYmKGE9ITAsZCs9Iic7XG4iK3MrIjtcbl9fcCArPSAnIiksaSYmKGQrPSInICtcbigoX190ID0gKCIraSsiKSkgPT0gbnVsbCA/ICcnIDogX190KSArXG4nIiksdT1sK2UubGVuZ3RoLGV9KSksZCs9Iic7XG4iO3ZhciBtPU50LmNhbGwoZSwidmFyaWFibGUiKSYmZS52YXJpYWJsZTtpZihtKXtpZihzdC50ZXN0KG0pKXRocm93IG5ldyB4dCgiSW52YWxpZCBgdmFyaWFibGVgIG9wdGlvbiBwYXNzZWQgaW50byBgXy50ZW1wbGF0ZWAiKX1lbHNlIGQ9IndpdGggKG9iaikge1xuIitkKyJcbn1cbiI7ZD0oYT9kLnJlcGxhY2UoRiwiIik6ZCkucmVwbGFjZShWLCIkMSIpLnJlcGxhY2UoVSwiJDE7IiksZD0iZnVuY3Rpb24oIisobXx8Im9iaiIpKyIpIHtcbiIrKG0/IiI6Im9iaiB8fCAob2JqID0ge30pO1xuIikrInZhciBfX3QsIF9fcCA9ICcnIisobz8iLCBfX2UgPSBfLmVzY2FwZSI6IiIpKyhhPyIsIF9faiA9IEFycmF5LnByb3RvdHlwZS5qb2luO1xuZnVuY3Rpb24gcHJpbnQoKSB7IF9fcCArPSBfX2ouY2FsbChhcmd1bWVudHMsICcnKSB9XG4iOiI7XG4iKStkKyJyZXR1cm4gX19wXG59Ijt2YXIgZz1FbCgoZnVuY3Rpb24oKXtyZXR1cm4gd3QobCxmKyJyZXR1cm4gIitkKS5hcHBseShuLGMpfSkpO2lmKGcuc291cmNlPWQsdnMoZykpdGhyb3cgZztyZXR1cm4gZ30sQm4udGltZXM9ZnVuY3Rpb24gTGgodCxlKXtpZigodD1Wcyh0KSk8MXx8dD5jKXJldHVybltdO3ZhciBuPWgsaT1fbih0LGgpO2U9QW8oZSksdC09aDtmb3IodmFyIHI9RmUoaSxlKTsrK248dDspZShuKTtyZXR1cm4gcn0sQm4udG9GaW5pdGU9RnMsQm4udG9JbnRlZ2VyPVZzLEJuLnRvTGVuZ3RoPVVzLEJuLnRvTG93ZXI9ZnVuY3Rpb24gUGgodCl7cmV0dXJuIFdzKHQpLnRvTG93ZXJDYXNlKCl9LEJuLnRvTnVtYmVyPWpzLEJuLnRvU2FmZUludGVnZXI9ZnVuY3Rpb24gTmgodCl7cmV0dXJuIHQ/b2koVnModCksLTkwMDcxOTkyNTQ3NDA5OTEsYyk6MD09PXQ/dDowfSxCbi50b1N0cmluZz1XcyxCbi50b1VwcGVyPWZ1bmN0aW9uIEloKHQpe3JldHVybiBXcyh0KS50b1VwcGVyQ2FzZSgpfSxCbi50cmltPWZ1bmN0aW9uIE9oKHQsZSxpKXtpZigodD1Xcyh0KSkmJihpfHxlPT09bikpcmV0dXJuIFZlKHQpO2lmKCF0fHwhKGU9QXIoZSkpKXJldHVybiB0O3ZhciByPW9uKHQpLG89b24oZSk7cmV0dXJuIEZyKHIsV2UocixvKSxxZShyLG8pKzEpLmpvaW4oIiIpfSxCbi50cmltRW5kPWZ1bmN0aW9uIFJoKHQsZSxpKXtpZigodD1Xcyh0KSkmJihpfHxlPT09bikpcmV0dXJuIHQuc2xpY2UoMCxhbih0KSsxKTtpZighdHx8IShlPUFyKGUpKSlyZXR1cm4gdDt2YXIgcj1vbih0KTtyZXR1cm4gRnIociwwLHFlKHIsb24oZSkpKzEpLmpvaW4oIiIpfSxCbi50cmltU3RhcnQ9ZnVuY3Rpb24gemgodCxlLGkpe2lmKCh0PVdzKHQpKSYmKGl8fGU9PT1uKSlyZXR1cm4gdC5yZXBsYWNlKGV0LCIiKTtpZighdHx8IShlPUFyKGUpKSlyZXR1cm4gdDt2YXIgcj1vbih0KTtyZXR1cm4gRnIocixXZShyLG9uKGUpKSkuam9pbigiIil9LEJuLnRydW5jYXRlPWZ1bmN0aW9uIERoKHQsZSl7dmFyIGk9MzAscj0iLi4uIjtpZihTcyhlKSl7dmFyIG89InNlcGFyYXRvciJpbiBlP2Uuc2VwYXJhdG9yOm87aT0ibGVuZ3RoImluIGU/VnMoZS5sZW5ndGgpOmkscj0ib21pc3Npb24iaW4gZT9BcihlLm9taXNzaW9uKTpyfXZhciBhPSh0PVdzKHQpKS5sZW5ndGg7aWYoWmUodCkpe3ZhciBzPW9uKHQpO2E9cy5sZW5ndGh9aWYoaT49YSlyZXR1cm4gdDt2YXIgbD1pLXJuKHIpO2lmKGw8MSlyZXR1cm4gcjt2YXIgYz1zP0ZyKHMsMCxsKS5qb2luKCIiKTp0LnNsaWNlKDAsbCk7aWYobz09PW4pcmV0dXJuIGMrcjtpZihzJiYobCs9Yy5sZW5ndGgtbCksa3Mobykpe2lmKHQuc2xpY2UobCkuc2VhcmNoKG8pKXt2YXIgdSxoPWM7Zm9yKG8uZ2xvYmFsfHwobz1FdChvLnNvdXJjZSxXcyh1dC5leGVjKG8pKSsiZyIpKSxvLmxhc3RJbmRleD0wO3U9by5leGVjKGgpOyl2YXIgZD11LmluZGV4O2M9Yy5zbGljZSgwLGQ9PT1uP2w6ZCl9fWVsc2UgaWYodC5pbmRleE9mKEFyKG8pLGwpIT1sKXt2YXIgcD1jLmxhc3RJbmRleE9mKG8pO3A+LTEmJihjPWMuc2xpY2UoMCxwKSl9cmV0dXJuIGMrcn0sQm4udW5lc2NhcGU9ZnVuY3Rpb24gQmgodCl7cmV0dXJuKHQ9V3ModCkpJiZXLnRlc3QodCk/dC5yZXBsYWNlKGosc24pOnR9LEJuLnVuaXF1ZUlkPWZ1bmN0aW9uIEhoKHQpe3ZhciBlPSsrSXQ7cmV0dXJuIFdzKHQpK2V9LEJuLnVwcGVyQ2FzZT13bCxCbi51cHBlckZpcnN0PVNsLEJuLmVhY2g9SGEsQm4uZWFjaFJpZ2h0PUZhLEJuLmZpcnN0PXBhLE9sKEJuLChHbD17fSxGaShCbiwoZnVuY3Rpb24odCxlKXtOdC5jYWxsKEJuLnByb3RvdHlwZSxlKXx8KEdsW2VdPXQpfSkpLEdsKSx7Y2hhaW46ITF9KSxCbi5WRVJTSU9OPSI0LjE3LjIxIixfZShbImJpbmQiLCJiaW5kS2V5IiwiY3VycnkiLCJjdXJyeVJpZ2h0IiwicGFydGlhbCIsInBhcnRpYWxSaWdodCJdLChmdW5jdGlvbih0KXtCblt0XS5wbGFjZWhvbGRlcj1Cbn0pKSxfZShbImRyb3AiLCJ0YWtlIl0sKGZ1bmN0aW9uKHQsZSl7VW4ucHJvdG90eXBlW3RdPWZ1bmN0aW9uKGkpe2k9aT09PW4/MTpnbihWcyhpKSwwKTt2YXIgcj10aGlzLl9fZmlsdGVyZWRfXyYmIWU/bmV3IFVuKHRoaXMpOnRoaXMuY2xvbmUoKTtyZXR1cm4gci5fX2ZpbHRlcmVkX18/ci5fX3Rha2VDb3VudF9fPV9uKGksci5fX3Rha2VDb3VudF9fKTpyLl9fdmlld3NfXy5wdXNoKHtzaXplOl9uKGksaCksdHlwZTp0KyhyLl9fZGlyX188MD8iUmlnaHQiOiIiKX0pLHJ9LFVuLnByb3RvdHlwZVt0KyJSaWdodCJdPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnJldmVyc2UoKVt0XShlKS5yZXZlcnNlKCl9fSkpLF9lKFsiZmlsdGVyIiwibWFwIiwidGFrZVdoaWxlIl0sKGZ1bmN0aW9uKHQsZSl7dmFyIG49ZSsxLGk9MT09bnx8Mz09bjtVbi5wcm90b3R5cGVbdF09ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jbG9uZSgpO3JldHVybiBlLl9faXRlcmF0ZWVzX18ucHVzaCh7aXRlcmF0ZWU6QW8odCwzKSx0eXBlOm59KSxlLl9fZmlsdGVyZWRfXz1lLl9fZmlsdGVyZWRfX3x8aSxlfX0pKSxfZShbImhlYWQiLCJsYXN0Il0sKGZ1bmN0aW9uKHQsZSl7dmFyIG49InRha2UiKyhlPyJSaWdodCI6IiIpO1VuLnByb3RvdHlwZVt0XT1mdW5jdGlvbigpe3JldHVybiB0aGlzW25dKDEpLnZhbHVlKClbMF19fSkpLF9lKFsiaW5pdGlhbCIsInRhaWwiXSwoZnVuY3Rpb24odCxlKXt2YXIgbj0iZHJvcCIrKGU/IiI6IlJpZ2h0Iik7VW4ucHJvdG90eXBlW3RdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19maWx0ZXJlZF9fP25ldyBVbih0aGlzKTp0aGlzW25dKDEpfX0pKSxVbi5wcm90b3R5cGUuY29tcGFjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbHRlcihMbCl9LFVuLnByb3RvdHlwZS5maW5kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmZpbHRlcih0KS5oZWFkKCl9LFVuLnByb3RvdHlwZS5maW5kTGFzdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5yZXZlcnNlKCkuZmluZCh0KX0sVW4ucHJvdG90eXBlLmludm9rZU1hcD1tcigoZnVuY3Rpb24odCxlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD9uZXcgVW4odGhpcyk6dGhpcy5tYXAoKGZ1bmN0aW9uKG4pe3JldHVybiBLaShuLHQsZSl9KSl9KSksVW4ucHJvdG90eXBlLnJlamVjdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5maWx0ZXIobnMoQW8odCkpKX0sVW4ucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKHQsZSl7dD1Wcyh0KTt2YXIgaT10aGlzO3JldHVybiBpLl9fZmlsdGVyZWRfXyYmKHQ+MHx8ZTwwKT9uZXcgVW4oaSk6KHQ8MD9pPWkudGFrZVJpZ2h0KC10KTp0JiYoaT1pLmRyb3AodCkpLGUhPT1uJiYoaT0oZT1WcyhlKSk8MD9pLmRyb3BSaWdodCgtZSk6aS50YWtlKGUtdCkpLGkpfSxVbi5wcm90b3R5cGUudGFrZVJpZ2h0V2hpbGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucmV2ZXJzZSgpLnRha2VXaGlsZSh0KS5yZXZlcnNlKCl9LFVuLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGFrZShoKX0sRmkoVW4ucHJvdG90eXBlLChmdW5jdGlvbih0LGUpe3ZhciBpPS9eKD86ZmlsdGVyfGZpbmR8bWFwfHJlamVjdCl8V2hpbGUkLy50ZXN0KGUpLHI9L14oPzpoZWFkfGxhc3QpJC8udGVzdChlKSxvPUJuW3I/InRha2UiKygibGFzdCI9PWU/IlJpZ2h0IjoiIik6ZV0sYT1yfHwvXmZpbmQvLnRlc3QoZSk7byYmKEJuLnByb3RvdHlwZVtlXT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX193cmFwcGVkX18scz1yP1sxXTphcmd1bWVudHMsbD1lIGluc3RhbmNlb2YgVW4sYz1zWzBdLHU9bHx8aHMoZSksaD1mdW5jdGlvbih0KXt2YXIgZT1vLmFwcGx5KEJuLEVlKFt0XSxzKSk7cmV0dXJuIHImJmQ/ZVswXTplfTt1JiZpJiYiZnVuY3Rpb24iPT10eXBlb2YgYyYmMSE9Yy5sZW5ndGgmJihsPXU9ITEpO3ZhciBkPXRoaXMuX19jaGFpbl9fLHA9ISF0aGlzLl9fYWN0aW9uc19fLmxlbmd0aCxmPWEmJiFkLG09bCYmIXA7aWYoIWEmJnUpe2U9bT9lOm5ldyBVbih0aGlzKTt2YXIgZz10LmFwcGx5KGUscyk7cmV0dXJuIGcuX19hY3Rpb25zX18ucHVzaCh7ZnVuYzpPYSxhcmdzOltoXSx0aGlzQXJnOm59KSxuZXcgVm4oZyxkKX1yZXR1cm4gZiYmbT90LmFwcGx5KHRoaXMscyk6KGc9dGhpcy50aHJ1KGgpLGY/cj9nLnZhbHVlKClbMF06Zy52YWx1ZSgpOmcpfSl9KSksX2UoWyJwb3AiLCJwdXNoIiwic2hpZnQiLCJzb3J0Iiwic3BsaWNlIiwidW5zaGlmdCJdLChmdW5jdGlvbih0KXt2YXIgZT1BdFt0XSxuPS9eKD86cHVzaHxzb3J0fHVuc2hpZnQpJC8udGVzdCh0KT8idGFwIjoidGhydSIsaT0vXig/OnBvcHxzaGlmdCkkLy50ZXN0KHQpO0JuLnByb3RvdHlwZVt0XT1mdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cztpZihpJiYhdGhpcy5fX2NoYWluX18pe3ZhciByPXRoaXMudmFsdWUoKTtyZXR1cm4gZS5hcHBseShocyhyKT9yOltdLHQpfXJldHVybiB0aGlzW25dKChmdW5jdGlvbihuKXtyZXR1cm4gZS5hcHBseShocyhuKT9uOltdLHQpfSkpfX0pKSxGaShVbi5wcm90b3R5cGUsKGZ1bmN0aW9uKHQsZSl7dmFyIG49Qm5bZV07aWYobil7dmFyIGk9bi5uYW1lKyIiO050LmNhbGwoa24saSl8fChrbltpXT1bXSksa25baV0ucHVzaCh7bmFtZTplLGZ1bmM6bn0pfX0pKSxrbltvbyhuLDIpLm5hbWVdPVt7bmFtZToid3JhcHBlciIsZnVuYzpufV0sVW4ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uIEZoKCl7dmFyIHQ9bmV3IFVuKHRoaXMuX193cmFwcGVkX18pO3JldHVybiB0Ll9fYWN0aW9uc19fPVhyKHRoaXMuX19hY3Rpb25zX18pLHQuX19kaXJfXz10aGlzLl9fZGlyX18sdC5fX2ZpbHRlcmVkX189dGhpcy5fX2ZpbHRlcmVkX18sdC5fX2l0ZXJhdGVlc19fPVhyKHRoaXMuX19pdGVyYXRlZXNfXyksdC5fX3Rha2VDb3VudF9fPXRoaXMuX190YWtlQ291bnRfXyx0Ll9fdmlld3NfXz1Ycih0aGlzLl9fdmlld3NfXyksdH0sVW4ucHJvdG90eXBlLnJldmVyc2U9ZnVuY3Rpb24gVmgoKXtpZih0aGlzLl9fZmlsdGVyZWRfXyl7dmFyIHQ9bmV3IFVuKHRoaXMpO3QuX19kaXJfXz0tMSx0Ll9fZmlsdGVyZWRfXz0hMH1lbHNlKHQ9dGhpcy5jbG9uZSgpKS5fX2Rpcl9fKj0tMTtyZXR1cm4gdH0sVW4ucHJvdG90eXBlLnZhbHVlPWZ1bmN0aW9uIFVoKCl7dmFyIHQ9dGhpcy5fX3dyYXBwZWRfXy52YWx1ZSgpLGU9dGhpcy5fX2Rpcl9fLG49aHModCksaT1lPDAscj1uP3QubGVuZ3RoOjAsbz0oZnVuY3Rpb24gYSh0LGUsbil7Zm9yKHZhciBpPS0xLHI9bi5sZW5ndGg7KytpPHI7KXt2YXIgbz1uW2ldLGE9by5zaXplO3N3aXRjaChvLnR5cGUpe2Nhc2UiZHJvcCI6dCs9YTticmVhaztjYXNlImRyb3BSaWdodCI6ZS09YTticmVhaztjYXNlInRha2UiOmU9X24oZSx0K2EpO2JyZWFrO2Nhc2UidGFrZVJpZ2h0Ijp0PWduKHQsZS1hKX19cmV0dXJue3N0YXJ0OnQsZW5kOmV9fSkoMCxyLHRoaXMuX192aWV3c19fKSxzPW8uc3RhcnQsbD1vLmVuZCxjPWwtcyx1PWk/bDpzLTEsaD10aGlzLl9faXRlcmF0ZWVzX18sZD1oLmxlbmd0aCxwPTAsZj1fbihjLHRoaXMuX190YWtlQ291bnRfXyk7aWYoIW58fCFpJiZyPT1jJiZmPT1jKXJldHVybiBJcih0LHRoaXMuX19hY3Rpb25zX18pO3ZhciBtPVtdO3Q6Zm9yKDtjLS0mJnA8Zjspe2Zvcih2YXIgZz0tMSxfPXRbdSs9ZV07KytnPGQ7KXt2YXIgeT1oW2ddLHY9eS50eXBlLGI9KDAseS5pdGVyYXRlZSkoXyk7aWYoMj09dilfPWI7ZWxzZSBpZighYil7aWYoMT09diljb250aW51ZSB0O2JyZWFrIHR9fW1bcCsrXT1ffXJldHVybiBtfSxCbi5wcm90b3R5cGUuYXQ9UmEsQm4ucHJvdG90eXBlLmNoYWluPWZ1bmN0aW9uIGpoKCl7cmV0dXJuIElhKHRoaXMpfSxCbi5wcm90b3R5cGUuY29tbWl0PWZ1bmN0aW9uIEdoKCl7cmV0dXJuIG5ldyBWbih0aGlzLnZhbHVlKCksdGhpcy5fX2NoYWluX18pfSxCbi5wcm90b3R5cGUubmV4dD1mdW5jdGlvbiBXaCgpe3RoaXMuX192YWx1ZXNfXz09PW4mJih0aGlzLl9fdmFsdWVzX189SHModGhpcy52YWx1ZSgpKSk7dmFyIHQ9dGhpcy5fX2luZGV4X18+PXRoaXMuX192YWx1ZXNfXy5sZW5ndGg7cmV0dXJue2RvbmU6dCx2YWx1ZTp0P246dGhpcy5fX3ZhbHVlc19fW3RoaXMuX19pbmRleF9fKytdfX0sQm4ucHJvdG90eXBlLnBsYW50PWZ1bmN0aW9uIHFoKHQpe2Zvcih2YXIgZSxpPXRoaXM7aSBpbnN0YW5jZW9mIEZuOyl7dmFyIHI9YWEoaSk7ci5fX2luZGV4X189MCxyLl9fdmFsdWVzX189bixlP28uX193cmFwcGVkX189cjplPXI7dmFyIG89cjtpPWkuX193cmFwcGVkX199cmV0dXJuIG8uX193cmFwcGVkX189dCxlfSxCbi5wcm90b3R5cGUucmV2ZXJzZT1mdW5jdGlvbiBZaCgpe3ZhciB0PXRoaXMuX193cmFwcGVkX187aWYodCBpbnN0YW5jZW9mIFVuKXt2YXIgZT10O3JldHVybiB0aGlzLl9fYWN0aW9uc19fLmxlbmd0aCYmKGU9bmV3IFVuKHRoaXMpKSwoZT1lLnJldmVyc2UoKSkuX19hY3Rpb25zX18ucHVzaCh7ZnVuYzpPYSxhcmdzOlt4YV0sdGhpc0FyZzpufSksbmV3IFZuKGUsdGhpcy5fX2NoYWluX18pfXJldHVybiB0aGlzLnRocnUoeGEpfSxCbi5wcm90b3R5cGUudG9KU09OPUJuLnByb3RvdHlwZS52YWx1ZU9mPUJuLnByb3RvdHlwZS52YWx1ZT1mdW5jdGlvbiBYaCgpe3JldHVybiBJcih0aGlzLl9fd3JhcHBlZF9fLHRoaXMuX19hY3Rpb25zX18pfSxCbi5wcm90b3R5cGUuZmlyc3Q9Qm4ucHJvdG90eXBlLmhlYWQsb2UmJihCbi5wcm90b3R5cGVbb2VdPWZ1bmN0aW9uICRoKCl7cmV0dXJuIHRoaXN9KSxCbn0pKCk7b2U/KChvZS5leHBvcnRzPWxuKS5fPWxuLHJlLl89bG4pOmllLl89bG59KS5jYWxsKHZlKX0pKTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi9jb25zdCBTZT0hKHdpbmRvdy5TaGFkeURPTSYmd2luZG93LlNoYWR5RE9NLmluVXNlKTtsZXQgTWUsRWU7ZnVuY3Rpb24gVGUodCl7TWU9KCF0fHwhdC5zaGltY3NzcHJvcGVydGllcykmJihTZXx8Qm9vbGVhbighbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQXBwbGVXZWJLaXRcLzYwMXxFZGdlXC8xNS8pJiZ3aW5kb3cuQ1NTJiZDU1Muc3VwcG9ydHMmJkNTUy5zdXBwb3J0cygiYm94LXNoYWRvdyIsIjAgMCAwIHZhcigtLWZvbykiKSkpfXdpbmRvdy5TaGFkeUNTUyYmdm9pZCAwIT09d2luZG93LlNoYWR5Q1NTLmNzc0J1aWxkJiYoRWU9d2luZG93LlNoYWR5Q1NTLmNzc0J1aWxkKTtjb25zdCBDZT1Cb29sZWFuKHdpbmRvdy5TaGFkeUNTUyYmd2luZG93LlNoYWR5Q1NTLmRpc2FibGVSdW50aW1lKTt3aW5kb3cuU2hhZHlDU1MmJnZvaWQgMCE9PXdpbmRvdy5TaGFkeUNTUy5uYXRpdmVDc3M/TWU9d2luZG93LlNoYWR5Q1NTLm5hdGl2ZUNzczp3aW5kb3cuU2hhZHlDU1M/KFRlKHdpbmRvdy5TaGFkeUNTUyksd2luZG93LlNoYWR5Q1NTPXZvaWQgMCk6VGUod2luZG93LldlYkNvbXBvbmVudHMmJndpbmRvdy5XZWJDb21wb25lbnRzLmZsYWdzKTtjb25zdCBBZT1NZTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi9jbGFzcyBrZXtjb25zdHJ1Y3Rvcigpe3RoaXMuc3RhcnQ9MCx0aGlzLmVuZD0wLHRoaXMucHJldmlvdXM9bnVsbCx0aGlzLnBhcmVudD1udWxsLHRoaXMucnVsZXM9bnVsbCx0aGlzLnBhcnNlZENzc1RleHQ9IiIsdGhpcy5jc3NUZXh0PSIiLHRoaXMuYXRSdWxlPSExLHRoaXMudHlwZT0wLHRoaXMua2V5ZnJhbWVzTmFtZT0iIix0aGlzLnNlbGVjdG9yPSIiLHRoaXMucGFyc2VkU2VsZWN0b3I9IiJ9fWZ1bmN0aW9uIExlKHQpe3JldHVybiBQZSgoZnVuY3Rpb24gbih0KXtsZXQgZT1uZXcga2U7ZS5zdGFydD0wLGUuZW5kPXQubGVuZ3RoO2xldCBuPWU7Zm9yKGxldCBpPTAscj10Lmxlbmd0aDtpPHI7aSsrKWlmKHRbaV09PT1PZSl7bi5ydWxlc3x8KG4ucnVsZXM9W10pO2xldCB0PW4sZT10LnJ1bGVzW3QucnVsZXMubGVuZ3RoLTFdfHxudWxsO249bmV3IGtlLG4uc3RhcnQ9aSsxLG4ucGFyZW50PXQsbi5wcmV2aW91cz1lLHQucnVsZXMucHVzaChuKX1lbHNlIHRbaV09PT1SZSYmKG4uZW5kPWkrMSxuPW4ucGFyZW50fHxlKTtyZXR1cm4gZX0pKHQ9KGZ1bmN0aW9uIGUodCl7cmV0dXJuIHQucmVwbGFjZSh6ZS5jb21tZW50cywiIikucmVwbGFjZSh6ZS5wb3J0LCIiKX0pKHQpKSx0KX1mdW5jdGlvbiBQZSh0LGUpe2xldCBuPWUuc3Vic3RyaW5nKHQuc3RhcnQsdC5lbmQtMSk7aWYodC5wYXJzZWRDc3NUZXh0PXQuY3NzVGV4dD1uLnRyaW0oKSx0LnBhcmVudCl7bj1lLnN1YnN0cmluZyh0LnByZXZpb3VzP3QucHJldmlvdXMuZW5kOnQucGFyZW50LnN0YXJ0LHQuc3RhcnQtMSksbj0oZnVuY3Rpb24gaSh0KXtyZXR1cm4gdC5yZXBsYWNlKC9cXChbMC05YS1mXXsxLDZ9KVxzL2dpLChmdW5jdGlvbigpe2xldCB0PWFyZ3VtZW50c1sxXSxlPTYtdC5sZW5ndGg7Zm9yKDtlLS07KXQ9IjAiK3Q7cmV0dXJuIlxcIit0fSkpfSkobiksbj1uLnJlcGxhY2UoemUubXVsdGlwbGVTcGFjZXMsIiAiKSxuPW4uc3Vic3RyaW5nKG4ubGFzdEluZGV4T2YoIjsiKSsxKTtsZXQgaT10LnBhcnNlZFNlbGVjdG9yPXQuc2VsZWN0b3I9bi50cmltKCk7dC5hdFJ1bGU9MD09PWkuaW5kZXhPZihIZSksdC5hdFJ1bGU/MD09PWkuaW5kZXhPZihCZSk/dC50eXBlPUllLk1FRElBX1JVTEU6aS5tYXRjaCh6ZS5rZXlmcmFtZXNSdWxlKSYmKHQudHlwZT1JZS5LRVlGUkFNRVNfUlVMRSx0LmtleWZyYW1lc05hbWU9dC5zZWxlY3Rvci5zcGxpdCh6ZS5tdWx0aXBsZVNwYWNlcykucG9wKCkpOnQudHlwZT0wPT09aS5pbmRleE9mKERlKT9JZS5NSVhJTl9SVUxFOkllLlNUWUxFX1JVTEV9bGV0IHI9dC5ydWxlcztpZihyKWZvcihsZXQgdCxuPTAsaT1yLmxlbmd0aDtuPGkmJih0PXJbbl0pO24rKylQZSh0LGUpO3JldHVybiB0fWZ1bmN0aW9uIE5lKHQsZSxuPSIiKXtsZXQgaT0iIjtpZih0LmNzc1RleHR8fHQucnVsZXMpe2xldCBuPXQucnVsZXM7aWYobiYmIShmdW5jdGlvbiByKHQpe2xldCBlPXRbMF07cmV0dXJuIEJvb2xlYW4oZSkmJkJvb2xlYW4oZS5zZWxlY3RvcikmJjA9PT1lLnNlbGVjdG9yLmluZGV4T2YoRGUpfSkobikpZm9yKGxldCB0LHI9MCxvPW4ubGVuZ3RoO3I8byYmKHQ9bltyXSk7cisrKWk9TmUodCxlLGkpO2Vsc2UgaT1lP3QuY3NzVGV4dDooZnVuY3Rpb24gbyh0KXtyZXR1cm4oZnVuY3Rpb24gbih0KXtyZXR1cm4gdC5yZXBsYWNlKHplLm1peGluQXBwbHksIiIpLnJlcGxhY2UoemUudmFyQXBwbHksIiIpfSkodD0oZnVuY3Rpb24gZSh0KXtyZXR1cm4gdC5yZXBsYWNlKHplLmN1c3RvbVByb3AsIiIpLnJlcGxhY2UoemUubWl4aW5Qcm9wLCIiKX0pKHQpKX0pKHQuY3NzVGV4dCksaT1pLnRyaW0oKSxpJiYoaT0iICAiK2krIlxuIil9cmV0dXJuIGkmJih0LnNlbGVjdG9yJiYobis9dC5zZWxlY3RvcisiICIrT2UrIlxuIiksbis9aSx0LnNlbGVjdG9yJiYobis9UmUrIlxuXG4iKSksbn1jb25zdCBJZT17U1RZTEVfUlVMRToxLEtFWUZSQU1FU19SVUxFOjcsTUVESUFfUlVMRTo0LE1JWElOX1JVTEU6MWUzfSxPZT0ieyIsUmU9In0iLHplPXtjb21tZW50czovXC9cKlteKl0qXCorKFteLypdW14qXSpcKispKlwvL2dpbSxwb3J0Oi9AaW1wb3J0W147XSo7L2dpbSxjdXN0b21Qcm9wOi8oPzpeW147XC1cc31dKyk/LS1bXjt7fV0qPzpbXnt9O10qPyg/Ols7XG5dfCQpL2dpbSxtaXhpblByb3A6Lyg/Ol5bXjtcLVxzfV0rKT8tLVteO3t9XSo/Oltee307XSo/e1tefV0qP30oPzpbO1xuXXwkKT8vZ2ltLG1peGluQXBwbHk6L0BhcHBseVxzKlwoP1teKTtdKlwpP1xzKig/Ols7XG5dfCQpPy9naW0sdmFyQXBwbHk6L1teOzpdKj86W147XSo/dmFyXChbXjtdKlwpKD86Wztcbl18JCk/L2dpbSxrZXlmcmFtZXNSdWxlOi9eQFteXHNdKmtleWZyYW1lcy8sbXVsdGlwbGVTcGFjZXM6L1xzKy9nfSxEZT0iLS0iLEJlPSJAbWVkaWEiLEhlPSJAIixGZT0vKD86XnxbO1xze11ccyopKC0tW1x3LV0qPylccyo6XHMqKD86KCg/OicoPzpcXCd8LikqPyd8Iig/OlxcInwuKSo/InxcKFteKV0qP1wpfFtefTt7XSkrKXxceyhbXn1dKilcfSg/Oig/PVs7XHN9XSl8JCkpL2dpLFZlPS8oPzpefFxXKylAYXBwbHlccypcKD8oW14pO1xuXSopXCk/L2dpLFVlPS9AbWVkaWFccyguKikvLGplPW5ldyBTZXQ7ZnVuY3Rpb24gR2UodCl7Y29uc3QgZT10LnRleHRDb250ZW50O2lmKCFqZS5oYXMoZSkpe2plLmFkZChlKTtjb25zdCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7dC5zZXRBdHRyaWJ1dGUoInNoYWR5LXVuc2NvcGVkIiwiIiksdC50ZXh0Q29udGVudD1lLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQodCl9fWZ1bmN0aW9uIFdlKHQpe3JldHVybiB0Lmhhc0F0dHJpYnV0ZSgic2hhZHktdW5zY29wZWQiKX0KLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi9mdW5jdGlvbiBxZSh0LGUpe3JldHVybiB0Pygic3RyaW5nIj09dHlwZW9mIHQmJih0PUxlKHQpKSxlJiZYZSh0LGUpLE5lKHQsQWUpKToiIn1mdW5jdGlvbiBZZSh0KXtyZXR1cm4hdC5fX2Nzc1J1bGVzJiZ0LnRleHRDb250ZW50JiYodC5fX2Nzc1J1bGVzPUxlKHQudGV4dENvbnRlbnQpKSx0Ll9fY3NzUnVsZXN8fG51bGx9ZnVuY3Rpb24gWGUodCxlLG4saSl7aWYoIXQpcmV0dXJuO2xldCByPSExLG89dC50eXBlO2lmKGkmJm89PT1JZS5NRURJQV9SVUxFKXtsZXQgZT10LnNlbGVjdG9yLm1hdGNoKFVlKTtlJiYod2luZG93Lm1hdGNoTWVkaWEoZVsxXSkubWF0Y2hlc3x8KHI9ITApKX1vPT09SWUuU1RZTEVfUlVMRT9lKHQpOm4mJm89PT1JZS5LRVlGUkFNRVNfUlVMRT9uKHQpOm89PT1JZS5NSVhJTl9SVUxFJiYocj0hMCk7bGV0IGE9dC5ydWxlcztpZihhJiYhcilmb3IobGV0IHQscj0wLG89YS5sZW5ndGg7cjxvJiYodD1hW3JdKTtyKyspWGUodCxlLG4saSl9ZnVuY3Rpb24gJGUodCxlKXtsZXQgbj10LmluZGV4T2YoInZhcigiKTtpZigtMT09PW4pcmV0dXJuIGUodCwiIiwiIiwiIik7bGV0IGk9KGZ1bmN0aW9uIHIodCxlKXtsZXQgbj0wO2ZvcihsZXQgaT1lLHI9dC5sZW5ndGg7aTxyO2krKylpZigiKCI9PT10W2ldKW4rKztlbHNlIGlmKCIpIj09PXRbaV0mJjA9PS0tbilyZXR1cm4gaTtyZXR1cm4tMX0pKHQsbiszKSxvPXQuc3Vic3RyaW5nKG4rNCxpKSxhPXQuc3Vic3RyaW5nKDAsbikscz0kZSh0LnN1YnN0cmluZyhpKzEpLGUpLGw9by5pbmRleE9mKCIsIik7cmV0dXJuLTE9PT1sP2UoYSxvLnRyaW0oKSwiIixzKTplKGEsby5zdWJzdHJpbmcoMCxsKS50cmltKCksby5zdWJzdHJpbmcobCsxKS50cmltKCkscyl9d2luZG93LlNoYWR5RE9NJiZ3aW5kb3c7Y29uc3QgS2U9ImNzcy1idWlsZCI7ZnVuY3Rpb24gWmUodCl7cmV0dXJuIiIhPT0oZnVuY3Rpb24gZSh0KXtpZih2b2lkIDAhPT1FZSlyZXR1cm4gRWU7aWYodm9pZCAwPT09dC5fX2Nzc0J1aWxkKXtjb25zdCBlPXQuZ2V0QXR0cmlidXRlKEtlKTtpZihlKXQuX19jc3NCdWlsZD1lO2Vsc2V7Y29uc3QgZT0oZnVuY3Rpb24gZSh0KXtjb25zdCBlPSJ0ZW1wbGF0ZSI9PT10LmxvY2FsTmFtZT90LmNvbnRlbnQuZmlyc3RDaGlsZDp0LmZpcnN0Q2hpbGQ7aWYoZSBpbnN0YW5jZW9mIENvbW1lbnQpe2NvbnN0IHQ9ZS50ZXh0Q29udGVudC50cmltKCkuc3BsaXQoIjoiKTtpZih0WzBdPT09S2UpcmV0dXJuIHRbMV19cmV0dXJuIiJ9KSh0KTsiIiE9PWUmJihmdW5jdGlvbiBuKHQpe2NvbnN0IGU9InRlbXBsYXRlIj09PXQubG9jYWxOYW1lP3QuY29udGVudC5maXJzdENoaWxkOnQuZmlyc3RDaGlsZDtlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZSl9Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovKSh0KSx0Ll9fY3NzQnVpbGQ9ZX19cmV0dXJuIHQuX19jc3NCdWlsZHx8IiJ9KSh0KX1mdW5jdGlvbiBKZSh0LGUpe2ZvcihsZXQgbiBpbiBlKW51bGw9PT1uP3Quc3R5bGUucmVtb3ZlUHJvcGVydHkobik6dC5zdHlsZS5zZXRQcm9wZXJ0eShuLGVbbl0pfWZ1bmN0aW9uIFFlKHQsZSl7Y29uc3Qgbj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KS5nZXRQcm9wZXJ0eVZhbHVlKGUpO3JldHVybiBuP24udHJpbSgpOiIifQovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dAogICAgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28KICAgIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpjb25zdCB0bj0vO1xzKi9tLGVuPS9eXHMqKGluaXRpYWwpfChpbmhlcml0KVxzKiQvLG5uPS9ccyohaW1wb3J0YW50LztjbGFzcyBybntjb25zdHJ1Y3Rvcigpe3RoaXMuX21hcD17fX1zZXQodCxlKXt0PXQudHJpbSgpLHRoaXMuX21hcFt0XT17cHJvcGVydGllczplLGRlcGVuZGFudHM6e319fWdldCh0KXtyZXR1cm4gdD10LnRyaW0oKSx0aGlzLl9tYXBbdF18fG51bGx9fWxldCBvbj1udWxsO2NsYXNzIGFue2NvbnN0cnVjdG9yKCl7dGhpcy5fY3VycmVudEVsZW1lbnQ9bnVsbCx0aGlzLl9tZWFzdXJlRWxlbWVudD1udWxsLHRoaXMuX21hcD1uZXcgcm59ZGV0ZWN0TWl4aW4odCl7cmV0dXJuKGZ1bmN0aW9uIGUodCl7Y29uc3QgZT1WZS50ZXN0KHQpfHxGZS50ZXN0KHQpO3JldHVybiBWZS5sYXN0SW5kZXg9MCxGZS5sYXN0SW5kZXg9MCxlfSkodCl9Z2F0aGVyU3R5bGVzKHQpe2NvbnN0IGU9KGZ1bmN0aW9uIG4odCl7Y29uc3QgZT1bXSxuPXQucXVlcnlTZWxlY3RvckFsbCgic3R5bGUiKTtmb3IobGV0IHQ9MDt0PG4ubGVuZ3RoO3QrKyl7Y29uc3QgaT1uW3RdO1dlKGkpP1NlfHwoR2UoaSksaS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGkpKTooZS5wdXNoKGkudGV4dENvbnRlbnQpLGkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChpKSl9cmV0dXJuIGUuam9pbigiIikudHJpbSgpfSkodC5jb250ZW50KTtpZihlKXtjb25zdCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7cmV0dXJuIG4udGV4dENvbnRlbnQ9ZSx0LmNvbnRlbnQuaW5zZXJ0QmVmb3JlKG4sdC5jb250ZW50LmZpcnN0Q2hpbGQpLG59cmV0dXJuIG51bGx9dHJhbnNmb3JtVGVtcGxhdGUodCxlKXt2b2lkIDA9PT10Ll9nYXRoZXJlZFN0eWxlJiYodC5fZ2F0aGVyZWRTdHlsZT10aGlzLmdhdGhlclN0eWxlcyh0KSk7Y29uc3Qgbj10Ll9nYXRoZXJlZFN0eWxlO3JldHVybiBuP3RoaXMudHJhbnNmb3JtU3R5bGUobixlKTpudWxsfXRyYW5zZm9ybVN0eWxlKHQsZT0iIil7bGV0IG49WWUodCk7cmV0dXJuIHRoaXMudHJhbnNmb3JtUnVsZXMobixlKSx0LnRleHRDb250ZW50PXFlKG4pLG59dHJhbnNmb3JtQ3VzdG9tU3R5bGUodCl7bGV0IGU9WWUodCk7cmV0dXJuIFhlKGUsKHQ9PnsiOnJvb3QiPT09dC5zZWxlY3RvciYmKHQuc2VsZWN0b3I9Imh0bWwiKSx0aGlzLnRyYW5zZm9ybVJ1bGUodCl9KSksdC50ZXh0Q29udGVudD1xZShlKSxlfXRyYW5zZm9ybVJ1bGVzKHQsZSl7dGhpcy5fY3VycmVudEVsZW1lbnQ9ZSxYZSh0LCh0PT57dGhpcy50cmFuc2Zvcm1SdWxlKHQpfSkpLHRoaXMuX2N1cnJlbnRFbGVtZW50PW51bGx9dHJhbnNmb3JtUnVsZSh0KXt0LmNzc1RleHQ9dGhpcy50cmFuc2Zvcm1Dc3NUZXh0KHQucGFyc2VkQ3NzVGV4dCx0KSwiOnJvb3QiPT09dC5zZWxlY3RvciYmKHQuc2VsZWN0b3I9Ijpob3N0ID4gKiIpfXRyYW5zZm9ybUNzc1RleHQodCxlKXtyZXR1cm4gdD10LnJlcGxhY2UoRmUsKCh0LG4saSxyKT0+dGhpcy5fcHJvZHVjZUNzc1Byb3BlcnRpZXModCxuLGkscixlKSkpLHRoaXMuX2NvbnN1bWVDc3NQcm9wZXJ0aWVzKHQsZSl9X2dldEluaXRpYWxWYWx1ZUZvclByb3BlcnR5KHQpe3JldHVybiB0aGlzLl9tZWFzdXJlRWxlbWVudHx8KHRoaXMuX21lYXN1cmVFbGVtZW50PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm1ldGEiKSx0aGlzLl9tZWFzdXJlRWxlbWVudC5zZXRBdHRyaWJ1dGUoImFwcGx5LXNoaW0tbWVhc3VyZSIsIiIpLHRoaXMuX21lYXN1cmVFbGVtZW50LnN0eWxlLmFsbD0iaW5pdGlhbCIsZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh0aGlzLl9tZWFzdXJlRWxlbWVudCkpLHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuX21lYXN1cmVFbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKHQpfV9mYWxsYmFja3NGcm9tUHJldmlvdXNSdWxlcyh0KXtsZXQgZT10O2Zvcig7ZS5wYXJlbnQ7KWU9ZS5wYXJlbnQ7Y29uc3Qgbj17fTtsZXQgaT0hMTtyZXR1cm4gWGUoZSwoZT0+e2k9aXx8ZT09PXQsaXx8ZS5zZWxlY3Rvcj09PXQuc2VsZWN0b3ImJk9iamVjdC5hc3NpZ24obix0aGlzLl9jc3NUZXh0VG9NYXAoZS5wYXJzZWRDc3NUZXh0KSl9KSksbn1fY29uc3VtZUNzc1Byb3BlcnRpZXModCxlKXtsZXQgbj1udWxsO2Zvcig7bj1WZS5leGVjKHQpOyl7bGV0IGk9blswXSxyPW5bMV0sbz1uLmluZGV4LGE9bytpLmluZGV4T2YoIkBhcHBseSIpLHM9bytpLmxlbmd0aCxsPXQuc2xpY2UoMCxhKSxjPXQuc2xpY2UocyksdT1lP3RoaXMuX2ZhbGxiYWNrc0Zyb21QcmV2aW91c1J1bGVzKGUpOnt9O09iamVjdC5hc3NpZ24odSx0aGlzLl9jc3NUZXh0VG9NYXAobCkpO2xldCBoPXRoaXMuX2F0QXBwbHlUb0Nzc1Byb3BlcnRpZXMocix1KTt0PWAke2x9JHtofSR7Y31gLFZlLmxhc3RJbmRleD1vK2gubGVuZ3RofXJldHVybiB0fV9hdEFwcGx5VG9Dc3NQcm9wZXJ0aWVzKHQsZSl7dD10LnJlcGxhY2UodG4sIiIpO2xldCBuPVtdLGk9dGhpcy5fbWFwLmdldCh0KTtpZihpfHwodGhpcy5fbWFwLnNldCh0LHt9KSxpPXRoaXMuX21hcC5nZXQodCkpLGkpe2xldCByLG8sYTt0aGlzLl9jdXJyZW50RWxlbWVudCYmKGkuZGVwZW5kYW50c1t0aGlzLl9jdXJyZW50RWxlbWVudF09ITApO2NvbnN0IHM9aS5wcm9wZXJ0aWVzO2ZvcihyIGluIHMpYT1lJiZlW3JdLG89W3IsIjogdmFyKCIsdCwiXy1fIixyXSxhJiZvLnB1c2goIiwiLGEucmVwbGFjZShubiwiIikpLG8ucHVzaCgiKSIpLG5uLnRlc3Qoc1tyXSkmJm8ucHVzaCgiICFpbXBvcnRhbnQiKSxuLnB1c2goby5qb2luKCIiKSl9cmV0dXJuIG4uam9pbigiOyAiKX1fcmVwbGFjZUluaXRpYWxPckluaGVyaXQodCxlKXtsZXQgbj1lbi5leGVjKGUpO3JldHVybiBuJiYoZT1uWzFdP3RoaXMuX2dldEluaXRpYWxWYWx1ZUZvclByb3BlcnR5KHQpOiJhcHBseS1zaGltLWluaGVyaXQiKSxlfV9jc3NUZXh0VG9NYXAodCxlPSExKXtsZXQgbixpLHI9dC5zcGxpdCgiOyIpLG89e307Zm9yKGxldCB0LGEscz0wO3M8ci5sZW5ndGg7cysrKXQ9cltzXSx0JiYoYT10LnNwbGl0KCI6IiksYS5sZW5ndGg+MSYmKG49YVswXS50cmltKCksaT1hLnNsaWNlKDEpLmpvaW4oIjoiKSxlJiYoaT10aGlzLl9yZXBsYWNlSW5pdGlhbE9ySW5oZXJpdChuLGkpKSxvW25dPWkpKTtyZXR1cm4gb31faW52YWxpZGF0ZU1peGluRW50cnkodCl7aWYob24pZm9yKGxldCBlIGluIHQuZGVwZW5kYW50cyllIT09dGhpcy5fY3VycmVudEVsZW1lbnQmJm9uKGUpfV9wcm9kdWNlQ3NzUHJvcGVydGllcyh0LGUsbixpLHIpe2lmKG4mJiRlKG4sKCh0LGUpPT57ZSYmdGhpcy5fbWFwLmdldChlKSYmKGk9YEBhcHBseSAke2V9O2ApfSkpLCFpKXJldHVybiB0O2xldCBvPXRoaXMuX2NvbnN1bWVDc3NQcm9wZXJ0aWVzKCIiK2ksciksYT10LnNsaWNlKDAsdC5pbmRleE9mKCItLSIpKSxzPXRoaXMuX2Nzc1RleHRUb01hcChvLCEwKSxsPXMsYz10aGlzLl9tYXAuZ2V0KGUpLHU9YyYmYy5wcm9wZXJ0aWVzO3U/bD1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUodSkscyk6dGhpcy5fbWFwLnNldChlLGwpO2xldCBoLGQscD1bXSxmPSExO2ZvcihoIGluIGwpZD1zW2hdLHZvaWQgMD09PWQmJihkPSJpbml0aWFsIiksdSYmIShoIGluIHUpJiYoZj0hMCkscC5wdXNoKGAke2V9Xy1fJHtofTogJHtkfWApO3JldHVybiBmJiZ0aGlzLl9pbnZhbGlkYXRlTWl4aW5FbnRyeShjKSxjJiYoYy5wcm9wZXJ0aWVzPWwpLG4mJihhPWAke3R9OyR7YX1gKSxgJHthfSR7cC5qb2luKCI7ICIpfTtgfX1hbi5wcm90b3R5cGUuZGV0ZWN0TWl4aW49YW4ucHJvdG90eXBlLmRldGVjdE1peGluLGFuLnByb3RvdHlwZS50cmFuc2Zvcm1TdHlsZT1hbi5wcm90b3R5cGUudHJhbnNmb3JtU3R5bGUsYW4ucHJvdG90eXBlLnRyYW5zZm9ybUN1c3RvbVN0eWxlPWFuLnByb3RvdHlwZS50cmFuc2Zvcm1DdXN0b21TdHlsZSxhbi5wcm90b3R5cGUudHJhbnNmb3JtUnVsZXM9YW4ucHJvdG90eXBlLnRyYW5zZm9ybVJ1bGVzLGFuLnByb3RvdHlwZS50cmFuc2Zvcm1SdWxlPWFuLnByb3RvdHlwZS50cmFuc2Zvcm1SdWxlLGFuLnByb3RvdHlwZS50cmFuc2Zvcm1UZW1wbGF0ZT1hbi5wcm90b3R5cGUudHJhbnNmb3JtVGVtcGxhdGUsYW4ucHJvdG90eXBlLl9zZXBhcmF0b3I9Il8tXyIsT2JqZWN0LmRlZmluZVByb3BlcnR5KGFuLnByb3RvdHlwZSwiaW52YWxpZENhbGxiYWNrIix7Z2V0OigpPT5vbixzZXQodCl7b249dH19KTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KY29uc3Qgc249e30sbG49Il9hcHBseVNoaW1DdXJyZW50VmVyc2lvbiIsY249Il9hcHBseVNoaW1OZXh0VmVyc2lvbiIsdW49Il9hcHBseVNoaW1WYWxpZGF0aW5nVmVyc2lvbiIsaG49UHJvbWlzZS5yZXNvbHZlKCk7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovZnVuY3Rpb24gZG4odCl7bGV0IGU9c25bdF07ZSYmKGZ1bmN0aW9uIG4odCl7dFtsbl09dFtsbl18fDAsdFt1bl09dFt1bl18fDAsdFtjbl09KHRbY25dfHwwKSsxfSkoZSl9ZnVuY3Rpb24gcG4odCl7cmV0dXJuIHRbbG5dPT09dFtjbl19Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCmxldCBmbixtbj1udWxsLGduPXdpbmRvdy5IVE1MSW1wb3J0cyYmd2luZG93LkhUTUxJbXBvcnRzLndoZW5SZWFkeXx8bnVsbDtmdW5jdGlvbiBfbih0KXtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKGZ1bmN0aW9uKCl7Z24/Z24odCk6KG1ufHwobW49bmV3IFByb21pc2UoKHQ9Pntmbj10fSkpLCJjb21wbGV0ZSI9PT1kb2N1bWVudC5yZWFkeVN0YXRlP2ZuKCk6ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicmVhZHlzdGF0ZWNoYW5nZSIsKCgpPT57ImNvbXBsZXRlIj09PWRvY3VtZW50LnJlYWR5U3RhdGUmJmZuKCl9KSkpLG1uLnRoZW4oKGZ1bmN0aW9uKCl7dCYmdCgpfSkpKX0pKX0KLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi9jb25zdCB5bj0iX19zZWVuQnlTaGFkeUNTUyIsdm49Il9fc2hhZHlDU1NDYWNoZWRTdHlsZSI7bGV0IGJuPW51bGwseG49bnVsbDtjbGFzcyB3bntjb25zdHJ1Y3Rvcigpe3RoaXMuY3VzdG9tU3R5bGVzPVtdLHRoaXMuZW5xdWV1ZWQ9ITEsX24oKCgpPT57d2luZG93LlNoYWR5Q1NTLmZsdXNoQ3VzdG9tU3R5bGVzJiZ3aW5kb3cuU2hhZHlDU1MuZmx1c2hDdXN0b21TdHlsZXMoKX0pKX1lbnF1ZXVlRG9jdW1lbnRWYWxpZGF0aW9uKCl7IXRoaXMuZW5xdWV1ZWQmJnhuJiYodGhpcy5lbnF1ZXVlZD0hMCxfbih4bikpfWFkZEN1c3RvbVN0eWxlKHQpe3RbeW5dfHwodFt5bl09ITAsdGhpcy5jdXN0b21TdHlsZXMucHVzaCh0KSx0aGlzLmVucXVldWVEb2N1bWVudFZhbGlkYXRpb24oKSl9Z2V0U3R5bGVGb3JDdXN0b21TdHlsZSh0KXtpZih0W3ZuXSlyZXR1cm4gdFt2bl07bGV0IGU7cmV0dXJuIGU9dC5nZXRTdHlsZT90LmdldFN0eWxlKCk6dCxlfXByb2Nlc3NTdHlsZXMoKXtjb25zdCB0PXRoaXMuY3VzdG9tU3R5bGVzO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKXtjb25zdCBuPXRbZV07aWYoblt2bl0pY29udGludWU7Y29uc3QgaT10aGlzLmdldFN0eWxlRm9yQ3VzdG9tU3R5bGUobik7aWYoaSl7Y29uc3QgdD1pLl9fYXBwbGllZEVsZW1lbnR8fGk7Ym4mJmJuKHQpLG5bdm5dPXR9fXJldHVybiB0fX13bi5wcm90b3R5cGUuYWRkQ3VzdG9tU3R5bGU9d24ucHJvdG90eXBlLmFkZEN1c3RvbVN0eWxlLHduLnByb3RvdHlwZS5nZXRTdHlsZUZvckN1c3RvbVN0eWxlPXduLnByb3RvdHlwZS5nZXRTdHlsZUZvckN1c3RvbVN0eWxlLHduLnByb3RvdHlwZS5wcm9jZXNzU3R5bGVzPXduLnByb3RvdHlwZS5wcm9jZXNzU3R5bGVzLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHduLnByb3RvdHlwZSx7dHJhbnNmb3JtQ2FsbGJhY2s6e2dldDooKT0+Ym4sc2V0KHQpe2JuPXR9fSx2YWxpZGF0ZUNhbGxiYWNrOntnZXQ6KCk9PnhuLHNldCh0KXtsZXQgZT0hMTt4bnx8KGU9ITApLHhuPXQsZSYmdGhpcy5lbnF1ZXVlRG9jdW1lbnRWYWxpZGF0aW9uKCl9fX0pOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dAogICAgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28KICAgIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpjb25zdCBTbj1uZXcgYW47Y2xhc3MgTW57Y29uc3RydWN0b3IoKXt0aGlzLmN1c3RvbVN0eWxlSW50ZXJmYWNlPW51bGwsU24uaW52YWxpZENhbGxiYWNrPWRufWVuc3VyZSgpe3RoaXMuY3VzdG9tU3R5bGVJbnRlcmZhY2V8fHdpbmRvdy5TaGFkeUNTUy5DdXN0b21TdHlsZUludGVyZmFjZSYmKHRoaXMuY3VzdG9tU3R5bGVJbnRlcmZhY2U9d2luZG93LlNoYWR5Q1NTLkN1c3RvbVN0eWxlSW50ZXJmYWNlLHRoaXMuY3VzdG9tU3R5bGVJbnRlcmZhY2UudHJhbnNmb3JtQ2FsbGJhY2s9dD0+e1NuLnRyYW5zZm9ybUN1c3RvbVN0eWxlKHQpfSx0aGlzLmN1c3RvbVN0eWxlSW50ZXJmYWNlLnZhbGlkYXRlQ2FsbGJhY2s9KCk9PntyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCgpPT57dGhpcy5jdXN0b21TdHlsZUludGVyZmFjZS5lbnF1ZXVlZCYmdGhpcy5mbHVzaEN1c3RvbVN0eWxlcygpfSkpfSl9cHJlcGFyZVRlbXBsYXRlKHQsZSl7aWYodGhpcy5lbnN1cmUoKSxaZSh0KSlyZXR1cm47c25bZV09dDtsZXQgbj1Tbi50cmFuc2Zvcm1UZW1wbGF0ZSh0LGUpO3QuX3N0eWxlQXN0PW59Zmx1c2hDdXN0b21TdHlsZXMoKXtpZih0aGlzLmVuc3VyZSgpLCF0aGlzLmN1c3RvbVN0eWxlSW50ZXJmYWNlKXJldHVybjtsZXQgdD10aGlzLmN1c3RvbVN0eWxlSW50ZXJmYWNlLnByb2Nlc3NTdHlsZXMoKTtpZih0aGlzLmN1c3RvbVN0eWxlSW50ZXJmYWNlLmVucXVldWVkKXtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKyl7bGV0IG49dGhpcy5jdXN0b21TdHlsZUludGVyZmFjZS5nZXRTdHlsZUZvckN1c3RvbVN0eWxlKHRbZV0pO24mJlNuLnRyYW5zZm9ybUN1c3RvbVN0eWxlKG4pfXRoaXMuY3VzdG9tU3R5bGVJbnRlcmZhY2UuZW5xdWV1ZWQ9ITF9fXN0eWxlU3VidHJlZSh0LGUpe2lmKHRoaXMuZW5zdXJlKCksZSYmSmUodCxlKSx0LnNoYWRvd1Jvb3Qpe3RoaXMuc3R5bGVFbGVtZW50KHQpO2xldCBlPXQuc2hhZG93Um9vdC5jaGlsZHJlbnx8dC5zaGFkb3dSb290LmNoaWxkTm9kZXM7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0KyspdGhpcy5zdHlsZVN1YnRyZWUoZVt0XSl9ZWxzZXtsZXQgZT10LmNoaWxkcmVufHx0LmNoaWxkTm9kZXM7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0KyspdGhpcy5zdHlsZVN1YnRyZWUoZVt0XSl9fXN0eWxlRWxlbWVudCh0KXt0aGlzLmVuc3VyZSgpO2xldHtpczplfT0oZnVuY3Rpb24gbih0KXtsZXQgZT10LmxvY2FsTmFtZSxuPSIiLGk9IiI7cmV0dXJuIGU/ZS5pbmRleE9mKCItIik+LTE/bj1lOihpPWUsbj10LmdldEF0dHJpYnV0ZSYmdC5nZXRBdHRyaWJ1dGUoImlzIil8fCIiKToobj10LmlzLGk9dC5leHRlbmRzKSx7aXM6bix0eXBlRXh0ZW5zaW9uOml9fSkodCksaT1zbltlXTtpZigoIWl8fCFaZShpKSkmJmkmJiFwbihpKSl7KGZ1bmN0aW9uIHIodCl7cmV0dXJuIXBuKHQpJiZ0W3VuXT09PXRbY25dfSkoaSl8fCh0aGlzLnByZXBhcmVUZW1wbGF0ZShpLGUpLChmdW5jdGlvbiBvKHQpe3RbdW5dPXRbY25dLHQuX3ZhbGlkYXRpbmd8fCh0Ll92YWxpZGF0aW5nPSEwLGhuLnRoZW4oKGZ1bmN0aW9uKCl7dFtsbl09dFtjbl0sdC5fdmFsaWRhdGluZz0hMX0pKSl9KShpKSk7bGV0IG49dC5zaGFkb3dSb290O2lmKG4pe2xldCB0PW4ucXVlcnlTZWxlY3Rvcigic3R5bGUiKTt0JiYodC5fX2Nzc1J1bGVzPWkuX3N0eWxlQXN0LHQudGV4dENvbnRlbnQ9cWUoaS5fc3R5bGVBc3QpKX19fXN0eWxlRG9jdW1lbnQodCl7dGhpcy5lbnN1cmUoKSx0aGlzLnN0eWxlU3VidHJlZShkb2N1bWVudC5ib2R5LHQpfX1pZighd2luZG93LlNoYWR5Q1NTfHwhd2luZG93LlNoYWR5Q1NTLlNjb3BpbmdTaGltKXtjb25zdCB0PW5ldyBNbjtsZXQgZT13aW5kb3cuU2hhZHlDU1MmJndpbmRvdy5TaGFkeUNTUy5DdXN0b21TdHlsZUludGVyZmFjZTt3aW5kb3cuU2hhZHlDU1M9e3ByZXBhcmVUZW1wbGF0ZShlLG4saSl7dC5mbHVzaEN1c3RvbVN0eWxlcygpLHQucHJlcGFyZVRlbXBsYXRlKGUsbil9LHByZXBhcmVUZW1wbGF0ZVN0eWxlcyh0LGUsbil7d2luZG93LlNoYWR5Q1NTLnByZXBhcmVUZW1wbGF0ZSh0LGUsbil9LHByZXBhcmVUZW1wbGF0ZURvbSh0LGUpe30sc3R5bGVTdWJ0cmVlKGUsbil7dC5mbHVzaEN1c3RvbVN0eWxlcygpLHQuc3R5bGVTdWJ0cmVlKGUsbil9LHN0eWxlRWxlbWVudChlKXt0LmZsdXNoQ3VzdG9tU3R5bGVzKCksdC5zdHlsZUVsZW1lbnQoZSl9LHN0eWxlRG9jdW1lbnQoZSl7dC5mbHVzaEN1c3RvbVN0eWxlcygpLHQuc3R5bGVEb2N1bWVudChlKX0sZ2V0Q29tcHV0ZWRTdHlsZVZhbHVlOih0LGUpPT5RZSh0LGUpLGZsdXNoQ3VzdG9tU3R5bGVzKCl7dC5mbHVzaEN1c3RvbVN0eWxlcygpfSxuYXRpdmVDc3M6QWUsbmF0aXZlU2hhZG93OlNlLGNzc0J1aWxkOkVlLGRpc2FibGVSdW50aW1lOkNlfSxlJiYod2luZG93LlNoYWR5Q1NTLkN1c3RvbVN0eWxlSW50ZXJmYWNlPWUpfXdpbmRvdy5TaGFkeUNTUy5BcHBseVNoaW09U247Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCmNsYXNzIEVue2NvbnN0cnVjdG9yKCl7dGhpcy5fYXN5bmNNb2R1bGU9bnVsbCx0aGlzLl9jYWxsYmFjaz1udWxsLHRoaXMuX3RpbWVyPW51bGx9c2V0Q29uZmlnKHQsZSl7dGhpcy5fYXN5bmNNb2R1bGU9dCx0aGlzLl9jYWxsYmFjaz1lLHRoaXMuX3RpbWVyPXRoaXMuX2FzeW5jTW9kdWxlLnJ1bigoKCk9Pnt0aGlzLl90aW1lcj1udWxsLFRuLmRlbGV0ZSh0aGlzKSx0aGlzLl9jYWxsYmFjaygpfSkpfWNhbmNlbCgpe3RoaXMuaXNBY3RpdmUoKSYmKHRoaXMuX2NhbmNlbEFzeW5jKCksVG4uZGVsZXRlKHRoaXMpKX1fY2FuY2VsQXN5bmMoKXt0aGlzLmlzQWN0aXZlKCkmJih0aGlzLl9hc3luY01vZHVsZS5jYW5jZWwodGhpcy5fdGltZXIpLHRoaXMuX3RpbWVyPW51bGwpfWZsdXNoKCl7dGhpcy5pc0FjdGl2ZSgpJiYodGhpcy5jYW5jZWwoKSx0aGlzLl9jYWxsYmFjaygpKX1pc0FjdGl2ZSgpe3JldHVybiBudWxsIT10aGlzLl90aW1lcn1zdGF0aWMgZGVib3VuY2UodCxlLG4pe3JldHVybiB0IGluc3RhbmNlb2YgRW4/dC5fY2FuY2VsQXN5bmMoKTp0PW5ldyBFbix0LnNldENvbmZpZyhlLG4pLHR9fWxldCBUbj1uZXcgU2V0O2NvbnN0IENuPWZ1bmN0aW9uKHQpe1RuLmFkZCh0KX0sQW49ZnVuY3Rpb24oKXtjb25zdCB0PUJvb2xlYW4oVG4uc2l6ZSk7cmV0dXJuIFRuLmZvckVhY2goKHQ9Pnt0cnl7dC5mbHVzaCgpfWNhdGNoKHQpe3NldFRpbWVvdXQoKCgpPT57dGhyb3cgdH0pKX19KSksdH07Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCmxldCBrbj0ic3RyaW5nIj09dHlwZW9mIGRvY3VtZW50LmhlYWQuc3R5bGUudG91Y2hBY3Rpb24sTG49Il9fcG9seW1lckdlc3R1cmVzIixQbj0iX19wb2x5bWVyR2VzdHVyZXNIYW5kbGVkIixObj0iX19wb2x5bWVyR2VzdHVyZXNUb3VjaEFjdGlvbiIsSW49WyJtb3VzZWRvd24iLCJtb3VzZW1vdmUiLCJtb3VzZXVwIiwiY2xpY2siXSxPbj1bMCwxLDQsMl0sUm49KGZ1bmN0aW9uKCl7dHJ5e3JldHVybiAxPT09bmV3IE1vdXNlRXZlbnQoInRlc3QiLHtidXR0b25zOjF9KS5idXR0b25zfWNhdGNoKHQpe3JldHVybiExfX0pKCk7ZnVuY3Rpb24gem4odCl7cmV0dXJuIEluLmluZGV4T2YodCk+LTF9bGV0IERuPSExO2Z1bmN0aW9uIEJuKHQpe2lmKCF6bih0KSYmInRvdWNoZW5kIiE9PXQpcmV0dXJuIGtuJiZEbiYmdj97cGFzc2l2ZTohMH06dm9pZCAwfSEoZnVuY3Rpb24oKXt0cnl7bGV0IHQ9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJwYXNzaXZlIix7Z2V0KCl7RG49ITB9fSk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInRlc3QiLG51bGwsdCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRlc3QiLG51bGwsdCl9Y2F0Y2godCl7fX0pKCk7bGV0IEhuPW5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQKD86W29hXWR8aG9uZSl8QW5kcm9pZC8pO2NvbnN0IEZuPVtdLFZuPXtidXR0b246ITAsaW5wdXQ6ITAsa2V5Z2VuOiEwLG1ldGVyOiEwLG91dHB1dDohMCx0ZXh0YXJlYTohMCxwcm9ncmVzczohMCxzZWxlY3Q6ITB9LFVuPXtidXR0b246ITAsY29tbWFuZDohMCxmaWVsZHNldDohMCxpbnB1dDohMCxrZXlnZW46ITAsb3B0Z3JvdXA6ITAsb3B0aW9uOiEwLHNlbGVjdDohMCx0ZXh0YXJlYTohMH07ZnVuY3Rpb24gam4odCl7bGV0IGU9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodC5sYWJlbHN8fFtdKTtpZighZS5sZW5ndGgpe2U9W107bGV0IG49dC5nZXRSb290Tm9kZSgpO2lmKHQuaWQpe2xldCBpPW4ucXVlcnlTZWxlY3RvckFsbChgbGFiZWxbZm9yID0gJHt0LmlkfV1gKTtmb3IobGV0IHQ9MDt0PGkubGVuZ3RoO3QrKyllLnB1c2goaVt0XSl9fXJldHVybiBlfWxldCBHbj1mdW5jdGlvbih0KXtsZXQgZT10LnNvdXJjZUNhcGFiaWxpdGllcztpZigoIWV8fGUuZmlyZXNUb3VjaEV2ZW50cykmJih0W1BuXT17c2tpcDohMH0sImNsaWNrIj09PXQudHlwZSkpe2xldCBlPSExLG49Wm4odCk7Zm9yKGxldCB0PTA7dDxuLmxlbmd0aDt0Kyspe2lmKG5bdF0ubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSlpZigibGFiZWwiPT09blt0XS5sb2NhbE5hbWUpRm4ucHVzaChuW3RdKTtlbHNlIGlmKFZuW25bdF0ubG9jYWxOYW1lXSl7bGV0IGk9am4oblt0XSk7Zm9yKGxldCB0PTA7dDxpLmxlbmd0aDt0KyspZT1lfHxGbi5pbmRleE9mKGlbdF0pPi0xfWlmKG5bdF09PT1Zbi5tb3VzZS50YXJnZXQpcmV0dXJufWlmKGUpcmV0dXJuO3QucHJldmVudERlZmF1bHQoKSx0LnN0b3BQcm9wYWdhdGlvbigpfX07ZnVuY3Rpb24gV24odCl7bGV0IGU9SG4/WyJjbGljayJdOkluO2ZvcihsZXQgbixpPTA7aTxlLmxlbmd0aDtpKyspbj1lW2ldLHQ/KEZuLmxlbmd0aD0wLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIobixHbiwhMCkpOmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIobixHbiwhMCl9ZnVuY3Rpb24gcW4odCl7bGV0IGU9dC50eXBlO2lmKCF6bihlKSlyZXR1cm4hMTtpZigibW91c2Vtb3ZlIj09PWUpe2xldCBlPXZvaWQgMD09PXQuYnV0dG9ucz8xOnQuYnV0dG9ucztyZXR1cm4gdCBpbnN0YW5jZW9mIHdpbmRvdy5Nb3VzZUV2ZW50JiYhUm4mJihlPU9uW3Qud2hpY2hdfHwwKSxCb29sZWFuKDEmZSl9cmV0dXJuIDA9PT0odm9pZCAwPT09dC5idXR0b24/MDp0LmJ1dHRvbil9bGV0IFluPXttb3VzZTp7dGFyZ2V0Om51bGwsbW91c2VJZ25vcmVKb2I6bnVsbH0sdG91Y2g6e3g6MCx5OjAsaWQ6LTEsc2Nyb2xsRGVjaWRlZDohMX19O2Z1bmN0aW9uIFhuKHQsZSxuKXt0Lm1vdmVmbj1lLHQudXBmbj1uLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsZSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsbil9ZnVuY3Rpb24gJG4odCl7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix0Lm1vdmVmbiksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsdC51cGZuKSx0Lm1vdmVmbj1udWxsLHQudXBmbj1udWxsfWRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIiwoZnVuY3Rpb24gS24odCl7WW4ubW91c2UubW91c2VJZ25vcmVKb2J8fFduKCEwKSxZbi5tb3VzZS50YXJnZXQ9Wm4odClbMF0sWW4ubW91c2UubW91c2VJZ25vcmVKb2I9RW4uZGVib3VuY2UoWW4ubW91c2UubW91c2VJZ25vcmVKb2IsZ3QuYWZ0ZXIoMjUwMCksKGZ1bmN0aW9uKCl7V24oKSxZbi5tb3VzZS50YXJnZXQ9bnVsbCxZbi5tb3VzZS5tb3VzZUlnbm9yZUpvYj1udWxsfSkpfSksISFEbiYme3Bhc3NpdmU6ITB9KTtjb25zdCBabj13aW5kb3cuU2hhZHlET00mJndpbmRvdy5TaGFkeURPTS5ub1BhdGNoP3dpbmRvdy5TaGFkeURPTS5jb21wb3NlZFBhdGg6dD0+dC5jb21wb3NlZFBhdGgmJnQuY29tcG9zZWRQYXRoKCl8fFtdLEpuPXt9LFFuPVtdO2Z1bmN0aW9uIHRpKHQpe2NvbnN0IGU9Wm4odCk7cmV0dXJuIGUubGVuZ3RoPjA/ZVswXTp0LnRhcmdldH1mdW5jdGlvbiBlaSh0KXtsZXQgZSxuPXQudHlwZSxpPXQuY3VycmVudFRhcmdldFtMbl07aWYoIWkpcmV0dXJuO2xldCByPWlbbl07aWYocil7aWYoIXRbUG5dJiYodFtQbl09e30sInRvdWNoIj09PW4uc2xpY2UoMCw1KSkpe2xldCBlPSh0PXQpLmNoYW5nZWRUb3VjaGVzWzBdO2lmKCJ0b3VjaHN0YXJ0Ij09PW4mJjE9PT10LnRvdWNoZXMubGVuZ3RoJiYoWW4udG91Y2guaWQ9ZS5pZGVudGlmaWVyKSxZbi50b3VjaC5pZCE9PWUuaWRlbnRpZmllcilyZXR1cm47a258fCJ0b3VjaHN0YXJ0IiE9PW4mJiJ0b3VjaG1vdmUiIT09bnx8KGZ1bmN0aW9uIG8odCl7bGV0IGU9dC5jaGFuZ2VkVG91Y2hlc1swXSxuPXQudHlwZTtpZigidG91Y2hzdGFydCI9PT1uKVluLnRvdWNoLng9ZS5jbGllbnRYLFluLnRvdWNoLnk9ZS5jbGllbnRZLFluLnRvdWNoLnNjcm9sbERlY2lkZWQ9ITE7ZWxzZSBpZigidG91Y2htb3ZlIj09PW4pe2lmKFluLnRvdWNoLnNjcm9sbERlY2lkZWQpcmV0dXJuO1luLnRvdWNoLnNjcm9sbERlY2lkZWQ9ITA7bGV0IG49KGZ1bmN0aW9uIGkodCl7bGV0IGU9ImF1dG8iLG49Wm4odCk7Zm9yKGxldCB0LGk9MDtpPG4ubGVuZ3RoO2krKylpZih0PW5baV0sdFtObl0pe2U9dFtObl07YnJlYWt9cmV0dXJuIGV9KSh0KSxpPSExLHI9TWF0aC5hYnMoWW4udG91Y2gueC1lLmNsaWVudFgpLG89TWF0aC5hYnMoWW4udG91Y2gueS1lLmNsaWVudFkpO3QuY2FuY2VsYWJsZSYmKCJub25lIj09PW4/aT0hMDoicGFuLXgiPT09bj9pPW8+cjoicGFuLXkiPT09biYmKGk9cj5vKSksaT90LnByZXZlbnREZWZhdWx0KCk6YWkoInRyYWNrIil9fSkodCl9aWYoZT10W1BuXSwhZS5za2lwKXtmb3IobGV0IG4saT0wO2k8UW4ubGVuZ3RoO2krKyluPVFuW2ldLHJbbi5uYW1lXSYmIWVbbi5uYW1lXSYmbi5mbG93JiZuLmZsb3cuc3RhcnQuaW5kZXhPZih0LnR5cGUpPi0xJiZuLnJlc2V0JiZuLnJlc2V0KCk7Zm9yKGxldCBpLG89MDtvPFFuLmxlbmd0aDtvKyspaT1RbltvXSxyW2kubmFtZV0mJiFlW2kubmFtZV0mJihlW2kubmFtZV09ITAsaVtuXSh0KSl9fX1mdW5jdGlvbiBuaSh0LGUsbil7cmV0dXJuISFKbltlXSYmKChmdW5jdGlvbiBpKHQsZSxuKXtsZXQgaT1KbltlXSxyPWkuZGVwcyxvPWkubmFtZSxhPXRbTG5dO2F8fCh0W0xuXT1hPXt9KTtmb3IobGV0IGUsbixpPTA7aTxyLmxlbmd0aDtpKyspZT1yW2ldLEhuJiZ6bihlKSYmImNsaWNrIiE9PWV8fChuPWFbZV0sbnx8KGFbZV09bj17X2NvdW50OjB9KSwwPT09bi5fY291bnQmJnQuYWRkRXZlbnRMaXN0ZW5lcihlLGVpLEJuKGUpKSxuW29dPShuW29dfHwwKSsxLG4uX2NvdW50PShuLl9jb3VudHx8MCkrMSk7dC5hZGRFdmVudExpc3RlbmVyKGUsbiksaS50b3VjaEFjdGlvbiYmcmkodCxpLnRvdWNoQWN0aW9uKX0pKHQsZSxuKSwhMCl9ZnVuY3Rpb24gaWkodCl7UW4ucHVzaCh0KTtmb3IobGV0IGU9MDtlPHQuZW1pdHMubGVuZ3RoO2UrKylKblt0LmVtaXRzW2VdXT10fWZ1bmN0aW9uIHJpKHQsZSl7a24mJnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCYmdnQucnVuKCgoKT0+e3Quc3R5bGUudG91Y2hBY3Rpb249ZX0pKSx0W05uXT1lfWZ1bmN0aW9uIG9pKHQsZSxuKXtsZXQgaT1uZXcgRXZlbnQoZSx7YnViYmxlczohMCxjYW5jZWxhYmxlOiEwLGNvbXBvc2VkOiEwfSk7aWYoaS5kZXRhaWw9bixZKHQpLmRpc3BhdGNoRXZlbnQoaSksaS5kZWZhdWx0UHJldmVudGVkKXtsZXQgdD1uLnByZXZlbnRlcnx8bi5zb3VyY2VFdmVudDt0JiZ0LnByZXZlbnREZWZhdWx0JiZ0LnByZXZlbnREZWZhdWx0KCl9fWZ1bmN0aW9uIGFpKHQpe2xldCBlPShmdW5jdGlvbiBuKHQpe2ZvcihsZXQgZSxuPTA7bjxRbi5sZW5ndGg7bisrKXtlPVFuW25dO2ZvcihsZXQgbixpPTA7aTxlLmVtaXRzLmxlbmd0aDtpKyspaWYobj1lLmVtaXRzW2ldLG49PT10KXJldHVybiBlfXJldHVybiBudWxsfSkodCk7ZS5pbmZvJiYoZS5pbmZvLnByZXZlbnQ9ITApfWZ1bmN0aW9uIHNpKHQsZSxuLGkpe2UmJm9pKGUsdCx7eDpuLmNsaWVudFgseTpuLmNsaWVudFksc291cmNlRXZlbnQ6bixwcmV2ZW50ZXI6aSxwcmV2ZW50OmZ1bmN0aW9uKHQpe3JldHVybiBhaSh0KX19KX1mdW5jdGlvbiBsaSh0LGUsbil7aWYodC5wcmV2ZW50KXJldHVybiExO2lmKHQuc3RhcnRlZClyZXR1cm4hMDtsZXQgaT1NYXRoLmFicyh0LngtZSkscj1NYXRoLmFicyh0Lnktbik7cmV0dXJuIGk+PTV8fHI+PTV9ZnVuY3Rpb24gY2kodCxlLG4pe2lmKCFlKXJldHVybjtsZXQgaSxyPXQubW92ZXNbdC5tb3Zlcy5sZW5ndGgtMl0sbz10Lm1vdmVzW3QubW92ZXMubGVuZ3RoLTFdLGE9MDtyJiYoaT1vLngtci54LGE9by55LXIueSksb2koZSwidHJhY2siLHtzdGF0ZTp0LnN0YXRlLHg6bi5jbGllbnRYLHk6bi5jbGllbnRZLGR4Om8ueC10LngsZHk6by55LXQueSxkZHg6aSxkZHk6YSxzb3VyY2VFdmVudDpuLGhvdmVyOmZ1bmN0aW9uKCl7cmV0dXJuKGZ1bmN0aW9uIHQoZSxuKXtsZXQgaT1kb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KGUsbikscj1pO2Zvcig7ciYmci5zaGFkb3dSb290JiYhd2luZG93LlNoYWR5RE9NOyl7bGV0IHQ9cjtpZihyPXIuc2hhZG93Um9vdC5lbGVtZW50RnJvbVBvaW50KGUsbiksdD09PXIpYnJlYWs7ciYmKGk9cil9cmV0dXJuIGl9KShuLmNsaWVudFgsbi5jbGllbnRZKX19KX1mdW5jdGlvbiB1aSh0LGUsbil7bGV0IGk9TWF0aC5hYnMoZS5jbGllbnRYLXQueCkscj1NYXRoLmFicyhlLmNsaWVudFktdC55KSxvPXRpKG58fGUpOyFvfHxVbltvLmxvY2FsTmFtZV0mJm8uaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpfHwoaXNOYU4oaSl8fGlzTmFOKHIpfHxpPD0yNSYmcjw9MjV8fChmdW5jdGlvbiBhKHQpe2lmKCJjbGljayI9PT10LnR5cGUpe2lmKDA9PT10LmRldGFpbClyZXR1cm4hMDtsZXQgZT10aSh0KTtpZighZS5ub2RlVHlwZXx8ZS5ub2RlVHlwZSE9PU5vZGUuRUxFTUVOVF9OT0RFKXJldHVybiEwO2xldCBuPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaT10LnBhZ2VYLHI9dC5wYWdlWTtyZXR1cm4hKGk+PW4ubGVmdCYmaTw9bi5yaWdodCYmcj49bi50b3AmJnI8PW4uYm90dG9tKX1yZXR1cm4hMX0pKGUpKSYmKHQucHJldmVudHx8b2kobywidGFwIix7eDplLmNsaWVudFgseTplLmNsaWVudFksc291cmNlRXZlbnQ6ZSxwcmV2ZW50ZXI6bn0pKX1paSh7bmFtZToiZG93bnVwIixkZXBzOlsibW91c2Vkb3duIiwidG91Y2hzdGFydCIsInRvdWNoZW5kIl0sZmxvdzp7c3RhcnQ6WyJtb3VzZWRvd24iLCJ0b3VjaHN0YXJ0Il0sZW5kOlsibW91c2V1cCIsInRvdWNoZW5kIl19LGVtaXRzOlsiZG93biIsInVwIl0saW5mbzp7bW92ZWZuOm51bGwsdXBmbjpudWxsfSxyZXNldDpmdW5jdGlvbigpeyRuKHRoaXMuaW5mbyl9LG1vdXNlZG93bjpmdW5jdGlvbih0KXtpZighcW4odCkpcmV0dXJuO2xldCBlPXRpKHQpLG49dGhpcztYbih0aGlzLmluZm8sKGZ1bmN0aW9uIHQoaSl7cW4oaSl8fChzaSgidXAiLGUsaSksJG4obi5pbmZvKSl9KSwoZnVuY3Rpb24gdChpKXtxbihpKSYmc2koInVwIixlLGkpLCRuKG4uaW5mbyl9KSksc2koImRvd24iLGUsdCl9LHRvdWNoc3RhcnQ6ZnVuY3Rpb24odCl7c2koImRvd24iLHRpKHQpLHQuY2hhbmdlZFRvdWNoZXNbMF0sdCl9LHRvdWNoZW5kOmZ1bmN0aW9uKHQpe3NpKCJ1cCIsdGkodCksdC5jaGFuZ2VkVG91Y2hlc1swXSx0KX19KSxpaSh7bmFtZToidHJhY2siLHRvdWNoQWN0aW9uOiJub25lIixkZXBzOlsibW91c2Vkb3duIiwidG91Y2hzdGFydCIsInRvdWNobW92ZSIsInRvdWNoZW5kIl0sZmxvdzp7c3RhcnQ6WyJtb3VzZWRvd24iLCJ0b3VjaHN0YXJ0Il0sZW5kOlsibW91c2V1cCIsInRvdWNoZW5kIl19LGVtaXRzOlsidHJhY2siXSxpbmZvOnt4OjAseTowLHN0YXRlOiJzdGFydCIsc3RhcnRlZDohMSxtb3ZlczpbXSxhZGRNb3ZlOmZ1bmN0aW9uKHQpe3RoaXMubW92ZXMubGVuZ3RoPjImJnRoaXMubW92ZXMuc2hpZnQoKSx0aGlzLm1vdmVzLnB1c2godCl9LG1vdmVmbjpudWxsLHVwZm46bnVsbCxwcmV2ZW50OiExfSxyZXNldDpmdW5jdGlvbigpe3RoaXMuaW5mby5zdGF0ZT0ic3RhcnQiLHRoaXMuaW5mby5zdGFydGVkPSExLHRoaXMuaW5mby5tb3Zlcz1bXSx0aGlzLmluZm8ueD0wLHRoaXMuaW5mby55PTAsdGhpcy5pbmZvLnByZXZlbnQ9ITEsJG4odGhpcy5pbmZvKX0sbW91c2Vkb3duOmZ1bmN0aW9uKHQpe2lmKCFxbih0KSlyZXR1cm47bGV0IGU9dGkodCksbj10aGlzLGk9ZnVuY3Rpb24gdChpKXtsZXQgcj1pLmNsaWVudFgsbz1pLmNsaWVudFk7bGkobi5pbmZvLHIsbykmJihuLmluZm8uc3RhdGU9bi5pbmZvLnN0YXJ0ZWQ/Im1vdXNldXAiPT09aS50eXBlPyJlbmQiOiJ0cmFjayI6InN0YXJ0Iiwic3RhcnQiPT09bi5pbmZvLnN0YXRlJiZhaSgidGFwIiksbi5pbmZvLmFkZE1vdmUoe3g6cix5Om99KSxxbihpKXx8KG4uaW5mby5zdGF0ZT0iZW5kIiwkbihuLmluZm8pKSxlJiZjaShuLmluZm8sZSxpKSxuLmluZm8uc3RhcnRlZD0hMCl9O1huKHRoaXMuaW5mbyxpLChmdW5jdGlvbiB0KGUpe24uaW5mby5zdGFydGVkJiZpKGUpLCRuKG4uaW5mbyl9KSksdGhpcy5pbmZvLng9dC5jbGllbnRYLHRoaXMuaW5mby55PXQuY2xpZW50WX0sdG91Y2hzdGFydDpmdW5jdGlvbih0KXtsZXQgZT10LmNoYW5nZWRUb3VjaGVzWzBdO3RoaXMuaW5mby54PWUuY2xpZW50WCx0aGlzLmluZm8ueT1lLmNsaWVudFl9LHRvdWNobW92ZTpmdW5jdGlvbih0KXtsZXQgZT10aSh0KSxuPXQuY2hhbmdlZFRvdWNoZXNbMF0saT1uLmNsaWVudFgscj1uLmNsaWVudFk7bGkodGhpcy5pbmZvLGkscikmJigic3RhcnQiPT09dGhpcy5pbmZvLnN0YXRlJiZhaSgidGFwIiksdGhpcy5pbmZvLmFkZE1vdmUoe3g6aSx5OnJ9KSxjaSh0aGlzLmluZm8sZSxuKSx0aGlzLmluZm8uc3RhdGU9InRyYWNrIix0aGlzLmluZm8uc3RhcnRlZD0hMCl9LHRvdWNoZW5kOmZ1bmN0aW9uKHQpe2xldCBlPXRpKHQpLG49dC5jaGFuZ2VkVG91Y2hlc1swXTt0aGlzLmluZm8uc3RhcnRlZCYmKHRoaXMuaW5mby5zdGF0ZT0iZW5kIix0aGlzLmluZm8uYWRkTW92ZSh7eDpuLmNsaWVudFgseTpuLmNsaWVudFl9KSxjaSh0aGlzLmluZm8sZSxuKSl9fSksaWkoe25hbWU6InRhcCIsZGVwczpbIm1vdXNlZG93biIsImNsaWNrIiwidG91Y2hzdGFydCIsInRvdWNoZW5kIl0sZmxvdzp7c3RhcnQ6WyJtb3VzZWRvd24iLCJ0b3VjaHN0YXJ0Il0sZW5kOlsiY2xpY2siLCJ0b3VjaGVuZCJdfSxlbWl0czpbInRhcCJdLGluZm86e3g6TmFOLHk6TmFOLHByZXZlbnQ6ITF9LHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5pbmZvLng9TmFOLHRoaXMuaW5mby55PU5hTix0aGlzLmluZm8ucHJldmVudD0hMX0sbW91c2Vkb3duOmZ1bmN0aW9uKHQpe3FuKHQpJiYodGhpcy5pbmZvLng9dC5jbGllbnRYLHRoaXMuaW5mby55PXQuY2xpZW50WSl9LGNsaWNrOmZ1bmN0aW9uKHQpe3FuKHQpJiZ1aSh0aGlzLmluZm8sdCl9LHRvdWNoc3RhcnQ6ZnVuY3Rpb24odCl7Y29uc3QgZT10LmNoYW5nZWRUb3VjaGVzWzBdO3RoaXMuaW5mby54PWUuY2xpZW50WCx0aGlzLmluZm8ueT1lLmNsaWVudFl9LHRvdWNoZW5kOmZ1bmN0aW9uKHQpe3VpKHRoaXMuaW5mbyx0LmNoYW5nZWRUb3VjaGVzWzBdLHQpfX0pO2NvbnN0IGhpPXRpLGRpPUkoKHQ9PmNsYXNzIGV4dGVuZHMgdHtfYWRkRXZlbnRMaXN0ZW5lclRvTm9kZSh0LGUsbil7bmkodCxlLG4pfHxzdXBlci5fYWRkRXZlbnRMaXN0ZW5lclRvTm9kZSh0LGUsbil9X3JlbW92ZUV2ZW50TGlzdGVuZXJGcm9tTm9kZSh0LGUsbil7KGZ1bmN0aW9uIGkodCxlLG4pe3JldHVybiEhSm5bZV0mJigoZnVuY3Rpb24gaSh0LGUsbil7bGV0IGk9Sm5bZV0scj1pLmRlcHMsbz1pLm5hbWUsYT10W0xuXTtpZihhKWZvcihsZXQgZSxuLGk9MDtpPHIubGVuZ3RoO2krKyllPXJbaV0sbj1hW2VdLG4mJm5bb10mJihuW29dPShuW29dfHwxKS0xLG4uX2NvdW50PShuLl9jb3VudHx8MSktMSwwPT09bi5fY291bnQmJnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLGVpLEJuKGUpKSk7dC5yZW1vdmVFdmVudExpc3RlbmVyKGUsbil9KSh0LGUsbiksITApfSkodCxlLG4pfHxzdXBlci5fcmVtb3ZlRXZlbnRMaXN0ZW5lckZyb21Ob2RlKHQsZSxuKX19KSkscGk9Lzpob3N0XCg6ZGlyXCgobHRyfHJ0bClcKVwpL2csZmk9LyhbXHNcdy0jXC5cW1xdXCpdKik6ZGlyXCgobHRyfHJ0bClcKS9nLG1pPS86ZGlyXCgoPzpsdHJ8cnRsKVwpLyxnaT1Cb29sZWFuKHdpbmRvdy5TaGFkeURPTSYmd2luZG93LlNoYWR5RE9NLmluVXNlKSxfaT1bXTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi9sZXQgeWk9bnVsbCx2aT0iIjtmdW5jdGlvbiBiaSgpe3ZpPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5nZXRBdHRyaWJ1dGUoImRpciIpfWZ1bmN0aW9uIHhpKHQpe3QuX19hdXRvRGlyT3B0T3V0fHx0LnNldEF0dHJpYnV0ZSgiZGlyIix2aSl9ZnVuY3Rpb24gd2koKXtiaSgpLHZpPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5nZXRBdHRyaWJ1dGUoImRpciIpO2ZvcihsZXQgdD0wO3Q8X2kubGVuZ3RoO3QrKyl4aShfaVt0XSl9Y29uc3QgU2k9SSgodD0+e2dpfHx5aXx8KGJpKCkseWk9bmV3IE11dGF0aW9uT2JzZXJ2ZXIod2kpLHlpLm9ic2VydmUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHthdHRyaWJ1dGVzOiEwLGF0dHJpYnV0ZUZpbHRlcjpbImRpciJdfSkpO2NvbnN0IGU9TXQodCk7Y2xhc3MgbiBleHRlbmRzIGV7c3RhdGljIF9wcm9jZXNzU3R5bGVUZXh0KHQsbil7cmV0dXJuIHQ9ZS5fcHJvY2Vzc1N0eWxlVGV4dC5jYWxsKHRoaXMsdCxuKSwhZ2kmJm1pLnRlc3QodCkmJih0PXRoaXMuX3JlcGxhY2VEaXJJbkNzc1RleHQodCksdGhpcy5fX2FjdGl2YXRlRGlyPSEwKSx0fXN0YXRpYyBfcmVwbGFjZURpckluQ3NzVGV4dCh0KXtsZXQgZT10O3JldHVybiBlPWUucmVwbGFjZShwaSwnOmhvc3QoW2Rpcj0iJDEiXSknKSxlPWUucmVwbGFjZShmaSwnOmhvc3QoW2Rpcj0iJDIiXSkgJDEnKSxlfWNvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9fYXV0b0Rpck9wdE91dD0hMX1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5fX2F1dG9EaXJPcHRPdXQ9dGhpcy5oYXNBdHRyaWJ1dGUoImRpciIpfWNvbm5lY3RlZENhbGxiYWNrKCl7ZS5wcm90b3R5cGUuY29ubmVjdGVkQ2FsbGJhY2smJnN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5jb25zdHJ1Y3Rvci5fX2FjdGl2YXRlRGlyJiYoKGZ1bmN0aW9uIHQoKXt5aSYmeWkudGFrZVJlY29yZHMoKS5sZW5ndGgmJndpKCl9KSgpLF9pLnB1c2godGhpcykseGkodGhpcykpfWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7aWYoZS5wcm90b3R5cGUuZGlzY29ubmVjdGVkQ2FsbGJhY2smJnN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5jb25zdHJ1Y3Rvci5fX2FjdGl2YXRlRGlyKXtjb25zdCB0PV9pLmluZGV4T2YodGhpcyk7dD4tMSYmX2kuc3BsaWNlKHQsMSl9fX1yZXR1cm4gbi5fX2FjdGl2YXRlRGlyPSExLG59KSk7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovbGV0IE1pPSExLEVpPVtdLFRpPVtdO2Z1bmN0aW9uIENpKCl7TWk9ITAscmVxdWVzdEFuaW1hdGlvbkZyYW1lKChmdW5jdGlvbigpe01pPSExLChmdW5jdGlvbiB0KGUpe2Zvcig7ZS5sZW5ndGg7KUFpKGUuc2hpZnQoKSl9KShFaSksc2V0VGltZW91dCgoZnVuY3Rpb24oKXshKGZ1bmN0aW9uIHQoZSl7Zm9yKGxldCB0PTAsbj1lLmxlbmd0aDt0PG47dCsrKUFpKGUuc2hpZnQoKSl9KShUaSl9KSl9KSl9ZnVuY3Rpb24gQWkodCl7Y29uc3QgZT10WzBdLG49dFsxXSxpPXRbMl07dHJ5e24uYXBwbHkoZSxpKX1jYXRjaCh0KXtzZXRUaW1lb3V0KCgoKT0+e3Rocm93IHR9KSl9fWZ1bmN0aW9uIGtpKHQsZSxuKXtNaXx8Q2koKSxUaS5wdXNoKFt0LGUsbl0pfQovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dAogICAgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28KICAgIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqL2Z1bmN0aW9uIExpKCl7ZG9jdW1lbnQuYm9keS5yZW1vdmVBdHRyaWJ1dGUoInVucmVzb2x2ZWQiKX0KLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KZnVuY3Rpb24gUGkodCxlLG4pe3JldHVybntpbmRleDp0LHJlbW92ZWQ6ZSxhZGRlZENvdW50Om59fWZ1bmN0aW9uIE5pKHQsZSl7cmV0dXJuKGZ1bmN0aW9uIG4odCxlLGkscixvLGEpe2xldCBzLGw9MCxjPTAsdT1NYXRoLm1pbihpLWUsYS1vKTtpZigwPT1lJiYwPT1vJiYobD0oZnVuY3Rpb24gaCh0LGUsbil7Zm9yKGxldCBpPTA7aTxuO2krKylpZighSWkodFtpXSxlW2ldKSlyZXR1cm4gaTtyZXR1cm4gbn0pKHQscix1KSksaT09dC5sZW5ndGgmJmE9PXIubGVuZ3RoJiYoYz0oZnVuY3Rpb24gZCh0LGUsbil7bGV0IGk9dC5sZW5ndGgscj1lLmxlbmd0aCxvPTA7Zm9yKDtvPG4mJklpKHRbLS1pXSxlWy0tcl0pOylvKys7cmV0dXJuIG99KSh0LHIsdS1sKSksbys9bCxhLT1jLChpLT1jKS0oZSs9bCk9PTAmJmEtbz09MClyZXR1cm5bXTtpZihlPT1pKXtmb3Iocz1QaShlLFtdLDApO288YTspcy5yZW1vdmVkLnB1c2gocltvKytdKTtyZXR1cm5bc119aWYobz09YSlyZXR1cm5bUGkoZSxbXSxpLWUpXTtsZXQgcD0oZnVuY3Rpb24gbSh0KXtsZXQgZT10Lmxlbmd0aC0xLG49dFswXS5sZW5ndGgtMSxpPXRbZV1bbl0scj1bXTtmb3IoO2U+MHx8bj4wOyl7aWYoMD09ZSl7ci5wdXNoKDIpLG4tLTtjb250aW51ZX1pZigwPT1uKXtyLnB1c2goMyksZS0tO2NvbnRpbnVlfWxldCBvLGE9dFtlLTFdW24tMV0scz10W2UtMV1bbl0sbD10W2VdW24tMV07bz1zPGw/czxhP3M6YTpsPGE/bDphLG89PWE/KGE9PWk/ci5wdXNoKDApOihyLnB1c2goMSksaT1hKSxlLS0sbi0tKTpvPT1zPyhyLnB1c2goMyksZS0tLGk9cyk6KHIucHVzaCgyKSxuLS0saT1sKX1yZXR1cm4gci5yZXZlcnNlKCkscn0pKChmdW5jdGlvbiBmKHQsZSxuLGkscixvKXtsZXQgYT1vLXIrMSxzPW4tZSsxLGw9bmV3IEFycmF5KGEpO2ZvcihsZXQgdD0wO3Q8YTt0KyspbFt0XT1uZXcgQXJyYXkocyksbFt0XVswXT10O2ZvcihsZXQgdD0wO3Q8czt0KyspbFswXVt0XT10O2ZvcihsZXQgbj0xO248YTtuKyspZm9yKGxldCBvPTE7bzxzO28rKylpZihJaSh0W2Urby0xXSxpW3Irbi0xXSkpbFtuXVtvXT1sW24tMV1bby0xXTtlbHNle2xldCB0PWxbbi0xXVtvXSsxLGU9bFtuXVtvLTFdKzE7bFtuXVtvXT10PGU/dDplfXJldHVybiBsfSkodCxlLGkscixvLGEpKTtzPXZvaWQgMDtsZXQgZz1bXSxfPWUseT1vO2ZvcihsZXQgdD0wO3Q8cC5sZW5ndGg7dCsrKXN3aXRjaChwW3RdKXtjYXNlIDA6cyYmKGcucHVzaChzKSxzPXZvaWQgMCksXysrLHkrKzticmVhaztjYXNlIDE6c3x8KHM9UGkoXyxbXSwwKSkscy5hZGRlZENvdW50KyssXysrLHMucmVtb3ZlZC5wdXNoKHJbeV0pLHkrKzticmVhaztjYXNlIDI6c3x8KHM9UGkoXyxbXSwwKSkscy5hZGRlZENvdW50KyssXysrO2JyZWFrO2Nhc2UgMzpzfHwocz1QaShfLFtdLDApKSxzLnJlbW92ZWQucHVzaChyW3ldKSx5Kyt9cmV0dXJuIHMmJmcucHVzaChzKSxnfSkodCwwLHQubGVuZ3RoLGUsMCxlLmxlbmd0aCl9ZnVuY3Rpb24gSWkodCxlKXtyZXR1cm4gdD09PWV9Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovZnVuY3Rpb24gT2kodCl7cmV0dXJuInNsb3QiPT09dC5sb2NhbE5hbWV9ImludGVyYWN0aXZlIj09PWRvY3VtZW50LnJlYWR5U3RhdGV8fCJjb21wbGV0ZSI9PT1kb2N1bWVudC5yZWFkeVN0YXRlP0xpKCk6d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLExpKTtsZXQgUmk9Y2xhc3N7c3RhdGljIGdldEZsYXR0ZW5lZE5vZGVzKHQpe2NvbnN0IGU9WSh0KTtyZXR1cm4gT2kodCk/KHQ9dCxlLmFzc2lnbmVkTm9kZXMoe2ZsYXR0ZW46ITB9KSk6QXJyYXkuZnJvbShlLmNoaWxkTm9kZXMpLm1hcCgodD0+T2kodCk/WSh0PXQpLmFzc2lnbmVkTm9kZXMoe2ZsYXR0ZW46ITB9KTpbdF0pKS5yZWR1Y2UoKCh0LGUpPT50LmNvbmNhdChlKSksW10pfWNvbnN0cnVjdG9yKHQsZSl7dGhpcy5fc2hhZHlDaGlsZHJlbk9ic2VydmVyPW51bGwsdGhpcy5fbmF0aXZlQ2hpbGRyZW5PYnNlcnZlcj1udWxsLHRoaXMuX2Nvbm5lY3RlZD0hMSx0aGlzLl90YXJnZXQ9dCx0aGlzLmNhbGxiYWNrPWUsdGhpcy5fZWZmZWN0aXZlTm9kZXM9W10sdGhpcy5fb2JzZXJ2ZXI9bnVsbCx0aGlzLl9zY2hlZHVsZWQ9ITEsdGhpcy5fYm91bmRTY2hlZHVsZT0oKT0+e3RoaXMuX3NjaGVkdWxlKCl9LHRoaXMuY29ubmVjdCgpLHRoaXMuX3NjaGVkdWxlKCl9Y29ubmVjdCgpe09pKHRoaXMuX3RhcmdldCk/dGhpcy5fbGlzdGVuU2xvdHMoW3RoaXMuX3RhcmdldF0pOlkodGhpcy5fdGFyZ2V0KS5jaGlsZHJlbiYmKHRoaXMuX2xpc3RlblNsb3RzKFkodGhpcy5fdGFyZ2V0KS5jaGlsZHJlbiksd2luZG93LlNoYWR5RE9NP3RoaXMuX3NoYWR5Q2hpbGRyZW5PYnNlcnZlcj13aW5kb3cuU2hhZHlET00ub2JzZXJ2ZUNoaWxkcmVuKHRoaXMuX3RhcmdldCwodD0+e3RoaXMuX3Byb2Nlc3NNdXRhdGlvbnModCl9KSk6KHRoaXMuX25hdGl2ZUNoaWxkcmVuT2JzZXJ2ZXI9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoKHQ9Pnt0aGlzLl9wcm9jZXNzTXV0YXRpb25zKHQpfSkpLHRoaXMuX25hdGl2ZUNoaWxkcmVuT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLl90YXJnZXQse2NoaWxkTGlzdDohMH0pKSksdGhpcy5fY29ubmVjdGVkPSEwfWRpc2Nvbm5lY3QoKXtPaSh0aGlzLl90YXJnZXQpP3RoaXMuX3VubGlzdGVuU2xvdHMoW3RoaXMuX3RhcmdldF0pOlkodGhpcy5fdGFyZ2V0KS5jaGlsZHJlbiYmKHRoaXMuX3VubGlzdGVuU2xvdHMoWSh0aGlzLl90YXJnZXQpLmNoaWxkcmVuKSx3aW5kb3cuU2hhZHlET00mJnRoaXMuX3NoYWR5Q2hpbGRyZW5PYnNlcnZlcj8od2luZG93LlNoYWR5RE9NLnVub2JzZXJ2ZUNoaWxkcmVuKHRoaXMuX3NoYWR5Q2hpbGRyZW5PYnNlcnZlciksdGhpcy5fc2hhZHlDaGlsZHJlbk9ic2VydmVyPW51bGwpOnRoaXMuX25hdGl2ZUNoaWxkcmVuT2JzZXJ2ZXImJih0aGlzLl9uYXRpdmVDaGlsZHJlbk9ic2VydmVyLmRpc2Nvbm5lY3QoKSx0aGlzLl9uYXRpdmVDaGlsZHJlbk9ic2VydmVyPW51bGwpKSx0aGlzLl9jb25uZWN0ZWQ9ITF9X3NjaGVkdWxlKCl7dGhpcy5fc2NoZWR1bGVkfHwodGhpcy5fc2NoZWR1bGVkPSEwLHZ0LnJ1bigoKCk9PnRoaXMuZmx1c2goKSkpKX1fcHJvY2Vzc011dGF0aW9ucyh0KXt0aGlzLl9wcm9jZXNzU2xvdE11dGF0aW9ucyh0KSx0aGlzLmZsdXNoKCl9X3Byb2Nlc3NTbG90TXV0YXRpb25zKHQpe2lmKHQpZm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspe2xldCBuPXRbZV07bi5hZGRlZE5vZGVzJiZ0aGlzLl9saXN0ZW5TbG90cyhuLmFkZGVkTm9kZXMpLG4ucmVtb3ZlZE5vZGVzJiZ0aGlzLl91bmxpc3RlblNsb3RzKG4ucmVtb3ZlZE5vZGVzKX19Zmx1c2goKXtpZighdGhpcy5fY29ubmVjdGVkKXJldHVybiExO3dpbmRvdy5TaGFkeURPTSYmU2hhZHlET00uZmx1c2goKSx0aGlzLl9uYXRpdmVDaGlsZHJlbk9ic2VydmVyP3RoaXMuX3Byb2Nlc3NTbG90TXV0YXRpb25zKHRoaXMuX25hdGl2ZUNoaWxkcmVuT2JzZXJ2ZXIudGFrZVJlY29yZHMoKSk6dGhpcy5fc2hhZHlDaGlsZHJlbk9ic2VydmVyJiZ0aGlzLl9wcm9jZXNzU2xvdE11dGF0aW9ucyh0aGlzLl9zaGFkeUNoaWxkcmVuT2JzZXJ2ZXIudGFrZVJlY29yZHMoKSksdGhpcy5fc2NoZWR1bGVkPSExO2xldCB0PXt0YXJnZXQ6dGhpcy5fdGFyZ2V0LGFkZGVkTm9kZXM6W10scmVtb3ZlZE5vZGVzOltdfSxlPXRoaXMuY29uc3RydWN0b3IuZ2V0RmxhdHRlbmVkTm9kZXModGhpcy5fdGFyZ2V0KSxuPU5pKGUsdGhpcy5fZWZmZWN0aXZlTm9kZXMpO2ZvcihsZXQgZSxpPTA7aTxuLmxlbmd0aCYmKGU9bltpXSk7aSsrKWZvcihsZXQgbixpPTA7aTxlLnJlbW92ZWQubGVuZ3RoJiYobj1lLnJlbW92ZWRbaV0pO2krKyl0LnJlbW92ZWROb2Rlcy5wdXNoKG4pO2ZvcihsZXQgaSxyPTA7cjxuLmxlbmd0aCYmKGk9bltyXSk7cisrKWZvcihsZXQgbj1pLmluZGV4O248aS5pbmRleCtpLmFkZGVkQ291bnQ7bisrKXQuYWRkZWROb2Rlcy5wdXNoKGVbbl0pO3RoaXMuX2VmZmVjdGl2ZU5vZGVzPWU7bGV0IGk9ITE7cmV0dXJuKHQuYWRkZWROb2Rlcy5sZW5ndGh8fHQucmVtb3ZlZE5vZGVzLmxlbmd0aCkmJihpPSEwLHRoaXMuY2FsbGJhY2suY2FsbCh0aGlzLl90YXJnZXQsdCkpLGl9X2xpc3RlblNsb3RzKHQpe2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKXtsZXQgbj10W2VdO09pKG4pJiZuLmFkZEV2ZW50TGlzdGVuZXIoInNsb3RjaGFuZ2UiLHRoaXMuX2JvdW5kU2NoZWR1bGUpfX1fdW5saXN0ZW5TbG90cyh0KXtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKyl7bGV0IG49dFtlXTtPaShuKSYmbi5yZW1vdmVFdmVudExpc3RlbmVyKCJzbG90Y2hhbmdlIix0aGlzLl9ib3VuZFNjaGVkdWxlKX19fTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi9jb25zdCB6aT1mdW5jdGlvbigpe2xldCB0LGU7ZG97dD13aW5kb3cuU2hhZHlET00mJlNoYWR5RE9NLmZsdXNoKCksd2luZG93LlNoYWR5Q1NTJiZ3aW5kb3cuU2hhZHlDU1MuU2NvcGluZ1NoaW0mJndpbmRvdy5TaGFkeUNTUy5TY29waW5nU2hpbS5mbHVzaCgpLGU9QW4oKX13aGlsZSh0fHxlKX0sRGk9RWxlbWVudC5wcm90b3R5cGUsQmk9RGkubWF0Y2hlc3x8RGkubWF0Y2hlc1NlbGVjdG9yfHxEaS5tb3pNYXRjaGVzU2VsZWN0b3J8fERpLm1zTWF0Y2hlc1NlbGVjdG9yfHxEaS5vTWF0Y2hlc1NlbGVjdG9yfHxEaS53ZWJraXRNYXRjaGVzU2VsZWN0b3IsSGk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gQmkuY2FsbCh0LGUpfTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi9jbGFzcyBGaXtjb25zdHJ1Y3Rvcih0KXt3aW5kb3cuU2hhZHlET00mJndpbmRvdy5TaGFkeURPTS5pblVzZSYmd2luZG93LlNoYWR5RE9NLnBhdGNoKHQpLHRoaXMubm9kZT10fW9ic2VydmVOb2Rlcyh0KXtyZXR1cm4gbmV3IFJpKHRoaXMubm9kZSx0KX11bm9ic2VydmVOb2Rlcyh0KXt0LmRpc2Nvbm5lY3QoKX1ub3RpZnlPYnNlcnZlcigpe31kZWVwQ29udGFpbnModCl7aWYoWSh0aGlzLm5vZGUpLmNvbnRhaW5zKHQpKXJldHVybiEwO2xldCBlPXQsbj10Lm93bmVyRG9jdW1lbnQ7Zm9yKDtlJiZlIT09biYmZSE9PXRoaXMubm9kZTspZT1ZKGUpLnBhcmVudE5vZGV8fFkoZSkuaG9zdDtyZXR1cm4gZT09PXRoaXMubm9kZX1nZXRPd25lclJvb3QoKXtyZXR1cm4gWSh0aGlzLm5vZGUpLmdldFJvb3ROb2RlKCl9Z2V0RGlzdHJpYnV0ZWROb2Rlcygpe3JldHVybiJzbG90Ij09PXRoaXMubm9kZS5sb2NhbE5hbWU/WSh0aGlzLm5vZGUpLmFzc2lnbmVkTm9kZXMoe2ZsYXR0ZW46ITB9KTpbXX1nZXREZXN0aW5hdGlvbkluc2VydGlvblBvaW50cygpe2xldCB0PVtdLGU9WSh0aGlzLm5vZGUpLmFzc2lnbmVkU2xvdDtmb3IoO2U7KXQucHVzaChlKSxlPVkoZSkuYXNzaWduZWRTbG90O3JldHVybiB0fWltcG9ydE5vZGUodCxlKXtsZXQgbj10aGlzLm5vZGUgaW5zdGFuY2VvZiBEb2N1bWVudD90aGlzLm5vZGU6dGhpcy5ub2RlLm93bmVyRG9jdW1lbnQ7cmV0dXJuIFkobikuaW1wb3J0Tm9kZSh0LGUpfWdldEVmZmVjdGl2ZUNoaWxkTm9kZXMoKXtyZXR1cm4gUmkuZ2V0RmxhdHRlbmVkTm9kZXModGhpcy5ub2RlKX1xdWVyeURpc3RyaWJ1dGVkRWxlbWVudHModCl7bGV0IGU9dGhpcy5nZXRFZmZlY3RpdmVDaGlsZE5vZGVzKCksbj1bXTtmb3IobGV0IGkscj0wLG89ZS5sZW5ndGg7cjxvJiYoaT1lW3JdKTtyKyspaS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFJiZIaShpLHQpJiZuLnB1c2goaSk7cmV0dXJuIG59Z2V0IGFjdGl2ZUVsZW1lbnQoKXtsZXQgdD10aGlzLm5vZGU7cmV0dXJuIHZvaWQgMCE9PXQuX2FjdGl2ZUVsZW1lbnQ/dC5fYWN0aXZlRWxlbWVudDp0LmFjdGl2ZUVsZW1lbnR9fWZ1bmN0aW9uIFZpKHQsZSl7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspe2xldCBpPWVbbl07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsaSx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZVtpXX0sY29uZmlndXJhYmxlOiEwfSl9fWNsYXNzIFVpe2NvbnN0cnVjdG9yKHQpe3RoaXMuZXZlbnQ9dH1nZXQgcm9vdFRhcmdldCgpe3JldHVybiB0aGlzLnBhdGhbMF19Z2V0IGxvY2FsVGFyZ2V0KCl7cmV0dXJuIHRoaXMuZXZlbnQudGFyZ2V0fWdldCBwYXRoKCl7cmV0dXJuIHRoaXMuZXZlbnQuY29tcG9zZWRQYXRoKCl9fWxldCBqaT1GaTtpZih3aW5kb3cuU2hhZHlET00mJndpbmRvdy5TaGFkeURPTS5pblVzZSYmd2luZG93LlNoYWR5RE9NLm5vUGF0Y2gmJndpbmRvdy5TaGFkeURPTS5XcmFwcGVyKXtjbGFzcyB0IGV4dGVuZHMgd2luZG93LlNoYWR5RE9NLldyYXBwZXJ7fU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEZpLnByb3RvdHlwZSkuZm9yRWFjaCgoZT0+eyJhY3RpdmVFbGVtZW50IiE9ZSYmKHQucHJvdG90eXBlW2VdPUZpLnByb3RvdHlwZVtlXSl9KSksVmkodC5wcm90b3R5cGUsWyJjbGFzc0xpc3QiXSksamk9dCxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhVaS5wcm90b3R5cGUse2xvY2FsVGFyZ2V0OntnZXQoKXtjb25zdCB0PXRoaXMuZXZlbnQuY3VycmVudFRhcmdldCxlPXQmJnFpKHQpLmdldE93bmVyUm9vdCgpLG49dGhpcy5wYXRoO2ZvcihsZXQgdD0wO3Q8bi5sZW5ndGg7dCsrKXtjb25zdCBpPW5bdF07aWYocWkoaSkuZ2V0T3duZXJSb290KCk9PT1lKXJldHVybiBpfX0sY29uZmlndXJhYmxlOiEwfSxwYXRoOntnZXQoKXtyZXR1cm4gd2luZG93LlNoYWR5RE9NLmNvbXBvc2VkUGF0aCh0aGlzLmV2ZW50KX0sY29uZmlndXJhYmxlOiEwfX0pfWVsc2UhKGZ1bmN0aW9uIEdpKHQsZSl7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspe2xldCBpPWVbbl07dFtpXT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVbaV0uYXBwbHkodGhpcy5ub2RlLGFyZ3VtZW50cyl9fX0pKEZpLnByb3RvdHlwZSxbImNsb25lTm9kZSIsImFwcGVuZENoaWxkIiwiaW5zZXJ0QmVmb3JlIiwicmVtb3ZlQ2hpbGQiLCJyZXBsYWNlQ2hpbGQiLCJzZXRBdHRyaWJ1dGUiLCJyZW1vdmVBdHRyaWJ1dGUiLCJxdWVyeVNlbGVjdG9yIiwicXVlcnlTZWxlY3RvckFsbCJdKSxWaShGaS5wcm90b3R5cGUsWyJwYXJlbnROb2RlIiwiZmlyc3RDaGlsZCIsImxhc3RDaGlsZCIsIm5leHRTaWJsaW5nIiwicHJldmlvdXNTaWJsaW5nIiwiZmlyc3RFbGVtZW50Q2hpbGQiLCJsYXN0RWxlbWVudENoaWxkIiwibmV4dEVsZW1lbnRTaWJsaW5nIiwicHJldmlvdXNFbGVtZW50U2libGluZyIsImNoaWxkTm9kZXMiLCJjaGlsZHJlbiIsImNsYXNzTGlzdCJdKSwoZnVuY3Rpb24gV2kodCxlKXtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKyl7bGV0IGk9ZVtuXTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxpLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlW2ldfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5ub2RlW2ldPXR9LGNvbmZpZ3VyYWJsZTohMH0pfX0pKEZpLnByb3RvdHlwZSxbInRleHRDb250ZW50IiwiaW5uZXJIVE1MIiwiY2xhc3NOYW1lIl0pO2NvbnN0IHFpPWZ1bmN0aW9uKHQpe2lmKCh0PXR8fGRvY3VtZW50KWluc3RhbmNlb2YgamkpcmV0dXJuIHQ7aWYodCBpbnN0YW5jZW9mIFVpKXJldHVybiB0O2xldCBlPXQuX19kb21BcGk7cmV0dXJuIGV8fChlPXQgaW5zdGFuY2VvZiBFdmVudD9uZXcgVWkodCk6bmV3IGppKHQpLHQuX19kb21BcGk9ZSksZX0sWWk9d2luZG93LlNoYWR5RE9NLFhpPXdpbmRvdy5TaGFkeUNTUzsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE5IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi9mdW5jdGlvbiAkaSh0LGUpe3JldHVybiBZKHQpLmdldFJvb3ROb2RlKCk9PT1lfQovKioKICAgICAqIEBmaWxlb3ZlcnZpZXcKICAgICAqIEBzdXBwcmVzcyB7Y2hlY2tQcm90b3R5cGFsVHlwZXN9CiAgICAgKiBAbGljZW5zZSBDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgICogVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICAgKiBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZAogICAgICogYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heQogICAgICogYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieQogICAgICogR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUAogICAgICogcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgICovCmNvbnN0IEtpPSJkaXNhYmxlLXVwZ3JhZGUiLFppPXQ9Pntmb3IoO3Q7KXtjb25zdCBlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwib2JzZXJ2ZWRBdHRyaWJ1dGVzIik7aWYoZSlyZXR1cm4gZS5nZXQ7dD1PYmplY3QuZ2V0UHJvdG90eXBlT2YodC5wcm90b3R5cGUpLmNvbnN0cnVjdG9yfXJldHVybigpPT5bXX07SSgodD0+e2NvbnN0IGU9bWUodCk7bGV0IG49WmkoZSk7cmV0dXJuIGNsYXNzIGV4dGVuZHMgZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCl9c3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKXtyZXR1cm4gbi5jYWxsKHRoaXMpLmNvbmNhdChLaSl9X2luaXRpYWxpemVQcm9wZXJ0aWVzKCl7dGhpcy5oYXNBdHRyaWJ1dGUoS2kpP3RoaXMuX19pc1VwZ3JhZGVEaXNhYmxlZD0hMDpzdXBlci5faW5pdGlhbGl6ZVByb3BlcnRpZXMoKX1fZW5hYmxlUHJvcGVydGllcygpe3RoaXMuX19pc1VwZ3JhZGVEaXNhYmxlZHx8c3VwZXIuX2VuYWJsZVByb3BlcnRpZXMoKX1fY2FuQXBwbHlQcm9wZXJ0eURlZmF1bHQodCl7cmV0dXJuIHN1cGVyLl9jYW5BcHBseVByb3BlcnR5RGVmYXVsdCh0KSYmISh0aGlzLl9faXNVcGdyYWRlRGlzYWJsZWQmJnRoaXMuX2lzUHJvcGVydHlQZW5kaW5nKHQpKX1hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sodCxlLG4saSl7dD09S2k/dGhpcy5fX2lzVXBncmFkZURpc2FibGVkJiZudWxsPT1uJiYoc3VwZXIuX2luaXRpYWxpemVQcm9wZXJ0aWVzKCksdGhpcy5fX2lzVXBncmFkZURpc2FibGVkPSExLFkodGhpcykuaXNDb25uZWN0ZWQmJnN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCkpOnN1cGVyLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayh0LGUsbixpKX1jb25uZWN0ZWRDYWxsYmFjaygpe3RoaXMuX19pc1VwZ3JhZGVEaXNhYmxlZHx8c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3RoaXMuX19pc1VwZ3JhZGVEaXNhYmxlZHx8c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKX19fSkpOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dAogICAgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28KICAgIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpjb25zdCBKaT0iZGlzYWJsZS11cGdyYWRlIjtsZXQgUWk9d2luZG93LlNoYWR5Q1NTO2NvbnN0IHRyPUkoKHQ9Pntjb25zdCBlPWRpKG1lKHQpKSxuPWZlP2U6U2koZSksaT1aaShuKSxyPXt4OiJwYW4teCIseToicGFuLXkiLG5vbmU6Im5vbmUiLGFsbDoiYXV0byJ9O2NsYXNzIG8gZXh0ZW5kcyBue2NvbnN0cnVjdG9yKCl7c3VwZXIoKX1zdGF0aWMgZ2V0IGltcG9ydE1ldGEoKXtyZXR1cm4gdGhpcy5wcm90b3R5cGUuaW1wb3J0TWV0YX1jcmVhdGVkKCl7fV9fYXR0cmlidXRlUmVhY3Rpb24odCxlLG4peyh0aGlzLl9fZGF0YUF0dHJpYnV0ZXMmJnRoaXMuX19kYXRhQXR0cmlidXRlc1t0XXx8dD09PUppKSYmdGhpcy5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sodCxlLG4sbnVsbCl9c2V0QXR0cmlidXRlKHQsZSl7aWYoTCYmIXRoaXMuX2xlZ2FjeUZvcmNlT2JzZXJ2ZWRBdHRyaWJ1dGVzKXtjb25zdCBuPXRoaXMuZ2V0QXR0cmlidXRlKHQpO3N1cGVyLnNldEF0dHJpYnV0ZSh0LGUpLHRoaXMuX19hdHRyaWJ1dGVSZWFjdGlvbih0LG4sU3RyaW5nKGUpKX1lbHNlIHN1cGVyLnNldEF0dHJpYnV0ZSh0LGUpfXJlbW92ZUF0dHJpYnV0ZSh0KXtpZihMJiYhdGhpcy5fbGVnYWN5Rm9yY2VPYnNlcnZlZEF0dHJpYnV0ZXMpe2NvbnN0IGU9dGhpcy5nZXRBdHRyaWJ1dGUodCk7c3VwZXIucmVtb3ZlQXR0cmlidXRlKHQpLHRoaXMuX19hdHRyaWJ1dGVSZWFjdGlvbih0LGUsbnVsbCl9ZWxzZSBzdXBlci5yZW1vdmVBdHRyaWJ1dGUodCl9c3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKXtyZXR1cm4gTCYmIXRoaXMucHJvdG90eXBlLl9sZWdhY3lGb3JjZU9ic2VydmVkQXR0cmlidXRlcz8odGhpcy5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfX29ic2VydmVkQXR0cmlidXRlcyIsdGhpcykpfHwodGhpcy5fX29ic2VydmVkQXR0cmlidXRlcz1bXSksdGhpcy5fX29ic2VydmVkQXR0cmlidXRlcyk6aS5jYWxsKHRoaXMpLmNvbmNhdChKaSl9X2VuYWJsZVByb3BlcnRpZXMoKXt0aGlzLl9faXNVcGdyYWRlRGlzYWJsZWR8fHN1cGVyLl9lbmFibGVQcm9wZXJ0aWVzKCl9X2NhbkFwcGx5UHJvcGVydHlEZWZhdWx0KHQpe3JldHVybiBzdXBlci5fY2FuQXBwbHlQcm9wZXJ0eURlZmF1bHQodCkmJiEodGhpcy5fX2lzVXBncmFkZURpc2FibGVkJiZ0aGlzLl9pc1Byb3BlcnR5UGVuZGluZyh0KSl9Y29ubmVjdGVkQ2FsbGJhY2soKXt0aGlzLl9fbmVlZHNBdHRyaWJ1dGVzQXRDb25uZWN0ZWQmJnRoaXMuX3Rha2VBdHRyaWJ1dGVzKCksdGhpcy5fX2lzVXBncmFkZURpc2FibGVkfHwoc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLmlzQXR0YWNoZWQ9ITAsdGhpcy5hdHRhY2hlZCgpKX1hdHRhY2hlZCgpe31kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3RoaXMuX19pc1VwZ3JhZGVEaXNhYmxlZHx8KHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5pc0F0dGFjaGVkPSExLHRoaXMuZGV0YWNoZWQoKSl9ZGV0YWNoZWQoKXt9YXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHQsZSxuLGkpe2UhPT1uJiYodD09Smk/dGhpcy5fX2lzVXBncmFkZURpc2FibGVkJiZudWxsPT1uJiYodGhpcy5faW5pdGlhbGl6ZVByb3BlcnRpZXMoKSx0aGlzLl9faXNVcGdyYWRlRGlzYWJsZWQ9ITEsWSh0aGlzKS5pc0Nvbm5lY3RlZCYmdGhpcy5jb25uZWN0ZWRDYWxsYmFjaygpKTooc3VwZXIuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHQsZSxuLGkpLHRoaXMuYXR0cmlidXRlQ2hhbmdlZCh0LGUsbikpKX1hdHRyaWJ1dGVDaGFuZ2VkKHQsZSxuKXt9X2luaXRpYWxpemVQcm9wZXJ0aWVzKCl7aWYodyYmdGhpcy5oYXNBdHRyaWJ1dGUoSmkpKXRoaXMuX19pc1VwZ3JhZGVEaXNhYmxlZD0hMDtlbHNle2xldCB0PU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKTt0Lmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9faGFzUmVnaXN0ZXJGaW5pc2hlZCIsdCkpfHwodGhpcy5fcmVnaXN0ZXJlZCgpLHQuX19oYXNSZWdpc3RlckZpbmlzaGVkPSEwKSxzdXBlci5faW5pdGlhbGl6ZVByb3BlcnRpZXMoKSx0aGlzLnJvb3Q9dGhpcyx0aGlzLmNyZWF0ZWQoKSxMJiYhdGhpcy5fbGVnYWN5Rm9yY2VPYnNlcnZlZEF0dHJpYnV0ZXMmJih0aGlzLmhhc0F0dHJpYnV0ZXMoKT90aGlzLl90YWtlQXR0cmlidXRlcygpOnRoaXMucGFyZW50Tm9kZXx8KHRoaXMuX19uZWVkc0F0dHJpYnV0ZXNBdENvbm5lY3RlZD0hMCkpLHRoaXMuX2FwcGx5TGlzdGVuZXJzKCl9fV90YWtlQXR0cmlidXRlcygpe2NvbnN0IHQ9dGhpcy5hdHRyaWJ1dGVzO2ZvcihsZXQgZT0wLG49dC5sZW5ndGg7ZTxuO2UrKyl7Y29uc3Qgbj10W2VdO3RoaXMuX19hdHRyaWJ1dGVSZWFjdGlvbihuLm5hbWUsbnVsbCxuLnZhbHVlKX19X3JlZ2lzdGVyZWQoKXt9cmVhZHkoKXt0aGlzLl9lbnN1cmVBdHRyaWJ1dGVzKCksc3VwZXIucmVhZHkoKX1fZW5zdXJlQXR0cmlidXRlcygpe31fYXBwbHlMaXN0ZW5lcnMoKXt9c2VyaWFsaXplKHQpe3JldHVybiB0aGlzLl9zZXJpYWxpemVWYWx1ZSh0KX1kZXNlcmlhbGl6ZSh0LGUpe3JldHVybiB0aGlzLl9kZXNlcmlhbGl6ZVZhbHVlKHQsZSl9cmVmbGVjdFByb3BlcnR5VG9BdHRyaWJ1dGUodCxlLG4pe3RoaXMuX3Byb3BlcnR5VG9BdHRyaWJ1dGUodCxlLG4pfXNlcmlhbGl6ZVZhbHVlVG9BdHRyaWJ1dGUodCxlLG4pe3RoaXMuX3ZhbHVlVG9Ob2RlQXR0cmlidXRlKG58fHRoaXMsdCxlKX1leHRlbmQodCxlKXtpZighdHx8IWUpcmV0dXJuIHR8fGU7bGV0IG49T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSk7Zm9yKGxldCBpLHI9MDtyPG4ubGVuZ3RoJiYoaT1uW3JdKTtyKyspe2xldCBuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSxpKTtuJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxpLG4pfXJldHVybiB0fW1peGluKHQsZSl7Zm9yKGxldCBuIGluIGUpdFtuXT1lW25dO3JldHVybiB0fWNoYWluT2JqZWN0KHQsZSl7cmV0dXJuIHQmJmUmJnQhPT1lJiYodC5fX3Byb3RvX189ZSksdH1pbnN0YW5jZVRlbXBsYXRlKHQpe2xldCBlPXRoaXMuY29uc3RydWN0b3IuX2NvbnRlbnRGb3JUZW1wbGF0ZSh0KTtyZXR1cm4gZG9jdW1lbnQuaW1wb3J0Tm9kZShlLCEwKX1maXJlKHQsZSxuKXtuPW58fHt9LGU9bnVsbD09ZT97fTplO2xldCBpPW5ldyBFdmVudCh0LHtidWJibGVzOnZvaWQgMD09PW4uYnViYmxlc3x8bi5idWJibGVzLGNhbmNlbGFibGU6Qm9vbGVhbihuLmNhbmNlbGFibGUpLGNvbXBvc2VkOnZvaWQgMD09PW4uY29tcG9zZWR8fG4uY29tcG9zZWR9KTtyZXR1cm4gaS5kZXRhaWw9ZSxZKG4ubm9kZXx8dGhpcykuZGlzcGF0Y2hFdmVudChpKSxpfWxpc3Rlbih0LGUsbil7dD10fHx0aGlzO2xldCBpPXRoaXMuX19ib3VuZExpc3RlbmVyc3x8KHRoaXMuX19ib3VuZExpc3RlbmVycz1uZXcgV2Vha01hcCkscj1pLmdldCh0KTtyfHwocj17fSxpLnNldCh0LHIpKTtsZXQgbz1lK247cltvXXx8KHJbb109dGhpcy5fYWRkTWV0aG9kRXZlbnRMaXN0ZW5lclRvTm9kZSh0LGUsbix0aGlzKSl9dW5saXN0ZW4odCxlLG4pe3Q9dHx8dGhpcztsZXQgaT10aGlzLl9fYm91bmRMaXN0ZW5lcnMmJnRoaXMuX19ib3VuZExpc3RlbmVycy5nZXQodCkscj1lK24sbz1pJiZpW3JdO28mJih0aGlzLl9yZW1vdmVFdmVudExpc3RlbmVyRnJvbU5vZGUodCxlLG8pLGlbcl09bnVsbCl9c2V0U2Nyb2xsRGlyZWN0aW9uKHQsZSl7cmkoZXx8dGhpcyxyW3RdfHwiYXV0byIpfSQkKHQpe3JldHVybiB0aGlzLnJvb3QucXVlcnlTZWxlY3Rvcih0KX1nZXQgZG9tSG9zdCgpe2xldCB0PVkodGhpcykuZ2V0Um9vdE5vZGUoKTtyZXR1cm4gdCBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQ/dC5ob3N0OnR9ZGlzdHJpYnV0ZUNvbnRlbnQoKXtjb25zdCB0PXFpKHRoaXMpO3dpbmRvdy5TaGFkeURPTSYmdC5zaGFkb3dSb290JiZTaGFkeURPTS5mbHVzaCgpfWdldEVmZmVjdGl2ZUNoaWxkTm9kZXMoKXtyZXR1cm4gcWkodGhpcykuZ2V0RWZmZWN0aXZlQ2hpbGROb2RlcygpfXF1ZXJ5RGlzdHJpYnV0ZWRFbGVtZW50cyh0KXtyZXR1cm4gcWkodGhpcykucXVlcnlEaXN0cmlidXRlZEVsZW1lbnRzKHQpfWdldEVmZmVjdGl2ZUNoaWxkcmVuKCl7cmV0dXJuIHRoaXMuZ2V0RWZmZWN0aXZlQ2hpbGROb2RlcygpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERX0pKX1nZXRFZmZlY3RpdmVUZXh0Q29udGVudCgpe2xldCB0PXRoaXMuZ2V0RWZmZWN0aXZlQ2hpbGROb2RlcygpLGU9W107Zm9yKGxldCBuLGk9MDtuPXRbaV07aSsrKW4ubm9kZVR5cGUhPT1Ob2RlLkNPTU1FTlRfTk9ERSYmZS5wdXNoKG4udGV4dENvbnRlbnQpO3JldHVybiBlLmpvaW4oIiIpfXF1ZXJ5RWZmZWN0aXZlQ2hpbGRyZW4odCl7bGV0IGU9dGhpcy5xdWVyeURpc3RyaWJ1dGVkRWxlbWVudHModCk7cmV0dXJuIGUmJmVbMF19cXVlcnlBbGxFZmZlY3RpdmVDaGlsZHJlbih0KXtyZXR1cm4gdGhpcy5xdWVyeURpc3RyaWJ1dGVkRWxlbWVudHModCl9Z2V0Q29udGVudENoaWxkTm9kZXModCl7bGV0IGU9dGhpcy5yb290LnF1ZXJ5U2VsZWN0b3IodHx8InNsb3QiKTtyZXR1cm4gZT9xaShlKS5nZXREaXN0cmlidXRlZE5vZGVzKCk6W119Z2V0Q29udGVudENoaWxkcmVuKHQpe3JldHVybiB0aGlzLmdldENvbnRlbnRDaGlsZE5vZGVzKHQpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERX0pKX1pc0xpZ2h0RGVzY2VuZGFudCh0KXtjb25zdCBlPXRoaXM7cmV0dXJuIGUhPT10JiZZKGUpLmNvbnRhaW5zKHQpJiZZKGUpLmdldFJvb3ROb2RlKCk9PT1ZKHQpLmdldFJvb3ROb2RlKCl9aXNMb2NhbERlc2NlbmRhbnQodCl7cmV0dXJuIHRoaXMucm9vdD09PVkodCkuZ2V0Um9vdE5vZGUoKX1zY29wZVN1YnRyZWUodCxlPSExKXtyZXR1cm4oZnVuY3Rpb24gbih0LGU9ITEpe2lmKCFZaXx8IVhpKXJldHVybiBudWxsO2lmKCFZaS5oYW5kbGVzRHluYW1pY1Njb3BpbmcpcmV0dXJuIG51bGw7Y29uc3Qgbj1YaS5TY29waW5nU2hpbTtpZighbilyZXR1cm4gbnVsbDtjb25zdCBpPW4uc2NvcGVGb3JOb2RlKHQpLHI9WSh0KS5nZXRSb290Tm9kZSgpLG89dD0+e2lmKCEkaSh0LHIpKXJldHVybjtjb25zdCBlPUFycmF5LmZyb20oWWkubmF0aXZlTWV0aG9kcy5xdWVyeVNlbGVjdG9yQWxsLmNhbGwodCwiKiIpKTtlLnB1c2godCk7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0Kyspe2NvbnN0IG89ZVt0XTtpZighJGkobyxyKSljb250aW51ZTtjb25zdCBhPW4uY3VycmVudFNjb3BlRm9yTm9kZShvKTthIT09aSYmKCIiIT09YSYmbi51bnNjb3BlTm9kZShvLGEpLG4uc2NvcGVOb2RlKG8saSkpfX07aWYobyh0KSxlKXtjb25zdCBlPW5ldyBNdXRhdGlvbk9ic2VydmVyKCh0PT57Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspe2NvbnN0IG49dFtlXTtmb3IobGV0IHQ9MDt0PG4uYWRkZWROb2Rlcy5sZW5ndGg7dCsrKXtjb25zdCBlPW4uYWRkZWROb2Rlc1t0XTtlLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJm8oZSl9fX0pKTtyZXR1cm4gZS5vYnNlcnZlKHQse2NoaWxkTGlzdDohMCxzdWJ0cmVlOiEwfSksZX1yZXR1cm4gbnVsbH0pKHQsZSl9Z2V0Q29tcHV0ZWRTdHlsZVZhbHVlKHQpe3JldHVybiBRaS5nZXRDb21wdXRlZFN0eWxlVmFsdWUodGhpcyx0KX1kZWJvdW5jZSh0LGUsbil7cmV0dXJuIHRoaXMuX2RlYm91bmNlcnM9dGhpcy5fZGVib3VuY2Vyc3x8e30sdGhpcy5fZGVib3VuY2Vyc1t0XT1Fbi5kZWJvdW5jZSh0aGlzLl9kZWJvdW5jZXJzW3RdLG4+MD9ndC5hZnRlcihuKTp2dCxlLmJpbmQodGhpcykpfWlzRGVib3VuY2VyQWN0aXZlKHQpe3RoaXMuX2RlYm91bmNlcnM9dGhpcy5fZGVib3VuY2Vyc3x8e307bGV0IGU9dGhpcy5fZGVib3VuY2Vyc1t0XTtyZXR1cm4hKCFlfHwhZS5pc0FjdGl2ZSgpKX1mbHVzaERlYm91bmNlcih0KXt0aGlzLl9kZWJvdW5jZXJzPXRoaXMuX2RlYm91bmNlcnN8fHt9O2xldCBlPXRoaXMuX2RlYm91bmNlcnNbdF07ZSYmZS5mbHVzaCgpfWNhbmNlbERlYm91bmNlcih0KXt0aGlzLl9kZWJvdW5jZXJzPXRoaXMuX2RlYm91bmNlcnN8fHt9O2xldCBlPXRoaXMuX2RlYm91bmNlcnNbdF07ZSYmZS5jYW5jZWwoKX1hc3luYyh0LGUpe3JldHVybiBlPjA/Z3QucnVuKHQuYmluZCh0aGlzKSxlKTp+dnQucnVuKHQuYmluZCh0aGlzKSl9Y2FuY2VsQXN5bmModCl7dDwwP3Z0LmNhbmNlbCh+dCk6Z3QuY2FuY2VsKHQpfWNyZWF0ZSh0LGUpe2xldCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodCk7aWYoZSlpZihuLnNldFByb3BlcnRpZXMpbi5zZXRQcm9wZXJ0aWVzKGUpO2Vsc2UgZm9yKGxldCB0IGluIGUpblt0XT1lW3RdO3JldHVybiBufWVsZW1lbnRNYXRjaGVzKHQsZSl7cmV0dXJuIEhpKGV8fHRoaXMsdCl9dG9nZ2xlQXR0cmlidXRlKHQsZSl7bGV0IG49dGhpcztyZXR1cm4gMz09PWFyZ3VtZW50cy5sZW5ndGgmJihuPWFyZ3VtZW50c1syXSksMT09YXJndW1lbnRzLmxlbmd0aCYmKGU9IW4uaGFzQXR0cmlidXRlKHQpKSxlPyhZKG4pLnNldEF0dHJpYnV0ZSh0LCIiKSwhMCk6KFkobikucmVtb3ZlQXR0cmlidXRlKHQpLCExKX10b2dnbGVDbGFzcyh0LGUsbil7bj1ufHx0aGlzLDE9PWFyZ3VtZW50cy5sZW5ndGgmJihlPSFuLmNsYXNzTGlzdC5jb250YWlucyh0KSksZT9uLmNsYXNzTGlzdC5hZGQodCk6bi5jbGFzc0xpc3QucmVtb3ZlKHQpfXRyYW5zZm9ybSh0LGUpeyhlPWV8fHRoaXMpLnN0eWxlLndlYmtpdFRyYW5zZm9ybT10LGUuc3R5bGUudHJhbnNmb3JtPXR9dHJhbnNsYXRlM2QodCxlLG4saSl7dGhpcy50cmFuc2Zvcm0oInRyYW5zbGF0ZTNkKCIrdCsiLCIrZSsiLCIrbisiKSIsaT1pfHx0aGlzKX1hcnJheURlbGV0ZSh0LGUpe2xldCBuO2lmKEFycmF5LmlzQXJyYXkodCkpe2lmKG49dC5pbmRleE9mKGUpLG4+PTApcmV0dXJuIHQuc3BsaWNlKG4sMSl9ZWxzZSBpZihuPW50KHRoaXMsdCkuaW5kZXhPZihlKSxuPj0wKXJldHVybiB0aGlzLnNwbGljZSh0LG4sMSk7cmV0dXJuIG51bGx9X2xvZ2dlcih0LGUpe3N3aXRjaChBcnJheS5pc0FycmF5KGUpJiYxPT09ZS5sZW5ndGgmJkFycmF5LmlzQXJyYXkoZVswXSkmJihlPWVbMF0pLHQpe2Nhc2UibG9nIjpjYXNlIndhcm4iOmNhc2UiZXJyb3IiOmNvbnNvbGVbdF0oLi4uZSl9fV9sb2coLi4udCl7dGhpcy5fbG9nZ2VyKCJsb2ciLHQpfV93YXJuKC4uLnQpe3RoaXMuX2xvZ2dlcigid2FybiIsdCl9X2Vycm9yKC4uLnQpe3RoaXMuX2xvZ2dlcigiZXJyb3IiLHQpfV9sb2dmKHQsLi4uZSl7cmV0dXJuWyJbJXM6OiVzXSIsdGhpcy5pcyx0LC4uLmVdfX1yZXR1cm4gby5wcm90b3R5cGUuaXM9IiIsb30pKTtmdW5jdGlvbiBlcih0LGUpe2xldCBuPTAsaT0wO2Zvcig7Oyl7aWYobj09PXQubGVuZ3RoKXJldHVybiBpPT09ZS5sZW5ndGg/MDotMTtpZihpPT09ZS5sZW5ndGgpcmV0dXJuIDE7aWYoaXIodFtuXSkmJmlyKGVbaV0pKXtjb25zdCByPW4sbz1pO249bnIodCxuKzEpLGk9bnIoZSxpKzEpO2NvbnN0IGE9cGFyc2VGbG9hdCh0LnNsaWNlKHIsbikpLHM9cGFyc2VGbG9hdChlLnNsaWNlKG8saSkpO2lmKGE8cylyZXR1cm4tMTtpZihhPnMpcmV0dXJuIDF9ZWxzZXtpZihycih0W25dKSl7aWYoIXJyKGVbaV0pKXJldHVybi0xfWVsc2V7aWYocnIoZVtpXSkpcmV0dXJuIDE7aWYodFtuXTxlW2ldKXJldHVybi0xO2lmKHRbbl0+ZVtpXSlyZXR1cm4gMX1uKyssaSsrfX19ZnVuY3Rpb24gbnIodCxlKXtsZXQgbjshKGZ1bmN0aW9uKHQpe3RbdC5OQVRVUkFMPTBdPSJOQVRVUkFMIix0W3QuUkVBTD0xXT0iUkVBTCIsdFt0LkVYUE9ORU5UX1NJR049Ml09IkVYUE9ORU5UX1NJR04iLHRbdC5FWFBPTkVOVD0zXT0iRVhQT05FTlQifSkobnx8KG49e30pKTtsZXQgaT1uLk5BVFVSQUw7Zm9yKDtlPHQubGVuZ3RoO2UrKylpZihpPT09bi5OQVRVUkFMKXtpZigiLiI9PT10W2VdKWk9bi5SRUFMO2Vsc2UgaWYoImUiPT09dFtlXXx8IkUiPT09dFtlXSlpPW4uRVhQT05FTlRfU0lHTjtlbHNlIGlmKCFpcih0W2VdKSlicmVha31lbHNlIGlmKGk9PT1uLlJFQUwpe2lmKCJlIj09PXRbZV18fCJFIj09PXRbZV0paT1uLkVYUE9ORU5UX1NJR047ZWxzZSBpZighaXIodFtlXSkpYnJlYWt9ZWxzZSBpZihpPT09bi5FWFBPTkVOVF9TSUdOKXtpZighaXIodFtlXSkmJiIrIiE9PXRbZV0mJiItIiE9PXRbZV0pYnJlYWs7aT1uLkVYUE9ORU5UfWVsc2UgaWYoaT09PW4uRVhQT05FTlQmJiFpcih0W2VdKSlicmVhaztyZXR1cm4gZX1mdW5jdGlvbiBpcih0KXtyZXR1cm4iMCI8PXQmJnQ8PSI5In1mdW5jdGlvbiBycih0KXtyZXR1cm4iLyI9PT10fHwiXyI9PT10fHxpcih0KX1mdW5jdGlvbiBvcih0KXtyZXR1cm4gd2UudW5pb24uYXBwbHkobnVsbCx3ZS52YWx1ZXModCkpLnNvcnQoZXIpfWNsYXNzIGFyIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMubmFtZT0iUmVxdWVzdENhbmNlbGxhdGlvbkVycm9yIn19Y2xhc3Mgc3IgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLm5hbWU9IkludmFsaWRSZXF1ZXN0T3B0aW9uc0Vycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxzci5wcm90b3R5cGUpfX1jbGFzcyBsciBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIoKSx0aGlzLm1lc3NhZ2U9YFJlcXVlc3ROZXR3b3JrRXJyb3I6ICR7dC5zdGF0dXN9IGF0ICR7ZX1gLHRoaXMubmFtZT0iUmVxdWVzdE5ldHdvcmtFcnJvciIsdGhpcy5yZXE9dCx0aGlzLnVybD1lfX12YXIgY3I7IShmdW5jdGlvbih0KXt0LkdFVD0iR0VUIix0LlBPU1Q9IlBPU1QifSkoY3J8fChjcj17fSkpO2NsYXNzIHVye3ZhbGlkYXRlKCl7aWYodGhpcy5tZXRob2RUeXBlPT09Y3IuR0VUJiZ0aGlzLmJvZHkpdGhyb3cgbmV3IHNyKCJib2R5IG11c3QgYmUgbWlzc2luZyBmb3IgYSBHRVQgcmVxdWVzdC4iKX19Y2xhc3MgaHJ7Y29uc3RydWN0b3IodD0xZTMsZT0zKXt0aGlzLl9xdWV1ZT1bXSx0aGlzLl9uQWN0aXZlUmVxdWVzdHM9MCx0aGlzLl9uU2ltdWx0YW5lb3VzUmVxdWVzdHM9dCx0aGlzLl9tYXhSZXRyaWVzPWV9cmVxdWVzdCh0LGUpe2NvbnN0IG49KGZ1bmN0aW9uIGkodCl7Y29uc3QgZT1uZXcgdXI7cmV0dXJuIHQ/KGUubWV0aG9kVHlwZT1jci5QT1NULGUuYm9keT0oZnVuY3Rpb24gbih0KXtjb25zdCBlPW5ldyBGb3JtRGF0YTtmb3IoY29uc3RbbixpXW9mIE9iamVjdC5lbnRyaWVzKHQpKXtjb25zdCB0PUFycmF5LmlzQXJyYXkoaSk/aTpbaV07Zm9yKGNvbnN0IGkgb2YgdCllLmFwcGVuZChuLGkpfXJldHVybiBlfSkodCksZSk6KGUubWV0aG9kVHlwZT1jci5HRVQsZSl9KShlKTtyZXR1cm4gdGhpcy5yZXF1ZXN0V2l0aE9wdGlvbnModCxuKX1yZXF1ZXN0V2l0aE9wdGlvbnModCxlKXtyZXR1cm4gZS52YWxpZGF0ZSgpLG5ldyBQcm9taXNlKCgodCxlKT0+e3RoaXMuX3F1ZXVlLnB1c2goe3Jlc29sdmU6dCxyZWplY3Q6ZX0pLHRoaXMubGF1bmNoUmVxdWVzdHMoKX0pKS50aGVuKCgoKT0+dGhpcy5wcm9taXNlV2l0aFJldHJpZXModCx0aGlzLl9tYXhSZXRyaWVzLGUpKSkudGhlbigodD0+KHRoaXMuX25BY3RpdmVSZXF1ZXN0cy0tLHRoaXMubGF1bmNoUmVxdWVzdHMoKSx0KSksKHQ9PigiUmVxdWVzdE5ldHdvcmtFcnJvciI9PT10Lm5hbWUmJih0aGlzLl9uQWN0aXZlUmVxdWVzdHMtLSx0aGlzLmxhdW5jaFJlcXVlc3RzKCkpLFByb21pc2UucmVqZWN0KHQpKSkpfWZldGNoKHQsZSl7cmV0dXJuIG5ldyBQcm9taXNlKCgodCxlKT0+e3RoaXMuX3F1ZXVlLnB1c2goe3Jlc29sdmU6dCxyZWplY3Q6ZX0pLHRoaXMubGF1bmNoUmVxdWVzdHMoKX0pKS50aGVuKCgoKT0+e2xldCBuPTE7cmV0dXJuIG5ldyBQcm9taXNlKChpPT57Y29uc3Qgcj0oKT0+e2ZldGNoKHQsZSkudGhlbigodD0+e2lmKCF0Lm9rJiZ0aGlzLl9tYXhSZXRyaWVzPm4pcmV0dXJuIG4rKyx2b2lkIHIoKTtpKHQpLHRoaXMuX25BY3RpdmVSZXF1ZXN0cy0tLHRoaXMubGF1bmNoUmVxdWVzdHMoKX0pKX07cigpfSkpfSkpfWNsZWFyUXVldWUoKXtmb3IoO3RoaXMuX3F1ZXVlLmxlbmd0aD4wOyl0aGlzLl9xdWV1ZS5wb3AoKS5yZWplY3QobmV3IGFyKCJSZXF1ZXN0IGNhbmNlbGxlZCBieSBjbGVhclF1ZXVlIikpfWFjdGl2ZVJlcXVlc3RzKCl7cmV0dXJuIHRoaXMuX25BY3RpdmVSZXF1ZXN0c31vdXRzdGFuZGluZ1JlcXVlc3RzKCl7cmV0dXJuIHRoaXMuX25BY3RpdmVSZXF1ZXN0cyt0aGlzLl9xdWV1ZS5sZW5ndGh9bGF1bmNoUmVxdWVzdHMoKXtmb3IoO3RoaXMuX25BY3RpdmVSZXF1ZXN0czx0aGlzLl9uU2ltdWx0YW5lb3VzUmVxdWVzdHMmJnRoaXMuX3F1ZXVlLmxlbmd0aD4wOyl0aGlzLl9uQWN0aXZlUmVxdWVzdHMrKyx0aGlzLl9xdWV1ZS5wb3AoKS5yZXNvbHZlKHZvaWQgMCl9cHJvbWlzZVdpdGhSZXRyaWVzKHQsZSxuKXtyZXR1cm4gdGhpcy5fcHJvbWlzZUZyb21VcmwodCxuKS50aGVuKCh0PT50KSwoaT0+ZT4wP3RoaXMucHJvbWlzZVdpdGhSZXRyaWVzKHQsZS0xLG4pOlByb21pc2UucmVqZWN0KGkpKSl9X3Byb21pc2VGcm9tVXJsKHQsZSl7cmV0dXJuIG5ldyBQcm9taXNlKCgobixpKT0+e2NvbnN0IHI9KGZ1bmN0aW9uIG8odCxlLG4saSl7Y29uc3Qgcj1uZXcgWE1MSHR0cFJlcXVlc3Q7cmV0dXJuIHIub3Blbih0LGUpLG4mJihyLndpdGhDcmVkZW50aWFscz1uKSxpJiZyLnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsaSkscn0pKGUubWV0aG9kVHlwZSx0LGUud2l0aENyZWRlbnRpYWxzLGUuY29udGVudFR5cGUpO3Iub25sb2FkPWZ1bmN0aW9uKCl7MjAwPT09ci5zdGF0dXM/bihKU09OLnBhcnNlKHIucmVzcG9uc2VUZXh0KSk6aShuZXcgbHIocix0KSl9LHIub25lcnJvcj1mdW5jdGlvbigpe2kobmV3IGxyKHIsdCkpfSxlLmJvZHk/ci5zZW5kKGUuYm9keSk6ci5zZW5kKCl9KSl9fWNvbnN0IGRyPSJleHBlcmltZW50YWxQbHVnaW4iLHByPW5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7bGV0IGZyPW1yKCk7ZnVuY3Rpb24gbXIodD0iZGF0YSIsZT1wcil7cmV0dXJuIi8iPT09dFt0Lmxlbmd0aC0xXSYmKHQ9dC5zbGljZSgwLHQubGVuZ3RoLTEpKSx7ZW52aXJvbm1lbnQ6KCk9Pl9yKHQsIi9lbnZpcm9ubWVudCIpLGV4cGVyaW1lbnRzOigpPT5fcih0LCIvZXhwZXJpbWVudHMiKSxwbHVnaW5Sb3V0ZTooZSxuLGkpPT5fcih0KyIvcGx1Z2luIixgLyR7ZX0ke259YCxpKSxwbHVnaW5zTGlzdGluZzooKT0+X3IodCwiL3BsdWdpbnNfbGlzdGluZyIseXIoe1tkcl06ZS5nZXRBbGwoZHIpfSkpLHJ1bnM6KCk9Pl9yKHQsIi9ydW5zIikscnVuc0ZvckV4cGVyaW1lbnQ6ZT0+X3IodCwiL2V4cGVyaW1lbnRfcnVucyIseXIoe2V4cGVyaW1lbnQ6U3RyaW5nKGUpfSkpfX1mdW5jdGlvbiBncigpe3JldHVybiBmcn1mdW5jdGlvbiBfcih0LGUsbj1uZXcgVVJMU2VhcmNoUGFyYW1zKXtsZXQgaT10K2U7cmV0dXJuIFN0cmluZyhuKSYmKGkrPShlLmluY2x1ZGVzKCI/Iik/IiYiOiI/IikrU3RyaW5nKG4pKSxpfWZ1bmN0aW9uIHlyKHQ9e30pe2NvbnN0IGU9T2JqZWN0LmtleXModCkuc29ydCgpLmZpbHRlcigoZT0+dFtlXSkpLG49bmV3IFVSTFNlYXJjaFBhcmFtcztyZXR1cm4gZS5mb3JFYWNoKChlPT57Y29uc3QgaT10W2VdOyhBcnJheS5pc0FycmF5KGkpP2k6W2ldKS5mb3JFYWNoKCh0PT5uLmFwcGVuZChlLHQpKSl9KSksbn12YXIgdnI7ZnVuY3Rpb24gYnIodCxlKXtjb25zdCBuPSgoKT0+e3RyeXtyZXR1cm4gbmV3IFJlZ0V4cChlKX1jYXRjaCh0KXtyZXR1cm4gbnVsbH19KSgpO3JldHVybntuYW1lOmUsbWV0YWRhdGE6e3R5cGU6dnIuU0VBUkNIX1JFU1VMVFMsdmFsaWRSZWdleDohIW4sdW5pdmVyc2FsUmVnZXg6Ii4qIj09PWV9LGl0ZW1zOm4/dC5maWx0ZXIoKHQ9PnQubWF0Y2gobikpKTpbXX19ZnVuY3Rpb24geHIodCxlLG4pe2NvbnN0IGk9KGZ1bmN0aW9uIHIodCxlPSIiKXtjb25zdCBuPVticih0LGUpXSxpPShmdW5jdGlvbiByKHQsZT0iLyIpe2NvbnN0IG49W10saT17fTtyZXR1cm4gdC5mb3JFYWNoKCh0PT57Y29uc3Qgcj10LmluZGV4T2YoZSksbz1yPj0wP3Quc2xpY2UoMCxyKTp0O2lmKCFpW29dKXtjb25zdCB0PXtuYW1lOm8sbWV0YWRhdGE6e3R5cGU6dnIuUFJFRklYX0dST1VQfSxpdGVtczpbXX07aVtvXT10LG4ucHVzaCh0KX1pW29dLml0ZW1zLnB1c2godCl9KSksbn0pKHQpO3JldHVybltdLmNvbmNhdChuLGkpfSkob3IodCksbiksbz0oZnVuY3Rpb24gYSh0KXtjb25zdCBlPW5ldyBNYXA7cmV0dXJuIE9iamVjdC5rZXlzKHQpLmZvckVhY2goKG49Pnt0W25dLmZvckVhY2goKHQ9Pntjb25zdCBpPWUuZ2V0KHQpfHxbXTtpLnB1c2gobiksZS5zZXQodCxpKX0pKX0pKSxlfSkod2UucGljayh0LGUpKTtyZXR1cm4gaS5tYXAoKCh7bmFtZTp0LG1ldGFkYXRhOmUsaXRlbXM6bn0pPT4oe25hbWU6dCxtZXRhZGF0YTplLGl0ZW1zOm4ubWFwKCh0PT4oe3RhZzp0LHJ1bnM6KG8uZ2V0KHQpfHxbXSkuc2xpY2UoKX0pKSl9KSkpfWZ1bmN0aW9uIHdyKHQsZSl7Y29uc3Qgbj1lcih0LnRhZyxlLnRhZyk7cmV0dXJuIDAhPW4/bjplcih0LnJ1bixlLnJ1bil9ZnVuY3Rpb24gU3IodCxlLG4pe3JldHVybiB4cih0LGUsbikubWFwKChmdW5jdGlvbiBpKHQpe2NvbnN0IGU9d2UuZmxhdHRlbih0Lml0ZW1zLm1hcCgoKHt0YWc6dCxydW5zOmV9KT0+ZS5tYXAoKGU9Pih7dGFnOnQscnVuOmV9KSkpKSkpO3JldHVybiBlLnNvcnQod3IpLHtuYW1lOnQubmFtZSxtZXRhZGF0YTp0Lm1ldGFkYXRhLGl0ZW1zOmV9fSkpfQovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dAogICAgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28KICAgIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLyEoZnVuY3Rpb24odCl7dFt0LlNFQVJDSF9SRVNVTFRTPTBdPSJTRUFSQ0hfUkVTVUxUUyIsdFt0LlBSRUZJWF9HUk9VUD0xXT0iUFJFRklYX0dST1VQIn0pKHZyfHwodnI9e30pKTtjb25zdCBNcj17YXR0YWNoZWQ6ITAsZGV0YWNoZWQ6ITAscmVhZHk6ITAsY3JlYXRlZDohMCxiZWZvcmVSZWdpc3RlcjohMCxyZWdpc3RlcmVkOiEwLGF0dHJpYnV0ZUNoYW5nZWQ6ITAsbGlzdGVuZXJzOiEwLGhvc3RBdHRyaWJ1dGVzOiEwfSxFcj17YXR0YWNoZWQ6ITAsZGV0YWNoZWQ6ITAscmVhZHk6ITAsY3JlYXRlZDohMCxiZWZvcmVSZWdpc3RlcjohMCxyZWdpc3RlcmVkOiEwLGF0dHJpYnV0ZUNoYW5nZWQ6ITAsYmVoYXZpb3JzOiEwLF9ub0FjY2Vzc29yczohMH0sVHI9T2JqZWN0LmFzc2lnbih7bGlzdGVuZXJzOiEwLGhvc3RBdHRyaWJ1dGVzOiEwLHByb3BlcnRpZXM6ITAsb2JzZXJ2ZXJzOiEwfSxFcik7ZnVuY3Rpb24gQ3IodCxlLG4saSl7IShmdW5jdGlvbiByKHQsZSxuKXtjb25zdCBpPXQuX25vQWNjZXNzb3JzLHI9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModCk7Zm9yKGxldCBvPTA7bzxyLmxlbmd0aDtvKyspe2xldCBhPXJbb107aWYoIShhIGluIG4pKWlmKGkpZVthXT10W2FdO2Vsc2V7bGV0IG49T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGEpO24mJihuLmNvbmZpZ3VyYWJsZT0hMCxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxhLG4pKX19fSkoZSx0LGkpO2ZvcihsZXQgdCBpbiBNcillW3RdJiYoblt0XT1uW3RdfHxbXSxuW3RdLnB1c2goZVt0XSkpfWZ1bmN0aW9uIEFyKHQsZSxuKXtlPWV8fFtdO2ZvcihsZXQgaT10Lmxlbmd0aC0xO2k+PTA7aS0tKXtsZXQgcj10W2ldO3I/QXJyYXkuaXNBcnJheShyKT9BcihyLGUpOmUuaW5kZXhPZihyKTwwJiYoIW58fG4uaW5kZXhPZihyKTwwKSYmZS51bnNoaWZ0KHIpOmNvbnNvbGUud2FybigiYmVoYXZpb3IgaXMgbnVsbCwgY2hlY2sgZm9yIG1pc3Npbmcgb3IgNDA0IGltcG9ydCIpfXJldHVybiBlfWZ1bmN0aW9uIGtyKHQsZSl7Zm9yKGNvbnN0IG4gaW4gZSl7Y29uc3QgaT10W25dLHI9ZVtuXTt0W25dPSEoInZhbHVlImluIHIpJiZpJiYidmFsdWUiaW4gaT9PYmplY3QuYXNzaWduKHt2YWx1ZTppLnZhbHVlfSxyKTpyfX1jb25zdCBMcj10cihIVE1MRWxlbWVudCk7ZnVuY3Rpb24gUHIodCxlLG4pe2xldCBpO2NvbnN0IHI9e307Y2xhc3MgbyBleHRlbmRzIGV7c3RhdGljIF9maW5hbGl6ZUNsYXNzKCl7aWYodGhpcy5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJnZW5lcmF0ZWRGcm9tIix0aGlzKSkpe2lmKGkpZm9yKGxldCB0LGU9MDtlPGkubGVuZ3RoO2UrKyl0PWlbZV0sdC5wcm9wZXJ0aWVzJiZ0aGlzLmNyZWF0ZVByb3BlcnRpZXModC5wcm9wZXJ0aWVzKSx0Lm9ic2VydmVycyYmdGhpcy5jcmVhdGVPYnNlcnZlcnModC5vYnNlcnZlcnMsdC5wcm9wZXJ0aWVzKTt0LnByb3BlcnRpZXMmJnRoaXMuY3JlYXRlUHJvcGVydGllcyh0LnByb3BlcnRpZXMpLHQub2JzZXJ2ZXJzJiZ0aGlzLmNyZWF0ZU9ic2VydmVycyh0Lm9ic2VydmVycyx0LnByb3BlcnRpZXMpLHRoaXMuX3ByZXBhcmVUZW1wbGF0ZSgpfWVsc2UgZS5fZmluYWxpemVDbGFzcy5jYWxsKHRoaXMpfXN0YXRpYyBnZXQgcHJvcGVydGllcygpe2NvbnN0IGU9e307aWYoaSlmb3IobGV0IHQ9MDt0PGkubGVuZ3RoO3QrKylrcihlLGlbdF0ucHJvcGVydGllcyk7cmV0dXJuIGtyKGUsdC5wcm9wZXJ0aWVzKSxlfXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7bGV0IGU9W107aWYoaSlmb3IobGV0IHQsbj0wO248aS5sZW5ndGg7bisrKXQ9aVtuXSx0Lm9ic2VydmVycyYmKGU9ZS5jb25jYXQodC5vYnNlcnZlcnMpKTtyZXR1cm4gdC5vYnNlcnZlcnMmJihlPWUuY29uY2F0KHQub2JzZXJ2ZXJzKSksZX1jcmVhdGVkKCl7c3VwZXIuY3JlYXRlZCgpO2NvbnN0IHQ9ci5jcmVhdGVkO2lmKHQpZm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXS5jYWxsKHRoaXMpfV9yZWdpc3RlcmVkKCl7Y29uc3QgdD1vLnByb3RvdHlwZTtpZighdC5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfX2hhc1JlZ2lzdGVyRmluaXNoZWQiLHQpKSl7dC5fX2hhc1JlZ2lzdGVyRmluaXNoZWQ9ITAsc3VwZXIuX3JlZ2lzdGVyZWQoKSx3JiZhKHQpO2NvbnN0IGU9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpO2xldCBuPXIuYmVmb3JlUmVnaXN0ZXI7aWYobilmb3IobGV0IHQ9MDt0PG4ubGVuZ3RoO3QrKyluW3RdLmNhbGwoZSk7aWYobj1yLnJlZ2lzdGVyZWQsbilmb3IobGV0IHQ9MDt0PG4ubGVuZ3RoO3QrKyluW3RdLmNhbGwoZSl9fV9hcHBseUxpc3RlbmVycygpe3N1cGVyLl9hcHBseUxpc3RlbmVycygpO2NvbnN0IHQ9ci5saXN0ZW5lcnM7aWYodClmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKyl7Y29uc3Qgbj10W2VdO2lmKG4pZm9yKGxldCB0IGluIG4pdGhpcy5fYWRkTWV0aG9kRXZlbnRMaXN0ZW5lclRvTm9kZSh0aGlzLHQsblt0XSl9fV9lbnN1cmVBdHRyaWJ1dGVzKCl7Y29uc3QgdD1yLmhvc3RBdHRyaWJ1dGVzO2lmKHQpZm9yKGxldCBlPXQubGVuZ3RoLTE7ZT49MDtlLS0pe2NvbnN0IG49dFtlXTtmb3IobGV0IHQgaW4gbil0aGlzLl9lbnN1cmVBdHRyaWJ1dGUodCxuW3RdKX1zdXBlci5fZW5zdXJlQXR0cmlidXRlcygpfXJlYWR5KCl7c3VwZXIucmVhZHkoKTtsZXQgdD1yLnJlYWR5O2lmKHQpZm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXS5jYWxsKHRoaXMpfWF0dGFjaGVkKCl7c3VwZXIuYXR0YWNoZWQoKTtsZXQgdD1yLmF0dGFjaGVkO2lmKHQpZm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXS5jYWxsKHRoaXMpfWRldGFjaGVkKCl7c3VwZXIuZGV0YWNoZWQoKTtsZXQgdD1yLmRldGFjaGVkO2lmKHQpZm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXS5jYWxsKHRoaXMpfWF0dHJpYnV0ZUNoYW5nZWQodCxlLG4pe3N1cGVyLmF0dHJpYnV0ZUNoYW5nZWQoKTtsZXQgaT1yLmF0dHJpYnV0ZUNoYW5nZWQ7aWYoaSlmb3IobGV0IHI9MDtyPGkubGVuZ3RoO3IrKylpW3JdLmNhbGwodGhpcyx0LGUsbil9fWlmKG4pe0FycmF5LmlzQXJyYXkobil8fChuPVtuXSk7bGV0IHQ9ZS5wcm90b3R5cGUuYmVoYXZpb3JzO2k9QXIobixudWxsLHQpLG8ucHJvdG90eXBlLmJlaGF2aW9ycz10P3QuY29uY2F0KG4pOml9Y29uc3QgYT1lPT57aSYmKGZ1bmN0aW9uIG4odCxlLGkpe2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKUNyKHQsZVtuXSxpLFRyKX0pKGUsaSxyKSxDcihlLHQscixFcil9O3JldHVybiB3fHxhKG8ucHJvdG90eXBlKSxvLmdlbmVyYXRlZEZyb209dCxvfWNvbnN0IE5yPWZ1bmN0aW9uKHQsZSl7dHx8Y29uc29sZS53YXJuKCJQb2x5bWVyLkNsYXNzIHJlcXVpcmVzIGBpbmZvYCBhcmd1bWVudCIpO2xldCBuPWU/ZShMcik6THI7cmV0dXJuIG49UHIodCxuLHQuYmVoYXZpb3JzKSxuLmlzPW4ucHJvdG90eXBlLmlzPXQuaXMsbn0sSXI9ZnVuY3Rpb24odCl7bGV0IGU7cmV0dXJuIGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpJci5DbGFzcyh0KSx0Ll9sZWdhY3lGb3JjZU9ic2VydmVkQXR0cmlidXRlcyYmKGUucHJvdG90eXBlLl9sZWdhY3lGb3JjZU9ic2VydmVkQXR0cmlidXRlcz10Ll9sZWdhY3lGb3JjZU9ic2VydmVkQXR0cmlidXRlcyksY3VzdG9tRWxlbWVudHMuZGVmaW5lKGUuaXMsZSksZX07Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCi8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCmZ1bmN0aW9uIE9yKHQsZSxuLGkscil7bGV0IG87ciYmKG89Im9iamVjdCI9PXR5cGVvZiBuJiZudWxsIT09bixvJiYoaT10Ll9fZGF0YVRlbXBbZV0pKTtsZXQgYT1pIT09biYmKGk9PWl8fG49PW4pO3JldHVybiBvJiZhJiYodC5fX2RhdGFUZW1wW2VdPW4pLGF9SXIuQ2xhc3M9TnI7Y29uc3QgUnI9SSgodD0+Y2xhc3MgZXh0ZW5kcyB0e19zaG91bGRQcm9wZXJ0eUNoYW5nZSh0LGUsbil7cmV0dXJuIE9yKHRoaXMsdCxlLG4sITApfX0pKSx6cj1JKCh0PT5jbGFzcyBleHRlbmRzIHR7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue211dGFibGVEYXRhOkJvb2xlYW59fV9zaG91bGRQcm9wZXJ0eUNoYW5nZSh0LGUsbil7cmV0dXJuIE9yKHRoaXMsdCxlLG4sdGhpcy5tdXRhYmxlRGF0YSl9fSkpO1JyLl9tdXRhYmxlUHJvcGVydHlDaGFuZ2U9T3I7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCmxldCBEcj1udWxsO2Z1bmN0aW9uIEJyKCl7cmV0dXJuIERyfUJyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEhUTUxUZW1wbGF0ZUVsZW1lbnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6QnIsd3JpdGFibGU6ITB9fSk7Y29uc3QgSHI9aGUoQnIpLEZyPVJyKEhyKSxWcj1oZShjbGFzc3t9KTtmdW5jdGlvbiBVcih0LGUpe2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXtsZXQgaT1lW25dO2lmKEJvb2xlYW4odCkhPUJvb2xlYW4oaS5fX2hpZGVUZW1wbGF0ZUNoaWxkcmVuX18pKWlmKGkubm9kZVR5cGU9PT1Ob2RlLlRFWFRfTk9ERSl0PyhpLl9fcG9seW1lclRleHRDb250ZW50X189aS50ZXh0Q29udGVudCxpLnRleHRDb250ZW50PSIiKTppLnRleHRDb250ZW50PWkuX19wb2x5bWVyVGV4dENvbnRlbnRfXztlbHNlIGlmKCJzbG90Ij09PWkubG9jYWxOYW1lKWlmKHQpaS5fX3BvbHltZXJSZXBsYWNlZF9fPWRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoImhpZGRlbi1zbG90IiksWShZKGkpLnBhcmVudE5vZGUpLnJlcGxhY2VDaGlsZChpLl9fcG9seW1lclJlcGxhY2VkX18saSk7ZWxzZXtjb25zdCB0PWkuX19wb2x5bWVyUmVwbGFjZWRfXzt0JiZZKFkodCkucGFyZW50Tm9kZSkucmVwbGFjZUNoaWxkKGksdCl9ZWxzZSBpLnN0eWxlJiYodD8oaS5fX3BvbHltZXJEaXNwbGF5X189aS5zdHlsZS5kaXNwbGF5LGkuc3R5bGUuZGlzcGxheT0ibm9uZSIpOmkuc3R5bGUuZGlzcGxheT1pLl9fcG9seW1lckRpc3BsYXlfXyk7aS5fX2hpZGVUZW1wbGF0ZUNoaWxkcmVuX189dCxpLl9zaG93SGlkZUNoaWxkcmVuJiZpLl9zaG93SGlkZUNoaWxkcmVuKHQpfX1jbGFzcyBqciBleHRlbmRzIFZye2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5fY29uZmlndXJlUHJvcGVydGllcyh0KSx0aGlzLnJvb3Q9dGhpcy5fc3RhbXBUZW1wbGF0ZSh0aGlzLl9fZGF0YUhvc3QpO2xldCBlPVtdO3RoaXMuY2hpbGRyZW49ZTtmb3IobGV0IHQ9dGhpcy5yb290LmZpcnN0Q2hpbGQ7dDt0PXQubmV4dFNpYmxpbmcpZS5wdXNoKHQpLHQuX190ZW1wbGF0aXplSW5zdGFuY2U9dGhpczt0aGlzLl9fdGVtcGxhdGl6ZU93bmVyJiZ0aGlzLl9fdGVtcGxhdGl6ZU93bmVyLl9faGlkZVRlbXBsYXRlQ2hpbGRyZW5fXyYmdGhpcy5fc2hvd0hpZGVDaGlsZHJlbighMCk7bGV0IG49dGhpcy5fX3RlbXBsYXRpemVPcHRpb25zOyh0JiZuLmluc3RhbmNlUHJvcHN8fCFuLmluc3RhbmNlUHJvcHMpJiZ0aGlzLl9lbmFibGVQcm9wZXJ0aWVzKCl9X2NvbmZpZ3VyZVByb3BlcnRpZXModCl7aWYodGhpcy5fX3RlbXBsYXRpemVPcHRpb25zLmZvcndhcmRIb3N0UHJvcClmb3IobGV0IHQgaW4gdGhpcy5fX2hvc3RQcm9wcyl0aGlzLl9zZXRQZW5kaW5nUHJvcGVydHkodCx0aGlzLl9fZGF0YUhvc3RbIl9ob3N0XyIrdF0pO2ZvcihsZXQgZSBpbiB0KXRoaXMuX3NldFBlbmRpbmdQcm9wZXJ0eShlLHRbZV0pfWZvcndhcmRIb3N0UHJvcCh0LGUpe3RoaXMuX3NldFBlbmRpbmdQcm9wZXJ0eU9yUGF0aCh0LGUsITEsITApJiZ0aGlzLl9fZGF0YUhvc3QuX2VucXVldWVDbGllbnQodGhpcyl9X2FkZEV2ZW50TGlzdGVuZXJUb05vZGUodCxlLG4pe2lmKHRoaXMuX21ldGhvZEhvc3QmJnRoaXMuX190ZW1wbGF0aXplT3B0aW9ucy5wYXJlbnRNb2RlbCl0aGlzLl9tZXRob2RIb3N0Ll9hZGRFdmVudExpc3RlbmVyVG9Ob2RlKHQsZSwodD0+e3QubW9kZWw9dGhpcyxuKHQpfSkpO2Vsc2V7bGV0IGk9dGhpcy5fX2RhdGFIb3N0Ll9fZGF0YUhvc3Q7aSYmaS5fYWRkRXZlbnRMaXN0ZW5lclRvTm9kZSh0LGUsbil9fV9zaG93SGlkZUNoaWxkcmVuKHQpe1VyKHQsdGhpcy5jaGlsZHJlbil9X3NldFVubWFuYWdlZFByb3BlcnR5VG9Ob2RlKHQsZSxuKXt0Ll9faGlkZVRlbXBsYXRlQ2hpbGRyZW5fXyYmdC5ub2RlVHlwZT09Tm9kZS5URVhUX05PREUmJiJ0ZXh0Q29udGVudCI9PWU/dC5fX3BvbHltZXJUZXh0Q29udGVudF9fPW46c3VwZXIuX3NldFVubWFuYWdlZFByb3BlcnR5VG9Ob2RlKHQsZSxuKX1nZXQgcGFyZW50TW9kZWwoKXtsZXQgdD10aGlzLl9fcGFyZW50TW9kZWw7aWYoIXQpe2xldCBlO3Q9dGhpcztkb3t0PXQuX19kYXRhSG9zdC5fX2RhdGFIb3N0fXdoaWxlKChlPXQuX190ZW1wbGF0aXplT3B0aW9ucykmJiFlLnBhcmVudE1vZGVsKTt0aGlzLl9fcGFyZW50TW9kZWw9dH1yZXR1cm4gdH1kaXNwYXRjaEV2ZW50KHQpe3JldHVybiEwfX1jb25zdCBHcj1Scihqcik7ZnVuY3Rpb24gV3IodCl7bGV0IGU9dC5fX2RhdGFIb3N0O3JldHVybiBlJiZlLl9tZXRob2RIb3N0fHxlfWZ1bmN0aW9uIHFyKHQsZSl7cmV0dXJuIGZ1bmN0aW9uIHQobixpLHIpe2UuY2FsbChuLl9fdGVtcGxhdGl6ZU93bmVyLGkuc3Vic3RyaW5nKCJfaG9zdF8iLmxlbmd0aCkscltpXSl9fWZ1bmN0aW9uIFlyKHQsZSl7cmV0dXJuIGZ1bmN0aW9uIHQobixpLHIpe2UuY2FsbChuLl9fdGVtcGxhdGl6ZU93bmVyLG4saSxyW2ldKX19ZnVuY3Rpb24gWHIodCxlLG4pe2lmKGImJiFXcih0KSl0aHJvdyBuZXcgRXJyb3IoInN0cmljdFRlbXBsYXRlUG9saWN5OiB0ZW1wbGF0ZSBvd25lciBub3QgdHJ1c3RlZCIpO2lmKG49bnx8e30sdC5fX3RlbXBsYXRpemVPd25lcil0aHJvdyBuZXcgRXJyb3IoIkEgPHRlbXBsYXRlPiBjYW4gb25seSBiZSB0ZW1wbGF0aXplZCBvbmNlIik7dC5fX3RlbXBsYXRpemVPd25lcj1lO2xldCBpPShlP2UuY29uc3RydWN0b3I6anIpLl9wYXJzZVRlbXBsYXRlKHQpLHI9aS50ZW1wbGF0aXplSW5zdGFuY2VDbGFzcztyfHwocj0oZnVuY3Rpb24gbyh0LGUsbil7bGV0IGk9bi5tdXRhYmxlRGF0YT9HcjpqcjtYci5taXhpbiYmKGk9WHIubWl4aW4oaSkpO2xldCByPWNsYXNzIGV4dGVuZHMgaXt9O3JldHVybiByLnByb3RvdHlwZS5fX3RlbXBsYXRpemVPcHRpb25zPW4sci5wcm90b3R5cGUuX2JpbmRUZW1wbGF0ZSh0KSwoZnVuY3Rpb24gbyh0LGUsbixpKXtsZXQgcj1uLmhvc3RQcm9wc3x8e307Zm9yKGxldCBlIGluIGkuaW5zdGFuY2VQcm9wcyl7ZGVsZXRlIHJbZV07bGV0IG49aS5ub3RpZnlJbnN0YW5jZVByb3A7biYmdC5wcm90b3R5cGUuX2FkZFByb3BlcnR5RWZmZWN0KGUsdC5wcm90b3R5cGUuUFJPUEVSVFlfRUZGRUNUX1RZUEVTLk5PVElGWSx7Zm46WXIoMCxuKX0pfWlmKGkuZm9yd2FyZEhvc3RQcm9wJiZlLl9fZGF0YUhvc3QpZm9yKGxldCBlIGluIHIpbi5oYXNIb3N0UHJvcHN8fChuLmhhc0hvc3RQcm9wcz0hMCksdC5wcm90b3R5cGUuX2FkZFByb3BlcnR5RWZmZWN0KGUsdC5wcm90b3R5cGUuUFJPUEVSVFlfRUZGRUNUX1RZUEVTLk5PVElGWSx7Zm46ZnVuY3Rpb24gdChlLG4saSl7ZS5fX2RhdGFIb3N0Ll9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgoIl9ob3N0XyIrbixpW25dLCEwLCEwKX19KX0pKHIsdCxlLG4pLHJ9KSh0LGksbiksaS50ZW1wbGF0aXplSW5zdGFuY2VDbGFzcz1yKTtjb25zdCBhPVdyKHQpOyEoZnVuY3Rpb24gcyh0LGUsbixpKXtsZXQgcj1uLmZvcndhcmRIb3N0UHJvcDtpZihyJiZlLmhhc0hvc3RQcm9wcyl7Y29uc3Qgbz0idGVtcGxhdGUiPT10LmxvY2FsTmFtZTtsZXQgYT1lLnRlbXBsYXRpemVUZW1wbGF0ZUNsYXNzO2lmKCFhKXtpZihvKXtsZXQgdD1uLm11dGFibGVEYXRhP0ZyOkhyO2NsYXNzIGkgZXh0ZW5kcyB0e31hPWUudGVtcGxhdGl6ZVRlbXBsYXRlQ2xhc3M9aX1lbHNle2NvbnN0IG49dC5jb25zdHJ1Y3RvcjtjbGFzcyBpIGV4dGVuZHMgbnt9YT1lLnRlbXBsYXRpemVUZW1wbGF0ZUNsYXNzPWl9bGV0IHM9ZS5ob3N0UHJvcHM7Zm9yKGxldCB0IGluIHMpYS5wcm90b3R5cGUuX2FkZFByb3BlcnR5RWZmZWN0KCJfaG9zdF8iK3QsYS5wcm90b3R5cGUuUFJPUEVSVFlfRUZGRUNUX1RZUEVTLlBST1BBR0FURSx7Zm46cXIoMCxyKX0pLGEucHJvdG90eXBlLl9jcmVhdGVOb3RpZnlpbmdQcm9wZXJ0eSgiX2hvc3RfIit0KTtTJiZpJiYoZnVuY3Rpb24gbyh0LGUsbil7Y29uc3QgaT1uLmNvbnN0cnVjdG9yLl9wcm9wZXJ0aWVzLHtwcm9wZXJ0eUVmZmVjdHM6cn09dCx7aW5zdGFuY2VQcm9wczpvfT1lO2ZvcihsZXQgdCBpbiByKWlmKCEoaVt0XXx8byYmb1t0XSkpe2NvbnN0IGU9clt0XTtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKyl7Y29uc3R7cGFydDppfT1lW25dLmluZm87aWYoIWkuc2lnbmF0dXJlfHwhaS5zaWduYXR1cmUuc3RhdGljKXtjb25zb2xlLndhcm4oYFByb3BlcnR5ICcke3R9JyB1c2VkIGluIHRlbXBsYXRlIGJ1dCBub3QgZGVjbGFyZWQgaW4gJ3Byb3BlcnRpZXMnOyBhdHRyaWJ1dGUgd2lsbCBub3QgYmUgb2JzZXJ2ZWQuYCk7YnJlYWt9fX19KShlLG4saSl9aWYodC5fX2RhdGFQcm90byYmT2JqZWN0LmFzc2lnbih0Ll9fZGF0YSx0Ll9fZGF0YVByb3RvKSxvKSEoZnVuY3Rpb24gYSh0LGUpe0RyPXQsT2JqZWN0LnNldFByb3RvdHlwZU9mKHQsZS5wcm90b3R5cGUpLG5ldyBlLERyPW51bGx9KSh0LGEpLHQuX19kYXRhVGVtcD17fSx0Ll9fZGF0YVBlbmRpbmc9bnVsbCx0Ll9fZGF0YU9sZD1udWxsLHQuX2VuYWJsZVByb3BlcnRpZXMoKTtlbHNle09iamVjdC5zZXRQcm90b3R5cGVPZih0LGEucHJvdG90eXBlKTtjb25zdCBuPWUuaG9zdFByb3BzO2ZvcihsZXQgZSBpbiBuKWlmKGU9Il9ob3N0XyIrZSxlIGluIHQpe2NvbnN0IG49dFtlXTtkZWxldGUgdFtlXSx0Ll9fZGF0YVtlXT1ufX19fSkodCxpLG4sYSk7bGV0IGw9Y2xhc3MgZXh0ZW5kcyBye307cmV0dXJuIGwucHJvdG90eXBlLl9tZXRob2RIb3N0PWEsbC5wcm90b3R5cGUuX19kYXRhSG9zdD10LGwucHJvdG90eXBlLl9fdGVtcGxhdGl6ZU93bmVyPWUsbC5wcm90b3R5cGUuX19ob3N0UHJvcHM9aS5ob3N0UHJvcHMsbD1sLGx9ZnVuY3Rpb24gJHIodCxlKXtsZXQgbjtmb3IoO2U7KWlmKG49ZS5fX2RhdGFIb3N0P2U6ZS5fX3RlbXBsYXRpemVJbnN0YW5jZSl7aWYobi5fX2RhdGFIb3N0PT10KXJldHVybiBuO2U9bi5fX2RhdGFIb3N0fWVsc2UgZT1ZKGUpLnBhcmVudE5vZGU7cmV0dXJuIG51bGx9Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovY29uc3QgS3I9e3RlbXBsYXRpemUodCxlKXt0aGlzLl90ZW1wbGF0aXplclRlbXBsYXRlPXQsdGhpcy5jdG9yPVhyKHQsdGhpcyx7bXV0YWJsZURhdGE6Qm9vbGVhbihlKSxwYXJlbnRNb2RlbDp0aGlzLl9wYXJlbnRNb2RlbCxpbnN0YW5jZVByb3BzOnRoaXMuX2luc3RhbmNlUHJvcHMsZm9yd2FyZEhvc3RQcm9wOnRoaXMuX2ZvcndhcmRIb3N0UHJvcFYyLG5vdGlmeUluc3RhbmNlUHJvcDp0aGlzLl9ub3RpZnlJbnN0YW5jZVByb3BWMn0pfSxzdGFtcCh0KXtyZXR1cm4gbmV3IHRoaXMuY3Rvcih0KX0sbW9kZWxGb3JFbGVtZW50KHQpe3JldHVybiAkcih0aGlzLl90ZW1wbGF0aXplclRlbXBsYXRlLHQpfX07Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovbGV0IFpyPSExO2Z1bmN0aW9uIEpyKCl7aWYodyYmIW0pe2lmKCFacil7WnI9ITA7Y29uc3QgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO3QudGV4dENvbnRlbnQ9ImRvbS1iaW5kLGRvbS1pZixkb20tcmVwZWF0e2Rpc3BsYXk6bm9uZTt9Iixkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHQpfXJldHVybiEwfXJldHVybiExfQovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dAogICAgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28KICAgIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqL2NvbnN0IFFyPWRpKHpyKGhlKEhUTUxFbGVtZW50KSkpO2N1c3RvbUVsZW1lbnRzLmRlZmluZSgiZG9tLWJpbmQiLGNsYXNzIGV4dGVuZHMgUXJ7c3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKXtyZXR1cm5bIm11dGFibGUtZGF0YSJdfWNvbnN0cnVjdG9yKCl7aWYoc3VwZXIoKSxiKXRocm93IG5ldyBFcnJvcigic3RyaWN0VGVtcGxhdGVQb2xpY3k6IGRvbS1iaW5kIG5vdCBhbGxvd2VkIik7dGhpcy5yb290PW51bGwsdGhpcy4kPW51bGwsdGhpcy5fX2NoaWxkcmVuPW51bGx9YXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHQsZSxuLGkpe3RoaXMubXV0YWJsZURhdGE9ITB9Y29ubmVjdGVkQ2FsbGJhY2soKXtKcigpfHwodGhpcy5zdHlsZS5kaXNwbGF5PSJub25lIiksdGhpcy5yZW5kZXIoKX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3RoaXMuX19yZW1vdmVDaGlsZHJlbigpfV9faW5zZXJ0Q2hpbGRyZW4oKXtZKFkodGhpcykucGFyZW50Tm9kZSkuaW5zZXJ0QmVmb3JlKHRoaXMucm9vdCx0aGlzKX1fX3JlbW92ZUNoaWxkcmVuKCl7aWYodGhpcy5fX2NoaWxkcmVuKWZvcihsZXQgdD0wO3Q8dGhpcy5fX2NoaWxkcmVuLmxlbmd0aDt0KyspdGhpcy5yb290LmFwcGVuZENoaWxkKHRoaXMuX19jaGlsZHJlblt0XSl9cmVuZGVyKCl7bGV0IHQ7aWYoIXRoaXMuX19jaGlsZHJlbil7aWYodD10fHx0aGlzLnF1ZXJ5U2VsZWN0b3IoInRlbXBsYXRlIiksIXQpe2xldCBlPW5ldyBNdXRhdGlvbk9ic2VydmVyKCgoKT0+e2lmKHQ9dGhpcy5xdWVyeVNlbGVjdG9yKCJ0ZW1wbGF0ZSIpLCF0KXRocm93IG5ldyBFcnJvcigiZG9tLWJpbmQgcmVxdWlyZXMgYSA8dGVtcGxhdGU+IGNoaWxkIik7ZS5kaXNjb25uZWN0KCksdGhpcy5yZW5kZXIoKX0pKTtyZXR1cm4gdm9pZCBlLm9ic2VydmUodGhpcyx7Y2hpbGRMaXN0OiEwfSl9dGhpcy5yb290PXRoaXMuX3N0YW1wVGVtcGxhdGUodCksdGhpcy4kPXRoaXMucm9vdC4kLHRoaXMuX19jaGlsZHJlbj1bXTtmb3IobGV0IHQ9dGhpcy5yb290LmZpcnN0Q2hpbGQ7dDt0PXQubmV4dFNpYmxpbmcpdGhpcy5fX2NoaWxkcmVuW3RoaXMuX19jaGlsZHJlbi5sZW5ndGhdPXQ7dGhpcy5fZW5hYmxlUHJvcGVydGllcygpfXRoaXMuX19pbnNlcnRDaGlsZHJlbigpLHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImRvbS1jaGFuZ2UiLHtidWJibGVzOiEwLGNvbXBvc2VkOiEwfSkpfX0pOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dAogICAgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28KICAgIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpjb25zdCB0bz16cih5ZSk7Y2xhc3MgZW8gZXh0ZW5kcyB0b3tzdGF0aWMgZ2V0IGlzKCl7cmV0dXJuImRvbS1yZXBlYXQifXN0YXRpYyBnZXQgdGVtcGxhdGUoKXtyZXR1cm4gbnVsbH1zdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57aXRlbXM6e3R5cGU6QXJyYXl9LGFzOnt0eXBlOlN0cmluZyx2YWx1ZToiaXRlbSJ9LGluZGV4QXM6e3R5cGU6U3RyaW5nLHZhbHVlOiJpbmRleCJ9LGl0ZW1zSW5kZXhBczp7dHlwZTpTdHJpbmcsdmFsdWU6Iml0ZW1zSW5kZXgifSxzb3J0Ont0eXBlOkZ1bmN0aW9uLG9ic2VydmVyOiJfX3NvcnRDaGFuZ2VkIn0sZmlsdGVyOnt0eXBlOkZ1bmN0aW9uLG9ic2VydmVyOiJfX2ZpbHRlckNoYW5nZWQifSxvYnNlcnZlOnt0eXBlOlN0cmluZyxvYnNlcnZlcjoiX19vYnNlcnZlQ2hhbmdlZCJ9LGRlbGF5Ok51bWJlcixyZW5kZXJlZEl0ZW1Db3VudDp7dHlwZTpOdW1iZXIsbm90aWZ5OiFrLHJlYWRPbmx5OiEwfSxpbml0aWFsQ291bnQ6e3R5cGU6TnVtYmVyfSx0YXJnZXRGcmFtZXJhdGU6e3R5cGU6TnVtYmVyLHZhbHVlOjIwfSxfdGFyZ2V0RnJhbWVUaW1lOnt0eXBlOk51bWJlcixjb21wdXRlZDoiX19jb21wdXRlRnJhbWVUaW1lKHRhcmdldEZyYW1lcmF0ZSkifSxub3RpZnlEb21DaGFuZ2U6e3R5cGU6Qm9vbGVhbn0scmV1c2VDaHVua2VkSW5zdGFuY2VzOnt0eXBlOkJvb2xlYW59fX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX19pdGVtc0NoYW5nZWQoaXRlbXMuKikiXX1jb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fX2luc3RhbmNlcz1bXSx0aGlzLl9fcmVuZGVyRGVib3VuY2VyPW51bGwsdGhpcy5fX2l0ZW1zSWR4VG9JbnN0SWR4PXt9LHRoaXMuX19jaHVua0NvdW50PW51bGwsdGhpcy5fX3JlbmRlclN0YXJ0VGltZT1udWxsLHRoaXMuX19pdGVtc0FycmF5Q2hhbmdlZD0hMSx0aGlzLl9fc2hvdWxkTWVhc3VyZUNodW5rPSExLHRoaXMuX19zaG91bGRDb250aW51ZUNodW5raW5nPSExLHRoaXMuX19jaHVua2luZ0lkPTAsdGhpcy5fX3NvcnRGbj1udWxsLHRoaXMuX19maWx0ZXJGbj1udWxsLHRoaXMuX19vYnNlcnZlUGF0aHM9bnVsbCx0aGlzLl9fY3Rvcj1udWxsLHRoaXMuX19pc0RldGFjaGVkPSEwLHRoaXMudGVtcGxhdGU9bnVsbH1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5fX2lzRGV0YWNoZWQ9ITA7Zm9yKGxldCB0PTA7dDx0aGlzLl9faW5zdGFuY2VzLmxlbmd0aDt0KyspdGhpcy5fX2RldGFjaEluc3RhbmNlKHQpfWNvbm5lY3RlZENhbGxiYWNrKCl7aWYoc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSxKcigpfHwodGhpcy5zdHlsZS5kaXNwbGF5PSJub25lIiksdGhpcy5fX2lzRGV0YWNoZWQpe3RoaXMuX19pc0RldGFjaGVkPSExO2xldCB0PVkoWSh0aGlzKS5wYXJlbnROb2RlKTtmb3IobGV0IGU9MDtlPHRoaXMuX19pbnN0YW5jZXMubGVuZ3RoO2UrKyl0aGlzLl9fYXR0YWNoSW5zdGFuY2UoZSx0KX19X19lbnN1cmVUZW1wbGF0aXplZCgpe2lmKCF0aGlzLl9fY3Rvcil7Y29uc3QgdD10aGlzO2xldCBlPXRoaXMudGVtcGxhdGU9dC5fdGVtcGxhdGVJbmZvP3Q6dGhpcy5xdWVyeVNlbGVjdG9yKCJ0ZW1wbGF0ZSIpO2lmKCFlKXtsZXQgdD1uZXcgTXV0YXRpb25PYnNlcnZlcigoKCk9PntpZighdGhpcy5xdWVyeVNlbGVjdG9yKCJ0ZW1wbGF0ZSIpKXRocm93IG5ldyBFcnJvcigiZG9tLXJlcGVhdCByZXF1aXJlcyBhIDx0ZW1wbGF0ZT4gY2hpbGQiKTt0LmRpc2Nvbm5lY3QoKSx0aGlzLl9fcmVuZGVyKCl9KSk7cmV0dXJuIHQub2JzZXJ2ZSh0aGlzLHtjaGlsZExpc3Q6ITB9KSwhMX1sZXQgbj17fTtuW3RoaXMuYXNdPSEwLG5bdGhpcy5pbmRleEFzXT0hMCxuW3RoaXMuaXRlbXNJbmRleEFzXT0hMCx0aGlzLl9fY3Rvcj1YcihlLHRoaXMse211dGFibGVEYXRhOnRoaXMubXV0YWJsZURhdGEscGFyZW50TW9kZWw6ITAsaW5zdGFuY2VQcm9wczpuLGZvcndhcmRIb3N0UHJvcDpmdW5jdGlvbih0LGUpe2xldCBuPXRoaXMuX19pbnN0YW5jZXM7Zm9yKGxldCBpLHI9MDtyPG4ubGVuZ3RoJiYoaT1uW3JdKTtyKyspaS5mb3J3YXJkSG9zdFByb3AodCxlKX0sbm90aWZ5SW5zdGFuY2VQcm9wOmZ1bmN0aW9uKHQsZSxuKXtpZihRKHRoaXMuYXMsZSkpe2xldCBpPXRbdGhpcy5pdGVtc0luZGV4QXNdO2U9PXRoaXMuYXMmJih0aGlzLml0ZW1zW2ldPW4pO2xldCByPUoodGhpcy5hcyxgJHtKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJpdGVtcyIsdGhpcyl9LiR7aX1gLGUpO3RoaXMubm90aWZ5UGF0aChyLG4pfX19KX1yZXR1cm4hMH1fX2dldE1ldGhvZEhvc3QoKXtyZXR1cm4gdGhpcy5fX2RhdGFIb3N0Ll9tZXRob2RIb3N0fHx0aGlzLl9fZGF0YUhvc3R9X19mdW5jdGlvbkZyb21Qcm9wZXJ0eVZhbHVlKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdCl7bGV0IGU9dCxuPXRoaXMuX19nZXRNZXRob2RIb3N0KCk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5bZV0uYXBwbHkobixhcmd1bWVudHMpfX1yZXR1cm4gdH1fX3NvcnRDaGFuZ2VkKHQpe3RoaXMuX19zb3J0Rm49dGhpcy5fX2Z1bmN0aW9uRnJvbVByb3BlcnR5VmFsdWUodCksdGhpcy5pdGVtcyYmdGhpcy5fX2RlYm91bmNlUmVuZGVyKHRoaXMuX19yZW5kZXIpfV9fZmlsdGVyQ2hhbmdlZCh0KXt0aGlzLl9fZmlsdGVyRm49dGhpcy5fX2Z1bmN0aW9uRnJvbVByb3BlcnR5VmFsdWUodCksdGhpcy5pdGVtcyYmdGhpcy5fX2RlYm91bmNlUmVuZGVyKHRoaXMuX19yZW5kZXIpfV9fY29tcHV0ZUZyYW1lVGltZSh0KXtyZXR1cm4gTWF0aC5jZWlsKDFlMy90KX1fX29ic2VydmVDaGFuZ2VkKCl7dGhpcy5fX29ic2VydmVQYXRocz10aGlzLm9ic2VydmUmJnRoaXMub2JzZXJ2ZS5yZXBsYWNlKCIuKiIsIi4iKS5zcGxpdCgiICIpfV9faGFuZGxlT2JzZXJ2ZWRQYXRocyh0KXtpZih0aGlzLl9fc29ydEZufHx0aGlzLl9fZmlsdGVyRm4paWYodCl7aWYodGhpcy5fX29ic2VydmVQYXRocyl7bGV0IGU9dGhpcy5fX29ic2VydmVQYXRocztmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKykwPT09dC5pbmRleE9mKGVbbl0pJiZ0aGlzLl9fZGVib3VuY2VSZW5kZXIodGhpcy5fX3JlbmRlcix0aGlzLmRlbGF5KX19ZWxzZSB0aGlzLl9fZGVib3VuY2VSZW5kZXIodGhpcy5fX3JlbmRlcix0aGlzLmRlbGF5KX1fX2l0ZW1zQ2hhbmdlZCh0KXt0aGlzLml0ZW1zJiYhQXJyYXkuaXNBcnJheSh0aGlzLml0ZW1zKSYmY29uc29sZS53YXJuKCJkb20tcmVwZWF0IGV4cGVjdGVkIGFycmF5IGZvciBgaXRlbXNgLCBmb3VuZCIsdGhpcy5pdGVtcyksdGhpcy5fX2hhbmRsZUl0ZW1QYXRoKHQucGF0aCx0LnZhbHVlKXx8KCJpdGVtcyI9PT10LnBhdGgmJih0aGlzLl9faXRlbXNBcnJheUNoYW5nZWQ9ITApLHRoaXMuX19kZWJvdW5jZVJlbmRlcih0aGlzLl9fcmVuZGVyKSl9X19kZWJvdW5jZVJlbmRlcih0LGU9MCl7dGhpcy5fX3JlbmRlckRlYm91bmNlcj1Fbi5kZWJvdW5jZSh0aGlzLl9fcmVuZGVyRGVib3VuY2VyLGU+MD9ndC5hZnRlcihlKTp2dCx0LmJpbmQodGhpcykpLENuKHRoaXMuX19yZW5kZXJEZWJvdW5jZXIpfXJlbmRlcigpe3RoaXMuX19kZWJvdW5jZVJlbmRlcih0aGlzLl9fcmVuZGVyKSx6aSgpfV9fcmVuZGVyKCl7aWYoIXRoaXMuX19lbnN1cmVUZW1wbGF0aXplZCgpKXJldHVybjtsZXQgdD10aGlzLml0ZW1zfHxbXTtjb25zdCBlPXRoaXMuX19zb3J0QW5kRmlsdGVySXRlbXModCksbj10aGlzLl9fY2FsY3VsYXRlTGltaXQoZS5sZW5ndGgpO3RoaXMuX191cGRhdGVJbnN0YW5jZXModCxuLGUpLHRoaXMuaW5pdGlhbENvdW50JiYodGhpcy5fX3Nob3VsZE1lYXN1cmVDaHVua3x8dGhpcy5fX3Nob3VsZENvbnRpbnVlQ2h1bmtpbmcpJiYoY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fX2NodW5raW5nSWQpLHRoaXMuX19jaHVua2luZ0lkPXJlcXVlc3RBbmltYXRpb25GcmFtZSgoKCk9PnRoaXMuX19jb250aW51ZUNodW5raW5nKCkpKSksdGhpcy5fc2V0UmVuZGVyZWRJdGVtQ291bnQodGhpcy5fX2luc3RhbmNlcy5sZW5ndGgpLGsmJiF0aGlzLm5vdGlmeURvbUNoYW5nZXx8dGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiZG9tLWNoYW5nZSIse2J1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSl9X19zb3J0QW5kRmlsdGVySXRlbXModCl7bGV0IGU9bmV3IEFycmF5KHQubGVuZ3RoKTtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKyllW25dPW47cmV0dXJuIHRoaXMuX19maWx0ZXJGbiYmKGU9ZS5maWx0ZXIoKChlLG4saSk9PnRoaXMuX19maWx0ZXJGbih0W2VdLG4saSkpKSksdGhpcy5fX3NvcnRGbiYmZS5zb3J0KCgoZSxuKT0+dGhpcy5fX3NvcnRGbih0W2VdLHRbbl0pKSksZX1fX2NhbGN1bGF0ZUxpbWl0KHQpe2xldCBlPXQ7Y29uc3Qgbj10aGlzLl9faW5zdGFuY2VzLmxlbmd0aDtpZih0aGlzLmluaXRpYWxDb3VudCl7bGV0IGk7IXRoaXMuX19jaHVua0NvdW50fHx0aGlzLl9faXRlbXNBcnJheUNoYW5nZWQmJiF0aGlzLnJldXNlQ2h1bmtlZEluc3RhbmNlcz8oZT1NYXRoLm1pbih0LHRoaXMuaW5pdGlhbENvdW50KSxpPU1hdGgubWF4KGUtbiwwKSx0aGlzLl9fY2h1bmtDb3VudD1pfHwxKTooaT1NYXRoLm1pbihNYXRoLm1heCh0LW4sMCksdGhpcy5fX2NodW5rQ291bnQpLGU9TWF0aC5taW4obitpLHQpKSx0aGlzLl9fc2hvdWxkTWVhc3VyZUNodW5rPWk9PT10aGlzLl9fY2h1bmtDb3VudCx0aGlzLl9fc2hvdWxkQ29udGludWVDaHVua2luZz1lPHQsdGhpcy5fX3JlbmRlclN0YXJ0VGltZT1wZXJmb3JtYW5jZS5ub3coKX1yZXR1cm4gdGhpcy5fX2l0ZW1zQXJyYXlDaGFuZ2VkPSExLGV9X19jb250aW51ZUNodW5raW5nKCl7aWYodGhpcy5fX3Nob3VsZE1lYXN1cmVDaHVuayl7Y29uc3QgdD1wZXJmb3JtYW5jZS5ub3coKS10aGlzLl9fcmVuZGVyU3RhcnRUaW1lO3RoaXMuX19jaHVua0NvdW50PU1hdGgucm91bmQodGhpcy5fX2NodW5rQ291bnQqKHRoaXMuX3RhcmdldEZyYW1lVGltZS90KSl8fDF9dGhpcy5fX3Nob3VsZENvbnRpbnVlQ2h1bmtpbmcmJnRoaXMuX19kZWJvdW5jZVJlbmRlcih0aGlzLl9fcmVuZGVyKX1fX3VwZGF0ZUluc3RhbmNlcyh0LGUsbil7Y29uc3QgaT10aGlzLl9faXRlbXNJZHhUb0luc3RJZHg9e307bGV0IHI7Zm9yKHI9MDtyPGU7cisrKXtsZXQgZT10aGlzLl9faW5zdGFuY2VzW3JdLG89bltyXSxhPXRbb107aVtvXT1yLGU/KGUuX3NldFBlbmRpbmdQcm9wZXJ0eSh0aGlzLmFzLGEpLGUuX3NldFBlbmRpbmdQcm9wZXJ0eSh0aGlzLmluZGV4QXMsciksZS5fc2V0UGVuZGluZ1Byb3BlcnR5KHRoaXMuaXRlbXNJbmRleEFzLG8pLGUuX2ZsdXNoUHJvcGVydGllcygpKTp0aGlzLl9faW5zZXJ0SW5zdGFuY2UoYSxyLG8pfWZvcihsZXQgdD10aGlzLl9faW5zdGFuY2VzLmxlbmd0aC0xO3Q+PXI7dC0tKXRoaXMuX19kZXRhY2hBbmRSZW1vdmVJbnN0YW5jZSh0KX1fX2RldGFjaEluc3RhbmNlKHQpe2xldCBlPXRoaXMuX19pbnN0YW5jZXNbdF07Y29uc3Qgbj1ZKGUucm9vdCk7Zm9yKGxldCB0PTA7dDxlLmNoaWxkcmVuLmxlbmd0aDt0Kyspbi5hcHBlbmRDaGlsZChlLmNoaWxkcmVuW3RdKTtyZXR1cm4gZX1fX2F0dGFjaEluc3RhbmNlKHQsZSl7ZS5pbnNlcnRCZWZvcmUodGhpcy5fX2luc3RhbmNlc1t0XS5yb290LHRoaXMpfV9fZGV0YWNoQW5kUmVtb3ZlSW5zdGFuY2UodCl7dGhpcy5fX2RldGFjaEluc3RhbmNlKHQpLHRoaXMuX19pbnN0YW5jZXMuc3BsaWNlKHQsMSl9X19zdGFtcEluc3RhbmNlKHQsZSxuKXtsZXQgaT17fTtyZXR1cm4gaVt0aGlzLmFzXT10LGlbdGhpcy5pbmRleEFzXT1lLGlbdGhpcy5pdGVtc0luZGV4QXNdPW4sbmV3IHRoaXMuX19jdG9yKGkpfV9faW5zZXJ0SW5zdGFuY2UodCxlLG4pe2NvbnN0IGk9dGhpcy5fX3N0YW1wSW5zdGFuY2UodCxlLG4pO2xldCByPXRoaXMuX19pbnN0YW5jZXNbZSsxXSxvPXI/ci5jaGlsZHJlblswXTp0aGlzO3JldHVybiBZKFkodGhpcykucGFyZW50Tm9kZSkuaW5zZXJ0QmVmb3JlKGkucm9vdCxvKSx0aGlzLl9faW5zdGFuY2VzW2VdPWksaX1fc2hvd0hpZGVDaGlsZHJlbih0KXtmb3IobGV0IGU9MDtlPHRoaXMuX19pbnN0YW5jZXMubGVuZ3RoO2UrKyl0aGlzLl9faW5zdGFuY2VzW2VdLl9zaG93SGlkZUNoaWxkcmVuKHQpfV9faGFuZGxlSXRlbVBhdGgodCxlKXtsZXQgbj10LnNsaWNlKDYpLGk9bi5pbmRleE9mKCIuIikscj1pPDA/bjpuLnN1YnN0cmluZygwLGkpO2lmKHI9PXBhcnNlSW50KHIsMTApKXtsZXQgdD1pPDA/IiI6bi5zdWJzdHJpbmcoaSsxKTt0aGlzLl9faGFuZGxlT2JzZXJ2ZWRQYXRocyh0KTtsZXQgbz10aGlzLl9faW5zdGFuY2VzW3RoaXMuX19pdGVtc0lkeFRvSW5zdElkeFtyXV07cmV0dXJuIG8mJihvLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgodGhpcy5hcysodD8iLiIrdDoiIiksZSwhMSwhMCksby5fZmx1c2hQcm9wZXJ0aWVzKCkpLCEwfX1pdGVtRm9yRWxlbWVudCh0KXtsZXQgZT10aGlzLm1vZGVsRm9yRWxlbWVudCh0KTtyZXR1cm4gZSYmZVt0aGlzLmFzXX1pbmRleEZvckVsZW1lbnQodCl7bGV0IGU9dGhpcy5tb2RlbEZvckVsZW1lbnQodCk7cmV0dXJuIGUmJmVbdGhpcy5pbmRleEFzXX1tb2RlbEZvckVsZW1lbnQodCl7cmV0dXJuICRyKHRoaXMudGVtcGxhdGUsdCl9fWN1c3RvbUVsZW1lbnRzLmRlZmluZShlby5pcyxlbyk7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCmNsYXNzIG5vIGV4dGVuZHMgeWV7c3RhdGljIGdldCBpcygpe3JldHVybiJkb20taWYifXN0YXRpYyBnZXQgdGVtcGxhdGUoKXtyZXR1cm4gbnVsbH1zdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57aWY6e3R5cGU6Qm9vbGVhbixvYnNlcnZlcjoiX19kZWJvdW5jZVJlbmRlciJ9LHJlc3RhbXA6e3R5cGU6Qm9vbGVhbixvYnNlcnZlcjoiX19kZWJvdW5jZVJlbmRlciJ9LG5vdGlmeURvbUNoYW5nZTp7dHlwZTpCb29sZWFufX19Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX19yZW5kZXJEZWJvdW5jZXI9bnVsbCx0aGlzLl9sYXN0SWY9ITEsdGhpcy5fX2hpZGVUZW1wbGF0ZUNoaWxkcmVuX189ITF9X19kZWJvdW5jZVJlbmRlcigpe3RoaXMuX19yZW5kZXJEZWJvdW5jZXI9RW4uZGVib3VuY2UodGhpcy5fX3JlbmRlckRlYm91bmNlcix2dCwoKCk9PnRoaXMuX19yZW5kZXIoKSkpLENuKHRoaXMuX19yZW5kZXJEZWJvdW5jZXIpfWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtjb25zdCB0PVkodGhpcykucGFyZW50Tm9kZTt0JiYodC5ub2RlVHlwZSE9Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFfHxZKHQpLmhvc3QpfHx0aGlzLl9fdGVhcmRvd25JbnN0YW5jZSgpfWNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSxKcigpfHwodGhpcy5zdHlsZS5kaXNwbGF5PSJub25lIiksdGhpcy5pZiYmdGhpcy5fX2RlYm91bmNlUmVuZGVyKCl9X19lbnN1cmVUZW1wbGF0ZSgpe2lmKCF0aGlzLl9fdGVtcGxhdGUpe2NvbnN0IHQ9dGhpcztsZXQgZT10Ll90ZW1wbGF0ZUluZm8/dDpZKHQpLnF1ZXJ5U2VsZWN0b3IoInRlbXBsYXRlIik7aWYoIWUpe2xldCB0PW5ldyBNdXRhdGlvbk9ic2VydmVyKCgoKT0+e2lmKCFZKHRoaXMpLnF1ZXJ5U2VsZWN0b3IoInRlbXBsYXRlIikpdGhyb3cgbmV3IEVycm9yKCJkb20taWYgcmVxdWlyZXMgYSA8dGVtcGxhdGU+IGNoaWxkIik7dC5kaXNjb25uZWN0KCksdGhpcy5fX3JlbmRlcigpfSkpO3JldHVybiB0Lm9ic2VydmUodGhpcyx7Y2hpbGRMaXN0OiEwfSksITF9dGhpcy5fX3RlbXBsYXRlPWV9cmV0dXJuITB9X19lbnN1cmVJbnN0YW5jZSgpe2xldCB0PVkodGhpcykucGFyZW50Tm9kZTtpZih0aGlzLl9faGFzSW5zdGFuY2UoKSl7bGV0IGU9dGhpcy5fX2dldEluc3RhbmNlTm9kZXMoKTtpZihlJiZlLmxlbmd0aCYmWSh0aGlzKS5wcmV2aW91c1NpYmxpbmchPT1lW2UubGVuZ3RoLTFdKWZvcihsZXQgbixpPTA7aTxlLmxlbmd0aCYmKG49ZVtpXSk7aSsrKVkodCkuaW5zZXJ0QmVmb3JlKG4sdGhpcyl9ZWxzZXtpZighdClyZXR1cm4hMTtpZighdGhpcy5fX2Vuc3VyZVRlbXBsYXRlKCkpcmV0dXJuITE7dGhpcy5fX2NyZWF0ZUFuZEluc2VydEluc3RhbmNlKHQpfXJldHVybiEwfXJlbmRlcigpe3ppKCl9X19yZW5kZXIoKXtpZih0aGlzLmlmKXtpZighdGhpcy5fX2Vuc3VyZUluc3RhbmNlKCkpcmV0dXJufWVsc2UgdGhpcy5yZXN0YW1wJiZ0aGlzLl9fdGVhcmRvd25JbnN0YW5jZSgpO3RoaXMuX3Nob3dIaWRlQ2hpbGRyZW4oKSxrJiYhdGhpcy5ub3RpZnlEb21DaGFuZ2V8fHRoaXMuaWY9PXRoaXMuX2xhc3RJZnx8KHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImRvbS1jaGFuZ2UiLHtidWJibGVzOiEwLGNvbXBvc2VkOiEwfSkpLHRoaXMuX2xhc3RJZj10aGlzLmlmKX1fX2hhc0luc3RhbmNlKCl7fV9fZ2V0SW5zdGFuY2VOb2Rlcygpe31fX2NyZWF0ZUFuZEluc2VydEluc3RhbmNlKHQpe31fX3RlYXJkb3duSW5zdGFuY2UoKXt9X3Nob3dIaWRlQ2hpbGRyZW4oKXt9fWNvbnN0IGlvPUE/Y2xhc3MgZXh0ZW5kcyBub3tjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fX2luc3RhbmNlPW51bGwsdGhpcy5fX3N5bmNJbmZvPW51bGx9X19oYXNJbnN0YW5jZSgpe3JldHVybiBCb29sZWFuKHRoaXMuX19pbnN0YW5jZSl9X19nZXRJbnN0YW5jZU5vZGVzKCl7cmV0dXJuIHRoaXMuX19pbnN0YW5jZS50ZW1wbGF0ZUluZm8uY2hpbGROb2Rlc31fX2NyZWF0ZUFuZEluc2VydEluc3RhbmNlKHQpe2NvbnN0IGU9dGhpcy5fX2RhdGFIb3N0fHx0aGlzO2lmKGImJiF0aGlzLl9fZGF0YUhvc3QpdGhyb3cgbmV3IEVycm9yKCJzdHJpY3RUZW1wbGF0ZVBvbGljeTogdGVtcGxhdGUgb3duZXIgbm90IHRydXN0ZWQiKTtjb25zdCBuPWUuX2JpbmRUZW1wbGF0ZSh0aGlzLl9fdGVtcGxhdGUsITApO24ucnVuRWZmZWN0cz0odCxlLG4pPT57bGV0IGk9dGhpcy5fX3N5bmNJbmZvO2lmKHRoaXMuaWYpaSYmKHRoaXMuX19zeW5jSW5mbz1udWxsLHRoaXMuX3Nob3dIaWRlQ2hpbGRyZW4oKSxlPU9iamVjdC5hc3NpZ24oaS5jaGFuZ2VkUHJvcHMsZSkpLHQoZSxuKTtlbHNlIGlmKHRoaXMuX19pbnN0YW5jZSlpZihpfHwoaT10aGlzLl9fc3luY0luZm89e3J1bkVmZmVjdHM6dCxjaGFuZ2VkUHJvcHM6e319KSxuKWZvcihjb25zdCB0IGluIGUpe2NvbnN0IGU9JCh0KTtpLmNoYW5nZWRQcm9wc1tlXT10aGlzLl9fZGF0YUhvc3RbZV19ZWxzZSBPYmplY3QuYXNzaWduKGkuY2hhbmdlZFByb3BzLGUpfSx0aGlzLl9faW5zdGFuY2U9ZS5fc3RhbXBUZW1wbGF0ZSh0aGlzLl9fdGVtcGxhdGUsbiksWSh0KS5pbnNlcnRCZWZvcmUodGhpcy5fX2luc3RhbmNlLHRoaXMpfV9fc3luY0hvc3RQcm9wZXJ0aWVzKCl7Y29uc3QgdD10aGlzLl9fc3luY0luZm87dCYmKHRoaXMuX19zeW5jSW5mbz1udWxsLHQucnVuRWZmZWN0cyh0LmNoYW5nZWRQcm9wcywhMSkpfV9fdGVhcmRvd25JbnN0YW5jZSgpe3RoaXMuX19pbnN0YW5jZSYmKCh0aGlzLl9fZGF0YUhvc3R8fHRoaXMpLl9yZW1vdmVCb3VuZERvbSh0aGlzLl9faW5zdGFuY2UpLHRoaXMuX19pbnN0YW5jZT1udWxsLHRoaXMuX19zeW5jSW5mbz1udWxsKX1fc2hvd0hpZGVDaGlsZHJlbigpe2NvbnN0IHQ9dGhpcy5fX2hpZGVUZW1wbGF0ZUNoaWxkcmVuX198fCF0aGlzLmlmO3RoaXMuX19pbnN0YW5jZSYmQm9vbGVhbih0aGlzLl9faW5zdGFuY2UuX19oaWRkZW4pIT09dCYmKHRoaXMuX19pbnN0YW5jZS5fX2hpZGRlbj10LFVyKHQsdGhpcy5fX2luc3RhbmNlLnRlbXBsYXRlSW5mby5jaGlsZE5vZGVzKSksdHx8dGhpcy5fX3N5bmNIb3N0UHJvcGVydGllcygpfX06Y2xhc3MgZXh0ZW5kcyBub3tjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fX2N0b3I9bnVsbCx0aGlzLl9faW5zdGFuY2U9bnVsbCx0aGlzLl9faW52YWxpZFByb3BzPW51bGx9X19oYXNJbnN0YW5jZSgpe3JldHVybiBCb29sZWFuKHRoaXMuX19pbnN0YW5jZSl9X19nZXRJbnN0YW5jZU5vZGVzKCl7cmV0dXJuIHRoaXMuX19pbnN0YW5jZS5jaGlsZHJlbn1fX2NyZWF0ZUFuZEluc2VydEluc3RhbmNlKHQpe3RoaXMuX19jdG9yfHwodGhpcy5fX2N0b3I9WHIodGhpcy5fX3RlbXBsYXRlLHRoaXMse211dGFibGVEYXRhOiEwLGZvcndhcmRIb3N0UHJvcDpmdW5jdGlvbih0LGUpe3RoaXMuX19pbnN0YW5jZSYmKHRoaXMuaWY/dGhpcy5fX2luc3RhbmNlLmZvcndhcmRIb3N0UHJvcCh0LGUpOih0aGlzLl9faW52YWxpZFByb3BzPXRoaXMuX19pbnZhbGlkUHJvcHN8fE9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fX2ludmFsaWRQcm9wc1skKHQpXT0hMCkpfX0pKSx0aGlzLl9faW5zdGFuY2U9bmV3IHRoaXMuX19jdG9yLFkodCkuaW5zZXJ0QmVmb3JlKHRoaXMuX19pbnN0YW5jZS5yb290LHRoaXMpfV9fdGVhcmRvd25JbnN0YW5jZSgpe2lmKHRoaXMuX19pbnN0YW5jZSl7bGV0IHQ9dGhpcy5fX2luc3RhbmNlLmNoaWxkcmVuO2lmKHQmJnQubGVuZ3RoKXtsZXQgZT1ZKHRbMF0pLnBhcmVudE5vZGU7aWYoZSl7ZT1ZKGUpO2ZvcihsZXQgbixpPTA7aTx0Lmxlbmd0aCYmKG49dFtpXSk7aSsrKWUucmVtb3ZlQ2hpbGQobil9fXRoaXMuX19pbnZhbGlkUHJvcHM9bnVsbCx0aGlzLl9faW5zdGFuY2U9bnVsbH19X19zeW5jSG9zdFByb3BlcnRpZXMoKXtsZXQgdD10aGlzLl9faW52YWxpZFByb3BzO2lmKHQpe3RoaXMuX19pbnZhbGlkUHJvcHM9bnVsbDtmb3IobGV0IGUgaW4gdCl0aGlzLl9faW5zdGFuY2UuX3NldFBlbmRpbmdQcm9wZXJ0eShlLHRoaXMuX19kYXRhSG9zdFtlXSk7dGhpcy5fX2luc3RhbmNlLl9mbHVzaFByb3BlcnRpZXMoKX19X3Nob3dIaWRlQ2hpbGRyZW4oKXtjb25zdCB0PXRoaXMuX19oaWRlVGVtcGxhdGVDaGlsZHJlbl9ffHwhdGhpcy5pZjt0aGlzLl9faW5zdGFuY2UmJkJvb2xlYW4odGhpcy5fX2luc3RhbmNlLl9faGlkZGVuKSE9PXQmJih0aGlzLl9faW5zdGFuY2UuX19oaWRkZW49dCx0aGlzLl9faW5zdGFuY2UuX3Nob3dIaWRlQ2hpbGRyZW4odCkpLHR8fHRoaXMuX19zeW5jSG9zdFByb3BlcnRpZXMoKX19O2N1c3RvbUVsZW1lbnRzLmRlZmluZShpby5pcyxpbyk7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCmxldCBybz1JKCh0PT57bGV0IGU9bWUodCk7cmV0dXJuIGNsYXNzIGV4dGVuZHMgZXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57aXRlbXM6e3R5cGU6QXJyYXl9LG11bHRpOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHNlbGVjdGVkOnt0eXBlOk9iamVjdCxub3RpZnk6ITB9LHNlbGVjdGVkSXRlbTp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSx0b2dnbGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX19fXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfX3VwZGF0ZVNlbGVjdGlvbihtdWx0aSwgaXRlbXMuKikiXX1jb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fX2xhc3RJdGVtcz1udWxsLHRoaXMuX19sYXN0TXVsdGk9bnVsbCx0aGlzLl9fc2VsZWN0ZWRNYXA9bnVsbH1fX3VwZGF0ZVNlbGVjdGlvbih0LGUpe2xldCBuPWUucGF0aDtpZihuPT1KU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJpdGVtcyIsdGhpcykpe2xldCBuPWUuYmFzZXx8W10saT10aGlzLl9fbGFzdEl0ZW1zO2lmKHQhPT10aGlzLl9fbGFzdE11bHRpJiZ0aGlzLmNsZWFyU2VsZWN0aW9uKCksaSl7bGV0IHQ9TmkobixpKTt0aGlzLl9fYXBwbHlTcGxpY2VzKHQpfXRoaXMuX19sYXN0SXRlbXM9bix0aGlzLl9fbGFzdE11bHRpPXR9ZWxzZSBpZihlLnBhdGg9PWAke0pTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIml0ZW1zIix0aGlzKX0uc3BsaWNlc2ApdGhpcy5fX2FwcGx5U3BsaWNlcyhlLnZhbHVlLmluZGV4U3BsaWNlcyk7ZWxzZXtsZXQgdD1uLnNsaWNlKGAke0pTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIml0ZW1zIix0aGlzKX0uYC5sZW5ndGgpLGU9cGFyc2VJbnQodCwxMCk7dC5pbmRleE9mKCIuIik8MCYmdD09ZSYmdGhpcy5fX2Rlc2VsZWN0Q2hhbmdlZElkeChlKX19X19hcHBseVNwbGljZXModCl7bGV0IGU9dGhpcy5fX3NlbGVjdGVkTWFwO2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKXtsZXQgaT10W25dO2UuZm9yRWFjaCgoKHQsbik9Pnt0PGkuaW5kZXh8fGUuc2V0KG4sdD49aS5pbmRleCtpLnJlbW92ZWQubGVuZ3RoP3QraS5hZGRlZENvdW50LWkucmVtb3ZlZC5sZW5ndGg6LTEpfSkpO2ZvcihsZXQgdD0wO3Q8aS5hZGRlZENvdW50O3QrKyl7bGV0IG49aS5pbmRleCt0O2UuaGFzKHRoaXMuaXRlbXNbbl0pJiZlLnNldCh0aGlzLml0ZW1zW25dLG4pfX10aGlzLl9fdXBkYXRlTGlua3MoKTtsZXQgbj0wO2UuZm9yRWFjaCgoKHQsaSk9Pnt0PDA/KHRoaXMubXVsdGk/dGhpcy5zcGxpY2UoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgic2VsZWN0ZWQiLHRoaXMpLG4sMSk6dGhpcy5zZWxlY3RlZD10aGlzLnNlbGVjdGVkSXRlbT1udWxsLGUuZGVsZXRlKGkpKTpuKyt9KSl9X191cGRhdGVMaW5rcygpe2lmKHRoaXMuX19kYXRhTGlua2VkUGF0aHM9e30sdGhpcy5tdWx0aSl7bGV0IHQ9MDt0aGlzLl9fc2VsZWN0ZWRNYXAuZm9yRWFjaCgoZT0+e2U+PTAmJnRoaXMubGlua1BhdGhzKGAke0pTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIml0ZW1zIix0aGlzKX0uJHtlfWAsYCR7SlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgic2VsZWN0ZWQiLHRoaXMpfS4ke3QrK31gKX0pKX1lbHNlIHRoaXMuX19zZWxlY3RlZE1hcC5mb3JFYWNoKCh0PT57dGhpcy5saW5rUGF0aHMoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgic2VsZWN0ZWQiLHRoaXMpLGAke0pTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIml0ZW1zIix0aGlzKX0uJHt0fWApLHRoaXMubGlua1BhdGhzKEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoInNlbGVjdGVkSXRlbSIsdGhpcyksYCR7SlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiaXRlbXMiLHRoaXMpfS4ke3R9YCl9KSl9Y2xlYXJTZWxlY3Rpb24oKXt0aGlzLl9fZGF0YUxpbmtlZFBhdGhzPXt9LHRoaXMuX19zZWxlY3RlZE1hcD1uZXcgTWFwLHRoaXMuc2VsZWN0ZWQ9dGhpcy5tdWx0aT9bXTpudWxsLHRoaXMuc2VsZWN0ZWRJdGVtPW51bGx9aXNTZWxlY3RlZCh0KXtyZXR1cm4gdGhpcy5fX3NlbGVjdGVkTWFwLmhhcyh0KX1pc0luZGV4U2VsZWN0ZWQodCl7cmV0dXJuIHRoaXMuaXNTZWxlY3RlZCh0aGlzLml0ZW1zW3RdKX1fX2Rlc2VsZWN0Q2hhbmdlZElkeCh0KXtsZXQgZT10aGlzLl9fc2VsZWN0ZWRJbmRleEZvckl0ZW1JbmRleCh0KTtpZihlPj0wKXtsZXQgdD0wO3RoaXMuX19zZWxlY3RlZE1hcC5mb3JFYWNoKCgobixpKT0+e2U9PXQrKyYmdGhpcy5kZXNlbGVjdChpKX0pKX19X19zZWxlY3RlZEluZGV4Rm9ySXRlbUluZGV4KHQpe2xldCBlPXRoaXMuX19kYXRhTGlua2VkUGF0aHNbYCR7SlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiaXRlbXMiLHRoaXMpfS4ke3R9YF07aWYoZSlyZXR1cm4gcGFyc2VJbnQoZS5zbGljZShgJHtKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJzZWxlY3RlZCIsdGhpcyl9LmAubGVuZ3RoKSwxMCl9ZGVzZWxlY3QodCl7bGV0IGU9dGhpcy5fX3NlbGVjdGVkTWFwLmdldCh0KTtpZihlPj0wKXtsZXQgbjt0aGlzLl9fc2VsZWN0ZWRNYXAuZGVsZXRlKHQpLHRoaXMubXVsdGkmJihuPXRoaXMuX19zZWxlY3RlZEluZGV4Rm9ySXRlbUluZGV4KGUpKSx0aGlzLl9fdXBkYXRlTGlua3MoKSx0aGlzLm11bHRpP3RoaXMuc3BsaWNlKEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoInNlbGVjdGVkIix0aGlzKSxuLDEpOnRoaXMuc2VsZWN0ZWQ9dGhpcy5zZWxlY3RlZEl0ZW09bnVsbH19ZGVzZWxlY3RJbmRleCh0KXt0aGlzLmRlc2VsZWN0KHRoaXMuaXRlbXNbdF0pfXNlbGVjdCh0KXt0aGlzLnNlbGVjdEluZGV4KHRoaXMuaXRlbXMuaW5kZXhPZih0KSl9c2VsZWN0SW5kZXgodCl7bGV0IGU9dGhpcy5pdGVtc1t0XTt0aGlzLmlzU2VsZWN0ZWQoZSk/dGhpcy50b2dnbGUmJnRoaXMuZGVzZWxlY3RJbmRleCh0KToodGhpcy5tdWx0aXx8dGhpcy5fX3NlbGVjdGVkTWFwLmNsZWFyKCksdGhpcy5fX3NlbGVjdGVkTWFwLnNldChlLHQpLHRoaXMuX191cGRhdGVMaW5rcygpLHRoaXMubXVsdGk/dGhpcy5wdXNoKEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoInNlbGVjdGVkIix0aGlzKSxlKTp0aGlzLnNlbGVjdGVkPXRoaXMuc2VsZWN0ZWRJdGVtPWUpfX19KSkoeWUpO2NsYXNzIG9vIGV4dGVuZHMgcm97c3RhdGljIGdldCBpcygpe3JldHVybiJhcnJheS1zZWxlY3RvciJ9c3RhdGljIGdldCB0ZW1wbGF0ZSgpe3JldHVybiBudWxsfX1jdXN0b21FbGVtZW50cy5kZWZpbmUob28uaXMsb28pOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dAogICAgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28KICAgIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpjb25zdCBhbz1uZXcgd247d2luZG93LlNoYWR5Q1NTfHwod2luZG93LlNoYWR5Q1NTPXtwcmVwYXJlVGVtcGxhdGUodCxlLG4pe30scHJlcGFyZVRlbXBsYXRlRG9tKHQsZSl7fSxwcmVwYXJlVGVtcGxhdGVTdHlsZXModCxlLG4pe30sc3R5bGVTdWJ0cmVlKHQsZSl7YW8ucHJvY2Vzc1N0eWxlcygpLEplKHQsZSl9LHN0eWxlRWxlbWVudCh0KXthby5wcm9jZXNzU3R5bGVzKCl9LHN0eWxlRG9jdW1lbnQodCl7YW8ucHJvY2Vzc1N0eWxlcygpLEplKGRvY3VtZW50LmJvZHksdCl9LGdldENvbXB1dGVkU3R5bGVWYWx1ZToodCxlKT0+UWUodCxlKSxmbHVzaEN1c3RvbVN0eWxlcygpe30sbmF0aXZlQ3NzOkFlLG5hdGl2ZVNoYWRvdzpTZSxjc3NCdWlsZDpFZSxkaXNhYmxlUnVudGltZTpDZX0pLHdpbmRvdy5TaGFkeUNTUy5DdXN0b21TdHlsZUludGVyZmFjZT1hbzsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KY29uc3Qgc289ImluY2x1ZGUiLGxvPXdpbmRvdy5TaGFkeUNTUy5DdXN0b21TdHlsZUludGVyZmFjZTtjbGFzcyBjbyBleHRlbmRzIEhUTUxFbGVtZW50e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9zdHlsZT1udWxsLGxvLmFkZEN1c3RvbVN0eWxlKHRoaXMpfWdldFN0eWxlKCl7aWYodGhpcy5fc3R5bGUpcmV0dXJuIHRoaXMuX3N0eWxlO2NvbnN0IHQ9dGhpcy5xdWVyeVNlbGVjdG9yKCJzdHlsZSIpO2lmKCF0KXJldHVybiBudWxsO3RoaXMuX3N0eWxlPXQ7Y29uc3QgZT10LmdldEF0dHJpYnV0ZShzbyk7cmV0dXJuIGUmJih0LnJlbW92ZUF0dHJpYnV0ZShzbyksdC50ZXh0Q29udGVudD0oZnVuY3Rpb24gbih0KXtsZXQgZT10LnRyaW0oKS5zcGxpdCgvXHMrLyksbj0iIjtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyluKz1xKGVbdF0pO3JldHVybiBufSkoZSkrdC50ZXh0Q29udGVudCksdGhpcy5vd25lckRvY3VtZW50IT09d2luZG93LmRvY3VtZW50JiZ3aW5kb3cuZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh0aGlzKSx0aGlzLl9zdHlsZX19Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCmxldCB1bzt3aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCJjdXN0b20tc3R5bGUiLGNvKSx1bz1Sci5fbXV0YWJsZVByb3BlcnR5Q2hhbmdlO2NvbnN0IGhvPXtwcm9wZXJ0aWVzOnttdXRhYmxlRGF0YTpCb29sZWFufSxfc2hvdWxkUHJvcGVydHlDaGFuZ2UodCxlLG4pe3JldHVybiB1byh0aGlzLHQsZSxuLHRoaXMubXV0YWJsZURhdGEpfX0scG89dHIoSFRNTEVsZW1lbnQpLnByb3RvdHlwZTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCnZhciBmbz1uZXcgU2V0O2NvbnN0IG1vPXtwcm9wZXJ0aWVzOntfcGFyZW50UmVzaXphYmxlOnt0eXBlOk9iamVjdCxvYnNlcnZlcjoiX3BhcmVudFJlc2l6YWJsZUNoYW5nZWQifSxfbm90aWZ5aW5nRGVzY2VuZGFudDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfX0sbGlzdGVuZXJzOnsiaXJvbi1yZXF1ZXN0LXJlc2l6ZS1ub3RpZmljYXRpb25zIjoiX29uSXJvblJlcXVlc3RSZXNpemVOb3RpZmljYXRpb25zIn0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuX2ludGVyZXN0ZWRSZXNpemFibGVzPVtdLHRoaXMuX2JvdW5kTm90aWZ5UmVzaXplPXRoaXMubm90aWZ5UmVzaXplLmJpbmQodGhpcyksdGhpcy5fYm91bmRPbkRlc2NlbmRhbnRJcm9uUmVzaXplPXRoaXMuX29uRGVzY2VuZGFudElyb25SZXNpemUuYmluZCh0aGlzKX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9yZXF1ZXN0UmVzaXplTm90aWZpY2F0aW9ucygpfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX3BhcmVudFJlc2l6YWJsZT90aGlzLl9wYXJlbnRSZXNpemFibGUuc3RvcFJlc2l6ZU5vdGlmaWNhdGlvbnNGb3IodGhpcyk6KGZvLmRlbGV0ZSh0aGlzKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLl9ib3VuZE5vdGlmeVJlc2l6ZSkpLHRoaXMuX3BhcmVudFJlc2l6YWJsZT1udWxsfSxub3RpZnlSZXNpemU6ZnVuY3Rpb24oKXt0aGlzLmlzQXR0YWNoZWQmJih0aGlzLl9pbnRlcmVzdGVkUmVzaXphYmxlcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0aGlzLnJlc2l6ZXJTaG91bGROb3RpZnkodCkmJnRoaXMuX25vdGlmeURlc2NlbmRhbnQodCl9KSx0aGlzKSx0aGlzLl9maXJlUmVzaXplKCkpfSxhc3NpZ25QYXJlbnRSZXNpemFibGU6ZnVuY3Rpb24odCl7dGhpcy5fcGFyZW50UmVzaXphYmxlJiZ0aGlzLl9wYXJlbnRSZXNpemFibGUuc3RvcFJlc2l6ZU5vdGlmaWNhdGlvbnNGb3IodGhpcyksdGhpcy5fcGFyZW50UmVzaXphYmxlPXQsdCYmLTE9PT10Ll9pbnRlcmVzdGVkUmVzaXphYmxlcy5pbmRleE9mKHRoaXMpJiYodC5faW50ZXJlc3RlZFJlc2l6YWJsZXMucHVzaCh0aGlzKSx0Ll9zdWJzY3JpYmVJcm9uUmVzaXplKHRoaXMpKX0sc3RvcFJlc2l6ZU5vdGlmaWNhdGlvbnNGb3I6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5faW50ZXJlc3RlZFJlc2l6YWJsZXMuaW5kZXhPZih0KTtlPi0xJiYodGhpcy5faW50ZXJlc3RlZFJlc2l6YWJsZXMuc3BsaWNlKGUsMSksdGhpcy5fdW5zdWJzY3JpYmVJcm9uUmVzaXplKHQpKX0sX3N1YnNjcmliZUlyb25SZXNpemU6ZnVuY3Rpb24odCl7dC5hZGRFdmVudExpc3RlbmVyKCJpcm9uLXJlc2l6ZSIsdGhpcy5fYm91bmRPbkRlc2NlbmRhbnRJcm9uUmVzaXplKX0sX3Vuc3Vic2NyaWJlSXJvblJlc2l6ZTpmdW5jdGlvbih0KXt0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImlyb24tcmVzaXplIix0aGlzLl9ib3VuZE9uRGVzY2VuZGFudElyb25SZXNpemUpfSxyZXNpemVyU2hvdWxkTm90aWZ5OmZ1bmN0aW9uKHQpe3JldHVybiEwfSxfb25EZXNjZW5kYW50SXJvblJlc2l6ZTpmdW5jdGlvbih0KXt0aGlzLl9ub3RpZnlpbmdEZXNjZW5kYW50P3Quc3RvcFByb3BhZ2F0aW9uKCk6bXx8dGhpcy5fZmlyZVJlc2l6ZSgpfSxfZmlyZVJlc2l6ZTpmdW5jdGlvbigpe3RoaXMuZmlyZSgiaXJvbi1yZXNpemUiLG51bGwse25vZGU6dGhpcyxidWJibGVzOiExfSl9LF9vbklyb25SZXF1ZXN0UmVzaXplTm90aWZpY2F0aW9uczpmdW5jdGlvbih0KXt2YXIgZT1xaSh0KS5yb290VGFyZ2V0O2UhPT10aGlzJiYoZS5hc3NpZ25QYXJlbnRSZXNpemFibGUodGhpcyksdGhpcy5fbm90aWZ5RGVzY2VuZGFudChlKSx0LnN0b3BQcm9wYWdhdGlvbigpKX0sX3BhcmVudFJlc2l6YWJsZUNoYW5nZWQ6ZnVuY3Rpb24odCl7dCYmd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdGhpcy5fYm91bmROb3RpZnlSZXNpemUpfSxfbm90aWZ5RGVzY2VuZGFudDpmdW5jdGlvbih0KXt0aGlzLmlzQXR0YWNoZWQmJih0aGlzLl9ub3RpZnlpbmdEZXNjZW5kYW50PSEwLHQubm90aWZ5UmVzaXplKCksdGhpcy5fbm90aWZ5aW5nRGVzY2VuZGFudD0hMSl9LF9yZXF1ZXN0UmVzaXplTm90aWZpY2F0aW9uczpmdW5jdGlvbigpe2lmKHRoaXMuaXNBdHRhY2hlZClpZigibG9hZGluZyI9PT1kb2N1bWVudC5yZWFkeVN0YXRlKXt2YXIgdD10aGlzLl9yZXF1ZXN0UmVzaXplTm90aWZpY2F0aW9ucy5iaW5kKHRoaXMpO2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInJlYWR5c3RhdGVjaGFuZ2UiLChmdW5jdGlvbiBlKCl7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVhZHlzdGF0ZWNoYW5nZSIsZSksdCgpfSkpfWVsc2UgdGhpcy5fZmluZFBhcmVudCgpLHRoaXMuX3BhcmVudFJlc2l6YWJsZT90aGlzLl9wYXJlbnRSZXNpemFibGUuX2ludGVyZXN0ZWRSZXNpemFibGVzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QhPT10aGlzJiZ0Ll9maW5kUGFyZW50KCl9KSx0aGlzKTooZm8uZm9yRWFjaCgoZnVuY3Rpb24odCl7dCE9PXRoaXMmJnQuX2ZpbmRQYXJlbnQoKX0pLHRoaXMpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMuX2JvdW5kTm90aWZ5UmVzaXplKSx0aGlzLm5vdGlmeVJlc2l6ZSgpKX0sX2ZpbmRQYXJlbnQ6ZnVuY3Rpb24oKXt0aGlzLmFzc2lnblBhcmVudFJlc2l6YWJsZShudWxsKSx0aGlzLmZpcmUoImlyb24tcmVxdWVzdC1yZXNpemUtbm90aWZpY2F0aW9ucyIsbnVsbCx7bm9kZTp0aGlzLGJ1YmJsZXM6ITAsY2FuY2VsYWJsZTohMH0pLHRoaXMuX3BhcmVudFJlc2l6YWJsZT9mby5kZWxldGUodGhpcyk6Zm8uYWRkKHRoaXMpfX07dmFyIGdvPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLElyb25SZXNpemFibGVCZWhhdmlvcjptb30pOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi9Jcih7X3RlbXBsYXRlOl9lYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogdmFyKC0taXJvbi1jb2xsYXBzZS10cmFuc2l0aW9uLWR1cmF0aW9uLCAzMDBtcyk7CiAgICAgICAgLyogU2FmYXJpIDEwIG5lZWRzIHRoaXMgcHJvcGVydHkgcHJlZml4ZWQgdG8gY29ycmVjdGx5IGFwcGx5IHRoZSBjdXN0b20gcHJvcGVydHkgKi8KICAgICAgICAtd2Via2l0LXRyYW5zaXRpb24tZHVyYXRpb246IHZhcigtLWlyb24tY29sbGFwc2UtdHJhbnNpdGlvbi1kdXJhdGlvbiwgMzAwbXMpOwogICAgICAgIG92ZXJmbG93OiB2aXNpYmxlOwogICAgICB9CgogICAgICA6aG9zdCguaXJvbi1jb2xsYXBzZS1jbG9zZWQpIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CgogICAgICA6aG9zdCg6bm90KC5pcm9uLWNvbGxhcHNlLW9wZW5lZCkpIHsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxzbG90Pjwvc2xvdD4KYCxpczoiaXJvbi1jb2xsYXBzZSIsYmVoYXZpb3JzOlttb10scHJvcGVydGllczp7aG9yaXpvbnRhbDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG9ic2VydmVyOiJfaG9yaXpvbnRhbENoYW5nZWQifSxvcGVuZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9vcGVuZWRDaGFuZ2VkIn0sdHJhbnNpdGlvbmluZzp7dHlwZTpCb29sZWFuLG5vdGlmeTohMCxyZWFkT25seTohMH0sbm9BbmltYXRpb246e3R5cGU6Qm9vbGVhbn0sX2Rlc2lyZWRTaXplOnt0eXBlOlN0cmluZyx2YWx1ZToiIn19LGdldCBkaW1lbnNpb24oKXtyZXR1cm4gdGhpcy5ob3Jpem9udGFsPyJ3aWR0aCI6ImhlaWdodCJ9LGdldCBfZGltZW5zaW9uTWF4KCl7cmV0dXJuIHRoaXMuaG9yaXpvbnRhbD8ibWF4V2lkdGgiOiJtYXhIZWlnaHQifSxnZXQgX2RpbWVuc2lvbk1heENzcygpe3JldHVybiB0aGlzLmhvcml6b250YWw/Im1heC13aWR0aCI6Im1heC1oZWlnaHQifSxob3N0QXR0cmlidXRlczp7cm9sZToiZ3JvdXAiLCJhcmlhLWhpZGRlbiI6InRydWUifSxsaXN0ZW5lcnM6e3RyYW5zaXRpb25lbmQ6Il9vblRyYW5zaXRpb25FbmQifSx0b2dnbGU6ZnVuY3Rpb24oKXt0aGlzLm9wZW5lZD0hdGhpcy5vcGVuZWR9LHNob3c6ZnVuY3Rpb24oKXt0aGlzLm9wZW5lZD0hMH0saGlkZTpmdW5jdGlvbigpe3RoaXMub3BlbmVkPSExfSx1cGRhdGVTaXplOmZ1bmN0aW9uKHQsZSl7dD0iYXV0byI9PT10PyIiOnQ7dmFyIG49ZSYmIXRoaXMubm9BbmltYXRpb24mJnRoaXMuaXNBdHRhY2hlZCYmdGhpcy5fZGVzaXJlZFNpemUhPT10O2lmKHRoaXMuX2Rlc2lyZWRTaXplPXQsdGhpcy5fdXBkYXRlVHJhbnNpdGlvbighMSksbil7dmFyIGk9dGhpcy5fY2FsY1NpemUoKTsiIj09PXQmJih0aGlzLnN0eWxlW3RoaXMuX2RpbWVuc2lvbk1heF09IiIsdD10aGlzLl9jYWxjU2l6ZSgpKSx0aGlzLnN0eWxlW3RoaXMuX2RpbWVuc2lvbk1heF09aSx0aGlzLnNjcm9sbFRvcD10aGlzLnNjcm9sbFRvcCx0aGlzLl91cGRhdGVUcmFuc2l0aW9uKCEwKSxuPXQhPT1pfXRoaXMuc3R5bGVbdGhpcy5fZGltZW5zaW9uTWF4XT10LG58fHRoaXMuX3RyYW5zaXRpb25FbmQoKX0sZW5hYmxlVHJhbnNpdGlvbjpmdW5jdGlvbih0KXtwby5fd2FybigiYGVuYWJsZVRyYW5zaXRpb24oKWAgaXMgZGVwcmVjYXRlZCwgdXNlIGBub0FuaW1hdGlvbmAgaW5zdGVhZC4iKSx0aGlzLm5vQW5pbWF0aW9uPSF0fSxfdXBkYXRlVHJhbnNpdGlvbjpmdW5jdGlvbih0KXt0aGlzLnN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbj10JiYhdGhpcy5ub0FuaW1hdGlvbj8iIjoiMHMifSxfaG9yaXpvbnRhbENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnRyYW5zaXRpb25Qcm9wZXJ0eT10aGlzLl9kaW1lbnNpb25NYXhDc3MsdGhpcy5zdHlsZVsibWF4V2lkdGgiPT09dGhpcy5fZGltZW5zaW9uTWF4PyJtYXhIZWlnaHQiOiJtYXhXaWR0aCJdPSIiLHRoaXMudXBkYXRlU2l6ZSh0aGlzLm9wZW5lZD8iYXV0byI6IjBweCIsITEpfSxfb3BlbmVkQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsIXRoaXMub3BlbmVkKSx0aGlzLl9zZXRUcmFuc2l0aW9uaW5nKCEwKSx0aGlzLnRvZ2dsZUNsYXNzKCJpcm9uLWNvbGxhcHNlLWNsb3NlZCIsITEpLHRoaXMudG9nZ2xlQ2xhc3MoImlyb24tY29sbGFwc2Utb3BlbmVkIiwhMSksdGhpcy51cGRhdGVTaXplKHRoaXMub3BlbmVkPyJhdXRvIjoiMHB4IiwhMCksdGhpcy5vcGVuZWQmJnRoaXMuZm9jdXMoKX0sX3RyYW5zaXRpb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLnN0eWxlW3RoaXMuX2RpbWVuc2lvbk1heF09dGhpcy5fZGVzaXJlZFNpemUsdGhpcy50b2dnbGVDbGFzcygiaXJvbi1jb2xsYXBzZS1jbG9zZWQiLCF0aGlzLm9wZW5lZCksdGhpcy50b2dnbGVDbGFzcygiaXJvbi1jb2xsYXBzZS1vcGVuZWQiLHRoaXMub3BlbmVkKSx0aGlzLl91cGRhdGVUcmFuc2l0aW9uKCExKSx0aGlzLm5vdGlmeVJlc2l6ZSgpLHRoaXMuX3NldFRyYW5zaXRpb25pbmcoITEpfSxfb25UcmFuc2l0aW9uRW5kOmZ1bmN0aW9uKHQpe3FpKHQpLnJvb3RUYXJnZXQ9PT10aGlzJiZ0aGlzLl90cmFuc2l0aW9uRW5kKCl9LF9jYWxjU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW3RoaXMuZGltZW5zaW9uXSsicHgifX0pOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KY29uc3QgX289X2VgCi8qIE1vc3QgY29tbW9uIHVzZWQgZmxleCBzdHlsZXMqLwo8ZG9tLW1vZHVsZSBpZD0iaXJvbi1mbGV4Ij4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIC5sYXlvdXQuaG9yaXpvbnRhbCwKICAgICAgLmxheW91dC52ZXJ0aWNhbCB7CiAgICAgICAgZGlzcGxheTogLW1zLWZsZXhib3g7CiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1mbGV4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuaW5saW5lIHsKICAgICAgICBkaXNwbGF5OiAtbXMtaW5saW5lLWZsZXhib3g7CiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1pbmxpbmUtZmxleDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgfQoKICAgICAgLmxheW91dC5ob3Jpem9udGFsIHsKICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICAtd2Via2l0LWZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgfQoKICAgICAgLmxheW91dC52ZXJ0aWNhbCB7CiAgICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgLXdlYmtpdC1mbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIH0KCiAgICAgIC5sYXlvdXQud3JhcCB7CiAgICAgICAgLW1zLWZsZXgtd3JhcDogd3JhcDsKICAgICAgICAtd2Via2l0LWZsZXgtd3JhcDogd3JhcDsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQubm8td3JhcCB7CiAgICAgICAgLW1zLWZsZXgtd3JhcDogbm93cmFwOwogICAgICAgIC13ZWJraXQtZmxleC13cmFwOiBub3dyYXA7CiAgICAgICAgZmxleC13cmFwOiBub3dyYXA7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuY2VudGVyLAogICAgICAubGF5b3V0LmNlbnRlci1jZW50ZXIgewogICAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuY2VudGVyLWp1c3RpZmllZCwKICAgICAgLmxheW91dC5jZW50ZXItY2VudGVyIHsKICAgICAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfQoKICAgICAgLmZsZXggewogICAgICAgIC1tcy1mbGV4OiAxIDEgMC4wMDAwMDAwMDFweDsKICAgICAgICAtd2Via2l0LWZsZXg6IDE7CiAgICAgICAgZmxleDogMTsKICAgICAgICAtd2Via2l0LWZsZXgtYmFzaXM6IDAuMDAwMDAwMDAxcHg7CiAgICAgICAgZmxleC1iYXNpczogMC4wMDAwMDAwMDFweDsKICAgICAgfQoKICAgICAgLmZsZXgtYXV0byB7CiAgICAgICAgLW1zLWZsZXg6IDEgMSBhdXRvOwogICAgICAgIC13ZWJraXQtZmxleDogMSAxIGF1dG87CiAgICAgICAgZmxleDogMSAxIGF1dG87CiAgICAgIH0KCiAgICAgIC5mbGV4LW5vbmUgewogICAgICAgIC1tcy1mbGV4OiBub25lOwogICAgICAgIC13ZWJraXQtZmxleDogbm9uZTsKICAgICAgICBmbGV4OiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KLyogQmFzaWMgZmxleGJveCByZXZlcnNlIHN0eWxlcyAqLwo8ZG9tLW1vZHVsZSBpZD0iaXJvbi1mbGV4LXJldmVyc2UiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgLmxheW91dC5ob3Jpem9udGFsLXJldmVyc2UsCiAgICAgIC5sYXlvdXQudmVydGljYWwtcmV2ZXJzZSB7CiAgICAgICAgZGlzcGxheTogLW1zLWZsZXhib3g7CiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1mbGV4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuaG9yaXpvbnRhbC1yZXZlcnNlIHsKICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOwogICAgICAgIC13ZWJraXQtZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTsKICAgICAgfQoKICAgICAgLmxheW91dC52ZXJ0aWNhbC1yZXZlcnNlIHsKICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlOwogICAgICAgIC13ZWJraXQtZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlOwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTsKICAgICAgfQoKICAgICAgLmxheW91dC53cmFwLXJldmVyc2UgewogICAgICAgIC1tcy1mbGV4LXdyYXA6IHdyYXAtcmV2ZXJzZTsKICAgICAgICAtd2Via2l0LWZsZXgtd3JhcDogd3JhcC1yZXZlcnNlOwogICAgICAgIGZsZXgtd3JhcDogd3JhcC1yZXZlcnNlOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KLyogRmxleGJveCBhbGlnbm1lbnQgKi8KPGRvbS1tb2R1bGUgaWQ9Imlyb24tZmxleC1hbGlnbm1lbnQiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgLyoqCiAgICAgICAqIEFsaWdubWVudCBpbiBjcm9zcyBheGlzLgogICAgICAgKi8KICAgICAgLmxheW91dC5zdGFydCB7CiAgICAgICAgLW1zLWZsZXgtYWxpZ246IHN0YXJ0OwogICAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7CiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuY2VudGVyLAogICAgICAubGF5b3V0LmNlbnRlci1jZW50ZXIgewogICAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuZW5kIHsKICAgICAgICAtbXMtZmxleC1hbGlnbjogZW5kOwogICAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGZsZXgtZW5kOwogICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDsKICAgICAgfQoKICAgICAgLmxheW91dC5iYXNlbGluZSB7CiAgICAgICAgLW1zLWZsZXgtYWxpZ246IGJhc2VsaW5lOwogICAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGJhc2VsaW5lOwogICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIEFsaWdubWVudCBpbiBtYWluIGF4aXMuCiAgICAgICAqLwogICAgICAubGF5b3V0LnN0YXJ0LWp1c3RpZmllZCB7CiAgICAgICAgLW1zLWZsZXgtcGFjazogc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgICB9CgogICAgICAubGF5b3V0LmNlbnRlci1qdXN0aWZpZWQsCiAgICAgIC5sYXlvdXQuY2VudGVyLWNlbnRlciB7CiAgICAgICAgLW1zLWZsZXgtcGFjazogY2VudGVyOwogICAgICAgIC13ZWJraXQtanVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuZW5kLWp1c3RpZmllZCB7CiAgICAgICAgLW1zLWZsZXgtcGFjazogZW5kOwogICAgICAgIC13ZWJraXQtanVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICB9CgogICAgICAubGF5b3V0LmFyb3VuZC1qdXN0aWZpZWQgewogICAgICAgIC1tcy1mbGV4LXBhY2s6IGRpc3RyaWJ1dGU7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsKICAgICAgfQoKICAgICAgLmxheW91dC5qdXN0aWZpZWQgewogICAgICAgIC1tcy1mbGV4LXBhY2s6IGp1c3RpZnk7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICB9CgogICAgICAvKioKICAgICAgICogU2VsZiBhbGlnbm1lbnQuCiAgICAgICAqLwogICAgICAuc2VsZi1zdGFydCB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1zZWxmOiBmbGV4LXN0YXJ0OwogICAgICAgIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7CiAgICAgIH0KCiAgICAgIC5zZWxmLWNlbnRlciB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGNlbnRlcjsKICAgICAgICAtd2Via2l0LWFsaWduLXNlbGY6IGNlbnRlcjsKICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5zZWxmLWVuZCB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGZsZXgtZW5kOwogICAgICAgIC13ZWJraXQtYWxpZ24tc2VsZjogZmxleC1lbmQ7CiAgICAgICAgYWxpZ24tc2VsZjogZmxleC1lbmQ7CiAgICAgIH0KCiAgICAgIC5zZWxmLXN0cmV0Y2ggewogICAgICAgIC1tcy1hbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICAgIC13ZWJraXQtYWxpZ24tc2VsZjogc3RyZXRjaDsKICAgICAgICBhbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICB9CgogICAgICAuc2VsZi1iYXNlbGluZSB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGJhc2VsaW5lOwogICAgICAgIC13ZWJraXQtYWxpZ24tc2VsZjogYmFzZWxpbmU7CiAgICAgICAgYWxpZ24tc2VsZjogYmFzZWxpbmU7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBtdWx0aS1saW5lIGFsaWdubWVudCBpbiBtYWluIGF4aXMuCiAgICAgICAqLwogICAgICAubGF5b3V0LnN0YXJ0LWFsaWduZWQgewogICAgICAgIC1tcy1mbGV4LWxpbmUtcGFjazogc3RhcnQ7ICAvKiBJRTEwICovCiAgICAgICAgLW1zLWFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgICAgIGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuZW5kLWFsaWduZWQgewogICAgICAgIC1tcy1mbGV4LWxpbmUtcGFjazogZW5kOyAgLyogSUUxMCAqLwogICAgICAgIC1tcy1hbGlnbi1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgICAtd2Via2l0LWFsaWduLWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgIGFsaWduLWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICB9CgogICAgICAubGF5b3V0LmNlbnRlci1hbGlnbmVkIHsKICAgICAgICAtbXMtZmxleC1saW5lLXBhY2s6IGNlbnRlcjsgIC8qIElFMTAgKi8KICAgICAgICAtbXMtYWxpZ24tY29udGVudDogY2VudGVyOwogICAgICAgIC13ZWJraXQtYWxpZ24tY29udGVudDogY2VudGVyOwogICAgICAgIGFsaWduLWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfQoKICAgICAgLmxheW91dC5iZXR3ZWVuLWFsaWduZWQgewogICAgICAgIC1tcy1mbGV4LWxpbmUtcGFjazoganVzdGlmeTsgIC8qIElFMTAgKi8KICAgICAgICAtbXMtYWxpZ24tY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICAtd2Via2l0LWFsaWduLWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgYWxpZ24tY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgfQoKICAgICAgLmxheW91dC5hcm91bmQtYWxpZ25lZCB7CiAgICAgICAgLW1zLWZsZXgtbGluZS1wYWNrOiBkaXN0cmlidXRlOyAgLyogSUUxMCAqLwogICAgICAgIC1tcy1hbGlnbi1jb250ZW50OiBzcGFjZS1hcm91bmQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1jb250ZW50OiBzcGFjZS1hcm91bmQ7CiAgICAgICAgYWxpZ24tY29udGVudDogc3BhY2UtYXJvdW5kOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KLyogTm9uLWZsZXhib3ggcG9zaXRpb25pbmcgaGVscGVyIHN0eWxlcyAqLwo8ZG9tLW1vZHVsZSBpZD0iaXJvbi1mbGV4LWZhY3RvcnMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgLmZsZXgsCiAgICAgIC5mbGV4LTEgewogICAgICAgIC1tcy1mbGV4OiAxIDEgMC4wMDAwMDAwMDFweDsKICAgICAgICAtd2Via2l0LWZsZXg6IDE7CiAgICAgICAgZmxleDogMTsKICAgICAgICAtd2Via2l0LWZsZXgtYmFzaXM6IDAuMDAwMDAwMDAxcHg7CiAgICAgICAgZmxleC1iYXNpczogMC4wMDAwMDAwMDFweDsKICAgICAgfQoKICAgICAgLmZsZXgtMiB7CiAgICAgICAgLW1zLWZsZXg6IDI7CiAgICAgICAgLXdlYmtpdC1mbGV4OiAyOwogICAgICAgIGZsZXg6IDI7CiAgICAgIH0KCiAgICAgIC5mbGV4LTMgewogICAgICAgIC1tcy1mbGV4OiAzOwogICAgICAgIC13ZWJraXQtZmxleDogMzsKICAgICAgICBmbGV4OiAzOwogICAgICB9CgogICAgICAuZmxleC00IHsKICAgICAgICAtbXMtZmxleDogNDsKICAgICAgICAtd2Via2l0LWZsZXg6IDQ7CiAgICAgICAgZmxleDogNDsKICAgICAgfQoKICAgICAgLmZsZXgtNSB7CiAgICAgICAgLW1zLWZsZXg6IDU7CiAgICAgICAgLXdlYmtpdC1mbGV4OiA1OwogICAgICAgIGZsZXg6IDU7CiAgICAgIH0KCiAgICAgIC5mbGV4LTYgewogICAgICAgIC1tcy1mbGV4OiA2OwogICAgICAgIC13ZWJraXQtZmxleDogNjsKICAgICAgICBmbGV4OiA2OwogICAgICB9CgogICAgICAuZmxleC03IHsKICAgICAgICAtbXMtZmxleDogNzsKICAgICAgICAtd2Via2l0LWZsZXg6IDc7CiAgICAgICAgZmxleDogNzsKICAgICAgfQoKICAgICAgLmZsZXgtOCB7CiAgICAgICAgLW1zLWZsZXg6IDg7CiAgICAgICAgLXdlYmtpdC1mbGV4OiA4OwogICAgICAgIGZsZXg6IDg7CiAgICAgIH0KCiAgICAgIC5mbGV4LTkgewogICAgICAgIC1tcy1mbGV4OiA5OwogICAgICAgIC13ZWJraXQtZmxleDogOTsKICAgICAgICBmbGV4OiA5OwogICAgICB9CgogICAgICAuZmxleC0xMCB7CiAgICAgICAgLW1zLWZsZXg6IDEwOwogICAgICAgIC13ZWJraXQtZmxleDogMTA7CiAgICAgICAgZmxleDogMTA7CiAgICAgIH0KCiAgICAgIC5mbGV4LTExIHsKICAgICAgICAtbXMtZmxleDogMTE7CiAgICAgICAgLXdlYmtpdC1mbGV4OiAxMTsKICAgICAgICBmbGV4OiAxMTsKICAgICAgfQoKICAgICAgLmZsZXgtMTIgewogICAgICAgIC1tcy1mbGV4OiAxMjsKICAgICAgICAtd2Via2l0LWZsZXg6IDEyOwogICAgICAgIGZsZXg6IDEyOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KPGRvbS1tb2R1bGUgaWQ9Imlyb24tcG9zaXRpb25pbmciPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgLmJsb2NrIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgW2hpZGRlbl0gewogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgLmludmlzaWJsZSB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIC5yZWxhdGl2ZSB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAuZml0IHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICB9CgogICAgICBib2R5LmZ1bGxibGVlZCB7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIGhlaWdodDogMTAwdmg7CiAgICAgIH0KCiAgICAgIC5zY3JvbGwgewogICAgICAgIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgfQoKICAgICAgLyogZml4ZWQgcG9zaXRpb24gKi8KICAgICAgLmZpeGVkLWJvdHRvbSwKICAgICAgLmZpeGVkLWxlZnQsCiAgICAgIC5maXhlZC1yaWdodCwKICAgICAgLmZpeGVkLXRvcCB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICB9CgogICAgICAuZml4ZWQtdG9wIHsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgfQoKICAgICAgLmZpeGVkLXJpZ2h0IHsKICAgICAgICB0b3A6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICB9CgogICAgICAuZml4ZWQtYm90dG9tIHsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgfQoKICAgICAgLmZpeGVkLWxlZnQgewogICAgICAgIHRvcDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+CmA7X28uc2V0QXR0cmlidXRlKCJzdHlsZSIsImRpc3BsYXk6IG5vbmU7IiksZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChfby5jb250ZW50KTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCmNvbnN0IHlvPV9lYAo8Y3VzdG9tLXN0eWxlPgogIDxzdHlsZSBpcz0iY3VzdG9tLXN0eWxlIj4KICAgIFtoaWRkZW5dIHsKICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgfQogIDwvc3R5bGU+CjwvY3VzdG9tLXN0eWxlPgo8Y3VzdG9tLXN0eWxlPgogIDxzdHlsZSBpcz0iY3VzdG9tLXN0eWxlIj4KICAgIGh0bWwgewoKICAgICAgLS1sYXlvdXQ6IHsKICAgICAgICBkaXNwbGF5OiAtbXMtZmxleGJveDsKICAgICAgICBkaXNwbGF5OiAtd2Via2l0LWZsZXg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWlubGluZTogewogICAgICAgIGRpc3BsYXk6IC1tcy1pbmxpbmUtZmxleGJveDsKICAgICAgICBkaXNwbGF5OiAtd2Via2l0LWlubGluZS1mbGV4OwogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtaG9yaXpvbnRhbDogewogICAgICAgIEBhcHBseSAtLWxheW91dDsKCiAgICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgLXdlYmtpdC1mbGV4LWRpcmVjdGlvbjogcm93OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgIH07CgogICAgICAtLWxheW91dC1ob3Jpem9udGFsLXJldmVyc2U6IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQ7CgogICAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7CiAgICAgICAgLXdlYmtpdC1mbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtdmVydGljYWw6IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQ7CgogICAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIC13ZWJraXQtZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtdmVydGljYWwtcmV2ZXJzZTogewogICAgICAgIEBhcHBseSAtLWxheW91dDsKCiAgICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTsKICAgICAgICAtd2Via2l0LWZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7CiAgICAgIH07CgogICAgICAtLWxheW91dC13cmFwOiB7CiAgICAgICAgLW1zLWZsZXgtd3JhcDogd3JhcDsKICAgICAgICAtd2Via2l0LWZsZXgtd3JhcDogd3JhcDsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIH07CgogICAgICAtLWxheW91dC13cmFwLXJldmVyc2U6IHsKICAgICAgICAtbXMtZmxleC13cmFwOiB3cmFwLXJldmVyc2U7CiAgICAgICAgLXdlYmtpdC1mbGV4LXdyYXA6IHdyYXAtcmV2ZXJzZTsKICAgICAgICBmbGV4LXdyYXA6IHdyYXAtcmV2ZXJzZTsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtYXV0bzogewogICAgICAgIC1tcy1mbGV4OiAxIDEgYXV0bzsKICAgICAgICAtd2Via2l0LWZsZXg6IDEgMSBhdXRvOwogICAgICAgIGZsZXg6IDEgMSBhdXRvOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleC1ub25lOiB7CiAgICAgICAgLW1zLWZsZXg6IG5vbmU7CiAgICAgICAgLXdlYmtpdC1mbGV4OiBub25lOwogICAgICAgIGZsZXg6IG5vbmU7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4OiB7CiAgICAgICAgLW1zLWZsZXg6IDEgMSAwLjAwMDAwMDAwMXB4OwogICAgICAgIC13ZWJraXQtZmxleDogMTsKICAgICAgICBmbGV4OiAxOwogICAgICAgIC13ZWJraXQtZmxleC1iYXNpczogMC4wMDAwMDAwMDFweDsKICAgICAgICBmbGV4LWJhc2lzOiAwLjAwMDAwMDAwMXB4OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleC0yOiB7CiAgICAgICAgLW1zLWZsZXg6IDI7CiAgICAgICAgLXdlYmtpdC1mbGV4OiAyOwogICAgICAgIGZsZXg6IDI7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTM6IHsKICAgICAgICAtbXMtZmxleDogMzsKICAgICAgICAtd2Via2l0LWZsZXg6IDM7CiAgICAgICAgZmxleDogMzsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtNDogewogICAgICAgIC1tcy1mbGV4OiA0OwogICAgICAgIC13ZWJraXQtZmxleDogNDsKICAgICAgICBmbGV4OiA0OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleC01OiB7CiAgICAgICAgLW1zLWZsZXg6IDU7CiAgICAgICAgLXdlYmtpdC1mbGV4OiA1OwogICAgICAgIGZsZXg6IDU7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTY6IHsKICAgICAgICAtbXMtZmxleDogNjsKICAgICAgICAtd2Via2l0LWZsZXg6IDY7CiAgICAgICAgZmxleDogNjsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtNzogewogICAgICAgIC1tcy1mbGV4OiA3OwogICAgICAgIC13ZWJraXQtZmxleDogNzsKICAgICAgICBmbGV4OiA3OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleC04OiB7CiAgICAgICAgLW1zLWZsZXg6IDg7CiAgICAgICAgLXdlYmtpdC1mbGV4OiA4OwogICAgICAgIGZsZXg6IDg7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTk6IHsKICAgICAgICAtbXMtZmxleDogOTsKICAgICAgICAtd2Via2l0LWZsZXg6IDk7CiAgICAgICAgZmxleDogOTsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtMTA6IHsKICAgICAgICAtbXMtZmxleDogMTA7CiAgICAgICAgLXdlYmtpdC1mbGV4OiAxMDsKICAgICAgICBmbGV4OiAxMDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtMTE6IHsKICAgICAgICAtbXMtZmxleDogMTE7CiAgICAgICAgLXdlYmtpdC1mbGV4OiAxMTsKICAgICAgICBmbGV4OiAxMTsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtMTI6IHsKICAgICAgICAtbXMtZmxleDogMTI7CiAgICAgICAgLXdlYmtpdC1mbGV4OiAxMjsKICAgICAgICBmbGV4OiAxMjsKICAgICAgfTsKCiAgICAgIC8qIGFsaWdubWVudCBpbiBjcm9zcyBheGlzICovCgogICAgICAtLWxheW91dC1zdGFydDogewogICAgICAgIC1tcy1mbGV4LWFsaWduOiBzdGFydDsKICAgICAgICAtd2Via2l0LWFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0OwogICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtY2VudGVyOiB7CiAgICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjsKICAgICAgICAtd2Via2l0LWFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWVuZDogewogICAgICAgIC1tcy1mbGV4LWFsaWduOiBlbmQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1pdGVtczogZmxleC1lbmQ7CiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtYmFzZWxpbmU6IHsKICAgICAgICAtbXMtZmxleC1hbGlnbjogYmFzZWxpbmU7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1pdGVtczogYmFzZWxpbmU7CiAgICAgICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lOwogICAgICB9OwoKICAgICAgLyogYWxpZ25tZW50IGluIG1haW4gYXhpcyAqLwoKICAgICAgLS1sYXlvdXQtc3RhcnQtanVzdGlmaWVkOiB7CiAgICAgICAgLW1zLWZsZXgtcGFjazogc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtY2VudGVyLWp1c3RpZmllZDogewogICAgICAgIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjsKICAgICAgICAtd2Via2l0LWp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZW5kLWp1c3RpZmllZDogewogICAgICAgIC1tcy1mbGV4LXBhY2s6IGVuZDsKICAgICAgICAtd2Via2l0LWp1c3RpZnktY29udGVudDogZmxleC1lbmQ7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWFyb3VuZC1qdXN0aWZpZWQ6IHsKICAgICAgICAtbXMtZmxleC1wYWNrOiBkaXN0cmlidXRlOwogICAgICAgIC13ZWJraXQtanVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7CiAgICAgIH07CgogICAgICAtLWxheW91dC1qdXN0aWZpZWQ6IHsKICAgICAgICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5OwogICAgICAgIC13ZWJraXQtanVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWNlbnRlci1jZW50ZXI6IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXItanVzdGlmaWVkOwogICAgICB9OwoKICAgICAgLyogc2VsZiBhbGlnbm1lbnQgKi8KCiAgICAgIC0tbGF5b3V0LXNlbGYtc3RhcnQ6IHsKICAgICAgICAtbXMtYWxpZ24tc2VsZjogZmxleC1zdGFydDsKICAgICAgICAtd2Via2l0LWFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7CiAgICAgICAgYWxpZ24tc2VsZjogZmxleC1zdGFydDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LXNlbGYtY2VudGVyOiB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGNlbnRlcjsKICAgICAgICAtd2Via2l0LWFsaWduLXNlbGY6IGNlbnRlcjsKICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7CiAgICAgIH07CgogICAgICAtLWxheW91dC1zZWxmLWVuZDogewogICAgICAgIC1tcy1hbGlnbi1zZWxmOiBmbGV4LWVuZDsKICAgICAgICAtd2Via2l0LWFsaWduLXNlbGY6IGZsZXgtZW5kOwogICAgICAgIGFsaWduLXNlbGY6IGZsZXgtZW5kOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtc2VsZi1zdHJldGNoOiB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IHN0cmV0Y2g7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICAgIGFsaWduLXNlbGY6IHN0cmV0Y2g7CiAgICAgIH07CgogICAgICAtLWxheW91dC1zZWxmLWJhc2VsaW5lOiB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGJhc2VsaW5lOwogICAgICAgIC13ZWJraXQtYWxpZ24tc2VsZjogYmFzZWxpbmU7CiAgICAgICAgYWxpZ24tc2VsZjogYmFzZWxpbmU7CiAgICAgIH07CgogICAgICAvKiBtdWx0aS1saW5lIGFsaWdubWVudCBpbiBtYWluIGF4aXMgKi8KCiAgICAgIC0tbGF5b3V0LXN0YXJ0LWFsaWduZWQ6IHsKICAgICAgICAtbXMtZmxleC1saW5lLXBhY2s6IHN0YXJ0OyAgLyogSUUxMCAqLwogICAgICAgIC1tcy1hbGlnbi1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgICAgIC13ZWJraXQtYWxpZ24tY29udGVudDogZmxleC1zdGFydDsKICAgICAgICBhbGlnbi1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZW5kLWFsaWduZWQ6IHsKICAgICAgICAtbXMtZmxleC1saW5lLXBhY2s6IGVuZDsgIC8qIElFMTAgKi8KICAgICAgICAtbXMtYWxpZ24tY29udGVudDogZmxleC1lbmQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgICBhbGlnbi1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWNlbnRlci1hbGlnbmVkOiB7CiAgICAgICAgLW1zLWZsZXgtbGluZS1wYWNrOiBjZW50ZXI7ICAvKiBJRTEwICovCiAgICAgICAgLW1zLWFsaWduLWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICAtd2Via2l0LWFsaWduLWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBhbGlnbi1jb250ZW50OiBjZW50ZXI7CiAgICAgIH07CgogICAgICAtLWxheW91dC1iZXR3ZWVuLWFsaWduZWQ6IHsKICAgICAgICAtbXMtZmxleC1saW5lLXBhY2s6IGp1c3RpZnk7ICAvKiBJRTEwICovCiAgICAgICAgLW1zLWFsaWduLWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgLXdlYmtpdC1hbGlnbi1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIGFsaWduLWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgIH07CgogICAgICAtLWxheW91dC1hcm91bmQtYWxpZ25lZDogewogICAgICAgIC1tcy1mbGV4LWxpbmUtcGFjazogZGlzdHJpYnV0ZTsgIC8qIElFMTAgKi8KICAgICAgICAtbXMtYWxpZ24tY29udGVudDogc3BhY2UtYXJvdW5kOwogICAgICAgIC13ZWJraXQtYWxpZ24tY29udGVudDogc3BhY2UtYXJvdW5kOwogICAgICAgIGFsaWduLWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsKICAgICAgfTsKCiAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgICAgICAgICAgICBPdGhlciBMYXlvdXQKICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCiAgICAgIC0tbGF5b3V0LWJsb2NrOiB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH07CgogICAgICAtLWxheW91dC1pbnZpc2libGU6IHsKICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW4gIWltcG9ydGFudDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LXJlbGF0aXZlOiB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZml0OiB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LXNjcm9sbDogewogICAgICAgIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZ1bGxibGVlZDogewogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBoZWlnaHQ6IDEwMHZoOwogICAgICB9OwoKICAgICAgLyogZml4ZWQgcG9zaXRpb24gKi8KCiAgICAgIC0tbGF5b3V0LWZpeGVkLXRvcDogewogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZpeGVkLXJpZ2h0OiB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIHRvcDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgIH07CgogICAgICAtLWxheW91dC1maXhlZC1ib3R0b206IHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgIH07CgogICAgICAtLWxheW91dC1maXhlZC1sZWZ0OiB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIHRvcDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgfTsKCiAgICB9CiAgPC9zdHlsZT4KPC9jdXN0b20tc3R5bGU+YDt5by5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZGlzcGxheTogbm9uZTsiKSxkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHlvLmNvbnRlbnQpO3ZhciB2bz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO3ZvLnRleHRDb250ZW50PSJbaGlkZGVuXSB7IGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgfSIsZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh2byk7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpjbGFzcyBib3tjb25zdHJ1Y3Rvcih0KXtib1siICJdKHQpLHRoaXMudHlwZT10JiZ0LnR5cGV8fCJkZWZhdWx0Iix0aGlzLmtleT10JiZ0LmtleSx0JiYidmFsdWUiaW4gdCYmKHRoaXMudmFsdWU9dC52YWx1ZSl9Z2V0IHZhbHVlKCl7dmFyIHQ9dGhpcy50eXBlLGU9dGhpcy5rZXk7aWYodCYmZSlyZXR1cm4gYm8udHlwZXNbdF0mJmJvLnR5cGVzW3RdW2VdfXNldCB2YWx1ZSh0KXt2YXIgZT10aGlzLnR5cGUsbj10aGlzLmtleTtlJiZuJiYoZT1iby50eXBlc1tlXT1iby50eXBlc1tlXXx8e30sbnVsbD09dD9kZWxldGUgZVtuXTplW25dPXQpfWdldCBsaXN0KCl7aWYodGhpcy50eXBlKXt2YXIgdD1iby50eXBlc1t0aGlzLnR5cGVdO3JldHVybiB0P09iamVjdC5rZXlzKHQpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHhvW3RoaXMudHlwZV1bdF19KSx0aGlzKTpbXX19YnlLZXkodCl7cmV0dXJuIHRoaXMua2V5PXQsdGhpcy52YWx1ZX19Ym9bIiAiXT1mdW5jdGlvbigpe30sYm8udHlwZXM9e307dmFyIHhvPWJvLnR5cGVzO0lyKHtpczoiaXJvbi1tZXRhIixwcm9wZXJ0aWVzOnt0eXBlOnt0eXBlOlN0cmluZyx2YWx1ZToiZGVmYXVsdCJ9LGtleTp7dHlwZTpTdHJpbmd9LHZhbHVlOnt0eXBlOlN0cmluZyxub3RpZnk6ITB9LHNlbGY6e3R5cGU6Qm9vbGVhbixvYnNlcnZlcjoiX3NlbGZDaGFuZ2VkIn0sX19tZXRhOnt0eXBlOkJvb2xlYW4sY29tcHV0ZWQ6Il9fY29tcHV0ZU1ldGEodHlwZSwga2V5LCB2YWx1ZSkifX0saG9zdEF0dHJpYnV0ZXM6e2hpZGRlbjohMH0sX19jb21wdXRlTWV0YTpmdW5jdGlvbih0LGUsbil7dmFyIGk9bmV3IGJvKHt0eXBlOnQsa2V5OmV9KTtyZXR1cm4gdm9pZCAwIT09biYmbiE9PWkudmFsdWU/aS52YWx1ZT1uOnRoaXMudmFsdWUhPT1pLnZhbHVlJiYodGhpcy52YWx1ZT1pLnZhbHVlKSxpfSxnZXQgbGlzdCgpe3JldHVybiB0aGlzLl9fbWV0YSYmdGhpcy5fX21ldGEubGlzdH0sX3NlbGZDaGFuZ2VkOmZ1bmN0aW9uKHQpe3QmJih0aGlzLnZhbHVlPXRoaXMpfSxieUtleTpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGJvKHt0eXBlOnRoaXMudHlwZSxrZXk6dH0pLnZhbHVlfX0pLAovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KSXIoe190ZW1wbGF0ZTpfZWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIEBhcHBseSAtLWxheW91dC1pbmxpbmU7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlci1jZW50ZXI7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwoKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwoKICAgICAgICBmaWxsOiB2YXIoLS1pcm9uLWljb24tZmlsbC1jb2xvciwgY3VycmVudGNvbG9yKTsKICAgICAgICBzdHJva2U6IHZhcigtLWlyb24taWNvbi1zdHJva2UtY29sb3IsIG5vbmUpOwoKICAgICAgICB3aWR0aDogdmFyKC0taXJvbi1pY29uLXdpZHRoLCAyNHB4KTsKICAgICAgICBoZWlnaHQ6IHZhcigtLWlyb24taWNvbi1oZWlnaHQsIDI0cHgpOwogICAgICAgIEBhcHBseSAtLWlyb24taWNvbjsKICAgICAgfQoKICAgICAgOmhvc3QoW2hpZGRlbl0pIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgpgLGlzOiJpcm9uLWljb24iLHByb3BlcnRpZXM6e2ljb246e3R5cGU6U3RyaW5nfSx0aGVtZTp7dHlwZTpTdHJpbmd9LHNyYzp7dHlwZTpTdHJpbmd9LF9tZXRhOnt2YWx1ZTpwby5jcmVhdGUoImlyb24tbWV0YSIse3R5cGU6Imljb25zZXQifSl9fSxvYnNlcnZlcnM6WyJfdXBkYXRlSWNvbihfbWV0YSwgaXNBdHRhY2hlZCkiLCJfdXBkYXRlSWNvbih0aGVtZSwgaXNBdHRhY2hlZCkiLCJfc3JjQ2hhbmdlZChzcmMsIGlzQXR0YWNoZWQpIiwiX2ljb25DaGFuZ2VkKGljb24sIGlzQXR0YWNoZWQpIl0sX0RFRkFVTFRfSUNPTlNFVDoiaWNvbnMiLF9pY29uQ2hhbmdlZDpmdW5jdGlvbih0KXt2YXIgZT0odHx8IiIpLnNwbGl0KCI6Iik7dGhpcy5faWNvbk5hbWU9ZS5wb3AoKSx0aGlzLl9pY29uc2V0TmFtZT1lLnBvcCgpfHx0aGlzLl9ERUZBVUxUX0lDT05TRVQsdGhpcy5fdXBkYXRlSWNvbigpfSxfc3JjQ2hhbmdlZDpmdW5jdGlvbih0KXt0aGlzLl91cGRhdGVJY29uKCl9LF91c2VzSWNvbnNldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmljb258fCF0aGlzLnNyY30sX3VwZGF0ZUljb246ZnVuY3Rpb24oKXt0aGlzLl91c2VzSWNvbnNldCgpPyh0aGlzLl9pbWcmJnRoaXMuX2ltZy5wYXJlbnROb2RlJiZxaSh0aGlzLnJvb3QpLnJlbW92ZUNoaWxkKHRoaXMuX2ltZyksIiI9PT10aGlzLl9pY29uTmFtZT90aGlzLl9pY29uc2V0JiZ0aGlzLl9pY29uc2V0LnJlbW92ZUljb24odGhpcyk6dGhpcy5faWNvbnNldE5hbWUmJnRoaXMuX21ldGEmJih0aGlzLl9pY29uc2V0PXRoaXMuX21ldGEuYnlLZXkodGhpcy5faWNvbnNldE5hbWUpLHRoaXMuX2ljb25zZXQ/KHRoaXMuX2ljb25zZXQuYXBwbHlJY29uKHRoaXMsdGhpcy5faWNvbk5hbWUsdGhpcy50aGVtZSksdGhpcy51bmxpc3Rlbih3aW5kb3csImlyb24taWNvbnNldC1hZGRlZCIsIl91cGRhdGVJY29uIikpOnRoaXMubGlzdGVuKHdpbmRvdywiaXJvbi1pY29uc2V0LWFkZGVkIiwiX3VwZGF0ZUljb24iKSkpOih0aGlzLl9pY29uc2V0JiZ0aGlzLl9pY29uc2V0LnJlbW92ZUljb24odGhpcyksdGhpcy5faW1nfHwodGhpcy5faW1nPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImltZyIpLHRoaXMuX2ltZy5zdHlsZS53aWR0aD0iMTAwJSIsdGhpcy5faW1nLnN0eWxlLmhlaWdodD0iMTAwJSIsdGhpcy5faW1nLmRyYWdnYWJsZT0hMSksdGhpcy5faW1nLnNyYz10aGlzLnNyYyxxaSh0aGlzLnJvb3QpLmFwcGVuZENoaWxkKHRoaXMuX2ltZykpfX0pLAovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KSXIoe2lzOiJpcm9uLWljb25zZXQtc3ZnIixwcm9wZXJ0aWVzOntuYW1lOnt0eXBlOlN0cmluZyxvYnNlcnZlcjoiX25hbWVDaGFuZ2VkIn0sc2l6ZTp7dHlwZTpOdW1iZXIsdmFsdWU6MjR9LHJ0bE1pcnJvcmluZzp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSx1c2VHbG9iYWxSdGxBdHRyaWJ1dGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLl9tZXRhPW5ldyBibyh7dHlwZToiaWNvbnNldCIsa2V5Om51bGwsdmFsdWU6bnVsbH0pfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuc3R5bGUuZGlzcGxheT0ibm9uZSJ9LGdldEljb25OYW1lczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pY29ucz10aGlzLl9jcmVhdGVJY29uTWFwKCksT2JqZWN0LmtleXModGhpcy5faWNvbnMpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubmFtZSsiOiIrdH0pLHRoaXMpfSxhcHBseUljb246ZnVuY3Rpb24odCxlKXt0aGlzLnJlbW92ZUljb24odCk7dmFyIG49dGhpcy5fY2xvbmVJY29uKGUsdGhpcy5ydGxNaXJyb3JpbmcmJnRoaXMuX3RhcmdldElzUlRMKHQpKTtpZihuKXt2YXIgaT1xaSh0LnJvb3R8fHQpO3JldHVybiBpLmluc2VydEJlZm9yZShuLGkuY2hpbGROb2Rlc1swXSksdC5fc3ZnSWNvbj1ufXJldHVybiBudWxsfSxyZW1vdmVJY29uOmZ1bmN0aW9uKHQpe3QuX3N2Z0ljb24mJihxaSh0LnJvb3R8fHQpLnJlbW92ZUNoaWxkKHQuX3N2Z0ljb24pLHQuX3N2Z0ljb249bnVsbCl9LF90YXJnZXRJc1JUTDpmdW5jdGlvbih0KXtpZihudWxsPT10aGlzLl9fdGFyZ2V0SXNSVEwpaWYodGhpcy51c2VHbG9iYWxSdGxBdHRyaWJ1dGUpe3ZhciBlPWRvY3VtZW50LmJvZHkmJmRvY3VtZW50LmJvZHkuaGFzQXR0cmlidXRlKCJkaXIiKT9kb2N1bWVudC5ib2R5OmRvY3VtZW50LmRvY3VtZW50RWxlbWVudDt0aGlzLl9fdGFyZ2V0SXNSVEw9InJ0bCI9PT1lLmdldEF0dHJpYnV0ZSgiZGlyIil9ZWxzZSB0JiZ0Lm5vZGVUeXBlIT09Tm9kZS5FTEVNRU5UX05PREUmJih0PXQuaG9zdCksdGhpcy5fX3RhcmdldElzUlRMPXQmJiJydGwiPT09d2luZG93LmdldENvbXB1dGVkU3R5bGUodCkuZGlyZWN0aW9uO3JldHVybiB0aGlzLl9fdGFyZ2V0SXNSVEx9LF9uYW1lQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuX21ldGEudmFsdWU9bnVsbCx0aGlzLl9tZXRhLmtleT10aGlzLm5hbWUsdGhpcy5fbWV0YS52YWx1ZT10aGlzLHRoaXMuYXN5bmMoKGZ1bmN0aW9uKCl7dGhpcy5maXJlKCJpcm9uLWljb25zZXQtYWRkZWQiLHRoaXMse25vZGU6d2luZG93fSl9KSl9LF9jcmVhdGVJY29uTWFwOmZ1bmN0aW9uKCl7dmFyIHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gcWkodGhpcykucXVlcnlTZWxlY3RvckFsbCgiW2lkXSIpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3RbZS5pZF09ZX0pKSx0fSxfY2xvbmVJY29uOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2ljb25zPXRoaXMuX2ljb25zfHx0aGlzLl9jcmVhdGVJY29uTWFwKCksdGhpcy5fcHJlcGFyZVN2Z0Nsb25lKHRoaXMuX2ljb25zW3RdLHRoaXMuc2l6ZSxlKX0sX3ByZXBhcmVTdmdDbG9uZTpmdW5jdGlvbih0LGUsbil7aWYodCl7dmFyIGk9dC5jbG9uZU5vZGUoITApLHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInN2ZyIpLG89aS5nZXRBdHRyaWJ1dGUoInZpZXdCb3giKXx8IjAgMCAiK2UrIiAiK2UsYT0icG9pbnRlci1ldmVudHM6IG5vbmU7IGRpc3BsYXk6IGJsb2NrOyB3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlOyI7cmV0dXJuIG4mJmkuaGFzQXR0cmlidXRlKCJtaXJyb3ItaW4tcnRsIikmJihhKz0iLXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoLTEsMSk7dHJhbnNmb3JtOnNjYWxlKC0xLDEpO3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyOyIpLHIuc2V0QXR0cmlidXRlKCJ2aWV3Qm94IixvKSxyLnNldEF0dHJpYnV0ZSgicHJlc2VydmVBc3BlY3RSYXRpbyIsInhNaWRZTWlkIG1lZXQiKSxyLnNldEF0dHJpYnV0ZSgiZm9jdXNhYmxlIiwiZmFsc2UiKSxyLnN0eWxlLmNzc1RleHQ9YSxyLmFwcGVuZENoaWxkKGkpLnJlbW92ZUF0dHJpYnV0ZSgiaWQiKSxyfXJldHVybiBudWxsfX0pOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTQgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KY29uc3Qgd289X2VgPGlyb24taWNvbnNldC1zdmcgbmFtZT0iaW1hZ2UiIHNpemU9IjI0Ij4KPHN2Zz48ZGVmcz4KPGcgaWQ9ImFkZC1hLXBob3RvIj48cGF0aCBkPSJNMyA0VjFoMnYzaDN2Mkg1djNIM1Y2SDBWNGgzem0zIDZWN2gzVjRoN2wxLjgzIDJIMjFjMS4xIDAgMiAuOSAyIDJ2MTJjMCAxLjEtLjkgMi0yIDJINWMtMS4xIDAtMi0uOS0yLTJWMTBoM3ptNyA5YzIuNzYgMCA1LTIuMjQgNS01cy0yLjI0LTUtNS01LTUgMi4yNC01IDUgMi4yNCA1IDUgNXptLTMuMi01YzAgMS43NyAxLjQzIDMuMiAzLjIgMy4yczMuMi0xLjQzIDMuMi0zLjItMS40My0zLjItMy4yLTMuMi0zLjIgMS40My0zLjIgMy4yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFkZC10by1waG90b3MiPjxwYXRoIGQ9Ik00IDZIMnYxNGMwIDEuMS45IDIgMiAyaDE0di0ySDRWNnptMTYtNEg4Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDEyYzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS0xIDloLTR2NGgtMnYtNEg5VjloNFY1aDJ2NGg0djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYWRqdXN0Ij48cGF0aCBkPSJNMTIgMkM2LjQ5IDIgMiA2LjQ5IDIgMTJzNC40OSAxMCAxMCAxMCAxMC00LjQ5IDEwLTEwUzE3LjUxIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6bTMtOGMwIDEuNjYtMS4zNCAzLTMgM3MtMy0xLjM0LTMtMyAxLjM0LTMgMy0zIDMgMS4zNCAzIDN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXNzaXN0YW50Ij48cGF0aCBkPSJNMTkgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDRsMyAzIDMtM2g0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS01LjEyIDEwLjg4TDEyIDE3bC0xLjg4LTQuMTJMNiAxMWw0LjEyLTEuODhMMTIgNWwxLjg4IDQuMTJMMTggMTFsLTQuMTIgMS44OHoiPjwvcGF0aD48L2c+CjxnIGlkPSJhc3Npc3RhbnQtcGhvdG8iPjxwYXRoIGQ9Ik0xNC40IDZMMTQgNEg1djE3aDJ2LTdoNS42bC40IDJoN1Y2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImF1ZGlvdHJhY2siPjxwYXRoIGQ9Ik0xMiAzdjkuMjhjLS40Ny0uMTctLjk3LS4yOC0xLjUtLjI4QzguMDEgMTIgNiAxNC4wMSA2IDE2LjVTOC4wMSAyMSAxMC41IDIxYzIuMzEgMCA0LjItMS43NSA0LjQ1LTRIMTVWNmg0VjNoLTd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYmx1ci1jaXJjdWxhciI+PHBhdGggZD0iTTEwIDljLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xLS40NS0xLTEtMXptMCA0Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6TTcgOS41Yy0uMjggMC0uNS4yMi0uNS41cy4yMi41LjUuNS41LS4yMi41LS41LS4yMi0uNS0uNS0uNXptMyA3Yy0uMjggMC0uNS4yMi0uNS41cy4yMi41LjUuNS41LS4yMi41LS41LS4yMi0uNS0uNS0uNXptLTMtM2MtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6bTMtNmMuMjggMCAuNS0uMjIuNS0uNXMtLjIyLS41LS41LS41LS41LjIyLS41LjUuMjIuNS41LjV6TTE0IDljLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xLS40NS0xLTEtMXptMC0xLjVjLjI4IDAgLjUtLjIyLjUtLjVzLS4yMi0uNS0uNS0uNS0uNS4yMi0uNS41LjIyLjUuNS41em0zIDZjLS4yOCAwLS41LjIyLS41LjVzLjIyLjUuNS41LjUtLjIyLjUtLjUtLjIyLS41LS41LS41em0wLTRjLS4yOCAwLS41LjIyLS41LjVzLjIyLjUuNS41LjUtLjIyLjUtLjUtLjIyLS41LS41LS41ek0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQyIDAtOC0zLjU4LTgtOHMzLjU4LTggOC04IDggMy41OCA4IDgtMy41OCA4LTggOHptMi0zLjVjLS4yOCAwLS41LjIyLS41LjVzLjIyLjUuNS41LjUtLjIyLjUtLjUtLjIyLS41LS41LS41em0wLTMuNWMtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImJsdXItbGluZWFyIj48cGF0aCBkPSJNNSAxNy41Yy44MyAwIDEuNS0uNjcgMS41LTEuNXMtLjY3LTEuNS0xLjUtMS41LTEuNS42Ny0xLjUgMS41LjY3IDEuNSAxLjUgMS41ek05IDEzYy41NSAwIDEtLjQ1IDEtMXMtLjQ1LTEtMS0xLTEgLjQ1LTEgMSAuNDUgMSAxIDF6bTAtNGMuNTUgMCAxLS40NSAxLTFzLS40NS0xLTEtMS0xIC40NS0xIDEgLjQ1IDEgMSAxek0zIDIxaDE4di0ySDN2MnpNNSA5LjVjLjgzIDAgMS41LS42NyAxLjUtMS41UzUuODMgNi41IDUgNi41IDMuNSA3LjE3IDMuNSA4IDQuMTcgOS41IDUgOS41em0wIDRjLjgzIDAgMS41LS42NyAxLjUtMS41cy0uNjctMS41LTEuNS0xLjUtMS41LjY3LTEuNSAxLjUuNjcgMS41IDEuNSAxLjV6TTkgMTdjLjU1IDAgMS0uNDUgMS0xcy0uNDUtMS0xLTEtMSAuNDUtMSAxIC40NSAxIDEgMXptOC0uNWMuMjggMCAuNS0uMjIuNS0uNXMtLjIyLS41LS41LS41LS41LjIyLS41LjUuMjIuNS41LjV6TTMgM3YyaDE4VjNIM3ptMTQgNS41Yy4yOCAwIC41LS4yMi41LS41cy0uMjItLjUtLjUtLjUtLjUuMjItLjUuNS4yMi41LjUuNXptMCA0Yy4yOCAwIC41LS4yMi41LS41cy0uMjItLjUtLjUtLjUtLjUuMjItLjUuNS4yMi41LjUuNXpNMTMgOWMuNTUgMCAxLS40NSAxLTFzLS40NS0xLTEtMS0xIC40NS0xIDEgLjQ1IDEgMSAxem0wIDRjLjU1IDAgMS0uNDUgMS0xcy0uNDUtMS0xLTEtMSAuNDUtMSAxIC40NSAxIDEgMXptMCA0Yy41NSAwIDEtLjQ1IDEtMXMtLjQ1LTEtMS0xLTEgLjQ1LTEgMSAuNDUgMSAxIDF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYmx1ci1vZmYiPjxwYXRoIGQ9Ik0xNCA3Yy41NSAwIDEtLjQ1IDEtMXMtLjQ1LTEtMS0xLTEgLjQ1LTEgMSAuNDUgMSAxIDF6bS0uMiA0LjQ4bC4yLjAyYy44MyAwIDEuNS0uNjcgMS41LTEuNXMtLjY3LTEuNS0xLjUtMS41LTEuNS42Ny0xLjUgMS41bC4wMi4yYy4wOS42Ny42MSAxLjE5IDEuMjggMS4yOHpNMTQgMy41Yy4yOCAwIC41LS4yMi41LS41cy0uMjItLjUtLjUtLjUtLjUuMjItLjUuNS4yMi41LjUuNXptLTQgMGMuMjggMCAuNS0uMjIuNS0uNXMtLjIyLS41LS41LS41LS41LjIyLS41LjUuMjIuNS41LjV6bTExIDdjLjI4IDAgLjUtLjIyLjUtLjVzLS4yMi0uNS0uNS0uNS0uNS4yMi0uNS41LjIyLjUuNS41ek0xMCA3Yy41NSAwIDEtLjQ1IDEtMXMtLjQ1LTEtMS0xLTEgLjQ1LTEgMSAuNDUgMSAxIDF6bTggOGMuNTUgMCAxLS40NSAxLTFzLS40NS0xLTEtMS0xIC40NS0xIDEgLjQ1IDEgMSAxem0wLTRjLjU1IDAgMS0uNDUgMS0xcy0uNDUtMS0xLTEtMSAuNDUtMSAxIC40NSAxIDEgMXptMC00Yy41NSAwIDEtLjQ1IDEtMXMtLjQ1LTEtMS0xLTEgLjQ1LTEgMSAuNDUgMSAxIDF6bS00IDEzLjVjLS4yOCAwLS41LjIyLS41LjVzLjIyLjUuNS41LjUtLjIyLjUtLjUtLjIyLS41LS41LS41ek0yLjUgNS4yN2wzLjc4IDMuNzhMNiA5Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMWMwLS4xLS4wMy0uMTktLjA2LS4yOGwyLjgxIDIuODFjLS43MS4xMS0xLjI1LjczLTEuMjUgMS40NyAwIC44My42NyAxLjUgMS41IDEuNS43NCAwIDEuMzYtLjU0IDEuNDctMS4yNWwyLjgxIDIuODFjLS4wOS0uMDMtLjE4LS4wNi0uMjgtLjA2LS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xYzAtLjEtLjAzLS4xOS0uMDYtLjI4bDMuNzggMy43OEwyMCAyMC4yMyAzLjc3IDQgMi41IDUuMjd6TTEwIDE3Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6bTExLTMuNWMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6TTYgMTNjLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xLS40NS0xLTEtMXpNMyA5LjVjLS4yOCAwLS41LjIyLS41LjVzLjIyLjUuNS41LjUtLjIyLjUtLjUtLjIyLS41LS41LS41em03IDExYy0uMjggMC0uNS4yMi0uNS41cy4yMi41LjUuNS41LS4yMi41LS41LS4yMi0uNS0uNS0uNXpNNiAxN2MtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xem0tMy0zLjVjLS4yOCAwLS41LjIyLS41LjVzLjIyLjUuNS41LjUtLjIyLjUtLjUtLjIyLS41LS41LS41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImJsdXItb24iPjxwYXRoIGQ9Ik02IDEzYy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6bTAgNGMtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xem0wLThjLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xLS40NS0xLTEtMXptLTMgLjVjLS4yOCAwLS41LjIyLS41LjVzLjIyLjUuNS41LjUtLjIyLjUtLjUtLjIyLS41LS41LS41ek02IDVjLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xLS40NS0xLTEtMXptMTUgNS41Yy4yOCAwIC41LS4yMi41LS41cy0uMjItLjUtLjUtLjUtLjUuMjItLjUuNS4yMi41LjUuNXpNMTQgN2MuNTUgMCAxLS40NSAxLTFzLS40NS0xLTEtMS0xIC40NS0xIDEgLjQ1IDEgMSAxem0wLTMuNWMuMjggMCAuNS0uMjIuNS0uNXMtLjIyLS41LS41LS41LS41LjIyLS41LjUuMjIuNS41LjV6bS0xMSAxMGMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6bTcgN2MtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6bTAtMTdjLjI4IDAgLjUtLjIyLjUtLjVzLS4yMi0uNS0uNS0uNS0uNS4yMi0uNS41LjIyLjUuNS41ek0xMCA3Yy41NSAwIDEtLjQ1IDEtMXMtLjQ1LTEtMS0xLTEgLjQ1LTEgMSAuNDUgMSAxIDF6bTAgNS41Yy0uODMgMC0xLjUuNjctMS41IDEuNXMuNjcgMS41IDEuNSAxLjUgMS41LS42NyAxLjUtMS41LS42Ny0xLjUtMS41LTEuNXptOCAuNWMtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xem0wIDRjLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xLS40NS0xLTEtMXptMC04Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6bTAtNGMtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xem0zIDguNWMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6TTE0IDE3Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6bTAgMy41Yy0uMjggMC0uNS4yMi0uNS41cy4yMi41LjUuNS41LS4yMi41LS41LS4yMi0uNS0uNS0uNXptLTQtMTJjLS44MyAwLTEuNS42Ny0xLjUgMS41cy42NyAxLjUgMS41IDEuNSAxLjUtLjY3IDEuNS0xLjUtLjY3LTEuNS0xLjUtMS41em0wIDguNWMtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xem00LTQuNWMtLjgzIDAtMS41LjY3LTEuNSAxLjVzLjY3IDEuNSAxLjUgMS41IDEuNS0uNjcgMS41LTEuNS0uNjctMS41LTEuNS0xLjV6bTAtNGMtLjgzIDAtMS41LjY3LTEuNSAxLjVzLjY3IDEuNSAxLjUgMS41IDEuNS0uNjcgMS41LTEuNS0uNjctMS41LTEuNS0xLjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYnJpZ2h0bmVzcy0xIj48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCI+PC9jaXJjbGU+PC9nPgo8ZyBpZD0iYnJpZ2h0bmVzcy0yIj48cGF0aCBkPSJNMTAgMmMtMS44MiAwLTMuNTMuNS01IDEuMzVDNy45OSA1LjA4IDEwIDguMyAxMCAxMnMtMi4wMSA2LjkyLTUgOC42NUM2LjQ3IDIxLjUgOC4xOCAyMiAxMCAyMmM1LjUyIDAgMTAtNC40OCAxMC0xMFMxNS41MiAyIDEwIDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYnJpZ2h0bmVzcy0zIj48cGF0aCBkPSJNOSAyYy0xLjA1IDAtMi4wNS4xNi0zIC40NiA0LjA2IDEuMjcgNyA1LjA2IDcgOS41NCAwIDQuNDgtMi45NCA4LjI3LTcgOS41NC45NS4zIDEuOTUuNDYgMyAuNDYgNS41MiAwIDEwLTQuNDggMTAtMTBTMTQuNTIgMiA5IDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYnJpZ2h0bmVzcy00Ij48cGF0aCBkPSJNMjAgOC42OVY0aC00LjY5TDEyIC42OSA4LjY5IDRINHY0LjY5TC42OSAxMiA0IDE1LjMxVjIwaDQuNjlMMTIgMjMuMzEgMTUuMzEgMjBIMjB2LTQuNjlMMjMuMzEgMTIgMjAgOC42OXpNMTIgMThjLS44OSAwLTEuNzQtLjItMi41LS41NUMxMS41NiAxNi41IDEzIDE0LjQyIDEzIDEycy0xLjQ0LTQuNS0zLjUtNS40NUMxMC4yNiA2LjIgMTEuMTEgNiAxMiA2YzMuMzEgMCA2IDIuNjkgNiA2cy0yLjY5IDYtNiA2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImJyaWdodG5lc3MtNSI+PHBhdGggZD0iTTIwIDE1LjMxTDIzLjMxIDEyIDIwIDguNjlWNGgtNC42OUwxMiAuNjkgOC42OSA0SDR2NC42OUwuNjkgMTIgNCAxNS4zMVYyMGg0LjY5TDEyIDIzLjMxIDE1LjMxIDIwSDIwdi00LjY5ek0xMiAxOGMtMy4zMSAwLTYtMi42OS02LTZzMi42OS02IDYtNiA2IDIuNjkgNiA2LTIuNjkgNi02IDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYnJpZ2h0bmVzcy02Ij48cGF0aCBkPSJNMjAgMTUuMzFMMjMuMzEgMTIgMjAgOC42OVY0aC00LjY5TDEyIC42OSA4LjY5IDRINHY0LjY5TC42OSAxMiA0IDE1LjMxVjIwaDQuNjlMMTIgMjMuMzEgMTUuMzEgMjBIMjB2LTQuNjl6TTEyIDE4VjZjMy4zMSAwIDYgMi42OSA2IDZzLTIuNjkgNi02IDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYnJpZ2h0bmVzcy03Ij48cGF0aCBkPSJNMjAgOC42OVY0aC00LjY5TDEyIC42OSA4LjY5IDRINHY0LjY5TC42OSAxMiA0IDE1LjMxVjIwaDQuNjlMMTIgMjMuMzEgMTUuMzEgMjBIMjB2LTQuNjlMMjMuMzEgMTIgMjAgOC42OXpNMTIgMThjLTMuMzEgMC02LTIuNjktNi02czIuNjktNiA2LTYgNiAyLjY5IDYgNi0yLjY5IDYtNiA2em0wLTEwYy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTQtMS43OS00LTQtNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJicm9rZW4taW1hZ2UiPjxwYXRoIGQ9Ik0yMSA1djYuNTlsLTMtMy4wMS00IDQuMDEtNC00LTQgNC0zLTMuMDFWNWMwLTEuMS45LTIgMi0yaDE0YzEuMSAwIDIgLjkgMiAyem0tMyA2LjQybDMgMy4wMVYxOWMwIDEuMS0uOSAyLTIgMkg1Yy0xLjEgMC0yLS45LTItMnYtNi41OGwzIDIuOTkgNC00IDQgNCA0LTMuOTl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYnJ1c2giPjxwYXRoIGQ9Ik03IDE0Yy0xLjY2IDAtMyAxLjM0LTMgMyAwIDEuMzEtMS4xNiAyLTIgMiAuOTIgMS4yMiAyLjQ5IDIgNCAyIDIuMjEgMCA0LTEuNzkgNC00IDAtMS42Ni0xLjM0LTMtMy0zem0xMy43MS05LjM3bC0xLjM0LTEuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwTDkgMTIuMjUgMTEuNzUgMTVsOC45Ni04Ljk2Yy4zOS0uMzkuMzktMS4wMiAwLTEuNDF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYnVyc3QtbW9kZSI+PHBhdGggZD0iTTEgNWgydjE0SDF6bTQgMGgydjE0SDV6bTE3IDBIMTBjLS41NSAwLTEgLjQ1LTEgMXYxMmMwIC41NS40NSAxIDEgMWgxMmMuNTUgMCAxLS40NSAxLTFWNmMwLS41NS0uNDUtMS0xLTF6TTExIDE3bDIuNS0zLjE1TDE1LjI5IDE2bDIuNS0zLjIyTDIxIDE3SDExeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNhbWVyYSI+PHBhdGggZD0iTTkuNCAxMC41bDQuNzctOC4yNkMxMy40NyAyLjA5IDEyLjc1IDIgMTIgMmMtMi40IDAtNC42Ljg1LTYuMzIgMi4yNWwzLjY2IDYuMzUuMDYtLjF6TTIxLjU0IDljLS45Mi0yLjkyLTMuMTUtNS4yNi02LTYuMzRMMTEuODggOWg5LjY2em0uMjYgMWgtNy40OWwuMjkuNSA0Ljc2IDguMjVDMjEgMTYuOTcgMjIgMTQuNjEgMjIgMTJjMC0uNjktLjA3LTEuMzUtLjItMnpNOC41NCAxMmwtMy45LTYuNzVDMy4wMSA3LjAzIDIgOS4zOSAyIDEyYzAgLjY5LjA3IDEuMzUuMiAyaDcuNDlsLTEuMTUtMnptLTYuMDggM2MuOTIgMi45MiAzLjE1IDUuMjYgNiA2LjM0TDEyLjEyIDE1SDIuNDZ6bTExLjI3IDBsLTMuOSA2Ljc2Yy43LjE1IDEuNDIuMjQgMi4xNy4yNCAyLjQgMCA0LjYtLjg1IDYuMzItMi4yNWwtMy42Ni02LjM1LS45MyAxLjZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2FtZXJhLWFsdCI+PGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iMy4yIj48L2NpcmNsZT48cGF0aCBkPSJNOSAyTDcuMTcgNEg0Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJoLTMuMTdMMTUgMkg5em0zIDE1Yy0yLjc2IDAtNS0yLjI0LTUtNXMyLjI0LTUgNS01IDUgMi4yNCA1IDUtMi4yNCA1LTUgNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJjYW1lcmEtZnJvbnQiPjxwYXRoIGQ9Ik0xMCAyMEg1djJoNXYybDMtMy0zLTN2MnptNCAwdjJoNXYtMmgtNXpNMTIgOGMxLjEgMCAyLS45IDItMnMtLjktMi0yLTItMS45OS45LTEuOTkgMlMxMC45IDggMTIgOHptNS04SDdDNS45IDAgNSAuOSA1IDJ2MTRjMCAxLjEuOSAyIDIgMmgxMGMxLjEgMCAyLS45IDItMlYyYzAtMS4xLS45LTItMi0yek03IDJoMTB2MTAuNWMwLTEuNjctMy4zMy0yLjUtNS0yLjVzLTUgLjgzLTUgMi41VjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2FtZXJhLXJlYXIiPjxwYXRoIGQ9Ik0xMCAyMEg1djJoNXYybDMtMy0zLTN2MnptNCAwdjJoNXYtMmgtNXptMy0yMEg3QzUuOSAwIDUgLjkgNSAydjE0YzAgMS4xLjkgMiAyIDJoMTBjMS4xIDAgMi0uOSAyLTJWMmMwLTEuMS0uOS0yLTItMnptLTUgNmMtMS4xMSAwLTItLjktMi0ycy44OS0yIDEuOTktMiAyIC45IDIgMkMxNCA1LjEgMTMuMSA2IDEyIDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2FtZXJhLXJvbGwiPjxwYXRoIGQ9Ik0xNCA1YzAtMS4xLS45LTItMi0yaC0xVjJjMC0uNTUtLjQ1LTEtMS0xSDZjLS41NSAwLTEgLjQ1LTEgMXYxSDRjLTEuMSAwLTIgLjktMiAydjE1YzAgMS4xLjkgMiAyIDJoOGMxLjEgMCAyLS45IDItMmg4VjVoLTh6bS0yIDEzaC0ydi0yaDJ2MnptMC05aC0yVjdoMnYyem00IDloLTJ2LTJoMnYyem0wLTloLTJWN2gydjJ6bTQgOWgtMnYtMmgydjJ6bTAtOWgtMlY3aDJ2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjZW50ZXItZm9jdXMtc3Ryb25nIj48cGF0aCBkPSJNMTIgOGMtMi4yMSAwLTQgMS43OS00IDRzMS43OSA0IDQgNCA0LTEuNzkgNC00LTEuNzktNC00LTR6bS03IDdIM3Y0YzAgMS4xLjkgMiAyIDJoNHYtMkg1di00ek01IDVoNFYzSDVjLTEuMSAwLTIgLjktMiAydjRoMlY1em0xNC0yaC00djJoNHY0aDJWNWMwLTEuMS0uOS0yLTItMnptMCAxNmgtNHYyaDRjMS4xIDAgMi0uOSAyLTJ2LTRoLTJ2NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJjZW50ZXItZm9jdXMtd2VhayI+PHBhdGggZD0iTTUgMTVIM3Y0YzAgMS4xLjkgMiAyIDJoNHYtMkg1di00ek01IDVoNFYzSDVjLTEuMSAwLTIgLjktMiAydjRoMlY1em0xNC0yaC00djJoNHY0aDJWNWMwLTEuMS0uOS0yLTItMnptMCAxNmgtNHYyaDRjMS4xIDAgMi0uOSAyLTJ2LTRoLTJ2NHpNMTIgOGMtMi4yMSAwLTQgMS43OS00IDRzMS43OSA0IDQgNCA0LTEuNzkgNC00LTEuNzktNC00LTR6bTAgNmMtMS4xIDAtMi0uOS0yLTJzLjktMiAyLTIgMiAuOSAyIDItLjkgMi0yIDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY29sbGVjdGlvbnMiPjxwYXRoIGQ9Ik0yMiAxNlY0YzAtMS4xLS45LTItMi0ySDhjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJ6bS0xMS00bDIuMDMgMi43MUwxNiAxMWw0IDVIOGwzLTR6TTIgNnYxNGMwIDEuMS45IDIgMiAyaDE0di0ySDRWNkgyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNvbGxlY3Rpb25zLWJvb2ttYXJrIj48cGF0aCBkPSJNNCA2SDJ2MTRjMCAxLjEuOSAyIDIgMmgxNHYtMkg0VjZ6bTE2LTRIOGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yem0wIDEwbC0yLjUtMS41TDE1IDEyVjRoNXY4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNvbG9yLWxlbnMiPjxwYXRoIGQ9Ik0xMiAzYy00Ljk3IDAtOSA0LjAzLTkgOXM0LjAzIDkgOSA5Yy44MyAwIDEuNS0uNjcgMS41LTEuNSAwLS4zOS0uMTUtLjc0LS4zOS0xLjAxLS4yMy0uMjYtLjM4LS42MS0uMzgtLjk5IDAtLjgzLjY3LTEuNSAxLjUtMS41SDE2YzIuNzYgMCA1LTIuMjQgNS01IDAtNC40Mi00LjAzLTgtOS04em0tNS41IDljLS44MyAwLTEuNS0uNjctMS41LTEuNVM1LjY3IDkgNi41IDkgOCA5LjY3IDggMTAuNSA3LjMzIDEyIDYuNSAxMnptMy00QzguNjcgOCA4IDcuMzMgOCA2LjVTOC42NyA1IDkuNSA1czEuNS42NyAxLjUgMS41UzEwLjMzIDggOS41IDh6bTUgMGMtLjgzIDAtMS41LS42Ny0xLjUtMS41UzEzLjY3IDUgMTQuNSA1czEuNS42NyAxLjUgMS41UzE1LjMzIDggMTQuNSA4em0zIDRjLS44MyAwLTEuNS0uNjctMS41LTEuNVMxNi42NyA5IDE3LjUgOXMxLjUuNjcgMS41IDEuNS0uNjcgMS41LTEuNSAxLjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY29sb3JpemUiPjxwYXRoIGQ9Ik0yMC43MSA1LjYzbC0yLjM0LTIuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0zLjEyIDMuMTItMS45My0xLjkxLTEuNDEgMS40MSAxLjQyIDEuNDJMMyAxNi4yNVYyMWg0Ljc1bDguOTItOC45MiAxLjQyIDEuNDIgMS40MS0xLjQxLTEuOTItMS45MiAzLjEyLTMuMTJjLjQtLjQuNC0xLjAzLjAxLTEuNDJ6TTYuOTIgMTlMNSAxNy4wOGw4LjA2LTguMDYgMS45MiAxLjkyTDYuOTIgMTl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY29tcGFyZSI+PHBhdGggZD0iTTEwIDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmg1djJoMlYxaC0ydjJ6bTAgMTVINWw1LTZ2NnptOS0xNWgtNXYyaDV2MTNsLTUtNnY5aDVjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjb250cm9sLXBvaW50Ij48cGF0aCBkPSJNMTMgN2gtMnY0SDd2Mmg0djRoMnYtNGg0di0yaC00Vjd6bS0xLTVDNi40OSAyIDIgNi40OSAyIDEyczQuNDkgMTAgMTAgMTAgMTAtNC40OSAxMC0xMFMxNy41MSAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNvbnRyb2wtcG9pbnQtZHVwbGljYXRlIj48cGF0aCBkPSJNMTYgOGgtMnYzaC0zdjJoM3YzaDJ2LTNoM3YtMmgtM3pNMiAxMmMwLTIuNzkgMS42NC01LjIgNC4wMS02LjMyVjMuNTJDMi41MiA0Ljc2IDAgOC4wOSAwIDEyczIuNTIgNy4yNCA2LjAxIDguNDh2LTIuMTZDMy42NCAxNy4yIDIgMTQuNzkgMiAxMnptMTMtOWMtNC45NiAwLTkgNC4wNC05IDlzNC4wNCA5IDkgOSA5LTQuMDQgOS05LTQuMDQtOS05LTl6bTAgMTZjLTMuODYgMC03LTMuMTQtNy03czMuMTQtNyA3LTcgNyAzLjE0IDcgNy0zLjE0IDctNyA3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3AiPjxwYXRoIGQ9Ik0xNyAxNWgyVjdjMC0xLjEtLjktMi0yLTJIOXYyaDh2OHpNNyAxN1YxSDV2NEgxdjJoNHYxMGMwIDEuMS45IDIgMiAyaDEwdjRoMnYtNGg0di0ySDd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY3JvcC0xNi05Ij48cGF0aCBkPSJNMTkgNkg1Yy0xLjEgMC0yIC45LTIgMnY4YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWOGMwLTEuMS0uOS0yLTItMnptMCAxMEg1VjhoMTR2OHoiPjwvcGF0aD48L2c+CjxnIGlkPSJjcm9wLTMtMiI+PHBhdGggZD0iTTE5IDRINWMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0wIDE0SDVWNmgxNHYxMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjcm9wLTUtNCI+PHBhdGggZD0iTTE5IDVINWMtMS4xIDAtMiAuOS0yIDJ2MTBjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0wIDEySDVWN2gxNHYxMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJjcm9wLTctNSI+PHBhdGggZD0iTTE5IDdINWMtMS4xIDAtMiAuOS0yIDJ2NmMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjljMC0xLjEtLjktMi0yLTJ6bTAgOEg1VjloMTR2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjcm9wLWRpbiI+PHBhdGggZD0iTTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDVWNWgxNHYxNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJjcm9wLWZyZWUiPjxwYXRoIGQ9Ik0zIDV2NGgyVjVoNFYzSDVjLTEuMSAwLTIgLjktMiAyem0yIDEwSDN2NGMwIDEuMS45IDIgMiAyaDR2LTJINXYtNHptMTQgNGgtNHYyaDRjMS4xIDAgMi0uOSAyLTJ2LTRoLTJ2NHptMC0xNmgtNHYyaDR2NGgyVjVjMC0xLjEtLjktMi0yLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY3JvcC1sYW5kc2NhcGUiPjxwYXRoIGQ9Ik0xOSA1SDVjLTEuMSAwLTIgLjktMiAydjEwYzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWN2MwLTEuMS0uOS0yLTItMnptMCAxMkg1VjdoMTR2MTB6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY3JvcC1vcmlnaW5hbCI+PHBhdGggZD0iTTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDVWNWgxNHYxNHptLTUuMDQtNi43MWwtMi43NSAzLjU0LTEuOTYtMi4zNkw2LjUgMTdoMTFsLTMuNTQtNC43MXoiPjwvcGF0aD48L2c+CjxnIGlkPSJjcm9wLXBvcnRyYWl0Ij48cGF0aCBkPSJNMTcgM0g3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDEwYzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1Y1aDEwdjE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3Atcm90YXRlIj48cGF0aCBkPSJNNy40NyAyMS40OUM0LjIgMTkuOTMgMS44NiAxNi43NiAxLjUgMTNIMGMuNTEgNi4xNiA1LjY2IDExIDExLjk1IDExIC4yMyAwIC40NC0uMDIuNjYtLjAzTDguOCAyMC4xNWwtMS4zMyAxLjM0ek0xMi4wNSAwYy0uMjMgMC0uNDQuMDItLjY2LjA0bDMuODEgMy44MSAxLjMzLTEuMzNDMTkuOCA0LjA3IDIyLjE0IDcuMjQgMjIuNSAxMUgyNGMtLjUxLTYuMTYtNS42Ni0xMS0xMS45NS0xMXpNMTYgMTRoMlY4YzAtMS4xMS0uOS0yLTItMmgtNnYyaDZ2NnptLTggMlY0SDZ2Mkg0djJoMnY4YzAgMS4xLjg5IDIgMiAyaDh2Mmgydi0yaDJ2LTJIOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJjcm9wLXNxdWFyZSI+PHBhdGggZD0iTTE4IDRINmMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0wIDE0SDZWNmgxMnYxMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJkZWhhemUiPjxwYXRoIGQ9Ik0yIDE1LjV2MmgyMHYtMkgyem0wLTV2MmgyMHYtMkgyem0wLTV2MmgyMHYtMkgyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImRldGFpbHMiPjxwYXRoIGQ9Ik0zIDRsOSAxNiA5LTE2SDN6bTMuMzggMmgxMS4yNUwxMiAxNiA2LjM4IDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZWRpdCI+PHBhdGggZD0iTTMgMTcuMjVWMjFoMy43NUwxNy44MSA5Ljk0bC0zLjc1LTMuNzVMMyAxNy4yNXpNMjAuNzEgNy4wNGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC0yLjM0LTIuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0xLjgzIDEuODMgMy43NSAzLjc1IDEuODMtMS44M3oiPjwvcGF0aD48L2c+CjxnIGlkPSJleHBvc3VyZSI+PHBhdGggZD0iTTE1IDE3djJoMnYtMmgydi0yaC0ydi0yaC0ydjJoLTJ2Mmgyem01LTE1SDRjLTEuMSAwLTIgLjktMiAydjE2YzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnpNNSA1aDZ2Mkg1VjV6bTE1IDE1SDRMMjAgNHYxNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJleHBvc3VyZS1uZWctMSI+PHBhdGggZD0iTTQgMTF2Mmg4di0ySDR6bTE1IDdoLTJWNy4zOEwxNCA4LjRWNi43TDE4LjcgNWguM3YxM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJleHBvc3VyZS1uZWctMiI+PHBhdGggZD0iTTE1LjA1IDE2LjI5bDIuODYtMy4wN2MuMzgtLjM5LjcyLS43OSAxLjA0LTEuMTguMzItLjM5LjU5LS43OC44Mi0xLjE3LjIzLS4zOS40MS0uNzguNTQtMS4xN3MuMTktLjc5LjE5LTEuMThjMC0uNTMtLjA5LTEuMDItLjI3LTEuNDYtLjE4LS40NC0uNDQtLjgxLS43OC0xLjExLS4zNC0uMzEtLjc3LS41NC0xLjI2LS43MS0uNTEtLjE2LTEuMDgtLjI0LTEuNzItLjI0LS42OSAwLTEuMzEuMTEtMS44NS4zMi0uNTQuMjEtMSAuNTEtMS4zNi44OC0uMzcuMzctLjY1LjgtLjg0IDEuMy0uMTguNDctLjI3Ljk3LS4yOCAxLjVoMi4xNGMuMDEtLjMxLjA1LS42LjEzLS44Ny4wOS0uMjkuMjMtLjU0LjQtLjc1LjE4LS4yMS40MS0uMzcuNjgtLjQ5LjI3LS4xMi42LS4xOC45Ni0uMTguMzEgMCAuNTguMDUuODEuMTUuMjMuMS40My4yNS41OS40My4xNi4xOC4yOC40LjM3LjY1LjA4LjI1LjEzLjUyLjEzLjgxIDAgLjIyLS4wMy40My0uMDguNjUtLjA2LjIyLS4xNS40NS0uMjkuNy0uMTQuMjUtLjMyLjUzLS41Ni44My0uMjMuMy0uNTIuNjUtLjg4IDEuMDNsLTQuMTcgNC41NVYxOEgyMXYtMS43MWgtNS45NXpNMiAxMXYyaDh2LTJIMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJleHBvc3VyZS1wbHVzLTEiPjxwYXRoIGQ9Ik0xMCA3SDh2NEg0djJoNHY0aDJ2LTRoNHYtMmgtNFY3em0xMCAxMWgtMlY3LjM4TDE1IDguNFY2LjdMMTkuNyA1aC4zdjEzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImV4cG9zdXJlLXBsdXMtMiI+PHBhdGggZD0iTTE2LjA1IDE2LjI5bDIuODYtMy4wN2MuMzgtLjM5LjcyLS43OSAxLjA0LTEuMTguMzItLjM5LjU5LS43OC44Mi0xLjE3LjIzLS4zOS40MS0uNzguNTQtMS4xNy4xMy0uMzkuMTktLjc5LjE5LTEuMTggMC0uNTMtLjA5LTEuMDItLjI3LTEuNDYtLjE4LS40NC0uNDQtLjgxLS43OC0xLjExLS4zNC0uMzEtLjc3LS41NC0xLjI2LS43MS0uNTEtLjE2LTEuMDgtLjI0LTEuNzItLjI0LS42OSAwLTEuMzEuMTEtMS44NS4zMi0uNTQuMjEtMSAuNTEtMS4zNi44OC0uMzcuMzctLjY1LjgtLjg0IDEuMy0uMTguNDctLjI3Ljk3LS4yOCAxLjVoMi4xNGMuMDEtLjMxLjA1LS42LjEzLS44Ny4wOS0uMjkuMjMtLjU0LjQtLjc1LjE4LS4yMS40MS0uMzcuNjgtLjQ5LjI3LS4xMi42LS4xOC45Ni0uMTguMzEgMCAuNTguMDUuODEuMTUuMjMuMS40My4yNS41OS40My4xNi4xOC4yOC40LjM3LjY1LjA4LjI1LjEzLjUyLjEzLjgxIDAgLjIyLS4wMy40My0uMDguNjUtLjA2LjIyLS4xNS40NS0uMjkuNy0uMTQuMjUtLjMyLjUzLS41Ni44My0uMjMuMy0uNTIuNjUtLjg4IDEuMDNsLTQuMTcgNC41NVYxOEgyMnYtMS43MWgtNS45NXpNOCA3SDZ2NEgydjJoNHY0aDJ2LTRoNHYtMkg4Vjd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZXhwb3N1cmUtemVybyI+PHBhdGggZD0iTTE2LjE0IDEyLjVjMCAxLS4xIDEuODUtLjMgMi41NS0uMi43LS40OCAxLjI3LS44MyAxLjctLjM2LjQ0LS43OS43NS0xLjMuOTUtLjUxLjItMS4wNy4zLTEuNy4zLS42MiAwLTEuMTgtLjEtMS42OS0uMy0uNTEtLjItLjk1LS41MS0xLjMxLS45NS0uMzYtLjQ0LS42NS0xLjAxLS44NS0xLjctLjItLjctLjMtMS41NS0uMy0yLjU1di0yLjA0YzAtMSAuMS0xLjg1LjMtMi41NS4yLS43LjQ4LTEuMjYuODQtMS42OS4zNi0uNDMuOC0uNzQgMS4zMS0uOTNDMTAuODEgNS4xIDExLjM4IDUgMTIgNWMuNjMgMCAxLjE5LjEgMS43LjI5LjUxLjE5Ljk1LjUgMS4zMS45My4zNi40My42NC45OS44NCAxLjY5LjIuNy4zIDEuNTQuMyAyLjU1djIuMDR6bS0yLjExLTIuMzZjMC0uNjQtLjA1LTEuMTgtLjEzLTEuNjItLjA5LS40NC0uMjItLjc5LS40LTEuMDYtLjE3LS4yNy0uMzktLjQ2LS42NC0uNTgtLjI1LS4xMy0uNTQtLjE5LS44Ni0uMTktLjMyIDAtLjYxLjA2LS44Ni4xOHMtLjQ3LjMxLS42NC41OGMtLjE3LjI3LS4zMS42Mi0uNCAxLjA2cy0uMTMuOTgtLjEzIDEuNjJ2Mi42N2MwIC42NC4wNSAxLjE4LjE0IDEuNjIuMDkuNDUuMjMuODEuNCAxLjA5cy4zOS40OC42NC42MS41NC4xOS44Ny4xOWMuMzMgMCAuNjItLjA2Ljg3LS4xOXMuNDYtLjMzLjYzLS42MWMuMTctLjI4LjMtLjY0LjM5LTEuMDkuMDktLjQ1LjEzLS45OS4xMy0xLjYydi0yLjY2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlciI+PHBhdGggZD0iTTE1Ljk2IDEwLjI5bC0yLjc1IDMuNTQtMS45Ni0yLjM2TDguNSAxNWgxMWwtMy41NC00Ljcxek0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTgtNEg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1YzaDE0djE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci0xIj48cGF0aCBkPSJNMyA1SDF2MTZjMCAxLjEuOSAyIDIgMmgxNnYtMkgzVjV6bTExIDEwaDJWNWgtNHYyaDJ2OHptNy0xNEg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1YzaDE0djE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci0yIj48cGF0aCBkPSJNMyA1SDF2MTZjMCAxLjEuOSAyIDIgMmgxNnYtMkgzVjV6bTE4LTRIN2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlYzYzAtMS4xLS45LTItMi0yem0wIDE2SDdWM2gxNHYxNHptLTQtNGgtNHYtMmgyYzEuMSAwIDItLjg5IDItMlY3YzAtMS4xMS0uOS0yLTItMmgtNHYyaDR2MmgtMmMtMS4xIDAtMiAuODktMiAydjRoNnYtMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJmaWx0ZXItMyI+PHBhdGggZD0iTTIxIDFIN2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlYzYzAtMS4xLS45LTItMi0yem0wIDE2SDdWM2gxNHYxNHpNMyA1SDF2MTZjMCAxLjEuOSAyIDIgMmgxNnYtMkgzVjV6bTE0IDh2LTEuNWMwLS44My0uNjctMS41LTEuNS0xLjUuODMgMCAxLjUtLjY3IDEuNS0xLjVWN2MwLTEuMTEtLjktMi0yLTJoLTR2Mmg0djJoLTJ2MmgydjJoLTR2Mmg0YzEuMSAwIDItLjg5IDItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJmaWx0ZXItNCI+PHBhdGggZD0iTTMgNUgxdjE2YzAgMS4xLjkgMiAyIDJoMTZ2LTJIM1Y1em0xMiAxMGgyVjVoLTJ2NGgtMlY1aC0ydjZoNHY0em02LTE0SDdjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWM2MwLTEuMS0uOS0yLTItMnptMCAxNkg3VjNoMTR2MTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLTUiPjxwYXRoIGQ9Ik0yMSAxSDdjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWM2MwLTEuMS0uOS0yLTItMnptMCAxNkg3VjNoMTR2MTR6TTMgNUgxdjE2YzAgMS4xLjkgMiAyIDJoMTZ2LTJIM1Y1em0xNCA4di0yYzAtMS4xMS0uOS0yLTItMmgtMlY3aDRWNWgtNnY2aDR2MmgtNHYyaDRjMS4xIDAgMi0uODkgMi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci02Ij48cGF0aCBkPSJNMyA1SDF2MTZjMCAxLjEuOSAyIDIgMmgxNnYtMkgzVjV6bTE4LTRIN2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlYzYzAtMS4xLS45LTItMi0yem0wIDE2SDdWM2gxNHYxNHptLTgtMmgyYzEuMSAwIDItLjg5IDItMnYtMmMwLTEuMTEtLjktMi0yLTJoLTJWN2g0VjVoLTRjLTEuMSAwLTIgLjg5LTIgMnY2YzAgMS4xMS45IDIgMiAyem0wLTRoMnYyaC0ydi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci03Ij48cGF0aCBkPSJNMyA1SDF2MTZjMCAxLjEuOSAyIDIgMmgxNnYtMkgzVjV6bTE4LTRIN2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlYzYzAtMS4xLS45LTItMi0yem0wIDE2SDdWM2gxNHYxNHptLTgtMmw0LThWNWgtNnYyaDRsLTQgOGgyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci04Ij48cGF0aCBkPSJNMyA1SDF2MTZjMCAxLjEuOSAyIDIgMmgxNnYtMkgzVjV6bTE4LTRIN2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlYzYzAtMS4xLS45LTItMi0yem0wIDE2SDdWM2gxNHYxNHptLTgtMmgyYzEuMSAwIDItLjg5IDItMnYtMS41YzAtLjgzLS42Ny0xLjUtMS41LTEuNS44MyAwIDEuNS0uNjcgMS41LTEuNVY3YzAtMS4xMS0uOS0yLTItMmgtMmMtMS4xIDAtMiAuODktMiAydjEuNWMwIC44My42NyAxLjUgMS41IDEuNS0uODMgMC0xLjUuNjctMS41IDEuNVYxM2MwIDEuMTEuOSAyIDIgMnptMC04aDJ2MmgtMlY3em0wIDRoMnYyaC0ydi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci05Ij48cGF0aCBkPSJNMyA1SDF2MTZjMCAxLjEuOSAyIDIgMmgxNnYtMkgzVjV6bTE4LTRIN2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlYzYzAtMS4xLS45LTItMi0yem0wIDE2SDdWM2gxNHYxNHpNMTUgNWgtMmMtMS4xIDAtMiAuODktMiAydjJjMCAxLjExLjkgMiAyIDJoMnYyaC00djJoNGMxLjEgMCAyLS44OSAyLTJWN2MwLTEuMTEtLjktMi0yLTJ6bTAgNGgtMlY3aDJ2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJmaWx0ZXItOS1wbHVzIj48cGF0aCBkPSJNMyA1SDF2MTZjMCAxLjEuOSAyIDIgMmgxNnYtMkgzVjV6bTExIDdWOGMwLTEuMTEtLjktMi0yLTJoLTFjLTEuMSAwLTIgLjg5LTIgMnYxYzAgMS4xMS45IDIgMiAyaDF2MUg5djJoM2MxLjEgMCAyLS44OSAyLTJ6bS0zLTNWOGgxdjFoLTF6bTEwLThIN2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlYzYzAtMS4xLS45LTItMi0yem0wIDhoLTJWN2gtMnYyaC0ydjJoMnYyaDJ2LTJoMnY2SDdWM2gxNHY2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci1iLWFuZC13Ij48cGF0aCBkPSJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTZsLTctOHY4SDVsNy04VjVoN3YxNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJmaWx0ZXItY2VudGVyLWZvY3VzIj48cGF0aCBkPSJNNSAxNUgzdjRjMCAxLjEuOSAyIDIgMmg0di0ySDV2LTR6TTUgNWg0VjNINWMtMS4xIDAtMiAuOS0yIDJ2NGgyVjV6bTE0LTJoLTR2Mmg0djRoMlY1YzAtMS4xLS45LTItMi0yem0wIDE2aC00djJoNGMxLjEgMCAyLS45IDItMnYtNGgtMnY0ek0xMiA5Yy0xLjY2IDAtMyAxLjM0LTMgM3MxLjM0IDMgMyAzIDMtMS4zNCAzLTMtMS4zNC0zLTMtM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJmaWx0ZXItZHJhbWEiPjxwYXRoIGQ9Ik0xOS4zNSAxMC4wNEMxOC42NyA2LjU5IDE1LjY0IDQgMTIgNCA5LjExIDQgNi42MSA1LjY0IDUuMzYgOC4wNCAyLjM1IDguMzYgMCAxMC45IDAgMTRjMCAzLjMxIDIuNjkgNiA2IDZoMTNjMi43NiAwIDUtMi4yNCA1LTUgMC0yLjY0LTIuMDUtNC43OC00LjY1LTQuOTZ6TTE5IDE4SDZjLTIuMjEgMC00LTEuNzktNC00czEuNzktNCA0LTQgNCAxLjc5IDQgNGgyYzAtMi43Ni0xLjg2LTUuMDgtNC40LTUuNzhDOC42MSA2Ljg4IDEwLjIgNiAxMiA2YzMuMDMgMCA1LjUgMi40NyA1LjUgNS41di41SDE5YzEuNjUgMCAzIDEuMzUgMyAzcy0xLjM1IDMtMyAzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci1mcmFtZXMiPjxwYXRoIGQ9Ik0yMCA0aC00bC00LTQtNCA0SDRjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNmMwLTEuMS0uOS0yLTItMnptMCAxNkg0VjZoNC41MmwzLjUyLTMuNUwxNS41MiA2SDIwdjE0ek0xOCA4SDZ2MTBoMTIiPjwvcGF0aD48L2c+CjxnIGlkPSJmaWx0ZXItaGRyIj48cGF0aCBkPSJNMTQgNmwtMy43NSA1IDIuODUgMy44LTEuNiAxLjJDOS44MSAxMy43NSA3IDEwIDcgMTBsLTYgOGgyMkwxNCA2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci1ub25lIj48cGF0aCBkPSJNMyA1SDF2MTZjMCAxLjEuOSAyIDIgMmgxNnYtMkgzVjV6bTE4LTRIN2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlYzYzAtMS4xLS45LTItMi0yem0wIDE2SDdWM2gxNHYxNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJmaWx0ZXItdGlsdC1zaGlmdCI+PHBhdGggZD0iTTExIDQuMDdWMi4wNWMtMi4wMS4yLTMuODQgMS01LjMyIDIuMjFMNy4xIDUuNjljMS4xMS0uODYgMi40NC0xLjQ0IDMuOS0xLjYyem03LjMyLjE5QzE2Ljg0IDMuMDUgMTUuMDEgMi4yNSAxMyAyLjA1djIuMDJjMS40Ni4xOCAyLjc5Ljc2IDMuOSAxLjYybDEuNDItMS40M3pNMTkuOTMgMTFoMi4wMmMtLjItMi4wMS0xLTMuODQtMi4yMS01LjMyTDE4LjMxIDcuMWMuODYgMS4xMSAxLjQ0IDIuNDQgMS42MiAzLjl6TTUuNjkgNy4xTDQuMjYgNS42OEMzLjA1IDcuMTYgMi4yNSA4Ljk5IDIuMDUgMTFoMi4wMmMuMTgtMS40Ni43Ni0yLjc5IDEuNjItMy45ek00LjA3IDEzSDIuMDVjLjIgMi4wMSAxIDMuODQgMi4yMSA1LjMybDEuNDMtMS40M2MtLjg2LTEuMS0xLjQ0LTIuNDMtMS42Mi0zLjg5ek0xNSAxMmMwLTEuNjYtMS4zNC0zLTMtM3MtMyAxLjM0LTMgMyAxLjM0IDMgMyAzIDMtMS4zNCAzLTN6bTMuMzEgNC45bDEuNDMgMS40M2MxLjIxLTEuNDggMi4wMS0zLjMyIDIuMjEtNS4zMmgtMi4wMmMtLjE4IDEuNDUtLjc2IDIuNzgtMS42MiAzLjg5ek0xMyAxOS45M3YyLjAyYzIuMDEtLjIgMy44NC0xIDUuMzItMi4yMWwtMS40My0xLjQzYy0xLjEuODYtMi40MyAxLjQ0LTMuODkgMS42MnptLTcuMzItLjE5QzcuMTYgMjAuOTUgOSAyMS43NSAxMSAyMS45NXYtMi4wMmMtMS40Ni0uMTgtMi43OS0uNzYtMy45LTEuNjJsLTEuNDIgMS40M3oiPjwvcGF0aD48L2c+CjxnIGlkPSJmaWx0ZXItdmludGFnZSI+PHBhdGggZD0iTTE4LjcgMTIuNGMtLjI4LS4xNi0uNTctLjI5LS44Ni0uNC4yOS0uMTEuNTgtLjI0Ljg2LS40IDEuOTItMS4xMSAyLjk5LTMuMTIgMy01LjE5LTEuNzktMS4wMy00LjA3LTEuMTEtNiAwLS4yOC4xNi0uNTQuMzUtLjc4LjU0LjA1LS4zMS4wOC0uNjMuMDgtLjk1IDAtMi4yMi0xLjIxLTQuMTUtMy01LjE5QzEwLjIxIDEuODUgOSAzLjc4IDkgNmMwIC4zMi4wMy42NC4wOC45NS0uMjQtLjItLjUtLjM5LS43OC0uNTUtMS45Mi0xLjExLTQuMi0xLjAzLTYgMCAwIDIuMDcgMS4wNyA0LjA4IDMgNS4xOS4yOC4xNi41Ny4yOS44Ni40LS4yOS4xMS0uNTguMjQtLjg2LjQtMS45MiAxLjExLTIuOTkgMy4xMi0zIDUuMTkgMS43OSAxLjAzIDQuMDcgMS4xMSA2IDAgLjI4LS4xNi41NC0uMzUuNzgtLjU0LS4wNS4zMi0uMDguNjQtLjA4Ljk2IDAgMi4yMiAxLjIxIDQuMTUgMyA1LjE5IDEuNzktMS4wNCAzLTIuOTcgMy01LjE5IDAtLjMyLS4wMy0uNjQtLjA4LS45NS4yNC4yLjUuMzguNzguNTQgMS45MiAxLjExIDQuMiAxLjAzIDYgMC0uMDEtMi4wNy0xLjA4LTQuMDgtMy01LjE5ek0xMiAxNmMtMi4yMSAwLTQtMS43OS00LTRzMS43OS00IDQtNCA0IDEuNzkgNCA0LTEuNzkgNC00IDR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmxhcmUiPjxwYXRoIGQ9Ik03IDExSDF2Mmg2di0yem0yLjE3LTMuMjRMNy4wNSA1LjY0IDUuNjQgNy4wNWwyLjEyIDIuMTIgMS40MS0xLjQxek0xMyAxaC0ydjZoMlYxem01LjM2IDYuMDVsLTEuNDEtMS40MS0yLjEyIDIuMTIgMS40MSAxLjQxIDIuMTItMi4xMnpNMTcgMTF2Mmg2di0yaC02em0tNS0yYy0xLjY2IDAtMyAxLjM0LTMgM3MxLjM0IDMgMyAzIDMtMS4zNCAzLTMtMS4zNC0zLTMtM3ptMi44MyA3LjI0bDIuMTIgMi4xMiAxLjQxLTEuNDEtMi4xMi0yLjEyLTEuNDEgMS40MXptLTkuMTkuNzFsMS40MSAxLjQxIDIuMTItMi4xMi0xLjQxLTEuNDEtMi4xMiAyLjEyek0xMSAyM2gydi02aC0ydjZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmxhc2gtYXV0byI+PHBhdGggZD0iTTMgMnYxMmgzdjlsNy0xMkg5bDQtOUgzem0xNiAwaC0ybC0zLjIgOWgxLjlsLjctMmgzLjJsLjcgMmgxLjlMMTkgMnptLTIuMTUgNS42NUwxOCA0bDEuMTUgMy42NWgtMi4zeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZsYXNoLW9mZiI+PHBhdGggZD0iTTMuMjcgM0wyIDQuMjdsNSA1VjEzaDN2OWwzLjU4LTYuMTRMMTcuNzMgMjAgMTkgMTguNzMgMy4yNyAzek0xNyAxMGgtNGw0LThIN3YyLjE4bDguNDYgOC40NkwxNyAxMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJmbGFzaC1vbiI+PHBhdGggZD0iTTcgMnYxMWgzdjlsNy0xMmgtNGw0LTh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmxpcCI+PHBhdGggZD0iTTE1IDIxaDJ2LTJoLTJ2MnptNC0xMmgyVjdoLTJ2MnpNMyA1djE0YzAgMS4xLjkgMiAyIDJoNHYtMkg1VjVoNFYzSDVjLTEuMSAwLTIgLjktMiAyem0xNi0ydjJoMmMwLTEuMS0uOS0yLTItMnptLTggMjBoMlYxaC0ydjIyem04LTZoMnYtMmgtMnYyek0xNSA1aDJWM2gtMnYyem00IDhoMnYtMmgtMnYyem0wIDhjMS4xIDAgMi0uOSAyLTJoLTJ2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJncmFkaWVudCI+PHBhdGggZD0iTTExIDloMnYyaC0yem0tMiAyaDJ2Mkg5em00IDBoMnYyaC0yem0yLTJoMnYyaC0yek03IDloMnYySDd6bTEyLTZINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yek05IDE4SDd2LTJoMnYyem00IDBoLTJ2LTJoMnYyem00IDBoLTJ2LTJoMnYyem0yLTdoLTJ2MmgydjJoLTJ2LTJoLTJ2MmgtMnYtMmgtMnYySDl2LTJIN3YySDV2LTJoMnYtMkg1VjVoMTR2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJncmFpbiI+PHBhdGggZD0iTTEwIDEyYy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnpNNiA4Yy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnptMCA4Yy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnptMTItOGMxLjEgMCAyLS45IDItMnMtLjktMi0yLTItMiAuOS0yIDIgLjkgMiAyIDJ6bS00IDhjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem00LTRjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem0tNC00Yy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnptLTQtNGMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZ3JpZC1vZmYiPjxwYXRoIGQ9Ik04IDR2MS40NWwyIDJWNGg0djRoLTMuNDVsMiAySDE0djEuNDVsMiAyVjEwaDR2NGgtMy40NWwyIDJIMjB2MS40NWwyIDJWNGMwLTEuMS0uOS0yLTItMkg0LjU1bDIgMkg4em04IDBoNHY0aC00VjR6TTEuMjcgMS4yN0wwIDIuNTVsMiAyVjIwYzAgMS4xLjkgMiAyIDJoMTUuNDZsMiAyIDEuMjctMS4yN0wxLjI3IDEuMjd6TTEwIDEyLjU1TDExLjQ1IDE0SDEwdi0xLjQ1em0tNi02TDUuNDUgOEg0VjYuNTV6TTggMjBINHYtNGg0djR6bTAtNkg0di00aDMuNDVsLjU1LjU1VjE0em02IDZoLTR2LTRoMy40NWwuNTUuNTRWMjB6bTIgMHYtMS40NkwxNy40NiAyMEgxNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJncmlkLW9uIj48cGF0aCBkPSJNMjAgMkg0Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6TTggMjBINHYtNGg0djR6bTAtNkg0di00aDR2NHptMC02SDRWNGg0djR6bTYgMTJoLTR2LTRoNHY0em0wLTZoLTR2LTRoNHY0em0wLTZoLTRWNGg0djR6bTYgMTJoLTR2LTRoNHY0em0wLTZoLTR2LTRoNHY0em0wLTZoLTRWNGg0djR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaGRyLW9mZiI+PHBhdGggZD0iTTE3LjUgMTV2LTJoMS4xbC45IDJIMjFsLS45LTIuMWMuNS0uMi45LS44LjktMS40di0xYzAtLjgtLjctMS41LTEuNS0xLjVIMTZ2NC45bDEuMSAxLjFoLjR6bTAtNC41aDJ2MWgtMnYtMXptLTQuNSAwdi40bDEuNSAxLjV2LTEuOWMwLS44LS43LTEuNS0xLjUtMS41aC0xLjlsMS41IDEuNWguNHptLTMuNS0xbC03LTctMS4xIDFMNi45IDloLS40djJoLTJWOUgzdjZoMS41di0yLjVoMlYxNUg4di00LjlsMS41IDEuNVYxNWgzLjRsNy42IDcuNiAxLjEtMS4xLTEyLjEtMTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaGRyLW9uIj48cGF0aCBkPSJNMjEgMTEuNXYtMWMwLS44LS43LTEuNS0xLjUtMS41SDE2djZoMS41di0yaDEuMWwuOSAySDIxbC0uOS0yLjFjLjUtLjMuOS0uOC45LTEuNHptLTEuNSAwaC0ydi0xaDJ2MXptLTEzLS41aC0yVjlIM3Y2aDEuNXYtMi41aDJWMTVIOFY5SDYuNXYyek0xMyA5SDkuNXY2SDEzYy44IDAgMS41LS43IDEuNS0xLjV2LTNjMC0uOC0uNy0xLjUtMS41LTEuNXptMCA0LjVoLTJ2LTNoMnYzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imhkci1zdHJvbmciPjxwYXRoIGQ9Ik0xNyA2Yy0zLjMxIDAtNiAyLjY5LTYgNnMyLjY5IDYgNiA2IDYtMi42OSA2LTYtMi42OS02LTYtNnpNNSA4Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTQtMS43OS00LTQtNHptMCA2Yy0xLjEgMC0yLS45LTItMnMuOS0yIDItMiAyIC45IDIgMi0uOSAyLTIgMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJoZHItd2VhayI+PHBhdGggZD0iTTUgOGMtMi4yMSAwLTQgMS43OS00IDRzMS43OSA0IDQgNCA0LTEuNzkgNC00LTEuNzktNC00LTR6bTEyLTJjLTMuMzEgMC02IDIuNjktNiA2czIuNjkgNiA2IDYgNi0yLjY5IDYtNi0yLjY5LTYtNi02em0wIDEwYy0yLjIxIDAtNC0xLjc5LTQtNHMxLjc5LTQgNC00IDQgMS43OSA0IDQtMS43OSA0LTQgNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJoZWFsaW5nIj48cGF0aCBkPSJNMTcuNzMgMTIuMDJsMy45OC0zLjk4Yy4zOS0uMzkuMzktMS4wMiAwLTEuNDFsLTQuMzQtNC4zNGMtLjM5LS4zOS0xLjAyLS4zOS0xLjQxIDBsLTMuOTggMy45OEw4IDIuMjlDNy44IDIuMSA3LjU1IDIgNy4yOSAyYy0uMjUgMC0uNTEuMS0uNy4yOUwyLjI1IDYuNjNjLS4zOS4zOS0uMzkgMS4wMiAwIDEuNDFsMy45OCAzLjk4TDIuMjUgMTZjLS4zOS4zOS0uMzkgMS4wMiAwIDEuNDFsNC4zNCA0LjM0Yy4zOS4zOSAxLjAyLjM5IDEuNDEgMGwzLjk4LTMuOTggMy45OCAzLjk4Yy4yLjIuNDUuMjkuNzEuMjkuMjYgMCAuNTEtLjEuNzEtLjI5bDQuMzQtNC4zNGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC0zLjk5LTMuOTh6TTEyIDljLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptLTQuNzEgMS45NkwzLjY2IDcuMzRsMy42My0zLjYzIDMuNjIgMy42Mi0zLjYyIDMuNjN6TTEwIDEzYy0uNTUgMC0xLS40NS0xLTFzLjQ1LTEgMS0xIDEgLjQ1IDEgMS0uNDUgMS0xIDF6bTIgMmMtLjU1IDAtMS0uNDUtMS0xcy40NS0xIDEtMSAxIC40NSAxIDEtLjQ1IDEtMSAxem0yLTRjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptMi42NiA5LjM0bC0zLjYzLTMuNjIgMy42My0zLjYzIDMuNjIgMy42Mi0zLjYyIDMuNjN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaW1hZ2UiPjxwYXRoIGQ9Ik0yMSAxOVY1YzAtMS4xLS45LTItMi0ySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJ6TTguNSAxMy41bDIuNSAzLjAxTDE0LjUgMTJsNC41IDZINWwzLjUtNC41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImltYWdlLWFzcGVjdC1yYXRpbyI+PHBhdGggZD0iTTE2IDEwaC0ydjJoMnYtMnptMCA0aC0ydjJoMnYtMnptLTgtNEg2djJoMnYtMnptNCAwaC0ydjJoMnYtMnptOC02SDRjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNmMwLTEuMS0uOS0yLTItMnptMCAxNEg0VjZoMTZ2MTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaXNvIj48cGF0aCBkPSJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6TTUuNSA3LjVoMnYtMkg5djJoMlY5SDl2Mkg3LjVWOWgtMlY3LjV6TTE5IDE5SDVMMTkgNXYxNHptLTItMnYtMS41aC01VjE3aDV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibGFuZHNjYXBlIj48cGF0aCBkPSJNMTQgNmwtMy43NSA1IDIuODUgMy44LTEuNiAxLjJDOS44MSAxMy43NSA3IDEwIDcgMTBsLTYgOGgyMkwxNCA2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImxlYWstYWRkIj48cGF0aCBkPSJNNiAzSDN2M2MxLjY2IDAgMy0xLjM0IDMtM3ptOCAwaC0yYzAgNC45Ny00LjAzIDktOSA5djJjNi4wOCAwIDExLTQuOTMgMTEtMTF6bS00IDBIOGMwIDIuNzYtMi4yNCA1LTUgNXYyYzMuODcgMCA3LTMuMTMgNy03em0wIDE4aDJjMC00Ljk3IDQuMDMtOSA5LTl2LTJjLTYuMDcgMC0xMSA0LjkzLTExIDExem04IDBoM3YtM2MtMS42NiAwLTMgMS4zNC0zIDN6bS00IDBoMmMwLTIuNzYgMi4yNC01IDUtNXYtMmMtMy44NyAwLTcgMy4xMy03IDd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibGVhay1yZW1vdmUiPjxwYXRoIGQ9Ik0xMCAzSDhjMCAuMzctLjA0LjcyLS4xMiAxLjA2bDEuNTkgMS41OUM5LjgxIDQuODQgMTAgMy45NCAxMCAzek0zIDQuMjdsMi44NCAyLjg0QzUuMDMgNy42NyA0LjA2IDggMyA4djJjMS42MSAwIDMuMDktLjU1IDQuMjctMS40Nkw4LjcgOS45N0M3LjE0IDExLjI0IDUuMTYgMTIgMyAxMnYyYzIuNzEgMCA1LjE5LS45OSA3LjExLTIuNjJsMi41IDIuNUMxMC45OSAxNS44MSAxMCAxOC4yOSAxMCAyMWgyYzAtMi4xNi43Ni00LjE0IDIuMDMtNS42OWwxLjQzIDEuNDNDMTQuNTUgMTcuOTEgMTQgMTkuMzkgMTQgMjFoMmMwLTEuMDYuMzMtMi4wMy44OS0yLjg0TDE5LjczIDIxIDIxIDE5LjczIDQuMjcgMyAzIDQuMjd6TTE0IDNoLTJjMCAxLjUtLjM3IDIuOTEtMS4wMiA0LjE2bDEuNDYgMS40NkMxMy40MiA2Ljk4IDE0IDUuMDYgMTQgM3ptNS45NCAxMy4xMmMuMzQtLjA4LjY5LS4xMiAxLjA2LS4xMnYtMmMtLjk0IDAtMS44NC4xOS0yLjY2LjUybDEuNiAxLjZ6bS00LjU2LTQuNTZsMS40NiAxLjQ2QzE4LjA5IDEyLjM3IDE5LjUgMTIgMjEgMTJ2LTJjLTIuMDYgMC0zLjk4LjU4LTUuNjIgMS41NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJsZW5zIj48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJsaW5rZWQtY2FtZXJhIj48Y2lyY2xlIGN4PSIxMiIgY3k9IjE0IiByPSIzLjIiPjwvY2lyY2xlPjxwYXRoIGQ9Ik0xNiAzLjMzYzIuNTggMCA0LjY3IDIuMDkgNC42NyA0LjY3SDIyYzAtMy4zMS0yLjY5LTYtNi02djEuMzNNMTYgNmMxLjExIDAgMiAuODkgMiAyaDEuMzNjMC0xLjg0LTEuNDktMy4zMy0zLjMzLTMuMzNWNiI+PC9wYXRoPjxwYXRoIGQ9Ik0xNyA5YzAtMS4xMS0uODktMi0yLTJWNEg5TDcuMTcgNkg0Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjloLTV6bS01IDEwYy0yLjc2IDAtNS0yLjI0LTUtNXMyLjI0LTUgNS01IDUgMi4yNCA1IDUtMi4yNCA1LTUgNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJsb29rcyI+PHBhdGggZD0iTTEyIDEwYy0zLjg2IDAtNyAzLjE0LTcgN2gyYzAtMi43NiAyLjI0LTUgNS01czUgMi4yNCA1IDVoMmMwLTMuODYtMy4xNC03LTctN3ptMC00QzUuOTMgNiAxIDEwLjkzIDEgMTdoMmMwLTQuOTYgNC4wNC05IDktOXM5IDQuMDQgOSA5aDJjMC02LjA3LTQuOTMtMTEtMTEtMTF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibG9va3MtMyI+PHBhdGggZD0iTTE5LjAxIDNoLTE0Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bS00IDcuNWMwIC44My0uNjcgMS41LTEuNSAxLjUuODMgMCAxLjUuNjcgMS41IDEuNVYxNWMwIDEuMTEtLjkgMi0yIDJoLTR2LTJoNHYtMmgtMnYtMmgyVjloLTRWN2g0YzEuMSAwIDIgLjg5IDIgMnYxLjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibG9va3MtNCI+PHBhdGggZD0iTTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNCAxNGgtMnYtNEg5VjdoMnY0aDJWN2gydjEweiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imxvb2tzLTUiPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTQgNmgtNHYyaDJjMS4xIDAgMiAuODkgMiAydjJjMCAxLjExLS45IDItMiAySDl2LTJoNHYtMkg5VjdoNnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imxvb2tzLTYiPjxwYXRoIGQ9Ik0xMSAxNWgydi0yaC0ydjJ6bTgtMTJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNCA2aC00djJoMmMxLjEgMCAyIC44OSAyIDJ2MmMwIDEuMTEtLjkgMi0yIDJoLTJjLTEuMSAwLTItLjg5LTItMlY5YzAtMS4xMS45LTIgMi0yaDR2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJsb29rcy1vbmUiPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTUgMTRoLTJWOWgtMlY3aDR2MTB6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibG9va3MtdHdvIj48cGF0aCBkPSJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bS00IDhjMCAxLjExLS45IDItMiAyaC0ydjJoNHYySDl2LTRjMC0xLjExLjktMiAyLTJoMlY5SDlWN2g0YzEuMSAwIDIgLjg5IDIgMnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImxvdXBlIj48cGF0aCBkPSJNMTMgN2gtMnY0SDd2Mmg0djRoMnYtNGg0di0yaC00Vjd6bS0xLTVDNi40OSAyIDIgNi40OSAyIDEyczQuNDkgMTAgMTAgMTBoOGMxLjEgMCAyLS45IDItMnYtOGMwLTUuNTEtNC40OS0xMC0xMC0xMHptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibW9ub2Nocm9tZS1waG90b3MiPjxwYXRoIGQ9Ik0yMCA1aC0zLjJMMTUgM0g5TDcuMiA1SDRjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWN2MwLTEuMS0uOS0yLTItMnptMCAxNGgtOHYtMWMtMi44IDAtNS0yLjItNS01czIuMi01IDUtNVY3aDh2MTJ6bS0zLTZjMC0yLjgtMi4yLTUtNS01djEuOGMxLjggMCAzLjIgMS40IDMuMiAzLjJzLTEuNCAzLjItMy4yIDMuMlYxOGMyLjggMCA1LTIuMiA1LTV6bS04LjIgMGMwIDEuOCAxLjQgMy4yIDMuMiAzLjJWOS44Yy0xLjggMC0zLjIgMS40LTMuMiAzLjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibW92aWUtY3JlYXRpb24iPjxwYXRoIGQ9Ik0xOCA0bDIgNGgtM2wtMi00aC0ybDIgNGgtM2wtMi00SDhsMiA0SDdMNSA0SDRjLTEuMSAwLTEuOTkuOS0xLjk5IDJMMiAxOGMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjRoLTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibW92aWUtZmlsdGVyIj48cGF0aCBkPSJNMTggNGwyIDNoLTNsLTItM2gtMmwyIDNoLTNsLTItM0g4bDIgM0g3TDUgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY0aC00em0tNi43NSAxMS4yNUwxMCAxOGwtMS4yNS0yLjc1TDYgMTRsMi43NS0xLjI1TDEwIDEwbDEuMjUgMi43NUwxNCAxNGwtMi43NSAxLjI1em01LjY5LTMuMzFMMTYgMTRsLS45NC0yLjA2TDEzIDExbDIuMDYtLjk0TDE2IDhsLjk0IDIuMDZMMTkgMTFsLTIuMDYuOTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibXVzaWMtbm90ZSI+PHBhdGggZD0iTTEyIDN2MTAuNTVjLS41OS0uMzQtMS4yNy0uNTUtMi0uNTUtMi4yMSAwLTQgMS43OS00IDRzMS43OSA0IDQgNCA0LTEuNzkgNC00VjdoNFYzaC02eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im5hdHVyZSI+PHBhdGggZD0iTTEzIDE2LjEyYzMuNDctLjQxIDYuMTctMy4zNiA2LjE3LTYuOTUgMC0zLjg3LTMuMTMtNy03LTdzLTcgMy4xMy03IDdjMCAzLjQ3IDIuNTIgNi4zNCA1LjgzIDYuODlWMjBINXYyaDE0di0yaC02di0zLjg4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im5hdHVyZS1wZW9wbGUiPjxwYXRoIGQ9Ik0yMi4xNyA5LjE3YzAtMy44Ny0zLjEzLTctNy03cy03IDMuMTMtNyA3YzAgMy40NyAyLjUyIDYuMzQgNS44MyA2Ljg5VjIwSDZ2LTNoMXYtNGMwLS41NS0uNDUtMS0xLTFIM2MtLjU1IDAtMSAuNDUtMSAxdjRoMXY1aDE2di0yaC0zdi0zLjg4YzMuNDctLjQxIDYuMTctMy4zNiA2LjE3LTYuOTV6TTQuNSAxMWMuODMgMCAxLjUtLjY3IDEuNS0xLjVTNS4zMyA4IDQuNSA4IDMgOC42NyAzIDkuNSAzLjY3IDExIDQuNSAxMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJuYXZpZ2F0ZS1iZWZvcmUiPjxwYXRoIGQ9Ik0xNS40MSA3LjQxTDE0IDZsLTYgNiA2IDYgMS40MS0xLjQxTDEwLjgzIDEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im5hdmlnYXRlLW5leHQiPjxwYXRoIGQ9Ik0xMCA2TDguNTkgNy40MSAxMy4xNyAxMmwtNC41OCA0LjU5TDEwIDE4bDYtNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJwYWxldHRlIj48cGF0aCBkPSJNMTIgM2MtNC45NyAwLTkgNC4wMy05IDlzNC4wMyA5IDkgOWMuODMgMCAxLjUtLjY3IDEuNS0xLjUgMC0uMzktLjE1LS43NC0uMzktMS4wMS0uMjMtLjI2LS4zOC0uNjEtLjM4LS45OSAwLS44My42Ny0xLjUgMS41LTEuNUgxNmMyLjc2IDAgNS0yLjI0IDUtNSAwLTQuNDItNC4wMy04LTktOHptLTUuNSA5Yy0uODMgMC0xLjUtLjY3LTEuNS0xLjVTNS42NyA5IDYuNSA5IDggOS42NyA4IDEwLjUgNy4zMyAxMiA2LjUgMTJ6bTMtNEM4LjY3IDggOCA3LjMzIDggNi41UzguNjcgNSA5LjUgNXMxLjUuNjcgMS41IDEuNVMxMC4zMyA4IDkuNSA4em01IDBjLS44MyAwLTEuNS0uNjctMS41LTEuNVMxMy42NyA1IDE0LjUgNXMxLjUuNjcgMS41IDEuNVMxNS4zMyA4IDE0LjUgOHptMyA0Yy0uODMgMC0xLjUtLjY3LTEuNS0xLjVTMTYuNjcgOSAxNy41IDlzMS41LjY3IDEuNSAxLjUtLjY3IDEuNS0xLjUgMS41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBhbm9yYW1hIj48cGF0aCBkPSJNMjMgMThWNmMwLTEuMS0uOS0yLTItMkgzYy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yek04LjUgMTIuNWwyLjUgMy4wMUwxNC41IDExbDQuNSA2SDVsMy41LTQuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJwYW5vcmFtYS1maXNoLWV5ZSI+PHBhdGggZD0iTTEyIDJDNi40NyAyIDIgNi40NyAyIDEyczQuNDcgMTAgMTAgMTAgMTAtNC40NyAxMC0xMFMxNy41MyAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBhbm9yYW1hLWhvcml6b250YWwiPjxwYXRoIGQ9Ik0yMCA2LjU0djEwLjkxYy0yLjYtLjc3LTUuMjgtMS4xNi04LTEuMTYtMi43MiAwLTUuNC4zOS04IDEuMTZWNi41NGMyLjYuNzcgNS4yOCAxLjE2IDggMS4xNiAyLjcyLjAxIDUuNC0uMzggOC0xLjE2TTIxLjQzIDRjLS4xIDAtLjIuMDItLjMxLjA2QzE4LjE4IDUuMTYgMTUuMDkgNS43IDEyIDUuN2MtMy4wOSAwLTYuMTgtLjU1LTkuMTItMS42NC0uMTEtLjA0LS4yMi0uMDYtLjMxLS4wNi0uMzQgMC0uNTcuMjMtLjU3LjYzdjE0Ljc1YzAgLjM5LjIzLjYyLjU3LjYyLjEgMCAuMi0uMDIuMzEtLjA2IDIuOTQtMS4xIDYuMDMtMS42NCA5LjEyLTEuNjQgMy4wOSAwIDYuMTguNTUgOS4xMiAxLjY0LjExLjA0LjIxLjA2LjMxLjA2LjMzIDAgLjU3LS4yMy41Ny0uNjNWNC42M2MwLS40LS4yNC0uNjMtLjU3LS42M3oiPjwvcGF0aD48L2c+CjxnIGlkPSJwYW5vcmFtYS12ZXJ0aWNhbCI+PHBhdGggZD0iTTE5Ljk0IDIxLjEyYy0xLjEtMi45NC0xLjY0LTYuMDMtMS42NC05LjEyIDAtMy4wOS41NS02LjE4IDEuNjQtOS4xMi4wNC0uMTEuMDYtLjIyLjA2LS4zMSAwLS4zNC0uMjMtLjU3LS42My0uNTdINC42M2MtLjQgMC0uNjMuMjMtLjYzLjU3IDAgLjEuMDIuMi4wNi4zMUM1LjE2IDUuODIgNS43MSA4LjkxIDUuNzEgMTJjMCAzLjA5LS41NSA2LjE4LTEuNjQgOS4xMi0uMDUuMTEtLjA3LjIyLS4wNy4zMSAwIC4zMy4yMy41Ny42My41N2gxNC43NWMuMzkgMCAuNjMtLjI0LjYzLS41Ny0uMDEtLjEtLjAzLS4yLS4wNy0uMzF6TTYuNTQgMjBjLjc3LTIuNiAxLjE2LTUuMjggMS4xNi04IDAtMi43Mi0uMzktNS40LTEuMTYtOGgxMC45MWMtLjc3IDIuNi0xLjE2IDUuMjgtMS4xNiA4IDAgMi43Mi4zOSA1LjQgMS4xNiA4SDYuNTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGFub3JhbWEtd2lkZS1hbmdsZSI+PHBhdGggZD0iTTEyIDZjMi40NSAwIDQuNzEuMiA3LjI5LjY0LjQ3IDEuNzguNzEgMy41OC43MSA1LjM2IDAgMS43OC0uMjQgMy41OC0uNzEgNS4zNi0yLjU4LjQ0LTQuODQuNjQtNy4yOS42NHMtNC43MS0uMi03LjI5LS42NEM0LjI0IDE1LjU4IDQgMTMuNzggNCAxMmMwLTEuNzguMjQtMy41OC43MS01LjM2QzcuMjkgNi4yIDkuNTUgNiAxMiA2bTAtMmMtMi43MyAwLTUuMjIuMjQtNy45NS43MmwtLjkzLjE2LS4yNS45QzIuMjkgNy44NSAyIDkuOTMgMiAxMnMuMjkgNC4xNS44NyA2LjIybC4yNS44OS45My4xNmMyLjczLjQ5IDUuMjIuNzMgNy45NS43M3M1LjIyLS4yNCA3Ljk1LS43MmwuOTMtLjE2LjI1LS44OWMuNTgtMi4wOC44Ny00LjE2Ljg3LTYuMjNzLS4yOS00LjE1LS44Ny02LjIybC0uMjUtLjg5LS45My0uMTZDMTcuMjIgNC4yNCAxNC43MyA0IDEyIDR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGhvdG8iPjxwYXRoIGQ9Ik0yMSAxOVY1YzAtMS4xLS45LTItMi0ySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJ6TTguNSAxMy41bDIuNSAzLjAxTDE0LjUgMTJsNC41IDZINWwzLjUtNC41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBob3RvLWFsYnVtIj48cGF0aCBkPSJNMTggMkg2Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDEyYzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6TTYgNGg1djhsLTIuNS0xLjVMNiAxMlY0em0wIDE1bDMtMy44NiAyLjE0IDIuNTggMy0zLjg2TDE4IDE5SDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGhvdG8tY2FtZXJhIj48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIzLjIiPjwvY2lyY2xlPjxwYXRoIGQ9Ik05IDJMNy4xNyA0SDRjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNmMwLTEuMS0uOS0yLTItMmgtMy4xN0wxNSAySDl6bTMgMTVjLTIuNzYgMC01LTIuMjQtNS01czIuMjQtNSA1LTUgNSAyLjI0IDUgNS0yLjI0IDUtNSA1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBob3RvLWZpbHRlciI+PHBhdGggZD0iTTE5LjAyIDEwdjlINVY1aDlWM0g1LjAyYy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0ydi05aC0yek0xNyAxMGwuOTQtMi4wNkwyMCA3bC0yLjA2LS45NEwxNyA0bC0uOTQgMi4wNkwxNCA3bDIuMDYuOTR6bS0zLjc1Ljc1TDEyIDhsLTEuMjUgMi43NUw4IDEybDIuNzUgMS4yNUwxMiAxNmwxLjI1LTIuNzVMMTYgMTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGhvdG8tbGlicmFyeSI+PHBhdGggZD0iTTIyIDE2VjRjMC0xLjEtLjktMi0yLTJIOGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMnptLTExLTRsMi4wMyAyLjcxTDE2IDExbDQgNUg4bDMtNHpNMiA2djE0YzAgMS4xLjkgMiAyIDJoMTR2LTJINFY2SDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGhvdG8tc2l6ZS1zZWxlY3QtYWN0dWFsIj48cGF0aCBkPSJNMjEgM0gzQzIgMyAxIDQgMSA1djE0YzAgMS4xLjkgMiAyIDJoMThjMSAwIDItMSAyLTJWNWMwLTEtMS0yLTItMnpNNSAxN2wzLjUtNC41IDIuNSAzLjAxTDE0LjUgMTFsNC41IDZINXoiPjwvcGF0aD48L2c+CjxnIGlkPSJwaG90by1zaXplLXNlbGVjdC1sYXJnZSI+PHBhdGggZD0iTTIxIDE1aDJ2MmgtMnYtMnptMC00aDJ2MmgtMnYtMnptMiA4aC0ydjJjMSAwIDItMSAyLTJ6TTEzIDNoMnYyaC0yVjN6bTggNGgydjJoLTJWN3ptMC00djJoMmMwLTEtMS0yLTItMnpNMSA3aDJ2MkgxVjd6bTE2LTRoMnYyaC0yVjN6bTAgMTZoMnYyaC0ydi0yek0zIDNDMiAzIDEgNCAxIDVoMlYzem02IDBoMnYySDlWM3pNNSAzaDJ2Mkg1VjN6bS00IDh2OGMwIDEuMS45IDIgMiAyaDEyVjExSDF6bTIgOGwyLjUtMy4yMSAxLjc5IDIuMTUgMi41LTMuMjJMMTMgMTlIM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJwaG90by1zaXplLXNlbGVjdC1zbWFsbCI+PHBhdGggZD0iTTIzIDE1aC0ydjJoMnYtMnptMC00aC0ydjJoMnYtMnptMCA4aC0ydjJjMSAwIDItMSAyLTJ6TTE1IDNoLTJ2MmgyVjN6bTggNGgtMnYyaDJWN3ptLTItNHYyaDJjMC0xLTEtMi0yLTJ6TTMgMjFoOHYtNkgxdjRjMCAxLjEuOSAyIDIgMnpNMyA3SDF2MmgyVjd6bTEyIDEyaC0ydjJoMnYtMnptNC0xNmgtMnYyaDJWM3ptMCAxNmgtMnYyaDJ2LTJ6TTMgM0MyIDMgMSA0IDEgNWgyVjN6bTAgOEgxdjJoMnYtMnptOC04SDl2MmgyVjN6TTcgM0g1djJoMlYzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBpY3R1cmUtYXMtcGRmIj48cGF0aCBkPSJNMjAgMkg4Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDEyYzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS04LjUgNy41YzAgLjgzLS42NyAxLjUtMS41IDEuNUg5djJINy41VjdIMTBjLjgzIDAgMS41LjY3IDEuNSAxLjV2MXptNSAyYzAgLjgzLS42NyAxLjUtMS41IDEuNWgtMi41VjdIMTVjLjgzIDAgMS41LjY3IDEuNSAxLjV2M3ptNC0zSDE5djFoMS41VjExSDE5djJoLTEuNVY3aDN2MS41ek05IDkuNWgxdi0xSDl2MXpNNCA2SDJ2MTRjMCAxLjEuOSAyIDIgMmgxNHYtMkg0VjZ6bTEwIDUuNWgxdi0zaC0xdjN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icG9ydHJhaXQiPjxwYXRoIGQ9Ik0xMiAxMi4yNWMxLjI0IDAgMi4yNS0xLjAxIDIuMjUtMi4yNVMxMy4yNCA3Ljc1IDEyIDcuNzUgOS43NSA4Ljc2IDkuNzUgMTBzMS4wMSAyLjI1IDIuMjUgMi4yNXptNC41IDRjMC0xLjUtMy0yLjI1LTQuNS0yLjI1cy00LjUuNzUtNC41IDIuMjVWMTdoOXYtLjc1ek0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxNkg1VjVoMTR2MTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmVtb3ZlLXJlZC1leWUiPjxwYXRoIGQ9Ik0xMiA0LjVDNyA0LjUgMi43MyA3LjYxIDEgMTJjMS43MyA0LjM5IDYgNy41IDExIDcuNXM5LjI3LTMuMTEgMTEtNy41Yy0xLjczLTQuMzktNi03LjUtMTEtNy41ek0xMiAxN2MtMi43NiAwLTUtMi4yNC01LTVzMi4yNC01IDUtNSA1IDIuMjQgNSA1LTIuMjQgNS01IDV6bTAtOGMtMS42NiAwLTMgMS4zNC0zIDNzMS4zNCAzIDMgMyAzLTEuMzQgMy0zLTEuMzQtMy0zLTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icm90YXRlLTkwLWRlZ3JlZXMtY2N3Ij48cGF0aCBkPSJNNy4zNCA2LjQxTC44NiAxMi45bDYuNDkgNi40OCA2LjQ5LTYuNDgtNi41LTYuNDl6TTMuNjkgMTIuOWwzLjY2LTMuNjZMMTEgMTIuOWwtMy42NiAzLjY2LTMuNjUtMy42NnptMTUuNjctNi4yNkMxNy42MSA0Ljg4IDE1LjMgNCAxMyA0Vi43Nkw4Ljc2IDUgMTMgOS4yNFY2YzEuNzkgMCAzLjU4LjY4IDQuOTUgMi4wNSAyLjczIDIuNzMgMi43MyA3LjE3IDAgOS45QzE2LjU4IDE5LjMyIDE0Ljc5IDIwIDEzIDIwYy0uOTcgMC0xLjk0LS4yMS0yLjg0LS42MWwtMS40OSAxLjQ5QzEwLjAyIDIxLjYyIDExLjUxIDIyIDEzIDIyYzIuMyAwIDQuNjEtLjg4IDYuMzYtMi42NCAzLjUyLTMuNTEgMy41Mi05LjIxIDAtMTIuNzJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icm90YXRlLWxlZnQiPjxwYXRoIGQ9Ik03LjExIDguNTNMNS43IDcuMTFDNC44IDguMjcgNC4yNCA5LjYxIDQuMDcgMTFoMi4wMmMuMTQtLjg3LjQ5LTEuNzIgMS4wMi0yLjQ3ek02LjA5IDEzSDQuMDdjLjE3IDEuMzkuNzIgMi43MyAxLjYyIDMuODlsMS40MS0xLjQyYy0uNTItLjc1LS44Ny0xLjU5LTEuMDEtMi40N3ptMS4wMSA1LjMyYzEuMTYuOSAyLjUxIDEuNDQgMy45IDEuNjFWMTcuOWMtLjg3LS4xNS0xLjcxLS40OS0yLjQ2LTEuMDNMNy4xIDE4LjMyek0xMyA0LjA3VjFMOC40NSA1LjU1IDEzIDEwVjYuMDljMi44NC40OCA1IDIuOTQgNSA1Ljkxcy0yLjE2IDUuNDMtNSA1LjkxdjIuMDJjMy45NS0uNDkgNy0zLjg1IDctNy45M3MtMy4wNS03LjQ0LTctNy45M3oiPjwvcGF0aD48L2c+CjxnIGlkPSJyb3RhdGUtcmlnaHQiPjxwYXRoIGQ9Ik0xNS41NSA1LjU1TDExIDF2My4wN0M3LjA2IDQuNTYgNCA3LjkyIDQgMTJzMy4wNSA3LjQ0IDcgNy45M3YtMi4wMmMtMi44NC0uNDgtNS0yLjk0LTUtNS45MXMyLjE2LTUuNDMgNS01LjkxVjEwbDQuNTUtNC40NXpNMTkuOTMgMTFjLS4xNy0xLjM5LS43Mi0yLjczLTEuNjItMy44OWwtMS40MiAxLjQyYy41NC43NS44OCAxLjYgMS4wMiAyLjQ3aDIuMDJ6TTEzIDE3Ljl2Mi4wMmMxLjM5LS4xNyAyLjc0LS43MSAzLjktMS42MWwtMS40NC0xLjQ0Yy0uNzUuNTQtMS41OS44OS0yLjQ2IDEuMDN6bTMuODktMi40MmwxLjQyIDEuNDFjLjktMS4xNiAxLjQ1LTIuNSAxLjYyLTMuODloLTIuMDJjLS4xNC44Ny0uNDggMS43Mi0xLjAyIDIuNDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2xpZGVzaG93Ij48cGF0aCBkPSJNMTAgOHY4bDUtNC01LTR6bTktNUg1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTZINVY1aDE0djE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InN0cmFpZ2h0ZW4iPjxwYXRoIGQ9Ik0yMSA2SDNjLTEuMSAwLTIgLjktMiAydjhjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yem0wIDEwSDNWOGgydjRoMlY4aDJ2NGgyVjhoMnY0aDJWOGgydjRoMlY4aDJ2OHoiPjwvcGF0aD48L2c+CjxnIGlkPSJzdHlsZSI+PHBhdGggZD0iTTIuNTMgMTkuNjVsMS4zNC41NnYtOS4wM2wtMi40MyA1Ljg2Yy0uNDEgMS4wMi4wOCAyLjE5IDEuMDkgMi42MXptMTkuNS0zLjdMMTcuMDcgMy45OGMtLjMxLS43NS0xLjA0LTEuMjEtMS44MS0xLjIzLS4yNiAwLS41My4wNC0uNzkuMTVMNy4xIDUuOTVjLS43NS4zMS0xLjIxIDEuMDMtMS4yMyAxLjgtLjAxLjI3LjA0LjU0LjE1LjhsNC45NiAxMS45N2MuMzEuNzYgMS4wNSAxLjIyIDEuODMgMS4yMy4yNiAwIC41Mi0uMDUuNzctLjE1bDcuMzYtMy4wNWMxLjAyLS40MiAxLjUxLTEuNTkgMS4wOS0yLjZ6TTcuODggOC43NWMtLjU1IDAtMS0uNDUtMS0xcy40NS0xIDEtMSAxIC40NSAxIDEtLjQ1IDEtMSAxem0tMiAxMWMwIDEuMS45IDIgMiAyaDEuNDVsLTMuNDUtOC4zNHY2LjM0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InN3aXRjaC1jYW1lcmEiPjxwYXRoIGQ9Ik0yMCA0aC0zLjE3TDE1IDJIOUw3LjE3IDRINGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0tNSAxMS41VjEzSDl2Mi41TDUuNSAxMiA5IDguNVYxMWg2VjguNWwzLjUgMy41LTMuNSAzLjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3dpdGNoLXZpZGVvIj48cGF0aCBkPSJNMTggOS41VjZjMC0uNTUtLjQ1LTEtMS0xSDNjLS41NSAwLTEgLjQ1LTEgMXYxMmMwIC41NS40NSAxIDEgMWgxNGMuNTUgMCAxLS40NSAxLTF2LTMuNWw0IDR2LTEzbC00IDR6bS01IDZWMTNIN3YyLjVMMy41IDEyIDcgOC41VjExaDZWOC41bDMuNSAzLjUtMy41IDMuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0YWctZmFjZXMiPjxwYXRoIGQ9Ik0xMS45OSAyQzYuNDcgMiAyIDYuNDggMiAxMnM0LjQ3IDEwIDkuOTkgMTBDMTcuNTIgMjIgMjIgMTcuNTIgMjIgMTJTMTcuNTIgMiAxMS45OSAyek0xMiAyMGMtNC40MiAwLTgtMy41OC04LThzMy41OC04IDgtOCA4IDMuNTggOCA4LTMuNTggOC04IDh6bTMuNS05Yy44MyAwIDEuNS0uNjcgMS41LTEuNVMxNi4zMyA4IDE1LjUgOCAxNCA4LjY3IDE0IDkuNXMuNjcgMS41IDEuNSAxLjV6bS03IDBjLjgzIDAgMS41LS42NyAxLjUtMS41UzkuMzMgOCA4LjUgOCA3IDguNjcgNyA5LjUgNy42NyAxMSA4LjUgMTF6bTMuNSA2LjVjMi4zMyAwIDQuMzEtMS40NiA1LjExLTMuNUg2Ljg5Yy44IDIuMDQgMi43OCAzLjUgNS4xMSAzLjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idGV4dHVyZSI+PHBhdGggZD0iTTE5LjUxIDMuMDhMMy4wOCAxOS41MWMuMDkuMzQuMjcuNjUuNTEuOS4yNS4yNC41Ni40Mi45LjUxTDIwLjkzIDQuNDljLS4xOS0uNjktLjczLTEuMjMtMS40Mi0xLjQxek0xMS44OCAzTDMgMTEuODh2Mi44M0wxNC43MSAzaC0yLjgzek01IDNjLTEuMSAwLTIgLjktMiAydjJsNC00SDV6bTE0IDE4Yy41NSAwIDEuMDUtLjIyIDEuNDEtLjU5LjM3LS4zNi41OS0uODYuNTktMS40MXYtMmwtNCA0aDJ6bS05LjcxIDBoMi44M0wyMSAxMi4xMlY5LjI5TDkuMjkgMjF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idGltZWxhcHNlIj48cGF0aCBkPSJNMTYuMjQgNy43NkMxNS4wNyA2LjU5IDEzLjU0IDYgMTIgNnY2bC00LjI0IDQuMjRjMi4zNCAyLjM0IDYuMTQgMi4zNCA4LjQ5IDAgMi4zNC0yLjM0IDIuMzQtNi4xNC0uMDEtOC40OHpNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MiAwLTgtMy41OC04LThzMy41OC04IDgtOCA4IDMuNTggOCA4LTMuNTggOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idGltZXIiPjxwYXRoIGQ9Ik0xNSAxSDl2Mmg2VjF6bS00IDEzaDJWOGgtMnY2em04LjAzLTYuNjFsMS40Mi0xLjQyYy0uNDMtLjUxLS45LS45OS0xLjQxLTEuNDFsLTEuNDIgMS40MkMxNi4wNyA0Ljc0IDE0LjEyIDQgMTIgNGMtNC45NyAwLTkgNC4wMy05IDlzNC4wMiA5IDkgOSA5LTQuMDMgOS05YzAtMi4xMi0uNzQtNC4wNy0xLjk3LTUuNjF6TTEyIDIwYy0zLjg3IDAtNy0zLjEzLTctN3MzLjEzLTcgNy03IDcgMy4xMyA3IDctMy4xMyA3LTcgN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJ0aW1lci0xMCI+PHBhdGggZD0iTTAgNy43MlY5LjRsMy0xVjE4aDJWNmgtLjI1TDAgNy43MnptMjMuNzggNi42NWMtLjE0LS4yOC0uMzUtLjUzLS42My0uNzQtLjI4LS4yMS0uNjEtLjM5LTEuMDEtLjUzcy0uODUtLjI3LTEuMzUtLjM4Yy0uMzUtLjA3LS42NC0uMTUtLjg3LS4yMy0uMjMtLjA4LS40MS0uMTYtLjU1LS4yNS0uMTQtLjA5LS4yMy0uMTktLjI4LS4zLS4wNS0uMTEtLjA4LS4yNC0uMDgtLjM5IDAtLjE0LjAzLS4yOC4wOS0uNDEuMDYtLjEzLjE1LS4yNS4yNy0uMzQuMTItLjEuMjctLjE4LjQ1LS4yNHMuNC0uMDkuNjQtLjA5Yy4yNSAwIC40Ny4wNC42Ni4xMS4xOS4wNy4zNS4xNy40OC4yOS4xMy4xMi4yMi4yNi4yOS40Mi4wNi4xNi4xLjMyLjEuNDloMS45NWMwLS4zOS0uMDgtLjc1LS4yNC0xLjA5LS4xNi0uMzQtLjM5LS42My0uNjktLjg4LS4zLS4yNS0uNjYtLjQ0LTEuMDktLjU5QzIxLjQ5IDkuMDcgMjEgOSAyMC40NiA5Yy0uNTEgMC0uOTguMDctMS4zOS4yMS0uNDEuMTQtLjc3LjMzLTEuMDYuNTctLjI5LjI0LS41MS41Mi0uNjcuODQtLjE2LjMyLS4yMy42NS0uMjMgMS4wMXMuMDguNjkuMjMuOTZjLjE1LjI4LjM2LjUyLjY0LjczLjI3LjIxLjYuMzguOTguNTMuMzguMTQuODEuMjYgMS4yNy4zNi4zOS4wOC43MS4xNy45NS4yNnMuNDMuMTkuNTcuMjljLjEzLjEuMjIuMjIuMjcuMzQuMDUuMTIuMDcuMjUuMDcuMzkgMCAuMzItLjEzLjU3LS40Ljc3LS4yNy4yLS42Ni4yOS0xLjE3LjI5LS4yMiAwLS40My0uMDItLjY0LS4wOC0uMjEtLjA1LS40LS4xMy0uNTYtLjI0LS4xNy0uMTEtLjMtLjI2LS40MS0uNDQtLjExLS4xOC0uMTctLjQxLS4xOC0uNjdoLTEuODljMCAuMzYuMDguNzEuMjQgMS4wNS4xNi4zNC4zOS42NS43LjkzLjMxLjI3LjY5LjQ5IDEuMTUuNjYuNDYuMTcuOTguMjUgMS41OC4yNS41MyAwIDEuMDEtLjA2IDEuNDQtLjE5LjQzLS4xMy44LS4zMSAxLjExLS41NC4zMS0uMjMuNTQtLjUxLjcxLS44My4xNy0uMzIuMjUtLjY3LjI1LTEuMDYtLjAyLS40LS4wOS0uNzQtLjI0LTEuMDJ6bS05Ljk2LTcuMzJjLS4zNC0uNC0uNzUtLjctMS4yMy0uODgtLjQ3LS4xOC0xLjAxLS4yNy0xLjU5LS4yNy0uNTggMC0xLjExLjA5LTEuNTkuMjctLjQ4LjE4LS44OS40Ny0xLjIzLjg4LS4zNC40MS0uNi45My0uNzkgMS41OS0uMTguNjUtLjI4IDEuNDUtLjI4IDIuMzl2MS45MmMwIC45NC4wOSAxLjc0LjI4IDIuMzkuMTkuNjYuNDUgMS4xOS44IDEuNi4zNC40MS43NS43MSAxLjIzLjg5LjQ4LjE4IDEuMDEuMjggMS41OS4yOC41OSAwIDEuMTItLjA5IDEuNTktLjI4LjQ4LS4xOC44OC0uNDggMS4yMi0uODkuMzQtLjQxLjYtLjk0Ljc4LTEuNi4xOC0uNjUuMjgtMS40NS4yOC0yLjM5di0xLjkyYzAtLjk0LS4wOS0xLjc0LS4yOC0yLjM5LS4xOC0uNjYtLjQ0LTEuMTktLjc4LTEuNTl6bS0uOTIgNi4xN2MwIC42LS4wNCAxLjExLS4xMiAxLjUzLS4wOC40Mi0uMi43Ni0uMzYgMS4wMi0uMTYuMjYtLjM2LjQ1LS41OS41Ny0uMjMuMTItLjUxLjE4LS44Mi4xOC0uMyAwLS41OC0uMDYtLjgyLS4xOHMtLjQ0LS4zMS0uNi0uNTdjLS4xNi0uMjYtLjI5LS42LS4zOC0xLjAyLS4wOS0uNDItLjEzLS45My0uMTMtMS41M3YtMi41YzAtLjYuMDQtMS4xMS4xMy0xLjUyLjA5LS40MS4yMS0uNzQuMzgtMSAuMTYtLjI1LjM2LS40My42LS41NS4yNC0uMTEuNTEtLjE3LjgxLS4xNy4zMSAwIC41OC4wNi44MS4xNy4yNC4xMS40NC4yOS42LjU1LjE2LjI1LjI5LjU4LjM3Ljk5LjA4LjQxLjEzLjkyLjEzIDEuNTJ2Mi41MXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0aW1lci0zIj48cGF0aCBkPSJNMTEuNjEgMTIuOTdjLS4xNi0uMjQtLjM2LS40Ni0uNjItLjY1LS4yNS0uMTktLjU2LS4zNS0uOTMtLjQ4LjMtLjE0LjU3LS4zLjgtLjUuMjMtLjIuNDItLjQxLjU3LS42NC4xNS0uMjMuMjctLjQ2LjM0LS43MS4wOC0uMjQuMTEtLjQ5LjExLS43MyAwLS41NS0uMDktMS4wNC0uMjgtMS40Ni0uMTgtLjQyLS40NC0uNzctLjc4LTEuMDYtLjMzLS4yOC0uNzMtLjUtMS4yLS42NC0uNDUtLjEzLS45Ny0uMi0xLjUzLS4yLS41NSAwLTEuMDYuMDgtMS41Mi4yNC0uNDcuMTctLjg3LjQtMS4yLjY5LS4zMy4yOS0uNi42My0uNzggMS4wMy0uMi4zOS0uMjkuODMtLjI5IDEuMjloMS45OGMwLS4yNi4wNS0uNDkuMTQtLjY5LjA5LS4yLjIyLS4zOC4zOC0uNTIuMTctLjE0LjM2LS4yNS41OC0uMzMuMjItLjA4LjQ2LS4xMi43My0uMTIuNjEgMCAxLjA2LjE2IDEuMzYuNDcuMy4zMS40NC43NS40NCAxLjMyIDAgLjI3LS4wNC41Mi0uMTIuNzQtLjA4LjIyLS4yMS40MS0uMzguNTctLjE3LjE2LS4zOC4yOC0uNjMuMzctLjI1LjA5LS41NS4xMy0uODkuMTNINi43MnYxLjU3SDcuOWMuMzQgMCAuNjQuMDQuOTEuMTEuMjcuMDguNS4xOS42OS4zNS4xOS4xNi4zNC4zNi40NC42MS4xLjI0LjE2LjU0LjE2Ljg3IDAgLjYyLS4xOCAxLjA5LS41MyAxLjQyLS4zNS4zMy0uODQuNDktMS40NS40OS0uMjkgMC0uNTYtLjA0LS44LS4xMy0uMjQtLjA4LS40NC0uMi0uNjEtLjM2LS4xNy0uMTYtLjMtLjM0LS4zOS0uNTYtLjA5LS4yMi0uMTQtLjQ2LS4xNC0uNzJINC4xOWMwIC41NS4xMSAxLjAzLjMyIDEuNDUuMjEuNDIuNS43Ny44NiAxLjA1cy43Ny40OSAxLjI0LjYzLjk2LjIxIDEuNDguMjFjLjU3IDAgMS4wOS0uMDggMS41OC0uMjMuNDktLjE1LjkxLS4zOCAxLjI2LS42OC4zNi0uMy42NC0uNjYuODQtMS4xLjItLjQzLjMtLjkzLjMtMS40OCAwLS4yOS0uMDQtLjU4LS4xMS0uODYtLjA4LS4yNS0uMTktLjUxLS4zNS0uNzZ6bTkuMjYgMS40Yy0uMTQtLjI4LS4zNS0uNTMtLjYzLS43NC0uMjgtLjIxLS42MS0uMzktMS4wMS0uNTNzLS44NS0uMjctMS4zNS0uMzhjLS4zNS0uMDctLjY0LS4xNS0uODctLjIzLS4yMy0uMDgtLjQxLS4xNi0uNTUtLjI1LS4xNC0uMDktLjIzLS4xOS0uMjgtLjMtLjA1LS4xMS0uMDgtLjI0LS4wOC0uMzlzLjAzLS4yOC4wOS0uNDFjLjA2LS4xMy4xNS0uMjUuMjctLjM0LjEyLS4xLjI3LS4xOC40NS0uMjRzLjQtLjA5LjY0LS4wOWMuMjUgMCAuNDcuMDQuNjYuMTEuMTkuMDcuMzUuMTcuNDguMjkuMTMuMTIuMjIuMjYuMjkuNDIuMDYuMTYuMS4zMi4xLjQ5aDEuOTVjMC0uMzktLjA4LS43NS0uMjQtMS4wOS0uMTYtLjM0LS4zOS0uNjMtLjY5LS44OC0uMy0uMjUtLjY2LS40NC0xLjA5LS41OS0uNDMtLjE1LS45Mi0uMjItMS40Ni0uMjItLjUxIDAtLjk4LjA3LTEuMzkuMjEtLjQxLjE0LS43Ny4zMy0xLjA2LjU3LS4yOS4yNC0uNTEuNTItLjY3Ljg0LS4xNi4zMi0uMjMuNjUtLjIzIDEuMDFzLjA4LjY4LjIzLjk2Yy4xNS4yOC4zNy41Mi42NC43My4yNy4yMS42LjM4Ljk4LjUzLjM4LjE0LjgxLjI2IDEuMjcuMzYuMzkuMDguNzEuMTcuOTUuMjZzLjQzLjE5LjU3LjI5Yy4xMy4xLjIyLjIyLjI3LjM0LjA1LjEyLjA3LjI1LjA3LjM5IDAgLjMyLS4xMy41Ny0uNC43Ny0uMjcuMi0uNjYuMjktMS4xNy4yOS0uMjIgMC0uNDMtLjAyLS42NC0uMDgtLjIxLS4wNS0uNC0uMTMtLjU2LS4yNC0uMTctLjExLS4zLS4yNi0uNDEtLjQ0LS4xMS0uMTgtLjE3LS40MS0uMTgtLjY3aC0xLjg5YzAgLjM2LjA4LjcxLjI0IDEuMDUuMTYuMzQuMzkuNjUuNy45My4zMS4yNy42OS40OSAxLjE1LjY2LjQ2LjE3Ljk4LjI1IDEuNTguMjUuNTMgMCAxLjAxLS4wNiAxLjQ0LS4xOS40My0uMTMuOC0uMzEgMS4xMS0uNTQuMzEtLjIzLjU0LS41MS43MS0uODMuMTctLjMyLjI1LS42Ny4yNS0xLjA2LS4wMi0uNC0uMDktLjc0LS4yNC0xLjAyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRpbWVyLW9mZiI+PHBhdGggZD0iTTE5LjA0IDQuNTVsLTEuNDIgMS40MkMxNi4wNyA0Ljc0IDE0LjEyIDQgMTIgNGMtMS44MyAwLTMuNTMuNTUtNC45NSAxLjQ4bDEuNDYgMS40NkM5LjUzIDYuMzUgMTAuNzMgNiAxMiA2YzMuODcgMCA3IDMuMTMgNyA3IDAgMS4yNy0uMzUgMi40Ny0uOTQgMy40OWwxLjQ1IDEuNDVDMjAuNDUgMTYuNTMgMjEgMTQuODMgMjEgMTNjMC0yLjEyLS43NC00LjA3LTEuOTctNS42MWwxLjQyLTEuNDItMS40MS0xLjQyek0xNSAxSDl2Mmg2VjF6bS00IDguNDRsMiAyVjhoLTJ2MS40NHpNMy4wMiA0TDEuNzUgNS4yNyA0LjUgOC4wM0MzLjU1IDkuNDUgMyAxMS4xNiAzIDEzYzAgNC45NyA0LjAyIDkgOSA5IDEuODQgMCAzLjU1LS41NSA0Ljk4LTEuNWwyLjUgMi41IDEuMjctMS4yNy03LjcxLTcuNzFMMy4wMiA0ek0xMiAyMGMtMy44NyAwLTctMy4xMy03LTcgMC0xLjI4LjM1LTIuNDguOTUtMy41Mmw5LjU2IDkuNTZjLTEuMDMuNjEtMi4yMy45Ni0zLjUxLjk2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRvbmFsaXR5Ij48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptLTEgMTcuOTNjLTMuOTQtLjQ5LTctMy44NS03LTcuOTNzMy4wNS03LjQ0IDctNy45M3YxNS44NnptMi0xNS44NmMxLjAzLjEzIDIgLjQ1IDIuODcuOTNIMTN2LS45M3pNMTMgN2g1LjI0Yy4yNS4zMS40OC42NS42OCAxSDEzVjd6bTAgM2g2Ljc0Yy4wOC4zMy4xNS42Ni4xOSAxSDEzdi0xem0wIDkuOTNWMTloMi44N2MtLjg3LjQ4LTEuODQuOC0yLjg3Ljkzek0xOC4yNCAxN0gxM3YtMWg1LjkyYy0uMi4zNS0uNDMuNjktLjY4IDF6bTEuNS0zSDEzdi0xaDYuOTNjLS4wNC4zNC0uMTEuNjctLjE5IDF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idHJhbnNmb3JtIj48cGF0aCBkPSJNMjIgMTh2LTJIOFY0aDJMNyAxIDQgNGgydjJIMnYyaDR2OGMwIDEuMS45IDIgMiAyaDh2MmgtMmwzIDMgMy0zaC0ydi0yaDR6TTEwIDhoNnY2aDJWOGMwLTEuMS0uOS0yLTItMmgtNnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InR1bmUiPjxwYXRoIGQ9Ik0zIDE3djJoNnYtMkgzek0zIDV2MmgxMFY1SDN6bTEwIDE2di0yaDh2LTJoLTh2LTJoLTJ2Nmgyek03IDl2MkgzdjJoNHYyaDJWOUg3em0xNCA0di0ySDExdjJoMTB6bS02LTRoMlY3aDRWNWgtNFYzaC0ydjZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idmlldy1jb21meSI+PHBhdGggZD0iTTMgOWg0VjVIM3Y0em0wIDVoNHYtNEgzdjR6bTUgMGg0di00SDh2NHptNSAwaDR2LTRoLTR2NHpNOCA5aDRWNUg4djR6bTUtNHY0aDRWNWgtNHptNSA5aDR2LTRoLTR2NHpNMyAxOWg0di00SDN2NHptNSAwaDR2LTRIOHY0em01IDBoNHYtNGgtNHY0em01IDBoNHYtNGgtNHY0em0wLTE0djRoNFY1aC00eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InZpZXctY29tcGFjdCI+PHBhdGggZD0iTTMgMTloNnYtN0gzdjd6bTcgMGgxMnYtN0gxMHY3ek0zIDV2NmgxOVY1SDN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idmlnbmV0dGUiPjxwYXRoIGQ9Ik0yMSAzSDNjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTkgMTVjLTQuNDIgMC04LTIuNjktOC02czMuNTgtNiA4LTYgOCAyLjY5IDggNi0zLjU4IDYtOCA2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9IndiLWF1dG8iPjxwYXRoIGQ9Ik02Ljg1IDEyLjY1aDIuM0w4IDlsLTEuMTUgMy42NXpNMjIgN2wtMS4yIDYuMjlMMTkuMyA3aC0xLjZsLTEuNDkgNi4yOUwxNSA3aC0uNzZDMTIuNzcgNS4xNyAxMC41MyA0IDggNGMtNC40MiAwLTggMy41OC04IDhzMy41OCA4IDggOGMzLjEzIDAgNS44NC0xLjgxIDcuMTUtNC40M2wuMS40M0gxN2wxLjUtNi4xTDIwIDE2aDEuNzVsMi4wNS05SDIyem0tMTEuNyA5bC0uNy0ySDYuNGwtLjcgMkgzLjhMNyA3aDJsMy4yIDloLTEuOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ3Yi1jbG91ZHkiPjxwYXRoIGQ9Ik0xOS4zNiAxMC4wNEMxOC42NyA2LjU5IDE1LjY0IDQgMTIgNCA5LjExIDQgNi42IDUuNjQgNS4zNSA4LjA0IDIuMzQgOC4zNiAwIDEwLjkxIDAgMTRjMCAzLjMxIDIuNjkgNiA2IDZoMTNjMi43NiAwIDUtMi4yNCA1LTUgMC0yLjY0LTIuMDUtNC43OC00LjY0LTQuOTZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0id2ItaW5jYW5kZXNjZW50Ij48cGF0aCBkPSJNMy41NSAxOC41NGwxLjQxIDEuNDEgMS43OS0xLjgtMS40MS0xLjQxLTEuNzkgMS44ek0xMSAyMi40NWgyVjE5LjVoLTJ2Mi45NXpNNCAxMC41SDF2Mmgzdi0yem0xMS00LjE5VjEuNUg5djQuODFDNy4yMSA3LjM1IDYgOS4yOCA2IDExLjVjMCAzLjMxIDIuNjkgNiA2IDZzNi0yLjY5IDYtNmMwLTIuMjItMS4yMS00LjE1LTMtNS4xOXptNSA0LjE5djJoM3YtMmgtM3ptLTIuNzYgNy42NmwxLjc5IDEuOCAxLjQxLTEuNDEtMS44LTEuNzktMS40IDEuNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJ3Yi1pcmlkZXNjZW50Ij48cGF0aCBkPSJNNSAxNC41aDE0di02SDV2NnpNMTEgLjU1VjMuNWgyVi41NWgtMnptOC4wNCAyLjVsLTEuNzkgMS43OSAxLjQxIDEuNDEgMS44LTEuNzktMS40Mi0xLjQxek0xMyAyMi40NVYxOS41aC0ydjIuOTVoMnptNy40NS0zLjkxbC0xLjgtMS43OS0xLjQxIDEuNDEgMS43OSAxLjggMS40Mi0xLjQyek0zLjU1IDQuNDZsMS43OSAxLjc5IDEuNDEtMS40MS0xLjc5LTEuNzktMS40MSAxLjQxem0xLjQxIDE1LjQ5bDEuNzktMS44LTEuNDEtMS40MS0xLjc5IDEuNzkgMS40MSAxLjQyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9IndiLXN1bm55Ij48cGF0aCBkPSJNNi43NiA0Ljg0bC0xLjgtMS43OS0xLjQxIDEuNDEgMS43OSAxLjc5IDEuNDItMS40MXpNNCAxMC41SDF2Mmgzdi0yem05LTkuOTVoLTJWMy41aDJWLjU1em03LjQ1IDMuOTFsLTEuNDEtMS40MS0xLjc5IDEuNzkgMS40MSAxLjQxIDEuNzktMS43OXptLTMuMjEgMTMuN2wxLjc5IDEuOCAxLjQxLTEuNDEtMS44LTEuNzktMS40IDEuNHpNMjAgMTAuNXYyaDN2LTJoLTN6bS04LTVjLTMuMzEgMC02IDIuNjktNiA2czIuNjkgNiA2IDYgNi0yLjY5IDYtNi0yLjY5LTYtNi02em0tMSAxNi45NWgyVjE5LjVoLTJ2Mi45NXptLTcuNDUtMy45MWwxLjQxIDEuNDEgMS43OS0xLjgtMS40MS0xLjQxLTEuNzkgMS44eiI+PC9wYXRoPjwvZz4KPC9kZWZzPjwvc3ZnPgo8L2lyb24taWNvbnNldC1zdmc+YDtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHdvLmNvbnRlbnQpOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTQgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KY29uc3QgU289X2VgPGlyb24taWNvbnNldC1zdmcgbmFtZT0iaWNvbnMiIHNpemU9IjI0Ij4KPHN2Zz48ZGVmcz4KPGcgaWQ9IjNkLXJvdGF0aW9uIj48cGF0aCBkPSJNNy41MiAyMS40OEM0LjI1IDE5Ljk0IDEuOTEgMTYuNzYgMS41NSAxM0guMDVDLjU2IDE5LjE2IDUuNzEgMjQgMTIgMjRsLjY2LS4wMy0zLjgxLTMuODEtMS4zMyAxLjMyem0uODktNi41MmMtLjE5IDAtLjM3LS4wMy0uNTItLjA4LS4xNi0uMDYtLjI5LS4xMy0uNC0uMjQtLjExLS4xLS4yLS4yMi0uMjYtLjM3LS4wNi0uMTQtLjA5LS4zLS4wOS0uNDdoLTEuM2MwIC4zNi4wNy42OC4yMS45NS4xNC4yNy4zMy41LjU2LjY5LjI0LjE4LjUxLjMyLjgyLjQxLjMuMS42Mi4xNS45Ni4xNS4zNyAwIC43Mi0uMDUgMS4wMy0uMTUuMzItLjEuNi0uMjUuODMtLjQ0cy40Mi0uNDMuNTUtLjcyYy4xMy0uMjkuMi0uNjEuMi0uOTcgMC0uMTktLjAyLS4zOC0uMDctLjU2LS4wNS0uMTgtLjEyLS4zNS0uMjMtLjUxLS4xLS4xNi0uMjQtLjMtLjQtLjQzLS4xNy0uMTMtLjM3LS4yMy0uNjEtLjMxLjItLjA5LjM3LS4yLjUyLS4zMy4xNS0uMTMuMjctLjI3LjM3LS40Mi4xLS4xNS4xNy0uMy4yMi0uNDYuMDUtLjE2LjA3LS4zMi4wNy0uNDggMC0uMzYtLjA2LS42OC0uMTgtLjk2LS4xMi0uMjgtLjI5LS41MS0uNTEtLjY5LS4yLS4xOS0uNDctLjMzLS43Ny0uNDNDOS4xIDguMDUgOC43NiA4IDguMzkgOGMtLjM2IDAtLjY5LjA1LTEgLjE2LS4zLjExLS41Ny4yNi0uNzkuNDUtLjIxLjE5LS4zOC40MS0uNTEuNjctLjEyLjI2LS4xOC41NC0uMTguODVoMS4zYzAtLjE3LjAzLS4zMi4wOS0uNDVzLjE0LS4yNS4yNS0uMzRjLjExLS4wOS4yMy0uMTcuMzgtLjIyLjE1LS4wNS4zLS4wOC40OC0uMDguNCAwIC43LjEuODkuMzEuMTkuMi4yOS40OS4yOS44NiAwIC4xOC0uMDMuMzQtLjA4LjQ5LS4wNS4xNS0uMTQuMjctLjI1LjM3LS4xMS4xLS4yNS4xOC0uNDEuMjQtLjE2LjA2LS4zNi4wOS0uNTguMDlINy41djEuMDNoLjc3Yy4yMiAwIC40Mi4wMi42LjA3cy4zMy4xMy40NS4yM2MuMTIuMTEuMjIuMjQuMjkuNC4wNy4xNi4xLjM1LjEuNTcgMCAuNDEtLjEyLjcyLS4zNS45My0uMjMuMjMtLjU1LjMzLS45NS4zM3ptOC41NS01LjkyYy0uMzItLjMzLS43LS41OS0xLjE0LS43Ny0uNDMtLjE4LS45Mi0uMjctMS40Ni0uMjdIMTJ2OGgyLjNjLjU1IDAgMS4wNi0uMDkgMS41MS0uMjcuNDUtLjE4Ljg0LS40MyAxLjE2LS43Ni4zMi0uMzMuNTctLjczLjc0LTEuMTkuMTctLjQ3LjI2LS45OS4yNi0xLjU3di0uNGMwLS41OC0uMDktMS4xLS4yNi0xLjU3LS4xOC0uNDctLjQzLS44Ny0uNzUtMS4yem0tLjM5IDMuMTZjMCAuNDItLjA1Ljc5LS4xNCAxLjEzLS4xLjMzLS4yNC42Mi0uNDMuODUtLjE5LjIzLS40My40MS0uNzEuNTMtLjI5LjEyLS42Mi4xOC0uOTkuMThoLS45MVY5LjEyaC45N2MuNzIgMCAxLjI3LjIzIDEuNjQuNjkuMzguNDYuNTcgMS4xMi41NyAxLjk5di40ek0xMiAwbC0uNjYuMDMgMy44MSAzLjgxIDEuMzMtMS4zM2MzLjI3IDEuNTUgNS42MSA0LjcyIDUuOTYgOC40OGgxLjVDMjMuNDQgNC44NCAxOC4yOSAwIDEyIDB6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYWNjZXNzaWJpbGl0eSI+PHBhdGggZD0iTTEyIDJjMS4xIDAgMiAuOSAyIDJzLS45IDItMiAyLTItLjktMi0yIC45LTIgMi0yem05IDdoLTZ2MTNoLTJ2LTZoLTJ2Nkg5VjlIM1Y3aDE4djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYWNjZXNzaWJsZSI+PGNpcmNsZSBjeD0iMTIiIGN5PSI0IiByPSIyIj48L2NpcmNsZT48cGF0aCBkPSJNMTkgMTN2LTJjLTEuNTQuMDItMy4wOS0uNzUtNC4wNy0xLjgzbC0xLjI5LTEuNDNjLS4xNy0uMTktLjM4LS4zNC0uNjEtLjQ1LS4wMSAwLS4wMS0uMDEtLjAyLS4wMUgxM2MtLjM1LS4yLS43NS0uMy0xLjE5LS4yNkMxMC43NiA3LjExIDEwIDguMDQgMTAgOS4wOVYxNWMwIDEuMS45IDIgMiAyaDV2NWgydi01LjVjMC0xLjEtLjktMi0yLTJoLTN2LTMuNDVjMS4yOSAxLjA3IDMuMjUgMS45NCA1IDEuOTV6bS02LjE3IDVjLS40MSAxLjE2LTEuNTIgMi0yLjgzIDItMS42NiAwLTMtMS4zNC0zLTMgMC0xLjMxLjg0LTIuNDEgMi0yLjgzVjEyLjFjLTIuMjguNDYtNCAyLjQ4LTQgNC45IDAgMi43NiAyLjI0IDUgNSA1IDIuNDIgMCA0LjQ0LTEuNzIgNC45LTRoLTIuMDd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYWNjb3VudC1iYWxhbmNlIj48cGF0aCBkPSJNNCAxMHY3aDN2LTdINHptNiAwdjdoM3YtN2gtM3pNMiAyMmgxOXYtM0gydjN6bTE0LTEydjdoM3YtN2gtM3ptLTQuNS05TDIgNnYyaDE5VjZsLTkuNS01eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFjY291bnQtYmFsYW5jZS13YWxsZXQiPjxwYXRoIGQ9Ik0yMSAxOHYxYzAgMS4xLS45IDItMiAySDVjLTEuMTEgMC0yLS45LTItMlY1YzAtMS4xLjg5LTIgMi0yaDE0YzEuMSAwIDIgLjkgMiAydjFoLTljLTEuMTEgMC0yIC45LTIgMnY4YzAgMS4xLjg5IDIgMiAyaDl6bS05LTJoMTBWOEgxMnY4em00LTIuNWMtLjgzIDAtMS41LS42Ny0xLjUtMS41cy42Ny0xLjUgMS41LTEuNSAxLjUuNjcgMS41IDEuNS0uNjcgMS41LTEuNSAxLjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYWNjb3VudC1ib3giPjxwYXRoIGQ9Ik0zIDV2MTRjMCAxLjEuODkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMkg1Yy0xLjExIDAtMiAuOS0yIDJ6bTEyIDRjMCAxLjY2LTEuMzQgMy0zIDNzLTMtMS4zNC0zLTMgMS4zNC0zIDMtMyAzIDEuMzQgMyAzem0tOSA4YzAtMiA0LTMuMSA2LTMuMXM2IDEuMSA2IDMuMXYxSDZ2LTF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYWNjb3VudC1jaXJjbGUiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDNjMS42NiAwIDMgMS4zNCAzIDNzLTEuMzQgMy0zIDMtMy0xLjM0LTMtMyAxLjM0LTMgMy0zem0wIDE0LjJjLTIuNSAwLTQuNzEtMS4yOC02LTMuMjIuMDMtMS45OSA0LTMuMDggNi0zLjA4IDEuOTkgMCA1Ljk3IDEuMDkgNiAzLjA4LTEuMjkgMS45NC0zLjUgMy4yMi02IDMuMjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYWRkIj48cGF0aCBkPSJNMTkgMTNoLTZ2NmgtMnYtNkg1di0yaDZWNWgydjZoNnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFkZC1hbGVydCI+PHBhdGggZD0iTTEwLjAxIDIxLjAxYzAgMS4xLjg5IDEuOTkgMS45OSAxLjk5czEuOTktLjg5IDEuOTktMS45OWgtMy45OHptOC44Ny00LjE5VjExYzAtMy4yNS0yLjI1LTUuOTctNS4yOS02LjY5di0uNzJDMTMuNTkgMi43MSAxMi44OCAyIDEyIDJzLTEuNTkuNzEtMS41OSAxLjU5di43MkM3LjM3IDUuMDMgNS4xMiA3Ljc1IDUuMTIgMTF2NS44MkwzIDE4Ljk0VjIwaDE4di0xLjA2bC0yLjEyLTIuMTJ6TTE2IDEzLjAxaC0zdjNoLTJ2LTNIOFYxMWgzVjhoMnYzaDN2Mi4wMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhZGQtYm94Ij48cGF0aCBkPSJNMTkgM0g1Yy0xLjExIDAtMiAuOS0yIDJ2MTRjMCAxLjEuODkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTIgMTBoLTR2NGgtMnYtNEg3di0yaDRWN2gydjRoNHYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFkZC1jaXJjbGUiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem01IDExaC00djRoLTJ2LTRIN3YtMmg0VjdoMnY0aDR2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJhZGQtY2lyY2xlLW91dGxpbmUiPjxwYXRoIGQ9Ik0xMyA3aC0ydjRIN3YyaDR2NGgydi00aDR2LTJoLTRWN3ptLTEtNUM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYWRkLXNob3BwaW5nLWNhcnQiPjxwYXRoIGQ9Ik0xMSA5aDJWNmgzVjRoLTNWMWgtMnYzSDh2MmgzdjN6bS00IDljLTEuMSAwLTEuOTkuOS0xLjk5IDJTNS45IDIyIDcgMjJzMi0uOSAyLTItLjktMi0yLTJ6bTEwIDBjLTEuMSAwLTEuOTkuOS0xLjk5IDJzLjg5IDIgMS45OSAyIDItLjkgMi0yLS45LTItMi0yem0tOS44My0zLjI1bC4wMy0uMTIuOS0xLjYzaDcuNDVjLjc1IDAgMS40MS0uNDEgMS43NS0xLjAzbDMuODYtNy4wMUwxOS40MiA0aC0uMDFsLTEuMSAyLTIuNzYgNUg4LjUzbC0uMTMtLjI3TDYuMTYgNmwtLjk1LTItLjk0LTJIMXYyaDJsMy42IDcuNTktMS4zNSAyLjQ1Yy0uMTYuMjgtLjI1LjYxLS4yNS45NiAwIDEuMS45IDIgMiAyaDEydi0ySDcuNDJjLS4xMyAwLS4yNS0uMTEtLjI1LS4yNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhbGFybSI+PHBhdGggZD0iTTIyIDUuNzJsLTQuNi0zLjg2LTEuMjkgMS41MyA0LjYgMy44NkwyMiA1Ljcyek03Ljg4IDMuMzlMNi42IDEuODYgMiA1LjcxbDEuMjkgMS41MyA0LjU5LTMuODV6TTEyLjUgOEgxMXY2bDQuNzUgMi44NS43NS0xLjIzLTQtMi4zN1Y4ek0xMiA0Yy00Ljk3IDAtOSA0LjAzLTkgOXM0LjAyIDkgOSA5YzQuOTcgMCA5LTQuMDMgOS05cy00LjAzLTktOS05em0wIDE2Yy0zLjg3IDAtNy0zLjEzLTctN3MzLjEzLTcgNy03IDcgMy4xMyA3IDctMy4xMyA3LTcgN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJhbGFybS1hZGQiPjxwYXRoIGQ9Ik03Ljg4IDMuMzlMNi42IDEuODYgMiA1LjcxbDEuMjkgMS41MyA0LjU5LTMuODV6TTIyIDUuNzJsLTQuNi0zLjg2LTEuMjkgMS41MyA0LjYgMy44NkwyMiA1Ljcyek0xMiA0Yy00Ljk3IDAtOSA0LjAzLTkgOXM0LjAyIDkgOSA5YzQuOTcgMCA5LTQuMDMgOS05cy00LjAzLTktOS05em0wIDE2Yy0zLjg3IDAtNy0zLjEzLTctN3MzLjEzLTcgNy03IDcgMy4xMyA3IDctMy4xMyA3LTcgN3ptMS0xMWgtMnYzSDh2MmgzdjNoMnYtM2gzdi0yaC0zVjl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYWxhcm0tb2ZmIj48cGF0aCBkPSJNMTIgNmMzLjg3IDAgNyAzLjEzIDcgNyAwIC44NC0uMTYgMS42NS0uNDMgMi40bDEuNTIgMS41MmMuNTgtMS4xOS45MS0yLjUxLjkxLTMuOTIgMC00Ljk3LTQuMDMtOS05LTktMS40MSAwLTIuNzMuMzMtMy45Mi45MUw5LjYgNi40M0MxMC4zNSA2LjE2IDExLjE2IDYgMTIgNnptMTAtLjI4bC00LjYtMy44Ni0xLjI5IDEuNTMgNC42IDMuODZMMjIgNS43MnpNMi45MiAyLjI5TDEuNjUgMy41NyAyLjk4IDQuOWwtMS4xMS45MyAxLjQyIDEuNDIgMS4xMS0uOTQuOC44QzMuODMgOC42OSAzIDEwLjc1IDMgMTNjMCA0Ljk3IDQuMDIgOSA5IDkgMi4yNSAwIDQuMzEtLjgzIDUuODktMi4ybDIuMiAyLjIgMS4yNy0xLjI3TDMuODkgMy4yN2wtLjk3LS45OHptMTMuNTUgMTYuMUMxNS4yNiAxOS4zOSAxMy43IDIwIDEyIDIwYy0zLjg3IDAtNy0zLjEzLTctNyAwLTEuNy42MS0zLjI2IDEuNjEtNC40N2w5Ljg2IDkuODZ6TTguMDIgMy4yOEw2LjYgMS44NmwtLjg2LjcxIDEuNDIgMS40Mi44Ni0uNzF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYWxhcm0tb24iPjxwYXRoIGQ9Ik0yMiA1LjcybC00LjYtMy44Ni0xLjI5IDEuNTMgNC42IDMuODZMMjIgNS43MnpNNy44OCAzLjM5TDYuNiAxLjg2IDIgNS43MWwxLjI5IDEuNTMgNC41OS0zLjg1ek0xMiA0Yy00Ljk3IDAtOSA0LjAzLTkgOXM0LjAyIDkgOSA5YzQuOTcgMCA5LTQuMDMgOS05cy00LjAzLTktOS05em0wIDE2Yy0zLjg3IDAtNy0zLjEzLTctN3MzLjEzLTcgNy03IDcgMy4xMyA3IDctMy4xMyA3LTcgN3ptLTEuNDYtNS40N0w4LjQxIDEyLjRsLTEuMDYgMS4wNiAzLjE4IDMuMTggNi02LTEuMDYtMS4wNi00LjkzIDQuOTV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYWxsLW91dCI+PHBhdGggZD0iTTE2LjIxIDQuMTZsNCA0di00em00IDEybC00IDRoNHptLTEyIDRsLTQtNHY0em0tNC0xMmw0LTRoLTR6bTEyLjk1LS45NWMtMi43My0yLjczLTcuMTctMi43My05LjkgMHMtMi43MyA3LjE3IDAgOS45IDcuMTcgMi43MyA5LjkgMCAyLjczLTcuMTYgMC05Ljl6bS0xLjEgOC44Yy0yLjEzIDIuMTMtNS41NyAyLjEzLTcuNyAwcy0yLjEzLTUuNTcgMC03LjcgNS41Ny0yLjEzIDcuNyAwIDIuMTMgNS41NyAwIDcuN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJhbmRyb2lkIj48cGF0aCBkPSJNNiAxOGMwIC41NS40NSAxIDEgMWgxdjMuNWMwIC44My42NyAxLjUgMS41IDEuNXMxLjUtLjY3IDEuNS0xLjVWMTloMnYzLjVjMCAuODMuNjcgMS41IDEuNSAxLjVzMS41LS42NyAxLjUtMS41VjE5aDFjLjU1IDAgMS0uNDUgMS0xVjhINnYxMHpNMy41IDhDMi42NyA4IDIgOC42NyAyIDkuNXY3YzAgLjgzLjY3IDEuNSAxLjUgMS41UzUgMTcuMzMgNSAxNi41di03QzUgOC42NyA0LjMzIDggMy41IDh6bTE3IDBjLS44MyAwLTEuNS42Ny0xLjUgMS41djdjMCAuODMuNjcgMS41IDEuNSAxLjVzMS41LS42NyAxLjUtMS41di03YzAtLjgzLS42Ny0xLjUtMS41LTEuNXptLTQuOTctNS44NGwxLjMtMS4zYy4yLS4yLjItLjUxIDAtLjcxLS4yLS4yLS41MS0uMi0uNzEgMGwtMS40OCAxLjQ4QzEzLjg1IDEuMjMgMTIuOTUgMSAxMiAxYy0uOTYgMC0xLjg2LjIzLTIuNjYuNjNMNy44NS4xNWMtLjItLjItLjUxLS4yLS43MSAwLS4yLjItLjIuNTEgMCAuNzFsMS4zMSAxLjMxQzYuOTcgMy4yNiA2IDUuMDEgNiA3aDEyYzAtMS45OS0uOTctMy43NS0yLjQ3LTQuODR6TTEwIDVIOVY0aDF2MXptNSAwaC0xVjRoMXYxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFubm91bmNlbWVudCI+PHBhdGggZD0iTTIwIDJINGMtMS4xIDAtMS45OS45LTEuOTkgMkwyIDIybDQtNGgxNGMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yem0tNyA5aC0yVjVoMnY2em0wIDRoLTJ2LTJoMnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFwcHMiPjxwYXRoIGQ9Ik00IDhoNFY0SDR2NHptNiAxMmg0di00aC00djR6bS02IDBoNHYtNEg0djR6bTAtNmg0di00SDR2NHptNiAwaDR2LTRoLTR2NHptNi0xMHY0aDRWNGgtNHptLTYgNGg0VjRoLTR2NHptNiA2aDR2LTRoLTR2NHptMCA2aDR2LTRoLTR2NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJhcmNoaXZlIj48cGF0aCBkPSJNMjAuNTQgNS4yM2wtMS4zOS0xLjY4QzE4Ljg4IDMuMjEgMTguNDcgMyAxOCAzSDZjLS40NyAwLS44OC4yMS0xLjE2LjU1TDMuNDYgNS4yM0MzLjE3IDUuNTcgMyA2LjAyIDMgNi41VjE5YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNi41YzAtLjQ4LS4xNy0uOTMtLjQ2LTEuMjd6TTEyIDE3LjVMNi41IDEySDEwdi0yaDR2MmgzLjVMMTIgMTcuNXpNNS4xMiA1bC44MS0xaDEybC45NCAxSDUuMTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXJyb3ctYmFjayI+PHBhdGggZD0iTTIwIDExSDcuODNsNS41OS01LjU5TDEyIDRsLTggOCA4IDggMS40MS0xLjQxTDcuODMgMTNIMjB2LTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXJyb3ctZG93bndhcmQiPjxwYXRoIGQ9Ik0yMCAxMmwtMS40MS0xLjQxTDEzIDE2LjE3VjRoLTJ2MTIuMTdsLTUuNTgtNS41OUw0IDEybDggOCA4LTh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXJyb3ctZHJvcC1kb3duIj48cGF0aCBkPSJNNyAxMGw1IDUgNS01eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFycm93LWRyb3AtZG93bi1jaXJjbGUiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDEybC00LTRoOGwtNCA0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFycm93LWRyb3AtdXAiPjxwYXRoIGQ9Ik03IDE0bDUtNSA1IDV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXJyb3ctZm9yd2FyZCI+PHBhdGggZD0iTTEyIDRsLTEuNDEgMS40MUwxNi4xNyAxMUg0djJoMTIuMTdsLTUuNTggNS41OUwxMiAyMGw4LTh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXJyb3ctdXB3YXJkIj48cGF0aCBkPSJNNCAxMmwxLjQxIDEuNDFMMTEgNy44M1YyMGgyVjcuODNsNS41OCA1LjU5TDIwIDEybC04LTgtOCA4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFzcGVjdC1yYXRpbyI+PHBhdGggZD0iTTE5IDEyaC0ydjNoLTN2Mmg1di01ek03IDloM1Y3SDV2NWgyVjl6bTE0LTZIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2LjAxSDNWNC45OWgxOHYxNC4wMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJhc3Nlc3NtZW50Ij48cGF0aCBkPSJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6TTkgMTdIN3YtN2gydjd6bTQgMGgtMlY3aDJ2MTB6bTQgMGgtMnYtNGgydjR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXNzaWdubWVudCI+PHBhdGggZD0iTTE5IDNoLTQuMThDMTQuNCAxLjg0IDEzLjMgMSAxMiAxYy0xLjMgMC0yLjQuODQtMi44MiAySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTcgMGMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xem0yIDE0SDd2LTJoN3Yyem0zLTRIN3YtMmgxMHYyem0wLTRIN1Y3aDEwdjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXNzaWdubWVudC1pbmQiPjxwYXRoIGQ9Ik0xOSAzaC00LjE4QzE0LjQgMS44NCAxMy4zIDEgMTIgMWMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptMCA0YzEuNjYgMCAzIDEuMzQgMyAzcy0xLjM0IDMtMyAzLTMtMS4zNC0zLTMgMS4zNC0zIDMtM3ptNiAxMkg2di0xLjRjMC0yIDQtMy4xIDYtMy4xczYgMS4xIDYgMy4xVjE5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFzc2lnbm1lbnQtbGF0ZSI+PHBhdGggZD0iTTE5IDNoLTQuMThDMTQuNCAxLjg0IDEzLjMgMSAxMiAxYy0xLjMgMC0yLjQuODQtMi44MiAySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTYgMTVoLTJ2LTJoMnYyem0wLTRoLTJWOGgydjZ6bS0xLTljLS41NSAwLTEtLjQ1LTEtMXMuNDUtMSAxLTEgMSAuNDUgMSAxLS40NSAxLTEgMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhc3NpZ25tZW50LXJldHVybiI+PHBhdGggZD0iTTE5IDNoLTQuMThDMTQuNCAxLjg0IDEzLjMgMSAxMiAxYy0xLjMgMC0yLjQuODQtMi44MiAySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTcgMGMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xem00IDEyaC00djNsLTUtNSA1LTV2M2g0djR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXNzaWdubWVudC1yZXR1cm5lZCI+PHBhdGggZD0iTTE5IDNoLTQuMThDMTQuNCAxLjg0IDEzLjMgMSAxMiAxYy0xLjMgMC0yLjQuODQtMi44MiAySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTcgMGMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xem0wIDE1bC01LTVoM1Y5aDR2NGgzbC01IDV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXNzaWdubWVudC10dXJuZWQtaW4iPjxwYXRoIGQ9Ik0xOSAzaC00LjE4QzE0LjQgMS44NCAxMy4zIDEgMTIgMWMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptLTIgMTRsLTQtNCAxLjQxLTEuNDFMMTAgMTQuMTdsNi41OS02LjU5TDE4IDlsLTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJhdHRhY2htZW50Ij48cGF0aCBkPSJNMiAxMi41QzIgOS40NiA0LjQ2IDcgNy41IDdIMThjMi4yMSAwIDQgMS43OSA0IDRzLTEuNzkgNC00IDRIOS41QzguMTIgMTUgNyAxMy44OCA3IDEyLjVTOC4xMiAxMCA5LjUgMTBIMTd2Mkg5LjQxYy0uNTUgMC0uNTUgMSAwIDFIMThjMS4xIDAgMi0uOSAyLTJzLS45LTItMi0ySDcuNUM1LjU3IDkgNCAxMC41NyA0IDEyLjVTNS41NyAxNiA3LjUgMTZIMTd2Mkg3LjVDNC40NiAxOCAyIDE1LjU0IDIgMTIuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhdXRvcmVuZXciPjxwYXRoIGQ9Ik0xMiA2djNsNC00LTQtNHYzYy00LjQyIDAtOCAzLjU4LTggOCAwIDEuNTcuNDYgMy4wMyAxLjI0IDQuMjZMNi43IDE0LjhjLS40NS0uODMtLjctMS43OS0uNy0yLjggMC0zLjMxIDIuNjktNiA2LTZ6bTYuNzYgMS43NEwxNy4zIDkuMmMuNDQuODQuNyAxLjc5LjcgMi44IDAgMy4zMS0yLjY5IDYtNiA2di0zbC00IDQgNCA0di0zYzQuNDIgMCA4LTMuNTggOC04IDAtMS41Ny0uNDYtMy4wMy0xLjI0LTQuMjZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYmFja3NwYWNlIj48cGF0aCBkPSJNMjIgM0g3Yy0uNjkgMC0xLjIzLjM1LTEuNTkuODhMMCAxMmw1LjQxIDguMTFjLjM2LjUzLjkuODkgMS41OS44OWgxNWMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tMyAxMi41OUwxNy41OSAxNyAxNCAxMy40MSAxMC40MSAxNyA5IDE1LjU5IDEyLjU5IDEyIDkgOC40MSAxMC40MSA3IDE0IDEwLjU5IDE3LjU5IDcgMTkgOC40MSAxNS40MSAxMiAxOSAxNS41OXoiPjwvcGF0aD48L2c+CjxnIGlkPSJiYWNrdXAiPjxwYXRoIGQ9Ik0xOS4zNSAxMC4wNEMxOC42NyA2LjU5IDE1LjY0IDQgMTIgNCA5LjExIDQgNi42IDUuNjQgNS4zNSA4LjA0IDIuMzQgOC4zNiAwIDEwLjkxIDAgMTRjMCAzLjMxIDIuNjkgNiA2IDZoMTNjMi43NiAwIDUtMi4yNCA1LTUgMC0yLjY0LTIuMDUtNC43OC00LjY1LTQuOTZ6TTE0IDEzdjRoLTR2LTRIN2w1LTUgNSA1aC0zeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImJsb2NrIj48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnpNNCAxMmMwLTQuNDIgMy41OC04IDgtOCAxLjg1IDAgMy41NS42MyA0LjkgMS42OUw1LjY5IDE2LjlDNC42MyAxNS41NSA0IDEzLjg1IDQgMTJ6bTggOGMtMS44NSAwLTMuNTUtLjYzLTQuOS0xLjY5TDE4LjMxIDcuMUMxOS4zNyA4LjQ1IDIwIDEwLjE1IDIwIDEyYzAgNC40Mi0zLjU4IDgtOCA4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImJvb2siPjxwYXRoIGQ9Ik0xOCAySDZjLTEuMSAwLTIgLjktMiAydjE2YzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnpNNiA0aDV2OGwtMi41LTEuNUw2IDEyVjR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYm9va21hcmsiPjxwYXRoIGQ9Ik0xNyAzSDdjLTEuMSAwLTEuOTkuOS0xLjk5IDJMNSAyMWw3LTMgNyAzVjVjMC0xLjEtLjktMi0yLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYm9va21hcmstYm9yZGVyIj48cGF0aCBkPSJNMTcgM0g3Yy0xLjEgMC0xLjk5LjktMS45OSAyTDUgMjFsNy0zIDcgM1Y1YzAtMS4xLS45LTItMi0yem0wIDE1bC01LTIuMThMNyAxOFY1aDEwdjEzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImJ1Zy1yZXBvcnQiPjxwYXRoIGQ9Ik0yMCA4aC0yLjgxYy0uNDUtLjc4LTEuMDctMS40NS0xLjgyLTEuOTZMMTcgNC40MSAxNS41OSAzbC0yLjE3IDIuMTdDMTIuOTYgNS4wNiAxMi40OSA1IDEyIDVjLS40OSAwLS45Ni4wNi0xLjQxLjE3TDguNDEgMyA3IDQuNDFsMS42MiAxLjYzQzcuODggNi41NSA3LjI2IDcuMjIgNi44MSA4SDR2MmgyLjA5Yy0uMDUuMzMtLjA5LjY2LS4wOSAxdjFINHYyaDJ2MWMwIC4zNC4wNC42Ny4wOSAxSDR2MmgyLjgxYzEuMDQgMS43OSAyLjk3IDMgNS4xOSAzczQuMTUtMS4yMSA1LjE5LTNIMjB2LTJoLTIuMDljLjA1LS4zMy4wOS0uNjYuMDktMXYtMWgydi0yaC0ydi0xYzAtLjM0LS4wNC0uNjctLjA5LTFIMjBWOHptLTYgOGgtNHYtMmg0djJ6bTAtNGgtNHYtMmg0djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYnVpbGQiPjxwYXRoIGQ9Ik0yMi43IDE5bC05LjEtOS4xYy45LTIuMy40LTUtMS41LTYuOS0yLTItNS0yLjQtNy40LTEuM0w5IDYgNiA5IDEuNiA0LjdDLjQgNy4xLjkgMTAuMSAyLjkgMTIuMWMxLjkgMS45IDQuNiAyLjQgNi45IDEuNWw5LjEgOS4xYy40LjQgMSAuNCAxLjQgMGwyLjMtMi4zYy41LS40LjUtMS4xLjEtMS40eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNhY2hlZCI+PHBhdGggZD0iTTE5IDhsLTQgNGgzYzAgMy4zMS0yLjY5IDYtNiA2LTEuMDEgMC0xLjk3LS4yNS0yLjgtLjdsLTEuNDYgMS40NkM4Ljk3IDE5LjU0IDEwLjQzIDIwIDEyIDIwYzQuNDIgMCA4LTMuNTggOC04aDNsLTQtNHpNNiAxMmMwLTMuMzEgMi42OS02IDYtNiAxLjAxIDAgMS45Ny4yNSAyLjguN2wxLjQ2LTEuNDZDMTUuMDMgNC40NiAxMy41NyA0IDEyIDRjLTQuNDIgMC04IDMuNTgtOCA4SDFsNCA0IDQtNEg2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNhbWVyYS1lbmhhbmNlIj48cGF0aCBkPSJNOSAzTDcuMTcgNUg0Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjdjMC0xLjEtLjktMi0yLTJoLTMuMTdMMTUgM0g5em0zIDE1Yy0yLjc2IDAtNS0yLjI0LTUtNXMyLjI0LTUgNS01IDUgMi4yNCA1IDUtMi4yNCA1LTUgNXptMC0xbDEuMjUtMi43NUwxNiAxM2wtMi43NS0xLjI1TDEyIDlsLTEuMjUgMi43NUw4IDEzbDIuNzUgMS4yNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJjYW5jZWwiPjxwYXRoIGQ9Ik0xMiAyQzYuNDcgMiAyIDYuNDcgMiAxMnM0LjQ3IDEwIDEwIDEwIDEwLTQuNDcgMTAtMTBTMTcuNTMgMiAxMiAyem01IDEzLjU5TDE1LjU5IDE3IDEyIDEzLjQxIDguNDEgMTcgNyAxNS41OSAxMC41OSAxMiA3IDguNDEgOC40MSA3IDEyIDEwLjU5IDE1LjU5IDcgMTcgOC40MSAxMy40MSAxMiAxNyAxNS41OXoiPjwvcGF0aD48L2c+CjxnIGlkPSJjYXJkLWdpZnRjYXJkIj48cGF0aCBkPSJNMjAgNmgtMi4xOGMuMTEtLjMxLjE4LS42NS4xOC0xIDAtMS42Ni0xLjM0LTMtMy0zLTEuMDUgMC0xLjk2LjU0LTIuNSAxLjM1bC0uNS42Ny0uNS0uNjhDMTAuOTYgMi41NCAxMC4wNSAyIDkgMiA3LjM0IDIgNiAzLjM0IDYgNWMwIC4zNS4wNy42OS4xOCAxSDRjLTEuMTEgMC0xLjk5Ljg5LTEuOTkgMkwyIDE5YzAgMS4xMS44OSAyIDIgMmgxNmMxLjExIDAgMi0uODkgMi0yVjhjMC0xLjExLS44OS0yLTItMnptLTUtMmMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xek05IDRjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptMTEgMTVINHYtMmgxNnYyem0wLTVINFY4aDUuMDhMNyAxMC44MyA4LjYyIDEyIDExIDguNzZsMS0xLjM2IDEgMS4zNkwxNS4zOCAxMiAxNyAxMC44MyAxNC45MiA4SDIwdjZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2FyZC1tZW1iZXJzaGlwIj48cGF0aCBkPSJNMjAgMkg0Yy0xLjExIDAtMiAuODktMiAydjExYzAgMS4xMS44OSAyIDIgMmg0djVsNC0yIDQgMnYtNWg0YzEuMTEgMCAyLS44OSAyLTJWNGMwLTEuMTEtLjg5LTItMi0yem0wIDEzSDR2LTJoMTZ2MnptMC01SDRWNGgxNnY2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNhcmQtdHJhdmVsIj48cGF0aCBkPSJNMjAgNmgtM1Y0YzAtMS4xMS0uODktMi0yLTJIOWMtMS4xMSAwLTIgLjg5LTIgMnYySDRjLTEuMTEgMC0yIC44OS0yIDJ2MTFjMCAxLjExLjg5IDIgMiAyaDE2YzEuMTEgMCAyLS44OSAyLTJWOGMwLTEuMTEtLjg5LTItMi0yek05IDRoNnYySDlWNHptMTEgMTVINHYtMmgxNnYyem0wLTVINFY4aDN2MmgyVjhoNnYyaDJWOGgzdjZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2hhbmdlLWhpc3RvcnkiPjxwYXRoIGQ9Ik0xMiA3Ljc3TDE4LjM5IDE4SDUuNjFMMTIgNy43N00xMiA0TDIgMjBoMjBMMTIgNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJjaGVjayI+PHBhdGggZD0iTTkgMTYuMTdMNC44MyAxMmwtMS40MiAxLjQxTDkgMTkgMjEgN2wtMS40MS0xLjQxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNoZWNrLWJveCI+PHBhdGggZD0iTTE5IDNINWMtMS4xMSAwLTIgLjktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMTEgMCAyLS45IDItMlY1YzAtMS4xLS44OS0yLTItMnptLTkgMTRsLTUtNSAxLjQxLTEuNDFMMTAgMTQuMTdsNy41OS03LjU5TDE5IDhsLTkgOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJjaGVjay1ib3gtb3V0bGluZS1ibGFuayI+PHBhdGggZD0iTTE5IDV2MTRINVY1aDE0bTAtMkg1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2hlY2stY2lyY2xlIj48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptLTIgMTVsLTUtNSAxLjQxLTEuNDFMMTAgMTQuMTdsNy41OS03LjU5TDE5IDhsLTkgOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJjaGV2cm9uLWxlZnQiPjxwYXRoIGQ9Ik0xNS40MSA3LjQxTDE0IDZsLTYgNiA2IDYgMS40MS0xLjQxTDEwLjgzIDEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNoZXZyb24tcmlnaHQiPjxwYXRoIGQ9Ik0xMCA2TDguNTkgNy40MSAxMy4xNyAxMmwtNC41OCA0LjU5TDEwIDE4bDYtNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjaHJvbWUtcmVhZGVyLW1vZGUiPjxwYXRoIGQ9Ik0xMyAxMmg3djEuNWgtN3ptMC0yLjVoN1YxMWgtN3ptMCA1aDdWMTZoLTd6TTIxIDRIM2MtMS4xIDAtMiAuOS0yIDJ2MTNjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0wIDE1aC05VjZoOXYxM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJjbGFzcyI+PHBhdGggZD0iTTE4IDJINmMtMS4xIDAtMiAuOS0yIDJ2MTZjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yek02IDRoNXY4bC0yLjUtMS41TDYgMTJWNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJjbGVhciI+PHBhdGggZD0iTTE5IDYuNDFMMTcuNTkgNSAxMiAxMC41OSA2LjQxIDUgNSA2LjQxIDEwLjU5IDEyIDUgMTcuNTkgNi40MSAxOSAxMiAxMy40MSAxNy41OSAxOSAxOSAxNy41OSAxMy40MSAxMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjbG9zZSI+PHBhdGggZD0iTTE5IDYuNDFMMTcuNTkgNSAxMiAxMC41OSA2LjQxIDUgNSA2LjQxIDEwLjU5IDEyIDUgMTcuNTkgNi40MSAxOSAxMiAxMy40MSAxNy41OSAxOSAxOSAxNy41OSAxMy40MSAxMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjbG91ZCI+PHBhdGggZD0iTTE5LjM1IDEwLjA0QzE4LjY3IDYuNTkgMTUuNjQgNCAxMiA0IDkuMTEgNCA2LjYgNS42NCA1LjM1IDguMDQgMi4zNCA4LjM2IDAgMTAuOTEgMCAxNGMwIDMuMzEgMi42OSA2IDYgNmgxM2MyLjc2IDAgNS0yLjI0IDUtNSAwLTIuNjQtMi4wNS00Ljc4LTQuNjUtNC45NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjbG91ZC1jaXJjbGUiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem00LjUgMTRIOGMtMS42NiAwLTMtMS4zNC0zLTNzMS4zNC0zIDMtM2wuMTQuMDFDOC41OCA4LjI4IDEwLjEzIDcgMTIgN2MyLjIxIDAgNCAxLjc5IDQgNGguNWMxLjM4IDAgMi41IDEuMTIgMi41IDIuNVMxNy44OCAxNiAxNi41IDE2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNsb3VkLWRvbmUiPjxwYXRoIGQ9Ik0xOS4zNSAxMC4wNEMxOC42NyA2LjU5IDE1LjY0IDQgMTIgNCA5LjExIDQgNi42IDUuNjQgNS4zNSA4LjA0IDIuMzQgOC4zNiAwIDEwLjkxIDAgMTRjMCAzLjMxIDIuNjkgNiA2IDZoMTNjMi43NiAwIDUtMi4yNCA1LTUgMC0yLjY0LTIuMDUtNC43OC00LjY1LTQuOTZ6TTEwIDE3bC0zLjUtMy41IDEuNDEtMS40MUwxMCAxNC4xNyAxNS4xOCA5bDEuNDEgMS40MUwxMCAxN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJjbG91ZC1kb3dubG9hZCI+PHBhdGggZD0iTTE5LjM1IDEwLjA0QzE4LjY3IDYuNTkgMTUuNjQgNCAxMiA0IDkuMTEgNCA2LjYgNS42NCA1LjM1IDguMDQgMi4zNCA4LjM2IDAgMTAuOTEgMCAxNGMwIDMuMzEgMi42OSA2IDYgNmgxM2MyLjc2IDAgNS0yLjI0IDUtNSAwLTIuNjQtMi4wNS00Ljc4LTQuNjUtNC45NnpNMTcgMTNsLTUgNS01LTVoM1Y5aDR2NGgzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNsb3VkLW9mZiI+PHBhdGggZD0iTTE5LjM1IDEwLjA0QzE4LjY3IDYuNTkgMTUuNjQgNCAxMiA0Yy0xLjQ4IDAtMi44NS40My00LjAxIDEuMTdsMS40NiAxLjQ2QzEwLjIxIDYuMjMgMTEuMDggNiAxMiA2YzMuMDQgMCA1LjUgMi40NiA1LjUgNS41di41SDE5YzEuNjYgMCAzIDEuMzQgMyAzIDAgMS4xMy0uNjQgMi4xMS0xLjU2IDIuNjJsMS40NSAxLjQ1QzIzLjE2IDE4LjE2IDI0IDE2LjY4IDI0IDE1YzAtMi42NC0yLjA1LTQuNzgtNC42NS00Ljk2ek0zIDUuMjdsMi43NSAyLjc0QzIuNTYgOC4xNSAwIDEwLjc3IDAgMTRjMCAzLjMxIDIuNjkgNiA2IDZoMTEuNzNsMiAyTDIxIDIwLjczIDQuMjcgNCAzIDUuMjd6TTcuNzMgMTBsOCA4SDZjLTIuMjEgMC00LTEuNzktNC00czEuNzktNCA0LTRoMS43M3oiPjwvcGF0aD48L2c+CjxnIGlkPSJjbG91ZC1xdWV1ZSI+PHBhdGggZD0iTTE5LjM1IDEwLjA0QzE4LjY3IDYuNTkgMTUuNjQgNCAxMiA0IDkuMTEgNCA2LjYgNS42NCA1LjM1IDguMDQgMi4zNCA4LjM2IDAgMTAuOTEgMCAxNGMwIDMuMzEgMi42OSA2IDYgNmgxM2MyLjc2IDAgNS0yLjI0IDUtNSAwLTIuNjQtMi4wNS00Ljc4LTQuNjUtNC45NnpNMTkgMThINmMtMi4yMSAwLTQtMS43OS00LTRzMS43OS00IDQtNGguNzFDNy4zNyA3LjY5IDkuNDggNiAxMiA2YzMuMDQgMCA1LjUgMi40NiA1LjUgNS41di41SDE5YzEuNjYgMCAzIDEuMzQgMyAzcy0xLjM0IDMtMyAzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNsb3VkLXVwbG9hZCI+PHBhdGggZD0iTTE5LjM1IDEwLjA0QzE4LjY3IDYuNTkgMTUuNjQgNCAxMiA0IDkuMTEgNCA2LjYgNS42NCA1LjM1IDguMDQgMi4zNCA4LjM2IDAgMTAuOTEgMCAxNGMwIDMuMzEgMi42OSA2IDYgNmgxM2MyLjc2IDAgNS0yLjI0IDUtNSAwLTIuNjQtMi4wNS00Ljc4LTQuNjUtNC45NnpNMTQgMTN2NGgtNHYtNEg3bDUtNSA1IDVoLTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY29kZSI+PHBhdGggZD0iTTkuNCAxNi42TDQuOCAxMmw0LjYtNC42TDggNmwtNiA2IDYgNiAxLjQtMS40em01LjIgMGw0LjYtNC42LTQuNi00LjZMMTYgNmw2IDYtNiA2LTEuNC0xLjR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY29tcGFyZS1hcnJvd3MiPjxwYXRoIGQ9Ik05LjAxIDE0SDJ2Mmg3LjAxdjNMMTMgMTVsLTMuOTktNHYzem01Ljk4LTF2LTNIMjJWOGgtNy4wMVY1TDExIDlsMy45OSA0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNvbnRlbnQtY29weSI+PHBhdGggZD0iTTE2IDFINGMtMS4xIDAtMiAuOS0yIDJ2MTRoMlYzaDEyVjF6bTMgNEg4Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDExYzEuMSAwIDItLjkgMi0yVjdjMC0xLjEtLjktMi0yLTJ6bTAgMTZIOFY3aDExdjE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNvbnRlbnQtY3V0Ij48cGF0aCBkPSJNOS42NCA3LjY0Yy4yMy0uNS4zNi0xLjA1LjM2LTEuNjQgMC0yLjIxLTEuNzktNC00LTRTMiAzLjc5IDIgNnMxLjc5IDQgNCA0Yy41OSAwIDEuMTQtLjEzIDEuNjQtLjM2TDEwIDEybC0yLjM2IDIuMzZDNy4xNCAxNC4xMyA2LjU5IDE0IDYgMTRjLTIuMjEgMC00IDEuNzktNCA0czEuNzkgNCA0IDQgNC0xLjc5IDQtNGMwLS41OS0uMTMtMS4xNC0uMzYtMS42NEwxMiAxNGw3IDdoM3YtMUw5LjY0IDcuNjR6TTYgOGMtMS4xIDAtMi0uODktMi0ycy45LTIgMi0yIDIgLjg5IDIgMi0uOSAyLTIgMnptMCAxMmMtMS4xIDAtMi0uODktMi0ycy45LTIgMi0yIDIgLjg5IDIgMi0uOSAyLTIgMnptNi03LjVjLS4yOCAwLS41LS4yMi0uNS0uNXMuMjItLjUuNS0uNS41LjIyLjUuNS0uMjIuNS0uNS41ek0xOSAzbC02IDYgMiAyIDctN1YzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNvbnRlbnQtcGFzdGUiPjxwYXRoIGQ9Ik0xOSAyaC00LjE4QzE0LjQuODQgMTMuMyAwIDEyIDBjLTEuMyAwLTIuNC44NC0yLjgyIDJINWMtMS4xIDAtMiAuOS0yIDJ2MTZjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yem0tNyAwYy41NSAwIDEgLjQ1IDEgMXMtLjQ1IDEtMSAxLTEtLjQ1LTEtMSAuNDUtMSAxLTF6bTcgMThINVY0aDJ2M2gxMFY0aDJ2MTZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY29weXJpZ2h0Ij48cGF0aCBkPSJNMTAuMDggMTAuODZjLjA1LS4zMy4xNi0uNjIuMy0uODdzLjM0LS40Ni41OS0uNjJjLjI0LS4xNS41NC0uMjIuOTEtLjIzLjIzLjAxLjQ0LjA1LjYzLjEzLjIuMDkuMzguMjEuNTIuMzZzLjI1LjMzLjM0LjUzLjEzLjQyLjE0LjY0aDEuNzljLS4wMi0uNDctLjExLS45LS4yOC0xLjI5cy0uNC0uNzMtLjctMS4wMS0uNjYtLjUtMS4wOC0uNjYtLjg4LS4yMy0xLjM5LS4yM2MtLjY1IDAtMS4yMi4xMS0xLjcuMzRzLS44OC41My0xLjIuOTItLjU2Ljg0LS43MSAxLjM2UzggMTEuMjkgOCAxMS44N3YuMjdjMCAuNTguMDggMS4xMi4yMyAxLjY0cy4zOS45Ny43MSAxLjM1LjcyLjY5IDEuMi45MSAxLjA1LjM0IDEuNy4zNGMuNDcgMCAuOTEtLjA4IDEuMzItLjIzcy43Ny0uMzYgMS4wOC0uNjMuNTYtLjU4Ljc0LS45NC4yOS0uNzQuMy0xLjE1aC0xLjc5Yy0uMDEuMjEtLjA2LjQtLjE1LjU4cy0uMjEuMzMtLjM2LjQ2LS4zMi4yMy0uNTIuM2MtLjE5LjA3LS4zOS4wOS0uNi4xLS4zNi0uMDEtLjY2LS4wOC0uODktLjIzLS4yNS0uMTYtLjQ1LS4zNy0uNTktLjYycy0uMjUtLjU1LS4zLS44OC0uMDgtLjY3LS4wOC0xdi0uMjdjMC0uMzUuMDMtLjY4LjA4LTEuMDF6TTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyZWF0ZSI+PHBhdGggZD0iTTMgMTcuMjVWMjFoMy43NUwxNy44MSA5Ljk0bC0zLjc1LTMuNzVMMyAxNy4yNXpNMjAuNzEgNy4wNGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC0yLjM0LTIuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0xLjgzIDEuODMgMy43NSAzLjc1IDEuODMtMS44M3oiPjwvcGF0aD48L2c+CjxnIGlkPSJjcmVhdGUtbmV3LWZvbGRlciI+PHBhdGggZD0iTTIwIDZoLThsLTItMkg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY4YzAtMS4xMS0uODktMi0yLTJ6bS0xIDhoLTN2M2gtMnYtM2gtM3YtMmgzVjloMnYzaDN2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjcmVkaXQtY2FyZCI+PHBhdGggZD0iTTIwIDRINGMtMS4xMSAwLTEuOTkuODktMS45OSAyTDIgMThjMCAxLjExLjg5IDIgMiAyaDE2YzEuMTEgMCAyLS44OSAyLTJWNmMwLTEuMTEtLjg5LTItMi0yem0wIDE0SDR2LTZoMTZ2NnptMC0xMEg0VjZoMTZ2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJkYXNoYm9hcmQiPjxwYXRoIGQ9Ik0zIDEzaDhWM0gzdjEwem0wIDhoOHYtNkgzdjZ6bTEwIDBoOFYxMWgtOHYxMHptMC0xOHY2aDhWM2gtOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJkYXRlLXJhbmdlIj48cGF0aCBkPSJNOSAxMUg3djJoMnYtMnptNCAwaC0ydjJoMnYtMnptNCAwaC0ydjJoMnYtMnptMi03aC0xVjJoLTJ2Mkg4VjJINnYySDVjLTEuMTEgMC0xLjk5LjktMS45OSAyTDMgMjBjMCAxLjEuODkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNmMwLTEuMS0uOS0yLTItMnptMCAxNkg1VjloMTR2MTF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZGVsZXRlIj48cGF0aCBkPSJNNiAxOWMwIDEuMS45IDIgMiAyaDhjMS4xIDAgMi0uOSAyLTJWN0g2djEyek0xOSA0aC0zLjVsLTEtMWgtNWwtMSAxSDV2MmgxNFY0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImRlbGV0ZS1mb3JldmVyIj48cGF0aCBkPSJNNiAxOWMwIDEuMS45IDIgMiAyaDhjMS4xIDAgMi0uOSAyLTJWN0g2djEyem0yLjQ2LTcuMTJsMS40MS0xLjQxTDEyIDEyLjU5bDIuMTItMi4xMiAxLjQxIDEuNDFMMTMuNDEgMTRsMi4xMiAyLjEyLTEuNDEgMS40MUwxMiAxNS40MWwtMi4xMiAyLjEyLTEuNDEtMS40MUwxMC41OSAxNGwtMi4xMy0yLjEyek0xNS41IDRsLTEtMWgtNWwtMSAxSDV2MmgxNFY0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImRlbGV0ZS1zd2VlcCI+PHBhdGggZD0iTTE1IDE2aDR2MmgtNHptMC04aDd2MmgtN3ptMCA0aDZ2MmgtNnpNMyAxOGMwIDEuMS45IDIgMiAyaDZjMS4xIDAgMi0uOSAyLTJWOEgzdjEwek0xNCA1aC0zbC0xLTFINkw1IDVIMnYyaDEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImRlc2NyaXB0aW9uIj48cGF0aCBkPSJNMTQgMkg2Yy0xLjEgMC0xLjk5LjktMS45OSAyTDQgMjBjMCAxLjEuODkgMiAxLjk5IDJIMThjMS4xIDAgMi0uOSAyLTJWOGwtNi02em0yIDE2SDh2LTJoOHYyem0wLTRIOHYtMmg4djJ6bS0zLTVWMy41TDE4LjUgOUgxM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJkbnMiPjxwYXRoIGQ9Ik0yMCAxM0g0Yy0uNTUgMC0xIC40NS0xIDF2NmMwIC41NS40NSAxIDEgMWgxNmMuNTUgMCAxLS40NSAxLTF2LTZjMC0uNTUtLjQ1LTEtMS0xek03IDE5Yy0xLjEgMC0yLS45LTItMnMuOS0yIDItMiAyIC45IDIgMi0uOSAyLTIgMnpNMjAgM0g0Yy0uNTUgMC0xIC40NS0xIDF2NmMwIC41NS40NSAxIDEgMWgxNmMuNTUgMCAxLS40NSAxLTFWNGMwLS41NS0uNDUtMS0xLTF6TTcgOWMtMS4xIDAtMi0uOS0yLTJzLjktMiAyLTIgMiAuOSAyIDItLjkgMi0yIDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZG9uZSI+PHBhdGggZD0iTTkgMTYuMkw0LjggMTJsLTEuNCAxLjRMOSAxOSAyMSA3bC0xLjQtMS40TDkgMTYuMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJkb25lLWFsbCI+PHBhdGggZD0iTTE4IDdsLTEuNDEtMS40MS02LjM0IDYuMzQgMS40MSAxLjQxTDE4IDd6bTQuMjQtMS40MUwxMS42NiAxNi4xNyA3LjQ4IDEybC0xLjQxIDEuNDFMMTEuNjYgMTlsMTItMTItMS40Mi0xLjQxek0uNDEgMTMuNDFMNiAxOWwxLjQxLTEuNDFMMS44MyAxMiAuNDEgMTMuNDF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZG9udXQtbGFyZ2UiPjxwYXRoIGQ9Ik0xMSA1LjA4VjJjLTUgLjUtOSA0LjgxLTkgMTBzNCA5LjUgOSAxMHYtMy4wOGMtMy0uNDgtNi0zLjQtNi02LjkyczMtNi40NCA2LTYuOTJ6TTE4Ljk3IDExSDIyYy0uNDctNS00LTguNTMtOS05djMuMDhDMTYgNS41MSAxOC41NCA4IDE4Ljk3IDExek0xMyAxOC45MlYyMmM1LS40NyA4LjUzLTQgOS05aC0zLjAzYy0uNDMgMy0yLjk3IDUuNDktNS45NyA1LjkyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImRvbnV0LXNtYWxsIj48cGF0aCBkPSJNMTEgOS4xNlYyYy01IC41LTkgNC43OS05IDEwczQgOS41IDkgMTB2LTcuMTZjLTEtLjQxLTItMS41Mi0yLTIuODRzMS0yLjQzIDItMi44NHpNMTQuODYgMTFIMjJjLS40OC00Ljc1LTQtOC41My05LTl2Ny4xNmMxIC4zIDEuNTIuOTggMS44NiAxLjg0ek0xMyAxNC44NFYyMmM1LS40NyA4LjUyLTQuMjUgOS05aC03LjE0Yy0uMzQuODYtLjg2IDEuNTQtMS44NiAxLjg0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImRyYWZ0cyI+PHBhdGggZD0iTTIxLjk5IDhjMC0uNzItLjM3LTEuMzUtLjk0LTEuN0wxMiAxIDIuOTUgNi4zQzIuMzggNi42NSAyIDcuMjggMiA4djEwYzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJsLS4wMS0xMHpNMTIgMTNMMy43NCA3Ljg0IDEyIDNsOC4yNiA0Ljg0TDEyIDEzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImVqZWN0Ij48cGF0aCBkPSJNNSAxN2gxNHYySDV6bTctMTJMNS4zMyAxNWgxMy4zNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJlcnJvciI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTEgMTVoLTJ2LTJoMnYyem0wLTRoLTJWN2gydjZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZXJyb3Itb3V0bGluZSI+PHBhdGggZD0iTTExIDE1aDJ2MmgtMnptMC04aDJ2NmgtMnptLjk5LTVDNi40NyAyIDIgNi40OCAyIDEyczQuNDcgMTAgOS45OSAxMEMxNy41MiAyMiAyMiAxNy41MiAyMiAxMlMxNy41MiAyIDExLjk5IDJ6TTEyIDIwYy00LjQyIDAtOC0zLjU4LTgtOHMzLjU4LTggOC04IDggMy41OCA4IDgtMy41OCA4LTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJldXJvLXN5bWJvbCI+PHBhdGggZD0iTTE1IDE4LjVjLTIuNTEgMC00LjY4LTEuNDItNS43Ni0zLjVIMTV2LTJIOC41OGMtLjA1LS4zMy0uMDgtLjY2LS4wOC0xcy4wMy0uNjcuMDgtMUgxNVY5SDkuMjRDMTAuMzIgNi45MiAxMi41IDUuNSAxNSA1LjVjMS42MSAwIDMuMDkuNTkgNC4yMyAxLjU3TDIxIDUuM0MxOS40MSAzLjg3IDE3LjMgMyAxNSAzYy0zLjkyIDAtNy4yNCAyLjUxLTguNDggNkgzdjJoMy4wNmMtLjA0LjMzLS4wNi42Ni0uMDYgMSAwIC4zNC4wMi42Ny4wNiAxSDN2MmgzLjUyYzEuMjQgMy40OSA0LjU2IDYgOC40OCA2IDIuMzEgMCA0LjQxLS44NyA2LTIuM2wtMS43OC0xLjc3Yy0xLjEzLjk4LTIuNiAxLjU3LTQuMjIgMS41N3oiPjwvcGF0aD48L2c+CjxnIGlkPSJldmVudCI+PHBhdGggZD0iTTE3IDEyaC01djVoNXYtNXpNMTYgMXYySDhWMUg2djJINWMtMS4xMSAwLTEuOTkuOS0xLjk5IDJMMyAxOWMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yaC0xVjFoLTJ6bTMgMThINVY4aDE0djExeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImV2ZW50LXNlYXQiPjxwYXRoIGQ9Ik00IDE4djNoM3YtM2gxMHYzaDN2LTZINHptMTUtOGgzdjNoLTN6TTIgMTBoM3YzSDJ6bTE1IDNIN1Y1YzAtMS4xLjktMiAyLTJoNmMxLjEgMCAyIC45IDIgMnY4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImV4aXQtdG8tYXBwIj48cGF0aCBkPSJNMTAuMDkgMTUuNTlMMTEuNSAxN2w1LTUtNS01LTEuNDEgMS40MUwxMi42NyAxMUgzdjJoOS42N2wtMi41OCAyLjU5ek0xOSAzSDVjLTEuMTEgMC0yIC45LTIgMnY0aDJWNWgxNHYxNEg1di00SDN2NGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImV4cGFuZC1sZXNzIj48cGF0aCBkPSJNMTIgOGwtNiA2IDEuNDEgMS40MUwxMiAxMC44M2w0LjU5IDQuNThMMTggMTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZXhwYW5kLW1vcmUiPjxwYXRoIGQ9Ik0xNi41OSA4LjU5TDEyIDEzLjE3IDcuNDEgOC41OSA2IDEwbDYgNiA2LTZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZXhwbG9yZSI+PHBhdGggZD0iTTEyIDEwLjljLS42MSAwLTEuMS40OS0xLjEgMS4xcy40OSAxLjEgMS4xIDEuMWMuNjEgMCAxLjEtLjQ5IDEuMS0xLjFzLS40OS0xLjEtMS4xLTEuMXpNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMi4xOSAxMi4xOUw2IDE4bDMuODEtOC4xOUwxOCA2bC0zLjgxIDguMTl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZXh0ZW5zaW9uIj48cGF0aCBkPSJNMjAuNSAxMUgxOVY3YzAtMS4xLS45LTItMi0yaC00VjMuNUMxMyAyLjEyIDExLjg4IDEgMTAuNSAxUzggMi4xMiA4IDMuNVY1SDRjLTEuMSAwLTEuOTkuOS0xLjk5IDJ2My44SDMuNWMxLjQ5IDAgMi43IDEuMjEgMi43IDIuN3MtMS4yMSAyLjctMi43IDIuN0gyVjIwYzAgMS4xLjkgMiAyIDJoMy44di0xLjVjMC0xLjQ5IDEuMjEtMi43IDIuNy0yLjcgMS40OSAwIDIuNyAxLjIxIDIuNyAyLjdWMjJIMTdjMS4xIDAgMi0uOSAyLTJ2LTRoMS41YzEuMzggMCAyLjUtMS4xMiAyLjUtMi41UzIxLjg4IDExIDIwLjUgMTF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmFjZSI+PHBhdGggZD0iTTkgMTEuNzVjLS42OSAwLTEuMjUuNTYtMS4yNSAxLjI1cy41NiAxLjI1IDEuMjUgMS4yNSAxLjI1LS41NiAxLjI1LTEuMjUtLjU2LTEuMjUtMS4yNS0xLjI1em02IDBjLS42OSAwLTEuMjUuNTYtMS4yNSAxLjI1cy41NiAxLjI1IDEuMjUgMS4yNSAxLjI1LS41NiAxLjI1LTEuMjUtLjU2LTEuMjUtMS4yNS0xLjI1ek0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOCAwLS4yOS4wMi0uNTguMDUtLjg2IDIuMzYtMS4wNSA0LjIzLTIuOTggNS4yMS01LjM3QzExLjA3IDguMzMgMTQuMDUgMTAgMTcuNDIgMTBjLjc4IDAgMS41My0uMDkgMi4yNS0uMjYuMjEuNzEuMzMgMS40Ny4zMyAyLjI2IDAgNC40MS0zLjU5IDgtOCA4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZhdm9yaXRlIj48cGF0aCBkPSJNMTIgMjEuMzVsLTEuNDUtMS4zMkM1LjQgMTUuMzYgMiAxMi4yOCAyIDguNSAyIDUuNDIgNC40MiAzIDcuNSAzYzEuNzQgMCAzLjQxLjgxIDQuNSAyLjA5QzEzLjA5IDMuODEgMTQuNzYgMyAxNi41IDMgMTkuNTggMyAyMiA1LjQyIDIyIDguNWMwIDMuNzgtMy40IDYuODYtOC41NSAxMS41NEwxMiAyMS4zNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJmYXZvcml0ZS1ib3JkZXIiPjxwYXRoIGQ9Ik0xNi41IDNjLTEuNzQgMC0zLjQxLjgxLTQuNSAyLjA5QzEwLjkxIDMuODEgOS4yNCAzIDcuNSAzIDQuNDIgMyAyIDUuNDIgMiA4LjVjMCAzLjc4IDMuNCA2Ljg2IDguNTUgMTEuNTRMMTIgMjEuMzVsMS40NS0xLjMyQzE4LjYgMTUuMzYgMjIgMTIuMjggMjIgOC41IDIyIDUuNDIgMTkuNTggMyAxNi41IDN6bS00LjQgMTUuNTVsLS4xLjEtLjEtLjFDNy4xNCAxNC4yNCA0IDExLjM5IDQgOC41IDQgNi41IDUuNSA1IDcuNSA1YzEuNTQgMCAzLjA0Ljk5IDMuNTcgMi4zNmgxLjg3QzEzLjQ2IDUuOTkgMTQuOTYgNSAxNi41IDVjMiAwIDMuNSAxLjUgMy41IDMuNSAwIDIuODktMy4xNCA1Ljc0LTcuOSAxMC4wNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJmZWVkYmFjayI+PHBhdGggZD0iTTIwIDJINGMtMS4xIDAtMS45OS45LTEuOTkgMkwyIDIybDQtNGgxNGMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yem0tNyAxMmgtMnYtMmgydjJ6bTAtNGgtMlY2aDJ2NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJmaWxlLWRvd25sb2FkIj48cGF0aCBkPSJNMTkgOWgtNFYzSDl2Nkg1bDcgNyA3LTd6TTUgMTh2MmgxNHYtMkg1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbGUtdXBsb2FkIj48cGF0aCBkPSJNOSAxNmg2di02aDRsLTctNy03IDdoNHptLTQgMmgxNHYySDV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLWxpc3QiPjxwYXRoIGQ9Ik0xMCAxOGg0di0yaC00djJ6TTMgNnYyaDE4VjZIM3ptMyA3aDEydi0ySDZ2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJmaW5kLWluLXBhZ2UiPjxwYXRoIGQ9Ik0yMCAxOS41OVY4bC02LTZINmMtMS4xIDAtMS45OS45LTEuOTkgMkw0IDIwYzAgMS4xLjg5IDIgMS45OSAySDE4Yy40NSAwIC44NS0uMTUgMS4xOS0uNGwtNC40My00LjQzYy0uOC41Mi0xLjc0LjgzLTIuNzYuODMtMi43NiAwLTUtMi4yNC01LTVzMi4yNC01IDUtNSA1IDIuMjQgNSA1YzAgMS4wMi0uMzEgMS45Ni0uODMgMi43NUwyMCAxOS41OXpNOSAxM2MwIDEuNjYgMS4zNCAzIDMgM3MzLTEuMzQgMy0zLTEuMzQtMy0zLTMtMyAxLjM0LTMgM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJmaW5kLXJlcGxhY2UiPjxwYXRoIGQ9Ik0xMSA2YzEuMzggMCAyLjYzLjU2IDMuNTQgMS40NkwxMiAxMGg2VjRsLTIuMDUgMi4wNUMxNC42OCA0Ljc4IDEyLjkzIDQgMTEgNGMtMy41MyAwLTYuNDMgMi42MS02LjkyIDZINi4xYy40Ni0yLjI4IDIuNDgtNCA0LjktNHptNS42NCA5LjE0Yy42Ni0uOSAxLjEyLTEuOTcgMS4yOC0zLjE0SDE1LjljLS40NiAyLjI4LTIuNDggNC00LjkgNC0xLjM4IDAtMi42My0uNTYtMy41NC0xLjQ2TDEwIDEySDR2NmwyLjA1LTIuMDVDNy4zMiAxNy4yMiA5LjA3IDE4IDExIDE4YzEuNTUgMCAyLjk4LS41MSA0LjE0LTEuMzZMMjAgMjEuNDkgMjEuNDkgMjBsLTQuODUtNC44NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJmaW5nZXJwcmludCI+PHBhdGggZD0iTTE3LjgxIDQuNDdjLS4wOCAwLS4xNi0uMDItLjIzLS4wNkMxNS42NiAzLjQyIDE0IDMgMTIuMDEgM2MtMS45OCAwLTMuODYuNDctNS41NyAxLjQxLS4yNC4xMy0uNTQuMDQtLjY4LS4yLS4xMy0uMjQtLjA0LS41NS4yLS42OEM3LjgyIDIuNTIgOS44NiAyIDEyLjAxIDJjMi4xMyAwIDMuOTkuNDcgNi4wMyAxLjUyLjI1LjEzLjM0LjQzLjIxLjY3LS4wOS4xOC0uMjYuMjgtLjQ0LjI4ek0zLjUgOS43MmMtLjEgMC0uMi0uMDMtLjI5LS4wOS0uMjMtLjE2LS4yOC0uNDctLjEyLS43Ljk5LTEuNCAyLjI1LTIuNSAzLjc1LTMuMjdDOS45OCA0LjA0IDE0IDQuMDMgMTcuMTUgNS42NWMxLjUuNzcgMi43NiAxLjg2IDMuNzUgMy4yNS4xNi4yMi4xMS41NC0uMTIuNy0uMjMuMTYtLjU0LjExLS43LS4xMi0uOS0xLjI2LTIuMDQtMi4yNS0zLjM5LTIuOTQtMi44Ny0xLjQ3LTYuNTQtMS40Ny05LjQuMDEtMS4zNi43LTIuNSAxLjctMy40IDIuOTYtLjA4LjE0LS4yMy4yMS0uMzkuMjF6bTYuMjUgMTIuMDdjLS4xMyAwLS4yNi0uMDUtLjM1LS4xNS0uODctLjg3LTEuMzQtMS40My0yLjAxLTIuNjQtLjY5LTEuMjMtMS4wNS0yLjczLTEuMDUtNC4zNCAwLTIuOTcgMi41NC01LjM5IDUuNjYtNS4zOXM1LjY2IDIuNDIgNS42NiA1LjM5YzAgLjI4LS4yMi41LS41LjVzLS41LS4yMi0uNS0uNWMwLTIuNDItMi4wOS00LjM5LTQuNjYtNC4zOS0yLjU3IDAtNC42NiAxLjk3LTQuNjYgNC4zOSAwIDEuNDQuMzIgMi43Ny45MyAzLjg1LjY0IDEuMTUgMS4wOCAxLjY0IDEuODUgMi40Mi4xOS4yLjE5LjUxIDAgLjcxLS4xMS4xLS4yNC4xNS0uMzcuMTV6bTcuMTctMS44NWMtMS4xOSAwLTIuMjQtLjMtMy4xLS44OS0xLjQ5LTEuMDEtMi4zOC0yLjY1LTIuMzgtNC4zOSAwLS4yOC4yMi0uNS41LS41cy41LjIyLjUuNWMwIDEuNDEuNzIgMi43NCAxLjk0IDMuNTYuNzEuNDggMS41NC43MSAyLjU0LjcxLjI0IDAgLjY0LS4wMyAxLjA0LS4xLjI3LS4wNS41My4xMy41OC40MS4wNS4yNy0uMTMuNTMtLjQxLjU4LS41Ny4xMS0xLjA3LjEyLTEuMjEuMTJ6TTE0LjkxIDIyYy0uMDQgMC0uMDktLjAxLS4xMy0uMDItMS41OS0uNDQtMi42My0xLjAzLTMuNzItMi4xLTEuNC0xLjM5LTIuMTctMy4yNC0yLjE3LTUuMjIgMC0xLjYyIDEuMzgtMi45NCAzLjA4LTIuOTQgMS43IDAgMy4wOCAxLjMyIDMuMDggMi45NCAwIDEuMDcuOTMgMS45NCAyLjA4IDEuOTRzMi4wOC0uODcgMi4wOC0xLjk0YzAtMy43Ny0zLjI1LTYuODMtNy4yNS02LjgzLTIuODQgMC01LjQ0IDEuNTgtNi42MSA0LjAzLS4zOS44MS0uNTkgMS43Ni0uNTkgMi44IDAgLjc4LjA3IDIuMDEuNjcgMy42MS4xLjI2LS4wMy41NS0uMjkuNjQtLjI2LjEtLjU1LS4wNC0uNjQtLjI5LS40OS0xLjMxLS43My0yLjYxLS43My0zLjk2IDAtMS4yLjIzLTIuMjkuNjgtMy4yNCAxLjMzLTIuNzkgNC4yOC00LjYgNy41MS00LjYgNC41NSAwIDguMjUgMy41MSA4LjI1IDcuODMgMCAxLjYyLTEuMzggMi45NC0zLjA4IDIuOTRzLTMuMDgtMS4zMi0zLjA4LTIuOTRjMC0xLjA3LS45My0xLjk0LTIuMDgtMS45NHMtMi4wOC44Ny0yLjA4IDEuOTRjMCAxLjcxLjY2IDMuMzEgMS44NyA0LjUxLjk1Ljk0IDEuODYgMS40NiAzLjI3IDEuODUuMjcuMDcuNDIuMzUuMzUuNjEtLjA1LjIzLS4yNi4zOC0uNDcuMzh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlyc3QtcGFnZSI+PHBhdGggZD0iTTE4LjQxIDE2LjU5TDEzLjgyIDEybDQuNTktNC41OUwxNyA2bC02IDYgNiA2ek02IDZoMnYxMkg2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZsYWciPjxwYXRoIGQ9Ik0xNC40IDZMMTQgNEg1djE3aDJ2LTdoNS42bC40IDJoN1Y2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZsaWdodC1sYW5kIj48cGF0aCBkPSJNMi41IDE5aDE5djJoLTE5em03LjE4LTUuNzNsNC4zNSAxLjE2IDUuMzEgMS40MmMuOC4yMSAxLjYyLS4yNiAxLjg0LTEuMDYuMjEtLjgtLjI2LTEuNjItMS4wNi0xLjg0bC01LjMxLTEuNDItMi43Ni05LjAyTDEwLjEyIDJ2OC4yOEw1LjE1IDguOTVsLS45My0yLjMyLTEuNDUtLjM5djUuMTdsMS42LjQzIDUuMzEgMS40M3oiPjwvcGF0aD48L2c+CjxnIGlkPSJmbGlnaHQtdGFrZW9mZiI+PHBhdGggZD0iTTIuNSAxOWgxOXYyaC0xOXptMTkuNTctOS4zNmMtLjIxLS44LTEuMDQtMS4yOC0xLjg0LTEuMDZMMTQuOTIgMTBsLTYuOS02LjQzLTEuOTMuNTEgNC4xNCA3LjE3LTQuOTcgMS4zMy0xLjk3LTEuNTQtMS40NS4zOSAxLjgyIDMuMTYuNzcgMS4zMyAxLjYtLjQzIDUuMzEtMS40MiA0LjM1LTEuMTZMMjEgMTEuNDljLjgxLS4yMyAxLjI4LTEuMDUgMS4wNy0xLjg1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZsaXAtdG8tYmFjayI+PHBhdGggZD0iTTkgN0g3djJoMlY3em0wIDRIN3YyaDJ2LTJ6bTAtOGMtMS4xMSAwLTIgLjktMiAyaDJWM3ptNCAxMmgtMnYyaDJ2LTJ6bTYtMTJ2MmgyYzAtMS4xLS45LTItMi0yem0tNiAwaC0ydjJoMlYzek05IDE3di0ySDdjMCAxLjEuODkgMiAyIDJ6bTEwLTRoMnYtMmgtMnYyem0wLTRoMlY3aC0ydjJ6bTAgOGMxLjEgMCAyLS45IDItMmgtMnYyek01IDdIM3YxMmMwIDEuMS44OSAyIDIgMmgxMnYtMkg1Vjd6bTEwLTJoMlYzaC0ydjJ6bTAgMTJoMnYtMmgtMnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZsaXAtdG8tZnJvbnQiPjxwYXRoIGQ9Ik0zIDEzaDJ2LTJIM3Yyem0wIDRoMnYtMkgzdjJ6bTIgNHYtMkgzYzAgMS4xLjg5IDIgMiAyek0zIDloMlY3SDN2MnptMTIgMTJoMnYtMmgtMnYyem00LTE4SDljLTEuMTEgMC0yIC45LTIgMnYxMGMwIDEuMS44OSAyIDIgMmgxMGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDEySDlWNWgxMHYxMHptLTggNmgydi0yaC0ydjJ6bS00IDBoMnYtMkg3djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZm9sZGVyIj48cGF0aCBkPSJNMTAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yaC04bC0yLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZm9sZGVyLW9wZW4iPjxwYXRoIGQ9Ik0yMCA2aC04bC0yLTJINGMtMS4xIDAtMS45OS45LTEuOTkgMkwyIDE4YzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWOGMwLTEuMS0uOS0yLTItMnptMCAxMkg0VjhoMTZ2MTB6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZm9sZGVyLXNoYXJlZCI+PHBhdGggZD0iTTIwIDZoLThsLTItMkg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yem0tNSAzYzEuMSAwIDIgLjkgMiAycy0uOSAyLTIgMi0yLS45LTItMiAuOS0yIDItMnptNCA4aC04di0xYzAtMS4zMyAyLjY3LTIgNC0yczQgLjY3IDQgMnYxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZvbnQtZG93bmxvYWQiPjxwYXRoIGQ9Ik05LjkzIDEzLjVoNC4xNEwxMiA3Ljk4ek0yMCAySDRjLTEuMSAwLTIgLjktMiAydjE2YzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnptLTQuMDUgMTYuNWwtMS4xNC0zSDkuMTdsLTEuMTIgM0g1Ljk2bDUuMTEtMTNoMS44Nmw1LjExIDEzaC0yLjA5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZvcndhcmQiPjxwYXRoIGQ9Ik0xMiA4VjRsOCA4LTggOHYtNEg0Vjh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZnVsbHNjcmVlbiI+PHBhdGggZD0iTTcgMTRINXY1aDV2LTJIN3YtM3ptLTItNGgyVjdoM1Y1SDV2NXptMTIgN2gtM3YyaDV2LTVoLTJ2M3pNMTQgNXYyaDN2M2gyVjVoLTV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZnVsbHNjcmVlbi1leGl0Ij48cGF0aCBkPSJNNSAxNmgzdjNoMnYtNUg1djJ6bTMtOEg1djJoNVY1SDh2M3ptNiAxMWgydi0zaDN2LTJoLTV2NXptMi0xMVY1aC0ydjVoNVY4aC0zeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImctdHJhbnNsYXRlIj48cGF0aCBkPSJNMjAgNWgtOS4xMkwxMCAySDRjLTEuMSAwLTIgLjktMiAydjEzYzAgMS4xLjkgMiAyIDJoN2wxIDNoOGMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yek03LjE3IDE0LjU5Yy0yLjI1IDAtNC4wOS0xLjgzLTQuMDktNC4wOXMxLjgzLTQuMDkgNC4wOS00LjA5YzEuMDQgMCAxLjk5LjM3IDIuNzQgMS4wN2wuMDcuMDYtMS4yMyAxLjE4LS4wNi0uMDVjLS4yOS0uMjctLjc4LS41OS0xLjUyLS41OS0xLjMxIDAtMi4zOCAxLjA5LTIuMzggMi40MnMxLjA3IDIuNDIgMi4zOCAyLjQyYzEuMzcgMCAxLjk2LS44NyAyLjEyLTEuNDZINy4wOFY5LjkxaDMuOTVsLjAxLjA3Yy4wNC4yMS4wNS40LjA1LjYxIDAgMi4zNS0xLjYxIDQtMy45MiA0em02LjAzLTEuNzFjLjMzLjYuNzQgMS4xOCAxLjE5IDEuN2wtLjU0LjUzLS42NS0yLjIzem0uNzctLjc2aC0uOTlsLS4zMS0xLjA0aDMuOTlzLS4zNCAxLjMxLTEuNTYgMi43NGMtLjUyLS42Mi0uODktMS4yMy0xLjEzLTEuN3pNMjEgMjBjMCAuNTUtLjQ1IDEtMSAxaC03bDItMi0uODEtMi43Ny45Mi0uOTJMMTcuNzkgMThsLjczLS43My0yLjcxLTIuNjhjLjktMS4wMyAxLjYtMi4yNSAxLjkyLTMuNTFIMTl2LTEuMDRoLTMuNjRWOWgtMS4wNHYxLjA0aC0xLjk2TDExLjE4IDZIMjBjLjU1IDAgMSAuNDUgMSAxdjEzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImdhdmVsIj48cGF0aCBkPSJNMSAyMWgxMnYySDF6TTUuMjQ1IDguMDdsMi44My0yLjgyNyAxNC4xNCAxNC4xNDItMi44MjggMi44Mjh6TTEyLjMxNyAxbDUuNjU3IDUuNjU2LTIuODMgMi44My01LjY1NC01LjY2ek0zLjgyNSA5LjQ4NWw1LjY1NyA1LjY1Ny0yLjgyOCAyLjgyOC01LjY1Ny01LjY1N3oiPjwvcGF0aD48L2c+CjxnIGlkPSJnZXN0dXJlIj48cGF0aCBkPSJNNC41OSA2Ljg5Yy43LS43MSAxLjQtMS4zNSAxLjcxLTEuMjIuNS4yIDAgMS4wMy0uMyAxLjUyLS4yNS40Mi0yLjg2IDMuODktMi44NiA2LjMxIDAgMS4yOC40OCAyLjM0IDEuMzQgMi45OC43NS41NiAxLjc0LjczIDIuNjQuNDYgMS4wNy0uMzEgMS45NS0xLjQgMy4wNi0yLjc3IDEuMjEtMS40OSAyLjgzLTMuNDQgNC4wOC0zLjQ0IDEuNjMgMCAxLjY1IDEuMDEgMS43NiAxLjc5LTMuNzguNjQtNS4zOCAzLjY3LTUuMzggNS4zNyAwIDEuNyAxLjQ0IDMuMDkgMy4yMSAzLjA5IDEuNjMgMCA0LjI5LTEuMzMgNC42OS02LjFIMjF2LTIuNWgtMi40N2MtLjE1LTEuNjUtMS4wOS00LjItNC4wMy00LjItMi4yNSAwLTQuMTggMS45MS00Ljk0IDIuODQtLjU4LjczLTIuMDYgMi40OC0yLjI5IDIuNzItLjI1LjMtLjY4Ljg0LTEuMTEuODQtLjQ1IDAtLjcyLS44My0uMzYtMS45Mi4zNS0xLjA5IDEuNC0yLjg2IDEuODUtMy41Mi43OC0xLjE0IDEuMy0xLjkyIDEuMy0zLjI4QzguOTUgMy42OSA3LjMxIDMgNi40NCAzIDUuMTIgMyAzLjk3IDQgMy43MiA0LjI1Yy0uMzYuMzYtLjY2LjY2LS44OC45M2wxLjc1IDEuNzF6bTkuMjkgMTEuNjZjLS4zMSAwLS43NC0uMjYtLjc0LS43MiAwLS42LjczLTIuMiAyLjg3LTIuNzYtLjMgMi42OS0xLjQzIDMuNDgtMi4xMyAzLjQ4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImdldC1hcHAiPjxwYXRoIGQ9Ik0xOSA5aC00VjNIOXY2SDVsNyA3IDctN3pNNSAxOHYyaDE0di0ySDV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZ2lmIj48cGF0aCBkPSJNMTEuNSA5SDEzdjZoLTEuNXpNOSA5SDZjLS42IDAtMSAuNS0xIDF2NGMwIC41LjQgMSAxIDFoM2MuNiAwIDEtLjUgMS0xdi0ySDguNXYxLjVoLTJ2LTNIMTBWMTBjMC0uNS0uNC0xLTEtMXptMTAgMS41VjloLTQuNXY2SDE2di0yaDJ2LTEuNWgtMnYtMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJncmFkZSI+PHBhdGggZD0iTTEyIDE3LjI3TDE4LjE4IDIxbC0xLjY0LTcuMDNMMjIgOS4yNGwtNy4xOS0uNjFMMTIgMiA5LjE5IDguNjMgMiA5LjI0bDUuNDYgNC43M0w1LjgyIDIxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imdyb3VwLXdvcmsiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyek04IDE3LjVjLTEuMzggMC0yLjUtMS4xMi0yLjUtMi41czEuMTItMi41IDIuNS0yLjUgMi41IDEuMTIgMi41IDIuNS0xLjEyIDIuNS0yLjUgMi41ek05LjUgOGMwLTEuMzggMS4xMi0yLjUgMi41LTIuNXMyLjUgMS4xMiAyLjUgMi41LTEuMTIgMi41LTIuNSAyLjVTOS41IDkuMzggOS41IDh6bTYuNSA5LjVjLTEuMzggMC0yLjUtMS4xMi0yLjUtMi41czEuMTItMi41IDIuNS0yLjUgMi41IDEuMTIgMi41IDIuNS0xLjEyIDIuNS0yLjUgMi41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImhlbHAiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0xIDE3aC0ydi0yaDJ2MnptMi4wNy03Ljc1bC0uOS45MkMxMy40NSAxMi45IDEzIDEzLjUgMTMgMTVoLTJ2LS41YzAtMS4xLjQ1LTIuMSAxLjE3LTIuODNsMS4yNC0xLjI2Yy4zNy0uMzYuNTktLjg2LjU5LTEuNDEgMC0xLjEtLjktMi0yLTJzLTIgLjktMiAySDhjMC0yLjIxIDEuNzktNCA0LTRzNCAxLjc5IDQgNGMwIC44OC0uMzYgMS42OC0uOTMgMi4yNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJoZWxwLW91dGxpbmUiPjxwYXRoIGQ9Ik0xMSAxOGgydi0yaC0ydjJ6bTEtMTZDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4em0wLTE0Yy0yLjIxIDAtNCAxLjc5LTQgNGgyYzAtMS4xLjktMiAyLTJzMiAuOSAyIDJjMCAyLTMgMS43NS0zIDVoMmMwLTIuMjUgMy0yLjUgMy01IDAtMi4yMS0xLjc5LTQtNC00eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImhpZ2hsaWdodC1vZmYiPjxwYXRoIGQ9Ik0xNC41OSA4TDEyIDEwLjU5IDkuNDEgOCA4IDkuNDEgMTAuNTkgMTIgOCAxNC41OSA5LjQxIDE2IDEyIDEzLjQxIDE0LjU5IDE2IDE2IDE0LjU5IDEzLjQxIDEyIDE2IDkuNDEgMTQuNTkgOHpNMTIgMkM2LjQ3IDIgMiA2LjQ3IDIgMTJzNC40NyAxMCAxMCAxMCAxMC00LjQ3IDEwLTEwUzE3LjUzIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaGlzdG9yeSI+PHBhdGggZD0iTTEzIDNjLTQuOTcgMC05IDQuMDMtOSA5SDFsMy44OSAzLjg5LjA3LjE0TDkgMTJINmMwLTMuODcgMy4xMy03IDctN3M3IDMuMTMgNyA3LTMuMTMgNy03IDdjLTEuOTMgMC0zLjY4LS43OS00Ljk0LTIuMDZsLTEuNDIgMS40MkM4LjI3IDE5Ljk5IDEwLjUxIDIxIDEzIDIxYzQuOTcgMCA5LTQuMDMgOS05cy00LjAzLTktOS05em0tMSA1djVsNC4yOCAyLjU0LjcyLTEuMjEtMy41LTIuMDhWOEgxMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJob21lIj48cGF0aCBkPSJNMTAgMjB2LTZoNHY2aDV2LThoM0wxMiAzIDIgMTJoM3Y4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImhvdXJnbGFzcy1lbXB0eSI+PHBhdGggZD0iTTYgMnY2aC4wMUw2IDguMDEgMTAgMTJsLTQgNCAuMDEuMDFINlYyMmgxMnYtNS45OWgtLjAxTDE4IDE2bC00LTQgNC0zLjk5LS4wMS0uMDFIMThWMkg2em0xMCAxNC41VjIwSDh2LTMuNWw0LTQgNCA0em0tNC01bC00LTRWNGg4djMuNWwtNCA0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImhvdXJnbGFzcy1mdWxsIj48cGF0aCBkPSJNNiAydjZoLjAxTDYgOC4wMSAxMCAxMmwtNCA0IC4wMS4wMUg2VjIyaDEydi01Ljk5aC0uMDFMMTggMTZsLTQtNCA0LTMuOTktLjAxLS4wMUgxOFYySDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaHR0cCI+PHBhdGggZD0iTTQuNSAxMWgtMlY5SDF2NmgxLjV2LTIuNWgyVjE1SDZWOUg0LjV2MnptMi41LS41aDEuNVYxNUgxMHYtNC41aDEuNVY5SDd2MS41em01LjUgMEgxNFYxNWgxLjV2LTQuNUgxN1Y5aC00LjV2MS41em05LTEuNUgxOHY2aDEuNXYtMmgyYy44IDAgMS41LS43IDEuNS0xLjV2LTFjMC0uOC0uNy0xLjUtMS41LTEuNXptMCAyLjVoLTJ2LTFoMnYxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imh0dHBzIj48cGF0aCBkPSJNMTggOGgtMVY2YzAtMi43Ni0yLjI0LTUtNS01UzcgMy4yNCA3IDZ2Mkg2Yy0xLjEgMC0yIC45LTIgMnYxMGMwIDEuMS45IDIgMiAyaDEyYzEuMSAwIDItLjkgMi0yVjEwYzAtMS4xLS45LTItMi0yem0tNiA5Yy0xLjEgMC0yLS45LTItMnMuOS0yIDItMiAyIC45IDIgMi0uOSAyLTIgMnptMy4xLTlIOC45VjZjMC0xLjcxIDEuMzktMy4xIDMuMS0zLjEgMS43MSAwIDMuMSAxLjM5IDMuMSAzLjF2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJpbXBvcnRhbnQtZGV2aWNlcyI+PHBhdGggZD0iTTIzIDExLjAxTDE4IDExYy0uNTUgMC0xIC40NS0xIDF2OWMwIC41NS40NSAxIDEgMWg1Yy41NSAwIDEtLjQ1IDEtMXYtOWMwLS41NS0uNDUtLjk5LTEtLjk5ek0yMyAyMGgtNXYtN2g1djd6TTIwIDJIMkMuODkgMiAwIDIuODkgMCA0djEyYzAgMS4xLjg5IDIgMiAyaDd2Mkg3djJoOHYtMmgtMnYtMmgydi0ySDJWNGgxOHY1aDJWNGMwLTEuMTEtLjktMi0yLTJ6bS04LjAzIDdMMTEgNmwtLjk3IDNIN2wyLjQ3IDEuNzYtLjk0IDIuOTEgMi40Ny0xLjggMi40NyAxLjgtLjk0LTIuOTFMMTUgOWgtMy4wM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJpbmJveCI+PHBhdGggZD0iTTE5IDNINC45OWMtMS4xMSAwLTEuOTguODktMS45OCAyTDMgMTljMCAxLjEuODggMiAxLjk5IDJIMTljMS4xIDAgMi0uOSAyLTJWNWMwLTEuMTEtLjktMi0yLTJ6bTAgMTJoLTRjMCAxLjY2LTEuMzUgMy0zIDNzLTMtMS4zNC0zLTNINC45OVY1SDE5djEweiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImluZGV0ZXJtaW5hdGUtY2hlY2stYm94Ij48cGF0aCBkPSJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bS0yIDEwSDd2LTJoMTB2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJpbmZvIj48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMSAxNWgtMnYtNmgydjZ6bTAtOGgtMlY3aDJ2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJpbmZvLW91dGxpbmUiPjxwYXRoIGQ9Ik0xMSAxN2gydi02aC0ydjZ6bTEtMTVDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4ek0xMSA5aDJWN2gtMnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImlucHV0Ij48cGF0aCBkPSJNMjEgMy4wMUgzYy0xLjEgMC0yIC45LTIgMlY5aDJWNC45OWgxOHYxNC4wM0gzVjE1SDF2NC4wMWMwIDEuMS45IDEuOTggMiAxLjk4aDE4YzEuMSAwIDItLjg4IDItMS45OHYtMTRjMC0xLjExLS45LTItMi0yek0xMSAxNmw0LTQtNC00djNIMXYyaDEwdjN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaW52ZXJ0LWNvbG9ycyI+PHBhdGggZD0iTTE3LjY2IDcuOTNMMTIgMi4yNyA2LjM0IDcuOTNjLTMuMTIgMy4xMi0zLjEyIDguMTkgMCAxMS4zMUM3LjkgMjAuOCA5Ljk1IDIxLjU4IDEyIDIxLjU4YzIuMDUgMCA0LjEtLjc4IDUuNjYtMi4zNCAzLjEyLTMuMTIgMy4xMi04LjE5IDAtMTEuMzF6TTEyIDE5LjU5Yy0xLjYgMC0zLjExLS42Mi00LjI0LTEuNzZDNi42MiAxNi42OSA2IDE1LjE5IDYgMTMuNTlzLjYyLTMuMTEgMS43Ni00LjI0TDEyIDUuMXYxNC40OXoiPjwvcGF0aD48L2c+CjxnIGlkPSJsYWJlbCI+PHBhdGggZD0iTTE3LjYzIDUuODRDMTcuMjcgNS4zMyAxNi42NyA1IDE2IDVMNSA1LjAxQzMuOSA1LjAxIDMgNS45IDMgN3YxMGMwIDEuMS45IDEuOTkgMiAxLjk5TDE2IDE5Yy42NyAwIDEuMjctLjMzIDEuNjMtLjg0TDIyIDEybC00LjM3LTYuMTZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibGFiZWwtb3V0bGluZSI+PHBhdGggZD0iTTE3LjYzIDUuODRDMTcuMjcgNS4zMyAxNi42NyA1IDE2IDVMNSA1LjAxQzMuOSA1LjAxIDMgNS45IDMgN3YxMGMwIDEuMS45IDEuOTkgMiAxLjk5TDE2IDE5Yy42NyAwIDEuMjctLjMzIDEuNjMtLjg0TDIyIDEybC00LjM3LTYuMTZ6TTE2IDE3SDVWN2gxMWwzLjU1IDVMMTYgMTd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibGFuZ3VhZ2UiPjxwYXRoIGQ9Ik0xMS45OSAyQzYuNDcgMiAyIDYuNDggMiAxMnM0LjQ3IDEwIDkuOTkgMTBDMTcuNTIgMjIgMjIgMTcuNTIgMjIgMTJTMTcuNTIgMiAxMS45OSAyem02LjkzIDZoLTIuOTVjLS4zMi0xLjI1LS43OC0yLjQ1LTEuMzgtMy41NiAxLjg0LjYzIDMuMzcgMS45MSA0LjMzIDMuNTZ6TTEyIDQuMDRjLjgzIDEuMiAxLjQ4IDIuNTMgMS45MSAzLjk2aC0zLjgyYy40My0xLjQzIDEuMDgtMi43NiAxLjkxLTMuOTZ6TTQuMjYgMTRDNC4xIDEzLjM2IDQgMTIuNjkgNCAxMnMuMS0xLjM2LjI2LTJoMy4zOGMtLjA4LjY2LS4xNCAxLjMyLS4xNCAyIDAgLjY4LjA2IDEuMzQuMTQgMkg0LjI2em0uODIgMmgyLjk1Yy4zMiAxLjI1Ljc4IDIuNDUgMS4zOCAzLjU2LTEuODQtLjYzLTMuMzctMS45LTQuMzMtMy41NnptMi45NS04SDUuMDhjLjk2LTEuNjYgMi40OS0yLjkzIDQuMzMtMy41NkM4LjgxIDUuNTUgOC4zNSA2Ljc1IDguMDMgOHpNMTIgMTkuOTZjLS44My0xLjItMS40OC0yLjUzLTEuOTEtMy45NmgzLjgyYy0uNDMgMS40My0xLjA4IDIuNzYtMS45MSAzLjk2ek0xNC4zNCAxNEg5LjY2Yy0uMDktLjY2LS4xNi0xLjMyLS4xNi0yIDAtLjY4LjA3LTEuMzUuMTYtMmg0LjY4Yy4wOS42NS4xNiAxLjMyLjE2IDIgMCAuNjgtLjA3IDEuMzQtLjE2IDJ6bS4yNSA1LjU2Yy42LTEuMTEgMS4wNi0yLjMxIDEuMzgtMy41NmgyLjk1Yy0uOTYgMS42NS0yLjQ5IDIuOTMtNC4zMyAzLjU2ek0xNi4zNiAxNGMuMDgtLjY2LjE0LTEuMzIuMTQtMiAwLS42OC0uMDYtMS4zNC0uMTQtMmgzLjM4Yy4xNi42NC4yNiAxLjMxLjI2IDJzLS4xIDEuMzYtLjI2IDJoLTMuMzh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibGFzdC1wYWdlIj48cGF0aCBkPSJNNS41OSA3LjQxTDEwLjE4IDEybC00LjU5IDQuNTlMNyAxOGw2LTYtNi02ek0xNiA2aDJ2MTJoLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibGF1bmNoIj48cGF0aCBkPSJNMTkgMTlINVY1aDdWM0g1Yy0xLjExIDAtMiAuOS0yIDJ2MTRjMCAxLjEuODkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJ2LTdoLTJ2N3pNMTQgM3YyaDMuNTlsLTkuODMgOS44MyAxLjQxIDEuNDFMMTkgNi40MVYxMGgyVjNoLTd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibGlnaHRidWxiLW91dGxpbmUiPjxwYXRoIGQ9Ik05IDIxYzAgLjU1LjQ1IDEgMSAxaDRjLjU1IDAgMS0uNDUgMS0xdi0xSDl2MXptMy0xOUM4LjE0IDIgNSA1LjE0IDUgOWMwIDIuMzggMS4xOSA0LjQ3IDMgNS43NFYxN2MwIC41NS40NSAxIDEgMWg2Yy41NSAwIDEtLjQ1IDEtMXYtMi4yNmMxLjgxLTEuMjcgMy0zLjM2IDMtNS43NCAwLTMuODYtMy4xNC03LTctN3ptMi44NSAxMS4xbC0uODUuNlYxNmgtNHYtMi4zbC0uODUtLjZDNy44IDEyLjE2IDcgMTAuNjMgNyA5YzAtMi43NiAyLjI0LTUgNS01czUgMi4yNCA1IDVjMCAxLjYzLS44IDMuMTYtMi4xNSA0LjF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibGluZS1zdHlsZSI+PHBhdGggZD0iTTMgMTZoNXYtMkgzdjJ6bTYuNSAwaDV2LTJoLTV2MnptNi41IDBoNXYtMmgtNXYyek0zIDIwaDJ2LTJIM3Yyem00IDBoMnYtMkg3djJ6bTQgMGgydi0yaC0ydjJ6bTQgMGgydi0yaC0ydjJ6bTQgMGgydi0yaC0ydjJ6TTMgMTJoOHYtMkgzdjJ6bTEwIDBoOHYtMmgtOHYyek0zIDR2NGgxOFY0SDN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibGluZS13ZWlnaHQiPjxwYXRoIGQ9Ik0zIDE3aDE4di0ySDN2MnptMCAzaDE4di0xSDN2MXptMC03aDE4di0zSDN2M3ptMC05djRoMThWNEgzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImxpbmsiPjxwYXRoIGQ9Ik0zLjkgMTJjMC0xLjcxIDEuMzktMy4xIDMuMS0zLjFoNFY3SDdjLTIuNzYgMC01IDIuMjQtNSA1czIuMjQgNSA1IDVoNHYtMS45SDdjLTEuNzEgMC0zLjEtMS4zOS0zLjEtMy4xek04IDEzaDh2LTJIOHYyem05LTZoLTR2MS45aDRjMS43MSAwIDMuMSAxLjM5IDMuMSAzLjFzLTEuMzkgMy4xLTMuMSAzLjFoLTRWMTdoNGMyLjc2IDAgNS0yLjI0IDUtNXMtMi4yNC01LTUtNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJsaXN0Ij48cGF0aCBkPSJNMyAxM2gydi0ySDN2MnptMCA0aDJ2LTJIM3Yyem0wLThoMlY3SDN2MnptNCA0aDE0di0ySDd2MnptMCA0aDE0di0ySDd2MnpNNyA3djJoMTRWN0g3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImxvY2siPjxwYXRoIGQ9Ik0xOCA4aC0xVjZjMC0yLjc2LTIuMjQtNS01LTVTNyAzLjI0IDcgNnYySDZjLTEuMSAwLTIgLjktMiAydjEwYzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWMTBjMC0xLjEtLjktMi0yLTJ6bS02IDljLTEuMSAwLTItLjktMi0ycy45LTIgMi0yIDIgLjkgMiAyLS45IDItMiAyem0zLjEtOUg4LjlWNmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMSAxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImxvY2stb3BlbiI+PHBhdGggZD0iTTEyIDE3YzEuMSAwIDItLjkgMi0ycy0uOS0yLTItMi0yIC45LTIgMiAuOSAyIDIgMnptNi05aC0xVjZjMC0yLjc2LTIuMjQtNS01LTVTNyAzLjI0IDcgNmgxLjljMC0xLjcxIDEuMzktMy4xIDMuMS0zLjEgMS43MSAwIDMuMSAxLjM5IDMuMSAzLjF2Mkg2Yy0xLjEgMC0yIC45LTIgMnYxMGMwIDEuMS45IDIgMiAyaDEyYzEuMSAwIDItLjkgMi0yVjEwYzAtMS4xLS45LTItMi0yem0wIDEySDZWMTBoMTJ2MTB6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibG9jay1vdXRsaW5lIj48cGF0aCBkPSJNMTIgMTdjMS4xIDAgMi0uOSAyLTJzLS45LTItMi0yLTIgLjktMiAyIC45IDIgMiAyem02LTloLTFWNmMwLTIuNzYtMi4yNC01LTUtNVM3IDMuMjQgNyA2djJINmMtMS4xIDAtMiAuOS0yIDJ2MTBjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMlYxMGMwLTEuMS0uOS0yLTItMnpNOC45IDZjMC0xLjcxIDEuMzktMy4xIDMuMS0zLjFzMy4xIDEuMzkgMy4xIDMuMXYySDguOVY2ek0xOCAyMEg2VjEwaDEydjEweiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imxvdy1wcmlvcml0eSI+PHBhdGggZD0iTTE0IDVoOHYyaC04em0wIDUuNWg4djJoLTh6bTAgNS41aDh2MmgtOHpNMiAxMS41QzIgMTUuMDggNC45MiAxOCA4LjUgMThIOXYybDMtMy0zLTN2MmgtLjVDNi4wMiAxNiA0IDEzLjk4IDQgMTEuNVM2LjAyIDcgOC41IDdIMTJWNUg4LjVDNC45MiA1IDIgNy45MiAyIDExLjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibG95YWx0eSI+PHBhdGggZD0iTTIxLjQxIDExLjU4bC05LTlDMTIuMDUgMi4yMiAxMS41NSAyIDExIDJINGMtMS4xIDAtMiAuOS0yIDJ2N2MwIC41NS4yMiAxLjA1LjU5IDEuNDJsOSA5Yy4zNi4zNi44Ni41OCAxLjQxLjU4LjU1IDAgMS4wNS0uMjIgMS40MS0uNTlsNy03Yy4zNy0uMzYuNTktLjg2LjU5LTEuNDEgMC0uNTUtLjIzLTEuMDYtLjU5LTEuNDJ6TTUuNSA3QzQuNjcgNyA0IDYuMzMgNCA1LjVTNC42NyA0IDUuNSA0IDcgNC42NyA3IDUuNSA2LjMzIDcgNS41IDd6bTExLjc3IDguMjdMMTMgMTkuNTRsLTQuMjctNC4yN0M4LjI4IDE0LjgxIDggMTQuMTkgOCAxMy41YzAtMS4zOCAxLjEyLTIuNSAyLjUtMi41LjY5IDAgMS4zMi4yOCAxLjc3Ljc0bC43My43Mi43My0uNzNjLjQ1LS40NSAxLjA4LS43MyAxLjc3LS43MyAxLjM4IDAgMi41IDEuMTIgMi41IDIuNSAwIC42OS0uMjggMS4zMi0uNzMgMS43N3oiPjwvcGF0aD48L2c+CjxnIGlkPSJtYWlsIj48cGF0aCBkPSJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0wIDRsLTggNS04LTVWNmw4IDUgOC01djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibWFya3VucmVhZCI+PHBhdGggZD0iTTIwIDRINGMtMS4xIDAtMS45OS45LTEuOTkgMkwyIDE4YzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNmMwLTEuMS0uOS0yLTItMnptMCA0bC04IDUtOC01VjZsOCA1IDgtNXYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im1hcmt1bnJlYWQtbWFpbGJveCI+PHBhdGggZD0iTTIwIDZIMTB2Nkg4VjRoNlYwSDZ2Nkg0Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjhjMC0xLjEtLjktMi0yLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibWVudSI+PHBhdGggZD0iTTMgMThoMTh2LTJIM3Yyem0wLTVoMTh2LTJIM3Yyem0wLTd2MmgxOFY2SDN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibW9yZS1ob3JpeiI+PHBhdGggZD0iTTYgMTBjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem0xMiAwYy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnptLTYgMGMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibW9yZS12ZXJ0Ij48cGF0aCBkPSJNMTIgOGMxLjEgMCAyLS45IDItMnMtLjktMi0yLTItMiAuOS0yIDIgLjkgMiAyIDJ6bTAgMmMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bTAgNmMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibW90b3JjeWNsZSI+PHBhdGggZD0iTTE5LjQ0IDkuMDNMMTUuNDEgNUgxMXYyaDMuNTlsMiAySDVjLTIuOCAwLTUgMi4yLTUgNXMyLjIgNSA1IDVjMi40NiAwIDQuNDUtMS42OSA0LjktNGgxLjY1bDIuNzctMi43N2MtLjIxLjU0LS4zMiAxLjE0LS4zMiAxLjc3IDAgMi44IDIuMiA1IDUgNXM1LTIuMiA1LTVjMC0yLjY1LTEuOTctNC43Ny00LjU2LTQuOTd6TTcuODIgMTVDNy40IDE2LjE1IDYuMjggMTcgNSAxN2MtMS42MyAwLTMtMS4zNy0zLTNzMS4zNy0zIDMtM2MxLjI4IDAgMi40Ljg1IDIuODIgMkg1djJoMi44MnpNMTkgMTdjLTEuNjYgMC0zLTEuMzQtMy0zczEuMzQtMyAzLTMgMyAxLjM0IDMgMy0xLjM0IDMtMyAzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im1vdmUtdG8taW5ib3giPjxwYXRoIGQ9Ik0xOSAzSDQuOTljLTEuMTEgMC0xLjk4LjktMS45OCAyTDMgMTljMCAxLjEuODggMiAxLjk5IDJIMTljMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxMmgtNGMwIDEuNjYtMS4zNSAzLTMgM3MtMy0xLjM0LTMtM0g0Ljk5VjVIMTl2MTB6bS0zLTVoLTJWN2gtNHYzSDhsNCA0IDQtNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJuZXh0LXdlZWsiPjxwYXRoIGQ9Ik0yMCA3aC00VjVjMC0uNTUtLjIyLTEuMDUtLjU5LTEuNDFDMTUuMDUgMy4yMiAxNC41NSAzIDE0IDNoLTRjLTEuMSAwLTIgLjktMiAydjJINGMtMS4xIDAtMiAuOS0yIDJ2MTFjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY5YzAtMS4xLS45LTItMi0yek0xMCA1aDR2MmgtNFY1em0xIDEzLjVsLTEtMSAzLTMtMy0zIDEtMSA0IDQtNCA0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im5vdGUtYWRkIj48cGF0aCBkPSJNMTQgMkg2Yy0xLjEgMC0xLjk5LjktMS45OSAyTDQgMjBjMCAxLjEuODkgMiAxLjk5IDJIMThjMS4xIDAgMi0uOSAyLTJWOGwtNi02em0yIDE0aC0zdjNoLTJ2LTNIOHYtMmgzdi0zaDJ2M2gzdjJ6bS0zLTdWMy41TDE4LjUgOUgxM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJvZmZsaW5lLXBpbiI+PHBhdGggZD0iTTEyIDJDNi41IDIgMiA2LjUgMiAxMnM0LjUgMTAgMTAgMTAgMTAtNC41IDEwLTEwUzE3LjUgMiAxMiAyem01IDE2SDd2LTJoMTB2MnptLTYuNy00TDcgMTAuN2wxLjQtMS40IDEuOSAxLjkgNS4zLTUuM0wxNyA3LjMgMTAuMyAxNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJvcGFjaXR5Ij48cGF0aCBkPSJNMTcuNjYgOEwxMiAyLjM1IDYuMzQgOEM0Ljc4IDkuNTYgNCAxMS42NCA0IDEzLjY0cy43OCA0LjExIDIuMzQgNS42NyAzLjYxIDIuMzUgNS42NiAyLjM1IDQuMS0uNzkgNS42Ni0yLjM1UzIwIDE1LjY0IDIwIDEzLjY0IDE5LjIyIDkuNTYgMTcuNjYgOHpNNiAxNGMuMDEtMiAuNjItMy4yNyAxLjc2LTQuNEwxMiA1LjI3bDQuMjQgNC4zOEMxNy4zOCAxMC43NyAxNy45OSAxMiAxOCAxNEg2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im9wZW4taW4tYnJvd3NlciI+PHBhdGggZD0iTTE5IDRINWMtMS4xMSAwLTIgLjktMiAydjEyYzAgMS4xLjg5IDIgMiAyaDR2LTJINVY4aDE0djEwaC00djJoNGMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS44OS0yLTItMnptLTcgNmwtNCA0aDN2Nmgydi02aDNsLTQtNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJvcGVuLWluLW5ldyI+PHBhdGggZD0iTTE5IDE5SDVWNWg3VjNINWMtMS4xMSAwLTIgLjktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0ydi03aC0ydjd6TTE0IDN2MmgzLjU5bC05LjgzIDkuODMgMS40MSAxLjQxTDE5IDYuNDFWMTBoMlYzaC03eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im9wZW4td2l0aCI+PHBhdGggZD0iTTEwIDloNFY2aDNsLTUtNS01IDVoM3Yzem0tMSAxSDZWN2wtNSA1IDUgNXYtM2gzdi00em0xNCAybC01LTV2M2gtM3Y0aDN2M2w1LTV6bS05IDNoLTR2M0g3bDUgNSA1LTVoLTN2LTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGFnZXZpZXciPjxwYXRoIGQ9Ik0xMS41IDlDMTAuMTIgOSA5IDEwLjEyIDkgMTEuNXMxLjEyIDIuNSAyLjUgMi41IDIuNS0xLjEyIDIuNS0yLjVTMTIuODggOSAxMS41IDl6TTIwIDRINGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0tMy4yMSAxNC4yMWwtMi45MS0yLjkxYy0uNjkuNDQtMS41MS43LTIuMzkuN0M5LjAxIDE2IDcgMTMuOTkgNyAxMS41UzkuMDEgNyAxMS41IDcgMTYgOS4wMSAxNiAxMS41YzAgLjg4LS4yNiAxLjY5LS43IDIuMzlsMi45MSAyLjktMS40MiAxLjQyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBhbi10b29sIj48cGF0aCBkPSJNMjMgNS41VjIwYzAgMi4yLTEuOCA0LTQgNGgtNy4zYy0xLjA4IDAtMi4xLS40My0yLjg1LTEuMTlMMSAxNC44M3MxLjI2LTEuMjMgMS4zLTEuMjVjLjIyLS4xOS40OS0uMjkuNzktLjI5LjIyIDAgLjQyLjA2LjYuMTYuMDQuMDEgNC4zMSAyLjQ2IDQuMzEgMi40NlY0YzAtLjgzLjY3LTEuNSAxLjUtMS41UzExIDMuMTcgMTEgNHY3aDFWMS41YzAtLjgzLjY3LTEuNSAxLjUtMS41UzE1IC42NyAxNSAxLjVWMTFoMVYyLjVjMC0uODMuNjctMS41IDEuNS0xLjVzMS41LjY3IDEuNSAxLjVWMTFoMVY1LjVjMC0uODMuNjctMS41IDEuNS0xLjVzMS41LjY3IDEuNSAxLjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGF5bWVudCI+PHBhdGggZD0iTTIwIDRINGMtMS4xMSAwLTEuOTkuODktMS45OSAyTDIgMThjMCAxLjExLjg5IDIgMiAyaDE2YzEuMTEgMCAyLS44OSAyLTJWNmMwLTEuMTEtLjg5LTItMi0yem0wIDE0SDR2LTZoMTZ2NnptMC0xMEg0VjZoMTZ2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJwZXJtLWNhbWVyYS1taWMiPjxwYXRoIGQ9Ik0yMCA1aC0zLjE3TDE1IDNIOUw3LjE3IDVINGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmg3di0yLjA5Yy0yLjgzLS40OC01LTIuOTQtNS01LjkxaDJjMCAyLjIxIDEuNzkgNCA0IDRzNC0xLjc5IDQtNGgyYzAgMi45Ny0yLjE3IDUuNDMtNSA1LjkxVjIxaDdjMS4xIDAgMi0uOSAyLTJWN2MwLTEuMS0uOS0yLTItMnptLTYgOGMwIDEuMS0uOSAyLTIgMnMtMi0uOS0yLTJWOWMwLTEuMS45LTIgMi0yczIgLjkgMiAydjR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGVybS1jb250YWN0LWNhbGVuZGFyIj48cGF0aCBkPSJNMTkgM2gtMVYxaC0ydjJIOFYxSDZ2Mkg1Yy0xLjExIDAtMiAuOS0yIDJ2MTRjMCAxLjEuODkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTcgM2MxLjY2IDAgMyAxLjM0IDMgM3MtMS4zNCAzLTMgMy0zLTEuMzQtMy0zIDEuMzQtMyAzLTN6bTYgMTJINnYtMWMwLTIgNC0zLjEgNi0zLjFzNiAxLjEgNiAzLjF2MXoiPjwvcGF0aD48L2c+CjxnIGlkPSJwZXJtLWRhdGEtc2V0dGluZyI+PHBhdGggZD0iTTE4Ljk5IDExLjVjLjM0IDAgLjY3LjAzIDEgLjA3TDIwIDAgMCAyMGgxMS41NmMtLjA0LS4zMy0uMDctLjY2LS4wNy0xIDAtNC4xNCAzLjM2LTcuNSA3LjUtNy41em0zLjcxIDcuOTljLjAyLS4xNi4wNC0uMzIuMDQtLjQ5IDAtLjE3LS4wMS0uMzMtLjA0LS40OWwxLjA2LS44M2MuMDktLjA4LjEyLS4yMS4wNi0uMzJsLTEtMS43M2MtLjA2LS4xMS0uMTktLjE1LS4zMS0uMTFsLTEuMjQuNWMtLjI2LS4yLS41NC0uMzctLjg1LS40OWwtLjE5LTEuMzJjLS4wMS0uMTItLjEyLS4yMS0uMjQtLjIxaC0yYy0uMTIgMC0uMjMuMDktLjI1LjIxbC0uMTkgMS4zMmMtLjMuMTMtLjU5LjI5LS44NS40OWwtMS4yNC0uNWMtLjExLS4wNC0uMjQgMC0uMzEuMTFsLTEgMS43M2MtLjA2LjExLS4wNC4yNC4wNi4zMmwxLjA2LjgzYy0uMDIuMTYtLjAzLjMyLS4wMy40OSAwIC4xNy4wMS4zMy4wMy40OWwtMS4wNi44M2MtLjA5LjA4LS4xMi4yMS0uMDYuMzJsMSAxLjczYy4wNi4xMS4xOS4xNS4zMS4xMWwxLjI0LS41Yy4yNi4yLjU0LjM3Ljg1LjQ5bC4xOSAxLjMyYy4wMi4xMi4xMi4yMS4yNS4yMWgyYy4xMiAwIC4yMy0uMDkuMjUtLjIxbC4xOS0xLjMyYy4zLS4xMy41OS0uMjkuODQtLjQ5bDEuMjUuNWMuMTEuMDQuMjQgMCAuMzEtLjExbDEtMS43M2MuMDYtLjExLjAzLS4yNC0uMDYtLjMybC0xLjA3LS44M3ptLTMuNzEgMS4wMWMtLjgzIDAtMS41LS42Ny0xLjUtMS41cy42Ny0xLjUgMS41LTEuNSAxLjUuNjcgMS41IDEuNS0uNjcgMS41LTEuNSAxLjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGVybS1kZXZpY2UtaW5mb3JtYXRpb24iPjxwYXRoIGQ9Ik0xMyA3aC0ydjJoMlY3em0wIDRoLTJ2Nmgydi02em00LTkuOTlMNyAxYy0xLjEgMC0yIC45LTIgMnYxOGMwIDEuMS45IDIgMiAyaDEwYzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMS45OS0yLTEuOTl6TTE3IDE5SDdWNWgxMHYxNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJwZXJtLWlkZW50aXR5Ij48cGF0aCBkPSJNMTIgNS45YzEuMTYgMCAyLjEuOTQgMi4xIDIuMXMtLjk0IDIuMS0yLjEgMi4xUzkuOSA5LjE2IDkuOSA4cy45NC0yLjEgMi4xLTIuMW0wIDljMi45NyAwIDYuMSAxLjQ2IDYuMSAyLjF2MS4xSDUuOVYxN2MwLS42NCAzLjEzLTIuMSA2LjEtMi4xTTEyIDRDOS43OSA0IDggNS43OSA4IDhzMS43OSA0IDQgNCA0LTEuNzkgNC00LTEuNzktNC00LTR6bTAgOWMtMi42NyAwLTggMS4zNC04IDR2M2gxNnYtM2MwLTIuNjYtNS4zMy00LTgtNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJwZXJtLW1lZGlhIj48cGF0aCBkPSJNMiA2SDB2NWguMDFMMCAyMGMwIDEuMS45IDIgMiAyaDE4di0ySDJWNnptMjAtMmgtOGwtMi0ySDZjLTEuMSAwLTEuOTkuOS0xLjk5IDJMNCAxNmMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6TTcgMTVsNC41LTYgMy41IDQuNTEgMi41LTMuMDFMMjEgMTVIN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJwZXJtLXBob25lLW1zZyI+PHBhdGggZD0iTTIwIDE1LjVjLTEuMjUgMC0yLjQ1LS4yLTMuNTctLjU3LS4zNS0uMTEtLjc0LS4wMy0xLjAyLjI0bC0yLjIgMi4yYy0yLjgzLTEuNDQtNS4xNS0zLjc1LTYuNTktNi41OGwyLjItMi4yMWMuMjgtLjI3LjM2LS42Ni4yNS0xLjAxQzguNyA2LjQ1IDguNSA1LjI1IDguNSA0YzAtLjU1LS40NS0xLTEtMUg0Yy0uNTUgMC0xIC40NS0xIDEgMCA5LjM5IDcuNjEgMTcgMTcgMTcgLjU1IDAgMS0uNDUgMS0xdi0zLjVjMC0uNTUtLjQ1LTEtMS0xek0xMiAzdjEwbDMtM2g2VjNoLTl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGVybS1zY2FuLXdpZmkiPjxwYXRoIGQ9Ik0xMiAzQzYuOTUgMyAzLjE1IDQuODUgMCA3LjIzTDEyIDIyIDI0IDcuMjVDMjAuODUgNC44NyAxNy4wNSAzIDEyIDN6bTEgMTNoLTJ2LTZoMnY2em0tMi04VjZoMnYyaC0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBldHMiPjxjaXJjbGUgY3g9IjQuNSIgY3k9IjkuNSIgcj0iMi41Ij48L2NpcmNsZT48Y2lyY2xlIGN4PSI5IiBjeT0iNS41IiByPSIyLjUiPjwvY2lyY2xlPjxjaXJjbGUgY3g9IjE1IiBjeT0iNS41IiByPSIyLjUiPjwvY2lyY2xlPjxjaXJjbGUgY3g9IjE5LjUiIGN5PSI5LjUiIHI9IjIuNSI+PC9jaXJjbGU+PHBhdGggZD0iTTE3LjM0IDE0Ljg2Yy0uODctMS4wMi0xLjYtMS44OS0yLjQ4LTIuOTEtLjQ2LS41NC0xLjA1LTEuMDgtMS43NS0xLjMyLS4xMS0uMDQtLjIyLS4wNy0uMzMtLjA5LS4yNS0uMDQtLjUyLS4wNC0uNzgtLjA0cy0uNTMgMC0uNzkuMDVjLS4xMS4wMi0uMjIuMDUtLjMzLjA5LS43LjI0LTEuMjguNzgtMS43NSAxLjMyLS44NyAxLjAyLTEuNiAxLjg5LTIuNDggMi45MS0xLjMxIDEuMzEtMi45MiAyLjc2LTIuNjIgNC43OS4yOSAxLjAyIDEuMDIgMi4wMyAyLjMzIDIuMzIuNzMuMTUgMy4wNi0uNDQgNS41NC0uNDRoLjE4YzIuNDggMCA0LjgxLjU4IDUuNTQuNDQgMS4zMS0uMjkgMi4wNC0xLjMxIDIuMzMtMi4zMi4zMS0yLjA0LTEuMy0zLjQ5LTIuNjEtNC44eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBpY3R1cmUtaW4tcGljdHVyZSI+PHBhdGggZD0iTTE5IDdoLTh2Nmg4Vjd6bTItNEgzYy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDEuOTggMiAxLjk4aDE4YzEuMSAwIDItLjg4IDItMS45OFY1YzAtMS4xLS45LTItMi0yem0wIDE2LjAxSDNWNC45OGgxOHYxNC4wM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJwaWN0dXJlLWluLXBpY3R1cmUtYWx0Ij48cGF0aCBkPSJNMTkgMTFoLTh2Nmg4di02em00IDhWNC45OEMyMyAzLjg4IDIyLjEgMyAyMSAzSDNjLTEuMSAwLTIgLjg4LTIgMS45OFYxOWMwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yem0tMiAuMDJIM1Y0Ljk3aDE4djE0LjA1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBsYXktZm9yLXdvcmsiPjxwYXRoIGQ9Ik0xMSA1djUuNTlINy41bDQuNSA0LjUgNC41LTQuNUgxM1Y1aC0yem0tNSA5YzAgMy4zMSAyLjY5IDYgNiA2czYtMi42OSA2LTZoLTJjMCAyLjIxLTEuNzkgNC00IDRzLTQtMS43OS00LTRINnoiPjwvcGF0aD48L2c+CjxnIGlkPSJwb2x5bWVyIj48cGF0aCBkPSJNMTkgNGgtNEw3LjExIDE2LjYzIDQuNSAxMiA5IDRINUwuNSAxMiA1IDIwaDRsNy44OS0xMi42M0wxOS41IDEyIDE1IDIwaDRsNC41LTh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icG93ZXItc2V0dGluZ3MtbmV3Ij48cGF0aCBkPSJNMTMgM2gtMnYxMGgyVjN6bTQuODMgMi4xN2wtMS40MiAxLjQyQzE3Ljk5IDcuODYgMTkgOS44MSAxOSAxMmMwIDMuODctMy4xMyA3LTcgN3MtNy0zLjEzLTctN2MwLTIuMTkgMS4wMS00LjE0IDIuNTgtNS40Mkw2LjE3IDUuMTdDNC4yMyA2LjgyIDMgOS4yNiAzIDEyYzAgNC45NyA0LjAzIDkgOSA5czktNC4wMyA5LTljMC0yLjc0LTEuMjMtNS4xOC0zLjE3LTYuODN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icHJlZ25hbnQtd29tYW4iPjxwYXRoIGQ9Ik05IDRjMC0xLjExLjg5LTIgMi0yczIgLjg5IDIgMi0uODkgMi0yIDItMi0uODktMi0yem03IDljLS4wMS0xLjM0LS44My0yLjUxLTItMyAwLTEuNjYtMS4zNC0zLTMtM3MtMyAxLjM0LTMgM3Y3aDJ2NWgzdi01aDN2LTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icHJpbnQiPjxwYXRoIGQ9Ik0xOSA4SDVjLTEuNjYgMC0zIDEuMzQtMyAzdjZoNHY0aDEydi00aDR2LTZjMC0xLjY2LTEuMzQtMy0zLTN6bS0zIDExSDh2LTVoOHY1em0zLTdjLS41NSAwLTEtLjQ1LTEtMXMuNDUtMSAxLTEgMSAuNDUgMSAxLS40NSAxLTEgMXptLTEtOUg2djRoMTJWM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJxdWVyeS1idWlsZGVyIj48cGF0aCBkPSJNMTEuOTkgMkM2LjQ3IDIgMiA2LjQ4IDIgMTJzNC40NyAxMCA5Ljk5IDEwQzE3LjUyIDIyIDIyIDE3LjUyIDIyIDEyUzE3LjUyIDIgMTEuOTkgMnpNMTIgMjBjLTQuNDIgMC04LTMuNTgtOC04czMuNTgtOCA4LTggOCAzLjU4IDggOC0zLjU4IDgtOCA4em0uNS0xM0gxMXY2bDUuMjUgMy4xNS43NS0xLjIzLTQuNS0yLjY3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InF1ZXN0aW9uLWFuc3dlciI+PHBhdGggZD0iTTIxIDZoLTJ2OUg2djJjMCAuNTUuNDUgMSAxIDFoMTFsNCA0VjdjMC0uNTUtLjQ1LTEtMS0xem0tNCA2VjNjMC0uNTUtLjQ1LTEtMS0xSDNjLS41NSAwLTEgLjQ1LTEgMXYxNGw0LTRoMTBjLjU1IDAgMS0uNDUgMS0xeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJhZGlvLWJ1dHRvbi1jaGVja2VkIj48cGF0aCBkPSJNMTIgN2MtMi43NiAwLTUgMi4yNC01IDVzMi4yNCA1IDUgNSA1LTIuMjQgNS01LTIuMjQtNS01LTV6bTAtNUM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MiAwLTgtMy41OC04LThzMy41OC04IDgtOCA4IDMuNTggOCA4LTMuNTggOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmFkaW8tYnV0dG9uLXVuY2hlY2tlZCI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgMThjLTQuNDIgMC04LTMuNTgtOC04czMuNTgtOCA4LTggOCAzLjU4IDggOC0zLjU4IDgtOCA4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJlY2VpcHQiPjxwYXRoIGQ9Ik0xOCAxN0g2di0yaDEydjJ6bTAtNEg2di0yaDEydjJ6bTAtNEg2VjdoMTJ2MnpNMyAyMmwxLjUtMS41TDYgMjJsMS41LTEuNUw5IDIybDEuNS0xLjVMMTIgMjJsMS41LTEuNUwxNSAyMmwxLjUtMS41TDE4IDIybDEuNS0xLjVMMjEgMjJWMmwtMS41IDEuNUwxOCAybC0xLjUgMS41TDE1IDJsLTEuNSAxLjVMMTIgMmwtMS41IDEuNUw5IDIgNy41IDMuNSA2IDIgNC41IDMuNSAzIDJ2MjB6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmVjb3JkLXZvaWNlLW92ZXIiPjxjaXJjbGUgY3g9IjkiIGN5PSI5IiByPSI0Ij48L2NpcmNsZT48cGF0aCBkPSJNOSAxNWMtMi42NyAwLTggMS4zNC04IDR2MmgxNnYtMmMwLTIuNjYtNS4zMy00LTgtNHptNy43Ni05LjY0bC0xLjY4IDEuNjljLjg0IDEuMTguODQgMi43MSAwIDMuODlsMS42OCAxLjY5YzIuMDItMi4wMiAyLjAyLTUuMDcgMC03LjI3ek0yMC4wNyAybC0xLjYzIDEuNjNjMi43NyAzLjAyIDIuNzcgNy41NiAwIDEwLjc0TDIwLjA3IDE2YzMuOS0zLjg5IDMuOTEtOS45NSAwLTE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJlZGVlbSI+PHBhdGggZD0iTTIwIDZoLTIuMThjLjExLS4zMS4xOC0uNjUuMTgtMSAwLTEuNjYtMS4zNC0zLTMtMy0xLjA1IDAtMS45Ni41NC0yLjUgMS4zNWwtLjUuNjctLjUtLjY4QzEwLjk2IDIuNTQgMTAuMDUgMiA5IDIgNy4zNCAyIDYgMy4zNCA2IDVjMCAuMzUuMDcuNjkuMTggMUg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOWMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY4YzAtMS4xMS0uODktMi0yLTJ6bS01LTJjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXpNOSA0Yy41NSAwIDEgLjQ1IDEgMXMtLjQ1IDEtMSAxLTEtLjQ1LTEtMSAuNDUtMSAxLTF6bTExIDE1SDR2LTJoMTZ2MnptMC01SDRWOGg1LjA4TDcgMTAuODMgOC42MiAxMiAxMSA4Ljc2bDEtMS4zNiAxIDEuMzZMMTUuMzggMTIgMTcgMTAuODMgMTQuOTIgOEgyMHY2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJlZG8iPjxwYXRoIGQ9Ik0xOC40IDEwLjZDMTYuNTUgOC45OSAxNC4xNSA4IDExLjUgOGMtNC42NSAwLTguNTggMy4wMy05Ljk2IDcuMjJMMy45IDE2YzEuMDUtMy4xOSA0LjA1LTUuNSA3LjYtNS41IDEuOTUgMCAzLjczLjcyIDUuMTIgMS44OEwxMyAxNmg5VjdsLTMuNiAzLjZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmVmcmVzaCI+PHBhdGggZD0iTTE3LjY1IDYuMzVDMTYuMiA0LjkgMTQuMjEgNCAxMiA0Yy00LjQyIDAtNy45OSAzLjU4LTcuOTkgOHMzLjU3IDggNy45OSA4YzMuNzMgMCA2Ljg0LTIuNTUgNy43My02aC0yLjA4Yy0uODIgMi4zMy0zLjA0IDQtNS42NSA0LTMuMzEgMC02LTIuNjktNi02czIuNjktNiA2LTZjMS42NiAwIDMuMTQuNjkgNC4yMiAxLjc4TDEzIDExaDdWNGwtMi4zNSAyLjM1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJlbW92ZSI+PHBhdGggZD0iTTE5IDEzSDV2LTJoMTR2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZW1vdmUtY2lyY2xlIj48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptNSAxMUg3di0yaDEwdjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmVtb3ZlLWNpcmNsZS1vdXRsaW5lIj48cGF0aCBkPSJNNyAxMXYyaDEwdi0ySDd6bTUtOUM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmVtb3ZlLXNob3BwaW5nLWNhcnQiPjxwYXRoIGQ9Ik0yMi43MyAyMi43M0wyLjc3IDIuNzcgMiAybC0uNzMtLjczTDAgMi41NGw0LjM5IDQuMzkgMi4yMSA0LjY2LTEuMzUgMi40NWMtLjE2LjI4LS4yNS42MS0uMjUuOTYgMCAxLjEuOSAyIDIgMmg3LjQ2bDEuMzggMS4zOGMtLjUuMzYtLjgzLjk1LS44MyAxLjYyIDAgMS4xLjg5IDIgMS45OSAyIC42NyAwIDEuMjYtLjMzIDEuNjItLjg0TDIxLjQ2IDI0bDEuMjctMS4yN3pNNy40MiAxNWMtLjE0IDAtLjI1LS4xMS0uMjUtLjI1bC4wMy0uMTIuOS0xLjYzaDIuMzZsMiAySDcuNDJ6bTguMTMtMmMuNzUgMCAxLjQxLS40MSAxLjc1LTEuMDNsMy41OC02LjQ5Yy4wOC0uMTQuMTItLjMxLjEyLS40OCAwLS41NS0uNDUtMS0xLTFINi41NGw5LjAxIDl6TTcgMThjLTEuMSAwLTEuOTkuOS0xLjk5IDJTNS45IDIyIDcgMjJzMi0uOSAyLTItLjktMi0yLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmVvcmRlciI+PHBhdGggZD0iTTMgMTVoMTh2LTJIM3Yyem0wIDRoMTh2LTJIM3Yyem0wLThoMThWOUgzdjJ6bTAtNnYyaDE4VjVIM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJyZXBseSI+PHBhdGggZD0iTTEwIDlWNWwtNyA3IDcgN3YtNC4xYzUgMCA4LjUgMS42IDExIDUuMS0xLTUtNC0xMC0xMS0xMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZXBseS1hbGwiPjxwYXRoIGQ9Ik03IDhWNWwtNyA3IDcgN3YtM2wtNC00IDQtNHptNiAxVjVsLTcgNyA3IDd2LTQuMWM1IDAgOC41IDEuNiAxMSA1LjEtMS01LTQtMTAtMTEtMTF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmVwb3J0Ij48cGF0aCBkPSJNMTUuNzMgM0g4LjI3TDMgOC4yN3Y3LjQ2TDguMjcgMjFoNy40NkwyMSAxNS43M1Y4LjI3TDE1LjczIDN6TTEyIDE3LjNjLS43MiAwLTEuMy0uNTgtMS4zLTEuMyAwLS43Mi41OC0xLjMgMS4zLTEuMy43MiAwIDEuMy41OCAxLjMgMS4zIDAgLjcyLS41OCAxLjMtMS4zIDEuM3ptMS00LjNoLTJWN2gydjZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmVwb3J0LXByb2JsZW0iPjxwYXRoIGQ9Ik0xIDIxaDIyTDEyIDIgMSAyMXptMTItM2gtMnYtMmgydjJ6bTAtNGgtMnYtNGgydjR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmVzdG9yZSI+PHBhdGggZD0iTTEzIDNjLTQuOTcgMC05IDQuMDMtOSA5SDFsMy44OSAzLjg5LjA3LjE0TDkgMTJINmMwLTMuODcgMy4xMy03IDctN3M3IDMuMTMgNyA3LTMuMTMgNy03IDdjLTEuOTMgMC0zLjY4LS43OS00Ljk0LTIuMDZsLTEuNDIgMS40MkM4LjI3IDE5Ljk5IDEwLjUxIDIxIDEzIDIxYzQuOTcgMCA5LTQuMDMgOS05cy00LjAzLTktOS05em0tMSA1djVsNC4yOCAyLjU0LjcyLTEuMjEtMy41LTIuMDhWOEgxMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZXN0b3JlLXBhZ2UiPjxwYXRoIGQ9Ik0xNCAySDZjLTEuMSAwLTEuOTkuOS0xLjk5IDJMNCAyMGMwIDEuMS44OSAyIDEuOTkgMkgxOGMxLjEgMCAyLS45IDItMlY4bC02LTZ6bS0yIDE2Yy0yLjA1IDAtMy44MS0xLjI0LTQuNTgtM2gxLjcxYy42My45IDEuNjggMS41IDIuODcgMS41IDEuOTMgMCAzLjUtMS41NyAzLjUtMy41UzEzLjkzIDkuNSAxMiA5LjVjLTEuMzUgMC0yLjUyLjc4LTMuMSAxLjlsMS42IDEuNmgtNFY5bDEuMyAxLjNDOC42OSA4LjkyIDEwLjIzIDggMTIgOGMyLjc2IDAgNSAyLjI0IDUgNXMtMi4yNCA1LTUgNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJyb29tIj48cGF0aCBkPSJNMTIgMkM4LjEzIDIgNSA1LjEzIDUgOWMwIDUuMjUgNyAxMyA3IDEzczctNy43NSA3LTEzYzAtMy44Ny0zLjEzLTctNy03em0wIDkuNWMtMS4zOCAwLTIuNS0xLjEyLTIuNS0yLjVzMS4xMi0yLjUgMi41LTIuNSAyLjUgMS4xMiAyLjUgMi41LTEuMTIgMi41LTIuNSAyLjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icm91bmRlZC1jb3JuZXIiPjxwYXRoIGQ9Ik0xOSAxOWgydjJoLTJ2LTJ6bTAtMmgydi0yaC0ydjJ6TTMgMTNoMnYtMkgzdjJ6bTAgNGgydi0ySDN2MnptMC04aDJWN0gzdjJ6bTAtNGgyVjNIM3Yyem00IDBoMlYzSDd2MnptOCAxNmgydi0yaC0ydjJ6bS00IDBoMnYtMmgtMnYyem00IDBoMnYtMmgtMnYyem0tOCAwaDJ2LTJIN3Yyem0tNCAwaDJ2LTJIM3Yyek0yMSA4YzAtMi43Ni0yLjI0LTUtNS01aC01djJoNWMxLjY1IDAgMyAxLjM1IDMgM3Y1aDJWOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJyb3dpbmciPjxwYXRoIGQ9Ik04LjUgMTQuNUw0IDE5bDEuNSAxLjVMOSAxN2gybC0yLjUtMi41ek0xNSAxYy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnptNiAyMC4wMUwxOCAyNGwtMi45OS0zLjAxVjE5LjVsLTcuMS03LjA5Yy0uMzEuMDUtLjYxLjA3LS45MS4wN3YtMi4xNmMxLjY2LjAzIDMuNjEtLjg3IDQuNjctMi4wNGwxLjQtMS41NWMuMTktLjIxLjQzLS4zOC42OS0uNS4yOS0uMTQuNjItLjIzLjk2LS4yM2guMDNDMTUuOTkgNi4wMSAxNyA3LjAyIDE3IDguMjZ2NS43NWMwIC44NC0uMzUgMS42MS0uOTIgMi4xNmwtMy41OC0zLjU4di0yLjI3Yy0uNjMuNTItMS40MyAxLjAyLTIuMjkgMS4zOUwxNi41IDE4SDE4bDMgMy4wMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJzYXZlIj48cGF0aCBkPSJNMTcgM0g1Yy0xLjExIDAtMiAuOS0yIDJ2MTRjMCAxLjEuODkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWN2wtNC00em0tNSAxNmMtMS42NiAwLTMtMS4zNC0zLTNzMS4zNC0zIDMtMyAzIDEuMzQgMyAzLTEuMzQgMy0zIDN6bTMtMTBINVY1aDEwdjR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2NoZWR1bGUiPjxwYXRoIGQ9Ik0xMS45OSAyQzYuNDcgMiAyIDYuNDggMiAxMnM0LjQ3IDEwIDkuOTkgMTBDMTcuNTIgMjIgMjIgMTcuNTIgMjIgMTJTMTcuNTIgMiAxMS45OSAyek0xMiAyMGMtNC40MiAwLTgtMy41OC04LThzMy41OC04IDgtOCA4IDMuNTggOCA4LTMuNTggOC04IDh6bS41LTEzSDExdjZsNS4yNSAzLjE1Ljc1LTEuMjMtNC41LTIuNjd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2VhcmNoIj48cGF0aCBkPSJNMTUuNSAxNGgtLjc5bC0uMjgtLjI3QzE1LjQxIDEyLjU5IDE2IDExLjExIDE2IDkuNSAxNiA1LjkxIDEzLjA5IDMgOS41IDNTMyA1LjkxIDMgOS41IDUuOTEgMTYgOS41IDE2YzEuNjEgMCAzLjA5LS41OSA0LjIzLTEuNTdsLjI3LjI4di43OWw1IDQuOTlMMjAuNDkgMTlsLTQuOTktNXptLTYgMEM3LjAxIDE0IDUgMTEuOTkgNSA5LjVTNy4wMSA1IDkuNSA1IDE0IDcuMDEgMTQgOS41IDExLjk5IDE0IDkuNSAxNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJzZWxlY3QtYWxsIj48cGF0aCBkPSJNMyA1aDJWM2MtMS4xIDAtMiAuOS0yIDJ6bTAgOGgydi0ySDN2MnptNCA4aDJ2LTJIN3Yyek0zIDloMlY3SDN2MnptMTAtNmgtMnYyaDJWM3ptNiAwdjJoMmMwLTEuMS0uOS0yLTItMnpNNSAyMXYtMkgzYzAgMS4xLjkgMiAyIDJ6bS0yLTRoMnYtMkgzdjJ6TTkgM0g3djJoMlYzem0yIDE4aDJ2LTJoLTJ2MnptOC04aDJ2LTJoLTJ2MnptMCA4YzEuMSAwIDItLjkgMi0yaC0ydjJ6bTAtMTJoMlY3aC0ydjJ6bTAgOGgydi0yaC0ydjJ6bS00IDRoMnYtMmgtMnYyem0wLTE2aDJWM2gtMnYyek03IDE3aDEwVjdIN3YxMHptMi04aDZ2Nkg5Vjl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2VuZCI+PHBhdGggZD0iTTIuMDEgMjFMMjMgMTIgMi4wMSAzIDIgMTBsMTUgMi0xNSAyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzIj48cGF0aCBkPSJNMTkuNDMgMTIuOThjLjA0LS4zMi4wNy0uNjQuMDctLjk4cy0uMDMtLjY2LS4wNy0uOThsMi4xMS0xLjY1Yy4xOS0uMTUuMjQtLjQyLjEyLS42NGwtMi0zLjQ2Yy0uMTItLjIyLS4zOS0uMy0uNjEtLjIybC0yLjQ5IDFjLS41Mi0uNC0xLjA4LS43My0xLjY5LS45OGwtLjM4LTIuNjVDMTQuNDYgMi4xOCAxNC4yNSAyIDE0IDJoLTRjLS4yNSAwLS40Ni4xOC0uNDkuNDJsLS4zOCAyLjY1Yy0uNjEuMjUtMS4xNy41OS0xLjY5Ljk4bC0yLjQ5LTFjLS4yMy0uMDktLjQ5IDAtLjYxLjIybC0yIDMuNDZjLS4xMy4yMi0uMDcuNDkuMTIuNjRsMi4xMSAxLjY1Yy0uMDQuMzItLjA3LjY1LS4wNy45OHMuMDMuNjYuMDcuOThsLTIuMTEgMS42NWMtLjE5LjE1LS4yNC40Mi0uMTIuNjRsMiAzLjQ2Yy4xMi4yMi4zOS4zLjYxLjIybDIuNDktMWMuNTIuNCAxLjA4LjczIDEuNjkuOThsLjM4IDIuNjVjLjAzLjI0LjI0LjQyLjQ5LjQyaDRjLjI1IDAgLjQ2LS4xOC40OS0uNDJsLjM4LTIuNjVjLjYxLS4yNSAxLjE3LS41OSAxLjY5LS45OGwyLjQ5IDFjLjIzLjA5LjQ5IDAgLjYxLS4yMmwyLTMuNDZjLjEyLS4yMi4wNy0uNDktLjEyLS42NGwtMi4xMS0xLjY1ek0xMiAxNS41Yy0xLjkzIDAtMy41LTEuNTctMy41LTMuNXMxLjU3LTMuNSAzLjUtMy41IDMuNSAxLjU3IDMuNSAzLjUtMS41NyAzLjUtMy41IDMuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJzZXR0aW5ncy1hcHBsaWNhdGlvbnMiPjxwYXRoIGQ9Ik0xMiAxMGMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bTctN0g1Yy0xLjExIDAtMiAuOS0yIDJ2MTRjMCAxLjEuODkgMiAyIDJoMTRjMS4xMSAwIDItLjkgMi0yVjVjMC0xLjEtLjg5LTItMi0yem0tMS43NSA5YzAgLjIzLS4wMi40Ni0uMDUuNjhsMS40OCAxLjE2Yy4xMy4xMS4xNy4zLjA4LjQ1bC0xLjQgMi40MmMtLjA5LjE1LS4yNy4yMS0uNDMuMTVsLTEuNzQtLjdjLS4zNi4yOC0uNzYuNTEtMS4xOC42OWwtLjI2IDEuODVjLS4wMy4xNy0uMTguMy0uMzUuM2gtMi44Yy0uMTcgMC0uMzItLjEzLS4zNS0uMjlsLS4yNi0xLjg1Yy0uNDMtLjE4LS44Mi0uNDEtMS4xOC0uNjlsLTEuNzQuN2MtLjE2LjA2LS4zNCAwLS40My0uMTVsLTEuNC0yLjQyYy0uMDktLjE1LS4wNS0uMzQuMDgtLjQ1bDEuNDgtMS4xNmMtLjAzLS4yMy0uMDUtLjQ2LS4wNS0uNjkgMC0uMjMuMDItLjQ2LjA1LS42OGwtMS40OC0xLjE2Yy0uMTMtLjExLS4xNy0uMy0uMDgtLjQ1bDEuNC0yLjQyYy4wOS0uMTUuMjctLjIxLjQzLS4xNWwxLjc0LjdjLjM2LS4yOC43Ni0uNTEgMS4xOC0uNjlsLjI2LTEuODVjLjAzLS4xNy4xOC0uMy4zNS0uM2gyLjhjLjE3IDAgLjMyLjEzLjM1LjI5bC4yNiAxLjg1Yy40My4xOC44Mi40MSAxLjE4LjY5bDEuNzQtLjdjLjE2LS4wNi4zNCAwIC40My4xNWwxLjQgMi40MmMuMDkuMTUuMDUuMzQtLjA4LjQ1bC0xLjQ4IDEuMTZjLjAzLjIzLjA1LjQ2LjA1LjY5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLWJhY2t1cC1yZXN0b3JlIj48cGF0aCBkPSJNMTQgMTJjMC0xLjEtLjktMi0yLTJzLTIgLjktMiAyIC45IDIgMiAyIDItLjkgMi0yem0tMi05Yy00Ljk3IDAtOSA0LjAzLTkgOUgwbDQgNCA0LTRINWMwLTMuODcgMy4xMy03IDctN3M3IDMuMTMgNyA3LTMuMTMgNy03IDdjLTEuNTEgMC0yLjkxLS40OS00LjA2LTEuM2wtMS40MiAxLjQ0QzguMDQgMjAuMyA5Ljk0IDIxIDEyIDIxYzQuOTcgMCA5LTQuMDMgOS05cy00LjAzLTktOS05eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLWJsdWV0b290aCI+PHBhdGggZD0iTTExIDI0aDJ2LTJoLTJ2MnptLTQgMGgydi0ySDd2MnptOCAwaDJ2LTJoLTJ2MnptMi43MS0xOC4yOUwxMiAwaC0xdjcuNTlMNi40MSAzIDUgNC40MSAxMC41OSAxMCA1IDE1LjU5IDYuNDEgMTcgMTEgMTIuNDFWMjBoMWw1LjcxLTUuNzEtNC4zLTQuMjkgNC4zLTQuMjl6TTEzIDMuODNsMS44OCAxLjg4TDEzIDcuNTlWMy44M3ptMS44OCAxMC40NkwxMyAxNi4xN3YtMy43NmwxLjg4IDEuODh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtYnJpZ2h0bmVzcyI+PHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2LjAxSDNWNC45OWgxOHYxNC4wMnpNOCAxNmgyLjVsMS41IDEuNSAxLjUtMS41SDE2di0yLjVsMS41LTEuNS0xLjUtMS41VjhoLTIuNUwxMiA2LjUgMTAuNSA4SDh2Mi41TDYuNSAxMiA4IDEzLjVWMTZ6bTQtN2MxLjY2IDAgMyAxLjM0IDMgM3MtMS4zNCAzLTMgM1Y5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLWNlbGwiPjxwYXRoIGQ9Ik03IDI0aDJ2LTJIN3Yyem00IDBoMnYtMmgtMnYyem00IDBoMnYtMmgtMnYyek0xNiAuMDFMOCAwQzYuOSAwIDYgLjkgNiAydjE2YzAgMS4xLjkgMiAyIDJoOGMxLjEgMCAyLS45IDItMlYyYzAtMS4xLS45LTEuOTktMi0xLjk5ek0xNiAxNkg4VjRoOHYxMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJzZXR0aW5ncy1ldGhlcm5ldCI+PHBhdGggZD0iTTcuNzcgNi43Nkw2LjIzIDUuNDguODIgMTJsNS40MSA2LjUyIDEuNTQtMS4yOEwzLjQyIDEybDQuMzUtNS4yNHpNNyAxM2gydi0ySDd2MnptMTAtMmgtMnYyaDJ2LTJ6bS02IDJoMnYtMmgtMnYyem02Ljc3LTcuNTJsLTEuNTQgMS4yOEwyMC41OCAxMmwtNC4zNSA1LjI0IDEuNTQgMS4yOEwyMy4xOCAxMmwtNS40MS02LjUyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLWlucHV0LWFudGVubmEiPjxwYXRoIGQ9Ik0xMiA1Yy0zLjg3IDAtNyAzLjEzLTcgN2gyYzAtMi43NiAyLjI0LTUgNS01czUgMi4yNCA1IDVoMmMwLTMuODctMy4xMy03LTctN3ptMSA5LjI5Yy44OC0uMzkgMS41LTEuMjYgMS41LTIuMjkgMC0xLjM4LTEuMTItMi41LTIuNS0yLjVTOS41IDEwLjYyIDkuNSAxMmMwIDEuMDIuNjIgMS45IDEuNSAyLjI5djMuM0w3LjU5IDIxIDkgMjIuNDFsMy0zIDMgM0wxNi40MSAyMSAxMyAxNy41OXYtMy4zek0xMiAxQzUuOTMgMSAxIDUuOTMgMSAxMmgyYzAtNC45NyA0LjAzLTkgOS05czkgNC4wMyA5IDloMmMwLTYuMDctNC45My0xMS0xMS0xMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJzZXR0aW5ncy1pbnB1dC1jb21wb25lbnQiPjxwYXRoIGQ9Ik01IDJjMC0uNTUtLjQ1LTEtMS0xcy0xIC40NS0xIDF2NEgxdjZoNlY2SDVWMnptNCAxNGMwIDEuMy44NCAyLjQgMiAyLjgyVjIzaDJ2LTQuMThjMS4xNi0uNDEgMi0xLjUxIDItMi44MnYtMkg5djJ6bS04IDBjMCAxLjMuODQgMi40IDIgMi44MlYyM2gydi00LjE4QzYuMTYgMTguNCA3IDE3LjMgNyAxNnYtMkgxdjJ6TTIxIDZWMmMwLS41NS0uNDUtMS0xLTFzLTEgLjQ1LTEgMXY0aC0ydjZoNlY2aC0yem0tOC00YzAtLjU1LS40NS0xLTEtMXMtMSAuNDUtMSAxdjRIOXY2aDZWNmgtMlYyem00IDE0YzAgMS4zLjg0IDIuNCAyIDIuODJWMjNoMnYtNC4xOGMxLjE2LS40MSAyLTEuNTEgMi0yLjgydi0yaC02djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtaW5wdXQtY29tcG9zaXRlIj48cGF0aCBkPSJNNSAyYzAtLjU1LS40NS0xLTEtMXMtMSAuNDUtMSAxdjRIMXY2aDZWNkg1VjJ6bTQgMTRjMCAxLjMuODQgMi40IDIgMi44MlYyM2gydi00LjE4YzEuMTYtLjQxIDItMS41MSAyLTIuODJ2LTJIOXYyem0tOCAwYzAgMS4zLjg0IDIuNCAyIDIuODJWMjNoMnYtNC4xOEM2LjE2IDE4LjQgNyAxNy4zIDcgMTZ2LTJIMXYyek0yMSA2VjJjMC0uNTUtLjQ1LTEtMS0xcy0xIC40NS0xIDF2NGgtMnY2aDZWNmgtMnptLTgtNGMwLS41NS0uNDUtMS0xLTFzLTEgLjQ1LTEgMXY0SDl2Nmg2VjZoLTJWMnptNCAxNGMwIDEuMy44NCAyLjQgMiAyLjgyVjIzaDJ2LTQuMThjMS4xNi0uNDEgMi0xLjUxIDItMi44MnYtMmgtNnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLWlucHV0LWhkbWkiPjxwYXRoIGQ9Ik0xOCA3VjRjMC0xLjEtLjktMi0yLTJIOGMtMS4xIDAtMiAuOS0yIDJ2M0g1djZsMyA2djNoOHYtM2wzLTZWN2gtMXpNOCA0aDh2M2gtMlY1aC0xdjJoLTJWNWgtMXYySDhWNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJzZXR0aW5ncy1pbnB1dC1zdmlkZW8iPjxwYXRoIGQ9Ik04IDExLjVjMC0uODMtLjY3LTEuNS0xLjUtMS41UzUgMTAuNjcgNSAxMS41IDUuNjcgMTMgNi41IDEzIDggMTIuMzMgOCAxMS41em03LTVjMC0uODMtLjY3LTEuNS0xLjUtMS41aC0zQzkuNjcgNSA5IDUuNjcgOSA2LjVTOS42NyA4IDEwLjUgOGgzYy44MyAwIDEuNS0uNjcgMS41LTEuNXpNOC41IDE1Yy0uODMgMC0xLjUuNjctMS41IDEuNVM3LjY3IDE4IDguNSAxOHMxLjUtLjY3IDEuNS0xLjVTOS4zMyAxNSA4LjUgMTV6TTEyIDFDNS45MyAxIDEgNS45MyAxIDEyczQuOTMgMTEgMTEgMTEgMTEtNC45MyAxMS0xMVMxOC4wNyAxIDEyIDF6bTAgMjBjLTQuOTYgMC05LTQuMDQtOS05czQuMDQtOSA5LTkgOSA0LjA0IDkgOS00LjA0IDktOSA5em01LjUtMTFjLS44MyAwLTEuNS42Ny0xLjUgMS41cy42NyAxLjUgMS41IDEuNSAxLjUtLjY3IDEuNS0xLjUtLjY3LTEuNS0xLjUtMS41em0tMiA1Yy0uODMgMC0xLjUuNjctMS41IDEuNXMuNjcgMS41IDEuNSAxLjUgMS41LS42NyAxLjUtMS41LS42Ny0xLjUtMS41LTEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJzZXR0aW5ncy1vdmVyc2NhbiI+PHBhdGggZD0iTTEyLjAxIDUuNUwxMCA4aDRsLTEuOTktMi41ek0xOCAxMHY0bDIuNS0xLjk5TDE4IDEwek02IDEwbC0yLjUgMi4wMUw2IDE0di00em04IDZoLTRsMi4wMSAyLjVMMTQgMTZ6bTctMTNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2LjAxSDNWNC45OWgxOHYxNC4wMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJzZXR0aW5ncy1waG9uZSI+PHBhdGggZD0iTTEzIDloLTJ2MmgyVjl6bTQgMGgtMnYyaDJWOXptMyA2LjVjLTEuMjUgMC0yLjQ1LS4yLTMuNTctLjU3LS4zNS0uMTEtLjc0LS4wMy0xLjAyLjI0bC0yLjIgMi4yYy0yLjgzLTEuNDQtNS4xNS0zLjc1LTYuNTktNi41OGwyLjItMi4yMWMuMjgtLjI3LjM2LS42Ni4yNS0xLjAxQzguNyA2LjQ1IDguNSA1LjI1IDguNSA0YzAtLjU1LS40NS0xLTEtMUg0Yy0uNTUgMC0xIC40NS0xIDEgMCA5LjM5IDcuNjEgMTcgMTcgMTcgLjU1IDAgMS0uNDUgMS0xdi0zLjVjMC0uNTUtLjQ1LTEtMS0xek0xOSA5djJoMlY5aC0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLXBvd2VyIj48cGF0aCBkPSJNNyAyNGgydi0ySDd2MnptNCAwaDJ2LTJoLTJ2MnptMi0yMmgtMnYxMGgyVjJ6bTMuNTYgMi40NGwtMS40NSAxLjQ1QzE2Ljg0IDYuOTQgMTggOC44MyAxOCAxMWMwIDMuMzEtMi42OSA2LTYgNnMtNi0yLjY5LTYtNmMwLTIuMTcgMS4xNi00LjA2IDIuODgtNS4xMkw3LjQ0IDQuNDRDNS4zNiA1Ljg4IDQgOC4yOCA0IDExYzAgNC40MiAzLjU4IDggOCA4czgtMy41OCA4LThjMC0yLjcyLTEuMzYtNS4xMi0zLjQ0LTYuNTZ6TTE1IDI0aDJ2LTJoLTJ2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJzZXR0aW5ncy1yZW1vdGUiPjxwYXRoIGQ9Ik0xNSA5SDljLS41NSAwLTEgLjQ1LTEgMXYxMmMwIC41NS40NSAxIDEgMWg2Yy41NSAwIDEtLjQ1IDEtMVYxMGMwLS41NS0uNDUtMS0xLTF6bS0zIDZjLTEuMSAwLTItLjktMi0ycy45LTIgMi0yIDIgLjkgMiAyLS45IDItMiAyek03LjA1IDYuMDVsMS40MSAxLjQxQzkuMzcgNi41NiAxMC42MiA2IDEyIDZzMi42My41NiAzLjU0IDEuNDZsMS40MS0xLjQxQzE1LjY4IDQuNzggMTMuOTMgNCAxMiA0cy0zLjY4Ljc4LTQuOTUgMi4wNXpNMTIgMEM4Ljk2IDAgNi4yMSAxLjIzIDQuMjIgMy4yMmwxLjQxIDEuNDFDNy4yNiAzLjAxIDkuNTEgMiAxMiAyczQuNzQgMS4wMSA2LjM2IDIuNjRsMS40MS0xLjQxQzE3Ljc5IDEuMjMgMTUuMDQgMCAxMiAweiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLXZvaWNlIj48cGF0aCBkPSJNNyAyNGgydi0ySDd2MnptNS0xMWMxLjY2IDAgMi45OS0xLjM0IDIuOTktM0wxNSA0YzAtMS42Ni0xLjM0LTMtMy0zUzkgMi4zNCA5IDR2NmMwIDEuNjYgMS4zNCAzIDMgM3ptLTEgMTFoMnYtMmgtMnYyem00IDBoMnYtMmgtMnYyem00LTE0aC0xLjdjMCAzLTIuNTQgNS4xLTUuMyA1LjFTNi43IDEzIDYuNyAxMEg1YzAgMy40MSAyLjcyIDYuMjMgNiA2LjcyVjIwaDJ2LTMuMjhjMy4yOC0uNDkgNi0zLjMxIDYtNi43MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJzaG9wIj48cGF0aCBkPSJNMTYgNlY0YzAtMS4xMS0uODktMi0yLTJoLTRjLTEuMTEgMC0yIC44OS0yIDJ2MkgydjEzYzAgMS4xMS44OSAyIDIgMmgxNmMxLjExIDAgMi0uODkgMi0yVjZoLTZ6bS02LTJoNHYyaC00VjR6TTkgMThWOWw3LjUgNEw5IDE4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNob3AtdHdvIj48cGF0aCBkPSJNMyA5SDF2MTFjMCAxLjExLjg5IDIgMiAyaDE0YzEuMTEgMCAyLS44OSAyLTJIM1Y5em0xNS00VjNjMC0xLjExLS44OS0yLTItMmgtNGMtMS4xMSAwLTIgLjg5LTIgMnYySDV2MTFjMCAxLjExLjg5IDIgMiAyaDE0YzEuMTEgMCAyLS44OSAyLTJWNWgtNXptLTYtMmg0djJoLTRWM3ptMCAxMlY4bDUuNSAzLTUuNSA0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNob3BwaW5nLWJhc2tldCI+PHBhdGggZD0iTTE3LjIxIDlsLTQuMzgtNi41NmMtLjE5LS4yOC0uNTEtLjQyLS44My0uNDItLjMyIDAtLjY0LjE0LS44My40M0w2Ljc5IDlIMmMtLjU1IDAtMSAuNDUtMSAxIDAgLjA5LjAxLjE4LjA0LjI3bDIuNTQgOS4yN2MuMjMuODQgMSAxLjQ2IDEuOTIgMS40NmgxM2MuOTIgMCAxLjY5LS42MiAxLjkzLTEuNDZsMi41NC05LjI3TDIzIDEwYzAtLjU1LS40NS0xLTEtMWgtNC43OXpNOSA5bDMtNC40TDE1IDlIOXptMyA4Yy0xLjEgMC0yLS45LTItMnMuOS0yIDItMiAyIC45IDIgMi0uOSAyLTIgMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJzaG9wcGluZy1jYXJ0Ij48cGF0aCBkPSJNNyAxOGMtMS4xIDAtMS45OS45LTEuOTkgMlM1LjkgMjIgNyAyMnMyLS45IDItMi0uOS0yLTItMnpNMSAydjJoMmwzLjYgNy41OS0xLjM1IDIuNDVjLS4xNi4yOC0uMjUuNjEtLjI1Ljk2IDAgMS4xLjkgMiAyIDJoMTJ2LTJINy40MmMtLjE0IDAtLjI1LS4xMS0uMjUtLjI1bC4wMy0uMTIuOS0xLjYzaDcuNDVjLjc1IDAgMS40MS0uNDEgMS43NS0xLjAzbDMuNTgtNi40OWMuMDgtLjE0LjEyLS4zMS4xMi0uNDggMC0uNTUtLjQ1LTEtMS0xSDUuMjFsLS45NC0ySDF6bTE2IDE2Yy0xLjEgMC0xLjk5LjktMS45OSAycy44OSAyIDEuOTkgMiAyLS45IDItMi0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJzb3J0Ij48cGF0aCBkPSJNMyAxOGg2di0ySDN2MnpNMyA2djJoMThWNkgzem0wIDdoMTJ2LTJIM3YyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNwZWFrZXItbm90ZXMiPjxwYXRoIGQ9Ik0yMCAySDRjLTEuMSAwLTEuOTkuOS0xLjk5IDJMMiAyMmw0LTRoMTRjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnpNOCAxNEg2di0yaDJ2MnptMC0zSDZWOWgydjJ6bTAtM0g2VjZoMnYyem03IDZoLTV2LTJoNXYyem0zLTNoLThWOWg4djJ6bTAtM2gtOFY2aDh2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJzcGVha2VyLW5vdGVzLW9mZiI+PHBhdGggZD0iTTEwLjU0IDExbC0uNTQtLjU0TDcuNTQgOCA2IDYuNDYgMi4zOCAyLjg0IDEuMjcgMS43MyAwIDNsMi4wMSAyLjAxTDIgMjJsNC00aDlsNS43MyA1LjczTDIyIDIyLjQ2IDE3LjU0IDE4bC03LTd6TTggMTRINnYtMmgydjJ6bS0yLTNWOWwyIDJINnptMTQtOUg0LjA4TDEwIDcuOTJWNmg4djJoLTcuOTJsMSAxSDE4djJoLTQuOTJsNi45OSA2Ljk5QzIxLjE0IDE3Ljk1IDIyIDE3LjA4IDIyIDE2VjRjMC0xLjEtLjktMi0yLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3BlbGxjaGVjayI+PHBhdGggZD0iTTEyLjQ1IDE2aDIuMDlMOS40MyAzSDcuNTdMMi40NiAxNmgyLjA5bDEuMTItM2g1LjY0bDEuMTQgM3ptLTYuMDItNUw4LjUgNS40OCAxMC41NyAxMUg2LjQzem0xNS4xNi41OWwtOC4wOSA4LjA5TDkuODMgMTZsLTEuNDEgMS40MSA1LjA5IDUuMDlMMjMgMTNsLTEuNDEtMS40MXoiPjwvcGF0aD48L2c+CjxnIGlkPSJzdGFyIj48cGF0aCBkPSJNMTIgMTcuMjdMMTguMTggMjFsLTEuNjQtNy4wM0wyMiA5LjI0bC03LjE5LS42MUwxMiAyIDkuMTkgOC42MyAyIDkuMjRsNS40NiA0LjczTDUuODIgMjF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3Rhci1ib3JkZXIiPjxwYXRoIGQ9Ik0yMiA5LjI0bC03LjE5LS42MkwxMiAyIDkuMTkgOC42MyAyIDkuMjRsNS40NiA0LjczTDUuODIgMjEgMTIgMTcuMjcgMTguMTggMjFsLTEuNjMtNy4wM0wyMiA5LjI0ek0xMiAxNS40bC0zLjc2IDIuMjcgMS00LjI4LTMuMzItMi44OCA0LjM4LS4zOEwxMiA2LjFsMS43MSA0LjA0IDQuMzguMzgtMy4zMiAyLjg4IDEgNC4yOEwxMiAxNS40eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InN0YXItaGFsZiI+PHBhdGggZD0iTTIyIDkuMjRsLTcuMTktLjYyTDEyIDIgOS4xOSA4LjYzIDIgOS4yNGw1LjQ2IDQuNzNMNS44MiAyMSAxMiAxNy4yNyAxOC4xOCAyMWwtMS42My03LjAzTDIyIDkuMjR6TTEyIDE1LjRWNi4xbDEuNzEgNC4wNCA0LjM4LjM4LTMuMzIgMi44OCAxIDQuMjhMMTIgMTUuNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJzdGFycyI+PHBhdGggZD0iTTExLjk5IDJDNi40NyAyIDIgNi40OCAyIDEyczQuNDcgMTAgOS45OSAxMEMxNy41MiAyMiAyMiAxNy41MiAyMiAxMlMxNy41MiAyIDExLjk5IDJ6bTQuMjQgMTZMMTIgMTUuNDUgNy43NyAxOGwxLjEyLTQuODEtMy43My0zLjIzIDQuOTItLjQyTDEyIDVsMS45MiA0LjUzIDQuOTIuNDItMy43MyAzLjIzTDE2LjIzIDE4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InN0b3JlIj48cGF0aCBkPSJNMjAgNEg0djJoMTZWNHptMSAxMHYtMmwtMS01SDRsLTEgNXYyaDF2NmgxMHYtNmg0djZoMnYtNmgxem0tOSA0SDZ2LTRoNnY0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InN1YmRpcmVjdG9yeS1hcnJvdy1sZWZ0Ij48cGF0aCBkPSJNMTEgOWwxLjQyIDEuNDJMOC44MyAxNEgxOFY0aDJ2MTJIOC44M2wzLjU5IDMuNThMMTEgMjFsLTYtNiA2LTZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3ViZGlyZWN0b3J5LWFycm93LXJpZ2h0Ij48cGF0aCBkPSJNMTkgMTVsLTYgNi0xLjQyLTEuNDJMMTUuMTcgMTZINFY0aDJ2MTBoOS4xN2wtMy41OS0zLjU4TDEzIDlsNiA2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InN1YmplY3QiPjxwYXRoIGQ9Ik0xNCAxN0g0djJoMTB2LTJ6bTYtOEg0djJoMTZWOXpNNCAxNWgxNnYtMkg0djJ6TTQgNXYyaDE2VjVINHoiPjwvcGF0aD48L2c+CjxnIGlkPSJzdXBlcnZpc29yLWFjY291bnQiPjxwYXRoIGQ9Ik0xNi41IDEyYzEuMzggMCAyLjQ5LTEuMTIgMi40OS0yLjVTMTcuODggNyAxNi41IDdDMTUuMTIgNyAxNCA4LjEyIDE0IDkuNXMxLjEyIDIuNSAyLjUgMi41ek05IDExYzEuNjYgMCAyLjk5LTEuMzQgMi45OS0zUzEwLjY2IDUgOSA1QzcuMzQgNSA2IDYuMzQgNiA4czEuMzQgMyAzIDN6bTcuNSAzYy0xLjgzIDAtNS41LjkyLTUuNSAyLjc1VjE5aDExdi0yLjI1YzAtMS44My0zLjY3LTIuNzUtNS41LTIuNzV6TTkgMTNjLTIuMzMgMC03IDEuMTctNyAzLjVWMTloN3YtMi4yNWMwLS44NS4zMy0yLjM0IDIuMzctMy40N0MxMC41IDEzLjEgOS42NiAxMyA5IDEzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InN3YXAtaG9yaXoiPjxwYXRoIGQ9Ik02Ljk5IDExTDMgMTVsMy45OSA0di0zSDE0di0ySDYuOTl2LTN6TTIxIDlsLTMuOTktNHYzSDEwdjJoNy4wMXYzTDIxIDl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3dhcC12ZXJ0Ij48cGF0aCBkPSJNMTYgMTcuMDFWMTBoLTJ2Ny4wMWgtM0wxNSAyMWw0LTMuOTloLTN6TTkgM0w1IDYuOTloM1YxNGgyVjYuOTloM0w5IDN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3dhcC12ZXJ0aWNhbC1jaXJjbGUiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyek02LjUgOUwxMCA1LjUgMTMuNSA5SDExdjRIOVY5SDYuNXptMTEgNkwxNCAxOC41IDEwLjUgMTVIMTN2LTRoMnY0aDIuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJzeXN0ZW0tdXBkYXRlLWFsdCI+PHBhdGggZD0iTTEyIDE2LjVsNC00aC0zdi05aC0ydjlIOGw0IDR6bTktMTNoLTZ2MS45OWg2djE0LjAzSDNWNS40OWg2VjMuNUgzYy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0ydi0xNGMwLTEuMS0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0YWIiPjxwYXRoIGQ9Ik0yMSAzSDNjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxNkgzVjVoMTB2NGg4djEweiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRhYi11bnNlbGVjdGVkIj48cGF0aCBkPSJNMSA5aDJWN0gxdjJ6bTAgNGgydi0ySDF2MnptMC04aDJWM2MtMS4xIDAtMiAuOS0yIDJ6bTggMTZoMnYtMkg5djJ6bS04LTRoMnYtMkgxdjJ6bTIgNHYtMkgxYzAgMS4xLjkgMiAyIDJ6TTIxIDNoLTh2NmgxMFY1YzAtMS4xLS45LTItMi0yem0wIDE0aDJ2LTJoLTJ2MnpNOSA1aDJWM0g5djJ6TTUgMjFoMnYtMkg1djJ6TTUgNWgyVjNINXYyem0xNiAxNmMxLjEgMCAyLS45IDItMmgtMnYyem0wLThoMnYtMmgtMnYyem0tOCA4aDJ2LTJoLTJ2MnptNCAwaDJ2LTJoLTJ2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0ZXh0LWZvcm1hdCI+PHBhdGggZD0iTTUgMTd2MmgxNHYtMkg1em00LjUtNC4yaDVsLjkgMi4yaDIuMUwxMi43NSA0aC0xLjVMNi41IDE1aDIuMWwuOS0yLjJ6TTEyIDUuOThMMTMuODcgMTFoLTMuNzRMMTIgNS45OHoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0aGVhdGVycyI+PHBhdGggZD0iTTE4IDN2MmgtMlYzSDh2Mkg2VjNINHYxOGgydi0yaDJ2Mmg4di0yaDJ2MmgyVjNoLTJ6TTggMTdINnYtMmgydjJ6bTAtNEg2di0yaDJ2MnptMC00SDZWN2gydjJ6bTEwIDhoLTJ2LTJoMnYyem0wLTRoLTJ2LTJoMnYyem0wLTRoLTJWN2gydjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idGh1bWItZG93biI+PHBhdGggZD0iTTE1IDNINmMtLjgzIDAtMS41NC41LTEuODQgMS4yMmwtMy4wMiA3LjA1Yy0uMDkuMjMtLjE0LjQ3LS4xNC43M3YxLjkxbC4wMS4wMUwxIDE0YzAgMS4xLjkgMiAyIDJoNi4zMWwtLjk1IDQuNTctLjAzLjMyYzAgLjQxLjE3Ljc5LjQ0IDEuMDZMOS44MyAyM2w2LjU5LTYuNTljLjM2LS4zNi41OC0uODYuNTgtMS40MVY1YzAtMS4xLS45LTItMi0yem00IDB2MTJoNFYzaC00eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRodW1iLXVwIj48cGF0aCBkPSJNMSAyMWg0VjlIMXYxMnptMjItMTFjMC0xLjEtLjktMi0yLTJoLTYuMzFsLjk1LTQuNTcuMDMtLjMyYzAtLjQxLS4xNy0uNzktLjQ0LTEuMDZMMTQuMTcgMSA3LjU5IDcuNTlDNy4yMiA3Ljk1IDcgOC40NSA3IDl2MTBjMCAxLjEuOSAyIDIgMmg5Yy44MyAwIDEuNTQtLjUgMS44NC0xLjIybDMuMDItNy4wNWMuMDktLjIzLjE0LS40Ny4xNC0uNzN2LTEuOTFsLS4wMS0uMDFMMjMgMTB6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idGh1bWJzLXVwLWRvd24iPjxwYXRoIGQ9Ik0xMiA2YzAtLjU1LS40NS0xLTEtMUg1LjgybC42Ni0zLjE4LjAyLS4yM2MwLS4zMS0uMTMtLjU5LS4zMy0uOEw1LjM4IDAgLjQ0IDQuOTRDLjE3IDUuMjEgMCA1LjU5IDAgNnY2LjVjMCAuODMuNjcgMS41IDEuNSAxLjVoNi43NWMuNjIgMCAxLjE1LS4zOCAxLjM4LS45MWwyLjI2LTUuMjljLjA3LS4xNy4xMS0uMzYuMTEtLjU1VjZ6bTEwLjUgNGgtNi43NWMtLjYyIDAtMS4xNS4zOC0xLjM4LjkxbC0yLjI2IDUuMjljLS4wNy4xNy0uMTEuMzYtLjExLjU1VjE4YzAgLjU1LjQ1IDEgMSAxaDUuMThsLS42NiAzLjE4LS4wMi4yNGMwIC4zMS4xMy41OS4zMy44bC43OS43OCA0Ljk0LTQuOTRjLjI3LS4yNy40NC0uNjUuNDQtMS4wNnYtNi41YzAtLjgzLS42Ny0xLjUtMS41LTEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0aW1lbGluZSI+PHBhdGggZD0iTTIzIDhjMCAxLjEtLjkgMi0yIDItLjE4IDAtLjM1LS4wMi0uNTEtLjA3bC0zLjU2IDMuNTVjLjA1LjE2LjA3LjM0LjA3LjUyIDAgMS4xLS45IDItMiAycy0yLS45LTItMmMwLS4xOC4wMi0uMzYuMDctLjUybC0yLjU1LTIuNTVjLS4xNi4wNS0uMzQuMDctLjUyLjA3cy0uMzYtLjAyLS41Mi0uMDdsLTQuNTUgNC41NmMuMDUuMTYuMDcuMzMuMDcuNTEgMCAxLjEtLjkgMi0yIDJzLTItLjktMi0yIC45LTIgMi0yYy4xOCAwIC4zNS4wMi41MS4wN2w0LjU2LTQuNTVDOC4wMiA5LjM2IDggOS4xOCA4IDljMC0xLjEuOS0yIDItMnMyIC45IDIgMmMwIC4xOC0uMDIuMzYtLjA3LjUybDIuNTUgMi41NWMuMTYtLjA1LjM0LS4wNy41Mi0uMDdzLjM2LjAyLjUyLjA3bDMuNTUtMy41NkMxOS4wMiA4LjM1IDE5IDguMTggMTkgOGMwLTEuMS45LTIgMi0yczIgLjkgMiAyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRvYyI+PHBhdGggZD0iTTMgOWgxNFY3SDN2MnptMCA0aDE0di0ySDN2MnptMCA0aDE0di0ySDN2MnptMTYgMGgydi0yaC0ydjJ6bTAtMTB2MmgyVjdoLTJ6bTAgNmgydi0yaC0ydjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idG9kYXkiPjxwYXRoIGQ9Ik0xOSAzaC0xVjFoLTJ2Mkg4VjFINnYySDVjLTEuMTEgMC0xLjk5LjktMS45OSAyTDMgMTljMCAxLjEuODkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxNkg1VjhoMTR2MTF6TTcgMTBoNXY1SDd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idG9sbCI+PHBhdGggZD0iTTE1IDRjLTQuNDIgMC04IDMuNTgtOCA4czMuNTggOCA4IDggOC0zLjU4IDgtOC0zLjU4LTgtOC04em0wIDE0Yy0zLjMxIDAtNi0yLjY5LTYtNnMyLjY5LTYgNi02IDYgMi42OSA2IDYtMi42OSA2LTYgNnpNMyAxMmMwLTIuNjEgMS42Ny00LjgzIDQtNS42NVY0LjI2QzMuNTUgNS4xNSAxIDguMjcgMSAxMnMyLjU1IDYuODUgNiA3Ljc0di0yLjA5Yy0yLjMzLS44Mi00LTMuMDQtNC01LjY1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRvdWNoLWFwcCI+PHBhdGggZD0iTTkgMTEuMjRWNy41QzkgNi4xMiAxMC4xMiA1IDExLjUgNVMxNCA2LjEyIDE0IDcuNXYzLjc0YzEuMjEtLjgxIDItMi4xOCAyLTMuNzRDMTYgNS4wMSAxMy45OSAzIDExLjUgM1M3IDUuMDEgNyA3LjVjMCAxLjU2Ljc5IDIuOTMgMiAzLjc0em05Ljg0IDQuNjNsLTQuNTQtMi4yNmMtLjE3LS4wNy0uMzUtLjExLS41NC0uMTFIMTN2LTZjMC0uODMtLjY3LTEuNS0xLjUtMS41UzEwIDYuNjcgMTAgNy41djEwLjc0bC0zLjQzLS43MmMtLjA4LS4wMS0uMTUtLjAzLS4yNC0uMDMtLjMxIDAtLjU5LjEzLS43OS4zM2wtLjc5LjggNC45NCA0Ljk0Yy4yNy4yNy42NS40NCAxLjA2LjQ0aDYuNzljLjc1IDAgMS4zMy0uNTUgMS40NC0xLjI4bC43NS01LjI3Yy4wMS0uMDcuMDItLjE0LjAyLS4yIDAtLjYyLS4zOC0xLjE2LS45MS0xLjM4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRyYWNrLWNoYW5nZXMiPjxwYXRoIGQ9Ik0xOS4wNyA0LjkzbC0xLjQxIDEuNDFDMTkuMSA3Ljc5IDIwIDkuNzkgMjAgMTJjMCA0LjQyLTMuNTggOC04IDhzLTgtMy41OC04LThjMC00LjA4IDMuMDUtNy40NCA3LTcuOTN2Mi4wMkM4LjE2IDYuNTcgNiA5LjAzIDYgMTJjMCAzLjMxIDIuNjkgNiA2IDZzNi0yLjY5IDYtNmMwLTEuNjYtLjY3LTMuMTYtMS43Ni00LjI0bC0xLjQxIDEuNDFDMTUuNTUgOS45IDE2IDEwLjkgMTYgMTJjMCAyLjIxLTEuNzkgNC00IDRzLTQtMS43OS00LTRjMC0xLjg2IDEuMjgtMy40MSAzLTMuODZ2Mi4xNGMtLjYuMzUtMSAuOTgtMSAxLjcyIDAgMS4xLjkgMiAyIDJzMi0uOSAyLTJjMC0uNzQtLjQtMS4zOC0xLTEuNzJWMmgtMUM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwYzAtMi43Ni0xLjEyLTUuMjYtMi45My03LjA3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRyYW5zbGF0ZSI+PHBhdGggZD0iTTEyLjg3IDE1LjA3bC0yLjU0LTIuNTEuMDMtLjAzYzEuNzQtMS45NCAyLjk4LTQuMTcgMy43MS02LjUzSDE3VjRoLTdWMkg4djJIMXYxLjk5aDExLjE3QzExLjUgNy45MiAxMC40NCA5Ljc1IDkgMTEuMzUgOC4wNyAxMC4zMiA3LjMgOS4xOSA2LjY5IDhoLTJjLjczIDEuNjMgMS43MyAzLjE3IDIuOTggNC41NmwtNS4wOSA1LjAyTDQgMTlsNS01IDMuMTEgMy4xMS43Ni0yLjA0ek0xOC41IDEwaC0yTDEyIDIyaDJsMS4xMi0zaDQuNzVMMjEgMjJoMmwtNC41LTEyem0tMi42MiA3bDEuNjItNC4zM0wxOS4xMiAxN2gtMy4yNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0cmVuZGluZy1kb3duIj48cGF0aCBkPSJNMTYgMThsMi4yOS0yLjI5LTQuODgtNC44OC00IDRMMiA3LjQxIDMuNDEgNmw2IDYgNC00IDYuMyA2LjI5TDIyIDEydjZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idHJlbmRpbmctZmxhdCI+PHBhdGggZD0iTTIyIDEybC00LTR2M0gzdjJoMTV2M3oiPjwvcGF0aD48L2c+CjxnIGlkPSJ0cmVuZGluZy11cCI+PHBhdGggZD0iTTE2IDZsMi4yOSAyLjI5LTQuODggNC44OC00LTRMMiAxNi41OSAzLjQxIDE4bDYtNiA0IDQgNi4zLTYuMjlMMjIgMTJWNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0dXJuZWQtaW4iPjxwYXRoIGQ9Ik0xNyAzSDdjLTEuMSAwLTEuOTkuOS0xLjk5IDJMNSAyMWw3LTMgNyAzVjVjMC0xLjEtLjktMi0yLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idHVybmVkLWluLW5vdCI+PHBhdGggZD0iTTE3IDNIN2MtMS4xIDAtMS45OS45LTEuOTkgMkw1IDIxbDctMyA3IDNWNWMwLTEuMS0uOS0yLTItMnptMCAxNWwtNS0yLjE4TDcgMThWNWgxMHYxM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJ1bmFyY2hpdmUiPjxwYXRoIGQ9Ik0yMC41NSA1LjIybC0xLjM5LTEuNjhDMTguODggMy4yMSAxOC40NyAzIDE4IDNINmMtLjQ3IDAtLjg4LjIxLTEuMTUuNTVMMy40NiA1LjIyQzMuMTcgNS41NyAzIDYuMDEgMyA2LjVWMTljMCAxLjEuODkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNi41YzAtLjQ5LS4xNy0uOTMtLjQ1LTEuMjh6TTEyIDkuNWw1LjUgNS41SDE0djJoLTR2LTJINi41TDEyIDkuNXpNNS4xMiA1bC44Mi0xaDEybC45MyAxSDUuMTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idW5kbyI+PHBhdGggZD0iTTEyLjUgOGMtMi42NSAwLTUuMDUuOTktNi45IDIuNkwyIDd2OWg5bC0zLjYyLTMuNjJjMS4zOS0xLjE2IDMuMTYtMS44OCA1LjEyLTEuODggMy41NCAwIDYuNTUgMi4zMSA3LjYgNS41bDIuMzctLjc4QzIxLjA4IDExLjAzIDE3LjE1IDggMTIuNSA4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InVuZm9sZC1sZXNzIj48cGF0aCBkPSJNNy40MSAxOC41OUw4LjgzIDIwIDEyIDE2LjgzIDE1LjE3IDIwbDEuNDEtMS40MUwxMiAxNGwtNC41OSA0LjU5em05LjE4LTEzLjE4TDE1LjE3IDQgMTIgNy4xNyA4LjgzIDQgNy40MSA1LjQxIDEyIDEwbDQuNTktNC41OXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ1bmZvbGQtbW9yZSI+PHBhdGggZD0iTTEyIDUuODNMMTUuMTcgOWwxLjQxLTEuNDFMMTIgMyA3LjQxIDcuNTkgOC44MyA5IDEyIDUuODN6bTAgMTIuMzRMOC44MyAxNWwtMS40MSAxLjQxTDEyIDIxbDQuNTktNC41OUwxNS4xNyAxNSAxMiAxOC4xN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJ1cGRhdGUiPjxwYXRoIGQ9Ik0yMSAxMC4xMmgtNi43OGwyLjc0LTIuODJjLTIuNzMtMi43LTcuMTUtMi44LTkuODgtLjEtMi43MyAyLjcxLTIuNzMgNy4wOCAwIDkuNzkgMi43MyAyLjcxIDcuMTUgMi43MSA5Ljg4IDBDMTguMzIgMTUuNjUgMTkgMTQuMDggMTkgMTIuMWgyYzAgMS45OC0uODggNC41NS0yLjY0IDYuMjktMy41MSAzLjQ4LTkuMjEgMy40OC0xMi43MiAwLTMuNS0zLjQ3LTMuNTMtOS4xMS0uMDItMTIuNTggMy41MS0zLjQ3IDkuMTQtMy40NyAxMi42NSAwTDIxIDN2Ny4xMnpNMTIuNSA4djQuMjVsMy41IDIuMDgtLjcyIDEuMjFMMTEgMTNWOGgxLjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idmVyaWZpZWQtdXNlciI+PHBhdGggZD0iTTEyIDFMMyA1djZjMCA1LjU1IDMuODQgMTAuNzQgOSAxMiA1LjE2LTEuMjYgOS02LjQ1IDktMTJWNWwtOS00em0tMiAxNmwtNC00IDEuNDEtMS40MUwxMCAxNC4xN2w2LjU5LTYuNTlMMTggOWwtOCA4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InZpZXctYWdlbmRhIj48cGF0aCBkPSJNMjAgMTNIM2MtLjU1IDAtMSAuNDUtMSAxdjZjMCAuNTUuNDUgMSAxIDFoMTdjLjU1IDAgMS0uNDUgMS0xdi02YzAtLjU1LS40NS0xLTEtMXptMC0xMEgzYy0uNTUgMC0xIC40NS0xIDF2NmMwIC41NS40NSAxIDEgMWgxN2MuNTUgMCAxLS40NSAxLTFWNGMwLS41NS0uNDUtMS0xLTF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idmlldy1hcnJheSI+PHBhdGggZD0iTTQgMThoM1Y1SDR2MTN6TTE4IDV2MTNoM1Y1aC0zek04IDE4aDlWNUg4djEzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InZpZXctY2Fyb3VzZWwiPjxwYXRoIGQ9Ik03IDE5aDEwVjRIN3YxNXptLTUtMmg0VjZIMnYxMXpNMTggNnYxMWg0VjZoLTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idmlldy1jb2x1bW4iPjxwYXRoIGQ9Ik0xMCAxOGg1VjVoLTV2MTN6bS02IDBoNVY1SDR2MTN6TTE2IDV2MTNoNVY1aC01eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InZpZXctZGF5Ij48cGF0aCBkPSJNMiAyMWgxOXYtM0gydjN6TTIwIDhIM2MtLjU1IDAtMSAuNDUtMSAxdjZjMCAuNTUuNDUgMSAxIDFoMTdjLjU1IDAgMS0uNDUgMS0xVjljMC0uNTUtLjQ1LTEtMS0xek0yIDN2M2gxOVYzSDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idmlldy1oZWFkbGluZSI+PHBhdGggZD0iTTQgMTVoMTZ2LTJINHYyem0wIDRoMTZ2LTJINHYyem0wLThoMTZWOUg0djJ6bTAtNnYyaDE2VjVINHoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWV3LWxpc3QiPjxwYXRoIGQ9Ik00IDE0aDR2LTRINHY0em0wIDVoNHYtNEg0djR6TTQgOWg0VjVINHY0em01IDVoMTJ2LTRIOXY0em0wIDVoMTJ2LTRIOXY0ek05IDV2NGgxMlY1SDl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idmlldy1tb2R1bGUiPjxwYXRoIGQ9Ik00IDExaDVWNUg0djZ6bTAgN2g1di02SDR2NnptNiAwaDV2LTZoLTV2NnptNiAwaDV2LTZoLTV2NnptLTYtN2g1VjVoLTV2NnptNi02djZoNVY1aC01eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InZpZXctcXVpbHQiPjxwYXRoIGQ9Ik0xMCAxOGg1di02aC01djZ6bS02IDBoNVY1SDR2MTN6bTEyIDBoNXYtNmgtNXY2ek0xMCA1djZoMTFWNUgxMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWV3LXN0cmVhbSI+PHBhdGggZD0iTTQgMThoMTd2LTZINHY2ek00IDV2NmgxN1Y1SDR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idmlldy13ZWVrIj48cGF0aCBkPSJNNiA1SDNjLS41NSAwLTEgLjQ1LTEgMXYxMmMwIC41NS40NSAxIDEgMWgzYy41NSAwIDEtLjQ1IDEtMVY2YzAtLjU1LS40NS0xLTEtMXptMTQgMGgtM2MtLjU1IDAtMSAuNDUtMSAxdjEyYzAgLjU1LjQ1IDEgMSAxaDNjLjU1IDAgMS0uNDUgMS0xVjZjMC0uNTUtLjQ1LTEtMS0xem0tNyAwaC0zYy0uNTUgMC0xIC40NS0xIDF2MTJjMCAuNTUuNDUgMSAxIDFoM2MuNTUgMCAxLS40NSAxLTFWNmMwLS41NS0uNDUtMS0xLTF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idmlzaWJpbGl0eSI+PHBhdGggZD0iTTEyIDQuNUM3IDQuNSAyLjczIDcuNjEgMSAxMmMxLjczIDQuMzkgNiA3LjUgMTEgNy41czkuMjctMy4xMSAxMS03LjVjLTEuNzMtNC4zOS02LTcuNS0xMS03LjV6TTEyIDE3Yy0yLjc2IDAtNS0yLjI0LTUtNXMyLjI0LTUgNS01IDUgMi4yNCA1IDUtMi4yNCA1LTUgNXptMC04Yy0xLjY2IDAtMyAxLjM0LTMgM3MxLjM0IDMgMyAzIDMtMS4zNCAzLTMtMS4zNC0zLTMtM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aXNpYmlsaXR5LW9mZiI+PHBhdGggZD0iTTEyIDdjMi43NiAwIDUgMi4yNCA1IDUgMCAuNjUtLjEzIDEuMjYtLjM2IDEuODNsMi45MiAyLjkyYzEuNTEtMS4yNiAyLjctMi44OSAzLjQzLTQuNzUtMS43My00LjM5LTYtNy41LTExLTcuNS0xLjQgMC0yLjc0LjI1LTMuOTguN2wyLjE2IDIuMTZDMTAuNzQgNy4xMyAxMS4zNSA3IDEyIDd6TTIgNC4yN2wyLjI4IDIuMjguNDYuNDZDMy4wOCA4LjMgMS43OCAxMC4wMiAxIDEyYzEuNzMgNC4zOSA2IDcuNSAxMSA3LjUgMS41NSAwIDMuMDMtLjMgNC4zOC0uODRsLjQyLjQyTDE5LjczIDIyIDIxIDIwLjczIDMuMjcgMyAyIDQuMjd6TTcuNTMgOS44bDEuNTUgMS41NWMtLjA1LjIxLS4wOC40My0uMDguNjUgMCAxLjY2IDEuMzQgMyAzIDMgLjIyIDAgLjQ0LS4wMy42NS0uMDhsMS41NSAxLjU1Yy0uNjcuMzMtMS40MS41My0yLjIuNTMtMi43NiAwLTUtMi4yNC01LTUgMC0uNzkuMi0xLjUzLjUzLTIuMnptNC4zMS0uNzhsMy4xNSAzLjE1LjAyLS4xNmMwLTEuNjYtMS4zNC0zLTMtM2wtLjE3LjAxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Indhcm5pbmciPjxwYXRoIGQ9Ik0xIDIxaDIyTDEyIDIgMSAyMXptMTItM2gtMnYtMmgydjJ6bTAtNGgtMnYtNGgydjR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0id2F0Y2gtbGF0ZXIiPjxwYXRoIGQ9Ik0xMiAyQzYuNSAyIDIgNi41IDIgMTJzNC41IDEwIDEwIDEwIDEwLTQuNSAxMC0xMFMxNy41IDIgMTIgMnptNC4yIDE0LjJMMTEgMTNWN2gxLjV2NS4ybDQuNSAyLjctLjggMS4zeiI+PC9wYXRoPjwvZz4KPGcgaWQ9IndlZWtlbmQiPjxwYXRoIGQ9Ik0yMSAxMGMtMS4xIDAtMiAuOS0yIDJ2M0g1di0zYzAtMS4xLS45LTItMi0ycy0yIC45LTIgMnY1YzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJ2LTVjMC0xLjEtLjktMi0yLTJ6bS0zLTVINmMtMS4xIDAtMiAuOS0yIDJ2Mi4xNWMxLjE2LjQxIDIgMS41MSAyIDIuODJWMTRoMTJ2LTIuMDNjMC0xLjMuODQtMi40IDItMi44MlY3YzAtMS4xLS45LTItMi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9IndvcmsiPjxwYXRoIGQ9Ik0yMCA2aC00VjRjMC0xLjExLS44OS0yLTItMmgtNGMtMS4xMSAwLTIgLjg5LTIgMnYySDRjLTEuMTEgMC0xLjk5Ljg5LTEuOTkgMkwyIDE5YzAgMS4xMS44OSAyIDIgMmgxNmMxLjExIDAgMi0uODkgMi0yVjhjMC0xLjExLS44OS0yLTItMnptLTYgMGgtNFY0aDR2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ5b3V0dWJlLXNlYXJjaGVkLWZvciI+PHBhdGggZD0iTTE3LjAxIDE0aC0uOGwtLjI3LS4yN2MuOTgtMS4xNCAxLjU3LTIuNjEgMS41Ny00LjIzIDAtMy41OS0yLjkxLTYuNS02LjUtNi41cy02LjUgMy02LjUgNi41SDJsMy44NCA0IDQuMTYtNEg2LjUxQzYuNTEgNyA4LjUzIDUgMTEuMDEgNXM0LjUgMi4wMSA0LjUgNC41YzAgMi40OC0yLjAyIDQuNS00LjUgNC41LS42NSAwLTEuMjYtLjE0LTEuODItLjM4TDcuNzEgMTUuMWMuOTcuNTcgMi4wOS45IDMuMy45IDEuNjEgMCAzLjA4LS41OSA0LjIyLTEuNTdsLjI3LjI3di43OWw1LjAxIDQuOTlMMjIgMTlsLTQuOTktNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ6b29tLWluIj48cGF0aCBkPSJNMTUuNSAxNGgtLjc5bC0uMjgtLjI3QzE1LjQxIDEyLjU5IDE2IDExLjExIDE2IDkuNSAxNiA1LjkxIDEzLjA5IDMgOS41IDNTMyA1LjkxIDMgOS41IDUuOTEgMTYgOS41IDE2YzEuNjEgMCAzLjA5LS41OSA0LjIzLTEuNTdsLjI3LjI4di43OWw1IDQuOTlMMjAuNDkgMTlsLTQuOTktNXptLTYgMEM3LjAxIDE0IDUgMTEuOTkgNSA5LjVTNy4wMSA1IDkuNSA1IDE0IDcuMDEgMTQgOS41IDExLjk5IDE0IDkuNSAxNHptMi41LTRoLTJ2Mkg5di0ySDdWOWgyVjdoMXYyaDJ2MXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ6b29tLW91dCI+PHBhdGggZD0iTTE1LjUgMTRoLS43OWwtLjI4LS4yN0MxNS40MSAxMi41OSAxNiAxMS4xMSAxNiA5LjUgMTYgNS45MSAxMy4wOSAzIDkuNSAzUzMgNS45MSAzIDkuNSA1LjkxIDE2IDkuNSAxNmMxLjYxIDAgMy4wOS0uNTkgNC4yMy0xLjU3bC4yNy4yOHYuNzlsNSA0Ljk5TDIwLjQ5IDE5bC00Ljk5LTV6bS02IDBDNy4wMSAxNCA1IDExLjk5IDUgOS41UzcuMDEgNSA5LjUgNSAxNCA3LjAxIDE0IDkuNSAxMS45OSAxNCA5LjUgMTR6TTcgOWg1djFIN3oiPjwvcGF0aD48L2c+CjwvZGVmcz48L3N2Zz4KPC9pcm9uLWljb25zZXQtc3ZnPmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChTby5jb250ZW50KTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCnZhciBNbz17IlUrMDAwOCI6ImJhY2tzcGFjZSIsIlUrMDAwOSI6InRhYiIsIlUrMDAxQiI6ImVzYyIsIlUrMDAyMCI6InNwYWNlIiwiVSswMDdGIjoiZGVsIn0sRW89ezg6ImJhY2tzcGFjZSIsOToidGFiIiwxMzoiZW50ZXIiLDI3OiJlc2MiLDMzOiJwYWdldXAiLDM0OiJwYWdlZG93biIsMzU6ImVuZCIsMzY6ImhvbWUiLDMyOiJzcGFjZSIsMzc6ImxlZnQiLDM4OiJ1cCIsMzk6InJpZ2h0Iiw0MDoiZG93biIsNDY6ImRlbCIsMTA2OiIqIn0sVG89e3NoaWZ0OiJzaGlmdEtleSIsY3RybDoiY3RybEtleSIsYWx0OiJhbHRLZXkiLG1ldGE6Im1ldGFLZXkifSxDbz0vW2EtejAtOSpdLyxBbz0vVVwrLyxrbz0vXmFycm93LyxMbz0vXnNwYWNlKGJhcik/LyxQbz0vXmVzY2FwZSQvO2Z1bmN0aW9uIE5vKHQsZSl7dmFyIG49IiI7aWYodCl7dmFyIGk9dC50b0xvd2VyQ2FzZSgpOyIgIj09PWl8fExvLnRlc3QoaSk/bj0ic3BhY2UiOlBvLnRlc3QoaSk/bj0iZXNjIjoxPT1pLmxlbmd0aD9lJiYhQ28udGVzdChpKXx8KG49aSk6bj1rby50ZXN0KGkpP2kucmVwbGFjZSgiYXJyb3ciLCIiKToibXVsdGlwbHkiPT1pPyIqIjppfXJldHVybiBufWZ1bmN0aW9uIElvKHQsZSl7cmV0dXJuKGZ1bmN0aW9uIG4odCxlKXtyZXR1cm4gdC5rZXk/Tm8odC5rZXksZSk6dC5kZXRhaWwmJnQuZGV0YWlsLmtleT9Obyh0LmRldGFpbC5rZXksZSk6KGZ1bmN0aW9uIG4odCl7dmFyIGU9IiI7cmV0dXJuIHQmJih0IGluIE1vP2U9TW9bdF06QW8udGVzdCh0KT8odD1wYXJzZUludCh0LnJlcGxhY2UoIlUrIiwiMHgiKSwxNiksZT1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpLnRvTG93ZXJDYXNlKCkpOmU9dC50b0xvd2VyQ2FzZSgpKSxlfSkodC5rZXlJZGVudGlmaWVyKXx8KGZ1bmN0aW9uIGkodCl7dmFyIGU9IiI7cmV0dXJuIE51bWJlcih0KSYmKGU9dD49NjUmJnQ8PTkwP1N0cmluZy5mcm9tQ2hhckNvZGUoMzIrdCk6dD49MTEyJiZ0PD0xMjM/ImYiKyh0LTExMisxKTp0Pj00OCYmdDw9NTc/U3RyaW5nKHQtNDgpOnQ+PTk2JiZ0PD0xMDU/U3RyaW5nKHQtOTYpOkVvW3RdKSxlfSkodC5rZXlDb2RlKXx8IiJ9KShlLHQuaGFzTW9kaWZpZXJzKT09PXQua2V5JiYoIXQuaGFzTW9kaWZpZXJzfHwhIWUuc2hpZnRLZXk9PSEhdC5zaGlmdEtleSYmISFlLmN0cmxLZXk9PSEhdC5jdHJsS2V5JiYhIWUuYWx0S2V5PT0hIXQuYWx0S2V5JiYhIWUubWV0YUtleT09ISF0Lm1ldGFLZXkpfWZ1bmN0aW9uIE9vKHQpe3JldHVybiB0LnRyaW0oKS5zcGxpdCgiICIpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuKGZ1bmN0aW9uIGUodCl7cmV0dXJuIDE9PT10Lmxlbmd0aD97Y29tYm86dCxrZXk6dCxldmVudDoia2V5ZG93biJ9OnQuc3BsaXQoIisiKS5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5zcGxpdCgiOiIpLGk9blswXSxyPW5bMV07cmV0dXJuIGkgaW4gVG8/KHRbVG9baV1dPSEwLHQuaGFzTW9kaWZpZXJzPSEwKToodC5rZXk9aSx0LmV2ZW50PXJ8fCJrZXlkb3duIiksdH0pLHtjb21ibzp0LnNwbGl0KCI6Iikuc2hpZnQoKX0pfSkodCl9KSl9Y29uc3QgUm89e3Byb3BlcnRpZXM6e2tleUV2ZW50VGFyZ2V0Ont0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzfX0sc3RvcEtleWJvYXJkRXZlbnRQcm9wYWdhdGlvbjp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfYm91bmRLZXlIYW5kbGVyczp7dHlwZTpBcnJheSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX0sX2ltcGVyYXRpdmVLZXlCaW5kaW5nczp7dHlwZTpPYmplY3QsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm57fX19fSxvYnNlcnZlcnM6WyJfcmVzZXRLZXlFdmVudExpc3RlbmVycyhrZXlFdmVudFRhcmdldCwgX2JvdW5kS2V5SGFuZGxlcnMpIl0sa2V5QmluZGluZ3M6e30scmVnaXN0ZXJlZDpmdW5jdGlvbigpe3RoaXMuX3ByZXBLZXlCaW5kaW5ncygpfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX2xpc3RlbktleUV2ZW50TGlzdGVuZXJzKCl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fdW5saXN0ZW5LZXlFdmVudExpc3RlbmVycygpfSxhZGRPd25LZXlCaW5kaW5nOmZ1bmN0aW9uKHQsZSl7dGhpcy5faW1wZXJhdGl2ZUtleUJpbmRpbmdzW3RdPWUsdGhpcy5fcHJlcEtleUJpbmRpbmdzKCksdGhpcy5fcmVzZXRLZXlFdmVudExpc3RlbmVycygpfSxyZW1vdmVPd25LZXlCaW5kaW5nczpmdW5jdGlvbigpe3RoaXMuX2ltcGVyYXRpdmVLZXlCaW5kaW5ncz17fSx0aGlzLl9wcmVwS2V5QmluZGluZ3MoKSx0aGlzLl9yZXNldEtleUV2ZW50TGlzdGVuZXJzKCl9LGtleWJvYXJkRXZlbnRNYXRjaGVzS2V5czpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj1PbyhlKSxpPTA7aTxuLmxlbmd0aDsrK2kpaWYoSW8obltpXSx0KSlyZXR1cm4hMDtyZXR1cm4hMX0sX2NvbGxlY3RLZXlCaW5kaW5nczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuYmVoYXZpb3JzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5QmluZGluZ3N9KSk7cmV0dXJuLTE9PT10LmluZGV4T2YodGhpcy5rZXlCaW5kaW5ncykmJnQucHVzaCh0aGlzLmtleUJpbmRpbmdzKSx0fSxfcHJlcEtleUJpbmRpbmdzOmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuX2tleUJpbmRpbmdzPXt9LHRoaXMuX2NvbGxlY3RLZXlCaW5kaW5ncygpLmZvckVhY2goKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0KXRoaXMuX2FkZEtleUJpbmRpbmcoZSx0W2VdKX0pLHRoaXMpLHRoaXMuX2ltcGVyYXRpdmVLZXlCaW5kaW5ncyl0aGlzLl9hZGRLZXlCaW5kaW5nKHQsdGhpcy5faW1wZXJhdGl2ZUtleUJpbmRpbmdzW3RdKTtmb3IodmFyIGUgaW4gdGhpcy5fa2V5QmluZGluZ3MpdGhpcy5fa2V5QmluZGluZ3NbZV0uc29ydCgoZnVuY3Rpb24odCxlKXt2YXIgbj10WzBdLmhhc01vZGlmaWVycztyZXR1cm4gbj09PWVbMF0uaGFzTW9kaWZpZXJzPzA6bj8tMToxfSkpfSxfYWRkS2V5QmluZGluZzpmdW5jdGlvbih0LGUpe09vKHQpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3RoaXMuX2tleUJpbmRpbmdzW3QuZXZlbnRdPXRoaXMuX2tleUJpbmRpbmdzW3QuZXZlbnRdfHxbXSx0aGlzLl9rZXlCaW5kaW5nc1t0LmV2ZW50XS5wdXNoKFt0LGVdKX0pLHRoaXMpfSxfcmVzZXRLZXlFdmVudExpc3RlbmVyczpmdW5jdGlvbigpe3RoaXMuX3VubGlzdGVuS2V5RXZlbnRMaXN0ZW5lcnMoKSx0aGlzLmlzQXR0YWNoZWQmJnRoaXMuX2xpc3RlbktleUV2ZW50TGlzdGVuZXJzKCl9LF9saXN0ZW5LZXlFdmVudExpc3RlbmVyczpmdW5jdGlvbigpe3RoaXMua2V5RXZlbnRUYXJnZXQmJk9iamVjdC5rZXlzKHRoaXMuX2tleUJpbmRpbmdzKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9vbktleUJpbmRpbmdFdmVudC5iaW5kKHRoaXMsdGhpcy5fa2V5QmluZGluZ3NbdF0pO3RoaXMuX2JvdW5kS2V5SGFuZGxlcnMucHVzaChbdGhpcy5rZXlFdmVudFRhcmdldCx0LGVdKSx0aGlzLmtleUV2ZW50VGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIodCxlKX0pLHRoaXMpfSxfdW5saXN0ZW5LZXlFdmVudExpc3RlbmVyczpmdW5jdGlvbigpe2Zvcih2YXIgdDt0aGlzLl9ib3VuZEtleUhhbmRsZXJzLmxlbmd0aDspKHQ9dGhpcy5fYm91bmRLZXlIYW5kbGVycy5wb3AoKSlbMF0ucmVtb3ZlRXZlbnRMaXN0ZW5lcih0WzFdLHRbMl0pfSxfb25LZXlCaW5kaW5nRXZlbnQ6ZnVuY3Rpb24odCxlKXtpZih0aGlzLnN0b3BLZXlib2FyZEV2ZW50UHJvcGFnYXRpb24mJmUuc3RvcFByb3BhZ2F0aW9uKCksIWUuZGVmYXVsdFByZXZlbnRlZClmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9dFtuXVswXSxyPXRbbl1bMV07aWYoSW8oaSxlKSYmKHRoaXMuX3RyaWdnZXJLZXlIYW5kbGVyKGkscixlKSxlLmRlZmF1bHRQcmV2ZW50ZWQpKXJldHVybn19LF90cmlnZ2VyS2V5SGFuZGxlcjpmdW5jdGlvbih0LGUsbil7dmFyIGk9T2JqZWN0LmNyZWF0ZSh0KTtpLmtleWJvYXJkRXZlbnQ9bjt2YXIgcj1uZXcgQ3VzdG9tRXZlbnQodC5ldmVudCx7ZGV0YWlsOmksY2FuY2VsYWJsZTohMH0pO3RoaXNbZV0uY2FsbCh0aGlzLHIpLHIuZGVmYXVsdFByZXZlbnRlZCYmbi5wcmV2ZW50RGVmYXVsdCgpfX0sem89e3Byb3BlcnRpZXM6e3Njcm9sbFRhcmdldDp7dHlwZTpIVE1MRWxlbWVudCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWZhdWx0U2Nyb2xsVGFyZ2V0fX19LG9ic2VydmVyczpbIl9zY3JvbGxUYXJnZXRDaGFuZ2VkKHNjcm9sbFRhcmdldCwgaXNBdHRhY2hlZCkiXSxfc2hvdWxkSGF2ZUxpc3RlbmVyOiEwLF9zY3JvbGxUYXJnZXRDaGFuZ2VkOmZ1bmN0aW9uKHQsZSl7aWYodGhpcy5fb2xkU2Nyb2xsVGFyZ2V0JiYodGhpcy5fdG9nZ2xlU2Nyb2xsTGlzdGVuZXIoITEsdGhpcy5fb2xkU2Nyb2xsVGFyZ2V0KSx0aGlzLl9vbGRTY3JvbGxUYXJnZXQ9bnVsbCksZSlpZigiZG9jdW1lbnQiPT09dCl0aGlzLnNjcm9sbFRhcmdldD10aGlzLl9kb2M7ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIHQpe3ZhciBuPXRoaXMuZG9tSG9zdDt0aGlzLnNjcm9sbFRhcmdldD1uJiZuLiQ/bi4kW3RdOnFpKHRoaXMub3duZXJEb2N1bWVudCkucXVlcnlTZWxlY3RvcigiIyIrdCl9ZWxzZSB0aGlzLl9pc1ZhbGlkU2Nyb2xsVGFyZ2V0KCkmJih0aGlzLl9vbGRTY3JvbGxUYXJnZXQ9dCx0aGlzLl90b2dnbGVTY3JvbGxMaXN0ZW5lcih0aGlzLl9zaG91bGRIYXZlTGlzdGVuZXIsdCkpfSxfc2Nyb2xsSGFuZGxlcjpmdW5jdGlvbiB0KCl7fSxnZXQgX2RlZmF1bHRTY3JvbGxUYXJnZXQoKXtyZXR1cm4gdGhpcy5fZG9jfSxnZXQgX2RvYygpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fSxnZXQgX3Njcm9sbFRvcCgpe3JldHVybiB0aGlzLl9pc1ZhbGlkU2Nyb2xsVGFyZ2V0KCk/dGhpcy5zY3JvbGxUYXJnZXQ9PT10aGlzLl9kb2M/d2luZG93LnBhZ2VZT2Zmc2V0OnRoaXMuc2Nyb2xsVGFyZ2V0LnNjcm9sbFRvcDowfSxnZXQgX3Njcm9sbExlZnQoKXtyZXR1cm4gdGhpcy5faXNWYWxpZFNjcm9sbFRhcmdldCgpP3RoaXMuc2Nyb2xsVGFyZ2V0PT09dGhpcy5fZG9jP3dpbmRvdy5wYWdlWE9mZnNldDp0aGlzLnNjcm9sbFRhcmdldC5zY3JvbGxMZWZ0OjB9LHNldCBfc2Nyb2xsVG9wKHQpe3RoaXMuc2Nyb2xsVGFyZ2V0PT09dGhpcy5fZG9jP3dpbmRvdy5zY3JvbGxUbyh3aW5kb3cucGFnZVhPZmZzZXQsdCk6dGhpcy5faXNWYWxpZFNjcm9sbFRhcmdldCgpJiYodGhpcy5zY3JvbGxUYXJnZXQuc2Nyb2xsVG9wPXQpfSxzZXQgX3Njcm9sbExlZnQodCl7dGhpcy5zY3JvbGxUYXJnZXQ9PT10aGlzLl9kb2M/d2luZG93LnNjcm9sbFRvKHQsd2luZG93LnBhZ2VZT2Zmc2V0KTp0aGlzLl9pc1ZhbGlkU2Nyb2xsVGFyZ2V0KCkmJih0aGlzLnNjcm9sbFRhcmdldC5zY3JvbGxMZWZ0PXQpfSxzY3JvbGw6ZnVuY3Rpb24odCxlKXt2YXIgbjsib2JqZWN0Ij09dHlwZW9mIHQ/KG49dC5sZWZ0LGU9dC50b3ApOm49dCxuPW58fDAsZT1lfHwwLHRoaXMuc2Nyb2xsVGFyZ2V0PT09dGhpcy5fZG9jP3dpbmRvdy5zY3JvbGxUbyhuLGUpOnRoaXMuX2lzVmFsaWRTY3JvbGxUYXJnZXQoKSYmKHRoaXMuc2Nyb2xsVGFyZ2V0LnNjcm9sbExlZnQ9bix0aGlzLnNjcm9sbFRhcmdldC5zY3JvbGxUb3A9ZSl9LGdldCBfc2Nyb2xsVGFyZ2V0V2lkdGgoKXtyZXR1cm4gdGhpcy5faXNWYWxpZFNjcm9sbFRhcmdldCgpP3RoaXMuc2Nyb2xsVGFyZ2V0PT09dGhpcy5fZG9jP3dpbmRvdy5pbm5lcldpZHRoOnRoaXMuc2Nyb2xsVGFyZ2V0Lm9mZnNldFdpZHRoOjB9LGdldCBfc2Nyb2xsVGFyZ2V0SGVpZ2h0KCl7cmV0dXJuIHRoaXMuX2lzVmFsaWRTY3JvbGxUYXJnZXQoKT90aGlzLnNjcm9sbFRhcmdldD09PXRoaXMuX2RvYz93aW5kb3cuaW5uZXJIZWlnaHQ6dGhpcy5zY3JvbGxUYXJnZXQub2Zmc2V0SGVpZ2h0OjB9LF9pc1ZhbGlkU2Nyb2xsVGFyZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2Nyb2xsVGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnR9LF90b2dnbGVTY3JvbGxMaXN0ZW5lcjpmdW5jdGlvbih0LGUpe3ZhciBuPWU9PT10aGlzLl9kb2M/d2luZG93OmU7dD90aGlzLl9ib3VuZFNjcm9sbEhhbmRsZXJ8fCh0aGlzLl9ib3VuZFNjcm9sbEhhbmRsZXI9dGhpcy5fc2Nyb2xsSGFuZGxlci5iaW5kKHRoaXMpLG4uYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIix0aGlzLl9ib3VuZFNjcm9sbEhhbmRsZXIpKTp0aGlzLl9ib3VuZFNjcm9sbEhhbmRsZXImJihuLnJlbW92ZUV2ZW50TGlzdGVuZXIoInNjcm9sbCIsdGhpcy5fYm91bmRTY3JvbGxIYW5kbGVyKSx0aGlzLl9ib3VuZFNjcm9sbEhhbmRsZXI9bnVsbCl9LHRvZ2dsZVNjcm9sbExpc3RlbmVyOmZ1bmN0aW9uKHQpe3RoaXMuX3Nob3VsZEhhdmVMaXN0ZW5lcj10LHRoaXMuX3RvZ2dsZVNjcm9sbExpc3RlbmVyKHQsdGhpcy5zY3JvbGxUYXJnZXQpfX07Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNiBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTYgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KdmFyIERvPW5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQKD86aG9uZXxhZDsoPzogVTspPyBDUFUpIE9TIChcZCspLyksQm89RG8mJkRvWzFdPj04LEhvPSItMTAwMDBweCIsRm89LTEwMDtJcih7X3RlbXBsYXRlOl9lYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKC13ZWJraXQtbWF4LWRldmljZS1waXhlbC1yYXRpbzogMSkgewogICAgICAgIDpob3N0IHsKICAgICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgICAgfQogICAgICB9CgogICAgICAjaXRlbXMgewogICAgICAgIEBhcHBseSAtLWlyb24tbGlzdC1pdGVtcy1jb250YWluZXI7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICA6aG9zdCg6bm90KFtncmlkXSkpICNpdGVtcyA+IDo6c2xvdHRlZCgqKSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgICNpdGVtcyA+IDo6c2xvdHRlZCgqKSB7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxhcnJheS1zZWxlY3RvciBpZD0ic2VsZWN0b3IiIGl0ZW1zPSJ7e2l0ZW1zfX0iIHNlbGVjdGVkPSJ7e3NlbGVjdGVkSXRlbXN9fSIgc2VsZWN0ZWQtaXRlbT0ie3tzZWxlY3RlZEl0ZW19fSI+PC9hcnJheS1zZWxlY3Rvcj4KCiAgICA8ZGl2IGlkPSJpdGVtcyI+CiAgICAgIDxzbG90Pjwvc2xvdD4KICAgIDwvZGl2PgpgLGlzOiJpcm9uLWxpc3QiLHByb3BlcnRpZXM6e2l0ZW1zOnt0eXBlOkFycmF5fSxhczp7dHlwZTpTdHJpbmcsdmFsdWU6Iml0ZW0ifSxpbmRleEFzOnt0eXBlOlN0cmluZyx2YWx1ZToiaW5kZXgifSxzZWxlY3RlZEFzOnt0eXBlOlN0cmluZyx2YWx1ZToic2VsZWN0ZWQifSxncmlkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVmbGVjdFRvQXR0cmlidXRlOiEwLG9ic2VydmVyOiJfZ3JpZENoYW5nZWQifSxzZWxlY3Rpb25FbmFibGVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHNlbGVjdGVkSXRlbTp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSxzZWxlY3RlZEl0ZW1zOnt0eXBlOk9iamVjdCxub3RpZnk6ITB9LG11bHRpU2VsZWN0aW9uOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHNjcm9sbE9mZnNldDp7dHlwZTpOdW1iZXIsdmFsdWU6MH19LG9ic2VydmVyczpbIl9pdGVtc0NoYW5nZWQoaXRlbXMuKikiLCJfc2VsZWN0aW9uRW5hYmxlZENoYW5nZWQoc2VsZWN0aW9uRW5hYmxlZCkiLCJfbXVsdGlTZWxlY3Rpb25DaGFuZ2VkKG11bHRpU2VsZWN0aW9uKSIsIl9zZXRPdmVyZmxvdyhzY3JvbGxUYXJnZXQsIHNjcm9sbE9mZnNldCkiXSxiZWhhdmlvcnM6W0tyLG1vLHpvLGhvXSxfcmF0aW86LjUsX3Njcm9sbGVyUGFkZGluZ1RvcDowLF9zY3JvbGxQb3NpdGlvbjowLF9waHlzaWNhbFNpemU6MCxfcGh5c2ljYWxBdmVyYWdlOjAsX3BoeXNpY2FsQXZlcmFnZUNvdW50OjAsX3BoeXNpY2FsVG9wOjAsX3ZpcnR1YWxDb3VudDowLF9lc3RTY3JvbGxIZWlnaHQ6MCxfc2Nyb2xsSGVpZ2h0OjAsX3ZpZXdwb3J0SGVpZ2h0OjAsX3ZpZXdwb3J0V2lkdGg6MCxfcGh5c2ljYWxJdGVtczpudWxsLF9waHlzaWNhbFNpemVzOm51bGwsX2ZpcnN0VmlzaWJsZUluZGV4VmFsOm51bGwsX2xhc3RWaXNpYmxlSW5kZXhWYWw6bnVsbCxfbWF4UGFnZXM6MixfZm9jdXNlZEl0ZW06bnVsbCxfZm9jdXNlZFZpcnR1YWxJbmRleDotMSxfZm9jdXNlZFBoeXNpY2FsSW5kZXg6LTEsX29mZnNjcmVlbkZvY3VzZWRJdGVtOm51bGwsX2ZvY3VzQmFja2ZpbGxJdGVtOm51bGwsX2l0ZW1zUGVyUm93OjEsX2l0ZW1XaWR0aDowLF9yb3dIZWlnaHQ6MCxfdGVtcGxhdGVDb3N0OjAsX3BhcmVudE1vZGVsOiEwLGdldCBfcGh5c2ljYWxCb3R0b20oKXtyZXR1cm4gdGhpcy5fcGh5c2ljYWxUb3ArdGhpcy5fcGh5c2ljYWxTaXplfSxnZXQgX3Njcm9sbEJvdHRvbSgpe3JldHVybiB0aGlzLl9zY3JvbGxQb3NpdGlvbit0aGlzLl92aWV3cG9ydEhlaWdodH0sZ2V0IF92aXJ0dWFsRW5kKCl7cmV0dXJuIHRoaXMuX3ZpcnR1YWxTdGFydCt0aGlzLl9waHlzaWNhbENvdW50LTF9LGdldCBfaGlkZGVuQ29udGVudFNpemUoKXtyZXR1cm4odGhpcy5ncmlkP3RoaXMuX3BoeXNpY2FsUm93cyp0aGlzLl9yb3dIZWlnaHQ6dGhpcy5fcGh5c2ljYWxTaXplKS10aGlzLl92aWV3cG9ydEhlaWdodH0sZ2V0IF9pdGVtc1BhcmVudCgpe3JldHVybiBxaShxaSh0aGlzLl91c2VyVGVtcGxhdGUpLnBhcmVudE5vZGUpfSxnZXQgX21heFNjcm9sbFRvcCgpe3JldHVybiB0aGlzLl9lc3RTY3JvbGxIZWlnaHQtdGhpcy5fdmlld3BvcnRIZWlnaHQrdGhpcy5fc2Nyb2xsT2Zmc2V0fSxnZXQgX21heFZpcnR1YWxTdGFydCgpe3ZhciB0PXRoaXMuX2NvbnZlcnRJbmRleFRvQ29tcGxldGVSb3codGhpcy5fdmlydHVhbENvdW50KTtyZXR1cm4gTWF0aC5tYXgoMCx0LXRoaXMuX3BoeXNpY2FsQ291bnQpfSxzZXQgX3ZpcnR1YWxTdGFydCh0KXt0PXRoaXMuX2NsYW1wKHQsMCx0aGlzLl9tYXhWaXJ0dWFsU3RhcnQpLHRoaXMuZ3JpZCYmKHQtPXQldGhpcy5faXRlbXNQZXJSb3cpLHRoaXMuX3ZpcnR1YWxTdGFydFZhbD10fSxnZXQgX3ZpcnR1YWxTdGFydCgpe3JldHVybiB0aGlzLl92aXJ0dWFsU3RhcnRWYWx8fDB9LHNldCBfcGh5c2ljYWxTdGFydCh0KXsodCU9dGhpcy5fcGh5c2ljYWxDb3VudCk8MCYmKHQ9dGhpcy5fcGh5c2ljYWxDb3VudCt0KSx0aGlzLmdyaWQmJih0LT10JXRoaXMuX2l0ZW1zUGVyUm93KSx0aGlzLl9waHlzaWNhbFN0YXJ0VmFsPXR9LGdldCBfcGh5c2ljYWxTdGFydCgpe3JldHVybiB0aGlzLl9waHlzaWNhbFN0YXJ0VmFsfHwwfSxnZXQgX3BoeXNpY2FsRW5kKCl7cmV0dXJuKHRoaXMuX3BoeXNpY2FsU3RhcnQrdGhpcy5fcGh5c2ljYWxDb3VudC0xKSV0aGlzLl9waHlzaWNhbENvdW50fSxzZXQgX3BoeXNpY2FsQ291bnQodCl7dGhpcy5fcGh5c2ljYWxDb3VudFZhbD10fSxnZXQgX3BoeXNpY2FsQ291bnQoKXtyZXR1cm4gdGhpcy5fcGh5c2ljYWxDb3VudFZhbHx8MH0sZ2V0IF9vcHRQaHlzaWNhbFNpemUoKXtyZXR1cm4gMD09PXRoaXMuX3ZpZXdwb3J0SGVpZ2h0PzEvMDp0aGlzLl92aWV3cG9ydEhlaWdodCp0aGlzLl9tYXhQYWdlc30sZ2V0IF9pc1Zpc2libGUoKXtyZXR1cm4gQm9vbGVhbih0aGlzLm9mZnNldFdpZHRofHx0aGlzLm9mZnNldEhlaWdodCl9LGdldCBmaXJzdFZpc2libGVJbmRleCgpe3ZhciB0PXRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsO2lmKG51bGw9PXQpe3ZhciBlPXRoaXMuX3BoeXNpY2FsVG9wK3RoaXMuX3Njcm9sbE9mZnNldDt0PXRoaXMuX2l0ZXJhdGVJdGVtcygoZnVuY3Rpb24odCxuKXtyZXR1cm4oZSs9dGhpcy5fZ2V0UGh5c2ljYWxTaXplSW5jcmVtZW50KHQpKT50aGlzLl9zY3JvbGxQb3NpdGlvbj90aGlzLmdyaWQ/bi1uJXRoaXMuX2l0ZW1zUGVyUm93Om46dGhpcy5ncmlkJiZ0aGlzLl92aXJ0dWFsQ291bnQtMT09PW4/bi1uJXRoaXMuX2l0ZW1zUGVyUm93OnZvaWQgMH0pKXx8MCx0aGlzLl9maXJzdFZpc2libGVJbmRleFZhbD10fXJldHVybiB0fSxnZXQgbGFzdFZpc2libGVJbmRleCgpe3ZhciB0PXRoaXMuX2xhc3RWaXNpYmxlSW5kZXhWYWw7aWYobnVsbD09dCl7aWYodGhpcy5ncmlkKXQ9TWF0aC5taW4odGhpcy5fdmlydHVhbENvdW50LHRoaXMuZmlyc3RWaXNpYmxlSW5kZXgrdGhpcy5fZXN0Um93c0luVmlldyp0aGlzLl9pdGVtc1BlclJvdy0xKTtlbHNle3ZhciBlPXRoaXMuX3BoeXNpY2FsVG9wK3RoaXMuX3Njcm9sbE9mZnNldDt0aGlzLl9pdGVyYXRlSXRlbXMoKGZ1bmN0aW9uKG4saSl7ZTx0aGlzLl9zY3JvbGxCb3R0b20mJih0PWkpLGUrPXRoaXMuX2dldFBoeXNpY2FsU2l6ZUluY3JlbWVudChuKX0pKX10aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPXR9cmV0dXJuIHR9LGdldCBfZGVmYXVsdFNjcm9sbFRhcmdldCgpe3JldHVybiB0aGlzfSxnZXQgX3ZpcnR1YWxSb3dDb3VudCgpe3JldHVybiBNYXRoLmNlaWwodGhpcy5fdmlydHVhbENvdW50L3RoaXMuX2l0ZW1zUGVyUm93KX0sZ2V0IF9lc3RSb3dzSW5WaWV3KCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLl92aWV3cG9ydEhlaWdodC90aGlzLl9yb3dIZWlnaHQpfSxnZXQgX3BoeXNpY2FsUm93cygpe3JldHVybiBNYXRoLmNlaWwodGhpcy5fcGh5c2ljYWxDb3VudC90aGlzLl9pdGVtc1BlclJvdyl9LGdldCBfc2Nyb2xsT2Zmc2V0KCl7cmV0dXJuIHRoaXMuX3Njcm9sbGVyUGFkZGluZ1RvcCt0aGlzLnNjcm9sbE9mZnNldH0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLl9kaWRGb2N1cy5iaW5kKHRoaXMpLCEwKX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9kZWJvdW5jZSgiX3JlbmRlciIsdGhpcy5fcmVuZGVyLF90KSx0aGlzLmxpc3Rlbih0aGlzLCJpcm9uLXJlc2l6ZSIsIl9yZXNpemVIYW5kbGVyIiksdGhpcy5saXN0ZW4odGhpcywia2V5ZG93biIsIl9rZXlkb3duSGFuZGxlciIpfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMudW5saXN0ZW4odGhpcywiaXJvbi1yZXNpemUiLCJfcmVzaXplSGFuZGxlciIpLHRoaXMudW5saXN0ZW4odGhpcywia2V5ZG93biIsIl9rZXlkb3duSGFuZGxlciIpfSxfc2V0T3ZlcmZsb3c6ZnVuY3Rpb24odCl7dGhpcy5zdHlsZS53ZWJraXRPdmVyZmxvd1Njcm9sbGluZz10PT09dGhpcz8idG91Y2giOiIiLHRoaXMuc3R5bGUub3ZlcmZsb3dZPXQ9PT10aGlzPyJhdXRvIjoiIix0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGwsdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9kZWJvdW5jZSgiX3JlbmRlciIsdGhpcy5fcmVuZGVyLF90KX0sdXBkYXRlVmlld3BvcnRCb3VuZGFyaWVzOmZ1bmN0aW9uKCl7dmFyIHQ9d2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcyk7dGhpcy5fc2Nyb2xsZXJQYWRkaW5nVG9wPXRoaXMuc2Nyb2xsVGFyZ2V0PT09dGhpcz8wOnBhcnNlSW50KHRbInBhZGRpbmctdG9wIl0sMTApLHRoaXMuX2lzUlRMPUJvb2xlYW4oInJ0bCI9PT10LmRpcmVjdGlvbiksdGhpcy5fdmlld3BvcnRXaWR0aD10aGlzLiQuaXRlbXMub2Zmc2V0V2lkdGgsdGhpcy5fdmlld3BvcnRIZWlnaHQ9dGhpcy5fc2Nyb2xsVGFyZ2V0SGVpZ2h0LHRoaXMuZ3JpZCYmdGhpcy5fdXBkYXRlR3JpZE1ldHJpY3MoKX0sX3Njcm9sbEhhbmRsZXI6ZnVuY3Rpb24oKXt2YXIgdD1NYXRoLm1heCgwLE1hdGgubWluKHRoaXMuX21heFNjcm9sbFRvcCx0aGlzLl9zY3JvbGxUb3ApKSxlPXQtdGhpcy5fc2Nyb2xsUG9zaXRpb24sbj1lPj0wO2lmKHRoaXMuX3Njcm9sbFBvc2l0aW9uPXQsdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGwsTWF0aC5hYnMoZSk+dGhpcy5fcGh5c2ljYWxTaXplJiZ0aGlzLl9waHlzaWNhbFNpemU+MCl7ZS09dGhpcy5fc2Nyb2xsT2Zmc2V0O3ZhciBpPU1hdGgucm91bmQoZS90aGlzLl9waHlzaWNhbEF2ZXJhZ2UpKnRoaXMuX2l0ZW1zUGVyUm93O3RoaXMuX3ZpcnR1YWxTdGFydD10aGlzLl92aXJ0dWFsU3RhcnQraSx0aGlzLl9waHlzaWNhbFN0YXJ0PXRoaXMuX3BoeXNpY2FsU3RhcnQraSx0aGlzLl9waHlzaWNhbFRvcD1NYXRoLm1pbihNYXRoLmZsb29yKHRoaXMuX3ZpcnR1YWxTdGFydC90aGlzLl9pdGVtc1BlclJvdykqdGhpcy5fcGh5c2ljYWxBdmVyYWdlLHRoaXMuX3Njcm9sbFBvc2l0aW9uKSx0aGlzLl91cGRhdGUoKX1lbHNlIGlmKHRoaXMuX3BoeXNpY2FsQ291bnQ+MCl7dmFyIHI9dGhpcy5fZ2V0UmV1c2FibGVzKG4pO24/KHRoaXMuX3BoeXNpY2FsVG9wPXIucGh5c2ljYWxUb3AsdGhpcy5fdmlydHVhbFN0YXJ0PXRoaXMuX3ZpcnR1YWxTdGFydCtyLmluZGV4ZXMubGVuZ3RoLHRoaXMuX3BoeXNpY2FsU3RhcnQ9dGhpcy5fcGh5c2ljYWxTdGFydCtyLmluZGV4ZXMubGVuZ3RoKToodGhpcy5fdmlydHVhbFN0YXJ0PXRoaXMuX3ZpcnR1YWxTdGFydC1yLmluZGV4ZXMubGVuZ3RoLHRoaXMuX3BoeXNpY2FsU3RhcnQ9dGhpcy5fcGh5c2ljYWxTdGFydC1yLmluZGV4ZXMubGVuZ3RoKSx0aGlzLl91cGRhdGUoci5pbmRleGVzLG4/bnVsbDpyLmluZGV4ZXMpLHRoaXMuX2RlYm91bmNlKCJfaW5jcmVhc2VQb29sSWZOZWVkZWQiLHRoaXMuX2luY3JlYXNlUG9vbElmTmVlZGVkLmJpbmQodGhpcywwKSx2dCl9fSxfZ2V0UmV1c2FibGVzOmZ1bmN0aW9uKHQpe3ZhciBlLG4saSxyPVtdLG89dGhpcy5faGlkZGVuQ29udGVudFNpemUqdGhpcy5fcmF0aW8sYT10aGlzLl92aXJ0dWFsU3RhcnQscz10aGlzLl92aXJ0dWFsRW5kLGw9dGhpcy5fcGh5c2ljYWxDb3VudCxjPXRoaXMuX3BoeXNpY2FsVG9wK3RoaXMuX3Njcm9sbE9mZnNldCx1PXRoaXMuX3Njcm9sbFBvc2l0aW9uLGg9dGhpcy5fc2Nyb2xsQm90dG9tO2Zvcih0PyhlPXRoaXMuX3BoeXNpY2FsU3RhcnQsbj11LWMpOihlPXRoaXMuX3BoeXNpY2FsRW5kLG49dGhpcy5fcGh5c2ljYWxCb3R0b20rdGhpcy5fc2Nyb2xsT2Zmc2V0LWgpO24tPWk9dGhpcy5fZ2V0UGh5c2ljYWxTaXplSW5jcmVtZW50KGUpLCEoci5sZW5ndGg+PWx8fG48PW8pOylpZih0KXtpZihzK3IubGVuZ3RoKzE+PXRoaXMuX3ZpcnR1YWxDb3VudClicmVhaztpZihjK2k+PXUtdGhpcy5fc2Nyb2xsT2Zmc2V0KWJyZWFrO3IucHVzaChlKSxjKz1pLGU9KGUrMSklbH1lbHNle2lmKGEtci5sZW5ndGg8PTApYnJlYWs7aWYoYyt0aGlzLl9waHlzaWNhbFNpemUtaTw9aClicmVhaztyLnB1c2goZSksYy09aSxlPTA9PT1lP2wtMTplLTF9cmV0dXJue2luZGV4ZXM6cixwaHlzaWNhbFRvcDpjLXRoaXMuX3Njcm9sbE9mZnNldH19LF91cGRhdGU6ZnVuY3Rpb24odCxlKXtpZighKHQmJjA9PT10Lmxlbmd0aHx8MD09PXRoaXMuX3BoeXNpY2FsQ291bnQpKXtpZih0aGlzLl9tYW5hZ2VGb2N1cygpLHRoaXMuX2Fzc2lnbk1vZGVscyh0KSx0aGlzLl91cGRhdGVNZXRyaWNzKHQpLGUpZm9yKDtlLmxlbmd0aDspe3ZhciBuPWUucG9wKCk7dGhpcy5fcGh5c2ljYWxUb3AtPXRoaXMuX2dldFBoeXNpY2FsU2l6ZUluY3JlbWVudChuKX10aGlzLl9wb3NpdGlvbkl0ZW1zKCksdGhpcy5fdXBkYXRlU2Nyb2xsZXJTaXplKCl9fSxfY3JlYXRlUG9vbDpmdW5jdGlvbih0KXt2YXIgZSxuO3RoaXMuX2Vuc3VyZVRlbXBsYXRpemVkKCk7dmFyIGk9bmV3IEFycmF5KHQpO2ZvcihlPTA7ZTx0O2UrKyluPXRoaXMuc3RhbXAobnVsbCksaVtlXT1uLnJvb3QucXVlcnlTZWxlY3RvcigiKiIpLHRoaXMuX2l0ZW1zUGFyZW50LmFwcGVuZENoaWxkKG4ucm9vdCk7cmV0dXJuIGl9LF9pc0NsaWVudEZ1bGw6ZnVuY3Rpb24oKXtyZXR1cm4gMCE9dGhpcy5fc2Nyb2xsQm90dG9tJiZ0aGlzLl9waHlzaWNhbEJvdHRvbS0xPj10aGlzLl9zY3JvbGxCb3R0b20mJnRoaXMuX3BoeXNpY2FsVG9wPD10aGlzLl9zY3JvbGxQb3NpdGlvbn0sX2luY3JlYXNlUG9vbElmTmVlZGVkOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2NsYW1wKHRoaXMuX3BoeXNpY2FsQ291bnQrdCwzLHRoaXMuX3ZpcnR1YWxDb3VudC10aGlzLl92aXJ0dWFsU3RhcnQpO2lmKGU9dGhpcy5fY29udmVydEluZGV4VG9Db21wbGV0ZVJvdyhlKSx0aGlzLmdyaWQpe3ZhciBuPWUldGhpcy5faXRlbXNQZXJSb3c7biYmZS1uPD10aGlzLl9waHlzaWNhbENvdW50JiYoZSs9dGhpcy5faXRlbXNQZXJSb3cpLGUtPW59dmFyIGk9ZS10aGlzLl9waHlzaWNhbENvdW50LHI9TWF0aC5yb3VuZCguNSp0aGlzLl9waHlzaWNhbENvdW50KTtpZighKGk8MCkpe2lmKGk+MCl7dmFyIG89d2luZG93LnBlcmZvcm1hbmNlLm5vdygpO1tdLnB1c2guYXBwbHkodGhpcy5fcGh5c2ljYWxJdGVtcyx0aGlzLl9jcmVhdGVQb29sKGkpKTtmb3IodmFyIGE9MDthPGk7YSsrKXRoaXMuX3BoeXNpY2FsU2l6ZXMucHVzaCgwKTt0aGlzLl9waHlzaWNhbENvdW50PXRoaXMuX3BoeXNpY2FsQ291bnQraSx0aGlzLl9waHlzaWNhbFN0YXJ0PnRoaXMuX3BoeXNpY2FsRW5kJiZ0aGlzLl9pc0luZGV4UmVuZGVyZWQodGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCkmJnRoaXMuX2dldFBoeXNpY2FsSW5kZXgodGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCk8dGhpcy5fcGh5c2ljYWxFbmQmJih0aGlzLl9waHlzaWNhbFN0YXJ0PXRoaXMuX3BoeXNpY2FsU3RhcnQraSksdGhpcy5fdXBkYXRlKCksdGhpcy5fdGVtcGxhdGVDb3N0PSh3aW5kb3cucGVyZm9ybWFuY2Uubm93KCktbykvaSxyPU1hdGgucm91bmQoLjUqdGhpcy5fcGh5c2ljYWxDb3VudCl9dGhpcy5fdmlydHVhbEVuZD49dGhpcy5fdmlydHVhbENvdW50LTF8fDA9PT1yfHwodGhpcy5faXNDbGllbnRGdWxsKCk/dGhpcy5fcGh5c2ljYWxTaXplPHRoaXMuX29wdFBoeXNpY2FsU2l6ZSYmdGhpcy5fZGVib3VuY2UoIl9pbmNyZWFzZVBvb2xJZk5lZWRlZCIsdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQuYmluZCh0aGlzLHRoaXMuX2NsYW1wKE1hdGgucm91bmQoNTAvdGhpcy5fdGVtcGxhdGVDb3N0KSwxLHIpKSx5dCk6dGhpcy5fZGVib3VuY2UoIl9pbmNyZWFzZVBvb2xJZk5lZWRlZCIsdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQuYmluZCh0aGlzLHIpLHZ0KSl9fSxfcmVuZGVyOmZ1bmN0aW9uKCl7aWYodGhpcy5pc0F0dGFjaGVkJiZ0aGlzLl9pc1Zpc2libGUpaWYoMCE9PXRoaXMuX3BoeXNpY2FsQ291bnQpe3ZhciB0PXRoaXMuX2dldFJldXNhYmxlcyghMCk7dGhpcy5fcGh5c2ljYWxUb3A9dC5waHlzaWNhbFRvcCx0aGlzLl92aXJ0dWFsU3RhcnQ9dGhpcy5fdmlydHVhbFN0YXJ0K3QuaW5kZXhlcy5sZW5ndGgsdGhpcy5fcGh5c2ljYWxTdGFydD10aGlzLl9waHlzaWNhbFN0YXJ0K3QuaW5kZXhlcy5sZW5ndGgsdGhpcy5fdXBkYXRlKHQuaW5kZXhlcyksdGhpcy5fdXBkYXRlKCksdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQoMCl9ZWxzZSB0aGlzLl92aXJ0dWFsQ291bnQ+MCYmKHRoaXMudXBkYXRlVmlld3BvcnRCb3VuZGFyaWVzKCksdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQoMykpfSxfZW5zdXJlVGVtcGxhdGl6ZWQ6ZnVuY3Rpb24oKXtpZighdGhpcy5jdG9yKXt0aGlzLl91c2VyVGVtcGxhdGU9dGhpcy5xdWVyeUVmZmVjdGl2ZUNoaWxkcmVuKCJ0ZW1wbGF0ZSIpLHRoaXMuX3VzZXJUZW1wbGF0ZXx8Y29uc29sZS53YXJuKCJpcm9uLWxpc3QgcmVxdWlyZXMgYSB0ZW1wbGF0ZSB0byBiZSBwcm92aWRlZCBpbiBsaWdodC1kb20iKTt2YXIgdD17X19rZXlfXzohMH07dFt0aGlzLmFzXT0hMCx0W3RoaXMuaW5kZXhBc109ITAsdFt0aGlzLnNlbGVjdGVkQXNdPSEwLHQudGFiSW5kZXg9ITAsdGhpcy5faW5zdGFuY2VQcm9wcz10LHRoaXMudGVtcGxhdGl6ZSh0aGlzLl91c2VyVGVtcGxhdGUsdGhpcy5tdXRhYmxlRGF0YSl9fSxfZ3JpZENoYW5nZWQ6ZnVuY3Rpb24odCxlKXt2b2lkIDAhPT1lJiYodGhpcy5ub3RpZnlSZXNpemUoKSx6aSgpLHQmJnRoaXMuX3VwZGF0ZUdyaWRNZXRyaWNzKCkpfSxfaXRlbXNDaGFuZ2VkOmZ1bmN0aW9uKHQpe2lmKCJpdGVtcyI9PT10LnBhdGgpdGhpcy5fdmlydHVhbFN0YXJ0PTAsdGhpcy5fcGh5c2ljYWxUb3A9MCx0aGlzLl92aXJ0dWFsQ291bnQ9dGhpcy5pdGVtcz90aGlzLml0ZW1zLmxlbmd0aDowLHRoaXMuX3BoeXNpY2FsSW5kZXhGb3JLZXk9e30sdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGwsdGhpcy5fcGh5c2ljYWxDb3VudD10aGlzLl9waHlzaWNhbENvdW50fHwwLHRoaXMuX3BoeXNpY2FsSXRlbXM9dGhpcy5fcGh5c2ljYWxJdGVtc3x8W10sdGhpcy5fcGh5c2ljYWxTaXplcz10aGlzLl9waHlzaWNhbFNpemVzfHxbXSx0aGlzLl9waHlzaWNhbFN0YXJ0PTAsdGhpcy5fc2Nyb2xsVG9wPnRoaXMuX3Njcm9sbE9mZnNldCYmdGhpcy5fcmVzZXRTY3JvbGxQb3NpdGlvbigwKSx0aGlzLl9yZW1vdmVGb2N1c2VkSXRlbSgpLHRoaXMuX2RlYm91bmNlKCJfcmVuZGVyIix0aGlzLl9yZW5kZXIsX3QpO2Vsc2UgaWYoIml0ZW1zLnNwbGljZXMiPT09dC5wYXRoKXtpZih0aGlzLl9hZGp1c3RWaXJ0dWFsSW5kZXgodC52YWx1ZS5pbmRleFNwbGljZXMpLHRoaXMuX3ZpcnR1YWxDb3VudD10aGlzLml0ZW1zP3RoaXMuaXRlbXMubGVuZ3RoOjAsdC52YWx1ZS5pbmRleFNwbGljZXMuc29tZSgoZnVuY3Rpb24odCl7cmV0dXJuIHQuYWRkZWRDb3VudD4wfHx0LnJlbW92ZWQubGVuZ3RoPjB9KSkpe3ZhciBlPXRoaXMuX2dldEFjdGl2ZUVsZW1lbnQoKTt0aGlzLmNvbnRhaW5zKGUpJiZlLmJsdXIoKX12YXIgbj10LnZhbHVlLmluZGV4U3BsaWNlcy5zb21lKChmdW5jdGlvbih0KXtyZXR1cm4gdC5pbmRleCt0LmFkZGVkQ291bnQ+PXRoaXMuX3ZpcnR1YWxTdGFydCYmdC5pbmRleDw9dGhpcy5fdmlydHVhbEVuZH0pLHRoaXMpO3RoaXMuX2lzQ2xpZW50RnVsbCgpJiYhbnx8dGhpcy5fZGVib3VuY2UoIl9yZW5kZXIiLHRoaXMuX3JlbmRlcixfdCl9ZWxzZSJpdGVtcy5sZW5ndGgiIT09dC5wYXRoJiZ0aGlzLl9mb3J3YXJkSXRlbVBhdGgodC5wYXRoLHQudmFsdWUpfSxfZm9yd2FyZEl0ZW1QYXRoOmZ1bmN0aW9uKHQsZSl7dmFyIG4saSxyLG89KHQ9dC5zbGljZSg2KSkuaW5kZXhPZigiLiIpOy0xPT09byYmKG89dC5sZW5ndGgpO3ZhciBhPXRoaXMubW9kZWxGb3JFbGVtZW50KHRoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtKSxzPXBhcnNlSW50KHQuc3Vic3RyaW5nKDAsbyksMTApOyhuPXRoaXMuX2lzSW5kZXhSZW5kZXJlZChzKSk/KGk9dGhpcy5fZ2V0UGh5c2ljYWxJbmRleChzKSxyPXRoaXMubW9kZWxGb3JFbGVtZW50KHRoaXMuX3BoeXNpY2FsSXRlbXNbaV0pKTphJiYocj1hKSxyJiZyW3RoaXMuaW5kZXhBc109PT1zJiYodD10LnN1YnN0cmluZyhvKzEpLHIuX3NldFBlbmRpbmdQcm9wZXJ0eU9yUGF0aCh0PXRoaXMuYXMrKHQ/Ii4iK3Q6IiIpLGUsITEsITApLHIuX2ZsdXNoUHJvcGVydGllcyYmci5fZmx1c2hQcm9wZXJ0aWVzKCksbiYmKHRoaXMuX3VwZGF0ZU1ldHJpY3MoW2ldKSx0aGlzLl9wb3NpdGlvbkl0ZW1zKCksdGhpcy5fdXBkYXRlU2Nyb2xsZXJTaXplKCkpKX0sX2FkanVzdFZpcnR1YWxJbmRleDpmdW5jdGlvbih0KXt0LmZvckVhY2goKGZ1bmN0aW9uKHQpe2lmKHQucmVtb3ZlZC5mb3JFYWNoKHRoaXMuX3JlbW92ZUl0ZW0sdGhpcyksdC5pbmRleDx0aGlzLl92aXJ0dWFsU3RhcnQpe3ZhciBlPU1hdGgubWF4KHQuYWRkZWRDb3VudC10LnJlbW92ZWQubGVuZ3RoLHQuaW5kZXgtdGhpcy5fdmlydHVhbFN0YXJ0KTt0aGlzLl92aXJ0dWFsU3RhcnQ9dGhpcy5fdmlydHVhbFN0YXJ0K2UsdGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleD49MCYmKHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg9dGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCtlKX19KSx0aGlzKX0sX3JlbW92ZUl0ZW06ZnVuY3Rpb24odCl7dGhpcy4kLnNlbGVjdG9yLmRlc2VsZWN0KHQpLHRoaXMuX2ZvY3VzZWRJdGVtJiZ0aGlzLm1vZGVsRm9yRWxlbWVudCh0aGlzLl9mb2N1c2VkSXRlbSlbdGhpcy5hc109PT10JiZ0aGlzLl9yZW1vdmVGb2N1c2VkSXRlbSgpfSxfaXRlcmF0ZUl0ZW1zOmZ1bmN0aW9uKHQsZSl7dmFyIG4saSxyLG87aWYoMj09PWFyZ3VtZW50cy5sZW5ndGgmJmUpe2ZvcihvPTA7bzxlLmxlbmd0aDtvKyspaWYoaT10aGlzLl9jb21wdXRlVmlkeChuPWVbb10pLG51bGwhPShyPXQuY2FsbCh0aGlzLG4saSkpKXJldHVybiByfWVsc2V7Zm9yKG49dGhpcy5fcGh5c2ljYWxTdGFydCxpPXRoaXMuX3ZpcnR1YWxTdGFydDtuPHRoaXMuX3BoeXNpY2FsQ291bnQ7bisrLGkrKylpZihudWxsIT0ocj10LmNhbGwodGhpcyxuLGkpKSlyZXR1cm4gcjtmb3Iobj0wO248dGhpcy5fcGh5c2ljYWxTdGFydDtuKyssaSsrKWlmKG51bGwhPShyPXQuY2FsbCh0aGlzLG4saSkpKXJldHVybiByfX0sX2NvbXB1dGVWaWR4OmZ1bmN0aW9uKHQpe3JldHVybiB0Pj10aGlzLl9waHlzaWNhbFN0YXJ0P3RoaXMuX3ZpcnR1YWxTdGFydCsodC10aGlzLl9waHlzaWNhbFN0YXJ0KTp0aGlzLl92aXJ0dWFsU3RhcnQrKHRoaXMuX3BoeXNpY2FsQ291bnQtdGhpcy5fcGh5c2ljYWxTdGFydCkrdH0sX2Fzc2lnbk1vZGVsczpmdW5jdGlvbih0KXt0aGlzLl9pdGVyYXRlSXRlbXMoKGZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fcGh5c2ljYWxJdGVtc1t0XSxpPXRoaXMuaXRlbXMmJnRoaXMuaXRlbXNbZV07aWYobnVsbCE9aSl7dmFyIHI9dGhpcy5tb2RlbEZvckVsZW1lbnQobik7ci5fX2tleV9fPW51bGwsdGhpcy5fZm9yd2FyZFByb3BlcnR5KHIsdGhpcy5hcyxpKSx0aGlzLl9mb3J3YXJkUHJvcGVydHkocix0aGlzLnNlbGVjdGVkQXMsdGhpcy4kLnNlbGVjdG9yLmlzU2VsZWN0ZWQoaSkpLHRoaXMuX2ZvcndhcmRQcm9wZXJ0eShyLHRoaXMuaW5kZXhBcyxlKSx0aGlzLl9mb3J3YXJkUHJvcGVydHkociwidGFiSW5kZXgiLHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg9PT1lPzA6LTEpLHRoaXMuX3BoeXNpY2FsSW5kZXhGb3JLZXlbci5fX2tleV9fXT10LHIuX2ZsdXNoUHJvcGVydGllcyYmci5fZmx1c2hQcm9wZXJ0aWVzKCEwKSxuLnJlbW92ZUF0dHJpYnV0ZSgiaGlkZGVuIil9ZWxzZSBuLnNldEF0dHJpYnV0ZSgiaGlkZGVuIiwiIil9KSx0KX0sX3VwZGF0ZU1ldHJpY3M6ZnVuY3Rpb24odCl7emkoKTt2YXIgZT0wLG49MCxpPXRoaXMuX3BoeXNpY2FsQXZlcmFnZUNvdW50LHI9dGhpcy5fcGh5c2ljYWxBdmVyYWdlO3RoaXMuX2l0ZXJhdGVJdGVtcygoZnVuY3Rpb24odCxpKXtuKz10aGlzLl9waHlzaWNhbFNpemVzW3RdLHRoaXMuX3BoeXNpY2FsU2l6ZXNbdF09dGhpcy5fcGh5c2ljYWxJdGVtc1t0XS5vZmZzZXRIZWlnaHQsZSs9dGhpcy5fcGh5c2ljYWxTaXplc1t0XSx0aGlzLl9waHlzaWNhbEF2ZXJhZ2VDb3VudCs9dGhpcy5fcGh5c2ljYWxTaXplc1t0XT8xOjB9KSx0KSx0aGlzLmdyaWQ/KHRoaXMuX3VwZGF0ZUdyaWRNZXRyaWNzKCksdGhpcy5fcGh5c2ljYWxTaXplPU1hdGguY2VpbCh0aGlzLl9waHlzaWNhbENvdW50L3RoaXMuX2l0ZW1zUGVyUm93KSp0aGlzLl9yb3dIZWlnaHQpOihuPTE9PT10aGlzLl9pdGVtc1BlclJvdz9uOk1hdGguY2VpbCh0aGlzLl9waHlzaWNhbENvdW50L3RoaXMuX2l0ZW1zUGVyUm93KSp0aGlzLl9yb3dIZWlnaHQsdGhpcy5fcGh5c2ljYWxTaXplPXRoaXMuX3BoeXNpY2FsU2l6ZStlLW4sdGhpcy5faXRlbXNQZXJSb3c9MSksdGhpcy5fcGh5c2ljYWxBdmVyYWdlQ291bnQhPT1pJiYodGhpcy5fcGh5c2ljYWxBdmVyYWdlPU1hdGgucm91bmQoKHIqaStlKS90aGlzLl9waHlzaWNhbEF2ZXJhZ2VDb3VudCkpfSxfdXBkYXRlR3JpZE1ldHJpY3M6ZnVuY3Rpb24oKXt0aGlzLl9pdGVtV2lkdGg9dGhpcy5fcGh5c2ljYWxDb3VudD4wP3RoaXMuX3BoeXNpY2FsSXRlbXNbMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg6MjAwLHRoaXMuX3Jvd0hlaWdodD10aGlzLl9waHlzaWNhbENvdW50PjA/dGhpcy5fcGh5c2ljYWxJdGVtc1swXS5vZmZzZXRIZWlnaHQ6MjAwLHRoaXMuX2l0ZW1zUGVyUm93PXRoaXMuX2l0ZW1XaWR0aD9NYXRoLmZsb29yKHRoaXMuX3ZpZXdwb3J0V2lkdGgvdGhpcy5faXRlbVdpZHRoKTp0aGlzLl9pdGVtc1BlclJvd30sX3Bvc2l0aW9uSXRlbXM6ZnVuY3Rpb24oKXt0aGlzLl9hZGp1c3RTY3JvbGxQb3NpdGlvbigpO3ZhciB0PXRoaXMuX3BoeXNpY2FsVG9wO2lmKHRoaXMuZ3JpZCl7dmFyIGU9KHRoaXMuX3ZpZXdwb3J0V2lkdGgtdGhpcy5faXRlbXNQZXJSb3cqdGhpcy5faXRlbVdpZHRoKS8yO3RoaXMuX2l0ZXJhdGVJdGVtcygoZnVuY3Rpb24obixpKXt2YXIgcj1NYXRoLmZsb29yKGkldGhpcy5faXRlbXNQZXJSb3cqdGhpcy5faXRlbVdpZHRoK2UpO3RoaXMuX2lzUlRMJiYocio9LTEpLHRoaXMudHJhbnNsYXRlM2QocisicHgiLHQrInB4IiwwLHRoaXMuX3BoeXNpY2FsSXRlbXNbbl0pLHRoaXMuX3Nob3VsZFJlbmRlck5leHRSb3coaSkmJih0Kz10aGlzLl9yb3dIZWlnaHQpfSkpfWVsc2V7Y29uc3QgZT1bXTt0aGlzLl9pdGVyYXRlSXRlbXMoKGZ1bmN0aW9uKG4saSl7Y29uc3Qgcj10aGlzLl9waHlzaWNhbEl0ZW1zW25dO3RoaXMudHJhbnNsYXRlM2QoMCx0KyJweCIsMCxyKSx0Kz10aGlzLl9waHlzaWNhbFNpemVzW25dO2NvbnN0IG89ci5pZDtvJiZlLnB1c2gobyl9KSksZS5sZW5ndGgmJnRoaXMuc2V0QXR0cmlidXRlKCJhcmlhLW93bnMiLGUuam9pbigiICIpKX19LF9nZXRQaHlzaWNhbFNpemVJbmNyZW1lbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZ3JpZD90aGlzLl9jb21wdXRlVmlkeCh0KSV0aGlzLl9pdGVtc1BlclJvdyE9dGhpcy5faXRlbXNQZXJSb3ctMT8wOnRoaXMuX3Jvd0hlaWdodDp0aGlzLl9waHlzaWNhbFNpemVzW3RdfSxfc2hvdWxkUmVuZGVyTmV4dFJvdzpmdW5jdGlvbih0KXtyZXR1cm4gdCV0aGlzLl9pdGVtc1BlclJvdz09dGhpcy5faXRlbXNQZXJSb3ctMX0sX2FkanVzdFNjcm9sbFBvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9MD09PXRoaXMuX3ZpcnR1YWxTdGFydD90aGlzLl9waHlzaWNhbFRvcDpNYXRoLm1pbih0aGlzLl9zY3JvbGxQb3NpdGlvbit0aGlzLl9waHlzaWNhbFRvcCwwKTtpZigwIT09dCl7dGhpcy5fcGh5c2ljYWxUb3A9dGhpcy5fcGh5c2ljYWxUb3AtdDt2YXIgZT10aGlzLl9zY3JvbGxQb3NpdGlvbjshQm8mJmU+MCYmdGhpcy5fcmVzZXRTY3JvbGxQb3NpdGlvbihlLXQpfX0sX3Jlc2V0U2Nyb2xsUG9zaXRpb246ZnVuY3Rpb24odCl7dGhpcy5zY3JvbGxUYXJnZXQmJnQ+PTAmJih0aGlzLl9zY3JvbGxUb3A9dCx0aGlzLl9zY3JvbGxQb3NpdGlvbj10aGlzLl9zY3JvbGxUb3ApfSxfdXBkYXRlU2Nyb2xsZXJTaXplOmZ1bmN0aW9uKHQpe3RoaXMuX2VzdFNjcm9sbEhlaWdodD10aGlzLmdyaWQ/dGhpcy5fdmlydHVhbFJvd0NvdW50KnRoaXMuX3Jvd0hlaWdodDp0aGlzLl9waHlzaWNhbEJvdHRvbStNYXRoLm1heCh0aGlzLl92aXJ0dWFsQ291bnQtdGhpcy5fcGh5c2ljYWxDb3VudC10aGlzLl92aXJ0dWFsU3RhcnQsMCkqdGhpcy5fcGh5c2ljYWxBdmVyYWdlLCgodD0odD0odD10fHwwPT09dGhpcy5fc2Nyb2xsSGVpZ2h0KXx8dGhpcy5fc2Nyb2xsUG9zaXRpb24+PXRoaXMuX2VzdFNjcm9sbEhlaWdodC10aGlzLl9waHlzaWNhbFNpemUpfHx0aGlzLmdyaWQmJnRoaXMuJC5pdGVtcy5zdHlsZS5oZWlnaHQ8dGhpcy5fZXN0U2Nyb2xsSGVpZ2h0KXx8TWF0aC5hYnModGhpcy5fZXN0U2Nyb2xsSGVpZ2h0LXRoaXMuX3Njcm9sbEhlaWdodCk+PXRoaXMuX3ZpZXdwb3J0SGVpZ2h0KSYmKHRoaXMuJC5pdGVtcy5zdHlsZS5oZWlnaHQ9dGhpcy5fZXN0U2Nyb2xsSGVpZ2h0KyJweCIsdGhpcy5fc2Nyb2xsSGVpZ2h0PXRoaXMuX2VzdFNjcm9sbEhlaWdodCl9LHNjcm9sbFRvSXRlbTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zY3JvbGxUb0luZGV4KHRoaXMuaXRlbXMuaW5kZXhPZih0KSl9LHNjcm9sbFRvSW5kZXg6ZnVuY3Rpb24odCl7aWYoISgibnVtYmVyIiE9dHlwZW9mIHR8fHQ8MHx8dD50aGlzLml0ZW1zLmxlbmd0aC0xKSYmKHppKCksMCE9PXRoaXMuX3BoeXNpY2FsQ291bnQpKXt0PXRoaXMuX2NsYW1wKHQsMCx0aGlzLl92aXJ0dWFsQ291bnQtMSksKCF0aGlzLl9pc0luZGV4UmVuZGVyZWQodCl8fHQ+PXRoaXMuX21heFZpcnR1YWxTdGFydCkmJih0aGlzLl92aXJ0dWFsU3RhcnQ9dGhpcy5ncmlkP3QtMip0aGlzLl9pdGVtc1BlclJvdzp0LTEpLHRoaXMuX21hbmFnZUZvY3VzKCksdGhpcy5fYXNzaWduTW9kZWxzKCksdGhpcy5fdXBkYXRlTWV0cmljcygpLHRoaXMuX3BoeXNpY2FsVG9wPU1hdGguZmxvb3IodGhpcy5fdmlydHVhbFN0YXJ0L3RoaXMuX2l0ZW1zUGVyUm93KSp0aGlzLl9waHlzaWNhbEF2ZXJhZ2U7Zm9yKHZhciBlPXRoaXMuX3BoeXNpY2FsU3RhcnQsbj10aGlzLl92aXJ0dWFsU3RhcnQsaT0wLHI9dGhpcy5faGlkZGVuQ29udGVudFNpemU7bjx0JiZpPD1yOylpKz10aGlzLl9nZXRQaHlzaWNhbFNpemVJbmNyZW1lbnQoZSksZT0oZSsxKSV0aGlzLl9waHlzaWNhbENvdW50LG4rKzt0aGlzLl91cGRhdGVTY3JvbGxlclNpemUoITApLHRoaXMuX3Bvc2l0aW9uSXRlbXMoKSx0aGlzLl9yZXNldFNjcm9sbFBvc2l0aW9uKHRoaXMuX3BoeXNpY2FsVG9wK3RoaXMuX3Njcm9sbE9mZnNldCtpKSx0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZCgwKSx0aGlzLl9maXJzdFZpc2libGVJbmRleFZhbD1udWxsLHRoaXMuX2xhc3RWaXNpYmxlSW5kZXhWYWw9bnVsbH19LF9yZXNldEF2ZXJhZ2U6ZnVuY3Rpb24oKXt0aGlzLl9waHlzaWNhbEF2ZXJhZ2U9MCx0aGlzLl9waHlzaWNhbEF2ZXJhZ2VDb3VudD0wfSxfcmVzaXplSGFuZGxlcjpmdW5jdGlvbigpe3RoaXMuX2RlYm91bmNlKCJfcmVuZGVyIiwoZnVuY3Rpb24oKXt0aGlzLl9maXJzdFZpc2libGVJbmRleFZhbD1udWxsLHRoaXMuX2xhc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9pc1Zpc2libGU/KHRoaXMudXBkYXRlVmlld3BvcnRCb3VuZGFyaWVzKCksdGhpcy50b2dnbGVTY3JvbGxMaXN0ZW5lcighMCksdGhpcy5fcmVzZXRBdmVyYWdlKCksdGhpcy5fcmVuZGVyKCkpOnRoaXMudG9nZ2xlU2Nyb2xsTGlzdGVuZXIoITEpfSksX3QpfSxzZWxlY3RJdGVtOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnNlbGVjdEluZGV4KHRoaXMuaXRlbXMuaW5kZXhPZih0KSl9LHNlbGVjdEluZGV4OmZ1bmN0aW9uKHQpe2lmKCEodDwwfHx0Pj10aGlzLl92aXJ0dWFsQ291bnQpKXtpZighdGhpcy5tdWx0aVNlbGVjdGlvbiYmdGhpcy5zZWxlY3RlZEl0ZW0mJnRoaXMuY2xlYXJTZWxlY3Rpb24oKSx0aGlzLl9pc0luZGV4UmVuZGVyZWQodCkpe3ZhciBlPXRoaXMubW9kZWxGb3JFbGVtZW50KHRoaXMuX3BoeXNpY2FsSXRlbXNbdGhpcy5fZ2V0UGh5c2ljYWxJbmRleCh0KV0pO2UmJihlW3RoaXMuc2VsZWN0ZWRBc109ITApLHRoaXMudXBkYXRlU2l6ZUZvckluZGV4KHQpfXRoaXMuJC5zZWxlY3Rvci5zZWxlY3RJbmRleCh0KX19LGRlc2VsZWN0SXRlbTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kZXNlbGVjdEluZGV4KHRoaXMuaXRlbXMuaW5kZXhPZih0KSl9LGRlc2VsZWN0SW5kZXg6ZnVuY3Rpb24odCl7dDwwfHx0Pj10aGlzLl92aXJ0dWFsQ291bnR8fCh0aGlzLl9pc0luZGV4UmVuZGVyZWQodCkmJih0aGlzLm1vZGVsRm9yRWxlbWVudCh0aGlzLl9waHlzaWNhbEl0ZW1zW3RoaXMuX2dldFBoeXNpY2FsSW5kZXgodCldKVt0aGlzLnNlbGVjdGVkQXNdPSExLHRoaXMudXBkYXRlU2l6ZUZvckluZGV4KHQpKSx0aGlzLiQuc2VsZWN0b3IuZGVzZWxlY3RJbmRleCh0KSl9LHRvZ2dsZVNlbGVjdGlvbkZvckl0ZW06ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudG9nZ2xlU2VsZWN0aW9uRm9ySW5kZXgodGhpcy5pdGVtcy5pbmRleE9mKHQpKX0sdG9nZ2xlU2VsZWN0aW9uRm9ySW5kZXg6ZnVuY3Rpb24odCl7KHRoaXMuJC5zZWxlY3Rvci5pc0luZGV4U2VsZWN0ZWQ/dGhpcy4kLnNlbGVjdG9yLmlzSW5kZXhTZWxlY3RlZCh0KTp0aGlzLiQuc2VsZWN0b3IuaXNTZWxlY3RlZCh0aGlzLml0ZW1zW3RdKSk/dGhpcy5kZXNlbGVjdEluZGV4KHQpOnRoaXMuc2VsZWN0SW5kZXgodCl9LGNsZWFyU2VsZWN0aW9uOmZ1bmN0aW9uKCl7dGhpcy5faXRlcmF0ZUl0ZW1zKChmdW5jdGlvbih0LGUpe3RoaXMubW9kZWxGb3JFbGVtZW50KHRoaXMuX3BoeXNpY2FsSXRlbXNbdF0pW3RoaXMuc2VsZWN0ZWRBc109ITF9KSksdGhpcy4kLnNlbGVjdG9yLmNsZWFyU2VsZWN0aW9uKCl9LF9zZWxlY3Rpb25FbmFibGVkQ2hhbmdlZDpmdW5jdGlvbih0KXsodD90aGlzLmxpc3Rlbjp0aGlzLnVubGlzdGVuKS5jYWxsKHRoaXMsdGhpcywidGFwIiwiX3NlbGVjdGlvbkhhbmRsZXIiKX0sX3NlbGVjdGlvbkhhbmRsZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5tb2RlbEZvckVsZW1lbnQodC50YXJnZXQpO2lmKGUpe3ZhciBuLGkscj1xaSh0KS5wYXRoWzBdLG89dGhpcy5fZ2V0QWN0aXZlRWxlbWVudCgpLGE9dGhpcy5fcGh5c2ljYWxJdGVtc1t0aGlzLl9nZXRQaHlzaWNhbEluZGV4KGVbdGhpcy5pbmRleEFzXSldOyJpbnB1dCIhPT1yLmxvY2FsTmFtZSYmImJ1dHRvbiIhPT1yLmxvY2FsTmFtZSYmInNlbGVjdCIhPT1yLmxvY2FsTmFtZSYmKG49ZS50YWJJbmRleCxlLnRhYkluZGV4PUZvLGk9bz9vLnRhYkluZGV4Oi0xLGUudGFiSW5kZXg9bixvJiZhIT09byYmYS5jb250YWlucyhvKSYmaSE9PUZvfHx0aGlzLnRvZ2dsZVNlbGVjdGlvbkZvckl0ZW0oZVt0aGlzLmFzXSkpfX0sX211bHRpU2VsZWN0aW9uQ2hhbmdlZDpmdW5jdGlvbih0KXt0aGlzLmNsZWFyU2VsZWN0aW9uKCksdGhpcy4kLnNlbGVjdG9yLm11bHRpPXR9LHVwZGF0ZVNpemVGb3JJdGVtOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnVwZGF0ZVNpemVGb3JJbmRleCh0aGlzLml0ZW1zLmluZGV4T2YodCkpfSx1cGRhdGVTaXplRm9ySW5kZXg6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2lzSW5kZXhSZW5kZXJlZCh0KT8odGhpcy5fdXBkYXRlTWV0cmljcyhbdGhpcy5fZ2V0UGh5c2ljYWxJbmRleCh0KV0pLHRoaXMuX3Bvc2l0aW9uSXRlbXMoKSxudWxsKTpudWxsfSxfbWFuYWdlRm9jdXM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4O3Q+PTAmJnQ8dGhpcy5fdmlydHVhbENvdW50P3RoaXMuX2lzSW5kZXhSZW5kZXJlZCh0KT90aGlzLl9yZXN0b3JlRm9jdXNlZEl0ZW0oKTp0aGlzLl9jcmVhdGVGb2N1c0JhY2tmaWxsSXRlbSgpOnRoaXMuX3ZpcnR1YWxDb3VudD4wJiZ0aGlzLl9waHlzaWNhbENvdW50PjAmJih0aGlzLl9mb2N1c2VkUGh5c2ljYWxJbmRleD10aGlzLl9waHlzaWNhbFN0YXJ0LHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg9dGhpcy5fdmlydHVhbFN0YXJ0LHRoaXMuX2ZvY3VzZWRJdGVtPXRoaXMuX3BoeXNpY2FsSXRlbXNbdGhpcy5fcGh5c2ljYWxTdGFydF0pfSxfY29udmVydEluZGV4VG9Db21wbGV0ZVJvdzpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5faXRlbXNQZXJSb3c9dGhpcy5faXRlbXNQZXJSb3d8fDEsdGhpcy5ncmlkP01hdGguY2VpbCh0L3RoaXMuX2l0ZW1zUGVyUm93KSp0aGlzLl9pdGVtc1BlclJvdzp0fSxfaXNJbmRleFJlbmRlcmVkOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj10aGlzLl92aXJ0dWFsU3RhcnQmJnQ8PXRoaXMuX3ZpcnR1YWxFbmR9LF9pc0luZGV4VmlzaWJsZTpmdW5jdGlvbih0KXtyZXR1cm4gdD49dGhpcy5maXJzdFZpc2libGVJbmRleCYmdDw9dGhpcy5sYXN0VmlzaWJsZUluZGV4fSxfZ2V0UGh5c2ljYWxJbmRleDpmdW5jdGlvbih0KXtyZXR1cm4odGhpcy5fcGh5c2ljYWxTdGFydCsodC10aGlzLl92aXJ0dWFsU3RhcnQpKSV0aGlzLl9waHlzaWNhbENvdW50fSxmb2N1c0l0ZW06ZnVuY3Rpb24odCl7dGhpcy5fZm9jdXNQaHlzaWNhbEl0ZW0odCl9LF9mb2N1c1BoeXNpY2FsSXRlbTpmdW5jdGlvbih0KXtpZighKHQ8MHx8dD49dGhpcy5fdmlydHVhbENvdW50KSl7dGhpcy5fcmVzdG9yZUZvY3VzZWRJdGVtKCksdGhpcy5faXNJbmRleFJlbmRlcmVkKHQpfHx0aGlzLnNjcm9sbFRvSW5kZXgodCk7dmFyIGUsbj10aGlzLl9waHlzaWNhbEl0ZW1zW3RoaXMuX2dldFBoeXNpY2FsSW5kZXgodCldLGk9dGhpcy5tb2RlbEZvckVsZW1lbnQobik7aS50YWJJbmRleD1GbyxuLnRhYkluZGV4PT09Rm8mJihlPW4pLGV8fChlPXFpKG4pLnF1ZXJ5U2VsZWN0b3IoJ1t0YWJpbmRleD0iLTEwMCJdJykpLGkudGFiSW5kZXg9MCx0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4PXQsZSYmZS5mb2N1cygpfX0sX3JlbW92ZUZvY3VzZWRJdGVtOmZ1bmN0aW9uKCl7dGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0mJnRoaXMuX2l0ZW1zUGFyZW50LnJlbW92ZUNoaWxkKHRoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtKSx0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbT1udWxsLHRoaXMuX2ZvY3VzQmFja2ZpbGxJdGVtPW51bGwsdGhpcy5fZm9jdXNlZEl0ZW09bnVsbCx0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4PS0xLHRoaXMuX2ZvY3VzZWRQaHlzaWNhbEluZGV4PS0xfSxfY3JlYXRlRm9jdXNCYWNrZmlsbEl0ZW06ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9mb2N1c2VkUGh5c2ljYWxJbmRleDtpZighKHRoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtfHx0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4PDApKXtpZighdGhpcy5fZm9jdXNCYWNrZmlsbEl0ZW0pe3ZhciBlPXRoaXMuc3RhbXAobnVsbCk7dGhpcy5fZm9jdXNCYWNrZmlsbEl0ZW09ZS5yb290LnF1ZXJ5U2VsZWN0b3IoIioiKSx0aGlzLl9pdGVtc1BhcmVudC5hcHBlbmRDaGlsZChlLnJvb3QpfXRoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtPXRoaXMuX3BoeXNpY2FsSXRlbXNbdF0sdGhpcy5tb2RlbEZvckVsZW1lbnQodGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0pLnRhYkluZGV4PTAsdGhpcy5fcGh5c2ljYWxJdGVtc1t0XT10aGlzLl9mb2N1c0JhY2tmaWxsSXRlbSx0aGlzLl9mb2N1c2VkUGh5c2ljYWxJbmRleD10LHRoaXMudHJhbnNsYXRlM2QoMCxIbywwLHRoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtKX19LF9yZXN0b3JlRm9jdXNlZEl0ZW06ZnVuY3Rpb24oKXtpZih0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbSYmISh0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4PDApKXt0aGlzLl9hc3NpZ25Nb2RlbHMoKTt2YXIgdD10aGlzLl9mb2N1c2VkUGh5c2ljYWxJbmRleD10aGlzLl9nZXRQaHlzaWNhbEluZGV4KHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXgpLGU9dGhpcy5fcGh5c2ljYWxJdGVtc1t0XTtpZihlKXt2YXIgbj10aGlzLm1vZGVsRm9yRWxlbWVudChlKSxpPXRoaXMubW9kZWxGb3JFbGVtZW50KHRoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtKTtuW3RoaXMuYXNdPT09aVt0aGlzLmFzXT8odGhpcy5fZm9jdXNCYWNrZmlsbEl0ZW09ZSxuLnRhYkluZGV4PS0xLHRoaXMuX3BoeXNpY2FsSXRlbXNbdF09dGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0sdGhpcy50cmFuc2xhdGUzZCgwLEhvLDAsdGhpcy5fZm9jdXNCYWNrZmlsbEl0ZW0pKToodGhpcy5fcmVtb3ZlRm9jdXNlZEl0ZW0oKSx0aGlzLl9mb2N1c0JhY2tmaWxsSXRlbT1udWxsKSx0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbT1udWxsfX19LF9kaWRGb2N1czpmdW5jdGlvbih0KXt2YXIgZT10aGlzLm1vZGVsRm9yRWxlbWVudCh0LnRhcmdldCksbj10aGlzLm1vZGVsRm9yRWxlbWVudCh0aGlzLl9mb2N1c2VkSXRlbSksaT1udWxsIT09dGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0scj10aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4O2UmJihuPT09ZT90aGlzLl9pc0luZGV4VmlzaWJsZShyKXx8dGhpcy5zY3JvbGxUb0luZGV4KHIpOih0aGlzLl9yZXN0b3JlRm9jdXNlZEl0ZW0oKSxuJiYobi50YWJJbmRleD0tMSksZS50YWJJbmRleD0wLHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg9cj1lW3RoaXMuaW5kZXhBc10sdGhpcy5fZm9jdXNlZFBoeXNpY2FsSW5kZXg9dGhpcy5fZ2V0UGh5c2ljYWxJbmRleChyKSx0aGlzLl9mb2N1c2VkSXRlbT10aGlzLl9waHlzaWNhbEl0ZW1zW3RoaXMuX2ZvY3VzZWRQaHlzaWNhbEluZGV4XSxpJiYhdGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0mJnRoaXMuX3VwZGF0ZSgpKSl9LF9rZXlkb3duSGFuZGxlcjpmdW5jdGlvbih0KXtzd2l0Y2godC5rZXlDb2RlKXtjYXNlIDQwOnRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg8dGhpcy5fdmlydHVhbENvdW50LTEmJnQucHJldmVudERlZmF1bHQoKSx0aGlzLl9mb2N1c1BoeXNpY2FsSXRlbSh0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4Kyh0aGlzLmdyaWQ/dGhpcy5faXRlbXNQZXJSb3c6MSkpO2JyZWFrO2Nhc2UgMzk6dGhpcy5ncmlkJiZ0aGlzLl9mb2N1c1BoeXNpY2FsSXRlbSh0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4Kyh0aGlzLl9pc1JUTD8tMToxKSk7YnJlYWs7Y2FzZSAzODp0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4PjAmJnQucHJldmVudERlZmF1bHQoKSx0aGlzLl9mb2N1c1BoeXNpY2FsSXRlbSh0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4LSh0aGlzLmdyaWQ/dGhpcy5faXRlbXNQZXJSb3c6MSkpO2JyZWFrO2Nhc2UgMzc6dGhpcy5ncmlkJiZ0aGlzLl9mb2N1c1BoeXNpY2FsSXRlbSh0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4Kyh0aGlzLl9pc1JUTD8xOi0xKSk7YnJlYWs7Y2FzZSAxMzp0aGlzLl9mb2N1c1BoeXNpY2FsSXRlbSh0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4KSx0aGlzLnNlbGVjdGlvbkVuYWJsZWQmJnRoaXMuX3NlbGVjdGlvbkhhbmRsZXIodCl9fSxfY2xhbXA6ZnVuY3Rpb24odCxlLG4pe3JldHVybiBNYXRoLm1pbihuLE1hdGgubWF4KGUsdCkpfSxfZGVib3VuY2U6ZnVuY3Rpb24odCxlLG4pe3RoaXMuX2RlYm91bmNlcnM9dGhpcy5fZGVib3VuY2Vyc3x8e30sdGhpcy5fZGVib3VuY2Vyc1t0XT1Fbi5kZWJvdW5jZSh0aGlzLl9kZWJvdW5jZXJzW3RdLG4sZS5iaW5kKHRoaXMpKSxDbih0aGlzLl9kZWJvdW5jZXJzW3RdKX0sX2ZvcndhcmRQcm9wZXJ0eTpmdW5jdGlvbih0LGUsbil7dC5fc2V0UGVuZGluZ1Byb3BlcnR5KGUsbil9LF9mb3J3YXJkSG9zdFByb3BWMjpmdW5jdGlvbih0LGUpeyh0aGlzLl9waHlzaWNhbEl0ZW1zfHxbXSkuY29uY2F0KFt0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbSx0aGlzLl9mb2N1c0JhY2tmaWxsSXRlbV0pLmZvckVhY2goKGZ1bmN0aW9uKG4pe24mJnRoaXMubW9kZWxGb3JFbGVtZW50KG4pLmZvcndhcmRIb3N0UHJvcCh0LGUpfSksdGhpcyl9LF9ub3RpZnlJbnN0YW5jZVByb3BWMjpmdW5jdGlvbih0LGUsbil7aWYoUSh0aGlzLmFzLGUpKXt2YXIgaT10W3RoaXMuaW5kZXhBc107ZT09dGhpcy5hcyYmKHRoaXMuaXRlbXNbaV09biksdGhpcy5ub3RpZnlQYXRoKEoodGhpcy5hcywiaXRlbXMuIitpLGUpLG4pfX0sX2dldFN0YW1wZWRDaGlsZHJlbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9waHlzaWNhbEl0ZW1zfSxfZm9yd2FyZEluc3RhbmNlUGF0aDpmdW5jdGlvbih0LGUsbil7MD09PWUuaW5kZXhPZih0aGlzLmFzKyIuIikmJnRoaXMubm90aWZ5UGF0aCgiaXRlbXMuIit0Ll9fa2V5X18rIi4iK2Uuc2xpY2UodGhpcy5hcy5sZW5ndGgrMSksbil9LF9mb3J3YXJkUGFyZW50UGF0aDpmdW5jdGlvbih0LGUpeyh0aGlzLl9waHlzaWNhbEl0ZW1zfHxbXSkuY29uY2F0KFt0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbSx0aGlzLl9mb2N1c0JhY2tmaWxsSXRlbV0pLmZvckVhY2goKGZ1bmN0aW9uKG4pe24mJnRoaXMubW9kZWxGb3JFbGVtZW50KG4pLm5vdGlmeVBhdGgodCxlKX0pLHRoaXMpfSxfZm9yd2FyZFBhcmVudFByb3A6ZnVuY3Rpb24odCxlKXsodGhpcy5fcGh5c2ljYWxJdGVtc3x8W10pLmNvbmNhdChbdGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0sdGhpcy5fZm9jdXNCYWNrZmlsbEl0ZW1dKS5mb3JFYWNoKChmdW5jdGlvbihuKXtuJiYodGhpcy5tb2RlbEZvckVsZW1lbnQobilbdF09ZSl9KSx0aGlzKX0sX2dldEFjdGl2ZUVsZW1lbnQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9pdGVtc1BhcmVudC5ub2RlLmRvbUhvc3Q7cmV0dXJuIHFpKHQ/dC5yb290OmRvY3VtZW50KS5hY3RpdmVFbGVtZW50fX0pOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KY2xhc3MgVm97Y29uc3RydWN0b3IodCl7dGhpcy5zZWxlY3Rpb249W10sdGhpcy5zZWxlY3RDYWxsYmFjaz10fWdldCgpe3JldHVybiB0aGlzLm11bHRpP3RoaXMuc2VsZWN0aW9uLnNsaWNlKCk6dGhpcy5zZWxlY3Rpb25bMF19Y2xlYXIodCl7dGhpcy5zZWxlY3Rpb24uc2xpY2UoKS5mb3JFYWNoKChmdW5jdGlvbihlKXsoIXR8fHQuaW5kZXhPZihlKTwwKSYmdGhpcy5zZXRJdGVtU2VsZWN0ZWQoZSwhMSl9KSx0aGlzKX1pc1NlbGVjdGVkKHQpe3JldHVybiB0aGlzLnNlbGVjdGlvbi5pbmRleE9mKHQpPj0wfXNldEl0ZW1TZWxlY3RlZCh0LGUpe2lmKG51bGwhPXQmJmUhPT10aGlzLmlzU2VsZWN0ZWQodCkpe2lmKGUpdGhpcy5zZWxlY3Rpb24ucHVzaCh0KTtlbHNle3ZhciBuPXRoaXMuc2VsZWN0aW9uLmluZGV4T2YodCk7bj49MCYmdGhpcy5zZWxlY3Rpb24uc3BsaWNlKG4sMSl9dGhpcy5zZWxlY3RDYWxsYmFjayYmdGhpcy5zZWxlY3RDYWxsYmFjayh0LGUpfX1zZWxlY3QodCl7dGhpcy5tdWx0aT90aGlzLnRvZ2dsZSh0KTp0aGlzLmdldCgpIT09dCYmKHRoaXMuc2V0SXRlbVNlbGVjdGVkKHRoaXMuZ2V0KCksITEpLHRoaXMuc2V0SXRlbVNlbGVjdGVkKHQsITApKX10b2dnbGUodCl7dGhpcy5zZXRJdGVtU2VsZWN0ZWQodCwhdGhpcy5pc1NlbGVjdGVkKHQpKX19Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqL2NvbnN0IFVvPXtwcm9wZXJ0aWVzOnthdHRyRm9yU2VsZWN0ZWQ6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9LHNlbGVjdGVkOnt0eXBlOlN0cmluZyxub3RpZnk6ITB9LHNlbGVjdGVkSXRlbTp7dHlwZTpPYmplY3QscmVhZE9ubHk6ITAsbm90aWZ5OiEwfSxhY3RpdmF0ZUV2ZW50Ont0eXBlOlN0cmluZyx2YWx1ZToidGFwIixvYnNlcnZlcjoiX2FjdGl2YXRlRXZlbnRDaGFuZ2VkIn0sc2VsZWN0YWJsZTpTdHJpbmcsc2VsZWN0ZWRDbGFzczp7dHlwZTpTdHJpbmcsdmFsdWU6Imlyb24tc2VsZWN0ZWQifSxzZWxlY3RlZEF0dHJpYnV0ZTp7dHlwZTpTdHJpbmcsdmFsdWU6bnVsbH0sZmFsbGJhY2tTZWxlY3Rpb246e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9LGl0ZW1zOnt0eXBlOkFycmF5LHJlYWRPbmx5OiEwLG5vdGlmeTohMCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX0sX2V4Y2x1ZGVkTG9jYWxOYW1lczp7dHlwZTpPYmplY3QsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm57dGVtcGxhdGU6MSwiZG9tLWJpbmQiOjEsImRvbS1pZiI6MSwiZG9tLXJlcGVhdCI6MX19fX0sb2JzZXJ2ZXJzOlsiX3VwZGF0ZUF0dHJGb3JTZWxlY3RlZChhdHRyRm9yU2VsZWN0ZWQpIiwiX3VwZGF0ZVNlbGVjdGVkKHNlbGVjdGVkKSIsIl9jaGVja0ZhbGxiYWNrKGZhbGxiYWNrU2VsZWN0aW9uKSJdLGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLl9iaW5kRmlsdGVySXRlbT10aGlzLl9maWx0ZXJJdGVtLmJpbmQodGhpcyksdGhpcy5fc2VsZWN0aW9uPW5ldyBWbyh0aGlzLl9hcHBseVNlbGVjdGlvbi5iaW5kKHRoaXMpKX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9vYnNlcnZlcj10aGlzLl9vYnNlcnZlSXRlbXModGhpcyksdGhpcy5fYWRkTGlzdGVuZXIodGhpcy5hY3RpdmF0ZUV2ZW50KX0sZGV0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9vYnNlcnZlciYmcWkodGhpcykudW5vYnNlcnZlTm9kZXModGhpcy5fb2JzZXJ2ZXIpLHRoaXMuX3JlbW92ZUxpc3RlbmVyKHRoaXMuYWN0aXZhdGVFdmVudCl9LGluZGV4T2Y6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaXRlbXM/dGhpcy5pdGVtcy5pbmRleE9mKHQpOi0xfSxzZWxlY3Q6ZnVuY3Rpb24odCl7dGhpcy5zZWxlY3RlZD10fSxzZWxlY3RQcmV2aW91czpmdW5jdGlvbigpe3ZhciB0PXRoaXMuaXRlbXMubGVuZ3RoLGU9dC0xO3ZvaWQgMCE9PXRoaXMuc2VsZWN0ZWQmJihlPShOdW1iZXIodGhpcy5fdmFsdWVUb0luZGV4KHRoaXMuc2VsZWN0ZWQpKS0xK3QpJXQpLHRoaXMuc2VsZWN0ZWQ9dGhpcy5faW5kZXhUb1ZhbHVlKGUpfSxzZWxlY3ROZXh0OmZ1bmN0aW9uKCl7dmFyIHQ9MDt2b2lkIDAhPT10aGlzLnNlbGVjdGVkJiYodD0oTnVtYmVyKHRoaXMuX3ZhbHVlVG9JbmRleCh0aGlzLnNlbGVjdGVkKSkrMSkldGhpcy5pdGVtcy5sZW5ndGgpLHRoaXMuc2VsZWN0ZWQ9dGhpcy5faW5kZXhUb1ZhbHVlKHQpfSxzZWxlY3RJbmRleDpmdW5jdGlvbih0KXt0aGlzLnNlbGVjdCh0aGlzLl9pbmRleFRvVmFsdWUodCkpfSxmb3JjZVN5bmNocm9ub3VzSXRlbVVwZGF0ZTpmdW5jdGlvbigpe3RoaXMuX29ic2VydmVyJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5fb2JzZXJ2ZXIuZmx1c2g/dGhpcy5fb2JzZXJ2ZXIuZmx1c2goKTp0aGlzLl91cGRhdGVJdGVtcygpfSxnZXQgX3Nob3VsZFVwZGF0ZVNlbGVjdGlvbigpe3JldHVybiBudWxsIT10aGlzLnNlbGVjdGVkfSxfY2hlY2tGYWxsYmFjazpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVNlbGVjdGVkKCl9LF9hZGRMaXN0ZW5lcjpmdW5jdGlvbih0KXt0aGlzLmxpc3Rlbih0aGlzLHQsIl9hY3RpdmF0ZUhhbmRsZXIiKX0sX3JlbW92ZUxpc3RlbmVyOmZ1bmN0aW9uKHQpe3RoaXMudW5saXN0ZW4odGhpcyx0LCJfYWN0aXZhdGVIYW5kbGVyIil9LF9hY3RpdmF0ZUV2ZW50Q2hhbmdlZDpmdW5jdGlvbih0LGUpe3RoaXMuX3JlbW92ZUxpc3RlbmVyKGUpLHRoaXMuX2FkZExpc3RlbmVyKHQpfSxfdXBkYXRlSXRlbXM6ZnVuY3Rpb24oKXt2YXIgdD1xaSh0aGlzKS5xdWVyeURpc3RyaWJ1dGVkRWxlbWVudHModGhpcy5zZWxlY3RhYmxlfHwiKiIpO3Q9QXJyYXkucHJvdG90eXBlLmZpbHRlci5jYWxsKHQsdGhpcy5fYmluZEZpbHRlckl0ZW0pLHRoaXMuX3NldEl0ZW1zKHQpfSxfdXBkYXRlQXR0ckZvclNlbGVjdGVkOmZ1bmN0aW9uKCl7dGhpcy5zZWxlY3RlZEl0ZW0mJih0aGlzLnNlbGVjdGVkPXRoaXMuX3ZhbHVlRm9ySXRlbSh0aGlzLnNlbGVjdGVkSXRlbSkpfSxfdXBkYXRlU2VsZWN0ZWQ6ZnVuY3Rpb24oKXt0aGlzLl9zZWxlY3RTZWxlY3RlZCh0aGlzLnNlbGVjdGVkKX0sX3NlbGVjdFNlbGVjdGVkOmZ1bmN0aW9uKHQpe2lmKHRoaXMuaXRlbXMpe3ZhciBlPXRoaXMuX3ZhbHVlVG9JdGVtKHRoaXMuc2VsZWN0ZWQpO2U/dGhpcy5fc2VsZWN0aW9uLnNlbGVjdChlKTp0aGlzLl9zZWxlY3Rpb24uY2xlYXIoKSx0aGlzLmZhbGxiYWNrU2VsZWN0aW9uJiZ0aGlzLml0ZW1zLmxlbmd0aCYmdm9pZCAwPT09dGhpcy5fc2VsZWN0aW9uLmdldCgpJiYodGhpcy5zZWxlY3RlZD10aGlzLmZhbGxiYWNrU2VsZWN0aW9uKX19LF9maWx0ZXJJdGVtOmZ1bmN0aW9uKHQpe3JldHVybiF0aGlzLl9leGNsdWRlZExvY2FsTmFtZXNbdC5sb2NhbE5hbWVdfSxfdmFsdWVUb0l0ZW06ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/bnVsbDp0aGlzLml0ZW1zW3RoaXMuX3ZhbHVlVG9JbmRleCh0KV19LF92YWx1ZVRvSW5kZXg6ZnVuY3Rpb24odCl7aWYoIXRoaXMuYXR0ckZvclNlbGVjdGVkKXJldHVybiBOdW1iZXIodCk7Zm9yKHZhciBlLG49MDtlPXRoaXMuaXRlbXNbbl07bisrKWlmKHRoaXMuX3ZhbHVlRm9ySXRlbShlKT09dClyZXR1cm4gbn0sX2luZGV4VG9WYWx1ZTpmdW5jdGlvbih0KXtpZighdGhpcy5hdHRyRm9yU2VsZWN0ZWQpcmV0dXJuIHQ7dmFyIGU9dGhpcy5pdGVtc1t0XTtyZXR1cm4gZT90aGlzLl92YWx1ZUZvckl0ZW0oZSk6dm9pZCAwfSxfdmFsdWVGb3JJdGVtOmZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiBudWxsO2lmKCF0aGlzLmF0dHJGb3JTZWxlY3RlZCl7dmFyIGU9dGhpcy5pbmRleE9mKHQpO3JldHVybi0xPT09ZT9udWxsOmV9dmFyIG49dFtzdCh0aGlzLmF0dHJGb3JTZWxlY3RlZCldO3JldHVybiBudWxsIT1uP246dC5nZXRBdHRyaWJ1dGUodGhpcy5hdHRyRm9yU2VsZWN0ZWQpfSxfYXBwbHlTZWxlY3Rpb246ZnVuY3Rpb24odCxlKXt0aGlzLnNlbGVjdGVkQ2xhc3MmJnRoaXMudG9nZ2xlQ2xhc3ModGhpcy5zZWxlY3RlZENsYXNzLGUsdCksdGhpcy5zZWxlY3RlZEF0dHJpYnV0ZSYmdGhpcy50b2dnbGVBdHRyaWJ1dGUodGhpcy5zZWxlY3RlZEF0dHJpYnV0ZSxlLHQpLHRoaXMuX3NlbGVjdGlvbkNoYW5nZSgpLHRoaXMuZmlyZSgiaXJvbi0iKyhlPyJzZWxlY3QiOiJkZXNlbGVjdCIpLHtpdGVtOnR9KX0sX3NlbGVjdGlvbkNoYW5nZTpmdW5jdGlvbigpe3RoaXMuX3NldFNlbGVjdGVkSXRlbSh0aGlzLl9zZWxlY3Rpb24uZ2V0KCkpfSxfb2JzZXJ2ZUl0ZW1zOmZ1bmN0aW9uKHQpe3JldHVybiBxaSh0KS5vYnNlcnZlTm9kZXMoKGZ1bmN0aW9uKHQpe3RoaXMuX3VwZGF0ZUl0ZW1zKCksdGhpcy5fdXBkYXRlU2VsZWN0ZWQoKSx0aGlzLmZpcmUoImlyb24taXRlbXMtY2hhbmdlZCIsdCx7YnViYmxlczohMSxjYW5jZWxhYmxlOiExfSl9KSl9LF9hY3RpdmF0ZUhhbmRsZXI6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQudGFyZ2V0LG49dGhpcy5pdGVtcztlJiZlIT10aGlzOyl7dmFyIGk9bi5pbmRleE9mKGUpO2lmKGk+PTApe3ZhciByPXRoaXMuX2luZGV4VG9WYWx1ZShpKTtyZXR1cm4gdm9pZCB0aGlzLl9pdGVtQWN0aXZhdGUocixlKX1lPWUucGFyZW50Tm9kZX19LF9pdGVtQWN0aXZhdGU6ZnVuY3Rpb24odCxlKXt0aGlzLmZpcmUoImlyb24tYWN0aXZhdGUiLHtzZWxlY3RlZDp0LGl0ZW06ZX0se2NhbmNlbGFibGU6ITB9KS5kZWZhdWx0UHJldmVudGVkfHx0aGlzLnNlbGVjdCh0KX19OwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi9Jcih7X3RlbXBsYXRlOl9lYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIDpob3N0ID4gOjpzbG90dGVkKDpub3Qoc2xvdCk6bm90KC5pcm9uLXNlbGVjdGVkKSkgewogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8c2xvdD48L3Nsb3Q+CmAsaXM6Imlyb24tcGFnZXMiLGJlaGF2aW9yczpbbW8sVW9dLHByb3BlcnRpZXM6e2FjdGl2YXRlRXZlbnQ6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9fSxvYnNlcnZlcnM6WyJfc2VsZWN0ZWRQYWdlQ2hhbmdlZChzZWxlY3RlZCkiXSxfc2VsZWN0ZWRQYWdlQ2hhbmdlZDpmdW5jdGlvbih0LGUpe3RoaXMuYXN5bmModGhpcy5ub3RpZnlSZXNpemUpfX0pOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KY29uc3Qgam89X2VgCjxjdXN0b20tc3R5bGU+CiAgPHN0eWxlIGlzPSJjdXN0b20tc3R5bGUiPgogICAgaHRtbCB7CgogICAgICAtLXNoYWRvdy10cmFuc2l0aW9uOiB7CiAgICAgICAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjI4cyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpOwogICAgICB9OwoKICAgICAgLS1zaGFkb3ctbm9uZTogewogICAgICAgIGJveC1zaGFkb3c6IG5vbmU7CiAgICAgIH07CgogICAgICAvKiBmcm9tIGh0dHA6Ly9jb2RlcGVuLmlvL3NoeW5kbWFuL3Blbi9jNTM5NGRkZjJlOGIyYTVjOTE4NTkwNGI1NzQyMWNkYiAqLwoKICAgICAgLS1zaGFkb3ctZWxldmF0aW9uLTJkcDogewogICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDJweCAwIHJnYmEoMCwgMCwgMCwgMC4xNCksCiAgICAgICAgICAgICAgICAgICAgMCAxcHggNXB4IDAgcmdiYSgwLCAwLCAwLCAwLjEyKSwKICAgICAgICAgICAgICAgICAgICAwIDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMik7CiAgICAgIH07CgogICAgICAtLXNoYWRvdy1lbGV2YXRpb24tM2RwOiB7CiAgICAgICAgYm94LXNoYWRvdzogMCAzcHggNHB4IDAgcmdiYSgwLCAwLCAwLCAwLjE0KSwKICAgICAgICAgICAgICAgICAgICAwIDFweCA4cHggMCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgM3B4IDNweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC40KTsKICAgICAgfTsKCiAgICAgIC0tc2hhZG93LWVsZXZhdGlvbi00ZHA6IHsKICAgICAgICBib3gtc2hhZG93OiAwIDRweCA1cHggMCByZ2JhKDAsIDAsIDAsIDAuMTQpLAogICAgICAgICAgICAgICAgICAgIDAgMXB4IDEwcHggMCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC40KTsKICAgICAgfTsKCiAgICAgIC0tc2hhZG93LWVsZXZhdGlvbi02ZHA6IHsKICAgICAgICBib3gtc2hhZG93OiAwIDZweCAxMHB4IDAgcmdiYSgwLCAwLCAwLCAwLjE0KSwKICAgICAgICAgICAgICAgICAgICAwIDFweCAxOHB4IDAgcmdiYSgwLCAwLCAwLCAwLjEyKSwKICAgICAgICAgICAgICAgICAgICAwIDNweCA1cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuNCk7CiAgICAgIH07CgogICAgICAtLXNoYWRvdy1lbGV2YXRpb24tOGRwOiB7CiAgICAgICAgYm94LXNoYWRvdzogMCA4cHggMTBweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwKICAgICAgICAgICAgICAgICAgICAwIDNweCAxNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgNXB4IDVweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC40KTsKICAgICAgfTsKCiAgICAgIC0tc2hhZG93LWVsZXZhdGlvbi0xMmRwOiB7CiAgICAgICAgYm94LXNoYWRvdzogMCAxMnB4IDE2cHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksCiAgICAgICAgICAgICAgICAgICAgMCA0cHggMjJweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEyKSwKICAgICAgICAgICAgICAgICAgICAwIDZweCA3cHggLTRweCByZ2JhKDAsIDAsIDAsIDAuNCk7CiAgICAgIH07CgogICAgICAtLXNoYWRvdy1lbGV2YXRpb24tMTZkcDogewogICAgICAgIGJveC1zaGFkb3c6IDAgMTZweCAyNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLAogICAgICAgICAgICAgICAgICAgIDAgIDZweCAzMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgIDhweCAxMHB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjQpOwogICAgICB9OwoKICAgICAgLS1zaGFkb3ctZWxldmF0aW9uLTI0ZHA6IHsKICAgICAgICBib3gtc2hhZG93OiAwIDI0cHggMzhweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwKICAgICAgICAgICAgICAgICAgICAwIDlweCA0NnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgMTFweCAxNXB4IC03cHggcmdiYSgwLCAwLCAwLCAwLjQpOwogICAgICB9OwogICAgfQogIDwvc3R5bGU+CjwvY3VzdG9tLXN0eWxlPmA7am8uc2V0QXR0cmlidXRlKCJzdHlsZSIsImRpc3BsYXk6IG5vbmU7IiksZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChqby5jb250ZW50KTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCmNvbnN0IEdvPV9lYAo8ZG9tLW1vZHVsZSBpZD0icGFwZXItbWF0ZXJpYWwtc3R5bGVzIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIGh0bWwgewogICAgICAgIC0tcGFwZXItbWF0ZXJpYWw6IHsKICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIH07CiAgICAgICAgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMTogewogICAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi0yZHA7CiAgICAgICAgfTsKICAgICAgICAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0yOiB7CiAgICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTRkcDsKICAgICAgICB9OwogICAgICAgIC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTM6IHsKICAgICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tNmRwOwogICAgICAgIH07CiAgICAgICAgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tNDogewogICAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi04ZHA7CiAgICAgICAgfTsKICAgICAgICAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi01OiB7CiAgICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTE2ZHA7CiAgICAgICAgfTsKICAgICAgfQogICAgICAucGFwZXItbWF0ZXJpYWwgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsOwogICAgICB9CiAgICAgIC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjEiXSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTE7CiAgICAgIH0KICAgICAgLnBhcGVyLW1hdGVyaWFsW2VsZXZhdGlvbj0iMiJdIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMjsKICAgICAgfQogICAgICAucGFwZXItbWF0ZXJpYWxbZWxldmF0aW9uPSIzIl0gewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0zOwogICAgICB9CiAgICAgIC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjQiXSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTQ7CiAgICAgIH0KICAgICAgLnBhcGVyLW1hdGVyaWFsW2VsZXZhdGlvbj0iNSJdIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tNTsKICAgICAgfQoKICAgICAgLyogRHVwbGljYXRlIHRoZSBzdHlsZXMgYmVjYXVzZSBvZiBodHRwczovL2dpdGh1Yi5jb20vd2ViY29tcG9uZW50cy9zaGFkeWNzcy9pc3N1ZXMvMTkzICovCiAgICAgIDpob3N0IHsKICAgICAgICAtLXBhcGVyLW1hdGVyaWFsOiB7CiAgICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB9OwogICAgICAgIC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTE6IHsKICAgICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tMmRwOwogICAgICAgIH07CiAgICAgICAgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMjogewogICAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi00ZHA7CiAgICAgICAgfTsKICAgICAgICAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0zOiB7CiAgICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTZkcDsKICAgICAgICB9OwogICAgICAgIC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTQ6IHsKICAgICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tOGRwOwogICAgICAgIH07CiAgICAgICAgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tNTogewogICAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi0xNmRwOwogICAgICAgIH07CiAgICAgIH0KICAgICAgOmhvc3QoLnBhcGVyLW1hdGVyaWFsKSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWw7CiAgICAgIH0KICAgICAgOmhvc3QoLnBhcGVyLW1hdGVyaWFsW2VsZXZhdGlvbj0iMSJdKSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTE7CiAgICAgIH0KICAgICAgOmhvc3QoLnBhcGVyLW1hdGVyaWFsW2VsZXZhdGlvbj0iMiJdKSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTI7CiAgICAgIH0KICAgICAgOmhvc3QoLnBhcGVyLW1hdGVyaWFsW2VsZXZhdGlvbj0iMyJdKSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTM7CiAgICAgIH0KICAgICAgOmhvc3QoLnBhcGVyLW1hdGVyaWFsW2VsZXZhdGlvbj0iNCJdKSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTQ7CiAgICAgIH0KICAgICAgOmhvc3QoLnBhcGVyLW1hdGVyaWFsW2VsZXZhdGlvbj0iNSJdKSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPmA7R28uc2V0QXR0cmlidXRlKCJzdHlsZSIsImRpc3BsYXk6IG5vbmU7IiksZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChHby5jb250ZW50KTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCmNvbnN0IFdvPXtwcm9wZXJ0aWVzOntmb2N1c2VkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwLHJlYWRPbmx5OiEwLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9kaXNhYmxlZENoYW5nZWQiLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sX29sZFRhYkluZGV4Ont0eXBlOlN0cmluZ30sX2JvdW5kRm9jdXNCbHVySGFuZGxlcjp7dHlwZTpGdW5jdGlvbix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9mb2N1c0JsdXJIYW5kbGVyLmJpbmQodGhpcyl9fX0sb2JzZXJ2ZXJzOlsiX2NoYW5nZWRDb250cm9sU3RhdGUoZm9jdXNlZCwgZGlzYWJsZWQpIl0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLl9ib3VuZEZvY3VzQmx1ckhhbmRsZXIsITApLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsdGhpcy5fYm91bmRGb2N1c0JsdXJIYW5kbGVyLCEwKX0sX2ZvY3VzQmx1ckhhbmRsZXI6ZnVuY3Rpb24odCl7dGhpcy5fc2V0Rm9jdXNlZCgiZm9jdXMiPT09dC50eXBlKX0sX2Rpc2FibGVkQ2hhbmdlZDpmdW5jdGlvbih0LGUpe3RoaXMuc2V0QXR0cmlidXRlKCJhcmlhLWRpc2FibGVkIix0PyJ0cnVlIjoiZmFsc2UiKSx0aGlzLnN0eWxlLnBvaW50ZXJFdmVudHM9dD8ibm9uZSI6IiIsdD8odGhpcy5fb2xkVGFiSW5kZXg9dGhpcy5nZXRBdHRyaWJ1dGUoInRhYmluZGV4IiksdGhpcy5fc2V0Rm9jdXNlZCghMSksdGhpcy50YWJJbmRleD0tMSx0aGlzLmJsdXIoKSk6dm9pZCAwIT09dGhpcy5fb2xkVGFiSW5kZXgmJihudWxsPT09dGhpcy5fb2xkVGFiSW5kZXg/dGhpcy5yZW1vdmVBdHRyaWJ1dGUoInRhYmluZGV4Iik6dGhpcy5zZXRBdHRyaWJ1dGUoInRhYmluZGV4Iix0aGlzLl9vbGRUYWJJbmRleCkpfSxfY2hhbmdlZENvbnRyb2xTdGF0ZTpmdW5jdGlvbigpe3RoaXMuX2NvbnRyb2xTdGF0ZUNoYW5nZWQmJnRoaXMuX2NvbnRyb2xTdGF0ZUNoYW5nZWQoKX19LHFvPXtwcm9wZXJ0aWVzOntwcmVzc2VkOnt0eXBlOkJvb2xlYW4scmVhZE9ubHk6ITAsdmFsdWU6ITEscmVmbGVjdFRvQXR0cmlidXRlOiEwLG9ic2VydmVyOiJfcHJlc3NlZENoYW5nZWQifSx0b2dnbGVzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxhY3RpdmU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITAscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxwb2ludGVyRG93bjp7dHlwZTpCb29sZWFuLHJlYWRPbmx5OiEwLHZhbHVlOiExfSxyZWNlaXZlZEZvY3VzRnJvbUtleWJvYXJkOnt0eXBlOkJvb2xlYW4scmVhZE9ubHk6ITB9LGFyaWFBY3RpdmVBdHRyaWJ1dGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJhcmlhLXByZXNzZWQiLG9ic2VydmVyOiJfYXJpYUFjdGl2ZUF0dHJpYnV0ZUNoYW5nZWQifX0sbGlzdGVuZXJzOntkb3duOiJfZG93bkhhbmRsZXIiLHVwOiJfdXBIYW5kbGVyIix0YXA6Il90YXBIYW5kbGVyIn0sb2JzZXJ2ZXJzOlsiX2ZvY3VzQ2hhbmdlZChmb2N1c2VkKSIsIl9hY3RpdmVDaGFuZ2VkKGFjdGl2ZSwgYXJpYUFjdGl2ZUF0dHJpYnV0ZSkiXSxrZXlCaW5kaW5nczp7ImVudGVyOmtleWRvd24iOiJfYXN5bmNDbGljayIsInNwYWNlOmtleWRvd24iOiJfc3BhY2VLZXlEb3duSGFuZGxlciIsInNwYWNlOmtleXVwIjoiX3NwYWNlS2V5VXBIYW5kbGVyIn0sX21vdXNlRXZlbnRSZTovXm1vdXNlLyxfdGFwSGFuZGxlcjpmdW5jdGlvbigpe3RoaXMudG9nZ2xlcz90aGlzLl91c2VyQWN0aXZhdGUoIXRoaXMuYWN0aXZlKTp0aGlzLmFjdGl2ZT0hMX0sX2ZvY3VzQ2hhbmdlZDpmdW5jdGlvbih0KXt0aGlzLl9kZXRlY3RLZXlib2FyZEZvY3VzKHQpLHR8fHRoaXMuX3NldFByZXNzZWQoITEpfSxfZGV0ZWN0S2V5Ym9hcmRGb2N1czpmdW5jdGlvbih0KXt0aGlzLl9zZXRSZWNlaXZlZEZvY3VzRnJvbUtleWJvYXJkKCF0aGlzLnBvaW50ZXJEb3duJiZ0KX0sX3VzZXJBY3RpdmF0ZTpmdW5jdGlvbih0KXt0aGlzLmFjdGl2ZSE9PXQmJih0aGlzLmFjdGl2ZT10LHRoaXMuZmlyZSgiY2hhbmdlIikpfSxfZG93bkhhbmRsZXI6ZnVuY3Rpb24odCl7dGhpcy5fc2V0UG9pbnRlckRvd24oITApLHRoaXMuX3NldFByZXNzZWQoITApLHRoaXMuX3NldFJlY2VpdmVkRm9jdXNGcm9tS2V5Ym9hcmQoITEpfSxfdXBIYW5kbGVyOmZ1bmN0aW9uKCl7dGhpcy5fc2V0UG9pbnRlckRvd24oITEpLHRoaXMuX3NldFByZXNzZWQoITEpfSxfc3BhY2VLZXlEb3duSGFuZGxlcjpmdW5jdGlvbih0KXt2YXIgZT10LmRldGFpbC5rZXlib2FyZEV2ZW50LG49cWkoZSkubG9jYWxUYXJnZXQ7dGhpcy5pc0xpZ2h0RGVzY2VuZGFudChuKXx8KGUucHJldmVudERlZmF1bHQoKSxlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpLHRoaXMuX3NldFByZXNzZWQoITApKX0sX3NwYWNlS2V5VXBIYW5kbGVyOmZ1bmN0aW9uKHQpe3ZhciBlPXFpKHQuZGV0YWlsLmtleWJvYXJkRXZlbnQpLmxvY2FsVGFyZ2V0O3RoaXMuaXNMaWdodERlc2NlbmRhbnQoZSl8fCh0aGlzLnByZXNzZWQmJnRoaXMuX2FzeW5jQ2xpY2soKSx0aGlzLl9zZXRQcmVzc2VkKCExKSl9LF9hc3luY0NsaWNrOmZ1bmN0aW9uKCl7dGhpcy5hc3luYygoZnVuY3Rpb24oKXt0aGlzLmNsaWNrKCl9KSwxKX0sX3ByZXNzZWRDaGFuZ2VkOmZ1bmN0aW9uKHQpe3RoaXMuX2NoYW5nZWRCdXR0b25TdGF0ZSgpfSxfYXJpYUFjdGl2ZUF0dHJpYnV0ZUNoYW5nZWQ6ZnVuY3Rpb24odCxlKXtlJiZlIT10JiZ0aGlzLmhhc0F0dHJpYnV0ZShlKSYmdGhpcy5yZW1vdmVBdHRyaWJ1dGUoZSl9LF9hY3RpdmVDaGFuZ2VkOmZ1bmN0aW9uKHQsZSl7dGhpcy50b2dnbGVzP3RoaXMuc2V0QXR0cmlidXRlKHRoaXMuYXJpYUFjdGl2ZUF0dHJpYnV0ZSx0PyJ0cnVlIjoiZmFsc2UiKTp0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0aGlzLmFyaWFBY3RpdmVBdHRyaWJ1dGUpLHRoaXMuX2NoYW5nZWRCdXR0b25TdGF0ZSgpfSxfY29udHJvbFN0YXRlQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuZGlzYWJsZWQ/dGhpcy5fc2V0UHJlc3NlZCghMSk6dGhpcy5fY2hhbmdlZEJ1dHRvblN0YXRlKCl9LF9jaGFuZ2VkQnV0dG9uU3RhdGU6ZnVuY3Rpb24oKXt0aGlzLl9idXR0b25TdGF0ZUNoYW5nZWQmJnRoaXMuX2J1dHRvblN0YXRlQ2hhbmdlZCgpfX0sWW89W1JvLHFvXTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCi8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNCBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwp2YXIgWG89e2Rpc3RhbmNlOmZ1bmN0aW9uKHQsZSxuLGkpe3ZhciByPXQtbixvPWUtaTtyZXR1cm4gTWF0aC5zcXJ0KHIqcitvKm8pfSxub3c6d2luZG93LnBlcmZvcm1hbmNlJiZ3aW5kb3cucGVyZm9ybWFuY2Uubm93P3dpbmRvdy5wZXJmb3JtYW5jZS5ub3cuYmluZCh3aW5kb3cucGVyZm9ybWFuY2UpOkRhdGUubm93fTtmdW5jdGlvbiAkbyh0KXt0aGlzLmVsZW1lbnQ9dCx0aGlzLndpZHRoPXRoaXMuYm91bmRpbmdSZWN0LndpZHRoLHRoaXMuaGVpZ2h0PXRoaXMuYm91bmRpbmdSZWN0LmhlaWdodCx0aGlzLnNpemU9TWF0aC5tYXgodGhpcy53aWR0aCx0aGlzLmhlaWdodCl9ZnVuY3Rpb24gS28odCl7dGhpcy5lbGVtZW50PXQsdGhpcy5jb2xvcj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KS5jb2xvcix0aGlzLndhdmU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy53YXZlQ29udGFpbmVyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMud2F2ZS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9dGhpcy5jb2xvcix0aGlzLndhdmUuY2xhc3NMaXN0LmFkZCgid2F2ZSIpLHRoaXMud2F2ZUNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCJ3YXZlLWNvbnRhaW5lciIpLHFpKHRoaXMud2F2ZUNvbnRhaW5lcikuYXBwZW5kQ2hpbGQodGhpcy53YXZlKSx0aGlzLnJlc2V0SW50ZXJhY3Rpb25TdGF0ZSgpfSRvLnByb3RvdHlwZT17Z2V0IGJvdW5kaW5nUmVjdCgpe3JldHVybiB0aGlzLmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9LGZ1cnRoZXN0Q29ybmVyRGlzdGFuY2VGcm9tOmZ1bmN0aW9uKHQsZSl7dmFyIG49WG8uZGlzdGFuY2UodCxlLDAsMCksaT1Yby5kaXN0YW5jZSh0LGUsdGhpcy53aWR0aCwwKSxyPVhvLmRpc3RhbmNlKHQsZSwwLHRoaXMuaGVpZ2h0KSxvPVhvLmRpc3RhbmNlKHQsZSx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KTtyZXR1cm4gTWF0aC5tYXgobixpLHIsbyl9fSxLby5NQVhfUkFESVVTPTMwMCxLby5wcm90b3R5cGU9e2dldCByZWNlbnRlcnMoKXtyZXR1cm4gdGhpcy5lbGVtZW50LnJlY2VudGVyc30sZ2V0IGNlbnRlcigpe3JldHVybiB0aGlzLmVsZW1lbnQuY2VudGVyfSxnZXQgbW91c2VEb3duRWxhcHNlZCgpe3ZhciB0O3JldHVybiB0aGlzLm1vdXNlRG93blN0YXJ0Pyh0PVhvLm5vdygpLXRoaXMubW91c2VEb3duU3RhcnQsdGhpcy5tb3VzZVVwU3RhcnQmJih0LT10aGlzLm1vdXNlVXBFbGFwc2VkKSx0KTowfSxnZXQgbW91c2VVcEVsYXBzZWQoKXtyZXR1cm4gdGhpcy5tb3VzZVVwU3RhcnQ/WG8ubm93KCktdGhpcy5tb3VzZVVwU3RhcnQ6MH0sZ2V0IG1vdXNlRG93bkVsYXBzZWRTZWNvbmRzKCl7cmV0dXJuIHRoaXMubW91c2VEb3duRWxhcHNlZC8xZTN9LGdldCBtb3VzZVVwRWxhcHNlZFNlY29uZHMoKXtyZXR1cm4gdGhpcy5tb3VzZVVwRWxhcHNlZC8xZTN9LGdldCBtb3VzZUludGVyYWN0aW9uU2Vjb25kcygpe3JldHVybiB0aGlzLm1vdXNlRG93bkVsYXBzZWRTZWNvbmRzK3RoaXMubW91c2VVcEVsYXBzZWRTZWNvbmRzfSxnZXQgaW5pdGlhbE9wYWNpdHkoKXtyZXR1cm4gdGhpcy5lbGVtZW50LmluaXRpYWxPcGFjaXR5fSxnZXQgb3BhY2l0eURlY2F5VmVsb2NpdHkoKXtyZXR1cm4gdGhpcy5lbGVtZW50Lm9wYWNpdHlEZWNheVZlbG9jaXR5fSxnZXQgcmFkaXVzKCl7dmFyIHQ9MS4xKk1hdGgubWluKE1hdGguc3FydCh0aGlzLmNvbnRhaW5lck1ldHJpY3Mud2lkdGgqdGhpcy5jb250YWluZXJNZXRyaWNzLndpZHRoK3RoaXMuY29udGFpbmVyTWV0cmljcy5oZWlnaHQqdGhpcy5jb250YWluZXJNZXRyaWNzLmhlaWdodCksS28uTUFYX1JBRElVUykrNSxlPXQqKDEtTWF0aC5wb3coODAsLXRoaXMubW91c2VJbnRlcmFjdGlvblNlY29uZHMvKDEuMS10L0tvLk1BWF9SQURJVVMqLjIpKSk7cmV0dXJuIE1hdGguYWJzKGUpfSxnZXQgb3BhY2l0eSgpe3JldHVybiB0aGlzLm1vdXNlVXBTdGFydD9NYXRoLm1heCgwLHRoaXMuaW5pdGlhbE9wYWNpdHktdGhpcy5tb3VzZVVwRWxhcHNlZFNlY29uZHMqdGhpcy5vcGFjaXR5RGVjYXlWZWxvY2l0eSk6dGhpcy5pbml0aWFsT3BhY2l0eX0sZ2V0IG91dGVyT3BhY2l0eSgpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKC4zKnRoaXMubW91c2VVcEVsYXBzZWRTZWNvbmRzLHRoaXMub3BhY2l0eSkpfSxnZXQgaXNPcGFjaXR5RnVsbHlEZWNheWVkKCl7cmV0dXJuIHRoaXMub3BhY2l0eTwuMDEmJnRoaXMucmFkaXVzPj1NYXRoLm1pbih0aGlzLm1heFJhZGl1cyxLby5NQVhfUkFESVVTKX0sZ2V0IGlzUmVzdGluZ0F0TWF4UmFkaXVzKCl7cmV0dXJuIHRoaXMub3BhY2l0eT49dGhpcy5pbml0aWFsT3BhY2l0eSYmdGhpcy5yYWRpdXM+PU1hdGgubWluKHRoaXMubWF4UmFkaXVzLEtvLk1BWF9SQURJVVMpfSxnZXQgaXNBbmltYXRpb25Db21wbGV0ZSgpe3JldHVybiB0aGlzLm1vdXNlVXBTdGFydD90aGlzLmlzT3BhY2l0eUZ1bGx5RGVjYXllZDp0aGlzLmlzUmVzdGluZ0F0TWF4UmFkaXVzfSxnZXQgdHJhbnNsYXRpb25GcmFjdGlvbigpe3JldHVybiBNYXRoLm1pbigxLHRoaXMucmFkaXVzL3RoaXMuY29udGFpbmVyTWV0cmljcy5zaXplKjIvTWF0aC5zcXJ0KDIpKX0sZ2V0IHhOb3coKXtyZXR1cm4gdGhpcy54RW5kP3RoaXMueFN0YXJ0K3RoaXMudHJhbnNsYXRpb25GcmFjdGlvbioodGhpcy54RW5kLXRoaXMueFN0YXJ0KTp0aGlzLnhTdGFydH0sZ2V0IHlOb3coKXtyZXR1cm4gdGhpcy55RW5kP3RoaXMueVN0YXJ0K3RoaXMudHJhbnNsYXRpb25GcmFjdGlvbioodGhpcy55RW5kLXRoaXMueVN0YXJ0KTp0aGlzLnlTdGFydH0sZ2V0IGlzTW91c2VEb3duKCl7cmV0dXJuIHRoaXMubW91c2VEb3duU3RhcnQmJiF0aGlzLm1vdXNlVXBTdGFydH0scmVzZXRJbnRlcmFjdGlvblN0YXRlOmZ1bmN0aW9uKCl7dGhpcy5tYXhSYWRpdXM9MCx0aGlzLm1vdXNlRG93blN0YXJ0PTAsdGhpcy5tb3VzZVVwU3RhcnQ9MCx0aGlzLnhTdGFydD0wLHRoaXMueVN0YXJ0PTAsdGhpcy54RW5kPTAsdGhpcy55RW5kPTAsdGhpcy5zbGlkZURpc3RhbmNlPTAsdGhpcy5jb250YWluZXJNZXRyaWNzPW5ldyAkbyh0aGlzLmVsZW1lbnQpfSxkcmF3OmZ1bmN0aW9uKCl7dmFyIHQsZSxuO3RoaXMud2F2ZS5zdHlsZS5vcGFjaXR5PXRoaXMub3BhY2l0eSx0PXRoaXMucmFkaXVzLyh0aGlzLmNvbnRhaW5lck1ldHJpY3Muc2l6ZS8yKSx0aGlzLndhdmVDb250YWluZXIuc3R5bGUud2Via2l0VHJhbnNmb3JtPSJ0cmFuc2xhdGUoIisoZT10aGlzLnhOb3ctdGhpcy5jb250YWluZXJNZXRyaWNzLndpZHRoLzIpKyJweCwgIisobj10aGlzLnlOb3ctdGhpcy5jb250YWluZXJNZXRyaWNzLmhlaWdodC8yKSsicHgpIix0aGlzLndhdmVDb250YWluZXIuc3R5bGUudHJhbnNmb3JtPSJ0cmFuc2xhdGUzZCgiK2UrInB4LCAiK24rInB4LCAwKSIsdGhpcy53YXZlLnN0eWxlLndlYmtpdFRyYW5zZm9ybT0ic2NhbGUoIit0KyIsIit0KyIpIix0aGlzLndhdmUuc3R5bGUudHJhbnNmb3JtPSJzY2FsZTNkKCIrdCsiLCIrdCsiLDEpIn0sZG93bkFjdGlvbjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmNvbnRhaW5lck1ldHJpY3Mud2lkdGgvMixuPXRoaXMuY29udGFpbmVyTWV0cmljcy5oZWlnaHQvMjt0aGlzLnJlc2V0SW50ZXJhY3Rpb25TdGF0ZSgpLHRoaXMubW91c2VEb3duU3RhcnQ9WG8ubm93KCksdGhpcy5jZW50ZXI/KHRoaXMueFN0YXJ0PWUsdGhpcy55U3RhcnQ9bix0aGlzLnNsaWRlRGlzdGFuY2U9WG8uZGlzdGFuY2UodGhpcy54U3RhcnQsdGhpcy55U3RhcnQsdGhpcy54RW5kLHRoaXMueUVuZCkpOih0aGlzLnhTdGFydD10P3QuZGV0YWlsLngtdGhpcy5jb250YWluZXJNZXRyaWNzLmJvdW5kaW5nUmVjdC5sZWZ0OnRoaXMuY29udGFpbmVyTWV0cmljcy53aWR0aC8yLHRoaXMueVN0YXJ0PXQ/dC5kZXRhaWwueS10aGlzLmNvbnRhaW5lck1ldHJpY3MuYm91bmRpbmdSZWN0LnRvcDp0aGlzLmNvbnRhaW5lck1ldHJpY3MuaGVpZ2h0LzIpLHRoaXMucmVjZW50ZXJzJiYodGhpcy54RW5kPWUsdGhpcy55RW5kPW4sdGhpcy5zbGlkZURpc3RhbmNlPVhvLmRpc3RhbmNlKHRoaXMueFN0YXJ0LHRoaXMueVN0YXJ0LHRoaXMueEVuZCx0aGlzLnlFbmQpKSx0aGlzLm1heFJhZGl1cz10aGlzLmNvbnRhaW5lck1ldHJpY3MuZnVydGhlc3RDb3JuZXJEaXN0YW5jZUZyb20odGhpcy54U3RhcnQsdGhpcy55U3RhcnQpLHRoaXMud2F2ZUNvbnRhaW5lci5zdHlsZS50b3A9KHRoaXMuY29udGFpbmVyTWV0cmljcy5oZWlnaHQtdGhpcy5jb250YWluZXJNZXRyaWNzLnNpemUpLzIrInB4Iix0aGlzLndhdmVDb250YWluZXIuc3R5bGUubGVmdD0odGhpcy5jb250YWluZXJNZXRyaWNzLndpZHRoLXRoaXMuY29udGFpbmVyTWV0cmljcy5zaXplKS8yKyJweCIsdGhpcy53YXZlQ29udGFpbmVyLnN0eWxlLndpZHRoPXRoaXMuY29udGFpbmVyTWV0cmljcy5zaXplKyJweCIsdGhpcy53YXZlQ29udGFpbmVyLnN0eWxlLmhlaWdodD10aGlzLmNvbnRhaW5lck1ldHJpY3Muc2l6ZSsicHgifSx1cEFjdGlvbjpmdW5jdGlvbih0KXt0aGlzLmlzTW91c2VEb3duJiYodGhpcy5tb3VzZVVwU3RhcnQ9WG8ubm93KCkpfSxyZW1vdmU6ZnVuY3Rpb24oKXtxaShxaSh0aGlzLndhdmVDb250YWluZXIpLnBhcmVudE5vZGUpLnJlbW92ZUNoaWxkKHRoaXMud2F2ZUNvbnRhaW5lcil9fSxJcih7X3RlbXBsYXRlOl9lYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGJvcmRlci1yYWRpdXM6IGluaGVyaXQ7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CgogICAgICAgIC8qIFNlZSBQb2x5bWVyRWxlbWVudHMvcGFwZXItYmVoYXZpb3JzL2lzc3Vlcy8zNC4gT24gbm9uLUNocm9tZSBicm93c2VycywKICAgICAgICAgKiBjcmVhdGluZyBhIG5vZGUgKHdpdGggYSBwb3NpdGlvbjphYnNvbHV0ZSkgaW4gdGhlIG1pZGRsZSBvZiBhbiBldmVudAogICAgICAgICAqIGhhbmRsZXIgImludGVycnVwdHMiIHRoYXQgZXZlbnQgaGFuZGxlciAod2hpY2ggaGFwcGVucyB3aGVuIHRoZQogICAgICAgICAqIHJpcHBsZSBpcyBjcmVhdGVkIG9uIGRlbWFuZCkgKi8KICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2FuaW1hdGluZ10pIHsKICAgICAgICAvKiBUaGlzIHJlc29sdmVzIGEgcmVuZGVyaW5nIGlzc3VlIGluIENocm9tZSAoYXMgb2YgNDApIHdoZXJlIHRoZQogICAgICAgICAgIHJpcHBsZSBpcyBub3QgcHJvcGVybHkgY2xpcHBlZCBieSBpdHMgcGFyZW50ICh3aGljaCBtYXkgaGF2ZQogICAgICAgICAgIHJvdW5kZWQgY29ybmVycykuIFNlZTogaHR0cDovL2pzYmluLmNvbS90ZW1leGEvNAoKICAgICAgICAgICBOb3RlOiBXZSBvbmx5IGFwcGx5IHRoaXMgc3R5bGUgY29uZGl0aW9uYWxseS4gT3RoZXJ3aXNlLCB0aGUgYnJvd3NlcgogICAgICAgICAgIHdpbGwgY3JlYXRlIGEgbmV3IGNvbXBvc2l0aW5nIGxheWVyIGZvciBldmVyeSByaXBwbGUgZWxlbWVudCBvbiB0aGUKICAgICAgICAgICBwYWdlLCBhbmQgdGhhdCB3b3VsZCBiZSBiYWQuICovCiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAwKTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDAsIDApOwogICAgICB9CgogICAgICAjYmFja2dyb3VuZCwKICAgICAgI3dhdmVzLAogICAgICAud2F2ZS1jb250YWluZXIsCiAgICAgIC53YXZlIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAjYmFja2dyb3VuZCwKICAgICAgLndhdmUgewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgIH0KCiAgICAgICN3YXZlcywKICAgICAgLndhdmUgewogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC53YXZlLWNvbnRhaW5lciwKICAgICAgLndhdmUgewogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgfQoKICAgICAgOmhvc3QoLmNpcmNsZSkgI2JhY2tncm91bmQsCiAgICAgIDpob3N0KC5jaXJjbGUpICN3YXZlcyB7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICB9CgogICAgICA6aG9zdCguY2lyY2xlKSAud2F2ZS1jb250YWluZXIgewogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBpZD0iYmFja2dyb3VuZCI+PC9kaXY+CiAgICA8ZGl2IGlkPSJ3YXZlcyI+PC9kaXY+CmAsaXM6InBhcGVyLXJpcHBsZSIsYmVoYXZpb3JzOltSb10scHJvcGVydGllczp7aW5pdGlhbE9wYWNpdHk6e3R5cGU6TnVtYmVyLHZhbHVlOi4yNX0sb3BhY2l0eURlY2F5VmVsb2NpdHk6e3R5cGU6TnVtYmVyLHZhbHVlOi44fSxyZWNlbnRlcnM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sY2VudGVyOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHJpcHBsZXM6e3R5cGU6QXJyYXksdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19LGFuaW1hdGluZzp7dHlwZTpCb29sZWFuLHJlYWRPbmx5OiEwLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCx2YWx1ZTohMX0saG9sZERvd246e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX2hvbGREb3duQ2hhbmdlZCJ9LG5vaW5rOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9hbmltYXRpbmc6e3R5cGU6Qm9vbGVhbn0sX2JvdW5kQW5pbWF0ZTp7dHlwZTpGdW5jdGlvbix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFuaW1hdGUuYmluZCh0aGlzKX19fSxnZXQgdGFyZ2V0KCl7cmV0dXJuIHRoaXMua2V5RXZlbnRUYXJnZXR9LGtleUJpbmRpbmdzOnsiZW50ZXI6a2V5ZG93biI6Il9vbkVudGVyS2V5ZG93biIsInNwYWNlOmtleWRvd24iOiJfb25TcGFjZUtleWRvd24iLCJzcGFjZTprZXl1cCI6Il9vblNwYWNlS2V5dXAifSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMua2V5RXZlbnRUYXJnZXQ9MTE9PXFpKHRoaXMpLnBhcmVudE5vZGUubm9kZVR5cGU/cWkodGhpcykuZ2V0T3duZXJSb290KCkuaG9zdDpxaSh0aGlzKS5wYXJlbnROb2RlO3ZhciB0PXRoaXMua2V5RXZlbnRUYXJnZXQ7dGhpcy5saXN0ZW4odCwidXAiLCJ1aVVwQWN0aW9uIiksdGhpcy5saXN0ZW4odCwiZG93biIsInVpRG93bkFjdGlvbiIpfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMudW5saXN0ZW4odGhpcy5rZXlFdmVudFRhcmdldCwidXAiLCJ1aVVwQWN0aW9uIiksdGhpcy51bmxpc3Rlbih0aGlzLmtleUV2ZW50VGFyZ2V0LCJkb3duIiwidWlEb3duQWN0aW9uIiksdGhpcy5rZXlFdmVudFRhcmdldD1udWxsfSxnZXQgc2hvdWxkS2VlcEFuaW1hdGluZygpe2Zvcih2YXIgdD0wO3Q8dGhpcy5yaXBwbGVzLmxlbmd0aDsrK3QpaWYoIXRoaXMucmlwcGxlc1t0XS5pc0FuaW1hdGlvbkNvbXBsZXRlKXJldHVybiEwO3JldHVybiExfSxzaW11bGF0ZWRSaXBwbGU6ZnVuY3Rpb24oKXt0aGlzLmRvd25BY3Rpb24obnVsbCksdGhpcy5hc3luYygoZnVuY3Rpb24oKXt0aGlzLnVwQWN0aW9uKCl9KSwxKX0sdWlEb3duQWN0aW9uOmZ1bmN0aW9uKHQpe3RoaXMubm9pbmt8fHRoaXMuZG93bkFjdGlvbih0KX0sZG93bkFjdGlvbjpmdW5jdGlvbih0KXt0aGlzLmhvbGREb3duJiZ0aGlzLnJpcHBsZXMubGVuZ3RoPjB8fCh0aGlzLmFkZFJpcHBsZSgpLmRvd25BY3Rpb24odCksdGhpcy5fYW5pbWF0aW5nfHwodGhpcy5fYW5pbWF0aW5nPSEwLHRoaXMuYW5pbWF0ZSgpKSl9LHVpVXBBY3Rpb246ZnVuY3Rpb24odCl7dGhpcy5ub2lua3x8dGhpcy51cEFjdGlvbih0KX0sdXBBY3Rpb246ZnVuY3Rpb24odCl7dGhpcy5ob2xkRG93bnx8KHRoaXMucmlwcGxlcy5mb3JFYWNoKChmdW5jdGlvbihlKXtlLnVwQWN0aW9uKHQpfSkpLHRoaXMuX2FuaW1hdGluZz0hMCx0aGlzLmFuaW1hdGUoKSl9LG9uQW5pbWF0aW9uQ29tcGxldGU6ZnVuY3Rpb24oKXt0aGlzLl9hbmltYXRpbmc9ITEsdGhpcy4kLmJhY2tncm91bmQuc3R5bGUuYmFja2dyb3VuZENvbG9yPSIiLHRoaXMuZmlyZSgidHJhbnNpdGlvbmVuZCIpfSxhZGRSaXBwbGU6ZnVuY3Rpb24oKXt2YXIgdD1uZXcgS28odGhpcyk7cmV0dXJuIHFpKHRoaXMuJC53YXZlcykuYXBwZW5kQ2hpbGQodC53YXZlQ29udGFpbmVyKSx0aGlzLiQuYmFja2dyb3VuZC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9dC5jb2xvcix0aGlzLnJpcHBsZXMucHVzaCh0KSx0aGlzLl9zZXRBbmltYXRpbmcoITApLHR9LHJlbW92ZVJpcHBsZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLnJpcHBsZXMuaW5kZXhPZih0KTtlPDB8fCh0aGlzLnJpcHBsZXMuc3BsaWNlKGUsMSksdC5yZW1vdmUoKSx0aGlzLnJpcHBsZXMubGVuZ3RofHx0aGlzLl9zZXRBbmltYXRpbmcoITEpKX0sYW5pbWF0ZTpmdW5jdGlvbigpe2lmKHRoaXMuX2FuaW1hdGluZyl7dmFyIHQsZTtmb3IodD0wO3Q8dGhpcy5yaXBwbGVzLmxlbmd0aDsrK3QpKGU9dGhpcy5yaXBwbGVzW3RdKS5kcmF3KCksdGhpcy4kLmJhY2tncm91bmQuc3R5bGUub3BhY2l0eT1lLm91dGVyT3BhY2l0eSxlLmlzT3BhY2l0eUZ1bGx5RGVjYXllZCYmIWUuaXNSZXN0aW5nQXRNYXhSYWRpdXMmJnRoaXMucmVtb3ZlUmlwcGxlKGUpO3RoaXMuc2hvdWxkS2VlcEFuaW1hdGluZ3x8MCE9PXRoaXMucmlwcGxlcy5sZW5ndGg/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLl9ib3VuZEFuaW1hdGUpOnRoaXMub25BbmltYXRpb25Db21wbGV0ZSgpfX0sYW5pbWF0ZVJpcHBsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFuaW1hdGUoKX0sX29uRW50ZXJLZXlkb3duOmZ1bmN0aW9uKCl7dGhpcy51aURvd25BY3Rpb24oKSx0aGlzLmFzeW5jKHRoaXMudWlVcEFjdGlvbiwxKX0sX29uU3BhY2VLZXlkb3duOmZ1bmN0aW9uKCl7dGhpcy51aURvd25BY3Rpb24oKX0sX29uU3BhY2VLZXl1cDpmdW5jdGlvbigpe3RoaXMudWlVcEFjdGlvbigpfSxfaG9sZERvd25DaGFuZ2VkOmZ1bmN0aW9uKHQsZSl7dm9pZCAwIT09ZSYmKHQ/dGhpcy5kb3duQWN0aW9uKCk6dGhpcy51cEFjdGlvbigpKX19KTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCmNvbnN0IFpvPXtwcm9wZXJ0aWVzOntub2luazp7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfbm9pbmtDaGFuZ2VkIn0sX3JpcHBsZUNvbnRhaW5lcjp7dHlwZTpPYmplY3R9fSxfYnV0dG9uU3RhdGVDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5mb2N1c2VkJiZ0aGlzLmVuc3VyZVJpcHBsZSgpfSxfZG93bkhhbmRsZXI6ZnVuY3Rpb24odCl7cW8uX2Rvd25IYW5kbGVyLmNhbGwodGhpcyx0KSx0aGlzLnByZXNzZWQmJnRoaXMuZW5zdXJlUmlwcGxlKHQpfSxlbnN1cmVSaXBwbGU6ZnVuY3Rpb24odCl7aWYoIXRoaXMuaGFzUmlwcGxlKCkpe3RoaXMuX3JpcHBsZT10aGlzLl9jcmVhdGVSaXBwbGUoKSx0aGlzLl9yaXBwbGUubm9pbms9dGhpcy5ub2luazt2YXIgZT10aGlzLl9yaXBwbGVDb250YWluZXJ8fHRoaXMucm9vdDtpZihlJiZxaShlKS5hcHBlbmRDaGlsZCh0aGlzLl9yaXBwbGUpLHQpe3ZhciBuPXFpKHRoaXMuX3JpcHBsZUNvbnRhaW5lcnx8dGhpcyksaT1xaSh0KS5yb290VGFyZ2V0O24uZGVlcENvbnRhaW5zKGkpJiZ0aGlzLl9yaXBwbGUudWlEb3duQWN0aW9uKHQpfX19LGdldFJpcHBsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVuc3VyZVJpcHBsZSgpLHRoaXMuX3JpcHBsZX0saGFzUmlwcGxlOmZ1bmN0aW9uKCl7cmV0dXJuIEJvb2xlYW4odGhpcy5fcmlwcGxlKX0sX2NyZWF0ZVJpcHBsZTpmdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwYXBlci1yaXBwbGUiKX0sX25vaW5rQ2hhbmdlZDpmdW5jdGlvbih0KXt0aGlzLmhhc1JpcHBsZSgpJiYodGhpcy5fcmlwcGxlLm5vaW5rPXQpfX0sSm89e3Byb3BlcnRpZXM6e2VsZXZhdGlvbjp7dHlwZTpOdW1iZXIscmVmbGVjdFRvQXR0cmlidXRlOiEwLHJlYWRPbmx5OiEwfX0sb2JzZXJ2ZXJzOlsiX2NhbGN1bGF0ZUVsZXZhdGlvbihmb2N1c2VkLCBkaXNhYmxlZCwgYWN0aXZlLCBwcmVzc2VkLCByZWNlaXZlZEZvY3VzRnJvbUtleWJvYXJkKSIsIl9jb21wdXRlS2V5Ym9hcmRDbGFzcyhyZWNlaXZlZEZvY3VzRnJvbUtleWJvYXJkKSJdLGhvc3RBdHRyaWJ1dGVzOntyb2xlOiJidXR0b24iLHRhYmluZGV4OiIwIixhbmltYXRlZDohMH0sX2NhbGN1bGF0ZUVsZXZhdGlvbjpmdW5jdGlvbigpe3ZhciB0PTE7dGhpcy5kaXNhYmxlZD90PTA6dGhpcy5hY3RpdmV8fHRoaXMucHJlc3NlZD90PTQ6dGhpcy5yZWNlaXZlZEZvY3VzRnJvbUtleWJvYXJkJiYodD0zKSx0aGlzLl9zZXRFbGV2YXRpb24odCl9LF9jb21wdXRlS2V5Ym9hcmRDbGFzczpmdW5jdGlvbih0KXt0aGlzLnRvZ2dsZUNsYXNzKCJrZXlib2FyZC1mb2N1cyIsdCl9LF9zcGFjZUtleURvd25IYW5kbGVyOmZ1bmN0aW9uKHQpe3FvLl9zcGFjZUtleURvd25IYW5kbGVyLmNhbGwodGhpcyx0KSx0aGlzLmhhc1JpcHBsZSgpJiZ0aGlzLmdldFJpcHBsZSgpLnJpcHBsZXMubGVuZ3RoPDEmJnRoaXMuX3JpcHBsZS51aURvd25BY3Rpb24oKX0sX3NwYWNlS2V5VXBIYW5kbGVyOmZ1bmN0aW9uKHQpe3FvLl9zcGFjZUtleVVwSGFuZGxlci5jYWxsKHRoaXMsdCksdGhpcy5oYXNSaXBwbGUoKSYmdGhpcy5fcmlwcGxlLnVpVXBBY3Rpb24oKX19LFFvPVtZbyxXbyxabyxKb10sdGE9X2VgCiAgPHN0eWxlIGluY2x1ZGU9InBhcGVyLW1hdGVyaWFsLXN0eWxlcyI+CiAgICAvKiBOZWVkIHRvIHNwZWNpZnkgdGhlIHNhbWUgc3BlY2lmaWNpdHkgYXMgdGhlIHN0eWxlcyBpbXBvcnRlZCBmcm9tIHBhcGVyLW1hdGVyaWFsLiAqLwogICAgOmhvc3QgewogICAgICBAYXBwbHkgLS1sYXlvdXQtaW5saW5lOwogICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyLWNlbnRlcjsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICBtaW4td2lkdGg6IDUuMTRlbTsKICAgICAgbWFyZ2luOiAwIDAuMjllbTsKICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKTsKICAgICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDsKICAgICAgZm9udDogaW5oZXJpdDsKICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgb3V0bGluZS13aWR0aDogMDsKICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIHotaW5kZXg6IDA7CiAgICAgIHBhZGRpbmc6IDAuN2VtIDAuNTdlbTsKCiAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CiAgICAgIEBhcHBseSAtLXBhcGVyLWJ1dHRvbjsKICAgIH0KCiAgICA6aG9zdChbZWxldmF0aW9uPSIxIl0pIHsKICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTE7CiAgICB9CgogICAgOmhvc3QoW2VsZXZhdGlvbj0iMiJdKSB7CiAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0yOwogICAgfQoKICAgIDpob3N0KFtlbGV2YXRpb249IjMiXSkgewogICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMzsKICAgIH0KCiAgICA6aG9zdChbZWxldmF0aW9uPSI0Il0pIHsKICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTQ7CiAgICB9CgogICAgOmhvc3QoW2VsZXZhdGlvbj0iNSJdKSB7CiAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi01OwogICAgfQoKICAgIDpob3N0KFtoaWRkZW5dKSB7CiAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgIH0KCiAgICA6aG9zdChbcmFpc2VkXS5rZXlib2FyZC1mb2N1cykgewogICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgQGFwcGx5IC0tcGFwZXItYnV0dG9uLXJhaXNlZC1rZXlib2FyZC1mb2N1czsKICAgIH0KCiAgICA6aG9zdCg6bm90KFtyYWlzZWRdKS5rZXlib2FyZC1mb2N1cykgewogICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgQGFwcGx5IC0tcGFwZXItYnV0dG9uLWZsYXQta2V5Ym9hcmQtZm9jdXM7CiAgICB9CgogICAgOmhvc3QoW2Rpc2FibGVkXSkgewogICAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgICBjb2xvcjogI2E4YThhODsKICAgICAgY3Vyc29yOiBhdXRvOwogICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKCiAgICAgIEBhcHBseSAtLXBhcGVyLWJ1dHRvbi1kaXNhYmxlZDsKICAgIH0KCiAgICA6aG9zdChbZGlzYWJsZWRdW3JhaXNlZF0pIHsKICAgICAgYmFja2dyb3VuZDogI2VhZWFlYTsKICAgIH0KCgogICAgOmhvc3QoW2FuaW1hdGVkXSkgewogICAgICBAYXBwbHkgLS1zaGFkb3ctdHJhbnNpdGlvbjsKICAgIH0KCiAgICBwYXBlci1yaXBwbGUgewogICAgICBjb2xvcjogdmFyKC0tcGFwZXItYnV0dG9uLWluay1jb2xvcik7CiAgICB9CiAgPC9zdHlsZT4KCiAgPHNsb3Q+PC9zbG90PmA7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqL3RhLnNldEF0dHJpYnV0ZSgic3RyaXAtd2hpdGVzcGFjZSIsIiIpLElyKHtfdGVtcGxhdGU6dGEsaXM6InBhcGVyLWJ1dHRvbiIsYmVoYXZpb3JzOltRb10scHJvcGVydGllczp7cmFpc2VkOnt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwLHZhbHVlOiExLG9ic2VydmVyOiJfY2FsY3VsYXRlRWxldmF0aW9uIn19LF9jYWxjdWxhdGVFbGV2YXRpb246ZnVuY3Rpb24oKXt0aGlzLnJhaXNlZD9Kby5fY2FsY3VsYXRlRWxldmF0aW9uLmFwcGx5KHRoaXMpOnRoaXMuX3NldEVsZXZhdGlvbigwKX19KTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCmNvbnN0IGVhPV9lYAo8Y3VzdG9tLXN0eWxlPgogIDxzdHlsZSBpcz0iY3VzdG9tLXN0eWxlIj4KICAgIGh0bWwgewoKICAgICAgLyogTWF0ZXJpYWwgRGVzaWduIGNvbG9yIHBhbGV0dGUgZm9yIEdvb2dsZSBwcm9kdWN0cyAqLwoKICAgICAgLS1nb29nbGUtcmVkLTEwMDogI2Y0YzdjMzsKICAgICAgLS1nb29nbGUtcmVkLTMwMDogI2U2N2M3MzsKICAgICAgLS1nb29nbGUtcmVkLTUwMDogI2RiNDQzNzsKICAgICAgLS1nb29nbGUtcmVkLTcwMDogI2M1MzkyOTsKCiAgICAgIC0tZ29vZ2xlLWJsdWUtMTAwOiAjYzZkYWZjOwogICAgICAtLWdvb2dsZS1ibHVlLTMwMDogIzdiYWFmNzsKICAgICAgLS1nb29nbGUtYmx1ZS01MDA6ICM0Mjg1ZjQ7CiAgICAgIC0tZ29vZ2xlLWJsdWUtNzAwOiAjMzM2N2Q2OwoKICAgICAgLS1nb29nbGUtZ3JlZW4tMTAwOiAjYjdlMWNkOwogICAgICAtLWdvb2dsZS1ncmVlbi0zMDA6ICM1N2JiOGE7CiAgICAgIC0tZ29vZ2xlLWdyZWVuLTUwMDogIzBmOWQ1ODsKICAgICAgLS1nb29nbGUtZ3JlZW4tNzAwOiAjMGI4MDQzOwoKICAgICAgLS1nb29nbGUteWVsbG93LTEwMDogI2ZjZThiMjsKICAgICAgLS1nb29nbGUteWVsbG93LTMwMDogI2Y3Y2I0ZDsKICAgICAgLS1nb29nbGUteWVsbG93LTUwMDogI2Y0YjQwMDsKICAgICAgLS1nb29nbGUteWVsbG93LTcwMDogI2YwOTMwMDsKCiAgICAgIC0tZ29vZ2xlLWdyZXktMTAwOiAjZjVmNWY1OwogICAgICAtLWdvb2dsZS1ncmV5LTMwMDogI2UwZTBlMDsKICAgICAgLS1nb29nbGUtZ3JleS01MDA6ICM5ZTllOWU7CiAgICAgIC0tZ29vZ2xlLWdyZXktNzAwOiAjNjE2MTYxOwoKICAgICAgLyogTWF0ZXJpYWwgRGVzaWduIGNvbG9yIHBhbGV0dGUgZnJvbSBvbmxpbmUgc3BlYyBkb2N1bWVudCAqLwoKICAgICAgLS1wYXBlci1yZWQtNTA6ICNmZmViZWU7CiAgICAgIC0tcGFwZXItcmVkLTEwMDogI2ZmY2RkMjsKICAgICAgLS1wYXBlci1yZWQtMjAwOiAjZWY5YTlhOwogICAgICAtLXBhcGVyLXJlZC0zMDA6ICNlNTczNzM7CiAgICAgIC0tcGFwZXItcmVkLTQwMDogI2VmNTM1MDsKICAgICAgLS1wYXBlci1yZWQtNTAwOiAjZjQ0MzM2OwogICAgICAtLXBhcGVyLXJlZC02MDA6ICNlNTM5MzU7CiAgICAgIC0tcGFwZXItcmVkLTcwMDogI2QzMmYyZjsKICAgICAgLS1wYXBlci1yZWQtODAwOiAjYzYyODI4OwogICAgICAtLXBhcGVyLXJlZC05MDA6ICNiNzFjMWM7CiAgICAgIC0tcGFwZXItcmVkLWExMDA6ICNmZjhhODA7CiAgICAgIC0tcGFwZXItcmVkLWEyMDA6ICNmZjUyNTI7CiAgICAgIC0tcGFwZXItcmVkLWE0MDA6ICNmZjE3NDQ7CiAgICAgIC0tcGFwZXItcmVkLWE3MDA6ICNkNTAwMDA7CgogICAgICAtLXBhcGVyLXBpbmstNTA6ICNmY2U0ZWM7CiAgICAgIC0tcGFwZXItcGluay0xMDA6ICNmOGJiZDA7CiAgICAgIC0tcGFwZXItcGluay0yMDA6ICNmNDhmYjE7CiAgICAgIC0tcGFwZXItcGluay0zMDA6ICNmMDYyOTI7CiAgICAgIC0tcGFwZXItcGluay00MDA6ICNlYzQwN2E7CiAgICAgIC0tcGFwZXItcGluay01MDA6ICNlOTFlNjM7CiAgICAgIC0tcGFwZXItcGluay02MDA6ICNkODFiNjA7CiAgICAgIC0tcGFwZXItcGluay03MDA6ICNjMjE4NWI7CiAgICAgIC0tcGFwZXItcGluay04MDA6ICNhZDE0NTc7CiAgICAgIC0tcGFwZXItcGluay05MDA6ICM4ODBlNGY7CiAgICAgIC0tcGFwZXItcGluay1hMTAwOiAjZmY4MGFiOwogICAgICAtLXBhcGVyLXBpbmstYTIwMDogI2ZmNDA4MTsKICAgICAgLS1wYXBlci1waW5rLWE0MDA6ICNmNTAwNTc7CiAgICAgIC0tcGFwZXItcGluay1hNzAwOiAjYzUxMTYyOwoKICAgICAgLS1wYXBlci1wdXJwbGUtNTA6ICNmM2U1ZjU7CiAgICAgIC0tcGFwZXItcHVycGxlLTEwMDogI2UxYmVlNzsKICAgICAgLS1wYXBlci1wdXJwbGUtMjAwOiAjY2U5M2Q4OwogICAgICAtLXBhcGVyLXB1cnBsZS0zMDA6ICNiYTY4Yzg7CiAgICAgIC0tcGFwZXItcHVycGxlLTQwMDogI2FiNDdiYzsKICAgICAgLS1wYXBlci1wdXJwbGUtNTAwOiAjOWMyN2IwOwogICAgICAtLXBhcGVyLXB1cnBsZS02MDA6ICM4ZTI0YWE7CiAgICAgIC0tcGFwZXItcHVycGxlLTcwMDogIzdiMWZhMjsKICAgICAgLS1wYXBlci1wdXJwbGUtODAwOiAjNmExYjlhOwogICAgICAtLXBhcGVyLXB1cnBsZS05MDA6ICM0YTE0OGM7CiAgICAgIC0tcGFwZXItcHVycGxlLWExMDA6ICNlYTgwZmM7CiAgICAgIC0tcGFwZXItcHVycGxlLWEyMDA6ICNlMDQwZmI7CiAgICAgIC0tcGFwZXItcHVycGxlLWE0MDA6ICNkNTAwZjk7CiAgICAgIC0tcGFwZXItcHVycGxlLWE3MDA6ICNhYTAwZmY7CgogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLTUwOiAjZWRlN2Y2OwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLTEwMDogI2QxYzRlOTsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS0yMDA6ICNiMzlkZGI7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtMzAwOiAjOTU3NWNkOwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLTQwMDogIzdlNTdjMjsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS01MDA6ICM2NzNhYjc7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtNjAwOiAjNWUzNWIxOwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLTcwMDogIzUxMmRhODsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS04MDA6ICM0NTI3YTA7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtOTAwOiAjMzExYjkyOwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLWExMDA6ICNiMzg4ZmY7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtYTIwMDogIzdjNGRmZjsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS1hNDAwOiAjNjUxZmZmOwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLWE3MDA6ICM2MjAwZWE7CgogICAgICAtLXBhcGVyLWluZGlnby01MDogI2U4ZWFmNjsKICAgICAgLS1wYXBlci1pbmRpZ28tMTAwOiAjYzVjYWU5OwogICAgICAtLXBhcGVyLWluZGlnby0yMDA6ICM5ZmE4ZGE7CiAgICAgIC0tcGFwZXItaW5kaWdvLTMwMDogIzc5ODZjYjsKICAgICAgLS1wYXBlci1pbmRpZ28tNDAwOiAjNWM2YmMwOwogICAgICAtLXBhcGVyLWluZGlnby01MDA6ICMzZjUxYjU7CiAgICAgIC0tcGFwZXItaW5kaWdvLTYwMDogIzM5NDlhYjsKICAgICAgLS1wYXBlci1pbmRpZ28tNzAwOiAjMzAzZjlmOwogICAgICAtLXBhcGVyLWluZGlnby04MDA6ICMyODM1OTM7CiAgICAgIC0tcGFwZXItaW5kaWdvLTkwMDogIzFhMjM3ZTsKICAgICAgLS1wYXBlci1pbmRpZ28tYTEwMDogIzhjOWVmZjsKICAgICAgLS1wYXBlci1pbmRpZ28tYTIwMDogIzUzNmRmZTsKICAgICAgLS1wYXBlci1pbmRpZ28tYTQwMDogIzNkNWFmZTsKICAgICAgLS1wYXBlci1pbmRpZ28tYTcwMDogIzMwNGZmZTsKCiAgICAgIC0tcGFwZXItYmx1ZS01MDogI2UzZjJmZDsKICAgICAgLS1wYXBlci1ibHVlLTEwMDogI2JiZGVmYjsKICAgICAgLS1wYXBlci1ibHVlLTIwMDogIzkwY2FmOTsKICAgICAgLS1wYXBlci1ibHVlLTMwMDogIzY0YjVmNjsKICAgICAgLS1wYXBlci1ibHVlLTQwMDogIzQyYTVmNTsKICAgICAgLS1wYXBlci1ibHVlLTUwMDogIzIxOTZmMzsKICAgICAgLS1wYXBlci1ibHVlLTYwMDogIzFlODhlNTsKICAgICAgLS1wYXBlci1ibHVlLTcwMDogIzE5NzZkMjsKICAgICAgLS1wYXBlci1ibHVlLTgwMDogIzE1NjVjMDsKICAgICAgLS1wYXBlci1ibHVlLTkwMDogIzBkNDdhMTsKICAgICAgLS1wYXBlci1ibHVlLWExMDA6ICM4MmIxZmY7CiAgICAgIC0tcGFwZXItYmx1ZS1hMjAwOiAjNDQ4YWZmOwogICAgICAtLXBhcGVyLWJsdWUtYTQwMDogIzI5NzlmZjsKICAgICAgLS1wYXBlci1ibHVlLWE3MDA6ICMyOTYyZmY7CgogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtNTA6ICNlMWY1ZmU7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS0xMDA6ICNiM2U1ZmM7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS0yMDA6ICM4MWQ0ZmE7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS0zMDA6ICM0ZmMzZjc7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS00MDA6ICMyOWI2ZjY7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS01MDA6ICMwM2E5ZjQ7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS02MDA6ICMwMzliZTU7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS03MDA6ICMwMjg4ZDE7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS04MDA6ICMwMjc3YmQ7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS05MDA6ICMwMTU3OWI7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS1hMTAwOiAjODBkOGZmOwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtYTIwMDogIzQwYzRmZjsKICAgICAgLS1wYXBlci1saWdodC1ibHVlLWE0MDA6ICMwMGIwZmY7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS1hNzAwOiAjMDA5MWVhOwoKICAgICAgLS1wYXBlci1jeWFuLTUwOiAjZTBmN2ZhOwogICAgICAtLXBhcGVyLWN5YW4tMTAwOiAjYjJlYmYyOwogICAgICAtLXBhcGVyLWN5YW4tMjAwOiAjODBkZWVhOwogICAgICAtLXBhcGVyLWN5YW4tMzAwOiAjNGRkMGUxOwogICAgICAtLXBhcGVyLWN5YW4tNDAwOiAjMjZjNmRhOwogICAgICAtLXBhcGVyLWN5YW4tNTAwOiAjMDBiY2Q0OwogICAgICAtLXBhcGVyLWN5YW4tNjAwOiAjMDBhY2MxOwogICAgICAtLXBhcGVyLWN5YW4tNzAwOiAjMDA5N2E3OwogICAgICAtLXBhcGVyLWN5YW4tODAwOiAjMDA4MzhmOwogICAgICAtLXBhcGVyLWN5YW4tOTAwOiAjMDA2MDY0OwogICAgICAtLXBhcGVyLWN5YW4tYTEwMDogIzg0ZmZmZjsKICAgICAgLS1wYXBlci1jeWFuLWEyMDA6ICMxOGZmZmY7CiAgICAgIC0tcGFwZXItY3lhbi1hNDAwOiAjMDBlNWZmOwogICAgICAtLXBhcGVyLWN5YW4tYTcwMDogIzAwYjhkNDsKCiAgICAgIC0tcGFwZXItdGVhbC01MDogI2UwZjJmMTsKICAgICAgLS1wYXBlci10ZWFsLTEwMDogI2IyZGZkYjsKICAgICAgLS1wYXBlci10ZWFsLTIwMDogIzgwY2JjNDsKICAgICAgLS1wYXBlci10ZWFsLTMwMDogIzRkYjZhYzsKICAgICAgLS1wYXBlci10ZWFsLTQwMDogIzI2YTY5YTsKICAgICAgLS1wYXBlci10ZWFsLTUwMDogIzAwOTY4ODsKICAgICAgLS1wYXBlci10ZWFsLTYwMDogIzAwODk3YjsKICAgICAgLS1wYXBlci10ZWFsLTcwMDogIzAwNzk2YjsKICAgICAgLS1wYXBlci10ZWFsLTgwMDogIzAwNjk1YzsKICAgICAgLS1wYXBlci10ZWFsLTkwMDogIzAwNGQ0MDsKICAgICAgLS1wYXBlci10ZWFsLWExMDA6ICNhN2ZmZWI7CiAgICAgIC0tcGFwZXItdGVhbC1hMjAwOiAjNjRmZmRhOwogICAgICAtLXBhcGVyLXRlYWwtYTQwMDogIzFkZTliNjsKICAgICAgLS1wYXBlci10ZWFsLWE3MDA6ICMwMGJmYTU7CgogICAgICAtLXBhcGVyLWdyZWVuLTUwOiAjZThmNWU5OwogICAgICAtLXBhcGVyLWdyZWVuLTEwMDogI2M4ZTZjOTsKICAgICAgLS1wYXBlci1ncmVlbi0yMDA6ICNhNWQ2YTc7CiAgICAgIC0tcGFwZXItZ3JlZW4tMzAwOiAjODFjNzg0OwogICAgICAtLXBhcGVyLWdyZWVuLTQwMDogIzY2YmI2YTsKICAgICAgLS1wYXBlci1ncmVlbi01MDA6ICM0Y2FmNTA7CiAgICAgIC0tcGFwZXItZ3JlZW4tNjAwOiAjNDNhMDQ3OwogICAgICAtLXBhcGVyLWdyZWVuLTcwMDogIzM4OGUzYzsKICAgICAgLS1wYXBlci1ncmVlbi04MDA6ICMyZTdkMzI7CiAgICAgIC0tcGFwZXItZ3JlZW4tOTAwOiAjMWI1ZTIwOwogICAgICAtLXBhcGVyLWdyZWVuLWExMDA6ICNiOWY2Y2E7CiAgICAgIC0tcGFwZXItZ3JlZW4tYTIwMDogIzY5ZjBhZTsKICAgICAgLS1wYXBlci1ncmVlbi1hNDAwOiAjMDBlNjc2OwogICAgICAtLXBhcGVyLWdyZWVuLWE3MDA6ICMwMGM4NTM7CgogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLTUwOiAjZjFmOGU5OwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLTEwMDogI2RjZWRjODsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi0yMDA6ICNjNWUxYTU7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tMzAwOiAjYWVkNTgxOwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLTQwMDogIzljY2M2NTsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi01MDA6ICM4YmMzNGE7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tNjAwOiAjN2NiMzQyOwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLTcwMDogIzY4OWYzODsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi04MDA6ICM1NThiMmY7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tOTAwOiAjMzM2OTFlOwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLWExMDA6ICNjY2ZmOTA7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tYTIwMDogI2IyZmY1OTsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi1hNDAwOiAjNzZmZjAzOwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLWE3MDA6ICM2NGRkMTc7CgogICAgICAtLXBhcGVyLWxpbWUtNTA6ICNmOWZiZTc7CiAgICAgIC0tcGFwZXItbGltZS0xMDA6ICNmMGY0YzM7CiAgICAgIC0tcGFwZXItbGltZS0yMDA6ICNlNmVlOWM7CiAgICAgIC0tcGFwZXItbGltZS0zMDA6ICNkY2U3NzU7CiAgICAgIC0tcGFwZXItbGltZS00MDA6ICNkNGUxNTc7CiAgICAgIC0tcGFwZXItbGltZS01MDA6ICNjZGRjMzk7CiAgICAgIC0tcGFwZXItbGltZS02MDA6ICNjMGNhMzM7CiAgICAgIC0tcGFwZXItbGltZS03MDA6ICNhZmI0MmI7CiAgICAgIC0tcGFwZXItbGltZS04MDA6ICM5ZTlkMjQ7CiAgICAgIC0tcGFwZXItbGltZS05MDA6ICM4Mjc3MTc7CiAgICAgIC0tcGFwZXItbGltZS1hMTAwOiAjZjRmZjgxOwogICAgICAtLXBhcGVyLWxpbWUtYTIwMDogI2VlZmY0MTsKICAgICAgLS1wYXBlci1saW1lLWE0MDA6ICNjNmZmMDA7CiAgICAgIC0tcGFwZXItbGltZS1hNzAwOiAjYWVlYTAwOwoKICAgICAgLS1wYXBlci15ZWxsb3ctNTA6ICNmZmZkZTc7CiAgICAgIC0tcGFwZXIteWVsbG93LTEwMDogI2ZmZjljNDsKICAgICAgLS1wYXBlci15ZWxsb3ctMjAwOiAjZmZmNTlkOwogICAgICAtLXBhcGVyLXllbGxvdy0zMDA6ICNmZmYxNzY7CiAgICAgIC0tcGFwZXIteWVsbG93LTQwMDogI2ZmZWU1ODsKICAgICAgLS1wYXBlci15ZWxsb3ctNTAwOiAjZmZlYjNiOwogICAgICAtLXBhcGVyLXllbGxvdy02MDA6ICNmZGQ4MzU7CiAgICAgIC0tcGFwZXIteWVsbG93LTcwMDogI2ZiYzAyZDsKICAgICAgLS1wYXBlci15ZWxsb3ctODAwOiAjZjlhODI1OwogICAgICAtLXBhcGVyLXllbGxvdy05MDA6ICNmNTdmMTc7CiAgICAgIC0tcGFwZXIteWVsbG93LWExMDA6ICNmZmZmOGQ7CiAgICAgIC0tcGFwZXIteWVsbG93LWEyMDA6ICNmZmZmMDA7CiAgICAgIC0tcGFwZXIteWVsbG93LWE0MDA6ICNmZmVhMDA7CiAgICAgIC0tcGFwZXIteWVsbG93LWE3MDA6ICNmZmQ2MDA7CgogICAgICAtLXBhcGVyLWFtYmVyLTUwOiAjZmZmOGUxOwogICAgICAtLXBhcGVyLWFtYmVyLTEwMDogI2ZmZWNiMzsKICAgICAgLS1wYXBlci1hbWJlci0yMDA6ICNmZmUwODI7CiAgICAgIC0tcGFwZXItYW1iZXItMzAwOiAjZmZkNTRmOwogICAgICAtLXBhcGVyLWFtYmVyLTQwMDogI2ZmY2EyODsKICAgICAgLS1wYXBlci1hbWJlci01MDA6ICNmZmMxMDc7CiAgICAgIC0tcGFwZXItYW1iZXItNjAwOiAjZmZiMzAwOwogICAgICAtLXBhcGVyLWFtYmVyLTcwMDogI2ZmYTAwMDsKICAgICAgLS1wYXBlci1hbWJlci04MDA6ICNmZjhmMDA7CiAgICAgIC0tcGFwZXItYW1iZXItOTAwOiAjZmY2ZjAwOwogICAgICAtLXBhcGVyLWFtYmVyLWExMDA6ICNmZmU1N2Y7CiAgICAgIC0tcGFwZXItYW1iZXItYTIwMDogI2ZmZDc0MDsKICAgICAgLS1wYXBlci1hbWJlci1hNDAwOiAjZmZjNDAwOwogICAgICAtLXBhcGVyLWFtYmVyLWE3MDA6ICNmZmFiMDA7CgogICAgICAtLXBhcGVyLW9yYW5nZS01MDogI2ZmZjNlMDsKICAgICAgLS1wYXBlci1vcmFuZ2UtMTAwOiAjZmZlMGIyOwogICAgICAtLXBhcGVyLW9yYW5nZS0yMDA6ICNmZmNjODA7CiAgICAgIC0tcGFwZXItb3JhbmdlLTMwMDogI2ZmYjc0ZDsKICAgICAgLS1wYXBlci1vcmFuZ2UtNDAwOiAjZmZhNzI2OwogICAgICAtLXBhcGVyLW9yYW5nZS01MDA6ICNmZjk4MDA7CiAgICAgIC0tcGFwZXItb3JhbmdlLTYwMDogI2ZiOGMwMDsKICAgICAgLS1wYXBlci1vcmFuZ2UtNzAwOiAjZjU3YzAwOwogICAgICAtLXBhcGVyLW9yYW5nZS04MDA6ICNlZjZjMDA7CiAgICAgIC0tcGFwZXItb3JhbmdlLTkwMDogI2U2NTEwMDsKICAgICAgLS1wYXBlci1vcmFuZ2UtYTEwMDogI2ZmZDE4MDsKICAgICAgLS1wYXBlci1vcmFuZ2UtYTIwMDogI2ZmYWI0MDsKICAgICAgLS1wYXBlci1vcmFuZ2UtYTQwMDogI2ZmOTEwMDsKICAgICAgLS1wYXBlci1vcmFuZ2UtYTcwMDogI2ZmNjUwMDsKCiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtNTA6ICNmYmU5ZTc7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtMTAwOiAjZmZjY2JjOwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLTIwMDogI2ZmYWI5MTsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS0zMDA6ICNmZjhhNjU7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtNDAwOiAjZmY3MDQzOwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLTUwMDogI2ZmNTcyMjsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS02MDA6ICNmNDUxMWU7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtNzAwOiAjZTY0YTE5OwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLTgwMDogI2Q4NDMxNTsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS05MDA6ICNiZjM2MGM7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtYTEwMDogI2ZmOWU4MDsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS1hMjAwOiAjZmY2ZTQwOwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLWE0MDA6ICNmZjNkMDA7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtYTcwMDogI2RkMmMwMDsKCiAgICAgIC0tcGFwZXItYnJvd24tNTA6ICNlZmViZTk7CiAgICAgIC0tcGFwZXItYnJvd24tMTAwOiAjZDdjY2M4OwogICAgICAtLXBhcGVyLWJyb3duLTIwMDogI2JjYWFhNDsKICAgICAgLS1wYXBlci1icm93bi0zMDA6ICNhMTg4N2Y7CiAgICAgIC0tcGFwZXItYnJvd24tNDAwOiAjOGQ2ZTYzOwogICAgICAtLXBhcGVyLWJyb3duLTUwMDogIzc5NTU0ODsKICAgICAgLS1wYXBlci1icm93bi02MDA6ICM2ZDRjNDE7CiAgICAgIC0tcGFwZXItYnJvd24tNzAwOiAjNWQ0MDM3OwogICAgICAtLXBhcGVyLWJyb3duLTgwMDogIzRlMzQyZTsKICAgICAgLS1wYXBlci1icm93bi05MDA6ICMzZTI3MjM7CgogICAgICAtLXBhcGVyLWdyZXktNTA6ICNmYWZhZmE7CiAgICAgIC0tcGFwZXItZ3JleS0xMDA6ICNmNWY1ZjU7CiAgICAgIC0tcGFwZXItZ3JleS0yMDA6ICNlZWVlZWU7CiAgICAgIC0tcGFwZXItZ3JleS0zMDA6ICNlMGUwZTA7CiAgICAgIC0tcGFwZXItZ3JleS00MDA6ICNiZGJkYmQ7CiAgICAgIC0tcGFwZXItZ3JleS01MDA6ICM5ZTllOWU7CiAgICAgIC0tcGFwZXItZ3JleS02MDA6ICM3NTc1NzU7CiAgICAgIC0tcGFwZXItZ3JleS03MDA6ICM2MTYxNjE7CiAgICAgIC0tcGFwZXItZ3JleS04MDA6ICM0MjQyNDI7CiAgICAgIC0tcGFwZXItZ3JleS05MDA6ICMyMTIxMjE7CgogICAgICAtLXBhcGVyLWJsdWUtZ3JleS01MDogI2VjZWZmMTsKICAgICAgLS1wYXBlci1ibHVlLWdyZXktMTAwOiAjY2ZkOGRjOwogICAgICAtLXBhcGVyLWJsdWUtZ3JleS0yMDA6ICNiMGJlYzU7CiAgICAgIC0tcGFwZXItYmx1ZS1ncmV5LTMwMDogIzkwYTRhZTsKICAgICAgLS1wYXBlci1ibHVlLWdyZXktNDAwOiAjNzg5MDljOwogICAgICAtLXBhcGVyLWJsdWUtZ3JleS01MDA6ICM2MDdkOGI7CiAgICAgIC0tcGFwZXItYmx1ZS1ncmV5LTYwMDogIzU0NmU3YTsKICAgICAgLS1wYXBlci1ibHVlLWdyZXktNzAwOiAjNDU1YTY0OwogICAgICAtLXBhcGVyLWJsdWUtZ3JleS04MDA6ICMzNzQ3NGY7CiAgICAgIC0tcGFwZXItYmx1ZS1ncmV5LTkwMDogIzI2MzIzODsKCiAgICAgIC8qIG9wYWNpdHkgZm9yIGRhcmsgdGV4dCBvbiBhIGxpZ2h0IGJhY2tncm91bmQgKi8KICAgICAgLS1kYXJrLWRpdmlkZXItb3BhY2l0eTogMC4xMjsKICAgICAgLS1kYXJrLWRpc2FibGVkLW9wYWNpdHk6IDAuMzg7IC8qIG9yIGhpbnQgdGV4dCBvciBpY29uICovCiAgICAgIC0tZGFyay1zZWNvbmRhcnktb3BhY2l0eTogMC41NDsKICAgICAgLS1kYXJrLXByaW1hcnktb3BhY2l0eTogMC44NzsKCiAgICAgIC8qIG9wYWNpdHkgZm9yIGxpZ2h0IHRleHQgb24gYSBkYXJrIGJhY2tncm91bmQgKi8KICAgICAgLS1saWdodC1kaXZpZGVyLW9wYWNpdHk6IDAuMTI7CiAgICAgIC0tbGlnaHQtZGlzYWJsZWQtb3BhY2l0eTogMC4zOyAvKiBvciBoaW50IHRleHQgb3IgaWNvbiAqLwogICAgICAtLWxpZ2h0LXNlY29uZGFyeS1vcGFjaXR5OiAwLjc7CiAgICAgIC0tbGlnaHQtcHJpbWFyeS1vcGFjaXR5OiAxLjA7CgogICAgfQoKICA8L3N0eWxlPgo8L2N1c3RvbS1zdHlsZT4KYDtlYS5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZGlzcGxheTogbm9uZTsiKSxkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGVhLmNvbnRlbnQpOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KY29uc3QgbmE9X2VgCjxjdXN0b20tc3R5bGU+CiAgPHN0eWxlIGlzPSJjdXN0b20tc3R5bGUiPgogICAgaHRtbCB7CiAgICAgIC8qCiAgICAgICAqIFlvdSBjYW4gdXNlIHRoZXNlIGdlbmVyaWMgdmFyaWFibGVzIGluIHlvdXIgZWxlbWVudHMgZm9yIGVhc3kgdGhlbWluZy4KICAgICAgICogRm9yIGV4YW1wbGUsIGlmIGFsbCB5b3VyIGVsZW1lbnRzIHVzZSBcYC0tcHJpbWFyeS10ZXh0LWNvbG9yXGAgYXMgaXRzIG1haW4KICAgICAgICogY29sb3IsIHRoZW4gc3dpdGNoaW5nIGZyb20gYSBsaWdodCB0byBhIGRhcmsgdGhlbWUgaXMganVzdCBhIG1hdHRlciBvZgogICAgICAgKiBjaGFuZ2luZyB0aGUgdmFsdWUgb2YgXGAtLXByaW1hcnktdGV4dC1jb2xvclxgIGluIHlvdXIgYXBwbGljYXRpb24uCiAgICAgICAqLwogICAgICAtLXByaW1hcnktdGV4dC1jb2xvcjogdmFyKC0tbGlnaHQtdGhlbWUtdGV4dC1jb2xvcik7CiAgICAgIC0tcHJpbWFyeS1iYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1saWdodC10aGVtZS1iYWNrZ3JvdW5kLWNvbG9yKTsKICAgICAgLS1zZWNvbmRhcnktdGV4dC1jb2xvcjogdmFyKC0tbGlnaHQtdGhlbWUtc2Vjb25kYXJ5LWNvbG9yKTsKICAgICAgLS1kaXNhYmxlZC10ZXh0LWNvbG9yOiB2YXIoLS1saWdodC10aGVtZS1kaXNhYmxlZC1jb2xvcik7CiAgICAgIC0tZGl2aWRlci1jb2xvcjogdmFyKC0tbGlnaHQtdGhlbWUtZGl2aWRlci1jb2xvcik7CiAgICAgIC0tZXJyb3ItY29sb3I6IHZhcigtLXBhcGVyLWRlZXAtb3JhbmdlLWE3MDApOwoKICAgICAgLyoKICAgICAgICogUHJpbWFyeSBhbmQgYWNjZW50IGNvbG9ycy4gQWxzbyBzZWUgY29sb3IuanMgZm9yIG1vcmUgY29sb3JzLgogICAgICAgKi8KICAgICAgLS1wcmltYXJ5LWNvbG9yOiB2YXIoLS1wYXBlci1pbmRpZ28tNTAwKTsKICAgICAgLS1saWdodC1wcmltYXJ5LWNvbG9yOiB2YXIoLS1wYXBlci1pbmRpZ28tMTAwKTsKICAgICAgLS1kYXJrLXByaW1hcnktY29sb3I6IHZhcigtLXBhcGVyLWluZGlnby03MDApOwoKICAgICAgLS1hY2NlbnQtY29sb3I6IHZhcigtLXBhcGVyLXBpbmstYTIwMCk7CiAgICAgIC0tbGlnaHQtYWNjZW50LWNvbG9yOiB2YXIoLS1wYXBlci1waW5rLWExMDApOwogICAgICAtLWRhcmstYWNjZW50LWNvbG9yOiB2YXIoLS1wYXBlci1waW5rLWE0MDApOwoKCiAgICAgIC8qCiAgICAgICAqIE1hdGVyaWFsIERlc2lnbiBMaWdodCBiYWNrZ3JvdW5kIHRoZW1lCiAgICAgICAqLwogICAgICAtLWxpZ2h0LXRoZW1lLWJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7CiAgICAgIC0tbGlnaHQtdGhlbWUtYmFzZS1jb2xvcjogIzAwMDAwMDsKICAgICAgLS1saWdodC10aGVtZS10ZXh0LWNvbG9yOiB2YXIoLS1wYXBlci1ncmV5LTkwMCk7CiAgICAgIC0tbGlnaHQtdGhlbWUtc2Vjb25kYXJ5LWNvbG9yOiAjNzM3MzczOyAgLyogZm9yIHNlY29uZGFyeSB0ZXh0IGFuZCBpY29ucyAqLwogICAgICAtLWxpZ2h0LXRoZW1lLWRpc2FibGVkLWNvbG9yOiAjOWI5YjliOyAgLyogZGlzYWJsZWQvaGludCB0ZXh0ICovCiAgICAgIC0tbGlnaHQtdGhlbWUtZGl2aWRlci1jb2xvcjogI2RiZGJkYjsKCiAgICAgIC8qCiAgICAgICAqIE1hdGVyaWFsIERlc2lnbiBEYXJrIGJhY2tncm91bmQgdGhlbWUKICAgICAgICovCiAgICAgIC0tZGFyay10aGVtZS1iYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1ncmV5LTkwMCk7CiAgICAgIC0tZGFyay10aGVtZS1iYXNlLWNvbG9yOiAjZmZmZmZmOwogICAgICAtLWRhcmstdGhlbWUtdGV4dC1jb2xvcjogI2ZmZmZmZjsKICAgICAgLS1kYXJrLXRoZW1lLXNlY29uZGFyeS1jb2xvcjogI2JjYmNiYzsgIC8qIGZvciBzZWNvbmRhcnkgdGV4dCBhbmQgaWNvbnMgKi8KICAgICAgLS1kYXJrLXRoZW1lLWRpc2FibGVkLWNvbG9yOiAjNjQ2NDY0OyAgLyogZGlzYWJsZWQvaGludCB0ZXh0ICovCiAgICAgIC0tZGFyay10aGVtZS1kaXZpZGVyLWNvbG9yOiAjM2MzYzNjOwoKICAgICAgLyoKICAgICAgICogRGVwcmVjYXRlZCB2YWx1ZXMgYmVjYXVzZSBvZiB0aGVpciBjb25mdXNpbmcgbmFtZXMuCiAgICAgICAqLwogICAgICAtLXRleHQtcHJpbWFyeS1jb2xvcjogdmFyKC0tZGFyay10aGVtZS10ZXh0LWNvbG9yKTsKICAgICAgLS1kZWZhdWx0LXByaW1hcnktY29sb3I6IHZhcigtLXByaW1hcnktY29sb3IpOwogICAgfQogIDwvc3R5bGU+CjwvY3VzdG9tLXN0eWxlPmA7bmEuc2V0QXR0cmlidXRlKCJzdHlsZSIsImRpc3BsYXk6IG5vbmU7IiksZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChuYS5jb250ZW50KTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCmNvbnN0IGlhPXtwcm9wZXJ0aWVzOntuYW1lOnt0eXBlOlN0cmluZ30sdmFsdWU6e25vdGlmeTohMCx0eXBlOlN0cmluZ30scmVxdWlyZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX19LGF0dGFjaGVkOmZ1bmN0aW9uKCl7fSxkZXRhY2hlZDpmdW5jdGlvbigpe319OwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi9sZXQgcmE9bnVsbDtjb25zdCBvYT17cHJvcGVydGllczp7dmFsaWRhdG9yOnt0eXBlOlN0cmluZ30saW52YWxpZDp7bm90aWZ5OiEwLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCx0eXBlOkJvb2xlYW4sdmFsdWU6ITEsb2JzZXJ2ZXI6Il9pbnZhbGlkQ2hhbmdlZCJ9fSxyZWdpc3RlcmVkOmZ1bmN0aW9uKCl7cmE9bmV3IGJvKHt0eXBlOiJ2YWxpZGF0b3IifSl9LF9pbnZhbGlkQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuaW52YWxpZD90aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1pbnZhbGlkIiwidHJ1ZSIpOnRoaXMucmVtb3ZlQXR0cmlidXRlKCJhcmlhLWludmFsaWQiKX0sZ2V0IF92YWxpZGF0b3IoKXtyZXR1cm4gcmEmJnJhLmJ5S2V5KHRoaXMudmFsaWRhdG9yKX0saGFzVmFsaWRhdG9yOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXRoaXMuX3ZhbGlkYXRvcn0sdmFsaWRhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW52YWxpZD12b2lkIDA9PT10JiZ2b2lkIDAhPT10aGlzLnZhbHVlPyF0aGlzLl9nZXRWYWxpZGl0eSh0aGlzLnZhbHVlKTohdGhpcy5fZ2V0VmFsaWRpdHkodCksIXRoaXMuaW52YWxpZH0sX2dldFZhbGlkaXR5OmZ1bmN0aW9uKHQpe3JldHVybiF0aGlzLmhhc1ZhbGlkYXRvcigpfHx0aGlzLl92YWxpZGF0b3IudmFsaWRhdGUodCl9fSxhYT17cHJvcGVydGllczp7Y2hlY2tlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9jaGVja2VkQ2hhbmdlZCJ9LHRvZ2dsZXM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMCxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LHZhbHVlOnt0eXBlOlN0cmluZyx2YWx1ZToib24iLG9ic2VydmVyOiJfdmFsdWVDaGFuZ2VkIn19LG9ic2VydmVyczpbIl9yZXF1aXJlZENoYW5nZWQocmVxdWlyZWQpIl0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuX2hhc0lyb25DaGVja2VkRWxlbWVudEJlaGF2aW9yPSEwfSxfZ2V0VmFsaWRpdHk6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGlzYWJsZWR8fCF0aGlzLnJlcXVpcmVkfHx0aGlzLmNoZWNrZWR9LF9yZXF1aXJlZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLnJlcXVpcmVkP3RoaXMuc2V0QXR0cmlidXRlKCJhcmlhLXJlcXVpcmVkIiwidHJ1ZSIpOnRoaXMucmVtb3ZlQXR0cmlidXRlKCJhcmlhLXJlcXVpcmVkIil9LF9jaGVja2VkQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuYWN0aXZlPXRoaXMuY2hlY2tlZCx0aGlzLmZpcmUoImlyb24tY2hhbmdlIil9LF92YWx1ZUNoYW5nZWQ6ZnVuY3Rpb24oKXtudWxsPT10aGlzLnZhbHVlJiYodGhpcy52YWx1ZT0ib24iKX19LHNhPXtvYnNlcnZlcnM6WyJfZm9jdXNlZENoYW5nZWQocmVjZWl2ZWRGb2N1c0Zyb21LZXlib2FyZCkiXSxfZm9jdXNlZENoYW5nZWQ6ZnVuY3Rpb24odCl7dCYmdGhpcy5lbnN1cmVSaXBwbGUoKSx0aGlzLmhhc1JpcHBsZSgpJiYodGhpcy5fcmlwcGxlLmhvbGREb3duPXQpfSxfY3JlYXRlUmlwcGxlOmZ1bmN0aW9uKCl7dmFyIHQ9Wm8uX2NyZWF0ZVJpcHBsZSgpO3JldHVybiB0LmlkPSJpbmsiLHQuc2V0QXR0cmlidXRlKCJjZW50ZXIiLCIiKSx0LmNsYXNzTGlzdC5hZGQoImNpcmNsZSIpLHR9fSxsYT1bWW8sV28sWm8sc2FdLGNhPVtsYSxbaWEsb2EsYWFdLHtfY2hlY2tlZENoYW5nZWQ6ZnVuY3Rpb24oKXthYS5fY2hlY2tlZENoYW5nZWQuY2FsbCh0aGlzKSx0aGlzLmhhc1JpcHBsZSgpJiYodGhpcy5jaGVja2VkP3RoaXMuX3JpcHBsZS5zZXRBdHRyaWJ1dGUoImNoZWNrZWQiLCIiKTp0aGlzLl9yaXBwbGUucmVtb3ZlQXR0cmlidXRlKCJjaGVja2VkIikpfSxfYnV0dG9uU3RhdGVDaGFuZ2VkOmZ1bmN0aW9uKCl7Wm8uX2J1dHRvblN0YXRlQ2hhbmdlZC5jYWxsKHRoaXMpLHRoaXMuZGlzYWJsZWR8fHRoaXMuaXNBdHRhY2hlZCYmKHRoaXMuY2hlY2tlZD10aGlzLmFjdGl2ZSl9fV0sdWE9X2VgPHN0eWxlPgogIDpob3N0IHsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtc2l6ZTogdmFyKC0tcGFwZXItY2hlY2tib3gtc2l6ZSwgMThweCk7CiAgICAvKiAtMXB4IGlzIGEgc2VudGluZWwgZm9yIHRoZSBkZWZhdWx0IGFuZCBpcyByZXBsYWNlZCBpbiBcYGF0dGFjaGVkXGAuICovCiAgICAtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtaW5rLXNpemU6IHZhcigtLXBhcGVyLWNoZWNrYm94LWluay1zaXplLCAtMXB4KTsKICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CiAgICBsaW5lLWhlaWdodDogMDsKICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgfQoKICA6aG9zdChbaGlkZGVuXSkgewogICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogIH0KCiAgOmhvc3QoOmZvY3VzKSB7CiAgICBvdXRsaW5lOiBub25lOwogIH0KCiAgLmhpZGRlbiB7CiAgICBkaXNwbGF5OiBub25lOwogIH0KCiAgI2NoZWNrYm94Q29udGFpbmVyIHsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHdpZHRoOiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LXNpemUpOwogICAgaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LXNpemUpOwogICAgbWluLXdpZHRoOiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LXNpemUpOwogICAgbWFyZ2luOiB2YXIoLS1wYXBlci1jaGVja2JveC1tYXJnaW4sIGluaXRpYWwpOwogICAgdmVydGljYWwtYWxpZ246IHZhcigtLXBhcGVyLWNoZWNrYm94LXZlcnRpY2FsLWFsaWduLCBtaWRkbGUpOwogICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWJhY2tncm91bmQtY29sb3IsIHRyYW5zcGFyZW50KTsKICB9CgogICNpbmsgewogICAgcG9zaXRpb246IGFic29sdXRlOwoKICAgIC8qIENlbnRlciB0aGUgcmlwcGxlIGluIHRoZSBjaGVja2JveCBieSBuZWdhdGl2ZSBvZmZzZXR0aW5nIGl0IGJ5CiAgICAgKiAoaW5rV2lkdGggLSByaXBwbGVXaWR0aCkgLyAyICovCiAgICB0b3A6IGNhbGMoMHB4IC0gKHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtaW5rLXNpemUpIC0gdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1zaXplKSkgLyAyKTsKICAgIGxlZnQ6IGNhbGMoMHB4IC0gKHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtaW5rLXNpemUpIC0gdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1zaXplKSkgLyAyKTsKICAgIHdpZHRoOiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LWluay1zaXplKTsKICAgIGhlaWdodDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1pbmstc2l6ZSk7CiAgICBjb2xvcjogdmFyKC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWluay1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CiAgICBvcGFjaXR5OiAwLjY7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICB9CgogICNpbms6ZGlyKHJ0bCkgewogICAgcmlnaHQ6IGNhbGMoMHB4IC0gKHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtaW5rLXNpemUpIC0gdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1zaXplKSkgLyAyKTsKICAgIGxlZnQ6IGF1dG87CiAgfQoKICAjaW5rW2NoZWNrZWRdIHsKICAgIGNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWluay1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwogIH0KCiAgI2NoZWNrYm94IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBib3JkZXI6IHNvbGlkIDJweDsKICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgLXdlYmtpdC10cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDE0MG1zLCBib3JkZXItY29sb3IgMTQwbXM7CiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDE0MG1zLCBib3JkZXItY29sb3IgMTQwbXM7CgogICAgLXdlYmtpdC10cmFuc2l0aW9uLWR1cmF0aW9uOiB2YXIoLS1wYXBlci1jaGVja2JveC1hbmltYXRpb24tZHVyYXRpb24sIDE0MG1zKTsKICAgIHRyYW5zaXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLWNoZWNrYm94LWFuaW1hdGlvbi1kdXJhdGlvbiwgMTQwbXMpOwogIH0KCiAgLyogY2hlY2tib3ggY2hlY2tlZCBhbmltYXRpb25zICovCiAgI2NoZWNrYm94LmNoZWNrZWQgI2NoZWNrbWFyayB7CiAgICAtd2Via2l0LWFuaW1hdGlvbjogY2hlY2ttYXJrLWV4cGFuZCAxNDBtcyBlYXNlLW91dCBmb3J3YXJkczsKICAgIGFuaW1hdGlvbjogY2hlY2ttYXJrLWV4cGFuZCAxNDBtcyBlYXNlLW91dCBmb3J3YXJkczsKCiAgICAtd2Via2l0LWFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItY2hlY2tib3gtYW5pbWF0aW9uLWR1cmF0aW9uLCAxNDBtcyk7CiAgICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLWNoZWNrYm94LWFuaW1hdGlvbi1kdXJhdGlvbiwgMTQwbXMpOwogIH0KCiAgQC13ZWJraXQta2V5ZnJhbWVzIGNoZWNrbWFyay1leHBhbmQgewogICAgMCUgewogICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMCwgMCkgcm90YXRlKDQ1ZGVnKTsKICAgIH0KICAgIDEwMCUgewogICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMSwgMSkgcm90YXRlKDQ1ZGVnKTsKICAgIH0KICB9CgogIEBrZXlmcmFtZXMgY2hlY2ttYXJrLWV4cGFuZCB7CiAgICAwJSB7CiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMCwgMCkgcm90YXRlKDQ1ZGVnKTsKICAgIH0KICAgIDEwMCUgewogICAgICB0cmFuc2Zvcm06IHNjYWxlKDEsIDEpIHJvdGF0ZSg0NWRlZyk7CiAgICB9CiAgfQoKICAjY2hlY2tib3guY2hlY2tlZCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWNvbG9yLCB2YXIoLS1wcmltYXJ5LWNvbG9yKSk7CiAgICBib3JkZXItY29sb3I6IHZhcigtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKICB9CgogICNjaGVja21hcmsgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgd2lkdGg6IDM2JTsKICAgIGhlaWdodDogNzAlOwogICAgYm9yZGVyLXN0eWxlOiBzb2xpZDsKICAgIGJvcmRlci10b3A6IG5vbmU7CiAgICBib3JkZXItbGVmdDogbm9uZTsKICAgIGJvcmRlci1yaWdodC13aWR0aDogY2FsYygyLzE1ICogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1zaXplKSk7CiAgICBib3JkZXItYm90dG9tLXdpZHRoOiBjYWxjKDIvMTUgKiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LXNpemUpKTsKICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcGFwZXItY2hlY2tib3gtY2hlY2ttYXJrLWNvbG9yLCB3aGl0ZSk7CiAgICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IDk3JSA4NiU7CiAgICB0cmFuc2Zvcm0tb3JpZ2luOiA5NyUgODYlOwogICAgYm94LXNpemluZzogY29udGVudC1ib3g7IC8qIHByb3RlY3QgYWdhaW5zdCBwYWdlLWxldmVsIGJveC1zaXppbmcgKi8KICB9CgogICNjaGVja21hcms6ZGlyKHJ0bCkgewogICAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiA1MCUgMTQlOwogICAgdHJhbnNmb3JtLW9yaWdpbjogNTAlIDE0JTsKICB9CgogIC8qIGxhYmVsICovCiAgI2NoZWNrYm94TGFiZWwgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAgIHBhZGRpbmctbGVmdDogdmFyKC0tcGFwZXItY2hlY2tib3gtbGFiZWwtc3BhY2luZywgOHB4KTsKICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7CiAgICBsaW5lLWhlaWdodDogbm9ybWFsOwogICAgY29sb3I6IHZhcigtLXBhcGVyLWNoZWNrYm94LWxhYmVsLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgIEBhcHBseSAtLXBhcGVyLWNoZWNrYm94LWxhYmVsOwogIH0KCiAgOmhvc3QoW2NoZWNrZWRdKSAjY2hlY2tib3hMYWJlbCB7CiAgICBjb2xvcjogdmFyKC0tcGFwZXItY2hlY2tib3gtbGFiZWwtY2hlY2tlZC1jb2xvciwgdmFyKC0tcGFwZXItY2hlY2tib3gtbGFiZWwtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpKTsKICAgIEBhcHBseSAtLXBhcGVyLWNoZWNrYm94LWxhYmVsLWNoZWNrZWQ7CiAgfQoKICAjY2hlY2tib3hMYWJlbDpkaXIocnRsKSB7CiAgICBwYWRkaW5nLXJpZ2h0OiB2YXIoLS1wYXBlci1jaGVja2JveC1sYWJlbC1zcGFjaW5nLCA4cHgpOwogICAgcGFkZGluZy1sZWZ0OiAwOwogIH0KCiAgI2NoZWNrYm94TGFiZWxbaGlkZGVuXSB7CiAgICBkaXNwbGF5OiBub25lOwogIH0KCiAgLyogZGlzYWJsZWQgc3RhdGUgKi8KCiAgOmhvc3QoW2Rpc2FibGVkXSkgI2NoZWNrYm94IHsKICAgIG9wYWNpdHk6IDAuNTsKICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICB9CgogIDpob3N0KFtkaXNhYmxlZF1bY2hlY2tlZF0pICNjaGVja2JveCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgb3BhY2l0eTogMC41OwogIH0KCiAgOmhvc3QoW2Rpc2FibGVkXSkgI2NoZWNrYm94TGFiZWwgIHsKICAgIG9wYWNpdHk6IDAuNjU7CiAgfQoKICAvKiBpbnZhbGlkIHN0YXRlICovCiAgI2NoZWNrYm94LmludmFsaWQ6bm90KC5jaGVja2VkKSB7CiAgICBib3JkZXItY29sb3I6IHZhcigtLXBhcGVyLWNoZWNrYm94LWVycm9yLWNvbG9yLCB2YXIoLS1lcnJvci1jb2xvcikpOwogIH0KPC9zdHlsZT4KCjxkaXYgaWQ9ImNoZWNrYm94Q29udGFpbmVyIj4KICA8ZGl2IGlkPSJjaGVja2JveCIgY2xhc3MkPSJbW19jb21wdXRlQ2hlY2tib3hDbGFzcyhjaGVja2VkLCBpbnZhbGlkKV1dIj4KICAgIDxkaXYgaWQ9ImNoZWNrbWFyayIgY2xhc3MkPSJbW19jb21wdXRlQ2hlY2ttYXJrQ2xhc3MoY2hlY2tlZCldXSI+PC9kaXY+CiAgPC9kaXY+CjwvZGl2PgoKPGRpdiBpZD0iY2hlY2tib3hMYWJlbCI+PHNsb3Q+PC9zbG90PjwvZGl2PmA7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KbGV0IGhhO3VhLnNldEF0dHJpYnV0ZSgic3RyaXAtd2hpdGVzcGFjZSIsIiIpLElyKHtfdGVtcGxhdGU6dWEsaXM6InBhcGVyLWNoZWNrYm94IixiZWhhdmlvcnM6W2NhXSxob3N0QXR0cmlidXRlczp7cm9sZToiY2hlY2tib3giLCJhcmlhLWNoZWNrZWQiOiExLHRhYmluZGV4OjB9LHByb3BlcnRpZXM6e2FyaWFBY3RpdmVBdHRyaWJ1dGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJhcmlhLWNoZWNrZWQifX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXtraSh0aGlzLChmdW5jdGlvbigpe2lmKCItMXB4Ij09PXRoaXMuZ2V0Q29tcHV0ZWRTdHlsZVZhbHVlKCItLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtaW5rLXNpemUiKS50cmltKCkpe3ZhciB0PXRoaXMuZ2V0Q29tcHV0ZWRTdHlsZVZhbHVlKCItLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtc2l6ZSIpLnRyaW0oKSxlPSJweCIsbj10Lm1hdGNoKC9bQS1aYS16XSskLyk7bnVsbCE9PW4mJihlPW5bMF0pO3ZhciBpPXBhcnNlRmxvYXQodCkscj04LzMqaTsicHgiPT09ZSYmKHI9TWF0aC5mbG9vcihyKSklMiE9aSUyJiZyKyssdGhpcy51cGRhdGVTdHlsZXMoeyItLXBhcGVyLWNoZWNrYm94LWluay1zaXplIjpyK2V9KX19KSl9LF9jb21wdXRlQ2hlY2tib3hDbGFzczpmdW5jdGlvbih0LGUpe3ZhciBuPSIiO3JldHVybiB0JiYobis9ImNoZWNrZWQgIiksZSYmKG4rPSJpbnZhbGlkIiksbn0sX2NvbXB1dGVDaGVja21hcmtDbGFzczpmdW5jdGlvbih0KXtyZXR1cm4gdD8iIjoiaGlkZGVuIn0sX2NyZWF0ZVJpcHBsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yaXBwbGVDb250YWluZXI9dGhpcy4kLmNoZWNrYm94Q29udGFpbmVyLHNhLl9jcmVhdGVSaXBwbGUuY2FsbCh0aGlzKX19KTtjb25zdCBkYT17cHJvcGVydGllczp7c2l6aW5nVGFyZ2V0Ont0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzfX0sZml0SW50bzp7dHlwZTpPYmplY3QsdmFsdWU6d2luZG93fSxub092ZXJsYXA6e3R5cGU6Qm9vbGVhbn0scG9zaXRpb25UYXJnZXQ6e3R5cGU6RWxlbWVudH0saG9yaXpvbnRhbEFsaWduOnt0eXBlOlN0cmluZ30sdmVydGljYWxBbGlnbjp7dHlwZTpTdHJpbmd9LGR5bmFtaWNBbGlnbjp7dHlwZTpCb29sZWFufSxob3Jpem9udGFsT2Zmc2V0Ont0eXBlOk51bWJlcix2YWx1ZTowLG5vdGlmeTohMH0sdmVydGljYWxPZmZzZXQ6e3R5cGU6TnVtYmVyLHZhbHVlOjAsbm90aWZ5OiEwfSxhdXRvRml0T25BdHRhY2g6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sZXhwYW5kU2l6aW5nVGFyZ2V0Rm9yU2Nyb2xsYmFyczp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfZml0SW5mbzp7dHlwZTpPYmplY3R9fSxnZXQgX2ZpdFdpZHRoKCl7cmV0dXJuIHRoaXMuZml0SW50bz09PXdpbmRvdz90aGlzLmZpdEludG8uaW5uZXJXaWR0aDp0aGlzLmZpdEludG8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGh9LGdldCBfZml0SGVpZ2h0KCl7cmV0dXJuIHRoaXMuZml0SW50bz09PXdpbmRvdz90aGlzLmZpdEludG8uaW5uZXJIZWlnaHQ6dGhpcy5maXRJbnRvLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodH0sZ2V0IF9maXRMZWZ0KCl7cmV0dXJuIHRoaXMuZml0SW50bz09PXdpbmRvdz8wOnRoaXMuZml0SW50by5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0fSxnZXQgX2ZpdFRvcCgpe3JldHVybiB0aGlzLmZpdEludG89PT13aW5kb3c/MDp0aGlzLmZpdEludG8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wfSxnZXQgX2RlZmF1bHRQb3NpdGlvblRhcmdldCgpe3ZhciB0PXFpKHRoaXMpLnBhcmVudE5vZGU7cmV0dXJuIHQmJnQubm9kZVR5cGU9PT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUmJih0PXQuaG9zdCksdH0sZ2V0IF9sb2NhbGVIb3Jpem9udGFsQWxpZ24oKXtpZih0aGlzLl9pc1JUTCl7aWYoInJpZ2h0Ij09PXRoaXMuaG9yaXpvbnRhbEFsaWduKXJldHVybiJsZWZ0IjtpZigibGVmdCI9PT10aGlzLmhvcml6b250YWxBbGlnbilyZXR1cm4icmlnaHQifXJldHVybiB0aGlzLmhvcml6b250YWxBbGlnbn0sZ2V0IF9fc2hvdWxkUG9zaXRpb24oKXtyZXR1cm4odGhpcy5ob3Jpem9udGFsQWxpZ258fHRoaXMudmVydGljYWxBbGlnbikmJnRoaXMucG9zaXRpb25UYXJnZXR9LGdldCBfaXNSVEwoKXtyZXR1cm4gdm9pZCAwPT09dGhpcy5fbWVtb2l6ZWRJc1JUTCYmKHRoaXMuX21lbW9pemVkSXNSVEw9InJ0bCI9PXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMpLmRpcmVjdGlvbiksdGhpcy5fbWVtb2l6ZWRJc1JUTH0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLnBvc2l0aW9uVGFyZ2V0PXRoaXMucG9zaXRpb25UYXJnZXR8fHRoaXMuX2RlZmF1bHRQb3NpdGlvblRhcmdldCx0aGlzLmF1dG9GaXRPbkF0dGFjaCYmKCJub25lIj09PXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMpLmRpc3BsYXk/c2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuZml0KCl9LmJpbmQodGhpcykpOih3aW5kb3cuU2hhZHlET00mJlNoYWR5RE9NLmZsdXNoKCksdGhpcy5maXQoKSkpfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX19kZWZlcnJlZEZpdCYmKGNsZWFyVGltZW91dCh0aGlzLl9fZGVmZXJyZWRGaXQpLHRoaXMuX19kZWZlcnJlZEZpdD1udWxsKX0sZml0OmZ1bmN0aW9uKCl7dGhpcy5wb3NpdGlvbigpLHRoaXMuY29uc3RyYWluKCksdGhpcy5jZW50ZXIoKX0sX2Rpc2NvdmVySW5mbzpmdW5jdGlvbigpe2lmKCF0aGlzLl9maXRJbmZvKXt2YXIgdD13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzKSxlPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuc2l6aW5nVGFyZ2V0KTt0aGlzLl9maXRJbmZvPXtpbmxpbmVTdHlsZTp7dG9wOnRoaXMuc3R5bGUudG9wfHwiIixsZWZ0OnRoaXMuc3R5bGUubGVmdHx8IiIscG9zaXRpb246dGhpcy5zdHlsZS5wb3NpdGlvbnx8IiJ9LHNpemVySW5saW5lU3R5bGU6e21heFdpZHRoOnRoaXMuc2l6aW5nVGFyZ2V0LnN0eWxlLm1heFdpZHRofHwiIixtYXhIZWlnaHQ6dGhpcy5zaXppbmdUYXJnZXQuc3R5bGUubWF4SGVpZ2h0fHwiIixib3hTaXppbmc6dGhpcy5zaXppbmdUYXJnZXQuc3R5bGUuYm94U2l6aW5nfHwiIn0scG9zaXRpb25lZEJ5Ont2ZXJ0aWNhbGx5OiJhdXRvIiE9PXQudG9wPyJ0b3AiOiJhdXRvIiE9PXQuYm90dG9tPyJib3R0b20iOm51bGwsaG9yaXpvbnRhbGx5OiJhdXRvIiE9PXQubGVmdD8ibGVmdCI6ImF1dG8iIT09dC5yaWdodD8icmlnaHQiOm51bGx9LHNpemVkQnk6e2hlaWdodDoibm9uZSIhPT1lLm1heEhlaWdodCx3aWR0aDoibm9uZSIhPT1lLm1heFdpZHRoLG1pbldpZHRoOnBhcnNlSW50KGUubWluV2lkdGgsMTApfHwwLG1pbkhlaWdodDpwYXJzZUludChlLm1pbkhlaWdodCwxMCl8fDB9LG1hcmdpbjp7dG9wOnBhcnNlSW50KHQubWFyZ2luVG9wLDEwKXx8MCxyaWdodDpwYXJzZUludCh0Lm1hcmdpblJpZ2h0LDEwKXx8MCxib3R0b206cGFyc2VJbnQodC5tYXJnaW5Cb3R0b20sMTApfHwwLGxlZnQ6cGFyc2VJbnQodC5tYXJnaW5MZWZ0LDEwKXx8MH19fX0scmVzZXRGaXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9maXRJbmZvfHx7fTtmb3IodmFyIGUgaW4gdC5zaXplcklubGluZVN0eWxlKXRoaXMuc2l6aW5nVGFyZ2V0LnN0eWxlW2VdPXQuc2l6ZXJJbmxpbmVTdHlsZVtlXTtmb3IodmFyIGUgaW4gdC5pbmxpbmVTdHlsZSl0aGlzLnN0eWxlW2VdPXQuaW5saW5lU3R5bGVbZV07dGhpcy5fZml0SW5mbz1udWxsfSxyZWZpdDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuc2l6aW5nVGFyZ2V0LnNjcm9sbExlZnQsZT10aGlzLnNpemluZ1RhcmdldC5zY3JvbGxUb3A7dGhpcy5yZXNldEZpdCgpLHRoaXMuZml0KCksdGhpcy5zaXppbmdUYXJnZXQuc2Nyb2xsTGVmdD10LHRoaXMuc2l6aW5nVGFyZ2V0LnNjcm9sbFRvcD1lfSxwb3NpdGlvbjpmdW5jdGlvbigpe2lmKCF0aGlzLl9fc2hvdWxkUG9zaXRpb24pcmV0dXJuO3RoaXMuX2Rpc2NvdmVySW5mbygpLHdpbmRvdy5TaGFkeURPTSYmd2luZG93LlNoYWR5RE9NLmZsdXNoKCksdGhpcy5zdHlsZS5wb3NpdGlvbj0iZml4ZWQiLHRoaXMuc2l6aW5nVGFyZ2V0LnN0eWxlLmJveFNpemluZz0iYm9yZGVyLWJveCIsdGhpcy5zdHlsZS5sZWZ0PSIwcHgiLHRoaXMuc3R5bGUudG9wPSIwcHgiO3ZhciB0PXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZT10aGlzLl9fZ2V0Tm9ybWFsaXplZFJlY3QodGhpcy5wb3NpdGlvblRhcmdldCksbj10aGlzLl9fZ2V0Tm9ybWFsaXplZFJlY3QodGhpcy5maXRJbnRvKTtsZXQgaSxyLG8sYTt0aGlzLmV4cGFuZFNpemluZ1RhcmdldEZvclNjcm9sbGJhcnMmJihpPXRoaXMuc2l6aW5nVGFyZ2V0Lm9mZnNldFdpZHRoLHI9dGhpcy5zaXppbmdUYXJnZXQub2Zmc2V0SGVpZ2h0LG89dGhpcy5zaXppbmdUYXJnZXQuY2xpZW50V2lkdGgsYT10aGlzLnNpemluZ1RhcmdldC5jbGllbnRIZWlnaHQpO3ZhciBzPXRoaXMuX2ZpdEluZm8ubWFyZ2luLGw9dGhpcy5fX2dldFBvc2l0aW9uKHRoaXMuX2xvY2FsZUhvcml6b250YWxBbGlnbix0aGlzLnZlcnRpY2FsQWxpZ24se3dpZHRoOnQud2lkdGgrcy5sZWZ0K3MucmlnaHQsaGVpZ2h0OnQuaGVpZ2h0K3MudG9wK3MuYm90dG9tfSx0LGUsbiksYz1sLmxlZnQrcy5sZWZ0LHU9bC50b3Arcy50b3AsaD1NYXRoLm1pbihuLnJpZ2h0LXMucmlnaHQsYyt0LndpZHRoKSxkPU1hdGgubWluKG4uYm90dG9tLXMuYm90dG9tLHUrdC5oZWlnaHQpO2M9TWF0aC5tYXgobi5sZWZ0K3MubGVmdCxNYXRoLm1pbihjLGgtdGhpcy5fZml0SW5mby5zaXplZEJ5Lm1pbldpZHRoKSksdT1NYXRoLm1heChuLnRvcCtzLnRvcCxNYXRoLm1pbih1LGQtdGhpcy5fZml0SW5mby5zaXplZEJ5Lm1pbkhlaWdodCkpO2NvbnN0IHA9TWF0aC5tYXgoaC1jLHRoaXMuX2ZpdEluZm8uc2l6ZWRCeS5taW5XaWR0aCksZj1NYXRoLm1heChkLXUsdGhpcy5fZml0SW5mby5zaXplZEJ5Lm1pbkhlaWdodCk7dGhpcy5zaXppbmdUYXJnZXQuc3R5bGUubWF4V2lkdGg9cCsicHgiLHRoaXMuc2l6aW5nVGFyZ2V0LnN0eWxlLm1heEhlaWdodD1mKyJweCI7Y29uc3QgbT1jLXQubGVmdCxnPXUtdC50b3A7aWYodGhpcy5zdHlsZS5sZWZ0PWAke219cHhgLHRoaXMuc3R5bGUudG9wPWAke2d9cHhgLHRoaXMuZXhwYW5kU2l6aW5nVGFyZ2V0Rm9yU2Nyb2xsYmFycyl7Y29uc3QgdD10aGlzLnNpemluZ1RhcmdldC5vZmZzZXRIZWlnaHQsZT10LXRoaXMuc2l6aW5nVGFyZ2V0LmNsaWVudEhlaWdodC0oci1hKTtpZihlPjApe2NvbnN0IGk9TWF0aC5taW4obi5oZWlnaHQtcy50b3Atcy5ib3R0b20sZitlKTt0aGlzLnNpemluZ1RhcmdldC5zdHlsZS5tYXhIZWlnaHQ9YCR7aX1weGA7Y29uc3Qgcj10aGlzLnNpemluZ1RhcmdldC5vZmZzZXRIZWlnaHQsbz1yLXQ7bGV0IGE7InRvcCI9PT1sLnZlcnRpY2FsQWxpZ24/YT1nOiJtaWRkbGUiPT09bC52ZXJ0aWNhbEFsaWduP2E9Zy1vLzI6ImJvdHRvbSI9PT1sLnZlcnRpY2FsQWxpZ24mJihhPWctbyksYT1NYXRoLm1heChuLnRvcCtzLnRvcCxNYXRoLm1pbihhLG4uYm90dG9tLXMuYm90dG9tLXIpKSx0aGlzLnN0eWxlLnRvcD1gJHthfXB4YH1jb25zdCBjPXRoaXMuc2l6aW5nVGFyZ2V0Lm9mZnNldFdpZHRoLHU9Yy10aGlzLnNpemluZ1RhcmdldC5jbGllbnRXaWR0aC0oaS1vKTtpZih1PjApe2NvbnN0IHQ9KCgpPT57aWYodm9pZCAwIT09aGEpcmV0dXJuIGhhO2NvbnN0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7T2JqZWN0LmFzc2lnbih0LnN0eWxlLHtvdmVyZmxvdzoiYXV0byIscG9zaXRpb246ImZpeGVkIixsZWZ0OiIwcHgiLHRvcDoiMHB4IixtYXhXaWR0aDoiMTAwcHgiLG1heEhlaWdodDoiMTAwcHgifSk7Y29uc3QgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gZS5zdHlsZS53aWR0aD0iMjAwcHgiLGUuc3R5bGUuaGVpZ2h0PSIyMDBweCIsdC5hcHBlbmRDaGlsZChlKSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHQpLGhhPU1hdGguYWJzKHQub2Zmc2V0V2lkdGgtMTAwKT4xP3Qub2Zmc2V0V2lkdGgtdC5jbGllbnRXaWR0aDowLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodCksaGF9KSgpLGU9TWF0aC5taW4obi53aWR0aC1zLmxlZnQtcy5yaWdodCxwK3UtdCk7dGhpcy5zaXppbmdUYXJnZXQuc3R5bGUubWF4V2lkdGg9YCR7ZX1weGA7Y29uc3QgaT10aGlzLnNpemluZ1RhcmdldC5vZmZzZXRXaWR0aCt0LHI9aS1jO2xldCBvOyJsZWZ0Ij09PWwuaG9yaXpvbnRhbEFsaWduP289bToiY2VudGVyIj09PWwuaG9yaXpvbnRhbEFsaWduP289bS1yLzI6InJpZ2h0Ij09PWwuaG9yaXpvbnRhbEFsaWduJiYobz1tLXIpLG89TWF0aC5tYXgobi5sZWZ0K3MubGVmdCxNYXRoLm1pbihvLG4ucmlnaHQtcy5yaWdodC1pKSksdGhpcy5zdHlsZS5sZWZ0PWAke299cHhgfX19LGNvbnN0cmFpbjpmdW5jdGlvbigpe2lmKCF0aGlzLl9fc2hvdWxkUG9zaXRpb24pe3RoaXMuX2Rpc2NvdmVySW5mbygpO3ZhciB0PXRoaXMuX2ZpdEluZm87dC5wb3NpdGlvbmVkQnkudmVydGljYWxseXx8KHRoaXMuc3R5bGUucG9zaXRpb249ImZpeGVkIix0aGlzLnN0eWxlLnRvcD0iMHB4IiksdC5wb3NpdGlvbmVkQnkuaG9yaXpvbnRhbGx5fHwodGhpcy5zdHlsZS5wb3NpdGlvbj0iZml4ZWQiLHRoaXMuc3R5bGUubGVmdD0iMHB4IiksdGhpcy5zaXppbmdUYXJnZXQuc3R5bGUuYm94U2l6aW5nPSJib3JkZXItYm94Ijt2YXIgZT10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3Quc2l6ZWRCeS5oZWlnaHR8fHRoaXMuX19zaXplRGltZW5zaW9uKGUsdC5wb3NpdGlvbmVkQnkudmVydGljYWxseSwidG9wIiwiYm90dG9tIiwiSGVpZ2h0IiksdC5zaXplZEJ5LndpZHRofHx0aGlzLl9fc2l6ZURpbWVuc2lvbihlLHQucG9zaXRpb25lZEJ5Lmhvcml6b250YWxseSwibGVmdCIsInJpZ2h0IiwiV2lkdGgiKX19LF9zaXplRGltZW5zaW9uOmZ1bmN0aW9uKHQsZSxuLGkscil7dGhpcy5fX3NpemVEaW1lbnNpb24odCxlLG4saSxyKX0sX19zaXplRGltZW5zaW9uOmZ1bmN0aW9uKHQsZSxuLGkscil7dmFyIG89dGhpcy5fZml0SW5mbyxhPXRoaXMuX19nZXROb3JtYWxpemVkUmVjdCh0aGlzLmZpdEludG8pLHM9IldpZHRoIj09PXI/YS53aWR0aDphLmhlaWdodCxsPWU9PT1pLGM9Im9mZnNldCIrcjt0aGlzLnNpemluZ1RhcmdldC5zdHlsZVsibWF4IityXT1zLW8ubWFyZ2luW2w/bjppXS0obD9zLXRbaV06dFtuXSktKHRoaXNbY10tdGhpcy5zaXppbmdUYXJnZXRbY10pKyJweCJ9LGNlbnRlcjpmdW5jdGlvbigpe2lmKCF0aGlzLl9fc2hvdWxkUG9zaXRpb24pe3RoaXMuX2Rpc2NvdmVySW5mbygpO3ZhciB0PXRoaXMuX2ZpdEluZm8ucG9zaXRpb25lZEJ5O2lmKCF0LnZlcnRpY2FsbHl8fCF0Lmhvcml6b250YWxseSl7dGhpcy5zdHlsZS5wb3NpdGlvbj0iZml4ZWQiLHQudmVydGljYWxseXx8KHRoaXMuc3R5bGUudG9wPSIwcHgiKSx0Lmhvcml6b250YWxseXx8KHRoaXMuc3R5bGUubGVmdD0iMHB4Iik7dmFyIGU9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXRoaXMuX19nZXROb3JtYWxpemVkUmVjdCh0aGlzLmZpdEludG8pO3QudmVydGljYWxseXx8KHRoaXMuc3R5bGUudG9wPW4udG9wLWUudG9wKyhuLmhlaWdodC1lLmhlaWdodCkvMisicHgiKSx0Lmhvcml6b250YWxseXx8KHRoaXMuc3R5bGUubGVmdD1uLmxlZnQtZS5sZWZ0KyhuLndpZHRoLWUud2lkdGgpLzIrInB4Iil9fX0sX19nZXROb3JtYWxpemVkUmVjdDpmdW5jdGlvbih0KXtyZXR1cm4gdD09PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudHx8dD09PXdpbmRvdz97dG9wOjAsbGVmdDowLHdpZHRoOndpbmRvdy5pbm5lcldpZHRoLGhlaWdodDp3aW5kb3cuaW5uZXJIZWlnaHQscmlnaHQ6d2luZG93LmlubmVyV2lkdGgsYm90dG9tOndpbmRvdy5pbm5lckhlaWdodH06dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKX0sX19nZXRPZmZzY3JlZW5BcmVhOmZ1bmN0aW9uKHQsZSxuKXt2YXIgaT1NYXRoLm1pbigwLHQudG9wKStNYXRoLm1pbigwLG4uYm90dG9tLSh0LnRvcCtlLmhlaWdodCkpLHI9TWF0aC5taW4oMCx0LmxlZnQpK01hdGgubWluKDAsbi5yaWdodC0odC5sZWZ0K2Uud2lkdGgpKTtyZXR1cm4gTWF0aC5hYnMoaSkqZS53aWR0aCtNYXRoLmFicyhyKSplLmhlaWdodH0sX19nZXRQb3NpdGlvbjpmdW5jdGlvbih0LGUsbixpLHIsbyl7dmFyIGEscz1be3ZlcnRpY2FsQWxpZ246InRvcCIsaG9yaXpvbnRhbEFsaWduOiJsZWZ0Iix0b3A6ci50b3ArdGhpcy52ZXJ0aWNhbE9mZnNldCxsZWZ0OnIubGVmdCt0aGlzLmhvcml6b250YWxPZmZzZXR9LHt2ZXJ0aWNhbEFsaWduOiJ0b3AiLGhvcml6b250YWxBbGlnbjoicmlnaHQiLHRvcDpyLnRvcCt0aGlzLnZlcnRpY2FsT2Zmc2V0LGxlZnQ6ci5yaWdodC1uLndpZHRoLXRoaXMuaG9yaXpvbnRhbE9mZnNldH0se3ZlcnRpY2FsQWxpZ246ImJvdHRvbSIsaG9yaXpvbnRhbEFsaWduOiJsZWZ0Iix0b3A6ci5ib3R0b20tbi5oZWlnaHQtdGhpcy52ZXJ0aWNhbE9mZnNldCxsZWZ0OnIubGVmdCt0aGlzLmhvcml6b250YWxPZmZzZXR9LHt2ZXJ0aWNhbEFsaWduOiJib3R0b20iLGhvcml6b250YWxBbGlnbjoicmlnaHQiLHRvcDpyLmJvdHRvbS1uLmhlaWdodC10aGlzLnZlcnRpY2FsT2Zmc2V0LGxlZnQ6ci5yaWdodC1uLndpZHRoLXRoaXMuaG9yaXpvbnRhbE9mZnNldH1dO2lmKHRoaXMubm9PdmVybGFwKXtmb3IodmFyIGw9MCxjPXMubGVuZ3RoO2w8YztsKyspe3ZhciB1PXt9O2Zvcih2YXIgaCBpbiBzW2xdKXVbaF09c1tsXVtoXTtzLnB1c2godSl9c1swXS50b3A9c1sxXS50b3ArPXIuaGVpZ2h0LHNbMl0udG9wPXNbM10udG9wLT1yLmhlaWdodCxzWzRdLmxlZnQ9c1s2XS5sZWZ0Kz1yLndpZHRoLHNbNV0ubGVmdD1zWzddLmxlZnQtPXIud2lkdGh9Zm9yKGU9ImF1dG8iPT09ZT9udWxsOmUsKHQ9ImF1dG8iPT09dD9udWxsOnQpJiYiY2VudGVyIiE9PXR8fChzLnB1c2goe3ZlcnRpY2FsQWxpZ246InRvcCIsaG9yaXpvbnRhbEFsaWduOiJjZW50ZXIiLHRvcDpyLnRvcCt0aGlzLnZlcnRpY2FsT2Zmc2V0Kyh0aGlzLm5vT3ZlcmxhcD9yLmhlaWdodDowKSxsZWZ0OnIubGVmdC1pLndpZHRoLzIrci53aWR0aC8yK3RoaXMuaG9yaXpvbnRhbE9mZnNldH0pLHMucHVzaCh7dmVydGljYWxBbGlnbjoiYm90dG9tIixob3Jpem9udGFsQWxpZ246ImNlbnRlciIsdG9wOnIuYm90dG9tLW4uaGVpZ2h0LXRoaXMudmVydGljYWxPZmZzZXQtKHRoaXMubm9PdmVybGFwP3IuaGVpZ2h0OjApLGxlZnQ6ci5sZWZ0LWkud2lkdGgvMityLndpZHRoLzIrdGhpcy5ob3Jpem9udGFsT2Zmc2V0fSkpLGUmJiJtaWRkbGUiIT09ZXx8KHMucHVzaCh7dmVydGljYWxBbGlnbjoibWlkZGxlIixob3Jpem9udGFsQWxpZ246ImxlZnQiLHRvcDpyLnRvcC1pLmhlaWdodC8yK3IuaGVpZ2h0LzIrdGhpcy52ZXJ0aWNhbE9mZnNldCxsZWZ0OnIubGVmdCt0aGlzLmhvcml6b250YWxPZmZzZXQrKHRoaXMubm9PdmVybGFwP3Iud2lkdGg6MCl9KSxzLnB1c2goe3ZlcnRpY2FsQWxpZ246Im1pZGRsZSIsaG9yaXpvbnRhbEFsaWduOiJyaWdodCIsdG9wOnIudG9wLWkuaGVpZ2h0LzIrci5oZWlnaHQvMit0aGlzLnZlcnRpY2FsT2Zmc2V0LGxlZnQ6ci5yaWdodC1uLndpZHRoLXRoaXMuaG9yaXpvbnRhbE9mZnNldC0odGhpcy5ub092ZXJsYXA/ci53aWR0aDowKX0pKSwibWlkZGxlIj09PWUmJiJjZW50ZXIiPT09dCYmcy5wdXNoKHt2ZXJ0aWNhbEFsaWduOiJtaWRkbGUiLGhvcml6b250YWxBbGlnbjoiY2VudGVyIix0b3A6ci50b3AtaS5oZWlnaHQvMityLmhlaWdodC8yK3RoaXMudmVydGljYWxPZmZzZXQsbGVmdDpyLmxlZnQtaS53aWR0aC8yK3Iud2lkdGgvMit0aGlzLmhvcml6b250YWxPZmZzZXR9KSxsPTA7bDxzLmxlbmd0aDtsKyspe3ZhciBkPXNbbF0scD1kLnZlcnRpY2FsQWxpZ249PT1lLGY9ZC5ob3Jpem9udGFsQWxpZ249PT10O2lmKCF0aGlzLmR5bmFtaWNBbGlnbiYmIXRoaXMubm9PdmVybGFwJiZwJiZmKXthPWQ7YnJlYWt9dmFyIG09KCFlfHxwKSYmKCF0fHxmKTtpZih0aGlzLmR5bmFtaWNBbGlnbnx8bSl7aWYoZC5vZmZzY3JlZW5BcmVhPXRoaXMuX19nZXRPZmZzY3JlZW5BcmVhKGQsbixvKSwwPT09ZC5vZmZzY3JlZW5BcmVhJiZtKXthPWQ7YnJlYWt9dmFyIGc9ZC5vZmZzY3JlZW5BcmVhLShhPWF8fGQpLm9mZnNjcmVlbkFyZWE7KGc8MHx8MD09PWcmJihwfHxmKSkmJihhPWQpfX1yZXR1cm4gYX19OwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTYgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KdmFyIHBhPUVsZW1lbnQucHJvdG90eXBlLGZhPXBhLm1hdGNoZXN8fHBhLm1hdGNoZXNTZWxlY3Rvcnx8cGEubW96TWF0Y2hlc1NlbGVjdG9yfHxwYS5tc01hdGNoZXNTZWxlY3Rvcnx8cGEub01hdGNoZXNTZWxlY3Rvcnx8cGEud2Via2l0TWF0Y2hlc1NlbGVjdG9yO2NvbnN0IG1hPW5ldyBjbGFzc3tnZXRUYWJiYWJsZU5vZGVzKHQpe3ZhciBlPVtdO3JldHVybiB0aGlzLl9jb2xsZWN0VGFiYmFibGVOb2Rlcyh0LGUpP3RoaXMuX3NvcnRCeVRhYkluZGV4KGUpOmV9aXNGb2N1c2FibGUodCl7cmV0dXJuIGZhLmNhbGwodCwiaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIGJ1dHRvbiwgb2JqZWN0Iik/ZmEuY2FsbCh0LCI6bm90KFtkaXNhYmxlZF0pIik6ZmEuY2FsbCh0LCJhW2hyZWZdLCBhcmVhW2hyZWZdLCBpZnJhbWUsIFt0YWJpbmRleF0sIFtjb250ZW50RWRpdGFibGVdIil9aXNUYWJiYWJsZSh0KXtyZXR1cm4gdGhpcy5pc0ZvY3VzYWJsZSh0KSYmZmEuY2FsbCh0LCc6bm90KFt0YWJpbmRleD0iLTEiXSknKSYmdGhpcy5faXNWaXNpYmxlKHQpfV9ub3JtYWxpemVkVGFiSW5kZXgodCl7aWYodGhpcy5pc0ZvY3VzYWJsZSh0KSl7dmFyIGU9dC5nZXRBdHRyaWJ1dGUoInRhYmluZGV4Iil8fDA7cmV0dXJuIE51bWJlcihlKX1yZXR1cm4tMX1fY29sbGVjdFRhYmJhYmxlTm9kZXModCxlKXtpZih0Lm5vZGVUeXBlIT09Tm9kZS5FTEVNRU5UX05PREUpcmV0dXJuITE7dmFyIG49dDtpZighdGhpcy5faXNWaXNpYmxlKG4pKXJldHVybiExO3ZhciBpLHI9dGhpcy5fbm9ybWFsaXplZFRhYkluZGV4KG4pLG89cj4wO3I+PTAmJmUucHVzaChuKSxpPSJjb250ZW50Ij09PW4ubG9jYWxOYW1lfHwic2xvdCI9PT1uLmxvY2FsTmFtZT9xaShuKS5nZXREaXN0cmlidXRlZE5vZGVzKCk6cWkobi5yb290fHxuKS5jaGlsZHJlbjtmb3IodmFyIGE9MDthPGkubGVuZ3RoO2ErKylvPXRoaXMuX2NvbGxlY3RUYWJiYWJsZU5vZGVzKGlbYV0sZSl8fG87cmV0dXJuIG99X2lzVmlzaWJsZSh0KXt2YXIgZT10LnN0eWxlO3JldHVybiJoaWRkZW4iIT09ZS52aXNpYmlsaXR5JiYibm9uZSIhPT1lLmRpc3BsYXkmJiJoaWRkZW4iIT09KGU9d2luZG93LmdldENvbXB1dGVkU3R5bGUodCkpLnZpc2liaWxpdHkmJiJub25lIiE9PWUuZGlzcGxheX1fc29ydEJ5VGFiSW5kZXgodCl7dmFyIGU9dC5sZW5ndGg7aWYoZTwyKXJldHVybiB0O3ZhciBuPU1hdGguY2VpbChlLzIpLGk9dGhpcy5fc29ydEJ5VGFiSW5kZXgodC5zbGljZSgwLG4pKSxyPXRoaXMuX3NvcnRCeVRhYkluZGV4KHQuc2xpY2UobikpO3JldHVybiB0aGlzLl9tZXJnZVNvcnRCeVRhYkluZGV4KGkscil9X21lcmdlU29ydEJ5VGFiSW5kZXgodCxlKXtmb3IodmFyIG49W107dC5sZW5ndGg+MCYmZS5sZW5ndGg+MDspdGhpcy5faGFzTG93ZXJUYWJPcmRlcih0WzBdLGVbMF0pP24ucHVzaChlLnNoaWZ0KCkpOm4ucHVzaCh0LnNoaWZ0KCkpO3JldHVybiBuLmNvbmNhdCh0LGUpfV9oYXNMb3dlclRhYk9yZGVyKHQsZSl7dmFyIG49TWF0aC5tYXgodC50YWJJbmRleCwwKSxpPU1hdGgubWF4KGUudGFiSW5kZXgsMCk7cmV0dXJuIDA9PT1ufHwwPT09aT9pPm46bj5pfX07Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqL0lyKHtfdGVtcGxhdGU6X2VgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWlyb24tb3ZlcmxheS1iYWNrZHJvcC1iYWNrZ3JvdW5kLWNvbG9yLCAjMDAwKTsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4yczsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBAYXBwbHkgLS1pcm9uLW92ZXJsYXktYmFja2Ryb3A7CiAgICAgIH0KCiAgICAgIDpob3N0KC5vcGVuZWQpIHsKICAgICAgICBvcGFjaXR5OiB2YXIoLS1pcm9uLW92ZXJsYXktYmFja2Ryb3Atb3BhY2l0eSwgMC42KTsKICAgICAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKICAgICAgICBAYXBwbHkgLS1pcm9uLW92ZXJsYXktYmFja2Ryb3Atb3BlbmVkOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxzbG90Pjwvc2xvdD4KYCxpczoiaXJvbi1vdmVybGF5LWJhY2tkcm9wIixwcm9wZXJ0aWVzOntvcGVuZWQ6e3JlZmxlY3RUb0F0dHJpYnV0ZTohMCx0eXBlOkJvb2xlYW4sdmFsdWU6ITEsb2JzZXJ2ZXI6Il9vcGVuZWRDaGFuZ2VkIn19LGxpc3RlbmVyczp7dHJhbnNpdGlvbmVuZDoiX29uVHJhbnNpdGlvbmVuZCJ9LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLl9fb3BlbmVkUmFmPW51bGx9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQmJnRoaXMuX29wZW5lZENoYW5nZWQodGhpcy5vcGVuZWQpfSxwcmVwYXJlOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQmJiF0aGlzLnBhcmVudE5vZGUmJnFpKGRvY3VtZW50LmJvZHkpLmFwcGVuZENoaWxkKHRoaXMpfSxvcGVuOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQ9ITB9LGNsb3NlOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQ9ITF9LGNvbXBsZXRlOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWR8fHRoaXMucGFyZW50Tm9kZSE9PWRvY3VtZW50LmJvZHl8fHFpKHRoaXMucGFyZW50Tm9kZSkucmVtb3ZlQ2hpbGQodGhpcyl9LF9vblRyYW5zaXRpb25lbmQ6ZnVuY3Rpb24odCl7dCYmdC50YXJnZXQ9PT10aGlzJiZ0aGlzLmNvbXBsZXRlKCl9LF9vcGVuZWRDaGFuZ2VkOmZ1bmN0aW9uKHQpe2lmKHQpdGhpcy5wcmVwYXJlKCk7ZWxzZXt2YXIgZT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzKTsiMHMiIT09ZS50cmFuc2l0aW9uRHVyYXRpb24mJjAhPWUub3BhY2l0eXx8dGhpcy5jb21wbGV0ZSgpfXRoaXMuaXNBdHRhY2hlZCYmKHRoaXMuX19vcGVuZWRSYWYmJih3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fX29wZW5lZFJhZiksdGhpcy5fX29wZW5lZFJhZj1udWxsKSx0aGlzLnNjcm9sbFRvcD10aGlzLnNjcm9sbFRvcCx0aGlzLl9fb3BlbmVkUmFmPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKXt0aGlzLl9fb3BlbmVkUmFmPW51bGwsdGhpcy50b2dnbGVDbGFzcygib3BlbmVkIix0aGlzLm9wZW5lZCl9LmJpbmQodGhpcykpKX19KTtjb25zdCBnYT1uZXcKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCmNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5fb3ZlcmxheXM9W10sdGhpcy5fbWluaW11bVo9MTAxLHRoaXMuX2JhY2tkcm9wRWxlbWVudD1udWxsLG5pKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwidGFwIiwoZnVuY3Rpb24oKXt9KSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidGFwIix0aGlzLl9vbkNhcHR1cmVDbGljay5iaW5kKHRoaXMpLCEwKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5fb25DYXB0dXJlRm9jdXMuYmluZCh0aGlzKSwhMCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy5fb25DYXB0dXJlS2V5RG93bi5iaW5kKHRoaXMpLCEwKX1nZXQgYmFja2Ryb3BFbGVtZW50KCl7cmV0dXJuIHRoaXMuX2JhY2tkcm9wRWxlbWVudHx8KHRoaXMuX2JhY2tkcm9wRWxlbWVudD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpcm9uLW92ZXJsYXktYmFja2Ryb3AiKSksdGhpcy5fYmFja2Ryb3BFbGVtZW50fWdldCBkZWVwQWN0aXZlRWxlbWVudCgpe3ZhciB0PWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7Zm9yKHQmJnQgaW5zdGFuY2VvZiBFbGVtZW50IT0wfHwodD1kb2N1bWVudC5ib2R5KTt0LnJvb3QmJnFpKHQucm9vdCkuYWN0aXZlRWxlbWVudDspdD1xaSh0LnJvb3QpLmFjdGl2ZUVsZW1lbnQ7cmV0dXJuIHR9X2JyaW5nT3ZlcmxheUF0SW5kZXhUb0Zyb250KHQpe3ZhciBlPXRoaXMuX292ZXJsYXlzW3RdO2lmKGUpe3ZhciBuPXRoaXMuX292ZXJsYXlzLmxlbmd0aC0xLGk9dGhpcy5fb3ZlcmxheXNbbl07aWYoaSYmdGhpcy5fc2hvdWxkQmVCZWhpbmRPdmVybGF5KGUsaSkmJm4tLSwhKHQ+PW4pKXt2YXIgcj1NYXRoLm1heCh0aGlzLmN1cnJlbnRPdmVybGF5WigpLHRoaXMuX21pbmltdW1aKTtmb3IodGhpcy5fZ2V0WihlKTw9ciYmdGhpcy5fYXBwbHlPdmVybGF5WihlLHIpO3Q8bjspdGhpcy5fb3ZlcmxheXNbdF09dGhpcy5fb3ZlcmxheXNbdCsxXSx0Kys7dGhpcy5fb3ZlcmxheXNbbl09ZX19fWFkZE9yUmVtb3ZlT3ZlcmxheSh0KXt0Lm9wZW5lZD90aGlzLmFkZE92ZXJsYXkodCk6dGhpcy5yZW1vdmVPdmVybGF5KHQpfWFkZE92ZXJsYXkodCl7dmFyIGU9dGhpcy5fb3ZlcmxheXMuaW5kZXhPZih0KTtpZihlPj0wKXJldHVybiB0aGlzLl9icmluZ092ZXJsYXlBdEluZGV4VG9Gcm9udChlKSx2b2lkIHRoaXMudHJhY2tCYWNrZHJvcCgpO3ZhciBuPXRoaXMuX292ZXJsYXlzLmxlbmd0aCxpPXRoaXMuX292ZXJsYXlzW24tMV0scj1NYXRoLm1heCh0aGlzLl9nZXRaKGkpLHRoaXMuX21pbmltdW1aKSxvPXRoaXMuX2dldFoodCk7aSYmdGhpcy5fc2hvdWxkQmVCZWhpbmRPdmVybGF5KHQsaSkmJih0aGlzLl9hcHBseU92ZXJsYXlaKGksciksbi0tLHI9TWF0aC5tYXgodGhpcy5fZ2V0Wih0aGlzLl9vdmVybGF5c1tuLTFdKSx0aGlzLl9taW5pbXVtWikpLG88PXImJnRoaXMuX2FwcGx5T3ZlcmxheVoodCxyKSx0aGlzLl9vdmVybGF5cy5zcGxpY2UobiwwLHQpLHRoaXMudHJhY2tCYWNrZHJvcCgpfXJlbW92ZU92ZXJsYXkodCl7dmFyIGU9dGhpcy5fb3ZlcmxheXMuaW5kZXhPZih0KTstMSE9PWUmJih0aGlzLl9vdmVybGF5cy5zcGxpY2UoZSwxKSx0aGlzLnRyYWNrQmFja2Ryb3AoKSl9Y3VycmVudE92ZXJsYXkoKXtyZXR1cm4gdGhpcy5fb3ZlcmxheXNbdGhpcy5fb3ZlcmxheXMubGVuZ3RoLTFdfWN1cnJlbnRPdmVybGF5Wigpe3JldHVybiB0aGlzLl9nZXRaKHRoaXMuY3VycmVudE92ZXJsYXkoKSl9ZW5zdXJlTWluaW11bVoodCl7dGhpcy5fbWluaW11bVo9TWF0aC5tYXgodGhpcy5fbWluaW11bVosdCl9Zm9jdXNPdmVybGF5KCl7dmFyIHQ9dGhpcy5jdXJyZW50T3ZlcmxheSgpO3QmJnQuX2FwcGx5Rm9jdXMoKX10cmFja0JhY2tkcm9wKCl7dmFyIHQ9dGhpcy5fb3ZlcmxheVdpdGhCYWNrZHJvcCgpOyh0fHx0aGlzLl9iYWNrZHJvcEVsZW1lbnQpJiYodGhpcy5iYWNrZHJvcEVsZW1lbnQuc3R5bGUuekluZGV4PXRoaXMuX2dldFoodCktMSx0aGlzLmJhY2tkcm9wRWxlbWVudC5vcGVuZWQ9ISF0LHRoaXMuYmFja2Ryb3BFbGVtZW50LnByZXBhcmUoKSl9Z2V0QmFja2Ryb3BzKCl7Zm9yKHZhciB0PVtdLGU9MDtlPHRoaXMuX292ZXJsYXlzLmxlbmd0aDtlKyspdGhpcy5fb3ZlcmxheXNbZV0ud2l0aEJhY2tkcm9wJiZ0LnB1c2godGhpcy5fb3ZlcmxheXNbZV0pO3JldHVybiB0fWJhY2tkcm9wWigpe3JldHVybiB0aGlzLl9nZXRaKHRoaXMuX292ZXJsYXlXaXRoQmFja2Ryb3AoKSktMX1fb3ZlcmxheVdpdGhCYWNrZHJvcCgpe2Zvcih2YXIgdD10aGlzLl9vdmVybGF5cy5sZW5ndGgtMTt0Pj0wO3QtLSlpZih0aGlzLl9vdmVybGF5c1t0XS53aXRoQmFja2Ryb3ApcmV0dXJuIHRoaXMuX292ZXJsYXlzW3RdfV9nZXRaKHQpe3ZhciBlPXRoaXMuX21pbmltdW1aO2lmKHQpe3ZhciBuPU51bWJlcih0LnN0eWxlLnpJbmRleHx8d2luZG93LmdldENvbXB1dGVkU3R5bGUodCkuekluZGV4KTtuPT1uJiYoZT1uKX1yZXR1cm4gZX1fc2V0Wih0LGUpe3Quc3R5bGUuekluZGV4PWV9X2FwcGx5T3ZlcmxheVoodCxlKXt0aGlzLl9zZXRaKHQsZSsyKX1fb3ZlcmxheUluUGF0aCh0KXt0PXR8fFtdO2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKWlmKHRbZV0uX21hbmFnZXI9PT10aGlzKXJldHVybiB0W2VdfV9vbkNhcHR1cmVDbGljayh0KXt2YXIgZT10aGlzLl9vdmVybGF5cy5sZW5ndGgtMTtpZigtMSE9PWUpZm9yKHZhciBuLGk9cWkodCkucGF0aDsobj10aGlzLl9vdmVybGF5c1tlXSkmJnRoaXMuX292ZXJsYXlJblBhdGgoaSkhPT1uJiYobi5fb25DYXB0dXJlQ2xpY2sodCksbi5hbGxvd0NsaWNrVGhyb3VnaCk7KWUtLX1fb25DYXB0dXJlRm9jdXModCl7dmFyIGU9dGhpcy5jdXJyZW50T3ZlcmxheSgpO2UmJmUuX29uQ2FwdHVyZUZvY3VzKHQpfV9vbkNhcHR1cmVLZXlEb3duKHQpe3ZhciBlPXRoaXMuY3VycmVudE92ZXJsYXkoKTtlJiYoUm8ua2V5Ym9hcmRFdmVudE1hdGNoZXNLZXlzKHQsImVzYyIpP2UuX29uQ2FwdHVyZUVzYyh0KTpSby5rZXlib2FyZEV2ZW50TWF0Y2hlc0tleXModCwidGFiIikmJmUuX29uQ2FwdHVyZVRhYih0KSl9X3Nob3VsZEJlQmVoaW5kT3ZlcmxheSh0LGUpe3JldHVybiF0LmFsd2F5c09uVG9wJiZlLmFsd2F5c09uVG9wfX07Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqL3ZhciBfYSx5YSx2YT17cGFnZVg6MCxwYWdlWTowfSxiYT1udWxsLHhhPVtdLHdhPVsid2hlZWwiLCJtb3VzZXdoZWVsIiwiRE9NTW91c2VTY3JvbGwiLCJ0b3VjaHN0YXJ0IiwidG91Y2htb3ZlIl07ZnVuY3Rpb24gU2EodCl7TWEuaW5kZXhPZih0KT49MHx8KDA9PT1NYS5sZW5ndGgmJihmdW5jdGlvbiBlKCl7X2E9X2F8fEVhLmJpbmQodm9pZCAwKTtmb3IodmFyIHQ9MCxlPXdhLmxlbmd0aDt0PGU7dCsrKWRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIod2FbdF0sX2Ese2NhcHR1cmU6ITAscGFzc2l2ZTohMX0pfSkoKSxNYS5wdXNoKHQpLHlhPU1hW01hLmxlbmd0aC0xXSl9Y29uc3QgTWE9W107ZnVuY3Rpb24gRWEodCl7aWYodC5jYW5jZWxhYmxlJiYoZnVuY3Rpb24gZSh0KXt2YXIgZT1xaSh0KS5yb290VGFyZ2V0O2lmKCJ0b3VjaG1vdmUiIT09dC50eXBlJiZiYSE9PWUmJihiYT1lLHhhPShmdW5jdGlvbiBuKHQpe2Zvcih2YXIgZT1bXSxuPXQuaW5kZXhPZih5YSksaT0wO2k8PW47aSsrKWlmKHRbaV0ubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSl7dmFyIHI9dFtpXSxvPXIuc3R5bGU7InNjcm9sbCIhPT1vLm92ZXJmbG93JiYiYXV0byIhPT1vLm92ZXJmbG93JiYobz13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShyKSksInNjcm9sbCIhPT1vLm92ZXJmbG93JiYiYXV0byIhPT1vLm92ZXJmbG93fHxlLnB1c2gocil9cmV0dXJuIGV9KShxaSh0KS5wYXRoKSksIXhhLmxlbmd0aClyZXR1cm4hMDtpZigidG91Y2hzdGFydCI9PT10LnR5cGUpcmV0dXJuITE7dmFyIGk9KGZ1bmN0aW9uIHIodCl7dmFyIGU9e2RlbHRhWDp0LmRlbHRhWCxkZWx0YVk6dC5kZWx0YVl9O2lmKCJkZWx0YVgiaW4gdCk7ZWxzZSBpZigid2hlZWxEZWx0YVgiaW4gdCYmIndoZWVsRGVsdGFZImluIHQpZS5kZWx0YVg9LXQud2hlZWxEZWx0YVgsZS5kZWx0YVk9LXQud2hlZWxEZWx0YVk7ZWxzZSBpZigid2hlZWxEZWx0YSJpbiB0KWUuZGVsdGFYPTAsZS5kZWx0YVk9LXQud2hlZWxEZWx0YTtlbHNlIGlmKCJheGlzImluIHQpZS5kZWx0YVg9MT09PXQuYXhpcz90LmRldGFpbDowLGUuZGVsdGFZPTI9PT10LmF4aXM/dC5kZXRhaWw6MDtlbHNlIGlmKHQudGFyZ2V0VG91Y2hlcyl7dmFyIG49dC50YXJnZXRUb3VjaGVzWzBdO2UuZGVsdGFYPXZhLnBhZ2VYLW4ucGFnZVgsZS5kZWx0YVk9dmEucGFnZVktbi5wYWdlWX1yZXR1cm4gZX0KLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovKSh0KTtyZXR1cm4hKGZ1bmN0aW9uIG8odCxlLG4pe2lmKGV8fG4pZm9yKHZhciBpPU1hdGguYWJzKG4pPj1NYXRoLmFicyhlKSxyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBvPXRbcl07aWYoaT9uPDA/by5zY3JvbGxUb3A+MDpvLnNjcm9sbFRvcDxvLnNjcm9sbEhlaWdodC1vLmNsaWVudEhlaWdodDplPDA/by5zY3JvbGxMZWZ0PjA6by5zY3JvbGxMZWZ0PG8uc2Nyb2xsV2lkdGgtby5jbGllbnRXaWR0aClyZXR1cm4gb319KSh4YSxpLmRlbHRhWCxpLmRlbHRhWSl9KSh0KSYmdC5wcmV2ZW50RGVmYXVsdCgpLHQudGFyZ2V0VG91Y2hlcyl7dmFyIG49dC50YXJnZXRUb3VjaGVzWzBdO3ZhLnBhZ2VYPW4ucGFnZVgsdmEucGFnZVk9bi5wYWdlWX19Y29uc3QgVGE9e3Byb3BlcnRpZXM6e29wZW5lZDp7b2JzZXJ2ZXI6Il9vcGVuZWRDaGFuZ2VkIix0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwfSxjYW5jZWxlZDp7b2JzZXJ2ZXI6Il9jYW5jZWxlZENoYW5nZWQiLHJlYWRPbmx5OiEwLHR5cGU6Qm9vbGVhbix2YWx1ZTohMX0sd2l0aEJhY2tkcm9wOntvYnNlcnZlcjoiX3dpdGhCYWNrZHJvcENoYW5nZWQiLHR5cGU6Qm9vbGVhbn0sbm9BdXRvRm9jdXM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sbm9DYW5jZWxPbkVzY0tleTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxub0NhbmNlbE9uT3V0c2lkZUNsaWNrOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGNsb3NpbmdSZWFzb246e3R5cGU6T2JqZWN0fSxyZXN0b3JlRm9jdXNPbkNsb3NlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGFsbG93Q2xpY2tUaHJvdWdoOnt0eXBlOkJvb2xlYW59LGFsd2F5c09uVG9wOnt0eXBlOkJvb2xlYW59LHNjcm9sbEFjdGlvbjp7dHlwZTpTdHJpbmd9LF9tYW5hZ2VyOnt0eXBlOk9iamVjdCx2YWx1ZTpnYX0sX2ZvY3VzZWRDaGlsZDp7dHlwZTpPYmplY3R9fSxsaXN0ZW5lcnM6eyJpcm9uLXJlc2l6ZSI6Il9vbklyb25SZXNpemUifSxvYnNlcnZlcnM6WyJfX3VwZGF0ZVNjcm9sbE9ic2VydmVycyhpc0F0dGFjaGVkLCBvcGVuZWQsIHNjcm9sbEFjdGlvbikiXSxnZXQgYmFja2Ryb3BFbGVtZW50KCl7cmV0dXJuIHRoaXMuX21hbmFnZXIuYmFja2Ryb3BFbGVtZW50fSxnZXQgX2ZvY3VzTm9kZSgpe3JldHVybiB0aGlzLl9mb2N1c2VkQ2hpbGR8fHFpKHRoaXMpLnF1ZXJ5U2VsZWN0b3IoIlthdXRvZm9jdXNdIil8fHRoaXN9LGdldCBfZm9jdXNhYmxlTm9kZXMoKXtyZXR1cm4gbWEuZ2V0VGFiYmFibGVOb2Rlcyh0aGlzKX0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLl9faXNBbmltYXRpbmc9ITEsdGhpcy5fX3Nob3VsZFJlbW92ZVRhYkluZGV4PSExLHRoaXMuX19maXJzdEZvY3VzYWJsZU5vZGU9dGhpcy5fX2xhc3RGb2N1c2FibGVOb2RlPW51bGwsdGhpcy5fX3JhZnM9e30sdGhpcy5fX3Jlc3RvcmVGb2N1c05vZGU9bnVsbCx0aGlzLl9fc2Nyb2xsVG9wPXRoaXMuX19zY3JvbGxMZWZ0PW51bGwsdGhpcy5fX29uQ2FwdHVyZVNjcm9sbD10aGlzLl9fb25DYXB0dXJlU2Nyb2xsLmJpbmQodGhpcyksdGhpcy5fX3Jvb3ROb2Rlcz1udWxsLHRoaXMuX2Vuc3VyZVNldHVwKCl9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQmJnRoaXMuX29wZW5lZENoYW5nZWQodGhpcy5vcGVuZWQpLHRoaXMuX29ic2VydmVyPXFpKHRoaXMpLm9ic2VydmVOb2Rlcyh0aGlzLl9vbk5vZGVzQ2hhbmdlKX0sZGV0YWNoZWQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5fb2JzZXJ2ZXImJnFpKHRoaXMpLnVub2JzZXJ2ZU5vZGVzKHRoaXMuX29ic2VydmVyKSx0aGlzLl9vYnNlcnZlcj1udWxsLHRoaXMuX19yYWZzKW51bGwhPT10aGlzLl9fcmFmc1t0XSYmY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fX3JhZnNbdF0pO3RoaXMuX19yYWZzPXt9LHRoaXMuX21hbmFnZXIucmVtb3ZlT3ZlcmxheSh0aGlzKSx0aGlzLl9faXNBbmltYXRpbmcmJih0aGlzLm9wZW5lZD90aGlzLl9maW5pc2hSZW5kZXJPcGVuZWQoKToodGhpcy5fYXBwbHlGb2N1cygpLHRoaXMuX2ZpbmlzaFJlbmRlckNsb3NlZCgpKSl9LHRvZ2dsZTpmdW5jdGlvbigpe3RoaXMuX3NldENhbmNlbGVkKCExKSx0aGlzLm9wZW5lZD0hdGhpcy5vcGVuZWR9LG9wZW46ZnVuY3Rpb24oKXt0aGlzLl9zZXRDYW5jZWxlZCghMSksdGhpcy5vcGVuZWQ9ITB9LGNsb3NlOmZ1bmN0aW9uKCl7dGhpcy5fc2V0Q2FuY2VsZWQoITEpLHRoaXMub3BlbmVkPSExfSxjYW5jZWw6ZnVuY3Rpb24odCl7dGhpcy5maXJlKCJpcm9uLW92ZXJsYXktY2FuY2VsZWQiLHQse2NhbmNlbGFibGU6ITB9KS5kZWZhdWx0UHJldmVudGVkfHwodGhpcy5fc2V0Q2FuY2VsZWQoITApLHRoaXMub3BlbmVkPSExKX0saW52YWxpZGF0ZVRhYmJhYmxlczpmdW5jdGlvbigpe3RoaXMuX19maXJzdEZvY3VzYWJsZU5vZGU9dGhpcy5fX2xhc3RGb2N1c2FibGVOb2RlPW51bGx9LF9lbnN1cmVTZXR1cDpmdW5jdGlvbigpe3RoaXMuX292ZXJsYXlTZXR1cHx8KHRoaXMuX292ZXJsYXlTZXR1cD0hMCx0aGlzLnN0eWxlLm91dGxpbmU9Im5vbmUiLHRoaXMuc3R5bGUuZGlzcGxheT0ibm9uZSIpfSxfb3BlbmVkQ2hhbmdlZDpmdW5jdGlvbih0KXt0P3RoaXMucmVtb3ZlQXR0cmlidXRlKCJhcmlhLWhpZGRlbiIpOnRoaXMuc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsInRydWUiKSx0aGlzLmlzQXR0YWNoZWQmJih0aGlzLl9faXNBbmltYXRpbmc9ITAsdGhpcy5fX2RlcmFmKCJfX29wZW5lZENoYW5nZWQiLHRoaXMuX19vcGVuZWRDaGFuZ2VkKSl9LF9jYW5jZWxlZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLmNsb3NpbmdSZWFzb249dGhpcy5jbG9zaW5nUmVhc29ufHx7fSx0aGlzLmNsb3NpbmdSZWFzb24uY2FuY2VsZWQ9dGhpcy5jYW5jZWxlZH0sX3dpdGhCYWNrZHJvcENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLndpdGhCYWNrZHJvcCYmIXRoaXMuaGFzQXR0cmlidXRlKCJ0YWJpbmRleCIpPyh0aGlzLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCItMSIpLHRoaXMuX19zaG91bGRSZW1vdmVUYWJJbmRleD0hMCk6dGhpcy5fX3Nob3VsZFJlbW92ZVRhYkluZGV4JiYodGhpcy5yZW1vdmVBdHRyaWJ1dGUoInRhYmluZGV4IiksdGhpcy5fX3Nob3VsZFJlbW92ZVRhYkluZGV4PSExKSx0aGlzLm9wZW5lZCYmdGhpcy5pc0F0dGFjaGVkJiZ0aGlzLl9tYW5hZ2VyLnRyYWNrQmFja2Ryb3AoKX0sX3ByZXBhcmVSZW5kZXJPcGVuZWQ6ZnVuY3Rpb24oKXt0aGlzLl9fcmVzdG9yZUZvY3VzTm9kZT10aGlzLl9tYW5hZ2VyLmRlZXBBY3RpdmVFbGVtZW50LHRoaXMuX3ByZXBhcmVQb3NpdGlvbmluZygpLHRoaXMucmVmaXQoKSx0aGlzLl9maW5pc2hQb3NpdGlvbmluZygpLHRoaXMubm9BdXRvRm9jdXMmJmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT10aGlzLl9mb2N1c05vZGUmJih0aGlzLl9mb2N1c05vZGUuYmx1cigpLHRoaXMuX19yZXN0b3JlRm9jdXNOb2RlLmZvY3VzKCkpfSxfcmVuZGVyT3BlbmVkOmZ1bmN0aW9uKCl7dGhpcy5fZmluaXNoUmVuZGVyT3BlbmVkKCl9LF9yZW5kZXJDbG9zZWQ6ZnVuY3Rpb24oKXt0aGlzLl9maW5pc2hSZW5kZXJDbG9zZWQoKX0sX2ZpbmlzaFJlbmRlck9wZW5lZDpmdW5jdGlvbigpe3RoaXMubm90aWZ5UmVzaXplKCksdGhpcy5fX2lzQW5pbWF0aW5nPSExLHRoaXMuZmlyZSgiaXJvbi1vdmVybGF5LW9wZW5lZCIpfSxfZmluaXNoUmVuZGVyQ2xvc2VkOmZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLnN0eWxlLnpJbmRleD0iIix0aGlzLm5vdGlmeVJlc2l6ZSgpLHRoaXMuX19pc0FuaW1hdGluZz0hMSx0aGlzLmZpcmUoImlyb24tb3ZlcmxheS1jbG9zZWQiLHRoaXMuY2xvc2luZ1JlYXNvbil9LF9wcmVwYXJlUG9zaXRpb25pbmc6ZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnRyYW5zaXRpb249dGhpcy5zdHlsZS53ZWJraXRUcmFuc2l0aW9uPSJub25lIix0aGlzLnN0eWxlLnRyYW5zZm9ybT10aGlzLnN0eWxlLndlYmtpdFRyYW5zZm9ybT0ibm9uZSIsdGhpcy5zdHlsZS5kaXNwbGF5PSIifSxfZmluaXNoUG9zaXRpb25pbmc6ZnVuY3Rpb24oKXt0aGlzLnN0eWxlLmRpc3BsYXk9Im5vbmUiLHRoaXMuc2Nyb2xsVG9wPXRoaXMuc2Nyb2xsVG9wLHRoaXMuc3R5bGUudHJhbnNpdGlvbj10aGlzLnN0eWxlLndlYmtpdFRyYW5zaXRpb249IiIsdGhpcy5zdHlsZS50cmFuc2Zvcm09dGhpcy5zdHlsZS53ZWJraXRUcmFuc2Zvcm09IiIsdGhpcy5zdHlsZS5kaXNwbGF5PSIiLHRoaXMuc2Nyb2xsVG9wPXRoaXMuc2Nyb2xsVG9wfSxfYXBwbHlGb2N1czpmdW5jdGlvbigpe2lmKHRoaXMub3BlbmVkKXRoaXMubm9BdXRvRm9jdXN8fHRoaXMuX2ZvY3VzTm9kZS5mb2N1cygpO2Vsc2V7aWYodGhpcy5yZXN0b3JlRm9jdXNPbkNsb3NlJiZ0aGlzLl9fcmVzdG9yZUZvY3VzTm9kZSl7dmFyIHQ9dGhpcy5fbWFuYWdlci5kZWVwQWN0aXZlRWxlbWVudDsodD09PWRvY3VtZW50LmJvZHl8fENhKHRoaXMsdCkpJiZ0aGlzLl9fcmVzdG9yZUZvY3VzTm9kZS5mb2N1cygpfXRoaXMuX19yZXN0b3JlRm9jdXNOb2RlPW51bGwsdGhpcy5fZm9jdXNOb2RlLmJsdXIoKSx0aGlzLl9mb2N1c2VkQ2hpbGQ9bnVsbH19LF9vbkNhcHR1cmVDbGljazpmdW5jdGlvbih0KXt0aGlzLm5vQ2FuY2VsT25PdXRzaWRlQ2xpY2t8fHRoaXMuY2FuY2VsKHQpfSxfb25DYXB0dXJlRm9jdXM6ZnVuY3Rpb24odCl7aWYodGhpcy53aXRoQmFja2Ryb3Ape3ZhciBlPXFpKHQpLnBhdGg7LTE9PT1lLmluZGV4T2YodGhpcyk/KHQuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5fYXBwbHlGb2N1cygpKTp0aGlzLl9mb2N1c2VkQ2hpbGQ9ZVswXX19LF9vbkNhcHR1cmVFc2M6ZnVuY3Rpb24odCl7dGhpcy5ub0NhbmNlbE9uRXNjS2V5fHx0aGlzLmNhbmNlbCh0KX0sX29uQ2FwdHVyZVRhYjpmdW5jdGlvbih0KXtpZih0aGlzLndpdGhCYWNrZHJvcCl7dGhpcy5fX2Vuc3VyZUZpcnN0TGFzdEZvY3VzYWJsZXMoKTt2YXIgZT10LnNoaWZ0S2V5LG49ZT90aGlzLl9fZmlyc3RGb2N1c2FibGVOb2RlOnRoaXMuX19sYXN0Rm9jdXNhYmxlTm9kZSxpPWU/dGhpcy5fX2xhc3RGb2N1c2FibGVOb2RlOnRoaXMuX19maXJzdEZvY3VzYWJsZU5vZGUscj0hMTtpZihuPT09aSlyPSEwO2Vsc2V7dmFyIG89dGhpcy5fbWFuYWdlci5kZWVwQWN0aXZlRWxlbWVudDtyPW89PT1ufHxvPT09dGhpc31yJiYodC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2ZvY3VzZWRDaGlsZD1pLHRoaXMuX2FwcGx5Rm9jdXMoKSl9fSxfb25Jcm9uUmVzaXplOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQmJiF0aGlzLl9faXNBbmltYXRpbmcmJnRoaXMuX19kZXJhZigicmVmaXQiLHRoaXMucmVmaXQpfSxfb25Ob2Rlc0NoYW5nZTpmdW5jdGlvbigpe3RoaXMub3BlbmVkJiYhdGhpcy5fX2lzQW5pbWF0aW5nJiYodGhpcy5pbnZhbGlkYXRlVGFiYmFibGVzKCksdGhpcy5ub3RpZnlSZXNpemUoKSl9LF9fZW5zdXJlRmlyc3RMYXN0Rm9jdXNhYmxlczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2ZvY3VzYWJsZU5vZGVzO3RoaXMuX19maXJzdEZvY3VzYWJsZU5vZGU9dFswXSx0aGlzLl9fbGFzdEZvY3VzYWJsZU5vZGU9dFt0Lmxlbmd0aC0xXX0sX19vcGVuZWRDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQ/KHRoaXMuX3ByZXBhcmVSZW5kZXJPcGVuZWQoKSx0aGlzLl9tYW5hZ2VyLmFkZE92ZXJsYXkodGhpcyksdGhpcy5fYXBwbHlGb2N1cygpLHRoaXMuX3JlbmRlck9wZW5lZCgpKToodGhpcy5fbWFuYWdlci5yZW1vdmVPdmVybGF5KHRoaXMpLHRoaXMuX2FwcGx5Rm9jdXMoKSx0aGlzLl9yZW5kZXJDbG9zZWQoKSl9LF9fZGVyYWY6ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9fcmFmcztudWxsIT09blt0XSYmY2FuY2VsQW5pbWF0aW9uRnJhbWUoblt0XSksblt0XT1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gaSgpe25bdF09bnVsbCxlLmNhbGwodGhpcyl9LmJpbmQodGhpcykpfSxfX3VwZGF0ZVNjcm9sbE9ic2VydmVyczpmdW5jdGlvbih0LGUsbil7dCYmZSYmdGhpcy5fX2lzVmFsaWRTY3JvbGxBY3Rpb24obik/KCJsb2NrIj09PW4mJih0aGlzLl9fc2F2ZVNjcm9sbFBvc2l0aW9uKCksU2EodGhpcykpLHRoaXMuX19hZGRTY3JvbGxMaXN0ZW5lcnMoKSk6KChmdW5jdGlvbiBpKHQpe3ZhciBlPU1hLmluZGV4T2YodCk7LTEhPT1lJiYoTWEuc3BsaWNlKGUsMSkseWE9TWFbTWEubGVuZ3RoLTFdLDA9PT1NYS5sZW5ndGgmJihmdW5jdGlvbiBuKCl7Zm9yKHZhciB0PTAsZT13YS5sZW5ndGg7dDxlO3QrKylkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHdhW3RdLF9hLHtjYXB0dXJlOiEwLHBhc3NpdmU6ITF9KX0pKCkpfSkodGhpcyksdGhpcy5fX3JlbW92ZVNjcm9sbExpc3RlbmVycygpKX0sX19hZGRTY3JvbGxMaXN0ZW5lcnM6ZnVuY3Rpb24oKXtpZighdGhpcy5fX3Jvb3ROb2Rlcyl7aWYodGhpcy5fX3Jvb3ROb2Rlcz1bXSxtKWZvcih2YXIgdD10aGlzO3Q7KXQubm9kZVR5cGU9PT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUmJnQuaG9zdCYmdGhpcy5fX3Jvb3ROb2Rlcy5wdXNoKHQpLHQ9dC5ob3N0fHx0LmFzc2lnbmVkU2xvdHx8dC5wYXJlbnROb2RlO3RoaXMuX19yb290Tm9kZXMucHVzaChkb2N1bWVudCl9dGhpcy5fX3Jvb3ROb2Rlcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsdGhpcy5fX29uQ2FwdHVyZVNjcm9sbCx7Y2FwdHVyZTohMCxwYXNzaXZlOiEwfSl9KSx0aGlzKX0sX19yZW1vdmVTY3JvbGxMaXN0ZW5lcnM6ZnVuY3Rpb24oKXt0aGlzLl9fcm9vdE5vZGVzJiZ0aGlzLl9fcm9vdE5vZGVzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Nyb2xsIix0aGlzLl9fb25DYXB0dXJlU2Nyb2xsLHtjYXB0dXJlOiEwLHBhc3NpdmU6ITB9KX0pLHRoaXMpLHRoaXMuaXNBdHRhY2hlZHx8KHRoaXMuX19yb290Tm9kZXM9bnVsbCl9LF9faXNWYWxpZFNjcm9sbEFjdGlvbjpmdW5jdGlvbih0KXtyZXR1cm4ibG9jayI9PT10fHwicmVmaXQiPT09dHx8ImNhbmNlbCI9PT10fSxfX29uQ2FwdHVyZVNjcm9sbDpmdW5jdGlvbih0KXtpZighKHRoaXMuX19pc0FuaW1hdGluZ3x8cWkodCkucGF0aC5pbmRleE9mKHRoaXMpPj0wKSlzd2l0Y2godGhpcy5zY3JvbGxBY3Rpb24pe2Nhc2UibG9jayI6dGhpcy5fX3Jlc3RvcmVTY3JvbGxQb3NpdGlvbigpO2JyZWFrO2Nhc2UicmVmaXQiOnRoaXMuX19kZXJhZigicmVmaXQiLHRoaXMucmVmaXQpO2JyZWFrO2Nhc2UiY2FuY2VsIjp0aGlzLmNhbmNlbCh0KX19LF9fc2F2ZVNjcm9sbFBvc2l0aW9uOmZ1bmN0aW9uKCl7ZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudD8odGhpcy5fX3Njcm9sbFRvcD1kb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcCx0aGlzLl9fc2Nyb2xsTGVmdD1kb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQpOih0aGlzLl9fc2Nyb2xsVG9wPU1hdGgubWF4KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AsZG9jdW1lbnQuYm9keS5zY3JvbGxUb3ApLHRoaXMuX19zY3JvbGxMZWZ0PU1hdGgubWF4KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0LGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdCkpfSxfX3Jlc3RvcmVTY3JvbGxQb3NpdGlvbjpmdW5jdGlvbigpe2RvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQ/KGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wPXRoaXMuX19zY3JvbGxUb3AsZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0PXRoaXMuX19zY3JvbGxMZWZ0KTooZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcD1kb2N1bWVudC5ib2R5LnNjcm9sbFRvcD10aGlzLl9fc2Nyb2xsVG9wLGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0PWRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdD10aGlzLl9fc2Nyb2xsTGVmdCl9fSxDYT0odCxlKT0+e2ZvcihsZXQgaT1lO2k7aT0obj1pKS5hc3NpZ25lZFNsb3R8fG4ucGFyZW50Tm9kZXx8bi5ob3N0KWlmKGk9PT10KXJldHVybiEwO3ZhciBuO3JldHVybiExfSxBYT1bZGEsbW8sVGFdLGthPXtob3N0QXR0cmlidXRlczp7cm9sZToiZGlhbG9nIix0YWJpbmRleDoiLTEifSxwcm9wZXJ0aWVzOnttb2RhbDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfX3JlYWRpZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX19LG9ic2VydmVyczpbIl9tb2RhbENoYW5nZWQobW9kYWwsIF9fcmVhZGllZCkiXSxsaXN0ZW5lcnM6e3RhcDoiX29uRGlhbG9nQ2xpY2sifSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuX19wcmV2Tm9DYW5jZWxPbk91dHNpZGVDbGljaz10aGlzLm5vQ2FuY2VsT25PdXRzaWRlQ2xpY2ssdGhpcy5fX3ByZXZOb0NhbmNlbE9uRXNjS2V5PXRoaXMubm9DYW5jZWxPbkVzY0tleSx0aGlzLl9fcHJldldpdGhCYWNrZHJvcD10aGlzLndpdGhCYWNrZHJvcCx0aGlzLl9fcmVhZGllZD0hMH0sX21vZGFsQ2hhbmdlZDpmdW5jdGlvbih0LGUpe2UmJih0Pyh0aGlzLl9fcHJldk5vQ2FuY2VsT25PdXRzaWRlQ2xpY2s9dGhpcy5ub0NhbmNlbE9uT3V0c2lkZUNsaWNrLHRoaXMuX19wcmV2Tm9DYW5jZWxPbkVzY0tleT10aGlzLm5vQ2FuY2VsT25Fc2NLZXksdGhpcy5fX3ByZXZXaXRoQmFja2Ryb3A9dGhpcy53aXRoQmFja2Ryb3AsdGhpcy5ub0NhbmNlbE9uT3V0c2lkZUNsaWNrPSEwLHRoaXMubm9DYW5jZWxPbkVzY0tleT0hMCx0aGlzLndpdGhCYWNrZHJvcD0hMCk6KHRoaXMubm9DYW5jZWxPbk91dHNpZGVDbGljaz10aGlzLm5vQ2FuY2VsT25PdXRzaWRlQ2xpY2smJnRoaXMuX19wcmV2Tm9DYW5jZWxPbk91dHNpZGVDbGljayx0aGlzLm5vQ2FuY2VsT25Fc2NLZXk9dGhpcy5ub0NhbmNlbE9uRXNjS2V5JiZ0aGlzLl9fcHJldk5vQ2FuY2VsT25Fc2NLZXksdGhpcy53aXRoQmFja2Ryb3A9dGhpcy53aXRoQmFja2Ryb3AmJnRoaXMuX19wcmV2V2l0aEJhY2tkcm9wKSl9LF91cGRhdGVDbG9zaW5nUmVhc29uQ29uZmlybWVkOmZ1bmN0aW9uKHQpe3RoaXMuY2xvc2luZ1JlYXNvbj10aGlzLmNsb3NpbmdSZWFzb258fHt9LHRoaXMuY2xvc2luZ1JlYXNvbi5jb25maXJtZWQ9dH0sX29uRGlhbG9nQ2xpY2s6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXFpKHQpLnBhdGgsbj0wLGk9ZS5pbmRleE9mKHRoaXMpO248aTtuKyspe3ZhciByPWVbbl07aWYoci5oYXNBdHRyaWJ1dGUmJihyLmhhc0F0dHJpYnV0ZSgiZGlhbG9nLWRpc21pc3MiKXx8ci5oYXNBdHRyaWJ1dGUoImRpYWxvZy1jb25maXJtIikpKXt0aGlzLl91cGRhdGVDbG9zaW5nUmVhc29uQ29uZmlybWVkKHIuaGFzQXR0cmlidXRlKCJkaWFsb2ctY29uZmlybSIpKSx0aGlzLmNsb3NlKCksdC5zdG9wUHJvcGFnYXRpb24oKTticmVha319fX0sTGE9W0FhLGthXTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCmlmKAovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KSXIoe190ZW1wbGF0ZTpfZWAKICAgIDxzdHlsZT4KCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIDpob3N0KC5pcy1zY3JvbGxlZDpub3QoOmZpcnN0LWNoaWxkKSk6OmJlZm9yZSB7CiAgICAgICAgY29udGVudDogJyc7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGhlaWdodDogMXB4OwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWRpdmlkZXItY29sb3IpOwogICAgICB9CgogICAgICA6aG9zdCguY2FuLXNjcm9sbDpub3QoLnNjcm9sbGVkLXRvLWJvdHRvbSk6bm90KDpsYXN0LWNoaWxkKSk6OmFmdGVyIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgaGVpZ2h0OiAxcHg7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tZGl2aWRlci1jb2xvcik7CiAgICAgIH0KCiAgICAgIC5zY3JvbGxhYmxlIHsKICAgICAgICBwYWRkaW5nOiAwIDI0cHg7CgogICAgICAgIEBhcHBseSAtLWxheW91dC1zY3JvbGw7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZGlhbG9nLXNjcm9sbGFibGU7CiAgICAgIH0KCiAgICAgIC5maXQgewogICAgICAgIEBhcHBseSAtLWxheW91dC1maXQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBpZD0ic2Nyb2xsYWJsZSIgY2xhc3M9InNjcm9sbGFibGUiIG9uLXNjcm9sbD0idXBkYXRlU2Nyb2xsU3RhdGUiPgogICAgICA8c2xvdD48L3Nsb3Q+CiAgICA8L2Rpdj4KYCxpczoicGFwZXItZGlhbG9nLXNjcm9sbGFibGUiLHByb3BlcnRpZXM6e2RpYWxvZ0VsZW1lbnQ6e3R5cGU6T2JqZWN0fX0sZ2V0IHNjcm9sbFRhcmdldCgpe3JldHVybiB0aGlzLiQuc2Nyb2xsYWJsZX0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLl9lbnN1cmVUYXJnZXQoKSx0aGlzLmNsYXNzTGlzdC5hZGQoIm5vLXBhZGRpbmciKX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9lbnN1cmVUYXJnZXQoKSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy51cGRhdGVTY3JvbGxTdGF0ZS5iaW5kKHRoaXMpKX0sdXBkYXRlU2Nyb2xsU3RhdGU6ZnVuY3Rpb24oKXt0aGlzLnRvZ2dsZUNsYXNzKCJpcy1zY3JvbGxlZCIsdGhpcy5zY3JvbGxUYXJnZXQuc2Nyb2xsVG9wPjApLHRoaXMudG9nZ2xlQ2xhc3MoImNhbi1zY3JvbGwiLHRoaXMuc2Nyb2xsVGFyZ2V0Lm9mZnNldEhlaWdodDx0aGlzLnNjcm9sbFRhcmdldC5zY3JvbGxIZWlnaHQpLHRoaXMudG9nZ2xlQ2xhc3MoInNjcm9sbGVkLXRvLWJvdHRvbSIsdGhpcy5zY3JvbGxUYXJnZXQuc2Nyb2xsVG9wK3RoaXMuc2Nyb2xsVGFyZ2V0Lm9mZnNldEhlaWdodD49dGhpcy5zY3JvbGxUYXJnZXQuc2Nyb2xsSGVpZ2h0KX0sX2Vuc3VyZVRhcmdldDpmdW5jdGlvbigpe3RoaXMuZGlhbG9nRWxlbWVudD10aGlzLmRpYWxvZ0VsZW1lbnR8fHRoaXMucGFyZW50RWxlbWVudCx0aGlzLmRpYWxvZ0VsZW1lbnQmJnRoaXMuZGlhbG9nRWxlbWVudC5iZWhhdmlvcnMmJnRoaXMuZGlhbG9nRWxlbWVudC5iZWhhdmlvcnMuaW5kZXhPZihrYSk+PTA/KHRoaXMuZGlhbG9nRWxlbWVudC5zaXppbmdUYXJnZXQ9dGhpcy5zY3JvbGxUYXJnZXQsdGhpcy5zY3JvbGxUYXJnZXQuY2xhc3NMaXN0LnJlbW92ZSgiZml0IikpOnRoaXMuZGlhbG9nRWxlbWVudCYmdGhpcy5zY3JvbGxUYXJnZXQuY2xhc3NMaXN0LmFkZCgiZml0Iil9fSksIXdpbmRvdy5wb2x5bWVyU2tpcExvYWRpbmdGb250Um9ib3RvKXtjb25zdCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxpbmsiKTt0LnJlbD0ic3R5bGVzaGVldCIsdC50eXBlPSJ0ZXh0L2NzcyIsdC5jcm9zc09yaWdpbj0iYW5vbnltb3VzIix0LmhyZWY9Imh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1Sb2JvdG8rTW9ubzo0MDAsNzAwfFJvYm90bzo0MDAsMzAwLDMwMGl0YWxpYyw0MDBpdGFsaWMsNTAwLDUwMGl0YWxpYyw3MDAsNzAwaXRhbGljIixkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHQpfQovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi9jb25zdCBQYT1fZWA8Y3VzdG9tLXN0eWxlPgogIDxzdHlsZSBpcz0iY3VzdG9tLXN0eWxlIj4KICAgIGh0bWwgewoKICAgICAgLyogU2hhcmVkIFN0eWxlcyAqLwogICAgICAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U6IHsKICAgICAgICBmb250LWZhbWlseTogJ1JvYm90bycsICdOb3RvJywgc2Fucy1zZXJpZjsKICAgICAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1jb21tb24tY29kZTogewogICAgICAgIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nLCAnQ29uc29sYXMnLCAnTWVubG8nLCBtb25vc3BhY2U7CiAgICAgICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtY29tbW9uLWV4cGVuc2l2ZS1rZXJuaW5nOiB7CiAgICAgICAgdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1jb21tb24tbm93cmFwOiB7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICB9OwoKICAgICAgLyogTWF0ZXJpYWwgRm9udCBTdHlsZXMgKi8KCiAgICAgIC0tcGFwZXItZm9udC1kaXNwbGF5NDogewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tbm93cmFwOwoKICAgICAgICBmb250LXNpemU6IDExMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiAzMDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDQ0ZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDEyMHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LWRpc3BsYXkzOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1ub3dyYXA7CgogICAgICAgIGZvbnQtc2l6ZTogNTZweDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAyNmVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiA2MHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LWRpc3BsYXkyOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKCiAgICAgICAgZm9udC1zaXplOiA0NXB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDE4ZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDQ4cHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtZGlzcGxheTE6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwoKICAgICAgICBmb250LXNpemU6IDM0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLS4wMWVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiA0MHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LWhlYWRsaW5lOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKCiAgICAgICAgZm9udC1zaXplOiAyNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDEyZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDMycHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtdGl0bGU6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLW5vd3JhcDsKCiAgICAgICAgZm9udC1zaXplOiAyMHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDI4cHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtc3ViaGVhZDogewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CgogICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyNHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LWJvZHkyOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKCiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDI0cHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtYm9keTE6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwoKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBsaW5lLWhlaWdodDogMjBweDsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1jYXB0aW9uOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1ub3dyYXA7CgogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjAxMWVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LW1lbnU6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLW5vd3JhcDsKCiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDI0cHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtYnV0dG9uOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1ub3dyYXA7CgogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjAxOGVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyNHB4OwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtY29kZTI6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1jb2RlOwoKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgICAgICBsaW5lLWhlaWdodDogMjBweDsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1jb2RlMTogewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWNvZGU7CgogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgICB9OwoKICAgIH0KCiAgPC9zdHlsZT4KPC9jdXN0b20tc3R5bGU+YDtQYS5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZGlzcGxheTogbm9uZTsiKSxkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKFBhLmNvbnRlbnQpOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KY29uc3QgTmE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtOYS5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZGlzcGxheTogbm9uZTsiKSxOYS5pbm5lckhUTUw9Jzxkb20tbW9kdWxlIGlkPSJwYXBlci1kaWFsb2ctc2hhcmVkLXN0eWxlcyI+XG4gIDx0ZW1wbGF0ZT5cbiAgICA8c3R5bGU+XG4gICAgICA6aG9zdCB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBtYXJnaW46IDI0cHggNDBweDtcblxuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1wYXBlci1kaWFsb2ctYmFja2dyb3VuZC1jb2xvciwgdmFyKC0tcHJpbWFyeS1iYWNrZ3JvdW5kLWNvbG9yKSk7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1kaWFsb2ctY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpO1xuXG4gICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtYm9keTE7XG4gICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tMTZkcDtcbiAgICAgICAgQGFwcGx5IC0tcGFwZXItZGlhbG9nO1xuICAgICAgfVxuXG4gICAgICA6aG9zdCA+IDo6c2xvdHRlZCgqKSB7XG4gICAgICAgIG1hcmdpbi10b3A6IDIwcHg7XG4gICAgICAgIHBhZGRpbmc6IDAgMjRweDtcbiAgICAgIH1cblxuICAgICAgOmhvc3QgPiA6OnNsb3R0ZWQoLm5vLXBhZGRpbmcpIHtcbiAgICAgICAgcGFkZGluZzogMDtcbiAgICAgIH1cblxuICAgICAgXG4gICAgICA6aG9zdCA+IDo6c2xvdHRlZCgqOmZpcnN0LWNoaWxkKSB7XG4gICAgICAgIG1hcmdpbi10b3A6IDI0cHg7XG4gICAgICB9XG5cbiAgICAgIDpob3N0ID4gOjpzbG90dGVkKCo6bGFzdC1jaGlsZCkge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4O1xuICAgICAgfVxuXG4gICAgICAvKiBJbiAxLngsIHRoaXMgc2VsZWN0b3Igd2FzIGA6aG9zdCA+IDo6Y29udGVudCBoMmAuIEluIDIueCA8c2xvdD4gYWxsb3dzXG4gICAgICB0byBzZWxlY3QgZGlyZWN0IGNoaWxkcmVuIG9ubHksIHdoaWNoIGluY3JlYXNlcyB0aGUgd2VpZ2h0IG9mIHRoaXNcbiAgICAgIHNlbGVjdG9yLCBzbyB3ZSBoYXZlIHRvIHJlLWRlZmluZSBmaXJzdC1jaGlsZC9sYXN0LWNoaWxkIG1hcmdpbnMgYmVsb3cuICovXG4gICAgICA6aG9zdCA+IDo6c2xvdHRlZChoMikge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIG1hcmdpbjogMDtcblxuICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LXRpdGxlO1xuICAgICAgICBAYXBwbHkgLS1wYXBlci1kaWFsb2ctdGl0bGU7XG4gICAgICB9XG5cbiAgICAgIC8qIEFwcGx5IG1peGluIGFnYWluLCBpbiBjYXNlIGl0IHNldHMgbWFyZ2luLXRvcC4gKi9cbiAgICAgIDpob3N0ID4gOjpzbG90dGVkKGgyOmZpcnN0LWNoaWxkKSB7XG4gICAgICAgIG1hcmdpbi10b3A6IDI0cHg7XG4gICAgICAgIEBhcHBseSAtLXBhcGVyLWRpYWxvZy10aXRsZTtcbiAgICAgIH1cblxuICAgICAgLyogQXBwbHkgbWl4aW4gYWdhaW4sIGluIGNhc2UgaXQgc2V0cyBtYXJnaW4tYm90dG9tLiAqL1xuICAgICAgOmhvc3QgPiA6OnNsb3R0ZWQoaDI6bGFzdC1jaGlsZCkge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4O1xuICAgICAgICBAYXBwbHkgLS1wYXBlci1kaWFsb2ctdGl0bGU7XG4gICAgICB9XG5cbiAgICAgIDpob3N0ID4gOjpzbG90dGVkKC5wYXBlci1kaWFsb2ctYnV0dG9ucyksXG4gICAgICA6aG9zdCA+IDo6c2xvdHRlZCguYnV0dG9ucykge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIHBhZGRpbmc6IDhweCA4cHggOHB4IDI0cHg7XG4gICAgICAgIG1hcmdpbjogMDtcblxuICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItZGlhbG9nLWJ1dHRvbi1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpO1xuXG4gICAgICAgIEBhcHBseSAtLWxheW91dC1ob3Jpem9udGFsO1xuICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZW5kLWp1c3RpZmllZDtcbiAgICAgIH1cbiAgICA8L3N0eWxlPlxuICA8L3RlbXBsYXRlPlxuPC9kb20tbW9kdWxlPicsZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChOYS5jb250ZW50KTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCmNvbnN0IElhPVt7cHJvcGVydGllczp7YW5pbWF0aW9uQ29uZmlnOnt0eXBlOk9iamVjdH0sZW50cnlBbmltYXRpb246e29ic2VydmVyOiJfZW50cnlBbmltYXRpb25DaGFuZ2VkIix0eXBlOlN0cmluZ30sZXhpdEFuaW1hdGlvbjp7b2JzZXJ2ZXI6Il9leGl0QW5pbWF0aW9uQ2hhbmdlZCIsdHlwZTpTdHJpbmd9fSxfZW50cnlBbmltYXRpb25DaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5hbmltYXRpb25Db25maWc9dGhpcy5hbmltYXRpb25Db25maWd8fHt9LHRoaXMuYW5pbWF0aW9uQ29uZmlnLmVudHJ5PVt7bmFtZTp0aGlzLmVudHJ5QW5pbWF0aW9uLG5vZGU6dGhpc31dfSxfZXhpdEFuaW1hdGlvbkNoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLmFuaW1hdGlvbkNvbmZpZz10aGlzLmFuaW1hdGlvbkNvbmZpZ3x8e30sdGhpcy5hbmltYXRpb25Db25maWcuZXhpdD1be25hbWU6dGhpcy5leGl0QW5pbWF0aW9uLG5vZGU6dGhpc31dfSxfY29weVByb3BlcnRpZXM6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG4gaW4gZSl0W25dPWVbbl19LF9jbG9uZUNvbmZpZzpmdW5jdGlvbih0KXt2YXIgZT17aXNDbG9uZTohMH07cmV0dXJuIHRoaXMuX2NvcHlQcm9wZXJ0aWVzKGUsdCksZX0sX2dldEFuaW1hdGlvbkNvbmZpZ1JlY3Vyc2l2ZTpmdW5jdGlvbih0LGUsbil7dmFyIGk7aWYodGhpcy5hbmltYXRpb25Db25maWcpaWYodGhpcy5hbmltYXRpb25Db25maWcudmFsdWUmJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLmFuaW1hdGlvbkNvbmZpZy52YWx1ZSl0aGlzLl93YXJuKHRoaXMuX2xvZ2YoInBsYXlBbmltYXRpb24iLCJQbGVhc2UgcHV0ICdhbmltYXRpb25Db25maWcnIGluc2lkZSBvZiB5b3VyIGNvbXBvbmVudHMgJ3Byb3BlcnRpZXMnIG9iamVjdCBpbnN0ZWFkIG9mIG91dHNpZGUgb2YgaXQuIikpO2Vsc2UgaWYoaT10P3RoaXMuYW5pbWF0aW9uQ29uZmlnW3RdOnRoaXMuYW5pbWF0aW9uQ29uZmlnLEFycmF5LmlzQXJyYXkoaSl8fChpPVtpXSksaSlmb3IodmFyIHIsbz0wO3I9aVtvXTtvKyspaWYoci5hbmltYXRhYmxlKXIuYW5pbWF0YWJsZS5fZ2V0QW5pbWF0aW9uQ29uZmlnUmVjdXJzaXZlKHIudHlwZXx8dCxlLG4pO2Vsc2UgaWYoci5pZCl7dmFyIGE9ZVtyLmlkXTthPyhhLmlzQ2xvbmV8fChlW3IuaWRdPXRoaXMuX2Nsb25lQ29uZmlnKGEpLGE9ZVtyLmlkXSksdGhpcy5fY29weVByb3BlcnRpZXMoYSxyKSk6ZVtyLmlkXT1yfWVsc2Ugbi5wdXNoKHIpfSxnZXRBbmltYXRpb25Db25maWc6ZnVuY3Rpb24odCl7dmFyIGU9e30sbj1bXTtmb3IodmFyIGkgaW4gdGhpcy5fZ2V0QW5pbWF0aW9uQ29uZmlnUmVjdXJzaXZlKHQsZSxuKSxlKW4ucHVzaChlW2ldKTtyZXR1cm4gbn19LHtfY29uZmlndXJlQW5pbWF0aW9uczpmdW5jdGlvbih0KXt2YXIgZT1bXSxuPVtdO2lmKHQubGVuZ3RoPjApZm9yKGxldCBlLGk9MDtlPXRbaV07aSsrKXtsZXQgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGUubmFtZSk7aWYodC5pc05lb25BbmltYXRpb24pe2xldCBpPW51bGw7dC5jb25maWd1cmV8fCh0LmNvbmZpZ3VyZT1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbH0pLGk9dC5jb25maWd1cmUoZSksbi5wdXNoKHtyZXN1bHQ6aSxjb25maWc6ZSxuZW9uQW5pbWF0aW9uOnR9KX1lbHNlIGNvbnNvbGUud2Fybih0aGlzLmlzKyI6IixlLm5hbWUsIm5vdCBmb3VuZCEiKX1mb3IodmFyIGk9MDtpPG4ubGVuZ3RoO2krKyl7bGV0IHQ9bltpXS5yZXN1bHQscj1uW2ldLmNvbmZpZyxvPW5baV0ubmVvbkFuaW1hdGlvbjt0cnl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQuY2FuY2VsJiYodD1kb2N1bWVudC50aW1lbGluZS5wbGF5KHQpKX1jYXRjaChlKXt0PW51bGwsY29uc29sZS53YXJuKCJDb3VsZG50IHBsYXkiLCIoIixyLm5hbWUsIikuIixlKX10JiZlLnB1c2goe25lb25BbmltYXRpb246byxjb25maWc6cixhbmltYXRpb246dH0pfXJldHVybiBlfSxfc2hvdWxkQ29tcGxldGU6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPSEwLG49MDtuPHQubGVuZ3RoO24rKylpZigiZmluaXNoZWQiIT10W25dLmFuaW1hdGlvbi5wbGF5U3RhdGUpe2U9ITE7YnJlYWt9cmV0dXJuIGV9LF9jb21wbGV0ZTpmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl0W2VdLm5lb25BbmltYXRpb24uY29tcGxldGUodFtlXS5jb25maWcpO2ZvcihlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXS5hbmltYXRpb24uY2FuY2VsKCl9LHBsYXlBbmltYXRpb246ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLmdldEFuaW1hdGlvbkNvbmZpZyh0KTtpZihuKXt0aGlzLl9hY3RpdmU9dGhpcy5fYWN0aXZlfHx7fSx0aGlzLl9hY3RpdmVbdF0mJih0aGlzLl9jb21wbGV0ZSh0aGlzLl9hY3RpdmVbdF0pLGRlbGV0ZSB0aGlzLl9hY3RpdmVbdF0pO3ZhciBpPXRoaXMuX2NvbmZpZ3VyZUFuaW1hdGlvbnMobik7aWYoMCE9aS5sZW5ndGgpe3RoaXMuX2FjdGl2ZVt0XT1pO2Zvcih2YXIgcj0wO3I8aS5sZW5ndGg7cisrKWlbcl0uYW5pbWF0aW9uLm9uZmluaXNoPWZ1bmN0aW9uKCl7dGhpcy5fc2hvdWxkQ29tcGxldGUoaSkmJih0aGlzLl9jb21wbGV0ZShpKSxkZWxldGUgdGhpcy5fYWN0aXZlW3RdLHRoaXMuZmlyZSgibmVvbi1hbmltYXRpb24tZmluaXNoIixlLHtidWJibGVzOiExfSkpfS5iaW5kKHRoaXMpfWVsc2UgdGhpcy5maXJlKCJuZW9uLWFuaW1hdGlvbi1maW5pc2giLGUse2J1YmJsZXM6ITF9KX19LGNhbmNlbEFuaW1hdGlvbjpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLl9hY3RpdmUpe3ZhciBlPXRoaXMuX2FjdGl2ZVt0XTtmb3IodmFyIG4gaW4gZSllW25dLmFuaW1hdGlvbi5jYW5jZWwoKX10aGlzLl9hY3RpdmU9e319fV07Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KSXIoe190ZW1wbGF0ZTpfZWAKICAgIDxzdHlsZSBpbmNsdWRlPSJwYXBlci1kaWFsb2ctc2hhcmVkLXN0eWxlcyI+PC9zdHlsZT4KICAgIDxzbG90Pjwvc2xvdD4KYCxpczoicGFwZXItZGlhbG9nIixiZWhhdmlvcnM6W0xhLElhXSxsaXN0ZW5lcnM6eyJuZW9uLWFuaW1hdGlvbi1maW5pc2giOiJfb25OZW9uQW5pbWF0aW9uRmluaXNoIn0sX3JlbmRlck9wZW5lZDpmdW5jdGlvbigpe3RoaXMuY2FuY2VsQW5pbWF0aW9uKCksdGhpcy5wbGF5QW5pbWF0aW9uKCJlbnRyeSIpfSxfcmVuZGVyQ2xvc2VkOmZ1bmN0aW9uKCl7dGhpcy5jYW5jZWxBbmltYXRpb24oKSx0aGlzLnBsYXlBbmltYXRpb24oImV4aXQiKX0sX29uTmVvbkFuaW1hdGlvbkZpbmlzaDpmdW5jdGlvbigpe3RoaXMub3BlbmVkP3RoaXMuX2ZpbmlzaFJlbmRlck9wZW5lZCgpOnRoaXMuX2ZpbmlzaFJlbmRlckNsb3NlZCgpfX0pOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KY29uc3QgT2E9SXIoe190ZW1wbGF0ZTpfZWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgY2xpcDogcmVjdCgwcHgsMHB4LDBweCwwcHgpOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPGRpdiBhcmlhLWxpdmUkPSJbW21vZGVdXSI+W1tfdGV4dF1dPC9kaXY+CmAsaXM6Imlyb24tYTExeS1hbm5vdW5jZXIiLHByb3BlcnRpZXM6e21vZGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJwb2xpdGUifSx0aW1lb3V0Ont0eXBlOk51bWJlcix2YWx1ZToxNTB9LF90ZXh0Ont0eXBlOlN0cmluZyx2YWx1ZToiIn19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXtPYS5pbnN0YW5jZXx8KE9hLmluc3RhbmNlPXRoaXMpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImlyb24tYW5ub3VuY2UiLHRoaXMuX29uSXJvbkFubm91bmNlLmJpbmQodGhpcykpfSxhbm5vdW5jZTpmdW5jdGlvbih0KXt0aGlzLl90ZXh0PSIiLHRoaXMuYXN5bmMoKGZ1bmN0aW9uKCl7dGhpcy5fdGV4dD10fSksdGhpcy50aW1lb3V0KX0sX29uSXJvbkFubm91bmNlOmZ1bmN0aW9uKHQpe3QuZGV0YWlsJiZ0LmRldGFpbC50ZXh0JiZ0aGlzLmFubm91bmNlKHQuZGV0YWlsLnRleHQpfX0pO09hLmluc3RhbmNlPW51bGwsT2EucmVxdWVzdEF2YWlsYWJpbGl0eT1mdW5jdGlvbigpe09hLmluc3RhbmNlfHwoT2EuaW5zdGFuY2U9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaXJvbi1hMTF5LWFubm91bmNlciIpKSxkb2N1bWVudC5ib2R5P2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoT2EuaW5zdGFuY2UpOmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLChmdW5jdGlvbigpe2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoT2EuaW5zdGFuY2UpfSkpfSwKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCklyKHtfdGVtcGxhdGU6X2VgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8c2xvdCBpZD0iY29udGVudCI+PC9zbG90PgpgLGlzOiJpcm9uLWlucHV0IixiZWhhdmlvcnM6W29hXSxwcm9wZXJ0aWVzOntiaW5kVmFsdWU6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSx2YWx1ZTp7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6Il9jb21wdXRlVmFsdWUoYmluZFZhbHVlKSJ9LGFsbG93ZWRQYXR0ZXJuOnt0eXBlOlN0cmluZ30sYXV0b1ZhbGlkYXRlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9pbnB1dEVsZW1lbnQ6T2JqZWN0fSxvYnNlcnZlcnM6WyJfYmluZFZhbHVlQ2hhbmdlZChiaW5kVmFsdWUsIF9pbnB1dEVsZW1lbnQpIl0sbGlzdGVuZXJzOntpbnB1dDoiX29uSW5wdXQiLGtleXByZXNzOiJfb25LZXlwcmVzcyJ9LGNyZWF0ZWQ6ZnVuY3Rpb24oKXtPYS5yZXF1ZXN0QXZhaWxhYmlsaXR5KCksdGhpcy5fcHJldmlvdXNWYWxpZElucHV0PSIiLHRoaXMuX3BhdHRlcm5BbHJlYWR5Q2hlY2tlZD0hMX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9vYnNlcnZlcj1xaSh0aGlzKS5vYnNlcnZlTm9kZXMoZnVuY3Rpb24odCl7dGhpcy5faW5pdFNsb3R0ZWRJbnB1dCgpfS5iaW5kKHRoaXMpKX0sZGV0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9vYnNlcnZlciYmKHFpKHRoaXMpLnVub2JzZXJ2ZU5vZGVzKHRoaXMuX29ic2VydmVyKSx0aGlzLl9vYnNlcnZlcj1udWxsKX0sZ2V0IGlucHV0RWxlbWVudCgpe3JldHVybiB0aGlzLl9pbnB1dEVsZW1lbnR9LF9pbml0U2xvdHRlZElucHV0OmZ1bmN0aW9uKCl7dGhpcy5faW5wdXRFbGVtZW50PXRoaXMuZ2V0RWZmZWN0aXZlQ2hpbGRyZW4oKVswXSx0aGlzLmlucHV0RWxlbWVudCYmdGhpcy5pbnB1dEVsZW1lbnQudmFsdWUmJih0aGlzLmJpbmRWYWx1ZT10aGlzLmlucHV0RWxlbWVudC52YWx1ZSksdGhpcy5maXJlKCJpcm9uLWlucHV0LXJlYWR5Iil9LGdldCBfcGF0dGVyblJlZ0V4cCgpe3ZhciB0O2lmKHRoaXMuYWxsb3dlZFBhdHRlcm4pdD1uZXcgUmVnRXhwKHRoaXMuYWxsb3dlZFBhdHRlcm4pO2Vsc2Ugc3dpdGNoKHRoaXMuaW5wdXRFbGVtZW50LnR5cGUpe2Nhc2UibnVtYmVyIjp0PS9bMC05LixlLV0vfXJldHVybiB0fSxfYmluZFZhbHVlQ2hhbmdlZDpmdW5jdGlvbih0LGUpe2UmJih2b2lkIDA9PT10P2UudmFsdWU9bnVsbDp0IT09ZS52YWx1ZSYmKHRoaXMuaW5wdXRFbGVtZW50LnZhbHVlPXQpLHRoaXMuYXV0b1ZhbGlkYXRlJiZ0aGlzLnZhbGlkYXRlKCksdGhpcy5maXJlKCJiaW5kLXZhbHVlLWNoYW5nZWQiLHt2YWx1ZTp0fSkpfSxfb25JbnB1dDpmdW5jdGlvbigpe3RoaXMuYWxsb3dlZFBhdHRlcm4mJiF0aGlzLl9wYXR0ZXJuQWxyZWFkeUNoZWNrZWQmJih0aGlzLl9jaGVja1BhdHRlcm5WYWxpZGl0eSgpfHwodGhpcy5fYW5ub3VuY2VJbnZhbGlkQ2hhcmFjdGVyKCJJbnZhbGlkIHN0cmluZyBvZiBjaGFyYWN0ZXJzIG5vdCBlbnRlcmVkLiIpLHRoaXMuaW5wdXRFbGVtZW50LnZhbHVlPXRoaXMuX3ByZXZpb3VzVmFsaWRJbnB1dCkpLHRoaXMuYmluZFZhbHVlPXRoaXMuX3ByZXZpb3VzVmFsaWRJbnB1dD10aGlzLmlucHV0RWxlbWVudC52YWx1ZSx0aGlzLl9wYXR0ZXJuQWxyZWFkeUNoZWNrZWQ9ITF9LF9pc1ByaW50YWJsZTpmdW5jdGlvbih0KXtyZXR1cm4hKDg9PXQua2V5Q29kZXx8OT09dC5rZXlDb2RlfHwxMz09dC5rZXlDb2RlfHwyNz09dC5rZXlDb2RlfHwwPT10LmNoYXJDb2RlJiYoMTk9PXQua2V5Q29kZXx8MjA9PXQua2V5Q29kZXx8NDU9PXQua2V5Q29kZXx8NDY9PXQua2V5Q29kZXx8MTQ0PT10LmtleUNvZGV8fDE0NT09dC5rZXlDb2RlfHx0LmtleUNvZGU+MzImJnQua2V5Q29kZTw0MXx8dC5rZXlDb2RlPjExMSYmdC5rZXlDb2RlPDEyNCkpfSxfb25LZXlwcmVzczpmdW5jdGlvbih0KXtpZih0aGlzLmFsbG93ZWRQYXR0ZXJufHwibnVtYmVyIj09PXRoaXMuaW5wdXRFbGVtZW50LnR5cGUpe3ZhciBlPXRoaXMuX3BhdHRlcm5SZWdFeHA7aWYoZSYmISh0Lm1ldGFLZXl8fHQuY3RybEtleXx8dC5hbHRLZXkpKXt0aGlzLl9wYXR0ZXJuQWxyZWFkeUNoZWNrZWQ9ITA7dmFyIG49U3RyaW5nLmZyb21DaGFyQ29kZSh0LmNoYXJDb2RlKTt0aGlzLl9pc1ByaW50YWJsZSh0KSYmIWUudGVzdChuKSYmKHQucHJldmVudERlZmF1bHQoKSx0aGlzLl9hbm5vdW5jZUludmFsaWRDaGFyYWN0ZXIoIkludmFsaWQgY2hhcmFjdGVyICIrbisiIG5vdCBlbnRlcmVkLiIpKX19fSxfY2hlY2tQYXR0ZXJuVmFsaWRpdHk6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9wYXR0ZXJuUmVnRXhwO2lmKCF0KXJldHVybiEwO2Zvcih2YXIgZT0wO2U8dGhpcy5pbnB1dEVsZW1lbnQudmFsdWUubGVuZ3RoO2UrKylpZighdC50ZXN0KHRoaXMuaW5wdXRFbGVtZW50LnZhbHVlW2VdKSlyZXR1cm4hMTtyZXR1cm4hMH0sdmFsaWRhdGU6ZnVuY3Rpb24oKXtpZighdGhpcy5pbnB1dEVsZW1lbnQpcmV0dXJuIHRoaXMuaW52YWxpZD0hMSwhMDt2YXIgdD10aGlzLmlucHV0RWxlbWVudC5jaGVja1ZhbGlkaXR5KCk7cmV0dXJuIHQmJih0aGlzLnJlcXVpcmVkJiYiIj09PXRoaXMuYmluZFZhbHVlP3Q9ITE6dGhpcy5oYXNWYWxpZGF0b3IoKSYmKHQ9b2EudmFsaWRhdGUuY2FsbCh0aGlzLHRoaXMuYmluZFZhbHVlKSkpLHRoaXMuaW52YWxpZD0hdCx0aGlzLmZpcmUoImlyb24taW5wdXQtdmFsaWRhdGUiKSx0fSxfYW5ub3VuY2VJbnZhbGlkQ2hhcmFjdGVyOmZ1bmN0aW9uKHQpe3RoaXMuZmlyZSgiaXJvbi1hbm5vdW5jZSIse3RleHQ6dH0pfSxfY29tcHV0ZVZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0fX0pOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KY29uc3QgUmE9e2F0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5maXJlKCJhZGRvbi1hdHRhY2hlZCIpfSx1cGRhdGU6ZnVuY3Rpb24odCl7fX07Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqL0lyKHtfdGVtcGxhdGU6X2VgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNhcHRpb247CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY2hhci1jb3VudGVyOwogICAgICB9CgogICAgICA6aG9zdChbaGlkZGVuXSkgewogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgOmhvc3QoOmRpcihydGwpKSB7CiAgICAgICAgZmxvYXQ6IGxlZnQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHNwYW4+W1tfY2hhckNvdW50ZXJTdHJdXTwvc3Bhbj4KYCxpczoicGFwZXItaW5wdXQtY2hhci1jb3VudGVyIixiZWhhdmlvcnM6W1JhXSxwcm9wZXJ0aWVzOntfY2hhckNvdW50ZXJTdHI6e3R5cGU6U3RyaW5nLHZhbHVlOiIwIn19LHVwZGF0ZTpmdW5jdGlvbih0KXtpZih0LmlucHV0RWxlbWVudCl7dC52YWx1ZT10LnZhbHVlfHwiIjt2YXIgZT10LnZhbHVlLnRvU3RyaW5nKCkubGVuZ3RoLnRvU3RyaW5nKCk7dC5pbnB1dEVsZW1lbnQuaGFzQXR0cmlidXRlKCJtYXhsZW5ndGgiKSYmKGUrPSIvIit0LmlucHV0RWxlbWVudC5nZXRBdHRyaWJ1dGUoIm1heGxlbmd0aCIpKSx0aGlzLl9jaGFyQ291bnRlclN0cj1lfX19KTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCmNvbnN0IHphPV9lYAo8Y3VzdG9tLXN0eWxlPgogIDxzdHlsZSBpcz0iY3VzdG9tLXN0eWxlIj4KICAgIGh0bWwgewogICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1zaGFyZWQtaW5wdXQtc3R5bGU6IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7IC8qIHRvIG1ha2UgYSBzdGFja2luZyBjb250ZXh0ICovCiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBib3gtc2hhZG93OiBub25lOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIG1heC13aWR0aDogMTAwJTsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dC1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CiAgICAgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOwogICAgICAgIHRleHQtYWxpZ246IGluaGVyaXQ7CiAgICAgICAgdmVydGljYWwtYWxpZ246IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dC1hbGlnbiwgYm90dG9tKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1zdWJoZWFkOwogICAgICB9OwogICAgfQogIDwvc3R5bGU+CjwvY3VzdG9tLXN0eWxlPgpgO3phLnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoemEuY29udGVudCksSXIoe190ZW1wbGF0ZTpfZWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmc6IDhweCAwOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lcjsKICAgICAgfQoKICAgICAgOmhvc3QoW2lubGluZV0pIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBvcGFjaXR5OiAwLjMzOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItZGlzYWJsZWQ7CiAgICAgIH0KCiAgICAgIDpob3N0KFtoaWRkZW5dKSB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICBbaGlkZGVuXSB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAuZmxvYXRlZC1sYWJlbC1wbGFjZWhvbGRlciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jYXB0aW9uOwogICAgICB9CgogICAgICAudW5kZXJsaW5lIHsKICAgICAgICBoZWlnaHQ6IDJweDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5mb2N1c2VkLWxpbmUgewogICAgICAgIEBhcHBseSAtLWxheW91dC1maXQ7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1mb2N1cy1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwoKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IGNlbnRlciBjZW50ZXI7CiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyIGNlbnRlcjsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUzZCgwLDEsMSk7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZTNkKDAsMSwxKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLXVuZGVybGluZS1mb2N1czsKICAgICAgfQoKICAgICAgLnVuZGVybGluZS5pcy1oaWdobGlnaHRlZCAuZm9jdXNlZC1saW5lIHsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogbm9uZTsKICAgICAgICB0cmFuc2Zvcm06IG5vbmU7CiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAwLjI1czsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4yNXM7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRyYW5zaXRpb24tZWFzaW5nOwogICAgICB9CgogICAgICAudW5kZXJsaW5lLmlzLWludmFsaWQgLmZvY3VzZWQtbGluZSB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItaW52YWxpZC1jb2xvciwgdmFyKC0tZXJyb3ItY29sb3IpKTsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogbm9uZTsKICAgICAgICB0cmFuc2Zvcm06IG5vbmU7CiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAwLjI1czsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4yNXM7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRyYW5zaXRpb24tZWFzaW5nOwogICAgICB9CgogICAgICAudW5mb2N1c2VkLWxpbmUgewogICAgICAgIEBhcHBseSAtLWxheW91dC1maXQ7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvciwgdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpKTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItdW5kZXJsaW5lOwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAudW5mb2N1c2VkLWxpbmUgewogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBkYXNoZWQ7CiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItY29sb3IsIHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKSk7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLXVuZGVybGluZS1kaXNhYmxlZDsKICAgICAgfQoKICAgICAgLmlucHV0LXdyYXBwZXIgewogICAgICAgIEBhcHBseSAtLWxheW91dC1ob3Jpem9udGFsOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXgtYXV0bzsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtcmVsYXRpdmU7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQobGFiZWwpLAogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQoLnBhcGVyLWlucHV0LWxhYmVsKSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGZvbnQ6IGluaGVyaXQ7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvciwgdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpKTsKICAgICAgICAtd2Via2l0LXRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIDAuMjVzLCB3aWR0aCAwLjI1czsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4yNXMsIHdpZHRoIDAuMjVzOwogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogbGVmdCB0b3A7CiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogbGVmdCB0b3A7CiAgICAgICAgLyogRml4IGZvciBzYWZhcmkgbm90IGZvY3VzaW5nIDAtaGVpZ2h0IGRhdGUvdGltZSBpbnB1dHMgd2l0aCAtd2Via2l0LWFwcGVyYW5jZTogbm9uZTsgKi8KICAgICAgICBtaW4taGVpZ2h0OiAxcHg7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLW5vd3JhcDsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LXN1YmhlYWQ7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRyYW5zaXRpb24tZWFzaW5nOwogICAgICB9CgoKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKGxhYmVsKTpiZWZvcmUsCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZCgucGFwZXItaW5wdXQtbGFiZWwpOmJlZm9yZSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsLWJlZm9yZTsKICAgICAgfQoKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKGxhYmVsKTphZnRlciwKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKC5wYXBlci1pbnB1dC1sYWJlbCk6YWZ0ZXIgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1sYWJlbC1hZnRlcjsKICAgICAgfQoKICAgICAgLmlucHV0LWNvbnRlbnQubGFiZWwtaXMtZmxvYXRpbmcgOjpzbG90dGVkKGxhYmVsKSwKICAgICAgLmlucHV0LWNvbnRlbnQubGFiZWwtaXMtZmxvYXRpbmcgOjpzbG90dGVkKC5wYXBlci1pbnB1dC1sYWJlbCkgewogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC03NSUpIHNjYWxlKDAuNzUpOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNzUlKSBzY2FsZSgwLjc1KTsKCiAgICAgICAgLyogU2luY2Ugd2Ugc2NhbGUgdG8gNzUvMTAwIG9mIHRoZSBzaXplLCB3ZSBhY3R1YWxseSBoYXZlIDEwMC83NSBvZiB0aGUKICAgICAgICBvcmlnaW5hbCBzcGFjZSBub3cgYXZhaWxhYmxlICovCiAgICAgICAgd2lkdGg6IDEzMyU7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1sYWJlbC1mbG9hdGluZzsKICAgICAgfQoKICAgICAgOmhvc3QoOmRpcihydGwpKSAuaW5wdXQtY29udGVudC5sYWJlbC1pcy1mbG9hdGluZyA6OnNsb3R0ZWQobGFiZWwpLAogICAgICA6aG9zdCg6ZGlyKHJ0bCkpIC5pbnB1dC1jb250ZW50LmxhYmVsLWlzLWZsb2F0aW5nIDo6c2xvdHRlZCgucGFwZXItaW5wdXQtbGFiZWwpIHsKICAgICAgICByaWdodDogMDsKICAgICAgICBsZWZ0OiBhdXRvOwogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogcmlnaHQgdG9wOwogICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IHJpZ2h0IHRvcDsKICAgICAgfQoKICAgICAgLmlucHV0LWNvbnRlbnQubGFiZWwtaXMtaGlnaGxpZ2h0ZWQgOjpzbG90dGVkKGxhYmVsKSwKICAgICAgLmlucHV0LWNvbnRlbnQubGFiZWwtaXMtaGlnaGxpZ2h0ZWQgOjpzbG90dGVkKC5wYXBlci1pbnB1dC1sYWJlbCkgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItZm9jdXMtY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsLWZvY3VzOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudC5pcy1pbnZhbGlkIDo6c2xvdHRlZChsYWJlbCksCiAgICAgIC5pbnB1dC1jb250ZW50LmlzLWludmFsaWQgOjpzbG90dGVkKC5wYXBlci1pbnB1dC1sYWJlbCkgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItaW52YWxpZC1jb2xvciwgdmFyKC0tZXJyb3ItY29sb3IpKTsKICAgICAgfQoKICAgICAgLmlucHV0LWNvbnRlbnQubGFiZWwtaXMtaGlkZGVuIDo6c2xvdHRlZChsYWJlbCksCiAgICAgIC5pbnB1dC1jb250ZW50LmxhYmVsLWlzLWhpZGRlbiA6OnNsb3R0ZWQoLnBhcGVyLWlucHV0LWxhYmVsKSB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQoaW5wdXQpLAogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQoaXJvbi1pbnB1dCksCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZCh0ZXh0YXJlYSksCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZChpcm9uLWF1dG9ncm93LXRleHRhcmVhKSwKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKC5wYXBlci1pbnB1dC1pbnB1dCkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1zaGFyZWQtaW5wdXQtc3R5bGU7CiAgICAgICAgLyogVGhlIGFwcGx5IHNoaW0gZG9lc24ndCBhcHBseSB0aGUgbmVzdGVkIGNvbG9yIGN1c3RvbSBwcm9wZXJ0eSwKICAgICAgICAgIHNvIHdlIGhhdmUgdG8gcmUtYXBwbHkgaXQgaGVyZS4gKi8KICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQ7CiAgICAgIH0KCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZChpbnB1dCk6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24sCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZChpbnB1dCk6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24gewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dC13ZWJraXQtc3Bpbm5lcjsKICAgICAgfQoKICAgICAgLmlucHV0LWNvbnRlbnQuZm9jdXNlZCA6OnNsb3R0ZWQoaW5wdXQpLAogICAgICAuaW5wdXQtY29udGVudC5mb2N1c2VkIDo6c2xvdHRlZChpcm9uLWlucHV0KSwKICAgICAgLmlucHV0LWNvbnRlbnQuZm9jdXNlZCA6OnNsb3R0ZWQodGV4dGFyZWEpLAogICAgICAuaW5wdXQtY29udGVudC5mb2N1c2VkIDo6c2xvdHRlZChpcm9uLWF1dG9ncm93LXRleHRhcmVhKSwKICAgICAgLmlucHV0LWNvbnRlbnQuZm9jdXNlZCA6OnNsb3R0ZWQoLnBhcGVyLWlucHV0LWlucHV0KSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LWZvY3VzOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudC5pcy1pbnZhbGlkIDo6c2xvdHRlZChpbnB1dCksCiAgICAgIC5pbnB1dC1jb250ZW50LmlzLWludmFsaWQgOjpzbG90dGVkKGlyb24taW5wdXQpLAogICAgICAuaW5wdXQtY29udGVudC5pcy1pbnZhbGlkIDo6c2xvdHRlZCh0ZXh0YXJlYSksCiAgICAgIC5pbnB1dC1jb250ZW50LmlzLWludmFsaWQgOjpzbG90dGVkKGlyb24tYXV0b2dyb3ctdGV4dGFyZWEpLAogICAgICAuaW5wdXQtY29udGVudC5pcy1pbnZhbGlkIDo6c2xvdHRlZCgucGFwZXItaW5wdXQtaW5wdXQpIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQtaW52YWxpZDsKICAgICAgfQoKICAgICAgLnByZWZpeCA6OnNsb3R0ZWQoKikgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LXN1YmhlYWQ7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXgtbm9uZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1wcmVmaXg7CiAgICAgIH0KCiAgICAgIC5zdWZmaXggOjpzbG90dGVkKCopIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1zdWJoZWFkOwogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4LW5vbmU7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LXN1ZmZpeDsKICAgICAgfQoKICAgICAgLyogRmlyZWZveCBzZXRzIGEgbWluLXdpZHRoIG9uIHRoZSBpbnB1dCwgd2hpY2ggY2FuIGNhdXNlIGxheW91dCBpc3N1ZXMgKi8KICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKGlucHV0KSB7CiAgICAgICAgbWluLXdpZHRoOiAwOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQodGV4dGFyZWEpIHsKICAgICAgICByZXNpemU6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5hZGQtb24tY29udGVudCB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAuYWRkLW9uLWNvbnRlbnQuaXMtaW52YWxpZCA6OnNsb3R0ZWQoKikgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItaW52YWxpZC1jb2xvciwgdmFyKC0tZXJyb3ItY29sb3IpKTsKICAgICAgfQoKICAgICAgLmFkZC1vbi1jb250ZW50LmlzLWhpZ2hsaWdodGVkIDo6c2xvdHRlZCgqKSB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1mb2N1cy1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgY2xhc3M9ImZsb2F0ZWQtbGFiZWwtcGxhY2Vob2xkZXIiIGFyaWEtaGlkZGVuPSJ0cnVlIiBoaWRkZW49Iltbbm9MYWJlbEZsb2F0XV0iPiZuYnNwOzwvZGl2PgoKICAgIDxkaXYgY2xhc3M9ImlucHV0LXdyYXBwZXIiPgogICAgICA8c3BhbiBjbGFzcz0icHJlZml4Ij48c2xvdCBuYW1lPSJwcmVmaXgiPjwvc2xvdD48L3NwYW4+CgogICAgICA8ZGl2IGNsYXNzJD0iW1tfY29tcHV0ZUlucHV0Q29udGVudENsYXNzKG5vTGFiZWxGbG9hdCxhbHdheXNGbG9hdExhYmVsLGZvY3VzZWQsaW52YWxpZCxfaW5wdXRIYXNDb250ZW50KV1dIiBpZD0ibGFiZWxBbmRJbnB1dENvbnRhaW5lciI+CiAgICAgICAgPHNsb3QgbmFtZT0ibGFiZWwiPjwvc2xvdD4KICAgICAgICA8c2xvdCBuYW1lPSJpbnB1dCI+PC9zbG90PgogICAgICA8L2Rpdj4KCiAgICAgIDxzcGFuIGNsYXNzPSJzdWZmaXgiPjxzbG90IG5hbWU9InN1ZmZpeCI+PC9zbG90Pjwvc3Bhbj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3MkPSJbW19jb21wdXRlVW5kZXJsaW5lQ2xhc3MoZm9jdXNlZCxpbnZhbGlkKV1dIj4KICAgICAgPGRpdiBjbGFzcz0idW5mb2N1c2VkLWxpbmUiPjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJmb2N1c2VkLWxpbmUiPjwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcyQ9IltbX2NvbXB1dGVBZGRPbkNvbnRlbnRDbGFzcyhmb2N1c2VkLGludmFsaWQpXV0iPgogICAgICA8c2xvdCBuYW1lPSJhZGQtb24iPjwvc2xvdD4KICAgIDwvZGl2PgpgLGlzOiJwYXBlci1pbnB1dC1jb250YWluZXIiLHByb3BlcnRpZXM6e25vTGFiZWxGbG9hdDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxhbHdheXNGbG9hdExhYmVsOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGF0dHJGb3JWYWx1ZTp7dHlwZTpTdHJpbmcsdmFsdWU6ImJpbmQtdmFsdWUifSxhdXRvVmFsaWRhdGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0saW52YWxpZDp7b2JzZXJ2ZXI6Il9pbnZhbGlkQ2hhbmdlZCIsdHlwZTpCb29sZWFuLHZhbHVlOiExfSxmb2N1c2VkOntyZWFkT25seTohMCx0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwfSxfYWRkb25zOnt0eXBlOkFycmF5fSxfaW5wdXRIYXNDb250ZW50Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9pbnB1dFNlbGVjdG9yOnt0eXBlOlN0cmluZyx2YWx1ZToiaW5wdXQsaXJvbi1pbnB1dCx0ZXh0YXJlYSwucGFwZXItaW5wdXQtaW5wdXQifSxfYm91bmRPbkZvY3VzOnt0eXBlOkZ1bmN0aW9uLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29uRm9jdXMuYmluZCh0aGlzKX19LF9ib3VuZE9uQmx1cjp7dHlwZTpGdW5jdGlvbix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vbkJsdXIuYmluZCh0aGlzKX19LF9ib3VuZE9uSW5wdXQ6e3R5cGU6RnVuY3Rpb24sdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb25JbnB1dC5iaW5kKHRoaXMpfX0sX2JvdW5kVmFsdWVDaGFuZ2VkOnt0eXBlOkZ1bmN0aW9uLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29uVmFsdWVDaGFuZ2VkLmJpbmQodGhpcyl9fX0sbGlzdGVuZXJzOnsiYWRkb24tYXR0YWNoZWQiOiJfb25BZGRvbkF0dGFjaGVkIiwiaXJvbi1pbnB1dC12YWxpZGF0ZSI6Il9vbklyb25JbnB1dFZhbGlkYXRlIn0sZ2V0IF92YWx1ZUNoYW5nZWRFdmVudCgpe3JldHVybiB0aGlzLmF0dHJGb3JWYWx1ZSsiLWNoYW5nZWQifSxnZXQgX3Byb3BlcnR5Rm9yVmFsdWUoKXtyZXR1cm4gc3QodGhpcy5hdHRyRm9yVmFsdWUpfSxnZXQgX2lucHV0RWxlbWVudCgpe3JldHVybiBxaSh0aGlzKS5xdWVyeVNlbGVjdG9yKHRoaXMuX2lucHV0U2VsZWN0b3IpfSxnZXQgX2lucHV0RWxlbWVudFZhbHVlKCl7cmV0dXJuIHRoaXMuX2lucHV0RWxlbWVudFt0aGlzLl9wcm9wZXJ0eUZvclZhbHVlXXx8dGhpcy5faW5wdXRFbGVtZW50LnZhbHVlfSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuX19pc0ZpcnN0VmFsdWVVcGRhdGU9ITAsdGhpcy5fYWRkb25zfHwodGhpcy5fYWRkb25zPVtdKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLl9ib3VuZE9uRm9jdXMsITApLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsdGhpcy5fYm91bmRPbkJsdXIsITApfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuYXR0ckZvclZhbHVlP3RoaXMuX2lucHV0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHRoaXMuX3ZhbHVlQ2hhbmdlZEV2ZW50LHRoaXMuX2JvdW5kVmFsdWVDaGFuZ2VkKTp0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0Iix0aGlzLl9vbklucHV0KSx0aGlzLl9pbnB1dEVsZW1lbnRWYWx1ZSYmIiIhPXRoaXMuX2lucHV0RWxlbWVudFZhbHVlP3RoaXMuX2hhbmRsZVZhbHVlQW5kQXV0b1ZhbGlkYXRlKHRoaXMuX2lucHV0RWxlbWVudCk6dGhpcy5faGFuZGxlVmFsdWUodGhpcy5faW5wdXRFbGVtZW50KX0sX29uQWRkb25BdHRhY2hlZDpmdW5jdGlvbih0KXt0aGlzLl9hZGRvbnN8fCh0aGlzLl9hZGRvbnM9W10pO3ZhciBlPXQudGFyZ2V0Oy0xPT09dGhpcy5fYWRkb25zLmluZGV4T2YoZSkmJih0aGlzLl9hZGRvbnMucHVzaChlKSx0aGlzLmlzQXR0YWNoZWQmJnRoaXMuX2hhbmRsZVZhbHVlKHRoaXMuX2lucHV0RWxlbWVudCkpfSxfb25Gb2N1czpmdW5jdGlvbigpe3RoaXMuX3NldEZvY3VzZWQoITApfSxfb25CbHVyOmZ1bmN0aW9uKCl7dGhpcy5fc2V0Rm9jdXNlZCghMSksdGhpcy5faGFuZGxlVmFsdWVBbmRBdXRvVmFsaWRhdGUodGhpcy5faW5wdXRFbGVtZW50KX0sX29uSW5wdXQ6ZnVuY3Rpb24odCl7dGhpcy5faGFuZGxlVmFsdWVBbmRBdXRvVmFsaWRhdGUodC50YXJnZXQpfSxfb25WYWx1ZUNoYW5nZWQ6ZnVuY3Rpb24odCl7dmFyIGU9dC50YXJnZXQ7dGhpcy5fX2lzRmlyc3RWYWx1ZVVwZGF0ZSYmKHRoaXMuX19pc0ZpcnN0VmFsdWVVcGRhdGU9ITEsdm9pZCAwPT09ZS52YWx1ZXx8IiI9PT1lLnZhbHVlKXx8dGhpcy5faGFuZGxlVmFsdWVBbmRBdXRvVmFsaWRhdGUodC50YXJnZXQpfSxfaGFuZGxlVmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5faW5wdXRFbGVtZW50VmFsdWU7dGhpcy5faW5wdXRIYXNDb250ZW50PSEoIWUmJjAhPT1lJiYoIm51bWJlciIhPT10LnR5cGV8fHQuY2hlY2tWYWxpZGl0eSgpKSksdGhpcy51cGRhdGVBZGRvbnMoe2lucHV0RWxlbWVudDp0LHZhbHVlOmUsaW52YWxpZDp0aGlzLmludmFsaWR9KX0sX2hhbmRsZVZhbHVlQW5kQXV0b1ZhbGlkYXRlOmZ1bmN0aW9uKHQpe3ZhciBlO3RoaXMuYXV0b1ZhbGlkYXRlJiZ0JiYoZT10LnZhbGlkYXRlP3QudmFsaWRhdGUodGhpcy5faW5wdXRFbGVtZW50VmFsdWUpOnQuY2hlY2tWYWxpZGl0eSgpLHRoaXMuaW52YWxpZD0hZSksdGhpcy5faGFuZGxlVmFsdWUodCl9LF9vbklyb25JbnB1dFZhbGlkYXRlOmZ1bmN0aW9uKHQpe3RoaXMuaW52YWxpZD10aGlzLl9pbnB1dEVsZW1lbnQuaW52YWxpZH0sX2ludmFsaWRDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5fYWRkb25zJiZ0aGlzLnVwZGF0ZUFkZG9ucyh7aW52YWxpZDp0aGlzLmludmFsaWR9KX0sdXBkYXRlQWRkb25zOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPTA7ZT10aGlzLl9hZGRvbnNbbl07bisrKWUudXBkYXRlKHQpfSxfY29tcHV0ZUlucHV0Q29udGVudENsYXNzOmZ1bmN0aW9uKHQsZSxuLGkscil7dmFyIG89ImlucHV0LWNvbnRlbnQiO2lmKHQpciYmKG8rPSIgbGFiZWwtaXMtaGlkZGVuIiksaSYmKG8rPSIgaXMtaW52YWxpZCIpO2Vsc2V7dmFyIGE9dGhpcy5xdWVyeVNlbGVjdG9yKCJsYWJlbCIpO2V8fHI/KG8rPSIgbGFiZWwtaXMtZmxvYXRpbmciLHRoaXMuJC5sYWJlbEFuZElucHV0Q29udGFpbmVyLnN0eWxlLnBvc2l0aW9uPSJzdGF0aWMiLGk/bys9IiBpcy1pbnZhbGlkIjpuJiYobys9IiBsYWJlbC1pcy1oaWdobGlnaHRlZCIpKTooYSYmKHRoaXMuJC5sYWJlbEFuZElucHV0Q29udGFpbmVyLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIpLGkmJihvKz0iIGlzLWludmFsaWQiKSl9cmV0dXJuIG4mJihvKz0iIGZvY3VzZWQiKSxvfSxfY29tcHV0ZVVuZGVybGluZUNsYXNzOmZ1bmN0aW9uKHQsZSl7dmFyIG49InVuZGVybGluZSI7cmV0dXJuIGU/bis9IiBpcy1pbnZhbGlkIjp0JiYobis9IiBpcy1oaWdobGlnaHRlZCIpLG59LF9jb21wdXRlQWRkT25Db250ZW50Q2xhc3M6ZnVuY3Rpb24odCxlKXt2YXIgbj0iYWRkLW9uLWNvbnRlbnQiO3JldHVybiBlP24rPSIgaXMtaW52YWxpZCI6dCYmKG4rPSIgaXMtaGlnaGxpZ2h0ZWQiKSxufX0pLAovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KSXIoe190ZW1wbGF0ZTpfZWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CgogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItaW52YWxpZC1jb2xvciwgdmFyKC0tZXJyb3ItY29sb3IpKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jYXB0aW9uOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWVycm9yOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OjA7CiAgICAgICAgcmlnaHQ6MDsKICAgICAgfQoKICAgICAgOmhvc3QoW2ludmFsaWRdKSB7CiAgICAgICAgdmlzaWJpbGl0eTogdmlzaWJsZTsKICAgICAgfQoKICAgICAgI2ExMXlXcmFwcGVyIHsKICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIDpob3N0KFtpbnZhbGlkXSkgI2ExMXlXcmFwcGVyIHsKICAgICAgICB2aXNpYmlsaXR5OiB2aXNpYmxlOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDwhLS0KICAgIElmIHRoZSBwYXBlci1pbnB1dC1lcnJvciBlbGVtZW50IGlzIGRpcmVjdGx5IHJlZmVyZW5jZWQgYnkgYW4KICAgIFxgYXJpYS1kZXNjcmliZWRieVxgIGF0dHJpYnV0ZSwgc3VjaCBhcyB3aGVuIHVzZWQgYXMgYSBwYXBlci1pbnB1dCBhZGQtb24sCiAgICB0aGVuIGFwcGx5aW5nIFxgdmlzaWJpbGl0eTogaGlkZGVuO1xgIHRvIHRoZSBwYXBlci1pbnB1dC1lcnJvciBlbGVtZW50IGl0c2VsZgogICAgZG9lcyBub3QgaGlkZSB0aGUgZXJyb3IuCgogICAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZToKICAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9hY2NuYW1lLTEuMS8jbWFwcGluZ19hZGRpdGlvbmFsX25kX2Rlc2NyaXB0aW9uCiAgICAtLT4KICAgIDxkaXYgaWQ9ImExMXlXcmFwcGVyIj4KICAgICAgPHNsb3Q+PC9zbG90PgogICAgPC9kaXY+CmAsaXM6InBhcGVyLWlucHV0LWVycm9yIixiZWhhdmlvcnM6W1JhXSxwcm9wZXJ0aWVzOntpbnZhbGlkOntyZWFkT25seTohMCxyZWZsZWN0VG9BdHRyaWJ1dGU6ITAsdHlwZTpCb29sZWFufX0sdXBkYXRlOmZ1bmN0aW9uKHQpe3RoaXMuX3NldEludmFsaWQodC5pbnZhbGlkKX19KTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCmNvbnN0IERhPXtOZXh0TGFiZWxJRDoxLE5leHRBZGRvbklEOjEsTmV4dElucHV0SUQ6MX0sQmE9e3Byb3BlcnRpZXM6e2xhYmVsOnt0eXBlOlN0cmluZ30sdmFsdWU6e25vdGlmeTohMCx0eXBlOlN0cmluZ30sZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0saW52YWxpZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMH0sYWxsb3dlZFBhdHRlcm46e3R5cGU6U3RyaW5nfSx0eXBlOnt0eXBlOlN0cmluZ30sbGlzdDp7dHlwZTpTdHJpbmd9LHBhdHRlcm46e3R5cGU6U3RyaW5nfSxyZXF1aXJlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxlcnJvck1lc3NhZ2U6e3R5cGU6U3RyaW5nfSxjaGFyQ291bnRlcjp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxub0xhYmVsRmxvYXQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sYWx3YXlzRmxvYXRMYWJlbDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxhdXRvVmFsaWRhdGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sdmFsaWRhdG9yOnt0eXBlOlN0cmluZ30sYXV0b2NvbXBsZXRlOnt0eXBlOlN0cmluZyx2YWx1ZToib2ZmIn0sYXV0b2ZvY3VzOnt0eXBlOkJvb2xlYW4sb2JzZXJ2ZXI6Il9hdXRvZm9jdXNDaGFuZ2VkIn0saW5wdXRtb2RlOnt0eXBlOlN0cmluZ30sbWlubGVuZ3RoOnt0eXBlOk51bWJlcn0sbWF4bGVuZ3RoOnt0eXBlOk51bWJlcn0sbWluOnt0eXBlOlN0cmluZ30sbWF4Ont0eXBlOlN0cmluZ30sc3RlcDp7dHlwZTpTdHJpbmd9LG5hbWU6e3R5cGU6U3RyaW5nfSxwbGFjZWhvbGRlcjp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9LHJlYWRvbmx5Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHNpemU6e3R5cGU6TnVtYmVyfSxhdXRvY2FwaXRhbGl6ZTp7dHlwZTpTdHJpbmcsdmFsdWU6Im5vbmUifSxhdXRvY29ycmVjdDp7dHlwZTpTdHJpbmcsdmFsdWU6Im9mZiJ9LGF1dG9zYXZlOnt0eXBlOlN0cmluZ30scmVzdWx0czp7dHlwZTpOdW1iZXJ9LGFjY2VwdDp7dHlwZTpTdHJpbmd9LG11bHRpcGxlOnt0eXBlOkJvb2xlYW59LF9hcmlhRGVzY3JpYmVkQnk6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxfYXJpYUxhYmVsbGVkQnk6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxfaW5wdXRJZDp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9fSxsaXN0ZW5lcnM6eyJhZGRvbi1hdHRhY2hlZCI6Il9vbkFkZG9uQXR0YWNoZWQifSxrZXlCaW5kaW5nczp7InNoaWZ0K3RhYjprZXlkb3duIjoiX29uU2hpZnRUYWJEb3duIn0saG9zdEF0dHJpYnV0ZXM6e3RhYmluZGV4OjB9LGdldCBpbnB1dEVsZW1lbnQoKXtyZXR1cm4gdGhpcy4kfHwodGhpcy4kPXt9KSx0aGlzLiQuaW5wdXR8fCh0aGlzLl9nZW5lcmF0ZUlucHV0SWQoKSx0aGlzLiQuaW5wdXQ9dGhpcy4kJCgiIyIrdGhpcy5faW5wdXRJZCkpLHRoaXMuJC5pbnB1dH0sZ2V0IF9mb2N1c2FibGVFbGVtZW50KCl7cmV0dXJuIHRoaXMuaW5wdXRFbGVtZW50fSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy5fdHlwZXNUaGF0SGF2ZVRleHQ9WyJkYXRlIiwiZGF0ZXRpbWUiLCJkYXRldGltZS1sb2NhbCIsIm1vbnRoIiwidGltZSIsIndlZWsiLCJmaWxlIl19LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlQXJpYUxhYmVsbGVkQnkoKSwheWUmJnRoaXMuaW5wdXRFbGVtZW50JiYtMSE9PXRoaXMuX3R5cGVzVGhhdEhhdmVUZXh0LmluZGV4T2YodGhpcy5pbnB1dEVsZW1lbnQudHlwZSkmJih0aGlzLmFsd2F5c0Zsb2F0TGFiZWw9ITApfSxfYXBwZW5kU3RyaW5nV2l0aFNwYWNlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ/dCsiICIrZTplfSxfb25BZGRvbkF0dGFjaGVkOmZ1bmN0aW9uKHQpe3ZhciBlPXFpKHQpLnJvb3RUYXJnZXQ7aWYoZS5pZCl0aGlzLl9hcmlhRGVzY3JpYmVkQnk9dGhpcy5fYXBwZW5kU3RyaW5nV2l0aFNwYWNlKHRoaXMuX2FyaWFEZXNjcmliZWRCeSxlLmlkKTtlbHNle3ZhciBuPSJwYXBlci1pbnB1dC1hZGQtb24tIitEYS5OZXh0QWRkb25JRCsrO2UuaWQ9bix0aGlzLl9hcmlhRGVzY3JpYmVkQnk9dGhpcy5fYXBwZW5kU3RyaW5nV2l0aFNwYWNlKHRoaXMuX2FyaWFEZXNjcmliZWRCeSxuKX19LHZhbGlkYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5wdXRFbGVtZW50LnZhbGlkYXRlKCl9LF9mb2N1c0JsdXJIYW5kbGVyOmZ1bmN0aW9uKHQpe1dvLl9mb2N1c0JsdXJIYW5kbGVyLmNhbGwodGhpcyx0KSx0aGlzLmZvY3VzZWQmJiF0aGlzLl9zaGlmdFRhYlByZXNzZWQmJnRoaXMuX2ZvY3VzYWJsZUVsZW1lbnQmJnRoaXMuX2ZvY3VzYWJsZUVsZW1lbnQuZm9jdXMoKX0sX29uU2hpZnRUYWJEb3duOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2V0QXR0cmlidXRlKCJ0YWJpbmRleCIpO3RoaXMuX3NoaWZ0VGFiUHJlc3NlZD0hMCx0aGlzLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCItMSIpLHRoaXMuYXN5bmMoKGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IixlKSx0aGlzLl9zaGlmdFRhYlByZXNzZWQ9ITF9KSwxKX0sX2hhbmRsZUF1dG9WYWxpZGF0ZTpmdW5jdGlvbigpe3RoaXMuYXV0b1ZhbGlkYXRlJiZ0aGlzLnZhbGlkYXRlKCl9LHVwZGF0ZVZhbHVlQW5kUHJlc2VydmVDYXJldDpmdW5jdGlvbih0KXt0cnl7dmFyIGU9dGhpcy5pbnB1dEVsZW1lbnQuc2VsZWN0aW9uU3RhcnQ7dGhpcy52YWx1ZT10LHRoaXMuaW5wdXRFbGVtZW50LnNlbGVjdGlvblN0YXJ0PWUsdGhpcy5pbnB1dEVsZW1lbnQuc2VsZWN0aW9uRW5kPWV9Y2F0Y2goZSl7dGhpcy52YWx1ZT10fX0sX2NvbXB1dGVBbHdheXNGbG9hdExhYmVsOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV8fHR9LF91cGRhdGVBcmlhTGFiZWxsZWRCeTpmdW5jdGlvbigpe3ZhciB0LGU9cWkodGhpcy5yb290KS5xdWVyeVNlbGVjdG9yKCJsYWJlbCIpO2U/KGUuaWQ/dD1lLmlkOih0PSJwYXBlci1pbnB1dC1sYWJlbC0iK0RhLk5leHRMYWJlbElEKyssZS5pZD10KSx0aGlzLl9hcmlhTGFiZWxsZWRCeT10KTp0aGlzLl9hcmlhTGFiZWxsZWRCeT0iIn0sX2dlbmVyYXRlSW5wdXRJZDpmdW5jdGlvbigpe3RoaXMuX2lucHV0SWQmJiIiIT09dGhpcy5faW5wdXRJZHx8KHRoaXMuX2lucHV0SWQ9ImlucHV0LSIrRGEuTmV4dElucHV0SUQrKyl9LF9vbkNoYW5nZTpmdW5jdGlvbih0KXt0aGlzLnNoYWRvd1Jvb3QmJnRoaXMuZmlyZSh0LnR5cGUse3NvdXJjZUV2ZW50OnR9LHtub2RlOnRoaXMsYnViYmxlczp0LmJ1YmJsZXMsY2FuY2VsYWJsZTp0LmNhbmNlbGFibGV9KX0sX2F1dG9mb2N1c0NoYW5nZWQ6ZnVuY3Rpb24oKXtpZih0aGlzLmF1dG9mb2N1cyYmdGhpcy5fZm9jdXNhYmxlRWxlbWVudCl7dmFyIHQ9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDt0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQmJnQhPT1kb2N1bWVudC5ib2R5JiZ0IT09ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fHx0aGlzLl9mb2N1c2FibGVFbGVtZW50LmZvY3VzKCl9fX0sSGE9W1dvLFJvLEJhXTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCklyKHtpczoicGFwZXItaW5wdXQiLF90ZW1wbGF0ZTpfZWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICA6aG9zdChbZm9jdXNlZF0pIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICB9CgogICAgICA6aG9zdChbaGlkZGVuXSkgewogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgaW5wdXQgewogICAgICAgIC8qIEZpcmVmb3ggc2V0cyBhIG1pbi13aWR0aCBvbiB0aGUgaW5wdXQsIHdoaWNoIGNhbiBjYXVzZSBsYXlvdXQgaXNzdWVzICovCiAgICAgICAgbWluLXdpZHRoOiAwOwogICAgICB9CgogICAgICAvKiBJbiAxLngsIHRoZSA8aW5wdXQ+IGlzIGRpc3RyaWJ1dGVkIHRvIHBhcGVyLWlucHV0LWNvbnRhaW5lciwgd2hpY2ggc3R5bGVzIGl0LgogICAgICBJbiAyLnggdGhlIDxpcm9uLWlucHV0PiBpcyBkaXN0cmlidXRlZCB0byBwYXBlci1pbnB1dC1jb250YWluZXIsIHdoaWNoIHN0eWxlcwogICAgICBpdCwgYnV0IGluIG9yZGVyIGZvciB0aGlzIHRvIHdvcmsgY29ycmVjdGx5LCB3ZSBuZWVkIHRvIHJlc2V0IHNvbWUKICAgICAgb2YgdGhlIG5hdGl2ZSBpbnB1dCdzIHByb3BlcnRpZXMgdG8gaW5oZXJpdCAoZnJvbSB0aGUgaXJvbi1pbnB1dCkgKi8KICAgICAgaXJvbi1pbnB1dCA+IGlucHV0IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItc2hhcmVkLWlucHV0LXN0eWxlOwogICAgICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgICAgIGZvbnQtd2VpZ2h0OiBpbmhlcml0OwogICAgICAgIGZvbnQtc2l6ZTogaW5oZXJpdDsKICAgICAgICBsZXR0ZXItc3BhY2luZzogaW5oZXJpdDsKICAgICAgICB3b3JkLXNwYWNpbmc6IGluaGVyaXQ7CiAgICAgICAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7CiAgICAgICAgdGV4dC1zaGFkb3c6IGluaGVyaXQ7CiAgICAgICAgY29sb3I6IGluaGVyaXQ7CiAgICAgICAgY3Vyc29yOiBpbmhlcml0OwogICAgICB9CgogICAgICBpbnB1dDpkaXNhYmxlZCB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LWRpc2FibGVkOwogICAgICB9CgogICAgICBpbnB1dDo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiwKICAgICAgaW5wdXQ6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24gewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dC13ZWJraXQtc3Bpbm5lcjsKICAgICAgfQoKICAgICAgaW5wdXQ6Oi13ZWJraXQtY2xlYXItYnV0dG9uIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQtd2Via2l0LWNsZWFyOwogICAgICB9CgogICAgICBpbnB1dDo6LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9yIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQtd2Via2l0LWNhbGVuZGFyLXBpY2tlci1pbmRpY2F0b3I7CiAgICAgIH0KCiAgICAgIGlucHV0Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWNvbG9yLCB2YXIoLS1zZWNvbmRhcnktdGV4dC1jb2xvcikpOwogICAgICB9CgogICAgICBpbnB1dDotbW96LXBsYWNlaG9sZGVyIHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWNvbG9yLCB2YXIoLS1zZWNvbmRhcnktdGV4dC1jb2xvcikpOwogICAgICB9CgogICAgICBpbnB1dDo6LW1vei1wbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvciwgdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpKTsKICAgICAgfQoKICAgICAgaW5wdXQ6Oi1tcy1jbGVhciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLW1zLWNsZWFyOwogICAgICB9CgogICAgICBpbnB1dDo6LW1zLXJldmVhbCB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLW1zLXJldmVhbDsKICAgICAgfQoKICAgICAgaW5wdXQ6LW1zLWlucHV0LXBsYWNlaG9sZGVyIHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWNvbG9yLCB2YXIoLS1zZWNvbmRhcnktdGV4dC1jb2xvcikpOwogICAgICB9CgogICAgICBsYWJlbCB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHBhcGVyLWlucHV0LWNvbnRhaW5lciBpZD0iY29udGFpbmVyIiBuby1sYWJlbC1mbG9hdD0iW1tub0xhYmVsRmxvYXRdXSIgYWx3YXlzLWZsb2F0LWxhYmVsPSJbW19jb21wdXRlQWx3YXlzRmxvYXRMYWJlbChhbHdheXNGbG9hdExhYmVsLHBsYWNlaG9sZGVyKV1dIiBhdXRvLXZhbGlkYXRlJD0iW1thdXRvVmFsaWRhdGVdXSIgZGlzYWJsZWQkPSJbW2Rpc2FibGVkXV0iIGludmFsaWQ9IltbaW52YWxpZF1dIj4KCiAgICAgIDxzbG90IG5hbWU9InByZWZpeCIgc2xvdD0icHJlZml4Ij48L3Nsb3Q+CgogICAgICA8bGFiZWwgaGlkZGVuJD0iW1shbGFiZWxdXSIgYXJpYS1oaWRkZW49InRydWUiIGZvciQ9IltbX2lucHV0SWRdXSIgc2xvdD0ibGFiZWwiPltbbGFiZWxdXTwvbGFiZWw+CgogICAgICA8IS0tIE5lZWQgdG8gYmluZCBtYXhsZW5ndGggc28gdGhhdCB0aGUgcGFwZXItaW5wdXQtY2hhci1jb3VudGVyIHdvcmtzIGNvcnJlY3RseSAtLT4KICAgICAgPGlyb24taW5wdXQgYmluZC12YWx1ZT0ie3t2YWx1ZX19IiBzbG90PSJpbnB1dCIgY2xhc3M9ImlucHV0LWVsZW1lbnQiIGlkJD0iW1tfaW5wdXRJZF1dIiBtYXhsZW5ndGgkPSJbW21heGxlbmd0aF1dIiBhbGxvd2VkLXBhdHRlcm49IltbYWxsb3dlZFBhdHRlcm5dXSIgaW52YWxpZD0ie3tpbnZhbGlkfX0iIHZhbGlkYXRvcj0iW1t2YWxpZGF0b3JdXSI+CiAgICAgICAgPGlucHV0IGFyaWEtbGFiZWxsZWRieSQ9IltbX2FyaWFMYWJlbGxlZEJ5XV0iIGFyaWEtZGVzY3JpYmVkYnkkPSJbW19hcmlhRGVzY3JpYmVkQnldXSIgZGlzYWJsZWQkPSJbW2Rpc2FibGVkXV0iIHRpdGxlJD0iW1t0aXRsZV1dIiB0eXBlJD0iW1t0eXBlXV0iIHBhdHRlcm4kPSJbW3BhdHRlcm5dXSIgcmVxdWlyZWQkPSJbW3JlcXVpcmVkXV0iIGF1dG9jb21wbGV0ZSQ9IltbYXV0b2NvbXBsZXRlXV0iIGF1dG9mb2N1cyQ9IltbYXV0b2ZvY3VzXV0iIGlucHV0bW9kZSQ9IltbaW5wdXRtb2RlXV0iIG1pbmxlbmd0aCQ9IltbbWlubGVuZ3RoXV0iIG1heGxlbmd0aCQ9IltbbWF4bGVuZ3RoXV0iIG1pbiQ9IltbbWluXV0iIG1heCQ9IltbbWF4XV0iIHN0ZXAkPSJbW3N0ZXBdXSIgbmFtZSQ9IltbbmFtZV1dIiBwbGFjZWhvbGRlciQ9IltbcGxhY2Vob2xkZXJdXSIgcmVhZG9ubHkkPSJbW3JlYWRvbmx5XV0iIGxpc3QkPSJbW2xpc3RdXSIgc2l6ZSQ9Iltbc2l6ZV1dIiBhdXRvY2FwaXRhbGl6ZSQ9IltbYXV0b2NhcGl0YWxpemVdXSIgYXV0b2NvcnJlY3QkPSJbW2F1dG9jb3JyZWN0XV0iIG9uLWNoYW5nZT0iX29uQ2hhbmdlIiB0YWJpbmRleCQ9IltbdGFiSW5kZXhdXSIgYXV0b3NhdmUkPSJbW2F1dG9zYXZlXV0iIHJlc3VsdHMkPSJbW3Jlc3VsdHNdXSIgYWNjZXB0JD0iW1thY2NlcHRdXSIgbXVsdGlwbGUkPSJbW211bHRpcGxlXV0iIHJvbGUkPSJbW2lucHV0Um9sZV1dIiBhcmlhLWhhc3BvcHVwJD0iW1tpbnB1dEFyaWFIYXNwb3B1cF1dIj4KICAgICAgPC9pcm9uLWlucHV0PgoKICAgICAgPHNsb3QgbmFtZT0ic3VmZml4IiBzbG90PSJzdWZmaXgiPjwvc2xvdD4KCiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tlcnJvck1lc3NhZ2VdXSI+CiAgICAgICAgPHBhcGVyLWlucHV0LWVycm9yIGFyaWEtbGl2ZT0iYXNzZXJ0aXZlIiBzbG90PSJhZGQtb24iPltbZXJyb3JNZXNzYWdlXV08L3BhcGVyLWlucHV0LWVycm9yPgogICAgICA8L3RlbXBsYXRlPgoKICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2NoYXJDb3VudGVyXV0iPgogICAgICAgIDxwYXBlci1pbnB1dC1jaGFyLWNvdW50ZXIgc2xvdD0iYWRkLW9uIj48L3BhcGVyLWlucHV0LWNoYXItY291bnRlcj4KICAgICAgPC90ZW1wbGF0ZT4KCiAgICA8L3BhcGVyLWlucHV0LWNvbnRhaW5lcj4KICBgLGJlaGF2aW9yczpbSGEsaWFdLHByb3BlcnRpZXM6e3ZhbHVlOnt0eXBlOlN0cmluZ30saW5wdXRSb2xlOnt0eXBlOlN0cmluZyx2YWx1ZTp2b2lkIDB9LGlucHV0QXJpYUhhc3BvcHVwOnt0eXBlOlN0cmluZyx2YWx1ZTp2b2lkIDB9fSxnZXQgX2ZvY3VzYWJsZUVsZW1lbnQoKXtyZXR1cm4gdGhpcy5pbnB1dEVsZW1lbnQuX2lucHV0RWxlbWVudH0sbGlzdGVuZXJzOnsiaXJvbi1pbnB1dC1yZWFkeSI6Il9vbklyb25JbnB1dFJlYWR5In0sX29uSXJvbklucHV0UmVhZHk6ZnVuY3Rpb24oKXt0aGlzLiQubmF0aXZlSW5wdXR8fCh0aGlzLiQubmF0aXZlSW5wdXQ9dGhpcy4kJCgiaW5wdXQiKSksdGhpcy5pbnB1dEVsZW1lbnQmJi0xIT09dGhpcy5fdHlwZXNUaGF0SGF2ZVRleHQuaW5kZXhPZih0aGlzLiQubmF0aXZlSW5wdXQudHlwZSkmJih0aGlzLmFsd2F5c0Zsb2F0TGFiZWw9ITApLHRoaXMuaW5wdXRFbGVtZW50LmJpbmRWYWx1ZSYmdGhpcy4kLmNvbnRhaW5lci5faGFuZGxlVmFsdWVBbmRBdXRvVmFsaWRhdGUodGhpcy5pbnB1dEVsZW1lbnQpfX0pLAovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KSXIoe190ZW1wbGF0ZTpfZWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgfQoKICAgICAgI2NvbnRlbnRXcmFwcGVyIDo6c2xvdHRlZCgqKSB7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgIH0KCiAgICAgICNjb250ZW50V3JhcHBlci5hbmltYXRpbmcgOjpzbG90dGVkKCopIHsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgaWQ9ImNvbnRlbnRXcmFwcGVyIj4KICAgICAgPHNsb3QgaWQ9ImNvbnRlbnQiIG5hbWU9ImRyb3Bkb3duLWNvbnRlbnQiPjwvc2xvdD4KICAgIDwvZGl2PgpgLGlzOiJpcm9uLWRyb3Bkb3duIixiZWhhdmlvcnM6W1dvLFJvLEFhLElhXSxwcm9wZXJ0aWVzOntob3Jpem9udGFsQWxpZ246e3R5cGU6U3RyaW5nLHZhbHVlOiJsZWZ0IixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LHZlcnRpY2FsQWxpZ246e3R5cGU6U3RyaW5nLHZhbHVlOiJ0b3AiLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sb3BlbkFuaW1hdGlvbkNvbmZpZzp7dHlwZTpPYmplY3R9LGNsb3NlQW5pbWF0aW9uQ29uZmlnOnt0eXBlOk9iamVjdH0sZm9jdXNUYXJnZXQ6e3R5cGU6T2JqZWN0fSxub0FuaW1hdGlvbnM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sYWxsb3dPdXRzaWRlU2Nyb2xsOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsb2JzZXJ2ZXI6Il9hbGxvd091dHNpZGVTY3JvbGxDaGFuZ2VkIn19LGxpc3RlbmVyczp7Im5lb24tYW5pbWF0aW9uLWZpbmlzaCI6Il9vbk5lb25BbmltYXRpb25GaW5pc2gifSxvYnNlcnZlcnM6WyJfdXBkYXRlT3ZlcmxheVBvc2l0aW9uKHBvc2l0aW9uVGFyZ2V0LCB2ZXJ0aWNhbEFsaWduLCBob3Jpem9udGFsQWxpZ24sIHZlcnRpY2FsT2Zmc2V0LCBob3Jpem9udGFsT2Zmc2V0KSJdLGdldCBjb250YWluZWRFbGVtZW50KCl7Zm9yKHZhciB0PXFpKHRoaXMuJC5jb250ZW50KS5nZXREaXN0cmlidXRlZE5vZGVzKCksZT0wLG49dC5sZW5ndGg7ZTxuO2UrKylpZih0W2VdLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUpcmV0dXJuIHRbZV19LHJlYWR5OmZ1bmN0aW9uKCl7dGhpcy5zY3JvbGxBY3Rpb258fCh0aGlzLnNjcm9sbEFjdGlvbj10aGlzLmFsbG93T3V0c2lkZVNjcm9sbD8icmVmaXQiOiJsb2NrIiksdGhpcy5fcmVhZGllZD0hMH0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLnNpemluZ1RhcmdldCYmdGhpcy5zaXppbmdUYXJnZXQhPT10aGlzfHwodGhpcy5zaXppbmdUYXJnZXQ9dGhpcy5jb250YWluZWRFbGVtZW50fHx0aGlzKX0sZGV0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLmNhbmNlbEFuaW1hdGlvbigpfSxfb3BlbmVkQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMub3BlbmVkJiZ0aGlzLmRpc2FibGVkP3RoaXMuY2FuY2VsKCk6KHRoaXMuY2FuY2VsQW5pbWF0aW9uKCksdGhpcy5fdXBkYXRlQW5pbWF0aW9uQ29uZmlnKCksVGEuX29wZW5lZENoYW5nZWQuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0sX3JlbmRlck9wZW5lZDpmdW5jdGlvbigpeyF0aGlzLm5vQW5pbWF0aW9ucyYmdGhpcy5hbmltYXRpb25Db25maWcub3Blbj8odGhpcy4kLmNvbnRlbnRXcmFwcGVyLmNsYXNzTGlzdC5hZGQoImFuaW1hdGluZyIpLHRoaXMucGxheUFuaW1hdGlvbigib3BlbiIpKTpUYS5fcmVuZGVyT3BlbmVkLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sX3JlbmRlckNsb3NlZDpmdW5jdGlvbigpeyF0aGlzLm5vQW5pbWF0aW9ucyYmdGhpcy5hbmltYXRpb25Db25maWcuY2xvc2U/KHRoaXMuJC5jb250ZW50V3JhcHBlci5jbGFzc0xpc3QuYWRkKCJhbmltYXRpbmciKSx0aGlzLnBsYXlBbmltYXRpb24oImNsb3NlIikpOlRhLl9yZW5kZXJDbG9zZWQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxfb25OZW9uQW5pbWF0aW9uRmluaXNoOmZ1bmN0aW9uKCl7dGhpcy4kLmNvbnRlbnRXcmFwcGVyLmNsYXNzTGlzdC5yZW1vdmUoImFuaW1hdGluZyIpLHRoaXMub3BlbmVkP3RoaXMuX2ZpbmlzaFJlbmRlck9wZW5lZCgpOnRoaXMuX2ZpbmlzaFJlbmRlckNsb3NlZCgpfSxfdXBkYXRlQW5pbWF0aW9uQ29uZmlnOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuY29udGFpbmVkRWxlbWVudCxlPVtdLmNvbmNhdCh0aGlzLm9wZW5BbmltYXRpb25Db25maWd8fFtdKS5jb25jYXQodGhpcy5jbG9zZUFuaW1hdGlvbkNvbmZpZ3x8W10pLG49MDtuPGUubGVuZ3RoO24rKyllW25dLm5vZGU9dDt0aGlzLmFuaW1hdGlvbkNvbmZpZz17b3Blbjp0aGlzLm9wZW5BbmltYXRpb25Db25maWcsY2xvc2U6dGhpcy5jbG9zZUFuaW1hdGlvbkNvbmZpZ319LF91cGRhdGVPdmVybGF5UG9zaXRpb246ZnVuY3Rpb24oKXt0aGlzLmlzQXR0YWNoZWQmJnRoaXMubm90aWZ5UmVzaXplKCl9LF9hbGxvd091dHNpZGVTY3JvbGxDaGFuZ2VkOmZ1bmN0aW9uKHQpe3RoaXMuX3JlYWRpZWQmJih0P3RoaXMuc2Nyb2xsQWN0aW9uJiYibG9jayIhPT10aGlzLnNjcm9sbEFjdGlvbnx8KHRoaXMuc2Nyb2xsQWN0aW9uPSJyZWZpdCIpOnRoaXMuc2Nyb2xsQWN0aW9uPSJsb2NrIil9LF9hcHBseUZvY3VzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5mb2N1c1RhcmdldHx8dGhpcy5jb250YWluZWRFbGVtZW50O3QmJnRoaXMub3BlbmVkJiYhdGhpcy5ub0F1dG9Gb2N1cz90LmZvY3VzKCk6VGEuX2FwcGx5Rm9jdXMuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0pOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KY29uc3QgRmE9e3Byb3BlcnRpZXM6e2FuaW1hdGlvblRpbWluZzp7dHlwZTpPYmplY3QsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm57ZHVyYXRpb246NTAwLGVhc2luZzoiY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSIsZmlsbDoiYm90aCJ9fX19LGlzTmVvbkFuaW1hdGlvbjohMCxjcmVhdGVkOmZ1bmN0aW9uKCl7ZG9jdW1lbnQuYm9keS5hbmltYXRlfHxjb25zb2xlLndhcm4oIk5vIHdlYiBhbmltYXRpb25zIGRldGVjdGVkLiBUaGlzIGVsZW1lbnQgd2lsbCBub3QgZnVuY3Rpb24gd2l0aG91dCBhIHdlYiBhbmltYXRpb25zIHBvbHlmaWxsLiIpfSx0aW1pbmdGcm9tQ29uZmlnOmZ1bmN0aW9uKHQpe2lmKHQudGltaW5nKWZvcih2YXIgZSBpbiB0LnRpbWluZyl0aGlzLmFuaW1hdGlvblRpbWluZ1tlXT10LnRpbWluZ1tlXTtyZXR1cm4gdGhpcy5hbmltYXRpb25UaW1pbmd9LHNldFByZWZpeGVkUHJvcGVydHk6ZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgaSxyPXt0cmFuc2Zvcm06WyJ3ZWJraXRUcmFuc2Zvcm0iXSx0cmFuc2Zvcm1PcmlnaW46WyJtb3pUcmFuc2Zvcm1PcmlnaW4iLCJ3ZWJraXRUcmFuc2Zvcm1PcmlnaW4iXX1bZV0sbz0wO2k9cltvXTtvKyspdC5zdHlsZVtpXT1uO3Quc3R5bGVbZV09bn0sY29tcGxldGU6ZnVuY3Rpb24odCl7fX07Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqL0lyKHtpczoiZmFkZS1pbi1hbmltYXRpb24iLGJlaGF2aW9yczpbRmFdLGNvbmZpZ3VyZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZWZmZWN0PW5ldyBLZXlmcmFtZUVmZmVjdCh0Lm5vZGUsW3tvcGFjaXR5OiIwIn0se29wYWNpdHk6IjEifV0sdGhpcy50aW1pbmdGcm9tQ29uZmlnKHQpKSx0aGlzLl9lZmZlY3R9fSksCi8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpJcih7aXM6ImZhZGUtb3V0LWFuaW1hdGlvbiIsYmVoYXZpb3JzOltGYV0sY29uZmlndXJlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9lZmZlY3Q9bmV3IEtleWZyYW1lRWZmZWN0KHQubm9kZSxbe29wYWNpdHk6IjEifSx7b3BhY2l0eToiMCJ9XSx0aGlzLnRpbWluZ0Zyb21Db25maWcodCkpLHRoaXMuX2VmZmVjdH19KSwKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCklyKHtpczoicGFwZXItbWVudS1ncm93LWhlaWdodC1hbmltYXRpb24iLF90ZW1wbGF0ZTpudWxsLGJlaGF2aW9yczpbRmFdLGNvbmZpZ3VyZTpmdW5jdGlvbih0KXt2YXIgZT10Lm5vZGUsbj1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtyZXR1cm4gdGhpcy5fZWZmZWN0PW5ldyBLZXlmcmFtZUVmZmVjdChlLFt7aGVpZ2h0Om4vMisicHgifSx7aGVpZ2h0Om4rInB4In1dLHRoaXMudGltaW5nRnJvbUNvbmZpZyh0KSksdGhpcy5fZWZmZWN0fX0pLElyKHtpczoicGFwZXItbWVudS1ncm93LXdpZHRoLWFuaW1hdGlvbiIsX3RlbXBsYXRlOm51bGwsYmVoYXZpb3JzOltGYV0sY29uZmlndXJlOmZ1bmN0aW9uKHQpe3ZhciBlPXQubm9kZSxuPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7cmV0dXJuIHRoaXMuX2VmZmVjdD1uZXcgS2V5ZnJhbWVFZmZlY3QoZSxbe3dpZHRoOm4vMisicHgifSx7d2lkdGg6bisicHgifV0sdGhpcy50aW1pbmdGcm9tQ29uZmlnKHQpKSx0aGlzLl9lZmZlY3R9fSksSXIoe2lzOiJwYXBlci1tZW51LXNocmluay13aWR0aC1hbmltYXRpb24iLF90ZW1wbGF0ZTpudWxsLGJlaGF2aW9yczpbRmFdLGNvbmZpZ3VyZTpmdW5jdGlvbih0KXt2YXIgZT10Lm5vZGUsbj1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO3JldHVybiB0aGlzLl9lZmZlY3Q9bmV3IEtleWZyYW1lRWZmZWN0KGUsW3t3aWR0aDpuKyJweCJ9LHt3aWR0aDpuLW4vMjArInB4In1dLHRoaXMudGltaW5nRnJvbUNvbmZpZyh0KSksdGhpcy5fZWZmZWN0fX0pLElyKHtpczoicGFwZXItbWVudS1zaHJpbmstaGVpZ2h0LWFuaW1hdGlvbiIsX3RlbXBsYXRlOm51bGwsYmVoYXZpb3JzOltGYV0sY29uZmlndXJlOmZ1bmN0aW9uKHQpe3ZhciBlPXQubm9kZSxuPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O3JldHVybiB0aGlzLnNldFByZWZpeGVkUHJvcGVydHkoZSwidHJhbnNmb3JtT3JpZ2luIiwiMCAwIiksdGhpcy5fZWZmZWN0PW5ldyBLZXlmcmFtZUVmZmVjdChlLFt7aGVpZ2h0Om4rInB4Iix0cmFuc2Zvcm06InRyYW5zbGF0ZVkoMCkifSx7aGVpZ2h0Om4vMisicHgiLHRyYW5zZm9ybToidHJhbnNsYXRlWSgtMjBweCkifV0sdGhpcy50aW1pbmdGcm9tQ29uZmlnKHQpKSx0aGlzLl9lZmZlY3R9fSk7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwp2YXIgVmE9e0FOSU1BVElPTl9DVUJJQ19CRVpJRVI6ImN1YmljLWJlemllciguMywuOTUsLjUsMSkiLE1BWF9BTklNQVRJT05fVElNRV9NUzo0MDB9O2NvbnN0IFVhPUlyKHtfdGVtcGxhdGU6X2VgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgICBvdXRsaW5lOiBub25lOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1tZW51LWJ1dHRvbjsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgewogICAgICAgIGN1cnNvcjogYXV0bzsKICAgICAgICBjb2xvcjogdmFyKC0tZGlzYWJsZWQtdGV4dC1jb2xvcik7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLW1lbnUtYnV0dG9uLWRpc2FibGVkOwogICAgICB9CgogICAgICBpcm9uLWRyb3Bkb3duIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1tZW51LWJ1dHRvbi1kcm9wZG93bjsKICAgICAgfQoKICAgICAgLmRyb3Bkb3duLWNvbnRlbnQgewogICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tMmRwOwoKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLW1lbnUtYnV0dG9uLWRyb3Bkb3duLWJhY2tncm91bmQsIHZhcigtLXByaW1hcnktYmFja2dyb3VuZC1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1tZW51LWJ1dHRvbi1jb250ZW50OwogICAgICB9CgogICAgICA6aG9zdChbdmVydGljYWwtYWxpZ249InRvcCJdKSAuZHJvcGRvd24tY29udGVudCB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDsKICAgICAgICBtYXJnaW4tdG9wOiAtMTBweDsKICAgICAgICB0b3A6IDEwcHg7CiAgICAgIH0KCiAgICAgIDpob3N0KFt2ZXJ0aWNhbC1hbGlnbj0iYm90dG9tIl0pIC5kcm9wZG93bi1jb250ZW50IHsKICAgICAgICBib3R0b206IDEwcHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogLTEwcHg7CiAgICAgICAgbWFyZ2luLXRvcDogMjBweDsKICAgICAgfQoKICAgICAgI3RyaWdnZXIgewogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGlkPSJ0cmlnZ2VyIiBvbi10YXA9InRvZ2dsZSI+CiAgICAgIDxzbG90IG5hbWU9ImRyb3Bkb3duLXRyaWdnZXIiPjwvc2xvdD4KICAgIDwvZGl2PgoKICAgIDxpcm9uLWRyb3Bkb3duIGlkPSJkcm9wZG93biIgb3BlbmVkPSJ7e29wZW5lZH19IiBob3Jpem9udGFsLWFsaWduPSJbW2hvcml6b250YWxBbGlnbl1dIiB2ZXJ0aWNhbC1hbGlnbj0iW1t2ZXJ0aWNhbEFsaWduXV0iIGR5bmFtaWMtYWxpZ249IltbZHluYW1pY0FsaWduXV0iIGhvcml6b250YWwtb2Zmc2V0PSJbW2hvcml6b250YWxPZmZzZXRdXSIgdmVydGljYWwtb2Zmc2V0PSJbW3ZlcnRpY2FsT2Zmc2V0XV0iIG5vLW92ZXJsYXA9Iltbbm9PdmVybGFwXV0iIG9wZW4tYW5pbWF0aW9uLWNvbmZpZz0iW1tvcGVuQW5pbWF0aW9uQ29uZmlnXV0iIGNsb3NlLWFuaW1hdGlvbi1jb25maWc9IltbY2xvc2VBbmltYXRpb25Db25maWddXSIgbm8tYW5pbWF0aW9ucz0iW1tub0FuaW1hdGlvbnNdXSIgZm9jdXMtdGFyZ2V0PSJbW19kcm9wZG93bkNvbnRlbnRdXSIgYWxsb3ctb3V0c2lkZS1zY3JvbGw9IltbYWxsb3dPdXRzaWRlU2Nyb2xsXV0iIHJlc3RvcmUtZm9jdXMtb24tY2xvc2U9IltbcmVzdG9yZUZvY3VzT25DbG9zZV1dIiBvbi1pcm9uLW92ZXJsYXktY2FuY2VsZWQ9Il9fb25Jcm9uT3ZlcmxheUNhbmNlbGVkIiBleHBhbmQtc2l6aW5nLXRhcmdldC1mb3Itc2Nyb2xsYmFycz0iW1tleHBhbmRTaXppbmdUYXJnZXRGb3JTY3JvbGxiYXJzXV0iPgogICAgICA8ZGl2IHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiIGNsYXNzPSJkcm9wZG93bi1jb250ZW50Ij4KICAgICAgICA8c2xvdCBpZD0iY29udGVudCIgbmFtZT0iZHJvcGRvd24tY29udGVudCI+PC9zbG90PgogICAgICA8L2Rpdj4KICAgIDwvaXJvbi1kcm9wZG93bj4KYCxpczoicGFwZXItbWVudS1idXR0b24iLGJlaGF2aW9yczpbUm8sV29dLHByb3BlcnRpZXM6e29wZW5lZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMCxvYnNlcnZlcjoiX29wZW5lZENoYW5nZWQifSxob3Jpem9udGFsQWxpZ246e3R5cGU6U3RyaW5nLHZhbHVlOiJsZWZ0IixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LHZlcnRpY2FsQWxpZ246e3R5cGU6U3RyaW5nLHZhbHVlOiJ0b3AiLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sZHluYW1pY0FsaWduOnt0eXBlOkJvb2xlYW59LGhvcml6b250YWxPZmZzZXQ6e3R5cGU6TnVtYmVyLHZhbHVlOjAsbm90aWZ5OiEwfSx2ZXJ0aWNhbE9mZnNldDp7dHlwZTpOdW1iZXIsdmFsdWU6MCxub3RpZnk6ITB9LG5vT3ZlcmxhcDp7dHlwZTpCb29sZWFufSxub0FuaW1hdGlvbnM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0saWdub3JlU2VsZWN0Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGNsb3NlT25BY3RpdmF0ZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxvcGVuQW5pbWF0aW9uQ29uZmlnOnt0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVyblt7bmFtZToiZmFkZS1pbi1hbmltYXRpb24iLHRpbWluZzp7ZGVsYXk6MTAwLGR1cmF0aW9uOjIwMH19LHtuYW1lOiJwYXBlci1tZW51LWdyb3ctd2lkdGgtYW5pbWF0aW9uIix0aW1pbmc6e2RlbGF5OjEwMCxkdXJhdGlvbjoxNTAsZWFzaW5nOlZhLkFOSU1BVElPTl9DVUJJQ19CRVpJRVJ9fSx7bmFtZToicGFwZXItbWVudS1ncm93LWhlaWdodC1hbmltYXRpb24iLHRpbWluZzp7ZGVsYXk6MTAwLGR1cmF0aW9uOjI3NSxlYXNpbmc6VmEuQU5JTUFUSU9OX0NVQklDX0JFWklFUn19XX19LGNsb3NlQW5pbWF0aW9uQ29uZmlnOnt0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVyblt7bmFtZToiZmFkZS1vdXQtYW5pbWF0aW9uIix0aW1pbmc6e2R1cmF0aW9uOjE1MH19LHtuYW1lOiJwYXBlci1tZW51LXNocmluay13aWR0aC1hbmltYXRpb24iLHRpbWluZzp7ZGVsYXk6MTAwLGR1cmF0aW9uOjUwLGVhc2luZzpWYS5BTklNQVRJT05fQ1VCSUNfQkVaSUVSfX0se25hbWU6InBhcGVyLW1lbnUtc2hyaW5rLWhlaWdodC1hbmltYXRpb24iLHRpbWluZzp7ZHVyYXRpb246MjAwLGVhc2luZzoiZWFzZS1pbiJ9fV19fSxhbGxvd091dHNpZGVTY3JvbGw6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0scmVzdG9yZUZvY3VzT25DbG9zZTp7dHlwZTpCb29sZWFuLHZhbHVlOiEwfSxleHBhbmRTaXppbmdUYXJnZXRGb3JTY3JvbGxiYXJzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9kcm9wZG93bkNvbnRlbnQ6e3R5cGU6T2JqZWN0fX0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6Imdyb3VwIiwiYXJpYS1oYXNwb3B1cCI6InRydWUifSxsaXN0ZW5lcnM6eyJpcm9uLWFjdGl2YXRlIjoiX29uSXJvbkFjdGl2YXRlIiwiaXJvbi1zZWxlY3QiOiJfb25Jcm9uU2VsZWN0In0sZ2V0IGNvbnRlbnRFbGVtZW50KCl7Zm9yKHZhciB0PXFpKHRoaXMuJC5jb250ZW50KS5nZXREaXN0cmlidXRlZE5vZGVzKCksZT0wLG49dC5sZW5ndGg7ZTxuO2UrKylpZih0W2VdLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUpcmV0dXJuIHRbZV19LHRvZ2dsZTpmdW5jdGlvbigpe3RoaXMub3BlbmVkP3RoaXMuY2xvc2UoKTp0aGlzLm9wZW4oKX0sb3BlbjpmdW5jdGlvbigpe3RoaXMuZGlzYWJsZWR8fHRoaXMuJC5kcm9wZG93bi5vcGVuKCl9LGNsb3NlOmZ1bmN0aW9uKCl7dGhpcy4kLmRyb3Bkb3duLmNsb3NlKCl9LF9vbklyb25TZWxlY3Q6ZnVuY3Rpb24odCl7dGhpcy5pZ25vcmVTZWxlY3R8fHRoaXMuY2xvc2UoKX0sX29uSXJvbkFjdGl2YXRlOmZ1bmN0aW9uKHQpe3RoaXMuY2xvc2VPbkFjdGl2YXRlJiZ0aGlzLmNsb3NlKCl9LF9vcGVuZWRDaGFuZ2VkOmZ1bmN0aW9uKHQsZSl7dD8odGhpcy5fZHJvcGRvd25Db250ZW50PXRoaXMuY29udGVudEVsZW1lbnQsdGhpcy5maXJlKCJwYXBlci1kcm9wZG93bi1vcGVuIikpOm51bGwhPWUmJnRoaXMuZmlyZSgicGFwZXItZHJvcGRvd24tY2xvc2UiKX0sX2Rpc2FibGVkQ2hhbmdlZDpmdW5jdGlvbih0KXtXby5fZGlzYWJsZWRDaGFuZ2VkLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0JiZ0aGlzLm9wZW5lZCYmdGhpcy5jbG9zZSgpfSxfX29uSXJvbk92ZXJsYXlDYW5jZWxlZDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLiQudHJpZ2dlcjtxaSh0LmRldGFpbCkucGF0aC5pbmRleE9mKGUpPi0xJiZ0LnByZXZlbnREZWZhdWx0KCl9fSk7T2JqZWN0LmtleXMoVmEpLmZvckVhY2goKGZ1bmN0aW9uKHQpe1VhW3RdPVZhW3RdfSkpOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTYgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KY29uc3QgamE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtqYS5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZGlzcGxheTogbm9uZTsiKSxqYS5pbm5lckhUTUw9Jzxpcm9uLWljb25zZXQtc3ZnIG5hbWU9InBhcGVyLWRyb3Bkb3duLW1lbnUiIHNpemU9IjI0Ij5cbjxzdmc+PGRlZnM+XG48ZyBpZD0iYXJyb3ctZHJvcC1kb3duIj48cGF0aCBkPSJNNyAxMGw1IDUgNS01eiI+PC9wYXRoPjwvZz5cbjwvZGVmcz48L3N2Zz5cbjwvaXJvbi1pY29uc2V0LXN2Zz4nLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoamEuY29udGVudCk7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNiBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpjb25zdCBHYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO0dhLnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpLEdhLmlubmVySFRNTD0nPGRvbS1tb2R1bGUgaWQ9InBhcGVyLWRyb3Bkb3duLW1lbnUtc2hhcmVkLXN0eWxlcyI+XG4gIDx0ZW1wbGF0ZT5cbiAgICA8c3R5bGU+XG4gICAgICA6aG9zdCB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuXG4gICAgICAgIC8qIE5PVEUoY2RhdGEpOiBCb3RoIHZhbHVlcyBhcmUgbmVlZGVkLCBzaW5jZSBzb21lIHBob25lcyByZXF1aXJlIHRoZVxuICAgICAgICAgKiB2YWx1ZSB0byBiZSBgdHJhbnNwYXJlbnRgLlxuICAgICAgICAgKi9cbiAgICAgICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiByZ2JhKDAsMCwwLDApO1xuICAgICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50O1xuXG4gICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0OiB7XG4gICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgfTtcblxuICAgICAgICBAYXBwbHkgLS1wYXBlci1kcm9wZG93bi1tZW51O1xuICAgICAgfVxuXG4gICAgICAvKiBwYXBlci1kcm9wZG93bi1tZW51IGFuZCBwYXBlci1kcm9wZG93bi1tZW51LWxpZ2h0IGJvdGggZGVsZWdhdGUgZm9jdXNcbiAgICAgICAqIHRvIG90aGVyIGludGVybmFsIGVsZW1lbnRzIHdoaWNoIG1hbmFnZSBmb2N1cyBzdHlsaW5nLiAqL1xuICAgICAgOmhvc3QoOmZvY3VzKSB7XG4gICAgICAgIG91dGxpbmU6IG5vbmU7XG4gICAgICB9XG5cbiAgICAgIDpob3N0KDpkaXIocnRsKSkge1xuICAgICAgICB0ZXh0LWFsaWduOiByaWdodDtcblxuICAgICAgICBAYXBwbHkoLS1wYXBlci1kcm9wZG93bi1tZW51KTtcbiAgICAgIH1cblxuICAgICAgOmhvc3QoW2Rpc2FibGVkXSkge1xuICAgICAgICBAYXBwbHkgLS1wYXBlci1kcm9wZG93bi1tZW51LWRpc2FibGVkO1xuICAgICAgfVxuXG4gICAgICA6aG9zdChbbm9pbmtdKSBwYXBlci1yaXBwbGUge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfVxuXG4gICAgICA6aG9zdChbbm8tbGFiZWwtZmxvYXRdKSBwYXBlci1yaXBwbGUge1xuICAgICAgICB0b3A6IDhweDtcbiAgICAgIH1cblxuICAgICAgcGFwZXItcmlwcGxlIHtcbiAgICAgICAgdG9wOiAxMnB4O1xuICAgICAgICBsZWZ0OiAwcHg7XG4gICAgICAgIGJvdHRvbTogOHB4O1xuICAgICAgICByaWdodDogMHB4O1xuXG4gICAgICAgIEBhcHBseSAtLXBhcGVyLWRyb3Bkb3duLW1lbnUtcmlwcGxlO1xuICAgICAgfVxuXG4gICAgICBwYXBlci1tZW51LWJ1dHRvbiB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBwYWRkaW5nOiAwO1xuXG4gICAgICAgIEBhcHBseSAtLXBhcGVyLWRyb3Bkb3duLW1lbnUtYnV0dG9uO1xuICAgICAgfVxuXG4gICAgICBwYXBlci1pbnB1dCB7XG4gICAgICAgIEBhcHBseSAtLXBhcGVyLWRyb3Bkb3duLW1lbnUtaW5wdXQ7XG4gICAgICB9XG5cbiAgICAgIGlyb24taWNvbiB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1kaXNhYmxlZC10ZXh0LWNvbG9yKTtcblxuICAgICAgICBAYXBwbHkgLS1wYXBlci1kcm9wZG93bi1tZW51LWljb247XG4gICAgICB9XG4gICAgPC9zdHlsZT5cbiAgPC90ZW1wbGF0ZT5cbjwvZG9tLW1vZHVsZT4nLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoR2EuY29udGVudCk7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpjb25zdCBXYT10cihIVE1MRWxlbWVudCk7SXIoe190ZW1wbGF0ZTpfZWAKICAgIDxzdHlsZSBpbmNsdWRlPSJwYXBlci1kcm9wZG93bi1tZW51LXNoYXJlZC1zdHlsZXMiPjwvc3R5bGU+CgogICAgPHBhcGVyLW1lbnUtYnV0dG9uIGlkPSJtZW51QnV0dG9uIiB2ZXJ0aWNhbC1hbGlnbj0iW1t2ZXJ0aWNhbEFsaWduXV0iIGhvcml6b250YWwtYWxpZ249IltbaG9yaXpvbnRhbEFsaWduXV0iIGR5bmFtaWMtYWxpZ249IltbZHluYW1pY0FsaWduXV0iIHZlcnRpY2FsLW9mZnNldD0iW1tfY29tcHV0ZU1lbnVWZXJ0aWNhbE9mZnNldChub0xhYmVsRmxvYXQsIHZlcnRpY2FsT2Zmc2V0KV1dIiBkaXNhYmxlZD0iW1tkaXNhYmxlZF1dIiBuby1hbmltYXRpb25zPSJbW25vQW5pbWF0aW9uc11dIiBvbi1pcm9uLXNlbGVjdD0iX29uSXJvblNlbGVjdCIgb24taXJvbi1kZXNlbGVjdD0iX29uSXJvbkRlc2VsZWN0IiBvcGVuZWQ9Int7b3BlbmVkfX0iIGNsb3NlLW9uLWFjdGl2YXRlIGFsbG93LW91dHNpZGUtc2Nyb2xsPSJbW2FsbG93T3V0c2lkZVNjcm9sbF1dIiByZXN0b3JlLWZvY3VzLW9uLWNsb3NlPSJbW3Jlc3RvcmVGb2N1c09uQ2xvc2VdXSIgZXhwYW5kLXNpemluZy10YXJnZXQtZm9yLXNjcm9sbGJhcnM9IltbZXhwYW5kU2l6aW5nVGFyZ2V0Rm9yU2Nyb2xsYmFyc11dIj4KICAgICAgPCEtLSBzdXBwb3J0IGh5YnJpZCBtb2RlOiB1c2VyIG1pZ2h0IGJlIHVzaW5nIHBhcGVyLW1lbnUtYnV0dG9uIDEueCB3aGljaCBkaXN0cmlidXRlcyB2aWEgPGNvbnRlbnQ+IC0tPgogICAgICA8ZGl2IGNsYXNzPSJkcm9wZG93bi10cmlnZ2VyIiBzbG90PSJkcm9wZG93bi10cmlnZ2VyIj4KICAgICAgICA8cGFwZXItcmlwcGxlPjwvcGFwZXItcmlwcGxlPgogICAgICAgIDwhLS0gcGFwZXItaW5wdXQgaGFzIHR5cGU9InRleHQiIGZvciBhMTF5LCBkbyBub3QgcmVtb3ZlIC0tPgogICAgICAgIDxwYXBlci1pbnB1dCBpZD0iaW5wdXQiIHR5cGU9InRleHQiIGludmFsaWQ9IltbaW52YWxpZF1dIiByZWFkb25seSBkaXNhYmxlZD0iW1tkaXNhYmxlZF1dIiB2YWx1ZT0iW1t2YWx1ZV1dIiBwbGFjZWhvbGRlcj0iW1twbGFjZWhvbGRlcl1dIiBlcnJvci1tZXNzYWdlPSJbW2Vycm9yTWVzc2FnZV1dIiBhbHdheXMtZmxvYXQtbGFiZWw9IltbYWx3YXlzRmxvYXRMYWJlbF1dIiBuby1sYWJlbC1mbG9hdD0iW1tub0xhYmVsRmxvYXRdXSIgbGFiZWw9IltbbGFiZWxdXSIgaW5wdXQtcm9sZT0iYnV0dG9uIiBpbnB1dC1hcmlhLWhhc3BvcHVwPSJsaXN0Ym94IiBhdXRvY29tcGxldGU9Im9mZiI+CiAgICAgICAgICA8IS0tIHN1cHBvcnQgaHlicmlkIG1vZGU6IHVzZXIgbWlnaHQgYmUgdXNpbmcgcGFwZXItaW5wdXQgMS54IHdoaWNoIGRpc3RyaWJ1dGVzIHZpYSA8Y29udGVudD4gLS0+CiAgICAgICAgICA8aXJvbi1pY29uIGljb249InBhcGVyLWRyb3Bkb3duLW1lbnU6YXJyb3ctZHJvcC1kb3duIiBzdWZmaXggc2xvdD0ic3VmZml4Ij48L2lyb24taWNvbj4KICAgICAgICA8L3BhcGVyLWlucHV0PgogICAgICA8L2Rpdj4KICAgICAgPHNsb3QgaWQ9ImNvbnRlbnQiIG5hbWU9ImRyb3Bkb3duLWNvbnRlbnQiIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiPjwvc2xvdD4KICAgIDwvcGFwZXItbWVudS1idXR0b24+CmAsaXM6InBhcGVyLWRyb3Bkb3duLW1lbnUiLGJlaGF2aW9yczpbWW8sV28saWEsb2FdLHByb3BlcnRpZXM6e3NlbGVjdGVkSXRlbUxhYmVsOnt0eXBlOlN0cmluZyxub3RpZnk6ITAscmVhZE9ubHk6ITB9LHNlbGVjdGVkSXRlbTp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwLHJlYWRPbmx5OiEwfSx2YWx1ZTp7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxsYWJlbDp7dHlwZTpTdHJpbmd9LHBsYWNlaG9sZGVyOnt0eXBlOlN0cmluZ30sZXJyb3JNZXNzYWdlOnt0eXBlOlN0cmluZ30sb3BlbmVkOnt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwLHZhbHVlOiExLG9ic2VydmVyOiJfb3BlbmVkQ2hhbmdlZCJ9LGFsbG93T3V0c2lkZVNjcm9sbDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxub0xhYmVsRmxvYXQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LGFsd2F5c0Zsb2F0TGFiZWw6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sbm9BbmltYXRpb25zOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGhvcml6b250YWxBbGlnbjp7dHlwZTpTdHJpbmcsdmFsdWU6InJpZ2h0In0sdmVydGljYWxBbGlnbjp7dHlwZTpTdHJpbmcsdmFsdWU6InRvcCJ9LHZlcnRpY2FsT2Zmc2V0Ok51bWJlcixkeW5hbWljQWxpZ246e3R5cGU6Qm9vbGVhbn0scmVzdG9yZUZvY3VzT25DbG9zZTp7dHlwZTpCb29sZWFuLHZhbHVlOiEwfSxleHBhbmRTaXppbmdUYXJnZXRGb3JTY3JvbGxiYXJzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9fSxsaXN0ZW5lcnM6e3RhcDoiX29uVGFwIn0sa2V5QmluZGluZ3M6eyJ1cCBkb3duIjoib3BlbiIsZXNjOiJjbG9zZSJ9LG9ic2VydmVyczpbIl9zZWxlY3RlZEl0ZW1DaGFuZ2VkKHNlbGVjdGVkSXRlbSkiXSxfYXR0YWNoRG9tKHQpe2NvbnN0IGU9WSh0aGlzKTtyZXR1cm4gZS5hdHRhY2hTaGFkb3coe21vZGU6Im9wZW4iLGRlbGVnYXRlc0ZvY3VzOiEwLHNoYWR5VXBncmFkZUZyYWdtZW50OnR9KSxlLnNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQodCksV2EucHJvdG90eXBlLl9hdHRhY2hEb20uY2FsbCh0aGlzLHQpfSxmb2N1cygpe3RoaXMuJC5pbnB1dC5fZm9jdXNhYmxlRWxlbWVudC5mb2N1cygpfSxhdHRhY2hlZDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuY29udGVudEVsZW1lbnQ7dCYmdC5zZWxlY3RlZEl0ZW0mJnRoaXMuX3NldFNlbGVjdGVkSXRlbSh0LnNlbGVjdGVkSXRlbSl9LGdldCBjb250ZW50RWxlbWVudCgpe2Zvcih2YXIgdD1xaSh0aGlzLiQuY29udGVudCkuZ2V0RGlzdHJpYnV0ZWROb2RlcygpLGU9MCxuPXQubGVuZ3RoO2U8bjtlKyspaWYodFtlXS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFKXJldHVybiB0W2VdfSxvcGVuOmZ1bmN0aW9uKCl7dGhpcy4kLm1lbnVCdXR0b24ub3BlbigpfSxjbG9zZTpmdW5jdGlvbigpe3RoaXMuJC5tZW51QnV0dG9uLmNsb3NlKCl9LF9vbklyb25TZWxlY3Q6ZnVuY3Rpb24odCl7dGhpcy5fc2V0U2VsZWN0ZWRJdGVtKHQuZGV0YWlsLml0ZW0pfSxfb25Jcm9uRGVzZWxlY3Q6ZnVuY3Rpb24odCl7dGhpcy5fc2V0U2VsZWN0ZWRJdGVtKG51bGwpfSxfb25UYXA6ZnVuY3Rpb24odCl7aGkodCk9PT10aGlzJiZ0aGlzLm9wZW4oKX0sX3NlbGVjdGVkSXRlbUNoYW5nZWQ6ZnVuY3Rpb24odCl7dmFyIGU7ZT10P3QubGFiZWx8fHQuZ2V0QXR0cmlidXRlKCJsYWJlbCIpfHx0LnRleHRDb250ZW50LnRyaW0oKToiIix0aGlzLnZhbHVlPWUsdGhpcy5fc2V0U2VsZWN0ZWRJdGVtTGFiZWwoZSl9LF9jb21wdXRlTWVudVZlcnRpY2FsT2Zmc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV8fCh0Py00OjgpfSxfZ2V0VmFsaWRpdHk6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGlzYWJsZWR8fCF0aGlzLnJlcXVpcmVkfHx0aGlzLnJlcXVpcmVkJiYhIXRoaXMudmFsdWV9LF9vcGVuZWRDaGFuZ2VkOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jb250ZW50RWxlbWVudDt0JiZ0LnNldEF0dHJpYnV0ZSgiYXJpYS1leHBhbmRlZCIsdGhpcy5vcGVuZWQ/InRydWUiOiJmYWxzZSIpfX0pOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KdmFyIHFhPXtvdXRlclNjcm9sbDp7c2Nyb2xsOiEwfSxzaGFkb3dNb2RlOntzdGFuZGFyZDoyLHdhdGVyZmFsbDoxLCJ3YXRlcmZhbGwtdGFsbCI6MX0sdGFsbE1vZGU6eyJ3YXRlcmZhbGwtdGFsbCI6ITB9fTtJcih7X3RlbXBsYXRlOl9lYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LXZlcnRpY2FsOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaGVhZGVyLXBhbmVsOwogICAgICB9CgogICAgICAjbWFpbkNvbnRhaW5lciB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXg7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgICAgIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDsKICAgICAgfQoKICAgICAgI21haW5QYW5lbCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LXZlcnRpY2FsOwogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtaW4taGVpZ2h0OiAwOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWhlYWRlci1wYW5lbC1ib2R5OwogICAgICB9CgogICAgICAjbWFpbkNvbnRhaW5lciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaGVhZGVyLXBhbmVsLWNvbnRhaW5lcjsKICAgICAgfQoKICAgICAgLyoKICAgICAgICogbW9kZTogc2Nyb2xsCiAgICAgICAqLwogICAgICA6aG9zdChbbW9kZT1zY3JvbGxdKSAjbWFpbkNvbnRhaW5lciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaGVhZGVyLXBhbmVsLXNjcm9sbC1jb250YWluZXI7CiAgICAgICAgb3ZlcmZsb3c6IHZpc2libGU7CiAgICAgIH0KCiAgICAgIDpob3N0KFttb2RlPXNjcm9sbF0pIHsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7CiAgICAgIH0KCiAgICAgIC8qCiAgICAgICAqIG1vZGU6IGNvdmVyCiAgICAgICAqLwogICAgICA6aG9zdChbbW9kZT1jb3Zlcl0pICNtYWluQ29udGFpbmVyIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1oZWFkZXItcGFuZWwtY292ZXItY29udGFpbmVyOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgIH0KCiAgICAgIDpob3N0KFttb2RlPWNvdmVyXSkgI21haW5QYW5lbCB7CiAgICAgICAgcG9zaXRpb246IHN0YXRpYzsKICAgICAgfQoKICAgICAgLyoKICAgICAgICogbW9kZTogc3RhbmRhcmQKICAgICAgICovCiAgICAgIDpob3N0KFttb2RlPXN0YW5kYXJkXSkgI21haW5Db250YWluZXIgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWhlYWRlci1wYW5lbC1zdGFuZGFyZC1jb250YWluZXI7CiAgICAgIH0KCiAgICAgIC8qCiAgICAgICAqIG1vZGU6IHNlYW1lZAogICAgICAgKi8KICAgICAgOmhvc3QoW21vZGU9c2VhbWVkXSkgI21haW5Db250YWluZXIgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWhlYWRlci1wYW5lbC1zZWFtZWQtY29udGFpbmVyOwogICAgICB9CgoKICAgICAgLyoKICAgICAgICogbW9kZTogd2F0ZXJmYWxsCiAgICAgICAqLwogICAgICA6aG9zdChbbW9kZT13YXRlcmZhbGxdKSAjbWFpbkNvbnRhaW5lciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaGVhZGVyLXBhbmVsLXdhdGVyZmFsbC1jb250YWluZXI7CiAgICAgIH0KCiAgICAgIC8qCiAgICAgICAqIG1vZGU6IHdhdGVyZmFsbC10YWxsCiAgICAgICAqLwogICAgICA6aG9zdChbbW9kZT13YXRlcmZhbGwtdGFsbF0pICNtYWluQ29udGFpbmVyIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1oZWFkZXItcGFuZWwtd2F0ZXJmYWxsLXRhbGwtY29udGFpbmVyOwogICAgICB9CgogICAgICAjZHJvcFNoYWRvdyB7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjVzOwogICAgICAgIGhlaWdodDogNnB4OwogICAgICAgIGJveC1zaGFkb3c6IGluc2V0IDBweCA1cHggNnB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjQpOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWhlYWRlci1wYW5lbC1zaGFkb3c7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgICNkcm9wU2hhZG93Lmhhcy1zaGFkb3cgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgIH0KCiAgICAgICNtYWluQ29udGFpbmVyID4gOjpzbG90dGVkKC5maXQpIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZml0OwogICAgICB9CgogICAgPC9zdHlsZT4KCiAgICA8c2xvdCBpZD0iaGVhZGVyU2xvdCIgbmFtZT0iaGVhZGVyIj48L3Nsb3Q+CgogICAgPGRpdiBpZD0ibWFpblBhbmVsIj4KICAgICAgPGRpdiBpZD0ibWFpbkNvbnRhaW5lciIgY2xhc3NcJD0iW1tfY29tcHV0ZU1haW5Db250YWluZXJDbGFzcyhtb2RlKV1dIj4KICAgICAgICA8c2xvdD48L3Nsb3Q+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGlkPSJkcm9wU2hhZG93Ij48L2Rpdj4KICAgIDwvZGl2PgpgLGlzOiJwYXBlci1oZWFkZXItcGFuZWwiLHByb3BlcnRpZXM6e21vZGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJzdGFuZGFyZCIsb2JzZXJ2ZXI6Il9tb2RlQ2hhbmdlZCIscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxzaGFkb3c6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sdGFsbENsYXNzOnt0eXBlOlN0cmluZyx2YWx1ZToidGFsbCJ9LGF0VG9wOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITAsbm90aWZ5OiEwLHJlYWRPbmx5OiEwLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH19LG9ic2VydmVyczpbIl9jb21wdXRlRHJvcFNoYWRvd0hpZGRlbihhdFRvcCwgbW9kZSwgc2hhZG93KSJdLGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fYWRkTGlzdGVuZXIoKSx0aGlzLl9rZWVwU2Nyb2xsaW5nU3RhdGUoKX0sZGV0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9yZW1vdmVMaXN0ZW5lcigpfSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuc2Nyb2xsSGFuZGxlcj10aGlzLl9zY3JvbGwuYmluZCh0aGlzKSxjb25zb2xlLndhcm4odGhpcy5pcywiaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBhcHAtbGF5b3V0IGluc3RlYWQhIil9LGdldCBoZWFkZXIoKXtyZXR1cm4gcWkodGhpcy4kLmhlYWRlclNsb3QpLmdldERpc3RyaWJ1dGVkTm9kZXMoKVswXX0sZ2V0IHNjcm9sbGVyKCl7cmV0dXJuIHRoaXMuX2dldFNjcm9sbGVyRm9yTW9kZSh0aGlzLm1vZGUpfSxnZXQgdmlzaWJsZVNoYWRvdygpe3JldHVybiB0aGlzLiQuZHJvcFNoYWRvdy5jbGFzc0xpc3QuY29udGFpbnMoImhhcy1zaGFkb3ciKX0sX2NvbXB1dGVEcm9wU2hhZG93SGlkZGVuOmZ1bmN0aW9uKHQsZSxuKXt2YXIgaT1xYS5zaGFkb3dNb2RlW2VdO3RoaXMudG9nZ2xlQ2xhc3MoImhhcy1zaGFkb3ciLCEhdGhpcy5zaGFkb3d8fDI9PT1pfHwxPT09aSYmIXQsdGhpcy4kLmRyb3BTaGFkb3cpfSxfY29tcHV0ZU1haW5Db250YWluZXJDbGFzczpmdW5jdGlvbih0KXt2YXIgZT17fTtyZXR1cm4gZS5mbGV4PSJjb3ZlciIhPT10LE9iamVjdC5rZXlzKGUpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIGVbdF19KSkuam9pbigiICIpfSxfYWRkTGlzdGVuZXI6ZnVuY3Rpb24oKXt0aGlzLnNjcm9sbGVyLmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsdGhpcy5zY3JvbGxIYW5kbGVyKX0sX3JlbW92ZUxpc3RlbmVyOmZ1bmN0aW9uKCl7dGhpcy5zY3JvbGxlci5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuc2Nyb2xsSGFuZGxlcil9LF9tb2RlQ2hhbmdlZDpmdW5jdGlvbih0LGUpe3ZhciBuPXFhLGk9dGhpcy5oZWFkZXI7aSYmKG4udGFsbE1vZGVbZV0mJiFuLnRhbGxNb2RlW3RdPyhpLmNsYXNzTGlzdC5yZW1vdmUodGhpcy50YWxsQ2xhc3MpLHRoaXMuYXN5bmMoKGZ1bmN0aW9uKCl7aS5jbGFzc0xpc3QucmVtb3ZlKCJhbmltYXRlIil9KSwyMDApKTp0aGlzLnRvZ2dsZUNsYXNzKCJhbmltYXRlIixuLnRhbGxNb2RlW3RdLGkpKSx0aGlzLl9rZWVwU2Nyb2xsaW5nU3RhdGUoKX0sX2tlZXBTY3JvbGxpbmdTdGF0ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuc2Nyb2xsZXIsZT10aGlzLmhlYWRlcjt0aGlzLl9zZXRBdFRvcCgwPT09dC5zY3JvbGxUb3ApLGUmJnRoaXMudGFsbENsYXNzJiZxYS50YWxsTW9kZVt0aGlzLm1vZGVdJiZ0aGlzLnRvZ2dsZUNsYXNzKHRoaXMudGFsbENsYXNzLHRoaXMuYXRUb3B8fGUuY2xhc3NMaXN0LmNvbnRhaW5zKHRoaXMudGFsbENsYXNzKSYmdC5zY3JvbGxIZWlnaHQ8dGhpcy5vZmZzZXRIZWlnaHQsZSl9LF9zY3JvbGw6ZnVuY3Rpb24oKXt0aGlzLl9rZWVwU2Nyb2xsaW5nU3RhdGUoKSx0aGlzLmZpcmUoImNvbnRlbnQtc2Nyb2xsIix7dGFyZ2V0OnRoaXMuc2Nyb2xsZXJ9LHtidWJibGVzOiExfSl9LF9nZXRTY3JvbGxlckZvck1vZGU6ZnVuY3Rpb24odCl7cmV0dXJuIHFhLm91dGVyU2Nyb2xsW3RdP3RoaXM6dGhpcy4kLm1haW5Db250YWluZXJ9fSksCi8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpJcih7aXM6InBhcGVyLWljb24tYnV0dG9uIixfdGVtcGxhdGU6X2VgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHotaW5kZXg6IDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE7CgogICAgICAgIHdpZHRoOiA0MHB4OwogICAgICAgIGhlaWdodDogNDBweDsKCiAgICAgICAgLyoKICAgICAgICAgIE5PVEU6IEJvdGggdmFsdWVzIGFyZSBuZWVkZWQsIHNpbmNlIHNvbWUgcGhvbmVzIHJlcXVpcmUgdGhlIHZhbHVlIHRvCiAgICAgICAgICBiZSBcYHRyYW5zcGFyZW50XGAuCiAgICAgICAgKi8KICAgICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCk7CiAgICAgICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDsKCiAgICAgICAgLyogQmVjYXVzZSBvZiBwb2x5bWVyLzI1NTgsIHRoaXMgc3R5bGUgaGFzIGxvd2VyIHNwZWNpZmljaXR5IHRoYW4gKiAqLwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3ggIWltcG9ydGFudDsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaWNvbi1idXR0b247CiAgICAgIH0KCiAgICAgIDpob3N0ICNpbmsgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pY29uLWJ1dHRvbi1pbmstY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgICAgIG9wYWNpdHk6IDAuNjsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pY29uLWJ1dHRvbi1kaXNhYmxlZC10ZXh0LCB2YXIoLS1kaXNhYmxlZC10ZXh0LWNvbG9yKSk7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgY3Vyc29yOiBhdXRvOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1pY29uLWJ1dHRvbi1kaXNhYmxlZDsKICAgICAgfQoKICAgICAgOmhvc3QoW2hpZGRlbl0pIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIDpob3N0KDpob3ZlcikgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWljb24tYnV0dG9uLWhvdmVyOwogICAgICB9CgogICAgICBpcm9uLWljb24gewogICAgICAgIC0taXJvbi1pY29uLXdpZHRoOiAxMDAlOwogICAgICAgIC0taXJvbi1pY29uLWhlaWdodDogMTAwJTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8aXJvbi1pY29uIGlkPSJpY29uIiBzcmM9Iltbc3JjXV0iIGljb249IltbaWNvbl1dIgogICAgICAgICAgICAgICBhbHQkPSJbW2FsdF1dIj48L2lyb24taWNvbj4KICBgLGhvc3RBdHRyaWJ1dGVzOntyb2xlOiJidXR0b24iLHRhYmluZGV4OiIwIn0sYmVoYXZpb3JzOltsYV0scmVnaXN0ZXJlZDpmdW5jdGlvbigpe3RoaXMuX3RlbXBsYXRlLnNldEF0dHJpYnV0ZSgic3RyaXAtd2hpdGVzcGFjZSIsIiIpfSxwcm9wZXJ0aWVzOntzcmM6e3R5cGU6U3RyaW5nfSxpY29uOnt0eXBlOlN0cmluZ30sYWx0Ont0eXBlOlN0cmluZyxvYnNlcnZlcjoiX2FsdENoYW5nZWQifX0sX2FsdENoYW5nZWQ6ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLmdldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIpO24mJmUhPW58fHRoaXMuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIix0KX19KSwKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCklyKHtfdGVtcGxhdGU6X2VgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiA0MDBweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZDsKICAgICAgICBwYWRkaW5nOiAycHg7CiAgICAgICAgLW1vei1hcHBlYXJhbmNlOiB0ZXh0YXJlYTsKICAgICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IHRleHRhcmVhOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5taXJyb3ItdGV4dCB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgICBAYXBwbHkgLS1pcm9uLWF1dG9ncm93LXRleHRhcmVhOwogICAgICB9CgogICAgICAuZml0IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZml0OwogICAgICB9CgogICAgICB0ZXh0YXJlYSB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIHJlc2l6ZTogbm9uZTsKICAgICAgICBiYWNrZ3JvdW5kOiBpbmhlcml0OwogICAgICAgIGNvbG9yOiBpbmhlcml0OwogICAgICAgIC8qIHNlZSBjb21tZW50cyBpbiB0ZW1wbGF0ZSAqLwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBmb250LXNpemU6IGluaGVyaXQ7CiAgICAgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CiAgICAgICAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7CiAgICAgICAgdGV4dC1hbGlnbjogaW5oZXJpdDsKICAgICAgICBAYXBwbHkgLS1pcm9uLWF1dG9ncm93LXRleHRhcmVhOwogICAgICB9CgogICAgICB0ZXh0YXJlYTo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7CiAgICAgICAgQGFwcGx5IC0taXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYS1wbGFjZWhvbGRlcjsKICAgICAgfQoKICAgICAgdGV4dGFyZWE6LW1vei1wbGFjZWhvbGRlciB7CiAgICAgICAgQGFwcGx5IC0taXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYS1wbGFjZWhvbGRlcjsKICAgICAgfQoKICAgICAgdGV4dGFyZWE6Oi1tb3otcGxhY2Vob2xkZXIgewogICAgICAgIEBhcHBseSAtLWlyb24tYXV0b2dyb3ctdGV4dGFyZWEtcGxhY2Vob2xkZXI7CiAgICAgIH0KCiAgICAgIHRleHRhcmVhOi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7CiAgICAgICAgQGFwcGx5IC0taXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYS1wbGFjZWhvbGRlcjsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8IS0tIHRoZSBtaXJyb3Igc2l6ZXMgdGhlIGlucHV0L3RleHRhcmVhIHNvIGl0IGdyb3dzIHdpdGggdHlwaW5nIC0tPgogICAgPCEtLSB1c2UgJiMxNjA7IGluc3RlYWQgJm5ic3A7IG9mIHRvIGFsbG93IHRoaXMgZWxlbWVudCB0byBiZSB1c2VkIGluIFhIVE1MIC0tPgogICAgPGRpdiBpZD0ibWlycm9yIiBjbGFzcz0ibWlycm9yLXRleHQiIGFyaWEtaGlkZGVuPSJ0cnVlIj4mbmJzcDs8L2Rpdj4KCiAgICA8IS0tIHNpemUgdGhlIGlucHV0L3RleHRhcmVhIHdpdGggYSBkaXYsIGJlY2F1c2UgdGhlIHRleHRhcmVhIGhhcyBpbnRyaW5zaWMgc2l6ZSBpbiBmZiAtLT4KICAgIDxkaXYgY2xhc3M9InRleHRhcmVhLWNvbnRhaW5lciBmaXQiPgogICAgICA8dGV4dGFyZWEgaWQ9InRleHRhcmVhIiBuYW1lJD0iW1tuYW1lXV0iIGFyaWEtbGFiZWwkPSJbW2xhYmVsXV0iIGF1dG9jb21wbGV0ZSQ9IltbYXV0b2NvbXBsZXRlXV0iIGF1dG9mb2N1cyQ9IltbYXV0b2ZvY3VzXV0iIGF1dG9jYXBpdGFsaXplJD0iW1thdXRvY2FwaXRhbGl6ZV1dIiBpbnB1dG1vZGUkPSJbW2lucHV0bW9kZV1dIiBwbGFjZWhvbGRlciQ9IltbcGxhY2Vob2xkZXJdXSIgcmVhZG9ubHkkPSJbW3JlYWRvbmx5XV0iIHJlcXVpcmVkJD0iW1tyZXF1aXJlZF1dIiBkaXNhYmxlZCQ9IltbZGlzYWJsZWRdXSIgcm93cyQ9Iltbcm93c11dIiBtaW5sZW5ndGgkPSJbW21pbmxlbmd0aF1dIiBtYXhsZW5ndGgkPSJbW21heGxlbmd0aF1dIj48L3RleHRhcmVhPgogICAgPC9kaXY+CmAsaXM6Imlyb24tYXV0b2dyb3ctdGV4dGFyZWEiLGJlaGF2aW9yczpbb2EsV29dLHByb3BlcnRpZXM6e3ZhbHVlOntvYnNlcnZlcjoiX3ZhbHVlQ2hhbmdlZCIsdHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxiaW5kVmFsdWU6e29ic2VydmVyOiJfYmluZFZhbHVlQ2hhbmdlZCIsdHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxyb3dzOnt0eXBlOk51bWJlcix2YWx1ZToxLG9ic2VydmVyOiJfdXBkYXRlQ2FjaGVkIn0sbWF4Um93czp7dHlwZTpOdW1iZXIsdmFsdWU6MCxvYnNlcnZlcjoiX3VwZGF0ZUNhY2hlZCJ9LGF1dG9jb21wbGV0ZTp7dHlwZTpTdHJpbmcsdmFsdWU6Im9mZiJ9LGF1dG9mb2N1czp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxhdXRvY2FwaXRhbGl6ZTp7dHlwZTpTdHJpbmcsdmFsdWU6Im5vbmUifSxpbnB1dG1vZGU6e3R5cGU6U3RyaW5nfSxwbGFjZWhvbGRlcjp7dHlwZTpTdHJpbmd9LHJlYWRvbmx5Ont0eXBlOlN0cmluZ30scmVxdWlyZWQ6e3R5cGU6Qm9vbGVhbn0sbWlubGVuZ3RoOnt0eXBlOk51bWJlcn0sbWF4bGVuZ3RoOnt0eXBlOk51bWJlcn0sbGFiZWw6e3R5cGU6U3RyaW5nfX0sbGlzdGVuZXJzOntpbnB1dDoiX29uSW5wdXQifSxnZXQgdGV4dGFyZWEoKXtyZXR1cm4gdGhpcy4kLnRleHRhcmVhfSxnZXQgc2VsZWN0aW9uU3RhcnQoKXtyZXR1cm4gdGhpcy4kLnRleHRhcmVhLnNlbGVjdGlvblN0YXJ0fSxnZXQgc2VsZWN0aW9uRW5kKCl7cmV0dXJuIHRoaXMuJC50ZXh0YXJlYS5zZWxlY3Rpb25FbmR9LHNldCBzZWxlY3Rpb25TdGFydCh0KXt0aGlzLiQudGV4dGFyZWEuc2VsZWN0aW9uU3RhcnQ9dH0sc2V0IHNlbGVjdGlvbkVuZCh0KXt0aGlzLiQudGV4dGFyZWEuc2VsZWN0aW9uRW5kPXR9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7bmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVAoPzpbb2FdZHxob25lKS8pJiYhbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvT1MgMVszNDU2Nzg5XS8pJiYodGhpcy4kLnRleHRhcmVhLnN0eWxlLm1hcmdpbkxlZnQ9Ii0zcHgiKX0sdmFsaWRhdGU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLiQudGV4dGFyZWEudmFsaWRpdHkudmFsaWQ7cmV0dXJuIHQmJih0aGlzLnJlcXVpcmVkJiYiIj09PXRoaXMudmFsdWU/dD0hMTp0aGlzLmhhc1ZhbGlkYXRvcigpJiYodD1vYS52YWxpZGF0ZS5jYWxsKHRoaXMsdGhpcy52YWx1ZSkpKSx0aGlzLmludmFsaWQ9IXQsdGhpcy5maXJlKCJpcm9uLWlucHV0LXZhbGlkYXRlIiksdH0sX2JpbmRWYWx1ZUNoYW5nZWQ6ZnVuY3Rpb24odCl7dGhpcy52YWx1ZT10fSxfdmFsdWVDaGFuZ2VkOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMudGV4dGFyZWE7ZSYmKGUudmFsdWUhPT10JiYoZS52YWx1ZT10fHwwPT09dD90OiIiKSx0aGlzLmJpbmRWYWx1ZT10LHRoaXMuJC5taXJyb3IuaW5uZXJIVE1MPXRoaXMuX3ZhbHVlRm9yTWlycm9yKCksdGhpcy5maXJlKCJiaW5kLXZhbHVlLWNoYW5nZWQiLHt2YWx1ZTp0aGlzLmJpbmRWYWx1ZX0pKX0sX29uSW5wdXQ6ZnVuY3Rpb24odCl7dmFyIGU9cWkodCkucGF0aDt0aGlzLnZhbHVlPWU/ZVswXS52YWx1ZTp0LnRhcmdldC52YWx1ZX0sX2NvbnN0cmFpbjpmdW5jdGlvbih0KXt2YXIgZTtmb3IodD10fHxbIiJdLGU9dGhpcy5tYXhSb3dzPjAmJnQubGVuZ3RoPnRoaXMubWF4Um93cz90LnNsaWNlKDAsdGhpcy5tYXhSb3dzKTp0LnNsaWNlKDApO3RoaXMucm93cz4wJiZlLmxlbmd0aDx0aGlzLnJvd3M7KWUucHVzaCgiIik7cmV0dXJuIGUuam9pbigiPGJyLz4iKSsiJiMxNjA7In0sX3ZhbHVlRm9yTWlycm9yOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy50ZXh0YXJlYTtpZih0KXJldHVybiB0aGlzLnRva2Vucz10JiZ0LnZhbHVlP3QudmFsdWUucmVwbGFjZSgvJi9nbSwiJmFtcDsiKS5yZXBsYWNlKC8iL2dtLCImcXVvdDsiKS5yZXBsYWNlKC8nL2dtLCImIzM5OyIpLnJlcGxhY2UoLzwvZ20sIiZsdDsiKS5yZXBsYWNlKC8+L2dtLCImZ3Q7Iikuc3BsaXQoIlxuIik6WyIiXSx0aGlzLl9jb25zdHJhaW4odGhpcy50b2tlbnMpfSxfdXBkYXRlQ2FjaGVkOmZ1bmN0aW9uKCl7dGhpcy4kLm1pcnJvci5pbm5lckhUTUw9dGhpcy5fY29uc3RyYWluKHRoaXMudG9rZW5zKX19KSwKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCklyKHtfdGVtcGxhdGU6X2VgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgOmhvc3QoW2hpZGRlbl0pIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIGxhYmVsIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8cGFwZXItaW5wdXQtY29udGFpbmVyIG5vLWxhYmVsLWZsb2F0JD0iW1tub0xhYmVsRmxvYXRdXSIgYWx3YXlzLWZsb2F0LWxhYmVsPSJbW19jb21wdXRlQWx3YXlzRmxvYXRMYWJlbChhbHdheXNGbG9hdExhYmVsLHBsYWNlaG9sZGVyKV1dIiBhdXRvLXZhbGlkYXRlJD0iW1thdXRvVmFsaWRhdGVdXSIgZGlzYWJsZWQkPSJbW2Rpc2FibGVkXV0iIGludmFsaWQ9IltbaW52YWxpZF1dIj4KCiAgICAgIDxsYWJlbCBoaWRkZW4kPSJbWyFsYWJlbF1dIiBhcmlhLWhpZGRlbj0idHJ1ZSIgZm9yJD0iW1tfaW5wdXRJZF1dIiBzbG90PSJsYWJlbCI+W1tsYWJlbF1dPC9sYWJlbD4KCiAgICAgIDxpcm9uLWF1dG9ncm93LXRleHRhcmVhIGNsYXNzPSJwYXBlci1pbnB1dC1pbnB1dCIgc2xvdD0iaW5wdXQiIGlkJD0iW1tfaW5wdXRJZF1dIiBhcmlhLWxhYmVsbGVkYnkkPSJbW19hcmlhTGFiZWxsZWRCeV1dIiBhcmlhLWRlc2NyaWJlZGJ5JD0iW1tfYXJpYURlc2NyaWJlZEJ5XV0iIGJpbmQtdmFsdWU9Int7dmFsdWV9fSIgaW52YWxpZD0ie3tpbnZhbGlkfX0iIHZhbGlkYXRvciQ9IltbdmFsaWRhdG9yXV0iIGRpc2FibGVkJD0iW1tkaXNhYmxlZF1dIiBhdXRvY29tcGxldGUkPSJbW2F1dG9jb21wbGV0ZV1dIiBhdXRvZm9jdXMkPSJbW2F1dG9mb2N1c11dIiBpbnB1dG1vZGUkPSJbW2lucHV0bW9kZV1dIiBuYW1lJD0iW1tuYW1lXV0iIHBsYWNlaG9sZGVyJD0iW1twbGFjZWhvbGRlcl1dIiByZWFkb25seSQ9IltbcmVhZG9ubHldXSIgcmVxdWlyZWQkPSJbW3JlcXVpcmVkXV0iIG1pbmxlbmd0aCQ9IltbbWlubGVuZ3RoXV0iIG1heGxlbmd0aCQ9IltbbWF4bGVuZ3RoXV0iIGF1dG9jYXBpdGFsaXplJD0iW1thdXRvY2FwaXRhbGl6ZV1dIiByb3dzJD0iW1tyb3dzXV0iIG1heC1yb3dzJD0iW1ttYXhSb3dzXV0iIG9uLWNoYW5nZT0iX29uQ2hhbmdlIj48L2lyb24tYXV0b2dyb3ctdGV4dGFyZWE+CgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbZXJyb3JNZXNzYWdlXV0iPgogICAgICAgIDxwYXBlci1pbnB1dC1lcnJvciBhcmlhLWxpdmU9ImFzc2VydGl2ZSIgc2xvdD0iYWRkLW9uIj5bW2Vycm9yTWVzc2FnZV1dPC9wYXBlci1pbnB1dC1lcnJvcj4KICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tjaGFyQ291bnRlcl1dIj4KICAgICAgICA8cGFwZXItaW5wdXQtY2hhci1jb3VudGVyIHNsb3Q9ImFkZC1vbiI+PC9wYXBlci1pbnB1dC1jaGFyLWNvdW50ZXI+CiAgICAgIDwvdGVtcGxhdGU+CgogICAgPC9wYXBlci1pbnB1dC1jb250YWluZXI+CmAsaXM6InBhcGVyLXRleHRhcmVhIixiZWhhdmlvcnM6W0hhLGlhXSxwcm9wZXJ0aWVzOntfYXJpYUxhYmVsbGVkQnk6e29ic2VydmVyOiJfYXJpYUxhYmVsbGVkQnlDaGFuZ2VkIix0eXBlOlN0cmluZ30sX2FyaWFEZXNjcmliZWRCeTp7b2JzZXJ2ZXI6Il9hcmlhRGVzY3JpYmVkQnlDaGFuZ2VkIix0eXBlOlN0cmluZ30sdmFsdWU6e3R5cGU6U3RyaW5nfSxyb3dzOnt0eXBlOk51bWJlcix2YWx1ZToxfSxtYXhSb3dzOnt0eXBlOk51bWJlcix2YWx1ZTowfX0sZ2V0IHNlbGVjdGlvblN0YXJ0KCl7cmV0dXJuIHRoaXMuJC5pbnB1dC50ZXh0YXJlYS5zZWxlY3Rpb25TdGFydH0sc2V0IHNlbGVjdGlvblN0YXJ0KHQpe3RoaXMuJC5pbnB1dC50ZXh0YXJlYS5zZWxlY3Rpb25TdGFydD10fSxnZXQgc2VsZWN0aW9uRW5kKCl7cmV0dXJuIHRoaXMuJC5pbnB1dC50ZXh0YXJlYS5zZWxlY3Rpb25FbmR9LHNldCBzZWxlY3Rpb25FbmQodCl7dGhpcy4kLmlucHV0LnRleHRhcmVhLnNlbGVjdGlvbkVuZD10fSxfYXJpYUxhYmVsbGVkQnlDaGFuZ2VkOmZ1bmN0aW9uKHQpe3RoaXMuX2ZvY3VzYWJsZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsbGVkYnkiLHQpfSxfYXJpYURlc2NyaWJlZEJ5Q2hhbmdlZDpmdW5jdGlvbih0KXt0aGlzLl9mb2N1c2FibGVFbGVtZW50LnNldEF0dHJpYnV0ZSgiYXJpYS1kZXNjcmliZWRieSIsdCl9LGdldCBfZm9jdXNhYmxlRWxlbWVudCgpe3JldHVybiB0aGlzLmlucHV0RWxlbWVudC50ZXh0YXJlYX19KTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCmNvbnN0IFlhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7WWEuc2V0QXR0cmlidXRlKCJzdHlsZSIsImRpc3BsYXk6IG5vbmU7IiksWWEuaW5uZXJIVE1MPSI8ZG9tLW1vZHVsZSBpZD1cInBhcGVyLWl0ZW0tc2hhcmVkLXN0eWxlc1wiPlxuICA8dGVtcGxhdGU+XG4gICAgPHN0eWxlPlxuICAgICAgOmhvc3QsIC5wYXBlci1pdGVtIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgbWluLWhlaWdodDogdmFyKC0tcGFwZXItaXRlbS1taW4taGVpZ2h0LCA0OHB4KTtcbiAgICAgICAgcGFkZGluZzogMHB4IDE2cHg7XG4gICAgICB9XG5cbiAgICAgIC5wYXBlci1pdGVtIHtcbiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1zdWJoZWFkO1xuICAgICAgICBib3JkZXI6bm9uZTtcbiAgICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgfVxuXG4gICAgICA6aG9zdChbaGlkZGVuXSksIC5wYXBlci1pdGVtW2hpZGRlbl0ge1xuICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gICAgICB9XG5cbiAgICAgIDpob3N0KC5pcm9uLXNlbGVjdGVkKSwgLnBhcGVyLWl0ZW0uaXJvbi1zZWxlY3RlZCB7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1wYXBlci1pdGVtLXNlbGVjdGVkLXdlaWdodCwgYm9sZCk7XG5cbiAgICAgICAgQGFwcGx5IC0tcGFwZXItaXRlbS1zZWxlY3RlZDtcbiAgICAgIH1cblxuICAgICAgOmhvc3QoW2Rpc2FibGVkXSksIC5wYXBlci1pdGVtW2Rpc2FibGVkXSB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pdGVtLWRpc2FibGVkLWNvbG9yLCB2YXIoLS1kaXNhYmxlZC10ZXh0LWNvbG9yKSk7XG5cbiAgICAgICAgQGFwcGx5IC0tcGFwZXItaXRlbS1kaXNhYmxlZDtcbiAgICAgIH1cblxuICAgICAgOmhvc3QoOmZvY3VzKSwgLnBhcGVyLWl0ZW06Zm9jdXMge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIG91dGxpbmU6IDA7XG5cbiAgICAgICAgQGFwcGx5IC0tcGFwZXItaXRlbS1mb2N1c2VkO1xuICAgICAgfVxuXG4gICAgICA6aG9zdCg6Zm9jdXMpOmJlZm9yZSwgLnBhcGVyLWl0ZW06Zm9jdXM6YmVmb3JlIHtcbiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZpdDtcblxuICAgICAgICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICBvcGFjaXR5OiB2YXIoLS1kYXJrLWRpdmlkZXItb3BhY2l0eSk7XG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuXG4gICAgICAgIEBhcHBseSAtLXBhcGVyLWl0ZW0tZm9jdXNlZC1iZWZvcmU7XG4gICAgICB9XG4gICAgPC9zdHlsZT5cbiAgPC90ZW1wbGF0ZT5cbjwvZG9tLW1vZHVsZT4iLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoWWEuY29udGVudCk7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpjb25zdCBYYT1bWW8sV28se2hvc3RBdHRyaWJ1dGVzOntyb2xlOiJvcHRpb24iLHRhYmluZGV4OiIwIn19XTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCklyKHtfdGVtcGxhdGU6X2VgCiAgICA8c3R5bGUgaW5jbHVkZT0icGFwZXItaXRlbS1zaGFyZWQtc3R5bGVzIj4KICAgICAgOmhvc3QgewogICAgICAgIEBhcHBseSAtLWxheW91dC1ob3Jpem9udGFsOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1zdWJoZWFkOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1pdGVtOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPHNsb3Q+PC9zbG90PgpgLGlzOiJwYXBlci1pdGVtIixiZWhhdmlvcnM6W1hhXX0pLAovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KSXIoe190ZW1wbGF0ZTpfZWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIG92ZXJmbG93OiBoaWRkZW47IC8qIG5lZWRlZCBmb3IgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXMgdG8gd29yayBvbiBmZiAqLwogICAgICAgIEBhcHBseSAtLWxheW91dC12ZXJ0aWNhbDsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyLWp1c3RpZmllZDsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZmxleDsKICAgICAgfQoKICAgICAgOmhvc3QoW3R3by1saW5lXSkgewogICAgICAgIG1pbi1oZWlnaHQ6IHZhcigtLXBhcGVyLWl0ZW0tYm9keS10d28tbGluZS1taW4taGVpZ2h0LCA3MnB4KTsKICAgICAgfQoKICAgICAgOmhvc3QoW3RocmVlLWxpbmVdKSB7CiAgICAgICAgbWluLWhlaWdodDogdmFyKC0tcGFwZXItaXRlbS1ib2R5LXRocmVlLWxpbmUtbWluLWhlaWdodCwgODhweCk7CiAgICAgIH0KCiAgICAgIDpob3N0ID4gOjpzbG90dGVkKCopIHsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KCiAgICAgIDpob3N0ID4gOjpzbG90dGVkKFtzZWNvbmRhcnldKSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1ib2R5MTsKCiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWl0ZW0tYm9keS1zZWNvbmRhcnktY29sb3IsIHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWl0ZW0tYm9keS1zZWNvbmRhcnk7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHNsb3Q+PC9zbG90PgpgLGlzOiJwYXBlci1pdGVtLWJvZHkifSksCi8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpJcih7X3RlbXBsYXRlOl9lYAogICAgPHN0eWxlIGluY2x1ZGU9InBhcGVyLWl0ZW0tc2hhcmVkLXN0eWxlcyI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIEBhcHBseSAtLWxheW91dC1ob3Jpem9udGFsOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1zdWJoZWFkOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1pdGVtOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWljb24taXRlbTsKICAgICAgfQoKICAgICAgLmNvbnRlbnQtaWNvbiB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWhvcml6b250YWw7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlcjsKCiAgICAgICAgd2lkdGg6IHZhcigtLXBhcGVyLWl0ZW0taWNvbi13aWR0aCwgNTZweCk7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaXRlbS1pY29uOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgaWQ9ImNvbnRlbnRJY29uIiBjbGFzcz0iY29udGVudC1pY29uIj4KICAgICAgPHNsb3QgbmFtZT0iaXRlbS1pY29uIj48L3Nsb3Q+CiAgICA8L2Rpdj4KICAgIDxzbG90Pjwvc2xvdD4KYCxpczoicGFwZXItaWNvbi1pdGVtIixiZWhhdmlvcnM6W1hhXX0pOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KY29uc3QgJGE9e3Byb3BlcnRpZXM6e211bHRpOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsb2JzZXJ2ZXI6Im11bHRpQ2hhbmdlZCJ9LHNlbGVjdGVkVmFsdWVzOnt0eXBlOkFycmF5LG5vdGlmeTohMCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX0sc2VsZWN0ZWRJdGVtczp7dHlwZTpBcnJheSxyZWFkT25seTohMCxub3RpZnk6ITAsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19fSxvYnNlcnZlcnM6WyJfdXBkYXRlU2VsZWN0ZWQoc2VsZWN0ZWRWYWx1ZXMuc3BsaWNlcykiXSxzZWxlY3Q6ZnVuY3Rpb24odCl7dGhpcy5tdWx0aT90aGlzLl90b2dnbGVTZWxlY3RlZCh0KTp0aGlzLnNlbGVjdGVkPXR9LG11bHRpQ2hhbmdlZDpmdW5jdGlvbih0KXt0aGlzLl9zZWxlY3Rpb24ubXVsdGk9dCx0aGlzLl91cGRhdGVTZWxlY3RlZCgpfSxnZXQgX3Nob3VsZFVwZGF0ZVNlbGVjdGlvbigpe3JldHVybiBudWxsIT10aGlzLnNlbGVjdGVkfHxudWxsIT10aGlzLnNlbGVjdGVkVmFsdWVzJiZ0aGlzLnNlbGVjdGVkVmFsdWVzLmxlbmd0aH0sX3VwZGF0ZUF0dHJGb3JTZWxlY3RlZDpmdW5jdGlvbigpe3RoaXMubXVsdGk/dGhpcy5zZWxlY3RlZEl0ZW1zJiZ0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoPjAmJih0aGlzLnNlbGVjdGVkVmFsdWVzPXRoaXMuc2VsZWN0ZWRJdGVtcy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9pbmRleFRvVmFsdWUodGhpcy5pbmRleE9mKHQpKX0pLHRoaXMpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPXR9KSx0aGlzKSk6VW8uX3VwZGF0ZUF0dHJGb3JTZWxlY3RlZC5hcHBseSh0aGlzKX0sX3VwZGF0ZVNlbGVjdGVkOmZ1bmN0aW9uKCl7dGhpcy5tdWx0aT90aGlzLl9zZWxlY3RNdWx0aSh0aGlzLnNlbGVjdGVkVmFsdWVzKTp0aGlzLl9zZWxlY3RTZWxlY3RlZCh0aGlzLnNlbGVjdGVkKX0sX3NlbGVjdE11bHRpOmZ1bmN0aW9uKHQpe3ZhciBlPSh0aGlzLl92YWx1ZXNUb0l0ZW1zKHQ9dHx8W10pfHxbXSkuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9dH0pKTt0aGlzLl9zZWxlY3Rpb24uY2xlYXIoZSk7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspdGhpcy5fc2VsZWN0aW9uLnNldEl0ZW1TZWxlY3RlZChlW25dLCEwKTt0aGlzLmZhbGxiYWNrU2VsZWN0aW9uJiYhdGhpcy5fc2VsZWN0aW9uLmdldCgpLmxlbmd0aCYmdGhpcy5fdmFsdWVUb0l0ZW0odGhpcy5mYWxsYmFja1NlbGVjdGlvbikmJnRoaXMuc2VsZWN0KHRoaXMuZmFsbGJhY2tTZWxlY3Rpb24pfSxfc2VsZWN0aW9uQ2hhbmdlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fc2VsZWN0aW9uLmdldCgpO3RoaXMubXVsdGk/KHRoaXMuX3NldFNlbGVjdGVkSXRlbXModCksdGhpcy5fc2V0U2VsZWN0ZWRJdGVtKHQubGVuZ3RoP3RbMF06bnVsbCkpOm51bGwhPXQ/KHRoaXMuX3NldFNlbGVjdGVkSXRlbXMoW3RdKSx0aGlzLl9zZXRTZWxlY3RlZEl0ZW0odCkpOih0aGlzLl9zZXRTZWxlY3RlZEl0ZW1zKFtdKSx0aGlzLl9zZXRTZWxlY3RlZEl0ZW0obnVsbCkpfSxfdG9nZ2xlU2VsZWN0ZWQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zZWxlY3RlZFZhbHVlcy5pbmRleE9mKHQpO2U8MD90aGlzLnB1c2goInNlbGVjdGVkVmFsdWVzIix0KTp0aGlzLnNwbGljZSgic2VsZWN0ZWRWYWx1ZXMiLGUsMSl9LF92YWx1ZXNUb0l0ZW1zOmZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P251bGw6dC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWx1ZVRvSXRlbSh0KX0pLHRoaXMpfX0sS2E9e3Byb3BlcnRpZXM6e2ZvY3VzZWRJdGVtOntvYnNlcnZlcjoiX2ZvY3VzZWRJdGVtQ2hhbmdlZCIscmVhZE9ubHk6ITAsdHlwZTpPYmplY3R9LGF0dHJGb3JJdGVtVGl0bGU6e3R5cGU6U3RyaW5nfSxkaXNhYmxlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG9ic2VydmVyOiJfZGlzYWJsZWRDaGFuZ2VkIn19LF9NT0RJRklFUl9LRVlTOlsiQWx0IiwiQWx0R3JhcGgiLCJDYXBzTG9jayIsIkNvbnRyb2wiLCJGbiIsIkZuTG9jayIsIkh5cGVyIiwiTWV0YSIsIk51bUxvY2siLCJPUyIsIlNjcm9sbExvY2siLCJTaGlmdCIsIlN1cGVyIiwiU3ltYm9sIiwiU3ltYm9sTG9jayJdLF9TRUFSQ0hfUkVTRVRfVElNRU9VVF9NUzoxZTMsX3ByZXZpb3VzVGFiSW5kZXg6MCxob3N0QXR0cmlidXRlczp7cm9sZToibWVudSJ9LG9ic2VydmVyczpbIl91cGRhdGVNdWx0aXNlbGVjdGFibGUobXVsdGkpIl0sbGlzdGVuZXJzOntmb2N1czoiX29uRm9jdXMiLGtleWRvd246Il9vbktleWRvd24iLCJpcm9uLWl0ZW1zLWNoYW5nZWQiOiJfb25Jcm9uSXRlbXNDaGFuZ2VkIn0sa2V5QmluZGluZ3M6e3VwOiJfb25VcEtleSIsZG93bjoiX29uRG93bktleSIsZXNjOiJfb25Fc2NLZXkiLCJzaGlmdCt0YWI6a2V5ZG93biI6Il9vblNoaWZ0VGFiRG93biJ9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fcmVzZXRUYWJpbmRpY2VzKCl9LHNlbGVjdDpmdW5jdGlvbih0KXt0aGlzLl9kZWZhdWx0Rm9jdXNBc3luYyYmKHRoaXMuY2FuY2VsQXN5bmModGhpcy5fZGVmYXVsdEZvY3VzQXN5bmMpLHRoaXMuX2RlZmF1bHRGb2N1c0FzeW5jPW51bGwpO3ZhciBlPXRoaXMuX3ZhbHVlVG9JdGVtKHQpO2UmJmUuaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpfHwodGhpcy5fc2V0Rm9jdXNlZEl0ZW0oZSksJGEuc2VsZWN0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LF9yZXNldFRhYmluZGljZXM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm11bHRpP3RoaXMuc2VsZWN0ZWRJdGVtcyYmdGhpcy5zZWxlY3RlZEl0ZW1zWzBdOnRoaXMuc2VsZWN0ZWRJdGVtO3RoaXMuaXRlbXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IixlPT09dD8iMCI6Ii0xIiksZS5zZXRBdHRyaWJ1dGUoImFyaWEtc2VsZWN0ZWQiLHRoaXMuX3NlbGVjdGlvbi5pc1NlbGVjdGVkKGUpKX0pLHRoaXMpfSxfdXBkYXRlTXVsdGlzZWxlY3RhYmxlOmZ1bmN0aW9uKHQpe3Q/dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtbXVsdGlzZWxlY3RhYmxlIiwidHJ1ZSIpOnRoaXMucmVtb3ZlQXR0cmlidXRlKCJhcmlhLW11bHRpc2VsZWN0YWJsZSIpfSxfZm9jdXNXaXRoS2V5Ym9hcmRFdmVudDpmdW5jdGlvbih0KXtpZigtMT09PXRoaXMuX01PRElGSUVSX0tFWVMuaW5kZXhPZih0LmtleSkpe3RoaXMuY2FuY2VsRGVib3VuY2VyKCJfY2xlYXJTZWFyY2hUZXh0Iik7Zm9yKHZhciBlLG49dGhpcy5fc2VhcmNoVGV4dHx8IiIsaT0obis9KHQua2V5JiYxPT10LmtleS5sZW5ndGg/dC5rZXk6U3RyaW5nLmZyb21DaGFyQ29kZSh0LmtleUNvZGUpKS50b0xvY2FsZUxvd2VyQ2FzZSgpKS5sZW5ndGgscj0wO2U9dGhpcy5pdGVtc1tyXTtyKyspaWYoIWUuaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpKXt2YXIgbz10aGlzLmF0dHJGb3JJdGVtVGl0bGV8fCJ0ZXh0Q29udGVudCIsYT0oZVtvXXx8ZS5nZXRBdHRyaWJ1dGUobyl8fCIiKS50cmltKCk7aWYoIShhLmxlbmd0aDxpKSYmYS5zbGljZSgwLGkpLnRvTG9jYWxlTG93ZXJDYXNlKCk9PW4pe3RoaXMuX3NldEZvY3VzZWRJdGVtKGUpO2JyZWFrfX10aGlzLl9zZWFyY2hUZXh0PW4sdGhpcy5kZWJvdW5jZSgiX2NsZWFyU2VhcmNoVGV4dCIsdGhpcy5fY2xlYXJTZWFyY2hUZXh0LHRoaXMuX1NFQVJDSF9SRVNFVF9USU1FT1VUX01TKX19LF9jbGVhclNlYXJjaFRleHQ6ZnVuY3Rpb24oKXt0aGlzLl9zZWFyY2hUZXh0PSIifSxfZm9jdXNQcmV2aW91czpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLml0ZW1zLmxlbmd0aCxlPU51bWJlcih0aGlzLmluZGV4T2YodGhpcy5mb2N1c2VkSXRlbSkpLG49MTtuPHQrMTtuKyspe3ZhciBpPXRoaXMuaXRlbXNbKGUtbit0KSV0XTtpZighaS5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIikpe3ZhciByPXFpKGkpLmdldE93bmVyUm9vdCgpfHxkb2N1bWVudDtpZih0aGlzLl9zZXRGb2N1c2VkSXRlbShpKSxxaShyKS5hY3RpdmVFbGVtZW50PT1pKXJldHVybn19fSxfZm9jdXNOZXh0OmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuaXRlbXMubGVuZ3RoLGU9TnVtYmVyKHRoaXMuaW5kZXhPZih0aGlzLmZvY3VzZWRJdGVtKSksbj0xO248dCsxO24rKyl7dmFyIGk9dGhpcy5pdGVtc1soZStuKSV0XTtpZighaS5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIikpe3ZhciByPXFpKGkpLmdldE93bmVyUm9vdCgpfHxkb2N1bWVudDtpZih0aGlzLl9zZXRGb2N1c2VkSXRlbShpKSxxaShyKS5hY3RpdmVFbGVtZW50PT1pKXJldHVybn19fSxfYXBwbHlTZWxlY3Rpb246ZnVuY3Rpb24odCxlKXt0LnNldEF0dHJpYnV0ZSgiYXJpYS1zZWxlY3RlZCIsZT8idHJ1ZSI6ImZhbHNlIiksVW8uX2FwcGx5U2VsZWN0aW9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sX2ZvY3VzZWRJdGVtQ2hhbmdlZDpmdW5jdGlvbih0LGUpe2UmJmUuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIi0xIiksIXR8fHQuaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpfHx0aGlzLmRpc2FibGVkfHwodC5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiMCIpLHQuZm9jdXMoKSl9LF9vbklyb25JdGVtc0NoYW5nZWQ6ZnVuY3Rpb24odCl7dC5kZXRhaWwuYWRkZWROb2Rlcy5sZW5ndGgmJnRoaXMuX3Jlc2V0VGFiaW5kaWNlcygpfSxfb25TaGlmdFRhYkRvd246ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nZXRBdHRyaWJ1dGUoInRhYmluZGV4Iik7S2EuX3NoaWZ0VGFiUHJlc3NlZD0hMCx0aGlzLl9zZXRGb2N1c2VkSXRlbShudWxsKSx0aGlzLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCItMSIpLHRoaXMuYXN5bmMoKGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IixlKSxLYS5fc2hpZnRUYWJQcmVzc2VkPSExfSksMSl9LF9vbkZvY3VzOmZ1bmN0aW9uKHQpe2lmKCFLYS5fc2hpZnRUYWJQcmVzc2VkKXt2YXIgZT1xaSh0KS5yb290VGFyZ2V0OyhlPT09dGhpc3x8dm9pZCAwPT09ZS50YWJJbmRleHx8dGhpcy5pc0xpZ2h0RGVzY2VuZGFudChlKSkmJih0aGlzLl9kZWZhdWx0Rm9jdXNBc3luYz10aGlzLmFzeW5jKChmdW5jdGlvbigpe3ZhciB0PXRoaXMubXVsdGk/dGhpcy5zZWxlY3RlZEl0ZW1zJiZ0aGlzLnNlbGVjdGVkSXRlbXNbMF06dGhpcy5zZWxlY3RlZEl0ZW07dGhpcy5fc2V0Rm9jdXNlZEl0ZW0obnVsbCksdD90aGlzLl9zZXRGb2N1c2VkSXRlbSh0KTp0aGlzLml0ZW1zWzBdJiZ0aGlzLl9mb2N1c05leHQoKX0pKSl9fSxfb25VcEtleTpmdW5jdGlvbih0KXt0aGlzLl9mb2N1c1ByZXZpb3VzKCksdC5kZXRhaWwua2V5Ym9hcmRFdmVudC5wcmV2ZW50RGVmYXVsdCgpfSxfb25Eb3duS2V5OmZ1bmN0aW9uKHQpe3RoaXMuX2ZvY3VzTmV4dCgpLHQuZGV0YWlsLmtleWJvYXJkRXZlbnQucHJldmVudERlZmF1bHQoKX0sX29uRXNjS2V5OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZm9jdXNlZEl0ZW07ZSYmZS5ibHVyKCl9LF9vbktleWRvd246ZnVuY3Rpb24odCl7dGhpcy5rZXlib2FyZEV2ZW50TWF0Y2hlc0tleXModCwidXAgZG93biBlc2MiKXx8dGhpcy5fZm9jdXNXaXRoS2V5Ym9hcmRFdmVudCh0KSx0LnN0b3BQcm9wYWdhdGlvbigpfSxfYWN0aXZhdGVIYW5kbGVyOmZ1bmN0aW9uKHQpe1VvLl9hY3RpdmF0ZUhhbmRsZXIuY2FsbCh0aGlzLHQpLHQuc3RvcFByb3BhZ2F0aW9uKCl9LF9kaXNhYmxlZENoYW5nZWQ6ZnVuY3Rpb24odCl7dD8odGhpcy5fcHJldmlvdXNUYWJJbmRleD10aGlzLmhhc0F0dHJpYnV0ZSgidGFiaW5kZXgiKT90aGlzLnRhYkluZGV4OjAsdGhpcy5yZW1vdmVBdHRyaWJ1dGUoInRhYmluZGV4IikpOnRoaXMuaGFzQXR0cmlidXRlKCJ0YWJpbmRleCIpfHx0aGlzLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLHRoaXMuX3ByZXZpb3VzVGFiSW5kZXgpfSxfc2hpZnRUYWJQcmVzc2VkOiExfSxaYT1bW1VvLCRhXSxSbyxLYV07Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpJcih7X3RlbXBsYXRlOl9lYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcGFkZGluZzogOHB4IDA7CgogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLWxpc3Rib3gtYmFja2dyb3VuZC1jb2xvciwgdmFyKC0tcHJpbWFyeS1iYWNrZ3JvdW5kLWNvbG9yKSk7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWxpc3Rib3gtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1saXN0Ym94OwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxzbG90Pjwvc2xvdD4KYCxpczoicGFwZXItbGlzdGJveCIsYmVoYXZpb3JzOltaYV0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6Imxpc3Rib3gifX0pOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KY29uc3QgSmE9X2VgCjxkb20tbW9kdWxlIGlkPSJwYXBlci1tYXRlcmlhbC1zaGFyZWQtc3R5bGVzIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtlbGV2YXRpb249IjEiXSkgewogICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tMmRwOwogICAgICB9CgogICAgICA6aG9zdChbZWxldmF0aW9uPSIyIl0pIHsKICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTRkcDsKICAgICAgfQoKICAgICAgOmhvc3QoW2VsZXZhdGlvbj0iMyJdKSB7CiAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi02ZHA7CiAgICAgIH0KCiAgICAgIDpob3N0KFtlbGV2YXRpb249IjQiXSkgewogICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tOGRwOwogICAgICB9CgogICAgICA6aG9zdChbZWxldmF0aW9uPSI1Il0pIHsKICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTE2ZHA7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgpgO0phLnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoSmEuY29udGVudCksCi8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpJcih7X3RlbXBsYXRlOl9lYAogICAgPHN0eWxlIGluY2x1ZGU9InBhcGVyLW1hdGVyaWFsLXNoYXJlZC1zdHlsZXMiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0KFthbmltYXRlZF0pIHsKICAgICAgICBAYXBwbHkgLS1zaGFkb3ctdHJhbnNpdGlvbjsKICAgICAgfQogICAgICA6aG9zdCB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWw7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHNsb3Q+PC9zbG90PgpgLGlzOiJwYXBlci1tYXRlcmlhbCIscHJvcGVydGllczp7ZWxldmF0aW9uOnt0eXBlOk51bWJlcixyZWZsZWN0VG9BdHRyaWJ1dGU6ITAsdmFsdWU6MX0sYW5pbWF0ZWQ6e3R5cGU6Qm9vbGVhbixyZWZsZWN0VG9BdHRyaWJ1dGU6ITAsdmFsdWU6ITF9fX0pOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KY29uc3QgUWE9e3Byb3BlcnRpZXM6e3ZhbHVlOnt0eXBlOk51bWJlcix2YWx1ZTowLG5vdGlmeTohMCxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LG1pbjp7dHlwZTpOdW1iZXIsdmFsdWU6MCxub3RpZnk6ITB9LG1heDp7dHlwZTpOdW1iZXIsdmFsdWU6MTAwLG5vdGlmeTohMH0sc3RlcDp7dHlwZTpOdW1iZXIsdmFsdWU6MSxub3RpZnk6ITB9LHJhdGlvOnt0eXBlOk51bWJlcix2YWx1ZTowLHJlYWRPbmx5OiEwLG5vdGlmeTohMH19LG9ic2VydmVyczpbIl91cGRhdGUodmFsdWUsIG1pbiwgbWF4LCBzdGVwKSJdLF9jYWxjUmF0aW86ZnVuY3Rpb24odCl7cmV0dXJuKHRoaXMuX2NsYW1wVmFsdWUodCktdGhpcy5taW4pLyh0aGlzLm1heC10aGlzLm1pbil9LF9jbGFtcFZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1pbih0aGlzLm1heCxNYXRoLm1heCh0aGlzLm1pbix0aGlzLl9jYWxjU3RlcCh0KSkpfSxfY2FsY1N0ZXA6ZnVuY3Rpb24odCl7aWYodD1wYXJzZUZsb2F0KHQpLCF0aGlzLnN0ZXApcmV0dXJuIHQ7dmFyIGU9TWF0aC5yb3VuZCgodC10aGlzLm1pbikvdGhpcy5zdGVwKTtyZXR1cm4gdGhpcy5zdGVwPDE/ZS8oMS90aGlzLnN0ZXApK3RoaXMubWluOmUqdGhpcy5zdGVwK3RoaXMubWlufSxfdmFsaWRhdGVWYWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2NsYW1wVmFsdWUodGhpcy52YWx1ZSk7cmV0dXJuIHRoaXMudmFsdWU9dGhpcy5vbGRWYWx1ZT1pc05hTih0KT90aGlzLm9sZFZhbHVlOnQsdGhpcy52YWx1ZSE9PXR9LF91cGRhdGU6ZnVuY3Rpb24oKXt0aGlzLl92YWxpZGF0ZVZhbHVlKCksdGhpcy5fc2V0UmF0aW8oMTAwKnRoaXMuX2NhbGNSYXRpbyh0aGlzLnZhbHVlKSl9fTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovSXIoe190ZW1wbGF0ZTpfZWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHdpZHRoOiAyMDBweDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgOmhvc3QoW2hpZGRlbl0pLCBbaGlkZGVuXSB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAjcHJvZ3Jlc3NDb250YWluZXIgewogICAgICAgIEBhcHBseSAtLXBhcGVyLXByb2dyZXNzLWNvbnRhaW5lcjsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgICNwcm9ncmVzc0NvbnRhaW5lciwKICAgICAgLyogdGhlIHN0cmlwZSBmb3IgdGhlIGluZGV0ZXJtaW5hdGUgYW5pbWF0aW9uKi8KICAgICAgLmluZGV0ZXJtaW5hdGU6OmFmdGVyIHsKICAgICAgICBoZWlnaHQ6IHZhcigtLXBhcGVyLXByb2dyZXNzLWhlaWdodCwgNHB4KTsKICAgICAgfQoKICAgICAgI3ByaW1hcnlQcm9ncmVzcywKICAgICAgI3NlY29uZGFyeVByb2dyZXNzLAogICAgICAuaW5kZXRlcm1pbmF0ZTo6YWZ0ZXIgewogICAgICAgIEBhcHBseSAtLWxheW91dC1maXQ7CiAgICAgIH0KCiAgICAgICNwcm9ncmVzc0NvbnRhaW5lciwKICAgICAgLmluZGV0ZXJtaW5hdGU6OmFmdGVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1wYXBlci1wcm9ncmVzcy1jb250YWluZXItY29sb3IsIHZhcigtLWdvb2dsZS1ncmV5LTMwMCkpOwogICAgICB9CgogICAgICA6aG9zdCgudHJhbnNpdGluZykgI3ByaW1hcnlQcm9ncmVzcywKICAgICAgOmhvc3QoLnRyYW5zaXRpbmcpICNzZWNvbmRhcnlQcm9ncmVzcyB7CiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uLXByb3BlcnR5OiAtd2Via2l0LXRyYW5zZm9ybTsKICAgICAgICB0cmFuc2l0aW9uLXByb3BlcnR5OiB0cmFuc2Zvcm07CgogICAgICAgIC8qIER1cmF0aW9uICovCiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uLWR1cmF0aW9uOiB2YXIoLS1wYXBlci1wcm9ncmVzcy10cmFuc2l0aW9uLWR1cmF0aW9uLCAwLjA4cyk7CiAgICAgICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItcHJvZ3Jlc3MtdHJhbnNpdGlvbi1kdXJhdGlvbiwgMC4wOHMpOwoKICAgICAgICAvKiBUaW1pbmcgZnVuY3Rpb24gKi8KICAgICAgICAtd2Via2l0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1wYXBlci1wcm9ncmVzcy10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbiwgZWFzZSk7CiAgICAgICAgdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLXBhcGVyLXByb2dyZXNzLXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uLCBlYXNlKTsKCiAgICAgICAgLyogRGVsYXkgKi8KICAgICAgICAtd2Via2l0LXRyYW5zaXRpb24tZGVsYXk6IHZhcigtLXBhcGVyLXByb2dyZXNzLXRyYW5zaXRpb24tZGVsYXksIDBzKTsKICAgICAgICB0cmFuc2l0aW9uLWRlbGF5OiB2YXIoLS1wYXBlci1wcm9ncmVzcy10cmFuc2l0aW9uLWRlbGF5LCAwcyk7CiAgICAgIH0KCiAgICAgICNwcmltYXJ5UHJvZ3Jlc3MsCiAgICAgICNzZWNvbmRhcnlQcm9ncmVzcyB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZpdDsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IGxlZnQgY2VudGVyOwogICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IGxlZnQgY2VudGVyOwogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoMCk7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoMCk7CiAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsKICAgICAgfQoKICAgICAgI3ByaW1hcnlQcm9ncmVzcyB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tcGFwZXItcHJvZ3Jlc3MtYWN0aXZlLWNvbG9yLCB2YXIoLS1nb29nbGUtZ3JlZW4tNTAwKSk7CiAgICAgIH0KCiAgICAgICNzZWNvbmRhcnlQcm9ncmVzcyB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tcGFwZXItcHJvZ3Jlc3Mtc2Vjb25kYXJ5LWNvbG9yLCB2YXIoLS1nb29nbGUtZ3JlZW4tMTAwKSk7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pICNwcmltYXJ5UHJvZ3Jlc3MgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLXByb2dyZXNzLWRpc2FibGVkLWFjdGl2ZS1jb2xvciwgdmFyKC0tZ29vZ2xlLWdyZXktNTAwKSk7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pICNzZWNvbmRhcnlQcm9ncmVzcyB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tcGFwZXItcHJvZ3Jlc3MtZGlzYWJsZWQtc2Vjb25kYXJ5LWNvbG9yLCB2YXIoLS1nb29nbGUtZ3JleS0zMDApKTsKICAgICAgfQoKICAgICAgOmhvc3QoOm5vdChbZGlzYWJsZWRdKSkgI3ByaW1hcnlQcm9ncmVzcy5pbmRldGVybWluYXRlIHsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IHJpZ2h0IGNlbnRlcjsKICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiByaWdodCBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb246IGluZGV0ZXJtaW5hdGUtYmFyIHZhcigtLXBhcGVyLXByb2dyZXNzLWluZGV0ZXJtaW5hdGUtY3ljbGUtZHVyYXRpb24sIDJzKSBsaW5lYXIgaW5maW5pdGU7CiAgICAgICAgYW5pbWF0aW9uOiBpbmRldGVybWluYXRlLWJhciB2YXIoLS1wYXBlci1wcm9ncmVzcy1pbmRldGVybWluYXRlLWN5Y2xlLWR1cmF0aW9uLCAycykgbGluZWFyIGluZmluaXRlOwogICAgICB9CgogICAgICA6aG9zdCg6bm90KFtkaXNhYmxlZF0pKSAjcHJpbWFyeVByb2dyZXNzLmluZGV0ZXJtaW5hdGU6OmFmdGVyIHsKICAgICAgICBjb250ZW50OiAiIjsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IGNlbnRlciBjZW50ZXI7CiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyIGNlbnRlcjsKCiAgICAgICAgLXdlYmtpdC1hbmltYXRpb246IGluZGV0ZXJtaW5hdGUtc3BsaXR0ZXIgdmFyKC0tcGFwZXItcHJvZ3Jlc3MtaW5kZXRlcm1pbmF0ZS1jeWNsZS1kdXJhdGlvbiwgMnMpIGxpbmVhciBpbmZpbml0ZTsKICAgICAgICBhbmltYXRpb246IGluZGV0ZXJtaW5hdGUtc3BsaXR0ZXIgdmFyKC0tcGFwZXItcHJvZ3Jlc3MtaW5kZXRlcm1pbmF0ZS1jeWNsZS1kdXJhdGlvbiwgMnMpIGxpbmVhciBpbmZpbml0ZTsKICAgICAgfQoKICAgICAgQC13ZWJraXQta2V5ZnJhbWVzIGluZGV0ZXJtaW5hdGUtYmFyIHsKICAgICAgICAwJSB7CiAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGVYKDEpIHRyYW5zbGF0ZVgoLTEwMCUpOwogICAgICAgIH0KICAgICAgICA1MCUgewogICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlWCgxKSB0cmFuc2xhdGVYKDAlKTsKICAgICAgICB9CiAgICAgICAgNzUlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoMSkgdHJhbnNsYXRlWCgwJSk7CiAgICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllciguMjgsLjYyLC4zNywuOTEpOwogICAgICAgIH0KICAgICAgICAxMDAlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoMCkgdHJhbnNsYXRlWCgwJSk7CiAgICAgICAgfQogICAgICB9CgogICAgICBALXdlYmtpdC1rZXlmcmFtZXMgaW5kZXRlcm1pbmF0ZS1zcGxpdHRlciB7CiAgICAgICAgMCUgewogICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlWCguNzUpIHRyYW5zbGF0ZVgoLTEyNSUpOwogICAgICAgIH0KICAgICAgICAzMCUgewogICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlWCguNzUpIHRyYW5zbGF0ZVgoLTEyNSUpOwogICAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoLjQyLDAsLjYsLjgpOwogICAgICAgIH0KICAgICAgICA5MCUgewogICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlWCguNzUpIHRyYW5zbGF0ZVgoMTI1JSk7CiAgICAgICAgfQogICAgICAgIDEwMCUgewogICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlWCguNzUpIHRyYW5zbGF0ZVgoMTI1JSk7CiAgICAgICAgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGluZGV0ZXJtaW5hdGUtYmFyIHsKICAgICAgICAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCgxKSB0cmFuc2xhdGVYKC0xMDAlKTsKICAgICAgICB9CiAgICAgICAgNTAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKDEpIHRyYW5zbGF0ZVgoMCUpOwogICAgICAgIH0KICAgICAgICA3NSUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoMSkgdHJhbnNsYXRlWCgwJSk7CiAgICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoLjI4LC42MiwuMzcsLjkxKTsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCgwKSB0cmFuc2xhdGVYKDAlKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgaW5kZXRlcm1pbmF0ZS1zcGxpdHRlciB7CiAgICAgICAgMCUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoLjc1KSB0cmFuc2xhdGVYKC0xMjUlKTsKICAgICAgICB9CiAgICAgICAgMzAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC43NSkgdHJhbnNsYXRlWCgtMTI1JSk7CiAgICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoLjQyLDAsLjYsLjgpOwogICAgICAgIH0KICAgICAgICA5MCUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoLjc1KSB0cmFuc2xhdGVYKDEyNSUpOwogICAgICAgIH0KICAgICAgICAxMDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC43NSkgdHJhbnNsYXRlWCgxMjUlKTsKICAgICAgICB9CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBpZD0icHJvZ3Jlc3NDb250YWluZXIiPgogICAgICA8ZGl2IGlkPSJzZWNvbmRhcnlQcm9ncmVzcyIgaGlkZGVuXCQ9IltbX2hpZGVTZWNvbmRhcnlQcm9ncmVzcyhzZWNvbmRhcnlSYXRpbyldXSI+PC9kaXY+CiAgICAgIDxkaXYgaWQ9InByaW1hcnlQcm9ncmVzcyI+PC9kaXY+CiAgICA8L2Rpdj4KYCxpczoicGFwZXItcHJvZ3Jlc3MiLGJlaGF2aW9yczpbUWFdLHByb3BlcnRpZXM6e3NlY29uZGFyeVByb2dyZXNzOnt0eXBlOk51bWJlcix2YWx1ZTowfSxzZWNvbmRhcnlSYXRpbzp7dHlwZTpOdW1iZXIsdmFsdWU6MCxyZWFkT25seTohMH0saW5kZXRlcm1pbmF0ZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG9ic2VydmVyOiJfdG9nZ2xlSW5kZXRlcm1pbmF0ZSJ9LGRpc2FibGVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVmbGVjdFRvQXR0cmlidXRlOiEwLG9ic2VydmVyOiJfZGlzYWJsZWRDaGFuZ2VkIn19LG9ic2VydmVyczpbIl9wcm9ncmVzc0NoYW5nZWQoc2Vjb25kYXJ5UHJvZ3Jlc3MsIHZhbHVlLCBtaW4sIG1heCwgaW5kZXRlcm1pbmF0ZSkiXSxob3N0QXR0cmlidXRlczp7cm9sZToicHJvZ3Jlc3NiYXIifSxfdG9nZ2xlSW5kZXRlcm1pbmF0ZTpmdW5jdGlvbih0KXt0aGlzLnRvZ2dsZUNsYXNzKCJpbmRldGVybWluYXRlIix0LHRoaXMuJC5wcmltYXJ5UHJvZ3Jlc3MpfSxfdHJhbnNmb3JtUHJvZ3Jlc3M6ZnVuY3Rpb24odCxlKXt0LnN0eWxlLnRyYW5zZm9ybT10LnN0eWxlLndlYmtpdFRyYW5zZm9ybT0ic2NhbGVYKCIrZS8xMDArIikifSxfbWFpblJhdGlvQ2hhbmdlZDpmdW5jdGlvbih0KXt0aGlzLl90cmFuc2Zvcm1Qcm9ncmVzcyh0aGlzLiQucHJpbWFyeVByb2dyZXNzLHQpfSxfcHJvZ3Jlc3NDaGFuZ2VkOmZ1bmN0aW9uKHQsZSxuLGkscil7dD10aGlzLl9jbGFtcFZhbHVlKHQpLGU9dGhpcy5fY2xhbXBWYWx1ZShlKTt2YXIgbz0xMDAqdGhpcy5fY2FsY1JhdGlvKHQpLGE9MTAwKnRoaXMuX2NhbGNSYXRpbyhlKTt0aGlzLl9zZXRTZWNvbmRhcnlSYXRpbyhvKSx0aGlzLl90cmFuc2Zvcm1Qcm9ncmVzcyh0aGlzLiQuc2Vjb25kYXJ5UHJvZ3Jlc3MsbyksdGhpcy5fdHJhbnNmb3JtUHJvZ3Jlc3ModGhpcy4kLnByaW1hcnlQcm9ncmVzcyxhKSx0aGlzLnNlY29uZGFyeVByb2dyZXNzPXQscj90aGlzLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS12YWx1ZW5vdyIpOnRoaXMuc2V0QXR0cmlidXRlKCJhcmlhLXZhbHVlbm93IixlKSx0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS12YWx1ZW1pbiIsbiksdGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtdmFsdWVtYXgiLGkpfSxfZGlzYWJsZWRDaGFuZ2VkOmZ1bmN0aW9uKHQpe3RoaXMuc2V0QXR0cmlidXRlKCJhcmlhLWRpc2FibGVkIix0PyJ0cnVlIjoiZmFsc2UiKX0sX2hpZGVTZWNvbmRhcnlQcm9ncmVzczpmdW5jdGlvbih0KXtyZXR1cm4gMD09PXR9fSk7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCmNvbnN0IHRzPV9lYAo8c3R5bGU+CiAgOmhvc3QgewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgbGluZS1oZWlnaHQ6IDA7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgIC0tY2FsY3VsYXRlZC1wYXBlci1yYWRpby1idXR0b24tc2l6ZTogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLXNpemUsIDE2cHgpOwogICAgLyogLTFweCBpcyBhIHNlbnRpbmVsIGZvciB0aGUgZGVmYXVsdCBhbmQgaXMgcmVwbGFjZSBpbiBcYGF0dGFjaGVkXGAuICovCiAgICAtLWNhbGN1bGF0ZWQtcGFwZXItcmFkaW8tYnV0dG9uLWluay1zaXplOiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24taW5rLXNpemUsIC0xcHgpOwogIH0KCiAgOmhvc3QoOmZvY3VzKSB7CiAgICBvdXRsaW5lOiBub25lOwogIH0KCiAgI3JhZGlvQ29udGFpbmVyIHsKICAgIEBhcHBseSAtLWxheW91dC1pbmxpbmU7CiAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyLWNlbnRlcjsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHdpZHRoOiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXJhZGlvLWJ1dHRvbi1zaXplKTsKICAgIGhlaWdodDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1yYWRpby1idXR0b24tc2l6ZSk7CiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwoKICAgIEBhcHBseSAtLXBhcGVyLXJhZGlvLWJ1dHRvbi1yYWRpby1jb250YWluZXI7CiAgfQoKICAjaW5rIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogNTAlOwogICAgbGVmdDogNTAlOwogICAgcmlnaHQ6IGF1dG87CiAgICB3aWR0aDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1yYWRpby1idXR0b24taW5rLXNpemUpOwogICAgaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXJhZGlvLWJ1dHRvbi1pbmstc2l6ZSk7CiAgICBjb2xvcjogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLXVuY2hlY2tlZC1pbmstY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgb3BhY2l0eTogMC42OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7CiAgfQoKICAjaW5rW2NoZWNrZWRdIHsKICAgIGNvbG9yOiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tY2hlY2tlZC1pbmstY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKICB9CgogICNvZmZSYWRpbywgI29uUmFkaW8gewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgIHRvcDogMDsKICAgIGxlZnQ6IDA7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICB9CgogICNvZmZSYWRpbyB7CiAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tdW5jaGVja2VkLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXJhZGlvLWJ1dHRvbi11bmNoZWNrZWQtYmFja2dyb3VuZC1jb2xvciwgdHJhbnNwYXJlbnQpOwogICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMjhzOwogIH0KCiAgI29uUmFkaW8gewogICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLWNoZWNrZWQtY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgwKTsKICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7CiAgICB0cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSBlYXNlIDAuMjhzOwogICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIGVhc2UgMC4yOHM7CiAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogIH0KCiAgOmhvc3QoW2NoZWNrZWRdKSAjb2ZmUmFkaW8gewogICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tY2hlY2tlZC1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwogIH0KCiAgOmhvc3QoW2NoZWNrZWRdKSAjb25SYWRpbyB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMC41KTsKICAgIHRyYW5zZm9ybTogc2NhbGUoMC41KTsKICB9CgogICNyYWRpb0xhYmVsIHsKICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgbWFyZ2luLWxlZnQ6IHZhcigtLXBhcGVyLXJhZGlvLWJ1dHRvbi1sYWJlbC1zcGFjaW5nLCAxMHB4KTsKICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7CiAgICBjb2xvcjogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLWxhYmVsLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKCiAgICBAYXBwbHkgLS1wYXBlci1yYWRpby1idXR0b24tbGFiZWw7CiAgfQoKICA6aG9zdChbY2hlY2tlZF0pICNyYWRpb0xhYmVsIHsKICAgIEBhcHBseSAtLXBhcGVyLXJhZGlvLWJ1dHRvbi1sYWJlbC1jaGVja2VkOwogIH0KCiAgI3JhZGlvTGFiZWw6ZGlyKHJ0bCkgewogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICBtYXJnaW4tcmlnaHQ6IHZhcigtLXBhcGVyLXJhZGlvLWJ1dHRvbi1sYWJlbC1zcGFjaW5nLCAxMHB4KTsKICB9CgogICNyYWRpb0xhYmVsW2hpZGRlbl0gewogICAgZGlzcGxheTogbm9uZTsKICB9CgogIC8qIGRpc2FibGVkIHN0YXRlICovCgogIDpob3N0KFtkaXNhYmxlZF0pICNvZmZSYWRpbyB7CiAgICBib3JkZXItY29sb3I6IHZhcigtLXBhcGVyLXJhZGlvLWJ1dHRvbi11bmNoZWNrZWQtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgb3BhY2l0eTogMC41OwogIH0KCiAgOmhvc3QoW2Rpc2FibGVkXVtjaGVja2VkXSkgI29uUmFkaW8gewogICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLXVuY2hlY2tlZC1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CiAgICBvcGFjaXR5OiAwLjU7CiAgfQoKICA6aG9zdChbZGlzYWJsZWRdKSAjcmFkaW9MYWJlbCB7CiAgICAvKiBzbGlnaHRseSBkYXJrZXIgdGhhbiB0aGUgYnV0dG9uLCBzbyB0aGF0IGl0J3MgcmVhZGFibGUgKi8KICAgIG9wYWNpdHk6IDAuNjU7CiAgfQo8L3N0eWxlPgoKPGRpdiBpZD0icmFkaW9Db250YWluZXIiPgogIDxkaXYgaWQ9Im9mZlJhZGlvIj48L2Rpdj4KICA8ZGl2IGlkPSJvblJhZGlvIj48L2Rpdj4KPC9kaXY+Cgo8ZGl2IGlkPSJyYWRpb0xhYmVsIj48c2xvdD48L3Nsb3Q+PC9kaXY+YDt0cy5zZXRBdHRyaWJ1dGUoInN0cmlwLXdoaXRlc3BhY2UiLCIiKSxJcih7X3RlbXBsYXRlOnRzLGlzOiJwYXBlci1yYWRpby1idXR0b24iLGJlaGF2aW9yczpbY2FdLGhvc3RBdHRyaWJ1dGVzOntyb2xlOiJyYWRpbyIsImFyaWEtY2hlY2tlZCI6ITEsdGFiaW5kZXg6MH0scHJvcGVydGllczp7YXJpYUFjdGl2ZUF0dHJpYnV0ZTp7dHlwZTpTdHJpbmcsdmFsdWU6ImFyaWEtY2hlY2tlZCJ9fSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuX3JpcHBsZUNvbnRhaW5lcj10aGlzLiQucmFkaW9Db250YWluZXJ9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7a2kodGhpcywoZnVuY3Rpb24oKXtpZigiLTFweCI9PT10aGlzLmdldENvbXB1dGVkU3R5bGVWYWx1ZSgiLS1jYWxjdWxhdGVkLXBhcGVyLXJhZGlvLWJ1dHRvbi1pbmstc2l6ZSIpLnRyaW0oKSl7dmFyIHQ9cGFyc2VGbG9hdCh0aGlzLmdldENvbXB1dGVkU3R5bGVWYWx1ZSgiLS1jYWxjdWxhdGVkLXBhcGVyLXJhZGlvLWJ1dHRvbi1zaXplIikudHJpbSgpKSxlPU1hdGguZmxvb3IoMyp0KTtlJTIhPXQlMiYmZSsrLHRoaXMudXBkYXRlU3R5bGVzKHsiLS1wYXBlci1yYWRpby1idXR0b24taW5rLXNpemUiOmUrInB4In0pfX0pKX19KTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCmNvbnN0IGVzPXtob3N0QXR0cmlidXRlczp7cm9sZToibWVudWJhciJ9LGtleUJpbmRpbmdzOntsZWZ0OiJfb25MZWZ0S2V5IixyaWdodDoiX29uUmlnaHRLZXkifSxfb25VcEtleTpmdW5jdGlvbih0KXt0aGlzLmZvY3VzZWRJdGVtLmNsaWNrKCksdC5kZXRhaWwua2V5Ym9hcmRFdmVudC5wcmV2ZW50RGVmYXVsdCgpfSxfb25Eb3duS2V5OmZ1bmN0aW9uKHQpe3RoaXMuZm9jdXNlZEl0ZW0uY2xpY2soKSx0LmRldGFpbC5rZXlib2FyZEV2ZW50LnByZXZlbnREZWZhdWx0KCl9LGdldCBfaXNSVEwoKXtyZXR1cm4icnRsIj09PXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMpLmRpcmVjdGlvbn0sX29uTGVmdEtleTpmdW5jdGlvbih0KXt0aGlzLl9pc1JUTD90aGlzLl9mb2N1c05leHQoKTp0aGlzLl9mb2N1c1ByZXZpb3VzKCksdC5kZXRhaWwua2V5Ym9hcmRFdmVudC5wcmV2ZW50RGVmYXVsdCgpfSxfb25SaWdodEtleTpmdW5jdGlvbih0KXt0aGlzLl9pc1JUTD90aGlzLl9mb2N1c1ByZXZpb3VzKCk6dGhpcy5fZm9jdXNOZXh0KCksdC5kZXRhaWwua2V5Ym9hcmRFdmVudC5wcmV2ZW50RGVmYXVsdCgpfSxfb25LZXlkb3duOmZ1bmN0aW9uKHQpe3RoaXMua2V5Ym9hcmRFdmVudE1hdGNoZXNLZXlzKHQsInVwIGRvd24gbGVmdCByaWdodCBlc2MiKXx8dGhpcy5fZm9jdXNXaXRoS2V5Ym9hcmRFdmVudCh0KX19LG5zPVtaYSxlc107Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpJcih7X3RlbXBsYXRlOl9lYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CgogICAgICA6aG9zdCA6OnNsb3R0ZWQoKikgewogICAgICAgIHBhZGRpbmc6IHZhcigtLXBhcGVyLXJhZGlvLWdyb3VwLWl0ZW0tcGFkZGluZywgMTJweCk7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHNsb3Q+PC9zbG90PgpgLGlzOiJwYXBlci1yYWRpby1ncm91cCIsYmVoYXZpb3JzOltuc10saG9zdEF0dHJpYnV0ZXM6e3JvbGU6InJhZGlvZ3JvdXAifSxwcm9wZXJ0aWVzOnthdHRyRm9yU2VsZWN0ZWQ6e3R5cGU6U3RyaW5nLHZhbHVlOiJuYW1lIn0sc2VsZWN0ZWRBdHRyaWJ1dGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJjaGVja2VkIn0sc2VsZWN0YWJsZTp7dHlwZTpTdHJpbmcsdmFsdWU6InBhcGVyLXJhZGlvLWJ1dHRvbiJ9LGFsbG93RW1wdHlTZWxlY3Rpb246e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX19LHNlbGVjdDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl92YWx1ZVRvSXRlbSh0KTtpZighZXx8IWUuaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpKXtpZih0aGlzLnNlbGVjdGVkKXt2YXIgbj10aGlzLl92YWx1ZVRvSXRlbSh0aGlzLnNlbGVjdGVkKTtpZih0aGlzLnNlbGVjdGVkPT10KXtpZighdGhpcy5hbGxvd0VtcHR5U2VsZWN0aW9uKXJldHVybiB2b2lkKG4mJihuLmNoZWNrZWQ9ITApKTt0PSIifW4mJihuLmNoZWNrZWQ9ITEpfVVvLnNlbGVjdC5hcHBseSh0aGlzLFt0XSksdGhpcy5maXJlKCJwYXBlci1yYWRpby1ncm91cC1jaGFuZ2VkIil9fSxfYWN0aXZhdGVGb2N1c2VkSXRlbTpmdW5jdGlvbigpe3RoaXMuX2l0ZW1BY3RpdmF0ZSh0aGlzLl92YWx1ZUZvckl0ZW0odGhpcy5mb2N1c2VkSXRlbSksdGhpcy5mb2N1c2VkSXRlbSl9LF9vblVwS2V5OmZ1bmN0aW9uKHQpe3RoaXMuX2ZvY3VzUHJldmlvdXMoKSx0LnByZXZlbnREZWZhdWx0KCksdGhpcy5fYWN0aXZhdGVGb2N1c2VkSXRlbSgpfSxfb25Eb3duS2V5OmZ1bmN0aW9uKHQpe3RoaXMuX2ZvY3VzTmV4dCgpLHQucHJldmVudERlZmF1bHQoKSx0aGlzLl9hY3RpdmF0ZUZvY3VzZWRJdGVtKCl9LF9vbkxlZnRLZXk6ZnVuY3Rpb24odCl7ZXMuX29uTGVmdEtleS5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5fYWN0aXZhdGVGb2N1c2VkSXRlbSgpfSxfb25SaWdodEtleTpmdW5jdGlvbih0KXtlcy5fb25SaWdodEtleS5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5fYWN0aXZhdGVGb2N1c2VkSXRlbSgpfX0pOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KY29uc3QgaXM9X2VgCiAgPHN0eWxlPgogICAgOmhvc3QgewogICAgICBAYXBwbHkgLS1sYXlvdXQ7CiAgICAgIEBhcHBseSAtLWxheW91dC1qdXN0aWZpZWQ7CiAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CiAgICAgIHdpZHRoOiAyMDBweDsKICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCk7CiAgICAgIC0tcGFwZXItcHJvZ3Jlc3MtYWN0aXZlLWNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXItYWN0aXZlLWNvbG9yLCB2YXIoLS1nb29nbGUtYmx1ZS03MDApKTsKICAgICAgLS1wYXBlci1wcm9ncmVzcy1zZWNvbmRhcnktY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1zZWNvbmRhcnktY29sb3IsIHZhcigtLWdvb2dsZS1ibHVlLTMwMCkpOwogICAgICAtLXBhcGVyLXByb2dyZXNzLWRpc2FibGVkLWFjdGl2ZS1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLWRpc2FibGVkLWFjdGl2ZS1jb2xvciwgdmFyKC0tcGFwZXItZ3JleS00MDApKTsKICAgICAgLS1wYXBlci1wcm9ncmVzcy1kaXNhYmxlZC1zZWNvbmRhcnktY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1kaXNhYmxlZC1zZWNvbmRhcnktY29sb3IsIHZhcigtLXBhcGVyLWdyZXktNDAwKSk7CiAgICAgIC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0OiB2YXIoLS1wYXBlci1zbGlkZXItaGVpZ2h0LCAycHgpOwogICAgfQoKICAgIC8qIGZvY3VzIHNob3dzIHRoZSByaXBwbGUgKi8KICAgIDpob3N0KDpmb2N1cykgewogICAgICBvdXRsaW5lOiBub25lOwogICAgfQoKICAgIC8qKgogICAgICAqIE5PVEUoa2VhbnVsZWUpOiBUaG91Z2ggOmhvc3QtY29udGV4dCBpcyBub3QgdW5pdmVyc2FsbHkgc3VwcG9ydGVkLCBzb21lIHBhZ2VzCiAgICAgICogc3RpbGwgcmVseSBvbiBwYXBlci1zbGlkZXIgYmVpbmcgZmxpcHBlZCB3aGVuIGRpcj0icnRsIiBpcyBzZXQgb24gYm9keS4gRm9yIGZ1bGwKICAgICAgKiBjb21wYXRpYmlsaXR5LCBkaXI9InJ0bCIgbXVzdCBiZSBleHBsaWNpdGx5IHNldCBvbiBwYXBlci1zbGlkZXIuCiAgICAgICovCiAgICA6ZGlyKHJ0bCkgI3NsaWRlckNvbnRhaW5lciB7CiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLTEpOwogICAgICB0cmFuc2Zvcm06IHNjYWxlWCgtMSk7CiAgICB9CgogICAgLyoqCiAgICAgICogTk9URShrZWFudWxlZSk6IFRoaXMgaXMgc2VwYXJhdGUgZnJvbSB0aGUgcnVsZSBhYm92ZSBiZWNhdXNlIDpob3N0LWNvbnRleHQgbWF5CiAgICAgICogbm90IGJlIHJlY29nbml6ZWQuCiAgICAgICovCiAgICA6aG9zdChbZGlyPSJydGwiXSkgI3NsaWRlckNvbnRhaW5lciB7CiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLTEpOwogICAgICB0cmFuc2Zvcm06IHNjYWxlWCgtMSk7CiAgICB9CgogICAgLyoqCiAgICAgICogTk9URShrZWFudWxlZSk6IE5lZWRlZCB0byBvdmVycmlkZSB0aGUgOmhvc3QtY29udGV4dCBydWxlICh3aGVyZSBzdXBwb3J0ZWQpCiAgICAgICogdG8gc3VwcG9ydCBMVFIgc2xpZGVycyBpbiBSVEwgcGFnZXMuCiAgICAgICovCiAgICA6aG9zdChbZGlyPSJsdHIiXSkgI3NsaWRlckNvbnRhaW5lciB7CiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoMSk7CiAgICAgIHRyYW5zZm9ybTogc2NhbGVYKDEpOwogICAgfQoKICAgICNzbGlkZXJDb250YWluZXIgewogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBoZWlnaHQ6IGNhbGMoMzBweCArIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItc2xpZGVyLWhlaWdodCkpOwogICAgICBtYXJnaW4tbGVmdDogY2FsYygxNXB4ICsgdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KS8yKTsKICAgICAgbWFyZ2luLXJpZ2h0OiBjYWxjKDE1cHggKyB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXNsaWRlci1oZWlnaHQpLzIpOwogICAgfQoKICAgICNzbGlkZXJDb250YWluZXI6Zm9jdXMgewogICAgICBvdXRsaW5lOiAwOwogICAgfQoKICAgICNzbGlkZXJDb250YWluZXIuZWRpdGFibGUgewogICAgICBtYXJnaW4tdG9wOiAxMnB4OwogICAgICBtYXJnaW4tYm90dG9tOiAxMnB4OwogICAgfQoKICAgIC5iYXItY29udGFpbmVyIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB0b3A6IDA7CiAgICAgIGJvdHRvbTogMDsKICAgICAgbGVmdDogMDsKICAgICAgcmlnaHQ6IDA7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB9CgogICAgLnJpbmcgPiAuYmFyLWNvbnRhaW5lciB7CiAgICAgIGxlZnQ6IGNhbGMoNXB4ICsgdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KS8yKTsKICAgICAgdHJhbnNpdGlvbjogbGVmdCAwLjE4cyBlYXNlOwogICAgfQoKICAgIC5yaW5nLmV4cGFuZC5kcmFnZ2luZyA+IC5iYXItY29udGFpbmVyIHsKICAgICAgdHJhbnNpdGlvbjogbm9uZTsKICAgIH0KCiAgICAucmluZy5leHBhbmQ6bm90KC5waW4pID4gLmJhci1jb250YWluZXIgewogICAgICBsZWZ0OiBjYWxjKDhweCArIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItc2xpZGVyLWhlaWdodCkvMik7CiAgICB9CgogICAgI3NsaWRlckJhciB7CiAgICAgIHBhZGRpbmc6IDE1cHggMDsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1iYXItY29sb3IsIHRyYW5zcGFyZW50KTsKICAgICAgLS1wYXBlci1wcm9ncmVzcy1jb250YWluZXItY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1jb250YWluZXItY29sb3IsIHZhcigtLXBhcGVyLWdyZXktNDAwKSk7CiAgICAgIC0tcGFwZXItcHJvZ3Jlc3MtaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXNsaWRlci1oZWlnaHQpOwogICAgfQoKICAgIC5zbGlkZXItbWFya2VycyB7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgLyogc2xpZGVyLWtub2IgaXMgMzBweCArIHRoZSBzbGlkZXItaGVpZ2h0IHNvIHRoYXQgdGhlIG1hcmtlcnMgc2hvdWxkIHN0YXJ0IGF0IGEgb2Zmc2V0IG9mIDE1cHgqLwogICAgICB0b3A6IDE1cHg7CiAgICAgIGhlaWdodDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KTsKICAgICAgbGVmdDogMDsKICAgICAgcmlnaHQ6IC0xcHg7CiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICBAYXBwbHkgLS1sYXlvdXQtaG9yaXpvbnRhbDsKICAgIH0KCiAgICAuc2xpZGVyLW1hcmtlciB7CiAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4OwogICAgfQogICAgLnNsaWRlci1tYXJrZXJzOjphZnRlciwKICAgIC5zbGlkZXItbWFya2VyOjphZnRlciB7CiAgICAgIGNvbnRlbnQ6ICIiOwogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgbWFyZ2luLWxlZnQ6IC0xcHg7CiAgICAgIHdpZHRoOiAycHg7CiAgICAgIGhlaWdodDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KTsKICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXItbWFya2Vycy1jb2xvciwgIzAwMCk7CiAgICB9CgogICAgLnNsaWRlci1rbm9iIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICBsZWZ0OiAwOwogICAgICB0b3A6IDA7CiAgICAgIG1hcmdpbi1sZWZ0OiBjYWxjKC0xNXB4IC0gdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KS8yKTsKICAgICAgd2lkdGg6IGNhbGMoMzBweCArIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItc2xpZGVyLWhlaWdodCkpOwogICAgICBoZWlnaHQ6IGNhbGMoMzBweCArIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItc2xpZGVyLWhlaWdodCkpOwogICAgfQoKICAgIC50cmFuc2l0aW5nID4gLnNsaWRlci1rbm9iIHsKICAgICAgdHJhbnNpdGlvbjogbGVmdCAwLjA4cyBlYXNlOwogICAgfQoKICAgIC5zbGlkZXIta25vYjpmb2N1cyB7CiAgICAgIG91dGxpbmU6IG5vbmU7CiAgICB9CgogICAgLnNsaWRlci1rbm9iLmRyYWdnaW5nIHsKICAgICAgdHJhbnNpdGlvbjogbm9uZTsKICAgIH0KCiAgICAuc25hcHMgPiAuc2xpZGVyLWtub2IuZHJhZ2dpbmcgewogICAgICB0cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAwLjA4cyBlYXNlOwogICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4wOHMgZWFzZTsKICAgIH0KCiAgICAuc2xpZGVyLWtub2ItaW5uZXIgewogICAgICBtYXJnaW46IDEwcHg7CiAgICAgIHdpZHRoOiBjYWxjKDEwMCUgLSAyMHB4KTsKICAgICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAyMHB4KTsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLWtub2ItY29sb3IsIHZhcigtLWdvb2dsZS1ibHVlLTcwMCkpOwogICAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1wYXBlci1zbGlkZXIta25vYi1jb2xvciwgdmFyKC0tZ29vZ2xlLWJsdWUtNzAwKSk7CiAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKCiAgICAgIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKCiAgICAgIHRyYW5zaXRpb24tcHJvcGVydHk6IC13ZWJraXQtdHJhbnNmb3JtLCBiYWNrZ3JvdW5kLWNvbG9yLCBib3JkZXI7CiAgICAgIHRyYW5zaXRpb24tcHJvcGVydHk6IHRyYW5zZm9ybSwgYmFja2dyb3VuZC1jb2xvciwgYm9yZGVyOwogICAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjE4czsKICAgICAgdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IGVhc2U7CiAgICB9CgogICAgLmV4cGFuZDpub3QoLnBpbikgPiAuc2xpZGVyLWtub2IgPiAuc2xpZGVyLWtub2ItaW5uZXIgewogICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMS41KTsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjUpOwogICAgfQoKICAgIC5yaW5nID4gLnNsaWRlci1rbm9iID4gLnNsaWRlci1rbm9iLWlubmVyIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtY29sb3IsIHRyYW5zcGFyZW50KTsKICAgICAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtYm9yZGVyLWNvbG9yLCB2YXIoLS1wYXBlci1ncmV5LTQwMCkpOwogICAgfQoKICAgIC5zbGlkZXIta25vYi1pbm5lcjo6YmVmb3JlIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLXBpbi1jb2xvciwgdmFyKC0tZ29vZ2xlLWJsdWUtNzAwKSk7CiAgICB9CgogICAgLnBpbiA+IC5zbGlkZXIta25vYiA+IC5zbGlkZXIta25vYi1pbm5lcjo6YmVmb3JlIHsKICAgICAgY29udGVudDogIiI7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgdG9wOiAwOwogICAgICBsZWZ0OiA1MCU7CiAgICAgIG1hcmdpbi1sZWZ0OiAtMTNweDsKICAgICAgd2lkdGg6IDI2cHg7CiAgICAgIGhlaWdodDogMjZweDsKICAgICAgYm9yZGVyLXJhZGl1czogNTAlIDUwJSA1MCUgMDsKCiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTQ1ZGVnKSBzY2FsZSgwKSB0cmFuc2xhdGUoMCk7CiAgICAgIHRyYW5zZm9ybTogcm90YXRlKC00NWRlZykgc2NhbGUoMCkgdHJhbnNsYXRlKDApOwogICAgfQoKICAgIC5zbGlkZXIta25vYi1pbm5lcjo6YmVmb3JlLAogICAgLnNsaWRlci1rbm9iLWlubmVyOjphZnRlciB7CiAgICAgIHRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIC4xOHMgZWFzZSwgYmFja2dyb3VuZC1jb2xvciAuMThzIGVhc2U7CiAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAuMThzIGVhc2UsIGJhY2tncm91bmQtY29sb3IgLjE4cyBlYXNlOwogICAgfQoKICAgIC5waW4ucmluZyA+IC5zbGlkZXIta25vYiA+IC5zbGlkZXIta25vYi1pbm5lcjo6YmVmb3JlIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLXBpbi1zdGFydC1jb2xvciwgdmFyKC0tcGFwZXItZ3JleS00MDApKTsKICAgIH0KCiAgICAucGluLmV4cGFuZCA+IC5zbGlkZXIta25vYiA+IC5zbGlkZXIta25vYi1pbm5lcjo6YmVmb3JlIHsKICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgtNDVkZWcpIHNjYWxlKDEpIHRyYW5zbGF0ZSgxN3B4LCAtMTdweCk7CiAgICAgIHRyYW5zZm9ybTogcm90YXRlKC00NWRlZykgc2NhbGUoMSkgdHJhbnNsYXRlKDE3cHgsIC0xN3B4KTsKICAgIH0KCiAgICAucGluID4gLnNsaWRlci1rbm9iID4gLnNsaWRlci1rbm9iLWlubmVyOjphZnRlciB7CiAgICAgIGNvbnRlbnQ6IGF0dHIodmFsdWUpOwogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIHRvcDogMDsKICAgICAgbGVmdDogNTAlOwogICAgICBtYXJnaW4tbGVmdDogLTE2cHg7CiAgICAgIHdpZHRoOiAzMnB4OwogICAgICBoZWlnaHQ6IDI2cHg7CiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1mb250LWNvbG9yLCAjZmZmKTsKICAgICAgZm9udC1zaXplOiAxMHB4OwoKICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDApIHRyYW5zbGF0ZSgwKTsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwKSB0cmFuc2xhdGUoMCk7CiAgICB9CgogICAgLnBpbi5leHBhbmQgPiAuc2xpZGVyLWtub2IgPiAuc2xpZGVyLWtub2ItaW5uZXI6OmFmdGVyIHsKICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEpIHRyYW5zbGF0ZSgwLCAtMTdweCk7CiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSkgdHJhbnNsYXRlKDAsIC0xN3B4KTsKICAgIH0KCiAgICAvKiBwYXBlci1pbnB1dCAqLwogICAgLnNsaWRlci1pbnB1dCB7CiAgICAgIHdpZHRoOiA1MHB4OwogICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDogewogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBAYXBwbHkgLS1wYXBlci1zbGlkZXItaW5wdXQtY29udGFpbmVyLWlucHV0OwogICAgICB9OwogICAgICBAYXBwbHkgLS1wYXBlci1zbGlkZXItaW5wdXQ7CiAgICB9CgogICAgLyogZGlzYWJsZWQgc3RhdGUgKi8KICAgICNzbGlkZXJDb250YWluZXIuZGlzYWJsZWQgewogICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIH0KCiAgICAuZGlzYWJsZWQgPiAuc2xpZGVyLWtub2IgPiAuc2xpZGVyLWtub2ItaW5uZXIgewogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXItZGlzYWJsZWQta25vYi1jb2xvciwgdmFyKC0tcGFwZXItZ3JleS00MDApKTsKICAgICAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tcGFwZXItc2xpZGVyLWRpc2FibGVkLWtub2ItY29sb3IsIHZhcigtLXBhcGVyLWdyZXktNDAwKSk7CiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZTNkKDAuNzUsIDAuNzUsIDEpOwogICAgICB0cmFuc2Zvcm06IHNjYWxlM2QoMC43NSwgMC43NSwgMSk7CiAgICB9CgogICAgLmRpc2FibGVkLnJpbmcgPiAuc2xpZGVyLWtub2IgPiAuc2xpZGVyLWtub2ItaW5uZXIgewogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1jb2xvciwgdHJhbnNwYXJlbnQpOwogICAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1ib3JkZXItY29sb3IsIHZhcigtLXBhcGVyLWdyZXktNDAwKSk7CiAgICB9CgogICAgcGFwZXItcmlwcGxlIHsKICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1rbm9iLWNvbG9yLCB2YXIoLS1nb29nbGUtYmx1ZS03MDApKTsKICAgIH0KICA8L3N0eWxlPgoKICA8ZGl2IGlkPSJzbGlkZXJDb250YWluZXIiIGNsYXNzXCQ9IltbX2dldENsYXNzTmFtZXMoZGlzYWJsZWQsIHBpbiwgc25hcHMsIGltbWVkaWF0ZVZhbHVlLCBtaW4sIGV4cGFuZCwgZHJhZ2dpbmcsIHRyYW5zaXRpbmcsIGVkaXRhYmxlKV1dIj4KICAgIDxkaXYgY2xhc3M9ImJhci1jb250YWluZXIiPgogICAgICA8cGFwZXItcHJvZ3Jlc3MgZGlzYWJsZWRcJD0iW1tkaXNhYmxlZF1dIiBpZD0ic2xpZGVyQmFyIiBhcmlhLWhpZGRlbj0idHJ1ZSIgbWluPSJbW21pbl1dIiBtYXg9IltbbWF4XV0iIHN0ZXA9Iltbc3RlcF1dIiB2YWx1ZT0iW1tpbW1lZGlhdGVWYWx1ZV1dIiBzZWNvbmRhcnktcHJvZ3Jlc3M9Iltbc2Vjb25kYXJ5UHJvZ3Jlc3NdXSIgb24tZG93bj0iX2JhcmRvd24iIG9uLXVwPSJfcmVzZXRLbm9iIiBvbi10cmFjaz0iX2JhcnRyYWNrIiBvbi10YXA9Il9iYXJjbGljayI+CiAgICAgIDwvcGFwZXItcHJvZ3Jlc3M+CiAgICA8L2Rpdj4KCiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Iltbc25hcHNdXSI+CiAgICAgIDxkaXYgY2xhc3M9InNsaWRlci1tYXJrZXJzIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW21hcmtlcnNdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzbGlkZXItbWFya2VyIj48L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CgogICAgPGRpdiBpZD0ic2xpZGVyS25vYiIgY2xhc3M9InNsaWRlci1rbm9iIiBvbi1kb3duPSJfa25vYmRvd24iIG9uLXVwPSJfcmVzZXRLbm9iIiBvbi10cmFjaz0iX29uVHJhY2siIG9uLXRyYW5zaXRpb25lbmQ9Il9rbm9iVHJhbnNpdGlvbkVuZCI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2xpZGVyLWtub2ItaW5uZXIiIHZhbHVlXCQ9IltbaW1tZWRpYXRlVmFsdWVdXSI+PC9kaXY+CiAgICA8L2Rpdj4KICA8L2Rpdj4KCiAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2VkaXRhYmxlXV0iPgogICAgPHBhcGVyLWlucHV0IGlkPSJpbnB1dCIgdHlwZT0ibnVtYmVyIiBzdGVwPSJbW3N0ZXBdXSIgbWluPSJbW21pbl1dIiBtYXg9IltbbWF4XV0iIGNsYXNzPSJzbGlkZXItaW5wdXQiIGRpc2FibGVkXCQ9IltbZGlzYWJsZWRdXSIgdmFsdWU9IltbaW1tZWRpYXRlVmFsdWVdXSIgb24tY2hhbmdlPSJfY2hhbmdlVmFsdWUiIG9uLWtleWRvd249Il9pbnB1dEtleURvd24iIG5vLWxhYmVsLWZsb2F0PgogICAgPC9wYXBlci1pbnB1dD4KICA8L3RlbXBsYXRlPgpgO2lzLnNldEF0dHJpYnV0ZSgic3RyaXAtd2hpdGVzcGFjZSIsIiIpLElyKHtfdGVtcGxhdGU6aXMsaXM6InBhcGVyLXNsaWRlciIsYmVoYXZpb3JzOltSbyxpYSxsYSxRYV0scHJvcGVydGllczp7dmFsdWU6e3R5cGU6TnVtYmVyLHZhbHVlOjB9LHNuYXBzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwfSxwaW46e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITB9LHNlY29uZGFyeVByb2dyZXNzOnt0eXBlOk51bWJlcix2YWx1ZTowLG5vdGlmeTohMCxvYnNlcnZlcjoiX3NlY29uZGFyeVByb2dyZXNzQ2hhbmdlZCJ9LGVkaXRhYmxlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGltbWVkaWF0ZVZhbHVlOnt0eXBlOk51bWJlcix2YWx1ZTowLHJlYWRPbmx5OiEwLG5vdGlmeTohMH0sbWF4TWFya2Vyczp7dHlwZTpOdW1iZXIsdmFsdWU6MCxub3RpZnk6ITB9LGV4cGFuZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlYWRPbmx5OiEwfSxpZ25vcmVCYXJUb3VjaDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxkcmFnZ2luZzp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlYWRPbmx5OiEwLG5vdGlmeTohMH0sdHJhbnNpdGluZzp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlYWRPbmx5OiEwfSxtYXJrZXJzOnt0eXBlOkFycmF5LHJlYWRPbmx5OiEwLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuW119fX0sb2JzZXJ2ZXJzOlsiX3VwZGF0ZUtub2IodmFsdWUsIG1pbiwgbWF4LCBzbmFwcywgc3RlcCkiLCJfdmFsdWVDaGFuZ2VkKHZhbHVlKSIsIl9pbW1lZGlhdGVWYWx1ZUNoYW5nZWQoaW1tZWRpYXRlVmFsdWUpIiwiX3VwZGF0ZU1hcmtlcnMobWF4TWFya2VycywgbWluLCBtYXgsIHNuYXBzKSJdLGhvc3RBdHRyaWJ1dGVzOntyb2xlOiJzbGlkZXIiLHRhYmluZGV4OjB9LGtleUJpbmRpbmdzOntsZWZ0OiJfbGVmdEtleSIscmlnaHQ6Il9yaWdodEtleSIsImRvd24gcGFnZWRvd24gaG9tZSI6Il9kZWNyZW1lbnRLZXkiLCJ1cCBwYWdldXAgZW5kIjoiX2luY3JlbWVudEtleSJ9LHJlYWR5OmZ1bmN0aW9uKCl7dGhpcy5pZ25vcmVCYXJUb3VjaCYmcmkodGhpcy4kLnNsaWRlckJhciwiYXV0byIpfSxpbmNyZW1lbnQ6ZnVuY3Rpb24oKXt0aGlzLnZhbHVlPXRoaXMuX2NsYW1wVmFsdWUodGhpcy52YWx1ZSt0aGlzLnN0ZXApfSxkZWNyZW1lbnQ6ZnVuY3Rpb24oKXt0aGlzLnZhbHVlPXRoaXMuX2NsYW1wVmFsdWUodGhpcy52YWx1ZS10aGlzLnN0ZXApfSxfdXBkYXRlS25vYjpmdW5jdGlvbih0LGUsbixpLHIpe3RoaXMuc2V0QXR0cmlidXRlKCJhcmlhLXZhbHVlbWluIixlKSx0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS12YWx1ZW1heCIsbiksdGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtdmFsdWVub3ciLHQpLHRoaXMuX3Bvc2l0aW9uS25vYigxMDAqdGhpcy5fY2FsY1JhdGlvKHQpKX0sX3ZhbHVlQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuZmlyZSgidmFsdWUtY2hhbmdlIix7Y29tcG9zZWQ6ITB9KX0sX2ltbWVkaWF0ZVZhbHVlQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuZHJhZ2dpbmc/dGhpcy5maXJlKCJpbW1lZGlhdGUtdmFsdWUtY2hhbmdlIix7Y29tcG9zZWQ6ITB9KTp0aGlzLnZhbHVlPXRoaXMuaW1tZWRpYXRlVmFsdWV9LF9zZWNvbmRhcnlQcm9ncmVzc0NoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLnNlY29uZGFyeVByb2dyZXNzPXRoaXMuX2NsYW1wVmFsdWUodGhpcy5zZWNvbmRhcnlQcm9ncmVzcyl9LF9leHBhbmRLbm9iOmZ1bmN0aW9uKCl7dGhpcy5fc2V0RXhwYW5kKCEwKX0sX3Jlc2V0S25vYjpmdW5jdGlvbigpe3RoaXMuY2FuY2VsRGVib3VuY2VyKCJleHBhbmRLbm9iIiksdGhpcy5fc2V0RXhwYW5kKCExKX0sX3Bvc2l0aW9uS25vYjpmdW5jdGlvbih0KXt0aGlzLl9zZXRJbW1lZGlhdGVWYWx1ZSh0aGlzLl9jYWxjU3RlcCh0aGlzLl9jYWxjS25vYlBvc2l0aW9uKHQpKSksdGhpcy5fc2V0UmF0aW8oMTAwKnRoaXMuX2NhbGNSYXRpbyh0aGlzLmltbWVkaWF0ZVZhbHVlKSksdGhpcy4kLnNsaWRlcktub2Iuc3R5bGUubGVmdD10aGlzLnJhdGlvKyIlIix0aGlzLmRyYWdnaW5nJiYodGhpcy5fa25vYnN0YXJ0eD10aGlzLnJhdGlvKnRoaXMuX3cvMTAwLHRoaXMudHJhbnNsYXRlM2QoMCwwLDAsdGhpcy4kLnNsaWRlcktub2IpKX0sX2NhbGNLbm9iUG9zaXRpb246ZnVuY3Rpb24odCl7cmV0dXJuKHRoaXMubWF4LXRoaXMubWluKSp0LzEwMCt0aGlzLm1pbn0sX29uVHJhY2s6ZnVuY3Rpb24odCl7c3dpdGNoKHQuc3RvcFByb3BhZ2F0aW9uKCksdC5kZXRhaWwuc3RhdGUpe2Nhc2Uic3RhcnQiOnRoaXMuX3RyYWNrU3RhcnQodCk7YnJlYWs7Y2FzZSJ0cmFjayI6dGhpcy5fdHJhY2tYKHQpO2JyZWFrO2Nhc2UiZW5kIjp0aGlzLl90cmFja0VuZCgpfX0sX3RyYWNrU3RhcnQ6ZnVuY3Rpb24odCl7dGhpcy5fc2V0VHJhbnNpdGluZyghMSksdGhpcy5fdz10aGlzLiQuc2xpZGVyQmFyLm9mZnNldFdpZHRoLHRoaXMuX3g9dGhpcy5yYXRpbyp0aGlzLl93LzEwMCx0aGlzLl9zdGFydHg9dGhpcy5feCx0aGlzLl9rbm9ic3RhcnR4PXRoaXMuX3N0YXJ0eCx0aGlzLl9taW54PS10aGlzLl9zdGFydHgsdGhpcy5fbWF4eD10aGlzLl93LXRoaXMuX3N0YXJ0eCx0aGlzLiQuc2xpZGVyS25vYi5jbGFzc0xpc3QuYWRkKCJkcmFnZ2luZyIpLHRoaXMuX3NldERyYWdnaW5nKCEwKX0sX3RyYWNrWDpmdW5jdGlvbih0KXt0aGlzLmRyYWdnaW5nfHx0aGlzLl90cmFja1N0YXJ0KHQpO3ZhciBlPU1hdGgubWluKHRoaXMuX21heHgsTWF0aC5tYXgodGhpcy5fbWlueCx0LmRldGFpbC5keCoodGhpcy5faXNSVEw/LTE6MSkpKTt0aGlzLl94PXRoaXMuX3N0YXJ0eCtlO3ZhciBuPXRoaXMuX2NhbGNTdGVwKHRoaXMuX2NhbGNLbm9iUG9zaXRpb24odGhpcy5feC90aGlzLl93KjEwMCkpO3RoaXMuX3NldEltbWVkaWF0ZVZhbHVlKG4pO3ZhciBpPXRoaXMuX2NhbGNSYXRpbyh0aGlzLmltbWVkaWF0ZVZhbHVlKSp0aGlzLl93LXRoaXMuX2tub2JzdGFydHg7dGhpcy50cmFuc2xhdGUzZChpKyJweCIsMCwwLHRoaXMuJC5zbGlkZXJLbm9iKX0sX3RyYWNrRW5kOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy4kLnNsaWRlcktub2Iuc3R5bGU7dGhpcy4kLnNsaWRlcktub2IuY2xhc3NMaXN0LnJlbW92ZSgiZHJhZ2dpbmciKSx0aGlzLl9zZXREcmFnZ2luZyghMSksdGhpcy5fcmVzZXRLbm9iKCksdGhpcy52YWx1ZT10aGlzLmltbWVkaWF0ZVZhbHVlLHQudHJhbnNmb3JtPXQud2Via2l0VHJhbnNmb3JtPSIiLHRoaXMuZmlyZSgiY2hhbmdlIix7Y29tcG9zZWQ6ITB9KX0sX2tub2Jkb3duOmZ1bmN0aW9uKHQpe3RoaXMuX2V4cGFuZEtub2IoKSx0LnByZXZlbnREZWZhdWx0KCksdGhpcy5mb2N1cygpfSxfYmFydHJhY2s6ZnVuY3Rpb24odCl7dGhpcy5fYWxsb3dCYXJFdmVudCh0KSYmdGhpcy5fb25UcmFjayh0KX0sX2JhcmNsaWNrOmZ1bmN0aW9uKHQpe3RoaXMuX3c9dGhpcy4kLnNsaWRlckJhci5vZmZzZXRXaWR0aDt2YXIgZT10aGlzLiQuc2xpZGVyQmFyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49KHQuZGV0YWlsLngtZS5sZWZ0KS90aGlzLl93KjEwMDt0aGlzLl9pc1JUTCYmKG49MTAwLW4pO3ZhciBpPXRoaXMucmF0aW87dGhpcy5fc2V0VHJhbnNpdGluZyghMCksdGhpcy5fcG9zaXRpb25Lbm9iKG4pLGk9PT10aGlzLnJhdGlvJiZ0aGlzLl9zZXRUcmFuc2l0aW5nKCExKSx0aGlzLmFzeW5jKChmdW5jdGlvbigpe3RoaXMuZmlyZSgiY2hhbmdlIix7Y29tcG9zZWQ6ITB9KX0pKSx0LnByZXZlbnREZWZhdWx0KCksdGhpcy5mb2N1cygpfSxfYmFyZG93bjpmdW5jdGlvbih0KXt0aGlzLl9hbGxvd0JhckV2ZW50KHQpJiYodGhpcy5kZWJvdW5jZSgiZXhwYW5kS25vYiIsdGhpcy5fZXhwYW5kS25vYiw2MCksdGhpcy5fYmFyY2xpY2sodCkpfSxfa25vYlRyYW5zaXRpb25FbmQ6ZnVuY3Rpb24odCl7dC50YXJnZXQ9PT10aGlzLiQuc2xpZGVyS25vYiYmdGhpcy5fc2V0VHJhbnNpdGluZyghMSl9LF91cGRhdGVNYXJrZXJzOmZ1bmN0aW9uKHQsZSxuLGkpe2l8fHRoaXMuX3NldE1hcmtlcnMoW10pO3ZhciByPU1hdGgucm91bmQoKG4tZSkvdGhpcy5zdGVwKTtyPnQmJihyPXQpLChyPDB8fCFpc0Zpbml0ZShyKSkmJihyPTApLHRoaXMuX3NldE1hcmtlcnMobmV3IEFycmF5KHIpKX0sX21lcmdlQ2xhc3NlczpmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmtleXModCkuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pKS5qb2luKCIgIil9LF9nZXRDbGFzc05hbWVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21lcmdlQ2xhc3Nlcyh7ZGlzYWJsZWQ6dGhpcy5kaXNhYmxlZCxwaW46dGhpcy5waW4sc25hcHM6dGhpcy5zbmFwcyxyaW5nOnRoaXMuaW1tZWRpYXRlVmFsdWU8PXRoaXMubWluLGV4cGFuZDp0aGlzLmV4cGFuZCxkcmFnZ2luZzp0aGlzLmRyYWdnaW5nLHRyYW5zaXRpbmc6dGhpcy50cmFuc2l0aW5nLGVkaXRhYmxlOnRoaXMuZWRpdGFibGV9KX0sX2FsbG93QmFyRXZlbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIXRoaXMuaWdub3JlQmFyVG91Y2h8fHQuZGV0YWlsLnNvdXJjZUV2ZW50IGluc3RhbmNlb2YgTW91c2VFdmVudH0sZ2V0IF9pc1JUTCgpe3JldHVybiB2b2lkIDA9PT10aGlzLl9faXNSVEwmJih0aGlzLl9faXNSVEw9InJ0bCI9PT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzKS5kaXJlY3Rpb24pLHRoaXMuX19pc1JUTH0sX2xlZnRLZXk6ZnVuY3Rpb24odCl7dGhpcy5faXNSVEw/dGhpcy5faW5jcmVtZW50S2V5KHQpOnRoaXMuX2RlY3JlbWVudEtleSh0KX0sX3JpZ2h0S2V5OmZ1bmN0aW9uKHQpe3RoaXMuX2lzUlRMP3RoaXMuX2RlY3JlbWVudEtleSh0KTp0aGlzLl9pbmNyZW1lbnRLZXkodCl9LF9pbmNyZW1lbnRLZXk6ZnVuY3Rpb24odCl7dGhpcy5kaXNhYmxlZHx8KCJlbmQiPT09dC5kZXRhaWwua2V5P3RoaXMudmFsdWU9dGhpcy5tYXg6dGhpcy5pbmNyZW1lbnQoKSx0aGlzLmZpcmUoImNoYW5nZSIpLHQucHJldmVudERlZmF1bHQoKSl9LF9kZWNyZW1lbnRLZXk6ZnVuY3Rpb24odCl7dGhpcy5kaXNhYmxlZHx8KCJob21lIj09PXQuZGV0YWlsLmtleT90aGlzLnZhbHVlPXRoaXMubWluOnRoaXMuZGVjcmVtZW50KCksdGhpcy5maXJlKCJjaGFuZ2UiKSx0LnByZXZlbnREZWZhdWx0KCkpfSxfY2hhbmdlVmFsdWU6ZnVuY3Rpb24odCl7dGhpcy52YWx1ZT10LnRhcmdldC52YWx1ZSx0aGlzLmZpcmUoImNoYW5nZSIse2NvbXBvc2VkOiEwfSl9LF9pbnB1dEtleURvd246ZnVuY3Rpb24odCl7dC5zdG9wUHJvcGFnYXRpb24oKX0sX2NyZWF0ZVJpcHBsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yaXBwbGVDb250YWluZXI9dGhpcy4kLnNsaWRlcktub2Isc2EuX2NyZWF0ZVJpcHBsZS5jYWxsKHRoaXMpfSxfZm9jdXNlZENoYW5nZWQ6ZnVuY3Rpb24odCl7dCYmdGhpcy5lbnN1cmVSaXBwbGUoKSx0aGlzLmhhc1JpcHBsZSgpJiYodGhpcy5fcmlwcGxlLnN0eWxlLmRpc3BsYXk9dD8iIjoibm9uZSIsdGhpcy5fcmlwcGxlLmhvbGREb3duPXQpfX0pOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KY29uc3QgcnM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtycy5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZGlzcGxheTogbm9uZTsiKSxycy5pbm5lckhUTUw9Ijxkb20tbW9kdWxlIGlkPVwicGFwZXItc3Bpbm5lci1zdHlsZXNcIj5cbiAgPHRlbXBsYXRlPlxuICAgIDxzdHlsZT5cbiAgICAgIC8qXG4gICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4gICAgICAvKiBTVFlMRVMgRk9SIFRIRSBTUElOTkVSICovXG4gICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgICAgIC8qXG4gICAgICAgKiBDb25zdGFudHM6XG4gICAgICAgKiAgICAgIEFSQ1NJWkUgICAgID0gMjcwIGRlZ3JlZXMgKGFtb3VudCBvZiBjaXJjbGUgdGhlIGFyYyB0YWtlcyB1cClcbiAgICAgICAqICAgICAgQVJDVElNRSAgICAgPSAxMzMzbXMgKHRpbWUgaXQgdGFrZXMgdG8gZXhwYW5kIGFuZCBjb250cmFjdCBhcmMpXG4gICAgICAgKiAgICAgIEFSQ1NUQVJUUk9UID0gMjE2IGRlZ3JlZXMgKGhvdyBtdWNoIHRoZSBzdGFydCBsb2NhdGlvbiBvZiB0aGUgYXJjXG4gICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkIHJvdGF0ZSBlYWNoIHRpbWUsIDIxNiBnaXZlcyB1cyBhXG4gICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNSBwb2ludGVkIHN0YXIgc2hhcGUgKGl0J3MgMzYwLzUgKiAzKS5cbiAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgYSA3IHBvaW50ZWQgc3Rhciwgd2UgbWlnaHQgZG9cbiAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNjAvNyAqIDMgPSAxNTQuMjg2KVxuICAgICAgICogICAgICBTSFJJTktfVElNRSA9IDQwMG1zXG4gICAgICAgKi9cblxuICAgICAgOmhvc3Qge1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgd2lkdGg6IDI4cHg7XG4gICAgICAgIGhlaWdodDogMjhweDtcblxuICAgICAgICAvKiAzNjAgKiBBUkNUSU1FIC8gKEFSQ1NUQVJUUk9UICsgKDM2MC1BUkNTSVpFKSkgKi9cbiAgICAgICAgLS1wYXBlci1zcGlubmVyLWNvbnRhaW5lci1yb3RhdGlvbi1kdXJhdGlvbjogMTU2OG1zO1xuXG4gICAgICAgIC8qIEFSQ1RJTUUgKi9cbiAgICAgICAgLS1wYXBlci1zcGlubmVyLWV4cGFuZC1jb250cmFjdC1kdXJhdGlvbjogMTMzM21zO1xuXG4gICAgICAgIC8qIDQgKiBBUkNUSU1FICovXG4gICAgICAgIC0tcGFwZXItc3Bpbm5lci1mdWxsLWN5Y2xlLWR1cmF0aW9uOiA1MzMybXM7XG5cbiAgICAgICAgLyogU0hSSU5LX1RJTUUgKi9cbiAgICAgICAgLS1wYXBlci1zcGlubmVyLWNvb2xkb3duLWR1cmF0aW9uOiA0MDBtcztcbiAgICAgIH1cblxuICAgICAgI3NwaW5uZXJDb250YWluZXIge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuXG4gICAgICAgIC8qIFRoZSBzcGlubmVyIGRvZXMgbm90IGhhdmUgYW55IGNvbnRlbnRzIHRoYXQgd291bGQgaGF2ZSB0byBiZVxuICAgICAgICAgKiBmbGlwcGVkIGlmIHRoZSBkaXJlY3Rpb24gY2hhbmdlcy4gQWx3YXlzIHVzZSBsdHIgc28gdGhhdCB0aGVcbiAgICAgICAgICogc3R5bGUgd29ya3Mgb3V0IGNvcnJlY3RseSBpbiBib3RoIGNhc2VzLiAqL1xuICAgICAgICBkaXJlY3Rpb246IGx0cjtcbiAgICAgIH1cblxuICAgICAgI3NwaW5uZXJDb250YWluZXIuYWN0aXZlIHtcbiAgICAgICAgLXdlYmtpdC1hbmltYXRpb246IGNvbnRhaW5lci1yb3RhdGUgdmFyKC0tcGFwZXItc3Bpbm5lci1jb250YWluZXItcm90YXRpb24tZHVyYXRpb24pIGxpbmVhciBpbmZpbml0ZTtcbiAgICAgICAgYW5pbWF0aW9uOiBjb250YWluZXItcm90YXRlIHZhcigtLXBhcGVyLXNwaW5uZXItY29udGFpbmVyLXJvdGF0aW9uLWR1cmF0aW9uKSBsaW5lYXIgaW5maW5pdGU7XG4gICAgICB9XG5cbiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBjb250YWluZXItcm90YXRlIHtcbiAgICAgICAgdG8geyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDM2MGRlZykgfVxuICAgICAgfVxuXG4gICAgICBAa2V5ZnJhbWVzIGNvbnRhaW5lci1yb3RhdGUge1xuICAgICAgICB0byB7IHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZykgfVxuICAgICAgfVxuXG4gICAgICAuc3Bpbm5lci1sYXllciB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXNwaW5uZXItY29sb3IsIHZhcigtLWdvb2dsZS1ibHVlLTUwMCkpO1xuICAgICAgfVxuXG4gICAgICAubGF5ZXItMSB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1zcGlubmVyLWxheWVyLTEtY29sb3IsIHZhcigtLWdvb2dsZS1ibHVlLTUwMCkpO1xuICAgICAgfVxuXG4gICAgICAubGF5ZXItMiB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1zcGlubmVyLWxheWVyLTItY29sb3IsIHZhcigtLWdvb2dsZS1yZWQtNTAwKSk7XG4gICAgICB9XG5cbiAgICAgIC5sYXllci0zIHtcbiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXNwaW5uZXItbGF5ZXItMy1jb2xvciwgdmFyKC0tZ29vZ2xlLXllbGxvdy01MDApKTtcbiAgICAgIH1cblxuICAgICAgLmxheWVyLTQge1xuICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItc3Bpbm5lci1sYXllci00LWNvbG9yLCB2YXIoLS1nb29nbGUtZ3JlZW4tNTAwKSk7XG4gICAgICB9XG5cbiAgICAgIC8qKlxuICAgICAgICogSU1QT1JUQU5UIE5PVEUgQUJPVVQgQ1NTIEFOSU1BVElPTiBQUk9QRVJUSUVTIChrZWFudWxlZSk6XG4gICAgICAgKlxuICAgICAgICogaU9TIFNhZmFyaSAodGVzdGVkIG9uIGlPUyA4LjEpIGRvZXMgbm90IGhhbmRsZSBhbmltYXRpb24tZGVsYXkgdmVyeSB3ZWxsIC0gaXQgZG9lc24ndFxuICAgICAgICogZ3VhcmFudGVlIHRoYXQgdGhlIGFuaW1hdGlvbiB3aWxsIHN0YXJ0IF9leGFjdGx5XyBhZnRlciB0aGF0IHZhbHVlLiBTbyB3ZSBhdm9pZCB1c2luZ1xuICAgICAgICogYW5pbWF0aW9uLWRlbGF5IGFuZCBpbnN0ZWFkIHNldCBjdXN0b20ga2V5ZnJhbWVzIGZvciBlYWNoIGNvbG9yIChhcyBsYXllci0ydW5kYW50IGFzIGl0XG4gICAgICAgKiBzZWVtcykuXG4gICAgICAgKi9cbiAgICAgIC5hY3RpdmUgLnNwaW5uZXItbGF5ZXIge1xuICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGU7XG4gICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1wYXBlci1zcGlubmVyLWZ1bGwtY3ljbGUtZHVyYXRpb24pO1xuICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKTtcbiAgICAgICAgLXdlYmtpdC1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiBpbmZpbml0ZTtcbiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGZpbGwtdW5maWxsLXJvdGF0ZTtcbiAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1wYXBlci1zcGlubmVyLWZ1bGwtY3ljbGUtZHVyYXRpb24pO1xuICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSk7XG4gICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IGluZmluaXRlO1xuICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgfVxuXG4gICAgICAuYWN0aXZlIC5zcGlubmVyLWxheWVyLmxheWVyLTEge1xuICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGUsIGxheWVyLTEtZmFkZS1pbi1vdXQ7XG4gICAgICAgIGFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGUsIGxheWVyLTEtZmFkZS1pbi1vdXQ7XG4gICAgICB9XG5cbiAgICAgIC5hY3RpdmUgLnNwaW5uZXItbGF5ZXIubGF5ZXItMiB7XG4gICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLW5hbWU6IGZpbGwtdW5maWxsLXJvdGF0ZSwgbGF5ZXItMi1mYWRlLWluLW91dDtcbiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGZpbGwtdW5maWxsLXJvdGF0ZSwgbGF5ZXItMi1mYWRlLWluLW91dDtcbiAgICAgIH1cblxuICAgICAgLmFjdGl2ZSAuc3Bpbm5lci1sYXllci5sYXllci0zIHtcbiAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tbmFtZTogZmlsbC11bmZpbGwtcm90YXRlLCBsYXllci0zLWZhZGUtaW4tb3V0O1xuICAgICAgICBhbmltYXRpb24tbmFtZTogZmlsbC11bmZpbGwtcm90YXRlLCBsYXllci0zLWZhZGUtaW4tb3V0O1xuICAgICAgfVxuXG4gICAgICAuYWN0aXZlIC5zcGlubmVyLWxheWVyLmxheWVyLTQge1xuICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGUsIGxheWVyLTQtZmFkZS1pbi1vdXQ7XG4gICAgICAgIGFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGUsIGxheWVyLTQtZmFkZS1pbi1vdXQ7XG4gICAgICB9XG5cbiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBmaWxsLXVuZmlsbC1yb3RhdGUge1xuICAgICAgICAxMi41JSB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMTM1ZGVnKSB9IC8qIDAuNSAqIEFSQ1NJWkUgKi9cbiAgICAgICAgMjUlICAgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDI3MGRlZykgfSAvKiAxICAgKiBBUkNTSVpFICovXG4gICAgICAgIDM3LjUlIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSg0MDVkZWcpIH0gLyogMS41ICogQVJDU0laRSAqL1xuICAgICAgICA1MCUgICB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoNTQwZGVnKSB9IC8qIDIgICAqIEFSQ1NJWkUgKi9cbiAgICAgICAgNjIuNSUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDY3NWRlZykgfSAvKiAyLjUgKiBBUkNTSVpFICovXG4gICAgICAgIDc1JSAgIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSg4MTBkZWcpIH0gLyogMyAgICogQVJDU0laRSAqL1xuICAgICAgICA4Ny41JSB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoOTQ1ZGVnKSB9IC8qIDMuNSAqIEFSQ1NJWkUgKi9cbiAgICAgICAgdG8gICAgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDEwODBkZWcpIH0gLyogNCAgICogQVJDU0laRSAqL1xuICAgICAgfVxuXG4gICAgICBAa2V5ZnJhbWVzIGZpbGwtdW5maWxsLXJvdGF0ZSB7XG4gICAgICAgIDEyLjUlIHsgdHJhbnNmb3JtOiByb3RhdGUoMTM1ZGVnKSB9IC8qIDAuNSAqIEFSQ1NJWkUgKi9cbiAgICAgICAgMjUlICAgeyB0cmFuc2Zvcm06IHJvdGF0ZSgyNzBkZWcpIH0gLyogMSAgICogQVJDU0laRSAqL1xuICAgICAgICAzNy41JSB7IHRyYW5zZm9ybTogcm90YXRlKDQwNWRlZykgfSAvKiAxLjUgKiBBUkNTSVpFICovXG4gICAgICAgIDUwJSAgIHsgdHJhbnNmb3JtOiByb3RhdGUoNTQwZGVnKSB9IC8qIDIgICAqIEFSQ1NJWkUgKi9cbiAgICAgICAgNjIuNSUgeyB0cmFuc2Zvcm06IHJvdGF0ZSg2NzVkZWcpIH0gLyogMi41ICogQVJDU0laRSAqL1xuICAgICAgICA3NSUgICB7IHRyYW5zZm9ybTogcm90YXRlKDgxMGRlZykgfSAvKiAzICAgKiBBUkNTSVpFICovXG4gICAgICAgIDg3LjUlIHsgdHJhbnNmb3JtOiByb3RhdGUoOTQ1ZGVnKSB9IC8qIDMuNSAqIEFSQ1NJWkUgKi9cbiAgICAgICAgdG8gICAgeyB0cmFuc2Zvcm06IHJvdGF0ZSgxMDgwZGVnKSB9IC8qIDQgICAqIEFSQ1NJWkUgKi9cbiAgICAgIH1cblxuICAgICAgQC13ZWJraXQta2V5ZnJhbWVzIGxheWVyLTEtZmFkZS1pbi1vdXQge1xuICAgICAgICAwJSB7IG9wYWNpdHk6IDEgfVxuICAgICAgICAyNSUgeyBvcGFjaXR5OiAxIH1cbiAgICAgICAgMjYlIHsgb3BhY2l0eTogMCB9XG4gICAgICAgIDg5JSB7IG9wYWNpdHk6IDAgfVxuICAgICAgICA5MCUgeyBvcGFjaXR5OiAxIH1cbiAgICAgICAgdG8geyBvcGFjaXR5OiAxIH1cbiAgICAgIH1cblxuICAgICAgQGtleWZyYW1lcyBsYXllci0xLWZhZGUtaW4tb3V0IHtcbiAgICAgICAgMCUgeyBvcGFjaXR5OiAxIH1cbiAgICAgICAgMjUlIHsgb3BhY2l0eTogMSB9XG4gICAgICAgIDI2JSB7IG9wYWNpdHk6IDAgfVxuICAgICAgICA4OSUgeyBvcGFjaXR5OiAwIH1cbiAgICAgICAgOTAlIHsgb3BhY2l0eTogMSB9XG4gICAgICAgIHRvIHsgb3BhY2l0eTogMSB9XG4gICAgICB9XG5cbiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBsYXllci0yLWZhZGUtaW4tb3V0IHtcbiAgICAgICAgMCUgeyBvcGFjaXR5OiAwIH1cbiAgICAgICAgMTUlIHsgb3BhY2l0eTogMCB9XG4gICAgICAgIDI1JSB7IG9wYWNpdHk6IDEgfVxuICAgICAgICA1MCUgeyBvcGFjaXR5OiAxIH1cbiAgICAgICAgNTElIHsgb3BhY2l0eTogMCB9XG4gICAgICAgIHRvIHsgb3BhY2l0eTogMCB9XG4gICAgICB9XG5cbiAgICAgIEBrZXlmcmFtZXMgbGF5ZXItMi1mYWRlLWluLW91dCB7XG4gICAgICAgIDAlIHsgb3BhY2l0eTogMCB9XG4gICAgICAgIDE1JSB7IG9wYWNpdHk6IDAgfVxuICAgICAgICAyNSUgeyBvcGFjaXR5OiAxIH1cbiAgICAgICAgNTAlIHsgb3BhY2l0eTogMSB9XG4gICAgICAgIDUxJSB7IG9wYWNpdHk6IDAgfVxuICAgICAgICB0byB7IG9wYWNpdHk6IDAgfVxuICAgICAgfVxuXG4gICAgICBALXdlYmtpdC1rZXlmcmFtZXMgbGF5ZXItMy1mYWRlLWluLW91dCB7XG4gICAgICAgIDAlIHsgb3BhY2l0eTogMCB9XG4gICAgICAgIDQwJSB7IG9wYWNpdHk6IDAgfVxuICAgICAgICA1MCUgeyBvcGFjaXR5OiAxIH1cbiAgICAgICAgNzUlIHsgb3BhY2l0eTogMSB9XG4gICAgICAgIDc2JSB7IG9wYWNpdHk6IDAgfVxuICAgICAgICB0byB7IG9wYWNpdHk6IDAgfVxuICAgICAgfVxuXG4gICAgICBAa2V5ZnJhbWVzIGxheWVyLTMtZmFkZS1pbi1vdXQge1xuICAgICAgICAwJSB7IG9wYWNpdHk6IDAgfVxuICAgICAgICA0MCUgeyBvcGFjaXR5OiAwIH1cbiAgICAgICAgNTAlIHsgb3BhY2l0eTogMSB9XG4gICAgICAgIDc1JSB7IG9wYWNpdHk6IDEgfVxuICAgICAgICA3NiUgeyBvcGFjaXR5OiAwIH1cbiAgICAgICAgdG8geyBvcGFjaXR5OiAwIH1cbiAgICAgIH1cblxuICAgICAgQC13ZWJraXQta2V5ZnJhbWVzIGxheWVyLTQtZmFkZS1pbi1vdXQge1xuICAgICAgICAwJSB7IG9wYWNpdHk6IDAgfVxuICAgICAgICA2NSUgeyBvcGFjaXR5OiAwIH1cbiAgICAgICAgNzUlIHsgb3BhY2l0eTogMSB9XG4gICAgICAgIDkwJSB7IG9wYWNpdHk6IDEgfVxuICAgICAgICB0byB7IG9wYWNpdHk6IDAgfVxuICAgICAgfVxuXG4gICAgICBAa2V5ZnJhbWVzIGxheWVyLTQtZmFkZS1pbi1vdXQge1xuICAgICAgICAwJSB7IG9wYWNpdHk6IDAgfVxuICAgICAgICA2NSUgeyBvcGFjaXR5OiAwIH1cbiAgICAgICAgNzUlIHsgb3BhY2l0eTogMSB9XG4gICAgICAgIDkwJSB7IG9wYWNpdHk6IDEgfVxuICAgICAgICB0byB7IG9wYWNpdHk6IDAgfVxuICAgICAgfVxuXG4gICAgICAuY2lyY2xlLWNsaXBwZXIge1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgd2lkdGg6IDUwJTtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgfVxuXG4gICAgICAvKipcbiAgICAgICAqIFBhdGNoIHRoZSBnYXAgdGhhdCBhcHBlYXIgYmV0d2VlbiB0aGUgdHdvIGFkamFjZW50IGRpdi5jaXJjbGUtY2xpcHBlciB3aGlsZSB0aGVcbiAgICAgICAqIHNwaW5uZXIgaXMgcm90YXRpbmcgKGFwcGVhcnMgb24gQ2hyb21lIDUwLCBTYWZhcmkgOS4xLjEsIGFuZCBFZGdlKS5cbiAgICAgICAqL1xuICAgICAgLnNwaW5uZXItbGF5ZXI6OmFmdGVyIHtcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIGxlZnQ6IDQ1JTtcbiAgICAgICAgd2lkdGg6IDEwJTtcbiAgICAgICAgYm9yZGVyLXRvcC1zdHlsZTogc29saWQ7XG4gICAgICB9XG5cbiAgICAgIC5zcGlubmVyLWxheWVyOjphZnRlcixcbiAgICAgIC5jaXJjbGUtY2xpcHBlciAuY2lyY2xlIHtcbiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIGJvcmRlci13aWR0aDogdmFyKC0tcGFwZXItc3Bpbm5lci1zdHJva2Utd2lkdGgsIDNweCk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgIH1cblxuICAgICAgLmNpcmNsZS1jbGlwcGVyIC5jaXJjbGUge1xuICAgICAgICBib3R0b206IDA7XG4gICAgICAgIHdpZHRoOiAyMDAlO1xuICAgICAgICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICAgICAgICBib3JkZXItYm90dG9tLWNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xuICAgICAgfVxuXG4gICAgICAuY2lyY2xlLWNsaXBwZXIubGVmdCAuY2lyY2xlIHtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgYm9yZGVyLXJpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xuICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDEyOWRlZyk7XG4gICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDEyOWRlZyk7XG4gICAgICB9XG5cbiAgICAgIC5jaXJjbGUtY2xpcHBlci5yaWdodCAuY2lyY2xlIHtcbiAgICAgICAgbGVmdDogLTEwMCU7XG4gICAgICAgIGJvcmRlci1sZWZ0LWNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xuICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC0xMjlkZWcpO1xuICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtMTI5ZGVnKTtcbiAgICAgIH1cblxuICAgICAgLmFjdGl2ZSAuZ2FwLXBhdGNoOjphZnRlcixcbiAgICAgIC5hY3RpdmUgLmNpcmNsZS1jbGlwcGVyIC5jaXJjbGUge1xuICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItc3Bpbm5lci1leHBhbmQtY29udHJhY3QtZHVyYXRpb24pO1xuICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKTtcbiAgICAgICAgLXdlYmtpdC1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiBpbmZpbml0ZTtcbiAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1wYXBlci1zcGlubmVyLWV4cGFuZC1jb250cmFjdC1kdXJhdGlvbik7XG4gICAgICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKTtcbiAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogaW5maW5pdGU7XG4gICAgICB9XG5cbiAgICAgIC5hY3RpdmUgLmNpcmNsZS1jbGlwcGVyLmxlZnQgLmNpcmNsZSB7XG4gICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLW5hbWU6IGxlZnQtc3BpbjtcbiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGxlZnQtc3BpbjtcbiAgICAgIH1cblxuICAgICAgLmFjdGl2ZSAuY2lyY2xlLWNsaXBwZXIucmlnaHQgLmNpcmNsZSB7XG4gICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLW5hbWU6IHJpZ2h0LXNwaW47XG4gICAgICAgIGFuaW1hdGlvbi1uYW1lOiByaWdodC1zcGluO1xuICAgICAgfVxuXG4gICAgICBALXdlYmtpdC1rZXlmcmFtZXMgbGVmdC1zcGluIHtcbiAgICAgICAgMCUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDEzMGRlZykgfVxuICAgICAgICA1MCUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC01ZGVnKSB9XG4gICAgICAgIHRvIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgxMzBkZWcpIH1cbiAgICAgIH1cblxuICAgICAgQGtleWZyYW1lcyBsZWZ0LXNwaW4ge1xuICAgICAgICAwJSB7IHRyYW5zZm9ybTogcm90YXRlKDEzMGRlZykgfVxuICAgICAgICA1MCUgeyB0cmFuc2Zvcm06IHJvdGF0ZSgtNWRlZykgfVxuICAgICAgICB0byB7IHRyYW5zZm9ybTogcm90YXRlKDEzMGRlZykgfVxuICAgICAgfVxuXG4gICAgICBALXdlYmtpdC1rZXlmcmFtZXMgcmlnaHQtc3BpbiB7XG4gICAgICAgIDAlIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgtMTMwZGVnKSB9XG4gICAgICAgIDUwJSB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoNWRlZykgfVxuICAgICAgICB0byB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTEzMGRlZykgfVxuICAgICAgfVxuXG4gICAgICBAa2V5ZnJhbWVzIHJpZ2h0LXNwaW4ge1xuICAgICAgICAwJSB7IHRyYW5zZm9ybTogcm90YXRlKC0xMzBkZWcpIH1cbiAgICAgICAgNTAlIHsgdHJhbnNmb3JtOiByb3RhdGUoNWRlZykgfVxuICAgICAgICB0byB7IHRyYW5zZm9ybTogcm90YXRlKC0xMzBkZWcpIH1cbiAgICAgIH1cblxuICAgICAgI3NwaW5uZXJDb250YWluZXIuY29vbGRvd24ge1xuICAgICAgICAtd2Via2l0LWFuaW1hdGlvbjogY29udGFpbmVyLXJvdGF0ZSB2YXIoLS1wYXBlci1zcGlubmVyLWNvbnRhaW5lci1yb3RhdGlvbi1kdXJhdGlvbikgbGluZWFyIGluZmluaXRlLCBmYWRlLW91dCB2YXIoLS1wYXBlci1zcGlubmVyLWNvb2xkb3duLWR1cmF0aW9uKSBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSk7XG4gICAgICAgIGFuaW1hdGlvbjogY29udGFpbmVyLXJvdGF0ZSB2YXIoLS1wYXBlci1zcGlubmVyLWNvbnRhaW5lci1yb3RhdGlvbi1kdXJhdGlvbikgbGluZWFyIGluZmluaXRlLCBmYWRlLW91dCB2YXIoLS1wYXBlci1zcGlubmVyLWNvb2xkb3duLWR1cmF0aW9uKSBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSk7XG4gICAgICB9XG5cbiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBmYWRlLW91dCB7XG4gICAgICAgIDAlIHsgb3BhY2l0eTogMSB9XG4gICAgICAgIHRvIHsgb3BhY2l0eTogMCB9XG4gICAgICB9XG5cbiAgICAgIEBrZXlmcmFtZXMgZmFkZS1vdXQge1xuICAgICAgICAwJSB7IG9wYWNpdHk6IDEgfVxuICAgICAgICB0byB7IG9wYWNpdHk6IDAgfVxuICAgICAgfVxuICAgIDwvc3R5bGU+XG4gIDwvdGVtcGxhdGU+XG48L2RvbS1tb2R1bGU+Iixkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHJzLmNvbnRlbnQpOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KY29uc3Qgb3M9e3Byb3BlcnRpZXM6e2FjdGl2ZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCxvYnNlcnZlcjoiX19hY3RpdmVDaGFuZ2VkIn0sYWx0Ont0eXBlOlN0cmluZyx2YWx1ZToibG9hZGluZyIsb2JzZXJ2ZXI6Il9fYWx0Q2hhbmdlZCJ9LF9fY29vbGluZ0Rvd246e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX19LF9fY29tcHV0ZUNvbnRhaW5lckNsYXNzZXM6ZnVuY3Rpb24odCxlKXtyZXR1cm5bdHx8ZT8iYWN0aXZlIjoiIixlPyJjb29sZG93biI6IiJdLmpvaW4oIiAiKX0sX19hY3RpdmVDaGFuZ2VkOmZ1bmN0aW9uKHQsZSl7dGhpcy5fX3NldEFyaWFIaWRkZW4oIXQpLHRoaXMuX19jb29saW5nRG93bj0hdCYmZX0sX19hbHRDaGFuZ2VkOmZ1bmN0aW9uKHQpeyJsb2FkaW5nIj09PXQ/dGhpcy5hbHQ9dGhpcy5nZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiKXx8dDoodGhpcy5fX3NldEFyaWFIaWRkZW4oIiI9PT10KSx0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsdCkpfSxfX3NldEFyaWFIaWRkZW46ZnVuY3Rpb24odCl7dmFyIGU9ImFyaWEtaGlkZGVuIjt0P3RoaXMuc2V0QXR0cmlidXRlKGUsInRydWUiKTp0aGlzLnJlbW92ZUF0dHJpYnV0ZShlKX0sX19yZXNldDpmdW5jdGlvbigpe3RoaXMuYWN0aXZlPSExLHRoaXMuX19jb29saW5nRG93bj0hMX19LGFzPV9lYAogIDxzdHlsZSBpbmNsdWRlPSJwYXBlci1zcGlubmVyLXN0eWxlcyI+PC9zdHlsZT4KCiAgPGRpdiBpZD0ic3Bpbm5lckNvbnRhaW5lciIgY2xhc3MtbmFtZT0iW1tfX2NvbXB1dGVDb250YWluZXJDbGFzc2VzKGFjdGl2ZSwgX19jb29saW5nRG93bildXSIgb24tYW5pbWF0aW9uZW5kPSJfX3Jlc2V0IiBvbi13ZWJraXQtYW5pbWF0aW9uLWVuZD0iX19yZXNldCI+CiAgICA8ZGl2IGNsYXNzPSJzcGlubmVyLWxheWVyIj4KICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlLWNsaXBwZXIgbGVmdCI+CiAgICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZS1jbGlwcGVyIHJpZ2h0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUiPjwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2PgpgOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi9hcy5zZXRBdHRyaWJ1dGUoInN0cmlwLXdoaXRlc3BhY2UiLCIiKSxJcih7X3RlbXBsYXRlOmFzLGlzOiJwYXBlci1zcGlubmVyLWxpdGUiLGJlaGF2aW9yczpbb3NdfSk7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpjb25zdCBzcz1fZWAKICA8c3R5bGUgaW5jbHVkZT0icGFwZXItc3Bpbm5lci1zdHlsZXMiPjwvc3R5bGU+CgogIDxkaXYgaWQ9InNwaW5uZXJDb250YWluZXIiIGNsYXNzLW5hbWU9IltbX19jb21wdXRlQ29udGFpbmVyQ2xhc3NlcyhhY3RpdmUsIF9fY29vbGluZ0Rvd24pXV0iIG9uLWFuaW1hdGlvbmVuZD0iX19yZXNldCIgb24td2Via2l0LWFuaW1hdGlvbi1lbmQ9Il9fcmVzZXQiPgogICAgPGRpdiBjbGFzcz0ic3Bpbm5lci1sYXllciBsYXllci0xIj4KICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlLWNsaXBwZXIgbGVmdCI+CiAgICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZS1jbGlwcGVyIHJpZ2h0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUiPjwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9InNwaW5uZXItbGF5ZXIgbGF5ZXItMiI+CiAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZS1jbGlwcGVyIGxlZnQiPgogICAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZSI+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUtY2xpcHBlciByaWdodCI+CiAgICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJzcGlubmVyLWxheWVyIGxheWVyLTMiPgogICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUtY2xpcHBlciBsZWZ0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUiPjwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlLWNsaXBwZXIgcmlnaHQiPgogICAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZSI+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0ic3Bpbm5lci1sYXllciBsYXllci00Ij4KICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlLWNsaXBwZXIgbGVmdCI+CiAgICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZS1jbGlwcGVyIHJpZ2h0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUiPjwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2PgpgO3NzLnNldEF0dHJpYnV0ZSgic3RyaXAtd2hpdGVzcGFjZSIsIiIpLElyKHtfdGVtcGxhdGU6c3MsaXM6InBhcGVyLXNwaW5uZXIiLGJlaGF2aW9yczpbb3NdfSk7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCmNvbnN0IGxzPV9lYDxpcm9uLWljb25zZXQtc3ZnIG5hbWU9InBhcGVyLXRhYnMiIHNpemU9IjI0Ij4KPHN2Zz48ZGVmcz4KPGcgaWQ9ImNoZXZyb24tbGVmdCI+PHBhdGggZD0iTTE1LjQxIDcuNDFMMTQgNmwtNiA2IDYgNiAxLjQxLTEuNDFMMTAuODMgMTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2hldnJvbi1yaWdodCI+PHBhdGggZD0iTTEwIDZMOC41OSA3LjQxIDEzLjE3IDEybC00LjU4IDQuNTlMMTAgMThsNi02eiI+PC9wYXRoPjwvZz4KPC9kZWZzPjwvc3ZnPgo8L2lyb24taWNvbnNldC1zdmc+YDtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGxzLmNvbnRlbnQpLAovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dAogICAgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28KICAgIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpJcih7X3RlbXBsYXRlOl9lYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWlubGluZTsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXItanVzdGlmaWVkOwogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4LWF1dG87CgogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBwYWRkaW5nOiAwIDEycHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci10YWI7CiAgICAgIH0KCiAgICAgIDpob3N0KDpmb2N1cykgewogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtsaW5rXSkgewogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIC50YWItY29udGVudCB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWigwKTsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDApOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xcyBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDEsIDEpOwogICAgICAgIEBhcHBseSAtLWxheW91dC1ob3Jpem9udGFsOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXItY2VudGVyOwogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4LWF1dG87CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdGFiLWNvbnRlbnQ7CiAgICAgIH0KCiAgICAgIDpob3N0KDpub3QoLmlyb24tc2VsZWN0ZWQpKSA+IC50YWItY29udGVudCB7CiAgICAgICAgb3BhY2l0eTogMC44OwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10YWItY29udGVudC11bnNlbGVjdGVkOwogICAgICB9CgogICAgICA6aG9zdCg6Zm9jdXMpIC50YWItY29udGVudCB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICBmb250LXdlaWdodDogNzAwOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10YWItY29udGVudC1mb2N1c2VkOwogICAgICB9CgogICAgICBwYXBlci1yaXBwbGUgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10YWItaW5rLCB2YXIoLS1wYXBlci15ZWxsb3ctYTEwMCkpOwogICAgICB9CgogICAgICAudGFiLWNvbnRlbnQgPiA6OnNsb3R0ZWQoYSkgewogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4LWF1dG87CgogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGNsYXNzPSJ0YWItY29udGVudCI+CiAgICAgIDxzbG90Pjwvc2xvdD4KICAgIDwvZGl2PgpgLGlzOiJwYXBlci10YWIiLGJlaGF2aW9yczpbV28sWW8sWm9dLHByb3BlcnRpZXM6e2xpbms6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9fSxob3N0QXR0cmlidXRlczp7cm9sZToidGFiIn0sbGlzdGVuZXJzOntkb3duOiJfdXBkYXRlTm9pbmsiLHRhcDoiX29uVGFwIn0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVOb2luaygpfSxnZXQgX3BhcmVudE5vaW5rKCl7dmFyIHQ9cWkodGhpcykucGFyZW50Tm9kZTtyZXR1cm4hIXQmJiEhdC5ub2lua30sX3VwZGF0ZU5vaW5rOmZ1bmN0aW9uKCl7dGhpcy5ub2luaz0hIXRoaXMubm9pbmt8fCEhdGhpcy5fcGFyZW50Tm9pbmt9LF9vblRhcDpmdW5jdGlvbih0KXtpZih0aGlzLmxpbmspe3ZhciBlPXRoaXMucXVlcnlFZmZlY3RpdmVDaGlsZHJlbigiYSIpO2lmKCFlKXJldHVybjtpZih0LnRhcmdldD09PWUpcmV0dXJuO2UuY2xpY2soKX19fSksCi8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCklyKHtfdGVtcGxhdGU6X2VgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQ7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlcjsKCiAgICAgICAgaGVpZ2h0OiA0OHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKCiAgICAgICAgLyogTk9URTogQm90aCB2YWx1ZXMgYXJlIG5lZWRlZCwgc2luY2Ugc29tZSBwaG9uZXMgcmVxdWlyZSB0aGUgdmFsdWUgdG8gYmUgXGB0cmFuc3BhcmVudFxgLiAqLwogICAgICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKTsKICAgICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50OwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10YWJzOwogICAgICB9CgogICAgICA6aG9zdCg6ZGlyKHJ0bCkpIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtaG9yaXpvbnRhbC1yZXZlcnNlOwogICAgICB9CgogICAgICAjdGFic0NvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXgtYXV0bzsKICAgICAgICBAYXBwbHkgLS1wYXBlci10YWJzLWNvbnRhaW5lcjsKICAgICAgfQoKICAgICAgI3RhYnNDb250ZW50IHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgLW1vei1mbGV4LWJhc2lzOiBhdXRvOwogICAgICAgIC1tcy1mbGV4LWJhc2lzOiBhdXRvOwogICAgICAgIGZsZXgtYmFzaXM6IGF1dG87CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdGFicy1jb250ZW50OwogICAgICB9CgogICAgICAjdGFic0NvbnRlbnQuc2Nyb2xsYWJsZSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KCiAgICAgICN0YWJzQ29udGVudDpub3QoLnNjcm9sbGFibGUpLAogICAgICAjdGFic0NvbnRlbnQuc2Nyb2xsYWJsZS5maXQtY29udGFpbmVyIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtaG9yaXpvbnRhbDsKICAgICAgfQoKICAgICAgI3RhYnNDb250ZW50LnNjcm9sbGFibGUuZml0LWNvbnRhaW5lciB7CiAgICAgICAgbWluLXdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAjdGFic0NvbnRlbnQuc2Nyb2xsYWJsZS5maXQtY29udGFpbmVyID4gOjpzbG90dGVkKCopIHsKICAgICAgICAvKiBJRSAtIHByZXZlbnQgdGFicyBmcm9tIGNvbXByZXNzaW5nIHdoZW4gdGhleSBzaG91bGQgc2Nyb2xsLiAqLwogICAgICAgIC1tcy1mbGV4OiAxIDAgYXV0bzsKICAgICAgICAtd2Via2l0LWZsZXg6IDEgMCBhdXRvOwogICAgICAgIGZsZXg6IDEgMCBhdXRvOwogICAgICB9CgogICAgICAuaGlkZGVuIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CgogICAgICAubm90LXZpc2libGUgewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICB9CgogICAgICBwYXBlci1pY29uLWJ1dHRvbiB7CiAgICAgICAgd2lkdGg6IDQ4cHg7CiAgICAgICAgaGVpZ2h0OiA0OHB4OwogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgbWFyZ2luOiAwIDRweDsKICAgICAgfQoKICAgICAgI3NlbGVjdGlvbkJhciB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGhlaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgdmFyKC0tcGFwZXItdGFicy1zZWxlY3Rpb24tYmFyLWNvbG9yLCB2YXIoLS1wYXBlci15ZWxsb3ctYTEwMCkpOwogICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDApOwogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7CiAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IGxlZnQgY2VudGVyOwogICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IGxlZnQgY2VudGVyOwogICAgICAgICAgdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm07CiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10YWJzLXNlbGVjdGlvbi1iYXI7CiAgICAgIH0KCiAgICAgICNzZWxlY3Rpb25CYXIuYWxpZ24tYm90dG9tIHsKICAgICAgICB0b3A6IDA7CiAgICAgICAgYm90dG9tOiBhdXRvOwogICAgICB9CgogICAgICAjc2VsZWN0aW9uQmFyLmV4cGFuZCB7CiAgICAgICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMC4xNXM7CiAgICAgICAgdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQsIDAuMCwgMSwgMSk7CiAgICAgIH0KCiAgICAgICNzZWxlY3Rpb25CYXIuY29udHJhY3QgewogICAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMThzOwogICAgICAgIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4wLCAwLjAsIDAuMiwgMSk7CiAgICAgIH0KCiAgICAgICN0YWJzQ29udGVudCA+IDo6c2xvdHRlZCg6bm90KCNzZWxlY3Rpb25CYXIpKSB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxwYXBlci1pY29uLWJ1dHRvbiBpY29uPSJwYXBlci10YWJzOmNoZXZyb24tbGVmdCIgY2xhc3MkPSJbW19jb21wdXRlU2Nyb2xsQnV0dG9uQ2xhc3MoX2xlZnRIaWRkZW4sIHNjcm9sbGFibGUsIGhpZGVTY3JvbGxCdXR0b25zKV1dIiBvbi11cD0iX29uU2Nyb2xsQnV0dG9uVXAiIG9uLWRvd249Il9vbkxlZnRTY3JvbGxCdXR0b25Eb3duIiB0YWJpbmRleD0iLTEiPjwvcGFwZXItaWNvbi1idXR0b24+CgogICAgPGRpdiBpZD0idGFic0NvbnRhaW5lciIgb24tdHJhY2s9Il9zY3JvbGwiIG9uLWRvd249Il9kb3duIj4KICAgICAgPGRpdiBpZD0idGFic0NvbnRlbnQiIGNsYXNzJD0iW1tfY29tcHV0ZVRhYnNDb250ZW50Q2xhc3Moc2Nyb2xsYWJsZSwgZml0Q29udGFpbmVyKV1dIj4KICAgICAgICA8ZGl2IGlkPSJzZWxlY3Rpb25CYXIiIGNsYXNzJD0iW1tfY29tcHV0ZVNlbGVjdGlvbkJhckNsYXNzKG5vQmFyLCBhbGlnbkJvdHRvbSldXSIgb24tdHJhbnNpdGlvbmVuZD0iX29uQmFyVHJhbnNpdGlvbkVuZCI+PC9kaXY+CiAgICAgICAgPHNsb3Q+PC9zbG90PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxwYXBlci1pY29uLWJ1dHRvbiBpY29uPSJwYXBlci10YWJzOmNoZXZyb24tcmlnaHQiIGNsYXNzJD0iW1tfY29tcHV0ZVNjcm9sbEJ1dHRvbkNsYXNzKF9yaWdodEhpZGRlbiwgc2Nyb2xsYWJsZSwgaGlkZVNjcm9sbEJ1dHRvbnMpXV0iIG9uLXVwPSJfb25TY3JvbGxCdXR0b25VcCIgb24tZG93bj0iX29uUmlnaHRTY3JvbGxCdXR0b25Eb3duIiB0YWJpbmRleD0iLTEiPjwvcGFwZXItaWNvbi1idXR0b24+CmAsaXM6InBhcGVyLXRhYnMiLGJlaGF2aW9yczpbbW8sbnNdLHByb3BlcnRpZXM6e25vaW5rOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsb2JzZXJ2ZXI6Il9ub2lua0NoYW5nZWQifSxub0Jhcjp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxub1NsaWRlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHNjcm9sbGFibGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sZml0Q29udGFpbmVyOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGRpc2FibGVEcmFnOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGhpZGVTY3JvbGxCdXR0b25zOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGFsaWduQm90dG9tOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHNlbGVjdGFibGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJwYXBlci10YWIifSxhdXRvc2VsZWN0Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGF1dG9zZWxlY3REZWxheTp7dHlwZTpOdW1iZXIsdmFsdWU6MH0sX3N0ZXA6e3R5cGU6TnVtYmVyLHZhbHVlOjEwfSxfaG9sZERlbGF5Ont0eXBlOk51bWJlcix2YWx1ZToxfSxfbGVmdEhpZGRlbjp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfcmlnaHRIaWRkZW46e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX3ByZXZpb3VzVGFiOnt0eXBlOk9iamVjdH19LGhvc3RBdHRyaWJ1dGVzOntyb2xlOiJ0YWJsaXN0In0sbGlzdGVuZXJzOnsiaXJvbi1yZXNpemUiOiJfb25UYWJTaXppbmdDaGFuZ2VkIiwiaXJvbi1pdGVtcy1jaGFuZ2VkIjoiX29uVGFiU2l6aW5nQ2hhbmdlZCIsImlyb24tc2VsZWN0IjoiX29uSXJvblNlbGVjdCIsImlyb24tZGVzZWxlY3QiOiJfb25Jcm9uRGVzZWxlY3QifSxrZXlCaW5kaW5nczp7ImxlZnQ6a2V5dXAgcmlnaHQ6a2V5dXAiOiJfb25BcnJvd0tleXVwIn0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuX2hvbGRKb2I9bnVsbCx0aGlzLl9wZW5kaW5nQWN0aXZhdGlvbkl0ZW09dm9pZCAwLHRoaXMuX3BlbmRpbmdBY3RpdmF0aW9uVGltZW91dD12b2lkIDAsdGhpcy5fYmluZERlbGF5ZWRBY3RpdmF0aW9uSGFuZGxlcj10aGlzLl9kZWxheWVkQWN0aXZhdGlvbkhhbmRsZXIuYmluZCh0aGlzKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLHRoaXMuX29uQmx1ckNhcHR1cmUuYmluZCh0aGlzKSwhMCl9LHJlYWR5OmZ1bmN0aW9uKCl7dGhpcy5zZXRTY3JvbGxEaXJlY3Rpb24oInkiLHRoaXMuJC50YWJzQ29udGFpbmVyKX0sZGV0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9jYW5jZWxQZW5kaW5nQWN0aXZhdGlvbigpfSxfbm9pbmtDaGFuZ2VkOmZ1bmN0aW9uKHQpe3FpKHRoaXMpLnF1ZXJ5U2VsZWN0b3JBbGwoInBhcGVyLXRhYiIpLmZvckVhY2godD90aGlzLl9zZXROb2lua0F0dHJpYnV0ZTp0aGlzLl9yZW1vdmVOb2lua0F0dHJpYnV0ZSl9LF9zZXROb2lua0F0dHJpYnV0ZTpmdW5jdGlvbih0KXt0LnNldEF0dHJpYnV0ZSgibm9pbmsiLCIiKX0sX3JlbW92ZU5vaW5rQXR0cmlidXRlOmZ1bmN0aW9uKHQpe3QucmVtb3ZlQXR0cmlidXRlKCJub2luayIpfSxfY29tcHV0ZVNjcm9sbEJ1dHRvbkNsYXNzOmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4hZXx8bj8iaGlkZGVuIjp0PyJub3QtdmlzaWJsZSI6IiJ9LF9jb21wdXRlVGFic0NvbnRlbnRDbGFzczpmdW5jdGlvbih0LGUpe3JldHVybiB0PyJzY3JvbGxhYmxlIisoZT8iIGZpdC1jb250YWluZXIiOiIiKToiIGZpdC1jb250YWluZXIifSxfY29tcHV0ZVNlbGVjdGlvbkJhckNsYXNzOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ/ImhpZGRlbiI6ZT8iYWxpZ24tYm90dG9tIjoiIn0sX29uVGFiU2l6aW5nQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuZGVib3VuY2UoIl9vblRhYlNpemluZ0NoYW5nZWQiLChmdW5jdGlvbigpe3RoaXMuX3Njcm9sbCgpLHRoaXMuX3RhYkNoYW5nZWQodGhpcy5zZWxlY3RlZEl0ZW0pfSksMTApfSxfb25Jcm9uU2VsZWN0OmZ1bmN0aW9uKHQpe3RoaXMuX3RhYkNoYW5nZWQodC5kZXRhaWwuaXRlbSx0aGlzLl9wcmV2aW91c1RhYiksdGhpcy5fcHJldmlvdXNUYWI9dC5kZXRhaWwuaXRlbSx0aGlzLmNhbmNlbERlYm91bmNlcigidGFiLWNoYW5nZWQiKX0sX29uSXJvbkRlc2VsZWN0OmZ1bmN0aW9uKHQpe3RoaXMuZGVib3VuY2UoInRhYi1jaGFuZ2VkIiwoZnVuY3Rpb24oKXt0aGlzLl90YWJDaGFuZ2VkKG51bGwsdGhpcy5fcHJldmlvdXNUYWIpLHRoaXMuX3ByZXZpb3VzVGFiPW51bGx9KSwxKX0sX2FjdGl2YXRlSGFuZGxlcjpmdW5jdGlvbigpe3RoaXMuX2NhbmNlbFBlbmRpbmdBY3RpdmF0aW9uKCksS2EuX2FjdGl2YXRlSGFuZGxlci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LF9zY2hlZHVsZUFjdGl2YXRpb246ZnVuY3Rpb24odCxlKXt0aGlzLl9wZW5kaW5nQWN0aXZhdGlvbkl0ZW09dCx0aGlzLl9wZW5kaW5nQWN0aXZhdGlvblRpbWVvdXQ9dGhpcy5hc3luYyh0aGlzLl9iaW5kRGVsYXllZEFjdGl2YXRpb25IYW5kbGVyLGUpfSxfZGVsYXllZEFjdGl2YXRpb25IYW5kbGVyOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcGVuZGluZ0FjdGl2YXRpb25JdGVtO3RoaXMuX3BlbmRpbmdBY3RpdmF0aW9uSXRlbT12b2lkIDAsdGhpcy5fcGVuZGluZ0FjdGl2YXRpb25UaW1lb3V0PXZvaWQgMCx0LmZpcmUodGhpcy5hY3RpdmF0ZUV2ZW50LG51bGwse2J1YmJsZXM6ITAsY2FuY2VsYWJsZTohMH0pfSxfY2FuY2VsUGVuZGluZ0FjdGl2YXRpb246ZnVuY3Rpb24oKXt2b2lkIDAhPT10aGlzLl9wZW5kaW5nQWN0aXZhdGlvblRpbWVvdXQmJih0aGlzLmNhbmNlbEFzeW5jKHRoaXMuX3BlbmRpbmdBY3RpdmF0aW9uVGltZW91dCksdGhpcy5fcGVuZGluZ0FjdGl2YXRpb25JdGVtPXZvaWQgMCx0aGlzLl9wZW5kaW5nQWN0aXZhdGlvblRpbWVvdXQ9dm9pZCAwKX0sX29uQXJyb3dLZXl1cDpmdW5jdGlvbih0KXt0aGlzLmF1dG9zZWxlY3QmJnRoaXMuX3NjaGVkdWxlQWN0aXZhdGlvbih0aGlzLmZvY3VzZWRJdGVtLHRoaXMuYXV0b3NlbGVjdERlbGF5KX0sX29uQmx1ckNhcHR1cmU6ZnVuY3Rpb24odCl7dC50YXJnZXQ9PT10aGlzLl9wZW5kaW5nQWN0aXZhdGlvbkl0ZW0mJnRoaXMuX2NhbmNlbFBlbmRpbmdBY3RpdmF0aW9uKCl9LGdldCBfdGFiQ29udGFpbmVyU2Nyb2xsU2l6ZSgpe3JldHVybiBNYXRoLm1heCgwLHRoaXMuJC50YWJzQ29udGFpbmVyLnNjcm9sbFdpZHRoLXRoaXMuJC50YWJzQ29udGFpbmVyLm9mZnNldFdpZHRoKX0sX3Njcm9sbDpmdW5jdGlvbih0LGUpe3RoaXMuc2Nyb2xsYWJsZSYmdGhpcy5fYWZmZWN0U2Nyb2xsKGUmJi1lLmRkeHx8MCl9LF9kb3duOmZ1bmN0aW9uKHQpe3RoaXMuYXN5bmMoKGZ1bmN0aW9uKCl7dGhpcy5fZGVmYXVsdEZvY3VzQXN5bmMmJih0aGlzLmNhbmNlbEFzeW5jKHRoaXMuX2RlZmF1bHRGb2N1c0FzeW5jKSx0aGlzLl9kZWZhdWx0Rm9jdXNBc3luYz1udWxsKX0pLDEpfSxfYWZmZWN0U2Nyb2xsOmZ1bmN0aW9uKHQpe3RoaXMuJC50YWJzQ29udGFpbmVyLnNjcm9sbExlZnQrPXQ7dmFyIGU9dGhpcy4kLnRhYnNDb250YWluZXIuc2Nyb2xsTGVmdDt0aGlzLl9sZWZ0SGlkZGVuPTA9PT1lLHRoaXMuX3JpZ2h0SGlkZGVuPWU9PT10aGlzLl90YWJDb250YWluZXJTY3JvbGxTaXplfSxfb25MZWZ0U2Nyb2xsQnV0dG9uRG93bjpmdW5jdGlvbigpe3RoaXMuX3Njcm9sbFRvTGVmdCgpLHRoaXMuX2hvbGRKb2I9c2V0SW50ZXJ2YWwodGhpcy5fc2Nyb2xsVG9MZWZ0LmJpbmQodGhpcyksdGhpcy5faG9sZERlbGF5KX0sX29uUmlnaHRTY3JvbGxCdXR0b25Eb3duOmZ1bmN0aW9uKCl7dGhpcy5fc2Nyb2xsVG9SaWdodCgpLHRoaXMuX2hvbGRKb2I9c2V0SW50ZXJ2YWwodGhpcy5fc2Nyb2xsVG9SaWdodC5iaW5kKHRoaXMpLHRoaXMuX2hvbGREZWxheSl9LF9vblNjcm9sbEJ1dHRvblVwOmZ1bmN0aW9uKCl7Y2xlYXJJbnRlcnZhbCh0aGlzLl9ob2xkSm9iKSx0aGlzLl9ob2xkSm9iPW51bGx9LF9zY3JvbGxUb0xlZnQ6ZnVuY3Rpb24oKXt0aGlzLl9hZmZlY3RTY3JvbGwoLXRoaXMuX3N0ZXApfSxfc2Nyb2xsVG9SaWdodDpmdW5jdGlvbigpe3RoaXMuX2FmZmVjdFNjcm9sbCh0aGlzLl9zdGVwKX0sX3RhYkNoYW5nZWQ6ZnVuY3Rpb24odCxlKXtpZighdClyZXR1cm4gdGhpcy4kLnNlbGVjdGlvbkJhci5jbGFzc0xpc3QucmVtb3ZlKCJleHBhbmQiKSx0aGlzLiQuc2VsZWN0aW9uQmFyLmNsYXNzTGlzdC5yZW1vdmUoImNvbnRyYWN0Iiksdm9pZCB0aGlzLl9wb3NpdGlvbkJhcigwLDApO3ZhciBuPXRoaXMuJC50YWJzQ29udGVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxpPW4ud2lkdGgscj10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG89ci5sZWZ0LW4ubGVmdDtpZih0aGlzLl9wb3M9e3dpZHRoOnRoaXMuX2NhbGNQZXJjZW50KHIud2lkdGgsaSksbGVmdDp0aGlzLl9jYWxjUGVyY2VudChvLGkpfSx0aGlzLm5vU2xpZGV8fG51bGw9PWUpcmV0dXJuIHRoaXMuJC5zZWxlY3Rpb25CYXIuY2xhc3NMaXN0LnJlbW92ZSgiZXhwYW5kIiksdGhpcy4kLnNlbGVjdGlvbkJhci5jbGFzc0xpc3QucmVtb3ZlKCJjb250cmFjdCIpLHZvaWQgdGhpcy5fcG9zaXRpb25CYXIodGhpcy5fcG9zLndpZHRoLHRoaXMuX3Bvcy5sZWZ0KTt2YXIgYT1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHM9dGhpcy5pdGVtcy5pbmRleE9mKGUpLGw9dGhpcy5pdGVtcy5pbmRleE9mKHQpO3RoaXMuJC5zZWxlY3Rpb25CYXIuY2xhc3NMaXN0LmFkZCgiZXhwYW5kIik7dmFyIGM9czxsO3RoaXMuX2lzUlRMJiYoYz0hYyksYz90aGlzLl9wb3NpdGlvbkJhcih0aGlzLl9jYWxjUGVyY2VudChyLmxlZnQrci53aWR0aC1hLmxlZnQsaSktNSx0aGlzLl9sZWZ0KTp0aGlzLl9wb3NpdGlvbkJhcih0aGlzLl9jYWxjUGVyY2VudChhLmxlZnQrYS53aWR0aC1yLmxlZnQsaSktNSx0aGlzLl9jYWxjUGVyY2VudChvLGkpKzUpLHRoaXMuc2Nyb2xsYWJsZSYmdGhpcy5fc2Nyb2xsVG9TZWxlY3RlZElmTmVlZGVkKHIud2lkdGgsbyl9LF9zY3JvbGxUb1NlbGVjdGVkSWZOZWVkZWQ6ZnVuY3Rpb24odCxlKXt2YXIgbj1lLXRoaXMuJC50YWJzQ29udGFpbmVyLnNjcm9sbExlZnQ7KG48MHx8KG4rPXQtdGhpcy4kLnRhYnNDb250YWluZXIub2Zmc2V0V2lkdGgpPjApJiYodGhpcy4kLnRhYnNDb250YWluZXIuc2Nyb2xsTGVmdCs9bil9LF9jYWxjUGVyY2VudDpmdW5jdGlvbih0LGUpe3JldHVybiAxMDAqdC9lfSxfcG9zaXRpb25CYXI6ZnVuY3Rpb24odCxlKXtlPWV8fDAsdGhpcy5fd2lkdGg9dD10fHwwLHRoaXMuX2xlZnQ9ZSx0aGlzLnRyYW5zZm9ybSgidHJhbnNsYXRlWCgiK2UrIiUpIHNjYWxlWCgiK3QvMTAwKyIpIix0aGlzLiQuc2VsZWN0aW9uQmFyKX0sX29uQmFyVHJhbnNpdGlvbkVuZDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLiQuc2VsZWN0aW9uQmFyLmNsYXNzTGlzdDtlLmNvbnRhaW5zKCJleHBhbmQiKT8oZS5yZW1vdmUoImV4cGFuZCIpLGUuYWRkKCJjb250cmFjdCIpLHRoaXMuX3Bvc2l0aW9uQmFyKHRoaXMuX3Bvcy53aWR0aCx0aGlzLl9wb3MubGVmdCkpOmUuY29udGFpbnMoImNvbnRyYWN0IikmJmUucmVtb3ZlKCJjb250cmFjdCIpfX0pOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KdmFyIGNzPW51bGw7SXIoe190ZW1wbGF0ZTpfZWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci10b2FzdC1iYWNrZ3JvdW5kLWNvbG9yLCAjMzIzMjMyKTsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItdG9hc3QtY29sb3IsICNmMWYxZjEpOwogICAgICAgIG1pbi1oZWlnaHQ6IDQ4cHg7CiAgICAgICAgbWluLXdpZHRoOiAyODhweDsKICAgICAgICBwYWRkaW5nOiAxNnB4IDI0cHg7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBib3gtc2hhZG93OiAwIDJweCA1cHggMCByZ2JhKDAsIDAsIDAsIDAuMjYpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgICAgICBtYXJnaW46IDEycHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgICAtd2Via2l0LXRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIDAuM3MsIG9wYWNpdHkgMC4zczsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4zcywgb3BhY2l0eSAwLjNzOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTAwcHgpOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDBweCk7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgfQoKICAgICAgOmhvc3QoLmNhcHN1bGUpIHsKICAgICAgICBib3JkZXItcmFkaXVzOiAyNHB4OwogICAgICB9CgogICAgICA6aG9zdCguZml0LWJvdHRvbSkgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIG1pbi13aWR0aDogMDsKICAgICAgICBib3JkZXItcmFkaXVzOiAwOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgfQoKICAgICAgOmhvc3QoLnBhcGVyLXRvYXN0LW9wZW4pIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDBweCk7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDBweCk7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHNwYW4gaWQ9ImxhYmVsIj57e3RleHR9fTwvc3Bhbj4KICAgIDxzbG90Pjwvc2xvdD4KYCxpczoicGFwZXItdG9hc3QiLGJlaGF2aW9yczpbQWFdLHByb3BlcnRpZXM6e2ZpdEludG86e3R5cGU6T2JqZWN0LHZhbHVlOndpbmRvdyxvYnNlcnZlcjoiX29uRml0SW50b0NoYW5nZWQifSxob3Jpem9udGFsQWxpZ246e3R5cGU6U3RyaW5nLHZhbHVlOiJsZWZ0In0sdmVydGljYWxBbGlnbjp7dHlwZTpTdHJpbmcsdmFsdWU6ImJvdHRvbSJ9LGR1cmF0aW9uOnt0eXBlOk51bWJlcix2YWx1ZTozZTN9LHRleHQ6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxub0NhbmNlbE9uT3V0c2lkZUNsaWNrOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITB9LG5vQXV0b0ZvY3VzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITB9fSxsaXN0ZW5lcnM6e3RyYW5zaXRpb25lbmQ6Il9fb25UcmFuc2l0aW9uRW5kIn0sZ2V0IHZpc2libGUoKXtyZXR1cm4gcG8uX3dhcm4oImB2aXNpYmxlYCBpcyBkZXByZWNhdGVkLCB1c2UgYG9wZW5lZGAgaW5zdGVhZCIpLHRoaXMub3BlbmVkfSxnZXQgX2NhbkF1dG9DbG9zZSgpe3JldHVybiB0aGlzLmR1cmF0aW9uPjAmJnRoaXMuZHVyYXRpb24hPT0xLzB9LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLl9hdXRvQ2xvc2U9bnVsbCxPYS5yZXF1ZXN0QXZhaWxhYmlsaXR5KCl9LHNob3c6ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluInN0cmluZyI9PXR5cGVvZiB0JiYodD17dGV4dDp0fSksdCkwPT09ZS5pbmRleE9mKCJfIik/cG8uX3dhcm4oJ1RoZSBwcm9wZXJ0eSAiJytlKyciIGlzIHByaXZhdGUgYW5kIHdhcyBub3Qgc2V0LicpOmUgaW4gdGhpcz90aGlzW2VdPXRbZV06cG8uX3dhcm4oJ1RoZSBwcm9wZXJ0eSAiJytlKyciIGlzIG5vdCB2YWxpZC4nKTt0aGlzLm9wZW4oKX0saGlkZTpmdW5jdGlvbigpe3RoaXMuY2xvc2UoKX0sX19vblRyYW5zaXRpb25FbmQ6ZnVuY3Rpb24odCl7dCYmdC50YXJnZXQ9PT10aGlzJiYib3BhY2l0eSI9PT10LnByb3BlcnR5TmFtZSYmKHRoaXMub3BlbmVkP3RoaXMuX2ZpbmlzaFJlbmRlck9wZW5lZCgpOnRoaXMuX2ZpbmlzaFJlbmRlckNsb3NlZCgpKX0sX29wZW5lZENoYW5nZWQ6ZnVuY3Rpb24oKXtudWxsIT09dGhpcy5fYXV0b0Nsb3NlJiYodGhpcy5jYW5jZWxBc3luYyh0aGlzLl9hdXRvQ2xvc2UpLHRoaXMuX2F1dG9DbG9zZT1udWxsKSx0aGlzLm9wZW5lZD8oY3MmJmNzIT09dGhpcyYmY3MuY2xvc2UoKSxjcz10aGlzLHRoaXMuZmlyZSgiaXJvbi1hbm5vdW5jZSIse3RleHQ6dGhpcy50ZXh0fSksdGhpcy5fY2FuQXV0b0Nsb3NlJiYodGhpcy5fYXV0b0Nsb3NlPXRoaXMuYXN5bmModGhpcy5jbG9zZSx0aGlzLmR1cmF0aW9uKSkpOmNzPT09dGhpcyYmKGNzPW51bGwpLFRhLl9vcGVuZWRDaGFuZ2VkLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sX3JlbmRlck9wZW5lZDpmdW5jdGlvbigpe3RoaXMuY2xhc3NMaXN0LmFkZCgicGFwZXItdG9hc3Qtb3BlbiIpfSxfcmVuZGVyQ2xvc2VkOmZ1bmN0aW9uKCl7dGhpcy5jbGFzc0xpc3QucmVtb3ZlKCJwYXBlci10b2FzdC1vcGVuIil9LF9vbkZpdEludG9DaGFuZ2VkOmZ1bmN0aW9uKHQpe3RoaXMucG9zaXRpb25UYXJnZXQ9dH19KTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KY29uc3QgdXM9X2VgCgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIEBhcHBseSAtLWxheW91dC1ob3Jpem9udGFsOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICA6aG9zdCg6Zm9jdXMpIHsKICAgICAgICBvdXRsaW5lOm5vbmU7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtYmFyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBvcGFjaXR5OiAwLjQ7CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciBsaW5lYXIgLjA4czsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLXVuY2hlY2tlZC1iYXItY29sb3IsICMwMDAwMDApOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10b2dnbGUtYnV0dG9uLXVuY2hlY2tlZC1iYXI7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtYnV0dG9uIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAtM3B4OwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBib3gtc2hhZG93OiAwIDFweCA1cHggMCByZ2JhKDAsIDAsIDAsIDAuNik7CiAgICAgICAgdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gbGluZWFyIC4wOHMsIGJhY2tncm91bmQtY29sb3IgbGluZWFyIC4wOHM7CiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIGxpbmVhciAuMDhzLCBiYWNrZ3JvdW5kLWNvbG9yIGxpbmVhciAuMDhzOwogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi11bmNoZWNrZWQtYnV0dG9uLWNvbG9yLCB2YXIoLS1wYXBlci1ncmV5LTUwKSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvZ2dsZS1idXR0b24tdW5jaGVja2VkLWJ1dHRvbjsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1idXR0b24uZHJhZ2dpbmcgewogICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbjogbm9uZTsKICAgICAgICB0cmFuc2l0aW9uOiBub25lOwogICAgICB9CgogICAgICA6aG9zdChbY2hlY2tlZF06bm90KFtkaXNhYmxlZF0pKSAudG9nZ2xlLWJhciB7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXRvZ2dsZS1idXR0b24tY2hlY2tlZC1iYXItY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi1jaGVja2VkLWJhcjsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgLnRvZ2dsZS1iYXIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDA7CiAgICAgICAgb3BhY2l0eTogMC4xMjsKICAgICAgfQoKICAgICAgOmhvc3QoW2NoZWNrZWRdKSAudG9nZ2xlLWJ1dHRvbiB7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgxNnB4LCAwKTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgxNnB4LCAwKTsKICAgICAgfQoKICAgICAgOmhvc3QoW2NoZWNrZWRdOm5vdChbZGlzYWJsZWRdKSkgLnRvZ2dsZS1idXR0b24gewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXRvZ2dsZS1idXR0b24tY2hlY2tlZC1idXR0b24tY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi1jaGVja2VkLWJ1dHRvbjsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgLnRvZ2dsZS1idXR0b24gewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNiZGJkYmQ7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1pbmsgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IC0xNHB4OwogICAgICAgIGxlZnQ6IC0xNHB4OwogICAgICAgIHJpZ2h0OiBhdXRvOwogICAgICAgIGJvdHRvbTogYXV0bzsKICAgICAgICB3aWR0aDogNDhweDsKICAgICAgICBoZWlnaHQ6IDQ4cHg7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLXVuY2hlY2tlZC1pbmstY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10b2dnbGUtYnV0dG9uLXVuY2hlY2tlZC1pbms7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjaGVja2VkXSkgLnRvZ2dsZS1pbmsgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLWNoZWNrZWQtaW5rLWNvbG9yLCB2YXIoLS1wcmltYXJ5LWNvbG9yKSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvZ2dsZS1idXR0b24tY2hlY2tlZC1pbms7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiAzNnB4OwogICAgICAgIGhlaWdodDogMTRweDsKICAgICAgICAvKiBUaGUgdG9nZ2xlIGJ1dHRvbiBoYXMgYW4gYWJzb2x1dGUgcG9zaXRpb24gb2YgLTNweDsgVGhlIGV4dHJhIDFweAogICAgICAgIC8qIGFjY291bnRzIGZvciB0aGUgdG9nZ2xlIGJ1dHRvbiBzaGFkb3cgYm94LiAqLwogICAgICAgIG1hcmdpbjogNHB4IDFweDsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1sYWJlbCB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgICAgIHBhZGRpbmctbGVmdDogdmFyKC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi1sYWJlbC1zcGFjaW5nLCA4cHgpOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLWxhYmVsLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgICAgfQoKICAgICAgLyogaW52YWxpZCBzdGF0ZSAqLwogICAgICA6aG9zdChbaW52YWxpZF0pIC50b2dnbGUtYmFyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLWludmFsaWQtYmFyLWNvbG9yLCB2YXIoLS1lcnJvci1jb2xvcikpOwogICAgICB9CgogICAgICA6aG9zdChbaW52YWxpZF0pIC50b2dnbGUtYnV0dG9uIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLWludmFsaWQtYnV0dG9uLWNvbG9yLCB2YXIoLS1lcnJvci1jb2xvcikpOwogICAgICB9CgogICAgICA6aG9zdChbaW52YWxpZF0pIC50b2dnbGUtaW5rIHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi1pbnZhbGlkLWluay1jb2xvciwgdmFyKC0tZXJyb3ItY29sb3IpKTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGNsYXNzPSJ0b2dnbGUtY29udGFpbmVyIj4KICAgICAgPGRpdiBpZD0idG9nZ2xlQmFyIiBjbGFzcz0idG9nZ2xlLWJhciI+PC9kaXY+CiAgICAgIDxkaXYgaWQ9InRvZ2dsZUJ1dHRvbiIgY2xhc3M9InRvZ2dsZS1idXR0b24iPjwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0idG9nZ2xlLWxhYmVsIj48c2xvdD48L3Nsb3Q+PC9kaXY+CgogIGA7dXMuc2V0QXR0cmlidXRlKCJzdHJpcC13aGl0ZXNwYWNlIiwiIiksSXIoe190ZW1wbGF0ZTp1cyxpczoicGFwZXItdG9nZ2xlLWJ1dHRvbiIsYmVoYXZpb3JzOltjYV0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6ImJ1dHRvbiIsImFyaWEtcHJlc3NlZCI6ImZhbHNlIix0YWJpbmRleDowfSxwcm9wZXJ0aWVzOnt9LGxpc3RlbmVyczp7dHJhY2s6Il9vbnRyYWNrIn0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXtraSh0aGlzLChmdW5jdGlvbigpe3JpKHRoaXMsInBhbi15Iil9KSl9LF9vbnRyYWNrOmZ1bmN0aW9uKHQpe3ZhciBlPXQuZGV0YWlsOyJzdGFydCI9PT1lLnN0YXRlP3RoaXMuX3RyYWNrU3RhcnQoZSk6InRyYWNrIj09PWUuc3RhdGU/dGhpcy5fdHJhY2tNb3ZlKGUpOiJlbmQiPT09ZS5zdGF0ZSYmdGhpcy5fdHJhY2tFbmQoZSl9LF90cmFja1N0YXJ0OmZ1bmN0aW9uKHQpe3RoaXMuX3dpZHRoPXRoaXMuJC50b2dnbGVCYXIub2Zmc2V0V2lkdGgvMix0aGlzLl90cmFja0NoZWNrZWQ9dGhpcy5jaGVja2VkLHRoaXMuJC50b2dnbGVCdXR0b24uY2xhc3NMaXN0LmFkZCgiZHJhZ2dpbmciKX0sX3RyYWNrTW92ZTpmdW5jdGlvbih0KXt2YXIgZT10LmR4O3RoaXMuX3g9TWF0aC5taW4odGhpcy5fd2lkdGgsTWF0aC5tYXgoMCx0aGlzLl90cmFja0NoZWNrZWQ/dGhpcy5fd2lkdGgrZTplKSksdGhpcy50cmFuc2xhdGUzZCh0aGlzLl94KyJweCIsMCwwLHRoaXMuJC50b2dnbGVCdXR0b24pLHRoaXMuX3VzZXJBY3RpdmF0ZSh0aGlzLl94PnRoaXMuX3dpZHRoLzIpfSxfdHJhY2tFbmQ6ZnVuY3Rpb24odCl7dGhpcy4kLnRvZ2dsZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJkcmFnZ2luZyIpLHRoaXMudHJhbnNmb3JtKCIiLHRoaXMuJC50b2dnbGVCdXR0b24pfSxfY3JlYXRlUmlwcGxlOmZ1bmN0aW9uKCl7dGhpcy5fcmlwcGxlQ29udGFpbmVyPXRoaXMuJC50b2dnbGVCdXR0b247dmFyIHQ9Wm8uX2NyZWF0ZVJpcHBsZSgpO3JldHVybiB0LmlkPSJpbmsiLHQuc2V0QXR0cmlidXRlKCJyZWNlbnRlcnMiLCIiKSx0LmNsYXNzTGlzdC5hZGQoImNpcmNsZSIsInRvZ2dsZS1pbmsiKSx0fX0pLAovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KSXIoe190ZW1wbGF0ZTpfZWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLWhlaWdodDogdmFyKC0tcGFwZXItdG9vbGJhci1oZWlnaHQsIDY0cHgpOwogICAgICAgIC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLXNtLWhlaWdodDogdmFyKC0tcGFwZXItdG9vbGJhci1zbS1oZWlnaHQsIDU2cHgpOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBoZWlnaHQ6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItdG9vbGJhci1oZWlnaHQpOwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLXRvb2xiYXItYmFja2dyb3VuZCwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10b29sYmFyLWNvbG9yLCB2YXIoLS1kYXJrLXRoZW1lLXRleHQtY29sb3IpKTsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sYmFyOwogICAgICB9CgogICAgICA6aG9zdCguYW5pbWF0ZSkgewogICAgICAgIHRyYW5zaXRpb246IHZhcigtLXBhcGVyLXRvb2xiYXItdHJhbnNpdGlvbiwgaGVpZ2h0IDAuMThzIGVhc2UtaW4pOwogICAgICB9CgogICAgICA6aG9zdCgubWVkaXVtLXRhbGwpIHsKICAgICAgICBoZWlnaHQ6IGNhbGModmFyKC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLWhlaWdodCkgKiAyKTsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sYmFyLW1lZGl1bTsKICAgICAgfQoKICAgICAgOmhvc3QoLnRhbGwpIHsKICAgICAgICBoZWlnaHQ6IGNhbGModmFyKC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLWhlaWdodCkgKiAzKTsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sYmFyLXRhbGw7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLXRvb2xzIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXRvb2xiYXItaGVpZ2h0KTsKICAgICAgICBwYWRkaW5nOiAwIDE2cHg7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWhvcml6b250YWw7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlcjsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sYmFyLWNvbnRlbnQ7CiAgICAgIH0KCiAgICAgIC8qCiAgICAgICAqIFRPRE86IFdoZXJlIHNob3VsZCBtZWRpYSBxdWVyeSBicmVha3BvaW50cyBsaXZlIHNvIHRoZXkgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIGVsZW1lbnRzPwogICAgICAgKi8KCiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA2MDBweCkgewogICAgICAgIDpob3N0IHsKICAgICAgICAgIGhlaWdodDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLXNtLWhlaWdodCk7CiAgICAgICAgfQoKICAgICAgICA6aG9zdCgubWVkaXVtLXRhbGwpIHsKICAgICAgICAgIGhlaWdodDogY2FsYyh2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXRvb2xiYXItc20taGVpZ2h0KSAqIDIpOwogICAgICAgIH0KCiAgICAgICAgOmhvc3QoLnRhbGwpIHsKICAgICAgICAgIGhlaWdodDogY2FsYyh2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXRvb2xiYXItc20taGVpZ2h0KSAqIDMpOwogICAgICAgIH0KCiAgICAgICAgLnRvb2xiYXItdG9vbHMgewogICAgICAgICAgaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXRvb2xiYXItc20taGVpZ2h0KTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgICN0b3BCYXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgLyogbWlkZGxlIGJhciAqLwogICAgICAjbWlkZGxlQmFyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgIH0KCiAgICAgIDpob3N0KC50YWxsKSAjbWlkZGxlQmFyLAogICAgICA6aG9zdCgubWVkaXVtLXRhbGwpICNtaWRkbGVCYXIgewogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMCUpOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDAlKTsKICAgICAgfQoKICAgICAgLyogYm90dG9tIGJhciAqLwogICAgICAjYm90dG9tQmFyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgIH0KCiAgICAgIC8qCiAgICAgICAqIG1ha2UgZWxlbWVudHMgKGUuZy4gYnV0dG9ucykgcmVzcG9uZCB0byBtb3VzZS90b3VjaCBldmVudHMKICAgICAgICoKICAgICAgICogXGAudG9vbGJhci10b29sc1xgIGRpc2FibGVzIHRvdWNoIGV2ZW50cyBzbyBtdWx0aXBsZSB0b29sYmFycyBjYW4gc3RhY2sgYW5kIG5vdAogICAgICAgKiBhYnNvcmIgZXZlbnRzLiBBbGwgY2hpbGRyZW4gbXVzdCBoYXZlIHBvaW50ZXIgZXZlbnRzIHJlLWVuYWJsZWQgdG8gd29yayBhcwogICAgICAgKiBleHBlY3RlZC4KICAgICAgICovCiAgICAgIC50b29sYmFyLXRvb2xzID4gOjpzbG90dGVkKCo6bm90KFtkaXNhYmxlZF0pKSB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgICAgIH0KCiAgICAgIC50b29sYmFyLXRvb2xzID4gOjpzbG90dGVkKC50aXRsZSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIGZvbnQtc2l6ZTogMjBweDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4OwogICAgICB9CgogICAgICAudG9vbGJhci10b29scyA+IDo6c2xvdHRlZCgudGl0bGUpIHsKICAgICAgICBtYXJnaW4tbGVmdDogNTZweDsKICAgICAgfQoKICAgICAgLnRvb2xiYXItdG9vbHMgPiA6OnNsb3R0ZWQocGFwZXItaWNvbi1idXR0b24gKyAudGl0bGUpIHsKICAgICAgICBtYXJnaW4tbGVmdDogMDsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFRoZSAtLXBhcGVyLXRvb2xiYXItdGl0bGUgbWl4aW4gaXMgYXBwbGllZCBoZXJlIGluc3RlYWQgb2YgYWJvdmUgdG8KICAgICAgICogZml4IHRoZSBpc3N1ZSB3aXRoIG1hcmdpbi1sZWZ0IGJlaW5nIGlnbm9yZWQgZHVlIHRvIGNzcyBvcmRlcmluZy4KICAgICAgICovCiAgICAgIC50b29sYmFyLXRvb2xzID4gOjpzbG90dGVkKC50aXRsZSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvb2xiYXItdGl0bGU7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLXRvb2xzID4gOjpzbG90dGVkKHBhcGVyLWljb24tYnV0dG9uW2ljb249bWVudV0pIHsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDI0cHg7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLXRvb2xzID4gOjpzbG90dGVkKC5maXQpIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiBhdXRvOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHdpZHRoOiBhdXRvOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgfQoKICAgICAgLyogVE9ETyhub21zKTogVW50aWwgd2UgaGF2ZSBhIGJldHRlciBzb2x1dGlvbiBmb3IgY2xhc3NlcyB0aGF0IGRvbid0IHVzZQogICAgICAgKiAvZGVlcC8gY3JlYXRlIG91ciBvd24uCiAgICAgICAqLwogICAgICAuc3RhcnQtanVzdGlmaWVkIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtc3RhcnQtanVzdGlmaWVkOwogICAgICB9CgogICAgICAuY2VudGVyLWp1c3RpZmllZCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlci1qdXN0aWZpZWQ7CiAgICAgIH0KCiAgICAgIC5lbmQtanVzdGlmaWVkIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZW5kLWp1c3RpZmllZDsKICAgICAgfQoKICAgICAgLmFyb3VuZC1qdXN0aWZpZWQgewogICAgICAgIEBhcHBseSAtLWxheW91dC1hcm91bmQtanVzdGlmaWVkOwogICAgICB9CgogICAgICAuanVzdGlmaWVkIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtanVzdGlmaWVkOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgaWQ9InRvcEJhciIgY2xhc3NcJD0idG9vbGJhci10b29scyBbW19jb21wdXRlQmFyRXh0cmFDbGFzc2VzKGp1c3RpZnkpXV0iPgogICAgICA8c2xvdCBuYW1lPSJ0b3AiPjwvc2xvdD4KICAgIDwvZGl2PgoKICAgIDxkaXYgaWQ9Im1pZGRsZUJhciIgY2xhc3NcJD0idG9vbGJhci10b29scyBbW19jb21wdXRlQmFyRXh0cmFDbGFzc2VzKG1pZGRsZUp1c3RpZnkpXV0iPgogICAgICA8c2xvdCBuYW1lPSJtaWRkbGUiPjwvc2xvdD4KICAgIDwvZGl2PgoKICAgIDxkaXYgaWQ9ImJvdHRvbUJhciIgY2xhc3NcJD0idG9vbGJhci10b29scyBbW19jb21wdXRlQmFyRXh0cmFDbGFzc2VzKGJvdHRvbUp1c3RpZnkpXV0iPgogICAgICA8c2xvdCBuYW1lPSJib3R0b20iPjwvc2xvdD4KICAgIDwvZGl2PgpgLGlzOiJwYXBlci10b29sYmFyIixob3N0QXR0cmlidXRlczp7cm9sZToidG9vbGJhciJ9LHByb3BlcnRpZXM6e2JvdHRvbUp1c3RpZnk6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxqdXN0aWZ5Ont0eXBlOlN0cmluZyx2YWx1ZToiIn0sbWlkZGxlSnVzdGlmeTp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9fSxyZWFkeTpmdW5jdGlvbigpe2NvbnNvbGUud2Fybih0aGlzLmlzLCJpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIGFwcC1sYXlvdXQgaW5zdGVhZCEiKX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9vYnNlcnZlcj10aGlzLl9vYnNlcnZlKHRoaXMpLHRoaXMuX3VwZGF0ZUFyaWFMYWJlbGxlZEJ5KCl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fb2JzZXJ2ZXImJnRoaXMuX29ic2VydmVyLmRpc2Nvbm5lY3QoKX0sX29ic2VydmU6ZnVuY3Rpb24odCl7dmFyIGU9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVBcmlhTGFiZWxsZWRCeSgpfS5iaW5kKHRoaXMpKTtyZXR1cm4gZS5vYnNlcnZlKHQse2NoaWxkTGlzdDohMCxzdWJ0cmVlOiEwfSksZX0sX3VwZGF0ZUFyaWFMYWJlbGxlZEJ5OmZ1bmN0aW9uKCl7emkoKTtmb3IodmFyIHQsZT1bXSxuPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHFpKHRoaXMucm9vdCkucXVlcnlTZWxlY3RvckFsbCgic2xvdCIpKS5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwocWkodGhpcy5yb290KS5xdWVyeVNlbGVjdG9yQWxsKCJjb250ZW50IikpKSxpPTA7dD1uW2ldO2krKylmb3IodmFyIHIsbz1xaSh0KS5nZXREaXN0cmlidXRlZE5vZGVzKCksYT0wO3I9b1thXTthKyspaWYoci5jbGFzc0xpc3QmJnIuY2xhc3NMaXN0LmNvbnRhaW5zKCJ0aXRsZSIpKWlmKHIuaWQpZS5wdXNoKHIuaWQpO2Vsc2V7dmFyIHM9InBhcGVyLXRvb2xiYXItbGFiZWwtIitNYXRoLmZsb29yKDFlNCpNYXRoLnJhbmRvbSgpKTtyLmlkPXMsZS5wdXNoKHMpfWUubGVuZ3RoPjAmJnRoaXMuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsbGVkYnkiLGUuam9pbigiICIpKX0sX2NvbXB1dGVCYXJFeHRyYUNsYXNzZXM6ZnVuY3Rpb24odCl7cmV0dXJuIHQ/dCsoImp1c3RpZmllZCI9PT10PyIiOiItanVzdGlmaWVkIik6IiJ9fSksCi8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpJcih7X3RlbXBsYXRlOl9lYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgei1pbmRleDogMTAwMjsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgfQoKICAgICAgI3Rvb2x0aXAgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItdG9vbHRpcC1iYWNrZ3JvdW5kLCAjNjE2MTYxKTsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItdG9vbHRpcC10ZXh0LWNvbG9yLCB3aGl0ZSk7CiAgICAgICAgcGFkZGluZzogOHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sdGlwOwogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGtleUZyYW1lU2NhbGVVcCB7CiAgICAgICAgMCUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjApOwogICAgICAgIH0KICAgICAgICAxMDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMga2V5RnJhbWVTY2FsZURvd24gewogICAgICAgIDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wKTsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuMCk7CiAgICAgICAgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGtleUZyYW1lRmFkZUluT3BhY2l0eSB7CiAgICAgICAgMCUgewogICAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICBvcGFjaXR5OiB2YXIoLS1wYXBlci10b29sdGlwLW9wYWNpdHksIDAuOSk7CiAgICAgICAgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGtleUZyYW1lRmFkZU91dE9wYWNpdHkgewogICAgICAgIDAlIHsKICAgICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBrZXlGcmFtZVNsaWRlRG93bkluIHsKICAgICAgICAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTIwMDBweCk7CiAgICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIH0KICAgICAgICAxMCUgewogICAgICAgICAgb3BhY2l0eTogMC4yOwogICAgICAgIH0KICAgICAgICAxMDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsKICAgICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMga2V5RnJhbWVTbGlkZURvd25PdXQgewogICAgICAgIDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsKICAgICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICB9CiAgICAgICAgMTAlIHsKICAgICAgICAgIG9wYWNpdHk6IDAuMjsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTIwMDBweCk7CiAgICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLmZhZGUtaW4tYW5pbWF0aW9uIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tcGFwZXItdG9vbHRpcC1kZWxheS1pbiwgNTAwbXMpOwogICAgICAgIGFuaW1hdGlvbi1uYW1lOiBrZXlGcmFtZUZhZGVJbk9wYWNpdHk7CiAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogMTsKICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBlYXNlLWluOwogICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItdG9vbHRpcC1kdXJhdGlvbi1pbiwgNTAwbXMpOwogICAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGZvcndhcmRzOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvb2x0aXAtYW5pbWF0aW9uOwogICAgICB9CgogICAgICAuZmFkZS1vdXQtYW5pbWF0aW9uIHsKICAgICAgICBvcGFjaXR5OiB2YXIoLS1wYXBlci10b29sdGlwLW9wYWNpdHksIDAuOSk7CiAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1wYXBlci10b29sdGlwLWRlbGF5LW91dCwgMG1zKTsKICAgICAgICBhbmltYXRpb24tbmFtZToga2V5RnJhbWVGYWRlT3V0T3BhY2l0eTsKICAgICAgICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiAxOwogICAgICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGVhc2UtaW47CiAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1wYXBlci10b29sdGlwLWR1cmF0aW9uLW91dCwgNTAwbXMpOwogICAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGZvcndhcmRzOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvb2x0aXAtYW5pbWF0aW9uOwogICAgICB9CgogICAgICAuc2NhbGUtdXAtYW5pbWF0aW9uIHsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDApOwogICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICBhbmltYXRpb24tZGVsYXk6IHZhcigtLXBhcGVyLXRvb2x0aXAtZGVsYXktaW4sIDUwMG1zKTsKICAgICAgICBhbmltYXRpb24tbmFtZToga2V5RnJhbWVTY2FsZVVwOwogICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IDE7CiAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZS1pbjsKICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXRvb2x0aXAtZHVyYXRpb24taW4sIDUwMG1zKTsKICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBmb3J3YXJkczsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sdGlwLWFuaW1hdGlvbjsKICAgICAgfQoKICAgICAgLnNjYWxlLWRvd24tYW5pbWF0aW9uIHsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOwogICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICBhbmltYXRpb24tZGVsYXk6IHZhcigtLXBhcGVyLXRvb2x0aXAtZGVsYXktb3V0LCA1MDBtcyk7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGtleUZyYW1lU2NhbGVEb3duOwogICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IDE7CiAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZS1pbjsKICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXRvb2x0aXAtZHVyYXRpb24tb3V0LCA1MDBtcyk7CiAgICAgICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogZm9yd2FyZHM7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9vbHRpcC1hbmltYXRpb247CiAgICAgIH0KCiAgICAgIC5zbGlkZS1kb3duLWFuaW1hdGlvbiB7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0yMDAwcHgpOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1wYXBlci10b29sdGlwLWRlbGF5LW91dCwgNTAwbXMpOwogICAgICAgIGFuaW1hdGlvbi1uYW1lOiBrZXlGcmFtZVNsaWRlRG93bkluOwogICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IDE7CiAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMCwgMC4wLCAwLjIsIDEpOwogICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItdG9vbHRpcC1kdXJhdGlvbi1vdXQsIDUwMG1zKTsKICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBmb3J3YXJkczsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sdGlwLWFuaW1hdGlvbjsKICAgICAgfQoKICAgICAgLnNsaWRlLWRvd24tYW5pbWF0aW9uLW91dCB7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICBhbmltYXRpb24tZGVsYXk6IHZhcigtLXBhcGVyLXRvb2x0aXAtZGVsYXktb3V0LCA1MDBtcyk7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGtleUZyYW1lU2xpZGVEb3duT3V0OwogICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IDE7CiAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAxLCAxKTsKICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXRvb2x0aXAtZHVyYXRpb24tb3V0LCA1MDBtcyk7CiAgICAgICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogZm9yd2FyZHM7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9vbHRpcC1hbmltYXRpb247CiAgICAgIH0KCiAgICAgIC5jYW5jZWwtYW5pbWF0aW9uIHsKICAgICAgICBhbmltYXRpb24tZGVsYXk6IC0zMHMgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgLyogVGhhbmtzIElFIDEwLiAqLwoKICAgICAgLmhpZGRlbiB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgaWQ9InRvb2x0aXAiIGNsYXNzPSJoaWRkZW4iPgogICAgICA8c2xvdD48L3Nsb3Q+CiAgICA8L2Rpdj4KYCxpczoicGFwZXItdG9vbHRpcCIsaG9zdEF0dHJpYnV0ZXM6e3JvbGU6InRvb2x0aXAiLHRhYmluZGV4Oi0xfSxwcm9wZXJ0aWVzOntmb3I6e3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfZmluZFRhcmdldCJ9LG1hbnVhbE1vZGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX21hbnVhbE1vZGVDaGFuZ2VkIn0scG9zaXRpb246e3R5cGU6U3RyaW5nLHZhbHVlOiJib3R0b20ifSxmaXRUb1Zpc2libGVCb3VuZHM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sb2Zmc2V0Ont0eXBlOk51bWJlcix2YWx1ZToxNH0sbWFyZ2luVG9wOnt0eXBlOk51bWJlcix2YWx1ZToxNH0sYW5pbWF0aW9uRGVsYXk6e3R5cGU6TnVtYmVyLHZhbHVlOjUwMCxvYnNlcnZlcjoiX2RlbGF5Q2hhbmdlIn0sYW5pbWF0aW9uRW50cnk6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxhbmltYXRpb25FeGl0Ont0eXBlOlN0cmluZyx2YWx1ZToiIn0sYW5pbWF0aW9uQ29uZmlnOnt0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybntlbnRyeTpbe25hbWU6ImZhZGUtaW4tYW5pbWF0aW9uIixub2RlOnRoaXMsdGltaW5nOntkZWxheTowfX1dLGV4aXQ6W3tuYW1lOiJmYWRlLW91dC1hbmltYXRpb24iLG5vZGU6dGhpc31dfX19LF9zaG93aW5nOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9fSxsaXN0ZW5lcnM6e3dlYmtpdEFuaW1hdGlvbkVuZDoiX29uQW5pbWF0aW9uRW5kIn0sZ2V0IHRhcmdldCgpe3ZhciB0PXFpKHRoaXMpLnBhcmVudE5vZGUsZT1xaSh0aGlzKS5nZXRPd25lclJvb3QoKTtyZXR1cm4gdGhpcy5mb3I/cWkoZSkucXVlcnlTZWxlY3RvcigiIyIrdGhpcy5mb3IpOnQubm9kZVR5cGU9PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERT9lLmhvc3Q6dH0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9maW5kVGFyZ2V0KCl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5tYW51YWxNb2RlfHx0aGlzLl9yZW1vdmVMaXN0ZW5lcnMoKX0scGxheUFuaW1hdGlvbjpmdW5jdGlvbih0KXsiZW50cnkiPT09dD90aGlzLnNob3coKToiZXhpdCI9PT10JiZ0aGlzLmhpZGUoKX0sY2FuY2VsQW5pbWF0aW9uOmZ1bmN0aW9uKCl7dGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LmFkZCgiY2FuY2VsLWFuaW1hdGlvbiIpfSxzaG93OmZ1bmN0aW9uKCl7aWYoIXRoaXMuX3Nob3dpbmcpe2lmKCIiPT09cWkodGhpcykudGV4dENvbnRlbnQudHJpbSgpKXtmb3IodmFyIHQ9ITAsZT1xaSh0aGlzKS5nZXRFZmZlY3RpdmVDaGlsZE5vZGVzKCksbj0wO248ZS5sZW5ndGg7bisrKWlmKCIiIT09ZVtuXS50ZXh0Q29udGVudC50cmltKCkpe3Q9ITE7YnJlYWt9aWYodClyZXR1cm59dGhpcy5fc2hvd2luZz0hMCx0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QucmVtb3ZlKCJoaWRkZW4iKSx0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QucmVtb3ZlKCJjYW5jZWwtYW5pbWF0aW9uIiksdGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLl9nZXRBbmltYXRpb25UeXBlKCJleGl0IikpLHRoaXMudXBkYXRlUG9zaXRpb24oKSx0aGlzLl9hbmltYXRpb25QbGF5aW5nPSEwLHRoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5hZGQodGhpcy5fZ2V0QW5pbWF0aW9uVHlwZSgiZW50cnkiKSl9fSxoaWRlOmZ1bmN0aW9uKCl7aWYodGhpcy5fc2hvd2luZyl7aWYodGhpcy5fYW5pbWF0aW9uUGxheWluZylyZXR1cm4gdGhpcy5fc2hvd2luZz0hMSx2b2lkIHRoaXMuX2NhbmNlbEFuaW1hdGlvbigpO3RoaXMuX29uQW5pbWF0aW9uRmluaXNoKCksdGhpcy5fc2hvd2luZz0hMSx0aGlzLl9hbmltYXRpb25QbGF5aW5nPSEwfX0sdXBkYXRlUG9zaXRpb246ZnVuY3Rpb24oKXtpZih0aGlzLl90YXJnZXQmJnRoaXMub2Zmc2V0UGFyZW50KXt2YXIgdD10aGlzLm9mZnNldDsxNCE9dGhpcy5tYXJnaW5Ub3AmJjE0PT10aGlzLm9mZnNldCYmKHQ9dGhpcy5tYXJnaW5Ub3ApO3ZhciBlLG4saT10aGlzLm9mZnNldFBhcmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxyPXRoaXMuX3RhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxvPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYT0oci53aWR0aC1vLndpZHRoKS8yLHM9KHIuaGVpZ2h0LW8uaGVpZ2h0KS8yLGw9ci5sZWZ0LWkubGVmdCxjPXIudG9wLWkudG9wO3N3aXRjaCh0aGlzLnBvc2l0aW9uKXtjYXNlInRvcCI6ZT1sK2Esbj1jLW8uaGVpZ2h0LXQ7YnJlYWs7Y2FzZSJib3R0b20iOmU9bCthLG49YytyLmhlaWdodCt0O2JyZWFrO2Nhc2UibGVmdCI6ZT1sLW8ud2lkdGgtdCxuPWMrczticmVhaztjYXNlInJpZ2h0IjplPWwrci53aWR0aCt0LG49YytzfXRoaXMuZml0VG9WaXNpYmxlQm91bmRzPyhpLmxlZnQrZStvLndpZHRoPndpbmRvdy5pbm5lcldpZHRoPyh0aGlzLnN0eWxlLnJpZ2h0PSIwcHgiLHRoaXMuc3R5bGUubGVmdD0iYXV0byIpOih0aGlzLnN0eWxlLmxlZnQ9TWF0aC5tYXgoMCxlKSsicHgiLHRoaXMuc3R5bGUucmlnaHQ9ImF1dG8iKSxpLnRvcCtuK28uaGVpZ2h0PndpbmRvdy5pbm5lckhlaWdodD8odGhpcy5zdHlsZS5ib3R0b209aS5oZWlnaHQtYyt0KyJweCIsdGhpcy5zdHlsZS50b3A9ImF1dG8iKToodGhpcy5zdHlsZS50b3A9TWF0aC5tYXgoLWkudG9wLG4pKyJweCIsdGhpcy5zdHlsZS5ib3R0b209ImF1dG8iKSk6KHRoaXMuc3R5bGUubGVmdD1lKyJweCIsdGhpcy5zdHlsZS50b3A9bisicHgiKX19LF9hZGRMaXN0ZW5lcnM6ZnVuY3Rpb24oKXt0aGlzLl90YXJnZXQmJih0aGlzLmxpc3Rlbih0aGlzLl90YXJnZXQsIm1vdXNlZW50ZXIiLCJzaG93IiksdGhpcy5saXN0ZW4odGhpcy5fdGFyZ2V0LCJmb2N1cyIsInNob3ciKSx0aGlzLmxpc3Rlbih0aGlzLl90YXJnZXQsIm1vdXNlbGVhdmUiLCJoaWRlIiksdGhpcy5saXN0ZW4odGhpcy5fdGFyZ2V0LCJibHVyIiwiaGlkZSIpLHRoaXMubGlzdGVuKHRoaXMuX3RhcmdldCwidGFwIiwiaGlkZSIpKSx0aGlzLmxpc3Rlbih0aGlzLiQudG9vbHRpcCwiYW5pbWF0aW9uZW5kIiwiX29uQW5pbWF0aW9uRW5kIiksdGhpcy5saXN0ZW4odGhpcywibW91c2VlbnRlciIsImhpZGUiKX0sX2ZpbmRUYXJnZXQ6ZnVuY3Rpb24oKXt0aGlzLm1hbnVhbE1vZGV8fHRoaXMuX3JlbW92ZUxpc3RlbmVycygpLHRoaXMuX3RhcmdldD10aGlzLnRhcmdldCx0aGlzLm1hbnVhbE1vZGV8fHRoaXMuX2FkZExpc3RlbmVycygpfSxfZGVsYXlDaGFuZ2U6ZnVuY3Rpb24odCl7NTAwIT09dCYmdGhpcy51cGRhdGVTdHlsZXMoeyItLXBhcGVyLXRvb2x0aXAtZGVsYXktaW4iOnQrIm1zIn0pfSxfbWFudWFsTW9kZUNoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLm1hbnVhbE1vZGU/dGhpcy5fcmVtb3ZlTGlzdGVuZXJzKCk6dGhpcy5fYWRkTGlzdGVuZXJzKCl9LF9jYW5jZWxBbmltYXRpb246ZnVuY3Rpb24oKXt0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuX2dldEFuaW1hdGlvblR5cGUoImVudHJ5IikpLHRoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5yZW1vdmUodGhpcy5fZ2V0QW5pbWF0aW9uVHlwZSgiZXhpdCIpKSx0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QucmVtb3ZlKCJjYW5jZWwtYW5pbWF0aW9uIiksdGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LmFkZCgiaGlkZGVuIil9LF9vbkFuaW1hdGlvbkZpbmlzaDpmdW5jdGlvbigpe3RoaXMuX3Nob3dpbmcmJih0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuX2dldEFuaW1hdGlvblR5cGUoImVudHJ5IikpLHRoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5yZW1vdmUoImNhbmNlbC1hbmltYXRpb24iKSx0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QuYWRkKHRoaXMuX2dldEFuaW1hdGlvblR5cGUoImV4aXQiKSkpfSxfb25BbmltYXRpb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLl9hbmltYXRpb25QbGF5aW5nPSExLHRoaXMuX3Nob3dpbmd8fCh0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuX2dldEFuaW1hdGlvblR5cGUoImV4aXQiKSksdGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LmFkZCgiaGlkZGVuIikpfSxfZ2V0QW5pbWF0aW9uVHlwZTpmdW5jdGlvbih0KXtpZigiZW50cnkiPT09dCYmIiIhPT10aGlzLmFuaW1hdGlvbkVudHJ5KXJldHVybiB0aGlzLmFuaW1hdGlvbkVudHJ5O2lmKCJleGl0Ij09PXQmJiIiIT09dGhpcy5hbmltYXRpb25FeGl0KXJldHVybiB0aGlzLmFuaW1hdGlvbkV4aXQ7aWYodGhpcy5hbmltYXRpb25Db25maWdbdF0mJiJzdHJpbmciPT10eXBlb2YgdGhpcy5hbmltYXRpb25Db25maWdbdF1bMF0ubmFtZSl7aWYodGhpcy5hbmltYXRpb25Db25maWdbdF1bMF0udGltaW5nJiZ0aGlzLmFuaW1hdGlvbkNvbmZpZ1t0XVswXS50aW1pbmcuZGVsYXkmJjAhPT10aGlzLmFuaW1hdGlvbkNvbmZpZ1t0XVswXS50aW1pbmcuZGVsYXkpe3ZhciBlPXRoaXMuYW5pbWF0aW9uQ29uZmlnW3RdWzBdLnRpbWluZy5kZWxheTsiZW50cnkiPT09dD90aGlzLnVwZGF0ZVN0eWxlcyh7Ii0tcGFwZXItdG9vbHRpcC1kZWxheS1pbiI6ZSsibXMifSk6ImV4aXQiPT09dCYmdGhpcy51cGRhdGVTdHlsZXMoeyItLXBhcGVyLXRvb2x0aXAtZGVsYXktb3V0IjplKyJtcyJ9KX1yZXR1cm4gdGhpcy5hbmltYXRpb25Db25maWdbdF1bMF0ubmFtZX19LF9yZW1vdmVMaXN0ZW5lcnM6ZnVuY3Rpb24oKXt0aGlzLl90YXJnZXQmJih0aGlzLnVubGlzdGVuKHRoaXMuX3RhcmdldCwibW91c2VlbnRlciIsInNob3ciKSx0aGlzLnVubGlzdGVuKHRoaXMuX3RhcmdldCwiZm9jdXMiLCJzaG93IiksdGhpcy51bmxpc3Rlbih0aGlzLl90YXJnZXQsIm1vdXNlbGVhdmUiLCJoaWRlIiksdGhpcy51bmxpc3Rlbih0aGlzLl90YXJnZXQsImJsdXIiLCJoaWRlIiksdGhpcy51bmxpc3Rlbih0aGlzLl90YXJnZXQsInRhcCIsImhpZGUiKSksdGhpcy51bmxpc3Rlbih0aGlzLiQudG9vbHRpcCwiYW5pbWF0aW9uZW5kIiwiX29uQW5pbWF0aW9uRW5kIiksdGhpcy51bmxpc3Rlbih0aGlzLCJtb3VzZWVudGVyIiwiaGlkZSIpfX0pO2NsYXNzIGhze2NvbnN0cnVjdG9yKHQpe3RoaXMubGlzdGVuZXI9dH19Y29uc3QgZHM9bmV3IFNldCxwcz1uZXcgU2V0O2Z1bmN0aW9uIGZzKHQpe2NvbnN0IGU9bmV3IGhzKHQpO3JldHVybiBkcy5hZGQoZSksZX1mdW5jdGlvbiBtcyh0KXtjb25zdCBlPW5ldyBocyh0KTtyZXR1cm4gcHMuYWRkKGUpLGV9ZnVuY3Rpb24gZ3MoKXtwcy5mb3JFYWNoKCh0PT50Lmxpc3RlbmVyKCkpKX1mdW5jdGlvbiBfcyh0KXtkcy5kZWxldGUodCl9ZnVuY3Rpb24geXModCl7cHMuZGVsZXRlKHQpfXdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIiwoKCk9Pntkcy5mb3JFYWNoKCh0PT50Lmxpc3RlbmVyKCkpKX0pKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigic3RvcmFnZSIsKCgpPT57cHMuZm9yRWFjaCgodD0+dC5saXN0ZW5lcigpKSl9KSk7bGV0IHZzPSExO2Z1bmN0aW9uIGJzKCl7cmV0dXJuIHZzfWxldCB4cz0iIjtmdW5jdGlvbiB3cyh0KXt4cz10fWZ1bmN0aW9uIFNzKCl7cmV0dXJuIHhzfXZhciBNcz1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxzZXRVc2VIYXNoOmZ1bmN0aW9uIEVzKHQpe3ZzPXR9LHVzZUhhc2g6YnMsc2V0RmFrZUhhc2g6d3MsZ2V0RmFrZUhhc2g6U3N9KTtsZXQgVHM9e307ZnVuY3Rpb24gQ3MoKXtyZXR1cm4gYnMoKT93aW5kb3cubG9jYXRpb24uaGFzaC5zbGljZSgxKTpTcygpfWZ1bmN0aW9uIEFzKHQpe2NvbnN0IGU9e307cmV0dXJuIHQuc3BsaXQoIiYiKS5mb3JFYWNoKCh0PT57Y29uc3Qgbj10LnNwbGl0KCI9Iik7MT09PW4ubGVuZ3RoP2UuX190YWJfXz1uWzBdOjI9PT1uLmxlbmd0aCYmKGVbZGVjb2RlVVJJQ29tcG9uZW50KG5bMF0pXT1kZWNvZGVVUklDb21wb25lbnQoblsxXSkpfSkpLGV9ZnVuY3Rpb24ga3ModCxlPSExKXtpZihicygpKWlmKGUpe2NvbnN0IGU9bmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7ZS5oYXNoPXQsd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKG51bGwsIiIsZS50b1N0cmluZygpKX1lbHNlIHdpbmRvdy5sb2NhdGlvbi5oYXNoPXQ7ZWxzZSB3cyh0KX1mdW5jdGlvbiBMcyh0KXtsZXQgZT0iIjt2b2lkIDAhPT10Ll9fdGFiX18mJihlKz10Ll9fdGFiX18pO2NvbnN0IG49T2JqZWN0LmtleXModCkubWFwKChlPT5bZSx0W2VdXSkpLmZpbHRlcigodD0+Il9fdGFiX18iIT09dFswXSkpLm1hcCgodD0+ZW5jb2RlVVJJQ29tcG9uZW50KHRbMF0pKyI9IitlbmNvZGVVUklDb21wb25lbnQodFsxXSkpKS5qb2luKCImIik7cmV0dXJuIG4ubGVuZ3RoPjA/ZSsiJiIrbjplfWZzKCgoKT0+e1RzPUFzKENzKCkpfSkpO2NvbnN0e2dldDpQcyxzZXQ6TnMsZ2V0SW5pdGlhbGl6ZXI6SXMsZ2V0T2JzZXJ2ZXI6T3MsZGlzcG9zZUJpbmRpbmc6UnN9PVpzKCh0PT50KSwodD0+dCkpLHtnZXQ6enMsc2V0OkRzLGdldEluaXRpYWxpemVyOkJzLGdldE9ic2VydmVyOkhzLGRpc3Bvc2VCaW5kaW5nOkZzfT1acygodD0+InRydWUiPT09dHx8ImZhbHNlIiE9PXQmJnZvaWQgMCksKHQ9PnQudG9TdHJpbmcoKSkpLHtnZXQ6VnMsc2V0OlVzLGdldEluaXRpYWxpemVyOmpzLGdldE9ic2VydmVyOkdzLGRpc3Bvc2VCaW5kaW5nOldzfT1acygodD0+K3QpLCh0PT50LnRvU3RyaW5nKCkpKSx7Z2V0OnFzLHNldDpZcyxnZXRJbml0aWFsaXplcjpYcyxnZXRPYnNlcnZlcjokcyxkaXNwb3NlQmluZGluZzpLc309WnMoKHQ9PkpTT04ucGFyc2UoYXRvYih0KSkpLCh0PT5idG9hKEpTT04uc3RyaW5naWZ5KHQpKSkpO2Z1bmN0aW9uIFpzKHQsZSl7Y29uc3Qgbj1bXSxpPVtdO2Z1bmN0aW9uIHIoZSxuPXt9KXtjb25zdHtkZWZhdWx0VmFsdWU6aSx1c2VMb2NhbFN0b3JhZ2U6cj0hMX09bixvPXI/d2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKGUpOkFzKENzKCkpW2VdO3JldHVybiBudWxsPT1vP3dlLmNsb25lRGVlcChpKTp0KG8pfWZ1bmN0aW9uIG8odCxuLGk9e30pe2NvbnN0e2RlZmF1bHRWYWx1ZTpvLHVzZUxvY2FsU3RvcmFnZTphPSExLHVzZUxvY2F0aW9uUmVwbGFjZTpzPSExfT1pLGw9ZShuKTtpZihhKXdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0LGwpLGdzKCk7ZWxzZSBpZighd2UuaXNFcXVhbChuLHIodCx7dXNlTG9jYWxTdG9yYWdlOmF9KSkpaWYod2UuaXNFcXVhbChuLG8pKSEoZnVuY3Rpb24gYyh0KXtjb25zdCBlPUFzKENzKCkpO2RlbGV0ZSBlW3RdLGtzKExzKGUpKX0pKHQpO2Vsc2V7Y29uc3QgZT1BcyhDcygpKTtlW3RdPWwsa3MoTHMoZSkscyl9fXJldHVybntnZXQ6cixzZXQ6byxnZXRJbml0aWFsaXplcjpmdW5jdGlvbiBhKHQsZSl7Y29uc3Qgbz1PYmplY3QuYXNzaWduKHtkZWZhdWx0VmFsdWU6ZS5kZWZhdWx0VmFsdWUscG9seW1lclByb3BlcnR5OnQsdXNlTG9jYWxTdG9yYWdlOiExfSxlKTtyZXR1cm4gZnVuY3Rpb24oKXtjb25zdCBlPUpzKHRoaXMsdCksYT0oKT0+e2NvbnN0IHQ9cihlLG8pO3dlLmlzRXF1YWwodCx0aGlzW28ucG9seW1lclByb3BlcnR5XSl8fCh0aGlzW28ucG9seW1lclByb3BlcnR5XT10KX0scz0oby51c2VMb2NhbFN0b3JhZ2U/bXM6ZnMpKCgoKT0+YSgpKSk7cmV0dXJuIG8udXNlTG9jYWxTdG9yYWdlP2kucHVzaChzKTpuLnB1c2gocyksYSgpLHRoaXNbby5wb2x5bWVyUHJvcGVydHldfX0sZ2V0T2JzZXJ2ZXI6ZnVuY3Rpb24gcyh0LGUpe2NvbnN0IG49T2JqZWN0LmFzc2lnbih7ZGVmYXVsdFZhbHVlOmUuZGVmYXVsdFZhbHVlLHBvbHltZXJQcm9wZXJ0eTp0LHVzZUxvY2FsU3RvcmFnZTohMX0sZSk7cmV0dXJuIGZ1bmN0aW9uKCl7byhKcyh0aGlzLHQpLHRoaXNbbi5wb2x5bWVyUHJvcGVydHldLG4pfX0sZGlzcG9zZUJpbmRpbmc6ZnVuY3Rpb24gbCgpe24uZm9yRWFjaCgodD0+X3ModCkpKSxpLmZvckVhY2goKHQ9PnlzKHQpKSl9fX1mdW5jdGlvbiBKcyh0LGUpe2NvbnN0IG49dC5kaXNhbWJpZ3VhdG9yO3JldHVybihudWxsPT1uP1tlXTpbbixlXSkuam9pbigiLiIpfWxldCBRcz1jbGFzcyBleHRlbmRzIHlle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl90YWdGaWx0ZXI9SXMoInRhZ0ZpbHRlciIse2RlZmF1bHRWYWx1ZToiIix1c2VMb2NhbFN0b3JhZ2U6ITEscG9seW1lclByb3BlcnR5OiJfdGFnRmlsdGVyIn0pLmNhbGwodGhpcyksdGhpcy5fdGFnRmlsdGVyT2JzZXJ2ZXI9T3MoInRhZ0ZpbHRlciIse2RlZmF1bHRWYWx1ZToiIix1c2VMb2NhbFN0b3JhZ2U6ITEscG9seW1lclByb3BlcnR5OiJfdGFnRmlsdGVyIn0pfV9jb21wdXRlVGFnRmlsdGVyKCl7cmV0dXJuIHRoaXMuX3RhZ0ZpbHRlcn19O2Z1bmN0aW9uIHRsKHQpe2NvbnN0e21vZHVsZU5hbWU6ZSxzdHlsZUNvbnRlbnQ6bn09dCxpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRvbS1tb2R1bGUiKSxyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIiksbz1bXTt0LnN0eWxlRGVwZW5kZW5jaWVzJiZ0LnN0eWxlRGVwZW5kZW5jaWVzLmZvckVhY2goKHQ9Pntjb25zdCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7ZS5zZXRBdHRyaWJ1dGUoImluY2x1ZGUiLHQpLG8ucHVzaChlKX0pKTtjb25zdCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7T2JqZWN0LmFzc2lnbihhLHt0ZXh0Q29udGVudDpufSksby5mb3JFYWNoKCh0PT57ci5jb250ZW50LmFwcGVuZENoaWxkKHQpfSkpLHIuY29udGVudC5hcHBlbmRDaGlsZChhKSxpLmFwcGVuZENoaWxkKHIpLGkucmVnaXN0ZXIoZSl9UXMudGVtcGxhdGU9X2VgCiAgICA8cGFwZXItaW5wdXQKICAgICAgbm8tbGFiZWwtZmxvYXQ9IiIKICAgICAgbGFiZWw9IkZpbHRlciB0YWdzIChyZWd1bGFyIGV4cHJlc3Npb25zIHN1cHBvcnRlZCkiCiAgICAgIHZhbHVlPSJ7e190YWdGaWx0ZXJ9fSIKICAgICAgY2xhc3M9InNlYXJjaC1pbnB1dCIKICAgID4KICAgICAgPGlyb24taWNvbiBwcmVmaXg9IiIgaWNvbj0ic2VhcmNoIiBzbG90PSJwcmVmaXgiPjwvaXJvbi1pY29uPgogICAgPC9wYXBlci1pbnB1dD4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIG1hcmdpbjogMTBweCA1cHggMTBweCAxMHB4OwogICAgICB9CiAgICA8L3N0eWxlPgogIGAsdChbbyh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwLGNvbXB1dGVkOiJfY29tcHV0ZVRhZ0ZpbHRlcihfdGFnRmlsdGVyKSJ9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sUXMucHJvdG90eXBlLCJ0YWdGaWx0ZXIiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmcsb2JzZXJ2ZXI6Il90YWdGaWx0ZXJPYnNlcnZlciJ9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sUXMucHJvdG90eXBlLCJfdGFnRmlsdGVyIix2b2lkIDApLFFzPXQoW2koInRmLXRhZy1maWx0ZXJlciIpXSxRcyksdGwoe21vZHVsZU5hbWU6ImRhc2hib2FyZC1zdHlsZSIsc3R5bGVEZXBlbmRlbmNpZXM6WyJpcm9uLWZsZXgiXSxzdHlsZUNvbnRlbnQ6IlxuICAgICAgOmhvc3Qge1xuICAgICAgICAtLXNpZGViYXItdmVydGljYWwtcGFkZGluZzogMTVweDtcbiAgICAgICAgLS1zaWRlYmFyLWxlZnQtcGFkZGluZzogMzBweDtcbiAgICAgIH1cblxuICAgICAgW3Nsb3Q9J3NpZGViYXInXSB7XG4gICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMHB4O1xuICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47XG4gICAgICAgIHBhZGRpbmc6IDVweCAwO1xuICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICAgIH1cblxuICAgICAgLnNldHRpbmdzIHtcbiAgICAgICAgbWluLWhlaWdodDogNTBweDtcbiAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuO1xuICAgICAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtO1xuICAgICAgfVxuXG4gICAgICAucnVucy1zZWxlY3RvciB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZ3JvdzogMTtcbiAgICAgICAgbWluLWhlaWdodDogMjAwcHg7XG4gICAgICB9XG5cbiAgICAgIHRmLXJ1bnMtc2VsZWN0b3Ige1xuICAgICAgICBmbGV4LWdyb3c6IDE7XG4gICAgICAgIGZsZXgtc2hyaW5rOiAxO1xuICAgICAgICBsZWZ0OiB2YXIoLS1zaWRlYmFyLWxlZnQtcGFkZGluZyk7XG4gICAgICAgIG1heC1oZWlnaHQ6IGNhbGMoMTAwJSAtIHZhcigtLXNpZGViYXItdmVydGljYWwtcGFkZGluZykgKiAyKTtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICByaWdodDogMDtcbiAgICAgIH1cblxuICAgICAgLnNlYXJjaC1pbnB1dCB7XG4gICAgICAgIG1hcmdpbjogMTBweCA1cHggMCAxMHB4O1xuICAgICAgfVxuXG4gICAgICAuc2lkZWJhci1zZWN0aW9uIHtcbiAgICAgICAgYm9yZGVyLXRvcDogc29saWQgMXB4IHZhcigtLXRiLXVpLWJvcmRlcik7XG4gICAgICAgIG1hcmdpbi1yaWdodDogMTBweDtcbiAgICAgICAgcGFkZGluZzogdmFyKC0tc2lkZWJhci12ZXJ0aWNhbC1wYWRkaW5nKSAwXG4gICAgICAgICAgdmFyKC0tc2lkZWJhci12ZXJ0aWNhbC1wYWRkaW5nKSB2YXIoLS1zaWRlYmFyLWxlZnQtcGFkZGluZyk7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIH1cblxuICAgICAgLnNpZGViYXItc2VjdGlvbjpmaXJzdC1vZi10eXBlIHtcbiAgICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgfVxuXG4gICAgICAuc2lkZWJhci1zZWN0aW9uIHBhcGVyLWJ1dHRvbiB7XG4gICAgICAgIG1hcmdpbjogNXB4O1xuICAgICAgfVxuXG4gICAgICAuc2lkZWJhci1zZWN0aW9uIHBhcGVyLWJ1dHRvbjpmaXJzdC1vZi10eXBlIHtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDtcbiAgICAgIH1cblxuICAgICAgLnNpZGViYXItc2VjdGlvbiBwYXBlci1idXR0b246bGFzdC1vZi10eXBlIHtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAwICFpbXBvcnRhbnQ7XG4gICAgICB9XG5cbiAgICAgIC5zaWRlYmFyLXNlY3Rpb24gPiA6Zmlyc3QtY2hpbGQge1xuICAgICAgICBtYXJnaW4tdG9wOiAwO1xuICAgICAgICBwYWRkaW5nLXRvcDogMDtcbiAgICAgIH1cblxuICAgICAgLnNpZGViYXItc2VjdGlvbiA+IDpsYXN0LWNoaWxkIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgICAgcGFkZGluZy1ib3R0b206IDA7XG4gICAgICB9XG5cbiAgICAgIC5zaWRlYmFyLXNlY3Rpb24gaDMge1xuICAgICAgICBjb2xvcjogdmFyKC0tdGItc2Vjb25kYXJ5LXRleHQtY29sb3IpO1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgICAgICBtYXJnaW46IDEwcHggMCA1cHg7XG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgfVxuXG4gICAgICBwYXBlci1jaGVja2JveCB7XG4gICAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvcjogdmFyKC0tdGItdWktZGFyay1hY2NlbnQpO1xuICAgICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tdGItdWktZGFyay1hY2NlbnQpO1xuICAgICAgICBmb250LXNpemU6IDE1cHg7XG4gICAgICAgIG1hcmdpbi10b3A6IDVweDtcbiAgICAgIH1cbiAgIn0pO2NvbnN0IGVsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7ZnVuY3Rpb24gbmwodCl7cmV0dXJuIGNsYXNzIGV4dGVuZHMgdHtjb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5fbWF5YmVTZXREYXJrTW9kZSgpLHRoaXMub2JzZXJ2ZXI9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoKHQ9Pnt0LnNvbWUoKHQ9PiJjbGFzcyI9PT10LmF0dHJpYnV0ZU5hbWUpKSYmdGhpcy5fbWF5YmVTZXREYXJrTW9kZSgpfSkpLHRoaXMub2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudC5ib2R5LHthdHRyaWJ1dGVzOiEwfSl9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXt2YXIgdDtzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLG51bGw9PT0odD10aGlzLm9ic2VydmVyKXx8dm9pZCAwPT09dHx8dC5kaXNjb25uZWN0KCl9X21heWJlU2V0RGFya01vZGUoKXt0aGlzLmNsYXNzTGlzdC50b2dnbGUoImRhcmstbW9kZSIsZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoImRhcmstbW9kZSIpKX19fWVsLnNldEF0dHJpYnV0ZSgiaXMiLCJjdXN0b20tc3R5bGUiKSxlbC50ZXh0Q29udGVudD0iXG4gIDpyb290IHtcbiAgICAtLXRiLW9yYW5nZS13ZWFrOiAjZmZhNzI2O1xuICAgIC0tdGItb3JhbmdlLXN0cm9uZzogI2Y1N2MwMDtcbiAgICAtLXRiLW9yYW5nZS1kYXJrOiAjZGM3MzIwO1xuICAgIC0tdGItZ3JleS1kYXJrZXI6ICNlMmUyZTI7XG4gICAgLS10Yi1ncmV5LWxpZ2h0ZXI6ICNmM2YzZjM7XG4gICAgLS10Yi11aS1kYXJrLWFjY2VudDogIzc1NzU3NTtcbiAgICAtLXRiLXVpLWxpZ2h0LWFjY2VudDogI2UwZTBlMDtcbiAgICAtLXRiLXVpLWJvcmRlcjogdmFyKC0tcGFwZXItZ3JleS0zMDApO1xuICAgIC0tdGItZ3JhcGgtZmFkZWQ6ICNlMGQ0YjM7XG4gICAgLS10Yi1zZWNvbmRhcnktdGV4dC1jb2xvcjogdmFyKC0tcGFwZXItZ3JleS04MDApO1xuICAgIC0tdGItcmFpc2VkLWJ1dHRvbi1zaGFkb3ctY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4yKTtcbiAgICAtLXByaW1hcnktYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgICAtLXNlY29uZGFyeS1iYWNrZ3JvdW5kLWNvbG9yOiAjZTllOWU5O1xuICAgIC0tdGItbGF5b3V0LWJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7XG4gIH1cblxuICA6cm9vdCAuZGFyay1tb2RlIHtcbiAgICAtLXRiLXVpLWJvcmRlcjogdmFyKC0tcGFwZXItZ3JleS03MDApO1xuICAgIC0tdGItdWktZGFyay1hY2NlbnQ6IHZhcigtLXBhcGVyLWdyZXktNDAwKTtcbiAgICAtLXRiLXVpLWxpZ2h0LWFjY2VudDogdmFyKC0tcGFwZXItZ3JleS02MDApO1xuICAgIC0tdGItc2Vjb25kYXJ5LXRleHQtY29sb3I6IHZhcigtLXBhcGVyLWdyZXktNDAwKTtcbiAgICAtLXRiLXJhaXNlZC1idXR0b24tc2hhZG93LWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7XG4gICAgLS1wcmltYXJ5LXRleHQtY29sb3I6ICNmZmY7XG4gICAgLS1zZWNvbmRhcnktdGV4dC1jb2xvcjogdmFyKC0tcGFwZXItZ3JleS00MDApO1xuICAgIC0tcHJpbWFyeS1iYWNrZ3JvdW5kLWNvbG9yOiAjMzAzMDMwOyAgLyogbWF0ZXJpYWwgZ3JleSBBNDAwLiAqL1xuICAgIC0tc2Vjb25kYXJ5LWJhY2tncm91bmQtY29sb3I6ICMzYTNhM2E7XG4gICAgLS10Yi1sYXlvdXQtYmFja2dyb3VuZC1jb2xvcjogIzNhM2EzYTtcbiAgICAvKiBPdmVycmlkZXMgcGFwZXItbWF0ZXJpYWwgKi9cbiAgICAtLXNoYWRvdy1lbGV2YXRpb24tMmRwXy1fYm94LXNoYWRvdzogMCAycHggMnB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE0KSxcbiAgICAgIDAgMXB4IDVweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMiksXG4gICAgICAwIDNweCAxcHggLTJweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7XG4gIH1cbiIsZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChlbCksdGwoe21vZHVsZU5hbWU6InNjcm9sbGJhci1zdHlsZSIsc3R5bGVDb250ZW50OiJcbiAgICAuc2Nyb2xsYmFyOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7XG4gICAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgfVxuXG4gICAgLnNjcm9sbGJhcjo6LXdlYmtpdC1zY3JvbGxiYXIge1xuICAgICAgd2lkdGg6IDEwcHg7XG4gICAgfVxuXG4gICAgLnNjcm9sbGJhcjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIge1xuICAgICAgYm9yZGVyLXJhZGl1czogMTBweDtcbiAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAwIDJweCByZ2JhKDAsIDAsIDAsIDAuMyk7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1ncmV5LTUwMCk7XG4gICAgICBjb2xvcjogdmFyKC0tcGFwZXItZ3JleS05MDApO1xuICAgIH1cbiAgICAuc2Nyb2xsYmFyIHtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgfVxuICAifSk7bGV0IGlsPWNsYXNzIGV4dGVuZHMobmwoeWUpKXt9O2lsLnRlbXBsYXRlPV9lYAogICAgPGRpdiBpZD0ic2lkZWJhciI+CiAgICAgIDxzbG90IG5hbWU9InNpZGViYXIiPjwvc2xvdD4KICAgIDwvZGl2PgoKICAgIDxkaXYgaWQ9ImNlbnRlciI+CiAgICAgIDxzbG90IG5hbWU9ImNlbnRlciIgY2xhc3M9InNjb2xsYmFyIj48L3Nsb3Q+CiAgICA8L2Rpdj4KICAgIDxzdHlsZSBpbmNsdWRlPSJzY3JvbGxiYXItc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KCiAgICAgIDpob3N0KC5kYXJrLW1vZGUpIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1zZWNvbmRhcnktYmFja2dyb3VuZC1jb2xvcik7CiAgICAgIH0KCiAgICAgICNzaWRlYmFyIHsKICAgICAgICBmbGV4OiAwIDAgdmFyKC0tdGYtZGFzaGJvYXJkLWxheW91dC1zaWRlYmFyLWJhc2lzLCAyNSUpOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBtYXgtd2lkdGg6IHZhcigtLXRmLWRhc2hib2FyZC1sYXlvdXQtc2lkZWJhci1tYXgtd2lkdGgsIDM1MHB4KTsKICAgICAgICBtaW4td2lkdGg6IHZhcigtLXRmLWRhc2hib2FyZC1sYXlvdXQtc2lkZWJhci1taW4td2lkdGgsIDI3MHB4KTsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICB9CgogICAgICAjY2VudGVyIHsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIDo6c2xvdHRlZChbc2xvdD0nY2VudGVyJ10pIHsKICAgICAgICBjb250YWluOiBzdHJpY3Q7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgIH0KCiAgICAgIC50Zi1ncmFwaC1kYXNoYm9hcmQgI2NlbnRlciB7CiAgICAgICAgYmFja2dyb3VuZDogI2ZmZjsKICAgICAgfQogICAgPC9zdHlsZT4KICBgLGlsPXQoW2koInRmLWRhc2hib2FyZC1sYXlvdXQiKV0saWwpO2NvbnN0IHJsPSJURi5UZW5zb3JCb2FyZC5QYWdpbmF0ZWRWaWV3LmxpbWl0IjtsZXQgb2w9bnVsbDtjb25zdCBhbD1uZXcgU2V0O2Z1bmN0aW9uIHNsKHQpe2FsLmFkZCh0KX1mdW5jdGlvbiBsbCh0KXthbC5kZWxldGUodCl9ZnVuY3Rpb24gY2woKXtyZXR1cm4gbnVsbD09b2wmJihvbD1WcyhybCx7dXNlTG9jYWxTdG9yYWdlOiEwfSksKG51bGw9PW9sfHwhaXNGaW5pdGUob2wpfHxvbDw9MCkmJihvbD0xMikpLG9sfWNsYXNzIHVsIGV4dGVuZHMgeWV7dXBkYXRlQXJyYXlQcm9wKHQsZSxuKXtsZXQgaT10aGlzLmdldCh0KTtjb25zdCByPWU7aWYoIUFycmF5LmlzQXJyYXkocikpdGhyb3cgUmFuZ2VFcnJvcihgRXhwZWN0ZWQgbmV3IHZhbHVlIHRvICcke3R9JyB0byBiZSBhbiBhcnJheS5gKTtBcnJheS5pc0FycmF5KGkpfHwoaT1bXSx0aGlzLnNldCh0LGkpKTtjb25zdCBvPW5ldyBTZXQoci5tYXAoKCh0LGUpPT5uKHQsZSkpKSk7bGV0IGE9MCxzPTA7Zm9yKDthPGkubGVuZ3RoJiZzPHIubGVuZ3RoOylvLmhhcyhuKGlbYV0sYSkpPyhuKGlbYV0sYSk9PW4ocltzXSxzKT90aGlzLnNldChgJHt0fS4ke2F9YCxyW3NdKTp0aGlzLnNwbGljZSh0LGEsMCxyW3NdKSxzKyssYSsrKTp0aGlzLnNwbGljZSh0LGEsMSk7YTxpLmxlbmd0aCYmdGhpcy5zcGxpY2UodCxhKSxzPHIubGVuZ3RoJiZ0aGlzLnB1c2godCwuLi5yLnNsaWNlKHMpKX19Y2xhc3MgaGwgZXh0ZW5kcyB1bHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5hcz0iaXRlbSIsdGhpcy5fY29udGVudEFjdGl2ZT0hMCx0aGlzLl9kb21Cb290c3RyYXBwZWQ9ITEsdGhpcy5fY3Rvcj1udWxsLHRoaXMuX3JlbmRlcmVkSXRlbXM9W10sdGhpcy5fcmVuZGVyZWRUZW1wbGF0ZUluc3Q9bmV3IE1hcCx0aGlzLl9scnVDYWNoZWRJdGVtcz1uZXcgTWFwLHRoaXMuX2NhY2hlU2l6ZT0xMCx0aGlzLl9nZXRJdGVtS2V5PXQ9PkpTT04uc3RyaW5naWZ5KHQpLHRoaXMuX2lzQ29ubmVjdGVkPSExfWNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLl9pc0Nvbm5lY3RlZD0hMH1zZXRDYWNoZVNpemUodCl7dGhpcy5fY2FjaGVTaXplPXR9c2V0R2V0SXRlbUtleSh0KXt0aGlzLl9nZXRJdGVtS2V5PXR9dXBkYXRlRG9tKHQpe3RoaXMudXBkYXRlQXJyYXlQcm9wKCJfcmVuZGVyZWRJdGVtcyIsdCx0aGlzLl9nZXRJdGVtS2V5KX1fZW5zdXJlVGVtcGxhdGl6ZWQoKXtpZighdGhpcy5pc0Nvbm5lY3RlZClyZXR1cm4hMTtpZighdGhpcy5fY3Rvcil7Y29uc3QgdD10aGlzLnF1ZXJ5U2VsZWN0b3IoInRlbXBsYXRlIik7dGhpcy5fY3Rvcj1Ycih0LHRoaXMse3BhcmVudE1vZGVsOiEwLGluc3RhbmNlUHJvcHM6e1t0aGlzLmFzXTohMCxhY3RpdmU6dGhpcy5fY29udGVudEFjdGl2ZX0sZm9yd2FyZEhvc3RQcm9wOmZ1bmN0aW9uKHQsZSl7dGhpcy5fcmVuZGVyZWRUZW1wbGF0ZUluc3QuZm9yRWFjaCgobj0+e24uZm9yd2FyZEhvc3RQcm9wKHQsZSl9KSl9fSl9cmV0dXJuITB9X2Jvb3RzdHJhcERvbSgpe3RoaXMuX2Vuc3VyZVRlbXBsYXRpemVkKCkmJiF0aGlzLl9kb21Cb290c3RyYXBwZWQmJihuZXcgTXV0YXRpb25PYnNlcnZlcigodD0+e2Zvcihjb25zdCBlIG9mIHQpaWYoImNoaWxkTGlzdCI9PT1lLnR5cGUpZm9yKGNvbnN0IHQgb2YgQXJyYXkuZnJvbShlLmFkZGVkTm9kZXMpKXQgaW5zdGFuY2VvZiBFbGVtZW50JiZ0LnNldEF0dHJpYnV0ZSgic2xvdCIsIml0ZW1zIil9KSkub2JzZXJ2ZSh0aGlzLHtjaGlsZExpc3Q6ITB9KSxBcnJheS5mcm9tKHRoaXMuY2hpbGRyZW4pLmZvckVhY2goKHQ9Pnt0aGlzLnJlbW92ZUNoaWxkKHQpfSkpLHRoaXMuX2xydUNhY2hlZEl0ZW1zLmNsZWFyKCksdGhpcy5fcmVuZGVyZWRJdGVtcy5mb3JFYWNoKCgodCxlKT0+dGhpcy5faW5zZXJ0SXRlbSh0LGUpKSksdGhpcy5fZG9tQm9vdHN0cmFwcGVkPSEwKX1fdXBkYXRlQWN0aXZlKCl7dGhpcy5fZG9tQm9vdHN0cmFwcGVkJiZBcnJheS5mcm9tKHRoaXMuX3JlbmRlcmVkVGVtcGxhdGVJbnN0LnZhbHVlcygpKS5mb3JFYWNoKCh0PT57dC5ub3RpZnlQYXRoKCJhY3RpdmUiLHRoaXMuX2NvbnRlbnRBY3RpdmUpfSkpfV91cGRhdGVEb20odCl7aWYodGhpcy5fZG9tQm9vdHN0cmFwcGVkJiYiX3JlbmRlcmVkSXRlbXMiIT10LnBhdGgmJiJfcmVuZGVyZWRJdGVtcy5sZW5ndGgiIT10LnBhdGgpaWYoIl9yZW5kZXJlZEl0ZW1zLnNwbGljZXMiPT09dC5wYXRoKXQudmFsdWUuaW5kZXhTcGxpY2VzLmZvckVhY2goKHQ9Pntjb25zdHtpbmRleDplLGFkZGVkQ291bnQ6bixvYmplY3Q6aSxyZW1vdmVkOnJ9PXQ7ci5mb3JFYWNoKCh0PT57dGhpcy5fcmVtb3ZlSXRlbSh0LHRoaXMuY2hpbGRyZW5bZV0pfSkpLGkuc2xpY2UoZSxlK24pLmZvckVhY2goKCh0LG4pPT50aGlzLl9pbnNlcnRJdGVtKHQsZStuKSkpLHRoaXMuX3RyaW1DYWNoZSgpfSkpO2Vsc2V7Y29uc3QgZT10aGlzLl9nZXRJdGVtS2V5KHQudmFsdWUpO3RoaXMuX3JlbmRlcmVkVGVtcGxhdGVJbnN0LmhhcyhlKT90aGlzLl9yZW5kZXJlZFRlbXBsYXRlSW5zdC5nZXQoZSkubm90aWZ5UGF0aCh0aGlzLmFzLHQudmFsdWUpOmNvbnNvbGUud2FybihgRXhwZWN0ZWQgJyR7ZX0nIHRvIGV4aXN0IGluIHRoZSBET00gYnV0IGNvdWxkIG5vdCBmaW5kIG9uZS5gKX19X2luc2VydEl0ZW0odCxlKXtpZighdGhpcy5fZW5zdXJlVGVtcGxhdGl6ZWQoKSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIHRlbXBsYXRpemVkIGJlZm9yZSBpbnNlcnRpbmcgYW4gaXRlbSIpO2xldCBuO2NvbnN0IGk9dGhpcy5fZ2V0SXRlbUtleSh0KTtpZih0aGlzLl9scnVDYWNoZWRJdGVtcy5oYXMoaSkpbj10aGlzLl9scnVDYWNoZWRJdGVtcy5nZXQoaSksdGhpcy5fbHJ1Q2FjaGVkSXRlbXMuZGVsZXRlKGkpLHRoaXMuX3JlbmRlcmVkVGVtcGxhdGVJbnN0LmdldChpKS5ub3RpZnlQYXRoKCJhY3RpdmUiLHRoaXMuX2NvbnRlbnRBY3RpdmUpO2Vsc2V7Y29uc3QgZT1uZXcgdGhpcy5fY3Rvcih7W3RoaXMuYXNdOnQsYWN0aXZlOnRoaXMuX2NvbnRlbnRBY3RpdmV9KTtuPWUucm9vdCx0aGlzLl9yZW5kZXJlZFRlbXBsYXRlSW5zdC5zZXQoaSxlKX10aGlzLmNoaWxkcmVuW2VdP3RoaXMuaW5zZXJ0QmVmb3JlKG4sdGhpcy5jaGlsZHJlbltlXSk6KChuLm5vZGVUeXBlPT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREU/QXJyYXkuZnJvbShuLmNoaWxkcmVuKTpbbl0pLmZvckVhY2goKHQ9PnQuc2V0QXR0cmlidXRlKCJzbG90IiwiaXRlbXMiKSkpLHRoaXMuYXBwZW5kQ2hpbGQobikpfV9yZW1vdmVJdGVtKHQsZSl7ZS5wYXJlbnROb2RlJiZlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZSk7Y29uc3Qgbj10aGlzLl9nZXRJdGVtS2V5KHQpO3RoaXMuX2xydUNhY2hlZEl0ZW1zLnNldChuLGUpLHRoaXMuX3JlbmRlcmVkVGVtcGxhdGVJbnN0LmdldChuKS5ub3RpZnlQYXRoKCJhY3RpdmUiLCExKX1fdHJpbUNhY2hlKCl7Zm9yKDt0aGlzLl9scnVDYWNoZWRJdGVtcy5zaXplPnRoaXMuX2NhY2hlU2l6ZTspe2NvbnN0W3RdPXRoaXMuX2xydUNhY2hlZEl0ZW1zLmtleXMoKTt0aGlzLl9scnVDYWNoZWRJdGVtcy5kZWxldGUodCksdGhpcy5fcmVuZGVyZWRUZW1wbGF0ZUluc3QuZGVsZXRlKHQpfX19dChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0saGwucHJvdG90eXBlLCJhcyIsdm9pZCAwKSx0KFtvKHt0eXBlOkFycmF5fSksZSgiZGVzaWduOnR5cGUiLEFycmF5KV0saGwucHJvdG90eXBlLCJpdGVtcyIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGhsLnByb3RvdHlwZSwiX2NvbnRlbnRBY3RpdmUiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLGhsLnByb3RvdHlwZSwiX2RvbUJvb3RzdHJhcHBlZCIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxobC5wcm90b3R5cGUsIl9jdG9yIix2b2lkIDApLHQoW28oe3R5cGU6QXJyYXl9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSxobC5wcm90b3R5cGUsIl9yZW5kZXJlZEl0ZW1zIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLGhsLnByb3RvdHlwZSwiX3JlbmRlcmVkVGVtcGxhdGVJbnN0Iix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLGhsLnByb3RvdHlwZSwiX2xydUNhY2hlZEl0ZW1zIix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyfSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLGhsLnByb3RvdHlwZSwiX2NhY2hlU2l6ZSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxobC5wcm90b3R5cGUsIl9nZXRJdGVtS2V5Iix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxobC5wcm90b3R5cGUsIl9pc0Nvbm5lY3RlZCIsdm9pZCAwKSx0KFthKCJfaXNDb25uZWN0ZWQiKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLGhsLnByb3RvdHlwZSwiX2Jvb3RzdHJhcERvbSIsbnVsbCksdChbYSgiX2NvbnRlbnRBY3RpdmUiKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLGhsLnByb3RvdHlwZSwiX3VwZGF0ZUFjdGl2ZSIsbnVsbCksdChbYSgiX3JlbmRlcmVkSXRlbXMuKiIsIl9kb21Cb290c3RyYXBwZWQiKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbT2JqZWN0XSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLGhsLnByb3RvdHlwZSwiX3VwZGF0ZURvbSIsbnVsbCksdChbYSgiX2NhY2hlU2l6ZSIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0saGwucHJvdG90eXBlLCJfdHJpbUNhY2hlIixudWxsKTtsZXQgZGw9Y2xhc3MgZXh0ZW5kcyBobHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5kaXNhYmxlUGFnaW5hdGlvbj0hMSx0aGlzLmdldENhdGVnb3J5SXRlbUtleT10PT5KU09OLnN0cmluZ2lmeSh0KSx0aGlzLl9saW1pdD0xMix0aGlzLl9hY3RpdmVJbmRleD0wLHRoaXMuX3BhZ2VJbnB1dFJhd1ZhbHVlPSIiLHRoaXMuX3BhZ2VJbnB1dEZvY3VzZWQ9ITF9X2NvbXB1dGVDb3VudCgpe3JldHVybiB0aGlzLmNhdGVnb3J5Lml0ZW1zLmxlbmd0aH1nZXQgX2hhc011bHRpcGxlKCl7cmV0dXJuIHRoaXMuX2NvdW50PjF9X3RvZ2dsZVBhbmUoKXt0aGlzLm9wZW5lZD0hdGhpcy5vcGVuZWR9X2NoYW5nZUNvbnRlbnRBY3RpdmUodCl7dGhpcy5fY29udGVudEFjdGl2ZT10fV9vblBhbmVSZW5kZXJlZENoYW5nZWQodCxlKXt0JiZ0IT09ZSYmdGhpcy4kLmlmUmVuZGVyZWQucmVuZGVyKCl9X2NvbXB1dGVQYW5lUmVuZGVyZWQodCl7cmV0dXJuISh0Lm1ldGFkYXRhLnR5cGU9PT12ci5TRUFSQ0hfUkVTVUxUUyYmIiI9PT10Lm5hbWUpfWdldCBfaXRlbXNSZW5kZXJlZCgpe3JldHVybiB0aGlzLl9wYW5lUmVuZGVyZWQmJnRoaXMub3BlbmVkfV9jb21wdXRlSXNTZWFyY2hSZXN1bHRzKHQpe3JldHVybiB0PT09dnIuU0VBUkNIX1JFU1VMVFN9X2NvbXB1dGVJc0ludmFsaWRTZWFyY2hSZXN1bHRzKHQpe3JldHVybiB0LnR5cGU9PT12ci5TRUFSQ0hfUkVTVUxUUyYmIXQudmFsaWRSZWdleH1fY29tcHV0ZUlzVW5pdmVyc2FsU2VhcmNoUXVlcnkodCl7cmV0dXJuIHQudHlwZT09PXZyLlNFQVJDSF9SRVNVTFRTJiZ0LnVuaXZlcnNhbFJlZ2V4fV9pc0NvbXBvc2l0ZVNlYXJjaCgpe2NvbnN0e3R5cGU6dCxjb21wb3NpdGVTZWFyY2g6ZX09dGhpcy5jYXRlZ29yeS5tZXRhZGF0YTtyZXR1cm4gZSYmdD09PXZyLlNFQVJDSF9SRVNVTFRTfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLm9wZW5lZD1udWxsPT10aGlzLmluaXRpYWxPcGVuZWR8fHRoaXMuaW5pdGlhbE9wZW5lZCx0aGlzLl9saW1pdExpc3RlbmVyPSgpPT57dGhpcy5zZXQoIl9saW1pdCIsY2woKSl9LHNsKHRoaXMuX2xpbWl0TGlzdGVuZXIpLHRoaXMuX2xpbWl0TGlzdGVuZXIoKX1kZXRhY2hlZCgpe2xsKHRoaXMuX2xpbWl0TGlzdGVuZXIpfV91cGRhdGVSZW5kZXJlZEl0ZW1zKCl7dmFyIHQ9dGhpcy5fbGltaXQsZT10aGlzLmRpc2FibGVQYWdpbmF0aW9uO2lmKCF0aGlzLl9pdGVtc1JlbmRlcmVkKXJldHVybjtjb25zdCBuPU1hdGguZmxvb3IodGhpcy5fYWN0aXZlSW5kZXgvdCksaT10aGlzLmNhdGVnb3J5Lml0ZW1zfHxbXSxyPWU/aTppLnNsaWNlKG4qdCwobisxKSp0KTt0aGlzLnVwZGF0ZURvbShyKX1fbGltaXRDaGFuZ2VkKHQpe3RoaXMuc2V0Q2FjaGVTaXplKDIqdCl9X2dldENhdGVnb3J5SXRlbUtleUNoYW5nZWQoKXt0aGlzLnNldEdldEl0ZW1LZXkodGhpcy5nZXRDYXRlZ29yeUl0ZW1LZXkpfWdldCBfY3VycmVudFBhZ2UoKXtyZXR1cm4gTWF0aC5mbG9vcih0aGlzLl9hY3RpdmVJbmRleC90aGlzLl9saW1pdCkrMX1fY29tcHV0ZVBhZ2VDb3VudCh0LGUpe3JldHVybiB0aGlzLmNhdGVnb3J5P01hdGguY2VpbCh0aGlzLmNhdGVnb3J5Lml0ZW1zLmxlbmd0aC9lKTowfWdldCBfbXVsdGlwbGVQYWdlc0V4aXN0KCl7cmV0dXJuIXRoaXMuZGlzYWJsZVBhZ2luYXRpb24mJnRoaXMuX3BhZ2VDb3VudD4xfWdldCBfaGFzUHJldmlvdXNQYWdlKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnRQYWdlPjF9Z2V0IF9oYXNOZXh0UGFnZSgpe3JldHVybiB0aGlzLl9jdXJyZW50UGFnZTx0aGlzLl9wYWdlQ291bnR9X2NvbXB1dGVJbnB1dFdpZHRoKHQpe3JldHVybmBjYWxjKCR7dC50b1N0cmluZygpLmxlbmd0aH1lbSArIDIwcHgpYH1fc2V0QWN0aXZlSW5kZXgodCl7Y29uc3QgZT0odGhpcy5jYXRlZ29yeS5pdGVtc3x8W10pLmxlbmd0aC0xO3Q+ZSYmKHQ9ZSksdDwwJiYodD0wKSx0aGlzLnNldCgiX2FjdGl2ZUluZGV4Iix0KX1fY2xhbXBBY3RpdmVJbmRleCgpe3RoaXMuX3NldEFjdGl2ZUluZGV4KHRoaXMuX2FjdGl2ZUluZGV4KX1fcGVyZm9ybVByZXZpb3VzUGFnZSgpe3RoaXMuX3NldEFjdGl2ZUluZGV4KHRoaXMuX2FjdGl2ZUluZGV4LXRoaXMuX2xpbWl0KX1fcGVyZm9ybU5leHRQYWdlKCl7dGhpcy5fc2V0QWN0aXZlSW5kZXgodGhpcy5fYWN0aXZlSW5kZXgrdGhpcy5fbGltaXQpfV9jb21wdXRlUGFnZUlucHV0VmFsdWUodCxlLG4pe3JldHVybiB0P2U6bi50b1N0cmluZygpfV9oYW5kbGVQYWdlSW5wdXRFdmVudCh0KXt0aGlzLnNldCgiX3BhZ2VJbnB1dFJhd1ZhbHVlIix0LnRhcmdldC52YWx1ZSk7Y29uc3QgZT1OdW1iZXIodC50YXJnZXQudmFsdWV8fE5hTik7aWYoaXNOYU4oZSkpcmV0dXJuO2NvbnN0IG49TWF0aC5tYXgoMSxNYXRoLm1pbihlLHRoaXMuX3BhZ2VDb3VudCkpLTE7dGhpcy5fc2V0QWN0aXZlSW5kZXgodGhpcy5fbGltaXQqbil9X2hhbmRsZVBhZ2VDaGFuZ2VFdmVudCgpe3RoaXMuc2V0KCJfcGFnZUlucHV0UmF3VmFsdWUiLHRoaXMuX2N1cnJlbnRQYWdlLnRvU3RyaW5nKCkpfV9oYW5kbGVQYWdlRm9jdXNFdmVudCgpe3RoaXMuc2V0KCJfcGFnZUlucHV0UmF3VmFsdWUiLHRoaXMuX3BhZ2VJbnB1dFZhbHVlKSx0aGlzLnNldCgiX3BhZ2VJbnB1dEZvY3VzZWQiLCEwKX1faGFuZGxlUGFnZUJsdXJFdmVudCgpe3RoaXMuc2V0KCJfcGFnZUlucHV0Rm9jdXNlZCIsITEpfV91cGRhdGVQYWdlSW5wdXRWYWx1ZSh0KXtjb25zdCBlPXRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIjcGFnZS1pbnB1dCBpbnB1dCIpO2UmJihlLnZhbHVlPXQpfV91cGRhdGVJbnB1dFdpZHRoKCl7dGhpcy51cGRhdGVTdHlsZXMoeyItLXRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3LXBhZ2UtaW5wdXQtd2lkdGgiOnRoaXMuX2lucHV0V2lkdGh9KX19O2RsLnRlbXBsYXRlPV9lYAogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19wYW5lUmVuZGVyZWRdXSIgaWQ9ImlmUmVuZGVyZWQiPgogICAgICA8YnV0dG9uIGNsYXNzPSJoZWFkaW5nIiBvbi10YXA9Il90b2dnbGVQYW5lIiBvcGVuLWJ1dHRvbiQ9Iltbb3BlbmVkXV0iPgogICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNTZWFyY2hSZXN1bHRzXV0iPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzQ29tcG9zaXRlU2VhcmNoKGNhdGVnb3J5KV1dIj4KICAgICAgICAgICAgICA8c3Bhbj5UYWdzIG1hdGNoaW5nIG11bHRpcGxlIGV4cGVyaW1lbnRzPC9zcGFuPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNJbnZhbGlkU2VhcmNoUmVzdWx0c11dIj4KICAgICAgICAgICAgICAgIDxzcGFuCiAgICAgICAgICAgICAgICAgID4mbmJzcDs8c3Ryb25nPihtYWxmb3JtZWQgcmVndWxhciBleHByZXNzaW9uKTwvc3Ryb25nPjwvc3BhbgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2lzQ29tcG9zaXRlU2VhcmNoKGNhdGVnb3J5KV1dIj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGlnaHQiPlRhZ3MgbWF0Y2hpbmcgLzwvc3Bhbj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY2F0ZWdvcnktbmFtZSIgdGl0bGUkPSJbW2NhdGVnb3J5Lm5hbWVdXSIKICAgICAgICAgICAgICAgID5bW2NhdGVnb3J5Lm5hbWVdXTwvc3BhbgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGlnaHQiPi88L3NwYW4+CiAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1VuaXZlcnNhbFNlYXJjaFF1ZXJ5XV0iPgogICAgICAgICAgICAgICAgPHNwYW4+IChhbGwgdGFncyk8L3NwYW4+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzSW52YWxpZFNlYXJjaFJlc3VsdHNdXSI+CiAgICAgICAgICAgICAgICA8c3Bhbj4gPHN0cm9uZz4obWFsZm9ybWVkIHJlZ3VsYXIgZXhwcmVzc2lvbik8L3N0cm9uZz48L3NwYW4+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9pc1NlYXJjaFJlc3VsdHNdXSI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjYXRlZ29yeS1uYW1lIiB0aXRsZSQ9IltbY2F0ZWdvcnkubmFtZV1dIgogICAgICAgICAgICAgID5bW2NhdGVnb3J5Lm5hbWVdXTwvc3BhbgogICAgICAgICAgICA+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvc3Bhbj4KICAgICAgICA8c3BhbiBjbGFzcz0iY291bnQiPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNNdWx0aXBsZV1dIj4KICAgICAgICAgICAgPHNwYW4+W1tfY291bnRdXTwvc3Bhbj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8aXJvbi1pY29uIGljb249ImV4cGFuZC1tb3JlIiBjbGFzcz0iZXhwYW5kLWFycm93Ij48L2lyb24taWNvbj4KICAgICAgICA8L3NwYW4+CiAgICAgIDwvYnV0dG9uPgogICAgICA8IS0tIFRPRE8oc3RlcGhhbndsZWUpOiBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLiBGb3Igc29tZSByZWFzb24sCiAgICAgICAgdHJhbnNpdGlvbmVuZCB0aGF0IHRoZSBpcm9uLWNvbGxhcHNlIHJlbGllcyBvbiBzb21ldGltZXMgZG9lcyBub3QKICAgICAgICB0cmlnZ2VyIHdoZW4gcmVuZGVyaW5nIGEgY2hhcnQgd2l0aCBhIHNwaW5uZXIuIEEgdG95IGV4YW1wbGUgY2Fubm90CiAgICAgICAgcmVwcm9kdWNlIHRoaXMgYnVnLiAtLT4KICAgICAgPGlyb24tY29sbGFwc2Ugb3BlbmVkPSJbW29wZW5lZF1dIiBuby1hbmltYXRpb249IiI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29udGVudCI+CiAgICAgICAgICA8c3BhbiBpZD0idG9wLW9mLWNvbnRhaW5lciI+PC9zcGFuPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19tdWx0aXBsZVBhZ2VzRXhpc3RdXSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJpZy1wYWdlLWJ1dHRvbnMiIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAxMHB4OyI+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgICAgICAgb24tdGFwPSJfcGVyZm9ybVByZXZpb3VzUGFnZSIKICAgICAgICAgICAgICAgIGRpc2FibGVkJD0iW1shX2hhc1ByZXZpb3VzUGFnZV1dIgogICAgICAgICAgICAgICAgPlByZXZpb3VzIHBhZ2U8L3BhcGVyLWJ1dHRvbgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgICBvbi10YXA9Il9wZXJmb3JtTmV4dFBhZ2UiCiAgICAgICAgICAgICAgICBkaXNhYmxlZCQ9IltbIV9oYXNOZXh0UGFnZV1dIgogICAgICAgICAgICAgICAgPk5leHQgcGFnZTwvcGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CgogICAgICAgICAgPGRpdiBpZD0iaXRlbXMiPgogICAgICAgICAgICA8c2xvdCBuYW1lPSJpdGVtcyI+PC9zbG90PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX211bHRpcGxlUGFnZXNFeGlzdF1dIj4KICAgICAgICAgICAgPGRpdiBpZD0iY29udHJvbHMtY29udGFpbmVyIj4KICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHBhZGRpbmc6IDAgNXB4Ij4KICAgICAgICAgICAgICAgIFBhZ2UKICAgICAgICAgICAgICAgIDxwYXBlci1pbnB1dAogICAgICAgICAgICAgICAgICBpZD0icGFnZS1pbnB1dCIKICAgICAgICAgICAgICAgICAgdHlwZT0ibnVtYmVyIgogICAgICAgICAgICAgICAgICBuby1sYWJlbC1mbG9hdD0iIgogICAgICAgICAgICAgICAgICBtaW49IjEiCiAgICAgICAgICAgICAgICAgIG1heD0iW1tfcGFnZUNvdW50XV0iCiAgICAgICAgICAgICAgICAgIHZhbHVlPSJbW19wYWdlSW5wdXRWYWx1ZV1dIgogICAgICAgICAgICAgICAgICBvbi1pbnB1dD0iX2hhbmRsZVBhZ2VJbnB1dEV2ZW50IgogICAgICAgICAgICAgICAgICBvbi1jaGFuZ2U9Il9oYW5kbGVQYWdlQ2hhbmdlRXZlbnQiCiAgICAgICAgICAgICAgICAgIG9uLWZvY3VzPSJfaGFuZGxlUGFnZUZvY3VzRXZlbnQiCiAgICAgICAgICAgICAgICAgIG9uLWJsdXI9Il9oYW5kbGVQYWdlQmx1ckV2ZW50IgogICAgICAgICAgICAgICAgPjwvcGFwZXItaW5wdXQ+CiAgICAgICAgICAgICAgICBvZiBbW19wYWdlQ291bnRdXQogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJpZy1wYWdlLWJ1dHRvbnMiIHN0eWxlPSJtYXJnaW4tdG9wOiAxMHB4OyI+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgICAgICAgb24tdGFwPSJfcGVyZm9ybVByZXZpb3VzUGFnZSIKICAgICAgICAgICAgICAgIGRpc2FibGVkJD0iW1shX2hhc1ByZXZpb3VzUGFnZV1dIgogICAgICAgICAgICAgICAgPlByZXZpb3VzIHBhZ2U8L3BhcGVyLWJ1dHRvbgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgICBvbi10YXA9Il9wZXJmb3JtTmV4dFBhZ2UiCiAgICAgICAgICAgICAgICBkaXNhYmxlZCQ9IltbIV9oYXNOZXh0UGFnZV1dIgogICAgICAgICAgICAgICAgPk5leHQgcGFnZTwvcGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvaXJvbi1jb2xsYXBzZT4KICAgIDwvdGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBtYXJnaW46IDAgNXB4IDFweCAxMHB4OwogICAgICB9CgogICAgICA6aG9zdCg6Zmlyc3Qtb2YtdHlwZSkgewogICAgICAgIG1hcmdpbi10b3A6IDEwcHg7CiAgICAgIH0KCiAgICAgIDpob3N0KDpsYXN0LW9mLXR5cGUpIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4OwogICAgICB9CgogICAgICAuaGVhZGluZyB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcHJpbWFyeS1iYWNrZ3JvdW5kLWNvbG9yKTsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgY29sb3I6IGluaGVyaXQ7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGZvbnQtc2l6ZTogMTVweDsKICAgICAgICBsaW5lLWhlaWdodDogMTsKICAgICAgICBib3gtc2hhZG93OiAwIDFweCA1cHggdmFyKC0tdGItcmFpc2VkLWJ1dHRvbi1zaGFkb3ctY29sb3IpOwogICAgICAgIHBhZGRpbmc6IDEwcHggMTVweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICB9CgogICAgICAuaGVhZGluZzo6LW1vei1mb2N1cy1pbm5lciB7CiAgICAgICAgcGFkZGluZzogMTBweCAxNXB4OwogICAgICB9CgogICAgICBbb3Blbi1idXR0b25dIHsKICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwICFpbXBvcnRhbnQ7CiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDAgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgW29wZW4tYnV0dG9uXSAuZXhwYW5kLWFycm93IHsKICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZVooMTgwZGVnKTsKICAgICAgfQoKICAgICAgLm5hbWUgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5saWdodCB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWdyZXktNTAwKTsKICAgICAgfQoKICAgICAgLmNhdGVnb3J5LW5hbWUgewogICAgICAgIHdoaXRlLXNwYWNlOiBwcmU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICBwYWRkaW5nOiAycHggMDsKICAgICAgfQoKICAgICAgLmNvdW50IHsKICAgICAgICBtYXJnaW46IDAgNXB4OwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItZ3JleS01MDApOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBmbGV4OiBub25lOwogICAgICB9CgogICAgICAuaGVhZGluZzo6LW1vei1mb2N1cy1pbm5lciB7CiAgICAgICAgcGFkZGluZzogMTBweCAxNXB4OwogICAgICB9CgogICAgICAuY29udGVudCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXByaW1hcnktYmFja2dyb3VuZC1jb2xvcik7CiAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMnB4OwogICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAycHg7CiAgICAgICAgYm9yZGVyLXRvcDogbm9uZTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZGVkZWRlOwogICAgICAgIHBhZGRpbmc6IDE1cHg7CiAgICAgIH0KCiAgICAgIC5saWdodCB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWdyZXktNTAwKTsKICAgICAgfQoKICAgICAgI2NvbnRyb2xzLWNvbnRhaW5lciB7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgI2NvbnRyb2xzLWNvbnRhaW5lciBwYXBlci1idXR0b24gewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgfQoKICAgICAgLmJpZy1wYWdlLWJ1dHRvbnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KCiAgICAgIC5iaWctcGFnZS1idXR0b25zIHBhcGVyLWJ1dHRvbiB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tdGItdWktbGlnaHQtYWNjZW50KTsKICAgICAgICBjb2xvcjogdmFyKC0tdGItdWktZGFyay1hY2NlbnQpOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBmbGV4LWJhc2lzOiAwOwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgIH0KCiAgICAgIC5iaWctcGFnZS1idXR0b25zIHBhcGVyLWJ1dHRvbltkaXNhYmxlZF0gewogICAgICAgIGJhY2tncm91bmQ6IG5vbmU7CiAgICAgIH0KCiAgICAgIHNsb3QgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIH0KCiAgICAgIDo6c2xvdHRlZChbc2xvdD0naXRlbXMnXSkgewogICAgICAgIC8qIFRvb2x0aXAgZm9yIGRlc2NyaXB0aW9ucyBhbmQgb3RoZXJzIGJyZWFrIHdpdGggbW9yZSBzdHJpY3Qgb25lcy4gKi8KICAgICAgICBjb250YWluOiBzdHlsZTsKICAgICAgfQoKICAgICAgI3BhZ2UtaW5wdXQgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB3aWR0aDogdmFyKC0tdGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXctcGFnZS1pbnB1dC13aWR0aCwgMTAwJSk7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYCx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxkbC5wcm90b3R5cGUsImNhdGVnb3J5Iix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sZGwucHJvdG90eXBlLCJpbml0aWFsT3BlbmVkIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbixub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGRsLnByb3RvdHlwZSwib3BlbmVkIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sZGwucHJvdG90eXBlLCJkaXNhYmxlUGFnaW5hdGlvbiIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcixjb21wdXRlZDoiX2NvbXB1dGVDb3VudChjYXRlZ29yeS5pdGVtcy4qKSJ9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sZGwucHJvdG90eXBlLCJfY291bnQiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFuLGNvbXB1dGVkOiJfY29tcHV0ZVBhbmVSZW5kZXJlZChjYXRlZ29yeSkiLG9ic2VydmVyOiJfb25QYW5lUmVuZGVyZWRDaGFuZ2VkIn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sZGwucHJvdG90eXBlLCJfcGFuZVJlbmRlcmVkIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbixjb21wdXRlZDoiX2NvbXB1dGVJc1NlYXJjaFJlc3VsdHMoY2F0ZWdvcnkubWV0YWRhdGEudHlwZSkifSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxkbC5wcm90b3R5cGUsIl9pc1NlYXJjaFJlc3VsdHMiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFuLGNvbXB1dGVkOiJfY29tcHV0ZUlzSW52YWxpZFNlYXJjaFJlc3VsdHMoY2F0ZWdvcnkubWV0YWRhdGEpIn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sZGwucHJvdG90eXBlLCJfaXNJbnZhbGlkU2VhcmNoUmVzdWx0cyIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW4sY29tcHV0ZWQ6Il9jb21wdXRlSXNVbml2ZXJzYWxTZWFyY2hRdWVyeShjYXRlZ29yeS5tZXRhZGF0YSkifSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxkbC5wcm90b3R5cGUsIl9pc1VuaXZlcnNhbFNlYXJjaFF1ZXJ5Iix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0LG9ic2VydmVyOiJfZ2V0Q2F0ZWdvcnlJdGVtS2V5Q2hhbmdlZCJ9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZGwucHJvdG90eXBlLCJnZXRDYXRlZ29yeUl0ZW1LZXkiLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXIsb2JzZXJ2ZXI6Il9saW1pdENoYW5nZWQifSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLGRsLnByb3RvdHlwZSwiX2xpbWl0Iix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLGRsLnByb3RvdHlwZSwiX2FjdGl2ZUluZGV4Iix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyLGNvbXB1dGVkOiJfY29tcHV0ZVBhZ2VDb3VudChjYXRlZ29yeS5pdGVtcy4qLCBfbGltaXQpIn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxkbC5wcm90b3R5cGUsIl9wYWdlQ291bnQiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6Il9jb21wdXRlSW5wdXRXaWR0aChfcGFnZUNvdW50KSIsb2JzZXJ2ZXI6Il91cGRhdGVJbnB1dFdpZHRoIn0pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxkbC5wcm90b3R5cGUsIl9pbnB1dFdpZHRoIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfY29tcHV0ZVBhZ2VJbnB1dFZhbHVlKF9wYWdlSW5wdXRGb2N1c2VkLCBfcGFnZUlucHV0UmF3VmFsdWUsIF9jdXJyZW50UGFnZSkiLG9ic2VydmVyOiJfdXBkYXRlUGFnZUlucHV0VmFsdWUifSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLGRsLnByb3RvdHlwZSwiX3BhZ2VJbnB1dFZhbHVlIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLGRsLnByb3RvdHlwZSwiX3BhZ2VJbnB1dFJhd1ZhbHVlIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sZGwucHJvdG90eXBlLCJfcGFnZUlucHV0Rm9jdXNlZCIsdm9pZCAwKSx0KFtzKCJfY291bnQiKSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sZGwucHJvdG90eXBlLCJfaGFzTXVsdGlwbGUiLG51bGwpLHQoW2EoIm9wZW5lZCIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtCb29sZWFuXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLGRsLnByb3RvdHlwZSwiX2NoYW5nZUNvbnRlbnRBY3RpdmUiLG51bGwpLHQoW3MoIm9wZW5lZCIsIl9wYW5lUmVuZGVyZWQiKSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sZGwucHJvdG90eXBlLCJfaXRlbXNSZW5kZXJlZCIsbnVsbCksdChbYSgiX2l0ZW1zUmVuZGVyZWQiLCJjYXRlZ29yeS5pdGVtcy4qIiwiX2xpbWl0IiwiX2FjdGl2ZUluZGV4IiwiX3BhZ2VDb3VudCIsImRpc2FibGVQYWdpbmF0aW9uIiksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pLGUoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxkbC5wcm90b3R5cGUsIl91cGRhdGVSZW5kZXJlZEl0ZW1zIixudWxsKSx0KFtzKCJfbGltaXQiLCJfYWN0aXZlSW5kZXgiKSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbC5wcm90b3R5cGUsIl9jdXJyZW50UGFnZSIsbnVsbCksdChbcygiX3BhZ2VDb3VudCIsImRpc2FibGVQYWdpbmF0aW9uIiksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGRsLnByb3RvdHlwZSwiX211bHRpcGxlUGFnZXNFeGlzdCIsbnVsbCksdChbcygiX2N1cnJlbnRQYWdlIiksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGRsLnByb3RvdHlwZSwiX2hhc1ByZXZpb3VzUGFnZSIsbnVsbCksdChbcygiX2N1cnJlbnRQYWdlIiwiX3BhZ2VDb3VudCIpLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbC5wcm90b3R5cGUsIl9oYXNOZXh0UGFnZSIsbnVsbCksdChbYSgiY2F0ZWdvcnkuaXRlbXMuKiIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sZGwucHJvdG90eXBlLCJfY2xhbXBBY3RpdmVJbmRleCIsbnVsbCksZGw9dChbaSgidGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXciKV0sZGwpO2NsYXNzIHBse2NvbnN0cnVjdG9yKHQpe3RoaXMubGlzdGVuZXI9dH19Y2xhc3MgZmx7Y29uc3RydWN0b3IoKXt0aGlzLnJlcXVlc3RNYW5hZ2VyPW5ldyBocigxKSx0aGlzLl9saXN0ZW5lcnM9bmV3IFNldCx0aGlzLmluaXRpYWxpemVkPSExfXJlZnJlc2goKXtyZXR1cm4gdGhpcy5sb2FkKCkudGhlbigoKCk9Pnt0aGlzLmluaXRpYWxpemVkPSEwfSkpfWFkZExpc3RlbmVyKHQpe2NvbnN0IGU9bmV3IHBsKHQpO3JldHVybiB0aGlzLl9saXN0ZW5lcnMuYWRkKGUpLGV9cmVtb3ZlTGlzdGVuZXJCeUtleSh0KXt0aGlzLl9saXN0ZW5lcnMuZGVsZXRlKHQpfWVtaXRDaGFuZ2UoKXt0aGlzLl9saXN0ZW5lcnMuZm9yRWFjaCgodD0+e3RyeXt0Lmxpc3RlbmVyKCl9Y2F0Y2godCl7fX0pKX19Y2xhc3MgbWwgZXh0ZW5kcyBmbHtsb2FkKCl7Y29uc3QgdD1ncigpLmVudmlyb25tZW50KCk7cmV0dXJuIHRoaXMucmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKCh0PT57Y29uc3QgZT17ZGF0YUxvY2F0aW9uOnQuZGF0YV9sb2NhdGlvbix3aW5kb3dUaXRsZTp0LndpbmRvd190aXRsZX07dm9pZCAwIT09dC5leHBlcmltZW50X25hbWUmJihlLmV4cGVyaW1lbnROYW1lPXQuZXhwZXJpbWVudF9uYW1lKSx2b2lkIDAhPT10LmV4cGVyaW1lbnRfZGVzY3JpcHRpb24mJihlLmV4cGVyaW1lbnREZXNjcmlwdGlvbj10LmV4cGVyaW1lbnRfZGVzY3JpcHRpb24pLHZvaWQgMCE9PXQuY3JlYXRpb25fdGltZSYmKGUuY3JlYXRpb25UaW1lPXQuY3JlYXRpb25fdGltZSksd2UuaXNFcXVhbCh0aGlzLmVudmlyb25tZW50LGUpfHwodGhpcy5lbnZpcm9ubWVudD1lLHRoaXMuZW1pdENoYW5nZSgpKX0pKX1nZXREYXRhTG9jYXRpb24oKXtyZXR1cm4gdGhpcy5lbnZpcm9ubWVudD90aGlzLmVudmlyb25tZW50LmRhdGFMb2NhdGlvbjoiIn1nZXRXaW5kb3dUaXRsZSgpe3JldHVybiB0aGlzLmVudmlyb25tZW50P3RoaXMuZW52aXJvbm1lbnQud2luZG93VGl0bGU6IiJ9Z2V0RXhwZXJpbWVudE5hbWUoKXtyZXR1cm4gdGhpcy5lbnZpcm9ubWVudD90aGlzLmVudmlyb25tZW50LmV4cGVyaW1lbnROYW1lOiIifWdldEV4cGVyaW1lbnREZXNjcmlwdGlvbigpe3JldHVybiB0aGlzLmVudmlyb25tZW50P3RoaXMuZW52aXJvbm1lbnQuZXhwZXJpbWVudERlc2NyaXB0aW9uOiIifWdldENyZWF0aW9uVGltZSgpe3JldHVybiB0aGlzLmVudmlyb25tZW50P3RoaXMuZW52aXJvbm1lbnQuY3JlYXRpb25UaW1lOm51bGx9fWNvbnN0IGdsPW5ldyBtbDtjbGFzcyBfbCBleHRlbmRzIGZse2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9ydW5zPVtdfWxvYWQoKXtjb25zdCB0PWdyKCkucnVucygpO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbigodD0+e3dlLmlzRXF1YWwodGhpcy5fcnVucyx0KXx8KHRoaXMuX3J1bnM9dCx0aGlzLmVtaXRDaGFuZ2UoKSl9KSl9Z2V0UnVucygpe3JldHVybiB0aGlzLl9ydW5zLnNsaWNlKCl9fWNvbnN0IHlsPW5ldyBfbDtmdW5jdGlvbiB2bCh0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6dD49ZT8wOk5hTn1mdW5jdGlvbiBibCh0KXtyZXR1cm4gMT09PXQubGVuZ3RoJiYodD0oZnVuY3Rpb24gZSh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXtyZXR1cm4gdmwodChlKSxuKX19KSh0KSkse2xlZnQ6ZnVuY3Rpb24oZSxuLGkscil7Zm9yKG51bGw9PWkmJihpPTApLG51bGw9PXImJihyPWUubGVuZ3RoKTtpPHI7KXt2YXIgbz1pK3I+Pj4xO3QoZVtvXSxuKTwwP2k9bysxOnI9b31yZXR1cm4gaX0scmlnaHQ6ZnVuY3Rpb24oZSxuLGkscil7Zm9yKG51bGw9PWkmJihpPTApLG51bGw9PXImJihyPWUubGVuZ3RoKTtpPHI7KXt2YXIgbz1pK3I+Pj4xO3QoZVtvXSxuKT4wP3I9bzppPW8rMX1yZXR1cm4gaX19fXZhciB4bD1ibCh2bCksd2w9eGwucmlnaHQsU2w9eGwubGVmdDtmdW5jdGlvbiBNbCh0LGUpe3JldHVyblt0LGVdfWZ1bmN0aW9uIEVsKHQsZSxuKXt2YXIgaSxyLG8sYSxzPXQubGVuZ3RoLGw9ZS5sZW5ndGgsYz1uZXcgQXJyYXkocypsKTtmb3IobnVsbD09biYmKG49TWwpLGk9bz0wO2k8czsrK2kpZm9yKGE9dFtpXSxyPTA7cjxsOysrciwrK28pY1tvXT1uKGEsZVtyXSk7cmV0dXJuIGN9ZnVuY3Rpb24gVGwodCl7cmV0dXJuIG51bGw9PT10P05hTjordH1mdW5jdGlvbiBDbCh0LGUpe3ZhciBuLGkscj10Lmxlbmd0aCxvPTAsYT0tMSxzPTAsbD0wO2lmKG51bGw9PWUpZm9yKDsrK2E8cjspaXNOYU4obj1UbCh0W2FdKSl8fChsKz0oaT1uLXMpKihuLShzKz1pLysrbykpKTtlbHNlIGZvcig7KythPHI7KWlzTmFOKG49VGwoZSh0W2FdLGEsdCkpKXx8KGwrPShpPW4tcykqKG4tKHMrPWkvKytvKSkpO2lmKG8+MSlyZXR1cm4gbC8oby0xKX1mdW5jdGlvbiBBbCh0LGUpe3ZhciBuPUNsKHQsZSk7cmV0dXJuIG4/TWF0aC5zcXJ0KG4pOm59ZnVuY3Rpb24ga2wodCxlKXt2YXIgbixpLHIsbz10Lmxlbmd0aCxhPS0xO2lmKG51bGw9PWUpe2Zvcig7KythPG87KWlmKG51bGwhPShuPXRbYV0pJiZuPj1uKWZvcihpPXI9bjsrK2E8bzspbnVsbCE9KG49dFthXSkmJihpPm4mJihpPW4pLHI8biYmKHI9bikpfWVsc2UgZm9yKDsrK2E8bzspaWYobnVsbCE9KG49ZSh0W2FdLGEsdCkpJiZuPj1uKWZvcihpPXI9bjsrK2E8bzspbnVsbCE9KG49ZSh0W2FdLGEsdCkpJiYoaT5uJiYoaT1uKSxyPG4mJihyPW4pKTtyZXR1cm5baSxyXX12YXIgTGw9QXJyYXkucHJvdG90eXBlLFBsPUxsLnNsaWNlLE5sPUxsLm1hcDtmdW5jdGlvbiBJbCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gT2wodCl7cmV0dXJuIHR9ZnVuY3Rpb24gUmwodCxlLG4pe3Q9K3QsZT0rZSxuPShyPWFyZ3VtZW50cy5sZW5ndGgpPDI/KGU9dCx0PTAsMSk6cjwzPzE6K247Zm9yKHZhciBpPS0xLHI9MHxNYXRoLm1heCgwLE1hdGguY2VpbCgoZS10KS9uKSksbz1uZXcgQXJyYXkocik7KytpPHI7KW9baV09dCtpKm47cmV0dXJuIG99dmFyIHpsPU1hdGguc3FydCg1MCksRGw9TWF0aC5zcXJ0KDEwKSxCbD1NYXRoLnNxcnQoMik7ZnVuY3Rpb24gSGwodCxlLG4pe3ZhciBpLHIsbyxhLHM9LTE7aWYobj0rbiwodD0rdCk9PShlPStlKSYmbj4wKXJldHVyblt0XTtpZigoaT1lPHQpJiYocj10LHQ9ZSxlPXIpLDA9PT0oYT1GbCh0LGUsbikpfHwhaXNGaW5pdGUoYSkpcmV0dXJuW107aWYoYT4wKWZvcih0PU1hdGguY2VpbCh0L2EpLGU9TWF0aC5mbG9vcihlL2EpLG89bmV3IEFycmF5KHI9TWF0aC5jZWlsKGUtdCsxKSk7KytzPHI7KW9bc109KHQrcykqYTtlbHNlIGZvcih0PU1hdGguZmxvb3IodCphKSxlPU1hdGguY2VpbChlKmEpLG89bmV3IEFycmF5KHI9TWF0aC5jZWlsKHQtZSsxKSk7KytzPHI7KW9bc109KHQtcykvYTtyZXR1cm4gaSYmby5yZXZlcnNlKCksb31mdW5jdGlvbiBGbCh0LGUsbil7dmFyIGk9KGUtdCkvTWF0aC5tYXgoMCxuKSxyPU1hdGguZmxvb3IoTWF0aC5sb2coaSkvTWF0aC5MTjEwKSxvPWkvTWF0aC5wb3coMTAscik7cmV0dXJuIHI+PTA/KG8+PXpsPzEwOm8+PURsPzU6bz49Qmw/MjoxKSpNYXRoLnBvdygxMCxyKTotTWF0aC5wb3coMTAsLXIpLyhvPj16bD8xMDpvPj1EbD81Om8+PUJsPzI6MSl9ZnVuY3Rpb24gVmwodCxlLG4pe3ZhciBpPU1hdGguYWJzKGUtdCkvTWF0aC5tYXgoMCxuKSxyPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2coaSkvTWF0aC5MTjEwKSksbz1pL3I7cmV0dXJuIG8+PXpsP3IqPTEwOm8+PURsP3IqPTU6bz49QmwmJihyKj0yKSxlPHQ/LXI6cn1mdW5jdGlvbiBVbCh0KXtyZXR1cm4gTWF0aC5jZWlsKE1hdGgubG9nKHQubGVuZ3RoKS9NYXRoLkxOMikrMX1mdW5jdGlvbiBqbCh0LGUsbil7aWYobnVsbD09biYmKG49VGwpLGk9dC5sZW5ndGgpe2lmKChlPStlKTw9MHx8aTwyKXJldHVybituKHRbMF0sMCx0KTtpZihlPj0xKXJldHVybituKHRbaS0xXSxpLTEsdCk7dmFyIGkscj0oaS0xKSplLG89TWF0aC5mbG9vcihyKSxhPStuKHRbb10sbyx0KTtyZXR1cm4gYSsoK24odFtvKzFdLG8rMSx0KS1hKSooci1vKX19ZnVuY3Rpb24gR2wodCxlKXt2YXIgbixpLHI9dC5sZW5ndGgsbz0tMTtpZihudWxsPT1lKXtmb3IoOysrbzxyOylpZihudWxsIT0obj10W29dKSYmbj49bilmb3IoaT1uOysrbzxyOyludWxsIT0obj10W29dKSYmbj5pJiYoaT1uKX1lbHNlIGZvcig7KytvPHI7KWlmKG51bGwhPShuPWUodFtvXSxvLHQpKSYmbj49bilmb3IoaT1uOysrbzxyOyludWxsIT0obj1lKHRbb10sbyx0KSkmJm4+aSYmKGk9bik7cmV0dXJuIGl9ZnVuY3Rpb24gV2wodCl7Zm9yKHZhciBlLG4saSxyPXQubGVuZ3RoLG89LTEsYT0wOysrbzxyOylhKz10W29dLmxlbmd0aDtmb3Iobj1uZXcgQXJyYXkoYSk7LS1yPj0wOylmb3IoZT0oaT10W3JdKS5sZW5ndGg7LS1lPj0wOyluWy0tYV09aVtlXTtyZXR1cm4gbn1mdW5jdGlvbiBxbCh0LGUpe3ZhciBuLGkscj10Lmxlbmd0aCxvPS0xO2lmKG51bGw9PWUpe2Zvcig7KytvPHI7KWlmKG51bGwhPShuPXRbb10pJiZuPj1uKWZvcihpPW47KytvPHI7KW51bGwhPShuPXRbb10pJiZpPm4mJihpPW4pfWVsc2UgZm9yKDsrK288cjspaWYobnVsbCE9KG49ZSh0W29dLG8sdCkpJiZuPj1uKWZvcihpPW47KytvPHI7KW51bGwhPShuPWUodFtvXSxvLHQpKSYmaT5uJiYoaT1uKTtyZXR1cm4gaX1mdW5jdGlvbiBZbCh0KXtpZighKHI9dC5sZW5ndGgpKXJldHVybltdO2Zvcih2YXIgZT0tMSxuPXFsKHQsWGwpLGk9bmV3IEFycmF5KG4pOysrZTxuOylmb3IodmFyIHIsbz0tMSxhPWlbZV09bmV3IEFycmF5KHIpOysrbzxyOylhW29dPXRbb11bZV07cmV0dXJuIGl9ZnVuY3Rpb24gWGwodCl7cmV0dXJuIHQubGVuZ3RofXZhciAkbD1BcnJheS5wcm90b3R5cGUuc2xpY2U7ZnVuY3Rpb24gS2wodCl7cmV0dXJuIHR9dmFyIFpsPTFlLTY7ZnVuY3Rpb24gSmwodCl7cmV0dXJuInRyYW5zbGF0ZSgiKyh0Ky41KSsiLDApIn1mdW5jdGlvbiBRbCh0KXtyZXR1cm4idHJhbnNsYXRlKDAsIisodCsuNSkrIikifWZ1bmN0aW9uIHRjKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4rdChlKX19ZnVuY3Rpb24gZWModCl7dmFyIGU9TWF0aC5tYXgoMCx0LmJhbmR3aWR0aCgpLTEpLzI7cmV0dXJuIHQucm91bmQoKSYmKGU9TWF0aC5yb3VuZChlKSksZnVuY3Rpb24obil7cmV0dXJuK3QobikrZX19ZnVuY3Rpb24gbmMoKXtyZXR1cm4hdGhpcy5fX2F4aXN9ZnVuY3Rpb24gaWModCxlKXt2YXIgbj1bXSxpPW51bGwscj1udWxsLG89NixhPTYscz0zLGw9MT09PXR8fDQ9PT10Py0xOjEsYz00PT09dHx8Mj09PXQ/IngiOiJ5Iix1PTE9PT10fHwzPT09dD9KbDpRbDtmdW5jdGlvbiBoKGgpe3ZhciBkPW51bGw9PWk/ZS50aWNrcz9lLnRpY2tzLmFwcGx5KGUsbik6ZS5kb21haW4oKTppLHA9bnVsbD09cj9lLnRpY2tGb3JtYXQ/ZS50aWNrRm9ybWF0LmFwcGx5KGUsbik6S2w6cixmPU1hdGgubWF4KG8sMCkrcyxtPWUucmFuZ2UoKSxnPSttWzBdKy41LF89K21bbS5sZW5ndGgtMV0rLjUseT0oZS5iYW5kd2lkdGg/ZWM6dGMpKGUuY29weSgpKSx2PWguc2VsZWN0aW9uP2guc2VsZWN0aW9uKCk6aCxiPXYuc2VsZWN0QWxsKCIuZG9tYWluIikuZGF0YShbbnVsbF0pLHg9di5zZWxlY3RBbGwoIi50aWNrIikuZGF0YShkLGUpLm9yZGVyKCksdz14LmV4aXQoKSxTPXguZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInRpY2siKSxNPXguc2VsZWN0KCJsaW5lIiksRT14LnNlbGVjdCgidGV4dCIpO2I9Yi5tZXJnZShiLmVudGVyKCkuaW5zZXJ0KCJwYXRoIiwiLnRpY2siKS5hdHRyKCJjbGFzcyIsImRvbWFpbiIpLmF0dHIoInN0cm9rZSIsImN1cnJlbnRDb2xvciIpKSx4PXgubWVyZ2UoUyksTT1NLm1lcmdlKFMuYXBwZW5kKCJsaW5lIikuYXR0cigic3Ryb2tlIiwiY3VycmVudENvbG9yIikuYXR0cihjKyIyIixsKm8pKSxFPUUubWVyZ2UoUy5hcHBlbmQoInRleHQiKS5hdHRyKCJmaWxsIiwiY3VycmVudENvbG9yIikuYXR0cihjLGwqZikuYXR0cigiZHkiLDE9PT10PyIwZW0iOjM9PT10PyIwLjcxZW0iOiIwLjMyZW0iKSksaCE9PXYmJihiPWIudHJhbnNpdGlvbihoKSx4PXgudHJhbnNpdGlvbihoKSxNPU0udHJhbnNpdGlvbihoKSxFPUUudHJhbnNpdGlvbihoKSx3PXcudHJhbnNpdGlvbihoKS5hdHRyKCJvcGFjaXR5IixabCkuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuIGlzRmluaXRlKHQ9eSh0KSk/dSh0KTp0aGlzLmdldEF0dHJpYnV0ZSgidHJhbnNmb3JtIil9KSksUy5hdHRyKCJvcGFjaXR5IixabCkuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5wYXJlbnROb2RlLl9fYXhpcztyZXR1cm4gdShlJiZpc0Zpbml0ZShlPWUodCkpP2U6eSh0KSl9KSkpLHcucmVtb3ZlKCksYi5hdHRyKCJkIiw0PT09dHx8Mj09dD9hPyJNIitsKmErIiwiK2crIkgwLjVWIitfKyJIIitsKmE6Ik0wLjUsIitnKyJWIitfOmE/Ik0iK2crIiwiK2wqYSsiVjAuNUgiK18rIlYiK2wqYToiTSIrZysiLDAuNUgiK18pLHguYXR0cigib3BhY2l0eSIsMSkuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuIHUoeSh0KSl9KSksTS5hdHRyKGMrIjIiLGwqbyksRS5hdHRyKGMsbCpmKS50ZXh0KHApLHYuZmlsdGVyKG5jKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImZvbnQtc2l6ZSIsMTApLmF0dHIoImZvbnQtZmFtaWx5Iiwic2Fucy1zZXJpZiIpLmF0dHIoInRleHQtYW5jaG9yIiwyPT09dD8ic3RhcnQiOjQ9PT10PyJlbmQiOiJtaWRkbGUiKSx2LmVhY2goKGZ1bmN0aW9uKCl7dGhpcy5fX2F4aXM9eX0pKX1yZXR1cm4gaC5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LGgpOmV9LGgudGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gbj0kbC5jYWxsKGFyZ3VtZW50cyksaH0saC50aWNrQXJndW1lbnRzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW51bGw9PXQ/W106JGwuY2FsbCh0KSxoKTpuLnNsaWNlKCl9LGgudGlja1ZhbHVlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1udWxsPT10P251bGw6JGwuY2FsbCh0KSxoKTppJiZpLnNsaWNlKCl9LGgudGlja0Zvcm1hdD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LGgpOnJ9LGgudGlja1NpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89YT0rdCxoKTpvfSxoLnRpY2tTaXplSW5uZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89K3QsaCk6b30saC50aWNrU2l6ZU91dGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSt0LGgpOmF9LGgudGlja1BhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9K3QsaCk6c30saH1mdW5jdGlvbiByYyh0KXtyZXR1cm4gaWMoMyx0KX1mdW5jdGlvbiBvYyh0KXtyZXR1cm4gaWMoNCx0KX12YXIgYWM9e3ZhbHVlOmZ1bmN0aW9uKCl7fX07ZnVuY3Rpb24gc2MoKXtmb3IodmFyIHQsZT0wLG49YXJndW1lbnRzLmxlbmd0aCxpPXt9O2U8bjsrK2Upe2lmKCEodD1hcmd1bWVudHNbZV0rIiIpfHx0IGluIGl8fC9bXHMuXS8udGVzdCh0KSl0aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgdHlwZTogIit0KTtpW3RdPVtdfXJldHVybiBuZXcgbGMoaSl9ZnVuY3Rpb24gbGModCl7dGhpcy5fPXR9ZnVuY3Rpb24gY2ModCxlKXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLykubWFwKChmdW5jdGlvbih0KXt2YXIgbj0iIixpPXQuaW5kZXhPZigiLiIpO2lmKGk+PTAmJihuPXQuc2xpY2UoaSsxKSx0PXQuc2xpY2UoMCxpKSksdCYmIWUuaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7cmV0dXJue3R5cGU6dCxuYW1lOm59fSkpfWZ1bmN0aW9uIHVjKHQsZSl7Zm9yKHZhciBuLGk9MCxyPXQubGVuZ3RoO2k8cjsrK2kpaWYoKG49dFtpXSkubmFtZT09PWUpcmV0dXJuIG4udmFsdWV9ZnVuY3Rpb24gaGModCxlLG4pe2Zvcih2YXIgaT0wLHI9dC5sZW5ndGg7aTxyOysraSlpZih0W2ldLm5hbWU9PT1lKXt0W2ldPWFjLHQ9dC5zbGljZSgwLGkpLmNvbmNhdCh0LnNsaWNlKGkrMSkpO2JyZWFrfXJldHVybiBudWxsIT1uJiZ0LnB1c2goe25hbWU6ZSx2YWx1ZTpufSksdH1sYy5wcm90b3R5cGU9c2MucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpsYyxvbjpmdW5jdGlvbih0LGUpe3ZhciBuLGk9dGhpcy5fLHI9Y2ModCsiIixpKSxvPS0xLGE9ci5sZW5ndGg7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtpZihudWxsIT1lJiYiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrZSk7Zm9yKDsrK288YTspaWYobj0odD1yW29dKS50eXBlKWlbbl09aGMoaVtuXSx0Lm5hbWUsZSk7ZWxzZSBpZihudWxsPT1lKWZvcihuIGluIGkpaVtuXT1oYyhpW25dLHQubmFtZSxudWxsKTtyZXR1cm4gdGhpc31mb3IoOysrbzxhOylpZigobj0odD1yW29dKS50eXBlKSYmKG49dWMoaVtuXSx0Lm5hbWUpKSlyZXR1cm4gbn0sY29weTpmdW5jdGlvbigpe3ZhciB0PXt9LGU9dGhpcy5fO2Zvcih2YXIgbiBpbiBlKXRbbl09ZVtuXS5zbGljZSgpO3JldHVybiBuZXcgbGModCl9LGNhbGw6ZnVuY3Rpb24odCxlKXtpZigobj1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciBuLGkscj1uZXcgQXJyYXkobiksbz0wO288bjsrK28pcltvXT1hcmd1bWVudHNbbysyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO2ZvcihvPTAsbj0oaT10aGlzLl9bdF0pLmxlbmd0aDtvPG47KytvKWlbb10udmFsdWUuYXBwbHkoZSxyKX0sYXBwbHk6ZnVuY3Rpb24odCxlLG4pe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7Zm9yKHZhciBpPXRoaXMuX1t0XSxyPTAsbz1pLmxlbmd0aDtyPG87KytyKWlbcl0udmFsdWUuYXBwbHkoZSxuKX19O3ZhciBkYz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIscGM9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOmRjLHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIn07ZnVuY3Rpb24gZmModCl7dmFyIGU9dCs9IiIsbj1lLmluZGV4T2YoIjoiKTtyZXR1cm4gbj49MCYmInhtbG5zIiE9PShlPXQuc2xpY2UoMCxuKSkmJih0PXQuc2xpY2UobisxKSkscGMuaGFzT3duUHJvcGVydHkoZSk/e3NwYWNlOnBjW2VdLGxvY2FsOnR9OnR9ZnVuY3Rpb24gbWModCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vd25lckRvY3VtZW50LG49dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIG49PT1kYyYmZS5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09ZGM/ZS5jcmVhdGVFbGVtZW50KHQpOmUuY3JlYXRlRWxlbWVudE5TKG4sdCl9fWZ1bmN0aW9uIGdjKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHQuc3BhY2UsdC5sb2NhbCl9fWZ1bmN0aW9uIF9jKHQpe3ZhciBlPWZjKHQpO3JldHVybihlLmxvY2FsP2djOm1jKShlKX1mdW5jdGlvbiB5Yygpe31mdW5jdGlvbiB2Yyh0KXtyZXR1cm4gbnVsbD09dD95YzpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3IodCl9fWZ1bmN0aW9uIGJjKCl7cmV0dXJuW119ZnVuY3Rpb24geGModCl7cmV0dXJuIG51bGw9PXQ/YmM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKHQpfX1mdW5jdGlvbiB3Yyh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXRjaGVzKHQpfX1mdW5jdGlvbiBTYyh0KXtyZXR1cm4gbmV3IEFycmF5KHQubGVuZ3RoKX1mdW5jdGlvbiBNYyh0LGUpe3RoaXMub3duZXJEb2N1bWVudD10Lm93bmVyRG9jdW1lbnQsdGhpcy5uYW1lc3BhY2VVUkk9dC5uYW1lc3BhY2VVUkksdGhpcy5fbmV4dD1udWxsLHRoaXMuX3BhcmVudD10LHRoaXMuX19kYXRhX189ZX1mdW5jdGlvbiBFYyh0LGUsbixpLHIsbyl7Zm9yKHZhciBhLHM9MCxsPWUubGVuZ3RoLGM9by5sZW5ndGg7czxjOysrcykoYT1lW3NdKT8oYS5fX2RhdGFfXz1vW3NdLGlbc109YSk6bltzXT1uZXcgTWModCxvW3NdKTtmb3IoO3M8bDsrK3MpKGE9ZVtzXSkmJihyW3NdPWEpfWZ1bmN0aW9uIFRjKHQsZSxuLGkscixvLGEpe3ZhciBzLGwsYyx1PXt9LGg9ZS5sZW5ndGgsZD1vLmxlbmd0aCxwPW5ldyBBcnJheShoKTtmb3Iocz0wO3M8aDsrK3MpKGw9ZVtzXSkmJihwW3NdPWM9IiQiK2EuY2FsbChsLGwuX19kYXRhX18scyxlKSxjIGluIHU/cltzXT1sOnVbY109bCk7Zm9yKHM9MDtzPGQ7KytzKShsPXVbYz0iJCIrYS5jYWxsKHQsb1tzXSxzLG8pXSk/KGlbc109bCxsLl9fZGF0YV9fPW9bc10sdVtjXT1udWxsKTpuW3NdPW5ldyBNYyh0LG9bc10pO2ZvcihzPTA7czxoOysrcykobD1lW3NdKSYmdVtwW3NdXT09PWwmJihyW3NdPWwpfWZ1bmN0aW9uIENjKHQsZSl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTp0Pj1lPzA6TmFOfWZ1bmN0aW9uIEFjKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX1mdW5jdGlvbiBrYyh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCl9fWZ1bmN0aW9uIExjKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUodCxlKX19ZnVuY3Rpb24gUGModCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxlKX19ZnVuY3Rpb24gTmModCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1uP3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpOnRoaXMuc2V0QXR0cmlidXRlKHQsbil9fWZ1bmN0aW9uIEljKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09bj90aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCk6dGhpcy5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwsbil9fWZ1bmN0aW9uIE9jKHQpe3JldHVybiB0Lm93bmVyRG9jdW1lbnQmJnQub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8dC5kb2N1bWVudCYmdHx8dC5kZWZhdWx0Vmlld31mdW5jdGlvbiBSYyh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpfX1mdW5jdGlvbiB6Yyh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LGUsbil9fWZ1bmN0aW9uIERjKHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaT1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1pP3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCk6dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LGksbil9fWZ1bmN0aW9uIEJjKHQsZSl7cmV0dXJuIHQuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShlKXx8T2ModCkuZ2V0Q29tcHV0ZWRTdHlsZSh0LG51bGwpLmdldFByb3BlcnR5VmFsdWUoZSl9ZnVuY3Rpb24gSGModCl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbdF19fWZ1bmN0aW9uIEZjKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpc1t0XT1lfX1mdW5jdGlvbiBWYyh0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PW4/ZGVsZXRlIHRoaXNbdF06dGhpc1t0XT1ufX1mdW5jdGlvbiBVYyh0KXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLyl9ZnVuY3Rpb24gamModCl7cmV0dXJuIHQuY2xhc3NMaXN0fHxuZXcgR2ModCl9ZnVuY3Rpb24gR2ModCl7dGhpcy5fbm9kZT10LHRoaXMuX25hbWVzPVVjKHQuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9ZnVuY3Rpb24gV2ModCxlKXtmb3IodmFyIG49amModCksaT0tMSxyPWUubGVuZ3RoOysraTxyOyluLmFkZChlW2ldKX1mdW5jdGlvbiBxYyh0LGUpe2Zvcih2YXIgbj1qYyh0KSxpPS0xLHI9ZS5sZW5ndGg7KytpPHI7KW4ucmVtb3ZlKGVbaV0pfWZ1bmN0aW9uIFljKHQpe3JldHVybiBmdW5jdGlvbigpe1djKHRoaXMsdCl9fWZ1bmN0aW9uIFhjKHQpe3JldHVybiBmdW5jdGlvbigpe3FjKHRoaXMsdCl9fWZ1bmN0aW9uICRjKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7KGUuYXBwbHkodGhpcyxhcmd1bWVudHMpP1djOnFjKSh0aGlzLHQpfX1mdW5jdGlvbiBLYygpe3RoaXMudGV4dENvbnRlbnQ9IiJ9ZnVuY3Rpb24gWmModCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD10fX1mdW5jdGlvbiBKYyh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRDb250ZW50PW51bGw9PWU/IiI6ZX19ZnVuY3Rpb24gUWMoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiB0dSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD10fX1mdW5jdGlvbiBldSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmlubmVySFRNTD1udWxsPT1lPyIiOmV9fWZ1bmN0aW9uIG51KCl7dGhpcy5uZXh0U2libGluZyYmdGhpcy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMpfWZ1bmN0aW9uIGl1KCl7dGhpcy5wcmV2aW91c1NpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcyx0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gcnUoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBvdSgpe3ZhciB0PXRoaXMucGFyZW50Tm9kZTt0JiZ0LnJlbW92ZUNoaWxkKHRoaXMpfWZ1bmN0aW9uIGF1KCl7dmFyIHQ9dGhpcy5jbG9uZU5vZGUoITEpLGU9dGhpcy5wYXJlbnROb2RlO3JldHVybiBlP2UuaW5zZXJ0QmVmb3JlKHQsdGhpcy5uZXh0U2libGluZyk6dH1mdW5jdGlvbiBzdSgpe3ZhciB0PXRoaXMuY2xvbmVOb2RlKCEwKSxlPXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gZT9lLmluc2VydEJlZm9yZSh0LHRoaXMubmV4dFNpYmxpbmcpOnR9TWMucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpNYyxhcHBlbmRDaGlsZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZSh0LHRoaXMuX25leHQpfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZSh0LGUpfSxxdWVyeVNlbGVjdG9yOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3Rvcih0KX0scXVlcnlTZWxlY3RvckFsbDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwodCl9fSxHYy5wcm90b3R5cGU9e2FkZDpmdW5jdGlvbih0KXt0aGlzLl9uYW1lcy5pbmRleE9mKHQpPDAmJih0aGlzLl9uYW1lcy5wdXNoKHQpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LHJlbW92ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9uYW1lcy5pbmRleE9mKHQpO2U+PTAmJih0aGlzLl9uYW1lcy5zcGxpY2UoZSwxKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxjb250YWluczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZih0KT49MH19O3ZhciBsdT17fSxjdT1udWxsO2Z1bmN0aW9uIHV1KHQsZSxuKXtyZXR1cm4gdD1odSh0LGUsbiksZnVuY3Rpb24oZSl7dmFyIG49ZS5yZWxhdGVkVGFyZ2V0O24mJihuPT09dGhpc3x8OCZuLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHRoaXMpKXx8dC5jYWxsKHRoaXMsZSl9fWZ1bmN0aW9uIGh1KHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24oaSl7dmFyIHI9Y3U7Y3U9aTt0cnl7dC5jYWxsKHRoaXMsdGhpcy5fX2RhdGFfXyxlLG4pfWZpbmFsbHl7Y3U9cn19fWZ1bmN0aW9uIGR1KHQpe3JldHVybiB0LnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBlPSIiLG49dC5pbmRleE9mKCIuIik7cmV0dXJuIG4+PTAmJihlPXQuc2xpY2UobisxKSx0PXQuc2xpY2UoMCxuKSkse3R5cGU6dCxuYW1lOmV9fSkpfWZ1bmN0aW9uIHB1KHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMuX19vbjtpZihlKXtmb3IodmFyIG4saT0wLHI9LTEsbz1lLmxlbmd0aDtpPG87KytpKW49ZVtpXSx0LnR5cGUmJm4udHlwZSE9PXQudHlwZXx8bi5uYW1lIT09dC5uYW1lP2VbKytyXT1uOnRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihuLnR5cGUsbi5saXN0ZW5lcixuLmNhcHR1cmUpOysrcj9lLmxlbmd0aD1yOmRlbGV0ZSB0aGlzLl9fb259fX1mdW5jdGlvbiBmdSh0LGUsbil7dmFyIGk9bHUuaGFzT3duUHJvcGVydHkodC50eXBlKT91dTpodTtyZXR1cm4gZnVuY3Rpb24ocixvLGEpe3ZhciBzLGw9dGhpcy5fX29uLGM9aShlLG8sYSk7aWYobClmb3IodmFyIHU9MCxoPWwubGVuZ3RoO3U8aDsrK3UpaWYoKHM9bFt1XSkudHlwZT09PXQudHlwZSYmcy5uYW1lPT09dC5uYW1lKXJldHVybiB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIocy50eXBlLHMubGlzdGVuZXIscy5jYXB0dXJlKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIocy50eXBlLHMubGlzdGVuZXI9YyxzLmNhcHR1cmU9biksdm9pZChzLnZhbHVlPWUpO3RoaXMuYWRkRXZlbnRMaXN0ZW5lcih0LnR5cGUsYyxuKSxzPXt0eXBlOnQudHlwZSxuYW1lOnQubmFtZSx2YWx1ZTplLGxpc3RlbmVyOmMsY2FwdHVyZTpufSxsP2wucHVzaChzKTp0aGlzLl9fb249W3NdfX1mdW5jdGlvbiBtdSh0LGUsbixpKXt2YXIgcj1jdTt0LnNvdXJjZUV2ZW50PWN1LGN1PXQ7dHJ5e3JldHVybiBlLmFwcGx5KG4saSl9ZmluYWxseXtjdT1yfX1mdW5jdGlvbiBndSh0LGUsbil7dmFyIGk9T2ModCkscj1pLkN1c3RvbUV2ZW50OyJmdW5jdGlvbiI9PXR5cGVvZiByP3I9bmV3IHIoZSxuKToocj1pLmRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpLG4/KHIuaW5pdEV2ZW50KGUsbi5idWJibGVzLG4uY2FuY2VsYWJsZSksci5kZXRhaWw9bi5kZXRhaWwpOnIuaW5pdEV2ZW50KGUsITEsITEpKSx0LmRpc3BhdGNoRXZlbnQocil9ZnVuY3Rpb24gX3UodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZ3UodGhpcyx0LGUpfX1mdW5jdGlvbiB5dSh0LGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBndSh0aGlzLHQsZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX0idW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50JiYoIm9ubW91c2VlbnRlciJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnR8fChsdT17bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9KSk7dmFyIHZ1PVtudWxsXTtmdW5jdGlvbiBidSh0LGUpe3RoaXMuX2dyb3Vwcz10LHRoaXMuX3BhcmVudHM9ZX1mdW5jdGlvbiB4dSgpe3JldHVybiBuZXcgYnUoW1tkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXSx2dSl9ZnVuY3Rpb24gd3UodCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P25ldyBidShbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodCldXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IGJ1KFtbdF1dLHZ1KX1idS5wcm90b3R5cGU9eHUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpidSxzZWxlY3Q6ZnVuY3Rpb24gU3UodCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PXZjKHQpKTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49ZS5sZW5ndGgsaT1uZXcgQXJyYXkobikscj0wO3I8bjsrK3IpZm9yKHZhciBvLGEscz1lW3JdLGw9cy5sZW5ndGgsYz1pW3JdPW5ldyBBcnJheShsKSx1PTA7dTxsOysrdSkobz1zW3VdKSYmKGE9dC5jYWxsKG8sby5fX2RhdGFfXyx1LHMpKSYmKCJfX2RhdGFfXyJpbiBvJiYoYS5fX2RhdGFfXz1vLl9fZGF0YV9fKSxjW3VdPWEpO3JldHVybiBuZXcgYnUoaSx0aGlzLl9wYXJlbnRzKX0sc2VsZWN0QWxsOmZ1bmN0aW9uIE11KHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD14Yyh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLGk9W10scj1bXSxvPTA7bzxuOysrbylmb3IodmFyIGEscz1lW29dLGw9cy5sZW5ndGgsYz0wO2M8bDsrK2MpKGE9c1tjXSkmJihpLnB1c2godC5jYWxsKGEsYS5fX2RhdGFfXyxjLHMpKSxyLnB1c2goYSkpO3JldHVybiBuZXcgYnUoaSxyKX0sZmlsdGVyOmZ1bmN0aW9uIEV1KHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD13Yyh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLGk9bmV3IEFycmF5KG4pLHI9MDtyPG47KytyKWZvcih2YXIgbyxhPWVbcl0scz1hLmxlbmd0aCxsPWlbcl09W10sYz0wO2M8czsrK2MpKG89YVtjXSkmJnQuY2FsbChvLG8uX19kYXRhX18sYyxhKSYmbC5wdXNoKG8pO3JldHVybiBuZXcgYnUoaSx0aGlzLl9wYXJlbnRzKX0sZGF0YTpmdW5jdGlvbiBUdSh0LGUpe2lmKCF0KXJldHVybiBmPW5ldyBBcnJheSh0aGlzLnNpemUoKSksdT0tMSx0aGlzLmVhY2goKGZ1bmN0aW9uKHQpe2ZbKyt1XT10fSkpLGY7dmFyIG49ZT9UYzpFYyxpPXRoaXMuX3BhcmVudHMscj10aGlzLl9ncm91cHM7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PShmdW5jdGlvbiBvKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0pKHQpKTtmb3IodmFyIGE9ci5sZW5ndGgscz1uZXcgQXJyYXkoYSksbD1uZXcgQXJyYXkoYSksYz1uZXcgQXJyYXkoYSksdT0wO3U8YTsrK3Upe3ZhciBoPWlbdV0sZD1yW3VdLHA9ZC5sZW5ndGgsZj10LmNhbGwoaCxoJiZoLl9fZGF0YV9fLHUsaSksbT1mLmxlbmd0aCxnPWxbdV09bmV3IEFycmF5KG0pLF89c1t1XT1uZXcgQXJyYXkobSk7bihoLGQsZyxfLGNbdV09bmV3IEFycmF5KHApLGYsZSk7Zm9yKHZhciB5LHYsYj0wLHg9MDtiPG07KytiKWlmKHk9Z1tiXSl7Zm9yKGI+PXgmJih4PWIrMSk7ISh2PV9beF0pJiYrK3g8bTspO3kuX25leHQ9dnx8bnVsbH19cmV0dXJuKHM9bmV3IGJ1KHMsaSkpLl9lbnRlcj1sLHMuX2V4aXQ9YyxzfSxlbnRlcjpmdW5jdGlvbiBDdSgpe3JldHVybiBuZXcgYnUodGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAoU2MpLHRoaXMuX3BhcmVudHMpfSxleGl0OmZ1bmN0aW9uIEF1KCl7cmV0dXJuIG5ldyBidSh0aGlzLl9leGl0fHx0aGlzLl9ncm91cHMubWFwKFNjKSx0aGlzLl9wYXJlbnRzKX0sam9pbjpmdW5jdGlvbiBrdSh0LGUsbil7dmFyIGk9dGhpcy5lbnRlcigpLHI9dGhpcyxvPXRoaXMuZXhpdCgpO3JldHVybiBpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3QoaSk6aS5hcHBlbmQodCsiIiksbnVsbCE9ZSYmKHI9ZShyKSksbnVsbD09bj9vLnJlbW92ZSgpOm4obyksaSYmcj9pLm1lcmdlKHIpLm9yZGVyKCk6cn0sbWVyZ2U6ZnVuY3Rpb24gTHUodCl7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPXQuX2dyb3VwcyxpPWUubGVuZ3RoLHI9TWF0aC5taW4oaSxuLmxlbmd0aCksbz1uZXcgQXJyYXkoaSksYT0wO2E8cjsrK2EpZm9yKHZhciBzLGw9ZVthXSxjPW5bYV0sdT1sLmxlbmd0aCxoPW9bYV09bmV3IEFycmF5KHUpLGQ9MDtkPHU7KytkKShzPWxbZF18fGNbZF0pJiYoaFtkXT1zKTtmb3IoO2E8aTsrK2Epb1thXT1lW2FdO3JldHVybiBuZXcgYnUobyx0aGlzLl9wYXJlbnRzKX0sb3JkZXI6ZnVuY3Rpb24gUHUoKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9LTEsbj10Lmxlbmd0aDsrK2U8bjspZm9yKHZhciBpLHI9dFtlXSxvPXIubGVuZ3RoLTEsYT1yW29dOy0tbz49MDspKGk9cltvXSkmJihhJiY0XmkuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYSkmJmEucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoaSxhKSxhPWkpO3JldHVybiB0aGlzfSxzb3J0OmZ1bmN0aW9uIE51KHQpe2Z1bmN0aW9uIGUoZSxuKXtyZXR1cm4gZSYmbj90KGUuX19kYXRhX18sbi5fX2RhdGFfXyk6IWUtIW59dHx8KHQ9Q2MpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxyPW5ldyBBcnJheShpKSxvPTA7bzxpOysrbyl7Zm9yKHZhciBhLHM9bltvXSxsPXMubGVuZ3RoLGM9cltvXT1uZXcgQXJyYXkobCksdT0wO3U8bDsrK3UpKGE9c1t1XSkmJihjW3VdPWEpO2Muc29ydChlKX1yZXR1cm4gbmV3IGJ1KHIsdGhpcy5fcGFyZW50cykub3JkZXIoKX0sY2FsbDpmdW5jdGlvbiBJdSgpe3ZhciB0PWFyZ3VtZW50c1swXTtyZXR1cm4gYXJndW1lbnRzWzBdPXRoaXMsdC5hcHBseShudWxsLGFyZ3VtZW50cyksdGhpc30sbm9kZXM6ZnVuY3Rpb24gT3UoKXt2YXIgdD1uZXcgQXJyYXkodGhpcy5zaXplKCkpLGU9LTE7cmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oKXt0WysrZV09dGhpc30pKSx0fSxub2RlOmZ1bmN0aW9uIFJ1KCl7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPTAsbj10Lmxlbmd0aDtlPG47KytlKWZvcih2YXIgaT10W2VdLHI9MCxvPWkubGVuZ3RoO3I8bzsrK3Ipe3ZhciBhPWlbcl07aWYoYSlyZXR1cm4gYX1yZXR1cm4gbnVsbH0sc2l6ZTpmdW5jdGlvbiB6dSgpe3ZhciB0PTA7cmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oKXsrK3R9KSksdH0sZW1wdHk6ZnVuY3Rpb24gRHUoKXtyZXR1cm4hdGhpcy5ub2RlKCl9LGVhY2g6ZnVuY3Rpb24gQnUodCl7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPTAsaT1lLmxlbmd0aDtuPGk7KytuKWZvcih2YXIgcixvPWVbbl0sYT0wLHM9by5sZW5ndGg7YTxzOysrYSkocj1vW2FdKSYmdC5jYWxsKHIsci5fX2RhdGFfXyxhLG8pO3JldHVybiB0aGlzfSxhdHRyOmZ1bmN0aW9uIEh1KHQsZSl7dmFyIG49ZmModCk7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgaT10aGlzLm5vZGUoKTtyZXR1cm4gbi5sb2NhbD9pLmdldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCk6aS5nZXRBdHRyaWJ1dGUobil9cmV0dXJuIHRoaXMuZWFjaCgobnVsbD09ZT9uLmxvY2FsP2tjOkFjOiJmdW5jdGlvbiI9PXR5cGVvZiBlP24ubG9jYWw/SWM6TmM6bi5sb2NhbD9QYzpMYykobixlKSl9LHN0eWxlOmZ1bmN0aW9uIEZ1KHQsZSxuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgobnVsbD09ZT9SYzoiZnVuY3Rpb24iPT10eXBlb2YgZT9EYzp6YykodCxlLG51bGw9PW4/IiI6bikpOkJjKHRoaXMubm9kZSgpLHQpfSxwcm9wZXJ0eTpmdW5jdGlvbiBWdSh0LGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChudWxsPT1lP0hjOiJmdW5jdGlvbiI9PXR5cGVvZiBlP1ZjOkZjKSh0LGUpKTp0aGlzLm5vZGUoKVt0XX0sY2xhc3NlZDpmdW5jdGlvbiBVdSh0LGUpe3ZhciBuPVVjKHQrIiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBpPWpjKHRoaXMubm9kZSgpKSxyPS0xLG89bi5sZW5ndGg7KytyPG87KWlmKCFpLmNvbnRhaW5zKG5bcl0pKXJldHVybiExO3JldHVybiEwfXJldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBlPyRjOmU/WWM6WGMpKG4sZSkpfSx0ZXh0OmZ1bmN0aW9uIGp1KHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChudWxsPT10P0tjOigiZnVuY3Rpb24iPT10eXBlb2YgdD9KYzpaYykodCkpOnRoaXMubm9kZSgpLnRleHRDb250ZW50fSxodG1sOmZ1bmN0aW9uIEd1KHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChudWxsPT10P1FjOigiZnVuY3Rpb24iPT10eXBlb2YgdD9ldTp0dSkodCkpOnRoaXMubm9kZSgpLmlubmVySFRNTH0scmFpc2U6ZnVuY3Rpb24gV3UoKXtyZXR1cm4gdGhpcy5lYWNoKG51KX0sbG93ZXI6ZnVuY3Rpb24gcXUoKXtyZXR1cm4gdGhpcy5lYWNoKGl1KX0sYXBwZW5kOmZ1bmN0aW9uIFl1KHQpe3ZhciBlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6X2ModCk7cmV0dXJuIHRoaXMuc2VsZWN0KChmdW5jdGlvbigpe3JldHVybiB0aGlzLmFwcGVuZENoaWxkKGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0pKX0saW5zZXJ0OmZ1bmN0aW9uIFh1KHQsZSl7dmFyIG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpfYyh0KSxpPW51bGw9PWU/cnU6ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTp2YyhlKTtyZXR1cm4gdGhpcy5zZWxlY3QoKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKG4uYXBwbHkodGhpcyxhcmd1bWVudHMpLGkuYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxsKX0pKX0scmVtb3ZlOmZ1bmN0aW9uICR1KCl7cmV0dXJuIHRoaXMuZWFjaChvdSl9LGNsb25lOmZ1bmN0aW9uIEt1KHQpe3JldHVybiB0aGlzLnNlbGVjdCh0P3N1OmF1KX0sZGF0dW06ZnVuY3Rpb24gWnUodCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iLHQpOnRoaXMubm9kZSgpLl9fZGF0YV9ffSxvbjpmdW5jdGlvbiBKdSh0LGUsbil7dmFyIGkscixvPWR1KHQrIiIpLGE9by5sZW5ndGg7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtmb3Iocz1lP2Z1OnB1LG51bGw9PW4mJihuPSExKSxpPTA7aTxhOysraSl0aGlzLmVhY2gocyhvW2ldLGUsbikpO3JldHVybiB0aGlzfXZhciBzPXRoaXMubm9kZSgpLl9fb247aWYocylmb3IodmFyIGwsYz0wLHU9cy5sZW5ndGg7Yzx1OysrYylmb3IoaT0wLGw9c1tjXTtpPGE7KytpKWlmKChyPW9baV0pLnR5cGU9PT1sLnR5cGUmJnIubmFtZT09PWwubmFtZSlyZXR1cm4gbC52YWx1ZX0sZGlzcGF0Y2g6ZnVuY3Rpb24gUXUodCxlKXtyZXR1cm4gdGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgZT95dTpfdSkodCxlKSl9fTt2YXIgdGg9MDtmdW5jdGlvbiBlaCgpe3JldHVybiBuZXcgbmh9ZnVuY3Rpb24gbmgoKXt0aGlzLl89IkAiKygrK3RoKS50b1N0cmluZygzNil9ZnVuY3Rpb24gaWgoKXtmb3IodmFyIHQsZT1jdTt0PWUuc291cmNlRXZlbnQ7KWU9dDtyZXR1cm4gZX1mdW5jdGlvbiByaCh0LGUpe3ZhciBuPXQub3duZXJTVkdFbGVtZW50fHx0O2lmKG4uY3JlYXRlU1ZHUG9pbnQpe3ZhciBpPW4uY3JlYXRlU1ZHUG9pbnQoKTtyZXR1cm4gaS54PWUuY2xpZW50WCxpLnk9ZS5jbGllbnRZLFsoaT1pLm1hdHJpeFRyYW5zZm9ybSh0LmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSkpLngsaS55XX12YXIgcj10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybltlLmNsaWVudFgtci5sZWZ0LXQuY2xpZW50TGVmdCxlLmNsaWVudFktci50b3AtdC5jbGllbnRUb3BdfWZ1bmN0aW9uIG9oKHQpe3ZhciBlPWloKCk7cmV0dXJuIGUuY2hhbmdlZFRvdWNoZXMmJihlPWUuY2hhbmdlZFRvdWNoZXNbMF0pLHJoKHQsZSl9ZnVuY3Rpb24gYWgodCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P25ldyBidShbZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCh0KV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyBidShbbnVsbD09dD9bXTp0XSx2dSl9ZnVuY3Rpb24gc2godCxlLG4pe2FyZ3VtZW50cy5sZW5ndGg8MyYmKG49ZSxlPWloKCkuY2hhbmdlZFRvdWNoZXMpO2Zvcih2YXIgaSxyPTAsbz1lP2UubGVuZ3RoOjA7cjxvOysrcilpZigoaT1lW3JdKS5pZGVudGlmaWVyPT09bilyZXR1cm4gcmgodCxpKTtyZXR1cm4gbnVsbH1mdW5jdGlvbiBsaCgpe2N1LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIGNoKCl7Y3UucHJldmVudERlZmF1bHQoKSxjdS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiB1aCh0KXt2YXIgZT10LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxuPXd1KHQpLm9uKCJkcmFnc3RhcnQuZHJhZyIsY2gsITApOyJvbnNlbGVjdHN0YXJ0ImluIGU/bi5vbigic2VsZWN0c3RhcnQuZHJhZyIsY2gsITApOihlLl9fbm9zZWxlY3Q9ZS5zdHlsZS5Nb3pVc2VyU2VsZWN0LGUuc3R5bGUuTW96VXNlclNlbGVjdD0ibm9uZSIpfWZ1bmN0aW9uIGhoKHQsZSl7dmFyIG49dC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsaT13dSh0KS5vbigiZHJhZ3N0YXJ0LmRyYWciLG51bGwpO2UmJihpLm9uKCJjbGljay5kcmFnIixjaCwhMCksc2V0VGltZW91dCgoZnVuY3Rpb24oKXtpLm9uKCJjbGljay5kcmFnIixudWxsKX0pLDApKSwib25zZWxlY3RzdGFydCJpbiBuP2kub24oInNlbGVjdHN0YXJ0LmRyYWciLG51bGwpOihuLnN0eWxlLk1velVzZXJTZWxlY3Q9bi5fX25vc2VsZWN0LGRlbGV0ZSBuLl9fbm9zZWxlY3QpfWZ1bmN0aW9uIGRoKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBwaCh0LGUsbixpLHIsbyxhLHMsbCxjKXt0aGlzLnRhcmdldD10LHRoaXMudHlwZT1lLHRoaXMuc3ViamVjdD1uLHRoaXMuaWRlbnRpZmllcj1pLHRoaXMuYWN0aXZlPXIsdGhpcy54PW8sdGhpcy55PWEsdGhpcy5keD1zLHRoaXMuZHk9bCx0aGlzLl89Y31mdW5jdGlvbiBmaCgpe3JldHVybiFjdS5jdHJsS2V5JiYhY3UuYnV0dG9ufWZ1bmN0aW9uIG1oKCl7cmV0dXJuIHRoaXMucGFyZW50Tm9kZX1mdW5jdGlvbiBnaCh0KXtyZXR1cm4gbnVsbD09dD97eDpjdS54LHk6Y3UueX06dH1mdW5jdGlvbiBfaCgpe3JldHVybiBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHN8fCJvbnRvdWNoc3RhcnQiaW4gdGhpc31mdW5jdGlvbiB5aCgpe3ZhciB0LGUsbixpLHI9Zmgsbz1taCxhPWdoLHM9X2gsbD17fSxjPXNjKCJzdGFydCIsImRyYWciLCJlbmQiKSx1PTAsaD0wO2Z1bmN0aW9uIGQodCl7dC5vbigibW91c2Vkb3duLmRyYWciLHApLmZpbHRlcihzKS5vbigidG91Y2hzdGFydC5kcmFnIixnKS5vbigidG91Y2htb3ZlLmRyYWciLF8pLm9uKCJ0b3VjaGVuZC5kcmFnIHRvdWNoY2FuY2VsLmRyYWciLHkpLnN0eWxlKCJ0b3VjaC1hY3Rpb24iLCJub25lIikuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKX1mdW5jdGlvbiBwKCl7aWYoIWkmJnIuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgYT12KCJtb3VzZSIsby5hcHBseSh0aGlzLGFyZ3VtZW50cyksb2gsdGhpcyxhcmd1bWVudHMpO2EmJih3dShjdS52aWV3KS5vbigibW91c2Vtb3ZlLmRyYWciLGYsITApLm9uKCJtb3VzZXVwLmRyYWciLG0sITApLHVoKGN1LnZpZXcpLGxoKCksbj0hMSx0PWN1LmNsaWVudFgsZT1jdS5jbGllbnRZLGEoInN0YXJ0IikpfX1mdW5jdGlvbiBmKCl7aWYoY2goKSwhbil7dmFyIGk9Y3UuY2xpZW50WC10LHI9Y3UuY2xpZW50WS1lO249aSppK3Iqcj5ofWwubW91c2UoImRyYWciKX1mdW5jdGlvbiBtKCl7d3UoY3Uudmlldykub24oIm1vdXNlbW92ZS5kcmFnIG1vdXNldXAuZHJhZyIsbnVsbCksaGgoY3UudmlldyxuKSxjaCgpLGwubW91c2UoImVuZCIpfWZ1bmN0aW9uIGcoKXtpZihyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIHQsZSxuPWN1LmNoYW5nZWRUb3VjaGVzLGk9by5hcHBseSh0aGlzLGFyZ3VtZW50cyksYT1uLmxlbmd0aDtmb3IodD0wO3Q8YTsrK3QpKGU9dihuW3RdLmlkZW50aWZpZXIsaSxzaCx0aGlzLGFyZ3VtZW50cykpJiYobGgoKSxlKCJzdGFydCIpKX19ZnVuY3Rpb24gXygpe3ZhciB0LGUsbj1jdS5jaGFuZ2VkVG91Y2hlcyxpPW4ubGVuZ3RoO2Zvcih0PTA7dDxpOysrdCkoZT1sW25bdF0uaWRlbnRpZmllcl0pJiYoY2goKSxlKCJkcmFnIikpfWZ1bmN0aW9uIHkoKXt2YXIgdCxlLG49Y3UuY2hhbmdlZFRvdWNoZXMscj1uLmxlbmd0aDtmb3IoaSYmY2xlYXJUaW1lb3V0KGkpLGk9c2V0VGltZW91dCgoZnVuY3Rpb24oKXtpPW51bGx9KSw1MDApLHQ9MDt0PHI7Kyt0KShlPWxbblt0XS5pZGVudGlmaWVyXSkmJihsaCgpLGUoImVuZCIpKX1mdW5jdGlvbiB2KHQsZSxuLGkscil7dmFyIG8scyxoLHA9bihlLHQpLGY9Yy5jb3B5KCk7aWYobXUobmV3IHBoKGQsImJlZm9yZXN0YXJ0IixvLHQsdSxwWzBdLHBbMV0sMCwwLGYpLChmdW5jdGlvbigpe3JldHVybiBudWxsIT0oY3Uuc3ViamVjdD1vPWEuYXBwbHkoaSxyKSkmJihzPW8ueC1wWzBdfHwwLGg9by55LXBbMV18fDAsITApfSkpKXJldHVybiBmdW5jdGlvbiBhKGMpe3ZhciBtLGc9cDtzd2l0Y2goYyl7Y2FzZSJzdGFydCI6bFt0XT1hLG09dSsrO2JyZWFrO2Nhc2UiZW5kIjpkZWxldGUgbFt0XSwtLXU7Y2FzZSJkcmFnIjpwPW4oZSx0KSxtPXV9bXUobmV3IHBoKGQsYyxvLHQsbSxwWzBdK3MscFsxXStoLHBbMF0tZ1swXSxwWzFdLWdbMV0sZiksZi5hcHBseSxmLFtjLGkscl0pfX1yZXR1cm4gZC5maWx0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpkaCghIXQpLGQpOnJ9LGQuY29udGFpbmVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZGgodCksZCk6b30sZC5zdWJqZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZGgodCksZCk6YX0sZC50b3VjaGFibGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpkaCghIXQpLGQpOnN9LGQub249ZnVuY3Rpb24oKXt2YXIgdD1jLm9uLmFwcGx5KGMsYXJndW1lbnRzKTtyZXR1cm4gdD09PWM/ZDp0fSxkLmNsaWNrRGlzdGFuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9KHQ9K3QpKnQsZCk6TWF0aC5zcXJ0KGgpfSxkfWZ1bmN0aW9uIHZoKHQsZSxuKXt0LnByb3RvdHlwZT1lLnByb3RvdHlwZT1uLG4uY29uc3RydWN0b3I9dH1mdW5jdGlvbiBiaCh0LGUpe3ZhciBuPU9iamVjdC5jcmVhdGUodC5wcm90b3R5cGUpO2Zvcih2YXIgaSBpbiBlKW5baV09ZVtpXTtyZXR1cm4gbn1mdW5jdGlvbiB4aCgpe31uaC5wcm90b3R5cGU9ZWgucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpuaCxnZXQ6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuXzshKGUgaW4gdCk7KWlmKCEodD10LnBhcmVudE5vZGUpKXJldHVybjtyZXR1cm4gdFtlXX0sc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbdGhpcy5fXT1lfSxyZW1vdmU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuXyBpbiB0JiZkZWxldGUgdFt0aGlzLl9dfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fSxwaC5wcm90b3R5cGUub249ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl8ub24uYXBwbHkodGhpcy5fLGFyZ3VtZW50cyk7cmV0dXJuIHQ9PT10aGlzLl8/dGhpczp0fTt2YXIgd2g9LjcsU2g9MS93aCxNaD0iXFxzKihbKy1dP1xcZCspXFxzKiIsRWg9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pXFxzKiIsVGg9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pJVxccyoiLENoPS9eIyhbMC05YS1mXXszLDh9KSQvLEFoPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tNaCxNaCxNaF0rIlxcKSQiKSxraD1uZXcgUmVnRXhwKCJecmdiXFwoIitbVGgsVGgsVGhdKyJcXCkkIiksTGg9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tNaCxNaCxNaCxFaF0rIlxcKSQiKSxQaD1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW1RoLFRoLFRoLEVoXSsiXFwpJCIpLE5oPW5ldyBSZWdFeHAoIl5oc2xcXCgiK1tFaCxUaCxUaF0rIlxcKSQiKSxJaD1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrW0VoLFRoLFRoLEVoXSsiXFwpJCIpLE9oPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O2Z1bmN0aW9uIFJoKCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4KCl9ZnVuY3Rpb24gemgoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRSZ2IoKX1mdW5jdGlvbiBEaCh0KXt2YXIgZSxuO3JldHVybiB0PSh0KyIiKS50cmltKCkudG9Mb3dlckNhc2UoKSwoZT1DaC5leGVjKHQpKT8obj1lWzFdLmxlbmd0aCxlPXBhcnNlSW50KGVbMV0sMTYpLDY9PT1uP0JoKGUpOjM9PT1uP25ldyBVaChlPj44JjE1fGU+PjQmMjQwLGU+PjQmMTV8MjQwJmUsKDE1JmUpPDw0fDE1JmUsMSk6OD09PW4/SGgoZT4+MjQmMjU1LGU+PjE2JjI1NSxlPj44JjI1NSwoMjU1JmUpLzI1NSk6ND09PW4/SGgoZT4+MTImMTV8ZT4+OCYyNDAsZT4+OCYxNXxlPj40JjI0MCxlPj40JjE1fDI0MCZlLCgoMTUmZSk8PDR8MTUmZSkvMjU1KTpudWxsKTooZT1BaC5leGVjKHQpKT9uZXcgVWgoZVsxXSxlWzJdLGVbM10sMSk6KGU9a2guZXhlYyh0KSk/bmV3IFVoKDI1NSplWzFdLzEwMCwyNTUqZVsyXS8xMDAsMjU1KmVbM10vMTAwLDEpOihlPUxoLmV4ZWModCkpP0hoKGVbMV0sZVsyXSxlWzNdLGVbNF0pOihlPVBoLmV4ZWModCkpP0hoKDI1NSplWzFdLzEwMCwyNTUqZVsyXS8xMDAsMjU1KmVbM10vMTAwLGVbNF0pOihlPU5oLmV4ZWModCkpP3FoKGVbMV0sZVsyXS8xMDAsZVszXS8xMDAsMSk6KGU9SWguZXhlYyh0KSk/cWgoZVsxXSxlWzJdLzEwMCxlWzNdLzEwMCxlWzRdKTpPaC5oYXNPd25Qcm9wZXJ0eSh0KT9CaChPaFt0XSk6InRyYW5zcGFyZW50Ij09PXQ/bmV3IFVoKE5hTixOYU4sTmFOLDApOm51bGx9ZnVuY3Rpb24gQmgodCl7cmV0dXJuIG5ldyBVaCh0Pj4xNiYyNTUsdD4+OCYyNTUsMjU1JnQsMSl9ZnVuY3Rpb24gSGgodCxlLG4saSl7cmV0dXJuIGk8PTAmJih0PWU9bj1OYU4pLG5ldyBVaCh0LGUsbixpKX1mdW5jdGlvbiBGaCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIHhofHwodD1EaCh0KSksdD9uZXcgVWgoKHQ9dC5yZ2IoKSkucix0LmcsdC5iLHQub3BhY2l0eSk6bmV3IFVofWZ1bmN0aW9uIFZoKHQsZSxuLGkpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9GaCh0KTpuZXcgVWgodCxlLG4sbnVsbD09aT8xOmkpfWZ1bmN0aW9uIFVoKHQsZSxuLGkpe3RoaXMucj0rdCx0aGlzLmc9K2UsdGhpcy5iPStuLHRoaXMub3BhY2l0eT0raX1mdW5jdGlvbiBqaCgpe3JldHVybiIjIitXaCh0aGlzLnIpK1doKHRoaXMuZykrV2godGhpcy5iKX1mdW5jdGlvbiBHaCgpe3ZhciB0PXRoaXMub3BhY2l0eTtyZXR1cm4oMT09PSh0PWlzTmFOKHQpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLHQpKSk/InJnYigiOiJyZ2JhKCIpK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5yKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmcpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuYil8fDApKSsoMT09PXQ/IikiOiIsICIrdCsiKSIpfWZ1bmN0aW9uIFdoKHQpe3JldHVybigodD1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHQpfHwwKSkpPDE2PyIwIjoiIikrdC50b1N0cmluZygxNil9ZnVuY3Rpb24gcWgodCxlLG4saSl7cmV0dXJuIGk8PTA/dD1lPW49TmFOOm48PTB8fG4+PTE/dD1lPU5hTjplPD0wJiYodD1OYU4pLG5ldyAkaCh0LGUsbixpKX1mdW5jdGlvbiBZaCh0KXtpZih0IGluc3RhbmNlb2YgJGgpcmV0dXJuIG5ldyAkaCh0LmgsdC5zLHQubCx0Lm9wYWNpdHkpO2lmKHQgaW5zdGFuY2VvZiB4aHx8KHQ9RGgodCkpLCF0KXJldHVybiBuZXcgJGg7aWYodCBpbnN0YW5jZW9mICRoKXJldHVybiB0O3ZhciBlPSh0PXQucmdiKCkpLnIvMjU1LG49dC5nLzI1NSxpPXQuYi8yNTUscj1NYXRoLm1pbihlLG4saSksbz1NYXRoLm1heChlLG4saSksYT1OYU4scz1vLXIsbD0obytyKS8yO3JldHVybiBzPyhhPWU9PT1vPyhuLWkpL3MrNioobjxpKTpuPT09bz8oaS1lKS9zKzI6KGUtbikvcys0LHMvPWw8LjU/bytyOjItby1yLGEqPTYwKTpzPWw+MCYmbDwxPzA6YSxuZXcgJGgoYSxzLGwsdC5vcGFjaXR5KX1mdW5jdGlvbiBYaCh0LGUsbixpKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/WWgodCk6bmV3ICRoKHQsZSxuLG51bGw9PWk/MTppKX1mdW5jdGlvbiAkaCh0LGUsbixpKXt0aGlzLmg9K3QsdGhpcy5zPStlLHRoaXMubD0rbix0aGlzLm9wYWNpdHk9K2l9ZnVuY3Rpb24gS2godCxlLG4pe3JldHVybiAyNTUqKHQ8NjA/ZSsobi1lKSp0LzYwOnQ8MTgwP246dDwyNDA/ZSsobi1lKSooMjQwLXQpLzYwOmUpfXZoKHhoLERoLHtjb3B5OmZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsdCl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OlJoLGZvcm1hdEhleDpSaCxmb3JtYXRIc2w6ZnVuY3Rpb24gWmgoKXtyZXR1cm4gWWgodGhpcykuZm9ybWF0SHNsKCl9LGZvcm1hdFJnYjp6aCx0b1N0cmluZzp6aH0pLHZoKFVoLFZoLGJoKHhoLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P1NoOk1hdGgucG93KFNoLHQpLG5ldyBVaCh0aGlzLnIqdCx0aGlzLmcqdCx0aGlzLmIqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD93aDpNYXRoLnBvdyh3aCx0KSxuZXcgVWgodGhpcy5yKnQsdGhpcy5nKnQsdGhpcy5iKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuLS41PD10aGlzLnImJnRoaXMucjwyNTUuNSYmLS41PD10aGlzLmcmJnRoaXMuZzwyNTUuNSYmLS41PD10aGlzLmImJnRoaXMuYjwyNTUuNSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGhleDpqaCxmb3JtYXRIZXg6amgsZm9ybWF0UmdiOkdoLHRvU3RyaW5nOkdofSkpLHZoKCRoLFhoLGJoKHhoLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P1NoOk1hdGgucG93KFNoLHQpLG5ldyAkaCh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P3doOk1hdGgucG93KHdoLHQpLG5ldyAkaCh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PXRoaXMuaCUzNjArMzYwKih0aGlzLmg8MCksZT1pc05hTih0KXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxuPXRoaXMubCxpPW4rKG48LjU/bjoxLW4pKmUscj0yKm4taTtyZXR1cm4gbmV3IFVoKEtoKHQ+PTI0MD90LTI0MDp0KzEyMCxyLGkpLEtoKHQscixpKSxLaCh0PDEyMD90KzI0MDp0LTEyMCxyLGkpLHRoaXMub3BhY2l0eSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxmb3JtYXRIc2w6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wYWNpdHk7cmV0dXJuKDE9PT0odD1pc05hTih0KT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSkpPyJoc2woIjoiaHNsYSgiKSsodGhpcy5ofHwwKSsiLCAiKzEwMCoodGhpcy5zfHwwKSsiJSwgIisxMDAqKHRoaXMubHx8MCkrIiUiKygxPT09dD8iKSI6IiwgIit0KyIpIil9fSkpO3ZhciBKaD1NYXRoLlBJLzE4MCxRaD0xODAvTWF0aC5QSSx0ZD0uOTY0MjIsZWQ9LjgyNTIxLG5kPTQvMjksaWQ9Ni8yOSxyZD0zKmlkKmlkO2Z1bmN0aW9uIG9kKHQpe2lmKHQgaW5zdGFuY2VvZiBzZClyZXR1cm4gbmV3IHNkKHQubCx0LmEsdC5iLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIGZkKXJldHVybiBtZCh0KTt0IGluc3RhbmNlb2YgVWh8fCh0PUZoKHQpKTt2YXIgZSxuLGk9aGQodC5yKSxyPWhkKHQuZyksbz1oZCh0LmIpLGE9bGQoKC4yMjI1MDQ1KmkrLjcxNjg3ODYqcisuMDYwNjE2OSpvKS8xKTtyZXR1cm4gaT09PXImJnI9PT1vP2U9bj1hOihlPWxkKCguNDM2MDc0NyppKy4zODUwNjQ5KnIrLjE0MzA4MDQqbykvdGQpLG49bGQoKC4wMTM5MzIyKmkrLjA5NzEwNDUqcisuNzE0MTczMypvKS9lZCkpLG5ldyBzZCgxMTYqYS0xNiw1MDAqKGUtYSksMjAwKihhLW4pLHQub3BhY2l0eSl9ZnVuY3Rpb24gYWQodCxlLG4saSl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP29kKHQpOm5ldyBzZCh0LGUsbixudWxsPT1pPzE6aSl9ZnVuY3Rpb24gc2QodCxlLG4saSl7dGhpcy5sPSt0LHRoaXMuYT0rZSx0aGlzLmI9K24sdGhpcy5vcGFjaXR5PStpfWZ1bmN0aW9uIGxkKHQpe3JldHVybiB0Pi4wMDg4NTY0NTE2NzkwMzU2MzE/TWF0aC5wb3codCwxLzMpOnQvcmQrbmR9ZnVuY3Rpb24gY2QodCl7cmV0dXJuIHQ+aWQ/dCp0KnQ6cmQqKHQtbmQpfWZ1bmN0aW9uIHVkKHQpe3JldHVybiAyNTUqKHQ8PS4wMDMxMzA4PzEyLjkyKnQ6MS4wNTUqTWF0aC5wb3codCwxLzIuNCktLjA1NSl9ZnVuY3Rpb24gaGQodCl7cmV0dXJuKHQvPTI1NSk8PS4wNDA0NT90LzEyLjkyOk1hdGgucG93KCh0Ky4wNTUpLzEuMDU1LDIuNCl9ZnVuY3Rpb24gZGQodCl7aWYodCBpbnN0YW5jZW9mIGZkKXJldHVybiBuZXcgZmQodC5oLHQuYyx0LmwsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2Ygc2R8fCh0PW9kKHQpKSwwPT09dC5hJiYwPT09dC5iKXJldHVybiBuZXcgZmQoTmFOLDA8dC5sJiZ0Lmw8MTAwPzA6TmFOLHQubCx0Lm9wYWNpdHkpO3ZhciBlPU1hdGguYXRhbjIodC5iLHQuYSkqUWg7cmV0dXJuIG5ldyBmZChlPDA/ZSszNjA6ZSxNYXRoLnNxcnQodC5hKnQuYSt0LmIqdC5iKSx0LmwsdC5vcGFjaXR5KX1mdW5jdGlvbiBwZCh0LGUsbixpKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/ZGQodCk6bmV3IGZkKHQsZSxuLG51bGw9PWk/MTppKX1mdW5jdGlvbiBmZCh0LGUsbixpKXt0aGlzLmg9K3QsdGhpcy5jPStlLHRoaXMubD0rbix0aGlzLm9wYWNpdHk9K2l9ZnVuY3Rpb24gbWQodCl7aWYoaXNOYU4odC5oKSlyZXR1cm4gbmV3IHNkKHQubCwwLDAsdC5vcGFjaXR5KTt2YXIgZT10LmgqSmg7cmV0dXJuIG5ldyBzZCh0LmwsTWF0aC5jb3MoZSkqdC5jLE1hdGguc2luKGUpKnQuYyx0Lm9wYWNpdHkpfXZoKHNkLGFkLGJoKHhoLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IHNkKHRoaXMubCsxOCoobnVsbD09dD8xOnQpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgc2QodGhpcy5sLTE4KihudWxsPT10PzE6dCksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD0odGhpcy5sKzE2KS8xMTYsZT1pc05hTih0aGlzLmEpP3Q6dCt0aGlzLmEvNTAwLG49aXNOYU4odGhpcy5iKT90OnQtdGhpcy5iLzIwMDtyZXR1cm4gbmV3IFVoKHVkKDMuMTMzODU2MSooZT10ZCpjZChlKSktMS42MTY4NjY3Kih0PTEqY2QodCkpLS40OTA2MTQ2KihuPWVkKmNkKG4pKSksdWQoLS45Nzg3Njg0KmUrMS45MTYxNDE1KnQrLjAzMzQ1NCpuKSx1ZCguMDcxOTQ1MyplLS4yMjg5OTE0KnQrMS40MDUyNDI3Km4pLHRoaXMub3BhY2l0eSl9fSkpLHZoKGZkLHBkLGJoKHhoLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGZkKHRoaXMuaCx0aGlzLmMsdGhpcy5sKzE4KihudWxsPT10PzE6dCksdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZmQodGhpcy5oLHRoaXMuYyx0aGlzLmwtMTgqKG51bGw9PXQ/MTp0KSx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gbWQodGhpcykucmdiKCl9fSkpO3ZhciBnZD0tLjI5MjI3LF9kPS0uOTA2NDkseWQ9MS45NzI5NDtmdW5jdGlvbiB2ZCh0KXtpZih0IGluc3RhbmNlb2YgeGQpcmV0dXJuIG5ldyB4ZCh0LmgsdC5zLHQubCx0Lm9wYWNpdHkpO3QgaW5zdGFuY2VvZiBVaHx8KHQ9RmgodCkpO3ZhciBlPXQuZy8yNTUsbj10LmIvMjU1LGk9KC0uNjU1NzYzNjY2Nzk5OTk5OSpuK3Quci8yNTUqLTEuNzg4NDUwMzgwNi0zLjUxNzI5ODI0MzgqZSkvLTUuOTYxNTEyMjkxMixyPW4taSxvPSh5ZCooZS1pKS1nZCpyKS9fZCxhPU1hdGguc3FydChvKm8rcipyKS8oeWQqaSooMS1pKSkscz1hP01hdGguYXRhbjIobyxyKSpRaC0xMjA6TmFOO3JldHVybiBuZXcgeGQoczwwP3MrMzYwOnMsYSxpLHQub3BhY2l0eSl9ZnVuY3Rpb24gYmQodCxlLG4saSl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3ZkKHQpOm5ldyB4ZCh0LGUsbixudWxsPT1pPzE6aSl9ZnVuY3Rpb24geGQodCxlLG4saSl7dGhpcy5oPSt0LHRoaXMucz0rZSx0aGlzLmw9K24sdGhpcy5vcGFjaXR5PStpfWZ1bmN0aW9uIHdkKHQsZSxuLGkscil7dmFyIG89dCp0LGE9byp0O3JldHVybigoMS0zKnQrMypvLWEpKmUrKDQtNipvKzMqYSkqbisoMSszKnQrMypvLTMqYSkqaSthKnIpLzZ9ZnVuY3Rpb24gU2QodCl7dmFyIGU9dC5sZW5ndGgtMTtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGk9bjw9MD9uPTA6bj49MT8obj0xLGUtMSk6TWF0aC5mbG9vcihuKmUpLHI9dFtpXSxvPXRbaSsxXTtyZXR1cm4gd2QoKG4taS9lKSplLGk+MD90W2ktMV06MipyLW8scixvLGk8ZS0xP3RbaSsyXToyKm8tcil9fWZ1bmN0aW9uIE1kKHQpe3ZhciBlPXQubGVuZ3RoO3JldHVybiBmdW5jdGlvbihuKXt2YXIgaT1NYXRoLmZsb29yKCgobiU9MSk8MD8rK246bikqZSk7cmV0dXJuIHdkKChuLWkvZSkqZSx0WyhpK2UtMSklZV0sdFtpJWVdLHRbKGkrMSklZV0sdFsoaSsyKSVlXSl9fWZ1bmN0aW9uIEVkKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBUZCh0LGUpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdCtuKmV9fWZ1bmN0aW9uIENkKHQsZSl7dmFyIG49ZS10O3JldHVybiBuP1RkKHQsbj4xODB8fG48LTE4MD9uLTM2MCpNYXRoLnJvdW5kKG4vMzYwKTpuKTpFZChpc05hTih0KT9lOnQpfWZ1bmN0aW9uIEFkKHQsZSl7dmFyIG49ZS10O3JldHVybiBuP1RkKHQsbik6RWQoaXNOYU4odCk/ZTp0KX12aCh4ZCxiZCxiaCh4aCx7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD9TaDpNYXRoLnBvdyhTaCx0KSxuZXcgeGQodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD93aDpNYXRoLnBvdyh3aCx0KSxuZXcgeGQodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD1pc05hTih0aGlzLmgpPzA6KHRoaXMuaCsxMjApKkpoLGU9K3RoaXMubCxuPWlzTmFOKHRoaXMucyk/MDp0aGlzLnMqZSooMS1lKSxpPU1hdGguY29zKHQpLHI9TWF0aC5zaW4odCk7cmV0dXJuIG5ldyBVaCgyNTUqKGUrbiooLS4xNDg2MSppKzEuNzgyNzcqcikpLDI1NSooZStuKihnZCppK19kKnIpKSwyNTUqKGUrbiooeWQqaSkpLHRoaXMub3BhY2l0eSl9fSkpO3ZhciBrZD0oZnVuY3Rpb24gdChlKXt2YXIgbj0oZnVuY3Rpb24gaSh0KXtyZXR1cm4gMT09KHQ9K3QpP0FkOmZ1bmN0aW9uKGUsbil7cmV0dXJuIG4tZT8oZnVuY3Rpb24gaSh0LGUsbil7cmV0dXJuIHQ9TWF0aC5wb3codCxuKSxlPU1hdGgucG93KGUsbiktdCxuPTEvbixmdW5jdGlvbihpKXtyZXR1cm4gTWF0aC5wb3codCtpKmUsbil9fSkoZSxuLHQpOkVkKGlzTmFOKGUpP246ZSl9fSkoZSk7ZnVuY3Rpb24gcih0LGUpe3ZhciBpPW4oKHQ9VmgodCkpLnIsKGU9VmgoZSkpLnIpLHI9bih0LmcsZS5nKSxvPW4odC5iLGUuYiksYT1BZCh0Lm9wYWNpdHksZS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQucj1pKGUpLHQuZz1yKGUpLHQuYj1vKGUpLHQub3BhY2l0eT1hKGUpLHQrIiJ9fXJldHVybiByLmdhbW1hPXQscn0pKDEpO2Z1bmN0aW9uIExkKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgbixpLHI9ZS5sZW5ndGgsbz1uZXcgQXJyYXkociksYT1uZXcgQXJyYXkocikscz1uZXcgQXJyYXkocik7Zm9yKG49MDtuPHI7KytuKWk9VmgoZVtuXSksb1tuXT1pLnJ8fDAsYVtuXT1pLmd8fDAsc1tuXT1pLmJ8fDA7cmV0dXJuIG89dChvKSxhPXQoYSkscz10KHMpLGkub3BhY2l0eT0xLGZ1bmN0aW9uKHQpe3JldHVybiBpLnI9byh0KSxpLmc9YSh0KSxpLmI9cyh0KSxpKyIifX19dmFyIFBkPUxkKFNkKSxOZD1MZChNZCk7ZnVuY3Rpb24gSWQodCxlKXtlfHwoZT1bXSk7dmFyIG4saT10P01hdGgubWluKGUubGVuZ3RoLHQubGVuZ3RoKTowLHI9ZS5zbGljZSgpO3JldHVybiBmdW5jdGlvbihvKXtmb3Iobj0wO248aTsrK24pcltuXT10W25dKigxLW8pK2Vbbl0qbztyZXR1cm4gcn19ZnVuY3Rpb24gT2QodCl7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyh0KSYmISh0IGluc3RhbmNlb2YgRGF0YVZpZXcpfWZ1bmN0aW9uIFJkKHQsZSl7dmFyIG4saT1lP2UubGVuZ3RoOjAscj10P01hdGgubWluKGksdC5sZW5ndGgpOjAsbz1uZXcgQXJyYXkociksYT1uZXcgQXJyYXkoaSk7Zm9yKG49MDtuPHI7KytuKW9bbl09VWQodFtuXSxlW25dKTtmb3IoO248aTsrK24pYVtuXT1lW25dO3JldHVybiBmdW5jdGlvbih0KXtmb3Iobj0wO248cjsrK24pYVtuXT1vW25dKHQpO3JldHVybiBhfX1mdW5jdGlvbiB6ZCh0LGUpe3ZhciBuPW5ldyBEYXRlO3JldHVybiB0PSt0LGU9K2UsZnVuY3Rpb24oaSl7cmV0dXJuIG4uc2V0VGltZSh0KigxLWkpK2UqaSksbn19ZnVuY3Rpb24gRGQodCxlKXtyZXR1cm4gdD0rdCxlPStlLGZ1bmN0aW9uKG4pe3JldHVybiB0KigxLW4pK2Uqbn19ZnVuY3Rpb24gQmQodCxlKXt2YXIgbixpPXt9LHI9e307Zm9yKG4gaW4gbnVsbCE9PXQmJiJvYmplY3QiPT10eXBlb2YgdHx8KHQ9e30pLG51bGwhPT1lJiYib2JqZWN0Ij09dHlwZW9mIGV8fChlPXt9KSxlKW4gaW4gdD9pW25dPVVkKHRbbl0sZVtuXSk6cltuXT1lW25dO3JldHVybiBmdW5jdGlvbih0KXtmb3IobiBpbiBpKXJbbl09aVtuXSh0KTtyZXR1cm4gcn19dmFyIEhkPS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxGZD1uZXcgUmVnRXhwKEhkLnNvdXJjZSwiZyIpO2Z1bmN0aW9uIFZkKHQsZSl7dmFyIG4saSxyLG89SGQubGFzdEluZGV4PUZkLmxhc3RJbmRleD0wLGE9LTEscz1bXSxsPVtdO2Zvcih0Kz0iIixlKz0iIjsobj1IZC5leGVjKHQpKSYmKGk9RmQuZXhlYyhlKSk7KShyPWkuaW5kZXgpPm8mJihyPWUuc2xpY2UobyxyKSxzW2FdP3NbYV0rPXI6c1srK2FdPXIpLChuPW5bMF0pPT09KGk9aVswXSk/c1thXT9zW2FdKz1pOnNbKythXT1pOihzWysrYV09bnVsbCxsLnB1c2goe2k6YSx4OkRkKG4saSl9KSksbz1GZC5sYXN0SW5kZXg7cmV0dXJuIG88ZS5sZW5ndGgmJihyPWUuc2xpY2Uobyksc1thXT9zW2FdKz1yOnNbKythXT1yKSxzLmxlbmd0aDwyP2xbMF0/KGZ1bmN0aW9uIGModCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0KGUpKyIifX0pKGxbMF0ueCk6KGZ1bmN0aW9uIHUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSkoZSk6KGU9bC5sZW5ndGgsZnVuY3Rpb24odCl7Zm9yKHZhciBuLGk9MDtpPGU7KytpKXNbKG49bFtpXSkuaV09bi54KHQpO3JldHVybiBzLmpvaW4oIiIpfSl9ZnVuY3Rpb24gVWQodCxlKXt2YXIgbixpPXR5cGVvZiBlO3JldHVybiBudWxsPT1lfHwiYm9vbGVhbiI9PT1pP0VkKGUpOigibnVtYmVyIj09PWk/RGQ6InN0cmluZyI9PT1pPyhuPURoKGUpKT8oZT1uLGtkKTpWZDplIGluc3RhbmNlb2YgRGg/a2Q6ZSBpbnN0YW5jZW9mIERhdGU/emQ6T2QoZSk/SWQ6QXJyYXkuaXNBcnJheShlKT9SZDoiZnVuY3Rpb24iIT10eXBlb2YgZS52YWx1ZU9mJiYiZnVuY3Rpb24iIT10eXBlb2YgZS50b1N0cmluZ3x8aXNOYU4oZSk/QmQ6RGQpKHQsZSl9ZnVuY3Rpb24gamQodCxlKXtyZXR1cm4gdD0rdCxlPStlLGZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnJvdW5kKHQqKDEtbikrZSpuKX19dmFyIEdkLFdkLHFkLFlkLFhkPTE4MC9NYXRoLlBJLCRkPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9O2Z1bmN0aW9uIEtkKHQsZSxuLGkscixvKXt2YXIgYSxzLGw7cmV0dXJuKGE9TWF0aC5zcXJ0KHQqdCtlKmUpKSYmKHQvPWEsZS89YSksKGw9dCpuK2UqaSkmJihuLT10KmwsaS09ZSpsKSwocz1NYXRoLnNxcnQobipuK2kqaSkpJiYobi89cyxpLz1zLGwvPXMpLHQqaTxlKm4mJih0PS10LGU9LWUsbD0tbCxhPS1hKSx7dHJhbnNsYXRlWDpyLHRyYW5zbGF0ZVk6byxyb3RhdGU6TWF0aC5hdGFuMihlLHQpKlhkLHNrZXdYOk1hdGguYXRhbihsKSpYZCxzY2FsZVg6YSxzY2FsZVk6c319ZnVuY3Rpb24gWmQodCxlLG4saSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gdC5sZW5ndGg/dC5wb3AoKSsiICI6IiJ9cmV0dXJuIGZ1bmN0aW9uKG8sYSl7dmFyIHM9W10sbD1bXTtyZXR1cm4gbz10KG8pLGE9dChhKSwoZnVuY3Rpb24gYyh0LGkscixvLGEscyl7aWYodCE9PXJ8fGkhPT1vKXt2YXIgbD1hLnB1c2goInRyYW5zbGF0ZSgiLG51bGwsZSxudWxsLG4pO3MucHVzaCh7aTpsLTQseDpEZCh0LHIpfSx7aTpsLTIseDpEZChpLG8pfSl9ZWxzZShyfHxvKSYmYS5wdXNoKCJ0cmFuc2xhdGUoIityK2UrbytuKX0pKG8udHJhbnNsYXRlWCxvLnRyYW5zbGF0ZVksYS50cmFuc2xhdGVYLGEudHJhbnNsYXRlWSxzLGwpLChmdW5jdGlvbiB1KHQsZSxuLG8pe3QhPT1lPyh0LWU+MTgwP2UrPTM2MDplLXQ+MTgwJiYodCs9MzYwKSxvLnB1c2goe2k6bi5wdXNoKHIobikrInJvdGF0ZSgiLG51bGwsaSktMix4OkRkKHQsZSl9KSk6ZSYmbi5wdXNoKHIobikrInJvdGF0ZSgiK2UraSl9KShvLnJvdGF0ZSxhLnJvdGF0ZSxzLGwpLChmdW5jdGlvbiBoKHQsZSxuLG8pe3QhPT1lP28ucHVzaCh7aTpuLnB1c2gocihuKSsic2tld1goIixudWxsLGkpLTIseDpEZCh0LGUpfSk6ZSYmbi5wdXNoKHIobikrInNrZXdYKCIrZStpKX0pKG8uc2tld1gsYS5za2V3WCxzLGwpLChmdW5jdGlvbiBkKHQsZSxuLGksbyxhKXtpZih0IT09bnx8ZSE9PWkpe3ZhciBzPW8ucHVzaChyKG8pKyJzY2FsZSgiLG51bGwsIiwiLG51bGwsIikiKTthLnB1c2goe2k6cy00LHg6RGQodCxuKX0se2k6cy0yLHg6RGQoZSxpKX0pfWVsc2UgMT09PW4mJjE9PT1pfHxvLnB1c2gocihvKSsic2NhbGUoIituKyIsIitpKyIpIil9KShvLnNjYWxlWCxvLnNjYWxlWSxhLnNjYWxlWCxhLnNjYWxlWSxzLGwpLG89YT1udWxsLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPS0xLGk9bC5sZW5ndGg7KytuPGk7KXNbKGU9bFtuXSkuaV09ZS54KHQpO3JldHVybiBzLmpvaW4oIiIpfX19dmFyIEpkPVpkKChmdW5jdGlvbiBRZCh0KXtyZXR1cm4ibm9uZSI9PT10PyRkOihHZHx8KEdkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLFdkPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxxZD1kb2N1bWVudC5kZWZhdWx0VmlldyksR2Quc3R5bGUudHJhbnNmb3JtPXQsdD1xZC5nZXRDb21wdXRlZFN0eWxlKFdkLmFwcGVuZENoaWxkKEdkKSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKSxXZC5yZW1vdmVDaGlsZChHZCksS2QoKyh0PXQuc2xpY2UoNywtMSkuc3BsaXQoIiwiKSlbMF0sK3RbMV0sK3RbMl0sK3RbM10sK3RbNF0sK3RbNV0pKX0pLCJweCwgIiwicHgpIiwiZGVnKSIpLHRwPVpkKChmdW5jdGlvbiBlcCh0KXtyZXR1cm4gbnVsbD09dD8kZDooWWR8fChZZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSxZZC5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsdCksKHQ9WWQudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/S2QoKHQ9dC5tYXRyaXgpLmEsdC5iLHQuYyx0LmQsdC5lLHQuZik6JGQpfSksIiwgIiwiKSIsIikiKSxucD1NYXRoLlNRUlQyO2Z1bmN0aW9uIGlwKHQpe3JldHVybigodD1NYXRoLmV4cCh0KSkrMS90KS8yfWZ1bmN0aW9uIHJwKHQsZSl7dmFyIG4saSxyPXRbMF0sbz10WzFdLGE9dFsyXSxzPWVbMl0sbD1lWzBdLXIsYz1lWzFdLW8sdT1sKmwrYypjO2lmKHU8MWUtMTIpaT1NYXRoLmxvZyhzL2EpL25wLG49ZnVuY3Rpb24odCl7cmV0dXJuW3IrdCpsLG8rdCpjLGEqTWF0aC5leHAobnAqdCppKV19O2Vsc2V7dmFyIGg9TWF0aC5zcXJ0KHUpLGQ9KHMqcy1hKmErNCp1KS8oMiphKjIqaCkscD0ocypzLWEqYS00KnUpLygyKnMqMipoKSxmPU1hdGgubG9nKE1hdGguc3FydChkKmQrMSktZCksbT1NYXRoLmxvZyhNYXRoLnNxcnQocCpwKzEpLXApO2k9KG0tZikvbnAsbj1mdW5jdGlvbih0KXt2YXIgZT10Kmksbj1pcChmKSxzPWEvKDIqaCkqKG4qKGZ1bmN0aW9uIHUodCl7cmV0dXJuKCh0PU1hdGguZXhwKDIqdCkpLTEpLyh0KzEpfSkobnAqZStmKS0oZnVuY3Rpb24gZCh0KXtyZXR1cm4oKHQ9TWF0aC5leHAodCkpLTEvdCkvMn0pKGYpKTtyZXR1cm5bcitzKmwsbytzKmMsYSpuL2lwKG5wKmUrZildfX1yZXR1cm4gbi5kdXJhdGlvbj0xZTMqaSxufWZ1bmN0aW9uIG9wKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3ZhciBpPXQoKGU9WGgoZSkpLmgsKG49WGgobikpLmgpLHI9QWQoZS5zLG4ucyksbz1BZChlLmwsbi5sKSxhPUFkKGUub3BhY2l0eSxuLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZS5oPWkodCksZS5zPXIodCksZS5sPW8odCksZS5vcGFjaXR5PWEodCksZSsiIn19fXZhciBhcD1vcChDZCksc3A9b3AoQWQpO2Z1bmN0aW9uIGxwKHQsZSl7dmFyIG49QWQoKHQ9YWQodCkpLmwsKGU9YWQoZSkpLmwpLGk9QWQodC5hLGUuYSkscj1BZCh0LmIsZS5iKSxvPUFkKHQub3BhY2l0eSxlLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC5sPW4oZSksdC5hPWkoZSksdC5iPXIoZSksdC5vcGFjaXR5PW8oZSksdCsiIn19ZnVuY3Rpb24gY3AodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7dmFyIGk9dCgoZT1wZChlKSkuaCwobj1wZChuKSkuaCkscj1BZChlLmMsbi5jKSxvPUFkKGUubCxuLmwpLGE9QWQoZS5vcGFjaXR5LG4ub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLmg9aSh0KSxlLmM9cih0KSxlLmw9byh0KSxlLm9wYWNpdHk9YSh0KSxlKyIifX19dmFyIHVwPWNwKENkKSxocD1jcChBZCk7ZnVuY3Rpb24gZHAodCl7cmV0dXJuKGZ1bmN0aW9uIGUobil7ZnVuY3Rpb24gaShlLGkpe3ZhciByPXQoKGU9YmQoZSkpLmgsKGk9YmQoaSkpLmgpLG89QWQoZS5zLGkucyksYT1BZChlLmwsaS5sKSxzPUFkKGUub3BhY2l0eSxpLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZS5oPXIodCksZS5zPW8odCksZS5sPWEoTWF0aC5wb3codCxuKSksZS5vcGFjaXR5PXModCksZSsiIn19cmV0dXJuIG49K24saS5nYW1tYT1lLGl9KSgxKX12YXIgcHAsZnAsbXA9ZHAoQ2QpLGdwPWRwKEFkKSxfcD0wLHlwPTAsdnA9MCxicD0wLHhwPTAsd3A9MCxTcD0ib2JqZWN0Ij09dHlwZW9mIHBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxNcD0ib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbih0KXtzZXRUaW1lb3V0KHQsMTcpfTtmdW5jdGlvbiBFcCgpe3JldHVybiB4cHx8KE1wKFRwKSx4cD1TcC5ub3coKSt3cCl9ZnVuY3Rpb24gVHAoKXt4cD0wfWZ1bmN0aW9uIENwKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiBBcCh0LGUsbil7dmFyIGk9bmV3IENwO3JldHVybiBpLnJlc3RhcnQodCxlLG4pLGl9ZnVuY3Rpb24ga3AoKXtFcCgpLCsrX3A7Zm9yKHZhciB0LGU9cHA7ZTspKHQ9eHAtZS5fdGltZSk+PTAmJmUuX2NhbGwuY2FsbChudWxsLHQpLGU9ZS5fbmV4dDstLV9wfWZ1bmN0aW9uIExwKCl7eHA9KGJwPVNwLm5vdygpKSt3cCxfcD15cD0wO3RyeXtrcCgpfWZpbmFsbHl7X3A9MCwoZnVuY3Rpb24gdCgpe2Zvcih2YXIgdCxlLG49cHAsaT0xLzA7bjspbi5fY2FsbD8oaT5uLl90aW1lJiYoaT1uLl90aW1lKSx0PW4sbj1uLl9uZXh0KTooZT1uLl9uZXh0LG4uX25leHQ9bnVsbCxuPXQ/dC5fbmV4dD1lOnBwPWUpO2ZwPXQsTnAoaSl9KSgpLHhwPTB9fWZ1bmN0aW9uIFBwKCl7dmFyIHQ9U3Aubm93KCksZT10LWJwO2U+MWUzJiYod3AtPWUsYnA9dCl9ZnVuY3Rpb24gTnAodCl7X3B8fCh5cCYmKHlwPWNsZWFyVGltZW91dCh5cCkpLHQteHA+MjQ/KHQ8MS8wJiYoeXA9c2V0VGltZW91dChMcCx0LVNwLm5vdygpLXdwKSksdnAmJih2cD1jbGVhckludGVydmFsKHZwKSkpOih2cHx8KGJwPVNwLm5vdygpLHZwPXNldEludGVydmFsKFBwLDFlMykpLF9wPTEsTXAoTHApKSl9ZnVuY3Rpb24gSXAodCxlLG4pe3ZhciBpPW5ldyBDcDtyZXR1cm4gaS5yZXN0YXJ0KChmdW5jdGlvbihuKXtpLnN0b3AoKSx0KG4rZSl9KSxlPW51bGw9PWU/MDorZSxuKSxpfUNwLnByb3RvdHlwZT1BcC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkNwLHJlc3RhcnQ6ZnVuY3Rpb24odCxlLG4pe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIik7bj0obnVsbD09bj9FcCgpOituKSsobnVsbD09ZT8wOitlKSx0aGlzLl9uZXh0fHxmcD09PXRoaXN8fChmcD9mcC5fbmV4dD10aGlzOnBwPXRoaXMsZnA9dGhpcyksdGhpcy5fY2FsbD10LHRoaXMuX3RpbWU9bixOcCgpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCxOcCgpKX19O3ZhciBPcD1zYygic3RhcnQiLCJlbmQiLCJjYW5jZWwiLCJpbnRlcnJ1cHQiKSxScD1bXTtmdW5jdGlvbiB6cCh0LGUsbixpLHIsbyl7dmFyIGE9dC5fX3RyYW5zaXRpb247aWYoYSl7aWYobiBpbiBhKXJldHVybn1lbHNlIHQuX190cmFuc2l0aW9uPXt9OyEoZnVuY3Rpb24gcyh0LGUsbil7dmFyIGkscj10Ll9fdHJhbnNpdGlvbjtmdW5jdGlvbiBvKGwpe3ZhciBjLHUsaCxkO2lmKDEhPT1uLnN0YXRlKXJldHVybiBzKCk7Zm9yKGMgaW4gcilpZigoZD1yW2NdKS5uYW1lPT09bi5uYW1lKXtpZigzPT09ZC5zdGF0ZSlyZXR1cm4gSXAobyk7ND09PWQuc3RhdGU/KGQuc3RhdGU9NixkLnRpbWVyLnN0b3AoKSxkLm9uLmNhbGwoImludGVycnVwdCIsdCx0Ll9fZGF0YV9fLGQuaW5kZXgsZC5ncm91cCksZGVsZXRlIHJbY10pOitjPGUmJihkLnN0YXRlPTYsZC50aW1lci5zdG9wKCksZC5vbi5jYWxsKCJjYW5jZWwiLHQsdC5fX2RhdGFfXyxkLmluZGV4LGQuZ3JvdXApLGRlbGV0ZSByW2NdKX1pZihJcCgoZnVuY3Rpb24oKXszPT09bi5zdGF0ZSYmKG4uc3RhdGU9NCxuLnRpbWVyLnJlc3RhcnQoYSxuLmRlbGF5LG4udGltZSksYShsKSl9KSksbi5zdGF0ZT0yLG4ub24uY2FsbCgic3RhcnQiLHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApLDI9PT1uLnN0YXRlKXtmb3Iobi5zdGF0ZT0zLGk9bmV3IEFycmF5KGg9bi50d2Vlbi5sZW5ndGgpLGM9MCx1PS0xO2M8aDsrK2MpKGQ9bi50d2VlbltjXS52YWx1ZS5jYWxsKHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApKSYmKGlbKyt1XT1kKTtpLmxlbmd0aD11KzF9fWZ1bmN0aW9uIGEoZSl7Zm9yKHZhciByPWU8bi5kdXJhdGlvbj9uLmVhc2UuY2FsbChudWxsLGUvbi5kdXJhdGlvbik6KG4udGltZXIucmVzdGFydChzKSxuLnN0YXRlPTUsMSksbz0tMSxhPWkubGVuZ3RoOysrbzxhOylpW29dLmNhbGwodCxyKTs1PT09bi5zdGF0ZSYmKG4ub24uY2FsbCgiZW5kIix0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxzKCkpfWZ1bmN0aW9uIHMoKXtmb3IodmFyIGkgaW4gbi5zdGF0ZT02LG4udGltZXIuc3RvcCgpLGRlbGV0ZSByW2VdLHIpcmV0dXJuO2RlbGV0ZSB0Ll9fdHJhbnNpdGlvbn1yW2VdPW4sbi50aW1lcj1BcCgoZnVuY3Rpb24gbCh0KXtuLnN0YXRlPTEsbi50aW1lci5yZXN0YXJ0KG8sbi5kZWxheSxuLnRpbWUpLG4uZGVsYXk8PXQmJm8odC1uLmRlbGF5KX0pLDAsbi50aW1lKX0pKHQsbix7bmFtZTplLGluZGV4OmksZ3JvdXA6cixvbjpPcCx0d2VlbjpScCx0aW1lOm8udGltZSxkZWxheTpvLmRlbGF5LGR1cmF0aW9uOm8uZHVyYXRpb24sZWFzZTpvLmVhc2UsdGltZXI6bnVsbCxzdGF0ZTowfSl9ZnVuY3Rpb24gRHAodCxlKXt2YXIgbj1IcCh0LGUpO2lmKG4uc3RhdGU+MCl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZCIpO3JldHVybiBufWZ1bmN0aW9uIEJwKHQsZSl7dmFyIG49SHAodCxlKTtpZihuLnN0YXRlPjMpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBydW5uaW5nIik7cmV0dXJuIG59ZnVuY3Rpb24gSHAodCxlKXt2YXIgbj10Ll9fdHJhbnNpdGlvbjtpZighbnx8IShuPW5bZV0pKXRocm93IG5ldyBFcnJvcigidHJhbnNpdGlvbiBub3QgZm91bmQiKTtyZXR1cm4gbn1mdW5jdGlvbiBGcCh0LGUpe3ZhciBuLGkscixvPXQuX190cmFuc2l0aW9uLGE9ITA7aWYobyl7Zm9yKHIgaW4gZT1udWxsPT1lP251bGw6ZSsiIixvKShuPW9bcl0pLm5hbWU9PT1lPyhpPW4uc3RhdGU+MiYmbi5zdGF0ZTw1LG4uc3RhdGU9NixuLnRpbWVyLnN0b3AoKSxuLm9uLmNhbGwoaT8iaW50ZXJydXB0IjoiY2FuY2VsIix0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxkZWxldGUgb1tyXSk6YT0hMTthJiZkZWxldGUgdC5fX3RyYW5zaXRpb259fWZ1bmN0aW9uIFZwKHQsZSl7dmFyIG4saTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj1CcCh0aGlzLHQpLG89ci50d2VlbjtpZihvIT09bilmb3IodmFyIGE9MCxzPShpPW49bykubGVuZ3RoO2E8czsrK2EpaWYoaVthXS5uYW1lPT09ZSl7KGk9aS5zbGljZSgpKS5zcGxpY2UoYSwxKTticmVha31yLnR3ZWVuPWl9fWZ1bmN0aW9uIFVwKHQsZSxuKXt2YXIgaSxyO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1CcCh0aGlzLHQpLGE9by50d2VlbjtpZihhIT09aSl7cj0oaT1hKS5zbGljZSgpO2Zvcih2YXIgcz17bmFtZTplLHZhbHVlOm59LGw9MCxjPXIubGVuZ3RoO2w8YzsrK2wpaWYocltsXS5uYW1lPT09ZSl7cltsXT1zO2JyZWFrfWw9PT1jJiZyLnB1c2gocyl9by50d2Vlbj1yfX1mdW5jdGlvbiBqcCh0LGUsbil7dmFyIGk9dC5faWQ7cmV0dXJuIHQuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1CcCh0aGlzLGkpOyh0LnZhbHVlfHwodC52YWx1ZT17fSkpW2VdPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpfSkpLGZ1bmN0aW9uKHQpe3JldHVybiBIcCh0LGkpLnZhbHVlW2VdfX1mdW5jdGlvbiBHcCh0LGUpe3ZhciBuO3JldHVybigibnVtYmVyIj09dHlwZW9mIGU/RGQ6ZSBpbnN0YW5jZW9mIERoP2tkOihuPURoKGUpKT8oZT1uLGtkKTpWZCkodCxlKX1mdW5jdGlvbiBXcCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX19ZnVuY3Rpb24gcXAodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpfX1mdW5jdGlvbiBZcCh0LGUsbil7dmFyIGkscixvPW4rIiI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5nZXRBdHRyaWJ1dGUodCk7cmV0dXJuIGE9PT1vP251bGw6YT09PWk/cjpyPWUoaT1hLG4pfX1mdW5jdGlvbiBYcCh0LGUsbil7dmFyIGkscixvPW4rIiI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5nZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpO3JldHVybiBhPT09bz9udWxsOmE9PT1pP3I6cj1lKGk9YSxuKX19ZnVuY3Rpb24gJHAodCxlLG4pe3ZhciBpLHIsbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzLGw9bih0aGlzKTtpZihudWxsIT1sKXJldHVybihhPXRoaXMuZ2V0QXR0cmlidXRlKHQpKT09PShzPWwrIiIpP251bGw6YT09PWkmJnM9PT1yP286KHI9cyxvPWUoaT1hLGwpKTt0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX19ZnVuY3Rpb24gS3AodCxlLG4pe3ZhciBpLHIsbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzLGw9bih0aGlzKTtpZihudWxsIT1sKXJldHVybihhPXRoaXMuZ2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKSk9PT0ocz1sKyIiKT9udWxsOmE9PT1pJiZzPT09cj9vOihyPXMsbz1lKGk9YSxsKSk7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpfX1mdW5jdGlvbiBacCh0LGUpe3JldHVybiBmdW5jdGlvbihuKXt0aGlzLnNldEF0dHJpYnV0ZSh0LGUuY2FsbCh0aGlzLG4pKX19ZnVuY3Rpb24gSnAodCxlKXtyZXR1cm4gZnVuY3Rpb24obil7dGhpcy5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwsZS5jYWxsKHRoaXMsbikpfX1mdW5jdGlvbiBRcCh0LGUpe3ZhciBuLGk7ZnVuY3Rpb24gcigpe3ZhciByPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiByIT09aSYmKG49KGk9cikmJkpwKHQscikpLG59cmV0dXJuIHIuX3ZhbHVlPWUscn1mdW5jdGlvbiB0Zih0LGUpe3ZhciBuLGk7ZnVuY3Rpb24gcigpe3ZhciByPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiByIT09aSYmKG49KGk9cikmJlpwKHQscikpLG59cmV0dXJuIHIuX3ZhbHVlPWUscn1mdW5jdGlvbiBlZih0LGUpe3JldHVybiBmdW5jdGlvbigpe0RwKHRoaXMsdCkuZGVsYXk9K2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBuZih0LGUpe3JldHVybiBlPStlLGZ1bmN0aW9uKCl7RHAodGhpcyx0KS5kZWxheT1lfX1mdW5jdGlvbiByZih0LGUpe3JldHVybiBmdW5jdGlvbigpe0JwKHRoaXMsdCkuZHVyYXRpb249K2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBvZih0LGUpe3JldHVybiBlPStlLGZ1bmN0aW9uKCl7QnAodGhpcyx0KS5kdXJhdGlvbj1lfX1mdW5jdGlvbiBhZih0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXtCcCh0aGlzLHQpLmVhc2U9ZX19ZnVuY3Rpb24gc2YodCxlLG4pe3ZhciBpLHIsbz0oZnVuY3Rpb24gYSh0KXtyZXR1cm4odCsiIikudHJpbSgpLnNwbGl0KC9efFxzKy8pLmV2ZXJ5KChmdW5jdGlvbih0KXt2YXIgZT10LmluZGV4T2YoIi4iKTtyZXR1cm4gZT49MCYmKHQ9dC5zbGljZSgwLGUpKSwhdHx8InN0YXJ0Ij09PXR9KSl9KShlKT9EcDpCcDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1vKHRoaXMsdCkscz1hLm9uO3MhPT1pJiYocj0oaT1zKS5jb3B5KCkpLm9uKGUsbiksYS5vbj1yfX12YXIgbGY9eHUucHJvdG90eXBlLmNvbnN0cnVjdG9yO2Z1bmN0aW9uIGNmKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCl9fWZ1bmN0aW9uIHVmKHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24oaSl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LGUuY2FsbCh0aGlzLGkpLG4pfX1mdW5jdGlvbiBoZih0LGUsbil7dmFyIGkscjtmdW5jdGlvbiBvKCl7dmFyIG89ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIG8hPT1yJiYoaT0ocj1vKSYmdWYodCxvLG4pKSxpfXJldHVybiBvLl92YWx1ZT1lLG99ZnVuY3Rpb24gZGYodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3RoaXMudGV4dENvbnRlbnQ9dC5jYWxsKHRoaXMsZSl9fWZ1bmN0aW9uIHBmKHQpe3ZhciBlLG47ZnVuY3Rpb24gaSgpe3ZhciBpPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBpIT09biYmKGU9KG49aSkmJmRmKGkpKSxlfXJldHVybiBpLl92YWx1ZT10LGl9dmFyIGZmPTA7ZnVuY3Rpb24gbWYodCxlLG4saSl7dGhpcy5fZ3JvdXBzPXQsdGhpcy5fcGFyZW50cz1lLHRoaXMuX25hbWU9bix0aGlzLl9pZD1pfWZ1bmN0aW9uIGdmKHQpe3JldHVybiB4dSgpLnRyYW5zaXRpb24odCl9ZnVuY3Rpb24gX2YoKXtyZXR1cm4rK2ZmfXZhciB5Zj14dS5wcm90b3R5cGU7ZnVuY3Rpb24gdmYodCl7cmV0dXJuK3R9ZnVuY3Rpb24gYmYodCl7cmV0dXJuIHQqdH1mdW5jdGlvbiB4Zih0KXtyZXR1cm4gdCooMi10KX1mdW5jdGlvbiB3Zih0KXtyZXR1cm4oKHQqPTIpPD0xP3QqdDotLXQqKDItdCkrMSkvMn1mdW5jdGlvbiBTZih0KXtyZXR1cm4gdCp0KnR9ZnVuY3Rpb24gTWYodCl7cmV0dXJuLS10KnQqdCsxfWZ1bmN0aW9uIEVmKHQpe3JldHVybigodCo9Mik8PTE/dCp0KnQ6KHQtPTIpKnQqdCsyKS8yfW1mLnByb3RvdHlwZT1nZi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOm1mLHNlbGVjdDpmdW5jdGlvbiBUZih0KXt2YXIgZT10aGlzLl9uYW1lLG49dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PXZjKHQpKTtmb3IodmFyIGk9dGhpcy5fZ3JvdXBzLHI9aS5sZW5ndGgsbz1uZXcgQXJyYXkociksYT0wO2E8cjsrK2EpZm9yKHZhciBzLGwsYz1pW2FdLHU9Yy5sZW5ndGgsaD1vW2FdPW5ldyBBcnJheSh1KSxkPTA7ZDx1OysrZCkocz1jW2RdKSYmKGw9dC5jYWxsKHMscy5fX2RhdGFfXyxkLGMpKSYmKCJfX2RhdGFfXyJpbiBzJiYobC5fX2RhdGFfXz1zLl9fZGF0YV9fKSxoW2RdPWwsenAoaFtkXSxlLG4sZCxoLEhwKHMsbikpKTtyZXR1cm4gbmV3IG1mKG8sdGhpcy5fcGFyZW50cyxlLG4pfSxzZWxlY3RBbGw6ZnVuY3Rpb24gQ2YodCl7dmFyIGU9dGhpcy5fbmFtZSxuPXRoaXMuX2lkOyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD14Yyh0KSk7Zm9yKHZhciBpPXRoaXMuX2dyb3VwcyxyPWkubGVuZ3RoLG89W10sYT1bXSxzPTA7czxyOysrcylmb3IodmFyIGwsYz1pW3NdLHU9Yy5sZW5ndGgsaD0wO2g8dTsrK2gpaWYobD1jW2hdKXtmb3IodmFyIGQscD10LmNhbGwobCxsLl9fZGF0YV9fLGgsYyksZj1IcChsLG4pLG09MCxnPXAubGVuZ3RoO208ZzsrK20pKGQ9cFttXSkmJnpwKGQsZSxuLG0scCxmKTtvLnB1c2gocCksYS5wdXNoKGwpfXJldHVybiBuZXcgbWYobyxhLGUsbil9LGZpbHRlcjpmdW5jdGlvbiBBZih0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9d2ModCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxpPW5ldyBBcnJheShuKSxyPTA7cjxuOysrcilmb3IodmFyIG8sYT1lW3JdLHM9YS5sZW5ndGgsbD1pW3JdPVtdLGM9MDtjPHM7KytjKShvPWFbY10pJiZ0LmNhbGwobyxvLl9fZGF0YV9fLGMsYSkmJmwucHVzaChvKTtyZXR1cm4gbmV3IG1mKGksdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX0sbWVyZ2U6ZnVuY3Rpb24ga2YodCl7aWYodC5faWQhPT10aGlzLl9pZCl0aHJvdyBuZXcgRXJyb3I7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPXQuX2dyb3VwcyxpPWUubGVuZ3RoLHI9TWF0aC5taW4oaSxuLmxlbmd0aCksbz1uZXcgQXJyYXkoaSksYT0wO2E8cjsrK2EpZm9yKHZhciBzLGw9ZVthXSxjPW5bYV0sdT1sLmxlbmd0aCxoPW9bYV09bmV3IEFycmF5KHUpLGQ9MDtkPHU7KytkKShzPWxbZF18fGNbZF0pJiYoaFtkXT1zKTtmb3IoO2E8aTsrK2Epb1thXT1lW2FdO3JldHVybiBuZXcgbWYobyx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfSxzZWxlY3Rpb246ZnVuY3Rpb24gTGYoKXtyZXR1cm4gbmV3IGxmKHRoaXMuX2dyb3Vwcyx0aGlzLl9wYXJlbnRzKX0sdHJhbnNpdGlvbjpmdW5jdGlvbiBQZigpe2Zvcih2YXIgdD10aGlzLl9uYW1lLGU9dGhpcy5faWQsbj1fZigpLGk9dGhpcy5fZ3JvdXBzLHI9aS5sZW5ndGgsbz0wO288cjsrK28pZm9yKHZhciBhLHM9aVtvXSxsPXMubGVuZ3RoLGM9MDtjPGw7KytjKWlmKGE9c1tjXSl7dmFyIHU9SHAoYSxlKTt6cChhLHQsbixjLHMse3RpbWU6dS50aW1lK3UuZGVsYXkrdS5kdXJhdGlvbixkZWxheTowLGR1cmF0aW9uOnUuZHVyYXRpb24sZWFzZTp1LmVhc2V9KX1yZXR1cm4gbmV3IG1mKGksdGhpcy5fcGFyZW50cyx0LG4pfSxjYWxsOnlmLmNhbGwsbm9kZXM6eWYubm9kZXMsbm9kZTp5Zi5ub2RlLHNpemU6eWYuc2l6ZSxlbXB0eTp5Zi5lbXB0eSxlYWNoOnlmLmVhY2gsb246ZnVuY3Rpb24gTmYodCxlKXt2YXIgbj10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP0hwKHRoaXMubm9kZSgpLG4pLm9uLm9uKHQpOnRoaXMuZWFjaChzZihuLHQsZSkpfSxhdHRyOmZ1bmN0aW9uIElmKHQsZSl7dmFyIG49ZmModCksaT0idHJhbnNmb3JtIj09PW4/dHA6R3A7cmV0dXJuIHRoaXMuYXR0clR3ZWVuKHQsImZ1bmN0aW9uIj09dHlwZW9mIGU/KG4ubG9jYWw/S3A6JHApKG4saSxqcCh0aGlzLCJhdHRyLiIrdCxlKSk6bnVsbD09ZT8obi5sb2NhbD9xcDpXcCkobik6KG4ubG9jYWw/WHA6WXApKG4saSxlKSl9LGF0dHJUd2VlbjpmdW5jdGlvbiBPZih0LGUpe3ZhciBuPSJhdHRyLiIrdDtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKG49dGhpcy50d2VlbihuKSkmJm4uX3ZhbHVlO2lmKG51bGw9PWUpcmV0dXJuIHRoaXMudHdlZW4obixudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3I7dmFyIGk9ZmModCk7cmV0dXJuIHRoaXMudHdlZW4obiwoaS5sb2NhbD9RcDp0ZikoaSxlKSl9LHN0eWxlOmZ1bmN0aW9uIFJmKHQsZSxuKXt2YXIgaT0idHJhbnNmb3JtIj09KHQrPSIiKT9KZDpHcDtyZXR1cm4gbnVsbD09ZT90aGlzLnN0eWxlVHdlZW4odCwoZnVuY3Rpb24gcih0LGUpe3ZhciBuLGkscjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1CYyh0aGlzLHQpLGE9KHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCksQmModGhpcyx0KSk7cmV0dXJuIG89PT1hP251bGw6bz09PW4mJmE9PT1pP3I6cj1lKG49byxpPWEpfX0pKHQsaSkpLm9uKCJlbmQuc3R5bGUuIit0LGNmKHQpKToiZnVuY3Rpb24iPT10eXBlb2YgZT90aGlzLnN0eWxlVHdlZW4odCwoZnVuY3Rpb24gYSh0LGUsbil7dmFyIGkscixvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPUJjKHRoaXMsdCkscz1uKHRoaXMpLGw9cysiIjtyZXR1cm4gbnVsbD09cyYmKHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCksbD1zPUJjKHRoaXMsdCkpLGE9PT1sP251bGw6YT09PWkmJmw9PT1yP286KHI9bCxvPWUoaT1hLHMpKX19KSh0LGksanAodGhpcywic3R5bGUuIit0LGUpKSkuZWFjaCgoZnVuY3Rpb24gbyh0LGUpe3ZhciBuLGkscixvLGE9InN0eWxlLiIrZSxzPSJlbmQuIithO3JldHVybiBmdW5jdGlvbigpe3ZhciBsPUJwKHRoaXMsdCksYz1sLm9uLHU9bnVsbD09bC52YWx1ZVthXT9vfHwobz1jZihlKSk6dm9pZCAwO2M9PT1uJiZyPT09dXx8KGk9KG49YykuY29weSgpKS5vbihzLHI9dSksbC5vbj1pfX0pKHRoaXMuX2lkLHQpKTp0aGlzLnN0eWxlVHdlZW4odCwoZnVuY3Rpb24gcyh0LGUsbil7dmFyIGkscixvPW4rIiI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9QmModGhpcyx0KTtyZXR1cm4gYT09PW8/bnVsbDphPT09aT9yOnI9ZShpPWEsbil9fSkodCxpLGUpLG4pLm9uKCJlbmQuc3R5bGUuIit0LG51bGwpfSxzdHlsZVR3ZWVuOmZ1bmN0aW9uIHpmKHQsZSxuKXt2YXIgaT0ic3R5bGUuIisodCs9IiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4oaT10aGlzLnR3ZWVuKGkpKSYmaS5fdmFsdWU7aWYobnVsbD09ZSlyZXR1cm4gdGhpcy50d2VlbihpLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihpLGhmKHQsZSxudWxsPT1uPyIiOm4pKX0sdGV4dDpmdW5jdGlvbiBEZih0KXtyZXR1cm4gdGhpcy50d2VlbigidGV4dCIsImZ1bmN0aW9uIj09dHlwZW9mIHQ/KGZ1bmN0aW9uIGUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKTt0aGlzLnRleHRDb250ZW50PW51bGw9PWU/IiI6ZX19KShqcCh0aGlzLCJ0ZXh0Iix0KSk6KGZ1bmN0aW9uIG4odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD10fX0pKG51bGw9PXQ/IiI6dCsiIikpfSx0ZXh0VHdlZW46ZnVuY3Rpb24gQmYodCl7dmFyIGU9InRleHQiO2lmKGFyZ3VtZW50cy5sZW5ndGg8MSlyZXR1cm4oZT10aGlzLnR3ZWVuKGUpKSYmZS5fdmFsdWU7aWYobnVsbD09dClyZXR1cm4gdGhpcy50d2VlbihlLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihlLHBmKHQpKX0scmVtb3ZlOmZ1bmN0aW9uIEhmKCl7cmV0dXJuIHRoaXMub24oImVuZC5yZW1vdmUiLChmdW5jdGlvbiB0KGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMucGFyZW50Tm9kZTtmb3IodmFyIG4gaW4gdGhpcy5fX3RyYW5zaXRpb24paWYoK24hPT1lKXJldHVybjt0JiZ0LnJlbW92ZUNoaWxkKHRoaXMpfX0pKHRoaXMuX2lkKSl9LHR3ZWVuOmZ1bmN0aW9uIEZmKHQsZSl7dmFyIG49dGhpcy5faWQ7aWYodCs9IiIsYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIGkscj1IcCh0aGlzLm5vZGUoKSxuKS50d2VlbixvPTAsYT1yLmxlbmd0aDtvPGE7KytvKWlmKChpPXJbb10pLm5hbWU9PT10KXJldHVybiBpLnZhbHVlO3JldHVybiBudWxsfXJldHVybiB0aGlzLmVhY2goKG51bGw9PWU/VnA6VXApKG4sdCxlKSl9LGRlbGF5OmZ1bmN0aW9uIFZmKHQpe3ZhciBlPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIHQ/ZWY6bmYpKGUsdCkpOkhwKHRoaXMubm9kZSgpLGUpLmRlbGF5fSxkdXJhdGlvbjpmdW5jdGlvbiBVZih0KXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiB0P3JmOm9mKShlLHQpKTpIcCh0aGlzLm5vZGUoKSxlKS5kdXJhdGlvbn0sZWFzZTpmdW5jdGlvbiBqZih0KXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goYWYoZSx0KSk6SHAodGhpcy5ub2RlKCksZSkuZWFzZX0sZW5kOmZ1bmN0aW9uIEdmKCl7dmFyIHQsZSxuPXRoaXMsaT1uLl9pZCxyPW4uc2l6ZSgpO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obyxhKXt2YXIgcz17dmFsdWU6YX0sbD17dmFsdWU6ZnVuY3Rpb24oKXswPT0tLXImJm8oKX19O24uZWFjaCgoZnVuY3Rpb24oKXt2YXIgbj1CcCh0aGlzLGkpLHI9bi5vbjtyIT09dCYmKChlPSh0PXIpLmNvcHkoKSkuXy5jYW5jZWwucHVzaChzKSxlLl8uaW50ZXJydXB0LnB1c2gocyksZS5fLmVuZC5wdXNoKGwpKSxuLm9uPWV9KSl9KSl9fTt2YXIgV2Y9KGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gTWF0aC5wb3codCxlKX1yZXR1cm4gZT0rZSxuLmV4cG9uZW50PXQsbn0pKDMpLHFmPShmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIDEtTWF0aC5wb3coMS10LGUpfXJldHVybiBlPStlLG4uZXhwb25lbnQ9dCxufSkoMyksWWY9KGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4oKHQqPTIpPD0xP01hdGgucG93KHQsZSk6Mi1NYXRoLnBvdygyLXQsZSkpLzJ9cmV0dXJuIGU9K2Usbi5leHBvbmVudD10LG59KSgzKSxYZj1NYXRoLlBJLCRmPVhmLzI7ZnVuY3Rpb24gS2YodCl7cmV0dXJuIDE9PSt0PzE6MS1NYXRoLmNvcyh0KiRmKX1mdW5jdGlvbiBaZih0KXtyZXR1cm4gTWF0aC5zaW4odCokZil9ZnVuY3Rpb24gSmYodCl7cmV0dXJuKDEtTWF0aC5jb3MoWGYqdCkpLzJ9ZnVuY3Rpb24gUWYodCl7cmV0dXJuIDEuMDAwOTc3NTE3MTA2NTQ5NCooTWF0aC5wb3coMiwtMTAqdCktLjAwMDk3NjU2MjUpfWZ1bmN0aW9uIHRtKHQpe3JldHVybiBRZigxLSt0KX1mdW5jdGlvbiBlbSh0KXtyZXR1cm4gMS1RZih0KX1mdW5jdGlvbiBubSh0KXtyZXR1cm4oKHQqPTIpPD0xP1FmKDEtdCk6Mi1RZih0LTEpKS8yfWZ1bmN0aW9uIGltKHQpe3JldHVybiAxLU1hdGguc3FydCgxLXQqdCl9ZnVuY3Rpb24gcm0odCl7cmV0dXJuIE1hdGguc3FydCgxLSAtLXQqdCl9ZnVuY3Rpb24gb20odCl7cmV0dXJuKCh0Kj0yKTw9MT8xLU1hdGguc3FydCgxLXQqdCk6TWF0aC5zcXJ0KDEtKHQtPTIpKnQpKzEpLzJ9dmFyIGFtPTcuNTYyNTtmdW5jdGlvbiBzbSh0KXtyZXR1cm4gMS1sbSgxLXQpfWZ1bmN0aW9uIGxtKHQpe3JldHVybih0PSt0KTwuMzYzNjM2MzYzNjM2MzYzNjU/YW0qdCp0OnQ8LjcyNzI3MjcyNzI3MjcyNzM/YW0qKHQtPS41NDU0NTQ1NDU0NTQ1NDU0KSp0Ky43NTp0PC45MDkwOTA5MDkwOTA5MDkxP2FtKih0LT0uODE4MTgxODE4MTgxODE4MikqdCsuOTM3NTphbSoodC09Ljk1NDU0NTQ1NDU0NTQ1NDYpKnQrLjk4NDM3NX1mdW5jdGlvbiBjbSh0KXtyZXR1cm4oKHQqPTIpPD0xPzEtbG0oMS10KTpsbSh0LTEpKzEpLzJ9dmFyIHVtPTEuNzAxNTgsaG09KGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4odD0rdCkqdCooZSoodC0xKSt0KX1yZXR1cm4gZT0rZSxuLm92ZXJzaG9vdD10LG59KSh1bSksZG09KGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4tLXQqdCooKHQrMSkqZSt0KSsxfXJldHVybiBlPStlLG4ub3ZlcnNob290PXQsbn0pKHVtKSxwbT0oZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybigodCo9Mik8MT90KnQqKChlKzEpKnQtZSk6KHQtPTIpKnQqKChlKzEpKnQrZSkrMikvMn1yZXR1cm4gZT0rZSxuLm92ZXJzaG9vdD10LG59KSh1bSksZm09MipNYXRoLlBJLG1tPShmdW5jdGlvbiB0KGUsbil7dmFyIGk9TWF0aC5hc2luKDEvKGU9TWF0aC5tYXgoMSxlKSkpKihuLz1mbSk7ZnVuY3Rpb24gcih0KXtyZXR1cm4gZSpRZigtIC0tdCkqTWF0aC5zaW4oKGktdCkvbil9cmV0dXJuIHIuYW1wbGl0dWRlPWZ1bmN0aW9uKGUpe3JldHVybiB0KGUsbipmbSl9LHIucGVyaW9kPWZ1bmN0aW9uKG4pe3JldHVybiB0KGUsbil9LHJ9KSgxLC4zKSxnbT0oZnVuY3Rpb24gdChlLG4pe3ZhciBpPU1hdGguYXNpbigxLyhlPU1hdGgubWF4KDEsZSkpKSoobi89Zm0pO2Z1bmN0aW9uIHIodCl7cmV0dXJuIDEtZSpRZih0PSt0KSpNYXRoLnNpbigodCtpKS9uKX1yZXR1cm4gci5hbXBsaXR1ZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSxuKmZtKX0sci5wZXJpb2Q9ZnVuY3Rpb24obil7cmV0dXJuIHQoZSxuKX0scn0pKDEsLjMpLF9tPShmdW5jdGlvbiB0KGUsbil7dmFyIGk9TWF0aC5hc2luKDEvKGU9TWF0aC5tYXgoMSxlKSkpKihuLz1mbSk7ZnVuY3Rpb24gcih0KXtyZXR1cm4oKHQ9Mip0LTEpPDA/ZSpRZigtdCkqTWF0aC5zaW4oKGktdCkvbik6Mi1lKlFmKHQpKk1hdGguc2luKChpK3QpL24pKS8yfXJldHVybiByLmFtcGxpdHVkZT1mdW5jdGlvbihlKXtyZXR1cm4gdChlLG4qZm0pfSxyLnBlcmlvZD1mdW5jdGlvbihuKXtyZXR1cm4gdChlLG4pfSxyfSkoMSwuMykseW09T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsZWFzZUxpbmVhcjp2ZixlYXNlUXVhZDp3ZixlYXNlUXVhZEluOmJmLGVhc2VRdWFkT3V0OnhmLGVhc2VRdWFkSW5PdXQ6d2YsZWFzZUN1YmljOkVmLGVhc2VDdWJpY0luOlNmLGVhc2VDdWJpY091dDpNZixlYXNlQ3ViaWNJbk91dDpFZixlYXNlUG9seTpZZixlYXNlUG9seUluOldmLGVhc2VQb2x5T3V0OnFmLGVhc2VQb2x5SW5PdXQ6WWYsZWFzZVNpbjpKZixlYXNlU2luSW46S2YsZWFzZVNpbk91dDpaZixlYXNlU2luSW5PdXQ6SmYsZWFzZUV4cDpubSxlYXNlRXhwSW46dG0sZWFzZUV4cE91dDplbSxlYXNlRXhwSW5PdXQ6bm0sZWFzZUNpcmNsZTpvbSxlYXNlQ2lyY2xlSW46aW0sZWFzZUNpcmNsZU91dDpybSxlYXNlQ2lyY2xlSW5PdXQ6b20sZWFzZUJvdW5jZTpsbSxlYXNlQm91bmNlSW46c20sZWFzZUJvdW5jZU91dDpsbSxlYXNlQm91bmNlSW5PdXQ6Y20sZWFzZUJhY2s6cG0sZWFzZUJhY2tJbjpobSxlYXNlQmFja091dDpkbSxlYXNlQmFja0luT3V0OnBtLGVhc2VFbGFzdGljOmdtLGVhc2VFbGFzdGljSW46bW0sZWFzZUVsYXN0aWNPdXQ6Z20sZWFzZUVsYXN0aWNJbk91dDpfbX0pLHZtPXt0aW1lOm51bGwsZGVsYXk6MCxkdXJhdGlvbjoyNTAsZWFzZTpFZn07ZnVuY3Rpb24gYm0odCxlKXtmb3IodmFyIG47IShuPXQuX190cmFuc2l0aW9uKXx8IShuPW5bZV0pOylpZighKHQ9dC5wYXJlbnROb2RlKSlyZXR1cm4gdm0udGltZT1FcCgpLHZtO3JldHVybiBufXh1LnByb3RvdHlwZS5pbnRlcnJ1cHQ9ZnVuY3Rpb24geG0odCl7cmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oKXtGcCh0aGlzLHQpfSkpfSx4dS5wcm90b3R5cGUudHJhbnNpdGlvbj1mdW5jdGlvbiB3bSh0KXt2YXIgZSxuO3QgaW5zdGFuY2VvZiBtZj8oZT10Ll9pZCx0PXQuX25hbWUpOihlPV9mKCksKG49dm0pLnRpbWU9RXAoKSx0PW51bGw9PXQ/bnVsbDp0KyIiKTtmb3IodmFyIGk9dGhpcy5fZ3JvdXBzLHI9aS5sZW5ndGgsbz0wO288cjsrK28pZm9yKHZhciBhLHM9aVtvXSxsPXMubGVuZ3RoLGM9MDtjPGw7KytjKShhPXNbY10pJiZ6cChhLHQsZSxjLHMsbnx8Ym0oYSxlKSk7cmV0dXJuIG5ldyBtZihpLHRoaXMuX3BhcmVudHMsdCxlKX07dmFyIFNtPVtudWxsXTtmdW5jdGlvbiBNbSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gRW0odCxlLG4pe3RoaXMudGFyZ2V0PXQsdGhpcy50eXBlPWUsdGhpcy5zZWxlY3Rpb249bn1mdW5jdGlvbiBUbSgpe2N1LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIENtKCl7Y3UucHJldmVudERlZmF1bHQoKSxjdS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX12YXIgQW09e25hbWU6ImRyYWcifSxrbT17bmFtZToic3BhY2UifSxMbT17bmFtZToiaGFuZGxlIn0sUG09e25hbWU6ImNlbnRlciJ9O2Z1bmN0aW9uIE5tKHQpe3JldHVyblsrdFswXSwrdFsxXV19ZnVuY3Rpb24gSW0odCl7cmV0dXJuW05tKHRbMF0pLE5tKHRbMV0pXX1mdW5jdGlvbiBPbSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHNoKGUsY3UudG91Y2hlcyx0KX19dmFyIFJtPXtuYW1lOiJ4IixoYW5kbGVzOlsidyIsImUiXS5tYXAoam0pLGlucHV0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG51bGw9PXQ/bnVsbDpbWyt0WzBdLGVbMF1bMV1dLFsrdFsxXSxlWzFdWzFdXV19LG91dHB1dDpmdW5jdGlvbih0KXtyZXR1cm4gdCYmW3RbMF1bMF0sdFsxXVswXV19fSx6bT17bmFtZToieSIsaGFuZGxlczpbIm4iLCJzIl0ubWFwKGptKSxpbnB1dDpmdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT10P251bGw6W1tlWzBdWzBdLCt0WzBdXSxbZVsxXVswXSwrdFsxXV1dfSxvdXRwdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQmJlt0WzBdWzFdLHRbMV1bMV1dfX0sRG09e25hbWU6Inh5IixoYW5kbGVzOlsibiIsInciLCJlIiwicyIsIm53IiwibmUiLCJzdyIsInNlIl0ubWFwKGptKSxpbnB1dDpmdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD9udWxsOkltKHQpfSxvdXRwdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHR9fSxCbT17b3ZlcmxheToiY3Jvc3NoYWlyIixzZWxlY3Rpb246Im1vdmUiLG46Im5zLXJlc2l6ZSIsZToiZXctcmVzaXplIixzOiJucy1yZXNpemUiLHc6ImV3LXJlc2l6ZSIsbnc6Im53c2UtcmVzaXplIixuZToibmVzdy1yZXNpemUiLHNlOiJud3NlLXJlc2l6ZSIsc3c6Im5lc3ctcmVzaXplIn0sSG09e2U6InciLHc6ImUiLG53OiJuZSIsbmU6Im53IixzZToic3ciLHN3OiJzZSJ9LEZtPXtuOiJzIixzOiJuIixudzoic3ciLG5lOiJzZSIsc2U6Im5lIixzdzoibncifSxWbT17b3ZlcmxheToxLHNlbGVjdGlvbjoxLG46bnVsbCxlOjEsczpudWxsLHc6LTEsbnc6LTEsbmU6MSxzZToxLHN3Oi0xfSxVbT17b3ZlcmxheToxLHNlbGVjdGlvbjoxLG46LTEsZTpudWxsLHM6MSx3Om51bGwsbnc6LTEsbmU6LTEsc2U6MSxzdzoxfTtmdW5jdGlvbiBqbSh0KXtyZXR1cm57dHlwZTp0fX1mdW5jdGlvbiBHbSgpe3JldHVybiFjdS5jdHJsS2V5JiYhY3UuYnV0dG9ufWZ1bmN0aW9uIFdtKCl7dmFyIHQ9dGhpcy5vd25lclNWR0VsZW1lbnR8fHRoaXM7cmV0dXJuIHQuaGFzQXR0cmlidXRlKCJ2aWV3Qm94Iik/W1sodD10LnZpZXdCb3guYmFzZVZhbCkueCx0LnldLFt0LngrdC53aWR0aCx0LnkrdC5oZWlnaHRdXTpbWzAsMF0sW3Qud2lkdGguYmFzZVZhbC52YWx1ZSx0LmhlaWdodC5iYXNlVmFsLnZhbHVlXV19ZnVuY3Rpb24gcW0oKXtyZXR1cm4gbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzfHwib250b3VjaHN0YXJ0ImluIHRoaXN9ZnVuY3Rpb24gWW0odCl7Zm9yKDshdC5fX2JydXNoOylpZighKHQ9dC5wYXJlbnROb2RlKSlyZXR1cm47cmV0dXJuIHQuX19icnVzaH1mdW5jdGlvbiBYbSh0KXtyZXR1cm4gdFswXVswXT09PXRbMV1bMF18fHRbMF1bMV09PT10WzFdWzFdfWZ1bmN0aW9uICRtKHQpe3ZhciBlPXQuX19icnVzaDtyZXR1cm4gZT9lLmRpbS5vdXRwdXQoZS5zZWxlY3Rpb24pOm51bGx9ZnVuY3Rpb24gS20oKXtyZXR1cm4gSm0oem0pfWZ1bmN0aW9uIFptKCl7cmV0dXJuIEptKERtKX1mdW5jdGlvbiBKbSh0KXt2YXIgZSxuPVdtLGk9R20scj1xbSxvPSEwLGE9c2MoInN0YXJ0IiwiYnJ1c2giLCJlbmQiKSxzPTY7ZnVuY3Rpb24gbChlKXt2YXIgbj1lLnByb3BlcnR5KCJfX2JydXNoIixtKS5zZWxlY3RBbGwoIi5vdmVybGF5IikuZGF0YShbam0oIm92ZXJsYXkiKV0pO24uZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsIm92ZXJsYXkiKS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLmF0dHIoImN1cnNvciIsQm0ub3ZlcmxheSkubWVyZ2UobikuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1ZbSh0aGlzKS5leHRlbnQ7d3UodGhpcykuYXR0cigieCIsdFswXVswXSkuYXR0cigieSIsdFswXVsxXSkuYXR0cigid2lkdGgiLHRbMV1bMF0tdFswXVswXSkuYXR0cigiaGVpZ2h0Iix0WzFdWzFdLXRbMF1bMV0pfSkpLGUuc2VsZWN0QWxsKCIuc2VsZWN0aW9uIikuZGF0YShbam0oInNlbGVjdGlvbiIpXSkuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsInNlbGVjdGlvbiIpLmF0dHIoImN1cnNvciIsQm0uc2VsZWN0aW9uKS5hdHRyKCJmaWxsIiwiIzc3NyIpLmF0dHIoImZpbGwtb3BhY2l0eSIsLjMpLmF0dHIoInN0cm9rZSIsIiNmZmYiKS5hdHRyKCJzaGFwZS1yZW5kZXJpbmciLCJjcmlzcEVkZ2VzIik7dmFyIGk9ZS5zZWxlY3RBbGwoIi5oYW5kbGUiKS5kYXRhKHQuaGFuZGxlcywoZnVuY3Rpb24odCl7cmV0dXJuIHQudHlwZX0pKTtpLmV4aXQoKS5yZW1vdmUoKSxpLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLChmdW5jdGlvbih0KXtyZXR1cm4iaGFuZGxlIGhhbmRsZS0tIit0LnR5cGV9KSkuYXR0cigiY3Vyc29yIiwoZnVuY3Rpb24odCl7cmV0dXJuIEJtW3QudHlwZV19KSksZS5lYWNoKGMpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKS5vbigibW91c2Vkb3duLmJydXNoIixkKS5maWx0ZXIocikub24oInRvdWNoc3RhcnQuYnJ1c2giLGQpLm9uKCJ0b3VjaG1vdmUuYnJ1c2giLHApLm9uKCJ0b3VjaGVuZC5icnVzaCB0b3VjaGNhbmNlbC5icnVzaCIsZikuc3R5bGUoInRvdWNoLWFjdGlvbiIsIm5vbmUiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpfWZ1bmN0aW9uIGMoKXt2YXIgdD13dSh0aGlzKSxlPVltKHRoaXMpLnNlbGVjdGlvbjtlPyh0LnNlbGVjdEFsbCgiLnNlbGVjdGlvbiIpLnN0eWxlKCJkaXNwbGF5IixudWxsKS5hdHRyKCJ4IixlWzBdWzBdKS5hdHRyKCJ5IixlWzBdWzFdKS5hdHRyKCJ3aWR0aCIsZVsxXVswXS1lWzBdWzBdKS5hdHRyKCJoZWlnaHQiLGVbMV1bMV0tZVswXVsxXSksdC5zZWxlY3RBbGwoIi5oYW5kbGUiKS5zdHlsZSgiZGlzcGxheSIsbnVsbCkuYXR0cigieCIsKGZ1bmN0aW9uKHQpe3JldHVybiJlIj09PXQudHlwZVt0LnR5cGUubGVuZ3RoLTFdP2VbMV1bMF0tcy8yOmVbMF1bMF0tcy8yfSkpLmF0dHIoInkiLChmdW5jdGlvbih0KXtyZXR1cm4icyI9PT10LnR5cGVbMF0/ZVsxXVsxXS1zLzI6ZVswXVsxXS1zLzJ9KSkuYXR0cigid2lkdGgiLChmdW5jdGlvbih0KXtyZXR1cm4ibiI9PT10LnR5cGV8fCJzIj09PXQudHlwZT9lWzFdWzBdLWVbMF1bMF0rczpzfSkpLmF0dHIoImhlaWdodCIsKGZ1bmN0aW9uKHQpe3JldHVybiJlIj09PXQudHlwZXx8InciPT09dC50eXBlP2VbMV1bMV0tZVswXVsxXStzOnN9KSkpOnQuc2VsZWN0QWxsKCIuc2VsZWN0aW9uLC5oYW5kbGUiKS5zdHlsZSgiZGlzcGxheSIsIm5vbmUiKS5hdHRyKCJ4IixudWxsKS5hdHRyKCJ5IixudWxsKS5hdHRyKCJ3aWR0aCIsbnVsbCkuYXR0cigiaGVpZ2h0IixudWxsKX1mdW5jdGlvbiB1KHQsZSxuKXt2YXIgaT10Ll9fYnJ1c2guZW1pdHRlcjtyZXR1cm4haXx8biYmaS5jbGVhbj9uZXcgaCh0LGUsbik6aX1mdW5jdGlvbiBoKHQsZSxuKXt0aGlzLnRoYXQ9dCx0aGlzLmFyZ3M9ZSx0aGlzLnN0YXRlPXQuX19icnVzaCx0aGlzLmFjdGl2ZT0wLHRoaXMuY2xlYW49bn1mdW5jdGlvbiBkKCl7aWYoKCFlfHxjdS50b3VjaGVzKSYmaS5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBuLHIsYSxzLGwsaCxkLHAsZixtLGcsXz10aGlzLHk9Y3UudGFyZ2V0Ll9fZGF0YV9fLnR5cGUsdj0ic2VsZWN0aW9uIj09PShvJiZjdS5tZXRhS2V5P3k9Im92ZXJsYXkiOnkpP0FtOm8mJmN1LmFsdEtleT9QbTpMbSxiPXQ9PT16bT9udWxsOlZtW3ldLHg9dD09PVJtP251bGw6VW1beV0sdz1ZbShfKSxTPXcuZXh0ZW50LE09dy5zZWxlY3Rpb24sRT1TWzBdWzBdLFQ9U1swXVsxXSxDPVNbMV1bMF0sQT1TWzFdWzFdLGs9MCxMPTAsUD1iJiZ4JiZvJiZjdS5zaGlmdEtleSxOPWN1LnRvdWNoZXM/T20oY3UuY2hhbmdlZFRvdWNoZXNbMF0uaWRlbnRpZmllcik6b2gsST1OKF8pLE89SSxSPXUoXyxhcmd1bWVudHMsITApLmJlZm9yZXN0YXJ0KCk7Im92ZXJsYXkiPT09eT8oTSYmKGY9ITApLHcuc2VsZWN0aW9uPU09W1tuPXQ9PT16bT9FOklbMF0sYT10PT09Um0/VDpJWzFdXSxbbD10PT09em0/QzpuLGQ9dD09PVJtP0E6YV1dKToobj1NWzBdWzBdLGE9TVswXVsxXSxsPU1bMV1bMF0sZD1NWzFdWzFdKSxyPW4scz1hLGg9bCxwPWQ7dmFyIHo9d3UoXykuYXR0cigicG9pbnRlci1ldmVudHMiLCJub25lIiksRD16LnNlbGVjdEFsbCgiLm92ZXJsYXkiKS5hdHRyKCJjdXJzb3IiLEJtW3ldKTtpZihjdS50b3VjaGVzKVIubW92ZWQ9SCxSLmVuZGVkPVY7ZWxzZXt2YXIgQj13dShjdS52aWV3KS5vbigibW91c2Vtb3ZlLmJydXNoIixILCEwKS5vbigibW91c2V1cC5icnVzaCIsViwhMCk7byYmQi5vbigia2V5ZG93bi5icnVzaCIsVSwhMCkub24oImtleXVwLmJydXNoIixqLCEwKSx1aChjdS52aWV3KX1UbSgpLEZwKF8pLGMuY2FsbChfKSxSLnN0YXJ0KCl9ZnVuY3Rpb24gSCgpe3ZhciB0PU4oXyk7IVB8fG18fGd8fChNYXRoLmFicyh0WzBdLU9bMF0pPk1hdGguYWJzKHRbMV0tT1sxXSk/Zz0hMDptPSEwKSxPPXQsZj0hMCxDbSgpLEYoKX1mdW5jdGlvbiBGKCl7dmFyIHQ7c3dpdGNoKGs9T1swXS1JWzBdLEw9T1sxXS1JWzFdLHYpe2Nhc2Uga206Y2FzZSBBbTpiJiYoaz1NYXRoLm1heChFLW4sTWF0aC5taW4oQy1sLGspKSxyPW4rayxoPWwraykseCYmKEw9TWF0aC5tYXgoVC1hLE1hdGgubWluKEEtZCxMKSkscz1hK0wscD1kK0wpO2JyZWFrO2Nhc2UgTG06YjwwPyhrPU1hdGgubWF4KEUtbixNYXRoLm1pbihDLW4saykpLHI9bitrLGg9bCk6Yj4wJiYoaz1NYXRoLm1heChFLWwsTWF0aC5taW4oQy1sLGspKSxyPW4saD1sK2spLHg8MD8oTD1NYXRoLm1heChULWEsTWF0aC5taW4oQS1hLEwpKSxzPWErTCxwPWQpOng+MCYmKEw9TWF0aC5tYXgoVC1kLE1hdGgubWluKEEtZCxMKSkscz1hLHA9ZCtMKTticmVhaztjYXNlIFBtOmImJihyPU1hdGgubWF4KEUsTWF0aC5taW4oQyxuLWsqYikpLGg9TWF0aC5tYXgoRSxNYXRoLm1pbihDLGwraypiKSkpLHgmJihzPU1hdGgubWF4KFQsTWF0aC5taW4oQSxhLUwqeCkpLHA9TWF0aC5tYXgoVCxNYXRoLm1pbihBLGQrTCp4KSkpfWg8ciYmKGIqPS0xLHQ9bixuPWwsbD10LHQ9cixyPWgsaD10LHkgaW4gSG0mJkQuYXR0cigiY3Vyc29yIixCbVt5PUhtW3ldXSkpLHA8cyYmKHgqPS0xLHQ9YSxhPWQsZD10LHQ9cyxzPXAscD10LHkgaW4gRm0mJkQuYXR0cigiY3Vyc29yIixCbVt5PUZtW3ldXSkpLHcuc2VsZWN0aW9uJiYoTT13LnNlbGVjdGlvbiksbSYmKHI9TVswXVswXSxoPU1bMV1bMF0pLGcmJihzPU1bMF1bMV0scD1NWzFdWzFdKSxNWzBdWzBdPT09ciYmTVswXVsxXT09PXMmJk1bMV1bMF09PT1oJiZNWzFdWzFdPT09cHx8KHcuc2VsZWN0aW9uPVtbcixzXSxbaCxwXV0sYy5jYWxsKF8pLFIuYnJ1c2goKSl9ZnVuY3Rpb24gVigpe2lmKFRtKCksY3UudG91Y2hlcyl7aWYoY3UudG91Y2hlcy5sZW5ndGgpcmV0dXJuO2UmJmNsZWFyVGltZW91dChlKSxlPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ZT1udWxsfSksNTAwKX1lbHNlIGhoKGN1LnZpZXcsZiksQi5vbigia2V5ZG93bi5icnVzaCBrZXl1cC5icnVzaCBtb3VzZW1vdmUuYnJ1c2ggbW91c2V1cC5icnVzaCIsbnVsbCk7ei5hdHRyKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLEQuYXR0cigiY3Vyc29yIixCbS5vdmVybGF5KSx3LnNlbGVjdGlvbiYmKE09dy5zZWxlY3Rpb24pLFhtKE0pJiYody5zZWxlY3Rpb249bnVsbCxjLmNhbGwoXykpLFIuZW5kKCl9ZnVuY3Rpb24gVSgpe3N3aXRjaChjdS5rZXlDb2RlKXtjYXNlIDE2OlA9YiYmeDticmVhaztjYXNlIDE4OnY9PT1MbSYmKGImJihsPWgtaypiLG49citrKmIpLHgmJihkPXAtTCp4LGE9cytMKngpLHY9UG0sRigpKTticmVhaztjYXNlIDMyOnYhPT1MbSYmdiE9PVBtfHwoYjwwP2w9aC1rOmI+MCYmKG49ci1rKSx4PDA/ZD1wLUw6eD4wJiYoYT1zLUwpLHY9a20sRC5hdHRyKCJjdXJzb3IiLEJtLnNlbGVjdGlvbiksRigpKTticmVhaztkZWZhdWx0OnJldHVybn1DbSgpfWZ1bmN0aW9uIGooKXtzd2l0Y2goY3Uua2V5Q29kZSl7Y2FzZSAxNjpQJiYobT1nPVA9ITEsRigpKTticmVhaztjYXNlIDE4OnY9PT1QbSYmKGI8MD9sPWg6Yj4wJiYobj1yKSx4PDA/ZD1wOng+MCYmKGE9cyksdj1MbSxGKCkpO2JyZWFrO2Nhc2UgMzI6dj09PWttJiYoY3UuYWx0S2V5PyhiJiYobD1oLWsqYixuPXIraypiKSx4JiYoZD1wLUwqeCxhPXMrTCp4KSx2PVBtKTooYjwwP2w9aDpiPjAmJihuPXIpLHg8MD9kPXA6eD4wJiYoYT1zKSx2PUxtKSxELmF0dHIoImN1cnNvciIsQm1beV0pLEYoKSk7YnJlYWs7ZGVmYXVsdDpyZXR1cm59Q20oKX19ZnVuY3Rpb24gcCgpe3UodGhpcyxhcmd1bWVudHMpLm1vdmVkKCl9ZnVuY3Rpb24gZigpe3UodGhpcyxhcmd1bWVudHMpLmVuZGVkKCl9ZnVuY3Rpb24gbSgpe3ZhciBlPXRoaXMuX19icnVzaHx8e3NlbGVjdGlvbjpudWxsfTtyZXR1cm4gZS5leHRlbnQ9SW0obi5hcHBseSh0aGlzLGFyZ3VtZW50cykpLGUuZGltPXQsZX1yZXR1cm4gbC5tb3ZlPWZ1bmN0aW9uKGUsbil7ZS5zZWxlY3Rpb24/ZS5vbigic3RhcnQuYnJ1c2giLChmdW5jdGlvbigpe3UodGhpcyxhcmd1bWVudHMpLmJlZm9yZXN0YXJ0KCkuc3RhcnQoKX0pKS5vbigiaW50ZXJydXB0LmJydXNoIGVuZC5icnVzaCIsKGZ1bmN0aW9uKCl7dSh0aGlzLGFyZ3VtZW50cykuZW5kKCl9KSkudHdlZW4oImJydXNoIiwoZnVuY3Rpb24oKXt2YXIgZT10aGlzLGk9ZS5fX2JydXNoLHI9dShlLGFyZ3VtZW50cyksbz1pLnNlbGVjdGlvbixhPXQuaW5wdXQoImZ1bmN0aW9uIj09dHlwZW9mIG4/bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6bixpLmV4dGVudCkscz1VZChvLGEpO2Z1bmN0aW9uIGwodCl7aS5zZWxlY3Rpb249MT09PXQmJm51bGw9PT1hP251bGw6cyh0KSxjLmNhbGwoZSksci5icnVzaCgpfXJldHVybiBudWxsIT09byYmbnVsbCE9PWE/bDpsKDEpfSkpOmUuZWFjaCgoZnVuY3Rpb24oKXt2YXIgZT10aGlzLGk9YXJndW1lbnRzLHI9ZS5fX2JydXNoLG89dC5pbnB1dCgiZnVuY3Rpb24iPT10eXBlb2Ygbj9uLmFwcGx5KGUsaSk6bixyLmV4dGVudCksYT11KGUsaSkuYmVmb3Jlc3RhcnQoKTtGcChlKSxyLnNlbGVjdGlvbj1udWxsPT09bz9udWxsOm8sYy5jYWxsKGUpLGEuc3RhcnQoKS5icnVzaCgpLmVuZCgpfSkpfSxsLmNsZWFyPWZ1bmN0aW9uKHQpe2wubW92ZSh0LG51bGwpfSxoLnByb3RvdHlwZT17YmVmb3Jlc3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gMT09Kyt0aGlzLmFjdGl2ZSYmKHRoaXMuc3RhdGUuZW1pdHRlcj10aGlzLHRoaXMuc3RhcnRpbmc9ITApLHRoaXN9LHN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhcnRpbmc/KHRoaXMuc3RhcnRpbmc9ITEsdGhpcy5lbWl0KCJzdGFydCIpKTp0aGlzLmVtaXQoImJydXNoIiksdGhpc30sYnJ1c2g6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbWl0KCJicnVzaCIpLHRoaXN9LGVuZDpmdW5jdGlvbigpe3JldHVybiAwPT0tLXRoaXMuYWN0aXZlJiYoZGVsZXRlIHRoaXMuc3RhdGUuZW1pdHRlcix0aGlzLmVtaXQoImVuZCIpKSx0aGlzfSxlbWl0OmZ1bmN0aW9uKGUpe211KG5ldyBFbShsLGUsdC5vdXRwdXQodGhpcy5zdGF0ZS5zZWxlY3Rpb24pKSxhLmFwcGx5LGEsW2UsdGhpcy50aGF0LHRoaXMuYXJnc10pfX0sbC5leHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpNbShJbSh0KSksbCk6bn0sbC5maWx0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpNbSghIXQpLGwpOml9LGwudG91Y2hhYmxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6TW0oISF0KSxsKTpyfSxsLmhhbmRsZVNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9K3QsbCk6c30sbC5rZXlNb2RpZmllcnM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ISF0LGwpOm99LGwub249ZnVuY3Rpb24oKXt2YXIgdD1hLm9uLmFwcGx5KGEsYXJndW1lbnRzKTtyZXR1cm4gdD09PWE/bDp0fSxsfXZhciBRbT1NYXRoLmNvcyx0Zz1NYXRoLnNpbixlZz1NYXRoLlBJLG5nPWVnLzIsaWc9MiplZyxyZz1NYXRoLm1heDtmdW5jdGlvbiBvZyh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXtyZXR1cm4gdChlLnNvdXJjZS52YWx1ZStlLnRhcmdldC52YWx1ZSxuLnNvdXJjZS52YWx1ZStuLnRhcmdldC52YWx1ZSl9fXZhciBhZz1BcnJheS5wcm90b3R5cGUuc2xpY2U7ZnVuY3Rpb24gc2codCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fXZhciBsZz1NYXRoLlBJLGNnPTIqbGcsdWc9MWUtNixoZz1jZy11ZztmdW5jdGlvbiBkZygpe3RoaXMuX3gwPXRoaXMuX3kwPXRoaXMuX3gxPXRoaXMuX3kxPW51bGwsdGhpcy5fPSIifWZ1bmN0aW9uIHBnKCl7cmV0dXJuIG5ldyBkZ31mdW5jdGlvbiBmZyh0KXtyZXR1cm4gdC5zb3VyY2V9ZnVuY3Rpb24gbWcodCl7cmV0dXJuIHQudGFyZ2V0fWZ1bmN0aW9uIGdnKHQpe3JldHVybiB0LnJhZGl1c31mdW5jdGlvbiBfZyh0KXtyZXR1cm4gdC5zdGFydEFuZ2xlfWZ1bmN0aW9uIHlnKHQpe3JldHVybiB0LmVuZEFuZ2xlfWRnLnByb3RvdHlwZT1wZy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmRnLG1vdmVUbzpmdW5jdGlvbih0LGUpe3RoaXMuXys9Ik0iKyh0aGlzLl94MD10aGlzLl94MT0rdCkrIiwiKyh0aGlzLl95MD10aGlzLl95MT0rZSl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe251bGwhPT10aGlzLl94MSYmKHRoaXMuX3gxPXRoaXMuX3gwLHRoaXMuX3kxPXRoaXMuX3kwLHRoaXMuXys9IloiKX0sbGluZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fKz0iTCIrKHRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kxPStlKX0scXVhZHJhdGljQ3VydmVUbzpmdW5jdGlvbih0LGUsbixpKXt0aGlzLl8rPSJRIisgK3QrIiwiKyArZSsiLCIrKHRoaXMuX3gxPStuKSsiLCIrKHRoaXMuX3kxPStpKX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbih0LGUsbixpLHIsbyl7dGhpcy5fKz0iQyIrICt0KyIsIisgK2UrIiwiKyArbisiLCIrICtpKyIsIisodGhpcy5feDE9K3IpKyIsIisodGhpcy5feTE9K28pfSxhcmNUbzpmdW5jdGlvbih0LGUsbixpLHIpe3ZhciBvPXRoaXMuX3gxLGE9dGhpcy5feTEscz0obj0rbiktKHQ9K3QpLGw9KGk9K2kpLShlPStlKSxjPW8tdCx1PWEtZSxoPWMqYyt1KnU7aWYoKHI9K3IpPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrcik7aWYobnVsbD09PXRoaXMuX3gxKXRoaXMuXys9Ik0iKyh0aGlzLl94MT10KSsiLCIrKHRoaXMuX3kxPWUpO2Vsc2UgaWYoaD51ZylpZihNYXRoLmFicyh1KnMtbCpjKT51ZyYmcil7dmFyIGQ9bi1vLHA9aS1hLGY9cypzK2wqbCxtPWQqZCtwKnAsZz1NYXRoLnNxcnQoZiksXz1NYXRoLnNxcnQoaCkseT1yKk1hdGgudGFuKChsZy1NYXRoLmFjb3MoKGYraC1tKS8oMipnKl8pKSkvMiksdj15L18sYj15L2c7TWF0aC5hYnModi0xKT51ZyYmKHRoaXMuXys9IkwiKyh0K3YqYykrIiwiKyhlK3YqdSkpLHRoaXMuXys9IkEiK3IrIiwiK3IrIiwwLDAsIisgKyh1KmQ+YypwKSsiLCIrKHRoaXMuX3gxPXQrYipzKSsiLCIrKHRoaXMuX3kxPWUrYipsKX1lbHNlIHRoaXMuXys9IkwiKyh0aGlzLl94MT10KSsiLCIrKHRoaXMuX3kxPWUpfSxhcmM6ZnVuY3Rpb24odCxlLG4saSxyLG8pe3Q9K3QsZT0rZSxvPSEhbzt2YXIgYT0obj0rbikqTWF0aC5jb3MoaSkscz1uKk1hdGguc2luKGkpLGw9dCthLGM9ZStzLHU9MV5vLGg9bz9pLXI6ci1pO2lmKG48MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIituKTtudWxsPT09dGhpcy5feDE/dGhpcy5fKz0iTSIrbCsiLCIrYzooTWF0aC5hYnModGhpcy5feDEtbCk+dWd8fE1hdGguYWJzKHRoaXMuX3kxLWMpPnVnKSYmKHRoaXMuXys9IkwiK2wrIiwiK2MpLG4mJihoPDAmJihoPWglY2crY2cpLGg+aGc/dGhpcy5fKz0iQSIrbisiLCIrbisiLDAsMSwiK3UrIiwiKyh0LWEpKyIsIisoZS1zKSsiQSIrbisiLCIrbisiLDAsMSwiK3UrIiwiKyh0aGlzLl94MT1sKSsiLCIrKHRoaXMuX3kxPWMpOmg+dWcmJih0aGlzLl8rPSJBIituKyIsIituKyIsMCwiKyArKGg+PWxnKSsiLCIrdSsiLCIrKHRoaXMuX3gxPXQrbipNYXRoLmNvcyhyKSkrIiwiKyh0aGlzLl95MT1lK24qTWF0aC5zaW4ocikpKSl9LHJlY3Q6ZnVuY3Rpb24odCxlLG4saSl7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPStlKSsiaCIrICtuKyJ2IisgK2krImgiKy1uKyJaIn0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ffX07dmFyIHZnPSIkIjtmdW5jdGlvbiBiZygpe31mdW5jdGlvbiB4Zyh0LGUpe3ZhciBuPW5ldyBiZztpZih0IGluc3RhbmNlb2YgYmcpdC5lYWNoKChmdW5jdGlvbih0LGUpe24uc2V0KGUsdCl9KSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KHQpKXt2YXIgaSxyPS0xLG89dC5sZW5ndGg7aWYobnVsbD09ZSlmb3IoOysrcjxvOyluLnNldChyLHRbcl0pO2Vsc2UgZm9yKDsrK3I8bzspbi5zZXQoZShpPXRbcl0scix0KSxpKX1lbHNlIGlmKHQpZm9yKHZhciBhIGluIHQpbi5zZXQoYSx0W2FdKTtyZXR1cm4gbn1mdW5jdGlvbiB3Zygpe3JldHVybnt9fWZ1bmN0aW9uIFNnKHQsZSxuKXt0W2VdPW59ZnVuY3Rpb24gTWcoKXtyZXR1cm4geGcoKX1mdW5jdGlvbiBFZyh0LGUsbil7dC5zZXQoZSxuKX1mdW5jdGlvbiBUZygpe31iZy5wcm90b3R5cGU9eGcucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpiZyxoYXM6ZnVuY3Rpb24odCl7cmV0dXJuIHZnK3QgaW4gdGhpc30sZ2V0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzW3ZnK3RdfSxzZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpc1t2Zyt0XT1lLHRoaXN9LHJlbW92ZTpmdW5jdGlvbih0KXt2YXIgZT12Zyt0O3JldHVybiBlIGluIHRoaXMmJmRlbGV0ZSB0aGlzW2VdfSxjbGVhcjpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT12ZyYmZGVsZXRlIHRoaXNbdF19LGtleXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcyllWzBdPT09dmcmJnQucHVzaChlLnNsaWNlKDEpKTtyZXR1cm4gdH0sdmFsdWVzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMpZVswXT09PXZnJiZ0LnB1c2godGhpc1tlXSk7cmV0dXJuIHR9LGVudHJpZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcyllWzBdPT09dmcmJnQucHVzaCh7a2V5OmUuc2xpY2UoMSksdmFsdWU6dGhpc1tlXX0pO3JldHVybiB0fSxzaXplOmZ1bmN0aW9uKCl7dmFyIHQ9MDtmb3IodmFyIGUgaW4gdGhpcyllWzBdPT09dmcmJisrdDtyZXR1cm4gdH0sZW1wdHk6ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcylpZih0WzBdPT09dmcpcmV0dXJuITE7cmV0dXJuITB9LGVhY2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMpZVswXT09PXZnJiZ0KHRoaXNbZV0sZS5zbGljZSgxKSx0aGlzKX19O3ZhciBDZz14Zy5wcm90b3R5cGU7ZnVuY3Rpb24gQWcodCxlKXt2YXIgbj1uZXcgVGc7aWYodCBpbnN0YW5jZW9mIFRnKXQuZWFjaCgoZnVuY3Rpb24odCl7bi5hZGQodCl9KSk7ZWxzZSBpZih0KXt2YXIgaT0tMSxyPXQubGVuZ3RoO2lmKG51bGw9PWUpZm9yKDsrK2k8cjspbi5hZGQodFtpXSk7ZWxzZSBmb3IoOysraTxyOyluLmFkZChlKHRbaV0saSx0KSl9cmV0dXJuIG59ZnVuY3Rpb24ga2codCl7dmFyIGU9W107Zm9yKHZhciBuIGluIHQpZS5wdXNoKG4pO3JldHVybiBlfVRnLnByb3RvdHlwZT1BZy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlRnLGhhczpDZy5oYXMsYWRkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzW3ZnKyh0Kz0iIildPXQsdGhpc30scmVtb3ZlOkNnLnJlbW92ZSxjbGVhcjpDZy5jbGVhcix2YWx1ZXM6Q2cua2V5cyxzaXplOkNnLnNpemUsZW1wdHk6Q2cuZW1wdHksZWFjaDpDZy5lYWNofTt2YXIgTGc9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIFBnKHQsZSl7cmV0dXJuIHQtZX1mdW5jdGlvbiBOZyh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gSWcodCxlKXtmb3IodmFyIG4saT0tMSxyPWUubGVuZ3RoOysraTxyOylpZihuPU9nKHQsZVtpXSkpcmV0dXJuIG47cmV0dXJuIDB9ZnVuY3Rpb24gT2codCxlKXtmb3IodmFyIG49ZVswXSxpPWVbMV0scj0tMSxvPTAsYT10Lmxlbmd0aCxzPWEtMTtvPGE7cz1vKyspe3ZhciBsPXRbb10sYz1sWzBdLHU9bFsxXSxoPXRbc10sZD1oWzBdLHA9aFsxXTtpZihSZyhsLGgsZSkpcmV0dXJuIDA7dT5pIT1wPmkmJm48KGQtYykqKGktdSkvKHAtdSkrYyYmKHI9LXIpfXJldHVybiByfWZ1bmN0aW9uIFJnKHQsZSxuKXt2YXIgaTtyZXR1cm4oZnVuY3Rpb24gcih0LGUsbil7cmV0dXJuKGVbMF0tdFswXSkqKG5bMV0tdFsxXSk9PShuWzBdLXRbMF0pKihlWzFdLXRbMV0pfSkodCxlLG4pJiYoZnVuY3Rpb24gbyh0LGUsbil7cmV0dXJuIHQ8PWUmJmU8PW58fG48PWUmJmU8PXR9KSh0W2k9Kyh0WzBdPT09ZVswXSldLG5baV0sZVtpXSl9ZnVuY3Rpb24gemcoKXt9dmFyIERnPVtbXSxbW1sxLDEuNV0sWy41LDFdXV0sW1tbMS41LDFdLFsxLDEuNV1dXSxbW1sxLjUsMV0sWy41LDFdXV0sW1tbMSwuNV0sWzEuNSwxXV1dLFtbWzEsMS41XSxbLjUsMV1dLFtbMSwuNV0sWzEuNSwxXV1dLFtbWzEsLjVdLFsxLDEuNV1dXSxbW1sxLC41XSxbLjUsMV1dXSxbW1suNSwxXSxbMSwuNV1dXSxbW1sxLDEuNV0sWzEsLjVdXV0sW1tbLjUsMV0sWzEsLjVdXSxbWzEuNSwxXSxbMSwxLjVdXV0sW1tbMS41LDFdLFsxLC41XV1dLFtbWy41LDFdLFsxLjUsMV1dXSxbW1sxLDEuNV0sWzEuNSwxXV1dLFtbWy41LDFdLFsxLDEuNV1dXSxbXV07ZnVuY3Rpb24gQmcoKXt2YXIgdD0xLGU9MSxuPVVsLGk9cztmdW5jdGlvbiByKHQpe3ZhciBlPW4odCk7aWYoQXJyYXkuaXNBcnJheShlKSllPWUuc2xpY2UoKS5zb3J0KFBnKTtlbHNle3ZhciBpPWtsKHQpLHI9aVswXSxhPWlbMV07ZT1WbChyLGEsZSksZT1SbChNYXRoLmZsb29yKHIvZSkqZSxNYXRoLmZsb29yKGEvZSkqZSxlKX1yZXR1cm4gZS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBvKHQsZSl9KSl9ZnVuY3Rpb24gbyhuLHIpe3ZhciBvPVtdLHM9W107cmV0dXJuKGZ1bmN0aW9uIGwobixpLHIpe3ZhciBvLHMsbCxjLHUsaD1uZXcgQXJyYXksZD1uZXcgQXJyYXk7Zm9yKG89cz0tMSxEZ1sobD1uWzBdPj1pKTw8MV0uZm9yRWFjaChwKTsrK288dC0xOylEZ1tsfChsPW5bbysxXT49aSk8PDFdLmZvckVhY2gocCk7Zm9yKERnW2w8PDBdLmZvckVhY2gocCk7KytzPGUtMTspe2ZvcihvPS0xLERnWyhsPW5bcyp0K3RdPj1pKTw8MXwoYz1uW3MqdF0+PWkpPDwyXS5mb3JFYWNoKHApOysrbzx0LTE7KXU9YyxEZ1tsfChsPW5bcyp0K3QrbysxXT49aSk8PDF8KGM9bltzKnQrbysxXT49aSk8PDJ8dTw8M10uZm9yRWFjaChwKTtEZ1tsfGM8PDNdLmZvckVhY2gocCl9Zm9yKG89LTEsRGdbKGM9bltzKnRdPj1pKTw8Ml0uZm9yRWFjaChwKTsrK288dC0xOyl1PWMsRGdbKGM9bltzKnQrbysxXT49aSk8PDJ8dTw8M10uZm9yRWFjaChwKTtmdW5jdGlvbiBwKHQpe3ZhciBlLG4saT1bdFswXVswXStvLHRbMF1bMV0rc10sbD1bdFsxXVswXStvLHRbMV1bMV0rc10sYz1hKGkpLHU9YShsKTsoZT1kW2NdKT8obj1oW3VdKT8oZGVsZXRlIGRbZS5lbmRdLGRlbGV0ZSBoW24uc3RhcnRdLGU9PT1uPyhlLnJpbmcucHVzaChsKSxyKGUucmluZykpOmhbZS5zdGFydF09ZFtuLmVuZF09e3N0YXJ0OmUuc3RhcnQsZW5kOm4uZW5kLHJpbmc6ZS5yaW5nLmNvbmNhdChuLnJpbmcpfSk6KGRlbGV0ZSBkW2UuZW5kXSxlLnJpbmcucHVzaChsKSxkW2UuZW5kPXVdPWUpOihlPWhbdV0pPyhuPWRbY10pPyhkZWxldGUgaFtlLnN0YXJ0XSxkZWxldGUgZFtuLmVuZF0sZT09PW4/KGUucmluZy5wdXNoKGwpLHIoZS5yaW5nKSk6aFtuLnN0YXJ0XT1kW2UuZW5kXT17c3RhcnQ6bi5zdGFydCxlbmQ6ZS5lbmQscmluZzpuLnJpbmcuY29uY2F0KGUucmluZyl9KTooZGVsZXRlIGhbZS5zdGFydF0sZS5yaW5nLnVuc2hpZnQoaSksaFtlLnN0YXJ0PWNdPWUpOmhbY109ZFt1XT17c3RhcnQ6YyxlbmQ6dSxyaW5nOltpLGxdfX1EZ1tjPDwzXS5mb3JFYWNoKHApfSkobixyLChmdW5jdGlvbih0KXtpKHQsbixyKSwoZnVuY3Rpb24gZSh0KXtmb3IodmFyIGU9MCxuPXQubGVuZ3RoLGk9dFtuLTFdWzFdKnRbMF1bMF0tdFtuLTFdWzBdKnRbMF1bMV07KytlPG47KWkrPXRbZS0xXVsxXSp0W2VdWzBdLXRbZS0xXVswXSp0W2VdWzFdO3JldHVybiBpfSkodCk+MD9vLnB1c2goW3RdKTpzLnB1c2godCl9KSkscy5mb3JFYWNoKChmdW5jdGlvbih0KXtmb3IodmFyIGUsbj0wLGk9by5sZW5ndGg7bjxpOysrbilpZigtMSE9PUlnKChlPW9bbl0pWzBdLHQpKXJldHVybiB2b2lkIGUucHVzaCh0KX0pKSx7dHlwZToiTXVsdGlQb2x5Z29uIix2YWx1ZTpyLGNvb3JkaW5hdGVzOm99fWZ1bmN0aW9uIGEoZSl7cmV0dXJuIDIqZVswXStlWzFdKih0KzEpKjR9ZnVuY3Rpb24gcyhuLGkscil7bi5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgbyxhPW5bMF0scz1uWzFdLGw9MHxhLGM9MHxzLHU9aVtjKnQrbF07YT4wJiZhPHQmJmw9PT1hJiYoblswXT1hKyhyLShvPWlbYyp0K2wtMV0pKS8odS1vKS0uNSkscz4wJiZzPGUmJmM9PT1zJiYoblsxXT1zKyhyLShvPWlbKGMtMSkqdCtsXSkpLyh1LW8pLS41KX0pKX1yZXR1cm4gci5jb250b3VyPW8sci5zaXplPWZ1bmN0aW9uKG4pe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVyblt0LGVdO3ZhciBpPU1hdGguY2VpbChuWzBdKSxvPU1hdGguY2VpbChuWzFdKTtpZighKGk+MCYmbz4wKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgc2l6ZSIpO3JldHVybiB0PWksZT1vLHJ9LHIudGhyZXNob2xkcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkFycmF5LmlzQXJyYXkodCk/TmcoTGcuY2FsbCh0KSk6TmcodCkscik6bn0sci5zbW9vdGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dD9zOnpnLHIpOmk9PT1zfSxyfWZ1bmN0aW9uIEhnKHQsZSxuKXtmb3IodmFyIGk9dC53aWR0aCxyPXQuaGVpZ2h0LG89MSsobjw8MSksYT0wO2E8cjsrK2EpZm9yKHZhciBzPTAsbD0wO3M8aStuOysrcylzPGkmJihsKz10LmRhdGFbcythKmldKSxzPj1uJiYocz49byYmKGwtPXQuZGF0YVtzLW8rYSppXSksZS5kYXRhW3MtbithKmldPWwvTWF0aC5taW4ocysxLGktMStvLXMsbykpfWZ1bmN0aW9uIEZnKHQsZSxuKXtmb3IodmFyIGk9dC53aWR0aCxyPXQuaGVpZ2h0LG89MSsobjw8MSksYT0wO2E8aTsrK2EpZm9yKHZhciBzPTAsbD0wO3M8cituOysrcylzPHImJihsKz10LmRhdGFbYStzKmldKSxzPj1uJiYocz49byYmKGwtPXQuZGF0YVthKyhzLW8pKmldKSxlLmRhdGFbYSsocy1uKSppXT1sL01hdGgubWluKHMrMSxyLTErby1zLG8pKX1mdW5jdGlvbiBWZyh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiBVZyh0KXtyZXR1cm4gdFsxXX1mdW5jdGlvbiBqZygpe3JldHVybiAxfXZhciBHZz17fSxXZz17fTtmdW5jdGlvbiBxZyh0KXtyZXR1cm4gbmV3IEZ1bmN0aW9uKCJkIiwicmV0dXJuIHsiK3QubWFwKChmdW5jdGlvbih0LGUpe3JldHVybiBKU09OLnN0cmluZ2lmeSh0KSsiOiBkWyIrZSsnXSB8fCAiIid9KSkuam9pbigiLCIpKyJ9Iil9ZnVuY3Rpb24gWWcodCl7dmFyIGU9T2JqZWN0LmNyZWF0ZShudWxsKSxuPVtdO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQpe2Zvcih2YXIgaSBpbiB0KWkgaW4gZXx8bi5wdXNoKGVbaV09aSl9KSksbn1mdW5jdGlvbiBYZyh0LGUpe3ZhciBuPXQrIiIsaT1uLmxlbmd0aDtyZXR1cm4gaTxlP25ldyBBcnJheShlLWkrMSkuam9pbigwKStuOm59ZnVuY3Rpb24gJGcodCl7dmFyIGU9bmV3IFJlZ0V4cCgnWyInK3QrIlxuXHJdIiksbj10LmNoYXJDb2RlQXQoMCk7ZnVuY3Rpb24gaSh0LGUpe3ZhciBpLHI9W10sbz10Lmxlbmd0aCxhPTAscz0wLGw9bzw9MCxjPSExO2Z1bmN0aW9uIHUoKXtpZihsKXJldHVybiBXZztpZihjKXJldHVybiBjPSExLEdnO3ZhciBlLGkscj1hO2lmKDM0PT09dC5jaGFyQ29kZUF0KHIpKXtmb3IoO2ErKzxvJiYzNCE9PXQuY2hhckNvZGVBdChhKXx8MzQ9PT10LmNoYXJDb2RlQXQoKythKTspO3JldHVybihlPWEpPj1vP2w9ITA6MTA9PT0oaT10LmNoYXJDb2RlQXQoYSsrKSk/Yz0hMDoxMz09PWkmJihjPSEwLDEwPT09dC5jaGFyQ29kZUF0KGEpJiYrK2EpLHQuc2xpY2UocisxLGUtMSkucmVwbGFjZSgvIiIvZywnIicpfWZvcig7YTxvOyl7aWYoMTA9PT0oaT10LmNoYXJDb2RlQXQoZT1hKyspKSljPSEwO2Vsc2UgaWYoMTM9PT1pKWM9ITAsMTA9PT10LmNoYXJDb2RlQXQoYSkmJisrYTtlbHNlIGlmKGkhPT1uKWNvbnRpbnVlO3JldHVybiB0LnNsaWNlKHIsZSl9cmV0dXJuIGw9ITAsdC5zbGljZShyLG8pfWZvcigxMD09PXQuY2hhckNvZGVBdChvLTEpJiYtLW8sMTM9PT10LmNoYXJDb2RlQXQoby0xKSYmLS1vOyhpPXUoKSkhPT1XZzspe2Zvcih2YXIgaD1bXTtpIT09R2cmJmkhPT1XZzspaC5wdXNoKGkpLGk9dSgpO2UmJm51bGw9PShoPWUoaCxzKyspKXx8ci5wdXNoKGgpfXJldHVybiByfWZ1bmN0aW9uIHIoZSxuKXtyZXR1cm4gZS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBuLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGEoZVt0XSl9KSkuam9pbih0KX0pKX1mdW5jdGlvbiBvKGUpe3JldHVybiBlLm1hcChhKS5qb2luKHQpfWZ1bmN0aW9uIGEodCl7cmV0dXJuIG51bGw9PXQ/IiI6dCBpbnN0YW5jZW9mIERhdGU/KGZ1bmN0aW9uIG4odCl7dmFyIGU9dC5nZXRVVENIb3VycygpLG49dC5nZXRVVENNaW51dGVzKCksaT10LmdldFVUQ1NlY29uZHMoKSxyPXQuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7cmV0dXJuIGlzTmFOKHQpPyJJbnZhbGlkIERhdGUiOihmdW5jdGlvbiBvKHQpe3JldHVybiB0PDA/Ii0iK1hnKC10LDYpOnQ+OTk5OT8iKyIrWGcodCw2KTpYZyh0LDQpfSkodC5nZXRVVENGdWxsWWVhcigpKSsiLSIrWGcodC5nZXRVVENNb250aCgpKzEsMikrIi0iK1hnKHQuZ2V0VVRDRGF0ZSgpLDIpKyhyPyJUIitYZyhlLDIpKyI6IitYZyhuLDIpKyI6IitYZyhpLDIpKyIuIitYZyhyLDMpKyJaIjppPyJUIitYZyhlLDIpKyI6IitYZyhuLDIpKyI6IitYZyhpLDIpKyJaIjpufHxlPyJUIitYZyhlLDIpKyI6IitYZyhuLDIpKyJaIjoiIil9KSh0KTplLnRlc3QodCs9IiIpPyciJyt0LnJlcGxhY2UoLyIvZywnIiInKSsnIic6dH1yZXR1cm57cGFyc2U6ZnVuY3Rpb24gcyh0LGUpe3ZhciBuLHIsbz1pKHQsKGZ1bmN0aW9uKHQsaSl7aWYobilyZXR1cm4gbih0LGktMSk7cj10LG49ZT8oZnVuY3Rpb24gbyh0LGUpe3ZhciBuPXFnKHQpO3JldHVybiBmdW5jdGlvbihpLHIpe3JldHVybiBlKG4oaSkscix0KX19KSh0LGUpOnFnKHQpfSkpO3JldHVybiBvLmNvbHVtbnM9cnx8W10sb30scGFyc2VSb3dzOmksZm9ybWF0OmZ1bmN0aW9uIGwoZSxuKXtyZXR1cm4gbnVsbD09biYmKG49WWcoZSkpLFtuLm1hcChhKS5qb2luKHQpXS5jb25jYXQocihlLG4pKS5qb2luKCJcbiIpfSxmb3JtYXRCb2R5OmZ1bmN0aW9uIGModCxlKXtyZXR1cm4gbnVsbD09ZSYmKGU9WWcodCkpLHIodCxlKS5qb2luKCJcbiIpfSxmb3JtYXRSb3dzOmZ1bmN0aW9uIHUodCl7cmV0dXJuIHQubWFwKG8pLmpvaW4oIlxuIil9LGZvcm1hdFJvdzpvLGZvcm1hdFZhbHVlOmF9fXZhciBLZz0kZygiLCIpLFpnPUtnLnBhcnNlLEpnPUtnLnBhcnNlUm93cyxRZz1LZy5mb3JtYXQsdF89S2cuZm9ybWF0Qm9keSxlXz1LZy5mb3JtYXRSb3dzLG5fPUtnLmZvcm1hdFJvdyxpXz1LZy5mb3JtYXRWYWx1ZSxyXz0kZygiXHQiKSxvXz1yXy5wYXJzZSxhXz1yXy5wYXJzZVJvd3Msc189cl8uZm9ybWF0LGxfPXJfLmZvcm1hdEJvZHksY189cl8uZm9ybWF0Um93cyx1Xz1yXy5mb3JtYXRSb3csaF89cl8uZm9ybWF0VmFsdWUsZF89bmV3IERhdGUoIjIwMTktMDEtMDFUMDA6MDAiKS5nZXRIb3VycygpfHxuZXcgRGF0ZSgiMjAxOS0wNy0wMVQwMDowMCIpLmdldEhvdXJzKCk7ZnVuY3Rpb24gcF8odCl7aWYoIXQub2spdGhyb3cgbmV3IEVycm9yKHQuc3RhdHVzKyIgIit0LnN0YXR1c1RleHQpO3JldHVybiB0LmJsb2IoKX1mdW5jdGlvbiBmXyh0KXtpZighdC5vayl0aHJvdyBuZXcgRXJyb3IodC5zdGF0dXMrIiAiK3Quc3RhdHVzVGV4dCk7cmV0dXJuIHQuYXJyYXlCdWZmZXIoKX1mdW5jdGlvbiBtXyh0KXtpZighdC5vayl0aHJvdyBuZXcgRXJyb3IodC5zdGF0dXMrIiAiK3Quc3RhdHVzVGV4dCk7cmV0dXJuIHQudGV4dCgpfWZ1bmN0aW9uIGdfKHQsZSl7cmV0dXJuIGZldGNoKHQsZSkudGhlbihtXyl9ZnVuY3Rpb24gX18odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbixpKXtyZXR1cm4gMj09PWFyZ3VtZW50cy5sZW5ndGgmJiJmdW5jdGlvbiI9PXR5cGVvZiBuJiYoaT1uLG49dm9pZCAwKSxnXyhlLG4pLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiB0KGUsaSl9KSl9fXZhciB5Xz1fXyhaZyksdl89X18ob18pO2Z1bmN0aW9uIGJfKHQpe2lmKCF0Lm9rKXRocm93IG5ldyBFcnJvcih0LnN0YXR1cysiICIrdC5zdGF0dXNUZXh0KTtpZigyMDQhPT10LnN0YXR1cyYmMjA1IT09dC5zdGF0dXMpcmV0dXJuIHQuanNvbigpfWZ1bmN0aW9uIHhfKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3JldHVybiBnXyhlLG4pLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybihuZXcgRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoZSx0KX0pKX19dmFyIHdfPXhfKCJhcHBsaWNhdGlvbi94bWwiKSxTXz14XygidGV4dC9odG1sIiksTV89eF8oImltYWdlL3N2Zyt4bWwiKTtmdW5jdGlvbiBFXyh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gVF8oKXtyZXR1cm4gMWUtNiooTWF0aC5yYW5kb20oKS0uNSl9ZnVuY3Rpb24gQ18odCxlLG4saSl7aWYoaXNOYU4oZSl8fGlzTmFOKG4pKXJldHVybiB0O3ZhciByLG8sYSxzLGwsYyx1LGgsZCxwPXQuX3Jvb3QsZj17ZGF0YTppfSxtPXQuX3gwLGc9dC5feTAsXz10Ll94MSx5PXQuX3kxO2lmKCFwKXJldHVybiB0Ll9yb290PWYsdDtmb3IoO3AubGVuZ3RoOylpZigoYz1lPj0obz0obStfKS8yKSk/bT1vOl89bywodT1uPj0oYT0oZyt5KS8yKSk/Zz1hOnk9YSxyPXAsIShwPXBbaD11PDwxfGNdKSlyZXR1cm4gcltoXT1mLHQ7aWYocz0rdC5feC5jYWxsKG51bGwscC5kYXRhKSxsPSt0Ll95LmNhbGwobnVsbCxwLmRhdGEpLGU9PT1zJiZuPT09bClyZXR1cm4gZi5uZXh0PXAscj9yW2hdPWY6dC5fcm9vdD1mLHQ7ZG97cj1yP3JbaF09bmV3IEFycmF5KDQpOnQuX3Jvb3Q9bmV3IEFycmF5KDQpLChjPWU+PShvPShtK18pLzIpKT9tPW86Xz1vLCh1PW4+PShhPShnK3kpLzIpKT9nPWE6eT1hfXdoaWxlKChoPXU8PDF8Yyk9PShkPShsPj1hKTw8MXxzPj1vKSk7cmV0dXJuIHJbZF09cCxyW2hdPWYsdH1mdW5jdGlvbiBBXyh0LGUsbixpLHIpe3RoaXMubm9kZT10LHRoaXMueDA9ZSx0aGlzLnkwPW4sdGhpcy54MT1pLHRoaXMueTE9cn1mdW5jdGlvbiBrXyh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiBMXyh0KXtyZXR1cm4gdFsxXX1mdW5jdGlvbiBQXyh0LGUsbil7dmFyIGk9bmV3IE5fKG51bGw9PWU/a186ZSxudWxsPT1uP0xfOm4sTmFOLE5hTixOYU4sTmFOKTtyZXR1cm4gbnVsbD09dD9pOmkuYWRkQWxsKHQpfWZ1bmN0aW9uIE5fKHQsZSxuLGkscixvKXt0aGlzLl94PXQsdGhpcy5feT1lLHRoaXMuX3gwPW4sdGhpcy5feTA9aSx0aGlzLl94MT1yLHRoaXMuX3kxPW8sdGhpcy5fcm9vdD12b2lkIDB9ZnVuY3Rpb24gSV8odCl7Zm9yKHZhciBlPXtkYXRhOnQuZGF0YX0sbj1lO3Q9dC5uZXh0OyluPW4ubmV4dD17ZGF0YTp0LmRhdGF9O3JldHVybiBlfXZhciBPXz1QXy5wcm90b3R5cGU9Tl8ucHJvdG90eXBlO2Z1bmN0aW9uIFJfKHQpe3JldHVybiB0LngrdC52eH1mdW5jdGlvbiB6Xyh0KXtyZXR1cm4gdC55K3Qudnl9ZnVuY3Rpb24gRF8odCl7cmV0dXJuIHQuaW5kZXh9ZnVuY3Rpb24gQl8odCxlKXt2YXIgbj10LmdldChlKTtpZighbil0aHJvdyBuZXcgRXJyb3IoIm1pc3Npbmc6ICIrZSk7cmV0dXJuIG59ZnVuY3Rpb24gSF8odCl7cmV0dXJuIHQueH1mdW5jdGlvbiBGXyh0KXtyZXR1cm4gdC55fU9fLmNvcHk9ZnVuY3Rpb24oKXt2YXIgdCxlLG49bmV3IE5fKHRoaXMuX3gsdGhpcy5feSx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSksaT10aGlzLl9yb290O2lmKCFpKXJldHVybiBuO2lmKCFpLmxlbmd0aClyZXR1cm4gbi5fcm9vdD1JXyhpKSxuO2Zvcih0PVt7c291cmNlOmksdGFyZ2V0Om4uX3Jvb3Q9bmV3IEFycmF5KDQpfV07aT10LnBvcCgpOylmb3IodmFyIHI9MDtyPDQ7KytyKShlPWkuc291cmNlW3JdKSYmKGUubGVuZ3RoP3QucHVzaCh7c291cmNlOmUsdGFyZ2V0OmkudGFyZ2V0W3JdPW5ldyBBcnJheSg0KX0pOmkudGFyZ2V0W3JdPUlfKGUpKTtyZXR1cm4gbn0sT18uYWRkPWZ1bmN0aW9uIFZfKHQpe3ZhciBlPSt0aGlzLl94LmNhbGwobnVsbCx0KSxuPSt0aGlzLl95LmNhbGwobnVsbCx0KTtyZXR1cm4gQ18odGhpcy5jb3ZlcihlLG4pLGUsbix0KX0sT18uYWRkQWxsPWZ1bmN0aW9uIFVfKHQpe3ZhciBlLG4saSxyLG89dC5sZW5ndGgsYT1uZXcgQXJyYXkobykscz1uZXcgQXJyYXkobyksbD0xLzAsYz0xLzAsdT0tMS8wLGg9LTEvMDtmb3Iobj0wO248bzsrK24paXNOYU4oaT0rdGhpcy5feC5jYWxsKG51bGwsZT10W25dKSl8fGlzTmFOKHI9K3RoaXMuX3kuY2FsbChudWxsLGUpKXx8KGFbbl09aSxzW25dPXIsaTxsJiYobD1pKSxpPnUmJih1PWkpLHI8YyYmKGM9cikscj5oJiYoaD1yKSk7aWYobD51fHxjPmgpcmV0dXJuIHRoaXM7Zm9yKHRoaXMuY292ZXIobCxjKS5jb3Zlcih1LGgpLG49MDtuPG87KytuKUNfKHRoaXMsYVtuXSxzW25dLHRbbl0pO3JldHVybiB0aGlzfSxPXy5jb3Zlcj1mdW5jdGlvbiBqXyh0LGUpe2lmKGlzTmFOKHQ9K3QpfHxpc05hTihlPStlKSlyZXR1cm4gdGhpczt2YXIgbj10aGlzLl94MCxpPXRoaXMuX3kwLHI9dGhpcy5feDEsbz10aGlzLl95MTtpZihpc05hTihuKSlyPShuPU1hdGguZmxvb3IodCkpKzEsbz0oaT1NYXRoLmZsb29yKGUpKSsxO2Vsc2V7Zm9yKHZhciBhLHMsbD1yLW4sYz10aGlzLl9yb290O24+dHx8dD49cnx8aT5lfHxlPj1vOylzd2l0Y2gocz0oZTxpKTw8MXx0PG4sKGE9bmV3IEFycmF5KDQpKVtzXT1jLGM9YSxsKj0yLHMpe2Nhc2UgMDpyPW4rbCxvPWkrbDticmVhaztjYXNlIDE6bj1yLWwsbz1pK2w7YnJlYWs7Y2FzZSAyOnI9bitsLGk9by1sO2JyZWFrO2Nhc2UgMzpuPXItbCxpPW8tbH10aGlzLl9yb290JiZ0aGlzLl9yb290Lmxlbmd0aCYmKHRoaXMuX3Jvb3Q9Yyl9cmV0dXJuIHRoaXMuX3gwPW4sdGhpcy5feTA9aSx0aGlzLl94MT1yLHRoaXMuX3kxPW8sdGhpc30sT18uZGF0YT1mdW5jdGlvbiBHXygpe3ZhciB0PVtdO3JldHVybiB0aGlzLnZpc2l0KChmdW5jdGlvbihlKXtpZighZS5sZW5ndGgpZG97dC5wdXNoKGUuZGF0YSl9d2hpbGUoZT1lLm5leHQpfSkpLHR9LE9fLmV4dGVudD1mdW5jdGlvbiBXXyh0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmNvdmVyKCt0WzBdWzBdLCt0WzBdWzFdKS5jb3ZlcigrdFsxXVswXSwrdFsxXVsxXSk6aXNOYU4odGhpcy5feDApP3ZvaWQgMDpbW3RoaXMuX3gwLHRoaXMuX3kwXSxbdGhpcy5feDEsdGhpcy5feTFdXX0sT18uZmluZD1mdW5jdGlvbiBxXyh0LGUsbil7dmFyIGkscixvLGEscyxsLGMsdT10aGlzLl94MCxoPXRoaXMuX3kwLGQ9dGhpcy5feDEscD10aGlzLl95MSxmPVtdLG09dGhpcy5fcm9vdDtmb3IobSYmZi5wdXNoKG5ldyBBXyhtLHUsaCxkLHApKSxudWxsPT1uP249MS8wOih1PXQtbixoPWUtbixkPXQrbixwPWUrbixuKj1uKTtsPWYucG9wKCk7KWlmKCEoIShtPWwubm9kZSl8fChyPWwueDApPmR8fChvPWwueTApPnB8fChhPWwueDEpPHV8fChzPWwueTEpPGgpKWlmKG0ubGVuZ3RoKXt2YXIgZz0ocithKS8yLF89KG8rcykvMjtmLnB1c2gobmV3IEFfKG1bM10sZyxfLGEscyksbmV3IEFfKG1bMl0scixfLGcscyksbmV3IEFfKG1bMV0sZyxvLGEsXyksbmV3IEFfKG1bMF0scixvLGcsXykpLChjPShlPj1fKTw8MXx0Pj1nKSYmKGw9ZltmLmxlbmd0aC0xXSxmW2YubGVuZ3RoLTFdPWZbZi5sZW5ndGgtMS1jXSxmW2YubGVuZ3RoLTEtY109bCl9ZWxzZXt2YXIgeT10LSt0aGlzLl94LmNhbGwobnVsbCxtLmRhdGEpLHY9ZS0rdGhpcy5feS5jYWxsKG51bGwsbS5kYXRhKSxiPXkqeSt2KnY7aWYoYjxuKXt2YXIgeD1NYXRoLnNxcnQobj1iKTt1PXQteCxoPWUteCxkPXQreCxwPWUreCxpPW0uZGF0YX19cmV0dXJuIGl9LE9fLnJlbW92ZT1mdW5jdGlvbiBZXyh0KXtpZihpc05hTihvPSt0aGlzLl94LmNhbGwobnVsbCx0KSl8fGlzTmFOKGE9K3RoaXMuX3kuY2FsbChudWxsLHQpKSlyZXR1cm4gdGhpczt2YXIgZSxuLGkscixvLGEscyxsLGMsdSxoLGQscD10aGlzLl9yb290LGY9dGhpcy5feDAsbT10aGlzLl95MCxnPXRoaXMuX3gxLF89dGhpcy5feTE7aWYoIXApcmV0dXJuIHRoaXM7aWYocC5sZW5ndGgpZm9yKDs7KXtpZigoYz1vPj0ocz0oZitnKS8yKSk/Zj1zOmc9cywodT1hPj0obD0obStfKS8yKSk/bT1sOl89bCxlPXAsIShwPXBbaD11PDwxfGNdKSlyZXR1cm4gdGhpcztpZighcC5sZW5ndGgpYnJlYWs7KGVbaCsxJjNdfHxlW2grMiYzXXx8ZVtoKzMmM10pJiYobj1lLGQ9aCl9Zm9yKDtwLmRhdGEhPT10OylpZihpPXAsIShwPXAubmV4dCkpcmV0dXJuIHRoaXM7cmV0dXJuKHI9cC5uZXh0KSYmZGVsZXRlIHAubmV4dCxpPyhyP2kubmV4dD1yOmRlbGV0ZSBpLm5leHQsdGhpcyk6ZT8ocj9lW2hdPXI6ZGVsZXRlIGVbaF0sKHA9ZVswXXx8ZVsxXXx8ZVsyXXx8ZVszXSkmJnA9PT0oZVszXXx8ZVsyXXx8ZVsxXXx8ZVswXSkmJiFwLmxlbmd0aCYmKG4/bltkXT1wOnRoaXMuX3Jvb3Q9cCksdGhpcyk6KHRoaXMuX3Jvb3Q9cix0aGlzKX0sT18ucmVtb3ZlQWxsPWZ1bmN0aW9uIFhfKHQpe2Zvcih2YXIgZT0wLG49dC5sZW5ndGg7ZTxuOysrZSl0aGlzLnJlbW92ZSh0W2VdKTtyZXR1cm4gdGhpc30sT18ucm9vdD1mdW5jdGlvbiAkXygpe3JldHVybiB0aGlzLl9yb290fSxPXy5zaXplPWZ1bmN0aW9uIEtfKCl7dmFyIHQ9MDtyZXR1cm4gdGhpcy52aXNpdCgoZnVuY3Rpb24oZSl7aWYoIWUubGVuZ3RoKWRveysrdH13aGlsZShlPWUubmV4dCl9KSksdH0sT18udmlzaXQ9ZnVuY3Rpb24gWl8odCl7dmFyIGUsbixpLHIsbyxhLHM9W10sbD10aGlzLl9yb290O2ZvcihsJiZzLnB1c2gobmV3IEFfKGwsdGhpcy5feDAsdGhpcy5feTAsdGhpcy5feDEsdGhpcy5feTEpKTtlPXMucG9wKCk7KWlmKCF0KGw9ZS5ub2RlLGk9ZS54MCxyPWUueTAsbz1lLngxLGE9ZS55MSkmJmwubGVuZ3RoKXt2YXIgYz0oaStvKS8yLHU9KHIrYSkvMjsobj1sWzNdKSYmcy5wdXNoKG5ldyBBXyhuLGMsdSxvLGEpKSwobj1sWzJdKSYmcy5wdXNoKG5ldyBBXyhuLGksdSxjLGEpKSwobj1sWzFdKSYmcy5wdXNoKG5ldyBBXyhuLGMscixvLHUpKSwobj1sWzBdKSYmcy5wdXNoKG5ldyBBXyhuLGkscixjLHUpKX1yZXR1cm4gdGhpc30sT18udmlzaXRBZnRlcj1mdW5jdGlvbiBKXyh0KXt2YXIgZSxuPVtdLGk9W107Zm9yKHRoaXMuX3Jvb3QmJm4ucHVzaChuZXcgQV8odGhpcy5fcm9vdCx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO2U9bi5wb3AoKTspe3ZhciByPWUubm9kZTtpZihyLmxlbmd0aCl7dmFyIG8sYT1lLngwLHM9ZS55MCxsPWUueDEsYz1lLnkxLHU9KGErbCkvMixoPShzK2MpLzI7KG89clswXSkmJm4ucHVzaChuZXcgQV8obyxhLHMsdSxoKSksKG89clsxXSkmJm4ucHVzaChuZXcgQV8obyx1LHMsbCxoKSksKG89clsyXSkmJm4ucHVzaChuZXcgQV8obyxhLGgsdSxjKSksKG89clszXSkmJm4ucHVzaChuZXcgQV8obyx1LGgsbCxjKSl9aS5wdXNoKGUpfWZvcig7ZT1pLnBvcCgpOyl0KGUubm9kZSxlLngwLGUueTAsZS54MSxlLnkxKTtyZXR1cm4gdGhpc30sT18ueD1mdW5jdGlvbiBRXyh0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feD10LHRoaXMpOnRoaXMuX3h9LE9fLnk9ZnVuY3Rpb24gdHkodCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX3k9dCx0aGlzKTp0aGlzLl95fTt2YXIgZXk9TWF0aC5QSSooMy1NYXRoLnNxcnQoNSkpO2Z1bmN0aW9uIG55KHQsZSl7aWYoKG49KHQ9ZT90LnRvRXhwb25lbnRpYWwoZS0xKTp0LnRvRXhwb25lbnRpYWwoKSkuaW5kZXhPZigiZSIpKTwwKXJldHVybiBudWxsO3ZhciBuLGk9dC5zbGljZSgwLG4pO3JldHVybltpLmxlbmd0aD4xP2lbMF0raS5zbGljZSgyKTppLCt0LnNsaWNlKG4rMSldfWZ1bmN0aW9uIGl5KHQpe3JldHVybih0PW55KE1hdGguYWJzKHQpKSk/dFsxXTpOYU59dmFyIHJ5LG95PS9eKD86KC4pPyhbPD49Xl0pKT8oWytcLSggXSk/KFskI10pPygwKT8oXGQrKT8oLCk/KFwuXGQrKT8ofik/KFthLXolXSk/JC9pO2Z1bmN0aW9uIGF5KHQpe2lmKCEoZT1veS5leGVjKHQpKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9ybWF0OiAiK3QpO3ZhciBlO3JldHVybiBuZXcgc3koe2ZpbGw6ZVsxXSxhbGlnbjplWzJdLHNpZ246ZVszXSxzeW1ib2w6ZVs0XSx6ZXJvOmVbNV0sd2lkdGg6ZVs2XSxjb21tYTplWzddLHByZWNpc2lvbjplWzhdJiZlWzhdLnNsaWNlKDEpLHRyaW06ZVs5XSx0eXBlOmVbMTBdfSl9ZnVuY3Rpb24gc3kodCl7dGhpcy5maWxsPXZvaWQgMD09PXQuZmlsbD8iICI6dC5maWxsKyIiLHRoaXMuYWxpZ249dm9pZCAwPT09dC5hbGlnbj8iPiI6dC5hbGlnbisiIix0aGlzLnNpZ249dm9pZCAwPT09dC5zaWduPyItIjp0LnNpZ24rIiIsdGhpcy5zeW1ib2w9dm9pZCAwPT09dC5zeW1ib2w/IiI6dC5zeW1ib2wrIiIsdGhpcy56ZXJvPSEhdC56ZXJvLHRoaXMud2lkdGg9dm9pZCAwPT09dC53aWR0aD92b2lkIDA6K3Qud2lkdGgsdGhpcy5jb21tYT0hIXQuY29tbWEsdGhpcy5wcmVjaXNpb249dm9pZCAwPT09dC5wcmVjaXNpb24/dm9pZCAwOit0LnByZWNpc2lvbix0aGlzLnRyaW09ISF0LnRyaW0sdGhpcy50eXBlPXZvaWQgMD09PXQudHlwZT8iIjp0LnR5cGUrIiJ9ZnVuY3Rpb24gbHkodCxlKXt2YXIgbj1ueSh0LGUpO2lmKCFuKXJldHVybiB0KyIiO3ZhciBpPW5bMF0scj1uWzFdO3JldHVybiByPDA/IjAuIituZXcgQXJyYXkoLXIpLmpvaW4oIjAiKStpOmkubGVuZ3RoPnIrMT9pLnNsaWNlKDAscisxKSsiLiIraS5zbGljZShyKzEpOmkrbmV3IEFycmF5KHItaS5sZW5ndGgrMikuam9pbigiMCIpfWF5LnByb3RvdHlwZT1zeS5wcm90b3R5cGUsc3kucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsbCt0aGlzLmFsaWduK3RoaXMuc2lnbit0aGlzLnN5bWJvbCsodGhpcy56ZXJvPyIwIjoiIikrKHZvaWQgMD09PXRoaXMud2lkdGg/IiI6TWF0aC5tYXgoMSwwfHRoaXMud2lkdGgpKSsodGhpcy5jb21tYT8iLCI6IiIpKyh2b2lkIDA9PT10aGlzLnByZWNpc2lvbj8iIjoiLiIrTWF0aC5tYXgoMCwwfHRoaXMucHJlY2lzaW9uKSkrKHRoaXMudHJpbT8ifiI6IiIpK3RoaXMudHlwZX07dmFyIGN5PXsiJSI6ZnVuY3Rpb24odCxlKXtyZXR1cm4oMTAwKnQpLnRvRml4ZWQoZSl9LGI6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoMil9LGM6ZnVuY3Rpb24odCl7cmV0dXJuIHQrIiJ9LGQ6ZnVuY3Rpb24gdXkodCl7cmV0dXJuIE1hdGguYWJzKHQ9TWF0aC5yb3VuZCh0KSk+PTFlMjE/dC50b0xvY2FsZVN0cmluZygiZW4iKS5yZXBsYWNlKC8sL2csIiIpOnQudG9TdHJpbmcoMTApfSxlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudG9FeHBvbmVudGlhbChlKX0sZjpmdW5jdGlvbih0LGUpe3JldHVybiB0LnRvRml4ZWQoZSl9LGc6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50b1ByZWNpc2lvbihlKX0sbzpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZyg4KX0scDpmdW5jdGlvbih0LGUpe3JldHVybiBseSgxMDAqdCxlKX0scjpseSxzOmZ1bmN0aW9uIGh5KHQsZSl7dmFyIG49bnkodCxlKTtpZighbilyZXR1cm4gdCsiIjt2YXIgaT1uWzBdLHI9blsxXSxvPXItKHJ5PTMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKHIvMykpKSkrMSxhPWkubGVuZ3RoO3JldHVybiBvPT09YT9pOm8+YT9pK25ldyBBcnJheShvLWErMSkuam9pbigiMCIpOm8+MD9pLnNsaWNlKDAsbykrIi4iK2kuc2xpY2Uobyk6IjAuIituZXcgQXJyYXkoMS1vKS5qb2luKCIwIikrbnkodCxNYXRoLm1heCgwLGUrby0xKSlbMF19LFg6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9LHg6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoMTYpfX07ZnVuY3Rpb24gZHkodCl7cmV0dXJuIHR9dmFyIHB5LGZ5LG15LGd5PUFycmF5LnByb3RvdHlwZS5tYXAsX3k9WyJ5IiwieiIsImEiLCJmIiwicCIsIm4iLCLCtSIsIm0iLCIiLCJrIiwiTSIsIkciLCJUIiwiUCIsIkUiLCJaIiwiWSJdO2Z1bmN0aW9uIHl5KHQpe3ZhciBlPXZvaWQgMD09PXQuZ3JvdXBpbmd8fHZvaWQgMD09PXQudGhvdXNhbmRzP2R5OihmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4saSl7Zm9yKHZhciByPW4ubGVuZ3RoLG89W10sYT0wLHM9dFswXSxsPTA7cj4wJiZzPjAmJihsK3MrMT5pJiYocz1NYXRoLm1heCgxLGktbCkpLG8ucHVzaChuLnN1YnN0cmluZyhyLT1zLHIrcykpLCEoKGwrPXMrMSk+aSkpOylzPXRbYT0oYSsxKSV0Lmxlbmd0aF07cmV0dXJuIG8ucmV2ZXJzZSgpLmpvaW4oZSl9fSkoZ3kuY2FsbCh0Lmdyb3VwaW5nLE51bWJlciksdC50aG91c2FuZHMrIiIpLGk9dm9pZCAwPT09dC5jdXJyZW5jeT8iIjp0LmN1cnJlbmN5WzBdKyIiLHI9dm9pZCAwPT09dC5jdXJyZW5jeT8iIjp0LmN1cnJlbmN5WzFdKyIiLG89dm9pZCAwPT09dC5kZWNpbWFsPyIuIjp0LmRlY2ltYWwrIiIsYT12b2lkIDA9PT10Lm51bWVyYWxzP2R5OihmdW5jdGlvbiBzKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9bMC05XS9nLChmdW5jdGlvbihlKXtyZXR1cm4gdFsrZV19KSl9fSkoZ3kuY2FsbCh0Lm51bWVyYWxzLFN0cmluZykpLGw9dm9pZCAwPT09dC5wZXJjZW50PyIlIjp0LnBlcmNlbnQrIiIsYz12b2lkIDA9PT10Lm1pbnVzPyItIjp0Lm1pbnVzKyIiLHU9dm9pZCAwPT09dC5uYW4/Ik5hTiI6dC5uYW4rIiI7ZnVuY3Rpb24gaCh0KXt2YXIgbj0odD1heSh0KSkuZmlsbCxzPXQuYWxpZ24saD10LnNpZ24sZD10LnN5bWJvbCxwPXQuemVybyxmPXQud2lkdGgsbT10LmNvbW1hLGc9dC5wcmVjaXNpb24sXz10LnRyaW0seT10LnR5cGU7Im4iPT09eT8obT0hMCx5PSJnIik6Y3lbeV18fCh2b2lkIDA9PT1nJiYoZz0xMiksXz0hMCx5PSJnIiksKHB8fCIwIj09PW4mJiI9Ij09PXMpJiYocD0hMCxuPSIwIixzPSI9Iik7dmFyIHY9IiQiPT09ZD9pOiIjIj09PWQmJi9bYm94WF0vLnRlc3QoeSk/IjAiK3kudG9Mb3dlckNhc2UoKToiIixiPSIkIj09PWQ/cjovWyVwXS8udGVzdCh5KT9sOiIiLHg9Y3lbeV0sdz0vW2RlZmdwcnMlXS8udGVzdCh5KTtmdW5jdGlvbiBTKHQpe3ZhciBpLHIsbCxkPXYsUz1iO2lmKCJjIj09PXkpUz14KHQpK1MsdD0iIjtlbHNle3ZhciBNPSh0PSt0KTwwfHwxL3Q8MDtpZih0PWlzTmFOKHQpP3U6eChNYXRoLmFicyh0KSxnKSxfJiYodD0oZnVuY3Rpb24gRSh0KXt0OmZvcih2YXIgZSxuPXQubGVuZ3RoLGk9MSxyPS0xO2k8bjsrK2kpc3dpdGNoKHRbaV0pe2Nhc2UiLiI6cj1lPWk7YnJlYWs7Y2FzZSIwIjowPT09ciYmKHI9aSksZT1pO2JyZWFrO2RlZmF1bHQ6aWYoISt0W2ldKWJyZWFrIHQ7cj4wJiYocj0wKX1yZXR1cm4gcj4wP3Quc2xpY2UoMCxyKSt0LnNsaWNlKGUrMSk6dH0pKHQpKSxNJiYwPT0rdCYmIisiIT09aCYmKE09ITEpLGQ9KE0/IigiPT09aD9oOmM6Ii0iPT09aHx8IigiPT09aD8iIjpoKStkLFM9KCJzIj09PXk/X3lbOCtyeS8zXToiIikrUysoTSYmIigiPT09aD8iKSI6IiIpLHcpZm9yKGk9LTEscj10Lmxlbmd0aDsrK2k8cjspaWYoNDg+KGw9dC5jaGFyQ29kZUF0KGkpKXx8bD41Nyl7Uz0oNDY9PT1sP28rdC5zbGljZShpKzEpOnQuc2xpY2UoaSkpK1MsdD10LnNsaWNlKDAsaSk7YnJlYWt9fW0mJiFwJiYodD1lKHQsMS8wKSk7dmFyIFQ9ZC5sZW5ndGgrdC5sZW5ndGgrUy5sZW5ndGgsQz1UPGY/bmV3IEFycmF5KGYtVCsxKS5qb2luKG4pOiIiO3N3aXRjaChtJiZwJiYodD1lKEMrdCxDLmxlbmd0aD9mLVMubGVuZ3RoOjEvMCksQz0iIikscyl7Y2FzZSI8Ijp0PWQrdCtTK0M7YnJlYWs7Y2FzZSI9Ijp0PWQrQyt0K1M7YnJlYWs7Y2FzZSJeIjp0PUMuc2xpY2UoMCxUPUMubGVuZ3RoPj4xKStkK3QrUytDLnNsaWNlKFQpO2JyZWFrO2RlZmF1bHQ6dD1DK2QrdCtTfXJldHVybiBhKHQpfXJldHVybiBnPXZvaWQgMD09PWc/NjovW2dwcnNdLy50ZXN0KHkpP01hdGgubWF4KDEsTWF0aC5taW4oMjEsZykpOk1hdGgubWF4KDAsTWF0aC5taW4oMjAsZykpLFMudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdCsiIn0sU31yZXR1cm57Zm9ybWF0OmgsZm9ybWF0UHJlZml4OmZ1bmN0aW9uIGQodCxlKXt2YXIgbj1oKCgodD1heSh0KSkudHlwZT0iZiIsdCkpLGk9MypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoaXkoZSkvMykpKSxyPU1hdGgucG93KDEwLC1pKSxvPV95WzgraS8zXTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG4ocip0KStvfX19fWZ1bmN0aW9uIHZ5KHQpe3JldHVybiBweT15eSh0KSxmeT1weS5mb3JtYXQsbXk9cHkuZm9ybWF0UHJlZml4LHB5fWZ1bmN0aW9uIGJ5KHQpe3JldHVybiBNYXRoLm1heCgwLC1peShNYXRoLmFicyh0KSkpfWZ1bmN0aW9uIHh5KHQsZSl7cmV0dXJuIE1hdGgubWF4KDAsMypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoaXkoZSkvMykpKS1peShNYXRoLmFicyh0KSkpfWZ1bmN0aW9uIHd5KHQsZSl7cmV0dXJuIHQ9TWF0aC5hYnModCksZT1NYXRoLmFicyhlKS10LE1hdGgubWF4KDAsaXkoZSktaXkodCkpKzF9ZnVuY3Rpb24gU3koKXtyZXR1cm4gbmV3IE15fWZ1bmN0aW9uIE15KCl7dGhpcy5yZXNldCgpfXZ5KHtkZWNpbWFsOiIuIix0aG91c2FuZHM6IiwiLGdyb3VwaW5nOlszXSxjdXJyZW5jeTpbIiQiLCIiXSxtaW51czoiLSJ9KSxNeS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOk15LHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5zPXRoaXMudD0wfSxhZGQ6ZnVuY3Rpb24odCl7VHkoRXksdCx0aGlzLnQpLFR5KHRoaXMsRXkucyx0aGlzLnMpLHRoaXMucz90aGlzLnQrPUV5LnQ6dGhpcy5zPUV5LnR9LHZhbHVlT2Y6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zfX07dmFyIEV5PW5ldyBNeTtmdW5jdGlvbiBUeSh0LGUsbil7dmFyIGk9dC5zPWUrbixyPWktZTt0LnQ9ZS0oaS1yKSsobi1yKX12YXIgQ3k9MWUtNixBeT0xZS0xMixreT1NYXRoLlBJLEx5PWt5LzIsUHk9a3kvNCxOeT0yKmt5LEl5PTE4MC9reSxPeT1reS8xODAsUnk9TWF0aC5hYnMsenk9TWF0aC5hdGFuLER5PU1hdGguYXRhbjIsQnk9TWF0aC5jb3MsSHk9TWF0aC5jZWlsLEZ5PU1hdGguZXhwLFZ5PU1hdGgubG9nLFV5PU1hdGgucG93LGp5PU1hdGguc2luLEd5PU1hdGguc2lnbnx8ZnVuY3Rpb24odCl7cmV0dXJuIHQ+MD8xOnQ8MD8tMTowfSxXeT1NYXRoLnNxcnQscXk9TWF0aC50YW47ZnVuY3Rpb24gWXkodCl7cmV0dXJuIHQ+MT8wOnQ8LTE/a3k6TWF0aC5hY29zKHQpfWZ1bmN0aW9uIFh5KHQpe3JldHVybiB0PjE/THk6dDwtMT8tTHk6TWF0aC5hc2luKHQpfWZ1bmN0aW9uICR5KHQpe3JldHVybih0PWp5KHQvMikpKnR9ZnVuY3Rpb24gS3koKXt9ZnVuY3Rpb24gWnkodCxlKXt0JiZReS5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpJiZReVt0LnR5cGVdKHQsZSl9dmFyIEp5PXtGZWF0dXJlOmZ1bmN0aW9uKHQsZSl7WnkodC5nZW9tZXRyeSxlKX0sRmVhdHVyZUNvbGxlY3Rpb246ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5mZWF0dXJlcyxpPS0xLHI9bi5sZW5ndGg7KytpPHI7KVp5KG5baV0uZ2VvbWV0cnksZSl9fSxReT17U3BoZXJlOmZ1bmN0aW9uKHQsZSl7ZS5zcGhlcmUoKX0sUG9pbnQ6ZnVuY3Rpb24odCxlKXtlLnBvaW50KCh0PXQuY29vcmRpbmF0ZXMpWzBdLHRbMV0sdFsyXSl9LE11bHRpUG9pbnQ6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5jb29yZGluYXRlcyxpPS0xLHI9bi5sZW5ndGg7KytpPHI7KWUucG9pbnQoKHQ9bltpXSlbMF0sdFsxXSx0WzJdKX0sTGluZVN0cmluZzpmdW5jdGlvbih0LGUpe3R2KHQuY29vcmRpbmF0ZXMsZSwwKX0sTXVsdGlMaW5lU3RyaW5nOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXQuY29vcmRpbmF0ZXMsaT0tMSxyPW4ubGVuZ3RoOysraTxyOyl0dihuW2ldLGUsMCl9LFBvbHlnb246ZnVuY3Rpb24odCxlKXtldih0LmNvb3JkaW5hdGVzLGUpfSxNdWx0aVBvbHlnb246ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5jb29yZGluYXRlcyxpPS0xLHI9bi5sZW5ndGg7KytpPHI7KWV2KG5baV0sZSl9LEdlb21ldHJ5Q29sbGVjdGlvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10Lmdlb21ldHJpZXMsaT0tMSxyPW4ubGVuZ3RoOysraTxyOylaeShuW2ldLGUpfX07ZnVuY3Rpb24gdHYodCxlLG4pe3ZhciBpLHI9LTEsbz10Lmxlbmd0aC1uO2ZvcihlLmxpbmVTdGFydCgpOysrcjxvOyllLnBvaW50KChpPXRbcl0pWzBdLGlbMV0saVsyXSk7ZS5saW5lRW5kKCl9ZnVuY3Rpb24gZXYodCxlKXt2YXIgbj0tMSxpPXQubGVuZ3RoO2ZvcihlLnBvbHlnb25TdGFydCgpOysrbjxpOyl0dih0W25dLGUsMSk7ZS5wb2x5Z29uRW5kKCl9ZnVuY3Rpb24gbnYodCxlKXt0JiZKeS5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpP0p5W3QudHlwZV0odCxlKTpaeSh0LGUpfXZhciBpdixydixvdixhdixzdixsdj1TeSgpLGN2PVN5KCksdXY9e3BvaW50Okt5LGxpbmVTdGFydDpLeSxsaW5lRW5kOkt5LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2x2LnJlc2V0KCksdXYubGluZVN0YXJ0PWh2LHV2LmxpbmVFbmQ9ZHZ9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt2YXIgdD0rbHY7Y3YuYWRkKHQ8MD9OeSt0OnQpLHRoaXMubGluZVN0YXJ0PXRoaXMubGluZUVuZD10aGlzLnBvaW50PUt5fSxzcGhlcmU6ZnVuY3Rpb24oKXtjdi5hZGQoTnkpfX07ZnVuY3Rpb24gaHYoKXt1di5wb2ludD1wdn1mdW5jdGlvbiBkdigpe2Z2KGl2LHJ2KX1mdW5jdGlvbiBwdih0LGUpe3V2LnBvaW50PWZ2LGl2PXQscnY9ZSxvdj10Kj1PeSxhdj1CeShlPShlKj1PeSkvMitQeSksc3Y9ankoZSl9ZnVuY3Rpb24gZnYodCxlKXt2YXIgbj0odCo9T3kpLW92LGk9bj49MD8xOi0xLHI9aSpuLG89QnkoZT0oZSo9T3kpLzIrUHkpLGE9ankoZSkscz1zdiphLGw9YXYqbytzKkJ5KHIpLGM9cyppKmp5KHIpO2x2LmFkZChEeShjLGwpKSxvdj10LGF2PW8sc3Y9YX1mdW5jdGlvbiBtdih0KXtyZXR1cm5bRHkodFsxXSx0WzBdKSxYeSh0WzJdKV19ZnVuY3Rpb24gZ3YodCl7dmFyIGU9dFswXSxuPXRbMV0saT1CeShuKTtyZXR1cm5baSpCeShlKSxpKmp5KGUpLGp5KG4pXX1mdW5jdGlvbiBfdih0LGUpe3JldHVybiB0WzBdKmVbMF0rdFsxXSplWzFdK3RbMl0qZVsyXX1mdW5jdGlvbiB5dih0LGUpe3JldHVyblt0WzFdKmVbMl0tdFsyXSplWzFdLHRbMl0qZVswXS10WzBdKmVbMl0sdFswXSplWzFdLXRbMV0qZVswXV19ZnVuY3Rpb24gdnYodCxlKXt0WzBdKz1lWzBdLHRbMV0rPWVbMV0sdFsyXSs9ZVsyXX1mdW5jdGlvbiBidih0LGUpe3JldHVyblt0WzBdKmUsdFsxXSplLHRbMl0qZV19ZnVuY3Rpb24geHYodCl7dmFyIGU9V3kodFswXSp0WzBdK3RbMV0qdFsxXSt0WzJdKnRbMl0pO3RbMF0vPWUsdFsxXS89ZSx0WzJdLz1lfXZhciB3dixTdixNdixFdixUdixDdixBdixrdixMdixQdixOdixJdixPdixSdix6dixEdixCdixIdixGdixWdixVdixqdixHdixXdixxdixZdixYdj1TeSgpLCR2PXtwb2ludDpLdixsaW5lU3RhcnQ6SnYsbGluZUVuZDpRdixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXskdi5wb2ludD10Yiwkdi5saW5lU3RhcnQ9ZWIsJHYubGluZUVuZD1uYixYdi5yZXNldCgpLHV2LnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dXYucG9seWdvbkVuZCgpLCR2LnBvaW50PUt2LCR2LmxpbmVTdGFydD1Kdiwkdi5saW5lRW5kPVF2LGx2PDA/KHd2PS0oTXY9MTgwKSxTdj0tKEV2PTkwKSk6WHY+Q3k/RXY9OTA6WHY8LTFlLTYmJihTdj0tOTApLFB2WzBdPXd2LFB2WzFdPU12fSxzcGhlcmU6ZnVuY3Rpb24oKXt3dj0tKE12PTE4MCksU3Y9LShFdj05MCl9fTtmdW5jdGlvbiBLdih0LGUpe0x2LnB1c2goUHY9W3d2PXQsTXY9dF0pLGU8U3YmJihTdj1lKSxlPkV2JiYoRXY9ZSl9ZnVuY3Rpb24gWnYodCxlKXt2YXIgbj1ndihbdCpPeSxlKk95XSk7aWYoa3Ype3ZhciBpPXl2KGt2LG4pLHI9eXYoW2lbMV0sLWlbMF0sMF0saSk7eHYocikscj1tdihyKTt2YXIgbyxhPXQtVHYscz1hPjA/MTotMSxsPXJbMF0qSXkqcyxjPVJ5KGEpPjE4MDtjXihzKlR2PGwmJmw8cyp0KT8obz1yWzFdKkl5KT5FdiYmKEV2PW8pOmNeKHMqVHY8KGw9KGwrMzYwKSUzNjAtMTgwKSYmbDxzKnQpPyhvPS1yWzFdKkl5KTxTdiYmKFN2PW8pOihlPFN2JiYoU3Y9ZSksZT5FdiYmKEV2PWUpKSxjP3Q8VHY/aWIod3YsdCk+aWIod3YsTXYpJiYoTXY9dCk6aWIodCxNdik+aWIod3YsTXYpJiYod3Y9dCk6TXY+PXd2Pyh0PHd2JiYod3Y9dCksdD5NdiYmKE12PXQpKTp0PlR2P2liKHd2LHQpPmliKHd2LE12KSYmKE12PXQpOmliKHQsTXYpPmliKHd2LE12KSYmKHd2PXQpfWVsc2UgTHYucHVzaChQdj1bd3Y9dCxNdj10XSk7ZTxTdiYmKFN2PWUpLGU+RXYmJihFdj1lKSxrdj1uLFR2PXR9ZnVuY3Rpb24gSnYoKXskdi5wb2ludD1adn1mdW5jdGlvbiBRdigpe1B2WzBdPXd2LFB2WzFdPU12LCR2LnBvaW50PUt2LGt2PW51bGx9ZnVuY3Rpb24gdGIodCxlKXtpZihrdil7dmFyIG49dC1UdjtYdi5hZGQoUnkobik+MTgwP24rKG4+MD8zNjA6LTM2MCk6bil9ZWxzZSBDdj10LEF2PWU7dXYucG9pbnQodCxlKSxadih0LGUpfWZ1bmN0aW9uIGViKCl7dXYubGluZVN0YXJ0KCl9ZnVuY3Rpb24gbmIoKXt0YihDdixBdiksdXYubGluZUVuZCgpLFJ5KFh2KT5DeSYmKHd2PS0oTXY9MTgwKSksUHZbMF09d3YsUHZbMV09TXYsa3Y9bnVsbH1mdW5jdGlvbiBpYih0LGUpe3JldHVybihlLT10KTwwP2UrMzYwOmV9ZnVuY3Rpb24gcmIodCxlKXtyZXR1cm4gdFswXS1lWzBdfWZ1bmN0aW9uIG9iKHQsZSl7cmV0dXJuIHRbMF08PXRbMV0/dFswXTw9ZSYmZTw9dFsxXTplPHRbMF18fHRbMV08ZX12YXIgYWI9e3NwaGVyZTpLeSxwb2ludDpzYixsaW5lU3RhcnQ6Y2IsbGluZUVuZDpkYixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXthYi5saW5lU3RhcnQ9cGIsYWIubGluZUVuZD1mYn0scG9seWdvbkVuZDpmdW5jdGlvbigpe2FiLmxpbmVTdGFydD1jYixhYi5saW5lRW5kPWRifX07ZnVuY3Rpb24gc2IodCxlKXt0Kj1PeTt2YXIgbj1CeShlKj1PeSk7bGIobipCeSh0KSxuKmp5KHQpLGp5KGUpKX1mdW5jdGlvbiBsYih0LGUsbil7KytOdixPdis9KHQtT3YpL052LFJ2Kz0oZS1SdikvTnYsenYrPShuLXp2KS9Odn1mdW5jdGlvbiBjYigpe2FiLnBvaW50PXVifWZ1bmN0aW9uIHViKHQsZSl7dCo9T3k7dmFyIG49QnkoZSo9T3kpO1d2PW4qQnkodCkscXY9bipqeSh0KSxZdj1qeShlKSxhYi5wb2ludD1oYixsYihXdixxdixZdil9ZnVuY3Rpb24gaGIodCxlKXt0Kj1PeTt2YXIgbj1CeShlKj1PeSksaT1uKkJ5KHQpLHI9bipqeSh0KSxvPWp5KGUpLGE9RHkoV3koKGE9cXYqby1ZdipyKSphKyhhPVl2KmktV3YqbykqYSsoYT1XdipyLXF2KmkpKmEpLFd2KmkrcXYqcitZdipvKTtJdis9YSxEdis9YSooV3YrKFd2PWkpKSxCdis9YSoocXYrKHF2PXIpKSxIdis9YSooWXYrKFl2PW8pKSxsYihXdixxdixZdil9ZnVuY3Rpb24gZGIoKXthYi5wb2ludD1zYn1mdW5jdGlvbiBwYigpe2FiLnBvaW50PW1ifWZ1bmN0aW9uIGZiKCl7Z2IoanYsR3YpLGFiLnBvaW50PXNifWZ1bmN0aW9uIG1iKHQsZSl7anY9dCxHdj1lLHQqPU95LGUqPU95LGFiLnBvaW50PWdiO3ZhciBuPUJ5KGUpO1d2PW4qQnkodCkscXY9bipqeSh0KSxZdj1qeShlKSxsYihXdixxdixZdil9ZnVuY3Rpb24gZ2IodCxlKXt0Kj1PeTt2YXIgbj1CeShlKj1PeSksaT1uKkJ5KHQpLHI9bipqeSh0KSxvPWp5KGUpLGE9cXYqby1ZdipyLHM9WXYqaS1XdipvLGw9V3Yqci1xdippLGM9V3koYSphK3MqcytsKmwpLHU9WHkoYyksaD1jJiYtdS9jO0Z2Kz1oKmEsVnYrPWgqcyxVdis9aCpsLEl2Kz11LER2Kz11KihXdisoV3Y9aSkpLEJ2Kz11KihxdisocXY9cikpLEh2Kz11KihZdisoWXY9bykpLGxiKFd2LHF2LFl2KX1mdW5jdGlvbiBfYih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24geWIodCxlKXtmdW5jdGlvbiBuKG4saSl7cmV0dXJuIG49dChuLGkpLGUoblswXSxuWzFdKX1yZXR1cm4gdC5pbnZlcnQmJmUuaW52ZXJ0JiYobi5pbnZlcnQ9ZnVuY3Rpb24obixpKXtyZXR1cm4obj1lLmludmVydChuLGkpKSYmdC5pbnZlcnQoblswXSxuWzFdKX0pLG59ZnVuY3Rpb24gdmIodCxlKXtyZXR1cm5bUnkodCk+a3k/dCtNYXRoLnJvdW5kKC10L055KSpOeTp0LGVdfWZ1bmN0aW9uIGJiKHQsZSxuKXtyZXR1cm4odCU9TnkpP2V8fG4/eWIod2IodCksU2IoZSxuKSk6d2IodCk6ZXx8bj9TYihlLG4pOnZifWZ1bmN0aW9uIHhiKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3JldHVyblsoZSs9dCk+a3k/ZS1OeTplPC1reT9lK055OmUsbl19fWZ1bmN0aW9uIHdiKHQpe3ZhciBlPXhiKHQpO3JldHVybiBlLmludmVydD14YigtdCksZX1mdW5jdGlvbiBTYih0LGUpe3ZhciBuPUJ5KHQpLGk9ankodCkscj1CeShlKSxvPWp5KGUpO2Z1bmN0aW9uIGEodCxlKXt2YXIgYT1CeShlKSxzPUJ5KHQpKmEsbD1qeSh0KSphLGM9ankoZSksdT1jKm4rcyppO3JldHVybltEeShsKnItdSpvLHMqbi1jKmkpLFh5KHUqcitsKm8pXX1yZXR1cm4gYS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgYT1CeShlKSxzPUJ5KHQpKmEsbD1qeSh0KSphLGM9ankoZSksdT1jKnItbCpvO3JldHVybltEeShsKnIrYypvLHMqbit1KmkpLFh5KHUqbi1zKmkpXX0sYX1mdW5jdGlvbiBNYih0KXtmdW5jdGlvbiBlKGUpe3JldHVybihlPXQoZVswXSpPeSxlWzFdKk95KSlbMF0qPUl5LGVbMV0qPUl5LGV9cmV0dXJuIHQ9YmIodFswXSpPeSx0WzFdKk95LHQubGVuZ3RoPjI/dFsyXSpPeTowKSxlLmludmVydD1mdW5jdGlvbihlKXtyZXR1cm4oZT10LmludmVydChlWzBdKk95LGVbMV0qT3kpKVswXSo9SXksZVsxXSo9SXksZX0sZX1mdW5jdGlvbiBFYih0LGUsbixpLHIsbyl7aWYobil7dmFyIGE9QnkoZSkscz1qeShlKSxsPWkqbjtudWxsPT1yPyhyPWUraSpOeSxvPWUtbC8yKToocj1UYihhLHIpLG89VGIoYSxvKSwoaT4wP3I8bzpyPm8pJiYocis9aSpOeSkpO2Zvcih2YXIgYyx1PXI7aT4wP3U+bzp1PG87dS09bCljPW12KFthLC1zKkJ5KHUpLC1zKmp5KHUpXSksdC5wb2ludChjWzBdLGNbMV0pfX1mdW5jdGlvbiBUYih0LGUpeyhlPWd2KGUpKVswXS09dCx4dihlKTt2YXIgbj1ZeSgtZVsxXSk7cmV0dXJuKCgtZVsyXTwwPy1uOm4pK055LUN5KSVOeX1mdW5jdGlvbiBDYigpe3ZhciB0LGU9W107cmV0dXJue3BvaW50OmZ1bmN0aW9uKGUsbixpKXt0LnB1c2goW2UsbixpXSl9LGxpbmVTdGFydDpmdW5jdGlvbigpe2UucHVzaCh0PVtdKX0sbGluZUVuZDpLeSxyZWpvaW46ZnVuY3Rpb24oKXtlLmxlbmd0aD4xJiZlLnB1c2goZS5wb3AoKS5jb25jYXQoZS5zaGlmdCgpKSl9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciBuPWU7cmV0dXJuIGU9W10sdD1udWxsLG59fX1mdW5jdGlvbiBBYih0LGUpe3JldHVybiBSeSh0WzBdLWVbMF0pPEN5JiZSeSh0WzFdLWVbMV0pPEN5fWZ1bmN0aW9uIGtiKHQsZSxuLGkpe3RoaXMueD10LHRoaXMuej1lLHRoaXMubz1uLHRoaXMuZT1pLHRoaXMudj0hMSx0aGlzLm49dGhpcy5wPW51bGx9ZnVuY3Rpb24gTGIodCxlLG4saSxyKXt2YXIgbyxhLHM9W10sbD1bXTtpZih0LmZvckVhY2goKGZ1bmN0aW9uKHQpe2lmKCEoKGU9dC5sZW5ndGgtMSk8PTApKXt2YXIgZSxuLGk9dFswXSxhPXRbZV07aWYoQWIoaSxhKSl7aWYoIWlbMl0mJiFhWzJdKXtmb3Ioci5saW5lU3RhcnQoKSxvPTA7bzxlOysrbylyLnBvaW50KChpPXRbb10pWzBdLGlbMV0pO3JldHVybiB2b2lkIHIubGluZUVuZCgpfWFbMF0rPTJlLTZ9cy5wdXNoKG49bmV3IGtiKGksdCxudWxsLCEwKSksbC5wdXNoKG4ubz1uZXcga2IoaSxudWxsLG4sITEpKSxzLnB1c2gobj1uZXcga2IoYSx0LG51bGwsITEpKSxsLnB1c2gobi5vPW5ldyBrYihhLG51bGwsbiwhMCkpfX0pKSxzLmxlbmd0aCl7Zm9yKGwuc29ydChlKSxQYihzKSxQYihsKSxvPTAsYT1sLmxlbmd0aDtvPGE7KytvKWxbb10uZT1uPSFuO2Zvcih2YXIgYyx1LGg9c1swXTs7KXtmb3IodmFyIGQ9aCxwPSEwO2QudjspaWYoKGQ9ZC5uKT09PWgpcmV0dXJuO2M9ZC56LHIubGluZVN0YXJ0KCk7ZG97aWYoZC52PWQuby52PSEwLGQuZSl7aWYocClmb3Iobz0wLGE9Yy5sZW5ndGg7bzxhOysrbylyLnBvaW50KCh1PWNbb10pWzBdLHVbMV0pO2Vsc2UgaShkLngsZC5uLngsMSxyKTtkPWQubn1lbHNle2lmKHApZm9yKG89KGM9ZC5wLnopLmxlbmd0aC0xO28+PTA7LS1vKXIucG9pbnQoKHU9Y1tvXSlbMF0sdVsxXSk7ZWxzZSBpKGQueCxkLnAueCwtMSxyKTtkPWQucH1jPShkPWQubykueixwPSFwfXdoaWxlKCFkLnYpO3IubGluZUVuZCgpfX19ZnVuY3Rpb24gUGIodCl7aWYoZT10Lmxlbmd0aCl7Zm9yKHZhciBlLG4saT0wLHI9dFswXTsrK2k8ZTspci5uPW49dFtpXSxuLnA9cixyPW47ci5uPW49dFswXSxuLnA9cn19dmIuaW52ZXJ0PXZiO3ZhciBOYj1TeSgpO2Z1bmN0aW9uIEliKHQpe3JldHVybiBSeSh0WzBdKTw9a3k/dFswXTpHeSh0WzBdKSooKFJ5KHRbMF0pK2t5KSVOeS1reSl9ZnVuY3Rpb24gT2IodCxlKXt2YXIgbj1JYihlKSxpPWVbMV0scj1qeShpKSxvPVtqeShuKSwtQnkobiksMF0sYT0wLHM9MDtOYi5yZXNldCgpLDE9PT1yP2k9THkrQ3k6LTE9PT1yJiYoaT0tTHktQ3kpO2Zvcih2YXIgbD0wLGM9dC5sZW5ndGg7bDxjOysrbClpZihoPSh1PXRbbF0pLmxlbmd0aClmb3IodmFyIHUsaCxkPXVbaC0xXSxwPUliKGQpLGY9ZFsxXS8yK1B5LG09ankoZiksZz1CeShmKSxfPTA7XzxoOysrXyxwPXYsbT14LGc9dyxkPXkpe3ZhciB5PXVbX10sdj1JYih5KSxiPXlbMV0vMitQeSx4PWp5KGIpLHc9QnkoYiksUz12LXAsTT1TPj0wPzE6LTEsRT1NKlMsVD1FPmt5LEM9bSp4O2lmKE5iLmFkZChEeShDKk0qankoRSksZyp3K0MqQnkoRSkpKSxhKz1UP1MrTSpOeTpTLFRecD49bl52Pj1uKXt2YXIgQT15dihndihkKSxndih5KSk7eHYoQSk7dmFyIGs9eXYobyxBKTt4dihrKTt2YXIgTD0oVF5TPj0wPy0xOjEpKlh5KGtbMl0pOyhpPkx8fGk9PT1MJiYoQVswXXx8QVsxXSkpJiYocys9VF5TPj0wPzE6LTEpfX1yZXR1cm4oYTwtMWUtNnx8YTxDeSYmTmI8LTFlLTYpXjEmc31mdW5jdGlvbiBSYih0LGUsbixpKXtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG8sYSxzLGw9ZShyKSxjPUNiKCksdT1lKGMpLGg9ITEsZD17cG9pbnQ6cCxsaW5lU3RhcnQ6bSxsaW5lRW5kOmcscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7ZC5wb2ludD1fLGQubGluZVN0YXJ0PXksZC5saW5lRW5kPXYsYT1bXSxvPVtdfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7ZC5wb2ludD1wLGQubGluZVN0YXJ0PW0sZC5saW5lRW5kPWcsYT1XbChhKTt2YXIgdD1PYihvLGkpO2EubGVuZ3RoPyhofHwoci5wb2x5Z29uU3RhcnQoKSxoPSEwKSxMYihhLERiLHQsbixyKSk6dCYmKGh8fChyLnBvbHlnb25TdGFydCgpLGg9ITApLHIubGluZVN0YXJ0KCksbihudWxsLG51bGwsMSxyKSxyLmxpbmVFbmQoKSksaCYmKHIucG9seWdvbkVuZCgpLGg9ITEpLGE9bz1udWxsfSxzcGhlcmU6ZnVuY3Rpb24oKXtyLnBvbHlnb25TdGFydCgpLHIubGluZVN0YXJ0KCksbihudWxsLG51bGwsMSxyKSxyLmxpbmVFbmQoKSxyLnBvbHlnb25FbmQoKX19O2Z1bmN0aW9uIHAoZSxuKXt0KGUsbikmJnIucG9pbnQoZSxuKX1mdW5jdGlvbiBmKHQsZSl7bC5wb2ludCh0LGUpfWZ1bmN0aW9uIG0oKXtkLnBvaW50PWYsbC5saW5lU3RhcnQoKX1mdW5jdGlvbiBnKCl7ZC5wb2ludD1wLGwubGluZUVuZCgpfWZ1bmN0aW9uIF8odCxlKXtzLnB1c2goW3QsZV0pLHUucG9pbnQodCxlKX1mdW5jdGlvbiB5KCl7dS5saW5lU3RhcnQoKSxzPVtdfWZ1bmN0aW9uIHYoKXtfKHNbMF1bMF0sc1swXVsxXSksdS5saW5lRW5kKCk7dmFyIHQsZSxuLGksbD11LmNsZWFuKCksZD1jLnJlc3VsdCgpLHA9ZC5sZW5ndGg7aWYocy5wb3AoKSxvLnB1c2gocykscz1udWxsLHApaWYoMSZsKXtpZigoZT0obj1kWzBdKS5sZW5ndGgtMSk+MCl7Zm9yKGh8fChyLnBvbHlnb25TdGFydCgpLGg9ITApLHIubGluZVN0YXJ0KCksdD0wO3Q8ZTsrK3Qpci5wb2ludCgoaT1uW3RdKVswXSxpWzFdKTtyLmxpbmVFbmQoKX19ZWxzZSBwPjEmJjImbCYmZC5wdXNoKGQucG9wKCkuY29uY2F0KGQuc2hpZnQoKSkpLGEucHVzaChkLmZpbHRlcih6YikpfXJldHVybiBkfX1mdW5jdGlvbiB6Yih0KXtyZXR1cm4gdC5sZW5ndGg+MX1mdW5jdGlvbiBEYih0LGUpe3JldHVybigodD10LngpWzBdPDA/dFsxXS1MeS1DeTpMeS10WzFdKS0oKGU9ZS54KVswXTwwP2VbMV0tTHktQ3k6THktZVsxXSl9dmFyIEJiPVJiKChmdW5jdGlvbigpe3JldHVybiEwfSksKGZ1bmN0aW9uIEhiKHQpe3ZhciBlLG49TmFOLGk9TmFOLHI9TmFOO3JldHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0LmxpbmVTdGFydCgpLGU9MX0scG9pbnQ6ZnVuY3Rpb24obyxhKXt2YXIgcz1vPjA/a3k6LWt5LGw9Unkoby1uKTtSeShsLWt5KTxDeT8odC5wb2ludChuLGk9KGkrYSkvMj4wP0x5Oi1MeSksdC5wb2ludChyLGkpLHQubGluZUVuZCgpLHQubGluZVN0YXJ0KCksdC5wb2ludChzLGkpLHQucG9pbnQobyxpKSxlPTApOnIhPT1zJiZsPj1reSYmKFJ5KG4tcik8Q3kmJihuLT1yKkN5KSxSeShvLXMpPEN5JiYoby09cypDeSksaT0oZnVuY3Rpb24gYyh0LGUsbixpKXt2YXIgcixvLGE9ankodC1uKTtyZXR1cm4gUnkoYSk+Q3k/enkoKGp5KGUpKihvPUJ5KGkpKSpqeShuKS1qeShpKSoocj1CeShlKSkqankodCkpLyhyKm8qYSkpOihlK2kpLzJ9KShuLGksbyxhKSx0LnBvaW50KHIsaSksdC5saW5lRW5kKCksdC5saW5lU3RhcnQoKSx0LnBvaW50KHMsaSksZT0wKSx0LnBvaW50KG49byxpPWEpLHI9c30sbGluZUVuZDpmdW5jdGlvbigpe3QubGluZUVuZCgpLG49aT1OYU59LGNsZWFuOmZ1bmN0aW9uKCl7cmV0dXJuIDItZX19fSksKGZ1bmN0aW9uIEZiKHQsZSxuLGkpe3ZhciByO2lmKG51bGw9PXQpaS5wb2ludCgta3kscj1uKkx5KSxpLnBvaW50KDAsciksaS5wb2ludChreSxyKSxpLnBvaW50KGt5LDApLGkucG9pbnQoa3ksLXIpLGkucG9pbnQoMCwtciksaS5wb2ludCgta3ksLXIpLGkucG9pbnQoLWt5LDApLGkucG9pbnQoLWt5LHIpO2Vsc2UgaWYoUnkodFswXS1lWzBdKT5DeSl7dmFyIG89dFswXTxlWzBdP2t5Oi1reTtpLnBvaW50KC1vLHI9bipvLzIpLGkucG9pbnQoMCxyKSxpLnBvaW50KG8scil9ZWxzZSBpLnBvaW50KGVbMF0sZVsxXSl9KSxbLWt5LC1MeV0pO2Z1bmN0aW9uIFZiKHQpe3ZhciBlPUJ5KHQpLG49NipPeSxpPWU+MCxyPVJ5KGUpPkN5O2Z1bmN0aW9uIG8odCxuKXtyZXR1cm4gQnkodCkqQnkobik+ZX1mdW5jdGlvbiBhKHQsbixpKXt2YXIgcj1bMSwwLDBdLG89eXYoZ3YodCksZ3YobikpLGE9X3YobyxvKSxzPW9bMF0sbD1hLXMqcztpZighbClyZXR1cm4haSYmdDt2YXIgYz1lKmEvbCx1PS1lKnMvbCxoPXl2KHIsbyksZD1idihyLGMpO3Z2KGQsYnYobyx1KSk7dmFyIHA9aCxmPV92KGQscCksbT1fdihwLHApLGc9ZipmLW0qKF92KGQsZCktMSk7aWYoIShnPDApKXt2YXIgXz1XeShnKSx5PWJ2KHAsKC1mLV8pL20pO2lmKHZ2KHksZCkseT1tdih5KSwhaSlyZXR1cm4geTt2YXIgdixiPXRbMF0seD1uWzBdLHc9dFsxXSxTPW5bMV07eDxiJiYodj1iLGI9eCx4PXYpO3ZhciBNPXgtYixFPVJ5KE0ta3kpPEN5O2lmKCFFJiZTPHcmJih2PXcsdz1TLFM9diksRXx8TTxDeT9FP3crUz4wXnlbMV08KFJ5KHlbMF0tYik8Q3k/dzpTKTp3PD15WzFdJiZ5WzFdPD1TOk0+a3leKGI8PXlbMF0mJnlbMF08PXgpKXt2YXIgVD1idihwLCgtZitfKS9tKTtyZXR1cm4gdnYoVCxkKSxbeSxtdihUKV19fX1mdW5jdGlvbiBzKGUsbil7dmFyIHI9aT90Omt5LXQsbz0wO3JldHVybiBlPC1yP298PTE6ZT5yJiYob3w9Miksbjwtcj9vfD00Om4+ciYmKG98PTgpLG99cmV0dXJuIFJiKG8sKGZ1bmN0aW9uIGwodCl7dmFyIGUsbixsLGMsdTtyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9uKCl7Yz1sPSExLHU9MX0scG9pbnQ6ZnVuY3Rpb24oaCxkKXt2YXIgcCxmPVtoLGRdLG09byhoLGQpLGc9aT9tPzA6cyhoLGQpOm0/cyhoKyhoPDA/a3k6LWt5KSxkKTowO2lmKCFlJiYoYz1sPW0pJiZ0LmxpbmVTdGFydCgpLG0hPT1sJiYoIShwPWEoZSxmKSl8fEFiKGUscCl8fEFiKGYscCkpJiYoZlsyXT0xKSxtIT09bCl1PTAsbT8odC5saW5lU3RhcnQoKSxwPWEoZixlKSx0LnBvaW50KHBbMF0scFsxXSkpOihwPWEoZSxmKSx0LnBvaW50KHBbMF0scFsxXSwyKSx0LmxpbmVFbmQoKSksZT1wO2Vsc2UgaWYociYmZSYmaV5tKXt2YXIgXztnJm58fCEoXz1hKGYsZSwhMCkpfHwodT0wLGk/KHQubGluZVN0YXJ0KCksdC5wb2ludChfWzBdWzBdLF9bMF1bMV0pLHQucG9pbnQoX1sxXVswXSxfWzFdWzFdKSx0LmxpbmVFbmQoKSk6KHQucG9pbnQoX1sxXVswXSxfWzFdWzFdKSx0LmxpbmVFbmQoKSx0LmxpbmVTdGFydCgpLHQucG9pbnQoX1swXVswXSxfWzBdWzFdLDMpKSl9IW18fGUmJkFiKGUsZil8fHQucG9pbnQoZlswXSxmWzFdKSxlPWYsbD1tLG49Z30sbGluZUVuZDpmdW5jdGlvbigpe2wmJnQubGluZUVuZCgpLGU9bnVsbH0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gdXwoYyYmbCk8PDF9fX0pLChmdW5jdGlvbiBjKGUsaSxyLG8pe0ViKG8sdCxuLHIsZSxpKX0pLGk/WzAsLXRdOlsta3ksdC1reV0pfXZhciBVYj0xZTksamI9LVViO2Z1bmN0aW9uIEdiKHQsZSxuLGkpe2Z1bmN0aW9uIHIocixvKXtyZXR1cm4gdDw9ciYmcjw9biYmZTw9byYmbzw9aX1mdW5jdGlvbiBvKHIsbyxzLGMpe3ZhciB1PTAsaD0wO2lmKG51bGw9PXJ8fCh1PWEocixzKSkhPT0oaD1hKG8scykpfHxsKHIsbyk8MF5zPjApZG97Yy5wb2ludCgwPT09dXx8Mz09PXU/dDpuLHU+MT9pOmUpfXdoaWxlKCh1PSh1K3MrNCklNCkhPT1oKTtlbHNlIGMucG9pbnQob1swXSxvWzFdKX1mdW5jdGlvbiBhKGkscil7cmV0dXJuIFJ5KGlbMF0tdCk8Q3k/cj4wPzA6MzpSeShpWzBdLW4pPEN5P3I+MD8yOjE6UnkoaVsxXS1lKTxDeT9yPjA/MTowOnI+MD8zOjJ9ZnVuY3Rpb24gcyh0LGUpe3JldHVybiBsKHQueCxlLngpfWZ1bmN0aW9uIGwodCxlKXt2YXIgbj1hKHQsMSksaT1hKGUsMSk7cmV0dXJuIG4hPT1pP24taTowPT09bj9lWzFdLXRbMV06MT09PW4/dFswXS1lWzBdOjI9PT1uP3RbMV0tZVsxXTplWzBdLXRbMF19cmV0dXJuIGZ1bmN0aW9uKGEpe3ZhciBsLGMsdSxoLGQscCxmLG0sZyxfLHksdj1hLGI9Q2IoKSx4PXtwb2ludDpULGxpbmVTdGFydDpmdW5jdGlvbiB3KCl7eC5wb2ludD1DLGMmJmMucHVzaCh1PVtdKSxfPSEwLGc9ITEsZj1tPU5hTn0sbGluZUVuZDpmdW5jdGlvbiBTKCl7bCYmKEMoaCxkKSxwJiZnJiZiLnJlam9pbigpLGwucHVzaChiLnJlc3VsdCgpKSkseC5wb2ludD1ULGcmJnYubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24gTSgpe3Y9YixsPVtdLGM9W10seT0hMH0scG9seWdvbkVuZDpmdW5jdGlvbiBFKCl7dmFyIGU9KGZ1bmN0aW9uIG4oKXtmb3IodmFyIGU9MCxuPTAscj1jLmxlbmd0aDtuPHI7KytuKWZvcih2YXIgbyxhLHM9Y1tuXSxsPTEsdT1zLmxlbmd0aCxoPXNbMF0sZD1oWzBdLHA9aFsxXTtsPHU7KytsKW89ZCxhPXAsZD0oaD1zW2xdKVswXSxwPWhbMV0sYTw9aT9wPmkmJihkLW8pKihpLWEpPihwLWEpKih0LW8pJiYrK2U6cDw9aSYmKGQtbykqKGktYSk8KHAtYSkqKHQtbykmJi0tZTtyZXR1cm4gZX0pKCkscj15JiZlLGg9KGw9V2wobCkpLmxlbmd0aDsocnx8aCkmJihhLnBvbHlnb25TdGFydCgpLHImJihhLmxpbmVTdGFydCgpLG8obnVsbCxudWxsLDEsYSksYS5saW5lRW5kKCkpLGgmJkxiKGwscyxlLG8sYSksYS5wb2x5Z29uRW5kKCkpLHY9YSxsPWM9dT1udWxsfX07ZnVuY3Rpb24gVCh0LGUpe3IodCxlKSYmdi5wb2ludCh0LGUpfWZ1bmN0aW9uIEMobyxhKXt2YXIgcz1yKG8sYSk7aWYoYyYmdS5wdXNoKFtvLGFdKSxfKWg9byxkPWEscD1zLF89ITEscyYmKHYubGluZVN0YXJ0KCksdi5wb2ludChvLGEpKTtlbHNlIGlmKHMmJmcpdi5wb2ludChvLGEpO2Vsc2V7dmFyIGw9W2Y9TWF0aC5tYXgoamIsTWF0aC5taW4oVWIsZikpLG09TWF0aC5tYXgoamIsTWF0aC5taW4oVWIsbSkpXSxiPVtvPU1hdGgubWF4KGpiLE1hdGgubWluKFViLG8pKSxhPU1hdGgubWF4KGpiLE1hdGgubWluKFViLGEpKV07IShmdW5jdGlvbiB4KHQsZSxuLGkscixvKXt2YXIgYSxzPXRbMF0sbD10WzFdLGM9MCx1PTEsaD1lWzBdLXMsZD1lWzFdLWw7aWYoYT1uLXMsaHx8IShhPjApKXtpZihhLz1oLGg8MCl7aWYoYTxjKXJldHVybjthPHUmJih1PWEpfWVsc2UgaWYoaD4wKXtpZihhPnUpcmV0dXJuO2E+YyYmKGM9YSl9aWYoYT1yLXMsaHx8IShhPDApKXtpZihhLz1oLGg8MCl7aWYoYT51KXJldHVybjthPmMmJihjPWEpfWVsc2UgaWYoaD4wKXtpZihhPGMpcmV0dXJuO2E8dSYmKHU9YSl9aWYoYT1pLWwsZHx8IShhPjApKXtpZihhLz1kLGQ8MCl7aWYoYTxjKXJldHVybjthPHUmJih1PWEpfWVsc2UgaWYoZD4wKXtpZihhPnUpcmV0dXJuO2E+YyYmKGM9YSl9aWYoYT1vLWwsZHx8IShhPDApKXtpZihhLz1kLGQ8MCl7aWYoYT51KXJldHVybjthPmMmJihjPWEpfWVsc2UgaWYoZD4wKXtpZihhPGMpcmV0dXJuO2E8dSYmKHU9YSl9cmV0dXJuIGM+MCYmKHRbMF09cytjKmgsdFsxXT1sK2MqZCksdTwxJiYoZVswXT1zK3UqaCxlWzFdPWwrdSpkKSwhMH19fX19KShsLGIsdCxlLG4saSk/cyYmKHYubGluZVN0YXJ0KCksdi5wb2ludChvLGEpLHk9ITEpOihnfHwodi5saW5lU3RhcnQoKSx2LnBvaW50KGxbMF0sbFsxXSkpLHYucG9pbnQoYlswXSxiWzFdKSxzfHx2LmxpbmVFbmQoKSx5PSExKX1mPW8sbT1hLGc9c31yZXR1cm4geH19dmFyIFdiLHFiLFliLFhiPVN5KCksJGI9e3NwaGVyZTpLeSxwb2ludDpLeSxsaW5lU3RhcnQ6ZnVuY3Rpb24gS2IoKXskYi5wb2ludD1KYiwkYi5saW5lRW5kPVpifSxsaW5lRW5kOkt5LHBvbHlnb25TdGFydDpLeSxwb2x5Z29uRW5kOkt5fTtmdW5jdGlvbiBaYigpeyRiLnBvaW50PSRiLmxpbmVFbmQ9S3l9ZnVuY3Rpb24gSmIodCxlKXtXYj10Kj1PeSxxYj1qeShlKj1PeSksWWI9QnkoZSksJGIucG9pbnQ9UWJ9ZnVuY3Rpb24gUWIodCxlKXt0Kj1PeTt2YXIgbj1qeShlKj1PeSksaT1CeShlKSxyPVJ5KHQtV2IpLG89QnkociksYT1pKmp5KHIpLHM9WWIqbi1xYippKm8sbD1xYipuK1liKmkqbztYYi5hZGQoRHkoV3koYSphK3MqcyksbCkpLFdiPXQscWI9bixZYj1pfWZ1bmN0aW9uIHR4KHQpe3JldHVybiBYYi5yZXNldCgpLG52KHQsJGIpLCtYYn12YXIgZXg9W251bGwsbnVsbF0sbng9e3R5cGU6IkxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOmV4fTtmdW5jdGlvbiBpeCh0LGUpe3JldHVybiBleFswXT10LGV4WzFdPWUsdHgobngpfXZhciByeD17RmVhdHVyZTpmdW5jdGlvbih0LGUpe3JldHVybiBheCh0Lmdlb21ldHJ5LGUpfSxGZWF0dXJlQ29sbGVjdGlvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmZlYXR1cmVzLGk9LTEscj1uLmxlbmd0aDsrK2k8cjspaWYoYXgobltpXS5nZW9tZXRyeSxlKSlyZXR1cm4hMDtyZXR1cm4hMX19LG94PXtTcGhlcmU6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sUG9pbnQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gc3godC5jb29yZGluYXRlcyxlKX0sTXVsdGlQb2ludDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmNvb3JkaW5hdGVzLGk9LTEscj1uLmxlbmd0aDsrK2k8cjspaWYoc3gobltpXSxlKSlyZXR1cm4hMDtyZXR1cm4hMX0sTGluZVN0cmluZzpmdW5jdGlvbih0LGUpe3JldHVybiBseCh0LmNvb3JkaW5hdGVzLGUpfSxNdWx0aUxpbmVTdHJpbmc6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5jb29yZGluYXRlcyxpPS0xLHI9bi5sZW5ndGg7KytpPHI7KWlmKGx4KG5baV0sZSkpcmV0dXJuITA7cmV0dXJuITF9LFBvbHlnb246ZnVuY3Rpb24odCxlKXtyZXR1cm4gY3godC5jb29yZGluYXRlcyxlKX0sTXVsdGlQb2x5Z29uOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXQuY29vcmRpbmF0ZXMsaT0tMSxyPW4ubGVuZ3RoOysraTxyOylpZihjeChuW2ldLGUpKXJldHVybiEwO3JldHVybiExfSxHZW9tZXRyeUNvbGxlY3Rpb246ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5nZW9tZXRyaWVzLGk9LTEscj1uLmxlbmd0aDsrK2k8cjspaWYoYXgobltpXSxlKSlyZXR1cm4hMDtyZXR1cm4hMX19O2Z1bmN0aW9uIGF4KHQsZSl7cmV0dXJuISghdHx8IW94Lmhhc093blByb3BlcnR5KHQudHlwZSkpJiZveFt0LnR5cGVdKHQsZSl9ZnVuY3Rpb24gc3godCxlKXtyZXR1cm4gMD09PWl4KHQsZSl9ZnVuY3Rpb24gbHgodCxlKXtmb3IodmFyIG4saSxyLG89MCxhPXQubGVuZ3RoO288YTtvKyspe2lmKDA9PT0oaT1peCh0W29dLGUpKSlyZXR1cm4hMDtpZihvPjAmJihyPWl4KHRbb10sdFtvLTFdKSk+MCYmbjw9ciYmaTw9ciYmKG4raS1yKSooMS1NYXRoLnBvdygobi1pKS9yLDIpKTxBeSpyKXJldHVybiEwO249aX1yZXR1cm4hMX1mdW5jdGlvbiBjeCh0LGUpe3JldHVybiEhT2IodC5tYXAodXgpLGh4KGUpKX1mdW5jdGlvbiB1eCh0KXtyZXR1cm4odD10Lm1hcChoeCkpLnBvcCgpLHR9ZnVuY3Rpb24gaHgodCl7cmV0dXJuW3RbMF0qT3ksdFsxXSpPeV19ZnVuY3Rpb24gZHgodCxlLG4pe3ZhciBpPVJsKHQsZS1DeSxuKS5jb25jYXQoZSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuW3QsZV19KSl9fWZ1bmN0aW9uIHB4KHQsZSxuKXt2YXIgaT1SbCh0LGUtQ3ksbikuY29uY2F0KGUpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gaS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybltlLHRdfSkpfX1mdW5jdGlvbiBmeCgpe3ZhciB0LGUsbixpLHIsbyxhLHMsbCxjLHUsaCxkPTEwLHA9ZCxmPTkwLG09MzYwLGc9Mi41O2Z1bmN0aW9uIF8oKXtyZXR1cm57dHlwZToiTXVsdGlMaW5lU3RyaW5nIixjb29yZGluYXRlczp5KCl9fWZ1bmN0aW9uIHkoKXtyZXR1cm4gUmwoSHkoaS9mKSpmLG4sZikubWFwKHUpLmNvbmNhdChSbChIeShzL20pKm0sYSxtKS5tYXAoaCkpLmNvbmNhdChSbChIeShlL2QpKmQsdCxkKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBSeSh0JWYpPkN5fSkpLm1hcChsKSkuY29uY2F0KFJsKEh5KG8vcCkqcCxyLHApLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIFJ5KHQlbSk+Q3l9KSkubWFwKGMpKX1yZXR1cm4gXy5saW5lcz1mdW5jdGlvbigpe3JldHVybiB5KCkubWFwKChmdW5jdGlvbih0KXtyZXR1cm57dHlwZToiTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6dH19KSl9LF8ub3V0bGluZT1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpbdShpKS5jb25jYXQoaChhKS5zbGljZSgxKSx1KG4pLnJldmVyc2UoKS5zbGljZSgxKSxoKHMpLnJldmVyc2UoKS5zbGljZSgxKSldfX0sXy5leHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/Xy5leHRlbnRNYWpvcih0KS5leHRlbnRNaW5vcih0KTpfLmV4dGVudE1pbm9yKCl9LF8uZXh0ZW50TWFqb3I9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9K3RbMF1bMV0sYT0rdFsxXVsxXSwoaT0rdFswXVswXSk+KG49K3RbMV1bMF0pJiYodD1pLGk9bixuPXQpLHM+YSYmKHQ9cyxzPWEsYT10KSxfLnByZWNpc2lvbihnKSk6W1tpLHNdLFtuLGFdXX0sXy5leHRlbnRNaW5vcj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0rblswXVsxXSxyPStuWzFdWzFdLChlPStuWzBdWzBdKT4odD0rblsxXVswXSkmJihuPWUsZT10LHQ9biksbz5yJiYobj1vLG89cixyPW4pLF8ucHJlY2lzaW9uKGcpKTpbW2Usb10sW3Qscl1dfSxfLnN0ZXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/Xy5zdGVwTWFqb3IodCkuc3RlcE1pbm9yKHQpOl8uc3RlcE1pbm9yKCl9LF8uc3RlcE1ham9yPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPSt0WzBdLG09K3RbMV0sXyk6W2YsbV19LF8uc3RlcE1pbm9yPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPSt0WzBdLHA9K3RbMV0sXyk6W2QscF19LF8ucHJlY2lzaW9uPWZ1bmN0aW9uKGQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPStkLGw9ZHgobyxyLDkwKSxjPXB4KGUsdCxnKSx1PWR4KHMsYSw5MCksaD1weChpLG4sZyksXyk6Z30sXy5leHRlbnRNYWpvcihbWy0xODAsLTg5Ljk5OTk5OV0sWzE4MCw4OS45OTk5OTldXSkuZXh0ZW50TWlub3IoW1stMTgwLC04MC4wMDAwMDFdLFsxODAsODAuMDAwMDAxXV0pfWZ1bmN0aW9uIG14KHQpe3JldHVybiB0fXZhciBneCxfeCx5eCx2eCxieD1TeSgpLHh4PVN5KCksd3g9e3BvaW50Okt5LGxpbmVTdGFydDpLeSxsaW5lRW5kOkt5LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3d4LmxpbmVTdGFydD1TeCx3eC5saW5lRW5kPVR4fSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7d3gubGluZVN0YXJ0PXd4LmxpbmVFbmQ9d3gucG9pbnQ9S3ksYnguYWRkKFJ5KHh4KSkseHgucmVzZXQoKX0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHQ9YngvMjtyZXR1cm4gYngucmVzZXQoKSx0fX07ZnVuY3Rpb24gU3goKXt3eC5wb2ludD1NeH1mdW5jdGlvbiBNeCh0LGUpe3d4LnBvaW50PUV4LGd4PXl4PXQsX3g9dng9ZX1mdW5jdGlvbiBFeCh0LGUpe3h4LmFkZCh2eCp0LXl4KmUpLHl4PXQsdng9ZX1mdW5jdGlvbiBUeCgpe0V4KGd4LF94KX12YXIgQ3gsQXgsa3gsTHgsUHg9MS8wLE54PVB4LEl4PS1QeCxPeD1JeCxSeD17cG9pbnQ6ZnVuY3Rpb24gengodCxlKXt0PFB4JiYoUHg9dCksdD5JeCYmKEl4PXQpLGU8TngmJihOeD1lKSxlPk94JiYoT3g9ZSl9LGxpbmVTdGFydDpLeSxsaW5lRW5kOkt5LHBvbHlnb25TdGFydDpLeSxwb2x5Z29uRW5kOkt5LHJlc3VsdDpmdW5jdGlvbigpe3ZhciB0PVtbUHgsTnhdLFtJeCxPeF1dO3JldHVybiBJeD1PeD0tKE54PVB4PTEvMCksdH19LER4PTAsQng9MCxIeD0wLEZ4PTAsVng9MCxVeD0wLGp4PTAsR3g9MCxXeD0wLHF4PXtwb2ludDpZeCxsaW5lU3RhcnQ6WHgsbGluZUVuZDpaeCxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtxeC5saW5lU3RhcnQ9SngscXgubGluZUVuZD1ReH0scG9seWdvbkVuZDpmdW5jdGlvbigpe3F4LnBvaW50PVl4LHF4LmxpbmVTdGFydD1YeCxxeC5saW5lRW5kPVp4fSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgdD1XeD9bangvV3gsR3gvV3hdOlV4P1tGeC9VeCxWeC9VeF06SHg/W0R4L0h4LEJ4L0h4XTpbTmFOLE5hTl07cmV0dXJuIER4PUJ4PUh4PUZ4PVZ4PVV4PWp4PUd4PVd4PTAsdH19O2Z1bmN0aW9uIFl4KHQsZSl7RHgrPXQsQngrPWUsKytIeH1mdW5jdGlvbiBYeCgpe3F4LnBvaW50PSR4fWZ1bmN0aW9uICR4KHQsZSl7cXgucG9pbnQ9S3gsWXgoa3g9dCxMeD1lKX1mdW5jdGlvbiBLeCh0LGUpe3ZhciBuPXQta3gsaT1lLUx4LHI9V3kobipuK2kqaSk7RngrPXIqKGt4K3QpLzIsVngrPXIqKEx4K2UpLzIsVXgrPXIsWXgoa3g9dCxMeD1lKX1mdW5jdGlvbiBaeCgpe3F4LnBvaW50PVl4fWZ1bmN0aW9uIEp4KCl7cXgucG9pbnQ9dHd9ZnVuY3Rpb24gUXgoKXtldyhDeCxBeCl9ZnVuY3Rpb24gdHcodCxlKXtxeC5wb2ludD1ldyxZeChDeD1reD10LEF4PUx4PWUpfWZ1bmN0aW9uIGV3KHQsZSl7dmFyIG49dC1reCxpPWUtTHgscj1XeShuKm4raSppKTtGeCs9ciooa3grdCkvMixWeCs9ciooTHgrZSkvMixVeCs9cixqeCs9KHI9THgqdC1reCplKSooa3grdCksR3grPXIqKEx4K2UpLFd4Kz0zKnIsWXgoa3g9dCxMeD1lKX1mdW5jdGlvbiBudyh0KXt0aGlzLl9jb250ZXh0PXR9bncucHJvdG90eXBlPXtfcmFkaXVzOjQuNSxwb2ludFJhZGl1czpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmFkaXVzPXQsdGhpc30scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXswPT09dGhpcy5fbGluZSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9wb2ludD1OYU59LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKSx0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpO2JyZWFrO2RlZmF1bHQ6dGhpcy5fY29udGV4dC5tb3ZlVG8odCt0aGlzLl9yYWRpdXMsZSksdGhpcy5fY29udGV4dC5hcmModCxlLHRoaXMuX3JhZGl1cywwLE55KX19LHJlc3VsdDpLeX07dmFyIGl3LHJ3LG93LGF3LHN3LGx3PVN5KCksY3c9e3BvaW50Okt5LGxpbmVTdGFydDpmdW5jdGlvbigpe2N3LnBvaW50PXV3fSxsaW5lRW5kOmZ1bmN0aW9uKCl7aXcmJmh3KHJ3LG93KSxjdy5wb2ludD1LeX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7aXc9ITB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtpdz1udWxsfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgdD0rbHc7cmV0dXJuIGx3LnJlc2V0KCksdH19O2Z1bmN0aW9uIHV3KHQsZSl7Y3cucG9pbnQ9aHcscnc9YXc9dCxvdz1zdz1lfWZ1bmN0aW9uIGh3KHQsZSl7bHcuYWRkKFd5KChhdy09dCkqYXcrKHN3LT1lKSpzdykpLGF3PXQsc3c9ZX1mdW5jdGlvbiBkdygpe3RoaXMuX3N0cmluZz1bXX1mdW5jdGlvbiBwdyh0KXtyZXR1cm4ibTAsIit0KyJhIit0KyIsIit0KyIgMCAxLDEgMCwiKy0yKnQrImEiK3QrIiwiK3QrIiAwIDEsMSAwLCIrMip0KyJ6In1mdW5jdGlvbiBmdyh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49bmV3IG13O2Zvcih2YXIgaSBpbiB0KW5baV09dFtpXTtyZXR1cm4gbi5zdHJlYW09ZSxufX1mdW5jdGlvbiBtdygpe31mdW5jdGlvbiBndyh0LGUsbil7dmFyIGk9dC5jbGlwRXh0ZW50JiZ0LmNsaXBFeHRlbnQoKTtyZXR1cm4gdC5zY2FsZSgxNTApLnRyYW5zbGF0ZShbMCwwXSksbnVsbCE9aSYmdC5jbGlwRXh0ZW50KG51bGwpLG52KG4sdC5zdHJlYW0oUngpKSxlKFJ4LnJlc3VsdCgpKSxudWxsIT1pJiZ0LmNsaXBFeHRlbnQoaSksdH1mdW5jdGlvbiBfdyh0LGUsbil7cmV0dXJuIGd3KHQsKGZ1bmN0aW9uKG4pe3ZhciBpPWVbMV1bMF0tZVswXVswXSxyPWVbMV1bMV0tZVswXVsxXSxvPU1hdGgubWluKGkvKG5bMV1bMF0tblswXVswXSksci8oblsxXVsxXS1uWzBdWzFdKSksYT0rZVswXVswXSsoaS1vKihuWzFdWzBdK25bMF1bMF0pKS8yLHM9K2VbMF1bMV0rKHItbyooblsxXVsxXStuWzBdWzFdKSkvMjt0LnNjYWxlKDE1MCpvKS50cmFuc2xhdGUoW2Esc10pfSksbil9ZnVuY3Rpb24geXcodCxlLG4pe3JldHVybiBfdyh0LFtbMCwwXSxlXSxuKX1mdW5jdGlvbiB2dyh0LGUsbil7cmV0dXJuIGd3KHQsKGZ1bmN0aW9uKG4pe3ZhciBpPStlLHI9aS8oblsxXVswXS1uWzBdWzBdKSxvPShpLXIqKG5bMV1bMF0rblswXVswXSkpLzIsYT0tcipuWzBdWzFdO3Quc2NhbGUoMTUwKnIpLnRyYW5zbGF0ZShbbyxhXSl9KSxuKX1mdW5jdGlvbiBidyh0LGUsbil7cmV0dXJuIGd3KHQsKGZ1bmN0aW9uKG4pe3ZhciBpPStlLHI9aS8oblsxXVsxXS1uWzBdWzFdKSxvPS1yKm5bMF1bMF0sYT0oaS1yKihuWzFdWzFdK25bMF1bMV0pKS8yO3Quc2NhbGUoMTUwKnIpLnRyYW5zbGF0ZShbbyxhXSl9KSxuKX1kdy5wcm90b3R5cGU9e19yYWRpdXM6NC41LF9jaXJjbGU6cHcoNC41KSxwb2ludFJhZGl1czpmdW5jdGlvbih0KXtyZXR1cm4odD0rdCkhPT10aGlzLl9yYWRpdXMmJih0aGlzLl9yYWRpdXM9dCx0aGlzLl9jaXJjbGU9bnVsbCksdGhpc30scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXswPT09dGhpcy5fbGluZSYmdGhpcy5fc3RyaW5nLnB1c2goIloiKSx0aGlzLl9wb2ludD1OYU59LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fc3RyaW5nLnB1c2goIk0iLHQsIiwiLGUpLHRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3N0cmluZy5wdXNoKCJMIix0LCIsIixlKTticmVhaztkZWZhdWx0Om51bGw9PXRoaXMuX2NpcmNsZSYmKHRoaXMuX2NpcmNsZT1wdyh0aGlzLl9yYWRpdXMpKSx0aGlzLl9zdHJpbmcucHVzaCgiTSIsdCwiLCIsZSx0aGlzLl9jaXJjbGUpfX0scmVzdWx0OmZ1bmN0aW9uKCl7aWYodGhpcy5fc3RyaW5nLmxlbmd0aCl7dmFyIHQ9dGhpcy5fc3RyaW5nLmpvaW4oIiIpO3JldHVybiB0aGlzLl9zdHJpbmc9W10sdH1yZXR1cm4gbnVsbH19LG13LnByb3RvdHlwZT17Y29uc3RydWN0b3I6bXcscG9pbnQ6ZnVuY3Rpb24odCxlKXt0aGlzLnN0cmVhbS5wb2ludCh0LGUpfSxzcGhlcmU6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5zcGhlcmUoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ucG9seWdvbkVuZCgpfX07dmFyIHh3PUJ5KDMwKk95KTtmdW5jdGlvbiB3dyh0LGUpe3JldHVybitlPyhmdW5jdGlvbiBuKHQsZSl7ZnVuY3Rpb24gbihpLHIsbyxhLHMsbCxjLHUsaCxkLHAsZixtLGcpe3ZhciBfPWMtaSx5PXUtcix2PV8qXyt5Knk7aWYodj40KmUmJm0tLSl7dmFyIGI9YStkLHg9cytwLHc9bCtmLFM9V3koYipiK3gqeCt3KncpLE09WHkody89UyksRT1SeShSeSh3KS0xKTxDeXx8Unkoby1oKTxDeT8obytoKS8yOkR5KHgsYiksVD10KEUsTSksQz1UWzBdLEE9VFsxXSxrPUMtaSxMPUEtcixQPXkqay1fKkw7KFAqUC92PmV8fFJ5KChfKmsreSpMKS92LS41KT4uM3x8YSpkK3MqcCtsKmY8eHcpJiYobihpLHIsbyxhLHMsbCxDLEEsRSxiLz1TLHgvPVMsdyxtLGcpLGcucG9pbnQoQyxBKSxuKEMsQSxFLGIseCx3LGMsdSxoLGQscCxmLG0sZykpfX1yZXR1cm4gZnVuY3Rpb24oZSl7dmFyIGkscixvLGEscyxsLGMsdSxoLGQscCxmLG09e3BvaW50OmcsbGluZVN0YXJ0Ol8sbGluZUVuZDp2LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2UucG9seWdvblN0YXJ0KCksbS5saW5lU3RhcnQ9Yn0scG9seWdvbkVuZDpmdW5jdGlvbigpe2UucG9seWdvbkVuZCgpLG0ubGluZVN0YXJ0PV99fTtmdW5jdGlvbiBnKG4saSl7bj10KG4saSksZS5wb2ludChuWzBdLG5bMV0pfWZ1bmN0aW9uIF8oKXt1PU5hTixtLnBvaW50PXksZS5saW5lU3RhcnQoKX1mdW5jdGlvbiB5KGkscil7dmFyIG89Z3YoW2kscl0pLGE9dChpLHIpO24odSxoLGMsZCxwLGYsdT1hWzBdLGg9YVsxXSxjPWksZD1vWzBdLHA9b1sxXSxmPW9bMl0sMTYsZSksZS5wb2ludCh1LGgpfWZ1bmN0aW9uIHYoKXttLnBvaW50PWcsZS5saW5lRW5kKCl9ZnVuY3Rpb24gYigpe18oKSxtLnBvaW50PXgsbS5saW5lRW5kPXd9ZnVuY3Rpb24geCh0LGUpe3koaT10LGUpLHI9dSxvPWgsYT1kLHM9cCxsPWYsbS5wb2ludD15fWZ1bmN0aW9uIHcoKXtuKHUsaCxjLGQscCxmLHIsbyxpLGEscyxsLDE2LGUpLG0ubGluZUVuZD12LHYoKX1yZXR1cm4gbX19KSh0LGUpOihmdW5jdGlvbiBpKHQpe3JldHVybiBmdyh7cG9pbnQ6ZnVuY3Rpb24oZSxuKXtlPXQoZSxuKSx0aGlzLnN0cmVhbS5wb2ludChlWzBdLGVbMV0pfX0pfSkodCl9dmFyIFN3PWZ3KHtwb2ludDpmdW5jdGlvbih0LGUpe3RoaXMuc3RyZWFtLnBvaW50KHQqT3ksZSpPeSl9fSk7ZnVuY3Rpb24gTXcodCxlLG4saSxyKXtmdW5jdGlvbiBvKG8sYSl7cmV0dXJuW2UrdCoobyo9aSksbi10KihhKj1yKV19cmV0dXJuIG8uaW52ZXJ0PWZ1bmN0aW9uKG8sYSl7cmV0dXJuWyhvLWUpL3QqaSwobi1hKS90KnJdfSxvfWZ1bmN0aW9uIEV3KHQsZSxuLGkscixvKXt2YXIgYT1CeShvKSxzPWp5KG8pLGw9YSp0LGM9cyp0LHU9YS90LGg9cy90LGQ9KHMqbi1hKmUpL3QscD0ocyplK2EqbikvdDtmdW5jdGlvbiBmKHQsbyl7cmV0dXJuW2wqKHQqPWkpLWMqKG8qPXIpK2Usbi1jKnQtbCpvXX1yZXR1cm4gZi5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm5baSoodSp0LWgqZStkKSxyKihwLWgqdC11KmUpXX0sZn1mdW5jdGlvbiBUdyh0KXtyZXR1cm4gQ3coKGZ1bmN0aW9uKCl7cmV0dXJuIHR9KSkoKX1mdW5jdGlvbiBDdyh0KXt2YXIgZSxuLGkscixvLGEscyxsLGMsdSxoPTE1MCxkPTQ4MCxwPTI1MCxmPTAsbT0wLGc9MCxfPTAseT0wLHY9MCxiPTEseD0xLHc9bnVsbCxTPUJiLE09bnVsbCxFPW14LFQ9LjU7ZnVuY3Rpb24gQyh0KXtyZXR1cm4gbCh0WzBdKk95LHRbMV0qT3kpfWZ1bmN0aW9uIEEodCl7cmV0dXJuKHQ9bC5pbnZlcnQodFswXSx0WzFdKSkmJlt0WzBdKkl5LHRbMV0qSXldfWZ1bmN0aW9uIGsoKXt2YXIgdD1FdyhoLDAsMCxiLHgsdikuYXBwbHkobnVsbCxlKGYsbSkpLGk9KHY/RXc6TXcpKGgsZC10WzBdLHAtdFsxXSxiLHgsdik7cmV0dXJuIG49YmIoZyxfLHkpLHM9eWIoZSxpKSxsPXliKG4scyksYT13dyhzLFQpLEwoKX1mdW5jdGlvbiBMKCl7cmV0dXJuIGM9dT1udWxsLEN9cmV0dXJuIEMuc3RyZWFtPWZ1bmN0aW9uKHQpe3JldHVybiBjJiZ1PT09dD9jOmM9U3coKGZ1bmN0aW9uIGUodCl7cmV0dXJuIGZ3KHtwb2ludDpmdW5jdGlvbihlLG4pe3ZhciBpPXQoZSxuKTtyZXR1cm4gdGhpcy5zdHJlYW0ucG9pbnQoaVswXSxpWzFdKX19KX0pKG4pKFMoYShFKHU9dCkpKSkpfSxDLnByZWNsaXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFM9dCx3PXZvaWQgMCxMKCkpOlN9LEMucG9zdGNsaXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEU9dCxNPWk9cj1vPW51bGwsTCgpKTpFfSxDLmNsaXBBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oUz0rdD9WYih3PXQqT3kpOih3PW51bGwsQmIpLEwoKSk6dypJeX0sQy5jbGlwRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhFPW51bGw9PXQ/KE09aT1yPW89bnVsbCxteCk6R2IoTT0rdFswXVswXSxpPSt0WzBdWzFdLHI9K3RbMV1bMF0sbz0rdFsxXVsxXSksTCgpKTpudWxsPT1NP251bGw6W1tNLGldLFtyLG9dXX0sQy5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0rdCxrKCkpOmh9LEMudHJhbnNsYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPSt0WzBdLHA9K3RbMV0saygpKTpbZCxwXX0sQy5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9dFswXSUzNjAqT3ksbT10WzFdJTM2MCpPeSxrKCkpOltmKkl5LG0qSXldfSxDLnJvdGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz10WzBdJTM2MCpPeSxfPXRbMV0lMzYwKk95LHk9dC5sZW5ndGg+Mj90WzJdJTM2MCpPeTowLGsoKSk6W2cqSXksXypJeSx5Kkl5XX0sQy5hbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odj10JTM2MCpPeSxrKCkpOnYqSXl9LEMucmVmbGVjdFg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGI9dD8tMToxLGsoKSk6YjwwfSxDLnJlZmxlY3RZPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh4PXQ/LTE6MSxrKCkpOng8MH0sQy5wcmVjaXNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9d3cocyxUPXQqdCksTCgpKTpXeShUKX0sQy5maXRFeHRlbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gX3coQyx0LGUpfSxDLmZpdFNpemU9ZnVuY3Rpb24odCxlKXtyZXR1cm4geXcoQyx0LGUpfSxDLmZpdFdpZHRoPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZ3KEMsdCxlKX0sQy5maXRIZWlnaHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYncoQyx0LGUpfSxmdW5jdGlvbigpe3JldHVybiBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLEMuaW52ZXJ0PWUuaW52ZXJ0JiZBLGsoKX19ZnVuY3Rpb24gQXcodCl7dmFyIGU9MCxuPWt5LzMsaT1Ddyh0KSxyPWkoZSxuKTtyZXR1cm4gci5wYXJhbGxlbHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/aShlPXRbMF0qT3ksbj10WzFdKk95KTpbZSpJeSxuKkl5XX0scn1mdW5jdGlvbiBrdyh0LGUpe3ZhciBuPWp5KHQpLGk9KG4rankoZSkpLzI7aWYoUnkoaSk8Q3kpcmV0dXJuKGZ1bmN0aW9uIHIodCl7dmFyIGU9QnkodCk7ZnVuY3Rpb24gbih0LG4pe3JldHVyblt0KmUsankobikvZV19cmV0dXJuIG4uaW52ZXJ0PWZ1bmN0aW9uKHQsbil7cmV0dXJuW3QvZSxYeShuKmUpXX0sbn0pKHQpO3ZhciBvPTErbiooMippLW4pLGE9V3kobykvaTtmdW5jdGlvbiBzKHQsZSl7dmFyIG49V3koby0yKmkqankoZSkpL2k7cmV0dXJuW24qankodCo9aSksYS1uKkJ5KHQpXX1yZXR1cm4gcy5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1hLWUscj1EeSh0LFJ5KG4pKSpHeShuKTtyZXR1cm4gbippPDAmJihyLT1reSpHeSh0KSpHeShuKSksW3IvaSxYeSgoby0odCp0K24qbikqaSppKS8oMippKSldfSxzfWZ1bmN0aW9uIEx3KCl7cmV0dXJuIEF3KGt3KS5zY2FsZSgxNTUuNDI0KS5jZW50ZXIoWzAsMzMuNjQ0Ml0pfWZ1bmN0aW9uIFB3KCl7cmV0dXJuIEx3KCkucGFyYWxsZWxzKFsyOS41LDQ1LjVdKS5zY2FsZSgxMDcwKS50cmFuc2xhdGUoWzQ4MCwyNTBdKS5yb3RhdGUoWzk2LDBdKS5jZW50ZXIoWy0uNiwzOC43XSl9ZnVuY3Rpb24gTncodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7dmFyIGk9QnkoZSkscj1CeShuKSxvPXQoaSpyKTtyZXR1cm5bbypyKmp5KGUpLG8qankobildfX1mdW5jdGlvbiBJdyh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXt2YXIgaT1XeShlKmUrbipuKSxyPXQoaSksbz1qeShyKSxhPUJ5KHIpO3JldHVybltEeShlKm8saSphKSxYeShpJiZuKm8vaSldfX12YXIgT3c9TncoKGZ1bmN0aW9uKHQpe3JldHVybiBXeSgyLygxK3QpKX0pKTtPdy5pbnZlcnQ9SXcoKGZ1bmN0aW9uKHQpe3JldHVybiAyKlh5KHQvMil9KSk7dmFyIFJ3PU53KChmdW5jdGlvbih0KXtyZXR1cm4odD1ZeSh0KSkmJnQvankodCl9KSk7ZnVuY3Rpb24gencodCxlKXtyZXR1cm5bdCxWeShxeSgoTHkrZSkvMikpXX1mdW5jdGlvbiBEdyh0KXt2YXIgZSxuLGkscj1Udyh0KSxvPXIuY2VudGVyLGE9ci5zY2FsZSxzPXIudHJhbnNsYXRlLGw9ci5jbGlwRXh0ZW50LGM9bnVsbDtmdW5jdGlvbiB1KCl7dmFyIG89a3kqYSgpLHM9cihNYihyLnJvdGF0ZSgpKS5pbnZlcnQoWzAsMF0pKTtyZXR1cm4gbChudWxsPT1jP1tbc1swXS1vLHNbMV0tb10sW3NbMF0rbyxzWzFdK29dXTp0PT09enc/W1tNYXRoLm1heChzWzBdLW8sYyksZV0sW01hdGgubWluKHNbMF0rbyxuKSxpXV06W1tjLE1hdGgubWF4KHNbMV0tbyxlKV0sW24sTWF0aC5taW4oc1sxXStvLGkpXV0pfXJldHVybiByLnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhKHQpLHUoKSk6YSgpfSxyLnRyYW5zbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocyh0KSx1KCkpOnMoKX0sci5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG8odCksdSgpKTpvKCl9LHIuY2xpcEV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09dD9jPWU9bj1pPW51bGw6KGM9K3RbMF1bMF0sZT0rdFswXVsxXSxuPSt0WzFdWzBdLGk9K3RbMV1bMV0pLHUoKSk6bnVsbD09Yz9udWxsOltbYyxlXSxbbixpXV19LHUoKX1mdW5jdGlvbiBCdyh0KXtyZXR1cm4gcXkoKEx5K3QpLzIpfWZ1bmN0aW9uIEh3KHQsZSl7dmFyIG49QnkodCksaT10PT09ZT9qeSh0KTpWeShuL0J5KGUpKS9WeShCdyhlKS9Cdyh0KSkscj1uKlV5KEJ3KHQpLGkpL2k7aWYoIWkpcmV0dXJuIHp3O2Z1bmN0aW9uIG8odCxlKXtyPjA/ZTwtTHkrQ3kmJihlPS1MeStDeSk6ZT5MeS1DeSYmKGU9THktQ3kpO3ZhciBuPXIvVXkoQncoZSksaSk7cmV0dXJuW24qankoaSp0KSxyLW4qQnkoaSp0KV19cmV0dXJuIG8uaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIG49ci1lLG89R3koaSkqV3kodCp0K24qbiksYT1EeSh0LFJ5KG4pKSpHeShuKTtyZXR1cm4gbippPDAmJihhLT1reSpHeSh0KSpHeShuKSksW2EvaSwyKnp5KFV5KHIvbywxL2kpKS1MeV19LG99ZnVuY3Rpb24gRncodCxlKXtyZXR1cm5bdCxlXX1mdW5jdGlvbiBWdyh0LGUpe3ZhciBuPUJ5KHQpLGk9dD09PWU/ankodCk6KG4tQnkoZSkpLyhlLXQpLHI9bi9pK3Q7aWYoUnkoaSk8Q3kpcmV0dXJuIEZ3O2Z1bmN0aW9uIG8odCxlKXt2YXIgbj1yLWUsbz1pKnQ7cmV0dXJuW24qankobyksci1uKkJ5KG8pXX1yZXR1cm4gby5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1yLWUsbz1EeSh0LFJ5KG4pKSpHeShuKTtyZXR1cm4gbippPDAmJihvLT1reSpHeSh0KSpHeShuKSksW28vaSxyLUd5KGkpKld5KHQqdCtuKm4pXX0sb31Sdy5pbnZlcnQ9SXcoKGZ1bmN0aW9uKHQpe3JldHVybiB0fSkpLHp3LmludmVydD1mdW5jdGlvbih0LGUpe3JldHVyblt0LDIqenkoRnkoZSkpLUx5XX0sRncuaW52ZXJ0PUZ3O3ZhciBVdz0xLjM0MDI2NCxqdz0tLjA4MTEwNixHdz04OTNlLTYsV3c9LjAwMzc5Nixxdz1XeSgzKS8yO2Z1bmN0aW9uIFl3KHQsZSl7dmFyIG49WHkocXcqankoZSkpLGk9bipuLHI9aSppKmk7cmV0dXJuW3QqQnkobikvKHF3KihVdyszKmp3KmkrciooNypHdys5Kld3KmkpKSksbiooVXcrancqaStyKihHdytXdyppKSldfWZ1bmN0aW9uIFh3KHQsZSl7dmFyIG49QnkoZSksaT1CeSh0KSpuO3JldHVybltuKmp5KHQpL2ksankoZSkvaV19ZnVuY3Rpb24gJHcodCxlKXt2YXIgbj1lKmUsaT1uKm47cmV0dXJuW3QqKC44NzA3LS4xMzE5NzkqbitpKihpKiguMDAzOTcxKm4tLjAwMTUyOSppKS0uMDEzNzkxKSksZSooMS4wMDcyMjYrbiooLjAxNTA4NStpKiguMDI4ODc0Km4tLjA0NDQ3NS0uMDA1OTE2KmkpKSldfWZ1bmN0aW9uIEt3KHQsZSl7cmV0dXJuW0J5KGUpKmp5KHQpLGp5KGUpXX1mdW5jdGlvbiBadyh0LGUpe3ZhciBuPUJ5KGUpLGk9MStCeSh0KSpuO3JldHVybltuKmp5KHQpL2ksankoZSkvaV19ZnVuY3Rpb24gSncodCxlKXtyZXR1cm5bVnkocXkoKEx5K2UpLzIpKSwtdF19ZnVuY3Rpb24gUXcodCxlKXtyZXR1cm4gdC5wYXJlbnQ9PT1lLnBhcmVudD8xOjJ9ZnVuY3Rpb24gdFModCxlKXtyZXR1cm4gdCtlLnh9ZnVuY3Rpb24gZVModCxlKXtyZXR1cm4gTWF0aC5tYXgodCxlLnkpfWZ1bmN0aW9uIG5TKHQpe3ZhciBlPTAsbj10LmNoaWxkcmVuLGk9biYmbi5sZW5ndGg7aWYoaSlmb3IoOy0taT49MDspZSs9bltpXS52YWx1ZTtlbHNlIGU9MTt0LnZhbHVlPWV9ZnVuY3Rpb24gaVModCxlKXt2YXIgbixpLHIsbyxhLHM9bmV3IHNTKHQpLGw9K3QudmFsdWUmJihzLnZhbHVlPXQudmFsdWUpLGM9W3NdO2ZvcihudWxsPT1lJiYoZT1yUyk7bj1jLnBvcCgpOylpZihsJiYobi52YWx1ZT0rbi5kYXRhLnZhbHVlKSwocj1lKG4uZGF0YSkpJiYoYT1yLmxlbmd0aCkpZm9yKG4uY2hpbGRyZW49bmV3IEFycmF5KGEpLG89YS0xO28+PTA7LS1vKWMucHVzaChpPW4uY2hpbGRyZW5bb109bmV3IHNTKHJbb10pKSxpLnBhcmVudD1uLGkuZGVwdGg9bi5kZXB0aCsxO3JldHVybiBzLmVhY2hCZWZvcmUoYVMpfWZ1bmN0aW9uIHJTKHQpe3JldHVybiB0LmNoaWxkcmVufWZ1bmN0aW9uIG9TKHQpe3QuZGF0YT10LmRhdGEuZGF0YX1mdW5jdGlvbiBhUyh0KXt2YXIgZT0wO2Rve3QuaGVpZ2h0PWV9d2hpbGUoKHQ9dC5wYXJlbnQpJiZ0LmhlaWdodDwrK2UpfWZ1bmN0aW9uIHNTKHQpe3RoaXMuZGF0YT10LHRoaXMuZGVwdGg9dGhpcy5oZWlnaHQ9MCx0aGlzLnBhcmVudD1udWxsfVl3LmludmVydD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbixpPWUscj1pKmksbz1yKnIqcixhPTA7YTwxMiYmKG89KHI9KGktPW49KGkqKFV3K2p3KnIrbyooR3crV3cqcikpLWUpLyhVdyszKmp3KnIrbyooNypHdys5Kld3KnIpKSkqaSkqcipyLCEoUnkobik8QXkpKTsrK2EpO3JldHVybltxdyp0KihVdyszKmp3KnIrbyooNypHdys5Kld3KnIpKS9CeShpKSxYeShqeShpKS9xdyldfSxYdy5pbnZlcnQ9SXcoenkpLCR3LmludmVydD1mdW5jdGlvbih0LGUpe3ZhciBuLGk9ZSxyPTI1O2Rve3ZhciBvPWkqaSxhPW8qbztpLT1uPShpKigxLjAwNzIyNitvKiguMDE1MDg1K2EqKC4wMjg4NzQqby0uMDQ0NDc1LS4wMDU5MTYqYSkpKS1lKS8oMS4wMDcyMjYrbyooLjA0NTI1NSthKiguMjU5ODY2Km8tLjMxMTMyNS0uMDA1OTE2KjExKmEpKSl9d2hpbGUoUnkobik+Q3kmJi0tcj4wKTtyZXR1cm5bdC8oLjg3MDcrKG89aSppKSoobyoobypvKm8qKC4wMDM5NzEtLjAwMTUyOSpvKS0uMDEzNzkxKS0uMTMxOTc5KSksaV19LEt3LmludmVydD1JdyhYeSksWncuaW52ZXJ0PUl3KChmdW5jdGlvbih0KXtyZXR1cm4gMip6eSh0KX0pKSxKdy5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm5bLWUsMip6eShGeSh0KSktTHldfSxzUy5wcm90b3R5cGU9aVMucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpzUyxjb3VudDpmdW5jdGlvbiBsUygpe3JldHVybiB0aGlzLmVhY2hBZnRlcihuUyl9LGVhY2g6ZnVuY3Rpb24gY1ModCl7dmFyIGUsbixpLHIsbz10aGlzLGE9W29dO2Rve2ZvcihlPWEucmV2ZXJzZSgpLGE9W107bz1lLnBvcCgpOylpZih0KG8pLG49by5jaGlsZHJlbilmb3IoaT0wLHI9bi5sZW5ndGg7aTxyOysraSlhLnB1c2gobltpXSl9d2hpbGUoYS5sZW5ndGgpO3JldHVybiB0aGlzfSxlYWNoQWZ0ZXI6ZnVuY3Rpb24gdVModCl7Zm9yKHZhciBlLG4saSxyPXRoaXMsbz1bcl0sYT1bXTtyPW8ucG9wKCk7KWlmKGEucHVzaChyKSxlPXIuY2hpbGRyZW4pZm9yKG49MCxpPWUubGVuZ3RoO248aTsrK24pby5wdXNoKGVbbl0pO2Zvcig7cj1hLnBvcCgpOyl0KHIpO3JldHVybiB0aGlzfSxlYWNoQmVmb3JlOmZ1bmN0aW9uIGhTKHQpe2Zvcih2YXIgZSxuLGk9dGhpcyxyPVtpXTtpPXIucG9wKCk7KWlmKHQoaSksZT1pLmNoaWxkcmVuKWZvcihuPWUubGVuZ3RoLTE7bj49MDstLW4pci5wdXNoKGVbbl0pO3JldHVybiB0aGlzfSxzdW06ZnVuY3Rpb24gZFModCl7cmV0dXJuIHRoaXMuZWFjaEFmdGVyKChmdW5jdGlvbihlKXtmb3IodmFyIG49K3QoZS5kYXRhKXx8MCxpPWUuY2hpbGRyZW4scj1pJiZpLmxlbmd0aDstLXI+PTA7KW4rPWlbcl0udmFsdWU7ZS52YWx1ZT1ufSkpfSxzb3J0OmZ1bmN0aW9uIHBTKHQpe3JldHVybiB0aGlzLmVhY2hCZWZvcmUoKGZ1bmN0aW9uKGUpe2UuY2hpbGRyZW4mJmUuY2hpbGRyZW4uc29ydCh0KX0pKX0scGF0aDpmdW5jdGlvbiBmUyh0KXtmb3IodmFyIGU9dGhpcyxuPShmdW5jdGlvbiBpKHQsZSl7aWYodD09PWUpcmV0dXJuIHQ7dmFyIG49dC5hbmNlc3RvcnMoKSxpPWUuYW5jZXN0b3JzKCkscj1udWxsO2Zvcih0PW4ucG9wKCksZT1pLnBvcCgpO3Q9PT1lOylyPXQsdD1uLnBvcCgpLGU9aS5wb3AoKTtyZXR1cm4gcn0pKGUsdCkscj1bZV07ZSE9PW47KXIucHVzaChlPWUucGFyZW50KTtmb3IodmFyIG89ci5sZW5ndGg7dCE9PW47KXIuc3BsaWNlKG8sMCx0KSx0PXQucGFyZW50O3JldHVybiByfSxhbmNlc3RvcnM6ZnVuY3Rpb24gbVMoKXtmb3IodmFyIHQ9dGhpcyxlPVt0XTt0PXQucGFyZW50OyllLnB1c2godCk7cmV0dXJuIGV9LGRlc2NlbmRhbnRzOmZ1bmN0aW9uIGdTKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oZSl7dC5wdXNoKGUpfSkpLHR9LGxlYXZlczpmdW5jdGlvbiBfUygpe3ZhciB0PVtdO3JldHVybiB0aGlzLmVhY2hCZWZvcmUoKGZ1bmN0aW9uKGUpe2UuY2hpbGRyZW58fHQucHVzaChlKX0pKSx0fSxsaW5rczpmdW5jdGlvbiB5Uygpe3ZhciB0PXRoaXMsZT1bXTtyZXR1cm4gdC5lYWNoKChmdW5jdGlvbihuKXtuIT09dCYmZS5wdXNoKHtzb3VyY2U6bi5wYXJlbnQsdGFyZ2V0Om59KX0pKSxlfSxjb3B5OmZ1bmN0aW9uIHZTKCl7cmV0dXJuIGlTKHRoaXMpLmVhY2hCZWZvcmUob1MpfX07dmFyIGJTPUFycmF5LnByb3RvdHlwZS5zbGljZTtmdW5jdGlvbiB4Uyh0KXtmb3IodmFyIGUsbixpPTAscj0odD0oZnVuY3Rpb24gbyh0KXtmb3IodmFyIGUsbixpPXQubGVuZ3RoO2k7KW49TWF0aC5yYW5kb20oKSppLS18MCxlPXRbaV0sdFtpXT10W25dLHRbbl09ZTtyZXR1cm4gdH0pKGJTLmNhbGwodCkpKS5sZW5ndGgsYT1bXTtpPHI7KWU9dFtpXSxuJiZNUyhuLGUpPysraToobj1UUyhhPXdTKGEsZSkpLGk9MCk7cmV0dXJuIG59ZnVuY3Rpb24gd1ModCxlKXt2YXIgbixpO2lmKEVTKGUsdCkpcmV0dXJuW2VdO2ZvcihuPTA7bjx0Lmxlbmd0aDsrK24paWYoU1MoZSx0W25dKSYmRVMoQ1ModFtuXSxlKSx0KSlyZXR1cm5bdFtuXSxlXTtmb3Iobj0wO248dC5sZW5ndGgtMTsrK24pZm9yKGk9bisxO2k8dC5sZW5ndGg7KytpKWlmKFNTKENTKHRbbl0sdFtpXSksZSkmJlNTKENTKHRbbl0sZSksdFtpXSkmJlNTKENTKHRbaV0sZSksdFtuXSkmJkVTKEFTKHRbbl0sdFtpXSxlKSx0KSlyZXR1cm5bdFtuXSx0W2ldLGVdO3Rocm93IG5ldyBFcnJvcn1mdW5jdGlvbiBTUyh0LGUpe3ZhciBuPXQuci1lLnIsaT1lLngtdC54LHI9ZS55LXQueTtyZXR1cm4gbjwwfHxuKm48aSppK3Iqcn1mdW5jdGlvbiBNUyh0LGUpe3ZhciBuPXQuci1lLnIrMWUtNixpPWUueC10Lngscj1lLnktdC55O3JldHVybiBuPjAmJm4qbj5pKmkrcipyfWZ1bmN0aW9uIEVTKHQsZSl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDsrK24paWYoIU1TKHQsZVtuXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gVFModCl7c3dpdGNoKHQubGVuZ3RoKXtjYXNlIDE6cmV0dXJuKGZ1bmN0aW9uIGUodCl7cmV0dXJue3g6dC54LHk6dC55LHI6dC5yfX0pKHRbMF0pO2Nhc2UgMjpyZXR1cm4gQ1ModFswXSx0WzFdKTtjYXNlIDM6cmV0dXJuIEFTKHRbMF0sdFsxXSx0WzJdKX19ZnVuY3Rpb24gQ1ModCxlKXt2YXIgbj10LngsaT10Lnkscj10LnIsbz1lLngsYT1lLnkscz1lLnIsbD1vLW4sYz1hLWksdT1zLXIsaD1NYXRoLnNxcnQobCpsK2MqYyk7cmV0dXJue3g6KG4rbytsL2gqdSkvMix5OihpK2ErYy9oKnUpLzIscjooaCtyK3MpLzJ9fWZ1bmN0aW9uIEFTKHQsZSxuKXt2YXIgaT10Lngscj10Lnksbz10LnIsYT1lLngscz1lLnksbD1lLnIsYz1uLngsdT1uLnksaD1uLnIsZD1pLWEscD1pLWMsZj1yLXMsbT1yLXUsZz1sLW8sXz1oLW8seT1pKmkrcipyLW8qbyx2PXktYSphLXMqcytsKmwsYj15LWMqYy11KnUraCpoLHg9cCpmLWQqbSx3PShmKmItbSp2KS8oMip4KS1pLFM9KG0qZy1mKl8pL3gsTT0ocCp2LWQqYikvKDIqeCktcixFPShkKl8tcCpnKS94LFQ9UypTK0UqRS0xLEM9Mioobyt3KlMrTSpFKSxBPXcqdytNKk0tbypvLGs9LShUPyhDK01hdGguc3FydChDKkMtNCpUKkEpKS8oMipUKTpBL0MpO3JldHVybnt4OmkrdytTKmsseTpyK00rRSprLHI6a319ZnVuY3Rpb24ga1ModCxlLG4pe3ZhciBpLHIsbyxhLHM9dC54LWUueCxsPXQueS1lLnksYz1zKnMrbCpsO2M/KHI9ZS5yK24ucixhPXQucituLnIsKHIqPXIpPihhKj1hKT8oaT0oYythLXIpLygyKmMpLG89TWF0aC5zcXJ0KE1hdGgubWF4KDAsYS9jLWkqaSkpLG4ueD10LngtaSpzLW8qbCxuLnk9dC55LWkqbCtvKnMpOihpPShjK3ItYSkvKDIqYyksbz1NYXRoLnNxcnQoTWF0aC5tYXgoMCxyL2MtaSppKSksbi54PWUueCtpKnMtbypsLG4ueT1lLnkraSpsK28qcykpOihuLng9ZS54K24ucixuLnk9ZS55KX1mdW5jdGlvbiBMUyh0LGUpe3ZhciBuPXQucitlLnItMWUtNixpPWUueC10Lngscj1lLnktdC55O3JldHVybiBuPjAmJm4qbj5pKmkrcipyfWZ1bmN0aW9uIFBTKHQpe3ZhciBlPXQuXyxuPXQubmV4dC5fLGk9ZS5yK24ucixyPShlLngqbi5yK24ueCplLnIpL2ksbz0oZS55Km4ucituLnkqZS5yKS9pO3JldHVybiByKnIrbypvfWZ1bmN0aW9uIE5TKHQpe3RoaXMuXz10LHRoaXMubmV4dD1udWxsLHRoaXMucHJldmlvdXM9bnVsbH1mdW5jdGlvbiBJUyh0KXtpZighKHI9dC5sZW5ndGgpKXJldHVybiAwO3ZhciBlLG4saSxyLG8sYSxzLGwsYyx1LGg7aWYoKGU9dFswXSkueD0wLGUueT0wLCEocj4xKSlyZXR1cm4gZS5yO2lmKGUueD0tKG49dFsxXSkucixuLng9ZS5yLG4ueT0wLCEocj4yKSlyZXR1cm4gZS5yK24ucjtrUyhuLGUsaT10WzJdKSxlPW5ldyBOUyhlKSxuPW5ldyBOUyhuKSxpPW5ldyBOUyhpKSxlLm5leHQ9aS5wcmV2aW91cz1uLG4ubmV4dD1lLnByZXZpb3VzPWksaS5uZXh0PW4ucHJldmlvdXM9ZTt0OmZvcihzPTM7czxyOysrcyl7a1MoZS5fLG4uXyxpPXRbc10pLGk9bmV3IE5TKGkpLGw9bi5uZXh0LGM9ZS5wcmV2aW91cyx1PW4uXy5yLGg9ZS5fLnI7ZG97aWYodTw9aCl7aWYoTFMobC5fLGkuXykpe2UubmV4dD1uPWwsbi5wcmV2aW91cz1lLC0tcztjb250aW51ZSB0fXUrPWwuXy5yLGw9bC5uZXh0fWVsc2V7aWYoTFMoYy5fLGkuXykpeyhlPWMpLm5leHQ9bixuLnByZXZpb3VzPWUsLS1zO2NvbnRpbnVlIHR9aCs9Yy5fLnIsYz1jLnByZXZpb3VzfX13aGlsZShsIT09Yy5uZXh0KTtmb3IoaS5wcmV2aW91cz1lLGkubmV4dD1uLGUubmV4dD1uLnByZXZpb3VzPW49aSxvPVBTKGUpOyhpPWkubmV4dCkhPT1uOykoYT1QUyhpKSk8byYmKGU9aSxvPWEpO249ZS5uZXh0fWZvcihlPVtuLl9dLGk9bjsoaT1pLm5leHQpIT09bjspZS5wdXNoKGkuXyk7Zm9yKGk9eFMoZSkscz0wO3M8cjsrK3MpKGU9dFtzXSkueC09aS54LGUueS09aS55O3JldHVybiBpLnJ9ZnVuY3Rpb24gT1ModCl7cmV0dXJuIG51bGw9PXQ/bnVsbDpSUyh0KX1mdW5jdGlvbiBSUyh0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHR9ZnVuY3Rpb24gelMoKXtyZXR1cm4gMH1mdW5jdGlvbiBEUyh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gQlModCl7cmV0dXJuIE1hdGguc3FydCh0LnZhbHVlKX1mdW5jdGlvbiBIUyh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7ZS5jaGlsZHJlbnx8KGUucj1NYXRoLm1heCgwLCt0KGUpfHwwKSl9fWZ1bmN0aW9uIEZTKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe2lmKGk9bi5jaGlsZHJlbil7dmFyIGkscixvLGE9aS5sZW5ndGgscz10KG4pKmV8fDA7aWYocylmb3Iocj0wO3I8YTsrK3IpaVtyXS5yKz1zO2lmKG89SVMoaSkscylmb3Iocj0wO3I8YTsrK3IpaVtyXS5yLT1zO24ucj1vK3N9fX1mdW5jdGlvbiBWUyh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49ZS5wYXJlbnQ7ZS5yKj10LG4mJihlLng9bi54K3QqZS54LGUueT1uLnkrdCplLnkpfX1mdW5jdGlvbiBVUyh0KXt0LngwPU1hdGgucm91bmQodC54MCksdC55MD1NYXRoLnJvdW5kKHQueTApLHQueDE9TWF0aC5yb3VuZCh0LngxKSx0LnkxPU1hdGgucm91bmQodC55MSl9ZnVuY3Rpb24galModCxlLG4saSxyKXtmb3IodmFyIG8sYT10LmNoaWxkcmVuLHM9LTEsbD1hLmxlbmd0aCxjPXQudmFsdWUmJihpLWUpL3QudmFsdWU7KytzPGw7KShvPWFbc10pLnkwPW4sby55MT1yLG8ueDA9ZSxvLngxPWUrPW8udmFsdWUqY312YXIgR1M9e2RlcHRoOi0xfSxXUz17fTtmdW5jdGlvbiBxUyh0KXtyZXR1cm4gdC5pZH1mdW5jdGlvbiBZUyh0KXtyZXR1cm4gdC5wYXJlbnRJZH1mdW5jdGlvbiBYUyh0LGUpe3JldHVybiB0LnBhcmVudD09PWUucGFyZW50PzE6Mn1mdW5jdGlvbiAkUyh0KXt2YXIgZT10LmNoaWxkcmVuO3JldHVybiBlP2VbMF06dC50fWZ1bmN0aW9uIEtTKHQpe3ZhciBlPXQuY2hpbGRyZW47cmV0dXJuIGU/ZVtlLmxlbmd0aC0xXTp0LnR9ZnVuY3Rpb24gWlModCxlLG4pe3ZhciBpPW4vKGUuaS10LmkpO2UuYy09aSxlLnMrPW4sdC5jKz1pLGUueis9bixlLm0rPW59ZnVuY3Rpb24gSlModCxlLG4pe3JldHVybiB0LmEucGFyZW50PT09ZS5wYXJlbnQ/dC5hOm59ZnVuY3Rpb24gUVModCxlKXt0aGlzLl89dCx0aGlzLnBhcmVudD1udWxsLHRoaXMuY2hpbGRyZW49bnVsbCx0aGlzLkE9bnVsbCx0aGlzLmE9dGhpcyx0aGlzLno9MCx0aGlzLm09MCx0aGlzLmM9MCx0aGlzLnM9MCx0aGlzLnQ9bnVsbCx0aGlzLmk9ZX1mdW5jdGlvbiB0TSh0LGUsbixpLHIpe2Zvcih2YXIgbyxhPXQuY2hpbGRyZW4scz0tMSxsPWEubGVuZ3RoLGM9dC52YWx1ZSYmKHItbikvdC52YWx1ZTsrK3M8bDspKG89YVtzXSkueDA9ZSxvLngxPWksby55MD1uLG8ueTE9bis9by52YWx1ZSpjfVFTLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHNTLnByb3RvdHlwZSk7dmFyIGVNPSgxK01hdGguc3FydCg1KSkvMjtmdW5jdGlvbiBuTSh0LGUsbixpLHIsbyl7Zm9yKHZhciBhLHMsbCxjLHUsaCxkLHAsZixtLGcsXz1bXSx5PWUuY2hpbGRyZW4sdj0wLGI9MCx4PXkubGVuZ3RoLHc9ZS52YWx1ZTt2PHg7KXtsPXItbixjPW8taTtkb3t1PXlbYisrXS52YWx1ZX13aGlsZSghdSYmYjx4KTtmb3IoaD1kPXUsZz11KnUqKG09TWF0aC5tYXgoYy9sLGwvYykvKHcqdCkpLGY9TWF0aC5tYXgoZC9nLGcvaCk7Yjx4OysrYil7aWYodSs9cz15W2JdLnZhbHVlLHM8aCYmKGg9cykscz5kJiYoZD1zKSxnPXUqdSptLChwPU1hdGgubWF4KGQvZyxnL2gpKT5mKXt1LT1zO2JyZWFrfWY9cH1fLnB1c2goYT17dmFsdWU6dSxkaWNlOmw8YyxjaGlsZHJlbjp5LnNsaWNlKHYsYil9KSxhLmRpY2U/alMoYSxuLGkscix3P2krPWMqdS93Om8pOnRNKGEsbixpLHc/bis9bCp1L3c6cixvKSx3LT11LHY9Yn1yZXR1cm4gX312YXIgaU09KGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0LG4saSxyLG8pe25NKGUsdCxuLGkscixvKX1yZXR1cm4gbi5yYXRpbz1mdW5jdGlvbihlKXtyZXR1cm4gdCgoZT0rZSk+MT9lOjEpfSxufSkoZU0pLHJNPShmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCxuLGkscixvKXtpZigoYT10Ll9zcXVhcmlmeSkmJmEucmF0aW89PT1lKWZvcih2YXIgYSxzLGwsYyx1LGg9LTEsZD1hLmxlbmd0aCxwPXQudmFsdWU7KytoPGQ7KXtmb3IobD0ocz1hW2hdKS5jaGlsZHJlbixjPXMudmFsdWU9MCx1PWwubGVuZ3RoO2M8dTsrK2Mpcy52YWx1ZSs9bFtjXS52YWx1ZTtzLmRpY2U/alMocyxuLGkscixpKz0oby1pKSpzLnZhbHVlL3ApOnRNKHMsbixpLG4rPShyLW4pKnMudmFsdWUvcCxvKSxwLT1zLnZhbHVlfWVsc2UgdC5fc3F1YXJpZnk9YT1uTShlLHQsbixpLHIsbyksYS5yYXRpbz1lfXJldHVybiBuLnJhdGlvPWZ1bmN0aW9uKGUpe3JldHVybiB0KChlPStlKT4xP2U6MSl9LG59KShlTSk7ZnVuY3Rpb24gb00odCxlLG4pe3JldHVybihlWzBdLXRbMF0pKihuWzFdLXRbMV0pLShlWzFdLXRbMV0pKihuWzBdLXRbMF0pfWZ1bmN0aW9uIGFNKHQsZSl7cmV0dXJuIHRbMF0tZVswXXx8dFsxXS1lWzFdfWZ1bmN0aW9uIHNNKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxuPVswLDFdLGk9MixyPTI7cjxlOysrcil7Zm9yKDtpPjEmJm9NKHRbbltpLTJdXSx0W25baS0xXV0sdFtyXSk8PTA7KS0taTtuW2krK109cn1yZXR1cm4gbi5zbGljZSgwLGkpfWZ1bmN0aW9uIGxNKCl7cmV0dXJuIE1hdGgucmFuZG9tKCl9dmFyIGNNPShmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCxuKXtyZXR1cm4gdD1udWxsPT10PzA6K3Qsbj1udWxsPT1uPzE6K24sMT09PWFyZ3VtZW50cy5sZW5ndGg/KG49dCx0PTApOm4tPXQsZnVuY3Rpb24oKXtyZXR1cm4gZSgpKm4rdH19cmV0dXJuIG4uc291cmNlPXQsbn0pKGxNKSx1TT0oZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQsbil7dmFyIGkscjtyZXR1cm4gdD1udWxsPT10PzA6K3Qsbj1udWxsPT1uPzE6K24sZnVuY3Rpb24oKXt2YXIgbztpZihudWxsIT1pKW89aSxpPW51bGw7ZWxzZSBkb3tpPTIqZSgpLTEsbz0yKmUoKS0xLHI9aSppK28qb313aGlsZSghcnx8cj4xKTtyZXR1cm4gdCtuKm8qTWF0aC5zcXJ0KC0yKk1hdGgubG9nKHIpL3IpfX1yZXR1cm4gbi5zb3VyY2U9dCxufSkobE0pLGhNPShmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4oKXt2YXIgdD11TS5zb3VyY2UoZSkuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBNYXRoLmV4cCh0KCkpfX1yZXR1cm4gbi5zb3VyY2U9dCxufSkobE0pLGRNPShmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBuPTAsaT0wO2k8dDsrK2kpbis9ZSgpO3JldHVybiBufX1yZXR1cm4gbi5zb3VyY2U9dCxufSkobE0pLHBNPShmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7dmFyIG49ZE0uc291cmNlKGUpKHQpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBuKCkvdH19cmV0dXJuIG4uc291cmNlPXQsbn0pKGxNKSxmTT0oZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybi1NYXRoLmxvZygxLWUoKSkvdH19cmV0dXJuIG4uc291cmNlPXQsbn0pKGxNKTtmdW5jdGlvbiBtTSh0LGUpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOnRoaXMucmFuZ2UodCk7YnJlYWs7ZGVmYXVsdDp0aGlzLnJhbmdlKGUpLmRvbWFpbih0KX1yZXR1cm4gdGhpc31mdW5jdGlvbiBnTSh0LGUpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOnRoaXMuaW50ZXJwb2xhdG9yKHQpO2JyZWFrO2RlZmF1bHQ6dGhpcy5pbnRlcnBvbGF0b3IoZSkuZG9tYWluKHQpfXJldHVybiB0aGlzfXZhciBfTT1BcnJheS5wcm90b3R5cGUseU09X00ubWFwLHZNPV9NLnNsaWNlLGJNPXtuYW1lOiJpbXBsaWNpdCJ9O2Z1bmN0aW9uIHhNKCl7dmFyIHQ9eGcoKSxlPVtdLG49W10saT1iTTtmdW5jdGlvbiByKHIpe3ZhciBvPXIrIiIsYT10LmdldChvKTtpZighYSl7aWYoaSE9PWJNKXJldHVybiBpO3Quc2V0KG8sYT1lLnB1c2gocikpfXJldHVybiBuWyhhLTEpJW4ubGVuZ3RoXX1yZXR1cm4gci5kb21haW49ZnVuY3Rpb24obil7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGUuc2xpY2UoKTtlPVtdLHQ9eGcoKTtmb3IodmFyIGksbyxhPS0xLHM9bi5sZW5ndGg7KythPHM7KXQuaGFzKG89KGk9blthXSkrIiIpfHx0LnNldChvLGUucHVzaChpKSk7cmV0dXJuIHJ9LHIucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dk0uY2FsbCh0KSxyKTpuLnNsaWNlKCl9LHIudW5rbm93bj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LHIpOml9LHIuY29weT1mdW5jdGlvbigpe3JldHVybiB4TShlLG4pLnVua25vd24oaSl9LG1NLmFwcGx5KHIsYXJndW1lbnRzKSxyfWZ1bmN0aW9uIHdNKCl7dmFyIHQsZSxuPXhNKCkudW5rbm93bih2b2lkIDApLGk9bi5kb21haW4scj1uLnJhbmdlLG89WzAsMV0sYT0hMSxzPTAsbD0wLGM9LjU7ZnVuY3Rpb24gdSgpe3ZhciBuPWkoKS5sZW5ndGgsdT1vWzFdPG9bMF0saD1vW3UtMF0sZD1vWzEtdV07dD0oZC1oKS9NYXRoLm1heCgxLG4tcysyKmwpLGEmJih0PU1hdGguZmxvb3IodCkpLGgrPShkLWgtdCoobi1zKSkqYyxlPXQqKDEtcyksYSYmKGg9TWF0aC5yb3VuZChoKSxlPU1hdGgucm91bmQoZSkpO3ZhciBwPVJsKG4pLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGgrdCplfSkpO3JldHVybiByKHU/cC5yZXZlcnNlKCk6cCl9cmV0dXJuIGRlbGV0ZSBuLnVua25vd24sbi5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGkodCksdSgpKTppKCl9LG4ucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89Wyt0WzBdLCt0WzFdXSx1KCkpOm8uc2xpY2UoKX0sbi5yYW5nZVJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBvPVsrdFswXSwrdFsxXV0sYT0hMCx1KCl9LG4uYmFuZHdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIGV9LG4uc3RlcD1mdW5jdGlvbigpe3JldHVybiB0fSxuLnJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSEhdCx1KCkpOmF9LG4ucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1NYXRoLm1pbigxLGw9K3QpLHUoKSk6c30sbi5wYWRkaW5nSW5uZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9TWF0aC5taW4oMSx0KSx1KCkpOnN9LG4ucGFkZGluZ091dGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPSt0LHUoKSk6bH0sbi5hbGlnbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1NYXRoLm1heCgwLE1hdGgubWluKDEsdCkpLHUoKSk6Y30sbi5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHdNKGkoKSxvKS5yb3VuZChhKS5wYWRkaW5nSW5uZXIocykucGFkZGluZ091dGVyKGwpLmFsaWduKGMpfSxtTS5hcHBseSh1KCksYXJndW1lbnRzKX1mdW5jdGlvbiBTTSh0KXt2YXIgZT10LmNvcHk7cmV0dXJuIHQucGFkZGluZz10LnBhZGRpbmdPdXRlcixkZWxldGUgdC5wYWRkaW5nSW5uZXIsZGVsZXRlIHQucGFkZGluZ091dGVyLHQuY29weT1mdW5jdGlvbigpe3JldHVybiBTTShlKCkpfSx0fWZ1bmN0aW9uIE1NKCl7cmV0dXJuIFNNKHdNLmFwcGx5KG51bGwsYXJndW1lbnRzKS5wYWRkaW5nSW5uZXIoMSkpfWZ1bmN0aW9uIEVNKHQpe3JldHVybit0fXZhciBUTT1bMCwxXTtmdW5jdGlvbiBDTSh0KXtyZXR1cm4gdH1mdW5jdGlvbiBBTSh0LGUpe3JldHVybihlLT10PSt0KT9mdW5jdGlvbihuKXtyZXR1cm4obi10KS9lfTooZnVuY3Rpb24gbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19KShpc05hTihlKT9OYU46LjUpfWZ1bmN0aW9uIGtNKHQpe3ZhciBlLG49dFswXSxpPXRbdC5sZW5ndGgtMV07cmV0dXJuIG4+aSYmKGU9bixuPWksaT1lKSxmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgobixNYXRoLm1pbihpLHQpKX19ZnVuY3Rpb24gTE0odCxlLG4pe3ZhciBpPXRbMF0scj10WzFdLG89ZVswXSxhPWVbMV07cmV0dXJuIHI8aT8oaT1BTShyLGkpLG89bihhLG8pKTooaT1BTShpLHIpLG89bihvLGEpKSxmdW5jdGlvbih0KXtyZXR1cm4gbyhpKHQpKX19ZnVuY3Rpb24gUE0odCxlLG4pe3ZhciBpPU1hdGgubWluKHQubGVuZ3RoLGUubGVuZ3RoKS0xLHI9bmV3IEFycmF5KGkpLG89bmV3IEFycmF5KGkpLGE9LTE7Zm9yKHRbaV08dFswXSYmKHQ9dC5zbGljZSgpLnJldmVyc2UoKSxlPWUuc2xpY2UoKS5yZXZlcnNlKCkpOysrYTxpOylyW2FdPUFNKHRbYV0sdFthKzFdKSxvW2FdPW4oZVthXSxlW2ErMV0pO3JldHVybiBmdW5jdGlvbihlKXt2YXIgbj13bCh0LGUsMSxpKS0xO3JldHVybiBvW25dKHJbbl0oZSkpfX1mdW5jdGlvbiBOTSh0LGUpe3JldHVybiBlLmRvbWFpbih0LmRvbWFpbigpKS5yYW5nZSh0LnJhbmdlKCkpLmludGVycG9sYXRlKHQuaW50ZXJwb2xhdGUoKSkuY2xhbXAodC5jbGFtcCgpKS51bmtub3duKHQudW5rbm93bigpKX1mdW5jdGlvbiBJTSgpe3ZhciB0LGUsbixpLHIsbyxhPVRNLHM9VE0sbD1VZCxjPUNNO2Z1bmN0aW9uIHUoKXtyZXR1cm4gaT1NYXRoLm1pbihhLmxlbmd0aCxzLmxlbmd0aCk+Mj9QTTpMTSxyPW89bnVsbCxofWZ1bmN0aW9uIGgoZSl7cmV0dXJuIGlzTmFOKGU9K2UpP246KHJ8fChyPWkoYS5tYXAodCkscyxsKSkpKHQoYyhlKSkpfXJldHVybiBoLmludmVydD1mdW5jdGlvbihuKXtyZXR1cm4gYyhlKChvfHwobz1pKHMsYS5tYXAodCksRGQpKSkobikpKX0saC5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9eU0uY2FsbCh0LEVNKSxjPT09Q018fChjPWtNKGEpKSx1KCkpOmEuc2xpY2UoKX0saC5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz12TS5jYWxsKHQpLHUoKSk6cy5zbGljZSgpfSxoLnJhbmdlUm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHM9dk0uY2FsbCh0KSxsPWpkLHUoKX0saC5jbGFtcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz10P2tNKGEpOkNNLGgpOmMhPT1DTX0saC5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD10LHUoKSk6bH0saC51bmtub3duPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsaCk6bn0sZnVuY3Rpb24obixpKXtyZXR1cm4gdD1uLGU9aSx1KCl9fWZ1bmN0aW9uIE9NKHQsZSl7cmV0dXJuIElNKCkodCxlKX1mdW5jdGlvbiBSTSh0LGUsbixpKXt2YXIgcixvPVZsKHQsZSxuKTtzd2l0Y2goKGk9YXkobnVsbD09aT8iLGYiOmkpKS50eXBlKXtjYXNlInMiOnZhciBhPU1hdGgubWF4KE1hdGguYWJzKHQpLE1hdGguYWJzKGUpKTtyZXR1cm4gbnVsbCE9aS5wcmVjaXNpb258fGlzTmFOKHI9eHkobyxhKSl8fChpLnByZWNpc2lvbj1yKSxteShpLGEpO2Nhc2UiIjpjYXNlImUiOmNhc2UiZyI6Y2FzZSJwIjpjYXNlInIiOm51bGwhPWkucHJlY2lzaW9ufHxpc05hTihyPXd5KG8sTWF0aC5tYXgoTWF0aC5hYnModCksTWF0aC5hYnMoZSkpKSl8fChpLnByZWNpc2lvbj1yLSgiZSI9PT1pLnR5cGUpKTticmVhaztjYXNlImYiOmNhc2UiJSI6bnVsbCE9aS5wcmVjaXNpb258fGlzTmFOKHI9YnkobykpfHwoaS5wcmVjaXNpb249ci0yKigiJSI9PT1pLnR5cGUpKX1yZXR1cm4gZnkoaSl9ZnVuY3Rpb24gek0odCl7dmFyIGU9dC5kb21haW47cmV0dXJuIHQudGlja3M9ZnVuY3Rpb24odCl7dmFyIG49ZSgpO3JldHVybiBIbChuWzBdLG5bbi5sZW5ndGgtMV0sbnVsbD09dD8xMDp0KX0sdC50aWNrRm9ybWF0PWZ1bmN0aW9uKHQsbil7dmFyIGk9ZSgpO3JldHVybiBSTShpWzBdLGlbaS5sZW5ndGgtMV0sbnVsbD09dD8xMDp0LG4pfSx0Lm5pY2U9ZnVuY3Rpb24obil7bnVsbD09biYmKG49MTApO3ZhciBpLHI9ZSgpLG89MCxhPXIubGVuZ3RoLTEscz1yW29dLGw9clthXTtyZXR1cm4gbDxzJiYoaT1zLHM9bCxsPWksaT1vLG89YSxhPWkpLChpPUZsKHMsbCxuKSk+MD9pPUZsKHM9TWF0aC5mbG9vcihzL2kpKmksbD1NYXRoLmNlaWwobC9pKSppLG4pOmk8MCYmKGk9Rmwocz1NYXRoLmNlaWwocyppKS9pLGw9TWF0aC5mbG9vcihsKmkpL2ksbikpLGk+MD8ocltvXT1NYXRoLmZsb29yKHMvaSkqaSxyW2FdPU1hdGguY2VpbChsL2kpKmksZShyKSk6aTwwJiYocltvXT1NYXRoLmNlaWwocyppKS9pLHJbYV09TWF0aC5mbG9vcihsKmkpL2ksZShyKSksdH0sdH1mdW5jdGlvbiBETSgpe3ZhciB0PU9NKENNLENNKTtyZXR1cm4gdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIE5NKHQsRE0oKSl9LG1NLmFwcGx5KHQsYXJndW1lbnRzKSx6TSh0KX1mdW5jdGlvbiBCTSh0LGUpe3ZhciBuLGk9MCxyPSh0PXQuc2xpY2UoKSkubGVuZ3RoLTEsbz10W2ldLGE9dFtyXTtyZXR1cm4gYTxvJiYobj1pLGk9cixyPW4sbj1vLG89YSxhPW4pLHRbaV09ZS5mbG9vcihvKSx0W3JdPWUuY2VpbChhKSx0fWZ1bmN0aW9uIEhNKHQpe3JldHVybiBNYXRoLmxvZyh0KX1mdW5jdGlvbiBGTSh0KXtyZXR1cm4gTWF0aC5leHAodCl9ZnVuY3Rpb24gVk0odCl7cmV0dXJuLU1hdGgubG9nKC10KX1mdW5jdGlvbiBVTSh0KXtyZXR1cm4tTWF0aC5leHAoLXQpfWZ1bmN0aW9uIGpNKHQpe3JldHVybiBpc0Zpbml0ZSh0KT8rKCIxZSIrdCk6dDwwPzA6dH1mdW5jdGlvbiBHTSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuLXQoLWUpfX1mdW5jdGlvbiBXTSh0KXt2YXIgZSxuLGk9dChITSxGTSkscj1pLmRvbWFpbixvPTEwO2Z1bmN0aW9uIGEoKXtyZXR1cm4gZT0oZnVuY3Rpb24gYSh0KXtyZXR1cm4gdD09PU1hdGguRT9NYXRoLmxvZzoxMD09PXQmJk1hdGgubG9nMTB8fDI9PT10JiZNYXRoLmxvZzJ8fCh0PU1hdGgubG9nKHQpLGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLmxvZyhlKS90fSl9KShvKSxuPShmdW5jdGlvbiBzKHQpe3JldHVybiAxMD09PXQ/ak06dD09PU1hdGguRT9NYXRoLmV4cDpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5wb3codCxlKX19KShvKSxyKClbMF08MD8oZT1HTShlKSxuPUdNKG4pLHQoVk0sVU0pKTp0KEhNLEZNKSxpfXJldHVybiBpLmJhc2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89K3QsYSgpKTpvfSxpLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocih0KSxhKCkpOnIoKX0saS50aWNrcz1mdW5jdGlvbih0KXt2YXIgaSxhPXIoKSxzPWFbMF0sbD1hW2EubGVuZ3RoLTFdOyhpPWw8cykmJihkPXMscz1sLGw9ZCk7dmFyIGMsdSxoLGQ9ZShzKSxwPWUobCksZj1udWxsPT10PzEwOit0LG09W107aWYoIShvJTEpJiZwLWQ8Zil7aWYoZD1NYXRoLnJvdW5kKGQpLTEscD1NYXRoLnJvdW5kKHApKzEscz4wKXtmb3IoO2Q8cDsrK2QpZm9yKHU9MSxjPW4oZCk7dTxvOysrdSlpZighKChoPWMqdSk8cykpe2lmKGg+bClicmVhazttLnB1c2goaCl9fWVsc2UgZm9yKDtkPHA7KytkKWZvcih1PW8tMSxjPW4oZCk7dT49MTstLXUpaWYoISgoaD1jKnUpPHMpKXtpZihoPmwpYnJlYWs7bS5wdXNoKGgpfX1lbHNlIG09SGwoZCxwLE1hdGgubWluKHAtZCxmKSkubWFwKG4pO3JldHVybiBpP20ucmV2ZXJzZSgpOm19LGkudGlja0Zvcm1hdD1mdW5jdGlvbih0LHIpe2lmKG51bGw9PXImJihyPTEwPT09bz8iLjBlIjoiLCIpLCJmdW5jdGlvbiIhPXR5cGVvZiByJiYocj1meShyKSksdD09PTEvMClyZXR1cm4gcjtudWxsPT10JiYodD0xMCk7dmFyIGE9TWF0aC5tYXgoMSxvKnQvaS50aWNrcygpLmxlbmd0aCk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBpPXQvbihNYXRoLnJvdW5kKGUodCkpKTtyZXR1cm4gaSpvPG8tLjUmJihpKj1vKSxpPD1hP3IodCk6IiJ9fSxpLm5pY2U9ZnVuY3Rpb24oKXtyZXR1cm4gcihCTShyKCkse2Zsb29yOmZ1bmN0aW9uKHQpe3JldHVybiBuKE1hdGguZmxvb3IoZSh0KSkpfSxjZWlsOmZ1bmN0aW9uKHQpe3JldHVybiBuKE1hdGguY2VpbChlKHQpKSl9fSkpfSxpfWZ1bmN0aW9uIHFNKCl7dmFyIHQ9V00oSU0oKSkuZG9tYWluKFsxLDEwXSk7cmV0dXJuIHQuY29weT1mdW5jdGlvbigpe3JldHVybiBOTSh0LHFNKCkpLmJhc2UodC5iYXNlKCkpfSxtTS5hcHBseSh0LGFyZ3VtZW50cyksdH1mdW5jdGlvbiBZTSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguc2lnbihlKSpNYXRoLmxvZzFwKE1hdGguYWJzKGUvdCkpfX1mdW5jdGlvbiBYTSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguc2lnbihlKSpNYXRoLmV4cG0xKE1hdGguYWJzKGUpKSp0fX1mdW5jdGlvbiAkTSh0KXt2YXIgZT0xLG49dChZTShlKSxYTShlKSk7cmV0dXJuIG4uY29uc3RhbnQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dChZTShlPStuKSxYTShlKSk6ZX0sek0obil9ZnVuY3Rpb24gS00odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlPDA/LU1hdGgucG93KC1lLHQpOk1hdGgucG93KGUsdCl9fWZ1bmN0aW9uIFpNKHQpe3JldHVybiB0PDA/LU1hdGguc3FydCgtdCk6TWF0aC5zcXJ0KHQpfWZ1bmN0aW9uIEpNKHQpe3JldHVybiB0PDA/LXQqdDp0KnR9ZnVuY3Rpb24gUU0odCl7dmFyIGU9dChDTSxDTSksbj0xO2Z1bmN0aW9uIGkoKXtyZXR1cm4gMT09PW4/dChDTSxDTSk6LjU9PT1uP3QoWk0sSk0pOnQoS00obiksS00oMS9uKSl9cmV0dXJuIGUuZXhwb25lbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K3QsaSgpKTpufSx6TShlKX1mdW5jdGlvbiB0RSgpe3ZhciB0PVFNKElNKCkpO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gTk0odCx0RSgpKS5leHBvbmVudCh0LmV4cG9uZW50KCkpfSxtTS5hcHBseSh0LGFyZ3VtZW50cyksdH1mdW5jdGlvbiBlRSgpe3ZhciB0LGU9W10sbj1bXSxpPVtdO2Z1bmN0aW9uIHIoKXt2YXIgdD0wLHI9TWF0aC5tYXgoMSxuLmxlbmd0aCk7Zm9yKGk9bmV3IEFycmF5KHItMSk7Kyt0PHI7KWlbdC0xXT1qbChlLHQvcik7cmV0dXJuIG99ZnVuY3Rpb24gbyhlKXtyZXR1cm4gaXNOYU4oZT0rZSk/dDpuW3dsKGksZSldfXJldHVybiBvLmludmVydEV4dGVudD1mdW5jdGlvbih0KXt2YXIgcj1uLmluZGV4T2YodCk7cmV0dXJuIHI8MD9bTmFOLE5hTl06W3I+MD9pW3ItMV06ZVswXSxyPGkubGVuZ3RoP2lbcl06ZVtlLmxlbmd0aC0xXV19LG8uZG9tYWluPWZ1bmN0aW9uKHQpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBlLnNsaWNlKCk7ZT1bXTtmb3IodmFyIG4saT0wLG89dC5sZW5ndGg7aTxvOysraSludWxsPT0obj10W2ldKXx8aXNOYU4obj0rbil8fGUucHVzaChuKTtyZXR1cm4gZS5zb3J0KHZsKSxyKCl9LG8ucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dk0uY2FsbCh0KSxyKCkpOm4uc2xpY2UoKX0sby51bmtub3duPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUsbyk6dH0sby5xdWFudGlsZXM9ZnVuY3Rpb24oKXtyZXR1cm4gaS5zbGljZSgpfSxvLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gZUUoKS5kb21haW4oZSkucmFuZ2UobikudW5rbm93bih0KX0sbU0uYXBwbHkobyxhcmd1bWVudHMpfWZ1bmN0aW9uIG5FKCl7dmFyIHQsZT0wLG49MSxpPTEscj1bLjVdLG89WzAsMV07ZnVuY3Rpb24gYShlKXtyZXR1cm4gZTw9ZT9vW3dsKHIsZSwwLGkpXTp0fWZ1bmN0aW9uIHMoKXt2YXIgdD0tMTtmb3Iocj1uZXcgQXJyYXkoaSk7Kyt0PGk7KXJbdF09KCh0KzEpKm4tKHQtaSkqZSkvKGkrMSk7cmV0dXJuIGF9cmV0dXJuIGEuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0WzBdLG49K3RbMV0scygpKTpbZSxuXX0sYS5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0obz12TS5jYWxsKHQpKS5sZW5ndGgtMSxzKCkpOm8uc2xpY2UoKX0sYS5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24odCl7dmFyIGE9by5pbmRleE9mKHQpO3JldHVybiBhPDA/W05hTixOYU5dOmE8MT9bZSxyWzBdXTphPj1pP1tyW2ktMV0sbl06W3JbYS0xXSxyW2FdXX0sYS51bmtub3duPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUsYSk6YX0sYS50aHJlc2hvbGRzPWZ1bmN0aW9uKCl7cmV0dXJuIHIuc2xpY2UoKX0sYS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIG5FKCkuZG9tYWluKFtlLG5dKS5yYW5nZShvKS51bmtub3duKHQpfSxtTS5hcHBseSh6TShhKSxhcmd1bWVudHMpfXZhciBpRT1uZXcgRGF0ZSxyRT1uZXcgRGF0ZTtmdW5jdGlvbiBvRSh0LGUsbixpKXtmdW5jdGlvbiByKGUpe3JldHVybiB0KGU9MD09PWFyZ3VtZW50cy5sZW5ndGg/bmV3IERhdGU6bmV3IERhdGUoK2UpKSxlfXJldHVybiByLmZsb29yPWZ1bmN0aW9uKGUpe3JldHVybiB0KGU9bmV3IERhdGUoK2UpKSxlfSxyLmNlaWw9ZnVuY3Rpb24obil7cmV0dXJuIHQobj1uZXcgRGF0ZShuLTEpKSxlKG4sMSksdChuKSxufSxyLnJvdW5kPWZ1bmN0aW9uKHQpe3ZhciBlPXIodCksbj1yLmNlaWwodCk7cmV0dXJuIHQtZTxuLXQ/ZTpufSxyLm9mZnNldD1mdW5jdGlvbih0LG4pe3JldHVybiBlKHQ9bmV3IERhdGUoK3QpLG51bGw9PW4/MTpNYXRoLmZsb29yKG4pKSx0fSxyLnJhbmdlPWZ1bmN0aW9uKG4saSxvKXt2YXIgYSxzPVtdO2lmKG49ci5jZWlsKG4pLG89bnVsbD09bz8xOk1hdGguZmxvb3IobyksIShuPGkmJm8+MCkpcmV0dXJuIHM7ZG97cy5wdXNoKGE9bmV3IERhdGUoK24pKSxlKG4sbyksdChuKX13aGlsZShhPG4mJm48aSk7cmV0dXJuIHN9LHIuZmlsdGVyPWZ1bmN0aW9uKG4pe3JldHVybiBvRSgoZnVuY3Rpb24oZSl7aWYoZT49ZSlmb3IoO3QoZSksIW4oZSk7KWUuc2V0VGltZShlLTEpfSksKGZ1bmN0aW9uKHQsaSl7aWYodD49dClpZihpPDApZm9yKDsrK2k8PTA7KWZvcig7ZSh0LC0xKSwhbih0KTspO2Vsc2UgZm9yKDstLWk+PTA7KWZvcig7ZSh0LDEpLCFuKHQpOyk7fSkpfSxuJiYoci5jb3VudD1mdW5jdGlvbihlLGkpe3JldHVybiBpRS5zZXRUaW1lKCtlKSxyRS5zZXRUaW1lKCtpKSx0KGlFKSx0KHJFKSxNYXRoLmZsb29yKG4oaUUsckUpKX0sci5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLmZsb29yKHQpLGlzRmluaXRlKHQpJiZ0PjA/dD4xP3IuZmlsdGVyKGk/ZnVuY3Rpb24oZSl7cmV0dXJuIGkoZSkldD09MH06ZnVuY3Rpb24oZSl7cmV0dXJuIHIuY291bnQoMCxlKSV0PT0wfSk6cjpudWxsfSkscn12YXIgYUU9b0UoKGZ1bmN0aW9uKCl7fSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0K2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUtdH0pKTthRS5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLmZsb29yKHQpLGlzRmluaXRlKHQpJiZ0PjA/dD4xP29FKChmdW5jdGlvbihlKXtlLnNldFRpbWUoTWF0aC5mbG9vcihlL3QpKnQpfSksKGZ1bmN0aW9uKGUsbil7ZS5zZXRUaW1lKCtlK24qdCl9KSwoZnVuY3Rpb24oZSxuKXtyZXR1cm4obi1lKS90fSkpOmFFOm51bGx9O3ZhciBzRT1hRS5yYW5nZSxsRT0xZTMsY0U9NmU0LHVFPTM2ZTUsaEU9ODY0ZTUsZEU9NjA0OGU1LHBFPW9FKChmdW5jdGlvbih0KXt0LnNldFRpbWUodC10LmdldE1pbGxpc2Vjb25kcygpKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCtlKmxFKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQpL2xFfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ1NlY29uZHMoKX0pKSxmRT1wRS5yYW5nZSxtRT1vRSgoZnVuY3Rpb24odCl7dC5zZXRUaW1lKHQtdC5nZXRNaWxsaXNlY29uZHMoKS10LmdldFNlY29uZHMoKSpsRSl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrZSpjRSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS9jRX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNaW51dGVzKCl9KSksZ0U9bUUucmFuZ2UsX0U9b0UoKGZ1bmN0aW9uKHQpe3Quc2V0VGltZSh0LXQuZ2V0TWlsbGlzZWNvbmRzKCktdC5nZXRTZWNvbmRzKCkqbEUtdC5nZXRNaW51dGVzKCkqY0UpfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0K2UqdUUpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvdUV9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0SG91cnMoKX0pKSx5RT1fRS5yYW5nZSx2RT1vRSgoZnVuY3Rpb24odCl7dC5zZXRIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0RGF0ZSh0LmdldERhdGUoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQtKGUuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKmNFKS9oRX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXREYXRlKCktMX0pKSxiRT12RS5yYW5nZTtmdW5jdGlvbiB4RSh0KXtyZXR1cm4gb0UoKGZ1bmN0aW9uKGUpe2Uuc2V0RGF0ZShlLmdldERhdGUoKS0oZS5nZXREYXkoKSs3LXQpJTcpLGUuc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldERhdGUodC5nZXREYXRlKCkrNyplKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQtKGUuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKmNFKS9kRX0pKX12YXIgd0U9eEUoMCksU0U9eEUoMSksTUU9eEUoMiksRUU9eEUoMyksVEU9eEUoNCksQ0U9eEUoNSksQUU9eEUoNiksa0U9d0UucmFuZ2UsTEU9U0UucmFuZ2UsUEU9TUUucmFuZ2UsTkU9RUUucmFuZ2UsSUU9VEUucmFuZ2UsT0U9Q0UucmFuZ2UsUkU9QUUucmFuZ2UsekU9b0UoKGZ1bmN0aW9uKHQpe3Quc2V0RGF0ZSgxKSx0LnNldEhvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRNb250aCh0LmdldE1vbnRoKCkrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXRNb250aCgpLXQuZ2V0TW9udGgoKSsxMiooZS5nZXRGdWxsWWVhcigpLXQuZ2V0RnVsbFllYXIoKSl9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0TW9udGgoKX0pKSxERT16RS5yYW5nZSxCRT1vRSgoZnVuY3Rpb24odCl7dC5zZXRNb250aCgwLDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldEZ1bGxZZWFyKHQuZ2V0RnVsbFllYXIoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldEZ1bGxZZWFyKCktdC5nZXRGdWxsWWVhcigpfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEZ1bGxZZWFyKCl9KSk7QkUuZXZlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIGlzRmluaXRlKHQ9TWF0aC5mbG9vcih0KSkmJnQ+MD9vRSgoZnVuY3Rpb24oZSl7ZS5zZXRGdWxsWWVhcihNYXRoLmZsb29yKGUuZ2V0RnVsbFllYXIoKS90KSp0KSxlLnNldE1vbnRoKDAsMSksZS5zZXRIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbihlLG4pe2Uuc2V0RnVsbFllYXIoZS5nZXRGdWxsWWVhcigpK24qdCl9KSk6bnVsbH07dmFyIEhFPUJFLnJhbmdlLEZFPW9FKChmdW5jdGlvbih0KXt0LnNldFVUQ1NlY29uZHMoMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCtlKmNFKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQpL2NFfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ01pbnV0ZXMoKX0pKSxWRT1GRS5yYW5nZSxVRT1vRSgoZnVuY3Rpb24odCl7dC5zZXRVVENNaW51dGVzKDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCtlKnVFKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQpL3VFfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0hvdXJzKCl9KSksakU9VUUucmFuZ2UsR0U9b0UoKGZ1bmN0aW9uKHQpe3Quc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFVUQ0RhdGUodC5nZXRVVENEYXRlKCkrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS9oRX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENEYXRlKCktMX0pKSxXRT1HRS5yYW5nZTtmdW5jdGlvbiBxRSh0KXtyZXR1cm4gb0UoKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDRGF0ZShlLmdldFVUQ0RhdGUoKS0oZS5nZXRVVENEYXkoKSs3LXQpJTcpLGUuc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFVUQ0RhdGUodC5nZXRVVENEYXRlKCkrNyplKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQpL2RFfSkpfXZhciBZRT1xRSgwKSxYRT1xRSgxKSwkRT1xRSgyKSxLRT1xRSgzKSxaRT1xRSg0KSxKRT1xRSg1KSxRRT1xRSg2KSx0VD1ZRS5yYW5nZSxlVD1YRS5yYW5nZSxuVD0kRS5yYW5nZSxpVD1LRS5yYW5nZSxyVD1aRS5yYW5nZSxvVD1KRS5yYW5nZSxhVD1RRS5yYW5nZSxzVD1vRSgoZnVuY3Rpb24odCl7dC5zZXRVVENEYXRlKDEpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFVUQ01vbnRoKHQuZ2V0VVRDTW9udGgoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldFVUQ01vbnRoKCktdC5nZXRVVENNb250aCgpKzEyKihlLmdldFVUQ0Z1bGxZZWFyKCktdC5nZXRVVENGdWxsWWVhcigpKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENNb250aCgpfSkpLGxUPXNULnJhbmdlLGNUPW9FKChmdW5jdGlvbih0KXt0LnNldFVUQ01vbnRoKDAsMSksdC5zZXRVVENIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VVRDRnVsbFllYXIodC5nZXRVVENGdWxsWWVhcigpK2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZ2V0VVRDRnVsbFllYXIoKS10LmdldFVUQ0Z1bGxZZWFyKCl9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDRnVsbFllYXIoKX0pKTtjVC5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gaXNGaW5pdGUodD1NYXRoLmZsb29yKHQpKSYmdD4wP29FKChmdW5jdGlvbihlKXtlLnNldFVUQ0Z1bGxZZWFyKE1hdGguZmxvb3IoZS5nZXRVVENGdWxsWWVhcigpL3QpKnQpLGUuc2V0VVRDTW9udGgoMCwxKSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKGUsbil7ZS5zZXRVVENGdWxsWWVhcihlLmdldFVUQ0Z1bGxZZWFyKCkrbip0KX0pKTpudWxsfTt2YXIgdVQ9Y1QucmFuZ2U7ZnVuY3Rpb24gaFQodCl7aWYoMDw9dC55JiZ0Lnk8MTAwKXt2YXIgZT1uZXcgRGF0ZSgtMSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCk7cmV0dXJuIGUuc2V0RnVsbFllYXIodC55KSxlfXJldHVybiBuZXcgRGF0ZSh0LnksdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpfWZ1bmN0aW9uIGRUKHQpe2lmKDA8PXQueSYmdC55PDEwMCl7dmFyIGU9bmV3IERhdGUoRGF0ZS5VVEMoLTEsdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpKTtyZXR1cm4gZS5zZXRVVENGdWxsWWVhcih0LnkpLGV9cmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKHQueSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCkpfWZ1bmN0aW9uIHBUKHQsZSxuKXtyZXR1cm57eTp0LG06ZSxkOm4sSDowLE06MCxTOjAsTDowfX1mdW5jdGlvbiBmVCh0KXt2YXIgZT10LmRhdGVUaW1lLG49dC5kYXRlLGk9dC50aW1lLHI9dC5wZXJpb2RzLG89dC5kYXlzLGE9dC5zaG9ydERheXMscz10Lm1vbnRocyxsPXQuc2hvcnRNb250aHMsYz1UVChyKSx1PUNUKHIpLGg9VFQobyksZD1DVChvKSxwPVRUKGEpLGY9Q1QoYSksbT1UVChzKSxnPUNUKHMpLF89VFQobCkseT1DVChsKSx2PXthOmZ1bmN0aW9uIGIodCl7cmV0dXJuIGFbdC5nZXREYXkoKV19LEE6ZnVuY3Rpb24geCh0KXtyZXR1cm4gb1t0LmdldERheSgpXX0sYjpmdW5jdGlvbiB3KHQpe3JldHVybiBsW3QuZ2V0TW9udGgoKV19LEI6ZnVuY3Rpb24gUyh0KXtyZXR1cm4gc1t0LmdldE1vbnRoKCldfSxjOm51bGwsZDpYVCxlOlhULGY6UVQsZzp1QyxHOmRDLEg6JFQsSTpLVCxqOlpULEw6SlQsbTp0QyxNOmVDLHA6ZnVuY3Rpb24gTSh0KXtyZXR1cm4gclsrKHQuZ2V0SG91cnMoKT49MTIpXX0scTpmdW5jdGlvbiBFKHQpe3JldHVybiAxK35+KHQuZ2V0TW9udGgoKS8zKX0sUTpSQyxzOnpDLFM6bkMsdTppQyxVOnJDLFY6YUMsdzpzQyxXOmxDLHg6bnVsbCxYOm51bGwseTpjQyxZOmhDLFo6cEMsIiUiOk9DfSxUPXthOmZ1bmN0aW9uIEModCl7cmV0dXJuIGFbdC5nZXRVVENEYXkoKV19LEE6ZnVuY3Rpb24gQSh0KXtyZXR1cm4gb1t0LmdldFVUQ0RheSgpXX0sYjpmdW5jdGlvbiBrKHQpe3JldHVybiBsW3QuZ2V0VVRDTW9udGgoKV19LEI6ZnVuY3Rpb24gTCh0KXtyZXR1cm4gc1t0LmdldFVUQ01vbnRoKCldfSxjOm51bGwsZDpmQyxlOmZDLGY6dkMsZzpMQyxHOk5DLEg6bUMsSTpnQyxqOl9DLEw6eUMsbTpiQyxNOnhDLHA6ZnVuY3Rpb24gUCh0KXtyZXR1cm4gclsrKHQuZ2V0VVRDSG91cnMoKT49MTIpXX0scTpmdW5jdGlvbiBOKHQpe3JldHVybiAxK35+KHQuZ2V0VVRDTW9udGgoKS8zKX0sUTpSQyxzOnpDLFM6d0MsdTpTQyxVOk1DLFY6VEMsdzpDQyxXOkFDLHg6bnVsbCxYOm51bGwseTprQyxZOlBDLFo6SUMsIiUiOk9DfSxJPXthOmZ1bmN0aW9uIE8odCxlLG4pe3ZhciBpPXAuZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gaT8odC53PWZbaVswXS50b0xvd2VyQ2FzZSgpXSxuK2lbMF0ubGVuZ3RoKTotMX0sQTpmdW5jdGlvbiBSKHQsZSxuKXt2YXIgaT1oLmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIGk/KHQudz1kW2lbMF0udG9Mb3dlckNhc2UoKV0sbitpWzBdLmxlbmd0aCk6LTF9LGI6ZnVuY3Rpb24geih0LGUsbil7dmFyIGk9Xy5leGVjKGUuc2xpY2UobikpO3JldHVybiBpPyh0Lm09eVtpWzBdLnRvTG93ZXJDYXNlKCldLG4raVswXS5sZW5ndGgpOi0xfSxCOmZ1bmN0aW9uIEQodCxlLG4pe3ZhciBpPW0uZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gaT8odC5tPWdbaVswXS50b0xvd2VyQ2FzZSgpXSxuK2lbMF0ubGVuZ3RoKTotMX0sYzpmdW5jdGlvbiBCKHQsbixpKXtyZXR1cm4gRyh0LGUsbixpKX0sZDpCVCxlOkJULGY6R1QsZzpPVCxHOklULEg6RlQsSTpGVCxqOkhULEw6alQsbTpEVCxNOlZULHA6ZnVuY3Rpb24gSCh0LGUsbil7dmFyIGk9Yy5leGVjKGUuc2xpY2UobikpO3JldHVybiBpPyh0LnA9dVtpWzBdLnRvTG93ZXJDYXNlKCldLG4raVswXS5sZW5ndGgpOi0xfSxxOnpULFE6cVQsczpZVCxTOlVULHU6a1QsVTpMVCxWOlBULHc6QVQsVzpOVCx4OmZ1bmN0aW9uIEYodCxlLGkpe3JldHVybiBHKHQsbixlLGkpfSxYOmZ1bmN0aW9uIFYodCxlLG4pe3JldHVybiBHKHQsaSxlLG4pfSx5Ok9ULFk6SVQsWjpSVCwiJSI6V1R9O2Z1bmN0aW9uIFUodCxlKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGkscixvLGE9W10scz0tMSxsPTAsYz10Lmxlbmd0aDtmb3IobiBpbnN0YW5jZW9mIERhdGV8fChuPW5ldyBEYXRlKCtuKSk7KytzPGM7KTM3PT09dC5jaGFyQ29kZUF0KHMpJiYoYS5wdXNoKHQuc2xpY2UobCxzKSksbnVsbCE9KHI9YlRbaT10LmNoYXJBdCgrK3MpXSk/aT10LmNoYXJBdCgrK3MpOnI9ImUiPT09aT8iICI6IjAiLChvPWVbaV0pJiYoaT1vKG4scikpLGEucHVzaChpKSxsPXMrMSk7cmV0dXJuIGEucHVzaCh0LnNsaWNlKGwscykpLGEuam9pbigiIil9fWZ1bmN0aW9uIGoodCxlKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGkscixvPXBUKDE5MDAsdm9pZCAwLDEpO2lmKEcobyx0LG4rPSIiLDApIT1uLmxlbmd0aClyZXR1cm4gbnVsbDtpZigiUSJpbiBvKXJldHVybiBuZXcgRGF0ZShvLlEpO2lmKCJzImluIG8pcmV0dXJuIG5ldyBEYXRlKDFlMypvLnMrKCJMImluIG8/by5MOjApKTtpZihlJiYhKCJaImluIG8pJiYoby5aPTApLCJwImluIG8mJihvLkg9by5IJTEyKzEyKm8ucCksdm9pZCAwPT09by5tJiYoby5tPSJxImluIG8/by5xOjApLCJWImluIG8pe2lmKG8uVjwxfHxvLlY+NTMpcmV0dXJuIG51bGw7InciaW4gb3x8KG8udz0xKSwiWiJpbiBvPyhyPShpPWRUKHBUKG8ueSwwLDEpKSkuZ2V0VVRDRGF5KCksaT1yPjR8fDA9PT1yP1hFLmNlaWwoaSk6WEUoaSksaT1HRS5vZmZzZXQoaSw3KihvLlYtMSkpLG8ueT1pLmdldFVUQ0Z1bGxZZWFyKCksby5tPWkuZ2V0VVRDTW9udGgoKSxvLmQ9aS5nZXRVVENEYXRlKCkrKG8udys2KSU3KToocj0oaT1oVChwVChvLnksMCwxKSkpLmdldERheSgpLGk9cj40fHwwPT09cj9TRS5jZWlsKGkpOlNFKGkpLGk9dkUub2Zmc2V0KGksNyooby5WLTEpKSxvLnk9aS5nZXRGdWxsWWVhcigpLG8ubT1pLmdldE1vbnRoKCksby5kPWkuZ2V0RGF0ZSgpKyhvLncrNiklNyl9ZWxzZSgiVyJpbiBvfHwiVSJpbiBvKSYmKCJ3ImluIG98fChvLnc9InUiaW4gbz9vLnUlNzoiVyJpbiBvPzE6MCkscj0iWiJpbiBvP2RUKHBUKG8ueSwwLDEpKS5nZXRVVENEYXkoKTpoVChwVChvLnksMCwxKSkuZ2V0RGF5KCksby5tPTAsby5kPSJXImluIG8/KG8udys2KSU3Kzcqby5XLShyKzUpJTc6by53Kzcqby5VLShyKzYpJTcpO3JldHVybiJaImluIG8/KG8uSCs9by5aLzEwMHwwLG8uTSs9by5aJTEwMCxkVChvKSk6aFQobyl9fWZ1bmN0aW9uIEcodCxlLG4saSl7Zm9yKHZhciByLG8sYT0wLHM9ZS5sZW5ndGgsbD1uLmxlbmd0aDthPHM7KXtpZihpPj1sKXJldHVybi0xO2lmKDM3PT09KHI9ZS5jaGFyQ29kZUF0KGErKykpKXtpZihyPWUuY2hhckF0KGErKyksIShvPUlbciBpbiBiVD9lLmNoYXJBdChhKyspOnJdKXx8KGk9byh0LG4saSkpPDApcmV0dXJuLTF9ZWxzZSBpZihyIT1uLmNoYXJDb2RlQXQoaSsrKSlyZXR1cm4tMX1yZXR1cm4gaX1yZXR1cm4gdi54PVUobix2KSx2Llg9VShpLHYpLHYuYz1VKGUsdiksVC54PVUobixUKSxULlg9VShpLFQpLFQuYz1VKGUsVCkse2Zvcm1hdDpmdW5jdGlvbih0KXt2YXIgZT1VKHQrPSIiLHYpO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGV9LHBhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPWoodCs9IiIsITEpO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGV9LHV0Y0Zvcm1hdDpmdW5jdGlvbih0KXt2YXIgZT1VKHQrPSIiLFQpO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGV9LHV0Y1BhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPWoodCs9IiIsITApO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGV9fX12YXIgbVQsZ1QsX1QseVQsdlQsYlQ9eyItIjoiIixfOiIgIiwwOiIwIn0seFQ9L15ccypcZCsvLHdUPS9eJS8sU1Q9L1tcXF4kKis/fFtcXSgpLnt9XS9nO2Z1bmN0aW9uIE1UKHQsZSxuKXt2YXIgaT10PDA/Ii0iOiIiLHI9KGk/LXQ6dCkrIiIsbz1yLmxlbmd0aDtyZXR1cm4gaSsobzxuP25ldyBBcnJheShuLW8rMSkuam9pbihlKStyOnIpfWZ1bmN0aW9uIEVUKHQpe3JldHVybiB0LnJlcGxhY2UoU1QsIlxcJCYiKX1mdW5jdGlvbiBUVCh0KXtyZXR1cm4gbmV3IFJlZ0V4cCgiXig/OiIrdC5tYXAoRVQpLmpvaW4oInwiKSsiKSIsImkiKX1mdW5jdGlvbiBDVCh0KXtmb3IodmFyIGU9e30sbj0tMSxpPXQubGVuZ3RoOysrbjxpOyllW3Rbbl0udG9Mb3dlckNhc2UoKV09bjtyZXR1cm4gZX1mdW5jdGlvbiBBVCh0LGUsbil7dmFyIGk9eFQuZXhlYyhlLnNsaWNlKG4sbisxKSk7cmV0dXJuIGk/KHQudz0raVswXSxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBrVCh0LGUsbil7dmFyIGk9eFQuZXhlYyhlLnNsaWNlKG4sbisxKSk7cmV0dXJuIGk/KHQudT0raVswXSxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBMVCh0LGUsbil7dmFyIGk9eFQuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIGk/KHQuVT0raVswXSxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBQVCh0LGUsbil7dmFyIGk9eFQuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIGk/KHQuVj0raVswXSxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBOVCh0LGUsbil7dmFyIGk9eFQuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIGk/KHQuVz0raVswXSxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBJVCh0LGUsbil7dmFyIGk9eFQuZXhlYyhlLnNsaWNlKG4sbis0KSk7cmV0dXJuIGk/KHQueT0raVswXSxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBPVCh0LGUsbil7dmFyIGk9eFQuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIGk/KHQueT0raVswXSsoK2lbMF0+Njg/MTkwMDoyZTMpLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFJUKHQsZSxuKXt2YXIgaT0vXihaKXwoWystXVxkXGQpKD86Oj8oXGRcZCkpPy8uZXhlYyhlLnNsaWNlKG4sbis2KSk7cmV0dXJuIGk/KHQuWj1pWzFdPzA6LShpWzJdKyhpWzNdfHwiMDAiKSksbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gelQodCxlLG4pe3ZhciBpPXhULmV4ZWMoZS5zbGljZShuLG4rMSkpO3JldHVybiBpPyh0LnE9MyppWzBdLTMsbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gRFQodCxlLG4pe3ZhciBpPXhULmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiBpPyh0Lm09aVswXS0xLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEJUKHQsZSxuKXt2YXIgaT14VC5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gaT8odC5kPStpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEhUKHQsZSxuKXt2YXIgaT14VC5leGVjKGUuc2xpY2UobixuKzMpKTtyZXR1cm4gaT8odC5tPTAsdC5kPStpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEZUKHQsZSxuKXt2YXIgaT14VC5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gaT8odC5IPStpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFZUKHQsZSxuKXt2YXIgaT14VC5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gaT8odC5NPStpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFVUKHQsZSxuKXt2YXIgaT14VC5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gaT8odC5TPStpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGpUKHQsZSxuKXt2YXIgaT14VC5leGVjKGUuc2xpY2UobixuKzMpKTtyZXR1cm4gaT8odC5MPStpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEdUKHQsZSxuKXt2YXIgaT14VC5leGVjKGUuc2xpY2UobixuKzYpKTtyZXR1cm4gaT8odC5MPU1hdGguZmxvb3IoaVswXS8xZTMpLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFdUKHQsZSxuKXt2YXIgaT13VC5leGVjKGUuc2xpY2UobixuKzEpKTtyZXR1cm4gaT9uK2lbMF0ubGVuZ3RoOi0xfWZ1bmN0aW9uIHFUKHQsZSxuKXt2YXIgaT14VC5leGVjKGUuc2xpY2UobikpO3JldHVybiBpPyh0LlE9K2lbMF0sbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gWVQodCxlLG4pe3ZhciBpPXhULmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIGk/KHQucz0raVswXSxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBYVCh0LGUpe3JldHVybiBNVCh0LmdldERhdGUoKSxlLDIpfWZ1bmN0aW9uICRUKHQsZSl7cmV0dXJuIE1UKHQuZ2V0SG91cnMoKSxlLDIpfWZ1bmN0aW9uIEtUKHQsZSl7cmV0dXJuIE1UKHQuZ2V0SG91cnMoKSUxMnx8MTIsZSwyKX1mdW5jdGlvbiBaVCh0LGUpe3JldHVybiBNVCgxK3ZFLmNvdW50KEJFKHQpLHQpLGUsMyl9ZnVuY3Rpb24gSlQodCxlKXtyZXR1cm4gTVQodC5nZXRNaWxsaXNlY29uZHMoKSxlLDMpfWZ1bmN0aW9uIFFUKHQsZSl7cmV0dXJuIEpUKHQsZSkrIjAwMCJ9ZnVuY3Rpb24gdEModCxlKXtyZXR1cm4gTVQodC5nZXRNb250aCgpKzEsZSwyKX1mdW5jdGlvbiBlQyh0LGUpe3JldHVybiBNVCh0LmdldE1pbnV0ZXMoKSxlLDIpfWZ1bmN0aW9uIG5DKHQsZSl7cmV0dXJuIE1UKHQuZ2V0U2Vjb25kcygpLGUsMil9ZnVuY3Rpb24gaUModCl7dmFyIGU9dC5nZXREYXkoKTtyZXR1cm4gMD09PWU/NzplfWZ1bmN0aW9uIHJDKHQsZSl7cmV0dXJuIE1UKHdFLmNvdW50KEJFKHQpLTEsdCksZSwyKX1mdW5jdGlvbiBvQyh0KXt2YXIgZT10LmdldERheSgpO3JldHVybiBlPj00fHwwPT09ZT9URSh0KTpURS5jZWlsKHQpfWZ1bmN0aW9uIGFDKHQsZSl7cmV0dXJuIHQ9b0ModCksTVQoVEUuY291bnQoQkUodCksdCkrKDQ9PT1CRSh0KS5nZXREYXkoKSksZSwyKX1mdW5jdGlvbiBzQyh0KXtyZXR1cm4gdC5nZXREYXkoKX1mdW5jdGlvbiBsQyh0LGUpe3JldHVybiBNVChTRS5jb3VudChCRSh0KS0xLHQpLGUsMil9ZnVuY3Rpb24gY0ModCxlKXtyZXR1cm4gTVQodC5nZXRGdWxsWWVhcigpJTEwMCxlLDIpfWZ1bmN0aW9uIHVDKHQsZSl7cmV0dXJuIE1UKCh0PW9DKHQpKS5nZXRGdWxsWWVhcigpJTEwMCxlLDIpfWZ1bmN0aW9uIGhDKHQsZSl7cmV0dXJuIE1UKHQuZ2V0RnVsbFllYXIoKSUxZTQsZSw0KX1mdW5jdGlvbiBkQyh0LGUpe3ZhciBuPXQuZ2V0RGF5KCk7cmV0dXJuIE1UKCh0PW4+PTR8fDA9PT1uP1RFKHQpOlRFLmNlaWwodCkpLmdldEZ1bGxZZWFyKCklMWU0LGUsNCl9ZnVuY3Rpb24gcEModCl7dmFyIGU9dC5nZXRUaW1lem9uZU9mZnNldCgpO3JldHVybihlPjA/Ii0iOihlKj0tMSwiKyIpKStNVChlLzYwfDAsIjAiLDIpK01UKGUlNjAsIjAiLDIpfWZ1bmN0aW9uIGZDKHQsZSl7cmV0dXJuIE1UKHQuZ2V0VVRDRGF0ZSgpLGUsMil9ZnVuY3Rpb24gbUModCxlKXtyZXR1cm4gTVQodC5nZXRVVENIb3VycygpLGUsMil9ZnVuY3Rpb24gZ0ModCxlKXtyZXR1cm4gTVQodC5nZXRVVENIb3VycygpJTEyfHwxMixlLDIpfWZ1bmN0aW9uIF9DKHQsZSl7cmV0dXJuIE1UKDErR0UuY291bnQoY1QodCksdCksZSwzKX1mdW5jdGlvbiB5Qyh0LGUpe3JldHVybiBNVCh0LmdldFVUQ01pbGxpc2Vjb25kcygpLGUsMyl9ZnVuY3Rpb24gdkModCxlKXtyZXR1cm4geUModCxlKSsiMDAwIn1mdW5jdGlvbiBiQyh0LGUpe3JldHVybiBNVCh0LmdldFVUQ01vbnRoKCkrMSxlLDIpfWZ1bmN0aW9uIHhDKHQsZSl7cmV0dXJuIE1UKHQuZ2V0VVRDTWludXRlcygpLGUsMil9ZnVuY3Rpb24gd0ModCxlKXtyZXR1cm4gTVQodC5nZXRVVENTZWNvbmRzKCksZSwyKX1mdW5jdGlvbiBTQyh0KXt2YXIgZT10LmdldFVUQ0RheSgpO3JldHVybiAwPT09ZT83OmV9ZnVuY3Rpb24gTUModCxlKXtyZXR1cm4gTVQoWUUuY291bnQoY1QodCktMSx0KSxlLDIpfWZ1bmN0aW9uIEVDKHQpe3ZhciBlPXQuZ2V0VVRDRGF5KCk7cmV0dXJuIGU+PTR8fDA9PT1lP1pFKHQpOlpFLmNlaWwodCl9ZnVuY3Rpb24gVEModCxlKXtyZXR1cm4gdD1FQyh0KSxNVChaRS5jb3VudChjVCh0KSx0KSsoND09PWNUKHQpLmdldFVUQ0RheSgpKSxlLDIpfWZ1bmN0aW9uIENDKHQpe3JldHVybiB0LmdldFVUQ0RheSgpfWZ1bmN0aW9uIEFDKHQsZSl7cmV0dXJuIE1UKFhFLmNvdW50KGNUKHQpLTEsdCksZSwyKX1mdW5jdGlvbiBrQyh0LGUpe3JldHVybiBNVCh0LmdldFVUQ0Z1bGxZZWFyKCklMTAwLGUsMil9ZnVuY3Rpb24gTEModCxlKXtyZXR1cm4gTVQoKHQ9RUModCkpLmdldFVUQ0Z1bGxZZWFyKCklMTAwLGUsMil9ZnVuY3Rpb24gUEModCxlKXtyZXR1cm4gTVQodC5nZXRVVENGdWxsWWVhcigpJTFlNCxlLDQpfWZ1bmN0aW9uIE5DKHQsZSl7dmFyIG49dC5nZXRVVENEYXkoKTtyZXR1cm4gTVQoKHQ9bj49NHx8MD09PW4/WkUodCk6WkUuY2VpbCh0KSkuZ2V0VVRDRnVsbFllYXIoKSUxZTQsZSw0KX1mdW5jdGlvbiBJQygpe3JldHVybiIrMDAwMCJ9ZnVuY3Rpb24gT0MoKXtyZXR1cm4iJSJ9ZnVuY3Rpb24gUkModCl7cmV0dXJuK3R9ZnVuY3Rpb24gekModCl7cmV0dXJuIE1hdGguZmxvb3IoK3QvMWUzKX1mdW5jdGlvbiBEQyh0KXtyZXR1cm4gbVQ9ZlQodCksZ1Q9bVQuZm9ybWF0LF9UPW1ULnBhcnNlLHlUPW1ULnV0Y0Zvcm1hdCx2VD1tVC51dGNQYXJzZSxtVH1EQyh7ZGF0ZVRpbWU6IiV4LCAlWCIsZGF0ZToiJS1tLyUtZC8lWSIsdGltZToiJS1JOiVNOiVTICVwIixwZXJpb2RzOlsiQU0iLCJQTSJdLGRheXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLHNob3J0RGF5czpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLG1vbnRoczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sc2hvcnRNb250aHM6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXX0pO3ZhciBCQz0iJVktJW0tJWRUJUg6JU06JVMuJUxaIixIQz1EYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZz9mdW5jdGlvbiBGQyh0KXtyZXR1cm4gdC50b0lTT1N0cmluZygpfTp5VChCQyksVkM9K25ldyBEYXRlKCIyMDAwLTAxLTAxVDAwOjAwOjAwLjAwMFoiKT9mdW5jdGlvbiBVQyh0KXt2YXIgZT1uZXcgRGF0ZSh0KTtyZXR1cm4gaXNOYU4oZSk/bnVsbDplfTp2VChCQyksakM9MzE1MzZlNjtmdW5jdGlvbiBHQyh0KXtyZXR1cm4gbmV3IERhdGUodCl9ZnVuY3Rpb24gV0ModCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBEYXRlPyt0OituZXcgRGF0ZSgrdCl9ZnVuY3Rpb24gcUModCxlLG4saSxyLG8sYSxzLGwpe3ZhciBjPU9NKENNLENNKSx1PWMuaW52ZXJ0LGg9Yy5kb21haW4sZD1sKCIuJUwiKSxwPWwoIjolUyIpLGY9bCgiJUk6JU0iKSxtPWwoIiVJICVwIiksZz1sKCIlYSAlZCIpLF89bCgiJWIgJWQiKSx5PWwoIiVCIiksdj1sKCIlWSIpLGI9W1thLDEsMWUzXSxbYSw1LDVlM10sW2EsMTUsMTVlM10sW2EsMzAsM2U0XSxbbywxLDZlNF0sW28sNSwzZTVdLFtvLDE1LDllNV0sW28sMzAsMThlNV0sW3IsMSwzNmU1XSxbciwzLDEwOGU1XSxbciw2LDIxNmU1XSxbciwxMiw0MzJlNV0sW2ksMSw4NjRlNV0sW2ksMiwxNzI4ZTVdLFtuLDEsNjA0OGU1XSxbZSwxLDI1OTJlNl0sW2UsMyw3Nzc2ZTZdLFt0LDEsakNdXTtmdW5jdGlvbiB4KHMpe3JldHVybihhKHMpPHM/ZDpvKHMpPHM/cDpyKHMpPHM/ZjppKHMpPHM/bTplKHMpPHM/bihzKTxzP2c6Xzp0KHMpPHM/eTp2KShzKX1mdW5jdGlvbiB3KGUsbixpLHIpe2lmKG51bGw9PWUmJihlPTEwKSwibnVtYmVyIj09dHlwZW9mIGUpe3ZhciBvPU1hdGguYWJzKGktbikvZSxhPWJsKChmdW5jdGlvbih0KXtyZXR1cm4gdFsyXX0pKS5yaWdodChiLG8pO2E9PT1iLmxlbmd0aD8ocj1WbChuL2pDLGkvakMsZSksZT10KTphPyhyPShhPWJbby9iW2EtMV1bMl08YlthXVsyXS9vP2EtMTphXSlbMV0sZT1hWzBdKToocj1NYXRoLm1heChWbChuLGksZSksMSksZT1zKX1yZXR1cm4gbnVsbD09cj9lOmUuZXZlcnkocil9cmV0dXJuIGMuaW52ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgRGF0ZSh1KHQpKX0sYy5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/aCh5TS5jYWxsKHQsV0MpKTpoKCkubWFwKEdDKX0sYy50aWNrcz1mdW5jdGlvbih0LGUpe3ZhciBuLGk9aCgpLHI9aVswXSxvPWlbaS5sZW5ndGgtMV0sYT1vPHI7cmV0dXJuIGEmJihuPXIscj1vLG89biksbj0obj13KHQscixvLGUpKT9uLnJhbmdlKHIsbysxKTpbXSxhP24ucmV2ZXJzZSgpOm59LGMudGlja0Zvcm1hdD1mdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT1lP3g6bChlKX0sYy5uaWNlPWZ1bmN0aW9uKHQsZSl7dmFyIG49aCgpO3JldHVybih0PXcodCxuWzBdLG5bbi5sZW5ndGgtMV0sZSkpP2goQk0obix0KSk6Y30sYy5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIE5NKGMscUModCxlLG4saSxyLG8sYSxzLGwpKX0sY31mdW5jdGlvbiBZQygpe3JldHVybiBtTS5hcHBseShxQyhCRSx6RSx3RSx2RSxfRSxtRSxwRSxhRSxnVCkuZG9tYWluKFtuZXcgRGF0ZSgyZTMsMCwxKSxuZXcgRGF0ZSgyZTMsMCwyKV0pLGFyZ3VtZW50cyl9ZnVuY3Rpb24gWEMoKXt2YXIgdCxlLG4saSxyLG89MCxhPTEscz1DTSxsPSExO2Z1bmN0aW9uIGMoZSl7cmV0dXJuIGlzTmFOKGU9K2UpP3I6cygwPT09bj8uNTooZT0oaShlKS10KSpuLGw/TWF0aC5tYXgoMCxNYXRoLm1pbigxLGUpKTplKSl9cmV0dXJuIGMuZG9tYWluPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWkobz0rclswXSksZT1pKGE9K3JbMV0pLG49dD09PWU/MDoxLyhlLXQpLGMpOltvLGFdfSxjLmNsYW1wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPSEhdCxjKTpsfSxjLmludGVycG9sYXRvcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz10LGMpOnN9LGMudW5rbm93bj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LGMpOnJ9LGZ1bmN0aW9uKHIpe3JldHVybiBpPXIsdD1yKG8pLGU9cihhKSxuPXQ9PT1lPzA6MS8oZS10KSxjfX1mdW5jdGlvbiAkQyh0LGUpe3JldHVybiBlLmRvbWFpbih0LmRvbWFpbigpKS5pbnRlcnBvbGF0b3IodC5pbnRlcnBvbGF0b3IoKSkuY2xhbXAodC5jbGFtcCgpKS51bmtub3duKHQudW5rbm93bigpKX1mdW5jdGlvbiBLQygpe3ZhciB0PVFNKFhDKCkpO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gJEModCxLQygpKS5leHBvbmVudCh0LmV4cG9uZW50KCkpfSxnTS5hcHBseSh0LGFyZ3VtZW50cyl9ZnVuY3Rpb24gWkMoKXt2YXIgdCxlLG4saSxyLG8sYSxzPTAsbD0uNSxjPTEsdT1DTSxoPSExO2Z1bmN0aW9uIGQodCl7cmV0dXJuIGlzTmFOKHQ9K3QpP2E6KHQ9LjUrKCh0PStvKHQpKS1lKSoodDxlP2k6ciksdShoP01hdGgubWF4KDAsTWF0aC5taW4oMSx0KSk6dCkpfXJldHVybiBkLmRvbWFpbj1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1vKHM9K2FbMF0pLGU9byhsPSthWzFdKSxuPW8oYz0rYVsyXSksaT10PT09ZT8wOi41LyhlLXQpLHI9ZT09PW4/MDouNS8obi1lKSxkKTpbcyxsLGNdfSxkLmNsYW1wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPSEhdCxkKTpofSxkLmludGVycG9sYXRvcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT10LGQpOnV9LGQudW5rbm93bj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10LGQpOmF9LGZ1bmN0aW9uKGEpe3JldHVybiBvPWEsdD1hKHMpLGU9YShsKSxuPWEoYyksaT10PT09ZT8wOi41LyhlLXQpLHI9ZT09PW4/MDouNS8obi1lKSxkfX1mdW5jdGlvbiBKQygpe3ZhciB0PVFNKFpDKCkpO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gJEModCxKQygpKS5leHBvbmVudCh0LmV4cG9uZW50KCkpfSxnTS5hcHBseSh0LGFyZ3VtZW50cyl9ZnVuY3Rpb24gUUModCl7Zm9yKHZhciBlPXQubGVuZ3RoLzZ8MCxuPW5ldyBBcnJheShlKSxpPTA7aTxlOyluW2ldPSIjIit0LnNsaWNlKDYqaSw2KisraSk7cmV0dXJuIG59dmFyIHRBPVFDKCIxZjc3YjRmZjdmMGUyY2EwMmNkNjI3Mjg5NDY3YmQ4YzU2NGJlMzc3YzI3ZjdmN2ZiY2JkMjIxN2JlY2YiKSxlQT1RQygiN2ZjOTdmYmVhZWQ0ZmRjMDg2ZmZmZjk5Mzg2Y2IwZjAwMjdmYmY1YjE3NjY2NjY2IiksbkE9UUMoIjFiOWU3N2Q5NWYwMjc1NzBiM2U3Mjk4YTY2YTYxZWU2YWIwMmE2NzYxZDY2NjY2NiIpLGlBPVFDKCJhNmNlZTMxZjc4YjRiMmRmOGEzM2EwMmNmYjlhOTllMzFhMWNmZGJmNmZmZjdmMDBjYWIyZDY2YTNkOWFmZmZmOTliMTU5MjgiKSxyQT1RQygiZmJiNGFlYjNjZGUzY2NlYmM1ZGVjYmU0ZmVkOWE2ZmZmZmNjZTVkOGJkZmRkYWVjZjJmMmYyIiksb0E9UUMoImIzZTJjZGZkY2RhY2NiZDVlOGY0Y2FlNGU2ZjVjOWZmZjJhZWYxZTJjY2NjY2NjYyIpLGFBPVFDKCJlNDFhMWMzNzdlYjg0ZGFmNGE5ODRlYTNmZjdmMDBmZmZmMzNhNjU2MjhmNzgxYmY5OTk5OTkiKSxzQT1RQygiNjZjMmE1ZmM4ZDYyOGRhMGNiZTc4YWMzYTZkODU0ZmZkOTJmZTVjNDk0YjNiM2IzIiksbEE9UUMoIjhkZDNjN2ZmZmZiM2JlYmFkYWZiODA3MjgwYjFkM2ZkYjQ2MmIzZGU2OWZjY2RlNWQ5ZDlkOWJjODBiZGNjZWJjNWZmZWQ2ZiIpLGNBPVFDKCI0ZTc5YTdmMjhlMmNlMTU3NTk3NmI3YjI1OWExNGZlZGM5NDlhZjdhYTFmZjlkYTc5Yzc1NWZiYWIwYWIiKTtmdW5jdGlvbiB1QSh0KXtyZXR1cm4gUGQodFt0Lmxlbmd0aC0xXSl9dmFyIGhBPW5ldyBBcnJheSgzKS5jb25jYXQoImQ4YjM2NWY1ZjVmNTVhYjRhYyIsImE2NjExYWRmYzI3ZDgwY2RjMTAxODU3MSIsImE2NjExYWRmYzI3ZGY1ZjVmNTgwY2RjMTAxODU3MSIsIjhjNTEwYWQ4YjM2NWY2ZThjM2M3ZWFlNTVhYjRhYzAxNjY1ZSIsIjhjNTEwYWQ4YjM2NWY2ZThjM2Y1ZjVmNWM3ZWFlNTVhYjRhYzAxNjY1ZSIsIjhjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2M3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZSIsIjhjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2Y1ZjVmNWM3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZSIsIjU0MzAwNThjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2M3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZTAwM2MzMCIsIjU0MzAwNThjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2Y1ZjVmNWM3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZTAwM2MzMCIpLm1hcChRQyksZEE9dUEoaEEpLHBBPW5ldyBBcnJheSgzKS5jb25jYXQoImFmOGRjM2Y3ZjdmNzdmYmY3YiIsIjdiMzI5NGMyYTVjZmE2ZGJhMDAwODgzNyIsIjdiMzI5NGMyYTVjZmY3ZjdmN2E2ZGJhMDAwODgzNyIsIjc2MmE4M2FmOGRjM2U3ZDRlOGQ5ZjBkMzdmYmY3YjFiNzgzNyIsIjc2MmE4M2FmOGRjM2U3ZDRlOGY3ZjdmN2Q5ZjBkMzdmYmY3YjFiNzgzNyIsIjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGQ5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNyIsIjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGY3ZjdmN2Q5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNyIsIjQwMDA0Yjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGQ5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNzAwNDQxYiIsIjQwMDA0Yjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGY3ZjdmN2Q5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNzAwNDQxYiIpLm1hcChRQyksZkE9dUEocEEpLG1BPW5ldyBBcnJheSgzKS5jb25jYXQoImU5YTNjOWY3ZjdmN2ExZDc2YSIsImQwMWM4YmYxYjZkYWI4ZTE4NjRkYWMyNiIsImQwMWM4YmYxYjZkYWY3ZjdmN2I4ZTE4NjRkYWMyNiIsImM1MWI3ZGU5YTNjOWZkZTBlZmU2ZjVkMGExZDc2YTRkOTIyMSIsImM1MWI3ZGU5YTNjOWZkZTBlZmY3ZjdmN2U2ZjVkMGExZDc2YTRkOTIyMSIsImM1MWI3ZGRlNzdhZWYxYjZkYWZkZTBlZmU2ZjVkMGI4ZTE4NjdmYmM0MTRkOTIyMSIsImM1MWI3ZGRlNzdhZWYxYjZkYWZkZTBlZmY3ZjdmN2U2ZjVkMGI4ZTE4NjdmYmM0MTRkOTIyMSIsIjhlMDE1MmM1MWI3ZGRlNzdhZWYxYjZkYWZkZTBlZmU2ZjVkMGI4ZTE4NjdmYmM0MTRkOTIyMTI3NjQxOSIsIjhlMDE1MmM1MWI3ZGRlNzdhZWYxYjZkYWZkZTBlZmY3ZjdmN2U2ZjVkMGI4ZTE4NjdmYmM0MTRkOTIyMTI3NjQxOSIpLm1hcChRQyksZ0E9dUEobUEpLF9BPW5ldyBBcnJheSgzKS5jb25jYXQoIjk5OGVjM2Y3ZjdmN2YxYTM0MCIsIjVlM2M5OWIyYWJkMmZkYjg2M2U2NjEwMSIsIjVlM2M5OWIyYWJkMmY3ZjdmN2ZkYjg2M2U2NjEwMSIsIjU0Mjc4ODk5OGVjM2Q4ZGFlYmZlZTBiNmYxYTM0MGIzNTgwNiIsIjU0Mjc4ODk5OGVjM2Q4ZGFlYmY3ZjdmN2ZlZTBiNmYxYTM0MGIzNTgwNiIsIjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNiIsIjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmY3ZjdmN2ZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNiIsIjJkMDA0YjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNjdmM2IwOCIsIjJkMDA0YjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmY3ZjdmN2ZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNjdmM2IwOCIpLm1hcChRQykseUE9dUEoX0EpLHZBPW5ldyBBcnJheSgzKS5jb25jYXQoImVmOGE2MmY3ZjdmNzY3YTljZiIsImNhMDAyMGY0YTU4MjkyYzVkZTA1NzFiMCIsImNhMDAyMGY0YTU4MmY3ZjdmNzkyYzVkZTA1NzFiMCIsImIyMTgyYmVmOGE2MmZkZGJjN2QxZTVmMDY3YTljZjIxNjZhYyIsImIyMTgyYmVmOGE2MmZkZGJjN2Y3ZjdmN2QxZTVmMDY3YTljZjIxNjZhYyIsImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYyIsImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2Y3ZjdmN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYyIsIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYzA1MzA2MSIsIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2Y3ZjdmN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYzA1MzA2MSIpLm1hcChRQyksYkE9dUEodkEpLHhBPW5ldyBBcnJheSgzKS5jb25jYXQoImVmOGE2MmZmZmZmZjk5OTk5OSIsImNhMDAyMGY0YTU4MmJhYmFiYTQwNDA0MCIsImNhMDAyMGY0YTU4MmZmZmZmZmJhYmFiYTQwNDA0MCIsImIyMTgyYmVmOGE2MmZkZGJjN2UwZTBlMDk5OTk5OTRkNGQ0ZCIsImIyMTgyYmVmOGE2MmZkZGJjN2ZmZmZmZmUwZTBlMDk5OTk5OTRkNGQ0ZCIsImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2UwZTBlMGJhYmFiYTg3ODc4NzRkNGQ0ZCIsImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2ZmZmZmZmUwZTBlMGJhYmFiYTg3ODc4NzRkNGQ0ZCIsIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2UwZTBlMGJhYmFiYTg3ODc4NzRkNGQ0ZDFhMWExYSIsIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2ZmZmZmZmUwZTBlMGJhYmFiYTg3ODc4NzRkNGQ0ZDFhMWExYSIpLm1hcChRQyksd0E9dUEoeEEpLFNBPW5ldyBBcnJheSgzKS5jb25jYXQoImZjOGQ1OWZmZmZiZjkxYmZkYiIsImQ3MTkxY2ZkYWU2MWFiZDllOTJjN2JiNiIsImQ3MTkxY2ZkYWU2MWZmZmZiZmFiZDllOTJjN2JiNiIsImQ3MzAyN2ZjOGQ1OWZlZTA5MGUwZjNmODkxYmZkYjQ1NzViNCIsImQ3MzAyN2ZjOGQ1OWZlZTA5MGZmZmZiZmUwZjNmODkxYmZkYjQ1NzViNCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGZmZmZiZmUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNCIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNDMxMzY5NSIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGZmZmZiZmUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNDMxMzY5NSIpLm1hcChRQyksTUE9dUEoU0EpLEVBPW5ldyBBcnJheSgzKS5jb25jYXQoImZjOGQ1OWZmZmZiZjkxY2Y2MCIsImQ3MTkxY2ZkYWU2MWE2ZDk2YTFhOTY0MSIsImQ3MTkxY2ZkYWU2MWZmZmZiZmE2ZDk2YTFhOTY0MSIsImQ3MzAyN2ZjOGQ1OWZlZTA4YmQ5ZWY4YjkxY2Y2MDFhOTg1MCIsImQ3MzAyN2ZjOGQ1OWZlZTA4YmZmZmZiZmQ5ZWY4YjkxY2Y2MDFhOTg1MCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MCIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MDAwNjgzNyIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MDAwNjgzNyIpLm1hcChRQyksVEE9dUEoRUEpLENBPW5ldyBBcnJheSgzKS5jb25jYXQoImZjOGQ1OWZmZmZiZjk5ZDU5NCIsImQ3MTkxY2ZkYWU2MWFiZGRhNDJiODNiYSIsImQ3MTkxY2ZkYWU2MWZmZmZiZmFiZGRhNDJiODNiYSIsImQ1M2U0ZmZjOGQ1OWZlZTA4YmU2ZjU5ODk5ZDU5NDMyODhiZCIsImQ1M2U0ZmZjOGQ1OWZlZTA4YmZmZmZiZmU2ZjU5ODk5ZDU5NDMyODhiZCIsImQ1M2U0ZmY0NmQ0M2ZkYWU2MWZlZTA4YmU2ZjU5OGFiZGRhNDY2YzJhNTMyODhiZCIsImQ1M2U0ZmY0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmU2ZjU5OGFiZGRhNDY2YzJhNTMyODhiZCIsIjllMDE0MmQ1M2U0ZmY0NmQ0M2ZkYWU2MWZlZTA4YmU2ZjU5OGFiZGRhNDY2YzJhNTMyODhiZDVlNGZhMiIsIjllMDE0MmQ1M2U0ZmY0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmU2ZjU5OGFiZGRhNDY2YzJhNTMyODhiZDVlNGZhMiIpLm1hcChRQyksQUE9dUEoQ0EpLGtBPW5ldyBBcnJheSgzKS5jb25jYXQoImU1ZjVmOTk5ZDhjOTJjYTI1ZiIsImVkZjhmYmIyZTJlMjY2YzJhNDIzOGI0NSIsImVkZjhmYmIyZTJlMjY2YzJhNDJjYTI1ZjAwNmQyYyIsImVkZjhmYmNjZWNlNjk5ZDhjOTY2YzJhNDJjYTI1ZjAwNmQyYyIsImVkZjhmYmNjZWNlNjk5ZDhjOTY2YzJhNDQxYWU3NjIzOGI0NTAwNTgyNCIsImY3ZmNmZGU1ZjVmOWNjZWNlNjk5ZDhjOTY2YzJhNDQxYWU3NjIzOGI0NTAwNTgyNCIsImY3ZmNmZGU1ZjVmOWNjZWNlNjk5ZDhjOTY2YzJhNDQxYWU3NjIzOGI0NTAwNmQyYzAwNDQxYiIpLm1hcChRQyksTEE9dUEoa0EpLFBBPW5ldyBBcnJheSgzKS5jb25jYXQoImUwZWNmNDllYmNkYTg4NTZhNyIsImVkZjhmYmIzY2RlMzhjOTZjNjg4NDE5ZCIsImVkZjhmYmIzY2RlMzhjOTZjNjg4NTZhNzgxMGY3YyIsImVkZjhmYmJmZDNlNjllYmNkYThjOTZjNjg4NTZhNzgxMGY3YyIsImVkZjhmYmJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDZlMDE2YiIsImY3ZmNmZGUwZWNmNGJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDZlMDE2YiIsImY3ZmNmZGUwZWNmNGJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDgxMGY3YzRkMDA0YiIpLm1hcChRQyksTkE9dUEoUEEpLElBPW5ldyBBcnJheSgzKS5jb25jYXQoImUwZjNkYmE4ZGRiNTQzYTJjYSIsImYwZjllOGJhZTRiYzdiY2NjNDJiOGNiZSIsImYwZjllOGJhZTRiYzdiY2NjNDQzYTJjYTA4NjhhYyIsImYwZjllOGNjZWJjNWE4ZGRiNTdiY2NjNDQzYTJjYTA4NjhhYyIsImYwZjllOGNjZWJjNWE4ZGRiNTdiY2NjNDRlYjNkMzJiOGNiZTA4NTg5ZSIsImY3ZmNmMGUwZjNkYmNjZWJjNWE4ZGRiNTdiY2NjNDRlYjNkMzJiOGNiZTA4NTg5ZSIsImY3ZmNmMGUwZjNkYmNjZWJjNWE4ZGRiNTdiY2NjNDRlYjNkMzJiOGNiZTA4NjhhYzA4NDA4MSIpLm1hcChRQyksT0E9dUEoSUEpLFJBPW5ldyBBcnJheSgzKS5jb25jYXQoImZlZThjOGZkYmI4NGUzNGEzMyIsImZlZjBkOWZkY2M4YWZjOGQ1OWQ3MzAxZiIsImZlZjBkOWZkY2M4YWZjOGQ1OWUzNGEzM2IzMDAwMCIsImZlZjBkOWZkZDQ5ZWZkYmI4NGZjOGQ1OWUzNGEzM2IzMDAwMCIsImZlZjBkOWZkZDQ5ZWZkYmI4NGZjOGQ1OWVmNjU0OGQ3MzAxZjk5MDAwMCIsImZmZjdlY2ZlZThjOGZkZDQ5ZWZkYmI4NGZjOGQ1OWVmNjU0OGQ3MzAxZjk5MDAwMCIsImZmZjdlY2ZlZThjOGZkZDQ5ZWZkYmI4NGZjOGQ1OWVmNjU0OGQ3MzAxZmIzMDAwMDdmMDAwMCIpLm1hcChRQyksekE9dUEoUkEpLERBPW5ldyBBcnJheSgzKS5jb25jYXQoImVjZTJmMGE2YmRkYjFjOTA5OSIsImY2ZWZmN2JkYzllMTY3YTljZjAyODE4YSIsImY2ZWZmN2JkYzllMTY3YTljZjFjOTA5OTAxNmM1OSIsImY2ZWZmN2QwZDFlNmE2YmRkYjY3YTljZjFjOTA5OTAxNmM1OSIsImY2ZWZmN2QwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNjQ1MCIsImZmZjdmYmVjZTJmMGQwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNjQ1MCIsImZmZjdmYmVjZTJmMGQwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNmM1OTAxNDYzNiIpLm1hcChRQyksQkE9dUEoREEpLEhBPW5ldyBBcnJheSgzKS5jb25jYXQoImVjZTdmMmE2YmRkYjJiOGNiZSIsImYxZWVmNmJkYzllMTc0YTljZjA1NzBiMCIsImYxZWVmNmJkYzllMTc0YTljZjJiOGNiZTA0NWE4ZCIsImYxZWVmNmQwZDFlNmE2YmRkYjc0YTljZjJiOGNiZTA0NWE4ZCIsImYxZWVmNmQwZDFlNmE2YmRkYjc0YTljZjM2OTBjMDA1NzBiMDAzNGU3YiIsImZmZjdmYmVjZTdmMmQwZDFlNmE2YmRkYjc0YTljZjM2OTBjMDA1NzBiMDAzNGU3YiIsImZmZjdmYmVjZTdmMmQwZDFlNmE2YmRkYjc0YTljZjM2OTBjMDA1NzBiMDA0NWE4ZDAyMzg1OCIpLm1hcChRQyksRkE9dUEoSEEpLFZBPW5ldyBBcnJheSgzKS5jb25jYXQoImU3ZTFlZmM5OTRjN2RkMWM3NyIsImYxZWVmNmQ3YjVkOGRmNjViMGNlMTI1NiIsImYxZWVmNmQ3YjVkOGRmNjViMGRkMWM3Nzk4MDA0MyIsImYxZWVmNmQ0YjlkYWM5OTRjN2RmNjViMGRkMWM3Nzk4MDA0MyIsImYxZWVmNmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1NjkxMDAzZiIsImY3ZjRmOWU3ZTFlZmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1NjkxMDAzZiIsImY3ZjRmOWU3ZTFlZmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1Njk4MDA0MzY3MDAxZiIpLm1hcChRQyksVUE9dUEoVkEpLGpBPW5ldyBBcnJheSgzKS5jb25jYXQoImZkZTBkZGZhOWZiNWM1MWI4YSIsImZlZWJlMmZiYjRiOWY3NjhhMWFlMDE3ZSIsImZlZWJlMmZiYjRiOWY3NjhhMWM1MWI4YTdhMDE3NyIsImZlZWJlMmZjYzVjMGZhOWZiNWY3NjhhMWM1MWI4YTdhMDE3NyIsImZlZWJlMmZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3NyIsImZmZjdmM2ZkZTBkZGZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3NyIsImZmZjdmM2ZkZTBkZGZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3NzQ5MDA2YSIpLm1hcChRQyksR0E9dUEoakEpLFdBPW5ldyBBcnJheSgzKS5jb25jYXQoImVkZjhiMTdmY2RiYjJjN2ZiOCIsImZmZmZjY2ExZGFiNDQxYjZjNDIyNWVhOCIsImZmZmZjY2ExZGFiNDQxYjZjNDJjN2ZiODI1MzQ5NCIsImZmZmZjY2M3ZTliNDdmY2RiYjQxYjZjNDJjN2ZiODI1MzQ5NCIsImZmZmZjY2M3ZTliNDdmY2RiYjQxYjZjNDFkOTFjMDIyNWVhODBjMmM4NCIsImZmZmZkOWVkZjhiMWM3ZTliNDdmY2RiYjQxYjZjNDFkOTFjMDIyNWVhODBjMmM4NCIsImZmZmZkOWVkZjhiMWM3ZTliNDdmY2RiYjQxYjZjNDFkOTFjMDIyNWVhODI1MzQ5NDA4MWQ1OCIpLm1hcChRQykscUE9dUEoV0EpLFlBPW5ldyBBcnJheSgzKS5jb25jYXQoImY3ZmNiOWFkZGQ4ZTMxYTM1NCIsImZmZmZjY2MyZTY5OTc4YzY3OTIzODQ0MyIsImZmZmZjY2MyZTY5OTc4YzY3OTMxYTM1NDAwNjgzNyIsImZmZmZjY2Q5ZjBhM2FkZGQ4ZTc4YzY3OTMxYTM1NDAwNjgzNyIsImZmZmZjY2Q5ZjBhM2FkZGQ4ZTc4YzY3OTQxYWI1ZDIzODQ0MzAwNWEzMiIsImZmZmZlNWY3ZmNiOWQ5ZjBhM2FkZGQ4ZTc4YzY3OTQxYWI1ZDIzODQ0MzAwNWEzMiIsImZmZmZlNWY3ZmNiOWQ5ZjBhM2FkZGQ4ZTc4YzY3OTQxYWI1ZDIzODQ0MzAwNjgzNzAwNDUyOSIpLm1hcChRQyksWEE9dUEoWUEpLCRBPW5ldyBBcnJheSgzKS5jb25jYXQoImZmZjdiY2ZlYzQ0ZmQ5NWYwZSIsImZmZmZkNGZlZDk4ZWZlOTkyOWNjNGMwMiIsImZmZmZkNGZlZDk4ZWZlOTkyOWQ5NWYwZTk5MzQwNCIsImZmZmZkNGZlZTM5MWZlYzQ0ZmZlOTkyOWQ5NWYwZTk5MzQwNCIsImZmZmZkNGZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjhjMmQwNCIsImZmZmZlNWZmZjdiY2ZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjhjMmQwNCIsImZmZmZlNWZmZjdiY2ZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjk5MzQwNDY2MjUwNiIpLm1hcChRQyksS0E9dUEoJEEpLFpBPW5ldyBBcnJheSgzKS5jb25jYXQoImZmZWRhMGZlYjI0Y2YwM2IyMCIsImZmZmZiMmZlY2M1Y2ZkOGQzY2UzMWExYyIsImZmZmZiMmZlY2M1Y2ZkOGQzY2YwM2IyMGJkMDAyNiIsImZmZmZiMmZlZDk3NmZlYjI0Y2ZkOGQzY2YwM2IyMGJkMDAyNiIsImZmZmZiMmZlZDk3NmZlYjI0Y2ZkOGQzY2ZjNGUyYWUzMWExY2IxMDAyNiIsImZmZmZjY2ZmZWRhMGZlZDk3NmZlYjI0Y2ZkOGQzY2ZjNGUyYWUzMWExY2IxMDAyNiIsImZmZmZjY2ZmZWRhMGZlZDk3NmZlYjI0Y2ZkOGQzY2ZjNGUyYWUzMWExY2JkMDAyNjgwMDAyNiIpLm1hcChRQyksSkE9dUEoWkEpLFFBPW5ldyBBcnJheSgzKS5jb25jYXQoImRlZWJmNzllY2FlMTMxODJiZCIsImVmZjNmZmJkZDdlNzZiYWVkNjIxNzFiNSIsImVmZjNmZmJkZDdlNzZiYWVkNjMxODJiZDA4NTE5YyIsImVmZjNmZmM2ZGJlZjllY2FlMTZiYWVkNjMxODJiZDA4NTE5YyIsImVmZjNmZmM2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NDU5NCIsImY3ZmJmZmRlZWJmN2M2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NDU5NCIsImY3ZmJmZmRlZWJmN2M2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NTE5YzA4MzA2YiIpLm1hcChRQyksdGs9dUEoUUEpLGVrPW5ldyBBcnJheSgzKS5jb25jYXQoImU1ZjVlMGExZDk5YjMxYTM1NCIsImVkZjhlOWJhZTRiMzc0YzQ3NjIzOGI0NSIsImVkZjhlOWJhZTRiMzc0YzQ3NjMxYTM1NDAwNmQyYyIsImVkZjhlOWM3ZTljMGExZDk5Yjc0YzQ3NjMxYTM1NDAwNmQyYyIsImVkZjhlOWM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNWEzMiIsImY3ZmNmNWU1ZjVlMGM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNWEzMiIsImY3ZmNmNWU1ZjVlMGM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNmQyYzAwNDQxYiIpLm1hcChRQyksbms9dUEoZWspLGlrPW5ldyBBcnJheSgzKS5jb25jYXQoImYwZjBmMGJkYmRiZDYzNjM2MyIsImY3ZjdmN2NjY2NjYzk2OTY5NjUyNTI1MiIsImY3ZjdmN2NjY2NjYzk2OTY5NjYzNjM2MzI1MjUyNSIsImY3ZjdmN2Q5ZDlkOWJkYmRiZDk2OTY5NjYzNjM2MzI1MjUyNSIsImY3ZjdmN2Q5ZDlkOWJkYmRiZDk2OTY5NjczNzM3MzUyNTI1MjI1MjUyNSIsImZmZmZmZmYwZjBmMGQ5ZDlkOWJkYmRiZDk2OTY5NjczNzM3MzUyNTI1MjI1MjUyNSIsImZmZmZmZmYwZjBmMGQ5ZDlkOWJkYmRiZDk2OTY5NjczNzM3MzUyNTI1MjI1MjUyNTAwMDAwMCIpLm1hcChRQykscms9dUEoaWspLG9rPW5ldyBBcnJheSgzKS5jb25jYXQoImVmZWRmNWJjYmRkYzc1NmJiMSIsImYyZjBmN2NiYzllMjllOWFjODZhNTFhMyIsImYyZjBmN2NiYzllMjllOWFjODc1NmJiMTU0Mjc4ZiIsImYyZjBmN2RhZGFlYmJjYmRkYzllOWFjODc1NmJiMTU0Mjc4ZiIsImYyZjBmN2RhZGFlYmJjYmRkYzllOWFjODgwN2RiYTZhNTFhMzRhMTQ4NiIsImZjZmJmZGVmZWRmNWRhZGFlYmJjYmRkYzllOWFjODgwN2RiYTZhNTFhMzRhMTQ4NiIsImZjZmJmZGVmZWRmNWRhZGFlYmJjYmRkYzllOWFjODgwN2RiYTZhNTFhMzU0Mjc4ZjNmMDA3ZCIpLm1hcChRQyksYWs9dUEob2spLHNrPW5ldyBBcnJheSgzKS5jb25jYXQoImZlZTBkMmZjOTI3MmRlMmQyNiIsImZlZTVkOWZjYWU5MWZiNmE0YWNiMTgxZCIsImZlZTVkOWZjYWU5MWZiNmE0YWRlMmQyNmE1MGYxNSIsImZlZTVkOWZjYmJhMWZjOTI3MmZiNmE0YWRlMmQyNmE1MGYxNSIsImZlZTVkOWZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZDk5MDAwZCIsImZmZjVmMGZlZTBkMmZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZDk5MDAwZCIsImZmZjVmMGZlZTBkMmZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZGE1MGYxNTY3MDAwZCIpLm1hcChRQyksbGs9dUEoc2spLGNrPW5ldyBBcnJheSgzKS5jb25jYXQoImZlZTZjZWZkYWU2YmU2NTUwZCIsImZlZWRkZWZkYmU4NWZkOGQzY2Q5NDcwMSIsImZlZWRkZWZkYmU4NWZkOGQzY2U2NTUwZGE2MzYwMyIsImZlZWRkZWZkZDBhMmZkYWU2YmZkOGQzY2U2NTUwZGE2MzYwMyIsImZlZWRkZWZkZDBhMmZkYWU2YmZkOGQzY2YxNjkxM2Q5NDgwMThjMmQwNCIsImZmZjVlYmZlZTZjZWZkZDBhMmZkYWU2YmZkOGQzY2YxNjkxM2Q5NDgwMThjMmQwNCIsImZmZjVlYmZlZTZjZWZkZDBhMmZkYWU2YmZkOGQzY2YxNjkxM2Q5NDgwMWE2MzYwMzdmMjcwNCIpLm1hcChRQyksdWs9dUEoY2spLGhrPWdwKGJkKDMwMCwuNSwwKSxiZCgtMjQwLC41LDEpKSxkaz1ncChiZCgtMTAwLC43NSwuMzUpLGJkKDgwLDEuNSwuOCkpLHBrPWdwKGJkKDI2MCwuNzUsLjM1KSxiZCg4MCwxLjUsLjgpKSxmaz1iZCgpLG1rPVZoKCksZ2s9TWF0aC5QSS8zLF9rPTIqTWF0aC5QSS8zO2Z1bmN0aW9uIHlrKHQpe3ZhciBlPXQubGVuZ3RoO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdFtNYXRoLm1heCgwLE1hdGgubWluKGUtMSxNYXRoLmZsb29yKG4qZSkpKV19fXZhciB2az15ayhRQygiNDQwMTU0NDQwMjU2NDUwNDU3NDUwNTU5NDYwNzVhNDYwODVjNDYwYTVkNDYwYjVlNDcwZDYwNDcwZTYxNDcxMDYzNDcxMTY0NDcxMzY1NDgxNDY3NDgxNjY4NDgxNzY5NDgxODZhNDgxYTZjNDgxYjZkNDgxYzZlNDgxZDZmNDgxZjcwNDgyMDcxNDgyMTczNDgyMzc0NDgyNDc1NDgyNTc2NDgyNjc3NDgyODc4NDgyOTc5NDcyYTdhNDcyYzdhNDcyZDdiNDcyZTdjNDcyZjdkNDYzMDdlNDYzMjdlNDYzMzdmNDYzNDgwNDUzNTgxNDUzNzgxNDUzODgyNDQzOTgzNDQzYTgzNDQzYjg0NDMzZDg0NDMzZTg1NDIzZjg1NDI0MDg2NDI0MTg2NDE0Mjg3NDE0NDg3NDA0NTg4NDA0Njg4M2Y0Nzg4M2Y0ODg5M2U0OTg5M2U0YTg5M2U0YzhhM2Q0ZDhhM2Q0ZThhM2M0ZjhhM2M1MDhiM2I1MThiM2I1MjhiM2E1MzhiM2E1NDhjMzk1NThjMzk1NjhjMzg1ODhjMzg1OThjMzc1YThjMzc1YjhkMzY1YzhkMzY1ZDhkMzU1ZThkMzU1ZjhkMzQ2MDhkMzQ2MThkMzM2MjhkMzM2MzhkMzI2NDhlMzI2NThlMzE2NjhlMzE2NzhlMzE2ODhlMzA2OThlMzA2YThlMmY2YjhlMmY2YzhlMmU2ZDhlMmU2ZThlMmU2ZjhlMmQ3MDhlMmQ3MThlMmM3MThlMmM3MjhlMmM3MzhlMmI3NDhlMmI3NThlMmE3NjhlMmE3NzhlMmE3ODhlMjk3OThlMjk3YThlMjk3YjhlMjg3YzhlMjg3ZDhlMjc3ZThlMjc3ZjhlMjc4MDhlMjY4MThlMjY4MjhlMjY4MjhlMjU4MzhlMjU4NDhlMjU4NThlMjQ4NjhlMjQ4NzhlMjM4ODhlMjM4OThlMjM4YThkMjI4YjhkMjI4YzhkMjI4ZDhkMjE4ZThkMjE4ZjhkMjE5MDhkMjE5MThjMjA5MjhjMjA5MjhjMjA5MzhjMWY5NDhjMWY5NThiMWY5NjhiMWY5NzhiMWY5ODhiMWY5OThhMWY5YThhMWU5YjhhMWU5Yzg5MWU5ZDg5MWY5ZTg5MWY5Zjg4MWZhMDg4MWZhMTg4MWZhMTg3MWZhMjg3MjBhMzg2MjBhNDg2MjFhNTg1MjFhNjg1MjJhNzg1MjJhODg0MjNhOTgzMjRhYTgzMjVhYjgyMjVhYzgyMjZhZDgxMjdhZDgxMjhhZTgwMjlhZjdmMmFiMDdmMmNiMTdlMmRiMjdkMmViMzdjMmZiNDdjMzFiNTdiMzJiNjdhMzRiNjc5MzViNzc5MzdiODc4MzhiOTc3M2FiYTc2M2JiYjc1M2RiYzc0M2ZiYzczNDBiZDcyNDJiZTcxNDRiZjcwNDZjMDZmNDhjMTZlNGFjMTZkNGNjMjZjNGVjMzZiNTBjNDZhNTJjNTY5NTRjNTY4NTZjNjY3NThjNzY1NWFjODY0NWNjODYzNWVjOTYyNjBjYTYwNjNjYjVmNjVjYjVlNjdjYzVjNjljZDViNmNjZDVhNmVjZTU4NzBjZjU3NzNkMDU2NzVkMDU0NzdkMTUzN2FkMTUxN2NkMjUwN2ZkMzRlODFkMzRkODRkNDRiODZkNTQ5ODlkNTQ4OGJkNjQ2OGVkNjQ1OTBkNzQzOTNkNzQxOTVkODQwOThkODNlOWJkOTNjOWRkOTNiYTBkYTM5YTJkYTM3YTVkYjM2YThkYjM0YWFkYzMyYWRkYzMwYjBkZDJmYjJkZDJkYjVkZTJiYjhkZTI5YmFkZTI4YmRkZjI2YzBkZjI1YzJkZjIzYzVlMDIxYzhlMDIwY2FlMTFmY2RlMTFkZDBlMTFjZDJlMjFiZDVlMjFhZDhlMjE5ZGFlMzE5ZGRlMzE4ZGZlMzE4ZTJlNDE4ZTVlNDE5ZTdlNDE5ZWFlNTFhZWNlNTFiZWZlNTFjZjFlNTFkZjRlNjFlZjZlNjIwZjhlNjIxZmJlNzIzZmRlNzI1IikpLGJrPXlrKFFDKCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMDkwMjAyMGIwMjAyMGQwMzAzMGYwMzAzMTIwNDA0MTQwNTA0MTYwNjA1MTgwNjA1MWEwNzA2MWMwODA3MWUwOTA3MjAwYTA4MjIwYjA5MjQwYzA5MjYwZDBhMjkwZTBiMmIxMDBiMmQxMTBjMmYxMjBkMzExMzBkMzQxNDBlMzYxNTBlMzgxNjBmM2IxODBmM2QxOTEwM2YxYTEwNDIxYzEwNDQxZDExNDcxZTExNDkyMDExNGIyMTExNGUyMjExNTAyNDEyNTMyNTEyNTUyNzEyNTgyOTExNWEyYTExNWMyYzExNWYyZDExNjEyZjExNjMzMTExNjUzMzEwNjczNDEwNjkzNjEwNmIzODEwNmMzOTBmNmUzYjBmNzAzZDBmNzEzZjBmNzI0MDBmNzQ0MjBmNzU0NDBmNzY0NTEwNzc0NzEwNzg0OTEwNzg0YTEwNzk0YzExN2E0ZTExN2I0ZjEyN2I1MTEyN2M1MjEzN2M1NDEzN2Q1NjE0N2Q1NzE1N2U1OTE1N2U1YTE2N2U1YzE2N2Y1ZDE3N2Y1ZjE4N2Y2MDE4ODA2MjE5ODA2NDFhODA2NTFhODA2NzFiODA2ODFjODE2YTFjODE2YjFkODE2ZDFkODE2ZTFlODE3MDFmODE3MjFmODE3MzIwODE3NTIxODE3NjIxODE3ODIyODE3OTIyODI3YjIzODI3YzIzODI3ZTI0ODI4MDI1ODI4MTI1ODE4MzI2ODE4NDI2ODE4NjI3ODE4ODI3ODE4OTI4ODE4YjI5ODE4YzI5ODE4ZTJhODE5MDJhODE5MTJiODE5MzJiODA5NDJjODA5NjJjODA5ODJkODA5OTJkODA5YjJlN2Y5YzJlN2Y5ZTJmN2ZhMDJmN2ZhMTMwN2VhMzMwN2VhNTMxN2VhNjMxN2RhODMyN2RhYTMzN2RhYjMzN2NhZDM0N2NhZTM0N2JiMDM1N2JiMjM1N2JiMzM2N2FiNTM2N2FiNzM3NzliODM3NzliYTM4NzhiYzM5NzhiZDM5NzdiZjNhNzdjMDNhNzZjMjNiNzVjNDNjNzVjNTNjNzRjNzNkNzNjODNlNzNjYTNlNzJjYzNmNzFjZDQwNzFjZjQwNzBkMDQxNmZkMjQyNmZkMzQzNmVkNTQ0NmRkNjQ1NmNkODQ1NmNkOTQ2NmJkYjQ3NmFkYzQ4NjlkZTQ5NjhkZjRhNjhlMDRjNjdlMjRkNjZlMzRlNjVlNDRmNjRlNTUwNjRlNzUyNjNlODUzNjJlOTU0NjJlYTU2NjFlYjU3NjBlYzU4NjBlZDVhNWZlZTViNWVlZjVkNWVmMDVmNWVmMTYwNWRmMjYyNWRmMjY0NWNmMzY1NWNmNDY3NWNmNDY5NWNmNTZiNWNmNjZjNWNmNjZlNWNmNzcwNWNmNzcyNWNmODc0NWNmODc2NWNmOTc4NWRmOTc5NWRmOTdiNWRmYTdkNWVmYTdmNWVmYTgxNWZmYjgzNWZmYjg1NjBmYjg3NjFmYzg5NjFmYzhhNjJmYzhjNjNmYzhlNjRmYzkwNjVmZDkyNjZmZDk0NjdmZDk2NjhmZDk4NjlmZDlhNmFmZDliNmJmZTlkNmNmZTlmNmRmZWExNmVmZWEzNmZmZWE1NzFmZWE3NzJmZWE5NzNmZWFhNzRmZWFjNzZmZWFlNzdmZWIwNzhmZWIyN2FmZWI0N2JmZWI2N2NmZWI3N2VmZWI5N2ZmZWJiODFmZWJkODJmZWJmODRmZWMxODVmZWMyODdmZWM0ODhmZWM2OGFmZWM4OGNmZWNhOGRmZWNjOGZmZWNkOTBmZWNmOTJmZWQxOTRmZWQzOTVmZWQ1OTdmZWQ3OTlmZWQ4OWFmZGRhOWNmZGRjOWVmZGRlYTBmZGUwYTFmZGUyYTNmZGUzYTVmZGU1YTdmZGU3YTlmZGU5YWFmZGViYWNmY2VjYWVmY2VlYjBmY2YwYjJmY2YyYjRmY2Y0YjZmY2Y2YjhmY2Y3YjlmY2Y5YmJmY2ZiYmRmY2ZkYmYiKSkseGs9eWsoUUMoIjAwMDAwNDAxMDAwNTAxMDEwNjAxMDEwODAyMDEwYTAyMDIwYzAyMDIwZTAzMDIxMDA0MDMxMjA0MDMxNDA1MDQxNzA2MDQxOTA3MDUxYjA4MDUxZDA5MDYxZjBhMDcyMjBiMDcyNDBjMDgyNjBkMDgyOTBlMDkyYjEwMDkyZDExMGEzMDEyMGEzMjE0MGIzNDE1MGIzNzE2MGIzOTE4MGMzYzE5MGMzZTFiMGM0MTFjMGM0MzFlMGM0NTFmMGM0ODIxMGM0YTIzMGM0YzI0MGM0ZjI2MGM1MTI4MGI1MzI5MGI1NTJiMGI1NzJkMGI1OTJmMGE1YjMxMGE1YzMyMGE1ZTM0MGE1ZjM2MDk2MTM4MDk2MjM5MDk2MzNiMDk2NDNkMDk2NTNlMDk2NjQwMGE2NzQyMGE2ODQ0MGE2ODQ1MGE2OTQ3MGI2YTQ5MGI2YTRhMGM2YjRjMGM2YjRkMGQ2YzRmMGQ2YzUxMGU2YzUyMGU2ZDU0MGY2ZDU1MGY2ZDU3MTA2ZTU5MTA2ZTVhMTE2ZTVjMTI2ZTVkMTI2ZTVmMTM2ZTYxMTM2ZTYyMTQ2ZTY0MTU2ZTY1MTU2ZTY3MTY2ZTY5MTY2ZTZhMTc2ZTZjMTg2ZTZkMTg2ZTZmMTk2ZTcxMTk2ZTcyMWE2ZTc0MWE2ZTc1MWI2ZTc3MWM2ZDc4MWM2ZDdhMWQ2ZDdjMWQ2ZDdkMWU2ZDdmMWU2YzgwMWY2YzgyMjA2Yzg0MjA2Yjg1MjE2Yjg3MjE2Yjg4MjI2YThhMjI2YThjMjM2OThkMjM2OThmMjQ2OTkwMjU2ODkyMjU2ODkzMjY2Nzk1MjY2Nzk3Mjc2Njk4Mjc2NjlhMjg2NTliMjk2NDlkMjk2NDlmMmE2M2EwMmE2M2EyMmI2MmEzMmM2MWE1MmM2MGE2MmQ2MGE4MmU1ZmE5MmU1ZWFiMmY1ZWFkMzA1ZGFlMzA1Y2IwMzE1YmIxMzI1YWIzMzI1YWI0MzM1OWI2MzQ1OGI3MzU1N2I5MzU1NmJhMzY1NWJjMzc1NGJkMzg1M2JmMzk1MmMwM2E1MWMxM2E1MGMzM2I0ZmM0M2M0ZWM2M2Q0ZGM3M2U0Y2M4M2Y0YmNhNDA0YWNiNDE0OWNjNDI0OGNlNDM0N2NmNDQ0NmQwNDU0NWQyNDY0NGQzNDc0M2Q0NDg0MmQ1NGE0MWQ3NGIzZmQ4NGMzZWQ5NGQzZGRhNGUzY2RiNTAzYmRkNTEzYWRlNTIzOGRmNTMzN2UwNTUzNmUxNTYzNWUyNTczNGUzNTkzM2U0NWEzMWU1NWMzMGU2NWQyZmU3NWUyZWU4NjAyZGU5NjEyYmVhNjMyYWViNjQyOWViNjYyOGVjNjcyNmVkNjkyNWVlNmEyNGVmNmMyM2VmNmUyMWYwNmYyMGYxNzExZmYxNzMxZGYyNzQxY2YzNzYxYmYzNzgxOWY0NzkxOGY1N2IxN2Y1N2QxNWY2N2UxNGY2ODAxM2Y3ODIxMmY3ODQxMGY4ODUwZmY4ODcwZWY4ODkwY2Y5OGIwYmY5OGMwYWY5OGUwOWZhOTAwOGZhOTIwN2ZhOTQwN2ZiOTYwNmZiOTcwNmZiOTkwNmZiOWIwNmZiOWQwN2ZjOWYwN2ZjYTEwOGZjYTMwOWZjYTUwYWZjYTYwY2ZjYTgwZGZjYWEwZmZjYWMxMWZjYWUxMmZjYjAxNGZjYjIxNmZjYjQxOGZiYjYxYWZiYjgxZGZiYmExZmZiYmMyMWZiYmUyM2ZhYzAyNmZhYzIyOGZhYzQyYWZhYzYyZGY5YzcyZmY5YzkzMmY5Y2IzNWY4Y2QzN2Y4Y2YzYWY3ZDEzZGY3ZDM0MGY2ZDU0M2Y2ZDc0NmY1ZDk0OWY1ZGI0Y2Y0ZGQ0ZmY0ZGY1M2Y0ZTE1NmYzZTM1YWYzZTU1ZGYyZTY2MWYyZTg2NWYyZWE2OWYxZWM2ZGYxZWQ3MWYxZWY3NWYxZjE3OWYyZjI3ZGYyZjQ4MmYzZjU4NmYzZjY4YWY0Zjg4ZWY1Zjk5MmY2ZmE5NmY4ZmI5YWY5ZmM5ZGZhZmRhMWZjZmZhNCIpKSx3az15ayhRQygiMGQwODg3MTAwNzg4MTMwNzg5MTYwNzhhMTkwNjhjMWIwNjhkMWQwNjhlMjAwNjhmMjIwNjkwMjQwNjkxMjYwNTkxMjgwNTkyMmEwNTkzMmMwNTk0MmUwNTk1MmYwNTk2MzEwNTk3MzMwNTk3MzUwNDk4MzcwNDk5MzgwNDlhM2EwNDlhM2MwNDliM2UwNDljM2YwNDljNDEwNDlkNDMwMzllNDQwMzllNDYwMzlmNDgwMzlmNDkwM2EwNGIwM2ExNGMwMmExNGUwMmEyNTAwMmEyNTEwMmEzNTMwMmEzNTUwMmE0NTYwMWE0NTgwMWE0NTkwMWE1NWIwMWE1NWMwMWE2NWUwMWE2NjAwMWE2NjEwMGE3NjMwMGE3NjQwMGE3NjYwMGE3NjcwMGE4NjkwMGE4NmEwMGE4NmMwMGE4NmUwMGE4NmYwMGE4NzEwMGE4NzIwMWE4NzQwMWE4NzUwMWE4NzcwMWE4NzgwMWE4N2EwMmE4N2IwMmE4N2QwM2E4N2UwM2E4ODAwNGE4ODEwNGE3ODMwNWE3ODQwNWE3ODYwNmE2ODcwN2E2ODgwOGE2OGEwOWE1OGIwYWE1OGQwYmE1OGUwY2E0OGYwZGE0OTEwZWEzOTIwZmEzOTQxMGEyOTUxMWExOTYxM2ExOTgxNGEwOTkxNTlmOWExNjlmOWMxNzllOWQxODlkOWUxOTlkYTAxYTljYTExYjliYTIxZDlhYTMxZTlhYTUxZjk5YTYyMDk4YTcyMTk3YTgyMjk2YWEyMzk1YWIyNDk0YWMyNjk0YWQyNzkzYWUyODkyYjAyOTkxYjEyYTkwYjIyYjhmYjMyYzhlYjQyZThkYjUyZjhjYjYzMDhiYjczMThhYjgzMjg5YmEzMzg4YmIzNDg4YmMzNTg3YmQzNzg2YmUzODg1YmYzOTg0YzAzYTgzYzEzYjgyYzIzYzgxYzMzZDgwYzQzZTdmYzU0MDdlYzY0MTdkYzc0MjdjYzg0MzdiYzk0NDdhY2E0NTdhY2I0Njc5Y2M0Nzc4Y2M0OTc3Y2Q0YTc2Y2U0Yjc1Y2Y0Yzc0ZDA0ZDczZDE0ZTcyZDI0ZjcxZDM1MTcxZDQ1MjcwZDU1MzZmZDU1NDZlZDY1NTZkZDc1NjZjZDg1NzZiZDk1ODZhZGE1YTZhZGE1YjY5ZGI1YzY4ZGM1ZDY3ZGQ1ZTY2ZGU1ZjY1ZGU2MTY0ZGY2MjYzZTA2MzYzZTE2NDYyZTI2NTYxZTI2NjYwZTM2ODVmZTQ2OTVlZTU2YTVkZTU2YjVkZTY2YzVjZTc2ZTViZTc2ZjVhZTg3MDU5ZTk3MTU4ZTk3MjU3ZWE3NDU3ZWI3NTU2ZWI3NjU1ZWM3NzU0ZWQ3OTUzZWQ3YTUyZWU3YjUxZWY3YzUxZWY3ZTUwZjA3ZjRmZjA4MDRlZjE4MTRkZjE4MzRjZjI4NDRiZjM4NTRiZjM4NzRhZjQ4ODQ5ZjQ4OTQ4ZjU4YjQ3ZjU4YzQ2ZjY4ZDQ1ZjY4ZjQ0Zjc5MDQ0Zjc5MTQzZjc5MzQyZjg5NDQxZjg5NTQwZjk5NzNmZjk5ODNlZjk5YTNlZmE5YjNkZmE5YzNjZmE5ZTNiZmI5ZjNhZmJhMTM5ZmJhMjM4ZmNhMzM4ZmNhNTM3ZmNhNjM2ZmNhODM1ZmNhOTM0ZmRhYjMzZmRhYzMzZmRhZTMyZmRhZjMxZmRiMTMwZmRiMjJmZmRiNDJmZmRiNTJlZmViNzJkZmViODJjZmViYTJjZmViYjJiZmViZDJhZmViZTJhZmVjMDI5ZmRjMjI5ZmRjMzI4ZmRjNTI3ZmRjNjI3ZmRjODI3ZmRjYTI2ZmRjYjI2ZmNjZDI1ZmNjZTI1ZmNkMDI1ZmNkMjI1ZmJkMzI0ZmJkNTI0ZmJkNzI0ZmFkODI0ZmFkYTI0ZjlkYzI0ZjlkZDI1ZjhkZjI1ZjhlMTI1ZjdlMjI1ZjdlNDI1ZjZlNjI2ZjZlODI2ZjVlOTI2ZjVlYjI3ZjRlZDI3ZjNlZTI3ZjNmMDI3ZjJmMjI3ZjFmNDI2ZjFmNTI1ZjBmNzI0ZjBmOTIxIikpO2Z1bmN0aW9uIFNrKHQpe3JldHVybiBmdW5jdGlvbiBlKCl7cmV0dXJuIHR9fXZhciBNaz1NYXRoLmFicyxFaz1NYXRoLmF0YW4yLFRrPU1hdGguY29zLENrPU1hdGgubWF4LEFrPU1hdGgubWluLGtrPU1hdGguc2luLExrPU1hdGguc3FydCxQaz0xZS0xMixOaz1NYXRoLlBJLElrPU5rLzIsT2s9MipOaztmdW5jdGlvbiBSayh0KXtyZXR1cm4gdD4xPzA6dDwtMT9OazpNYXRoLmFjb3ModCl9ZnVuY3Rpb24gemsodCl7cmV0dXJuIHQ+PTE/SWs6dDw9LTE/LUlrOk1hdGguYXNpbih0KX1mdW5jdGlvbiBEayh0KXtyZXR1cm4gdC5pbm5lclJhZGl1c31mdW5jdGlvbiBCayh0KXtyZXR1cm4gdC5vdXRlclJhZGl1c31mdW5jdGlvbiBIayh0KXtyZXR1cm4gdC5zdGFydEFuZ2xlfWZ1bmN0aW9uIEZrKHQpe3JldHVybiB0LmVuZEFuZ2xlfWZ1bmN0aW9uIFZrKHQpe3JldHVybiB0JiZ0LnBhZEFuZ2xlfWZ1bmN0aW9uIFVrKHQsZSxuLGkscixvLGEscyl7dmFyIGw9bi10LGM9aS1lLHU9YS1yLGg9cy1vLGQ9aCpsLXUqYztpZighKGQqZDxQaykpcmV0dXJuW3QrKGQ9KHUqKGUtbyktaCoodC1yKSkvZCkqbCxlK2QqY119ZnVuY3Rpb24gamsodCxlLG4saSxyLG8sYSl7dmFyIHM9dC1uLGw9ZS1pLGM9KGE/bzotbykvTGsocypzK2wqbCksdT1jKmwsaD0tYypzLGQ9dCt1LHA9ZStoLGY9bit1LG09aStoLGc9KGQrZikvMixfPShwK20pLzIseT1mLWQsdj1tLXAsYj15Knkrdip2LHg9ci1vLHc9ZCptLWYqcCxTPSh2PDA/LTE6MSkqTGsoQ2soMCx4KngqYi13KncpKSxNPSh3KnYteSpTKS9iLEU9KC13KnktdipTKS9iLFQ9KHcqdit5KlMpL2IsQz0oLXcqeSt2KlMpL2IsQT1NLWcsaz1FLV8sTD1ULWcsUD1DLV87cmV0dXJuIEEqQStrKms+TCpMK1AqUCYmKE09VCxFPUMpLHtjeDpNLGN5OkUseDAxOi11LHkwMTotaCx4MTE6TSooci94LTEpLHkxMTpFKihyL3gtMSl9fWZ1bmN0aW9uIEdrKHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBXayh0KXtyZXR1cm4gbmV3IEdrKHQpfWZ1bmN0aW9uIHFrKHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIFlrKHQpe3JldHVybiB0WzFdfWZ1bmN0aW9uIFhrKCl7dmFyIHQ9cWssZT1ZayxuPVNrKCEwKSxpPW51bGwscj1XayxvPW51bGw7ZnVuY3Rpb24gYShhKXt2YXIgcyxsLGMsdT1hLmxlbmd0aCxoPSExO2ZvcihudWxsPT1pJiYobz1yKGM9cGcoKSkpLHM9MDtzPD11OysrcykhKHM8dSYmbihsPWFbc10scyxhKSk9PT1oJiYoKGg9IWgpP28ubGluZVN0YXJ0KCk6by5saW5lRW5kKCkpLGgmJm8ucG9pbnQoK3QobCxzLGEpLCtlKGwscyxhKSk7aWYoYylyZXR1cm4gbz1udWxsLGMrIiJ8fG51bGx9cmV0dXJuIGEueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOlNrKCtlKSxhKTp0fSxhLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpTaygrdCksYSk6ZX0sYS5kZWZpbmVkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6U2soISF0KSxhKTpufSxhLmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsbnVsbCE9aSYmKG89cihpKSksYSk6cn0sYS5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT10P2k9bz1udWxsOm89cihpPXQpLGEpOml9LGF9ZnVuY3Rpb24gJGsoKXt2YXIgdD1xayxlPW51bGwsbj1TaygwKSxpPVlrLHI9U2soITApLG89bnVsbCxhPVdrLHM9bnVsbDtmdW5jdGlvbiBsKGwpe3ZhciBjLHUsaCxkLHAsZj1sLmxlbmd0aCxtPSExLGc9bmV3IEFycmF5KGYpLF89bmV3IEFycmF5KGYpO2ZvcihudWxsPT1vJiYocz1hKHA9cGcoKSkpLGM9MDtjPD1mOysrYyl7aWYoIShjPGYmJnIoZD1sW2NdLGMsbCkpPT09bSlpZihtPSFtKXU9YyxzLmFyZWFTdGFydCgpLHMubGluZVN0YXJ0KCk7ZWxzZXtmb3Iocy5saW5lRW5kKCkscy5saW5lU3RhcnQoKSxoPWMtMTtoPj11Oy0taClzLnBvaW50KGdbaF0sX1toXSk7cy5saW5lRW5kKCkscy5hcmVhRW5kKCl9bSYmKGdbY109K3QoZCxjLGwpLF9bY109K24oZCxjLGwpLHMucG9pbnQoZT8rZShkLGMsbCk6Z1tjXSxpPytpKGQsYyxsKTpfW2NdKSl9aWYocClyZXR1cm4gcz1udWxsLHArIiJ8fG51bGx9ZnVuY3Rpb24gYygpe3JldHVybiBYaygpLmRlZmluZWQocikuY3VydmUoYSkuY29udGV4dChvKX1yZXR1cm4gbC54PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBuP246U2soK24pLGU9bnVsbCxsKTp0fSxsLngwPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6U2soK2UpLGwpOnR9LGwueDE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bnVsbD09dD9udWxsOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6U2soK3QpLGwpOmV9LGwueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlNrKCt0KSxpPW51bGwsbCk6bn0sbC55MD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlNrKCt0KSxsKTpufSxsLnkxPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PXQ/bnVsbDoiZnVuY3Rpb24iPT10eXBlb2YgdD90OlNrKCt0KSxsKTppfSxsLmxpbmVYMD1sLmxpbmVZMD1mdW5jdGlvbigpe3JldHVybiBjKCkueCh0KS55KG4pfSxsLmxpbmVZMT1mdW5jdGlvbigpe3JldHVybiBjKCkueCh0KS55KGkpfSxsLmxpbmVYMT1mdW5jdGlvbigpe3JldHVybiBjKCkueChlKS55KG4pfSxsLmRlZmluZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpTayghIXQpLGwpOnJ9LGwuY3VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dCxudWxsIT1vJiYocz1hKG8pKSxsKTphfSxsLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/bz1zPW51bGw6cz1hKG89dCksbCk6b30sbH1mdW5jdGlvbiBLayh0LGUpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn1mdW5jdGlvbiBaayh0KXtyZXR1cm4gdH1Hay5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2RlZmF1bHQ6dGhpcy5fY29udGV4dC5saW5lVG8odCxlKX19fTt2YXIgSms9dEwoV2spO2Z1bmN0aW9uIFFrKHQpe3RoaXMuX2N1cnZlPXR9ZnVuY3Rpb24gdEwodCl7ZnVuY3Rpb24gZShlKXtyZXR1cm4gbmV3IFFrKHQoZSkpfXJldHVybiBlLl9jdXJ2ZT10LGV9ZnVuY3Rpb24gZUwodCl7dmFyIGU9dC5jdXJ2ZTtyZXR1cm4gdC5hbmdsZT10LngsZGVsZXRlIHQueCx0LnJhZGl1cz10LnksZGVsZXRlIHQueSx0LmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2UodEwodCkpOmUoKS5fY3VydmV9LHR9ZnVuY3Rpb24gbkwoKXtyZXR1cm4gZUwoWGsoKS5jdXJ2ZShKaykpfWZ1bmN0aW9uIGlMKCl7dmFyIHQ9JGsoKS5jdXJ2ZShKayksZT10LmN1cnZlLG49dC5saW5lWDAsaT10LmxpbmVYMSxyPXQubGluZVkwLG89dC5saW5lWTE7cmV0dXJuIHQuYW5nbGU9dC54LGRlbGV0ZSB0LngsdC5zdGFydEFuZ2xlPXQueDAsZGVsZXRlIHQueDAsdC5lbmRBbmdsZT10LngxLGRlbGV0ZSB0LngxLHQucmFkaXVzPXQueSxkZWxldGUgdC55LHQuaW5uZXJSYWRpdXM9dC55MCxkZWxldGUgdC55MCx0Lm91dGVyUmFkaXVzPXQueTEsZGVsZXRlIHQueTEsdC5saW5lU3RhcnRBbmdsZT1mdW5jdGlvbigpe3JldHVybiBlTChuKCkpfSxkZWxldGUgdC5saW5lWDAsdC5saW5lRW5kQW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gZUwoaSgpKX0sZGVsZXRlIHQubGluZVgxLHQubGluZUlubmVyUmFkaXVzPWZ1bmN0aW9uKCl7cmV0dXJuIGVMKHIoKSl9LGRlbGV0ZSB0LmxpbmVZMCx0LmxpbmVPdXRlclJhZGl1cz1mdW5jdGlvbigpe3JldHVybiBlTChvKCkpfSxkZWxldGUgdC5saW5lWTEsdC5jdXJ2ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9lKHRMKHQpKTplKCkuX2N1cnZlfSx0fWZ1bmN0aW9uIHJMKHQsZSl7cmV0dXJuWyhlPStlKSpNYXRoLmNvcyh0LT1NYXRoLlBJLzIpLGUqTWF0aC5zaW4odCldfVFrLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUuYXJlYVN0YXJ0KCl9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5hcmVhRW5kKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUubGluZUVuZCgpfSxwb2ludDpmdW5jdGlvbih0LGUpe3RoaXMuX2N1cnZlLnBvaW50KGUqTWF0aC5zaW4odCksZSotTWF0aC5jb3ModCkpfX07dmFyIG9MPUFycmF5LnByb3RvdHlwZS5zbGljZTtmdW5jdGlvbiBhTCh0KXtyZXR1cm4gdC5zb3VyY2V9ZnVuY3Rpb24gc0wodCl7cmV0dXJuIHQudGFyZ2V0fWZ1bmN0aW9uIGxMKHQpe3ZhciBlPWFMLG49c0wsaT1xayxyPVlrLG89bnVsbDtmdW5jdGlvbiBhKCl7dmFyIGEscz1vTC5jYWxsKGFyZ3VtZW50cyksbD1lLmFwcGx5KHRoaXMscyksYz1uLmFwcGx5KHRoaXMscyk7aWYob3x8KG89YT1wZygpKSx0KG8sK2kuYXBwbHkodGhpcywoc1swXT1sLHMpKSwrci5hcHBseSh0aGlzLHMpLCtpLmFwcGx5KHRoaXMsKHNbMF09YyxzKSksK3IuYXBwbHkodGhpcyxzKSksYSlyZXR1cm4gbz1udWxsLGErIiJ8fG51bGx9cmV0dXJuIGEuc291cmNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsYSk6ZX0sYS50YXJnZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxhKTpufSxhLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpTaygrdCksYSk6aX0sYS55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6U2soK3QpLGEpOnJ9LGEuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1udWxsPT10P251bGw6dCxhKTpvfSxhfWZ1bmN0aW9uIGNMKHQsZSxuLGkscil7dC5tb3ZlVG8oZSxuKSx0LmJlemllckN1cnZlVG8oZT0oZStpKS8yLG4sZSxyLGkscil9ZnVuY3Rpb24gdUwodCxlLG4saSxyKXt0Lm1vdmVUbyhlLG4pLHQuYmV6aWVyQ3VydmVUbyhlLG49KG4rcikvMixpLG4saSxyKX1mdW5jdGlvbiBoTCh0LGUsbixpLHIpe3ZhciBvPXJMKGUsbiksYT1yTChlLG49KG4rcikvMikscz1yTChpLG4pLGw9ckwoaSxyKTt0Lm1vdmVUbyhvWzBdLG9bMV0pLHQuYmV6aWVyQ3VydmVUbyhhWzBdLGFbMV0sc1swXSxzWzFdLGxbMF0sbFsxXSl9dmFyIGRMPXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIG49TWF0aC5zcXJ0KGUvTmspO3QubW92ZVRvKG4sMCksdC5hcmMoMCwwLG4sMCxPayl9fSxwTD17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciBuPU1hdGguc3FydChlLzUpLzI7dC5tb3ZlVG8oLTMqbiwtbiksdC5saW5lVG8oLW4sLW4pLHQubGluZVRvKC1uLC0zKm4pLHQubGluZVRvKG4sLTMqbiksdC5saW5lVG8obiwtbiksdC5saW5lVG8oMypuLC1uKSx0LmxpbmVUbygzKm4sbiksdC5saW5lVG8obixuKSx0LmxpbmVUbyhuLDMqbiksdC5saW5lVG8oLW4sMypuKSx0LmxpbmVUbygtbixuKSx0LmxpbmVUbygtMypuLG4pLHQuY2xvc2VQYXRoKCl9fSxmTD1NYXRoLnNxcnQoMS8zKSxtTD0yKmZMLGdMPXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIG49TWF0aC5zcXJ0KGUvbUwpLGk9bipmTDt0Lm1vdmVUbygwLC1uKSx0LmxpbmVUbyhpLDApLHQubGluZVRvKDAsbiksdC5saW5lVG8oLWksMCksdC5jbG9zZVBhdGgoKX19LF9MPU1hdGguc2luKE5rLzEwKS9NYXRoLnNpbig3Kk5rLzEwKSx5TD1NYXRoLnNpbihPay8xMCkqX0wsdkw9LU1hdGguY29zKE9rLzEwKSpfTCxiTD17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciBuPU1hdGguc3FydCguODkwODEzMDkxNTI5Mjg1MiplKSxpPXlMKm4scj12TCpuO3QubW92ZVRvKDAsLW4pLHQubGluZVRvKGkscik7Zm9yKHZhciBvPTE7bzw1Oysrbyl7dmFyIGE9T2sqby81LHM9TWF0aC5jb3MoYSksbD1NYXRoLnNpbihhKTt0LmxpbmVUbyhsKm4sLXMqbiksdC5saW5lVG8ocyppLWwqcixsKmkrcypyKX10LmNsb3NlUGF0aCgpfX0seEw9e2RyYXc6ZnVuY3Rpb24odCxlKXt2YXIgbj1NYXRoLnNxcnQoZSksaT0tbi8yO3QucmVjdChpLGksbixuKX19LHdMPU1hdGguc3FydCgzKSxTTD17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciBuPS1NYXRoLnNxcnQoZS8oMyp3TCkpO3QubW92ZVRvKDAsMipuKSx0LmxpbmVUbygtd0wqbiwtbiksdC5saW5lVG8od0wqbiwtbiksdC5jbG9zZVBhdGgoKX19LE1MPS0uNSxFTD1NYXRoLnNxcnQoMykvMixUTD0xL01hdGguc3FydCgxMiksQ0w9MyooVEwvMisxKSxBTD17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciBuPU1hdGguc3FydChlL0NMKSxpPW4vMixyPW4qVEwsbz1pLGE9bipUTCtuLHM9LW8sbD1hO3QubW92ZVRvKGksciksdC5saW5lVG8obyxhKSx0LmxpbmVUbyhzLGwpLHQubGluZVRvKE1MKmktRUwqcixFTCppK01MKnIpLHQubGluZVRvKE1MKm8tRUwqYSxFTCpvK01MKmEpLHQubGluZVRvKE1MKnMtRUwqbCxFTCpzK01MKmwpLHQubGluZVRvKE1MKmkrRUwqcixNTCpyLUVMKmkpLHQubGluZVRvKE1MKm8rRUwqYSxNTCphLUVMKm8pLHQubGluZVRvKE1MKnMrRUwqbCxNTCpsLUVMKnMpLHQuY2xvc2VQYXRoKCl9fSxrTD1bZEwscEwsZ0wseEwsYkwsU0wsQUxdO2Z1bmN0aW9uIExMKCl7fWZ1bmN0aW9uIFBMKHQsZSxuKXt0Ll9jb250ZXh0LmJlemllckN1cnZlVG8oKDIqdC5feDArdC5feDEpLzMsKDIqdC5feTArdC5feTEpLzMsKHQuX3gwKzIqdC5feDEpLzMsKHQuX3kwKzIqdC5feTEpLzMsKHQuX3gwKzQqdC5feDErZSkvNiwodC5feTArNCp0Ll95MStuKS82KX1mdW5jdGlvbiBOTCh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gSUwodCl7cmV0dXJuIG5ldyBOTCh0KX1mdW5jdGlvbiBPTCh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gUkwodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIHpMKHQsZSl7dGhpcy5fYmFzaXM9bmV3IE5MKHQpLHRoaXMuX2JldGE9ZX1OTC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAzOlBMKHRoaXMsdGhpcy5feDEsdGhpcy5feTEpO2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSl9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2NvbnRleHQubGluZVRvKCg1KnRoaXMuX3gwK3RoaXMuX3gxKS82LCg1KnRoaXMuX3kwK3RoaXMuX3kxKS82KTtkZWZhdWx0OlBMKHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWV9fSxPTC5wcm90b3R5cGU9e2FyZWFTdGFydDpMTCxhcmVhRW5kOkxMLGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAyOnRoaXMuX2NvbnRleHQubW92ZVRvKCh0aGlzLl94MisyKnRoaXMuX3gzKS8zLCh0aGlzLl95MisyKnRoaXMuX3kzKS8zKSx0aGlzLl9jb250ZXh0LmxpbmVUbygodGhpcy5feDMrMip0aGlzLl94MikvMywodGhpcy5feTMrMip0aGlzLl95MikvMyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Mix0aGlzLl95MiksdGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCl9fSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gyPXQsdGhpcy5feTI9ZTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl94Mz10LHRoaXMuX3kzPWU7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDQ9dCx0aGlzLl95ND1lLHRoaXMuX2NvbnRleHQubW92ZVRvKCh0aGlzLl94MCs0KnRoaXMuX3gxK3QpLzYsKHRoaXMuX3kwKzQqdGhpcy5feTErZSkvNik7YnJlYWs7ZGVmYXVsdDpQTCh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1lfX0sUkwucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjM9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7dmFyIG49KHRoaXMuX3gwKzQqdGhpcy5feDErdCkvNixpPSh0aGlzLl95MCs0KnRoaXMuX3kxK2UpLzY7dGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhuLGkpOnRoaXMuX2NvbnRleHQubW92ZVRvKG4saSk7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpQTCh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1lfX0sekwucHJvdG90eXBlPXtsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PVtdLHRoaXMuX3k9W10sdGhpcy5fYmFzaXMubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl94LGU9dGhpcy5feSxuPXQubGVuZ3RoLTE7aWYobj4wKWZvcih2YXIgaSxyPXRbMF0sbz1lWzBdLGE9dFtuXS1yLHM9ZVtuXS1vLGw9LTE7KytsPD1uOyl0aGlzLl9iYXNpcy5wb2ludCh0aGlzLl9iZXRhKnRbbF0rKDEtdGhpcy5fYmV0YSkqKHIrKGk9bC9uKSphKSx0aGlzLl9iZXRhKmVbbF0rKDEtdGhpcy5fYmV0YSkqKG8raSpzKSk7dGhpcy5feD10aGlzLl95PW51bGwsdGhpcy5fYmFzaXMubGluZUVuZCgpfSxwb2ludDpmdW5jdGlvbih0LGUpe3RoaXMuX3gucHVzaCgrdCksdGhpcy5feS5wdXNoKCtlKX19O3ZhciBETD0oZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiAxPT09ZT9uZXcgTkwodCk6bmV3IHpMKHQsZSl9cmV0dXJuIG4uYmV0YT1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LG59KSguODUpO2Z1bmN0aW9uIEJMKHQsZSxuKXt0Ll9jb250ZXh0LmJlemllckN1cnZlVG8odC5feDErdC5fayoodC5feDItdC5feDApLHQuX3kxK3QuX2sqKHQuX3kyLXQuX3kwKSx0Ll94Mit0Ll9rKih0Ll94MS1lKSx0Ll95Mit0Ll9rKih0Ll95MS1uKSx0Ll94Mix0Ll95Mil9ZnVuY3Rpb24gSEwodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1lKS82fUhMLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzpCTCh0aGlzLHRoaXMuX3gxLHRoaXMuX3kxKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5feDE9dCx0aGlzLl95MT1lO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO2RlZmF1bHQ6QkwodGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19O3ZhciBGTD0oZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBuZXcgSEwodCxlKX1yZXR1cm4gbi50ZW5zaW9uPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0pKDApO2Z1bmN0aW9uIFZMKHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2s9KDEtZSkvNn1WTC5wcm90b3R5cGU9e2FyZWFTdGFydDpMTCxhcmVhRW5kOkxMLGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KX19LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDM9dCx0aGlzLl95Mz1lO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3g0PXQsdGhpcy5feTQ9ZSk7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDU9dCx0aGlzLl95NT1lO2JyZWFrO2RlZmF1bHQ6QkwodGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19O3ZhciBVTD0oZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBuZXcgVkwodCxlKX1yZXR1cm4gbi50ZW5zaW9uPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0pKDApO2Z1bmN0aW9uIGpMKHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2s9KDEtZSkvNn1qTC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMz09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpCTCh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07dmFyIEdMPShmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIG5ldyBqTCh0LGUpfXJldHVybiBuLnRlbnNpb249ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSkoMCk7ZnVuY3Rpb24gV0wodCxlLG4pe3ZhciBpPXQuX3gxLHI9dC5feTEsbz10Ll94MixhPXQuX3kyO2lmKHQuX2wwMV9hPlBrKXt2YXIgcz0yKnQuX2wwMV8yYSszKnQuX2wwMV9hKnQuX2wxMl9hK3QuX2wxMl8yYSxsPTMqdC5fbDAxX2EqKHQuX2wwMV9hK3QuX2wxMl9hKTtpPShpKnMtdC5feDAqdC5fbDEyXzJhK3QuX3gyKnQuX2wwMV8yYSkvbCxyPShyKnMtdC5feTAqdC5fbDEyXzJhK3QuX3kyKnQuX2wwMV8yYSkvbH1pZih0Ll9sMjNfYT5Qayl7dmFyIGM9Mip0Ll9sMjNfMmErMyp0Ll9sMjNfYSp0Ll9sMTJfYSt0Ll9sMTJfMmEsdT0zKnQuX2wyM19hKih0Ll9sMjNfYSt0Ll9sMTJfYSk7bz0obypjK3QuX3gxKnQuX2wyM18yYS1lKnQuX2wxMl8yYSkvdSxhPShhKmMrdC5feTEqdC5fbDIzXzJhLW4qdC5fbDEyXzJhKS91fXQuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhpLHIsbyxhLHQuX3gyLHQuX3kyKX1mdW5jdGlvbiBxTCh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9hbHBoYT1lfXFMLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gyLHRoaXMuX3kyKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7aWYodD0rdCxlPStlLHRoaXMuX3BvaW50KXt2YXIgbj10aGlzLl94Mi10LGk9dGhpcy5feTItZTt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KG4qbitpKmksdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO2RlZmF1bHQ6V0wodGhpcyx0LGUpfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIgWUw9KGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gZT9uZXcgcUwodCxlKTpuZXcgSEwodCwwKX1yZXR1cm4gbi5hbHBoYT1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LG59KSguNSk7ZnVuY3Rpb24gWEwodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fYWxwaGE9ZX1YTC5wcm90b3R5cGU9e2FyZWFTdGFydDpMTCxhcmVhRW5kOkxMLGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KX19LHBvaW50OmZ1bmN0aW9uKHQsZSl7aWYodD0rdCxlPStlLHRoaXMuX3BvaW50KXt2YXIgbj10aGlzLl94Mi10LGk9dGhpcy5feTItZTt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KG4qbitpKmksdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gzPXQsdGhpcy5feTM9ZTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94ND10LHRoaXMuX3k0PWUpO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g1PXQsdGhpcy5feTU9ZTticmVhaztkZWZhdWx0OldMKHRoaXMsdCxlKX10aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07dmFyICRMPShmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIGU/bmV3IFhMKHQsZSk6bmV3IFZMKHQsMCl9cmV0dXJuIG4uYWxwaGE9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSkoLjUpO2Z1bmN0aW9uIEtMKHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2FscGhhPWV9S0wucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjM9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7aWYodD0rdCxlPStlLHRoaXMuX3BvaW50KXt2YXIgbj10aGlzLl94Mi10LGk9dGhpcy5feTItZTt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KG4qbitpKmksdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0OldMKHRoaXMsdCxlKX10aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07dmFyIFpMPShmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIGU/bmV3IEtMKHQsZSk6bmV3IGpMKHQsMCl9cmV0dXJuIG4uYWxwaGE9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSkoLjUpO2Z1bmN0aW9uIEpMKHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBRTCh0KXtyZXR1cm4gdDwwPy0xOjF9ZnVuY3Rpb24gdFAodCxlLG4pe3ZhciBpPXQuX3gxLXQuX3gwLHI9ZS10Ll94MSxvPSh0Ll95MS10Ll95MCkvKGl8fHI8MCYmLTApLGE9KG4tdC5feTEpLyhyfHxpPDAmJi0wKSxzPShvKnIrYSppKS8oaStyKTtyZXR1cm4oUUwobykrUUwoYSkpKk1hdGgubWluKE1hdGguYWJzKG8pLE1hdGguYWJzKGEpLC41Kk1hdGguYWJzKHMpKXx8MH1mdW5jdGlvbiBlUCh0LGUpe3ZhciBuPXQuX3gxLXQuX3gwO3JldHVybiBuPygzKih0Ll95MS10Ll95MCkvbi1lKS8yOmV9ZnVuY3Rpb24gblAodCxlLG4pe3ZhciBpPXQuX3gwLHI9dC5feDEsbz10Ll95MSxhPShyLWkpLzM7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKGkrYSx0Ll95MCthKmUsci1hLG8tYSpuLHIsbyl9ZnVuY3Rpb24gaVAodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIHJQKHQpe3RoaXMuX2NvbnRleHQ9bmV3IG9QKHQpfWZ1bmN0aW9uIG9QKHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBhUCh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gc1AodCl7dmFyIGUsbixpPXQubGVuZ3RoLTEscj1uZXcgQXJyYXkoaSksbz1uZXcgQXJyYXkoaSksYT1uZXcgQXJyYXkoaSk7Zm9yKHJbMF09MCxvWzBdPTIsYVswXT10WzBdKzIqdFsxXSxlPTE7ZTxpLTE7KytlKXJbZV09MSxvW2VdPTQsYVtlXT00KnRbZV0rMip0W2UrMV07Zm9yKHJbaS0xXT0yLG9baS0xXT03LGFbaS0xXT04KnRbaS0xXSt0W2ldLGU9MTtlPGk7KytlKW9bZV0tPW49cltlXS9vW2UtMV0sYVtlXS09biphW2UtMV07Zm9yKHJbaS0xXT1hW2ktMV0vb1tpLTFdLGU9aS0yO2U+PTA7LS1lKXJbZV09KGFbZV0tcltlKzFdKS9vW2VdO2ZvcihvW2ktMV09KHRbaV0rcltpLTFdKS8yLGU9MDtlPGktMTsrK2Upb1tlXT0yKnRbZSsxXS1yW2UrMV07cmV0dXJuW3Isb119ZnVuY3Rpb24gbFAodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fdD1lfWZ1bmN0aW9uIGNQKHQsZSl7aWYoKHI9dC5sZW5ndGgpPjEpZm9yKHZhciBuLGkscixvPTEsYT10W2VbMF1dLHM9YS5sZW5ndGg7bzxyOysrbylmb3IoaT1hLGE9dFtlW29dXSxuPTA7bjxzOysrbilhW25dWzFdKz1hW25dWzBdPWlzTmFOKGlbbl1bMV0pP2lbbl1bMF06aVtuXVsxXX1mdW5jdGlvbiB1UCh0KXtmb3IodmFyIGU9dC5sZW5ndGgsbj1uZXcgQXJyYXkoZSk7LS1lPj0wOyluW2VdPWU7cmV0dXJuIG59ZnVuY3Rpb24gaFAodCxlKXtyZXR1cm4gdFtlXX1mdW5jdGlvbiBkUCh0KXt2YXIgZT10Lm1hcChwUCk7cmV0dXJuIHVQKHQpLnNvcnQoKGZ1bmN0aW9uKHQsbil7cmV0dXJuIGVbdF0tZVtuXX0pKX1mdW5jdGlvbiBwUCh0KXtmb3IodmFyIGUsbj0tMSxpPTAscj10Lmxlbmd0aCxvPS0xLzA7KytuPHI7KShlPSt0W25dWzFdKT5vJiYobz1lLGk9bik7cmV0dXJuIGl9ZnVuY3Rpb24gZlAodCl7dmFyIGU9dC5tYXAobVApO3JldHVybiB1UCh0KS5zb3J0KChmdW5jdGlvbih0LG4pe3JldHVybiBlW3RdLWVbbl19KSl9ZnVuY3Rpb24gbVAodCl7Zm9yKHZhciBlLG49MCxpPS0xLHI9dC5sZW5ndGg7KytpPHI7KShlPSt0W2ldWzFdKSYmKG4rPWUpO3JldHVybiBufWZ1bmN0aW9uIGdQKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBfUCh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiB5UCh0KXtyZXR1cm4gdFsxXX1mdW5jdGlvbiB2UCgpe3RoaXMuXz1udWxsfWZ1bmN0aW9uIGJQKHQpe3QuVT10LkM9dC5MPXQuUj10LlA9dC5OPW51bGx9ZnVuY3Rpb24geFAodCxlKXt2YXIgbj1lLGk9ZS5SLHI9bi5VO3I/ci5MPT09bj9yLkw9aTpyLlI9aTp0Ll89aSxpLlU9cixuLlU9aSxuLlI9aS5MLG4uUiYmKG4uUi5VPW4pLGkuTD1ufWZ1bmN0aW9uIHdQKHQsZSl7dmFyIG49ZSxpPWUuTCxyPW4uVTtyP3IuTD09PW4/ci5MPWk6ci5SPWk6dC5fPWksaS5VPXIsbi5VPWksbi5MPWkuUixuLkwmJihuLkwuVT1uKSxpLlI9bn1mdW5jdGlvbiBTUCh0KXtmb3IoO3QuTDspdD10Lkw7cmV0dXJuIHR9ZnVuY3Rpb24gTVAodCxlLG4saSl7dmFyIHI9W251bGwsbnVsbF0sbz1YUC5wdXNoKHIpLTE7cmV0dXJuIHIubGVmdD10LHIucmlnaHQ9ZSxuJiZUUChyLHQsZSxuKSxpJiZUUChyLGUsdCxpKSxxUFt0LmluZGV4XS5oYWxmZWRnZXMucHVzaChvKSxxUFtlLmluZGV4XS5oYWxmZWRnZXMucHVzaChvKSxyfWZ1bmN0aW9uIEVQKHQsZSxuKXt2YXIgaT1bZSxuXTtyZXR1cm4gaS5sZWZ0PXQsaX1mdW5jdGlvbiBUUCh0LGUsbixpKXt0WzBdfHx0WzFdP3QubGVmdD09PW4/dFsxXT1pOnRbMF09aToodFswXT1pLHQubGVmdD1lLHQucmlnaHQ9bil9ZnVuY3Rpb24gQ1AodCxlLG4saSxyKXt2YXIgbyxhPXRbMF0scz10WzFdLGw9YVswXSxjPWFbMV0sdT0wLGg9MSxkPXNbMF0tbCxwPXNbMV0tYztpZihvPWUtbCxkfHwhKG8+MCkpe2lmKG8vPWQsZDwwKXtpZihvPHUpcmV0dXJuO288aCYmKGg9byl9ZWxzZSBpZihkPjApe2lmKG8+aClyZXR1cm47bz51JiYodT1vKX1pZihvPWktbCxkfHwhKG88MCkpe2lmKG8vPWQsZDwwKXtpZihvPmgpcmV0dXJuO28+dSYmKHU9byl9ZWxzZSBpZihkPjApe2lmKG88dSlyZXR1cm47bzxoJiYoaD1vKX1pZihvPW4tYyxwfHwhKG8+MCkpe2lmKG8vPXAscDwwKXtpZihvPHUpcmV0dXJuO288aCYmKGg9byl9ZWxzZSBpZihwPjApe2lmKG8+aClyZXR1cm47bz51JiYodT1vKX1pZihvPXItYyxwfHwhKG88MCkpe2lmKG8vPXAscDwwKXtpZihvPmgpcmV0dXJuO28+dSYmKHU9byl9ZWxzZSBpZihwPjApe2lmKG88dSlyZXR1cm47bzxoJiYoaD1vKX1yZXR1cm4hKHU+MHx8aDwxKXx8KHU+MCYmKHRbMF09W2wrdSpkLGMrdSpwXSksaDwxJiYodFsxXT1bbCtoKmQsYytoKnBdKSwhMCl9fX19fWZ1bmN0aW9uIEFQKHQsZSxuLGkscil7dmFyIG89dFsxXTtpZihvKXJldHVybiEwO3ZhciBhLHMsbD10WzBdLGM9dC5sZWZ0LHU9dC5yaWdodCxoPWNbMF0sZD1jWzFdLHA9dVswXSxmPXVbMV0sbT0oaCtwKS8yO2lmKGY9PT1kKXtpZihtPGV8fG0+PWkpcmV0dXJuO2lmKGg+cCl7aWYobCl7aWYobFsxXT49cilyZXR1cm59ZWxzZSBsPVttLG5dO289W20scl19ZWxzZXtpZihsKXtpZihsWzFdPG4pcmV0dXJufWVsc2UgbD1bbSxyXTtvPVttLG5dfX1lbHNlIGlmKHM9KGQrZikvMi0oYT0oaC1wKS8oZi1kKSkqbSxhPC0xfHxhPjEpaWYoaD5wKXtpZihsKXtpZihsWzFdPj1yKXJldHVybn1lbHNlIGw9WyhuLXMpL2Esbl07bz1bKHItcykvYSxyXX1lbHNle2lmKGwpe2lmKGxbMV08bilyZXR1cm59ZWxzZSBsPVsoci1zKS9hLHJdO289WyhuLXMpL2Esbl19ZWxzZSBpZihkPGYpe2lmKGwpe2lmKGxbMF0+PWkpcmV0dXJufWVsc2UgbD1bZSxhKmUrc107bz1baSxhKmkrc119ZWxzZXtpZihsKXtpZihsWzBdPGUpcmV0dXJufWVsc2UgbD1baSxhKmkrc107bz1bZSxhKmUrc119cmV0dXJuIHRbMF09bCx0WzFdPW8sITB9ZnVuY3Rpb24ga1AodCxlKXt2YXIgbj10LnNpdGUsaT1lLmxlZnQscj1lLnJpZ2h0O3JldHVybiBuPT09ciYmKHI9aSxpPW4pLHI/TWF0aC5hdGFuMihyWzFdLWlbMV0sclswXS1pWzBdKToobj09PWk/KGk9ZVsxXSxyPWVbMF0pOihpPWVbMF0scj1lWzFdKSxNYXRoLmF0YW4yKGlbMF0tclswXSxyWzFdLWlbMV0pKX1mdW5jdGlvbiBMUCh0LGUpe3JldHVybiBlWysoZS5sZWZ0IT09dC5zaXRlKV19ZnVuY3Rpb24gUFAodCxlKXtyZXR1cm4gZVsrKGUubGVmdD09PXQuc2l0ZSldfUpMLnByb3RvdHlwZT17YXJlYVN0YXJ0OkxMLGFyZWFFbmQ6TEwsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX3BvaW50JiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpfSxwb2ludDpmdW5jdGlvbih0LGUpe3Q9K3QsZT0rZSx0aGlzLl9wb2ludD90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOih0aGlzLl9wb2ludD0xLHRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSkpfX0saVAucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5fdDA9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSk7YnJlYWs7Y2FzZSAzOm5QKHRoaXMsdGhpcy5fdDAsZVAodGhpcyx0aGlzLl90MCkpfSh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXt2YXIgbj1OYU47aWYoZT0rZSwodD0rdCkhPT10aGlzLl94MXx8ZSE9PXRoaXMuX3kxKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLG5QKHRoaXMsZVAodGhpcyxuPXRQKHRoaXMsdCxlKSksbik7YnJlYWs7ZGVmYXVsdDpuUCh0aGlzLHRoaXMuX3QwLG49dFAodGhpcyx0LGUpKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWUsdGhpcy5fdDA9bn19fSwoclAucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoaVAucHJvdG90eXBlKSkucG9pbnQ9ZnVuY3Rpb24odCxlKXtpUC5wcm90b3R5cGUucG9pbnQuY2FsbCh0aGlzLGUsdCl9LG9QLnByb3RvdHlwZT17bW92ZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7dGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKX0sbGluZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbih0LGUsbixpLHIsbyl7dGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKGUsdCxpLG4sbyxyKX19LGFQLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9W10sdGhpcy5feT1bXX0sbGluZUVuZDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3gsZT10aGlzLl95LG49dC5sZW5ndGg7aWYobilpZih0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRbMF0sZVswXSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odFswXSxlWzBdKSwyPT09bil0aGlzLl9jb250ZXh0LmxpbmVUbyh0WzFdLGVbMV0pO2Vsc2UgZm9yKHZhciBpPXNQKHQpLHI9c1AoZSksbz0wLGE9MTthPG47KytvLCsrYSl0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8oaVswXVtvXSxyWzBdW29dLGlbMV1bb10sclsxXVtvXSx0W2FdLGVbYV0pOyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PW4pJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lLHRoaXMuX3g9dGhpcy5feT1udWxsfSxwb2ludDpmdW5jdGlvbih0LGUpe3RoaXMuX3gucHVzaCgrdCksdGhpcy5feS5wdXNoKCtlKX19LGxQLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9dGhpcy5feT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpezA8dGhpcy5fdCYmdGhpcy5fdDwxJiYyPT09dGhpcy5fcG9pbnQmJnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsdGhpcy5feSksKHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU+PTAmJih0aGlzLl90PTEtdGhpcy5fdCx0aGlzLl9saW5lPTEtdGhpcy5fbGluZSl9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDppZih0aGlzLl90PD0wKXRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsZSksdGhpcy5fY29udGV4dC5saW5lVG8odCxlKTtlbHNle3ZhciBuPXRoaXMuX3gqKDEtdGhpcy5fdCkrdCp0aGlzLl90O3RoaXMuX2NvbnRleHQubGluZVRvKG4sdGhpcy5feSksdGhpcy5fY29udGV4dC5saW5lVG8obixlKX19dGhpcy5feD10LHRoaXMuX3k9ZX19LHZQLnByb3RvdHlwZT17Y29uc3RydWN0b3I6dlAsaW5zZXJ0OmZ1bmN0aW9uKHQsZSl7dmFyIG4saSxyO2lmKHQpe2lmKGUuUD10LGUuTj10Lk4sdC5OJiYodC5OLlA9ZSksdC5OPWUsdC5SKXtmb3IodD10LlI7dC5MOyl0PXQuTDt0Lkw9ZX1lbHNlIHQuUj1lO249dH1lbHNlIHRoaXMuXz8odD1TUCh0aGlzLl8pLGUuUD1udWxsLGUuTj10LHQuUD10Lkw9ZSxuPXQpOihlLlA9ZS5OPW51bGwsdGhpcy5fPWUsbj1udWxsKTtmb3IoZS5MPWUuUj1udWxsLGUuVT1uLGUuQz0hMCx0PWU7biYmbi5DOyluPT09KGk9bi5VKS5MPyhyPWkuUikmJnIuQz8obi5DPXIuQz0hMSxpLkM9ITAsdD1pKToodD09PW4uUiYmKHhQKHRoaXMsbiksbj0odD1uKS5VKSxuLkM9ITEsaS5DPSEwLHdQKHRoaXMsaSkpOihyPWkuTCkmJnIuQz8obi5DPXIuQz0hMSxpLkM9ITAsdD1pKToodD09PW4uTCYmKHdQKHRoaXMsbiksbj0odD1uKS5VKSxuLkM9ITEsaS5DPSEwLHhQKHRoaXMsaSkpLG49dC5VO3RoaXMuXy5DPSExfSxyZW1vdmU6ZnVuY3Rpb24odCl7dC5OJiYodC5OLlA9dC5QKSx0LlAmJih0LlAuTj10Lk4pLHQuTj10LlA9bnVsbDt2YXIgZSxuLGkscj10LlUsbz10LkwsYT10LlI7aWYobj1vP2E/U1AoYSk6bzphLHI/ci5MPT09dD9yLkw9bjpyLlI9bjp0aGlzLl89bixvJiZhPyhpPW4uQyxuLkM9dC5DLG4uTD1vLG8uVT1uLG4hPT1hPyhyPW4uVSxuLlU9dC5VLHIuTD10PW4uUixuLlI9YSxhLlU9bik6KG4uVT1yLHI9bix0PW4uUikpOihpPXQuQyx0PW4pLHQmJih0LlU9ciksIWkpaWYodCYmdC5DKXQuQz0hMTtlbHNle2Rve2lmKHQ9PT10aGlzLl8pYnJlYWs7aWYodD09PXIuTCl7aWYoKGU9ci5SKS5DJiYoZS5DPSExLHIuQz0hMCx4UCh0aGlzLHIpLGU9ci5SKSxlLkwmJmUuTC5DfHxlLlImJmUuUi5DKXtlLlImJmUuUi5DfHwoZS5MLkM9ITEsZS5DPSEwLHdQKHRoaXMsZSksZT1yLlIpLGUuQz1yLkMsci5DPWUuUi5DPSExLHhQKHRoaXMsciksdD10aGlzLl87YnJlYWt9fWVsc2UgaWYoKGU9ci5MKS5DJiYoZS5DPSExLHIuQz0hMCx3UCh0aGlzLHIpLGU9ci5MKSxlLkwmJmUuTC5DfHxlLlImJmUuUi5DKXtlLkwmJmUuTC5DfHwoZS5SLkM9ITEsZS5DPSEwLHhQKHRoaXMsZSksZT1yLkwpLGUuQz1yLkMsci5DPWUuTC5DPSExLHdQKHRoaXMsciksdD10aGlzLl87YnJlYWt9ZS5DPSEwLHQ9cixyPXIuVX13aGlsZSghdC5DKTt0JiYodC5DPSExKX19fTt2YXIgTlAsSVA9W107ZnVuY3Rpb24gT1AoKXtiUCh0aGlzKSx0aGlzLng9dGhpcy55PXRoaXMuYXJjPXRoaXMuc2l0ZT10aGlzLmN5PW51bGx9ZnVuY3Rpb24gUlAodCl7dmFyIGU9dC5QLG49dC5OO2lmKGUmJm4pe3ZhciBpPWUuc2l0ZSxyPXQuc2l0ZSxvPW4uc2l0ZTtpZihpIT09byl7dmFyIGE9clswXSxzPXJbMV0sbD1pWzBdLWEsYz1pWzFdLXMsdT1vWzBdLWEsaD1vWzFdLXMsZD0yKihsKmgtYyp1KTtpZighKGQ+PS1LUCkpe3ZhciBwPWwqbCtjKmMsZj11KnUraCpoLG09KGgqcC1jKmYpL2QsZz0obCpmLXUqcCkvZCxfPUlQLnBvcCgpfHxuZXcgT1A7Xy5hcmM9dCxfLnNpdGU9cixfLng9bSthLF8ueT0oXy5jeT1nK3MpK01hdGguc3FydChtKm0rZypnKSx0LmNpcmNsZT1fO2Zvcih2YXIgeT1udWxsLHY9WVAuXzt2OylpZihfLnk8di55fHxfLnk9PT12LnkmJl8ueDw9di54KXtpZighdi5MKXt5PXYuUDticmVha312PXYuTH1lbHNle2lmKCF2LlIpe3k9djticmVha312PXYuUn1ZUC5pbnNlcnQoeSxfKSx5fHwoTlA9Xyl9fX19ZnVuY3Rpb24gelAodCl7dmFyIGU9dC5jaXJjbGU7ZSYmKGUuUHx8KE5QPWUuTiksWVAucmVtb3ZlKGUpLElQLnB1c2goZSksYlAoZSksdC5jaXJjbGU9bnVsbCl9dmFyIERQPVtdO2Z1bmN0aW9uIEJQKCl7YlAodGhpcyksdGhpcy5lZGdlPXRoaXMuc2l0ZT10aGlzLmNpcmNsZT1udWxsfWZ1bmN0aW9uIEhQKHQpe3ZhciBlPURQLnBvcCgpfHxuZXcgQlA7cmV0dXJuIGUuc2l0ZT10LGV9ZnVuY3Rpb24gRlAodCl7elAodCksV1AucmVtb3ZlKHQpLERQLnB1c2godCksYlAodCl9ZnVuY3Rpb24gVlAodCl7dmFyIGU9dC5jaXJjbGUsbj1lLngsaT1lLmN5LHI9W24saV0sbz10LlAsYT10Lk4scz1bdF07RlAodCk7Zm9yKHZhciBsPW87bC5jaXJjbGUmJk1hdGguYWJzKG4tbC5jaXJjbGUueCk8JFAmJk1hdGguYWJzKGktbC5jaXJjbGUuY3kpPCRQOylvPWwuUCxzLnVuc2hpZnQobCksRlAobCksbD1vO3MudW5zaGlmdChsKSx6UChsKTtmb3IodmFyIGM9YTtjLmNpcmNsZSYmTWF0aC5hYnMobi1jLmNpcmNsZS54KTwkUCYmTWF0aC5hYnMoaS1jLmNpcmNsZS5jeSk8JFA7KWE9Yy5OLHMucHVzaChjKSxGUChjKSxjPWE7cy5wdXNoKGMpLHpQKGMpO3ZhciB1LGg9cy5sZW5ndGg7Zm9yKHU9MTt1PGg7Kyt1KVRQKChjPXNbdV0pLmVkZ2UsKGw9c1t1LTFdKS5zaXRlLGMuc2l0ZSxyKTsoYz1zW2gtMV0pLmVkZ2U9TVAoKGw9c1swXSkuc2l0ZSxjLnNpdGUsbnVsbCxyKSxSUChsKSxSUChjKX1mdW5jdGlvbiBVUCh0KXtmb3IodmFyIGUsbixpLHIsbz10WzBdLGE9dFsxXSxzPVdQLl87czspaWYoKGk9alAocyxhKS1vKT4kUClzPXMuTDtlbHNle2lmKCEoKHI9by1HUChzLGEpKT4kUCkpe2k+LSRQPyhlPXMuUCxuPXMpOnI+LSRQPyhlPXMsbj1zLk4pOmU9bj1zO2JyZWFrfWlmKCFzLlIpe2U9czticmVha31zPXMuUn0hKGZ1bmN0aW9uIGwodCl7cVBbdC5pbmRleF09e3NpdGU6dCxoYWxmZWRnZXM6W119fSkodCk7dmFyIGM9SFAodCk7aWYoV1AuaW5zZXJ0KGUsYyksZXx8bil7aWYoZT09PW4pcmV0dXJuIHpQKGUpLG49SFAoZS5zaXRlKSxXUC5pbnNlcnQoYyxuKSxjLmVkZ2U9bi5lZGdlPU1QKGUuc2l0ZSxjLnNpdGUpLFJQKGUpLHZvaWQgUlAobik7aWYobil7elAoZSkselAobik7dmFyIHU9ZS5zaXRlLGg9dVswXSxkPXVbMV0scD10WzBdLWgsZj10WzFdLWQsbT1uLnNpdGUsZz1tWzBdLWgsXz1tWzFdLWQseT0yKihwKl8tZipnKSx2PXAqcCtmKmYsYj1nKmcrXypfLHg9WyhfKnYtZipiKS95K2gsKHAqYi1nKnYpL3krZF07VFAobi5lZGdlLHUsbSx4KSxjLmVkZ2U9TVAodSx0LG51bGwseCksbi5lZGdlPU1QKHQsbSxudWxsLHgpLFJQKGUpLFJQKG4pfWVsc2UgYy5lZGdlPU1QKGUuc2l0ZSxjLnNpdGUpfX1mdW5jdGlvbiBqUCh0LGUpe3ZhciBuPXQuc2l0ZSxpPW5bMF0scj1uWzFdLG89ci1lO2lmKCFvKXJldHVybiBpO3ZhciBhPXQuUDtpZighYSlyZXR1cm4tMS8wO3ZhciBzPShuPWEuc2l0ZSlbMF0sbD1uWzFdLGM9bC1lO2lmKCFjKXJldHVybiBzO3ZhciB1PXMtaSxoPTEvby0xL2MsZD11L2M7cmV0dXJuIGg/KC1kK01hdGguc3FydChkKmQtMipoKih1KnUvKC0yKmMpLWwrYy8yK3Itby8yKSkpL2graTooaStzKS8yfWZ1bmN0aW9uIEdQKHQsZSl7dmFyIG49dC5OO2lmKG4pcmV0dXJuIGpQKG4sZSk7dmFyIGk9dC5zaXRlO3JldHVybiBpWzFdPT09ZT9pWzBdOjEvMH12YXIgV1AscVAsWVAsWFAsJFA9MWUtNixLUD0xZS0xMjtmdW5jdGlvbiBaUCh0LGUsbil7cmV0dXJuKHRbMF0tblswXSkqKGVbMV0tdFsxXSktKHRbMF0tZVswXSkqKG5bMV0tdFsxXSl9ZnVuY3Rpb24gSlAodCxlKXtyZXR1cm4gZVsxXS10WzFdfHxlWzBdLXRbMF19ZnVuY3Rpb24gUVAodCxlKXt2YXIgbixpLHIsbz10LnNvcnQoSlApLnBvcCgpO2ZvcihYUD1bXSxxUD1uZXcgQXJyYXkodC5sZW5ndGgpLFdQPW5ldyB2UCxZUD1uZXcgdlA7OylpZihyPU5QLG8mJighcnx8b1sxXTxyLnl8fG9bMV09PT1yLnkmJm9bMF08ci54KSlvWzBdPT09biYmb1sxXT09PWl8fChVUChvKSxuPW9bMF0saT1vWzFdKSxvPXQucG9wKCk7ZWxzZXtpZighcilicmVhaztWUChyLmFyYyl9aWYoKGZ1bmN0aW9uIGEoKXtmb3IodmFyIHQsZSxuLGkscj0wLG89cVAubGVuZ3RoO3I8bzsrK3IpaWYoKHQ9cVBbcl0pJiYoaT0oZT10LmhhbGZlZGdlcykubGVuZ3RoKSl7dmFyIGE9bmV3IEFycmF5KGkpLHM9bmV3IEFycmF5KGkpO2ZvcihuPTA7bjxpOysrbilhW25dPW4sc1tuXT1rUCh0LFhQW2Vbbl1dKTtmb3IoYS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiBzW2VdLXNbdF19KSksbj0wO248aTsrK24pc1tuXT1lW2Fbbl1dO2ZvcihuPTA7bjxpOysrbillW25dPXNbbl19fSkoKSxlKXt2YXIgcz0rZVswXVswXSxsPStlWzBdWzFdLGM9K2VbMV1bMF0sdT0rZVsxXVsxXTshKGZ1bmN0aW9uIGgodCxlLG4saSl7Zm9yKHZhciByLG89WFAubGVuZ3RoO28tLTspQVAocj1YUFtvXSx0LGUsbixpKSYmQ1Aocix0LGUsbixpKSYmKE1hdGguYWJzKHJbMF1bMF0tclsxXVswXSk+JFB8fE1hdGguYWJzKHJbMF1bMV0tclsxXVsxXSk+JFApfHxkZWxldGUgWFBbb119KShzLGwsYyx1KSwoZnVuY3Rpb24gZCh0LGUsbixpKXt2YXIgcixvLGEscyxsLGMsdSxoLGQscCxmLG0sZz1xUC5sZW5ndGgsXz0hMDtmb3Iocj0wO3I8ZzsrK3IpaWYobz1xUFtyXSl7Zm9yKGE9by5zaXRlLHM9KGw9by5oYWxmZWRnZXMpLmxlbmd0aDtzLS07KVhQW2xbc11dfHxsLnNwbGljZShzLDEpO2ZvcihzPTAsYz1sLmxlbmd0aDtzPGM7KWY9KHA9UFAobyxYUFtsW3NdXSkpWzBdLG09cFsxXSxoPSh1PUxQKG8sWFBbbFsrK3MlY11dKSlbMF0sZD11WzFdLChNYXRoLmFicyhmLWgpPiRQfHxNYXRoLmFicyhtLWQpPiRQKSYmKGwuc3BsaWNlKHMsMCxYUC5wdXNoKEVQKGEscCxNYXRoLmFicyhmLXQpPCRQJiZpLW0+JFA/W3QsTWF0aC5hYnMoaC10KTwkUD9kOmldOk1hdGguYWJzKG0taSk8JFAmJm4tZj4kUD9bTWF0aC5hYnMoZC1pKTwkUD9oOm4saV06TWF0aC5hYnMoZi1uKTwkUCYmbS1lPiRQP1tuLE1hdGguYWJzKGgtbik8JFA/ZDplXTpNYXRoLmFicyhtLWUpPCRQJiZmLXQ+JFA/W01hdGguYWJzKGQtZSk8JFA/aDp0LGVdOm51bGwpKS0xKSwrK2MpO2MmJihfPSExKX1pZihfKXt2YXIgeSx2LGIseD0xLzA7Zm9yKHI9MCxfPW51bGw7cjxnOysrcikobz1xUFtyXSkmJihiPSh5PShhPW8uc2l0ZSlbMF0tdCkqeSsodj1hWzFdLWUpKnYpPHgmJih4PWIsXz1vKTtpZihfKXt2YXIgdz1bdCxlXSxTPVt0LGldLE09W24saV0sRT1bbixlXTtfLmhhbGZlZGdlcy5wdXNoKFhQLnB1c2goRVAoYT1fLnNpdGUsdyxTKSktMSxYUC5wdXNoKEVQKGEsUyxNKSktMSxYUC5wdXNoKEVQKGEsTSxFKSktMSxYUC5wdXNoKEVQKGEsRSx3KSktMSl9fWZvcihyPTA7cjxnOysrcikobz1xUFtyXSkmJihvLmhhbGZlZGdlcy5sZW5ndGh8fGRlbGV0ZSBxUFtyXSl9KShzLGwsYyx1KX10aGlzLmVkZ2VzPVhQLHRoaXMuY2VsbHM9cVAsV1A9WVA9WFA9cVA9bnVsbH1mdW5jdGlvbiB0Tih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gZU4odCxlLG4pe3RoaXMudGFyZ2V0PXQsdGhpcy50eXBlPWUsdGhpcy50cmFuc2Zvcm09bn1mdW5jdGlvbiBuTih0LGUsbil7dGhpcy5rPXQsdGhpcy54PWUsdGhpcy55PW59UVAucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpRUCxwb2x5Z29uczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuZWRnZXM7cmV0dXJuIHRoaXMuY2VsbHMubWFwKChmdW5jdGlvbihlKXt2YXIgbj1lLmhhbGZlZGdlcy5tYXAoKGZ1bmN0aW9uKG4pe3JldHVybiBMUChlLHRbbl0pfSkpO3JldHVybiBuLmRhdGE9ZS5zaXRlLmRhdGEsbn0pKX0sdHJpYW5nbGVzOmZ1bmN0aW9uKCl7dmFyIHQ9W10sZT10aGlzLmVkZ2VzO3JldHVybiB0aGlzLmNlbGxzLmZvckVhY2goKGZ1bmN0aW9uKG4saSl7aWYobz0ocj1uLmhhbGZlZGdlcykubGVuZ3RoKWZvcih2YXIgcixvLGEscz1uLnNpdGUsbD0tMSxjPWVbcltvLTFdXSx1PWMubGVmdD09PXM/Yy5yaWdodDpjLmxlZnQ7KytsPG87KWE9dSx1PShjPWVbcltsXV0pLmxlZnQ9PT1zP2MucmlnaHQ6Yy5sZWZ0LGEmJnUmJmk8YS5pbmRleCYmaTx1LmluZGV4JiZaUChzLGEsdSk8MCYmdC5wdXNoKFtzLmRhdGEsYS5kYXRhLHUuZGF0YV0pfSkpLHR9LGxpbmtzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZXMuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC5yaWdodH0pKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybntzb3VyY2U6dC5sZWZ0LmRhdGEsdGFyZ2V0OnQucmlnaHQuZGF0YX19KSl9LGZpbmQ6ZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgaSxyLG89dGhpcyxhPW8uX2ZvdW5kfHwwLHM9by5jZWxscy5sZW5ndGg7IShyPW8uY2VsbHNbYV0pOylpZigrK2E+PXMpcmV0dXJuIG51bGw7dmFyIGw9dC1yLnNpdGVbMF0sYz1lLXIuc2l0ZVsxXSx1PWwqbCtjKmM7ZG97cj1vLmNlbGxzW2k9YV0sYT1udWxsLHIuaGFsZmVkZ2VzLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciBpPW8uZWRnZXNbbl0scz1pLmxlZnQ7aWYocyE9PXIuc2l0ZSYmc3x8KHM9aS5yaWdodCkpe3ZhciBsPXQtc1swXSxjPWUtc1sxXSxoPWwqbCtjKmM7aDx1JiYodT1oLGE9cy5pbmRleCl9fSkpfXdoaWxlKG51bGwhPT1hKTtyZXR1cm4gby5fZm91bmQ9aSxudWxsPT1ufHx1PD1uKm4/ci5zaXRlOm51bGx9fSxuTi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOm5OLHNjYWxlOmZ1bmN0aW9uKHQpe3JldHVybiAxPT09dD90aGlzOm5ldyBuTih0aGlzLmsqdCx0aGlzLngsdGhpcy55KX0sdHJhbnNsYXRlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIDA9PT10JjA9PT1lP3RoaXM6bmV3IG5OKHRoaXMuayx0aGlzLngrdGhpcy5rKnQsdGhpcy55K3RoaXMuayplKX0sYXBwbHk6ZnVuY3Rpb24odCl7cmV0dXJuW3RbMF0qdGhpcy5rK3RoaXMueCx0WzFdKnRoaXMuayt0aGlzLnldfSxhcHBseVg6ZnVuY3Rpb24odCl7cmV0dXJuIHQqdGhpcy5rK3RoaXMueH0sYXBwbHlZOmZ1bmN0aW9uKHQpe3JldHVybiB0KnRoaXMuayt0aGlzLnl9LGludmVydDpmdW5jdGlvbih0KXtyZXR1cm5bKHRbMF0tdGhpcy54KS90aGlzLmssKHRbMV0tdGhpcy55KS90aGlzLmtdfSxpbnZlcnRYOmZ1bmN0aW9uKHQpe3JldHVybih0LXRoaXMueCkvdGhpcy5rfSxpbnZlcnRZOmZ1bmN0aW9uKHQpe3JldHVybih0LXRoaXMueSkvdGhpcy5rfSxyZXNjYWxlWDpmdW5jdGlvbih0KXtyZXR1cm4gdC5jb3B5KCkuZG9tYWluKHQucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLHRoaXMpLm1hcCh0LmludmVydCx0KSl9LHJlc2NhbGVZOmZ1bmN0aW9uKHQpe3JldHVybiB0LmNvcHkoKS5kb21haW4odC5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksdGhpcykubWFwKHQuaW52ZXJ0LHQpKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIikifX07dmFyIGlOPW5ldyBuTigxLDAsMCk7ZnVuY3Rpb24gck4odCl7Zm9yKDshdC5fX3pvb207KWlmKCEodD10LnBhcmVudE5vZGUpKXJldHVybiBpTjtyZXR1cm4gdC5fX3pvb219ZnVuY3Rpb24gb04oKXtjdS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBhTigpe2N1LnByZXZlbnREZWZhdWx0KCksY3Uuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gc04oKXtyZXR1cm4hY3UuY3RybEtleSYmIWN1LmJ1dHRvbn1mdW5jdGlvbiBsTigpe3ZhciB0PXRoaXM7cmV0dXJuIHQgaW5zdGFuY2VvZiBTVkdFbGVtZW50Pyh0PXQub3duZXJTVkdFbGVtZW50fHx0KS5oYXNBdHRyaWJ1dGUoInZpZXdCb3giKT9bWyh0PXQudmlld0JveC5iYXNlVmFsKS54LHQueV0sW3QueCt0LndpZHRoLHQueSt0LmhlaWdodF1dOltbMCwwXSxbdC53aWR0aC5iYXNlVmFsLnZhbHVlLHQuaGVpZ2h0LmJhc2VWYWwudmFsdWVdXTpbWzAsMF0sW3QuY2xpZW50V2lkdGgsdC5jbGllbnRIZWlnaHRdXX1mdW5jdGlvbiBjTigpe3JldHVybiB0aGlzLl9fem9vbXx8aU59ZnVuY3Rpb24gdU4oKXtyZXR1cm4tY3UuZGVsdGFZKigxPT09Y3UuZGVsdGFNb2RlPy4wNTpjdS5kZWx0YU1vZGU/MTouMDAyKX1mdW5jdGlvbiBoTigpe3JldHVybiBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHN8fCJvbnRvdWNoc3RhcnQiaW4gdGhpc31mdW5jdGlvbiBkTih0LGUsbil7dmFyIGk9dC5pbnZlcnRYKGVbMF1bMF0pLW5bMF1bMF0scj10LmludmVydFgoZVsxXVswXSktblsxXVswXSxvPXQuaW52ZXJ0WShlWzBdWzFdKS1uWzBdWzFdLGE9dC5pbnZlcnRZKGVbMV1bMV0pLW5bMV1bMV07cmV0dXJuIHQudHJhbnNsYXRlKHI+aT8oaStyKS8yOk1hdGgubWluKDAsaSl8fE1hdGgubWF4KDAsciksYT5vPyhvK2EpLzI6TWF0aC5taW4oMCxvKXx8TWF0aC5tYXgoMCxhKSl9ZnVuY3Rpb24gcE4oKXt2YXIgdCxlLG49c04saT1sTixyPWROLG89dU4sYT1oTixzPVswLDEvMF0sbD1bWy0xLzAsLTEvMF0sWzEvMCwxLzBdXSxjPTI1MCx1PXJwLGg9c2MoInN0YXJ0Iiwiem9vbSIsImVuZCIpLGQ9NTAwLHA9MDtmdW5jdGlvbiBmKHQpe3QucHJvcGVydHkoIl9fem9vbSIsY04pLm9uKCJ3aGVlbC56b29tIix4KS5vbigibW91c2Vkb3duLnpvb20iLHcpLm9uKCJkYmxjbGljay56b29tIixTKS5maWx0ZXIoYSkub24oInRvdWNoc3RhcnQuem9vbSIsTSkub24oInRvdWNobW92ZS56b29tIixFKS5vbigidG91Y2hlbmQuem9vbSB0b3VjaGNhbmNlbC56b29tIixUKS5zdHlsZSgidG91Y2gtYWN0aW9uIiwibm9uZSIpLnN0eWxlKCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3IiLCJyZ2JhKDAsMCwwLDApIil9ZnVuY3Rpb24gbSh0LGUpe3JldHVybihlPU1hdGgubWF4KHNbMF0sTWF0aC5taW4oc1sxXSxlKSkpPT09dC5rP3Q6bmV3IG5OKGUsdC54LHQueSl9ZnVuY3Rpb24gZyh0LGUsbil7dmFyIGk9ZVswXS1uWzBdKnQuayxyPWVbMV0tblsxXSp0Lms7cmV0dXJuIGk9PT10LngmJnI9PT10Lnk/dDpuZXcgbk4odC5rLGkscil9ZnVuY3Rpb24gXyh0KXtyZXR1cm5bKCt0WzBdWzBdKyArdFsxXVswXSkvMiwoK3RbMF1bMV0rICt0WzFdWzFdKS8yXX1mdW5jdGlvbiB5KHQsZSxuKXt0Lm9uKCJzdGFydC56b29tIiwoZnVuY3Rpb24oKXt2KHRoaXMsYXJndW1lbnRzKS5zdGFydCgpfSkpLm9uKCJpbnRlcnJ1cHQuem9vbSBlbmQuem9vbSIsKGZ1bmN0aW9uKCl7dih0aGlzLGFyZ3VtZW50cykuZW5kKCl9KSkudHdlZW4oInpvb20iLChmdW5jdGlvbigpe3ZhciB0PXRoaXMscj1hcmd1bWVudHMsbz12KHQsciksYT1pLmFwcGx5KHQscikscz1udWxsPT1uP18oYSk6ImZ1bmN0aW9uIj09dHlwZW9mIG4/bi5hcHBseSh0LHIpOm4sbD1NYXRoLm1heChhWzFdWzBdLWFbMF1bMF0sYVsxXVsxXS1hWzBdWzFdKSxjPXQuX196b29tLGg9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZS5hcHBseSh0LHIpOmUsZD11KGMuaW52ZXJ0KHMpLmNvbmNhdChsL2MuayksaC5pbnZlcnQocykuY29uY2F0KGwvaC5rKSk7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKDE9PT10KXQ9aDtlbHNle3ZhciBlPWQodCksbj1sL2VbMl07dD1uZXcgbk4obixzWzBdLWVbMF0qbixzWzFdLWVbMV0qbil9by56b29tKG51bGwsdCl9fSkpfWZ1bmN0aW9uIHYodCxlLG4pe3JldHVybiFuJiZ0Ll9fem9vbWluZ3x8bmV3IGIodCxlKX1mdW5jdGlvbiBiKHQsZSl7dGhpcy50aGF0PXQsdGhpcy5hcmdzPWUsdGhpcy5hY3RpdmU9MCx0aGlzLmV4dGVudD1pLmFwcGx5KHQsZSksdGhpcy50YXBzPTB9ZnVuY3Rpb24geCgpe2lmKG4uYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgdD12KHRoaXMsYXJndW1lbnRzKSxlPXRoaXMuX196b29tLGk9TWF0aC5tYXgoc1swXSxNYXRoLm1pbihzWzFdLGUuaypNYXRoLnBvdygyLG8uYXBwbHkodGhpcyxhcmd1bWVudHMpKSkpLGE9b2godGhpcyk7aWYodC53aGVlbCl0Lm1vdXNlWzBdWzBdPT09YVswXSYmdC5tb3VzZVswXVsxXT09PWFbMV18fCh0Lm1vdXNlWzFdPWUuaW52ZXJ0KHQubW91c2VbMF09YSkpLGNsZWFyVGltZW91dCh0LndoZWVsKTtlbHNle2lmKGUuaz09PWkpcmV0dXJuO3QubW91c2U9W2EsZS5pbnZlcnQoYSldLEZwKHRoaXMpLHQuc3RhcnQoKX1hTigpLHQud2hlZWw9c2V0VGltZW91dChjLDE1MCksdC56b29tKCJtb3VzZSIscihnKG0oZSxpKSx0Lm1vdXNlWzBdLHQubW91c2VbMV0pLHQuZXh0ZW50LGwpKX1mdW5jdGlvbiBjKCl7dC53aGVlbD1udWxsLHQuZW5kKCl9fWZ1bmN0aW9uIHcoKXtpZighZSYmbi5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciB0PXYodGhpcyxhcmd1bWVudHMsITApLGk9d3UoY3Uudmlldykub24oIm1vdXNlbW92ZS56b29tIixjLCEwKS5vbigibW91c2V1cC56b29tIix1LCEwKSxvPW9oKHRoaXMpLGE9Y3UuY2xpZW50WCxzPWN1LmNsaWVudFk7dWgoY3Uudmlldyksb04oKSx0Lm1vdXNlPVtvLHRoaXMuX196b29tLmludmVydChvKV0sRnAodGhpcyksdC5zdGFydCgpfWZ1bmN0aW9uIGMoKXtpZihhTigpLCF0Lm1vdmVkKXt2YXIgZT1jdS5jbGllbnRYLWEsbj1jdS5jbGllbnRZLXM7dC5tb3ZlZD1lKmUrbipuPnB9dC56b29tKCJtb3VzZSIscihnKHQudGhhdC5fX3pvb20sdC5tb3VzZVswXT1vaCh0LnRoYXQpLHQubW91c2VbMV0pLHQuZXh0ZW50LGwpKX1mdW5jdGlvbiB1KCl7aS5vbigibW91c2Vtb3ZlLnpvb20gbW91c2V1cC56b29tIixudWxsKSxoaChjdS52aWV3LHQubW92ZWQpLGFOKCksdC5lbmQoKX19ZnVuY3Rpb24gUygpe2lmKG4uYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgdD10aGlzLl9fem9vbSxlPW9oKHRoaXMpLG89dC5pbnZlcnQoZSksYT10LmsqKGN1LnNoaWZ0S2V5Py41OjIpLHM9cihnKG0odCxhKSxlLG8pLGkuYXBwbHkodGhpcyxhcmd1bWVudHMpLGwpO2FOKCksYz4wP3d1KHRoaXMpLnRyYW5zaXRpb24oKS5kdXJhdGlvbihjKS5jYWxsKHkscyxlKTp3dSh0aGlzKS5jYWxsKGYudHJhbnNmb3JtLHMpfX1mdW5jdGlvbiBNKCl7aWYobi5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBlLGkscixvLGE9Y3UudG91Y2hlcyxzPWEubGVuZ3RoLGw9dih0aGlzLGFyZ3VtZW50cyxjdS5jaGFuZ2VkVG91Y2hlcy5sZW5ndGg9PT1zKTtmb3Iob04oKSxpPTA7aTxzOysraSlvPVtvPXNoKHRoaXMsYSwocj1hW2ldKS5pZGVudGlmaWVyKSx0aGlzLl9fem9vbS5pbnZlcnQobyksci5pZGVudGlmaWVyXSxsLnRvdWNoMD9sLnRvdWNoMXx8bC50b3VjaDBbMl09PT1vWzJdfHwobC50b3VjaDE9byxsLnRhcHM9MCk6KGwudG91Y2gwPW8sZT0hMCxsLnRhcHM9MSshIXQpO3QmJih0PWNsZWFyVGltZW91dCh0KSksZSYmKGwudGFwczwyJiYodD1zZXRUaW1lb3V0KChmdW5jdGlvbigpe3Q9bnVsbH0pLGQpKSxGcCh0aGlzKSxsLnN0YXJ0KCkpfX1mdW5jdGlvbiBFKCl7aWYodGhpcy5fX3pvb21pbmcpe3ZhciBlLG4saSxvLGE9dih0aGlzLGFyZ3VtZW50cykscz1jdS5jaGFuZ2VkVG91Y2hlcyxjPXMubGVuZ3RoO2ZvcihhTigpLHQmJih0PWNsZWFyVGltZW91dCh0KSksYS50YXBzPTAsZT0wO2U8YzsrK2UpaT1zaCh0aGlzLHMsKG49c1tlXSkuaWRlbnRpZmllciksYS50b3VjaDAmJmEudG91Y2gwWzJdPT09bi5pZGVudGlmaWVyP2EudG91Y2gwWzBdPWk6YS50b3VjaDEmJmEudG91Y2gxWzJdPT09bi5pZGVudGlmaWVyJiYoYS50b3VjaDFbMF09aSk7aWYobj1hLnRoYXQuX196b29tLGEudG91Y2gxKXt2YXIgdT1hLnRvdWNoMFswXSxoPWEudG91Y2gwWzFdLGQ9YS50b3VjaDFbMF0scD1hLnRvdWNoMVsxXSxmPShmPWRbMF0tdVswXSkqZisoZj1kWzFdLXVbMV0pKmYsXz0oXz1wWzBdLWhbMF0pKl8rKF89cFsxXS1oWzFdKSpfO249bShuLE1hdGguc3FydChmL18pKSxpPVsodVswXStkWzBdKS8yLCh1WzFdK2RbMV0pLzJdLG89WyhoWzBdK3BbMF0pLzIsKGhbMV0rcFsxXSkvMl19ZWxzZXtpZighYS50b3VjaDApcmV0dXJuO2k9YS50b3VjaDBbMF0sbz1hLnRvdWNoMFsxXX1hLnpvb20oInRvdWNoIixyKGcobixpLG8pLGEuZXh0ZW50LGwpKX19ZnVuY3Rpb24gVCgpe2lmKHRoaXMuX196b29taW5nKXt2YXIgdCxuLGk9dih0aGlzLGFyZ3VtZW50cykscj1jdS5jaGFuZ2VkVG91Y2hlcyxvPXIubGVuZ3RoO2ZvcihvTigpLGUmJmNsZWFyVGltZW91dChlKSxlPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ZT1udWxsfSksZCksdD0wO3Q8bzsrK3Qpbj1yW3RdLGkudG91Y2gwJiZpLnRvdWNoMFsyXT09PW4uaWRlbnRpZmllcj9kZWxldGUgaS50b3VjaDA6aS50b3VjaDEmJmkudG91Y2gxWzJdPT09bi5pZGVudGlmaWVyJiZkZWxldGUgaS50b3VjaDE7aWYoaS50b3VjaDEmJiFpLnRvdWNoMCYmKGkudG91Y2gwPWkudG91Y2gxLGRlbGV0ZSBpLnRvdWNoMSksaS50b3VjaDApaS50b3VjaDBbMV09dGhpcy5fX3pvb20uaW52ZXJ0KGkudG91Y2gwWzBdKTtlbHNlIGlmKGkuZW5kKCksMj09PWkudGFwcyl7dmFyIGE9d3UodGhpcykub24oImRibGNsaWNrLnpvb20iKTthJiZhLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19fXJldHVybiBmLnRyYW5zZm9ybT1mdW5jdGlvbih0LGUsbil7dmFyIGk9dC5zZWxlY3Rpb24/dC5zZWxlY3Rpb24oKTp0O2kucHJvcGVydHkoIl9fem9vbSIsY04pLHQhPT1pP3kodCxlLG4pOmkuaW50ZXJydXB0KCkuZWFjaCgoZnVuY3Rpb24oKXt2KHRoaXMsYXJndW1lbnRzKS5zdGFydCgpLnpvb20obnVsbCwiZnVuY3Rpb24iPT10eXBlb2YgZT9lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTplKS5lbmQoKX0pKX0sZi5zY2FsZUJ5PWZ1bmN0aW9uKHQsZSxuKXtmLnNjYWxlVG8odCwoZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9fem9vbS5rLG49ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6ZTtyZXR1cm4gdCpufSksbil9LGYuc2NhbGVUbz1mdW5jdGlvbih0LGUsbil7Zi50cmFuc2Zvcm0odCwoZnVuY3Rpb24oKXt2YXIgdD1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxvPXRoaXMuX196b29tLGE9bnVsbD09bj9fKHQpOiJmdW5jdGlvbiI9PXR5cGVvZiBuP24uYXBwbHkodGhpcyxhcmd1bWVudHMpOm4scz1vLmludmVydChhKSxjPSJmdW5jdGlvbiI9PXR5cGVvZiBlP2UuYXBwbHkodGhpcyxhcmd1bWVudHMpOmU7cmV0dXJuIHIoZyhtKG8sYyksYSxzKSx0LGwpfSksbil9LGYudHJhbnNsYXRlQnk9ZnVuY3Rpb24odCxlLG4pe2YudHJhbnNmb3JtKHQsKGZ1bmN0aW9uKCl7cmV0dXJuIHIodGhpcy5fX3pvb20udHJhbnNsYXRlKCJmdW5jdGlvbiI9PXR5cGVvZiBlP2UuYXBwbHkodGhpcyxhcmd1bWVudHMpOmUsImZ1bmN0aW9uIj09dHlwZW9mIG4/bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6biksaS5hcHBseSh0aGlzLGFyZ3VtZW50cyksbCl9KSl9LGYudHJhbnNsYXRlVG89ZnVuY3Rpb24odCxlLG4sbyl7Zi50cmFuc2Zvcm0odCwoZnVuY3Rpb24oKXt2YXIgdD1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxhPXRoaXMuX196b29tLHM9bnVsbD09bz9fKHQpOiJmdW5jdGlvbiI9PXR5cGVvZiBvP28uYXBwbHkodGhpcyxhcmd1bWVudHMpOm87cmV0dXJuIHIoaU4udHJhbnNsYXRlKHNbMF0sc1sxXSkuc2NhbGUoYS5rKS50cmFuc2xhdGUoImZ1bmN0aW9uIj09dHlwZW9mIGU/LWUuYXBwbHkodGhpcyxhcmd1bWVudHMpOi1lLCJmdW5jdGlvbiI9PXR5cGVvZiBuPy1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTotbiksdCxsKX0pLG8pfSxiLnByb3RvdHlwZT17c3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gMT09Kyt0aGlzLmFjdGl2ZSYmKHRoaXMudGhhdC5fX3pvb21pbmc9dGhpcyx0aGlzLmVtaXQoInN0YXJ0IikpLHRoaXN9LHpvb206ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5tb3VzZSYmIm1vdXNlIiE9PXQmJih0aGlzLm1vdXNlWzFdPWUuaW52ZXJ0KHRoaXMubW91c2VbMF0pKSx0aGlzLnRvdWNoMCYmInRvdWNoIiE9PXQmJih0aGlzLnRvdWNoMFsxXT1lLmludmVydCh0aGlzLnRvdWNoMFswXSkpLHRoaXMudG91Y2gxJiYidG91Y2giIT09dCYmKHRoaXMudG91Y2gxWzFdPWUuaW52ZXJ0KHRoaXMudG91Y2gxWzBdKSksdGhpcy50aGF0Ll9fem9vbT1lLHRoaXMuZW1pdCgiem9vbSIpLHRoaXN9LGVuZDpmdW5jdGlvbigpe3JldHVybiAwPT0tLXRoaXMuYWN0aXZlJiYoZGVsZXRlIHRoaXMudGhhdC5fX3pvb21pbmcsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1pdDpmdW5jdGlvbih0KXttdShuZXcgZU4oZix0LHRoaXMudGhhdC5fX3pvb20pLGguYXBwbHksaCxbdCx0aGlzLnRoYXQsdGhpcy5hcmdzXSl9fSxmLndoZWVsRGVsdGE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp0TigrdCksZik6b30sZi5maWx0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp0TighIXQpLGYpOm59LGYudG91Y2hhYmxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6dE4oISF0KSxmKTphfSxmLmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnROKFtbK3RbMF1bMF0sK3RbMF1bMV1dLFsrdFsxXVswXSwrdFsxXVsxXV1dKSxmKTppfSxmLnNjYWxlRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzWzBdPSt0WzBdLHNbMV09K3RbMV0sZik6W3NbMF0sc1sxXV19LGYudHJhbnNsYXRlRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsWzBdWzBdPSt0WzBdWzBdLGxbMV1bMF09K3RbMV1bMF0sbFswXVsxXT0rdFswXVsxXSxsWzFdWzFdPSt0WzFdWzFdLGYpOltbbFswXVswXSxsWzBdWzFdXSxbbFsxXVswXSxsWzFdWzFdXV19LGYuY29uc3RyYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsZik6cn0sZi5kdXJhdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0rdCxmKTpjfSxmLmludGVycG9sYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXQsZik6dX0sZi5vbj1mdW5jdGlvbigpe3ZhciB0PWgub24uYXBwbHkoaCxhcmd1bWVudHMpO3JldHVybiB0PT09aD9mOnR9LGYuY2xpY2tEaXN0YW5jZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD0odD0rdCkqdCxmKTpNYXRoLnNxcnQocCl9LGZ9ck4ucHJvdG90eXBlPW5OLnByb3RvdHlwZTt2YXIgZk49T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsdmVyc2lvbjoiNS43LjAiLGJpc2VjdDp3bCxiaXNlY3RSaWdodDp3bCxiaXNlY3RMZWZ0OlNsLGFzY2VuZGluZzp2bCxiaXNlY3RvcjpibCxjcm9zczpFbCxkZXNjZW5kaW5nOmZ1bmN0aW9uIG1OKHQsZSl7cmV0dXJuIGU8dD8tMTplPnQ/MTplPj10PzA6TmFOfSxkZXZpYXRpb246QWwsZXh0ZW50OmtsLGhpc3RvZ3JhbTpmdW5jdGlvbiBnTigpe3ZhciB0PU9sLGU9a2wsbj1VbDtmdW5jdGlvbiBpKGkpe3ZhciByLG8sYT1pLmxlbmd0aCxzPW5ldyBBcnJheShhKTtmb3Iocj0wO3I8YTsrK3Ipc1tyXT10KGlbcl0scixpKTt2YXIgbD1lKHMpLGM9bFswXSx1PWxbMV0saD1uKHMsYyx1KTtBcnJheS5pc0FycmF5KGgpfHwoaD1WbChjLHUsaCksaD1SbChNYXRoLmNlaWwoYy9oKSpoLHUsaCkpO2Zvcih2YXIgZD1oLmxlbmd0aDtoWzBdPD1jOyloLnNoaWZ0KCksLS1kO2Zvcig7aFtkLTFdPnU7KWgucG9wKCksLS1kO3ZhciBwLGY9bmV3IEFycmF5KGQrMSk7Zm9yKHI9MDtyPD1kOysrcikocD1mW3JdPVtdKS54MD1yPjA/aFtyLTFdOmMscC54MT1yPGQ/aFtyXTp1O2ZvcihyPTA7cjxhOysrciljPD0obz1zW3JdKSYmbzw9dSYmZlt3bChoLG8sMCxkKV0ucHVzaChpW3JdKTtyZXR1cm4gZn1yZXR1cm4gaS52YWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOklsKGUpLGkpOnR9LGkuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6SWwoW3RbMF0sdFsxXV0pLGkpOmV9LGkudGhyZXNob2xkcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkFycmF5LmlzQXJyYXkodCk/SWwoUGwuY2FsbCh0KSk6SWwodCksaSk6bn0saX0sdGhyZXNob2xkRnJlZWRtYW5EaWFjb25pczpmdW5jdGlvbiBfTih0LGUsbil7cmV0dXJuIHQ9TmwuY2FsbCh0LFRsKS5zb3J0KHZsKSxNYXRoLmNlaWwoKG4tZSkvKDIqKGpsKHQsLjc1KS1qbCh0LC4yNSkpKk1hdGgucG93KHQubGVuZ3RoLC0xLzMpKSl9LHRocmVzaG9sZFNjb3R0OmZ1bmN0aW9uIHlOKHQsZSxuKXtyZXR1cm4gTWF0aC5jZWlsKChuLWUpLygzLjUqQWwodCkqTWF0aC5wb3codC5sZW5ndGgsLTEvMykpKX0sdGhyZXNob2xkU3R1cmdlczpVbCxtYXg6R2wsbWVhbjpmdW5jdGlvbiB2Tih0LGUpe3ZhciBuLGk9dC5sZW5ndGgscj1pLG89LTEsYT0wO2lmKG51bGw9PWUpZm9yKDsrK288aTspaXNOYU4obj1UbCh0W29dKSk/LS1yOmErPW47ZWxzZSBmb3IoOysrbzxpOylpc05hTihuPVRsKGUodFtvXSxvLHQpKSk/LS1yOmErPW47aWYocilyZXR1cm4gYS9yfSxtZWRpYW46ZnVuY3Rpb24gYk4odCxlKXt2YXIgbixpPXQubGVuZ3RoLHI9LTEsbz1bXTtpZihudWxsPT1lKWZvcig7KytyPGk7KWlzTmFOKG49VGwodFtyXSkpfHxvLnB1c2gobik7ZWxzZSBmb3IoOysrcjxpOylpc05hTihuPVRsKGUodFtyXSxyLHQpKSl8fG8ucHVzaChuKTtyZXR1cm4gamwoby5zb3J0KHZsKSwuNSl9LG1lcmdlOldsLG1pbjpxbCxwYWlyczpmdW5jdGlvbiB4Tih0LGUpe251bGw9PWUmJihlPU1sKTtmb3IodmFyIG49MCxpPXQubGVuZ3RoLTEscj10WzBdLG89bmV3IEFycmF5KGk8MD8wOmkpO248aTspb1tuXT1lKHIscj10Wysrbl0pO3JldHVybiBvfSxwZXJtdXRlOmZ1bmN0aW9uIHdOKHQsZSl7Zm9yKHZhciBuPWUubGVuZ3RoLGk9bmV3IEFycmF5KG4pO24tLTspaVtuXT10W2Vbbl1dO3JldHVybiBpfSxxdWFudGlsZTpqbCxyYW5nZTpSbCxzY2FuOmZ1bmN0aW9uIFNOKHQsZSl7aWYobj10Lmxlbmd0aCl7dmFyIG4saSxyPTAsbz0wLGE9dFtvXTtmb3IobnVsbD09ZSYmKGU9dmwpOysrcjxuOykoZShpPXRbcl0sYSk8MHx8MCE9PWUoYSxhKSkmJihhPWksbz1yKTtyZXR1cm4gMD09PWUoYSxhKT9vOnZvaWQgMH19LHNodWZmbGU6ZnVuY3Rpb24gTU4odCxlLG4pe2Zvcih2YXIgaSxyLG89KG51bGw9PW4/dC5sZW5ndGg6biktKGU9bnVsbD09ZT8wOitlKTtvOylyPU1hdGgucmFuZG9tKCkqby0tfDAsaT10W28rZV0sdFtvK2VdPXRbcitlXSx0W3IrZV09aTtyZXR1cm4gdH0sc3VtOmZ1bmN0aW9uIEVOKHQsZSl7dmFyIG4saT10Lmxlbmd0aCxyPS0xLG89MDtpZihudWxsPT1lKWZvcig7KytyPGk7KShuPSt0W3JdKSYmKG8rPW4pO2Vsc2UgZm9yKDsrK3I8aTspKG49K2UodFtyXSxyLHQpKSYmKG8rPW4pO3JldHVybiBvfSx0aWNrczpIbCx0aWNrSW5jcmVtZW50OkZsLHRpY2tTdGVwOlZsLHRyYW5zcG9zZTpZbCx2YXJpYW5jZTpDbCx6aXA6ZnVuY3Rpb24gVE4oKXtyZXR1cm4gWWwoYXJndW1lbnRzKX0sYXhpc1RvcDpmdW5jdGlvbiBDTih0KXtyZXR1cm4gaWMoMSx0KX0sYXhpc1JpZ2h0OmZ1bmN0aW9uIEFOKHQpe3JldHVybiBpYygyLHQpfSxheGlzQm90dG9tOnJjLGF4aXNMZWZ0Om9jLGJydXNoOlptLGJydXNoWDpmdW5jdGlvbiBrTigpe3JldHVybiBKbShSbSl9LGJydXNoWTpLbSxicnVzaFNlbGVjdGlvbjokbSxjaG9yZDpmdW5jdGlvbiBMTigpe3ZhciB0PTAsZT1udWxsLG49bnVsbCxpPW51bGw7ZnVuY3Rpb24gcihyKXt2YXIgbyxhLHMsbCxjLHUsaD1yLmxlbmd0aCxkPVtdLHA9UmwoaCksZj1bXSxtPVtdLGc9bS5ncm91cHM9bmV3IEFycmF5KGgpLF89bmV3IEFycmF5KGgqaCk7Zm9yKG89MCxjPS0xOysrYzxoOyl7Zm9yKGE9MCx1PS0xOysrdTxoOylhKz1yW2NdW3VdO2QucHVzaChhKSxmLnB1c2goUmwoaCkpLG8rPWF9Zm9yKGUmJnAuc29ydCgoZnVuY3Rpb24odCxuKXtyZXR1cm4gZShkW3RdLGRbbl0pfSkpLG4mJmYuZm9yRWFjaCgoZnVuY3Rpb24odCxlKXt0LnNvcnQoKGZ1bmN0aW9uKHQsaSl7cmV0dXJuIG4ocltlXVt0XSxyW2VdW2ldKX0pKX0pKSxsPShvPXJnKDAsaWctdCpoKS9vKT90OmlnL2gsYT0wLGM9LTE7KytjPGg7KXtmb3Iocz1hLHU9LTE7Kyt1PGg7KXt2YXIgeT1wW2NdLHY9Zlt5XVt1XSxiPXJbeV1bdl0seD1hLHc9YSs9YipvO19bdipoK3ldPXtpbmRleDp5LHN1YmluZGV4OnYsc3RhcnRBbmdsZTp4LGVuZEFuZ2xlOncsdmFsdWU6Yn19Z1t5XT17aW5kZXg6eSxzdGFydEFuZ2xlOnMsZW5kQW5nbGU6YSx2YWx1ZTpkW3ldfSxhKz1sfWZvcihjPS0xOysrYzxoOylmb3IodT1jLTE7Kyt1PGg7KXt2YXIgUz1fW3UqaCtjXSxNPV9bYypoK3VdOyhTLnZhbHVlfHxNLnZhbHVlKSYmbS5wdXNoKFMudmFsdWU8TS52YWx1ZT97c291cmNlOk0sdGFyZ2V0OlN9Ontzb3VyY2U6Uyx0YXJnZXQ6TX0pfXJldHVybiBpP20uc29ydChpKTptfXJldHVybiByLnBhZEFuZ2xlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXJnKDAsZSkscik6dH0sci5zb3J0R3JvdXBzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQscik6ZX0sci5zb3J0U3ViZ3JvdXBzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQscik6bn0sci5zb3J0Q2hvcmRzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT10P2k9bnVsbDooaT1vZyh0KSkuXz10LHIpOmkmJmkuX30scn0scmliYm9uOmZ1bmN0aW9uIFBOKCl7dmFyIHQ9ZmcsZT1tZyxuPWdnLGk9X2cscj15ZyxvPW51bGw7ZnVuY3Rpb24gYSgpe3ZhciBhLHM9YWcuY2FsbChhcmd1bWVudHMpLGw9dC5hcHBseSh0aGlzLHMpLGM9ZS5hcHBseSh0aGlzLHMpLHU9K24uYXBwbHkodGhpcywoc1swXT1sLHMpKSxoPWkuYXBwbHkodGhpcyxzKS1uZyxkPXIuYXBwbHkodGhpcyxzKS1uZyxwPXUqUW0oaCksZj11KnRnKGgpLG09K24uYXBwbHkodGhpcywoc1swXT1jLHMpKSxnPWkuYXBwbHkodGhpcyxzKS1uZyxfPXIuYXBwbHkodGhpcyxzKS1uZztpZihvfHwobz1hPXBnKCkpLG8ubW92ZVRvKHAsZiksby5hcmMoMCwwLHUsaCxkKSxoPT09ZyYmZD09PV98fChvLnF1YWRyYXRpY0N1cnZlVG8oMCwwLG0qUW0oZyksbSp0ZyhnKSksby5hcmMoMCwwLG0sZyxfKSksby5xdWFkcmF0aWNDdXJ2ZVRvKDAsMCxwLGYpLG8uY2xvc2VQYXRoKCksYSlyZXR1cm4gbz1udWxsLGErIiJ8fG51bGx9cmV0dXJuIGEucmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6c2coK3QpLGEpOm59LGEuc3RhcnRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnNnKCt0KSxhKTppfSxhLmVuZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6c2coK3QpLGEpOnJ9LGEuc291cmNlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUsYSk6dH0sYS50YXJnZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxhKTplfSxhLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89bnVsbD09dD9udWxsOnQsYSk6b30sYX0sbmVzdDpmdW5jdGlvbiBOTigpe3ZhciB0LGUsbixpPVtdLHI9W107ZnVuY3Rpb24gbyhuLHIsYSxzKXtpZihyPj1pLmxlbmd0aClyZXR1cm4gbnVsbCE9dCYmbi5zb3J0KHQpLG51bGwhPWU/ZShuKTpuO2Zvcih2YXIgbCxjLHUsaD0tMSxkPW4ubGVuZ3RoLHA9aVtyKytdLGY9eGcoKSxtPWEoKTsrK2g8ZDspKHU9Zi5nZXQobD1wKGM9bltoXSkrIiIpKT91LnB1c2goYyk6Zi5zZXQobCxbY10pO3JldHVybiBmLmVhY2goKGZ1bmN0aW9uKHQsZSl7cyhtLGUsbyh0LHIsYSxzKSl9KSksbX1mdW5jdGlvbiBhKHQsbil7aWYoKytuPmkubGVuZ3RoKXJldHVybiB0O3ZhciBvLHM9cltuLTFdO3JldHVybiBudWxsIT1lJiZuPj1pLmxlbmd0aD9vPXQuZW50cmllcygpOihvPVtdLHQuZWFjaCgoZnVuY3Rpb24odCxlKXtvLnB1c2goe2tleTplLHZhbHVlczphKHQsbil9KX0pKSksbnVsbCE9cz9vLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHModC5rZXksZS5rZXkpfSkpOm99cmV0dXJuIG49e29iamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gbyh0LDAsd2csU2cpfSxtYXA6ZnVuY3Rpb24odCl7cmV0dXJuIG8odCwwLE1nLEVnKX0sZW50cmllczpmdW5jdGlvbih0KXtyZXR1cm4gYShvKHQsMCxNZyxFZyksMCl9LGtleTpmdW5jdGlvbih0KXtyZXR1cm4gaS5wdXNoKHQpLG59LHNvcnRLZXlzOmZ1bmN0aW9uKHQpe3JldHVybiByW2kubGVuZ3RoLTFdPXQsbn0sc29ydFZhbHVlczpmdW5jdGlvbihlKXtyZXR1cm4gdD1lLG59LHJvbGx1cDpmdW5jdGlvbih0KXtyZXR1cm4gZT10LG59fX0sc2V0OkFnLG1hcDp4ZyxrZXlzOmtnLHZhbHVlczpmdW5jdGlvbiBJTih0KXt2YXIgZT1bXTtmb3IodmFyIG4gaW4gdCllLnB1c2godFtuXSk7cmV0dXJuIGV9LGVudHJpZXM6ZnVuY3Rpb24gT04odCl7dmFyIGU9W107Zm9yKHZhciBuIGluIHQpZS5wdXNoKHtrZXk6bix2YWx1ZTp0W25dfSk7cmV0dXJuIGV9LGNvbG9yOkRoLHJnYjpWaCxoc2w6WGgsbGFiOmFkLGhjbDpwZCxsY2g6ZnVuY3Rpb24gUk4odCxlLG4saSl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP2RkKHQpOm5ldyBmZChuLGUsdCxudWxsPT1pPzE6aSl9LGdyYXk6ZnVuY3Rpb24gek4odCxlKXtyZXR1cm4gbmV3IHNkKHQsMCwwLG51bGw9PWU/MTplKX0sY3ViZWhlbGl4OmJkLGNvbnRvdXJzOkJnLGNvbnRvdXJEZW5zaXR5OmZ1bmN0aW9uIEROKCl7dmFyIHQ9VmcsZT1VZyxuPWpnLGk9OTYwLHI9NTAwLG89MjAsYT0yLHM9MypvLGw9aSsyKnM+PmEsYz1yKzIqcz4+YSx1PU5nKDIwKTtmdW5jdGlvbiBoKGkpe3ZhciByPW5ldyBGbG9hdDMyQXJyYXkobCpjKSxoPW5ldyBGbG9hdDMyQXJyYXkobCpjKTtpLmZvckVhY2goKGZ1bmN0aW9uKGksbyx1KXt2YXIgaD0rdChpLG8sdSkrcz4+YSxkPStlKGksbyx1KStzPj5hLHA9K24oaSxvLHUpO2g+PTAmJmg8bCYmZD49MCYmZDxjJiYocltoK2QqbF0rPXApfSkpLEhnKHt3aWR0aDpsLGhlaWdodDpjLGRhdGE6cn0se3dpZHRoOmwsaGVpZ2h0OmMsZGF0YTpofSxvPj5hKSxGZyh7d2lkdGg6bCxoZWlnaHQ6YyxkYXRhOmh9LHt3aWR0aDpsLGhlaWdodDpjLGRhdGE6cn0sbz4+YSksSGcoe3dpZHRoOmwsaGVpZ2h0OmMsZGF0YTpyfSx7d2lkdGg6bCxoZWlnaHQ6YyxkYXRhOmh9LG8+PmEpLEZnKHt3aWR0aDpsLGhlaWdodDpjLGRhdGE6aH0se3dpZHRoOmwsaGVpZ2h0OmMsZGF0YTpyfSxvPj5hKSxIZyh7d2lkdGg6bCxoZWlnaHQ6YyxkYXRhOnJ9LHt3aWR0aDpsLGhlaWdodDpjLGRhdGE6aH0sbz4+YSksRmcoe3dpZHRoOmwsaGVpZ2h0OmMsZGF0YTpofSx7d2lkdGg6bCxoZWlnaHQ6YyxkYXRhOnJ9LG8+PmEpO3ZhciBwPXUocik7aWYoIUFycmF5LmlzQXJyYXkocCkpe3ZhciBmPUdsKHIpO3A9VmwoMCxmLHApLChwPVJsKDAsTWF0aC5mbG9vcihmL3ApKnAscCkpLnNoaWZ0KCl9cmV0dXJuIEJnKCkudGhyZXNob2xkcyhwKS5zaXplKFtsLGNdKShyKS5tYXAoZCl9ZnVuY3Rpb24gZCh0KXtyZXR1cm4gdC52YWx1ZSo9TWF0aC5wb3coMiwtMiphKSx0LmNvb3JkaW5hdGVzLmZvckVhY2gocCksdH1mdW5jdGlvbiBwKHQpe3QuZm9yRWFjaChmKX1mdW5jdGlvbiBmKHQpe3QuZm9yRWFjaChtKX1mdW5jdGlvbiBtKHQpe3RbMF09dFswXSpNYXRoLnBvdygyLGEpLXMsdFsxXT10WzFdKk1hdGgucG93KDIsYSktc31mdW5jdGlvbiBnKCl7cmV0dXJuIGw9aSsyKihzPTMqbyk+PmEsYz1yKzIqcz4+YSxofXJldHVybiBoLng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpOZygrZSksaCk6dH0saC55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6TmcoK3QpLGgpOmV9LGgud2VpZ2h0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6TmcoK3QpLGgpOm59LGguc2l6ZT1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm5baSxyXTt2YXIgZT1NYXRoLmNlaWwodFswXSksbj1NYXRoLmNlaWwodFsxXSk7aWYoIShlPj0wfHxlPj0wKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgc2l6ZSIpO3JldHVybiBpPWUscj1uLGcoKX0saC5jZWxsU2l6ZT1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gMTw8YTtpZighKCh0PSt0KT49MSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNlbGwgc2l6ZSIpO3JldHVybiBhPU1hdGguZmxvb3IoTWF0aC5sb2codCkvTWF0aC5MTjIpLGcoKX0saC50aHJlc2hvbGRzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6QXJyYXkuaXNBcnJheSh0KT9OZyhMZy5jYWxsKHQpKTpOZyh0KSxoKTp1fSxoLmJhbmR3aWR0aD1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gTWF0aC5zcXJ0KG8qKG8rMSkpO2lmKCEoKHQ9K3QpPj0wKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgYmFuZHdpZHRoIik7cmV0dXJuIG89TWF0aC5yb3VuZCgoTWF0aC5zcXJ0KDQqdCp0KzEpLTEpLzIpLGcoKX0saH0sZGlzcGF0Y2g6c2MsZHJhZzp5aCxkcmFnRGlzYWJsZTp1aCxkcmFnRW5hYmxlOmhoLGRzdkZvcm1hdDokZyxjc3ZQYXJzZTpaZyxjc3ZQYXJzZVJvd3M6SmcsY3N2Rm9ybWF0OlFnLGNzdkZvcm1hdEJvZHk6dF8sY3N2Rm9ybWF0Um93czplXyxjc3ZGb3JtYXRSb3c6bl8sY3N2Rm9ybWF0VmFsdWU6aV8sdHN2UGFyc2U6b18sdHN2UGFyc2VSb3dzOmFfLHRzdkZvcm1hdDpzXyx0c3ZGb3JtYXRCb2R5OmxfLHRzdkZvcm1hdFJvd3M6Y18sdHN2Rm9ybWF0Um93OnVfLHRzdkZvcm1hdFZhbHVlOmhfLGF1dG9UeXBlOmZ1bmN0aW9uIEJOKHQpe2Zvcih2YXIgZSBpbiB0KXt2YXIgbixpLHI9dFtlXS50cmltKCk7aWYocilpZigidHJ1ZSI9PT1yKXI9ITA7ZWxzZSBpZigiZmFsc2UiPT09cilyPSExO2Vsc2UgaWYoIk5hTiI9PT1yKXI9TmFOO2Vsc2UgaWYoaXNOYU4obj0rcikpe2lmKCEoaT1yLm1hdGNoKC9eKFstK11cZHsyfSk/XGR7NH0oLVxkezJ9KC1cZHsyfSk/KT8oVFxkezJ9OlxkezJ9KDpcZHsyfShcLlxkezN9KT8pPyhafFstK11cZHsyfTpcZHsyfSk/KT8kLykpKWNvbnRpbnVlO2RfJiZpWzRdJiYhaVs3XSYmKHI9ci5yZXBsYWNlKC8tL2csIi8iKS5yZXBsYWNlKC9ULywiICIpKSxyPW5ldyBEYXRlKHIpfWVsc2Ugcj1uO2Vsc2Ugcj1udWxsO3RbZV09cn1yZXR1cm4gdH0sZWFzZUxpbmVhcjp2ZixlYXNlUXVhZDp3ZixlYXNlUXVhZEluOmJmLGVhc2VRdWFkT3V0OnhmLGVhc2VRdWFkSW5PdXQ6d2YsZWFzZUN1YmljOkVmLGVhc2VDdWJpY0luOlNmLGVhc2VDdWJpY091dDpNZixlYXNlQ3ViaWNJbk91dDpFZixlYXNlUG9seTpZZixlYXNlUG9seUluOldmLGVhc2VQb2x5T3V0OnFmLGVhc2VQb2x5SW5PdXQ6WWYsZWFzZVNpbjpKZixlYXNlU2luSW46S2YsZWFzZVNpbk91dDpaZixlYXNlU2luSW5PdXQ6SmYsZWFzZUV4cDpubSxlYXNlRXhwSW46dG0sZWFzZUV4cE91dDplbSxlYXNlRXhwSW5PdXQ6bm0sZWFzZUNpcmNsZTpvbSxlYXNlQ2lyY2xlSW46aW0sZWFzZUNpcmNsZU91dDpybSxlYXNlQ2lyY2xlSW5PdXQ6b20sZWFzZUJvdW5jZTpsbSxlYXNlQm91bmNlSW46c20sZWFzZUJvdW5jZU91dDpsbSxlYXNlQm91bmNlSW5PdXQ6Y20sZWFzZUJhY2s6cG0sZWFzZUJhY2tJbjpobSxlYXNlQmFja091dDpkbSxlYXNlQmFja0luT3V0OnBtLGVhc2VFbGFzdGljOmdtLGVhc2VFbGFzdGljSW46bW0sZWFzZUVsYXN0aWNPdXQ6Z20sZWFzZUVsYXN0aWNJbk91dDpfbSxibG9iOmZ1bmN0aW9uIEhOKHQsZSl7cmV0dXJuIGZldGNoKHQsZSkudGhlbihwXyl9LGJ1ZmZlcjpmdW5jdGlvbiBGTih0LGUpe3JldHVybiBmZXRjaCh0LGUpLnRoZW4oZl8pfSxkc3Y6ZnVuY3Rpb24gVk4odCxlLG4saSl7Mz09PWFyZ3VtZW50cy5sZW5ndGgmJiJmdW5jdGlvbiI9PXR5cGVvZiBuJiYoaT1uLG49dm9pZCAwKTt2YXIgcj0kZyh0KTtyZXR1cm4gZ18oZSxuKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gci5wYXJzZSh0LGkpfSkpfSxjc3Y6eV8sdHN2OnZfLGltYWdlOmZ1bmN0aW9uIFVOKHQsZSl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLGkpe3ZhciByPW5ldyBJbWFnZTtmb3IodmFyIG8gaW4gZSlyW29dPWVbb107ci5vbmVycm9yPWksci5vbmxvYWQ9ZnVuY3Rpb24oKXtuKHIpfSxyLnNyYz10fSkpfSxqc29uOmZ1bmN0aW9uIGpOKHQsZSl7cmV0dXJuIGZldGNoKHQsZSkudGhlbihiXyl9LHRleHQ6Z18seG1sOndfLGh0bWw6U18sc3ZnOk1fLGZvcmNlQ2VudGVyOmZ1bmN0aW9uIEdOKHQsZSl7dmFyIG47ZnVuY3Rpb24gaSgpe3ZhciBpLHIsbz1uLmxlbmd0aCxhPTAscz0wO2ZvcihpPTA7aTxvOysraSlhKz0ocj1uW2ldKS54LHMrPXIueTtmb3IoYT1hL28tdCxzPXMvby1lLGk9MDtpPG87KytpKShyPW5baV0pLngtPWEsci55LT1zfXJldHVybiBudWxsPT10JiYodD0wKSxudWxsPT1lJiYoZT0wKSxpLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7bj10fSxpLng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2UsaSk6dH0saS55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0LGkpOmV9LGl9LGZvcmNlQ29sbGlkZTpmdW5jdGlvbiBXTih0KXt2YXIgZSxuLGk9MSxyPTE7ZnVuY3Rpb24gbygpe2Zvcih2YXIgdCxvLHMsbCxjLHUsaCxkPWUubGVuZ3RoLHA9MDtwPHI7KytwKWZvcihvPVBfKGUsUl8sel8pLnZpc2l0QWZ0ZXIoYSksdD0wO3Q8ZDsrK3QpaD0odT1uWyhzPWVbdF0pLmluZGV4XSkqdSxsPXMueCtzLnZ4LGM9cy55K3Mudnksby52aXNpdChmKTtmdW5jdGlvbiBmKHQsZSxuLHIsbyl7dmFyIGE9dC5kYXRhLGQ9dC5yLHA9dStkO2lmKCFhKXJldHVybiBlPmwrcHx8cjxsLXB8fG4+YytwfHxvPGMtcDtpZihhLmluZGV4PnMuaW5kZXgpe3ZhciBmPWwtYS54LWEudngsbT1jLWEueS1hLnZ5LGc9ZipmK20qbTtnPHAqcCYmKDA9PT1mJiYoZys9KGY9VF8oKSkqZiksMD09PW0mJihnKz0obT1UXygpKSptKSxnPShwLShnPU1hdGguc3FydChnKSkpL2cqaSxzLnZ4Kz0oZio9ZykqKHA9KGQqPWQpLyhoK2QpKSxzLnZ5Kz0obSo9ZykqcCxhLnZ4LT1mKihwPTEtcCksYS52eS09bSpwKX19fWZ1bmN0aW9uIGEodCl7aWYodC5kYXRhKXJldHVybiB0LnI9blt0LmRhdGEuaW5kZXhdO2Zvcih2YXIgZT10LnI9MDtlPDQ7KytlKXRbZV0mJnRbZV0ucj50LnImJih0LnI9dFtlXS5yKX1mdW5jdGlvbiBzKCl7aWYoZSl7dmFyIGkscixvPWUubGVuZ3RoO2ZvcihuPW5ldyBBcnJheShvKSxpPTA7aTxvOysraSluWyhyPWVbaV0pLmluZGV4XT0rdChyLGksZSl9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1FXyhudWxsPT10PzE6K3QpKSxvLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7ZT10LHMoKX0sby5pdGVyYXRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSt0LG8pOnJ9LG8uc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K3Qsbyk6aX0sby5yYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpFXygrZSkscygpLG8pOnR9LG99LGZvcmNlTGluazpmdW5jdGlvbiBxTih0KXt2YXIgZSxuLGkscixvLGE9RF8scz1mdW5jdGlvbiBsKHQpe3JldHVybiAxL01hdGgubWluKHJbdC5zb3VyY2UuaW5kZXhdLHJbdC50YXJnZXQuaW5kZXhdKX0sYz1FXygzMCksdT0xO2Z1bmN0aW9uIGgoaSl7Zm9yKHZhciByPTAsYT10Lmxlbmd0aDtyPHU7KytyKWZvcih2YXIgcyxsLGMsaCxkLHAsZixtPTA7bTxhOysrbSloPShjPShzPXRbbV0pLnRhcmdldCkueCtjLnZ4LShsPXMuc291cmNlKS54LWwudnh8fFRfKCksZD1jLnkrYy52eS1sLnktbC52eXx8VF8oKSxkKj1wPSgocD1NYXRoLnNxcnQoaCpoK2QqZCkpLW5bbV0pL3AqaSplW21dLGMudngtPShoKj1wKSooZj1vW21dKSxjLnZ5LT1kKmYsbC52eCs9aCooZj0xLWYpLGwudnkrPWQqZn1mdW5jdGlvbiBkKCl7aWYoaSl7dmFyIHMsbCxjPWkubGVuZ3RoLHU9dC5sZW5ndGgsaD14ZyhpLGEpO2ZvcihzPTAscj1uZXcgQXJyYXkoYyk7czx1OysrcykobD10W3NdKS5pbmRleD1zLCJvYmplY3QiIT10eXBlb2YgbC5zb3VyY2UmJihsLnNvdXJjZT1CXyhoLGwuc291cmNlKSksIm9iamVjdCIhPXR5cGVvZiBsLnRhcmdldCYmKGwudGFyZ2V0PUJfKGgsbC50YXJnZXQpKSxyW2wuc291cmNlLmluZGV4XT0ocltsLnNvdXJjZS5pbmRleF18fDApKzEscltsLnRhcmdldC5pbmRleF09KHJbbC50YXJnZXQuaW5kZXhdfHwwKSsxO2ZvcihzPTAsbz1uZXcgQXJyYXkodSk7czx1OysrcylvW3NdPXJbKGw9dFtzXSkuc291cmNlLmluZGV4XS8ocltsLnNvdXJjZS5pbmRleF0rcltsLnRhcmdldC5pbmRleF0pO2U9bmV3IEFycmF5KHUpLHAoKSxuPW5ldyBBcnJheSh1KSxmKCl9fWZ1bmN0aW9uIHAoKXtpZihpKWZvcih2YXIgbj0wLHI9dC5sZW5ndGg7bjxyOysrbillW25dPStzKHRbbl0sbix0KX1mdW5jdGlvbiBmKCl7aWYoaSlmb3IodmFyIGU9MCxyPXQubGVuZ3RoO2U8cjsrK2UpbltlXT0rYyh0W2VdLGUsdCl9cmV0dXJuIG51bGw9PXQmJih0PVtdKSxoLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7aT10LGQoKX0saC5saW5rcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLGQoKSxoKTp0fSxoLmlkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXQsaCk6YX0saC5pdGVyYXRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSt0LGgpOnV9LGguc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpFXygrdCkscCgpLGgpOnN9LGguZGlzdGFuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpFXygrdCksZigpLGgpOmN9LGh9LGZvcmNlTWFueUJvZHk6ZnVuY3Rpb24gWU4oKXt2YXIgdCxlLG4saSxyPUVfKC0zMCksbz0xLGE9MS8wLHM9LjgxO2Z1bmN0aW9uIGwoaSl7dmFyIHIsbz10Lmxlbmd0aCxhPVBfKHQsSF8sRl8pLnZpc2l0QWZ0ZXIodSk7Zm9yKG49aSxyPTA7cjxvOysrcillPXRbcl0sYS52aXNpdChoKX1mdW5jdGlvbiBjKCl7aWYodCl7dmFyIGUsbixvPXQubGVuZ3RoO2ZvcihpPW5ldyBBcnJheShvKSxlPTA7ZTxvOysrZSlpWyhuPXRbZV0pLmluZGV4XT0rcihuLGUsdCl9fWZ1bmN0aW9uIHUodCl7dmFyIGUsbixyLG8sYSxzPTAsbD0wO2lmKHQubGVuZ3RoKXtmb3Iocj1vPWE9MDthPDQ7KythKShlPXRbYV0pJiYobj1NYXRoLmFicyhlLnZhbHVlKSkmJihzKz1lLnZhbHVlLGwrPW4scis9biplLngsbys9biplLnkpO3QueD1yL2wsdC55PW8vbH1lbHNleyhlPXQpLng9ZS5kYXRhLngsZS55PWUuZGF0YS55O2Rve3MrPWlbZS5kYXRhLmluZGV4XX13aGlsZShlPWUubmV4dCl9dC52YWx1ZT1zfWZ1bmN0aW9uIGgodCxyLGwsYyl7aWYoIXQudmFsdWUpcmV0dXJuITA7dmFyIHU9dC54LWUueCxoPXQueS1lLnksZD1jLXIscD11KnUraCpoO2lmKGQqZC9zPHApcmV0dXJuIHA8YSYmKDA9PT11JiYocCs9KHU9VF8oKSkqdSksMD09PWgmJihwKz0oaD1UXygpKSpoKSxwPG8mJihwPU1hdGguc3FydChvKnApKSxlLnZ4Kz11KnQudmFsdWUqbi9wLGUudnkrPWgqdC52YWx1ZSpuL3ApLCEwO2lmKCEodC5sZW5ndGh8fHA+PWEpKXsodC5kYXRhIT09ZXx8dC5uZXh0KSYmKDA9PT11JiYocCs9KHU9VF8oKSkqdSksMD09PWgmJihwKz0oaD1UXygpKSpoKSxwPG8mJihwPU1hdGguc3FydChvKnApKSk7ZG97dC5kYXRhIT09ZSYmKGUudngrPXUqKGQ9aVt0LmRhdGEuaW5kZXhdKm4vcCksZS52eSs9aCpkKX13aGlsZSh0PXQubmV4dCl9fXJldHVybiBsLmluaXRpYWxpemU9ZnVuY3Rpb24oZSl7dD1lLGMoKX0sbC5zdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkVfKCt0KSxjKCksbCk6cn0sbC5kaXN0YW5jZU1pbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10KnQsbCk6TWF0aC5zcXJ0KG8pfSxsLmRpc3RhbmNlTWF4PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXQqdCxsKTpNYXRoLnNxcnQoYSl9LGwudGhldGE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9dCp0LGwpOk1hdGguc3FydChzKX0sbH0sZm9yY2VSYWRpYWw6ZnVuY3Rpb24gWE4odCxlLG4pe3ZhciBpLHIsbyxhPUVfKC4xKTtmdW5jdGlvbiBzKHQpe2Zvcih2YXIgYT0wLHM9aS5sZW5ndGg7YTxzOysrYSl7dmFyIGw9aVthXSxjPWwueC1lfHwxZS02LHU9bC55LW58fDFlLTYsaD1NYXRoLnNxcnQoYypjK3UqdSksZD0ob1thXS1oKSpyW2FdKnQvaDtsLnZ4Kz1jKmQsbC52eSs9dSpkfX1mdW5jdGlvbiBsKCl7aWYoaSl7dmFyIGUsbj1pLmxlbmd0aDtmb3Iocj1uZXcgQXJyYXkobiksbz1uZXcgQXJyYXkobiksZT0wO2U8bjsrK2Upb1tlXT0rdChpW2VdLGUsaSkscltlXT1pc05hTihvW2VdKT8wOithKGlbZV0sZSxpKX19cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PUVfKCt0KSksbnVsbD09ZSYmKGU9MCksbnVsbD09biYmKG49MCkscy5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe2k9dCxsKCl9LHMuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpFXygrdCksbCgpLHMpOmF9LHMucmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6RV8oK2UpLGwoKSxzKTp0fSxzLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K3Qscyk6ZX0scy55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSt0LHMpOm59LHN9LGZvcmNlU2ltdWxhdGlvbjpmdW5jdGlvbiAkTih0KXt2YXIgZSxuPTEsaT0uMDAxLHI9MS1NYXRoLnBvdyhpLDEvMzAwKSxvPTAsYT0uNixzPXhnKCksbD1BcCh1KSxjPXNjKCJ0aWNrIiwiZW5kIik7ZnVuY3Rpb24gdSgpe2goKSxjLmNhbGwoInRpY2siLGUpLG48aSYmKGwuc3RvcCgpLGMuY2FsbCgiZW5kIixlKSl9ZnVuY3Rpb24gaChpKXt2YXIgbCxjLHU9dC5sZW5ndGg7dm9pZCAwPT09aSYmKGk9MSk7Zm9yKHZhciBoPTA7aDxpOysraClmb3Iobis9KG8tbikqcixzLmVhY2goKGZ1bmN0aW9uKHQpe3Qobil9KSksbD0wO2w8dTsrK2wpbnVsbD09KGM9dFtsXSkuZng/Yy54Kz1jLnZ4Kj1hOihjLng9Yy5meCxjLnZ4PTApLG51bGw9PWMuZnk/Yy55Kz1jLnZ5Kj1hOihjLnk9Yy5meSxjLnZ5PTApO3JldHVybiBlfWZ1bmN0aW9uIGQoKXtmb3IodmFyIGUsbj0wLGk9dC5sZW5ndGg7bjxpOysrbil7aWYoKGU9dFtuXSkuaW5kZXg9bixudWxsIT1lLmZ4JiYoZS54PWUuZngpLG51bGwhPWUuZnkmJihlLnk9ZS5meSksaXNOYU4oZS54KXx8aXNOYU4oZS55KSl7dmFyIHI9MTAqTWF0aC5zcXJ0KG4pLG89bipleTtlLng9cipNYXRoLmNvcyhvKSxlLnk9cipNYXRoLnNpbihvKX0oaXNOYU4oZS52eCl8fGlzTmFOKGUudnkpKSYmKGUudng9ZS52eT0wKX19ZnVuY3Rpb24gcChlKXtyZXR1cm4gZS5pbml0aWFsaXplJiZlLmluaXRpYWxpemUodCksZX1yZXR1cm4gbnVsbD09dCYmKHQ9W10pLGQoKSxlPXt0aWNrOmgscmVzdGFydDpmdW5jdGlvbigpe3JldHVybiBsLnJlc3RhcnQodSksZX0sc3RvcDpmdW5jdGlvbigpe3JldHVybiBsLnN0b3AoKSxlfSxub2RlczpmdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1uLGQoKSxzLmVhY2gocCksZSk6dH0sYWxwaGE6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K3QsZSk6bn0sYWxwaGFNaW46ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K3QsZSk6aX0sYWxwaGFEZWNheTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rdCxlKTorcn0sYWxwaGFUYXJnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89K3QsZSk6b30sdmVsb2NpdHlEZWNheTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0xLXQsZSk6MS1hfSxmb3JjZTpmdW5jdGlvbih0LG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/KG51bGw9PW4/cy5yZW1vdmUodCk6cy5zZXQodCxwKG4pKSxlKTpzLmdldCh0KX0sZmluZDpmdW5jdGlvbihlLG4saSl7dmFyIHIsbyxhLHMsbCxjPTAsdT10Lmxlbmd0aDtmb3IobnVsbD09aT9pPTEvMDppKj1pLGM9MDtjPHU7KytjKShhPShyPWUtKHM9dFtjXSkueCkqcisobz1uLXMueSkqbyk8aSYmKGw9cyxpPWEpO3JldHVybiBsfSxvbjpmdW5jdGlvbih0LG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/KGMub24odCxuKSxlKTpjLm9uKHQpfX19LGZvcmNlWDpmdW5jdGlvbiBLTih0KXt2YXIgZSxuLGkscj1FXyguMSk7ZnVuY3Rpb24gbyh0KXtmb3IodmFyIHIsbz0wLGE9ZS5sZW5ndGg7bzxhOysrbykocj1lW29dKS52eCs9KGlbb10tci54KSpuW29dKnR9ZnVuY3Rpb24gYSgpe2lmKGUpe3ZhciBvLGE9ZS5sZW5ndGg7Zm9yKG49bmV3IEFycmF5KGEpLGk9bmV3IEFycmF5KGEpLG89MDtvPGE7KytvKW5bb109aXNOYU4oaVtvXT0rdChlW29dLG8sZSkpPzA6K3IoZVtvXSxvLGUpfX1yZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9RV8obnVsbD09dD8wOit0KSksby5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe2U9dCxhKCl9LG8uc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpFXygrdCksYSgpLG8pOnJ9LG8ueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOkVfKCtlKSxhKCksbyk6dH0sb30sZm9yY2VZOmZ1bmN0aW9uIFpOKHQpe3ZhciBlLG4saSxyPUVfKC4xKTtmdW5jdGlvbiBvKHQpe2Zvcih2YXIgcixvPTAsYT1lLmxlbmd0aDtvPGE7KytvKShyPWVbb10pLnZ5Kz0oaVtvXS1yLnkpKm5bb10qdH1mdW5jdGlvbiBhKCl7aWYoZSl7dmFyIG8sYT1lLmxlbmd0aDtmb3Iobj1uZXcgQXJyYXkoYSksaT1uZXcgQXJyYXkoYSksbz0wO288YTsrK28pbltvXT1pc05hTihpW29dPSt0KGVbb10sbyxlKSk/MDorcihlW29dLG8sZSl9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1FXyhudWxsPT10PzA6K3QpKSxvLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7ZT10LGEoKX0sby5zdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkVfKCt0KSxhKCksbyk6cn0sby55PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6RV8oK2UpLGEoKSxvKTp0fSxvfSxmb3JtYXREZWZhdWx0TG9jYWxlOnZ5LGdldCBmb3JtYXQoKXtyZXR1cm4gZnl9LGdldCBmb3JtYXRQcmVmaXgoKXtyZXR1cm4gbXl9LGZvcm1hdExvY2FsZTp5eSxmb3JtYXRTcGVjaWZpZXI6YXksRm9ybWF0U3BlY2lmaWVyOnN5LHByZWNpc2lvbkZpeGVkOmJ5LHByZWNpc2lvblByZWZpeDp4eSxwcmVjaXNpb25Sb3VuZDp3eSxnZW9BcmVhOmZ1bmN0aW9uIEpOKHQpe3JldHVybiBjdi5yZXNldCgpLG52KHQsdXYpLDIqY3Z9LGdlb0JvdW5kczpmdW5jdGlvbiBRTih0KXt2YXIgZSxuLGkscixvLGEscztpZihFdj1Ndj0tKHd2PVN2PTEvMCksTHY9W10sbnYodCwkdiksbj1Mdi5sZW5ndGgpe2ZvcihMdi5zb3J0KHJiKSxlPTEsbz1baT1MdlswXV07ZTxuOysrZSlvYihpLChyPUx2W2VdKVswXSl8fG9iKGksclsxXSk/KGliKGlbMF0sclsxXSk+aWIoaVswXSxpWzFdKSYmKGlbMV09clsxXSksaWIoclswXSxpWzFdKT5pYihpWzBdLGlbMV0pJiYoaVswXT1yWzBdKSk6by5wdXNoKGk9cik7Zm9yKGE9LTEvMCxlPTAsaT1vW249by5sZW5ndGgtMV07ZTw9bjtpPXIsKytlKShzPWliKGlbMV0sKHI9b1tlXSlbMF0pKT5hJiYoYT1zLHd2PXJbMF0sTXY9aVsxXSl9cmV0dXJuIEx2PVB2PW51bGwsd3Y9PT0xLzB8fFN2PT09MS8wP1tbTmFOLE5hTl0sW05hTixOYU5dXTpbW3d2LFN2XSxbTXYsRXZdXX0sZ2VvQ2VudHJvaWQ6ZnVuY3Rpb24gdEkodCl7TnY9SXY9T3Y9UnY9enY9RHY9QnY9SHY9RnY9VnY9VXY9MCxudih0LGFiKTt2YXIgZT1GdixuPVZ2LGk9VXYscj1lKmUrbipuK2kqaTtyZXR1cm4gcjxBeSYmKGU9RHYsbj1CdixpPUh2LEl2PEN5JiYoZT1PdixuPVJ2LGk9enYpLChyPWUqZStuKm4raSppKTxBeSk/W05hTixOYU5dOltEeShuLGUpKkl5LFh5KGkvV3kocikpKkl5XX0sZ2VvQ2lyY2xlOmZ1bmN0aW9uIGVJKCl7dmFyIHQsZSxuPV9iKFswLDBdKSxpPV9iKDkwKSxyPV9iKDYpLG89e3BvaW50OmZ1bmN0aW9uIGEobixpKXt0LnB1c2gobj1lKG4saSkpLG5bMF0qPUl5LG5bMV0qPUl5fX07ZnVuY3Rpb24gcygpe3ZhciBhPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpLHM9aS5hcHBseSh0aGlzLGFyZ3VtZW50cykqT3ksbD1yLmFwcGx5KHRoaXMsYXJndW1lbnRzKSpPeTtyZXR1cm4gdD1bXSxlPWJiKC1hWzBdKk95LC1hWzFdKk95LDApLmludmVydCxFYihvLHMsbCwxKSxhPXt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpbdF19LHQ9ZT1udWxsLGF9cmV0dXJuIHMuY2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6X2IoWyt0WzBdLCt0WzFdXSkscyk6bn0scy5yYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpfYigrdCkscyk6aX0scy5wcmVjaXNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpfYigrdCkscyk6cn0sc30sZ2VvQ2xpcEFudGltZXJpZGlhbjpCYixnZW9DbGlwQ2lyY2xlOlZiLGdlb0NsaXBFeHRlbnQ6ZnVuY3Rpb24gbkkoKXt2YXIgdCxlLG4saT0wLHI9MCxvPTk2MCxhPTUwMDtyZXR1cm4gbj17c3RyZWFtOmZ1bmN0aW9uKG4pe3JldHVybiB0JiZlPT09bj90OnQ9R2IoaSxyLG8sYSkoZT1uKX0sZXh0ZW50OmZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPStzWzBdWzBdLHI9K3NbMF1bMV0sbz0rc1sxXVswXSxhPStzWzFdWzFdLHQ9ZT1udWxsLG4pOltbaSxyXSxbbyxhXV19fX0sZ2VvQ2xpcFJlY3RhbmdsZTpHYixnZW9Db250YWluczpmdW5jdGlvbiBpSSh0LGUpe3JldHVybih0JiZyeC5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpP3J4W3QudHlwZV06YXgpKHQsZSl9LGdlb0Rpc3RhbmNlOml4LGdlb0dyYXRpY3VsZTpmeCxnZW9HcmF0aWN1bGUxMDpmdW5jdGlvbiBySSgpe3JldHVybiBmeCgpKCl9LGdlb0ludGVycG9sYXRlOmZ1bmN0aW9uIG9JKHQsZSl7dmFyIG49dFswXSpPeSxpPXRbMV0qT3kscj1lWzBdKk95LG89ZVsxXSpPeSxhPUJ5KGkpLHM9ankoaSksbD1CeShvKSxjPWp5KG8pLHU9YSpCeShuKSxoPWEqankobiksZD1sKkJ5KHIpLHA9bCpqeShyKSxmPTIqWHkoV3koJHkoby1pKSthKmwqJHkoci1uKSkpLG09ankoZiksZz1mP2Z1bmN0aW9uKHQpe3ZhciBlPWp5KHQqPWYpL20sbj1qeShmLXQpL20saT1uKnUrZSpkLHI9bipoK2UqcCxvPW4qcytlKmM7cmV0dXJuW0R5KHIsaSkqSXksRHkobyxXeShpKmkrcipyKSkqSXldfTpmdW5jdGlvbigpe3JldHVybltuKkl5LGkqSXldfTtyZXR1cm4gZy5kaXN0YW5jZT1mLGd9LGdlb0xlbmd0aDp0eCxnZW9QYXRoOmZ1bmN0aW9uIGFJKHQsZSl7dmFyIG4saSxyPTQuNTtmdW5jdGlvbiBvKHQpe3JldHVybiB0JiYoImZ1bmN0aW9uIj09dHlwZW9mIHImJmkucG9pbnRSYWRpdXMoK3IuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxudih0LG4oaSkpKSxpLnJlc3VsdCgpfXJldHVybiBvLmFyZWE9ZnVuY3Rpb24odCl7cmV0dXJuIG52KHQsbih3eCkpLHd4LnJlc3VsdCgpfSxvLm1lYXN1cmU9ZnVuY3Rpb24odCl7cmV0dXJuIG52KHQsbihjdykpLGN3LnJlc3VsdCgpfSxvLmJvdW5kcz1mdW5jdGlvbih0KXtyZXR1cm4gbnYodCxuKFJ4KSksUngucmVzdWx0KCl9LG8uY2VudHJvaWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG52KHQsbihxeCkpLHF4LnJlc3VsdCgpfSxvLnByb2plY3Rpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49bnVsbD09ZT8odD1udWxsLG14KToodD1lKS5zdHJlYW0sbyk6dH0sby5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PXQ/KGU9bnVsbCxuZXcgZHcpOm5ldyBudyhlPXQpLCJmdW5jdGlvbiIhPXR5cGVvZiByJiZpLnBvaW50UmFkaXVzKHIpLG8pOmV9LG8ucG9pbnRSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDooaS5wb2ludFJhZGl1cygrdCksK3QpLG8pOnJ9LG8ucHJvamVjdGlvbih0KS5jb250ZXh0KGUpfSxnZW9BbGJlcnM6UHcsZ2VvQWxiZXJzVXNhOmZ1bmN0aW9uIHNJKCl7dmFyIHQsZSxuLGkscixvLGE9UHcoKSxzPUx3KCkucm90YXRlKFsxNTQsMF0pLmNlbnRlcihbLTIsNTguNV0pLnBhcmFsbGVscyhbNTUsNjVdKSxsPUx3KCkucm90YXRlKFsxNTcsMF0pLmNlbnRlcihbLTMsMTkuOV0pLnBhcmFsbGVscyhbOCwxOF0pLGM9e3BvaW50OmZ1bmN0aW9uKHQsZSl7bz1bdCxlXX19O2Z1bmN0aW9uIHUodCl7dmFyIGU9dFswXSxhPXRbMV07cmV0dXJuIG89bnVsbCxuLnBvaW50KGUsYSksb3x8KGkucG9pbnQoZSxhKSxvKXx8KHIucG9pbnQoZSxhKSxvKX1mdW5jdGlvbiBoKCl7cmV0dXJuIHQ9ZT1udWxsLHV9cmV0dXJuIHUuaW52ZXJ0PWZ1bmN0aW9uKHQpe3ZhciBlPWEuc2NhbGUoKSxuPWEudHJhbnNsYXRlKCksaT0odFswXS1uWzBdKS9lLHI9KHRbMV0tblsxXSkvZTtyZXR1cm4ocj49LjEyJiZyPC4yMzQmJmk+PS0uNDI1JiZpPC0uMjE0P3M6cj49LjE2NiYmcjwuMjM0JiZpPj0tLjIxNCYmaTwtLjExNT9sOmEpLmludmVydCh0KX0sdS5zdHJlYW09ZnVuY3Rpb24obil7cmV0dXJuIHQmJmU9PT1uP3Q6dD0oZnVuY3Rpb24gaSh0KXt2YXIgZT10Lmxlbmd0aDtyZXR1cm57cG9pbnQ6ZnVuY3Rpb24obixpKXtmb3IodmFyIHI9LTE7KytyPGU7KXRbcl0ucG9pbnQobixpKX0sc3BoZXJlOmZ1bmN0aW9uKCl7Zm9yKHZhciBuPS0xOysrbjxlOyl0W25dLnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtmb3IodmFyIG49LTE7KytuPGU7KXRbbl0ubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtmb3IodmFyIG49LTE7KytuPGU7KXRbbl0ubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtmb3IodmFyIG49LTE7KytuPGU7KXRbbl0ucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtmb3IodmFyIG49LTE7KytuPGU7KXRbbl0ucG9seWdvbkVuZCgpfX19KShbYS5zdHJlYW0oZT1uKSxzLnN0cmVhbShuKSxsLnN0cmVhbShuKV0pfSx1LnByZWNpc2lvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYS5wcmVjaXNpb24odCkscy5wcmVjaXNpb24odCksbC5wcmVjaXNpb24odCksaCgpKTphLnByZWNpc2lvbigpfSx1LnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhLnNjYWxlKHQpLHMuc2NhbGUoLjM1KnQpLGwuc2NhbGUodCksdS50cmFuc2xhdGUoYS50cmFuc2xhdGUoKSkpOmEuc2NhbGUoKX0sdS50cmFuc2xhdGU9ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGEudHJhbnNsYXRlKCk7dmFyIGU9YS5zY2FsZSgpLG89K3RbMF0sdT0rdFsxXTtyZXR1cm4gbj1hLnRyYW5zbGF0ZSh0KS5jbGlwRXh0ZW50KFtbby0uNDU1KmUsdS0uMjM4KmVdLFtvKy40NTUqZSx1Ky4yMzgqZV1dKS5zdHJlYW0oYyksaT1zLnRyYW5zbGF0ZShbby0uMzA3KmUsdSsuMjAxKmVdKS5jbGlwRXh0ZW50KFtbby0uNDI1KmUrQ3ksdSsuMTIqZStDeV0sW28tLjIxNCplLUN5LHUrLjIzNCplLUN5XV0pLnN0cmVhbShjKSxyPWwudHJhbnNsYXRlKFtvLS4yMDUqZSx1Ky4yMTIqZV0pLmNsaXBFeHRlbnQoW1tvLS4yMTQqZStDeSx1Ky4xNjYqZStDeV0sW28tLjExNSplLUN5LHUrLjIzNCplLUN5XV0pLnN0cmVhbShjKSxoKCl9LHUuZml0RXh0ZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIF93KHUsdCxlKX0sdS5maXRTaXplPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHl3KHUsdCxlKX0sdS5maXRXaWR0aD1mdW5jdGlvbih0LGUpe3JldHVybiB2dyh1LHQsZSl9LHUuZml0SGVpZ2h0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGJ3KHUsdCxlKX0sdS5zY2FsZSgxMDcwKX0sZ2VvQXppbXV0aGFsRXF1YWxBcmVhOmZ1bmN0aW9uIGxJKCl7cmV0dXJuIFR3KE93KS5zY2FsZSgxMjQuNzUpLmNsaXBBbmdsZSgxNzkuOTk5KX0sZ2VvQXppbXV0aGFsRXF1YWxBcmVhUmF3Ok93LGdlb0F6aW11dGhhbEVxdWlkaXN0YW50OmZ1bmN0aW9uIGNJKCl7cmV0dXJuIFR3KFJ3KS5zY2FsZSg3OS40MTg4KS5jbGlwQW5nbGUoMTc5Ljk5OSl9LGdlb0F6aW11dGhhbEVxdWlkaXN0YW50UmF3OlJ3LGdlb0NvbmljQ29uZm9ybWFsOmZ1bmN0aW9uIHVJKCl7cmV0dXJuIEF3KEh3KS5zY2FsZSgxMDkuNSkucGFyYWxsZWxzKFszMCwzMF0pfSxnZW9Db25pY0NvbmZvcm1hbFJhdzpIdyxnZW9Db25pY0VxdWFsQXJlYTpMdyxnZW9Db25pY0VxdWFsQXJlYVJhdzprdyxnZW9Db25pY0VxdWlkaXN0YW50OmZ1bmN0aW9uIGhJKCl7cmV0dXJuIEF3KFZ3KS5zY2FsZSgxMzEuMTU0KS5jZW50ZXIoWzAsMTMuOTM4OV0pfSxnZW9Db25pY0VxdWlkaXN0YW50UmF3OlZ3LGdlb0VxdWFsRWFydGg6ZnVuY3Rpb24gZEkoKXtyZXR1cm4gVHcoWXcpLnNjYWxlKDE3Ny4xNTgpfSxnZW9FcXVhbEVhcnRoUmF3Oll3LGdlb0VxdWlyZWN0YW5ndWxhcjpmdW5jdGlvbiBwSSgpe3JldHVybiBUdyhGdykuc2NhbGUoMTUyLjYzKX0sZ2VvRXF1aXJlY3Rhbmd1bGFyUmF3OkZ3LGdlb0dub21vbmljOmZ1bmN0aW9uIGZJKCl7cmV0dXJuIFR3KFh3KS5zY2FsZSgxNDQuMDQ5KS5jbGlwQW5nbGUoNjApfSxnZW9Hbm9tb25pY1JhdzpYdyxnZW9JZGVudGl0eTpmdW5jdGlvbiBtSSgpe3ZhciB0LGUsbixpLHIsbyxhLHM9MSxsPTAsYz0wLHU9MSxoPTEsZD0wLHA9bnVsbCxmPTEsbT0xLGc9Zncoe3BvaW50OmZ1bmN0aW9uKHQsZSl7dmFyIG49dihbdCxlXSk7dGhpcy5zdHJlYW0ucG9pbnQoblswXSxuWzFdKX19KSxfPW14O2Z1bmN0aW9uIHkoKXtyZXR1cm4gZj1zKnUsbT1zKmgsbz1hPW51bGwsdn1mdW5jdGlvbiB2KG4pe3ZhciBpPW5bMF0qZixyPW5bMV0qbTtpZihkKXt2YXIgbz1yKnQtaSplO2k9aSp0K3IqZSxyPW99cmV0dXJuW2krbCxyK2NdfXJldHVybiB2LmludmVydD1mdW5jdGlvbihuKXt2YXIgaT1uWzBdLWwscj1uWzFdLWM7aWYoZCl7dmFyIG89cip0K2kqZTtpPWkqdC1yKmUscj1vfXJldHVybltpL2Ysci9tXX0sdi5zdHJlYW09ZnVuY3Rpb24odCl7cmV0dXJuIG8mJmE9PT10P286bz1nKF8oYT10KSl9LHYucG9zdGNsaXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KF89dCxwPW49aT1yPW51bGwseSgpKTpffSx2LmNsaXBFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KF89bnVsbD09dD8ocD1uPWk9cj1udWxsLG14KTpHYihwPSt0WzBdWzBdLG49K3RbMF1bMV0saT0rdFsxXVswXSxyPSt0WzFdWzFdKSx5KCkpOm51bGw9PXA/bnVsbDpbW3Asbl0sW2kscl1dfSx2LnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSt0LHkoKSk6c30sdi50cmFuc2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9K3RbMF0sYz0rdFsxXSx5KCkpOltsLGNdfSx2LmFuZ2xlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPWp5KGQ9biUzNjAqT3kpLHQ9QnkoZCkseSgpKTpkKkl5fSx2LnJlZmxlY3RYPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXQ/LTE6MSx5KCkpOnU8MH0sdi5yZWZsZWN0WT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD10Py0xOjEseSgpKTpoPDB9LHYuZml0RXh0ZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIF93KHYsdCxlKX0sdi5maXRTaXplPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHl3KHYsdCxlKX0sdi5maXRXaWR0aD1mdW5jdGlvbih0LGUpe3JldHVybiB2dyh2LHQsZSl9LHYuZml0SGVpZ2h0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGJ3KHYsdCxlKX0sdn0sZ2VvUHJvamVjdGlvbjpUdyxnZW9Qcm9qZWN0aW9uTXV0YXRvcjpDdyxnZW9NZXJjYXRvcjpmdW5jdGlvbiBnSSgpe3JldHVybiBEdyh6dykuc2NhbGUoOTYxL055KX0sZ2VvTWVyY2F0b3JSYXc6encsZ2VvTmF0dXJhbEVhcnRoMTpmdW5jdGlvbiBfSSgpe3JldHVybiBUdygkdykuc2NhbGUoMTc1LjI5NSl9LGdlb05hdHVyYWxFYXJ0aDFSYXc6JHcsZ2VvT3J0aG9ncmFwaGljOmZ1bmN0aW9uIHlJKCl7cmV0dXJuIFR3KEt3KS5zY2FsZSgyNDkuNSkuY2xpcEFuZ2xlKDkwLjAwMDAwMSl9LGdlb09ydGhvZ3JhcGhpY1JhdzpLdyxnZW9TdGVyZW9ncmFwaGljOmZ1bmN0aW9uIHZJKCl7cmV0dXJuIFR3KFp3KS5zY2FsZSgyNTApLmNsaXBBbmdsZSgxNDIpfSxnZW9TdGVyZW9ncmFwaGljUmF3Olp3LGdlb1RyYW5zdmVyc2VNZXJjYXRvcjpmdW5jdGlvbiBiSSgpe3ZhciB0PUR3KEp3KSxlPXQuY2VudGVyLG49dC5yb3RhdGU7cmV0dXJuIHQuY2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2UoWy10WzFdLHRbMF1dKTpbKHQ9ZSgpKVsxXSwtdFswXV19LHQucm90YXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP24oW3RbMF0sdFsxXSx0Lmxlbmd0aD4yP3RbMl0rOTA6OTBdKTpbKHQ9bigpKVswXSx0WzFdLHRbMl0tOTBdfSxuKFswLDAsOTBdKS5zY2FsZSgxNTkuMTU1KX0sZ2VvVHJhbnN2ZXJzZU1lcmNhdG9yUmF3Okp3LGdlb1JvdGF0aW9uOk1iLGdlb1N0cmVhbTpudixnZW9UcmFuc2Zvcm06ZnVuY3Rpb24geEkodCl7cmV0dXJue3N0cmVhbTpmdyh0KX19LGNsdXN0ZXI6ZnVuY3Rpb24gd0koKXt2YXIgdD1RdyxlPTEsbj0xLGk9ITE7ZnVuY3Rpb24gcihyKXt2YXIgbyxhPTA7ci5lYWNoQWZ0ZXIoKGZ1bmN0aW9uKGUpe3ZhciBuPWUuY2hpbGRyZW47bj8oZS54PShmdW5jdGlvbiBpKHQpe3JldHVybiB0LnJlZHVjZSh0UywwKS90Lmxlbmd0aH0pKG4pLGUueT0oZnVuY3Rpb24gcih0KXtyZXR1cm4gMSt0LnJlZHVjZShlUywwKX0pKG4pKTooZS54PW8/YSs9dChlLG8pOjAsZS55PTAsbz1lKX0pKTt2YXIgcz0oZnVuY3Rpb24gbCh0KXtmb3IodmFyIGU7ZT10LmNoaWxkcmVuOyl0PWVbMF07cmV0dXJuIHR9KShyKSxjPShmdW5jdGlvbiB1KHQpe2Zvcih2YXIgZTtlPXQuY2hpbGRyZW47KXQ9ZVtlLmxlbmd0aC0xXTtyZXR1cm4gdH0pKHIpLGg9cy54LXQocyxjKS8yLGQ9Yy54K3QoYyxzKS8yO3JldHVybiByLmVhY2hBZnRlcihpP2Z1bmN0aW9uKHQpe3QueD0odC54LXIueCkqZSx0Lnk9KHIueS10LnkpKm59OmZ1bmN0aW9uKHQpe3QueD0odC54LWgpLyhkLWgpKmUsdC55PSgxLShyLnk/dC55L3IueToxKSkqbn0pfXJldHVybiByLnNlcGFyYXRpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxyKTp0fSxyLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ITEsZT0rdFswXSxuPSt0WzFdLHIpOmk/bnVsbDpbZSxuXX0sci5ub2RlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0hMCxlPSt0WzBdLG49K3RbMV0scik6aT9bZSxuXTpudWxsfSxyfSxoaWVyYXJjaHk6aVMscGFjazpmdW5jdGlvbiBTSSgpe3ZhciB0PW51bGwsZT0xLG49MSxpPXpTO2Z1bmN0aW9uIHIocil7cmV0dXJuIHIueD1lLzIsci55PW4vMix0P3IuZWFjaEJlZm9yZShIUyh0KSkuZWFjaEFmdGVyKEZTKGksLjUpKS5lYWNoQmVmb3JlKFZTKDEpKTpyLmVhY2hCZWZvcmUoSFMoQlMpKS5lYWNoQWZ0ZXIoRlMoelMsMSkpLmVhY2hBZnRlcihGUyhpLHIuci9NYXRoLm1pbihlLG4pKSkuZWFjaEJlZm9yZShWUyhNYXRoLm1pbihlLG4pLygyKnIucikpKSxyfXJldHVybiByLnJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1PUyhlKSxyKTp0fSxyLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K3RbMF0sbj0rdFsxXSxyKTpbZSxuXX0sci5wYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6RFMoK3QpLHIpOml9LHJ9LHBhY2tTaWJsaW5nczpmdW5jdGlvbiBNSSh0KXtyZXR1cm4gSVModCksdH0scGFja0VuY2xvc2U6eFMscGFydGl0aW9uOmZ1bmN0aW9uIEVJKCl7dmFyIHQ9MSxlPTEsbj0wLGk9ITE7ZnVuY3Rpb24gcihyKXt2YXIgbz1yLmhlaWdodCsxO3JldHVybiByLngwPXIueTA9bixyLngxPXQsci55MT1lL28sci5lYWNoQmVmb3JlKChmdW5jdGlvbiBhKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKGkpe2kuY2hpbGRyZW4mJmpTKGksaS54MCx0KihpLmRlcHRoKzEpL2UsaS54MSx0KihpLmRlcHRoKzIpL2UpO3ZhciByPWkueDAsbz1pLnkwLGE9aS54MS1uLHM9aS55MS1uO2E8ciYmKHI9YT0ocithKS8yKSxzPG8mJihvPXM9KG8rcykvMiksaS54MD1yLGkueTA9byxpLngxPWEsaS55MT1zfX0pKGUsbykpLGkmJnIuZWFjaEJlZm9yZShVUykscn1yZXR1cm4gci5yb3VuZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0hIXQscik6aX0sci5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStuWzBdLGU9K25bMV0scik6W3QsZV19LHIucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rdCxyKTpufSxyfSxzdHJhdGlmeTpmdW5jdGlvbiBUSSgpe3ZhciB0PXFTLGU9WVM7ZnVuY3Rpb24gbihuKXt2YXIgaSxyLG8sYSxzLGwsYyx1PW4ubGVuZ3RoLGg9bmV3IEFycmF5KHUpLGQ9e307Zm9yKHI9MDtyPHU7KytyKXM9aFtyXT1uZXcgc1MoaT1uW3JdKSxudWxsIT0obD10KGkscixuKSkmJihsKz0iIikmJihkW2M9IiQiKyhzLmlkPWwpXT1jIGluIGQ/V1M6cyk7Zm9yKHI9MDtyPHU7KytyKWlmKHM9aFtyXSxudWxsIT0obD1lKG5bcl0scixuKSkmJihsKz0iIikpe2lmKCEoYT1kWyIkIitsXSkpdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nOiAiK2wpO2lmKGE9PT1XUyl0aHJvdyBuZXcgRXJyb3IoImFtYmlndW91czogIitsKTthLmNoaWxkcmVuP2EuY2hpbGRyZW4ucHVzaChzKTphLmNoaWxkcmVuPVtzXSxzLnBhcmVudD1hfWVsc2V7aWYobyl0aHJvdyBuZXcgRXJyb3IoIm11bHRpcGxlIHJvb3RzIik7bz1zfWlmKCFvKXRocm93IG5ldyBFcnJvcigibm8gcm9vdCIpO2lmKG8ucGFyZW50PUdTLG8uZWFjaEJlZm9yZSgoZnVuY3Rpb24odCl7dC5kZXB0aD10LnBhcmVudC5kZXB0aCsxLC0tdX0pKS5lYWNoQmVmb3JlKGFTKSxvLnBhcmVudD1udWxsLHU+MCl0aHJvdyBuZXcgRXJyb3IoImN5Y2xlIik7cmV0dXJuIG99cmV0dXJuIG4uaWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9UlMoZSksbik6dH0sbi5wYXJlbnRJZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1SUyh0KSxuKTplfSxufSx0cmVlOmZ1bmN0aW9uIENJKCl7dmFyIHQ9WFMsZT0xLG49MSxpPW51bGw7ZnVuY3Rpb24gcihyKXt2YXIgbD0oZnVuY3Rpb24gYyh0KXtmb3IodmFyIGUsbixpLHIsbyxhPW5ldyBRUyh0LDApLHM9W2FdO2U9cy5wb3AoKTspaWYoaT1lLl8uY2hpbGRyZW4pZm9yKGUuY2hpbGRyZW49bmV3IEFycmF5KG89aS5sZW5ndGgpLHI9by0xO3I+PTA7LS1yKXMucHVzaChuPWUuY2hpbGRyZW5bcl09bmV3IFFTKGlbcl0scikpLG4ucGFyZW50PWU7cmV0dXJuKGEucGFyZW50PW5ldyBRUyhudWxsLDApKS5jaGlsZHJlbj1bYV0sYX0pKHIpO2lmKGwuZWFjaEFmdGVyKG8pLGwucGFyZW50Lm09LWwueixsLmVhY2hCZWZvcmUoYSksaSlyLmVhY2hCZWZvcmUocyk7ZWxzZXt2YXIgdT1yLGg9cixkPXI7ci5lYWNoQmVmb3JlKChmdW5jdGlvbih0KXt0Lng8dS54JiYodT10KSx0Lng+aC54JiYoaD10KSx0LmRlcHRoPmQuZGVwdGgmJihkPXQpfSkpO3ZhciBwPXU9PT1oPzE6dCh1LGgpLzIsZj1wLXUueCxtPWUvKGgueCtwK2YpLGc9bi8oZC5kZXB0aHx8MSk7ci5lYWNoQmVmb3JlKChmdW5jdGlvbih0KXt0Lng9KHQueCtmKSptLHQueT10LmRlcHRoKmd9KSl9cmV0dXJuIHJ9ZnVuY3Rpb24gbyhlKXt2YXIgbj1lLmNoaWxkcmVuLGk9ZS5wYXJlbnQuY2hpbGRyZW4scj1lLmk/aVtlLmktMV06bnVsbDtpZihuKXshKGZ1bmN0aW9uIG8odCl7Zm9yKHZhciBlLG49MCxpPTAscj10LmNoaWxkcmVuLG89ci5sZW5ndGg7LS1vPj0wOykoZT1yW29dKS56Kz1uLGUubSs9bixuKz1lLnMrKGkrPWUuYyl9KShlKTt2YXIgYT0oblswXS56K25bbi5sZW5ndGgtMV0ueikvMjtyPyhlLno9ci56K3QoZS5fLHIuXyksZS5tPWUuei1hKTplLno9YX1lbHNlIHImJihlLno9ci56K3QoZS5fLHIuXykpO2UucGFyZW50LkE9KGZ1bmN0aW9uIHMoZSxuLGkpe2lmKG4pe2Zvcih2YXIgcixvPWUsYT1lLHM9bixsPW8ucGFyZW50LmNoaWxkcmVuWzBdLGM9by5tLHU9YS5tLGg9cy5tLGQ9bC5tO3M9S1Mocyksbz0kUyhvKSxzJiZvOylsPSRTKGwpLChhPUtTKGEpKS5hPWUsKHI9cy56K2gtby56LWMrdChzLl8sby5fKSk+MCYmKFpTKEpTKHMsZSxpKSxlLHIpLGMrPXIsdSs9ciksaCs9cy5tLGMrPW8ubSxkKz1sLm0sdSs9YS5tO3MmJiFLUyhhKSYmKGEudD1zLGEubSs9aC11KSxvJiYhJFMobCkmJihsLnQ9byxsLm0rPWMtZCxpPWUpfXJldHVybiBpfSkoZSxyLGUucGFyZW50LkF8fGlbMF0pfWZ1bmN0aW9uIGEodCl7dC5fLng9dC56K3QucGFyZW50Lm0sdC5tKz10LnBhcmVudC5tfWZ1bmN0aW9uIHModCl7dC54Kj1lLHQueT10LmRlcHRoKm59cmV0dXJuIHIuc2VwYXJhdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLHIpOnR9LHIuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0hMSxlPSt0WzBdLG49K3RbMV0scik6aT9udWxsOltlLG5dfSxyLm5vZGVTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSEwLGU9K3RbMF0sbj0rdFsxXSxyKTppP1tlLG5dOm51bGx9LHJ9LHRyZWVtYXA6ZnVuY3Rpb24gQUkoKXt2YXIgdD1pTSxlPSExLG49MSxpPTEscj1bMF0sbz16UyxhPXpTLHM9elMsbD16UyxjPXpTO2Z1bmN0aW9uIHUodCl7cmV0dXJuIHQueDA9dC55MD0wLHQueDE9bix0LnkxPWksdC5lYWNoQmVmb3JlKGgpLHI9WzBdLGUmJnQuZWFjaEJlZm9yZShVUyksdH1mdW5jdGlvbiBoKGUpe3ZhciBuPXJbZS5kZXB0aF0saT1lLngwK24sdT1lLnkwK24saD1lLngxLW4sZD1lLnkxLW47aDxpJiYoaT1oPShpK2gpLzIpLGQ8dSYmKHU9ZD0odStkKS8yKSxlLngwPWksZS55MD11LGUueDE9aCxlLnkxPWQsZS5jaGlsZHJlbiYmKG49cltlLmRlcHRoKzFdPW8oZSkvMixpKz1jKGUpLW4sdSs9YShlKS1uLChoLT1zKGUpLW4pPGkmJihpPWg9KGkraCkvMiksKGQtPWwoZSktbik8dSYmKHU9ZD0odStkKS8yKSx0KGUsaSx1LGgsZCkpfXJldHVybiB1LnJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSEhdCx1KTplfSx1LnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K3RbMF0saT0rdFsxXSx1KTpbbixpXX0sdS50aWxlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PVJTKGUpLHUpOnR9LHUucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD91LnBhZGRpbmdJbm5lcih0KS5wYWRkaW5nT3V0ZXIodCk6dS5wYWRkaW5nSW5uZXIoKX0sdS5wYWRkaW5nSW5uZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpEUygrdCksdSk6b30sdS5wYWRkaW5nT3V0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dS5wYWRkaW5nVG9wKHQpLnBhZGRpbmdSaWdodCh0KS5wYWRkaW5nQm90dG9tKHQpLnBhZGRpbmdMZWZ0KHQpOnUucGFkZGluZ1RvcCgpfSx1LnBhZGRpbmdUb3A9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpEUygrdCksdSk6YX0sdS5wYWRkaW5nUmlnaHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpEUygrdCksdSk6c30sdS5wYWRkaW5nQm90dG9tPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6RFMoK3QpLHUpOmx9LHUucGFkZGluZ0xlZnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpEUygrdCksdSk6Y30sdX0sdHJlZW1hcEJpbmFyeTpmdW5jdGlvbiBrSSh0LGUsbixpLHIpe3ZhciBvLGEscz10LmNoaWxkcmVuLGw9cy5sZW5ndGgsYz1uZXcgQXJyYXkobCsxKTtmb3IoY1swXT1hPW89MDtvPGw7KytvKWNbbysxXT1hKz1zW29dLnZhbHVlOyEoZnVuY3Rpb24gdChlLG4saSxyLG8sYSxsKXtpZihlPj1uLTEpe3ZhciB1PXNbZV07cmV0dXJuIHUueDA9cix1LnkwPW8sdS54MT1hLHZvaWQodS55MT1sKX1mb3IodmFyIGg9Y1tlXSxkPWkvMitoLHA9ZSsxLGY9bi0xO3A8Zjspe3ZhciBtPXArZj4+PjE7Y1ttXTxkP3A9bSsxOmY9bX1kLWNbcC0xXTxjW3BdLWQmJmUrMTxwJiYtLXA7dmFyIGc9Y1twXS1oLF89aS1nO2lmKGEtcj5sLW8pe3ZhciB5PShyKl8rYSpnKS9pO3QoZSxwLGcscixvLHksbCksdChwLG4sXyx5LG8sYSxsKX1lbHNle3ZhciB2PShvKl8rbCpnKS9pO3QoZSxwLGcscixvLGEsdiksdChwLG4sXyxyLHYsYSxsKX19KSgwLGwsdC52YWx1ZSxlLG4saSxyKX0sdHJlZW1hcERpY2U6alMsdHJlZW1hcFNsaWNlOnRNLHRyZWVtYXBTbGljZURpY2U6ZnVuY3Rpb24gTEkodCxlLG4saSxyKXsoMSZ0LmRlcHRoP3RNOmpTKSh0LGUsbixpLHIpfSx0cmVlbWFwU3F1YXJpZnk6aU0sdHJlZW1hcFJlc3F1YXJpZnk6ck0saW50ZXJwb2xhdGU6VWQsaW50ZXJwb2xhdGVBcnJheTpmdW5jdGlvbiBQSSh0LGUpe3JldHVybihPZChlKT9JZDpSZCkodCxlKX0saW50ZXJwb2xhdGVCYXNpczpTZCxpbnRlcnBvbGF0ZUJhc2lzQ2xvc2VkOk1kLGludGVycG9sYXRlRGF0ZTp6ZCxpbnRlcnBvbGF0ZURpc2NyZXRlOmZ1bmN0aW9uIE5JKHQpe3ZhciBlPXQubGVuZ3RoO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdFtNYXRoLm1heCgwLE1hdGgubWluKGUtMSxNYXRoLmZsb29yKG4qZSkpKV19fSxpbnRlcnBvbGF0ZUh1ZTpmdW5jdGlvbiBJSSh0LGUpe3ZhciBuPUNkKCt0LCtlKTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9bih0KTtyZXR1cm4gZS0zNjAqTWF0aC5mbG9vcihlLzM2MCl9fSxpbnRlcnBvbGF0ZU51bWJlcjpEZCxpbnRlcnBvbGF0ZU51bWJlckFycmF5OklkLGludGVycG9sYXRlT2JqZWN0OkJkLGludGVycG9sYXRlUm91bmQ6amQsaW50ZXJwb2xhdGVTdHJpbmc6VmQsaW50ZXJwb2xhdGVUcmFuc2Zvcm1Dc3M6SmQsaW50ZXJwb2xhdGVUcmFuc2Zvcm1Tdmc6dHAsaW50ZXJwb2xhdGVab29tOnJwLGludGVycG9sYXRlUmdiOmtkLGludGVycG9sYXRlUmdiQmFzaXM6UGQsaW50ZXJwb2xhdGVSZ2JCYXNpc0Nsb3NlZDpOZCxpbnRlcnBvbGF0ZUhzbDphcCxpbnRlcnBvbGF0ZUhzbExvbmc6c3AsaW50ZXJwb2xhdGVMYWI6bHAsaW50ZXJwb2xhdGVIY2w6dXAsaW50ZXJwb2xhdGVIY2xMb25nOmhwLGludGVycG9sYXRlQ3ViZWhlbGl4Om1wLGludGVycG9sYXRlQ3ViZWhlbGl4TG9uZzpncCxwaWVjZXdpc2U6ZnVuY3Rpb24gT0kodCxlKXtmb3IodmFyIG49MCxpPWUubGVuZ3RoLTEscj1lWzBdLG89bmV3IEFycmF5KGk8MD8wOmkpO248aTspb1tuXT10KHIscj1lWysrbl0pO3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgwLE1hdGgubWluKGktMSxNYXRoLmZsb29yKHQqPWkpKSk7cmV0dXJuIG9bZV0odC1lKX19LHF1YW50aXplOmZ1bmN0aW9uIFJJKHQsZSl7Zm9yKHZhciBuPW5ldyBBcnJheShlKSxpPTA7aTxlOysraSluW2ldPXQoaS8oZS0xKSk7cmV0dXJuIG59LHBhdGg6cGcscG9seWdvbkFyZWE6ZnVuY3Rpb24gekkodCl7Zm9yKHZhciBlLG49LTEsaT10Lmxlbmd0aCxyPXRbaS0xXSxvPTA7KytuPGk7KW8rPShlPXIpWzFdKihyPXRbbl0pWzBdLWVbMF0qclsxXTtyZXR1cm4gby8yfSxwb2x5Z29uQ2VudHJvaWQ6ZnVuY3Rpb24gREkodCl7Zm9yKHZhciBlLG4saT0tMSxyPXQubGVuZ3RoLG89MCxhPTAscz10W3ItMV0sbD0wOysraTxyOylsKz1uPShlPXMpWzBdKihzPXRbaV0pWzFdLXNbMF0qZVsxXSxvKz0oZVswXStzWzBdKSpuLGErPShlWzFdK3NbMV0pKm47cmV0dXJuW28vKGwqPTMpLGEvbF19LHBvbHlnb25IdWxsOmZ1bmN0aW9uIEJJKHQpe2lmKChuPXQubGVuZ3RoKTwzKXJldHVybiBudWxsO3ZhciBlLG4saT1uZXcgQXJyYXkobikscj1uZXcgQXJyYXkobik7Zm9yKGU9MDtlPG47KytlKWlbZV09Wyt0W2VdWzBdLCt0W2VdWzFdLGVdO2ZvcihpLnNvcnQoYU0pLGU9MDtlPG47KytlKXJbZV09W2lbZV1bMF0sLWlbZV1bMV1dO3ZhciBvPXNNKGkpLGE9c00ocikscz1hWzBdPT09b1swXSxsPWFbYS5sZW5ndGgtMV09PT1vW28ubGVuZ3RoLTFdLGM9W107Zm9yKGU9by5sZW5ndGgtMTtlPj0wOy0tZSljLnB1c2godFtpW29bZV1dWzJdXSk7Zm9yKGU9K3M7ZTxhLmxlbmd0aC1sOysrZSljLnB1c2godFtpW2FbZV1dWzJdXSk7cmV0dXJuIGN9LHBvbHlnb25Db250YWluczpmdW5jdGlvbiBISSh0LGUpe2Zvcih2YXIgbixpLHI9dC5sZW5ndGgsbz10W3ItMV0sYT1lWzBdLHM9ZVsxXSxsPW9bMF0sYz1vWzFdLHU9ITEsaD0wO2g8cjsrK2gpbj0obz10W2hdKVswXSwoaT1vWzFdKT5zIT1jPnMmJmE8KGwtbikqKHMtaSkvKGMtaSkrbiYmKHU9IXUpLGw9bixjPWk7cmV0dXJuIHV9LHBvbHlnb25MZW5ndGg6ZnVuY3Rpb24gRkkodCl7Zm9yKHZhciBlLG4saT0tMSxyPXQubGVuZ3RoLG89dFtyLTFdLGE9b1swXSxzPW9bMV0sbD0wOysraTxyOyllPWEsbj1zLGUtPWE9KG89dFtpXSlbMF0sbi09cz1vWzFdLGwrPU1hdGguc3FydChlKmUrbipuKTtyZXR1cm4gbH0scXVhZHRyZWU6UF8scmFuZG9tVW5pZm9ybTpjTSxyYW5kb21Ob3JtYWw6dU0scmFuZG9tTG9nTm9ybWFsOmhNLHJhbmRvbUJhdGVzOnBNLHJhbmRvbUlyd2luSGFsbDpkTSxyYW5kb21FeHBvbmVudGlhbDpmTSxzY2FsZUJhbmQ6d00sc2NhbGVQb2ludDpNTSxzY2FsZUlkZW50aXR5OmZ1bmN0aW9uIHQoZSl7dmFyIG47ZnVuY3Rpb24gaSh0KXtyZXR1cm4gaXNOYU4odD0rdCk/bjp0fXJldHVybiBpLmludmVydD1pLGkuZG9tYWluPWkucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9eU0uY2FsbCh0LEVNKSxpKTplLnNsaWNlKCl9LGkudW5rbm93bj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LGkpOm59LGkuY29weT1mdW5jdGlvbigpe3JldHVybiB0KGUpLnVua25vd24obil9LGU9YXJndW1lbnRzLmxlbmd0aD95TS5jYWxsKGUsRU0pOlswLDFdLHpNKGkpfSxzY2FsZUxpbmVhcjpETSxzY2FsZUxvZzpxTSxzY2FsZVN5bWxvZzpmdW5jdGlvbiB0KCl7dmFyIGU9JE0oSU0oKSk7cmV0dXJuIGUuY29weT1mdW5jdGlvbigpe3JldHVybiBOTShlLHQoKSkuY29uc3RhbnQoZS5jb25zdGFudCgpKX0sbU0uYXBwbHkoZSxhcmd1bWVudHMpfSxzY2FsZU9yZGluYWw6eE0sc2NhbGVJbXBsaWNpdDpiTSxzY2FsZVBvdzp0RSxzY2FsZVNxcnQ6ZnVuY3Rpb24gVkkoKXtyZXR1cm4gdEUuYXBwbHkobnVsbCxhcmd1bWVudHMpLmV4cG9uZW50KC41KX0sc2NhbGVRdWFudGlsZTplRSxzY2FsZVF1YW50aXplOm5FLHNjYWxlVGhyZXNob2xkOmZ1bmN0aW9uIHQoKXt2YXIgZSxuPVsuNV0saT1bMCwxXSxyPTE7ZnVuY3Rpb24gbyh0KXtyZXR1cm4gdDw9dD9pW3dsKG4sdCwwLHIpXTplfXJldHVybiBvLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj12TS5jYWxsKHQpLHI9TWF0aC5taW4obi5sZW5ndGgsaS5sZW5ndGgtMSksbyk6bi5zbGljZSgpfSxvLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXZNLmNhbGwodCkscj1NYXRoLm1pbihuLmxlbmd0aCxpLmxlbmd0aC0xKSxvKTppLnNsaWNlKCl9LG8uaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHQpe3ZhciBlPWkuaW5kZXhPZih0KTtyZXR1cm5bbltlLTFdLG5bZV1dfSxvLnVua25vd249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxvKTplfSxvLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gdCgpLmRvbWFpbihuKS5yYW5nZShpKS51bmtub3duKGUpfSxtTS5hcHBseShvLGFyZ3VtZW50cyl9LHNjYWxlVGltZTpZQyxzY2FsZVV0YzpmdW5jdGlvbiBVSSgpe3JldHVybiBtTS5hcHBseShxQyhjVCxzVCxZRSxHRSxVRSxGRSxwRSxhRSx5VCkuZG9tYWluKFtEYXRlLlVUQygyZTMsMCwxKSxEYXRlLlVUQygyZTMsMCwyKV0pLGFyZ3VtZW50cyl9LHNjYWxlU2VxdWVudGlhbDpmdW5jdGlvbiB0KCl7dmFyIGU9ek0oWEMoKShDTSkpO3JldHVybiBlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gJEMoZSx0KCkpfSxnTS5hcHBseShlLGFyZ3VtZW50cyl9LHNjYWxlU2VxdWVudGlhbExvZzpmdW5jdGlvbiB0KCl7dmFyIGU9V00oWEMoKSkuZG9tYWluKFsxLDEwXSk7cmV0dXJuIGUuY29weT1mdW5jdGlvbigpe3JldHVybiAkQyhlLHQoKSkuYmFzZShlLmJhc2UoKSl9LGdNLmFwcGx5KGUsYXJndW1lbnRzKX0sc2NhbGVTZXF1ZW50aWFsUG93OktDLHNjYWxlU2VxdWVudGlhbFNxcnQ6ZnVuY3Rpb24gakkoKXtyZXR1cm4gS0MuYXBwbHkobnVsbCxhcmd1bWVudHMpLmV4cG9uZW50KC41KX0sc2NhbGVTZXF1ZW50aWFsU3ltbG9nOmZ1bmN0aW9uIHQoKXt2YXIgZT0kTShYQygpKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuICRDKGUsdCgpKS5jb25zdGFudChlLmNvbnN0YW50KCkpfSxnTS5hcHBseShlLGFyZ3VtZW50cyl9LHNjYWxlU2VxdWVudGlhbFF1YW50aWxlOmZ1bmN0aW9uIHQoKXt2YXIgZT1bXSxuPUNNO2Z1bmN0aW9uIGkodCl7aWYoIWlzTmFOKHQ9K3QpKXJldHVybiBuKCh3bChlLHQpLTEpLyhlLmxlbmd0aC0xKSl9cmV0dXJuIGkuZG9tYWluPWZ1bmN0aW9uKHQpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBlLnNsaWNlKCk7ZT1bXTtmb3IodmFyIG4scj0wLG89dC5sZW5ndGg7cjxvOysrciludWxsPT0obj10W3JdKXx8aXNOYU4obj0rbil8fGUucHVzaChuKTtyZXR1cm4gZS5zb3J0KHZsKSxpfSxpLmludGVycG9sYXRvcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LGkpOm59LGkuY29weT1mdW5jdGlvbigpe3JldHVybiB0KG4pLmRvbWFpbihlKX0sZ00uYXBwbHkoaSxhcmd1bWVudHMpfSxzY2FsZURpdmVyZ2luZzpmdW5jdGlvbiB0KCl7dmFyIGU9ek0oWkMoKShDTSkpO3JldHVybiBlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gJEMoZSx0KCkpfSxnTS5hcHBseShlLGFyZ3VtZW50cyl9LHNjYWxlRGl2ZXJnaW5nTG9nOmZ1bmN0aW9uIHQoKXt2YXIgZT1XTShaQygpKS5kb21haW4oWy4xLDEsMTBdKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuICRDKGUsdCgpKS5iYXNlKGUuYmFzZSgpKX0sZ00uYXBwbHkoZSxhcmd1bWVudHMpfSxzY2FsZURpdmVyZ2luZ1BvdzpKQyxzY2FsZURpdmVyZ2luZ1NxcnQ6ZnVuY3Rpb24gR0koKXtyZXR1cm4gSkMuYXBwbHkobnVsbCxhcmd1bWVudHMpLmV4cG9uZW50KC41KX0sc2NhbGVEaXZlcmdpbmdTeW1sb2c6ZnVuY3Rpb24gdCgpe3ZhciBlPSRNKFpDKCkpO3JldHVybiBlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gJEMoZSx0KCkpLmNvbnN0YW50KGUuY29uc3RhbnQoKSl9LGdNLmFwcGx5KGUsYXJndW1lbnRzKX0sdGlja0Zvcm1hdDpSTSxzY2hlbWVDYXRlZ29yeTEwOnRBLHNjaGVtZUFjY2VudDplQSxzY2hlbWVEYXJrMjpuQSxzY2hlbWVQYWlyZWQ6aUEsc2NoZW1lUGFzdGVsMTpyQSxzY2hlbWVQYXN0ZWwyOm9BLHNjaGVtZVNldDE6YUEsc2NoZW1lU2V0MjpzQSxzY2hlbWVTZXQzOmxBLHNjaGVtZVRhYmxlYXUxMDpjQSxpbnRlcnBvbGF0ZUJyQkc6ZEEsc2NoZW1lQnJCRzpoQSxpbnRlcnBvbGF0ZVBSR246ZkEsc2NoZW1lUFJHbjpwQSxpbnRlcnBvbGF0ZVBpWUc6Z0Esc2NoZW1lUGlZRzptQSxpbnRlcnBvbGF0ZVB1T3I6eUEsc2NoZW1lUHVPcjpfQSxpbnRlcnBvbGF0ZVJkQnU6YkEsc2NoZW1lUmRCdTp2QSxpbnRlcnBvbGF0ZVJkR3k6d0Esc2NoZW1lUmRHeTp4QSxpbnRlcnBvbGF0ZVJkWWxCdTpNQSxzY2hlbWVSZFlsQnU6U0EsaW50ZXJwb2xhdGVSZFlsR246VEEsc2NoZW1lUmRZbEduOkVBLGludGVycG9sYXRlU3BlY3RyYWw6QUEsc2NoZW1lU3BlY3RyYWw6Q0EsaW50ZXJwb2xhdGVCdUduOkxBLHNjaGVtZUJ1R246a0EsaW50ZXJwb2xhdGVCdVB1Ok5BLHNjaGVtZUJ1UHU6UEEsaW50ZXJwb2xhdGVHbkJ1Ok9BLHNjaGVtZUduQnU6SUEsaW50ZXJwb2xhdGVPclJkOnpBLHNjaGVtZU9yUmQ6UkEsaW50ZXJwb2xhdGVQdUJ1R246QkEsc2NoZW1lUHVCdUduOkRBLGludGVycG9sYXRlUHVCdTpGQSxzY2hlbWVQdUJ1OkhBLGludGVycG9sYXRlUHVSZDpVQSxzY2hlbWVQdVJkOlZBLGludGVycG9sYXRlUmRQdTpHQSxzY2hlbWVSZFB1OmpBLGludGVycG9sYXRlWWxHbkJ1OnFBLHNjaGVtZVlsR25CdTpXQSxpbnRlcnBvbGF0ZVlsR246WEEsc2NoZW1lWWxHbjpZQSxpbnRlcnBvbGF0ZVlsT3JCcjpLQSxzY2hlbWVZbE9yQnI6JEEsaW50ZXJwb2xhdGVZbE9yUmQ6SkEsc2NoZW1lWWxPclJkOlpBLGludGVycG9sYXRlQmx1ZXM6dGssc2NoZW1lQmx1ZXM6UUEsaW50ZXJwb2xhdGVHcmVlbnM6bmssc2NoZW1lR3JlZW5zOmVrLGludGVycG9sYXRlR3JleXM6cmssc2NoZW1lR3JleXM6aWssaW50ZXJwb2xhdGVQdXJwbGVzOmFrLHNjaGVtZVB1cnBsZXM6b2ssaW50ZXJwb2xhdGVSZWRzOmxrLHNjaGVtZVJlZHM6c2ssaW50ZXJwb2xhdGVPcmFuZ2VzOnVrLHNjaGVtZU9yYW5nZXM6Y2ssaW50ZXJwb2xhdGVDaXZpZGlzOmZ1bmN0aW9uIFdJKHQpe3JldHVybiB0PU1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSksInJnYigiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoLTQuNTQtdCooMzUuMzQtdCooMjM4MS43My10Kig2NDAyLjctdCooNzAyNC43Mi0yNzEwLjU3KnQpKSkpKSkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCgzMi40OSt0KigxNzAuNzMrdCooNTIuODItdCooMTMxLjQ2LXQqKDE3Ni41OC02Ny4zNyp0KSkpKSkpKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoODEuMjQrdCooNDQyLjM2LXQqKDI0ODIuNDMtdCooNjE2Ny4yNC10Kig2NjE0Ljk0LTI0NzUuNjcqdCkpKSkpKSkrIikifSxpbnRlcnBvbGF0ZUN1YmVoZWxpeERlZmF1bHQ6aGssaW50ZXJwb2xhdGVSYWluYm93OmZ1bmN0aW9uIHFJKHQpeyh0PDB8fHQ+MSkmJih0LT1NYXRoLmZsb29yKHQpKTt2YXIgZT1NYXRoLmFicyh0LS41KTtyZXR1cm4gZmsuaD0zNjAqdC0xMDAsZmsucz0xLjUtMS41KmUsZmsubD0uOC0uOSplLGZrKyIifSxpbnRlcnBvbGF0ZVdhcm06ZGssaW50ZXJwb2xhdGVDb29sOnBrLGludGVycG9sYXRlU2luZWJvdzpmdW5jdGlvbiBZSSh0KXt2YXIgZTtyZXR1cm4gdD0oLjUtdCkqTWF0aC5QSSxtay5yPTI1NSooZT1NYXRoLnNpbih0KSkqZSxtay5nPTI1NSooZT1NYXRoLnNpbih0K2drKSkqZSxtay5iPTI1NSooZT1NYXRoLnNpbih0K19rKSkqZSxtaysiIn0saW50ZXJwb2xhdGVUdXJibzpmdW5jdGlvbiBYSSh0KXtyZXR1cm4gdD1NYXRoLm1heCgwLE1hdGgubWluKDEsdCkpLCJyZ2IoIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKDM0LjYxK3QqKDExNzIuMzMtdCooMTA3OTMuNTYtdCooMzMzMDAuMTItdCooMzgzOTQuNDktMTQ4MjUuMDUqdCkpKSkpKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKDIzLjMxK3QqKDU1Ny4zMyt0KigxMjI1LjMzLXQqKDM1NzQuOTYtdCooMTA3My43Nys3MDcuNTYqdCkpKSkpKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKDI3LjIrdCooMzIxMS4xLXQqKDE1MzI3Ljk3LXQqKDI3ODE0LXQqKDIyNTY5LjE4LTY4MzguNjYqdCkpKSkpKSkrIikifSxpbnRlcnBvbGF0ZVZpcmlkaXM6dmssaW50ZXJwb2xhdGVNYWdtYTpiayxpbnRlcnBvbGF0ZUluZmVybm86eGssaW50ZXJwb2xhdGVQbGFzbWE6d2ssY3JlYXRlOmZ1bmN0aW9uICRJKHQpe3JldHVybiB3dShfYyh0KS5jYWxsKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkpfSxjcmVhdG9yOl9jLGxvY2FsOmVoLG1hdGNoZXI6d2MsbW91c2U6b2gsbmFtZXNwYWNlOmZjLG5hbWVzcGFjZXM6cGMsY2xpZW50UG9pbnQ6cmgsc2VsZWN0Ond1LHNlbGVjdEFsbDphaCxzZWxlY3Rpb246eHUsc2VsZWN0b3I6dmMsc2VsZWN0b3JBbGw6eGMsc3R5bGU6QmMsdG91Y2g6c2gsdG91Y2hlczpmdW5jdGlvbiBLSSh0LGUpe251bGw9PWUmJihlPWloKCkudG91Y2hlcyk7Zm9yKHZhciBuPTAsaT1lP2UubGVuZ3RoOjAscj1uZXcgQXJyYXkoaSk7bjxpOysrbilyW25dPXJoKHQsZVtuXSk7cmV0dXJuIHJ9LHdpbmRvdzpPYyxnZXQgZXZlbnQoKXtyZXR1cm4gY3V9LGN1c3RvbUV2ZW50Om11LGFyYzpmdW5jdGlvbiBaSSgpe3ZhciB0PURrLGU9Qmssbj1TaygwKSxpPW51bGwscj1IayxvPUZrLGE9Vmsscz1udWxsO2Z1bmN0aW9uIGwoKXt2YXIgbCxjLHU9K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpLGg9K2UuYXBwbHkodGhpcyxhcmd1bWVudHMpLGQ9ci5hcHBseSh0aGlzLGFyZ3VtZW50cyktSWsscD1vLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1JayxmPU1rKHAtZCksbT1wPmQ7aWYoc3x8KHM9bD1wZygpKSxoPHUmJihjPWgsaD11LHU9YyksaD5QaylpZihmPk9rLVBrKXMubW92ZVRvKGgqVGsoZCksaCprayhkKSkscy5hcmMoMCwwLGgsZCxwLCFtKSx1PlBrJiYocy5tb3ZlVG8odSpUayhwKSx1KmtrKHApKSxzLmFyYygwLDAsdSxwLGQsbSkpO2Vsc2V7dmFyIGcsXyx5PWQsdj1wLGI9ZCx4PXAsdz1mLFM9ZixNPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpLzIsRT1NPlBrJiYoaT8raS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6TGsodSp1K2gqaCkpLFQ9QWsoTWsoaC11KS8yLCtuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksQz1ULEE9VDtpZihFPlBrKXt2YXIgaz16ayhFL3Uqa2soTSkpLEw9emsoRS9oKmtrKE0pKTsody09MiprKT5Qaz8oYis9ayo9bT8xOi0xLHgtPWspOih3PTAsYj14PShkK3ApLzIpLChTLT0yKkwpPlBrPyh5Kz1MKj1tPzE6LTEsdi09TCk6KFM9MCx5PXY9KGQrcCkvMil9dmFyIFA9aCpUayh5KSxOPWgqa2soeSksST11KlRrKHgpLE89dSprayh4KTtpZihUPlBrKXt2YXIgUix6PWgqVGsodiksRD1oKmtrKHYpLEI9dSpUayhiKSxIPXUqa2soYik7aWYoZjxOayYmKFI9VWsoUCxOLEIsSCx6LEQsSSxPKSkpe3ZhciBGPVAtUlswXSxWPU4tUlsxXSxVPXotUlswXSxqPUQtUlsxXSxHPTEva2soUmsoKEYqVStWKmopLyhMayhGKkYrVipWKSpMayhVKlUraipqKSkpLzIpLFc9TGsoUlswXSpSWzBdK1JbMV0qUlsxXSk7Qz1BayhULCh1LVcpLyhHLTEpKSxBPUFrKFQsKGgtVykvKEcrMSkpfX1TPlBrP0E+UGs/KGc9amsoQixILFAsTixoLEEsbSksXz1qayh6LEQsSSxPLGgsQSxtKSxzLm1vdmVUbyhnLmN4K2cueDAxLGcuY3krZy55MDEpLEE8VD9zLmFyYyhnLmN4LGcuY3ksQSxFayhnLnkwMSxnLngwMSksRWsoXy55MDEsXy54MDEpLCFtKToocy5hcmMoZy5jeCxnLmN5LEEsRWsoZy55MDEsZy54MDEpLEVrKGcueTExLGcueDExKSwhbSkscy5hcmMoMCwwLGgsRWsoZy5jeStnLnkxMSxnLmN4K2cueDExKSxFayhfLmN5K18ueTExLF8uY3grXy54MTEpLCFtKSxzLmFyYyhfLmN4LF8uY3ksQSxFayhfLnkxMSxfLngxMSksRWsoXy55MDEsXy54MDEpLCFtKSkpOihzLm1vdmVUbyhQLE4pLHMuYXJjKDAsMCxoLHksdiwhbSkpOnMubW92ZVRvKFAsTiksdT5QayYmdz5Qaz9DPlBrPyhnPWprKEksTyx6LEQsdSwtQyxtKSxfPWprKFAsTixCLEgsdSwtQyxtKSxzLmxpbmVUbyhnLmN4K2cueDAxLGcuY3krZy55MDEpLEM8VD9zLmFyYyhnLmN4LGcuY3ksQyxFayhnLnkwMSxnLngwMSksRWsoXy55MDEsXy54MDEpLCFtKToocy5hcmMoZy5jeCxnLmN5LEMsRWsoZy55MDEsZy54MDEpLEVrKGcueTExLGcueDExKSwhbSkscy5hcmMoMCwwLHUsRWsoZy5jeStnLnkxMSxnLmN4K2cueDExKSxFayhfLmN5K18ueTExLF8uY3grXy54MTEpLG0pLHMuYXJjKF8uY3gsXy5jeSxDLEVrKF8ueTExLF8ueDExKSxFayhfLnkwMSxfLngwMSksIW0pKSk6cy5hcmMoMCwwLHUseCxiLG0pOnMubGluZVRvKEksTyl9ZWxzZSBzLm1vdmVUbygwLDApO2lmKHMuY2xvc2VQYXRoKCksbClyZXR1cm4gcz1udWxsLGwrIiJ8fG51bGx9cmV0dXJuIGwuY2VudHJvaWQ9ZnVuY3Rpb24oKXt2YXIgbj0oK3QuYXBwbHkodGhpcyxhcmd1bWVudHMpKyArZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzIsaT0oK3IuYXBwbHkodGhpcyxhcmd1bWVudHMpKyArby5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzItTmsvMjtyZXR1cm5bVGsoaSkqbixrayhpKSpuXX0sbC5pbm5lclJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOlNrKCtlKSxsKTp0fSxsLm91dGVyUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6U2soK3QpLGwpOmV9LGwuY29ybmVyUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6U2soK3QpLGwpOm59LGwucGFkUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PXQ/bnVsbDoiZnVuY3Rpb24iPT10eXBlb2YgdD90OlNrKCt0KSxsKTppfSxsLnN0YXJ0QW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpTaygrdCksbCk6cn0sbC5lbmRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlNrKCt0KSxsKTpvfSxsLnBhZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6U2soK3QpLGwpOmF9LGwuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1udWxsPT10P251bGw6dCxsKTpzfSxsfSxhcmVhOiRrLGxpbmU6WGsscGllOmZ1bmN0aW9uIEpJKCl7dmFyIHQ9WmssZT1LayxuPW51bGwsaT1TaygwKSxyPVNrKE9rKSxvPVNrKDApO2Z1bmN0aW9uIGEoYSl7dmFyIHMsbCxjLHUsaCxkPWEubGVuZ3RoLHA9MCxmPW5ldyBBcnJheShkKSxtPW5ldyBBcnJheShkKSxnPStpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxfPU1hdGgubWluKE9rLE1hdGgubWF4KC1PayxyLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1nKSkseT1NYXRoLm1pbihNYXRoLmFicyhfKS9kLG8uYXBwbHkodGhpcyxhcmd1bWVudHMpKSx2PXkqKF88MD8tMToxKTtmb3Iocz0wO3M8ZDsrK3MpKGg9bVtmW3NdPXNdPSt0KGFbc10scyxhKSk+MCYmKHArPWgpO2ZvcihudWxsIT1lP2Yuc29ydCgoZnVuY3Rpb24odCxuKXtyZXR1cm4gZShtW3RdLG1bbl0pfSkpOm51bGwhPW4mJmYuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gbihhW3RdLGFbZV0pfSkpLHM9MCxjPXA/KF8tZCp2KS9wOjA7czxkOysrcyxnPXUpbVtsPWZbc11dPXtkYXRhOmFbbF0saW5kZXg6cyx2YWx1ZTpoPW1bbF0sc3RhcnRBbmdsZTpnLGVuZEFuZ2xlOnU9ZysoaD4wP2gqYzowKSt2LHBhZEFuZ2xlOnl9O3JldHVybiBtfXJldHVybiBhLnZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6U2soK2UpLGEpOnR9LGEuc29ydFZhbHVlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG49bnVsbCxhKTplfSxhLnNvcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxlPW51bGwsYSk6bn0sYS5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6U2soK3QpLGEpOml9LGEuZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpTaygrdCksYSk6cn0sYS5wYWRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlNrKCt0KSxhKTpvfSxhfSxhcmVhUmFkaWFsOmlMLHJhZGlhbEFyZWE6aUwsbGluZVJhZGlhbDpuTCxyYWRpYWxMaW5lOm5MLHBvaW50UmFkaWFsOnJMLGxpbmtIb3Jpem9udGFsOmZ1bmN0aW9uIFFJKCl7cmV0dXJuIGxMKGNMKX0sbGlua1ZlcnRpY2FsOmZ1bmN0aW9uIHRPKCl7cmV0dXJuIGxMKHVMKX0sbGlua1JhZGlhbDpmdW5jdGlvbiBlTygpe3ZhciB0PWxMKGhMKTtyZXR1cm4gdC5hbmdsZT10LngsZGVsZXRlIHQueCx0LnJhZGl1cz10LnksZGVsZXRlIHQueSx0fSxzeW1ib2w6ZnVuY3Rpb24gbk8oKXt2YXIgdD1TayhkTCksZT1Tayg2NCksbj1udWxsO2Z1bmN0aW9uIGkoKXt2YXIgaTtpZihufHwobj1pPXBnKCkpLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpLmRyYXcobiwrZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLGkpcmV0dXJuIG49bnVsbCxpKyIifHxudWxsfXJldHVybiBpLnR5cGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpTayhlKSxpKTp0fSxpLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpTaygrdCksaSk6ZX0saS5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW51bGw9PXQ/bnVsbDp0LGkpOm59LGl9LHN5bWJvbHM6a0wsc3ltYm9sQ2lyY2xlOmRMLHN5bWJvbENyb3NzOnBMLHN5bWJvbERpYW1vbmQ6Z0wsc3ltYm9sU3F1YXJlOnhMLHN5bWJvbFN0YXI6Ykwsc3ltYm9sVHJpYW5nbGU6U0wsc3ltYm9sV3llOkFMLGN1cnZlQmFzaXNDbG9zZWQ6ZnVuY3Rpb24gaU8odCl7cmV0dXJuIG5ldyBPTCh0KX0sY3VydmVCYXNpc09wZW46ZnVuY3Rpb24gck8odCl7cmV0dXJuIG5ldyBSTCh0KX0sY3VydmVCYXNpczpJTCxjdXJ2ZUJ1bmRsZTpETCxjdXJ2ZUNhcmRpbmFsQ2xvc2VkOlVMLGN1cnZlQ2FyZGluYWxPcGVuOkdMLGN1cnZlQ2FyZGluYWw6RkwsY3VydmVDYXRtdWxsUm9tQ2xvc2VkOiRMLGN1cnZlQ2F0bXVsbFJvbU9wZW46WkwsY3VydmVDYXRtdWxsUm9tOllMLGN1cnZlTGluZWFyQ2xvc2VkOmZ1bmN0aW9uIG9PKHQpe3JldHVybiBuZXcgSkwodCl9LGN1cnZlTGluZWFyOldrLGN1cnZlTW9ub3RvbmVYOmZ1bmN0aW9uIGFPKHQpe3JldHVybiBuZXcgaVAodCl9LGN1cnZlTW9ub3RvbmVZOmZ1bmN0aW9uIHNPKHQpe3JldHVybiBuZXcgclAodCl9LGN1cnZlTmF0dXJhbDpmdW5jdGlvbiBsTyh0KXtyZXR1cm4gbmV3IGFQKHQpfSxjdXJ2ZVN0ZXA6ZnVuY3Rpb24gY08odCl7cmV0dXJuIG5ldyBsUCh0LC41KX0sY3VydmVTdGVwQWZ0ZXI6ZnVuY3Rpb24gdU8odCl7cmV0dXJuIG5ldyBsUCh0LDEpfSxjdXJ2ZVN0ZXBCZWZvcmU6ZnVuY3Rpb24gaE8odCl7cmV0dXJuIG5ldyBsUCh0LDApfSxzdGFjazpmdW5jdGlvbiBkTygpe3ZhciB0PVNrKFtdKSxlPXVQLG49Y1AsaT1oUDtmdW5jdGlvbiByKHIpe3ZhciBvLGEscz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxsPXIubGVuZ3RoLGM9cy5sZW5ndGgsdT1uZXcgQXJyYXkoYyk7Zm9yKG89MDtvPGM7KytvKXtmb3IodmFyIGgsZD1zW29dLHA9dVtvXT1uZXcgQXJyYXkobCksZj0wO2Y8bDsrK2YpcFtmXT1oPVswLCtpKHJbZl0sZCxmLHIpXSxoLmRhdGE9cltmXTtwLmtleT1kfWZvcihvPTAsYT1lKHUpO288YzsrK28pdVthW29dXS5pbmRleD1vO3JldHVybiBuKHUsYSksdX1yZXR1cm4gci5rZXlzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6U2sob0wuY2FsbChlKSkscik6dH0sci52YWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlNrKCt0KSxyKTppfSxyLm9yZGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPW51bGw9PXQ/dVA6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpTayhvTC5jYWxsKHQpKSxyKTplfSxyLm9mZnNldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1udWxsPT10P2NQOnQscik6bn0scn0sc3RhY2tPZmZzZXRFeHBhbmQ6ZnVuY3Rpb24gcE8odCxlKXtpZigoaT10Lmxlbmd0aCk+MCl7Zm9yKHZhciBuLGkscixvPTAsYT10WzBdLmxlbmd0aDtvPGE7KytvKXtmb3Iocj1uPTA7bjxpOysrbilyKz10W25dW29dWzFdfHwwO2lmKHIpZm9yKG49MDtuPGk7KytuKXRbbl1bb11bMV0vPXJ9Y1AodCxlKX19LHN0YWNrT2Zmc2V0RGl2ZXJnaW5nOmZ1bmN0aW9uIGZPKHQsZSl7aWYoKHM9dC5sZW5ndGgpPjApZm9yKHZhciBuLGkscixvLGEscyxsPTAsYz10W2VbMF1dLmxlbmd0aDtsPGM7KytsKWZvcihvPWE9MCxuPTA7bjxzOysrbikocj0oaT10W2Vbbl1dW2xdKVsxXS1pWzBdKT4wPyhpWzBdPW8saVsxXT1vKz1yKTpyPDA/KGlbMV09YSxpWzBdPWErPXIpOihpWzBdPTAsaVsxXT1yKX0sc3RhY2tPZmZzZXROb25lOmNQLHN0YWNrT2Zmc2V0U2lsaG91ZXR0ZTpmdW5jdGlvbiBtTyh0LGUpe2lmKChuPXQubGVuZ3RoKT4wKXtmb3IodmFyIG4saT0wLHI9dFtlWzBdXSxvPXIubGVuZ3RoO2k8bzsrK2kpe2Zvcih2YXIgYT0wLHM9MDthPG47KythKXMrPXRbYV1baV1bMV18fDA7cltpXVsxXSs9cltpXVswXT0tcy8yfWNQKHQsZSl9fSxzdGFja09mZnNldFdpZ2dsZTpmdW5jdGlvbiBnTyh0LGUpe2lmKChyPXQubGVuZ3RoKT4wJiYoaT0obj10W2VbMF1dKS5sZW5ndGgpPjApe2Zvcih2YXIgbixpLHIsbz0wLGE9MTthPGk7KythKXtmb3IodmFyIHM9MCxsPTAsYz0wO3M8cjsrK3Mpe2Zvcih2YXIgdT10W2Vbc11dLGg9dVthXVsxXXx8MCxkPShoLSh1W2EtMV1bMV18fDApKS8yLHA9MDtwPHM7KytwKXt2YXIgZj10W2VbcF1dO2QrPShmW2FdWzFdfHwwKS0oZlthLTFdWzFdfHwwKX1sKz1oLGMrPWQqaH1uW2EtMV1bMV0rPW5bYS0xXVswXT1vLGwmJihvLT1jL2wpfW5bYS0xXVsxXSs9blthLTFdWzBdPW8sY1AodCxlKX19LHN0YWNrT3JkZXJBcHBlYXJhbmNlOmRQLHN0YWNrT3JkZXJBc2NlbmRpbmc6ZlAsc3RhY2tPcmRlckRlc2NlbmRpbmc6ZnVuY3Rpb24gX08odCl7cmV0dXJuIGZQKHQpLnJldmVyc2UoKX0sc3RhY2tPcmRlckluc2lkZU91dDpmdW5jdGlvbiB5Tyh0KXt2YXIgZSxuLGk9dC5sZW5ndGgscj10Lm1hcChtUCksbz1kUCh0KSxhPTAscz0wLGw9W10sYz1bXTtmb3IoZT0wO2U8aTsrK2Upbj1vW2VdLGE8cz8oYSs9cltuXSxsLnB1c2gobikpOihzKz1yW25dLGMucHVzaChuKSk7cmV0dXJuIGMucmV2ZXJzZSgpLmNvbmNhdChsKX0sc3RhY2tPcmRlck5vbmU6dVAsc3RhY2tPcmRlclJldmVyc2U6ZnVuY3Rpb24gdk8odCl7cmV0dXJuIHVQKHQpLnJldmVyc2UoKX0sdGltZUludGVydmFsOm9FLHRpbWVNaWxsaXNlY29uZDphRSx0aW1lTWlsbGlzZWNvbmRzOnNFLHV0Y01pbGxpc2Vjb25kOmFFLHV0Y01pbGxpc2Vjb25kczpzRSx0aW1lU2Vjb25kOnBFLHRpbWVTZWNvbmRzOmZFLHV0Y1NlY29uZDpwRSx1dGNTZWNvbmRzOmZFLHRpbWVNaW51dGU6bUUsdGltZU1pbnV0ZXM6Z0UsdGltZUhvdXI6X0UsdGltZUhvdXJzOnlFLHRpbWVEYXk6dkUsdGltZURheXM6YkUsdGltZVdlZWs6d0UsdGltZVdlZWtzOmtFLHRpbWVTdW5kYXk6d0UsdGltZVN1bmRheXM6a0UsdGltZU1vbmRheTpTRSx0aW1lTW9uZGF5czpMRSx0aW1lVHVlc2RheTpNRSx0aW1lVHVlc2RheXM6UEUsdGltZVdlZG5lc2RheTpFRSx0aW1lV2VkbmVzZGF5czpORSx0aW1lVGh1cnNkYXk6VEUsdGltZVRodXJzZGF5czpJRSx0aW1lRnJpZGF5OkNFLHRpbWVGcmlkYXlzOk9FLHRpbWVTYXR1cmRheTpBRSx0aW1lU2F0dXJkYXlzOlJFLHRpbWVNb250aDp6RSx0aW1lTW9udGhzOkRFLHRpbWVZZWFyOkJFLHRpbWVZZWFyczpIRSx1dGNNaW51dGU6RkUsdXRjTWludXRlczpWRSx1dGNIb3VyOlVFLHV0Y0hvdXJzOmpFLHV0Y0RheTpHRSx1dGNEYXlzOldFLHV0Y1dlZWs6WUUsdXRjV2Vla3M6dFQsdXRjU3VuZGF5OllFLHV0Y1N1bmRheXM6dFQsdXRjTW9uZGF5OlhFLHV0Y01vbmRheXM6ZVQsdXRjVHVlc2RheTokRSx1dGNUdWVzZGF5czpuVCx1dGNXZWRuZXNkYXk6S0UsdXRjV2VkbmVzZGF5czppVCx1dGNUaHVyc2RheTpaRSx1dGNUaHVyc2RheXM6clQsdXRjRnJpZGF5OkpFLHV0Y0ZyaWRheXM6b1QsdXRjU2F0dXJkYXk6UUUsdXRjU2F0dXJkYXlzOmFULHV0Y01vbnRoOnNULHV0Y01vbnRoczpsVCx1dGNZZWFyOmNULHV0Y1llYXJzOnVULHRpbWVGb3JtYXREZWZhdWx0TG9jYWxlOkRDLGdldCB0aW1lRm9ybWF0KCl7cmV0dXJuIGdUfSxnZXQgdGltZVBhcnNlKCl7cmV0dXJuIF9UfSxnZXQgdXRjRm9ybWF0KCl7cmV0dXJuIHlUfSxnZXQgdXRjUGFyc2UoKXtyZXR1cm4gdlR9LHRpbWVGb3JtYXRMb2NhbGU6ZlQsaXNvRm9ybWF0OkhDLGlzb1BhcnNlOlZDLG5vdzpFcCx0aW1lcjpBcCx0aW1lckZsdXNoOmtwLHRpbWVvdXQ6SXAsaW50ZXJ2YWw6ZnVuY3Rpb24gYk8odCxlLG4pe3ZhciBpPW5ldyBDcCxyPWU7cmV0dXJuIG51bGw9PWU/KGkucmVzdGFydCh0LGUsbiksaSk6KGU9K2Usbj1udWxsPT1uP0VwKCk6K24saS5yZXN0YXJ0KChmdW5jdGlvbiBvKGEpe2ErPXIsaS5yZXN0YXJ0KG8scis9ZSxuKSx0KGEpfSksZSxuKSxpKX0sdHJhbnNpdGlvbjpnZixhY3RpdmU6ZnVuY3Rpb24geE8odCxlKXt2YXIgbixpLHI9dC5fX3RyYW5zaXRpb247aWYocilmb3IoaSBpbiBlPW51bGw9PWU/bnVsbDplKyIiLHIpaWYoKG49cltpXSkuc3RhdGU+MSYmbi5uYW1lPT09ZSlyZXR1cm4gbmV3IG1mKFtbdF1dLFNtLGUsK2kpO3JldHVybiBudWxsfSxpbnRlcnJ1cHQ6RnAsdm9yb25vaTpmdW5jdGlvbiB3Tygpe3ZhciB0PV9QLGU9eVAsbj1udWxsO2Z1bmN0aW9uIGkoaSl7cmV0dXJuIG5ldyBRUChpLm1hcCgoZnVuY3Rpb24obixyKXt2YXIgbz1bTWF0aC5yb3VuZCh0KG4scixpKS8kUCkqJFAsTWF0aC5yb3VuZChlKG4scixpKS8kUCkqJFBdO3JldHVybiBvLmluZGV4PXIsby5kYXRhPW4sb30pKSxuKX1yZXR1cm4gaS5wb2x5Z29ucz1mdW5jdGlvbih0KXtyZXR1cm4gaSh0KS5wb2x5Z29ucygpfSxpLmxpbmtzPWZ1bmN0aW9uKHQpe3JldHVybiBpKHQpLmxpbmtzKCl9LGkudHJpYW5nbGVzPWZ1bmN0aW9uKHQpe3JldHVybiBpKHQpLnRyaWFuZ2xlcygpfSxpLng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpnUCgrZSksaSk6dH0saS55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6Z1AoK3QpLGkpOmV9LGkuZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW51bGw9PXQ/bnVsbDpbWyt0WzBdWzBdLCt0WzBdWzFdXSxbK3RbMV1bMF0sK3RbMV1bMV1dXSxpKTpuJiZbW25bMF1bMF0sblswXVsxXV0sW25bMV1bMF0sblsxXVsxXV1dfSxpLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49bnVsbD09dD9udWxsOltbMCwwXSxbK3RbMF0sK3RbMV1dXSxpKTpuJiZbblsxXVswXS1uWzBdWzBdLG5bMV1bMV0tblswXVsxXV19LGl9LHpvb206cE4sem9vbVRyYW5zZm9ybTpyTix6b29tSWRlbnRpdHk6aU59KTtjb25zdCBTTz1bIiNmZjcwNDMiLCIjMDA3N2JiIiwiI2NjMzMxMSIsIiMzM2JiZWUiLCIjZWUzMzc3IiwiIzAwOTk4OCIsIiNiYmJiYmIiXTtjbGFzcyBNTyBleHRlbmRzIGZse2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9leHBlcmltZW50cz1bXX1sb2FkKCl7Y29uc3QgdD1ncigpLmV4cGVyaW1lbnRzKCk7cmV0dXJuIHRoaXMucmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKCh0PT57d2UuaXNFcXVhbCh0aGlzLl9leHBlcmltZW50cyx0KXx8KHRoaXMuX2V4cGVyaW1lbnRzPXQsdGhpcy5lbWl0Q2hhbmdlKCkpfSkpfWdldEV4cGVyaW1lbnRzKCl7cmV0dXJuIHRoaXMuX2V4cGVyaW1lbnRzLnNsaWNlKCl9fWNvbnN0IEVPPW5ldyBNTztjbGFzcyBUT3tjb25zdHJ1Y3Rvcih0PVNPKXt0aGlzLnBhbGV0dGU9dCx0aGlzLmlkZW50aWZpZXJzPXhnKCl9c2V0RG9tYWluKHQpe3JldHVybiB0aGlzLmlkZW50aWZpZXJzPXhnKCksdC5mb3JFYWNoKCgodCxlKT0+e3RoaXMuaWRlbnRpZmllcnMuc2V0KHQsdGhpcy5wYWxldHRlW2UldGhpcy5wYWxldHRlLmxlbmd0aF0pfSkpLHRoaXN9Z2V0Q29sb3IodCl7aWYoIXRoaXMuaWRlbnRpZmllcnMuaGFzKHQpKXRocm93IG5ldyBFcnJvcihgU3RyaW5nICR7dH0gd2FzIG5vdCBpbiB0aGUgZG9tYWluLmApO3JldHVybiB0aGlzLmlkZW50aWZpZXJzLmdldCh0KX19ZnVuY3Rpb24gQ08odCxlKXtjb25zdCBuPW5ldyBUTztmdW5jdGlvbiBpKCl7bi5zZXREb21haW4oZSgpKX1yZXR1cm4gdC5hZGRMaXN0ZW5lcihpKSxpKCksdD0+bi5nZXRDb2xvcih0KX1jb25zdCBBTz1DTyh5bCwoKCk9PnlsLmdldFJ1bnMoKSkpO0NPKEVPLCgoKT0+RU8uZ2V0RXhwZXJpbWVudHMoKS5tYXAoKCh7bmFtZTp0fSk9PnQpKSkpLHRsKHttb2R1bGVOYW1lOiJydW4tY29sb3Itc3R5bGUiLHN0eWxlQ29udGVudDoiXG4gICAgW2NvbG9yLWNsYXNzPSdsaWdodC1ibHVlJ10gcGFwZXItY2hlY2tib3gge1xuICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci1saWdodC1ibHVlLTUwMCk7XG4gICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1saWdodC1ibHVlLTUwMCk7XG4gICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItbGlnaHQtYmx1ZS05MDApO1xuICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1saWdodC1ibHVlLTkwMCk7XG4gICAgfVxuICAgIFtjb2xvci1jbGFzcz0ncmVkJ10gcGFwZXItY2hlY2tib3gge1xuICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci1yZWQtNTAwKTtcbiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLXJlZC01MDApO1xuICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLXJlZC05MDApO1xuICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1yZWQtOTAwKTtcbiAgICB9XG4gICAgW2NvbG9yLWNsYXNzPSdncmVlbiddIHBhcGVyLWNoZWNrYm94IHtcbiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItZ3JlZW4tNTAwKTtcbiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLWdyZWVuLTUwMCk7XG4gICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItZ3JlZW4tOTAwKTtcbiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItZ3JlZW4tOTAwKTtcbiAgICB9XG4gICAgW2NvbG9yLWNsYXNzPSdwdXJwbGUnXSBwYXBlci1jaGVja2JveCB7XG4gICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLXB1cnBsZS01MDApO1xuICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItcHVycGxlLTUwMCk7XG4gICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItcHVycGxlLTkwMCk7XG4gICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLXB1cnBsZS05MDApO1xuICAgIH1cbiAgICBbY29sb3ItY2xhc3M9J3RlYWwnXSBwYXBlci1jaGVja2JveCB7XG4gICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLXRlYWwtNTAwKTtcbiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLXRlYWwtNTAwKTtcbiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci10ZWFsLTkwMCk7XG4gICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLXRlYWwtOTAwKTtcbiAgICB9XG4gICAgW2NvbG9yLWNsYXNzPSdwaW5rJ10gcGFwZXItY2hlY2tib3gge1xuICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci1waW5rLTUwMCk7XG4gICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1waW5rLTUwMCk7XG4gICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItcGluay05MDApO1xuICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1waW5rLTkwMCk7XG4gICAgfVxuICAgIFtjb2xvci1jbGFzcz0nb3JhbmdlJ10gcGFwZXItY2hlY2tib3gge1xuICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci1vcmFuZ2UtNTAwKTtcbiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLW9yYW5nZS01MDApO1xuICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLW9yYW5nZS05MDApO1xuICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1vcmFuZ2UtOTAwKTtcbiAgICB9XG4gICAgW2NvbG9yLWNsYXNzPSdicm93biddIHBhcGVyLWNoZWNrYm94IHtcbiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItYnJvd24tNTAwKTtcbiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLWJyb3duLTUwMCk7XG4gICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItYnJvd24tOTAwKTtcbiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItYnJvd24tOTAwKTtcbiAgICB9XG4gICAgW2NvbG9yLWNsYXNzPSdpbmRpZ28nXSBwYXBlci1jaGVja2JveCB7XG4gICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLWluZGlnby01MDApO1xuICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItaW5kaWdvLTUwMCk7XG4gICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItaW5kaWdvLTkwMCk7XG4gICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLWluZGlnby05MDApO1xuICAgIH1cbiAgIn0pO2xldCBrTz1jbGFzcyBleHRlbmRzKHRyKHllKSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMubmFtZXM9W10sdGhpcy5jb2xvcmluZz17Z2V0Q29sb3I6KCk9PiIifSx0aGlzLnJlZ2V4PSIiLHRoaXMuc2VsZWN0aW9uU3RhdGU9e30sdGhpcy5tYXhOYW1lc1RvRW5hYmxlQnlEZWZhdWx0PTQwLHRoaXMuX2RlYm91bmNlZFJlZ2V4Q2hhbmdlPXRoaXMuX2RlYm91bmNlZFJlZ2V4Q2hhbmdlSW1wbCgpfV9kZWJvdW5jZWRSZWdleENoYW5nZUltcGwoKXt2YXIgdD13ZS5kZWJvdW5jZSgodD0+e3RoaXMucmVnZXg9dH0pLDE1MCx7bGVhZGluZzohMX0pO3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMuJCQoIiNuYW1lcy1yZWdleCIpLnZhbHVlOyIiPT1lP3RoaXMuYXN5bmMoKCgpPT57dGhpcy5yZWdleD1lfSksMzApOnQoZSl9fWdldCBfcmVnZXgoKXt2YXIgdD10aGlzLnJlZ2V4O3RyeXtyZXR1cm4gbmV3IFJlZ0V4cCh0KX1jYXRjaCh0KXtyZXR1cm4gbnVsbH19X3NldElzb2xhdG9ySWNvbigpe3ZhciB0PXRoaXMuc2VsZWN0aW9uU3RhdGUsZT13ZS5maWx0ZXIod2UudmFsdWVzKHQpKS5sZW5ndGg7QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5yb290LnF1ZXJ5U2VsZWN0b3JBbGwoIi5pc29sYXRvciIpKS5mb3JFYWNoKChmdW5jdGlvbihuKXtuLmljb249MT09PWUmJnRbbi5uYW1lXT8icmFkaW8tYnV0dG9uLWNoZWNrZWQiOiJyYWRpby1idXR0b24tdW5jaGVja2VkIn0pKX1jb21wdXRlTmFtZXNNYXRjaGluZ1JlZ2V4KHQsZSl7Y29uc3Qgbj10aGlzLl9yZWdleDtyZXR1cm4gbj90aGlzLm5hbWVzLmZpbHRlcigodD0+bi50ZXN0KHQpKSk6dGhpcy5uYW1lc31jb21wdXRlT3V0U2VsZWN0ZWQodCxlKXt2YXIgbj10aGlzLnNlbGVjdGlvblN0YXRlLGk9dGhpcy5uYW1lc01hdGNoaW5nUmVnZXgubGVuZ3RoPD10aGlzLm1heE5hbWVzVG9FbmFibGVCeURlZmF1bHQ7cmV0dXJuIHRoaXMubmFtZXNNYXRjaGluZ1JlZ2V4LmZpbHRlcigodD0+bnVsbD09blt0XT9pOm5bdF0pKX1zeW5jaHJvbml6ZUNvbG9ycyh0KXt0aGlzLl9zZXRJc29sYXRvckljb24oKSx0aGlzLnJvb3QucXVlcnlTZWxlY3RvckFsbCgicGFwZXItY2hlY2tib3giKS5mb3JFYWNoKCh0PT57Y29uc3QgZT10aGlzLmNvbG9yaW5nLmdldENvbG9yKHQubmFtZSk7dC51cGRhdGVTdHlsZXMoeyItLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3IiOmUsIi0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3IiOmUsIi0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWNvbG9yIjplLCItLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3IiOmV9KX0pKSx0aGlzLnJvb3QucXVlcnlTZWxlY3RvckFsbCgiLmlzb2xhdG9yIikuZm9yRWFjaCgodD0+e2NvbnN0IGU9dGhpcy5jb2xvcmluZy5nZXRDb2xvcih0Lm5hbWUpO3Quc3R5bGUuY29sb3I9ZX0pKSx3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgoKT0+e3RoaXMudXBkYXRlU3R5bGVzKCl9KSl9X2lzb2xhdGVOYW1lKHQpe3ZhciBlPXQudGFyZ2V0Lm5hbWUsbj17fTt0aGlzLm5hbWVzLmZvckVhY2goKGZ1bmN0aW9uKHQpe25bdF09dD09ZX0pKSx0aGlzLnNlbGVjdGlvblN0YXRlPW59X2NoZWNrYm94Q2hhbmdlKHQpe3ZhciBlPXQudGFyZ2V0O2NvbnN0IG49d2UuY2xvbmUodGhpcy5zZWxlY3Rpb25TdGF0ZSk7bltlLm5hbWVdPWUuY2hlY2tlZCx0aGlzLnNlbGVjdGlvblN0YXRlPW59X2lzQ2hlY2tlZCh0LGUpe3JldHVybi0xIT10aGlzLm91dFNlbGVjdGVkLmluZGV4T2YodCl9dG9nZ2xlQWxsKCl7Y29uc3QgdD10aGlzLm5hbWVzTWF0Y2hpbmdSZWdleC5zb21lKCh0PT50aGlzLm91dFNlbGVjdGVkLmluY2x1ZGVzKHQpKSksZT17fTt0aGlzLm5hbWVzLmZvckVhY2goKG49PntlW25dPSF0fSkpLHRoaXMuc2VsZWN0aW9uU3RhdGU9ZX19O2tPLnRlbXBsYXRlPV9lYAogICAgPHN0eWxlIGluY2x1ZGU9InNjcm9sbGJhci1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZSBpbmNsdWRlPSJydW4tY29sb3Itc3R5bGUiPjwvc3R5bGU+CgogICAgPHBhcGVyLWlucHV0CiAgICAgIGlkPSJuYW1lcy1yZWdleCIKICAgICAgbm8tbGFiZWwtZmxvYXQ9IiIKICAgICAgbGFiZWw9IldyaXRlIGEgcmVnZXggdG8gZmlsdGVyIHJ1bnMiCiAgICAgIHZhbHVlPSJbW3JlZ2V4XV0iCiAgICAgIG9uLWJpbmQtdmFsdWUtY2hhbmdlZD0iX2RlYm91bmNlZFJlZ2V4Q2hhbmdlIgogICAgPjwvcGFwZXItaW5wdXQ+CiAgICA8ZGl2IGlkPSJvdXRlci1jb250YWluZXIiIGNsYXNzPSJzY3JvbGxiYXIiPgogICAgICA8dGVtcGxhdGUKICAgICAgICBpcz0iZG9tLXJlcGVhdCIKICAgICAgICBpdGVtcz0iW1tuYW1lc01hdGNoaW5nUmVnZXhdXSIKICAgICAgICBvbi1kb20tY2hhbmdlPSJzeW5jaHJvbml6ZUNvbG9ycyIKICAgICAgPgogICAgICAgIDxkaXYgY2xhc3M9Im5hbWUtcm93Ij4KICAgICAgICAgIDxkaXYKICAgICAgICAgICAgY2xhc3M9Imljb24tY29udGFpbmVyIGNoZWNrYm94LWNvbnRhaW5lciB2ZXJ0aWNhbC1hbGlnbi1jb250YWluZXIiCiAgICAgICAgICA+CiAgICAgICAgICAgIDxwYXBlci1jaGVja2JveAogICAgICAgICAgICAgIGNsYXNzPSJjaGVja2JveCB2ZXJ0aWNhbC1hbGlnbi1jZW50ZXIiCiAgICAgICAgICAgICAgaWQkPSJjaGVja2JveC1bW2l0ZW1dXSIKICAgICAgICAgICAgICBuYW1lPSJbW2l0ZW1dXSIKICAgICAgICAgICAgICBjaGVja2VkJD0iW1tfaXNDaGVja2VkKGl0ZW0sIHNlbGVjdGlvblN0YXRlLiopXV0iCiAgICAgICAgICAgICAgb24tY2hhbmdlPSJfY2hlY2tib3hDaGFuZ2UiCiAgICAgICAgICAgID48L3BhcGVyLWNoZWNrYm94PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2CiAgICAgICAgICAgIGNsYXNzPSJpY29uLWNvbnRhaW5lciBpc29sYXRvci1jb250YWluZXIgdmVydGljYWwtYWxpZ24tY29udGFpbmVyIgogICAgICAgICAgPgogICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICAgICAgICBpY29uPSJyYWRpby1idXR0b24tdW5jaGVja2VkIgogICAgICAgICAgICAgIGNsYXNzPSJpc29sYXRvciB2ZXJ0aWNhbC1hbGlnbi1jZW50ZXIiCiAgICAgICAgICAgICAgb24tdGFwPSJfaXNvbGF0ZU5hbWUiCiAgICAgICAgICAgICAgbmFtZT0iW1tpdGVtXV0iCiAgICAgICAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJpdGVtLWxhYmVsLWNvbnRhaW5lciI+CiAgICAgICAgICAgIDxzcGFuPltbaXRlbV1dPC9zcGFuPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L2Rpdj4KICAgIDxzdHlsZT4KICAgICAgcGFwZXItaW5wdXQgewogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWZvY3VzLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDogewogICAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIH0KICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1sYWJlbDogewogICAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIH0KICAgICAgfQogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CiAgICAgICNvdXRlci1jb250YWluZXIgewogICAgICAgIGNvbnRhaW46IGNvbnRlbnQ7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkOwogICAgICB9CiAgICAgIC5uYW1lLXJvdyB7CiAgICAgICAgY29udGFpbjogY29udGVudDsKICAgICAgICBwYWRkaW5nLXRvcDogNXB4OwogICAgICAgIHBhZGRpbmctYm90dG9tOiA1cHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7IC8qIG1ha2VzIHdyYXBwaW5nIG9mIGh5cGVycGFyYW0gc3RyaW5ncyBiZXR0ZXIgKi8KICAgICAgfQogICAgICAuaWNvbi1jb250YWluZXIgewogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDJweDsKICAgICAgfQogICAgICAuY2hlY2tib3ggewogICAgICAgIHBhZGRpbmctbGVmdDogMnB4OwogICAgICAgIHdpZHRoOiAxOHB4OwogICAgICAgIGhlaWdodDogMThweDsKICAgICAgfQogICAgICAuaXNvbGF0b3IgewogICAgICAgIHdpZHRoOiAxOHB4OwogICAgICAgIGhlaWdodDogMThweDsKICAgICAgICBwYWRkaW5nOiAwcHg7CiAgICAgIH0KICAgICAgLmlzb2xhdG9yLWNvbnRhaW5lciB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiA2cHg7CiAgICAgICAgcGFkZGluZy1yaWdodDogM3B4OwogICAgICB9CiAgICAgIC5jaGVja2JveC1jb250YWluZXIgewogICAgICAgIHBhZGRpbmctbGVmdDogMnB4OwogICAgICB9CiAgICAgIC5pdGVtLWxhYmVsLWNvbnRhaW5lciB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiA1cHg7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIHdpZHRoOiAwcHg7IC8qIGhhY2sgdG8gZ2V0IHRoZSBmbGV4LWdyb3cgdG8gd29yayBwcm9wZXJseSAqLwogICAgICB9CiAgICAgIC50b29sdGlwLXZhbHVlLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAycHg7CiAgICAgIH0KICAgICAgLnZlcnRpY2FsLWFsaWduLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfQogICAgICAudmVydGljYWwtYWxpZ24tY29udGFpbmVyIC52ZXJ0aWNhbC1hbGlnbi1jZW50ZXIgewogICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjsKICAgICAgfQogICAgICAudmVydGljYWwtYWxpZ24tY29udGFpbmVyIC52ZXJ0aWNhbC1hbGlnbi10b3AgewogICAgICAgIGFsaWduLXNlbGY6IHN0YXJ0OwogICAgICB9CiAgICA8L3N0eWxlPgogIGAsdChbbyh7dHlwZTpBcnJheX0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLGtPLnByb3RvdHlwZSwibmFtZXMiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sa08ucHJvdG90eXBlLCJjb2xvcmluZyIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sa08ucHJvdG90eXBlLCJyZWdleCIsdm9pZCAwKSx0KFtvKHt0eXBlOkFycmF5LGNvbXB1dGVkOiJjb21wdXRlTmFtZXNNYXRjaGluZ1JlZ2V4KG5hbWVzLiosIF9yZWdleCkifSksZSgiZGVzaWduOnR5cGUiLEFycmF5KV0sa08ucHJvdG90eXBlLCJuYW1lc01hdGNoaW5nUmVnZXgiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLGtPLnByb3RvdHlwZSwic2VsZWN0aW9uU3RhdGUiLHZvaWQgMCksdChbbyh7dHlwZTpBcnJheSxub3RpZnk6ITAsY29tcHV0ZWQ6ImNvbXB1dGVPdXRTZWxlY3RlZChuYW1lc01hdGNoaW5nUmVnZXguKiwgc2VsZWN0aW9uU3RhdGUuKikifSksZSgiZGVzaWduOnR5cGUiLEFycmF5KV0sa08ucHJvdG90eXBlLCJvdXRTZWxlY3RlZCIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxrTy5wcm90b3R5cGUsIm1heE5hbWVzVG9FbmFibGVCeURlZmF1bHQiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sa08ucHJvdG90eXBlLCJfZGVib3VuY2VkUmVnZXhDaGFuZ2UiLHZvaWQgMCksdChbcygicmVnZXgiKSxlKCJkZXNpZ246dHlwZSIsUmVnRXhwKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxrTy5wcm90b3R5cGUsIl9yZWdleCIsbnVsbCksdChbYSgic2VsZWN0aW9uU3RhdGUiLCJuYW1lcyIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sa08ucHJvdG90eXBlLCJfc2V0SXNvbGF0b3JJY29uIixudWxsKSxrTz10KFtpKCJ0Zi1tdWx0aS1jaGVja2JveCIpXSxrTyk7bGV0IExPPWNsYXNzIGV4dGVuZHMgeWV7Z2V0IF9wYXJ0cygpe3ZhciB0PXRoaXMudmFsdWUsZT10aGlzLmRlbGltaXRlclBhdHRlcm47Y29uc3Qgbj1bXTtmb3IoOzspe2NvbnN0IGk9bmV3IFJlZ0V4cChlLCJnIik7aWYoaS50ZXN0KHQpLDA9PT1pLmxhc3RJbmRleCl7bi5wdXNoKHQpO2JyZWFrfW4ucHVzaCh0LnNsaWNlKDAsaS5sYXN0SW5kZXgpKSx0PXQuc2xpY2UoaS5sYXN0SW5kZXgpfXJldHVybiBufX07TE8udGVtcGxhdGU9X2VgCiAgICA8IS0tCiAgICAgIFRoaXMgdWdseSBmb3JtYXR0aW5nIGlzIHJlcXVpcmVkIHRvIHByZXZlbnQgc3BhY2VzIGZyb20gc2xpcHBpbmcKICAgICAgaW50byB0aGUgSFRNTC4KICAgIC0tPgogICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfcGFydHNdXSIgYXM9InBhcnQiCiAgICAgID5bW3BhcnRdXTx3YnIKICAgIC8+PC90ZW1wbGF0ZT4KICBgLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLExPLnByb3RvdHlwZSwidmFsdWUiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sTE8ucHJvdG90eXBlLCJkZWxpbWl0ZXJQYXR0ZXJuIix2b2lkIDApLHQoW3MoInZhbHVlIiwiZGVsaW1pdGVyUGF0dGVybiIpLGUoImRlc2lnbjp0eXBlIixBcnJheSksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sTE8ucHJvdG90eXBlLCJfcGFydHMiLG51bGwpLExPPXQoW2koInRmLXdici1zdHJpbmciKV0sTE8pO2xldCBQTz1jbGFzcyBleHRlbmRzKHRyKHllKSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMucnVuU2VsZWN0aW9uU3RhdGU9WHMoInJ1blNlbGVjdGlvblN0YXRlIix7ZGVmYXVsdFZhbHVlOnt9fSkuY2FsbCh0aGlzKSx0aGlzLnJlZ2V4SW5wdXQ9SXMoInJlZ2V4SW5wdXQiLHtkZWZhdWx0VmFsdWU6IiJ9KS5jYWxsKHRoaXMpLHRoaXMuX2RhdGFMb2NhdGlvbkNsaXBMZW5ndGg9MjUwLHRoaXMuX2RhdGFMb2NhdGlvbkRlbGltaXRlclBhdHRlcm49IlsvPV8sLV0iLHRoaXMuY29sb3Jpbmc9e2dldENvbG9yOkFPfSx0aGlzLl9zdG9yZVJ1blNlbGVjdGlvblN0YXRlPSRzKCJydW5TZWxlY3Rpb25TdGF0ZSIse2RlZmF1bHRWYWx1ZTp7fX0pLHRoaXMuX3JlZ2V4T2JzZXJ2ZXI9T3MoInJlZ2V4SW5wdXQiLHtkZWZhdWx0VmFsdWU6IiJ9KX1hdHRhY2hlZCgpe3RoaXMuX3J1blN0b3JlTGlzdGVuZXI9eWwuYWRkTGlzdGVuZXIoKCgpPT57dGhpcy5zZXQoInJ1bnMiLHlsLmdldFJ1bnMoKSl9KSksdGhpcy5zZXQoInJ1bnMiLHlsLmdldFJ1bnMoKSksdGhpcy5fZW52U3RvcmVMaXN0ZW5lcj1nbC5hZGRMaXN0ZW5lcigoKCk9Pnt0aGlzLnNldCgiZGF0YUxvY2F0aW9uIixnbC5nZXREYXRhTG9jYXRpb24oKSl9KSksdGhpcy5zZXQoImRhdGFMb2NhdGlvbiIsZ2wuZ2V0RGF0YUxvY2F0aW9uKCkpfWRldGFjaGVkKCl7eWwucmVtb3ZlTGlzdGVuZXJCeUtleSh0aGlzLl9ydW5TdG9yZUxpc3RlbmVyKSxnbC5yZW1vdmVMaXN0ZW5lckJ5S2V5KHRoaXMuX2VudlN0b3JlTGlzdGVuZXIpfV90b2dnbGVBbGwoKXt0aGlzLiQubXVsdGlDaGVja2JveC50b2dnbGVBbGwoKX1nZXQgX2NsaXBwZWREYXRhTG9jYXRpb24oKXt2YXIgdD10aGlzLmRhdGFMb2NhdGlvbixlPXRoaXMuX2RhdGFMb2NhdGlvbkNsaXBMZW5ndGg7aWYodm9pZCAwIT09dClyZXR1cm4gdC5sZW5ndGg+ZT90LnN1YnN0cmluZygwLGUpOnR9X29wZW5EYXRhTG9jYXRpb25EaWFsb2codCl7dC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuJCQoIiNkYXRhLWxvY2F0aW9uLWRpYWxvZyIpLm9wZW4oKX1fc2hvdWxkU2hvd0V4cGFuZERhdGFMb2NhdGlvbkJ1dHRvbih0LGUpe3JldHVybiB0JiZ0Lmxlbmd0aD5lfX07UE8udGVtcGxhdGU9X2VgCiAgICA8cGFwZXItZGlhbG9nIHdpdGgtYmFja2Ryb3A9IiIgaWQ9ImRhdGEtbG9jYXRpb24tZGlhbG9nIj4KICAgICAgPGgyPkRhdGEgTG9jYXRpb248L2gyPgogICAgICA8dGYtd2JyLXN0cmluZwogICAgICAgIHZhbHVlPSJbW2RhdGFMb2NhdGlvbl1dIgogICAgICAgIGRlbGltaXRlci1wYXR0ZXJuPSJbW19kYXRhTG9jYXRpb25EZWxpbWl0ZXJQYXR0ZXJuXV0iCiAgICAgID4KICAgICAgPC90Zi13YnItc3RyaW5nCiAgICA+PC9wYXBlci1kaWFsb2c+CiAgICA8ZGl2IGlkPSJ0b3AtdGV4dCI+CiAgICAgIDxoMyBpZD0idG9vbHRpcC1oZWxwIiBjbGFzcz0idG9vbHRpcC1jb250YWluZXIiPlJ1bnM8L2gzPgogICAgPC9kaXY+CiAgICA8dGYtbXVsdGktY2hlY2tib3gKICAgICAgaWQ9Im11bHRpQ2hlY2tib3giCiAgICAgIG5hbWVzPSJbW3J1bnNdXSIKICAgICAgc2VsZWN0aW9uLXN0YXRlPSJ7e3J1blNlbGVjdGlvblN0YXRlfX0iCiAgICAgIG91dC1zZWxlY3RlZD0ie3tzZWxlY3RlZFJ1bnN9fSIKICAgICAgcmVnZXg9Int7cmVnZXhJbnB1dH19IgogICAgICBjb2xvcmluZz0iW1tjb2xvcmluZ11dIgogICAgPjwvdGYtbXVsdGktY2hlY2tib3g+CiAgICA8cGFwZXItYnV0dG9uIGNsYXNzPSJ4LWJ1dHRvbiIgaWQ9InRvZ2dsZS1hbGwiIG9uLXRhcD0iX3RvZ2dsZUFsbCI+CiAgICAgIFRvZ2dsZSBBbGwgUnVucwogICAgPC9wYXBlci1idXR0b24+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbZGF0YUxvY2F0aW9uXV0iPgogICAgICA8ZGl2IGlkPSJkYXRhLWxvY2F0aW9uIj4KICAgICAgICA8dGYtd2JyLXN0cmluZwogICAgICAgICAgdmFsdWU9IltbX2NsaXBwZWREYXRhTG9jYXRpb25dXSIKICAgICAgICAgIGRlbGltaXRlci1wYXR0ZXJuPSJbW19kYXRhTG9jYXRpb25EZWxpbWl0ZXJQYXR0ZXJuXV0iCiAgICAgICAgPjwvdGYtd2JyLXN0cmluZwogICAgICAgID48IS0tCiAgICAgICAgICBXZSB1c2UgSFRNTCBjb21tZW50cyB0byByZW1vdmUgc3BhY2VzIGJlZm9yZSB0aGUgZWxsaXBzaXMuCiAgICAgICAgLS0+PHRlbXBsYXRlCiAgICAgICAgICBpcz0iZG9tLWlmIgogICAgICAgICAgaWY9IltbX3Nob3VsZFNob3dFeHBhbmREYXRhTG9jYXRpb25CdXR0b24oZGF0YUxvY2F0aW9uLCBfZGF0YUxvY2F0aW9uQ2xpcExlbmd0aCldXSIKICAgICAgICAgID48IS0tCiAgICAgICAgICAtLT48YSBocmVmPSIiIG9uLWNsaWNrPSJfb3BlbkRhdGFMb2NhdGlvbkRpYWxvZyI+4oCmPC9hPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC90ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIHBhZGRpbmctYm90dG9tOiAxMHB4OwogICAgICB9CiAgICAgICN0b3AtdGV4dCB7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLXNlY29uZGFyeS10ZXh0LWNvbG9yKTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgcGFkZGluZy1yaWdodDogMTZweDsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICB9CiAgICAgIHRmLW11bHRpLWNoZWNrYm94IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CiAgICAgIC54LWJ1dHRvbiB7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXRiLXVpLWxpZ2h0LWFjY2VudCk7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLXVpLWRhcmstYWNjZW50KTsKICAgICAgfQogICAgICAjdG9vbHRpcC1oZWxwIHsKICAgICAgICBjb2xvcjogdmFyKC0tdGItc2Vjb25kYXJ5LXRleHQtY29sb3IpOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBmb250LXdlaWdodDogbm9ybWFsOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICAgIH0KICAgICAgcGFwZXItYnV0dG9uIHsKICAgICAgICBtYXJnaW4tbGVmdDogMDsKICAgICAgfQogICAgICAjZGF0YS1sb2NhdGlvbiB7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLXVpLWRhcmstYWNjZW50KTsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgbWFyZ2luOiA1cHggMCAwIDA7CiAgICAgICAgbWF4LXdpZHRoOiAyODhweDsKICAgICAgfQogICAgPC9zdHlsZT4KICBgLHQoW28oe3R5cGU6T2JqZWN0LG9ic2VydmVyOiJfc3RvcmVSdW5TZWxlY3Rpb25TdGF0ZSJ9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUE8ucHJvdG90eXBlLCJydW5TZWxlY3Rpb25TdGF0ZSIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZyxvYnNlcnZlcjoiX3JlZ2V4T2JzZXJ2ZXIifSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLFBPLnByb3RvdHlwZSwicmVnZXhJbnB1dCIsdm9pZCAwKSx0KFtvKHt0eXBlOkFycmF5LG5vdGlmeTohMH0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLFBPLnByb3RvdHlwZSwic2VsZWN0ZWRSdW5zIix2b2lkIDApLHQoW28oe3R5cGU6QXJyYXl9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSxQTy5wcm90b3R5cGUsInJ1bnMiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLFBPLnByb3RvdHlwZSwiZGF0YUxvY2F0aW9uIix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLFBPLnByb3RvdHlwZSwiX2RhdGFMb2NhdGlvbkNsaXBMZW5ndGgiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sUE8ucHJvdG90eXBlLCJfZGF0YUxvY2F0aW9uRGVsaW1pdGVyUGF0dGVybiIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxQTy5wcm90b3R5cGUsImNvbG9yaW5nIix2b2lkIDApLHQoW3MoImRhdGFMb2NhdGlvbiIsIl9kYXRhTG9jYXRpb25DbGlwTGVuZ3RoIiksZSgiZGVzaWduOnR5cGUiLFN0cmluZyksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sUE8ucHJvdG90eXBlLCJfY2xpcHBlZERhdGFMb2NhdGlvbiIsbnVsbCksUE89dChbaSgidGYtcnVucy1zZWxlY3RvciIpXSxQTyk7Y2xhc3MgTk97Y29uc3RydWN0b3IoKXt0aGlzLmNhbmNlbGxhdGlvbkNvdW50PTB9Y2FuY2VsbGFibGUodCl7Y29uc3QgZT10aGlzLmNhbmNlbGxhdGlvbkNvdW50O3JldHVybiBuPT50KHt2YWx1ZTpuLGNhbmNlbGxlZDp0aGlzLmNhbmNlbGxhdGlvbkNvdW50IT09ZX0pfWNhbmNlbEFsbCgpe3RoaXMuY2FuY2VsbGF0aW9uQ291bnQrK319bGV0IElPPWNsYXNzIGV4dGVuZHModHIoeWUpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5odG1sPSIifWdldCBzYW5pdGl6ZWRIdG1sKCl7cmV0dXJuIHRoaXMuaHRtbH1hdHRhY2hlZCgpe3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCgpPT57dGhpcy5zY29wZVN1YnRyZWUodGhpcy4kLm1hcmtkb3duLCEwKX0pKX19O2Z1bmN0aW9uIE9PKHQpe3JldHVybiB0P3QudG9TdHJpbmcoKS5yZXBsYWNlKC9HTVQtXGQrIFwoKFteKV0rKVwpLywiJDEiKToiIn1JTy50ZW1wbGF0ZT1fZWAKICAgIDxkaXYgaWQ9Im1hcmtkb3duIiBpbm5lci1oLXQtbS1sPSJbW3Nhbml0aXplZEh0bWxdXSI+PC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIC8qCiAgICAgICAqIFJlZHVjZSB0b3Btb3N0IGFuZCBib3R0b21tb3N0IG1hcmdpbnMgZnJvbSAxNnB4IHRvIDAuM2VtIChyZW5kZXJzCiAgICAgICAqIGF0IGFib3V0IDQuOHB4KSB0byBrZWVwIHRoZSBsYXlvdXQgY29tcGFjdC4gVGhpcyBpbXByb3ZlcyB0aGUKICAgICAgICogYXBwZWFyYW5jZSB3aGVuIHRoZXJlIGlzIG9ubHkgb25lIGxpbmUgb2YgdGV4dDsgc3RhbmRhcmQgTWFya2Rvd24KICAgICAgICogcmVuZGVyZXJzIHdpbGwgc3RpbGwgaW5jbHVkZSBhIFxgPHA+XGAgZWxlbWVudC4KICAgICAgICoKICAgICAgICogQnkgdGFyZ2V0aW5nIG9ubHkgdGhlIHRvcC1sZXZlbCwgZXh0cmVtYWwgZWxlbWVudHMsIHdlIHByZXNlcnZlIGFueQogICAgICAgKiBhY3R1YWwgcGFyYWdyYXBoIGJyZWFrcyBhbmQgb25seSBjaGFuZ2UgdGhlIHBhZGRpbmcgYWdhaW5zdCB0aGUKICAgICAgICogY29tcG9uZW50IGVkZ2VzLgogICAgICAgKi8KICAgICAgI21hcmtkb3duID4gcDpmaXJzdC1jaGlsZCB7CiAgICAgICAgbWFyZ2luLXRvcDogMC4zZW07CiAgICAgIH0KICAgICAgI21hcmtkb3duID4gcDpsYXN0LWNoaWxkIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAwLjNlbTsKICAgICAgfQoKICAgICAgLyogUGxlYXNhbnQgc3R5bGVzIGZvciBNYXJrZG93biB0YWJsZXMuICovCiAgICAgICNtYXJrZG93biB0YWJsZSB7CiAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKICAgICAgfQogICAgICAjbWFya2Rvd24gdGFibGUgdGggewogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgIH0KICAgICAgI21hcmtkb3duIHRhYmxlIHRoLAogICAgICAjbWFya2Rvd24gdGFibGUgdGQgewogICAgICAgIHBhZGRpbmc6IDZweCAxM3B4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXRiLXVpLWJvcmRlciwgI2RmZTJlNSk7CiAgICAgIH0KICAgICAgI21hcmtkb3duIHRhYmxlIHRyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0OwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS10Yi11aS1ib3JkZXIsICNjNmNiZDEpOwogICAgICB9CiAgICA8L3N0eWxlPgogIGAsdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sSU8ucHJvdG90eXBlLCJodG1sIix2b2lkIDApLHQoW3MoImh0bWwiKSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxJTy5wcm90b3R5cGUsInNhbml0aXplZEh0bWwiLG51bGwpLElPPXQoW2koInRmLW1hcmtkb3duLXZpZXciKV0sSU8pLHRsKHttb2R1bGVOYW1lOiJ0Zi1jYXJkLWhlYWRpbmctc3R5bGUiLHN0eWxlQ29udGVudDoiXG4gICAgZmlnY2FwdGlvbiB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG5cbiAgICAvKiogSG9yaXpvbnRhbCBsaW5lIG9mIGxhYmVscy4gKi9cbiAgICAuaGVhZGluZy1yb3cge1xuICAgICAgbWFyZ2luLXRvcDogLTRweDtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgIH1cblxuICAgIC8qKiBQaWVjZSBvZiB0ZXh0IGluIHRoZSBmaWd1cmUgY2FwdGlvbi4gKi9cbiAgICAuaGVhZGluZy1sYWJlbCB7XG4gICAgICBmbGV4LWdyb3c6IDE7XG4gICAgICBtYXJnaW4tdG9wOiA0cHg7XG4gICAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XG4gICAgfVxuXG4gICAgLyoqIE1ha2VzIGxhYmVsIHNob3cgb24gdGhlIHJpZ2h0LiAqL1xuICAgIC5oZWFkaW5nLXJpZ2h0IHtcbiAgICAgIGZsZXgtZ3JvdzogMDtcbiAgICB9XG4gICJ9KTtsZXQgUk89Y2xhc3MgZXh0ZW5kcyB5ZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5kaXNwbGF5TmFtZT1udWxsLHRoaXMudGFnPW51bGwsdGhpcy5ydW49bnVsbCx0aGlzLmRlc2NyaXB0aW9uPW51bGwsdGhpcy5jb2xvcj1udWxsfV91cGRhdGVIZWFkaW5nU3R5bGUoKXt0aGlzLnVwZGF0ZVN0eWxlcyh7Ii0tdGYtY2FyZC1oZWFkaW5nLWJhY2tncm91bmQtY29sb3IiOnRoaXMuX3J1bkJhY2tncm91bmQsIi0tdGYtY2FyZC1oZWFkaW5nLWNvbG9yIjp0aGlzLl9ydW5Db2xvcn0pfV9jb21wdXRlUnVuQmFja2dyb3VuZCh0KXtyZXR1cm4gdHx8Im5vbmUifV9jb21wdXRlUnVuQ29sb3IodCl7cmV0dXJuKGZ1bmN0aW9uIGUodCl7Y29uc3QgZT0oZnVuY3Rpb24gbih0KXtpZighdClyZXR1cm4gbnVsbDtsZXQgZT10Lm1hdGNoKC9eIyhbMC05YS1mXXsxLDJ9KShbMC05YS1mXXsxLDJ9KShbMC05YS1mXXsxLDJ9KSQvKTtpZighZSlyZXR1cm4gbnVsbDtpZig0PT10Lmxlbmd0aClmb3IodmFyIG49MTtuPD0zO24rKyllW25dPWVbbl0rZVtuXTtyZXR1cm5bcGFyc2VJbnQoZVsxXSwxNikscGFyc2VJbnQoZVsyXSwxNikscGFyc2VJbnQoZVszXSwxNildfSkodCk7cmV0dXJuIGU/TWF0aC5yb3VuZCgoMjk5KmVbMF0rNTg3KmVbMV0rMTE0KmVbMl0pLzFlMyk+MTI1PyJpbmhlcml0IjoiI2VlZSI6ImluaGVyaXQifSkodCl9Z2V0IF9uYW1lTGFiZWwoKXtyZXR1cm4gdGhpcy5kaXNwbGF5TmFtZXx8dGhpcy50YWd8fCIifWdldCBfdGFnTGFiZWwoKXt2YXIgdD10aGlzLnRhZztyZXR1cm4gdCYmdCE9PXRoaXMuZGlzcGxheU5hbWU/dDoiIn1fdG9nZ2xlRGVzY3JpcHRpb25EaWFsb2codCl7Y29uc3QgZT10aGlzLiQuZGVzY3JpcHRpb25EaWFsb2c7ZS5wb3NpdGlvblRhcmdldD10LnRhcmdldCxlLnRvZ2dsZSgpfX07Uk8udGVtcGxhdGU9X2VgCiAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgogICAgICA8ZmlnY2FwdGlvbiBjbGFzcz0iY29udGVudCI+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1yb3ciPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19uYW1lTGFiZWxdXSI+CiAgICAgICAgICAgIDxkaXYgaXRlbXByb3A9Im5hbWUiIGNsYXNzPSJoZWFkaW5nLWxhYmVsIG5hbWUiPltbX25hbWVMYWJlbF1dPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3J1bl1dIj4KICAgICAgICAgICAgPCEtLSBFeHRyYSB3cmFwcGluZyBzcGFuIG5lZWRlZCB0byBhdm9pZCBmbGV4Ym94IGJsb2NraWZpY2F0aW9uLiAtLT4KICAgICAgICAgICAgPCEtLSAoc2VlIGZsZXhib3ggc3BlYywgc2VjdGlvbiA0ICJGbGV4IEl0ZW1zIikgLS0+CiAgICAgICAgICAgIDxzcGFuPgogICAgICAgICAgICAgIDxzcGFuCiAgICAgICAgICAgICAgICBpdGVtcHJvcD0icnVuIgogICAgICAgICAgICAgICAgaWQ9ImhlYWRpbmctcnVuIgogICAgICAgICAgICAgICAgY2xhc3M9ImhlYWRpbmctbGFiZWwgaGVhZGluZy1yaWdodCBydW4iCiAgICAgICAgICAgICAgICA+W1tydW5dXTwvc3BhbgogICAgICAgICAgICAgID4KICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3RhZ0xhYmVsXV0iPgogICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1yb3ciPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIj4KICAgICAgICAgICAgICB0YWc6IDxzcGFuIGl0ZW1wcm9wPSJ0YWciPltbX3RhZ0xhYmVsXV08L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8c2xvdD48L3Nsb3Q+CiAgICAgIDwvZmlnY2FwdGlvbj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2Rlc2NyaXB0aW9uXV0iPgogICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgICAgaWNvbj0iaW5mbyIKICAgICAgICAgIG9uLXRhcD0iX3RvZ2dsZURlc2NyaXB0aW9uRGlhbG9nIgogICAgICAgICAgdGl0bGU9IlNob3cgc3VtbWFyeSBkZXNjcmlwdGlvbiIKICAgICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHBhcGVyLWRpYWxvZwogICAgICAgIGlkPSJkZXNjcmlwdGlvbkRpYWxvZyIKICAgICAgICBuby1vdmVybGFwPSIiCiAgICAgICAgaG9yaXpvbnRhbC1hbGlnbj0iYXV0byIKICAgICAgICB2ZXJ0aWNhbC1hbGlnbj0iYXV0byIKICAgICAgPgogICAgICAgIDxwYXBlci1kaWFsb2ctc2Nyb2xsYWJsZT4KICAgICAgICAgIDx0Zi1tYXJrZG93bi12aWV3IGh0bWw9IltbZGVzY3JpcHRpb25dXSI+PC90Zi1tYXJrZG93bi12aWV3PgogICAgICAgIDwvcGFwZXItZGlhbG9nLXNjcm9sbGFibGU+CiAgICAgIDwvcGFwZXItZGlhbG9nPgogICAgPC9kaXY+CiAgICA8c3R5bGUgaW5jbHVkZT0idGYtY2FyZC1oZWFkaW5nLXN0eWxlIj4KICAgICAgLmNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgfQogICAgICAuY29udGVudCB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgfQogICAgICAubmFtZSB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICB9CiAgICAgIC5ydW4gewogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICB3aWR0aDogYXV0bzsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgICAgcGFkZGluZzogMXB4IDRweCAycHg7CiAgICAgIH0KICAgICAgcGFwZXItaWNvbi1idXR0b24gewogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgfQogICAgICBwYXBlci1kaWFsb2ctc2Nyb2xsYWJsZSB7CiAgICAgICAgbWF4LXdpZHRoOiA2NDBweDsKICAgICAgfQogICAgICAjaGVhZGluZy1ydW4gewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXRmLWNhcmQtaGVhZGluZy1iYWNrZ3JvdW5kLWNvbG9yKTsKICAgICAgICBjb2xvcjogdmFyKC0tdGYtY2FyZC1oZWFkaW5nLWNvbG9yKTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLFJPLnByb3RvdHlwZSwiZGlzcGxheU5hbWUiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sUk8ucHJvdG90eXBlLCJ0YWciLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sUk8ucHJvdG90eXBlLCJydW4iLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sUk8ucHJvdG90eXBlLCJkZXNjcmlwdGlvbiIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxSTy5wcm90b3R5cGUsImNvbG9yIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfY29tcHV0ZVJ1bkJhY2tncm91bmQoY29sb3IpIixyZWFkT25seTohMCxvYnNlcnZlcjoiX3VwZGF0ZUhlYWRpbmdTdHlsZSJ9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sUk8ucHJvdG90eXBlLCJfcnVuQmFja2dyb3VuZCIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZyxjb21wdXRlZDoiX2NvbXB1dGVSdW5Db2xvcihjb2xvcikiLHJlYWRPbmx5OiEwLG9ic2VydmVyOiJfdXBkYXRlSGVhZGluZ1N0eWxlIn0pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxSTy5wcm90b3R5cGUsIl9ydW5Db2xvciIsdm9pZCAwKSx0KFtzKCJkaXNwbGF5TmFtZSIsInRhZyIpLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFJPLnByb3RvdHlwZSwiX25hbWVMYWJlbCIsbnVsbCksdChbcygiZGlzcGxheU5hbWUiLCJ0YWciKSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxSTy5wcm90b3R5cGUsIl90YWdMYWJlbCIsbnVsbCksUk89dChbaSgidGYtY2FyZC1oZWFkaW5nIildLFJPKTtsZXQgek89Y2xhc3MgZXh0ZW5kcyh0cih5ZSkpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9tZXRhZGF0YUNhbmNlbGxlcj1uZXcgTk8sdGhpcy5fc3RlcHM9W10sdGhpcy5fYXR0YWNoZWQ9ITF9Z2V0IF9ydW5Db2xvcigpe3JldHVybiBBTyh0aGlzLnJ1bil9Z2V0IF9oYXNBdExlYXN0T25lU3RlcCgpe3ZhciB0PXRoaXMuX3N0ZXBzO3JldHVybiEhdCYmdC5sZW5ndGg+MH1nZXQgX2hhc011bHRpcGxlU3RlcHMoKXt2YXIgdD10aGlzLl9zdGVwcztyZXR1cm4hIXQmJnQubGVuZ3RoPjF9Z2V0IF9tYXhTdGVwSW5kZXgoKXtyZXR1cm4gdGhpcy5fc3RlcHMubGVuZ3RoLTF9Z2V0IF9jdXJyZW50RGF0dW0oKXtyZXR1cm4gdGhpcy5fc3RlcHNbdGhpcy5fc3RlcEluZGV4XX1nZXQgX3NhbXBsZVRleHQoKXtyZXR1cm5gJHt0aGlzLnNhbXBsZSsxfWB9Z2V0IF9oYXNNdWx0aXBsZVNhbXBsZXMoKXtyZXR1cm4gdGhpcy50b3RhbFNhbXBsZXM+MX1hdHRhY2hlZCgpe3RoaXMuX2F0dGFjaGVkPSEwLHRoaXMucmVsb2FkKCl9X3JlbG9hZE9uUnVuVGFnQ2hhbmdlKCl7dGhpcy5yZWxvYWQoKX1yZWxvYWQoKXtpZighdGhpcy5fYXR0YWNoZWQpcmV0dXJuO3RoaXMuX21ldGFkYXRhQ2FuY2VsbGVyLmNhbmNlbEFsbCgpO2NvbnN0IHQ9Z3IoKS5wbHVnaW5Sb3V0ZSgiYXVkaW8iLCIvYXVkaW8iLG5ldyBVUkxTZWFyY2hQYXJhbXMoe3RhZzp0aGlzLnRhZyxydW46dGhpcy5ydW4sc2FtcGxlOlN0cmluZyh0aGlzLnNhbXBsZSl9KSksZT10aGlzLl9tZXRhZGF0YUNhbmNlbGxlci5jYW5jZWxsYWJsZSgodD0+e2lmKHQuY2FuY2VsbGVkKXJldHVybjtjb25zdCBlPXQudmFsdWUubWFwKHRoaXMuX2NyZWF0ZVN0ZXBEYXR1bS5iaW5kKHRoaXMpKTt0aGlzLnNldCgiX3N0ZXBzIixlKSx0aGlzLnNldCgiX3N0ZXBJbmRleCIsZS5sZW5ndGgtMSl9KSk7dGhpcy5yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KHQpLnRoZW4oZSl9X2NyZWF0ZVN0ZXBEYXR1bSh0KXtjb25zdCBlPW5ldyBVUkxTZWFyY2hQYXJhbXModC5xdWVyeSk7ZS5hcHBlbmQoInRzIixTdHJpbmcodC53YWxsX3RpbWUpKTtjb25zdCBuPWdyKCkucGx1Z2luUm91dGUoImF1ZGlvIiwiL2luZGl2aWR1YWxBdWRpbyIsZSk7cmV0dXJue3dhbGxfdGltZTpPTyhuZXcgRGF0ZSgxZTMqdC53YWxsX3RpbWUpKSxzdGVwOnQuc3RlcCxsYWJlbDp0LmxhYmVsLGNvbnRlbnRUeXBlOnQuY29udGVudFR5cGUsdXJsOm59fX07ek8udGVtcGxhdGU9X2VgCiAgICA8dGYtY2FyZC1oZWFkaW5nCiAgICAgIHRhZz0iW1t0YWddXSIKICAgICAgcnVuPSJbW3J1bl1dIgogICAgICBkaXNwbGF5LW5hbWU9IltbdGFnTWV0YWRhdGEuZGlzcGxheU5hbWVdXSIKICAgICAgZGVzY3JpcHRpb249IltbdGFnTWV0YWRhdGEuZGVzY3JpcHRpb25dXSIKICAgICAgY29sb3I9IltbX3J1bkNvbG9yXV0iCiAgICA+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaGFzTXVsdGlwbGVTYW1wbGVzXV0iPgogICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmctcm93Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmctbGFiZWwiPgogICAgICAgICAgICBzYW1wbGU6IFtbX3NhbXBsZVRleHRdXSBvZiBbW3RvdGFsU2FtcGxlc11dCiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNBdExlYXN0T25lU3RlcF1dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLXJvdyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIj4KICAgICAgICAgICAgc3RlcCA8c3Ryb25nPltbX2N1cnJlbnREYXR1bS5zdGVwXV08L3N0cm9uZz4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19jdXJyZW50RGF0dW0ud2FsbF90aW1lXV0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIGhlYWRpbmctcmlnaHQiPgogICAgICAgICAgICAgIFtbX2N1cnJlbnREYXR1bS53YWxsX3RpbWVdXQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaGFzTXVsdGlwbGVTdGVwc11dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLXJvdyI+CiAgICAgICAgICA8cGFwZXItc2xpZGVyCiAgICAgICAgICAgIGlkPSJzdGVwcyIKICAgICAgICAgICAgaW1tZWRpYXRlLXZhbHVlPSJ7e19zdGVwSW5kZXh9fSIKICAgICAgICAgICAgbWF4PSJbW19tYXhTdGVwSW5kZXhdXSIKICAgICAgICAgICAgbWF4LW1hcmtlcnM9IltbX21heFN0ZXBJbmRleF1dIgogICAgICAgICAgICBzbmFwcz0iIgogICAgICAgICAgICBzdGVwPSIxIgogICAgICAgICAgICB2YWx1ZT0ie3tfc3RlcEluZGV4fX0iCiAgICAgICAgICA+PC9wYXBlci1zbGlkZXI+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L3RmLWNhcmQtaGVhZGluZz4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaGFzQXRMZWFzdE9uZVN0ZXBdXSI+CiAgICAgIDxhdWRpbwogICAgICAgIGNvbnRyb2xzPSIiCiAgICAgICAgc3JjJD0iW1tfY3VycmVudERhdHVtLnVybF1dIgogICAgICAgIHR5cGUkPSJbW19jdXJyZW50RGF0dW0uY29udGVudFR5cGVdXSIKICAgICAgPjwvYXVkaW8+CiAgICAgIDx0Zi1tYXJrZG93bi12aWV3IGh0bWw9IltbX2N1cnJlbnREYXR1bS5sYWJlbF1dIj48L3RmLW1hcmtkb3duLXZpZXc+CiAgICA8L3RlbXBsYXRlPgogICAgPGRpdiBpZD0ibWFpbi1hdWRpby1jb250YWluZXIiPjwvZGl2PgoKICAgIDxzdHlsZSBpbmNsdWRlPSJ0Zi1jYXJkLWhlYWRpbmctc3R5bGUiPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgd2lkdGg6IDM1MHB4OwogICAgICAgIGhlaWdodDogYXV0bzsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgLS1zdGVwLXNsaWRlci1rbm9iLWNvbG9yOiAjNDI0MjQyOwogICAgICAgIG1hcmdpbi1yaWdodDogMTVweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNXB4OwogICAgICB9CgogICAgICAjc3RlcHMgewogICAgICAgIGhlaWdodDogMTVweDsKICAgICAgICBtYXJnaW46IDAgMCAwIC0xNXB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgcGFkZGluZzogMCA1cHg7IC8qIHNvIHRoZSBzbGlkZXIga25vYiBkb2Vzbid0IGJ1dHQgb3V0ICovCiAgICAgICAgbWFyZ2luLXRvcDogNXB4OwogICAgICAgIC0tcGFwZXItc2xpZGVyLWFjdGl2ZS1jb2xvcjogdmFyKC0tc3RlcC1zbGlkZXIta25vYi1jb2xvcik7CiAgICAgICAgLS1wYXBlci1zbGlkZXIta25vYi1jb2xvcjogdmFyKC0tc3RlcC1zbGlkZXIta25vYi1jb2xvcik7CiAgICAgICAgLS1wYXBlci1zbGlkZXItcGluLWNvbG9yOiB2YXIoLS1zdGVwLXNsaWRlci1rbm9iLWNvbG9yKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLXN0YXJ0LWNvbG9yOiB2YXIoLS1zdGVwLXNsaWRlci1rbm9iLWNvbG9yKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLXN0YXJ0LWJvcmRlci1jb2xvcjogdmFyKC0tc3RlcC1zbGlkZXIta25vYi1jb2xvcik7CiAgICAgICAgLS1wYXBlci1zbGlkZXItcGluLXN0YXJ0LWNvbG9yOiB2YXIoLS1zdGVwLXNsaWRlci1rbm9iLWNvbG9yKTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLHpPLnByb3RvdHlwZSwicnVuIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLHpPLnByb3RvdHlwZSwidGFnIix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLHpPLnByb3RvdHlwZSwic2FtcGxlIix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLHpPLnByb3RvdHlwZSwidG90YWxTYW1wbGVzIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLHpPLnByb3RvdHlwZSwidGFnTWV0YWRhdGEiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsaHIpXSx6Ty5wcm90b3R5cGUsInJlcXVlc3RNYW5hZ2VyIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE5PKV0sek8ucHJvdG90eXBlLCJfbWV0YWRhdGFDYW5jZWxsZXIiLHZvaWQgMCksdChbbyh7dHlwZTpBcnJheX0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLHpPLnByb3RvdHlwZSwiX3N0ZXBzIix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLHpPLnByb3RvdHlwZSwiX3N0ZXBJbmRleCIsdm9pZCAwKSx0KFtzKCJydW4iKSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSx6Ty5wcm90b3R5cGUsIl9ydW5Db2xvciIsbnVsbCksdChbcygiX3N0ZXBzIiksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLHpPLnByb3RvdHlwZSwiX2hhc0F0TGVhc3RPbmVTdGVwIixudWxsKSx0KFtzKCJfc3RlcHMiKSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sek8ucHJvdG90eXBlLCJfaGFzTXVsdGlwbGVTdGVwcyIsbnVsbCksdChbcygiX3N0ZXBzIiksZSgiZGVzaWduOnR5cGUiLE51bWJlciksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sek8ucHJvdG90eXBlLCJfbWF4U3RlcEluZGV4IixudWxsKSx0KFtzKCJfc3RlcHMiLCJfc3RlcEluZGV4IiksZSgiZGVzaWduOnR5cGUiLE9iamVjdCksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sek8ucHJvdG90eXBlLCJfY3VycmVudERhdHVtIixudWxsKSx0KFtzKCJzYW1wbGUiKSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSx6Ty5wcm90b3R5cGUsIl9zYW1wbGVUZXh0IixudWxsKSx0KFtzKCJ0b3RhbFNhbXBsZXMiKSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sek8ucHJvdG90eXBlLCJfaGFzTXVsdGlwbGVTYW1wbGVzIixudWxsKSx0KFthKCJydW4iLCJ0YWciKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLHpPLnByb3RvdHlwZSwiX3JlbG9hZE9uUnVuVGFnQ2hhbmdlIixudWxsKSx6Tz10KFtpKCJ0Zi1hdWRpby1sb2FkZXIiKV0sek8pO2xldCBETz1jbGFzcyBleHRlbmRzKHRyKHllKSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMucmVsb2FkT25SZWFkeT0hMCx0aGlzLl90YWdGaWx0ZXI9IiIsdGhpcy5fcmVxdWVzdE1hbmFnZXI9bmV3IGhyfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLnJlbG9hZE9uUmVhZHkmJnRoaXMucmVsb2FkKCl9cmVsb2FkKCl7dGhpcy5fZmV0Y2hUYWdzKCkudGhlbigoKCk9Pnt0aGlzLl9yZWxvYWRBdWRpbygpfSkpfV9mZXRjaFRhZ3MoKXtjb25zdCB0PWdyKCkucGx1Z2luUm91dGUoImF1ZGlvIiwiL3RhZ3MiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKCh0PT57aWYod2UuaXNFcXVhbCh0LHRoaXMuX3J1blRvVGFnSW5mbykpcmV0dXJuO2NvbnN0IGU9b3Iod2UubWFwVmFsdWVzKHQsKHQ9Pk9iamVjdC5rZXlzKHQpKSkpO3RoaXMuc2V0KCJfZGF0YU5vdEZvdW5kIiwwPT09ZS5sZW5ndGgpLHRoaXMuc2V0KCJfcnVuVG9UYWdJbmZvIix0KX0pKX1fcmVsb2FkQXVkaW8oKXt0aGlzLnJvb3QucXVlcnlTZWxlY3RvckFsbCgidGYtYXVkaW8tbG9hZGVyIikuZm9yRWFjaCgodD0+e3QucmVsb2FkKCl9KSl9X3Nob3VsZE9wZW4odCl7cmV0dXJuIHQ8PTJ9Z2V0IF9jYXRlZ29yaWVzKCl7dmFyIHQ9dGhpcy5fcnVuVG9UYWdJbmZvLGU9dGhpcy5fc2VsZWN0ZWRSdW5zLG49dGhpcy5fdGFnRmlsdGVyO2Z1bmN0aW9uIGkoZSl7Y29uc3Qgbj10W2UucnVuXVtlLnRhZ10uc2FtcGxlcztyZXR1cm4gd2UucmFuZ2UobikubWFwKCh0PT5PYmplY3QuYXNzaWduKHt9LGUse3NhbXBsZTp0LHRvdGFsU2FtcGxlczpufSkpKX1yZXR1cm4gU3Iod2UubWFwVmFsdWVzKHQsKHQ9Pk9iamVjdC5rZXlzKHQpKSksZSxuKS5tYXAoKHQ9Pk9iamVjdC5hc3NpZ24oe30sdCx7aXRlbXM6W10uY29uY2F0LmFwcGx5KFtdLHQuaXRlbXMubWFwKGkpKX0pKSl9X3RhZ01ldGFkYXRhKHQsZSxuKXtyZXR1cm4gdFtlXVtuXX19O0RPLnRlbXBsYXRlPV9lYAogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgY2xhc3M9InNpZGViYXIiIHNsb3Q9InNpZGViYXIiPgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiBydW5zLXNlbGVjdG9yIj4KICAgICAgICAgIDx0Zi1ydW5zLXNlbGVjdG9yCiAgICAgICAgICAgIGlkPSJydW5zLXNlbGVjdG9yIgogICAgICAgICAgICBzZWxlY3RlZC1ydW5zPSJ7e19zZWxlY3RlZFJ1bnN9fSIKICAgICAgICAgID48L3RmLXJ1bnMtc2VsZWN0b3I+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjZW50ZXIiIHNsb3Q9ImNlbnRlciI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLXdhcm5pbmciPgogICAgICAgICAgICA8aDM+Tm8gYXVkaW8gZGF0YSB3YXMgZm91bmQuPC9oMz4KICAgICAgICAgICAgPHA+UHJvYmFibGUgY2F1c2VzOjwvcD4KICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgIDxsaT5Zb3UgaGF2ZW7igJl0IHdyaXR0ZW4gYW55IGF1ZGlvIGRhdGEgdG8geW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICAgIDxsaT5UZW5zb3JCb2FyZCBjYW7igJl0IGZpbmQgeW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICA8L3VsPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW914oCZcmUgbmV3IHRvIHVzaW5nIFRlbnNvckJvYXJkLCBhbmQgd2FudCB0byBmaW5kIG91dCBob3cgdG8KICAgICAgICAgICAgICBhZGQgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIgogICAgICAgICAgICAgICAgPlJFQURNRTwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgcGVyaGFwcyB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCIKICAgICAgICAgICAgICAgID5UZW5zb3JCb2FyZCB0dXRvcmlhbDwvYQogICAgICAgICAgICAgID4uCiAgICAgICAgICAgIDwvcD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciCiAgICAgICAgICAgICAgICA+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgY29uc2lkZXIgZmlsaW5nIGFuIGlzc3VlIG9uIEdpdEh1Yi4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8dGYtdGFnLWZpbHRlcmVyIHRhZy1maWx0ZXI9Int7X3RhZ0ZpbHRlcn19Ij48L3RmLXRhZy1maWx0ZXJlcj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3CiAgICAgICAgICAgICAgY2F0ZWdvcnk9IltbY2F0ZWdvcnldXSIKICAgICAgICAgICAgICBpbml0aWFsLW9wZW5lZD0iW1tfc2hvdWxkT3BlbihpbmRleCldXSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0Zi1hdWRpby1sb2FkZXIKICAgICAgICAgICAgICAgICAgYWN0aXZlPSJbW2FjdGl2ZV1dIgogICAgICAgICAgICAgICAgICBydW49IltbaXRlbS5ydW5dXSIKICAgICAgICAgICAgICAgICAgdGFnPSJbW2l0ZW0udGFnXV0iCiAgICAgICAgICAgICAgICAgIHNhbXBsZT0iW1tpdGVtLnNhbXBsZV1dIgogICAgICAgICAgICAgICAgICB0b3RhbC1zYW1wbGVzPSJbW2l0ZW0udG90YWxTYW1wbGVzXV0iCiAgICAgICAgICAgICAgICAgIHRhZy1tZXRhZGF0YT0iW1tfdGFnTWV0YWRhdGEoX3J1blRvVGFnSW5mbywgaXRlbS5ydW4sIGl0ZW0udGFnKV1dIgogICAgICAgICAgICAgICAgICByZXF1ZXN0LW1hbmFnZXI9IltbX3JlcXVlc3RNYW5hZ2VyXV0iCiAgICAgICAgICAgICAgICA+PC90Zi1hdWRpby1sb2FkZXI+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldz4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICA8L3RmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICA8c3R5bGUgaW5jbHVkZT0iZGFzaGJvYXJkLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAubm8tZGF0YS13YXJuaW5nIHsKICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OwogICAgICAgIG1hcmdpbjogODBweCBhdXRvIDAgYXV0bzsKICAgICAgfQogICAgPC9zdHlsZT4KICBgLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sRE8ucHJvdG90eXBlLCJyZWxvYWRPblJlYWR5Iix2b2lkIDApLHQoW28oe3R5cGU6QXJyYXl9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSxETy5wcm90b3R5cGUsIl9zZWxlY3RlZFJ1bnMiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRE8ucHJvdG90eXBlLCJfcnVuVG9UYWdJbmZvIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sRE8ucHJvdG90eXBlLCJfZGF0YU5vdEZvdW5kIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLERPLnByb3RvdHlwZSwiX3RhZ0ZpbHRlciIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixocildLERPLnByb3RvdHlwZSwiX3JlcXVlc3RNYW5hZ2VyIix2b2lkIDApLHQoW3MoIl9ydW5Ub1RhZ0luZm8iLCJfc2VsZWN0ZWRSdW5zIiwiX3RhZ0ZpbHRlciIpLGUoImRlc2lnbjp0eXBlIixBcnJheSksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sRE8ucHJvdG90eXBlLCJfY2F0ZWdvcmllcyIsbnVsbCksRE89dChbaSgidGYtYXVkaW8tZGFzaGJvYXJkIildLERPKTtsZXQgQk89Y2xhc3MgZXh0ZW5kcyh0cih5ZSkpe2F0dGFjaGVkKCl7dGhpcy5hc3luYygoZnVuY3Rpb24oKXt0aGlzLmdldEVmZmVjdGl2ZUNoaWxkcmVuKCkuZm9yRWFjaChmdW5jdGlvbih0KXt0aGlzLmxpc3Rlbih0LCJ0YXAiLCJfc2VsZWN0VGFyZ2V0Iil9LmJpbmQodGhpcykpfSkpfV9zZWxlY3RUYXJnZXQodCl7dGhpcy5zZWxlY3RlZElkPXQuY3VycmVudFRhcmdldC5pZH1fc2VsZWN0ZWRJZENoYW5nZWQoKXt2YXIgdD10aGlzLnF1ZXJ5RWZmZWN0aXZlQ2hpbGRyZW4oIiMiK3RoaXMuc2VsZWN0ZWRJZCk7dCYmKHRoaXMuZ2V0RWZmZWN0aXZlQ2hpbGRyZW4oKS5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmNsYXNzTGlzdC5yZW1vdmUoInNlbGVjdGVkIil9KSksdC5jbGFzc0xpc3QuYWRkKCJzZWxlY3RlZCIpKX19O2Z1bmN0aW9uIEhPKHQsZSl7bGV0IG47Y29uc3QgaT17fTtyZXR1cm4gT2JqZWN0LmtleXModCkuZm9yRWFjaCgoZT0+e2NvbnN0IHI9dFtlXTt2b2lkIDA9PT1uJiYobj1yLmRpc3BsYXlOYW1lKSxuIT09ci5kaXNwbGF5TmFtZSYmKG49bnVsbCksdm9pZCAwPT09aVtyLmRlc2NyaXB0aW9uXSYmKGlbci5kZXNjcmlwdGlvbl09W10pLGlbci5kZXNjcmlwdGlvbl0ucHVzaChlKX0pKSx7ZGlzcGxheU5hbWU6bnVsbCE9bj9uOmUsZGVzY3JpcHRpb246KCgpPT57Y29uc3QgdD1PYmplY3Qua2V5cyhpKTtyZXR1cm4gMD09PXQubGVuZ3RoPyIiOjE9PT10Lmxlbmd0aD90WzBdOmA8cD48c3Ryb25nPk11bHRpcGxlIGRlc2NyaXB0aW9uczo8L3N0cm9uZz48L3A+PHVsPiR7dC5tYXAoKHQ9Pntjb25zdCBlPWlbdF0ubWFwKCh0PT5gPGNvZGU+JHt0LnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpLnJlcGxhY2UoLyYvZywiJmFtcDsiKX08L2NvZGU+YCkpLG49ZS5sZW5ndGg+Mj9lLnNsaWNlKDAsZS5sZW5ndGgtMSkuam9pbigiLCAiKSsiLCBhbmQgIitlW2UubGVuZ3RoLTFdOmUuam9pbigiIGFuZCAiKTtyZXR1cm5gPGxpPjxwPkZvciAkeyhmdW5jdGlvbiByKHQsZSxuKXtyZXR1cm4gMT09PXQ/ZTpufSkoZS5sZW5ndGgsInJ1biIsInJ1bnMiKX0gJHtufTo8L3A+JHt0fTwvbGk+YH0pKS5qb2luKCIiKX08L3VsPmB9KSgpfX1CTy50ZW1wbGF0ZT1fZWAKICAgIDxkaXYgaWQ9IndyYXAiPgogICAgICA8aDM+W1tuYW1lXV08L2gzPgogICAgICA8ZGl2IGNsYXNzPSJjb250ZW50LXdyYXBwZXIiPjxzbG90Pjwvc2xvdD48L2Rpdj4KICAgIDwvZGl2PgogICAgPHN0eWxlPgogICAgICAuY29udGVudC13cmFwcGVyIDo6c2xvdHRlZCgqKSB7CiAgICAgICAgYmFja2dyb3VuZDogbm9uZTsKICAgICAgICBjb2xvcjogdmFyKC0tdGItdWktZGFyay1hY2NlbnQpOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBtYXJnaW4tdG9wOiAxMHB4OwogICAgICB9CgogICAgICAuY29udGVudC13cmFwcGVyIDo6c2xvdHRlZCgqKSB7CiAgICAgICAgYmFja2dyb3VuZDogbm9uZTsKICAgICAgICBjb2xvcjogdmFyKC0tdGItdWktZGFyay1hY2NlbnQpOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBtYXJnaW4tdG9wOiAxMHB4OwogICAgICB9CgogICAgICAuY29udGVudC13cmFwcGVyIDo6c2xvdHRlZCguc2VsZWN0ZWQpIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS10Yi11aS1kYXJrLWFjY2VudCk7CiAgICAgICAgY29sb3I6IHdoaXRlICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIGgzIHsKICAgICAgICBjb2xvcjogdmFyKC0tdGItc2Vjb25kYXJ5LXRleHQtY29sb3IpOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogbm9ybWFsOwogICAgICAgIG1hcmdpbjogMCAwIDVweDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLEJPLnByb3RvdHlwZSwibmFtZSIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZyxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9zZWxlY3RlZElkQ2hhbmdlZCJ9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sQk8ucHJvdG90eXBlLCJzZWxlY3RlZElkIix2b2lkIDApLEJPPXQoW2koInRmLW9wdGlvbi1zZWxlY3RvciIpXSxCTyk7bGV0IEZPPWNsYXNzIGV4dGVuZHMgeWV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMud2VpZ2h0PS42LHRoaXMuX3VwZGF0ZVdlaWdodD13ZS5kZWJvdW5jZSgoZnVuY3Rpb24odCl7dGhpcy53ZWlnaHQ9dH0pLDI1MCl9X2ltbWVkaWF0ZVdlaWdodE51bWJlckZvclBhcGVyU2xpZGVyQ2hhbmdlZCgpe3RoaXMuX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dD10aGlzLl9pbW1lZGlhdGVXZWlnaHROdW1iZXJGb3JQYXBlclNsaWRlci50b1N0cmluZygpLHRoaXMuX3VwZGF0ZVdlaWdodC5jYWxsKHRoaXMsdGhpcy5faW1tZWRpYXRlV2VpZ2h0TnVtYmVyRm9yUGFwZXJTbGlkZXIpfV9pbnB1dFdlaWdodFN0cmluZ0ZvclBhcGVySW5wdXRDaGFuZ2VkKCl7K3RoaXMuX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dDwwP3RoaXMuX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dD0iMCI6K3RoaXMuX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dD4xJiYodGhpcy5faW5wdXRXZWlnaHRTdHJpbmdGb3JQYXBlcklucHV0PSIxIik7dmFyIHQ9K3RoaXMuX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dDtpc05hTih0KXx8dGhpcy5fdXBkYXRlV2VpZ2h0LmNhbGwodGhpcyx0KX19O2Z1bmN0aW9uIFZPKHQsZSl7Y29uc3Qgbj1PYmplY3Qua2V5cyhlKS5zb3J0KCkuZmlsdGVyKCh0PT52b2lkIDAhPT1lW3RdKSk7aWYoIW4ubGVuZ3RoKXJldHVybiB0O2NvbnN0IGk9LTEhPT10LmluZGV4T2YoIj8iKT8iJiI6Ij8iO3JldHVybiB0K2krW10uY29uY2F0KC4uLm4ubWFwKCh0PT57Y29uc3Qgbj1lW3RdO3JldHVybihBcnJheS5pc0FycmF5KG4pP246W25dKS5tYXAoKGU9PmAke3R9PSR7KGZ1bmN0aW9uIG4odCl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh0KS5yZXBsYWNlKC9cKC9nLCIlMjgiKS5yZXBsYWNlKC9cKS9nLCIlMjkiKX0KLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UKICAgIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlCiAgICBMaWNlbnNlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKICAgIFRISVMgQ09ERSBJUyBQUk9WSURFRCBPTiBBTiAqQVMgSVMqIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKICAgIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gQU5ZIElNUExJRUQKICAgIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsCiAgICBNRVJDSEFOVEFCTElUWSBPUiBOT04tSU5GUklOR0VNRU5ULgoKICAgIFNlZSB0aGUgQXBhY2hlIFZlcnNpb24gMi4wIExpY2Vuc2UgZm9yIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucwogICAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8pKGUpfWApKX0pKSkuam9pbigiJiIpfUZPLnRlbXBsYXRlPV9lYAogICAgPGgzIGNsYXNzPSJ0aXRsZSI+U21vb3RoaW5nPC9oMz4KICAgIDxkaXYgY2xhc3M9InNtb290aGluZy1ibG9jayI+CiAgICAgIDxwYXBlci1zbGlkZXIKICAgICAgICBpZD0ic2xpZGVyIgogICAgICAgIGltbWVkaWF0ZS12YWx1ZT0ie3tfaW1tZWRpYXRlV2VpZ2h0TnVtYmVyRm9yUGFwZXJTbGlkZXJ9fSIKICAgICAgICBtYXg9IltbbWF4XV0iCiAgICAgICAgbWluPSJbW21pbl1dIgogICAgICAgIHBpbgogICAgICAgIHN0ZXA9Iltbc3RlcF1dIgogICAgICAgIHR5cGU9Im51bWJlciIKICAgICAgICB2YWx1ZT0ie3t3ZWlnaHR9fSIKICAgICAgPjwvcGFwZXItc2xpZGVyPgogICAgICA8cGFwZXItaW5wdXQKICAgICAgICBpZD0iaW5wdXQiCiAgICAgICAgbGFiZWw9IndlaWdodCIKICAgICAgICBuby1sYWJlbC1mbG9hdAogICAgICAgIHZhbHVlPSJ7e19pbnB1dFdlaWdodFN0cmluZ0ZvclBhcGVySW5wdXR9fSIKICAgICAgICB0eXBlPSJudW1iZXIiCiAgICAgICAgc3RlcD0iW1tzdGVwXV0iCiAgICAgICAgbWluPSJbW21pbl1dIgogICAgICAgIG1heD0iW1ttYXhdXSIKICAgICAgPjwvcGFwZXItaW5wdXQ+CiAgICA8L2Rpdj4KICAgIDxzdHlsZT4KICAgICAgLnRpdGxlIHsKICAgICAgICBjb2xvcjogdmFyKC0tdGItc2Vjb25kYXJ5LXRleHQtY29sb3IpOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBmb250LXdlaWdodDogbm9ybWFsOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICAgIH0KCiAgICAgIC5zbW9vdGhpbmctYmxvY2sgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KCiAgICAgIHBhcGVyLXNsaWRlciB7CiAgICAgICAgLS1wYXBlci1zbGlkZXItYWN0aXZlLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLXN0YXJ0LWJvcmRlci1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItbWFya2Vycy1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItcGluLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1waW4tc3RhcnQtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIGZsZXgtZ3JvdzogMjsKICAgICAgfQoKICAgICAgcGFwZXItaW5wdXQgewogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWZvY3VzLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDogewogICAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIH0KICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1sYWJlbDogewogICAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIH0KICAgICAgICB3aWR0aDogNjBweDsKICAgICAgfQogICAgPC9zdHlsZT4KICBgLHQoW28oe3R5cGU6TnVtYmVyfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLEZPLnByb3RvdHlwZSwic3RlcCIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxGTy5wcm90b3R5cGUsIm1heCIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxGTy5wcm90b3R5cGUsIm1pbiIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcixub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sRk8ucHJvdG90eXBlLCJ3ZWlnaHQiLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXIsbm90aWZ5OiEwLG9ic2VydmVyOiJfaW1tZWRpYXRlV2VpZ2h0TnVtYmVyRm9yUGFwZXJTbGlkZXJDaGFuZ2VkIn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxGTy5wcm90b3R5cGUsIl9pbW1lZGlhdGVXZWlnaHROdW1iZXJGb3JQYXBlclNsaWRlciIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZyxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9pbnB1dFdlaWdodFN0cmluZ0ZvclBhcGVySW5wdXRDaGFuZ2VkIn0pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxGTy5wcm90b3R5cGUsIl9pbnB1dFdlaWdodFN0cmluZ0ZvclBhcGVySW5wdXQiLHZvaWQgMCksRk89dChbaSgidGYtc21vb3RoaW5nLWlucHV0IildLEZPKTt2YXIgVU89T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKHQsZSl7dC5fX3Byb3RvX189ZX18fGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShuKSYmKHRbbl09ZVtuXSl9LGpPPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uIHQoZSl7Zm9yKHZhciBuLGk9MSxyPWFyZ3VtZW50cy5sZW5ndGg7aTxyO2krKylmb3IodmFyIG8gaW4gbj1hcmd1bWVudHNbaV0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4sbykmJihlW29dPW5bb10pO3JldHVybiBlfTtmdW5jdGlvbiBHTyh0KXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl0sbj0wO3JldHVybiBlP2UuY2FsbCh0KTp7bmV4dDpmdW5jdGlvbigpe3JldHVybiB0JiZuPj10Lmxlbmd0aCYmKHQ9dm9pZCAwKSx7dmFsdWU6dCYmdFtuKytdLGRvbmU6IXR9fX19ZnVuY3Rpb24gV08odCxlKXt2YXIgbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl07aWYoIW4pcmV0dXJuIHQ7dmFyIGkscixvPW4uY2FsbCh0KSxhPVtdO3RyeXtmb3IoOyh2b2lkIDA9PT1lfHxlLS0gPjApJiYhKGk9by5uZXh0KCkpLmRvbmU7KWEucHVzaChpLnZhbHVlKX1jYXRjaCh0KXtyPXtlcnJvcjp0fX1maW5hbGx5e3RyeXtpJiYhaS5kb25lJiYobj1vLnJldHVybikmJm4uY2FsbChvKX1maW5hbGx5e2lmKHIpdGhyb3cgci5lcnJvcn19cmV0dXJuIGF9ZnVuY3Rpb24gcU8odCl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBxTz8odGhpcy52PXQsdGhpcyk6bmV3IHFPKHQpfXZhciBZTz1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxfX2V4dGVuZHM6ZnVuY3Rpb24gWE8odCxlKXtmdW5jdGlvbiBuKCl7dGhpcy5jb25zdHJ1Y3Rvcj10fVVPKHQsZSksdC5wcm90b3R5cGU9bnVsbD09PWU/T2JqZWN0LmNyZWF0ZShlKToobi5wcm90b3R5cGU9ZS5wcm90b3R5cGUsbmV3IG4pfSxfX2Fzc2lnbjpqTyxfX3Jlc3Q6ZnVuY3Rpb24gJE8odCxlKXt2YXIgbj17fTtmb3IodmFyIGkgaW4gdClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxpKSYmZS5pbmRleE9mKGkpPDAmJihuW2ldPXRbaV0pO2lmKG51bGwhPXQmJiJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj0wO2ZvcihpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCk7cjxpLmxlbmd0aDtyKyspZS5pbmRleE9mKGlbcl0pPDAmJihuW2lbcl1dPXRbaVtyXV0pfXJldHVybiBufSxfX2RlY29yYXRlOmZ1bmN0aW9uIEtPKHQsZSxuLGkpe3ZhciByLG89YXJndW1lbnRzLmxlbmd0aCxhPW88Mz9lOm51bGw9PT1pP2k9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLG4pOmk7aWYoIm9iamVjdCI9PXR5cGVvZiBSZWZsZWN0JiYiZnVuY3Rpb24iPT10eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSlhPVJlZmxlY3QuZGVjb3JhdGUodCxlLG4saSk7ZWxzZSBmb3IodmFyIHM9dC5sZW5ndGgtMTtzPj0wO3MtLSkocj10W3NdKSYmKGE9KG88Mz9yKGEpOm8+Mz9yKGUsbixhKTpyKGUsbikpfHxhKTtyZXR1cm4gbz4zJiZhJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLGEpLGF9LF9fcGFyYW06ZnVuY3Rpb24gWk8odCxlKXtyZXR1cm4gZnVuY3Rpb24obixpKXtlKG4saSx0KX19LF9fbWV0YWRhdGE6ZnVuY3Rpb24gSk8odCxlKXtpZigib2JqZWN0Ij09dHlwZW9mIFJlZmxlY3QmJiJmdW5jdGlvbiI9PXR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhKXJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKHQsZSl9LF9fYXdhaXRlcjpmdW5jdGlvbiBRTyh0LGUsbixpKXtyZXR1cm4gbmV3KG58fChuPVByb21pc2UpKSgoZnVuY3Rpb24ocixvKXtmdW5jdGlvbiBhKHQpe3RyeXtsKGkubmV4dCh0KSl9Y2F0Y2godCl7byh0KX19ZnVuY3Rpb24gcyh0KXt0cnl7bChpLnRocm93KHQpKX1jYXRjaCh0KXtvKHQpfX1mdW5jdGlvbiBsKHQpe3QuZG9uZT9yKHQudmFsdWUpOm5ldyBuKChmdW5jdGlvbihlKXtlKHQudmFsdWUpfSkpLnRoZW4oYSxzKX1sKChpPWkuYXBwbHkodCxlfHxbXSkpLm5leHQoKSl9KSl9LF9fZ2VuZXJhdG9yOmZ1bmN0aW9uIHRSKHQsZSl7dmFyIG4saSxyLG8sYT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZyWzBdKXRocm93IHJbMV07cmV0dXJuIHJbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gbz17bmV4dDpzKDApLHRocm93OnMoMSkscmV0dXJuOnMoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihvW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLG87ZnVuY3Rpb24gcyhvKXtyZXR1cm4gZnVuY3Rpb24ocyl7cmV0dXJuKGZ1bmN0aW9uIGwobyl7aWYobil0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDthOyl0cnl7aWYobj0xLGkmJihyPWlbMiZvWzBdPyJyZXR1cm4iOm9bMF0/InRocm93IjoibmV4dCJdKSYmIShyPXIuY2FsbChpLG9bMV0pKS5kb25lKXJldHVybiByO3N3aXRjaChpPTAsciYmKG89WzAsci52YWx1ZV0pLG9bMF0pe2Nhc2UgMDpjYXNlIDE6cj1vO2JyZWFrO2Nhc2UgNDpyZXR1cm4gYS5sYWJlbCsrLHt2YWx1ZTpvWzFdLGRvbmU6ITF9O2Nhc2UgNTphLmxhYmVsKyssaT1vWzFdLG89WzBdO2NvbnRpbnVlO2Nhc2UgNzpvPWEub3BzLnBvcCgpLGEudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKHI9KHI9YS50cnlzKS5sZW5ndGg+MCYmcltyLmxlbmd0aC0xXSl8fDYhPT1vWzBdJiYyIT09b1swXSkpe2E9MDtjb250aW51ZX1pZigzPT09b1swXSYmKCFyfHxvWzFdPnJbMF0mJm9bMV08clszXSkpe2EubGFiZWw9b1sxXTticmVha31pZig2PT09b1swXSYmYS5sYWJlbDxyWzFdKXthLmxhYmVsPXJbMV0scj1vO2JyZWFrfWlmKHImJmEubGFiZWw8clsyXSl7YS5sYWJlbD1yWzJdLGEub3BzLnB1c2gobyk7YnJlYWt9clsyXSYmYS5vcHMucG9wKCksYS50cnlzLnBvcCgpO2NvbnRpbnVlfW89ZS5jYWxsKHQsYSl9Y2F0Y2godCl7bz1bNix0XSxpPTB9ZmluYWxseXtuPXI9MH1pZig1Jm9bMF0pdGhyb3cgb1sxXTtyZXR1cm57dmFsdWU6b1swXT9vWzFdOnZvaWQgMCxkb25lOiEwfX0pKFtvLHNdKX19fSxfX2V4cG9ydFN0YXI6ZnVuY3Rpb24gZVIodCxlKXtmb3IodmFyIG4gaW4gdCllLmhhc093blByb3BlcnR5KG4pfHwoZVtuXT10W25dKX0sX192YWx1ZXM6R08sX19yZWFkOldPLF9fc3ByZWFkOmZ1bmN0aW9uIG5SKCl7Zm9yKHZhciB0PVtdLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXQ9dC5jb25jYXQoV08oYXJndW1lbnRzW2VdKSk7cmV0dXJuIHR9LF9fYXdhaXQ6cU8sX19hc3luY0dlbmVyYXRvcjpmdW5jdGlvbiBpUih0LGUsbil7aWYoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKXRocm93IG5ldyBUeXBlRXJyb3IoIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpO3ZhciBpLHI9bi5hcHBseSh0LGV8fFtdKSxvPVtdO3JldHVybiBpPXt9LGEoIm5leHQiKSxhKCJ0aHJvdyIpLGEoInJldHVybiIpLGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGk7ZnVuY3Rpb24gYSh0KXtyW3RdJiYoaVt0XT1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKG4saSl7by5wdXNoKFt0LGUsbixpXSk+MXx8cyh0LGUpfSkpfSl9ZnVuY3Rpb24gcyh0LGUpe3RyeXshKGZ1bmN0aW9uIG4odCl7dC52YWx1ZSBpbnN0YW5jZW9mIHFPP1Byb21pc2UucmVzb2x2ZSh0LnZhbHVlLnYpLnRoZW4obCxjKTp1KG9bMF1bMl0sdCl9KShyW3RdKGUpKX1jYXRjaCh0KXt1KG9bMF1bM10sdCl9fWZ1bmN0aW9uIGwodCl7cygibmV4dCIsdCl9ZnVuY3Rpb24gYyh0KXtzKCJ0aHJvdyIsdCl9ZnVuY3Rpb24gdSh0LGUpe3QoZSksby5zaGlmdCgpLG8ubGVuZ3RoJiZzKG9bMF1bMF0sb1swXVsxXSl9fSxfX2FzeW5jRGVsZWdhdG9yOmZ1bmN0aW9uIHJSKHQpe3ZhciBlLG47cmV0dXJuIGU9e30saSgibmV4dCIpLGkoInRocm93IiwoZnVuY3Rpb24odCl7dGhyb3cgdH0pKSxpKCJyZXR1cm4iKSxlW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZTtmdW5jdGlvbiBpKGkscil7dFtpXSYmKGVbaV09ZnVuY3Rpb24oZSl7cmV0dXJuKG49IW4pP3t2YWx1ZTpxTyh0W2ldKGUpKSxkb25lOiJyZXR1cm4iPT09aX06cj9yKGUpOmV9KX19LF9fYXN5bmNWYWx1ZXM6ZnVuY3Rpb24gb1IodCl7aWYoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKXRocm93IG5ldyBUeXBlRXJyb3IoIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpO3ZhciBlPXRbU3ltYm9sLmFzeW5jSXRlcmF0b3JdO3JldHVybiBlP2UuY2FsbCh0KTpHTyh0KX0sX19tYWtlVGVtcGxhdGVPYmplY3Q6ZnVuY3Rpb24gYVIodCxlKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5P09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJyYXciLHt2YWx1ZTplfSk6dC5yYXc9ZSx0fX0pO2Z1bmN0aW9uIHNSKHQsZSl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTp0Pj1lPzA6TmFOfWZ1bmN0aW9uIGxSKHQpe3JldHVybiAxPT09dC5sZW5ndGgmJih0PShmdW5jdGlvbiBlKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3JldHVybiBzUih0KGUpLG4pfX0pKHQpKSx7bGVmdDpmdW5jdGlvbihlLG4saSxyKXtmb3IobnVsbD09aSYmKGk9MCksbnVsbD09ciYmKHI9ZS5sZW5ndGgpO2k8cjspe3ZhciBvPWkrcj4+PjE7dChlW29dLG4pPDA/aT1vKzE6cj1vfXJldHVybiBpfSxyaWdodDpmdW5jdGlvbihlLG4saSxyKXtmb3IobnVsbD09aSYmKGk9MCksbnVsbD09ciYmKHI9ZS5sZW5ndGgpO2k8cjspe3ZhciBvPWkrcj4+PjE7dChlW29dLG4pPjA/cj1vOmk9bysxfXJldHVybiBpfX19dmFyIGNSPWxSKHNSKSx1Uj1jUi5yaWdodCxoUj1jUi5sZWZ0O2Z1bmN0aW9uIGRSKHQsZSl7cmV0dXJuW3QsZV19ZnVuY3Rpb24gcFIodCl7cmV0dXJuIG51bGw9PT10P05hTjordH1mdW5jdGlvbiBmUih0LGUpe3ZhciBuLGkscj10Lmxlbmd0aCxvPTAsYT0tMSxzPTAsbD0wO2lmKG51bGw9PWUpZm9yKDsrK2E8cjspaXNOYU4obj1wUih0W2FdKSl8fChsKz0oaT1uLXMpKihuLShzKz1pLysrbykpKTtlbHNlIGZvcig7KythPHI7KWlzTmFOKG49cFIoZSh0W2FdLGEsdCkpKXx8KGwrPShpPW4tcykqKG4tKHMrPWkvKytvKSkpO2lmKG8+MSlyZXR1cm4gbC8oby0xKX1mdW5jdGlvbiBtUih0LGUpe3ZhciBuPWZSKHQsZSk7cmV0dXJuIG4/TWF0aC5zcXJ0KG4pOm59ZnVuY3Rpb24gZ1IodCxlKXt2YXIgbixpLHIsbz10Lmxlbmd0aCxhPS0xO2lmKG51bGw9PWUpe2Zvcig7KythPG87KWlmKG51bGwhPShuPXRbYV0pJiZuPj1uKWZvcihpPXI9bjsrK2E8bzspbnVsbCE9KG49dFthXSkmJihpPm4mJihpPW4pLHI8biYmKHI9bikpfWVsc2UgZm9yKDsrK2E8bzspaWYobnVsbCE9KG49ZSh0W2FdLGEsdCkpJiZuPj1uKWZvcihpPXI9bjsrK2E8bzspbnVsbCE9KG49ZSh0W2FdLGEsdCkpJiYoaT5uJiYoaT1uKSxyPG4mJihyPW4pKTtyZXR1cm5baSxyXX12YXIgX1I9QXJyYXkucHJvdG90eXBlLHlSPV9SLnNsaWNlLHZSPV9SLm1hcDtmdW5jdGlvbiBiUih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24geFIodCl7cmV0dXJuIHR9ZnVuY3Rpb24gd1IodCxlLG4pe3Q9K3QsZT0rZSxuPShyPWFyZ3VtZW50cy5sZW5ndGgpPDI/KGU9dCx0PTAsMSk6cjwzPzE6K247Zm9yKHZhciBpPS0xLHI9MHxNYXRoLm1heCgwLE1hdGguY2VpbCgoZS10KS9uKSksbz1uZXcgQXJyYXkocik7KytpPHI7KW9baV09dCtpKm47cmV0dXJuIG99dmFyIFNSPU1hdGguc3FydCg1MCksTVI9TWF0aC5zcXJ0KDEwKSxFUj1NYXRoLnNxcnQoMik7ZnVuY3Rpb24gVFIodCxlLG4pe3ZhciBpPShlLXQpL01hdGgubWF4KDAsbikscj1NYXRoLmZsb29yKE1hdGgubG9nKGkpL01hdGguTE4xMCksbz1pL01hdGgucG93KDEwLHIpO3JldHVybiByPj0wPyhvPj1TUj8xMDpvPj1NUj81Om8+PUVSPzI6MSkqTWF0aC5wb3coMTAscik6LU1hdGgucG93KDEwLC1yKS8obz49U1I/MTA6bz49TVI/NTpvPj1FUj8yOjEpfWZ1bmN0aW9uIENSKHQsZSxuKXt2YXIgaT1NYXRoLmFicyhlLXQpL01hdGgubWF4KDAsbikscj1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKGkpL01hdGguTE4xMCkpLG89aS9yO3JldHVybiBvPj1TUj9yKj0xMDpvPj1NUj9yKj01Om8+PUVSJiYocio9MiksZTx0Py1yOnJ9ZnVuY3Rpb24gQVIodCl7cmV0dXJuIE1hdGguY2VpbChNYXRoLmxvZyh0Lmxlbmd0aCkvTWF0aC5MTjIpKzF9ZnVuY3Rpb24ga1IodCxlLG4pe2lmKG51bGw9PW4mJihuPXBSKSxpPXQubGVuZ3RoKXtpZigoZT0rZSk8PTB8fGk8MilyZXR1cm4rbih0WzBdLDAsdCk7aWYoZT49MSlyZXR1cm4rbih0W2ktMV0saS0xLHQpO3ZhciBpLHI9KGktMSkqZSxvPU1hdGguZmxvb3IociksYT0rbih0W29dLG8sdCk7cmV0dXJuIGErKCtuKHRbbysxXSxvKzEsdCktYSkqKHItbyl9fWZ1bmN0aW9uIExSKHQsZSl7dmFyIG4saSxyPXQubGVuZ3RoLG89LTE7aWYobnVsbD09ZSl7Zm9yKDsrK288cjspaWYobnVsbCE9KG49dFtvXSkmJm4+PW4pZm9yKGk9bjsrK288cjspbnVsbCE9KG49dFtvXSkmJmk+biYmKGk9bil9ZWxzZSBmb3IoOysrbzxyOylpZihudWxsIT0obj1lKHRbb10sbyx0KSkmJm4+PW4pZm9yKGk9bjsrK288cjspbnVsbCE9KG49ZSh0W29dLG8sdCkpJiZpPm4mJihpPW4pO3JldHVybiBpfWZ1bmN0aW9uIFBSKHQpe2lmKCEocj10Lmxlbmd0aCkpcmV0dXJuW107Zm9yKHZhciBlPS0xLG49TFIodCxOUiksaT1uZXcgQXJyYXkobik7KytlPG47KWZvcih2YXIgcixvPS0xLGE9aVtlXT1uZXcgQXJyYXkocik7KytvPHI7KWFbb109dFtvXVtlXTtyZXR1cm4gaX1mdW5jdGlvbiBOUih0KXtyZXR1cm4gdC5sZW5ndGh9dmFyIElSPUFycmF5LnByb3RvdHlwZS5zbGljZTtmdW5jdGlvbiBPUih0KXtyZXR1cm4gdH12YXIgUlI9MWUtNjtmdW5jdGlvbiB6Uih0KXtyZXR1cm4idHJhbnNsYXRlKCIrKHQrLjUpKyIsMCkifWZ1bmN0aW9uIERSKHQpe3JldHVybiJ0cmFuc2xhdGUoMCwiKyh0Ky41KSsiKSJ9ZnVuY3Rpb24gQlIodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybit0KGUpfX1mdW5jdGlvbiBIUih0KXt2YXIgZT1NYXRoLm1heCgwLHQuYmFuZHdpZHRoKCktMSkvMjtyZXR1cm4gdC5yb3VuZCgpJiYoZT1NYXRoLnJvdW5kKGUpKSxmdW5jdGlvbihuKXtyZXR1cm4rdChuKStlfX1mdW5jdGlvbiBGUigpe3JldHVybiF0aGlzLl9fYXhpc31mdW5jdGlvbiBWUih0LGUpe3ZhciBuPVtdLGk9bnVsbCxyPW51bGwsbz02LGE9NixzPTMsbD0xPT09dHx8ND09PXQ/LTE6MSxjPTQ9PT10fHwyPT09dD8ieCI6InkiLHU9MT09PXR8fDM9PT10P3pSOkRSO2Z1bmN0aW9uIGgoaCl7dmFyIGQ9bnVsbD09aT9lLnRpY2tzP2UudGlja3MuYXBwbHkoZSxuKTplLmRvbWFpbigpOmkscD1udWxsPT1yP2UudGlja0Zvcm1hdD9lLnRpY2tGb3JtYXQuYXBwbHkoZSxuKTpPUjpyLGY9TWF0aC5tYXgobywwKStzLG09ZS5yYW5nZSgpLGc9K21bMF0rLjUsXz0rbVttLmxlbmd0aC0xXSsuNSx5PShlLmJhbmR3aWR0aD9IUjpCUikoZS5jb3B5KCkpLHY9aC5zZWxlY3Rpb24/aC5zZWxlY3Rpb24oKTpoLGI9di5zZWxlY3RBbGwoIi5kb21haW4iKS5kYXRhKFtudWxsXSkseD12LnNlbGVjdEFsbCgiLnRpY2siKS5kYXRhKGQsZSkub3JkZXIoKSx3PXguZXhpdCgpLFM9eC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidGljayIpLE09eC5zZWxlY3QoImxpbmUiKSxFPXguc2VsZWN0KCJ0ZXh0Iik7Yj1iLm1lcmdlKGIuZW50ZXIoKS5pbnNlcnQoInBhdGgiLCIudGljayIpLmF0dHIoImNsYXNzIiwiZG9tYWluIikuYXR0cigic3Ryb2tlIiwiIzAwMCIpKSx4PXgubWVyZ2UoUyksTT1NLm1lcmdlKFMuYXBwZW5kKCJsaW5lIikuYXR0cigic3Ryb2tlIiwiIzAwMCIpLmF0dHIoYysiMiIsbCpvKSksRT1FLm1lcmdlKFMuYXBwZW5kKCJ0ZXh0IikuYXR0cigiZmlsbCIsIiMwMDAiKS5hdHRyKGMsbCpmKS5hdHRyKCJkeSIsMT09PXQ/IjBlbSI6Mz09PXQ/IjAuNzFlbSI6IjAuMzJlbSIpKSxoIT09diYmKGI9Yi50cmFuc2l0aW9uKGgpLHg9eC50cmFuc2l0aW9uKGgpLE09TS50cmFuc2l0aW9uKGgpLEU9RS50cmFuc2l0aW9uKGgpLHc9dy50cmFuc2l0aW9uKGgpLmF0dHIoIm9wYWNpdHkiLFJSKS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXtyZXR1cm4gaXNGaW5pdGUodD15KHQpKT91KHQpOnRoaXMuZ2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iKX0pKSxTLmF0dHIoIm9wYWNpdHkiLFJSKS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXt2YXIgZT10aGlzLnBhcmVudE5vZGUuX19heGlzO3JldHVybiB1KGUmJmlzRmluaXRlKGU9ZSh0KSk/ZTp5KHQpKX0pKSksdy5yZW1vdmUoKSxiLmF0dHIoImQiLDQ9PT10fHwyPT10PyJNIitsKmErIiwiK2crIkgwLjVWIitfKyJIIitsKmE6Ik0iK2crIiwiK2wqYSsiVjAuNUgiK18rIlYiK2wqYSkseC5hdHRyKCJvcGFjaXR5IiwxKS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXtyZXR1cm4gdSh5KHQpKX0pKSxNLmF0dHIoYysiMiIsbCpvKSxFLmF0dHIoYyxsKmYpLnRleHQocCksdi5maWx0ZXIoRlIpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZm9udC1zaXplIiwxMCkuYXR0cigiZm9udC1mYW1pbHkiLCJzYW5zLXNlcmlmIikuYXR0cigidGV4dC1hbmNob3IiLDI9PT10PyJzdGFydCI6ND09PXQ/ImVuZCI6Im1pZGRsZSIpLHYuZWFjaCgoZnVuY3Rpb24oKXt0aGlzLl9fYXhpcz15fSkpfXJldHVybiBoLnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsaCk6ZX0saC50aWNrcz1mdW5jdGlvbigpe3JldHVybiBuPUlSLmNhbGwoYXJndW1lbnRzKSxofSxoLnRpY2tBcmd1bWVudHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49bnVsbD09dD9bXTpJUi5jYWxsKHQpLGgpOm4uc2xpY2UoKX0saC50aWNrVmFsdWVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PXQ/bnVsbDpJUi5jYWxsKHQpLGgpOmkmJmkuc2xpY2UoKX0saC50aWNrRm9ybWF0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsaCk6cn0saC50aWNrU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1hPSt0LGgpOm99LGgudGlja1NpemVJbm5lcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0rdCxoKTpvfSxoLnRpY2tTaXplT3V0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9K3QsaCk6YX0saC50aWNrUGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0rdCxoKTpzfSxofXZhciBVUj17dmFsdWU6ZnVuY3Rpb24oKXt9fTtmdW5jdGlvbiBqUigpe2Zvcih2YXIgdCxlPTAsbj1hcmd1bWVudHMubGVuZ3RoLGk9e307ZTxuOysrZSl7aWYoISh0PWFyZ3VtZW50c1tlXSsiIil8fHQgaW4gaXx8L1tccy5dLy50ZXN0KHQpKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK3QpO2lbdF09W119cmV0dXJuIG5ldyBHUihpKX1mdW5jdGlvbiBHUih0KXt0aGlzLl89dH1mdW5jdGlvbiBXUih0LGUpe3JldHVybiB0LnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBuPSIiLGk9dC5pbmRleE9mKCIuIik7aWYoaT49MCYmKG49dC5zbGljZShpKzEpLHQ9dC5zbGljZSgwLGkpKSx0JiYhZS5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtyZXR1cm57dHlwZTp0LG5hbWU6bn19KSl9ZnVuY3Rpb24gcVIodCxlKXtmb3IodmFyIG4saT0wLHI9dC5sZW5ndGg7aTxyOysraSlpZigobj10W2ldKS5uYW1lPT09ZSlyZXR1cm4gbi52YWx1ZX1mdW5jdGlvbiBZUih0LGUsbil7Zm9yKHZhciBpPTAscj10Lmxlbmd0aDtpPHI7KytpKWlmKHRbaV0ubmFtZT09PWUpe3RbaV09VVIsdD10LnNsaWNlKDAsaSkuY29uY2F0KHQuc2xpY2UoaSsxKSk7YnJlYWt9cmV0dXJuIG51bGwhPW4mJnQucHVzaCh7bmFtZTplLHZhbHVlOm59KSx0fUdSLnByb3RvdHlwZT1qUi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkdSLG9uOmZ1bmN0aW9uKHQsZSl7dmFyIG4saT10aGlzLl8scj1XUih0KyIiLGkpLG89LTEsYT1yLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2lmKG51bGwhPWUmJiJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjazogIitlKTtmb3IoOysrbzxhOylpZihuPSh0PXJbb10pLnR5cGUpaVtuXT1ZUihpW25dLHQubmFtZSxlKTtlbHNlIGlmKG51bGw9PWUpZm9yKG4gaW4gaSlpW25dPVlSKGlbbl0sdC5uYW1lLG51bGwpO3JldHVybiB0aGlzfWZvcig7KytvPGE7KWlmKChuPSh0PXJbb10pLnR5cGUpJiYobj1xUihpW25dLHQubmFtZSkpKXJldHVybiBufSxjb3B5OmZ1bmN0aW9uKCl7dmFyIHQ9e30sZT10aGlzLl87Zm9yKHZhciBuIGluIGUpdFtuXT1lW25dLnNsaWNlKCk7cmV0dXJuIG5ldyBHUih0KX0sY2FsbDpmdW5jdGlvbih0LGUpe2lmKChuPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIG4saSxyPW5ldyBBcnJheShuKSxvPTA7bzxuOysrbylyW29dPWFyZ3VtZW50c1tvKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7Zm9yKG89MCxuPShpPXRoaXMuX1t0XSkubGVuZ3RoO288bjsrK28paVtvXS52YWx1ZS5hcHBseShlLHIpfSxhcHBseTpmdW5jdGlvbih0LGUsbil7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtmb3IodmFyIGk9dGhpcy5fW3RdLHI9MCxvPWkubGVuZ3RoO3I8bzsrK3IpaVtyXS52YWx1ZS5hcHBseShlLG4pfX07dmFyIFhSPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwkUj17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6WFIseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifTtmdW5jdGlvbiBLUih0KXt2YXIgZT10Kz0iIixuPWUuaW5kZXhPZigiOiIpO3JldHVybiBuPj0wJiYieG1sbnMiIT09KGU9dC5zbGljZSgwLG4pKSYmKHQ9dC5zbGljZShuKzEpKSwkUi5oYXNPd25Qcm9wZXJ0eShlKT97c3BhY2U6JFJbZV0sbG9jYWw6dH06dH1mdW5jdGlvbiBaUih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLm93bmVyRG9jdW1lbnQsbj10aGlzLm5hbWVzcGFjZVVSSTtyZXR1cm4gbj09PVhSJiZlLmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkk9PT1YUj9lLmNyZWF0ZUVsZW1lbnQodCk6ZS5jcmVhdGVFbGVtZW50TlMobix0KX19ZnVuY3Rpb24gSlIodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlModC5zcGFjZSx0LmxvY2FsKX19ZnVuY3Rpb24gUVIodCl7dmFyIGU9S1IodCk7cmV0dXJuKGUubG9jYWw/SlI6WlIpKGUpfWZ1bmN0aW9uIHR6KCl7fWZ1bmN0aW9uIGV6KHQpe3JldHVybiBudWxsPT10P3R6OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3Rvcih0KX19ZnVuY3Rpb24gbnooKXtyZXR1cm5bXX1mdW5jdGlvbiBpeih0KXtyZXR1cm4gbnVsbD09dD9uejpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwodCl9fWZ1bmN0aW9uIHJ6KHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoZXModCl9fWZ1bmN0aW9uIG96KHQpe3JldHVybiBuZXcgQXJyYXkodC5sZW5ndGgpfWZ1bmN0aW9uIGF6KHQsZSl7dGhpcy5vd25lckRvY3VtZW50PXQub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST10Lm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PXQsdGhpcy5fX2RhdGFfXz1lfWZ1bmN0aW9uIHN6KHQsZSxuLGkscixvKXtmb3IodmFyIGEscz0wLGw9ZS5sZW5ndGgsYz1vLmxlbmd0aDtzPGM7KytzKShhPWVbc10pPyhhLl9fZGF0YV9fPW9bc10saVtzXT1hKTpuW3NdPW5ldyBheih0LG9bc10pO2Zvcig7czxsOysrcykoYT1lW3NdKSYmKHJbc109YSl9ZnVuY3Rpb24gbHoodCxlLG4saSxyLG8sYSl7dmFyIHMsbCxjLHU9e30saD1lLmxlbmd0aCxkPW8ubGVuZ3RoLHA9bmV3IEFycmF5KGgpO2ZvcihzPTA7czxoOysrcykobD1lW3NdKSYmKHBbc109Yz0iJCIrYS5jYWxsKGwsbC5fX2RhdGFfXyxzLGUpLGMgaW4gdT9yW3NdPWw6dVtjXT1sKTtmb3Iocz0wO3M8ZDsrK3MpKGw9dVtjPSIkIithLmNhbGwodCxvW3NdLHMsbyldKT8oaVtzXT1sLGwuX19kYXRhX189b1tzXSx1W2NdPW51bGwpOm5bc109bmV3IGF6KHQsb1tzXSk7Zm9yKHM9MDtzPGg7KytzKShsPWVbc10pJiZ1W3Bbc11dPT09bCYmKHJbc109bCl9ZnVuY3Rpb24gY3oodCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59ZnVuY3Rpb24gdXoodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9fWZ1bmN0aW9uIGh6KHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKX19ZnVuY3Rpb24gZHoodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZSh0LGUpfX1mdW5jdGlvbiBweih0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsLGUpfX1mdW5jdGlvbiBmeih0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PW4/dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCk6dGhpcy5zZXRBdHRyaWJ1dGUodCxuKX19ZnVuY3Rpb24gbXoodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1uP3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxuKX19ZnVuY3Rpb24gZ3oodCl7cmV0dXJuIHQub3duZXJEb2N1bWVudCYmdC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHx0LmRvY3VtZW50JiZ0fHx0LmRlZmF1bHRWaWV3fWZ1bmN0aW9uIF96KHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCl9fWZ1bmN0aW9uIHl6KHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQsZSxuKX19ZnVuY3Rpb24gdnoodCxlLG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciBpPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PWk/dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KTp0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQsaSxuKX19ZnVuY3Rpb24gYnoodCxlKXtyZXR1cm4gdC5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKGUpfHxneih0KS5nZXRDb21wdXRlZFN0eWxlKHQsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShlKX1mdW5jdGlvbiB4eih0KXtyZXR1cm4gZnVuY3Rpb24oKXtkZWxldGUgdGhpc1t0XX19ZnVuY3Rpb24gd3oodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzW3RdPWV9fWZ1bmN0aW9uIFN6KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09bj9kZWxldGUgdGhpc1t0XTp0aGlzW3RdPW59fWZ1bmN0aW9uIE16KHQpe3JldHVybiB0LnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiBFeih0KXtyZXR1cm4gdC5jbGFzc0xpc3R8fG5ldyBUeih0KX1mdW5jdGlvbiBUeih0KXt0aGlzLl9ub2RlPXQsdGhpcy5fbmFtZXM9TXoodC5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX1mdW5jdGlvbiBDeih0LGUpe2Zvcih2YXIgbj1Feih0KSxpPS0xLHI9ZS5sZW5ndGg7KytpPHI7KW4uYWRkKGVbaV0pfWZ1bmN0aW9uIEF6KHQsZSl7Zm9yKHZhciBuPUV6KHQpLGk9LTEscj1lLmxlbmd0aDsrK2k8cjspbi5yZW1vdmUoZVtpXSl9ZnVuY3Rpb24ga3oodCl7cmV0dXJuIGZ1bmN0aW9uKCl7Q3oodGhpcyx0KX19ZnVuY3Rpb24gTHoodCl7cmV0dXJuIGZ1bmN0aW9uKCl7QXoodGhpcyx0KX19ZnVuY3Rpb24gUHoodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXsoZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk/Q3o6QXopKHRoaXMsdCl9fWZ1bmN0aW9uIE56KCl7dGhpcy50ZXh0Q29udGVudD0iIn1mdW5jdGlvbiBJeih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PXR9fWZ1bmN0aW9uIE96KHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMudGV4dENvbnRlbnQ9bnVsbD09ZT8iIjplfX1mdW5jdGlvbiBSeigpe3RoaXMuaW5uZXJIVE1MPSIifWZ1bmN0aW9uIHp6KHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPXR9fWZ1bmN0aW9uIER6KHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPW51bGw9PWU/IiI6ZX19ZnVuY3Rpb24gQnooKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gSHooKXt0aGlzLnByZXZpb3VzU2libGluZyYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLHRoaXMucGFyZW50Tm9kZS5maXJzdENoaWxkKX1mdW5jdGlvbiBGeigpe3JldHVybiBudWxsfWZ1bmN0aW9uIFZ6KCl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlO3QmJnQucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gVXooKXt2YXIgdD10aGlzLmNsb25lTm9kZSghMSksZT10aGlzLnBhcmVudE5vZGU7cmV0dXJuIGU/ZS5pbnNlcnRCZWZvcmUodCx0aGlzLm5leHRTaWJsaW5nKTp0fWZ1bmN0aW9uIGp6KCl7dmFyIHQ9dGhpcy5jbG9uZU5vZGUoITApLGU9dGhpcy5wYXJlbnROb2RlO3JldHVybiBlP2UuaW5zZXJ0QmVmb3JlKHQsdGhpcy5uZXh0U2libGluZyk6dH1hei5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmF6LGFwcGVuZENoaWxkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKHQsdGhpcy5fbmV4dCl9LGluc2VydEJlZm9yZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKHQsZSl9LHF1ZXJ5U2VsZWN0b3I6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yKHQpfSxxdWVyeVNlbGVjdG9yQWxsOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvckFsbCh0KX19LFR6LnByb3RvdHlwZT17YWRkOmZ1bmN0aW9uKHQpe3RoaXMuX25hbWVzLmluZGV4T2YodCk8MCYmKHRoaXMuX25hbWVzLnB1c2godCksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0scmVtb3ZlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX25hbWVzLmluZGV4T2YodCk7ZT49MCYmKHRoaXMuX25hbWVzLnNwbGljZShlLDEpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LGNvbnRhaW5zOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKHQpPj0wfX07dmFyIEd6PXt9LFd6PW51bGw7ZnVuY3Rpb24gcXoodCxlLG4pe3JldHVybiB0PVl6KHQsZSxuKSxmdW5jdGlvbihlKXt2YXIgbj1lLnJlbGF0ZWRUYXJnZXQ7biYmKG49PT10aGlzfHw4Jm4uY29tcGFyZURvY3VtZW50UG9zaXRpb24odGhpcykpfHx0LmNhbGwodGhpcyxlKX19ZnVuY3Rpb24gWXoodCxlLG4pe3JldHVybiBmdW5jdGlvbihpKXt2YXIgcj1XejtXej1pO3RyeXt0LmNhbGwodGhpcyx0aGlzLl9fZGF0YV9fLGUsbil9ZmluYWxseXtXej1yfX19ZnVuY3Rpb24gWHoodCl7cmV0dXJuIHQudHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcCgoZnVuY3Rpb24odCl7dmFyIGU9IiIsbj10LmluZGV4T2YoIi4iKTtyZXR1cm4gbj49MCYmKGU9dC5zbGljZShuKzEpLHQ9dC5zbGljZSgwLG4pKSx7dHlwZTp0LG5hbWU6ZX19KSl9ZnVuY3Rpb24gJHoodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fX29uO2lmKGUpe2Zvcih2YXIgbixpPTAscj0tMSxvPWUubGVuZ3RoO2k8bzsrK2kpbj1lW2ldLHQudHlwZSYmbi50eXBlIT09dC50eXBlfHxuLm5hbWUhPT10Lm5hbWU/ZVsrK3JdPW46dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKG4udHlwZSxuLmxpc3RlbmVyLG4uY2FwdHVyZSk7KytyP2UubGVuZ3RoPXI6ZGVsZXRlIHRoaXMuX19vbn19fWZ1bmN0aW9uIEt6KHQsZSxuKXt2YXIgaT1Hei5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpP3F6Oll6O3JldHVybiBmdW5jdGlvbihyLG8sYSl7dmFyIHMsbD10aGlzLl9fb24sYz1pKGUsbyxhKTtpZihsKWZvcih2YXIgdT0wLGg9bC5sZW5ndGg7dTxoOysrdSlpZigocz1sW3VdKS50eXBlPT09dC50eXBlJiZzLm5hbWU9PT10Lm5hbWUpcmV0dXJuIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihzLnR5cGUscy5saXN0ZW5lcixzLmNhcHR1cmUpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihzLnR5cGUscy5saXN0ZW5lcj1jLHMuY2FwdHVyZT1uKSx2b2lkKHMudmFsdWU9ZSk7dGhpcy5hZGRFdmVudExpc3RlbmVyKHQudHlwZSxjLG4pLHM9e3R5cGU6dC50eXBlLG5hbWU6dC5uYW1lLHZhbHVlOmUsbGlzdGVuZXI6YyxjYXB0dXJlOm59LGw/bC5wdXNoKHMpOnRoaXMuX19vbj1bc119fWZ1bmN0aW9uIFp6KHQsZSxuKXt2YXIgaT1neih0KSxyPWkuQ3VzdG9tRXZlbnQ7ImZ1bmN0aW9uIj09dHlwZW9mIHI/cj1uZXcgcihlLG4pOihyPWkuZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50Iiksbj8oci5pbml0RXZlbnQoZSxuLmJ1YmJsZXMsbi5jYW5jZWxhYmxlKSxyLmRldGFpbD1uLmRldGFpbCk6ci5pbml0RXZlbnQoZSwhMSwhMSkpLHQuZGlzcGF0Y2hFdmVudChyKX1mdW5jdGlvbiBKeih0LGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBaeih0aGlzLHQsZSl9fWZ1bmN0aW9uIFF6KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFp6KHRoaXMsdCxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fSJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQmJigib25tb3VzZWVudGVyImluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudHx8KEd6PXttb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0In0pKTt2YXIgdEQ9W251bGxdO2Z1bmN0aW9uIGVEKHQsZSl7dGhpcy5fZ3JvdXBzPXQsdGhpcy5fcGFyZW50cz1lfWZ1bmN0aW9uIG5EKCl7cmV0dXJuIG5ldyBlRChbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLHREKX1mdW5jdGlvbiBpRCh0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/bmV3IGVEKFtbZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0KV1dLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgZUQoW1t0XV0sdEQpfWZ1bmN0aW9uIHJEKHQpe3ZhciBlPShmdW5jdGlvbiBuKCl7Zm9yKHZhciB0LGU9V3o7dD1lLnNvdXJjZUV2ZW50OyllPXQ7cmV0dXJuIGV9KSgpO3JldHVybiBlLmNoYW5nZWRUb3VjaGVzJiYoZT1lLmNoYW5nZWRUb3VjaGVzWzBdKSwoZnVuY3Rpb24gaSh0LGUpe3ZhciBuPXQub3duZXJTVkdFbGVtZW50fHx0O2lmKG4uY3JlYXRlU1ZHUG9pbnQpe3ZhciBpPW4uY3JlYXRlU1ZHUG9pbnQoKTtyZXR1cm4gaS54PWUuY2xpZW50WCxpLnk9ZS5jbGllbnRZLFsoaT1pLm1hdHJpeFRyYW5zZm9ybSh0LmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSkpLngsaS55XX12YXIgcj10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybltlLmNsaWVudFgtci5sZWZ0LXQuY2xpZW50TGVmdCxlLmNsaWVudFktci50b3AtdC5jbGllbnRUb3BdfSkodCxlKX1mdW5jdGlvbiBvRCgpe1d6LnByZXZlbnREZWZhdWx0KCksV3ouc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gYUQodCl7dmFyIGU9dC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsbj1pRCh0KS5vbigiZHJhZ3N0YXJ0LmRyYWciLG9ELCEwKTsib25zZWxlY3RzdGFydCJpbiBlP24ub24oInNlbGVjdHN0YXJ0LmRyYWciLG9ELCEwKTooZS5fX25vc2VsZWN0PWUuc3R5bGUuTW96VXNlclNlbGVjdCxlLnN0eWxlLk1velVzZXJTZWxlY3Q9Im5vbmUiKX1mdW5jdGlvbiBzRCh0LGUpe3ZhciBuPXQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGk9aUQodCkub24oImRyYWdzdGFydC5kcmFnIixudWxsKTtlJiYoaS5vbigiY2xpY2suZHJhZyIsb0QsITApLHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7aS5vbigiY2xpY2suZHJhZyIsbnVsbCl9KSwwKSksIm9uc2VsZWN0c3RhcnQiaW4gbj9pLm9uKCJzZWxlY3RzdGFydC5kcmFnIixudWxsKToobi5zdHlsZS5Nb3pVc2VyU2VsZWN0PW4uX19ub3NlbGVjdCxkZWxldGUgbi5fX25vc2VsZWN0KX1mdW5jdGlvbiBsRCh0LGUsbil7dC5wcm90b3R5cGU9ZS5wcm90b3R5cGU9bixuLmNvbnN0cnVjdG9yPXR9ZnVuY3Rpb24gY0QodCxlKXt2YXIgbj1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlKTtmb3IodmFyIGkgaW4gZSluW2ldPWVbaV07cmV0dXJuIG59ZnVuY3Rpb24gdUQoKXt9ZUQucHJvdG90eXBlPW5ELnByb3RvdHlwZT17Y29uc3RydWN0b3I6ZUQsc2VsZWN0OmZ1bmN0aW9uIGhEKHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1leih0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLGk9bmV3IEFycmF5KG4pLHI9MDtyPG47KytyKWZvcih2YXIgbyxhLHM9ZVtyXSxsPXMubGVuZ3RoLGM9aVtyXT1uZXcgQXJyYXkobCksdT0wO3U8bDsrK3UpKG89c1t1XSkmJihhPXQuY2FsbChvLG8uX19kYXRhX18sdSxzKSkmJigiX19kYXRhX18iaW4gbyYmKGEuX19kYXRhX189by5fX2RhdGFfXyksY1t1XT1hKTtyZXR1cm4gbmV3IGVEKGksdGhpcy5fcGFyZW50cyl9LHNlbGVjdEFsbDpmdW5jdGlvbiBkRCh0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9aXoodCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxpPVtdLHI9W10sbz0wO288bjsrK28pZm9yKHZhciBhLHM9ZVtvXSxsPXMubGVuZ3RoLGM9MDtjPGw7KytjKShhPXNbY10pJiYoaS5wdXNoKHQuY2FsbChhLGEuX19kYXRhX18sYyxzKSksci5wdXNoKGEpKTtyZXR1cm4gbmV3IGVEKGkscil9LGZpbHRlcjpmdW5jdGlvbiBwRCh0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9cnoodCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxpPW5ldyBBcnJheShuKSxyPTA7cjxuOysrcilmb3IodmFyIG8sYT1lW3JdLHM9YS5sZW5ndGgsbD1pW3JdPVtdLGM9MDtjPHM7KytjKShvPWFbY10pJiZ0LmNhbGwobyxvLl9fZGF0YV9fLGMsYSkmJmwucHVzaChvKTtyZXR1cm4gbmV3IGVEKGksdGhpcy5fcGFyZW50cyl9LGRhdGE6ZnVuY3Rpb24gZkQodCxlKXtpZighdClyZXR1cm4gZj1uZXcgQXJyYXkodGhpcy5zaXplKCkpLHU9LTEsdGhpcy5lYWNoKChmdW5jdGlvbih0KXtmWysrdV09dH0pKSxmO3ZhciBuPWU/bHo6c3osaT10aGlzLl9wYXJlbnRzLHI9dGhpcy5fZ3JvdXBzOyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD0oZnVuY3Rpb24gbyh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19KSh0KSk7Zm9yKHZhciBhPXIubGVuZ3RoLHM9bmV3IEFycmF5KGEpLGw9bmV3IEFycmF5KGEpLGM9bmV3IEFycmF5KGEpLHU9MDt1PGE7Kyt1KXt2YXIgaD1pW3VdLGQ9clt1XSxwPWQubGVuZ3RoLGY9dC5jYWxsKGgsaCYmaC5fX2RhdGFfXyx1LGkpLG09Zi5sZW5ndGgsZz1sW3VdPW5ldyBBcnJheShtKSxfPXNbdV09bmV3IEFycmF5KG0pO24oaCxkLGcsXyxjW3VdPW5ldyBBcnJheShwKSxmLGUpO2Zvcih2YXIgeSx2LGI9MCx4PTA7YjxtOysrYilpZih5PWdbYl0pe2ZvcihiPj14JiYoeD1iKzEpOyEodj1fW3hdKSYmKyt4PG07KTt5Ll9uZXh0PXZ8fG51bGx9fXJldHVybihzPW5ldyBlRChzLGkpKS5fZW50ZXI9bCxzLl9leGl0PWMsc30sZW50ZXI6ZnVuY3Rpb24gbUQoKXtyZXR1cm4gbmV3IGVEKHRoaXMuX2VudGVyfHx0aGlzLl9ncm91cHMubWFwKG96KSx0aGlzLl9wYXJlbnRzKX0sZXhpdDpmdW5jdGlvbiBnRCgpe3JldHVybiBuZXcgZUQodGhpcy5fZXhpdHx8dGhpcy5fZ3JvdXBzLm1hcChveiksdGhpcy5fcGFyZW50cyl9LGpvaW46ZnVuY3Rpb24gX0QodCxlLG4pe3ZhciBpPXRoaXMuZW50ZXIoKSxyPXRoaXMsbz10aGlzLmV4aXQoKTtyZXR1cm4gaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90KGkpOmkuYXBwZW5kKHQrIiIpLG51bGwhPWUmJihyPWUocikpLG51bGw9PW4/by5yZW1vdmUoKTpuKG8pLGkmJnI/aS5tZXJnZShyKS5vcmRlcigpOnJ9LG1lcmdlOmZ1bmN0aW9uIHlEKHQpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj10Ll9ncm91cHMsaT1lLmxlbmd0aCxyPU1hdGgubWluKGksbi5sZW5ndGgpLG89bmV3IEFycmF5KGkpLGE9MDthPHI7KythKWZvcih2YXIgcyxsPWVbYV0sYz1uW2FdLHU9bC5sZW5ndGgsaD1vW2FdPW5ldyBBcnJheSh1KSxkPTA7ZDx1OysrZCkocz1sW2RdfHxjW2RdKSYmKGhbZF09cyk7Zm9yKDthPGk7KythKW9bYV09ZVthXTtyZXR1cm4gbmV3IGVEKG8sdGhpcy5fcGFyZW50cyl9LG9yZGVyOmZ1bmN0aW9uIHZEKCl7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPS0xLG49dC5sZW5ndGg7KytlPG47KWZvcih2YXIgaSxyPXRbZV0sbz1yLmxlbmd0aC0xLGE9cltvXTstLW8+PTA7KShpPXJbb10pJiYoYSYmNF5pLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGEpJiZhLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGksYSksYT1pKTtyZXR1cm4gdGhpc30sc29ydDpmdW5jdGlvbiBiRCh0KXtmdW5jdGlvbiBlKGUsbil7cmV0dXJuIGUmJm4/dChlLl9fZGF0YV9fLG4uX19kYXRhX18pOiFlLSFufXR8fCh0PWN6KTtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLGk9bi5sZW5ndGgscj1uZXcgQXJyYXkoaSksbz0wO288aTsrK28pe2Zvcih2YXIgYSxzPW5bb10sbD1zLmxlbmd0aCxjPXJbb109bmV3IEFycmF5KGwpLHU9MDt1PGw7Kyt1KShhPXNbdV0pJiYoY1t1XT1hKTtjLnNvcnQoZSl9cmV0dXJuIG5ldyBlRChyLHRoaXMuX3BhcmVudHMpLm9yZGVyKCl9LGNhbGw6ZnVuY3Rpb24geEQoKXt2YXIgdD1hcmd1bWVudHNbMF07cmV0dXJuIGFyZ3VtZW50c1swXT10aGlzLHQuYXBwbHkobnVsbCxhcmd1bWVudHMpLHRoaXN9LG5vZGVzOmZ1bmN0aW9uIHdEKCl7dmFyIHQ9bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSxlPS0xO3JldHVybiB0aGlzLmVhY2goKGZ1bmN0aW9uKCl7dFsrK2VdPXRoaXN9KSksdH0sbm9kZTpmdW5jdGlvbiBTRCgpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT0wLG49dC5sZW5ndGg7ZTxuOysrZSlmb3IodmFyIGk9dFtlXSxyPTAsbz1pLmxlbmd0aDtyPG87KytyKXt2YXIgYT1pW3JdO2lmKGEpcmV0dXJuIGF9cmV0dXJuIG51bGx9LHNpemU6ZnVuY3Rpb24gTUQoKXt2YXIgdD0wO3JldHVybiB0aGlzLmVhY2goKGZ1bmN0aW9uKCl7Kyt0fSkpLHR9LGVtcHR5OmZ1bmN0aW9uIEVEKCl7cmV0dXJuIXRoaXMubm9kZSgpfSxlYWNoOmZ1bmN0aW9uIFREKHQpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj0wLGk9ZS5sZW5ndGg7bjxpOysrbilmb3IodmFyIHIsbz1lW25dLGE9MCxzPW8ubGVuZ3RoO2E8czsrK2EpKHI9b1thXSkmJnQuY2FsbChyLHIuX19kYXRhX18sYSxvKTtyZXR1cm4gdGhpc30sYXR0cjpmdW5jdGlvbiBDRCh0LGUpe3ZhciBuPUtSKHQpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIGk9dGhpcy5ub2RlKCk7cmV0dXJuIG4ubG9jYWw/aS5nZXRBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwpOmkuZ2V0QXR0cmlidXRlKG4pfXJldHVybiB0aGlzLmVhY2goKG51bGw9PWU/bi5sb2NhbD9oejp1ejoiZnVuY3Rpb24iPT10eXBlb2YgZT9uLmxvY2FsP216OmZ6Om4ubG9jYWw/cHo6ZHopKG4sZSkpfSxzdHlsZTpmdW5jdGlvbiBBRCh0LGUsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PWU/X3o6ImZ1bmN0aW9uIj09dHlwZW9mIGU/dno6eXopKHQsZSxudWxsPT1uPyIiOm4pKTpieih0aGlzLm5vZGUoKSx0KX0scHJvcGVydHk6ZnVuY3Rpb24ga0QodCxlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgobnVsbD09ZT94ejoiZnVuY3Rpb24iPT10eXBlb2YgZT9Tejp3eikodCxlKSk6dGhpcy5ub2RlKClbdF19LGNsYXNzZWQ6ZnVuY3Rpb24gTEQodCxlKXt2YXIgbj1Neih0KyIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgaT1Feih0aGlzLm5vZGUoKSkscj0tMSxvPW4ubGVuZ3RoOysrcjxvOylpZighaS5jb250YWlucyhuW3JdKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gdGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgZT9QejplP2t6Okx6KShuLGUpKX0sdGV4dDpmdW5jdGlvbiBQRCh0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2gobnVsbD09dD9OejooImZ1bmN0aW9uIj09dHlwZW9mIHQ/T3o6SXopKHQpKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH0saHRtbDpmdW5jdGlvbiBORCh0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2gobnVsbD09dD9SejooImZ1bmN0aW9uIj09dHlwZW9mIHQ/RHo6enopKHQpKTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9LHJhaXNlOmZ1bmN0aW9uIElEKCl7cmV0dXJuIHRoaXMuZWFjaChCeil9LGxvd2VyOmZ1bmN0aW9uIE9EKCl7cmV0dXJuIHRoaXMuZWFjaChIeil9LGFwcGVuZDpmdW5jdGlvbiBSRCh0KXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlFSKHQpO3JldHVybiB0aGlzLnNlbGVjdCgoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZChlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KSl9LGluc2VydDpmdW5jdGlvbiB6RCh0LGUpe3ZhciBuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6UVIodCksaT1udWxsPT1lP0Z6OiJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6ZXooZSk7cmV0dXJuIHRoaXMuc2VsZWN0KChmdW5jdGlvbigpe3JldHVybiB0aGlzLmluc2VydEJlZm9yZShuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxpLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8bnVsbCl9KSl9LHJlbW92ZTpmdW5jdGlvbiBERCgpe3JldHVybiB0aGlzLmVhY2goVnopfSxjbG9uZTpmdW5jdGlvbiBCRCh0KXtyZXR1cm4gdGhpcy5zZWxlY3QodD9qejpVeil9LGRhdHVtOmZ1bmN0aW9uIEhEKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIix0KTp0aGlzLm5vZGUoKS5fX2RhdGFfX30sb246ZnVuY3Rpb24gRkQodCxlLG4pe3ZhciBpLHIsbz1Yeih0KyIiKSxhPW8ubGVuZ3RoO2lmKCEoYXJndW1lbnRzLmxlbmd0aDwyKSl7Zm9yKHM9ZT9LejokeixudWxsPT1uJiYobj0hMSksaT0wO2k8YTsrK2kpdGhpcy5lYWNoKHMob1tpXSxlLG4pKTtyZXR1cm4gdGhpc312YXIgcz10aGlzLm5vZGUoKS5fX29uO2lmKHMpZm9yKHZhciBsLGM9MCx1PXMubGVuZ3RoO2M8dTsrK2MpZm9yKGk9MCxsPXNbY107aTxhOysraSlpZigocj1vW2ldKS50eXBlPT09bC50eXBlJiZyLm5hbWU9PT1sLm5hbWUpcmV0dXJuIGwudmFsdWV9LGRpc3BhdGNoOmZ1bmN0aW9uIFZEKHQsZSl7cmV0dXJuIHRoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIGU/UXo6SnopKHQsZSkpfX07dmFyIFVEPS43LGpEPTEvVUQsR0Q9IlxccyooWystXT9cXGQrKVxccyoiLFdEPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLHFEPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIixZRD0vXiMoWzAtOWEtZl17Myw4fSkkLyxYRD1uZXcgUmVnRXhwKCJecmdiXFwoIitbR0QsR0QsR0RdKyJcXCkkIiksJEQ9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW3FELHFELHFEXSsiXFwpJCIpLEtEPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbR0QsR0QsR0QsV0RdKyJcXCkkIiksWkQ9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1txRCxxRCxxRCxXRF0rIlxcKSQiKSxKRD1uZXcgUmVnRXhwKCJeaHNsXFwoIitbV0QscUQscURdKyJcXCkkIiksUUQ9bmV3IFJlZ0V4cCgiXmhzbGFcXCgiK1tXRCxxRCxxRCxXRF0rIlxcKSQiKSx0Qj17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtmdW5jdGlvbiBlQigpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleCgpfWZ1bmN0aW9uIG5CKCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCl9ZnVuY3Rpb24gaUIodCl7dmFyIGUsbjtyZXR1cm4gdD0odCsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKGU9WUQuZXhlYyh0KSk/KG49ZVsxXS5sZW5ndGgsZT1wYXJzZUludChlWzFdLDE2KSw2PT09bj9yQihlKTozPT09bj9uZXcgbEIoZT4+OCYxNXxlPj40JjI0MCxlPj40JjE1fDI0MCZlLCgxNSZlKTw8NHwxNSZlLDEpOjg9PT1uP29CKGU+PjI0JjI1NSxlPj4xNiYyNTUsZT4+OCYyNTUsKDI1NSZlKS8yNTUpOjQ9PT1uP29CKGU+PjEyJjE1fGU+PjgmMjQwLGU+PjgmMTV8ZT4+NCYyNDAsZT4+NCYxNXwyNDAmZSwoKDE1JmUpPDw0fDE1JmUpLzI1NSk6bnVsbCk6KGU9WEQuZXhlYyh0KSk/bmV3IGxCKGVbMV0sZVsyXSxlWzNdLDEpOihlPSRELmV4ZWModCkpP25ldyBsQigyNTUqZVsxXS8xMDAsMjU1KmVbMl0vMTAwLDI1NSplWzNdLzEwMCwxKTooZT1LRC5leGVjKHQpKT9vQihlWzFdLGVbMl0sZVszXSxlWzRdKTooZT1aRC5leGVjKHQpKT9vQigyNTUqZVsxXS8xMDAsMjU1KmVbMl0vMTAwLDI1NSplWzNdLzEwMCxlWzRdKTooZT1KRC5leGVjKHQpKT9kQihlWzFdLGVbMl0vMTAwLGVbM10vMTAwLDEpOihlPVFELmV4ZWModCkpP2RCKGVbMV0sZVsyXS8xMDAsZVszXS8xMDAsZVs0XSk6dEIuaGFzT3duUHJvcGVydHkodCk/ckIodEJbdF0pOiJ0cmFuc3BhcmVudCI9PT10P25ldyBsQihOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIHJCKHQpe3JldHVybiBuZXcgbEIodD4+MTYmMjU1LHQ+PjgmMjU1LDI1NSZ0LDEpfWZ1bmN0aW9uIG9CKHQsZSxuLGkpe3JldHVybiBpPD0wJiYodD1lPW49TmFOKSxuZXcgbEIodCxlLG4saSl9ZnVuY3Rpb24gYUIodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB1RHx8KHQ9aUIodCkpLHQ/bmV3IGxCKCh0PXQucmdiKCkpLnIsdC5nLHQuYix0Lm9wYWNpdHkpOm5ldyBsQn1mdW5jdGlvbiBzQih0LGUsbixpKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/YUIodCk6bmV3IGxCKHQsZSxuLG51bGw9PWk/MTppKX1mdW5jdGlvbiBsQih0LGUsbixpKXt0aGlzLnI9K3QsdGhpcy5nPStlLHRoaXMuYj0rbix0aGlzLm9wYWNpdHk9K2l9ZnVuY3Rpb24gY0IoKXtyZXR1cm4iIyIraEIodGhpcy5yKStoQih0aGlzLmcpK2hCKHRoaXMuYil9ZnVuY3Rpb24gdUIoKXt2YXIgdD10aGlzLm9wYWNpdHk7cmV0dXJuKDE9PT0odD1pc05hTih0KT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSkpPyJyZ2IoIjoicmdiYSgiKStNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMucil8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKDE9PT10PyIpIjoiLCAiK3QrIikiKX1mdW5jdGlvbiBoQih0KXtyZXR1cm4oKHQ9TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0KXx8MCkpKTwxNj8iMCI6IiIpK3QudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIGRCKHQsZSxuLGkpe3JldHVybiBpPD0wP3Q9ZT1uPU5hTjpuPD0wfHxuPj0xP3Q9ZT1OYU46ZTw9MCYmKHQ9TmFOKSxuZXcgZkIodCxlLG4saSl9ZnVuY3Rpb24gcEIodCl7aWYodCBpbnN0YW5jZW9mIGZCKXJldHVybiBuZXcgZkIodC5oLHQucyx0LmwsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgdUR8fCh0PWlCKHQpKSwhdClyZXR1cm4gbmV3IGZCO2lmKHQgaW5zdGFuY2VvZiBmQilyZXR1cm4gdDt2YXIgZT0odD10LnJnYigpKS5yLzI1NSxuPXQuZy8yNTUsaT10LmIvMjU1LHI9TWF0aC5taW4oZSxuLGkpLG89TWF0aC5tYXgoZSxuLGkpLGE9TmFOLHM9by1yLGw9KG8rcikvMjtyZXR1cm4gcz8oYT1lPT09bz8obi1pKS9zKzYqKG48aSk6bj09PW8/KGktZSkvcysyOihlLW4pL3MrNCxzLz1sPC41P28rcjoyLW8tcixhKj02MCk6cz1sPjAmJmw8MT8wOmEsbmV3IGZCKGEscyxsLHQub3BhY2l0eSl9ZnVuY3Rpb24gZkIodCxlLG4saSl7dGhpcy5oPSt0LHRoaXMucz0rZSx0aGlzLmw9K24sdGhpcy5vcGFjaXR5PStpfWZ1bmN0aW9uIG1CKHQsZSxuKXtyZXR1cm4gMjU1Kih0PDYwP2UrKG4tZSkqdC82MDp0PDE4MD9uOnQ8MjQwP2UrKG4tZSkqKDI0MC10KS82MDplKX1mdW5jdGlvbiBnQih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gX0IodCxlKXt2YXIgbj1lLXQ7cmV0dXJuIG4/KGZ1bmN0aW9uIGkodCxlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHQrbiplfX0pKHQsbik6Z0IoaXNOYU4odCk/ZTp0KX1sRCh1RCxpQix7Y29weTpmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgdGhpcy5jb25zdHJ1Y3Rvcix0aGlzLHQpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LGhleDplQixmb3JtYXRIZXg6ZUIsZm9ybWF0SHNsOmZ1bmN0aW9uIHlCKCl7cmV0dXJuIHBCKHRoaXMpLmZvcm1hdEhzbCgpfSxmb3JtYXRSZ2I6bkIsdG9TdHJpbmc6bkJ9KSxsRChsQixzQixjRCh1RCx7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD9qRDpNYXRoLnBvdyhqRCx0KSxuZXcgbEIodGhpcy5yKnQsdGhpcy5nKnQsdGhpcy5iKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/VUQ6TWF0aC5wb3coVUQsdCksbmV3IGxCKHRoaXMucip0LHRoaXMuZyp0LHRoaXMuYip0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybi0uNTw9dGhpcy5yJiZ0aGlzLnI8MjU1LjUmJi0uNTw9dGhpcy5nJiZ0aGlzLmc8MjU1LjUmJi0uNTw9dGhpcy5iJiZ0aGlzLmI8MjU1LjUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6Y0IsZm9ybWF0SGV4OmNCLGZvcm1hdFJnYjp1Qix0b1N0cmluZzp1Qn0pKSxsRChmQiwoZnVuY3Rpb24gdkIodCxlLG4saSl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3BCKHQpOm5ldyBmQih0LGUsbixudWxsPT1pPzE6aSl9KSxjRCh1RCx7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD9qRDpNYXRoLnBvdyhqRCx0KSxuZXcgZkIodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD9VRDpNYXRoLnBvdyhVRCx0KSxuZXcgZkIodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmglMzYwKzM2MCoodGhpcy5oPDApLGU9aXNOYU4odCl8fGlzTmFOKHRoaXMucyk/MDp0aGlzLnMsbj10aGlzLmwsaT1uKyhuPC41P246MS1uKSplLHI9MipuLWk7cmV0dXJuIG5ldyBsQihtQih0Pj0yNDA/dC0yNDA6dCsxMjAscixpKSxtQih0LHIsaSksbUIodDwxMjA/dCsyNDA6dC0xMjAscixpKSx0aGlzLm9wYWNpdHkpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybigwPD10aGlzLnMmJnRoaXMuczw9MXx8aXNOYU4odGhpcy5zKSkmJjA8PXRoaXMubCYmdGhpcy5sPD0xJiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0sZm9ybWF0SHNsOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcGFjaXR5O3JldHVybigxPT09KHQ9aXNOYU4odCk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsdCkpKT8iaHNsKCI6ImhzbGEoIikrKHRoaXMuaHx8MCkrIiwgIisxMDAqKHRoaXMuc3x8MCkrIiUsICIrMTAwKih0aGlzLmx8fDApKyIlIisoMT09PXQ/IikiOiIsICIrdCsiKSIpfX0pKTt2YXIgYkI9KGZ1bmN0aW9uIHQoZSl7dmFyIG49KGZ1bmN0aW9uIGkodCl7cmV0dXJuIDE9PSh0PSt0KT9fQjpmdW5jdGlvbihlLG4pe3JldHVybiBuLWU/KGZ1bmN0aW9uIGkodCxlLG4pe3JldHVybiB0PU1hdGgucG93KHQsbiksZT1NYXRoLnBvdyhlLG4pLXQsbj0xL24sZnVuY3Rpb24oaSl7cmV0dXJuIE1hdGgucG93KHQraSplLG4pfX0pKGUsbix0KTpnQihpc05hTihlKT9uOmUpfX0pKGUpO2Z1bmN0aW9uIHIodCxlKXt2YXIgaT1uKCh0PXNCKHQpKS5yLChlPXNCKGUpKS5yKSxyPW4odC5nLGUuZyksbz1uKHQuYixlLmIpLGE9X0IodC5vcGFjaXR5LGUub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0LnI9aShlKSx0Lmc9cihlKSx0LmI9byhlKSx0Lm9wYWNpdHk9YShlKSx0KyIifX1yZXR1cm4gci5nYW1tYT10LHJ9KSgxKTtmdW5jdGlvbiB4Qih0LGUpe2V8fChlPVtdKTt2YXIgbixpPXQ/TWF0aC5taW4oZS5sZW5ndGgsdC5sZW5ndGgpOjAscj1lLnNsaWNlKCk7cmV0dXJuIGZ1bmN0aW9uKG8pe2ZvcihuPTA7bjxpOysrbilyW25dPXRbbl0qKDEtbykrZVtuXSpvO3JldHVybiByfX1mdW5jdGlvbiB3Qih0LGUpe3ZhciBuLGk9ZT9lLmxlbmd0aDowLHI9dD9NYXRoLm1pbihpLHQubGVuZ3RoKTowLG89bmV3IEFycmF5KHIpLGE9bmV3IEFycmF5KGkpO2ZvcihuPTA7bjxyOysrbilvW25dPWtCKHRbbl0sZVtuXSk7Zm9yKDtuPGk7KytuKWFbbl09ZVtuXTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKG49MDtuPHI7KytuKWFbbl09b1tuXSh0KTtyZXR1cm4gYX19ZnVuY3Rpb24gU0IodCxlKXt2YXIgbj1uZXcgRGF0ZTtyZXR1cm4gdD0rdCxlPStlLGZ1bmN0aW9uKGkpe3JldHVybiBuLnNldFRpbWUodCooMS1pKStlKmkpLG59fWZ1bmN0aW9uIE1CKHQsZSl7cmV0dXJuIHQ9K3QsZT0rZSxmdW5jdGlvbihuKXtyZXR1cm4gdCooMS1uKStlKm59fWZ1bmN0aW9uIEVCKHQsZSl7dmFyIG4saT17fSxyPXt9O2ZvcihuIGluIG51bGwhPT10JiYib2JqZWN0Ij09dHlwZW9mIHR8fCh0PXt9KSxudWxsIT09ZSYmIm9iamVjdCI9PXR5cGVvZiBlfHwoZT17fSksZSluIGluIHQ/aVtuXT1rQih0W25dLGVbbl0pOnJbbl09ZVtuXTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKG4gaW4gaSlyW25dPWlbbl0odCk7cmV0dXJuIHJ9fXZhciBUQj0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2csQ0I9bmV3IFJlZ0V4cChUQi5zb3VyY2UsImciKTtmdW5jdGlvbiBBQih0LGUpe3ZhciBuLGkscixvPVRCLmxhc3RJbmRleD1DQi5sYXN0SW5kZXg9MCxhPS0xLHM9W10sbD1bXTtmb3IodCs9IiIsZSs9IiI7KG49VEIuZXhlYyh0KSkmJihpPUNCLmV4ZWMoZSkpOykocj1pLmluZGV4KT5vJiYocj1lLnNsaWNlKG8sciksc1thXT9zW2FdKz1yOnNbKythXT1yKSwobj1uWzBdKT09PShpPWlbMF0pP3NbYV0/c1thXSs9aTpzWysrYV09aTooc1srK2FdPW51bGwsbC5wdXNoKHtpOmEseDpNQihuLGkpfSkpLG89Q0IubGFzdEluZGV4O3JldHVybiBvPGUubGVuZ3RoJiYocj1lLnNsaWNlKG8pLHNbYV0/c1thXSs9cjpzWysrYV09cikscy5sZW5ndGg8Mj9sWzBdPyhmdW5jdGlvbiBjKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdChlKSsiIn19KShsWzBdLngpOihmdW5jdGlvbiB1KHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0pKGUpOihlPWwubGVuZ3RoLGZ1bmN0aW9uKHQpe2Zvcih2YXIgbixpPTA7aTxlOysraSlzWyhuPWxbaV0pLmldPW4ueCh0KTtyZXR1cm4gcy5qb2luKCIiKX0pfWZ1bmN0aW9uIGtCKHQsZSl7dmFyIG4saT10eXBlb2YgZTtyZXR1cm4gbnVsbD09ZXx8ImJvb2xlYW4iPT09aT9nQihlKTooIm51bWJlciI9PT1pP01COiJzdHJpbmciPT09aT8obj1pQihlKSk/KGU9bixiQik6QUI6ZSBpbnN0YW5jZW9mIGlCP2JCOmUgaW5zdGFuY2VvZiBEYXRlP1NCOihmdW5jdGlvbiByKHQpe3JldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcodCkmJiEodCBpbnN0YW5jZW9mIERhdGFWaWV3KX0pKGUpP3hCOkFycmF5LmlzQXJyYXkoZSk/d0I6ImZ1bmN0aW9uIiE9dHlwZW9mIGUudmFsdWVPZiYmImZ1bmN0aW9uIiE9dHlwZW9mIGUudG9TdHJpbmd8fGlzTmFOKGUpP0VCOk1CKSh0LGUpfXZhciBMQixQQixOQixJQixPQj0xODAvTWF0aC5QSSxSQj17dHJhbnNsYXRlWDowLHRyYW5zbGF0ZVk6MCxyb3RhdGU6MCxza2V3WDowLHNjYWxlWDoxLHNjYWxlWToxfTtmdW5jdGlvbiB6Qih0LGUsbixpLHIsbyl7dmFyIGEscyxsO3JldHVybihhPU1hdGguc3FydCh0KnQrZSplKSkmJih0Lz1hLGUvPWEpLChsPXQqbitlKmkpJiYobi09dCpsLGktPWUqbCksKHM9TWF0aC5zcXJ0KG4qbitpKmkpKSYmKG4vPXMsaS89cyxsLz1zKSx0Kmk8ZSpuJiYodD0tdCxlPS1lLGw9LWwsYT0tYSkse3RyYW5zbGF0ZVg6cix0cmFuc2xhdGVZOm8scm90YXRlOk1hdGguYXRhbjIoZSx0KSpPQixza2V3WDpNYXRoLmF0YW4obCkqT0Isc2NhbGVYOmEsc2NhbGVZOnN9fWZ1bmN0aW9uIERCKHQsZSxuLGkpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIHQubGVuZ3RoP3QucG9wKCkrIiAiOiIifXJldHVybiBmdW5jdGlvbihvLGEpe3ZhciBzPVtdLGw9W107cmV0dXJuIG89dChvKSxhPXQoYSksKGZ1bmN0aW9uIGModCxpLHIsbyxhLHMpe2lmKHQhPT1yfHxpIT09byl7dmFyIGw9YS5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLGUsbnVsbCxuKTtzLnB1c2goe2k6bC00LHg6TUIodCxyKX0se2k6bC0yLHg6TUIoaSxvKX0pfWVsc2Uocnx8bykmJmEucHVzaCgidHJhbnNsYXRlKCIrcitlK28rbil9KShvLnRyYW5zbGF0ZVgsby50cmFuc2xhdGVZLGEudHJhbnNsYXRlWCxhLnRyYW5zbGF0ZVkscyxsKSwoZnVuY3Rpb24gdSh0LGUsbixvKXt0IT09ZT8odC1lPjE4MD9lKz0zNjA6ZS10PjE4MCYmKHQrPTM2MCksby5wdXNoKHtpOm4ucHVzaChyKG4pKyJyb3RhdGUoIixudWxsLGkpLTIseDpNQih0LGUpfSkpOmUmJm4ucHVzaChyKG4pKyJyb3RhdGUoIitlK2kpfSkoby5yb3RhdGUsYS5yb3RhdGUscyxsKSwoZnVuY3Rpb24gaCh0LGUsbixvKXt0IT09ZT9vLnB1c2goe2k6bi5wdXNoKHIobikrInNrZXdYKCIsbnVsbCxpKS0yLHg6TUIodCxlKX0pOmUmJm4ucHVzaChyKG4pKyJza2V3WCgiK2UraSl9KShvLnNrZXdYLGEuc2tld1gscyxsKSwoZnVuY3Rpb24gZCh0LGUsbixpLG8sYSl7aWYodCE9PW58fGUhPT1pKXt2YXIgcz1vLnB1c2gocihvKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7YS5wdXNoKHtpOnMtNCx4Ok1CKHQsbil9LHtpOnMtMix4Ok1CKGUsaSl9KX1lbHNlIDE9PT1uJiYxPT09aXx8by5wdXNoKHIobykrInNjYWxlKCIrbisiLCIraSsiKSIpfSkoby5zY2FsZVgsby5zY2FsZVksYS5zY2FsZVgsYS5zY2FsZVkscyxsKSxvPWE9bnVsbCxmdW5jdGlvbih0KXtmb3IodmFyIGUsbj0tMSxpPWwubGVuZ3RoOysrbjxpOylzWyhlPWxbbl0pLmldPWUueCh0KTtyZXR1cm4gcy5qb2luKCIiKX19fXZhciBCQixIQixGQj1EQigoZnVuY3Rpb24gVkIodCl7cmV0dXJuIm5vbmUiPT09dD9SQjooTEJ8fChMQj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSxQQj1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsTkI9ZG9jdW1lbnQuZGVmYXVsdFZpZXcpLExCLnN0eWxlLnRyYW5zZm9ybT10LHQ9TkIuZ2V0Q29tcHV0ZWRTdHlsZShQQi5hcHBlbmRDaGlsZChMQiksbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgidHJhbnNmb3JtIiksUEIucmVtb3ZlQ2hpbGQoTEIpLHpCKCsodD10LnNsaWNlKDcsLTEpLnNwbGl0KCIsIikpWzBdLCt0WzFdLCt0WzJdLCt0WzNdLCt0WzRdLCt0WzVdKSl9KSwicHgsICIsInB4KSIsImRlZykiKSxVQj1EQigoZnVuY3Rpb24gakIodCl7cmV0dXJuIG51bGw9PXQ/UkI6KElCfHwoSUI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKSksSUIuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLHQpLCh0PUlCLnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkpP3pCKCh0PXQubWF0cml4KS5hLHQuYix0LmMsdC5kLHQuZSx0LmYpOlJCKX0pLCIsICIsIikiLCIpIiksR0I9MCxXQj0wLHFCPTAsWUI9MCxYQj0wLCRCPTAsS0I9Im9iamVjdCI9PXR5cGVvZiBwZXJmb3JtYW5jZSYmcGVyZm9ybWFuY2Uubm93P3BlcmZvcm1hbmNlOkRhdGUsWkI9Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6ZnVuY3Rpb24odCl7c2V0VGltZW91dCh0LDE3KX07ZnVuY3Rpb24gSkIoKXtyZXR1cm4gWEJ8fChaQihRQiksWEI9S0Iubm93KCkrJEIpfWZ1bmN0aW9uIFFCKCl7WEI9MH1mdW5jdGlvbiB0SCgpe3RoaXMuX2NhbGw9dGhpcy5fdGltZT10aGlzLl9uZXh0PW51bGx9ZnVuY3Rpb24gZUgodCxlLG4pe3ZhciBpPW5ldyB0SDtyZXR1cm4gaS5yZXN0YXJ0KHQsZSxuKSxpfWZ1bmN0aW9uIG5IKCl7WEI9KFlCPUtCLm5vdygpKSskQixHQj1XQj0wO3RyeXshKGZ1bmN0aW9uIHQoKXtKQigpLCsrR0I7Zm9yKHZhciB0LGU9QkI7ZTspKHQ9WEItZS5fdGltZSk+PTAmJmUuX2NhbGwuY2FsbChudWxsLHQpLGU9ZS5fbmV4dDstLUdCfSkoKX1maW5hbGx5e0dCPTAsKGZ1bmN0aW9uIGUoKXtmb3IodmFyIHQsZSxuPUJCLGk9MS8wO247KW4uX2NhbGw/KGk+bi5fdGltZSYmKGk9bi5fdGltZSksdD1uLG49bi5fbmV4dCk6KGU9bi5fbmV4dCxuLl9uZXh0PW51bGwsbj10P3QuX25leHQ9ZTpCQj1lKTtIQj10LHJIKGkpfSkoKSxYQj0wfX1mdW5jdGlvbiBpSCgpe3ZhciB0PUtCLm5vdygpLGU9dC1ZQjtlPjFlMyYmKCRCLT1lLFlCPXQpfWZ1bmN0aW9uIHJIKHQpe0dCfHwoV0ImJihXQj1jbGVhclRpbWVvdXQoV0IpKSx0LVhCPjI0Pyh0PDEvMCYmKFdCPXNldFRpbWVvdXQobkgsdC1LQi5ub3coKS0kQikpLHFCJiYocUI9Y2xlYXJJbnRlcnZhbChxQikpKToocUJ8fChZQj1LQi5ub3coKSxxQj1zZXRJbnRlcnZhbChpSCwxZTMpKSxHQj0xLFpCKG5IKSkpfWZ1bmN0aW9uIG9IKHQsZSxuKXt2YXIgaT1uZXcgdEg7cmV0dXJuIGkucmVzdGFydCgoZnVuY3Rpb24obil7aS5zdG9wKCksdChuK2UpfSksZT1udWxsPT1lPzA6K2UsbiksaX10SC5wcm90b3R5cGU9ZUgucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp0SCxyZXN0YXJ0OmZ1bmN0aW9uKHQsZSxuKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiIpO249KG51bGw9PW4/SkIoKTorbikrKG51bGw9PWU/MDorZSksdGhpcy5fbmV4dHx8SEI9PT10aGlzfHwoSEI/SEIuX25leHQ9dGhpczpCQj10aGlzLEhCPXRoaXMpLHRoaXMuX2NhbGw9dCx0aGlzLl90aW1lPW4sckgoKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuX2NhbGwmJih0aGlzLl9jYWxsPW51bGwsdGhpcy5fdGltZT0xLzAsckgoKSl9fTt2YXIgYUg9alIoInN0YXJ0IiwiZW5kIiwiY2FuY2VsIiwiaW50ZXJydXB0Iiksc0g9W107ZnVuY3Rpb24gbEgodCxlLG4saSxyLG8pe3ZhciBhPXQuX190cmFuc2l0aW9uO2lmKGEpe2lmKG4gaW4gYSlyZXR1cm59ZWxzZSB0Ll9fdHJhbnNpdGlvbj17fTshKGZ1bmN0aW9uIHModCxlLG4pe3ZhciBpLHI9dC5fX3RyYW5zaXRpb247ZnVuY3Rpb24gbyhsKXt2YXIgYyx1LGgsZDtpZigxIT09bi5zdGF0ZSlyZXR1cm4gcygpO2ZvcihjIGluIHIpaWYoKGQ9cltjXSkubmFtZT09PW4ubmFtZSl7aWYoMz09PWQuc3RhdGUpcmV0dXJuIG9IKG8pOzQ9PT1kLnN0YXRlPyhkLnN0YXRlPTYsZC50aW1lci5zdG9wKCksZC5vbi5jYWxsKCJpbnRlcnJ1cHQiLHQsdC5fX2RhdGFfXyxkLmluZGV4LGQuZ3JvdXApLGRlbGV0ZSByW2NdKTorYzxlJiYoZC5zdGF0ZT02LGQudGltZXIuc3RvcCgpLGQub24uY2FsbCgiY2FuY2VsIix0LHQuX19kYXRhX18sZC5pbmRleCxkLmdyb3VwKSxkZWxldGUgcltjXSl9aWYob0goKGZ1bmN0aW9uKCl7Mz09PW4uc3RhdGUmJihuLnN0YXRlPTQsbi50aW1lci5yZXN0YXJ0KGEsbi5kZWxheSxuLnRpbWUpLGEobCkpfSkpLG4uc3RhdGU9MixuLm9uLmNhbGwoInN0YXJ0Iix0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSwyPT09bi5zdGF0ZSl7Zm9yKG4uc3RhdGU9MyxpPW5ldyBBcnJheShoPW4udHdlZW4ubGVuZ3RoKSxjPTAsdT0tMTtjPGg7KytjKShkPW4udHdlZW5bY10udmFsdWUuY2FsbCh0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSkmJihpWysrdV09ZCk7aS5sZW5ndGg9dSsxfX1mdW5jdGlvbiBhKGUpe2Zvcih2YXIgcj1lPG4uZHVyYXRpb24/bi5lYXNlLmNhbGwobnVsbCxlL24uZHVyYXRpb24pOihuLnRpbWVyLnJlc3RhcnQocyksbi5zdGF0ZT01LDEpLG89LTEsYT1pLmxlbmd0aDsrK288YTspaVtvXS5jYWxsKHQscik7NT09PW4uc3RhdGUmJihuLm9uLmNhbGwoImVuZCIsdCx0Ll9fZGF0YV9fLG4uaW5kZXgsbi5ncm91cCkscygpKX1mdW5jdGlvbiBzKCl7Zm9yKHZhciBpIGluIG4uc3RhdGU9NixuLnRpbWVyLnN0b3AoKSxkZWxldGUgcltlXSxyKXJldHVybjtkZWxldGUgdC5fX3RyYW5zaXRpb259cltlXT1uLG4udGltZXI9ZUgoKGZ1bmN0aW9uIGwodCl7bi5zdGF0ZT0xLG4udGltZXIucmVzdGFydChvLG4uZGVsYXksbi50aW1lKSxuLmRlbGF5PD10JiZvKHQtbi5kZWxheSl9KSwwLG4udGltZSl9KSh0LG4se25hbWU6ZSxpbmRleDppLGdyb3VwOnIsb246YUgsdHdlZW46c0gsdGltZTpvLnRpbWUsZGVsYXk6by5kZWxheSxkdXJhdGlvbjpvLmR1cmF0aW9uLGVhc2U6by5lYXNlLHRpbWVyOm51bGwsc3RhdGU6MH0pfWZ1bmN0aW9uIGNIKHQsZSl7dmFyIG49aEgodCxlKTtpZihuLnN0YXRlPjApdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBzY2hlZHVsZWQiKTtyZXR1cm4gbn1mdW5jdGlvbiB1SCh0LGUpe3ZhciBuPWhIKHQsZSk7aWYobi5zdGF0ZT4zKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgcnVubmluZyIpO3JldHVybiBufWZ1bmN0aW9uIGhIKHQsZSl7dmFyIG49dC5fX3RyYW5zaXRpb247aWYoIW58fCEobj1uW2VdKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJuIG59ZnVuY3Rpb24gZEgodCxlKXt2YXIgbixpLHIsbz10Ll9fdHJhbnNpdGlvbixhPSEwO2lmKG8pe2ZvcihyIGluIGU9bnVsbD09ZT9udWxsOmUrIiIsbykobj1vW3JdKS5uYW1lPT09ZT8oaT1uLnN0YXRlPjImJm4uc3RhdGU8NSxuLnN0YXRlPTYsbi50aW1lci5zdG9wKCksbi5vbi5jYWxsKGk/ImludGVycnVwdCI6ImNhbmNlbCIsdCx0Ll9fZGF0YV9fLG4uaW5kZXgsbi5ncm91cCksZGVsZXRlIG9bcl0pOmE9ITE7YSYmZGVsZXRlIHQuX190cmFuc2l0aW9ufX1mdW5jdGlvbiBwSCh0LGUpe3ZhciBuLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dUgodGhpcyx0KSxvPXIudHdlZW47aWYobyE9PW4pZm9yKHZhciBhPTAscz0oaT1uPW8pLmxlbmd0aDthPHM7KythKWlmKGlbYV0ubmFtZT09PWUpeyhpPWkuc2xpY2UoKSkuc3BsaWNlKGEsMSk7YnJlYWt9ci50d2Vlbj1pfX1mdW5jdGlvbiBmSCh0LGUsbil7dmFyIGkscjtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89dUgodGhpcyx0KSxhPW8udHdlZW47aWYoYSE9PWkpe3I9KGk9YSkuc2xpY2UoKTtmb3IodmFyIHM9e25hbWU6ZSx2YWx1ZTpufSxsPTAsYz1yLmxlbmd0aDtsPGM7KytsKWlmKHJbbF0ubmFtZT09PWUpe3JbbF09czticmVha31sPT09YyYmci5wdXNoKHMpfW8udHdlZW49cn19ZnVuY3Rpb24gbUgodCxlLG4pe3ZhciBpPXQuX2lkO3JldHVybiB0LmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9dUgodGhpcyxpKTsodC52YWx1ZXx8KHQudmFsdWU9e30pKVtlXT1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pKSxmdW5jdGlvbih0KXtyZXR1cm4gaEgodCxpKS52YWx1ZVtlXX19ZnVuY3Rpb24gZ0godCxlKXt2YXIgbjtyZXR1cm4oIm51bWJlciI9PXR5cGVvZiBlP01COmUgaW5zdGFuY2VvZiBpQj9iQjoobj1pQihlKSk/KGU9bixiQik6QUIpKHQsZSl9ZnVuY3Rpb24gX0godCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9fWZ1bmN0aW9uIHlIKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKX19ZnVuY3Rpb24gdkgodCxlLG4pe3ZhciBpLHIsbz1uKyIiO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0QXR0cmlidXRlKHQpO3JldHVybiBhPT09bz9udWxsOmE9PT1pP3I6cj1lKGk9YSxuKX19ZnVuY3Rpb24gYkgodCxlLG4pe3ZhciBpLHIsbz1uKyIiO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKTtyZXR1cm4gYT09PW8/bnVsbDphPT09aT9yOnI9ZShpPWEsbil9fWZ1bmN0aW9uIHhIKHQsZSxuKXt2YXIgaSxyLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGEscyxsPW4odGhpcyk7aWYobnVsbCE9bClyZXR1cm4oYT10aGlzLmdldEF0dHJpYnV0ZSh0KSk9PT0ocz1sKyIiKT9udWxsOmE9PT1pJiZzPT09cj9vOihyPXMsbz1lKGk9YSxsKSk7dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9fWZ1bmN0aW9uIHdIKHQsZSxuKXt2YXIgaSxyLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGEscyxsPW4odGhpcyk7aWYobnVsbCE9bClyZXR1cm4oYT10aGlzLmdldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCkpPT09KHM9bCsiIik/bnVsbDphPT09aSYmcz09PXI/bzoocj1zLG89ZShpPWEsbCkpO3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKX19ZnVuY3Rpb24gU0godCxlKXtyZXR1cm4gZnVuY3Rpb24obil7dGhpcy5zZXRBdHRyaWJ1dGUodCxlLmNhbGwodGhpcyxuKSl9fWZ1bmN0aW9uIE1IKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3RoaXMuc2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsLGUuY2FsbCh0aGlzLG4pKX19ZnVuY3Rpb24gRUgodCxlKXt2YXIgbixpO2Z1bmN0aW9uIHIoKXt2YXIgcj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gciE9PWkmJihuPShpPXIpJiZNSCh0LHIpKSxufXJldHVybiByLl92YWx1ZT1lLHJ9ZnVuY3Rpb24gVEgodCxlKXt2YXIgbixpO2Z1bmN0aW9uIHIoKXt2YXIgcj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gciE9PWkmJihuPShpPXIpJiZTSCh0LHIpKSxufXJldHVybiByLl92YWx1ZT1lLHJ9ZnVuY3Rpb24gQ0godCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtjSCh0aGlzLHQpLmRlbGF5PStlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gQUgodCxlKXtyZXR1cm4gZT0rZSxmdW5jdGlvbigpe2NIKHRoaXMsdCkuZGVsYXk9ZX19ZnVuY3Rpb24ga0godCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt1SCh0aGlzLHQpLmR1cmF0aW9uPStlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gTEgodCxlKXtyZXR1cm4gZT0rZSxmdW5jdGlvbigpe3VIKHRoaXMsdCkuZHVyYXRpb249ZX19ZnVuY3Rpb24gUEgodCxlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7dUgodGhpcyx0KS5lYXNlPWV9fWZ1bmN0aW9uIE5IKHQsZSxuKXt2YXIgaSxyLG89KGZ1bmN0aW9uIGEodCl7cmV0dXJuKHQrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeSgoZnVuY3Rpb24odCl7dmFyIGU9dC5pbmRleE9mKCIuIik7cmV0dXJuIGU+PTAmJih0PXQuc2xpY2UoMCxlKSksIXR8fCJzdGFydCI9PT10fSkpfSkoZSk/Y0g6dUg7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9byh0aGlzLHQpLHM9YS5vbjtzIT09aSYmKHI9KGk9cykuY29weSgpKS5vbihlLG4pLGEub249cn19dmFyIElIPW5ELnByb3RvdHlwZS5jb25zdHJ1Y3RvcjtmdW5jdGlvbiBPSCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpfX1mdW5jdGlvbiBSSCh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKGkpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxlLmNhbGwodGhpcyxpKSxuKX19ZnVuY3Rpb24gekgodCxlLG4pe3ZhciBpLHI7ZnVuY3Rpb24gbygpe3ZhciBvPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBvIT09ciYmKGk9KHI9bykmJlJIKHQsbyxuKSksaX1yZXR1cm4gby5fdmFsdWU9ZSxvfWZ1bmN0aW9uIERIKHQpe3JldHVybiBmdW5jdGlvbihlKXt0aGlzLnRleHRDb250ZW50PXQuY2FsbCh0aGlzLGUpfX1mdW5jdGlvbiBCSCh0KXt2YXIgZSxuO2Z1bmN0aW9uIGkoKXt2YXIgaT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gaSE9PW4mJihlPShuPWkpJiZESChpKSksZX1yZXR1cm4gaS5fdmFsdWU9dCxpfXZhciBISD0wO2Z1bmN0aW9uIEZIKHQsZSxuLGkpe3RoaXMuX2dyb3Vwcz10LHRoaXMuX3BhcmVudHM9ZSx0aGlzLl9uYW1lPW4sdGhpcy5faWQ9aX1mdW5jdGlvbiBWSCgpe3JldHVybisrSEh9dmFyIFVIPW5ELnByb3RvdHlwZTtGSC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkZILHNlbGVjdDpmdW5jdGlvbiBqSCh0KXt2YXIgZT10aGlzLl9uYW1lLG49dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PWV6KHQpKTtmb3IodmFyIGk9dGhpcy5fZ3JvdXBzLHI9aS5sZW5ndGgsbz1uZXcgQXJyYXkociksYT0wO2E8cjsrK2EpZm9yKHZhciBzLGwsYz1pW2FdLHU9Yy5sZW5ndGgsaD1vW2FdPW5ldyBBcnJheSh1KSxkPTA7ZDx1OysrZCkocz1jW2RdKSYmKGw9dC5jYWxsKHMscy5fX2RhdGFfXyxkLGMpKSYmKCJfX2RhdGFfXyJpbiBzJiYobC5fX2RhdGFfXz1zLl9fZGF0YV9fKSxoW2RdPWwsbEgoaFtkXSxlLG4sZCxoLGhIKHMsbikpKTtyZXR1cm4gbmV3IEZIKG8sdGhpcy5fcGFyZW50cyxlLG4pfSxzZWxlY3RBbGw6ZnVuY3Rpb24gR0godCl7dmFyIGU9dGhpcy5fbmFtZSxuPXRoaXMuX2lkOyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1peih0KSk7Zm9yKHZhciBpPXRoaXMuX2dyb3VwcyxyPWkubGVuZ3RoLG89W10sYT1bXSxzPTA7czxyOysrcylmb3IodmFyIGwsYz1pW3NdLHU9Yy5sZW5ndGgsaD0wO2g8dTsrK2gpaWYobD1jW2hdKXtmb3IodmFyIGQscD10LmNhbGwobCxsLl9fZGF0YV9fLGgsYyksZj1oSChsLG4pLG09MCxnPXAubGVuZ3RoO208ZzsrK20pKGQ9cFttXSkmJmxIKGQsZSxuLG0scCxmKTtvLnB1c2gocCksYS5wdXNoKGwpfXJldHVybiBuZXcgRkgobyxhLGUsbil9LGZpbHRlcjpmdW5jdGlvbiBXSCh0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9cnoodCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxpPW5ldyBBcnJheShuKSxyPTA7cjxuOysrcilmb3IodmFyIG8sYT1lW3JdLHM9YS5sZW5ndGgsbD1pW3JdPVtdLGM9MDtjPHM7KytjKShvPWFbY10pJiZ0LmNhbGwobyxvLl9fZGF0YV9fLGMsYSkmJmwucHVzaChvKTtyZXR1cm4gbmV3IEZIKGksdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX0sbWVyZ2U6ZnVuY3Rpb24gcUgodCl7aWYodC5faWQhPT10aGlzLl9pZCl0aHJvdyBuZXcgRXJyb3I7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPXQuX2dyb3VwcyxpPWUubGVuZ3RoLHI9TWF0aC5taW4oaSxuLmxlbmd0aCksbz1uZXcgQXJyYXkoaSksYT0wO2E8cjsrK2EpZm9yKHZhciBzLGw9ZVthXSxjPW5bYV0sdT1sLmxlbmd0aCxoPW9bYV09bmV3IEFycmF5KHUpLGQ9MDtkPHU7KytkKShzPWxbZF18fGNbZF0pJiYoaFtkXT1zKTtmb3IoO2E8aTsrK2Epb1thXT1lW2FdO3JldHVybiBuZXcgRkgobyx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfSxzZWxlY3Rpb246ZnVuY3Rpb24gWUgoKXtyZXR1cm4gbmV3IElIKHRoaXMuX2dyb3Vwcyx0aGlzLl9wYXJlbnRzKX0sdHJhbnNpdGlvbjpmdW5jdGlvbiBYSCgpe2Zvcih2YXIgdD10aGlzLl9uYW1lLGU9dGhpcy5faWQsbj1WSCgpLGk9dGhpcy5fZ3JvdXBzLHI9aS5sZW5ndGgsbz0wO288cjsrK28pZm9yKHZhciBhLHM9aVtvXSxsPXMubGVuZ3RoLGM9MDtjPGw7KytjKWlmKGE9c1tjXSl7dmFyIHU9aEgoYSxlKTtsSChhLHQsbixjLHMse3RpbWU6dS50aW1lK3UuZGVsYXkrdS5kdXJhdGlvbixkZWxheTowLGR1cmF0aW9uOnUuZHVyYXRpb24sZWFzZTp1LmVhc2V9KX1yZXR1cm4gbmV3IEZIKGksdGhpcy5fcGFyZW50cyx0LG4pfSxjYWxsOlVILmNhbGwsbm9kZXM6VUgubm9kZXMsbm9kZTpVSC5ub2RlLHNpemU6VUguc2l6ZSxlbXB0eTpVSC5lbXB0eSxlYWNoOlVILmVhY2gsb246ZnVuY3Rpb24gJEgodCxlKXt2YXIgbj10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP2hIKHRoaXMubm9kZSgpLG4pLm9uLm9uKHQpOnRoaXMuZWFjaChOSChuLHQsZSkpfSxhdHRyOmZ1bmN0aW9uIEtIKHQsZSl7dmFyIG49S1IodCksaT0idHJhbnNmb3JtIj09PW4/VUI6Z0g7cmV0dXJuIHRoaXMuYXR0clR3ZWVuKHQsImZ1bmN0aW9uIj09dHlwZW9mIGU/KG4ubG9jYWw/d0g6eEgpKG4saSxtSCh0aGlzLCJhdHRyLiIrdCxlKSk6bnVsbD09ZT8obi5sb2NhbD95SDpfSCkobik6KG4ubG9jYWw/Ykg6dkgpKG4saSxlKSl9LGF0dHJUd2VlbjpmdW5jdGlvbiBaSCh0LGUpe3ZhciBuPSJhdHRyLiIrdDtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKG49dGhpcy50d2VlbihuKSkmJm4uX3ZhbHVlO2lmKG51bGw9PWUpcmV0dXJuIHRoaXMudHdlZW4obixudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3I7dmFyIGk9S1IodCk7cmV0dXJuIHRoaXMudHdlZW4obiwoaS5sb2NhbD9FSDpUSCkoaSxlKSl9LHN0eWxlOmZ1bmN0aW9uIEpIKHQsZSxuKXt2YXIgaT0idHJhbnNmb3JtIj09KHQrPSIiKT9GQjpnSDtyZXR1cm4gbnVsbD09ZT90aGlzLnN0eWxlVHdlZW4odCwoZnVuY3Rpb24gcih0LGUpe3ZhciBuLGkscjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1ieih0aGlzLHQpLGE9KHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCksYnoodGhpcyx0KSk7cmV0dXJuIG89PT1hP251bGw6bz09PW4mJmE9PT1pP3I6cj1lKG49byxpPWEpfX0pKHQsaSkpLm9uKCJlbmQuc3R5bGUuIit0LE9IKHQpKToiZnVuY3Rpb24iPT10eXBlb2YgZT90aGlzLnN0eWxlVHdlZW4odCwoZnVuY3Rpb24gYSh0LGUsbil7dmFyIGkscixvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPWJ6KHRoaXMsdCkscz1uKHRoaXMpLGw9cysiIjtyZXR1cm4gbnVsbD09cyYmKHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCksbD1zPWJ6KHRoaXMsdCkpLGE9PT1sP251bGw6YT09PWkmJmw9PT1yP286KHI9bCxvPWUoaT1hLHMpKX19KSh0LGksbUgodGhpcywic3R5bGUuIit0LGUpKSkuZWFjaCgoZnVuY3Rpb24gbyh0LGUpe3ZhciBuLGkscixvLGE9InN0eWxlLiIrZSxzPSJlbmQuIithO3JldHVybiBmdW5jdGlvbigpe3ZhciBsPXVIKHRoaXMsdCksYz1sLm9uLHU9bnVsbD09bC52YWx1ZVthXT9vfHwobz1PSChlKSk6dm9pZCAwO2M9PT1uJiZyPT09dXx8KGk9KG49YykuY29weSgpKS5vbihzLHI9dSksbC5vbj1pfX0pKHRoaXMuX2lkLHQpKTp0aGlzLnN0eWxlVHdlZW4odCwoZnVuY3Rpb24gcyh0LGUsbil7dmFyIGkscixvPW4rIiI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9YnoodGhpcyx0KTtyZXR1cm4gYT09PW8/bnVsbDphPT09aT9yOnI9ZShpPWEsbil9fSkodCxpLGUpLG4pLm9uKCJlbmQuc3R5bGUuIit0LG51bGwpfSxzdHlsZVR3ZWVuOmZ1bmN0aW9uIFFIKHQsZSxuKXt2YXIgaT0ic3R5bGUuIisodCs9IiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4oaT10aGlzLnR3ZWVuKGkpKSYmaS5fdmFsdWU7aWYobnVsbD09ZSlyZXR1cm4gdGhpcy50d2VlbihpLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihpLHpIKHQsZSxudWxsPT1uPyIiOm4pKX0sdGV4dDpmdW5jdGlvbiB0Rih0KXtyZXR1cm4gdGhpcy50d2VlbigidGV4dCIsImZ1bmN0aW9uIj09dHlwZW9mIHQ/KGZ1bmN0aW9uIGUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKTt0aGlzLnRleHRDb250ZW50PW51bGw9PWU/IiI6ZX19KShtSCh0aGlzLCJ0ZXh0Iix0KSk6KGZ1bmN0aW9uIG4odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD10fX0pKG51bGw9PXQ/IiI6dCsiIikpfSx0ZXh0VHdlZW46ZnVuY3Rpb24gZUYodCl7dmFyIGU9InRleHQiO2lmKGFyZ3VtZW50cy5sZW5ndGg8MSlyZXR1cm4oZT10aGlzLnR3ZWVuKGUpKSYmZS5fdmFsdWU7aWYobnVsbD09dClyZXR1cm4gdGhpcy50d2VlbihlLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihlLEJIKHQpKX0scmVtb3ZlOmZ1bmN0aW9uIG5GKCl7cmV0dXJuIHRoaXMub24oImVuZC5yZW1vdmUiLChmdW5jdGlvbiB0KGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMucGFyZW50Tm9kZTtmb3IodmFyIG4gaW4gdGhpcy5fX3RyYW5zaXRpb24paWYoK24hPT1lKXJldHVybjt0JiZ0LnJlbW92ZUNoaWxkKHRoaXMpfX0pKHRoaXMuX2lkKSl9LHR3ZWVuOmZ1bmN0aW9uIGlGKHQsZSl7dmFyIG49dGhpcy5faWQ7aWYodCs9IiIsYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIGkscj1oSCh0aGlzLm5vZGUoKSxuKS50d2VlbixvPTAsYT1yLmxlbmd0aDtvPGE7KytvKWlmKChpPXJbb10pLm5hbWU9PT10KXJldHVybiBpLnZhbHVlO3JldHVybiBudWxsfXJldHVybiB0aGlzLmVhY2goKG51bGw9PWU/cEg6ZkgpKG4sdCxlKSl9LGRlbGF5OmZ1bmN0aW9uIHJGKHQpe3ZhciBlPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIHQ/Q0g6QUgpKGUsdCkpOmhIKHRoaXMubm9kZSgpLGUpLmRlbGF5fSxkdXJhdGlvbjpmdW5jdGlvbiBvRih0KXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiB0P2tIOkxIKShlLHQpKTpoSCh0aGlzLm5vZGUoKSxlKS5kdXJhdGlvbn0sZWFzZTpmdW5jdGlvbiBhRih0KXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goUEgoZSx0KSk6aEgodGhpcy5ub2RlKCksZSkuZWFzZX0sZW5kOmZ1bmN0aW9uIHNGKCl7dmFyIHQsZSxuPXRoaXMsaT1uLl9pZCxyPW4uc2l6ZSgpO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obyxhKXt2YXIgcz17dmFsdWU6YX0sbD17dmFsdWU6ZnVuY3Rpb24oKXswPT0tLXImJm8oKX19O24uZWFjaCgoZnVuY3Rpb24oKXt2YXIgbj11SCh0aGlzLGkpLHI9bi5vbjtyIT09dCYmKChlPSh0PXIpLmNvcHkoKSkuXy5jYW5jZWwucHVzaChzKSxlLl8uaW50ZXJydXB0LnB1c2gocyksZS5fLmVuZC5wdXNoKGwpKSxuLm9uPWV9KSl9KSl9fTt2YXIgbEY9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOkVmfTtmdW5jdGlvbiBjRih0LGUpe2Zvcih2YXIgbjshKG49dC5fX3RyYW5zaXRpb24pfHwhKG49bltlXSk7KWlmKCEodD10LnBhcmVudE5vZGUpKXJldHVybiBsRi50aW1lPUpCKCksbEY7cmV0dXJuIG59ZnVuY3Rpb24gdUYodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIGhGKHQsZSxuKXt0aGlzLnRhcmdldD10LHRoaXMudHlwZT1lLHRoaXMuc2VsZWN0aW9uPW59ZnVuY3Rpb24gZEYoKXtXei5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBwRigpe1d6LnByZXZlbnREZWZhdWx0KCksV3ouc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9bkQucHJvdG90eXBlLmludGVycnVwdD1mdW5jdGlvbiBmRih0KXtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpe2RIKHRoaXMsdCl9KSl9LG5ELnByb3RvdHlwZS50cmFuc2l0aW9uPWZ1bmN0aW9uIG1GKHQpe3ZhciBlLG47dCBpbnN0YW5jZW9mIEZIPyhlPXQuX2lkLHQ9dC5fbmFtZSk6KGU9VkgoKSwobj1sRikudGltZT1KQigpLHQ9bnVsbD09dD9udWxsOnQrIiIpO2Zvcih2YXIgaT10aGlzLl9ncm91cHMscj1pLmxlbmd0aCxvPTA7bzxyOysrbylmb3IodmFyIGEscz1pW29dLGw9cy5sZW5ndGgsYz0wO2M8bDsrK2MpKGE9c1tjXSkmJmxIKGEsdCxlLGMscyxufHxjRihhLGUpKTtyZXR1cm4gbmV3IEZIKGksdGhpcy5fcGFyZW50cyx0LGUpfTt2YXIgZ0Y9e25hbWU6ImRyYWcifSxfRj17bmFtZToic3BhY2UifSx5Rj17bmFtZToiaGFuZGxlIn0sdkY9e25hbWU6ImNlbnRlciJ9LGJGPXtuYW1lOiJ4IixoYW5kbGVzOlsiZSIsInciXS5tYXAoQUYpLGlucHV0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQmJltbdFswXSxlWzBdWzFdXSxbdFsxXSxlWzFdWzFdXV19LG91dHB1dDpmdW5jdGlvbih0KXtyZXR1cm4gdCYmW3RbMF1bMF0sdFsxXVswXV19fSx4Rj17bmFtZToieSIsaGFuZGxlczpbIm4iLCJzIl0ubWFwKEFGKSxpbnB1dDpmdW5jdGlvbih0LGUpe3JldHVybiB0JiZbW2VbMF1bMF0sdFswXV0sW2VbMV1bMF0sdFsxXV1dfSxvdXRwdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQmJlt0WzBdWzFdLHRbMV1bMV1dfX0sd0Y9e25hbWU6Inh5IixoYW5kbGVzOlsibiIsImUiLCJzIiwidyIsIm53IiwibmUiLCJzZSIsInN3Il0ubWFwKEFGKSxpbnB1dDpmdW5jdGlvbih0KXtyZXR1cm4gdH0sb3V0cHV0OmZ1bmN0aW9uKHQpe3JldHVybiB0fX0sU0Y9e292ZXJsYXk6ImNyb3NzaGFpciIsc2VsZWN0aW9uOiJtb3ZlIixuOiJucy1yZXNpemUiLGU6ImV3LXJlc2l6ZSIsczoibnMtcmVzaXplIix3OiJldy1yZXNpemUiLG53OiJud3NlLXJlc2l6ZSIsbmU6Im5lc3ctcmVzaXplIixzZToibndzZS1yZXNpemUiLHN3OiJuZXN3LXJlc2l6ZSJ9LE1GPXtlOiJ3Iix3OiJlIixudzoibmUiLG5lOiJudyIsc2U6InN3Iixzdzoic2UifSxFRj17bjoicyIsczoibiIsbnc6InN3IixuZToic2UiLHNlOiJuZSIsc3c6Im53In0sVEY9e292ZXJsYXk6MSxzZWxlY3Rpb246MSxuOm51bGwsZToxLHM6bnVsbCx3Oi0xLG53Oi0xLG5lOjEsc2U6MSxzdzotMX0sQ0Y9e292ZXJsYXk6MSxzZWxlY3Rpb246MSxuOi0xLGU6bnVsbCxzOjEsdzpudWxsLG53Oi0xLG5lOi0xLHNlOjEsc3c6MX07ZnVuY3Rpb24gQUYodCl7cmV0dXJue3R5cGU6dH19ZnVuY3Rpb24ga0YoKXtyZXR1cm4hV3ouYnV0dG9ufWZ1bmN0aW9uIExGKCl7dmFyIHQ9dGhpcy5vd25lclNWR0VsZW1lbnR8fHRoaXM7cmV0dXJuW1swLDBdLFt0LndpZHRoLmJhc2VWYWwudmFsdWUsdC5oZWlnaHQuYmFzZVZhbC52YWx1ZV1dfWZ1bmN0aW9uIFBGKHQpe2Zvcig7IXQuX19icnVzaDspaWYoISh0PXQucGFyZW50Tm9kZSkpcmV0dXJuO3JldHVybiB0Ll9fYnJ1c2h9ZnVuY3Rpb24gTkYodCl7cmV0dXJuIHRbMF1bMF09PT10WzFdWzBdfHx0WzBdWzFdPT09dFsxXVsxXX1mdW5jdGlvbiBJRih0KXt2YXIgZSxuPUxGLGk9a0Yscj1qUihhLCJzdGFydCIsImJydXNoIiwiZW5kIiksbz02O2Z1bmN0aW9uIGEoZSl7dmFyIG49ZS5wcm9wZXJ0eSgiX19icnVzaCIsaCkuc2VsZWN0QWxsKCIub3ZlcmxheSIpLmRhdGEoW0FGKCJvdmVybGF5IildKTtuLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJvdmVybGF5IikuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKS5hdHRyKCJjdXJzb3IiLFNGLm92ZXJsYXkpLm1lcmdlKG4pLmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9UEYodGhpcykuZXh0ZW50O2lEKHRoaXMpLmF0dHIoIngiLHRbMF1bMF0pLmF0dHIoInkiLHRbMF1bMV0pLmF0dHIoIndpZHRoIix0WzFdWzBdLXRbMF1bMF0pLmF0dHIoImhlaWdodCIsdFsxXVsxXS10WzBdWzFdKX0pKSxlLnNlbGVjdEFsbCgiLnNlbGVjdGlvbiIpLmRhdGEoW0FGKCJzZWxlY3Rpb24iKV0pLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJzZWxlY3Rpb24iKS5hdHRyKCJjdXJzb3IiLFNGLnNlbGVjdGlvbikuYXR0cigiZmlsbCIsIiM3NzciKS5hdHRyKCJmaWxsLW9wYWNpdHkiLC4zKS5hdHRyKCJzdHJva2UiLCIjZmZmIikuYXR0cigic2hhcGUtcmVuZGVyaW5nIiwiY3Jpc3BFZGdlcyIpO3ZhciBpPWUuc2VsZWN0QWxsKCIuaGFuZGxlIikuZGF0YSh0LmhhbmRsZXMsKGZ1bmN0aW9uKHQpe3JldHVybiB0LnR5cGV9KSk7aS5leGl0KCkucmVtb3ZlKCksaS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwoZnVuY3Rpb24odCl7cmV0dXJuImhhbmRsZSBoYW5kbGUtLSIrdC50eXBlfSkpLmF0dHIoImN1cnNvciIsKGZ1bmN0aW9uKHQpe3JldHVybiBTRlt0LnR5cGVdfSkpLGUuZWFjaChzKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIikuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKS5vbigibW91c2Vkb3duLmJydXNoIHRvdWNoc3RhcnQuYnJ1c2giLHUpfWZ1bmN0aW9uIHMoKXt2YXIgdD1pRCh0aGlzKSxlPVBGKHRoaXMpLnNlbGVjdGlvbjtlPyh0LnNlbGVjdEFsbCgiLnNlbGVjdGlvbiIpLnN0eWxlKCJkaXNwbGF5IixudWxsKS5hdHRyKCJ4IixlWzBdWzBdKS5hdHRyKCJ5IixlWzBdWzFdKS5hdHRyKCJ3aWR0aCIsZVsxXVswXS1lWzBdWzBdKS5hdHRyKCJoZWlnaHQiLGVbMV1bMV0tZVswXVsxXSksdC5zZWxlY3RBbGwoIi5oYW5kbGUiKS5zdHlsZSgiZGlzcGxheSIsbnVsbCkuYXR0cigieCIsKGZ1bmN0aW9uKHQpe3JldHVybiJlIj09PXQudHlwZVt0LnR5cGUubGVuZ3RoLTFdP2VbMV1bMF0tby8yOmVbMF1bMF0tby8yfSkpLmF0dHIoInkiLChmdW5jdGlvbih0KXtyZXR1cm4icyI9PT10LnR5cGVbMF0/ZVsxXVsxXS1vLzI6ZVswXVsxXS1vLzJ9KSkuYXR0cigid2lkdGgiLChmdW5jdGlvbih0KXtyZXR1cm4ibiI9PT10LnR5cGV8fCJzIj09PXQudHlwZT9lWzFdWzBdLWVbMF1bMF0rbzpvfSkpLmF0dHIoImhlaWdodCIsKGZ1bmN0aW9uKHQpe3JldHVybiJlIj09PXQudHlwZXx8InciPT09dC50eXBlP2VbMV1bMV0tZVswXVsxXStvOm99KSkpOnQuc2VsZWN0QWxsKCIuc2VsZWN0aW9uLC5oYW5kbGUiKS5zdHlsZSgiZGlzcGxheSIsIm5vbmUiKS5hdHRyKCJ4IixudWxsKS5hdHRyKCJ5IixudWxsKS5hdHRyKCJ3aWR0aCIsbnVsbCkuYXR0cigiaGVpZ2h0IixudWxsKX1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuIHQuX19icnVzaC5lbWl0dGVyfHxuZXcgYyh0LGUpfWZ1bmN0aW9uIGModCxlKXt0aGlzLnRoYXQ9dCx0aGlzLmFyZ3M9ZSx0aGlzLnN0YXRlPXQuX19icnVzaCx0aGlzLmFjdGl2ZT0wfWZ1bmN0aW9uIHUoKXtpZihXei50b3VjaGVzKXtpZihXei5jaGFuZ2VkVG91Y2hlcy5sZW5ndGg8V3oudG91Y2hlcy5sZW5ndGgpcmV0dXJuIHBGKCl9ZWxzZSBpZihlKXJldHVybjtpZihpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIG4scixvLGEsYyx1LGgsZCxwLGYsbSxnLF8seT10aGlzLHY9V3oudGFyZ2V0Ll9fZGF0YV9fLnR5cGUsYj0ic2VsZWN0aW9uIj09PShXei5tZXRhS2V5P3Y9Im92ZXJsYXkiOnYpP2dGOld6LmFsdEtleT92Rjp5Rix4PXQ9PT14Rj9udWxsOlRGW3ZdLHc9dD09PWJGP251bGw6Q0Zbdl0sUz1QRih5KSxNPVMuZXh0ZW50LEU9Uy5zZWxlY3Rpb24sVD1NWzBdWzBdLEM9TVswXVsxXSxBPU1bMV1bMF0saz1NWzFdWzFdLEw9eCYmdyYmV3ouc2hpZnRLZXksUD1yRCh5KSxOPVAsST1sKHksYXJndW1lbnRzKS5iZWZvcmVzdGFydCgpOyJvdmVybGF5Ij09PXY/Uy5zZWxlY3Rpb249RT1bW249dD09PXhGP1Q6UFswXSxvPXQ9PT1iRj9DOlBbMV1dLFtjPXQ9PT14Rj9BOm4saD10PT09YkY/azpvXV06KG49RVswXVswXSxvPUVbMF1bMV0sYz1FWzFdWzBdLGg9RVsxXVsxXSkscj1uLGE9byx1PWMsZD1oO3ZhciBPPWlEKHkpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpLFI9Ty5zZWxlY3RBbGwoIi5vdmVybGF5IikuYXR0cigiY3Vyc29yIixTRlt2XSk7aWYoV3oudG91Y2hlcylPLm9uKCJ0b3VjaG1vdmUuYnJ1c2giLEQsITApLm9uKCJ0b3VjaGVuZC5icnVzaCB0b3VjaGNhbmNlbC5icnVzaCIsSCwhMCk7ZWxzZXt2YXIgej1pRChXei52aWV3KS5vbigia2V5ZG93bi5icnVzaCIsRiwhMCkub24oImtleXVwLmJydXNoIixWLCEwKS5vbigibW91c2Vtb3ZlLmJydXNoIixELCEwKS5vbigibW91c2V1cC5icnVzaCIsSCwhMCk7YUQoV3oudmlldyl9ZEYoKSxkSCh5KSxzLmNhbGwoeSksSS5zdGFydCgpfWZ1bmN0aW9uIEQoKXt2YXIgdD1yRCh5KTshTHx8Z3x8X3x8KE1hdGguYWJzKHRbMF0tTlswXSk+TWF0aC5hYnModFsxXS1OWzFdKT9fPSEwOmc9ITApLE49dCxtPSEwLHBGKCksQigpfWZ1bmN0aW9uIEIoKXt2YXIgdDtzd2l0Y2gocD1OWzBdLVBbMF0sZj1OWzFdLVBbMV0sYil7Y2FzZSBfRjpjYXNlIGdGOngmJihwPU1hdGgubWF4KFQtbixNYXRoLm1pbihBLWMscCkpLHI9bitwLHU9YytwKSx3JiYoZj1NYXRoLm1heChDLW8sTWF0aC5taW4oay1oLGYpKSxhPW8rZixkPWgrZik7YnJlYWs7Y2FzZSB5Rjp4PDA/KHA9TWF0aC5tYXgoVC1uLE1hdGgubWluKEEtbixwKSkscj1uK3AsdT1jKTp4PjAmJihwPU1hdGgubWF4KFQtYyxNYXRoLm1pbihBLWMscCkpLHI9bix1PWMrcCksdzwwPyhmPU1hdGgubWF4KEMtbyxNYXRoLm1pbihrLW8sZikpLGE9bytmLGQ9aCk6dz4wJiYoZj1NYXRoLm1heChDLWgsTWF0aC5taW4oay1oLGYpKSxhPW8sZD1oK2YpO2JyZWFrO2Nhc2UgdkY6eCYmKHI9TWF0aC5tYXgoVCxNYXRoLm1pbihBLG4tcCp4KSksdT1NYXRoLm1heChULE1hdGgubWluKEEsYytwKngpKSksdyYmKGE9TWF0aC5tYXgoQyxNYXRoLm1pbihrLG8tZip3KSksZD1NYXRoLm1heChDLE1hdGgubWluKGssaCtmKncpKSl9dTxyJiYoeCo9LTEsdD1uLG49YyxjPXQsdD1yLHI9dSx1PXQsdiBpbiBNRiYmUi5hdHRyKCJjdXJzb3IiLFNGW3Y9TUZbdl1dKSksZDxhJiYodyo9LTEsdD1vLG89aCxoPXQsdD1hLGE9ZCxkPXQsdiBpbiBFRiYmUi5hdHRyKCJjdXJzb3IiLFNGW3Y9RUZbdl1dKSksUy5zZWxlY3Rpb24mJihFPVMuc2VsZWN0aW9uKSxnJiYocj1FWzBdWzBdLHU9RVsxXVswXSksXyYmKGE9RVswXVsxXSxkPUVbMV1bMV0pLEVbMF1bMF09PT1yJiZFWzBdWzFdPT09YSYmRVsxXVswXT09PXUmJkVbMV1bMV09PT1kfHwoUy5zZWxlY3Rpb249W1tyLGFdLFt1LGRdXSxzLmNhbGwoeSksSS5icnVzaCgpKX1mdW5jdGlvbiBIKCl7aWYoZEYoKSxXei50b3VjaGVzKXtpZihXei50b3VjaGVzLmxlbmd0aClyZXR1cm47ZSYmY2xlYXJUaW1lb3V0KGUpLGU9c2V0VGltZW91dCgoZnVuY3Rpb24oKXtlPW51bGx9KSw1MDApLE8ub24oInRvdWNobW92ZS5icnVzaCB0b3VjaGVuZC5icnVzaCB0b3VjaGNhbmNlbC5icnVzaCIsbnVsbCl9ZWxzZSBzRChXei52aWV3LG0pLHoub24oImtleWRvd24uYnJ1c2gga2V5dXAuYnJ1c2ggbW91c2Vtb3ZlLmJydXNoIG1vdXNldXAuYnJ1c2giLG51bGwpO08uYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKSxSLmF0dHIoImN1cnNvciIsU0Yub3ZlcmxheSksUy5zZWxlY3Rpb24mJihFPVMuc2VsZWN0aW9uKSxORihFKSYmKFMuc2VsZWN0aW9uPW51bGwscy5jYWxsKHkpKSxJLmVuZCgpfWZ1bmN0aW9uIEYoKXtzd2l0Y2goV3oua2V5Q29kZSl7Y2FzZSAxNjpMPXgmJnc7YnJlYWs7Y2FzZSAxODpiPT09eUYmJih4JiYoYz11LXAqeCxuPXIrcCp4KSx3JiYoaD1kLWYqdyxvPWErZip3KSxiPXZGLEIoKSk7YnJlYWs7Y2FzZSAzMjpiIT09eUYmJmIhPT12Rnx8KHg8MD9jPXUtcDp4PjAmJihuPXItcCksdzwwP2g9ZC1mOnc+MCYmKG89YS1mKSxiPV9GLFIuYXR0cigiY3Vyc29yIixTRi5zZWxlY3Rpb24pLEIoKSk7YnJlYWs7ZGVmYXVsdDpyZXR1cm59cEYoKX1mdW5jdGlvbiBWKCl7c3dpdGNoKFd6LmtleUNvZGUpe2Nhc2UgMTY6TCYmKGc9Xz1MPSExLEIoKSk7YnJlYWs7Y2FzZSAxODpiPT09dkYmJih4PDA/Yz11Ong+MCYmKG49ciksdzwwP2g9ZDp3PjAmJihvPWEpLGI9eUYsQigpKTticmVhaztjYXNlIDMyOmI9PT1fRiYmKFd6LmFsdEtleT8oeCYmKGM9dS1wKngsbj1yK3AqeCksdyYmKGg9ZC1mKncsbz1hK2YqdyksYj12Rik6KHg8MD9jPXU6eD4wJiYobj1yKSx3PDA/aD1kOnc+MCYmKG89YSksYj15RiksUi5hdHRyKCJjdXJzb3IiLFNGW3ZdKSxCKCkpO2JyZWFrO2RlZmF1bHQ6cmV0dXJufXBGKCl9fWZ1bmN0aW9uIGgoKXt2YXIgZT10aGlzLl9fYnJ1c2h8fHtzZWxlY3Rpb246bnVsbH07cmV0dXJuIGUuZXh0ZW50PW4uYXBwbHkodGhpcyxhcmd1bWVudHMpLGUuZGltPXQsZX1yZXR1cm4gYS5tb3ZlPWZ1bmN0aW9uKGUsbil7ZS5zZWxlY3Rpb24/ZS5vbigic3RhcnQuYnJ1c2giLChmdW5jdGlvbigpe2wodGhpcyxhcmd1bWVudHMpLmJlZm9yZXN0YXJ0KCkuc3RhcnQoKX0pKS5vbigiaW50ZXJydXB0LmJydXNoIGVuZC5icnVzaCIsKGZ1bmN0aW9uKCl7bCh0aGlzLGFyZ3VtZW50cykuZW5kKCl9KSkudHdlZW4oImJydXNoIiwoZnVuY3Rpb24oKXt2YXIgZT10aGlzLGk9ZS5fX2JydXNoLHI9bChlLGFyZ3VtZW50cyksbz1pLnNlbGVjdGlvbixhPXQuaW5wdXQoImZ1bmN0aW9uIj09dHlwZW9mIG4/bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6bixpLmV4dGVudCksYz1rQihvLGEpO2Z1bmN0aW9uIHUodCl7aS5zZWxlY3Rpb249MT09PXQmJk5GKGEpP251bGw6Yyh0KSxzLmNhbGwoZSksci5icnVzaCgpfXJldHVybiBvJiZhP3U6dSgxKX0pKTplLmVhY2goKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxpPWFyZ3VtZW50cyxyPWUuX19icnVzaCxvPXQuaW5wdXQoImZ1bmN0aW9uIj09dHlwZW9mIG4/bi5hcHBseShlLGkpOm4sci5leHRlbnQpLGE9bChlLGkpLmJlZm9yZXN0YXJ0KCk7ZEgoZSksci5zZWxlY3Rpb249bnVsbD09b3x8TkYobyk/bnVsbDpvLHMuY2FsbChlKSxhLnN0YXJ0KCkuYnJ1c2goKS5lbmQoKX0pKX0sYy5wcm90b3R5cGU9e2JlZm9yZXN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIDE9PSsrdGhpcy5hY3RpdmUmJih0aGlzLnN0YXRlLmVtaXR0ZXI9dGhpcyx0aGlzLnN0YXJ0aW5nPSEwKSx0aGlzfSxzdGFydDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXJ0aW5nJiYodGhpcy5zdGFydGluZz0hMSx0aGlzLmVtaXQoInN0YXJ0IikpLHRoaXN9LGJydXNoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW1pdCgiYnJ1c2giKSx0aGlzfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gMD09LS10aGlzLmFjdGl2ZSYmKGRlbGV0ZSB0aGlzLnN0YXRlLmVtaXR0ZXIsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1pdDpmdW5jdGlvbihlKXshKGZ1bmN0aW9uIG4odCxlLGkscil7dmFyIG89V3o7dC5zb3VyY2VFdmVudD1XeixXej10O3RyeXtlLmFwcGx5KGkscil9ZmluYWxseXtXej1vfX0pKG5ldyBoRihhLGUsdC5vdXRwdXQodGhpcy5zdGF0ZS5zZWxlY3Rpb24pKSxyLmFwcGx5LHIsW2UsdGhpcy50aGF0LHRoaXMuYXJnc10pfX0sYS5leHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp1RihbWyt0WzBdWzBdLCt0WzBdWzFdXSxbK3RbMV1bMF0sK3RbMV1bMV1dXSksYSk6bn0sYS5maWx0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp1RighIXQpLGEpOml9LGEuaGFuZGxlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0rdCxhKTpvfSxhLm9uPWZ1bmN0aW9uKCl7dmFyIHQ9ci5vbi5hcHBseShyLGFyZ3VtZW50cyk7cmV0dXJuIHQ9PT1yP2E6dH0sYX1mdW5jdGlvbiBPRih0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6dD49ZT8wOk5hTn1mdW5jdGlvbiBSRih0LGUsbil7dD0rdCxlPStlLG49KHI9YXJndW1lbnRzLmxlbmd0aCk8Mj8oZT10LHQ9MCwxKTpyPDM/MTorbjtmb3IodmFyIGk9LTEscj0wfE1hdGgubWF4KDAsTWF0aC5jZWlsKChlLXQpL24pKSxvPW5ldyBBcnJheShyKTsrK2k8cjspb1tpXT10K2kqbjtyZXR1cm4gb30hKGZ1bmN0aW9uIHpGKHQpezE9PT10Lmxlbmd0aCYmKHQ9KGZ1bmN0aW9uIGUodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7cmV0dXJuIE9GKHQoZSksbil9fSkodCkpfSkoT0YpO3ZhciBERj1NYXRoLmNvcyxCRj1NYXRoLnNpbixIRj1NYXRoLlBJLEZGPUhGLzIsVkY9MipIRixVRj1NYXRoLm1heDtmdW5jdGlvbiBqRih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXtyZXR1cm4gdChlLnNvdXJjZS52YWx1ZStlLnRhcmdldC52YWx1ZSxuLnNvdXJjZS52YWx1ZStuLnRhcmdldC52YWx1ZSl9fXZhciBHRj1BcnJheS5wcm90b3R5cGUuc2xpY2U7ZnVuY3Rpb24gV0YodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fXZhciBxRj1NYXRoLlBJLFlGPTIqcUYsWEY9MWUtNiwkRj1ZRi1YRjtmdW5jdGlvbiBLRigpe3RoaXMuX3gwPXRoaXMuX3kwPXRoaXMuX3gxPXRoaXMuX3kxPW51bGwsdGhpcy5fPSIifWZ1bmN0aW9uIFpGKCl7cmV0dXJuIG5ldyBLRn1mdW5jdGlvbiBKRih0KXtyZXR1cm4gdC5zb3VyY2V9ZnVuY3Rpb24gUUYodCl7cmV0dXJuIHQudGFyZ2V0fWZ1bmN0aW9uIHRWKHQpe3JldHVybiB0LnJhZGl1c31mdW5jdGlvbiBlVih0KXtyZXR1cm4gdC5zdGFydEFuZ2xlfWZ1bmN0aW9uIG5WKHQpe3JldHVybiB0LmVuZEFuZ2xlfUtGLnByb3RvdHlwZT1aRi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOktGLG1vdmVUbzpmdW5jdGlvbih0LGUpe3RoaXMuXys9Ik0iKyh0aGlzLl94MD10aGlzLl94MT0rdCkrIiwiKyh0aGlzLl95MD10aGlzLl95MT0rZSl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe251bGwhPT10aGlzLl94MSYmKHRoaXMuX3gxPXRoaXMuX3gwLHRoaXMuX3kxPXRoaXMuX3kwLHRoaXMuXys9IloiKX0sbGluZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fKz0iTCIrKHRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kxPStlKX0scXVhZHJhdGljQ3VydmVUbzpmdW5jdGlvbih0LGUsbixpKXt0aGlzLl8rPSJRIisgK3QrIiwiKyArZSsiLCIrKHRoaXMuX3gxPStuKSsiLCIrKHRoaXMuX3kxPStpKX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbih0LGUsbixpLHIsbyl7dGhpcy5fKz0iQyIrICt0KyIsIisgK2UrIiwiKyArbisiLCIrICtpKyIsIisodGhpcy5feDE9K3IpKyIsIisodGhpcy5feTE9K28pfSxhcmNUbzpmdW5jdGlvbih0LGUsbixpLHIpe3ZhciBvPXRoaXMuX3gxLGE9dGhpcy5feTEscz0obj0rbiktKHQ9K3QpLGw9KGk9K2kpLShlPStlKSxjPW8tdCx1PWEtZSxoPWMqYyt1KnU7aWYoKHI9K3IpPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrcik7aWYobnVsbD09PXRoaXMuX3gxKXRoaXMuXys9Ik0iKyh0aGlzLl94MT10KSsiLCIrKHRoaXMuX3kxPWUpO2Vsc2UgaWYoaD5YRilpZihNYXRoLmFicyh1KnMtbCpjKT5YRiYmcil7dmFyIGQ9bi1vLHA9aS1hLGY9cypzK2wqbCxtPWQqZCtwKnAsZz1NYXRoLnNxcnQoZiksXz1NYXRoLnNxcnQoaCkseT1yKk1hdGgudGFuKChxRi1NYXRoLmFjb3MoKGYraC1tKS8oMipnKl8pKSkvMiksdj15L18sYj15L2c7TWF0aC5hYnModi0xKT5YRiYmKHRoaXMuXys9IkwiKyh0K3YqYykrIiwiKyhlK3YqdSkpLHRoaXMuXys9IkEiK3IrIiwiK3IrIiwwLDAsIisgKyh1KmQ+YypwKSsiLCIrKHRoaXMuX3gxPXQrYipzKSsiLCIrKHRoaXMuX3kxPWUrYipsKX1lbHNlIHRoaXMuXys9IkwiKyh0aGlzLl94MT10KSsiLCIrKHRoaXMuX3kxPWUpfSxhcmM6ZnVuY3Rpb24odCxlLG4saSxyLG8pe3Q9K3QsZT0rZSxvPSEhbzt2YXIgYT0obj0rbikqTWF0aC5jb3MoaSkscz1uKk1hdGguc2luKGkpLGw9dCthLGM9ZStzLHU9MV5vLGg9bz9pLXI6ci1pO2lmKG48MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIituKTtudWxsPT09dGhpcy5feDE/dGhpcy5fKz0iTSIrbCsiLCIrYzooTWF0aC5hYnModGhpcy5feDEtbCk+WEZ8fE1hdGguYWJzKHRoaXMuX3kxLWMpPlhGKSYmKHRoaXMuXys9IkwiK2wrIiwiK2MpLG4mJihoPDAmJihoPWglWUYrWUYpLGg+JEY/dGhpcy5fKz0iQSIrbisiLCIrbisiLDAsMSwiK3UrIiwiKyh0LWEpKyIsIisoZS1zKSsiQSIrbisiLCIrbisiLDAsMSwiK3UrIiwiKyh0aGlzLl94MT1sKSsiLCIrKHRoaXMuX3kxPWMpOmg+WEYmJih0aGlzLl8rPSJBIituKyIsIituKyIsMCwiKyArKGg+PXFGKSsiLCIrdSsiLCIrKHRoaXMuX3gxPXQrbipNYXRoLmNvcyhyKSkrIiwiKyh0aGlzLl95MT1lK24qTWF0aC5zaW4ocikpKSl9LHJlY3Q6ZnVuY3Rpb24odCxlLG4saSl7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPStlKSsiaCIrICtuKyJ2IisgK2krImgiKy1uKyJaIn0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ffX07dmFyIGlWPSIkIjtmdW5jdGlvbiByVigpe31mdW5jdGlvbiBvVih0LGUpe3ZhciBuPW5ldyByVjtpZih0IGluc3RhbmNlb2YgclYpdC5lYWNoKChmdW5jdGlvbih0LGUpe24uc2V0KGUsdCl9KSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KHQpKXt2YXIgaSxyPS0xLG89dC5sZW5ndGg7aWYobnVsbD09ZSlmb3IoOysrcjxvOyluLnNldChyLHRbcl0pO2Vsc2UgZm9yKDsrK3I8bzspbi5zZXQoZShpPXRbcl0scix0KSxpKX1lbHNlIGlmKHQpZm9yKHZhciBhIGluIHQpbi5zZXQoYSx0W2FdKTtyZXR1cm4gbn1mdW5jdGlvbiBhVigpe3JldHVybnt9fWZ1bmN0aW9uIHNWKHQsZSxuKXt0W2VdPW59ZnVuY3Rpb24gbFYoKXtyZXR1cm4gb1YoKX1mdW5jdGlvbiBjVih0LGUsbil7dC5zZXQoZSxuKX1mdW5jdGlvbiB1Vigpe31yVi5wcm90b3R5cGU9b1YucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpyVixoYXM6ZnVuY3Rpb24odCl7cmV0dXJuIGlWK3QgaW4gdGhpc30sZ2V0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzW2lWK3RdfSxzZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpc1tpVit0XT1lLHRoaXN9LHJlbW92ZTpmdW5jdGlvbih0KXt2YXIgZT1pVit0O3JldHVybiBlIGluIHRoaXMmJmRlbGV0ZSB0aGlzW2VdfSxjbGVhcjpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1pViYmZGVsZXRlIHRoaXNbdF19LGtleXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcyllWzBdPT09aVYmJnQucHVzaChlLnNsaWNlKDEpKTtyZXR1cm4gdH0sdmFsdWVzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMpZVswXT09PWlWJiZ0LnB1c2godGhpc1tlXSk7cmV0dXJuIHR9LGVudHJpZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcyllWzBdPT09aVYmJnQucHVzaCh7a2V5OmUuc2xpY2UoMSksdmFsdWU6dGhpc1tlXX0pO3JldHVybiB0fSxzaXplOmZ1bmN0aW9uKCl7dmFyIHQ9MDtmb3IodmFyIGUgaW4gdGhpcyllWzBdPT09aVYmJisrdDtyZXR1cm4gdH0sZW1wdHk6ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcylpZih0WzBdPT09aVYpcmV0dXJuITE7cmV0dXJuITB9LGVhY2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMpZVswXT09PWlWJiZ0KHRoaXNbZV0sZS5zbGljZSgxKSx0aGlzKX19O3ZhciBoVj1vVi5wcm90b3R5cGU7ZnVuY3Rpb24gZFYodCxlKXt2YXIgbj1uZXcgdVY7aWYodCBpbnN0YW5jZW9mIHVWKXQuZWFjaCgoZnVuY3Rpb24odCl7bi5hZGQodCl9KSk7ZWxzZSBpZih0KXt2YXIgaT0tMSxyPXQubGVuZ3RoO2lmKG51bGw9PWUpZm9yKDsrK2k8cjspbi5hZGQodFtpXSk7ZWxzZSBmb3IoOysraTxyOyluLmFkZChlKHRbaV0saSx0KSl9cmV0dXJuIG59ZnVuY3Rpb24gcFYodCxlLG4pe3QucHJvdG90eXBlPWUucHJvdG90eXBlPW4sbi5jb25zdHJ1Y3Rvcj10fWZ1bmN0aW9uIGZWKHQsZSl7dmFyIG49T2JqZWN0LmNyZWF0ZSh0LnByb3RvdHlwZSk7Zm9yKHZhciBpIGluIGUpbltpXT1lW2ldO3JldHVybiBufWZ1bmN0aW9uIG1WKCl7fXVWLnByb3RvdHlwZT1kVi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnVWLGhhczpoVi5oYXMsYWRkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzW2lWKyh0Kz0iIildPXQsdGhpc30scmVtb3ZlOmhWLnJlbW92ZSxjbGVhcjpoVi5jbGVhcix2YWx1ZXM6aFYua2V5cyxzaXplOmhWLnNpemUsZW1wdHk6aFYuZW1wdHksZWFjaDpoVi5lYWNofTt2YXIgZ1Y9LjcsX1Y9MS9nVix5Vj0iXFxzKihbKy1dP1xcZCspXFxzKiIsdlY9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pXFxzKiIsYlY9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pJVxccyoiLHhWPS9eIyhbMC05YS1mXXszfSkkLyx3Vj0vXiMoWzAtOWEtZl17Nn0pJC8sU1Y9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW3lWLHlWLHlWXSsiXFwpJCIpLE1WPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tiVixiVixiVl0rIlxcKSQiKSxFVj1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW3lWLHlWLHlWLHZWXSsiXFwpJCIpLFRWPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbYlYsYlYsYlYsdlZdKyJcXCkkIiksQ1Y9bmV3IFJlZ0V4cCgiXmhzbFxcKCIrW3ZWLGJWLGJWXSsiXFwpJCIpLEFWPW5ldyBSZWdFeHAoIl5oc2xhXFwoIitbdlYsYlYsYlYsdlZdKyJcXCkkIiksa1Y9e2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH07ZnVuY3Rpb24gTFYodCl7dmFyIGU7cmV0dXJuIHQ9KHQrIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLChlPXhWLmV4ZWModCkpP25ldyBSVigoZT1wYXJzZUludChlWzFdLDE2KSk+PjgmMTV8ZT4+NCYyNDAsZT4+NCYxNXwyNDAmZSwoMTUmZSk8PDR8MTUmZSwxKTooZT13Vi5leGVjKHQpKT9QVihwYXJzZUludChlWzFdLDE2KSk6KGU9U1YuZXhlYyh0KSk/bmV3IFJWKGVbMV0sZVsyXSxlWzNdLDEpOihlPU1WLmV4ZWModCkpP25ldyBSVigyNTUqZVsxXS8xMDAsMjU1KmVbMl0vMTAwLDI1NSplWzNdLzEwMCwxKTooZT1FVi5leGVjKHQpKT9OVihlWzFdLGVbMl0sZVszXSxlWzRdKTooZT1UVi5leGVjKHQpKT9OVigyNTUqZVsxXS8xMDAsMjU1KmVbMl0vMTAwLDI1NSplWzNdLzEwMCxlWzRdKTooZT1DVi5leGVjKHQpKT96VihlWzFdLGVbMl0vMTAwLGVbM10vMTAwLDEpOihlPUFWLmV4ZWModCkpP3pWKGVbMV0sZVsyXS8xMDAsZVszXS8xMDAsZVs0XSk6a1YuaGFzT3duUHJvcGVydHkodCk/UFYoa1ZbdF0pOiJ0cmFuc3BhcmVudCI9PT10P25ldyBSVihOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIFBWKHQpe3JldHVybiBuZXcgUlYodD4+MTYmMjU1LHQ+PjgmMjU1LDI1NSZ0LDEpfWZ1bmN0aW9uIE5WKHQsZSxuLGkpe3JldHVybiBpPD0wJiYodD1lPW49TmFOKSxuZXcgUlYodCxlLG4saSl9ZnVuY3Rpb24gSVYodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBtVnx8KHQ9TFYodCkpLHQ/bmV3IFJWKCh0PXQucmdiKCkpLnIsdC5nLHQuYix0Lm9wYWNpdHkpOm5ldyBSVn1mdW5jdGlvbiBPVih0LGUsbixpKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/SVYodCk6bmV3IFJWKHQsZSxuLG51bGw9PWk/MTppKX1mdW5jdGlvbiBSVih0LGUsbixpKXt0aGlzLnI9K3QsdGhpcy5nPStlLHRoaXMuYj0rbix0aGlzLm9wYWNpdHk9K2l9ZnVuY3Rpb24gelYodCxlLG4saSl7cmV0dXJuIGk8PTA/dD1lPW49TmFOOm48PTB8fG4+PTE/dD1lPU5hTjplPD0wJiYodD1OYU4pLG5ldyBIVih0LGUsbixpKX1mdW5jdGlvbiBEVih0KXtpZih0IGluc3RhbmNlb2YgSFYpcmV0dXJuIG5ldyBIVih0LmgsdC5zLHQubCx0Lm9wYWNpdHkpO2lmKHQgaW5zdGFuY2VvZiBtVnx8KHQ9TFYodCkpLCF0KXJldHVybiBuZXcgSFY7aWYodCBpbnN0YW5jZW9mIEhWKXJldHVybiB0O3ZhciBlPSh0PXQucmdiKCkpLnIvMjU1LG49dC5nLzI1NSxpPXQuYi8yNTUscj1NYXRoLm1pbihlLG4saSksbz1NYXRoLm1heChlLG4saSksYT1OYU4scz1vLXIsbD0obytyKS8yO3JldHVybiBzPyhhPWU9PT1vPyhuLWkpL3MrNioobjxpKTpuPT09bz8oaS1lKS9zKzI6KGUtbikvcys0LHMvPWw8LjU/bytyOjItby1yLGEqPTYwKTpzPWw+MCYmbDwxPzA6YSxuZXcgSFYoYSxzLGwsdC5vcGFjaXR5KX1mdW5jdGlvbiBCVih0LGUsbixpKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/RFYodCk6bmV3IEhWKHQsZSxuLG51bGw9PWk/MTppKX1mdW5jdGlvbiBIVih0LGUsbixpKXt0aGlzLmg9K3QsdGhpcy5zPStlLHRoaXMubD0rbix0aGlzLm9wYWNpdHk9K2l9ZnVuY3Rpb24gRlYodCxlLG4pe3JldHVybiAyNTUqKHQ8NjA/ZSsobi1lKSp0LzYwOnQ8MTgwP246dDwyNDA/ZSsobi1lKSooMjQwLXQpLzYwOmUpfXBWKG1WLExWLHtkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkrIiJ9fSkscFYoUlYsT1YsZlYobVYse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/X1Y6TWF0aC5wb3coX1YsdCksbmV3IFJWKHRoaXMucip0LHRoaXMuZyp0LHRoaXMuYip0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P2dWOk1hdGgucG93KGdWLHQpLG5ldyBSVih0aGlzLnIqdCx0aGlzLmcqdCx0aGlzLmIqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gMDw9dGhpcy5yJiZ0aGlzLnI8PTI1NSYmMDw9dGhpcy5nJiZ0aGlzLmc8PTI1NSYmMDw9dGhpcy5iJiZ0aGlzLmI8PTI1NSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcGFjaXR5O3JldHVybigxPT09KHQ9aXNOYU4odCk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsdCkpKT8icmdiKCI6InJnYmEoIikrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLnIpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuZyl8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5iKXx8MCkpKygxPT09dD8iKSI6IiwgIit0KyIpIil9fSkpLHBWKEhWLEJWLGZWKG1WLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P19WOk1hdGgucG93KF9WLHQpLG5ldyBIVih0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P2dWOk1hdGgucG93KGdWLHQpLG5ldyBIVih0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PXRoaXMuaCUzNjArMzYwKih0aGlzLmg8MCksZT1pc05hTih0KXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxuPXRoaXMubCxpPW4rKG48LjU/bjoxLW4pKmUscj0yKm4taTtyZXR1cm4gbmV3IFJWKEZWKHQ+PTI0MD90LTI0MDp0KzEyMCxyLGkpLEZWKHQscixpKSxGVih0PDEyMD90KzI0MDp0LTEyMCxyLGkpLHRoaXMub3BhY2l0eSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfX0pKTt2YXIgVlY9TWF0aC5QSS8xODAsVVY9MTgwL01hdGguUEksalY9Ljk1MDQ3LEdWPTEuMDg4ODMsV1Y9NC8yOSxxVj02LzI5LFlWPTMqcVYqcVY7ZnVuY3Rpb24gWFYodCl7aWYodCBpbnN0YW5jZW9mIEtWKXJldHVybiBuZXcgS1YodC5sLHQuYSx0LmIsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgaVUpe3ZhciBlPXQuaCpWVjtyZXR1cm4gbmV3IEtWKHQubCxNYXRoLmNvcyhlKSp0LmMsTWF0aC5zaW4oZSkqdC5jLHQub3BhY2l0eSl9dCBpbnN0YW5jZW9mIFJWfHwodD1JVih0KSk7dmFyIG49dFUodC5yKSxpPXRVKHQuZykscj10VSh0LmIpLG89WlYoKC40MTI0NTY0Km4rLjM1NzU3NjEqaSsuMTgwNDM3NSpyKS9qViksYT1aVigoLjIxMjY3MjkqbisuNzE1MTUyMippKy4wNzIxNzUqcikvMSk7cmV0dXJuIG5ldyBLVigxMTYqYS0xNiw1MDAqKG8tYSksMjAwKihhLVpWKCguMDE5MzMzOSpuKy4xMTkxOTIqaSsuOTUwMzA0MSpyKS9HVikpLHQub3BhY2l0eSl9ZnVuY3Rpb24gJFYodCxlLG4saSl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP1hWKHQpOm5ldyBLVih0LGUsbixudWxsPT1pPzE6aSl9ZnVuY3Rpb24gS1YodCxlLG4saSl7dGhpcy5sPSt0LHRoaXMuYT0rZSx0aGlzLmI9K24sdGhpcy5vcGFjaXR5PStpfWZ1bmN0aW9uIFpWKHQpe3JldHVybiB0Pi4wMDg4NTY0NTE2NzkwMzU2MzE/TWF0aC5wb3codCwxLzMpOnQvWVYrV1Z9ZnVuY3Rpb24gSlYodCl7cmV0dXJuIHQ+cVY/dCp0KnQ6WVYqKHQtV1YpfWZ1bmN0aW9uIFFWKHQpe3JldHVybiAyNTUqKHQ8PS4wMDMxMzA4PzEyLjkyKnQ6MS4wNTUqTWF0aC5wb3codCwxLzIuNCktLjA1NSl9ZnVuY3Rpb24gdFUodCl7cmV0dXJuKHQvPTI1NSk8PS4wNDA0NT90LzEyLjkyOk1hdGgucG93KCh0Ky4wNTUpLzEuMDU1LDIuNCl9ZnVuY3Rpb24gZVUodCl7aWYodCBpbnN0YW5jZW9mIGlVKXJldHVybiBuZXcgaVUodC5oLHQuYyx0LmwsdC5vcGFjaXR5KTt0IGluc3RhbmNlb2YgS1Z8fCh0PVhWKHQpKTt2YXIgZT1NYXRoLmF0YW4yKHQuYix0LmEpKlVWO3JldHVybiBuZXcgaVUoZTwwP2UrMzYwOmUsTWF0aC5zcXJ0KHQuYSp0LmErdC5iKnQuYiksdC5sLHQub3BhY2l0eSl9ZnVuY3Rpb24gblUodCxlLG4saSl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP2VVKHQpOm5ldyBpVSh0LGUsbixudWxsPT1pPzE6aSl9ZnVuY3Rpb24gaVUodCxlLG4saSl7dGhpcy5oPSt0LHRoaXMuYz0rZSx0aGlzLmw9K24sdGhpcy5vcGFjaXR5PStpfXBWKEtWLCRWLGZWKG1WLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IEtWKHRoaXMubCsxOCoobnVsbD09dD8xOnQpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgS1YodGhpcy5sLTE4KihudWxsPT10PzE6dCksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD0odGhpcy5sKzE2KS8xMTYsZT1pc05hTih0aGlzLmEpP3Q6dCt0aGlzLmEvNTAwLG49aXNOYU4odGhpcy5iKT90OnQtdGhpcy5iLzIwMDtyZXR1cm4gdD0xKkpWKHQpLG5ldyBSVihRVigzLjI0MDQ1NDIqKGU9alYqSlYoZSkpLTEuNTM3MTM4NSp0LS40OTg1MzE0KihuPUdWKkpWKG4pKSksUVYoLS45NjkyNjYqZSsxLjg3NjAxMDgqdCsuMDQxNTU2Km4pLFFWKC4wNTU2NDM0KmUtLjIwNDAyNTkqdCsxLjA1NzIyNTIqbiksdGhpcy5vcGFjaXR5KX19KSkscFYoaVUsblUsZlYobVYse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgaVUodGhpcy5oLHRoaXMuYyx0aGlzLmwrMTgqKG51bGw9PXQ/MTp0KSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBpVSh0aGlzLmgsdGhpcy5jLHRoaXMubC0xOCoobnVsbD09dD8xOnQpLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiBYVih0aGlzKS5yZ2IoKX19KSk7dmFyIHJVPS0uMjkyMjcsb1U9LS45MDY0OSxhVT0xLjk3Mjk0O2Z1bmN0aW9uIHNVKHQpe2lmKHQgaW5zdGFuY2VvZiBjVSlyZXR1cm4gbmV3IGNVKHQuaCx0LnMsdC5sLHQub3BhY2l0eSk7dCBpbnN0YW5jZW9mIFJWfHwodD1JVih0KSk7dmFyIGU9dC5nLzI1NSxuPXQuYi8yNTUsaT0oLS42NTU3NjM2NjY3OTk5OTk5Km4rdC5yLzI1NSotMS43ODg0NTAzODA2LTMuNTE3Mjk4MjQzOCplKS8tNS45NjE1MTIyOTEyLHI9bi1pLG89KGFVKihlLWkpLXJVKnIpL29VLGE9TWF0aC5zcXJ0KG8qbytyKnIpLyhhVSppKigxLWkpKSxzPWE/TWF0aC5hdGFuMihvLHIpKlVWLTEyMDpOYU47cmV0dXJuIG5ldyBjVShzPDA/cyszNjA6cyxhLGksdC5vcGFjaXR5KX1mdW5jdGlvbiBsVSh0LGUsbixpKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/c1UodCk6bmV3IGNVKHQsZSxuLG51bGw9PWk/MTppKX1mdW5jdGlvbiBjVSh0LGUsbixpKXt0aGlzLmg9K3QsdGhpcy5zPStlLHRoaXMubD0rbix0aGlzLm9wYWNpdHk9K2l9cFYoY1UsbFUsZlYobVYse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/X1Y6TWF0aC5wb3coX1YsdCksbmV3IGNVKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/Z1Y6TWF0aC5wb3coZ1YsdCksbmV3IGNVKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIHQ9aXNOYU4odGhpcy5oKT8wOih0aGlzLmgrMTIwKSpWVixlPSt0aGlzLmwsbj1pc05hTih0aGlzLnMpPzA6dGhpcy5zKmUqKDEtZSksaT1NYXRoLmNvcyh0KSxyPU1hdGguc2luKHQpO3JldHVybiBuZXcgUlYoMjU1KihlK24qKC0uMTQ4NjEqaSsxLjc4Mjc3KnIpKSwyNTUqKGUrbiooclUqaStvVSpyKSksMjU1KihlK24qKGFVKmkpKSx0aGlzLm9wYWNpdHkpfX0pKTt2YXIgdVU9e3ZhbHVlOmZ1bmN0aW9uKCl7fX07ZnVuY3Rpb24gaFUoKXtmb3IodmFyIHQsZT0wLG49YXJndW1lbnRzLmxlbmd0aCxpPXt9O2U8bjsrK2Upe2lmKCEodD1hcmd1bWVudHNbZV0rIiIpfHx0IGluIGkpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrdCk7aVt0XT1bXX1yZXR1cm4gbmV3IGRVKGkpfWZ1bmN0aW9uIGRVKHQpe3RoaXMuXz10fWZ1bmN0aW9uIHBVKHQsZSl7cmV0dXJuIHQudHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcCgoZnVuY3Rpb24odCl7dmFyIG49IiIsaT10LmluZGV4T2YoIi4iKTtpZihpPj0wJiYobj10LnNsaWNlKGkrMSksdD10LnNsaWNlKDAsaSkpLHQmJiFlLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO3JldHVybnt0eXBlOnQsbmFtZTpufX0pKX1mdW5jdGlvbiBmVSh0LGUpe2Zvcih2YXIgbixpPTAscj10Lmxlbmd0aDtpPHI7KytpKWlmKChuPXRbaV0pLm5hbWU9PT1lKXJldHVybiBuLnZhbHVlfWZ1bmN0aW9uIG1VKHQsZSxuKXtmb3IodmFyIGk9MCxyPXQubGVuZ3RoO2k8cjsrK2kpaWYodFtpXS5uYW1lPT09ZSl7dFtpXT11VSx0PXQuc2xpY2UoMCxpKS5jb25jYXQodC5zbGljZShpKzEpKTticmVha31yZXR1cm4gbnVsbCE9biYmdC5wdXNoKHtuYW1lOmUsdmFsdWU6bn0pLHR9ZFUucHJvdG90eXBlPWhVLnByb3RvdHlwZT17Y29uc3RydWN0b3I6ZFUsb246ZnVuY3Rpb24odCxlKXt2YXIgbixpPXRoaXMuXyxyPXBVKHQrIiIsaSksbz0tMSxhPXIubGVuZ3RoO2lmKCEoYXJndW1lbnRzLmxlbmd0aDwyKSl7aWYobnVsbCE9ZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrOiAiK2UpO2Zvcig7KytvPGE7KWlmKG49KHQ9cltvXSkudHlwZSlpW25dPW1VKGlbbl0sdC5uYW1lLGUpO2Vsc2UgaWYobnVsbD09ZSlmb3IobiBpbiBpKWlbbl09bVUoaVtuXSx0Lm5hbWUsbnVsbCk7cmV0dXJuIHRoaXN9Zm9yKDsrK288YTspaWYoKG49KHQ9cltvXSkudHlwZSkmJihuPWZVKGlbbl0sdC5uYW1lKSkpcmV0dXJuIG59LGNvcHk6ZnVuY3Rpb24oKXt2YXIgdD17fSxlPXRoaXMuXztmb3IodmFyIG4gaW4gZSl0W25dPWVbbl0uc2xpY2UoKTtyZXR1cm4gbmV3IGRVKHQpfSxjYWxsOmZ1bmN0aW9uKHQsZSl7aWYoKG49YXJndW1lbnRzLmxlbmd0aC0yKT4wKWZvcih2YXIgbixpLHI9bmV3IEFycmF5KG4pLG89MDtvPG47KytvKXJbb109YXJndW1lbnRzW28rMl07aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtmb3Iobz0wLG49KGk9dGhpcy5fW3RdKS5sZW5ndGg7bzxuOysrbylpW29dLnZhbHVlLmFwcGx5KGUscil9LGFwcGx5OmZ1bmN0aW9uKHQsZSxuKXtpZighdGhpcy5fLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO2Zvcih2YXIgaT10aGlzLl9bdF0scj0wLG89aS5sZW5ndGg7cjxvOysrcilpW3JdLnZhbHVlLmFwcGx5KGUsbil9fTt2YXIgZ1U9e3ZhbHVlOmZ1bmN0aW9uKCl7fX07ZnVuY3Rpb24gX1UoKXtmb3IodmFyIHQsZT0wLG49YXJndW1lbnRzLmxlbmd0aCxpPXt9O2U8bjsrK2Upe2lmKCEodD1hcmd1bWVudHNbZV0rIiIpfHx0IGluIGl8fC9bXHMuXS8udGVzdCh0KSl0aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgdHlwZTogIit0KTtpW3RdPVtdfXJldHVybiBuZXcgeVUoaSl9ZnVuY3Rpb24geVUodCl7dGhpcy5fPXR9ZnVuY3Rpb24gdlUodCxlKXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLykubWFwKChmdW5jdGlvbih0KXt2YXIgbj0iIixpPXQuaW5kZXhPZigiLiIpO2lmKGk+PTAmJihuPXQuc2xpY2UoaSsxKSx0PXQuc2xpY2UoMCxpKSksdCYmIWUuaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7cmV0dXJue3R5cGU6dCxuYW1lOm59fSkpfWZ1bmN0aW9uIGJVKHQsZSl7Zm9yKHZhciBuLGk9MCxyPXQubGVuZ3RoO2k8cjsrK2kpaWYoKG49dFtpXSkubmFtZT09PWUpcmV0dXJuIG4udmFsdWV9ZnVuY3Rpb24geFUodCxlLG4pe2Zvcih2YXIgaT0wLHI9dC5sZW5ndGg7aTxyOysraSlpZih0W2ldLm5hbWU9PT1lKXt0W2ldPWdVLHQ9dC5zbGljZSgwLGkpLmNvbmNhdCh0LnNsaWNlKGkrMSkpO2JyZWFrfXJldHVybiBudWxsIT1uJiZ0LnB1c2goe25hbWU6ZSx2YWx1ZTpufSksdH15VS5wcm90b3R5cGU9X1UucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp5VSxvbjpmdW5jdGlvbih0LGUpe3ZhciBuLGk9dGhpcy5fLHI9dlUodCsiIixpKSxvPS0xLGE9ci5sZW5ndGg7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtpZihudWxsIT1lJiYiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrZSk7Zm9yKDsrK288YTspaWYobj0odD1yW29dKS50eXBlKWlbbl09eFUoaVtuXSx0Lm5hbWUsZSk7ZWxzZSBpZihudWxsPT1lKWZvcihuIGluIGkpaVtuXT14VShpW25dLHQubmFtZSxudWxsKTtyZXR1cm4gdGhpc31mb3IoOysrbzxhOylpZigobj0odD1yW29dKS50eXBlKSYmKG49YlUoaVtuXSx0Lm5hbWUpKSlyZXR1cm4gbn0sY29weTpmdW5jdGlvbigpe3ZhciB0PXt9LGU9dGhpcy5fO2Zvcih2YXIgbiBpbiBlKXRbbl09ZVtuXS5zbGljZSgpO3JldHVybiBuZXcgeVUodCl9LGNhbGw6ZnVuY3Rpb24odCxlKXtpZigobj1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciBuLGkscj1uZXcgQXJyYXkobiksbz0wO288bjsrK28pcltvXT1hcmd1bWVudHNbbysyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO2ZvcihvPTAsbj0oaT10aGlzLl9bdF0pLmxlbmd0aDtvPG47KytvKWlbb10udmFsdWUuYXBwbHkoZSxyKX0sYXBwbHk6ZnVuY3Rpb24odCxlLG4pe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7Zm9yKHZhciBpPXRoaXMuX1t0XSxyPTAsbz1pLmxlbmd0aDtyPG87KytyKWlbcl0udmFsdWUuYXBwbHkoZSxuKX19O3ZhciB3VT0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsU1U9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOndVLHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIn07ZnVuY3Rpb24gTVUodCl7dmFyIGU9dCs9IiIsbj1lLmluZGV4T2YoIjoiKTtyZXR1cm4gbj49MCYmInhtbG5zIiE9PShlPXQuc2xpY2UoMCxuKSkmJih0PXQuc2xpY2UobisxKSksU1UuaGFzT3duUHJvcGVydHkoZSk/e3NwYWNlOlNVW2VdLGxvY2FsOnR9OnR9ZnVuY3Rpb24gRVUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vd25lckRvY3VtZW50LG49dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIG49PT13VSYmZS5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09d1U/ZS5jcmVhdGVFbGVtZW50KHQpOmUuY3JlYXRlRWxlbWVudE5TKG4sdCl9fWZ1bmN0aW9uIFRVKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHQuc3BhY2UsdC5sb2NhbCl9fWZ1bmN0aW9uIENVKHQpe3ZhciBlPU1VKHQpO3JldHVybihlLmxvY2FsP1RVOkVVKShlKX1mdW5jdGlvbiBBVSgpe31mdW5jdGlvbiBrVSh0KXtyZXR1cm4gbnVsbD09dD9BVTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3IodCl9fWZ1bmN0aW9uIExVKCl7cmV0dXJuW119ZnVuY3Rpb24gUFUodCl7cmV0dXJuIG5ldyBBcnJheSh0Lmxlbmd0aCl9ZnVuY3Rpb24gTlUodCxlKXt0aGlzLm93bmVyRG9jdW1lbnQ9dC5vd25lckRvY3VtZW50LHRoaXMubmFtZXNwYWNlVVJJPXQubmFtZXNwYWNlVVJJLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wYXJlbnQ9dCx0aGlzLl9fZGF0YV9fPWV9ZnVuY3Rpb24gSVUodCxlLG4saSxyLG8pe2Zvcih2YXIgYSxzPTAsbD1lLmxlbmd0aCxjPW8ubGVuZ3RoO3M8YzsrK3MpKGE9ZVtzXSk/KGEuX19kYXRhX189b1tzXSxpW3NdPWEpOm5bc109bmV3IE5VKHQsb1tzXSk7Zm9yKDtzPGw7KytzKShhPWVbc10pJiYocltzXT1hKX1mdW5jdGlvbiBPVSh0LGUsbixpLHIsbyxhKXt2YXIgcyxsLGMsdT17fSxoPWUubGVuZ3RoLGQ9by5sZW5ndGgscD1uZXcgQXJyYXkoaCk7Zm9yKHM9MDtzPGg7KytzKShsPWVbc10pJiYocFtzXT1jPSIkIithLmNhbGwobCxsLl9fZGF0YV9fLHMsZSksYyBpbiB1P3Jbc109bDp1W2NdPWwpO2ZvcihzPTA7czxkOysrcykobD11W2M9IiQiK2EuY2FsbCh0LG9bc10scyxvKV0pPyhpW3NdPWwsbC5fX2RhdGFfXz1vW3NdLHVbY109bnVsbCk6bltzXT1uZXcgTlUodCxvW3NdKTtmb3Iocz0wO3M8aDsrK3MpKGw9ZVtzXSkmJnVbcFtzXV09PT1sJiYocltzXT1sKX1mdW5jdGlvbiBSVSh0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6dD49ZT8wOk5hTn1mdW5jdGlvbiB6VSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX19ZnVuY3Rpb24gRFUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpfX1mdW5jdGlvbiBCVSh0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKHQsZSl9fWZ1bmN0aW9uIEhVKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwsZSl9fWZ1bmN0aW9uIEZVKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09bj90aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KTp0aGlzLnNldEF0dHJpYnV0ZSh0LG4pfX1mdW5jdGlvbiBWVSh0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PW4/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsLG4pfX1mdW5jdGlvbiBVVSh0KXtyZXR1cm4gdC5vd25lckRvY3VtZW50JiZ0Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fHQuZG9jdW1lbnQmJnR8fHQuZGVmYXVsdFZpZXd9ZnVuY3Rpb24galUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KX19ZnVuY3Rpb24gR1UodCxlLG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxlLG4pfX1mdW5jdGlvbiBXVSh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGk9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09aT90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxpLG4pfX1mdW5jdGlvbiBxVSh0LGUpe3JldHVybiB0LnN0eWxlLmdldFByb3BlcnR5VmFsdWUoZSl8fFVVKHQpLmdldENvbXB1dGVkU3R5bGUodCxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKGUpfWZ1bmN0aW9uIFlVKHQpe3JldHVybiBmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW3RdfX1mdW5jdGlvbiBYVSh0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbdF09ZX19ZnVuY3Rpb24gJFUodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1uP2RlbGV0ZSB0aGlzW3RdOnRoaXNbdF09bn19ZnVuY3Rpb24gS1UodCl7cmV0dXJuIHQudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIFpVKHQpe3JldHVybiB0LmNsYXNzTGlzdHx8bmV3IEpVKHQpfWZ1bmN0aW9uIEpVKHQpe3RoaXMuX25vZGU9dCx0aGlzLl9uYW1lcz1LVSh0LmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfWZ1bmN0aW9uIFFVKHQsZSl7Zm9yKHZhciBuPVpVKHQpLGk9LTEscj1lLmxlbmd0aDsrK2k8cjspbi5hZGQoZVtpXSl9ZnVuY3Rpb24gdGoodCxlKXtmb3IodmFyIG49WlUodCksaT0tMSxyPWUubGVuZ3RoOysraTxyOyluLnJlbW92ZShlW2ldKX1mdW5jdGlvbiBlaih0KXtyZXR1cm4gZnVuY3Rpb24oKXtRVSh0aGlzLHQpfX1mdW5jdGlvbiBuaih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aih0aGlzLHQpfX1mdW5jdGlvbiBpaih0LGUpe3JldHVybiBmdW5jdGlvbigpeyhlLmFwcGx5KHRoaXMsYXJndW1lbnRzKT9RVTp0aikodGhpcyx0KX19ZnVuY3Rpb24gcmooKXt0aGlzLnRleHRDb250ZW50PSIifWZ1bmN0aW9uIG9qKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9dH19ZnVuY3Rpb24gYWoodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD1udWxsPT1lPyIiOmV9fWZ1bmN0aW9uIHNqKCl7dGhpcy5pbm5lckhUTUw9IiJ9ZnVuY3Rpb24gbGoodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9dH19ZnVuY3Rpb24gY2oodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5pbm5lckhUTUw9bnVsbD09ZT8iIjplfX1mdW5jdGlvbiB1aigpe3RoaXMubmV4dFNpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzKX1mdW5jdGlvbiBoaigpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIGRqKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gcGooKXt2YXIgdD10aGlzLnBhcmVudE5vZGU7dCYmdC5yZW1vdmVDaGlsZCh0aGlzKX1mdW5jdGlvbiBmaigpe3ZhciB0PXRoaXMuY2xvbmVOb2RlKCExKSxlPXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gZT9lLmluc2VydEJlZm9yZSh0LHRoaXMubmV4dFNpYmxpbmcpOnR9ZnVuY3Rpb24gbWooKXt2YXIgdD10aGlzLmNsb25lTm9kZSghMCksZT10aGlzLnBhcmVudE5vZGU7cmV0dXJuIGU/ZS5pbnNlcnRCZWZvcmUodCx0aGlzLm5leHRTaWJsaW5nKTp0fU5VLnByb3RvdHlwZT17Y29uc3RydWN0b3I6TlUsYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUodCx0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUodCxlKX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3IodCl9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKHQpfX0sSlUucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24odCl7dGhpcy5fbmFtZXMuaW5kZXhPZih0KTwwJiYodGhpcy5fbmFtZXMucHVzaCh0KSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxyZW1vdmU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbmFtZXMuaW5kZXhPZih0KTtlPj0wJiYodGhpcy5fbmFtZXMuc3BsaWNlKGUsMSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0sY29udGFpbnM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2YodCk+PTB9fTt2YXIgZ2o9e30sX2o9bnVsbDtmdW5jdGlvbiB5aih0LGUsbil7cmV0dXJuIHQ9dmoodCxlLG4pLGZ1bmN0aW9uKGUpe3ZhciBuPWUucmVsYXRlZFRhcmdldDtuJiYobj09PXRoaXN8fDgmbi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0aGlzKSl8fHQuY2FsbCh0aGlzLGUpfX1mdW5jdGlvbiB2aih0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKGkpe3ZhciByPV9qO19qPWk7dHJ5e3QuY2FsbCh0aGlzLHRoaXMuX19kYXRhX18sZSxuKX1maW5hbGx5e19qPXJ9fX1mdW5jdGlvbiBiaih0KXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLykubWFwKChmdW5jdGlvbih0KXt2YXIgZT0iIixuPXQuaW5kZXhPZigiLiIpO3JldHVybiBuPj0wJiYoZT10LnNsaWNlKG4rMSksdD10LnNsaWNlKDAsbikpLHt0eXBlOnQsbmFtZTplfX0pKX1mdW5jdGlvbiB4aih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9fb247aWYoZSl7Zm9yKHZhciBuLGk9MCxyPS0xLG89ZS5sZW5ndGg7aTxvOysraSluPWVbaV0sdC50eXBlJiZuLnR5cGUhPT10LnR5cGV8fG4ubmFtZSE9PXQubmFtZT9lWysrcl09bjp0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIobi50eXBlLG4ubGlzdGVuZXIsbi5jYXB0dXJlKTsrK3I/ZS5sZW5ndGg9cjpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gd2oodCxlLG4pe3ZhciBpPWdqLmhhc093blByb3BlcnR5KHQudHlwZSk/eWo6dmo7cmV0dXJuIGZ1bmN0aW9uKHIsbyxhKXt2YXIgcyxsPXRoaXMuX19vbixjPWkoZSxvLGEpO2lmKGwpZm9yKHZhciB1PTAsaD1sLmxlbmd0aDt1PGg7Kyt1KWlmKChzPWxbdV0pLnR5cGU9PT10LnR5cGUmJnMubmFtZT09PXQubmFtZSlyZXR1cm4gdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKHMudHlwZSxzLmxpc3RlbmVyLHMuY2FwdHVyZSksdGhpcy5hZGRFdmVudExpc3RlbmVyKHMudHlwZSxzLmxpc3RlbmVyPWMscy5jYXB0dXJlPW4pLHZvaWQocy52YWx1ZT1lKTt0aGlzLmFkZEV2ZW50TGlzdGVuZXIodC50eXBlLGMsbikscz17dHlwZTp0LnR5cGUsbmFtZTp0Lm5hbWUsdmFsdWU6ZSxsaXN0ZW5lcjpjLGNhcHR1cmU6bn0sbD9sLnB1c2gocyk6dGhpcy5fX29uPVtzXX19ZnVuY3Rpb24gU2oodCxlLG4saSl7dmFyIHI9X2o7dC5zb3VyY2VFdmVudD1faixfaj10O3RyeXtyZXR1cm4gZS5hcHBseShuLGkpfWZpbmFsbHl7X2o9cn19ZnVuY3Rpb24gTWoodCxlLG4pe3ZhciBpPVVVKHQpLHI9aS5DdXN0b21FdmVudDsiZnVuY3Rpb24iPT10eXBlb2Ygcj9yPW5ldyByKGUsbik6KHI9aS5kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSxuPyhyLmluaXRFdmVudChlLG4uYnViYmxlcyxuLmNhbmNlbGFibGUpLHIuZGV0YWlsPW4uZGV0YWlsKTpyLmluaXRFdmVudChlLCExLCExKSksdC5kaXNwYXRjaEV2ZW50KHIpfWZ1bmN0aW9uIEVqKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIE1qKHRoaXMsdCxlKX19ZnVuY3Rpb24gVGoodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTWoodGhpcyx0LGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19InVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudCYmKCJvbm1vdXNlZW50ZXIiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fHwoZ2o9e21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSkpO3ZhciBDaj1bbnVsbF07ZnVuY3Rpb24gQWoodCxlKXt0aGlzLl9ncm91cHM9dCx0aGlzLl9wYXJlbnRzPWV9ZnVuY3Rpb24ga2oodCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P25ldyBBaihbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodCldXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IEFqKFtbdF1dLENqKX1mdW5jdGlvbiBMaigpe2Zvcih2YXIgdCxlPV9qO3Q9ZS5zb3VyY2VFdmVudDspZT10O3JldHVybiBlfWZ1bmN0aW9uIFBqKHQsZSl7dmFyIG49dC5vd25lclNWR0VsZW1lbnR8fHQ7aWYobi5jcmVhdGVTVkdQb2ludCl7dmFyIGk9bi5jcmVhdGVTVkdQb2ludCgpO3JldHVybiBpLng9ZS5jbGllbnRYLGkueT1lLmNsaWVudFksWyhpPWkubWF0cml4VHJhbnNmb3JtKHQuZ2V0U2NyZWVuQ1RNKCkuaW52ZXJzZSgpKSkueCxpLnldfXZhciByPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW2UuY2xpZW50WC1yLmxlZnQtdC5jbGllbnRMZWZ0LGUuY2xpZW50WS1yLnRvcC10LmNsaWVudFRvcF19ZnVuY3Rpb24gTmoodCl7dmFyIGU9TGooKTtyZXR1cm4gZS5jaGFuZ2VkVG91Y2hlcyYmKGU9ZS5jaGFuZ2VkVG91Y2hlc1swXSksUGoodCxlKX1mdW5jdGlvbiBJaih0LGUsbil7YXJndW1lbnRzLmxlbmd0aDwzJiYobj1lLGU9TGooKS5jaGFuZ2VkVG91Y2hlcyk7Zm9yKHZhciBpLHI9MCxvPWU/ZS5sZW5ndGg6MDtyPG87KytyKWlmKChpPWVbcl0pLmlkZW50aWZpZXI9PT1uKXJldHVybiBQaih0LGkpO3JldHVybiBudWxsfWZ1bmN0aW9uIE9qKCl7X2ouc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gUmooKXtfai5wcmV2ZW50RGVmYXVsdCgpLF9qLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIHpqKHQpe3ZhciBlPXQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LG49a2oodCkub24oImRyYWdzdGFydC5kcmFnIixSaiwhMCk7Im9uc2VsZWN0c3RhcnQiaW4gZT9uLm9uKCJzZWxlY3RzdGFydC5kcmFnIixSaiwhMCk6KGUuX19ub3NlbGVjdD1lLnN0eWxlLk1velVzZXJTZWxlY3QsZS5zdHlsZS5Nb3pVc2VyU2VsZWN0PSJub25lIil9ZnVuY3Rpb24gRGoodCxlKXt2YXIgbj10LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxpPWtqKHQpLm9uKCJkcmFnc3RhcnQuZHJhZyIsbnVsbCk7ZSYmKGkub24oImNsaWNrLmRyYWciLFJqLCEwKSxzZXRUaW1lb3V0KChmdW5jdGlvbigpe2kub24oImNsaWNrLmRyYWciLG51bGwpfSksMCkpLCJvbnNlbGVjdHN0YXJ0ImluIG4/aS5vbigic2VsZWN0c3RhcnQuZHJhZyIsbnVsbCk6KG4uc3R5bGUuTW96VXNlclNlbGVjdD1uLl9fbm9zZWxlY3QsZGVsZXRlIG4uX19ub3NlbGVjdCl9ZnVuY3Rpb24gQmoodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIEhqKHQsZSxuLGkscixvLGEscyxsLGMpe3RoaXMudGFyZ2V0PXQsdGhpcy50eXBlPWUsdGhpcy5zdWJqZWN0PW4sdGhpcy5pZGVudGlmaWVyPWksdGhpcy5hY3RpdmU9cix0aGlzLng9byx0aGlzLnk9YSx0aGlzLmR4PXMsdGhpcy5keT1sLHRoaXMuXz1jfWZ1bmN0aW9uIEZqKCl7cmV0dXJuIV9qLmJ1dHRvbn1mdW5jdGlvbiBWaigpe3JldHVybiB0aGlzLnBhcmVudE5vZGV9ZnVuY3Rpb24gVWoodCl7cmV0dXJuIG51bGw9PXQ/e3g6X2oueCx5Ol9qLnl9OnR9ZnVuY3Rpb24gamooKXtyZXR1cm4ib250b3VjaHN0YXJ0ImluIHRoaXN9QWoucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpBaixzZWxlY3Q6ZnVuY3Rpb24gR2oodCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PWtVKHQpKTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49ZS5sZW5ndGgsaT1uZXcgQXJyYXkobikscj0wO3I8bjsrK3IpZm9yKHZhciBvLGEscz1lW3JdLGw9cy5sZW5ndGgsYz1pW3JdPW5ldyBBcnJheShsKSx1PTA7dTxsOysrdSkobz1zW3VdKSYmKGE9dC5jYWxsKG8sby5fX2RhdGFfXyx1LHMpKSYmKCJfX2RhdGFfXyJpbiBvJiYoYS5fX2RhdGFfXz1vLl9fZGF0YV9fKSxjW3VdPWEpO3JldHVybiBuZXcgQWooaSx0aGlzLl9wYXJlbnRzKX0sc2VsZWN0QWxsOmZ1bmN0aW9uIFdqKHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD0oZnVuY3Rpb24gZSh0KXtyZXR1cm4gbnVsbD09dD9MVTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwodCl9fSkodCkpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxyPVtdLG89W10sYT0wO2E8aTsrK2EpZm9yKHZhciBzLGw9blthXSxjPWwubGVuZ3RoLHU9MDt1PGM7Kyt1KShzPWxbdV0pJiYoci5wdXNoKHQuY2FsbChzLHMuX19kYXRhX18sdSxsKSksby5wdXNoKHMpKTtyZXR1cm4gbmV3IEFqKHIsbyl9LGZpbHRlcjpmdW5jdGlvbiBxaih0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9KGZ1bmN0aW9uIGUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2hlcyh0KX19KSh0KSk7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLHI9bmV3IEFycmF5KGkpLG89MDtvPGk7KytvKWZvcih2YXIgYSxzPW5bb10sbD1zLmxlbmd0aCxjPXJbb109W10sdT0wO3U8bDsrK3UpKGE9c1t1XSkmJnQuY2FsbChhLGEuX19kYXRhX18sdSxzKSYmYy5wdXNoKGEpO3JldHVybiBuZXcgQWoocix0aGlzLl9wYXJlbnRzKX0sZGF0YTpmdW5jdGlvbiBZaih0LGUpe2lmKCF0KXJldHVybiBmPW5ldyBBcnJheSh0aGlzLnNpemUoKSksdT0tMSx0aGlzLmVhY2goKGZ1bmN0aW9uKHQpe2ZbKyt1XT10fSkpLGY7dmFyIG49ZT9PVTpJVSxpPXRoaXMuX3BhcmVudHMscj10aGlzLl9ncm91cHM7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PShmdW5jdGlvbiBvKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0pKHQpKTtmb3IodmFyIGE9ci5sZW5ndGgscz1uZXcgQXJyYXkoYSksbD1uZXcgQXJyYXkoYSksYz1uZXcgQXJyYXkoYSksdT0wO3U8YTsrK3Upe3ZhciBoPWlbdV0sZD1yW3VdLHA9ZC5sZW5ndGgsZj10LmNhbGwoaCxoJiZoLl9fZGF0YV9fLHUsaSksbT1mLmxlbmd0aCxnPWxbdV09bmV3IEFycmF5KG0pLF89c1t1XT1uZXcgQXJyYXkobSk7bihoLGQsZyxfLGNbdV09bmV3IEFycmF5KHApLGYsZSk7Zm9yKHZhciB5LHYsYj0wLHg9MDtiPG07KytiKWlmKHk9Z1tiXSl7Zm9yKGI+PXgmJih4PWIrMSk7ISh2PV9beF0pJiYrK3g8bTspO3kuX25leHQ9dnx8bnVsbH19cmV0dXJuKHM9bmV3IEFqKHMsaSkpLl9lbnRlcj1sLHMuX2V4aXQ9YyxzfSxlbnRlcjpmdW5jdGlvbiBYaigpe3JldHVybiBuZXcgQWoodGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAoUFUpLHRoaXMuX3BhcmVudHMpfSxleGl0OmZ1bmN0aW9uICRqKCl7cmV0dXJuIG5ldyBBaih0aGlzLl9leGl0fHx0aGlzLl9ncm91cHMubWFwKFBVKSx0aGlzLl9wYXJlbnRzKX0sam9pbjpmdW5jdGlvbiBLaih0LGUsbil7dmFyIGk9dGhpcy5lbnRlcigpLHI9dGhpcyxvPXRoaXMuZXhpdCgpO3JldHVybiBpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3QoaSk6aS5hcHBlbmQodCsiIiksbnVsbCE9ZSYmKHI9ZShyKSksbnVsbD09bj9vLnJlbW92ZSgpOm4obyksaSYmcj9pLm1lcmdlKHIpLm9yZGVyKCk6cn0sbWVyZ2U6ZnVuY3Rpb24gWmoodCl7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPXQuX2dyb3VwcyxpPWUubGVuZ3RoLHI9TWF0aC5taW4oaSxuLmxlbmd0aCksbz1uZXcgQXJyYXkoaSksYT0wO2E8cjsrK2EpZm9yKHZhciBzLGw9ZVthXSxjPW5bYV0sdT1sLmxlbmd0aCxoPW9bYV09bmV3IEFycmF5KHUpLGQ9MDtkPHU7KytkKShzPWxbZF18fGNbZF0pJiYoaFtkXT1zKTtmb3IoO2E8aTsrK2Epb1thXT1lW2FdO3JldHVybiBuZXcgQWoobyx0aGlzLl9wYXJlbnRzKX0sb3JkZXI6ZnVuY3Rpb24gSmooKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9LTEsbj10Lmxlbmd0aDsrK2U8bjspZm9yKHZhciBpLHI9dFtlXSxvPXIubGVuZ3RoLTEsYT1yW29dOy0tbz49MDspKGk9cltvXSkmJihhJiY0XmkuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYSkmJmEucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoaSxhKSxhPWkpO3JldHVybiB0aGlzfSxzb3J0OmZ1bmN0aW9uIFFqKHQpe2Z1bmN0aW9uIGUoZSxuKXtyZXR1cm4gZSYmbj90KGUuX19kYXRhX18sbi5fX2RhdGFfXyk6IWUtIW59dHx8KHQ9UlUpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxyPW5ldyBBcnJheShpKSxvPTA7bzxpOysrbyl7Zm9yKHZhciBhLHM9bltvXSxsPXMubGVuZ3RoLGM9cltvXT1uZXcgQXJyYXkobCksdT0wO3U8bDsrK3UpKGE9c1t1XSkmJihjW3VdPWEpO2Muc29ydChlKX1yZXR1cm4gbmV3IEFqKHIsdGhpcy5fcGFyZW50cykub3JkZXIoKX0sY2FsbDpmdW5jdGlvbiB0Rygpe3ZhciB0PWFyZ3VtZW50c1swXTtyZXR1cm4gYXJndW1lbnRzWzBdPXRoaXMsdC5hcHBseShudWxsLGFyZ3VtZW50cyksdGhpc30sbm9kZXM6ZnVuY3Rpb24gZUcoKXt2YXIgdD1uZXcgQXJyYXkodGhpcy5zaXplKCkpLGU9LTE7cmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oKXt0WysrZV09dGhpc30pKSx0fSxub2RlOmZ1bmN0aW9uIG5HKCl7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPTAsbj10Lmxlbmd0aDtlPG47KytlKWZvcih2YXIgaT10W2VdLHI9MCxvPWkubGVuZ3RoO3I8bzsrK3Ipe3ZhciBhPWlbcl07aWYoYSlyZXR1cm4gYX1yZXR1cm4gbnVsbH0sc2l6ZTpmdW5jdGlvbiBpRygpe3ZhciB0PTA7cmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oKXsrK3R9KSksdH0sZW1wdHk6ZnVuY3Rpb24gckcoKXtyZXR1cm4hdGhpcy5ub2RlKCl9LGVhY2g6ZnVuY3Rpb24gb0codCl7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPTAsaT1lLmxlbmd0aDtuPGk7KytuKWZvcih2YXIgcixvPWVbbl0sYT0wLHM9by5sZW5ndGg7YTxzOysrYSkocj1vW2FdKSYmdC5jYWxsKHIsci5fX2RhdGFfXyxhLG8pO3JldHVybiB0aGlzfSxhdHRyOmZ1bmN0aW9uIGFHKHQsZSl7dmFyIG49TVUodCk7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgaT10aGlzLm5vZGUoKTtyZXR1cm4gbi5sb2NhbD9pLmdldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCk6aS5nZXRBdHRyaWJ1dGUobil9cmV0dXJuIHRoaXMuZWFjaCgobnVsbD09ZT9uLmxvY2FsP0RVOnpVOiJmdW5jdGlvbiI9PXR5cGVvZiBlP24ubG9jYWw/VlU6RlU6bi5sb2NhbD9IVTpCVSkobixlKSl9LHN0eWxlOmZ1bmN0aW9uIHNHKHQsZSxuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgobnVsbD09ZT9qVToiZnVuY3Rpb24iPT10eXBlb2YgZT9XVTpHVSkodCxlLG51bGw9PW4/IiI6bikpOnFVKHRoaXMubm9kZSgpLHQpfSxwcm9wZXJ0eTpmdW5jdGlvbiBsRyh0LGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChudWxsPT1lP1lVOiJmdW5jdGlvbiI9PXR5cGVvZiBlPyRVOlhVKSh0LGUpKTp0aGlzLm5vZGUoKVt0XX0sY2xhc3NlZDpmdW5jdGlvbiBjRyh0LGUpe3ZhciBuPUtVKHQrIiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBpPVpVKHRoaXMubm9kZSgpKSxyPS0xLG89bi5sZW5ndGg7KytyPG87KWlmKCFpLmNvbnRhaW5zKG5bcl0pKXJldHVybiExO3JldHVybiEwfXJldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBlP2lqOmU/ZWo6bmopKG4sZSkpfSx0ZXh0OmZ1bmN0aW9uIHVHKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChudWxsPT10P3JqOigiZnVuY3Rpb24iPT10eXBlb2YgdD9hajpvaikodCkpOnRoaXMubm9kZSgpLnRleHRDb250ZW50fSxodG1sOmZ1bmN0aW9uIGhHKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChudWxsPT10P3NqOigiZnVuY3Rpb24iPT10eXBlb2YgdD9jajpsaikodCkpOnRoaXMubm9kZSgpLmlubmVySFRNTH0scmFpc2U6ZnVuY3Rpb24gZEcoKXtyZXR1cm4gdGhpcy5lYWNoKHVqKX0sbG93ZXI6ZnVuY3Rpb24gcEcoKXtyZXR1cm4gdGhpcy5lYWNoKGhqKX0sYXBwZW5kOmZ1bmN0aW9uIGZHKHQpe3ZhciBlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6Q1UodCk7cmV0dXJuIHRoaXMuc2VsZWN0KChmdW5jdGlvbigpe3JldHVybiB0aGlzLmFwcGVuZENoaWxkKGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0pKX0saW5zZXJ0OmZ1bmN0aW9uIG1HKHQsZSl7dmFyIG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpDVSh0KSxpPW51bGw9PWU/ZGo6ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTprVShlKTtyZXR1cm4gdGhpcy5zZWxlY3QoKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKG4uYXBwbHkodGhpcyxhcmd1bWVudHMpLGkuYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxsKX0pKX0scmVtb3ZlOmZ1bmN0aW9uIGdHKCl7cmV0dXJuIHRoaXMuZWFjaChwail9LGNsb25lOmZ1bmN0aW9uIF9HKHQpe3JldHVybiB0aGlzLnNlbGVjdCh0P21qOmZqKX0sZGF0dW06ZnVuY3Rpb24geUcodCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iLHQpOnRoaXMubm9kZSgpLl9fZGF0YV9ffSxvbjpmdW5jdGlvbiB2Ryh0LGUsbil7dmFyIGkscixvPWJqKHQrIiIpLGE9by5sZW5ndGg7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtmb3Iocz1lP3dqOnhqLG51bGw9PW4mJihuPSExKSxpPTA7aTxhOysraSl0aGlzLmVhY2gocyhvW2ldLGUsbikpO3JldHVybiB0aGlzfXZhciBzPXRoaXMubm9kZSgpLl9fb247aWYocylmb3IodmFyIGwsYz0wLHU9cy5sZW5ndGg7Yzx1OysrYylmb3IoaT0wLGw9c1tjXTtpPGE7KytpKWlmKChyPW9baV0pLnR5cGU9PT1sLnR5cGUmJnIubmFtZT09PWwubmFtZSlyZXR1cm4gbC52YWx1ZX0sZGlzcGF0Y2g6ZnVuY3Rpb24gYkcodCxlKXtyZXR1cm4gdGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgZT9UajpFaikodCxlKSl9fSxIai5wcm90b3R5cGUub249ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl8ub24uYXBwbHkodGhpcy5fLGFyZ3VtZW50cyk7cmV0dXJuIHQ9PT10aGlzLl8/dGhpczp0fTt2YXIgeEc9e30sd0c9e307ZnVuY3Rpb24gU0codCl7cmV0dXJuIG5ldyBGdW5jdGlvbigiZCIsInJldHVybiB7Iit0Lm1hcCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodCkrIjogZFsiK2UrIl0ifSkpLmpvaW4oIiwiKSsifSIpfWZ1bmN0aW9uIE1HKHQpe3ZhciBlPW5ldyBSZWdFeHAoJ1siJyt0KyJcblxyXSIpLG49dC5jaGFyQ29kZUF0KDApO2Z1bmN0aW9uIGkodCxlKXt2YXIgaSxyPVtdLG89dC5sZW5ndGgsYT0wLHM9MCxsPW88PTAsYz0hMTtmdW5jdGlvbiB1KCl7aWYobClyZXR1cm4gd0c7aWYoYylyZXR1cm4gYz0hMSx4Rzt2YXIgZSxpLHI9YTtpZigzND09PXQuY2hhckNvZGVBdChyKSl7Zm9yKDthKys8byYmMzQhPT10LmNoYXJDb2RlQXQoYSl8fDM0PT09dC5jaGFyQ29kZUF0KCsrYSk7KTtyZXR1cm4oZT1hKT49bz9sPSEwOjEwPT09KGk9dC5jaGFyQ29kZUF0KGErKykpP2M9ITA6MTM9PT1pJiYoYz0hMCwxMD09PXQuY2hhckNvZGVBdChhKSYmKythKSx0LnNsaWNlKHIrMSxlLTEpLnJlcGxhY2UoLyIiL2csJyInKX1mb3IoO2E8bzspe2lmKDEwPT09KGk9dC5jaGFyQ29kZUF0KGU9YSsrKSkpYz0hMDtlbHNlIGlmKDEzPT09aSljPSEwLDEwPT09dC5jaGFyQ29kZUF0KGEpJiYrK2E7ZWxzZSBpZihpIT09biljb250aW51ZTtyZXR1cm4gdC5zbGljZShyLGUpfXJldHVybiBsPSEwLHQuc2xpY2UocixvKX1mb3IoMTA9PT10LmNoYXJDb2RlQXQoby0xKSYmLS1vLDEzPT09dC5jaGFyQ29kZUF0KG8tMSkmJi0tbzsoaT11KCkpIT09d0c7KXtmb3IodmFyIGg9W107aSE9PXhHJiZpIT09d0c7KWgucHVzaChpKSxpPXUoKTtlJiZudWxsPT0oaD1lKGgscysrKSl8fHIucHVzaChoKX1yZXR1cm4gcn1mdW5jdGlvbiByKGUpe3JldHVybiBlLm1hcChvKS5qb2luKHQpfWZ1bmN0aW9uIG8odCl7cmV0dXJuIG51bGw9PXQ/IiI6ZS50ZXN0KHQrPSIiKT8nIicrdC5yZXBsYWNlKC8iL2csJyIiJykrJyInOnR9cmV0dXJue3BhcnNlOmZ1bmN0aW9uIGEodCxlKXt2YXIgbixyLG89aSh0LChmdW5jdGlvbih0LGkpe2lmKG4pcmV0dXJuIG4odCxpLTEpO3I9dCxuPWU/KGZ1bmN0aW9uIG8odCxlKXt2YXIgbj1TRyh0KTtyZXR1cm4gZnVuY3Rpb24oaSxyKXtyZXR1cm4gZShuKGkpLHIsdCl9fSkodCxlKTpTRyh0KX0pKTtyZXR1cm4gby5jb2x1bW5zPXJ8fFtdLG99LHBhcnNlUm93czppLGZvcm1hdDpmdW5jdGlvbiBzKGUsbil7cmV0dXJuIG51bGw9PW4mJihuPShmdW5jdGlvbiBpKHQpe3ZhciBlPU9iamVjdC5jcmVhdGUobnVsbCksbj1bXTtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbih0KXtmb3IodmFyIGkgaW4gdClpIGluIGV8fG4ucHVzaChlW2ldPWkpfSkpLG59KShlKSksW24ubWFwKG8pLmpvaW4odCldLmNvbmNhdChlLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIG4ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gbyhlW3RdKX0pKS5qb2luKHQpfSkpKS5qb2luKCJcbiIpfSxmb3JtYXRSb3dzOmZ1bmN0aW9uIGwodCl7cmV0dXJuIHQubWFwKHIpLmpvaW4oIlxuIil9fX12YXIgRUc9TUcoIiwiKSxURz1FRy5wYXJzZSxDRz1FRy5wYXJzZVJvd3MsQUc9RUcuZm9ybWF0LGtHPUVHLmZvcm1hdFJvd3MsTEc9TUcoIlx0IiksUEc9TEcucGFyc2UsTkc9TEcucGFyc2VSb3dzLElHPUxHLmZvcm1hdCxPRz1MRy5mb3JtYXRSb3dzO2Z1bmN0aW9uIFJHKHQpe3JldHVybigodCo9Mik8PTE/dCp0Oi0tdCooMi10KSsxKS8yfWZ1bmN0aW9uIHpHKHQpe3JldHVybigodCo9Mik8PTE/dCp0KnQ6KHQtPTIpKnQqdCsyKS8yfXZhciBERz0oZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBNYXRoLnBvdyh0LGUpfXJldHVybiBlPStlLG4uZXhwb25lbnQ9dCxufSkoMyksQkc9KGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gMS1NYXRoLnBvdygxLXQsZSl9cmV0dXJuIGU9K2Usbi5leHBvbmVudD10LG59KSgzKSxIRz0oZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybigodCo9Mik8PTE/TWF0aC5wb3codCxlKToyLU1hdGgucG93KDItdCxlKSkvMn1yZXR1cm4gZT0rZSxuLmV4cG9uZW50PXQsbn0pKDMpLEZHPU1hdGguUEksVkc9RkcvMjtmdW5jdGlvbiBVRyh0KXtyZXR1cm4oMS1NYXRoLmNvcyhGRyp0KSkvMn1mdW5jdGlvbiBqRyh0KXtyZXR1cm4oKHQqPTIpPD0xP01hdGgucG93KDIsMTAqdC0xMCk6Mi1NYXRoLnBvdygyLDEwLTEwKnQpKS8yfWZ1bmN0aW9uIEdHKHQpe3JldHVybigodCo9Mik8PTE/MS1NYXRoLnNxcnQoMS10KnQpOk1hdGguc3FydCgxLSh0LT0yKSp0KSsxKS8yfXZhciBXRz03LjU2MjU7ZnVuY3Rpb24gcUcodCl7cmV0dXJuKHQ9K3QpPC4zNjM2MzYzNjM2MzYzNjM2NT9XRyp0KnQ6dDwuNzI3MjcyNzI3MjcyNzI3Mz9XRyoodC09LjU0NTQ1NDU0NTQ1NDU0NTQpKnQrLjc1OnQ8LjkwOTA5MDkwOTA5MDkwOTE/V0cqKHQtPS44MTgxODE4MTgxODE4MTgyKSp0Ky45Mzc1OldHKih0LT0uOTU0NTQ1NDU0NTQ1NDU0NikqdCsuOTg0Mzc1fXZhciBZRz0xLjcwMTU4LFhHPShmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIHQqdCooKGUrMSkqdC1lKX1yZXR1cm4gZT0rZSxuLm92ZXJzaG9vdD10LG59KShZRyksJEc9KGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4tLXQqdCooKGUrMSkqdCtlKSsxfXJldHVybiBlPStlLG4ub3ZlcnNob290PXQsbn0pKFlHKSxLRz0oZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybigodCo9Mik8MT90KnQqKChlKzEpKnQtZSk6KHQtPTIpKnQqKChlKzEpKnQrZSkrMikvMn1yZXR1cm4gZT0rZSxuLm92ZXJzaG9vdD10LG59KShZRyksWkc9MipNYXRoLlBJLEpHPShmdW5jdGlvbiB0KGUsbil7dmFyIGk9TWF0aC5hc2luKDEvKGU9TWF0aC5tYXgoMSxlKSkpKihuLz1aRyk7ZnVuY3Rpb24gcih0KXtyZXR1cm4gZSpNYXRoLnBvdygyLDEwKi0tdCkqTWF0aC5zaW4oKGktdCkvbil9cmV0dXJuIHIuYW1wbGl0dWRlPWZ1bmN0aW9uKGUpe3JldHVybiB0KGUsbipaRyl9LHIucGVyaW9kPWZ1bmN0aW9uKG4pe3JldHVybiB0KGUsbil9LHJ9KSgxLC4zKSxRRz0oZnVuY3Rpb24gdChlLG4pe3ZhciBpPU1hdGguYXNpbigxLyhlPU1hdGgubWF4KDEsZSkpKSoobi89WkcpO2Z1bmN0aW9uIHIodCl7cmV0dXJuIDEtZSpNYXRoLnBvdygyLC0xMCoodD0rdCkpKk1hdGguc2luKCh0K2kpL24pfXJldHVybiByLmFtcGxpdHVkZT1mdW5jdGlvbihlKXtyZXR1cm4gdChlLG4qWkcpfSxyLnBlcmlvZD1mdW5jdGlvbihuKXtyZXR1cm4gdChlLG4pfSxyfSkoMSwuMyksdFc9KGZ1bmN0aW9uIHQoZSxuKXt2YXIgaT1NYXRoLmFzaW4oMS8oZT1NYXRoLm1heCgxLGUpKSkqKG4vPVpHKTtmdW5jdGlvbiByKHQpe3JldHVybigodD0yKnQtMSk8MD9lKk1hdGgucG93KDIsMTAqdCkqTWF0aC5zaW4oKGktdCkvbik6Mi1lKk1hdGgucG93KDIsLTEwKnQpKk1hdGguc2luKChpK3QpL24pKS8yfXJldHVybiByLmFtcGxpdHVkZT1mdW5jdGlvbihlKXtyZXR1cm4gdChlLG4qWkcpfSxyLnBlcmlvZD1mdW5jdGlvbihuKXtyZXR1cm4gdChlLG4pfSxyfSkoMSwuMyk7ZnVuY3Rpb24gZVcodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIG5XKCl7cmV0dXJuIDFlLTYqKE1hdGgucmFuZG9tKCktLjUpfWZ1bmN0aW9uIGlXKHQsZSxuLGkpe2lmKGlzTmFOKGUpfHxpc05hTihuKSlyZXR1cm4gdDt2YXIgcixvLGEscyxsLGMsdSxoLGQscD10Ll9yb290LGY9e2RhdGE6aX0sbT10Ll94MCxnPXQuX3kwLF89dC5feDEseT10Ll95MTtpZighcClyZXR1cm4gdC5fcm9vdD1mLHQ7Zm9yKDtwLmxlbmd0aDspaWYoKGM9ZT49KG89KG0rXykvMikpP209bzpfPW8sKHU9bj49KGE9KGcreSkvMikpP2c9YTp5PWEscj1wLCEocD1wW2g9dTw8MXxjXSkpcmV0dXJuIHJbaF09Zix0O2lmKHM9K3QuX3guY2FsbChudWxsLHAuZGF0YSksbD0rdC5feS5jYWxsKG51bGwscC5kYXRhKSxlPT09cyYmbj09PWwpcmV0dXJuIGYubmV4dD1wLHI/cltoXT1mOnQuX3Jvb3Q9Zix0O2Rve3I9cj9yW2hdPW5ldyBBcnJheSg0KTp0Ll9yb290PW5ldyBBcnJheSg0KSwoYz1lPj0obz0obStfKS8yKSk/bT1vOl89bywodT1uPj0oYT0oZyt5KS8yKSk/Zz1hOnk9YX13aGlsZSgoaD11PDwxfGMpPT0oZD0obD49YSk8PDF8cz49bykpO3JldHVybiByW2RdPXAscltoXT1mLHR9ZnVuY3Rpb24gclcodCxlLG4saSxyKXt0aGlzLm5vZGU9dCx0aGlzLngwPWUsdGhpcy55MD1uLHRoaXMueDE9aSx0aGlzLnkxPXJ9ZnVuY3Rpb24gb1codCl7cmV0dXJuIHRbMF19ZnVuY3Rpb24gYVcodCl7cmV0dXJuIHRbMV19ZnVuY3Rpb24gc1codCxlLG4pe3ZhciBpPW5ldyBsVyhudWxsPT1lP29XOmUsbnVsbD09bj9hVzpuLE5hTixOYU4sTmFOLE5hTik7cmV0dXJuIG51bGw9PXQ/aTppLmFkZEFsbCh0KX1mdW5jdGlvbiBsVyh0LGUsbixpLHIsbyl7dGhpcy5feD10LHRoaXMuX3k9ZSx0aGlzLl94MD1uLHRoaXMuX3kwPWksdGhpcy5feDE9cix0aGlzLl95MT1vLHRoaXMuX3Jvb3Q9dm9pZCAwfWZ1bmN0aW9uIGNXKHQpe2Zvcih2YXIgZT17ZGF0YTp0LmRhdGF9LG49ZTt0PXQubmV4dDspbj1uLm5leHQ9e2RhdGE6dC5kYXRhfTtyZXR1cm4gZX12YXIgdVc9c1cucHJvdG90eXBlPWxXLnByb3RvdHlwZTtmdW5jdGlvbiBoVyh0KXtyZXR1cm4gdC54K3Qudnh9ZnVuY3Rpb24gZFcodCl7cmV0dXJuIHQueSt0LnZ5fXVXLmNvcHk9ZnVuY3Rpb24oKXt2YXIgdCxlLG49bmV3IGxXKHRoaXMuX3gsdGhpcy5feSx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSksaT10aGlzLl9yb290O2lmKCFpKXJldHVybiBuO2lmKCFpLmxlbmd0aClyZXR1cm4gbi5fcm9vdD1jVyhpKSxuO2Zvcih0PVt7c291cmNlOmksdGFyZ2V0Om4uX3Jvb3Q9bmV3IEFycmF5KDQpfV07aT10LnBvcCgpOylmb3IodmFyIHI9MDtyPDQ7KytyKShlPWkuc291cmNlW3JdKSYmKGUubGVuZ3RoP3QucHVzaCh7c291cmNlOmUsdGFyZ2V0OmkudGFyZ2V0W3JdPW5ldyBBcnJheSg0KX0pOmkudGFyZ2V0W3JdPWNXKGUpKTtyZXR1cm4gbn0sdVcuYWRkPWZ1bmN0aW9uIHBXKHQpe3ZhciBlPSt0aGlzLl94LmNhbGwobnVsbCx0KSxuPSt0aGlzLl95LmNhbGwobnVsbCx0KTtyZXR1cm4gaVcodGhpcy5jb3ZlcihlLG4pLGUsbix0KX0sdVcuYWRkQWxsPWZ1bmN0aW9uIGZXKHQpe3ZhciBlLG4saSxyLG89dC5sZW5ndGgsYT1uZXcgQXJyYXkobykscz1uZXcgQXJyYXkobyksbD0xLzAsYz0xLzAsdT0tMS8wLGg9LTEvMDtmb3Iobj0wO248bzsrK24paXNOYU4oaT0rdGhpcy5feC5jYWxsKG51bGwsZT10W25dKSl8fGlzTmFOKHI9K3RoaXMuX3kuY2FsbChudWxsLGUpKXx8KGFbbl09aSxzW25dPXIsaTxsJiYobD1pKSxpPnUmJih1PWkpLHI8YyYmKGM9cikscj5oJiYoaD1yKSk7aWYobD51fHxjPmgpcmV0dXJuIHRoaXM7Zm9yKHRoaXMuY292ZXIobCxjKS5jb3Zlcih1LGgpLG49MDtuPG87KytuKWlXKHRoaXMsYVtuXSxzW25dLHRbbl0pO3JldHVybiB0aGlzfSx1Vy5jb3Zlcj1mdW5jdGlvbiBtVyh0LGUpe2lmKGlzTmFOKHQ9K3QpfHxpc05hTihlPStlKSlyZXR1cm4gdGhpczt2YXIgbj10aGlzLl94MCxpPXRoaXMuX3kwLHI9dGhpcy5feDEsbz10aGlzLl95MTtpZihpc05hTihuKSlyPShuPU1hdGguZmxvb3IodCkpKzEsbz0oaT1NYXRoLmZsb29yKGUpKSsxO2Vsc2V7Zm9yKHZhciBhLHMsbD1yLW4sYz10aGlzLl9yb290O24+dHx8dD49cnx8aT5lfHxlPj1vOylzd2l0Y2gocz0oZTxpKTw8MXx0PG4sKGE9bmV3IEFycmF5KDQpKVtzXT1jLGM9YSxsKj0yLHMpe2Nhc2UgMDpyPW4rbCxvPWkrbDticmVhaztjYXNlIDE6bj1yLWwsbz1pK2w7YnJlYWs7Y2FzZSAyOnI9bitsLGk9by1sO2JyZWFrO2Nhc2UgMzpuPXItbCxpPW8tbH10aGlzLl9yb290JiZ0aGlzLl9yb290Lmxlbmd0aCYmKHRoaXMuX3Jvb3Q9Yyl9cmV0dXJuIHRoaXMuX3gwPW4sdGhpcy5feTA9aSx0aGlzLl94MT1yLHRoaXMuX3kxPW8sdGhpc30sdVcuZGF0YT1mdW5jdGlvbiBnVygpe3ZhciB0PVtdO3JldHVybiB0aGlzLnZpc2l0KChmdW5jdGlvbihlKXtpZighZS5sZW5ndGgpZG97dC5wdXNoKGUuZGF0YSl9d2hpbGUoZT1lLm5leHQpfSkpLHR9LHVXLmV4dGVudD1mdW5jdGlvbiBfVyh0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmNvdmVyKCt0WzBdWzBdLCt0WzBdWzFdKS5jb3ZlcigrdFsxXVswXSwrdFsxXVsxXSk6aXNOYU4odGhpcy5feDApP3ZvaWQgMDpbW3RoaXMuX3gwLHRoaXMuX3kwXSxbdGhpcy5feDEsdGhpcy5feTFdXX0sdVcuZmluZD1mdW5jdGlvbiB5Vyh0LGUsbil7dmFyIGkscixvLGEscyxsLGMsdT10aGlzLl94MCxoPXRoaXMuX3kwLGQ9dGhpcy5feDEscD10aGlzLl95MSxmPVtdLG09dGhpcy5fcm9vdDtmb3IobSYmZi5wdXNoKG5ldyByVyhtLHUsaCxkLHApKSxudWxsPT1uP249MS8wOih1PXQtbixoPWUtbixkPXQrbixwPWUrbixuKj1uKTtsPWYucG9wKCk7KWlmKCEoIShtPWwubm9kZSl8fChyPWwueDApPmR8fChvPWwueTApPnB8fChhPWwueDEpPHV8fChzPWwueTEpPGgpKWlmKG0ubGVuZ3RoKXt2YXIgZz0ocithKS8yLF89KG8rcykvMjtmLnB1c2gobmV3IHJXKG1bM10sZyxfLGEscyksbmV3IHJXKG1bMl0scixfLGcscyksbmV3IHJXKG1bMV0sZyxvLGEsXyksbmV3IHJXKG1bMF0scixvLGcsXykpLChjPShlPj1fKTw8MXx0Pj1nKSYmKGw9ZltmLmxlbmd0aC0xXSxmW2YubGVuZ3RoLTFdPWZbZi5sZW5ndGgtMS1jXSxmW2YubGVuZ3RoLTEtY109bCl9ZWxzZXt2YXIgeT10LSt0aGlzLl94LmNhbGwobnVsbCxtLmRhdGEpLHY9ZS0rdGhpcy5feS5jYWxsKG51bGwsbS5kYXRhKSxiPXkqeSt2KnY7aWYoYjxuKXt2YXIgeD1NYXRoLnNxcnQobj1iKTt1PXQteCxoPWUteCxkPXQreCxwPWUreCxpPW0uZGF0YX19cmV0dXJuIGl9LHVXLnJlbW92ZT1mdW5jdGlvbiB2Vyh0KXtpZihpc05hTihvPSt0aGlzLl94LmNhbGwobnVsbCx0KSl8fGlzTmFOKGE9K3RoaXMuX3kuY2FsbChudWxsLHQpKSlyZXR1cm4gdGhpczt2YXIgZSxuLGkscixvLGEscyxsLGMsdSxoLGQscD10aGlzLl9yb290LGY9dGhpcy5feDAsbT10aGlzLl95MCxnPXRoaXMuX3gxLF89dGhpcy5feTE7aWYoIXApcmV0dXJuIHRoaXM7aWYocC5sZW5ndGgpZm9yKDs7KXtpZigoYz1vPj0ocz0oZitnKS8yKSk/Zj1zOmc9cywodT1hPj0obD0obStfKS8yKSk/bT1sOl89bCxlPXAsIShwPXBbaD11PDwxfGNdKSlyZXR1cm4gdGhpcztpZighcC5sZW5ndGgpYnJlYWs7KGVbaCsxJjNdfHxlW2grMiYzXXx8ZVtoKzMmM10pJiYobj1lLGQ9aCl9Zm9yKDtwLmRhdGEhPT10OylpZihpPXAsIShwPXAubmV4dCkpcmV0dXJuIHRoaXM7cmV0dXJuKHI9cC5uZXh0KSYmZGVsZXRlIHAubmV4dCxpPyhyP2kubmV4dD1yOmRlbGV0ZSBpLm5leHQsdGhpcyk6ZT8ocj9lW2hdPXI6ZGVsZXRlIGVbaF0sKHA9ZVswXXx8ZVsxXXx8ZVsyXXx8ZVszXSkmJnA9PT0oZVszXXx8ZVsyXXx8ZVsxXXx8ZVswXSkmJiFwLmxlbmd0aCYmKG4/bltkXT1wOnRoaXMuX3Jvb3Q9cCksdGhpcyk6KHRoaXMuX3Jvb3Q9cix0aGlzKX0sdVcucmVtb3ZlQWxsPWZ1bmN0aW9uIGJXKHQpe2Zvcih2YXIgZT0wLG49dC5sZW5ndGg7ZTxuOysrZSl0aGlzLnJlbW92ZSh0W2VdKTtyZXR1cm4gdGhpc30sdVcucm9vdD1mdW5jdGlvbiB4Vygpe3JldHVybiB0aGlzLl9yb290fSx1Vy5zaXplPWZ1bmN0aW9uIHdXKCl7dmFyIHQ9MDtyZXR1cm4gdGhpcy52aXNpdCgoZnVuY3Rpb24oZSl7aWYoIWUubGVuZ3RoKWRveysrdH13aGlsZShlPWUubmV4dCl9KSksdH0sdVcudmlzaXQ9ZnVuY3Rpb24gU1codCl7dmFyIGUsbixpLHIsbyxhLHM9W10sbD10aGlzLl9yb290O2ZvcihsJiZzLnB1c2gobmV3IHJXKGwsdGhpcy5feDAsdGhpcy5feTAsdGhpcy5feDEsdGhpcy5feTEpKTtlPXMucG9wKCk7KWlmKCF0KGw9ZS5ub2RlLGk9ZS54MCxyPWUueTAsbz1lLngxLGE9ZS55MSkmJmwubGVuZ3RoKXt2YXIgYz0oaStvKS8yLHU9KHIrYSkvMjsobj1sWzNdKSYmcy5wdXNoKG5ldyByVyhuLGMsdSxvLGEpKSwobj1sWzJdKSYmcy5wdXNoKG5ldyByVyhuLGksdSxjLGEpKSwobj1sWzFdKSYmcy5wdXNoKG5ldyByVyhuLGMscixvLHUpKSwobj1sWzBdKSYmcy5wdXNoKG5ldyByVyhuLGkscixjLHUpKX1yZXR1cm4gdGhpc30sdVcudmlzaXRBZnRlcj1mdW5jdGlvbiBNVyh0KXt2YXIgZSxuPVtdLGk9W107Zm9yKHRoaXMuX3Jvb3QmJm4ucHVzaChuZXcgclcodGhpcy5fcm9vdCx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO2U9bi5wb3AoKTspe3ZhciByPWUubm9kZTtpZihyLmxlbmd0aCl7dmFyIG8sYT1lLngwLHM9ZS55MCxsPWUueDEsYz1lLnkxLHU9KGErbCkvMixoPShzK2MpLzI7KG89clswXSkmJm4ucHVzaChuZXcgclcobyxhLHMsdSxoKSksKG89clsxXSkmJm4ucHVzaChuZXcgclcobyx1LHMsbCxoKSksKG89clsyXSkmJm4ucHVzaChuZXcgclcobyxhLGgsdSxjKSksKG89clszXSkmJm4ucHVzaChuZXcgclcobyx1LGgsbCxjKSl9aS5wdXNoKGUpfWZvcig7ZT1pLnBvcCgpOyl0KGUubm9kZSxlLngwLGUueTAsZS54MSxlLnkxKTtyZXR1cm4gdGhpc30sdVcueD1mdW5jdGlvbiBFVyh0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feD10LHRoaXMpOnRoaXMuX3h9LHVXLnk9ZnVuY3Rpb24gVFcodCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX3k9dCx0aGlzKTp0aGlzLl95fTt2YXIgQ1c9IiQiO2Z1bmN0aW9uIEFXKCl7fWZ1bmN0aW9uIGtXKHQsZSl7dmFyIG49bmV3IEFXO2lmKHQgaW5zdGFuY2VvZiBBVyl0LmVhY2goKGZ1bmN0aW9uKHQsZSl7bi5zZXQoZSx0KX0pKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkodCkpe3ZhciBpLHI9LTEsbz10Lmxlbmd0aDtpZihudWxsPT1lKWZvcig7KytyPG87KW4uc2V0KHIsdFtyXSk7ZWxzZSBmb3IoOysrcjxvOyluLnNldChlKGk9dFtyXSxyLHQpLGkpfWVsc2UgaWYodClmb3IodmFyIGEgaW4gdCluLnNldChhLHRbYV0pO3JldHVybiBufWZ1bmN0aW9uIExXKCl7fUFXLnByb3RvdHlwZT1rVy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkFXLGhhczpmdW5jdGlvbih0KXtyZXR1cm4gQ1crdCBpbiB0aGlzfSxnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXNbQ1crdF19LHNldDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzW0NXK3RdPWUsdGhpc30scmVtb3ZlOmZ1bmN0aW9uKHQpe3ZhciBlPUNXK3Q7cmV0dXJuIGUgaW4gdGhpcyYmZGVsZXRlIHRoaXNbZV19LGNsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PUNXJiZkZWxldGUgdGhpc1t0XX0sa2V5czpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzKWVbMF09PT1DVyYmdC5wdXNoKGUuc2xpY2UoMSkpO3JldHVybiB0fSx2YWx1ZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcyllWzBdPT09Q1cmJnQucHVzaCh0aGlzW2VdKTtyZXR1cm4gdH0sZW50cmllczpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzKWVbMF09PT1DVyYmdC5wdXNoKHtrZXk6ZS5zbGljZSgxKSx2YWx1ZTp0aGlzW2VdfSk7cmV0dXJuIHR9LHNpemU6ZnVuY3Rpb24oKXt2YXIgdD0wO2Zvcih2YXIgZSBpbiB0aGlzKWVbMF09PT1DVyYmKyt0O3JldHVybiB0fSxlbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzKWlmKHRbMF09PT1DVylyZXR1cm4hMTtyZXR1cm4hMH0sZWFjaDpmdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcyllWzBdPT09Q1cmJnQodGhpc1tlXSxlLnNsaWNlKDEpLHRoaXMpfX07dmFyIFBXPWtXLnByb3RvdHlwZTtmdW5jdGlvbiBOVyh0KXtyZXR1cm4gdC5pbmRleH1mdW5jdGlvbiBJVyh0LGUpe3ZhciBuPXQuZ2V0KGUpO2lmKCFuKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIitlKTtyZXR1cm4gbn1MVy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkxXLGhhczpQVy5oYXMsYWRkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzW0NXKyh0Kz0iIildPXQsdGhpc30scmVtb3ZlOlBXLnJlbW92ZSxjbGVhcjpQVy5jbGVhcix2YWx1ZXM6UFcua2V5cyxzaXplOlBXLnNpemUsZW1wdHk6UFcuZW1wdHksZWFjaDpQVy5lYWNofTt2YXIgT1c9e3ZhbHVlOmZ1bmN0aW9uKCl7fX07ZnVuY3Rpb24gUlcoKXtmb3IodmFyIHQsZT0wLG49YXJndW1lbnRzLmxlbmd0aCxpPXt9O2U8bjsrK2Upe2lmKCEodD1hcmd1bWVudHNbZV0rIiIpfHx0IGluIGl8fC9bXHMuXS8udGVzdCh0KSl0aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgdHlwZTogIit0KTtpW3RdPVtdfXJldHVybiBuZXcgelcoaSl9ZnVuY3Rpb24gelcodCl7dGhpcy5fPXR9ZnVuY3Rpb24gRFcodCxlKXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLykubWFwKChmdW5jdGlvbih0KXt2YXIgbj0iIixpPXQuaW5kZXhPZigiLiIpO2lmKGk+PTAmJihuPXQuc2xpY2UoaSsxKSx0PXQuc2xpY2UoMCxpKSksdCYmIWUuaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7cmV0dXJue3R5cGU6dCxuYW1lOm59fSkpfWZ1bmN0aW9uIEJXKHQsZSl7Zm9yKHZhciBuLGk9MCxyPXQubGVuZ3RoO2k8cjsrK2kpaWYoKG49dFtpXSkubmFtZT09PWUpcmV0dXJuIG4udmFsdWV9ZnVuY3Rpb24gSFcodCxlLG4pe2Zvcih2YXIgaT0wLHI9dC5sZW5ndGg7aTxyOysraSlpZih0W2ldLm5hbWU9PT1lKXt0W2ldPU9XLHQ9dC5zbGljZSgwLGkpLmNvbmNhdCh0LnNsaWNlKGkrMSkpO2JyZWFrfXJldHVybiBudWxsIT1uJiZ0LnB1c2goe25hbWU6ZSx2YWx1ZTpufSksdH16Vy5wcm90b3R5cGU9UlcucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp6VyxvbjpmdW5jdGlvbih0LGUpe3ZhciBuLGk9dGhpcy5fLHI9RFcodCsiIixpKSxvPS0xLGE9ci5sZW5ndGg7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtpZihudWxsIT1lJiYiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrZSk7Zm9yKDsrK288YTspaWYobj0odD1yW29dKS50eXBlKWlbbl09SFcoaVtuXSx0Lm5hbWUsZSk7ZWxzZSBpZihudWxsPT1lKWZvcihuIGluIGkpaVtuXT1IVyhpW25dLHQubmFtZSxudWxsKTtyZXR1cm4gdGhpc31mb3IoOysrbzxhOylpZigobj0odD1yW29dKS50eXBlKSYmKG49QlcoaVtuXSx0Lm5hbWUpKSlyZXR1cm4gbn0sY29weTpmdW5jdGlvbigpe3ZhciB0PXt9LGU9dGhpcy5fO2Zvcih2YXIgbiBpbiBlKXRbbl09ZVtuXS5zbGljZSgpO3JldHVybiBuZXcgelcodCl9LGNhbGw6ZnVuY3Rpb24odCxlKXtpZigobj1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciBuLGkscj1uZXcgQXJyYXkobiksbz0wO288bjsrK28pcltvXT1hcmd1bWVudHNbbysyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO2ZvcihvPTAsbj0oaT10aGlzLl9bdF0pLmxlbmd0aDtvPG47KytvKWlbb10udmFsdWUuYXBwbHkoZSxyKX0sYXBwbHk6ZnVuY3Rpb24odCxlLG4pe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7Zm9yKHZhciBpPXRoaXMuX1t0XSxyPTAsbz1pLmxlbmd0aDtyPG87KytyKWlbcl0udmFsdWUuYXBwbHkoZSxuKX19O3ZhciBGVyxWVyxVVz0wLGpXPTAsR1c9MCxXVz0wLHFXPTAsWVc9MCxYVz0ib2JqZWN0Ij09dHlwZW9mIHBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSwkVz0ib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbih0KXtzZXRUaW1lb3V0KHQsMTcpfTtmdW5jdGlvbiBLVygpe3JldHVybiBxV3x8KCRXKFpXKSxxVz1YVy5ub3coKStZVyl9ZnVuY3Rpb24gWlcoKXtxVz0wfWZ1bmN0aW9uIEpXKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiBRVyh0LGUsbil7dmFyIGk9bmV3IEpXO3JldHVybiBpLnJlc3RhcnQodCxlLG4pLGl9ZnVuY3Rpb24gdHEoKXtxVz0oV1c9WFcubm93KCkpK1lXLFVXPWpXPTA7dHJ5eyEoZnVuY3Rpb24gdCgpe0tXKCksKytVVztmb3IodmFyIHQsZT1GVztlOykodD1xVy1lLl90aW1lKT49MCYmZS5fY2FsbC5jYWxsKG51bGwsdCksZT1lLl9uZXh0Oy0tVVd9KSgpfWZpbmFsbHl7VVc9MCwoZnVuY3Rpb24gZSgpe2Zvcih2YXIgdCxlLG49RlcsaT0xLzA7bjspbi5fY2FsbD8oaT5uLl90aW1lJiYoaT1uLl90aW1lKSx0PW4sbj1uLl9uZXh0KTooZT1uLl9uZXh0LG4uX25leHQ9bnVsbCxuPXQ/dC5fbmV4dD1lOkZXPWUpO1ZXPXQsbnEoaSl9KSgpLHFXPTB9fWZ1bmN0aW9uIGVxKCl7dmFyIHQ9WFcubm93KCksZT10LVdXO2U+MWUzJiYoWVctPWUsV1c9dCl9ZnVuY3Rpb24gbnEodCl7VVd8fChqVyYmKGpXPWNsZWFyVGltZW91dChqVykpLHQtcVc+MjQ/KHQ8MS8wJiYoalc9c2V0VGltZW91dCh0cSx0LVhXLm5vdygpLVlXKSksR1cmJihHVz1jbGVhckludGVydmFsKEdXKSkpOihHV3x8KFdXPVhXLm5vdygpLEdXPXNldEludGVydmFsKGVxLDFlMykpLFVXPTEsJFcodHEpKSl9ZnVuY3Rpb24gaXEodCl7cmV0dXJuIHQueH1mdW5jdGlvbiBycSh0KXtyZXR1cm4gdC55fUpXLnByb3RvdHlwZT1RVy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkpXLHJlc3RhcnQ6ZnVuY3Rpb24odCxlLG4pe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIik7bj0obnVsbD09bj9LVygpOituKSsobnVsbD09ZT8wOitlKSx0aGlzLl9uZXh0fHxWVz09PXRoaXN8fChWVz9WVy5fbmV4dD10aGlzOkZXPXRoaXMsVlc9dGhpcyksdGhpcy5fY2FsbD10LHRoaXMuX3RpbWU9bixucSgpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCxucSgpKX19O3ZhciBvcSxhcT1NYXRoLlBJKigzLU1hdGguc3FydCg1KSk7ZnVuY3Rpb24gc3EodCxlKXtpZigobj0odD1lP3QudG9FeHBvbmVudGlhbChlLTEpOnQudG9FeHBvbmVudGlhbCgpKS5pbmRleE9mKCJlIikpPDApcmV0dXJuIG51bGw7dmFyIG4saT10LnNsaWNlKDAsbik7cmV0dXJuW2kubGVuZ3RoPjE/aVswXStpLnNsaWNlKDIpOmksK3Quc2xpY2UobisxKV19ZnVuY3Rpb24gbHEodCl7cmV0dXJuKHQ9c3EoTWF0aC5hYnModCkpKT90WzFdOk5hTn1mdW5jdGlvbiBjcSh0LGUpe3ZhciBuPXNxKHQsZSk7aWYoIW4pcmV0dXJuIHQrIiI7dmFyIGk9blswXSxyPW5bMV07cmV0dXJuIHI8MD8iMC4iK25ldyBBcnJheSgtcikuam9pbigiMCIpK2k6aS5sZW5ndGg+cisxP2kuc2xpY2UoMCxyKzEpKyIuIitpLnNsaWNlKHIrMSk6aStuZXcgQXJyYXkoci1pLmxlbmd0aCsyKS5qb2luKCIwIil9dmFyIHVxPXsiIjpmdW5jdGlvbiBocSh0LGUpe3Q6Zm9yKHZhciBuLGk9KHQ9dC50b1ByZWNpc2lvbihlKSkubGVuZ3RoLHI9MSxvPS0xO3I8aTsrK3Ipc3dpdGNoKHRbcl0pe2Nhc2UiLiI6bz1uPXI7YnJlYWs7Y2FzZSIwIjowPT09byYmKG89ciksbj1yO2JyZWFrO2Nhc2UiZSI6YnJlYWsgdDtkZWZhdWx0Om8+MCYmKG89MCl9cmV0dXJuIG8+MD90LnNsaWNlKDAsbykrdC5zbGljZShuKzEpOnR9LCIlIjpmdW5jdGlvbih0LGUpe3JldHVybigxMDAqdCkudG9GaXhlZChlKX0sYjpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZygyKX0sYzpmdW5jdGlvbih0KXtyZXR1cm4gdCsiIn0sZDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZygxMCl9LGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50b0V4cG9uZW50aWFsKGUpfSxmOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudG9GaXhlZChlKX0sZzpmdW5jdGlvbih0LGUpe3JldHVybiB0LnRvUHJlY2lzaW9uKGUpfSxvOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDgpfSxwOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGNxKDEwMCp0LGUpfSxyOmNxLHM6ZnVuY3Rpb24gZHEodCxlKXt2YXIgbj1zcSh0LGUpO2lmKCFuKXJldHVybiB0KyIiO3ZhciBpPW5bMF0scj1uWzFdLG89ci0ob3E9MypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3Ioci8zKSkpKSsxLGE9aS5sZW5ndGg7cmV0dXJuIG89PT1hP2k6bz5hP2krbmV3IEFycmF5KG8tYSsxKS5qb2luKCIwIik6bz4wP2kuc2xpY2UoMCxvKSsiLiIraS5zbGljZShvKToiMC4iK25ldyBBcnJheSgxLW8pLmpvaW4oIjAiKStzcSh0LE1hdGgubWF4KDAsZStvLTEpKVswXX0sWDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKX0seDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZygxNil9fSxwcT0vXig/OiguKT8oWzw+PV5dKSk/KFsrXC1cKCBdKT8oWyQjXSk/KDApPyhcZCspPygsKT8oXC5cZCspPyhbYS16JV0pPyQvaTtmdW5jdGlvbiBmcSh0KXtyZXR1cm4gbmV3IG1xKHQpfWZ1bmN0aW9uIG1xKHQpe2lmKCEoZT1wcS5leGVjKHQpKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9ybWF0OiAiK3QpO3ZhciBlLG49ZVsxXXx8IiAiLGk9ZVsyXXx8Ij4iLHI9ZVszXXx8Ii0iLG89ZVs0XXx8IiIsYT0hIWVbNV0scz1lWzZdJiYrZVs2XSxsPSEhZVs3XSxjPWVbOF0mJitlWzhdLnNsaWNlKDEpLHU9ZVs5XXx8IiI7Im4iPT09dT8obD0hMCx1PSJnIik6dXFbdV18fCh1PSIiKSwoYXx8IjAiPT09biYmIj0iPT09aSkmJihhPSEwLG49IjAiLGk9Ij0iKSx0aGlzLmZpbGw9bix0aGlzLmFsaWduPWksdGhpcy5zaWduPXIsdGhpcy5zeW1ib2w9byx0aGlzLnplcm89YSx0aGlzLndpZHRoPXMsdGhpcy5jb21tYT1sLHRoaXMucHJlY2lzaW9uPWMsdGhpcy50eXBlPXV9ZnVuY3Rpb24gZ3EodCl7cmV0dXJuIHR9ZnEucHJvdG90eXBlPW1xLnByb3RvdHlwZSxtcS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWxsK3RoaXMuYWxpZ24rdGhpcy5zaWduK3RoaXMuc3ltYm9sKyh0aGlzLnplcm8/IjAiOiIiKSsobnVsbD09dGhpcy53aWR0aD8iIjpNYXRoLm1heCgxLDB8dGhpcy53aWR0aCkpKyh0aGlzLmNvbW1hPyIsIjoiIikrKG51bGw9PXRoaXMucHJlY2lzaW9uPyIiOiIuIitNYXRoLm1heCgwLDB8dGhpcy5wcmVjaXNpb24pKSt0aGlzLnR5cGV9O3ZhciBfcSx5cSx2cSxicT1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIsK1IiwibSIsIiIsImsiLCJNIiwiRyIsIlQiLCJQIiwiRSIsIloiLCJZIl07ZnVuY3Rpb24geHEodCl7dmFyIGU9dC5ncm91cGluZyYmdC50aG91c2FuZHM/KGZ1bmN0aW9uIG4odCxlKXtyZXR1cm4gZnVuY3Rpb24obixpKXtmb3IodmFyIHI9bi5sZW5ndGgsbz1bXSxhPTAscz10WzBdLGw9MDtyPjAmJnM+MCYmKGwrcysxPmkmJihzPU1hdGgubWF4KDEsaS1sKSksby5wdXNoKG4uc3Vic3RyaW5nKHItPXMscitzKSksISgobCs9cysxKT5pKSk7KXM9dFthPShhKzEpJXQubGVuZ3RoXTtyZXR1cm4gby5yZXZlcnNlKCkuam9pbihlKX19KSh0Lmdyb3VwaW5nLHQudGhvdXNhbmRzKTpncSxpPXQuY3VycmVuY3kscj10LmRlY2ltYWwsbz10Lm51bWVyYWxzPyhmdW5jdGlvbiBhKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9bMC05XS9nLChmdW5jdGlvbihlKXtyZXR1cm4gdFsrZV19KSl9fSkodC5udW1lcmFscyk6Z3Escz10LnBlcmNlbnR8fCIlIjtmdW5jdGlvbiBsKHQpe3ZhciBuPSh0PWZxKHQpKS5maWxsLGE9dC5hbGlnbixsPXQuc2lnbixjPXQuc3ltYm9sLHU9dC56ZXJvLGg9dC53aWR0aCxkPXQuY29tbWEscD10LnByZWNpc2lvbixmPXQudHlwZSxtPSIkIj09PWM/aVswXToiIyI9PT1jJiYvW2JveFhdLy50ZXN0KGYpPyIwIitmLnRvTG93ZXJDYXNlKCk6IiIsZz0iJCI9PT1jP2lbMV06L1slcF0vLnRlc3QoZik/czoiIixfPXVxW2ZdLHk9IWZ8fC9bZGVmZ3BycyVdLy50ZXN0KGYpO2Z1bmN0aW9uIHYodCl7dmFyIGkscyxjLHY9bSxiPWc7aWYoImMiPT09ZiliPV8odCkrYix0PSIiO2Vsc2V7dmFyIHg9KHQ9K3QpPDA7aWYodD1fKE1hdGguYWJzKHQpLHApLHgmJjA9PSt0JiYoeD0hMSksdj0oeD8iKCI9PT1sP2w6Ii0iOiItIj09PWx8fCIoIj09PWw/IiI6bCkrdixiPSgicyI9PT1mP2JxWzgrb3EvM106IiIpK2IrKHgmJiIoIj09PWw/IikiOiIiKSx5KWZvcihpPS0xLHM9dC5sZW5ndGg7KytpPHM7KWlmKDQ4PihjPXQuY2hhckNvZGVBdChpKSl8fGM+NTcpe2I9KDQ2PT09Yz9yK3Quc2xpY2UoaSsxKTp0LnNsaWNlKGkpKStiLHQ9dC5zbGljZSgwLGkpO2JyZWFrfX1kJiYhdSYmKHQ9ZSh0LDEvMCkpO3ZhciB3PXYubGVuZ3RoK3QubGVuZ3RoK2IubGVuZ3RoLFM9dzxoP25ldyBBcnJheShoLXcrMSkuam9pbihuKToiIjtzd2l0Y2goZCYmdSYmKHQ9ZShTK3QsUy5sZW5ndGg/aC1iLmxlbmd0aDoxLzApLFM9IiIpLGEpe2Nhc2UiPCI6dD12K3QrYitTO2JyZWFrO2Nhc2UiPSI6dD12K1MrdCtiO2JyZWFrO2Nhc2UiXiI6dD1TLnNsaWNlKDAsdz1TLmxlbmd0aD4+MSkrdit0K2IrUy5zbGljZSh3KTticmVhaztkZWZhdWx0OnQ9Uyt2K3QrYn1yZXR1cm4gbyh0KX1yZXR1cm4gcD1udWxsPT1wP2Y/NjoxMjovW2dwcnNdLy50ZXN0KGYpP01hdGgubWF4KDEsTWF0aC5taW4oMjEscCkpOk1hdGgubWF4KDAsTWF0aC5taW4oMjAscCkpLHYudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdCsiIn0sdn1yZXR1cm57Zm9ybWF0OmwsZm9ybWF0UHJlZml4OmZ1bmN0aW9uIGModCxlKXt2YXIgbj1sKCgodD1mcSh0KSkudHlwZT0iZiIsdCkpLGk9MypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IobHEoZSkvMykpKSxyPU1hdGgucG93KDEwLC1pKSxvPWJxWzgraS8zXTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG4ocip0KStvfX19fWZ1bmN0aW9uIHdxKHQpe3JldHVybiBfcT14cSh0KSx5cT1fcS5mb3JtYXQsdnE9X3EuZm9ybWF0UHJlZml4LF9xfWZ1bmN0aW9uIFNxKCl7cmV0dXJuIG5ldyBNcX1mdW5jdGlvbiBNcSgpe3RoaXMucmVzZXQoKX13cSh7ZGVjaW1hbDoiLiIsdGhvdXNhbmRzOiIsIixncm91cGluZzpbM10sY3VycmVuY3k6WyIkIiwiIl19KSxNcS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOk1xLHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5zPXRoaXMudD0wfSxhZGQ6ZnVuY3Rpb24odCl7VHEoRXEsdCx0aGlzLnQpLFRxKHRoaXMsRXEucyx0aGlzLnMpLHRoaXMucz90aGlzLnQrPUVxLnQ6dGhpcy5zPUVxLnR9LHZhbHVlT2Y6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zfX07dmFyIEVxPW5ldyBNcTtmdW5jdGlvbiBUcSh0LGUsbil7dmFyIGk9dC5zPWUrbixyPWktZTt0LnQ9ZS0oaS1yKSsobi1yKX12YXIgQ3E9MWUtNixBcT1NYXRoLlBJLGtxPUFxLzIsTHE9QXEvNCxQcT0yKkFxLE5xPTE4MC9BcSxJcT1BcS8xODAsT3E9TWF0aC5hYnMsUnE9TWF0aC5hdGFuLHpxPU1hdGguYXRhbjIsRHE9TWF0aC5jb3MsQnE9TWF0aC5jZWlsLEhxPU1hdGguZXhwLEZxPU1hdGgubG9nLFZxPU1hdGgucG93LFVxPU1hdGguc2luLGpxPU1hdGguc2lnbnx8ZnVuY3Rpb24odCl7cmV0dXJuIHQ+MD8xOnQ8MD8tMTowfSxHcT1NYXRoLnNxcnQsV3E9TWF0aC50YW47ZnVuY3Rpb24gcXEodCl7cmV0dXJuIHQ+MT8wOnQ8LTE/QXE6TWF0aC5hY29zKHQpfWZ1bmN0aW9uIFlxKHQpe3JldHVybiB0PjE/a3E6dDwtMT8ta3E6TWF0aC5hc2luKHQpfWZ1bmN0aW9uIFhxKHQpe3JldHVybih0PVVxKHQvMikpKnR9ZnVuY3Rpb24gJHEoKXt9ZnVuY3Rpb24gS3EodCxlKXt0JiZKcS5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpJiZKcVt0LnR5cGVdKHQsZSl9dmFyIFpxPXtGZWF0dXJlOmZ1bmN0aW9uKHQsZSl7S3EodC5nZW9tZXRyeSxlKX0sRmVhdHVyZUNvbGxlY3Rpb246ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5mZWF0dXJlcyxpPS0xLHI9bi5sZW5ndGg7KytpPHI7KUtxKG5baV0uZ2VvbWV0cnksZSl9fSxKcT17U3BoZXJlOmZ1bmN0aW9uKHQsZSl7ZS5zcGhlcmUoKX0sUG9pbnQ6ZnVuY3Rpb24odCxlKXtlLnBvaW50KCh0PXQuY29vcmRpbmF0ZXMpWzBdLHRbMV0sdFsyXSl9LE11bHRpUG9pbnQ6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5jb29yZGluYXRlcyxpPS0xLHI9bi5sZW5ndGg7KytpPHI7KWUucG9pbnQoKHQ9bltpXSlbMF0sdFsxXSx0WzJdKX0sTGluZVN0cmluZzpmdW5jdGlvbih0LGUpe1FxKHQuY29vcmRpbmF0ZXMsZSwwKX0sTXVsdGlMaW5lU3RyaW5nOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXQuY29vcmRpbmF0ZXMsaT0tMSxyPW4ubGVuZ3RoOysraTxyOylRcShuW2ldLGUsMCl9LFBvbHlnb246ZnVuY3Rpb24odCxlKXt0WSh0LmNvb3JkaW5hdGVzLGUpfSxNdWx0aVBvbHlnb246ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5jb29yZGluYXRlcyxpPS0xLHI9bi5sZW5ndGg7KytpPHI7KXRZKG5baV0sZSl9LEdlb21ldHJ5Q29sbGVjdGlvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10Lmdlb21ldHJpZXMsaT0tMSxyPW4ubGVuZ3RoOysraTxyOylLcShuW2ldLGUpfX07ZnVuY3Rpb24gUXEodCxlLG4pe3ZhciBpLHI9LTEsbz10Lmxlbmd0aC1uO2ZvcihlLmxpbmVTdGFydCgpOysrcjxvOyllLnBvaW50KChpPXRbcl0pWzBdLGlbMV0saVsyXSk7ZS5saW5lRW5kKCl9ZnVuY3Rpb24gdFkodCxlKXt2YXIgbj0tMSxpPXQubGVuZ3RoO2ZvcihlLnBvbHlnb25TdGFydCgpOysrbjxpOylRcSh0W25dLGUsMSk7ZS5wb2x5Z29uRW5kKCl9ZnVuY3Rpb24gZVkodCxlKXt0JiZacS5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpP1pxW3QudHlwZV0odCxlKTpLcSh0LGUpfXZhciBuWSxpWSxyWSxvWSxhWSxzWT1TcSgpLGxZPVNxKCksY1k9e3BvaW50OiRxLGxpbmVTdGFydDokcSxsaW5lRW5kOiRxLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3NZLnJlc2V0KCksY1kubGluZVN0YXJ0PXVZLGNZLmxpbmVFbmQ9aFl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt2YXIgdD0rc1k7bFkuYWRkKHQ8MD9QcSt0OnQpLHRoaXMubGluZVN0YXJ0PXRoaXMubGluZUVuZD10aGlzLnBvaW50PSRxfSxzcGhlcmU6ZnVuY3Rpb24oKXtsWS5hZGQoUHEpfX07ZnVuY3Rpb24gdVkoKXtjWS5wb2ludD1kWX1mdW5jdGlvbiBoWSgpe3BZKG5ZLGlZKX1mdW5jdGlvbiBkWSh0LGUpe2NZLnBvaW50PXBZLG5ZPXQsaVk9ZSxyWT10Kj1JcSxvWT1EcShlPShlKj1JcSkvMitMcSksYVk9VXEoZSl9ZnVuY3Rpb24gcFkodCxlKXt2YXIgbj0odCo9SXEpLXJZLGk9bj49MD8xOi0xLHI9aSpuLG89RHEoZT0oZSo9SXEpLzIrTHEpLGE9VXEoZSkscz1hWSphLGw9b1kqbytzKkRxKHIpLGM9cyppKlVxKHIpO3NZLmFkZCh6cShjLGwpKSxyWT10LG9ZPW8sYVk9YX1mdW5jdGlvbiBmWSh0KXtyZXR1cm5benEodFsxXSx0WzBdKSxZcSh0WzJdKV19ZnVuY3Rpb24gbVkodCl7dmFyIGU9dFswXSxuPXRbMV0saT1EcShuKTtyZXR1cm5baSpEcShlKSxpKlVxKGUpLFVxKG4pXX1mdW5jdGlvbiBnWSh0LGUpe3JldHVybiB0WzBdKmVbMF0rdFsxXSplWzFdK3RbMl0qZVsyXX1mdW5jdGlvbiBfWSh0LGUpe3JldHVyblt0WzFdKmVbMl0tdFsyXSplWzFdLHRbMl0qZVswXS10WzBdKmVbMl0sdFswXSplWzFdLXRbMV0qZVswXV19ZnVuY3Rpb24geVkodCxlKXt0WzBdKz1lWzBdLHRbMV0rPWVbMV0sdFsyXSs9ZVsyXX1mdW5jdGlvbiB2WSh0LGUpe3JldHVyblt0WzBdKmUsdFsxXSplLHRbMl0qZV19ZnVuY3Rpb24gYlkodCl7dmFyIGU9R3EodFswXSp0WzBdK3RbMV0qdFsxXSt0WzJdKnRbMl0pO3RbMF0vPWUsdFsxXS89ZSx0WzJdLz1lfXZhciB4WSx3WSxTWSxNWSxFWSxUWSxDWSxBWSxrWSxMWSxQWSxOWSxJWSxPWSxSWSx6WSxEWSxCWSxIWSxGWSxWWSxVWSxqWSxHWSxXWSxxWSxZWT1TcSgpLFhZPXtwb2ludDokWSxsaW5lU3RhcnQ6WlksbGluZUVuZDpKWSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtYWS5wb2ludD1RWSxYWS5saW5lU3RhcnQ9dFgsWFkubGluZUVuZD1lWCxZWS5yZXNldCgpLGNZLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7Y1kucG9seWdvbkVuZCgpLFhZLnBvaW50PSRZLFhZLmxpbmVTdGFydD1aWSxYWS5saW5lRW5kPUpZLHNZPDA/KHhZPS0oU1k9MTgwKSx3WT0tKE1ZPTkwKSk6WVk+Q3E/TVk9OTA6WVk8LTFlLTYmJih3WT0tOTApLExZWzBdPXhZLExZWzFdPVNZfX07ZnVuY3Rpb24gJFkodCxlKXtrWS5wdXNoKExZPVt4WT10LFNZPXRdKSxlPHdZJiYod1k9ZSksZT5NWSYmKE1ZPWUpfWZ1bmN0aW9uIEtZKHQsZSl7dmFyIG49bVkoW3QqSXEsZSpJcV0pO2lmKEFZKXt2YXIgaT1fWShBWSxuKSxyPV9ZKFtpWzFdLC1pWzBdLDBdLGkpO2JZKHIpLHI9Zlkocik7dmFyIG8sYT10LUVZLHM9YT4wPzE6LTEsbD1yWzBdKk5xKnMsYz1PcShhKT4xODA7Y14ocypFWTxsJiZsPHMqdCk/KG89clsxXSpOcSk+TVkmJihNWT1vKTpjXihzKkVZPChsPShsKzM2MCklMzYwLTE4MCkmJmw8cyp0KT8obz0tclsxXSpOcSk8d1kmJih3WT1vKTooZTx3WSYmKHdZPWUpLGU+TVkmJihNWT1lKSksYz90PEVZP25YKHhZLHQpPm5YKHhZLFNZKSYmKFNZPXQpOm5YKHQsU1kpPm5YKHhZLFNZKSYmKHhZPXQpOlNZPj14WT8odDx4WSYmKHhZPXQpLHQ+U1kmJihTWT10KSk6dD5FWT9uWCh4WSx0KT5uWCh4WSxTWSkmJihTWT10KTpuWCh0LFNZKT5uWCh4WSxTWSkmJih4WT10KX1lbHNlIGtZLnB1c2goTFk9W3hZPXQsU1k9dF0pO2U8d1kmJih3WT1lKSxlPk1ZJiYoTVk9ZSksQVk9bixFWT10fWZ1bmN0aW9uIFpZKCl7WFkucG9pbnQ9S1l9ZnVuY3Rpb24gSlkoKXtMWVswXT14WSxMWVsxXT1TWSxYWS5wb2ludD0kWSxBWT1udWxsfWZ1bmN0aW9uIFFZKHQsZSl7aWYoQVkpe3ZhciBuPXQtRVk7WVkuYWRkKE9xKG4pPjE4MD9uKyhuPjA/MzYwOi0zNjApOm4pfWVsc2UgVFk9dCxDWT1lO2NZLnBvaW50KHQsZSksS1kodCxlKX1mdW5jdGlvbiB0WCgpe2NZLmxpbmVTdGFydCgpfWZ1bmN0aW9uIGVYKCl7UVkoVFksQ1kpLGNZLmxpbmVFbmQoKSxPcShZWSk+Q3EmJih4WT0tKFNZPTE4MCkpLExZWzBdPXhZLExZWzFdPVNZLEFZPW51bGx9ZnVuY3Rpb24gblgodCxlKXtyZXR1cm4oZS09dCk8MD9lKzM2MDplfWZ1bmN0aW9uIGlYKHQsZSl7cmV0dXJuIHRbMF0tZVswXX1mdW5jdGlvbiByWCh0LGUpe3JldHVybiB0WzBdPD10WzFdP3RbMF08PWUmJmU8PXRbMV06ZTx0WzBdfHx0WzFdPGV9dmFyIG9YPXtzcGhlcmU6JHEscG9pbnQ6YVgsbGluZVN0YXJ0OmxYLGxpbmVFbmQ6aFgscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7b1gubGluZVN0YXJ0PWRYLG9YLmxpbmVFbmQ9cFh9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtvWC5saW5lU3RhcnQ9bFgsb1gubGluZUVuZD1oWH19O2Z1bmN0aW9uIGFYKHQsZSl7dCo9SXE7dmFyIG49RHEoZSo9SXEpO3NYKG4qRHEodCksbipVcSh0KSxVcShlKSl9ZnVuY3Rpb24gc1godCxlLG4peysrUFksSVkrPSh0LUlZKS9QWSxPWSs9KGUtT1kpL1BZLFJZKz0obi1SWSkvUFl9ZnVuY3Rpb24gbFgoKXtvWC5wb2ludD1jWH1mdW5jdGlvbiBjWCh0LGUpe3QqPUlxO3ZhciBuPURxKGUqPUlxKTtHWT1uKkRxKHQpLFdZPW4qVXEodCkscVk9VXEoZSksb1gucG9pbnQ9dVgsc1goR1ksV1kscVkpfWZ1bmN0aW9uIHVYKHQsZSl7dCo9SXE7dmFyIG49RHEoZSo9SXEpLGk9bipEcSh0KSxyPW4qVXEodCksbz1VcShlKSxhPXpxKEdxKChhPVdZKm8tcVkqcikqYSsoYT1xWSppLUdZKm8pKmErKGE9R1kqci1XWSppKSphKSxHWSppK1dZKnIrcVkqbyk7TlkrPWEselkrPWEqKEdZKyhHWT1pKSksRFkrPWEqKFdZKyhXWT1yKSksQlkrPWEqKHFZKyhxWT1vKSksc1goR1ksV1kscVkpfWZ1bmN0aW9uIGhYKCl7b1gucG9pbnQ9YVh9ZnVuY3Rpb24gZFgoKXtvWC5wb2ludD1mWH1mdW5jdGlvbiBwWCgpe21YKFVZLGpZKSxvWC5wb2ludD1hWH1mdW5jdGlvbiBmWCh0LGUpe1VZPXQsalk9ZSx0Kj1JcSxlKj1JcSxvWC5wb2ludD1tWDt2YXIgbj1EcShlKTtHWT1uKkRxKHQpLFdZPW4qVXEodCkscVk9VXEoZSksc1goR1ksV1kscVkpfWZ1bmN0aW9uIG1YKHQsZSl7dCo9SXE7dmFyIG49RHEoZSo9SXEpLGk9bipEcSh0KSxyPW4qVXEodCksbz1VcShlKSxhPVdZKm8tcVkqcixzPXFZKmktR1kqbyxsPUdZKnItV1kqaSxjPUdxKGEqYStzKnMrbCpsKSx1PVlxKGMpLGg9YyYmLXUvYztIWSs9aCphLEZZKz1oKnMsVlkrPWgqbCxOWSs9dSx6WSs9dSooR1krKEdZPWkpKSxEWSs9dSooV1krKFdZPXIpKSxCWSs9dSoocVkrKHFZPW8pKSxzWChHWSxXWSxxWSl9ZnVuY3Rpb24gZ1godCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIF9YKHQsZSl7ZnVuY3Rpb24gbihuLGkpe3JldHVybiBuPXQobixpKSxlKG5bMF0sblsxXSl9cmV0dXJuIHQuaW52ZXJ0JiZlLmludmVydCYmKG4uaW52ZXJ0PWZ1bmN0aW9uKG4saSl7cmV0dXJuKG49ZS5pbnZlcnQobixpKSkmJnQuaW52ZXJ0KG5bMF0sblsxXSl9KSxufWZ1bmN0aW9uIHlYKHQsZSl7cmV0dXJuW3Q+QXE/dC1QcTp0PC1BcT90K1BxOnQsZV19ZnVuY3Rpb24gdlgodCxlLG4pe3JldHVybih0JT1QcSk/ZXx8bj9fWCh4WCh0KSx3WChlLG4pKTp4WCh0KTplfHxuP3dYKGUsbik6eVh9ZnVuY3Rpb24gYlgodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7cmV0dXJuWyhlKz10KT5BcT9lLVBxOmU8LUFxP2UrUHE6ZSxuXX19ZnVuY3Rpb24geFgodCl7dmFyIGU9YlgodCk7cmV0dXJuIGUuaW52ZXJ0PWJYKC10KSxlfWZ1bmN0aW9uIHdYKHQsZSl7dmFyIG49RHEodCksaT1VcSh0KSxyPURxKGUpLG89VXEoZSk7ZnVuY3Rpb24gYSh0LGUpe3ZhciBhPURxKGUpLHM9RHEodCkqYSxsPVVxKHQpKmEsYz1VcShlKSx1PWMqbitzKmk7cmV0dXJuW3pxKGwqci11Km8scypuLWMqaSksWXEodSpyK2wqbyldfXJldHVybiBhLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciBhPURxKGUpLHM9RHEodCkqYSxsPVVxKHQpKmEsYz1VcShlKSx1PWMqci1sKm87cmV0dXJuW3pxKGwqcitjKm8scypuK3UqaSksWXEodSpuLXMqaSldfSxhfWZ1bmN0aW9uIFNYKHQpe2Z1bmN0aW9uIGUoZSl7cmV0dXJuKGU9dChlWzBdKklxLGVbMV0qSXEpKVswXSo9TnEsZVsxXSo9TnEsZX1yZXR1cm4gdD12WCh0WzBdKklxLHRbMV0qSXEsdC5sZW5ndGg+Mj90WzJdKklxOjApLGUuaW52ZXJ0PWZ1bmN0aW9uKGUpe3JldHVybihlPXQuaW52ZXJ0KGVbMF0qSXEsZVsxXSpJcSkpWzBdKj1OcSxlWzFdKj1OcSxlfSxlfWZ1bmN0aW9uIE1YKHQsZSxuLGkscixvKXtpZihuKXt2YXIgYT1EcShlKSxzPVVxKGUpLGw9aSpuO251bGw9PXI/KHI9ZStpKlBxLG89ZS1sLzIpOihyPUVYKGEsciksbz1FWChhLG8pLChpPjA/cjxvOnI+bykmJihyKz1pKlBxKSk7Zm9yKHZhciBjLHU9cjtpPjA/dT5vOnU8bzt1LT1sKWM9ZlkoW2EsLXMqRHEodSksLXMqVXEodSldKSx0LnBvaW50KGNbMF0sY1sxXSl9fWZ1bmN0aW9uIEVYKHQsZSl7KGU9bVkoZSkpWzBdLT10LGJZKGUpO3ZhciBuPXFxKC1lWzFdKTtyZXR1cm4oKC1lWzJdPDA/LW46bikrUHEtQ3EpJVBxfWZ1bmN0aW9uIFRYKCl7dmFyIHQsZT1bXTtyZXR1cm57cG9pbnQ6ZnVuY3Rpb24oZSxuKXt0LnB1c2goW2Usbl0pfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtlLnB1c2godD1bXSl9LGxpbmVFbmQ6JHEscmVqb2luOmZ1bmN0aW9uKCl7ZS5sZW5ndGg+MSYmZS5wdXNoKGUucG9wKCkuY29uY2F0KGUuc2hpZnQoKSkpfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgbj1lO3JldHVybiBlPVtdLHQ9bnVsbCxufX19ZnVuY3Rpb24gQ1godCxlKXtyZXR1cm4gT3EodFswXS1lWzBdKTxDcSYmT3EodFsxXS1lWzFdKTxDcX1mdW5jdGlvbiBBWCh0LGUsbixpKXt0aGlzLng9dCx0aGlzLno9ZSx0aGlzLm89bix0aGlzLmU9aSx0aGlzLnY9ITEsdGhpcy5uPXRoaXMucD1udWxsfWZ1bmN0aW9uIGtYKHQsZSxuLGkscil7dmFyIG8sYSxzPVtdLGw9W107aWYodC5mb3JFYWNoKChmdW5jdGlvbih0KXtpZighKChlPXQubGVuZ3RoLTEpPD0wKSl7dmFyIGUsbixpPXRbMF0sYT10W2VdO2lmKENYKGksYSkpe2ZvcihyLmxpbmVTdGFydCgpLG89MDtvPGU7KytvKXIucG9pbnQoKGk9dFtvXSlbMF0saVsxXSk7ci5saW5lRW5kKCl9ZWxzZSBzLnB1c2gobj1uZXcgQVgoaSx0LG51bGwsITApKSxsLnB1c2gobi5vPW5ldyBBWChpLG51bGwsbiwhMSkpLHMucHVzaChuPW5ldyBBWChhLHQsbnVsbCwhMSkpLGwucHVzaChuLm89bmV3IEFYKGEsbnVsbCxuLCEwKSl9fSkpLHMubGVuZ3RoKXtmb3IobC5zb3J0KGUpLExYKHMpLExYKGwpLG89MCxhPWwubGVuZ3RoO288YTsrK28pbFtvXS5lPW49IW47Zm9yKHZhciBjLHUsaD1zWzBdOzspe2Zvcih2YXIgZD1oLHA9ITA7ZC52OylpZigoZD1kLm4pPT09aClyZXR1cm47Yz1kLnosci5saW5lU3RhcnQoKTtkb3tpZihkLnY9ZC5vLnY9ITAsZC5lKXtpZihwKWZvcihvPTAsYT1jLmxlbmd0aDtvPGE7KytvKXIucG9pbnQoKHU9Y1tvXSlbMF0sdVsxXSk7ZWxzZSBpKGQueCxkLm4ueCwxLHIpO2Q9ZC5ufWVsc2V7aWYocClmb3Iobz0oYz1kLnAueikubGVuZ3RoLTE7bz49MDstLW8pci5wb2ludCgodT1jW29dKVswXSx1WzFdKTtlbHNlIGkoZC54LGQucC54LC0xLHIpO2Q9ZC5wfWM9KGQ9ZC5vKS56LHA9IXB9d2hpbGUoIWQudik7ci5saW5lRW5kKCl9fX1mdW5jdGlvbiBMWCh0KXtpZihlPXQubGVuZ3RoKXtmb3IodmFyIGUsbixpPTAscj10WzBdOysraTxlOylyLm49bj10W2ldLG4ucD1yLHI9bjtyLm49bj10WzBdLG4ucD1yfX15WC5pbnZlcnQ9eVg7dmFyIFBYPVNxKCk7ZnVuY3Rpb24gTlgodCxlKXt2YXIgbj1lWzBdLGk9ZVsxXSxyPVtVcShuKSwtRHEobiksMF0sbz0wLGE9MDtQWC5yZXNldCgpO2Zvcih2YXIgcz0wLGw9dC5sZW5ndGg7czxsOysrcylpZih1PShjPXRbc10pLmxlbmd0aClmb3IodmFyIGMsdSxoPWNbdS0xXSxkPWhbMF0scD1oWzFdLzIrTHEsZj1VcShwKSxtPURxKHApLGc9MDtnPHU7KytnLGQ9eSxmPWIsbT14LGg9Xyl7dmFyIF89Y1tnXSx5PV9bMF0sdj1fWzFdLzIrTHEsYj1VcSh2KSx4PURxKHYpLHc9eS1kLFM9dz49MD8xOi0xLE09Uyp3LEU9TT5BcSxUPWYqYjtpZihQWC5hZGQoenEoVCpTKlVxKE0pLG0qeCtUKkRxKE0pKSksbys9RT93K1MqUHE6dyxFXmQ+PW5eeT49bil7dmFyIEM9X1kobVkoaCksbVkoXykpO2JZKEMpO3ZhciBBPV9ZKHIsQyk7YlkoQSk7dmFyIGs9KEVedz49MD8tMToxKSpZcShBWzJdKTsoaT5rfHxpPT09ayYmKENbMF18fENbMV0pKSYmKGErPUVedz49MD8xOi0xKX19cmV0dXJuKG88LTFlLTZ8fG88Q3EmJlBYPC0xZS02KV4xJmF9ZnVuY3Rpb24gSVgodCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59ZnVuY3Rpb24gT1godCxlLG4pe3Q9K3QsZT0rZSxuPShyPWFyZ3VtZW50cy5sZW5ndGgpPDI/KGU9dCx0PTAsMSk6cjwzPzE6K247Zm9yKHZhciBpPS0xLHI9MHxNYXRoLm1heCgwLE1hdGguY2VpbCgoZS10KS9uKSksbz1uZXcgQXJyYXkocik7KytpPHI7KW9baV09dCtpKm47cmV0dXJuIG99ZnVuY3Rpb24gUlgodCl7Zm9yKHZhciBlLG4saSxyPXQubGVuZ3RoLG89LTEsYT0wOysrbzxyOylhKz10W29dLmxlbmd0aDtmb3Iobj1uZXcgQXJyYXkoYSk7LS1yPj0wOylmb3IoZT0oaT10W3JdKS5sZW5ndGg7LS1lPj0wOyluWy0tYV09aVtlXTtyZXR1cm4gbn1mdW5jdGlvbiB6WCh0LGUsbixpKXtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG8sYSxzLGw9ZShyKSxjPVRYKCksdT1lKGMpLGg9ITEsZD17cG9pbnQ6cCxsaW5lU3RhcnQ6bSxsaW5lRW5kOmcscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7ZC5wb2ludD1fLGQubGluZVN0YXJ0PXksZC5saW5lRW5kPXYsYT1bXSxvPVtdfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7ZC5wb2ludD1wLGQubGluZVN0YXJ0PW0sZC5saW5lRW5kPWcsYT1SWChhKTt2YXIgdD1OWChvLGkpO2EubGVuZ3RoPyhofHwoci5wb2x5Z29uU3RhcnQoKSxoPSEwKSxrWChhLEJYLHQsbixyKSk6dCYmKGh8fChyLnBvbHlnb25TdGFydCgpLGg9ITApLHIubGluZVN0YXJ0KCksbihudWxsLG51bGwsMSxyKSxyLmxpbmVFbmQoKSksaCYmKHIucG9seWdvbkVuZCgpLGg9ITEpLGE9bz1udWxsfSxzcGhlcmU6ZnVuY3Rpb24oKXtyLnBvbHlnb25TdGFydCgpLHIubGluZVN0YXJ0KCksbihudWxsLG51bGwsMSxyKSxyLmxpbmVFbmQoKSxyLnBvbHlnb25FbmQoKX19O2Z1bmN0aW9uIHAoZSxuKXt0KGUsbikmJnIucG9pbnQoZSxuKX1mdW5jdGlvbiBmKHQsZSl7bC5wb2ludCh0LGUpfWZ1bmN0aW9uIG0oKXtkLnBvaW50PWYsbC5saW5lU3RhcnQoKX1mdW5jdGlvbiBnKCl7ZC5wb2ludD1wLGwubGluZUVuZCgpfWZ1bmN0aW9uIF8odCxlKXtzLnB1c2goW3QsZV0pLHUucG9pbnQodCxlKX1mdW5jdGlvbiB5KCl7dS5saW5lU3RhcnQoKSxzPVtdfWZ1bmN0aW9uIHYoKXtfKHNbMF1bMF0sc1swXVsxXSksdS5saW5lRW5kKCk7dmFyIHQsZSxuLGksbD11LmNsZWFuKCksZD1jLnJlc3VsdCgpLHA9ZC5sZW5ndGg7aWYocy5wb3AoKSxvLnB1c2gocykscz1udWxsLHApaWYoMSZsKXtpZigoZT0obj1kWzBdKS5sZW5ndGgtMSk+MCl7Zm9yKGh8fChyLnBvbHlnb25TdGFydCgpLGg9ITApLHIubGluZVN0YXJ0KCksdD0wO3Q8ZTsrK3Qpci5wb2ludCgoaT1uW3RdKVswXSxpWzFdKTtyLmxpbmVFbmQoKX19ZWxzZSBwPjEmJjImbCYmZC5wdXNoKGQucG9wKCkuY29uY2F0KGQuc2hpZnQoKSkpLGEucHVzaChkLmZpbHRlcihEWCkpfXJldHVybiBkfX1mdW5jdGlvbiBEWCh0KXtyZXR1cm4gdC5sZW5ndGg+MX1mdW5jdGlvbiBCWCh0LGUpe3JldHVybigodD10LngpWzBdPDA/dFsxXS1rcS1DcTprcS10WzFdKS0oKGU9ZS54KVswXTwwP2VbMV0ta3EtQ3E6a3EtZVsxXSl9IShmdW5jdGlvbiBIWCh0KXsxPT09dC5sZW5ndGgmJih0PShmdW5jdGlvbiBlKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3JldHVybiBJWCh0KGUpLG4pfX0pKHQpKX0pKElYKTt2YXIgRlg9elgoKGZ1bmN0aW9uKCl7cmV0dXJuITB9KSwoZnVuY3Rpb24gVlgodCl7dmFyIGUsbj1OYU4saT1OYU4scj1OYU47cmV0dXJue2xpbmVTdGFydDpmdW5jdGlvbigpe3QubGluZVN0YXJ0KCksZT0xfSxwb2ludDpmdW5jdGlvbihvLGEpe3ZhciBzPW8+MD9BcTotQXEsbD1PcShvLW4pO09xKGwtQXEpPENxPyh0LnBvaW50KG4saT0oaSthKS8yPjA/a3E6LWtxKSx0LnBvaW50KHIsaSksdC5saW5lRW5kKCksdC5saW5lU3RhcnQoKSx0LnBvaW50KHMsaSksdC5wb2ludChvLGkpLGU9MCk6ciE9PXMmJmw+PUFxJiYoT3Eobi1yKTxDcSYmKG4tPXIqQ3EpLE9xKG8tcyk8Q3EmJihvLT1zKkNxKSxpPShmdW5jdGlvbiBjKHQsZSxuLGkpe3ZhciByLG8sYT1VcSh0LW4pO3JldHVybiBPcShhKT5DcT9ScSgoVXEoZSkqKG89RHEoaSkpKlVxKG4pLVVxKGkpKihyPURxKGUpKSpVcSh0KSkvKHIqbyphKSk6KGUraSkvMn0pKG4saSxvLGEpLHQucG9pbnQocixpKSx0LmxpbmVFbmQoKSx0LmxpbmVTdGFydCgpLHQucG9pbnQocyxpKSxlPTApLHQucG9pbnQobj1vLGk9YSkscj1zfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dC5saW5lRW5kKCksbj1pPU5hTn0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gMi1lfX19KSwoZnVuY3Rpb24gVVgodCxlLG4saSl7dmFyIHI7aWYobnVsbD09dClpLnBvaW50KC1BcSxyPW4qa3EpLGkucG9pbnQoMCxyKSxpLnBvaW50KEFxLHIpLGkucG9pbnQoQXEsMCksaS5wb2ludChBcSwtciksaS5wb2ludCgwLC1yKSxpLnBvaW50KC1BcSwtciksaS5wb2ludCgtQXEsMCksaS5wb2ludCgtQXEscik7ZWxzZSBpZihPcSh0WzBdLWVbMF0pPkNxKXt2YXIgbz10WzBdPGVbMF0/QXE6LUFxO2kucG9pbnQoLW8scj1uKm8vMiksaS5wb2ludCgwLHIpLGkucG9pbnQobyxyKX1lbHNlIGkucG9pbnQoZVswXSxlWzFdKX0pLFstQXEsLWtxXSk7ZnVuY3Rpb24galgodCl7dmFyIGU9RHEodCksbj02KklxLGk9ZT4wLHI9T3EoZSk+Q3E7ZnVuY3Rpb24gbyh0LG4pe3JldHVybiBEcSh0KSpEcShuKT5lfWZ1bmN0aW9uIGEodCxuLGkpe3ZhciByPVsxLDAsMF0sbz1fWShtWSh0KSxtWShuKSksYT1nWShvLG8pLHM9b1swXSxsPWEtcypzO2lmKCFsKXJldHVybiFpJiZ0O3ZhciBjPWUqYS9sLHU9LWUqcy9sLGg9X1kocixvKSxkPXZZKHIsYyk7eVkoZCx2WShvLHUpKTt2YXIgcD1oLGY9Z1koZCxwKSxtPWdZKHAscCksZz1mKmYtbSooZ1koZCxkKS0xKTtpZighKGc8MCkpe3ZhciBfPUdxKGcpLHk9dlkocCwoLWYtXykvbSk7aWYoeVkoeSxkKSx5PWZZKHkpLCFpKXJldHVybiB5O3ZhciB2LGI9dFswXSx4PW5bMF0sdz10WzFdLFM9blsxXTt4PGImJih2PWIsYj14LHg9dik7dmFyIE09eC1iLEU9T3EoTS1BcSk8Q3E7aWYoIUUmJlM8dyYmKHY9dyx3PVMsUz12KSxFfHxNPENxP0U/dytTPjBeeVsxXTwoT3EoeVswXS1iKTxDcT93OlMpOnc8PXlbMV0mJnlbMV08PVM6TT5BcV4oYjw9eVswXSYmeVswXTw9eCkpe3ZhciBUPXZZKHAsKC1mK18pL20pO3JldHVybiB5WShULGQpLFt5LGZZKFQpXX19fWZ1bmN0aW9uIHMoZSxuKXt2YXIgcj1pP3Q6QXEtdCxvPTA7cmV0dXJuIGU8LXI/b3w9MTplPnImJihvfD0yKSxuPC1yP298PTQ6bj5yJiYob3w9OCksb31yZXR1cm4gelgobywoZnVuY3Rpb24gbCh0KXt2YXIgZSxuLGwsYyx1O3JldHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtjPWw9ITEsdT0xfSxwb2ludDpmdW5jdGlvbihoLGQpe3ZhciBwLGY9W2gsZF0sbT1vKGgsZCksZz1pP20/MDpzKGgsZCk6bT9zKGgrKGg8MD9BcTotQXEpLGQpOjA7aWYoIWUmJihjPWw9bSkmJnQubGluZVN0YXJ0KCksbSE9PWwmJighKHA9YShlLGYpKXx8Q1goZSxwKXx8Q1goZixwKSkmJihmWzBdKz1DcSxmWzFdKz1DcSxtPW8oZlswXSxmWzFdKSksbSE9PWwpdT0wLG0/KHQubGluZVN0YXJ0KCkscD1hKGYsZSksdC5wb2ludChwWzBdLHBbMV0pKToocD1hKGUsZiksdC5wb2ludChwWzBdLHBbMV0pLHQubGluZUVuZCgpKSxlPXA7ZWxzZSBpZihyJiZlJiZpXm0pe3ZhciBfO2cmbnx8IShfPWEoZixlLCEwKSl8fCh1PTAsaT8odC5saW5lU3RhcnQoKSx0LnBvaW50KF9bMF1bMF0sX1swXVsxXSksdC5wb2ludChfWzFdWzBdLF9bMV1bMV0pLHQubGluZUVuZCgpKToodC5wb2ludChfWzFdWzBdLF9bMV1bMV0pLHQubGluZUVuZCgpLHQubGluZVN0YXJ0KCksdC5wb2ludChfWzBdWzBdLF9bMF1bMV0pKSl9IW18fGUmJkNYKGUsZil8fHQucG9pbnQoZlswXSxmWzFdKSxlPWYsbD1tLG49Z30sbGluZUVuZDpmdW5jdGlvbigpe2wmJnQubGluZUVuZCgpLGU9bnVsbH0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gdXwoYyYmbCk8PDF9fX0pLChmdW5jdGlvbiBjKGUsaSxyLG8pe01YKG8sdCxuLHIsZSxpKX0pLGk/WzAsLXRdOlstQXEsdC1BcV0pfXZhciBHWD0xZTksV1g9LUdYO2Z1bmN0aW9uIHFYKHQsZSxuLGkpe2Z1bmN0aW9uIHIocixvKXtyZXR1cm4gdDw9ciYmcjw9biYmZTw9byYmbzw9aX1mdW5jdGlvbiBvKHIsbyxzLGMpe3ZhciB1PTAsaD0wO2lmKG51bGw9PXJ8fCh1PWEocixzKSkhPT0oaD1hKG8scykpfHxsKHIsbyk8MF5zPjApZG97Yy5wb2ludCgwPT09dXx8Mz09PXU/dDpuLHU+MT9pOmUpfXdoaWxlKCh1PSh1K3MrNCklNCkhPT1oKTtlbHNlIGMucG9pbnQob1swXSxvWzFdKX1mdW5jdGlvbiBhKGkscil7cmV0dXJuIE9xKGlbMF0tdCk8Q3E/cj4wPzA6MzpPcShpWzBdLW4pPENxP3I+MD8yOjE6T3EoaVsxXS1lKTxDcT9yPjA/MTowOnI+MD8zOjJ9ZnVuY3Rpb24gcyh0LGUpe3JldHVybiBsKHQueCxlLngpfWZ1bmN0aW9uIGwodCxlKXt2YXIgbj1hKHQsMSksaT1hKGUsMSk7cmV0dXJuIG4hPT1pP24taTowPT09bj9lWzFdLXRbMV06MT09PW4/dFswXS1lWzBdOjI9PT1uP3RbMV0tZVsxXTplWzBdLXRbMF19cmV0dXJuIGZ1bmN0aW9uKGEpe3ZhciBsLGMsdSxoLGQscCxmLG0sZyxfLHksdj1hLGI9VFgoKSx4PXtwb2ludDpULGxpbmVTdGFydDpmdW5jdGlvbiB3KCl7eC5wb2ludD1DLGMmJmMucHVzaCh1PVtdKSxfPSEwLGc9ITEsZj1tPU5hTn0sbGluZUVuZDpmdW5jdGlvbiBTKCl7bCYmKEMoaCxkKSxwJiZnJiZiLnJlam9pbigpLGwucHVzaChiLnJlc3VsdCgpKSkseC5wb2ludD1ULGcmJnYubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24gTSgpe3Y9YixsPVtdLGM9W10seT0hMH0scG9seWdvbkVuZDpmdW5jdGlvbiBFKCl7dmFyIGU9KGZ1bmN0aW9uIG4oKXtmb3IodmFyIGU9MCxuPTAscj1jLmxlbmd0aDtuPHI7KytuKWZvcih2YXIgbyxhLHM9Y1tuXSxsPTEsdT1zLmxlbmd0aCxoPXNbMF0sZD1oWzBdLHA9aFsxXTtsPHU7KytsKW89ZCxhPXAsZD0oaD1zW2xdKVswXSxwPWhbMV0sYTw9aT9wPmkmJihkLW8pKihpLWEpPihwLWEpKih0LW8pJiYrK2U6cDw9aSYmKGQtbykqKGktYSk8KHAtYSkqKHQtbykmJi0tZTtyZXR1cm4gZX0pKCkscj15JiZlLGg9KGw9UlgobCkpLmxlbmd0aDsocnx8aCkmJihhLnBvbHlnb25TdGFydCgpLHImJihhLmxpbmVTdGFydCgpLG8obnVsbCxudWxsLDEsYSksYS5saW5lRW5kKCkpLGgmJmtYKGwscyxlLG8sYSksYS5wb2x5Z29uRW5kKCkpLHY9YSxsPWM9dT1udWxsfX07ZnVuY3Rpb24gVCh0LGUpe3IodCxlKSYmdi5wb2ludCh0LGUpfWZ1bmN0aW9uIEMobyxhKXt2YXIgcz1yKG8sYSk7aWYoYyYmdS5wdXNoKFtvLGFdKSxfKWg9byxkPWEscD1zLF89ITEscyYmKHYubGluZVN0YXJ0KCksdi5wb2ludChvLGEpKTtlbHNlIGlmKHMmJmcpdi5wb2ludChvLGEpO2Vsc2V7dmFyIGw9W2Y9TWF0aC5tYXgoV1gsTWF0aC5taW4oR1gsZikpLG09TWF0aC5tYXgoV1gsTWF0aC5taW4oR1gsbSkpXSxiPVtvPU1hdGgubWF4KFdYLE1hdGgubWluKEdYLG8pKSxhPU1hdGgubWF4KFdYLE1hdGgubWluKEdYLGEpKV07IShmdW5jdGlvbiB4KHQsZSxuLGkscixvKXt2YXIgYSxzPXRbMF0sbD10WzFdLGM9MCx1PTEsaD1lWzBdLXMsZD1lWzFdLWw7aWYoYT1uLXMsaHx8IShhPjApKXtpZihhLz1oLGg8MCl7aWYoYTxjKXJldHVybjthPHUmJih1PWEpfWVsc2UgaWYoaD4wKXtpZihhPnUpcmV0dXJuO2E+YyYmKGM9YSl9aWYoYT1yLXMsaHx8IShhPDApKXtpZihhLz1oLGg8MCl7aWYoYT51KXJldHVybjthPmMmJihjPWEpfWVsc2UgaWYoaD4wKXtpZihhPGMpcmV0dXJuO2E8dSYmKHU9YSl9aWYoYT1pLWwsZHx8IShhPjApKXtpZihhLz1kLGQ8MCl7aWYoYTxjKXJldHVybjthPHUmJih1PWEpfWVsc2UgaWYoZD4wKXtpZihhPnUpcmV0dXJuO2E+YyYmKGM9YSl9aWYoYT1vLWwsZHx8IShhPDApKXtpZihhLz1kLGQ8MCl7aWYoYT51KXJldHVybjthPmMmJihjPWEpfWVsc2UgaWYoZD4wKXtpZihhPGMpcmV0dXJuO2E8dSYmKHU9YSl9cmV0dXJuIGM+MCYmKHRbMF09cytjKmgsdFsxXT1sK2MqZCksdTwxJiYoZVswXT1zK3UqaCxlWzFdPWwrdSpkKSwhMH19fX19KShsLGIsdCxlLG4saSk/cyYmKHYubGluZVN0YXJ0KCksdi5wb2ludChvLGEpLHk9ITEpOihnfHwodi5saW5lU3RhcnQoKSx2LnBvaW50KGxbMF0sbFsxXSkpLHYucG9pbnQoYlswXSxiWzFdKSxzfHx2LmxpbmVFbmQoKSx5PSExKX1mPW8sbT1hLGc9c31yZXR1cm4geH19dmFyIFlYLFhYLCRYLEtYPVNxKCksWlg9e3NwaGVyZTokcSxwb2ludDokcSxsaW5lU3RhcnQ6ZnVuY3Rpb24gSlgoKXtaWC5wb2ludD10JCxaWC5saW5lRW5kPVFYfSxsaW5lRW5kOiRxLHBvbHlnb25TdGFydDokcSxwb2x5Z29uRW5kOiRxfTtmdW5jdGlvbiBRWCgpe1pYLnBvaW50PVpYLmxpbmVFbmQ9JHF9ZnVuY3Rpb24gdCQodCxlKXtZWD10Kj1JcSxYWD1VcShlKj1JcSksJFg9RHEoZSksWlgucG9pbnQ9ZSR9ZnVuY3Rpb24gZSQodCxlKXt0Kj1JcTt2YXIgbj1VcShlKj1JcSksaT1EcShlKSxyPU9xKHQtWVgpLG89RHEociksYT1pKlVxKHIpLHM9JFgqbi1YWCppKm8sbD1YWCpuKyRYKmkqbztLWC5hZGQoenEoR3EoYSphK3MqcyksbCkpLFlYPXQsWFg9biwkWD1pfWZ1bmN0aW9uIG4kKHQpe3JldHVybiBLWC5yZXNldCgpLGVZKHQsWlgpLCtLWH12YXIgaSQ9W251bGwsbnVsbF0sciQ9e3R5cGU6IkxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOmkkfTtmdW5jdGlvbiBvJCh0LGUpe3JldHVybiBpJFswXT10LGkkWzFdPWUsbiQociQpfXZhciBhJD17RmVhdHVyZTpmdW5jdGlvbih0LGUpe3JldHVybiBsJCh0Lmdlb21ldHJ5LGUpfSxGZWF0dXJlQ29sbGVjdGlvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmZlYXR1cmVzLGk9LTEscj1uLmxlbmd0aDsrK2k8cjspaWYobCQobltpXS5nZW9tZXRyeSxlKSlyZXR1cm4hMDtyZXR1cm4hMX19LHMkPXtTcGhlcmU6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sUG9pbnQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gYyQodC5jb29yZGluYXRlcyxlKX0sTXVsdGlQb2ludDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmNvb3JkaW5hdGVzLGk9LTEscj1uLmxlbmd0aDsrK2k8cjspaWYoYyQobltpXSxlKSlyZXR1cm4hMDtyZXR1cm4hMX0sTGluZVN0cmluZzpmdW5jdGlvbih0LGUpe3JldHVybiB1JCh0LmNvb3JkaW5hdGVzLGUpfSxNdWx0aUxpbmVTdHJpbmc6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5jb29yZGluYXRlcyxpPS0xLHI9bi5sZW5ndGg7KytpPHI7KWlmKHUkKG5baV0sZSkpcmV0dXJuITA7cmV0dXJuITF9LFBvbHlnb246ZnVuY3Rpb24odCxlKXtyZXR1cm4gaCQodC5jb29yZGluYXRlcyxlKX0sTXVsdGlQb2x5Z29uOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXQuY29vcmRpbmF0ZXMsaT0tMSxyPW4ubGVuZ3RoOysraTxyOylpZihoJChuW2ldLGUpKXJldHVybiEwO3JldHVybiExfSxHZW9tZXRyeUNvbGxlY3Rpb246ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5nZW9tZXRyaWVzLGk9LTEscj1uLmxlbmd0aDsrK2k8cjspaWYobCQobltpXSxlKSlyZXR1cm4hMDtyZXR1cm4hMX19O2Z1bmN0aW9uIGwkKHQsZSl7cmV0dXJuISghdHx8IXMkLmhhc093blByb3BlcnR5KHQudHlwZSkpJiZzJFt0LnR5cGVdKHQsZSl9ZnVuY3Rpb24gYyQodCxlKXtyZXR1cm4gMD09PW8kKHQsZSl9ZnVuY3Rpb24gdSQodCxlKXt2YXIgbj1vJCh0WzBdLHRbMV0pO3JldHVybiBvJCh0WzBdLGUpK28kKGUsdFsxXSk8PW4rQ3F9ZnVuY3Rpb24gaCQodCxlKXtyZXR1cm4hIU5YKHQubWFwKGQkKSxwJChlKSl9ZnVuY3Rpb24gZCQodCl7cmV0dXJuKHQ9dC5tYXAocCQpKS5wb3AoKSx0fWZ1bmN0aW9uIHAkKHQpe3JldHVyblt0WzBdKklxLHRbMV0qSXFdfWZ1bmN0aW9uIGYkKHQsZSxuKXt2YXIgaT1PWCh0LGUtQ3EsbikuY29uY2F0KGUpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gaS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVyblt0LGVdfSkpfX1mdW5jdGlvbiBtJCh0LGUsbil7dmFyIGk9T1godCxlLUNxLG4pLmNvbmNhdChlKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGkubWFwKChmdW5jdGlvbihlKXtyZXR1cm5bZSx0XX0pKX19ZnVuY3Rpb24gZyQoKXt2YXIgdCxlLG4saSxyLG8sYSxzLGwsYyx1LGgsZD0xMCxwPWQsZj05MCxtPTM2MCxnPTIuNTtmdW5jdGlvbiBfKCl7cmV0dXJue3R5cGU6Ik11bHRpTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6eSgpfX1mdW5jdGlvbiB5KCl7cmV0dXJuIE9YKEJxKGkvZikqZixuLGYpLm1hcCh1KS5jb25jYXQoT1goQnEocy9tKSptLGEsbSkubWFwKGgpKS5jb25jYXQoT1goQnEoZS9kKSpkLHQsZCkuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gT3EodCVmKT5DcX0pKS5tYXAobCkpLmNvbmNhdChPWChCcShvL3ApKnAscixwKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBPcSh0JW0pPkNxfSkpLm1hcChjKSl9cmV0dXJuIF8ubGluZXM9ZnVuY3Rpb24oKXtyZXR1cm4geSgpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJue3R5cGU6IkxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOnR9fSkpfSxfLm91dGxpbmU9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W3UoaSkuY29uY2F0KGgoYSkuc2xpY2UoMSksdShuKS5yZXZlcnNlKCkuc2xpY2UoMSksaChzKS5yZXZlcnNlKCkuc2xpY2UoMSkpXX19LF8uZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP18uZXh0ZW50TWFqb3IodCkuZXh0ZW50TWlub3IodCk6Xy5leHRlbnRNaW5vcigpfSxfLmV4dGVudE1ham9yPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSt0WzBdWzFdLGE9K3RbMV1bMV0sKGk9K3RbMF1bMF0pPihuPSt0WzFdWzBdKSYmKHQ9aSxpPW4sbj10KSxzPmEmJih0PXMscz1hLGE9dCksXy5wcmVjaXNpb24oZykpOltbaSxzXSxbbixhXV19LF8uZXh0ZW50TWlub3I9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89K25bMF1bMV0scj0rblsxXVsxXSwoZT0rblswXVswXSk+KHQ9K25bMV1bMF0pJiYobj1lLGU9dCx0PW4pLG8+ciYmKG49byxvPXIscj1uKSxfLnByZWNpc2lvbihnKSk6W1tlLG9dLFt0LHJdXX0sXy5zdGVwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP18uc3RlcE1ham9yKHQpLnN0ZXBNaW5vcih0KTpfLnN0ZXBNaW5vcigpfSxfLnN0ZXBNYWpvcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0rdFswXSxtPSt0WzFdLF8pOltmLG1dfSxfLnN0ZXBNaW5vcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0rdFswXSxwPSt0WzFdLF8pOltkLHBdfSxfLnByZWNpc2lvbj1mdW5jdGlvbihkKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz0rZCxsPWYkKG8sciw5MCksYz1tJChlLHQsZyksdT1mJChzLGEsOTApLGg9bSQoaSxuLGcpLF8pOmd9LF8uZXh0ZW50TWFqb3IoW1stMTgwLC04OS45OTk5OTldLFsxODAsODkuOTk5OTk5XV0pLmV4dGVudE1pbm9yKFtbLTE4MCwtODAuMDAwMDAxXSxbMTgwLDgwLjAwMDAwMV1dKX1mdW5jdGlvbiBfJCh0KXtyZXR1cm4gdH12YXIgeSQsdiQsYiQseCQsdyQ9U3EoKSxTJD1TcSgpLE0kPXtwb2ludDokcSxsaW5lU3RhcnQ6JHEsbGluZUVuZDokcSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtNJC5saW5lU3RhcnQ9RSQsTSQubGluZUVuZD1BJH0scG9seWdvbkVuZDpmdW5jdGlvbigpe00kLmxpbmVTdGFydD1NJC5saW5lRW5kPU0kLnBvaW50PSRxLHckLmFkZChPcShTJCkpLFMkLnJlc2V0KCl9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciB0PXckLzI7cmV0dXJuIHckLnJlc2V0KCksdH19O2Z1bmN0aW9uIEUkKCl7TSQucG9pbnQ9VCR9ZnVuY3Rpb24gVCQodCxlKXtNJC5wb2ludD1DJCx5JD1iJD10LHYkPXgkPWV9ZnVuY3Rpb24gQyQodCxlKXtTJC5hZGQoeCQqdC1iJCplKSxiJD10LHgkPWV9ZnVuY3Rpb24gQSQoKXtDJCh5JCx2JCl9dmFyIGskLEwkLFAkLE4kLEkkPTEvMCxPJD1JJCxSJD0tSSQseiQ9UiQsRCQ9e3BvaW50OmZ1bmN0aW9uIEIkKHQsZSl7dDxJJCYmKEkkPXQpLHQ+UiQmJihSJD10KSxlPE8kJiYoTyQ9ZSksZT56JCYmKHokPWUpfSxsaW5lU3RhcnQ6JHEsbGluZUVuZDokcSxwb2x5Z29uU3RhcnQ6JHEscG9seWdvbkVuZDokcSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgdD1bW0kkLE8kXSxbUiQseiRdXTtyZXR1cm4gUiQ9eiQ9LShPJD1JJD0xLzApLHR9fSxIJD0wLEYkPTAsViQ9MCxVJD0wLGokPTAsRyQ9MCxXJD0wLHEkPTAsWSQ9MCxYJD17cG9pbnQ6JCQsbGluZVN0YXJ0OkskLGxpbmVFbmQ6USQscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7WCQubGluZVN0YXJ0PXRLLFgkLmxpbmVFbmQ9ZUt9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtYJC5wb2ludD0kJCxYJC5saW5lU3RhcnQ9SyQsWCQubGluZUVuZD1RJH0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHQ9WSQ/W1ckL1kkLHEkL1kkXTpHJD9bVSQvRyQsaiQvRyRdOlYkP1tIJC9WJCxGJC9WJF06W05hTixOYU5dO3JldHVybiBIJD1GJD1WJD1VJD1qJD1HJD1XJD1xJD1ZJD0wLHR9fTtmdW5jdGlvbiAkJCh0LGUpe0gkKz10LEYkKz1lLCsrViR9ZnVuY3Rpb24gSyQoKXtYJC5wb2ludD1aJH1mdW5jdGlvbiBaJCh0LGUpe1gkLnBvaW50PUokLCQkKFAkPXQsTiQ9ZSl9ZnVuY3Rpb24gSiQodCxlKXt2YXIgbj10LVAkLGk9ZS1OJCxyPUdxKG4qbitpKmkpO1UkKz1yKihQJCt0KS8yLGokKz1yKihOJCtlKS8yLEckKz1yLCQkKFAkPXQsTiQ9ZSl9ZnVuY3Rpb24gUSQoKXtYJC5wb2ludD0kJH1mdW5jdGlvbiB0Sygpe1gkLnBvaW50PW5LfWZ1bmN0aW9uIGVLKCl7aUsoayQsTCQpfWZ1bmN0aW9uIG5LKHQsZSl7WCQucG9pbnQ9aUssJCQoayQ9UCQ9dCxMJD1OJD1lKX1mdW5jdGlvbiBpSyh0LGUpe3ZhciBuPXQtUCQsaT1lLU4kLHI9R3EobipuK2kqaSk7VSQrPXIqKFAkK3QpLzIsaiQrPXIqKE4kK2UpLzIsRyQrPXIsVyQrPShyPU4kKnQtUCQqZSkqKFAkK3QpLHEkKz1yKihOJCtlKSxZJCs9MypyLCQkKFAkPXQsTiQ9ZSl9ZnVuY3Rpb24gcksodCl7dGhpcy5fY29udGV4dD10fXJLLnByb3RvdHlwZT17X3JhZGl1czo0LjUscG9pbnRSYWRpdXM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3JhZGl1cz10LHRoaXN9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0scG9seWdvbkVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7MD09PXRoaXMuX2xpbmUmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fcG9pbnQ9TmFOfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSksdGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTticmVhaztkZWZhdWx0OnRoaXMuX2NvbnRleHQubW92ZVRvKHQrdGhpcy5fcmFkaXVzLGUpLHRoaXMuX2NvbnRleHQuYXJjKHQsZSx0aGlzLl9yYWRpdXMsMCxQcSl9fSxyZXN1bHQ6JHF9O3ZhciBvSyxhSyxzSyxsSyxjSyx1Sz1TcSgpLGhLPXtwb2ludDokcSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtoSy5wb2ludD1kS30sbGluZUVuZDpmdW5jdGlvbigpe29LJiZwSyhhSyxzSyksaEsucG9pbnQ9JHF9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe29LPSEwfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7b0s9bnVsbH0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHQ9K3VLO3JldHVybiB1Sy5yZXNldCgpLHR9fTtmdW5jdGlvbiBkSyh0LGUpe2hLLnBvaW50PXBLLGFLPWxLPXQsc0s9Y0s9ZX1mdW5jdGlvbiBwSyh0LGUpe3VLLmFkZChHcSgobEstPXQpKmxLKyhjSy09ZSkqY0spKSxsSz10LGNLPWV9ZnVuY3Rpb24gZksoKXt0aGlzLl9zdHJpbmc9W119ZnVuY3Rpb24gbUsodCl7cmV0dXJuIm0wLCIrdCsiYSIrdCsiLCIrdCsiIDAgMSwxIDAsIistMip0KyJhIit0KyIsIit0KyIgMCAxLDEgMCwiKzIqdCsieiJ9ZnVuY3Rpb24gZ0sodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPW5ldyBfSztmb3IodmFyIGkgaW4gdCluW2ldPXRbaV07cmV0dXJuIG4uc3RyZWFtPWUsbn19ZnVuY3Rpb24gX0soKXt9ZnVuY3Rpb24geUsodCxlLG4pe3ZhciBpPXQuY2xpcEV4dGVudCYmdC5jbGlwRXh0ZW50KCk7cmV0dXJuIHQuc2NhbGUoMTUwKS50cmFuc2xhdGUoWzAsMF0pLG51bGwhPWkmJnQuY2xpcEV4dGVudChudWxsKSxlWShuLHQuc3RyZWFtKEQkKSksZShEJC5yZXN1bHQoKSksbnVsbCE9aSYmdC5jbGlwRXh0ZW50KGkpLHR9ZnVuY3Rpb24gdksodCxlLG4pe3JldHVybiB5Syh0LChmdW5jdGlvbihuKXt2YXIgaT1lWzFdWzBdLWVbMF1bMF0scj1lWzFdWzFdLWVbMF1bMV0sbz1NYXRoLm1pbihpLyhuWzFdWzBdLW5bMF1bMF0pLHIvKG5bMV1bMV0tblswXVsxXSkpLGE9K2VbMF1bMF0rKGktbyooblsxXVswXStuWzBdWzBdKSkvMixzPStlWzBdWzFdKyhyLW8qKG5bMV1bMV0rblswXVsxXSkpLzI7dC5zY2FsZSgxNTAqbykudHJhbnNsYXRlKFthLHNdKX0pLG4pfWZ1bmN0aW9uIGJLKHQsZSxuKXtyZXR1cm4gdksodCxbWzAsMF0sZV0sbil9ZnVuY3Rpb24geEsodCxlLG4pe3JldHVybiB5Syh0LChmdW5jdGlvbihuKXt2YXIgaT0rZSxyPWkvKG5bMV1bMF0tblswXVswXSksbz0oaS1yKihuWzFdWzBdK25bMF1bMF0pKS8yLGE9LXIqblswXVsxXTt0LnNjYWxlKDE1MCpyKS50cmFuc2xhdGUoW28sYV0pfSksbil9ZnVuY3Rpb24gd0sodCxlLG4pe3JldHVybiB5Syh0LChmdW5jdGlvbihuKXt2YXIgaT0rZSxyPWkvKG5bMV1bMV0tblswXVsxXSksbz0tcipuWzBdWzBdLGE9KGktciooblsxXVsxXStuWzBdWzFdKSkvMjt0LnNjYWxlKDE1MCpyKS50cmFuc2xhdGUoW28sYV0pfSksbil9ZksucHJvdG90eXBlPXtfcmFkaXVzOjQuNSxfY2lyY2xlOm1LKDQuNSkscG9pbnRSYWRpdXM6ZnVuY3Rpb24odCl7cmV0dXJuKHQ9K3QpIT09dGhpcy5fcmFkaXVzJiYodGhpcy5fcmFkaXVzPXQsdGhpcy5fY2lyY2xlPW51bGwpLHRoaXN9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0scG9seWdvbkVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7MD09PXRoaXMuX2xpbmUmJnRoaXMuX3N0cmluZy5wdXNoKCJaIiksdGhpcy5fcG9pbnQ9TmFOfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3N0cmluZy5wdXNoKCJNIix0LCIsIixlKSx0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9zdHJpbmcucHVzaCgiTCIsdCwiLCIsZSk7YnJlYWs7ZGVmYXVsdDpudWxsPT10aGlzLl9jaXJjbGUmJih0aGlzLl9jaXJjbGU9bUsodGhpcy5fcmFkaXVzKSksdGhpcy5fc3RyaW5nLnB1c2goIk0iLHQsIiwiLGUsdGhpcy5fY2lyY2xlKX19LHJlc3VsdDpmdW5jdGlvbigpe2lmKHRoaXMuX3N0cmluZy5sZW5ndGgpe3ZhciB0PXRoaXMuX3N0cmluZy5qb2luKCIiKTtyZXR1cm4gdGhpcy5fc3RyaW5nPVtdLHR9cmV0dXJuIG51bGx9fSxfSy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOl9LLHBvaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy5zdHJlYW0ucG9pbnQodCxlKX0sc3BoZXJlOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnBvbHlnb25FbmQoKX19O3ZhciBTSz1EcSgzMCpJcSk7ZnVuY3Rpb24gTUsodCxlKXtyZXR1cm4rZT8oZnVuY3Rpb24gbih0LGUpe2Z1bmN0aW9uIG4oaSxyLG8sYSxzLGwsYyx1LGgsZCxwLGYsbSxnKXt2YXIgXz1jLWkseT11LXIsdj1fKl8reSp5O2lmKHY+NCplJiZtLS0pe3ZhciBiPWErZCx4PXMrcCx3PWwrZixTPUdxKGIqYit4Kngrdyp3KSxNPVlxKHcvPVMpLEU9T3EoT3EodyktMSk8Q3F8fE9xKG8taCk8Q3E/KG8raCkvMjp6cSh4LGIpLFQ9dChFLE0pLEM9VFswXSxBPVRbMV0saz1DLWksTD1BLXIsUD15KmstXypMOyhQKlAvdj5lfHxPcSgoXyprK3kqTCkvdi0uNSk+LjN8fGEqZCtzKnArbCpmPFNLKSYmKG4oaSxyLG8sYSxzLGwsQyxBLEUsYi89Uyx4Lz1TLHcsbSxnKSxnLnBvaW50KEMsQSksbihDLEEsRSxiLHgsdyxjLHUsaCxkLHAsZixtLGcpKX19cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBpLHIsbyxhLHMsbCxjLHUsaCxkLHAsZixtPXtwb2ludDpnLGxpbmVTdGFydDpfLGxpbmVFbmQ6dixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtlLnBvbHlnb25TdGFydCgpLG0ubGluZVN0YXJ0PWJ9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtlLnBvbHlnb25FbmQoKSxtLmxpbmVTdGFydD1ffX07ZnVuY3Rpb24gZyhuLGkpe249dChuLGkpLGUucG9pbnQoblswXSxuWzFdKX1mdW5jdGlvbiBfKCl7dT1OYU4sbS5wb2ludD15LGUubGluZVN0YXJ0KCl9ZnVuY3Rpb24geShpLHIpe3ZhciBvPW1ZKFtpLHJdKSxhPXQoaSxyKTtuKHUsaCxjLGQscCxmLHU9YVswXSxoPWFbMV0sYz1pLGQ9b1swXSxwPW9bMV0sZj1vWzJdLDE2LGUpLGUucG9pbnQodSxoKX1mdW5jdGlvbiB2KCl7bS5wb2ludD1nLGUubGluZUVuZCgpfWZ1bmN0aW9uIGIoKXtfKCksbS5wb2ludD14LG0ubGluZUVuZD13fWZ1bmN0aW9uIHgodCxlKXt5KGk9dCxlKSxyPXUsbz1oLGE9ZCxzPXAsbD1mLG0ucG9pbnQ9eX1mdW5jdGlvbiB3KCl7bih1LGgsYyxkLHAsZixyLG8saSxhLHMsbCwxNixlKSxtLmxpbmVFbmQ9dix2KCl9cmV0dXJuIG19fSkodCxlKTooZnVuY3Rpb24gaSh0KXtyZXR1cm4gZ0soe3BvaW50OmZ1bmN0aW9uKGUsbil7ZT10KGUsbiksdGhpcy5zdHJlYW0ucG9pbnQoZVswXSxlWzFdKX19KX0pKHQpfXZhciBFSz1nSyh7cG9pbnQ6ZnVuY3Rpb24odCxlKXt0aGlzLnN0cmVhbS5wb2ludCh0KklxLGUqSXEpfX0pO2Z1bmN0aW9uIFRLKHQpe3JldHVybiBDSygoZnVuY3Rpb24oKXtyZXR1cm4gdH0pKSgpfWZ1bmN0aW9uIENLKHQpe3ZhciBlLG4saSxyLG8sYSxzLGwsYyx1LGg9MTUwLGQ9NDgwLHA9MjUwLGY9MCxtPTAsZz0wLF89MCx5PTAsdj1udWxsLGI9RlgseD1udWxsLHc9XyQsUz0uNSxNPU1LKEMsUyk7ZnVuY3Rpb24gRSh0KXtyZXR1cm5bKHQ9byh0WzBdKklxLHRbMV0qSXEpKVswXSpoK24saS10WzFdKmhdfWZ1bmN0aW9uIFQodCl7cmV0dXJuKHQ9by5pbnZlcnQoKHRbMF0tbikvaCwoaS10WzFdKS9oKSkmJlt0WzBdKk5xLHRbMV0qTnFdfWZ1bmN0aW9uIEModCxyKXtyZXR1cm5bKHQ9ZSh0LHIpKVswXSpoK24saS10WzFdKmhdfWZ1bmN0aW9uIEEoKXtvPV9YKHI9dlgoZyxfLHkpLGUpO3ZhciB0PWUoZixtKTtyZXR1cm4gbj1kLXRbMF0qaCxpPXArdFsxXSpoLGsoKX1mdW5jdGlvbiBrKCl7cmV0dXJuIGM9dT1udWxsLEV9cmV0dXJuIEUuc3RyZWFtPWZ1bmN0aW9uKHQpe3JldHVybiBjJiZ1PT09dD9jOmM9RUsoKGZ1bmN0aW9uIGUodCl7cmV0dXJuIGdLKHtwb2ludDpmdW5jdGlvbihlLG4pe3ZhciBpPXQoZSxuKTtyZXR1cm4gdGhpcy5zdHJlYW0ucG9pbnQoaVswXSxpWzFdKX19KX0pKHIpKGIoTSh3KHU9dCkpKSkpfSxFLnByZWNsaXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGI9dCx2PXZvaWQgMCxrKCkpOmJ9LEUucG9zdGNsaXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHc9dCx4PWE9cz1sPW51bGwsaygpKTp3fSxFLmNsaXBBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj0rdD9qWCh2PXQqSXEpOih2PW51bGwsRlgpLGsoKSk6dipOcX0sRS5jbGlwRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh3PW51bGw9PXQ/KHg9YT1zPWw9bnVsbCxfJCk6cVgoeD0rdFswXVswXSxhPSt0WzBdWzFdLHM9K3RbMV1bMF0sbD0rdFsxXVsxXSksaygpKTpudWxsPT14P251bGw6W1t4LGFdLFtzLGxdXX0sRS5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0rdCxBKCkpOmh9LEUudHJhbnNsYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPSt0WzBdLHA9K3RbMV0sQSgpKTpbZCxwXX0sRS5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9dFswXSUzNjAqSXEsbT10WzFdJTM2MCpJcSxBKCkpOltmKk5xLG0qTnFdfSxFLnJvdGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz10WzBdJTM2MCpJcSxfPXRbMV0lMzYwKklxLHk9dC5sZW5ndGg+Mj90WzJdJTM2MCpJcTowLEEoKSk6W2cqTnEsXypOcSx5Kk5xXX0sRS5wcmVjaXNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KE09TUsoQyxTPXQqdCksaygpKTpHcShTKX0sRS5maXRFeHRlbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdksoRSx0LGUpfSxFLmZpdFNpemU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYksoRSx0LGUpfSxFLmZpdFdpZHRoPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHhLKEUsdCxlKX0sRS5maXRIZWlnaHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gd0soRSx0LGUpfSxmdW5jdGlvbigpe3JldHVybiBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLEUuaW52ZXJ0PWUuaW52ZXJ0JiZULEEoKX19ZnVuY3Rpb24gQUsodCl7dmFyIGU9MCxuPUFxLzMsaT1DSyh0KSxyPWkoZSxuKTtyZXR1cm4gci5wYXJhbGxlbHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/aShlPXRbMF0qSXEsbj10WzFdKklxKTpbZSpOcSxuKk5xXX0scn1mdW5jdGlvbiBrSyh0LGUpe3ZhciBuPVVxKHQpLGk9KG4rVXEoZSkpLzI7aWYoT3EoaSk8Q3EpcmV0dXJuKGZ1bmN0aW9uIHIodCl7dmFyIGU9RHEodCk7ZnVuY3Rpb24gbih0LG4pe3JldHVyblt0KmUsVXEobikvZV19cmV0dXJuIG4uaW52ZXJ0PWZ1bmN0aW9uKHQsbil7cmV0dXJuW3QvZSxZcShuKmUpXX0sbn0pKHQpO3ZhciBvPTErbiooMippLW4pLGE9R3EobykvaTtmdW5jdGlvbiBzKHQsZSl7dmFyIG49R3Eoby0yKmkqVXEoZSkpL2k7cmV0dXJuW24qVXEodCo9aSksYS1uKkRxKHQpXX1yZXR1cm4gcy5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1hLWU7cmV0dXJuW3pxKHQsT3EobikpL2kqanEobiksWXEoKG8tKHQqdCtuKm4pKmkqaSkvKDIqaSkpXX0sc31mdW5jdGlvbiBMSygpe3JldHVybiBBSyhrSykuc2NhbGUoMTU1LjQyNCkuY2VudGVyKFswLDMzLjY0NDJdKX1mdW5jdGlvbiBQSygpe3JldHVybiBMSygpLnBhcmFsbGVscyhbMjkuNSw0NS41XSkuc2NhbGUoMTA3MCkudHJhbnNsYXRlKFs0ODAsMjUwXSkucm90YXRlKFs5NiwwXSkuY2VudGVyKFstLjYsMzguN10pfWZ1bmN0aW9uIE5LKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3ZhciBpPURxKGUpLHI9RHEobiksbz10KGkqcik7cmV0dXJuW28qcipVcShlKSxvKlVxKG4pXX19ZnVuY3Rpb24gSUsodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7dmFyIGk9R3EoZSplK24qbikscj10KGkpLG89VXEociksYT1EcShyKTtyZXR1cm5benEoZSpvLGkqYSksWXEoaSYmbipvL2kpXX19dmFyIE9LPU5LKChmdW5jdGlvbih0KXtyZXR1cm4gR3EoMi8oMSt0KSl9KSk7T0suaW52ZXJ0PUlLKChmdW5jdGlvbih0KXtyZXR1cm4gMipZcSh0LzIpfSkpO3ZhciBSSz1OSygoZnVuY3Rpb24odCl7cmV0dXJuKHQ9cXEodCkpJiZ0L1VxKHQpfSkpO2Z1bmN0aW9uIHpLKHQsZSl7cmV0dXJuW3QsRnEoV3EoKGtxK2UpLzIpKV19ZnVuY3Rpb24gREsodCl7dmFyIGUsbixpLHI9VEsodCksbz1yLmNlbnRlcixhPXIuc2NhbGUscz1yLnRyYW5zbGF0ZSxsPXIuY2xpcEV4dGVudCxjPW51bGw7ZnVuY3Rpb24gdSgpe3ZhciBvPUFxKmEoKSxzPXIoU1goci5yb3RhdGUoKSkuaW52ZXJ0KFswLDBdKSk7cmV0dXJuIGwobnVsbD09Yz9bW3NbMF0tbyxzWzFdLW9dLFtzWzBdK28sc1sxXStvXV06dD09PXpLP1tbTWF0aC5tYXgoc1swXS1vLGMpLGVdLFtNYXRoLm1pbihzWzBdK28sbiksaV1dOltbYyxNYXRoLm1heChzWzFdLW8sZSldLFtuLE1hdGgubWluKHNbMV0rbyxpKV1dKX1yZXR1cm4gci5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYSh0KSx1KCkpOmEoKX0sci50cmFuc2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHModCksdSgpKTpzKCl9LHIuY2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvKHQpLHUoKSk6bygpfSxyLmNsaXBFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/Yz1lPW49aT1udWxsOihjPSt0WzBdWzBdLGU9K3RbMF1bMV0sbj0rdFsxXVswXSxpPSt0WzFdWzFdKSx1KCkpOm51bGw9PWM/bnVsbDpbW2MsZV0sW24saV1dfSx1KCl9ZnVuY3Rpb24gQksodCl7cmV0dXJuIFdxKChrcSt0KS8yKX1mdW5jdGlvbiBISyh0LGUpe3ZhciBuPURxKHQpLGk9dD09PWU/VXEodCk6RnEobi9EcShlKSkvRnEoQksoZSkvQksodCkpLHI9bipWcShCSyh0KSxpKS9pO2lmKCFpKXJldHVybiB6SztmdW5jdGlvbiBvKHQsZSl7cj4wP2U8LWtxK0NxJiYoZT0ta3ErQ3EpOmU+a3EtQ3EmJihlPWtxLUNxKTt2YXIgbj1yL1ZxKEJLKGUpLGkpO3JldHVybltuKlVxKGkqdCksci1uKkRxKGkqdCldfXJldHVybiBvLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciBuPXItZSxvPWpxKGkpKkdxKHQqdCtuKm4pO3JldHVyblt6cSh0LE9xKG4pKS9pKmpxKG4pLDIqUnEoVnEoci9vLDEvaSkpLWtxXX0sb31mdW5jdGlvbiBGSyh0LGUpe3JldHVyblt0LGVdfWZ1bmN0aW9uIFZLKHQsZSl7dmFyIG49RHEodCksaT10PT09ZT9VcSh0KToobi1EcShlKSkvKGUtdCkscj1uL2krdDtpZihPcShpKTxDcSlyZXR1cm4gRks7ZnVuY3Rpb24gbyh0LGUpe3ZhciBuPXItZSxvPWkqdDtyZXR1cm5bbipVcShvKSxyLW4qRHEobyldfXJldHVybiBvLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciBuPXItZTtyZXR1cm5benEodCxPcShuKSkvaSpqcShuKSxyLWpxKGkpKkdxKHQqdCtuKm4pXX0sb31mdW5jdGlvbiBVSyh0LGUpe3ZhciBuPURxKGUpLGk9RHEodCkqbjtyZXR1cm5bbipVcSh0KS9pLFVxKGUpL2ldfWZ1bmN0aW9uIGpLKHQsZSxuLGkpe3JldHVybiAxPT09dCYmMT09PWUmJjA9PT1uJiYwPT09aT9fJDpnSyh7cG9pbnQ6ZnVuY3Rpb24ocixvKXt0aGlzLnN0cmVhbS5wb2ludChyKnQrbixvKmUraSl9fSl9ZnVuY3Rpb24gR0sodCxlKXt2YXIgbj1lKmUsaT1uKm47cmV0dXJuW3QqKC44NzA3LS4xMzE5NzkqbitpKihpKiguMDAzOTcxKm4tLjAwMTUyOSppKS0uMDEzNzkxKSksZSooMS4wMDcyMjYrbiooLjAxNTA4NStpKiguMDI4ODc0Km4tLjA0NDQ3NS0uMDA1OTE2KmkpKSldfWZ1bmN0aW9uIFdLKHQsZSl7cmV0dXJuW0RxKGUpKlVxKHQpLFVxKGUpXX1mdW5jdGlvbiBxSyh0LGUpe3ZhciBuPURxKGUpLGk9MStEcSh0KSpuO3JldHVybltuKlVxKHQpL2ksVXEoZSkvaV19ZnVuY3Rpb24gWUsodCxlKXtyZXR1cm5bRnEoV3EoKGtxK2UpLzIpKSwtdF19ZnVuY3Rpb24gWEsodCxlKXtyZXR1cm4gdC5wYXJlbnQ9PT1lLnBhcmVudD8xOjJ9ZnVuY3Rpb24gJEsodCxlKXtyZXR1cm4gdCtlLnh9ZnVuY3Rpb24gS0sodCxlKXtyZXR1cm4gTWF0aC5tYXgodCxlLnkpfWZ1bmN0aW9uIFpLKHQpe3ZhciBlPTAsbj10LmNoaWxkcmVuLGk9biYmbi5sZW5ndGg7aWYoaSlmb3IoOy0taT49MDspZSs9bltpXS52YWx1ZTtlbHNlIGU9MTt0LnZhbHVlPWV9ZnVuY3Rpb24gSksodCxlKXt2YXIgbixpLHIsbyxhLHM9bmV3IG5aKHQpLGw9K3QudmFsdWUmJihzLnZhbHVlPXQudmFsdWUpLGM9W3NdO2ZvcihudWxsPT1lJiYoZT1RSyk7bj1jLnBvcCgpOylpZihsJiYobi52YWx1ZT0rbi5kYXRhLnZhbHVlKSwocj1lKG4uZGF0YSkpJiYoYT1yLmxlbmd0aCkpZm9yKG4uY2hpbGRyZW49bmV3IEFycmF5KGEpLG89YS0xO28+PTA7LS1vKWMucHVzaChpPW4uY2hpbGRyZW5bb109bmV3IG5aKHJbb10pKSxpLnBhcmVudD1uLGkuZGVwdGg9bi5kZXB0aCsxO3JldHVybiBzLmVhY2hCZWZvcmUoZVopfWZ1bmN0aW9uIFFLKHQpe3JldHVybiB0LmNoaWxkcmVufWZ1bmN0aW9uIHRaKHQpe3QuZGF0YT10LmRhdGEuZGF0YX1mdW5jdGlvbiBlWih0KXt2YXIgZT0wO2Rve3QuaGVpZ2h0PWV9d2hpbGUoKHQ9dC5wYXJlbnQpJiZ0LmhlaWdodDwrK2UpfWZ1bmN0aW9uIG5aKHQpe3RoaXMuZGF0YT10LHRoaXMuZGVwdGg9dGhpcy5oZWlnaHQ9MCx0aGlzLnBhcmVudD1udWxsfVJLLmludmVydD1JSygoZnVuY3Rpb24odCl7cmV0dXJuIHR9KSkseksuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuW3QsMipScShIcShlKSkta3FdfSxGSy5pbnZlcnQ9RkssVUsuaW52ZXJ0PUlLKFJxKSxHSy5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgbixpPWUscj0yNTtkb3t2YXIgbz1pKmksYT1vKm87aS09bj0oaSooMS4wMDcyMjYrbyooLjAxNTA4NSthKiguMDI4ODc0Km8tLjA0NDQ3NS0uMDA1OTE2KmEpKSktZSkvKDEuMDA3MjI2K28qKC4wNDUyNTUrYSooLjI1OTg2NipvLS4zMTEzMjUtLjAwNTkxNioxMSphKSkpfXdoaWxlKE9xKG4pPkNxJiYtLXI+MCk7cmV0dXJuW3QvKC44NzA3KyhvPWkqaSkqKG8qKG8qbypvKiguMDAzOTcxLS4wMDE1MjkqbyktLjAxMzc5MSktLjEzMTk3OSkpLGldfSxXSy5pbnZlcnQ9SUsoWXEpLHFLLmludmVydD1JSygoZnVuY3Rpb24odCl7cmV0dXJuIDIqUnEodCl9KSksWUsuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuWy1lLDIqUnEoSHEodCkpLWtxXX0sbloucHJvdG90eXBlPUpLLnByb3RvdHlwZT17Y29uc3RydWN0b3I6blosY291bnQ6ZnVuY3Rpb24gaVooKXtyZXR1cm4gdGhpcy5lYWNoQWZ0ZXIoWkspfSxlYWNoOmZ1bmN0aW9uIHJaKHQpe3ZhciBlLG4saSxyLG89dGhpcyxhPVtvXTtkb3tmb3IoZT1hLnJldmVyc2UoKSxhPVtdO289ZS5wb3AoKTspaWYodChvKSxuPW8uY2hpbGRyZW4pZm9yKGk9MCxyPW4ubGVuZ3RoO2k8cjsrK2kpYS5wdXNoKG5baV0pfXdoaWxlKGEubGVuZ3RoKTtyZXR1cm4gdGhpc30sZWFjaEFmdGVyOmZ1bmN0aW9uIG9aKHQpe2Zvcih2YXIgZSxuLGkscj10aGlzLG89W3JdLGE9W107cj1vLnBvcCgpOylpZihhLnB1c2gociksZT1yLmNoaWxkcmVuKWZvcihuPTAsaT1lLmxlbmd0aDtuPGk7KytuKW8ucHVzaChlW25dKTtmb3IoO3I9YS5wb3AoKTspdChyKTtyZXR1cm4gdGhpc30sZWFjaEJlZm9yZTpmdW5jdGlvbiBhWih0KXtmb3IodmFyIGUsbixpPXRoaXMscj1baV07aT1yLnBvcCgpOylpZih0KGkpLGU9aS5jaGlsZHJlbilmb3Iobj1lLmxlbmd0aC0xO24+PTA7LS1uKXIucHVzaChlW25dKTtyZXR1cm4gdGhpc30sc3VtOmZ1bmN0aW9uIHNaKHQpe3JldHVybiB0aGlzLmVhY2hBZnRlcigoZnVuY3Rpb24oZSl7Zm9yKHZhciBuPSt0KGUuZGF0YSl8fDAsaT1lLmNoaWxkcmVuLHI9aSYmaS5sZW5ndGg7LS1yPj0wOyluKz1pW3JdLnZhbHVlO2UudmFsdWU9bn0pKX0sc29ydDpmdW5jdGlvbiBsWih0KXtyZXR1cm4gdGhpcy5lYWNoQmVmb3JlKChmdW5jdGlvbihlKXtlLmNoaWxkcmVuJiZlLmNoaWxkcmVuLnNvcnQodCl9KSl9LHBhdGg6ZnVuY3Rpb24gY1oodCl7Zm9yKHZhciBlPXRoaXMsbj0oZnVuY3Rpb24gaSh0LGUpe2lmKHQ9PT1lKXJldHVybiB0O3ZhciBuPXQuYW5jZXN0b3JzKCksaT1lLmFuY2VzdG9ycygpLHI9bnVsbDtmb3IodD1uLnBvcCgpLGU9aS5wb3AoKTt0PT09ZTspcj10LHQ9bi5wb3AoKSxlPWkucG9wKCk7cmV0dXJuIHJ9KShlLHQpLHI9W2VdO2UhPT1uOylyLnB1c2goZT1lLnBhcmVudCk7Zm9yKHZhciBvPXIubGVuZ3RoO3QhPT1uOylyLnNwbGljZShvLDAsdCksdD10LnBhcmVudDtyZXR1cm4gcn0sYW5jZXN0b3JzOmZ1bmN0aW9uIHVaKCl7Zm9yKHZhciB0PXRoaXMsZT1bdF07dD10LnBhcmVudDspZS5wdXNoKHQpO3JldHVybiBlfSxkZXNjZW5kYW50czpmdW5jdGlvbiBoWigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmVhY2goKGZ1bmN0aW9uKGUpe3QucHVzaChlKX0pKSx0fSxsZWF2ZXM6ZnVuY3Rpb24gZFooKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5lYWNoQmVmb3JlKChmdW5jdGlvbihlKXtlLmNoaWxkcmVufHx0LnB1c2goZSl9KSksdH0sbGlua3M6ZnVuY3Rpb24gcFooKXt2YXIgdD10aGlzLGU9W107cmV0dXJuIHQuZWFjaCgoZnVuY3Rpb24obil7biE9PXQmJmUucHVzaCh7c291cmNlOm4ucGFyZW50LHRhcmdldDpufSl9KSksZX0sY29weTpmdW5jdGlvbiBmWigpe3JldHVybiBKSyh0aGlzKS5lYWNoQmVmb3JlKHRaKX19O3ZhciBtWj1BcnJheS5wcm90b3R5cGUuc2xpY2U7ZnVuY3Rpb24gZ1oodCl7Zm9yKHZhciBlLG4saT0wLHI9KHQ9KGZ1bmN0aW9uIG8odCl7Zm9yKHZhciBlLG4saT10Lmxlbmd0aDtpOyluPU1hdGgucmFuZG9tKCkqaS0tfDAsZT10W2ldLHRbaV09dFtuXSx0W25dPWU7cmV0dXJuIHR9KShtWi5jYWxsKHQpKSkubGVuZ3RoLGE9W107aTxyOyllPXRbaV0sbiYmdloobixlKT8rK2k6KG49eFooYT1fWihhLGUpKSxpPTApO3JldHVybiBufWZ1bmN0aW9uIF9aKHQsZSl7dmFyIG4saTtpZihiWihlLHQpKXJldHVybltlXTtmb3Iobj0wO248dC5sZW5ndGg7KytuKWlmKHlaKGUsdFtuXSkmJmJaKHdaKHRbbl0sZSksdCkpcmV0dXJuW3Rbbl0sZV07Zm9yKG49MDtuPHQubGVuZ3RoLTE7KytuKWZvcihpPW4rMTtpPHQubGVuZ3RoOysraSlpZih5Wih3Wih0W25dLHRbaV0pLGUpJiZ5Wih3Wih0W25dLGUpLHRbaV0pJiZ5Wih3Wih0W2ldLGUpLHRbbl0pJiZiWihTWih0W25dLHRbaV0sZSksdCkpcmV0dXJuW3Rbbl0sdFtpXSxlXTt0aHJvdyBuZXcgRXJyb3J9ZnVuY3Rpb24geVoodCxlKXt2YXIgbj10LnItZS5yLGk9ZS54LXQueCxyPWUueS10Lnk7cmV0dXJuIG48MHx8bipuPGkqaStyKnJ9ZnVuY3Rpb24gdloodCxlKXt2YXIgbj10LnItZS5yKzFlLTYsaT1lLngtdC54LHI9ZS55LXQueTtyZXR1cm4gbj4wJiZuKm4+aSppK3Iqcn1mdW5jdGlvbiBiWih0LGUpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7KytuKWlmKCF2Wih0LGVbbl0pKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIHhaKHQpe3N3aXRjaCh0Lmxlbmd0aCl7Y2FzZSAxOnJldHVybihmdW5jdGlvbiBlKHQpe3JldHVybnt4OnQueCx5OnQueSxyOnQucn19KSh0WzBdKTtjYXNlIDI6cmV0dXJuIHdaKHRbMF0sdFsxXSk7Y2FzZSAzOnJldHVybiBTWih0WzBdLHRbMV0sdFsyXSl9fWZ1bmN0aW9uIHdaKHQsZSl7dmFyIG49dC54LGk9dC55LHI9dC5yLG89ZS54LGE9ZS55LHM9ZS5yLGw9by1uLGM9YS1pLHU9cy1yLGg9TWF0aC5zcXJ0KGwqbCtjKmMpO3JldHVybnt4OihuK28rbC9oKnUpLzIseTooaSthK2MvaCp1KS8yLHI6KGgrcitzKS8yfX1mdW5jdGlvbiBTWih0LGUsbil7dmFyIGk9dC54LHI9dC55LG89dC5yLGE9ZS54LHM9ZS55LGw9ZS5yLGM9bi54LHU9bi55LGg9bi5yLGQ9aS1hLHA9aS1jLGY9ci1zLG09ci11LGc9bC1vLF89aC1vLHk9aSppK3Iqci1vKm8sdj15LWEqYS1zKnMrbCpsLGI9eS1jKmMtdSp1K2gqaCx4PXAqZi1kKm0sdz0oZipiLW0qdikvKDIqeCktaSxTPShtKmctZipfKS94LE09KHAqdi1kKmIpLygyKngpLXIsRT0oZCpfLXAqZykveCxUPVMqUytFKkUtMSxDPTIqKG8rdypTK00qRSksQT13KncrTSpNLW8qbyxrPS0oVD8oQytNYXRoLnNxcnQoQypDLTQqVCpBKSkvKDIqVCk6QS9DKTtyZXR1cm57eDppK3crUyprLHk6citNK0UqayxyOmt9fWZ1bmN0aW9uIE1aKHQsZSxuKXt2YXIgaT10Lngscj10Lnksbz1lLnIrbi5yLGE9dC5yK24ucixzPWUueC1pLGw9ZS55LXIsYz1zKnMrbCpsO2lmKGMpe3ZhciB1PS41KygoYSo9YSktKG8qPW8pKS8oMipjKSxoPU1hdGguc3FydChNYXRoLm1heCgwLDIqbyooYStjKS0oYS09YykqYS1vKm8pKS8oMipjKTtuLng9aSt1KnMraCpsLG4ueT1yK3UqbC1oKnN9ZWxzZSBuLng9aSthLG4ueT1yfWZ1bmN0aW9uIEVaKHQsZSl7dmFyIG49ZS54LXQueCxpPWUueS10Lnkscj10LnIrZS5yO3JldHVybiByKnItMWUtNj5uKm4raSppfWZ1bmN0aW9uIFRaKHQpe3ZhciBlPXQuXyxuPXQubmV4dC5fLGk9ZS5yK24ucixyPShlLngqbi5yK24ueCplLnIpL2ksbz0oZS55Km4ucituLnkqZS5yKS9pO3JldHVybiByKnIrbypvfWZ1bmN0aW9uIENaKHQpe3RoaXMuXz10LHRoaXMubmV4dD1udWxsLHRoaXMucHJldmlvdXM9bnVsbH1mdW5jdGlvbiBBWih0KXtpZighKHI9dC5sZW5ndGgpKXJldHVybiAwO3ZhciBlLG4saSxyLG8sYSxzLGwsYyx1LGg7aWYoKGU9dFswXSkueD0wLGUueT0wLCEocj4xKSlyZXR1cm4gZS5yO2lmKGUueD0tKG49dFsxXSkucixuLng9ZS5yLG4ueT0wLCEocj4yKSlyZXR1cm4gZS5yK24ucjtNWihuLGUsaT10WzJdKSxlPW5ldyBDWihlKSxuPW5ldyBDWihuKSxpPW5ldyBDWihpKSxlLm5leHQ9aS5wcmV2aW91cz1uLG4ubmV4dD1lLnByZXZpb3VzPWksaS5uZXh0PW4ucHJldmlvdXM9ZTt0OmZvcihzPTM7czxyOysrcyl7TVooZS5fLG4uXyxpPXRbc10pLGk9bmV3IENaKGkpLGw9bi5uZXh0LGM9ZS5wcmV2aW91cyx1PW4uXy5yLGg9ZS5fLnI7ZG97aWYodTw9aCl7aWYoRVoobC5fLGkuXykpe2UubmV4dD1uPWwsbi5wcmV2aW91cz1lLC0tcztjb250aW51ZSB0fXUrPWwuXy5yLGw9bC5uZXh0fWVsc2V7aWYoRVooYy5fLGkuXykpeyhlPWMpLm5leHQ9bixuLnByZXZpb3VzPWUsLS1zO2NvbnRpbnVlIHR9aCs9Yy5fLnIsYz1jLnByZXZpb3VzfX13aGlsZShsIT09Yy5uZXh0KTtmb3IoaS5wcmV2aW91cz1lLGkubmV4dD1uLGUubmV4dD1uLnByZXZpb3VzPW49aSxvPVRaKGUpOyhpPWkubmV4dCkhPT1uOykoYT1UWihpKSk8byYmKGU9aSxvPWEpO249ZS5uZXh0fWZvcihlPVtuLl9dLGk9bjsoaT1pLm5leHQpIT09bjspZS5wdXNoKGkuXyk7Zm9yKGk9Z1ooZSkscz0wO3M8cjsrK3MpKGU9dFtzXSkueC09aS54LGUueS09aS55O3JldHVybiBpLnJ9ZnVuY3Rpb24ga1oodCl7cmV0dXJuIG51bGw9PXQ/bnVsbDpMWih0KX1mdW5jdGlvbiBMWih0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHR9ZnVuY3Rpb24gUFooKXtyZXR1cm4gMH1mdW5jdGlvbiBOWih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gSVoodCl7cmV0dXJuIE1hdGguc3FydCh0LnZhbHVlKX1mdW5jdGlvbiBPWih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7ZS5jaGlsZHJlbnx8KGUucj1NYXRoLm1heCgwLCt0KGUpfHwwKSl9fWZ1bmN0aW9uIFJaKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe2lmKGk9bi5jaGlsZHJlbil7dmFyIGkscixvLGE9aS5sZW5ndGgscz10KG4pKmV8fDA7aWYocylmb3Iocj0wO3I8YTsrK3IpaVtyXS5yKz1zO2lmKG89QVooaSkscylmb3Iocj0wO3I8YTsrK3IpaVtyXS5yLT1zO24ucj1vK3N9fX1mdW5jdGlvbiB6Wih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49ZS5wYXJlbnQ7ZS5yKj10LG4mJihlLng9bi54K3QqZS54LGUueT1uLnkrdCplLnkpfX1mdW5jdGlvbiBEWih0KXt0LngwPU1hdGgucm91bmQodC54MCksdC55MD1NYXRoLnJvdW5kKHQueTApLHQueDE9TWF0aC5yb3VuZCh0LngxKSx0LnkxPU1hdGgucm91bmQodC55MSl9ZnVuY3Rpb24gQloodCxlLG4saSxyKXtmb3IodmFyIG8sYT10LmNoaWxkcmVuLHM9LTEsbD1hLmxlbmd0aCxjPXQudmFsdWUmJihpLWUpL3QudmFsdWU7KytzPGw7KShvPWFbc10pLnkwPW4sby55MT1yLG8ueDA9ZSxvLngxPWUrPW8udmFsdWUqY312YXIgSFo9e2RlcHRoOi0xfSxGWj17fTtmdW5jdGlvbiBWWih0KXtyZXR1cm4gdC5pZH1mdW5jdGlvbiBVWih0KXtyZXR1cm4gdC5wYXJlbnRJZH1mdW5jdGlvbiBqWih0LGUpe3JldHVybiB0LnBhcmVudD09PWUucGFyZW50PzE6Mn1mdW5jdGlvbiBHWih0KXt2YXIgZT10LmNoaWxkcmVuO3JldHVybiBlP2VbMF06dC50fWZ1bmN0aW9uIFdaKHQpe3ZhciBlPXQuY2hpbGRyZW47cmV0dXJuIGU/ZVtlLmxlbmd0aC0xXTp0LnR9ZnVuY3Rpb24gcVoodCxlLG4pe3ZhciBpPW4vKGUuaS10LmkpO2UuYy09aSxlLnMrPW4sdC5jKz1pLGUueis9bixlLm0rPW59ZnVuY3Rpb24gWVoodCxlLG4pe3JldHVybiB0LmEucGFyZW50PT09ZS5wYXJlbnQ/dC5hOm59ZnVuY3Rpb24gWFoodCxlKXt0aGlzLl89dCx0aGlzLnBhcmVudD1udWxsLHRoaXMuY2hpbGRyZW49bnVsbCx0aGlzLkE9bnVsbCx0aGlzLmE9dGhpcyx0aGlzLno9MCx0aGlzLm09MCx0aGlzLmM9MCx0aGlzLnM9MCx0aGlzLnQ9bnVsbCx0aGlzLmk9ZX1mdW5jdGlvbiAkWih0LGUsbixpLHIpe2Zvcih2YXIgbyxhPXQuY2hpbGRyZW4scz0tMSxsPWEubGVuZ3RoLGM9dC52YWx1ZSYmKHItbikvdC52YWx1ZTsrK3M8bDspKG89YVtzXSkueDA9ZSxvLngxPWksby55MD1uLG8ueTE9bis9by52YWx1ZSpjfVhaLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG5aLnByb3RvdHlwZSk7dmFyIEtaPSgxK01hdGguc3FydCg1KSkvMjtmdW5jdGlvbiBaWih0LGUsbixpLHIsbyl7Zm9yKHZhciBhLHMsbCxjLHUsaCxkLHAsZixtLGcsXz1bXSx5PWUuY2hpbGRyZW4sdj0wLGI9MCx4PXkubGVuZ3RoLHc9ZS52YWx1ZTt2PHg7KXtsPXItbixjPW8taTtkb3t1PXlbYisrXS52YWx1ZX13aGlsZSghdSYmYjx4KTtmb3IoaD1kPXUsZz11KnUqKG09TWF0aC5tYXgoYy9sLGwvYykvKHcqdCkpLGY9TWF0aC5tYXgoZC9nLGcvaCk7Yjx4OysrYil7aWYodSs9cz15W2JdLnZhbHVlLHM8aCYmKGg9cykscz5kJiYoZD1zKSxnPXUqdSptLChwPU1hdGgubWF4KGQvZyxnL2gpKT5mKXt1LT1zO2JyZWFrfWY9cH1fLnB1c2goYT17dmFsdWU6dSxkaWNlOmw8YyxjaGlsZHJlbjp5LnNsaWNlKHYsYil9KSxhLmRpY2U/QlooYSxuLGkscix3P2krPWMqdS93Om8pOiRaKGEsbixpLHc/bis9bCp1L3c6cixvKSx3LT11LHY9Yn1yZXR1cm4gX312YXIgSlo9KGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0LG4saSxyLG8pe1paKGUsdCxuLGkscixvKX1yZXR1cm4gbi5yYXRpbz1mdW5jdGlvbihlKXtyZXR1cm4gdCgoZT0rZSk+MT9lOjEpfSxufSkoS1opLFFaPShmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCxuLGkscixvKXtpZigoYT10Ll9zcXVhcmlmeSkmJmEucmF0aW89PT1lKWZvcih2YXIgYSxzLGwsYyx1LGg9LTEsZD1hLmxlbmd0aCxwPXQudmFsdWU7KytoPGQ7KXtmb3IobD0ocz1hW2hdKS5jaGlsZHJlbixjPXMudmFsdWU9MCx1PWwubGVuZ3RoO2M8dTsrK2Mpcy52YWx1ZSs9bFtjXS52YWx1ZTtzLmRpY2U/QloocyxuLGkscixpKz0oby1pKSpzLnZhbHVlL3ApOiRaKHMsbixpLG4rPShyLW4pKnMudmFsdWUvcCxvKSxwLT1zLnZhbHVlfWVsc2UgdC5fc3F1YXJpZnk9YT1aWihlLHQsbixpLHIsbyksYS5yYXRpbz1lfXJldHVybiBuLnJhdGlvPWZ1bmN0aW9uKGUpe3JldHVybiB0KChlPStlKT4xP2U6MSl9LG59KShLWik7ZnVuY3Rpb24gdEoodCxlLG4pe3QucHJvdG90eXBlPWUucHJvdG90eXBlPW4sbi5jb25zdHJ1Y3Rvcj10fWZ1bmN0aW9uIGVKKHQsZSl7dmFyIG49T2JqZWN0LmNyZWF0ZSh0LnByb3RvdHlwZSk7Zm9yKHZhciBpIGluIGUpbltpXT1lW2ldO3JldHVybiBufWZ1bmN0aW9uIG5KKCl7fXZhciBpSj0uNyxySj0xL2lKLG9KPSJcXHMqKFsrLV0/XFxkKylcXHMqIixhSj0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixzSj0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIsbEo9L14jKFswLTlhLWZdezMsOH0pJC8sY0o9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW29KLG9KLG9KXSsiXFwpJCIpLHVKPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tzSixzSixzSl0rIlxcKSQiKSxoSj1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW29KLG9KLG9KLGFKXSsiXFwpJCIpLGRKPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbc0osc0osc0osYUpdKyJcXCkkIikscEo9bmV3IFJlZ0V4cCgiXmhzbFxcKCIrW2FKLHNKLHNKXSsiXFwpJCIpLGZKPW5ldyBSZWdFeHAoIl5oc2xhXFwoIitbYUosc0osc0osYUpdKyJcXCkkIiksbUo9e2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH07ZnVuY3Rpb24gZ0ooKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXgoKX1mdW5jdGlvbiBfSigpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdFJnYigpfWZ1bmN0aW9uIHlKKHQpe3ZhciBlLG47cmV0dXJuIHQ9KHQrIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLChlPWxKLmV4ZWModCkpPyhuPWVbMV0ubGVuZ3RoLGU9cGFyc2VJbnQoZVsxXSwxNiksNj09PW4/dkooZSk6Mz09PW4/bmV3IFNKKGU+PjgmMTV8ZT4+NCYyNDAsZT4+NCYxNXwyNDAmZSwoMTUmZSk8PDR8MTUmZSwxKTo4PT09bj9iSihlPj4yNCYyNTUsZT4+MTYmMjU1LGU+PjgmMjU1LCgyNTUmZSkvMjU1KTo0PT09bj9iSihlPj4xMiYxNXxlPj44JjI0MCxlPj44JjE1fGU+PjQmMjQwLGU+PjQmMTV8MjQwJmUsKCgxNSZlKTw8NHwxNSZlKS8yNTUpOm51bGwpOihlPWNKLmV4ZWModCkpP25ldyBTSihlWzFdLGVbMl0sZVszXSwxKTooZT11Si5leGVjKHQpKT9uZXcgU0ooMjU1KmVbMV0vMTAwLDI1NSplWzJdLzEwMCwyNTUqZVszXS8xMDAsMSk6KGU9aEouZXhlYyh0KSk/YkooZVsxXSxlWzJdLGVbM10sZVs0XSk6KGU9ZEouZXhlYyh0KSk/YkooMjU1KmVbMV0vMTAwLDI1NSplWzJdLzEwMCwyNTUqZVszXS8xMDAsZVs0XSk6KGU9cEouZXhlYyh0KSk/Q0ooZVsxXSxlWzJdLzEwMCxlWzNdLzEwMCwxKTooZT1mSi5leGVjKHQpKT9DSihlWzFdLGVbMl0vMTAwLGVbM10vMTAwLGVbNF0pOm1KLmhhc093blByb3BlcnR5KHQpP3ZKKG1KW3RdKToidHJhbnNwYXJlbnQiPT09dD9uZXcgU0ooTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiB2Sih0KXtyZXR1cm4gbmV3IFNKKHQ+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdCwxKX1mdW5jdGlvbiBiSih0LGUsbixpKXtyZXR1cm4gaTw9MCYmKHQ9ZT1uPU5hTiksbmV3IFNKKHQsZSxuLGkpfWZ1bmN0aW9uIHhKKHQpe3JldHVybiB0IGluc3RhbmNlb2Ygbkp8fCh0PXlKKHQpKSx0P25ldyBTSigodD10LnJnYigpKS5yLHQuZyx0LmIsdC5vcGFjaXR5KTpuZXcgU0p9ZnVuY3Rpb24gd0oodCxlLG4saSl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3hKKHQpOm5ldyBTSih0LGUsbixudWxsPT1pPzE6aSl9ZnVuY3Rpb24gU0oodCxlLG4saSl7dGhpcy5yPSt0LHRoaXMuZz0rZSx0aGlzLmI9K24sdGhpcy5vcGFjaXR5PStpfWZ1bmN0aW9uIE1KKCl7cmV0dXJuIiMiK1RKKHRoaXMucikrVEoodGhpcy5nKStUSih0aGlzLmIpfWZ1bmN0aW9uIEVKKCl7dmFyIHQ9dGhpcy5vcGFjaXR5O3JldHVybigxPT09KHQ9aXNOYU4odCk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsdCkpKT8icmdiKCI6InJnYmEoIikrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLnIpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuZyl8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5iKXx8MCkpKygxPT09dD8iKSI6IiwgIit0KyIpIil9ZnVuY3Rpb24gVEoodCl7cmV0dXJuKCh0PU1hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodCl8fDApKSk8MTY/IjAiOiIiKSt0LnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBDSih0LGUsbixpKXtyZXR1cm4gaTw9MD90PWU9bj1OYU46bjw9MHx8bj49MT90PWU9TmFOOmU8PTAmJih0PU5hTiksbmV3IExKKHQsZSxuLGkpfWZ1bmN0aW9uIEFKKHQpe2lmKHQgaW5zdGFuY2VvZiBMSilyZXR1cm4gbmV3IExKKHQuaCx0LnMsdC5sLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIG5KfHwodD15Sih0KSksIXQpcmV0dXJuIG5ldyBMSjtpZih0IGluc3RhbmNlb2YgTEopcmV0dXJuIHQ7dmFyIGU9KHQ9dC5yZ2IoKSkuci8yNTUsbj10LmcvMjU1LGk9dC5iLzI1NSxyPU1hdGgubWluKGUsbixpKSxvPU1hdGgubWF4KGUsbixpKSxhPU5hTixzPW8tcixsPShvK3IpLzI7cmV0dXJuIHM/KGE9ZT09PW8/KG4taSkvcys2KihuPGkpOm49PT1vPyhpLWUpL3MrMjooZS1uKS9zKzQscy89bDwuNT9vK3I6Mi1vLXIsYSo9NjApOnM9bD4wJiZsPDE/MDphLG5ldyBMSihhLHMsbCx0Lm9wYWNpdHkpfWZ1bmN0aW9uIGtKKHQsZSxuLGkpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9BSih0KTpuZXcgTEoodCxlLG4sbnVsbD09aT8xOmkpfWZ1bmN0aW9uIExKKHQsZSxuLGkpe3RoaXMuaD0rdCx0aGlzLnM9K2UsdGhpcy5sPStuLHRoaXMub3BhY2l0eT0raX1mdW5jdGlvbiBQSih0LGUsbil7cmV0dXJuIDI1NSoodDw2MD9lKyhuLWUpKnQvNjA6dDwxODA/bjp0PDI0MD9lKyhuLWUpKigyNDAtdCkvNjA6ZSl9dEoobkoseUose2NvcHk6ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IHRoaXMuY29uc3RydWN0b3IsdGhpcyx0KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpfSxoZXg6Z0osZm9ybWF0SGV4OmdKLGZvcm1hdEhzbDpmdW5jdGlvbiBOSigpe3JldHVybiBBSih0aGlzKS5mb3JtYXRIc2woKX0sZm9ybWF0UmdiOl9KLHRvU3RyaW5nOl9KfSksdEooU0osd0osZUoobkose2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/cko6TWF0aC5wb3cockosdCksbmV3IFNKKHRoaXMucip0LHRoaXMuZyp0LHRoaXMuYip0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P2lKOk1hdGgucG93KGlKLHQpLG5ldyBTSih0aGlzLnIqdCx0aGlzLmcqdCx0aGlzLmIqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4tLjU8PXRoaXMuciYmdGhpcy5yPDI1NS41JiYtLjU8PXRoaXMuZyYmdGhpcy5nPDI1NS41JiYtLjU8PXRoaXMuYiYmdGhpcy5iPDI1NS41JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4Ok1KLGZvcm1hdEhleDpNSixmb3JtYXRSZ2I6RUosdG9TdHJpbmc6RUp9KSksdEooTEosa0osZUoobkose2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/cko6TWF0aC5wb3cockosdCksbmV3IExKKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/aUo6TWF0aC5wb3coaUosdCksbmV3IExKKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5oJTM2MCszNjAqKHRoaXMuaDwwKSxlPWlzTmFOKHQpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLG49dGhpcy5sLGk9bisobjwuNT9uOjEtbikqZSxyPTIqbi1pO3JldHVybiBuZXcgU0ooUEoodD49MjQwP3QtMjQwOnQrMTIwLHIsaSksUEoodCxyLGkpLFBKKHQ8MTIwP3QrMjQwOnQtMTIwLHIsaSksdGhpcy5vcGFjaXR5KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGZvcm1hdEhzbDpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3BhY2l0eTtyZXR1cm4oMT09PSh0PWlzTmFOKHQpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLHQpKSk/ImhzbCgiOiJoc2xhKCIpKyh0aGlzLmh8fDApKyIsICIrMTAwKih0aGlzLnN8fDApKyIlLCAiKzEwMCoodGhpcy5sfHwwKSsiJSIrKDE9PT10PyIpIjoiLCAiK3QrIikiKX19KSk7dmFyIElKPU1hdGguUEkvMTgwLE9KPTE4MC9NYXRoLlBJLFJKPS45NjQyMix6Sj0uODI1MjEsREo9NC8yOSxCSj02LzI5LEhKPTMqQkoqQko7ZnVuY3Rpb24gRkoodCl7aWYodCBpbnN0YW5jZW9mIFVKKXJldHVybiBuZXcgVUoodC5sLHQuYSx0LmIsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgJEopcmV0dXJuIEtKKHQpO3QgaW5zdGFuY2VvZiBTSnx8KHQ9eEoodCkpO3ZhciBlLG4saT1xSih0LnIpLHI9cUoodC5nKSxvPXFKKHQuYiksYT1qSigoLjIyMjUwNDUqaSsuNzE2ODc4NipyKy4wNjA2MTY5Km8pLzEpO3JldHVybiBpPT09ciYmcj09PW8/ZT1uPWE6KGU9akooKC40MzYwNzQ3KmkrLjM4NTA2NDkqcisuMTQzMDgwNCpvKS9SSiksbj1qSigoLjAxMzkzMjIqaSsuMDk3MTA0NSpyKy43MTQxNzMzKm8pL3pKKSksbmV3IFVKKDExNiphLTE2LDUwMCooZS1hKSwyMDAqKGEtbiksdC5vcGFjaXR5KX1mdW5jdGlvbiBWSih0LGUsbixpKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/RkoodCk6bmV3IFVKKHQsZSxuLG51bGw9PWk/MTppKX1mdW5jdGlvbiBVSih0LGUsbixpKXt0aGlzLmw9K3QsdGhpcy5hPStlLHRoaXMuYj0rbix0aGlzLm9wYWNpdHk9K2l9ZnVuY3Rpb24gakoodCl7cmV0dXJuIHQ+LjAwODg1NjQ1MTY3OTAzNTYzMT9NYXRoLnBvdyh0LDEvMyk6dC9ISitESn1mdW5jdGlvbiBHSih0KXtyZXR1cm4gdD5CSj90KnQqdDpISioodC1ESil9ZnVuY3Rpb24gV0oodCl7cmV0dXJuIDI1NSoodDw9LjAwMzEzMDg/MTIuOTIqdDoxLjA1NSpNYXRoLnBvdyh0LDEvMi40KS0uMDU1KX1mdW5jdGlvbiBxSih0KXtyZXR1cm4odC89MjU1KTw9LjA0MDQ1P3QvMTIuOTI6TWF0aC5wb3coKHQrLjA1NSkvMS4wNTUsMi40KX1mdW5jdGlvbiBZSih0KXtpZih0IGluc3RhbmNlb2YgJEopcmV0dXJuIG5ldyAkSih0LmgsdC5jLHQubCx0Lm9wYWNpdHkpO2lmKHQgaW5zdGFuY2VvZiBVSnx8KHQ9RkoodCkpLDA9PT10LmEmJjA9PT10LmIpcmV0dXJuIG5ldyAkSihOYU4sMDx0LmwmJnQubDwxMDA/MDpOYU4sdC5sLHQub3BhY2l0eSk7dmFyIGU9TWF0aC5hdGFuMih0LmIsdC5hKSpPSjtyZXR1cm4gbmV3ICRKKGU8MD9lKzM2MDplLE1hdGguc3FydCh0LmEqdC5hK3QuYip0LmIpLHQubCx0Lm9wYWNpdHkpfWZ1bmN0aW9uIFhKKHQsZSxuLGkpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9ZSih0KTpuZXcgJEoodCxlLG4sbnVsbD09aT8xOmkpfWZ1bmN0aW9uICRKKHQsZSxuLGkpe3RoaXMuaD0rdCx0aGlzLmM9K2UsdGhpcy5sPStuLHRoaXMub3BhY2l0eT0raX1mdW5jdGlvbiBLSih0KXtpZihpc05hTih0LmgpKXJldHVybiBuZXcgVUoodC5sLDAsMCx0Lm9wYWNpdHkpO3ZhciBlPXQuaCpJSjtyZXR1cm4gbmV3IFVKKHQubCxNYXRoLmNvcyhlKSp0LmMsTWF0aC5zaW4oZSkqdC5jLHQub3BhY2l0eSl9dEooVUosVkosZUoobkose2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgVUoodGhpcy5sKzE4KihudWxsPT10PzE6dCksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBVSih0aGlzLmwtMTgqKG51bGw9PXQ/MTp0KSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PSh0aGlzLmwrMTYpLzExNixlPWlzTmFOKHRoaXMuYSk/dDp0K3RoaXMuYS81MDAsbj1pc05hTih0aGlzLmIpP3Q6dC10aGlzLmIvMjAwO3JldHVybiBuZXcgU0ooV0ooMy4xMzM4NTYxKihlPVJKKkdKKGUpKS0xLjYxNjg2NjcqKHQ9MSpHSih0KSktLjQ5MDYxNDYqKG49ekoqR0oobikpKSxXSigtLjk3ODc2ODQqZSsxLjkxNjE0MTUqdCsuMDMzNDU0Km4pLFdKKC4wNzE5NDUzKmUtLjIyODk5MTQqdCsxLjQwNTI0MjcqbiksdGhpcy5vcGFjaXR5KX19KSksdEooJEosWEosZUoobkose2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgJEoodGhpcy5oLHRoaXMuYyx0aGlzLmwrMTgqKG51bGw9PXQ/MTp0KSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyAkSih0aGlzLmgsdGhpcy5jLHRoaXMubC0xOCoobnVsbD09dD8xOnQpLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiBLSih0aGlzKS5yZ2IoKX19KSk7dmFyIFpKPS0uMjkyMjcsSko9LS45MDY0OSxRSj0xLjk3Mjk0O2Z1bmN0aW9uIHRRKHQpe2lmKHQgaW5zdGFuY2VvZiBuUSlyZXR1cm4gbmV3IG5RKHQuaCx0LnMsdC5sLHQub3BhY2l0eSk7dCBpbnN0YW5jZW9mIFNKfHwodD14Sih0KSk7dmFyIGU9dC5nLzI1NSxuPXQuYi8yNTUsaT0oLS42NTU3NjM2NjY3OTk5OTk5Km4rdC5yLzI1NSotMS43ODg0NTAzODA2LTMuNTE3Mjk4MjQzOCplKS8tNS45NjE1MTIyOTEyLHI9bi1pLG89KFFKKihlLWkpLVpKKnIpL0pKLGE9TWF0aC5zcXJ0KG8qbytyKnIpLyhRSippKigxLWkpKSxzPWE/TWF0aC5hdGFuMihvLHIpKk9KLTEyMDpOYU47cmV0dXJuIG5ldyBuUShzPDA/cyszNjA6cyxhLGksdC5vcGFjaXR5KX1mdW5jdGlvbiBlUSh0LGUsbixpKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/dFEodCk6bmV3IG5RKHQsZSxuLG51bGw9PWk/MTppKX1mdW5jdGlvbiBuUSh0LGUsbixpKXt0aGlzLmg9K3QsdGhpcy5zPStlLHRoaXMubD0rbix0aGlzLm9wYWNpdHk9K2l9ZnVuY3Rpb24gaVEodCxlLG4saSxyKXt2YXIgbz10KnQsYT1vKnQ7cmV0dXJuKCgxLTMqdCszKm8tYSkqZSsoNC02Km8rMyphKSpuKygxKzMqdCszKm8tMyphKSppK2EqcikvNn1mdW5jdGlvbiByUSh0KXt2YXIgZT10Lmxlbmd0aC0xO3JldHVybiBmdW5jdGlvbihuKXt2YXIgaT1uPD0wP249MDpuPj0xPyhuPTEsZS0xKTpNYXRoLmZsb29yKG4qZSkscj10W2ldLG89dFtpKzFdO3JldHVybiBpUSgobi1pL2UpKmUsaT4wP3RbaS0xXToyKnItbyxyLG8saTxlLTE/dFtpKzJdOjIqby1yKX19ZnVuY3Rpb24gb1EodCl7dmFyIGU9dC5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBpPU1hdGguZmxvb3IoKChuJT0xKTwwPysrbjpuKSplKTtyZXR1cm4gaVEoKG4taS9lKSplLHRbKGkrZS0xKSVlXSx0W2klZV0sdFsoaSsxKSVlXSx0WyhpKzIpJWVdKX19ZnVuY3Rpb24gYVEodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIHNRKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0K24qZX19ZnVuY3Rpb24gbFEodCxlKXt2YXIgbj1lLXQ7cmV0dXJuIG4/c1EodCxuPjE4MHx8bjwtMTgwP24tMzYwKk1hdGgucm91bmQobi8zNjApOm4pOmFRKGlzTmFOKHQpP2U6dCl9ZnVuY3Rpb24gY1EodCxlKXt2YXIgbj1lLXQ7cmV0dXJuIG4/c1EodCxuKTphUShpc05hTih0KT9lOnQpfXRKKG5RLGVRLGVKKG5KLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P3JKOk1hdGgucG93KHJKLHQpLG5ldyBuUSh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P2lKOk1hdGgucG93KGlKLHQpLG5ldyBuUSh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PWlzTmFOKHRoaXMuaCk/MDoodGhpcy5oKzEyMCkqSUosZT0rdGhpcy5sLG49aXNOYU4odGhpcy5zKT8wOnRoaXMucyplKigxLWUpLGk9TWF0aC5jb3ModCkscj1NYXRoLnNpbih0KTtyZXR1cm4gbmV3IFNKKDI1NSooZStuKigtLjE0ODYxKmkrMS43ODI3NypyKSksMjU1KihlK24qKFpKKmkrSkoqcikpLDI1NSooZStuKihRSippKSksdGhpcy5vcGFjaXR5KX19KSk7dmFyIHVRPShmdW5jdGlvbiB0KGUpe3ZhciBuPShmdW5jdGlvbiBpKHQpe3JldHVybiAxPT0odD0rdCk/Y1E6ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbi1lPyhmdW5jdGlvbiBpKHQsZSxuKXtyZXR1cm4gdD1NYXRoLnBvdyh0LG4pLGU9TWF0aC5wb3coZSxuKS10LG49MS9uLGZ1bmN0aW9uKGkpe3JldHVybiBNYXRoLnBvdyh0K2kqZSxuKX19KShlLG4sdCk6YVEoaXNOYU4oZSk/bjplKX19KShlKTtmdW5jdGlvbiByKHQsZSl7dmFyIGk9bigodD13Sih0KSkuciwoZT13SihlKSkucikscj1uKHQuZyxlLmcpLG89bih0LmIsZS5iKSxhPWNRKHQub3BhY2l0eSxlLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC5yPWkoZSksdC5nPXIoZSksdC5iPW8oZSksdC5vcGFjaXR5PWEoZSksdCsiIn19cmV0dXJuIHIuZ2FtbWE9dCxyfSkoMSk7ZnVuY3Rpb24gaFEodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuLGkscj1lLmxlbmd0aCxvPW5ldyBBcnJheShyKSxhPW5ldyBBcnJheShyKSxzPW5ldyBBcnJheShyKTtmb3Iobj0wO248cjsrK24paT13SihlW25dKSxvW25dPWkucnx8MCxhW25dPWkuZ3x8MCxzW25dPWkuYnx8MDtyZXR1cm4gbz10KG8pLGE9dChhKSxzPXQocyksaS5vcGFjaXR5PTEsZnVuY3Rpb24odCl7cmV0dXJuIGkucj1vKHQpLGkuZz1hKHQpLGkuYj1zKHQpLGkrIiJ9fX12YXIgZFE9aFEoclEpLHBRPWhRKG9RKTtmdW5jdGlvbiBmUSh0LGUpe3ZhciBuLGk9ZT9lLmxlbmd0aDowLHI9dD9NYXRoLm1pbihpLHQubGVuZ3RoKTowLG89bmV3IEFycmF5KHIpLGE9bmV3IEFycmF5KGkpO2ZvcihuPTA7bjxyOysrbilvW25dPXhRKHRbbl0sZVtuXSk7Zm9yKDtuPGk7KytuKWFbbl09ZVtuXTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKG49MDtuPHI7KytuKWFbbl09b1tuXSh0KTtyZXR1cm4gYX19ZnVuY3Rpb24gbVEodCxlKXt2YXIgbj1uZXcgRGF0ZTtyZXR1cm4gZS09dD0rdCxmdW5jdGlvbihpKXtyZXR1cm4gbi5zZXRUaW1lKHQrZSppKSxufX1mdW5jdGlvbiBnUSh0LGUpe3JldHVybiBlLT10PSt0LGZ1bmN0aW9uKG4pe3JldHVybiB0K2Uqbn19ZnVuY3Rpb24gX1EodCxlKXt2YXIgbixpPXt9LHI9e307Zm9yKG4gaW4gbnVsbCE9PXQmJiJvYmplY3QiPT10eXBlb2YgdHx8KHQ9e30pLG51bGwhPT1lJiYib2JqZWN0Ij09dHlwZW9mIGV8fChlPXt9KSxlKW4gaW4gdD9pW25dPXhRKHRbbl0sZVtuXSk6cltuXT1lW25dO3JldHVybiBmdW5jdGlvbih0KXtmb3IobiBpbiBpKXJbbl09aVtuXSh0KTtyZXR1cm4gcn19dmFyIHlRPS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyx2UT1uZXcgUmVnRXhwKHlRLnNvdXJjZSwiZyIpO2Z1bmN0aW9uIGJRKHQsZSl7dmFyIG4saSxyLG89eVEubGFzdEluZGV4PXZRLmxhc3RJbmRleD0wLGE9LTEscz1bXSxsPVtdO2Zvcih0Kz0iIixlKz0iIjsobj15US5leGVjKHQpKSYmKGk9dlEuZXhlYyhlKSk7KShyPWkuaW5kZXgpPm8mJihyPWUuc2xpY2UobyxyKSxzW2FdP3NbYV0rPXI6c1srK2FdPXIpLChuPW5bMF0pPT09KGk9aVswXSk/c1thXT9zW2FdKz1pOnNbKythXT1pOihzWysrYV09bnVsbCxsLnB1c2goe2k6YSx4OmdRKG4saSl9KSksbz12US5sYXN0SW5kZXg7cmV0dXJuIG88ZS5sZW5ndGgmJihyPWUuc2xpY2Uobyksc1thXT9zW2FdKz1yOnNbKythXT1yKSxzLmxlbmd0aDwyP2xbMF0/KGZ1bmN0aW9uIGModCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0KGUpKyIifX0pKGxbMF0ueCk6KGZ1bmN0aW9uIHUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSkoZSk6KGU9bC5sZW5ndGgsZnVuY3Rpb24odCl7Zm9yKHZhciBuLGk9MDtpPGU7KytpKXNbKG49bFtpXSkuaV09bi54KHQpO3JldHVybiBzLmpvaW4oIiIpfSl9ZnVuY3Rpb24geFEodCxlKXt2YXIgbixpPXR5cGVvZiBlO3JldHVybiBudWxsPT1lfHwiYm9vbGVhbiI9PT1pP2FRKGUpOigibnVtYmVyIj09PWk/Z1E6InN0cmluZyI9PT1pPyhuPXlKKGUpKT8oZT1uLHVRKTpiUTplIGluc3RhbmNlb2YgeUo/dVE6ZSBpbnN0YW5jZW9mIERhdGU/bVE6QXJyYXkuaXNBcnJheShlKT9mUToiZnVuY3Rpb24iIT10eXBlb2YgZS52YWx1ZU9mJiYiZnVuY3Rpb24iIT10eXBlb2YgZS50b1N0cmluZ3x8aXNOYU4oZSk/X1E6Z1EpKHQsZSl9dmFyIHdRLFNRLE1RLEVRLFRRPTE4MC9NYXRoLlBJLENRPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9O2Z1bmN0aW9uIEFRKHQsZSxuLGkscixvKXt2YXIgYSxzLGw7cmV0dXJuKGE9TWF0aC5zcXJ0KHQqdCtlKmUpKSYmKHQvPWEsZS89YSksKGw9dCpuK2UqaSkmJihuLT10KmwsaS09ZSpsKSwocz1NYXRoLnNxcnQobipuK2kqaSkpJiYobi89cyxpLz1zLGwvPXMpLHQqaTxlKm4mJih0PS10LGU9LWUsbD0tbCxhPS1hKSx7dHJhbnNsYXRlWDpyLHRyYW5zbGF0ZVk6byxyb3RhdGU6TWF0aC5hdGFuMihlLHQpKlRRLHNrZXdYOk1hdGguYXRhbihsKSpUUSxzY2FsZVg6YSxzY2FsZVk6c319ZnVuY3Rpb24ga1EodCxlLG4saSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gdC5sZW5ndGg/dC5wb3AoKSsiICI6IiJ9cmV0dXJuIGZ1bmN0aW9uKG8sYSl7dmFyIHM9W10sbD1bXTtyZXR1cm4gbz10KG8pLGE9dChhKSwoZnVuY3Rpb24gYyh0LGkscixvLGEscyl7aWYodCE9PXJ8fGkhPT1vKXt2YXIgbD1hLnB1c2goInRyYW5zbGF0ZSgiLG51bGwsZSxudWxsLG4pO3MucHVzaCh7aTpsLTQseDpnUSh0LHIpfSx7aTpsLTIseDpnUShpLG8pfSl9ZWxzZShyfHxvKSYmYS5wdXNoKCJ0cmFuc2xhdGUoIityK2UrbytuKX0pKG8udHJhbnNsYXRlWCxvLnRyYW5zbGF0ZVksYS50cmFuc2xhdGVYLGEudHJhbnNsYXRlWSxzLGwpLChmdW5jdGlvbiB1KHQsZSxuLG8pe3QhPT1lPyh0LWU+MTgwP2UrPTM2MDplLXQ+MTgwJiYodCs9MzYwKSxvLnB1c2goe2k6bi5wdXNoKHIobikrInJvdGF0ZSgiLG51bGwsaSktMix4OmdRKHQsZSl9KSk6ZSYmbi5wdXNoKHIobikrInJvdGF0ZSgiK2UraSl9KShvLnJvdGF0ZSxhLnJvdGF0ZSxzLGwpLChmdW5jdGlvbiBoKHQsZSxuLG8pe3QhPT1lP28ucHVzaCh7aTpuLnB1c2gocihuKSsic2tld1goIixudWxsLGkpLTIseDpnUSh0LGUpfSk6ZSYmbi5wdXNoKHIobikrInNrZXdYKCIrZStpKX0pKG8uc2tld1gsYS5za2V3WCxzLGwpLChmdW5jdGlvbiBkKHQsZSxuLGksbyxhKXtpZih0IT09bnx8ZSE9PWkpe3ZhciBzPW8ucHVzaChyKG8pKyJzY2FsZSgiLG51bGwsIiwiLG51bGwsIikiKTthLnB1c2goe2k6cy00LHg6Z1EodCxuKX0se2k6cy0yLHg6Z1EoZSxpKX0pfWVsc2UgMT09PW4mJjE9PT1pfHxvLnB1c2gocihvKSsic2NhbGUoIituKyIsIitpKyIpIil9KShvLnNjYWxlWCxvLnNjYWxlWSxhLnNjYWxlWCxhLnNjYWxlWSxzLGwpLG89YT1udWxsLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPS0xLGk9bC5sZW5ndGg7KytuPGk7KXNbKGU9bFtuXSkuaV09ZS54KHQpO3JldHVybiBzLmpvaW4oIiIpfX19dmFyIExRPWtRKChmdW5jdGlvbiBQUSh0KXtyZXR1cm4ibm9uZSI9PT10P0NROih3UXx8KHdRPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLFNRPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxNUT1kb2N1bWVudC5kZWZhdWx0Vmlldyksd1Euc3R5bGUudHJhbnNmb3JtPXQsdD1NUS5nZXRDb21wdXRlZFN0eWxlKFNRLmFwcGVuZENoaWxkKHdRKSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKSxTUS5yZW1vdmVDaGlsZCh3USksQVEoKyh0PXQuc2xpY2UoNywtMSkuc3BsaXQoIiwiKSlbMF0sK3RbMV0sK3RbMl0sK3RbM10sK3RbNF0sK3RbNV0pKX0pLCJweCwgIiwicHgpIiwiZGVnKSIpLE5RPWtRKChmdW5jdGlvbiBJUSh0KXtyZXR1cm4gbnVsbD09dD9DUTooRVF8fChFUT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSxFUS5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsdCksKHQ9RVEudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/QVEoKHQ9dC5tYXRyaXgpLmEsdC5iLHQuYyx0LmQsdC5lLHQuZik6Q1EpfSksIiwgIiwiKSIsIikiKSxPUT1NYXRoLlNRUlQyO2Z1bmN0aW9uIFJRKHQpe3JldHVybigodD1NYXRoLmV4cCh0KSkrMS90KS8yfWZ1bmN0aW9uIHpRKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3ZhciBpPXQoKGU9a0ooZSkpLmgsKG49a0oobikpLmgpLHI9Y1EoZS5zLG4ucyksbz1jUShlLmwsbi5sKSxhPWNRKGUub3BhY2l0eSxuLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZS5oPWkodCksZS5zPXIodCksZS5sPW8odCksZS5vcGFjaXR5PWEodCksZSsiIn19fXZhciBEUT16UShsUSksQlE9elEoY1EpO2Z1bmN0aW9uIEhRKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3ZhciBpPXQoKGU9WEooZSkpLmgsKG49WEoobikpLmgpLHI9Y1EoZS5jLG4uYyksbz1jUShlLmwsbi5sKSxhPWNRKGUub3BhY2l0eSxuLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZS5oPWkodCksZS5jPXIodCksZS5sPW8odCksZS5vcGFjaXR5PWEodCksZSsiIn19fXZhciBGUT1IUShsUSksVlE9SFEoY1EpO2Z1bmN0aW9uIFVRKHQpe3JldHVybihmdW5jdGlvbiBlKG4pe2Z1bmN0aW9uIGkoZSxpKXt2YXIgcj10KChlPWVRKGUpKS5oLChpPWVRKGkpKS5oKSxvPWNRKGUucyxpLnMpLGE9Y1EoZS5sLGkubCkscz1jUShlLm9wYWNpdHksaS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUuaD1yKHQpLGUucz1vKHQpLGUubD1hKE1hdGgucG93KHQsbikpLGUub3BhY2l0eT1zKHQpLGUrIiJ9fXJldHVybiBuPStuLGkuZ2FtbWE9ZSxpfSkoMSl9dmFyIGpRPVVRKGxRKSxHUT1VUShjUSksV1E9TWF0aC5QSSxxUT0yKldRLFlRPTFlLTYsWFE9cVEtWVE7ZnVuY3Rpb24gJFEoKXt0aGlzLl94MD10aGlzLl95MD10aGlzLl94MT10aGlzLl95MT1udWxsLHRoaXMuXz0iIn1mdW5jdGlvbiBLUSgpe3JldHVybiBuZXcgJFF9ZnVuY3Rpb24gWlEodCxlLG4pe3JldHVybihlWzBdLXRbMF0pKihuWzFdLXRbMV0pLShlWzFdLXRbMV0pKihuWzBdLXRbMF0pfWZ1bmN0aW9uIEpRKHQsZSl7cmV0dXJuIHRbMF0tZVswXXx8dFsxXS1lWzFdfWZ1bmN0aW9uIFFRKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxuPVswLDFdLGk9MixyPTI7cjxlOysrcil7Zm9yKDtpPjEmJlpRKHRbbltpLTJdXSx0W25baS0xXV0sdFtyXSk8PTA7KS0taTtuW2krK109cn1yZXR1cm4gbi5zbGljZSgwLGkpfWZ1bmN0aW9uIHQxKHQsZSxuLGkpe2lmKGlzTmFOKGUpfHxpc05hTihuKSlyZXR1cm4gdDt2YXIgcixvLGEscyxsLGMsdSxoLGQscD10Ll9yb290LGY9e2RhdGE6aX0sbT10Ll94MCxnPXQuX3kwLF89dC5feDEseT10Ll95MTtpZighcClyZXR1cm4gdC5fcm9vdD1mLHQ7Zm9yKDtwLmxlbmd0aDspaWYoKGM9ZT49KG89KG0rXykvMikpP209bzpfPW8sKHU9bj49KGE9KGcreSkvMikpP2c9YTp5PWEscj1wLCEocD1wW2g9dTw8MXxjXSkpcmV0dXJuIHJbaF09Zix0O2lmKHM9K3QuX3guY2FsbChudWxsLHAuZGF0YSksbD0rdC5feS5jYWxsKG51bGwscC5kYXRhKSxlPT09cyYmbj09PWwpcmV0dXJuIGYubmV4dD1wLHI/cltoXT1mOnQuX3Jvb3Q9Zix0O2Rve3I9cj9yW2hdPW5ldyBBcnJheSg0KTp0Ll9yb290PW5ldyBBcnJheSg0KSwoYz1lPj0obz0obStfKS8yKSk/bT1vOl89bywodT1uPj0oYT0oZyt5KS8yKSk/Zz1hOnk9YX13aGlsZSgoaD11PDwxfGMpPT0oZD0obD49YSk8PDF8cz49bykpO3JldHVybiByW2RdPXAscltoXT1mLHR9ZnVuY3Rpb24gZTEodCxlLG4saSxyKXt0aGlzLm5vZGU9dCx0aGlzLngwPWUsdGhpcy55MD1uLHRoaXMueDE9aSx0aGlzLnkxPXJ9ZnVuY3Rpb24gbjEodCl7cmV0dXJuIHRbMF19ZnVuY3Rpb24gaTEodCl7cmV0dXJuIHRbMV19ZnVuY3Rpb24gcjEodCxlLG4pe3ZhciBpPW5ldyBvMShudWxsPT1lP24xOmUsbnVsbD09bj9pMTpuLE5hTixOYU4sTmFOLE5hTik7cmV0dXJuIG51bGw9PXQ/aTppLmFkZEFsbCh0KX1mdW5jdGlvbiBvMSh0LGUsbixpLHIsbyl7dGhpcy5feD10LHRoaXMuX3k9ZSx0aGlzLl94MD1uLHRoaXMuX3kwPWksdGhpcy5feDE9cix0aGlzLl95MT1vLHRoaXMuX3Jvb3Q9dm9pZCAwfWZ1bmN0aW9uIGExKHQpe2Zvcih2YXIgZT17ZGF0YTp0LmRhdGF9LG49ZTt0PXQubmV4dDspbj1uLm5leHQ9e2RhdGE6dC5kYXRhfTtyZXR1cm4gZX0kUS5wcm90b3R5cGU9S1EucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjokUSxtb3ZlVG86ZnVuY3Rpb24odCxlKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K3QpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K2UpfSxjbG9zZVBhdGg6ZnVuY3Rpb24oKXtudWxsIT09dGhpcy5feDEmJih0aGlzLl94MT10aGlzLl94MCx0aGlzLl95MT10aGlzLl95MCx0aGlzLl8rPSJaIil9LGxpbmVUbzpmdW5jdGlvbih0LGUpe3RoaXMuXys9IkwiKyh0aGlzLl94MT0rdCkrIiwiKyh0aGlzLl95MT0rZSl9LHF1YWRyYXRpY0N1cnZlVG86ZnVuY3Rpb24odCxlLG4saSl7dGhpcy5fKz0iUSIrICt0KyIsIisgK2UrIiwiKyh0aGlzLl94MT0rbikrIiwiKyh0aGlzLl95MT0raSl9LGJlemllckN1cnZlVG86ZnVuY3Rpb24odCxlLG4saSxyLG8pe3RoaXMuXys9IkMiKyArdCsiLCIrICtlKyIsIisgK24rIiwiKyAraSsiLCIrKHRoaXMuX3gxPStyKSsiLCIrKHRoaXMuX3kxPStvKX0sYXJjVG86ZnVuY3Rpb24odCxlLG4saSxyKXt2YXIgbz10aGlzLl94MSxhPXRoaXMuX3kxLHM9KG49K24pLSh0PSt0KSxsPShpPStpKS0oZT0rZSksYz1vLXQsdT1hLWUsaD1jKmMrdSp1O2lmKChyPStyKTwwKXRocm93IG5ldyBFcnJvcigibmVnYXRpdmUgcmFkaXVzOiAiK3IpO2lmKG51bGw9PT10aGlzLl94MSl0aGlzLl8rPSJNIisodGhpcy5feDE9dCkrIiwiKyh0aGlzLl95MT1lKTtlbHNlIGlmKGg+WVEpaWYoTWF0aC5hYnModSpzLWwqYyk+WVEmJnIpe3ZhciBkPW4tbyxwPWktYSxmPXMqcytsKmwsbT1kKmQrcCpwLGc9TWF0aC5zcXJ0KGYpLF89TWF0aC5zcXJ0KGgpLHk9cipNYXRoLnRhbigoV1EtTWF0aC5hY29zKChmK2gtbSkvKDIqZypfKSkpLzIpLHY9eS9fLGI9eS9nO01hdGguYWJzKHYtMSk+WVEmJih0aGlzLl8rPSJMIisodCt2KmMpKyIsIisoZSt2KnUpKSx0aGlzLl8rPSJBIityKyIsIityKyIsMCwwLCIrICsodSpkPmMqcCkrIiwiKyh0aGlzLl94MT10K2IqcykrIiwiKyh0aGlzLl95MT1lK2IqbCl9ZWxzZSB0aGlzLl8rPSJMIisodGhpcy5feDE9dCkrIiwiKyh0aGlzLl95MT1lKX0sYXJjOmZ1bmN0aW9uKHQsZSxuLGkscixvKXt0PSt0LGU9K2U7dmFyIGE9KG49K24pKk1hdGguY29zKGkpLHM9bipNYXRoLnNpbihpKSxsPXQrYSxjPWUrcyx1PTFebyxoPW8/aS1yOnItaTtpZihuPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrbik7bnVsbD09PXRoaXMuX3gxP3RoaXMuXys9Ik0iK2wrIiwiK2M6KE1hdGguYWJzKHRoaXMuX3gxLWwpPllRfHxNYXRoLmFicyh0aGlzLl95MS1jKT5ZUSkmJih0aGlzLl8rPSJMIitsKyIsIitjKSxuJiYoaDwwJiYoaD1oJXFRK3FRKSxoPlhRP3RoaXMuXys9IkEiK24rIiwiK24rIiwwLDEsIit1KyIsIisodC1hKSsiLCIrKGUtcykrIkEiK24rIiwiK24rIiwwLDEsIit1KyIsIisodGhpcy5feDE9bCkrIiwiKyh0aGlzLl95MT1jKTpoPllRJiYodGhpcy5fKz0iQSIrbisiLCIrbisiLDAsIisgKyhoPj1XUSkrIiwiK3UrIiwiKyh0aGlzLl94MT10K24qTWF0aC5jb3MocikpKyIsIisodGhpcy5feTE9ZStuKk1hdGguc2luKHIpKSkpfSxyZWN0OmZ1bmN0aW9uKHQsZSxuLGkpe3RoaXMuXys9Ik0iKyh0aGlzLl94MD10aGlzLl94MT0rdCkrIiwiKyh0aGlzLl95MD10aGlzLl95MT0rZSkrImgiKyArbisidiIrICtpKyJoIistbisiWiJ9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX319O3ZhciBzMT1yMS5wcm90b3R5cGU9bzEucHJvdG90eXBlO3MxLmNvcHk9ZnVuY3Rpb24oKXt2YXIgdCxlLG49bmV3IG8xKHRoaXMuX3gsdGhpcy5feSx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSksaT10aGlzLl9yb290O2lmKCFpKXJldHVybiBuO2lmKCFpLmxlbmd0aClyZXR1cm4gbi5fcm9vdD1hMShpKSxuO2Zvcih0PVt7c291cmNlOmksdGFyZ2V0Om4uX3Jvb3Q9bmV3IEFycmF5KDQpfV07aT10LnBvcCgpOylmb3IodmFyIHI9MDtyPDQ7KytyKShlPWkuc291cmNlW3JdKSYmKGUubGVuZ3RoP3QucHVzaCh7c291cmNlOmUsdGFyZ2V0OmkudGFyZ2V0W3JdPW5ldyBBcnJheSg0KX0pOmkudGFyZ2V0W3JdPWExKGUpKTtyZXR1cm4gbn0sczEuYWRkPWZ1bmN0aW9uIGwxKHQpe3ZhciBlPSt0aGlzLl94LmNhbGwobnVsbCx0KSxuPSt0aGlzLl95LmNhbGwobnVsbCx0KTtyZXR1cm4gdDEodGhpcy5jb3ZlcihlLG4pLGUsbix0KX0sczEuYWRkQWxsPWZ1bmN0aW9uIGMxKHQpe3ZhciBlLG4saSxyLG89dC5sZW5ndGgsYT1uZXcgQXJyYXkobykscz1uZXcgQXJyYXkobyksbD0xLzAsYz0xLzAsdT0tMS8wLGg9LTEvMDtmb3Iobj0wO248bzsrK24paXNOYU4oaT0rdGhpcy5feC5jYWxsKG51bGwsZT10W25dKSl8fGlzTmFOKHI9K3RoaXMuX3kuY2FsbChudWxsLGUpKXx8KGFbbl09aSxzW25dPXIsaTxsJiYobD1pKSxpPnUmJih1PWkpLHI8YyYmKGM9cikscj5oJiYoaD1yKSk7Zm9yKHU8bCYmKGw9dGhpcy5feDAsdT10aGlzLl94MSksaDxjJiYoYz10aGlzLl95MCxoPXRoaXMuX3kxKSx0aGlzLmNvdmVyKGwsYykuY292ZXIodSxoKSxuPTA7bjxvOysrbil0MSh0aGlzLGFbbl0sc1tuXSx0W25dKTtyZXR1cm4gdGhpc30sczEuY292ZXI9ZnVuY3Rpb24gdTEodCxlKXtpZihpc05hTih0PSt0KXx8aXNOYU4oZT0rZSkpcmV0dXJuIHRoaXM7dmFyIG49dGhpcy5feDAsaT10aGlzLl95MCxyPXRoaXMuX3gxLG89dGhpcy5feTE7aWYoaXNOYU4obikpcj0obj1NYXRoLmZsb29yKHQpKSsxLG89KGk9TWF0aC5mbG9vcihlKSkrMTtlbHNle2lmKCEobj50fHx0PnJ8fGk+ZXx8ZT5vKSlyZXR1cm4gdGhpczt2YXIgYSxzLGw9ci1uLGM9dGhpcy5fcm9vdDtzd2l0Y2gocz0oZTwoaStvKS8yKTw8MXx0PChuK3IpLzIpe2Nhc2UgMDpkb3soYT1uZXcgQXJyYXkoNCkpW3NdPWMsYz1hfXdoaWxlKG89aSsobCo9MiksdD4ocj1uK2wpfHxlPm8pO2JyZWFrO2Nhc2UgMTpkb3soYT1uZXcgQXJyYXkoNCkpW3NdPWMsYz1hfXdoaWxlKG89aSsobCo9MiksKG49ci1sKT50fHxlPm8pO2JyZWFrO2Nhc2UgMjpkb3soYT1uZXcgQXJyYXkoNCkpW3NdPWMsYz1hfXdoaWxlKGk9by0obCo9MiksdD4ocj1uK2wpfHxpPmUpO2JyZWFrO2Nhc2UgMzpkb3soYT1uZXcgQXJyYXkoNCkpW3NdPWMsYz1hfXdoaWxlKGk9by0obCo9MiksKG49ci1sKT50fHxpPmUpfXRoaXMuX3Jvb3QmJnRoaXMuX3Jvb3QubGVuZ3RoJiYodGhpcy5fcm9vdD1jKX1yZXR1cm4gdGhpcy5feDA9bix0aGlzLl95MD1pLHRoaXMuX3gxPXIsdGhpcy5feTE9byx0aGlzfSxzMS5kYXRhPWZ1bmN0aW9uIGgxKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMudmlzaXQoKGZ1bmN0aW9uKGUpe2lmKCFlLmxlbmd0aClkb3t0LnB1c2goZS5kYXRhKX13aGlsZShlPWUubmV4dCl9KSksdH0sczEuZXh0ZW50PWZ1bmN0aW9uIGQxKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuY292ZXIoK3RbMF1bMF0sK3RbMF1bMV0pLmNvdmVyKCt0WzFdWzBdLCt0WzFdWzFdKTppc05hTih0aGlzLl94MCk/dm9pZCAwOltbdGhpcy5feDAsdGhpcy5feTBdLFt0aGlzLl94MSx0aGlzLl95MV1dfSxzMS5maW5kPWZ1bmN0aW9uIHAxKHQsZSxuKXt2YXIgaSxyLG8sYSxzLGwsYyx1PXRoaXMuX3gwLGg9dGhpcy5feTAsZD10aGlzLl94MSxwPXRoaXMuX3kxLGY9W10sbT10aGlzLl9yb290O2ZvcihtJiZmLnB1c2gobmV3IGUxKG0sdSxoLGQscCkpLG51bGw9PW4/bj0xLzA6KHU9dC1uLGg9ZS1uLGQ9dCtuLHA9ZStuLG4qPW4pO2w9Zi5wb3AoKTspaWYoISghKG09bC5ub2RlKXx8KHI9bC54MCk+ZHx8KG89bC55MCk+cHx8KGE9bC54MSk8dXx8KHM9bC55MSk8aCkpaWYobS5sZW5ndGgpe3ZhciBnPShyK2EpLzIsXz0obytzKS8yO2YucHVzaChuZXcgZTEobVszXSxnLF8sYSxzKSxuZXcgZTEobVsyXSxyLF8sZyxzKSxuZXcgZTEobVsxXSxnLG8sYSxfKSxuZXcgZTEobVswXSxyLG8sZyxfKSksKGM9KGU+PV8pPDwxfHQ+PWcpJiYobD1mW2YubGVuZ3RoLTFdLGZbZi5sZW5ndGgtMV09ZltmLmxlbmd0aC0xLWNdLGZbZi5sZW5ndGgtMS1jXT1sKX1lbHNle3ZhciB5PXQtK3RoaXMuX3guY2FsbChudWxsLG0uZGF0YSksdj1lLSt0aGlzLl95LmNhbGwobnVsbCxtLmRhdGEpLGI9eSp5K3YqdjtpZihiPG4pe3ZhciB4PU1hdGguc3FydChuPWIpO3U9dC14LGg9ZS14LGQ9dCt4LHA9ZSt4LGk9bS5kYXRhfX1yZXR1cm4gaX0sczEucmVtb3ZlPWZ1bmN0aW9uIGYxKHQpe2lmKGlzTmFOKG89K3RoaXMuX3guY2FsbChudWxsLHQpKXx8aXNOYU4oYT0rdGhpcy5feS5jYWxsKG51bGwsdCkpKXJldHVybiB0aGlzO3ZhciBlLG4saSxyLG8sYSxzLGwsYyx1LGgsZCxwPXRoaXMuX3Jvb3QsZj10aGlzLl94MCxtPXRoaXMuX3kwLGc9dGhpcy5feDEsXz10aGlzLl95MTtpZighcClyZXR1cm4gdGhpcztpZihwLmxlbmd0aClmb3IoOzspe2lmKChjPW8+PShzPShmK2cpLzIpKT9mPXM6Zz1zLCh1PWE+PShsPShtK18pLzIpKT9tPWw6Xz1sLGU9cCwhKHA9cFtoPXU8PDF8Y10pKXJldHVybiB0aGlzO2lmKCFwLmxlbmd0aClicmVhazsoZVtoKzEmM118fGVbaCsyJjNdfHxlW2grMyYzXSkmJihuPWUsZD1oKX1mb3IoO3AuZGF0YSE9PXQ7KWlmKGk9cCwhKHA9cC5uZXh0KSlyZXR1cm4gdGhpcztyZXR1cm4ocj1wLm5leHQpJiZkZWxldGUgcC5uZXh0LGk/KHI/aS5uZXh0PXI6ZGVsZXRlIGkubmV4dCx0aGlzKTplPyhyP2VbaF09cjpkZWxldGUgZVtoXSwocD1lWzBdfHxlWzFdfHxlWzJdfHxlWzNdKSYmcD09PShlWzNdfHxlWzJdfHxlWzFdfHxlWzBdKSYmIXAubGVuZ3RoJiYobj9uW2RdPXA6dGhpcy5fcm9vdD1wKSx0aGlzKToodGhpcy5fcm9vdD1yLHRoaXMpfSxzMS5yZW1vdmVBbGw9ZnVuY3Rpb24gbTEodCl7Zm9yKHZhciBlPTAsbj10Lmxlbmd0aDtlPG47KytlKXRoaXMucmVtb3ZlKHRbZV0pO3JldHVybiB0aGlzfSxzMS5yb290PWZ1bmN0aW9uIGcxKCl7cmV0dXJuIHRoaXMuX3Jvb3R9LHMxLnNpemU9ZnVuY3Rpb24gXzEoKXt2YXIgdD0wO3JldHVybiB0aGlzLnZpc2l0KChmdW5jdGlvbihlKXtpZighZS5sZW5ndGgpZG97Kyt0fXdoaWxlKGU9ZS5uZXh0KX0pKSx0fSxzMS52aXNpdD1mdW5jdGlvbiB5MSh0KXt2YXIgZSxuLGkscixvLGEscz1bXSxsPXRoaXMuX3Jvb3Q7Zm9yKGwmJnMucHVzaChuZXcgZTEobCx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO2U9cy5wb3AoKTspaWYoIXQobD1lLm5vZGUsaT1lLngwLHI9ZS55MCxvPWUueDEsYT1lLnkxKSYmbC5sZW5ndGgpe3ZhciBjPShpK28pLzIsdT0ocithKS8yOyhuPWxbM10pJiZzLnB1c2gobmV3IGUxKG4sYyx1LG8sYSkpLChuPWxbMl0pJiZzLnB1c2gobmV3IGUxKG4saSx1LGMsYSkpLChuPWxbMV0pJiZzLnB1c2gobmV3IGUxKG4sYyxyLG8sdSkpLChuPWxbMF0pJiZzLnB1c2gobmV3IGUxKG4saSxyLGMsdSkpfXJldHVybiB0aGlzfSxzMS52aXNpdEFmdGVyPWZ1bmN0aW9uIHYxKHQpe3ZhciBlLG49W10saT1bXTtmb3IodGhpcy5fcm9vdCYmbi5wdXNoKG5ldyBlMSh0aGlzLl9yb290LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7ZT1uLnBvcCgpOyl7dmFyIHI9ZS5ub2RlO2lmKHIubGVuZ3RoKXt2YXIgbyxhPWUueDAscz1lLnkwLGw9ZS54MSxjPWUueTEsdT0oYStsKS8yLGg9KHMrYykvMjsobz1yWzBdKSYmbi5wdXNoKG5ldyBlMShvLGEscyx1LGgpKSwobz1yWzFdKSYmbi5wdXNoKG5ldyBlMShvLHUscyxsLGgpKSwobz1yWzJdKSYmbi5wdXNoKG5ldyBlMShvLGEsaCx1LGMpKSwobz1yWzNdKSYmbi5wdXNoKG5ldyBlMShvLHUsaCxsLGMpKX1pLnB1c2goZSl9Zm9yKDtlPWkucG9wKCk7KXQoZS5ub2RlLGUueDAsZS55MCxlLngxLGUueTEpO3JldHVybiB0aGlzfSxzMS54PWZ1bmN0aW9uIGIxKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0aGlzLl94PXQsdGhpcyk6dGhpcy5feH0sczEueT1mdW5jdGlvbiB4MSh0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feT10LHRoaXMpOnRoaXMuX3l9O3ZhciB3MT1bXS5zbGljZSxTMT17fTtmdW5jdGlvbiBNMSh0KXt0aGlzLl9zaXplPXQsdGhpcy5fY2FsbD10aGlzLl9lcnJvcj1udWxsLHRoaXMuX3Rhc2tzPVtdLHRoaXMuX2RhdGE9W10sdGhpcy5fd2FpdGluZz10aGlzLl9hY3RpdmU9dGhpcy5fZW5kZWQ9dGhpcy5fc3RhcnQ9MH1mdW5jdGlvbiBFMSh0KXtpZighdC5fc3RhcnQpdHJ5eyEoZnVuY3Rpb24gZSh0KXtmb3IoO3QuX3N0YXJ0PXQuX3dhaXRpbmcmJnQuX2FjdGl2ZTx0Ll9zaXplOyl7dmFyIGU9dC5fZW5kZWQrdC5fYWN0aXZlLG49dC5fdGFza3NbZV0saT1uLmxlbmd0aC0xLHI9bltpXTtuW2ldPVQxKHQsZSksLS10Ll93YWl0aW5nLCsrdC5fYWN0aXZlLG49ci5hcHBseShudWxsLG4pLHQuX3Rhc2tzW2VdJiYodC5fdGFza3NbZV09bnx8UzEpfX0pKHQpfWNhdGNoKGUpe2lmKHQuX3Rhc2tzW3QuX2VuZGVkK3QuX2FjdGl2ZS0xXSlDMSh0LGUpO2Vsc2UgaWYoIXQuX2RhdGEpdGhyb3cgZX19ZnVuY3Rpb24gVDEodCxlKXtyZXR1cm4gZnVuY3Rpb24obixpKXt0Ll90YXNrc1tlXSYmKC0tdC5fYWN0aXZlLCsrdC5fZW5kZWQsdC5fdGFza3NbZV09bnVsbCxudWxsPT10Ll9lcnJvciYmKG51bGwhPW4/QzEodCxuKToodC5fZGF0YVtlXT1pLHQuX3dhaXRpbmc/RTEodCk6QTEodCkpKSl9fWZ1bmN0aW9uIEMxKHQsZSl7dmFyIG4saT10Ll90YXNrcy5sZW5ndGg7Zm9yKHQuX2Vycm9yPWUsdC5fZGF0YT12b2lkIDAsdC5fd2FpdGluZz1OYU47LS1pPj0wOylpZigobj10Ll90YXNrc1tpXSkmJih0Ll90YXNrc1tpXT1udWxsLG4uYWJvcnQpKXRyeXtuLmFib3J0KCl9Y2F0Y2goZSl7fXQuX2FjdGl2ZT1OYU4sQTEodCl9ZnVuY3Rpb24gQTEodCl7aWYoIXQuX2FjdGl2ZSYmdC5fY2FsbCl7dmFyIGU9dC5fZGF0YTt0Ll9kYXRhPXZvaWQgMCx0Ll9jYWxsKHQuX2Vycm9yLGUpfX1mdW5jdGlvbiBrMSh0KXtpZihudWxsPT10KXQ9MS8wO2Vsc2UgaWYoISgodD0rdCk+PTEpKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjb25jdXJyZW5jeSIpO3JldHVybiBuZXcgTTEodCl9ZnVuY3Rpb24gTDEoKXtyZXR1cm4gTWF0aC5yYW5kb20oKX1NMS5wcm90b3R5cGU9azEucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpNMSxkZWZlcjpmdW5jdGlvbih0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2siKTtpZih0aGlzLl9jYWxsKXRocm93IG5ldyBFcnJvcigiZGVmZXIgYWZ0ZXIgYXdhaXQiKTtpZihudWxsIT10aGlzLl9lcnJvcilyZXR1cm4gdGhpczt2YXIgZT13MS5jYWxsKGFyZ3VtZW50cywxKTtyZXR1cm4gZS5wdXNoKHQpLCsrdGhpcy5fd2FpdGluZyx0aGlzLl90YXNrcy5wdXNoKGUpLEUxKHRoaXMpLHRoaXN9LGFib3J0OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PXRoaXMuX2Vycm9yJiZDMSh0aGlzLG5ldyBFcnJvcigiYWJvcnQiKSksdGhpc30sYXdhaXQ6ZnVuY3Rpb24odCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrIik7aWYodGhpcy5fY2FsbCl0aHJvdyBuZXcgRXJyb3IoIm11bHRpcGxlIGF3YWl0Iik7cmV0dXJuIHRoaXMuX2NhbGw9ZnVuY3Rpb24oZSxuKXt0LmFwcGx5KG51bGwsW2VdLmNvbmNhdChuKSl9LEExKHRoaXMpLHRoaXN9LGF3YWl0QWxsOmZ1bmN0aW9uKHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjayIpO2lmKHRoaXMuX2NhbGwpdGhyb3cgbmV3IEVycm9yKCJtdWx0aXBsZSBhd2FpdCIpO3JldHVybiB0aGlzLl9jYWxsPXQsQTEodGhpcyksdGhpc319O3ZhciBQMT0oZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQsbil7cmV0dXJuIHQ9bnVsbD09dD8wOit0LG49bnVsbD09bj8xOituLDE9PT1hcmd1bWVudHMubGVuZ3RoPyhuPXQsdD0wKTpuLT10LGZ1bmN0aW9uKCl7cmV0dXJuIGUoKSpuK3R9fXJldHVybiBuLnNvdXJjZT10LG59KShMMSksTjE9KGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0LG4pe3ZhciBpLHI7cmV0dXJuIHQ9bnVsbD09dD8wOit0LG49bnVsbD09bj8xOituLGZ1bmN0aW9uKCl7dmFyIG87aWYobnVsbCE9aSlvPWksaT1udWxsO2Vsc2UgZG97aT0yKmUoKS0xLG89MiplKCktMSxyPWkqaStvKm99d2hpbGUoIXJ8fHI+MSk7cmV0dXJuIHQrbipvKk1hdGguc3FydCgtMipNYXRoLmxvZyhyKS9yKX19cmV0dXJuIG4uc291cmNlPXQsbn0pKEwxKSxJMT0oZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKCl7dmFyIHQ9TjEuc291cmNlKGUpLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5leHAodCgpKX19cmV0dXJuIG4uc291cmNlPXQsbn0pKEwxKSxPMT0oZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgbj0wLGk9MDtpPHQ7KytpKW4rPWUoKTtyZXR1cm4gbn19cmV0dXJuIG4uc291cmNlPXQsbn0pKEwxKSxSMT0oZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3ZhciBuPU8xLnNvdXJjZShlKSh0KTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbigpL3R9fXJldHVybiBuLnNvdXJjZT10LG59KShMMSksejE9KGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4tTWF0aC5sb2coMS1lKCkpL3R9fXJldHVybiBuLnNvdXJjZT10LG59KShMMSk7ZnVuY3Rpb24gRDEodCxlKXt2YXIgbixpLHIsbyxhPXNjKCJiZWZvcmVzZW5kIiwicHJvZ3Jlc3MiLCJsb2FkIiwiZXJyb3IiKSxzPXhnKCksbD1uZXcgWE1MSHR0cFJlcXVlc3QsYz1udWxsLHU9bnVsbCxoPTA7ZnVuY3Rpb24gZCh0KXt2YXIgZSxpPWwuc3RhdHVzO2lmKCFpJiYoZnVuY3Rpb24gbyh0KXt2YXIgZT10LnJlc3BvbnNlVHlwZTtyZXR1cm4gZSYmInRleHQiIT09ZT90LnJlc3BvbnNlOnQucmVzcG9uc2VUZXh0fSkobCl8fGk+PTIwMCYmaTwzMDB8fDMwND09PWkpe2lmKHIpdHJ5e2U9ci5jYWxsKG4sbCl9Y2F0Y2godCl7cmV0dXJuIHZvaWQgYS5jYWxsKCJlcnJvciIsbix0KX1lbHNlIGU9bDthLmNhbGwoImxvYWQiLG4sZSl9ZWxzZSBhLmNhbGwoImVycm9yIixuLHQpfWlmKCJ1bmRlZmluZWQiIT10eXBlb2YgWERvbWFpblJlcXVlc3QmJiEoIndpdGhDcmVkZW50aWFscyJpbiBsKSYmL14oaHR0cChzKT86KT9cL1wvLy50ZXN0KHQpJiYobD1uZXcgWERvbWFpblJlcXVlc3QpLCJvbmxvYWQiaW4gbD9sLm9ubG9hZD1sLm9uZXJyb3I9bC5vbnRpbWVvdXQ9ZDpsLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbih0KXtsLnJlYWR5U3RhdGU+MyYmZCh0KX0sbC5vbnByb2dyZXNzPWZ1bmN0aW9uKHQpe2EuY2FsbCgicHJvZ3Jlc3MiLG4sdCl9LG49e2hlYWRlcjpmdW5jdGlvbih0LGUpe3JldHVybiB0PSh0KyIiKS50b0xvd2VyQ2FzZSgpLGFyZ3VtZW50cy5sZW5ndGg8Mj9zLmdldCh0KToobnVsbD09ZT9zLnJlbW92ZSh0KTpzLnNldCh0LGUrIiIpLG4pfSxtaW1lVHlwZTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1udWxsPT10P251bGw6dCsiIixuKTppfSxyZXNwb25zZVR5cGU6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dCxuKTpvfSx0aW1lb3V0OmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPSt0LG4pOmh9LHVzZXI6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8MT9jOihjPW51bGw9PXQ/bnVsbDp0KyIiLG4pfSxwYXNzd29yZDpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwxP3U6KHU9bnVsbD09dD9udWxsOnQrIiIsbil9LHJlc3BvbnNlOmZ1bmN0aW9uKHQpe3JldHVybiByPXQsbn0sZ2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4uc2VuZCgiR0VUIix0LGUpfSxwb3N0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4uc2VuZCgiUE9TVCIsdCxlKX0sc2VuZDpmdW5jdGlvbihlLHIsZCl7cmV0dXJuIGwub3BlbihlLHQsITAsYyx1KSxudWxsPT1pfHxzLmhhcygiYWNjZXB0Iil8fHMuc2V0KCJhY2NlcHQiLGkrIiwqLyoiKSxsLnNldFJlcXVlc3RIZWFkZXImJnMuZWFjaCgoZnVuY3Rpb24odCxlKXtsLnNldFJlcXVlc3RIZWFkZXIoZSx0KX0pKSxudWxsIT1pJiZsLm92ZXJyaWRlTWltZVR5cGUmJmwub3ZlcnJpZGVNaW1lVHlwZShpKSxudWxsIT1vJiYobC5yZXNwb25zZVR5cGU9byksaD4wJiYobC50aW1lb3V0PWgpLG51bGw9PWQmJiJmdW5jdGlvbiI9PXR5cGVvZiByJiYoZD1yLHI9bnVsbCksbnVsbCE9ZCYmMT09PWQubGVuZ3RoJiYoZD0oZnVuY3Rpb24gcCh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXt0KG51bGw9PWU/bjpudWxsKX19KShkKSksbnVsbCE9ZCYmbi5vbigiZXJyb3IiLGQpLm9uKCJsb2FkIiwoZnVuY3Rpb24odCl7ZChudWxsLHQpfSkpLGEuY2FsbCgiYmVmb3Jlc2VuZCIsbixsKSxsLnNlbmQobnVsbD09cj9udWxsOnIpLG59LGFib3J0OmZ1bmN0aW9uKCl7cmV0dXJuIGwuYWJvcnQoKSxufSxvbjpmdW5jdGlvbigpe3ZhciB0PWEub24uYXBwbHkoYSxhcmd1bWVudHMpO3JldHVybiB0PT09YT9uOnR9fSxudWxsIT1lKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrZSk7cmV0dXJuIG4uZ2V0KGUpfXJldHVybiBufWZ1bmN0aW9uIEIxKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4saSl7dmFyIHI9RDEobikubWltZVR5cGUodCkucmVzcG9uc2UoZSk7aWYobnVsbCE9aSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrOiAiK2kpO3JldHVybiByLmdldChpKX1yZXR1cm4gcn19dmFyIEgxPUIxKCJ0ZXh0L2h0bWwiLChmdW5jdGlvbih0KXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQodC5yZXNwb25zZVRleHQpfSkpLEYxPUIxKCJhcHBsaWNhdGlvbi9qc29uIiwoZnVuY3Rpb24odCl7cmV0dXJuIEpTT04ucGFyc2UodC5yZXNwb25zZVRleHQpfSkpLFYxPUIxKCJ0ZXh0L3BsYWluIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQucmVzcG9uc2VUZXh0fSkpLFUxPUIxKCJhcHBsaWNhdGlvbi94bWwiLChmdW5jdGlvbih0KXt2YXIgZT10LnJlc3BvbnNlWE1MO2lmKCFlKXRocm93IG5ldyBFcnJvcigicGFyc2UgZXJyb3IiKTtyZXR1cm4gZX0pKTtmdW5jdGlvbiBqMSh0LGUpe3JldHVybiBmdW5jdGlvbihuLGkscil7YXJndW1lbnRzLmxlbmd0aDwzJiYocj1pLGk9bnVsbCk7dmFyIG89RDEobikubWltZVR5cGUodCk7cmV0dXJuIG8ucm93PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP28ucmVzcG9uc2UoRzEoZSxpPXQpKTppfSxvLnJvdyhpKSxyP28uZ2V0KHIpOm99fWZ1bmN0aW9uIEcxKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0KG4ucmVzcG9uc2VUZXh0LGUpfX12YXIgVzE9ajEoInRleHQvY3N2IixaZykscTE9ajEoInRleHQvdGFiLXNlcGFyYXRlZC12YWx1ZXMiLG9fKTtmdW5jdGlvbiBZMSh0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6dD49ZT8wOk5hTn1mdW5jdGlvbiBYMSh0KXtyZXR1cm4gMT09PXQubGVuZ3RoJiYodD0oZnVuY3Rpb24gZSh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXtyZXR1cm4gWTEodChlKSxuKX19KSh0KSkse2xlZnQ6ZnVuY3Rpb24oZSxuLGkscil7Zm9yKG51bGw9PWkmJihpPTApLG51bGw9PXImJihyPWUubGVuZ3RoKTtpPHI7KXt2YXIgbz1pK3I+Pj4xO3QoZVtvXSxuKTwwP2k9bysxOnI9b31yZXR1cm4gaX0scmlnaHQ6ZnVuY3Rpb24oZSxuLGkscil7Zm9yKG51bGw9PWkmJihpPTApLG51bGw9PXImJihyPWUubGVuZ3RoKTtpPHI7KXt2YXIgbz1pK3I+Pj4xO3QoZVtvXSxuKT4wP3I9bzppPW8rMX1yZXR1cm4gaX19fXZhciAkMT1YMShZMSkucmlnaHQ7ZnVuY3Rpb24gSzEodCl7cmV0dXJuIG51bGw9PT10P05hTjordH12YXIgWjE9TWF0aC5zcXJ0KDUwKSxKMT1NYXRoLnNxcnQoMTApLFExPU1hdGguc3FydCgyKTtmdW5jdGlvbiB0MCh0LGUsbil7dmFyIGkscixvLGEscz0tMTtpZihuPStuLCh0PSt0KT09KGU9K2UpJiZuPjApcmV0dXJuW3RdO2lmKChpPWU8dCkmJihyPXQsdD1lLGU9ciksMD09PShhPWUwKHQsZSxuKSl8fCFpc0Zpbml0ZShhKSlyZXR1cm5bXTtpZihhPjApZm9yKHQ9TWF0aC5jZWlsKHQvYSksZT1NYXRoLmZsb29yKGUvYSksbz1uZXcgQXJyYXkocj1NYXRoLmNlaWwoZS10KzEpKTsrK3M8cjspb1tzXT0odCtzKSphO2Vsc2UgZm9yKHQ9TWF0aC5mbG9vcih0KmEpLGU9TWF0aC5jZWlsKGUqYSksbz1uZXcgQXJyYXkocj1NYXRoLmNlaWwodC1lKzEpKTsrK3M8cjspb1tzXT0odC1zKS9hO3JldHVybiBpJiZvLnJldmVyc2UoKSxvfWZ1bmN0aW9uIGUwKHQsZSxuKXt2YXIgaT0oZS10KS9NYXRoLm1heCgwLG4pLHI9TWF0aC5mbG9vcihNYXRoLmxvZyhpKS9NYXRoLkxOMTApLG89aS9NYXRoLnBvdygxMCxyKTtyZXR1cm4gcj49MD8obz49WjE/MTA6bz49SjE/NTpvPj1RMT8yOjEpKk1hdGgucG93KDEwLHIpOi1NYXRoLnBvdygxMCwtcikvKG8+PVoxPzEwOm8+PUoxPzU6bz49UTE/MjoxKX1mdW5jdGlvbiBuMCh0LGUsbil7dmFyIGk9TWF0aC5hYnMoZS10KS9NYXRoLm1heCgwLG4pLHI9TWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLmxvZyhpKS9NYXRoLkxOMTApKSxvPWkvcjtyZXR1cm4gbz49WjE/cio9MTA6bz49SjE/cio9NTpvPj1RMSYmKHIqPTIpLGU8dD8tcjpyfWZ1bmN0aW9uIGkwKHQsZSxuKXtpZihudWxsPT1uJiYobj1LMSksaT10Lmxlbmd0aCl7aWYoKGU9K2UpPD0wfHxpPDIpcmV0dXJuK24odFswXSwwLHQpO2lmKGU+PTEpcmV0dXJuK24odFtpLTFdLGktMSx0KTt2YXIgaSxyPShpLTEpKmUsbz1NYXRoLmZsb29yKHIpLGE9K24odFtvXSxvLHQpO3JldHVybiBhKygrbih0W28rMV0sbysxLHQpLWEpKihyLW8pfX12YXIgcjA9IiQiO2Z1bmN0aW9uIG8wKCl7fWZ1bmN0aW9uIGEwKHQsZSl7dmFyIG49bmV3IG8wO2lmKHQgaW5zdGFuY2VvZiBvMCl0LmVhY2goKGZ1bmN0aW9uKHQsZSl7bi5zZXQoZSx0KX0pKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkodCkpe3ZhciBpLHI9LTEsbz10Lmxlbmd0aDtpZihudWxsPT1lKWZvcig7KytyPG87KW4uc2V0KHIsdFtyXSk7ZWxzZSBmb3IoOysrcjxvOyluLnNldChlKGk9dFtyXSxyLHQpLGkpfWVsc2UgaWYodClmb3IodmFyIGEgaW4gdCluLnNldChhLHRbYV0pO3JldHVybiBufWZ1bmN0aW9uIHMwKCl7fW8wLnByb3RvdHlwZT1hMC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOm8wLGhhczpmdW5jdGlvbih0KXtyZXR1cm4gcjArdCBpbiB0aGlzfSxnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXNbcjArdF19LHNldDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzW3IwK3RdPWUsdGhpc30scmVtb3ZlOmZ1bmN0aW9uKHQpe3ZhciBlPXIwK3Q7cmV0dXJuIGUgaW4gdGhpcyYmZGVsZXRlIHRoaXNbZV19LGNsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PXIwJiZkZWxldGUgdGhpc1t0XX0sa2V5czpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzKWVbMF09PT1yMCYmdC5wdXNoKGUuc2xpY2UoMSkpO3JldHVybiB0fSx2YWx1ZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcyllWzBdPT09cjAmJnQucHVzaCh0aGlzW2VdKTtyZXR1cm4gdH0sZW50cmllczpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzKWVbMF09PT1yMCYmdC5wdXNoKHtrZXk6ZS5zbGljZSgxKSx2YWx1ZTp0aGlzW2VdfSk7cmV0dXJuIHR9LHNpemU6ZnVuY3Rpb24oKXt2YXIgdD0wO2Zvcih2YXIgZSBpbiB0aGlzKWVbMF09PT1yMCYmKyt0O3JldHVybiB0fSxlbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzKWlmKHRbMF09PT1yMClyZXR1cm4hMTtyZXR1cm4hMH0sZWFjaDpmdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcyllWzBdPT09cjAmJnQodGhpc1tlXSxlLnNsaWNlKDEpLHRoaXMpfX07dmFyIGwwPWEwLnByb3RvdHlwZTtzMC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnMwLGhhczpsMC5oYXMsYWRkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzW3IwKyh0Kz0iIildPXQsdGhpc30scmVtb3ZlOmwwLnJlbW92ZSxjbGVhcjpsMC5jbGVhcix2YWx1ZXM6bDAua2V5cyxzaXplOmwwLnNpemUsZW1wdHk6bDAuZW1wdHksZWFjaDpsMC5lYWNofTt2YXIgYzA9QXJyYXkucHJvdG90eXBlLHUwPWMwLm1hcCxoMD1jMC5zbGljZSxkMD17bmFtZToiaW1wbGljaXQifTtmdW5jdGlvbiBwMCh0KXt2YXIgZT1hMCgpLG49W10saT1kMDtmdW5jdGlvbiByKHIpe3ZhciBvPXIrIiIsYT1lLmdldChvKTtpZighYSl7aWYoaSE9PWQwKXJldHVybiBpO2Uuc2V0KG8sYT1uLnB1c2gocikpfXJldHVybiB0WyhhLTEpJXQubGVuZ3RoXX1yZXR1cm4gdD1udWxsPT10P1tdOmgwLmNhbGwodCksci5kb21haW49ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIG4uc2xpY2UoKTtuPVtdLGU9YTAoKTtmb3IodmFyIGksbyxhPS0xLHM9dC5sZW5ndGg7KythPHM7KWUuaGFzKG89KGk9dFthXSkrIiIpfHxlLnNldChvLG4ucHVzaChpKSk7cmV0dXJuIHJ9LHIucmFuZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9aDAuY2FsbChlKSxyKTp0LnNsaWNlKCl9LHIudW5rbm93bj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LHIpOml9LHIuY29weT1mdW5jdGlvbigpe3JldHVybiBwMCgpLmRvbWFpbihuKS5yYW5nZSh0KS51bmtub3duKGkpfSxyfWZ1bmN0aW9uIGYwKCl7dmFyIHQsZSxuPXAwKCkudW5rbm93bih2b2lkIDApLGk9bi5kb21haW4scj1uLnJhbmdlLG89WzAsMV0sYT0hMSxzPTAsbD0wLGM9LjU7ZnVuY3Rpb24gdSgpe3ZhciBuPWkoKS5sZW5ndGgsdT1vWzFdPG9bMF0saD1vW3UtMF0sZD1vWzEtdV07dD0oZC1oKS9NYXRoLm1heCgxLG4tcysyKmwpLGEmJih0PU1hdGguZmxvb3IodCkpLGgrPShkLWgtdCoobi1zKSkqYyxlPXQqKDEtcyksYSYmKGg9TWF0aC5yb3VuZChoKSxlPU1hdGgucm91bmQoZSkpO3ZhciBwPShmdW5jdGlvbiBmKHQsZSxuKXt0PSt0LGU9K2Usbj0ocj1hcmd1bWVudHMubGVuZ3RoKTwyPyhlPXQsdD0wLDEpOnI8Mz8xOituO2Zvcih2YXIgaT0tMSxyPTB8TWF0aC5tYXgoMCxNYXRoLmNlaWwoKGUtdCkvbikpLG89bmV3IEFycmF5KHIpOysraTxyOylvW2ldPXQraSpuO3JldHVybiBvfSkobikubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gaCt0KmV9KSk7cmV0dXJuIHIodT9wLnJldmVyc2UoKTpwKX1yZXR1cm4gZGVsZXRlIG4udW5rbm93bixuLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaSh0KSx1KCkpOmkoKX0sbi5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1bK3RbMF0sK3RbMV1dLHUoKSk6by5zbGljZSgpfSxuLnJhbmdlUm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIG89Wyt0WzBdLCt0WzFdXSxhPSEwLHUoKX0sbi5iYW5kd2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gZX0sbi5zdGVwPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LG4ucm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ISF0LHUoKSk6YX0sbi5wYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPWw9TWF0aC5tYXgoMCxNYXRoLm1pbigxLHQpKSx1KCkpOnN9LG4ucGFkZGluZ0lubmVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPU1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSksdSgpKTpzfSxuLnBhZGRpbmdPdXRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD1NYXRoLm1heCgwLE1hdGgubWluKDEsdCkpLHUoKSk6bH0sbi5hbGlnbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1NYXRoLm1heCgwLE1hdGgubWluKDEsdCkpLHUoKSk6Y30sbi5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGYwKCkuZG9tYWluKGkoKSkucmFuZ2Uobykucm91bmQoYSkucGFkZGluZ0lubmVyKHMpLnBhZGRpbmdPdXRlcihsKS5hbGlnbihjKX0sdSgpfWZ1bmN0aW9uIG0wKHQpe3ZhciBlPXQuY29weTtyZXR1cm4gdC5wYWRkaW5nPXQucGFkZGluZ091dGVyLGRlbGV0ZSB0LnBhZGRpbmdJbm5lcixkZWxldGUgdC5wYWRkaW5nT3V0ZXIsdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIG0wKGUoKSl9LHR9ZnVuY3Rpb24gZzAodCxlLG4pe3QucHJvdG90eXBlPWUucHJvdG90eXBlPW4sbi5jb25zdHJ1Y3Rvcj10fWZ1bmN0aW9uIF8wKHQsZSl7dmFyIG49T2JqZWN0LmNyZWF0ZSh0LnByb3RvdHlwZSk7Zm9yKHZhciBpIGluIGUpbltpXT1lW2ldO3JldHVybiBufWZ1bmN0aW9uIHkwKCl7fXZhciB2MD0uNyxiMD0xL3YwLHgwPSJcXHMqKFsrLV0/XFxkKylcXHMqIix3MD0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixTMD0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIsTTA9L14jKFswLTlhLWZdezMsOH0pJC8sRTA9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW3gwLHgwLHgwXSsiXFwpJCIpLFQwPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tTMCxTMCxTMF0rIlxcKSQiKSxDMD1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW3gwLHgwLHgwLHcwXSsiXFwpJCIpLEEwPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbUzAsUzAsUzAsdzBdKyJcXCkkIiksazA9bmV3IFJlZ0V4cCgiXmhzbFxcKCIrW3cwLFMwLFMwXSsiXFwpJCIpLEwwPW5ldyBSZWdFeHAoIl5oc2xhXFwoIitbdzAsUzAsUzAsdzBdKyJcXCkkIiksUDA9e2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH07ZnVuY3Rpb24gTjAoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXgoKX1mdW5jdGlvbiBJMCgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdFJnYigpfWZ1bmN0aW9uIE8wKHQpe3ZhciBlLG47cmV0dXJuIHQ9KHQrIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLChlPU0wLmV4ZWModCkpPyhuPWVbMV0ubGVuZ3RoLGU9cGFyc2VJbnQoZVsxXSwxNiksNj09PW4/UjAoZSk6Mz09PW4/bmV3IEgwKGU+PjgmMTV8ZT4+NCYyNDAsZT4+NCYxNXwyNDAmZSwoMTUmZSk8PDR8MTUmZSwxKTo4PT09bj96MChlPj4yNCYyNTUsZT4+MTYmMjU1LGU+PjgmMjU1LCgyNTUmZSkvMjU1KTo0PT09bj96MChlPj4xMiYxNXxlPj44JjI0MCxlPj44JjE1fGU+PjQmMjQwLGU+PjQmMTV8MjQwJmUsKCgxNSZlKTw8NHwxNSZlKS8yNTUpOm51bGwpOihlPUUwLmV4ZWModCkpP25ldyBIMChlWzFdLGVbMl0sZVszXSwxKTooZT1UMC5leGVjKHQpKT9uZXcgSDAoMjU1KmVbMV0vMTAwLDI1NSplWzJdLzEwMCwyNTUqZVszXS8xMDAsMSk6KGU9QzAuZXhlYyh0KSk/ejAoZVsxXSxlWzJdLGVbM10sZVs0XSk6KGU9QTAuZXhlYyh0KSk/ejAoMjU1KmVbMV0vMTAwLDI1NSplWzJdLzEwMCwyNTUqZVszXS8xMDAsZVs0XSk6KGU9azAuZXhlYyh0KSk/ajAoZVsxXSxlWzJdLzEwMCxlWzNdLzEwMCwxKTooZT1MMC5leGVjKHQpKT9qMChlWzFdLGVbMl0vMTAwLGVbM10vMTAwLGVbNF0pOlAwLmhhc093blByb3BlcnR5KHQpP1IwKFAwW3RdKToidHJhbnNwYXJlbnQiPT09dD9uZXcgSDAoTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiBSMCh0KXtyZXR1cm4gbmV3IEgwKHQ+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdCwxKX1mdW5jdGlvbiB6MCh0LGUsbixpKXtyZXR1cm4gaTw9MCYmKHQ9ZT1uPU5hTiksbmV3IEgwKHQsZSxuLGkpfWZ1bmN0aW9uIEQwKHQpe3JldHVybiB0IGluc3RhbmNlb2YgeTB8fCh0PU8wKHQpKSx0P25ldyBIMCgodD10LnJnYigpKS5yLHQuZyx0LmIsdC5vcGFjaXR5KTpuZXcgSDB9ZnVuY3Rpb24gQjAodCxlLG4saSl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP0QwKHQpOm5ldyBIMCh0LGUsbixudWxsPT1pPzE6aSl9ZnVuY3Rpb24gSDAodCxlLG4saSl7dGhpcy5yPSt0LHRoaXMuZz0rZSx0aGlzLmI9K24sdGhpcy5vcGFjaXR5PStpfWZ1bmN0aW9uIEYwKCl7cmV0dXJuIiMiK1UwKHRoaXMucikrVTAodGhpcy5nKStVMCh0aGlzLmIpfWZ1bmN0aW9uIFYwKCl7dmFyIHQ9dGhpcy5vcGFjaXR5O3JldHVybigxPT09KHQ9aXNOYU4odCk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsdCkpKT8icmdiKCI6InJnYmEoIikrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLnIpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuZyl8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5iKXx8MCkpKygxPT09dD8iKSI6IiwgIit0KyIpIil9ZnVuY3Rpb24gVTAodCl7cmV0dXJuKCh0PU1hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodCl8fDApKSk8MTY/IjAiOiIiKSt0LnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBqMCh0LGUsbixpKXtyZXR1cm4gaTw9MD90PWU9bj1OYU46bjw9MHx8bj49MT90PWU9TmFOOmU8PTAmJih0PU5hTiksbmV3IFcwKHQsZSxuLGkpfWZ1bmN0aW9uIEcwKHQpe2lmKHQgaW5zdGFuY2VvZiBXMClyZXR1cm4gbmV3IFcwKHQuaCx0LnMsdC5sLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIHkwfHwodD1PMCh0KSksIXQpcmV0dXJuIG5ldyBXMDtpZih0IGluc3RhbmNlb2YgVzApcmV0dXJuIHQ7dmFyIGU9KHQ9dC5yZ2IoKSkuci8yNTUsbj10LmcvMjU1LGk9dC5iLzI1NSxyPU1hdGgubWluKGUsbixpKSxvPU1hdGgubWF4KGUsbixpKSxhPU5hTixzPW8tcixsPShvK3IpLzI7cmV0dXJuIHM/KGE9ZT09PW8/KG4taSkvcys2KihuPGkpOm49PT1vPyhpLWUpL3MrMjooZS1uKS9zKzQscy89bDwuNT9vK3I6Mi1vLXIsYSo9NjApOnM9bD4wJiZsPDE/MDphLG5ldyBXMChhLHMsbCx0Lm9wYWNpdHkpfWZ1bmN0aW9uIFcwKHQsZSxuLGkpe3RoaXMuaD0rdCx0aGlzLnM9K2UsdGhpcy5sPStuLHRoaXMub3BhY2l0eT0raX1mdW5jdGlvbiBxMCh0LGUsbil7cmV0dXJuIDI1NSoodDw2MD9lKyhuLWUpKnQvNjA6dDwxODA/bjp0PDI0MD9lKyhuLWUpKigyNDAtdCkvNjA6ZSl9ZzAoeTAsTzAse2NvcHk6ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IHRoaXMuY29uc3RydWN0b3IsdGhpcyx0KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpfSxoZXg6TjAsZm9ybWF0SGV4Ok4wLGZvcm1hdEhzbDpmdW5jdGlvbiBZMCgpe3JldHVybiBHMCh0aGlzKS5mb3JtYXRIc2woKX0sZm9ybWF0UmdiOkkwLHRvU3RyaW5nOkkwfSksZzAoSDAsQjAsXzAoeTAse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/YjA6TWF0aC5wb3coYjAsdCksbmV3IEgwKHRoaXMucip0LHRoaXMuZyp0LHRoaXMuYip0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P3YwOk1hdGgucG93KHYwLHQpLG5ldyBIMCh0aGlzLnIqdCx0aGlzLmcqdCx0aGlzLmIqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4tLjU8PXRoaXMuciYmdGhpcy5yPDI1NS41JiYtLjU8PXRoaXMuZyYmdGhpcy5nPDI1NS41JiYtLjU8PXRoaXMuYiYmdGhpcy5iPDI1NS41JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4OkYwLGZvcm1hdEhleDpGMCxmb3JtYXRSZ2I6VjAsdG9TdHJpbmc6VjB9KSksZzAoVzAsKGZ1bmN0aW9uIFgwKHQsZSxuLGkpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9HMCh0KTpuZXcgVzAodCxlLG4sbnVsbD09aT8xOmkpfSksXzAoeTAse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/YjA6TWF0aC5wb3coYjAsdCksbmV3IFcwKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/djA6TWF0aC5wb3codjAsdCksbmV3IFcwKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5oJTM2MCszNjAqKHRoaXMuaDwwKSxlPWlzTmFOKHQpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLG49dGhpcy5sLGk9bisobjwuNT9uOjEtbikqZSxyPTIqbi1pO3JldHVybiBuZXcgSDAocTAodD49MjQwP3QtMjQwOnQrMTIwLHIsaSkscTAodCxyLGkpLHEwKHQ8MTIwP3QrMjQwOnQtMTIwLHIsaSksdGhpcy5vcGFjaXR5KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGZvcm1hdEhzbDpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3BhY2l0eTtyZXR1cm4oMT09PSh0PWlzTmFOKHQpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLHQpKSk/ImhzbCgiOiJoc2xhKCIpKyh0aGlzLmh8fDApKyIsICIrMTAwKih0aGlzLnN8fDApKyIlLCAiKzEwMCoodGhpcy5sfHwwKSsiJSIrKDE9PT10PyIpIjoiLCAiK3QrIikiKX19KSk7dmFyICQwPU1hdGguUEkvMTgwLEswPTE4MC9NYXRoLlBJLFowPS0uMTQ4NjEsSjA9MS43ODI3NyxRMD0tLjI5MjI3LHQyPS0uOTA2NDksZTI9MS45NzI5NCxuMj1lMip0MixpMj1lMipKMCxyMj1KMCpRMC10MipaMDtmdW5jdGlvbiBvMih0KXtpZih0IGluc3RhbmNlb2YgczIpcmV0dXJuIG5ldyBzMih0LmgsdC5zLHQubCx0Lm9wYWNpdHkpO3QgaW5zdGFuY2VvZiBIMHx8KHQ9RDAodCkpO3ZhciBlPXQuZy8yNTUsbj10LmIvMjU1LGk9KHIyKm4rbjIqKHQuci8yNTUpLWkyKmUpLyhyMituMi1pMikscj1uLWksbz0oZTIqKGUtaSktUTAqcikvdDIsYT1NYXRoLnNxcnQobypvK3IqcikvKGUyKmkqKDEtaSkpLHM9YT9NYXRoLmF0YW4yKG8scikqSzAtMTIwOk5hTjtyZXR1cm4gbmV3IHMyKHM8MD9zKzM2MDpzLGEsaSx0Lm9wYWNpdHkpfWZ1bmN0aW9uIGEyKHQsZSxuLGkpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9vMih0KTpuZXcgczIodCxlLG4sbnVsbD09aT8xOmkpfWZ1bmN0aW9uIHMyKHQsZSxuLGkpe3RoaXMuaD0rdCx0aGlzLnM9K2UsdGhpcy5sPStuLHRoaXMub3BhY2l0eT0raX1mdW5jdGlvbiBsMih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gYzIodCxlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHQrbiplfX1mdW5jdGlvbiB1Mih0LGUpe3ZhciBuPWUtdDtyZXR1cm4gbj9jMih0LG4pOmwyKGlzTmFOKHQpP2U6dCl9ZzAoczIsYTIsXzAoeTAse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/YjA6TWF0aC5wb3coYjAsdCksbmV3IHMyKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/djA6TWF0aC5wb3codjAsdCksbmV3IHMyKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIHQ9aXNOYU4odGhpcy5oKT8wOih0aGlzLmgrMTIwKSokMCxlPSt0aGlzLmwsbj1pc05hTih0aGlzLnMpPzA6dGhpcy5zKmUqKDEtZSksaT1NYXRoLmNvcyh0KSxyPU1hdGguc2luKHQpO3JldHVybiBuZXcgSDAoMjU1KihlK24qKFowKmkrSjAqcikpLDI1NSooZStuKihRMCppK3QyKnIpKSwyNTUqKGUrbiooZTIqaSkpLHRoaXMub3BhY2l0eSl9fSkpO3ZhciBoMj0oZnVuY3Rpb24gdChlKXt2YXIgbj0oZnVuY3Rpb24gaSh0KXtyZXR1cm4gMT09KHQ9K3QpP3UyOmZ1bmN0aW9uKGUsbil7cmV0dXJuIG4tZT8oZnVuY3Rpb24gaSh0LGUsbil7cmV0dXJuIHQ9TWF0aC5wb3codCxuKSxlPU1hdGgucG93KGUsbiktdCxuPTEvbixmdW5jdGlvbihpKXtyZXR1cm4gTWF0aC5wb3codCtpKmUsbil9fSkoZSxuLHQpOmwyKGlzTmFOKGUpP246ZSl9fSkoZSk7ZnVuY3Rpb24gcih0LGUpe3ZhciBpPW4oKHQ9QjAodCkpLnIsKGU9QjAoZSkpLnIpLHI9bih0LmcsZS5nKSxvPW4odC5iLGUuYiksYT11Mih0Lm9wYWNpdHksZS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQucj1pKGUpLHQuZz1yKGUpLHQuYj1vKGUpLHQub3BhY2l0eT1hKGUpLHQrIiJ9fXJldHVybiByLmdhbW1hPXQscn0pKDEpO2Z1bmN0aW9uIGQyKHQsZSl7ZXx8KGU9W10pO3ZhciBuLGk9dD9NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aCk6MCxyPWUuc2xpY2UoKTtyZXR1cm4gZnVuY3Rpb24obyl7Zm9yKG49MDtuPGk7KytuKXJbbl09dFtuXSooMS1vKStlW25dKm87cmV0dXJuIHJ9fWZ1bmN0aW9uIHAyKHQsZSl7dmFyIG4saT1lP2UubGVuZ3RoOjAscj10P01hdGgubWluKGksdC5sZW5ndGgpOjAsbz1uZXcgQXJyYXkociksYT1uZXcgQXJyYXkoaSk7Zm9yKG49MDtuPHI7KytuKW9bbl09YjIodFtuXSxlW25dKTtmb3IoO248aTsrK24pYVtuXT1lW25dO3JldHVybiBmdW5jdGlvbih0KXtmb3Iobj0wO248cjsrK24pYVtuXT1vW25dKHQpO3JldHVybiBhfX1mdW5jdGlvbiBmMih0LGUpe3ZhciBuPW5ldyBEYXRlO3JldHVybiB0PSt0LGU9K2UsZnVuY3Rpb24oaSl7cmV0dXJuIG4uc2V0VGltZSh0KigxLWkpK2UqaSksbn19ZnVuY3Rpb24gbTIodCxlKXtyZXR1cm4gdD0rdCxlPStlLGZ1bmN0aW9uKG4pe3JldHVybiB0KigxLW4pK2Uqbn19ZnVuY3Rpb24gZzIodCxlKXt2YXIgbixpPXt9LHI9e307Zm9yKG4gaW4gbnVsbCE9PXQmJiJvYmplY3QiPT10eXBlb2YgdHx8KHQ9e30pLG51bGwhPT1lJiYib2JqZWN0Ij09dHlwZW9mIGV8fChlPXt9KSxlKW4gaW4gdD9pW25dPWIyKHRbbl0sZVtuXSk6cltuXT1lW25dO3JldHVybiBmdW5jdGlvbih0KXtmb3IobiBpbiBpKXJbbl09aVtuXSh0KTtyZXR1cm4gcn19dmFyIF8yPS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyx5Mj1uZXcgUmVnRXhwKF8yLnNvdXJjZSwiZyIpO2Z1bmN0aW9uIHYyKHQsZSl7dmFyIG4saSxyLG89XzIubGFzdEluZGV4PXkyLmxhc3RJbmRleD0wLGE9LTEscz1bXSxsPVtdO2Zvcih0Kz0iIixlKz0iIjsobj1fMi5leGVjKHQpKSYmKGk9eTIuZXhlYyhlKSk7KShyPWkuaW5kZXgpPm8mJihyPWUuc2xpY2UobyxyKSxzW2FdP3NbYV0rPXI6c1srK2FdPXIpLChuPW5bMF0pPT09KGk9aVswXSk/c1thXT9zW2FdKz1pOnNbKythXT1pOihzWysrYV09bnVsbCxsLnB1c2goe2k6YSx4Om0yKG4saSl9KSksbz15Mi5sYXN0SW5kZXg7cmV0dXJuIG88ZS5sZW5ndGgmJihyPWUuc2xpY2Uobyksc1thXT9zW2FdKz1yOnNbKythXT1yKSxzLmxlbmd0aDwyP2xbMF0/KGZ1bmN0aW9uIGModCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0KGUpKyIifX0pKGxbMF0ueCk6KGZ1bmN0aW9uIHUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSkoZSk6KGU9bC5sZW5ndGgsZnVuY3Rpb24odCl7Zm9yKHZhciBuLGk9MDtpPGU7KytpKXNbKG49bFtpXSkuaV09bi54KHQpO3JldHVybiBzLmpvaW4oIiIpfSl9ZnVuY3Rpb24gYjIodCxlKXt2YXIgbixpPXR5cGVvZiBlO3JldHVybiBudWxsPT1lfHwiYm9vbGVhbiI9PT1pP2wyKGUpOigibnVtYmVyIj09PWk/bTI6InN0cmluZyI9PT1pPyhuPU8wKGUpKT8oZT1uLGgyKTp2MjplIGluc3RhbmNlb2YgTzA/aDI6ZSBpbnN0YW5jZW9mIERhdGU/ZjI6KGZ1bmN0aW9uIHIodCl7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyh0KSYmISh0IGluc3RhbmNlb2YgRGF0YVZpZXcpfSkoZSk/ZDI6QXJyYXkuaXNBcnJheShlKT9wMjoiZnVuY3Rpb24iIT10eXBlb2YgZS52YWx1ZU9mJiYiZnVuY3Rpb24iIT10eXBlb2YgZS50b1N0cmluZ3x8aXNOYU4oZSk/ZzI6bTIpKHQsZSl9ZnVuY3Rpb24geDIodCxlKXtyZXR1cm4gdD0rdCxlPStlLGZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnJvdW5kKHQqKDEtbikrZSpuKX19ZnVuY3Rpb24gdzIodCl7cmV0dXJuKGZ1bmN0aW9uIGUobil7ZnVuY3Rpb24gaShlLGkpe3ZhciByPXQoKGU9YTIoZSkpLmgsKGk9YTIoaSkpLmgpLG89dTIoZS5zLGkucyksYT11MihlLmwsaS5sKSxzPXUyKGUub3BhY2l0eSxpLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZS5oPXIodCksZS5zPW8odCksZS5sPWEoTWF0aC5wb3codCxuKSksZS5vcGFjaXR5PXModCksZSsiIn19cmV0dXJuIG49K24saS5nYW1tYT1lLGl9KSgxKX13MigoZnVuY3Rpb24gUzIodCxlKXt2YXIgbj1lLXQ7cmV0dXJuIG4/YzIodCxuPjE4MHx8bjwtMTgwP24tMzYwKk1hdGgucm91bmQobi8zNjApOm4pOmwyKGlzTmFOKHQpP2U6dCl9KSk7dmFyIE0yPXcyKHUyKTtmdW5jdGlvbiBFMih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gVDIodCl7cmV0dXJuK3R9dmFyIEMyPVswLDFdO2Z1bmN0aW9uIEEyKHQsZSl7cmV0dXJuKGUtPXQ9K3QpP2Z1bmN0aW9uKG4pe3JldHVybihuLXQpL2V9OkUyKGUpfWZ1bmN0aW9uIGsyKHQsZSxuLGkpe3ZhciByPXRbMF0sbz10WzFdLGE9ZVswXSxzPWVbMV07cmV0dXJuIG88cj8ocj1uKG8sciksYT1pKHMsYSkpOihyPW4ocixvKSxhPWkoYSxzKSksZnVuY3Rpb24odCl7cmV0dXJuIGEocih0KSl9fWZ1bmN0aW9uIEwyKHQsZSxuLGkpe3ZhciByPU1hdGgubWluKHQubGVuZ3RoLGUubGVuZ3RoKS0xLG89bmV3IEFycmF5KHIpLGE9bmV3IEFycmF5KHIpLHM9LTE7Zm9yKHRbcl08dFswXSYmKHQ9dC5zbGljZSgpLnJldmVyc2UoKSxlPWUuc2xpY2UoKS5yZXZlcnNlKCkpOysrczxyOylvW3NdPW4odFtzXSx0W3MrMV0pLGFbc109aShlW3NdLGVbcysxXSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPSQxKHQsZSwxLHIpLTE7cmV0dXJuIGFbbl0ob1tuXShlKSl9fWZ1bmN0aW9uIFAyKHQsZSl7cmV0dXJuIGUuZG9tYWluKHQuZG9tYWluKCkpLnJhbmdlKHQucmFuZ2UoKSkuaW50ZXJwb2xhdGUodC5pbnRlcnBvbGF0ZSgpKS5jbGFtcCh0LmNsYW1wKCkpfWZ1bmN0aW9uIE4yKHQsZSl7dmFyIG4saSxyLG89QzIsYT1DMixzPWIyLGw9ITE7ZnVuY3Rpb24gYygpe3JldHVybiBuPU1hdGgubWluKG8ubGVuZ3RoLGEubGVuZ3RoKT4yP0wyOmsyLGk9cj1udWxsLHV9ZnVuY3Rpb24gdShlKXtyZXR1cm4oaXx8KGk9bihvLGEsbD8oZnVuY3Rpb24gcih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXt2YXIgaT10KGU9K2Usbj0rbik7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0PD1lPzA6dD49bj8xOmkodCl9fX0pKHQpOnQscykpKSgrZSl9cmV0dXJuIHUuaW52ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybihyfHwocj1uKGEsbyxBMixsPyhmdW5jdGlvbiBpKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3ZhciBpPXQoZT0rZSxuPStuKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQ8PTA/ZTp0Pj0xP246aSh0KX19fSkoZSk6ZSkpKSgrdCl9LHUuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXUwLmNhbGwodCxUMiksYygpKTpvLnNsaWNlKCl9LHUucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9aDAuY2FsbCh0KSxjKCkpOmEuc2xpY2UoKX0sdS5yYW5nZVJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBhPWgwLmNhbGwodCkscz14MixjKCl9LHUuY2xhbXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9ISF0LGMoKSk6bH0sdS5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz10LGMoKSk6c30sYygpfWZ1bmN0aW9uIEkyKHQsZSl7aWYoKG49KHQ9ZT90LnRvRXhwb25lbnRpYWwoZS0xKTp0LnRvRXhwb25lbnRpYWwoKSkuaW5kZXhPZigiZSIpKTwwKXJldHVybiBudWxsO3ZhciBuLGk9dC5zbGljZSgwLG4pO3JldHVybltpLmxlbmd0aD4xP2lbMF0raS5zbGljZSgyKTppLCt0LnNsaWNlKG4rMSldfWZ1bmN0aW9uIE8yKHQpe3JldHVybih0PUkyKE1hdGguYWJzKHQpKSk/dFsxXTpOYU59dmFyIFIyLHoyPS9eKD86KC4pPyhbPD49Xl0pKT8oWytcLSggXSk/KFskI10pPygwKT8oXGQrKT8oLCk/KFwuXGQrKT8ofik/KFthLXolXSk/JC9pO2Z1bmN0aW9uIEQyKHQpe2lmKCEoZT16Mi5leGVjKHQpKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9ybWF0OiAiK3QpO3ZhciBlO3JldHVybiBuZXcgQjIoe2ZpbGw6ZVsxXSxhbGlnbjplWzJdLHNpZ246ZVszXSxzeW1ib2w6ZVs0XSx6ZXJvOmVbNV0sd2lkdGg6ZVs2XSxjb21tYTplWzddLHByZWNpc2lvbjplWzhdJiZlWzhdLnNsaWNlKDEpLHRyaW06ZVs5XSx0eXBlOmVbMTBdfSl9ZnVuY3Rpb24gQjIodCl7dGhpcy5maWxsPXZvaWQgMD09PXQuZmlsbD8iICI6dC5maWxsKyIiLHRoaXMuYWxpZ249dm9pZCAwPT09dC5hbGlnbj8iPiI6dC5hbGlnbisiIix0aGlzLnNpZ249dm9pZCAwPT09dC5zaWduPyItIjp0LnNpZ24rIiIsdGhpcy5zeW1ib2w9dm9pZCAwPT09dC5zeW1ib2w/IiI6dC5zeW1ib2wrIiIsdGhpcy56ZXJvPSEhdC56ZXJvLHRoaXMud2lkdGg9dm9pZCAwPT09dC53aWR0aD92b2lkIDA6K3Qud2lkdGgsdGhpcy5jb21tYT0hIXQuY29tbWEsdGhpcy5wcmVjaXNpb249dm9pZCAwPT09dC5wcmVjaXNpb24/dm9pZCAwOit0LnByZWNpc2lvbix0aGlzLnRyaW09ISF0LnRyaW0sdGhpcy50eXBlPXZvaWQgMD09PXQudHlwZT8iIjp0LnR5cGUrIiJ9ZnVuY3Rpb24gSDIodCxlKXt2YXIgbj1JMih0LGUpO2lmKCFuKXJldHVybiB0KyIiO3ZhciBpPW5bMF0scj1uWzFdO3JldHVybiByPDA/IjAuIituZXcgQXJyYXkoLXIpLmpvaW4oIjAiKStpOmkubGVuZ3RoPnIrMT9pLnNsaWNlKDAscisxKSsiLiIraS5zbGljZShyKzEpOmkrbmV3IEFycmF5KHItaS5sZW5ndGgrMikuam9pbigiMCIpfUQyLnByb3RvdHlwZT1CMi5wcm90b3R5cGUsQjIucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsbCt0aGlzLmFsaWduK3RoaXMuc2lnbit0aGlzLnN5bWJvbCsodGhpcy56ZXJvPyIwIjoiIikrKHZvaWQgMD09PXRoaXMud2lkdGg/IiI6TWF0aC5tYXgoMSwwfHRoaXMud2lkdGgpKSsodGhpcy5jb21tYT8iLCI6IiIpKyh2b2lkIDA9PT10aGlzLnByZWNpc2lvbj8iIjoiLiIrTWF0aC5tYXgoMCwwfHRoaXMucHJlY2lzaW9uKSkrKHRoaXMudHJpbT8ifiI6IiIpK3RoaXMudHlwZX07dmFyIEYyPXsiJSI6ZnVuY3Rpb24odCxlKXtyZXR1cm4oMTAwKnQpLnRvRml4ZWQoZSl9LGI6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoMil9LGM6ZnVuY3Rpb24odCl7cmV0dXJuIHQrIiJ9LGQ6ZnVuY3Rpb24gVjIodCl7cmV0dXJuIE1hdGguYWJzKHQ9TWF0aC5yb3VuZCh0KSk+PTFlMjE/dC50b0xvY2FsZVN0cmluZygiZW4iKS5yZXBsYWNlKC8sL2csIiIpOnQudG9TdHJpbmcoMTApfSxlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudG9FeHBvbmVudGlhbChlKX0sZjpmdW5jdGlvbih0LGUpe3JldHVybiB0LnRvRml4ZWQoZSl9LGc6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50b1ByZWNpc2lvbihlKX0sbzpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZyg4KX0scDpmdW5jdGlvbih0LGUpe3JldHVybiBIMigxMDAqdCxlKX0scjpIMixzOmZ1bmN0aW9uIFUyKHQsZSl7dmFyIG49STIodCxlKTtpZighbilyZXR1cm4gdCsiIjt2YXIgaT1uWzBdLHI9blsxXSxvPXItKFIyPTMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKHIvMykpKSkrMSxhPWkubGVuZ3RoO3JldHVybiBvPT09YT9pOm8+YT9pK25ldyBBcnJheShvLWErMSkuam9pbigiMCIpOm8+MD9pLnNsaWNlKDAsbykrIi4iK2kuc2xpY2Uobyk6IjAuIituZXcgQXJyYXkoMS1vKS5qb2luKCIwIikrSTIodCxNYXRoLm1heCgwLGUrby0xKSlbMF19LFg6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9LHg6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoMTYpfX07ZnVuY3Rpb24gajIodCl7cmV0dXJuIHR9dmFyIEcyLFcyLHEyLFkyPUFycmF5LnByb3RvdHlwZS5tYXAsWDI9WyJ5IiwieiIsImEiLCJmIiwicCIsIm4iLCLCtSIsIm0iLCIiLCJrIiwiTSIsIkciLCJUIiwiUCIsIkUiLCJaIiwiWSJdO2Z1bmN0aW9uICQyKHQpe3ZhciBlPXQuZG9tYWluO3JldHVybiB0LnRpY2tzPWZ1bmN0aW9uKHQpe3ZhciBuPWUoKTtyZXR1cm4gdDAoblswXSxuW24ubGVuZ3RoLTFdLG51bGw9PXQ/MTA6dCl9LHQudGlja0Zvcm1hdD1mdW5jdGlvbih0LG4pe3JldHVybihmdW5jdGlvbiBpKHQsZSxuKXt2YXIgaSxyPXRbMF0sbz10W3QubGVuZ3RoLTFdLGE9bjAocixvLG51bGw9PWU/MTA6ZSk7c3dpdGNoKChuPUQyKG51bGw9PW4/IixmIjpuKSkudHlwZSl7Y2FzZSJzIjp2YXIgcz1NYXRoLm1heChNYXRoLmFicyhyKSxNYXRoLmFicyhvKSk7cmV0dXJuIG51bGwhPW4ucHJlY2lzaW9ufHxpc05hTihpPShmdW5jdGlvbiBsKHQsZSl7cmV0dXJuIE1hdGgubWF4KDAsMypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoTzIoZSkvMykpKS1PMihNYXRoLmFicyh0KSkpfSkoYSxzKSl8fChuLnByZWNpc2lvbj1pKSxxMihuLHMpO2Nhc2UiIjpjYXNlImUiOmNhc2UiZyI6Y2FzZSJwIjpjYXNlInIiOm51bGwhPW4ucHJlY2lzaW9ufHxpc05hTihpPShmdW5jdGlvbiBjKHQsZSl7cmV0dXJuIHQ9TWF0aC5hYnModCksZT1NYXRoLmFicyhlKS10LE1hdGgubWF4KDAsTzIoZSktTzIodCkpKzF9KShhLE1hdGgubWF4KE1hdGguYWJzKHIpLE1hdGguYWJzKG8pKSkpfHwobi5wcmVjaXNpb249aS0oImUiPT09bi50eXBlKSk7YnJlYWs7Y2FzZSJmIjpjYXNlIiUiOm51bGwhPW4ucHJlY2lzaW9ufHxpc05hTihpPShmdW5jdGlvbiB1KHQpe3JldHVybiBNYXRoLm1heCgwLC1PMihNYXRoLmFicyh0KSkpfSkoYSkpfHwobi5wcmVjaXNpb249aS0yKigiJSI9PT1uLnR5cGUpKX1yZXR1cm4gVzIobil9KShlKCksdCxuKX0sdC5uaWNlPWZ1bmN0aW9uKG4pe251bGw9PW4mJihuPTEwKTt2YXIgaSxyPWUoKSxvPTAsYT1yLmxlbmd0aC0xLHM9cltvXSxsPXJbYV07cmV0dXJuIGw8cyYmKGk9cyxzPWwsbD1pLGk9byxvPWEsYT1pKSwoaT1lMChzLGwsbikpPjA/aT1lMChzPU1hdGguZmxvb3Iocy9pKSppLGw9TWF0aC5jZWlsKGwvaSkqaSxuKTppPDAmJihpPWUwKHM9TWF0aC5jZWlsKHMqaSkvaSxsPU1hdGguZmxvb3IobCppKS9pLG4pKSxpPjA/KHJbb109TWF0aC5mbG9vcihzL2kpKmksclthXT1NYXRoLmNlaWwobC9pKSppLGUocikpOmk8MCYmKHJbb109TWF0aC5jZWlsKHMqaSkvaSxyW2FdPU1hdGguZmxvb3IobCppKS9pLGUocikpLHR9LHR9ZnVuY3Rpb24gSzIodCxlKXt2YXIgbixpPTAscj0odD10LnNsaWNlKCkpLmxlbmd0aC0xLG89dFtpXSxhPXRbcl07cmV0dXJuIGE8byYmKG49aSxpPXIscj1uLG49byxvPWEsYT1uKSx0W2ldPWUuZmxvb3IobyksdFtyXT1lLmNlaWwoYSksdH1mdW5jdGlvbiBaMih0LGUpe3JldHVybihlPU1hdGgubG9nKGUvdCkpP2Z1bmN0aW9uKG4pe3JldHVybiBNYXRoLmxvZyhuL3QpL2V9OkUyKGUpfWZ1bmN0aW9uIEoyKHQsZSl7cmV0dXJuIHQ8MD9mdW5jdGlvbihuKXtyZXR1cm4tTWF0aC5wb3coLWUsbikqTWF0aC5wb3coLXQsMS1uKX06ZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucG93KGUsbikqTWF0aC5wb3codCwxLW4pfX1mdW5jdGlvbiBRMih0KXtyZXR1cm4gaXNGaW5pdGUodCk/KygiMWUiK3QpOnQ8MD8wOnR9ZnVuY3Rpb24gdDUodCl7cmV0dXJuIDEwPT09dD9RMjp0PT09TWF0aC5FP01hdGguZXhwOmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnBvdyh0LGUpfX1mdW5jdGlvbiBlNSh0KXtyZXR1cm4gdD09PU1hdGguRT9NYXRoLmxvZzoxMD09PXQmJk1hdGgubG9nMTB8fDI9PT10JiZNYXRoLmxvZzJ8fCh0PU1hdGgubG9nKHQpLGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLmxvZyhlKS90fSl9ZnVuY3Rpb24gbjUodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybi10KC1lKX19ZnVuY3Rpb24gaTUodCxlKXtyZXR1cm4gdDwwPy1NYXRoLnBvdygtdCxlKTpNYXRoLnBvdyh0LGUpfWZ1bmN0aW9uIHI1KCl7dmFyIHQ9MSxlPU4yKChmdW5jdGlvbiBuKGUsaSl7cmV0dXJuKGk9aTUoaSx0KS0oZT1pNShlLHQpKSk/ZnVuY3Rpb24obil7cmV0dXJuKGk1KG4sdCktZSkvaX06RTIoaSl9KSwoZnVuY3Rpb24gaShlLG4pe3JldHVybiBuPWk1KG4sdCktKGU9aTUoZSx0KSksZnVuY3Rpb24oaSl7cmV0dXJuIGk1KGUrbippLDEvdCl9fSkpLHI9ZS5kb21haW47cmV0dXJuIGUuZXhwb25lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2UscihyKCkpKTp0fSxlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gUDIoZSxyNSgpLmV4cG9uZW50KHQpKX0sJDIoZSl9IShmdW5jdGlvbiBvNSh0KXtHMj0oZnVuY3Rpb24gZSh0KXt2YXIgZT12b2lkIDA9PT10Lmdyb3VwaW5nfHx2b2lkIDA9PT10LnRob3VzYW5kcz9qMjooZnVuY3Rpb24gbih0LGUpe3JldHVybiBmdW5jdGlvbihuLGkpe2Zvcih2YXIgcj1uLmxlbmd0aCxvPVtdLGE9MCxzPXRbMF0sbD0wO3I+MCYmcz4wJiYobCtzKzE+aSYmKHM9TWF0aC5tYXgoMSxpLWwpKSxvLnB1c2gobi5zdWJzdHJpbmcoci09cyxyK3MpKSwhKChsKz1zKzEpPmkpKTspcz10W2E9KGErMSkldC5sZW5ndGhdO3JldHVybiBvLnJldmVyc2UoKS5qb2luKGUpfX0pKFkyLmNhbGwodC5ncm91cGluZyxOdW1iZXIpLHQudGhvdXNhbmRzKyIiKSxpPXZvaWQgMD09PXQuY3VycmVuY3k/IiI6dC5jdXJyZW5jeVswXSsiIixyPXZvaWQgMD09PXQuY3VycmVuY3k/IiI6dC5jdXJyZW5jeVsxXSsiIixvPXZvaWQgMD09PXQuZGVjaW1hbD8iLiI6dC5kZWNpbWFsKyIiLGE9dm9pZCAwPT09dC5udW1lcmFscz9qMjooZnVuY3Rpb24gcyh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvWzAtOV0vZywoZnVuY3Rpb24oZSl7cmV0dXJuIHRbK2VdfSkpfX0pKFkyLmNhbGwodC5udW1lcmFscyxTdHJpbmcpKSxsPXZvaWQgMD09PXQucGVyY2VudD8iJSI6dC5wZXJjZW50KyIiLGM9dm9pZCAwPT09dC5taW51cz8iLSI6dC5taW51cysiIix1PXZvaWQgMD09PXQubmFuPyJOYU4iOnQubmFuKyIiO2Z1bmN0aW9uIGgodCl7dmFyIG49KHQ9RDIodCkpLmZpbGwscz10LmFsaWduLGg9dC5zaWduLGQ9dC5zeW1ib2wscD10Lnplcm8sZj10LndpZHRoLG09dC5jb21tYSxnPXQucHJlY2lzaW9uLF89dC50cmltLHk9dC50eXBlOyJuIj09PXk/KG09ITAseT0iZyIpOkYyW3ldfHwodm9pZCAwPT09ZyYmKGc9MTIpLF89ITAseT0iZyIpLChwfHwiMCI9PT1uJiYiPSI9PT1zKSYmKHA9ITAsbj0iMCIscz0iPSIpO3ZhciB2PSIkIj09PWQ/aToiIyI9PT1kJiYvW2JveFhdLy50ZXN0KHkpPyIwIit5LnRvTG93ZXJDYXNlKCk6IiIsYj0iJCI9PT1kP3I6L1slcF0vLnRlc3QoeSk/bDoiIix4PUYyW3ldLHc9L1tkZWZncHJzJV0vLnRlc3QoeSk7ZnVuY3Rpb24gUyh0KXt2YXIgaSxyLGwsZD12LFM9YjtpZigiYyI9PT15KVM9eCh0KStTLHQ9IiI7ZWxzZXt2YXIgTT0odD0rdCk8MHx8MS90PDA7aWYodD1pc05hTih0KT91OngoTWF0aC5hYnModCksZyksXyYmKHQ9KGZ1bmN0aW9uIEUodCl7dDpmb3IodmFyIGUsbj10Lmxlbmd0aCxpPTEscj0tMTtpPG47KytpKXN3aXRjaCh0W2ldKXtjYXNlIi4iOnI9ZT1pO2JyZWFrO2Nhc2UiMCI6MD09PXImJihyPWkpLGU9aTticmVhaztkZWZhdWx0OmlmKCErdFtpXSlicmVhayB0O3I+MCYmKHI9MCl9cmV0dXJuIHI+MD90LnNsaWNlKDAscikrdC5zbGljZShlKzEpOnR9KSh0KSksTSYmMD09K3QmJiIrIiE9PWgmJihNPSExKSxkPShNPyIoIj09PWg/aDpjOiItIj09PWh8fCIoIj09PWg/IiI6aCkrZCxTPSgicyI9PT15P1gyWzgrUjIvM106IiIpK1MrKE0mJiIoIj09PWg/IikiOiIiKSx3KWZvcihpPS0xLHI9dC5sZW5ndGg7KytpPHI7KWlmKDQ4PihsPXQuY2hhckNvZGVBdChpKSl8fGw+NTcpe1M9KDQ2PT09bD9vK3Quc2xpY2UoaSsxKTp0LnNsaWNlKGkpKStTLHQ9dC5zbGljZSgwLGkpO2JyZWFrfX1tJiYhcCYmKHQ9ZSh0LDEvMCkpO3ZhciBUPWQubGVuZ3RoK3QubGVuZ3RoK1MubGVuZ3RoLEM9VDxmP25ldyBBcnJheShmLVQrMSkuam9pbihuKToiIjtzd2l0Y2gobSYmcCYmKHQ9ZShDK3QsQy5sZW5ndGg/Zi1TLmxlbmd0aDoxLzApLEM9IiIpLHMpe2Nhc2UiPCI6dD1kK3QrUytDO2JyZWFrO2Nhc2UiPSI6dD1kK0MrdCtTO2JyZWFrO2Nhc2UiXiI6dD1DLnNsaWNlKDAsVD1DLmxlbmd0aD4+MSkrZCt0K1MrQy5zbGljZShUKTticmVhaztkZWZhdWx0OnQ9QytkK3QrU31yZXR1cm4gYSh0KX1yZXR1cm4gZz12b2lkIDA9PT1nPzY6L1tncHJzXS8udGVzdCh5KT9NYXRoLm1heCgxLE1hdGgubWluKDIxLGcpKTpNYXRoLm1heCgwLE1hdGgubWluKDIwLGcpKSxTLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHQrIiJ9LFN9cmV0dXJue2Zvcm1hdDpoLGZvcm1hdFByZWZpeDpmdW5jdGlvbiBkKHQsZSl7dmFyIG49aCgoKHQ9RDIodCkpLnR5cGU9ImYiLHQpKSxpPTMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKE8yKGUpLzMpKSkscj1NYXRoLnBvdygxMCwtaSksbz1YMls4K2kvM107cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBuKHIqdCkrb319fX0pKHQpLFcyPUcyLmZvcm1hdCxxMj1HMi5mb3JtYXRQcmVmaXh9KSh7ZGVjaW1hbDoiLiIsdGhvdXNhbmRzOiIsIixncm91cGluZzpbM10sY3VycmVuY3k6WyIkIiwiIl0sbWludXM6Ii0ifSk7dmFyIGE1PW5ldyBEYXRlLHM1PW5ldyBEYXRlO2Z1bmN0aW9uIGw1KHQsZSxuLGkpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIHQoZT0wPT09YXJndW1lbnRzLmxlbmd0aD9uZXcgRGF0ZTpuZXcgRGF0ZSgrZSkpLGV9cmV0dXJuIHIuZmxvb3I9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoZT1uZXcgRGF0ZSgrZSkpLGV9LHIuY2VpbD1mdW5jdGlvbihuKXtyZXR1cm4gdChuPW5ldyBEYXRlKG4tMSkpLGUobiwxKSx0KG4pLG59LHIucm91bmQ9ZnVuY3Rpb24odCl7dmFyIGU9cih0KSxuPXIuY2VpbCh0KTtyZXR1cm4gdC1lPG4tdD9lOm59LHIub2Zmc2V0PWZ1bmN0aW9uKHQsbil7cmV0dXJuIGUodD1uZXcgRGF0ZSgrdCksbnVsbD09bj8xOk1hdGguZmxvb3IobikpLHR9LHIucmFuZ2U9ZnVuY3Rpb24obixpLG8pe3ZhciBhLHM9W107aWYobj1yLmNlaWwobiksbz1udWxsPT1vPzE6TWF0aC5mbG9vcihvKSwhKG48aSYmbz4wKSlyZXR1cm4gcztkb3tzLnB1c2goYT1uZXcgRGF0ZSgrbikpLGUobixvKSx0KG4pfXdoaWxlKGE8biYmbjxpKTtyZXR1cm4gc30sci5maWx0ZXI9ZnVuY3Rpb24obil7cmV0dXJuIGw1KChmdW5jdGlvbihlKXtpZihlPj1lKWZvcig7dChlKSwhbihlKTspZS5zZXRUaW1lKGUtMSl9KSwoZnVuY3Rpb24odCxpKXtpZih0Pj10KWlmKGk8MClmb3IoOysraTw9MDspZm9yKDtlKHQsLTEpLCFuKHQpOyk7ZWxzZSBmb3IoOy0taT49MDspZm9yKDtlKHQsMSksIW4odCk7KTt9KSl9LG4mJihyLmNvdW50PWZ1bmN0aW9uKGUsaSl7cmV0dXJuIGE1LnNldFRpbWUoK2UpLHM1LnNldFRpbWUoK2kpLHQoYTUpLHQoczUpLE1hdGguZmxvb3IobihhNSxzNSkpfSxyLmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiB0PU1hdGguZmxvb3IodCksaXNGaW5pdGUodCkmJnQ+MD90PjE/ci5maWx0ZXIoaT9mdW5jdGlvbihlKXtyZXR1cm4gaShlKSV0PT0wfTpmdW5jdGlvbihlKXtyZXR1cm4gci5jb3VudCgwLGUpJXQ9PTB9KTpyOm51bGx9KSxyfXZhciBjNT1sNSgoZnVuY3Rpb24oKXt9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS10fSkpO2M1LmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiB0PU1hdGguZmxvb3IodCksaXNGaW5pdGUodCkmJnQ+MD90PjE/bDUoKGZ1bmN0aW9uKGUpe2Uuc2V0VGltZShNYXRoLmZsb29yKGUvdCkqdCl9KSwoZnVuY3Rpb24oZSxuKXtlLnNldFRpbWUoK2Urbip0KX0pLChmdW5jdGlvbihlLG4pe3JldHVybihuLWUpL3R9KSk6YzU6bnVsbH07dmFyIHU1PTFlMyxoNT02ZTQsZDU9MzZlNSxwNT04NjRlNSxmNT02MDQ4ZTUsbTU9bDUoKGZ1bmN0aW9uKHQpe3Quc2V0VGltZSh0LXQuZ2V0TWlsbGlzZWNvbmRzKCkpfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0K2UqdTUpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvdTV9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDU2Vjb25kcygpfSkpLGc1PWw1KChmdW5jdGlvbih0KXt0LnNldFRpbWUodC10LmdldE1pbGxpc2Vjb25kcygpLXQuZ2V0U2Vjb25kcygpKnU1KX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCtlKmg1KX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQpL2g1fSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1pbnV0ZXMoKX0pKSxfNT1sNSgoZnVuY3Rpb24odCl7dC5zZXRUaW1lKHQtdC5nZXRNaWxsaXNlY29uZHMoKS10LmdldFNlY29uZHMoKSp1NS10LmdldE1pbnV0ZXMoKSpoNSl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrZSpkNSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS9kNX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRIb3VycygpfSkpLHk1PWw1KChmdW5jdGlvbih0KXt0LnNldEhvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpK2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdC0oZS5nZXRUaW1lem9uZU9mZnNldCgpLXQuZ2V0VGltZXpvbmVPZmZzZXQoKSkqaDUpL3A1fSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldERhdGUoKS0xfSkpO2Z1bmN0aW9uIHY1KHQpe3JldHVybiBsNSgoZnVuY3Rpb24oZSl7ZS5zZXREYXRlKGUuZ2V0RGF0ZSgpLShlLmdldERheSgpKzctdCklNyksZS5zZXRIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0RGF0ZSh0LmdldERhdGUoKSs3KmUpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdC0oZS5nZXRUaW1lem9uZU9mZnNldCgpLXQuZ2V0VGltZXpvbmVPZmZzZXQoKSkqaDUpL2Y1fSkpfXZhciBiNT12NSgwKSx4NT12NSgxKTt2NSgyKSx2NSgzKTt2YXIgdzU9djUoNCk7djUoNSksdjUoNik7dmFyIFM1PWw1KChmdW5jdGlvbih0KXt0LnNldERhdGUoMSksdC5zZXRIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0TW9udGgodC5nZXRNb250aCgpK2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZ2V0TW9udGgoKS10LmdldE1vbnRoKCkrMTIqKGUuZ2V0RnVsbFllYXIoKS10LmdldEZ1bGxZZWFyKCkpfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1vbnRoKCl9KSksTTU9bDUoKGZ1bmN0aW9uKHQpe3Quc2V0TW9udGgoMCwxKSx0LnNldEhvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXRGdWxsWWVhcigpLXQuZ2V0RnVsbFllYXIoKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRGdWxsWWVhcigpfSkpO001LmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiBpc0Zpbml0ZSh0PU1hdGguZmxvb3IodCkpJiZ0PjA/bDUoKGZ1bmN0aW9uKGUpe2Uuc2V0RnVsbFllYXIoTWF0aC5mbG9vcihlLmdldEZ1bGxZZWFyKCkvdCkqdCksZS5zZXRNb250aCgwLDEpLGUuc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24oZSxuKXtlLnNldEZ1bGxZZWFyKGUuZ2V0RnVsbFllYXIoKStuKnQpfSkpOm51bGx9O3ZhciBFNT1sNSgoZnVuY3Rpb24odCl7dC5zZXRVVENTZWNvbmRzKDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrZSpoNSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS9oNX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENNaW51dGVzKCl9KSksVDU9bDUoKGZ1bmN0aW9uKHQpe3Quc2V0VVRDTWludXRlcygwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrZSpkNSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS9kNX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENIb3VycygpfSkpLEM1PWw1KChmdW5jdGlvbih0KXt0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpK2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvcDV9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDRGF0ZSgpLTF9KSk7ZnVuY3Rpb24gQTUodCl7cmV0dXJuIGw1KChmdW5jdGlvbihlKXtlLnNldFVUQ0RhdGUoZS5nZXRVVENEYXRlKCktKGUuZ2V0VVRDRGF5KCkrNy10KSU3KSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpKzcqZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS9mNX0pKX12YXIgazU9QTUoMCksTDU9QTUoMSk7QTUoMiksQTUoMyk7dmFyIFA1PUE1KDQpO0E1KDUpLEE1KDYpO3ZhciBONT1sNSgoZnVuY3Rpb24odCl7dC5zZXRVVENEYXRlKDEpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFVUQ01vbnRoKHQuZ2V0VVRDTW9udGgoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldFVUQ01vbnRoKCktdC5nZXRVVENNb250aCgpKzEyKihlLmdldFVUQ0Z1bGxZZWFyKCktdC5nZXRVVENGdWxsWWVhcigpKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENNb250aCgpfSkpLEk1PWw1KChmdW5jdGlvbih0KXt0LnNldFVUQ01vbnRoKDAsMSksdC5zZXRVVENIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VVRDRnVsbFllYXIodC5nZXRVVENGdWxsWWVhcigpK2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZ2V0VVRDRnVsbFllYXIoKS10LmdldFVUQ0Z1bGxZZWFyKCl9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDRnVsbFllYXIoKX0pKTtmdW5jdGlvbiBPNSh0KXtpZigwPD10LnkmJnQueTwxMDApe3ZhciBlPW5ldyBEYXRlKC0xLHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKTtyZXR1cm4gZS5zZXRGdWxsWWVhcih0LnkpLGV9cmV0dXJuIG5ldyBEYXRlKHQueSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCl9ZnVuY3Rpb24gUjUodCl7aWYoMDw9dC55JiZ0Lnk8MTAwKXt2YXIgZT1uZXcgRGF0ZShEYXRlLlVUQygtMSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCkpO3JldHVybiBlLnNldFVUQ0Z1bGxZZWFyKHQueSksZX1yZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEModC55LHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKSl9ZnVuY3Rpb24gejUodCxlLG4pe3JldHVybnt5OnQsbTplLGQ6bixIOjAsTTowLFM6MCxMOjB9fUk1LmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiBpc0Zpbml0ZSh0PU1hdGguZmxvb3IodCkpJiZ0PjA/bDUoKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDRnVsbFllYXIoTWF0aC5mbG9vcihlLmdldFVUQ0Z1bGxZZWFyKCkvdCkqdCksZS5zZXRVVENNb250aCgwLDEpLGUuc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24oZSxuKXtlLnNldFVUQ0Z1bGxZZWFyKGUuZ2V0VVRDRnVsbFllYXIoKStuKnQpfSkpOm51bGx9O3ZhciBENSxCNSxINSxGNT17Ii0iOiIiLF86IiAiLDA6IjAifSxWNT0vXlxzKlxkKy8sVTU9L14lLyxqNT0vW1xcXiQqKz98W1xdKCkue31dL2c7ZnVuY3Rpb24gRzUodCxlLG4pe3ZhciBpPXQ8MD8iLSI6IiIscj0oaT8tdDp0KSsiIixvPXIubGVuZ3RoO3JldHVybiBpKyhvPG4/bmV3IEFycmF5KG4tbysxKS5qb2luKGUpK3I6cil9ZnVuY3Rpb24gVzUodCl7cmV0dXJuIHQucmVwbGFjZShqNSwiXFwkJiIpfWZ1bmN0aW9uIHE1KHQpe3JldHVybiBuZXcgUmVnRXhwKCJeKD86Iit0Lm1hcChXNSkuam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIFk1KHQpe2Zvcih2YXIgZT17fSxuPS0xLGk9dC5sZW5ndGg7KytuPGk7KWVbdFtuXS50b0xvd2VyQ2FzZSgpXT1uO3JldHVybiBlfWZ1bmN0aW9uIFg1KHQsZSxuKXt2YXIgaT1WNS5leGVjKGUuc2xpY2UobixuKzEpKTtyZXR1cm4gaT8odC53PStpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uICQ1KHQsZSxuKXt2YXIgaT1WNS5leGVjKGUuc2xpY2UobixuKzEpKTtyZXR1cm4gaT8odC51PStpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEs1KHQsZSxuKXt2YXIgaT1WNS5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gaT8odC5VPStpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFo1KHQsZSxuKXt2YXIgaT1WNS5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gaT8odC5WPStpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEo1KHQsZSxuKXt2YXIgaT1WNS5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gaT8odC5XPStpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFE1KHQsZSxuKXt2YXIgaT1WNS5leGVjKGUuc2xpY2UobixuKzQpKTtyZXR1cm4gaT8odC55PStpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHQzKHQsZSxuKXt2YXIgaT1WNS5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gaT8odC55PStpWzBdKygraVswXT42OD8xOTAwOjJlMyksbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gZTModCxlLG4pe3ZhciBpPS9eKFopfChbKy1dXGRcZCkoPzo6PyhcZFxkKSk/Ly5leGVjKGUuc2xpY2UobixuKzYpKTtyZXR1cm4gaT8odC5aPWlbMV0/MDotKGlbMl0rKGlbM118fCIwMCIpKSxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBuMyh0LGUsbil7dmFyIGk9VjUuZXhlYyhlLnNsaWNlKG4sbisxKSk7cmV0dXJuIGk/KHQucT0zKmlbMF0tMyxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBpMyh0LGUsbil7dmFyIGk9VjUuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIGk/KHQubT1pWzBdLTEsbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcjModCxlLG4pe3ZhciBpPVY1LmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiBpPyh0LmQ9K2lbMF0sbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbzModCxlLG4pe3ZhciBpPVY1LmV4ZWMoZS5zbGljZShuLG4rMykpO3JldHVybiBpPyh0Lm09MCx0LmQ9K2lbMF0sbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gYTModCxlLG4pe3ZhciBpPVY1LmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiBpPyh0Lkg9K2lbMF0sbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gczModCxlLG4pe3ZhciBpPVY1LmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiBpPyh0Lk09K2lbMF0sbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbDModCxlLG4pe3ZhciBpPVY1LmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiBpPyh0LlM9K2lbMF0sbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gYzModCxlLG4pe3ZhciBpPVY1LmV4ZWMoZS5zbGljZShuLG4rMykpO3JldHVybiBpPyh0Lkw9K2lbMF0sbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gdTModCxlLG4pe3ZhciBpPVY1LmV4ZWMoZS5zbGljZShuLG4rNikpO3JldHVybiBpPyh0Lkw9TWF0aC5mbG9vcihpWzBdLzFlMyksbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gaDModCxlLG4pe3ZhciBpPVU1LmV4ZWMoZS5zbGljZShuLG4rMSkpO3JldHVybiBpP24raVswXS5sZW5ndGg6LTF9ZnVuY3Rpb24gZDModCxlLG4pe3ZhciBpPVY1LmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIGk/KHQuUT0raVswXSxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBwMyh0LGUsbil7dmFyIGk9VjUuZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gaT8odC5zPStpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGYzKHQsZSl7cmV0dXJuIEc1KHQuZ2V0RGF0ZSgpLGUsMil9ZnVuY3Rpb24gbTModCxlKXtyZXR1cm4gRzUodC5nZXRIb3VycygpLGUsMil9ZnVuY3Rpb24gZzModCxlKXtyZXR1cm4gRzUodC5nZXRIb3VycygpJTEyfHwxMixlLDIpfWZ1bmN0aW9uIF8zKHQsZSl7cmV0dXJuIEc1KDEreTUuY291bnQoTTUodCksdCksZSwzKX1mdW5jdGlvbiB5Myh0LGUpe3JldHVybiBHNSh0LmdldE1pbGxpc2Vjb25kcygpLGUsMyl9ZnVuY3Rpb24gdjModCxlKXtyZXR1cm4geTModCxlKSsiMDAwIn1mdW5jdGlvbiBiMyh0LGUpe3JldHVybiBHNSh0LmdldE1vbnRoKCkrMSxlLDIpfWZ1bmN0aW9uIHgzKHQsZSl7cmV0dXJuIEc1KHQuZ2V0TWludXRlcygpLGUsMil9ZnVuY3Rpb24gdzModCxlKXtyZXR1cm4gRzUodC5nZXRTZWNvbmRzKCksZSwyKX1mdW5jdGlvbiBTMyh0KXt2YXIgZT10LmdldERheSgpO3JldHVybiAwPT09ZT83OmV9ZnVuY3Rpb24gTTModCxlKXtyZXR1cm4gRzUoYjUuY291bnQoTTUodCktMSx0KSxlLDIpfWZ1bmN0aW9uIEUzKHQpe3ZhciBlPXQuZ2V0RGF5KCk7cmV0dXJuIGU+PTR8fDA9PT1lP3c1KHQpOnc1LmNlaWwodCl9ZnVuY3Rpb24gVDModCxlKXtyZXR1cm4gdD1FMyh0KSxHNSh3NS5jb3VudChNNSh0KSx0KSsoND09PU01KHQpLmdldERheSgpKSxlLDIpfWZ1bmN0aW9uIEMzKHQpe3JldHVybiB0LmdldERheSgpfWZ1bmN0aW9uIEEzKHQsZSl7cmV0dXJuIEc1KHg1LmNvdW50KE01KHQpLTEsdCksZSwyKX1mdW5jdGlvbiBrMyh0LGUpe3JldHVybiBHNSh0LmdldEZ1bGxZZWFyKCklMTAwLGUsMil9ZnVuY3Rpb24gTDModCxlKXtyZXR1cm4gRzUoKHQ9RTModCkpLmdldEZ1bGxZZWFyKCklMTAwLGUsMil9ZnVuY3Rpb24gUDModCxlKXtyZXR1cm4gRzUodC5nZXRGdWxsWWVhcigpJTFlNCxlLDQpfWZ1bmN0aW9uIE4zKHQsZSl7dmFyIG49dC5nZXREYXkoKTtyZXR1cm4gRzUoKHQ9bj49NHx8MD09PW4/dzUodCk6dzUuY2VpbCh0KSkuZ2V0RnVsbFllYXIoKSUxZTQsZSw0KX1mdW5jdGlvbiBJMyh0KXt2YXIgZT10LmdldFRpbWV6b25lT2Zmc2V0KCk7cmV0dXJuKGU+MD8iLSI6KGUqPS0xLCIrIikpK0c1KGUvNjB8MCwiMCIsMikrRzUoZSU2MCwiMCIsMil9ZnVuY3Rpb24gTzModCxlKXtyZXR1cm4gRzUodC5nZXRVVENEYXRlKCksZSwyKX1mdW5jdGlvbiBSMyh0LGUpe3JldHVybiBHNSh0LmdldFVUQ0hvdXJzKCksZSwyKX1mdW5jdGlvbiB6Myh0LGUpe3JldHVybiBHNSh0LmdldFVUQ0hvdXJzKCklMTJ8fDEyLGUsMil9ZnVuY3Rpb24gRDModCxlKXtyZXR1cm4gRzUoMStDNS5jb3VudChJNSh0KSx0KSxlLDMpfWZ1bmN0aW9uIEIzKHQsZSl7cmV0dXJuIEc1KHQuZ2V0VVRDTWlsbGlzZWNvbmRzKCksZSwzKX1mdW5jdGlvbiBIMyh0LGUpe3JldHVybiBCMyh0LGUpKyIwMDAifWZ1bmN0aW9uIEYzKHQsZSl7cmV0dXJuIEc1KHQuZ2V0VVRDTW9udGgoKSsxLGUsMil9ZnVuY3Rpb24gVjModCxlKXtyZXR1cm4gRzUodC5nZXRVVENNaW51dGVzKCksZSwyKX1mdW5jdGlvbiBVMyh0LGUpe3JldHVybiBHNSh0LmdldFVUQ1NlY29uZHMoKSxlLDIpfWZ1bmN0aW9uIGozKHQpe3ZhciBlPXQuZ2V0VVRDRGF5KCk7cmV0dXJuIDA9PT1lPzc6ZX1mdW5jdGlvbiBHMyh0LGUpe3JldHVybiBHNShrNS5jb3VudChJNSh0KS0xLHQpLGUsMil9ZnVuY3Rpb24gVzModCl7dmFyIGU9dC5nZXRVVENEYXkoKTtyZXR1cm4gZT49NHx8MD09PWU/UDUodCk6UDUuY2VpbCh0KX1mdW5jdGlvbiBxMyh0LGUpe3JldHVybiB0PVczKHQpLEc1KFA1LmNvdW50KEk1KHQpLHQpKyg0PT09STUodCkuZ2V0VVRDRGF5KCkpLGUsMil9ZnVuY3Rpb24gWTModCl7cmV0dXJuIHQuZ2V0VVRDRGF5KCl9ZnVuY3Rpb24gWDModCxlKXtyZXR1cm4gRzUoTDUuY291bnQoSTUodCktMSx0KSxlLDIpfWZ1bmN0aW9uICQzKHQsZSl7cmV0dXJuIEc1KHQuZ2V0VVRDRnVsbFllYXIoKSUxMDAsZSwyKX1mdW5jdGlvbiBLMyh0LGUpe3JldHVybiBHNSgodD1XMyh0KSkuZ2V0VVRDRnVsbFllYXIoKSUxMDAsZSwyKX1mdW5jdGlvbiBaMyh0LGUpe3JldHVybiBHNSh0LmdldFVUQ0Z1bGxZZWFyKCklMWU0LGUsNCl9ZnVuY3Rpb24gSjModCxlKXt2YXIgbj10LmdldFVUQ0RheSgpO3JldHVybiBHNSgodD1uPj00fHwwPT09bj9QNSh0KTpQNS5jZWlsKHQpKS5nZXRVVENGdWxsWWVhcigpJTFlNCxlLDQpfWZ1bmN0aW9uIFEzKCl7cmV0dXJuIiswMDAwIn1mdW5jdGlvbiB0NCgpe3JldHVybiIlIn1mdW5jdGlvbiBlNCh0KXtyZXR1cm4rdH1mdW5jdGlvbiBuNCh0KXtyZXR1cm4gTWF0aC5mbG9vcigrdC8xZTMpfSEoZnVuY3Rpb24gaTQodCl7RDU9KGZ1bmN0aW9uIGUodCl7dmFyIGU9dC5kYXRlVGltZSxuPXQuZGF0ZSxpPXQudGltZSxyPXQucGVyaW9kcyxvPXQuZGF5cyxhPXQuc2hvcnREYXlzLHM9dC5tb250aHMsbD10LnNob3J0TW9udGhzLGM9cTUociksdT1ZNShyKSxoPXE1KG8pLGQ9WTUobykscD1xNShhKSxmPVk1KGEpLG09cTUocyksZz1ZNShzKSxfPXE1KGwpLHk9WTUobCksdj17YTpmdW5jdGlvbiBiKHQpe3JldHVybiBhW3QuZ2V0RGF5KCldfSxBOmZ1bmN0aW9uIHgodCl7cmV0dXJuIG9bdC5nZXREYXkoKV19LGI6ZnVuY3Rpb24gdyh0KXtyZXR1cm4gbFt0LmdldE1vbnRoKCldfSxCOmZ1bmN0aW9uIFModCl7cmV0dXJuIHNbdC5nZXRNb250aCgpXX0sYzpudWxsLGQ6ZjMsZTpmMyxmOnYzLGc6TDMsRzpOMyxIOm0zLEk6ZzMsajpfMyxMOnkzLG06YjMsTTp4MyxwOmZ1bmN0aW9uIE0odCl7cmV0dXJuIHJbKyh0LmdldEhvdXJzKCk+PTEyKV19LHE6ZnVuY3Rpb24gRSh0KXtyZXR1cm4gMSt+fih0LmdldE1vbnRoKCkvMyl9LFE6ZTQsczpuNCxTOnczLHU6UzMsVTpNMyxWOlQzLHc6QzMsVzpBMyx4Om51bGwsWDpudWxsLHk6azMsWTpQMyxaOkkzLCIlIjp0NH0sVD17YTpmdW5jdGlvbiBDKHQpe3JldHVybiBhW3QuZ2V0VVRDRGF5KCldfSxBOmZ1bmN0aW9uIEEodCl7cmV0dXJuIG9bdC5nZXRVVENEYXkoKV19LGI6ZnVuY3Rpb24gayh0KXtyZXR1cm4gbFt0LmdldFVUQ01vbnRoKCldfSxCOmZ1bmN0aW9uIEwodCl7cmV0dXJuIHNbdC5nZXRVVENNb250aCgpXX0sYzpudWxsLGQ6TzMsZTpPMyxmOkgzLGc6SzMsRzpKMyxIOlIzLEk6ejMsajpEMyxMOkIzLG06RjMsTTpWMyxwOmZ1bmN0aW9uIFAodCl7cmV0dXJuIHJbKyh0LmdldFVUQ0hvdXJzKCk+PTEyKV19LHE6ZnVuY3Rpb24gTih0KXtyZXR1cm4gMSt+fih0LmdldFVUQ01vbnRoKCkvMyl9LFE6ZTQsczpuNCxTOlUzLHU6ajMsVTpHMyxWOnEzLHc6WTMsVzpYMyx4Om51bGwsWDpudWxsLHk6JDMsWTpaMyxaOlEzLCIlIjp0NH0sST17YTpmdW5jdGlvbiBPKHQsZSxuKXt2YXIgaT1wLmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIGk/KHQudz1mW2lbMF0udG9Mb3dlckNhc2UoKV0sbitpWzBdLmxlbmd0aCk6LTF9LEE6ZnVuY3Rpb24gUih0LGUsbil7dmFyIGk9aC5leGVjKGUuc2xpY2UobikpO3JldHVybiBpPyh0Lnc9ZFtpWzBdLnRvTG93ZXJDYXNlKCldLG4raVswXS5sZW5ndGgpOi0xfSxiOmZ1bmN0aW9uIHoodCxlLG4pe3ZhciBpPV8uZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gaT8odC5tPXlbaVswXS50b0xvd2VyQ2FzZSgpXSxuK2lbMF0ubGVuZ3RoKTotMX0sQjpmdW5jdGlvbiBEKHQsZSxuKXt2YXIgaT1tLmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIGk/KHQubT1nW2lbMF0udG9Mb3dlckNhc2UoKV0sbitpWzBdLmxlbmd0aCk6LTF9LGM6ZnVuY3Rpb24gQih0LG4saSl7cmV0dXJuIEcodCxlLG4saSl9LGQ6cjMsZTpyMyxmOnUzLGc6dDMsRzpRNSxIOmEzLEk6YTMsajpvMyxMOmMzLG06aTMsTTpzMyxwOmZ1bmN0aW9uIEgodCxlLG4pe3ZhciBpPWMuZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gaT8odC5wPXVbaVswXS50b0xvd2VyQ2FzZSgpXSxuK2lbMF0ubGVuZ3RoKTotMX0scTpuMyxROmQzLHM6cDMsUzpsMyx1OiQ1LFU6SzUsVjpaNSx3Olg1LFc6SjUseDpmdW5jdGlvbiBGKHQsZSxpKXtyZXR1cm4gRyh0LG4sZSxpKX0sWDpmdW5jdGlvbiBWKHQsZSxuKXtyZXR1cm4gRyh0LGksZSxuKX0seTp0MyxZOlE1LFo6ZTMsIiUiOmgzfTtmdW5jdGlvbiBVKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBpLHIsbyxhPVtdLHM9LTEsbD0wLGM9dC5sZW5ndGg7Zm9yKG4gaW5zdGFuY2VvZiBEYXRlfHwobj1uZXcgRGF0ZSgrbikpOysrczxjOykzNz09PXQuY2hhckNvZGVBdChzKSYmKGEucHVzaCh0LnNsaWNlKGwscykpLG51bGwhPShyPUY1W2k9dC5jaGFyQXQoKytzKV0pP2k9dC5jaGFyQXQoKytzKTpyPSJlIj09PWk/IiAiOiIwIiwobz1lW2ldKSYmKGk9byhuLHIpKSxhLnB1c2goaSksbD1zKzEpO3JldHVybiBhLnB1c2godC5zbGljZShsLHMpKSxhLmpvaW4oIiIpfX1mdW5jdGlvbiBqKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBpLHIsbz16NSgxOTAwLHZvaWQgMCwxKTtpZihHKG8sdCxuKz0iIiwwKSE9bi5sZW5ndGgpcmV0dXJuIG51bGw7aWYoIlEiaW4gbylyZXR1cm4gbmV3IERhdGUoby5RKTtpZigicyJpbiBvKXJldHVybiBuZXcgRGF0ZSgxZTMqby5zKygiTCJpbiBvP28uTDowKSk7aWYoZSYmISgiWiJpbiBvKSYmKG8uWj0wKSwicCJpbiBvJiYoby5IPW8uSCUxMisxMipvLnApLHZvaWQgMD09PW8ubSYmKG8ubT0icSJpbiBvP28ucTowKSwiViJpbiBvKXtpZihvLlY8MXx8by5WPjUzKXJldHVybiBudWxsOyJ3ImluIG98fChvLnc9MSksIloiaW4gbz8ocj0oaT1SNSh6NShvLnksMCwxKSkpLmdldFVUQ0RheSgpLGk9cj40fHwwPT09cj9MNS5jZWlsKGkpOkw1KGkpLGk9QzUub2Zmc2V0KGksNyooby5WLTEpKSxvLnk9aS5nZXRVVENGdWxsWWVhcigpLG8ubT1pLmdldFVUQ01vbnRoKCksby5kPWkuZ2V0VVRDRGF0ZSgpKyhvLncrNiklNyk6KHI9KGk9TzUoejUoby55LDAsMSkpKS5nZXREYXkoKSxpPXI+NHx8MD09PXI/eDUuY2VpbChpKTp4NShpKSxpPXk1Lm9mZnNldChpLDcqKG8uVi0xKSksby55PWkuZ2V0RnVsbFllYXIoKSxvLm09aS5nZXRNb250aCgpLG8uZD1pLmdldERhdGUoKSsoby53KzYpJTcpfWVsc2UoIlciaW4gb3x8IlUiaW4gbykmJigidyJpbiBvfHwoby53PSJ1ImluIG8/by51JTc6IlciaW4gbz8xOjApLHI9IloiaW4gbz9SNSh6NShvLnksMCwxKSkuZ2V0VVRDRGF5KCk6TzUoejUoby55LDAsMSkpLmdldERheSgpLG8ubT0wLG8uZD0iVyJpbiBvPyhvLncrNiklNys3Km8uVy0ocis1KSU3Om8udys3Km8uVS0ocis2KSU3KTtyZXR1cm4iWiJpbiBvPyhvLkgrPW8uWi8xMDB8MCxvLk0rPW8uWiUxMDAsUjUobykpOk81KG8pfX1mdW5jdGlvbiBHKHQsZSxuLGkpe2Zvcih2YXIgcixvLGE9MCxzPWUubGVuZ3RoLGw9bi5sZW5ndGg7YTxzOyl7aWYoaT49bClyZXR1cm4tMTtpZigzNz09PShyPWUuY2hhckNvZGVBdChhKyspKSl7aWYocj1lLmNoYXJBdChhKyspLCEobz1JW3IgaW4gRjU/ZS5jaGFyQXQoYSsrKTpyXSl8fChpPW8odCxuLGkpKTwwKXJldHVybi0xfWVsc2UgaWYociE9bi5jaGFyQ29kZUF0KGkrKykpcmV0dXJuLTF9cmV0dXJuIGl9cmV0dXJuIHYueD1VKG4sdiksdi5YPVUoaSx2KSx2LmM9VShlLHYpLFQueD1VKG4sVCksVC5YPVUoaSxUKSxULmM9VShlLFQpLHtmb3JtYXQ6ZnVuY3Rpb24odCl7dmFyIGU9VSh0Kz0iIix2KTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgZT1qKHQrPSIiLCExKTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfSx1dGNGb3JtYXQ6ZnVuY3Rpb24odCl7dmFyIGU9VSh0Kz0iIixUKTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfSx1dGNQYXJzZTpmdW5jdGlvbih0KXt2YXIgZT1qKHQrPSIiLCEwKTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfX19KSh0KSxCNT1ENS5mb3JtYXQsSDU9RDUudXRjRm9ybWF0fSkoe2RhdGVUaW1lOiIleCwgJVgiLGRhdGU6IiUtbS8lLWQvJVkiLHRpbWU6IiUtSTolTTolUyAlcCIscGVyaW9kczpbIkFNIiwiUE0iXSxkYXlzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxzaG9ydERheXM6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxtb250aHM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHNob3J0TW9udGhzOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl19KTt2YXIgcjQ9MzE1MzZlNjtmdW5jdGlvbiBvNCh0KXtyZXR1cm4gbmV3IERhdGUodCl9ZnVuY3Rpb24gYTQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBEYXRlPyt0OituZXcgRGF0ZSgrdCl9ZnVuY3Rpb24gczQodCxlLG4saSxyLG8sYSxzLGwpe3ZhciBjPU4yKEEyLG0yKSx1PWMuaW52ZXJ0LGg9Yy5kb21haW4sZD1sKCIuJUwiKSxwPWwoIjolUyIpLGY9bCgiJUk6JU0iKSxtPWwoIiVJICVwIiksZz1sKCIlYSAlZCIpLF89bCgiJWIgJWQiKSx5PWwoIiVCIiksdj1sKCIlWSIpLGI9W1thLDEsMWUzXSxbYSw1LDVlM10sW2EsMTUsMTVlM10sW2EsMzAsM2U0XSxbbywxLDZlNF0sW28sNSwzZTVdLFtvLDE1LDllNV0sW28sMzAsMThlNV0sW3IsMSwzNmU1XSxbciwzLDEwOGU1XSxbciw2LDIxNmU1XSxbciwxMiw0MzJlNV0sW2ksMSw4NjRlNV0sW2ksMiwxNzI4ZTVdLFtuLDEsNjA0OGU1XSxbZSwxLDI1OTJlNl0sW2UsMyw3Nzc2ZTZdLFt0LDEscjRdXTtmdW5jdGlvbiB4KHMpe3JldHVybihhKHMpPHM/ZDpvKHMpPHM/cDpyKHMpPHM/ZjppKHMpPHM/bTplKHMpPHM/bihzKTxzP2c6Xzp0KHMpPHM/eTp2KShzKX1mdW5jdGlvbiB3KGUsbixpLHIpe2lmKG51bGw9PWUmJihlPTEwKSwibnVtYmVyIj09dHlwZW9mIGUpe3ZhciBvPU1hdGguYWJzKGktbikvZSxhPVgxKChmdW5jdGlvbih0KXtyZXR1cm4gdFsyXX0pKS5yaWdodChiLG8pO2E9PT1iLmxlbmd0aD8ocj1uMChuL3I0LGkvcjQsZSksZT10KTphPyhyPShhPWJbby9iW2EtMV1bMl08YlthXVsyXS9vP2EtMTphXSlbMV0sZT1hWzBdKToocj1NYXRoLm1heChuMChuLGksZSksMSksZT1zKX1yZXR1cm4gbnVsbD09cj9lOmUuZXZlcnkocil9cmV0dXJuIGMuaW52ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgRGF0ZSh1KHQpKX0sYy5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/aCh1MC5jYWxsKHQsYTQpKTpoKCkubWFwKG80KX0sYy50aWNrcz1mdW5jdGlvbih0LGUpe3ZhciBuLGk9aCgpLHI9aVswXSxvPWlbaS5sZW5ndGgtMV0sYT1vPHI7cmV0dXJuIGEmJihuPXIscj1vLG89biksbj0obj13KHQscixvLGUpKT9uLnJhbmdlKHIsbysxKTpbXSxhP24ucmV2ZXJzZSgpOm59LGMudGlja0Zvcm1hdD1mdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT1lP3g6bChlKX0sYy5uaWNlPWZ1bmN0aW9uKHQsZSl7dmFyIG49aCgpO3JldHVybih0PXcodCxuWzBdLG5bbi5sZW5ndGgtMV0sZSkpP2goSzIobix0KSk6Y30sYy5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIFAyKGMsczQodCxlLG4saSxyLG8sYSxzLGwpKX0sY31mdW5jdGlvbiBsNCh0KXtyZXR1cm4gdC5tYXRjaCgvLns2fS9nKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiIjIit0fSkpfXZhciBjND1sNCgiMWY3N2I0ZmY3ZjBlMmNhMDJjZDYyNzI4OTQ2N2JkOGM1NjRiZTM3N2MyN2Y3ZjdmYmNiZDIyMTdiZWNmIiksdTQ9bDQoIjM5M2I3OTUyNTRhMzZiNmVjZjljOWVkZTYzNzkzOThjYTI1MmI1Y2Y2YmNlZGI5YzhjNmQzMWJkOWUzOWU3YmE1MmU3Y2I5NDg0M2MzOWFkNDk0YWQ2NjE2YmU3OTY5YzdiNDE3M2E1NTE5NGNlNmRiZGRlOWVkNiIpLGg0PWw0KCIzMTgyYmQ2YmFlZDY5ZWNhZTFjNmRiZWZlNjU1MGRmZDhkM2NmZGFlNmJmZGQwYTIzMWEzNTQ3NGM0NzZhMWQ5OWJjN2U5YzA3NTZiYjE5ZTlhYzhiY2JkZGNkYWRhZWI2MzYzNjM5Njk2OTZiZGJkYmRkOWQ5ZDkiKSxkND1sNCgiMWY3N2I0YWVjN2U4ZmY3ZjBlZmZiYjc4MmNhMDJjOThkZjhhZDYyNzI4ZmY5ODk2OTQ2N2JkYzViMGQ1OGM1NjRiYzQ5Yzk0ZTM3N2MyZjdiNmQyN2Y3ZjdmYzdjN2M3YmNiZDIyZGJkYjhkMTdiZWNmOWVkYWU1IikscDQ9TTIoYTIoMzAwLC41LDApLGEyKC0yNDAsLjUsMSkpLGY0PU0yKGEyKC0xMDAsLjc1LC4zNSksYTIoODAsMS41LC44KSksbTQ9TTIoYTIoMjYwLC43NSwuMzUpLGEyKDgwLDEuNSwuOCkpLGc0PWEyKCk7ZnVuY3Rpb24gXzQodCl7dmFyIGU9dC5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0W01hdGgubWF4KDAsTWF0aC5taW4oZS0xLE1hdGguZmxvb3IobiplKSkpXX19dmFyIHk0PV80KGw0KCI0NDAxNTQ0NDAyNTY0NTA0NTc0NTA1NTk0NjA3NWE0NjA4NWM0NjBhNWQ0NjBiNWU0NzBkNjA0NzBlNjE0NzEwNjM0NzExNjQ0NzEzNjU0ODE0Njc0ODE2Njg0ODE3Njk0ODE4NmE0ODFhNmM0ODFiNmQ0ODFjNmU0ODFkNmY0ODFmNzA0ODIwNzE0ODIxNzM0ODIzNzQ0ODI0NzU0ODI1NzY0ODI2Nzc0ODI4Nzg0ODI5Nzk0NzJhN2E0NzJjN2E0NzJkN2I0NzJlN2M0NzJmN2Q0NjMwN2U0NjMyN2U0NjMzN2Y0NjM0ODA0NTM1ODE0NTM3ODE0NTM4ODI0NDM5ODM0NDNhODM0NDNiODQ0MzNkODQ0MzNlODU0MjNmODU0MjQwODY0MjQxODY0MTQyODc0MTQ0ODc0MDQ1ODg0MDQ2ODgzZjQ3ODgzZjQ4ODkzZTQ5ODkzZTRhODkzZTRjOGEzZDRkOGEzZDRlOGEzYzRmOGEzYzUwOGIzYjUxOGIzYjUyOGIzYTUzOGIzYTU0OGMzOTU1OGMzOTU2OGMzODU4OGMzODU5OGMzNzVhOGMzNzViOGQzNjVjOGQzNjVkOGQzNTVlOGQzNTVmOGQzNDYwOGQzNDYxOGQzMzYyOGQzMzYzOGQzMjY0OGUzMjY1OGUzMTY2OGUzMTY3OGUzMTY4OGUzMDY5OGUzMDZhOGUyZjZiOGUyZjZjOGUyZTZkOGUyZTZlOGUyZTZmOGUyZDcwOGUyZDcxOGUyYzcxOGUyYzcyOGUyYzczOGUyYjc0OGUyYjc1OGUyYTc2OGUyYTc3OGUyYTc4OGUyOTc5OGUyOTdhOGUyOTdiOGUyODdjOGUyODdkOGUyNzdlOGUyNzdmOGUyNzgwOGUyNjgxOGUyNjgyOGUyNjgyOGUyNTgzOGUyNTg0OGUyNTg1OGUyNDg2OGUyNDg3OGUyMzg4OGUyMzg5OGUyMzhhOGQyMjhiOGQyMjhjOGQyMjhkOGQyMThlOGQyMThmOGQyMTkwOGQyMTkxOGMyMDkyOGMyMDkyOGMyMDkzOGMxZjk0OGMxZjk1OGIxZjk2OGIxZjk3OGIxZjk4OGIxZjk5OGExZjlhOGExZTliOGExZTljODkxZTlkODkxZjllODkxZjlmODgxZmEwODgxZmExODgxZmExODcxZmEyODcyMGEzODYyMGE0ODYyMWE1ODUyMWE2ODUyMmE3ODUyMmE4ODQyM2E5ODMyNGFhODMyNWFiODIyNWFjODIyNmFkODEyN2FkODEyOGFlODAyOWFmN2YyYWIwN2YyY2IxN2UyZGIyN2QyZWIzN2MyZmI0N2MzMWI1N2IzMmI2N2EzNGI2NzkzNWI3NzkzN2I4NzgzOGI5NzczYWJhNzYzYmJiNzUzZGJjNzQzZmJjNzM0MGJkNzI0MmJlNzE0NGJmNzA0NmMwNmY0OGMxNmU0YWMxNmQ0Y2MyNmM0ZWMzNmI1MGM0NmE1MmM1Njk1NGM1Njg1NmM2Njc1OGM3NjU1YWM4NjQ1Y2M4NjM1ZWM5NjI2MGNhNjA2M2NiNWY2NWNiNWU2N2NjNWM2OWNkNWI2Y2NkNWE2ZWNlNTg3MGNmNTc3M2QwNTY3NWQwNTQ3N2QxNTM3YWQxNTE3Y2QyNTA3ZmQzNGU4MWQzNGQ4NGQ0NGI4NmQ1NDk4OWQ1NDg4YmQ2NDY4ZWQ2NDU5MGQ3NDM5M2Q3NDE5NWQ4NDA5OGQ4M2U5YmQ5M2M5ZGQ5M2JhMGRhMzlhMmRhMzdhNWRiMzZhOGRiMzRhYWRjMzJhZGRjMzBiMGRkMmZiMmRkMmRiNWRlMmJiOGRlMjliYWRlMjhiZGRmMjZjMGRmMjVjMmRmMjNjNWUwMjFjOGUwMjBjYWUxMWZjZGUxMWRkMGUxMWNkMmUyMWJkNWUyMWFkOGUyMTlkYWUzMTlkZGUzMThkZmUzMThlMmU0MThlNWU0MTllN2U0MTllYWU1MWFlY2U1MWJlZmU1MWNmMWU1MWRmNGU2MWVmNmU2MjBmOGU2MjFmYmU3MjNmZGU3MjUiKSksdjQ9XzQobDQoIjAwMDAwNDAxMDAwNTAxMDEwNjAxMDEwODAyMDEwOTAyMDIwYjAyMDIwZDAzMDMwZjAzMDMxMjA0MDQxNDA1MDQxNjA2MDUxODA2MDUxYTA3MDYxYzA4MDcxZTA5MDcyMDBhMDgyMjBiMDkyNDBjMDkyNjBkMGEyOTBlMGIyYjEwMGIyZDExMGMyZjEyMGQzMTEzMGQzNDE0MGUzNjE1MGUzODE2MGYzYjE4MGYzZDE5MTAzZjFhMTA0MjFjMTA0NDFkMTE0NzFlMTE0OTIwMTE0YjIxMTE0ZTIyMTE1MDI0MTI1MzI1MTI1NTI3MTI1ODI5MTE1YTJhMTE1YzJjMTE1ZjJkMTE2MTJmMTE2MzMxMTE2NTMzMTA2NzM0MTA2OTM2MTA2YjM4MTA2YzM5MGY2ZTNiMGY3MDNkMGY3MTNmMGY3MjQwMGY3NDQyMGY3NTQ0MGY3NjQ1MTA3NzQ3MTA3ODQ5MTA3ODRhMTA3OTRjMTE3YTRlMTE3YjRmMTI3YjUxMTI3YzUyMTM3YzU0MTM3ZDU2MTQ3ZDU3MTU3ZTU5MTU3ZTVhMTY3ZTVjMTY3ZjVkMTc3ZjVmMTg3ZjYwMTg4MDYyMTk4MDY0MWE4MDY1MWE4MDY3MWI4MDY4MWM4MTZhMWM4MTZiMWQ4MTZkMWQ4MTZlMWU4MTcwMWY4MTcyMWY4MTczMjA4MTc1MjE4MTc2MjE4MTc4MjI4MTc5MjI4MjdiMjM4MjdjMjM4MjdlMjQ4MjgwMjU4MjgxMjU4MTgzMjY4MTg0MjY4MTg2Mjc4MTg4Mjc4MTg5Mjg4MThiMjk4MThjMjk4MThlMmE4MTkwMmE4MTkxMmI4MTkzMmI4MDk0MmM4MDk2MmM4MDk4MmQ4MDk5MmQ4MDliMmU3ZjljMmU3ZjllMmY3ZmEwMmY3ZmExMzA3ZWEzMzA3ZWE1MzE3ZWE2MzE3ZGE4MzI3ZGFhMzM3ZGFiMzM3Y2FkMzQ3Y2FlMzQ3YmIwMzU3YmIyMzU3YmIzMzY3YWI1MzY3YWI3Mzc3OWI4Mzc3OWJhMzg3OGJjMzk3OGJkMzk3N2JmM2E3N2MwM2E3NmMyM2I3NWM0M2M3NWM1M2M3NGM3M2Q3M2M4M2U3M2NhM2U3MmNjM2Y3MWNkNDA3MWNmNDA3MGQwNDE2ZmQyNDI2ZmQzNDM2ZWQ1NDQ2ZGQ2NDU2Y2Q4NDU2Y2Q5NDY2YmRiNDc2YWRjNDg2OWRlNDk2OGRmNGE2OGUwNGM2N2UyNGQ2NmUzNGU2NWU0NGY2NGU1NTA2NGU3NTI2M2U4NTM2MmU5NTQ2MmVhNTY2MWViNTc2MGVjNTg2MGVkNWE1ZmVlNWI1ZWVmNWQ1ZWYwNWY1ZWYxNjA1ZGYyNjI1ZGYyNjQ1Y2YzNjU1Y2Y0Njc1Y2Y0Njk1Y2Y1NmI1Y2Y2NmM1Y2Y2NmU1Y2Y3NzA1Y2Y3NzI1Y2Y4NzQ1Y2Y4NzY1Y2Y5Nzg1ZGY5Nzk1ZGY5N2I1ZGZhN2Q1ZWZhN2Y1ZWZhODE1ZmZiODM1ZmZiODU2MGZiODc2MWZjODk2MWZjOGE2MmZjOGM2M2ZjOGU2NGZjOTA2NWZkOTI2NmZkOTQ2N2ZkOTY2OGZkOTg2OWZkOWE2YWZkOWI2YmZlOWQ2Y2ZlOWY2ZGZlYTE2ZWZlYTM2ZmZlYTU3MWZlYTc3MmZlYTk3M2ZlYWE3NGZlYWM3NmZlYWU3N2ZlYjA3OGZlYjI3YWZlYjQ3YmZlYjY3Y2ZlYjc3ZWZlYjk3ZmZlYmI4MWZlYmQ4MmZlYmY4NGZlYzE4NWZlYzI4N2ZlYzQ4OGZlYzY4YWZlYzg4Y2ZlY2E4ZGZlY2M4ZmZlY2Q5MGZlY2Y5MmZlZDE5NGZlZDM5NWZlZDU5N2ZlZDc5OWZlZDg5YWZkZGE5Y2ZkZGM5ZWZkZGVhMGZkZTBhMWZkZTJhM2ZkZTNhNWZkZTVhN2ZkZTdhOWZkZTlhYWZkZWJhY2ZjZWNhZWZjZWViMGZjZjBiMmZjZjJiNGZjZjRiNmZjZjZiOGZjZjdiOWZjZjliYmZjZmJiZGZjZmRiZiIpKSxiND1fNChsNCgiMDAwMDA0MDEwMDA1MDEwMTA2MDEwMTA4MDIwMTBhMDIwMjBjMDIwMjBlMDMwMjEwMDQwMzEyMDQwMzE0MDUwNDE3MDYwNDE5MDcwNTFiMDgwNTFkMDkwNjFmMGEwNzIyMGIwNzI0MGMwODI2MGQwODI5MGUwOTJiMTAwOTJkMTEwYTMwMTIwYTMyMTQwYjM0MTUwYjM3MTYwYjM5MTgwYzNjMTkwYzNlMWIwYzQxMWMwYzQzMWUwYzQ1MWYwYzQ4MjEwYzRhMjMwYzRjMjQwYzRmMjYwYzUxMjgwYjUzMjkwYjU1MmIwYjU3MmQwYjU5MmYwYTViMzEwYTVjMzIwYTVlMzQwYTVmMzYwOTYxMzgwOTYyMzkwOTYzM2IwOTY0M2QwOTY1M2UwOTY2NDAwYTY3NDIwYTY4NDQwYTY4NDUwYTY5NDcwYjZhNDkwYjZhNGEwYzZiNGMwYzZiNGQwZDZjNGYwZDZjNTEwZTZjNTIwZTZkNTQwZjZkNTUwZjZkNTcxMDZlNTkxMDZlNWExMTZlNWMxMjZlNWQxMjZlNWYxMzZlNjExMzZlNjIxNDZlNjQxNTZlNjUxNTZlNjcxNjZlNjkxNjZlNmExNzZlNmMxODZlNmQxODZlNmYxOTZlNzExOTZlNzIxYTZlNzQxYTZlNzUxYjZlNzcxYzZkNzgxYzZkN2ExZDZkN2MxZDZkN2QxZTZkN2YxZTZjODAxZjZjODIyMDZjODQyMDZiODUyMTZiODcyMTZiODgyMjZhOGEyMjZhOGMyMzY5OGQyMzY5OGYyNDY5OTAyNTY4OTIyNTY4OTMyNjY3OTUyNjY3OTcyNzY2OTgyNzY2OWEyODY1OWIyOTY0OWQyOTY0OWYyYTYzYTAyYTYzYTIyYjYyYTMyYzYxYTUyYzYwYTYyZDYwYTgyZTVmYTkyZTVlYWIyZjVlYWQzMDVkYWUzMDVjYjAzMTViYjEzMjVhYjMzMjVhYjQzMzU5YjYzNDU4YjczNTU3YjkzNTU2YmEzNjU1YmMzNzU0YmQzODUzYmYzOTUyYzAzYTUxYzEzYTUwYzMzYjRmYzQzYzRlYzYzZDRkYzczZTRjYzgzZjRiY2E0MDRhY2I0MTQ5Y2M0MjQ4Y2U0MzQ3Y2Y0NDQ2ZDA0NTQ1ZDI0NjQ0ZDM0NzQzZDQ0ODQyZDU0YTQxZDc0YjNmZDg0YzNlZDk0ZDNkZGE0ZTNjZGI1MDNiZGQ1MTNhZGU1MjM4ZGY1MzM3ZTA1NTM2ZTE1NjM1ZTI1NzM0ZTM1OTMzZTQ1YTMxZTU1YzMwZTY1ZDJmZTc1ZTJlZTg2MDJkZTk2MTJiZWE2MzJhZWI2NDI5ZWI2NjI4ZWM2NzI2ZWQ2OTI1ZWU2YTI0ZWY2YzIzZWY2ZTIxZjA2ZjIwZjE3MTFmZjE3MzFkZjI3NDFjZjM3NjFiZjM3ODE5ZjQ3OTE4ZjU3YjE3ZjU3ZDE1ZjY3ZTE0ZjY4MDEzZjc4MjEyZjc4NDEwZjg4NTBmZjg4NzBlZjg4OTBjZjk4YjBiZjk4YzBhZjk4ZTA5ZmE5MDA4ZmE5MjA3ZmE5NDA3ZmI5NjA2ZmI5NzA2ZmI5OTA2ZmI5YjA2ZmI5ZDA3ZmM5ZjA3ZmNhMTA4ZmNhMzA5ZmNhNTBhZmNhNjBjZmNhODBkZmNhYTBmZmNhYzExZmNhZTEyZmNiMDE0ZmNiMjE2ZmNiNDE4ZmJiNjFhZmJiODFkZmJiYTFmZmJiYzIxZmJiZTIzZmFjMDI2ZmFjMjI4ZmFjNDJhZmFjNjJkZjljNzJmZjljOTMyZjljYjM1ZjhjZDM3ZjhjZjNhZjdkMTNkZjdkMzQwZjZkNTQzZjZkNzQ2ZjVkOTQ5ZjVkYjRjZjRkZDRmZjRkZjUzZjRlMTU2ZjNlMzVhZjNlNTVkZjJlNjYxZjJlODY1ZjJlYTY5ZjFlYzZkZjFlZDcxZjFlZjc1ZjFmMTc5ZjJmMjdkZjJmNDgyZjNmNTg2ZjNmNjhhZjRmODhlZjVmOTkyZjZmYTk2ZjhmYjlhZjlmYzlkZmFmZGExZmNmZmE0IikpLHg0PV80KGw0KCIwZDA4ODcxMDA3ODgxMzA3ODkxNjA3OGExOTA2OGMxYjA2OGQxZDA2OGUyMDA2OGYyMjA2OTAyNDA2OTEyNjA1OTEyODA1OTIyYTA1OTMyYzA1OTQyZTA1OTUyZjA1OTYzMTA1OTczMzA1OTczNTA0OTgzNzA0OTkzODA0OWEzYTA0OWEzYzA0OWIzZTA0OWMzZjA0OWM0MTA0OWQ0MzAzOWU0NDAzOWU0NjAzOWY0ODAzOWY0OTAzYTA0YjAzYTE0YzAyYTE0ZTAyYTI1MDAyYTI1MTAyYTM1MzAyYTM1NTAyYTQ1NjAxYTQ1ODAxYTQ1OTAxYTU1YjAxYTU1YzAxYTY1ZTAxYTY2MDAxYTY2MTAwYTc2MzAwYTc2NDAwYTc2NjAwYTc2NzAwYTg2OTAwYTg2YTAwYTg2YzAwYTg2ZTAwYTg2ZjAwYTg3MTAwYTg3MjAxYTg3NDAxYTg3NTAxYTg3NzAxYTg3ODAxYTg3YTAyYTg3YjAyYTg3ZDAzYTg3ZTAzYTg4MDA0YTg4MTA0YTc4MzA1YTc4NDA1YTc4NjA2YTY4NzA3YTY4ODA4YTY4YTA5YTU4YjBhYTU4ZDBiYTU4ZTBjYTQ4ZjBkYTQ5MTBlYTM5MjBmYTM5NDEwYTI5NTExYTE5NjEzYTE5ODE0YTA5OTE1OWY5YTE2OWY5YzE3OWU5ZDE4OWQ5ZTE5OWRhMDFhOWNhMTFiOWJhMjFkOWFhMzFlOWFhNTFmOTlhNjIwOThhNzIxOTdhODIyOTZhYTIzOTVhYjI0OTRhYzI2OTRhZDI3OTNhZTI4OTJiMDI5OTFiMTJhOTBiMjJiOGZiMzJjOGViNDJlOGRiNTJmOGNiNjMwOGJiNzMxOGFiODMyODliYTMzODhiYjM0ODhiYzM1ODdiZDM3ODZiZTM4ODViZjM5ODRjMDNhODNjMTNiODJjMjNjODFjMzNkODBjNDNlN2ZjNTQwN2VjNjQxN2RjNzQyN2NjODQzN2JjOTQ0N2FjYTQ1N2FjYjQ2NzljYzQ3NzhjYzQ5NzdjZDRhNzZjZTRiNzVjZjRjNzRkMDRkNzNkMTRlNzJkMjRmNzFkMzUxNzFkNDUyNzBkNTUzNmZkNTU0NmVkNjU1NmRkNzU2NmNkODU3NmJkOTU4NmFkYTVhNmFkYTViNjlkYjVjNjhkYzVkNjdkZDVlNjZkZTVmNjVkZTYxNjRkZjYyNjNlMDYzNjNlMTY0NjJlMjY1NjFlMjY2NjBlMzY4NWZlNDY5NWVlNTZhNWRlNTZiNWRlNjZjNWNlNzZlNWJlNzZmNWFlODcwNTllOTcxNThlOTcyNTdlYTc0NTdlYjc1NTZlYjc2NTVlYzc3NTRlZDc5NTNlZDdhNTJlZTdiNTFlZjdjNTFlZjdlNTBmMDdmNGZmMDgwNGVmMTgxNGRmMTgzNGNmMjg0NGJmMzg1NGJmMzg3NGFmNDg4NDlmNDg5NDhmNThiNDdmNThjNDZmNjhkNDVmNjhmNDRmNzkwNDRmNzkxNDNmNzkzNDJmODk0NDFmODk1NDBmOTk3M2ZmOTk4M2VmOTlhM2VmYTliM2RmYTljM2NmYTllM2JmYjlmM2FmYmExMzlmYmEyMzhmY2EzMzhmY2E1MzdmY2E2MzZmY2E4MzVmY2E5MzRmZGFiMzNmZGFjMzNmZGFlMzJmZGFmMzFmZGIxMzBmZGIyMmZmZGI0MmZmZGI1MmVmZWI3MmRmZWI4MmNmZWJhMmNmZWJiMmJmZWJkMmFmZWJlMmFmZWMwMjlmZGMyMjlmZGMzMjhmZGM1MjdmZGM2MjdmZGM4MjdmZGNhMjZmZGNiMjZmY2NkMjVmY2NlMjVmY2QwMjVmY2QyMjVmYmQzMjRmYmQ1MjRmYmQ3MjRmYWQ4MjRmYWRhMjRmOWRjMjRmOWRkMjVmOGRmMjVmOGUxMjVmN2UyMjVmN2U0MjVmNmU2MjZmNmU4MjZmNWU5MjZmNWViMjdmNGVkMjdmM2VlMjdmM2YwMjdmMmYyMjdmMWY0MjZmMWY1MjVmMGY3MjRmMGY5MjEiKSksdzQ9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLFM0PXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDp3NCx4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9O2Z1bmN0aW9uIE00KHQpe3ZhciBlPXQrPSIiLG49ZS5pbmRleE9mKCI6Iik7cmV0dXJuIG4+PTAmJiJ4bWxucyIhPT0oZT10LnNsaWNlKDAsbikpJiYodD10LnNsaWNlKG4rMSkpLFM0Lmhhc093blByb3BlcnR5KGUpP3tzcGFjZTpTNFtlXSxsb2NhbDp0fTp0fWZ1bmN0aW9uIEU0KHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMub3duZXJEb2N1bWVudCxuPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiBuPT09dzQmJmUuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PXc0P2UuY3JlYXRlRWxlbWVudCh0KTplLmNyZWF0ZUVsZW1lbnROUyhuLHQpfX1mdW5jdGlvbiBUNCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyh0LnNwYWNlLHQubG9jYWwpfX1mdW5jdGlvbiBDNCh0KXt2YXIgZT1NNCh0KTtyZXR1cm4oZS5sb2NhbD9UNDpFNCkoZSl9ZnVuY3Rpb24gQTQoKXt9ZnVuY3Rpb24gazQodCl7cmV0dXJuIG51bGw9PXQ/QTQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKHQpfX1mdW5jdGlvbiBMNCgpe3JldHVybltdfWZ1bmN0aW9uIFA0KHQpe3JldHVybiBudWxsPT10P0w0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbCh0KX19dmFyIE40PWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoZXModCl9fTtpZigidW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50KXt2YXIgSTQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O2lmKCFJNC5tYXRjaGVzKXt2YXIgTzQ9STQud2Via2l0TWF0Y2hlc1NlbGVjdG9yfHxJNC5tc01hdGNoZXNTZWxlY3Rvcnx8STQubW96TWF0Y2hlc1NlbGVjdG9yfHxJNC5vTWF0Y2hlc1NlbGVjdG9yO040PWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBPNC5jYWxsKHRoaXMsdCl9fX19dmFyIFI0PU40O2Z1bmN0aW9uIHo0KHQpe3JldHVybiBuZXcgQXJyYXkodC5sZW5ndGgpfWZ1bmN0aW9uIEQ0KHQsZSl7dGhpcy5vd25lckRvY3VtZW50PXQub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST10Lm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PXQsdGhpcy5fX2RhdGFfXz1lfWZ1bmN0aW9uIEI0KHQsZSxuLGkscixvKXtmb3IodmFyIGEscz0wLGw9ZS5sZW5ndGgsYz1vLmxlbmd0aDtzPGM7KytzKShhPWVbc10pPyhhLl9fZGF0YV9fPW9bc10saVtzXT1hKTpuW3NdPW5ldyBENCh0LG9bc10pO2Zvcig7czxsOysrcykoYT1lW3NdKSYmKHJbc109YSl9ZnVuY3Rpb24gSDQodCxlLG4saSxyLG8sYSl7dmFyIHMsbCxjLHU9e30saD1lLmxlbmd0aCxkPW8ubGVuZ3RoLHA9bmV3IEFycmF5KGgpO2ZvcihzPTA7czxoOysrcykobD1lW3NdKSYmKHBbc109Yz0iJCIrYS5jYWxsKGwsbC5fX2RhdGFfXyxzLGUpLGMgaW4gdT9yW3NdPWw6dVtjXT1sKTtmb3Iocz0wO3M8ZDsrK3MpKGw9dVtjPSIkIithLmNhbGwodCxvW3NdLHMsbyldKT8oaVtzXT1sLGwuX19kYXRhX189b1tzXSx1W2NdPW51bGwpOm5bc109bmV3IEQ0KHQsb1tzXSk7Zm9yKHM9MDtzPGg7KytzKShsPWVbc10pJiZ1W3Bbc11dPT09bCYmKHJbc109bCl9ZnVuY3Rpb24gRjQodCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59ZnVuY3Rpb24gVjQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9fWZ1bmN0aW9uIFU0KHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKX19ZnVuY3Rpb24gajQodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZSh0LGUpfX1mdW5jdGlvbiBHNCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsLGUpfX1mdW5jdGlvbiBXNCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PW4/dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCk6dGhpcy5zZXRBdHRyaWJ1dGUodCxuKX19ZnVuY3Rpb24gcTQodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1uP3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxuKX19ZnVuY3Rpb24gWTQodCl7cmV0dXJuIHQub3duZXJEb2N1bWVudCYmdC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHx0LmRvY3VtZW50JiZ0fHx0LmRlZmF1bHRWaWV3fWZ1bmN0aW9uIFg0KHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCl9fWZ1bmN0aW9uICQ0KHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQsZSxuKX19ZnVuY3Rpb24gSzQodCxlLG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciBpPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PWk/dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KTp0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQsaSxuKX19ZnVuY3Rpb24gWjQodCxlKXtyZXR1cm4gdC5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKGUpfHxZNCh0KS5nZXRDb21wdXRlZFN0eWxlKHQsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShlKX1mdW5jdGlvbiBKNCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtkZWxldGUgdGhpc1t0XX19ZnVuY3Rpb24gUTQodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzW3RdPWV9fWZ1bmN0aW9uIHQ2KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09bj9kZWxldGUgdGhpc1t0XTp0aGlzW3RdPW59fWZ1bmN0aW9uIGU2KHQpe3JldHVybiB0LnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiBuNih0KXtyZXR1cm4gdC5jbGFzc0xpc3R8fG5ldyBpNih0KX1mdW5jdGlvbiBpNih0KXt0aGlzLl9ub2RlPXQsdGhpcy5fbmFtZXM9ZTYodC5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX1mdW5jdGlvbiByNih0LGUpe2Zvcih2YXIgbj1uNih0KSxpPS0xLHI9ZS5sZW5ndGg7KytpPHI7KW4uYWRkKGVbaV0pfWZ1bmN0aW9uIG82KHQsZSl7Zm9yKHZhciBuPW42KHQpLGk9LTEscj1lLmxlbmd0aDsrK2k8cjspbi5yZW1vdmUoZVtpXSl9ZnVuY3Rpb24gYTYodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cjYodGhpcyx0KX19ZnVuY3Rpb24gczYodCl7cmV0dXJuIGZ1bmN0aW9uKCl7bzYodGhpcyx0KX19ZnVuY3Rpb24gbDYodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXsoZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk/cjY6bzYpKHRoaXMsdCl9fWZ1bmN0aW9uIGM2KCl7dGhpcy50ZXh0Q29udGVudD0iIn1mdW5jdGlvbiB1Nih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PXR9fWZ1bmN0aW9uIGg2KHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMudGV4dENvbnRlbnQ9bnVsbD09ZT8iIjplfX1mdW5jdGlvbiBkNigpe3RoaXMuaW5uZXJIVE1MPSIifWZ1bmN0aW9uIHA2KHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPXR9fWZ1bmN0aW9uIGY2KHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPW51bGw9PWU/IiI6ZX19ZnVuY3Rpb24gbTYoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gZzYoKXt0aGlzLnByZXZpb3VzU2libGluZyYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLHRoaXMucGFyZW50Tm9kZS5maXJzdENoaWxkKX1mdW5jdGlvbiBfNigpe3JldHVybiBudWxsfWZ1bmN0aW9uIHk2KCl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlO3QmJnQucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gdjYoKXtyZXR1cm4gdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLmNsb25lTm9kZSghMSksdGhpcy5uZXh0U2libGluZyl9ZnVuY3Rpb24gYjYoKXtyZXR1cm4gdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLmNsb25lTm9kZSghMCksdGhpcy5uZXh0U2libGluZyl9RDQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpENCxhcHBlbmRDaGlsZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZSh0LHRoaXMuX25leHQpfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZSh0LGUpfSxxdWVyeVNlbGVjdG9yOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3Rvcih0KX0scXVlcnlTZWxlY3RvckFsbDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwodCl9fSxpNi5wcm90b3R5cGU9e2FkZDpmdW5jdGlvbih0KXt0aGlzLl9uYW1lcy5pbmRleE9mKHQpPDAmJih0aGlzLl9uYW1lcy5wdXNoKHQpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LHJlbW92ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9uYW1lcy5pbmRleE9mKHQpO2U+PTAmJih0aGlzLl9uYW1lcy5zcGxpY2UoZSwxKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxjb250YWluczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZih0KT49MH19O3ZhciB4Nj17fSx3Nj1udWxsO2Z1bmN0aW9uIFM2KHQsZSxuKXtyZXR1cm4gdD1NNih0LGUsbiksZnVuY3Rpb24oZSl7dmFyIG49ZS5yZWxhdGVkVGFyZ2V0O24mJihuPT09dGhpc3x8OCZuLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHRoaXMpKXx8dC5jYWxsKHRoaXMsZSl9fWZ1bmN0aW9uIE02KHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24oaSl7dmFyIHI9dzY7dzY9aTt0cnl7dC5jYWxsKHRoaXMsdGhpcy5fX2RhdGFfXyxlLG4pfWZpbmFsbHl7dzY9cn19fWZ1bmN0aW9uIEU2KHQpe3JldHVybiB0LnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBlPSIiLG49dC5pbmRleE9mKCIuIik7cmV0dXJuIG4+PTAmJihlPXQuc2xpY2UobisxKSx0PXQuc2xpY2UoMCxuKSkse3R5cGU6dCxuYW1lOmV9fSkpfWZ1bmN0aW9uIFQ2KHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMuX19vbjtpZihlKXtmb3IodmFyIG4saT0wLHI9LTEsbz1lLmxlbmd0aDtpPG87KytpKW49ZVtpXSx0LnR5cGUmJm4udHlwZSE9PXQudHlwZXx8bi5uYW1lIT09dC5uYW1lP2VbKytyXT1uOnRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihuLnR5cGUsbi5saXN0ZW5lcixuLmNhcHR1cmUpOysrcj9lLmxlbmd0aD1yOmRlbGV0ZSB0aGlzLl9fb259fX1mdW5jdGlvbiBDNih0LGUsbil7dmFyIGk9eDYuaGFzT3duUHJvcGVydHkodC50eXBlKT9TNjpNNjtyZXR1cm4gZnVuY3Rpb24ocixvLGEpe3ZhciBzLGw9dGhpcy5fX29uLGM9aShlLG8sYSk7aWYobClmb3IodmFyIHU9MCxoPWwubGVuZ3RoO3U8aDsrK3UpaWYoKHM9bFt1XSkudHlwZT09PXQudHlwZSYmcy5uYW1lPT09dC5uYW1lKXJldHVybiB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIocy50eXBlLHMubGlzdGVuZXIscy5jYXB0dXJlKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIocy50eXBlLHMubGlzdGVuZXI9YyxzLmNhcHR1cmU9biksdm9pZChzLnZhbHVlPWUpO3RoaXMuYWRkRXZlbnRMaXN0ZW5lcih0LnR5cGUsYyxuKSxzPXt0eXBlOnQudHlwZSxuYW1lOnQubmFtZSx2YWx1ZTplLGxpc3RlbmVyOmMsY2FwdHVyZTpufSxsP2wucHVzaChzKTp0aGlzLl9fb249W3NdfX1mdW5jdGlvbiBBNih0LGUsbil7dmFyIGk9WTQodCkscj1pLkN1c3RvbUV2ZW50OyJmdW5jdGlvbiI9PXR5cGVvZiByP3I9bmV3IHIoZSxuKToocj1pLmRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpLG4/KHIuaW5pdEV2ZW50KGUsbi5idWJibGVzLG4uY2FuY2VsYWJsZSksci5kZXRhaWw9bi5kZXRhaWwpOnIuaW5pdEV2ZW50KGUsITEsITEpKSx0LmRpc3BhdGNoRXZlbnQocil9ZnVuY3Rpb24gazYodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gQTYodGhpcyx0LGUpfX1mdW5jdGlvbiBMNih0LGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBBNih0aGlzLHQsZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX0idW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50JiYoIm9ubW91c2VlbnRlciJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnR8fCh4Nj17bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9KSk7dmFyIFA2PVtudWxsXTtmdW5jdGlvbiBONih0LGUpe3RoaXMuX2dyb3Vwcz10LHRoaXMuX3BhcmVudHM9ZX1mdW5jdGlvbiBJNigpe3JldHVybiBuZXcgTjYoW1tkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXSxQNil9ZnVuY3Rpb24gTzYodCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P25ldyBONihbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodCldXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IE42KFtbdF1dLFA2KX1ONi5wcm90b3R5cGU9STYucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpONixzZWxlY3Q6ZnVuY3Rpb24gUjYodCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PWs0KHQpKTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49ZS5sZW5ndGgsaT1uZXcgQXJyYXkobikscj0wO3I8bjsrK3IpZm9yKHZhciBvLGEscz1lW3JdLGw9cy5sZW5ndGgsYz1pW3JdPW5ldyBBcnJheShsKSx1PTA7dTxsOysrdSkobz1zW3VdKSYmKGE9dC5jYWxsKG8sby5fX2RhdGFfXyx1LHMpKSYmKCJfX2RhdGFfXyJpbiBvJiYoYS5fX2RhdGFfXz1vLl9fZGF0YV9fKSxjW3VdPWEpO3JldHVybiBuZXcgTjYoaSx0aGlzLl9wYXJlbnRzKX0sc2VsZWN0QWxsOmZ1bmN0aW9uIHo2KHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1QNCh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLGk9W10scj1bXSxvPTA7bzxuOysrbylmb3IodmFyIGEscz1lW29dLGw9cy5sZW5ndGgsYz0wO2M8bDsrK2MpKGE9c1tjXSkmJihpLnB1c2godC5jYWxsKGEsYS5fX2RhdGFfXyxjLHMpKSxyLnB1c2goYSkpO3JldHVybiBuZXcgTjYoaSxyKX0sZmlsdGVyOmZ1bmN0aW9uIEQ2KHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1SNCh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLGk9bmV3IEFycmF5KG4pLHI9MDtyPG47KytyKWZvcih2YXIgbyxhPWVbcl0scz1hLmxlbmd0aCxsPWlbcl09W10sYz0wO2M8czsrK2MpKG89YVtjXSkmJnQuY2FsbChvLG8uX19kYXRhX18sYyxhKSYmbC5wdXNoKG8pO3JldHVybiBuZXcgTjYoaSx0aGlzLl9wYXJlbnRzKX0sZGF0YTpmdW5jdGlvbiBCNih0LGUpe2lmKCF0KXJldHVybiBmPW5ldyBBcnJheSh0aGlzLnNpemUoKSksdT0tMSx0aGlzLmVhY2goKGZ1bmN0aW9uKHQpe2ZbKyt1XT10fSkpLGY7dmFyIG49ZT9INDpCNCxpPXRoaXMuX3BhcmVudHMscj10aGlzLl9ncm91cHM7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PShmdW5jdGlvbiBvKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0pKHQpKTtmb3IodmFyIGE9ci5sZW5ndGgscz1uZXcgQXJyYXkoYSksbD1uZXcgQXJyYXkoYSksYz1uZXcgQXJyYXkoYSksdT0wO3U8YTsrK3Upe3ZhciBoPWlbdV0sZD1yW3VdLHA9ZC5sZW5ndGgsZj10LmNhbGwoaCxoJiZoLl9fZGF0YV9fLHUsaSksbT1mLmxlbmd0aCxnPWxbdV09bmV3IEFycmF5KG0pLF89c1t1XT1uZXcgQXJyYXkobSk7bihoLGQsZyxfLGNbdV09bmV3IEFycmF5KHApLGYsZSk7Zm9yKHZhciB5LHYsYj0wLHg9MDtiPG07KytiKWlmKHk9Z1tiXSl7Zm9yKGI+PXgmJih4PWIrMSk7ISh2PV9beF0pJiYrK3g8bTspO3kuX25leHQ9dnx8bnVsbH19cmV0dXJuKHM9bmV3IE42KHMsaSkpLl9lbnRlcj1sLHMuX2V4aXQ9YyxzfSxlbnRlcjpmdW5jdGlvbiBINigpe3JldHVybiBuZXcgTjYodGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAoejQpLHRoaXMuX3BhcmVudHMpfSxleGl0OmZ1bmN0aW9uIEY2KCl7cmV0dXJuIG5ldyBONih0aGlzLl9leGl0fHx0aGlzLl9ncm91cHMubWFwKHo0KSx0aGlzLl9wYXJlbnRzKX0sbWVyZ2U6ZnVuY3Rpb24gVjYodCl7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPXQuX2dyb3VwcyxpPWUubGVuZ3RoLHI9TWF0aC5taW4oaSxuLmxlbmd0aCksbz1uZXcgQXJyYXkoaSksYT0wO2E8cjsrK2EpZm9yKHZhciBzLGw9ZVthXSxjPW5bYV0sdT1sLmxlbmd0aCxoPW9bYV09bmV3IEFycmF5KHUpLGQ9MDtkPHU7KytkKShzPWxbZF18fGNbZF0pJiYoaFtkXT1zKTtmb3IoO2E8aTsrK2Epb1thXT1lW2FdO3JldHVybiBuZXcgTjYobyx0aGlzLl9wYXJlbnRzKX0sb3JkZXI6ZnVuY3Rpb24gVTYoKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9LTEsbj10Lmxlbmd0aDsrK2U8bjspZm9yKHZhciBpLHI9dFtlXSxvPXIubGVuZ3RoLTEsYT1yW29dOy0tbz49MDspKGk9cltvXSkmJihhJiZhIT09aS5uZXh0U2libGluZyYmYS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShpLGEpLGE9aSk7cmV0dXJuIHRoaXN9LHNvcnQ6ZnVuY3Rpb24gajYodCl7ZnVuY3Rpb24gZShlLG4pe3JldHVybiBlJiZuP3QoZS5fX2RhdGFfXyxuLl9fZGF0YV9fKTohZS0hbn10fHwodD1GNCk7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLHI9bmV3IEFycmF5KGkpLG89MDtvPGk7KytvKXtmb3IodmFyIGEscz1uW29dLGw9cy5sZW5ndGgsYz1yW29dPW5ldyBBcnJheShsKSx1PTA7dTxsOysrdSkoYT1zW3VdKSYmKGNbdV09YSk7Yy5zb3J0KGUpfXJldHVybiBuZXcgTjYocix0aGlzLl9wYXJlbnRzKS5vcmRlcigpfSxjYWxsOmZ1bmN0aW9uIEc2KCl7dmFyIHQ9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyx0LmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfSxub2RlczpmdW5jdGlvbiBXNigpe3ZhciB0PW5ldyBBcnJheSh0aGlzLnNpemUoKSksZT0tMTtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpe3RbKytlXT10aGlzfSkpLHR9LG5vZGU6ZnVuY3Rpb24gcTYoKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9MCxuPXQubGVuZ3RoO2U8bjsrK2UpZm9yKHZhciBpPXRbZV0scj0wLG89aS5sZW5ndGg7cjxvOysrcil7dmFyIGE9aVtyXTtpZihhKXJldHVybiBhfXJldHVybiBudWxsfSxzaXplOmZ1bmN0aW9uIFk2KCl7dmFyIHQ9MDtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpeysrdH0pKSx0fSxlbXB0eTpmdW5jdGlvbiBYNigpe3JldHVybiF0aGlzLm5vZGUoKX0sZWFjaDpmdW5jdGlvbiAkNih0KXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49MCxpPWUubGVuZ3RoO248aTsrK24pZm9yKHZhciByLG89ZVtuXSxhPTAscz1vLmxlbmd0aDthPHM7KythKShyPW9bYV0pJiZ0LmNhbGwocixyLl9fZGF0YV9fLGEsbyk7cmV0dXJuIHRoaXN9LGF0dHI6ZnVuY3Rpb24gSzYodCxlKXt2YXIgbj1NNCh0KTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBpPXRoaXMubm9kZSgpO3JldHVybiBuLmxvY2FsP2kuZ2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKTppLmdldEF0dHJpYnV0ZShuKX1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT1lP24ubG9jYWw/VTQ6VjQ6ImZ1bmN0aW9uIj09dHlwZW9mIGU/bi5sb2NhbD9xNDpXNDpuLmxvY2FsP0c0Omo0KShuLGUpKX0sc3R5bGU6ZnVuY3Rpb24gWjYodCxlLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChudWxsPT1lP1g0OiJmdW5jdGlvbiI9PXR5cGVvZiBlP0s0OiQ0KSh0LGUsbnVsbD09bj8iIjpuKSk6WjQodGhpcy5ub2RlKCksdCl9LHByb3BlcnR5OmZ1bmN0aW9uIEo2KHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PWU/SjQ6ImZ1bmN0aW9uIj09dHlwZW9mIGU/dDY6UTQpKHQsZSkpOnRoaXMubm9kZSgpW3RdfSxjbGFzc2VkOmZ1bmN0aW9uIFE2KHQsZSl7dmFyIG49ZTYodCsiIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIGk9bjYodGhpcy5ub2RlKCkpLHI9LTEsbz1uLmxlbmd0aDsrK3I8bzspaWYoIWkuY29udGFpbnMobltyXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIHRoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIGU/bDY6ZT9hNjpzNikobixlKSl9LHRleHQ6ZnVuY3Rpb24gdDkodCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PXQ/YzY6KCJmdW5jdGlvbiI9PXR5cGVvZiB0P2g2OnU2KSh0KSk6dGhpcy5ub2RlKCkudGV4dENvbnRlbnR9LGh0bWw6ZnVuY3Rpb24gZTkodCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PXQ/ZDY6KCJmdW5jdGlvbiI9PXR5cGVvZiB0P2Y2OnA2KSh0KSk6dGhpcy5ub2RlKCkuaW5uZXJIVE1MfSxyYWlzZTpmdW5jdGlvbiBuOSgpe3JldHVybiB0aGlzLmVhY2gobTYpfSxsb3dlcjpmdW5jdGlvbiBpOSgpe3JldHVybiB0aGlzLmVhY2goZzYpfSxhcHBlbmQ6ZnVuY3Rpb24gcjkodCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpDNCh0KTtyZXR1cm4gdGhpcy5zZWxlY3QoKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQoZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSkpfSxpbnNlcnQ6ZnVuY3Rpb24gbzkodCxlKXt2YXIgbj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkM0KHQpLGk9bnVsbD09ZT9fNjoiZnVuY3Rpb24iPT10eXBlb2YgZT9lOms0KGUpO3JldHVybiB0aGlzLnNlbGVjdCgoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUobi5hcHBseSh0aGlzLGFyZ3VtZW50cyksaS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSkpfSxyZW1vdmU6ZnVuY3Rpb24gYTkoKXtyZXR1cm4gdGhpcy5lYWNoKHk2KX0sY2xvbmU6ZnVuY3Rpb24gczkodCl7cmV0dXJuIHRoaXMuc2VsZWN0KHQ/YjY6djYpfSxkYXR1bTpmdW5jdGlvbiBsOSh0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsdCk6dGhpcy5ub2RlKCkuX19kYXRhX199LG9uOmZ1bmN0aW9uIGM5KHQsZSxuKXt2YXIgaSxyLG89RTYodCsiIiksYT1vLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2ZvcihzPWU/QzY6VDYsbnVsbD09biYmKG49ITEpLGk9MDtpPGE7KytpKXRoaXMuZWFjaChzKG9baV0sZSxuKSk7cmV0dXJuIHRoaXN9dmFyIHM9dGhpcy5ub2RlKCkuX19vbjtpZihzKWZvcih2YXIgbCxjPTAsdT1zLmxlbmd0aDtjPHU7KytjKWZvcihpPTAsbD1zW2NdO2k8YTsrK2kpaWYoKHI9b1tpXSkudHlwZT09PWwudHlwZSYmci5uYW1lPT09bC5uYW1lKXJldHVybiBsLnZhbHVlfSxkaXNwYXRjaDpmdW5jdGlvbiB1OSh0LGUpe3JldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBlP0w2Oms2KSh0LGUpKX19O3ZhciBoOT0wO2Z1bmN0aW9uIGQ5KCl7cmV0dXJuIG5ldyBwOX1mdW5jdGlvbiBwOSgpe3RoaXMuXz0iQCIrKCsraDkpLnRvU3RyaW5nKDM2KX1mdW5jdGlvbiBmOSgpe2Zvcih2YXIgdCxlPXc2O3Q9ZS5zb3VyY2VFdmVudDspZT10O3JldHVybiBlfWZ1bmN0aW9uIG05KHQsZSl7dmFyIG49dC5vd25lclNWR0VsZW1lbnR8fHQ7aWYobi5jcmVhdGVTVkdQb2ludCl7dmFyIGk9bi5jcmVhdGVTVkdQb2ludCgpO3JldHVybiBpLng9ZS5jbGllbnRYLGkueT1lLmNsaWVudFksWyhpPWkubWF0cml4VHJhbnNmb3JtKHQuZ2V0U2NyZWVuQ1RNKCkuaW52ZXJzZSgpKSkueCxpLnldfXZhciByPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW2UuY2xpZW50WC1yLmxlZnQtdC5jbGllbnRMZWZ0LGUuY2xpZW50WS1yLnRvcC10LmNsaWVudFRvcF19cDkucHJvdG90eXBlPWQ5LnByb3RvdHlwZT17Y29uc3RydWN0b3I6cDksZ2V0OmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl87IShlIGluIHQpOylpZighKHQ9dC5wYXJlbnROb2RlKSlyZXR1cm47cmV0dXJuIHRbZV19LHNldDpmdW5jdGlvbih0LGUpe3JldHVybiB0W3RoaXMuX109ZX0scmVtb3ZlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl8gaW4gdCYmZGVsZXRlIHRbdGhpcy5fXX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ffX07dmFyIGc5PU1hdGguUEksXzk9MipnOSx5OT0xZS02LHY5PV85LXk5O2Z1bmN0aW9uIGI5KCl7dGhpcy5feDA9dGhpcy5feTA9dGhpcy5feDE9dGhpcy5feTE9bnVsbCx0aGlzLl89IiJ9ZnVuY3Rpb24geDkoKXtyZXR1cm4gbmV3IGI5fWZ1bmN0aW9uIHc5KHQpe3JldHVybiBmdW5jdGlvbiBlKCl7cmV0dXJuIHR9fWI5LnByb3RvdHlwZT14OS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmI5LG1vdmVUbzpmdW5jdGlvbih0LGUpe3RoaXMuXys9Ik0iKyh0aGlzLl94MD10aGlzLl94MT0rdCkrIiwiKyh0aGlzLl95MD10aGlzLl95MT0rZSl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe251bGwhPT10aGlzLl94MSYmKHRoaXMuX3gxPXRoaXMuX3gwLHRoaXMuX3kxPXRoaXMuX3kwLHRoaXMuXys9IloiKX0sbGluZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fKz0iTCIrKHRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kxPStlKX0scXVhZHJhdGljQ3VydmVUbzpmdW5jdGlvbih0LGUsbixpKXt0aGlzLl8rPSJRIisgK3QrIiwiKyArZSsiLCIrKHRoaXMuX3gxPStuKSsiLCIrKHRoaXMuX3kxPStpKX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbih0LGUsbixpLHIsbyl7dGhpcy5fKz0iQyIrICt0KyIsIisgK2UrIiwiKyArbisiLCIrICtpKyIsIisodGhpcy5feDE9K3IpKyIsIisodGhpcy5feTE9K28pfSxhcmNUbzpmdW5jdGlvbih0LGUsbixpLHIpe3ZhciBvPXRoaXMuX3gxLGE9dGhpcy5feTEscz0obj0rbiktKHQ9K3QpLGw9KGk9K2kpLShlPStlKSxjPW8tdCx1PWEtZSxoPWMqYyt1KnU7aWYoKHI9K3IpPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrcik7aWYobnVsbD09PXRoaXMuX3gxKXRoaXMuXys9Ik0iKyh0aGlzLl94MT10KSsiLCIrKHRoaXMuX3kxPWUpO2Vsc2UgaWYoaD55OSlpZihNYXRoLmFicyh1KnMtbCpjKT55OSYmcil7dmFyIGQ9bi1vLHA9aS1hLGY9cypzK2wqbCxtPWQqZCtwKnAsZz1NYXRoLnNxcnQoZiksXz1NYXRoLnNxcnQoaCkseT1yKk1hdGgudGFuKChnOS1NYXRoLmFjb3MoKGYraC1tKS8oMipnKl8pKSkvMiksdj15L18sYj15L2c7TWF0aC5hYnModi0xKT55OSYmKHRoaXMuXys9IkwiKyh0K3YqYykrIiwiKyhlK3YqdSkpLHRoaXMuXys9IkEiK3IrIiwiK3IrIiwwLDAsIisgKyh1KmQ+YypwKSsiLCIrKHRoaXMuX3gxPXQrYipzKSsiLCIrKHRoaXMuX3kxPWUrYipsKX1lbHNlIHRoaXMuXys9IkwiKyh0aGlzLl94MT10KSsiLCIrKHRoaXMuX3kxPWUpfSxhcmM6ZnVuY3Rpb24odCxlLG4saSxyLG8pe3Q9K3QsZT0rZSxvPSEhbzt2YXIgYT0obj0rbikqTWF0aC5jb3MoaSkscz1uKk1hdGguc2luKGkpLGw9dCthLGM9ZStzLHU9MV5vLGg9bz9pLXI6ci1pO2lmKG48MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIituKTtudWxsPT09dGhpcy5feDE/dGhpcy5fKz0iTSIrbCsiLCIrYzooTWF0aC5hYnModGhpcy5feDEtbCk+eTl8fE1hdGguYWJzKHRoaXMuX3kxLWMpPnk5KSYmKHRoaXMuXys9IkwiK2wrIiwiK2MpLG4mJihoPDAmJihoPWglXzkrXzkpLGg+djk/dGhpcy5fKz0iQSIrbisiLCIrbisiLDAsMSwiK3UrIiwiKyh0LWEpKyIsIisoZS1zKSsiQSIrbisiLCIrbisiLDAsMSwiK3UrIiwiKyh0aGlzLl94MT1sKSsiLCIrKHRoaXMuX3kxPWMpOmg+eTkmJih0aGlzLl8rPSJBIituKyIsIituKyIsMCwiKyArKGg+PWc5KSsiLCIrdSsiLCIrKHRoaXMuX3gxPXQrbipNYXRoLmNvcyhyKSkrIiwiKyh0aGlzLl95MT1lK24qTWF0aC5zaW4ocikpKSl9LHJlY3Q6ZnVuY3Rpb24odCxlLG4saSl7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPStlKSsiaCIrICtuKyJ2IisgK2krImgiKy1uKyJaIn0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ffX07dmFyIFM5PU1hdGguYWJzLE05PU1hdGguYXRhbjIsRTk9TWF0aC5jb3MsVDk9TWF0aC5tYXgsQzk9TWF0aC5taW4sQTk9TWF0aC5zaW4sazk9TWF0aC5zcXJ0LEw5PTFlLTEyLFA5PU1hdGguUEksTjk9UDkvMixJOT0yKlA5O2Z1bmN0aW9uIE85KHQpe3JldHVybiB0PjE/MDp0PC0xP1A5Ok1hdGguYWNvcyh0KX1mdW5jdGlvbiBSOSh0KXtyZXR1cm4gdD49MT9OOTp0PD0tMT8tTjk6TWF0aC5hc2luKHQpfWZ1bmN0aW9uIHo5KHQpe3JldHVybiB0LmlubmVyUmFkaXVzfWZ1bmN0aW9uIEQ5KHQpe3JldHVybiB0Lm91dGVyUmFkaXVzfWZ1bmN0aW9uIEI5KHQpe3JldHVybiB0LnN0YXJ0QW5nbGV9ZnVuY3Rpb24gSDkodCl7cmV0dXJuIHQuZW5kQW5nbGV9ZnVuY3Rpb24gRjkodCl7cmV0dXJuIHQmJnQucGFkQW5nbGV9ZnVuY3Rpb24gVjkodCxlLG4saSxyLG8sYSxzKXt2YXIgbD1uLXQsYz1pLWUsdT1hLXIsaD1zLW8sZD0odSooZS1vKS1oKih0LXIpKS8oaCpsLXUqYyk7cmV0dXJuW3QrZCpsLGUrZCpjXX1mdW5jdGlvbiBVOSh0LGUsbixpLHIsbyxhKXt2YXIgcz10LW4sbD1lLWksYz0oYT9vOi1vKS9rOShzKnMrbCpsKSx1PWMqbCxoPS1jKnMsZD10K3UscD1lK2gsZj1uK3UsbT1pK2gsZz0oZCtmKS8yLF89KHArbSkvMix5PWYtZCx2PW0tcCxiPXkqeSt2KnYseD1yLW8sdz1kKm0tZipwLFM9KHY8MD8tMToxKSprOShUOSgwLHgqeCpiLXcqdykpLE09KHcqdi15KlMpL2IsRT0oLXcqeS12KlMpL2IsVD0odyp2K3kqUykvYixDPSgtdyp5K3YqUykvYixBPU0tZyxrPUUtXyxMPVQtZyxQPUMtXztyZXR1cm4gQSpBK2sqaz5MKkwrUCpQJiYoTT1ULEU9Qykse2N4Ok0sY3k6RSx4MDE6LXUseTAxOi1oLHgxMTpNKihyL3gtMSkseTExOkUqKHIveC0xKX19ZnVuY3Rpb24gajkodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIEc5KHQpe3JldHVybiBuZXcgajkodCl9ZnVuY3Rpb24gVzkodCl7cmV0dXJuIHRbMF19ZnVuY3Rpb24gcTkodCl7cmV0dXJuIHRbMV19ZnVuY3Rpb24gWTkoKXt2YXIgdD1XOSxlPXE5LG49dzkoITApLGk9bnVsbCxyPUc5LG89bnVsbDtmdW5jdGlvbiBhKGEpe3ZhciBzLGwsYyx1PWEubGVuZ3RoLGg9ITE7Zm9yKG51bGw9PWkmJihvPXIoYz14OSgpKSkscz0wO3M8PXU7KytzKSEoczx1JiZuKGw9YVtzXSxzLGEpKT09PWgmJigoaD0haCk/by5saW5lU3RhcnQoKTpvLmxpbmVFbmQoKSksaCYmby5wb2ludCgrdChsLHMsYSksK2UobCxzLGEpKTtpZihjKXJldHVybiBvPW51bGwsYysiInx8bnVsbH1yZXR1cm4gYS54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6dzkoK2UpLGEpOnR9LGEueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90Onc5KCt0KSxhKTplfSxhLmRlZmluZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp3OSghIXQpLGEpOm59LGEuY3VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxudWxsIT1pJiYobz1yKGkpKSxhKTpyfSxhLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/aT1vPW51bGw6bz1yKGk9dCksYSk6aX0sYX1mdW5jdGlvbiBYOSgpe3ZhciB0PVc5LGU9bnVsbCxuPXc5KDApLGk9cTkscj13OSghMCksbz1udWxsLGE9Rzkscz1udWxsO2Z1bmN0aW9uIGwobCl7dmFyIGMsdSxoLGQscCxmPWwubGVuZ3RoLG09ITEsZz1uZXcgQXJyYXkoZiksXz1uZXcgQXJyYXkoZik7Zm9yKG51bGw9PW8mJihzPWEocD14OSgpKSksYz0wO2M8PWY7KytjKXtpZighKGM8ZiYmcihkPWxbY10sYyxsKSk9PT1tKWlmKG09IW0pdT1jLHMuYXJlYVN0YXJ0KCkscy5saW5lU3RhcnQoKTtlbHNle2ZvcihzLmxpbmVFbmQoKSxzLmxpbmVTdGFydCgpLGg9Yy0xO2g+PXU7LS1oKXMucG9pbnQoZ1toXSxfW2hdKTtzLmxpbmVFbmQoKSxzLmFyZWFFbmQoKX1tJiYoZ1tjXT0rdChkLGMsbCksX1tjXT0rbihkLGMsbCkscy5wb2ludChlPytlKGQsYyxsKTpnW2NdLGk/K2koZCxjLGwpOl9bY10pKX1pZihwKXJldHVybiBzPW51bGwscCsiInx8bnVsbH1mdW5jdGlvbiBjKCl7cmV0dXJuIFk5KCkuZGVmaW5lZChyKS5jdXJ2ZShhKS5jb250ZXh0KG8pfXJldHVybiBsLng9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjp3OSgrbiksZT1udWxsLGwpOnR9LGwueDA9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTp3OSgrZSksbCk6dH0sbC54MT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1udWxsPT10P251bGw6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp3OSgrdCksbCk6ZX0sbC55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6dzkoK3QpLGk9bnVsbCxsKTpufSxsLnkwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6dzkoK3QpLGwpOm59LGwueTE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9bnVsbD09dD9udWxsOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6dzkoK3QpLGwpOml9LGwubGluZVgwPWwubGluZVkwPWZ1bmN0aW9uKCl7cmV0dXJuIGMoKS54KHQpLnkobil9LGwubGluZVkxPWZ1bmN0aW9uKCl7cmV0dXJuIGMoKS54KHQpLnkoaSl9LGwubGluZVgxPWZ1bmN0aW9uKCl7cmV0dXJuIGMoKS54KGUpLnkobil9LGwuZGVmaW5lZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90Onc5KCEhdCksbCk6cn0sbC5jdXJ2ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10LG51bGwhPW8mJihzPWEobykpLGwpOmF9LGwuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09dD9vPXM9bnVsbDpzPWEobz10KSxsKTpvfSxsfWZ1bmN0aW9uICQ5KHQsZSl7cmV0dXJuIGU8dD8tMTplPnQ/MTplPj10PzA6TmFOfWZ1bmN0aW9uIEs5KHQpe3JldHVybiB0fWo5LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDp0aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpfX19O3ZhciBaOT1ROShHOSk7ZnVuY3Rpb24gSjkodCl7dGhpcy5fY3VydmU9dH1mdW5jdGlvbiBROSh0KXtmdW5jdGlvbiBlKGUpe3JldHVybiBuZXcgSjkodChlKSl9cmV0dXJuIGUuX2N1cnZlPXQsZX1mdW5jdGlvbiB0OCh0KXt2YXIgZT10LmN1cnZlO3JldHVybiB0LmFuZ2xlPXQueCxkZWxldGUgdC54LHQucmFkaXVzPXQueSxkZWxldGUgdC55LHQuY3VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZShROSh0KSk6ZSgpLl9jdXJ2ZX0sdH1mdW5jdGlvbiBlOCgpe3JldHVybiB0OChZOSgpLmN1cnZlKFo5KSl9ZnVuY3Rpb24gbjgoKXt2YXIgdD1YOSgpLmN1cnZlKFo5KSxlPXQuY3VydmUsbj10LmxpbmVYMCxpPXQubGluZVgxLHI9dC5saW5lWTAsbz10LmxpbmVZMTtyZXR1cm4gdC5hbmdsZT10LngsZGVsZXRlIHQueCx0LnN0YXJ0QW5nbGU9dC54MCxkZWxldGUgdC54MCx0LmVuZEFuZ2xlPXQueDEsZGVsZXRlIHQueDEsdC5yYWRpdXM9dC55LGRlbGV0ZSB0LnksdC5pbm5lclJhZGl1cz10LnkwLGRlbGV0ZSB0LnkwLHQub3V0ZXJSYWRpdXM9dC55MSxkZWxldGUgdC55MSx0LmxpbmVTdGFydEFuZ2xlPWZ1bmN0aW9uKCl7cmV0dXJuIHQ4KG4oKSl9LGRlbGV0ZSB0LmxpbmVYMCx0LmxpbmVFbmRBbmdsZT1mdW5jdGlvbigpe3JldHVybiB0OChpKCkpfSxkZWxldGUgdC5saW5lWDEsdC5saW5lSW5uZXJSYWRpdXM9ZnVuY3Rpb24oKXtyZXR1cm4gdDgocigpKX0sZGVsZXRlIHQubGluZVkwLHQubGluZU91dGVyUmFkaXVzPWZ1bmN0aW9uKCl7cmV0dXJuIHQ4KG8oKSl9LGRlbGV0ZSB0LmxpbmVZMSx0LmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2UoUTkodCkpOmUoKS5fY3VydmV9LHR9ZnVuY3Rpb24gaTgodCxlKXtyZXR1cm5bKGU9K2UpKk1hdGguY29zKHQtPU1hdGguUEkvMiksZSpNYXRoLnNpbih0KV19SjkucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5hcmVhU3RhcnQoKX0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmFyZWFFbmQoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5saW5lRW5kKCl9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy5fY3VydmUucG9pbnQoZSpNYXRoLnNpbih0KSxlKi1NYXRoLmNvcyh0KSl9fTt2YXIgcjg9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIG84KHQpe3JldHVybiB0LnNvdXJjZX1mdW5jdGlvbiBhOCh0KXtyZXR1cm4gdC50YXJnZXR9ZnVuY3Rpb24gczgodCl7dmFyIGU9bzgsbj1hOCxpPVc5LHI9cTksbz1udWxsO2Z1bmN0aW9uIGEoKXt2YXIgYSxzPXI4LmNhbGwoYXJndW1lbnRzKSxsPWUuYXBwbHkodGhpcyxzKSxjPW4uYXBwbHkodGhpcyxzKTtpZihvfHwobz1hPXg5KCkpLHQobywraS5hcHBseSh0aGlzLChzWzBdPWwscykpLCtyLmFwcGx5KHRoaXMscyksK2kuYXBwbHkodGhpcywoc1swXT1jLHMpKSwrci5hcHBseSh0aGlzLHMpKSxhKXJldHVybiBvPW51bGwsYSsiInx8bnVsbH1yZXR1cm4gYS5zb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxhKTplfSxhLnRhcmdldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LGEpOm59LGEueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90Onc5KCt0KSxhKTppfSxhLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp3OSgrdCksYSk6cn0sYS5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPW51bGw9PXQ/bnVsbDp0LGEpOm99LGF9ZnVuY3Rpb24gbDgodCxlLG4saSxyKXt0Lm1vdmVUbyhlLG4pLHQuYmV6aWVyQ3VydmVUbyhlPShlK2kpLzIsbixlLHIsaSxyKX1mdW5jdGlvbiBjOCh0LGUsbixpLHIpe3QubW92ZVRvKGUsbiksdC5iZXppZXJDdXJ2ZVRvKGUsbj0obityKS8yLGksbixpLHIpfWZ1bmN0aW9uIHU4KHQsZSxuLGkscil7dmFyIG89aTgoZSxuKSxhPWk4KGUsbj0obityKS8yKSxzPWk4KGksbiksbD1pOChpLHIpO3QubW92ZVRvKG9bMF0sb1sxXSksdC5iZXppZXJDdXJ2ZVRvKGFbMF0sYVsxXSxzWzBdLHNbMV0sbFswXSxsWzFdKX12YXIgaDg9e2RyYXc6ZnVuY3Rpb24odCxlKXt2YXIgbj1NYXRoLnNxcnQoZS9QOSk7dC5tb3ZlVG8obiwwKSx0LmFyYygwLDAsbiwwLEk5KX19LGQ4PXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIG49TWF0aC5zcXJ0KGUvNSkvMjt0Lm1vdmVUbygtMypuLC1uKSx0LmxpbmVUbygtbiwtbiksdC5saW5lVG8oLW4sLTMqbiksdC5saW5lVG8obiwtMypuKSx0LmxpbmVUbyhuLC1uKSx0LmxpbmVUbygzKm4sLW4pLHQubGluZVRvKDMqbixuKSx0LmxpbmVUbyhuLG4pLHQubGluZVRvKG4sMypuKSx0LmxpbmVUbygtbiwzKm4pLHQubGluZVRvKC1uLG4pLHQubGluZVRvKC0zKm4sbiksdC5jbG9zZVBhdGgoKX19LHA4PU1hdGguc3FydCgxLzMpLGY4PTIqcDgsbTg9e2RyYXc6ZnVuY3Rpb24odCxlKXt2YXIgbj1NYXRoLnNxcnQoZS9mOCksaT1uKnA4O3QubW92ZVRvKDAsLW4pLHQubGluZVRvKGksMCksdC5saW5lVG8oMCxuKSx0LmxpbmVUbygtaSwwKSx0LmNsb3NlUGF0aCgpfX0sZzg9TWF0aC5zaW4oUDkvMTApL01hdGguc2luKDcqUDkvMTApLF84PU1hdGguc2luKEk5LzEwKSpnOCx5OD0tTWF0aC5jb3MoSTkvMTApKmc4LHY4PXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIG49TWF0aC5zcXJ0KC44OTA4MTMwOTE1MjkyODUyKmUpLGk9XzgqbixyPXk4Km47dC5tb3ZlVG8oMCwtbiksdC5saW5lVG8oaSxyKTtmb3IodmFyIG89MTtvPDU7KytvKXt2YXIgYT1JOSpvLzUscz1NYXRoLmNvcyhhKSxsPU1hdGguc2luKGEpO3QubGluZVRvKGwqbiwtcypuKSx0LmxpbmVUbyhzKmktbCpyLGwqaStzKnIpfXQuY2xvc2VQYXRoKCl9fSxiOD17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciBuPU1hdGguc3FydChlKSxpPS1uLzI7dC5yZWN0KGksaSxuLG4pfX0seDg9TWF0aC5zcXJ0KDMpLHc4PXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIG49LU1hdGguc3FydChlLygzKng4KSk7dC5tb3ZlVG8oMCwyKm4pLHQubGluZVRvKC14OCpuLC1uKSx0LmxpbmVUbyh4OCpuLC1uKSx0LmNsb3NlUGF0aCgpfX0sUzg9LS41LE04PU1hdGguc3FydCgzKS8yLEU4PTEvTWF0aC5zcXJ0KDEyKSxUOD0zKihFOC8yKzEpLEM4PXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIG49TWF0aC5zcXJ0KGUvVDgpLGk9bi8yLHI9bipFOCxvPWksYT1uKkU4K24scz0tbyxsPWE7dC5tb3ZlVG8oaSxyKSx0LmxpbmVUbyhvLGEpLHQubGluZVRvKHMsbCksdC5saW5lVG8oUzgqaS1NOCpyLE04KmkrUzgqciksdC5saW5lVG8oUzgqby1NOCphLE04Km8rUzgqYSksdC5saW5lVG8oUzgqcy1NOCpsLE04KnMrUzgqbCksdC5saW5lVG8oUzgqaStNOCpyLFM4KnItTTgqaSksdC5saW5lVG8oUzgqbytNOCphLFM4KmEtTTgqbyksdC5saW5lVG8oUzgqcytNOCpsLFM4KmwtTTgqcyksdC5jbG9zZVBhdGgoKX19LEE4PVtoOCxkOCxtOCxiOCx2OCx3OCxDOF07ZnVuY3Rpb24gazgoKXt9ZnVuY3Rpb24gTDgodCxlLG4pe3QuX2NvbnRleHQuYmV6aWVyQ3VydmVUbygoMip0Ll94MCt0Ll94MSkvMywoMip0Ll95MCt0Ll95MSkvMywodC5feDArMip0Ll94MSkvMywodC5feTArMip0Ll95MSkvMywodC5feDArNCp0Ll94MStlKS82LCh0Ll95MCs0KnQuX3kxK24pLzYpfWZ1bmN0aW9uIFA4KHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBOOCh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gSTgodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIE84KHQsZSl7dGhpcy5fYmFzaXM9bmV3IFA4KHQpLHRoaXMuX2JldGE9ZX1QOC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAzOkw4KHRoaXMsdGhpcy5feDEsdGhpcy5feTEpO2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSl9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2NvbnRleHQubGluZVRvKCg1KnRoaXMuX3gwK3RoaXMuX3gxKS82LCg1KnRoaXMuX3kwK3RoaXMuX3kxKS82KTtkZWZhdWx0Okw4KHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWV9fSxOOC5wcm90b3R5cGU9e2FyZWFTdGFydDprOCxhcmVhRW5kOms4LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAyOnRoaXMuX2NvbnRleHQubW92ZVRvKCh0aGlzLl94MisyKnRoaXMuX3gzKS8zLCh0aGlzLl95MisyKnRoaXMuX3kzKS8zKSx0aGlzLl9jb250ZXh0LmxpbmVUbygodGhpcy5feDMrMip0aGlzLl94MikvMywodGhpcy5feTMrMip0aGlzLl95MikvMyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Mix0aGlzLl95MiksdGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCl9fSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gyPXQsdGhpcy5feTI9ZTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl94Mz10LHRoaXMuX3kzPWU7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDQ9dCx0aGlzLl95ND1lLHRoaXMuX2NvbnRleHQubW92ZVRvKCh0aGlzLl94MCs0KnRoaXMuX3gxK3QpLzYsKHRoaXMuX3kwKzQqdGhpcy5feTErZSkvNik7YnJlYWs7ZGVmYXVsdDpMOCh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1lfX0sSTgucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjM9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7dmFyIG49KHRoaXMuX3gwKzQqdGhpcy5feDErdCkvNixpPSh0aGlzLl95MCs0KnRoaXMuX3kxK2UpLzY7dGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhuLGkpOnRoaXMuX2NvbnRleHQubW92ZVRvKG4saSk7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpMOCh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1lfX0sTzgucHJvdG90eXBlPXtsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PVtdLHRoaXMuX3k9W10sdGhpcy5fYmFzaXMubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl94LGU9dGhpcy5feSxuPXQubGVuZ3RoLTE7aWYobj4wKWZvcih2YXIgaSxyPXRbMF0sbz1lWzBdLGE9dFtuXS1yLHM9ZVtuXS1vLGw9LTE7KytsPD1uOyl0aGlzLl9iYXNpcy5wb2ludCh0aGlzLl9iZXRhKnRbbF0rKDEtdGhpcy5fYmV0YSkqKHIrKGk9bC9uKSphKSx0aGlzLl9iZXRhKmVbbF0rKDEtdGhpcy5fYmV0YSkqKG8raSpzKSk7dGhpcy5feD10aGlzLl95PW51bGwsdGhpcy5fYmFzaXMubGluZUVuZCgpfSxwb2ludDpmdW5jdGlvbih0LGUpe3RoaXMuX3gucHVzaCgrdCksdGhpcy5feS5wdXNoKCtlKX19O3ZhciBSOD0oZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiAxPT09ZT9uZXcgUDgodCk6bmV3IE84KHQsZSl9cmV0dXJuIG4uYmV0YT1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LG59KSguODUpO2Z1bmN0aW9uIHo4KHQsZSxuKXt0Ll9jb250ZXh0LmJlemllckN1cnZlVG8odC5feDErdC5fayoodC5feDItdC5feDApLHQuX3kxK3QuX2sqKHQuX3kyLXQuX3kwKSx0Ll94Mit0Ll9rKih0Ll94MS1lKSx0Ll95Mit0Ll9rKih0Ll95MS1uKSx0Ll94Mix0Ll95Mil9ZnVuY3Rpb24gRDgodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1lKS82fUQ4LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp6OCh0aGlzLHRoaXMuX3gxLHRoaXMuX3kxKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5feDE9dCx0aGlzLl95MT1lO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO2RlZmF1bHQ6ejgodGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19O3ZhciBCOD0oZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBuZXcgRDgodCxlKX1yZXR1cm4gbi50ZW5zaW9uPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0pKDApO2Z1bmN0aW9uIEg4KHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2s9KDEtZSkvNn1IOC5wcm90b3R5cGU9e2FyZWFTdGFydDprOCxhcmVhRW5kOms4LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KX19LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDM9dCx0aGlzLl95Mz1lO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3g0PXQsdGhpcy5feTQ9ZSk7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDU9dCx0aGlzLl95NT1lO2JyZWFrO2RlZmF1bHQ6ejgodGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19O3ZhciBGOD0oZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBuZXcgSDgodCxlKX1yZXR1cm4gbi50ZW5zaW9uPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0pKDApO2Z1bmN0aW9uIFY4KHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2s9KDEtZSkvNn1WOC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMz09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDp6OCh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07dmFyIFU4PShmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIG5ldyBWOCh0LGUpfXJldHVybiBuLnRlbnNpb249ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSkoMCk7ZnVuY3Rpb24gajgodCxlLG4pe3ZhciBpPXQuX3gxLHI9dC5feTEsbz10Ll94MixhPXQuX3kyO2lmKHQuX2wwMV9hPkw5KXt2YXIgcz0yKnQuX2wwMV8yYSszKnQuX2wwMV9hKnQuX2wxMl9hK3QuX2wxMl8yYSxsPTMqdC5fbDAxX2EqKHQuX2wwMV9hK3QuX2wxMl9hKTtpPShpKnMtdC5feDAqdC5fbDEyXzJhK3QuX3gyKnQuX2wwMV8yYSkvbCxyPShyKnMtdC5feTAqdC5fbDEyXzJhK3QuX3kyKnQuX2wwMV8yYSkvbH1pZih0Ll9sMjNfYT5MOSl7dmFyIGM9Mip0Ll9sMjNfMmErMyp0Ll9sMjNfYSp0Ll9sMTJfYSt0Ll9sMTJfMmEsdT0zKnQuX2wyM19hKih0Ll9sMjNfYSt0Ll9sMTJfYSk7bz0obypjK3QuX3gxKnQuX2wyM18yYS1lKnQuX2wxMl8yYSkvdSxhPShhKmMrdC5feTEqdC5fbDIzXzJhLW4qdC5fbDEyXzJhKS91fXQuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhpLHIsbyxhLHQuX3gyLHQuX3kyKX1mdW5jdGlvbiBHOCh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9hbHBoYT1lfUc4LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gyLHRoaXMuX3kyKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7aWYodD0rdCxlPStlLHRoaXMuX3BvaW50KXt2YXIgbj10aGlzLl94Mi10LGk9dGhpcy5feTItZTt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KG4qbitpKmksdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO2RlZmF1bHQ6ajgodGhpcyx0LGUpfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIgVzg9KGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gZT9uZXcgRzgodCxlKTpuZXcgRDgodCwwKX1yZXR1cm4gbi5hbHBoYT1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LG59KSguNSk7ZnVuY3Rpb24gcTgodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fYWxwaGE9ZX1xOC5wcm90b3R5cGU9e2FyZWFTdGFydDprOCxhcmVhRW5kOms4LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KX19LHBvaW50OmZ1bmN0aW9uKHQsZSl7aWYodD0rdCxlPStlLHRoaXMuX3BvaW50KXt2YXIgbj10aGlzLl94Mi10LGk9dGhpcy5feTItZTt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KG4qbitpKmksdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gzPXQsdGhpcy5feTM9ZTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94ND10LHRoaXMuX3k0PWUpO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g1PXQsdGhpcy5feTU9ZTticmVhaztkZWZhdWx0Omo4KHRoaXMsdCxlKX10aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07dmFyIFk4PShmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIGU/bmV3IHE4KHQsZSk6bmV3IEg4KHQsMCl9cmV0dXJuIG4uYWxwaGE9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSkoLjUpO2Z1bmN0aW9uIFg4KHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2FscGhhPWV9WDgucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjM9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7aWYodD0rdCxlPStlLHRoaXMuX3BvaW50KXt2YXIgbj10aGlzLl94Mi10LGk9dGhpcy5feTItZTt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KG4qbitpKmksdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0Omo4KHRoaXMsdCxlKX10aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07dmFyICQ4PShmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIGU/bmV3IFg4KHQsZSk6bmV3IFY4KHQsMCl9cmV0dXJuIG4uYWxwaGE9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSkoLjUpO2Z1bmN0aW9uIEs4KHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBaOCh0KXtyZXR1cm4gdDwwPy0xOjF9ZnVuY3Rpb24gSjgodCxlLG4pe3ZhciBpPXQuX3gxLXQuX3gwLHI9ZS10Ll94MSxvPSh0Ll95MS10Ll95MCkvKGl8fHI8MCYmLTApLGE9KG4tdC5feTEpLyhyfHxpPDAmJi0wKSxzPShvKnIrYSppKS8oaStyKTtyZXR1cm4oWjgobykrWjgoYSkpKk1hdGgubWluKE1hdGguYWJzKG8pLE1hdGguYWJzKGEpLC41Kk1hdGguYWJzKHMpKXx8MH1mdW5jdGlvbiBROCh0LGUpe3ZhciBuPXQuX3gxLXQuX3gwO3JldHVybiBuPygzKih0Ll95MS10Ll95MCkvbi1lKS8yOmV9ZnVuY3Rpb24gdDcodCxlLG4pe3ZhciBpPXQuX3gwLHI9dC5feDEsbz10Ll95MSxhPShyLWkpLzM7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKGkrYSx0Ll95MCthKmUsci1hLG8tYSpuLHIsbyl9ZnVuY3Rpb24gZTcodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIG43KHQpe3RoaXMuX2NvbnRleHQ9bmV3IGk3KHQpfWZ1bmN0aW9uIGk3KHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiByNyh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gbzcodCl7dmFyIGUsbixpPXQubGVuZ3RoLTEscj1uZXcgQXJyYXkoaSksbz1uZXcgQXJyYXkoaSksYT1uZXcgQXJyYXkoaSk7Zm9yKHJbMF09MCxvWzBdPTIsYVswXT10WzBdKzIqdFsxXSxlPTE7ZTxpLTE7KytlKXJbZV09MSxvW2VdPTQsYVtlXT00KnRbZV0rMip0W2UrMV07Zm9yKHJbaS0xXT0yLG9baS0xXT03LGFbaS0xXT04KnRbaS0xXSt0W2ldLGU9MTtlPGk7KytlKW9bZV0tPW49cltlXS9vW2UtMV0sYVtlXS09biphW2UtMV07Zm9yKHJbaS0xXT1hW2ktMV0vb1tpLTFdLGU9aS0yO2U+PTA7LS1lKXJbZV09KGFbZV0tcltlKzFdKS9vW2VdO2ZvcihvW2ktMV09KHRbaV0rcltpLTFdKS8yLGU9MDtlPGktMTsrK2Upb1tlXT0yKnRbZSsxXS1yW2UrMV07cmV0dXJuW3Isb119ZnVuY3Rpb24gYTcodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fdD1lfWZ1bmN0aW9uIHM3KHQsZSl7aWYoKHI9dC5sZW5ndGgpPjEpZm9yKHZhciBuLGkscixvPTEsYT10W2VbMF1dLHM9YS5sZW5ndGg7bzxyOysrbylmb3IoaT1hLGE9dFtlW29dXSxuPTA7bjxzOysrbilhW25dWzFdKz1hW25dWzBdPWlzTmFOKGlbbl1bMV0pP2lbbl1bMF06aVtuXVsxXX1mdW5jdGlvbiBsNyh0KXtmb3IodmFyIGU9dC5sZW5ndGgsbj1uZXcgQXJyYXkoZSk7LS1lPj0wOyluW2VdPWU7cmV0dXJuIG59ZnVuY3Rpb24gYzcodCxlKXtyZXR1cm4gdFtlXX1mdW5jdGlvbiB1Nyh0KXt2YXIgZT10Lm1hcChoNyk7cmV0dXJuIGw3KHQpLnNvcnQoKGZ1bmN0aW9uKHQsbil7cmV0dXJuIGVbdF0tZVtuXX0pKX1mdW5jdGlvbiBoNyh0KXtmb3IodmFyIGUsbj0wLGk9LTEscj10Lmxlbmd0aDsrK2k8cjspKGU9K3RbaV1bMV0pJiYobis9ZSk7cmV0dXJuIG59SzgucHJvdG90eXBlPXthcmVhU3RhcnQ6azgsYXJlYUVuZDprOCxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCl9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dD0rdCxlPStlLHRoaXMuX3BvaW50P3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6KHRoaXMuX3BvaW50PTEsdGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKSl9fSxlNy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT10aGlzLl90MD1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLHRoaXMuX3kxKTticmVhaztjYXNlIDM6dDcodGhpcyx0aGlzLl90MCxROCh0aGlzLHRoaXMuX3QwKSl9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3ZhciBuPU5hTjtpZihlPStlLCh0PSt0KSE9PXRoaXMuX3gxfHxlIT09dGhpcy5feTEpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdDcodGhpcyxROCh0aGlzLG49SjgodGhpcyx0LGUpKSxuKTticmVhaztkZWZhdWx0OnQ3KHRoaXMsdGhpcy5fdDAsbj1KOCh0aGlzLHQsZSkpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9ZSx0aGlzLl90MD1ufX19LChuNy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlNy5wcm90b3R5cGUpKS5wb2ludD1mdW5jdGlvbih0LGUpe2U3LnByb3RvdHlwZS5wb2ludC5jYWxsKHRoaXMsZSx0KX0saTcucHJvdG90eXBlPXttb3ZlVG86ZnVuY3Rpb24odCxlKXt0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpfSxjbG9zZVBhdGg6ZnVuY3Rpb24oKXt0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpfSxsaW5lVG86ZnVuY3Rpb24odCxlKXt0aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKHQsZSxuLGkscixvKXt0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8oZSx0LGksbixvLHIpfX0scjcucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feD1bXSx0aGlzLl95PVtdfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5feCxlPXRoaXMuX3ksbj10Lmxlbmd0aDtpZihuKWlmKHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odFswXSxlWzBdKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0WzBdLGVbMF0pLDI9PT1uKXRoaXMuX2NvbnRleHQubGluZVRvKHRbMV0sZVsxXSk7ZWxzZSBmb3IodmFyIGk9bzcodCkscj1vNyhlKSxvPTAsYT0xO2E8bjsrK28sKythKXRoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhpWzBdW29dLHJbMF1bb10saVsxXVtvXSxyWzFdW29dLHRbYV0sZVthXSk7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09bikmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmUsdGhpcy5feD10aGlzLl95PW51bGx9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy5feC5wdXNoKCt0KSx0aGlzLl95LnB1c2goK2UpfX0sYTcucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feD10aGlzLl95PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7MDx0aGlzLl90JiZ0aGlzLl90PDEmJjI9PT10aGlzLl9wb2ludCYmdGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feCx0aGlzLl95KSwodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT49MCYmKHRoaXMuX3Q9MS10aGlzLl90LHRoaXMuX2xpbmU9MS10aGlzLl9saW5lKX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjtkZWZhdWx0OmlmKHRoaXMuX3Q8PTApdGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feCxlKSx0aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpO2Vsc2V7dmFyIG49dGhpcy5feCooMS10aGlzLl90KSt0KnRoaXMuX3Q7dGhpcy5fY29udGV4dC5saW5lVG8obix0aGlzLl95KSx0aGlzLl9jb250ZXh0LmxpbmVUbyhuLGUpfX10aGlzLl94PXQsdGhpcy5feT1lfX07dmFyIGQ3PW5ldyBEYXRlLHA3PW5ldyBEYXRlO2Z1bmN0aW9uIGY3KHQsZSxuLGkpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIHQoZT1uZXcgRGF0ZSgrZSkpLGV9cmV0dXJuIHIuZmxvb3I9cixyLmNlaWw9ZnVuY3Rpb24obil7cmV0dXJuIHQobj1uZXcgRGF0ZShuLTEpKSxlKG4sMSksdChuKSxufSxyLnJvdW5kPWZ1bmN0aW9uKHQpe3ZhciBlPXIodCksbj1yLmNlaWwodCk7cmV0dXJuIHQtZTxuLXQ/ZTpufSxyLm9mZnNldD1mdW5jdGlvbih0LG4pe3JldHVybiBlKHQ9bmV3IERhdGUoK3QpLG51bGw9PW4/MTpNYXRoLmZsb29yKG4pKSx0fSxyLnJhbmdlPWZ1bmN0aW9uKG4saSxvKXt2YXIgYSxzPVtdO2lmKG49ci5jZWlsKG4pLG89bnVsbD09bz8xOk1hdGguZmxvb3IobyksIShuPGkmJm8+MCkpcmV0dXJuIHM7ZG97cy5wdXNoKGE9bmV3IERhdGUoK24pKSxlKG4sbyksdChuKX13aGlsZShhPG4mJm48aSk7cmV0dXJuIHN9LHIuZmlsdGVyPWZ1bmN0aW9uKG4pe3JldHVybiBmNygoZnVuY3Rpb24oZSl7aWYoZT49ZSlmb3IoO3QoZSksIW4oZSk7KWUuc2V0VGltZShlLTEpfSksKGZ1bmN0aW9uKHQsaSl7aWYodD49dClpZihpPDApZm9yKDsrK2k8PTA7KWZvcig7ZSh0LC0xKSwhbih0KTspO2Vsc2UgZm9yKDstLWk+PTA7KWZvcig7ZSh0LDEpLCFuKHQpOyk7fSkpfSxuJiYoci5jb3VudD1mdW5jdGlvbihlLGkpe3JldHVybiBkNy5zZXRUaW1lKCtlKSxwNy5zZXRUaW1lKCtpKSx0KGQ3KSx0KHA3KSxNYXRoLmZsb29yKG4oZDcscDcpKX0sci5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLmZsb29yKHQpLGlzRmluaXRlKHQpJiZ0PjA/dD4xP3IuZmlsdGVyKGk/ZnVuY3Rpb24oZSl7cmV0dXJuIGkoZSkldD09MH06ZnVuY3Rpb24oZSl7cmV0dXJuIHIuY291bnQoMCxlKSV0PT0wfSk6cjpudWxsfSkscn12YXIgbTc9ZjcoKGZ1bmN0aW9uKCl7fSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0K2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUtdH0pKTttNy5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLmZsb29yKHQpLGlzRmluaXRlKHQpJiZ0PjA/dD4xP2Y3KChmdW5jdGlvbihlKXtlLnNldFRpbWUoTWF0aC5mbG9vcihlL3QpKnQpfSksKGZ1bmN0aW9uKGUsbil7ZS5zZXRUaW1lKCtlK24qdCl9KSwoZnVuY3Rpb24oZSxuKXtyZXR1cm4obi1lKS90fSkpOm03Om51bGx9O3ZhciBnNz1tNy5yYW5nZSxfNz0xZTMseTc9NmU0LHY3PTM2ZTUsYjc9ODY0ZTUseDc9NjA0OGU1LHc3PWY3KChmdW5jdGlvbih0KXt0LnNldFRpbWUoTWF0aC5mbG9vcih0L183KSpfNyl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrZSpfNyl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS9fN30pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENTZWNvbmRzKCl9KSksUzc9dzcucmFuZ2UsTTc9ZjcoKGZ1bmN0aW9uKHQpe3Quc2V0VGltZShNYXRoLmZsb29yKHQveTcpKnk3KX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCtlKnk3KX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQpL3k3fSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1pbnV0ZXMoKX0pKSxFNz1NNy5yYW5nZSxUNz1mNygoZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRUaW1lem9uZU9mZnNldCgpKnk3JXY3O2U8MCYmKGUrPXY3KSx0LnNldFRpbWUoTWF0aC5mbG9vcigoK3QtZSkvdjcpKnY3K2UpfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0K2UqdjcpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvdjd9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0SG91cnMoKX0pKSxDNz1UNy5yYW5nZSxBNz1mNygoZnVuY3Rpb24odCl7dC5zZXRIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0RGF0ZSh0LmdldERhdGUoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQtKGUuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKnk3KS9iN30pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXREYXRlKCktMX0pKSxrNz1BNy5yYW5nZTtmdW5jdGlvbiBMNyh0KXtyZXR1cm4gZjcoKGZ1bmN0aW9uKGUpe2Uuc2V0RGF0ZShlLmdldERhdGUoKS0oZS5nZXREYXkoKSs3LXQpJTcpLGUuc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldERhdGUodC5nZXREYXRlKCkrNyplKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQtKGUuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKnk3KS94N30pKX12YXIgUDc9TDcoMCksTjc9TDcoMSksSTc9TDcoMiksTzc9TDcoMyksUjc9TDcoNCksejc9TDcoNSksRDc9TDcoNiksQjc9UDcucmFuZ2UsSDc9TjcucmFuZ2UsRjc9STcucmFuZ2UsVjc9TzcucmFuZ2UsVTc9UjcucmFuZ2Usajc9ejcucmFuZ2UsRzc9RDcucmFuZ2UsVzc9ZjcoKGZ1bmN0aW9uKHQpe3Quc2V0RGF0ZSgxKSx0LnNldEhvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRNb250aCh0LmdldE1vbnRoKCkrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXRNb250aCgpLXQuZ2V0TW9udGgoKSsxMiooZS5nZXRGdWxsWWVhcigpLXQuZ2V0RnVsbFllYXIoKSl9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0TW9udGgoKX0pKSxxNz1XNy5yYW5nZSxZNz1mNygoZnVuY3Rpb24odCl7dC5zZXRNb250aCgwLDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldEZ1bGxZZWFyKHQuZ2V0RnVsbFllYXIoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldEZ1bGxZZWFyKCktdC5nZXRGdWxsWWVhcigpfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEZ1bGxZZWFyKCl9KSk7WTcuZXZlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIGlzRmluaXRlKHQ9TWF0aC5mbG9vcih0KSkmJnQ+MD9mNygoZnVuY3Rpb24oZSl7ZS5zZXRGdWxsWWVhcihNYXRoLmZsb29yKGUuZ2V0RnVsbFllYXIoKS90KSp0KSxlLnNldE1vbnRoKDAsMSksZS5zZXRIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbihlLG4pe2Uuc2V0RnVsbFllYXIoZS5nZXRGdWxsWWVhcigpK24qdCl9KSk6bnVsbH07dmFyIFg3PVk3LnJhbmdlLCQ3PWY3KChmdW5jdGlvbih0KXt0LnNldFVUQ1NlY29uZHMoMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCtlKnk3KX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQpL3k3fSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ01pbnV0ZXMoKX0pKSxLNz0kNy5yYW5nZSxaNz1mNygoZnVuY3Rpb24odCl7dC5zZXRVVENNaW51dGVzKDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCtlKnY3KX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQpL3Y3fSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0hvdXJzKCl9KSksSjc9WjcucmFuZ2UsUTc9ZjcoKGZ1bmN0aW9uKHQpe3Quc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFVUQ0RhdGUodC5nZXRVVENEYXRlKCkrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS9iN30pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENEYXRlKCktMX0pKSx0dHQ9UTcucmFuZ2U7ZnVuY3Rpb24gZXR0KHQpe3JldHVybiBmNygoZnVuY3Rpb24oZSl7ZS5zZXRVVENEYXRlKGUuZ2V0VVRDRGF0ZSgpLShlLmdldFVUQ0RheSgpKzctdCklNyksZS5zZXRVVENIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKSs3KmUpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkveDd9KSl9dmFyIG50dD1ldHQoMCksaXR0PWV0dCgxKSxydHQ9ZXR0KDIpLG90dD1ldHQoMyksYXR0PWV0dCg0KSxzdHQ9ZXR0KDUpLGx0dD1ldHQoNiksY3R0PW50dC5yYW5nZSx1dHQ9aXR0LnJhbmdlLGh0dD1ydHQucmFuZ2UsZHR0PW90dC5yYW5nZSxwdHQ9YXR0LnJhbmdlLGZ0dD1zdHQucmFuZ2UsbXR0PWx0dC5yYW5nZSxndHQ9ZjcoKGZ1bmN0aW9uKHQpe3Quc2V0VVRDRGF0ZSgxKSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENNb250aCh0LmdldFVUQ01vbnRoKCkrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXRVVENNb250aCgpLXQuZ2V0VVRDTW9udGgoKSsxMiooZS5nZXRVVENGdWxsWWVhcigpLXQuZ2V0VVRDRnVsbFllYXIoKSl9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDTW9udGgoKX0pKSxfdHQ9Z3R0LnJhbmdlLHl0dD1mNygoZnVuY3Rpb24odCl7dC5zZXRVVENNb250aCgwLDEpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFVUQ0Z1bGxZZWFyKHQuZ2V0VVRDRnVsbFllYXIoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldFVUQ0Z1bGxZZWFyKCktdC5nZXRVVENGdWxsWWVhcigpfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0Z1bGxZZWFyKCl9KSk7eXR0LmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiBpc0Zpbml0ZSh0PU1hdGguZmxvb3IodCkpJiZ0PjA/ZjcoKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDRnVsbFllYXIoTWF0aC5mbG9vcihlLmdldFVUQ0Z1bGxZZWFyKCkvdCkqdCksZS5zZXRVVENNb250aCgwLDEpLGUuc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24oZSxuKXtlLnNldFVUQ0Z1bGxZZWFyKGUuZ2V0VVRDRnVsbFllYXIoKStuKnQpfSkpOm51bGx9O3ZhciB2dHQ9eXR0LnJhbmdlLGJ0dD1uZXcgRGF0ZSx4dHQ9bmV3IERhdGU7ZnVuY3Rpb24gd3R0KHQsZSxuLGkpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIHQoZT0wPT09YXJndW1lbnRzLmxlbmd0aD9uZXcgRGF0ZTpuZXcgRGF0ZSgrZSkpLGV9cmV0dXJuIHIuZmxvb3I9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoZT1uZXcgRGF0ZSgrZSkpLGV9LHIuY2VpbD1mdW5jdGlvbihuKXtyZXR1cm4gdChuPW5ldyBEYXRlKG4tMSkpLGUobiwxKSx0KG4pLG59LHIucm91bmQ9ZnVuY3Rpb24odCl7dmFyIGU9cih0KSxuPXIuY2VpbCh0KTtyZXR1cm4gdC1lPG4tdD9lOm59LHIub2Zmc2V0PWZ1bmN0aW9uKHQsbil7cmV0dXJuIGUodD1uZXcgRGF0ZSgrdCksbnVsbD09bj8xOk1hdGguZmxvb3IobikpLHR9LHIucmFuZ2U9ZnVuY3Rpb24obixpLG8pe3ZhciBhLHM9W107aWYobj1yLmNlaWwobiksbz1udWxsPT1vPzE6TWF0aC5mbG9vcihvKSwhKG48aSYmbz4wKSlyZXR1cm4gcztkb3tzLnB1c2goYT1uZXcgRGF0ZSgrbikpLGUobixvKSx0KG4pfXdoaWxlKGE8biYmbjxpKTtyZXR1cm4gc30sci5maWx0ZXI9ZnVuY3Rpb24obil7cmV0dXJuIHd0dCgoZnVuY3Rpb24oZSl7aWYoZT49ZSlmb3IoO3QoZSksIW4oZSk7KWUuc2V0VGltZShlLTEpfSksKGZ1bmN0aW9uKHQsaSl7aWYodD49dClpZihpPDApZm9yKDsrK2k8PTA7KWZvcig7ZSh0LC0xKSwhbih0KTspO2Vsc2UgZm9yKDstLWk+PTA7KWZvcig7ZSh0LDEpLCFuKHQpOyk7fSkpfSxuJiYoci5jb3VudD1mdW5jdGlvbihlLGkpe3JldHVybiBidHQuc2V0VGltZSgrZSkseHR0LnNldFRpbWUoK2kpLHQoYnR0KSx0KHh0dCksTWF0aC5mbG9vcihuKGJ0dCx4dHQpKX0sci5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLmZsb29yKHQpLGlzRmluaXRlKHQpJiZ0PjA/dD4xP3IuZmlsdGVyKGk/ZnVuY3Rpb24oZSl7cmV0dXJuIGkoZSkldD09MH06ZnVuY3Rpb24oZSl7cmV0dXJuIHIuY291bnQoMCxlKSV0PT0wfSk6cjpudWxsfSkscn12YXIgU3R0PTg2NGU1LE10dD02MDQ4ZTUsRXR0PXd0dCgoZnVuY3Rpb24odCl7dC5zZXRIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0RGF0ZSh0LmdldERhdGUoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQtNmU0KihlLmdldFRpbWV6b25lT2Zmc2V0KCktdC5nZXRUaW1lem9uZU9mZnNldCgpKSkvU3R0fSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldERhdGUoKS0xfSkpO2Z1bmN0aW9uIFR0dCh0KXtyZXR1cm4gd3R0KChmdW5jdGlvbihlKXtlLnNldERhdGUoZS5nZXREYXRlKCktKGUuZ2V0RGF5KCkrNy10KSU3KSxlLnNldEhvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpKzcqZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10LTZlNCooZS5nZXRUaW1lem9uZU9mZnNldCgpLXQuZ2V0VGltZXpvbmVPZmZzZXQoKSkpL010dH0pKX12YXIgQ3R0PVR0dCgwKSxBdHQ9VHR0KDEpO1R0dCgyKSxUdHQoMyk7dmFyIGt0dD1UdHQoNCk7VHR0KDUpLFR0dCg2KTt2YXIgTHR0PXd0dCgoZnVuY3Rpb24odCl7dC5zZXRNb250aCgwLDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldEZ1bGxZZWFyKHQuZ2V0RnVsbFllYXIoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldEZ1bGxZZWFyKCktdC5nZXRGdWxsWWVhcigpfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEZ1bGxZZWFyKCl9KSk7THR0LmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiBpc0Zpbml0ZSh0PU1hdGguZmxvb3IodCkpJiZ0PjA/d3R0KChmdW5jdGlvbihlKXtlLnNldEZ1bGxZZWFyKE1hdGguZmxvb3IoZS5nZXRGdWxsWWVhcigpL3QpKnQpLGUuc2V0TW9udGgoMCwxKSxlLnNldEhvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKGUsbil7ZS5zZXRGdWxsWWVhcihlLmdldEZ1bGxZZWFyKCkrbip0KX0pKTpudWxsfTt2YXIgUHR0PXd0dCgoZnVuY3Rpb24odCl7dC5zZXRVVENIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQpL1N0dH0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENEYXRlKCktMX0pKTtmdW5jdGlvbiBOdHQodCl7cmV0dXJuIHd0dCgoZnVuY3Rpb24oZSl7ZS5zZXRVVENEYXRlKGUuZ2V0VVRDRGF0ZSgpLShlLmdldFVUQ0RheSgpKzctdCklNyksZS5zZXRVVENIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKSs3KmUpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvTXR0fSkpfXZhciBJdHQ9TnR0KDApLE90dD1OdHQoMSk7TnR0KDIpLE50dCgzKTt2YXIgUnR0PU50dCg0KTtOdHQoNSksTnR0KDYpO3ZhciB6dHQ9d3R0KChmdW5jdGlvbih0KXt0LnNldFVUQ01vbnRoKDAsMSksdC5zZXRVVENIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VVRDRnVsbFllYXIodC5nZXRVVENGdWxsWWVhcigpK2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZ2V0VVRDRnVsbFllYXIoKS10LmdldFVUQ0Z1bGxZZWFyKCl9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDRnVsbFllYXIoKX0pKTtmdW5jdGlvbiBEdHQodCl7aWYoMDw9dC55JiZ0Lnk8MTAwKXt2YXIgZT1uZXcgRGF0ZSgtMSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCk7cmV0dXJuIGUuc2V0RnVsbFllYXIodC55KSxlfXJldHVybiBuZXcgRGF0ZSh0LnksdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpfWZ1bmN0aW9uIEJ0dCh0KXtpZigwPD10LnkmJnQueTwxMDApe3ZhciBlPW5ldyBEYXRlKERhdGUuVVRDKC0xLHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKSk7cmV0dXJuIGUuc2V0VVRDRnVsbFllYXIodC55KSxlfXJldHVybiBuZXcgRGF0ZShEYXRlLlVUQyh0LnksdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpKX1mdW5jdGlvbiBIdHQodCl7cmV0dXJue3k6dCxtOjAsZDoxLEg6MCxNOjAsUzowLEw6MH19ZnVuY3Rpb24gRnR0KHQpe3ZhciBlPXQuZGF0ZVRpbWUsbj10LmRhdGUsaT10LnRpbWUscj10LnBlcmlvZHMsbz10LmRheXMsYT10LnNob3J0RGF5cyxzPXQubW9udGhzLGw9dC5zaG9ydE1vbnRocyxjPUp0dChyKSx1PVF0dChyKSxoPUp0dChvKSxkPVF0dChvKSxwPUp0dChhKSxmPVF0dChhKSxtPUp0dChzKSxnPVF0dChzKSxfPUp0dChsKSx5PVF0dChsKSx2PXthOmZ1bmN0aW9uIGIodCl7cmV0dXJuIGFbdC5nZXREYXkoKV19LEE6ZnVuY3Rpb24geCh0KXtyZXR1cm4gb1t0LmdldERheSgpXX0sYjpmdW5jdGlvbiB3KHQpe3JldHVybiBsW3QuZ2V0TW9udGgoKV19LEI6ZnVuY3Rpb24gUyh0KXtyZXR1cm4gc1t0LmdldE1vbnRoKCldfSxjOm51bGwsZDpiZXQsZTpiZXQsZjpUZXQsSDp4ZXQsSTp3ZXQsajpNZXQsTDpFZXQsbTpDZXQsTTpBZXQscDpmdW5jdGlvbiBNKHQpe3JldHVybiByWysodC5nZXRIb3VycygpPj0xMildfSxROm5udCxzOmludCxTOmtldCx1OkxldCxVOlBldCxWOk5ldCx3OklldCxXOk9ldCx4Om51bGwsWDpudWxsLHk6UmV0LFk6emV0LFo6RGV0LCIlIjplbnR9LEU9e2E6ZnVuY3Rpb24gVCh0KXtyZXR1cm4gYVt0LmdldFVUQ0RheSgpXX0sQTpmdW5jdGlvbiBDKHQpe3JldHVybiBvW3QuZ2V0VVRDRGF5KCldfSxiOmZ1bmN0aW9uIEEodCl7cmV0dXJuIGxbdC5nZXRVVENNb250aCgpXX0sQjpmdW5jdGlvbiBrKHQpe3JldHVybiBzW3QuZ2V0VVRDTW9udGgoKV19LGM6bnVsbCxkOkJldCxlOkJldCxmOmpldCxIOkhldCxJOkZldCxqOlZldCxMOlVldCxtOkdldCxNOldldCxwOmZ1bmN0aW9uIEwodCl7cmV0dXJuIHJbKyh0LmdldFVUQ0hvdXJzKCk+PTEyKV19LFE6bm50LHM6aW50LFM6cWV0LHU6WWV0LFU6WGV0LFY6JGV0LHc6S2V0LFc6WmV0LHg6bnVsbCxYOm51bGwseTpKZXQsWTpRZXQsWjp0bnQsIiUiOmVudH0sUD17YTpmdW5jdGlvbiBOKHQsZSxuKXt2YXIgaT1wLmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIGk/KHQudz1mW2lbMF0udG9Mb3dlckNhc2UoKV0sbitpWzBdLmxlbmd0aCk6LTF9LEE6ZnVuY3Rpb24gSSh0LGUsbil7dmFyIGk9aC5leGVjKGUuc2xpY2UobikpO3JldHVybiBpPyh0Lnc9ZFtpWzBdLnRvTG93ZXJDYXNlKCldLG4raVswXS5sZW5ndGgpOi0xfSxiOmZ1bmN0aW9uIE8odCxlLG4pe3ZhciBpPV8uZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gaT8odC5tPXlbaVswXS50b0xvd2VyQ2FzZSgpXSxuK2lbMF0ubGVuZ3RoKTotMX0sQjpmdW5jdGlvbiBSKHQsZSxuKXt2YXIgaT1tLmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIGk/KHQubT1nW2lbMF0udG9Mb3dlckNhc2UoKV0sbitpWzBdLmxlbmd0aCk6LTF9LGM6ZnVuY3Rpb24geih0LG4saSl7cmV0dXJuIFUodCxlLG4saSl9LGQ6dWV0LGU6dWV0LGY6Z2V0LEg6ZGV0LEk6ZGV0LGo6aGV0LEw6bWV0LG06Y2V0LE06cGV0LHA6ZnVuY3Rpb24gRCh0LGUsbil7dmFyIGk9Yy5leGVjKGUuc2xpY2UobikpO3JldHVybiBpPyh0LnA9dVtpWzBdLnRvTG93ZXJDYXNlKCldLG4raVswXS5sZW5ndGgpOi0xfSxROnlldCxzOnZldCxTOmZldCx1OmVldCxVOm5ldCxWOmlldCx3OnRldCxXOnJldCx4OmZ1bmN0aW9uIEIodCxlLGkpe3JldHVybiBVKHQsbixlLGkpfSxYOmZ1bmN0aW9uIEgodCxlLG4pe3JldHVybiBVKHQsaSxlLG4pfSx5OmFldCxZOm9ldCxaOnNldCwiJSI6X2V0fTtmdW5jdGlvbiBGKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBpLHIsbyxhPVtdLHM9LTEsbD0wLGM9dC5sZW5ndGg7Zm9yKG4gaW5zdGFuY2VvZiBEYXRlfHwobj1uZXcgRGF0ZSgrbikpOysrczxjOykzNz09PXQuY2hhckNvZGVBdChzKSYmKGEucHVzaCh0LnNsaWNlKGwscykpLG51bGwhPShyPXF0dFtpPXQuY2hhckF0KCsrcyldKT9pPXQuY2hhckF0KCsrcyk6cj0iZSI9PT1pPyIgIjoiMCIsKG89ZVtpXSkmJihpPW8obixyKSksYS5wdXNoKGkpLGw9cysxKTtyZXR1cm4gYS5wdXNoKHQuc2xpY2UobCxzKSksYS5qb2luKCIiKX19ZnVuY3Rpb24gVih0LGUpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgaSxyLG89SHR0KDE5MDApO2lmKFUobyx0LG4rPSIiLDApIT1uLmxlbmd0aClyZXR1cm4gbnVsbDtpZigiUSJpbiBvKXJldHVybiBuZXcgRGF0ZShvLlEpO2lmKCJwImluIG8mJihvLkg9by5IJTEyKzEyKm8ucCksIlYiaW4gbyl7aWYoby5WPDF8fG8uVj41MylyZXR1cm4gbnVsbDsidyJpbiBvfHwoby53PTEpLCJaImluIG8/KHI9KGk9QnR0KEh0dChvLnkpKSkuZ2V0VVRDRGF5KCksaT1yPjR8fDA9PT1yP090dC5jZWlsKGkpOk90dChpKSxpPVB0dC5vZmZzZXQoaSw3KihvLlYtMSkpLG8ueT1pLmdldFVUQ0Z1bGxZZWFyKCksby5tPWkuZ2V0VVRDTW9udGgoKSxvLmQ9aS5nZXRVVENEYXRlKCkrKG8udys2KSU3KToocj0oaT1lKEh0dChvLnkpKSkuZ2V0RGF5KCksaT1yPjR8fDA9PT1yP0F0dC5jZWlsKGkpOkF0dChpKSxpPUV0dC5vZmZzZXQoaSw3KihvLlYtMSkpLG8ueT1pLmdldEZ1bGxZZWFyKCksby5tPWkuZ2V0TW9udGgoKSxvLmQ9aS5nZXREYXRlKCkrKG8udys2KSU3KX1lbHNlKCJXImluIG98fCJVImluIG8pJiYoInciaW4gb3x8KG8udz0idSJpbiBvP28udSU3OiJXImluIG8/MTowKSxyPSJaImluIG8/QnR0KEh0dChvLnkpKS5nZXRVVENEYXkoKTplKEh0dChvLnkpKS5nZXREYXkoKSxvLm09MCxvLmQ9IlciaW4gbz8oby53KzYpJTcrNypvLlctKHIrNSklNzpvLncrNypvLlUtKHIrNiklNyk7cmV0dXJuIloiaW4gbz8oby5IKz1vLlovMTAwfDAsby5NKz1vLlolMTAwLEJ0dChvKSk6ZShvKX19ZnVuY3Rpb24gVSh0LGUsbixpKXtmb3IodmFyIHIsbyxhPTAscz1lLmxlbmd0aCxsPW4ubGVuZ3RoO2E8czspe2lmKGk+PWwpcmV0dXJuLTE7aWYoMzc9PT0ocj1lLmNoYXJDb2RlQXQoYSsrKSkpe2lmKHI9ZS5jaGFyQXQoYSsrKSwhKG89UFtyIGluIHF0dD9lLmNoYXJBdChhKyspOnJdKXx8KGk9byh0LG4saSkpPDApcmV0dXJuLTF9ZWxzZSBpZihyIT1uLmNoYXJDb2RlQXQoaSsrKSlyZXR1cm4tMX1yZXR1cm4gaX1yZXR1cm4gdi54PUYobix2KSx2Llg9RihpLHYpLHYuYz1GKGUsdiksRS54PUYobixFKSxFLlg9RihpLEUpLEUuYz1GKGUsRSkse2Zvcm1hdDpmdW5jdGlvbih0KXt2YXIgZT1GKHQrPSIiLHYpO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGV9LHBhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPVYodCs9IiIsRHR0KTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfSx1dGNGb3JtYXQ6ZnVuY3Rpb24odCl7dmFyIGU9Rih0Kz0iIixFKTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfSx1dGNQYXJzZTpmdW5jdGlvbih0KXt2YXIgZT1WKHQsQnR0KTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfX19enR0LmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiBpc0Zpbml0ZSh0PU1hdGguZmxvb3IodCkpJiZ0PjA/d3R0KChmdW5jdGlvbihlKXtlLnNldFVUQ0Z1bGxZZWFyKE1hdGguZmxvb3IoZS5nZXRVVENGdWxsWWVhcigpL3QpKnQpLGUuc2V0VVRDTW9udGgoMCwxKSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKGUsbil7ZS5zZXRVVENGdWxsWWVhcihlLmdldFVUQ0Z1bGxZZWFyKCkrbip0KX0pKTpudWxsfTt2YXIgVnR0LFV0dCxqdHQsR3R0LFd0dCxxdHQ9eyItIjoiIixfOiIgIiwwOiIwIn0sWXR0PS9eXHMqXGQrLyxYdHQ9L14lLywkdHQ9L1tcXF4kKis/fFtcXSgpLnt9XS9nO2Z1bmN0aW9uIEt0dCh0LGUsbil7dmFyIGk9dDwwPyItIjoiIixyPShpPy10OnQpKyIiLG89ci5sZW5ndGg7cmV0dXJuIGkrKG88bj9uZXcgQXJyYXkobi1vKzEpLmpvaW4oZSkrcjpyKX1mdW5jdGlvbiBadHQodCl7cmV0dXJuIHQucmVwbGFjZSgkdHQsIlxcJCYiKX1mdW5jdGlvbiBKdHQodCl7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK3QubWFwKFp0dCkuam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIFF0dCh0KXtmb3IodmFyIGU9e30sbj0tMSxpPXQubGVuZ3RoOysrbjxpOyllW3Rbbl0udG9Mb3dlckNhc2UoKV09bjtyZXR1cm4gZX1mdW5jdGlvbiB0ZXQodCxlLG4pe3ZhciBpPVl0dC5leGVjKGUuc2xpY2UobixuKzEpKTtyZXR1cm4gaT8odC53PStpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGVldCh0LGUsbil7dmFyIGk9WXR0LmV4ZWMoZS5zbGljZShuLG4rMSkpO3JldHVybiBpPyh0LnU9K2lbMF0sbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbmV0KHQsZSxuKXt2YXIgaT1ZdHQuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIGk/KHQuVT0raVswXSxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBpZXQodCxlLG4pe3ZhciBpPVl0dC5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gaT8odC5WPStpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHJldCh0LGUsbil7dmFyIGk9WXR0LmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiBpPyh0Llc9K2lbMF0sbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gb2V0KHQsZSxuKXt2YXIgaT1ZdHQuZXhlYyhlLnNsaWNlKG4sbis0KSk7cmV0dXJuIGk/KHQueT0raVswXSxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBhZXQodCxlLG4pe3ZhciBpPVl0dC5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gaT8odC55PStpWzBdKygraVswXT42OD8xOTAwOjJlMyksbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gc2V0KHQsZSxuKXt2YXIgaT0vXihaKXwoWystXVxkXGQpKD86Oj8oXGRcZCkpPy8uZXhlYyhlLnNsaWNlKG4sbis2KSk7cmV0dXJuIGk/KHQuWj1pWzFdPzA6LShpWzJdKyhpWzNdfHwiMDAiKSksbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gY2V0KHQsZSxuKXt2YXIgaT1ZdHQuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIGk/KHQubT1pWzBdLTEsbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gdWV0KHQsZSxuKXt2YXIgaT1ZdHQuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIGk/KHQuZD0raVswXSxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBoZXQodCxlLG4pe3ZhciBpPVl0dC5leGVjKGUuc2xpY2UobixuKzMpKTtyZXR1cm4gaT8odC5tPTAsdC5kPStpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGRldCh0LGUsbil7dmFyIGk9WXR0LmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiBpPyh0Lkg9K2lbMF0sbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcGV0KHQsZSxuKXt2YXIgaT1ZdHQuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIGk/KHQuTT0raVswXSxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBmZXQodCxlLG4pe3ZhciBpPVl0dC5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gaT8odC5TPStpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIG1ldCh0LGUsbil7dmFyIGk9WXR0LmV4ZWMoZS5zbGljZShuLG4rMykpO3JldHVybiBpPyh0Lkw9K2lbMF0sbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gZ2V0KHQsZSxuKXt2YXIgaT1ZdHQuZXhlYyhlLnNsaWNlKG4sbis2KSk7cmV0dXJuIGk/KHQuTD1NYXRoLmZsb29yKGlbMF0vMWUzKSxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBfZXQodCxlLG4pe3ZhciBpPVh0dC5leGVjKGUuc2xpY2UobixuKzEpKTtyZXR1cm4gaT9uK2lbMF0ubGVuZ3RoOi0xfWZ1bmN0aW9uIHlldCh0LGUsbil7dmFyIGk9WXR0LmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIGk/KHQuUT0raVswXSxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB2ZXQodCxlLG4pe3ZhciBpPVl0dC5leGVjKGUuc2xpY2UobikpO3JldHVybiBpPyh0LlE9MWUzKitpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGJldCh0LGUpe3JldHVybiBLdHQodC5nZXREYXRlKCksZSwyKX1mdW5jdGlvbiB4ZXQodCxlKXtyZXR1cm4gS3R0KHQuZ2V0SG91cnMoKSxlLDIpfWZ1bmN0aW9uIHdldCh0LGUpe3JldHVybiBLdHQodC5nZXRIb3VycygpJTEyfHwxMixlLDIpfWZ1bmN0aW9uIE1ldCh0LGUpe3JldHVybiBLdHQoMStFdHQuY291bnQoTHR0KHQpLHQpLGUsMyl9ZnVuY3Rpb24gRWV0KHQsZSl7cmV0dXJuIEt0dCh0LmdldE1pbGxpc2Vjb25kcygpLGUsMyl9ZnVuY3Rpb24gVGV0KHQsZSl7cmV0dXJuIEVldCh0LGUpKyIwMDAifWZ1bmN0aW9uIENldCh0LGUpe3JldHVybiBLdHQodC5nZXRNb250aCgpKzEsZSwyKX1mdW5jdGlvbiBBZXQodCxlKXtyZXR1cm4gS3R0KHQuZ2V0TWludXRlcygpLGUsMil9ZnVuY3Rpb24ga2V0KHQsZSl7cmV0dXJuIEt0dCh0LmdldFNlY29uZHMoKSxlLDIpfWZ1bmN0aW9uIExldCh0KXt2YXIgZT10LmdldERheSgpO3JldHVybiAwPT09ZT83OmV9ZnVuY3Rpb24gUGV0KHQsZSl7cmV0dXJuIEt0dChDdHQuY291bnQoTHR0KHQpLHQpLGUsMil9ZnVuY3Rpb24gTmV0KHQsZSl7dmFyIG49dC5nZXREYXkoKTtyZXR1cm4gdD1uPj00fHwwPT09bj9rdHQodCk6a3R0LmNlaWwodCksS3R0KGt0dC5jb3VudChMdHQodCksdCkrKDQ9PT1MdHQodCkuZ2V0RGF5KCkpLGUsMil9ZnVuY3Rpb24gSWV0KHQpe3JldHVybiB0LmdldERheSgpfWZ1bmN0aW9uIE9ldCh0LGUpe3JldHVybiBLdHQoQXR0LmNvdW50KEx0dCh0KSx0KSxlLDIpfWZ1bmN0aW9uIFJldCh0LGUpe3JldHVybiBLdHQodC5nZXRGdWxsWWVhcigpJTEwMCxlLDIpfWZ1bmN0aW9uIHpldCh0LGUpe3JldHVybiBLdHQodC5nZXRGdWxsWWVhcigpJTFlNCxlLDQpfWZ1bmN0aW9uIERldCh0KXt2YXIgZT10LmdldFRpbWV6b25lT2Zmc2V0KCk7cmV0dXJuKGU+MD8iLSI6KGUqPS0xLCIrIikpK0t0dChlLzYwfDAsIjAiLDIpK0t0dChlJTYwLCIwIiwyKX1mdW5jdGlvbiBCZXQodCxlKXtyZXR1cm4gS3R0KHQuZ2V0VVRDRGF0ZSgpLGUsMil9ZnVuY3Rpb24gSGV0KHQsZSl7cmV0dXJuIEt0dCh0LmdldFVUQ0hvdXJzKCksZSwyKX1mdW5jdGlvbiBGZXQodCxlKXtyZXR1cm4gS3R0KHQuZ2V0VVRDSG91cnMoKSUxMnx8MTIsZSwyKX1mdW5jdGlvbiBWZXQodCxlKXtyZXR1cm4gS3R0KDErUHR0LmNvdW50KHp0dCh0KSx0KSxlLDMpfWZ1bmN0aW9uIFVldCh0LGUpe3JldHVybiBLdHQodC5nZXRVVENNaWxsaXNlY29uZHMoKSxlLDMpfWZ1bmN0aW9uIGpldCh0LGUpe3JldHVybiBVZXQodCxlKSsiMDAwIn1mdW5jdGlvbiBHZXQodCxlKXtyZXR1cm4gS3R0KHQuZ2V0VVRDTW9udGgoKSsxLGUsMil9ZnVuY3Rpb24gV2V0KHQsZSl7cmV0dXJuIEt0dCh0LmdldFVUQ01pbnV0ZXMoKSxlLDIpfWZ1bmN0aW9uIHFldCh0LGUpe3JldHVybiBLdHQodC5nZXRVVENTZWNvbmRzKCksZSwyKX1mdW5jdGlvbiBZZXQodCl7dmFyIGU9dC5nZXRVVENEYXkoKTtyZXR1cm4gMD09PWU/NzplfWZ1bmN0aW9uIFhldCh0LGUpe3JldHVybiBLdHQoSXR0LmNvdW50KHp0dCh0KSx0KSxlLDIpfWZ1bmN0aW9uICRldCh0LGUpe3ZhciBuPXQuZ2V0VVRDRGF5KCk7cmV0dXJuIHQ9bj49NHx8MD09PW4/UnR0KHQpOlJ0dC5jZWlsKHQpLEt0dChSdHQuY291bnQoenR0KHQpLHQpKyg0PT09enR0KHQpLmdldFVUQ0RheSgpKSxlLDIpfWZ1bmN0aW9uIEtldCh0KXtyZXR1cm4gdC5nZXRVVENEYXkoKX1mdW5jdGlvbiBaZXQodCxlKXtyZXR1cm4gS3R0KE90dC5jb3VudCh6dHQodCksdCksZSwyKX1mdW5jdGlvbiBKZXQodCxlKXtyZXR1cm4gS3R0KHQuZ2V0VVRDRnVsbFllYXIoKSUxMDAsZSwyKX1mdW5jdGlvbiBRZXQodCxlKXtyZXR1cm4gS3R0KHQuZ2V0VVRDRnVsbFllYXIoKSUxZTQsZSw0KX1mdW5jdGlvbiB0bnQoKXtyZXR1cm4iKzAwMDAifWZ1bmN0aW9uIGVudCgpe3JldHVybiIlIn1mdW5jdGlvbiBubnQodCl7cmV0dXJuK3R9ZnVuY3Rpb24gaW50KHQpe3JldHVybiBNYXRoLmZsb29yKCt0LzFlMyl9ZnVuY3Rpb24gcm50KHQpe3JldHVybiBWdHQ9RnR0KHQpLFV0dD1WdHQuZm9ybWF0LGp0dD1WdHQucGFyc2UsR3R0PVZ0dC51dGNGb3JtYXQsV3R0PVZ0dC51dGNQYXJzZSxWdHR9cm50KHtkYXRlVGltZToiJXgsICVYIixkYXRlOiIlLW0vJS1kLyVZIix0aW1lOiIlLUk6JU06JVMgJXAiLHBlcmlvZHM6WyJBTSIsIlBNIl0sZGF5czpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sc2hvcnREYXlzOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sbW9udGhzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxzaG9ydE1vbnRoczpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdfSk7dmFyIG9udCxhbnQsc250PSIlWS0lbS0lZFQlSDolTTolUy4lTFoiLGxudD1EYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZz9mdW5jdGlvbiBjbnQodCl7cmV0dXJuIHQudG9JU09TdHJpbmcoKX06R3R0KHNudCksdW50PStuZXcgRGF0ZSgiMjAwMC0wMS0wMVQwMDowMDowMC4wMDBaIik/ZnVuY3Rpb24gaG50KHQpe3ZhciBlPW5ldyBEYXRlKHQpO3JldHVybiBpc05hTihlKT9udWxsOmV9Old0dChzbnQpLGRudD0wLHBudD0wLGZudD0wLG1udD0wLGdudD0wLF9udD0wLHludD0ib2JqZWN0Ij09dHlwZW9mIHBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSx2bnQ9Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6ZnVuY3Rpb24odCl7c2V0VGltZW91dCh0LDE3KX07ZnVuY3Rpb24gYm50KCl7cmV0dXJuIGdudHx8KHZudCh4bnQpLGdudD15bnQubm93KCkrX250KX1mdW5jdGlvbiB4bnQoKXtnbnQ9MH1mdW5jdGlvbiB3bnQoKXt0aGlzLl9jYWxsPXRoaXMuX3RpbWU9dGhpcy5fbmV4dD1udWxsfWZ1bmN0aW9uIFNudCh0LGUsbil7dmFyIGk9bmV3IHdudDtyZXR1cm4gaS5yZXN0YXJ0KHQsZSxuKSxpfWZ1bmN0aW9uIE1udCgpe2JudCgpLCsrZG50O2Zvcih2YXIgdCxlPW9udDtlOykodD1nbnQtZS5fdGltZSk+PTAmJmUuX2NhbGwuY2FsbChudWxsLHQpLGU9ZS5fbmV4dDstLWRudH1mdW5jdGlvbiBFbnQoKXtnbnQ9KG1udD15bnQubm93KCkpK19udCxkbnQ9cG50PTA7dHJ5e01udCgpfWZpbmFsbHl7ZG50PTAsKGZ1bmN0aW9uIHQoKXtmb3IodmFyIHQsZSxuPW9udCxpPTEvMDtuOyluLl9jYWxsPyhpPm4uX3RpbWUmJihpPW4uX3RpbWUpLHQ9bixuPW4uX25leHQpOihlPW4uX25leHQsbi5fbmV4dD1udWxsLG49dD90Ll9uZXh0PWU6b250PWUpO2FudD10LENudChpKX0pKCksZ250PTB9fWZ1bmN0aW9uIFRudCgpe3ZhciB0PXludC5ub3coKSxlPXQtbW50O2U+MWUzJiYoX250LT1lLG1udD10KX1mdW5jdGlvbiBDbnQodCl7ZG50fHwocG50JiYocG50PWNsZWFyVGltZW91dChwbnQpKSx0LWdudD4yND8odDwxLzAmJihwbnQ9c2V0VGltZW91dChFbnQsdC15bnQubm93KCktX250KSksZm50JiYoZm50PWNsZWFySW50ZXJ2YWwoZm50KSkpOihmbnR8fChtbnQ9eW50Lm5vdygpLGZudD1zZXRJbnRlcnZhbChUbnQsMWUzKSksZG50PTEsdm50KEVudCkpKX13bnQucHJvdG90eXBlPVNudC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOndudCxyZXN0YXJ0OmZ1bmN0aW9uKHQsZSxuKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiIpO249KG51bGw9PW4/Ym50KCk6K24pKyhudWxsPT1lPzA6K2UpLHRoaXMuX25leHR8fGFudD09PXRoaXN8fChhbnQ/YW50Ll9uZXh0PXRoaXM6b250PXRoaXMsYW50PXRoaXMpLHRoaXMuX2NhbGw9dCx0aGlzLl90aW1lPW4sQ250KCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLENudCgpKX19O3ZhciBBbnQ9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLGtudD17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6QW50LHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIn07ZnVuY3Rpb24gTG50KHQpe3ZhciBlPXQrPSIiLG49ZS5pbmRleE9mKCI6Iik7cmV0dXJuIG4+PTAmJiJ4bWxucyIhPT0oZT10LnNsaWNlKDAsbikpJiYodD10LnNsaWNlKG4rMSkpLGtudC5oYXNPd25Qcm9wZXJ0eShlKT97c3BhY2U6a250W2VdLGxvY2FsOnR9OnR9ZnVuY3Rpb24gUG50KHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMub3duZXJEb2N1bWVudCxuPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiBuPT09QW50JiZlLmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkk9PT1BbnQ/ZS5jcmVhdGVFbGVtZW50KHQpOmUuY3JlYXRlRWxlbWVudE5TKG4sdCl9fWZ1bmN0aW9uIE5udCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyh0LnNwYWNlLHQubG9jYWwpfX1mdW5jdGlvbiBJbnQodCl7dmFyIGU9TG50KHQpO3JldHVybihlLmxvY2FsP05udDpQbnQpKGUpfWZ1bmN0aW9uIE9udCgpe31mdW5jdGlvbiBSbnQodCl7cmV0dXJuIG51bGw9PXQ/T250OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3Rvcih0KX19ZnVuY3Rpb24gem50KCl7cmV0dXJuW119ZnVuY3Rpb24gRG50KHQpe3JldHVybiBudWxsPT10P3pudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwodCl9fWZ1bmN0aW9uIEJudCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXRjaGVzKHQpfX1mdW5jdGlvbiBIbnQodCl7cmV0dXJuIG5ldyBBcnJheSh0Lmxlbmd0aCl9ZnVuY3Rpb24gRm50KHQsZSl7dGhpcy5vd25lckRvY3VtZW50PXQub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST10Lm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PXQsdGhpcy5fX2RhdGFfXz1lfWZ1bmN0aW9uIFZudCh0LGUsbixpLHIsbyl7Zm9yKHZhciBhLHM9MCxsPWUubGVuZ3RoLGM9by5sZW5ndGg7czxjOysrcykoYT1lW3NdKT8oYS5fX2RhdGFfXz1vW3NdLGlbc109YSk6bltzXT1uZXcgRm50KHQsb1tzXSk7Zm9yKDtzPGw7KytzKShhPWVbc10pJiYocltzXT1hKX1mdW5jdGlvbiBVbnQodCxlLG4saSxyLG8sYSl7dmFyIHMsbCxjLHU9e30saD1lLmxlbmd0aCxkPW8ubGVuZ3RoLHA9bmV3IEFycmF5KGgpO2ZvcihzPTA7czxoOysrcykobD1lW3NdKSYmKHBbc109Yz0iJCIrYS5jYWxsKGwsbC5fX2RhdGFfXyxzLGUpLGMgaW4gdT9yW3NdPWw6dVtjXT1sKTtmb3Iocz0wO3M8ZDsrK3MpKGw9dVtjPSIkIithLmNhbGwodCxvW3NdLHMsbyldKT8oaVtzXT1sLGwuX19kYXRhX189b1tzXSx1W2NdPW51bGwpOm5bc109bmV3IEZudCh0LG9bc10pO2ZvcihzPTA7czxoOysrcykobD1lW3NdKSYmdVtwW3NdXT09PWwmJihyW3NdPWwpfWZ1bmN0aW9uIGpudCh0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6dD49ZT8wOk5hTn1mdW5jdGlvbiBHbnQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9fWZ1bmN0aW9uIFdudCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCl9fWZ1bmN0aW9uIHFudCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKHQsZSl9fWZ1bmN0aW9uIFludCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsLGUpfX1mdW5jdGlvbiBYbnQodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1uP3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpOnRoaXMuc2V0QXR0cmlidXRlKHQsbil9fWZ1bmN0aW9uICRudCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PW4/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsLG4pfX1mdW5jdGlvbiBLbnQodCl7cmV0dXJuIHQub3duZXJEb2N1bWVudCYmdC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHx0LmRvY3VtZW50JiZ0fHx0LmRlZmF1bHRWaWV3fWZ1bmN0aW9uIFpudCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpfX1mdW5jdGlvbiBKbnQodCxlLG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxlLG4pfX1mdW5jdGlvbiBRbnQodCxlLG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciBpPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PWk/dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KTp0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQsaSxuKX19ZnVuY3Rpb24gdGl0KHQsZSl7cmV0dXJuIHQuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShlKXx8S250KHQpLmdldENvbXB1dGVkU3R5bGUodCxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKGUpfWZ1bmN0aW9uIGVpdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtkZWxldGUgdGhpc1t0XX19ZnVuY3Rpb24gbml0KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpc1t0XT1lfX1mdW5jdGlvbiBpaXQodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1uP2RlbGV0ZSB0aGlzW3RdOnRoaXNbdF09bn19ZnVuY3Rpb24gcml0KHQpe3JldHVybiB0LnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiBvaXQodCl7cmV0dXJuIHQuY2xhc3NMaXN0fHxuZXcgYWl0KHQpfWZ1bmN0aW9uIGFpdCh0KXt0aGlzLl9ub2RlPXQsdGhpcy5fbmFtZXM9cml0KHQuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9ZnVuY3Rpb24gc2l0KHQsZSl7Zm9yKHZhciBuPW9pdCh0KSxpPS0xLHI9ZS5sZW5ndGg7KytpPHI7KW4uYWRkKGVbaV0pfWZ1bmN0aW9uIGxpdCh0LGUpe2Zvcih2YXIgbj1vaXQodCksaT0tMSxyPWUubGVuZ3RoOysraTxyOyluLnJlbW92ZShlW2ldKX1mdW5jdGlvbiBjaXQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7c2l0KHRoaXMsdCl9fWZ1bmN0aW9uIHVpdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtsaXQodGhpcyx0KX19ZnVuY3Rpb24gaGl0KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7KGUuYXBwbHkodGhpcyxhcmd1bWVudHMpP3NpdDpsaXQpKHRoaXMsdCl9fWZ1bmN0aW9uIGRpdCgpe3RoaXMudGV4dENvbnRlbnQ9IiJ9ZnVuY3Rpb24gcGl0KHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9dH19ZnVuY3Rpb24gZml0KHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMudGV4dENvbnRlbnQ9bnVsbD09ZT8iIjplfX1mdW5jdGlvbiBtaXQoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiBnaXQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9dH19ZnVuY3Rpb24gX2l0KHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPW51bGw9PWU/IiI6ZX19ZnVuY3Rpb24geWl0KCl7dGhpcy5uZXh0U2libGluZyYmdGhpcy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMpfWZ1bmN0aW9uIHZpdCgpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIGJpdCgpe3JldHVybiBudWxsfWZ1bmN0aW9uIHhpdCgpe3ZhciB0PXRoaXMucGFyZW50Tm9kZTt0JiZ0LnJlbW92ZUNoaWxkKHRoaXMpfWZ1bmN0aW9uIHdpdCgpe3ZhciB0PXRoaXMuY2xvbmVOb2RlKCExKSxlPXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gZT9lLmluc2VydEJlZm9yZSh0LHRoaXMubmV4dFNpYmxpbmcpOnR9ZnVuY3Rpb24gU2l0KCl7dmFyIHQ9dGhpcy5jbG9uZU5vZGUoITApLGU9dGhpcy5wYXJlbnROb2RlO3JldHVybiBlP2UuaW5zZXJ0QmVmb3JlKHQsdGhpcy5uZXh0U2libGluZyk6dH1GbnQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpGbnQsYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUodCx0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUodCxlKX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3IodCl9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKHQpfX0sYWl0LnByb3RvdHlwZT17YWRkOmZ1bmN0aW9uKHQpe3RoaXMuX25hbWVzLmluZGV4T2YodCk8MCYmKHRoaXMuX25hbWVzLnB1c2godCksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0scmVtb3ZlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX25hbWVzLmluZGV4T2YodCk7ZT49MCYmKHRoaXMuX25hbWVzLnNwbGljZShlLDEpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LGNvbnRhaW5zOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKHQpPj0wfX07dmFyIE1pdD17fTtmdW5jdGlvbiBFaXQodCxlLG4pe3JldHVybiB0PVRpdCh0LGUsbiksZnVuY3Rpb24oZSl7dmFyIG49ZS5yZWxhdGVkVGFyZ2V0O24mJihuPT09dGhpc3x8OCZuLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHRoaXMpKXx8dC5jYWxsKHRoaXMsZSl9fWZ1bmN0aW9uIFRpdCh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKGkpe3RyeXt0LmNhbGwodGhpcyx0aGlzLl9fZGF0YV9fLGUsbil9ZmluYWxseXt9fX1mdW5jdGlvbiBDaXQodCl7cmV0dXJuIHQudHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcCgoZnVuY3Rpb24odCl7dmFyIGU9IiIsbj10LmluZGV4T2YoIi4iKTtyZXR1cm4gbj49MCYmKGU9dC5zbGljZShuKzEpLHQ9dC5zbGljZSgwLG4pKSx7dHlwZTp0LG5hbWU6ZX19KSl9ZnVuY3Rpb24gQWl0KHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMuX19vbjtpZihlKXtmb3IodmFyIG4saT0wLHI9LTEsbz1lLmxlbmd0aDtpPG87KytpKW49ZVtpXSx0LnR5cGUmJm4udHlwZSE9PXQudHlwZXx8bi5uYW1lIT09dC5uYW1lP2VbKytyXT1uOnRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihuLnR5cGUsbi5saXN0ZW5lcixuLmNhcHR1cmUpOysrcj9lLmxlbmd0aD1yOmRlbGV0ZSB0aGlzLl9fb259fX1mdW5jdGlvbiBraXQodCxlLG4pe3ZhciBpPU1pdC5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpP0VpdDpUaXQ7cmV0dXJuIGZ1bmN0aW9uKHIsbyxhKXt2YXIgcyxsPXRoaXMuX19vbixjPWkoZSxvLGEpO2lmKGwpZm9yKHZhciB1PTAsaD1sLmxlbmd0aDt1PGg7Kyt1KWlmKChzPWxbdV0pLnR5cGU9PT10LnR5cGUmJnMubmFtZT09PXQubmFtZSlyZXR1cm4gdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKHMudHlwZSxzLmxpc3RlbmVyLHMuY2FwdHVyZSksdGhpcy5hZGRFdmVudExpc3RlbmVyKHMudHlwZSxzLmxpc3RlbmVyPWMscy5jYXB0dXJlPW4pLHZvaWQocy52YWx1ZT1lKTt0aGlzLmFkZEV2ZW50TGlzdGVuZXIodC50eXBlLGMsbikscz17dHlwZTp0LnR5cGUsbmFtZTp0Lm5hbWUsdmFsdWU6ZSxsaXN0ZW5lcjpjLGNhcHR1cmU6bn0sbD9sLnB1c2gocyk6dGhpcy5fX29uPVtzXX19ZnVuY3Rpb24gTGl0KHQsZSxuKXt2YXIgaT1LbnQodCkscj1pLkN1c3RvbUV2ZW50OyJmdW5jdGlvbiI9PXR5cGVvZiByP3I9bmV3IHIoZSxuKToocj1pLmRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpLG4/KHIuaW5pdEV2ZW50KGUsbi5idWJibGVzLG4uY2FuY2VsYWJsZSksci5kZXRhaWw9bi5kZXRhaWwpOnIuaW5pdEV2ZW50KGUsITEsITEpKSx0LmRpc3BhdGNoRXZlbnQocil9ZnVuY3Rpb24gUGl0KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIExpdCh0aGlzLHQsZSl9fWZ1bmN0aW9uIE5pdCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBMaXQodGhpcyx0LGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19InVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudCYmKCJvbm1vdXNlZW50ZXIiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fHwoTWl0PXttb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0In0pKTt2YXIgSWl0PVtudWxsXTtmdW5jdGlvbiBPaXQodCxlKXt0aGlzLl9ncm91cHM9dCx0aGlzLl9wYXJlbnRzPWV9ZnVuY3Rpb24gUml0KCl7cmV0dXJuIG5ldyBPaXQoW1tkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXSxJaXQpfU9pdC5wcm90b3R5cGU9Uml0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6T2l0LHNlbGVjdDpmdW5jdGlvbiB6aXQodCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PVJudCh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLGk9bmV3IEFycmF5KG4pLHI9MDtyPG47KytyKWZvcih2YXIgbyxhLHM9ZVtyXSxsPXMubGVuZ3RoLGM9aVtyXT1uZXcgQXJyYXkobCksdT0wO3U8bDsrK3UpKG89c1t1XSkmJihhPXQuY2FsbChvLG8uX19kYXRhX18sdSxzKSkmJigiX19kYXRhX18iaW4gbyYmKGEuX19kYXRhX189by5fX2RhdGFfXyksY1t1XT1hKTtyZXR1cm4gbmV3IE9pdChpLHRoaXMuX3BhcmVudHMpfSxzZWxlY3RBbGw6ZnVuY3Rpb24gRGl0KHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1EbnQodCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxpPVtdLHI9W10sbz0wO288bjsrK28pZm9yKHZhciBhLHM9ZVtvXSxsPXMubGVuZ3RoLGM9MDtjPGw7KytjKShhPXNbY10pJiYoaS5wdXNoKHQuY2FsbChhLGEuX19kYXRhX18sYyxzKSksci5wdXNoKGEpKTtyZXR1cm4gbmV3IE9pdChpLHIpfSxmaWx0ZXI6ZnVuY3Rpb24gQml0KHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1CbnQodCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxpPW5ldyBBcnJheShuKSxyPTA7cjxuOysrcilmb3IodmFyIG8sYT1lW3JdLHM9YS5sZW5ndGgsbD1pW3JdPVtdLGM9MDtjPHM7KytjKShvPWFbY10pJiZ0LmNhbGwobyxvLl9fZGF0YV9fLGMsYSkmJmwucHVzaChvKTtyZXR1cm4gbmV3IE9pdChpLHRoaXMuX3BhcmVudHMpfSxkYXRhOmZ1bmN0aW9uIEhpdCh0LGUpe2lmKCF0KXJldHVybiBmPW5ldyBBcnJheSh0aGlzLnNpemUoKSksdT0tMSx0aGlzLmVhY2goKGZ1bmN0aW9uKHQpe2ZbKyt1XT10fSkpLGY7dmFyIG49ZT9VbnQ6Vm50LGk9dGhpcy5fcGFyZW50cyxyPXRoaXMuX2dyb3VwczsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9KGZ1bmN0aW9uIG8odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSkodCkpO2Zvcih2YXIgYT1yLmxlbmd0aCxzPW5ldyBBcnJheShhKSxsPW5ldyBBcnJheShhKSxjPW5ldyBBcnJheShhKSx1PTA7dTxhOysrdSl7dmFyIGg9aVt1XSxkPXJbdV0scD1kLmxlbmd0aCxmPXQuY2FsbChoLGgmJmguX19kYXRhX18sdSxpKSxtPWYubGVuZ3RoLGc9bFt1XT1uZXcgQXJyYXkobSksXz1zW3VdPW5ldyBBcnJheShtKTtuKGgsZCxnLF8sY1t1XT1uZXcgQXJyYXkocCksZixlKTtmb3IodmFyIHksdixiPTAseD0wO2I8bTsrK2IpaWYoeT1nW2JdKXtmb3IoYj49eCYmKHg9YisxKTshKHY9X1t4XSkmJisreDxtOyk7eS5fbmV4dD12fHxudWxsfX1yZXR1cm4ocz1uZXcgT2l0KHMsaSkpLl9lbnRlcj1sLHMuX2V4aXQ9YyxzfSxlbnRlcjpmdW5jdGlvbiBGaXQoKXtyZXR1cm4gbmV3IE9pdCh0aGlzLl9lbnRlcnx8dGhpcy5fZ3JvdXBzLm1hcChIbnQpLHRoaXMuX3BhcmVudHMpfSxleGl0OmZ1bmN0aW9uIFZpdCgpe3JldHVybiBuZXcgT2l0KHRoaXMuX2V4aXR8fHRoaXMuX2dyb3Vwcy5tYXAoSG50KSx0aGlzLl9wYXJlbnRzKX0sam9pbjpmdW5jdGlvbiBVaXQodCxlLG4pe3ZhciBpPXRoaXMuZW50ZXIoKSxyPXRoaXMsbz10aGlzLmV4aXQoKTtyZXR1cm4gaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90KGkpOmkuYXBwZW5kKHQrIiIpLG51bGwhPWUmJihyPWUocikpLG51bGw9PW4/by5yZW1vdmUoKTpuKG8pLGkmJnI/aS5tZXJnZShyKS5vcmRlcigpOnJ9LG1lcmdlOmZ1bmN0aW9uIGppdCh0KXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49dC5fZ3JvdXBzLGk9ZS5sZW5ndGgscj1NYXRoLm1pbihpLG4ubGVuZ3RoKSxvPW5ldyBBcnJheShpKSxhPTA7YTxyOysrYSlmb3IodmFyIHMsbD1lW2FdLGM9blthXSx1PWwubGVuZ3RoLGg9b1thXT1uZXcgQXJyYXkodSksZD0wO2Q8dTsrK2QpKHM9bFtkXXx8Y1tkXSkmJihoW2RdPXMpO2Zvcig7YTxpOysrYSlvW2FdPWVbYV07cmV0dXJuIG5ldyBPaXQobyx0aGlzLl9wYXJlbnRzKX0sb3JkZXI6ZnVuY3Rpb24gR2l0KCl7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPS0xLG49dC5sZW5ndGg7KytlPG47KWZvcih2YXIgaSxyPXRbZV0sbz1yLmxlbmd0aC0xLGE9cltvXTstLW8+PTA7KShpPXJbb10pJiYoYSYmNF5pLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGEpJiZhLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGksYSksYT1pKTtyZXR1cm4gdGhpc30sc29ydDpmdW5jdGlvbiBXaXQodCl7ZnVuY3Rpb24gZShlLG4pe3JldHVybiBlJiZuP3QoZS5fX2RhdGFfXyxuLl9fZGF0YV9fKTohZS0hbn10fHwodD1qbnQpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxyPW5ldyBBcnJheShpKSxvPTA7bzxpOysrbyl7Zm9yKHZhciBhLHM9bltvXSxsPXMubGVuZ3RoLGM9cltvXT1uZXcgQXJyYXkobCksdT0wO3U8bDsrK3UpKGE9c1t1XSkmJihjW3VdPWEpO2Muc29ydChlKX1yZXR1cm4gbmV3IE9pdChyLHRoaXMuX3BhcmVudHMpLm9yZGVyKCl9LGNhbGw6ZnVuY3Rpb24gcWl0KCl7dmFyIHQ9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyx0LmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfSxub2RlczpmdW5jdGlvbiBZaXQoKXt2YXIgdD1uZXcgQXJyYXkodGhpcy5zaXplKCkpLGU9LTE7cmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oKXt0WysrZV09dGhpc30pKSx0fSxub2RlOmZ1bmN0aW9uIFhpdCgpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT0wLG49dC5sZW5ndGg7ZTxuOysrZSlmb3IodmFyIGk9dFtlXSxyPTAsbz1pLmxlbmd0aDtyPG87KytyKXt2YXIgYT1pW3JdO2lmKGEpcmV0dXJuIGF9cmV0dXJuIG51bGx9LHNpemU6ZnVuY3Rpb24gJGl0KCl7dmFyIHQ9MDtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpeysrdH0pKSx0fSxlbXB0eTpmdW5jdGlvbiBLaXQoKXtyZXR1cm4hdGhpcy5ub2RlKCl9LGVhY2g6ZnVuY3Rpb24gWml0KHQpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj0wLGk9ZS5sZW5ndGg7bjxpOysrbilmb3IodmFyIHIsbz1lW25dLGE9MCxzPW8ubGVuZ3RoO2E8czsrK2EpKHI9b1thXSkmJnQuY2FsbChyLHIuX19kYXRhX18sYSxvKTtyZXR1cm4gdGhpc30sYXR0cjpmdW5jdGlvbiBKaXQodCxlKXt2YXIgbj1MbnQodCk7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgaT10aGlzLm5vZGUoKTtyZXR1cm4gbi5sb2NhbD9pLmdldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCk6aS5nZXRBdHRyaWJ1dGUobil9cmV0dXJuIHRoaXMuZWFjaCgobnVsbD09ZT9uLmxvY2FsP1dudDpHbnQ6ImZ1bmN0aW9uIj09dHlwZW9mIGU/bi5sb2NhbD8kbnQ6WG50Om4ubG9jYWw/WW50OnFudCkobixlKSl9LHN0eWxlOmZ1bmN0aW9uIFFpdCh0LGUsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PWU/Wm50OiJmdW5jdGlvbiI9PXR5cGVvZiBlP1FudDpKbnQpKHQsZSxudWxsPT1uPyIiOm4pKTp0aXQodGhpcy5ub2RlKCksdCl9LHByb3BlcnR5OmZ1bmN0aW9uIHRydCh0LGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChudWxsPT1lP2VpdDoiZnVuY3Rpb24iPT10eXBlb2YgZT9paXQ6bml0KSh0LGUpKTp0aGlzLm5vZGUoKVt0XX0sY2xhc3NlZDpmdW5jdGlvbiBlcnQodCxlKXt2YXIgbj1yaXQodCsiIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIGk9b2l0KHRoaXMubm9kZSgpKSxyPS0xLG89bi5sZW5ndGg7KytyPG87KWlmKCFpLmNvbnRhaW5zKG5bcl0pKXJldHVybiExO3JldHVybiEwfXJldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBlP2hpdDplP2NpdDp1aXQpKG4sZSkpfSx0ZXh0OmZ1bmN0aW9uIG5ydCh0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2gobnVsbD09dD9kaXQ6KCJmdW5jdGlvbiI9PXR5cGVvZiB0P2ZpdDpwaXQpKHQpKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH0saHRtbDpmdW5jdGlvbiBpcnQodCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PXQ/bWl0OigiZnVuY3Rpb24iPT10eXBlb2YgdD9faXQ6Z2l0KSh0KSk6dGhpcy5ub2RlKCkuaW5uZXJIVE1MfSxyYWlzZTpmdW5jdGlvbiBycnQoKXtyZXR1cm4gdGhpcy5lYWNoKHlpdCl9LGxvd2VyOmZ1bmN0aW9uIG9ydCgpe3JldHVybiB0aGlzLmVhY2godml0KX0sYXBwZW5kOmZ1bmN0aW9uIGFydCh0KXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkludCh0KTtyZXR1cm4gdGhpcy5zZWxlY3QoKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQoZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSkpfSxpbnNlcnQ6ZnVuY3Rpb24gc3J0KHQsZSl7dmFyIG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpJbnQodCksaT1udWxsPT1lP2JpdDoiZnVuY3Rpb24iPT10eXBlb2YgZT9lOlJudChlKTtyZXR1cm4gdGhpcy5zZWxlY3QoKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKG4uYXBwbHkodGhpcyxhcmd1bWVudHMpLGkuYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxsKX0pKX0scmVtb3ZlOmZ1bmN0aW9uIGxydCgpe3JldHVybiB0aGlzLmVhY2goeGl0KX0sY2xvbmU6ZnVuY3Rpb24gY3J0KHQpe3JldHVybiB0aGlzLnNlbGVjdCh0P1NpdDp3aXQpfSxkYXR1bTpmdW5jdGlvbiB1cnQodCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iLHQpOnRoaXMubm9kZSgpLl9fZGF0YV9ffSxvbjpmdW5jdGlvbiBocnQodCxlLG4pe3ZhciBpLHIsbz1DaXQodCsiIiksYT1vLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2ZvcihzPWU/a2l0OkFpdCxudWxsPT1uJiYobj0hMSksaT0wO2k8YTsrK2kpdGhpcy5lYWNoKHMob1tpXSxlLG4pKTtyZXR1cm4gdGhpc312YXIgcz10aGlzLm5vZGUoKS5fX29uO2lmKHMpZm9yKHZhciBsLGM9MCx1PXMubGVuZ3RoO2M8dTsrK2MpZm9yKGk9MCxsPXNbY107aTxhOysraSlpZigocj1vW2ldKS50eXBlPT09bC50eXBlJiZyLm5hbWU9PT1sLm5hbWUpcmV0dXJuIGwudmFsdWV9LGRpc3BhdGNoOmZ1bmN0aW9uIGRydCh0LGUpe3JldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBlP05pdDpQaXQpKHQsZSkpfX07dmFyIHBydD17dmFsdWU6ZnVuY3Rpb24oKXt9fTtmdW5jdGlvbiBmcnQoKXtmb3IodmFyIHQsZT0wLG49YXJndW1lbnRzLmxlbmd0aCxpPXt9O2U8bjsrK2Upe2lmKCEodD1hcmd1bWVudHNbZV0rIiIpfHx0IGluIGl8fC9bXHMuXS8udGVzdCh0KSl0aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgdHlwZTogIit0KTtpW3RdPVtdfXJldHVybiBuZXcgbXJ0KGkpfWZ1bmN0aW9uIG1ydCh0KXt0aGlzLl89dH1mdW5jdGlvbiBncnQodCxlKXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLykubWFwKChmdW5jdGlvbih0KXt2YXIgbj0iIixpPXQuaW5kZXhPZigiLiIpO2lmKGk+PTAmJihuPXQuc2xpY2UoaSsxKSx0PXQuc2xpY2UoMCxpKSksdCYmIWUuaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7cmV0dXJue3R5cGU6dCxuYW1lOm59fSkpfWZ1bmN0aW9uIF9ydCh0LGUpe2Zvcih2YXIgbixpPTAscj10Lmxlbmd0aDtpPHI7KytpKWlmKChuPXRbaV0pLm5hbWU9PT1lKXJldHVybiBuLnZhbHVlfWZ1bmN0aW9uIHlydCh0LGUsbil7Zm9yKHZhciBpPTAscj10Lmxlbmd0aDtpPHI7KytpKWlmKHRbaV0ubmFtZT09PWUpe3RbaV09cHJ0LHQ9dC5zbGljZSgwLGkpLmNvbmNhdCh0LnNsaWNlKGkrMSkpO2JyZWFrfXJldHVybiBudWxsIT1uJiZ0LnB1c2goe25hbWU6ZSx2YWx1ZTpufSksdH1tcnQucHJvdG90eXBlPWZydC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOm1ydCxvbjpmdW5jdGlvbih0LGUpe3ZhciBuLGk9dGhpcy5fLHI9Z3J0KHQrIiIsaSksbz0tMSxhPXIubGVuZ3RoO2lmKCEoYXJndW1lbnRzLmxlbmd0aDwyKSl7aWYobnVsbCE9ZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrOiAiK2UpO2Zvcig7KytvPGE7KWlmKG49KHQ9cltvXSkudHlwZSlpW25dPXlydChpW25dLHQubmFtZSxlKTtlbHNlIGlmKG51bGw9PWUpZm9yKG4gaW4gaSlpW25dPXlydChpW25dLHQubmFtZSxudWxsKTtyZXR1cm4gdGhpc31mb3IoOysrbzxhOylpZigobj0odD1yW29dKS50eXBlKSYmKG49X3J0KGlbbl0sdC5uYW1lKSkpcmV0dXJuIG59LGNvcHk6ZnVuY3Rpb24oKXt2YXIgdD17fSxlPXRoaXMuXztmb3IodmFyIG4gaW4gZSl0W25dPWVbbl0uc2xpY2UoKTtyZXR1cm4gbmV3IG1ydCh0KX0sY2FsbDpmdW5jdGlvbih0LGUpe2lmKChuPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIG4saSxyPW5ldyBBcnJheShuKSxvPTA7bzxuOysrbylyW29dPWFyZ3VtZW50c1tvKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7Zm9yKG89MCxuPShpPXRoaXMuX1t0XSkubGVuZ3RoO288bjsrK28paVtvXS52YWx1ZS5hcHBseShlLHIpfSxhcHBseTpmdW5jdGlvbih0LGUsbil7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtmb3IodmFyIGk9dGhpcy5fW3RdLHI9MCxvPWkubGVuZ3RoO3I8bzsrK3IpaVtyXS52YWx1ZS5hcHBseShlLG4pfX07dmFyIHZydCxicnQseHJ0PTAsd3J0PTAsU3J0PTAsTXJ0PTAsRXJ0PTAsVHJ0PTAsQ3J0PSJvYmplY3QiPT10eXBlb2YgcGVyZm9ybWFuY2UmJnBlcmZvcm1hbmNlLm5vdz9wZXJmb3JtYW5jZTpEYXRlLEFydD0ib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbih0KXtzZXRUaW1lb3V0KHQsMTcpfTtmdW5jdGlvbiBrcnQoKXtyZXR1cm4gRXJ0fHwoQXJ0KExydCksRXJ0PUNydC5ub3coKStUcnQpfWZ1bmN0aW9uIExydCgpe0VydD0wfWZ1bmN0aW9uIFBydCgpe3RoaXMuX2NhbGw9dGhpcy5fdGltZT10aGlzLl9uZXh0PW51bGx9ZnVuY3Rpb24gTnJ0KHQsZSxuKXt2YXIgaT1uZXcgUHJ0O3JldHVybiBpLnJlc3RhcnQodCxlLG4pLGl9ZnVuY3Rpb24gSXJ0KCl7RXJ0PShNcnQ9Q3J0Lm5vdygpKStUcnQseHJ0PXdydD0wO3RyeXshKGZ1bmN0aW9uIHQoKXtrcnQoKSwrK3hydDtmb3IodmFyIHQsZT12cnQ7ZTspKHQ9RXJ0LWUuX3RpbWUpPj0wJiZlLl9jYWxsLmNhbGwobnVsbCx0KSxlPWUuX25leHQ7LS14cnR9KSgpfWZpbmFsbHl7eHJ0PTAsKGZ1bmN0aW9uIGUoKXtmb3IodmFyIHQsZSxuPXZydCxpPTEvMDtuOyluLl9jYWxsPyhpPm4uX3RpbWUmJihpPW4uX3RpbWUpLHQ9bixuPW4uX25leHQpOihlPW4uX25leHQsbi5fbmV4dD1udWxsLG49dD90Ll9uZXh0PWU6dnJ0PWUpO2JydD10LFJydChpKX0pKCksRXJ0PTB9fWZ1bmN0aW9uIE9ydCgpe3ZhciB0PUNydC5ub3coKSxlPXQtTXJ0O2U+MWUzJiYoVHJ0LT1lLE1ydD10KX1mdW5jdGlvbiBScnQodCl7eHJ0fHwod3J0JiYod3J0PWNsZWFyVGltZW91dCh3cnQpKSx0LUVydD4yND8odDwxLzAmJih3cnQ9c2V0VGltZW91dChJcnQsdC1DcnQubm93KCktVHJ0KSksU3J0JiYoU3J0PWNsZWFySW50ZXJ2YWwoU3J0KSkpOihTcnR8fChNcnQ9Q3J0Lm5vdygpLFNydD1zZXRJbnRlcnZhbChPcnQsMWUzKSkseHJ0PTEsQXJ0KElydCkpKX1mdW5jdGlvbiB6cnQodCxlLG4pe3ZhciBpPW5ldyBQcnQ7cmV0dXJuIGkucmVzdGFydCgoZnVuY3Rpb24obil7aS5zdG9wKCksdChuK2UpfSksZT1udWxsPT1lPzA6K2UsbiksaX1QcnQucHJvdG90eXBlPU5ydC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlBydCxyZXN0YXJ0OmZ1bmN0aW9uKHQsZSxuKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiIpO249KG51bGw9PW4/a3J0KCk6K24pKyhudWxsPT1lPzA6K2UpLHRoaXMuX25leHR8fGJydD09PXRoaXN8fChicnQ/YnJ0Ll9uZXh0PXRoaXM6dnJ0PXRoaXMsYnJ0PXRoaXMpLHRoaXMuX2NhbGw9dCx0aGlzLl90aW1lPW4sUnJ0KCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLFJydCgpKX19O3ZhciBEcnQ9ZnJ0KCJzdGFydCIsImVuZCIsImludGVycnVwdCIpLEJydD1bXTtmdW5jdGlvbiBIcnQodCxlLG4saSxyLG8pe3ZhciBhPXQuX190cmFuc2l0aW9uO2lmKGEpe2lmKG4gaW4gYSlyZXR1cm59ZWxzZSB0Ll9fdHJhbnNpdGlvbj17fTshKGZ1bmN0aW9uIHModCxlLG4pe3ZhciBpLHI9dC5fX3RyYW5zaXRpb247ZnVuY3Rpb24gbyhsKXt2YXIgYyx1LGgsZDtpZigxIT09bi5zdGF0ZSlyZXR1cm4gcygpO2ZvcihjIGluIHIpaWYoKGQ9cltjXSkubmFtZT09PW4ubmFtZSl7aWYoMz09PWQuc3RhdGUpcmV0dXJuIHpydChvKTs0PT09ZC5zdGF0ZT8oZC5zdGF0ZT02LGQudGltZXIuc3RvcCgpLGQub24uY2FsbCgiaW50ZXJydXB0Iix0LHQuX19kYXRhX18sZC5pbmRleCxkLmdyb3VwKSxkZWxldGUgcltjXSk6K2M8ZSYmKGQuc3RhdGU9NixkLnRpbWVyLnN0b3AoKSxkZWxldGUgcltjXSl9aWYoenJ0KChmdW5jdGlvbigpezM9PT1uLnN0YXRlJiYobi5zdGF0ZT00LG4udGltZXIucmVzdGFydChhLG4uZGVsYXksbi50aW1lKSxhKGwpKX0pKSxuLnN0YXRlPTIsbi5vbi5jYWxsKCJzdGFydCIsdCx0Ll9fZGF0YV9fLG4uaW5kZXgsbi5ncm91cCksMj09PW4uc3RhdGUpe2ZvcihuLnN0YXRlPTMsaT1uZXcgQXJyYXkoaD1uLnR3ZWVuLmxlbmd0aCksYz0wLHU9LTE7YzxoOysrYykoZD1uLnR3ZWVuW2NdLnZhbHVlLmNhbGwodCx0Ll9fZGF0YV9fLG4uaW5kZXgsbi5ncm91cCkpJiYoaVsrK3VdPWQpO2kubGVuZ3RoPXUrMX19ZnVuY3Rpb24gYShlKXtmb3IodmFyIHI9ZTxuLmR1cmF0aW9uP24uZWFzZS5jYWxsKG51bGwsZS9uLmR1cmF0aW9uKToobi50aW1lci5yZXN0YXJ0KHMpLG4uc3RhdGU9NSwxKSxvPS0xLGE9aS5sZW5ndGg7KytvPGE7KWlbb10uY2FsbChudWxsLHIpOzU9PT1uLnN0YXRlJiYobi5vbi5jYWxsKCJlbmQiLHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApLHMoKSl9ZnVuY3Rpb24gcygpe2Zvcih2YXIgaSBpbiBuLnN0YXRlPTYsbi50aW1lci5zdG9wKCksZGVsZXRlIHJbZV0scilyZXR1cm47ZGVsZXRlIHQuX190cmFuc2l0aW9ufXJbZV09bixuLnRpbWVyPU5ydCgoZnVuY3Rpb24gbCh0KXtuLnN0YXRlPTEsbi50aW1lci5yZXN0YXJ0KG8sbi5kZWxheSxuLnRpbWUpLG4uZGVsYXk8PXQmJm8odC1uLmRlbGF5KX0pLDAsbi50aW1lKX0pKHQsbix7bmFtZTplLGluZGV4OmksZ3JvdXA6cixvbjpEcnQsdHdlZW46QnJ0LHRpbWU6by50aW1lLGRlbGF5Om8uZGVsYXksZHVyYXRpb246by5kdXJhdGlvbixlYXNlOm8uZWFzZSx0aW1lcjpudWxsLHN0YXRlOjB9KX1mdW5jdGlvbiBGcnQodCxlKXt2YXIgbj1VcnQodCxlKTtpZihuLnN0YXRlPjApdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBzY2hlZHVsZWQiKTtyZXR1cm4gbn1mdW5jdGlvbiBWcnQodCxlKXt2YXIgbj1VcnQodCxlKTtpZihuLnN0YXRlPjIpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBzdGFydGVkIik7cmV0dXJuIG59ZnVuY3Rpb24gVXJ0KHQsZSl7dmFyIG49dC5fX3RyYW5zaXRpb247aWYoIW58fCEobj1uW2VdKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJuIG59ZnVuY3Rpb24ganJ0KHQsZSl7dmFyIG4saSxyLG89dC5fX3RyYW5zaXRpb24sYT0hMDtpZihvKXtmb3IociBpbiBlPW51bGw9PWU/bnVsbDplKyIiLG8pKG49b1tyXSkubmFtZT09PWU/KGk9bi5zdGF0ZT4yJiZuLnN0YXRlPDUsbi5zdGF0ZT02LG4udGltZXIuc3RvcCgpLGkmJm4ub24uY2FsbCgiaW50ZXJydXB0Iix0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxkZWxldGUgb1tyXSk6YT0hMTthJiZkZWxldGUgdC5fX3RyYW5zaXRpb259fWZ1bmN0aW9uIEdydCh0LGUsbil7dC5wcm90b3R5cGU9ZS5wcm90b3R5cGU9bixuLmNvbnN0cnVjdG9yPXR9ZnVuY3Rpb24gV3J0KHQsZSl7dmFyIG49T2JqZWN0LmNyZWF0ZSh0LnByb3RvdHlwZSk7Zm9yKHZhciBpIGluIGUpbltpXT1lW2ldO3JldHVybiBufWZ1bmN0aW9uIHFydCgpe312YXIgWXJ0PS43LFhydD0xL1lydCwkcnQ9IlxccyooWystXT9cXGQrKVxccyoiLEtydD0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixacnQ9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pJVxccyoiLEpydD0vXiMoWzAtOWEtZl17Myw4fSkkLyxRcnQ9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrWyRydCwkcnQsJHJ0XSsiXFwpJCIpLHRvdD1uZXcgUmVnRXhwKCJecmdiXFwoIitbWnJ0LFpydCxacnRdKyJcXCkkIiksZW90PW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbJHJ0LCRydCwkcnQsS3J0XSsiXFwpJCIpLG5vdD1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW1pydCxacnQsWnJ0LEtydF0rIlxcKSQiKSxpb3Q9bmV3IFJlZ0V4cCgiXmhzbFxcKCIrW0tydCxacnQsWnJ0XSsiXFwpJCIpLHJvdD1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrW0tydCxacnQsWnJ0LEtydF0rIlxcKSQiKSxvb3Q9e2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH07ZnVuY3Rpb24gYW90KCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4KCl9ZnVuY3Rpb24gc290KCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCl9ZnVuY3Rpb24gbG90KHQpe3ZhciBlLG47cmV0dXJuIHQ9KHQrIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLChlPUpydC5leGVjKHQpKT8obj1lWzFdLmxlbmd0aCxlPXBhcnNlSW50KGVbMV0sMTYpLDY9PT1uP2NvdChlKTozPT09bj9uZXcgcG90KGU+PjgmMTV8ZT4+NCYyNDAsZT4+NCYxNXwyNDAmZSwoMTUmZSk8PDR8MTUmZSwxKTo4PT09bj91b3QoZT4+MjQmMjU1LGU+PjE2JjI1NSxlPj44JjI1NSwoMjU1JmUpLzI1NSk6ND09PW4/dW90KGU+PjEyJjE1fGU+PjgmMjQwLGU+PjgmMTV8ZT4+NCYyNDAsZT4+NCYxNXwyNDAmZSwoKDE1JmUpPDw0fDE1JmUpLzI1NSk6bnVsbCk6KGU9UXJ0LmV4ZWModCkpP25ldyBwb3QoZVsxXSxlWzJdLGVbM10sMSk6KGU9dG90LmV4ZWModCkpP25ldyBwb3QoMjU1KmVbMV0vMTAwLDI1NSplWzJdLzEwMCwyNTUqZVszXS8xMDAsMSk6KGU9ZW90LmV4ZWModCkpP3VvdChlWzFdLGVbMl0sZVszXSxlWzRdKTooZT1ub3QuZXhlYyh0KSk/dW90KDI1NSplWzFdLzEwMCwyNTUqZVsyXS8xMDAsMjU1KmVbM10vMTAwLGVbNF0pOihlPWlvdC5leGVjKHQpKT9fb3QoZVsxXSxlWzJdLzEwMCxlWzNdLzEwMCwxKTooZT1yb3QuZXhlYyh0KSk/X290KGVbMV0sZVsyXS8xMDAsZVszXS8xMDAsZVs0XSk6b290Lmhhc093blByb3BlcnR5KHQpP2NvdChvb3RbdF0pOiJ0cmFuc3BhcmVudCI9PT10P25ldyBwb3QoTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiBjb3QodCl7cmV0dXJuIG5ldyBwb3QodD4+MTYmMjU1LHQ+PjgmMjU1LDI1NSZ0LDEpfWZ1bmN0aW9uIHVvdCh0LGUsbixpKXtyZXR1cm4gaTw9MCYmKHQ9ZT1uPU5hTiksbmV3IHBvdCh0LGUsbixpKX1mdW5jdGlvbiBob3QodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBxcnR8fCh0PWxvdCh0KSksdD9uZXcgcG90KCh0PXQucmdiKCkpLnIsdC5nLHQuYix0Lm9wYWNpdHkpOm5ldyBwb3R9ZnVuY3Rpb24gZG90KHQsZSxuLGkpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9ob3QodCk6bmV3IHBvdCh0LGUsbixudWxsPT1pPzE6aSl9ZnVuY3Rpb24gcG90KHQsZSxuLGkpe3RoaXMucj0rdCx0aGlzLmc9K2UsdGhpcy5iPStuLHRoaXMub3BhY2l0eT0raX1mdW5jdGlvbiBmb3QoKXtyZXR1cm4iIyIrZ290KHRoaXMucikrZ290KHRoaXMuZykrZ290KHRoaXMuYil9ZnVuY3Rpb24gbW90KCl7dmFyIHQ9dGhpcy5vcGFjaXR5O3JldHVybigxPT09KHQ9aXNOYU4odCk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsdCkpKT8icmdiKCI6InJnYmEoIikrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLnIpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuZyl8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5iKXx8MCkpKygxPT09dD8iKSI6IiwgIit0KyIpIil9ZnVuY3Rpb24gZ290KHQpe3JldHVybigodD1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHQpfHwwKSkpPDE2PyIwIjoiIikrdC50b1N0cmluZygxNil9ZnVuY3Rpb24gX290KHQsZSxuLGkpe3JldHVybiBpPD0wP3Q9ZT1uPU5hTjpuPD0wfHxuPj0xP3Q9ZT1OYU46ZTw9MCYmKHQ9TmFOKSxuZXcgdm90KHQsZSxuLGkpfWZ1bmN0aW9uIHlvdCh0KXtpZih0IGluc3RhbmNlb2Ygdm90KXJldHVybiBuZXcgdm90KHQuaCx0LnMsdC5sLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIHFydHx8KHQ9bG90KHQpKSwhdClyZXR1cm4gbmV3IHZvdDtpZih0IGluc3RhbmNlb2Ygdm90KXJldHVybiB0O3ZhciBlPSh0PXQucmdiKCkpLnIvMjU1LG49dC5nLzI1NSxpPXQuYi8yNTUscj1NYXRoLm1pbihlLG4saSksbz1NYXRoLm1heChlLG4saSksYT1OYU4scz1vLXIsbD0obytyKS8yO3JldHVybiBzPyhhPWU9PT1vPyhuLWkpL3MrNioobjxpKTpuPT09bz8oaS1lKS9zKzI6KGUtbikvcys0LHMvPWw8LjU/bytyOjItby1yLGEqPTYwKTpzPWw+MCYmbDwxPzA6YSxuZXcgdm90KGEscyxsLHQub3BhY2l0eSl9ZnVuY3Rpb24gdm90KHQsZSxuLGkpe3RoaXMuaD0rdCx0aGlzLnM9K2UsdGhpcy5sPStuLHRoaXMub3BhY2l0eT0raX1mdW5jdGlvbiBib3QodCxlLG4pe3JldHVybiAyNTUqKHQ8NjA/ZSsobi1lKSp0LzYwOnQ8MTgwP246dDwyNDA/ZSsobi1lKSooMjQwLXQpLzYwOmUpfWZ1bmN0aW9uIHhvdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gd290KHQsZSl7dmFyIG49ZS10O3JldHVybiBuPyhmdW5jdGlvbiBpKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0K24qZX19KSh0LG4pOnhvdChpc05hTih0KT9lOnQpfUdydChxcnQsbG90LHtjb3B5OmZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsdCl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OmFvdCxmb3JtYXRIZXg6YW90LGZvcm1hdEhzbDpmdW5jdGlvbiBTb3QoKXtyZXR1cm4geW90KHRoaXMpLmZvcm1hdEhzbCgpfSxmb3JtYXRSZ2I6c290LHRvU3RyaW5nOnNvdH0pLEdydChwb3QsZG90LFdydChxcnQse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/WHJ0Ok1hdGgucG93KFhydCx0KSxuZXcgcG90KHRoaXMucip0LHRoaXMuZyp0LHRoaXMuYip0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P1lydDpNYXRoLnBvdyhZcnQsdCksbmV3IHBvdCh0aGlzLnIqdCx0aGlzLmcqdCx0aGlzLmIqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4tLjU8PXRoaXMuciYmdGhpcy5yPDI1NS41JiYtLjU8PXRoaXMuZyYmdGhpcy5nPDI1NS41JiYtLjU8PXRoaXMuYiYmdGhpcy5iPDI1NS41JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4OmZvdCxmb3JtYXRIZXg6Zm90LGZvcm1hdFJnYjptb3QsdG9TdHJpbmc6bW90fSkpLEdydCh2b3QsKGZ1bmN0aW9uIE1vdCh0LGUsbixpKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/eW90KHQpOm5ldyB2b3QodCxlLG4sbnVsbD09aT8xOmkpfSksV3J0KHFydCx7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD9YcnQ6TWF0aC5wb3coWHJ0LHQpLG5ldyB2b3QodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD9ZcnQ6TWF0aC5wb3coWXJ0LHQpLG5ldyB2b3QodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmglMzYwKzM2MCoodGhpcy5oPDApLGU9aXNOYU4odCl8fGlzTmFOKHRoaXMucyk/MDp0aGlzLnMsbj10aGlzLmwsaT1uKyhuPC41P246MS1uKSplLHI9MipuLWk7cmV0dXJuIG5ldyBwb3QoYm90KHQ+PTI0MD90LTI0MDp0KzEyMCxyLGkpLGJvdCh0LHIsaSksYm90KHQ8MTIwP3QrMjQwOnQtMTIwLHIsaSksdGhpcy5vcGFjaXR5KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGZvcm1hdEhzbDpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3BhY2l0eTtyZXR1cm4oMT09PSh0PWlzTmFOKHQpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLHQpKSk/ImhzbCgiOiJoc2xhKCIpKyh0aGlzLmh8fDApKyIsICIrMTAwKih0aGlzLnN8fDApKyIlLCAiKzEwMCoodGhpcy5sfHwwKSsiJSIrKDE9PT10PyIpIjoiLCAiK3QrIikiKX19KSk7dmFyIEVvdD0oZnVuY3Rpb24gdChlKXt2YXIgbj0oZnVuY3Rpb24gaSh0KXtyZXR1cm4gMT09KHQ9K3QpP3dvdDpmdW5jdGlvbihlLG4pe3JldHVybiBuLWU/KGZ1bmN0aW9uIGkodCxlLG4pe3JldHVybiB0PU1hdGgucG93KHQsbiksZT1NYXRoLnBvdyhlLG4pLXQsbj0xL24sZnVuY3Rpb24oaSl7cmV0dXJuIE1hdGgucG93KHQraSplLG4pfX0pKGUsbix0KTp4b3QoaXNOYU4oZSk/bjplKX19KShlKTtmdW5jdGlvbiByKHQsZSl7dmFyIGk9bigodD1kb3QodCkpLnIsKGU9ZG90KGUpKS5yKSxyPW4odC5nLGUuZyksbz1uKHQuYixlLmIpLGE9d290KHQub3BhY2l0eSxlLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC5yPWkoZSksdC5nPXIoZSksdC5iPW8oZSksdC5vcGFjaXR5PWEoZSksdCsiIn19cmV0dXJuIHIuZ2FtbWE9dCxyfSkoMSk7ZnVuY3Rpb24gVG90KHQsZSl7cmV0dXJuIHQ9K3QsZT0rZSxmdW5jdGlvbihuKXtyZXR1cm4gdCooMS1uKStlKm59fXZhciBDb3Q9L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLEFvdD1uZXcgUmVnRXhwKENvdC5zb3VyY2UsImciKTtmdW5jdGlvbiBrb3QodCxlKXt2YXIgbixpLHIsbz1Db3QubGFzdEluZGV4PUFvdC5sYXN0SW5kZXg9MCxhPS0xLHM9W10sbD1bXTtmb3IodCs9IiIsZSs9IiI7KG49Q290LmV4ZWModCkpJiYoaT1Bb3QuZXhlYyhlKSk7KShyPWkuaW5kZXgpPm8mJihyPWUuc2xpY2UobyxyKSxzW2FdP3NbYV0rPXI6c1srK2FdPXIpLChuPW5bMF0pPT09KGk9aVswXSk/c1thXT9zW2FdKz1pOnNbKythXT1pOihzWysrYV09bnVsbCxsLnB1c2goe2k6YSx4OlRvdChuLGkpfSkpLG89QW90Lmxhc3RJbmRleDtyZXR1cm4gbzxlLmxlbmd0aCYmKHI9ZS5zbGljZShvKSxzW2FdP3NbYV0rPXI6c1srK2FdPXIpLHMubGVuZ3RoPDI/bFswXT8oZnVuY3Rpb24gYyh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSkrIiJ9fSkobFswXS54KTooZnVuY3Rpb24gdSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19KShlKTooZT1sLmxlbmd0aCxmdW5jdGlvbih0KXtmb3IodmFyIG4saT0wO2k8ZTsrK2kpc1sobj1sW2ldKS5pXT1uLngodCk7cmV0dXJuIHMuam9pbigiIil9KX12YXIgTG90LFBvdCxOb3QsSW90LE9vdD0xODAvTWF0aC5QSSxSb3Q9e3RyYW5zbGF0ZVg6MCx0cmFuc2xhdGVZOjAscm90YXRlOjAsc2tld1g6MCxzY2FsZVg6MSxzY2FsZVk6MX07ZnVuY3Rpb24gem90KHQsZSxuLGkscixvKXt2YXIgYSxzLGw7cmV0dXJuKGE9TWF0aC5zcXJ0KHQqdCtlKmUpKSYmKHQvPWEsZS89YSksKGw9dCpuK2UqaSkmJihuLT10KmwsaS09ZSpsKSwocz1NYXRoLnNxcnQobipuK2kqaSkpJiYobi89cyxpLz1zLGwvPXMpLHQqaTxlKm4mJih0PS10LGU9LWUsbD0tbCxhPS1hKSx7dHJhbnNsYXRlWDpyLHRyYW5zbGF0ZVk6byxyb3RhdGU6TWF0aC5hdGFuMihlLHQpKk9vdCxza2V3WDpNYXRoLmF0YW4obCkqT290LHNjYWxlWDphLHNjYWxlWTpzfX1mdW5jdGlvbiBEb3QodCxlLG4saSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gdC5sZW5ndGg/dC5wb3AoKSsiICI6IiJ9cmV0dXJuIGZ1bmN0aW9uKG8sYSl7dmFyIHM9W10sbD1bXTtyZXR1cm4gbz10KG8pLGE9dChhKSwoZnVuY3Rpb24gYyh0LGkscixvLGEscyl7aWYodCE9PXJ8fGkhPT1vKXt2YXIgbD1hLnB1c2goInRyYW5zbGF0ZSgiLG51bGwsZSxudWxsLG4pO3MucHVzaCh7aTpsLTQseDpUb3QodCxyKX0se2k6bC0yLHg6VG90KGksbyl9KX1lbHNlKHJ8fG8pJiZhLnB1c2goInRyYW5zbGF0ZSgiK3IrZStvK24pfSkoby50cmFuc2xhdGVYLG8udHJhbnNsYXRlWSxhLnRyYW5zbGF0ZVgsYS50cmFuc2xhdGVZLHMsbCksKGZ1bmN0aW9uIHUodCxlLG4sbyl7dCE9PWU/KHQtZT4xODA/ZSs9MzYwOmUtdD4xODAmJih0Kz0zNjApLG8ucHVzaCh7aTpuLnB1c2gocihuKSsicm90YXRlKCIsbnVsbCxpKS0yLHg6VG90KHQsZSl9KSk6ZSYmbi5wdXNoKHIobikrInJvdGF0ZSgiK2UraSl9KShvLnJvdGF0ZSxhLnJvdGF0ZSxzLGwpLChmdW5jdGlvbiBoKHQsZSxuLG8pe3QhPT1lP28ucHVzaCh7aTpuLnB1c2gocihuKSsic2tld1goIixudWxsLGkpLTIseDpUb3QodCxlKX0pOmUmJm4ucHVzaChyKG4pKyJza2V3WCgiK2UraSl9KShvLnNrZXdYLGEuc2tld1gscyxsKSwoZnVuY3Rpb24gZCh0LGUsbixpLG8sYSl7aWYodCE9PW58fGUhPT1pKXt2YXIgcz1vLnB1c2gocihvKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7YS5wdXNoKHtpOnMtNCx4OlRvdCh0LG4pfSx7aTpzLTIseDpUb3QoZSxpKX0pfWVsc2UgMT09PW4mJjE9PT1pfHxvLnB1c2gocihvKSsic2NhbGUoIituKyIsIitpKyIpIil9KShvLnNjYWxlWCxvLnNjYWxlWSxhLnNjYWxlWCxhLnNjYWxlWSxzLGwpLG89YT1udWxsLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPS0xLGk9bC5sZW5ndGg7KytuPGk7KXNbKGU9bFtuXSkuaV09ZS54KHQpO3JldHVybiBzLmpvaW4oIiIpfX19dmFyIEJvdD1Eb3QoKGZ1bmN0aW9uIEhvdCh0KXtyZXR1cm4ibm9uZSI9PT10P1JvdDooTG90fHwoTG90PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLFBvdD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsTm90PWRvY3VtZW50LmRlZmF1bHRWaWV3KSxMb3Quc3R5bGUudHJhbnNmb3JtPXQsdD1Ob3QuZ2V0Q29tcHV0ZWRTdHlsZShQb3QuYXBwZW5kQ2hpbGQoTG90KSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKSxQb3QucmVtb3ZlQ2hpbGQoTG90KSx6b3QoKyh0PXQuc2xpY2UoNywtMSkuc3BsaXQoIiwiKSlbMF0sK3RbMV0sK3RbMl0sK3RbM10sK3RbNF0sK3RbNV0pKX0pLCJweCwgIiwicHgpIiwiZGVnKSIpLEZvdD1Eb3QoKGZ1bmN0aW9uIFZvdCh0KXtyZXR1cm4gbnVsbD09dD9Sb3Q6KElvdHx8KElvdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSxJb3Quc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLHQpLCh0PUlvdC50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0ZSgpKT96b3QoKHQ9dC5tYXRyaXgpLmEsdC5iLHQuYyx0LmQsdC5lLHQuZik6Um90KX0pLCIsICIsIikiLCIpIik7ZnVuY3Rpb24gVW90KHQsZSl7dmFyIG4saTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj1WcnQodGhpcyx0KSxvPXIudHdlZW47aWYobyE9PW4pZm9yKHZhciBhPTAscz0oaT1uPW8pLmxlbmd0aDthPHM7KythKWlmKGlbYV0ubmFtZT09PWUpeyhpPWkuc2xpY2UoKSkuc3BsaWNlKGEsMSk7YnJlYWt9ci50d2Vlbj1pfX1mdW5jdGlvbiBqb3QodCxlLG4pe3ZhciBpLHI7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG4pdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPVZydCh0aGlzLHQpLGE9by50d2VlbjtpZihhIT09aSl7cj0oaT1hKS5zbGljZSgpO2Zvcih2YXIgcz17bmFtZTplLHZhbHVlOm59LGw9MCxjPXIubGVuZ3RoO2w8YzsrK2wpaWYocltsXS5uYW1lPT09ZSl7cltsXT1zO2JyZWFrfWw9PT1jJiZyLnB1c2gocyl9by50d2Vlbj1yfX1mdW5jdGlvbiBHb3QodCxlLG4pe3ZhciBpPXQuX2lkO3JldHVybiB0LmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9VnJ0KHRoaXMsaSk7KHQudmFsdWV8fCh0LnZhbHVlPXt9KSlbZV09bi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSksZnVuY3Rpb24odCl7cmV0dXJuIFVydCh0LGkpLnZhbHVlW2VdfX1mdW5jdGlvbiBXb3QodCxlKXt2YXIgbjtyZXR1cm4oIm51bWJlciI9PXR5cGVvZiBlP1RvdDplIGluc3RhbmNlb2YgbG90P0VvdDoobj1sb3QoZSkpPyhlPW4sRW90KTprb3QpKHQsZSl9ZnVuY3Rpb24gcW90KHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX1mdW5jdGlvbiBZb3QodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpfX1mdW5jdGlvbiBYb3QodCxlLG4pe3ZhciBpLHI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89dGhpcy5nZXRBdHRyaWJ1dGUodCk7cmV0dXJuIG89PT1uP251bGw6bz09PWk/cjpyPWUoaT1vLG4pfX1mdW5jdGlvbiAkb3QodCxlLG4pe3ZhciBpLHI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89dGhpcy5nZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpO3JldHVybiBvPT09bj9udWxsOm89PT1pP3I6cj1lKGk9byxuKX19ZnVuY3Rpb24gS290KHQsZSxuKXt2YXIgaSxyLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGEscz1uKHRoaXMpO2lmKG51bGwhPXMpcmV0dXJuKGE9dGhpcy5nZXRBdHRyaWJ1dGUodCkpPT09cz9udWxsOmE9PT1pJiZzPT09cj9vOm89ZShpPWEscj1zKTt0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX19ZnVuY3Rpb24gWm90KHQsZSxuKXt2YXIgaSxyLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGEscz1uKHRoaXMpO2lmKG51bGwhPXMpcmV0dXJuKGE9dGhpcy5nZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpKT09PXM/bnVsbDphPT09aSYmcz09PXI/bzpvPWUoaT1hLHI9cyk7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpfX1mdW5jdGlvbiBKb3QodCxlKXtmdW5jdGlvbiBuKCl7dmFyIG49dGhpcyxpPWUuYXBwbHkobixhcmd1bWVudHMpO3JldHVybiBpJiZmdW5jdGlvbihlKXtuLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxpKGUpKX19cmV0dXJuIG4uX3ZhbHVlPWUsbn1mdW5jdGlvbiBRb3QodCxlKXtmdW5jdGlvbiBuKCl7dmFyIG49dGhpcyxpPWUuYXBwbHkobixhcmd1bWVudHMpO3JldHVybiBpJiZmdW5jdGlvbihlKXtuLnNldEF0dHJpYnV0ZSh0LGkoZSkpfX1yZXR1cm4gbi5fdmFsdWU9ZSxufWZ1bmN0aW9uIHRhdCh0LGUpe3JldHVybiBmdW5jdGlvbigpe0ZydCh0aGlzLHQpLmRlbGF5PStlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gZWF0KHQsZSl7cmV0dXJuIGU9K2UsZnVuY3Rpb24oKXtGcnQodGhpcyx0KS5kZWxheT1lfX1mdW5jdGlvbiBuYXQodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtWcnQodGhpcyx0KS5kdXJhdGlvbj0rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIGlhdCh0LGUpe3JldHVybiBlPStlLGZ1bmN0aW9uKCl7VnJ0KHRoaXMsdCkuZHVyYXRpb249ZX19ZnVuY3Rpb24gcmF0KHQsZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe1ZydCh0aGlzLHQpLmVhc2U9ZX19ZnVuY3Rpb24gb2F0KHQsZSxuKXt2YXIgaSxyLG89KGZ1bmN0aW9uIGEodCl7cmV0dXJuKHQrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeSgoZnVuY3Rpb24odCl7dmFyIGU9dC5pbmRleE9mKCIuIik7cmV0dXJuIGU+PTAmJih0PXQuc2xpY2UoMCxlKSksIXR8fCJzdGFydCI9PT10fSkpfSkoZSk/RnJ0OlZydDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1vKHRoaXMsdCkscz1hLm9uO3MhPT1pJiYocj0oaT1zKS5jb3B5KCkpLm9uKGUsbiksYS5vbj1yfX12YXIgYWF0PVJpdC5wcm90b3R5cGUuY29uc3RydWN0b3I7ZnVuY3Rpb24gc2F0KHQsZSxuKXtmdW5jdGlvbiBpKCl7dmFyIGk9dGhpcyxyPWUuYXBwbHkoaSxhcmd1bWVudHMpO3JldHVybiByJiZmdW5jdGlvbihlKXtpLnN0eWxlLnNldFByb3BlcnR5KHQscihlKSxuKX19cmV0dXJuIGkuX3ZhbHVlPWUsaX12YXIgbGF0PTA7ZnVuY3Rpb24gY2F0KHQsZSxuLGkpe3RoaXMuX2dyb3Vwcz10LHRoaXMuX3BhcmVudHM9ZSx0aGlzLl9uYW1lPW4sdGhpcy5faWQ9aX1mdW5jdGlvbiB1YXQodCl7cmV0dXJuIFJpdCgpLnRyYW5zaXRpb24odCl9ZnVuY3Rpb24gaGF0KCl7cmV0dXJuKytsYXR9dmFyIGRhdD1SaXQucHJvdG90eXBlO2NhdC5wcm90b3R5cGU9dWF0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6Y2F0LHNlbGVjdDpmdW5jdGlvbiBwYXQodCl7dmFyIGU9dGhpcy5fbmFtZSxuPXRoaXMuX2lkOyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1SbnQodCkpO2Zvcih2YXIgaT10aGlzLl9ncm91cHMscj1pLmxlbmd0aCxvPW5ldyBBcnJheShyKSxhPTA7YTxyOysrYSlmb3IodmFyIHMsbCxjPWlbYV0sdT1jLmxlbmd0aCxoPW9bYV09bmV3IEFycmF5KHUpLGQ9MDtkPHU7KytkKShzPWNbZF0pJiYobD10LmNhbGwocyxzLl9fZGF0YV9fLGQsYykpJiYoIl9fZGF0YV9fImluIHMmJihsLl9fZGF0YV9fPXMuX19kYXRhX18pLGhbZF09bCxIcnQoaFtkXSxlLG4sZCxoLFVydChzLG4pKSk7cmV0dXJuIG5ldyBjYXQobyx0aGlzLl9wYXJlbnRzLGUsbil9LHNlbGVjdEFsbDpmdW5jdGlvbiBmYXQodCl7dmFyIGU9dGhpcy5fbmFtZSxuPXRoaXMuX2lkOyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1EbnQodCkpO2Zvcih2YXIgaT10aGlzLl9ncm91cHMscj1pLmxlbmd0aCxvPVtdLGE9W10scz0wO3M8cjsrK3MpZm9yKHZhciBsLGM9aVtzXSx1PWMubGVuZ3RoLGg9MDtoPHU7KytoKWlmKGw9Y1toXSl7Zm9yKHZhciBkLHA9dC5jYWxsKGwsbC5fX2RhdGFfXyxoLGMpLGY9VXJ0KGwsbiksbT0wLGc9cC5sZW5ndGg7bTxnOysrbSkoZD1wW21dKSYmSHJ0KGQsZSxuLG0scCxmKTtvLnB1c2gocCksYS5wdXNoKGwpfXJldHVybiBuZXcgY2F0KG8sYSxlLG4pfSxmaWx0ZXI6ZnVuY3Rpb24gbWF0KHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1CbnQodCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxpPW5ldyBBcnJheShuKSxyPTA7cjxuOysrcilmb3IodmFyIG8sYT1lW3JdLHM9YS5sZW5ndGgsbD1pW3JdPVtdLGM9MDtjPHM7KytjKShvPWFbY10pJiZ0LmNhbGwobyxvLl9fZGF0YV9fLGMsYSkmJmwucHVzaChvKTtyZXR1cm4gbmV3IGNhdChpLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9LG1lcmdlOmZ1bmN0aW9uIGdhdCh0KXtpZih0Ll9pZCE9PXRoaXMuX2lkKXRocm93IG5ldyBFcnJvcjtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49dC5fZ3JvdXBzLGk9ZS5sZW5ndGgscj1NYXRoLm1pbihpLG4ubGVuZ3RoKSxvPW5ldyBBcnJheShpKSxhPTA7YTxyOysrYSlmb3IodmFyIHMsbD1lW2FdLGM9blthXSx1PWwubGVuZ3RoLGg9b1thXT1uZXcgQXJyYXkodSksZD0wO2Q8dTsrK2QpKHM9bFtkXXx8Y1tkXSkmJihoW2RdPXMpO2Zvcig7YTxpOysrYSlvW2FdPWVbYV07cmV0dXJuIG5ldyBjYXQobyx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfSxzZWxlY3Rpb246ZnVuY3Rpb24gX2F0KCl7cmV0dXJuIG5ldyBhYXQodGhpcy5fZ3JvdXBzLHRoaXMuX3BhcmVudHMpfSx0cmFuc2l0aW9uOmZ1bmN0aW9uIHlhdCgpe2Zvcih2YXIgdD10aGlzLl9uYW1lLGU9dGhpcy5faWQsbj1oYXQoKSxpPXRoaXMuX2dyb3VwcyxyPWkubGVuZ3RoLG89MDtvPHI7KytvKWZvcih2YXIgYSxzPWlbb10sbD1zLmxlbmd0aCxjPTA7YzxsOysrYylpZihhPXNbY10pe3ZhciB1PVVydChhLGUpO0hydChhLHQsbixjLHMse3RpbWU6dS50aW1lK3UuZGVsYXkrdS5kdXJhdGlvbixkZWxheTowLGR1cmF0aW9uOnUuZHVyYXRpb24sZWFzZTp1LmVhc2V9KX1yZXR1cm4gbmV3IGNhdChpLHRoaXMuX3BhcmVudHMsdCxuKX0sY2FsbDpkYXQuY2FsbCxub2RlczpkYXQubm9kZXMsbm9kZTpkYXQubm9kZSxzaXplOmRhdC5zaXplLGVtcHR5OmRhdC5lbXB0eSxlYWNoOmRhdC5lYWNoLG9uOmZ1bmN0aW9uIHZhdCh0LGUpe3ZhciBuPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/VXJ0KHRoaXMubm9kZSgpLG4pLm9uLm9uKHQpOnRoaXMuZWFjaChvYXQobix0LGUpKX0sYXR0cjpmdW5jdGlvbiBiYXQodCxlKXt2YXIgbj1MbnQodCksaT0idHJhbnNmb3JtIj09PW4/Rm90OldvdDtyZXR1cm4gdGhpcy5hdHRyVHdlZW4odCwiZnVuY3Rpb24iPT10eXBlb2YgZT8obi5sb2NhbD9ab3Q6S290KShuLGksR290KHRoaXMsImF0dHIuIit0LGUpKTpudWxsPT1lPyhuLmxvY2FsP1lvdDpxb3QpKG4pOihuLmxvY2FsPyRvdDpYb3QpKG4saSxlKyIiKSl9LGF0dHJUd2VlbjpmdW5jdGlvbiB4YXQodCxlKXt2YXIgbj0iYXR0ci4iK3Q7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihuPXRoaXMudHdlZW4obikpJiZuLl92YWx1ZTtpZihudWxsPT1lKXJldHVybiB0aGlzLnR3ZWVuKG4sbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yO3ZhciBpPUxudCh0KTtyZXR1cm4gdGhpcy50d2VlbihuLChpLmxvY2FsP0pvdDpRb3QpKGksZSkpfSxzdHlsZTpmdW5jdGlvbiB3YXQodCxlLG4pe3ZhciBpPSJ0cmFuc2Zvcm0iPT0odCs9IiIpP0JvdDpXb3Q7cmV0dXJuIG51bGw9PWU/dGhpcy5zdHlsZVR3ZWVuKHQsKGZ1bmN0aW9uIG8odCxlKXt2YXIgbixpLHI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89dGl0KHRoaXMsdCksYT0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KSx0aXQodGhpcyx0KSk7cmV0dXJuIG89PT1hP251bGw6bz09PW4mJmE9PT1pP3I6cj1lKG49byxpPWEpfX0pKHQsaSkpLm9uKCJlbmQuc3R5bGUuIit0LChmdW5jdGlvbiByKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCl9fSkodCkpOnRoaXMuc3R5bGVUd2Vlbih0LCJmdW5jdGlvbiI9PXR5cGVvZiBlPyhmdW5jdGlvbiBhKHQsZSxuKXt2YXIgaSxyLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9dGl0KHRoaXMsdCkscz1uKHRoaXMpO3JldHVybiBudWxsPT1zJiYodGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KSxzPXRpdCh0aGlzLHQpKSxhPT09cz9udWxsOmE9PT1pJiZzPT09cj9vOm89ZShpPWEscj1zKX19KSh0LGksR290KHRoaXMsInN0eWxlLiIrdCxlKSk6KGZ1bmN0aW9uIHModCxlLG4pe3ZhciBpLHI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89dGl0KHRoaXMsdCk7cmV0dXJuIG89PT1uP251bGw6bz09PWk/cjpyPWUoaT1vLG4pfX0pKHQsaSxlKyIiKSxuKX0sc3R5bGVUd2VlbjpmdW5jdGlvbiBTYXQodCxlLG4pe3ZhciBpPSJzdHlsZS4iKyh0Kz0iIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihpPXRoaXMudHdlZW4oaSkpJiZpLl92YWx1ZTtpZihudWxsPT1lKXJldHVybiB0aGlzLnR3ZWVuKGksbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKGksc2F0KHQsZSxudWxsPT1uPyIiOm4pKX0sdGV4dDpmdW5jdGlvbiBNYXQodCl7cmV0dXJuIHRoaXMudHdlZW4oInRleHQiLCJmdW5jdGlvbiI9PXR5cGVvZiB0PyhmdW5jdGlvbiBlKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQodGhpcyk7dGhpcy50ZXh0Q29udGVudD1udWxsPT1lPyIiOmV9fSkoR290KHRoaXMsInRleHQiLHQpKTooZnVuY3Rpb24gbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PXR9fSkobnVsbD09dD8iIjp0KyIiKSl9LHJlbW92ZTpmdW5jdGlvbiBFYXQoKXtyZXR1cm4gdGhpcy5vbigiZW5kLnJlbW92ZSIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlO2Zvcih2YXIgbiBpbiB0aGlzLl9fdHJhbnNpdGlvbilpZigrbiE9PWUpcmV0dXJuO3QmJnQucmVtb3ZlQ2hpbGQodGhpcyl9fSkodGhpcy5faWQpKX0sdHdlZW46ZnVuY3Rpb24gVGF0KHQsZSl7dmFyIG49dGhpcy5faWQ7aWYodCs9IiIsYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIGkscj1VcnQodGhpcy5ub2RlKCksbikudHdlZW4sbz0wLGE9ci5sZW5ndGg7bzxhOysrbylpZigoaT1yW29dKS5uYW1lPT09dClyZXR1cm4gaS52YWx1ZTtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT1lP1VvdDpqb3QpKG4sdCxlKSl9LGRlbGF5OmZ1bmN0aW9uIENhdCh0KXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiB0P3RhdDplYXQpKGUsdCkpOlVydCh0aGlzLm5vZGUoKSxlKS5kZWxheX0sZHVyYXRpb246ZnVuY3Rpb24gQWF0KHQpe3ZhciBlPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIHQ/bmF0OmlhdCkoZSx0KSk6VXJ0KHRoaXMubm9kZSgpLGUpLmR1cmF0aW9ufSxlYXNlOmZ1bmN0aW9uIGthdCh0KXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2gocmF0KGUsdCkpOlVydCh0aGlzLm5vZGUoKSxlKS5lYXNlfX07dmFyIExhdD17dGltZTpudWxsLGRlbGF5OjAsZHVyYXRpb246MjUwLGVhc2U6RWZ9O2Z1bmN0aW9uIFBhdCh0LGUpe2Zvcih2YXIgbjshKG49dC5fX3RyYW5zaXRpb24pfHwhKG49bltlXSk7KWlmKCEodD10LnBhcmVudE5vZGUpKXJldHVybiBMYXQudGltZT1rcnQoKSxMYXQ7cmV0dXJuIG59Uml0LnByb3RvdHlwZS5pbnRlcnJ1cHQ9ZnVuY3Rpb24gTmF0KHQpe3JldHVybiB0aGlzLmVhY2goKGZ1bmN0aW9uKCl7anJ0KHRoaXMsdCl9KSl9LFJpdC5wcm90b3R5cGUudHJhbnNpdGlvbj1mdW5jdGlvbiBJYXQodCl7dmFyIGUsbjt0IGluc3RhbmNlb2YgY2F0PyhlPXQuX2lkLHQ9dC5fbmFtZSk6KGU9aGF0KCksKG49TGF0KS50aW1lPWtydCgpLHQ9bnVsbD09dD9udWxsOnQrIiIpO2Zvcih2YXIgaT10aGlzLl9ncm91cHMscj1pLmxlbmd0aCxvPTA7bzxyOysrbylmb3IodmFyIGEscz1pW29dLGw9cy5sZW5ndGgsYz0wO2M8bDsrK2MpKGE9c1tjXSkmJkhydChhLHQsZSxjLHMsbnx8UGF0KGEsZSkpO3JldHVybiBuZXcgY2F0KGksdGhpcy5fcGFyZW50cyx0LGUpfTt2YXIgT2F0PVtudWxsXTtmdW5jdGlvbiBSYXQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIHphdCh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiBEYXQodCl7cmV0dXJuIHRbMV19ZnVuY3Rpb24gQmF0KCl7dGhpcy5fPW51bGx9ZnVuY3Rpb24gSGF0KHQpe3QuVT10LkM9dC5MPXQuUj10LlA9dC5OPW51bGx9ZnVuY3Rpb24gRmF0KHQsZSl7dmFyIG49ZSxpPWUuUixyPW4uVTtyP3IuTD09PW4/ci5MPWk6ci5SPWk6dC5fPWksaS5VPXIsbi5VPWksbi5SPWkuTCxuLlImJihuLlIuVT1uKSxpLkw9bn1mdW5jdGlvbiBWYXQodCxlKXt2YXIgbj1lLGk9ZS5MLHI9bi5VO3I/ci5MPT09bj9yLkw9aTpyLlI9aTp0Ll89aSxpLlU9cixuLlU9aSxuLkw9aS5SLG4uTCYmKG4uTC5VPW4pLGkuUj1ufWZ1bmN0aW9uIFVhdCh0KXtmb3IoO3QuTDspdD10Lkw7cmV0dXJuIHR9ZnVuY3Rpb24gamF0KHQsZSxuLGkpe3ZhciByPVtudWxsLG51bGxdLG89cHN0LnB1c2gociktMTtyZXR1cm4gci5sZWZ0PXQsci5yaWdodD1lLG4mJldhdChyLHQsZSxuKSxpJiZXYXQocixlLHQsaSksaHN0W3QuaW5kZXhdLmhhbGZlZGdlcy5wdXNoKG8pLGhzdFtlLmluZGV4XS5oYWxmZWRnZXMucHVzaChvKSxyfWZ1bmN0aW9uIEdhdCh0LGUsbil7dmFyIGk9W2Usbl07cmV0dXJuIGkubGVmdD10LGl9ZnVuY3Rpb24gV2F0KHQsZSxuLGkpe3RbMF18fHRbMV0/dC5sZWZ0PT09bj90WzFdPWk6dFswXT1pOih0WzBdPWksdC5sZWZ0PWUsdC5yaWdodD1uKX1mdW5jdGlvbiBxYXQodCxlLG4saSxyKXt2YXIgbyxhPXRbMF0scz10WzFdLGw9YVswXSxjPWFbMV0sdT0wLGg9MSxkPXNbMF0tbCxwPXNbMV0tYztpZihvPWUtbCxkfHwhKG8+MCkpe2lmKG8vPWQsZDwwKXtpZihvPHUpcmV0dXJuO288aCYmKGg9byl9ZWxzZSBpZihkPjApe2lmKG8+aClyZXR1cm47bz51JiYodT1vKX1pZihvPWktbCxkfHwhKG88MCkpe2lmKG8vPWQsZDwwKXtpZihvPmgpcmV0dXJuO28+dSYmKHU9byl9ZWxzZSBpZihkPjApe2lmKG88dSlyZXR1cm47bzxoJiYoaD1vKX1pZihvPW4tYyxwfHwhKG8+MCkpe2lmKG8vPXAscDwwKXtpZihvPHUpcmV0dXJuO288aCYmKGg9byl9ZWxzZSBpZihwPjApe2lmKG8+aClyZXR1cm47bz51JiYodT1vKX1pZihvPXItYyxwfHwhKG88MCkpe2lmKG8vPXAscDwwKXtpZihvPmgpcmV0dXJuO28+dSYmKHU9byl9ZWxzZSBpZihwPjApe2lmKG88dSlyZXR1cm47bzxoJiYoaD1vKX1yZXR1cm4hKHU+MHx8aDwxKXx8KHU+MCYmKHRbMF09W2wrdSpkLGMrdSpwXSksaDwxJiYodFsxXT1bbCtoKmQsYytoKnBdKSwhMCl9fX19fWZ1bmN0aW9uIFlhdCh0LGUsbixpLHIpe3ZhciBvPXRbMV07aWYobylyZXR1cm4hMDt2YXIgYSxzLGw9dFswXSxjPXQubGVmdCx1PXQucmlnaHQsaD1jWzBdLGQ9Y1sxXSxwPXVbMF0sZj11WzFdLG09KGgrcCkvMjtpZihmPT09ZCl7aWYobTxlfHxtPj1pKXJldHVybjtpZihoPnApe2lmKGwpe2lmKGxbMV0+PXIpcmV0dXJufWVsc2UgbD1bbSxuXTtvPVttLHJdfWVsc2V7aWYobCl7aWYobFsxXTxuKXJldHVybn1lbHNlIGw9W20scl07bz1bbSxuXX19ZWxzZSBpZihzPShkK2YpLzItKGE9KGgtcCkvKGYtZCkpKm0sYTwtMXx8YT4xKWlmKGg+cCl7aWYobCl7aWYobFsxXT49cilyZXR1cm59ZWxzZSBsPVsobi1zKS9hLG5dO289WyhyLXMpL2Escl19ZWxzZXtpZihsKXtpZihsWzFdPG4pcmV0dXJufWVsc2UgbD1bKHItcykvYSxyXTtvPVsobi1zKS9hLG5dfWVsc2UgaWYoZDxmKXtpZihsKXtpZihsWzBdPj1pKXJldHVybn1lbHNlIGw9W2UsYSplK3NdO289W2ksYSppK3NdfWVsc2V7aWYobCl7aWYobFswXTxlKXJldHVybn1lbHNlIGw9W2ksYSppK3NdO289W2UsYSplK3NdfXJldHVybiB0WzBdPWwsdFsxXT1vLCEwfWZ1bmN0aW9uIFhhdCh0LGUpe3ZhciBuPXQuc2l0ZSxpPWUubGVmdCxyPWUucmlnaHQ7cmV0dXJuIG49PT1yJiYocj1pLGk9bikscj9NYXRoLmF0YW4yKHJbMV0taVsxXSxyWzBdLWlbMF0pOihuPT09aT8oaT1lWzFdLHI9ZVswXSk6KGk9ZVswXSxyPWVbMV0pLE1hdGguYXRhbjIoaVswXS1yWzBdLHJbMV0taVsxXSkpfWZ1bmN0aW9uICRhdCh0LGUpe3JldHVybiBlWysoZS5sZWZ0IT09dC5zaXRlKV19ZnVuY3Rpb24gS2F0KHQsZSl7cmV0dXJuIGVbKyhlLmxlZnQ9PT10LnNpdGUpXX1CYXQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpCYXQsaW5zZXJ0OmZ1bmN0aW9uKHQsZSl7dmFyIG4saSxyO2lmKHQpe2lmKGUuUD10LGUuTj10Lk4sdC5OJiYodC5OLlA9ZSksdC5OPWUsdC5SKXtmb3IodD10LlI7dC5MOyl0PXQuTDt0Lkw9ZX1lbHNlIHQuUj1lO249dH1lbHNlIHRoaXMuXz8odD1VYXQodGhpcy5fKSxlLlA9bnVsbCxlLk49dCx0LlA9dC5MPWUsbj10KTooZS5QPWUuTj1udWxsLHRoaXMuXz1lLG49bnVsbCk7Zm9yKGUuTD1lLlI9bnVsbCxlLlU9bixlLkM9ITAsdD1lO24mJm4uQzspbj09PShpPW4uVSkuTD8ocj1pLlIpJiZyLkM/KG4uQz1yLkM9ITEsaS5DPSEwLHQ9aSk6KHQ9PT1uLlImJihGYXQodGhpcyxuKSxuPSh0PW4pLlUpLG4uQz0hMSxpLkM9ITAsVmF0KHRoaXMsaSkpOihyPWkuTCkmJnIuQz8obi5DPXIuQz0hMSxpLkM9ITAsdD1pKToodD09PW4uTCYmKFZhdCh0aGlzLG4pLG49KHQ9bikuVSksbi5DPSExLGkuQz0hMCxGYXQodGhpcyxpKSksbj10LlU7dGhpcy5fLkM9ITF9LHJlbW92ZTpmdW5jdGlvbih0KXt0Lk4mJih0Lk4uUD10LlApLHQuUCYmKHQuUC5OPXQuTiksdC5OPXQuUD1udWxsO3ZhciBlLG4saSxyPXQuVSxvPXQuTCxhPXQuUjtpZihuPW8/YT9VYXQoYSk6bzphLHI/ci5MPT09dD9yLkw9bjpyLlI9bjp0aGlzLl89bixvJiZhPyhpPW4uQyxuLkM9dC5DLG4uTD1vLG8uVT1uLG4hPT1hPyhyPW4uVSxuLlU9dC5VLHIuTD10PW4uUixuLlI9YSxhLlU9bik6KG4uVT1yLHI9bix0PW4uUikpOihpPXQuQyx0PW4pLHQmJih0LlU9ciksIWkpaWYodCYmdC5DKXQuQz0hMTtlbHNle2Rve2lmKHQ9PT10aGlzLl8pYnJlYWs7aWYodD09PXIuTCl7aWYoKGU9ci5SKS5DJiYoZS5DPSExLHIuQz0hMCxGYXQodGhpcyxyKSxlPXIuUiksZS5MJiZlLkwuQ3x8ZS5SJiZlLlIuQyl7ZS5SJiZlLlIuQ3x8KGUuTC5DPSExLGUuQz0hMCxWYXQodGhpcyxlKSxlPXIuUiksZS5DPXIuQyxyLkM9ZS5SLkM9ITEsRmF0KHRoaXMsciksdD10aGlzLl87YnJlYWt9fWVsc2UgaWYoKGU9ci5MKS5DJiYoZS5DPSExLHIuQz0hMCxWYXQodGhpcyxyKSxlPXIuTCksZS5MJiZlLkwuQ3x8ZS5SJiZlLlIuQyl7ZS5MJiZlLkwuQ3x8KGUuUi5DPSExLGUuQz0hMCxGYXQodGhpcyxlKSxlPXIuTCksZS5DPXIuQyxyLkM9ZS5MLkM9ITEsVmF0KHRoaXMsciksdD10aGlzLl87YnJlYWt9ZS5DPSEwLHQ9cixyPXIuVX13aGlsZSghdC5DKTt0JiYodC5DPSExKX19fTt2YXIgWmF0LEphdD1bXTtmdW5jdGlvbiBRYXQoKXtIYXQodGhpcyksdGhpcy54PXRoaXMueT10aGlzLmFyYz10aGlzLnNpdGU9dGhpcy5jeT1udWxsfWZ1bmN0aW9uIHRzdCh0KXt2YXIgZT10LlAsbj10Lk47aWYoZSYmbil7dmFyIGk9ZS5zaXRlLHI9dC5zaXRlLG89bi5zaXRlO2lmKGkhPT1vKXt2YXIgYT1yWzBdLHM9clsxXSxsPWlbMF0tYSxjPWlbMV0tcyx1PW9bMF0tYSxoPW9bMV0tcyxkPTIqKGwqaC1jKnUpO2lmKCEoZD49LW1zdCkpe3ZhciBwPWwqbCtjKmMsZj11KnUraCpoLG09KGgqcC1jKmYpL2QsZz0obCpmLXUqcCkvZCxfPUphdC5wb3AoKXx8bmV3IFFhdDtfLmFyYz10LF8uc2l0ZT1yLF8ueD1tK2EsXy55PShfLmN5PWcrcykrTWF0aC5zcXJ0KG0qbStnKmcpLHQuY2lyY2xlPV87Zm9yKHZhciB5PW51bGwsdj1kc3QuXzt2OylpZihfLnk8di55fHxfLnk9PT12LnkmJl8ueDw9di54KXtpZighdi5MKXt5PXYuUDticmVha312PXYuTH1lbHNle2lmKCF2LlIpe3k9djticmVha312PXYuUn1kc3QuaW5zZXJ0KHksXykseXx8KFphdD1fKX19fX1mdW5jdGlvbiBlc3QodCl7dmFyIGU9dC5jaXJjbGU7ZSYmKGUuUHx8KFphdD1lLk4pLGRzdC5yZW1vdmUoZSksSmF0LnB1c2goZSksSGF0KGUpLHQuY2lyY2xlPW51bGwpfXZhciBuc3Q9W107ZnVuY3Rpb24gaXN0KCl7SGF0KHRoaXMpLHRoaXMuZWRnZT10aGlzLnNpdGU9dGhpcy5jaXJjbGU9bnVsbH1mdW5jdGlvbiByc3QodCl7dmFyIGU9bnN0LnBvcCgpfHxuZXcgaXN0O3JldHVybiBlLnNpdGU9dCxlfWZ1bmN0aW9uIG9zdCh0KXtlc3QodCksdXN0LnJlbW92ZSh0KSxuc3QucHVzaCh0KSxIYXQodCl9ZnVuY3Rpb24gYXN0KHQpe3ZhciBlPXQuY2lyY2xlLG49ZS54LGk9ZS5jeSxyPVtuLGldLG89dC5QLGE9dC5OLHM9W3RdO29zdCh0KTtmb3IodmFyIGw9bztsLmNpcmNsZSYmTWF0aC5hYnMobi1sLmNpcmNsZS54KTxmc3QmJk1hdGguYWJzKGktbC5jaXJjbGUuY3kpPGZzdDspbz1sLlAscy51bnNoaWZ0KGwpLG9zdChsKSxsPW87cy51bnNoaWZ0KGwpLGVzdChsKTtmb3IodmFyIGM9YTtjLmNpcmNsZSYmTWF0aC5hYnMobi1jLmNpcmNsZS54KTxmc3QmJk1hdGguYWJzKGktYy5jaXJjbGUuY3kpPGZzdDspYT1jLk4scy5wdXNoKGMpLG9zdChjKSxjPWE7cy5wdXNoKGMpLGVzdChjKTt2YXIgdSxoPXMubGVuZ3RoO2Zvcih1PTE7dTxoOysrdSlXYXQoKGM9c1t1XSkuZWRnZSwobD1zW3UtMV0pLnNpdGUsYy5zaXRlLHIpOyhjPXNbaC0xXSkuZWRnZT1qYXQoKGw9c1swXSkuc2l0ZSxjLnNpdGUsbnVsbCxyKSx0c3QobCksdHN0KGMpfWZ1bmN0aW9uIHNzdCh0KXtmb3IodmFyIGUsbixpLHIsbz10WzBdLGE9dFsxXSxzPXVzdC5fO3M7KWlmKChpPWxzdChzLGEpLW8pPmZzdClzPXMuTDtlbHNle2lmKCEoKHI9by1jc3QocyxhKSk+ZnN0KSl7aT4tZnN0PyhlPXMuUCxuPXMpOnI+LWZzdD8oZT1zLG49cy5OKTplPW49czticmVha31pZighcy5SKXtlPXM7YnJlYWt9cz1zLlJ9IShmdW5jdGlvbiBsKHQpe2hzdFt0LmluZGV4XT17c2l0ZTp0LGhhbGZlZGdlczpbXX19KSh0KTt2YXIgYz1yc3QodCk7aWYodXN0Lmluc2VydChlLGMpLGV8fG4pe2lmKGU9PT1uKXJldHVybiBlc3QoZSksbj1yc3QoZS5zaXRlKSx1c3QuaW5zZXJ0KGMsbiksYy5lZGdlPW4uZWRnZT1qYXQoZS5zaXRlLGMuc2l0ZSksdHN0KGUpLHZvaWQgdHN0KG4pO2lmKG4pe2VzdChlKSxlc3Qobik7dmFyIHU9ZS5zaXRlLGg9dVswXSxkPXVbMV0scD10WzBdLWgsZj10WzFdLWQsbT1uLnNpdGUsZz1tWzBdLWgsXz1tWzFdLWQseT0yKihwKl8tZipnKSx2PXAqcCtmKmYsYj1nKmcrXypfLHg9WyhfKnYtZipiKS95K2gsKHAqYi1nKnYpL3krZF07V2F0KG4uZWRnZSx1LG0seCksYy5lZGdlPWphdCh1LHQsbnVsbCx4KSxuLmVkZ2U9amF0KHQsbSxudWxsLHgpLHRzdChlKSx0c3Qobil9ZWxzZSBjLmVkZ2U9amF0KGUuc2l0ZSxjLnNpdGUpfX1mdW5jdGlvbiBsc3QodCxlKXt2YXIgbj10LnNpdGUsaT1uWzBdLHI9blsxXSxvPXItZTtpZighbylyZXR1cm4gaTt2YXIgYT10LlA7aWYoIWEpcmV0dXJuLTEvMDt2YXIgcz0obj1hLnNpdGUpWzBdLGw9blsxXSxjPWwtZTtpZighYylyZXR1cm4gczt2YXIgdT1zLWksaD0xL28tMS9jLGQ9dS9jO3JldHVybiBoPygtZCtNYXRoLnNxcnQoZCpkLTIqaCoodSp1LygtMipjKS1sK2MvMityLW8vMikpKS9oK2k6KGkrcykvMn1mdW5jdGlvbiBjc3QodCxlKXt2YXIgbj10Lk47aWYobilyZXR1cm4gbHN0KG4sZSk7dmFyIGk9dC5zaXRlO3JldHVybiBpWzFdPT09ZT9pWzBdOjEvMH12YXIgdXN0LGhzdCxkc3QscHN0LGZzdD0xZS02LG1zdD0xZS0xMjtmdW5jdGlvbiBnc3QodCxlLG4pe3JldHVybih0WzBdLW5bMF0pKihlWzFdLXRbMV0pLSh0WzBdLWVbMF0pKihuWzFdLXRbMV0pfWZ1bmN0aW9uIF9zdCh0LGUpe3JldHVybiBlWzFdLXRbMV18fGVbMF0tdFswXX1mdW5jdGlvbiB5c3QodCxlKXt2YXIgbixpLHIsbz10LnNvcnQoX3N0KS5wb3AoKTtmb3IocHN0PVtdLGhzdD1uZXcgQXJyYXkodC5sZW5ndGgpLHVzdD1uZXcgQmF0LGRzdD1uZXcgQmF0OzspaWYocj1aYXQsbyYmKCFyfHxvWzFdPHIueXx8b1sxXT09PXIueSYmb1swXTxyLngpKW9bMF09PT1uJiZvWzFdPT09aXx8KHNzdChvKSxuPW9bMF0saT1vWzFdKSxvPXQucG9wKCk7ZWxzZXtpZighcilicmVhazthc3Qoci5hcmMpfWlmKChmdW5jdGlvbiBhKCl7Zm9yKHZhciB0LGUsbixpLHI9MCxvPWhzdC5sZW5ndGg7cjxvOysrcilpZigodD1oc3Rbcl0pJiYoaT0oZT10LmhhbGZlZGdlcykubGVuZ3RoKSl7dmFyIGE9bmV3IEFycmF5KGkpLHM9bmV3IEFycmF5KGkpO2ZvcihuPTA7bjxpOysrbilhW25dPW4sc1tuXT1YYXQodCxwc3RbZVtuXV0pO2ZvcihhLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHNbZV0tc1t0XX0pKSxuPTA7bjxpOysrbilzW25dPWVbYVtuXV07Zm9yKG49MDtuPGk7KytuKWVbbl09c1tuXX19KSgpLGUpe3ZhciBzPStlWzBdWzBdLGw9K2VbMF1bMV0sYz0rZVsxXVswXSx1PStlWzFdWzFdOyEoZnVuY3Rpb24gaCh0LGUsbixpKXtmb3IodmFyIHIsbz1wc3QubGVuZ3RoO28tLTspWWF0KHI9cHN0W29dLHQsZSxuLGkpJiZxYXQocix0LGUsbixpKSYmKE1hdGguYWJzKHJbMF1bMF0tclsxXVswXSk+ZnN0fHxNYXRoLmFicyhyWzBdWzFdLXJbMV1bMV0pPmZzdCl8fGRlbGV0ZSBwc3Rbb119KShzLGwsYyx1KSwoZnVuY3Rpb24gZCh0LGUsbixpKXt2YXIgcixvLGEscyxsLGMsdSxoLGQscCxmLG0sZz1oc3QubGVuZ3RoLF89ITA7Zm9yKHI9MDtyPGc7KytyKWlmKG89aHN0W3JdKXtmb3IoYT1vLnNpdGUscz0obD1vLmhhbGZlZGdlcykubGVuZ3RoO3MtLTspcHN0W2xbc11dfHxsLnNwbGljZShzLDEpO2ZvcihzPTAsYz1sLmxlbmd0aDtzPGM7KWY9KHA9S2F0KG8scHN0W2xbc11dKSlbMF0sbT1wWzFdLGg9KHU9JGF0KG8scHN0W2xbKytzJWNdXSkpWzBdLGQ9dVsxXSwoTWF0aC5hYnMoZi1oKT5mc3R8fE1hdGguYWJzKG0tZCk+ZnN0KSYmKGwuc3BsaWNlKHMsMCxwc3QucHVzaChHYXQoYSxwLE1hdGguYWJzKGYtdCk8ZnN0JiZpLW0+ZnN0P1t0LE1hdGguYWJzKGgtdCk8ZnN0P2Q6aV06TWF0aC5hYnMobS1pKTxmc3QmJm4tZj5mc3Q/W01hdGguYWJzKGQtaSk8ZnN0P2g6bixpXTpNYXRoLmFicyhmLW4pPGZzdCYmbS1lPmZzdD9bbixNYXRoLmFicyhoLW4pPGZzdD9kOmVdOk1hdGguYWJzKG0tZSk8ZnN0JiZmLXQ+ZnN0P1tNYXRoLmFicyhkLWUpPGZzdD9oOnQsZV06bnVsbCkpLTEpLCsrYyk7YyYmKF89ITEpfWlmKF8pe3ZhciB5LHYsYix4PTEvMDtmb3Iocj0wLF89bnVsbDtyPGc7KytyKShvPWhzdFtyXSkmJihiPSh5PShhPW8uc2l0ZSlbMF0tdCkqeSsodj1hWzFdLWUpKnYpPHgmJih4PWIsXz1vKTtpZihfKXt2YXIgdz1bdCxlXSxTPVt0LGldLE09W24saV0sRT1bbixlXTtfLmhhbGZlZGdlcy5wdXNoKHBzdC5wdXNoKEdhdChhPV8uc2l0ZSx3LFMpKS0xLHBzdC5wdXNoKEdhdChhLFMsTSkpLTEscHN0LnB1c2goR2F0KGEsTSxFKSktMSxwc3QucHVzaChHYXQoYSxFLHcpKS0xKX19Zm9yKHI9MDtyPGc7KytyKShvPWhzdFtyXSkmJihvLmhhbGZlZGdlcy5sZW5ndGh8fGRlbGV0ZSBoc3Rbcl0pfSkocyxsLGMsdSl9dGhpcy5lZGdlcz1wc3QsdGhpcy5jZWxscz1oc3QsdXN0PWRzdD1wc3Q9aHN0PW51bGx9eXN0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6eXN0LHBvbHlnb25zOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5lZGdlcztyZXR1cm4gdGhpcy5jZWxscy5tYXAoKGZ1bmN0aW9uKGUpe3ZhciBuPWUuaGFsZmVkZ2VzLm1hcCgoZnVuY3Rpb24obil7cmV0dXJuICRhdChlLHRbbl0pfSkpO3JldHVybiBuLmRhdGE9ZS5zaXRlLmRhdGEsbn0pKX0sdHJpYW5nbGVzOmZ1bmN0aW9uKCl7dmFyIHQ9W10sZT10aGlzLmVkZ2VzO3JldHVybiB0aGlzLmNlbGxzLmZvckVhY2goKGZ1bmN0aW9uKG4saSl7aWYobz0ocj1uLmhhbGZlZGdlcykubGVuZ3RoKWZvcih2YXIgcixvLGEscz1uLnNpdGUsbD0tMSxjPWVbcltvLTFdXSx1PWMubGVmdD09PXM/Yy5yaWdodDpjLmxlZnQ7KytsPG87KWE9dSx1PShjPWVbcltsXV0pLmxlZnQ9PT1zP2MucmlnaHQ6Yy5sZWZ0LGEmJnUmJmk8YS5pbmRleCYmaTx1LmluZGV4JiZnc3QocyxhLHUpPDAmJnQucHVzaChbcy5kYXRhLGEuZGF0YSx1LmRhdGFdKX0pKSx0fSxsaW5rczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZ2VzLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQucmlnaHR9KSkubWFwKChmdW5jdGlvbih0KXtyZXR1cm57c291cmNlOnQubGVmdC5kYXRhLHRhcmdldDp0LnJpZ2h0LmRhdGF9fSkpfSxmaW5kOmZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIGkscixvPXRoaXMsYT1vLl9mb3VuZHx8MCxzPW8uY2VsbHMubGVuZ3RoOyEocj1vLmNlbGxzW2FdKTspaWYoKythPj1zKXJldHVybiBudWxsO3ZhciBsPXQtci5zaXRlWzBdLGM9ZS1yLnNpdGVbMV0sdT1sKmwrYypjO2Rve3I9by5jZWxsc1tpPWFdLGE9bnVsbCxyLmhhbGZlZGdlcy5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgaT1vLmVkZ2VzW25dLHM9aS5sZWZ0O2lmKHMhPT1yLnNpdGUmJnN8fChzPWkucmlnaHQpKXt2YXIgbD10LXNbMF0sYz1lLXNbMV0saD1sKmwrYypjO2g8dSYmKHU9aCxhPXMuaW5kZXgpfX0pKX13aGlsZShudWxsIT09YSk7cmV0dXJuIG8uX2ZvdW5kPWksbnVsbD09bnx8dTw9bipuP3Iuc2l0ZTpudWxsfX07dmFyIHZzdD17dmFsdWU6ZnVuY3Rpb24oKXt9fTtmdW5jdGlvbiBic3QoKXtmb3IodmFyIHQsZT0wLG49YXJndW1lbnRzLmxlbmd0aCxpPXt9O2U8bjsrK2Upe2lmKCEodD1hcmd1bWVudHNbZV0rIiIpfHx0IGluIGl8fC9bXHMuXS8udGVzdCh0KSl0aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgdHlwZTogIit0KTtpW3RdPVtdfXJldHVybiBuZXcgeHN0KGkpfWZ1bmN0aW9uIHhzdCh0KXt0aGlzLl89dH1mdW5jdGlvbiB3c3QodCxlKXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLykubWFwKChmdW5jdGlvbih0KXt2YXIgbj0iIixpPXQuaW5kZXhPZigiLiIpO2lmKGk+PTAmJihuPXQuc2xpY2UoaSsxKSx0PXQuc2xpY2UoMCxpKSksdCYmIWUuaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7cmV0dXJue3R5cGU6dCxuYW1lOm59fSkpfWZ1bmN0aW9uIFNzdCh0LGUpe2Zvcih2YXIgbixpPTAscj10Lmxlbmd0aDtpPHI7KytpKWlmKChuPXRbaV0pLm5hbWU9PT1lKXJldHVybiBuLnZhbHVlfWZ1bmN0aW9uIE1zdCh0LGUsbil7Zm9yKHZhciBpPTAscj10Lmxlbmd0aDtpPHI7KytpKWlmKHRbaV0ubmFtZT09PWUpe3RbaV09dnN0LHQ9dC5zbGljZSgwLGkpLmNvbmNhdCh0LnNsaWNlKGkrMSkpO2JyZWFrfXJldHVybiBudWxsIT1uJiZ0LnB1c2goe25hbWU6ZSx2YWx1ZTpufSksdH14c3QucHJvdG90eXBlPWJzdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnhzdCxvbjpmdW5jdGlvbih0LGUpe3ZhciBuLGk9dGhpcy5fLHI9d3N0KHQrIiIsaSksbz0tMSxhPXIubGVuZ3RoO2lmKCEoYXJndW1lbnRzLmxlbmd0aDwyKSl7aWYobnVsbCE9ZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrOiAiK2UpO2Zvcig7KytvPGE7KWlmKG49KHQ9cltvXSkudHlwZSlpW25dPU1zdChpW25dLHQubmFtZSxlKTtlbHNlIGlmKG51bGw9PWUpZm9yKG4gaW4gaSlpW25dPU1zdChpW25dLHQubmFtZSxudWxsKTtyZXR1cm4gdGhpc31mb3IoOysrbzxhOylpZigobj0odD1yW29dKS50eXBlKSYmKG49U3N0KGlbbl0sdC5uYW1lKSkpcmV0dXJuIG59LGNvcHk6ZnVuY3Rpb24oKXt2YXIgdD17fSxlPXRoaXMuXztmb3IodmFyIG4gaW4gZSl0W25dPWVbbl0uc2xpY2UoKTtyZXR1cm4gbmV3IHhzdCh0KX0sY2FsbDpmdW5jdGlvbih0LGUpe2lmKChuPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIG4saSxyPW5ldyBBcnJheShuKSxvPTA7bzxuOysrbylyW29dPWFyZ3VtZW50c1tvKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7Zm9yKG89MCxuPShpPXRoaXMuX1t0XSkubGVuZ3RoO288bjsrK28paVtvXS52YWx1ZS5hcHBseShlLHIpfSxhcHBseTpmdW5jdGlvbih0LGUsbil7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtmb3IodmFyIGk9dGhpcy5fW3RdLHI9MCxvPWkubGVuZ3RoO3I8bzsrK3IpaVtyXS52YWx1ZS5hcHBseShlLG4pfX07dmFyIEVzdD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsVHN0PXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDpFc3QseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifTtmdW5jdGlvbiBDc3QodCl7dmFyIGU9dCs9IiIsbj1lLmluZGV4T2YoIjoiKTtyZXR1cm4gbj49MCYmInhtbG5zIiE9PShlPXQuc2xpY2UoMCxuKSkmJih0PXQuc2xpY2UobisxKSksVHN0Lmhhc093blByb3BlcnR5KGUpP3tzcGFjZTpUc3RbZV0sbG9jYWw6dH06dH1mdW5jdGlvbiBBc3QodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vd25lckRvY3VtZW50LG49dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIG49PT1Fc3QmJmUuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PUVzdD9lLmNyZWF0ZUVsZW1lbnQodCk6ZS5jcmVhdGVFbGVtZW50TlMobix0KX19ZnVuY3Rpb24ga3N0KHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHQuc3BhY2UsdC5sb2NhbCl9fWZ1bmN0aW9uIExzdCh0KXt2YXIgZT1Dc3QodCk7cmV0dXJuKGUubG9jYWw/a3N0OkFzdCkoZSl9ZnVuY3Rpb24gUHN0KCl7fWZ1bmN0aW9uIE5zdCh0KXtyZXR1cm4gbnVsbD09dD9Qc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKHQpfX1mdW5jdGlvbiBJc3QoKXtyZXR1cm5bXX1mdW5jdGlvbiBPc3QodCl7cmV0dXJuIG51bGw9PXQ/SXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbCh0KX19ZnVuY3Rpb24gUnN0KHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoZXModCl9fWZ1bmN0aW9uIHpzdCh0KXtyZXR1cm4gbmV3IEFycmF5KHQubGVuZ3RoKX1mdW5jdGlvbiBEc3QodCxlKXt0aGlzLm93bmVyRG9jdW1lbnQ9dC5vd25lckRvY3VtZW50LHRoaXMubmFtZXNwYWNlVVJJPXQubmFtZXNwYWNlVVJJLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wYXJlbnQ9dCx0aGlzLl9fZGF0YV9fPWV9ZnVuY3Rpb24gQnN0KHQsZSxuLGkscixvKXtmb3IodmFyIGEscz0wLGw9ZS5sZW5ndGgsYz1vLmxlbmd0aDtzPGM7KytzKShhPWVbc10pPyhhLl9fZGF0YV9fPW9bc10saVtzXT1hKTpuW3NdPW5ldyBEc3QodCxvW3NdKTtmb3IoO3M8bDsrK3MpKGE9ZVtzXSkmJihyW3NdPWEpfWZ1bmN0aW9uIEhzdCh0LGUsbixpLHIsbyxhKXt2YXIgcyxsLGMsdT17fSxoPWUubGVuZ3RoLGQ9by5sZW5ndGgscD1uZXcgQXJyYXkoaCk7Zm9yKHM9MDtzPGg7KytzKShsPWVbc10pJiYocFtzXT1jPSIkIithLmNhbGwobCxsLl9fZGF0YV9fLHMsZSksYyBpbiB1P3Jbc109bDp1W2NdPWwpO2ZvcihzPTA7czxkOysrcykobD11W2M9IiQiK2EuY2FsbCh0LG9bc10scyxvKV0pPyhpW3NdPWwsbC5fX2RhdGFfXz1vW3NdLHVbY109bnVsbCk6bltzXT1uZXcgRHN0KHQsb1tzXSk7Zm9yKHM9MDtzPGg7KytzKShsPWVbc10pJiZ1W3Bbc11dPT09bCYmKHJbc109bCl9ZnVuY3Rpb24gRnN0KHQsZSl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTp0Pj1lPzA6TmFOfWZ1bmN0aW9uIFZzdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX19ZnVuY3Rpb24gVXN0KHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKX19ZnVuY3Rpb24ganN0KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUodCxlKX19ZnVuY3Rpb24gR3N0KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwsZSl9fWZ1bmN0aW9uIFdzdCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PW4/dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCk6dGhpcy5zZXRBdHRyaWJ1dGUodCxuKX19ZnVuY3Rpb24gcXN0KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09bj90aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCk6dGhpcy5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwsbil9fWZ1bmN0aW9uIFlzdCh0KXtyZXR1cm4gdC5vd25lckRvY3VtZW50JiZ0Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fHQuZG9jdW1lbnQmJnR8fHQuZGVmYXVsdFZpZXd9ZnVuY3Rpb24gWHN0KHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCl9fWZ1bmN0aW9uICRzdCh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LGUsbil9fWZ1bmN0aW9uIEtzdCh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGk9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09aT90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxpLG4pfX1mdW5jdGlvbiBac3QodCxlKXtyZXR1cm4gdC5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKGUpfHxZc3QodCkuZ2V0Q29tcHV0ZWRTdHlsZSh0LG51bGwpLmdldFByb3BlcnR5VmFsdWUoZSl9ZnVuY3Rpb24gSnN0KHQpe3JldHVybiBmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW3RdfX1mdW5jdGlvbiBRc3QodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzW3RdPWV9fWZ1bmN0aW9uIHRsdCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PW4/ZGVsZXRlIHRoaXNbdF06dGhpc1t0XT1ufX1mdW5jdGlvbiBlbHQodCl7cmV0dXJuIHQudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIG5sdCh0KXtyZXR1cm4gdC5jbGFzc0xpc3R8fG5ldyBpbHQodCl9ZnVuY3Rpb24gaWx0KHQpe3RoaXMuX25vZGU9dCx0aGlzLl9uYW1lcz1lbHQodC5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX1mdW5jdGlvbiBybHQodCxlKXtmb3IodmFyIG49bmx0KHQpLGk9LTEscj1lLmxlbmd0aDsrK2k8cjspbi5hZGQoZVtpXSl9ZnVuY3Rpb24gb2x0KHQsZSl7Zm9yKHZhciBuPW5sdCh0KSxpPS0xLHI9ZS5sZW5ndGg7KytpPHI7KW4ucmVtb3ZlKGVbaV0pfWZ1bmN0aW9uIGFsdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtybHQodGhpcyx0KX19ZnVuY3Rpb24gc2x0KHQpe3JldHVybiBmdW5jdGlvbigpe29sdCh0aGlzLHQpfX1mdW5jdGlvbiBsbHQodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXsoZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk/cmx0Om9sdCkodGhpcyx0KX19ZnVuY3Rpb24gY2x0KCl7dGhpcy50ZXh0Q29udGVudD0iIn1mdW5jdGlvbiB1bHQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD10fX1mdW5jdGlvbiBobHQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD1udWxsPT1lPyIiOmV9fWZ1bmN0aW9uIGRsdCgpe3RoaXMuaW5uZXJIVE1MPSIifWZ1bmN0aW9uIHBsdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD10fX1mdW5jdGlvbiBmbHQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5pbm5lckhUTUw9bnVsbD09ZT8iIjplfX1mdW5jdGlvbiBtbHQoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gZ2x0KCl7dGhpcy5wcmV2aW91c1NpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcyx0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gX2x0KCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24geWx0KCl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlO3QmJnQucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gdmx0KCl7dmFyIHQ9dGhpcy5jbG9uZU5vZGUoITEpLGU9dGhpcy5wYXJlbnROb2RlO3JldHVybiBlP2UuaW5zZXJ0QmVmb3JlKHQsdGhpcy5uZXh0U2libGluZyk6dH1mdW5jdGlvbiBibHQoKXt2YXIgdD10aGlzLmNsb25lTm9kZSghMCksZT10aGlzLnBhcmVudE5vZGU7cmV0dXJuIGU/ZS5pbnNlcnRCZWZvcmUodCx0aGlzLm5leHRTaWJsaW5nKTp0fURzdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkRzdCxhcHBlbmRDaGlsZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZSh0LHRoaXMuX25leHQpfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZSh0LGUpfSxxdWVyeVNlbGVjdG9yOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3Rvcih0KX0scXVlcnlTZWxlY3RvckFsbDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwodCl9fSxpbHQucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24odCl7dGhpcy5fbmFtZXMuaW5kZXhPZih0KTwwJiYodGhpcy5fbmFtZXMucHVzaCh0KSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxyZW1vdmU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbmFtZXMuaW5kZXhPZih0KTtlPj0wJiYodGhpcy5fbmFtZXMuc3BsaWNlKGUsMSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0sY29udGFpbnM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2YodCk+PTB9fTt2YXIgeGx0PXt9LHdsdD1udWxsO2Z1bmN0aW9uIFNsdCh0LGUsbil7cmV0dXJuIHQ9TWx0KHQsZSxuKSxmdW5jdGlvbihlKXt2YXIgbj1lLnJlbGF0ZWRUYXJnZXQ7biYmKG49PT10aGlzfHw4Jm4uY29tcGFyZURvY3VtZW50UG9zaXRpb24odGhpcykpfHx0LmNhbGwodGhpcyxlKX19ZnVuY3Rpb24gTWx0KHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24oaSl7dmFyIHI9d2x0O3dsdD1pO3RyeXt0LmNhbGwodGhpcyx0aGlzLl9fZGF0YV9fLGUsbil9ZmluYWxseXt3bHQ9cn19fWZ1bmN0aW9uIEVsdCh0KXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLykubWFwKChmdW5jdGlvbih0KXt2YXIgZT0iIixuPXQuaW5kZXhPZigiLiIpO3JldHVybiBuPj0wJiYoZT10LnNsaWNlKG4rMSksdD10LnNsaWNlKDAsbikpLHt0eXBlOnQsbmFtZTplfX0pKX1mdW5jdGlvbiBUbHQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fX29uO2lmKGUpe2Zvcih2YXIgbixpPTAscj0tMSxvPWUubGVuZ3RoO2k8bzsrK2kpbj1lW2ldLHQudHlwZSYmbi50eXBlIT09dC50eXBlfHxuLm5hbWUhPT10Lm5hbWU/ZVsrK3JdPW46dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKG4udHlwZSxuLmxpc3RlbmVyLG4uY2FwdHVyZSk7KytyP2UubGVuZ3RoPXI6ZGVsZXRlIHRoaXMuX19vbn19fWZ1bmN0aW9uIENsdCh0LGUsbil7dmFyIGk9eGx0Lmhhc093blByb3BlcnR5KHQudHlwZSk/U2x0Ok1sdDtyZXR1cm4gZnVuY3Rpb24ocixvLGEpe3ZhciBzLGw9dGhpcy5fX29uLGM9aShlLG8sYSk7aWYobClmb3IodmFyIHU9MCxoPWwubGVuZ3RoO3U8aDsrK3UpaWYoKHM9bFt1XSkudHlwZT09PXQudHlwZSYmcy5uYW1lPT09dC5uYW1lKXJldHVybiB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIocy50eXBlLHMubGlzdGVuZXIscy5jYXB0dXJlKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIocy50eXBlLHMubGlzdGVuZXI9YyxzLmNhcHR1cmU9biksdm9pZChzLnZhbHVlPWUpO3RoaXMuYWRkRXZlbnRMaXN0ZW5lcih0LnR5cGUsYyxuKSxzPXt0eXBlOnQudHlwZSxuYW1lOnQubmFtZSx2YWx1ZTplLGxpc3RlbmVyOmMsY2FwdHVyZTpufSxsP2wucHVzaChzKTp0aGlzLl9fb249W3NdfX1mdW5jdGlvbiBBbHQodCxlLG4pe3ZhciBpPVlzdCh0KSxyPWkuQ3VzdG9tRXZlbnQ7ImZ1bmN0aW9uIj09dHlwZW9mIHI/cj1uZXcgcihlLG4pOihyPWkuZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50Iiksbj8oci5pbml0RXZlbnQoZSxuLmJ1YmJsZXMsbi5jYW5jZWxhYmxlKSxyLmRldGFpbD1uLmRldGFpbCk6ci5pbml0RXZlbnQoZSwhMSwhMSkpLHQuZGlzcGF0Y2hFdmVudChyKX1mdW5jdGlvbiBrbHQodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gQWx0KHRoaXMsdCxlKX19ZnVuY3Rpb24gTGx0KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEFsdCh0aGlzLHQsZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX0idW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50JiYoIm9ubW91c2VlbnRlciJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnR8fCh4bHQ9e21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSkpO3ZhciBQbHQ9W251bGxdO2Z1bmN0aW9uIE5sdCh0LGUpe3RoaXMuX2dyb3Vwcz10LHRoaXMuX3BhcmVudHM9ZX1mdW5jdGlvbiBJbHQoKXtyZXR1cm4gbmV3IE5sdChbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLFBsdCl9ZnVuY3Rpb24gT2x0KHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD9uZXcgTmx0KFtbZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0KV1dLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgTmx0KFtbdF1dLFBsdCl9ZnVuY3Rpb24gUmx0KCl7Zm9yKHZhciB0LGU9d2x0O3Q9ZS5zb3VyY2VFdmVudDspZT10O3JldHVybiBlfWZ1bmN0aW9uIHpsdCh0LGUpe3ZhciBuPXQub3duZXJTVkdFbGVtZW50fHx0O2lmKG4uY3JlYXRlU1ZHUG9pbnQpe3ZhciBpPW4uY3JlYXRlU1ZHUG9pbnQoKTtyZXR1cm4gaS54PWUuY2xpZW50WCxpLnk9ZS5jbGllbnRZLFsoaT1pLm1hdHJpeFRyYW5zZm9ybSh0LmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSkpLngsaS55XX12YXIgcj10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybltlLmNsaWVudFgtci5sZWZ0LXQuY2xpZW50TGVmdCxlLmNsaWVudFktci50b3AtdC5jbGllbnRUb3BdfWZ1bmN0aW9uIERsdCh0KXt2YXIgZT1SbHQoKTtyZXR1cm4gZS5jaGFuZ2VkVG91Y2hlcyYmKGU9ZS5jaGFuZ2VkVG91Y2hlc1swXSksemx0KHQsZSl9ZnVuY3Rpb24gQmx0KHQsZSxuKXthcmd1bWVudHMubGVuZ3RoPDMmJihuPWUsZT1SbHQoKS5jaGFuZ2VkVG91Y2hlcyk7Zm9yKHZhciBpLHI9MCxvPWU/ZS5sZW5ndGg6MDtyPG87KytyKWlmKChpPWVbcl0pLmlkZW50aWZpZXI9PT1uKXJldHVybiB6bHQodCxpKTtyZXR1cm4gbnVsbH1mdW5jdGlvbiBIbHQoKXt3bHQucHJldmVudERlZmF1bHQoKSx3bHQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gRmx0KHQpe3ZhciBlPXQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LG49T2x0KHQpLm9uKCJkcmFnc3RhcnQuZHJhZyIsSGx0LCEwKTsib25zZWxlY3RzdGFydCJpbiBlP24ub24oInNlbGVjdHN0YXJ0LmRyYWciLEhsdCwhMCk6KGUuX19ub3NlbGVjdD1lLnN0eWxlLk1velVzZXJTZWxlY3QsZS5zdHlsZS5Nb3pVc2VyU2VsZWN0PSJub25lIil9ZnVuY3Rpb24gVmx0KHQsZSl7dmFyIG49dC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsaT1PbHQodCkub24oImRyYWdzdGFydC5kcmFnIixudWxsKTtlJiYoaS5vbigiY2xpY2suZHJhZyIsSGx0LCEwKSxzZXRUaW1lb3V0KChmdW5jdGlvbigpe2kub24oImNsaWNrLmRyYWciLG51bGwpfSksMCkpLCJvbnNlbGVjdHN0YXJ0ImluIG4/aS5vbigic2VsZWN0c3RhcnQuZHJhZyIsbnVsbCk6KG4uc3R5bGUuTW96VXNlclNlbGVjdD1uLl9fbm9zZWxlY3QsZGVsZXRlIG4uX19ub3NlbGVjdCl9ZnVuY3Rpb24gVWx0KHQsZSxuKXt0LnByb3RvdHlwZT1lLnByb3RvdHlwZT1uLG4uY29uc3RydWN0b3I9dH1mdW5jdGlvbiBqbHQodCxlKXt2YXIgbj1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlKTtmb3IodmFyIGkgaW4gZSluW2ldPWVbaV07cmV0dXJuIG59ZnVuY3Rpb24gR2x0KCl7fU5sdC5wcm90b3R5cGU9SWx0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6Tmx0LHNlbGVjdDpmdW5jdGlvbiBXbHQodCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PU5zdCh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLGk9bmV3IEFycmF5KG4pLHI9MDtyPG47KytyKWZvcih2YXIgbyxhLHM9ZVtyXSxsPXMubGVuZ3RoLGM9aVtyXT1uZXcgQXJyYXkobCksdT0wO3U8bDsrK3UpKG89c1t1XSkmJihhPXQuY2FsbChvLG8uX19kYXRhX18sdSxzKSkmJigiX19kYXRhX18iaW4gbyYmKGEuX19kYXRhX189by5fX2RhdGFfXyksY1t1XT1hKTtyZXR1cm4gbmV3IE5sdChpLHRoaXMuX3BhcmVudHMpfSxzZWxlY3RBbGw6ZnVuY3Rpb24gcWx0KHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1Pc3QodCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxpPVtdLHI9W10sbz0wO288bjsrK28pZm9yKHZhciBhLHM9ZVtvXSxsPXMubGVuZ3RoLGM9MDtjPGw7KytjKShhPXNbY10pJiYoaS5wdXNoKHQuY2FsbChhLGEuX19kYXRhX18sYyxzKSksci5wdXNoKGEpKTtyZXR1cm4gbmV3IE5sdChpLHIpfSxmaWx0ZXI6ZnVuY3Rpb24gWWx0KHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1Sc3QodCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxpPW5ldyBBcnJheShuKSxyPTA7cjxuOysrcilmb3IodmFyIG8sYT1lW3JdLHM9YS5sZW5ndGgsbD1pW3JdPVtdLGM9MDtjPHM7KytjKShvPWFbY10pJiZ0LmNhbGwobyxvLl9fZGF0YV9fLGMsYSkmJmwucHVzaChvKTtyZXR1cm4gbmV3IE5sdChpLHRoaXMuX3BhcmVudHMpfSxkYXRhOmZ1bmN0aW9uIFhsdCh0LGUpe2lmKCF0KXJldHVybiBmPW5ldyBBcnJheSh0aGlzLnNpemUoKSksdT0tMSx0aGlzLmVhY2goKGZ1bmN0aW9uKHQpe2ZbKyt1XT10fSkpLGY7dmFyIG49ZT9Ic3Q6QnN0LGk9dGhpcy5fcGFyZW50cyxyPXRoaXMuX2dyb3VwczsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9KGZ1bmN0aW9uIG8odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSkodCkpO2Zvcih2YXIgYT1yLmxlbmd0aCxzPW5ldyBBcnJheShhKSxsPW5ldyBBcnJheShhKSxjPW5ldyBBcnJheShhKSx1PTA7dTxhOysrdSl7dmFyIGg9aVt1XSxkPXJbdV0scD1kLmxlbmd0aCxmPXQuY2FsbChoLGgmJmguX19kYXRhX18sdSxpKSxtPWYubGVuZ3RoLGc9bFt1XT1uZXcgQXJyYXkobSksXz1zW3VdPW5ldyBBcnJheShtKTtuKGgsZCxnLF8sY1t1XT1uZXcgQXJyYXkocCksZixlKTtmb3IodmFyIHksdixiPTAseD0wO2I8bTsrK2IpaWYoeT1nW2JdKXtmb3IoYj49eCYmKHg9YisxKTshKHY9X1t4XSkmJisreDxtOyk7eS5fbmV4dD12fHxudWxsfX1yZXR1cm4ocz1uZXcgTmx0KHMsaSkpLl9lbnRlcj1sLHMuX2V4aXQ9YyxzfSxlbnRlcjpmdW5jdGlvbiAkbHQoKXtyZXR1cm4gbmV3IE5sdCh0aGlzLl9lbnRlcnx8dGhpcy5fZ3JvdXBzLm1hcCh6c3QpLHRoaXMuX3BhcmVudHMpfSxleGl0OmZ1bmN0aW9uIEtsdCgpe3JldHVybiBuZXcgTmx0KHRoaXMuX2V4aXR8fHRoaXMuX2dyb3Vwcy5tYXAoenN0KSx0aGlzLl9wYXJlbnRzKX0sam9pbjpmdW5jdGlvbiBabHQodCxlLG4pe3ZhciBpPXRoaXMuZW50ZXIoKSxyPXRoaXMsbz10aGlzLmV4aXQoKTtyZXR1cm4gaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90KGkpOmkuYXBwZW5kKHQrIiIpLG51bGwhPWUmJihyPWUocikpLG51bGw9PW4/by5yZW1vdmUoKTpuKG8pLGkmJnI/aS5tZXJnZShyKS5vcmRlcigpOnJ9LG1lcmdlOmZ1bmN0aW9uIEpsdCh0KXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49dC5fZ3JvdXBzLGk9ZS5sZW5ndGgscj1NYXRoLm1pbihpLG4ubGVuZ3RoKSxvPW5ldyBBcnJheShpKSxhPTA7YTxyOysrYSlmb3IodmFyIHMsbD1lW2FdLGM9blthXSx1PWwubGVuZ3RoLGg9b1thXT1uZXcgQXJyYXkodSksZD0wO2Q8dTsrK2QpKHM9bFtkXXx8Y1tkXSkmJihoW2RdPXMpO2Zvcig7YTxpOysrYSlvW2FdPWVbYV07cmV0dXJuIG5ldyBObHQobyx0aGlzLl9wYXJlbnRzKX0sb3JkZXI6ZnVuY3Rpb24gUWx0KCl7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPS0xLG49dC5sZW5ndGg7KytlPG47KWZvcih2YXIgaSxyPXRbZV0sbz1yLmxlbmd0aC0xLGE9cltvXTstLW8+PTA7KShpPXJbb10pJiYoYSYmNF5pLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGEpJiZhLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGksYSksYT1pKTtyZXR1cm4gdGhpc30sc29ydDpmdW5jdGlvbiB0Y3QodCl7ZnVuY3Rpb24gZShlLG4pe3JldHVybiBlJiZuP3QoZS5fX2RhdGFfXyxuLl9fZGF0YV9fKTohZS0hbn10fHwodD1Gc3QpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxyPW5ldyBBcnJheShpKSxvPTA7bzxpOysrbyl7Zm9yKHZhciBhLHM9bltvXSxsPXMubGVuZ3RoLGM9cltvXT1uZXcgQXJyYXkobCksdT0wO3U8bDsrK3UpKGE9c1t1XSkmJihjW3VdPWEpO2Muc29ydChlKX1yZXR1cm4gbmV3IE5sdChyLHRoaXMuX3BhcmVudHMpLm9yZGVyKCl9LGNhbGw6ZnVuY3Rpb24gZWN0KCl7dmFyIHQ9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyx0LmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfSxub2RlczpmdW5jdGlvbiBuY3QoKXt2YXIgdD1uZXcgQXJyYXkodGhpcy5zaXplKCkpLGU9LTE7cmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oKXt0WysrZV09dGhpc30pKSx0fSxub2RlOmZ1bmN0aW9uIGljdCgpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT0wLG49dC5sZW5ndGg7ZTxuOysrZSlmb3IodmFyIGk9dFtlXSxyPTAsbz1pLmxlbmd0aDtyPG87KytyKXt2YXIgYT1pW3JdO2lmKGEpcmV0dXJuIGF9cmV0dXJuIG51bGx9LHNpemU6ZnVuY3Rpb24gcmN0KCl7dmFyIHQ9MDtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpeysrdH0pKSx0fSxlbXB0eTpmdW5jdGlvbiBvY3QoKXtyZXR1cm4hdGhpcy5ub2RlKCl9LGVhY2g6ZnVuY3Rpb24gYWN0KHQpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj0wLGk9ZS5sZW5ndGg7bjxpOysrbilmb3IodmFyIHIsbz1lW25dLGE9MCxzPW8ubGVuZ3RoO2E8czsrK2EpKHI9b1thXSkmJnQuY2FsbChyLHIuX19kYXRhX18sYSxvKTtyZXR1cm4gdGhpc30sYXR0cjpmdW5jdGlvbiBzY3QodCxlKXt2YXIgbj1Dc3QodCk7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgaT10aGlzLm5vZGUoKTtyZXR1cm4gbi5sb2NhbD9pLmdldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCk6aS5nZXRBdHRyaWJ1dGUobil9cmV0dXJuIHRoaXMuZWFjaCgobnVsbD09ZT9uLmxvY2FsP1VzdDpWc3Q6ImZ1bmN0aW9uIj09dHlwZW9mIGU/bi5sb2NhbD9xc3Q6V3N0Om4ubG9jYWw/R3N0OmpzdCkobixlKSl9LHN0eWxlOmZ1bmN0aW9uIGxjdCh0LGUsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PWU/WHN0OiJmdW5jdGlvbiI9PXR5cGVvZiBlP0tzdDokc3QpKHQsZSxudWxsPT1uPyIiOm4pKTpac3QodGhpcy5ub2RlKCksdCl9LHByb3BlcnR5OmZ1bmN0aW9uIGNjdCh0LGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChudWxsPT1lP0pzdDoiZnVuY3Rpb24iPT10eXBlb2YgZT90bHQ6UXN0KSh0LGUpKTp0aGlzLm5vZGUoKVt0XX0sY2xhc3NlZDpmdW5jdGlvbiB1Y3QodCxlKXt2YXIgbj1lbHQodCsiIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIGk9bmx0KHRoaXMubm9kZSgpKSxyPS0xLG89bi5sZW5ndGg7KytyPG87KWlmKCFpLmNvbnRhaW5zKG5bcl0pKXJldHVybiExO3JldHVybiEwfXJldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBlP2xsdDplP2FsdDpzbHQpKG4sZSkpfSx0ZXh0OmZ1bmN0aW9uIGhjdCh0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2gobnVsbD09dD9jbHQ6KCJmdW5jdGlvbiI9PXR5cGVvZiB0P2hsdDp1bHQpKHQpKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH0saHRtbDpmdW5jdGlvbiBkY3QodCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PXQ/ZGx0OigiZnVuY3Rpb24iPT10eXBlb2YgdD9mbHQ6cGx0KSh0KSk6dGhpcy5ub2RlKCkuaW5uZXJIVE1MfSxyYWlzZTpmdW5jdGlvbiBwY3QoKXtyZXR1cm4gdGhpcy5lYWNoKG1sdCl9LGxvd2VyOmZ1bmN0aW9uIGZjdCgpe3JldHVybiB0aGlzLmVhY2goZ2x0KX0sYXBwZW5kOmZ1bmN0aW9uIG1jdCh0KXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkxzdCh0KTtyZXR1cm4gdGhpcy5zZWxlY3QoKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQoZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSkpfSxpbnNlcnQ6ZnVuY3Rpb24gZ2N0KHQsZSl7dmFyIG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpMc3QodCksaT1udWxsPT1lP19sdDoiZnVuY3Rpb24iPT10eXBlb2YgZT9lOk5zdChlKTtyZXR1cm4gdGhpcy5zZWxlY3QoKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKG4uYXBwbHkodGhpcyxhcmd1bWVudHMpLGkuYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxsKX0pKX0scmVtb3ZlOmZ1bmN0aW9uIF9jdCgpe3JldHVybiB0aGlzLmVhY2goeWx0KX0sY2xvbmU6ZnVuY3Rpb24geWN0KHQpe3JldHVybiB0aGlzLnNlbGVjdCh0P2JsdDp2bHQpfSxkYXR1bTpmdW5jdGlvbiB2Y3QodCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iLHQpOnRoaXMubm9kZSgpLl9fZGF0YV9ffSxvbjpmdW5jdGlvbiBiY3QodCxlLG4pe3ZhciBpLHIsbz1FbHQodCsiIiksYT1vLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2ZvcihzPWU/Q2x0OlRsdCxudWxsPT1uJiYobj0hMSksaT0wO2k8YTsrK2kpdGhpcy5lYWNoKHMob1tpXSxlLG4pKTtyZXR1cm4gdGhpc312YXIgcz10aGlzLm5vZGUoKS5fX29uO2lmKHMpZm9yKHZhciBsLGM9MCx1PXMubGVuZ3RoO2M8dTsrK2MpZm9yKGk9MCxsPXNbY107aTxhOysraSlpZigocj1vW2ldKS50eXBlPT09bC50eXBlJiZyLm5hbWU9PT1sLm5hbWUpcmV0dXJuIGwudmFsdWV9LGRpc3BhdGNoOmZ1bmN0aW9uIHhjdCh0LGUpe3JldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBlP0xsdDprbHQpKHQsZSkpfX07dmFyIHdjdD0uNyxTY3Q9MS93Y3QsTWN0PSJcXHMqKFsrLV0/XFxkKylcXHMqIixFY3Q9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pXFxzKiIsVGN0PSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIixDY3Q9L14jKFswLTlhLWZdezMsOH0pJC8sQWN0PW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tNY3QsTWN0LE1jdF0rIlxcKSQiKSxrY3Q9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW1RjdCxUY3QsVGN0XSsiXFwpJCIpLExjdD1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW01jdCxNY3QsTWN0LEVjdF0rIlxcKSQiKSxQY3Q9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tUY3QsVGN0LFRjdCxFY3RdKyJcXCkkIiksTmN0PW5ldyBSZWdFeHAoIl5oc2xcXCgiK1tFY3QsVGN0LFRjdF0rIlxcKSQiKSxJY3Q9bmV3IFJlZ0V4cCgiXmhzbGFcXCgiK1tFY3QsVGN0LFRjdCxFY3RdKyJcXCkkIiksT2N0PXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O2Z1bmN0aW9uIFJjdCgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleCgpfWZ1bmN0aW9uIHpjdCgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdFJnYigpfWZ1bmN0aW9uIERjdCh0KXt2YXIgZSxuO3JldHVybiB0PSh0KyIiKS50cmltKCkudG9Mb3dlckNhc2UoKSwoZT1DY3QuZXhlYyh0KSk/KG49ZVsxXS5sZW5ndGgsZT1wYXJzZUludChlWzFdLDE2KSw2PT09bj9CY3QoZSk6Mz09PW4/bmV3IFVjdChlPj44JjE1fGU+PjQmMjQwLGU+PjQmMTV8MjQwJmUsKDE1JmUpPDw0fDE1JmUsMSk6OD09PW4/SGN0KGU+PjI0JjI1NSxlPj4xNiYyNTUsZT4+OCYyNTUsKDI1NSZlKS8yNTUpOjQ9PT1uP0hjdChlPj4xMiYxNXxlPj44JjI0MCxlPj44JjE1fGU+PjQmMjQwLGU+PjQmMTV8MjQwJmUsKCgxNSZlKTw8NHwxNSZlKS8yNTUpOm51bGwpOihlPUFjdC5leGVjKHQpKT9uZXcgVWN0KGVbMV0sZVsyXSxlWzNdLDEpOihlPWtjdC5leGVjKHQpKT9uZXcgVWN0KDI1NSplWzFdLzEwMCwyNTUqZVsyXS8xMDAsMjU1KmVbM10vMTAwLDEpOihlPUxjdC5leGVjKHQpKT9IY3QoZVsxXSxlWzJdLGVbM10sZVs0XSk6KGU9UGN0LmV4ZWModCkpP0hjdCgyNTUqZVsxXS8xMDAsMjU1KmVbMl0vMTAwLDI1NSplWzNdLzEwMCxlWzRdKTooZT1OY3QuZXhlYyh0KSk/cWN0KGVbMV0sZVsyXS8xMDAsZVszXS8xMDAsMSk6KGU9SWN0LmV4ZWModCkpP3FjdChlWzFdLGVbMl0vMTAwLGVbM10vMTAwLGVbNF0pOk9jdC5oYXNPd25Qcm9wZXJ0eSh0KT9CY3QoT2N0W3RdKToidHJhbnNwYXJlbnQiPT09dD9uZXcgVWN0KE5hTixOYU4sTmFOLDApOm51bGx9ZnVuY3Rpb24gQmN0KHQpe3JldHVybiBuZXcgVWN0KHQ+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdCwxKX1mdW5jdGlvbiBIY3QodCxlLG4saSl7cmV0dXJuIGk8PTAmJih0PWU9bj1OYU4pLG5ldyBVY3QodCxlLG4saSl9ZnVuY3Rpb24gRmN0KHQpe3JldHVybiB0IGluc3RhbmNlb2YgR2x0fHwodD1EY3QodCkpLHQ/bmV3IFVjdCgodD10LnJnYigpKS5yLHQuZyx0LmIsdC5vcGFjaXR5KTpuZXcgVWN0fWZ1bmN0aW9uIFZjdCh0LGUsbixpKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/RmN0KHQpOm5ldyBVY3QodCxlLG4sbnVsbD09aT8xOmkpfWZ1bmN0aW9uIFVjdCh0LGUsbixpKXt0aGlzLnI9K3QsdGhpcy5nPStlLHRoaXMuYj0rbix0aGlzLm9wYWNpdHk9K2l9ZnVuY3Rpb24gamN0KCl7cmV0dXJuIiMiK1djdCh0aGlzLnIpK1djdCh0aGlzLmcpK1djdCh0aGlzLmIpfWZ1bmN0aW9uIEdjdCgpe3ZhciB0PXRoaXMub3BhY2l0eTtyZXR1cm4oMT09PSh0PWlzTmFOKHQpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLHQpKSk/InJnYigiOiJyZ2JhKCIpK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5yKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmcpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuYil8fDApKSsoMT09PXQ/IikiOiIsICIrdCsiKSIpfWZ1bmN0aW9uIFdjdCh0KXtyZXR1cm4oKHQ9TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0KXx8MCkpKTwxNj8iMCI6IiIpK3QudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIHFjdCh0LGUsbixpKXtyZXR1cm4gaTw9MD90PWU9bj1OYU46bjw9MHx8bj49MT90PWU9TmFOOmU8PTAmJih0PU5hTiksbmV3IFhjdCh0LGUsbixpKX1mdW5jdGlvbiBZY3QodCl7aWYodCBpbnN0YW5jZW9mIFhjdClyZXR1cm4gbmV3IFhjdCh0LmgsdC5zLHQubCx0Lm9wYWNpdHkpO2lmKHQgaW5zdGFuY2VvZiBHbHR8fCh0PURjdCh0KSksIXQpcmV0dXJuIG5ldyBYY3Q7aWYodCBpbnN0YW5jZW9mIFhjdClyZXR1cm4gdDt2YXIgZT0odD10LnJnYigpKS5yLzI1NSxuPXQuZy8yNTUsaT10LmIvMjU1LHI9TWF0aC5taW4oZSxuLGkpLG89TWF0aC5tYXgoZSxuLGkpLGE9TmFOLHM9by1yLGw9KG8rcikvMjtyZXR1cm4gcz8oYT1lPT09bz8obi1pKS9zKzYqKG48aSk6bj09PW8/KGktZSkvcysyOihlLW4pL3MrNCxzLz1sPC41P28rcjoyLW8tcixhKj02MCk6cz1sPjAmJmw8MT8wOmEsbmV3IFhjdChhLHMsbCx0Lm9wYWNpdHkpfWZ1bmN0aW9uIFhjdCh0LGUsbixpKXt0aGlzLmg9K3QsdGhpcy5zPStlLHRoaXMubD0rbix0aGlzLm9wYWNpdHk9K2l9ZnVuY3Rpb24gJGN0KHQsZSxuKXtyZXR1cm4gMjU1Kih0PDYwP2UrKG4tZSkqdC82MDp0PDE4MD9uOnQ8MjQwP2UrKG4tZSkqKDI0MC10KS82MDplKX1mdW5jdGlvbiBLY3QodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIFpjdCh0LGUpe3ZhciBuPWUtdDtyZXR1cm4gbj8oZnVuY3Rpb24gaSh0LGUpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdCtuKmV9fSkodCxuKTpLY3QoaXNOYU4odCk/ZTp0KX1VbHQoR2x0LERjdCx7Y29weTpmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgdGhpcy5jb25zdHJ1Y3Rvcix0aGlzLHQpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LGhleDpSY3QsZm9ybWF0SGV4OlJjdCxmb3JtYXRIc2w6ZnVuY3Rpb24gSmN0KCl7cmV0dXJuIFljdCh0aGlzKS5mb3JtYXRIc2woKX0sZm9ybWF0UmdiOnpjdCx0b1N0cmluZzp6Y3R9KSxVbHQoVWN0LFZjdCxqbHQoR2x0LHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P1NjdDpNYXRoLnBvdyhTY3QsdCksbmV3IFVjdCh0aGlzLnIqdCx0aGlzLmcqdCx0aGlzLmIqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD93Y3Q6TWF0aC5wb3cod2N0LHQpLG5ldyBVY3QodGhpcy5yKnQsdGhpcy5nKnQsdGhpcy5iKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuLS41PD10aGlzLnImJnRoaXMucjwyNTUuNSYmLS41PD10aGlzLmcmJnRoaXMuZzwyNTUuNSYmLS41PD10aGlzLmImJnRoaXMuYjwyNTUuNSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGhleDpqY3QsZm9ybWF0SGV4OmpjdCxmb3JtYXRSZ2I6R2N0LHRvU3RyaW5nOkdjdH0pKSxVbHQoWGN0LChmdW5jdGlvbiBRY3QodCxlLG4saSl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP1ljdCh0KTpuZXcgWGN0KHQsZSxuLG51bGw9PWk/MTppKX0pLGpsdChHbHQse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/U2N0Ok1hdGgucG93KFNjdCx0KSxuZXcgWGN0KHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/d2N0Ok1hdGgucG93KHdjdCx0KSxuZXcgWGN0KHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5oJTM2MCszNjAqKHRoaXMuaDwwKSxlPWlzTmFOKHQpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLG49dGhpcy5sLGk9bisobjwuNT9uOjEtbikqZSxyPTIqbi1pO3JldHVybiBuZXcgVWN0KCRjdCh0Pj0yNDA/dC0yNDA6dCsxMjAscixpKSwkY3QodCxyLGkpLCRjdCh0PDEyMD90KzI0MDp0LTEyMCxyLGkpLHRoaXMub3BhY2l0eSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxmb3JtYXRIc2w6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wYWNpdHk7cmV0dXJuKDE9PT0odD1pc05hTih0KT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSkpPyJoc2woIjoiaHNsYSgiKSsodGhpcy5ofHwwKSsiLCAiKzEwMCoodGhpcy5zfHwwKSsiJSwgIisxMDAqKHRoaXMubHx8MCkrIiUiKygxPT09dD8iKSI6IiwgIit0KyIpIil9fSkpO3ZhciB0dXQ9KGZ1bmN0aW9uIHQoZSl7dmFyIG49KGZ1bmN0aW9uIGkodCl7cmV0dXJuIDE9PSh0PSt0KT9aY3Q6ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbi1lPyhmdW5jdGlvbiBpKHQsZSxuKXtyZXR1cm4gdD1NYXRoLnBvdyh0LG4pLGU9TWF0aC5wb3coZSxuKS10LG49MS9uLGZ1bmN0aW9uKGkpe3JldHVybiBNYXRoLnBvdyh0K2kqZSxuKX19KShlLG4sdCk6S2N0KGlzTmFOKGUpP246ZSl9fSkoZSk7ZnVuY3Rpb24gcih0LGUpe3ZhciBpPW4oKHQ9VmN0KHQpKS5yLChlPVZjdChlKSkucikscj1uKHQuZyxlLmcpLG89bih0LmIsZS5iKSxhPVpjdCh0Lm9wYWNpdHksZS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQucj1pKGUpLHQuZz1yKGUpLHQuYj1vKGUpLHQub3BhY2l0eT1hKGUpLHQrIiJ9fXJldHVybiByLmdhbW1hPXQscn0pKDEpO2Z1bmN0aW9uIGV1dCh0LGUpe3JldHVybiB0PSt0LGU9K2UsZnVuY3Rpb24obil7cmV0dXJuIHQqKDEtbikrZSpufX12YXIgbnV0PS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxpdXQ9bmV3IFJlZ0V4cChudXQuc291cmNlLCJnIik7ZnVuY3Rpb24gcnV0KHQsZSl7dmFyIG4saSxyLG89bnV0Lmxhc3RJbmRleD1pdXQubGFzdEluZGV4PTAsYT0tMSxzPVtdLGw9W107Zm9yKHQrPSIiLGUrPSIiOyhuPW51dC5leGVjKHQpKSYmKGk9aXV0LmV4ZWMoZSkpOykocj1pLmluZGV4KT5vJiYocj1lLnNsaWNlKG8sciksc1thXT9zW2FdKz1yOnNbKythXT1yKSwobj1uWzBdKT09PShpPWlbMF0pP3NbYV0/c1thXSs9aTpzWysrYV09aTooc1srK2FdPW51bGwsbC5wdXNoKHtpOmEseDpldXQobixpKX0pKSxvPWl1dC5sYXN0SW5kZXg7cmV0dXJuIG88ZS5sZW5ndGgmJihyPWUuc2xpY2Uobyksc1thXT9zW2FdKz1yOnNbKythXT1yKSxzLmxlbmd0aDwyP2xbMF0/KGZ1bmN0aW9uIGModCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0KGUpKyIifX0pKGxbMF0ueCk6KGZ1bmN0aW9uIHUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSkoZSk6KGU9bC5sZW5ndGgsZnVuY3Rpb24odCl7Zm9yKHZhciBuLGk9MDtpPGU7KytpKXNbKG49bFtpXSkuaV09bi54KHQpO3JldHVybiBzLmpvaW4oIiIpfSl9dmFyIG91dCxhdXQsc3V0LGx1dCxjdXQ9MTgwL01hdGguUEksdXV0PXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9O2Z1bmN0aW9uIGh1dCh0LGUsbixpLHIsbyl7dmFyIGEscyxsO3JldHVybihhPU1hdGguc3FydCh0KnQrZSplKSkmJih0Lz1hLGUvPWEpLChsPXQqbitlKmkpJiYobi09dCpsLGktPWUqbCksKHM9TWF0aC5zcXJ0KG4qbitpKmkpKSYmKG4vPXMsaS89cyxsLz1zKSx0Kmk8ZSpuJiYodD0tdCxlPS1lLGw9LWwsYT0tYSkse3RyYW5zbGF0ZVg6cix0cmFuc2xhdGVZOm8scm90YXRlOk1hdGguYXRhbjIoZSx0KSpjdXQsc2tld1g6TWF0aC5hdGFuKGwpKmN1dCxzY2FsZVg6YSxzY2FsZVk6c319ZnVuY3Rpb24gZHV0KHQsZSxuLGkpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIHQubGVuZ3RoP3QucG9wKCkrIiAiOiIifXJldHVybiBmdW5jdGlvbihvLGEpe3ZhciBzPVtdLGw9W107cmV0dXJuIG89dChvKSxhPXQoYSksKGZ1bmN0aW9uIGModCxpLHIsbyxhLHMpe2lmKHQhPT1yfHxpIT09byl7dmFyIGw9YS5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLGUsbnVsbCxuKTtzLnB1c2goe2k6bC00LHg6ZXV0KHQscil9LHtpOmwtMix4OmV1dChpLG8pfSl9ZWxzZShyfHxvKSYmYS5wdXNoKCJ0cmFuc2xhdGUoIityK2UrbytuKX0pKG8udHJhbnNsYXRlWCxvLnRyYW5zbGF0ZVksYS50cmFuc2xhdGVYLGEudHJhbnNsYXRlWSxzLGwpLChmdW5jdGlvbiB1KHQsZSxuLG8pe3QhPT1lPyh0LWU+MTgwP2UrPTM2MDplLXQ+MTgwJiYodCs9MzYwKSxvLnB1c2goe2k6bi5wdXNoKHIobikrInJvdGF0ZSgiLG51bGwsaSktMix4OmV1dCh0LGUpfSkpOmUmJm4ucHVzaChyKG4pKyJyb3RhdGUoIitlK2kpfSkoby5yb3RhdGUsYS5yb3RhdGUscyxsKSwoZnVuY3Rpb24gaCh0LGUsbixvKXt0IT09ZT9vLnB1c2goe2k6bi5wdXNoKHIobikrInNrZXdYKCIsbnVsbCxpKS0yLHg6ZXV0KHQsZSl9KTplJiZuLnB1c2gocihuKSsic2tld1goIitlK2kpfSkoby5za2V3WCxhLnNrZXdYLHMsbCksKGZ1bmN0aW9uIGQodCxlLG4saSxvLGEpe2lmKHQhPT1ufHxlIT09aSl7dmFyIHM9by5wdXNoKHIobykrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO2EucHVzaCh7aTpzLTQseDpldXQodCxuKX0se2k6cy0yLHg6ZXV0KGUsaSl9KX1lbHNlIDE9PT1uJiYxPT09aXx8by5wdXNoKHIobykrInNjYWxlKCIrbisiLCIraSsiKSIpfSkoby5zY2FsZVgsby5zY2FsZVksYS5zY2FsZVgsYS5zY2FsZVkscyxsKSxvPWE9bnVsbCxmdW5jdGlvbih0KXtmb3IodmFyIGUsbj0tMSxpPWwubGVuZ3RoOysrbjxpOylzWyhlPWxbbl0pLmldPWUueCh0KTtyZXR1cm4gcy5qb2luKCIiKX19fXZhciBwdXQ9ZHV0KChmdW5jdGlvbiBmdXQodCl7cmV0dXJuIm5vbmUiPT09dD91dXQ6KG91dHx8KG91dD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSxhdXQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHN1dD1kb2N1bWVudC5kZWZhdWx0Vmlldyksb3V0LnN0eWxlLnRyYW5zZm9ybT10LHQ9c3V0LmdldENvbXB1dGVkU3R5bGUoYXV0LmFwcGVuZENoaWxkKG91dCksbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgidHJhbnNmb3JtIiksYXV0LnJlbW92ZUNoaWxkKG91dCksaHV0KCsodD10LnNsaWNlKDcsLTEpLnNwbGl0KCIsIikpWzBdLCt0WzFdLCt0WzJdLCt0WzNdLCt0WzRdLCt0WzVdKSl9KSwicHgsICIsInB4KSIsImRlZykiKSxtdXQ9ZHV0KChmdW5jdGlvbiBndXQodCl7cmV0dXJuIG51bGw9PXQ/dXV0OihsdXR8fChsdXQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKSksbHV0LnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIix0KSwodD1sdXQudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/aHV0KCh0PXQubWF0cml4KS5hLHQuYix0LmMsdC5kLHQuZSx0LmYpOnV1dCl9KSwiLCAiLCIpIiwiKSIpLF91dD1NYXRoLlNRUlQyO2Z1bmN0aW9uIHl1dCh0KXtyZXR1cm4oKHQ9TWF0aC5leHAodCkpKzEvdCkvMn1mdW5jdGlvbiB2dXQodCxlKXt2YXIgbixpLHI9dFswXSxvPXRbMV0sYT10WzJdLHM9ZVsyXSxsPWVbMF0tcixjPWVbMV0tbyx1PWwqbCtjKmM7aWYodTwxZS0xMilpPU1hdGgubG9nKHMvYSkvX3V0LG49ZnVuY3Rpb24odCl7cmV0dXJuW3IrdCpsLG8rdCpjLGEqTWF0aC5leHAoX3V0KnQqaSldfTtlbHNle3ZhciBoPU1hdGguc3FydCh1KSxkPShzKnMtYSphKzQqdSkvKDIqYSoyKmgpLHA9KHMqcy1hKmEtNCp1KS8oMipzKjIqaCksZj1NYXRoLmxvZyhNYXRoLnNxcnQoZCpkKzEpLWQpLG09TWF0aC5sb2coTWF0aC5zcXJ0KHAqcCsxKS1wKTtpPShtLWYpL191dCxuPWZ1bmN0aW9uKHQpe3ZhciBlPXQqaSxuPXl1dChmKSxzPWEvKDIqaCkqKG4qKGZ1bmN0aW9uIHUodCl7cmV0dXJuKCh0PU1hdGguZXhwKDIqdCkpLTEpLyh0KzEpfSkoX3V0KmUrZiktKGZ1bmN0aW9uIGQodCl7cmV0dXJuKCh0PU1hdGguZXhwKHQpKS0xL3QpLzJ9KShmKSk7cmV0dXJuW3IrcypsLG8rcypjLGEqbi95dXQoX3V0KmUrZildfX1yZXR1cm4gbi5kdXJhdGlvbj0xZTMqaSxufXZhciBidXQseHV0LHd1dD0wLFN1dD0wLE11dD0wLEV1dD0wLFR1dD0wLEN1dD0wLEF1dD0ib2JqZWN0Ij09dHlwZW9mIHBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxrdXQ9Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6ZnVuY3Rpb24odCl7c2V0VGltZW91dCh0LDE3KX07ZnVuY3Rpb24gTHV0KCl7cmV0dXJuIFR1dHx8KGt1dChQdXQpLFR1dD1BdXQubm93KCkrQ3V0KX1mdW5jdGlvbiBQdXQoKXtUdXQ9MH1mdW5jdGlvbiBOdXQoKXt0aGlzLl9jYWxsPXRoaXMuX3RpbWU9dGhpcy5fbmV4dD1udWxsfWZ1bmN0aW9uIEl1dCh0LGUsbil7dmFyIGk9bmV3IE51dDtyZXR1cm4gaS5yZXN0YXJ0KHQsZSxuKSxpfWZ1bmN0aW9uIE91dCgpe1R1dD0oRXV0PUF1dC5ub3coKSkrQ3V0LHd1dD1TdXQ9MDt0cnl7IShmdW5jdGlvbiB0KCl7THV0KCksKyt3dXQ7Zm9yKHZhciB0LGU9YnV0O2U7KSh0PVR1dC1lLl90aW1lKT49MCYmZS5fY2FsbC5jYWxsKG51bGwsdCksZT1lLl9uZXh0Oy0td3V0fSkoKX1maW5hbGx5e3d1dD0wLChmdW5jdGlvbiBlKCl7Zm9yKHZhciB0LGUsbj1idXQsaT0xLzA7bjspbi5fY2FsbD8oaT5uLl90aW1lJiYoaT1uLl90aW1lKSx0PW4sbj1uLl9uZXh0KTooZT1uLl9uZXh0LG4uX25leHQ9bnVsbCxuPXQ/dC5fbmV4dD1lOmJ1dD1lKTt4dXQ9dCx6dXQoaSl9KSgpLFR1dD0wfX1mdW5jdGlvbiBSdXQoKXt2YXIgdD1BdXQubm93KCksZT10LUV1dDtlPjFlMyYmKEN1dC09ZSxFdXQ9dCl9ZnVuY3Rpb24genV0KHQpe3d1dHx8KFN1dCYmKFN1dD1jbGVhclRpbWVvdXQoU3V0KSksdC1UdXQ+MjQ/KHQ8MS8wJiYoU3V0PXNldFRpbWVvdXQoT3V0LHQtQXV0Lm5vdygpLUN1dCkpLE11dCYmKE11dD1jbGVhckludGVydmFsKE11dCkpKTooTXV0fHwoRXV0PUF1dC5ub3coKSxNdXQ9c2V0SW50ZXJ2YWwoUnV0LDFlMykpLHd1dD0xLGt1dChPdXQpKSl9ZnVuY3Rpb24gRHV0KHQsZSxuKXt2YXIgaT1uZXcgTnV0O3JldHVybiBpLnJlc3RhcnQoKGZ1bmN0aW9uKG4pe2kuc3RvcCgpLHQobitlKX0pLGU9bnVsbD09ZT8wOitlLG4pLGl9TnV0LnByb3RvdHlwZT1JdXQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpOdXQscmVzdGFydDpmdW5jdGlvbih0LGUsbil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24iKTtuPShudWxsPT1uP0x1dCgpOituKSsobnVsbD09ZT8wOitlKSx0aGlzLl9uZXh0fHx4dXQ9PT10aGlzfHwoeHV0P3h1dC5fbmV4dD10aGlzOmJ1dD10aGlzLHh1dD10aGlzKSx0aGlzLl9jYWxsPXQsdGhpcy5fdGltZT1uLHp1dCgpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCx6dXQoKSl9fTt2YXIgQnV0PWJzdCgic3RhcnQiLCJlbmQiLCJjYW5jZWwiLCJpbnRlcnJ1cHQiKSxIdXQ9W107ZnVuY3Rpb24gRnV0KHQsZSxuLGkscixvKXt2YXIgYT10Ll9fdHJhbnNpdGlvbjtpZihhKXtpZihuIGluIGEpcmV0dXJufWVsc2UgdC5fX3RyYW5zaXRpb249e307IShmdW5jdGlvbiBzKHQsZSxuKXt2YXIgaSxyPXQuX190cmFuc2l0aW9uO2Z1bmN0aW9uIG8obCl7dmFyIGMsdSxoLGQ7aWYoMSE9PW4uc3RhdGUpcmV0dXJuIHMoKTtmb3IoYyBpbiByKWlmKChkPXJbY10pLm5hbWU9PT1uLm5hbWUpe2lmKDM9PT1kLnN0YXRlKXJldHVybiBEdXQobyk7ND09PWQuc3RhdGU/KGQuc3RhdGU9NixkLnRpbWVyLnN0b3AoKSxkLm9uLmNhbGwoImludGVycnVwdCIsdCx0Ll9fZGF0YV9fLGQuaW5kZXgsZC5ncm91cCksZGVsZXRlIHJbY10pOitjPGUmJihkLnN0YXRlPTYsZC50aW1lci5zdG9wKCksZC5vbi5jYWxsKCJjYW5jZWwiLHQsdC5fX2RhdGFfXyxkLmluZGV4LGQuZ3JvdXApLGRlbGV0ZSByW2NdKX1pZihEdXQoKGZ1bmN0aW9uKCl7Mz09PW4uc3RhdGUmJihuLnN0YXRlPTQsbi50aW1lci5yZXN0YXJ0KGEsbi5kZWxheSxuLnRpbWUpLGEobCkpfSkpLG4uc3RhdGU9MixuLm9uLmNhbGwoInN0YXJ0Iix0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSwyPT09bi5zdGF0ZSl7Zm9yKG4uc3RhdGU9MyxpPW5ldyBBcnJheShoPW4udHdlZW4ubGVuZ3RoKSxjPTAsdT0tMTtjPGg7KytjKShkPW4udHdlZW5bY10udmFsdWUuY2FsbCh0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSkmJihpWysrdV09ZCk7aS5sZW5ndGg9dSsxfX1mdW5jdGlvbiBhKGUpe2Zvcih2YXIgcj1lPG4uZHVyYXRpb24/bi5lYXNlLmNhbGwobnVsbCxlL24uZHVyYXRpb24pOihuLnRpbWVyLnJlc3RhcnQocyksbi5zdGF0ZT01LDEpLG89LTEsYT1pLmxlbmd0aDsrK288YTspaVtvXS5jYWxsKHQscik7NT09PW4uc3RhdGUmJihuLm9uLmNhbGwoImVuZCIsdCx0Ll9fZGF0YV9fLG4uaW5kZXgsbi5ncm91cCkscygpKX1mdW5jdGlvbiBzKCl7Zm9yKHZhciBpIGluIG4uc3RhdGU9NixuLnRpbWVyLnN0b3AoKSxkZWxldGUgcltlXSxyKXJldHVybjtkZWxldGUgdC5fX3RyYW5zaXRpb259cltlXT1uLG4udGltZXI9SXV0KChmdW5jdGlvbiBsKHQpe24uc3RhdGU9MSxuLnRpbWVyLnJlc3RhcnQobyxuLmRlbGF5LG4udGltZSksbi5kZWxheTw9dCYmbyh0LW4uZGVsYXkpfSksMCxuLnRpbWUpfSkodCxuLHtuYW1lOmUsaW5kZXg6aSxncm91cDpyLG9uOkJ1dCx0d2VlbjpIdXQsdGltZTpvLnRpbWUsZGVsYXk6by5kZWxheSxkdXJhdGlvbjpvLmR1cmF0aW9uLGVhc2U6by5lYXNlLHRpbWVyOm51bGwsc3RhdGU6MH0pfWZ1bmN0aW9uIFZ1dCh0LGUpe3ZhciBuPWp1dCh0LGUpO2lmKG4uc3RhdGU+MCl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZCIpO3JldHVybiBufWZ1bmN0aW9uIFV1dCh0LGUpe3ZhciBuPWp1dCh0LGUpO2lmKG4uc3RhdGU+Myl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHJ1bm5pbmciKTtyZXR1cm4gbn1mdW5jdGlvbiBqdXQodCxlKXt2YXIgbj10Ll9fdHJhbnNpdGlvbjtpZighbnx8IShuPW5bZV0pKXRocm93IG5ldyBFcnJvcigidHJhbnNpdGlvbiBub3QgZm91bmQiKTtyZXR1cm4gbn1mdW5jdGlvbiBHdXQodCxlKXt2YXIgbixpLHIsbz10Ll9fdHJhbnNpdGlvbixhPSEwO2lmKG8pe2ZvcihyIGluIGU9bnVsbD09ZT9udWxsOmUrIiIsbykobj1vW3JdKS5uYW1lPT09ZT8oaT1uLnN0YXRlPjImJm4uc3RhdGU8NSxuLnN0YXRlPTYsbi50aW1lci5zdG9wKCksbi5vbi5jYWxsKGk/ImludGVycnVwdCI6ImNhbmNlbCIsdCx0Ll9fZGF0YV9fLG4uaW5kZXgsbi5ncm91cCksZGVsZXRlIG9bcl0pOmE9ITE7YSYmZGVsZXRlIHQuX190cmFuc2l0aW9ufX1mdW5jdGlvbiBXdXQodCxlKXt2YXIgbixpO3JldHVybiBmdW5jdGlvbigpe3ZhciByPVV1dCh0aGlzLHQpLG89ci50d2VlbjtpZihvIT09bilmb3IodmFyIGE9MCxzPShpPW49bykubGVuZ3RoO2E8czsrK2EpaWYoaVthXS5uYW1lPT09ZSl7KGk9aS5zbGljZSgpKS5zcGxpY2UoYSwxKTticmVha31yLnR3ZWVuPWl9fWZ1bmN0aW9uIHF1dCh0LGUsbil7dmFyIGkscjtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89VXV0KHRoaXMsdCksYT1vLnR3ZWVuO2lmKGEhPT1pKXtyPShpPWEpLnNsaWNlKCk7Zm9yKHZhciBzPXtuYW1lOmUsdmFsdWU6bn0sbD0wLGM9ci5sZW5ndGg7bDxjOysrbClpZihyW2xdLm5hbWU9PT1lKXtyW2xdPXM7YnJlYWt9bD09PWMmJnIucHVzaChzKX1vLnR3ZWVuPXJ9fWZ1bmN0aW9uIFl1dCh0LGUsbil7dmFyIGk9dC5faWQ7cmV0dXJuIHQuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1VdXQodGhpcyxpKTsodC52YWx1ZXx8KHQudmFsdWU9e30pKVtlXT1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pKSxmdW5jdGlvbih0KXtyZXR1cm4ganV0KHQsaSkudmFsdWVbZV19fWZ1bmN0aW9uIFh1dCh0LGUpe3ZhciBuO3JldHVybigibnVtYmVyIj09dHlwZW9mIGU/ZXV0OmUgaW5zdGFuY2VvZiBEY3Q/dHV0OihuPURjdChlKSk/KGU9bix0dXQpOnJ1dCkodCxlKX1mdW5jdGlvbiAkdXQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9fWZ1bmN0aW9uIEt1dCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCl9fWZ1bmN0aW9uIFp1dCh0LGUsbil7dmFyIGkscixvPW4rIiI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5nZXRBdHRyaWJ1dGUodCk7cmV0dXJuIGE9PT1vP251bGw6YT09PWk/cjpyPWUoaT1hLG4pfX1mdW5jdGlvbiBKdXQodCxlLG4pe3ZhciBpLHIsbz1uKyIiO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKTtyZXR1cm4gYT09PW8/bnVsbDphPT09aT9yOnI9ZShpPWEsbil9fWZ1bmN0aW9uIFF1dCh0LGUsbil7dmFyIGkscixvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhLHMsbD1uKHRoaXMpO2lmKG51bGwhPWwpcmV0dXJuKGE9dGhpcy5nZXRBdHRyaWJ1dGUodCkpPT09KHM9bCsiIik/bnVsbDphPT09aSYmcz09PXI/bzoocj1zLG89ZShpPWEsbCkpO3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX1mdW5jdGlvbiB0aHQodCxlLG4pe3ZhciBpLHIsbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzLGw9bih0aGlzKTtpZihudWxsIT1sKXJldHVybihhPXRoaXMuZ2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKSk9PT0ocz1sKyIiKT9udWxsOmE9PT1pJiZzPT09cj9vOihyPXMsbz1lKGk9YSxsKSk7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpfX1mdW5jdGlvbiBlaHQodCxlKXtyZXR1cm4gZnVuY3Rpb24obil7dGhpcy5zZXRBdHRyaWJ1dGUodCxlLmNhbGwodGhpcyxuKSl9fWZ1bmN0aW9uIG5odCh0LGUpe3JldHVybiBmdW5jdGlvbihuKXt0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxlLmNhbGwodGhpcyxuKSl9fWZ1bmN0aW9uIGlodCh0LGUpe3ZhciBuLGk7ZnVuY3Rpb24gcigpe3ZhciByPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiByIT09aSYmKG49KGk9cikmJm5odCh0LHIpKSxufXJldHVybiByLl92YWx1ZT1lLHJ9ZnVuY3Rpb24gcmh0KHQsZSl7dmFyIG4saTtmdW5jdGlvbiByKCl7dmFyIHI9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIHIhPT1pJiYobj0oaT1yKSYmZWh0KHQscikpLG59cmV0dXJuIHIuX3ZhbHVlPWUscn1mdW5jdGlvbiBvaHQodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtWdXQodGhpcyx0KS5kZWxheT0rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIGFodCh0LGUpe3JldHVybiBlPStlLGZ1bmN0aW9uKCl7VnV0KHRoaXMsdCkuZGVsYXk9ZX19ZnVuY3Rpb24gc2h0KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7VXV0KHRoaXMsdCkuZHVyYXRpb249K2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBsaHQodCxlKXtyZXR1cm4gZT0rZSxmdW5jdGlvbigpe1V1dCh0aGlzLHQpLmR1cmF0aW9uPWV9fWZ1bmN0aW9uIGNodCh0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXtVdXQodGhpcyx0KS5lYXNlPWV9fWZ1bmN0aW9uIHVodCh0LGUsbil7dmFyIGkscixvPShmdW5jdGlvbiBhKHQpe3JldHVybih0KyIiKS50cmltKCkuc3BsaXQoL158XHMrLykuZXZlcnkoKGZ1bmN0aW9uKHQpe3ZhciBlPXQuaW5kZXhPZigiLiIpO3JldHVybiBlPj0wJiYodD10LnNsaWNlKDAsZSkpLCF0fHwic3RhcnQiPT09dH0pKX0pKGUpP1Z1dDpVdXQ7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9byh0aGlzLHQpLHM9YS5vbjtzIT09aSYmKHI9KGk9cykuY29weSgpKS5vbihlLG4pLGEub249cn19dmFyIGhodD1JbHQucHJvdG90eXBlLmNvbnN0cnVjdG9yO2Z1bmN0aW9uIGRodCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpfX1mdW5jdGlvbiBwaHQodCxlLG4pe3JldHVybiBmdW5jdGlvbihpKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQsZS5jYWxsKHRoaXMsaSksbil9fWZ1bmN0aW9uIGZodCh0LGUsbil7dmFyIGkscjtmdW5jdGlvbiBvKCl7dmFyIG89ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIG8hPT1yJiYoaT0ocj1vKSYmcGh0KHQsbyxuKSksaX1yZXR1cm4gby5fdmFsdWU9ZSxvfWZ1bmN0aW9uIG1odCh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dGhpcy50ZXh0Q29udGVudD10LmNhbGwodGhpcyxlKX19ZnVuY3Rpb24gZ2h0KHQpe3ZhciBlLG47ZnVuY3Rpb24gaSgpe3ZhciBpPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBpIT09biYmKGU9KG49aSkmJm1odChpKSksZX1yZXR1cm4gaS5fdmFsdWU9dCxpfXZhciBfaHQ9MDtmdW5jdGlvbiB5aHQodCxlLG4saSl7dGhpcy5fZ3JvdXBzPXQsdGhpcy5fcGFyZW50cz1lLHRoaXMuX25hbWU9bix0aGlzLl9pZD1pfWZ1bmN0aW9uIHZodCgpe3JldHVybisrX2h0fXZhciBiaHQ9SWx0LnByb3RvdHlwZTt5aHQucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp5aHQsc2VsZWN0OmZ1bmN0aW9uIHhodCh0KXt2YXIgZT10aGlzLl9uYW1lLG49dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PU5zdCh0KSk7Zm9yKHZhciBpPXRoaXMuX2dyb3VwcyxyPWkubGVuZ3RoLG89bmV3IEFycmF5KHIpLGE9MDthPHI7KythKWZvcih2YXIgcyxsLGM9aVthXSx1PWMubGVuZ3RoLGg9b1thXT1uZXcgQXJyYXkodSksZD0wO2Q8dTsrK2QpKHM9Y1tkXSkmJihsPXQuY2FsbChzLHMuX19kYXRhX18sZCxjKSkmJigiX19kYXRhX18iaW4gcyYmKGwuX19kYXRhX189cy5fX2RhdGFfXyksaFtkXT1sLEZ1dChoW2RdLGUsbixkLGgsanV0KHMsbikpKTtyZXR1cm4gbmV3IHlodChvLHRoaXMuX3BhcmVudHMsZSxuKX0sc2VsZWN0QWxsOmZ1bmN0aW9uIHdodCh0KXt2YXIgZT10aGlzLl9uYW1lLG49dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PU9zdCh0KSk7Zm9yKHZhciBpPXRoaXMuX2dyb3VwcyxyPWkubGVuZ3RoLG89W10sYT1bXSxzPTA7czxyOysrcylmb3IodmFyIGwsYz1pW3NdLHU9Yy5sZW5ndGgsaD0wO2g8dTsrK2gpaWYobD1jW2hdKXtmb3IodmFyIGQscD10LmNhbGwobCxsLl9fZGF0YV9fLGgsYyksZj1qdXQobCxuKSxtPTAsZz1wLmxlbmd0aDttPGc7KyttKShkPXBbbV0pJiZGdXQoZCxlLG4sbSxwLGYpO28ucHVzaChwKSxhLnB1c2gobCl9cmV0dXJuIG5ldyB5aHQobyxhLGUsbil9LGZpbHRlcjpmdW5jdGlvbiBTaHQodCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PVJzdCh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLGk9bmV3IEFycmF5KG4pLHI9MDtyPG47KytyKWZvcih2YXIgbyxhPWVbcl0scz1hLmxlbmd0aCxsPWlbcl09W10sYz0wO2M8czsrK2MpKG89YVtjXSkmJnQuY2FsbChvLG8uX19kYXRhX18sYyxhKSYmbC5wdXNoKG8pO3JldHVybiBuZXcgeWh0KGksdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX0sbWVyZ2U6ZnVuY3Rpb24gTWh0KHQpe2lmKHQuX2lkIT09dGhpcy5faWQpdGhyb3cgbmV3IEVycm9yO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj10Ll9ncm91cHMsaT1lLmxlbmd0aCxyPU1hdGgubWluKGksbi5sZW5ndGgpLG89bmV3IEFycmF5KGkpLGE9MDthPHI7KythKWZvcih2YXIgcyxsPWVbYV0sYz1uW2FdLHU9bC5sZW5ndGgsaD1vW2FdPW5ldyBBcnJheSh1KSxkPTA7ZDx1OysrZCkocz1sW2RdfHxjW2RdKSYmKGhbZF09cyk7Zm9yKDthPGk7KythKW9bYV09ZVthXTtyZXR1cm4gbmV3IHlodChvLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9LHNlbGVjdGlvbjpmdW5jdGlvbiBFaHQoKXtyZXR1cm4gbmV3IGhodCh0aGlzLl9ncm91cHMsdGhpcy5fcGFyZW50cyl9LHRyYW5zaXRpb246ZnVuY3Rpb24gVGh0KCl7Zm9yKHZhciB0PXRoaXMuX25hbWUsZT10aGlzLl9pZCxuPXZodCgpLGk9dGhpcy5fZ3JvdXBzLHI9aS5sZW5ndGgsbz0wO288cjsrK28pZm9yKHZhciBhLHM9aVtvXSxsPXMubGVuZ3RoLGM9MDtjPGw7KytjKWlmKGE9c1tjXSl7dmFyIHU9anV0KGEsZSk7RnV0KGEsdCxuLGMscyx7dGltZTp1LnRpbWUrdS5kZWxheSt1LmR1cmF0aW9uLGRlbGF5OjAsZHVyYXRpb246dS5kdXJhdGlvbixlYXNlOnUuZWFzZX0pfXJldHVybiBuZXcgeWh0KGksdGhpcy5fcGFyZW50cyx0LG4pfSxjYWxsOmJodC5jYWxsLG5vZGVzOmJodC5ub2Rlcyxub2RlOmJodC5ub2RlLHNpemU6Ymh0LnNpemUsZW1wdHk6Ymh0LmVtcHR5LGVhY2g6Ymh0LmVhY2gsb246ZnVuY3Rpb24gQ2h0KHQsZSl7dmFyIG49dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9qdXQodGhpcy5ub2RlKCksbikub24ub24odCk6dGhpcy5lYWNoKHVodChuLHQsZSkpfSxhdHRyOmZ1bmN0aW9uIEFodCh0LGUpe3ZhciBuPUNzdCh0KSxpPSJ0cmFuc2Zvcm0iPT09bj9tdXQ6WHV0O3JldHVybiB0aGlzLmF0dHJUd2Vlbih0LCJmdW5jdGlvbiI9PXR5cGVvZiBlPyhuLmxvY2FsP3RodDpRdXQpKG4saSxZdXQodGhpcywiYXR0ci4iK3QsZSkpOm51bGw9PWU/KG4ubG9jYWw/S3V0OiR1dCkobik6KG4ubG9jYWw/SnV0Olp1dCkobixpLGUpKX0sYXR0clR3ZWVuOmZ1bmN0aW9uIGtodCh0LGUpe3ZhciBuPSJhdHRyLiIrdDtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKG49dGhpcy50d2VlbihuKSkmJm4uX3ZhbHVlO2lmKG51bGw9PWUpcmV0dXJuIHRoaXMudHdlZW4obixudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3I7dmFyIGk9Q3N0KHQpO3JldHVybiB0aGlzLnR3ZWVuKG4sKGkubG9jYWw/aWh0OnJodCkoaSxlKSl9LHN0eWxlOmZ1bmN0aW9uIExodCh0LGUsbil7dmFyIGk9InRyYW5zZm9ybSI9PSh0Kz0iIik/cHV0Olh1dDtyZXR1cm4gbnVsbD09ZT90aGlzLnN0eWxlVHdlZW4odCwoZnVuY3Rpb24gcih0LGUpe3ZhciBuLGkscjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1ac3QodGhpcyx0KSxhPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpLFpzdCh0aGlzLHQpKTtyZXR1cm4gbz09PWE/bnVsbDpvPT09biYmYT09PWk/cjpyPWUobj1vLGk9YSl9fSkodCxpKSkub24oImVuZC5zdHlsZS4iK3QsZGh0KHQpKToiZnVuY3Rpb24iPT10eXBlb2YgZT90aGlzLnN0eWxlVHdlZW4odCwoZnVuY3Rpb24gYSh0LGUsbil7dmFyIGkscixvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPVpzdCh0aGlzLHQpLHM9bih0aGlzKSxsPXMrIiI7cmV0dXJuIG51bGw9PXMmJih0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpLGw9cz1ac3QodGhpcyx0KSksYT09PWw/bnVsbDphPT09aSYmbD09PXI/bzoocj1sLG89ZShpPWEscykpfX0pKHQsaSxZdXQodGhpcywic3R5bGUuIit0LGUpKSkuZWFjaCgoZnVuY3Rpb24gbyh0LGUpe3ZhciBuLGkscixvLGE9InN0eWxlLiIrZSxzPSJlbmQuIithO3JldHVybiBmdW5jdGlvbigpe3ZhciBsPVV1dCh0aGlzLHQpLGM9bC5vbix1PW51bGw9PWwudmFsdWVbYV0/b3x8KG89ZGh0KGUpKTp2b2lkIDA7Yz09PW4mJnI9PT11fHwoaT0obj1jKS5jb3B5KCkpLm9uKHMscj11KSxsLm9uPWl9fSkodGhpcy5faWQsdCkpOnRoaXMuc3R5bGVUd2Vlbih0LChmdW5jdGlvbiBzKHQsZSxuKXt2YXIgaSxyLG89bisiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1ac3QodGhpcyx0KTtyZXR1cm4gYT09PW8/bnVsbDphPT09aT9yOnI9ZShpPWEsbil9fSkodCxpLGUpLG4pLm9uKCJlbmQuc3R5bGUuIit0LG51bGwpfSxzdHlsZVR3ZWVuOmZ1bmN0aW9uIFBodCh0LGUsbil7dmFyIGk9InN0eWxlLiIrKHQrPSIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKGk9dGhpcy50d2VlbihpKSkmJmkuX3ZhbHVlO2lmKG51bGw9PWUpcmV0dXJuIHRoaXMudHdlZW4oaSxudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4oaSxmaHQodCxlLG51bGw9PW4/IiI6bikpfSx0ZXh0OmZ1bmN0aW9uIE5odCh0KXtyZXR1cm4gdGhpcy50d2VlbigidGV4dCIsImZ1bmN0aW9uIj09dHlwZW9mIHQ/KGZ1bmN0aW9uIGUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKTt0aGlzLnRleHRDb250ZW50PW51bGw9PWU/IiI6ZX19KShZdXQodGhpcywidGV4dCIsdCkpOihmdW5jdGlvbiBuKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9dH19KShudWxsPT10PyIiOnQrIiIpKX0sdGV4dFR3ZWVuOmZ1bmN0aW9uIElodCh0KXt2YXIgZT0idGV4dCI7aWYoYXJndW1lbnRzLmxlbmd0aDwxKXJldHVybihlPXRoaXMudHdlZW4oZSkpJiZlLl92YWx1ZTtpZihudWxsPT10KXJldHVybiB0aGlzLnR3ZWVuKGUsbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKGUsZ2h0KHQpKX0scmVtb3ZlOmZ1bmN0aW9uIE9odCgpe3JldHVybiB0aGlzLm9uKCJlbmQucmVtb3ZlIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhcmVudE5vZGU7Zm9yKHZhciBuIGluIHRoaXMuX190cmFuc2l0aW9uKWlmKCtuIT09ZSlyZXR1cm47dCYmdC5yZW1vdmVDaGlsZCh0aGlzKX19KSh0aGlzLl9pZCkpfSx0d2VlbjpmdW5jdGlvbiBSaHQodCxlKXt2YXIgbj10aGlzLl9pZDtpZih0Kz0iIixhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgaSxyPWp1dCh0aGlzLm5vZGUoKSxuKS50d2VlbixvPTAsYT1yLmxlbmd0aDtvPGE7KytvKWlmKChpPXJbb10pLm5hbWU9PT10KXJldHVybiBpLnZhbHVlO3JldHVybiBudWxsfXJldHVybiB0aGlzLmVhY2goKG51bGw9PWU/V3V0OnF1dCkobix0LGUpKX0sZGVsYXk6ZnVuY3Rpb24gemh0KHQpe3ZhciBlPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIHQ/b2h0OmFodCkoZSx0KSk6anV0KHRoaXMubm9kZSgpLGUpLmRlbGF5fSxkdXJhdGlvbjpmdW5jdGlvbiBEaHQodCl7dmFyIGU9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgdD9zaHQ6bGh0KShlLHQpKTpqdXQodGhpcy5ub2RlKCksZSkuZHVyYXRpb259LGVhc2U6ZnVuY3Rpb24gQmh0KHQpe3ZhciBlPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChjaHQoZSx0KSk6anV0KHRoaXMubm9kZSgpLGUpLmVhc2V9LGVuZDpmdW5jdGlvbiBIaHQoKXt2YXIgdCxlLG49dGhpcyxpPW4uX2lkLHI9bi5zaXplKCk7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihvLGEpe3ZhciBzPXt2YWx1ZTphfSxsPXt2YWx1ZTpmdW5jdGlvbigpezA9PS0tciYmbygpfX07bi5lYWNoKChmdW5jdGlvbigpe3ZhciBuPVV1dCh0aGlzLGkpLHI9bi5vbjtyIT09dCYmKChlPSh0PXIpLmNvcHkoKSkuXy5jYW5jZWwucHVzaChzKSxlLl8uaW50ZXJydXB0LnB1c2gocyksZS5fLmVuZC5wdXNoKGwpKSxuLm9uPWV9KSl9KSl9fTt2YXIgRmh0PXt0aW1lOm51bGwsZGVsYXk6MCxkdXJhdGlvbjoyNTAsZWFzZTpFZn07ZnVuY3Rpb24gVmh0KHQsZSl7Zm9yKHZhciBuOyEobj10Ll9fdHJhbnNpdGlvbil8fCEobj1uW2VdKTspaWYoISh0PXQucGFyZW50Tm9kZSkpcmV0dXJuIEZodC50aW1lPUx1dCgpLEZodDtyZXR1cm4gbn1mdW5jdGlvbiBVaHQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIGpodCh0LGUsbil7dGhpcy50YXJnZXQ9dCx0aGlzLnR5cGU9ZSx0aGlzLnRyYW5zZm9ybT1ufWZ1bmN0aW9uIEdodCh0LGUsbil7dGhpcy5rPXQsdGhpcy54PWUsdGhpcy55PW59SWx0LnByb3RvdHlwZS5pbnRlcnJ1cHQ9ZnVuY3Rpb24gV2h0KHQpe3JldHVybiB0aGlzLmVhY2goKGZ1bmN0aW9uKCl7R3V0KHRoaXMsdCl9KSl9LElsdC5wcm90b3R5cGUudHJhbnNpdGlvbj1mdW5jdGlvbiBxaHQodCl7dmFyIGUsbjt0IGluc3RhbmNlb2YgeWh0PyhlPXQuX2lkLHQ9dC5fbmFtZSk6KGU9dmh0KCksKG49Rmh0KS50aW1lPUx1dCgpLHQ9bnVsbD09dD9udWxsOnQrIiIpO2Zvcih2YXIgaT10aGlzLl9ncm91cHMscj1pLmxlbmd0aCxvPTA7bzxyOysrbylmb3IodmFyIGEscz1pW29dLGw9cy5sZW5ndGgsYz0wO2M8bDsrK2MpKGE9c1tjXSkmJkZ1dChhLHQsZSxjLHMsbnx8Vmh0KGEsZSkpO3JldHVybiBuZXcgeWh0KGksdGhpcy5fcGFyZW50cyx0LGUpfSxHaHQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpHaHQsc2NhbGU6ZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10P3RoaXM6bmV3IEdodCh0aGlzLmsqdCx0aGlzLngsdGhpcy55KX0sdHJhbnNsYXRlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIDA9PT10JjA9PT1lP3RoaXM6bmV3IEdodCh0aGlzLmssdGhpcy54K3RoaXMuayp0LHRoaXMueSt0aGlzLmsqZSl9LGFwcGx5OmZ1bmN0aW9uKHQpe3JldHVyblt0WzBdKnRoaXMuayt0aGlzLngsdFsxXSp0aGlzLmsrdGhpcy55XX0sYXBwbHlYOmZ1bmN0aW9uKHQpe3JldHVybiB0KnRoaXMuayt0aGlzLnh9LGFwcGx5WTpmdW5jdGlvbih0KXtyZXR1cm4gdCp0aGlzLmsrdGhpcy55fSxpbnZlcnQ6ZnVuY3Rpb24odCl7cmV0dXJuWyh0WzBdLXRoaXMueCkvdGhpcy5rLCh0WzFdLXRoaXMueSkvdGhpcy5rXX0saW52ZXJ0WDpmdW5jdGlvbih0KXtyZXR1cm4odC10aGlzLngpL3RoaXMua30saW52ZXJ0WTpmdW5jdGlvbih0KXtyZXR1cm4odC10aGlzLnkpL3RoaXMua30scmVzY2FsZVg6ZnVuY3Rpb24odCl7cmV0dXJuIHQuY29weSgpLmRvbWFpbih0LnJhbmdlKCkubWFwKHRoaXMuaW52ZXJ0WCx0aGlzKS5tYXAodC5pbnZlcnQsdCkpfSxyZXNjYWxlWTpmdW5jdGlvbih0KXtyZXR1cm4gdC5jb3B5KCkuZG9tYWluKHQucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRZLHRoaXMpLm1hcCh0LmludmVydCx0KSl9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuInRyYW5zbGF0ZSgiK3RoaXMueCsiLCIrdGhpcy55KyIpIHNjYWxlKCIrdGhpcy5rKyIpIn19O3ZhciBZaHQ9bmV3IEdodCgxLDAsMCk7ZnVuY3Rpb24gWGh0KHQpe3JldHVybiB0Ll9fem9vbXx8WWh0fWZ1bmN0aW9uICRodCgpe3dsdC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBLaHQoKXt3bHQucHJldmVudERlZmF1bHQoKSx3bHQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gWmh0KCl7cmV0dXJuIXdsdC5idXR0b259ZnVuY3Rpb24gSmh0KCl7dmFyIHQsZSxuPXRoaXM7cmV0dXJuIG4gaW5zdGFuY2VvZiBTVkdFbGVtZW50Pyh0PShuPW4ub3duZXJTVkdFbGVtZW50fHxuKS53aWR0aC5iYXNlVmFsLnZhbHVlLGU9bi5oZWlnaHQuYmFzZVZhbC52YWx1ZSk6KHQ9bi5jbGllbnRXaWR0aCxlPW4uY2xpZW50SGVpZ2h0KSxbWzAsMF0sW3QsZV1dfWZ1bmN0aW9uIFFodCgpe3JldHVybiB0aGlzLl9fem9vbXx8WWh0fWZ1bmN0aW9uIHRkdCgpe3JldHVybi13bHQuZGVsdGFZKih3bHQuZGVsdGFNb2RlPzEyMDoxKS81MDB9ZnVuY3Rpb24gZWR0KCl7cmV0dXJuIm9udG91Y2hzdGFydCJpbiB0aGlzfWZ1bmN0aW9uIG5kdCh0LGUsbil7dmFyIGk9dC5pbnZlcnRYKGVbMF1bMF0pLW5bMF1bMF0scj10LmludmVydFgoZVsxXVswXSktblsxXVswXSxvPXQuaW52ZXJ0WShlWzBdWzFdKS1uWzBdWzFdLGE9dC5pbnZlcnRZKGVbMV1bMV0pLW5bMV1bMV07cmV0dXJuIHQudHJhbnNsYXRlKHI+aT8oaStyKS8yOk1hdGgubWluKDAsaSl8fE1hdGgubWF4KDAsciksYT5vPyhvK2EpLzI6TWF0aC5taW4oMCxvKXx8TWF0aC5tYXgoMCxhKSl9WGh0LnByb3RvdHlwZT1HaHQucHJvdG90eXBlO3ZhciBpZHQ9eGUoT2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsdmVyc2lvbjoiNC4xMy4wIixiaXNlY3Q6dVIsYmlzZWN0UmlnaHQ6dVIsYmlzZWN0TGVmdDpoUixhc2NlbmRpbmc6c1IsYmlzZWN0b3I6bFIsY3Jvc3M6ZnVuY3Rpb24gcmR0KHQsZSxuKXt2YXIgaSxyLG8sYSxzPXQubGVuZ3RoLGw9ZS5sZW5ndGgsYz1uZXcgQXJyYXkocypsKTtmb3IobnVsbD09biYmKG49ZFIpLGk9bz0wO2k8czsrK2kpZm9yKGE9dFtpXSxyPTA7cjxsOysrciwrK28pY1tvXT1uKGEsZVtyXSk7cmV0dXJuIGN9LGRlc2NlbmRpbmc6ZnVuY3Rpb24gb2R0KHQsZSl7cmV0dXJuIGU8dD8tMTplPnQ/MTplPj10PzA6TmFOfSxkZXZpYXRpb246bVIsZXh0ZW50OmdSLGhpc3RvZ3JhbTpmdW5jdGlvbiBhZHQoKXt2YXIgdD14UixlPWdSLG49QVI7ZnVuY3Rpb24gaShpKXt2YXIgcixvLGE9aS5sZW5ndGgscz1uZXcgQXJyYXkoYSk7Zm9yKHI9MDtyPGE7KytyKXNbcl09dChpW3JdLHIsaSk7dmFyIGw9ZShzKSxjPWxbMF0sdT1sWzFdLGg9bihzLGMsdSk7QXJyYXkuaXNBcnJheShoKXx8KGg9Q1IoYyx1LGgpLGg9d1IoTWF0aC5jZWlsKGMvaCkqaCxNYXRoLmZsb29yKHUvaCkqaCxoKSk7Zm9yKHZhciBkPWgubGVuZ3RoO2hbMF08PWM7KWguc2hpZnQoKSwtLWQ7Zm9yKDtoW2QtMV0+dTspaC5wb3AoKSwtLWQ7dmFyIHAsZj1uZXcgQXJyYXkoZCsxKTtmb3Iocj0wO3I8PWQ7KytyKShwPWZbcl09W10pLngwPXI+MD9oW3ItMV06YyxwLngxPXI8ZD9oW3JdOnU7Zm9yKHI9MDtyPGE7KytyKWM8PShvPXNbcl0pJiZvPD11JiZmW3VSKGgsbywwLGQpXS5wdXNoKGlbcl0pO3JldHVybiBmfXJldHVybiBpLnZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6YlIoZSksaSk6dH0saS5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpiUihbdFswXSx0WzFdXSksaSk6ZX0saS50aHJlc2hvbGRzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6QXJyYXkuaXNBcnJheSh0KT9iUih5Ui5jYWxsKHQpKTpiUih0KSxpKTpufSxpfSx0aHJlc2hvbGRGcmVlZG1hbkRpYWNvbmlzOmZ1bmN0aW9uIHNkdCh0LGUsbil7cmV0dXJuIHQ9dlIuY2FsbCh0LHBSKS5zb3J0KHNSKSxNYXRoLmNlaWwoKG4tZSkvKDIqKGtSKHQsLjc1KS1rUih0LC4yNSkpKk1hdGgucG93KHQubGVuZ3RoLC0xLzMpKSl9LHRocmVzaG9sZFNjb3R0OmZ1bmN0aW9uIGxkdCh0LGUsbil7cmV0dXJuIE1hdGguY2VpbCgobi1lKS8oMy41Km1SKHQpKk1hdGgucG93KHQubGVuZ3RoLC0xLzMpKSl9LHRocmVzaG9sZFN0dXJnZXM6QVIsbWF4OmZ1bmN0aW9uIGNkdCh0LGUpe3ZhciBuLGkscj10Lmxlbmd0aCxvPS0xO2lmKG51bGw9PWUpe2Zvcig7KytvPHI7KWlmKG51bGwhPShuPXRbb10pJiZuPj1uKWZvcihpPW47KytvPHI7KW51bGwhPShuPXRbb10pJiZuPmkmJihpPW4pfWVsc2UgZm9yKDsrK288cjspaWYobnVsbCE9KG49ZSh0W29dLG8sdCkpJiZuPj1uKWZvcihpPW47KytvPHI7KW51bGwhPShuPWUodFtvXSxvLHQpKSYmbj5pJiYoaT1uKTtyZXR1cm4gaX0sbWVhbjpmdW5jdGlvbiB1ZHQodCxlKXt2YXIgbixpPXQubGVuZ3RoLHI9aSxvPS0xLGE9MDtpZihudWxsPT1lKWZvcig7KytvPGk7KWlzTmFOKG49cFIodFtvXSkpPy0tcjphKz1uO2Vsc2UgZm9yKDsrK288aTspaXNOYU4obj1wUihlKHRbb10sbyx0KSkpPy0tcjphKz1uO2lmKHIpcmV0dXJuIGEvcn0sbWVkaWFuOmZ1bmN0aW9uIGhkdCh0LGUpe3ZhciBuLGk9dC5sZW5ndGgscj0tMSxvPVtdO2lmKG51bGw9PWUpZm9yKDsrK3I8aTspaXNOYU4obj1wUih0W3JdKSl8fG8ucHVzaChuKTtlbHNlIGZvcig7KytyPGk7KWlzTmFOKG49cFIoZSh0W3JdLHIsdCkpKXx8by5wdXNoKG4pO3JldHVybiBrUihvLnNvcnQoc1IpLC41KX0sbWVyZ2U6ZnVuY3Rpb24gZGR0KHQpe2Zvcih2YXIgZSxuLGkscj10Lmxlbmd0aCxvPS0xLGE9MDsrK288cjspYSs9dFtvXS5sZW5ndGg7Zm9yKG49bmV3IEFycmF5KGEpOy0tcj49MDspZm9yKGU9KGk9dFtyXSkubGVuZ3RoOy0tZT49MDspblstLWFdPWlbZV07cmV0dXJuIG59LG1pbjpMUixwYWlyczpmdW5jdGlvbiBwZHQodCxlKXtudWxsPT1lJiYoZT1kUik7Zm9yKHZhciBuPTAsaT10Lmxlbmd0aC0xLHI9dFswXSxvPW5ldyBBcnJheShpPDA/MDppKTtuPGk7KW9bbl09ZShyLHI9dFsrK25dKTtyZXR1cm4gb30scGVybXV0ZTpmdW5jdGlvbiBmZHQodCxlKXtmb3IodmFyIG49ZS5sZW5ndGgsaT1uZXcgQXJyYXkobik7bi0tOylpW25dPXRbZVtuXV07cmV0dXJuIGl9LHF1YW50aWxlOmtSLHJhbmdlOndSLHNjYW46ZnVuY3Rpb24gbWR0KHQsZSl7aWYobj10Lmxlbmd0aCl7dmFyIG4saSxyPTAsbz0wLGE9dFtvXTtmb3IobnVsbD09ZSYmKGU9c1IpOysrcjxuOykoZShpPXRbcl0sYSk8MHx8MCE9PWUoYSxhKSkmJihhPWksbz1yKTtyZXR1cm4gMD09PWUoYSxhKT9vOnZvaWQgMH19LHNodWZmbGU6ZnVuY3Rpb24gZ2R0KHQsZSxuKXtmb3IodmFyIGkscixvPShudWxsPT1uP3QubGVuZ3RoOm4pLShlPW51bGw9PWU/MDorZSk7bzspcj1NYXRoLnJhbmRvbSgpKm8tLXwwLGk9dFtvK2VdLHRbbytlXT10W3IrZV0sdFtyK2VdPWk7cmV0dXJuIHR9LHN1bTpmdW5jdGlvbiBfZHQodCxlKXt2YXIgbixpPXQubGVuZ3RoLHI9LTEsbz0wO2lmKG51bGw9PWUpZm9yKDsrK3I8aTspKG49K3Rbcl0pJiYobys9bik7ZWxzZSBmb3IoOysrcjxpOykobj0rZSh0W3JdLHIsdCkpJiYobys9bik7cmV0dXJuIG99LHRpY2tzOmZ1bmN0aW9uIHlkdCh0LGUsbil7dmFyIGkscixvLGEscz0tMTtpZihuPStuLCh0PSt0KT09KGU9K2UpJiZuPjApcmV0dXJuW3RdO2lmKChpPWU8dCkmJihyPXQsdD1lLGU9ciksMD09PShhPVRSKHQsZSxuKSl8fCFpc0Zpbml0ZShhKSlyZXR1cm5bXTtpZihhPjApZm9yKHQ9TWF0aC5jZWlsKHQvYSksZT1NYXRoLmZsb29yKGUvYSksbz1uZXcgQXJyYXkocj1NYXRoLmNlaWwoZS10KzEpKTsrK3M8cjspb1tzXT0odCtzKSphO2Vsc2UgZm9yKHQ9TWF0aC5mbG9vcih0KmEpLGU9TWF0aC5jZWlsKGUqYSksbz1uZXcgQXJyYXkocj1NYXRoLmNlaWwodC1lKzEpKTsrK3M8cjspb1tzXT0odC1zKS9hO3JldHVybiBpJiZvLnJldmVyc2UoKSxvfSx0aWNrSW5jcmVtZW50OlRSLHRpY2tTdGVwOkNSLHRyYW5zcG9zZTpQUix2YXJpYW5jZTpmUix6aXA6ZnVuY3Rpb24gdmR0KCl7cmV0dXJuIFBSKGFyZ3VtZW50cyl9LGF4aXNUb3A6ZnVuY3Rpb24gYmR0KHQpe3JldHVybiBWUigxLHQpfSxheGlzUmlnaHQ6ZnVuY3Rpb24geGR0KHQpe3JldHVybiBWUigyLHQpfSxheGlzQm90dG9tOmZ1bmN0aW9uIHdkdCh0KXtyZXR1cm4gVlIoMyx0KX0sYXhpc0xlZnQ6ZnVuY3Rpb24gU2R0KHQpe3JldHVybiBWUig0LHQpfSxicnVzaDpmdW5jdGlvbiBNZHQoKXtyZXR1cm4gSUYod0YpfSxicnVzaFg6ZnVuY3Rpb24gRWR0KCl7cmV0dXJuIElGKGJGKX0sYnJ1c2hZOmZ1bmN0aW9uIFRkdCgpe3JldHVybiBJRih4Ril9LGJydXNoU2VsZWN0aW9uOmZ1bmN0aW9uIENkdCh0KXt2YXIgZT10Ll9fYnJ1c2g7cmV0dXJuIGU/ZS5kaW0ub3V0cHV0KGUuc2VsZWN0aW9uKTpudWxsfSxjaG9yZDpmdW5jdGlvbiBBZHQoKXt2YXIgdD0wLGU9bnVsbCxuPW51bGwsaT1udWxsO2Z1bmN0aW9uIHIocil7dmFyIG8sYSxzLGwsYyx1LGg9ci5sZW5ndGgsZD1bXSxwPVJGKGgpLGY9W10sbT1bXSxnPW0uZ3JvdXBzPW5ldyBBcnJheShoKSxfPW5ldyBBcnJheShoKmgpO2ZvcihvPTAsYz0tMTsrK2M8aDspe2ZvcihhPTAsdT0tMTsrK3U8aDspYSs9cltjXVt1XTtkLnB1c2goYSksZi5wdXNoKFJGKGgpKSxvKz1hfWZvcihlJiZwLnNvcnQoKGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUoZFt0XSxkW25dKX0pKSxuJiZmLmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7dC5zb3J0KChmdW5jdGlvbih0LGkpe3JldHVybiBuKHJbZV1bdF0scltlXVtpXSl9KSl9KSksbD0obz1VRigwLFZGLXQqaCkvbyk/dDpWRi9oLGE9MCxjPS0xOysrYzxoOyl7Zm9yKHM9YSx1PS0xOysrdTxoOyl7dmFyIHk9cFtjXSx2PWZbeV1bdV0sYj1yW3ldW3ZdLHg9YSx3PWErPWIqbztfW3YqaCt5XT17aW5kZXg6eSxzdWJpbmRleDp2LHN0YXJ0QW5nbGU6eCxlbmRBbmdsZTp3LHZhbHVlOmJ9fWdbeV09e2luZGV4Onksc3RhcnRBbmdsZTpzLGVuZEFuZ2xlOmEsdmFsdWU6ZFt5XX0sYSs9bH1mb3IoYz0tMTsrK2M8aDspZm9yKHU9Yy0xOysrdTxoOyl7dmFyIFM9X1t1KmgrY10sTT1fW2MqaCt1XTsoUy52YWx1ZXx8TS52YWx1ZSkmJm0ucHVzaChTLnZhbHVlPE0udmFsdWU/e3NvdXJjZTpNLHRhcmdldDpTfTp7c291cmNlOlMsdGFyZ2V0Ok19KX1yZXR1cm4gaT9tLnNvcnQoaSk6bX1yZXR1cm4gci5wYWRBbmdsZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1VRigwLGUpLHIpOnR9LHIuc29ydEdyb3Vwcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LHIpOmV9LHIuc29ydFN1Ymdyb3Vwcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LHIpOm59LHIuc29ydENob3Jkcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09dD9pPW51bGw6KGk9akYodCkpLl89dCxyKTppJiZpLl99LHJ9LHJpYmJvbjpmdW5jdGlvbiBrZHQoKXt2YXIgdD1KRixlPVFGLG49dFYsaT1lVixyPW5WLG89bnVsbDtmdW5jdGlvbiBhKCl7dmFyIGEscz1HRi5jYWxsKGFyZ3VtZW50cyksbD10LmFwcGx5KHRoaXMscyksYz1lLmFwcGx5KHRoaXMscyksdT0rbi5hcHBseSh0aGlzLChzWzBdPWwscykpLGg9aS5hcHBseSh0aGlzLHMpLUZGLGQ9ci5hcHBseSh0aGlzLHMpLUZGLHA9dSpERihoKSxmPXUqQkYoaCksbT0rbi5hcHBseSh0aGlzLChzWzBdPWMscykpLGc9aS5hcHBseSh0aGlzLHMpLUZGLF89ci5hcHBseSh0aGlzLHMpLUZGO2lmKG98fChvPWE9WkYoKSksby5tb3ZlVG8ocCxmKSxvLmFyYygwLDAsdSxoLGQpLGg9PT1nJiZkPT09X3x8KG8ucXVhZHJhdGljQ3VydmVUbygwLDAsbSpERihnKSxtKkJGKGcpKSxvLmFyYygwLDAsbSxnLF8pKSxvLnF1YWRyYXRpY0N1cnZlVG8oMCwwLHAsZiksby5jbG9zZVBhdGgoKSxhKXJldHVybiBvPW51bGwsYSsiInx8bnVsbH1yZXR1cm4gYS5yYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpXRigrdCksYSk6bn0sYS5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6V0YoK3QpLGEpOml9LGEuZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpXRigrdCksYSk6cn0sYS5zb3VyY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxhKTp0fSxhLnRhcmdldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LGEpOmV9LGEuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1udWxsPT10P251bGw6dCxhKTpvfSxhfSxuZXN0OmZ1bmN0aW9uIExkdCgpe3ZhciB0LGUsbixpPVtdLHI9W107ZnVuY3Rpb24gbyhuLHIsYSxzKXtpZihyPj1pLmxlbmd0aClyZXR1cm4gbnVsbCE9dCYmbi5zb3J0KHQpLG51bGwhPWU/ZShuKTpuO2Zvcih2YXIgbCxjLHUsaD0tMSxkPW4ubGVuZ3RoLHA9aVtyKytdLGY9b1YoKSxtPWEoKTsrK2g8ZDspKHU9Zi5nZXQobD1wKGM9bltoXSkrIiIpKT91LnB1c2goYyk6Zi5zZXQobCxbY10pO3JldHVybiBmLmVhY2goKGZ1bmN0aW9uKHQsZSl7cyhtLGUsbyh0LHIsYSxzKSl9KSksbX1mdW5jdGlvbiBhKHQsbil7aWYoKytuPmkubGVuZ3RoKXJldHVybiB0O3ZhciBvLHM9cltuLTFdO3JldHVybiBudWxsIT1lJiZuPj1pLmxlbmd0aD9vPXQuZW50cmllcygpOihvPVtdLHQuZWFjaCgoZnVuY3Rpb24odCxlKXtvLnB1c2goe2tleTplLHZhbHVlczphKHQsbil9KX0pKSksbnVsbCE9cz9vLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHModC5rZXksZS5rZXkpfSkpOm99cmV0dXJuIG49e29iamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gbyh0LDAsYVYsc1YpfSxtYXA6ZnVuY3Rpb24odCl7cmV0dXJuIG8odCwwLGxWLGNWKX0sZW50cmllczpmdW5jdGlvbih0KXtyZXR1cm4gYShvKHQsMCxsVixjViksMCl9LGtleTpmdW5jdGlvbih0KXtyZXR1cm4gaS5wdXNoKHQpLG59LHNvcnRLZXlzOmZ1bmN0aW9uKHQpe3JldHVybiByW2kubGVuZ3RoLTFdPXQsbn0sc29ydFZhbHVlczpmdW5jdGlvbihlKXtyZXR1cm4gdD1lLG59LHJvbGx1cDpmdW5jdGlvbih0KXtyZXR1cm4gZT10LG59fX0sc2V0OmRWLG1hcDpvVixrZXlzOmZ1bmN0aW9uIFBkdCh0KXt2YXIgZT1bXTtmb3IodmFyIG4gaW4gdCllLnB1c2gobik7cmV0dXJuIGV9LHZhbHVlczpmdW5jdGlvbiBOZHQodCl7dmFyIGU9W107Zm9yKHZhciBuIGluIHQpZS5wdXNoKHRbbl0pO3JldHVybiBlfSxlbnRyaWVzOmZ1bmN0aW9uIElkdCh0KXt2YXIgZT1bXTtmb3IodmFyIG4gaW4gdCllLnB1c2goe2tleTpuLHZhbHVlOnRbbl19KTtyZXR1cm4gZX0sY29sb3I6TFYscmdiOk9WLGhzbDpCVixsYWI6JFYsaGNsOm5VLGN1YmVoZWxpeDpsVSxkaXNwYXRjaDpoVSxkcmFnOmZ1bmN0aW9uIE9kdCgpe3ZhciB0LGUsbixpLHI9Rmosbz1WaixhPVVqLHM9amosbD17fSxjPV9VKCJzdGFydCIsImRyYWciLCJlbmQiKSx1PTAsaD0wO2Z1bmN0aW9uIGQodCl7dC5vbigibW91c2Vkb3duLmRyYWciLHApLmZpbHRlcihzKS5vbigidG91Y2hzdGFydC5kcmFnIixnKS5vbigidG91Y2htb3ZlLmRyYWciLF8pLm9uKCJ0b3VjaGVuZC5kcmFnIHRvdWNoY2FuY2VsLmRyYWciLHkpLnN0eWxlKCJ0b3VjaC1hY3Rpb24iLCJub25lIikuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKX1mdW5jdGlvbiBwKCl7aWYoIWkmJnIuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgYT12KCJtb3VzZSIsby5hcHBseSh0aGlzLGFyZ3VtZW50cyksTmosdGhpcyxhcmd1bWVudHMpO2EmJihraihfai52aWV3KS5vbigibW91c2Vtb3ZlLmRyYWciLGYsITApLm9uKCJtb3VzZXVwLmRyYWciLG0sITApLHpqKF9qLnZpZXcpLE9qKCksbj0hMSx0PV9qLmNsaWVudFgsZT1fai5jbGllbnRZLGEoInN0YXJ0IikpfX1mdW5jdGlvbiBmKCl7aWYoUmooKSwhbil7dmFyIGk9X2ouY2xpZW50WC10LHI9X2ouY2xpZW50WS1lO249aSppK3Iqcj5ofWwubW91c2UoImRyYWciKX1mdW5jdGlvbiBtKCl7a2ooX2oudmlldykub24oIm1vdXNlbW92ZS5kcmFnIG1vdXNldXAuZHJhZyIsbnVsbCksRGooX2oudmlldyxuKSxSaigpLGwubW91c2UoImVuZCIpfWZ1bmN0aW9uIGcoKXtpZihyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIHQsZSxuPV9qLmNoYW5nZWRUb3VjaGVzLGk9by5hcHBseSh0aGlzLGFyZ3VtZW50cyksYT1uLmxlbmd0aDtmb3IodD0wO3Q8YTsrK3QpKGU9dihuW3RdLmlkZW50aWZpZXIsaSxJaix0aGlzLGFyZ3VtZW50cykpJiYoT2ooKSxlKCJzdGFydCIpKX19ZnVuY3Rpb24gXygpe3ZhciB0LGUsbj1fai5jaGFuZ2VkVG91Y2hlcyxpPW4ubGVuZ3RoO2Zvcih0PTA7dDxpOysrdCkoZT1sW25bdF0uaWRlbnRpZmllcl0pJiYoUmooKSxlKCJkcmFnIikpfWZ1bmN0aW9uIHkoKXt2YXIgdCxlLG49X2ouY2hhbmdlZFRvdWNoZXMscj1uLmxlbmd0aDtmb3IoaSYmY2xlYXJUaW1lb3V0KGkpLGk9c2V0VGltZW91dCgoZnVuY3Rpb24oKXtpPW51bGx9KSw1MDApLHQ9MDt0PHI7Kyt0KShlPWxbblt0XS5pZGVudGlmaWVyXSkmJihPaigpLGUoImVuZCIpKX1mdW5jdGlvbiB2KHQsZSxuLGkscil7dmFyIG8scyxoLHA9bihlLHQpLGY9Yy5jb3B5KCk7aWYoU2oobmV3IEhqKGQsImJlZm9yZXN0YXJ0IixvLHQsdSxwWzBdLHBbMV0sMCwwLGYpLChmdW5jdGlvbigpe3JldHVybiBudWxsIT0oX2ouc3ViamVjdD1vPWEuYXBwbHkoaSxyKSkmJihzPW8ueC1wWzBdfHwwLGg9by55LXBbMV18fDAsITApfSkpKXJldHVybiBmdW5jdGlvbiBhKGMpe3ZhciBtLGc9cDtzd2l0Y2goYyl7Y2FzZSJzdGFydCI6bFt0XT1hLG09dSsrO2JyZWFrO2Nhc2UiZW5kIjpkZWxldGUgbFt0XSwtLXU7Y2FzZSJkcmFnIjpwPW4oZSx0KSxtPXV9U2oobmV3IEhqKGQsYyxvLHQsbSxwWzBdK3MscFsxXStoLHBbMF0tZ1swXSxwWzFdLWdbMV0sZiksZi5hcHBseSxmLFtjLGkscl0pfX1yZXR1cm4gZC5maWx0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpCaighIXQpLGQpOnJ9LGQuY29udGFpbmVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6QmoodCksZCk6b30sZC5zdWJqZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6QmoodCksZCk6YX0sZC50b3VjaGFibGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpCaighIXQpLGQpOnN9LGQub249ZnVuY3Rpb24oKXt2YXIgdD1jLm9uLmFwcGx5KGMsYXJndW1lbnRzKTtyZXR1cm4gdD09PWM/ZDp0fSxkLmNsaWNrRGlzdGFuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9KHQ9K3QpKnQsZCk6TWF0aC5zcXJ0KGgpfSxkfSxkcmFnRGlzYWJsZTp6aixkcmFnRW5hYmxlOkRqLGRzdkZvcm1hdDpNRyxjc3ZQYXJzZTpURyxjc3ZQYXJzZVJvd3M6Q0csY3N2Rm9ybWF0OkFHLGNzdkZvcm1hdFJvd3M6a0csdHN2UGFyc2U6UEcsdHN2UGFyc2VSb3dzOk5HLHRzdkZvcm1hdDpJRyx0c3ZGb3JtYXRSb3dzOk9HLGVhc2VMaW5lYXI6ZnVuY3Rpb24gUmR0KHQpe3JldHVybit0fSxlYXNlUXVhZDpSRyxlYXNlUXVhZEluOmZ1bmN0aW9uIHpkdCh0KXtyZXR1cm4gdCp0fSxlYXNlUXVhZE91dDpmdW5jdGlvbiBEZHQodCl7cmV0dXJuIHQqKDItdCl9LGVhc2VRdWFkSW5PdXQ6UkcsZWFzZUN1YmljOnpHLGVhc2VDdWJpY0luOmZ1bmN0aW9uIEJkdCh0KXtyZXR1cm4gdCp0KnR9LGVhc2VDdWJpY091dDpmdW5jdGlvbiBIZHQodCl7cmV0dXJuLS10KnQqdCsxfSxlYXNlQ3ViaWNJbk91dDp6RyxlYXNlUG9seTpIRyxlYXNlUG9seUluOkRHLGVhc2VQb2x5T3V0OkJHLGVhc2VQb2x5SW5PdXQ6SEcsZWFzZVNpbjpVRyxlYXNlU2luSW46ZnVuY3Rpb24gRmR0KHQpe3JldHVybiAxLU1hdGguY29zKHQqVkcpfSxlYXNlU2luT3V0OmZ1bmN0aW9uIFZkdCh0KXtyZXR1cm4gTWF0aC5zaW4odCpWRyl9LGVhc2VTaW5Jbk91dDpVRyxlYXNlRXhwOmpHLGVhc2VFeHBJbjpmdW5jdGlvbiBVZHQodCl7cmV0dXJuIE1hdGgucG93KDIsMTAqdC0xMCl9LGVhc2VFeHBPdXQ6ZnVuY3Rpb24gamR0KHQpe3JldHVybiAxLU1hdGgucG93KDIsLTEwKnQpfSxlYXNlRXhwSW5PdXQ6akcsZWFzZUNpcmNsZTpHRyxlYXNlQ2lyY2xlSW46ZnVuY3Rpb24gR2R0KHQpe3JldHVybiAxLU1hdGguc3FydCgxLXQqdCl9LGVhc2VDaXJjbGVPdXQ6ZnVuY3Rpb24gV2R0KHQpe3JldHVybiBNYXRoLnNxcnQoMS0gLS10KnQpfSxlYXNlQ2lyY2xlSW5PdXQ6R0csZWFzZUJvdW5jZTpxRyxlYXNlQm91bmNlSW46ZnVuY3Rpb24gcWR0KHQpe3JldHVybiAxLXFHKDEtdCl9LGVhc2VCb3VuY2VPdXQ6cUcsZWFzZUJvdW5jZUluT3V0OmZ1bmN0aW9uIFlkdCh0KXtyZXR1cm4oKHQqPTIpPD0xPzEtcUcoMS10KTpxRyh0LTEpKzEpLzJ9LGVhc2VCYWNrOktHLGVhc2VCYWNrSW46WEcsZWFzZUJhY2tPdXQ6JEcsZWFzZUJhY2tJbk91dDpLRyxlYXNlRWxhc3RpYzpRRyxlYXNlRWxhc3RpY0luOkpHLGVhc2VFbGFzdGljT3V0OlFHLGVhc2VFbGFzdGljSW5PdXQ6dFcsZm9yY2VDZW50ZXI6ZnVuY3Rpb24gWGR0KHQsZSl7dmFyIG47ZnVuY3Rpb24gaSgpe3ZhciBpLHIsbz1uLmxlbmd0aCxhPTAscz0wO2ZvcihpPTA7aTxvOysraSlhKz0ocj1uW2ldKS54LHMrPXIueTtmb3IoYT1hL28tdCxzPXMvby1lLGk9MDtpPG87KytpKShyPW5baV0pLngtPWEsci55LT1zfXJldHVybiBudWxsPT10JiYodD0wKSxudWxsPT1lJiYoZT0wKSxpLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7bj10fSxpLng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2UsaSk6dH0saS55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0LGkpOmV9LGl9LGZvcmNlQ29sbGlkZTpmdW5jdGlvbiAkZHQodCl7dmFyIGUsbixpPTEscj0xO2Z1bmN0aW9uIG8oKXtmb3IodmFyIHQsbyxzLGwsYyx1LGgsZD1lLmxlbmd0aCxwPTA7cDxyOysrcClmb3Iobz1zVyhlLGhXLGRXKS52aXNpdEFmdGVyKGEpLHQ9MDt0PGQ7Kyt0KWg9KHU9blsocz1lW3RdKS5pbmRleF0pKnUsbD1zLngrcy52eCxjPXMueStzLnZ5LG8udmlzaXQoZik7ZnVuY3Rpb24gZih0LGUsbixyLG8pe3ZhciBhPXQuZGF0YSxkPXQucixwPXUrZDtpZighYSlyZXR1cm4gZT5sK3B8fHI8bC1wfHxuPmMrcHx8bzxjLXA7aWYoYS5pbmRleD5zLmluZGV4KXt2YXIgZj1sLWEueC1hLnZ4LG09Yy1hLnktYS52eSxnPWYqZittKm07ZzxwKnAmJigwPT09ZiYmKGcrPShmPW5XKCkpKmYpLDA9PT1tJiYoZys9KG09blcoKSkqbSksZz0ocC0oZz1NYXRoLnNxcnQoZykpKS9nKmkscy52eCs9KGYqPWcpKihwPShkKj1kKS8oaCtkKSkscy52eSs9KG0qPWcpKnAsYS52eC09ZioocD0xLXApLGEudnktPW0qcCl9fX1mdW5jdGlvbiBhKHQpe2lmKHQuZGF0YSlyZXR1cm4gdC5yPW5bdC5kYXRhLmluZGV4XTtmb3IodmFyIGU9dC5yPTA7ZTw0OysrZSl0W2VdJiZ0W2VdLnI+dC5yJiYodC5yPXRbZV0ucil9ZnVuY3Rpb24gcygpe2lmKGUpe3ZhciBpLHIsbz1lLmxlbmd0aDtmb3Iobj1uZXcgQXJyYXkobyksaT0wO2k8bzsrK2kpblsocj1lW2ldKS5pbmRleF09K3QocixpLGUpfX1yZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9ZVcobnVsbD09dD8xOit0KSksby5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe2U9dCxzKCl9LG8uaXRlcmF0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rdCxvKTpyfSxvLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSt0LG8pOml9LG8ucmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6ZVcoK2UpLHMoKSxvKTp0fSxvfSxmb3JjZUxpbms6ZnVuY3Rpb24gS2R0KHQpe3ZhciBlLG4saSxyLG8sYT1OVyxzPWZ1bmN0aW9uIGwodCl7cmV0dXJuIDEvTWF0aC5taW4oclt0LnNvdXJjZS5pbmRleF0sclt0LnRhcmdldC5pbmRleF0pfSxjPWVXKDMwKSx1PTE7ZnVuY3Rpb24gaChpKXtmb3IodmFyIHI9MCxhPXQubGVuZ3RoO3I8dTsrK3IpZm9yKHZhciBzLGwsYyxoLGQscCxmLG09MDttPGE7KyttKWg9KGM9KHM9dFttXSkudGFyZ2V0KS54K2MudngtKGw9cy5zb3VyY2UpLngtbC52eHx8blcoKSxkPWMueStjLnZ5LWwueS1sLnZ5fHxuVygpLGQqPXA9KChwPU1hdGguc3FydChoKmgrZCpkKSktblttXSkvcCppKmVbbV0sYy52eC09KGgqPXApKihmPW9bbV0pLGMudnktPWQqZixsLnZ4Kz1oKihmPTEtZiksbC52eSs9ZCpmfWZ1bmN0aW9uIGQoKXtpZihpKXt2YXIgcyxsLGM9aS5sZW5ndGgsdT10Lmxlbmd0aCxoPWtXKGksYSk7Zm9yKHM9MCxyPW5ldyBBcnJheShjKTtzPHU7KytzKShsPXRbc10pLmluZGV4PXMsIm9iamVjdCIhPXR5cGVvZiBsLnNvdXJjZSYmKGwuc291cmNlPUlXKGgsbC5zb3VyY2UpKSwib2JqZWN0IiE9dHlwZW9mIGwudGFyZ2V0JiYobC50YXJnZXQ9SVcoaCxsLnRhcmdldCkpLHJbbC5zb3VyY2UuaW5kZXhdPShyW2wuc291cmNlLmluZGV4XXx8MCkrMSxyW2wudGFyZ2V0LmluZGV4XT0ocltsLnRhcmdldC5pbmRleF18fDApKzE7Zm9yKHM9MCxvPW5ldyBBcnJheSh1KTtzPHU7KytzKW9bc109clsobD10W3NdKS5zb3VyY2UuaW5kZXhdLyhyW2wuc291cmNlLmluZGV4XStyW2wudGFyZ2V0LmluZGV4XSk7ZT1uZXcgQXJyYXkodSkscCgpLG49bmV3IEFycmF5KHUpLGYoKX19ZnVuY3Rpb24gcCgpe2lmKGkpZm9yKHZhciBuPTAscj10Lmxlbmd0aDtuPHI7KytuKWVbbl09K3ModFtuXSxuLHQpfWZ1bmN0aW9uIGYoKXtpZihpKWZvcih2YXIgZT0wLHI9dC5sZW5ndGg7ZTxyOysrZSluW2VdPStjKHRbZV0sZSx0KX1yZXR1cm4gbnVsbD09dCYmKHQ9W10pLGguaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtpPXQsZCgpfSxoLmxpbmtzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUsZCgpLGgpOnR9LGguaWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dCxoKTphfSxoLml0ZXJhdGlvbnM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9K3QsaCk6dX0saC5zdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmVXKCt0KSxwKCksaCk6c30saC5kaXN0YW5jZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmVXKCt0KSxmKCksaCk6Y30saH0sZm9yY2VNYW55Qm9keTpmdW5jdGlvbiBaZHQoKXt2YXIgdCxlLG4saSxyPWVXKC0zMCksbz0xLGE9MS8wLHM9LjgxO2Z1bmN0aW9uIGwoaSl7dmFyIHIsbz10Lmxlbmd0aCxhPXNXKHQsaXEscnEpLnZpc2l0QWZ0ZXIodSk7Zm9yKG49aSxyPTA7cjxvOysrcillPXRbcl0sYS52aXNpdChoKX1mdW5jdGlvbiBjKCl7aWYodCl7dmFyIGUsbixvPXQubGVuZ3RoO2ZvcihpPW5ldyBBcnJheShvKSxlPTA7ZTxvOysrZSlpWyhuPXRbZV0pLmluZGV4XT0rcihuLGUsdCl9fWZ1bmN0aW9uIHUodCl7dmFyIGUsbixyLG8sYSxzPTAsbD0wO2lmKHQubGVuZ3RoKXtmb3Iocj1vPWE9MDthPDQ7KythKShlPXRbYV0pJiYobj1NYXRoLmFicyhlLnZhbHVlKSkmJihzKz1lLnZhbHVlLGwrPW4scis9biplLngsbys9biplLnkpO3QueD1yL2wsdC55PW8vbH1lbHNleyhlPXQpLng9ZS5kYXRhLngsZS55PWUuZGF0YS55O2Rve3MrPWlbZS5kYXRhLmluZGV4XX13aGlsZShlPWUubmV4dCl9dC52YWx1ZT1zfWZ1bmN0aW9uIGgodCxyLGwsYyl7aWYoIXQudmFsdWUpcmV0dXJuITA7dmFyIHU9dC54LWUueCxoPXQueS1lLnksZD1jLXIscD11KnUraCpoO2lmKGQqZC9zPHApcmV0dXJuIHA8YSYmKDA9PT11JiYocCs9KHU9blcoKSkqdSksMD09PWgmJihwKz0oaD1uVygpKSpoKSxwPG8mJihwPU1hdGguc3FydChvKnApKSxlLnZ4Kz11KnQudmFsdWUqbi9wLGUudnkrPWgqdC52YWx1ZSpuL3ApLCEwO2lmKCEodC5sZW5ndGh8fHA+PWEpKXsodC5kYXRhIT09ZXx8dC5uZXh0KSYmKDA9PT11JiYocCs9KHU9blcoKSkqdSksMD09PWgmJihwKz0oaD1uVygpKSpoKSxwPG8mJihwPU1hdGguc3FydChvKnApKSk7ZG97dC5kYXRhIT09ZSYmKGUudngrPXUqKGQ9aVt0LmRhdGEuaW5kZXhdKm4vcCksZS52eSs9aCpkKX13aGlsZSh0PXQubmV4dCl9fXJldHVybiBsLmluaXRpYWxpemU9ZnVuY3Rpb24oZSl7dD1lLGMoKX0sbC5zdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmVXKCt0KSxjKCksbCk6cn0sbC5kaXN0YW5jZU1pbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10KnQsbCk6TWF0aC5zcXJ0KG8pfSxsLmRpc3RhbmNlTWF4PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXQqdCxsKTpNYXRoLnNxcnQoYSl9LGwudGhldGE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9dCp0LGwpOk1hdGguc3FydChzKX0sbH0sZm9yY2VSYWRpYWw6ZnVuY3Rpb24gSmR0KHQsZSxuKXt2YXIgaSxyLG8sYT1lVyguMSk7ZnVuY3Rpb24gcyh0KXtmb3IodmFyIGE9MCxzPWkubGVuZ3RoO2E8czsrK2Epe3ZhciBsPWlbYV0sYz1sLngtZXx8MWUtNix1PWwueS1ufHwxZS02LGg9TWF0aC5zcXJ0KGMqYyt1KnUpLGQ9KG9bYV0taCkqclthXSp0L2g7bC52eCs9YypkLGwudnkrPXUqZH19ZnVuY3Rpb24gbCgpe2lmKGkpe3ZhciBlLG49aS5sZW5ndGg7Zm9yKHI9bmV3IEFycmF5KG4pLG89bmV3IEFycmF5KG4pLGU9MDtlPG47KytlKW9bZV09K3QoaVtlXSxlLGkpLHJbZV09aXNOYU4ob1tlXSk/MDorYShpW2VdLGUsaSl9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1lVygrdCkpLG51bGw9PWUmJihlPTApLG51bGw9PW4mJihuPTApLHMuaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtpPXQsbCgpfSxzLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZVcoK3QpLGwoKSxzKTphfSxzLnJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOmVXKCtlKSxsKCkscyk6dH0scy54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0LHMpOmV9LHMueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rdCxzKTpufSxzfSxmb3JjZVNpbXVsYXRpb246ZnVuY3Rpb24gUWR0KHQpe3ZhciBlLG49MSxpPS4wMDEscj0xLU1hdGgucG93KGksMS8zMDApLG89MCxhPS42LHM9a1coKSxsPVFXKHUpLGM9UlcoInRpY2siLCJlbmQiKTtmdW5jdGlvbiB1KCl7aCgpLGMuY2FsbCgidGljayIsZSksbjxpJiYobC5zdG9wKCksYy5jYWxsKCJlbmQiLGUpKX1mdW5jdGlvbiBoKCl7dmFyIGUsaSxsPXQubGVuZ3RoO2ZvcihuKz0oby1uKSpyLHMuZWFjaCgoZnVuY3Rpb24odCl7dChuKX0pKSxlPTA7ZTxsOysrZSludWxsPT0oaT10W2VdKS5meD9pLngrPWkudngqPWE6KGkueD1pLmZ4LGkudng9MCksbnVsbD09aS5meT9pLnkrPWkudnkqPWE6KGkueT1pLmZ5LGkudnk9MCl9ZnVuY3Rpb24gZCgpe2Zvcih2YXIgZSxuPTAsaT10Lmxlbmd0aDtuPGk7KytuKXtpZigoZT10W25dKS5pbmRleD1uLGlzTmFOKGUueCl8fGlzTmFOKGUueSkpe3ZhciByPTEwKk1hdGguc3FydChuKSxvPW4qYXE7ZS54PXIqTWF0aC5jb3MobyksZS55PXIqTWF0aC5zaW4obyl9KGlzTmFOKGUudngpfHxpc05hTihlLnZ5KSkmJihlLnZ4PWUudnk9MCl9fWZ1bmN0aW9uIHAoZSl7cmV0dXJuIGUuaW5pdGlhbGl6ZSYmZS5pbml0aWFsaXplKHQpLGV9cmV0dXJuIG51bGw9PXQmJih0PVtdKSxkKCksZT17dGljazpoLHJlc3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gbC5yZXN0YXJ0KHUpLGV9LHN0b3A6ZnVuY3Rpb24oKXtyZXR1cm4gbC5zdG9wKCksZX0sbm9kZXM6ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9bixkKCkscy5lYWNoKHApLGUpOnR9LGFscGhhOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSt0LGUpOm59LGFscGhhTWluOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSt0LGUpOml9LGFscGhhRGVjYXk6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K3QsZSk6K3J9LGFscGhhVGFyZ2V0OmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSt0LGUpOm99LHZlbG9jaXR5RGVjYXk6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9MS10LGUpOjEtYX0sZm9yY2U6ZnVuY3Rpb24odCxuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xPyhudWxsPT1uP3MucmVtb3ZlKHQpOnMuc2V0KHQscChuKSksZSk6cy5nZXQodCl9LGZpbmQ6ZnVuY3Rpb24oZSxuLGkpe3ZhciByLG8sYSxzLGwsYz0wLHU9dC5sZW5ndGg7Zm9yKG51bGw9PWk/aT0xLzA6aSo9aSxjPTA7Yzx1OysrYykoYT0ocj1lLShzPXRbY10pLngpKnIrKG89bi1zLnkpKm8pPGkmJihsPXMsaT1hKTtyZXR1cm4gbH0sb246ZnVuY3Rpb24odCxuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xPyhjLm9uKHQsbiksZSk6Yy5vbih0KX19fSxmb3JjZVg6ZnVuY3Rpb24gdHB0KHQpe3ZhciBlLG4saSxyPWVXKC4xKTtmdW5jdGlvbiBvKHQpe2Zvcih2YXIgcixvPTAsYT1lLmxlbmd0aDtvPGE7KytvKShyPWVbb10pLnZ4Kz0oaVtvXS1yLngpKm5bb10qdH1mdW5jdGlvbiBhKCl7aWYoZSl7dmFyIG8sYT1lLmxlbmd0aDtmb3Iobj1uZXcgQXJyYXkoYSksaT1uZXcgQXJyYXkoYSksbz0wO288YTsrK28pbltvXT1pc05hTihpW29dPSt0KGVbb10sbyxlKSk/MDorcihlW29dLG8sZSl9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1lVyhudWxsPT10PzA6K3QpKSxvLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7ZT10LGEoKX0sby5zdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmVXKCt0KSxhKCksbyk6cn0sby54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6ZVcoK2UpLGEoKSxvKTp0fSxvfSxmb3JjZVk6ZnVuY3Rpb24gZXB0KHQpe3ZhciBlLG4saSxyPWVXKC4xKTtmdW5jdGlvbiBvKHQpe2Zvcih2YXIgcixvPTAsYT1lLmxlbmd0aDtvPGE7KytvKShyPWVbb10pLnZ5Kz0oaVtvXS1yLnkpKm5bb10qdH1mdW5jdGlvbiBhKCl7aWYoZSl7dmFyIG8sYT1lLmxlbmd0aDtmb3Iobj1uZXcgQXJyYXkoYSksaT1uZXcgQXJyYXkoYSksbz0wO288YTsrK28pbltvXT1pc05hTihpW29dPSt0KGVbb10sbyxlKSk/MDorcihlW29dLG8sZSl9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1lVyhudWxsPT10PzA6K3QpKSxvLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7ZT10LGEoKX0sby5zdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmVXKCt0KSxhKCksbyk6cn0sby55PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6ZVcoK2UpLGEoKSxvKTp0fSxvfSxmb3JtYXREZWZhdWx0TG9jYWxlOndxLGdldCBmb3JtYXQoKXtyZXR1cm4geXF9LGdldCBmb3JtYXRQcmVmaXgoKXtyZXR1cm4gdnF9LGZvcm1hdExvY2FsZTp4cSxmb3JtYXRTcGVjaWZpZXI6ZnEscHJlY2lzaW9uRml4ZWQ6ZnVuY3Rpb24gbnB0KHQpe3JldHVybiBNYXRoLm1heCgwLC1scShNYXRoLmFicyh0KSkpfSxwcmVjaXNpb25QcmVmaXg6ZnVuY3Rpb24gaXB0KHQsZSl7cmV0dXJuIE1hdGgubWF4KDAsMypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IobHEoZSkvMykpKS1scShNYXRoLmFicyh0KSkpfSxwcmVjaXNpb25Sb3VuZDpmdW5jdGlvbiBycHQodCxlKXtyZXR1cm4gdD1NYXRoLmFicyh0KSxlPU1hdGguYWJzKGUpLXQsTWF0aC5tYXgoMCxscShlKS1scSh0KSkrMX0sZ2VvQXJlYTpmdW5jdGlvbiBvcHQodCl7cmV0dXJuIGxZLnJlc2V0KCksZVkodCxjWSksMipsWX0sZ2VvQm91bmRzOmZ1bmN0aW9uIGFwdCh0KXt2YXIgZSxuLGkscixvLGEscztpZihNWT1TWT0tKHhZPXdZPTEvMCksa1k9W10sZVkodCxYWSksbj1rWS5sZW5ndGgpe2ZvcihrWS5zb3J0KGlYKSxlPTEsbz1baT1rWVswXV07ZTxuOysrZSlyWChpLChyPWtZW2VdKVswXSl8fHJYKGksclsxXSk/KG5YKGlbMF0sclsxXSk+blgoaVswXSxpWzFdKSYmKGlbMV09clsxXSksblgoclswXSxpWzFdKT5uWChpWzBdLGlbMV0pJiYoaVswXT1yWzBdKSk6by5wdXNoKGk9cik7Zm9yKGE9LTEvMCxlPTAsaT1vW249by5sZW5ndGgtMV07ZTw9bjtpPXIsKytlKShzPW5YKGlbMV0sKHI9b1tlXSlbMF0pKT5hJiYoYT1zLHhZPXJbMF0sU1k9aVsxXSl9cmV0dXJuIGtZPUxZPW51bGwseFk9PT0xLzB8fHdZPT09MS8wP1tbTmFOLE5hTl0sW05hTixOYU5dXTpbW3hZLHdZXSxbU1ksTVldXX0sZ2VvQ2VudHJvaWQ6ZnVuY3Rpb24gc3B0KHQpe1BZPU5ZPUlZPU9ZPVJZPXpZPURZPUJZPUhZPUZZPVZZPTAsZVkodCxvWCk7dmFyIGU9SFksbj1GWSxpPVZZLHI9ZSplK24qbitpKmk7cmV0dXJuIHI8MWUtMTImJihlPXpZLG49RFksaT1CWSxOWTxDcSYmKGU9SVksbj1PWSxpPVJZKSwocj1lKmUrbipuK2kqaSk8MWUtMTIpP1tOYU4sTmFOXTpbenEobixlKSpOcSxZcShpL0dxKHIpKSpOcV19LGdlb0NpcmNsZTpmdW5jdGlvbiBscHQoKXt2YXIgdCxlLG49Z1goWzAsMF0pLGk9Z1goOTApLHI9Z1goNiksbz17cG9pbnQ6ZnVuY3Rpb24gYShuLGkpe3QucHVzaChuPWUobixpKSksblswXSo9TnEsblsxXSo9TnF9fTtmdW5jdGlvbiBzKCl7dmFyIGE9bi5hcHBseSh0aGlzLGFyZ3VtZW50cykscz1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKSpJcSxsPXIuYXBwbHkodGhpcyxhcmd1bWVudHMpKklxO3JldHVybiB0PVtdLGU9dlgoLWFbMF0qSXEsLWFbMV0qSXEsMCkuaW52ZXJ0LE1YKG8scyxsLDEpLGE9e3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOlt0XX0sdD1lPW51bGwsYX1yZXR1cm4gcy5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpnWChbK3RbMF0sK3RbMV1dKSxzKTpufSxzLnJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmdYKCt0KSxzKTppfSxzLnByZWNpc2lvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmdYKCt0KSxzKTpyfSxzfSxnZW9DbGlwQW50aW1lcmlkaWFuOkZYLGdlb0NsaXBDaXJjbGU6algsZ2VvQ2xpcEV4dGVudDpmdW5jdGlvbiBjcHQoKXt2YXIgdCxlLG4saT0wLHI9MCxvPTk2MCxhPTUwMDtyZXR1cm4gbj17c3RyZWFtOmZ1bmN0aW9uKG4pe3JldHVybiB0JiZlPT09bj90OnQ9cVgoaSxyLG8sYSkoZT1uKX0sZXh0ZW50OmZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPStzWzBdWzBdLHI9K3NbMF1bMV0sbz0rc1sxXVswXSxhPStzWzFdWzFdLHQ9ZT1udWxsLG4pOltbaSxyXSxbbyxhXV19fX0sZ2VvQ2xpcFJlY3RhbmdsZTpxWCxnZW9Db250YWluczpmdW5jdGlvbiB1cHQodCxlKXtyZXR1cm4odCYmYSQuaGFzT3duUHJvcGVydHkodC50eXBlKT9hJFt0LnR5cGVdOmwkKSh0LGUpfSxnZW9EaXN0YW5jZTpvJCxnZW9HcmF0aWN1bGU6ZyQsZ2VvR3JhdGljdWxlMTA6ZnVuY3Rpb24gaHB0KCl7cmV0dXJuIGckKCkoKX0sZ2VvSW50ZXJwb2xhdGU6ZnVuY3Rpb24gZHB0KHQsZSl7dmFyIG49dFswXSpJcSxpPXRbMV0qSXEscj1lWzBdKklxLG89ZVsxXSpJcSxhPURxKGkpLHM9VXEoaSksbD1EcShvKSxjPVVxKG8pLHU9YSpEcShuKSxoPWEqVXEobiksZD1sKkRxKHIpLHA9bCpVcShyKSxmPTIqWXEoR3EoWHEoby1pKSthKmwqWHEoci1uKSkpLG09VXEoZiksZz1mP2Z1bmN0aW9uKHQpe3ZhciBlPVVxKHQqPWYpL20sbj1VcShmLXQpL20saT1uKnUrZSpkLHI9bipoK2UqcCxvPW4qcytlKmM7cmV0dXJuW3pxKHIsaSkqTnEsenEobyxHcShpKmkrcipyKSkqTnFdfTpmdW5jdGlvbigpe3JldHVybltuKk5xLGkqTnFdfTtyZXR1cm4gZy5kaXN0YW5jZT1mLGd9LGdlb0xlbmd0aDpuJCxnZW9QYXRoOmZ1bmN0aW9uIHBwdCh0LGUpe3ZhciBuLGkscj00LjU7ZnVuY3Rpb24gbyh0KXtyZXR1cm4gdCYmKCJmdW5jdGlvbiI9PXR5cGVvZiByJiZpLnBvaW50UmFkaXVzKCtyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksZVkodCxuKGkpKSksaS5yZXN1bHQoKX1yZXR1cm4gby5hcmVhPWZ1bmN0aW9uKHQpe3JldHVybiBlWSh0LG4oTSQpKSxNJC5yZXN1bHQoKX0sby5tZWFzdXJlPWZ1bmN0aW9uKHQpe3JldHVybiBlWSh0LG4oaEspKSxoSy5yZXN1bHQoKX0sby5ib3VuZHM9ZnVuY3Rpb24odCl7cmV0dXJuIGVZKHQsbihEJCkpLEQkLnJlc3VsdCgpfSxvLmNlbnRyb2lkPWZ1bmN0aW9uKHQpe3JldHVybiBlWSh0LG4oWCQpKSxYJC5yZXN1bHQoKX0sby5wcm9qZWN0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW51bGw9PWU/KHQ9bnVsbCxfJCk6KHQ9ZSkuc3RyZWFtLG8pOnR9LG8uY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1udWxsPT10PyhlPW51bGwsbmV3IGZLKTpuZXcgcksoZT10KSwiZnVuY3Rpb24iIT10eXBlb2YgciYmaS5wb2ludFJhZGl1cyhyKSxvKTplfSxvLnBvaW50UmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6KGkucG9pbnRSYWRpdXMoK3QpLCt0KSxvKTpyfSxvLnByb2plY3Rpb24odCkuY29udGV4dChlKX0sZ2VvQWxiZXJzOlBLLGdlb0FsYmVyc1VzYTpmdW5jdGlvbiBmcHQoKXt2YXIgdCxlLG4saSxyLG8sYT1QSygpLHM9TEsoKS5yb3RhdGUoWzE1NCwwXSkuY2VudGVyKFstMiw1OC41XSkucGFyYWxsZWxzKFs1NSw2NV0pLGw9TEsoKS5yb3RhdGUoWzE1NywwXSkuY2VudGVyKFstMywxOS45XSkucGFyYWxsZWxzKFs4LDE4XSksYz17cG9pbnQ6ZnVuY3Rpb24odCxlKXtvPVt0LGVdfX07ZnVuY3Rpb24gdSh0KXt2YXIgZT10WzBdLGE9dFsxXTtyZXR1cm4gbz1udWxsLG4ucG9pbnQoZSxhKSxvfHwoaS5wb2ludChlLGEpLG8pfHwoci5wb2ludChlLGEpLG8pfWZ1bmN0aW9uIGgoKXtyZXR1cm4gdD1lPW51bGwsdX1yZXR1cm4gdS5pbnZlcnQ9ZnVuY3Rpb24odCl7dmFyIGU9YS5zY2FsZSgpLG49YS50cmFuc2xhdGUoKSxpPSh0WzBdLW5bMF0pL2Uscj0odFsxXS1uWzFdKS9lO3JldHVybihyPj0uMTImJnI8LjIzNCYmaT49LS40MjUmJmk8LS4yMTQ/czpyPj0uMTY2JiZyPC4yMzQmJmk+PS0uMjE0JiZpPC0uMTE1P2w6YSkuaW52ZXJ0KHQpfSx1LnN0cmVhbT1mdW5jdGlvbihuKXtyZXR1cm4gdCYmZT09PW4/dDp0PShmdW5jdGlvbiBpKHQpe3ZhciBlPXQubGVuZ3RoO3JldHVybntwb2ludDpmdW5jdGlvbihuLGkpe2Zvcih2YXIgcj0tMTsrK3I8ZTspdFtyXS5wb2ludChuLGkpfSxzcGhlcmU6ZnVuY3Rpb24oKXtmb3IodmFyIG49LTE7KytuPGU7KXRbbl0uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe2Zvcih2YXIgbj0tMTsrK248ZTspdFtuXS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe2Zvcih2YXIgbj0tMTsrK248ZTspdFtuXS5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2Zvcih2YXIgbj0tMTsrK248ZTspdFtuXS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe2Zvcih2YXIgbj0tMTsrK248ZTspdFtuXS5wb2x5Z29uRW5kKCl9fX0pKFthLnN0cmVhbShlPW4pLHMuc3RyZWFtKG4pLGwuc3RyZWFtKG4pXSl9LHUucHJlY2lzaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhLnByZWNpc2lvbih0KSxzLnByZWNpc2lvbih0KSxsLnByZWNpc2lvbih0KSxoKCkpOmEucHJlY2lzaW9uKCl9LHUuc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGEuc2NhbGUodCkscy5zY2FsZSguMzUqdCksbC5zY2FsZSh0KSx1LnRyYW5zbGF0ZShhLnRyYW5zbGF0ZSgpKSk6YS5zY2FsZSgpfSx1LnRyYW5zbGF0ZT1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gYS50cmFuc2xhdGUoKTt2YXIgZT1hLnNjYWxlKCksbz0rdFswXSx1PSt0WzFdO3JldHVybiBuPWEudHJhbnNsYXRlKHQpLmNsaXBFeHRlbnQoW1tvLS40NTUqZSx1LS4yMzgqZV0sW28rLjQ1NSplLHUrLjIzOCplXV0pLnN0cmVhbShjKSxpPXMudHJhbnNsYXRlKFtvLS4zMDcqZSx1Ky4yMDEqZV0pLmNsaXBFeHRlbnQoW1tvLS40MjUqZStDcSx1Ky4xMiplK0NxXSxbby0uMjE0KmUtQ3EsdSsuMjM0KmUtQ3FdXSkuc3RyZWFtKGMpLHI9bC50cmFuc2xhdGUoW28tLjIwNSplLHUrLjIxMiplXSkuY2xpcEV4dGVudChbW28tLjIxNCplK0NxLHUrLjE2NiplK0NxXSxbby0uMTE1KmUtQ3EsdSsuMjM0KmUtQ3FdXSkuc3RyZWFtKGMpLGgoKX0sdS5maXRFeHRlbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdksodSx0LGUpfSx1LmZpdFNpemU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYksodSx0LGUpfSx1LmZpdFdpZHRoPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHhLKHUsdCxlKX0sdS5maXRIZWlnaHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gd0sodSx0LGUpfSx1LnNjYWxlKDEwNzApfSxnZW9BemltdXRoYWxFcXVhbEFyZWE6ZnVuY3Rpb24gbXB0KCl7cmV0dXJuIFRLKE9LKS5zY2FsZSgxMjQuNzUpLmNsaXBBbmdsZSgxNzkuOTk5KX0sZ2VvQXppbXV0aGFsRXF1YWxBcmVhUmF3Ok9LLGdlb0F6aW11dGhhbEVxdWlkaXN0YW50OmZ1bmN0aW9uIGdwdCgpe3JldHVybiBUSyhSSykuc2NhbGUoNzkuNDE4OCkuY2xpcEFuZ2xlKDE3OS45OTkpfSxnZW9BemltdXRoYWxFcXVpZGlzdGFudFJhdzpSSyxnZW9Db25pY0NvbmZvcm1hbDpmdW5jdGlvbiBfcHQoKXtyZXR1cm4gQUsoSEspLnNjYWxlKDEwOS41KS5wYXJhbGxlbHMoWzMwLDMwXSl9LGdlb0NvbmljQ29uZm9ybWFsUmF3OkhLLGdlb0NvbmljRXF1YWxBcmVhOkxLLGdlb0NvbmljRXF1YWxBcmVhUmF3OmtLLGdlb0NvbmljRXF1aWRpc3RhbnQ6ZnVuY3Rpb24geXB0KCl7cmV0dXJuIEFLKFZLKS5zY2FsZSgxMzEuMTU0KS5jZW50ZXIoWzAsMTMuOTM4OV0pfSxnZW9Db25pY0VxdWlkaXN0YW50UmF3OlZLLGdlb0VxdWlyZWN0YW5ndWxhcjpmdW5jdGlvbiB2cHQoKXtyZXR1cm4gVEsoRkspLnNjYWxlKDE1Mi42Myl9LGdlb0VxdWlyZWN0YW5ndWxhclJhdzpGSyxnZW9Hbm9tb25pYzpmdW5jdGlvbiBicHQoKXtyZXR1cm4gVEsoVUspLnNjYWxlKDE0NC4wNDkpLmNsaXBBbmdsZSg2MCl9LGdlb0dub21vbmljUmF3OlVLLGdlb0lkZW50aXR5OmZ1bmN0aW9uIHhwdCgpe3ZhciB0LGUsbixpLHIsbyxhPTEscz0wLGw9MCxjPTEsdT0xLGg9XyQsZD1udWxsLHA9XyQ7ZnVuY3Rpb24gZigpe3JldHVybiBpPXI9bnVsbCxvfXJldHVybiBvPXtzdHJlYW06ZnVuY3Rpb24odCl7cmV0dXJuIGkmJnI9PT10P2k6aT1oKHAocj10KSl9LHBvc3RjbGlwOmZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPWksZD10PWU9bj1udWxsLGYoKSk6cH0sY2xpcEV4dGVudDpmdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD1udWxsPT1pPyhkPXQ9ZT1uPW51bGwsXyQpOnFYKGQ9K2lbMF1bMF0sdD0raVswXVsxXSxlPStpWzFdWzBdLG49K2lbMV1bMV0pLGYoKSk6bnVsbD09ZD9udWxsOltbZCx0XSxbZSxuXV19LHNjYWxlOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPWpLKChhPSt0KSpjLGEqdSxzLGwpLGYoKSk6YX0sdHJhbnNsYXRlOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPWpLKGEqYyxhKnUscz0rdFswXSxsPSt0WzFdKSxmKCkpOltzLGxdfSxyZWZsZWN0WDpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD1qSyhhKihjPXQ/LTE6MSksYSp1LHMsbCksZigpKTpjPDB9LHJlZmxlY3RZOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPWpLKGEqYyxhKih1PXQ/LTE6MSkscyxsKSxmKCkpOnU8MH0sZml0RXh0ZW50OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZLKG8sdCxlKX0sZml0U2l6ZTpmdW5jdGlvbih0LGUpe3JldHVybiBiSyhvLHQsZSl9LGZpdFdpZHRoOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHhLKG8sdCxlKX0sZml0SGVpZ2h0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHdLKG8sdCxlKX19fSxnZW9Qcm9qZWN0aW9uOlRLLGdlb1Byb2plY3Rpb25NdXRhdG9yOkNLLGdlb01lcmNhdG9yOmZ1bmN0aW9uIHdwdCgpe3JldHVybiBESyh6Sykuc2NhbGUoOTYxL1BxKX0sZ2VvTWVyY2F0b3JSYXc6ekssZ2VvTmF0dXJhbEVhcnRoMTpmdW5jdGlvbiBTcHQoKXtyZXR1cm4gVEsoR0spLnNjYWxlKDE3NS4yOTUpfSxnZW9OYXR1cmFsRWFydGgxUmF3OkdLLGdlb09ydGhvZ3JhcGhpYzpmdW5jdGlvbiBNcHQoKXtyZXR1cm4gVEsoV0spLnNjYWxlKDI0OS41KS5jbGlwQW5nbGUoOTAuMDAwMDAxKX0sZ2VvT3J0aG9ncmFwaGljUmF3OldLLGdlb1N0ZXJlb2dyYXBoaWM6ZnVuY3Rpb24gRXB0KCl7cmV0dXJuIFRLKHFLKS5zY2FsZSgyNTApLmNsaXBBbmdsZSgxNDIpfSxnZW9TdGVyZW9ncmFwaGljUmF3OnFLLGdlb1RyYW5zdmVyc2VNZXJjYXRvcjpmdW5jdGlvbiBUcHQoKXt2YXIgdD1ESyhZSyksZT10LmNlbnRlcixuPXQucm90YXRlO3JldHVybiB0LmNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9lKFstdFsxXSx0WzBdXSk6Wyh0PWUoKSlbMV0sLXRbMF1dfSx0LnJvdGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uKFt0WzBdLHRbMV0sdC5sZW5ndGg+Mj90WzJdKzkwOjkwXSk6Wyh0PW4oKSlbMF0sdFsxXSx0WzJdLTkwXX0sbihbMCwwLDkwXSkuc2NhbGUoMTU5LjE1NSl9LGdlb1RyYW5zdmVyc2VNZXJjYXRvclJhdzpZSyxnZW9Sb3RhdGlvbjpTWCxnZW9TdHJlYW06ZVksZ2VvVHJhbnNmb3JtOmZ1bmN0aW9uIENwdCh0KXtyZXR1cm57c3RyZWFtOmdLKHQpfX0sY2x1c3RlcjpmdW5jdGlvbiBBcHQoKXt2YXIgdD1YSyxlPTEsbj0xLGk9ITE7ZnVuY3Rpb24gcihyKXt2YXIgbyxhPTA7ci5lYWNoQWZ0ZXIoKGZ1bmN0aW9uKGUpe3ZhciBuPWUuY2hpbGRyZW47bj8oZS54PShmdW5jdGlvbiBpKHQpe3JldHVybiB0LnJlZHVjZSgkSywwKS90Lmxlbmd0aH0pKG4pLGUueT0oZnVuY3Rpb24gcih0KXtyZXR1cm4gMSt0LnJlZHVjZShLSywwKX0pKG4pKTooZS54PW8/YSs9dChlLG8pOjAsZS55PTAsbz1lKX0pKTt2YXIgcz0oZnVuY3Rpb24gbCh0KXtmb3IodmFyIGU7ZT10LmNoaWxkcmVuOyl0PWVbMF07cmV0dXJuIHR9KShyKSxjPShmdW5jdGlvbiB1KHQpe2Zvcih2YXIgZTtlPXQuY2hpbGRyZW47KXQ9ZVtlLmxlbmd0aC0xXTtyZXR1cm4gdH0pKHIpLGg9cy54LXQocyxjKS8yLGQ9Yy54K3QoYyxzKS8yO3JldHVybiByLmVhY2hBZnRlcihpP2Z1bmN0aW9uKHQpe3QueD0odC54LXIueCkqZSx0Lnk9KHIueS10LnkpKm59OmZ1bmN0aW9uKHQpe3QueD0odC54LWgpLyhkLWgpKmUsdC55PSgxLShyLnk/dC55L3IueToxKSkqbn0pfXJldHVybiByLnNlcGFyYXRpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxyKTp0fSxyLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ITEsZT0rdFswXSxuPSt0WzFdLHIpOmk/bnVsbDpbZSxuXX0sci5ub2RlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0hMCxlPSt0WzBdLG49K3RbMV0scik6aT9bZSxuXTpudWxsfSxyfSxoaWVyYXJjaHk6SksscGFjazpmdW5jdGlvbiBrcHQoKXt2YXIgdD1udWxsLGU9MSxuPTEsaT1QWjtmdW5jdGlvbiByKHIpe3JldHVybiByLng9ZS8yLHIueT1uLzIsdD9yLmVhY2hCZWZvcmUoT1oodCkpLmVhY2hBZnRlcihSWihpLC41KSkuZWFjaEJlZm9yZSh6WigxKSk6ci5lYWNoQmVmb3JlKE9aKElaKSkuZWFjaEFmdGVyKFJaKFBaLDEpKS5lYWNoQWZ0ZXIoUlooaSxyLnIvTWF0aC5taW4oZSxuKSkpLmVhY2hCZWZvcmUoelooTWF0aC5taW4oZSxuKS8oMipyLnIpKSkscn1yZXR1cm4gci5yYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9a1ooZSkscik6dH0sci5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0WzBdLG49K3RbMV0scik6W2Usbl19LHIucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90Ok5aKCt0KSxyKTppfSxyfSxwYWNrU2libGluZ3M6ZnVuY3Rpb24gTHB0KHQpe3JldHVybiBBWih0KSx0fSxwYWNrRW5jbG9zZTpnWixwYXJ0aXRpb246ZnVuY3Rpb24gUHB0KCl7dmFyIHQ9MSxlPTEsbj0wLGk9ITE7ZnVuY3Rpb24gcihyKXt2YXIgbz1yLmhlaWdodCsxO3JldHVybiByLngwPXIueTA9bixyLngxPXQsci55MT1lL28sci5lYWNoQmVmb3JlKChmdW5jdGlvbiBhKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKGkpe2kuY2hpbGRyZW4mJkJaKGksaS54MCx0KihpLmRlcHRoKzEpL2UsaS54MSx0KihpLmRlcHRoKzIpL2UpO3ZhciByPWkueDAsbz1pLnkwLGE9aS54MS1uLHM9aS55MS1uO2E8ciYmKHI9YT0ocithKS8yKSxzPG8mJihvPXM9KG8rcykvMiksaS54MD1yLGkueTA9byxpLngxPWEsaS55MT1zfX0pKGUsbykpLGkmJnIuZWFjaEJlZm9yZShEWikscn1yZXR1cm4gci5yb3VuZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0hIXQscik6aX0sci5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStuWzBdLGU9K25bMV0scik6W3QsZV19LHIucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rdCxyKTpufSxyfSxzdHJhdGlmeTpmdW5jdGlvbiBOcHQoKXt2YXIgdD1WWixlPVVaO2Z1bmN0aW9uIG4obil7dmFyIGkscixvLGEscyxsLGMsdT1uLmxlbmd0aCxoPW5ldyBBcnJheSh1KSxkPXt9O2ZvcihyPTA7cjx1OysrcilzPWhbcl09bmV3IG5aKGk9bltyXSksbnVsbCE9KGw9dChpLHIsbikpJiYobCs9IiIpJiYoZFtjPSIkIisocy5pZD1sKV09YyBpbiBkP0ZaOnMpO2ZvcihyPTA7cjx1OysrcilpZihzPWhbcl0sbnVsbCE9KGw9ZShuW3JdLHIsbikpJiYobCs9IiIpKXtpZighKGE9ZFsiJCIrbF0pKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIitsKTtpZihhPT09RlopdGhyb3cgbmV3IEVycm9yKCJhbWJpZ3VvdXM6ICIrbCk7YS5jaGlsZHJlbj9hLmNoaWxkcmVuLnB1c2gocyk6YS5jaGlsZHJlbj1bc10scy5wYXJlbnQ9YX1lbHNle2lmKG8pdGhyb3cgbmV3IEVycm9yKCJtdWx0aXBsZSByb290cyIpO289c31pZighbyl0aHJvdyBuZXcgRXJyb3IoIm5vIHJvb3QiKTtpZihvLnBhcmVudD1IWixvLmVhY2hCZWZvcmUoKGZ1bmN0aW9uKHQpe3QuZGVwdGg9dC5wYXJlbnQuZGVwdGgrMSwtLXV9KSkuZWFjaEJlZm9yZShlWiksby5wYXJlbnQ9bnVsbCx1PjApdGhyb3cgbmV3IEVycm9yKCJjeWNsZSIpO3JldHVybiBvfXJldHVybiBuLmlkPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PUxaKGUpLG4pOnR9LG4ucGFyZW50SWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9TFoodCksbik6ZX0sbn0sdHJlZTpmdW5jdGlvbiBJcHQoKXt2YXIgdD1qWixlPTEsbj0xLGk9bnVsbDtmdW5jdGlvbiByKHIpe3ZhciBsPShmdW5jdGlvbiBjKHQpe2Zvcih2YXIgZSxuLGkscixvLGE9bmV3IFhaKHQsMCkscz1bYV07ZT1zLnBvcCgpOylpZihpPWUuXy5jaGlsZHJlbilmb3IoZS5jaGlsZHJlbj1uZXcgQXJyYXkobz1pLmxlbmd0aCkscj1vLTE7cj49MDstLXIpcy5wdXNoKG49ZS5jaGlsZHJlbltyXT1uZXcgWFooaVtyXSxyKSksbi5wYXJlbnQ9ZTtyZXR1cm4oYS5wYXJlbnQ9bmV3IFhaKG51bGwsMCkpLmNoaWxkcmVuPVthXSxhfSkocik7aWYobC5lYWNoQWZ0ZXIobyksbC5wYXJlbnQubT0tbC56LGwuZWFjaEJlZm9yZShhKSxpKXIuZWFjaEJlZm9yZShzKTtlbHNle3ZhciB1PXIsaD1yLGQ9cjtyLmVhY2hCZWZvcmUoKGZ1bmN0aW9uKHQpe3QueDx1LngmJih1PXQpLHQueD5oLngmJihoPXQpLHQuZGVwdGg+ZC5kZXB0aCYmKGQ9dCl9KSk7dmFyIHA9dT09PWg/MTp0KHUsaCkvMixmPXAtdS54LG09ZS8oaC54K3ArZiksZz1uLyhkLmRlcHRofHwxKTtyLmVhY2hCZWZvcmUoKGZ1bmN0aW9uKHQpe3QueD0odC54K2YpKm0sdC55PXQuZGVwdGgqZ30pKX1yZXR1cm4gcn1mdW5jdGlvbiBvKGUpe3ZhciBuPWUuY2hpbGRyZW4saT1lLnBhcmVudC5jaGlsZHJlbixyPWUuaT9pW2UuaS0xXTpudWxsO2lmKG4peyEoZnVuY3Rpb24gbyh0KXtmb3IodmFyIGUsbj0wLGk9MCxyPXQuY2hpbGRyZW4sbz1yLmxlbmd0aDstLW8+PTA7KShlPXJbb10pLnorPW4sZS5tKz1uLG4rPWUucysoaSs9ZS5jKX0pKGUpO3ZhciBhPShuWzBdLnorbltuLmxlbmd0aC0xXS56KS8yO3I/KGUuej1yLnordChlLl8sci5fKSxlLm09ZS56LWEpOmUuej1hfWVsc2UgciYmKGUuej1yLnordChlLl8sci5fKSk7ZS5wYXJlbnQuQT0oZnVuY3Rpb24gcyhlLG4saSl7aWYobil7Zm9yKHZhciByLG89ZSxhPWUscz1uLGw9by5wYXJlbnQuY2hpbGRyZW5bMF0sYz1vLm0sdT1hLm0saD1zLm0sZD1sLm07cz1XWihzKSxvPUdaKG8pLHMmJm87KWw9R1oobCksKGE9V1ooYSkpLmE9ZSwocj1zLnoraC1vLnotYyt0KHMuXyxvLl8pKT4wJiYocVooWVoocyxlLGkpLGUsciksYys9cix1Kz1yKSxoKz1zLm0sYys9by5tLGQrPWwubSx1Kz1hLm07cyYmIVdaKGEpJiYoYS50PXMsYS5tKz1oLXUpLG8mJiFHWihsKSYmKGwudD1vLGwubSs9Yy1kLGk9ZSl9cmV0dXJuIGl9KShlLHIsZS5wYXJlbnQuQXx8aVswXSl9ZnVuY3Rpb24gYSh0KXt0Ll8ueD10LnordC5wYXJlbnQubSx0Lm0rPXQucGFyZW50Lm19ZnVuY3Rpb24gcyh0KXt0LngqPWUsdC55PXQuZGVwdGgqbn1yZXR1cm4gci5zZXBhcmF0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUscik6dH0sci5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSExLGU9K3RbMF0sbj0rdFsxXSxyKTppP251bGw6W2Usbl19LHIubm9kZVNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ITAsZT0rdFswXSxuPSt0WzFdLHIpOmk/W2Usbl06bnVsbH0scn0sdHJlZW1hcDpmdW5jdGlvbiBPcHQoKXt2YXIgdD1KWixlPSExLG49MSxpPTEscj1bMF0sbz1QWixhPVBaLHM9UFosbD1QWixjPVBaO2Z1bmN0aW9uIHUodCl7cmV0dXJuIHQueDA9dC55MD0wLHQueDE9bix0LnkxPWksdC5lYWNoQmVmb3JlKGgpLHI9WzBdLGUmJnQuZWFjaEJlZm9yZShEWiksdH1mdW5jdGlvbiBoKGUpe3ZhciBuPXJbZS5kZXB0aF0saT1lLngwK24sdT1lLnkwK24saD1lLngxLW4sZD1lLnkxLW47aDxpJiYoaT1oPShpK2gpLzIpLGQ8dSYmKHU9ZD0odStkKS8yKSxlLngwPWksZS55MD11LGUueDE9aCxlLnkxPWQsZS5jaGlsZHJlbiYmKG49cltlLmRlcHRoKzFdPW8oZSkvMixpKz1jKGUpLW4sdSs9YShlKS1uLChoLT1zKGUpLW4pPGkmJihpPWg9KGkraCkvMiksKGQtPWwoZSktbik8dSYmKHU9ZD0odStkKS8yKSx0KGUsaSx1LGgsZCkpfXJldHVybiB1LnJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSEhdCx1KTplfSx1LnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K3RbMF0saT0rdFsxXSx1KTpbbixpXX0sdS50aWxlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PUxaKGUpLHUpOnR9LHUucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD91LnBhZGRpbmdJbm5lcih0KS5wYWRkaW5nT3V0ZXIodCk6dS5wYWRkaW5nSW5uZXIoKX0sdS5wYWRkaW5nSW5uZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpOWigrdCksdSk6b30sdS5wYWRkaW5nT3V0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dS5wYWRkaW5nVG9wKHQpLnBhZGRpbmdSaWdodCh0KS5wYWRkaW5nQm90dG9tKHQpLnBhZGRpbmdMZWZ0KHQpOnUucGFkZGluZ1RvcCgpfSx1LnBhZGRpbmdUb3A9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpOWigrdCksdSk6YX0sdS5wYWRkaW5nUmlnaHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpOWigrdCksdSk6c30sdS5wYWRkaW5nQm90dG9tPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6TlooK3QpLHUpOmx9LHUucGFkZGluZ0xlZnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpOWigrdCksdSk6Y30sdX0sdHJlZW1hcEJpbmFyeTpmdW5jdGlvbiBScHQodCxlLG4saSxyKXt2YXIgbyxhLHM9dC5jaGlsZHJlbixsPXMubGVuZ3RoLGM9bmV3IEFycmF5KGwrMSk7Zm9yKGNbMF09YT1vPTA7bzxsOysrbyljW28rMV09YSs9c1tvXS52YWx1ZTshKGZ1bmN0aW9uIHQoZSxuLGkscixvLGEsbCl7aWYoZT49bi0xKXt2YXIgdT1zW2VdO3JldHVybiB1LngwPXIsdS55MD1vLHUueDE9YSx2b2lkKHUueTE9bCl9Zm9yKHZhciBoPWNbZV0sZD1pLzIraCxwPWUrMSxmPW4tMTtwPGY7KXt2YXIgbT1wK2Y+Pj4xO2NbbV08ZD9wPW0rMTpmPW19ZC1jW3AtMV08Y1twXS1kJiZlKzE8cCYmLS1wO3ZhciBnPWNbcF0taCxfPWktZztpZihhLXI+bC1vKXt2YXIgeT0ocipfK2EqZykvaTt0KGUscCxnLHIsbyx5LGwpLHQocCxuLF8seSxvLGEsbCl9ZWxzZXt2YXIgdj0obypfK2wqZykvaTt0KGUscCxnLHIsbyxhLHYpLHQocCxuLF8scix2LGEsbCl9fSkoMCxsLHQudmFsdWUsZSxuLGkscil9LHRyZWVtYXBEaWNlOkJaLHRyZWVtYXBTbGljZTokWix0cmVlbWFwU2xpY2VEaWNlOmZ1bmN0aW9uIHpwdCh0LGUsbixpLHIpeygxJnQuZGVwdGg/JFo6QlopKHQsZSxuLGkscil9LHRyZWVtYXBTcXVhcmlmeTpKWix0cmVlbWFwUmVzcXVhcmlmeTpRWixpbnRlcnBvbGF0ZTp4USxpbnRlcnBvbGF0ZUFycmF5OmZRLGludGVycG9sYXRlQmFzaXM6clEsaW50ZXJwb2xhdGVCYXNpc0Nsb3NlZDpvUSxpbnRlcnBvbGF0ZURhdGU6bVEsaW50ZXJwb2xhdGVOdW1iZXI6Z1EsaW50ZXJwb2xhdGVPYmplY3Q6X1EsaW50ZXJwb2xhdGVSb3VuZDpmdW5jdGlvbiBEcHQodCxlKXtyZXR1cm4gZS09dD0rdCxmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5yb3VuZCh0K2Uqbil9fSxpbnRlcnBvbGF0ZVN0cmluZzpiUSxpbnRlcnBvbGF0ZVRyYW5zZm9ybUNzczpMUSxpbnRlcnBvbGF0ZVRyYW5zZm9ybVN2ZzpOUSxpbnRlcnBvbGF0ZVpvb206ZnVuY3Rpb24gQnB0KHQsZSl7dmFyIG4saSxyPXRbMF0sbz10WzFdLGE9dFsyXSxzPWVbMl0sbD1lWzBdLXIsYz1lWzFdLW8sdT1sKmwrYypjO2lmKHU8MWUtMTIpaT1NYXRoLmxvZyhzL2EpL09RLG49ZnVuY3Rpb24odCl7cmV0dXJuW3IrdCpsLG8rdCpjLGEqTWF0aC5leHAoT1EqdCppKV19O2Vsc2V7dmFyIGg9TWF0aC5zcXJ0KHUpLGQ9KHMqcy1hKmErNCp1KS8oMiphKjIqaCkscD0ocypzLWEqYS00KnUpLygyKnMqMipoKSxmPU1hdGgubG9nKE1hdGguc3FydChkKmQrMSktZCksbT1NYXRoLmxvZyhNYXRoLnNxcnQocCpwKzEpLXApO2k9KG0tZikvT1Esbj1mdW5jdGlvbih0KXt2YXIgZT10Kmksbj1SUShmKSxzPWEvKDIqaCkqKG4qKGZ1bmN0aW9uIHUodCl7cmV0dXJuKCh0PU1hdGguZXhwKDIqdCkpLTEpLyh0KzEpfSkoT1EqZStmKS0oZnVuY3Rpb24gZCh0KXtyZXR1cm4oKHQ9TWF0aC5leHAodCkpLTEvdCkvMn0pKGYpKTtyZXR1cm5bcitzKmwsbytzKmMsYSpuL1JRKE9RKmUrZildfX1yZXR1cm4gbi5kdXJhdGlvbj0xZTMqaSxufSxpbnRlcnBvbGF0ZVJnYjp1USxpbnRlcnBvbGF0ZVJnYkJhc2lzOmRRLGludGVycG9sYXRlUmdiQmFzaXNDbG9zZWQ6cFEsaW50ZXJwb2xhdGVIc2w6RFEsaW50ZXJwb2xhdGVIc2xMb25nOkJRLGludGVycG9sYXRlTGFiOmZ1bmN0aW9uIEhwdCh0LGUpe3ZhciBuPWNRKCh0PVZKKHQpKS5sLChlPVZKKGUpKS5sKSxpPWNRKHQuYSxlLmEpLHI9Y1EodC5iLGUuYiksbz1jUSh0Lm9wYWNpdHksZS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQubD1uKGUpLHQuYT1pKGUpLHQuYj1yKGUpLHQub3BhY2l0eT1vKGUpLHQrIiJ9fSxpbnRlcnBvbGF0ZUhjbDpGUSxpbnRlcnBvbGF0ZUhjbExvbmc6VlEsaW50ZXJwb2xhdGVDdWJlaGVsaXg6alEsaW50ZXJwb2xhdGVDdWJlaGVsaXhMb25nOkdRLHF1YW50aXplOmZ1bmN0aW9uIEZwdCh0LGUpe2Zvcih2YXIgbj1uZXcgQXJyYXkoZSksaT0wO2k8ZTsrK2kpbltpXT10KGkvKGUtMSkpO3JldHVybiBufSxwYXRoOktRLHBvbHlnb25BcmVhOmZ1bmN0aW9uIFZwdCh0KXtmb3IodmFyIGUsbj0tMSxpPXQubGVuZ3RoLHI9dFtpLTFdLG89MDsrK248aTspbys9KGU9cilbMV0qKHI9dFtuXSlbMF0tZVswXSpyWzFdO3JldHVybiBvLzJ9LHBvbHlnb25DZW50cm9pZDpmdW5jdGlvbiBVcHQodCl7Zm9yKHZhciBlLG4saT0tMSxyPXQubGVuZ3RoLG89MCxhPTAscz10W3ItMV0sbD0wOysraTxyOylsKz1uPShlPXMpWzBdKihzPXRbaV0pWzFdLXNbMF0qZVsxXSxvKz0oZVswXStzWzBdKSpuLGErPShlWzFdK3NbMV0pKm47cmV0dXJuW28vKGwqPTMpLGEvbF19LHBvbHlnb25IdWxsOmZ1bmN0aW9uIGpwdCh0KXtpZigobj10Lmxlbmd0aCk8MylyZXR1cm4gbnVsbDt2YXIgZSxuLGk9bmV3IEFycmF5KG4pLHI9bmV3IEFycmF5KG4pO2ZvcihlPTA7ZTxuOysrZSlpW2VdPVsrdFtlXVswXSwrdFtlXVsxXSxlXTtmb3IoaS5zb3J0KEpRKSxlPTA7ZTxuOysrZSlyW2VdPVtpW2VdWzBdLC1pW2VdWzFdXTt2YXIgbz1RUShpKSxhPVFRKHIpLHM9YVswXT09PW9bMF0sbD1hW2EubGVuZ3RoLTFdPT09b1tvLmxlbmd0aC0xXSxjPVtdO2ZvcihlPW8ubGVuZ3RoLTE7ZT49MDstLWUpYy5wdXNoKHRbaVtvW2VdXVsyXV0pO2ZvcihlPStzO2U8YS5sZW5ndGgtbDsrK2UpYy5wdXNoKHRbaVthW2VdXVsyXV0pO3JldHVybiBjfSxwb2x5Z29uQ29udGFpbnM6ZnVuY3Rpb24gR3B0KHQsZSl7Zm9yKHZhciBuLGkscj10Lmxlbmd0aCxvPXRbci0xXSxhPWVbMF0scz1lWzFdLGw9b1swXSxjPW9bMV0sdT0hMSxoPTA7aDxyOysraCluPShvPXRbaF0pWzBdLChpPW9bMV0pPnMhPWM+cyYmYTwobC1uKSoocy1pKS8oYy1pKStuJiYodT0hdSksbD1uLGM9aTtyZXR1cm4gdX0scG9seWdvbkxlbmd0aDpmdW5jdGlvbiBXcHQodCl7Zm9yKHZhciBlLG4saT0tMSxyPXQubGVuZ3RoLG89dFtyLTFdLGE9b1swXSxzPW9bMV0sbD0wOysraTxyOyllPWEsbj1zLGUtPWE9KG89dFtpXSlbMF0sbi09cz1vWzFdLGwrPU1hdGguc3FydChlKmUrbipuKTtyZXR1cm4gbH0scXVhZHRyZWU6cjEscXVldWU6azEscmFuZG9tVW5pZm9ybTpQMSxyYW5kb21Ob3JtYWw6TjEscmFuZG9tTG9nTm9ybWFsOkkxLHJhbmRvbUJhdGVzOlIxLHJhbmRvbUlyd2luSGFsbDpPMSxyYW5kb21FeHBvbmVudGlhbDp6MSxyZXF1ZXN0OkQxLGh0bWw6SDEsanNvbjpGMSx0ZXh0OlYxLHhtbDpVMSxjc3Y6VzEsdHN2OnExLHNjYWxlQmFuZDpmMCxzY2FsZVBvaW50OmZ1bmN0aW9uIHFwdCgpe3JldHVybiBtMChmMCgpLnBhZGRpbmdJbm5lcigxKSl9LHNjYWxlSWRlbnRpdHk6ZnVuY3Rpb24gdCgpe3ZhciBlPVswLDFdO2Z1bmN0aW9uIG4odCl7cmV0dXJuK3R9cmV0dXJuIG4uaW52ZXJ0PW4sbi5kb21haW49bi5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT11MC5jYWxsKHQsVDIpLG4pOmUuc2xpY2UoKX0sbi5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHQoKS5kb21haW4oZSl9LCQyKG4pfSxzY2FsZUxpbmVhcjpmdW5jdGlvbiB0KCl7dmFyIGU9TjIoQTIsbTIpO3JldHVybiBlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gUDIoZSx0KCkpfSwkMihlKX0sc2NhbGVMb2c6ZnVuY3Rpb24gdCgpe3ZhciBlPU4yKFoyLEoyKS5kb21haW4oWzEsMTBdKSxuPWUuZG9tYWluLGk9MTAscj1lNSgxMCksbz10NSgxMCk7ZnVuY3Rpb24gYSgpe3JldHVybiByPWU1KGkpLG89dDUoaSksbigpWzBdPDAmJihyPW41KHIpLG89bjUobykpLGV9cmV0dXJuIGUuYmFzZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rdCxhKCkpOml9LGUuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuKHQpLGEoKSk6bigpfSxlLnRpY2tzPWZ1bmN0aW9uKHQpe3ZhciBlLGE9bigpLHM9YVswXSxsPWFbYS5sZW5ndGgtMV07KGU9bDxzKSYmKGQ9cyxzPWwsbD1kKTt2YXIgYyx1LGgsZD1yKHMpLHA9cihsKSxmPW51bGw9PXQ/MTA6K3QsbT1bXTtpZighKGklMSkmJnAtZDxmKXtpZihkPU1hdGgucm91bmQoZCktMSxwPU1hdGgucm91bmQocCkrMSxzPjApe2Zvcig7ZDxwOysrZClmb3IodT0xLGM9byhkKTt1PGk7Kyt1KWlmKCEoKGg9Yyp1KTxzKSl7aWYoaD5sKWJyZWFrO20ucHVzaChoKX19ZWxzZSBmb3IoO2Q8cDsrK2QpZm9yKHU9aS0xLGM9byhkKTt1Pj0xOy0tdSlpZighKChoPWMqdSk8cykpe2lmKGg+bClicmVhazttLnB1c2goaCl9fWVsc2UgbT10MChkLHAsTWF0aC5taW4ocC1kLGYpKS5tYXAobyk7cmV0dXJuIGU/bS5yZXZlcnNlKCk6bX0sZS50aWNrRm9ybWF0PWZ1bmN0aW9uKHQsbil7aWYobnVsbD09biYmKG49MTA9PT1pPyIuMGUiOiIsIiksImZ1bmN0aW9uIiE9dHlwZW9mIG4mJihuPVcyKG4pKSx0PT09MS8wKXJldHVybiBuO251bGw9PXQmJih0PTEwKTt2YXIgYT1NYXRoLm1heCgxLGkqdC9lLnRpY2tzKCkubGVuZ3RoKTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9dC9vKE1hdGgucm91bmQocih0KSkpO3JldHVybiBlKmk8aS0uNSYmKGUqPWkpLGU8PWE/bih0KToiIn19LGUubmljZT1mdW5jdGlvbigpe3JldHVybiBuKEsyKG4oKSx7Zmxvb3I6ZnVuY3Rpb24odCl7cmV0dXJuIG8oTWF0aC5mbG9vcihyKHQpKSl9LGNlaWw6ZnVuY3Rpb24odCl7cmV0dXJuIG8oTWF0aC5jZWlsKHIodCkpKX19KSl9LGUuY29weT1mdW5jdGlvbigpe3JldHVybiBQMihlLHQoKS5iYXNlKGkpKX0sZX0sc2NhbGVPcmRpbmFsOnAwLHNjYWxlSW1wbGljaXQ6ZDAsc2NhbGVQb3c6cjUsc2NhbGVTcXJ0OmZ1bmN0aW9uIFlwdCgpe3JldHVybiByNSgpLmV4cG9uZW50KC41KX0sc2NhbGVRdWFudGlsZTpmdW5jdGlvbiB0KCl7dmFyIGU9W10sbj1bXSxpPVtdO2Z1bmN0aW9uIHIoKXt2YXIgdD0wLHI9TWF0aC5tYXgoMSxuLmxlbmd0aCk7Zm9yKGk9bmV3IEFycmF5KHItMSk7Kyt0PHI7KWlbdC0xXT1pMChlLHQvcik7cmV0dXJuIG99ZnVuY3Rpb24gbyh0KXtpZighaXNOYU4odD0rdCkpcmV0dXJuIG5bJDEoaSx0KV19cmV0dXJuIG8uaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHQpe3ZhciByPW4uaW5kZXhPZih0KTtyZXR1cm4gcjwwP1tOYU4sTmFOXTpbcj4wP2lbci0xXTplWzBdLHI8aS5sZW5ndGg/aVtyXTplW2UubGVuZ3RoLTFdXX0sby5kb21haW49ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGUuc2xpY2UoKTtlPVtdO2Zvcih2YXIgbixpPTAsbz10Lmxlbmd0aDtpPG87KytpKW51bGw9PShuPXRbaV0pfHxpc05hTihuPStuKXx8ZS5wdXNoKG4pO3JldHVybiBlLnNvcnQoWTEpLHIoKX0sby5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1oMC5jYWxsKHQpLHIoKSk6bi5zbGljZSgpfSxvLnF1YW50aWxlcz1mdW5jdGlvbigpe3JldHVybiBpLnNsaWNlKCl9LG8uY29weT1mdW5jdGlvbigpe3JldHVybiB0KCkuZG9tYWluKGUpLnJhbmdlKG4pfSxvfSxzY2FsZVF1YW50aXplOmZ1bmN0aW9uIHQoKXt2YXIgZT0wLG49MSxpPTEscj1bLjVdLG89WzAsMV07ZnVuY3Rpb24gYSh0KXtpZih0PD10KXJldHVybiBvWyQxKHIsdCwwLGkpXX1mdW5jdGlvbiBzKCl7dmFyIHQ9LTE7Zm9yKHI9bmV3IEFycmF5KGkpOysrdDxpOylyW3RdPSgodCsxKSpuLSh0LWkpKmUpLyhpKzEpO3JldHVybiBhfXJldHVybiBhLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rdFswXSxuPSt0WzFdLHMoKSk6W2Usbl19LGEucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9KG89aDAuY2FsbCh0KSkubGVuZ3RoLTEscygpKTpvLnNsaWNlKCl9LGEuaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHQpe3ZhciBhPW8uaW5kZXhPZih0KTtyZXR1cm4gYTwwP1tOYU4sTmFOXTphPDE/W2UsclswXV06YT49aT9bcltpLTFdLG5dOltyW2EtMV0sclthXV19LGEuY29weT1mdW5jdGlvbigpe3JldHVybiB0KCkuZG9tYWluKFtlLG5dKS5yYW5nZShvKX0sJDIoYSl9LHNjYWxlVGhyZXNob2xkOmZ1bmN0aW9uIHQoKXt2YXIgZT1bLjVdLG49WzAsMV0saT0xO2Z1bmN0aW9uIHIodCl7aWYodDw9dClyZXR1cm4gblskMShlLHQsMCxpKV19cmV0dXJuIHIuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPWgwLmNhbGwodCksaT1NYXRoLm1pbihlLmxlbmd0aCxuLmxlbmd0aC0xKSxyKTplLnNsaWNlKCl9LHIucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49aDAuY2FsbCh0KSxpPU1hdGgubWluKGUubGVuZ3RoLG4ubGVuZ3RoLTEpLHIpOm4uc2xpY2UoKX0sci5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24odCl7dmFyIGk9bi5pbmRleE9mKHQpO3JldHVybltlW2ktMV0sZVtpXV19LHIuY29weT1mdW5jdGlvbigpe3JldHVybiB0KCkuZG9tYWluKGUpLnJhbmdlKG4pfSxyfSxzY2FsZVRpbWU6ZnVuY3Rpb24gWHB0KCl7cmV0dXJuIHM0KE01LFM1LGI1LHk1LF81LGc1LG01LGM1LEI1KS5kb21haW4oW25ldyBEYXRlKDJlMywwLDEpLG5ldyBEYXRlKDJlMywwLDIpXSl9LHNjYWxlVXRjOmZ1bmN0aW9uICRwdCgpe3JldHVybiBzNChJNSxONSxrNSxDNSxUNSxFNSxtNSxjNSxINSkuZG9tYWluKFtEYXRlLlVUQygyZTMsMCwxKSxEYXRlLlVUQygyZTMsMCwyKV0pfSxzY2hlbWVDYXRlZ29yeTEwOmM0LHNjaGVtZUNhdGVnb3J5MjBiOnU0LHNjaGVtZUNhdGVnb3J5MjBjOmg0LHNjaGVtZUNhdGVnb3J5MjA6ZDQsaW50ZXJwb2xhdGVDdWJlaGVsaXhEZWZhdWx0OnA0LGludGVycG9sYXRlUmFpbmJvdzpmdW5jdGlvbiBLcHQodCl7KHQ8MHx8dD4xKSYmKHQtPU1hdGguZmxvb3IodCkpO3ZhciBlPU1hdGguYWJzKHQtLjUpO3JldHVybiBnNC5oPTM2MCp0LTEwMCxnNC5zPTEuNS0xLjUqZSxnNC5sPS44LS45KmUsZzQrIiJ9LGludGVycG9sYXRlV2FybTpmNCxpbnRlcnBvbGF0ZUNvb2w6bTQsaW50ZXJwb2xhdGVWaXJpZGlzOnk0LGludGVycG9sYXRlTWFnbWE6djQsaW50ZXJwb2xhdGVJbmZlcm5vOmI0LGludGVycG9sYXRlUGxhc21hOng0LHNjYWxlU2VxdWVudGlhbDpmdW5jdGlvbiB0KGUpe3ZhciBuPTAsaT0xLHI9ITE7ZnVuY3Rpb24gbyh0KXt2YXIgbz0odC1uKS8oaS1uKTtyZXR1cm4gZShyP01hdGgubWF4KDAsTWF0aC5taW4oMSxvKSk6byl9cmV0dXJuIG8uZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSt0WzBdLGk9K3RbMV0sbyk6W24saV19LG8uY2xhbXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ISF0LG8pOnJ9LG8uaW50ZXJwb2xhdG9yPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsbyk6ZX0sby5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHQoZSkuZG9tYWluKFtuLGldKS5jbGFtcChyKX0sJDIobyl9LGNyZWF0ZTpmdW5jdGlvbiBacHQodCl7cmV0dXJuIE82KEM0KHQpLmNhbGwoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSl9LGNyZWF0b3I6QzQsbG9jYWw6ZDksbWF0Y2hlcjpSNCxtb3VzZTpmdW5jdGlvbiBKcHQodCl7dmFyIGU9ZjkoKTtyZXR1cm4gZS5jaGFuZ2VkVG91Y2hlcyYmKGU9ZS5jaGFuZ2VkVG91Y2hlc1swXSksbTkodCxlKX0sbmFtZXNwYWNlOk00LG5hbWVzcGFjZXM6UzQsY2xpZW50UG9pbnQ6bTksc2VsZWN0Ok82LHNlbGVjdEFsbDpmdW5jdGlvbiBRcHQodCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P25ldyBONihbZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCh0KV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyBONihbbnVsbD09dD9bXTp0XSxQNil9LHNlbGVjdGlvbjpJNixzZWxlY3RvcjprNCxzZWxlY3RvckFsbDpQNCxzdHlsZTpaNCx0b3VjaDpmdW5jdGlvbiB0ZnQodCxlLG4pe2FyZ3VtZW50cy5sZW5ndGg8MyYmKG49ZSxlPWY5KCkuY2hhbmdlZFRvdWNoZXMpO2Zvcih2YXIgaSxyPTAsbz1lP2UubGVuZ3RoOjA7cjxvOysrcilpZigoaT1lW3JdKS5pZGVudGlmaWVyPT09bilyZXR1cm4gbTkodCxpKTtyZXR1cm4gbnVsbH0sdG91Y2hlczpmdW5jdGlvbiBlZnQodCxlKXtudWxsPT1lJiYoZT1mOSgpLnRvdWNoZXMpO2Zvcih2YXIgbj0wLGk9ZT9lLmxlbmd0aDowLHI9bmV3IEFycmF5KGkpO248aTsrK24pcltuXT1tOSh0LGVbbl0pO3JldHVybiByfSx3aW5kb3c6WTQsZ2V0IGV2ZW50KCl7cmV0dXJuIHc2fSxjdXN0b21FdmVudDpmdW5jdGlvbiBuZnQodCxlLG4saSl7dmFyIHI9dzY7dC5zb3VyY2VFdmVudD13Nix3Nj10O3RyeXtyZXR1cm4gZS5hcHBseShuLGkpfWZpbmFsbHl7dzY9cn19LGFyYzpmdW5jdGlvbiBpZnQoKXt2YXIgdD16OSxlPUQ5LG49dzkoMCksaT1udWxsLHI9Qjksbz1IOSxhPUY5LHM9bnVsbDtmdW5jdGlvbiBsKCl7dmFyIGwsYyx1PSt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxoPStlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxkPXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLU45LHA9by5hcHBseSh0aGlzLGFyZ3VtZW50cyktTjksZj1TOShwLWQpLG09cD5kO2lmKHN8fChzPWw9eDkoKSksaDx1JiYoYz1oLGg9dSx1PWMpLGg+TDkpaWYoZj5JOS1MOSlzLm1vdmVUbyhoKkU5KGQpLGgqQTkoZCkpLHMuYXJjKDAsMCxoLGQscCwhbSksdT5MOSYmKHMubW92ZVRvKHUqRTkocCksdSpBOShwKSkscy5hcmMoMCwwLHUscCxkLG0pKTtlbHNle3ZhciBnLF8seT1kLHY9cCxiPWQseD1wLHc9ZixTPWYsTT1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKS8yLEU9TT5MOSYmKGk/K2kuYXBwbHkodGhpcyxhcmd1bWVudHMpOms5KHUqdStoKmgpKSxUPUM5KFM5KGgtdSkvMiwrbi5hcHBseSh0aGlzLGFyZ3VtZW50cykpLEM9VCxBPVQ7aWYoRT5MOSl7dmFyIGs9UjkoRS91KkE5KE0pKSxMPVI5KEUvaCpBOShNKSk7KHctPTIqayk+TDk/KGIrPWsqPW0/MTotMSx4LT1rKToodz0wLGI9eD0oZCtwKS8yKSwoUy09MipMKT5MOT8oeSs9TCo9bT8xOi0xLHYtPUwpOihTPTAseT12PShkK3ApLzIpfXZhciBQPWgqRTkoeSksTj1oKkE5KHkpLEk9dSpFOSh4KSxPPXUqQTkoeCk7aWYoVD5MOSl7dmFyIFI9aCpFOSh2KSx6PWgqQTkodiksRD11KkU5KGIpLEI9dSpBOShiKTtpZihmPFA5KXt2YXIgSD13Pkw5P1Y5KFAsTixELEIsUix6LEksTyk6W0ksT10sRj1QLUhbMF0sVj1OLUhbMV0sVT1SLUhbMF0saj16LUhbMV0sRz0xL0E5KE85KChGKlUrVipqKS8oazkoRipGK1YqVikqazkoVSpVK2oqaikpKS8yKSxXPWs5KEhbMF0qSFswXStIWzFdKkhbMV0pO0M9QzkoVCwodS1XKS8oRy0xKSksQT1DOShULChoLVcpLyhHKzEpKX19Uz5MOT9BPkw5PyhnPVU5KEQsQixQLE4saCxBLG0pLF89VTkoUix6LEksTyxoLEEsbSkscy5tb3ZlVG8oZy5jeCtnLngwMSxnLmN5K2cueTAxKSxBPFQ/cy5hcmMoZy5jeCxnLmN5LEEsTTkoZy55MDEsZy54MDEpLE05KF8ueTAxLF8ueDAxKSwhbSk6KHMuYXJjKGcuY3gsZy5jeSxBLE05KGcueTAxLGcueDAxKSxNOShnLnkxMSxnLngxMSksIW0pLHMuYXJjKDAsMCxoLE05KGcuY3krZy55MTEsZy5jeCtnLngxMSksTTkoXy5jeStfLnkxMSxfLmN4K18ueDExKSwhbSkscy5hcmMoXy5jeCxfLmN5LEEsTTkoXy55MTEsXy54MTEpLE05KF8ueTAxLF8ueDAxKSwhbSkpKToocy5tb3ZlVG8oUCxOKSxzLmFyYygwLDAsaCx5LHYsIW0pKTpzLm1vdmVUbyhQLE4pLHU+TDkmJnc+TDk/Qz5MOT8oZz1VOShJLE8sUix6LHUsLUMsbSksXz1VOShQLE4sRCxCLHUsLUMsbSkscy5saW5lVG8oZy5jeCtnLngwMSxnLmN5K2cueTAxKSxDPFQ/cy5hcmMoZy5jeCxnLmN5LEMsTTkoZy55MDEsZy54MDEpLE05KF8ueTAxLF8ueDAxKSwhbSk6KHMuYXJjKGcuY3gsZy5jeSxDLE05KGcueTAxLGcueDAxKSxNOShnLnkxMSxnLngxMSksIW0pLHMuYXJjKDAsMCx1LE05KGcuY3krZy55MTEsZy5jeCtnLngxMSksTTkoXy5jeStfLnkxMSxfLmN4K18ueDExKSxtKSxzLmFyYyhfLmN4LF8uY3ksQyxNOShfLnkxMSxfLngxMSksTTkoXy55MDEsXy54MDEpLCFtKSkpOnMuYXJjKDAsMCx1LHgsYixtKTpzLmxpbmVUbyhJLE8pfWVsc2Ugcy5tb3ZlVG8oMCwwKTtpZihzLmNsb3NlUGF0aCgpLGwpcmV0dXJuIHM9bnVsbCxsKyIifHxudWxsfXJldHVybiBsLmNlbnRyb2lkPWZ1bmN0aW9uKCl7dmFyIG49KCt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK2UuYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLGk9KCtyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK28uYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLVA5LzI7cmV0dXJuW0U5KGkpKm4sQTkoaSkqbl19LGwuaW5uZXJSYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTp3OSgrZSksbCk6dH0sbC5vdXRlclJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90Onc5KCt0KSxsKTplfSxsLmNvcm5lclJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90Onc5KCt0KSxsKTpufSxsLnBhZFJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1udWxsPT10P251bGw6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp3OSgrdCksbCk6aX0sbC5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6dzkoK3QpLGwpOnJ9LGwuZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp3OSgrdCksbCk6b30sbC5wYWRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgdD90Onc5KCt0KSxsKTphfSxsLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9bnVsbD09dD9udWxsOnQsbCk6c30sbH0sYXJlYTpYOSxsaW5lOlk5LHBpZTpmdW5jdGlvbiByZnQoKXt2YXIgdD1LOSxlPSQ5LG49bnVsbCxpPXc5KDApLHI9dzkoSTkpLG89dzkoMCk7ZnVuY3Rpb24gYShhKXt2YXIgcyxsLGMsdSxoLGQ9YS5sZW5ndGgscD0wLGY9bmV3IEFycmF5KGQpLG09bmV3IEFycmF5KGQpLGc9K2kuYXBwbHkodGhpcyxhcmd1bWVudHMpLF89TWF0aC5taW4oSTksTWF0aC5tYXgoLUk5LHIuYXBwbHkodGhpcyxhcmd1bWVudHMpLWcpKSx5PU1hdGgubWluKE1hdGguYWJzKF8pL2Qsby5hcHBseSh0aGlzLGFyZ3VtZW50cykpLHY9eSooXzwwPy0xOjEpO2ZvcihzPTA7czxkOysrcykoaD1tW2Zbc109c109K3QoYVtzXSxzLGEpKT4wJiYocCs9aCk7Zm9yKG51bGwhPWU/Zi5zb3J0KChmdW5jdGlvbih0LG4pe3JldHVybiBlKG1bdF0sbVtuXSl9KSk6bnVsbCE9biYmZi5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiBuKGFbdF0sYVtlXSl9KSkscz0wLGM9cD8oXy1kKnYpL3A6MDtzPGQ7KytzLGc9dSltW2w9ZltzXV09e2RhdGE6YVtsXSxpbmRleDpzLHZhbHVlOmg9bVtsXSxzdGFydEFuZ2xlOmcsZW5kQW5nbGU6dT1nKyhoPjA/aCpjOjApK3YscGFkQW5nbGU6eX07cmV0dXJuIG19cmV0dXJuIGEudmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTp3OSgrZSksYSk6dH0sYS5zb3J0VmFsdWVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsbj1udWxsLGEpOmV9LGEuc29ydD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LGU9bnVsbCxhKTpufSxhLnN0YXJ0QW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp3OSgrdCksYSk6aX0sYS5lbmRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90Onc5KCt0KSxhKTpyfSxhLnBhZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6dzkoK3QpLGEpOm99LGF9LGFyZWFSYWRpYWw6bjgscmFkaWFsQXJlYTpuOCxsaW5lUmFkaWFsOmU4LHJhZGlhbExpbmU6ZTgscG9pbnRSYWRpYWw6aTgsbGlua0hvcml6b250YWw6ZnVuY3Rpb24gb2Z0KCl7cmV0dXJuIHM4KGw4KX0sbGlua1ZlcnRpY2FsOmZ1bmN0aW9uIGFmdCgpe3JldHVybiBzOChjOCl9LGxpbmtSYWRpYWw6ZnVuY3Rpb24gc2Z0KCl7dmFyIHQ9czgodTgpO3JldHVybiB0LmFuZ2xlPXQueCxkZWxldGUgdC54LHQucmFkaXVzPXQueSxkZWxldGUgdC55LHR9LHN5bWJvbDpmdW5jdGlvbiBsZnQoKXt2YXIgdD13OShoOCksZT13OSg2NCksbj1udWxsO2Z1bmN0aW9uIGkoKXt2YXIgaTtpZihufHwobj1pPXg5KCkpLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpLmRyYXcobiwrZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLGkpcmV0dXJuIG49bnVsbCxpKyIifHxudWxsfXJldHVybiBpLnR5cGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTp3OShlKSxpKTp0fSxpLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp3OSgrdCksaSk6ZX0saS5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW51bGw9PXQ/bnVsbDp0LGkpOm59LGl9LHN5bWJvbHM6QTgsc3ltYm9sQ2lyY2xlOmg4LHN5bWJvbENyb3NzOmQ4LHN5bWJvbERpYW1vbmQ6bTgsc3ltYm9sU3F1YXJlOmI4LHN5bWJvbFN0YXI6djgsc3ltYm9sVHJpYW5nbGU6dzgsc3ltYm9sV3llOkM4LGN1cnZlQmFzaXNDbG9zZWQ6ZnVuY3Rpb24gY2Z0KHQpe3JldHVybiBuZXcgTjgodCl9LGN1cnZlQmFzaXNPcGVuOmZ1bmN0aW9uIHVmdCh0KXtyZXR1cm4gbmV3IEk4KHQpfSxjdXJ2ZUJhc2lzOmZ1bmN0aW9uIGhmdCh0KXtyZXR1cm4gbmV3IFA4KHQpfSxjdXJ2ZUJ1bmRsZTpSOCxjdXJ2ZUNhcmRpbmFsQ2xvc2VkOkY4LGN1cnZlQ2FyZGluYWxPcGVuOlU4LGN1cnZlQ2FyZGluYWw6QjgsY3VydmVDYXRtdWxsUm9tQ2xvc2VkOlk4LGN1cnZlQ2F0bXVsbFJvbU9wZW46JDgsY3VydmVDYXRtdWxsUm9tOlc4LGN1cnZlTGluZWFyQ2xvc2VkOmZ1bmN0aW9uIGRmdCh0KXtyZXR1cm4gbmV3IEs4KHQpfSxjdXJ2ZUxpbmVhcjpHOSxjdXJ2ZU1vbm90b25lWDpmdW5jdGlvbiBwZnQodCl7cmV0dXJuIG5ldyBlNyh0KX0sY3VydmVNb25vdG9uZVk6ZnVuY3Rpb24gZmZ0KHQpe3JldHVybiBuZXcgbjcodCl9LGN1cnZlTmF0dXJhbDpmdW5jdGlvbiBtZnQodCl7cmV0dXJuIG5ldyByNyh0KX0sY3VydmVTdGVwOmZ1bmN0aW9uIGdmdCh0KXtyZXR1cm4gbmV3IGE3KHQsLjUpfSxjdXJ2ZVN0ZXBBZnRlcjpmdW5jdGlvbiBfZnQodCl7cmV0dXJuIG5ldyBhNyh0LDEpfSxjdXJ2ZVN0ZXBCZWZvcmU6ZnVuY3Rpb24geWZ0KHQpe3JldHVybiBuZXcgYTcodCwwKX0sc3RhY2s6ZnVuY3Rpb24gdmZ0KCl7dmFyIHQ9dzkoW10pLGU9bDcsbj1zNyxpPWM3O2Z1bmN0aW9uIHIocil7dmFyIG8sYSxzPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLGw9ci5sZW5ndGgsYz1zLmxlbmd0aCx1PW5ldyBBcnJheShjKTtmb3Iobz0wO288YzsrK28pe2Zvcih2YXIgaCxkPXNbb10scD11W29dPW5ldyBBcnJheShsKSxmPTA7ZjxsOysrZilwW2ZdPWg9WzAsK2kocltmXSxkLGYscildLGguZGF0YT1yW2ZdO3Aua2V5PWR9Zm9yKG89MCxhPWUodSk7bzxjOysrbyl1W2Fbb11dLmluZGV4PW87cmV0dXJuIG4odSxhKSx1fXJldHVybiByLmtleXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTp3OShyOC5jYWxsKGUpKSxyKTp0fSxyLnZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6dzkoK3QpLHIpOml9LHIub3JkZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bnVsbD09dD9sNzoiZnVuY3Rpb24iPT10eXBlb2YgdD90Onc5KHI4LmNhbGwodCkpLHIpOmV9LHIub2Zmc2V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW51bGw9PXQ/czc6dCxyKTpufSxyfSxzdGFja09mZnNldEV4cGFuZDpmdW5jdGlvbiBiZnQodCxlKXtpZigoaT10Lmxlbmd0aCk+MCl7Zm9yKHZhciBuLGkscixvPTAsYT10WzBdLmxlbmd0aDtvPGE7KytvKXtmb3Iocj1uPTA7bjxpOysrbilyKz10W25dW29dWzFdfHwwO2lmKHIpZm9yKG49MDtuPGk7KytuKXRbbl1bb11bMV0vPXJ9czcodCxlKX19LHN0YWNrT2Zmc2V0RGl2ZXJnaW5nOmZ1bmN0aW9uIHhmdCh0LGUpe2lmKChzPXQubGVuZ3RoKT4xKWZvcih2YXIgbixpLHIsbyxhLHMsbD0wLGM9dFtlWzBdXS5sZW5ndGg7bDxjOysrbClmb3Iobz1hPTAsbj0wO248czsrK24pKHI9KGk9dFtlW25dXVtsXSlbMV0taVswXSk+PTA/KGlbMF09byxpWzFdPW8rPXIpOnI8MD8oaVsxXT1hLGlbMF09YSs9cik6aVswXT1vfSxzdGFja09mZnNldE5vbmU6czcsc3RhY2tPZmZzZXRTaWxob3VldHRlOmZ1bmN0aW9uIHdmdCh0LGUpe2lmKChuPXQubGVuZ3RoKT4wKXtmb3IodmFyIG4saT0wLHI9dFtlWzBdXSxvPXIubGVuZ3RoO2k8bzsrK2kpe2Zvcih2YXIgYT0wLHM9MDthPG47KythKXMrPXRbYV1baV1bMV18fDA7cltpXVsxXSs9cltpXVswXT0tcy8yfXM3KHQsZSl9fSxzdGFja09mZnNldFdpZ2dsZTpmdW5jdGlvbiBTZnQodCxlKXtpZigocj10Lmxlbmd0aCk+MCYmKGk9KG49dFtlWzBdXSkubGVuZ3RoKT4wKXtmb3IodmFyIG4saSxyLG89MCxhPTE7YTxpOysrYSl7Zm9yKHZhciBzPTAsbD0wLGM9MDtzPHI7KytzKXtmb3IodmFyIHU9dFtlW3NdXSxoPXVbYV1bMV18fDAsZD0oaC0odVthLTFdWzFdfHwwKSkvMixwPTA7cDxzOysrcCl7dmFyIGY9dFtlW3BdXTtkKz0oZlthXVsxXXx8MCktKGZbYS0xXVsxXXx8MCl9bCs9aCxjKz1kKmh9blthLTFdWzFdKz1uW2EtMV1bMF09byxsJiYoby09Yy9sKX1uW2EtMV1bMV0rPW5bYS0xXVswXT1vLHM3KHQsZSl9fSxzdGFja09yZGVyQXNjZW5kaW5nOnU3LHN0YWNrT3JkZXJEZXNjZW5kaW5nOmZ1bmN0aW9uIE1mdCh0KXtyZXR1cm4gdTcodCkucmV2ZXJzZSgpfSxzdGFja09yZGVySW5zaWRlT3V0OmZ1bmN0aW9uIEVmdCh0KXt2YXIgZSxuLGk9dC5sZW5ndGgscj10Lm1hcChoNyksbz1sNyh0KS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiByW2VdLXJbdF19KSksYT0wLHM9MCxsPVtdLGM9W107Zm9yKGU9MDtlPGk7KytlKW49b1tlXSxhPHM/KGErPXJbbl0sbC5wdXNoKG4pKToocys9cltuXSxjLnB1c2gobikpO3JldHVybiBjLnJldmVyc2UoKS5jb25jYXQobCl9LHN0YWNrT3JkZXJOb25lOmw3LHN0YWNrT3JkZXJSZXZlcnNlOmZ1bmN0aW9uIFRmdCh0KXtyZXR1cm4gbDcodCkucmV2ZXJzZSgpfSx0aW1lSW50ZXJ2YWw6ZjcsdGltZU1pbGxpc2Vjb25kOm03LHRpbWVNaWxsaXNlY29uZHM6ZzcsdXRjTWlsbGlzZWNvbmQ6bTcsdXRjTWlsbGlzZWNvbmRzOmc3LHRpbWVTZWNvbmQ6dzcsdGltZVNlY29uZHM6UzcsdXRjU2Vjb25kOnc3LHV0Y1NlY29uZHM6UzcsdGltZU1pbnV0ZTpNNyx0aW1lTWludXRlczpFNyx0aW1lSG91cjpUNyx0aW1lSG91cnM6QzcsdGltZURheTpBNyx0aW1lRGF5czprNyx0aW1lV2VlazpQNyx0aW1lV2Vla3M6QjcsdGltZVN1bmRheTpQNyx0aW1lU3VuZGF5czpCNyx0aW1lTW9uZGF5Ok43LHRpbWVNb25kYXlzOkg3LHRpbWVUdWVzZGF5Okk3LHRpbWVUdWVzZGF5czpGNyx0aW1lV2VkbmVzZGF5Ok83LHRpbWVXZWRuZXNkYXlzOlY3LHRpbWVUaHVyc2RheTpSNyx0aW1lVGh1cnNkYXlzOlU3LHRpbWVGcmlkYXk6ejcsdGltZUZyaWRheXM6ajcsdGltZVNhdHVyZGF5OkQ3LHRpbWVTYXR1cmRheXM6RzcsdGltZU1vbnRoOlc3LHRpbWVNb250aHM6cTcsdGltZVllYXI6WTcsdGltZVllYXJzOlg3LHV0Y01pbnV0ZTokNyx1dGNNaW51dGVzOks3LHV0Y0hvdXI6WjcsdXRjSG91cnM6SjcsdXRjRGF5OlE3LHV0Y0RheXM6dHR0LHV0Y1dlZWs6bnR0LHV0Y1dlZWtzOmN0dCx1dGNTdW5kYXk6bnR0LHV0Y1N1bmRheXM6Y3R0LHV0Y01vbmRheTppdHQsdXRjTW9uZGF5czp1dHQsdXRjVHVlc2RheTpydHQsdXRjVHVlc2RheXM6aHR0LHV0Y1dlZG5lc2RheTpvdHQsdXRjV2VkbmVzZGF5czpkdHQsdXRjVGh1cnNkYXk6YXR0LHV0Y1RodXJzZGF5czpwdHQsdXRjRnJpZGF5OnN0dCx1dGNGcmlkYXlzOmZ0dCx1dGNTYXR1cmRheTpsdHQsdXRjU2F0dXJkYXlzOm10dCx1dGNNb250aDpndHQsdXRjTW9udGhzOl90dCx1dGNZZWFyOnl0dCx1dGNZZWFyczp2dHQsdGltZUZvcm1hdERlZmF1bHRMb2NhbGU6cm50LGdldCB0aW1lRm9ybWF0KCl7cmV0dXJuIFV0dH0sZ2V0IHRpbWVQYXJzZSgpe3JldHVybiBqdHR9LGdldCB1dGNGb3JtYXQoKXtyZXR1cm4gR3R0fSxnZXQgdXRjUGFyc2UoKXtyZXR1cm4gV3R0fSx0aW1lRm9ybWF0TG9jYWxlOkZ0dCxpc29Gb3JtYXQ6bG50LGlzb1BhcnNlOnVudCxub3c6Ym50LHRpbWVyOlNudCx0aW1lckZsdXNoOk1udCx0aW1lb3V0OmZ1bmN0aW9uIENmdCh0LGUsbil7dmFyIGk9bmV3IHdudDtyZXR1cm4gaS5yZXN0YXJ0KChmdW5jdGlvbihuKXtpLnN0b3AoKSx0KG4rZSl9KSxlPW51bGw9PWU/MDorZSxuKSxpfSxpbnRlcnZhbDpmdW5jdGlvbiBBZnQodCxlLG4pe3ZhciBpPW5ldyB3bnQscj1lO3JldHVybiBudWxsPT1lPyhpLnJlc3RhcnQodCxlLG4pLGkpOihlPStlLG49bnVsbD09bj9ibnQoKTorbixpLnJlc3RhcnQoKGZ1bmN0aW9uIG8oYSl7YSs9cixpLnJlc3RhcnQobyxyKz1lLG4pLHQoYSl9KSxlLG4pLGkpfSx0cmFuc2l0aW9uOnVhdCxhY3RpdmU6ZnVuY3Rpb24ga2Z0KHQsZSl7dmFyIG4saSxyPXQuX190cmFuc2l0aW9uO2lmKHIpZm9yKGkgaW4gZT1udWxsPT1lP251bGw6ZSsiIixyKWlmKChuPXJbaV0pLnN0YXRlPjEmJm4ubmFtZT09PWUpcmV0dXJuIG5ldyBjYXQoW1t0XV0sT2F0LGUsK2kpO3JldHVybiBudWxsfSxpbnRlcnJ1cHQ6anJ0LHZvcm9ub2k6ZnVuY3Rpb24gTGZ0KCl7dmFyIHQ9emF0LGU9RGF0LG49bnVsbDtmdW5jdGlvbiBpKGkpe3JldHVybiBuZXcgeXN0KGkubWFwKChmdW5jdGlvbihuLHIpe3ZhciBvPVtNYXRoLnJvdW5kKHQobixyLGkpL2ZzdCkqZnN0LE1hdGgucm91bmQoZShuLHIsaSkvZnN0KSpmc3RdO3JldHVybiBvLmluZGV4PXIsby5kYXRhPW4sb30pKSxuKX1yZXR1cm4gaS5wb2x5Z29ucz1mdW5jdGlvbih0KXtyZXR1cm4gaSh0KS5wb2x5Z29ucygpfSxpLmxpbmtzPWZ1bmN0aW9uKHQpe3JldHVybiBpKHQpLmxpbmtzKCl9LGkudHJpYW5nbGVzPWZ1bmN0aW9uKHQpe3JldHVybiBpKHQpLnRyaWFuZ2xlcygpfSxpLng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpSYXQoK2UpLGkpOnR9LGkueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlJhdCgrdCksaSk6ZX0saS5leHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49bnVsbD09dD9udWxsOltbK3RbMF1bMF0sK3RbMF1bMV1dLFsrdFsxXVswXSwrdFsxXVsxXV1dLGkpOm4mJltbblswXVswXSxuWzBdWzFdXSxbblsxXVswXSxuWzFdWzFdXV19LGkuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1udWxsPT10P251bGw6W1swLDBdLFsrdFswXSwrdFsxXV1dLGkpOm4mJltuWzFdWzBdLW5bMF1bMF0sblsxXVsxXS1uWzBdWzFdXX0saX0sem9vbTpmdW5jdGlvbiBQZnQoKXt2YXIgdCxlLG49Wmh0LGk9Smh0LHI9bmR0LG89dGR0LGE9ZWR0LHM9WzAsMS8wXSxsPVtbLTEvMCwtMS8wXSxbMS8wLDEvMF1dLGM9MjUwLHU9dnV0LGg9W10sZD1ic3QoInN0YXJ0Iiwiem9vbSIsImVuZCIpLHA9NTAwLGY9MDtmdW5jdGlvbiBtKHQpe3QucHJvcGVydHkoIl9fem9vbSIsUWh0KS5vbigid2hlZWwuem9vbSIsdykub24oIm1vdXNlZG93bi56b29tIixTKS5vbigiZGJsY2xpY2suem9vbSIsTSkuZmlsdGVyKGEpLm9uKCJ0b3VjaHN0YXJ0Lnpvb20iLEUpLm9uKCJ0b3VjaG1vdmUuem9vbSIsVCkub24oInRvdWNoZW5kLnpvb20gdG91Y2hjYW5jZWwuem9vbSIsQykuc3R5bGUoInRvdWNoLWFjdGlvbiIsIm5vbmUiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpfWZ1bmN0aW9uIGcodCxlKXtyZXR1cm4oZT1NYXRoLm1heChzWzBdLE1hdGgubWluKHNbMV0sZSkpKT09PXQuaz90Om5ldyBHaHQoZSx0LngsdC55KX1mdW5jdGlvbiBfKHQsZSxuKXt2YXIgaT1lWzBdLW5bMF0qdC5rLHI9ZVsxXS1uWzFdKnQuaztyZXR1cm4gaT09PXQueCYmcj09PXQueT90Om5ldyBHaHQodC5rLGkscil9ZnVuY3Rpb24geSh0KXtyZXR1cm5bKCt0WzBdWzBdKyArdFsxXVswXSkvMiwoK3RbMF1bMV0rICt0WzFdWzFdKS8yXX1mdW5jdGlvbiB2KHQsZSxuKXt0Lm9uKCJzdGFydC56b29tIiwoZnVuY3Rpb24oKXtiKHRoaXMsYXJndW1lbnRzKS5zdGFydCgpfSkpLm9uKCJpbnRlcnJ1cHQuem9vbSBlbmQuem9vbSIsKGZ1bmN0aW9uKCl7Yih0aGlzLGFyZ3VtZW50cykuZW5kKCl9KSkudHdlZW4oInpvb20iLChmdW5jdGlvbigpe3ZhciB0PXRoaXMscj1hcmd1bWVudHMsbz1iKHQsciksYT1pLmFwcGx5KHQscikscz1ufHx5KGEpLGw9TWF0aC5tYXgoYVsxXVswXS1hWzBdWzBdLGFbMV1bMV0tYVswXVsxXSksYz10Ll9fem9vbSxoPSJmdW5jdGlvbiI9PXR5cGVvZiBlP2UuYXBwbHkodCxyKTplLGQ9dShjLmludmVydChzKS5jb25jYXQobC9jLmspLGguaW52ZXJ0KHMpLmNvbmNhdChsL2guaykpO3JldHVybiBmdW5jdGlvbih0KXtpZigxPT09dCl0PWg7ZWxzZXt2YXIgZT1kKHQpLG49bC9lWzJdO3Q9bmV3IEdodChuLHNbMF0tZVswXSpuLHNbMV0tZVsxXSpuKX1vLnpvb20obnVsbCx0KX19KSl9ZnVuY3Rpb24gYih0LGUpe2Zvcih2YXIgbixpPTAscj1oLmxlbmd0aDtpPHI7KytpKWlmKChuPWhbaV0pLnRoYXQ9PT10KXJldHVybiBuO3JldHVybiBuZXcgeCh0LGUpfWZ1bmN0aW9uIHgodCxlKXt0aGlzLnRoYXQ9dCx0aGlzLmFyZ3M9ZSx0aGlzLmluZGV4PS0xLHRoaXMuYWN0aXZlPTAsdGhpcy5leHRlbnQ9aS5hcHBseSh0LGUpfWZ1bmN0aW9uIHcoKXtpZihuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIHQ9Yih0aGlzLGFyZ3VtZW50cyksZT10aGlzLl9fem9vbSxpPU1hdGgubWF4KHNbMF0sTWF0aC5taW4oc1sxXSxlLmsqTWF0aC5wb3coMixvLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkpKSxhPURsdCh0aGlzKTtpZih0LndoZWVsKXQubW91c2VbMF1bMF09PT1hWzBdJiZ0Lm1vdXNlWzBdWzFdPT09YVsxXXx8KHQubW91c2VbMV09ZS5pbnZlcnQodC5tb3VzZVswXT1hKSksY2xlYXJUaW1lb3V0KHQud2hlZWwpO2Vsc2V7aWYoZS5rPT09aSlyZXR1cm47dC5tb3VzZT1bYSxlLmludmVydChhKV0sR3V0KHRoaXMpLHQuc3RhcnQoKX1LaHQoKSx0LndoZWVsPXNldFRpbWVvdXQoYywxNTApLHQuem9vbSgibW91c2UiLHIoXyhnKGUsaSksdC5tb3VzZVswXSx0Lm1vdXNlWzFdKSx0LmV4dGVudCxsKSl9ZnVuY3Rpb24gYygpe3Qud2hlZWw9bnVsbCx0LmVuZCgpfX1mdW5jdGlvbiBTKCl7aWYoIWUmJm4uYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgdD1iKHRoaXMsYXJndW1lbnRzKSxpPU9sdCh3bHQudmlldykub24oIm1vdXNlbW92ZS56b29tIixjLCEwKS5vbigibW91c2V1cC56b29tIix1LCEwKSxvPURsdCh0aGlzKSxhPXdsdC5jbGllbnRYLHM9d2x0LmNsaWVudFk7Rmx0KHdsdC52aWV3KSwkaHQoKSx0Lm1vdXNlPVtvLHRoaXMuX196b29tLmludmVydChvKV0sR3V0KHRoaXMpLHQuc3RhcnQoKX1mdW5jdGlvbiBjKCl7aWYoS2h0KCksIXQubW92ZWQpe3ZhciBlPXdsdC5jbGllbnRYLWEsbj13bHQuY2xpZW50WS1zO3QubW92ZWQ9ZSplK24qbj5mfXQuem9vbSgibW91c2UiLHIoXyh0LnRoYXQuX196b29tLHQubW91c2VbMF09RGx0KHQudGhhdCksdC5tb3VzZVsxXSksdC5leHRlbnQsbCkpfWZ1bmN0aW9uIHUoKXtpLm9uKCJtb3VzZW1vdmUuem9vbSBtb3VzZXVwLnpvb20iLG51bGwpLFZsdCh3bHQudmlldyx0Lm1vdmVkKSxLaHQoKSx0LmVuZCgpfX1mdW5jdGlvbiBNKCl7aWYobi5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciB0PXRoaXMuX196b29tLGU9RGx0KHRoaXMpLG89dC5pbnZlcnQoZSksYT10LmsqKHdsdC5zaGlmdEtleT8uNToyKSxzPXIoXyhnKHQsYSksZSxvKSxpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxsKTtLaHQoKSxjPjA/T2x0KHRoaXMpLnRyYW5zaXRpb24oKS5kdXJhdGlvbihjKS5jYWxsKHYscyxlKTpPbHQodGhpcykuY2FsbChtLnRyYW5zZm9ybSxzKX19ZnVuY3Rpb24gRSgpe2lmKG4uYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgZSxpLHIsbyxhPWIodGhpcyxhcmd1bWVudHMpLHM9d2x0LmNoYW5nZWRUb3VjaGVzLGw9cy5sZW5ndGg7Zm9yKCRodCgpLGk9MDtpPGw7KytpKW89W289Qmx0KHRoaXMscywocj1zW2ldKS5pZGVudGlmaWVyKSx0aGlzLl9fem9vbS5pbnZlcnQobyksci5pZGVudGlmaWVyXSxhLnRvdWNoMD9hLnRvdWNoMXx8KGEudG91Y2gxPW8pOihhLnRvdWNoMD1vLGU9ITApO2lmKHQmJih0PWNsZWFyVGltZW91dCh0KSwhYS50b3VjaDEpKXJldHVybiBhLmVuZCgpLHZvaWQoKG89T2x0KHRoaXMpLm9uKCJkYmxjbGljay56b29tIikpJiZvLmFwcGx5KHRoaXMsYXJndW1lbnRzKSk7ZSYmKHQ9c2V0VGltZW91dCgoZnVuY3Rpb24oKXt0PW51bGx9KSxwKSxHdXQodGhpcyksYS5zdGFydCgpKX19ZnVuY3Rpb24gVCgpe3ZhciBlLG4saSxvLGE9Yih0aGlzLGFyZ3VtZW50cykscz13bHQuY2hhbmdlZFRvdWNoZXMsYz1zLmxlbmd0aDtmb3IoS2h0KCksdCYmKHQ9Y2xlYXJUaW1lb3V0KHQpKSxlPTA7ZTxjOysrZSlpPUJsdCh0aGlzLHMsKG49c1tlXSkuaWRlbnRpZmllciksYS50b3VjaDAmJmEudG91Y2gwWzJdPT09bi5pZGVudGlmaWVyP2EudG91Y2gwWzBdPWk6YS50b3VjaDEmJmEudG91Y2gxWzJdPT09bi5pZGVudGlmaWVyJiYoYS50b3VjaDFbMF09aSk7aWYobj1hLnRoYXQuX196b29tLGEudG91Y2gxKXt2YXIgdT1hLnRvdWNoMFswXSxoPWEudG91Y2gwWzFdLGQ9YS50b3VjaDFbMF0scD1hLnRvdWNoMVsxXSxmPShmPWRbMF0tdVswXSkqZisoZj1kWzFdLXVbMV0pKmYsbT0obT1wWzBdLWhbMF0pKm0rKG09cFsxXS1oWzFdKSptO249ZyhuLE1hdGguc3FydChmL20pKSxpPVsodVswXStkWzBdKS8yLCh1WzFdK2RbMV0pLzJdLG89WyhoWzBdK3BbMF0pLzIsKGhbMV0rcFsxXSkvMl19ZWxzZXtpZighYS50b3VjaDApcmV0dXJuO2k9YS50b3VjaDBbMF0sbz1hLnRvdWNoMFsxXX1hLnpvb20oInRvdWNoIixyKF8obixpLG8pLGEuZXh0ZW50LGwpKX1mdW5jdGlvbiBDKCl7dmFyIHQsbixpPWIodGhpcyxhcmd1bWVudHMpLHI9d2x0LmNoYW5nZWRUb3VjaGVzLG89ci5sZW5ndGg7Zm9yKCRodCgpLGUmJmNsZWFyVGltZW91dChlKSxlPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ZT1udWxsfSkscCksdD0wO3Q8bzsrK3Qpbj1yW3RdLGkudG91Y2gwJiZpLnRvdWNoMFsyXT09PW4uaWRlbnRpZmllcj9kZWxldGUgaS50b3VjaDA6aS50b3VjaDEmJmkudG91Y2gxWzJdPT09bi5pZGVudGlmaWVyJiZkZWxldGUgaS50b3VjaDE7aS50b3VjaDEmJiFpLnRvdWNoMCYmKGkudG91Y2gwPWkudG91Y2gxLGRlbGV0ZSBpLnRvdWNoMSksaS50b3VjaDA/aS50b3VjaDBbMV09dGhpcy5fX3pvb20uaW52ZXJ0KGkudG91Y2gwWzBdKTppLmVuZCgpfXJldHVybiBtLnRyYW5zZm9ybT1mdW5jdGlvbih0LGUpe3ZhciBuPXQuc2VsZWN0aW9uP3Quc2VsZWN0aW9uKCk6dDtuLnByb3BlcnR5KCJfX3pvb20iLFFodCksdCE9PW4/dih0LGUpOm4uaW50ZXJydXB0KCkuZWFjaCgoZnVuY3Rpb24oKXtiKHRoaXMsYXJndW1lbnRzKS5zdGFydCgpLnpvb20obnVsbCwiZnVuY3Rpb24iPT10eXBlb2YgZT9lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTplKS5lbmQoKX0pKX0sbS5zY2FsZUJ5PWZ1bmN0aW9uKHQsZSl7bS5zY2FsZVRvKHQsKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fX3pvb20uayxuPSJmdW5jdGlvbiI9PXR5cGVvZiBlP2UuYXBwbHkodGhpcyxhcmd1bWVudHMpOmU7cmV0dXJuIHQqbn0pKX0sbS5zY2FsZVRvPWZ1bmN0aW9uKHQsZSl7bS50cmFuc2Zvcm0odCwoZnVuY3Rpb24oKXt2YXIgdD1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxuPXRoaXMuX196b29tLG89eSh0KSxhPW4uaW52ZXJ0KG8pLHM9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6ZTtyZXR1cm4gcihfKGcobixzKSxvLGEpLHQsbCl9KSl9LG0udHJhbnNsYXRlQnk9ZnVuY3Rpb24odCxlLG4pe20udHJhbnNmb3JtKHQsKGZ1bmN0aW9uKCl7cmV0dXJuIHIodGhpcy5fX3pvb20udHJhbnNsYXRlKCJmdW5jdGlvbiI9PXR5cGVvZiBlP2UuYXBwbHkodGhpcyxhcmd1bWVudHMpOmUsImZ1bmN0aW9uIj09dHlwZW9mIG4/bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6biksaS5hcHBseSh0aGlzLGFyZ3VtZW50cyksbCl9KSl9LG0udHJhbnNsYXRlVG89ZnVuY3Rpb24odCxlLG4pe20udHJhbnNmb3JtKHQsKGZ1bmN0aW9uKCl7dmFyIHQ9aS5hcHBseSh0aGlzLGFyZ3VtZW50cyksbz10aGlzLl9fem9vbSxhPXkodCk7cmV0dXJuIHIoWWh0LnRyYW5zbGF0ZShhWzBdLGFbMV0pLnNjYWxlKG8uaykudHJhbnNsYXRlKCJmdW5jdGlvbiI9PXR5cGVvZiBlPy1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTotZSwiZnVuY3Rpb24iPT10eXBlb2Ygbj8tbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6LW4pLHQsbCl9KSl9LHgucHJvdG90eXBlPXtzdGFydDpmdW5jdGlvbigpe3JldHVybiAxPT0rK3RoaXMuYWN0aXZlJiYodGhpcy5pbmRleD1oLnB1c2godGhpcyktMSx0aGlzLmVtaXQoInN0YXJ0IikpLHRoaXN9LHpvb206ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5tb3VzZSYmIm1vdXNlIiE9PXQmJih0aGlzLm1vdXNlWzFdPWUuaW52ZXJ0KHRoaXMubW91c2VbMF0pKSx0aGlzLnRvdWNoMCYmInRvdWNoIiE9PXQmJih0aGlzLnRvdWNoMFsxXT1lLmludmVydCh0aGlzLnRvdWNoMFswXSkpLHRoaXMudG91Y2gxJiYidG91Y2giIT09dCYmKHRoaXMudG91Y2gxWzFdPWUuaW52ZXJ0KHRoaXMudG91Y2gxWzBdKSksdGhpcy50aGF0Ll9fem9vbT1lLHRoaXMuZW1pdCgiem9vbSIpLHRoaXN9LGVuZDpmdW5jdGlvbigpe3JldHVybiAwPT0tLXRoaXMuYWN0aXZlJiYoaC5zcGxpY2UodGhpcy5pbmRleCwxKSx0aGlzLmluZGV4PS0xLHRoaXMuZW1pdCgiZW5kIikpLHRoaXN9LGVtaXQ6ZnVuY3Rpb24odCl7IShmdW5jdGlvbiBlKHQsbixpLHIpe3ZhciBvPXdsdDt0LnNvdXJjZUV2ZW50PXdsdCx3bHQ9dDt0cnl7bi5hcHBseShpLHIpfWZpbmFsbHl7d2x0PW99fSkobmV3IGpodChtLHQsdGhpcy50aGF0Ll9fem9vbSksZC5hcHBseSxkLFt0LHRoaXMudGhhdCx0aGlzLmFyZ3NdKX19LG0ud2hlZWxEZWx0YT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlVodCgrdCksbSk6b30sbS5maWx0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpVaHQoISF0KSxtKTpufSxtLnRvdWNoYWJsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlVodCghIXQpLG0pOmF9LG0uZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6VWh0KFtbK3RbMF1bMF0sK3RbMF1bMV1dLFsrdFsxXVswXSwrdFsxXVsxXV1dKSxtKTppfSxtLnNjYWxlRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzWzBdPSt0WzBdLHNbMV09K3RbMV0sbSk6W3NbMF0sc1sxXV19LG0udHJhbnNsYXRlRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsWzBdWzBdPSt0WzBdWzBdLGxbMV1bMF09K3RbMV1bMF0sbFswXVsxXT0rdFswXVsxXSxsWzFdWzFdPSt0WzFdWzFdLG0pOltbbFswXVswXSxsWzBdWzFdXSxbbFsxXVswXSxsWzFdWzFdXV19LG0uY29uc3RyYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsbSk6cn0sbS5kdXJhdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0rdCxtKTpjfSxtLmludGVycG9sYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXQsbSk6dX0sbS5vbj1mdW5jdGlvbigpe3ZhciB0PWQub24uYXBwbHkoZCxhcmd1bWVudHMpO3JldHVybiB0PT09ZD9tOnR9LG0uY2xpY2tEaXN0YW5jZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0odD0rdCkqdCxtKTpNYXRoLnNxcnQoZil9LG19LHpvb21UcmFuc2Zvcm06WGh0LHpvb21JZGVudGl0eTpZaHR9KSk7YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICoKICAgICAqIEBmaWxlb3ZlcnZpZXcgbWFudWFsbHkgYWRkIGQzLXNlbGVjdGlvbi1tdWx0aSB0byBkMyBkZWZhdWx0IGJ1bmRsZS4gTW9zdCBvZiB0aGlzIGNvZGUgaXMKICAgICAqIGNvcGllZCBmcm9tIGQzLXNlbGVjdGlvbi1tdWx0aUAxLjAuMC4KICAgICAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZDMvZDMtc2VsZWN0aW9uLW11bHRpL2lzc3Vlcy8xMSBmb3Igd2h5IHdlIGhhdmUgdG8gZG8gdGhpcwogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1pZHQsaT1pZHQ7ZnVuY3Rpb24gcih0LGUpe3JldHVybiB0LmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksaT1uLnNlbGVjdCh0aGlzKTtmb3IodmFyIHIgaW4gdClpLmF0dHIocix0W3JdKX0pKX1mdW5jdGlvbiBvKHQsZSl7Zm9yKHZhciBuIGluIGUpdC5hdHRyKG4sZVtuXSk7cmV0dXJuIHR9ZnVuY3Rpb24gYSh0LGUsaSl7cmV0dXJuIHQuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxyPW4uc2VsZWN0KHRoaXMpO2Zvcih2YXIgbyBpbiB0KXIuc3R5bGUobyx0W29dLGkpfSkpfWZ1bmN0aW9uIHModCxlLG4pe2Zvcih2YXIgaSBpbiBlKXQuc3R5bGUoaSxlW2ldLG4pO3JldHVybiB0fWZ1bmN0aW9uIGwodCxlKXtyZXR1cm4gdC5lYWNoKChmdW5jdGlvbigpe3ZhciB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpLGk9bi5zZWxlY3QodGhpcyk7Zm9yKHZhciByIGluIHQpaS5wcm9wZXJ0eShyLHRbcl0pfSkpfWZ1bmN0aW9uIGModCxlKXtmb3IodmFyIG4gaW4gZSl0LnByb3BlcnR5KG4sZVtuXSk7cmV0dXJuIHR9ZnVuY3Rpb24gdSh0LGUpe3JldHVybiB0LmVhY2goKGZ1bmN0aW9uKCl7dmFyIGk9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cykscj1uLnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKHQpO2Zvcih2YXIgbyBpbiBpKXIuYXR0cihvLGlbb10pfSkpfWZ1bmN0aW9uIGgodCxlKXtmb3IodmFyIG4gaW4gZSl0LmF0dHIobixlW25dKTtyZXR1cm4gdH1mdW5jdGlvbiBkKHQsZSxpKXtyZXR1cm4gdC5lYWNoKChmdW5jdGlvbigpe3ZhciByPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpLG89bi5zZWxlY3QodGhpcykudHJhbnNpdGlvbih0KTtmb3IodmFyIGEgaW4gcilvLnN0eWxlKGEsclthXSxpKX0pKX1mdW5jdGlvbiBwKHQsZSxuKXtmb3IodmFyIGkgaW4gZSl0LnN0eWxlKGksZVtpXSxuKTtyZXR1cm4gdH1uLnNlbGVjdGlvbi5wcm90b3R5cGUuYXR0cnM9ZnVuY3Rpb24gZih0KXtyZXR1cm4oImZ1bmN0aW9uIj09dHlwZW9mIHQ/cjpvKSh0aGlzLHQpfSxuLnNlbGVjdGlvbi5wcm90b3R5cGUuc3R5bGVzPWZ1bmN0aW9uIG0odCxlKXtyZXR1cm4oImZ1bmN0aW9uIj09dHlwZW9mIHQ/YTpzKSh0aGlzLHQsbnVsbD09ZT8iIjplKX0sbi5zZWxlY3Rpb24ucHJvdG90eXBlLnByb3BlcnRpZXM9ZnVuY3Rpb24gZyh0KXtyZXR1cm4oImZ1bmN0aW9uIj09dHlwZW9mIHQ/bDpjKSh0aGlzLHQpfSxpLnRyYW5zaXRpb24ucHJvdG90eXBlLmF0dHJzPWZ1bmN0aW9uIF8odCl7cmV0dXJuKCJmdW5jdGlvbiI9PXR5cGVvZiB0P3U6aCkodGhpcyx0KX0saS50cmFuc2l0aW9uLnByb3RvdHlwZS5zdHlsZXM9ZnVuY3Rpb24geSh0LGUpe3JldHVybigiZnVuY3Rpb24iPT10eXBlb2YgdD9kOnApKHRoaXMsdCxudWxsPT1lPyIiOmUpfX0pKTt2YXIgTmZ0PWJlKChmdW5jdGlvbih0LGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLmNvZXJjZUV4dGVybmFsRDM9ZnVuY3Rpb24gbih0KXtpZihudWxsPT10LmF0dHJzKXtpZihudWxsPT10Lm5vZGVzKXt2YXIgZT1bXTtyZXR1cm4gdC5lYWNoKChmdW5jdGlvbigpe2UucHVzaCh0aGlzKX0pKSxpZHQuc2VsZWN0QWxsKGUpfXJldHVybiBpZHQuc2VsZWN0QWxsKHQubm9kZXMoKSl9cmV0dXJuIHR9fSkpLElmdD1iZSgoZnVuY3Rpb24odCxlKXsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUubWFrZUVudW09ZnVuY3Rpb24gbih0KXtyZXR1cm4gdC5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbZV09ZSx0fSkse30pfX0pKSxPZnQ9eGUoeW0pLFJmdD1iZSgoZnVuY3Rpb24odCxlKXsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPXtsaW5lYXI6T2Z0LmVhc2VMaW5lYXIscXVhZDpPZnQuZWFzZVF1YWQscXVhZEluOk9mdC5lYXNlUXVhZEluLHF1YWRPdXQ6T2Z0LmVhc2VRdWFkT3V0LHF1YWRJbk91dDpPZnQuZWFzZVF1YWRJbk91dCxjdWJpYzpPZnQuZWFzZUN1YmljLGN1YmljSW46T2Z0LmVhc2VDdWJpY0luLGN1YmljT3V0Ok9mdC5lYXNlQ3ViaWNPdXQsY3ViaWNJbk91dDpPZnQuZWFzZUN1YmljSW5PdXQscG9seTpPZnQuZWFzZVBvbHkscG9seUluOk9mdC5lYXNlUG9seUluLHBvbHlPdXQ6T2Z0LmVhc2VQb2x5T3V0LHBvbHlJbk91dDpPZnQuZWFzZVBvbHlJbk91dCxzaW46T2Z0LmVhc2VTaW4sc2luSW46T2Z0LmVhc2VTaW5JbixzaW5PdXQ6T2Z0LmVhc2VTaW5PdXQsc2luSW5PdXQ6T2Z0LmVhc2VTaW5Jbk91dCxleHA6T2Z0LmVhc2VFeHAsZXhwSW46T2Z0LmVhc2VFeHBJbixleHBPdXQ6T2Z0LmVhc2VFeHBPdXQsZXhwSW5PdXQ6T2Z0LmVhc2VFeHBJbk91dCxjaXJjbGU6T2Z0LmVhc2VDaXJjbGUsY2lyY2xlSW46T2Z0LmVhc2VDaXJjbGVJbixjaXJjbGVPdXQ6T2Z0LmVhc2VDaXJjbGVPdXQsY2lyY2xlSW5PdXQ6T2Z0LmVhc2VDaXJjbGVJbk91dCxib3VuY2U6T2Z0LmVhc2VCb3VuY2UsYm91bmNlSW46T2Z0LmVhc2VCb3VuY2VJbixib3VuY2VPdXQ6T2Z0LmVhc2VCb3VuY2VPdXQsYm91bmNlSW5PdXQ6T2Z0LmVhc2VCb3VuY2VJbk91dCxiYWNrOk9mdC5lYXNlQmFjayxiYWNrSW46T2Z0LmVhc2VCYWNrSW4sYmFja091dDpPZnQuZWFzZUJhY2tPdXQsYmFja0luT3V0Ok9mdC5lYXNlQmFja0luT3V0LGVsYXN0aWM6T2Z0LmVhc2VFbGFzdGljLGVsYXN0aWNJbjpPZnQuZWFzZUVsYXN0aWNJbixlbGFzdGljT3V0Ok9mdC5lYXNlRWxhc3RpY091dCxlbGFzdGljSW5PdXQ6T2Z0LmVhc2VFbGFzdGljSW5PdXR9O2UuRWFzZU5hbWU9SWZ0Lm1ha2VFbnVtKFsibGluZWFyIiwicXVhZCIsInF1YWRJbiIsInF1YWRPdXQiLCJxdWFkSW5PdXQiLCJjdWJpYyIsImN1YmljSW4iLCJjdWJpY091dCIsImN1YmljSW5PdXQiLCJwb2x5IiwicG9seUluIiwicG9seU91dCIsInBvbHlJbk91dCIsInNpbiIsInNpbkluIiwic2luT3V0Iiwic2luSW5PdXQiLCJleHAiLCJleHBJbiIsImV4cE91dCIsImV4cEluT3V0IiwiY2lyY2xlIiwiY2lyY2xlSW4iLCJjaXJjbGVPdXQiLCJjaXJjbGVJbk91dCIsImJvdW5jZSIsImJvdW5jZUluIiwiYm91bmNlT3V0IiwiYm91bmNlSW5PdXQiLCJiYWNrIiwiYmFja0luIiwiYmFja091dCIsImJhY2tJbk91dCIsImVsYXN0aWMiLCJlbGFzdGljSW4iLCJlbGFzdGljT3V0IiwiZWxhc3RpY0luT3V0Il0pO3ZhciBpPShmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLl9zdGFydERlbGF5PXQuX0RFRkFVTFRfU1RBUlRfREVMQVlfTUlMTElTRUNPTkRTLHRoaXMuX3N0ZXBEdXJhdGlvbj10Ll9ERUZBVUxUX1NURVBfRFVSQVRJT05fTUlMTElTRUNPTkRTLHRoaXMuX3N0ZXBEZWxheT10Ll9ERUZBVUxUX0lURVJBVElWRV9ERUxBWV9NSUxMSVNFQ09ORFMsdGhpcy5fbWF4VG90YWxEdXJhdGlvbj10Ll9ERUZBVUxUX01BWF9UT1RBTF9EVVJBVElPTl9NSUxMSVNFQ09ORFMsdGhpcy5fZWFzaW5nTW9kZT10Ll9ERUZBVUxUX0VBU0lOR19NT0RFfXJldHVybiB0LnByb3RvdHlwZS50b3RhbFRpbWU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZ2V0QWRqdXN0ZWRJdGVyYXRpdmVEZWxheSh0KTtyZXR1cm4gdGhpcy5zdGFydERlbGF5KCkrZSpNYXRoLm1heCh0LTEsMCkrdGhpcy5zdGVwRHVyYXRpb24oKX0sdC5wcm90b3R5cGUuYW5pbWF0ZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMsaT0odD1OZnQuY29lcmNlRXh0ZXJuYWxEMyh0KSkuc2l6ZSgpLHI9dGhpcy5fZ2V0QWRqdXN0ZWRJdGVyYXRpdmVEZWxheShpKTtyZXR1cm4gdC50cmFuc2l0aW9uKCkuZWFzZSh0aGlzLl9nZXRFYXNlRmFjdG9yeSgpKS5kdXJhdGlvbih0aGlzLnN0ZXBEdXJhdGlvbigpKS5kZWxheSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gbi5zdGFydERlbGF5KCkrciplfSkpLmF0dHJzKGUpfSx0LnByb3RvdHlwZS5zdGFydERlbGF5PWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX3N0YXJ0RGVsYXk6KHRoaXMuX3N0YXJ0RGVsYXk9dCx0aGlzKX0sdC5wcm90b3R5cGUuc3RlcER1cmF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P01hdGgubWluKHRoaXMuX3N0ZXBEdXJhdGlvbix0aGlzLl9tYXhUb3RhbER1cmF0aW9uKToodGhpcy5fc3RlcER1cmF0aW9uPXQsdGhpcyl9LHQucHJvdG90eXBlLnN0ZXBEZWxheT1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9zdGVwRGVsYXk6KHRoaXMuX3N0ZXBEZWxheT10LHRoaXMpfSx0LnByb3RvdHlwZS5tYXhUb3RhbER1cmF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX21heFRvdGFsRHVyYXRpb246KHRoaXMuX21heFRvdGFsRHVyYXRpb249dCx0aGlzKX0sdC5wcm90b3R5cGUuZWFzaW5nTW9kZT1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9lYXNpbmdNb2RlOih0aGlzLl9lYXNpbmdNb2RlPXQsdGhpcyl9LHQucHJvdG90eXBlLl9nZXRFYXNlRmFjdG9yeT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZWFzaW5nTW9kZSgpO2lmKCJzdHJpbmciPT10eXBlb2YgdCl7dmFyIGU9blt0XTtyZXR1cm4gbnVsbD09ZT9uLmxpbmVhcjplfXJldHVybiB0fSx0LnByb3RvdHlwZS5fZ2V0QWRqdXN0ZWRJdGVyYXRpdmVEZWxheT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLm1heFRvdGFsRHVyYXRpb24oKS10aGlzLnN0ZXBEdXJhdGlvbigpLG49KGU9TWF0aC5tYXgoZSwwKSkvTWF0aC5tYXgodC0xLDEpO3JldHVybiBNYXRoLm1pbih0aGlzLnN0ZXBEZWxheSgpLG4pfSx0Ll9ERUZBVUxUX1NUQVJUX0RFTEFZX01JTExJU0VDT05EUz0wLHQuX0RFRkFVTFRfU1RFUF9EVVJBVElPTl9NSUxMSVNFQ09ORFM9MzAwLHQuX0RFRkFVTFRfSVRFUkFUSVZFX0RFTEFZX01JTExJU0VDT05EUz0xNSx0Ll9ERUZBVUxUX01BWF9UT1RBTF9EVVJBVElPTl9NSUxMSVNFQ09ORFM9MS8wLHQuX0RFRkFVTFRfRUFTSU5HX01PREU9ImV4cE91dCIsdH0pKCk7ZS5FYXNpbmc9aX0pKSx6ZnQ9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS50b3RhbFRpbWU9ZnVuY3Rpb24odCl7cmV0dXJuIDB9LHQucHJvdG90eXBlLmFuaW1hdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4odD1OZnQuY29lcmNlRXh0ZXJuYWxEMyh0KSkuYXR0cnMoZSl9LHR9KSgpO2UuTnVsbD1ufSkpLERmdD14ZShZTyksQmZ0PWJlKChmdW5jdGlvbih0LGUpewovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksRGZ0Ll9fZXhwb3J0U3RhcihSZnQsZSksRGZ0Ll9fZXhwb3J0U3Rhcih6ZnQsZSl9KSksSGZ0PWJlKChmdW5jdGlvbih0LGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuY2FjaGU9e30sdGhpcy5jb21wdXRlPXR9cmV0dXJuIHQucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jYWNoZS5oYXNPd25Qcm9wZXJ0eSh0KXx8KHRoaXMuY2FjaGVbdF09dGhpcy5jb21wdXRlKHQpKSx0aGlzLmNhY2hlW3RdfSx0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNhY2hlPXt9LHRoaXN9LHR9KSgpO2UuQ2FjaGU9bn0pKSxGZnQ9YmUoKGZ1bmN0aW9uKHQsZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPShmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQuYXJyYXlFcT1mdW5jdGlvbih0LGUpe2lmKG51bGw9PXR8fG51bGw9PWUpcmV0dXJuIHQ9PT1lO2lmKHQubGVuZ3RoIT09ZS5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspaWYodFtuXSE9PWVbbl0pcmV0dXJuITE7cmV0dXJuITB9LHQub2JqRXE9ZnVuY3Rpb24oZSxuKXtpZihudWxsPT1lfHxudWxsPT1uKXJldHVybiBlPT09bjt2YXIgaT1PYmplY3Qua2V5cyhlKS5zb3J0KCkscj1PYmplY3Qua2V5cyhuKS5zb3J0KCksbz1pLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGVbdF19KSksYT1yLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIG5bdF19KSk7cmV0dXJuIHQuYXJyYXlFcShpLHIpJiZ0LmFycmF5RXEobyxhKX0sdC5zdHJpY3RFcT1mdW5jdGlvbih0LGUpe3JldHVybiB0PT09ZX0sdC5kZWZhdWx0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9W10sbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspZVtuLTFdPWFyZ3VtZW50c1tuXTtpZihudWxsPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjb252ZXJ0IHVuZGVmaW5lZCBvciBudWxsIHRvIG9iamVjdCIpO3ZhciBpPU9iamVjdCh0KTtyZXR1cm4gZS5mb3JFYWNoKChmdW5jdGlvbih0KXtpZihudWxsIT10KWZvcih2YXIgZSBpbiB0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGUpJiYoaVtlXT10W2VdKX0pKSxpfSx0fSkoKTtlLk1ldGhvZHM9bn0pKSxWZnQ9YmUoKGZ1bmN0aW9uKHQsZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPShmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQuY29tYmluZVdoaXRlc3BhY2U9ZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZSgvWyBcdF0rL2csIiAiKX0sdC5pc05vdEVtcHR5U3RyaW5nPWZ1bmN0aW9uKHQpe3JldHVybiB0JiYiIiE9PXQudHJpbSgpfSx0LnRyaW1TdGFydD1mdW5jdGlvbihlLG4pe2lmKCFlKXJldHVybiBlO3ZhciBpPWUuc3BsaXQoIiIpLHI9bj9mdW5jdGlvbihlKXtyZXR1cm4gZS5zcGxpdChuKS5zb21lKHQuaXNOb3RFbXB0eVN0cmluZyl9OnQuaXNOb3RFbXB0eVN0cmluZztyZXR1cm4gaS5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIodCtlKT90K2U6dH0pLCIiKX0sdC50cmltRW5kPWZ1bmN0aW9uKGUsbil7aWYoIWUpcmV0dXJuIGU7dmFyIGk9ZS5zcGxpdCgiIik7cmV0dXJuIGkucmV2ZXJzZSgpLChpPXQudHJpbVN0YXJ0KGkuam9pbigiIiksbikuc3BsaXQoIiIpKS5yZXZlcnNlKCksaS5qb2luKCIiKX0sdH0pKCk7ZS5TdHJpbmdNZXRob2RzPW59KSksVWZ0PWJlKChmdW5jdGlvbih0LGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5Xb3JkRGl2aWRlclJlZ0V4cD1uZXcgUmVnRXhwKCJcXFciKSx0aGlzLldoaXRlc3BhY2VSZWdFeHA9bmV3IFJlZ0V4cCgiXFxzIil9cmV0dXJuIHQucHJvdG90eXBlLnRva2VuaXplPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHQuc3BsaXQoIiIpLnJlZHVjZSgoZnVuY3Rpb24odCxuKXtyZXR1cm4gdC5zbGljZSgwLC0xKS5jb25jYXQoZS5zaG91bGRDcmVhdGVOZXdUb2tlbih0W3QubGVuZ3RoLTFdLG4pKX0pLFsiIl0pfSx0LnByb3RvdHlwZS5zaG91bGRDcmVhdGVOZXdUb2tlbj1mdW5jdGlvbih0LGUpe2lmKCF0KXJldHVybltlXTt2YXIgbj10W3QubGVuZ3RoLTFdO3JldHVybiB0aGlzLldoaXRlc3BhY2VSZWdFeHAudGVzdChuKSYmdGhpcy5XaGl0ZXNwYWNlUmVnRXhwLnRlc3QoZSk/W3QrZV06dGhpcy5XaGl0ZXNwYWNlUmVnRXhwLnRlc3Qobil8fHRoaXMuV2hpdGVzcGFjZVJlZ0V4cC50ZXN0KGUpP1t0LGVdOnRoaXMuV29yZERpdmlkZXJSZWdFeHAudGVzdChuKT9uPT09ZT9bdCtlXTpbdCxlXTpbdCtlXX0sdH0pKCk7ZS5Ub2tlbml6ZXI9bn0pKSxqZnQ9YmUoKGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gbih0KXtmb3IodmFyIG4gaW4gdCllLmhhc093blByb3BlcnR5KG4pfHwoZVtuXT10W25dKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksbihIZnQpLG4oRmZ0KSxuKFZmdCksbihVZnQpfSkpLEdmdD1iZSgoZnVuY3Rpb24odCxlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49e3RleHRSb3RhdGlvbjowLHRleHRTaGVhcjowLHhBbGlnbjoibGVmdCIseUFsaWduOiJ0b3AifSxpPShmdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuX21lYXN1cmVyPXQsdGhpcy5fcGVuRmFjdG9yeT1lLHRoaXMuX3dyYXBwZXI9bn1yZXR1cm4gdC5wcm90b3R5cGUubWVhc3VyZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX21lYXN1cmVyPXQsdGhpc30sdC5wcm90b3R5cGUud3JhcHBlcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fd3JhcHBlcj10LHRoaXN9LHQucHJvdG90eXBlLnBlbkZhY3Rvcnk9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BlbkZhY3Rvcnk9dCx0aGlzfSx0LnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihlLGkscixvLGEpe2lmKHZvaWQgMD09PW8mJihvPXt9KSxvPWpmdC5NZXRob2RzLmRlZmF1bHRzKHt9LG4sbyksLTE9PT10LlN1cHBvcnRlZFJvdGF0aW9uLmluZGV4T2Yoby50ZXh0Um90YXRpb24pKXRocm93IG5ldyBFcnJvcigidW5zdXBwb3J0ZWQgcm90YXRpb24gLSAiK28udGV4dFJvdGF0aW9uKyIuIFN1cHBvcnRlZCByb3RhdGlvbnMgYXJlICIrdC5TdXBwb3J0ZWRSb3RhdGlvbi5qb2luKCIsICIpKTtpZihudWxsIT1vLnRleHRTaGVhciYmby50ZXh0U2hlYXI8LTgwfHxvLnRleHRTaGVhcj44MCl0aHJvdyBuZXcgRXJyb3IoInVuc3VwcG9ydGVkIHNoZWFyIGFuZ2xlIC0gIitvLnRleHRTaGVhcisiLiBNdXN0IGJlIGJldHdlZW4gLTgwIGFuZCA4MCIpO3ZhciBzPU1hdGguYWJzKE1hdGguYWJzKG8udGV4dFJvdGF0aW9uKS05MCk+NDUsbD1zP2k6cixjPXM/cjppLHU9by50ZXh0U2hlYXIsaD11Kk1hdGguUEkvMTgwLGQ9dGhpcy5fbWVhc3VyZXIubWVhc3VyZSgpLmhlaWdodCxwPWQqTWF0aC50YW4oaCksZj1sL01hdGguY29zKGgpLU1hdGguYWJzKHApLG09YypNYXRoLmNvcyhoKSxnPWpmdC5TdHJpbmdNZXRob2RzLmNvbWJpbmVXaGl0ZXNwYWNlKGUpLF89KHRoaXMuX3dyYXBwZXI/dGhpcy5fd3JhcHBlci53cmFwKGcsdGhpcy5fbWVhc3VyZXIsZixtKS53cmFwcGVkVGV4dDpnKS5zcGxpdCgiXG4iKSx5PXQuWE9mZnNldEZhY3RvcltvLnhBbGlnbl0qZipNYXRoLnNpbihoKS10LllPZmZzZXRGYWN0b3Jbby55QWxpZ25dKihtLV8ubGVuZ3RoKmQpLHY9WzAsMF0sYj1vLnRleHRSb3RhdGlvbit1O3N3aXRjaChvLnRleHRSb3RhdGlvbil7Y2FzZSA5MDp2PVtpK3ksMF07YnJlYWs7Y2FzZS05MDp2PVsteSxyXTticmVhaztjYXNlIDE4MDp2PVtpLHIreV07YnJlYWs7ZGVmYXVsdDp2PVswLC15XX12YXIgeD10aGlzLl9wZW5GYWN0b3J5LmNyZWF0ZVBlbihlLHt0cmFuc2xhdGU6dixyb3RhdGU6Yn0sYSk7dGhpcy53cml0ZUxpbmVzKF8seCxmLGQscCxvLnhBbGlnbiksbnVsbCE9eC5kZXN0cm95JiZ4LmRlc3Ryb3koKX0sdC5wcm90b3R5cGUud3JpdGVMaW5lcz1mdW5jdGlvbih0LGUsbixpLHIsbyl7dC5mb3JFYWNoKChmdW5jdGlvbih0LGEpe2Uud3JpdGUodCxuLG8scj4wPyhhKzEpKnI6YSpyLChhKzEpKmkpfSkpfSx0fSkoKTtpLlhPZmZzZXRGYWN0b3I9e2NlbnRlcjouNSxsZWZ0OjAscmlnaHQ6MX0saS5ZT2Zmc2V0RmFjdG9yPXtib3R0b206MSxjZW50ZXI6LjUsdG9wOjB9LGkuU3VwcG9ydGVkUm90YXRpb249Wy05MCwwLDE4MCw5MF0sZS5Xcml0ZXI9aX0pKSxXZnQ9YmUoKGZ1bmN0aW9uKHQsZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLChmdW5jdGlvbiBuKHQpe2Zvcih2YXIgbiBpbiB0KWUuaGFzT3duUHJvcGVydHkobil8fChlW25dPXRbbl0pfSkoR2Z0KX0pKSxxZnQ9YmUoKGZ1bmN0aW9uKHQsZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPShmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQuYXBwZW5kPWZ1bmN0aW9uKGUsbil7Zm9yKHZhciBpPVtdLHI9MjtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKWlbci0yXT1hcmd1bWVudHNbcl07dmFyIG89dC5jcmVhdGUuYXBwbHkodCxbbl0uY29uY2F0KGkpKTtyZXR1cm4gZS5hcHBlbmRDaGlsZChvKSxvfSx0LmNyZWF0ZT1mdW5jdGlvbihlKXtmb3IodmFyIG49W10saT0xO2k8YXJndW1lbnRzLmxlbmd0aDtpKyspbltpLTFdPWFyZ3VtZW50c1tpXTt2YXIgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGUpO3JldHVybiB0LmFkZENsYXNzZXMuYXBwbHkodCxbcl0uY29uY2F0KG4pKSxyfSx0LmFkZENsYXNzZXM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbi0xXT1hcmd1bWVudHNbbl07ZT1lLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPXR9KSksbnVsbCE9dC5jbGFzc0xpc3Q/ZS5mb3JFYWNoKChmdW5jdGlvbihlKXt0LmNsYXNzTGlzdC5hZGQoZSl9KSk6dC5zZXRBdHRyaWJ1dGUoImNsYXNzIixlLmpvaW4oIiAiKSl9LHQuZ2V0RGltZW5zaW9ucz1mdW5jdGlvbih0KXtpZih0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCl0cnl7dmFyIGU9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57d2lkdGg6ZS53aWR0aCxoZWlnaHQ6ZS5oZWlnaHR9fWNhdGNoKHQpe31yZXR1cm57aGVpZ2h0OjAsd2lkdGg6MH19LHR9KSgpO2UuSHRtbFV0aWxzPW47dmFyIGk9KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsaSl7dm9pZCAwPT09aSYmKGk9ITEpO3ZhciByPXRoaXM7dGhpcy5lbGVtZW50PXQsdGhpcy5jbGFzc05hbWU9ZSx0aGlzLmFkZFRpdGxlPWksdGhpcy5jcmVhdGVSdWxlcj1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT1uLmFwcGVuZChyLmVsZW1lbnQsInNwYW4iLCJ0ZXh0LXRtcCIsci5jbGFzc05hbWUpO2UudGV4dENvbnRlbnQ9dDt2YXIgaT1uLmdldERpbWVuc2lvbnMoZSk7cmV0dXJuIHIuZWxlbWVudC5yZW1vdmVDaGlsZChlKSxpfX0sdGhpcy5jcmVhdGVQZW49ZnVuY3Rpb24odCxlLGkpe251bGw9PWkmJihpPXIuZWxlbWVudCk7dmFyIG89bi5hcHBlbmQoaSwiZGl2IiwidGV4dC1ibG9jayIsci5jbGFzc05hbWUpO3JldHVybiBvLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIsby5zdHlsZS50cmFuc2Zvcm09InRyYW5zbGF0ZSgwLCAtMWVtKSB0cmFuc2xhdGUoIitlLnRyYW5zbGF0ZVswXSsicHgsICIrZS50cmFuc2xhdGVbMV0rInB4KSByb3RhdGUoIitlLnJvdGF0ZSsiZGVnKSIsby5zdHlsZS50cmFuc2Zvcm1PcmlnaW49IjAgMS4yZW0iLHIuYWRkVGl0bGUmJm8uc2V0QXR0cmlidXRlKCJ0aXRsZSIsdCksci5jcmVhdGVIdG1sTGluZVBlbihvKX19cmV0dXJuIHQucHJvdG90eXBlLnNldEFkZFRpdGxlPWZ1bmN0aW9uKHQpe3RoaXMuYWRkVGl0bGU9dH0sdC5wcm90b3R5cGUuY3JlYXRlSHRtbExpbmVQZW49ZnVuY3Rpb24odCl7cmV0dXJue3dyaXRlOmZ1bmN0aW9uKGUsaSxyLG8sYSl7dmFyIHM9bi5hcHBlbmQodCwiZGl2IiwidGV4dC1saW5lIik7cy50ZXh0Q29udGVudD1lLHMuc3R5bGUud2lkdGg9aSsicHgiLHMuc3R5bGUudGV4dEFsaWduPXIscy5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHMuc3R5bGUud2hpdGVTcGFjZT0ibm93cmFwIixzLnN0eWxlLnRvcD1hKyJweCIscy5zdHlsZS5sZWZ0PW8rInB4In19fSx0fSkoKTtlLkh0bWxDb250ZXh0PWl9KSksWWZ0PWJlKChmdW5jdGlvbih0LGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LmFwcGVuZD1mdW5jdGlvbihlLG4pe2Zvcih2YXIgaT1bXSxyPTI7cjxhcmd1bWVudHMubGVuZ3RoO3IrKylpW3ItMl09YXJndW1lbnRzW3JdO3ZhciBvPXQuY3JlYXRlLmFwcGx5KHQsW25dLmNvbmNhdChpKSk7cmV0dXJuIGUuYXBwZW5kQ2hpbGQobyksb30sdC5jcmVhdGU9ZnVuY3Rpb24oZSl7Zm9yKHZhciBuPVtdLGk9MTtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKW5baS0xXT1hcmd1bWVudHNbaV07dmFyIHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHQuU1ZHX05TLGUpO3JldHVybiBxZnQuSHRtbFV0aWxzLmFkZENsYXNzZXMuYXBwbHkocWZ0Lkh0bWxVdGlscyxbcl0uY29uY2F0KG4pKSxyfSx0LmdldERpbWVuc2lvbnM9ZnVuY3Rpb24odCl7aWYodC5nZXRCQm94KXRyeXt2YXIgZT10LmdldEJCb3goKTtyZXR1cm57d2lkdGg6ZS53aWR0aCxoZWlnaHQ6ZS5oZWlnaHR9fWNhdGNoKHQpe31yZXR1cm57aGVpZ2h0OjAsd2lkdGg6MH19LHR9KSgpO24uU1ZHX05TPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsZS5TdmdVdGlscz1uO3ZhciBpPShmdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLGkpe3ZvaWQgMD09PWkmJihpPSExKTt2YXIgcj10aGlzO3RoaXMuZWxlbWVudD10LHRoaXMuY2xhc3NOYW1lPWUsdGhpcy5hZGRUaXRsZUVsZW1lbnQ9aSx0aGlzLmNyZWF0ZVJ1bGVyPWZ1bmN0aW9uKCl7dmFyIHQ9ci5nZXRUZXh0RWxlbWVudHMoci5lbGVtZW50KSxlPXQucGFyZW50RWxlbWVudCxpPXQuY29udGFpbmVyRWxlbWVudCxvPXQudGV4dEVsZW1lbnQ7cmV0dXJuIGZ1bmN0aW9uKHQpe2UuYXBwZW5kQ2hpbGQoaSksby50ZXh0Q29udGVudD10O3ZhciByPW4uZ2V0RGltZW5zaW9ucyhvKTtyZXR1cm4gZS5yZW1vdmVDaGlsZChpKSxyfX0sdGhpcy5jcmVhdGVQZW49ZnVuY3Rpb24odCxlLGkpe251bGw9PWkmJihpPXIuZWxlbWVudCk7dmFyIG89bi5hcHBlbmQoaSwiZyIsInRleHQtY29udGFpbmVyIixyLmNsYXNzTmFtZSk7ci5hZGRUaXRsZUVsZW1lbnQmJihuLmFwcGVuZChvLCJ0aXRsZSIpLnRleHRDb250ZW50PXQsby5zZXRBdHRyaWJ1dGUoInRpdGxlIix0KSk7dmFyIGE9bi5hcHBlbmQobywiZyIsInRleHQtYXJlYSIpO3JldHVybiBhLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrZS50cmFuc2xhdGVbMF0rIiwiK2UudHJhbnNsYXRlWzFdKyIpcm90YXRlKCIrZS5yb3RhdGUrIikiKSxyLmNyZWF0ZVN2Z0xpbmVQZW4oYSl9fXJldHVybiB0LnByb3RvdHlwZS5zZXRBZGRUaXRsZUVsZW1lbnQ9ZnVuY3Rpb24odCl7dGhpcy5hZGRUaXRsZUVsZW1lbnQ9dH0sdC5wcm90b3R5cGUuY3JlYXRlU3ZnTGluZVBlbj1mdW5jdGlvbihlKXtyZXR1cm57d3JpdGU6ZnVuY3Rpb24oaSxyLG8sYSxzKXthKz1yKldmdC5Xcml0ZXIuWE9mZnNldEZhY3RvcltvXTt2YXIgbD1uLmFwcGVuZChlLCJ0ZXh0IiwidGV4dC1saW5lIik7bC50ZXh0Q29udGVudD1pLGwuc2V0QXR0cmlidXRlKCJ0ZXh0LWFuY2hvciIsdC5BbmNob3JNYXBbb10pLGwuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIithKyIsIitzKyIpIiksbC5zZXRBdHRyaWJ1dGUoInkiLCItMC4yNWVtIil9fX0sdC5wcm90b3R5cGUuZ2V0VGV4dEVsZW1lbnRzPWZ1bmN0aW9uKHQpe2lmKCJ0ZXh0Ij09PXQudGFnTmFtZSlyZXR1cm4gbnVsbD09KGU9dC5wYXJlbnRFbGVtZW50KSYmKGU9dC5wYXJlbnROb2RlKSxlLnJlbW92ZUNoaWxkKHQpLHtjb250YWluZXJFbGVtZW50OnQscGFyZW50RWxlbWVudDplLHRleHRFbGVtZW50OnR9O3ZhciBlLGk9dC5xdWVyeVNlbGVjdG9yKCJ0ZXh0Iik7aWYobnVsbCE9aSlyZXR1cm4gbnVsbD09KGU9aS5wYXJlbnRFbGVtZW50KSYmKGU9aS5wYXJlbnROb2RlKSxlLnJlbW92ZUNoaWxkKGkpLHtjb250YWluZXJFbGVtZW50OmkscGFyZW50RWxlbWVudDplLHRleHRFbGVtZW50Oml9O3ZhciByPW4uY3JlYXRlKCJ0ZXh0Iix0aGlzLmNsYXNzTmFtZSk7cmV0dXJue2NvbnRhaW5lckVsZW1lbnQ6cixwYXJlbnRFbGVtZW50OnQsdGV4dEVsZW1lbnQ6cn19LHR9KSgpO2kuQW5jaG9yTWFwPXtjZW50ZXI6Im1pZGRsZSIsbGVmdDoic3RhcnQiLHJpZ2h0OiJlbmQifSxlLlN2Z0NvbnRleHQ9aX0pKSxYZnQ9YmUoKGZ1bmN0aW9uKHQsZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPShmdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3ZvaWQgMD09PWUmJihlPTEwKSx2b2lkIDA9PT1uJiYobj17fSk7dmFyIGk9dGhpczt0aGlzLmN0eD10LHRoaXMubGluZUhlaWdodD1lLHRoaXMuc3R5bGU9bix0aGlzLmNyZWF0ZVJ1bGVyPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBpLmN0eC5mb250PWkuc3R5bGUuZm9udCx7d2lkdGg6aS5jdHgubWVhc3VyZVRleHQodCkud2lkdGgsaGVpZ2h0OmkubGluZUhlaWdodH19fSx0aGlzLmNyZWF0ZVBlbj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIG51bGw9PW4mJihuPWkuY3R4KSxuLnNhdmUoKSxuLnRyYW5zbGF0ZShlLnRyYW5zbGF0ZVswXSxlLnRyYW5zbGF0ZVsxXSksbi5yb3RhdGUoZS5yb3RhdGUqTWF0aC5QSS8xODApLGkuY3JlYXRlQ2FudmFzUGVuKG4pfSx2b2lkIDA9PT10aGlzLnN0eWxlLmZpbGwmJih0aGlzLnN0eWxlLmZpbGw9IiM0NDQiKX1yZXR1cm4gdC5wcm90b3R5cGUuY3JlYXRlQ2FudmFzUGVuPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJue2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0LnJlc3RvcmUoKX0sd3JpdGU6ZnVuY3Rpb24obixpLHIsbyxhKXtvKz1pKldmdC5Xcml0ZXIuWE9mZnNldEZhY3RvcltyXSx0LnRleHRBbGlnbj1yLG51bGwhPWUuc3R5bGUuZm9udCYmKHQuZm9udD1lLnN0eWxlLmZvbnQpLG51bGwhPWUuc3R5bGUuZmlsbCYmKHQuZmlsbFN0eWxlPWUuc3R5bGUuZmlsbCx0LmZpbGxUZXh0KG4sbyxhKSksbnVsbCE9ZS5zdHlsZS5zdHJva2UmJih0LnN0cm9rZVN0eWxlPWUuc3R5bGUuZmlsbCx0LnN0cm9rZVRleHQobixvLGEpKX19fSx0fSkoKTtlLkNhbnZhc0NvbnRleHQ9bn0pKSwkZnQ9YmUoKGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gbih0KXtmb3IodmFyIG4gaW4gdCllLmhhc093blByb3BlcnR5KG4pfHwoZVtuXT10W25dKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksbihZZnQpLG4oWGZ0KSxuKHFmdCl9KSksS2Z0PWJlKChmdW5jdGlvbih0LGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMucnVsZXI9bnVsbCE9dC5jcmVhdGVSdWxlcj90LmNyZWF0ZVJ1bGVyKCk6dH1yZXR1cm4gdC5wcm90b3R5cGUubWVhc3VyZT1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9dC5IRUlHSFRfVEVYVCksdGhpcy5ydWxlcihlKX0sdH0pKCk7bi5IRUlHSFRfVEVYVD0iYmRwcWwiLGUuQWJzdHJhY3RNZWFzdXJlcj1ufSkpLFpmdD1iZSgoZnVuY3Rpb24odCxlKXt2YXIgbj12ZSYmdmUuX19leHRlbmRzfHwoZnVuY3Rpb24oKXt2YXIgdD1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24odCxlKXt0Ll9fcHJvdG9fXz1lfXx8ZnVuY3Rpb24odCxlKXtmb3IodmFyIG4gaW4gZSllLmhhc093blByb3BlcnR5KG4pJiYodFtuXT1lW25dKX07cmV0dXJuIGZ1bmN0aW9uKGUsbil7ZnVuY3Rpb24gaSgpe3RoaXMuY29uc3RydWN0b3I9ZX10KGUsbiksZS5wcm90b3R5cGU9bnVsbD09PW4/T2JqZWN0LmNyZWF0ZShuKTooaS5wcm90b3R5cGU9bi5wcm90b3R5cGUsbmV3IGkpfX0pKCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBpPShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dm9pZCAwPT09biYmKG49ITEpO3ZhciBpPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiBpLnVzZUd1YXJkcz1uLGl9cmV0dXJuIG4oZSx0KSxlLnByb3RvdHlwZS5fYWRkR3VhcmRzPWZ1bmN0aW9uKHQpe3JldHVybiBLZnQuQWJzdHJhY3RNZWFzdXJlci5IRUlHSFRfVEVYVCt0K0tmdC5BYnN0cmFjdE1lYXN1cmVyLkhFSUdIVF9URVhUfSxlLnByb3RvdHlwZS5fbWVhc3VyZUxpbmU9ZnVuY3Rpb24oZSxuKXt2b2lkIDA9PT1uJiYobj0hMSk7dmFyIGk9dGhpcy51c2VHdWFyZHN8fG58fC9eW1x0IF0kLy50ZXN0KGUpLHI9aT90aGlzLl9hZGRHdWFyZHMoZSk6ZSxvPXQucHJvdG90eXBlLm1lYXN1cmUuY2FsbCh0aGlzLHIpO3JldHVybiBvLndpZHRoLT1pPzIqdGhpcy5nZXRHdWFyZFdpZHRoKCk6MCxvfSxlLnByb3RvdHlwZS5tZWFzdXJlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYodm9pZCAwPT09dCYmKHQ9S2Z0LkFic3RyYWN0TWVhc3VyZXIuSEVJR0hUX1RFWFQpLCIiPT09dC50cmltKCkpcmV0dXJue3dpZHRoOjAsaGVpZ2h0OjB9O3ZhciBuPXQudHJpbSgpLnNwbGl0KCJcbiIpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGUuX21lYXN1cmVMaW5lKHQpfSkpO3JldHVybntoZWlnaHQ6bi5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZS5oZWlnaHR9KSwwKSx3aWR0aDpuLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5tYXgodCxlLndpZHRoKX0pLDApfX0sZS5wcm90b3R5cGUuZ2V0R3VhcmRXaWR0aD1mdW5jdGlvbigpe3JldHVybiBudWxsPT10aGlzLmd1YXJkV2lkdGgmJih0aGlzLmd1YXJkV2lkdGg9dC5wcm90b3R5cGUubWVhc3VyZS5jYWxsKHRoaXMpLndpZHRoKSx0aGlzLmd1YXJkV2lkdGh9LGV9KShLZnQuQWJzdHJhY3RNZWFzdXJlcik7ZS5NZWFzdXJlcj1pfSkpLEpmdD1iZSgoZnVuY3Rpb24odCxlKXt2YXIgbj12ZSYmdmUuX19leHRlbmRzfHwoZnVuY3Rpb24oKXt2YXIgdD1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24odCxlKXt0Ll9fcHJvdG9fXz1lfXx8ZnVuY3Rpb24odCxlKXtmb3IodmFyIG4gaW4gZSllLmhhc093blByb3BlcnR5KG4pJiYodFtuXT1lW25dKX07cmV0dXJuIGZ1bmN0aW9uKGUsbil7ZnVuY3Rpb24gaSgpe3RoaXMuY29uc3RydWN0b3I9ZX10KGUsbiksZS5wcm90b3R5cGU9bnVsbD09PW4/T2JqZWN0LmNyZWF0ZShuKTooaS5wcm90b3R5cGU9bi5wcm90b3R5cGUsbmV3IGkpfX0pKCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBpPShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gbihlLHQpLGUucHJvdG90eXBlLl9tZWFzdXJlQ2hhcmFjdGVyPWZ1bmN0aW9uKGUpe3JldHVybiB0LnByb3RvdHlwZS5fbWVhc3VyZUxpbmUuY2FsbCh0aGlzLGUpfSxlLnByb3RvdHlwZS5fbWVhc3VyZUxpbmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXQuc3BsaXQoIiIpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGUuX21lYXN1cmVDaGFyYWN0ZXIodCl9KSk7cmV0dXJue2hlaWdodDpuLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5tYXgodCxlLmhlaWdodCl9KSwwKSx3aWR0aDpuLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlLndpZHRofSksMCl9fSxlfSkoWmZ0Lk1lYXN1cmVyKTtlLkNoYXJhY3Rlck1lYXN1cmVyPWl9KSksUWZ0PWJlKChmdW5jdGlvbih0LGUpe3ZhciBuPXZlJiZ2ZS5fX2V4dGVuZHN8fChmdW5jdGlvbigpe3ZhciB0PU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbih0LGUpe3QuX19wcm90b19fPWV9fHxmdW5jdGlvbih0LGUpe2Zvcih2YXIgbiBpbiBlKWUuaGFzT3duUHJvcGVydHkobikmJih0W25dPWVbbl0pfTtyZXR1cm4gZnVuY3Rpb24oZSxuKXtmdW5jdGlvbiBpKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfXQoZSxuKSxlLnByb3RvdHlwZT1udWxsPT09bj9PYmplY3QuY3JlYXRlKG4pOihpLnByb3RvdHlwZT1uLnByb3RvdHlwZSxuZXcgaSl9fSkoKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGk9KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgaT10LmNhbGwodGhpcyxlLG4pfHx0aGlzO3JldHVybiBpLmNhY2hlPW5ldyBqZnQuQ2FjaGUoKGZ1bmN0aW9uKHQpe3JldHVybiBpLl9tZWFzdXJlQ2hhcmFjdGVyTm90RnJvbUNhY2hlKHQpfSkpLGl9cmV0dXJuIG4oZSx0KSxlLnByb3RvdHlwZS5fbWVhc3VyZUNoYXJhY3Rlck5vdEZyb21DYWNoZT1mdW5jdGlvbihlKXtyZXR1cm4gdC5wcm90b3R5cGUuX21lYXN1cmVDaGFyYWN0ZXIuY2FsbCh0aGlzLGUpfSxlLnByb3RvdHlwZS5fbWVhc3VyZUNoYXJhY3Rlcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jYWNoZS5nZXQodCl9LGUucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5jYWNoZS5jbGVhcigpfSxlfSkoSmZ0LkNoYXJhY3Rlck1lYXN1cmVyKTtlLkNhY2hlQ2hhcmFjdGVyTWVhc3VyZXI9aX0pKSx0bXQ9YmUoKGZ1bmN0aW9uKHQsZSl7dmFyIG49dmUmJnZlLl9fZXh0ZW5kc3x8KGZ1bmN0aW9uKCl7dmFyIHQ9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKHQsZSl7dC5fX3Byb3RvX189ZX18fGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShuKSYmKHRbbl09ZVtuXSl9O3JldHVybiBmdW5jdGlvbihlLG4pe2Z1bmN0aW9uIGkoKXt0aGlzLmNvbnN0cnVjdG9yPWV9dChlLG4pLGUucHJvdG90eXBlPW51bGw9PT1uP09iamVjdC5jcmVhdGUobik6KGkucHJvdG90eXBlPW4ucHJvdG90eXBlLG5ldyBpKX19KSgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgaT0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt2YXIgbj10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gbi5kaW1DYWNoZT1uZXcgamZ0LkNhY2hlKChmdW5jdGlvbih0KXtyZXR1cm4gbi5fbWVhc3VyZU5vdEZyb21DYWNoZSh0KX0pKSxufXJldHVybiBuKGUsdCksZS5wcm90b3R5cGUuX21lYXN1cmVOb3RGcm9tQ2FjaGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHQucHJvdG90eXBlLm1lYXN1cmUuY2FsbCh0aGlzLGUpfSxlLnByb3RvdHlwZS5tZWFzdXJlPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD1LZnQuQWJzdHJhY3RNZWFzdXJlci5IRUlHSFRfVEVYVCksdGhpcy5kaW1DYWNoZS5nZXQodCl9LGUucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5kaW1DYWNoZS5jbGVhcigpLHQucHJvdG90eXBlLnJlc2V0LmNhbGwodGhpcyl9LGV9KShRZnQuQ2FjaGVDaGFyYWN0ZXJNZWFzdXJlcik7ZS5DYWNoZU1lYXN1cmVyPWl9KSksZW10PWJlKChmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIG4odCl7Zm9yKHZhciBuIGluIHQpZS5oYXNPd25Qcm9wZXJ0eShuKXx8KGVbbl09dFtuXSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLG4oS2Z0KSxuKFFmdCksbih0bXQpLG4oSmZ0KSxuKFpmdCl9KSksbm10PWJlKChmdW5jdGlvbih0LGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5tYXhMaW5lcygxLzApLHRoaXMudGV4dFRyaW1taW5nKCJlbGxpcHNpcyIpLHRoaXMuYWxsb3dCcmVha2luZ1dvcmRzKCExKSx0aGlzLl90b2tlbml6ZXI9bmV3IGpmdC5Ub2tlbml6ZXIsdGhpcy5fYnJlYWtpbmdDaGFyYWN0ZXI9Ii0ifXJldHVybiB0LnByb3RvdHlwZS5tYXhMaW5lcz1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9tYXhMaW5lczoodGhpcy5fbWF4TGluZXM9dCx0aGlzKX0sdC5wcm90b3R5cGUudGV4dFRyaW1taW5nPWZ1bmN0aW9uKHQpe2lmKG51bGw9PXQpcmV0dXJuIHRoaXMuX3RleHRUcmltbWluZztpZigiZWxsaXBzaXMiIT09dCYmIm5vbmUiIT09dCl0aHJvdyBuZXcgRXJyb3IodCsiIC0gdW5zdXBwb3J0ZWQgdGV4dCB0cmltbWluZyBvcHRpb24uIik7cmV0dXJuIHRoaXMuX3RleHRUcmltbWluZz10LHRoaXN9LHQucHJvdG90eXBlLmFsbG93QnJlYWtpbmdXb3Jkcz1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9hbGxvd0JyZWFraW5nV29yZHM6KHRoaXMuX2FsbG93QnJlYWtpbmdXb3Jkcz10LHRoaXMpfSx0LnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciByPXRoaXM7dm9pZCAwPT09aSYmKGk9MS8wKTt2YXIgbz17bm9Ccm9rZVdvcmRzOjAsbm9MaW5lczowLG9yaWdpbmFsVGV4dDp0LHRydW5jYXRlZFRleHQ6IiIsd3JhcHBlZFRleHQ6IiJ9LGE9e2F2YWlsYWJsZUxpbmVzOk1hdGgubWluKE1hdGguZmxvb3IoaS9lLm1lYXN1cmUoKS5oZWlnaHQpLHRoaXMuX21heExpbmVzKSxhdmFpbGFibGVXaWR0aDpuLGNhbkZpdFRleHQ6ITAsY3VycmVudExpbmU6IiIsd3JhcHBpbmc6b30scz10LnNwbGl0KCJcbiIpO3JldHVybiBzLnJlZHVjZSgoZnVuY3Rpb24odCxuLGkpe3JldHVybiByLmJyZWFrTGluZVRvRml0V2lkdGgodCxuLGkhPT1zLmxlbmd0aC0xLGUpfSksYSkud3JhcHBpbmd9LHQucHJvdG90eXBlLmJyZWFrTGluZVRvRml0V2lkdGg9ZnVuY3Rpb24odCxlLG4saSl7dmFyIHI9dGhpczt0LmNhbkZpdFRleHR8fCIiPT09dC53cmFwcGluZy50cnVuY2F0ZWRUZXh0fHwodC53cmFwcGluZy50cnVuY2F0ZWRUZXh0Kz0iXG4iKSx0PXRoaXMuX3Rva2VuaXplci50b2tlbml6ZShlKS5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIud3JhcE5leHRUb2tlbihlLHQsaSl9KSx0KTt2YXIgbz1qZnQuU3RyaW5nTWV0aG9kcy50cmltRW5kKHQuY3VycmVudExpbmUpO3JldHVybiB0LndyYXBwaW5nLm5vTGluZXMrPSsoIiIhPT1vKSx0LndyYXBwaW5nLm5vTGluZXM9PT10LmF2YWlsYWJsZUxpbmVzJiYibm9uZSIhPT10aGlzLl90ZXh0VHJpbW1pbmcmJm4/dC5jYW5GaXRUZXh0PSExOnQud3JhcHBpbmcud3JhcHBlZFRleHQrPW8sdC5jdXJyZW50TGluZT0iXG4iLHR9LHQucHJvdG90eXBlLmNhbkZpdFRva2VuPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT10aGlzLHI9dC5zcGxpdCgiIikubWFwKChmdW5jdGlvbihlLG4pe3JldHVybiBuIT09dC5sZW5ndGgtMT9lK2kuX2JyZWFraW5nQ2hhcmFjdGVyOmV9KSk7cmV0dXJuIG4ubWVhc3VyZSh0KS53aWR0aDw9ZXx8ci5ldmVyeSgoZnVuY3Rpb24odCl7cmV0dXJuIG4ubWVhc3VyZSh0KS53aWR0aDw9ZX0pKX0sdC5wcm90b3R5cGUuYWRkRWxsaXBzaXM9ZnVuY3Rpb24odCxlLG4pe2lmKCJub25lIj09PXRoaXMuX3RleHRUcmltbWluZylyZXR1cm57cmVtYWluaW5nVG9rZW46IiIsd3JhcHBlZFRva2VuOnR9O3ZhciBpPXQuc3Vic3RyaW5nKDApLnRyaW0oKSxyPW4ubWVhc3VyZShpKS53aWR0aCxvPW4ubWVhc3VyZSgiLi4uIikud2lkdGgsYT10Lmxlbmd0aD4wJiYiXG4iPT09dFswXT8iXG4iOiIiO2lmKGU8PW8pe3ZhciBzPU1hdGguZmxvb3IoZS8oby8zKSk7cmV0dXJue3JlbWFpbmluZ1Rva2VuOnQsd3JhcHBlZFRva2VuOmErIi4uLiIuc3Vic3RyKDAscyl9fWZvcig7citvPmU7KWk9amZ0LlN0cmluZ01ldGhvZHMudHJpbUVuZChpLnN1YnN0cigwLGkubGVuZ3RoLTEpKSxyPW4ubWVhc3VyZShpKS53aWR0aDtyZXR1cm57cmVtYWluaW5nVG9rZW46amZ0LlN0cmluZ01ldGhvZHMudHJpbUVuZCh0LnN1YnN0cmluZyhpLmxlbmd0aCksIi0iKS50cmltKCksd3JhcHBlZFRva2VuOmEraSsiLi4uIn19LHQucHJvdG90eXBlLndyYXBOZXh0VG9rZW49ZnVuY3Rpb24odCxlLG4pe2lmKCFlLmNhbkZpdFRleHR8fGUuYXZhaWxhYmxlTGluZXM9PT1lLndyYXBwaW5nLm5vTGluZXN8fCF0aGlzLmNhbkZpdFRva2VuKHQsZS5hdmFpbGFibGVXaWR0aCxuKSlyZXR1cm4gdGhpcy5maW5pc2hXcmFwcGluZyh0LGUsbik7Zm9yKHZhciBpPXQ7aTspe3ZhciByPXRoaXMuYnJlYWtUb2tlblRvRml0SW5XaWR0aChpLGUuY3VycmVudExpbmUsZS5hdmFpbGFibGVXaWR0aCxuKTtpZihlLmN1cnJlbnRMaW5lPXIubGluZSxudWxsIT0oaT1yLnJlbWFpbmluZ1Rva2VuKSl7aWYoZS53cmFwcGluZy5ub0Jyb2tlV29yZHMrPStyLmJyZWFrV29yZCwrK2Uud3JhcHBpbmcubm9MaW5lcyxlLmF2YWlsYWJsZUxpbmVzPT09ZS53cmFwcGluZy5ub0xpbmVzKXt2YXIgbz10aGlzLmFkZEVsbGlwc2lzKGUuY3VycmVudExpbmUsZS5hdmFpbGFibGVXaWR0aCxuKTtyZXR1cm4gZS53cmFwcGluZy53cmFwcGVkVGV4dCs9by53cmFwcGVkVG9rZW4sZS53cmFwcGluZy50cnVuY2F0ZWRUZXh0Kz1vLnJlbWFpbmluZ1Rva2VuK2ksZS5jdXJyZW50TGluZT0iXG4iLGV9ZS53cmFwcGluZy53cmFwcGVkVGV4dCs9amZ0LlN0cmluZ01ldGhvZHMudHJpbUVuZChlLmN1cnJlbnRMaW5lKSxlLmN1cnJlbnRMaW5lPSJcbiJ9fXJldHVybiBlfSx0LnByb3RvdHlwZS5maW5pc2hXcmFwcGluZz1mdW5jdGlvbih0LGUsbil7aWYoZS5jYW5GaXRUZXh0JiZlLmF2YWlsYWJsZUxpbmVzIT09ZS53cmFwcGluZy5ub0xpbmVzJiYibm9uZSIhPT10aGlzLl90ZXh0VHJpbW1pbmcpe3ZhciBpPXRoaXMuYWRkRWxsaXBzaXMoZS5jdXJyZW50TGluZSt0LGUuYXZhaWxhYmxlV2lkdGgsbik7ZS53cmFwcGluZy53cmFwcGVkVGV4dCs9aS53cmFwcGVkVG9rZW4sZS53cmFwcGluZy50cnVuY2F0ZWRUZXh0Kz1pLnJlbWFpbmluZ1Rva2VuLGUud3JhcHBpbmcubm9Ccm9rZVdvcmRzKz0rKGkucmVtYWluaW5nVG9rZW4ubGVuZ3RoPHQubGVuZ3RoKSxlLndyYXBwaW5nLm5vTGluZXMrPSsoaS53cmFwcGVkVG9rZW4ubGVuZ3RoPjApLGUuY3VycmVudExpbmU9IiJ9ZWxzZSBlLndyYXBwaW5nLnRydW5jYXRlZFRleHQrPXQ7cmV0dXJuIGUuY2FuRml0VGV4dD0hMSxlfSx0LnByb3RvdHlwZS5icmVha1Rva2VuVG9GaXRJbldpZHRoPWZ1bmN0aW9uKHQsZSxuLGkscil7aWYodm9pZCAwPT09ciYmKHI9dGhpcy5fYnJlYWtpbmdDaGFyYWN0ZXIpLGkubWVhc3VyZShlK3QpLndpZHRoPD1uKXJldHVybnticmVha1dvcmQ6ITEsbGluZTplK3QscmVtYWluaW5nVG9rZW46bnVsbH07aWYoIiI9PT10LnRyaW0oKSlyZXR1cm57YnJlYWtXb3JkOiExLGxpbmU6ZSxyZW1haW5pbmdUb2tlbjoiIn07aWYoIXRoaXMuX2FsbG93QnJlYWtpbmdXb3JkcyYmIiIhPT1lLnRyaW0oKSlyZXR1cm57YnJlYWtXb3JkOiExLGxpbmU6ZSxyZW1haW5pbmdUb2tlbjp0fTtmb3IodmFyIG89MDtvPHQubGVuZ3RoJiZpLm1lYXN1cmUoZSt0LnN1YnN0cmluZygwLG8rMSkrcikud2lkdGg8PW47KSsrbzt2YXIgYT0iIjtyZXR1cm4gbz4wJiYoYT1yKSx7YnJlYWtXb3JkOm8+MCxsaW5lOmUrdC5zdWJzdHJpbmcoMCxvKSthLHJlbWFpbmluZ1Rva2VuOnQuc3Vic3RyaW5nKG8pfX0sdH0pKCk7ZS5XcmFwcGVyPW59KSksaW10PWJlKChmdW5jdGlvbih0LGUpe3ZhciBuPXZlJiZ2ZS5fX2V4dGVuZHN8fChmdW5jdGlvbigpe3ZhciB0PU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbih0LGUpe3QuX19wcm90b19fPWV9fHxmdW5jdGlvbih0LGUpe2Zvcih2YXIgbiBpbiBlKWUuaGFzT3duUHJvcGVydHkobikmJih0W25dPWVbbl0pfTtyZXR1cm4gZnVuY3Rpb24oZSxuKXtmdW5jdGlvbiBpKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfXQoZSxuKSxlLnByb3RvdHlwZT1udWxsPT09bj9PYmplY3QuY3JlYXRlKG4pOihpLnByb3RvdHlwZT1uLnByb3RvdHlwZSxuZXcgaSl9fSkoKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGk9KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBuKGUsdCksZS5wcm90b3R5cGUud3JhcD1mdW5jdGlvbihuLGkscixvKXt2YXIgYT10aGlzO2lmKHZvaWQgMD09PW8mJihvPTEvMCksbi5zcGxpdCgiXG4iKS5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlNpbmdsZUxpbmVXcmFwcGVyIGlzIGRlc2lnbmVkIHRvIHdvcmsgb25seSBvbiBzaW5nbGUgbGluZSIpO3ZhciBzPWZ1bmN0aW9uKGUpe3JldHVybiB0LnByb3RvdHlwZS53cmFwLmNhbGwoYSxuLGksZSxvKX0sbD1zKHIpO2lmKGwubm9MaW5lczwyKXJldHVybiBsO2Zvcih2YXIgYz0wLHU9cixoPTA7aDxlLk5PX1dSQVBfSVRFUkFUSU9OUyYmdT5jOysraCl7dmFyIGQ9KHUrYykvMixwPXMoZCk7dGhpcy5hcmVTYW1lUmVzdWx0cyhsLHApPyh1PWQsbD1wKTpjPWR9cmV0dXJuIGx9LGUucHJvdG90eXBlLmFyZVNhbWVSZXN1bHRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubm9MaW5lcz09PWUubm9MaW5lcyYmdC50cnVuY2F0ZWRUZXh0PT09ZS50cnVuY2F0ZWRUZXh0fSxlfSkobm10LldyYXBwZXIpO2kuTk9fV1JBUF9JVEVSQVRJT05TPTUsZS5TaW5nbGVMaW5lV3JhcHBlcj1pfSkpLHJtdD1iZSgoZnVuY3Rpb24odCxlKXtmdW5jdGlvbiBuKHQpe2Zvcih2YXIgbiBpbiB0KWUuaGFzT3duUHJvcGVydHkobil8fChlW25dPXRbbl0pfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxuKGltdCksbihubXQpfSkpLG9tdD1iZSgoZnVuY3Rpb24odCxlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmNvbnRleHQ9dCx0aGlzLm1lYXN1cmVyPW5ldyBlbXQuQ2FjaGVNZWFzdXJlcih0aGlzLmNvbnRleHQpLHRoaXMud3JhcHBlcj1uZXcgcm10LldyYXBwZXIsdGhpcy53cml0ZXI9bmV3IFdmdC5Xcml0ZXIodGhpcy5tZWFzdXJlcix0aGlzLmNvbnRleHQsdGhpcy53cmFwcGVyKX1yZXR1cm4gdC5zdmc9ZnVuY3Rpb24oZSxuLGkpe3JldHVybiBuZXcgdChuZXcgJGZ0LlN2Z0NvbnRleHQoZSxuLGkpKX0sdC5jYW52YXM9ZnVuY3Rpb24oZSxuLGkpe3JldHVybiBuZXcgdChuZXcgJGZ0LkNhbnZhc0NvbnRleHQoZSxuLGkpKX0sdC5odG1sPWZ1bmN0aW9uKGUsbixpKXtyZXR1cm4gbmV3IHQobmV3ICRmdC5IdG1sQ29udGV4dChlLG4saSkpfSx0LnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbih0LGUsbixpLHIpe3RoaXMud3JpdGVyLndyaXRlKHQsZSxuLGkscil9LHQucHJvdG90eXBlLmNsZWFyTWVhc3VyZXJDYWNoZT1mdW5jdGlvbigpe3RoaXMubWVhc3VyZXIucmVzZXQoKX0sdH0pKCk7ZS5UeXBlc2V0dGVyPW59KSksYW10PWJlKChmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIG4odCl7Zm9yKHZhciBuIGluIHQpZS5oYXNPd25Qcm9wZXJ0eShuKXx8KGVbbl09dFtuXSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLG4oJGZ0KSxuKGVtdCksbihvbXQpLG4oamZ0KSxuKHJtdCksbihXZnQpfSkpLHNtdD1iZSgoZnVuY3Rpb24odCxlKXsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPXdpbmRvdy5BcnJheTtlLmFkZD1mdW5jdGlvbiBpKHQsZSl7aWYodC5sZW5ndGghPT1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImF0dGVtcHRlZCB0byBhZGQgYXJyYXlzIG9mIHVuZXF1YWwgbGVuZ3RoIik7cmV0dXJuIHQubWFwKChmdW5jdGlvbihuLGkpe3JldHVybiB0W2ldK2VbaV19KSl9LGUudW5pcT1mdW5jdGlvbiByKHQpe3ZhciBlPWlkdC5zZXQoKSxuPVtdO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQpe2UuaGFzKFN0cmluZyh0KSl8fChlLmFkZChTdHJpbmcodCkpLG4ucHVzaCh0KSl9KSksbn0sZS5mbGF0dGVuPWZ1bmN0aW9uIG8odCl7cmV0dXJuIG4ucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSx0KX0sZS5jcmVhdGVGaWxsZWRBcnJheT1mdW5jdGlvbiBhKHQsZSl7Zm9yKHZhciBuPVtdLGk9MDtpPGU7aSsrKW5baV09ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dChpKTp0O3JldHVybiBufX0pKSxsbXQ9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj13aW5kb3cuTWF0aDtmdW5jdGlvbiBpKHQpe3ZhciBlPWlkdC5yZ2IodCksaT1mdW5jdGlvbih0KXtyZXR1cm4odC89MjU1KTw9LjAzOTI4P3QvMTIuOTI6bi5wb3coKHQrLjA1NSkvMS4wNTUsMi40KX07cmV0dXJuLjIxMjYqaShlLnIpKy43MTUyKmkoZS5nKSsuMDcyMippKGUuYil9ZS5jb250cmFzdD1mdW5jdGlvbiByKHQsZSl7dmFyIG49aSh0KSsuMDUscj1pKGUpKy4wNTtyZXR1cm4gbj5yP24vcjpyL259LGUubGlnaHRlbkNvbG9yPWZ1bmN0aW9uIG8odCxlKXtyZXR1cm4gaWR0LmNvbG9yKHQpLmJyaWdodGVyKGUpLnJnYigpLnRvU3RyaW5nKCl9LGUuY29sb3JUZXN0PWZ1bmN0aW9uIGEodCxlKXt0LmNsYXNzZWQoZSwhMCk7dmFyIG49dC5zdHlsZSgiYmFja2dyb3VuZC1jb2xvciIpO2lmKCJ0cmFuc3BhcmVudCI9PT1uKXJldHVybiBudWxsO3ZhciBpPS9cKCguKylcKS8uZXhlYyhuKTtpZighaSlyZXR1cm4gbnVsbDt2YXIgcj1pWzFdLnNwbGl0KCIsIikubWFwKChmdW5jdGlvbih0KXt2YXIgZT0rdCxuPWUudG9TdHJpbmcoMTYpO3JldHVybiBlPDE2PyIwIituOm59KSk7aWYoND09PXIubGVuZ3RoJiYiMDAiPT09clszXSlyZXR1cm4gbnVsbDt2YXIgbz0iIyIrci5qb2luKCIiKTtyZXR1cm4gdC5jbGFzc2VkKGUsITEpLG99fSkpLGNtdD1iZSgoZnVuY3Rpb24odCxlKXsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPXdpbmRvdy5NYXRoO2Z1bmN0aW9uIGkodCl7dmFyIGU7dHJ5e2U9dC5ub2RlKCkuZ2V0QkJveCgpfWNhdGNoKHQpe2U9e3g6MCx5OjAsd2lkdGg6MCxoZWlnaHQ6MH19cmV0dXJuIGV9ZS5jb250YWlucz1mdW5jdGlvbiByKHQsZSl7Zm9yKHZhciBuPWU7bnVsbCE9biYmbiE9PXQ7KW49bi5wYXJlbnROb2RlO3JldHVybiBuPT09dH0sZS5lbGVtZW50QkJveD1pLGUuZW50aXR5Qm91bmRzPWZ1bmN0aW9uIG8odCl7aWYodCBpbnN0YW5jZW9mIFNWR0VsZW1lbnQpcmV0dXJuIGkoaWR0LnNlbGVjdCh0KSk7aWYodCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KXt2YXIgZT10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybnt4OmUubGVmdCx5OmUudG9wLHdpZHRoOmUud2lkdGgsaGVpZ2h0OmUuaGVpZ2h0fX1yZXR1cm57eDowLHk6MCx3aWR0aDowLGhlaWdodDowfX0sZS5TQ1JFRU5fUkVGUkVTSF9SQVRFX01JTExJU0VDT05EUz0xZTMvNjAsZS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVQb2x5ZmlsbD1mdW5jdGlvbiBhKHQpe251bGwhPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0KTpzZXRUaW1lb3V0KHQsZS5TQ1JFRU5fUkVGUkVTSF9SQVRFX01JTExJU0VDT05EUyl9LGUuZWxlbWVudFdpZHRoPWZ1bmN0aW9uIHModCl7dmFyIGU9dCBpbnN0YW5jZW9mIGlkdC5zZWxlY3Rpb24/dC5ub2RlKCk6dCxuPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUpO3JldHVybiBtKG4sIndpZHRoIikrbShuLCJwYWRkaW5nLWxlZnQiKSttKG4sInBhZGRpbmctcmlnaHQiKSttKG4sImJvcmRlci1sZWZ0LXdpZHRoIikrbShuLCJib3JkZXItcmlnaHQtd2lkdGgiKX0sZS5lbGVtZW50SGVpZ2h0PWZ1bmN0aW9uIGwodCl7dmFyIGU9dCBpbnN0YW5jZW9mIGlkdC5zZWxlY3Rpb24/dC5ub2RlKCk6dCxuPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUpO3JldHVybiBtKG4sImhlaWdodCIpK20obiwicGFkZGluZy10b3AiKSttKG4sInBhZGRpbmctYm90dG9tIikrbShuLCJib3JkZXItdG9wLXdpZHRoIikrbShuLCJib3JkZXItYm90dG9tLXdpZHRoIil9O3ZhciBjPSIoPzpbLStdP1swLTldKlxcLj9bMC05XSspIix1PSIoPzooPzpcXHMrLD9cXHMqKXwoPzosXFxzKikpIixoPW5ldyBSZWdFeHAoInRyYW5zbGF0ZVxccypcXChcXHMqKCIrYysiKSg/OiIrdSsiKCIrYysiKSk/XFxzKlxcKSIpLGQ9bmV3IFJlZ0V4cCgicm90YXRlXFxzKlxcKFxccyooIitjKyIpXFxzKlxcKSIpLHA9bmV3IFJlZ0V4cCgic2NhbGVcXHMqXFwoXFxzKigiK2MrIikoPzoiK3UrIigiK2MrIikpP1xccypcXCkiKTtmdW5jdGlvbiBmKHQpe2lmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm57bWluOnQsbWF4OnR9O2lmKHQgaW5zdGFuY2VvZiBPYmplY3QmJiJtaW4iaW4gdCYmIm1heCJpbiB0KXJldHVybiB0O3Rocm93IG5ldyBFcnJvcigiaW5wdXQgJyIrdCsiJyBjYW4ndCBiZSBwYXJzZWQgYXMgYW4gUmFuZ2UiKX1mdW5jdGlvbiBtKHQsZSl7dmFyIG49dC5nZXRQcm9wZXJ0eVZhbHVlKGUpO3JldHVybiBwYXJzZUZsb2F0KG4pfHwwfWUuZ2V0VHJhbnNsYXRlVmFsdWVzPWZ1bmN0aW9uIGcodCl7dmFyIGU9aC5leGVjKHQuYXR0cigidHJhbnNmb3JtIikpO2lmKG51bGwhPWUpe3ZhciBuPWVbMl07cmV0dXJuWytlWzFdLCsodm9pZCAwPT09bj8wOm4pXX1yZXR1cm5bMCwwXX0sZS5nZXRSb3RhdGU9ZnVuY3Rpb24gXyh0KXt2YXIgZT1kLmV4ZWModC5hdHRyKCJ0cmFuc2Zvcm0iKSk7cmV0dXJuIG51bGwhPWU/K2VbMV06MH0sZS5nZXRTY2FsZVZhbHVlcz1mdW5jdGlvbiB5KHQpe3ZhciBlPXAuZXhlYyh0LmF0dHIoInRyYW5zZm9ybSIpKTtpZihudWxsIT1lKXt2YXIgbj1lWzFdLGk9ZVsyXTtyZXR1cm5bK24sbnVsbD09aT8rbjoraV19cmV0dXJuWzAsMF19LGUuY2xpZW50UmVjdHNPdmVybGFwPWZ1bmN0aW9uIHYodCxlKXtyZXR1cm4hKG4uZmxvb3IodC5yaWdodCk8PW4uY2VpbChlLmxlZnQpfHxuLmNlaWwodC5sZWZ0KT49bi5mbG9vcihlLnJpZ2h0KXx8bi5mbG9vcih0LmJvdHRvbSk8PW4uY2VpbChlLnRvcCl8fG4uY2VpbCh0LnRvcCk+PW4uZmxvb3IoZS5ib3R0b20pKX0sZS5leHBhbmRSZWN0PWZ1bmN0aW9uIGIodCxlKXtyZXR1cm57bGVmdDp0LmxlZnQtZSx0b3A6dC50b3AtZSxyaWdodDp0LnJpZ2h0K2UsYm90dG9tOnQuYm90dG9tK2Usd2lkdGg6dC53aWR0aCsyKmUsaGVpZ2h0OnQuaGVpZ2h0KzIqZX19LGUuY2xpZW50UmVjdEluc2lkZT1mdW5jdGlvbiB4KHQsZSl7cmV0dXJuIG4uZmxvb3IoZS5sZWZ0KTw9bi5jZWlsKHQubGVmdCkmJm4uZmxvb3IoZS50b3ApPD1uLmNlaWwodC50b3ApJiZuLmZsb29yKHQucmlnaHQpPD1uLmNlaWwoZS5yaWdodCkmJm4uZmxvb3IodC5ib3R0b20pPD1uLmNlaWwoZS5ib3R0b20pfSxlLmludGVyc2VjdHNCQm94PWZ1bmN0aW9uIHcodCxlLG4saSl7dm9pZCAwPT09aSYmKGk9LjUpO3ZhciByPWYodCksbz1mKGUpO3JldHVybiBuLngrbi53aWR0aD49ci5taW4taSYmbi54PD1yLm1heCtpJiZuLnkrbi5oZWlnaHQ+PW8ubWluLWkmJm4ueTw9by5tYXgraX0sZS5nZXRIdG1sRWxlbWVudEFuY2VzdG9ycz1mdW5jdGlvbiBTKHQpe2Zvcih2YXIgZT1bXTt0JiZ0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQ7KWUucHVzaCh0KSx0PXQucGFyZW50RWxlbWVudDtyZXR1cm4gZX0sZS5nZXRFbGVtZW50VHJhbnNmb3JtPWZ1bmN0aW9uIE0odCl7dmFyIGU9d2luZG93LmdldENvbXB1dGVkU3R5bGUodCxudWxsKTtyZXR1cm4oZnVuY3Rpb24gbih0KXtpZihudWxsPT10fHwibm9uZSI9PT10KXJldHVybiBudWxsO3ZhciBlPXQubWF0Y2goRSk7aWYobnVsbD09ZXx8ZS5sZW5ndGg8MilyZXR1cm4gbnVsbDt2YXIgbj1lWzFdLnNwbGl0KFQpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHBhcnNlRmxvYXQodCl9KSk7cmV0dXJuIDYhPW4ubGVuZ3RoP251bGw6bn0pKGUuZ2V0UHJvcGVydHlWYWx1ZSgiLXdlYmtpdC10cmFuc2Zvcm0iKXx8ZS5nZXRQcm9wZXJ0eVZhbHVlKCItbW96LXRyYW5zZm9ybSIpfHxlLmdldFByb3BlcnR5VmFsdWUoIi1tcy10cmFuc2Zvcm0iKXx8ZS5nZXRQcm9wZXJ0eVZhbHVlKCItby10cmFuc2Zvcm0iKXx8ZS5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKSl9O3ZhciBFPS9ebWF0cml4XCgoW14pXSspXCkkLyxUPS9bLCBdKy99KSksdW10PWJlKChmdW5jdGlvbih0LGUpewovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49d2luZG93Lk1hdGgsaT1bMSwwLDAsMSwwLDBdO2Z1bmN0aW9uIHIodCxlKXtyZXR1cm5bdFswXSplWzBdK3RbMl0qZVsxXSx0WzFdKmVbMF0rdFszXSplWzFdLHRbMF0qZVsyXSt0WzJdKmVbM10sdFsxXSplWzJdK3RbM10qZVszXSx0WzBdKmVbNF0rdFsyXSplWzVdK3RbNF0sdFsxXSplWzRdK3RbM10qZVs1XSt0WzVdXX1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuW3RbMF0sdFsxXSx0WzJdLHRbM10sdFswXSplWzBdK3RbMl0qZVsxXSt0WzRdLHRbMV0qZVswXSt0WzNdKmVbMV0rdFs1XV19ZnVuY3Rpb24gYSh0KXt2YXIgZT10WzBdKnRbM10tdFsxXSp0WzJdO2lmKDA9PT1lKXRocm93IG5ldyBFcnJvcigic2luZ3VsYXIgbWF0cml4Iik7dmFyIG49MS9lO3JldHVybltuKnRbM10sbiotdFsxXSxuKi10WzJdLG4qdFswXSxuKigtdFszXSp0WzRdK3RbMl0qdFs1XSksbioodFsxXSp0WzRdKy10WzBdKnRbNV0pXX1lLmluUmFuZ2U9ZnVuY3Rpb24gcyh0LGUsaSl7cmV0dXJuIG4ubWluKGUsaSk8PXQmJnQ8PW4ubWF4KGUsaSl9LGUuY2xhbXA9ZnVuY3Rpb24gbCh0LGUsaSl7cmV0dXJuIG4ubWluKG4ubWF4KGUsdCksaSl9LGUubWF4PWZ1bmN0aW9uIGModCxlLG4pe3ZhciBpPSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6bnVsbCxyPW51bGw9PWk/ZTpuLG89bnVsbD09aT9pZHQubWF4KHQpOmlkdC5tYXgodCxpKTtyZXR1cm4gdm9pZCAwIT09bz9vOnJ9LGUubWluPWZ1bmN0aW9uIHUodCxlLG4pe3ZhciBpPSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6bnVsbCxyPW51bGw9PWk/ZTpuLG89bnVsbD09aT9pZHQubWluKHQpOmlkdC5taW4odCxpKTtyZXR1cm4gdm9pZCAwIT09bz9vOnJ9LGUuaXNOYU49ZnVuY3Rpb24gaCh0KXtyZXR1cm4gdCE9dH0sZS5pc1ZhbGlkTnVtYmVyPWZ1bmN0aW9uIGQodCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0JiZ0LXQ8MX0sZS5yYW5nZT1mdW5jdGlvbiBwKHQsZSxpKXtpZih2b2lkIDA9PT1pJiYoaT0xKSwwPT09aSl0aHJvdyBuZXcgRXJyb3IoInN0ZXAgY2Fubm90IGJlIDAiKTtmb3IodmFyIHI9bi5tYXgobi5jZWlsKChlLXQpL2kpLDApLG89W10sYT0wO2E8cjsrK2Epb1thXT10K2kqYTtyZXR1cm4gb30sZS5kaXN0YW5jZVNxdWFyZWQ9ZnVuY3Rpb24gZih0LGUpe3JldHVybiBuLnBvdyhlLnktdC55LDIpK24ucG93KGUueC10LngsMil9LGUuZGVncmVlc1RvUmFkaWFucz1mdW5jdGlvbiBtKHQpe3JldHVybiB0LzM2MCpuLlBJKjJ9LGUud2l0aGluPWZ1bmN0aW9uIGcodCxlKXtyZXR1cm4gZS50b3BMZWZ0Lng8PXQueCYmZS5ib3R0b21SaWdodC54Pj10LngmJmUudG9wTGVmdC55PD10LnkmJmUuYm90dG9tUmlnaHQueT49dC55fSxlLmJvdW5kc0ludGVyc2VjdHM9ZnVuY3Rpb24gXyh0LGUsbixpLHIsbyxhLHMpe3JldHVybiB0PD1yK2EmJnI8PXQrbiYmZTw9bytzJiZvPD1lK2l9LGUuZ2V0Q3VtdWxhdGl2ZVRyYW5zZm9ybT1mdW5jdGlvbiB5KHQpe2Zvcih2YXIgZT1jbXQuZ2V0SHRtbEVsZW1lbnRBbmNlc3RvcnModCksbj1pLHM9bnVsbCxsPTAsYz1lO2w8Yy5sZW5ndGg7bCsrKXt2YXIgdT1jW2xdLGg9Y210LmdldEVsZW1lbnRUcmFuc2Zvcm0odSk7aWYobnVsbCE9aCl7dmFyIGQ9dS5jbGllbnRXaWR0aC8yLHA9dS5jbGllbnRIZWlnaHQvMjtuPW8obixbZCxwXSksbj1vKG49cihuLGEoaCkpLFstZCwtcF0pfXZhciBmPXUuc2Nyb2xsTGVmdCxtPXUuc2Nyb2xsVG9wO251bGwhPT1zJiZ1IT09c3x8KGYtPXUub2Zmc2V0TGVmdCt1LmNsaWVudExlZnQsbS09dS5vZmZzZXRUb3ArdS5jbGllbnRUb3Ascz11Lm9mZnNldFBhcmVudCksbj1vKG4sW2YsbV0pfXJldHVybiBufSxlLm11bHRpcGx5TWF0cml4PXIsZS5wcmVtdWx0aXBseVRyYW5zbGF0ZT1mdW5jdGlvbiB2KHQsZSl7cmV0dXJuW2VbMF0sZVsxXSxlWzJdLGVbM10sZVs0XSt0WzBdLGVbNV0rdFsxXV19LGUubXVsdGlwbHlUcmFuc2xhdGU9byxlLmludmVydE1hdHJpeD1hLGUuYXBwbHlUcmFuc2Zvcm09ZnVuY3Rpb24gYih0LGUpe3JldHVybnt4OnRbMF0qZS54K3RbMl0qZS55K3RbNF0seTp0WzFdKmUueCt0WzNdKmUueSt0WzVdfX19KSksaG10PWJlKChmdW5jdGlvbih0LGUpewovKioKICAgICAqIENvcHlyaWdodCAyMDE3LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49TWF0aC5jZWlsKHQubGVuZ3RoLzIpLGk9MDtpPG47aSsrKWVbMF0uaW5zZXJ0KHRbaV0pO2ZvcihpPW47aTx0Lmxlbmd0aDtpKyspZVsxXS5pbnNlcnQodFtpXSl9LHR9KSgpO2UuU3BsaXRTdHJhdGVneVRyaXZpYWw9bjt2YXIgaT0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbih0LGUpe2Zvcih0PXQuc2xpY2UoKSx0aGlzLmNob29zZUZpcnN0U3BsaXQodCxlKTt0Lmxlbmd0aD4wOyl0aGlzLmFkZE5leHQodCxlKX0sdC5wcm90b3R5cGUuY2hvb3NlRmlyc3RTcGxpdD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0wLGk9MCxyPXQubGVuZ3RoLTEsbz10Lmxlbmd0aC0xLGE9MTthPHQubGVuZ3RoLTE7YSsrKXt2YXIgcz10W2FdO3MuYm91bmRzLnhsPnRbcl0uYm91bmRzLnhsP3I9YTpzLmJvdW5kcy54aDx0W25dLmJvdW5kcy54aCYmKG49YSkscy5ib3VuZHMueWw+dFtvXS5ib3VuZHMueWw/bz1hOnMuYm91bmRzLnloPHRbaV0uYm91bmRzLnloJiYoaT1hKX12YXIgbD1NYXRoLmFicyh0W25dLmJvdW5kcy54aC10W3JdLmJvdW5kcy54bCk+TWF0aC5hYnModFtpXS5ib3VuZHMueWgtdFtvXS5ib3VuZHMueWwpP1tuLHJdOltpLG9dLGM9bFswXSx1PWxbMV07Yz09PXUmJihjPTAsdT10Lmxlbmd0aC0xKSxlWzBdLmluc2VydCh0LnNwbGljZShNYXRoLm1heChjLHUpLDEpWzBdKSxlWzFdLmluc2VydCh0LnNwbGljZShNYXRoLm1pbihjLHUpLDEpWzBdKX0sdC5wcm90b3R5cGUuYWRkTmV4dD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj1udWxsLGk9bnVsbCxyPW51bGwsbz0wO288dC5sZW5ndGg7bysrKXt2YXIgYT10W29dLHM9ZVswXS51bmlvbkFyZWFEaWZmZXJlbmNlKGEuYm91bmRzKSxsPWVbMV0udW5pb25BcmVhRGlmZmVyZW5jZShhLmJvdW5kcyk7KHM8aXx8bnVsbD09bikmJihuPW8saT1zLHI9ZVswXSksbDxpJiYobj1vLGk9bCxyPWVbMV0pfXIuaW5zZXJ0KHQuc3BsaWNlKG4sMSlbMF0pfSx0fSkoKTtlLlNwbGl0U3RyYXRlZ3lMaW5lYXI9aX0pKSxkbXQ9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTctcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbixpPW5ldyBobXQuU3BsaXRTdHJhdGVneUxpbmVhcjtmdW5jdGlvbiByKHQsZSxpKXt2YXIgcj0xLzAsbz0xLzA7cmV0dXJuIGZ1bmN0aW9uKGEpe3ZhciBzPWUoYS5ib3VuZHMsdCksbD1pKGEuYm91bmRzLHQpO3JldHVybiBudWxsIT1hLnZhbHVlP3M8cj8ocj1zLG89bCxuLlBBU1NfQU5EX09WRVJXUklURSk6cz09PXI/bi5QQVNTOm4uRkFJTDpzPm8/bi5GQUlMOihvPU1hdGgubWF4KGwsbyksbi5QQVNTKX19ZnVuY3Rpb24gbyh0LGUpe3JldHVybiBmdW5jdGlvbihuLGkpe3JldHVybiBlKGkuYm91bmRzLHQpLWUobi5ib3VuZHMsdCl9fSEoZnVuY3Rpb24odCl7dFt0LlBBU1M9MF09IlBBU1MiLHRbdC5GQUlMPTFdPSJGQUlMIix0W3QuUEFTU19BTkRfT1ZFUldSSVRFPTJdPSJQQVNTX0FORF9PVkVSV1JJVEUifSkobj1lLlF1ZXJ5UHJlZGljYXRlUmVzdWx0fHwoZS5RdWVyeVByZWRpY2F0ZVJlc3VsdD17fSkpLGUuY3JlYXRlTWluaW1pemluZ05vZGVQcmVkaWNhdGU9cixlLmNyZWF0ZU5vZGVTb3J0PW87dmFyIGE9KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3ZvaWQgMD09PXQmJih0PTUpLHZvaWQgMD09PWUmJihlPWkpLHRoaXMubWF4Tm9kZUNoaWxkcmVuPXQsdGhpcy5zcGxpdFN0cmF0ZWd5PWUsdGhpcy5yb290PW5ldyBzKCEwKSx0aGlzLnNpemU9MH1yZXR1cm4gdC5wcm90b3R5cGUuZ2V0Um9vdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJvb3R9LHQucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5yb290PW5ldyBzKCEwKSx0aGlzLnNpemU9MH0sdC5wcm90b3R5cGUuaW5zZXJ0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXRoaXMucm9vdDshbi5sZWFmOyluPW4uc3VidHJlZSh0KTt2YXIgaT1zLnZhbHVlTm9kZSh0LGUpO2ZvcihuLmluc2VydChpKSx0aGlzLnNpemUrPTE7bi5vdmVyZmxvdyh0aGlzLm1heE5vZGVDaGlsZHJlbik7KW51bGw9PShuPW4uc3BsaXQodGhpcy5zcGxpdFN0cmF0ZWd5KSkucGFyZW50JiYodGhpcy5yb290PW4pO3JldHVybiBpfSx0LnByb3RvdHlwZS5sb2NhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucXVlcnkoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmNvbnRhaW5zKHQpfSkpfSx0LnByb3RvdHlwZS5sb2NhdGVOZWFyZXN0PWZ1bmN0aW9uKHQpe3ZhciBlPXIodCxsLmRpc3RhbmNlU3F1YXJlZFRvTmVhckVkZ2UsbC5kaXN0YW5jZVNxdWFyZWRUb0ZhckVkZ2UpO3JldHVybiB0aGlzLnF1ZXJ5Tm9kZXMoZSkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC52YWx1ZX0pKX0sdC5wcm90b3R5cGUubG9jYXRlTmVhcmVzdFg9ZnVuY3Rpb24odCl7dmFyIGU9cih0LGwuYWJzb2x1dGVEaXN0YW5jZVRvTmVhckVkZ2VYLGwuYWJzb2x1dGVEaXN0YW5jZVRvRmFyRWRnZVgpLG49dGhpcy5xdWVyeU5vZGVzKGUpO3JldHVybiBuLnNvcnQobyh0LGwuYWJzb2x1dGVEaXN0YW5jZVRvTmVhckVkZ2VZKSksbi5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnZhbHVlfSkpfSx0LnByb3RvdHlwZS5sb2NhdGVOZWFyZXN0WT1mdW5jdGlvbih0KXt2YXIgZT1yKHQsbC5hYnNvbHV0ZURpc3RhbmNlVG9OZWFyRWRnZVksbC5hYnNvbHV0ZURpc3RhbmNlVG9GYXJFZGdlWSksbj10aGlzLnF1ZXJ5Tm9kZXMoZSk7cmV0dXJuIG4uc29ydChvKHQsbC5hYnNvbHV0ZURpc3RhbmNlVG9OZWFyRWRnZVgpKSxuLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQudmFsdWV9KSl9LHQucHJvdG90eXBlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5xdWVyeSgoZnVuY3Rpb24oZSl7cmV0dXJuIGwuaXNCb3VuZHNPdmVybGFwQm91bmRzKGUsdCl9KSl9LHQucHJvdG90eXBlLmludGVyc2VjdFg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucXVlcnkoKGZ1bmN0aW9uKGUpe3JldHVybiBsLmlzQm91bmRzT3ZlcmxhcFgoZSx0KX0pKX0sdC5wcm90b3R5cGUuaW50ZXJzZWN0WT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5xdWVyeSgoZnVuY3Rpb24oZSl7cmV0dXJuIGwuaXNCb3VuZHNPdmVybGFwWShlLHQpfSkpfSx0LnByb3RvdHlwZS5xdWVyeT1mdW5jdGlvbih0KXt2YXIgZT1bXTtpZihudWxsIT10aGlzLnJvb3QuYm91bmRzJiYhdCh0aGlzLnJvb3QuYm91bmRzKSlyZXR1cm4gZTtmb3IodmFyIG49W3RoaXMucm9vdF07bi5sZW5ndGg+MDspZm9yKHZhciBpPW4uc2hpZnQoKSxyPTA7cjxpLmVudHJpZXMubGVuZ3RoO3IrKyl7dmFyIG89aS5lbnRyaWVzW3JdO3Qoby5ib3VuZHMpJiYoaS5sZWFmP2UucHVzaChvLnZhbHVlKTpuLnB1c2gobykpfXJldHVybiBlfSx0LnByb3RvdHlwZS5xdWVyeU5vZGVzPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO2lmKG51bGwhPXRoaXMucm9vdC5ib3VuZHMmJnQodGhpcy5yb290KT09PW4uRkFJTClyZXR1cm4gZTtmb3IodmFyIGk9W3RoaXMucm9vdF07aS5sZW5ndGg+MDspZm9yKHZhciByPWkuc2hpZnQoKSxvPTA7bzxyLmVudHJpZXMubGVuZ3RoO28rKyl7dmFyIGE9ci5lbnRyaWVzW29dLHM9dChhKTtzPT09bi5QQVNTX0FORF9PVkVSV1JJVEUmJihlPVtdKSxzIT09bi5QQVNTJiZzIT09bi5QQVNTX0FORF9PVkVSV1JJVEV8fChyLmxlYWY/ZS5wdXNoKGEpOmkucHVzaChhKSl9cmV0dXJuIGV9LHR9KSgpO2UuUlRyZWU9YTt2YXIgcz0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMubGVhZj10LHRoaXMuYm91bmRzPW51bGwsdGhpcy5lbnRyaWVzPVtdLHRoaXMucGFyZW50PW51bGwsdGhpcy52YWx1ZT1udWxsfXJldHVybiB0LnZhbHVlTm9kZT1mdW5jdGlvbihlLG4pe3ZhciBpPW5ldyB0KCEwKTtyZXR1cm4gaS5ib3VuZHM9ZSxpLnZhbHVlPW4saX0sdC5wcm90b3R5cGUub3ZlcmZsb3c9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZW50cmllcy5sZW5ndGg+dH0sdC5wcm90b3R5cGUuaW5zZXJ0PWZ1bmN0aW9uKHQpe3RoaXMuZW50cmllcy5wdXNoKHQpLHQucGFyZW50PXRoaXM7Zm9yKHZhciBlPXRoaXM7bnVsbCE9ZTspZS5ib3VuZHM9bC51bmlvbkFsbChbZS5ib3VuZHMsdC5ib3VuZHNdKSxlPWUucGFyZW50O3JldHVybiB0aGlzfSx0LnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5lbnRyaWVzLmluZGV4T2YodCk7aWYoZT49MCl7dGhpcy5lbnRyaWVzLnNwbGljZShlLDEpO2Zvcih2YXIgbj10aGlzO251bGwhPW47KW4uYm91bmRzPWwudW5pb25BbGwobi5lbnRyaWVzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuYm91bmRzfSkpKSxuPW4ucGFyZW50fXJldHVybiB0aGlzfSx0LnByb3RvdHlwZS5zdWJ0cmVlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0xLzAsbj1udWxsLGk9MDtpPHRoaXMuZW50cmllcy5sZW5ndGg7aSsrKXt2YXIgcj10aGlzLmVudHJpZXNbaV0sbz1yLnVuaW9uQXJlYURpZmZlcmVuY2UodCk7KG88ZXx8bz09PWUmJm51bGwhPW4mJnIuZW50cmllcy5sZW5ndGg8bi5lbnRyaWVzLmxlbmd0aCkmJihuPXIpfXJldHVybiBufSx0LnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihlKXtudWxsIT10aGlzLnBhcmVudCYmdGhpcy5wYXJlbnQucmVtb3ZlKHRoaXMpO3ZhciBuPVtuZXcgdCh0aGlzLmxlYWYpLG5ldyB0KHRoaXMubGVhZildO2Uuc3BsaXQodGhpcy5lbnRyaWVzLG4pO3ZhciBpPW51bGwhPXRoaXMucGFyZW50P3RoaXMucGFyZW50Om5ldyB0KCExKTtyZXR1cm4gaS5pbnNlcnQoblswXSksaS5pbnNlcnQoblsxXSksaS5sZWFmPSExLGl9LHQucHJvdG90eXBlLnVuaW9uQXJlYURpZmZlcmVuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguYWJzKGwudW5pb24odGhpcy5ib3VuZHMsdCkuYXJlYSgpLXRoaXMuYm91bmRzLmFyZWEoKSl9LHQucHJvdG90eXBlLm1heERlcHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVhZj8xOjErdGhpcy5lbnRyaWVzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQubWF4RGVwdGgoKX0pKS5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGgubWF4KHQsZSl9KSl9LHR9KSgpO2UuUlRyZWVOb2RlPXM7dmFyIGw9KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixpKXt0aGlzLnhsPXQsdGhpcy55bD1lLHRoaXMueGg9bix0aGlzLnloPWksdGhpcy53aWR0aD10aGlzLnhoLXRoaXMueGwsdGhpcy5oZWlnaHQ9dGhpcy55aC10aGlzLnlsfXJldHVybiB0Lnh5d2g9ZnVuY3Rpb24oZSxuLGkscil7cmV0dXJuIG5ldyB0KGUsbixlK2ksbityKX0sdC5lbnRpdHlCb3VuZHM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB0KGUueCxlLnksZS54K2Uud2lkdGgsZS55K2UuaGVpZ2h0KX0sdC5ib3VuZHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHQucG9pbnRQYWlyKGUudG9wTGVmdCxlLmJvdHRvbVJpZ2h0KX0sdC5wb2ludFBhaXI9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbmV3IHQoTWF0aC5taW4oZS54LG4ueCksTWF0aC5taW4oZS55LG4ueSksTWF0aC5tYXgoZS54LG4ueCksTWF0aC5tYXgoZS55LG4ueSkpfSx0LnBvaW50cz1mdW5jdGlvbihlKXtpZihlLmxlbmd0aDwyKXRocm93IG5ldyBFcnJvcigibmVlZCBhdCBsZWFzdCAyIHBvaW50cyB0byBjcmVhdGUgYm91bmRzIik7dmFyIG49ZS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnh9KSksaT1lLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQueX0pKTtyZXR1cm4gbmV3IHQobi5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGgubWluKHQsZSl9KSksaS5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGgubWluKHQsZSl9KSksbi5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGgubWF4KHQsZSl9KSksaS5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGgubWF4KHQsZSl9KSkpfSx0LnVuaW9uPWZ1bmN0aW9uKGUsbil7cmV0dXJuIG5ldyB0KE1hdGgubWluKGUueGwsbi54bCksTWF0aC5taW4oZS55bCxuLnlsKSxNYXRoLm1heChlLnhoLG4ueGgpLE1hdGgubWF4KGUueWgsbi55aCkpfSx0LnVuaW9uQWxsPWZ1bmN0aW9uKGUpe3JldHVybiAwPT09KGU9ZS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT10fSkpKS5sZW5ndGg/bnVsbDplLnJlZHVjZSgoZnVuY3Rpb24oZSxuKXtyZXR1cm4gdC51bmlvbihlLG4pfSkpfSx0LmlzQm91bmRzT3ZlcmxhcEJvdW5kcz1mdW5jdGlvbihlLG4pe3JldHVybiB0LmlzQm91bmRzT3ZlcmxhcFgoZSxuKSYmdC5pc0JvdW5kc092ZXJsYXBZKGUsbil9LHQuaXNCb3VuZHNPdmVybGFwWD1mdW5jdGlvbih0LGUpe3JldHVybiEodC54aDxlLnhsfHx0LnhsPmUueGgpfSx0LmlzQm91bmRzT3ZlcmxhcFk9ZnVuY3Rpb24odCxlKXtyZXR1cm4hKHQueWg8ZS55bHx8dC55bD5lLnloKX0sdC5hYnNvbHV0ZURpc3RhbmNlVG9OZWFyRWRnZVg9ZnVuY3Rpb24odCxlKXt2YXIgbj10LndpZHRoLzI7cmV0dXJuIE1hdGgubWF4KE1hdGguYWJzKGUueC0odC54bCtuKSktbiwwKX0sdC5hYnNvbHV0ZURpc3RhbmNlVG9OZWFyRWRnZVk9ZnVuY3Rpb24odCxlKXt2YXIgbj10LmhlaWdodC8yO3JldHVybiBNYXRoLm1heChNYXRoLmFicyhlLnktKHQueWwrbikpLW4sMCl9LHQuYWJzb2x1dGVEaXN0YW5jZVRvRmFyRWRnZVg9ZnVuY3Rpb24oZSxuKXt2YXIgaT10LmFic29sdXRlRGlzdGFuY2VUb05lYXJFZGdlWChlLG4pO3JldHVybiAwPT09aT8wOmkrZS53aWR0aH0sdC5hYnNvbHV0ZURpc3RhbmNlVG9GYXJFZGdlWT1mdW5jdGlvbihlLG4pe3ZhciBpPXQuYWJzb2x1dGVEaXN0YW5jZVRvTmVhckVkZ2VZKGUsbik7cmV0dXJuIDA9PT1pPzA6aStlLmhlaWdodH0sdC5kaXN0YW5jZVNxdWFyZWRUb05lYXJFZGdlPWZ1bmN0aW9uKGUsbil7dmFyIGk9dC5hYnNvbHV0ZURpc3RhbmNlVG9OZWFyRWRnZVgoZSxuKSxyPXQuYWJzb2x1dGVEaXN0YW5jZVRvTmVhckVkZ2VZKGUsbik7cmV0dXJuIGkqaStyKnJ9LHQuZGlzdGFuY2VTcXVhcmVkVG9GYXJFZGdlPWZ1bmN0aW9uKGUsbil7dmFyIGk9dC5hYnNvbHV0ZURpc3RhbmNlVG9GYXJFZGdlWChlLG4pLHI9dC5hYnNvbHV0ZURpc3RhbmNlVG9GYXJFZGdlWShlLG4pO3JldHVybiBpKmkrcipyfSx0LnByb3RvdHlwZS5hcmVhPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PXRoaXMuYXJlYUNhY2hlZCYmKHRoaXMuYXJlYUNhY2hlZD0odGhpcy54aC10aGlzLnhsKSoodGhpcy55aC10aGlzLnlsKSksdGhpcy5hcmVhQ2FjaGVkfSx0LnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54bDw9dC54JiZ0aGlzLnhoPj10LngmJnRoaXMueWw8PXQueSYmdGhpcy55aD49dC55fSx0fSkoKTtlLlJUcmVlQm91bmRzPWx9KSkscG10PWJlKChmdW5jdGlvbih0LGUpewovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5JU3RhY2tpbmdPcmRlcj1JZnQubWFrZUVudW0oWyJ0b3Bkb3duIiwiYm90dG9tdXAiXSk7dmFyIG49d2luZG93Lk1hdGg7ZS5zdGFjaz1mdW5jdGlvbiBpKHQsbixyLG8pe3ZvaWQgMD09PW8mJihvPSJib3R0b211cCIpO3ZhciBhPWlkdC5tYXAoKSxzPWlkdC5tYXAoKSxsPW5ldyBTbXQuTWFwOyJ0b3Bkb3duIj09PW8mJih0PXQuc2xpY2UoKSkucmV2ZXJzZSgpO2Zvcih2YXIgYz0wLHU9dDtjPHUubGVuZ3RoO2MrKyl7Zm9yKHZhciBoPXVbY10sZD1uZXcgU210Lk1hcCxwPWguZGF0YSgpLGY9cC5sZW5ndGgsbT0wO208ZjttKyspe3ZhciBnPXBbbV0sXz1uKGcsbSxoKSx5PWUubm9ybWFsaXplS2V5KF8pLHY9K3IoZyxtLGgpLGI9dm9pZCAwLHg9dj49MD9hOnM7eC5oYXMoeSk/KGI9eC5nZXQoeSkseC5zZXQoeSxiK3YpKTooYj0wLHguc2V0KHksdikpLGQuc2V0KHkse29mZnNldDpiLHZhbHVlOnYsYXhpc1ZhbHVlOl8sb3JpZ2luYWxEYXR1bTpnLG9yaWdpbmFsRGF0YXNldDpoLG9yaWdpbmFsSW5kZXg6bX0pfWwuc2V0KGgsZCl9cmV0dXJuIGx9LGUuc3RhY2tlZEV4dGVudHM9ZnVuY3Rpb24gcih0KXt2YXIgZT1uZXcgU210Lk1hcCxuPW5ldyBTbXQuTWFwO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuZm9yRWFjaCgoZnVuY3Rpb24odCxpKXt2YXIgcj10Lm9mZnNldCt0LnZhbHVlLG89U210Lk1hdGgubWF4KFtyLHQub2Zmc2V0XSx0Lm9mZnNldCksYT1TbXQuTWF0aC5taW4oW3IsdC5vZmZzZXRdLHQub2Zmc2V0KSxzPXQuYXhpc1ZhbHVlO2UuaGFzKGkpP2UuZ2V0KGkpLmV4dGVudDxvJiZlLnNldChpLHtleHRlbnQ6byxheGlzVmFsdWU6cyxzdGFja2VkRGF0dW06dH0pOmUuc2V0KGkse2V4dGVudDpvLGF4aXNWYWx1ZTpzLHN0YWNrZWREYXR1bTp0fSksbi5oYXMoaSk/bi5nZXQoaSkuZXh0ZW50PmEmJm4uc2V0KGkse2V4dGVudDphLGF4aXNWYWx1ZTpzLHN0YWNrZWREYXR1bTp0fSk6bi5zZXQoaSx7ZXh0ZW50OmEsYXhpc1ZhbHVlOnMsc3RhY2tlZERhdHVtOnR9KX0pKX0pKSx7bWF4aW11bUV4dGVudHM6ZSxtaW5pbXVtRXh0ZW50czpufX0sZS5zdGFja2VkRXh0ZW50PWZ1bmN0aW9uIG8odCxpLHIpe3ZhciBvPVtdO3QuZm9yRWFjaCgoZnVuY3Rpb24odCxuKXtmb3IodmFyIGE9bi5kYXRhKCkscz1hLmxlbmd0aCxsPTA7bDxzO2wrKyl7dmFyIGM9YVtsXTtpZihudWxsPT1yfHxyKGMsbCxuKSl7dmFyIHU9dC5nZXQoZS5ub3JtYWxpemVLZXkoaShjLGwsbikpKTtvLnB1c2godS52YWx1ZSt1Lm9mZnNldCl9fX0pKTt2YXIgYT1TbXQuTWF0aC5tYXgobywwKSxzPVNtdC5NYXRoLm1pbihvLDApO3JldHVybltuLm1pbihzLDApLG4ubWF4KDAsYSldfSxlLm5vcm1hbGl6ZUtleT13ZS5tZW1vaXplKChmdW5jdGlvbih0KXtyZXR1cm4gU3RyaW5nKHQpfSkpfSkpLGZtdD1iZSgoZnVuY3Rpb24odCxlKXsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuU0hPV19XQVJOSU5HUz0hMCxlLkFERF9USVRMRV9FTEVNRU5UUz0hMH0pKSxtbXQ9YmUoKGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gbih0KXtmbXQuU0hPV19XQVJOSU5HUyYmY29uc29sZS53YXJuKHQpfWZ1bmN0aW9uIGkodCxlKXtmb3IodmFyIG49W10saT0yO2k8YXJndW1lbnRzLmxlbmd0aDtpKyspbltpLTJdPWFyZ3VtZW50c1tpXTtyZXR1cm4gMD09PWU/KHQobiksLTEpOndpbmRvdy5zZXRUaW1lb3V0KHQsZSxuKX0KLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUud2Fybj1uLGUuc2V0VGltZW91dD1pLGUuZGVib3VuY2U9ZnVuY3Rpb24gcih0LGUsbil7dmFyIHI9bnVsbCxvPVtdLGE9ZnVuY3Rpb24oKXtlLmFwcGx5KG4sbyl9O3JldHVybiBmdW5jdGlvbigpe289QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSxjbGVhclRpbWVvdXQocikscj1pKGEsdCl9fSxlLmRlcHJlY2F0ZWQ9ZnVuY3Rpb24gbyh0LGUsaSl7dm9pZCAwPT09aSYmKGk9IiIpLG4oIk1ldGhvZCAiK3QrIiBoYXMgYmVlbiBkZXByZWNhdGVkIGluIHZlcnNpb24gIitlKyIuIFBsZWFzZSByZWZlciB0byB0aGUgcmVsZWFzZSBub3Rlcy4gIitpKX19KSksZ210PWJlKChmdW5jdGlvbih0LGUpewovKioKICAgICAqIENvcHlyaWdodCAyMDE3LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5lbnRyeUluZGV4PXQsdGhpcy5leGl0SW5kZXg9dCx0aGlzLm1pbkluZGV4PXQsdGhpcy5tYXhJbmRleD10LHRoaXMuYnVja2V0VmFsdWU9ZSx0aGlzLm1pblZhbHVlPW4sdGhpcy5tYXhWYWx1ZT1ufXJldHVybiB0LnByb3RvdHlwZS5pc0luQnVja2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0PT10aGlzLmJ1Y2tldFZhbHVlfSx0LnByb3RvdHlwZS5hZGRUb0J1Y2tldD1mdW5jdGlvbih0LGUpe3Q8dGhpcy5taW5WYWx1ZSYmKHRoaXMubWluVmFsdWU9dCx0aGlzLm1pbkluZGV4PWUpLHQ+dGhpcy5tYXhWYWx1ZSYmKHRoaXMubWF4VmFsdWU9dCx0aGlzLm1heEluZGV4PWUpLHRoaXMuZXhpdEluZGV4PWV9LHQucHJvdG90eXBlLmdldFVuaXF1ZUluZGljZXM9ZnVuY3Rpb24oKXt2YXIgdD1bdGhpcy5lbnRyeUluZGV4LHRoaXMubWF4SW5kZXgsdGhpcy5taW5JbmRleCx0aGlzLmV4aXRJbmRleF07cmV0dXJuIHQuZmlsdGVyKChmdW5jdGlvbihlLG4pe3JldHVybiAwPT1ufHxlIT10W24tMV19KSl9LHR9KSgpO2UuQnVja2V0PW59KSksX210PWJlKChmdW5jdGlvbih0LGUpewovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpeyJmdW5jdGlvbiI9PXR5cGVvZiB3aW5kb3cuU2V0P3RoaXMuX2VzNlNldD1uZXcgd2luZG93LlNldDp0aGlzLl92YWx1ZXM9W10sdGhpcy5zaXplPTB9cmV0dXJuIHQucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9dGhpcy5fZXM2U2V0Pyh0aGlzLl9lczZTZXQuYWRkKHQpLHRoaXMuc2l6ZT10aGlzLl9lczZTZXQuc2l6ZSx0aGlzKToodGhpcy5oYXModCl8fCh0aGlzLl92YWx1ZXMucHVzaCh0KSx0aGlzLnNpemU9dGhpcy5fdmFsdWVzLmxlbmd0aCksdGhpcyl9LHQucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbih0KXtpZihudWxsIT10aGlzLl9lczZTZXQpe3ZhciBlPXRoaXMuX2VzNlNldC5kZWxldGUodCk7cmV0dXJuIHRoaXMuc2l6ZT10aGlzLl9lczZTZXQuc2l6ZSxlfXZhciBuPXRoaXMuX3ZhbHVlcy5pbmRleE9mKHQpO3JldHVybi0xIT09biYmKHRoaXMuX3ZhbHVlcy5zcGxpY2UobiwxKSx0aGlzLnNpemU9dGhpcy5fdmFsdWVzLmxlbmd0aCwhMCl9LHQucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9dGhpcy5fZXM2U2V0P3RoaXMuX2VzNlNldC5oYXModCk6LTEhPT10aGlzLl92YWx1ZXMuaW5kZXhPZih0KX0sdC5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7bnVsbD09dGhpcy5fZXM2U2V0P3RoaXMuX3ZhbHVlcy5mb3JFYWNoKChmdW5jdGlvbihpKXt0LmNhbGwoZSxpLGksbil9KSk6dGhpcy5fZXM2U2V0LmZvckVhY2goKGZ1bmN0aW9uKGkscil7cmV0dXJuIHQuY2FsbChlLGkscixuKX0pLGUpfSx0fSkoKTtlLlNldD1ufSkpLHltdD1iZSgoZnVuY3Rpb24odCxlKXsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gRGZ0Ll9fZXh0ZW5kcyhlLHQpLGUucHJvdG90eXBlLmNhbGxDYWxsYmFja3M9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcyxlPVtdLG49MDtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbl09YXJndW1lbnRzW25dO3JldHVybiB0aGlzLmZvckVhY2goKGZ1bmN0aW9uKG4pe24uYXBwbHkodCxlKX0pKSx0aGlzfSxlfSkoX210LlNldCk7ZS5DYWxsYmFja1NldD1ufSkpLHZtdD1iZSgoZnVuY3Rpb24odCxlKXsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPShmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLl9lbnRpdGllcz1bXSx0aGlzLl9ydHJlZT1uZXcgZG10LlJUcmVlfXJldHVybiB0LnByb3RvdHlwZS5hZGRBbGw9ZnVuY3Rpb24odCxlLG4pe2lmKHRoaXMuX2VudGl0aWVzPXRoaXMuX2VudGl0aWVzLmNvbmNhdCh0KSx2b2lkIDAhPT1uKWZvcih2YXIgaT1kbXQuUlRyZWVCb3VuZHMuYm91bmRzKG4pLHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG89ZG10LlJUcmVlQm91bmRzLmVudGl0eUJvdW5kcyhlKGE9dFtyXSkpO2RtdC5SVHJlZUJvdW5kcy5pc0JvdW5kc092ZXJsYXBCb3VuZHMoaSxvKSYmdGhpcy5fcnRyZWUuaW5zZXJ0KG8sYSl9ZWxzZSBmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYTtvPWRtdC5SVHJlZUJvdW5kcy5lbnRpdHlCb3VuZHMoZShhPXRbcl0pKSx0aGlzLl9ydHJlZS5pbnNlcnQobyxhKX19LHQucHJvdG90eXBlLmVudGl0eU5lYXJlc3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3J0cmVlLmxvY2F0ZU5lYXJlc3QodCkucG9wKCl9LHQucHJvdG90eXBlLmVudGl0eU5lYXJlc3RYPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ydHJlZS5sb2NhdGVOZWFyZXN0WCh0KS5wb3AoKX0sdC5wcm90b3R5cGUuZW50aXR5TmVhcmVzdFk9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3J0cmVlLmxvY2F0ZU5lYXJlc3RZKHQpLnBvcCgpfSx0LnByb3RvdHlwZS5lbnRpdGllc0luQm91bmRzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ydHJlZS5pbnRlcnNlY3QoZG10LlJUcmVlQm91bmRzLmVudGl0eUJvdW5kcyh0KSl9LHQucHJvdG90eXBlLmVudGl0aWVzSW5YQm91bmRzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ydHJlZS5pbnRlcnNlY3RYKGRtdC5SVHJlZUJvdW5kcy5lbnRpdHlCb3VuZHModCkpfSx0LnByb3RvdHlwZS5lbnRpdGllc0luWUJvdW5kcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcnRyZWUuaW50ZXJzZWN0WShkbXQuUlRyZWVCb3VuZHMuZW50aXR5Qm91bmRzKHQpKX0sdC5wcm90b3R5cGUuZW50aXRpZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZW50aXRpZXN9LHR9KSgpO2UuRW50aXR5U3RvcmU9bn0pKSxibXQ9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7ImZ1bmN0aW9uIj09dHlwZW9mIHdpbmRvdy5NYXA/dGhpcy5fZXM2TWFwPW5ldyB3aW5kb3cuTWFwOnRoaXMuX2tleVZhbHVlUGFpcnM9W119cmV0dXJuIHQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0LGUpe2lmKHVtdC5pc05hTih0KSl0aHJvdyBuZXcgRXJyb3IoIk5hTiBtYXkgbm90IGJlIHVzZWQgYXMgYSBrZXkgdG8gdGhlIE1hcCIpO2lmKG51bGwhPXRoaXMuX2VzNk1hcClyZXR1cm4gdGhpcy5fZXM2TWFwLnNldCh0LGUpLHRoaXM7Zm9yKHZhciBuPTA7bjx0aGlzLl9rZXlWYWx1ZVBhaXJzLmxlbmd0aDtuKyspaWYodGhpcy5fa2V5VmFsdWVQYWlyc1tuXS5rZXk9PT10KXJldHVybiB0aGlzLl9rZXlWYWx1ZVBhaXJzW25dLnZhbHVlPWUsdGhpcztyZXR1cm4gdGhpcy5fa2V5VmFsdWVQYWlycy5wdXNoKHtrZXk6dCx2YWx1ZTplfSksdGhpc30sdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe2lmKG51bGwhPXRoaXMuX2VzNk1hcClyZXR1cm4gdGhpcy5fZXM2TWFwLmdldCh0KTtmb3IodmFyIGU9MDtlPHRoaXMuX2tleVZhbHVlUGFpcnMubGVuZ3RoO2UrKylpZih0aGlzLl9rZXlWYWx1ZVBhaXJzW2VdLmtleT09PXQpcmV0dXJuIHRoaXMuX2tleVZhbHVlUGFpcnNbZV0udmFsdWV9LHQucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtpZihudWxsIT10aGlzLl9lczZNYXApcmV0dXJuIHRoaXMuX2VzNk1hcC5oYXModCk7Zm9yKHZhciBlPTA7ZTx0aGlzLl9rZXlWYWx1ZVBhaXJzLmxlbmd0aDtlKyspaWYodGhpcy5fa2V5VmFsdWVQYWlyc1tlXS5rZXk9PT10KXJldHVybiEwO3JldHVybiExfSx0LnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztudWxsPT10aGlzLl9lczZNYXA/dGhpcy5fa2V5VmFsdWVQYWlycy5mb3JFYWNoKChmdW5jdGlvbihpKXt0LmNhbGwoZSxpLnZhbHVlLGkua2V5LG4pfSkpOnRoaXMuX2VzNk1hcC5mb3JFYWNoKChmdW5jdGlvbihpLHIpe3JldHVybiB0LmNhbGwoZSxpLHIsbil9KSxlKX0sdC5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKHQpe2lmKG51bGwhPXRoaXMuX2VzNk1hcClyZXR1cm4gdGhpcy5fZXM2TWFwLmRlbGV0ZSh0KTtmb3IodmFyIGU9MDtlPHRoaXMuX2tleVZhbHVlUGFpcnMubGVuZ3RoO2UrKylpZih0aGlzLl9rZXlWYWx1ZVBhaXJzW2VdLmtleT09PXQpcmV0dXJuIHRoaXMuX2tleVZhbHVlUGFpcnMuc3BsaWNlKGUsMSksITA7cmV0dXJuITF9LHR9KSgpO2UuTWFwPW59KSkseG10PWJlKChmdW5jdGlvbih0LGUpewovKioKICAgICAqIENvcHlyaWdodCAyMDE3LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5hc3NpZ249ZnVuY3Rpb24gbigpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0W2VdPWFyZ3VtZW50c1tlXTtmb3IodmFyIG49e30saT0wLHI9dDtpPHIubGVuZ3RoO2krKylmb3IodmFyIG89cltpXSxhPU9iamVjdC5rZXlzKG8pLHM9MCxsPWE7czxsLmxlbmd0aDtzKyspe3ZhciBjPWxbc107bltjXT1vW2NdfXJldHVybiBufX0pKSx3bXQ9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTctcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0iX19QbG90dGFibGVfQ2xpZW50VHJhbnNsYXRvciI7ZS5nZXRUcmFuc2xhdG9yPWZ1bmN0aW9uIGkodCl7dmFyIGU9dC5yb290KCkucm9vdEVsZW1lbnQoKS5ub2RlKCksaT1lW25dO3JldHVybiBudWxsPT1pJiYoaT1uZXcgcihlKSxlW25dPWkpLGl9O3ZhciByPShmdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5fcm9vdEVsZW1lbnQ9dH1yZXR1cm4gdC5wcm90b3R5cGUuY29tcHV0ZVBvc2l0aW9uPWZ1bmN0aW9uKHQsZSl7dmFyIG49e3g6dCx5OmV9LGk9U210Lk1hdGguZ2V0Q3VtdWxhdGl2ZVRyYW5zZm9ybSh0aGlzLl9yb290RWxlbWVudCk7cmV0dXJuIG51bGw9PWk/bjpTbXQuTWF0aC5hcHBseVRyYW5zZm9ybShpLG4pfSx0LmlzRXZlbnRJbnNpZGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gU210LkRPTS5jb250YWlucyh0LnJvb3QoKS5yb290RWxlbWVudCgpLm5vZGUoKSxlLnRhcmdldCl9LHR9KSgpO2UuVHJhbnNsYXRvcj1yfSkpLFNtdD1iZSgoZnVuY3Rpb24odCxlKXsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuQXJyYXk9c210LGUuQ29sb3I9bG10LGUuRE9NPWNtdCxlLk1hdGg9dW10LGUuUlRyZWU9ZG10LGUuU3RhY2tpbmc9cG10LGUuV2luZG93PW1tdCxEZnQuX19leHBvcnRTdGFyKGdtdCxlKSxEZnQuX19leHBvcnRTdGFyKHltdCxlKSxEZnQuX19leHBvcnRTdGFyKE5mdCxlKSxEZnQuX19leHBvcnRTdGFyKHZtdCxlKSxEZnQuX19leHBvcnRTdGFyKGJtdCxlKSxEZnQuX19leHBvcnRTdGFyKHhtdCxlKSxEZnQuX19leHBvcnRTdGFyKF9tdCxlKSxEZnQuX19leHBvcnRTdGFyKHdtdCxlKX0pKSxNbXQ9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtFbXQuZmx1c2goKX0sdH0pKCk7ZS5JbW1lZGlhdGU9bjt2YXIgaT0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtTbXQuRE9NLnJlcXVlc3RBbmltYXRpb25GcmFtZVBvbHlmaWxsKEVtdC5mbHVzaCl9LHR9KSgpO2UuQW5pbWF0aW9uRnJhbWU9aTt2YXIgcj0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5fdGltZW91dE1zZWM9U210LkRPTS5TQ1JFRU5fUkVGUkVTSF9SQVRFX01JTExJU0VDT05EU31yZXR1cm4gdC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7c2V0VGltZW91dChFbXQuZmx1c2gsdGhpcy5fdGltZW91dE1zZWMpfSx0fSkoKTtlLlRpbWVvdXQ9cn0pKSxFbXQ9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1uZXcgU210LlNldCxpPW5ldyBTbXQuU2V0LHI9ITEsbz0hMTtlLlBvbGljeT1JZnQubWFrZUVudW0oWyJpbW1lZGlhdGUiLCJhbmltYXRpb25GcmFtZSIsInRpbWVvdXQiXSk7dmFyIGE9bmV3IE1tdC5BbmltYXRpb25GcmFtZTtmdW5jdGlvbiBzKHQpe2kuYWRkKHQpLG4uYWRkKHQpLGwoKX1mdW5jdGlvbiBsKCl7cnx8KHI9ITAsYS5yZW5kZXIoKSl9ZS5yZW5kZXJQb2xpY3k9ZnVuY3Rpb24gYyh0KXtpZihudWxsPT10KXJldHVybiBhO3N3aXRjaCh0KXtjYXNlIGUuUG9saWN5LmltbWVkaWF0ZTphPW5ldyBNbXQuSW1tZWRpYXRlO2JyZWFrO2Nhc2UgZS5Qb2xpY3kuYW5pbWF0aW9uRnJhbWU6YT1uZXcgTW10LkFuaW1hdGlvbkZyYW1lO2JyZWFrO2Nhc2UgZS5Qb2xpY3kudGltZW91dDphPW5ldyBNbXQuVGltZW91dDticmVhaztkZWZhdWx0OlNtdC5XaW5kb3cud2FybigiVW5yZWNvZ25pemVkIHJlbmRlclBvbGljeTogIit0KX19LGUucmVnaXN0ZXJUb1JlbmRlcj1mdW5jdGlvbiB1KHQpe28mJlNtdC5XaW5kb3cud2FybigiUmVnaXN0ZXJlZCB0byByZW5kZXIgd2hpbGUgb3RoZXIgY29tcG9uZW50cyBhcmUgZmx1c2hpbmc6IHJlcXVlc3QgbWF5IGJlIGlnbm9yZWQiKSxuLmFkZCh0KSxsKCl9LGUucmVnaXN0ZXJUb0NvbXB1dGVMYXlvdXRBbmRSZW5kZXI9cyxlLnJlZ2lzdGVyVG9Db21wdXRlTGF5b3V0PWZ1bmN0aW9uIGgodCl7cyh0KX0sZS5mbHVzaD1mdW5jdGlvbiBkKCl7aWYocil7aS5mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gdC5jb21wdXRlTGF5b3V0KCl9KSksbi5mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gdC5yZW5kZXIoKX0pKSxvPSEwO3ZhciB0PW5ldyBTbXQuU2V0O24uZm9yRWFjaCgoZnVuY3Rpb24oZSl7dHJ5e2UucmVuZGVySW1tZWRpYXRlbHkoKX1jYXRjaChuKXt3aW5kb3cuc2V0VGltZW91dCgoZnVuY3Rpb24oKXt0aHJvdyBufSksMCksdC5hZGQoZSl9fSkpLGk9bmV3IFNtdC5TZXQsbj10LHI9ITEsbz0hMX19fSkpLFRtdD1iZSgoZnVuY3Rpb24odCxlKXsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuWEFsaWdubWVudD1JZnQubWFrZUVudW0oWyJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXSksZS5ZQWxpZ25tZW50PUlmdC5tYWtlRW51bShbInRvcCIsImNlbnRlciIsImJvdHRvbSJdKTt2YXIgbj0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5fb3ZlcmZsb3dIaWRkZW49ITEsdGhpcy5fb3JpZ2luPXt4OjAseTowfSx0aGlzLl94QWxpZ25tZW50PSJsZWZ0Iix0aGlzLl95QWxpZ25tZW50PSJ0b3AiLHRoaXMuX2lzU2V0dXA9ITEsdGhpcy5faXNBbmNob3JlZD0hMSx0aGlzLl9jc3NDbGFzc2VzPW5ldyBTbXQuU2V0LHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9vbkFuY2hvckNhbGxiYWNrcz1uZXcgU210LkNhbGxiYWNrU2V0LHRoaXMuX29uRGV0YWNoQ2FsbGJhY2tzPW5ldyBTbXQuQ2FsbGJhY2tTZXQsdGhpcy5fY3NzQ2xhc3Nlcy5hZGQoImNvbXBvbmVudCIpfXJldHVybiB0LnByb3RvdHlwZS5hbmNob3I9ZnVuY3Rpb24odCl7aWYodD1OZnQuY29lcmNlRXh0ZXJuYWxEMyh0KSx0aGlzLl9kZXN0cm95ZWQpdGhyb3cgbmV3IEVycm9yKCJDYW4ndCByZXVzZSBkZXN0cm95KCktZWQgQ29tcG9uZW50cyEiKTtyZXR1cm4gdGhpcy5pc1Jvb3QoKSYmKHRoaXMuX3Jvb3RFbGVtZW50PXQsdGhpcy5fcm9vdEVsZW1lbnQuY2xhc3NlZCgicGxvdHRhYmxlIiwhMCkpLG51bGwhPXRoaXMuX2VsZW1lbnQ/dC5ub2RlKCkuYXBwZW5kQ2hpbGQodGhpcy5fZWxlbWVudC5ub2RlKCkpOih0aGlzLl9lbGVtZW50PXQuYXBwZW5kKCJkaXYiKSx0aGlzLl9zZXR1cCgpKSx0aGlzLl9pc0FuY2hvcmVkPSEwLHRoaXMuX29uQW5jaG9yQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3ModGhpcyksdGhpc30sdC5wcm90b3R5cGUub25BbmNob3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2lzQW5jaG9yZWQmJnQodGhpcyksdGhpcy5fb25BbmNob3JDYWxsYmFja3MuYWRkKHQpLHRoaXN9LHQucHJvdG90eXBlLm9mZkFuY2hvcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fb25BbmNob3JDYWxsYmFja3MuZGVsZXRlKHQpLHRoaXN9LHQucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5faXNTZXR1cHx8KHRoaXMuX2Nzc0NsYXNzZXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dC5fZWxlbWVudC5jbGFzc2VkKGUsITApfSkpLHRoaXMuX2Nzc0NsYXNzZXM9bmV3IFNtdC5TZXQsdGhpcy5fYmFja2dyb3VuZENvbnRhaW5lcj10aGlzLl9lbGVtZW50LmFwcGVuZCgic3ZnIikuY2xhc3NlZCgiYmFja2dyb3VuZC1jb250YWluZXIiLCEwKSx0aGlzLl9jb250ZW50PXRoaXMuX2VsZW1lbnQuYXBwZW5kKCJzdmciKS5jbGFzc2VkKCJjb250ZW50IiwhMCksdGhpcy5fZm9yZWdyb3VuZENvbnRhaW5lcj10aGlzLl9lbGVtZW50LmFwcGVuZCgic3ZnIikuY2xhc3NlZCgiZm9yZWdyb3VuZC1jb250YWluZXIiLCEwKSx0aGlzLl9jb250ZW50LmNsYXNzZWQodGhpcy5fb3ZlcmZsb3dIaWRkZW4/ImNvbXBvbmVudC1vdmVyZmxvdy1oaWRkZW4iOiJjb21wb25lbnQtb3ZlcmZsb3ctdmlzaWJsZSIsITApLHRoaXMuX2lzU2V0dXA9ITApfSx0LnByb3RvdHlwZS5yZXF1ZXN0ZWRTcGFjZT1mdW5jdGlvbih0LGUpe3JldHVybnttaW5XaWR0aDowLG1pbkhlaWdodDowfX0sdC5wcm90b3R5cGUuY29tcHV0ZUxheW91dD1mdW5jdGlvbihlLG4saSl7aWYobnVsbD09ZXx8bnVsbD09bnx8bnVsbD09aSl7aWYobnVsbD09dGhpcy5fZWxlbWVudCl0aHJvdyBuZXcgRXJyb3IoImFuY2hvcigpIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBjb21wdXRlTGF5b3V0KCkiKTtpZihudWxsPT10aGlzLl9yb290RWxlbWVudCl0aHJvdyBuZXcgRXJyb3IoIm51bGwgYXJndW1lbnRzIGNhbm5vdCBiZSBwYXNzZWQgdG8gY29tcHV0ZUxheW91dCgpIG9uIGEgbm9uLXJvb3QsIHVuYW5jaG9yZWQgbm9kZSIpO2U9e3g6MCx5OjB9O3ZhciByPXRoaXMuX3Jvb3RFbGVtZW50Lm5vZGUoKTtuPVNtdC5ET00uZWxlbWVudFdpZHRoKHIpLGk9U210LkRPTS5lbGVtZW50SGVpZ2h0KHIpfXZhciBvPXRoaXMuX3NpemVGcm9tT2ZmZXIobixpKSxhPW8uaGVpZ2h0LHM9by53aWR0aDtyZXR1cm4gdGhpcy5zZXRCb3VuZHMocyxhLGUueCsobi1zKSp0Ll94QWxpZ25Ub1Byb3BvcnRpb25bdGhpcy5feEFsaWdubWVudF0sZS55KyhpLWEpKnQuX3lBbGlnblRvUHJvcG9ydGlvblt0aGlzLl95QWxpZ25tZW50XSksdGhpc30sdC5wcm90b3R5cGUuc2V0Qm91bmRzPWZ1bmN0aW9uKHQsZSxuLGkpe3JldHVybiB2b2lkIDA9PT1uJiYobj0wKSx2b2lkIDA9PT1pJiYoaT0wKSx0aGlzLl93aWR0aD10LHRoaXMuX2hlaWdodD1lLHRoaXMuX29yaWdpbj17eDpuLHk6aX0sbnVsbCE9dGhpcy5fZWxlbWVudCYmdGhpcy5fZWxlbWVudC5zdHlsZXMoe2xlZnQ6bisicHgiLGhlaWdodDplKyJweCIsdG9wOmkrInB4Iix3aWR0aDp0KyJweCJ9KSxudWxsIT10aGlzLl9yZXNpemVIYW5kbGVyJiZ0aGlzLl9yZXNpemVIYW5kbGVyKHt3aWR0aDp0LGhlaWdodDplfSksdGhpc30sdC5wcm90b3R5cGUuX3NpemVGcm9tT2ZmZXI9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLnJlcXVlc3RlZFNwYWNlKHQsZSk7cmV0dXJue3dpZHRoOnRoaXMuZml4ZWRXaWR0aCgpP01hdGgubWluKHQsbi5taW5XaWR0aCk6dCxoZWlnaHQ6dGhpcy5maXhlZEhlaWdodCgpP01hdGgubWluKGUsbi5taW5IZWlnaHQpOmV9fSx0LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNBbmNob3JlZCYmdGhpcy5faXNTZXR1cCYmdGhpcy53aWR0aCgpPj0wJiZ0aGlzLmhlaWdodCgpPj0wJiZFbXQucmVnaXN0ZXJUb1JlbmRlcih0aGlzKSx0aGlzfSx0LnByb3RvdHlwZS5yZW5kZXJMb3dQcmlvcml0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlbmRlcigpfSx0LnByb3RvdHlwZS5fc2NoZWR1bGVDb21wdXRlTGF5b3V0PWZ1bmN0aW9uKCl7dGhpcy5faXNBbmNob3JlZCYmdGhpcy5faXNTZXR1cCYmRW10LnJlZ2lzdGVyVG9Db21wdXRlTGF5b3V0QW5kUmVuZGVyKHRoaXMpfSx0LnByb3RvdHlwZS5vblJlc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmVzaXplSGFuZGxlcj10LHRoaXN9LHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLnJlZHJhdz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc0FuY2hvcmVkJiZ0aGlzLl9pc1NldHVwJiYodGhpcy5pc1Jvb3QoKT90aGlzLl9zY2hlZHVsZUNvbXB1dGVMYXlvdXQoKTp0aGlzLnBhcmVudCgpLnJlZHJhdygpKSx0aGlzfSx0LnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGU9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLnJlbmRlclRvPWZ1bmN0aW9uKHQpe2lmKHRoaXMuZGV0YWNoKCksbnVsbCE9dCl7dmFyIGU9dm9pZCAwO2lmKCEoZT0ic3RyaW5nIj09dHlwZW9mIHR8fHdlLmlzRWxlbWVudCh0KT9pZHQuc2VsZWN0KHQpOk5mdC5jb2VyY2VFeHRlcm5hbEQzKHQpKS5ub2RlKCl8fG51bGw9PWUubm9kZSgpLm5vZGVOYW1lKXRocm93IG5ldyBFcnJvcigiUGxvdHRhYmxlIHJlcXVpcmVzIGEgdmFsaWQgRWxlbWVudCB0byByZW5kZXJUbyIpO2lmKCJzdmciPT09ZS5ub2RlKCkubm9kZU5hbWUpdGhyb3cgbmV3IEVycm9yKCJQbG90dGFibGUgMy54IGFuZCBsYXRlciBjYW4gb25seSByZW5kZXJUbyBhbiBIVE1MIGNvbXBvbmVudDsgcGFzcyBhIGRpdiBpbnN0ZWFkISIpO3RoaXMuYW5jaG9yKGUpfWlmKG51bGw9PXRoaXMuX2VsZW1lbnQpdGhyb3cgbmV3IEVycm9yKCJJZiBhIENvbXBvbmVudCBoYXMgbmV2ZXIgYmVlbiByZW5kZXJlZCBiZWZvcmUsIHRoZW4gcmVuZGVyVG8gbXVzdCBiZSBnaXZlbiBhIG5vZGUgdG8gcmVuZGVyIHRvLCBvciBhIGQzLlNlbGVjdGlvbiwgb3IgYSBzZWxlY3RvciBzdHJpbmciKTtyZXR1cm4gRW10LnJlZ2lzdGVyVG9Db21wdXRlTGF5b3V0QW5kUmVuZGVyKHRoaXMpLEVtdC5mbHVzaCgpLHRoaXN9LHQucHJvdG90eXBlLnhBbGlnbm1lbnQ9ZnVuY3Rpb24oZSl7aWYobnVsbD09ZSlyZXR1cm4gdGhpcy5feEFsaWdubWVudDtpZihlPWUudG9Mb3dlckNhc2UoKSxudWxsPT10Ll94QWxpZ25Ub1Byb3BvcnRpb25bZV0pdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBhbGlnbm1lbnQ6ICIrZSk7cmV0dXJuIHRoaXMuX3hBbGlnbm1lbnQ9ZSx0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLnlBbGlnbm1lbnQ9ZnVuY3Rpb24oZSl7aWYobnVsbD09ZSlyZXR1cm4gdGhpcy5feUFsaWdubWVudDtpZihlPWUudG9Mb3dlckNhc2UoKSxudWxsPT10Ll95QWxpZ25Ub1Byb3BvcnRpb25bZV0pdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBhbGlnbm1lbnQ6ICIrZSk7cmV0dXJuIHRoaXMuX3lBbGlnbm1lbnQ9ZSx0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLmhhc0NsYXNzPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT10JiYobnVsbD09dGhpcy5fZWxlbWVudD90aGlzLl9jc3NDbGFzc2VzLmhhcyh0KTp0aGlzLl9lbGVtZW50LmNsYXNzZWQodCkpfSx0LnByb3RvdHlwZS5hZGRDbGFzcz1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dHx8KG51bGw9PXRoaXMuX2VsZW1lbnQ/dGhpcy5fY3NzQ2xhc3Nlcy5hZGQodCk6dGhpcy5fZWxlbWVudC5jbGFzc2VkKHQsITApKSx0aGlzfSx0LnByb3RvdHlwZS5yZW1vdmVDbGFzcz1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dHx8KG51bGw9PXRoaXMuX2VsZW1lbnQ/dGhpcy5fY3NzQ2xhc3Nlcy5kZWxldGUodCk6dGhpcy5fZWxlbWVudC5jbGFzc2VkKHQsITEpKSx0aGlzfSx0LnByb3RvdHlwZS5maXhlZFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuITF9LHQucHJvdG90eXBlLmZpeGVkSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuITF9LHQucHJvdG90eXBlLmRldGFjaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcmVudChudWxsKSx0aGlzLl9pc0FuY2hvcmVkJiZ0aGlzLl9lbGVtZW50LnJlbW92ZSgpLHRoaXMuX2lzQW5jaG9yZWQ9ITEsdGhpcy5fb25EZXRhY2hDYWxsYmFja3MuY2FsbENhbGxiYWNrcyh0aGlzKSx0aGlzfSx0LnByb3RvdHlwZS5vbkRldGFjaD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fb25EZXRhY2hDYWxsYmFja3MuYWRkKHQpLHRoaXN9LHQucHJvdG90eXBlLm9mZkRldGFjaD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fb25EZXRhY2hDYWxsYmFja3MuZGVsZXRlKHQpLHRoaXN9LHQucHJvdG90eXBlLnBhcmVudD1mdW5jdGlvbih0KXtpZih2b2lkIDA9PT10KXJldHVybiB0aGlzLl9wYXJlbnQ7aWYobnVsbCE9PXQmJiF0Lmhhcyh0aGlzKSl0aHJvdyBuZXcgRXJyb3IoIlBhc3NlZCBpbnZhbGlkIHBhcmVudCIpO3JldHVybiB0aGlzLl9wYXJlbnQ9dCx0aGlzfSx0LnByb3RvdHlwZS5ib3VuZHM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9yaWdpbigpO3JldHVybnt0b3BMZWZ0OnQsYm90dG9tUmlnaHQ6e3g6dC54K3RoaXMud2lkdGgoKSx5OnQueSt0aGlzLmhlaWdodCgpfX19LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy5kZXRhY2goKX0sdC5wcm90b3R5cGUud2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd2lkdGh9LHQucHJvdG90eXBlLmhlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9oZWlnaHR9LHQucHJvdG90eXBlLm9yaWdpbj1mdW5jdGlvbigpe3JldHVybnt4OnRoaXMuX29yaWdpbi54LHk6dGhpcy5fb3JpZ2luLnl9fSx0LnByb3RvdHlwZS5vcmlnaW5Ub1Jvb3Q9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5vcmlnaW4oKSxlPXRoaXMucGFyZW50KCk7bnVsbCE9ZTspe3ZhciBuPWUub3JpZ2luKCk7dC54Kz1uLngsdC55Kz1uLnksZT1lLnBhcmVudCgpfXJldHVybiB0fSx0LnByb3RvdHlwZS5yb290PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXM7IXQuaXNSb290KCk7KXQ9dC5wYXJlbnQoKTtyZXR1cm4gdH0sdC5wcm90b3R5cGUuaXNSb290PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PXRoaXMucGFyZW50KCl9LHQucHJvdG90eXBlLmZvcmVncm91bmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZm9yZWdyb3VuZENvbnRhaW5lcn0sdC5wcm90b3R5cGUuY29udGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250ZW50fSx0LnByb3RvdHlwZS5lbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VsZW1lbnR9LHQucHJvdG90eXBlLnJvb3RFbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdCgpLl9yb290RWxlbWVudH0sdC5wcm90b3R5cGUuYmFja2dyb3VuZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYWNrZ3JvdW5kQ29udGFpbmVyfSx0Ll94QWxpZ25Ub1Byb3BvcnRpb249e2xlZnQ6MCxjZW50ZXI6LjUscmlnaHQ6MX0sdC5feUFsaWduVG9Qcm9wb3J0aW9uPXt0b3A6MCxjZW50ZXI6LjUsYm90dG9tOjF9LHR9KSgpO2UuQ29tcG9uZW50PW59KSksQ210PWJlKChmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PTMpLGkodCksZnVuY3Rpb24oZSl7cmV0dXJuIGUudG9GaXhlZCh0KX19ZnVuY3Rpb24gaSh0KXtpZih0PDB8fHQ+MjApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkZvcm1hdHRlciBwcmVjaXNpb24gbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDIwIik7aWYodCE9PU1hdGguZmxvb3IodCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkZvcm1hdHRlciBwcmVjaXNpb24gbXVzdCBiZSBhbiBpbnRlZ2VyIil9Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLmN1cnJlbmN5PWZ1bmN0aW9uIHIodCxlLGkpe3ZvaWQgMD09PXQmJih0PTIpLHZvaWQgMD09PWUmJihlPSIkIiksdm9pZCAwPT09aSYmKGk9ITApO3ZhciByPW4odCk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBuPXIoTWF0aC5hYnModCkpO3JldHVybiIiIT09biYmKGk/bj1lK246bis9ZSx0PDAmJihuPSItIituKSksbn19LGUuZml4ZWQ9bixlLmdlbmVyYWw9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9MyksaSh0KSxmdW5jdGlvbihlKXtpZigibnVtYmVyIj09dHlwZW9mIGUpe3ZhciBuPU1hdGgucG93KDEwLHQpO3JldHVybiBTdHJpbmcoTWF0aC5yb3VuZChlKm4pL24pfXJldHVybiBTdHJpbmcoZSl9fSxlLmlkZW50aXR5PWZ1bmN0aW9uIGEoKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIFN0cmluZyh0KX19LGUucGVyY2VudGFnZT1mdW5jdGlvbiBzKHQpe3ZvaWQgMD09PXQmJih0PTApO3ZhciBlPW4odCk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBuPTEwMCp0LGk9dC50b1N0cmluZygpLHI9TWF0aC5wb3coMTAsaS5sZW5ndGgtKGkuaW5kZXhPZigiLiIpKzEpKTtyZXR1cm4gbj1wYXJzZUludCgobipyKS50b1N0cmluZygpLDEwKS9yLGUobikrIiUifX0sZS5zaVN1ZmZpeD1mdW5jdGlvbiBsKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0zKSxpKHQpLGZ1bmN0aW9uKGUpe3JldHVybiBpZHQuZm9ybWF0KCIuIit0KyJzIikoZSl9fSxlLnNob3J0U2NhbGU9ZnVuY3Rpb24gYyh0KXt2b2lkIDA9PT10JiYodD0zKSxpKHQpO3ZhciBlPSJLTUJUUSIsbj1pZHQuZm9ybWF0KCIuIit0KyJlIikscj1pZHQuZm9ybWF0KCIuIit0KyJmIiksbz1NYXRoLnBvdygxMCwzKihlLmxlbmd0aCsxKSksYT1NYXRoLnBvdygxMCwtdCk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBpPU1hdGguYWJzKHQpO2lmKChpPGF8fGk+PW8pJiYwIT09aSlyZXR1cm4gbih0KTtmb3IodmFyIHM9LTE7aT49TWF0aC5wb3coMWUzLHMrMikmJnM8ZS5sZW5ndGgtMTspcysrO3ZhciBsPSIiO3JldHVybiBsPS0xPT09cz9yKHQpOnIodC9NYXRoLnBvdygxZTMscysxKSkrZVtzXSwodD4wJiYiMTAwMCI9PT1sLnN1YnN0cigwLDQpfHx0PDAmJiItMTAwMCI9PT1sLnN1YnN0cigwLDUpKSYmKHM8ZS5sZW5ndGgtMT8ocysrLGw9cih0L01hdGgucG93KDFlMyxzKzEpKStlW3NdKTpsPW4odCkpLGx9fSxlLm11bHRpVGltZT1mdW5jdGlvbiB1KCl7dmFyIHQ9W3tzcGVjaWZpZXI6Ii4lTCIscHJlZGljYXRlOmZ1bmN0aW9uKHQpe3JldHVybiAwIT09dC5nZXRNaWxsaXNlY29uZHMoKX19LHtzcGVjaWZpZXI6IjolUyIscHJlZGljYXRlOmZ1bmN0aW9uKHQpe3JldHVybiAwIT09dC5nZXRTZWNvbmRzKCl9fSx7c3BlY2lmaWVyOiIlSTolTSIscHJlZGljYXRlOmZ1bmN0aW9uKHQpe3JldHVybiAwIT09dC5nZXRNaW51dGVzKCl9fSx7c3BlY2lmaWVyOiIlSSAlcCIscHJlZGljYXRlOmZ1bmN0aW9uKHQpe3JldHVybiAwIT09dC5nZXRIb3VycygpfX0se3NwZWNpZmllcjoiJWEgJWQiLHByZWRpY2F0ZTpmdW5jdGlvbih0KXtyZXR1cm4gMCE9PXQuZ2V0RGF5KCkmJjEhPT10LmdldERhdGUoKX19LHtzcGVjaWZpZXI6IiViICVkIixwcmVkaWNhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIDEhPT10LmdldERhdGUoKX19LHtzcGVjaWZpZXI6IiViIixwcmVkaWNhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIDAhPT10LmdldE1vbnRoKCl9fV07cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPXQuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC5wcmVkaWNhdGUoZSl9KSk7cmV0dXJuIGlkdC50aW1lRm9ybWF0KG4ubGVuZ3RoPjA/blswXS5zcGVjaWZpZXI6IiVZIikoZSl9fSxlLnRpbWU9ZnVuY3Rpb24gaCh0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT0hMSksZT9pZHQudXRjRm9ybWF0KHQpOmlkdC50aW1lRm9ybWF0KHQpfX0pKSxBbXQ9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLkF4aXNPcmllbnRhdGlvbj1JZnQubWFrZUVudW0oWyJib3R0b20iLCJsZWZ0IiwicmlnaHQiLCJ0b3AiXSk7dmFyIG49KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgaT10LmNhbGwodGhpcyl8fHRoaXM7aWYoaS5fZW5kVGlja0xlbmd0aD01LGkuX2lubmVyVGlja0xlbmd0aD01LGkuX3RpY2tMYWJlbFBhZGRpbmc9MTAsaS5fbWFyZ2luPTE1LGkuX3Nob3dFbmRUaWNrTGFiZWxzPSExLGkuX2Fubm90YXRpb25zRW5hYmxlZD0hMSxpLl9hbm5vdGF0aW9uVGllckNvdW50PTEsbnVsbD09ZXx8bnVsbD09bil0aHJvdyBuZXcgRXJyb3IoIkF4aXMgcmVxdWlyZXMgYSBzY2FsZSBhbmQgb3JpZW50YXRpb24iKTtyZXR1cm4gaS5fc2NhbGU9ZSxpLm9yaWVudGF0aW9uKG4pLGkuX3NldERlZmF1bHRBbGlnbm1lbnQoKSxpLmFkZENsYXNzKCJheGlzIiksaS5pc0hvcml6b250YWwoKT9pLmFkZENsYXNzKCJ4LWF4aXMiKTppLmFkZENsYXNzKCJ5LWF4aXMiKSxpLmZvcm1hdHRlcihDbXQuaWRlbnRpdHkoKSksaS5fcmVzY2FsZUNhbGxiYWNrPWZ1bmN0aW9uKHQpe3JldHVybiBpLl9yZXNjYWxlKCl9LGkuX3NjYWxlLm9uVXBkYXRlKGkuX3Jlc2NhbGVDYWxsYmFjayksaS5fYW5ub3RhdGVkVGlja3M9W10saS5fYW5ub3RhdGlvbkZvcm1hdHRlcj1DbXQuaWRlbnRpdHkoKSxpfXJldHVybiBEZnQuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3QucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKSx0aGlzLl9zY2FsZS5vZmZVcGRhdGUodGhpcy5fcmVzY2FsZUNhbGxiYWNrKX0sZS5wcm90b3R5cGUudGlja0xhYmVsRGF0YU9uRWxlbWVudD1mdW5jdGlvbih0KXtpZihudWxsIT10KXtmb3IodmFyIG47bnVsbCE9dCYmdC5jbGFzc0xpc3QmJnZvaWQgMD09PW47KXQuY2xhc3NMaXN0LmNvbnRhaW5zKGUuVElDS19MQUJFTF9DTEFTUyk/bj10OnQ9dC5wYXJlbnROb2RlO3JldHVybiB2b2lkIDA9PT10P3ZvaWQgMDppZHQuc2VsZWN0KHQpLmRhdHVtKCl9fSxlLnByb3RvdHlwZS5fY29tcHV0ZVdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21heExhYmVsVGlja0xlbmd0aCgpfSxlLnByb3RvdHlwZS5fY29tcHV0ZUhlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXhMYWJlbFRpY2tMZW5ndGgoKX0sZS5wcm90b3R5cGUucmVxdWVzdGVkU3BhY2U9ZnVuY3Rpb24odCxuKXt2YXIgaT0wLHI9MDtyZXR1cm4gdGhpcy5pc0hvcml6b250YWwoKT8ocj10aGlzLl9jb21wdXRlSGVpZ2h0KCkrdGhpcy5fbWFyZ2luLHRoaXMuYW5ub3RhdGlvbnNFbmFibGVkKCkmJihyKz0odGhpcy5fYW5ub3RhdGlvbk1lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQrMiplLl9BTk5PVEFUSU9OX0xBQkVMX1BBRERJTkcpKnRoaXMuYW5ub3RhdGlvblRpZXJDb3VudCgpKSk6KGk9dGhpcy5fY29tcHV0ZVdpZHRoKCkrdGhpcy5fbWFyZ2luLHRoaXMuYW5ub3RhdGlvbnNFbmFibGVkKCkmJihpKz0odGhpcy5fYW5ub3RhdGlvbk1lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQrMiplLl9BTk5PVEFUSU9OX0xBQkVMX1BBRERJTkcpKnRoaXMuYW5ub3RhdGlvblRpZXJDb3VudCgpKSkse21pbldpZHRoOmksbWluSGVpZ2h0OnJ9fSxlLnByb3RvdHlwZS5maXhlZEhlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSG9yaXpvbnRhbCgpfSxlLnByb3RvdHlwZS5maXhlZFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuaXNIb3Jpem9udGFsKCl9LGUucHJvdG90eXBlLl9yZXNjYWxlPWZ1bmN0aW9uKCl7dGhpcy5yZW5kZXIoKX0sZS5wcm90b3R5cGUuY29tcHV0ZUxheW91dD1mdW5jdGlvbihlLG4saSl7cmV0dXJuIHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQuY2FsbCh0aGlzLGUsbixpKSx0aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMuX3NjYWxlLnJhbmdlKFswLHRoaXMud2lkdGgoKV0pOnRoaXMuX3NjYWxlLnJhbmdlKFt0aGlzLmhlaWdodCgpLDBdKSx0aGlzfSxlLnByb3RvdHlwZS5fc2l6ZUZyb21PZmZlcj1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMucmVxdWVzdGVkU3BhY2UodCxlKTtyZXR1cm4gdGhpcy5pc0hvcml6b250YWwoKT97d2lkdGg6dCxoZWlnaHQ6bi5taW5IZWlnaHR9OntoZWlnaHQ6ZSx3aWR0aDpuLm1pbldpZHRofX0sZS5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7dC5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyksdGhpcy5fdGlja01hcmtDb250YWluZXI9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIikuY2xhc3NlZChlLlRJQ0tfTUFSS19DTEFTUysiLWNvbnRhaW5lciIsITApLHRoaXMuX3RpY2tMYWJlbENvbnRhaW5lcj10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKGUuVElDS19MQUJFTF9DTEFTUysiLWNvbnRhaW5lciIsITApLHRoaXMuX2Jhc2VsaW5lPXRoaXMuY29udGVudCgpLmFwcGVuZCgibGluZSIpLmNsYXNzZWQoImJhc2VsaW5lIiwhMCksdGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lcj10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJhbm5vdGF0aW9uLWNvbnRhaW5lciIsITApLHRoaXMuX2Fubm90YXRpb25Db250YWluZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgiYW5ub3RhdGlvbi1saW5lLWNvbnRhaW5lciIsITApLHRoaXMuX2Fubm90YXRpb25Db250YWluZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgiYW5ub3RhdGlvbi1jaXJjbGUtY29udGFpbmVyIiwhMCksdGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5hcHBlbmQoImciKS5jbGFzc2VkKCJhbm5vdGF0aW9uLXJlY3QtY29udGFpbmVyIiwhMCk7dmFyIG49dGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5hcHBlbmQoImciKS5jbGFzc2VkKCJhbm5vdGF0aW9uLWxhYmVsLWNvbnRhaW5lciIsITApLGk9bmV3IGFtdC5TdmdDb250ZXh0KG4ubm9kZSgpKTt0aGlzLl9hbm5vdGF0aW9uTWVhc3VyZXI9bmV3IGFtdC5DYWNoZU1lYXN1cmVyKGkpLHRoaXMuX2Fubm90YXRpb25Xcml0ZXI9bmV3IGFtdC5Xcml0ZXIodGhpcy5fYW5ub3RhdGlvbk1lYXN1cmVyLGkpfSxlLnByb3RvdHlwZS5fZ2V0VGlja1ZhbHVlcz1mdW5jdGlvbigpe3JldHVybltdfSxlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2dldFRpY2tWYWx1ZXMoKSxuPXRoaXMuX3RpY2tNYXJrQ29udGFpbmVyLnNlbGVjdEFsbCgiLiIrZS5USUNLX01BUktfQ0xBU1MpLmRhdGEodCksaT1uLmVudGVyKCkuYXBwZW5kKCJsaW5lIikuY2xhc3NlZChlLlRJQ0tfTUFSS19DTEFTUywhMCkubWVyZ2Uobik7cmV0dXJuIGkuYXR0cnModGhpcy5fZ2VuZXJhdGVUaWNrTWFya0F0dHJIYXNoKCkpLGlkdC5zZWxlY3QoaS5ub2RlcygpWzBdKS5jbGFzc2VkKGUuRU5EX1RJQ0tfTUFSS19DTEFTUywhMCkuYXR0cnModGhpcy5fZ2VuZXJhdGVUaWNrTWFya0F0dHJIYXNoKCEwKSksaWR0LnNlbGVjdChpLm5vZGVzKClbdC5sZW5ndGgtMV0pLmNsYXNzZWQoZS5FTkRfVElDS19NQVJLX0NMQVNTLCEwKS5hdHRycyh0aGlzLl9nZW5lcmF0ZVRpY2tNYXJrQXR0ckhhc2goITApKSxuLmV4aXQoKS5yZW1vdmUoKSx0aGlzLl9iYXNlbGluZS5hdHRycyh0aGlzLl9nZW5lcmF0ZUJhc2VsaW5lQXR0ckhhc2goKSksdGhpcy5hbm5vdGF0aW9uc0VuYWJsZWQoKT90aGlzLl9kcmF3QW5ub3RhdGlvbnMoKTp0aGlzLl9yZW1vdmVBbm5vdGF0aW9ucygpLHRoaXN9LGUucHJvdG90eXBlLmFubm90YXRlZFRpY2tzPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX2Fubm90YXRlZFRpY2tzOih0aGlzLl9hbm5vdGF0ZWRUaWNrcz10LHRoaXMucmVuZGVyKCksdGhpcyl9LGUucHJvdG90eXBlLmFubm90YXRpb25Gb3JtYXR0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5fYW5ub3RhdGlvbkZvcm1hdHRlcjoodGhpcy5fYW5ub3RhdGlvbkZvcm1hdHRlcj10LHRoaXMucmVuZGVyKCksdGhpcyl9LGUucHJvdG90eXBlLmFubm90YXRpb25zRW5hYmxlZD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9hbm5vdGF0aW9uc0VuYWJsZWQ6KHRoaXMuX2Fubm90YXRpb25zRW5hYmxlZD10LHRoaXMucmVkcmF3KCksdGhpcyl9LGUucHJvdG90eXBlLmFubm90YXRpb25UaWVyQ291bnQ9ZnVuY3Rpb24odCl7aWYobnVsbD09dClyZXR1cm4gdGhpcy5fYW5ub3RhdGlvblRpZXJDb3VudDtpZih0PDApdGhyb3cgbmV3IEVycm9yKCJhbm5vdGF0aW9uVGllckNvdW50IGNhbm5vdCBiZSBuZWdhdGl2ZSIpO3JldHVybiB0aGlzLl9hbm5vdGF0aW9uVGllckNvdW50PXQsdGhpcy5yZWRyYXcoKSx0aGlzfSxlLnByb3RvdHlwZS5fZHJhd0Fubm90YXRpb25zPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxuPWUuX0FOTk9UQVRJT05fTEFCRUxfUEFERElORyxpPW5ldyBTbXQuTWFwLHI9dGhpcy5fYW5ub3RhdGVkVGlja3NUb1JlbmRlcigpO3IuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9dC5fYW5ub3RhdGlvbk1lYXN1cmVyLm1lYXN1cmUodC5hbm5vdGF0aW9uRm9ybWF0dGVyKCkoZSkpO2kuc2V0KGUse3dpZHRoOnIud2lkdGgrMipuLGhlaWdodDpyLmhlaWdodCsyKm59KX0pKTt2YXIgbz10aGlzLl9hbm5vdGF0aW9uTWVhc3VyZXIubWVhc3VyZSgpLmhlaWdodCsyKm4sYT10aGlzLl9hbm5vdGF0aW9uVG9UaWVyKGkpLHM9bmV3IFNtdC5TZXQsbD10aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMuaGVpZ2h0KCk6dGhpcy53aWR0aCgpLGM9dGhpcy5fY29yZVNpemUoKSx1PU1hdGgubWluKHRoaXMuYW5ub3RhdGlvblRpZXJDb3VudCgpLE1hdGguZmxvb3IoKGwtYykvbykpO2EuZm9yRWFjaCgoZnVuY3Rpb24odCxlKXsoLTE9PT10fHx0Pj11KSYmcy5hZGQoZSl9KSk7dmFyIGgsZD1mdW5jdGlvbih0LGUsbil7dmFyIGk9dC5zZWxlY3RBbGwoIi4iK24pLmRhdGEociksbz1pLmVudGVyKCkuYXBwZW5kKGUpLmNsYXNzZWQobiwhMCkubWVyZ2UoaSk7cmV0dXJuIGkuZXhpdCgpLnJlbW92ZSgpLG99LHA9ZnVuY3Rpb24oZSl7c3dpdGNoKHQub3JpZW50YXRpb24oKSl7Y2FzZSJib3R0b20iOmNhc2UicmlnaHQiOnJldHVybiBhLmdldChlKSpvK2M7Y2FzZSJ0b3AiOmNhc2UibGVmdCI6cmV0dXJuIGwtYy1hLmdldChlKSpvfX0sZj1mdW5jdGlvbihlKXtyZXR1cm4gdC5fc2NhbGUuc2NhbGUoZSl9LG09ZnVuY3Rpb24odCl7cmV0dXJuIHMuaGFzKHQpPyJoaWRkZW4iOiJ2aXNpYmxlIn07c3dpdGNoKHRoaXMub3JpZW50YXRpb24oKSl7Y2FzZSJib3R0b20iOmNhc2UicmlnaHQiOmg9MDticmVhaztjYXNlInRvcCI6aD10aGlzLmhlaWdodCgpO2JyZWFrO2Nhc2UibGVmdCI6aD10aGlzLndpZHRoKCl9dmFyIGc9dGhpcy5pc0hvcml6b250YWwoKTtkKHRoaXMuX2Fubm90YXRpb25Db250YWluZXIuc2VsZWN0KCIuYW5ub3RhdGlvbi1saW5lLWNvbnRhaW5lciIpLCJsaW5lIixlLkFOTk9UQVRJT05fTElORV9DTEFTUykuYXR0cnMoe3gxOmc/ZjpoLHgyOmc/ZjpwLHkxOmc/aDpmLHkyOmc/cDpmLHZpc2liaWxpdHk6bX0pLGQodGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5zZWxlY3QoIi5hbm5vdGF0aW9uLWNpcmNsZS1jb250YWluZXIiKSwiY2lyY2xlIixlLkFOTk9UQVRJT05fQ0lSQ0xFX0NMQVNTKS5hdHRycyh7Y3g6Zz9mOmgsY3k6Zz9oOmYscjozfSk7dmFyIF89ZnVuY3Rpb24oZSl7c3dpdGNoKHQub3JpZW50YXRpb24oKSl7Y2FzZSJib3R0b20iOmNhc2UicmlnaHQiOnJldHVybiBwKGUpO2Nhc2UidG9wIjpjYXNlImxlZnQiOnJldHVybiBwKGUpLWkuZ2V0KGUpLmhlaWdodH19O2QodGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5zZWxlY3QoIi5hbm5vdGF0aW9uLXJlY3QtY29udGFpbmVyIiksInJlY3QiLGUuQU5OT1RBVElPTl9SRUNUX0NMQVNTKS5hdHRycyh7eDpnP2Y6Xyx5Omc/XzpmLHdpZHRoOmc/ZnVuY3Rpb24odCl7cmV0dXJuIGkuZ2V0KHQpLndpZHRofTpmdW5jdGlvbih0KXtyZXR1cm4gaS5nZXQodCkuaGVpZ2h0fSxoZWlnaHQ6Zz9mdW5jdGlvbih0KXtyZXR1cm4gaS5nZXQodCkuaGVpZ2h0fTpmdW5jdGlvbih0KXtyZXR1cm4gaS5nZXQodCkud2lkdGh9LHZpc2liaWxpdHk6bX0pO3ZhciB5PXRoaXMuX2Fubm90YXRpb25Xcml0ZXIsdj10aGlzLmFubm90YXRpb25Gb3JtYXR0ZXIoKSxiPWQodGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5zZWxlY3QoIi5hbm5vdGF0aW9uLWxhYmVsLWNvbnRhaW5lciIpLCJnIixlLkFOTk9UQVRJT05fTEFCRUxfQ0xBU1MpO2Iuc2VsZWN0QWxsKCIudGV4dC1jb250YWluZXIiKS5yZW1vdmUoKSxiLmF0dHJzKHt0cmFuc2Zvcm06ZnVuY3Rpb24odCl7cmV0dXJuInRyYW5zbGF0ZSgiKyhnP2YodCk6Xyh0KSkrIiwiKyhnP18odCk6Zih0KSkrIikifSx2aXNpYmlsaXR5Om19KS5lYWNoKChmdW5jdGlvbih0KXt5LndyaXRlKHYodCksZz9pLmdldCh0KS53aWR0aDppLmdldCh0KS5oZWlnaHQsZz9pLmdldCh0KS5oZWlnaHQ6aS5nZXQodCkud2lkdGgse3hBbGlnbjoiY2VudGVyIix5QWxpZ246ImNlbnRlciIsdGV4dFJvdGF0aW9uOmc/MDo5MH0saWR0LnNlbGVjdCh0aGlzKS5ub2RlKCkpfSkpfSxlLnByb3RvdHlwZS5fYW5ub3RhdGVkVGlja3NUb1JlbmRlcj1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10aGlzLl9zY2FsZS5yYW5nZSgpO3JldHVybiBTbXQuQXJyYXkudW5pcSh0aGlzLmFubm90YXRlZFRpY2tzKCkuZmlsdGVyKChmdW5jdGlvbihuKXtyZXR1cm4gbnVsbCE9biYmU210Lk1hdGguaW5SYW5nZSh0Ll9zY2FsZS5zY2FsZShuKSxlWzBdLGVbMV0pfSkpKX0sZS5wcm90b3R5cGUuX2NvcmVTaXplPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5pc0hvcml6b250YWwoKT90aGlzLmhlaWdodCgpOnRoaXMud2lkdGgoKSxlPXRoaXMuaXNIb3Jpem9udGFsKCk/dGhpcy5fY29tcHV0ZUhlaWdodCgpOnRoaXMuX2NvbXB1dGVXaWR0aCgpO3JldHVybiBNYXRoLm1pbihlLHQpfSxlLnByb3RvdHlwZS5fYW5ub3RhdGlvblRpZXJIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYW5ub3RhdGlvbk1lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQrMiplLl9BTk5PVEFUSU9OX0xBQkVMX1BBRERJTkd9LGUucHJvdG90eXBlLl9hbm5vdGF0aW9uVG9UaWVyPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1bW11dLGk9bmV3IFNtdC5NYXAscj10aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMud2lkdGgoKTp0aGlzLmhlaWdodCgpO3JldHVybiB0aGlzLl9hbm5vdGF0ZWRUaWNrc1RvUmVuZGVyKCkuZm9yRWFjaCgoZnVuY3Rpb24obyl7dmFyIGE9ZS5fc2NhbGUuc2NhbGUobykscz10LmdldChvKS53aWR0aDtpZihhPDB8fGErcz5yKWkuc2V0KG8sLTEpO2Vsc2V7Zm9yKHZhciBsPTA7bltsXS5zb21lKChmdW5jdGlvbihuKXt2YXIgaT1lLl9zY2FsZS5zY2FsZShuKSxyPXQuZ2V0KG4pLndpZHRoO3JldHVybiBhK3M+PWkmJmE8PWkrcn0pKTspbCsrLG4ubGVuZ3RoPT09bCYmbi5wdXNoKFtdKTtuW2xdLnB1c2gobyksaS5zZXQobyxsKX19KSksaX0sZS5wcm90b3R5cGUuX3JlbW92ZUFubm90YXRpb25zPWZ1bmN0aW9uKCl7dGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5zZWxlY3RBbGwoIi5hbm5vdGF0aW9uLWxpbmUiKS5yZW1vdmUoKSx0aGlzLl9hbm5vdGF0aW9uQ29udGFpbmVyLnNlbGVjdEFsbCgiLmFubm90YXRpb24tY2lyY2xlIikucmVtb3ZlKCksdGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5zZWxlY3RBbGwoIi5hbm5vdGF0aW9uLXJlY3QiKS5yZW1vdmUoKSx0aGlzLl9hbm5vdGF0aW9uQ29udGFpbmVyLnNlbGVjdEFsbCgiLmFubm90YXRpb24tbGFiZWwiKS5yZW1vdmUoKX0sZS5wcm90b3R5cGUuX2dlbmVyYXRlQmFzZWxpbmVBdHRySGFzaD1mdW5jdGlvbigpe3ZhciB0PXt4MTowLHkxOjAseDI6MCx5MjowfTtzd2l0Y2godGhpcy5fb3JpZW50YXRpb24pe2Nhc2UiYm90dG9tIjp0LngyPXRoaXMud2lkdGgoKTticmVhaztjYXNlInRvcCI6dC54Mj10aGlzLndpZHRoKCksdC55MT10aGlzLmhlaWdodCgpLHQueTI9dGhpcy5oZWlnaHQoKTticmVhaztjYXNlImxlZnQiOnQueDE9dGhpcy53aWR0aCgpLHQueDI9dGhpcy53aWR0aCgpLHQueTI9dGhpcy5oZWlnaHQoKTticmVhaztjYXNlInJpZ2h0Ijp0LnkyPXRoaXMuaGVpZ2h0KCl9cmV0dXJuIHR9LGUucHJvdG90eXBlLl9nZW5lcmF0ZVRpY2tNYXJrQXR0ckhhc2g9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt2b2lkIDA9PT10JiYodD0hMSk7dmFyIG49e3gxOjAseTE6MCx4MjowLHkyOjB9LGk9ZnVuY3Rpb24odCl7cmV0dXJuIGUuX3NjYWxlLnNjYWxlKHQpfTt0aGlzLmlzSG9yaXpvbnRhbCgpPyhuLngxPWksbi54Mj1pKToobi55MT1pLG4ueTI9aSk7dmFyIHI9dD90aGlzLl9lbmRUaWNrTGVuZ3RoOnRoaXMuX2lubmVyVGlja0xlbmd0aDtzd2l0Y2godGhpcy5fb3JpZW50YXRpb24pe2Nhc2UiYm90dG9tIjpuLnkyPXI7YnJlYWs7Y2FzZSJ0b3AiOm4ueTE9dGhpcy5oZWlnaHQoKSxuLnkyPXRoaXMuaGVpZ2h0KCktcjticmVhaztjYXNlImxlZnQiOm4ueDE9dGhpcy53aWR0aCgpLG4ueDI9dGhpcy53aWR0aCgpLXI7YnJlYWs7Y2FzZSJyaWdodCI6bi54Mj1yfXJldHVybiBufSxlLnByb3RvdHlwZS5fc2V0RGVmYXVsdEFsaWdubWVudD1mdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9vcmllbnRhdGlvbil7Y2FzZSJib3R0b20iOnRoaXMueUFsaWdubWVudCgidG9wIik7YnJlYWs7Y2FzZSJ0b3AiOnRoaXMueUFsaWdubWVudCgiYm90dG9tIik7YnJlYWs7Y2FzZSJsZWZ0Ijp0aGlzLnhBbGlnbm1lbnQoInJpZ2h0Iik7YnJlYWs7Y2FzZSJyaWdodCI6dGhpcy54QWxpZ25tZW50KCJsZWZ0Iil9fSxlLnByb3RvdHlwZS5pc0hvcml6b250YWw9ZnVuY3Rpb24oKXtyZXR1cm4idG9wIj09PXRoaXMuX29yaWVudGF0aW9ufHwiYm90dG9tIj09PXRoaXMuX29yaWVudGF0aW9ufSxlLnByb3RvdHlwZS5nZXRTY2FsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zY2FsZX0sZS5wcm90b3R5cGUuZm9ybWF0dGVyPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX2Zvcm1hdHRlcjoodGhpcy5fZm9ybWF0dGVyPXQsdGhpcy5yZWRyYXcoKSx0aGlzKX0sZS5wcm90b3R5cGUuaW5uZXJUaWNrTGVuZ3RoPWZ1bmN0aW9uKHQpe2lmKG51bGw9PXQpcmV0dXJuIHRoaXMuX2lubmVyVGlja0xlbmd0aDtpZih0PDApdGhyb3cgbmV3IEVycm9yKCJpbm5lciB0aWNrIGxlbmd0aCBtdXN0IGJlIHBvc2l0aXZlIik7cmV0dXJuIHRoaXMuX2lubmVyVGlja0xlbmd0aD10LHRoaXMucmVkcmF3KCksdGhpc30sZS5wcm90b3R5cGUuZW5kVGlja0xlbmd0aD1mdW5jdGlvbih0KXtpZihudWxsPT10KXJldHVybiB0aGlzLl9lbmRUaWNrTGVuZ3RoO2lmKHQ8MCl0aHJvdyBuZXcgRXJyb3IoImVuZCB0aWNrIGxlbmd0aCBtdXN0IGJlIHBvc2l0aXZlIik7cmV0dXJuIHRoaXMuX2VuZFRpY2tMZW5ndGg9dCx0aGlzLnJlZHJhdygpLHRoaXN9LGUucHJvdG90eXBlLl9tYXhMYWJlbFRpY2tMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaG93RW5kVGlja0xhYmVscygpP01hdGgubWF4KHRoaXMuaW5uZXJUaWNrTGVuZ3RoKCksdGhpcy5lbmRUaWNrTGVuZ3RoKCkpOnRoaXMuaW5uZXJUaWNrTGVuZ3RoKCl9LGUucHJvdG90eXBlLnRpY2tMYWJlbFBhZGRpbmc9ZnVuY3Rpb24odCl7aWYobnVsbD09dClyZXR1cm4gdGhpcy5fdGlja0xhYmVsUGFkZGluZztpZih0PDApdGhyb3cgbmV3IEVycm9yKCJ0aWNrIGxhYmVsIHBhZGRpbmcgbXVzdCBiZSBwb3NpdGl2ZSIpO3JldHVybiB0aGlzLl90aWNrTGFiZWxQYWRkaW5nPXQsdGhpcy5yZWRyYXcoKSx0aGlzfSxlLnByb3RvdHlwZS5tYXJnaW49ZnVuY3Rpb24odCl7aWYobnVsbD09dClyZXR1cm4gdGhpcy5fbWFyZ2luO2lmKHQ8MCl0aHJvdyBuZXcgRXJyb3IoIm1hcmdpbiBzaXplIG11c3QgYmUgcG9zaXRpdmUiKTtyZXR1cm4gdGhpcy5fbWFyZ2luPXQsdGhpcy5yZWRyYXcoKSx0aGlzfSxlLnByb3RvdHlwZS5vcmllbnRhdGlvbj1mdW5jdGlvbih0KXtpZihudWxsPT10KXJldHVybiB0aGlzLl9vcmllbnRhdGlvbjt2YXIgZT10LnRvTG93ZXJDYXNlKCk7aWYoInRvcCIhPT1lJiYiYm90dG9tIiE9PWUmJiJsZWZ0IiE9PWUmJiJyaWdodCIhPT1lKXRocm93IG5ldyBFcnJvcigidW5zdXBwb3J0ZWQgb3JpZW50YXRpb24iKTtyZXR1cm4gdGhpcy5fb3JpZW50YXRpb249ZSx0aGlzLnJlZHJhdygpLHRoaXN9LGUucHJvdG90eXBlLnNob3dFbmRUaWNrTGFiZWxzPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX3Nob3dFbmRUaWNrTGFiZWxzOih0aGlzLl9zaG93RW5kVGlja0xhYmVscz10LHRoaXMucmVuZGVyKCksdGhpcyl9LGUucHJvdG90eXBlLl9zaG93QWxsVGlja01hcmtzPWZ1bmN0aW9uKCl7dGhpcy5fdGlja01hcmtDb250YWluZXIuc2VsZWN0QWxsKCIuIitlLlRJQ0tfTUFSS19DTEFTUykuZWFjaCgoZnVuY3Rpb24oKXtpZHQuc2VsZWN0KHRoaXMpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaW5oZXJpdCIpfSkpfSxlLnByb3RvdHlwZS5fc2hvd0FsbFRpY2tMYWJlbHM9ZnVuY3Rpb24oKXt0aGlzLl90aWNrTGFiZWxDb250YWluZXIuc2VsZWN0QWxsKCIuIitlLlRJQ0tfTEFCRUxfQ0xBU1MpLmVhY2goKGZ1bmN0aW9uKCl7aWR0LnNlbGVjdCh0aGlzKS5zdHlsZSgidmlzaWJpbGl0eSIsImluaGVyaXQiKX0pKX0sZS5wcm90b3R5cGUuX2hpZGVPdmVyZmxvd2luZ1RpY2tMYWJlbHM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVsZW1lbnQoKS5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj10aGlzLl90aWNrTGFiZWxDb250YWluZXIuc2VsZWN0QWxsKCIuIitlLlRJQ0tfTEFCRUxfQ0xBU1MpO24uZW1wdHkoKXx8bi5lYWNoKChmdW5jdGlvbihlLG4pe1NtdC5ET00uY2xpZW50UmVjdEluc2lkZSh0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHQpfHxpZHQuc2VsZWN0KHRoaXMpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIil9KSl9LGUucHJvdG90eXBlLl9oaWRlVGlja01hcmtzV2l0aG91dExhYmVsPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fdGlja01hcmtDb250YWluZXIuc2VsZWN0QWxsKCIuIitlLlRJQ0tfTUFSS19DTEFTUyksbj10aGlzLl90aWNrTGFiZWxDb250YWluZXIuc2VsZWN0QWxsKCIuIitlLlRJQ0tfTEFCRUxfQ0xBU1MpLmZpbHRlcigoZnVuY3Rpb24odCxlKXt2YXIgbj1pZHQuc2VsZWN0KHRoaXMpLnN0eWxlKCJ2aXNpYmlsaXR5Iik7cmV0dXJuImluaGVyaXQiPT09bnx8InZpc2libGUiPT09bn0pKS5kYXRhKCk7dC5lYWNoKChmdW5jdGlvbih0LGUpey0xPT09bi5pbmRleE9mKHQpJiZpZHQuc2VsZWN0KHRoaXMpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIil9KSl9LGUucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZT1mdW5jdGlvbigpe3QucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZS5jYWxsKHRoaXMpLHRoaXMuX2Fubm90YXRpb25NZWFzdXJlci5yZXNldCgpfSxlLkVORF9USUNLX01BUktfQ0xBU1M9ImVuZC10aWNrLW1hcmsiLGUuVElDS19NQVJLX0NMQVNTPSJ0aWNrLW1hcmsiLGUuVElDS19MQUJFTF9DTEFTUz0idGljay1sYWJlbCIsZS5BTk5PVEFUSU9OX0xJTkVfQ0xBU1M9ImFubm90YXRpb24tbGluZSIsZS5BTk5PVEFUSU9OX1JFQ1RfQ0xBU1M9ImFubm90YXRpb24tcmVjdCIsZS5BTk5PVEFUSU9OX0NJUkNMRV9DTEFTUz0iYW5ub3RhdGlvbi1jaXJjbGUiLGUuQU5OT1RBVElPTl9MQUJFTF9DTEFTUz0iYW5ub3RhdGlvbi1sYWJlbCIsZS5fQU5OT1RBVElPTl9MQUJFTF9QQURESU5HPTQsZX0pKFRtdC5Db21wb25lbnQpO2UuQXhpcz1ufSkpLGttdD1iZSgoZnVuY3Rpb24odCxlKXsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dm9pZCAwPT09biYmKG49ImJvdHRvbSIpO3ZhciBpPXQuY2FsbCh0aGlzLGUsbil8fHRoaXM7cmV0dXJuIGkuX3RpY2tMYWJlbEFuZ2xlPTAsaS5fdGlja0xhYmVsU2hlYXJBbmdsZT0wLGkuYWRkQ2xhc3MoImNhdGVnb3J5LWF4aXMiKSxpfXJldHVybiBEZnQuX19leHRlbmRzKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJfd3JhcHBlciIse2dldDpmdW5jdGlvbigpe3ZhciB0PW5ldyBhbXQuV3JhcHBlcjtyZXR1cm4gbnVsbCE9dGhpcy5fdGlja0xhYmVsTWF4TGluZXMmJnQubWF4TGluZXModGhpcy5fdGlja0xhYmVsTWF4TGluZXMpLHR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJfd3JpdGVyIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBhbXQuV3JpdGVyKHRoaXMuX21lYXN1cmVyLHRoaXMuX3R5cGVzZXR0ZXJDb250ZXh0LHRoaXMuX3dyYXBwZXIpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe3QucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLHRoaXMuX3R5cGVzZXR0ZXJDb250ZXh0PW5ldyBhbXQuU3ZnQ29udGV4dCh0aGlzLl90aWNrTGFiZWxDb250YWluZXIubm9kZSgpKSx0aGlzLl9tZWFzdXJlcj1uZXcgYW10LkNhY2hlTWVhc3VyZXIodGhpcy5fdHlwZXNldHRlckNvbnRleHQpfSxlLnByb3RvdHlwZS5fcmVzY2FsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlZHJhdygpfSxlLnByb3RvdHlwZS5yZXF1ZXN0ZWRTcGFjZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuaXNIb3Jpem9udGFsKCk/MDp0aGlzLl90aWNrU3BhY2VSZXF1aXJlZCgpK3RoaXMubWFyZ2luKCksaT10aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCkrdGhpcy5tYXJnaW4oKTowO2lmKDA9PT10aGlzLl9zY2FsZS5kb21haW4oKS5sZW5ndGgpcmV0dXJue21pbldpZHRoOjAsbWluSGVpZ2h0OjB9O2lmKHRoaXMuYW5ub3RhdGlvbnNFbmFibGVkKCkpe3ZhciByPXRoaXMuX2Fubm90YXRpb25UaWVySGVpZ2h0KCkqdGhpcy5hbm5vdGF0aW9uVGllckNvdW50KCk7dGhpcy5pc0hvcml6b250YWwoKT9pKz1yOm4rPXJ9dmFyIG89dGhpcy5fbWVhc3VyZVRpY2tMYWJlbHModCxlKTtyZXR1cm57bWluV2lkdGg6by51c2VkV2lkdGgrbixtaW5IZWlnaHQ6by51c2VkSGVpZ2h0K2l9fSxlLnByb3RvdHlwZS5fY29yZVNpemU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMuaGVpZ2h0KCk6dGhpcy53aWR0aCgpLGU9dGhpcy5pc0hvcml6b250YWwoKT90aGlzLnJlcXVlc3RlZFNwYWNlKHRoaXMud2lkdGgoKSx0aGlzLmhlaWdodCgpKS5taW5IZWlnaHQ6dGhpcy5yZXF1ZXN0ZWRTcGFjZSh0aGlzLndpZHRoKCksdGhpcy5oZWlnaHQoKSkubWluV2lkdGgsbj10aGlzLm1hcmdpbigpK3RoaXMuX2Fubm90YXRpb25UaWVySGVpZ2h0KCk7cmV0dXJuIE1hdGgubWluKGUtbix0KX0sZS5wcm90b3R5cGUuX2dldFRpY2tWYWx1ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXREb3duc2FtcGxlSW5mbygpLmRvbWFpbn0sZS5wcm90b3R5cGUuX3NpemVGcm9tT2ZmZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gVG10LkNvbXBvbmVudC5wcm90b3R5cGUuX3NpemVGcm9tT2ZmZXIuY2FsbCh0aGlzLHQsZSl9LGUucHJvdG90eXBlLmdldERvd25zYW1wbGVJbmZvPWZ1bmN0aW9uKHQsbil7dm9pZCAwPT09dCYmKHQ9dGhpcy5fc2NhbGUpLHZvaWQgMD09PW4mJihuPXQuaW52ZXJ0UmFuZ2UoKSk7dmFyIGk9MD09PXRoaXMuX3RpY2tMYWJlbEFuZ2xlPzE6MS9NYXRoLmNvcyh0aGlzLl90aWNrTGFiZWxTaGVhckFuZ2xlLzE4MCpNYXRoLlBJKSxyPU1hdGguY2VpbChlLl9NSU5JTVVNX1dJRFRIX1BFUl9MQUJFTF9QWCppL3Quc3RlcFdpZHRoKCkpO3JldHVybntkb21haW46bi5maWx0ZXIoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUlcj09MH0pKSxzdGVwV2lkdGg6cip0LnN0ZXBXaWR0aCgpfX0sZS5wcm90b3R5cGUudGlja0xhYmVsQW5nbGU9ZnVuY3Rpb24odCl7aWYobnVsbD09dClyZXR1cm4gdGhpcy5fdGlja0xhYmVsQW5nbGU7aWYoMCE9PXQmJjkwIT09dCYmLTkwIT09dCl0aHJvdyBuZXcgRXJyb3IoIkFuZ2xlICIrdCsiIG5vdCBzdXBwb3J0ZWQ7IG9ubHkgMCwgOTAsIGFuZCAtOTAgYXJlIHZhbGlkIHZhbHVlcyIpO3JldHVybiB0aGlzLl90aWNrTGFiZWxBbmdsZT10LHRoaXMucmVkcmF3KCksdGhpc30sZS5wcm90b3R5cGUudGlja0xhYmVsU2hlYXJBbmdsZT1mdW5jdGlvbih0KXtpZihudWxsPT10KXJldHVybiB0aGlzLl90aWNrTGFiZWxTaGVhckFuZ2xlO2lmKHQ8LTgwfHx0PjgwKXRocm93IG5ldyBFcnJvcigiQW5nbGUgIit0KyIgbm90IHN1cHBvcnRlZDsgTXVzdCBiZSBiZXR3ZWVuIFstODAsIDgwXSIpO3JldHVybiB0aGlzLl90aWNrTGFiZWxTaGVhckFuZ2xlPXQsdGhpcy5yZWRyYXcoKSx0aGlzfSxlLnByb3RvdHlwZS50aWNrTGFiZWxNYXhXaWR0aD1mdW5jdGlvbih0KXtyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGg/dGhpcy5fdGlja0xhYmVsTWF4V2lkdGg6KHRoaXMuX3RpY2tMYWJlbE1heFdpZHRoPXQsdGhpcy5yZWRyYXcoKSx0aGlzKX0sZS5wcm90b3R5cGUudGlja0xhYmVsTWF4TGluZXM9ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMuX3RpY2tMYWJlbE1heExpbmVzOih0aGlzLl90aWNrTGFiZWxNYXhMaW5lcz10LHRoaXMucmVkcmF3KCksdGhpcyl9LGUucHJvdG90eXBlLl90aWNrU3BhY2VSZXF1aXJlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXhMYWJlbFRpY2tMZW5ndGgoKSt0aGlzLnRpY2tMYWJlbFBhZGRpbmcoKX0sZS5wcm90b3R5cGUuX2RyYXdUaWNrcz1mdW5jdGlvbih0LGUpe3ZhciBuLGkscj10aGlzO3N3aXRjaCh0aGlzLnRpY2tMYWJlbEFuZ2xlKCkpe2Nhc2UgMDpuPXtsZWZ0OiJyaWdodCIscmlnaHQ6ImxlZnQiLHRvcDoiY2VudGVyIixib3R0b206ImNlbnRlciJ9LGk9e2xlZnQ6ImNlbnRlciIscmlnaHQ6ImNlbnRlciIsdG9wOiJib3R0b20iLGJvdHRvbToidG9wIn07YnJlYWs7Y2FzZSA5MDpuPXtsZWZ0OiJjZW50ZXIiLHJpZ2h0OiJjZW50ZXIiLHRvcDoicmlnaHQiLGJvdHRvbToibGVmdCJ9LGk9e2xlZnQ6InRvcCIscmlnaHQ6ImJvdHRvbSIsdG9wOiJjZW50ZXIiLGJvdHRvbToiY2VudGVyIn07YnJlYWs7Y2FzZS05MDpuPXtsZWZ0OiJjZW50ZXIiLHJpZ2h0OiJjZW50ZXIiLHRvcDoibGVmdCIsYm90dG9tOiJyaWdodCJ9LGk9e2xlZnQ6ImJvdHRvbSIscmlnaHQ6InRvcCIsdG9wOiJjZW50ZXIiLGJvdHRvbToiY2VudGVyIn19ZS5lYWNoKChmdW5jdGlvbihlKXt2YXIgbz1pZHQuc2VsZWN0KHRoaXMpLGE9ci5pc0hvcml6b250YWwoKT90OnIud2lkdGgoKS1yLl90aWNrU3BhY2VSZXF1aXJlZCgpLHM9ci5pc0hvcml6b250YWwoKT9yLmhlaWdodCgpLXIuX3RpY2tTcGFjZVJlcXVpcmVkKCk6dCxsPXt4QWxpZ246bltyLm9yaWVudGF0aW9uKCldLHlBbGlnbjppW3Iub3JpZW50YXRpb24oKV0sdGV4dFJvdGF0aW9uOnIudGlja0xhYmVsQW5nbGUoKSx0ZXh0U2hlYXI6ci50aWNrTGFiZWxTaGVhckFuZ2xlKCl9O2lmKG51bGwhPXIuX3RpY2tMYWJlbE1heFdpZHRoKXtpZigibGVmdCI9PT1yLm9yaWVudGF0aW9uKCkmJmE+ci5fdGlja0xhYmVsTWF4V2lkdGgpe3ZhciBjPWEtci5fdGlja0xhYmVsTWF4V2lkdGgsdT1vLmF0dHIoInRyYW5zZm9ybSIpKyIgdHJhbnNsYXRlKCIrYysiLCAwKSI7by5hdHRyKCJ0cmFuc2Zvcm0iLHUpfWE9TWF0aC5taW4oYSxyLl90aWNrTGFiZWxNYXhXaWR0aCl9ci5fd3JpdGVyLndyaXRlKHIuZm9ybWF0dGVyKCkoZSksYSxzLGwsby5ub2RlKCkpfSkpfSxlLnByb3RvdHlwZS5fbWVhc3VyZVRpY2tMYWJlbHM9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLGk9dGhpcy5fc2NhbGUuY2xvbmVXaXRob3V0UHJvdmlkZXJzKCkucmFuZ2UoWzAsdGhpcy5pc0hvcml6b250YWwoKT90OmVdKSxyPXRoaXMuZ2V0RG93bnNhbXBsZUluZm8oaSksbz1yLmRvbWFpbixhPXIuc3RlcFdpZHRoLHM9dC10aGlzLl90aWNrU3BhY2VSZXF1aXJlZCgpO3RoaXMuaXNIb3Jpem9udGFsKCkmJihzPWEsMCE9PXRoaXMuX3RpY2tMYWJlbEFuZ2xlJiYocz1lLXRoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCkpLHM9TWF0aC5tYXgocywwKSk7dmFyIGw9YTt0aGlzLmlzSG9yaXpvbnRhbCgpJiYobD1lLXRoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCksMCE9PXRoaXMuX3RpY2tMYWJlbEFuZ2xlJiYobD10LXRoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCkpLGw9TWF0aC5tYXgobCwwKSksbnVsbCE9dGhpcy5fdGlja0xhYmVsTWF4V2lkdGgmJihzPU1hdGgubWluKHMsdGhpcy5fdGlja0xhYmVsTWF4V2lkdGgpKTt2YXIgYyx1PW8ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gbi5fd3JhcHBlci53cmFwKG4uZm9ybWF0dGVyKCkodCksbi5fbWVhc3VyZXIscyxsKX0pKSxoPXRoaXMuaXNIb3Jpem9udGFsKCkmJjA9PT10aGlzLl90aWNrTGFiZWxBbmdsZT9pZHQuc3VtOlNtdC5NYXRoLm1heCxkPXRoaXMuaXNIb3Jpem9udGFsKCkmJjA9PT10aGlzLl90aWNrTGFiZWxBbmdsZT9TbXQuTWF0aC5tYXg6aWR0LnN1bSxwPWgodSwoZnVuY3Rpb24odCl7cmV0dXJuIG4uX21lYXN1cmVyLm1lYXN1cmUodC53cmFwcGVkVGV4dCkud2lkdGh9KSwwKSxmPWQodSwoZnVuY3Rpb24odCl7cmV0dXJuIG4uX21lYXN1cmVyLm1lYXN1cmUodC53cmFwcGVkVGV4dCkuaGVpZ2h0fSksMCk7cmV0dXJuIDAhPT10aGlzLl90aWNrTGFiZWxBbmdsZSYmKHA9KGM9W2YscF0pWzBdLGY9Y1sxXSkse3VzZWRXaWR0aDpwLHVzZWRIZWlnaHQ6Zn19LGUucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0LnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHRoaXMpO3ZhciBuPXRoaXMuX3NjYWxlLGk9dGhpcy5nZXREb3duc2FtcGxlSW5mbyhuKSxyPWkuZG9tYWluLG89aS5zdGVwV2lkdGgsYT1vO3RoaXMuaXNIb3Jpem9udGFsKCkmJm51bGwhPXRoaXMuX3RpY2tMYWJlbE1heFdpZHRoJiYoYT1NYXRoLm1pbihhLHRoaXMuX3RpY2tMYWJlbE1heFdpZHRoKSk7dmFyIHM9dGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLnNlbGVjdEFsbCgiLiIrQW10LkF4aXMuVElDS19MQUJFTF9DTEFTUykuZGF0YShyKSxsPXMuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKEFtdC5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MsITApLm1lcmdlKHMpO3MuZXhpdCgpLnJlbW92ZSgpLGwuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCxpKXt2YXIgcj1uLnNjYWxlKHQpLWEvMjtyZXR1cm4idHJhbnNsYXRlKCIrKGUuaXNIb3Jpem9udGFsKCk/cjowKSsiLCIrKGUuaXNIb3Jpem9udGFsKCk/MDpyKSsiKSJ9KSksbC50ZXh0KCIiKSx0aGlzLl9kcmF3VGlja3MobyxsKTt2YXIgYz0icmlnaHQiPT09dGhpcy5vcmllbnRhdGlvbigpP3RoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCk6MCx1PSJib3R0b20iPT09dGhpcy5vcmllbnRhdGlvbigpP3RoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCk6MDtyZXR1cm4gdGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2MrIiwiK3UrIikiKSx0aGlzLl9zaG93QWxsVGlja01hcmtzKCksdGhpcy5fc2hvd0FsbFRpY2tMYWJlbHMoKSx0aGlzLl9oaWRlVGlja01hcmtzV2l0aG91dExhYmVsKCksdGhpc30sZS5wcm90b3R5cGUuY29tcHV0ZUxheW91dD1mdW5jdGlvbihlLG4saSl7cmV0dXJuIHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQuY2FsbCh0aGlzLGUsbixpKSx0aGlzLmlzSG9yaXpvbnRhbCgpfHx0aGlzLl9zY2FsZS5yYW5nZShbMCx0aGlzLmhlaWdodCgpXSksdGhpc30sZS5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7dC5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlLmNhbGwodGhpcyksdGhpcy5fbWVhc3VyZXIucmVzZXQoKX0sZS5fTUlOSU1VTV9XSURUSF9QRVJfTEFCRUxfUFg9MTUsZX0pKEFtdC5BeGlzKTtlLkNhdGVnb3J5PW59KSksTG10PWJlKChmdW5jdGlvbih0LGUpewovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgaT10LmNhbGwodGhpcyxlLG4pfHx0aGlzO3JldHVybiBpLl90aWNrTGFiZWxQb3NpdGlvbmluZz0iY2VudGVyIixpLl91c2VzVGV4dFdpZHRoQXBwcm94aW1hdGlvbj0hMSxpLmZvcm1hdHRlcihDbXQuZ2VuZXJhbCgpKSxpfXJldHVybiBEZnQuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7dC5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyk7dmFyIGU9bmV3IGFtdC5TdmdDb250ZXh0KHRoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5ub2RlKCksQW10LkF4aXMuVElDS19MQUJFTF9DTEFTUyk7dGhpcy5fbWVhc3VyZXI9bmV3IGFtdC5DYWNoZU1lYXN1cmVyKGUpLHRoaXMuX3dyYXBwZXI9KG5ldyBhbXQuV3JhcHBlcikubWF4TGluZXMoMSl9LGUucHJvdG90eXBlLl9jb21wdXRlV2lkdGg9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl91c2VzVGV4dFdpZHRoQXBwcm94aW1hdGlvbj90aGlzLl9jb21wdXRlQXBwcm94aW1hdGVUZXh0V2lkdGgoKTp0aGlzLl9jb21wdXRlRXhhY3RUZXh0V2lkdGgoKTtyZXR1cm4iY2VudGVyIj09PXRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nP3RoaXMuX21heExhYmVsVGlja0xlbmd0aCgpK3RoaXMudGlja0xhYmVsUGFkZGluZygpK3Q6TWF0aC5tYXgodGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCksdGhpcy50aWNrTGFiZWxQYWRkaW5nKCkrdCl9LGUucHJvdG90eXBlLl9jb21wdXRlRXhhY3RUZXh0V2lkdGg9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dGhpcy5fZ2V0VGlja1ZhbHVlcygpLm1hcCgoZnVuY3Rpb24oZSl7dmFyIG49dC5mb3JtYXR0ZXIoKShlKTtyZXR1cm4gdC5fbWVhc3VyZXIubWVhc3VyZShuKS53aWR0aH0pKTtyZXR1cm4gU210Lk1hdGgubWF4KGUsMCl9LGUucHJvdG90eXBlLl9jb21wdXRlQXBwcm94aW1hdGVUZXh0V2lkdGg9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dGhpcy5fZ2V0VGlja1ZhbHVlcygpLG49dGhpcy5fbWVhc3VyZXIubWVhc3VyZSgiTSIpLndpZHRoLGk9ZS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiB0LmZvcm1hdHRlcigpKGUpLmxlbmd0aCpufSkpO3JldHVybiBTbXQuTWF0aC5tYXgoaSwwKX0sZS5wcm90b3R5cGUuX2NvbXB1dGVIZWlnaHQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9tZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0O3JldHVybiJjZW50ZXIiPT09dGhpcy5fdGlja0xhYmVsUG9zaXRpb25pbmc/dGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCkrdGhpcy50aWNrTGFiZWxQYWRkaW5nKCkrdDpNYXRoLm1heCh0aGlzLl9tYXhMYWJlbFRpY2tMZW5ndGgoKSx0aGlzLnRpY2tMYWJlbFBhZGRpbmcoKSt0KX0sZS5wcm90b3R5cGUuX2dldFRpY2tWYWx1ZXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9zY2FsZSxlPXQuZG9tYWluKCksbj1lWzBdPD1lWzFdP2VbMF06ZVsxXSxpPWVbMF0+PWVbMV0/ZVswXTplWzFdO3JldHVybiB0LnRpY2tzKCkuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdD49biYmdDw9aX0pKX0sZS5wcm90b3R5cGUuX3Jlc2NhbGU9ZnVuY3Rpb24oKXtpZih0aGlzLl9pc1NldHVwKXtpZighdGhpcy5pc0hvcml6b250YWwoKSl7dmFyIHQ9dGhpcy5fY29tcHV0ZVdpZHRoKCk7aWYodD50aGlzLndpZHRoKCl8fHQ8dGhpcy53aWR0aCgpLXRoaXMubWFyZ2luKCkpcmV0dXJuIHZvaWQgdGhpcy5yZWRyYXcoKX10aGlzLnJlbmRlcigpfX0sZS5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3QucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5LmNhbGwodGhpcyk7dmFyIG49e3g6MCx5OjAsZHg6IjBlbSIsZHk6IjAuM2VtIn0saT10aGlzLl9tYXhMYWJlbFRpY2tMZW5ndGgoKSxyPXRoaXMudGlja0xhYmVsUGFkZGluZygpLG89Im1pZGRsZSIsYT0wLHM9MCxsPTAsYz0wO2lmKHRoaXMuaXNIb3Jpem9udGFsKCkpc3dpdGNoKHRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nKXtjYXNlImxlZnQiOm89ImVuZCIsYT0tcixjPXI7YnJlYWs7Y2FzZSJjZW50ZXIiOmM9aStyO2JyZWFrO2Nhc2UicmlnaHQiOm89InN0YXJ0IixhPXIsYz1yfWVsc2Ugc3dpdGNoKHRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nKXtjYXNlInRvcCI6bi5keT0iLTAuM2VtIixsPXIscz0tcjticmVhaztjYXNlImNlbnRlciI6bD1pK3I7YnJlYWs7Y2FzZSJib3R0b20iOm4uZHk9IjFlbSIsbD1yLHM9cn12YXIgdT10aGlzLl9nZW5lcmF0ZVRpY2tNYXJrQXR0ckhhc2goKTtzd2l0Y2godGhpcy5vcmllbnRhdGlvbigpKXtjYXNlImJvdHRvbSI6bi54PXUueDEsbi5keT0iMC45NWVtIixzPXUueTErYzticmVhaztjYXNlInRvcCI6bi54PXUueDEsbi5keT0iLS4yNWVtIixzPXUueTEtYzticmVhaztjYXNlImxlZnQiOm89ImVuZCIsYT11LngxLWwsbi55PXUueTE7YnJlYWs7Y2FzZSJyaWdodCI6bz0ic3RhcnQiLGE9dS54MStsLG4ueT11LnkxfXZhciBoPXRoaXMuX2dldFRpY2tWYWx1ZXMoKSxkPXRoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5zZWxlY3RBbGwoIi4iK0FtdC5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MpLmRhdGEoaCk7cmV0dXJuIGQuZXhpdCgpLnJlbW92ZSgpLGQuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKEFtdC5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MsITApLm1lcmdlKGQpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsbykuc3R5bGUoInZpc2liaWxpdHkiLCJpbmhlcml0IikuYXR0cnMobikudGV4dCgoZnVuY3Rpb24odCl7cmV0dXJuIGUuZm9ybWF0dGVyKCkodCl9KSksdGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2ErIiwgIitzKyIpIiksdGhpcy5fc2hvd0FsbFRpY2tNYXJrcygpLHRoaXMuc2hvd0VuZFRpY2tMYWJlbHMoKXx8dGhpcy5faGlkZUVuZFRpY2tMYWJlbHMoKSx0aGlzLl9oaWRlT3ZlcmZsb3dpbmdUaWNrTGFiZWxzKCksdGhpcy5faGlkZU92ZXJsYXBwaW5nVGlja0xhYmVscygpLCJjZW50ZXIiIT09dGhpcy5fdGlja0xhYmVsUG9zaXRpb25pbmcmJnRoaXMuX2hpZGVUaWNrTWFya3NXaXRob3V0TGFiZWwoKSx0aGlzfSxlLnByb3RvdHlwZS50aWNrTGFiZWxQb3NpdGlvbj1mdW5jdGlvbih0KXtpZihudWxsPT10KXJldHVybiB0aGlzLl90aWNrTGFiZWxQb3NpdGlvbmluZzt2YXIgZT10LnRvTG93ZXJDYXNlKCk7aWYodGhpcy5pc0hvcml6b250YWwoKSl7aWYoImxlZnQiIT09ZSYmImNlbnRlciIhPT1lJiYicmlnaHQiIT09ZSl0aHJvdyBuZXcgRXJyb3IoZSsiIGlzIG5vdCBhIHZhbGlkIHRpY2sgbGFiZWwgcG9zaXRpb24gZm9yIGEgaG9yaXpvbnRhbCBOdW1lcmljQXhpcyIpfWVsc2UgaWYoInRvcCIhPT1lJiYiY2VudGVyIiE9PWUmJiJib3R0b20iIT09ZSl0aHJvdyBuZXcgRXJyb3IoZSsiIGlzIG5vdCBhIHZhbGlkIHRpY2sgbGFiZWwgcG9zaXRpb24gZm9yIGEgdmVydGljYWwgTnVtZXJpY0F4aXMiKTtyZXR1cm4gdGhpcy5fdGlja0xhYmVsUG9zaXRpb25pbmc9ZSx0aGlzLnJlZHJhdygpLHRoaXN9LGUucHJvdG90eXBlLnVzZXNUZXh0V2lkdGhBcHByb3hpbWF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX3VzZXNUZXh0V2lkdGhBcHByb3hpbWF0aW9uOih0aGlzLl91c2VzVGV4dFdpZHRoQXBwcm94aW1hdGlvbj10LHRoaXMpfSxlLnByb3RvdHlwZS5faGlkZUVuZFRpY2tMYWJlbHM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVsZW1lbnQoKS5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZT10aGlzLl90aWNrTGFiZWxDb250YWluZXIuc2VsZWN0QWxsKCIuIitBbXQuQXhpcy5USUNLX0xBQkVMX0NMQVNTKTtpZigwIT09ZS5zaXplKCkpe3ZhciBuPWUubm9kZXMoKVswXTtTbXQuRE9NLmNsaWVudFJlY3RJbnNpZGUobi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0KXx8aWR0LnNlbGVjdChuKS5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpO3ZhciBpPWUubm9kZXMoKVtlLnNpemUoKS0xXTtTbXQuRE9NLmNsaWVudFJlY3RJbnNpZGUoaS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0KXx8aWR0LnNlbGVjdChpKS5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpfX0sZS5wcm90b3R5cGUuX2hpZGVPdmVybGFwcGluZ1RpY2tMYWJlbHM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLnNlbGVjdEFsbCgiLiIrQW10LkF4aXMuVElDS19MQUJFTF9DTEFTUykuZmlsdGVyKChmdW5jdGlvbih0LGUpe3ZhciBuPWlkdC5zZWxlY3QodGhpcykuc3R5bGUoInZpc2liaWxpdHkiKTtyZXR1cm4iaW5oZXJpdCI9PT1ufHwidmlzaWJsZSI9PT1ufSkpLGU9dC5ub2RlcygpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9KSksbj0xOyF0aGlzLl9oYXNPdmVybGFwV2l0aEludGVydmFsKG4sZSkmJm48ZS5sZW5ndGg7KW4rPTE7dC5lYWNoKChmdW5jdGlvbih0LGUpe3ZhciBpPWlkdC5zZWxlY3QodGhpcyk7ZSVuIT0wJiZpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIil9KSl9LGUucHJvdG90eXBlLl9oYXNPdmVybGFwV2l0aEludGVydmFsPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPSJjZW50ZXIiPT09dGhpcy5fdGlja0xhYmVsUG9zaXRpb25pbmc/dGhpcy50aWNrTGFiZWxQYWRkaW5nKCk6Myp0aGlzLnRpY2tMYWJlbFBhZGRpbmcoKSxpPWUubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gU210LkRPTS5leHBhbmRSZWN0KHQsbil9KSkscj0wO3I8aS5sZW5ndGgtdDtyKz10KWlmKFNtdC5ET00uY2xpZW50UmVjdHNPdmVybGFwKGlbcl0saVtyK3RdKSlyZXR1cm4hMTtyZXR1cm4hMH0sZS5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7dC5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlLmNhbGwodGhpcyksdGhpcy5fbWVhc3VyZXIucmVzZXQoKX0sZX0pKEFtdC5BeGlzKTtlLk51bWVyaWM9bn0pKSxQbXQ9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLmludGVydmFsVGlja0dlbmVyYXRvcj1mdW5jdGlvbiBuKHQpe2lmKHQ8PTApdGhyb3cgbmV3IEVycm9yKCJpbnRlcnZhbCBtdXN0IGJlIHBvc2l0aXZlIG51bWJlciIpO3JldHVybiBmdW5jdGlvbihlKXt2YXIgbj1lLmRvbWFpbigpLGk9TWF0aC5taW4oblswXSxuWzFdKSxyPU1hdGgubWF4KG5bMF0sblsxXSksbz1NYXRoLmNlaWwoaS90KSp0LGE9TWF0aC5mbG9vcigoci1vKS90KSsxLHM9aSV0PT0wP1tdOltpXSxsPVNtdC5NYXRoLnJhbmdlKDAsYSkubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gbytlKnR9KSksYz1yJXQ9PTA/W106W3JdO3JldHVybiBzLmNvbmNhdChsKS5jb25jYXQoYyl9fSxlLmludGVnZXJUaWNrR2VuZXJhdG9yPWZ1bmN0aW9uIGkoKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9dC5kZWZhdWx0VGlja3MoKTtyZXR1cm4gZS5maWx0ZXIoKGZ1bmN0aW9uKHQsbil7cmV0dXJuIHQlMT09MHx8MD09PW58fG49PT1lLmxlbmd0aC0xfSkpfX19KSksTm10PWJlKChmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIG4odCxlLG4pe3JldHVybiBuLShuLXQpKmV9ZnVuY3Rpb24gaSh0LGUsbil7cmV0dXJuKHQqZS1uKS8oZS0xKX1mdW5jdGlvbiByKHQsZSxuLGkpe3ZhciByPWU+MSxvPXI/aTpuO2lmKG51bGw9PW8pcmV0dXJuIGU7dmFyIGE9dC5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpLHM9TWF0aC5hYnMoYVsxXS1hWzBdKTtyZXR1cm4ocj9NYXRoLm1pbjpNYXRoLm1heCkoZSxvL3MpfWZ1bmN0aW9uIG8odCxlLHIsbyxzKXtpZihlPD0xKXJldHVybntjZW50ZXJQb2ludDpyLHpvb21BbW91bnQ6ZX07aWYobnVsbD09byYmbnVsbD09cylyZXR1cm57Y2VudGVyUG9pbnQ6cix6b29tQW1vdW50OmV9O3ZhciBsPWEodCksYz0oZnVuY3Rpb24gdSh0KXt2YXIgZT10LmdldFRyYW5zZm9ybWF0aW9uRG9tYWluKCk7cmV0dXJuIGVbMV08ZVswXX0pKHQpO289bnVsbD09bz9jPzEvMDotMS8wOm8scz1udWxsPT1zP2M/LTEvMDoxLzA6czt2YXIgaD10LmdldFRyYW5zZm9ybWF0aW9uRG9tYWluKCksZD1oWzBdLHA9aFsxXSxmPXQuc2NhbGVUcmFuc2Zvcm1hdGlvbihzKSxtPXQuc2NhbGVUcmFuc2Zvcm1hdGlvbihwKSxnPW4obSxlLHIpLF89dC5zY2FsZVRyYW5zZm9ybWF0aW9uKG8pLHk9dC5zY2FsZVRyYW5zZm9ybWF0aW9uKGQpLHY9bih5LGUsciksYj1NYXRoLmFicyhmLV8pO2lmKE1hdGguYWJzKGctdik+Yil7dmFyIHg9KGYtXykvKG0teSk7cmV0dXJuIDEhPT14P3tjZW50ZXJQb2ludDppKG0seCxmKSx6b29tQW1vdW50Onh9OntjZW50ZXJQb2ludDpyLHpvb21BbW91bnQ6eH19cmV0dXJuIGc+ZiE9bD97Y2VudGVyUG9pbnQ6aShtLGUsZiksem9vbUFtb3VudDplfTp2PF8hPWw/e2NlbnRlclBvaW50OmkoeSxlLF8pLHpvb21BbW91bnQ6ZX06e2NlbnRlclBvaW50OnIsem9vbUFtb3VudDplfX1mdW5jdGlvbiBhKHQpe3ZhciBlPXQucmFuZ2UoKTtyZXR1cm4gZVsxXTxlWzBdfQovKioKICAgICAqIENvcHlyaWdodCAyMDE3LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS56b29tT3V0PW4sZS5jb25zdHJhaW5lZFpvb209ZnVuY3Rpb24gcyh0LGUsbixpLGEsbCxjKXtyZXR1cm4gbyh0LGU9cih0LGUsaSxhKSxuLGwsYyl9LGUuY29uc3RyYWluWm9vbUV4dGVudHM9cixlLmNvbnN0cmFpblpvb21WYWx1ZXM9byxlLmNvbnN0cmFpbmVkVHJhbnNsYXRpb249ZnVuY3Rpb24gbCh0LGUsbixpKXt2YXIgcixvPXQuZ2V0VHJhbnNmb3JtYXRpb25Eb21haW4oKSxzPW9bMF0sbD1vWzFdLGM9YSh0KTtpZihlPjAhPT1jKXtpZihudWxsIT0ocj1pKSl7dmFyIHU9dC5zY2FsZVRyYW5zZm9ybWF0aW9uKGwpLGg9dC5zY2FsZVRyYW5zZm9ybWF0aW9uKHIpO2U9KGM/TWF0aC5tYXg6TWF0aC5taW4pKHUrZSxoKS11fX1lbHNlIGlmKG51bGwhPShyPW4pKXt2YXIgZD10LnNjYWxlVHJhbnNmb3JtYXRpb24ocykscD10LnNjYWxlVHJhbnNmb3JtYXRpb24ocik7ZT0oYz9NYXRoLm1pbjpNYXRoLm1heCkoZCtlLHApLWR9cmV0dXJuIGV9fSkpLEltdD1iZSgoZnVuY3Rpb24odCxlKXsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPShmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLl9hdXRvRG9tYWluQXV0b21hdGljYWxseT0hMCx0aGlzLl9kb21haW5Nb2RpZmljYXRpb25JblByb2dyZXNzPSExLHRoaXMuX3VwZGF0ZUlkPTAsdGhpcy5fY2FsbGJhY2tzPW5ldyBTbXQuQ2FsbGJhY2tTZXQsdGhpcy5faW5jbHVkZWRWYWx1ZXNQcm92aWRlcnM9bmV3IFNtdC5TZXR9cmV0dXJuIHQucHJvdG90eXBlLmV4dGVudE9mVmFsdWVzPWZ1bmN0aW9uKHQpe3JldHVybltdfSx0LnByb3RvdHlwZS5fZ2V0QWxsSW5jbHVkZWRWYWx1ZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt2b2lkIDA9PT10JiYodD0hMSk7dmFyIG49W107cmV0dXJuIHRoaXMuX2luY2x1ZGVkVmFsdWVzUHJvdmlkZXJzLmZvckVhY2goKGZ1bmN0aW9uKGkpe3ZhciByPWkoZSx0KTtuPW4uY29uY2F0KHIpfSkpLG59LHQucHJvdG90eXBlLl9nZXRFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm5bXX0sdC5wcm90b3R5cGUub25VcGRhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NhbGxiYWNrcy5hZGQodCksdGhpc30sdC5wcm90b3R5cGUub2ZmVXBkYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jYWxsYmFja3MuZGVsZXRlKHQpLHRoaXN9LHQucHJvdG90eXBlLl9kaXNwYXRjaFVwZGF0ZT1mdW5jdGlvbigpe3RoaXMuX3VwZGF0ZUlkKyssdGhpcy5fY2FsbGJhY2tzLmNhbGxDYWxsYmFja3ModGhpcyl9LHQucHJvdG90eXBlLmF1dG9Eb21haW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXV0b0RvbWFpbkF1dG9tYXRpY2FsbHk9ITAsdGhpcy5fc2V0RG9tYWluKHRoaXMuX2dldEV4dGVudCgpKSx0aGlzfSx0LnByb3RvdHlwZS5hdXRvRG9tYWluSWZBdXRvbWF0aWNNb2RlPWZ1bmN0aW9uKCl7dGhpcy5fYXV0b0RvbWFpbkF1dG9tYXRpY2FsbHkmJnRoaXMuYXV0b0RvbWFpbigpfSx0LnByb3RvdHlwZS5zY2FsZT1mdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoIlN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIHNjYWxlIil9LHQucHJvdG90eXBlLnRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tYWluKCl9LHQucHJvdG90eXBlLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9nZXREb21haW4oKToodGhpcy5fYXV0b0RvbWFpbkF1dG9tYXRpY2FsbHk9ITEsdGhpcy5fc2V0RG9tYWluKHQpLHRoaXMpfSx0LnByb3RvdHlwZS5fZ2V0RG9tYWluPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBfZ2V0RG9tYWluIil9LHQucHJvdG90eXBlLl9zZXREb21haW49ZnVuY3Rpb24odCl7dGhpcy5fZG9tYWluTW9kaWZpY2F0aW9uSW5Qcm9ncmVzc3x8KHRoaXMuX2RvbWFpbk1vZGlmaWNhdGlvbkluUHJvZ3Jlc3M9ITAsdGhpcy5fYmFja2luZ1NjYWxlRG9tYWluKHQpLHRoaXMuX2Rpc3BhdGNoVXBkYXRlKCksdGhpcy5fZG9tYWluTW9kaWZpY2F0aW9uSW5Qcm9ncmVzcz0hMSl9LHQucHJvdG90eXBlLl9iYWNraW5nU2NhbGVEb21haW49ZnVuY3Rpb24odCl7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBfYmFja2luZ0RvbWFpbiIpfSx0LnByb3RvdHlwZS5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9nZXRSYW5nZSgpOih0aGlzLl9zZXRSYW5nZSh0KSx0aGlzKX0sdC5wcm90b3R5cGUuX2dldFJhbmdlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBfZ2V0UmFuZ2UiKX0sdC5wcm90b3R5cGUuX3NldFJhbmdlPWZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgX3NldFJhbmdlIil9LHQucHJvdG90eXBlLmFkZEluY2x1ZGVkVmFsdWVzUHJvdmlkZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2luY2x1ZGVkVmFsdWVzUHJvdmlkZXJzLmFkZCh0KSx0aGlzLmF1dG9Eb21haW5JZkF1dG9tYXRpY01vZGUoKSx0aGlzfSx0LnByb3RvdHlwZS5yZW1vdmVJbmNsdWRlZFZhbHVlc1Byb3ZpZGVyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9pbmNsdWRlZFZhbHVlc1Byb3ZpZGVycy5kZWxldGUodCksdGhpcy5hdXRvRG9tYWluSWZBdXRvbWF0aWNNb2RlKCksdGhpc30sdC5wcm90b3R5cGUudXBkYXRlSWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdXBkYXRlSWR9LHR9KSgpO2UuU2NhbGU9bn0pKSxPbXQ9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1bMCwxXSxpPShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dmFyIGk9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBpLl9yYW5nZT1bMCwxXSxpLl9kM1NjYWxlPWlkdC5zY2FsZUJhbmQoKSxpLl9kM1NjYWxlLnJhbmdlKG4pLGkuX2QzVHJhbnNmb3JtYXRpb25TY2FsZT1pZHQuc2NhbGVMaW5lYXIoKSxpLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUuZG9tYWluKG4pLGkuX2lubmVyUGFkZGluZz1lLl9jb252ZXJ0VG9QbG90dGFibGVJbm5lclBhZGRpbmcoLjMpLGkuX291dGVyUGFkZGluZz1lLl9jb252ZXJ0VG9QbG90dGFibGVPdXRlclBhZGRpbmcoLjUsLjMpLGl9cmV0dXJuIERmdC5fX2V4dGVuZHMoZSx0KSxlLnByb3RvdHlwZS5jbG9uZVdpdGhvdXRQcm92aWRlcnM9ZnVuY3Rpb24oKXt2YXIgdD0obmV3IGUpLmRvbWFpbih0aGlzLmRvbWFpbigpKS5yYW5nZSh0aGlzLnJhbmdlKCkpLmlubmVyUGFkZGluZyh0aGlzLmlubmVyUGFkZGluZygpKS5vdXRlclBhZGRpbmcodGhpcy5vdXRlclBhZGRpbmcoKSk7cmV0dXJuIHQuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5kb21haW4odGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlLmRvbWFpbigpKSx0fSxlLnByb3RvdHlwZS5leHRlbnRPZlZhbHVlcz1mdW5jdGlvbih0KXtyZXR1cm4gU210LkFycmF5LnVuaXEodCl9LGUucHJvdG90eXBlLl9nZXRFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gU210LkFycmF5LnVuaXEodGhpcy5fZ2V0QWxsSW5jbHVkZWRWYWx1ZXMoKSl9LGUucHJvdG90eXBlLmRvbWFpbj1mdW5jdGlvbihlKXtyZXR1cm4gdC5wcm90b3R5cGUuZG9tYWluLmNhbGwodGhpcyxlKX0sZS5wcm90b3R5cGUuaW52ZXJ0UmFuZ2U9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt2b2lkIDA9PT10JiYodD10aGlzLnJhbmdlKCkpO3ZhciBuPXRoaXMuX2QzU2NhbGUuYmFuZHdpZHRoKCksaT10aGlzLmludmVydGVkVHJhbnNmb3JtYXRpb24odFswXSkscj10aGlzLmludmVydGVkVHJhbnNmb3JtYXRpb24odFsxXSksbz10aGlzLl9kM1NjYWxlLmRvbWFpbigpLGE9by5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBlLl9kM1NjYWxlKHQpK24vMn0pKSxzPWlkdC5iaXNlY3QoYSxpKSxsPWlkdC5iaXNlY3QoYSxyKTtyZXR1cm4gby5zbGljZShzLGwpfSxlLnByb3RvdHlwZS5yYW5nZT1mdW5jdGlvbihlKXtyZXR1cm4gdC5wcm90b3R5cGUucmFuZ2UuY2FsbCh0aGlzLGUpfSxlLl9jb252ZXJ0VG9QbG90dGFibGVJbm5lclBhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIDEvKDEtdCktMX0sZS5fY29udmVydFRvUGxvdHRhYmxlT3V0ZXJQYWRkaW5nPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQvKDEtZSl9LGUucHJvdG90eXBlLl9zZXRCYW5kcz1mdW5jdGlvbigpe3ZhciB0PTEtMS8oMSt0aGlzLmlubmVyUGFkZGluZygpKSxlPXRoaXMub3V0ZXJQYWRkaW5nKCkvKDErdGhpcy5pbm5lclBhZGRpbmcoKSk7dGhpcy5fZDNTY2FsZS5wYWRkaW5nSW5uZXIodCksdGhpcy5fZDNTY2FsZS5wYWRkaW5nT3V0ZXIoZSl9LGUucHJvdG90eXBlLnJhbmdlQmFuZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZXNjYWxlQmFuZCh0aGlzLl9kM1NjYWxlLmJhbmR3aWR0aCgpKX0sZS5wcm90b3R5cGUuc3RlcFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Jlc2NhbGVCYW5kKHRoaXMuX2QzU2NhbGUuYmFuZHdpZHRoKCkqKDErdGhpcy5pbm5lclBhZGRpbmcoKSkpfSxlLnByb3RvdHlwZS50aWNrcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbWFpbigpfSxlLnByb3RvdHlwZS5pbm5lclBhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5faW5uZXJQYWRkaW5nOih0aGlzLl9pbm5lclBhZGRpbmc9dCx0aGlzLnJhbmdlKHRoaXMucmFuZ2UoKSksdGhpcy5fZGlzcGF0Y2hVcGRhdGUoKSx0aGlzKX0sZS5wcm90b3R5cGUub3V0ZXJQYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX291dGVyUGFkZGluZzoodGhpcy5fb3V0ZXJQYWRkaW5nPXQsdGhpcy5yYW5nZSh0aGlzLnJhbmdlKCkpLHRoaXMuX2Rpc3BhdGNoVXBkYXRlKCksdGhpcyl9LGUucHJvdG90eXBlLnNjYWxlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2QzU2NhbGUodCkrdGhpcy5fZDNTY2FsZS5iYW5kd2lkdGgoKS8yO3JldHVybiB0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUoZSl9LGUucHJvdG90eXBlLnpvb209ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3RoaXMuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5kb21haW4odGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlLnJhbmdlKCkubWFwKChmdW5jdGlvbihpKXtyZXR1cm4gbi5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlLmludmVydChObXQuem9vbU91dChpLHQsZSkpfSkpKSx0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpfSxlLnByb3RvdHlwZS5wYW49ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUuZG9tYWluKHRoaXMuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5yYW5nZSgpLm1hcCgoZnVuY3Rpb24obil7cmV0dXJuIGUuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5pbnZlcnQobit0KX0pKSksdGhpcy5fZGlzcGF0Y2hVcGRhdGUoKX0sZS5wcm90b3R5cGUuc2NhbGVUcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlKHQpfSxlLnByb3RvdHlwZS5pbnZlcnRlZFRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUuaW52ZXJ0KHQpfSxlLnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkV4dGVudD1mdW5jdGlvbigpe3JldHVybiBufSxlLnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUuZG9tYWluKCl9LGUucHJvdG90eXBlLnNldFRyYW5zZm9ybWF0aW9uRG9tYWluPWZ1bmN0aW9uKHQpe3RoaXMuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5kb21haW4odCksdGhpcy5fZGlzcGF0Y2hVcGRhdGUoKX0sZS5wcm90b3R5cGUuX2dldERvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYWNraW5nU2NhbGVEb21haW4oKX0sZS5wcm90b3R5cGUuX2JhY2tpbmdTY2FsZURvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9kM1NjYWxlLmRvbWFpbigpOih0aGlzLl9kM1NjYWxlLmRvbWFpbih0KSx0aGlzLl9zZXRCYW5kcygpLHRoaXMpfSxlLnByb3RvdHlwZS5fZ2V0UmFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmFuZ2V9LGUucHJvdG90eXBlLl9zZXRSYW5nZT1mdW5jdGlvbih0KXt0aGlzLl9yYW5nZT10LHRoaXMuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5yYW5nZSh0KSx0aGlzLl9zZXRCYW5kcygpfSxlLnByb3RvdHlwZS5fcmVzY2FsZUJhbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguYWJzKHRoaXMuX2QzVHJhbnNmb3JtYXRpb25TY2FsZSh0KS10aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUoMCkpfSxlfSkoSW10LlNjYWxlKTtlLkNhdGVnb3J5PWl9KSksUm10PWJlKChmdW5jdGlvbih0LGUpewovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuY291bnQ9MCx0aGlzLnRyYWNrZXI9e319cmV0dXJuIHQucHJvdG90eXBlLmdldEluZGV4PWZ1bmN0aW9uKHQpe2lmKG51bGwhPXRoaXMudHJhY2tlclt0XSlyZXR1cm4gdGhpcy50cmFja2VyW3RdO3ZhciBlPXRoaXMuY291bnQ7cmV0dXJuIHRoaXMudHJhY2tlclt0XT1lLHRoaXMuY291bnQrPTEsZX0sdC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLmNvdW50PTAsdGhpcy50cmFja2VyPXt9fSx0fSkoKSxpPShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGkpe3ZhciByLG89dC5jYWxsKHRoaXMpfHx0aGlzO3N3aXRjaChvLl9yYW5nZUxlbmd0aD0xLG8uX3RyYWNrZXI9bmV3IG4saSl7Y2FzZSBudWxsOmNhc2Ugdm9pZCAwOm51bGw9PWUuX3Bsb3R0YWJsZUNvbG9yQ2FjaGUmJihlLl9wbG90dGFibGVDb2xvckNhY2hlPWUuX2dldFBsb3R0YWJsZUNvbG9ycygpKSxyPWlkdC5zY2FsZU9yZGluYWwoKS5yYW5nZShlLl9wbG90dGFibGVDb2xvckNhY2hlKTticmVhaztjYXNlIkNhdGVnb3J5MTAiOmNhc2UiY2F0ZWdvcnkxMCI6Y2FzZSIxMCI6cj1pZHQuc2NhbGVPcmRpbmFsKGlkdC5zY2hlbWVDYXRlZ29yeTEwKTticmVhaztjYXNlIkNhdGVnb3J5MjAiOmNhc2UiY2F0ZWdvcnkyMCI6Y2FzZSIyMCI6cj1pZHQuc2NhbGVPcmRpbmFsKGlkdC5zY2hlbWVDYXRlZ29yeTIwKTticmVhaztjYXNlIkNhdGVnb3J5MjBiIjpjYXNlImNhdGVnb3J5MjBiIjpjYXNlIjIwYiI6cj1pZHQuc2NhbGVPcmRpbmFsKGlkdC5zY2hlbWVDYXRlZ29yeTIwYik7YnJlYWs7Y2FzZSJDYXRlZ29yeTIwYyI6Y2FzZSJjYXRlZ29yeTIwYyI6Y2FzZSIyMGMiOnI9aWR0LnNjYWxlT3JkaW5hbChpZHQuc2NoZW1lQ2F0ZWdvcnkyMGMpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBDb2xvclNjYWxlIHR5cGUiKX1yZXR1cm4gby5fZDNTY2FsZT1yLG8uX3JhbmdlTGVuZ3RoPW8uX2QzU2NhbGUucmFuZ2UoKS5sZW5ndGgsb31yZXR1cm4gRGZ0Ll9fZXh0ZW5kcyhlLHQpLGUucHJvdG90eXBlLmV4dGVudE9mVmFsdWVzPWZ1bmN0aW9uKHQpe3JldHVybiBTbXQuQXJyYXkudW5pcSh0KX0sZS5wcm90b3R5cGUuX2dldEV4dGVudD1mdW5jdGlvbigpe3JldHVybiBTbXQuQXJyYXkudW5pcSh0aGlzLl9nZXRBbGxJbmNsdWRlZFZhbHVlcygpKX0sZS5pbnZhbGlkYXRlQ29sb3JDYWNoZT1mdW5jdGlvbigpe2UuX3Bsb3R0YWJsZUNvbG9yQ2FjaGU9bnVsbH0sZS5fZ2V0UGxvdHRhYmxlQ29sb3JzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLGU9aWR0LnNlbGVjdCgiYm9keSIpLmFwcGVuZCgicGxvdHRhYmxlLWNvbG9yLXRlc3RlciIpLG49U210LkNvbG9yLmNvbG9yVGVzdChlLCIiKSxpPTAscj1TbXQuQ29sb3IuY29sb3JUZXN0KGUsInBsb3R0YWJsZS1jb2xvcnMtMCIpO251bGwhPXImJmk8dGhpcy5fTUFYSU1VTV9DT0xPUlNfRlJPTV9DU1MmJihyIT09bnx8ciE9PXRbdC5sZW5ndGgtMV0pOyl0LnB1c2gociksaSsrLHI9U210LkNvbG9yLmNvbG9yVGVzdChlLCJwbG90dGFibGUtY29sb3JzLSIraSk7cmV0dXJuIGUucmVtb3ZlKCksdH0sZS5wcm90b3R5cGUuc2NhbGU9ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5fZDNTY2FsZSh0KSxpPXRoaXMuX3RyYWNrZXIuZ2V0SW5kZXgodCkscj1NYXRoLmZsb29yKGkvdGhpcy5fcmFuZ2VMZW5ndGgpO2lmKDA9PT1yKXJldHVybiBuO3ZhciBvPU1hdGgubG9nKHIqZS5fTE9PUF9MSUdIVEVOX0ZBQ1RPUisxKTtyZXR1cm4gU210LkNvbG9yLmxpZ2h0ZW5Db2xvcihuLG8pfSxlLnByb3RvdHlwZS5fZ2V0RG9tYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JhY2tpbmdTY2FsZURvbWFpbigpfSxlLnByb3RvdHlwZS5fYmFja2luZ1NjYWxlRG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX2QzU2NhbGUuZG9tYWluKCk6KHRoaXMuX2QzU2NhbGUuZG9tYWluKHQpLHRoaXMuX3RyYWNrZXIuY2xlYXIoKSx0aGlzKX0sZS5wcm90b3R5cGUuX2dldFJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2QzU2NhbGUucmFuZ2UoKX0sZS5wcm90b3R5cGUuX3NldFJhbmdlPWZ1bmN0aW9uKHQpe3RoaXMuX2QzU2NhbGUucmFuZ2UodCksdGhpcy5fcmFuZ2VMZW5ndGg9dC5sZW5ndGh9LGUuX0xPT1BfTElHSFRFTl9GQUNUT1I9MS42LGUuX01BWElNVU1fQ09MT1JTX0ZST01fQ1NTPTI1NixlfSkoSW10LlNjYWxlKTtlLkNvbG9yPWl9KSksem10PWJlKChmdW5jdGlvbih0LGUpewovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobil7dm9pZCAwPT09biYmKG49ImxpbmVhciIpO3ZhciBpPXQuY2FsbCh0aGlzKXx8dGhpcztzd2l0Y2gobil7Y2FzZSJsaW5lYXIiOmkuX2NvbG9yU2NhbGU9aWR0LnNjYWxlTGluZWFyKCk7YnJlYWs7Y2FzZSJsb2ciOmkuX2NvbG9yU2NhbGU9aWR0LnNjYWxlTG9nKCk7YnJlYWs7Y2FzZSJzcXJ0IjppLl9jb2xvclNjYWxlPWlkdC5zY2FsZVNxcnQoKTticmVhaztjYXNlInBvdyI6aS5fY29sb3JTY2FsZT1pZHQuc2NhbGVQb3coKX1pZihudWxsPT1pLl9jb2xvclNjYWxlKXRocm93IG5ldyBFcnJvcigidW5rbm93biBRdWFudGl0YXRpdmVTY2FsZSBzY2FsZSB0eXBlICIrbik7cmV0dXJuIGkucmFuZ2UoZS5SRURTKSxpfXJldHVybiBEZnQuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUuZXh0ZW50T2ZWYWx1ZXM9ZnVuY3Rpb24odCl7dmFyIGU9aWR0LmV4dGVudCh0KTtyZXR1cm4gbnVsbD09ZVswXXx8bnVsbD09ZVsxXT9bXTplfSxlLnByb3RvdHlwZS5fZDNJbnRlcnBvbGF0ZWRTY2FsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb2xvclNjYWxlLnJhbmdlKFswLDFdKS5pbnRlcnBvbGF0ZSh0aGlzLl9pbnRlcnBvbGF0ZUNvbG9ycygpKX0sZS5wcm90b3R5cGUuX2ludGVycG9sYXRlQ29sb3JzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fY29sb3JSYW5nZTtpZih0Lmxlbmd0aDwyKXRocm93IG5ldyBFcnJvcigiQ29sb3Igc2NhbGUgYXJyYXlzIG11c3QgaGF2ZSBhdCBsZWFzdCB0d28gZWxlbWVudHMuIik7cmV0dXJuIGZ1bmN0aW9uKGUsbil7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPShlPU1hdGgubWF4KDAsTWF0aC5taW4oMSxlKSkpKih0Lmxlbmd0aC0xKSxpPU1hdGguZmxvb3Iobikscj1NYXRoLmNlaWwobiksbz1uLWk7cmV0dXJuIGlkdC5pbnRlcnBvbGF0ZUxhYih0W2ldLHRbcl0pKG8pfX19LGUucHJvdG90eXBlLl9yZXNldFNjYWxlPWZ1bmN0aW9uKCl7dGhpcy5fZDNTY2FsZT10aGlzLl9kM0ludGVycG9sYXRlZFNjYWxlKCksdGhpcy5hdXRvRG9tYWluSWZBdXRvbWF0aWNNb2RlKCksdGhpcy5fZGlzcGF0Y2hVcGRhdGUoKX0sZS5wcm90b3R5cGUuYXV0b0RvbWFpbj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2dldEFsbEluY2x1ZGVkVmFsdWVzKCk7cmV0dXJuIHQubGVuZ3RoPjAmJnRoaXMuX3NldERvbWFpbihbU210Lk1hdGgubWluKHQsMCksU210Lk1hdGgubWF4KHQsMCldKSx0aGlzfSxlLnByb3RvdHlwZS5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZDNTY2FsZSh0KX0sZS5wcm90b3R5cGUuX2dldERvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYWNraW5nU2NhbGVEb21haW4oKX0sZS5wcm90b3R5cGUuX2JhY2tpbmdTY2FsZURvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9kM1NjYWxlLmRvbWFpbigpOih0aGlzLl9kM1NjYWxlLmRvbWFpbih0KSx0aGlzKX0sZS5wcm90b3R5cGUuX2dldFJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbG9yUmFuZ2V9LGUucHJvdG90eXBlLl9zZXRSYW5nZT1mdW5jdGlvbih0KXt0aGlzLl9jb2xvclJhbmdlPXQsdGhpcy5fcmVzZXRTY2FsZSgpfSxlLlJFRFM9WyIjRkZGRkZGIiwiI0ZGRjZFMSIsIiNGRUY0QzAiLCIjRkVEOTc2IiwiI0ZFQjI0QyIsIiNGRDhEM0MiLCIjRkM0RTJBIiwiI0UzMUExQyIsIiNCMTAwMjYiXSxlLkJMVUVTPVsiI0ZGRkZGRiIsIiNDQ0ZGRkYiLCIjQTVGRkZEIiwiIzg1RjdGQiIsIiM2RUQzRUYiLCIjNTVBN0UwIiwiIzQxN0ZEMCIsIiMyNTQ1RDMiLCIjMEIwMkUxIl0sZS5QT1NORUc9WyIjMEIwMkUxIiwiIzI1NDVEMyIsIiM0MTdGRDAiLCIjNTVBN0UwIiwiIzZFRDNFRiIsIiM4NUY3RkIiLCIjQTVGRkZEIiwiI0NDRkZGRiIsIiNGRkZGRkYiLCIjRkZGNkUxIiwiI0ZFRjRDMCIsIiNGRUQ5NzYiLCIjRkVCMjRDIiwiI0ZEOEQzQyIsIiNGQzRFMkEiLCIjRTMxQTFDIiwiI0IxMDAyNiJdLGV9KShJbXQuU2NhbGUpO2UuSW50ZXJwb2xhdGVkQ29sb3I9bn0pKSxEbXQ9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBlPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gZS5fdGlja0dlbmVyYXRvcj1mdW5jdGlvbih0KXtyZXR1cm4gdC5kZWZhdWx0VGlja3MoKX0sZS5fcGFkUHJvcG9ydGlvbj0uMDUsZS5fc25hcHBpbmdEb21haW5FbmFibGVkPSEwLGUuX3BhZGRpbmdFeGNlcHRpb25zUHJvdmlkZXJzPW5ldyBTbXQuU2V0LGV9cmV0dXJuIERmdC5fX2V4dGVuZHMoZSx0KSxlLnByb3RvdHlwZS5hdXRvRG9tYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RvbWFpbk1pbj1udWxsLHRoaXMuX2RvbWFpbk1heD1udWxsLHQucHJvdG90eXBlLmF1dG9Eb21haW4uY2FsbCh0aGlzKSx0aGlzfSxlLnByb3RvdHlwZS5hdXRvRG9tYWluSWZBdXRvbWF0aWNNb2RlPWZ1bmN0aW9uKCl7aWYobnVsbD09dGhpcy5fZG9tYWluTWlufHxudWxsPT10aGlzLl9kb21haW5NYXgpe3ZhciBlPXRoaXMuX2dldEV4dGVudCgpO2lmKG51bGwhPXRoaXMuX2RvbWFpbk1pbil7dmFyIG49ZVsxXTtyZXR1cm4gdGhpcy5fZG9tYWluTWluPj1uJiYobj10aGlzLl9leHBhbmRTaW5nbGVWYWx1ZURvbWFpbihbdGhpcy5fZG9tYWluTWluLHRoaXMuX2RvbWFpbk1pbl0pWzFdKSx2b2lkIHRoaXMuX3NldERvbWFpbihbdGhpcy5fZG9tYWluTWluLG5dKX1pZihudWxsIT10aGlzLl9kb21haW5NYXgpe3ZhciBpPWVbMF07cmV0dXJuIHRoaXMuX2RvbWFpbk1heDw9aSYmKGk9dGhpcy5fZXhwYW5kU2luZ2xlVmFsdWVEb21haW4oW3RoaXMuX2RvbWFpbk1heCx0aGlzLl9kb21haW5NYXhdKVswXSksdm9pZCB0aGlzLl9zZXREb21haW4oW2ksdGhpcy5fZG9tYWluTWF4XSl9dC5wcm90b3R5cGUuYXV0b0RvbWFpbklmQXV0b21hdGljTW9kZS5jYWxsKHRoaXMpfWVsc2UgdGhpcy5fc2V0RG9tYWluKFt0aGlzLl9kb21haW5NaW4sdGhpcy5fZG9tYWluTWF4XSl9LGUucHJvdG90eXBlLl9nZXRVbmJvdW5kZWRFeHRlbnQ9ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9ITEpO3ZhciBlPXRoaXMuX2dldEFsbEluY2x1ZGVkVmFsdWVzKHQpLG49dGhpcy5fZGVmYXVsdEV4dGVudCgpO2lmKDAhPT1lLmxlbmd0aCl7dmFyIGk9W1NtdC5NYXRoLm1pbihlLG5bMF0pLFNtdC5NYXRoLm1heChlLG5bMV0pXTtuPXRoaXMuX3BhZERvbWFpbihpKX1yZXR1cm4gbn0sZS5wcm90b3R5cGUuX2dldEV4dGVudD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2dldFVuYm91bmRlZEV4dGVudCgpO3JldHVybiBudWxsIT10aGlzLl9kb21haW5NaW4mJih0WzBdPXRoaXMuX2RvbWFpbk1pbiksbnVsbCE9dGhpcy5fZG9tYWluTWF4JiYodFsxXT10aGlzLl9kb21haW5NYXgpLHR9LGUucHJvdG90eXBlLmFkZFBhZGRpbmdFeGNlcHRpb25zUHJvdmlkZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhZGRpbmdFeGNlcHRpb25zUHJvdmlkZXJzLmFkZCh0KSx0aGlzLmF1dG9Eb21haW5JZkF1dG9tYXRpY01vZGUoKSx0aGlzfSxlLnByb3RvdHlwZS5yZW1vdmVQYWRkaW5nRXhjZXB0aW9uc1Byb3ZpZGVyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYWRkaW5nRXhjZXB0aW9uc1Byb3ZpZGVycy5kZWxldGUodCksdGhpcy5hdXRvRG9tYWluSWZBdXRvbWF0aWNNb2RlKCksdGhpc30sZS5wcm90b3R5cGUucGFkUHJvcG9ydGlvbj1mdW5jdGlvbih0KXtpZihudWxsPT10KXJldHVybiB0aGlzLl9wYWRQcm9wb3J0aW9uO2lmKHQ8MCl0aHJvdyBuZXcgRXJyb3IoInBhZFByb3BvcnRpb24gbXVzdCBiZSBub24tbmVnYXRpdmUiKTtyZXR1cm4gdGhpcy5fcGFkUHJvcG9ydGlvbj10LHRoaXMuYXV0b0RvbWFpbklmQXV0b21hdGljTW9kZSgpLHRoaXN9LGUucHJvdG90eXBlLl9wYWREb21haW49ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZih0WzBdLnZhbHVlT2YoKT09PXRbMV0udmFsdWVPZigpKXJldHVybiB0aGlzLl9leHBhbmRTaW5nbGVWYWx1ZURvbWFpbih0KTtpZigwPT09dGhpcy5fcGFkUHJvcG9ydGlvbilyZXR1cm4gdDt2YXIgbj10aGlzLl9wYWRQcm9wb3J0aW9uLzIsaT10WzBdLHI9dFsxXSxvPSExLGE9ITE7dGhpcy5fcGFkZGluZ0V4Y2VwdGlvbnNQcm92aWRlcnMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dChlKS5mb3JFYWNoKChmdW5jdGlvbih0KXt0LnZhbHVlT2YoKT09PWkudmFsdWVPZigpJiYobz0hMCksdC52YWx1ZU9mKCk9PT1yLnZhbHVlT2YoKSYmKGE9ITApfSkpfSkpO3ZhciBzPXRoaXMuX2JhY2tpbmdTY2FsZURvbWFpbigpO3RoaXMuX2JhY2tpbmdTY2FsZURvbWFpbih0KTt2YXIgbD1vP2k6dGhpcy5pbnZlcnQodGhpcy5zY2FsZShpKS0odGhpcy5zY2FsZShyKS10aGlzLnNjYWxlKGkpKSpuKSxjPWE/cjp0aGlzLmludmVydCh0aGlzLnNjYWxlKHIpKyh0aGlzLnNjYWxlKHIpLXRoaXMuc2NhbGUoaSkpKm4pO3JldHVybiB0aGlzLl9iYWNraW5nU2NhbGVEb21haW4ocyksdGhpcy5fc25hcHBpbmdEb21haW5FbmFibGVkP3RoaXMuX25pY2VEb21haW4oW2wsY10pOltsLGNdfSxlLnByb3RvdHlwZS5zbmFwcGluZ0RvbWFpbkVuYWJsZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5fc25hcHBpbmdEb21haW5FbmFibGVkOih0aGlzLl9zbmFwcGluZ0RvbWFpbkVuYWJsZWQ9dCx0aGlzLmF1dG9Eb21haW5JZkF1dG9tYXRpY01vZGUoKSx0aGlzKX0sZS5wcm90b3R5cGUuX2V4cGFuZFNpbmdsZVZhbHVlRG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiB0fSxlLnByb3RvdHlwZS5pbnZlcnQ9ZnVuY3Rpb24odCl7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBpbnZlcnQiKX0sZS5wcm90b3R5cGUuZG9tYWluPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT1lJiYodGhpcy5fZG9tYWluTWluPWVbMF0sdGhpcy5fZG9tYWluTWF4PWVbMV0pLHQucHJvdG90eXBlLmRvbWFpbi5jYWxsKHRoaXMsZSl9LGUucHJvdG90eXBlLmRvbWFpbk1pbj1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLmRvbWFpbigpWzBdOih0aGlzLl9kb21haW5NaW49dCx0aGlzLmF1dG9Eb21haW5JZkF1dG9tYXRpY01vZGUoKSx0aGlzKX0sZS5wcm90b3R5cGUuZG9tYWluTWF4PWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuZG9tYWluKClbMV06KHRoaXMuX2RvbWFpbk1heD10LHRoaXMuYXV0b0RvbWFpbklmQXV0b21hdGljTW9kZSgpLHRoaXMpfSxlLnByb3RvdHlwZS5leHRlbnRPZlZhbHVlcz1mdW5jdGlvbih0KXt2YXIgZT1pZHQuZXh0ZW50KHQuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gU210Lk1hdGguaXNWYWxpZE51bWJlcigrdCl9KSkpO3JldHVybiBudWxsPT1lWzBdfHxudWxsPT1lWzFdP1tdOmV9LGUucHJvdG90eXBlLnpvb209ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3RoaXMuZG9tYWluKHRoaXMucmFuZ2UoKS5tYXAoKGZ1bmN0aW9uKGkpe3JldHVybiBuLmludmVydChObXQuem9vbU91dChpLHQsZSkpfSkpKX0sZS5wcm90b3R5cGUucGFuPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5kb21haW4odGhpcy5yYW5nZSgpLm1hcCgoZnVuY3Rpb24obil7cmV0dXJuIGUuaW52ZXJ0KG4rdCl9KSkpfSxlLnByb3RvdHlwZS5zY2FsZVRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgc2NhbGVUcmFuc2Zvcm1hdGlvbiIpfSxlLnByb3RvdHlwZS5pbnZlcnRlZFRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgaW52ZXJ0ZWRUcmFuc2Zvcm1hdGlvbiIpfSxlLnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkV4dGVudD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgZ2V0VHJhbnNmb3JtYXRpb25FeHRlbnQiKX0sZS5wcm90b3R5cGUuZ2V0VHJhbnNmb3JtYXRpb25Eb21haW49ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIGdldFRyYW5zZm9ybWF0aW9uRG9tYWluIil9LGUucHJvdG90eXBlLnNldFRyYW5zZm9ybWF0aW9uRG9tYWluPWZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgc2V0VHJhbnNmb3JtYXRpb25Eb21haW4iKX0sZS5wcm90b3R5cGUuX3NldERvbWFpbj1mdW5jdGlvbihlKXt2YXIgbj1mdW5jdGlvbih0KXtyZXR1cm4gU210Lk1hdGguaXNOYU4odCl8fHQ9PT0xLzB8fHQ9PT0tMS8wfTtuKGVbMF0pfHxuKGVbMV0pP1NtdC5XaW5kb3cud2FybigiV2FybmluZzogUXVhbnRpdGF0aXZlU2NhbGVzIGNhbm5vdCB0YWtlIE5hTiBvciBJbmZpbml0eSBhcyBhIGRvbWFpbiB2YWx1ZS4gSWdub3JpbmcuIik6dC5wcm90b3R5cGUuX3NldERvbWFpbi5jYWxsKHRoaXMsZSl9LGUucHJvdG90eXBlLmRlZmF1bHRUaWNrcz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgX2dldERlZmF1bHRUaWNrcyIpfSxlLnByb3RvdHlwZS50aWNrcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl90aWNrR2VuZXJhdG9yKHRoaXMpfSxlLnByb3RvdHlwZS5fbmljZURvbWFpbj1mdW5jdGlvbih0LGUpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgX25pY2VEb21haW4iKX0sZS5wcm90b3R5cGUuX2RlZmF1bHRFeHRlbnQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIF9kZWZhdWx0RXh0ZW50Iil9LGUucHJvdG90eXBlLnRpY2tHZW5lcmF0b3I9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5fdGlja0dlbmVyYXRvcjoodGhpcy5fdGlja0dlbmVyYXRvcj10LHRoaXMpfSxlLl9ERUZBVUxUX05VTV9USUNLUz0xMCxlfSkoSW10LlNjYWxlKTtlLlF1YW50aXRhdGl2ZVNjYWxlPW59KSksQm10PWJlKChmdW5jdGlvbih0LGUpewovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt2YXIgZT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGUuX2QzU2NhbGU9aWR0LnNjYWxlTGluZWFyKCksZX1yZXR1cm4gRGZ0Ll9fZXh0ZW5kcyhlLHQpLGUucHJvdG90eXBlLl9kZWZhdWx0RXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJuWzAsMV19LGUucHJvdG90eXBlLl9leHBhbmRTaW5nbGVWYWx1ZURvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gdFswXT09PXRbMV0/W3RbMF0tMSx0WzFdKzFdOnR9LGUucHJvdG90eXBlLnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9kM1NjYWxlKHQpfSxlLnByb3RvdHlwZS5zY2FsZVRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnNjYWxlKHQpfSxlLnByb3RvdHlwZS5pbnZlcnRlZFRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmludmVydCh0KX0sZS5wcm90b3R5cGUuZ2V0VHJhbnNmb3JtYXRpb25FeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZ2V0VW5ib3VuZGVkRXh0ZW50KCEwKX0sZS5wcm90b3R5cGUuZ2V0VHJhbnNmb3JtYXRpb25Eb21haW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21haW4oKX0sZS5wcm90b3R5cGUuc2V0VHJhbnNmb3JtYXRpb25Eb21haW49ZnVuY3Rpb24odCl7dGhpcy5kb21haW4odCl9LGUucHJvdG90eXBlLl9nZXREb21haW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFja2luZ1NjYWxlRG9tYWluKCl9LGUucHJvdG90eXBlLl9iYWNraW5nU2NhbGVEb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5fZDNTY2FsZS5kb21haW4oKToodGhpcy5fZDNTY2FsZS5kb21haW4odCksdGhpcyl9LGUucHJvdG90eXBlLl9nZXRSYW5nZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kM1NjYWxlLnJhbmdlKCl9LGUucHJvdG90eXBlLl9zZXRSYW5nZT1mdW5jdGlvbih0KXt0aGlzLl9kM1NjYWxlLnJhbmdlKHQpfSxlLnByb3RvdHlwZS5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2QzU2NhbGUuaW52ZXJ0KHQpfSxlLnByb3RvdHlwZS5kZWZhdWx0VGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS50aWNrcyhlLl9ERUZBVUxUX05VTV9USUNLUyl9LGUucHJvdG90eXBlLl9uaWNlRG9tYWluPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2QzU2NhbGUuY29weSgpLmRvbWFpbih0KS5uaWNlKGUpLmRvbWFpbigpfSxlfSkoRG10LlF1YW50aXRhdGl2ZVNjYWxlKTtlLkxpbmVhcj1ufSkpLEhtdD1iZSgoZnVuY3Rpb24odCxlKXsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3ZvaWQgMD09PWUmJihlPTEwKTt2YXIgbj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIG4uX2QzU2NhbGU9aWR0LnNjYWxlTG9nKCkuYmFzZShlKSxuLl9zZXREb21haW4obi5fZGVmYXVsdEV4dGVudCgpKSxufXJldHVybiBEZnQuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUuX2RlZmF1bHRFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm5bMSx0aGlzLl9kM1NjYWxlLmJhc2UoKV19LGUucHJvdG90eXBlLl9leHBhbmRTaW5nbGVWYWx1ZURvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gdFswXT09PXRbMV0/W3RbMF0vdGhpcy5fZDNTY2FsZS5iYXNlKCksdFsxXSp0aGlzLl9kM1NjYWxlLmJhc2UoKV06dH0sZS5wcm90b3R5cGUuc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2QzU2NhbGUodCl9LGUucHJvdG90eXBlLnNjYWxlVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc2NhbGUodCl9LGUucHJvdG90eXBlLmludmVydGVkVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW52ZXJ0KHQpfSxlLnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkV4dGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9nZXRVbmJvdW5kZWRFeHRlbnQoITApfSxlLnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbWFpbigpfSxlLnByb3RvdHlwZS5zZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbih0KXt0aGlzLmRvbWFpbih0KX0sZS5wcm90b3R5cGUuX2dldERvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYWNraW5nU2NhbGVEb21haW4oKX0sZS5wcm90b3R5cGUuX2JhY2tpbmdTY2FsZURvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9kM1NjYWxlLmRvbWFpbigpOih0aGlzLl9kM1NjYWxlLmRvbWFpbih0KSx0aGlzKX0sZS5wcm90b3R5cGUuX2dldFJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2QzU2NhbGUucmFuZ2UoKX0sZS5wcm90b3R5cGUuX3NldFJhbmdlPWZ1bmN0aW9uKHQpe3RoaXMuX2QzU2NhbGUucmFuZ2UodCl9LGUucHJvdG90eXBlLmludmVydD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZDNTY2FsZS5pbnZlcnQodCl9LGUucHJvdG90eXBlLmRlZmF1bHRUaWNrcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kM1NjYWxlLnRpY2tzKGUuX0RFRkFVTFRfTlVNX1RJQ0tTKX0sZS5wcm90b3R5cGUuX25pY2VEb21haW49ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS5jb3B5KCkuZG9tYWluKHQpLm5pY2UoKS5kb21haW4oKX0sZX0pKERtdC5RdWFudGl0YXRpdmVTY2FsZSk7ZS5Mb2c9bn0pKSxGbXQ9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt2b2lkIDA9PT1lJiYoZT0xMCk7dmFyIG49dC5jYWxsKHRoaXMpfHx0aGlzO2lmKG4uX2xvZ1RpY2tHZW5lcmF0b3I9ZnVuY3Rpb24odCl7dmFyIGU9ZnVuY3Rpb24odCxlLG4pe3JldHVyblt0LGUsbl0uc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSkpWzFdfSxpPVNtdC5NYXRoLm1pbihuLl91bnRyYW5zZm9ybWVkRG9tYWluLDApLHI9U210Lk1hdGgubWF4KG4uX3VudHJhbnNmb3JtZWREb21haW4sMCksbz1pLGE9ZShpLHIsLW4uX3Bpdm90KSxzPWUoaSxyLG4uX3Bpdm90KSxsPXIsYz1uLl9sb2dUaWNrcygtYSwtbykubWFwKChmdW5jdGlvbih0KXtyZXR1cm4tdH0pKS5yZXZlcnNlKCksdT1uLl9sb2dUaWNrcyhzLGwpLGg9TWF0aC5tYXgoaSwtbi5fcGl2b3QpLGQ9TWF0aC5taW4ocixuLl9waXZvdCkscD1pZHQuc2NhbGVMaW5lYXIoKS5kb21haW4oW2gsZF0pLnRpY2tzKG4uX2hvd01hbnlUaWNrcyhoLGQpKSxmPWMuY29uY2F0KHApLmNvbmNhdCh1KTtyZXR1cm4gZi5sZW5ndGg8PTEmJihmPWlkdC5zY2FsZUxpbmVhcigpLmRvbWFpbihbaSxyXSkudGlja3MoVW10Lk1vZGlmaWVkTG9nLl9ERUZBVUxUX05VTV9USUNLUykpLGZ9LG4uX2QzU2NhbGU9aWR0LnNjYWxlTGluZWFyKCksbi5fYmFzZT1lLG4uX3Bpdm90PW4uX2Jhc2Usbi5fc2V0RG9tYWluKG4uX2RlZmF1bHRFeHRlbnQoKSksbi50aWNrR2VuZXJhdG9yKG4uX2xvZ1RpY2tHZW5lcmF0b3IpLGU8PTEpdGhyb3cgbmV3IEVycm9yKCJNb2RpZmllZExvZ1NjYWxlOiBUaGUgYmFzZSBtdXN0IGJlID4gMSIpO3JldHVybiBufXJldHVybiBEZnQuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUuX2FkanVzdGVkTG9nPWZ1bmN0aW9uKHQpe3ZhciBlPXQ8MD8tMToxO3JldHVybih0Kj1lKTx0aGlzLl9waXZvdCYmKHQrPSh0aGlzLl9waXZvdC10KS90aGlzLl9waXZvdCksKHQ9TWF0aC5sb2codCkvTWF0aC5sb2codGhpcy5fYmFzZSkpKmV9LGUucHJvdG90eXBlLl9pbnZlcnRlZEFkanVzdGVkTG9nPWZ1bmN0aW9uKHQpe3ZhciBlPXQ8MD8tMToxO3JldHVybiB0Kj1lLCh0PU1hdGgucG93KHRoaXMuX2Jhc2UsdCkpPHRoaXMuX3Bpdm90JiYodD10aGlzLl9waXZvdCoodC0xKS8odGhpcy5fcGl2b3QtMSkpLHQqZX0sZS5wcm90b3R5cGUuc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2QzU2NhbGUodGhpcy5fYWRqdXN0ZWRMb2codCkpfSxlLnByb3RvdHlwZS5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2ludmVydGVkQWRqdXN0ZWRMb2codGhpcy5fZDNTY2FsZS5pbnZlcnQodCkpfSxlLnByb3RvdHlwZS5zY2FsZVRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnNjYWxlKHQpfSxlLnByb3RvdHlwZS5pbnZlcnRlZFRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmludmVydCh0KX0sZS5wcm90b3R5cGUuZ2V0VHJhbnNmb3JtYXRpb25FeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZ2V0VW5ib3VuZGVkRXh0ZW50KCEwKX0sZS5wcm90b3R5cGUuZ2V0VHJhbnNmb3JtYXRpb25Eb21haW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21haW4oKX0sZS5wcm90b3R5cGUuc2V0VHJhbnNmb3JtYXRpb25Eb21haW49ZnVuY3Rpb24odCl7dGhpcy5kb21haW4odCl9LGUucHJvdG90eXBlLl9nZXREb21haW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdW50cmFuc2Zvcm1lZERvbWFpbn0sZS5wcm90b3R5cGUuX3NldERvbWFpbj1mdW5jdGlvbihlKXt0aGlzLl91bnRyYW5zZm9ybWVkRG9tYWluPWU7dmFyIG49W3RoaXMuX2FkanVzdGVkTG9nKGVbMF0pLHRoaXMuX2FkanVzdGVkTG9nKGVbMV0pXTt0LnByb3RvdHlwZS5fc2V0RG9tYWluLmNhbGwodGhpcyxuKX0sZS5wcm90b3R5cGUuX2JhY2tpbmdTY2FsZURvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9kM1NjYWxlLmRvbWFpbigpOih0aGlzLl9kM1NjYWxlLmRvbWFpbih0KSx0aGlzKX0sZS5wcm90b3R5cGUuX2xvZ1RpY2tzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxpPXRoaXMuX2hvd01hbnlUaWNrcyh0LGUpO2lmKDA9PT1pKXJldHVybltdO3ZhciByPU1hdGguZmxvb3IoTWF0aC5sb2codCkvTWF0aC5sb2codGhpcy5fYmFzZSkpLG89TWF0aC5jZWlsKE1hdGgubG9nKGUpL01hdGgubG9nKHRoaXMuX2Jhc2UpKSxhPWlkdC5yYW5nZShvLHIsLU1hdGguY2VpbCgoby1yKS9pKSkscz1pZHQucmFuZ2UodGhpcy5fYmFzZSwxLC0odGhpcy5fYmFzZS0xKSkubWFwKE1hdGguZmxvb3IpLGw9U210LkFycmF5LnVuaXEocyksYz1hLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGwubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5wb3cobi5fYmFzZSx0LTEpKmV9KSl9KSk7cmV0dXJuIFNtdC5BcnJheS5mbGF0dGVuKGMpLmZpbHRlcigoZnVuY3Rpb24obil7cmV0dXJuIHQ8PW4mJm48PWV9KSkuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSkpfSxlLnByb3RvdHlwZS5faG93TWFueVRpY2tzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fYWRqdXN0ZWRMb2coU210Lk1hdGgubWluKHRoaXMuX3VudHJhbnNmb3JtZWREb21haW4sMCkpLGk9dGhpcy5fYWRqdXN0ZWRMb2coU210Lk1hdGgubWF4KHRoaXMuX3VudHJhbnNmb3JtZWREb21haW4sMCkpLHI9dGhpcy5fYWRqdXN0ZWRMb2codCksbz10aGlzLl9hZGp1c3RlZExvZyhlKTtyZXR1cm4gTWF0aC5jZWlsKChvLXIpLyhpLW4pKlVtdC5Nb2RpZmllZExvZy5fREVGQVVMVF9OVU1fVElDS1MpfSxlLnByb3RvdHlwZS5fbmljZURvbWFpbj1mdW5jdGlvbih0LGUpe3JldHVybiB0fSxlLnByb3RvdHlwZS5fZGVmYXVsdEV4dGVudD1mdW5jdGlvbigpe3JldHVyblswLHRoaXMuX2Jhc2VdfSxlLnByb3RvdHlwZS5fZXhwYW5kU2luZ2xlVmFsdWVEb21haW49ZnVuY3Rpb24odCl7aWYodFswXT09PXRbMV0pe3ZhciBlPXRbMF07cmV0dXJuIGU+MD9bZS90aGlzLl9iYXNlLGUqdGhpcy5fYmFzZV06MD09PWU/Wy10aGlzLl9iYXNlLHRoaXMuX2Jhc2VdOltlKnRoaXMuX2Jhc2UsZS90aGlzLl9iYXNlXX1yZXR1cm4gdH0sZS5wcm90b3R5cGUuX2dldFJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2QzU2NhbGUucmFuZ2UoKX0sZS5wcm90b3R5cGUuX3NldFJhbmdlPWZ1bmN0aW9uKHQpe3RoaXMuX2QzU2NhbGUucmFuZ2UodCl9LGUucHJvdG90eXBlLmRlZmF1bHRUaWNrcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kM1NjYWxlLnRpY2tzKFVtdC5Nb2RpZmllZExvZy5fREVGQVVMVF9OVU1fVElDS1MpfSxlfSkoRG10LlF1YW50aXRhdGl2ZVNjYWxlKTtlLk1vZGlmaWVkTG9nPW59KSksVm10PWJlKChmdW5jdGlvbih0LGUpewovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt2YXIgZT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGUuX2QzU2NhbGU9aWR0LnNjYWxlVGltZSgpLGUuYXV0b0RvbWFpbigpLGV9cmV0dXJuIERmdC5fX2V4dGVuZHMoZSx0KSxlLnByb3RvdHlwZS50aWNrSW50ZXJ2YWw9ZnVuY3Rpb24odCxuLGkpe3ZvaWQgMD09PW4mJihuPTEpLHZvaWQgMD09PWkmJihpPSExKTt2YXIgcj1pZHQuc2NhbGVUaW1lKCksbz1lLnRpbWVJbnRlcnZhbFRvRDNUaW1lKHQsaSkuZXZlcnkobik7cmV0dXJuIHIuZG9tYWluKHRoaXMuZG9tYWluKCkpLHIucmFuZ2UodGhpcy5yYW5nZSgpKSxyLnRpY2tzKG8pfSxlLnByb3RvdHlwZS5fc2V0RG9tYWluPWZ1bmN0aW9uKGUpe2lmKGVbMV08ZVswXSl0aHJvdyBuZXcgRXJyb3IoIlNjYWxlLlRpbWUgZG9tYWluIHZhbHVlcyBtdXN0IGJlIGluIGNocm9ub2xvZ2ljYWwgb3JkZXIiKTtyZXR1cm4gdC5wcm90b3R5cGUuX3NldERvbWFpbi5jYWxsKHRoaXMsZSl9LGUucHJvdG90eXBlLl9kZWZhdWx0RXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJuW25ldyBEYXRlKCIxOTcwLTAxLTAxIiksbmV3IERhdGUoIjE5NzAtMDEtMDIiKV19LGUucHJvdG90eXBlLl9leHBhbmRTaW5nbGVWYWx1ZURvbWFpbj1mdW5jdGlvbih0KXt2YXIgZT10WzBdLmdldFRpbWUoKSxuPXRbMV0uZ2V0VGltZSgpO2lmKGU9PT1uKXt2YXIgaT1uZXcgRGF0ZShlKTtpLnNldERhdGUoaS5nZXREYXRlKCktMSk7dmFyIHI9bmV3IERhdGUobik7cmV0dXJuIHIuc2V0RGF0ZShyLmdldERhdGUoKSsxKSxbaSxyXX1yZXR1cm4gdH0sZS5wcm90b3R5cGUuc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2QzU2NhbGUodCl9LGUucHJvdG90eXBlLnNjYWxlVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc2NhbGUobmV3IERhdGUodCkpfSxlLnByb3RvdHlwZS5pbnZlcnRlZFRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmludmVydCh0KS5nZXRUaW1lKCl9LGUucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRXh0ZW50PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZ2V0VW5ib3VuZGVkRXh0ZW50KCEwKTtyZXR1cm5bdFswXS52YWx1ZU9mKCksdFsxXS52YWx1ZU9mKCldfSxlLnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZG9tYWluKCk7cmV0dXJuW3RbMF0udmFsdWVPZigpLHRbMV0udmFsdWVPZigpXX0sZS5wcm90b3R5cGUuc2V0VHJhbnNmb3JtYXRpb25Eb21haW49ZnVuY3Rpb24odCl7dmFyIGU9dFsxXTt0aGlzLmRvbWFpbihbbmV3IERhdGUodFswXSksbmV3IERhdGUoZSldKX0sZS5wcm90b3R5cGUuX2dldERvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYWNraW5nU2NhbGVEb21haW4oKX0sZS5wcm90b3R5cGUuX2JhY2tpbmdTY2FsZURvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9kM1NjYWxlLmRvbWFpbigpOih0aGlzLl9kM1NjYWxlLmRvbWFpbih0KSx0aGlzKX0sZS5wcm90b3R5cGUuX2dldFJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2QzU2NhbGUucmFuZ2UoKX0sZS5wcm90b3R5cGUuX3NldFJhbmdlPWZ1bmN0aW9uKHQpe3RoaXMuX2QzU2NhbGUucmFuZ2UodCl9LGUucHJvdG90eXBlLmludmVydD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZDNTY2FsZS5pbnZlcnQodCl9LGUucHJvdG90eXBlLmRlZmF1bHRUaWNrcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kM1NjYWxlLnRpY2tzKGUuX0RFRkFVTFRfTlVNX1RJQ0tTKX0sZS5wcm90b3R5cGUuX25pY2VEb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2QzU2NhbGUuY29weSgpLmRvbWFpbih0KS5uaWNlKCkuZG9tYWluKCl9LGUudGltZUludGVydmFsVG9EM1RpbWU9ZnVuY3Rpb24odCxlKXtzd2l0Y2godCl7Y2FzZSBqbXQuVGltZUludGVydmFsLnNlY29uZDpyZXR1cm4gZT9pZHQudXRjU2Vjb25kOmlkdC50aW1lU2Vjb25kO2Nhc2Ugam10LlRpbWVJbnRlcnZhbC5taW51dGU6cmV0dXJuIGU/aWR0LnV0Y01pbnV0ZTppZHQudGltZU1pbnV0ZTtjYXNlIGptdC5UaW1lSW50ZXJ2YWwuaG91cjpyZXR1cm4gZT9pZHQudXRjSG91cjppZHQudGltZUhvdXI7Y2FzZSBqbXQuVGltZUludGVydmFsLmRheTpyZXR1cm4gZT9pZHQudXRjRGF5OmlkdC50aW1lRGF5O2Nhc2Ugam10LlRpbWVJbnRlcnZhbC53ZWVrOnJldHVybiBlP2lkdC51dGNXZWVrOmlkdC50aW1lV2VlaztjYXNlIGptdC5UaW1lSW50ZXJ2YWwubW9udGg6cmV0dXJuIGU/aWR0LnV0Y01vbnRoOmlkdC50aW1lTW9udGg7Y2FzZSBqbXQuVGltZUludGVydmFsLnllYXI6cmV0dXJuIGU/aWR0LnV0Y1llYXI6aWR0LnRpbWVZZWFyO2RlZmF1bHQ6dGhyb3cgRXJyb3IoIlRpbWVJbnRlcnZhbCBzcGVjaWZpZWQgZG9lcyBub3QgZXhpc3Q6ICIrdCl9fSxlfSkoRG10LlF1YW50aXRhdGl2ZVNjYWxlKTtlLlRpbWU9bn0pKSxVbXQ9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLlRpY2tHZW5lcmF0b3JzPVBtdCxEZnQuX19leHBvcnRTdGFyKE9tdCxlKSxEZnQuX19leHBvcnRTdGFyKFJtdCxlKSxEZnQuX19leHBvcnRTdGFyKHptdCxlKSxEZnQuX19leHBvcnRTdGFyKEJtdCxlKSxEZnQuX19leHBvcnRTdGFyKEhtdCxlKSxEZnQuX19leHBvcnRTdGFyKEZtdCxlKSxEZnQuX19leHBvcnRTdGFyKFZtdCxlKTt2YXIgbj1PbXQ7ZS5pc1RyYW5zZm9ybWFibGU9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIERtdC5RdWFudGl0YXRpdmVTY2FsZXx8dCBpbnN0YW5jZW9mIG4uQ2F0ZWdvcnl9fSkpLGptdD1iZSgoZnVuY3Rpb24odCxlKXsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuVGltZUludGVydmFsPUlmdC5tYWtlRW51bShbInNlY29uZCIsIm1pbnV0ZSIsImhvdXIiLCJkYXkiLCJ3ZWVrIiwibW9udGgiLCJ5ZWFyIl0pLGUuVGltZUF4aXNPcmllbnRhdGlvbj1JZnQubWFrZUVudW0oWyJ0b3AiLCJib3R0b20iXSksZS5UaWVyTGFiZWxQb3NpdGlvbj1JZnQubWFrZUVudW0oWyJiZXR3ZWVuIiwiY2VudGVyIl0pO3ZhciBuLGk9KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGkoZSxuLHIpe3ZhciBvPXQuY2FsbCh0aGlzLGUsbil8fHRoaXM7cmV0dXJuIG8uX21heFRpbWVJbnRlcnZhbFByZWNpc2lvbj1udWxsLG8uX3RpZXJMYWJlbFBvc2l0aW9ucz1bXSxvLl91c2VVVEM9cixvLmFkZENsYXNzKCJ0aW1lLWF4aXMiKSxvLnRpY2tMYWJlbFBhZGRpbmcoNSksby5heGlzQ29uZmlndXJhdGlvbnMoaS5fREVGQVVMVF9USU1FX0FYSVNfQ09ORklHVVJBVElPTlMoby5fdXNlVVRDKSksby5hbm5vdGF0aW9uRm9ybWF0dGVyKENtdC50aW1lKCIlYSAlYiAlZCwgJVkiLG8uX3VzZVVUQykpLG99cmV0dXJuIERmdC5fX2V4dGVuZHMoaSx0KSxpLnByb3RvdHlwZS50aWVyTGFiZWxQb3NpdGlvbnM9ZnVuY3Rpb24odCl7aWYobnVsbD09dClyZXR1cm4gdGhpcy5fdGllckxhYmVsUG9zaXRpb25zO2lmKCF0LmV2ZXJ5KChmdW5jdGlvbih0KXtyZXR1cm4iYmV0d2VlbiI9PT10LnRvTG93ZXJDYXNlKCl8fCJjZW50ZXIiPT09dC50b0xvd2VyQ2FzZSgpfSkpKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgcG9zaXRpb24gZm9yIHRpZXIgbGFiZWxzIik7cmV0dXJuIHRoaXMuX3RpZXJMYWJlbFBvc2l0aW9ucz10LHRoaXMucmVkcmF3KCksdGhpc30saS5wcm90b3R5cGUubWF4VGltZUludGVydmFsUHJlY2lzaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX21heFRpbWVJbnRlcnZhbFByZWNpc2lvbjoodGhpcy5fbWF4VGltZUludGVydmFsUHJlY2lzaW9uPXQsdGhpcy5yZWRyYXcoKSx0aGlzKX0saS5wcm90b3R5cGUuY3VycmVudEF4aXNDb25maWd1cmF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Bvc3NpYmxlVGltZUF4aXNDb25maWd1cmF0aW9uc1t0aGlzLl9tb3N0UHJlY2lzZUNvbmZpZ0luZGV4XX0saS5wcm90b3R5cGUuYXhpc0NvbmZpZ3VyYXRpb25zPWZ1bmN0aW9uKHQpe2lmKG51bGw9PXQpcmV0dXJuIHRoaXMuX3Bvc3NpYmxlVGltZUF4aXNDb25maWd1cmF0aW9uczt0aGlzLl9wb3NzaWJsZVRpbWVBeGlzQ29uZmlndXJhdGlvbnM9dCx0aGlzLl9udW1UaWVycz1TbXQuTWF0aC5tYXgodGhpcy5fcG9zc2libGVUaW1lQXhpc0NvbmZpZ3VyYXRpb25zLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQubGVuZ3RofSkpLDApLHRoaXMuX2lzQW5jaG9yZWQmJnRoaXMuX3NldHVwRG9tRWxlbWVudHMoKTtmb3IodmFyIGU9dGhpcy50aWVyTGFiZWxQb3NpdGlvbnMoKSxuPVtdLGk9MDtpPHRoaXMuX251bVRpZXJzO2krKyluLnB1c2goZVtpXXx8ImJldHdlZW4iKTtyZXR1cm4gdGhpcy50aWVyTGFiZWxQb3NpdGlvbnMobiksdGhpcy5yZWRyYXcoKSx0aGlzfSxpLnByb3RvdHlwZS5fZ2V0TW9zdFByZWNpc2VDb25maWd1cmF0aW9uSW5kZXg9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dGhpcy5fcG9zc2libGVUaW1lQXhpc0NvbmZpZ3VyYXRpb25zLmxlbmd0aDtyZXR1cm4gdGhpcy5fcG9zc2libGVUaW1lQXhpc0NvbmZpZ3VyYXRpb25zLmZvckVhY2goKGZ1bmN0aW9uKG4saSl7aTxlJiZuLmV2ZXJ5KChmdW5jdGlvbihlKXtyZXR1cm4gdC5fY2hlY2tUaW1lQXhpc1RpZXJDb25maWd1cmF0aW9uKGUpfSkpJiYoZT1pKX0pKSxlPT09dGhpcy5fcG9zc2libGVUaW1lQXhpc0NvbmZpZ3VyYXRpb25zLmxlbmd0aCYmKFNtdC5XaW5kb3cud2Fybigiem9vbWVkIG91dCB0b28gZmFyOiBjb3VsZCBub3QgZmluZCBzdWl0YWJsZSBpbnRlcnZhbCB0byBkaXNwbGF5IGxhYmVscyIpLC0tZSksZX0saS5wcm90b3R5cGUub3JpZW50YXRpb249ZnVuY3Rpb24oZSl7aWYoZSYmKCJyaWdodCI9PT1lLnRvTG93ZXJDYXNlKCl8fCJsZWZ0Ij09PWUudG9Mb3dlckNhc2UoKSkpdGhyb3cgbmV3IEVycm9yKGUrIiBpcyBub3QgYSBzdXBwb3J0ZWQgb3JpZW50YXRpb24gZm9yIFRpbWVBeGlzIC0gb25seSBob3Jpem9udGFsIG9yaWVudGF0aW9ucyBhcmUgc3VwcG9ydGVkIik7cmV0dXJuIHQucHJvdG90eXBlLm9yaWVudGF0aW9uLmNhbGwodGhpcyxlKX0saS5wcm90b3R5cGUuX2NvbXB1dGVIZWlnaHQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9tZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0O3RoaXMuX3RpZXJIZWlnaHRzPVtdO2Zvcih2YXIgZT0wO2U8dGhpcy5fbnVtVGllcnM7ZSsrKXRoaXMuX3RpZXJIZWlnaHRzLnB1c2godCt0aGlzLnRpY2tMYWJlbFBhZGRpbmcoKSsoImJldHdlZW4iPT09dGhpcy5fdGllckxhYmVsUG9zaXRpb25zW2VdPzA6dGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCkpKTtyZXR1cm4gaWR0LnN1bSh0aGlzLl90aWVySGVpZ2h0cyl9LGkucHJvdG90eXBlLl9nZXRJbnRlcnZhbExlbmd0aD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9zY2FsZS5kb21haW4oKVswXSxuPVVtdC5UaW1lLnRpbWVJbnRlcnZhbFRvRDNUaW1lKHQuaW50ZXJ2YWwsdGhpcy5fdXNlVVRDKS5vZmZzZXQoZSx0LnN0ZXApO3JldHVybiBuPnRoaXMuX3NjYWxlLmRvbWFpbigpWzFdP3RoaXMud2lkdGgoKTpNYXRoLmFicyh0aGlzLl9zY2FsZS5zY2FsZShuKS10aGlzLl9zY2FsZS5zY2FsZShlKSl9LGkucHJvdG90eXBlLl9tYXhXaWR0aEZvckludGVydmFsPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9tZWFzdXJlci5tZWFzdXJlKHQuZm9ybWF0dGVyKGkuX0xPTkdfREFURSkpLndpZHRofSxpLnByb3RvdHlwZS5fY2hlY2tUaW1lQXhpc1RpZXJDb25maWd1cmF0aW9uPWZ1bmN0aW9uKHQpe2lmKG51bGwhPXRoaXMuX21heFRpbWVJbnRlcnZhbFByZWNpc2lvbil7dmFyIGU9aS5fU09SVEVEX1RJTUVfSU5URVJWQUxfSU5ERVhbdGhpcy5fbWF4VGltZUludGVydmFsUHJlY2lzaW9uXSxuPWkuX1NPUlRFRF9USU1FX0lOVEVSVkFMX0lOREVYW3QuaW50ZXJ2YWxdO2lmKG51bGwhPWUmJm51bGwhPW4mJm48ZSlyZXR1cm4hMX12YXIgcj10aGlzLl9tYXhXaWR0aEZvckludGVydmFsKHQpKzIqdGhpcy50aWNrTGFiZWxQYWRkaW5nKCk7cmV0dXJuIE1hdGgubWluKHRoaXMuX2dldEludGVydmFsTGVuZ3RoKHQpLHRoaXMud2lkdGgoKSk+PXJ9LGkucHJvdG90eXBlLl9zaXplRnJvbU9mZmVyPWZ1bmN0aW9uKGUsbil7dmFyIGk9dC5wcm90b3R5cGUuX3NpemVGcm9tT2ZmZXIuY2FsbCh0aGlzLGUsbikscj10aGlzLl90aWVySGVpZ2h0cy5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSxuLHIpe3JldHVybiB0K2U+aS5oZWlnaHQ/dDp0K2V9KSksbz10aGlzLm1hcmdpbigpKyh0aGlzLmFubm90YXRpb25zRW5hYmxlZCgpP3RoaXMuYW5ub3RhdGlvblRpZXJDb3VudCgpKnRoaXMuX2Fubm90YXRpb25UaWVySGVpZ2h0KCk6MCk7cmV0dXJuIGkuaGVpZ2h0PU1hdGgubWluKGkuaGVpZ2h0LHIrbyksaX0saS5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7dC5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyksdGhpcy5fc2V0dXBEb21FbGVtZW50cygpfSxpLnByb3RvdHlwZS5fc2V0dXBEb21FbGVtZW50cz1mdW5jdGlvbigpe3RoaXMuY29udGVudCgpLnNlbGVjdEFsbCgiLiIraS5USU1FX0FYSVNfVElFUl9DTEFTUykucmVtb3ZlKCksdGhpcy5fdGllckxhYmVsQ29udGFpbmVycz1bXSx0aGlzLl90aWVyTWFya0NvbnRhaW5lcnM9W10sdGhpcy5fdGllckJhc2VsaW5lcz1bXSx0aGlzLl90aWNrTGFiZWxDb250YWluZXIucmVtb3ZlKCksdGhpcy5fYmFzZWxpbmUucmVtb3ZlKCk7Zm9yKHZhciB0PTA7dDx0aGlzLl9udW1UaWVyczsrK3Qpe3ZhciBlPXRoaXMuY29udGVudCgpLmFwcGVuZCgiZyIpLmNsYXNzZWQoaS5USU1FX0FYSVNfVElFUl9DTEFTUywhMCk7dGhpcy5fdGllckxhYmVsQ29udGFpbmVycy5wdXNoKGUuYXBwZW5kKCJnIikuY2xhc3NlZChBbXQuQXhpcy5USUNLX0xBQkVMX0NMQVNTKyItY29udGFpbmVyIiwhMCkpLHRoaXMuX3RpZXJNYXJrQ29udGFpbmVycy5wdXNoKGUuYXBwZW5kKCJnIikuY2xhc3NlZChBbXQuQXhpcy5USUNLX01BUktfQ0xBU1MrIi1jb250YWluZXIiLCEwKSksdGhpcy5fdGllckJhc2VsaW5lcy5wdXNoKGUuYXBwZW5kKCJsaW5lIikuY2xhc3NlZCgiYmFzZWxpbmUiLCEwKSl9dmFyIG49bmV3IGFtdC5TdmdDb250ZXh0KHRoaXMuX3RpZXJMYWJlbENvbnRhaW5lcnNbMF0ubm9kZSgpKTt0aGlzLl9tZWFzdXJlcj1uZXcgYW10LkNhY2hlTWVhc3VyZXIobil9LGkucHJvdG90eXBlLl9nZXRUaWNrSW50ZXJ2YWxWYWx1ZXM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3NjYWxlLnRpY2tJbnRlcnZhbCh0LmludGVydmFsLHQuc3RlcCx0aGlzLl91c2VVVEMpfSxpLnByb3RvdHlwZS5fZ2V0VGlja1ZhbHVlcz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMuX3Bvc3NpYmxlVGltZUF4aXNDb25maWd1cmF0aW9uc1t0aGlzLl9tb3N0UHJlY2lzZUNvbmZpZ0luZGV4XS5yZWR1Y2UoKGZ1bmN0aW9uKGUsbil7cmV0dXJuIGUuY29uY2F0KHQuX2dldFRpY2tJbnRlcnZhbFZhbHVlcyhuKSl9KSxbXSl9LGkucHJvdG90eXBlLl9jbGVhblRpZXJzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDx0aGlzLl90aWVyTGFiZWxDb250YWluZXJzLmxlbmd0aDt0KyspdGhpcy5fdGllckxhYmVsQ29udGFpbmVyc1t0XS5zZWxlY3RBbGwoIi4iK0FtdC5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MpLnJlbW92ZSgpLHRoaXMuX3RpZXJNYXJrQ29udGFpbmVyc1t0XS5zZWxlY3RBbGwoIi4iK0FtdC5BeGlzLlRJQ0tfTUFSS19DTEFTUykucmVtb3ZlKCksdGhpcy5fdGllckJhc2VsaW5lc1t0XS5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpfSxpLnByb3RvdHlwZS5fZ2V0VGlja1ZhbHVlc0ZvckNvbmZpZ3VyYXRpb249ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fc2NhbGUudGlja0ludGVydmFsKHQuaW50ZXJ2YWwsdC5zdGVwLHRoaXMuX3VzZVVUQyksbj10aGlzLl9zY2FsZS5kb21haW4oKSxpPWUubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC52YWx1ZU9mKCl9KSk7cmV0dXJuLTE9PT1pLmluZGV4T2YoblswXS52YWx1ZU9mKCkpJiZlLnVuc2hpZnQoblswXSksLTE9PT1pLmluZGV4T2YoblsxXS52YWx1ZU9mKCkpJiZlLnB1c2goblsxXSksZX0saS5wcm90b3R5cGUuX3JlbmRlclRpZXJMYWJlbHM9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPXRoaXMscj10aGlzLl9nZXRUaWNrVmFsdWVzRm9yQ29uZmlndXJhdGlvbihlKSxvPVtdOyJiZXR3ZWVuIj09PXRoaXMuX3RpZXJMYWJlbFBvc2l0aW9uc1tuXSYmMT09PWUuc3RlcD9yLm1hcCgoZnVuY3Rpb24odCxlKXtlKzE+PXIubGVuZ3RofHxvLnB1c2gobmV3IERhdGUoKHJbZSsxXS52YWx1ZU9mKCktcltlXS52YWx1ZU9mKCkpLzIrcltlXS52YWx1ZU9mKCkpKX0pKTpvPXI7dmFyIGE9dC5zZWxlY3RBbGwoIi4iK0FtdC5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MpLmRhdGEobywoZnVuY3Rpb24odCl7cmV0dXJuIFN0cmluZyh0LnZhbHVlT2YoKSl9KSkscz1hLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChBbXQuQXhpcy5USUNLX0xBQkVMX0NMQVNTLCEwKTtzLmFwcGVuZCgidGV4dCIpO3ZhciBsLGM9ImNlbnRlciI9PT10aGlzLl90aWVyTGFiZWxQb3NpdGlvbnNbbl18fDE9PT1lLnN0ZXA/MDp0aGlzLnRpY2tMYWJlbFBhZGRpbmcoKTtsPSJib3R0b20iPT09dGhpcy5vcmllbnRhdGlvbigpP2lkdC5zdW0odGhpcy5fdGllckhlaWdodHMuc2xpY2UoMCxuKzEpKS10aGlzLnRpY2tMYWJlbFBhZGRpbmcoKToiY2VudGVyIj09PXRoaXMuX3RpZXJMYWJlbFBvc2l0aW9uc1tuXT90aGlzLmhlaWdodCgpLWlkdC5zdW0odGhpcy5fdGllckhlaWdodHMuc2xpY2UoMCxuKSktdGhpcy50aWNrTGFiZWxQYWRkaW5nKCktdGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCk6dGhpcy5oZWlnaHQoKS1pZHQuc3VtKHRoaXMuX3RpZXJIZWlnaHRzLnNsaWNlKDAsbikpLXRoaXMudGlja0xhYmVsUGFkZGluZygpO3ZhciB1PWEubWVyZ2UocyksaD11LnNlbGVjdEFsbCgidGV4dCIpO2guc2l6ZSgpPjAmJmguYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrYysiLCIrbCsiKSIpLGEuZXhpdCgpLnJlbW92ZSgpLHUuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuInRyYW5zbGF0ZSgiK2kuX3NjYWxlLnNjYWxlKHQpKyIsMCkifSkpO3ZhciBkPSJjZW50ZXIiPT09dGhpcy5fdGllckxhYmVsUG9zaXRpb25zW25dfHwxPT09ZS5zdGVwPyJtaWRkbGUiOiJzdGFydCI7dS5zZWxlY3RBbGwoInRleHQiKS50ZXh0KGUuZm9ybWF0dGVyKS5zdHlsZSgidGV4dC1hbmNob3IiLGQpfSxpLnByb3RvdHlwZS5fcmVuZGVyVGlja01hcmtzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fdGllck1hcmtDb250YWluZXJzW2VdLnNlbGVjdEFsbCgiLiIrQW10LkF4aXMuVElDS19NQVJLX0NMQVNTKS5kYXRhKHQpLGk9bi5lbnRlcigpLmFwcGVuZCgibGluZSIpLmNsYXNzZWQoQW10LkF4aXMuVElDS19NQVJLX0NMQVNTLCEwKS5tZXJnZShuKSxyPXRoaXMuX2dlbmVyYXRlVGlja01hcmtBdHRySGFzaCgpLG89dGhpcy5fdGllckhlaWdodHMuc2xpY2UoMCxlKS5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZX0pLDApOyJib3R0b20iPT09dGhpcy5vcmllbnRhdGlvbigpPyhyLnkxPW8sci55Mj1vKygiY2VudGVyIj09PXRoaXMuX3RpZXJMYWJlbFBvc2l0aW9uc1tlXT90aGlzLmlubmVyVGlja0xlbmd0aCgpOnRoaXMuX3RpZXJIZWlnaHRzW2VdKSk6KHIueTE9dGhpcy5oZWlnaHQoKS1vLHIueTI9dGhpcy5oZWlnaHQoKS0obysoImNlbnRlciI9PT10aGlzLl90aWVyTGFiZWxQb3NpdGlvbnNbZV0/dGhpcy5pbm5lclRpY2tMZW5ndGgoKTp0aGlzLl90aWVySGVpZ2h0c1tlXSkpKSxpLmF0dHJzKHIpLCJib3R0b20iPT09dGhpcy5vcmllbnRhdGlvbigpPyhyLnkxPW8sci55Mj1vKygiY2VudGVyIj09PXRoaXMuX3RpZXJMYWJlbFBvc2l0aW9uc1tlXT90aGlzLmVuZFRpY2tMZW5ndGgoKTp0aGlzLl90aWVySGVpZ2h0c1tlXSkpOihyLnkxPXRoaXMuaGVpZ2h0KCktbyxyLnkyPXRoaXMuaGVpZ2h0KCktKG8rKCJjZW50ZXIiPT09dGhpcy5fdGllckxhYmVsUG9zaXRpb25zW2VdP3RoaXMuZW5kVGlja0xlbmd0aCgpOnRoaXMuX3RpZXJIZWlnaHRzW2VdKSkpLGlkdC5zZWxlY3QoaS5ub2RlcygpWzBdKS5hdHRycyhyKSxpZHQuc2VsZWN0KGkubm9kZXMoKVtpLnNpemUoKS0xXSkuYXR0cnMociksaWR0LnNlbGVjdChpLm5vZGVzKClbMF0pLmNsYXNzZWQoQW10LkF4aXMuRU5EX1RJQ0tfTUFSS19DTEFTUywhMCksaWR0LnNlbGVjdChpLm5vZGVzKClbaS5zaXplKCktMV0pLmNsYXNzZWQoQW10LkF4aXMuRU5EX1RJQ0tfTUFSS19DTEFTUywhMCksbi5leGl0KCkucmVtb3ZlKCl9LGkucHJvdG90eXBlLl9yZW5kZXJMYWJlbGxlc3NUaWNrTWFya3M9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdGlja01hcmtDb250YWluZXIuc2VsZWN0QWxsKCIuIitBbXQuQXhpcy5USUNLX01BUktfQ0xBU1MpLmRhdGEodCksbj1lLmVudGVyKCkuYXBwZW5kKCJsaW5lIikuY2xhc3NlZChBbXQuQXhpcy5USUNLX01BUktfQ0xBU1MsITApLm1lcmdlKGUpLGk9dGhpcy5fZ2VuZXJhdGVUaWNrTWFya0F0dHJIYXNoKCk7aS55Mj0iYm90dG9tIj09PXRoaXMub3JpZW50YXRpb24oKT90aGlzLnRpY2tMYWJlbFBhZGRpbmcoKTp0aGlzLmhlaWdodCgpLXRoaXMudGlja0xhYmVsUGFkZGluZygpLG4uYXR0cnMoaSksZS5leGl0KCkucmVtb3ZlKCl9LGkucHJvdG90eXBlLl9nZW5lcmF0ZUxhYmVsbGVzc1RpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vc3RQcmVjaXNlQ29uZmlnSW5kZXg8MT9bXTp0aGlzLl9nZXRUaWNrSW50ZXJ2YWxWYWx1ZXModGhpcy5fcG9zc2libGVUaW1lQXhpc0NvbmZpZ3VyYXRpb25zW3RoaXMuX21vc3RQcmVjaXNlQ29uZmlnSW5kZXgtMV1bMF0pfSxpLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fbW9zdFByZWNpc2VDb25maWdJbmRleD10aGlzLl9nZXRNb3N0UHJlY2lzZUNvbmZpZ3VyYXRpb25JbmRleCgpO3ZhciBlPXRoaXMuX3Bvc3NpYmxlVGltZUF4aXNDb25maWd1cmF0aW9uc1t0aGlzLl9tb3N0UHJlY2lzZUNvbmZpZ0luZGV4XTt0aGlzLl9jbGVhblRpZXJzKCksZS5mb3JFYWNoKChmdW5jdGlvbihlLG4pe3JldHVybiB0Ll9yZW5kZXJUaWVyTGFiZWxzKHQuX3RpZXJMYWJlbENvbnRhaW5lcnNbbl0sZSxuKX0pKTtmb3IodmFyIG49ZS5tYXAoKGZ1bmN0aW9uKGUsbil7cmV0dXJuIHQuX2dldFRpY2tWYWx1ZXNGb3JDb25maWd1cmF0aW9uKGUpfSkpLGk9MCxyPTA7cjxNYXRoLm1heChlLmxlbmd0aCwxKTsrK3Ipe3ZhciBvPXRoaXMuX2dlbmVyYXRlQmFzZWxpbmVBdHRySGFzaCgpO28ueTErPSJib3R0b20iPT09dGhpcy5vcmllbnRhdGlvbigpP2k6LWksby55Mj1vLnkxLHRoaXMuX3RpZXJCYXNlbGluZXNbcl0uYXR0cnMobykuc3R5bGUoInZpc2liaWxpdHkiLCJpbmhlcml0IiksaSs9dGhpcy5fdGllckhlaWdodHNbcl19dmFyIGE9W10scz10aGlzLl9zY2FsZS5kb21haW4oKSxsPXRoaXMuX3NjYWxlLnNjYWxlKHNbMV0pLXRoaXMuX3NjYWxlLnNjYWxlKHNbMF0pO2ZvcigxLjUqdGhpcy5fZ2V0SW50ZXJ2YWxMZW5ndGgoZVswXSk+PWwmJihhPXRoaXMuX2dlbmVyYXRlTGFiZWxsZXNzVGlja3MoKSksdGhpcy5fcmVuZGVyTGFiZWxsZXNzVGlja01hcmtzKGEpLHRoaXMuX2hpZGVPdmVyZmxvd2luZ1RpZXJzKCkscj0wO3I8ZS5sZW5ndGg7KytyKXRoaXMuX3JlbmRlclRpY2tNYXJrcyhuW3JdLHIpLHRoaXMuX2hpZGVPdmVybGFwcGluZ0FuZEN1dE9mZkxhYmVscyhyKTtyZXR1cm4gdGhpcy5hbm5vdGF0aW9uc0VuYWJsZWQoKT90aGlzLl9kcmF3QW5ub3RhdGlvbnMoKTp0aGlzLl9yZW1vdmVBbm5vdGF0aW9ucygpLHRoaXN9LGkucHJvdG90eXBlLl9oaWRlT3ZlcmZsb3dpbmdUaWVycz1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10aGlzLmhlaWdodCgpLG49MDt0aGlzLmNvbnRlbnQoKS5zZWxlY3RBbGwoIi4iK2kuVElNRV9BWElTX1RJRVJfQ0xBU1MpLmF0dHIoInZpc2liaWxpdHkiLChmdW5jdGlvbihpLHIpe3JldHVybihuKz10Ll90aWVySGVpZ2h0c1tyXSk8PWU/ImluaGVyaXQiOiJoaWRkZW4ifSkpfSxpLnByb3RvdHlwZS5faGlkZU92ZXJsYXBwaW5nQW5kQ3V0T2ZmTGFiZWxzPWZ1bmN0aW9uKHQpe3ZhciBlLG49dGhpcyxpPXRoaXMuZWxlbWVudCgpLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxyPXRoaXMuX3RpZXJNYXJrQ29udGFpbmVyc1t0XS5zZWxlY3RBbGwoIi4iK0FtdC5BeGlzLlRJQ0tfTUFSS19DTEFTUykuZmlsdGVyKChmdW5jdGlvbih0LGUpe3ZhciBuPWlkdC5zZWxlY3QodGhpcykuc3R5bGUoInZpc2liaWxpdHkiKTtyZXR1cm4idmlzaWJsZSI9PT1ufHwiaW5oZXJpdCI9PT1ufSkpLm5vZGVzKCkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKX0pKTt0aGlzLl90aWVyTGFiZWxDb250YWluZXJzW3RdLnNlbGVjdEFsbCgiLiIrQW10LkF4aXMuVElDS19MQUJFTF9DTEFTUykuZmlsdGVyKChmdW5jdGlvbih0LGUpe3ZhciBuPWlkdC5zZWxlY3QodGhpcykuc3R5bGUoInZpc2liaWxpdHkiKTtyZXR1cm4idmlzaWJsZSI9PT1ufHwiaW5oZXJpdCI9PT1ufSkpLmVhY2goKGZ1bmN0aW9uKHQsbyl7dmFyIGEscz10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGw9aWR0LnNlbGVjdCh0aGlzKSxjPXJbb10sdT1yW28rMV0saD1udWxsIT1lJiZTbXQuRE9NLmNsaWVudFJlY3RzT3ZlcmxhcChzLGUpLGQ9bnVsbCE9YyYmU210LkRPTS5jbGllbnRSZWN0c092ZXJsYXAocyxjKSxwPW51bGwhPXUmJlNtdC5ET00uY2xpZW50UmVjdHNPdmVybGFwKHMsdSk7YT1zLCEoTWF0aC5mbG9vcihpLmxlZnQpPD1NYXRoLmNlaWwoYS5sZWZ0KSYmTWF0aC5mbG9vcihpLnRvcCk8PU1hdGguY2VpbChhLnRvcCkmJk1hdGguZmxvb3IoYS5yaWdodCk8PU1hdGguY2VpbChpLmxlZnQrbi53aWR0aCgpKSYmTWF0aC5mbG9vcihhLmJvdHRvbSk8PU1hdGguY2VpbChpLnRvcCtuLmhlaWdodCgpKSl8fGh8fGR8fHA/bC5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpOihlPXMsbC5zdHlsZSgidmlzaWJpbGl0eSIsImluaGVyaXQiKSl9KSl9LGkucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZT1mdW5jdGlvbigpe3QucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZS5jYWxsKHRoaXMpLHRoaXMuX21lYXN1cmVyLnJlc2V0KCl9LGkuVElNRV9BWElTX1RJRVJfQ0xBU1M9InRpbWUtYXhpcy10aWVyIixpLl9TT1JURURfVElNRV9JTlRFUlZBTF9JTkRFWD0oKG49e30pW2UuVGltZUludGVydmFsLnNlY29uZF09MCxuW2UuVGltZUludGVydmFsLm1pbnV0ZV09MSxuW2UuVGltZUludGVydmFsLmhvdXJdPTIsbltlLlRpbWVJbnRlcnZhbC5kYXldPTMsbltlLlRpbWVJbnRlcnZhbC53ZWVrXT00LG5bZS5UaW1lSW50ZXJ2YWwubW9udGhdPTUsbltlLlRpbWVJbnRlcnZhbC55ZWFyXT02LG4pLGkuX0RFRkFVTFRfVElNRV9BWElTX0NPTkZJR1VSQVRJT05TPWZ1bmN0aW9uKHQpe3ZhciBuPWZ1bmN0aW9uKGUpe3JldHVybiBDbXQudGltZShlLHQpfTtyZXR1cm5bW3tpbnRlcnZhbDplLlRpbWVJbnRlcnZhbC5zZWNvbmQsc3RlcDoxLGZvcm1hdHRlcjpuKCIlSTolTTolUyAlcCIpfSx7aW50ZXJ2YWw6ZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOmUuVGltZUludGVydmFsLnNlY29uZCxzdGVwOjUsZm9ybWF0dGVyOm4oIiVJOiVNOiVTICVwIil9LHtpbnRlcnZhbDplLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6ZS5UaW1lSW50ZXJ2YWwuc2Vjb25kLHN0ZXA6MTAsZm9ybWF0dGVyOm4oIiVJOiVNOiVTICVwIil9LHtpbnRlcnZhbDplLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6ZS5UaW1lSW50ZXJ2YWwuc2Vjb25kLHN0ZXA6MTUsZm9ybWF0dGVyOm4oIiVJOiVNOiVTICVwIil9LHtpbnRlcnZhbDplLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6ZS5UaW1lSW50ZXJ2YWwuc2Vjb25kLHN0ZXA6MzAsZm9ybWF0dGVyOm4oIiVJOiVNOiVTICVwIil9LHtpbnRlcnZhbDplLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6ZS5UaW1lSW50ZXJ2YWwubWludXRlLHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUk6JU0gJXAiKX0se2ludGVydmFsOmUuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCICVlLCAlWSIpfV0sW3tpbnRlcnZhbDplLlRpbWVJbnRlcnZhbC5taW51dGUsc3RlcDo1LGZvcm1hdHRlcjpuKCIlSTolTSAlcCIpfSx7aW50ZXJ2YWw6ZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOmUuVGltZUludGVydmFsLm1pbnV0ZSxzdGVwOjEwLGZvcm1hdHRlcjpuKCIlSTolTSAlcCIpfSx7aW50ZXJ2YWw6ZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOmUuVGltZUludGVydmFsLm1pbnV0ZSxzdGVwOjE1LGZvcm1hdHRlcjpuKCIlSTolTSAlcCIpfSx7aW50ZXJ2YWw6ZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOmUuVGltZUludGVydmFsLm1pbnV0ZSxzdGVwOjMwLGZvcm1hdHRlcjpuKCIlSTolTSAlcCIpfSx7aW50ZXJ2YWw6ZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOmUuVGltZUludGVydmFsLmhvdXIsc3RlcDoxLGZvcm1hdHRlcjpuKCIlSSAlcCIpfSx7aW50ZXJ2YWw6ZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOmUuVGltZUludGVydmFsLmhvdXIsc3RlcDozLGZvcm1hdHRlcjpuKCIlSSAlcCIpfSx7aW50ZXJ2YWw6ZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOmUuVGltZUludGVydmFsLmhvdXIsc3RlcDo2LGZvcm1hdHRlcjpuKCIlSSAlcCIpfSx7aW50ZXJ2YWw6ZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOmUuVGltZUludGVydmFsLmhvdXIsc3RlcDoxMixmb3JtYXR0ZXI6bigiJUkgJXAiKX0se2ludGVydmFsOmUuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCICVlLCAlWSIpfV0sW3tpbnRlcnZhbDplLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlYSAlZSIpfSx7aW50ZXJ2YWw6ZS5UaW1lSW50ZXJ2YWwubW9udGgsc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlWSIpfV0sW3tpbnRlcnZhbDplLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlZSIpfSx7aW50ZXJ2YWw6ZS5UaW1lSW50ZXJ2YWwubW9udGgsc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlWSIpfV0sW3tpbnRlcnZhbDplLlRpbWVJbnRlcnZhbC5tb250aCxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCIil9LHtpbnRlcnZhbDplLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6MSxmb3JtYXR0ZXI6bigiJVkiKX1dLFt7aW50ZXJ2YWw6ZS5UaW1lSW50ZXJ2YWwubW9udGgsc3RlcDoxLGZvcm1hdHRlcjpuKCIlYiIpfSx7aW50ZXJ2YWw6ZS5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjEsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOmUuVGltZUludGVydmFsLm1vbnRoLHN0ZXA6Myxmb3JtYXR0ZXI6bigiJWIiKX0se2ludGVydmFsOmUuVGltZUludGVydmFsLnllYXIsc3RlcDoxLGZvcm1hdHRlcjpuKCIlWSIpfV0sW3tpbnRlcnZhbDplLlRpbWVJbnRlcnZhbC5tb250aCxzdGVwOjYsZm9ybWF0dGVyOm4oIiViIil9LHtpbnRlcnZhbDplLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6MSxmb3JtYXR0ZXI6bigiJVkiKX1dLFt7aW50ZXJ2YWw6ZS5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjEsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOmUuVGltZUludGVydmFsLnllYXIsc3RlcDoxLGZvcm1hdHRlcjpuKCIleSIpfV0sW3tpbnRlcnZhbDplLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6NSxmb3JtYXR0ZXI6bigiJVkiKX1dLFt7aW50ZXJ2YWw6ZS5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjI1LGZvcm1hdHRlcjpuKCIlWSIpfV0sW3tpbnRlcnZhbDplLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6NTAsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOmUuVGltZUludGVydmFsLnllYXIsc3RlcDoxMDAsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOmUuVGltZUludGVydmFsLnllYXIsc3RlcDoyMDAsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOmUuVGltZUludGVydmFsLnllYXIsc3RlcDo1MDAsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOmUuVGltZUludGVydmFsLnllYXIsc3RlcDoxZTMsZm9ybWF0dGVyOm4oIiVZIil9XV19LGkuX0xPTkdfREFURT1uZXcgRGF0ZSg5OTk5LDgsMjksMTIsNTksOTk5OSksaX0pKEFtdC5BeGlzKTtlLlRpbWU9aX0pKSxHbXQ9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxEZnQuX19leHBvcnRTdGFyKGttdCxlKSxEZnQuX19leHBvcnRTdGFyKExtdCxlKSxEZnQuX19leHBvcnRTdGFyKGptdCxlKX0pKSxXbXQ9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvbj17fSx0aGlzLl9ldmVudFRhcmdldD1kb2N1bWVudCx0aGlzLl9ldmVudE5hbWVUb0NhbGxiYWNrU2V0PXt9LHRoaXMuX2Nvbm5lY3RlZD0hMX1yZXR1cm4gdC5wcm90b3R5cGUuX2hhc05vQ2FsbGJhY2tzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PU9iamVjdC5rZXlzKHRoaXMuX2V2ZW50TmFtZVRvQ2FsbGJhY2tTZXQpLGU9MDtlPHQubGVuZ3RoO2UrKylpZigwIT09dGhpcy5fZXZlbnROYW1lVG9DYWxsYmFja1NldFt0W2VdXS5zaXplKXJldHVybiExO3JldHVybiEwfSx0LnByb3RvdHlwZS5fY29ubmVjdD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fY29ubmVjdGVkfHwoT2JqZWN0LmtleXModGhpcy5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvbikuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dC5fZXZlbnRUYXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihlLHQuX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bZV0sIndoZWVsIj09PWU/e3Bhc3NpdmU6ITF9OnZvaWQgMCl9KSksdGhpcy5fY29ubmVjdGVkPSEwKX0sdC5wcm90b3R5cGUuX2Rpc2Nvbm5lY3Q9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX2Nvbm5lY3RlZCYmdGhpcy5faGFzTm9DYWxsYmFja3MoKSYmKE9iamVjdC5rZXlzKHRoaXMuX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb24pLmZvckVhY2goKGZ1bmN0aW9uKGUpe3QuX2V2ZW50VGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZSx0Ll9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW2VdKX0pKSx0aGlzLl9jb25uZWN0ZWQ9ITEpfSx0LnByb3RvdHlwZS5fYWRkQ2FsbGJhY2tGb3JFdmVudD1mdW5jdGlvbih0LGUpe251bGw9PXRoaXMuX2V2ZW50TmFtZVRvQ2FsbGJhY2tTZXRbdF0mJih0aGlzLl9ldmVudE5hbWVUb0NhbGxiYWNrU2V0W3RdPW5ldyBTbXQuQ2FsbGJhY2tTZXQpLHRoaXMuX2V2ZW50TmFtZVRvQ2FsbGJhY2tTZXRbdF0uYWRkKGUpLHRoaXMuX2Nvbm5lY3QoKX0sdC5wcm90b3R5cGUuX3JlbW92ZUNhbGxiYWNrRm9yRXZlbnQ9ZnVuY3Rpb24odCxlKXtudWxsIT10aGlzLl9ldmVudE5hbWVUb0NhbGxiYWNrU2V0W3RdJiZ0aGlzLl9ldmVudE5hbWVUb0NhbGxiYWNrU2V0W3RdLmRlbGV0ZShlKSx0aGlzLl9kaXNjb25uZWN0KCl9LHQucHJvdG90eXBlLl9jYWxsQ2FsbGJhY2tzRm9yRXZlbnQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbi0xXT1hcmd1bWVudHNbbl07dmFyIGk9dGhpcy5fZXZlbnROYW1lVG9DYWxsYmFja1NldFt0XTtudWxsIT1pJiZpLmNhbGxDYWxsYmFja3MuYXBwbHkoaSxlKX0sdH0pKCk7ZS5EaXNwYXRjaGVyPW59KSkscW10PWJlKChmdW5jdGlvbih0LGUpewovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt2YXIgbj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIG4uX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bZS5fS0VZRE9XTl9FVkVOVF9OQU1FXT1mdW5jdGlvbih0KXtyZXR1cm4gbi5fcHJvY2Vzc0tleWRvd24odCl9LG4uX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bZS5fS0VZVVBfRVZFTlRfTkFNRV09ZnVuY3Rpb24odCl7cmV0dXJuIG4uX3Byb2Nlc3NLZXl1cCh0KX0sbn1yZXR1cm4gRGZ0Ll9fZXh0ZW5kcyhlLHQpLGUuZ2V0RGlzcGF0Y2hlcj1mdW5jdGlvbigpe3ZhciB0PWRvY3VtZW50W2UuX0RJU1BBVENIRVJfS0VZXTtyZXR1cm4gbnVsbD09dCYmKHQ9bmV3IGUsZG9jdW1lbnRbZS5fRElTUEFUQ0hFUl9LRVldPXQpLHR9LGUucHJvdG90eXBlLl9wcm9jZXNzS2V5ZG93bj1mdW5jdGlvbih0KXt0aGlzLl9jYWxsQ2FsbGJhY2tzRm9yRXZlbnQoZS5fS0VZRE9XTl9FVkVOVF9OQU1FLHQua2V5Q29kZSx0KX0sZS5wcm90b3R5cGUuX3Byb2Nlc3NLZXl1cD1mdW5jdGlvbih0KXt0aGlzLl9jYWxsQ2FsbGJhY2tzRm9yRXZlbnQoZS5fS0VZVVBfRVZFTlRfTkFNRSx0LmtleUNvZGUsdCl9LGUucHJvdG90eXBlLm9uS2V5RG93bj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudChlLl9LRVlET1dOX0VWRU5UX05BTUUsdCksdGhpc30sZS5wcm90b3R5cGUub2ZmS2V5RG93bj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmVtb3ZlQ2FsbGJhY2tGb3JFdmVudChlLl9LRVlET1dOX0VWRU5UX05BTUUsdCksdGhpc30sZS5wcm90b3R5cGUub25LZXlVcD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudChlLl9LRVlVUF9FVkVOVF9OQU1FLHQpLHRoaXN9LGUucHJvdG90eXBlLm9mZktleVVwPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KGUuX0tFWVVQX0VWRU5UX05BTUUsdCksdGhpc30sZS5fRElTUEFUQ0hFUl9LRVk9Il9fUGxvdHRhYmxlX0Rpc3BhdGNoZXJfS2V5IixlLl9LRVlET1dOX0VWRU5UX05BTUU9ImtleWRvd24iLGUuX0tFWVVQX0VWRU5UX05BTUU9ImtleXVwIixlfSkoV210LkRpc3BhdGNoZXIpO2UuS2V5PW59KSksWW10PWJlKChmdW5jdGlvbih0LGUpewovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobil7dmFyIGk9dC5jYWxsKHRoaXMpfHx0aGlzO2kuX2xhc3RNb3VzZVBvc2l0aW9uPXt4Oi0xLHk6LTF9LGkuX3RyYW5zbGF0b3I9U210LmdldFRyYW5zbGF0b3Iobik7dmFyIHI9ZnVuY3Rpb24odCl7cmV0dXJuIGkuX21lYXN1cmVBbmREaXNwYXRjaChuLHQsZS5fTU9VU0VNT1ZFX0VWRU5UX05BTUUsInBhZ2UiKX07cmV0dXJuIGkuX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bZS5fTU9VU0VPVkVSX0VWRU5UX05BTUVdPXIsaS5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvbltlLl9NT1VTRU1PVkVfRVZFTlRfTkFNRV09cixpLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW2UuX01PVVNFT1VUX0VWRU5UX05BTUVdPXIsaS5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvbltlLl9NT1VTRURPV05fRVZFTlRfTkFNRV09ZnVuY3Rpb24odCl7cmV0dXJuIGkuX21lYXN1cmVBbmREaXNwYXRjaChuLHQsZS5fTU9VU0VET1dOX0VWRU5UX05BTUUpfSxpLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW2UuX01PVVNFVVBfRVZFTlRfTkFNRV09ZnVuY3Rpb24odCl7cmV0dXJuIGkuX21lYXN1cmVBbmREaXNwYXRjaChuLHQsZS5fTU9VU0VVUF9FVkVOVF9OQU1FLCJwYWdlIil9LGkuX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bZS5fV0hFRUxfRVZFTlRfTkFNRV09ZnVuY3Rpb24odCl7cmV0dXJuIGkuX21lYXN1cmVBbmREaXNwYXRjaChuLHQsZS5fV0hFRUxfRVZFTlRfTkFNRSl9LGkuX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bZS5fREJMQ0xJQ0tfRVZFTlRfTkFNRV09ZnVuY3Rpb24odCl7cmV0dXJuIGkuX21lYXN1cmVBbmREaXNwYXRjaChuLHQsZS5fREJMQ0xJQ0tfRVZFTlRfTkFNRSl9LGl9cmV0dXJuIERmdC5fX2V4dGVuZHMoZSx0KSxlLmdldERpc3BhdGNoZXI9ZnVuY3Rpb24odCl7dmFyIG49dC5yb290KCkucm9vdEVsZW1lbnQoKSxpPW5bZS5fRElTUEFUQ0hFUl9LRVldO3JldHVybiBudWxsPT1pJiYoaT1uZXcgZSh0KSxuW2UuX0RJU1BBVENIRVJfS0VZXT1pKSxpfSxlLnByb3RvdHlwZS5vbk1vdXNlTW92ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudChlLl9NT1VTRU1PVkVfRVZFTlRfTkFNRSx0KSx0aGlzfSxlLnByb3RvdHlwZS5vZmZNb3VzZU1vdmU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3JlbW92ZUNhbGxiYWNrRm9yRXZlbnQoZS5fTU9VU0VNT1ZFX0VWRU5UX05BTUUsdCksdGhpc30sZS5wcm90b3R5cGUub25Nb3VzZURvd249ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2FkZENhbGxiYWNrRm9yRXZlbnQoZS5fTU9VU0VET1dOX0VWRU5UX05BTUUsdCksdGhpc30sZS5wcm90b3R5cGUub2ZmTW91c2VEb3duPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KGUuX01PVVNFRE9XTl9FVkVOVF9OQU1FLHQpLHRoaXN9LGUucHJvdG90eXBlLm9uTW91c2VVcD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudChlLl9NT1VTRVVQX0VWRU5UX05BTUUsdCksdGhpc30sZS5wcm90b3R5cGUub2ZmTW91c2VVcD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmVtb3ZlQ2FsbGJhY2tGb3JFdmVudChlLl9NT1VTRVVQX0VWRU5UX05BTUUsdCksdGhpc30sZS5wcm90b3R5cGUub25XaGVlbD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudChlLl9XSEVFTF9FVkVOVF9OQU1FLHQpLHRoaXN9LGUucHJvdG90eXBlLm9mZldoZWVsPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KGUuX1dIRUVMX0VWRU5UX05BTUUsdCksdGhpc30sZS5wcm90b3R5cGUub25EYmxDbGljaz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudChlLl9EQkxDTElDS19FVkVOVF9OQU1FLHQpLHRoaXN9LGUucHJvdG90eXBlLm9mZkRibENsaWNrPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KGUuX0RCTENMSUNLX0VWRU5UX05BTUUsdCksdGhpc30sZS5wcm90b3R5cGUuX21lYXN1cmVBbmREaXNwYXRjaD1mdW5jdGlvbih0LGUsbixpKXtpZih2b2lkIDA9PT1pJiYoaT0iZWxlbWVudCIpLCJwYWdlIiE9PWkmJiJlbGVtZW50IiE9PWkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHNjb3BlICciK2krIicsIG11c3QgYmUgJ2VsZW1lbnQnIG9yICdwYWdlJyIpO2lmKCJwYWdlIj09PWl8fHRoaXMuZXZlbnRJbnNpZGUodCxlKSl7dmFyIHI9dGhpcy5fdHJhbnNsYXRvci5jb21wdXRlUG9zaXRpb24oZS5jbGllbnRYLGUuY2xpZW50WSk7dGhpcy5fbGFzdE1vdXNlUG9zaXRpb249cix0aGlzLl9jYWxsQ2FsbGJhY2tzRm9yRXZlbnQobix0aGlzLmxhc3RNb3VzZVBvc2l0aW9uKCksZSl9fSxlLnByb3RvdHlwZS5ldmVudEluc2lkZT1mdW5jdGlvbih0LGUpe3JldHVybiBTbXQuVHJhbnNsYXRvci5pc0V2ZW50SW5zaWRlKHQsZSl9LGUucHJvdG90eXBlLmxhc3RNb3VzZVBvc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xhc3RNb3VzZVBvc2l0aW9ufSxlLl9ESVNQQVRDSEVSX0tFWT0iX19QbG90dGFibGVfRGlzcGF0Y2hlcl9Nb3VzZSIsZS5fTU9VU0VPVkVSX0VWRU5UX05BTUU9Im1vdXNlb3ZlciIsZS5fTU9VU0VNT1ZFX0VWRU5UX05BTUU9Im1vdXNlbW92ZSIsZS5fTU9VU0VPVVRfRVZFTlRfTkFNRT0ibW91c2VvdXQiLGUuX01PVVNFRE9XTl9FVkVOVF9OQU1FPSJtb3VzZWRvd24iLGUuX01PVVNFVVBfRVZFTlRfTkFNRT0ibW91c2V1cCIsZS5fV0hFRUxfRVZFTlRfTkFNRT0id2hlZWwiLGUuX0RCTENMSUNLX0VWRU5UX05BTUU9ImRibGNsaWNrIixlfSkoV210LkRpc3BhdGNoZXIpO2UuTW91c2U9bn0pKSxYbXQ9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuKXt2YXIgaT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkuX3RyYW5zbGF0b3I9U210LmdldFRyYW5zbGF0b3IobiksaS5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvbltlLl9UT1VDSFNUQVJUX0VWRU5UX05BTUVdPWZ1bmN0aW9uKHQpe3JldHVybiBpLl9tZWFzdXJlQW5kRGlzcGF0Y2gobix0LGUuX1RPVUNIU1RBUlRfRVZFTlRfTkFNRSwicGFnZSIpfSxpLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW2UuX1RPVUNITU9WRV9FVkVOVF9OQU1FXT1mdW5jdGlvbih0KXtyZXR1cm4gaS5fbWVhc3VyZUFuZERpc3BhdGNoKG4sdCxlLl9UT1VDSE1PVkVfRVZFTlRfTkFNRSwicGFnZSIpfSxpLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW2UuX1RPVUNIRU5EX0VWRU5UX05BTUVdPWZ1bmN0aW9uKHQpe3JldHVybiBpLl9tZWFzdXJlQW5kRGlzcGF0Y2gobix0LGUuX1RPVUNIRU5EX0VWRU5UX05BTUUsInBhZ2UiKX0saS5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvbltlLl9UT1VDSENBTkNFTF9FVkVOVF9OQU1FXT1mdW5jdGlvbih0KXtyZXR1cm4gaS5fbWVhc3VyZUFuZERpc3BhdGNoKG4sdCxlLl9UT1VDSENBTkNFTF9FVkVOVF9OQU1FLCJwYWdlIil9LGl9cmV0dXJuIERmdC5fX2V4dGVuZHMoZSx0KSxlLmdldERpc3BhdGNoZXI9ZnVuY3Rpb24odCl7dmFyIG49dC5yb290KCkucm9vdEVsZW1lbnQoKSxpPW5bZS5fRElTUEFUQ0hFUl9LRVldO3JldHVybiBudWxsPT1pJiYoaT1uZXcgZSh0KSxuW2UuX0RJU1BBVENIRVJfS0VZXT1pKSxpfSxlLnByb3RvdHlwZS5vblRvdWNoU3RhcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2FkZENhbGxiYWNrRm9yRXZlbnQoZS5fVE9VQ0hTVEFSVF9FVkVOVF9OQU1FLHQpLHRoaXN9LGUucHJvdG90eXBlLm9mZlRvdWNoU3RhcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3JlbW92ZUNhbGxiYWNrRm9yRXZlbnQoZS5fVE9VQ0hTVEFSVF9FVkVOVF9OQU1FLHQpLHRoaXN9LGUucHJvdG90eXBlLm9uVG91Y2hNb3ZlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9hZGRDYWxsYmFja0ZvckV2ZW50KGUuX1RPVUNITU9WRV9FVkVOVF9OQU1FLHQpLHRoaXN9LGUucHJvdG90eXBlLm9mZlRvdWNoTW92ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmVtb3ZlQ2FsbGJhY2tGb3JFdmVudChlLl9UT1VDSE1PVkVfRVZFTlRfTkFNRSx0KSx0aGlzfSxlLnByb3RvdHlwZS5vblRvdWNoRW5kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9hZGRDYWxsYmFja0ZvckV2ZW50KGUuX1RPVUNIRU5EX0VWRU5UX05BTUUsdCksdGhpc30sZS5wcm90b3R5cGUub2ZmVG91Y2hFbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3JlbW92ZUNhbGxiYWNrRm9yRXZlbnQoZS5fVE9VQ0hFTkRfRVZFTlRfTkFNRSx0KSx0aGlzfSxlLnByb3RvdHlwZS5vblRvdWNoQ2FuY2VsPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9hZGRDYWxsYmFja0ZvckV2ZW50KGUuX1RPVUNIQ0FOQ0VMX0VWRU5UX05BTUUsdCksdGhpc30sZS5wcm90b3R5cGUub2ZmVG91Y2hDYW5jZWw9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3JlbW92ZUNhbGxiYWNrRm9yRXZlbnQoZS5fVE9VQ0hDQU5DRUxfRVZFTlRfTkFNRSx0KSx0aGlzfSxlLnByb3RvdHlwZS5fbWVhc3VyZUFuZERpc3BhdGNoPWZ1bmN0aW9uKHQsZSxuLGkpe2lmKHZvaWQgMD09PWkmJihpPSJlbGVtZW50IiksInBhZ2UiIT09aSYmImVsZW1lbnQiIT09aSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc2NvcGUgJyIraSsiJywgbXVzdCBiZSAnZWxlbWVudCcgb3IgJ3BhZ2UnIik7aWYoImVsZW1lbnQiIT09aXx8dGhpcy5ldmVudEluc2lkZSh0LGUpKXtmb3IodmFyIHI9ZS5jaGFuZ2VkVG91Y2hlcyxvPXt9LGE9W10scz0wO3M8ci5sZW5ndGg7cysrKXt2YXIgbD1yW3NdLGM9bC5pZGVudGlmaWVyLHU9dGhpcy5fdHJhbnNsYXRvci5jb21wdXRlUG9zaXRpb24obC5jbGllbnRYLGwuY2xpZW50WSk7bnVsbCE9dSYmKG9bY109dSxhLnB1c2goYykpfWEubGVuZ3RoPjAmJnRoaXMuX2NhbGxDYWxsYmFja3NGb3JFdmVudChuLGEsbyxlKX19LGUucHJvdG90eXBlLmV2ZW50SW5zaWRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIFNtdC5UcmFuc2xhdG9yLmlzRXZlbnRJbnNpZGUodCxlKX0sZS5fRElTUEFUQ0hFUl9LRVk9Il9fUGxvdHRhYmxlX0Rpc3BhdGNoZXJfVG91Y2giLGUuX1RPVUNIU1RBUlRfRVZFTlRfTkFNRT0idG91Y2hzdGFydCIsZS5fVE9VQ0hNT1ZFX0VWRU5UX05BTUU9InRvdWNobW92ZSIsZS5fVE9VQ0hFTkRfRVZFTlRfTkFNRT0idG91Y2hlbmQiLGUuX1RPVUNIQ0FOQ0VMX0VWRU5UX05BTUU9InRvdWNoY2FuY2VsIixlfSkoV210LkRpc3BhdGNoZXIpO2UuVG91Y2g9bn0pKSwkbXQ9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxEZnQuX19leHBvcnRTdGFyKHFtdCxlKSxEZnQuX19leHBvcnRTdGFyKFltdCxlKSxEZnQuX19leHBvcnRTdGFyKFhtdCxlKX0pKSxLbXQ9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dmFyIHQ9dGhpczt0aGlzLl9hbmNob3JDYWxsYmFjaz1mdW5jdGlvbihlKXtyZXR1cm4gdC5fYW5jaG9yKGUpfSx0aGlzLl9lbmFibGVkPSEwfXJldHVybiB0LnByb3RvdHlwZS5hdHRhY2hUbz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZGlzY29ubmVjdCgpLHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG89dCx0aGlzLl9jb25uZWN0KCksdGhpc30sdC5wcm90b3R5cGUuZGV0YWNoRnJvbT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kZXRhY2goKX0sdC5wcm90b3R5cGUuZGV0YWNoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Rpc2Nvbm5lY3QoKSx0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvPW51bGwsdGhpc30sdC5wcm90b3R5cGUuZW5hYmxlZD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9lbmFibGVkOih0aGlzLl9lbmFibGVkPXQsdGhpcy5fZW5hYmxlZD90aGlzLl9jb25uZWN0KCk6dGhpcy5fZGlzY29ubmVjdCgpLHRoaXMpfSx0LnByb3RvdHlwZS5fYW5jaG9yPWZ1bmN0aW9uKHQpe3RoaXMuX2lzQW5jaG9yZWQ9ITB9LHQucHJvdG90eXBlLl91bmFuY2hvcj1mdW5jdGlvbigpe3RoaXMuX2lzQW5jaG9yZWQ9ITF9LHQucHJvdG90eXBlLl90cmFuc2xhdGVUb0NvbXBvbmVudFNwYWNlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8ub3JpZ2luVG9Sb290KCk7cmV0dXJue3g6dC54LWUueCx5OnQueS1lLnl9fSx0LnByb3RvdHlwZS5faXNJbnNpZGVDb21wb25lbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIDA8PXQueCYmMDw9dC55JiZ0Lng8PXRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8ud2lkdGgoKSYmdC55PD10aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvLmhlaWdodCgpfSx0LnByb3RvdHlwZS5fY29ubmVjdD1mdW5jdGlvbigpe3RoaXMuZW5hYmxlZCgpJiZudWxsIT10aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvJiYhdGhpcy5faXNBbmNob3JlZCYmdGhpcy5fY29tcG9uZW50QXR0YWNoZWRUby5vbkFuY2hvcih0aGlzLl9hbmNob3JDYWxsYmFjayl9LHQucHJvdG90eXBlLl9kaXNjb25uZWN0PWZ1bmN0aW9uKCl7dGhpcy5faXNBbmNob3JlZCYmdGhpcy5fdW5hbmNob3IoKSxudWxsIT10aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvJiZ0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvLm9mZkFuY2hvcih0aGlzLl9hbmNob3JDYWxsYmFjayl9LHR9KSgpO2UuSW50ZXJhY3Rpb249bn0pKSxabXQ9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBlPW51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztyZXR1cm4gZS5fY2xpY2tlZERvd249ITEsZS5fZG91YmxlQ2xpY2tpbmc9ITEsZS5fb25DbGlja0NhbGxiYWNrcz1uZXcgU210LkNhbGxiYWNrU2V0LGUuX29uRG91YmxlQ2xpY2tDYWxsYmFja3M9bmV3IFNtdC5DYWxsYmFja1NldCxlLl9tb3VzZURvd25DYWxsYmFjaz1mdW5jdGlvbih0LG4pe3JldHVybiBlLl9oYW5kbGVDbGlja0Rvd24odCxuKX0sZS5fbW91c2VVcENhbGxiYWNrPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGUuX2hhbmRsZUNsaWNrVXAodCxuKX0sZS5fZGJsQ2xpY2tDYWxsYmFjaz1mdW5jdGlvbih0LG4pe3JldHVybiBlLl9oYW5kbGVEYmxDbGljayh0LG4pfSxlLl90b3VjaFN0YXJ0Q2FsbGJhY2s9ZnVuY3Rpb24odCxuLGkpe3JldHVybiBlLl9oYW5kbGVDbGlja0Rvd24oblt0WzBdXSxpKX0sZS5fdG91Y2hFbmRDYWxsYmFjaz1mdW5jdGlvbih0LG4saSl7cmV0dXJuIGUuX2hhbmRsZUNsaWNrVXAoblt0WzBdXSxpKX0sZS5fdG91Y2hDYW5jZWxDYWxsYmFjaz1mdW5jdGlvbih0LG4pe3JldHVybiBlLl9jbGlja2VkRG93bj0hMX0sZX1yZXR1cm4gRGZ0Ll9fZXh0ZW5kcyhlLHQpLGUucHJvdG90eXBlLl9hbmNob3I9ZnVuY3Rpb24oZSl7dC5wcm90b3R5cGUuX2FuY2hvci5jYWxsKHRoaXMsZSksdGhpcy5fbW91c2VEaXNwYXRjaGVyPSRtdC5Nb3VzZS5nZXREaXNwYXRjaGVyKGUpLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vbk1vdXNlRG93bih0aGlzLl9tb3VzZURvd25DYWxsYmFjayksdGhpcy5fbW91c2VEaXNwYXRjaGVyLm9uTW91c2VVcCh0aGlzLl9tb3VzZVVwQ2FsbGJhY2spLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vbkRibENsaWNrKHRoaXMuX2RibENsaWNrQ2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlcj0kbXQuVG91Y2guZ2V0RGlzcGF0Y2hlcihlKSx0aGlzLl90b3VjaERpc3BhdGNoZXIub25Ub3VjaFN0YXJ0KHRoaXMuX3RvdWNoU3RhcnRDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hFbmQodGhpcy5fdG91Y2hFbmRDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hDYW5jZWwodGhpcy5fdG91Y2hDYW5jZWxDYWxsYmFjayl9LGUucHJvdG90eXBlLl91bmFuY2hvcj1mdW5jdGlvbigpe3QucHJvdG90eXBlLl91bmFuY2hvci5jYWxsKHRoaXMpLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZNb3VzZURvd24odGhpcy5fbW91c2VEb3duQ2FsbGJhY2spLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZNb3VzZVVwKHRoaXMuX21vdXNlVXBDYWxsYmFjayksdGhpcy5fbW91c2VEaXNwYXRjaGVyLm9mZkRibENsaWNrKHRoaXMuX2RibENsaWNrQ2FsbGJhY2spLHRoaXMuX21vdXNlRGlzcGF0Y2hlcj1udWxsLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vZmZUb3VjaFN0YXJ0KHRoaXMuX3RvdWNoU3RhcnRDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9mZlRvdWNoRW5kKHRoaXMuX3RvdWNoRW5kQ2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vZmZUb3VjaENhbmNlbCh0aGlzLl90b3VjaENhbmNlbENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXI9bnVsbH0sZS5wcm90b3R5cGUuX2hhbmRsZUNsaWNrRG93bj1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2UodCk7dGhpcy5faXNJbnNpZGVDb21wb25lbnQobikmJih0aGlzLl9jbGlja2VkRG93bj0hMCx0aGlzLl9jbGlja2VkUG9pbnQ9bil9LGUucHJvdG90eXBlLl9oYW5kbGVDbGlja1VwPWZ1bmN0aW9uKHQsbil7dmFyIGk9dGhpcyxyPXRoaXMuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2UodCk7dGhpcy5fY2xpY2tlZERvd24mJmUuX3BvaW50c0VxdWFsKHIsdGhpcy5fY2xpY2tlZFBvaW50KSYmc2V0VGltZW91dCgoZnVuY3Rpb24oKXtpLl9kb3VibGVDbGlja2luZ3x8aS5fb25DbGlja0NhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKHIsbil9KSwwKSx0aGlzLl9jbGlja2VkRG93bj0hMX0sZS5wcm90b3R5cGUuX2hhbmRsZURibENsaWNrPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxpPXRoaXMuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2UodCk7dGhpcy5fZG91YmxlQ2xpY2tpbmc9ITAsdGhpcy5fb25Eb3VibGVDbGlja0NhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKGksZSksc2V0VGltZW91dCgoZnVuY3Rpb24oKXtyZXR1cm4gbi5fZG91YmxlQ2xpY2tpbmc9ITF9KSwwKX0sZS5fcG9pbnRzRXF1YWw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC54PT09ZS54JiZ0Lnk9PT1lLnl9LGUucHJvdG90eXBlLm9uQ2xpY2s9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX29uQ2xpY2tDYWxsYmFja3MuYWRkKHQpLHRoaXN9LGUucHJvdG90eXBlLm9mZkNsaWNrPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9vbkNsaWNrQ2FsbGJhY2tzLmRlbGV0ZSh0KSx0aGlzfSxlLnByb3RvdHlwZS5vbkRvdWJsZUNsaWNrPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9vbkRvdWJsZUNsaWNrQ2FsbGJhY2tzLmFkZCh0KSx0aGlzfSxlLnByb3RvdHlwZS5vZmZEb3VibGVDbGljaz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fb25Eb3VibGVDbGlja0NhbGxiYWNrcy5kZWxldGUodCksdGhpc30sZX0pKEttdC5JbnRlcmFjdGlvbik7ZS5DbGljaz1ufSkpLEptdD1iZSgoZnVuY3Rpb24odCxlKXsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4pe3ZhciBpPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gaS5fZHJhZ2dpbmc9ITEsaS5fY29uc3RyYWluZWRUb0NvbXBvbmVudD0hMCxpLl9tb3VzZUZpbHRlcj1lLl9ERUZBVUxUX01PVVNFX0ZJTFRFUixpLl9kcmFnU3RhcnRDYWxsYmFja3M9bmV3IFNtdC5DYWxsYmFja1NldCxpLl9kcmFnQ2FsbGJhY2tzPW5ldyBTbXQuQ2FsbGJhY2tTZXQsaS5fZHJhZ0VuZENhbGxiYWNrcz1uZXcgU210LkNhbGxiYWNrU2V0LGkuX21vdXNlRG93bkNhbGxiYWNrPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGkuX3N0YXJ0RHJhZyh0LGUpfSxpLl9tb3VzZU1vdmVDYWxsYmFjaz1mdW5jdGlvbih0LGUpe3JldHVybiBpLl9kb0RyYWcodCxlKX0saS5fbW91c2VVcENhbGxiYWNrPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGkuX2VuZERyYWcodCxlKX0saS5fdG91Y2hTdGFydENhbGxiYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gaS5fc3RhcnREcmFnKGVbdFswXV0sbil9LGkuX3RvdWNoTW92ZUNhbGxiYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gaS5fZG9EcmFnKGVbdFswXV0sbil9LGkuX3RvdWNoRW5kQ2FsbGJhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBpLl9lbmREcmFnKGVbdFswXV0sbil9LGkuX21vdXNlQnV0dG9uPXZvaWQgMCE9PW4/bjowLGl9cmV0dXJuIERmdC5fX2V4dGVuZHMoZSx0KSxlLnByb3RvdHlwZS5fYW5jaG9yPWZ1bmN0aW9uKGUpe3QucHJvdG90eXBlLl9hbmNob3IuY2FsbCh0aGlzLGUpLHRoaXMuX21vdXNlRGlzcGF0Y2hlcj0kbXQuTW91c2UuZ2V0RGlzcGF0Y2hlcih0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub25Nb3VzZURvd24odGhpcy5fbW91c2VEb3duQ2FsbGJhY2spLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vbk1vdXNlTW92ZSh0aGlzLl9tb3VzZU1vdmVDYWxsYmFjayksdGhpcy5fbW91c2VEaXNwYXRjaGVyLm9uTW91c2VVcCh0aGlzLl9tb3VzZVVwQ2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlcj0kbXQuVG91Y2guZ2V0RGlzcGF0Y2hlcih0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvKSx0aGlzLl90b3VjaERpc3BhdGNoZXIub25Ub3VjaFN0YXJ0KHRoaXMuX3RvdWNoU3RhcnRDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hNb3ZlKHRoaXMuX3RvdWNoTW92ZUNhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXIub25Ub3VjaEVuZCh0aGlzLl90b3VjaEVuZENhbGxiYWNrKX0sZS5wcm90b3R5cGUuX3VuYW5jaG9yPWZ1bmN0aW9uKCl7dC5wcm90b3R5cGUuX3VuYW5jaG9yLmNhbGwodGhpcyksdGhpcy5fbW91c2VEaXNwYXRjaGVyLm9mZk1vdXNlRG93bih0aGlzLl9tb3VzZURvd25DYWxsYmFjayksdGhpcy5fbW91c2VEaXNwYXRjaGVyLm9mZk1vdXNlTW92ZSh0aGlzLl9tb3VzZU1vdmVDYWxsYmFjayksdGhpcy5fbW91c2VEaXNwYXRjaGVyLm9mZk1vdXNlVXAodGhpcy5fbW91c2VVcENhbGxiYWNrKSx0aGlzLl9tb3VzZURpc3BhdGNoZXI9bnVsbCx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vZmZUb3VjaE1vdmUodGhpcy5fdG91Y2hNb3ZlQ2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vZmZUb3VjaEVuZCh0aGlzLl90b3VjaEVuZENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXI9bnVsbH0sZS5wcm90b3R5cGUuX3RyYW5zbGF0ZUFuZENvbnN0cmFpbj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl90cmFuc2xhdGVUb0NvbXBvbmVudFNwYWNlKHQpO3JldHVybiB0aGlzLl9jb25zdHJhaW5lZFRvQ29tcG9uZW50P3t4OlNtdC5NYXRoLmNsYW1wKGUueCwwLHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8ud2lkdGgoKSkseTpTbXQuTWF0aC5jbGFtcChlLnksMCx0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvLmhlaWdodCgpKX06ZX0sZS5wcm90b3R5cGUuX3N0YXJ0RHJhZz1mdW5jdGlvbih0LGUpe2lmKCEoZSBpbnN0YW5jZW9mIE1vdXNlRXZlbnQpfHx0aGlzLl9tb3VzZUZpbHRlcihlKSl7dmFyIG49dGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZSh0KTt0aGlzLl9pc0luc2lkZUNvbXBvbmVudChuKSYmKGUucHJldmVudERlZmF1bHQoKSx0aGlzLl9kcmFnZ2luZz0hMCx0aGlzLl9kcmFnT3JpZ2luPW4sdGhpcy5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmNhbGxDYWxsYmFja3ModGhpcy5fZHJhZ09yaWdpbikpfX0sZS5wcm90b3R5cGUuX2RvRHJhZz1mdW5jdGlvbih0LGUpe3RoaXMuX2RyYWdnaW5nJiZ0aGlzLl9kcmFnQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3ModGhpcy5fZHJhZ09yaWdpbix0aGlzLl90cmFuc2xhdGVBbmRDb25zdHJhaW4odCkpfSxlLnByb3RvdHlwZS5fZW5kRHJhZz1mdW5jdGlvbih0LGUpe2UgaW5zdGFuY2VvZiBNb3VzZUV2ZW50JiZlLmJ1dHRvbiE9PXRoaXMuX21vdXNlQnV0dG9ufHx0aGlzLl9kcmFnZ2luZyYmKHRoaXMuX2RyYWdnaW5nPSExLHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuY2FsbENhbGxiYWNrcyh0aGlzLl9kcmFnT3JpZ2luLHRoaXMuX3RyYW5zbGF0ZUFuZENvbnN0cmFpbih0KSkpfSxlLnByb3RvdHlwZS5jb25zdHJhaW5lZFRvQ29tcG9uZW50PWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX2NvbnN0cmFpbmVkVG9Db21wb25lbnQ6KHRoaXMuX2NvbnN0cmFpbmVkVG9Db21wb25lbnQ9dCx0aGlzKX0sZS5wcm90b3R5cGUubW91c2VGaWx0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMuX21vdXNlRmlsdGVyOih0aGlzLl9tb3VzZUZpbHRlcj10LHRoaXMpfSxlLnByb3RvdHlwZS5vbkRyYWdTdGFydD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmFkZCh0KSx0aGlzfSxlLnByb3RvdHlwZS5vZmZEcmFnU3RhcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2RyYWdTdGFydENhbGxiYWNrcy5kZWxldGUodCksdGhpc30sZS5wcm90b3R5cGUub25EcmFnPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9kcmFnQ2FsbGJhY2tzLmFkZCh0KSx0aGlzfSxlLnByb3RvdHlwZS5vZmZEcmFnPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9kcmFnQ2FsbGJhY2tzLmRlbGV0ZSh0KSx0aGlzfSxlLnByb3RvdHlwZS5vbkRyYWdFbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuYWRkKHQpLHRoaXN9LGUucHJvdG90eXBlLm9mZkRyYWdFbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuZGVsZXRlKHQpLHRoaXN9LGUuX0RFRkFVTFRfTU9VU0VfRklMVEVSPWZ1bmN0aW9uKHQpe3JldHVybiAwPT09dC5idXR0b259LGV9KShLbXQuSW50ZXJhY3Rpb24pO2UuRHJhZz1ufSkpLFFtdD1iZSgoZnVuY3Rpb24odCxlKXsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dmFyIGU9bnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiBlLl9rZXlQcmVzc0NhbGxiYWNrcz17fSxlLl9rZXlSZWxlYXNlQ2FsbGJhY2tzPXt9LGUuX21vdXNlTW92ZUNhbGxiYWNrPWZ1bmN0aW9uKHQpe3JldHVybiExfSxlLl9kb3duZWRLZXlzPW5ldyBTbXQuU2V0LGUuX2tleURvd25DYWxsYmFjaz1mdW5jdGlvbih0LG4pe3JldHVybiBlLl9oYW5kbGVLZXlEb3duRXZlbnQodCxuKX0sZS5fa2V5VXBDYWxsYmFjaz1mdW5jdGlvbih0KXtyZXR1cm4gZS5faGFuZGxlS2V5VXBFdmVudCh0KX0sZX1yZXR1cm4gRGZ0Ll9fZXh0ZW5kcyhlLHQpLGUucHJvdG90eXBlLl9hbmNob3I9ZnVuY3Rpb24oZSl7dC5wcm90b3R5cGUuX2FuY2hvci5jYWxsKHRoaXMsZSksdGhpcy5fcG9zaXRpb25EaXNwYXRjaGVyPSRtdC5Nb3VzZS5nZXREaXNwYXRjaGVyKHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8pLHRoaXMuX3Bvc2l0aW9uRGlzcGF0Y2hlci5vbk1vdXNlTW92ZSh0aGlzLl9tb3VzZU1vdmVDYWxsYmFjayksdGhpcy5fa2V5RGlzcGF0Y2hlcj0kbXQuS2V5LmdldERpc3BhdGNoZXIoKSx0aGlzLl9rZXlEaXNwYXRjaGVyLm9uS2V5RG93bih0aGlzLl9rZXlEb3duQ2FsbGJhY2spLHRoaXMuX2tleURpc3BhdGNoZXIub25LZXlVcCh0aGlzLl9rZXlVcENhbGxiYWNrKX0sZS5wcm90b3R5cGUuX3VuYW5jaG9yPWZ1bmN0aW9uKCl7dC5wcm90b3R5cGUuX3VuYW5jaG9yLmNhbGwodGhpcyksdGhpcy5fcG9zaXRpb25EaXNwYXRjaGVyLm9mZk1vdXNlTW92ZSh0aGlzLl9tb3VzZU1vdmVDYWxsYmFjayksdGhpcy5fcG9zaXRpb25EaXNwYXRjaGVyPW51bGwsdGhpcy5fa2V5RGlzcGF0Y2hlci5vZmZLZXlEb3duKHRoaXMuX2tleURvd25DYWxsYmFjayksdGhpcy5fa2V5RGlzcGF0Y2hlci5vZmZLZXlVcCh0aGlzLl9rZXlVcENhbGxiYWNrKSx0aGlzLl9rZXlEaXNwYXRjaGVyPW51bGx9LGUucHJvdG90eXBlLl9oYW5kbGVLZXlEb3duRXZlbnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl90cmFuc2xhdGVUb0NvbXBvbmVudFNwYWNlKHRoaXMuX3Bvc2l0aW9uRGlzcGF0Y2hlci5sYXN0TW91c2VQb3NpdGlvbigpKTt0aGlzLl9pc0luc2lkZUNvbXBvbmVudChuKSYmIWUucmVwZWF0JiYodGhpcy5fa2V5UHJlc3NDYWxsYmFja3NbdF0mJnRoaXMuX2tleVByZXNzQ2FsbGJhY2tzW3RdLmNhbGxDYWxsYmFja3ModCksdGhpcy5fZG93bmVkS2V5cy5hZGQodCkpfSxlLnByb3RvdHlwZS5faGFuZGxlS2V5VXBFdmVudD1mdW5jdGlvbih0KXt0aGlzLl9kb3duZWRLZXlzLmhhcyh0KSYmdGhpcy5fa2V5UmVsZWFzZUNhbGxiYWNrc1t0XSYmdGhpcy5fa2V5UmVsZWFzZUNhbGxiYWNrc1t0XS5jYWxsQ2FsbGJhY2tzKHQpLHRoaXMuX2Rvd25lZEtleXMuZGVsZXRlKHQpfSxlLnByb3RvdHlwZS5vbktleVByZXNzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2tleVByZXNzQ2FsbGJhY2tzW3RdfHwodGhpcy5fa2V5UHJlc3NDYWxsYmFja3NbdF09bmV3IFNtdC5DYWxsYmFja1NldCksdGhpcy5fa2V5UHJlc3NDYWxsYmFja3NbdF0uYWRkKGUpLHRoaXN9LGUucHJvdG90eXBlLm9mZktleVByZXNzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2tleVByZXNzQ2FsbGJhY2tzW3RdLmRlbGV0ZShlKSwwPT09dGhpcy5fa2V5UHJlc3NDYWxsYmFja3NbdF0uc2l6ZSYmZGVsZXRlIHRoaXMuX2tleVByZXNzQ2FsbGJhY2tzW3RdLHRoaXN9LGUucHJvdG90eXBlLm9uS2V5UmVsZWFzZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9rZXlSZWxlYXNlQ2FsbGJhY2tzW3RdfHwodGhpcy5fa2V5UmVsZWFzZUNhbGxiYWNrc1t0XT1uZXcgU210LkNhbGxiYWNrU2V0KSx0aGlzLl9rZXlSZWxlYXNlQ2FsbGJhY2tzW3RdLmFkZChlKSx0aGlzfSxlLnByb3RvdHlwZS5vZmZLZXlSZWxlYXNlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2tleVJlbGVhc2VDYWxsYmFja3NbdF0uZGVsZXRlKGUpLDA9PT10aGlzLl9rZXlSZWxlYXNlQ2FsbGJhY2tzW3RdLnNpemUmJmRlbGV0ZSB0aGlzLl9rZXlSZWxlYXNlQ2FsbGJhY2tzW3RdLHRoaXN9LGV9KShLbXQuSW50ZXJhY3Rpb24pO2UuS2V5PW59KSksdGd0PWJlKChmdW5jdGlvbih0LGUpewovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgaT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkuX3doZWVsRmlsdGVyPWZ1bmN0aW9uKHQpe3JldHVybiEwfSxpLl93aGVlbENhbGxiYWNrPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGkuX2hhbmRsZVdoZWVsRXZlbnQodCxlKX0saS5fdG91Y2hTdGFydENhbGxiYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gaS5faGFuZGxlVG91Y2hTdGFydCh0LGUsbil9LGkuX3RvdWNoTW92ZUNhbGxiYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gaS5faGFuZGxlUGluY2godCxlLG4pfSxpLl90b3VjaEVuZENhbGxiYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gaS5faGFuZGxlVG91Y2hFbmQodCxlLG4pfSxpLl90b3VjaENhbmNlbENhbGxiYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gaS5faGFuZGxlVG91Y2hFbmQodCxlLG4pfSxpLl9wYW5FbmRDYWxsYmFja3M9bmV3IFNtdC5DYWxsYmFja1NldCxpLl96b29tRW5kQ2FsbGJhY2tzPW5ldyBTbXQuQ2FsbGJhY2tTZXQsaS5fcGFuWm9vbVVwZGF0ZUNhbGxiYWNrcz1uZXcgU210LkNhbGxiYWNrU2V0LGkuX3hTY2FsZXM9bmV3IFNtdC5TZXQsaS5feVNjYWxlcz1uZXcgU210LlNldCxpLl9kcmFnSW50ZXJhY3Rpb249bmV3IG5ndC5EcmFnLGkuX3NldHVwRHJhZ0ludGVyYWN0aW9uKCksaS5fdG91Y2hJZHM9aWR0Lm1hcCgpLGkuX21pbkRvbWFpbkV4dGVudHM9bmV3IFNtdC5NYXAsaS5fbWF4RG9tYWluRXh0ZW50cz1uZXcgU210Lk1hcCxpLl9taW5Eb21haW5WYWx1ZXM9bmV3IFNtdC5NYXAsaS5fbWF4RG9tYWluVmFsdWVzPW5ldyBTbXQuTWFwLG51bGwhPWUmJmkuYWRkWFNjYWxlKGUpLG51bGwhPW4mJmkuYWRkWVNjYWxlKG4pLGl9cmV0dXJuIERmdC5fX2V4dGVuZHMoZSx0KSxlLnByb3RvdHlwZS5kcmFnSW50ZXJhY3Rpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZHJhZ0ludGVyYWN0aW9ufSxlLnByb3RvdHlwZS53aGVlbEZpbHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGg/dGhpcy5fd2hlZWxGaWx0ZXI6KHRoaXMuX3doZWVsRmlsdGVyPXQsdGhpcyl9LGUucHJvdG90eXBlLnBhbj1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMueFNjYWxlcygpLmZvckVhY2goKGZ1bmN0aW9uKG4pe24ucGFuKGUuX2NvbnN0cmFpbmVkVHJhbnNsYXRpb24obix0LngpKX0pKSx0aGlzLnlTY2FsZXMoKS5mb3JFYWNoKChmdW5jdGlvbihuKXtuLnBhbihlLl9jb25zdHJhaW5lZFRyYW5zbGF0aW9uKG4sdC55KSl9KSksdGhpcy5fcGFuWm9vbVVwZGF0ZUNhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKCl9LGUucHJvdG90eXBlLnpvb209ZnVuY3Rpb24odCxlLG4pe3ZhciBpLHIsbz10aGlzO3JldHVybiB2b2lkIDA9PT1uJiYobj0hMCksbnVsbCE9ZSYmKGk9ZS54LHI9ZS55LG4mJih0aGlzLnhTY2FsZXMoKS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgbj1vLl9jb25zdHJhaW5lZFpvb20oZSx0LGkpO2k9bi5jZW50ZXJQb2ludCx0PW4uem9vbUFtb3VudH0pKSx0aGlzLnlTY2FsZXMoKS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgbj1vLl9jb25zdHJhaW5lZFpvb20oZSx0LHIpO3I9bi5jZW50ZXJQb2ludCx0PW4uem9vbUFtb3VudH0pKSkpLHRoaXMueFNjYWxlcygpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciBuPWUucmFuZ2UoKTtlLnpvb20odCxudWxsPT1pPyhuWzFdK25bMF0pLzI6aSl9KSksdGhpcy55U2NhbGVzKCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIG49ZS5yYW5nZSgpO2Uuem9vbSh0LG51bGw9PXI/KG5bMV0rblswXSkvMjpyKX0pKSx0aGlzLl9wYW5ab29tVXBkYXRlQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MoKSx7em9vbUFtb3VudDp0LGNlbnRlclZhbHVlOntjZW50ZXJYOmksY2VudGVyWTpyfX19LGUucHJvdG90eXBlLl9hbmNob3I9ZnVuY3Rpb24oZSl7dC5wcm90b3R5cGUuX2FuY2hvci5jYWxsKHRoaXMsZSksdGhpcy5fZHJhZ0ludGVyYWN0aW9uLmF0dGFjaFRvKGUpLHRoaXMuX21vdXNlRGlzcGF0Y2hlcj0kbXQuTW91c2UuZ2V0RGlzcGF0Y2hlcih0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub25XaGVlbCh0aGlzLl93aGVlbENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXI9JG10LlRvdWNoLmdldERpc3BhdGNoZXIodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoTW92ZSh0aGlzLl90b3VjaE1vdmVDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hFbmQodGhpcy5fdG91Y2hFbmRDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hDYW5jZWwodGhpcy5fdG91Y2hDYW5jZWxDYWxsYmFjayl9LGUucHJvdG90eXBlLl91bmFuY2hvcj1mdW5jdGlvbigpe3QucHJvdG90eXBlLl91bmFuY2hvci5jYWxsKHRoaXMpLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZXaGVlbCh0aGlzLl93aGVlbENhbGxiYWNrKSx0aGlzLl9tb3VzZURpc3BhdGNoZXI9bnVsbCx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vZmZUb3VjaE1vdmUodGhpcy5fdG91Y2hNb3ZlQ2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vZmZUb3VjaEVuZCh0aGlzLl90b3VjaEVuZENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hDYW5jZWwodGhpcy5fdG91Y2hDYW5jZWxDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyPW51bGwsdGhpcy5fZHJhZ0ludGVyYWN0aW9uLmRldGFjaCgpfSxlLnByb3RvdHlwZS5faGFuZGxlVG91Y2hTdGFydD1mdW5jdGlvbih0LGUsbil7Zm9yKHZhciBpPTA7aTx0Lmxlbmd0aCYmdGhpcy5fdG91Y2hJZHMuc2l6ZSgpPDI7aSsrKXt2YXIgcj10W2ldO3RoaXMuX3RvdWNoSWRzLnNldChyLnRvU3RyaW5nKCksdGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShlW3JdKSl9fSxlLnByb3RvdHlwZS5faGFuZGxlUGluY2g9ZnVuY3Rpb24odCxuLGkpe3ZhciByPXRoaXM7aWYoISh0aGlzLl90b3VjaElkcy5zaXplKCk8Mikpe3ZhciBvPXRoaXMuX3RvdWNoSWRzLnZhbHVlcygpO2lmKHRoaXMuX2lzSW5zaWRlQ29tcG9uZW50KHRoaXMuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2Uob1swXSkpJiZ0aGlzLl9pc0luc2lkZUNvbXBvbmVudCh0aGlzLl90cmFuc2xhdGVUb0NvbXBvbmVudFNwYWNlKG9bMV0pKSl7dmFyIGE9ZS5fcG9pbnREaXN0YW5jZShvWzBdLG9bMV0pO2lmKDAhPT1hKXt0LmZvckVhY2goKGZ1bmN0aW9uKHQpe3IuX3RvdWNoSWRzLmhhcyh0LnRvU3RyaW5nKCkpJiZyLl90b3VjaElkcy5zZXQodC50b1N0cmluZygpLHIuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2Uoblt0XSkpfSkpO3ZhciBzPXRoaXMuX3RvdWNoSWRzLnZhbHVlcygpLGw9ZS5fcG9pbnREaXN0YW5jZShzWzBdLHNbMV0pO2lmKDAhPT1sKXt2YXIgYz1hL2wsdT1zLm1hcCgoZnVuY3Rpb24odCxlKXtyZXR1cm57eDoodC54LW9bZV0ueCkvYyx5Oih0Lnktb1tlXS55KS9jfX0pKSxoPWUuY2VudGVyUG9pbnQob1swXSxvWzFdKSxkPXRoaXMuem9vbShjLGgpLHA9ZC5jZW50ZXJWYWx1ZSxmPWQuem9vbUFtb3VudCxtPXAuY2VudGVyWCxnPXAuY2VudGVyWSxfPW8ubWFwKChmdW5jdGlvbih0LGUpe3JldHVybnt4OnVbZV0ueCpmK3QueCx5OnVbZV0ueSpmK3QueX19KSk7dGhpcy5wYW4oe3g6bS0oX1swXS54K19bMV0ueCkvMix5OmctKF9bMF0ueStfWzFdLnkpLzJ9KX19fX19LGUuY2VudGVyUG9pbnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1NYXRoLm1pbih0LngsZS54KSxpPU1hdGgubWF4KHQueCxlLngpLHI9TWF0aC5taW4odC55LGUueSk7cmV0dXJue3g6KG4raSkvMix5OihNYXRoLm1heCh0LnksZS55KStyKS8yfX0sZS5fcG9pbnREaXN0YW5jZT1mdW5jdGlvbih0LGUpe3ZhciBuPU1hdGgubWluKHQueCxlLngpLGk9TWF0aC5tYXgodC54LGUueCkscj1NYXRoLm1pbih0LnksZS55KSxvPU1hdGgubWF4KHQueSxlLnkpO3JldHVybiBNYXRoLnNxcnQoTWF0aC5wb3coaS1uLDIpK01hdGgucG93KG8tciwyKSl9LGUucHJvdG90eXBlLl9oYW5kbGVUb3VjaEVuZD1mdW5jdGlvbih0LGUsbil7dmFyIGk9dGhpczt0LmZvckVhY2goKGZ1bmN0aW9uKHQpe2kuX3RvdWNoSWRzLnJlbW92ZSh0LnRvU3RyaW5nKCkpfSkpLHRoaXMuX3RvdWNoSWRzLnNpemUoKT4wJiZ0aGlzLl96b29tRW5kQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MoKX0sZS5wcm90b3R5cGUuX2hhbmRsZVdoZWVsRXZlbnQ9ZnVuY3Rpb24odCxuKXtpZih0aGlzLl93aGVlbEZpbHRlcihuKSl7dmFyIGk9dGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZSh0KTtpZih0aGlzLl9pc0luc2lkZUNvbXBvbmVudChpKSl7bi5wcmV2ZW50RGVmYXVsdCgpO3ZhciByPU1hdGgucG93KDIsKDAhPT1uLmRlbHRhWT9uLmRlbHRhWTpuLmRlbHRhWCkqKG4uZGVsdGFNb2RlP2UuX1BJWEVMU19QRVJfTElORToxKSouMDAyKTt0aGlzLnpvb20ocixpKSx0aGlzLl96b29tRW5kQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MoKX19fSxlLnByb3RvdHlwZS5fY29uc3RyYWluZWRab29tPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gTm10LmNvbnN0cmFpbmVkWm9vbSh0LGUsbix0aGlzLm1pbkRvbWFpbkV4dGVudCh0KSx0aGlzLm1heERvbWFpbkV4dGVudCh0KSx0aGlzLm1pbkRvbWFpblZhbHVlKHQpLHRoaXMubWF4RG9tYWluVmFsdWUodCkpfSxlLnByb3RvdHlwZS5fY29uc3RyYWluZWRUcmFuc2xhdGlvbj1mdW5jdGlvbih0LGUpe3JldHVybiBObXQuY29uc3RyYWluZWRUcmFuc2xhdGlvbih0LGUsdGhpcy5taW5Eb21haW5WYWx1ZSh0KSx0aGlzLm1heERvbWFpblZhbHVlKHQpKX0sZS5wcm90b3R5cGUuX3NldHVwRHJhZ0ludGVyYWN0aW9uPWZ1bmN0aW9uKCl7dmFyIHQsZT10aGlzO3RoaXMuX2RyYWdJbnRlcmFjdGlvbi5jb25zdHJhaW5lZFRvQ29tcG9uZW50KCExKSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnU3RhcnQoKGZ1bmN0aW9uKCl7cmV0dXJuIHQ9bnVsbH0pKSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnKChmdW5jdGlvbihuLGkpe2UuX3RvdWNoSWRzLnNpemUoKT49Mnx8KGUucGFuKHt4OihudWxsPT10P24ueDp0LngpLWkueCx5OihudWxsPT10P24ueTp0LnkpLWkueX0pLHQ9aSl9KSksdGhpcy5fZHJhZ0ludGVyYWN0aW9uLm9uRHJhZ0VuZCgoZnVuY3Rpb24oKXtyZXR1cm4gZS5fcGFuRW5kQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MoKX0pKX0sZS5wcm90b3R5cGUuX25vbkxpbmVhclNjYWxlV2l0aEV4dGVudHM9ZnVuY3Rpb24odCl7cmV0dXJuIShudWxsPT10aGlzLm1pbkRvbWFpbkV4dGVudCh0KXx8bnVsbD09dGhpcy5tYXhEb21haW5FeHRlbnQodCl8fHQgaW5zdGFuY2VvZiBVbXQuTGluZWFyfHx0IGluc3RhbmNlb2YgVW10LlRpbWUpfSxlLnByb3RvdHlwZS54U2NhbGVzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYobnVsbD09dCl7dmFyIG49W107cmV0dXJuIHRoaXMuX3hTY2FsZXMuZm9yRWFjaCgoZnVuY3Rpb24odCl7bi5wdXNoKHQpfSkpLG59cmV0dXJuIHRoaXMuX3hTY2FsZXM9bmV3IFNtdC5TZXQsdC5mb3JFYWNoKChmdW5jdGlvbih0KXtlLmFkZFhTY2FsZSh0KX0pKSx0aGlzfSxlLnByb3RvdHlwZS55U2NhbGVzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYobnVsbD09dCl7dmFyIG49W107cmV0dXJuIHRoaXMuX3lTY2FsZXMuZm9yRWFjaCgoZnVuY3Rpb24odCl7bi5wdXNoKHQpfSkpLG59cmV0dXJuIHRoaXMuX3lTY2FsZXM9bmV3IFNtdC5TZXQsdC5mb3JFYWNoKChmdW5jdGlvbih0KXtlLmFkZFlTY2FsZSh0KX0pKSx0aGlzfSxlLnByb3RvdHlwZS5hZGRYU2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3hTY2FsZXMuYWRkKHQpLHRoaXN9LGUucHJvdG90eXBlLnJlbW92ZVhTY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5feFNjYWxlcy5kZWxldGUodCksdGhpcy5fbWluRG9tYWluRXh0ZW50cy5kZWxldGUodCksdGhpcy5fbWF4RG9tYWluRXh0ZW50cy5kZWxldGUodCksdGhpcy5fbWluRG9tYWluVmFsdWVzLmRlbGV0ZSh0KSx0aGlzLl9tYXhEb21haW5WYWx1ZXMuZGVsZXRlKHQpLHRoaXN9LGUucHJvdG90eXBlLmFkZFlTY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5feVNjYWxlcy5hZGQodCksdGhpc30sZS5wcm90b3R5cGUucmVtb3ZlWVNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl95U2NhbGVzLmRlbGV0ZSh0KSx0aGlzLl9taW5Eb21haW5FeHRlbnRzLmRlbGV0ZSh0KSx0aGlzLl9tYXhEb21haW5FeHRlbnRzLmRlbGV0ZSh0KSx0aGlzLl9taW5Eb21haW5WYWx1ZXMuZGVsZXRlKHQpLHRoaXMuX21heERvbWFpblZhbHVlcy5kZWxldGUodCksdGhpc30sZS5wcm90b3R5cGUubWluRG9tYWluRXh0ZW50PWZ1bmN0aW9uKHQsZSl7aWYobnVsbD09ZSlyZXR1cm4gdGhpcy5fbWluRG9tYWluRXh0ZW50cy5nZXQodCk7aWYoZS52YWx1ZU9mKCk8MCl0aHJvdyBuZXcgRXJyb3IoImV4dGVudCBtdXN0IGJlIG5vbi1uZWdhdGl2ZSIpO3ZhciBuPXRoaXMubWF4RG9tYWluRXh0ZW50KHQpO2lmKG51bGwhPW4mJm4udmFsdWVPZigpPGUudmFsdWVPZigpKXRocm93IG5ldyBFcnJvcigibWluRG9tYWluRXh0ZW50IG11c3QgYmUgc21hbGxlciB0aGFuIG1heERvbWFpbkV4dGVudCBmb3IgdGhlIHNhbWUgU2NhbGUiKTtyZXR1cm4gdGhpcy5fbm9uTGluZWFyU2NhbGVXaXRoRXh0ZW50cyh0KSYmU210LldpbmRvdy53YXJuKCJQYW5uaW5nIGFuZCB6b29taW5nIHdpdGggZXh0ZW50cyBvbiBhIG5vbmxpbmVhciBzY2FsZSBtYXkgaGF2ZSB1bmludGVuZGVkIGJlaGF2aW9yLiIpLHRoaXMuX21pbkRvbWFpbkV4dGVudHMuc2V0KHQsZSksdGhpc30sZS5wcm90b3R5cGUubWF4RG9tYWluRXh0ZW50PWZ1bmN0aW9uKHQsZSl7aWYobnVsbD09ZSlyZXR1cm4gdGhpcy5fbWF4RG9tYWluRXh0ZW50cy5nZXQodCk7aWYoZS52YWx1ZU9mKCk8PTApdGhyb3cgbmV3IEVycm9yKCJleHRlbnQgbXVzdCBiZSBwb3NpdGl2ZSIpO3ZhciBuPXRoaXMubWluRG9tYWluRXh0ZW50KHQpO2lmKG51bGwhPW4mJmUudmFsdWVPZigpPG4udmFsdWVPZigpKXRocm93IG5ldyBFcnJvcigibWF4RG9tYWluRXh0ZW50IG11c3QgYmUgbGFyZ2VyIHRoYW4gbWluRG9tYWluRXh0ZW50IGZvciB0aGUgc2FtZSBTY2FsZSIpO3JldHVybiB0aGlzLl9ub25MaW5lYXJTY2FsZVdpdGhFeHRlbnRzKHQpJiZTbXQuV2luZG93Lndhcm4oIlBhbm5pbmcgYW5kIHpvb21pbmcgd2l0aCBleHRlbnRzIG9uIGEgbm9ubGluZWFyIHNjYWxlIG1heSBoYXZlIHVuaW50ZW5kZWQgYmVoYXZpb3IuIiksdGhpcy5fbWF4RG9tYWluRXh0ZW50cy5zZXQodCxlKSx0aGlzfSxlLnByb3RvdHlwZS5taW5Eb21haW5WYWx1ZT1mdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT1lP3RoaXMuX21pbkRvbWFpblZhbHVlcy5nZXQodCk6KHRoaXMuX21pbkRvbWFpblZhbHVlcy5zZXQodCxlKSx0aGlzKX0sZS5wcm90b3R5cGUubWF4RG9tYWluVmFsdWU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09ZT90aGlzLl9tYXhEb21haW5WYWx1ZXMuZ2V0KHQpOih0aGlzLl9tYXhEb21haW5WYWx1ZXMuc2V0KHQsZSksdGhpcyl9LGUucHJvdG90eXBlLnNldE1pbk1heERvbWFpblZhbHVlc1RvPWZ1bmN0aW9uKHQpe3RoaXMuX21pbkRvbWFpblZhbHVlcy5kZWxldGUodCksdGhpcy5fbWF4RG9tYWluVmFsdWVzLmRlbGV0ZSh0KTt2YXIgZT10LmdldFRyYW5zZm9ybWF0aW9uRG9tYWluKCksbj1lWzFdO3JldHVybiB0aGlzLm1pbkRvbWFpblZhbHVlKHQsZVswXSksdGhpcy5tYXhEb21haW5WYWx1ZSh0LG4pLHRoaXN9LGUucHJvdG90eXBlLm9uUGFuRW5kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYW5FbmRDYWxsYmFja3MuYWRkKHQpLHRoaXN9LGUucHJvdG90eXBlLm9mZlBhbkVuZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFuRW5kQ2FsbGJhY2tzLmRlbGV0ZSh0KSx0aGlzfSxlLnByb3RvdHlwZS5vblpvb21FbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3pvb21FbmRDYWxsYmFja3MuYWRkKHQpLHRoaXN9LGUucHJvdG90eXBlLm9mZlpvb21FbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3pvb21FbmRDYWxsYmFja3MuZGVsZXRlKHQpLHRoaXN9LGUucHJvdG90eXBlLm9uUGFuWm9vbVVwZGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFuWm9vbVVwZGF0ZUNhbGxiYWNrcy5hZGQodCksdGhpc30sZS5wcm90b3R5cGUub2ZmUGFuWm9vbVVwZGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFuWm9vbVVwZGF0ZUNhbGxiYWNrcy5kZWxldGUodCksdGhpc30sZS5fUElYRUxTX1BFUl9MSU5FPTEyMCxlfSkoS210LkludGVyYWN0aW9uKTtlLlBhblpvb209bn0pKSxlZ3Q9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBlPW51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztyZXR1cm4gZS5fb3ZlckNvbXBvbmVudD0hMSxlLl9wb2ludGVyRW50ZXJDYWxsYmFja3M9bmV3IFNtdC5DYWxsYmFja1NldCxlLl9wb2ludGVyTW92ZUNhbGxiYWNrcz1uZXcgU210LkNhbGxiYWNrU2V0LGUuX3BvaW50ZXJFeGl0Q2FsbGJhY2tzPW5ldyBTbXQuQ2FsbGJhY2tTZXQsZS5fbW91c2VNb3ZlQ2FsbGJhY2s9ZnVuY3Rpb24odCxuKXtyZXR1cm4gZS5faGFuZGxlTW91c2VFdmVudCh0LG4pfSxlLl90b3VjaFN0YXJ0Q2FsbGJhY2s9ZnVuY3Rpb24odCxuLGkpe3JldHVybiBlLl9oYW5kbGVUb3VjaEV2ZW50KG5bdFswXV0saSl9LGV9cmV0dXJuIERmdC5fX2V4dGVuZHMoZSx0KSxlLnByb3RvdHlwZS5fYW5jaG9yPWZ1bmN0aW9uKGUpe3QucHJvdG90eXBlLl9hbmNob3IuY2FsbCh0aGlzLGUpLHRoaXMuX21vdXNlRGlzcGF0Y2hlcj0kbXQuTW91c2UuZ2V0RGlzcGF0Y2hlcih0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub25Nb3VzZU1vdmUodGhpcy5fbW91c2VNb3ZlQ2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlcj0kbXQuVG91Y2guZ2V0RGlzcGF0Y2hlcih0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvKSx0aGlzLl90b3VjaERpc3BhdGNoZXIub25Ub3VjaFN0YXJ0KHRoaXMuX3RvdWNoU3RhcnRDYWxsYmFjayl9LGUucHJvdG90eXBlLl91bmFuY2hvcj1mdW5jdGlvbigpe3QucHJvdG90eXBlLl91bmFuY2hvci5jYWxsKHRoaXMpLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZNb3VzZU1vdmUodGhpcy5fbW91c2VNb3ZlQ2FsbGJhY2spLHRoaXMuX21vdXNlRGlzcGF0Y2hlcj1udWxsLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vZmZUb3VjaFN0YXJ0KHRoaXMuX3RvdWNoU3RhcnRDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyPW51bGx9LGUucHJvdG90eXBlLl9oYW5kbGVNb3VzZUV2ZW50PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fbW91c2VEaXNwYXRjaGVyLmV2ZW50SW5zaWRlKHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8sZSk7dGhpcy5faGFuZGxlUG9pbnRlckV2ZW50KHQsbil9LGUucHJvdG90eXBlLl9oYW5kbGVUb3VjaEV2ZW50PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fdG91Y2hEaXNwYXRjaGVyLmV2ZW50SW5zaWRlKHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8sZSk7dGhpcy5faGFuZGxlUG9pbnRlckV2ZW50KHQsbil9LGUucHJvdG90eXBlLl9oYW5kbGVQb2ludGVyRXZlbnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl90cmFuc2xhdGVUb0NvbXBvbmVudFNwYWNlKHQpLGk9dGhpcy5faXNJbnNpZGVDb21wb25lbnQobik7aSYmZT8odGhpcy5fb3ZlckNvbXBvbmVudHx8dGhpcy5fcG9pbnRlckVudGVyQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MobiksdGhpcy5fcG9pbnRlck1vdmVDYWxsYmFja3MuY2FsbENhbGxiYWNrcyhuKSk6dGhpcy5fb3ZlckNvbXBvbmVudCYmdGhpcy5fcG9pbnRlckV4aXRDYWxsYmFja3MuY2FsbENhbGxiYWNrcyhuKSx0aGlzLl9vdmVyQ29tcG9uZW50PWkmJmV9LGUucHJvdG90eXBlLm9uUG9pbnRlckVudGVyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wb2ludGVyRW50ZXJDYWxsYmFja3MuYWRkKHQpLHRoaXN9LGUucHJvdG90eXBlLm9mZlBvaW50ZXJFbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcG9pbnRlckVudGVyQ2FsbGJhY2tzLmRlbGV0ZSh0KSx0aGlzfSxlLnByb3RvdHlwZS5vblBvaW50ZXJNb3ZlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wb2ludGVyTW92ZUNhbGxiYWNrcy5hZGQodCksdGhpc30sZS5wcm90b3R5cGUub2ZmUG9pbnRlck1vdmU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BvaW50ZXJNb3ZlQ2FsbGJhY2tzLmRlbGV0ZSh0KSx0aGlzfSxlLnByb3RvdHlwZS5vblBvaW50ZXJFeGl0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wb2ludGVyRXhpdENhbGxiYWNrcy5hZGQodCksdGhpc30sZS5wcm90b3R5cGUub2ZmUG9pbnRlckV4aXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BvaW50ZXJFeGl0Q2FsbGJhY2tzLmRlbGV0ZSh0KSx0aGlzfSxlfSkoS210LkludGVyYWN0aW9uKTtlLlBvaW50ZXI9bn0pKSxuZ3Q9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxEZnQuX19leHBvcnRTdGFyKFptdCxlKSxEZnQuX19leHBvcnRTdGFyKEptdCxlKSxEZnQuX19leHBvcnRTdGFyKFFtdCxlKSxEZnQuX19leHBvcnRTdGFyKHRndCxlKSxEZnQuX19leHBvcnRTdGFyKGVndCxlKSxlLnpvb21PdXQ9Tm10Lnpvb21PdXR9KSksaWd0PWJlKChmdW5jdGlvbih0LGUpe3ZhciBuOwovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksKGZ1bmN0aW9uKHQpe3RbdC5WQUxVRT0wXT0iVkFMVUUiLHRbdC5QSVhFTD0xXT0iUElYRUwifSkobj1lLlByb3BlcnR5TW9kZXx8KGUuUHJvcGVydHlNb2RlPXt9KSk7dmFyIGk9KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt2YXIgZT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGUuX2JveFZpc2libGU9ITEsZS5fYm94Qm91bmRzPXt0b3BMZWZ0Ont4OjAseTowfSxib3R0b21SaWdodDp7eDowLHk6MH19LGUuX3hCb3VuZHNNb2RlPW4uUElYRUwsZS5feUJvdW5kc01vZGU9bi5QSVhFTCxlLmFkZENsYXNzKCJzZWxlY3Rpb24tYm94LWxheWVyIiksZS5fYWRqdXN0Qm91bmRzQ2FsbGJhY2s9ZnVuY3Rpb24oKXtlLnJlbmRlcigpfSxlLl9vdmVyZmxvd0hpZGRlbj0hMCxlLl94RXh0ZW50PVt2b2lkIDAsdm9pZCAwXSxlLl95RXh0ZW50PVt2b2lkIDAsdm9pZCAwXSxlfXJldHVybiBEZnQuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7dC5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyksdGhpcy5fYm94PXRoaXMuY29udGVudCgpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInNlbGVjdGlvbi1ib3giLCEwKS5yZW1vdmUoKSx0aGlzLl9ib3hBcmVhPXRoaXMuX2JveC5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKCJzZWxlY3Rpb24tYXJlYSIsITApfSxlLnByb3RvdHlwZS5fc2l6ZUZyb21PZmZlcj1mdW5jdGlvbih0LGUpe3JldHVybnt3aWR0aDp0LGhlaWdodDplfX0sZS5wcm90b3R5cGUuYm91bmRzPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX2dldEJvdW5kcygpOih0aGlzLl9zZXRCb3VuZHModCksdGhpcy5feEJvdW5kc01vZGU9bi5QSVhFTCx0aGlzLl95Qm91bmRzTW9kZT1uLlBJWEVMLHRoaXMucmVuZGVyKCksdGhpcyl9LGUucHJvdG90eXBlLl9zZXRCb3VuZHM9ZnVuY3Rpb24odCl7dmFyIGU9e3g6TWF0aC5taW4odC50b3BMZWZ0LngsdC5ib3R0b21SaWdodC54KSx5Ok1hdGgubWluKHQudG9wTGVmdC55LHQuYm90dG9tUmlnaHQueSl9LG49e3g6TWF0aC5tYXgodC50b3BMZWZ0LngsdC5ib3R0b21SaWdodC54KSx5Ok1hdGgubWF4KHQudG9wTGVmdC55LHQuYm90dG9tUmlnaHQueSl9O3RoaXMuX2JveEJvdW5kcz17dG9wTGVmdDplLGJvdHRvbVJpZ2h0Om59fSxlLnByb3RvdHlwZS5fZ2V0Qm91bmRzPWZ1bmN0aW9uKCl7cmV0dXJue3RvcExlZnQ6e3g6dGhpcy5feEJvdW5kc01vZGU9PT1uLlBJWEVMP3RoaXMuX2JveEJvdW5kcy50b3BMZWZ0Lng6bnVsbD09dGhpcy5feFNjYWxlPzA6TWF0aC5taW4odGhpcy54U2NhbGUoKS5zY2FsZSh0aGlzLnhFeHRlbnQoKVswXSksdGhpcy54U2NhbGUoKS5zY2FsZSh0aGlzLnhFeHRlbnQoKVsxXSkpLHk6dGhpcy5feUJvdW5kc01vZGU9PT1uLlBJWEVMP3RoaXMuX2JveEJvdW5kcy50b3BMZWZ0Lnk6bnVsbD09dGhpcy5feVNjYWxlPzA6TWF0aC5taW4odGhpcy55U2NhbGUoKS5zY2FsZSh0aGlzLnlFeHRlbnQoKVswXSksdGhpcy55U2NhbGUoKS5zY2FsZSh0aGlzLnlFeHRlbnQoKVsxXSkpfSxib3R0b21SaWdodDp7eDp0aGlzLl94Qm91bmRzTW9kZT09PW4uUElYRUw/dGhpcy5fYm94Qm91bmRzLmJvdHRvbVJpZ2h0Lng6bnVsbD09dGhpcy5feFNjYWxlPzA6TWF0aC5tYXgodGhpcy54U2NhbGUoKS5zY2FsZSh0aGlzLnhFeHRlbnQoKVswXSksdGhpcy54U2NhbGUoKS5zY2FsZSh0aGlzLnhFeHRlbnQoKVsxXSkpLHk6dGhpcy5feUJvdW5kc01vZGU9PT1uLlBJWEVMP3RoaXMuX2JveEJvdW5kcy5ib3R0b21SaWdodC55Om51bGw9PXRoaXMuX3lTY2FsZT8wOk1hdGgubWF4KHRoaXMueVNjYWxlKCkuc2NhbGUodGhpcy55RXh0ZW50KClbMF0pLHRoaXMueVNjYWxlKCkuc2NhbGUodGhpcy55RXh0ZW50KClbMV0pKX19fSxlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseT1mdW5jdGlvbigpe2lmKHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5LmNhbGwodGhpcyksdGhpcy5fYm94VmlzaWJsZSl7dmFyIGU9dGhpcy5ib3VuZHMoKSxuPWUudG9wTGVmdC55LGk9ZS5ib3R0b21SaWdodC55LHI9ZS50b3BMZWZ0Lngsbz1lLmJvdHRvbVJpZ2h0Lng7aWYoIShTbXQuTWF0aC5pc1ZhbGlkTnVtYmVyKG4pJiZTbXQuTWF0aC5pc1ZhbGlkTnVtYmVyKGkpJiZTbXQuTWF0aC5pc1ZhbGlkTnVtYmVyKHIpJiZTbXQuTWF0aC5pc1ZhbGlkTnVtYmVyKG8pKSl0aHJvdyBuZXcgRXJyb3IoImJvdW5kcyBoYXZlIG5vdCBiZWVuIHByb3Blcmx5IHNldCIpO3RoaXMuX2JveEFyZWEuYXR0cnMoe3g6cix5Om4sd2lkdGg6by1yLGhlaWdodDppLW59KSx0aGlzLmNvbnRlbnQoKS5ub2RlKCkuYXBwZW5kQ2hpbGQodGhpcy5fYm94Lm5vZGUoKSl9ZWxzZSB0aGlzLl9ib3gucmVtb3ZlKCk7cmV0dXJuIHRoaXN9LGUucHJvdG90eXBlLmJveFZpc2libGU9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5fYm94VmlzaWJsZToodGhpcy5fYm94VmlzaWJsZT10LHRoaXMucmVuZGVyKCksdGhpcyl9LGUucHJvdG90eXBlLmZpeGVkV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sZS5wcm90b3R5cGUuZml4ZWRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sZS5wcm90b3R5cGUueFNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX3hTY2FsZToobnVsbCE9dGhpcy5feFNjYWxlJiZ0aGlzLl94U2NhbGUub2ZmVXBkYXRlKHRoaXMuX2FkanVzdEJvdW5kc0NhbGxiYWNrKSx0aGlzLl94U2NhbGU9dCx0aGlzLl94Qm91bmRzTW9kZT1uLlZBTFVFLHRoaXMuX3hTY2FsZS5vblVwZGF0ZSh0aGlzLl9hZGp1c3RCb3VuZHNDYWxsYmFjayksdGhpcy5yZW5kZXIoKSx0aGlzKX0sZS5wcm90b3R5cGUueVNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX3lTY2FsZToobnVsbCE9dGhpcy5feVNjYWxlJiZ0aGlzLl95U2NhbGUub2ZmVXBkYXRlKHRoaXMuX2FkanVzdEJvdW5kc0NhbGxiYWNrKSx0aGlzLl95U2NhbGU9dCx0aGlzLl95Qm91bmRzTW9kZT1uLlZBTFVFLHRoaXMuX3lTY2FsZS5vblVwZGF0ZSh0aGlzLl9hZGp1c3RCb3VuZHNDYWxsYmFjayksdGhpcy5yZW5kZXIoKSx0aGlzKX0sZS5wcm90b3R5cGUueEV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9nZXRYRXh0ZW50KCk6KHRoaXMuX3NldFhFeHRlbnQodCksdGhpcy5feEJvdW5kc01vZGU9bi5WQUxVRSx0aGlzLnJlbmRlcigpLHRoaXMpfSxlLnByb3RvdHlwZS5fZ2V0WEV4dGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl94Qm91bmRzTW9kZT09PW4uVkFMVUU/dGhpcy5feEV4dGVudDpudWxsPT10aGlzLl94U2NhbGU/W3ZvaWQgMCx2b2lkIDBdOlt0aGlzLl94U2NhbGUuaW52ZXJ0KHRoaXMuX2JveEJvdW5kcy50b3BMZWZ0LngpLHRoaXMuX3hTY2FsZS5pbnZlcnQodGhpcy5fYm94Qm91bmRzLmJvdHRvbVJpZ2h0LngpXX0sZS5wcm90b3R5cGUuX3NldFhFeHRlbnQ9ZnVuY3Rpb24odCl7dGhpcy5feEV4dGVudD10fSxlLnByb3RvdHlwZS55RXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX2dldFlFeHRlbnQoKToodGhpcy5fc2V0WUV4dGVudCh0KSx0aGlzLl95Qm91bmRzTW9kZT1uLlZBTFVFLHRoaXMucmVuZGVyKCksdGhpcyl9LGUucHJvdG90eXBlLl9nZXRZRXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3lCb3VuZHNNb2RlPT09bi5WQUxVRT90aGlzLl95RXh0ZW50Om51bGw9PXRoaXMuX3lTY2FsZT9bdm9pZCAwLHZvaWQgMF06W3RoaXMuX3lTY2FsZS5pbnZlcnQodGhpcy5fYm94Qm91bmRzLnRvcExlZnQueSksdGhpcy5feVNjYWxlLmludmVydCh0aGlzLl9ib3hCb3VuZHMuYm90dG9tUmlnaHQueSldfSxlLnByb3RvdHlwZS5fc2V0WUV4dGVudD1mdW5jdGlvbih0KXt0aGlzLl95RXh0ZW50PXR9LGUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0LnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyksbnVsbCE9dGhpcy5feFNjYWxlJiZ0aGlzLnhTY2FsZSgpLm9mZlVwZGF0ZSh0aGlzLl9hZGp1c3RCb3VuZHNDYWxsYmFjayksbnVsbCE9dGhpcy5feVNjYWxlJiZ0aGlzLnlTY2FsZSgpLm9mZlVwZGF0ZSh0aGlzLl9hZGp1c3RCb3VuZHNDYWxsYmFjayl9LGV9KShUbXQuQ29tcG9uZW50KTtlLlNlbGVjdGlvbkJveExheWVyPWl9KSkscmd0PWJlKChmdW5jdGlvbih0LGUpewovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt2YXIgZT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGUuX2RldGVjdGlvblJhZGl1cz0zLGUuX3Jlc2l6YWJsZT0hMSxlLl9tb3ZhYmxlPSExLGUuX2hhc0Nvcm5lcnM9ITAsZS5hZGRDbGFzcygiZHJhZy1ib3gtbGF5ZXIiKSxlLl9kcmFnSW50ZXJhY3Rpb249bmV3IG5ndC5EcmFnLGUuX3NldFVwQ2FsbGJhY2tzKCksZS5fZHJhZ0ludGVyYWN0aW9uLmF0dGFjaFRvKGUpLGUuX2RyYWdTdGFydENhbGxiYWNrcz1uZXcgU210LkNhbGxiYWNrU2V0LGUuX2RyYWdDYWxsYmFja3M9bmV3IFNtdC5DYWxsYmFja1NldCxlLl9kcmFnRW5kQ2FsbGJhY2tzPW5ldyBTbXQuQ2FsbGJhY2tTZXQsZX1yZXR1cm4gRGZ0Ll9fZXh0ZW5kcyhlLHQpLGUucHJvdG90eXBlLl9zZXRVcENhbGxiYWNrcz1mdW5jdGlvbigpe3ZhciB0LGUsbixpLHI9dGhpcyxvPTAsYT1mdW5jdGlvbihhKXt0PXIuX2dldFJlc2l6aW5nRWRnZXMoYSk7dmFyIHM9ci5ib3VuZHMoKSxsPXMudG9wTGVmdC54PD1hLngmJmEueDw9cy5ib3R0b21SaWdodC54JiZzLnRvcExlZnQueTw9YS55JiZhLnk8PXMuYm90dG9tUmlnaHQueTtyLmJveFZpc2libGUoKSYmKHQudG9wfHx0LmJvdHRvbXx8dC5sZWZ0fHx0LnJpZ2h0KT9vPTE6ci5ib3hWaXNpYmxlKCkmJnIubW92YWJsZSgpJiZsP289Mjoobz0wLHIuX3NldEJvdW5kcyh7dG9wTGVmdDphLGJvdHRvbVJpZ2h0OmF9KSxyLl94Qm91bmRzTW9kZT09PU5ndC5Qcm9wZXJ0eU1vZGUuVkFMVUUmJm51bGwhPXIueFNjYWxlKCkmJnIuX3NldFhFeHRlbnQoW3IueFNjYWxlKCkuaW52ZXJ0KGEueCksci54U2NhbGUoKS5pbnZlcnQoYS54KV0pLHIuX3lCb3VuZHNNb2RlPT09Tmd0LlByb3BlcnR5TW9kZS5WQUxVRSYmbnVsbCE9ci55U2NhbGUoKSYmci5fc2V0WUV4dGVudChbci55U2NhbGUoKS5pbnZlcnQoYS55KSxyLnlTY2FsZSgpLmludmVydChhLnkpXSksci5yZW5kZXIoKSksci5ib3hWaXNpYmxlKCEwKSxzPXIuYm91bmRzKCksZT17eDpzLnRvcExlZnQueCx5OnMudG9wTGVmdC55fSxuPXt4OnMuYm90dG9tUmlnaHQueCx5OnMuYm90dG9tUmlnaHQueX0saT1hLHIuX2RyYWdTdGFydENhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKHMpfSxzPWZ1bmN0aW9uKGEscyl7c3dpdGNoKG8pe2Nhc2UgMDpuLng9cy54LG4ueT1zLnk7YnJlYWs7Y2FzZSAxOnQuYm90dG9tP24ueT1zLnk6dC50b3AmJihlLnk9cy55KSx0LnJpZ2h0P24ueD1zLng6dC5sZWZ0JiYoZS54PXMueCk7YnJlYWs7Y2FzZSAyOnZhciBsPXMueC1pLngsYz1zLnktaS55O2UueCs9bCxlLnkrPWMsbi54Kz1sLG4ueSs9YyxpPXN9ci5fc2V0Qm91bmRzKHt0b3BMZWZ0OmUsYm90dG9tUmlnaHQ6bn0pLHIuX3hCb3VuZHNNb2RlPT09Tmd0LlByb3BlcnR5TW9kZS5WQUxVRSYmbnVsbCE9ci54U2NhbGUoKSYmci5fc2V0WEV4dGVudChbci54U2NhbGUoKS5pbnZlcnQoZS54KSxyLnhTY2FsZSgpLmludmVydChuLngpXSksci5feUJvdW5kc01vZGU9PT1OZ3QuUHJvcGVydHlNb2RlLlZBTFVFJiZudWxsIT1yLnlTY2FsZSgpJiZyLl9zZXRZRXh0ZW50KFtyLnlTY2FsZSgpLmludmVydChlLnkpLHIueVNjYWxlKCkuaW52ZXJ0KG4ueSldKSxyLnJlbmRlcigpLHIuX2RyYWdDYWxsYmFja3MuY2FsbENhbGxiYWNrcyhyLmJvdW5kcygpKX0sbD1mdW5jdGlvbih0LGUpezA9PT1vJiZ0Lng9PT1lLngmJnQueT09PWUueSYmci5ib3hWaXNpYmxlKCExKSxyLl9kcmFnRW5kQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3Moci5ib3VuZHMoKSl9O3RoaXMuX2RyYWdJbnRlcmFjdGlvbi5vbkRyYWdTdGFydChhKSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnKHMpLHRoaXMuX2RyYWdJbnRlcmFjdGlvbi5vbkRyYWdFbmQobCksdGhpcy5fZGlzY29ubmVjdEludGVyYWN0aW9uPWZ1bmN0aW9uKCl7ci5fZHJhZ0ludGVyYWN0aW9uLm9mZkRyYWdTdGFydChhKSxyLl9kcmFnSW50ZXJhY3Rpb24ub2ZmRHJhZyhzKSxyLl9kcmFnSW50ZXJhY3Rpb24ub2ZmRHJhZ0VuZChsKSxyLl9kcmFnSW50ZXJhY3Rpb24uZGV0YWNoKCl9fSxlLnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3QucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpO3ZhciBuPWZ1bmN0aW9uKCl7cmV0dXJuIGUuX2JveC5hcHBlbmQoImxpbmUiKS5zdHlsZXMoe29wYWNpdHk6MCxzdHJva2U6InBpbmsiLCJwb2ludGVyLWV2ZW50cyI6InZpc2libGVTdHJva2UifSl9O2lmKHRoaXMuX2RldGVjdGlvbkVkZ2VUPW4oKS5jbGFzc2VkKCJkcmFnLWVkZ2UtdGIiLCEwKSx0aGlzLl9kZXRlY3Rpb25FZGdlQj1uKCkuY2xhc3NlZCgiZHJhZy1lZGdlLXRiIiwhMCksdGhpcy5fZGV0ZWN0aW9uRWRnZUw9bigpLmNsYXNzZWQoImRyYWctZWRnZS1sciIsITApLHRoaXMuX2RldGVjdGlvbkVkZ2VSPW4oKS5jbGFzc2VkKCJkcmFnLWVkZ2UtbHIiLCEwKSx0aGlzLl9oYXNDb3JuZXJzKXt2YXIgaT1mdW5jdGlvbigpe3JldHVybiBlLl9ib3guYXBwZW5kKCJjaXJjbGUiKS5zdHlsZXMoe29wYWNpdHk6MCxmaWxsOiJwaW5rIiwicG9pbnRlci1ldmVudHMiOiJ2aXNpYmxlRmlsbCJ9KX07dGhpcy5fZGV0ZWN0aW9uQ29ybmVyVEw9aSgpLmNsYXNzZWQoImRyYWctY29ybmVyLXRsIiwhMCksdGhpcy5fZGV0ZWN0aW9uQ29ybmVyVFI9aSgpLmNsYXNzZWQoImRyYWctY29ybmVyLXRyIiwhMCksdGhpcy5fZGV0ZWN0aW9uQ29ybmVyQkw9aSgpLmNsYXNzZWQoImRyYWctY29ybmVyLWJsIiwhMCksdGhpcy5fZGV0ZWN0aW9uQ29ybmVyQlI9aSgpLmNsYXNzZWQoImRyYWctY29ybmVyLWJyIiwhMCl9fSxlLnByb3RvdHlwZS5fZ2V0UmVzaXppbmdFZGdlcz1mdW5jdGlvbih0KXt2YXIgZT17dG9wOiExLGJvdHRvbTohMSxsZWZ0OiExLHJpZ2h0OiExfTtpZighdGhpcy5yZXNpemFibGUoKSlyZXR1cm4gZTt2YXIgbj10aGlzLmJvdW5kcygpLGk9bi50b3BMZWZ0Lnkscj1uLmJvdHRvbVJpZ2h0Lnksbz1uLnRvcExlZnQueCxhPW4uYm90dG9tUmlnaHQueCxzPXRoaXMuX2RldGVjdGlvblJhZGl1cztyZXR1cm4gby1zPD10LngmJnQueDw9YStzJiYoZS50b3A9aS1zPD10LnkmJnQueTw9aStzLGUuYm90dG9tPXItczw9dC55JiZ0Lnk8PXIrcyksaS1zPD10LnkmJnQueTw9citzJiYoZS5sZWZ0PW8tczw9dC54JiZ0Lng8PW8rcyxlLnJpZ2h0PWEtczw9dC54JiZ0Lng8PWErcyksZX0sZS5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXtpZih0LnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHRoaXMpLHRoaXMuYm94VmlzaWJsZSgpKXt2YXIgZT10aGlzLmJvdW5kcygpLG49ZS50b3BMZWZ0LnksaT1lLmJvdHRvbVJpZ2h0Lnkscj1lLnRvcExlZnQueCxvPWUuYm90dG9tUmlnaHQueDt0aGlzLl9kZXRlY3Rpb25FZGdlVC5hdHRycyh7eDE6cix5MTpuLHgyOm8seTI6biwic3Ryb2tlLXdpZHRoIjoyKnRoaXMuX2RldGVjdGlvblJhZGl1c30pLHRoaXMuX2RldGVjdGlvbkVkZ2VCLmF0dHJzKHt4MTpyLHkxOmkseDI6byx5MjppLCJzdHJva2Utd2lkdGgiOjIqdGhpcy5fZGV0ZWN0aW9uUmFkaXVzfSksdGhpcy5fZGV0ZWN0aW9uRWRnZUwuYXR0cnMoe3gxOnIseTE6bix4MjpyLHkyOmksInN0cm9rZS13aWR0aCI6Mip0aGlzLl9kZXRlY3Rpb25SYWRpdXN9KSx0aGlzLl9kZXRlY3Rpb25FZGdlUi5hdHRycyh7eDE6byx5MTpuLHgyOm8seTI6aSwic3Ryb2tlLXdpZHRoIjoyKnRoaXMuX2RldGVjdGlvblJhZGl1c30pLHRoaXMuX2hhc0Nvcm5lcnMmJih0aGlzLl9kZXRlY3Rpb25Db3JuZXJUTC5hdHRycyh7Y3g6cixjeTpuLHI6dGhpcy5fZGV0ZWN0aW9uUmFkaXVzfSksdGhpcy5fZGV0ZWN0aW9uQ29ybmVyVFIuYXR0cnMoe2N4Om8sY3k6bixyOnRoaXMuX2RldGVjdGlvblJhZGl1c30pLHRoaXMuX2RldGVjdGlvbkNvcm5lckJMLmF0dHJzKHtjeDpyLGN5Omkscjp0aGlzLl9kZXRlY3Rpb25SYWRpdXN9KSx0aGlzLl9kZXRlY3Rpb25Db3JuZXJCUi5hdHRycyh7Y3g6byxjeTppLHI6dGhpcy5fZGV0ZWN0aW9uUmFkaXVzfSkpfXJldHVybiB0aGlzfSxlLnByb3RvdHlwZS5kZXRlY3Rpb25SYWRpdXM9ZnVuY3Rpb24odCl7aWYobnVsbD09dClyZXR1cm4gdGhpcy5fZGV0ZWN0aW9uUmFkaXVzO2lmKHQ8MCl0aHJvdyBuZXcgRXJyb3IoImRldGVjdGlvbiByYWRpdXMgY2Fubm90IGJlIG5lZ2F0aXZlLiIpO3JldHVybiB0aGlzLl9kZXRlY3Rpb25SYWRpdXM9dCx0aGlzLnJlbmRlcigpLHRoaXN9LGUucHJvdG90eXBlLnJlc2l6YWJsZT1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9yZXNpemFibGU6KHRoaXMuX3Jlc2l6YWJsZT10LHRoaXMuX3NldFJlc2l6YWJsZUNsYXNzZXModCksdGhpcyl9LGUucHJvdG90eXBlLl9zZXRSZXNpemFibGVDbGFzc2VzPWZ1bmN0aW9uKHQpe3QmJnRoaXMuZW5hYmxlZCgpPyh0aGlzLmFkZENsYXNzKCJ4LXJlc2l6YWJsZSIpLHRoaXMuYWRkQ2xhc3MoInktcmVzaXphYmxlIikpOih0aGlzLnJlbW92ZUNsYXNzKCJ4LXJlc2l6YWJsZSIpLHRoaXMucmVtb3ZlQ2xhc3MoInktcmVzaXphYmxlIikpfSxlLnByb3RvdHlwZS5tb3ZhYmxlPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX21vdmFibGU6KHRoaXMuX21vdmFibGU9dCx0aGlzLl9zZXRNb3ZhYmxlQ2xhc3MoKSx0aGlzKX0sZS5wcm90b3R5cGUuX3NldE1vdmFibGVDbGFzcz1mdW5jdGlvbigpe3RoaXMubW92YWJsZSgpJiZ0aGlzLmVuYWJsZWQoKT90aGlzLmFkZENsYXNzKCJtb3ZhYmxlIik6dGhpcy5yZW1vdmVDbGFzcygibW92YWJsZSIpfSxlLnByb3RvdHlwZS5vbkRyYWdTdGFydD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmFkZCh0KSx0aGlzfSxlLnByb3RvdHlwZS5vZmZEcmFnU3RhcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2RyYWdTdGFydENhbGxiYWNrcy5kZWxldGUodCksdGhpc30sZS5wcm90b3R5cGUub25EcmFnPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9kcmFnQ2FsbGJhY2tzLmFkZCh0KSx0aGlzfSxlLnByb3RvdHlwZS5vZmZEcmFnPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9kcmFnQ2FsbGJhY2tzLmRlbGV0ZSh0KSx0aGlzfSxlLnByb3RvdHlwZS5vbkRyYWdFbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuYWRkKHQpLHRoaXN9LGUucHJvdG90eXBlLm9mZkRyYWdFbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuZGVsZXRlKHQpLHRoaXN9LGUucHJvdG90eXBlLmRyYWdJbnRlcmFjdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kcmFnSW50ZXJhY3Rpb259LGUucHJvdG90eXBlLmVuYWJsZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5fZHJhZ0ludGVyYWN0aW9uLmVuYWJsZWQoKToodGhpcy5fZHJhZ0ludGVyYWN0aW9uLmVuYWJsZWQodCksdGhpcy5fc2V0UmVzaXphYmxlQ2xhc3Nlcyh0aGlzLnJlc2l6YWJsZSgpKSx0aGlzLl9zZXRNb3ZhYmxlQ2xhc3MoKSx0aGlzKX0sZS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dC5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuX2RyYWdTdGFydENhbGxiYWNrcy5mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gZS5fZHJhZ0NhbGxiYWNrcy5kZWxldGUodCl9KSksdGhpcy5fZHJhZ0NhbGxiYWNrcy5mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gZS5fZHJhZ0NhbGxiYWNrcy5kZWxldGUodCl9KSksdGhpcy5fZHJhZ0VuZENhbGxiYWNrcy5mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gZS5fZHJhZ0VuZENhbGxiYWNrcy5kZWxldGUodCl9KSksdGhpcy5fZGlzY29ubmVjdEludGVyYWN0aW9uKCl9LGUucHJvdG90eXBlLmRldGFjaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZXNldFN0YXRlKCksdGhpcy5fZHJhZ0ludGVyYWN0aW9uLmRldGFjaCgpLHQucHJvdG90eXBlLmRldGFjaC5jYWxsKHRoaXMpLHRoaXN9LGUucHJvdG90eXBlLmFuY2hvcj1mdW5jdGlvbihlKXtyZXR1cm4gZT1OZnQuY29lcmNlRXh0ZXJuYWxEMyhlKSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24uYXR0YWNoVG8odGhpcyksdC5wcm90b3R5cGUuYW5jaG9yLmNhbGwodGhpcyxlKSx0aGlzfSxlLnByb3RvdHlwZS5fcmVzZXRTdGF0ZT1mdW5jdGlvbigpe3RoaXMuYm91bmRzKHt0b3BMZWZ0Ont4OjAseTowfSxib3R0b21SaWdodDp7eDowLHk6MH19KX0sZX0pKGlndC5TZWxlY3Rpb25Cb3hMYXllcik7ZS5EcmFnQm94TGF5ZXI9bn0pKSxvZ3Q9YmUoKGZ1bmN0aW9uKHQsZSl7dmFyIG47Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSwoZnVuY3Rpb24odCl7dFt0LlZBTFVFPTBdPSJWQUxVRSIsdFt0LlBJWEVMPTFdPSJQSVhFTCJ9KShufHwobj17fSkpO3ZhciBpPShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGkpe3ZhciByPXQuY2FsbCh0aGlzKXx8dGhpcztpZihyLl9tb2RlPW4uVkFMVUUsaSE9PWUuT1JJRU5UQVRJT05fVkVSVElDQUwmJmkhPT1lLk9SSUVOVEFUSU9OX0hPUklaT05UQUwpdGhyb3cgbmV3IEVycm9yKGkrIiBpcyBub3QgYSB2YWxpZCBvcmllbnRhdGlvbiBmb3IgR3VpZGVMaW5lTGF5ZXIiKTtyZXR1cm4gci5fb3JpZW50YXRpb249aSxyLl9vdmVyZmxvd0hpZGRlbj0hMCxyLmFkZENsYXNzKCJndWlkZS1saW5lLWxheWVyIiksci5faXNWZXJ0aWNhbCgpP3IuYWRkQ2xhc3MoInZlcnRpY2FsIik6ci5hZGRDbGFzcygiaG9yaXpvbnRhbCIpLHIuX3NjYWxlVXBkYXRlQ2FsbGJhY2s9ZnVuY3Rpb24oKXtyLl9zeW5jUGl4ZWxQb3NpdGlvbkFuZFZhbHVlKCksci5yZW5kZXIoKX0scn1yZXR1cm4gRGZ0Ll9fZXh0ZW5kcyhlLHQpLGUucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe3QucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLHRoaXMuX2d1aWRlTGluZT10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKCJndWlkZS1saW5lIiwhMCl9LGUucHJvdG90eXBlLl9zaXplRnJvbU9mZmVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJue3dpZHRoOnQsaGVpZ2h0OmV9fSxlLnByb3RvdHlwZS5faXNWZXJ0aWNhbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9vcmllbnRhdGlvbj09PWUuT1JJRU5UQVRJT05fVkVSVElDQUx9LGUucHJvdG90eXBlLmZpeGVkV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sZS5wcm90b3R5cGUuZml4ZWRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sZS5wcm90b3R5cGUuY29tcHV0ZUxheW91dD1mdW5jdGlvbihlLG4saSl7cmV0dXJuIHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQuY2FsbCh0aGlzLGUsbixpKSxudWxsIT10aGlzLnNjYWxlKCkmJih0aGlzLl9pc1ZlcnRpY2FsKCk/dGhpcy5zY2FsZSgpLnJhbmdlKFswLHRoaXMud2lkdGgoKV0pOnRoaXMuc2NhbGUoKS5yYW5nZShbdGhpcy5oZWlnaHQoKSwwXSkpLHRoaXN9LGUucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7cmV0dXJuIHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5LmNhbGwodGhpcyksdGhpcy5fc3luY1BpeGVsUG9zaXRpb25BbmRWYWx1ZSgpLHRoaXMuX2d1aWRlTGluZS5hdHRycyh7eDE6dGhpcy5faXNWZXJ0aWNhbCgpP3RoaXMucGl4ZWxQb3NpdGlvbigpOjAseTE6dGhpcy5faXNWZXJ0aWNhbCgpPzA6dGhpcy5waXhlbFBvc2l0aW9uKCkseDI6dGhpcy5faXNWZXJ0aWNhbCgpP3RoaXMucGl4ZWxQb3NpdGlvbigpOnRoaXMud2lkdGgoKSx5Mjp0aGlzLl9pc1ZlcnRpY2FsKCk/dGhpcy5oZWlnaHQoKTp0aGlzLnBpeGVsUG9zaXRpb24oKX0pLHRoaXN9LGUucHJvdG90eXBlLl9zeW5jUGl4ZWxQb3NpdGlvbkFuZFZhbHVlPWZ1bmN0aW9uKCl7bnVsbCE9dGhpcy5zY2FsZSgpJiYodGhpcy5fbW9kZT09PW4uVkFMVUUmJm51bGwhPXRoaXMudmFsdWUoKT90aGlzLl9waXhlbFBvc2l0aW9uPXRoaXMuc2NhbGUoKS5zY2FsZSh0aGlzLnZhbHVlKCkpOnRoaXMuX21vZGU9PT1uLlBJWEVMJiZudWxsIT10aGlzLnBpeGVsUG9zaXRpb24oKSYmKHRoaXMuX3ZhbHVlPXRoaXMuc2NhbGUoKS5pbnZlcnQodGhpcy5waXhlbFBvc2l0aW9uKCkpKSl9LGUucHJvdG90eXBlLl9zZXRQaXhlbFBvc2l0aW9uV2l0aG91dENoYW5naW5nTW9kZT1mdW5jdGlvbih0KXt0aGlzLl9waXhlbFBvc2l0aW9uPXQsbnVsbCE9dGhpcy5zY2FsZSgpJiYodGhpcy5fdmFsdWU9dGhpcy5zY2FsZSgpLmludmVydCh0aGlzLnBpeGVsUG9zaXRpb24oKSkpLHRoaXMucmVuZGVyKCl9LGUucHJvdG90eXBlLnNjYWxlPWZ1bmN0aW9uKHQpe2lmKG51bGw9PXQpcmV0dXJuIHRoaXMuX3NjYWxlO3ZhciBlPXRoaXMuX3NjYWxlO3JldHVybiBudWxsIT1lJiZlLm9mZlVwZGF0ZSh0aGlzLl9zY2FsZVVwZGF0ZUNhbGxiYWNrKSx0aGlzLl9zY2FsZT10LHRoaXMuX3NjYWxlLm9uVXBkYXRlKHRoaXMuX3NjYWxlVXBkYXRlQ2FsbGJhY2spLHRoaXMuX3N5bmNQaXhlbFBvc2l0aW9uQW5kVmFsdWUoKSx0aGlzLnJlZHJhdygpLHRoaXN9LGUucHJvdG90eXBlLnZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX3ZhbHVlOih0aGlzLl92YWx1ZT10LHRoaXMuX21vZGU9bi5WQUxVRSx0aGlzLl9zeW5jUGl4ZWxQb3NpdGlvbkFuZFZhbHVlKCksdGhpcy5yZW5kZXIoKSx0aGlzKX0sZS5wcm90b3R5cGUucGl4ZWxQb3NpdGlvbj1mdW5jdGlvbih0KXtpZihudWxsPT10KXJldHVybiB0aGlzLl9waXhlbFBvc2l0aW9uO2lmKCFTbXQuTWF0aC5pc1ZhbGlkTnVtYmVyKHQpKXRocm93IG5ldyBFcnJvcigicGl4ZWxQb3NpdGlvbiBtdXN0IGJlIGEgZmluaXRlIG51bWJlciIpO3JldHVybiB0aGlzLl9waXhlbFBvc2l0aW9uPXQsdGhpcy5fbW9kZT1uLlBJWEVMLHRoaXMuX3N5bmNQaXhlbFBvc2l0aW9uQW5kVmFsdWUoKSx0aGlzLnJlbmRlcigpLHRoaXN9LGUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0LnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyksbnVsbCE9dGhpcy5zY2FsZSgpJiZ0aGlzLnNjYWxlKCkub2ZmVXBkYXRlKHRoaXMuX3NjYWxlVXBkYXRlQ2FsbGJhY2spfSxlLk9SSUVOVEFUSU9OX1ZFUlRJQ0FMPSJ2ZXJ0aWNhbCIsZS5PUklFTlRBVElPTl9IT1JJWk9OVEFMPSJob3Jpem9udGFsIixlfSkoVG10LkNvbXBvbmVudCk7ZS5HdWlkZUxpbmVMYXllcj1pfSkpLGFndD1iZSgoZnVuY3Rpb24odCxlKXsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3ZhciBuPXQuY2FsbCh0aGlzLGUpfHx0aGlzO24uX2RldGVjdGlvblJhZGl1cz0zLG4uX2VuYWJsZWQ9ITAsbi5hZGRDbGFzcygiZHJhZy1saW5lLWxheWVyIiksbi5hZGRDbGFzcygiZW5hYmxlZCIpLG4uX2RyYWdJbnRlcmFjdGlvbj1uZXcgbmd0LkRyYWcsbi5fZHJhZ0ludGVyYWN0aW9uLmF0dGFjaFRvKG4pO3ZhciBpPSExLHI9ZnVuY3Rpb24odCl7KGZ1bmN0aW9uKHQpe3JldHVybiBuLl9pc1ZlcnRpY2FsKCkmJm4ucGl4ZWxQb3NpdGlvbigpLW4uZGV0ZWN0aW9uUmFkaXVzKCk8PXQueCYmdC54PD1uLnBpeGVsUG9zaXRpb24oKStuLmRldGVjdGlvblJhZGl1cygpfHwhbi5faXNWZXJ0aWNhbCgpJiZuLnBpeGVsUG9zaXRpb24oKS1uLmRldGVjdGlvblJhZGl1cygpPD10LnkmJnQueTw9bi5waXhlbFBvc2l0aW9uKCkrbi5kZXRlY3Rpb25SYWRpdXMoKX0pKHQpJiYoaT0hMCxuLl9kcmFnU3RhcnRDYWxsYmFja3MuY2FsbENhbGxiYWNrcyhuKSl9O24uX2RyYWdJbnRlcmFjdGlvbi5vbkRyYWdTdGFydChyKTt2YXIgbz1mdW5jdGlvbih0LGUpe2kmJihuLl9zZXRQaXhlbFBvc2l0aW9uV2l0aG91dENoYW5naW5nTW9kZShuLl9pc1ZlcnRpY2FsKCk/ZS54OmUueSksbi5fZHJhZ0NhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKG4pKX07bi5fZHJhZ0ludGVyYWN0aW9uLm9uRHJhZyhvKTt2YXIgYT1mdW5jdGlvbih0LGUpe2kmJihpPSExLG4uX2RyYWdFbmRDYWxsYmFja3MuY2FsbENhbGxiYWNrcyhuKSl9O3JldHVybiBuLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnRW5kKGEpLG4uX2Rpc2Nvbm5lY3RJbnRlcmFjdGlvbj1mdW5jdGlvbigpe24uX2RyYWdJbnRlcmFjdGlvbi5vZmZEcmFnU3RhcnQociksbi5fZHJhZ0ludGVyYWN0aW9uLm9mZkRyYWcobyksbi5fZHJhZ0ludGVyYWN0aW9uLm9mZkRyYWdFbmQoYSksbi5fZHJhZ0ludGVyYWN0aW9uLmRldGFjaCgpfSxuLl9kcmFnU3RhcnRDYWxsYmFja3M9bmV3IFNtdC5DYWxsYmFja1NldCxuLl9kcmFnQ2FsbGJhY2tzPW5ldyBTbXQuQ2FsbGJhY2tTZXQsbi5fZHJhZ0VuZENhbGxiYWNrcz1uZXcgU210LkNhbGxiYWNrU2V0LG59cmV0dXJuIERmdC5fX2V4dGVuZHMoZSx0KSxlLnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXt0LnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl9kZXRlY3Rpb25FZGdlPXRoaXMuY29udGVudCgpLmFwcGVuZCgibGluZSIpLnN0eWxlcyh7b3BhY2l0eTowLHN0cm9rZToicGluayIsInBvaW50ZXItZXZlbnRzIjoidmlzaWJsZVN0cm9rZSJ9KS5jbGFzc2VkKCJkcmFnLWVkZ2UiLCEwKX0sZS5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXtyZXR1cm4gdC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHkuY2FsbCh0aGlzKSx0aGlzLl9kZXRlY3Rpb25FZGdlLmF0dHJzKHt4MTp0aGlzLl9pc1ZlcnRpY2FsKCk/dGhpcy5waXhlbFBvc2l0aW9uKCk6MCx5MTp0aGlzLl9pc1ZlcnRpY2FsKCk/MDp0aGlzLnBpeGVsUG9zaXRpb24oKSx4Mjp0aGlzLl9pc1ZlcnRpY2FsKCk/dGhpcy5waXhlbFBvc2l0aW9uKCk6dGhpcy53aWR0aCgpLHkyOnRoaXMuX2lzVmVydGljYWwoKT90aGlzLmhlaWdodCgpOnRoaXMucGl4ZWxQb3NpdGlvbigpLCJzdHJva2Utd2lkdGgiOjIqdGhpcy5fZGV0ZWN0aW9uUmFkaXVzfSksdGhpc30sZS5wcm90b3R5cGUuZGV0ZWN0aW9uUmFkaXVzPWZ1bmN0aW9uKHQpe2lmKG51bGw9PXQpcmV0dXJuIHRoaXMuX2RldGVjdGlvblJhZGl1cztpZih0PDApdGhyb3cgbmV3IEVycm9yKCJkZXRlY3Rpb24gcmFkaXVzIGNhbm5vdCBiZSBuZWdhdGl2ZS4iKTtyZXR1cm4gdGhpcy5fZGV0ZWN0aW9uUmFkaXVzPXQsdGhpcy5yZW5kZXIoKSx0aGlzfSxlLnByb3RvdHlwZS5lbmFibGVkPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX2VuYWJsZWQ6KHRoaXMuX2VuYWJsZWQ9dCx0P3RoaXMuYWRkQ2xhc3MoImVuYWJsZWQiKTp0aGlzLnJlbW92ZUNsYXNzKCJlbmFibGVkIiksdGhpcy5fZHJhZ0ludGVyYWN0aW9uLmVuYWJsZWQodCksdGhpcyl9LGUucHJvdG90eXBlLm9uRHJhZ1N0YXJ0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9kcmFnU3RhcnRDYWxsYmFja3MuYWRkKHQpLHRoaXN9LGUucHJvdG90eXBlLm9mZkRyYWdTdGFydD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmRlbGV0ZSh0KSx0aGlzfSxlLnByb3RvdHlwZS5vbkRyYWc9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2RyYWdDYWxsYmFja3MuYWRkKHQpLHRoaXN9LGUucHJvdG90eXBlLm9mZkRyYWc9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2RyYWdDYWxsYmFja3MuZGVsZXRlKHQpLHRoaXN9LGUucHJvdG90eXBlLm9uRHJhZ0VuZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZHJhZ0VuZENhbGxiYWNrcy5hZGQodCksdGhpc30sZS5wcm90b3R5cGUub2ZmRHJhZ0VuZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZHJhZ0VuZENhbGxiYWNrcy5kZWxldGUodCksdGhpc30sZS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dC5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuX2RyYWdTdGFydENhbGxiYWNrcy5mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gZS5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmRlbGV0ZSh0KX0pKSx0aGlzLl9kcmFnQ2FsbGJhY2tzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3JldHVybiBlLl9kcmFnQ2FsbGJhY2tzLmRlbGV0ZSh0KX0pKSx0aGlzLl9kcmFnRW5kQ2FsbGJhY2tzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3JldHVybiBlLl9kcmFnRW5kQ2FsbGJhY2tzLmRlbGV0ZSh0KX0pKSx0aGlzLl9kaXNjb25uZWN0SW50ZXJhY3Rpb24oKX0sZX0pKG9ndC5HdWlkZUxpbmVMYXllcik7ZS5EcmFnTGluZUxheWVyPW59KSksc2d0PWJlKChmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIG4odCxlLG4pe3ZhciBpPXt9O2lmKHZvaWQgMCE9PW4pZm9yKHZhciByPTA7cjxuLmxlbmd0aDtyKyspaVtuW3JdXT1uW3ItMV07cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciByLG89dC5zY2FsZShuKTtpZighZSlyZXR1cm4gbzt2YXIgYT12b2lkIDA9PT1pW25dP3ZvaWQgMDp0LnNjYWxlKGlbbl0pO3JldHVybiB2b2lkIDAhPT1hJiYocj1hKyhvLWEpLzIpLHJ9fQovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGk9KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgaT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkuYWRkQ2xhc3MoImdyaWRsaW5lcyIpLGkuX3hTY2FsZT1lLGkuX3lTY2FsZT1uLGkuX3JlbmRlckNhbGxiYWNrPWZ1bmN0aW9uKHQpe3JldHVybiBpLnJlbmRlcigpfSxpLl94U2NhbGUmJmkuX3hTY2FsZS5vblVwZGF0ZShpLl9yZW5kZXJDYWxsYmFjayksaS5feVNjYWxlJiZpLl95U2NhbGUub25VcGRhdGUoaS5fcmVuZGVyQ2FsbGJhY2spLGl9cmV0dXJuIERmdC5fX2V4dGVuZHMoZSx0KSxlLnByb3RvdHlwZS5iZXR3ZWVuWD1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dD90aGlzLl9iZXR3ZWVuWDoodCE9PXRoaXMuX2JldHdlZW5YJiYodGhpcy5fYmV0d2Vlblg9dCx0aGlzLnJlbmRlcigpKSx0aGlzKX0sZS5wcm90b3R5cGUuYmV0d2Vlblk9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQ/dGhpcy5fYmV0d2Vlblk6KHQhPT10aGlzLl9iZXR3ZWVuWSYmKHRoaXMuX2JldHdlZW5ZPXQsdGhpcy5yZW5kZXIoKSksdGhpcyl9LGUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtyZXR1cm4gdC5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuX3hTY2FsZSYmdGhpcy5feFNjYWxlLm9mZlVwZGF0ZSh0aGlzLl9yZW5kZXJDYWxsYmFjayksdGhpcy5feVNjYWxlJiZ0aGlzLl95U2NhbGUub2ZmVXBkYXRlKHRoaXMuX3JlbmRlckNhbGxiYWNrKSx0aGlzfSxlLnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXt0LnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl94TGluZXNDb250YWluZXI9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIikuY2xhc3NlZCgieC1ncmlkbGluZXMiLCEwKSx0aGlzLl95TGluZXNDb250YWluZXI9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIikuY2xhc3NlZCgieS1ncmlkbGluZXMiLCEwKX0sZS5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXtyZXR1cm4gdC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHkuY2FsbCh0aGlzKSx0aGlzLl9yZWRyYXdYTGluZXMoKSx0aGlzLl9yZWRyYXdZTGluZXMoKSx0aGlzfSxlLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0PWZ1bmN0aW9uKGUsbixpKXtyZXR1cm4gdC5wcm90b3R5cGUuY29tcHV0ZUxheW91dC5jYWxsKHRoaXMsZSxuLGkpLG51bGwhPXRoaXMuX3hTY2FsZSYmdGhpcy5feFNjYWxlLnJhbmdlKFswLHRoaXMud2lkdGgoKV0pLG51bGwhPXRoaXMuX3lTY2FsZSYmdGhpcy5feVNjYWxlLnJhbmdlKFt0aGlzLmhlaWdodCgpLDBdKSx0aGlzfSxlLnByb3RvdHlwZS5fcmVkcmF3WExpbmVzPWZ1bmN0aW9uKCl7aWYodGhpcy5feFNjYWxlKXt2YXIgdD10aGlzLmJldHdlZW5YKCksZT10aGlzLl94U2NhbGUudGlja3MoKS5zbGljZSh0PzE6MCksaT10aGlzLl94TGluZXNDb250YWluZXIuc2VsZWN0QWxsKCJsaW5lIikuZGF0YShlKTtpLmVudGVyKCkuYXBwZW5kKCJsaW5lIikubWVyZ2UoaSkuYXR0cigieDEiLG4odGhpcy5feFNjYWxlLHQsdGhpcy5feFNjYWxlLnRpY2tzKCkpKS5hdHRyKCJ5MSIsMCkuYXR0cigieDIiLG4odGhpcy5feFNjYWxlLHQsdGhpcy5feFNjYWxlLnRpY2tzKCkpKS5hdHRyKCJ5MiIsdGhpcy5oZWlnaHQoKSkuY2xhc3NlZCgiYmV0d2VlbmxpbmUiLHQpLmNsYXNzZWQoInplcm9saW5lIiwoZnVuY3Rpb24odCl7cmV0dXJuIDA9PT10fSkpLGkuZXhpdCgpLnJlbW92ZSgpfX0sZS5wcm90b3R5cGUuX3JlZHJhd1lMaW5lcz1mdW5jdGlvbigpe2lmKHRoaXMuX3lTY2FsZSl7dmFyIHQ9dGhpcy5iZXR3ZWVuWSgpLGU9dGhpcy5feVNjYWxlLnRpY2tzKCkuc2xpY2UodD8xOjApLGk9dGhpcy5feUxpbmVzQ29udGFpbmVyLnNlbGVjdEFsbCgibGluZSIpLmRhdGEoZSk7aS5lbnRlcigpLmFwcGVuZCgibGluZSIpLm1lcmdlKGkpLmF0dHIoIngxIiwwKS5hdHRyKCJ5MSIsbih0aGlzLl95U2NhbGUsdCx0aGlzLl95U2NhbGUudGlja3MoKSkpLmF0dHIoIngyIix0aGlzLndpZHRoKCkpLmF0dHIoInkyIixuKHRoaXMuX3lTY2FsZSx0LHRoaXMuX3lTY2FsZS50aWNrcygpKSkuY2xhc3NlZCgiYmV0d2VlbmxpbmUiLHQpLmNsYXNzZWQoInplcm9saW5lIiwoZnVuY3Rpb24odCl7cmV0dXJuIDA9PT10fSkpLGkuZXhpdCgpLnJlbW92ZSgpfX0sZX0pKFRtdC5Db21wb25lbnQpO2UuR3JpZGxpbmVzPWl9KSksbGd0PWJlKChmdW5jdGlvbih0LGUpewovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt2YXIgZT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGUuX2RldGFjaENhbGxiYWNrPWZ1bmN0aW9uKHQpe3JldHVybiBlLnJlbW92ZSh0KX0sZX1yZXR1cm4gRGZ0Ll9fZXh0ZW5kcyhlLHQpLGUucHJvdG90eXBlLmFuY2hvcj1mdW5jdGlvbihlKXt2YXIgbj10aGlzO3JldHVybiBlPU5mdC5jb2VyY2VFeHRlcm5hbEQzKGUpLHQucHJvdG90eXBlLmFuY2hvci5jYWxsKHRoaXMsZSksdGhpcy5fZm9yRWFjaCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuYW5jaG9yKG4uZWxlbWVudCgpKX0pKSx0aGlzfSxlLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZm9yRWFjaCgoZnVuY3Rpb24odCl7cmV0dXJuIHQucmVuZGVyKCl9KSksdGhpc30sZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcigiaGFzKCkgaXMgbm90IGltcGxlbWVudGVkIG9uIENvbXBvbmVudENvbnRhaW5lciIpfSxlLnByb3RvdHlwZS5fYWRvcHRBbmRBbmNob3I9ZnVuY3Rpb24odCl7dC5wYXJlbnQodGhpcyksdC5vbkRldGFjaCh0aGlzLl9kZXRhY2hDYWxsYmFjayksdGhpcy5faXNBbmNob3JlZCYmdC5hbmNob3IodGhpcy5lbGVtZW50KCkpfSxlLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaGFzKHQpJiYodC5vZmZEZXRhY2godGhpcy5fZGV0YWNoQ2FsbGJhY2spLHRoaXMuX3JlbW92ZSh0KSx0LmRldGFjaCgpLHRoaXMucmVkcmF3KCkpLHRoaXN9LGUucHJvdG90eXBlLl9yZW1vdmU9ZnVuY3Rpb24odCl7cmV0dXJuITF9LGUucHJvdG90eXBlLl9mb3JFYWNoPWZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcigiX2ZvckVhY2goKSBpcyBub3QgaW1wbGVtZW50ZWQgb24gQ29tcG9uZW50Q29udGFpbmVyIil9LGUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0LnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyksdGhpcy5fZm9yRWFjaCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuZGVzdHJveSgpfSkpfSxlLnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGU9ZnVuY3Rpb24oKXt0aGlzLl9mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gdC5pbnZhbGlkYXRlQ2FjaGUoKX0pKX0sZX0pKFRtdC5Db21wb25lbnQpO2UuQ29tcG9uZW50Q29udGFpbmVyPW59KSksY2d0PWJlKChmdW5jdGlvbih0LGUpewovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dm9pZCAwPT09ZSYmKGU9W10pO3ZhciBuPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5fY29tcG9uZW50cz1bXSxuLmFkZENsYXNzKCJjb21wb25lbnQtZ3JvdXAiKSxlLmZvckVhY2goKGZ1bmN0aW9uKHQpe3JldHVybiBuLmFwcGVuZCh0KX0pKSxufXJldHVybiBEZnQuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUuX2ZvckVhY2g9ZnVuY3Rpb24odCl7dGhpcy5jb21wb25lbnRzKCkuZm9yRWFjaCh0KX0sZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jb21wb25lbnRzLmluZGV4T2YodCk+PTB9LGUucHJvdG90eXBlLnJlcXVlc3RlZFNwYWNlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fY29tcG9uZW50cy5tYXAoKGZ1bmN0aW9uKG4pe3JldHVybiBuLnJlcXVlc3RlZFNwYWNlKHQsZSl9KSk7cmV0dXJue21pbldpZHRoOlNtdC5NYXRoLm1heChuLChmdW5jdGlvbih0KXtyZXR1cm4gdC5taW5XaWR0aH0pLDApLG1pbkhlaWdodDpTbXQuTWF0aC5tYXgobiwoZnVuY3Rpb24odCl7cmV0dXJuIHQubWluSGVpZ2h0fSksMCl9fSxlLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0PWZ1bmN0aW9uKGUsbixpKXt2YXIgcj10aGlzO3JldHVybiB0LnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcyxlLG4saSksdGhpcy5fZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5jb21wdXRlTGF5b3V0KHt4OjAseTowfSxyLndpZHRoKCksci5oZWlnaHQoKSl9KSksdGhpc30sZS5wcm90b3R5cGUuX3NpemVGcm9tT2ZmZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm57d2lkdGg6dCxoZWlnaHQ6ZX19LGUucHJvdG90eXBlLmZpeGVkV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29tcG9uZW50cy5ldmVyeSgoZnVuY3Rpb24odCl7cmV0dXJuIHQuZml4ZWRXaWR0aCgpfSkpfSxlLnByb3RvdHlwZS5maXhlZEhlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb21wb25lbnRzLmV2ZXJ5KChmdW5jdGlvbih0KXtyZXR1cm4gdC5maXhlZEhlaWdodCgpfSkpfSxlLnByb3RvdHlwZS5jb21wb25lbnRzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbXBvbmVudHMuc2xpY2UoKX0sZS5wcm90b3R5cGUuYXBwZW5kPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10fHx0aGlzLmhhcyh0KXx8KHQuZGV0YWNoKCksdGhpcy5fY29tcG9uZW50cy5wdXNoKHQpLHRoaXMuX2Fkb3B0QW5kQW5jaG9yKHQpLHRoaXMucmVkcmF3KCkpLHRoaXN9LGUucHJvdG90eXBlLl9yZW1vdmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fY29tcG9uZW50cy5pbmRleE9mKHQpO3JldHVybiBlPj0wJiYodGhpcy5fY29tcG9uZW50cy5zcGxpY2UoZSwxKSwhMCl9LGV9KShsZ3QuQ29tcG9uZW50Q29udGFpbmVyKTtlLkdyb3VwPW59KSksdWd0PWJlKChmdW5jdGlvbih0LGUpewovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dmFyIG49dC5jYWxsKHRoaXMpfHx0aGlzO2lmKG4uX3RleHRQYWRkaW5nPTUsbnVsbD09ZSl0aHJvdyBuZXcgRXJyb3IoIkludGVycG9sYXRlZENvbG9yTGVnZW5kIHJlcXVpcmVzIGEgaW50ZXJwb2xhdGVkQ29sb3JTY2FsZSIpO3JldHVybiBuLl9zY2FsZT1lLG4uX3JlZHJhd0NhbGxiYWNrPWZ1bmN0aW9uKHQpe3JldHVybiBuLnJlZHJhdygpfSxuLl9zY2FsZS5vblVwZGF0ZShuLl9yZWRyYXdDYWxsYmFjayksbi5fZm9ybWF0dGVyPUNtdC5nZW5lcmFsKCksbi5fb3JpZW50YXRpb249Imhvcml6b250YWwiLG4uX2V4cGFuZHM9ITEsbi5hZGRDbGFzcygibGVnZW5kIiksbi5hZGRDbGFzcygiaW50ZXJwb2xhdGVkLWNvbG9yLWxlZ2VuZCIpLG59cmV0dXJuIERmdC5fX2V4dGVuZHMoZSx0KSxlLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dC5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuX3NjYWxlLm9mZlVwZGF0ZSh0aGlzLl9yZWRyYXdDYWxsYmFjayl9LGUucHJvdG90eXBlLmZvcm1hdHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dD90aGlzLl9mb3JtYXR0ZXI6KHRoaXMuX2Zvcm1hdHRlcj10LHRoaXMucmVkcmF3KCksdGhpcyl9LGUucHJvdG90eXBlLmV4cGFuZHM9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5fZXhwYW5kczoodGhpcy5fZXhwYW5kcz10LHRoaXMucmVkcmF3KCksdGhpcyl9LGUuX2Vuc3VyZU9yaWVudGF0aW9uPWZ1bmN0aW9uKHQpe2lmKCJob3Jpem9udGFsIj09PSh0PXQudG9Mb3dlckNhc2UoKSl8fCJsZWZ0Ij09PXR8fCJyaWdodCI9PT10KXJldHVybiB0O3Rocm93IG5ldyBFcnJvcignIicrdCsnIiBpcyBub3QgYSB2YWxpZCBvcmllbnRhdGlvbiBmb3IgSW50ZXJwb2xhdGVkQ29sb3JMZWdlbmQnKX0sZS5wcm90b3R5cGUub3JpZW50YXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5fb3JpZW50YXRpb246KHRoaXMuX29yaWVudGF0aW9uPWUuX2Vuc3VyZU9yaWVudGF0aW9uKHQpLHRoaXMucmVkcmF3KCksdGhpcyl9LGUucHJvdG90eXBlLmZpeGVkV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5leHBhbmRzKCl8fHRoaXMuX2lzVmVydGljYWwoKX0sZS5wcm90b3R5cGUuZml4ZWRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5leHBhbmRzKCl8fCF0aGlzLl9pc1ZlcnRpY2FsKCl9LGUucHJvdG90eXBlLl9nZW5lcmF0ZVRpY2tzPWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PWUuX0RFRkFVTFRfTlVNX1NXQVRDSEVTKTt2YXIgbj10aGlzLl9zY2FsZS5kb21haW4oKTtpZigxPT09dClyZXR1cm5bblswXV07Zm9yKHZhciBpPShuWzFdLW5bMF0pLyh0LTEpLHI9W10sbz0wO288dDtvKyspci5wdXNoKG5bMF0raSpvKTtyZXR1cm4gcn0sZS5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7dC5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyksdGhpcy5fc3dhdGNoQ29udGFpbmVyPXRoaXMuY29udGVudCgpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInN3YXRjaC1jb250YWluZXIiLCEwKSx0aGlzLl9zd2F0Y2hCb3VuZGluZ0JveD10aGlzLmNvbnRlbnQoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKCJzd2F0Y2gtYm91bmRpbmctYm94IiwhMCksdGhpcy5fbG93ZXJMYWJlbD10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKGUuTEVHRU5EX0xBQkVMX0NMQVNTLCEwKSx0aGlzLl91cHBlckxhYmVsPXRoaXMuY29udGVudCgpLmFwcGVuZCgiZyIpLmNsYXNzZWQoZS5MRUdFTkRfTEFCRUxfQ0xBU1MsITApO3ZhciBuPW5ldyBhbXQuU3ZnQ29udGV4dCh0aGlzLmNvbnRlbnQoKS5ub2RlKCkpO3RoaXMuX21lYXN1cmVyPW5ldyBhbXQuTWVhc3VyZXIobiksdGhpcy5fd3JhcHBlcj1uZXcgYW10LldyYXBwZXIsdGhpcy5fd3JpdGVyPW5ldyBhbXQuV3JpdGVyKHRoaXMuX21lYXN1cmVyLG4sdGhpcy5fd3JhcHBlcil9LGUucHJvdG90eXBlLnJlcXVlc3RlZFNwYWNlPWZ1bmN0aW9uKHQsbil7dmFyIGkscixvPXRoaXMsYT10aGlzLl9tZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0LHM9YSxsPXRoaXMuX3NjYWxlLmRvbWFpbigpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIG8uX21lYXN1cmVyLm1lYXN1cmUoby5fZm9ybWF0dGVyKHQpKS53aWR0aH0pKSxjPWUuX0RFRkFVTFRfTlVNX1NXQVRDSEVTO2lmKHRoaXMuX2lzVmVydGljYWwoKSl7dmFyIHU9U210Lk1hdGgubWF4KGwsMCk7cj1zK2ErdGhpcy5fdGV4dFBhZGRpbmcrdSt0aGlzLl90ZXh0UGFkZGluZyxpPWMqYX1lbHNlIGk9cythK3Mscj10aGlzLl90ZXh0UGFkZGluZytsWzBdK2MqYStsWzFdK3RoaXMuX3RleHRQYWRkaW5nO3JldHVybnttaW5XaWR0aDpyLG1pbkhlaWdodDppfX0sZS5wcm90b3R5cGUuX2lzVmVydGljYWw9ZnVuY3Rpb24oKXtyZXR1cm4iaG9yaXpvbnRhbCIhPT10aGlzLl9vcmllbnRhdGlvbn0sZS5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3QucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5LmNhbGwodGhpcyk7dmFyIG4saSxyLG8sYSxzLGw9dGhpcy5fc2NhbGUuZG9tYWluKCksYz10aGlzLl9mb3JtYXR0ZXIobFswXSksdT10aGlzLl9tZWFzdXJlci5tZWFzdXJlKGMpLndpZHRoLGg9dGhpcy5fZm9ybWF0dGVyKGxbMV0pLGQ9dGhpcy5fbWVhc3VyZXIubWVhc3VyZShoKS53aWR0aCxwPXRoaXMuX21lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQsZj10aGlzLl90ZXh0UGFkZGluZyxtPXt4OjAseTowfSxnPXt4OjAseTowfSxfPXt4QWxpZ246ImNlbnRlciIseUFsaWduOiJjZW50ZXIiLHRleHRSb3RhdGlvbjowfSx5PXt4QWxpZ246ImNlbnRlciIseUFsaWduOiJjZW50ZXIiLHRleHRSb3RhdGlvbjowfSx2PXt4OjAseTowLHdpZHRoOjAsaGVpZ2h0OjB9O2lmKHRoaXMuX2lzVmVydGljYWwoKSl7cz1NYXRoLmZsb29yKHRoaXMuaGVpZ2h0KCkpO3ZhciBiPU1hdGgubWF4KHUsZCk7YT0odGhpcy53aWR0aCgpLWItMip0aGlzLl90ZXh0UGFkZGluZykvMixuPU1hdGgubWF4KHRoaXMud2lkdGgoKS1hLTIqZi1iLDApLGk9MSxvPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGUuaGVpZ2h0KCktKG4rMSl9LHkueUFsaWduPSJ0b3AiLG0ueT0wLF8ueUFsaWduPSJib3R0b20iLGcueT0wLCJsZWZ0Ij09PXRoaXMuX29yaWVudGF0aW9uPyhyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGYrYitmfSx5LnhBbGlnbj0icmlnaHQiLG0ueD0tKGErbitmKSxfLnhBbGlnbj0icmlnaHQiLGcueD0tKGErbitmKSk6KHI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYX0seS54QWxpZ249ImxlZnQiLG0ueD1hK24rZixfLnhBbGlnbj0ibGVmdCIsZy54PWErbitmKSx2LndpZHRoPW4sdi5oZWlnaHQ9cyppfWVsc2UgYT1NYXRoLm1heChmLCh0aGlzLmhlaWdodCgpLXApLzIpLHM9TWF0aC5tYXgoTWF0aC5mbG9vcih0aGlzLndpZHRoKCktNCpmLXUtZCksMCksbj0xLGk9TWF0aC5tYXgodGhpcy5oZWlnaHQoKS0yKmEsMCkscj1mdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLmZsb29yKHUrMipmKStlfSxvPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGF9LHkueEFsaWduPSJyaWdodCIsbS54PS1mLF8ueEFsaWduPSJsZWZ0IixnLng9Zix2Lnk9YSx2LndpZHRoPXMqbix2LmhlaWdodD1pO3YueD1yKG51bGwsMCksdGhpcy5fdXBwZXJMYWJlbC50ZXh0KCIiKSx0aGlzLl93cml0ZXIud3JpdGUoaCx0aGlzLndpZHRoKCksdGhpcy5oZWlnaHQoKSx5LHRoaXMuX3VwcGVyTGFiZWwubm9kZSgpKSx0aGlzLl91cHBlckxhYmVsLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK20ueCsiLCAiK20ueSsiKSIpLHRoaXMuX2xvd2VyTGFiZWwudGV4dCgiIiksdGhpcy5fd3JpdGVyLndyaXRlKGMsdGhpcy53aWR0aCgpLHRoaXMuaGVpZ2h0KCksXyx0aGlzLl9sb3dlckxhYmVsLm5vZGUoKSksdGhpcy5fbG93ZXJMYWJlbC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitnLngrIiwgIitnLnkrIikiKSx0aGlzLl9zd2F0Y2hCb3VuZGluZ0JveC5hdHRycyh2KTt2YXIgeD10aGlzLl9nZW5lcmF0ZVRpY2tzKHMpLHc9dGhpcy5fc3dhdGNoQ29udGFpbmVyLnNlbGVjdEFsbCgicmVjdC5zd2F0Y2giKS5kYXRhKHgpLFM9dy5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoInN3YXRjaCIsITApLE09dy5tZXJnZShTKTtyZXR1cm4gdy5leGl0KCkucmVtb3ZlKCksTS5hdHRycyh7ZmlsbDpmdW5jdGlvbih0LG4pe3JldHVybiBlLl9zY2FsZS5zY2FsZSh0KX0sd2lkdGg6bixoZWlnaHQ6aSx4OnIseTpvLCJzaGFwZS1yZW5kZXJpbmciOiJjcmlzcEVkZ2VzIn0pLGZtdC5BRERfVElUTEVfRUxFTUVOVFMmJlMuYXBwZW5kKCJ0aXRsZSIpLnRleHQoKGZ1bmN0aW9uKHQpe3JldHVybiBlLl9mb3JtYXR0ZXIodCl9KSksdGhpc30sZS5fREVGQVVMVF9OVU1fU1dBVENIRVM9MTEsZS5MRUdFTkRfTEFCRUxfQ0xBU1M9ImxlZ2VuZC1sYWJlbCIsZX0pKFRtdC5Db21wb25lbnQpO2UuSW50ZXJwb2xhdGVkQ29sb3JMZWdlbmQ9bn0pKSxoZ3Q9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZvaWQgMD09PWUmJihlPSIiKSx2b2lkIDA9PT1uJiYobj0wKTt2YXIgaT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkuYWRkQ2xhc3MoImxhYmVsIiksaS50ZXh0KGUpLGkuYW5nbGUobiksaS54QWxpZ25tZW50KCJjZW50ZXIiKS55QWxpZ25tZW50KCJjZW50ZXIiKSxpLl9wYWRkaW5nPTAsaX1yZXR1cm4gRGZ0Ll9fZXh0ZW5kcyhlLHQpLGUucHJvdG90eXBlLnJlcXVlc3RlZFNwYWNlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fbWVhc3VyZXIubWVhc3VyZSh0aGlzLl90ZXh0KTtyZXR1cm57bWluV2lkdGg6KDA9PT10aGlzLmFuZ2xlKCk/bi53aWR0aDpuLmhlaWdodCkrMip0aGlzLnBhZGRpbmcoKSxtaW5IZWlnaHQ6KDA9PT10aGlzLmFuZ2xlKCk/bi5oZWlnaHQ6bi53aWR0aCkrMip0aGlzLnBhZGRpbmcoKX19LGUucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe3QucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLHRoaXMuX3RleHRDb250YWluZXI9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIik7dmFyIGU9bmV3IGFtdC5TdmdDb250ZXh0KHRoaXMuX3RleHRDb250YWluZXIubm9kZSgpKTt0aGlzLl9tZWFzdXJlcj1uZXcgYW10LkNhY2hlTWVhc3VyZXIoZSksdGhpcy5fd3JhcHBlcj1uZXcgYW10LldyYXBwZXIsdGhpcy5fd3JpdGVyPW5ldyBhbXQuV3JpdGVyKHRoaXMuX21lYXN1cmVyLGUsdGhpcy5fd3JhcHBlciksdGhpcy50ZXh0KHRoaXMuX3RleHQpfSxlLnByb3RvdHlwZS50ZXh0PWZ1bmN0aW9uKHQpe2lmKG51bGw9PXQpcmV0dXJuIHRoaXMuX3RleHQ7aWYoInN0cmluZyIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcigiTGFiZWwudGV4dCgpIG9ubHkgdGFrZXMgc3RyaW5ncyBhcyBpbnB1dCIpO3JldHVybiB0aGlzLl90ZXh0PXQsdGhpcy5yZWRyYXcoKSx0aGlzfSxlLnByb3RvdHlwZS5hbmdsZT1mdW5jdGlvbih0KXtpZihudWxsPT10KXJldHVybiB0aGlzLl9hbmdsZTtpZigodCU9MzYwKT4xODA/dC09MzYwOnQ8LTE4MCYmKHQrPTM2MCksLTkwIT09dCYmMCE9PXQmJjkwIT09dCl0aHJvdyBuZXcgRXJyb3IodCsiIGlzIG5vdCBhIHZhbGlkIGFuZ2xlIGZvciBMYWJlbCIpO3JldHVybiB0aGlzLl9hbmdsZT10LHRoaXMucmVkcmF3KCksdGhpc30sZS5wcm90b3R5cGUucGFkZGluZz1mdW5jdGlvbih0KXtpZihudWxsPT10KXJldHVybiB0aGlzLl9wYWRkaW5nO2lmKCh0PSt0KTwwKXRocm93IG5ldyBFcnJvcih0KyIgaXMgbm90IGEgdmFsaWQgcGFkZGluZyB2YWx1ZS4gQ2Fubm90IGJlIGxlc3MgdGhhbiAwLiIpO3JldHVybiB0aGlzLl9wYWRkaW5nPXQsdGhpcy5yZWRyYXcoKSx0aGlzfSxlLnByb3RvdHlwZS5maXhlZFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGUucHJvdG90eXBlLmZpeGVkSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuITB9LGUucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7dC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHkuY2FsbCh0aGlzKSx0aGlzLl90ZXh0Q29udGFpbmVyLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpO3ZhciBlPXRoaXMuX21lYXN1cmVyLm1lYXN1cmUodGhpcy5fdGV4dCksbj1NYXRoLm1heChNYXRoLm1pbigodGhpcy5oZWlnaHQoKS1lLmhlaWdodCkvMix0aGlzLnBhZGRpbmcoKSksMCksaT1NYXRoLm1heChNYXRoLm1pbigodGhpcy53aWR0aCgpLWUud2lkdGgpLzIsdGhpcy5wYWRkaW5nKCkpLDApO3RoaXMuX3RleHRDb250YWluZXIuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIraSsiLCIrbisiKSIpO3ZhciByPXRoaXMud2lkdGgoKS0yKmksbz10aGlzLmhlaWdodCgpLTIqbixhPXt4QWxpZ246dGhpcy54QWxpZ25tZW50KCkseUFsaWduOnRoaXMueUFsaWdubWVudCgpLHRleHRSb3RhdGlvbjp0aGlzLmFuZ2xlKCl9O3JldHVybiB0aGlzLl93cml0ZXIud3JpdGUodGhpcy5fdGV4dCxyLG8sYSksdGhpc30sZS5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7dC5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlLmNhbGwodGhpcyksdGhpcy5fbWVhc3VyZXIucmVzZXQoKX0sZX0pKFRtdC5Db21wb25lbnQpO2UuTGFiZWw9bjt2YXIgaT0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGkpe3ZhciByPXQuY2FsbCh0aGlzLG4saSl8fHRoaXM7cmV0dXJuIHIuYWRkQ2xhc3MoZS5USVRMRV9MQUJFTF9DTEFTUykscn1yZXR1cm4gRGZ0Ll9fZXh0ZW5kcyhlLHQpLGUuVElUTEVfTEFCRUxfQ0xBU1M9InRpdGxlLWxhYmVsIixlfSkobik7ZS5UaXRsZUxhYmVsPWk7dmFyIHI9KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpKXt2YXIgcj10LmNhbGwodGhpcyxuLGkpfHx0aGlzO3JldHVybiByLmFkZENsYXNzKGUuQVhJU19MQUJFTF9DTEFTUykscn1yZXR1cm4gRGZ0Ll9fZXh0ZW5kcyhlLHQpLGUuQVhJU19MQUJFTF9DTEFTUz0iYXhpcy1sYWJlbCIsZX0pKG4pO2UuQXhpc0xhYmVsPXJ9KSksZGd0PWJlKChmdW5jdGlvbih0LGUpewovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5jaXJjbGU9ZnVuY3Rpb24gbigpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gaWR0LnN5bWJvbCgpLnR5cGUoaWR0LnN5bWJvbENpcmNsZSkuc2l6ZShNYXRoLlBJKk1hdGgucG93KHQvMiwyKSl9fSxlLnNxdWFyZT1mdW5jdGlvbiBpKCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBpZHQuc3ltYm9sKCkudHlwZShpZHQuc3ltYm9sU3F1YXJlKS5zaXplKE1hdGgucG93KHQsMikpfX0sZS5jcm9zcz1mdW5jdGlvbiByKCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBpZHQuc3ltYm9sKCkudHlwZShpZHQuc3ltYm9sQ3Jvc3MpLnNpemUoNS85Kk1hdGgucG93KHQsMikpfX0sZS5kaWFtb25kPWZ1bmN0aW9uIG8oKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGlkdC5zeW1ib2woKS50eXBlKGlkdC5zeW1ib2xEaWFtb25kKS5zaXplKE1hdGgudGFuKE1hdGguUEkvNikqTWF0aC5wb3codCwyKS8yKX19LGUudHJpYW5nbGU9ZnVuY3Rpb24gYSgpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gaWR0LnN5bWJvbCgpLnR5cGUoaWR0LnN5bWJvbFRyaWFuZ2xlKS5zaXplKE1hdGguc3FydCgzKSpNYXRoLnBvdyh0LzIsMikpfX0sZS5zdGFyPWZ1bmN0aW9uIHMoKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGlkdC5zeW1ib2woKS50eXBlKGlkdC5zeW1ib2xTdGFyKS5zaXplKC44OTA4MTMwOTE1MjkyODUyKk1hdGgucG93KHQvMiwyKSl9fTt2YXIgbD0zKigxL01hdGguc3FydCgxMikvMisxKTtlLnd5ZT1mdW5jdGlvbiBjKCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBpZHQuc3ltYm9sKCkudHlwZShpZHQuc3ltYm9sV3llKS5zaXplKGwqTWF0aC5wb3codC8yLjQsMikpfX19KSkscGd0PWJlKChmdW5jdGlvbih0LGUpewovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dm9pZCAwPT09dCYmKHQ9W10pLHZvaWQgMD09PWUmJihlPTApLHZvaWQgMD09PW4mJihuPTEvMCksdGhpcy5jb2x1bW5zPXQsdGhpcy5ib3R0b21QYWRkaW5nPWUsdGhpcy5tYXhXaWR0aD1ufXJldHVybiB0LnByb3RvdHlwZS5hZGRDb2x1bW49ZnVuY3Rpb24odCl7dmFyIGU9dC53aWR0aCxuPXRoaXMuZ2V0V2lkdGhBdmFpbGFibGUoKTt0LndpZHRoPU1hdGgubWluKG4sZSksdGhpcy5jb2x1bW5zLnB1c2godCl9LHQucHJvdG90eXBlLmdldEJvdW5kcz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5jb2x1bW5zW3RdLG49MCxpPTA7aTx0O2krKyluKz10aGlzLmNvbHVtbnNbaV0ud2lkdGg7cmV0dXJue3RvcExlZnQ6e3g6bix5OjB9LGJvdHRvbVJpZ2h0Ont4Om4rZS53aWR0aCx5OmUuaGVpZ2h0fX19LHQucHJvdG90eXBlLmdldEhlaWdodD1mdW5jdGlvbigpe3JldHVybiBTbXQuTWF0aC5tYXgodGhpcy5jb2x1bW5zLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0fSkpLDApK3RoaXMuYm90dG9tUGFkZGluZ30sdC5wcm90b3R5cGUuZ2V0V2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5taW4odGhpcy5jb2x1bW5zLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlLndpZHRofSksMCksdGhpcy5tYXhXaWR0aCl9LHQucHJvdG90eXBlLmdldFdpZHRoQXZhaWxhYmxlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nZXRXaWR0aCgpO3JldHVybiBNYXRoLm1heCh0aGlzLm1heFdpZHRoLXQsMCl9LHR9KSgpLGk9KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixpKXt2b2lkIDA9PT10JiYodD0xLzApLHZvaWQgMD09PWUmJihlPTEvMCksdm9pZCAwPT09biYmKG49MCksdm9pZCAwPT09aSYmKGk9W10pLHRoaXMubWF4V2lkdGg9dCx0aGlzLm1heEhlaWdodD1lLHRoaXMucGFkZGluZz1uLHRoaXMucm93cz1pfXJldHVybiB0LnByb3RvdHlwZS5hZGRSb3c9ZnVuY3Rpb24odCl7dC5tYXhXaWR0aD10aGlzLm1heFdpZHRoLTIqdGhpcy5wYWRkaW5nLHRoaXMucm93cy5wdXNoKHQpfSx0LnByb3RvdHlwZS5nZXRDb2x1bW5Cb3VuZHM9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLmdldFJvd0JvdW5kcyh0KSxpPXRoaXMucm93c1t0XS5nZXRCb3VuZHMoZSk7cmV0dXJuIGkudG9wTGVmdC54Kz1uLnRvcExlZnQueCxpLmJvdHRvbVJpZ2h0LngrPW4udG9wTGVmdC54LGkudG9wTGVmdC55Kz1uLnRvcExlZnQueSxpLmJvdHRvbVJpZ2h0LnkrPW4udG9wTGVmdC55LGl9LHQucHJvdG90eXBlLmdldFJvd0JvdW5kcz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5wYWRkaW5nLG49dGhpcy5wYWRkaW5nLGk9MDtpPHQ7aSsrKW4rPXRoaXMucm93c1tpXS5nZXRIZWlnaHQoKTtyZXR1cm57dG9wTGVmdDp7eDplLHk6bn0sYm90dG9tUmlnaHQ6e3g6ZSt0aGlzLnJvd3NbdF0uZ2V0V2lkdGgoKSx5Om4rdGhpcy5yb3dzW3RdLmdldEhlaWdodCgpfX19LHQucHJvdG90eXBlLmdldEhlaWdodD1mdW5jdGlvbigpe3JldHVybiBNYXRoLm1pbih0aGlzLnJvd3MucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiB0K2UuZ2V0SGVpZ2h0KCl9KSwwKSsyKnRoaXMucGFkZGluZyx0aGlzLm1heEhlaWdodCl9LHQucHJvdG90eXBlLmdldFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgubWluKFNtdC5NYXRoLm1heCh0aGlzLnJvd3MubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRXaWR0aCgpfSkpLDApKzIqdGhpcy5wYWRkaW5nLHRoaXMubWF4V2lkdGgpfSx0fSkoKSxyPShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3ZhciBuPXQuY2FsbCh0aGlzKXx8dGhpcztpZihuLl9wYWRkaW5nPTUsbi5fcm93Qm90dG9tUGFkZGluZz0zLG4uYWRkQ2xhc3MoImxlZ2VuZCIpLG4ubWF4RW50cmllc1BlclJvdygxKSxudWxsPT1lKXRocm93IG5ldyBFcnJvcigiTGVnZW5kIHJlcXVpcmVzIGEgY29sb3JTY2FsZSIpO3JldHVybiBuLl9jb2xvclNjYWxlPWUsbi5fcmVkcmF3Q2FsbGJhY2s9ZnVuY3Rpb24odCl7cmV0dXJuIG4ucmVkcmF3KCl9LG4uX2NvbG9yU2NhbGUub25VcGRhdGUobi5fcmVkcmF3Q2FsbGJhY2spLG4uX2Zvcm1hdHRlcj1DbXQuaWRlbnRpdHkoKSxuLm1heExpbmVzUGVyRW50cnkoMSksbi54QWxpZ25tZW50KCJyaWdodCIpLnlBbGlnbm1lbnQoInRvcCIpLG4uY29tcGFyYXRvcigoZnVuY3Rpb24odCxlKXt2YXIgaT1uLl9jb2xvclNjYWxlLmRvbWFpbigpLnNsaWNlKCkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gbi5fZm9ybWF0dGVyKHQpfSkpO3JldHVybiBpLmluZGV4T2YodCktaS5pbmRleE9mKGUpfSkpLG4uX3N5bWJvbEZhY3RvcnlBY2Nlc3Nvcj1mdW5jdGlvbigpe3JldHVybiBkZ3QuY2lyY2xlKCl9LG4uX3N5bWJvbE9wYWNpdHlBY2Nlc3Nvcj1mdW5jdGlvbigpe3JldHVybiAxfSxufXJldHVybiBEZnQuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7dC5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyk7dmFyIG49dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIikuY2xhc3NlZChlLkxFR0VORF9ST1dfQ0xBU1MsITApO24uYXBwZW5kKCJnIikuY2xhc3NlZChlLkxFR0VORF9FTlRSWV9DTEFTUywhMCkuYXBwZW5kKCJ0ZXh0Iik7dmFyIGk9bmV3IGFtdC5TdmdDb250ZXh0KG4ubm9kZSgpLG51bGwsZm10LkFERF9USVRMRV9FTEVNRU5UUyk7dGhpcy5fbWVhc3VyZXI9bmV3IGFtdC5DYWNoZU1lYXN1cmVyKGkpLHRoaXMuX3dyYXBwZXI9KG5ldyBhbXQuV3JhcHBlcikubWF4TGluZXModGhpcy5tYXhMaW5lc1BlckVudHJ5KCkpLHRoaXMuX3dyaXRlcj1uZXcgYW10LldyaXRlcih0aGlzLl9tZWFzdXJlcixpLHRoaXMuX3dyYXBwZXIpfSxlLnByb3RvdHlwZS5mb3JtYXR0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5fZm9ybWF0dGVyOih0aGlzLl9mb3JtYXR0ZXI9dCx0aGlzLnJlZHJhdygpLHRoaXMpfSxlLnByb3RvdHlwZS5tYXhFbnRyaWVzUGVyUm93PWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX21heEVudHJpZXNQZXJSb3c6KHRoaXMuX21heEVudHJpZXNQZXJSb3c9dCx0aGlzLnJlZHJhdygpLHRoaXMpfSxlLnByb3RvdHlwZS5tYXhMaW5lc1BlckVudHJ5PWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX21heExpbmVzUGVyRW50cnk6KHRoaXMuX21heExpbmVzUGVyRW50cnk9dCx0aGlzLnJlZHJhdygpLHRoaXMpfSxlLnByb3RvdHlwZS5tYXhXaWR0aD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9tYXhXaWR0aDoodGhpcy5fbWF4V2lkdGg9dCx0aGlzLnJlZHJhdygpLHRoaXMpfSxlLnByb3RvdHlwZS5jb21wYXJhdG9yPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX2NvbXBhcmF0b3I6KHRoaXMuX2NvbXBhcmF0b3I9dCx0aGlzLnJlZHJhdygpLHRoaXMpfSxlLnByb3RvdHlwZS5jb2xvclNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT10Pyh0aGlzLl9jb2xvclNjYWxlLm9mZlVwZGF0ZSh0aGlzLl9yZWRyYXdDYWxsYmFjayksdGhpcy5fY29sb3JTY2FsZT10LHRoaXMuX2NvbG9yU2NhbGUub25VcGRhdGUodGhpcy5fcmVkcmF3Q2FsbGJhY2spLHRoaXMucmVkcmF3KCksdGhpcyk6dGhpcy5fY29sb3JTY2FsZX0sZS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3QucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKSx0aGlzLl9jb2xvclNjYWxlLm9mZlVwZGF0ZSh0aGlzLl9yZWRyYXdDYWxsYmFjayl9LGUucHJvdG90eXBlLl9idWlsZExlZ2VuZFRhYmxlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxvPXRoaXMuX21lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQsYT1uZXcgaSh0LGUsdGhpcy5fcGFkZGluZykscz10aGlzLl9jb2xvclNjYWxlLmRvbWFpbigpLnNsaWNlKCkuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gci5fY29tcGFyYXRvcihyLl9mb3JtYXR0ZXIodCksci5fZm9ybWF0dGVyKGUpKX0pKSxsPW5ldyBuO3JldHVybiBhLmFkZFJvdyhsKSxsLmJvdHRvbVBhZGRpbmc9dGhpcy5fcm93Qm90dG9tUGFkZGluZyxzLmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7bC5jb2x1bW5zLmxlbmd0aC8yPT09ci5tYXhFbnRyaWVzUGVyUm93KCkmJigobD1uZXcgbikuYm90dG9tUGFkZGluZz1yLl9yb3dCb3R0b21QYWRkaW5nLGEuYWRkUm93KGwpKTt2YXIgaT1sLmdldFdpZHRoQXZhaWxhYmxlKCkscz1yLl9mb3JtYXR0ZXIodCksYz1yLl9tZWFzdXJlci5tZWFzdXJlKHMpLndpZHRoO2ktby1jPDAmJmwuY29sdW1ucy5sZW5ndGg+MSYmKChsPW5ldyBuKS5ib3R0b21QYWRkaW5nPXIuX3Jvd0JvdHRvbVBhZGRpbmcsYS5hZGRSb3cobCkpLGwuYWRkQ29sdW1uKHt3aWR0aDpvLGhlaWdodDpvLGRhdGE6e25hbWU6dCx0eXBlOiJzeW1ib2wifX0pLGk9bC5nZXRXaWR0aEF2YWlsYWJsZSgpO3ZhciB1PU1hdGgubWluKGksYyk7ci5fd3JhcHBlci5tYXhMaW5lcyhyLm1heExpbmVzUGVyRW50cnkoKSk7dmFyIGg9ci5fd3JhcHBlci53cmFwKHMsci5fbWVhc3VyZXIsdSkubm9MaW5lcztsLmFkZENvbHVtbih7d2lkdGg6dSxoZWlnaHQ6aCpvLGRhdGE6e25hbWU6dCx0eXBlOiJ0ZXh0In19KX0pKSxhfSxlLnByb3RvdHlwZS5yZXF1ZXN0ZWRTcGFjZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX2J1aWxkTGVnZW5kVGFibGUoU210Lk1hdGgubWluKFt0aGlzLm1heFdpZHRoKCksdF0sdCksZSk7cmV0dXJue21pbkhlaWdodDpuLmdldEhlaWdodCgpLG1pbldpZHRoOm4uZ2V0V2lkdGgoKX19LGUucHJvdG90eXBlLmVudGl0aWVzQXQ9ZnVuY3Rpb24odCl7dmFyIG49dGhpcztpZighdGhpcy5faXNTZXR1cClyZXR1cm5bXTt2YXIgaT10aGlzLl9idWlsZExlZ2VuZFRhYmxlKHRoaXMud2lkdGgoKSx0aGlzLmhlaWdodCgpKTtyZXR1cm4gaS5yb3dzLnJlZHVjZSgoZnVuY3Rpb24ocixvLGEpe2lmKDAhPT1yLmxlbmd0aClyZXR1cm4gcjt2YXIgcz1pLmdldFJvd0JvdW5kcyhhKTtyZXR1cm4gU210Lk1hdGgud2l0aGluKHQscyk/by5jb2x1bW5zLnJlZHVjZSgoZnVuY3Rpb24ocixvLHMpe3ZhciBsPWkuZ2V0Q29sdW1uQm91bmRzKGEscyk7aWYoU210Lk1hdGgud2l0aGluKHQsbCkpe3ZhciBjPW4uY29udGVudCgpLnNlbGVjdEFsbCgiLiIrZS5MRUdFTkRfUk9XX0NMQVNTKS5ub2RlcygpW2FdLHU9aWR0LnNlbGVjdChjKS5zZWxlY3RBbGwoIi4iK2UuTEVHRU5EX0VOVFJZX0NMQVNTKS5ub2RlcygpW01hdGguZmxvb3Iocy8yKV0saD1pZHQuc2VsZWN0KHUpLnNlbGVjdCgiLiIrZS5MRUdFTkRfU1lNQk9MX0NMQVNTKSxkPVNtdC5ET00uZ2V0VHJhbnNsYXRlVmFsdWVzKGlkdC5zZWxlY3QoYykpLHA9U210LkRPTS5nZXRUcmFuc2xhdGVWYWx1ZXMoaCk7cmV0dXJuW3tib3VuZHM6U210LkRPTS5lbGVtZW50QkJveChpZHQuc2VsZWN0KGMpKSxkYXR1bTpvLmRhdGEubmFtZSxwb3NpdGlvbjp7eDpkWzBdK3BbMF0seTpkWzFdK3BbMV19LHNlbGVjdGlvbjppZHQuc2VsZWN0KHUpLGNvbXBvbmVudDpufV19cmV0dXJuIHJ9KSxyKTpyfSksW10pfSxlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseT1mdW5jdGlvbigpe3QucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5LmNhbGwodGhpcyk7dmFyIG49dGhpcy5fYnVpbGRMZWdlbmRUYWJsZSh0aGlzLndpZHRoKCksdGhpcy5oZWlnaHQoKSk7dGhpcy5jb250ZW50KCkuc2VsZWN0QWxsKCIqIikucmVtb3ZlKCk7dmFyIGk9dGhpcy5jb250ZW50KCkuc2VsZWN0QWxsKCJnLiIrZS5MRUdFTkRfUk9XX0NMQVNTKS5kYXRhKG4ucm93cykscj1pLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChlLkxFR0VORF9ST1dfQ0xBU1MsITApLm1lcmdlKGkpO2kuZXhpdCgpLnJlbW92ZSgpLHIuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCxlKXt2YXIgaT1uLmdldFJvd0JvdW5kcyhlKTtyZXR1cm4idHJhbnNsYXRlKCIraS50b3BMZWZ0LngrIiwgIitpLnRvcExlZnQueSsiKSJ9KSk7dmFyIG89dGhpcztyZXR1cm4gci5lYWNoKChmdW5jdGlvbih0LGkpe2Zvcih2YXIgcj1bXSxhPTA7YTx0LmNvbHVtbnMubGVuZ3RoO2ErPTIpci5wdXNoKFt0LmNvbHVtbnNbYV0sdC5jb2x1bW5zW2ErMV1dKTt2YXIgcz1pZHQuc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgiZy4iK2UuTEVHRU5EX0VOVFJZX0NMQVNTKS5kYXRhKHIpLGw9cy5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoZS5MRUdFTkRfRU5UUllfQ0xBU1MsITApLm1lcmdlKHMpO2wuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsKGZ1bmN0aW9uKHQsZSl7dmFyIG49dFswXTtyZXR1cm4gby5zeW1ib2woKShuLmRhdGEubmFtZSxpKSguNipuLmhlaWdodCkobnVsbCl9KSkuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCxlKXt2YXIgcj10WzBdLG89bi5yb3dzW2ldLmNvbHVtbnMuaW5kZXhPZihyKTtyZXR1cm4idHJhbnNsYXRlKCIrKG4uZ2V0Q29sdW1uQm91bmRzKGksbykudG9wTGVmdC54K3Iud2lkdGgvMikrIiwgIityLmhlaWdodC8yKyIpIn0pKS5hdHRyKCJmaWxsIiwoZnVuY3Rpb24odCl7cmV0dXJuIG8uX2NvbG9yU2NhbGUuc2NhbGUodFswXS5kYXRhLm5hbWUpfSkpLmF0dHIoIm9wYWNpdHkiLChmdW5jdGlvbih0LGUpe3JldHVybiBvLnN5bWJvbE9wYWNpdHkoKSh0WzBdLmRhdGEubmFtZSxpKX0pKS5jbGFzc2VkKGUuTEVHRU5EX1NZTUJPTF9DTEFTUywhMCksbC5hcHBlbmQoImciKS5jbGFzc2VkKCJ0ZXh0LWNvbnRhaW5lciIsITApLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQsZSl7dmFyIHI9bi5yb3dzW2ldLmNvbHVtbnMuaW5kZXhPZih0WzFdKTtyZXR1cm4idHJhbnNsYXRlKCIrbi5nZXRDb2x1bW5Cb3VuZHMoaSxyKS50b3BMZWZ0LngrIiwgMCkifSkpLmVhY2goKGZ1bmN0aW9uKHQsZSxuKXt2YXIgaT1pZHQuc2VsZWN0KHRoaXMpLHI9dFsxXTtvLl93cml0ZXIud3JpdGUoby5fZm9ybWF0dGVyKHIuZGF0YS5uYW1lKSxyLndpZHRoLG8uaGVpZ2h0KCkse3hBbGlnbjoibGVmdCIseUFsaWduOiJ0b3AiLHRleHRSb3RhdGlvbjowfSxpLm5vZGUoKSl9KSkscy5leGl0KCkucmVtb3ZlKCl9KSksdGhpc30sZS5wcm90b3R5cGUuc3ltYm9sPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX3N5bWJvbEZhY3RvcnlBY2Nlc3NvcjoodGhpcy5fc3ltYm9sRmFjdG9yeUFjY2Vzc29yPXQsdGhpcy5yZW5kZXIoKSx0aGlzKX0sZS5wcm90b3R5cGUuc3ltYm9sT3BhY2l0eT1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9zeW1ib2xPcGFjaXR5QWNjZXNzb3I6KHRoaXMuX3N5bWJvbE9wYWNpdHlBY2Nlc3Nvcj0ibnVtYmVyIj09dHlwZW9mIHQ/ZnVuY3Rpb24oKXtyZXR1cm4gdH06dCx0aGlzLnJlbmRlcigpLHRoaXMpfSxlLnByb3RvdHlwZS5maXhlZFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGUucHJvdG90eXBlLmZpeGVkSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuITB9LGUucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZT1mdW5jdGlvbigpe3QucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZS5jYWxsKHRoaXMpLHRoaXMuX21lYXN1cmVyLnJlc2V0KCl9LGUuTEVHRU5EX1JPV19DTEFTUz0ibGVnZW5kLXJvdyIsZS5MRUdFTkRfRU5UUllfQ0xBU1M9ImxlZ2VuZC1lbnRyeSIsZS5MRUdFTkRfU1lNQk9MX0NMQVNTPSJsZWdlbmQtc3ltYm9sIixlfSkoVG10LkNvbXBvbmVudCk7ZS5MZWdlbmQ9cn0pKSxmZ3Q9YmUoKGZ1bmN0aW9uKHQsZSl7dmFyIG47Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSwobj1lLkFuaW1hdG9yfHwoZS5BbmltYXRvcj17fSkpLk1BSU49Im1haW4iLG4uUkVTRVQ9InJlc2V0In0pKTtmdW5jdGlvbiBtZ3QodCl7cmV0dXJuITA9PT0oZnVuY3Rpb24gdChlKXtyZXR1cm4gbnVsbCE9ZSYmIm9iamVjdCI9PXR5cGVvZiBlJiYhMT09PUFycmF5LmlzQXJyYXkoZSl9KSh0KSYmIltvYmplY3QgT2JqZWN0XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9dmFyIGdndD1iZSgoZnVuY3Rpb24odCxlKXsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPTAsaT0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dm9pZCAwPT09dCYmKHQ9W10pLHZvaWQgMD09PWUmJihlPXt9KSx0aGlzLl91cGRhdGVJZD1uKyssdGhpcy5fZGF0YT10LHRoaXMuX21ldGFkYXRhPWUsdGhpcy5fY2FsbGJhY2tzPW5ldyBTbXQuQ2FsbGJhY2tTZXR9cmV0dXJuIHQucHJvdG90eXBlLm9uVXBkYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jYWxsYmFja3MuYWRkKHQpLHRoaXN9LHQucHJvdG90eXBlLm9mZlVwZGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fY2FsbGJhY2tzLmRlbGV0ZSh0KSx0aGlzfSx0LnByb3RvdHlwZS5kYXRhPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX2RhdGE6KHRoaXMuX2RhdGE9dCx0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpLHRoaXMpfSx0LnByb3RvdHlwZS5tZXRhZGF0YT1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9tZXRhZGF0YToodGhpcy5fbWV0YWRhdGE9dCx0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpLHRoaXMpfSx0LnByb3RvdHlwZS51cGRhdGVJZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl91cGRhdGVJZH0sdC5wcm90b3R5cGUuX2Rpc3BhdGNoVXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlSWQ9bisrLHRoaXMuX2NhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKHRoaXMpfSx0fSkoKTtlLkRhdGFzZXQ9aX0pKSxfZ3Q9YmUoKGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGw/dDp0IGluc3RhbmNlb2YgRGF0ZT9vKHQudmFsdWVPZigpKTp0IGluc3RhbmNlb2YgSW10LlNjYWxlP2kodCk6dCBpbnN0YW5jZW9mIGdndC5EYXRhc2V0P3IodCk6KGZ1bmN0aW9uIHQoZSl7dmFyIG4saTtyZXR1cm4hMSE9PW1ndChlKSYmImZ1bmN0aW9uIj09dHlwZW9mKG49ZS5jb25zdHJ1Y3RvcikmJiExIT09bWd0KGk9bi5wcm90b3R5cGUpJiYhMSE9PWkuaGFzT3duUHJvcGVydHkoImlzUHJvdG90eXBlT2YiKX0pKHQpP3ModCk6QXJyYXkuaXNBcnJheSh0KT9hKHQpOm8odCl9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gcyh7ZG9tYWluOnQuZG9tYWluKCkscmFuZ2U6dC5yYW5nZSgpLHVwZGF0ZUlkOnQudXBkYXRlSWQoKSxyZWY6byh0KX0pfWZ1bmN0aW9uIHIodCl7cmV0dXJuIHMoe3JlZjpvKHQpLHVwZGF0ZUlkOnQudXBkYXRlSWQoKX0pfWZ1bmN0aW9uIG8odCl7cmV0dXJuIG5ldyB1KHQpfWZ1bmN0aW9uIGEodCl7cmV0dXJuIG5ldyBjKHQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gbih0KX0pKSl9ZnVuY3Rpb24gcyh0KXt2YXIgZT17fTtmb3IodmFyIGkgaW4gdCl0Lmhhc093blByb3BlcnR5KGkpJiYoZVtpXT1uKHRbaV0pKTtyZXR1cm4gbmV3IGgoZSl9Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICogQGZpbGVvdmVydmlldyBJbXBsZW1lbnRzIHRoZSBTaWduYXR1cmUgQVBJIHRvIGhlbHAgaW4gY29tcGFyaW5nIHdoZW4gdHdvCiAgICAgKiBQbG90dGFibGUgb2JqZWN0cyBoYXZlICJjaGFuZ2VkIi4KICAgICAqCiAgICAgKiBNZW1vaXphdGlvbiBpbiBQbG90dGFibGUgaXMgY29tcGxpY2F0ZWQgYnkgbXV0YWJsZSBzY2FsZXMgYW5kIGRhdGFzZXRzLiBXZSBjYW5ub3Qgc2ltcGx5CiAgICAgKiByZWZlcmVuY2UgY29tcGFyZSB0d28gZS5nLiBzY2FsZXMgc2luY2UgaXQgbWF5IGhhdmUgaW50ZXJuYWxseSBtdXRhdGVkLiBUbyByZXNvbHZlIHRoaXMsCiAgICAgKiB3ZSB3cml0ZSBhIHJlY3Vyc2l2ZSBTaWduYXR1cmUgaW50ZXJmYWNlIHRoYXQgaG9sZHMgYW4gaW1tdXRhYmxlIHNuYXBzaG90IG9mIHdoYXRldmVyCiAgICAgKiBzdGF0ZSB0aGUgc2NhbGUvZGF0YSB3YXMgaW4gYXQgdGhlIHRpbWUuIFRoZW4gb24gbWVtb2l6ZWQgZnVuY3Rpb24gaW52b2NhdGlvbiB3ZSBzaWduIHRoZQogICAgICogbmV3IGlucHV0cyBhbmQgY29tcGFyZSB0aGUgc2lnbmF0dXJlcyB0byBkZWNpZGUgaWYgd2Ugc2hvdWxkIHJlY29tcHV0ZS4KICAgICAqCiAgICAgKiBXZSBtdXN0IGhhbmQtd3JpdGUgYSBzaWduYXR1cmUgZm9yIGVhY2ggY3VzdG9tIGNsYXNzIHdlIHdpc2ggdG8gc3VwcG9ydC4KICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5zaWduPW4sZS5zaWduU2NhbGU9aSxlLnNpZ25EYXRhc2V0PXIsZS5zaWduUmVmPW8sZS5zaWduQXJyYXk9YSxlLnNpZ25PYmo9czt2YXIgbD0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5pc0RpZmZlcmVudD1mdW5jdGlvbih0KXtyZXR1cm4hKHQgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yKXx8dGhpcy5pc1NpZ25hdHVyZURpZmZlcmVudCh0KX0sdH0pKCk7ZS5TaWduYXR1cmU9bDt2YXIgYz0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt2YXIgbj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIG4uYXJyYXk9ZSxufXJldHVybiBEZnQuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUuaXNTaWduYXR1cmVEaWZmZXJlbnQ9ZnVuY3Rpb24odCl7aWYodC5hcnJheS5sZW5ndGghPT10aGlzLmFycmF5Lmxlbmd0aClyZXR1cm4hMDtmb3IodmFyIGU9MDtlPHRoaXMuYXJyYXkubGVuZ3RoO2UrKylpZih0aGlzLmFycmF5W2VdLmlzRGlmZmVyZW50KHQuYXJyYXlbZV0pKXJldHVybiEwO3JldHVybiExfSxlfSkobCk7ZS5BcnJheVNpZ25hdHVyZT1jO3ZhciB1PShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3ZhciBuPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5yZWY9ZSxufXJldHVybiBEZnQuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUuaXNTaWduYXR1cmVEaWZmZXJlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucmVmIT09dC5yZWZ9LGV9KShsKTtlLlJlZmVyZW5jZVNpZ25hdHVyZT11O3ZhciBoPShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3ZhciBuPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5vYmo9ZSxufXJldHVybiBEZnQuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUuaXNTaWduYXR1cmVEaWZmZXJlbnQ9ZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0LmtleXModGhpcy5vYmopLG49T2JqZWN0LmtleXModC5vYmopO2lmKGUubGVuZ3RoIT09bi5sZW5ndGgpcmV0dXJuITA7Zm9yKHZhciBpPTAscj1lO2k8ci5sZW5ndGg7aSsrKXt2YXIgbz1yW2ldO2lmKCF0Lm9iai5oYXNPd25Qcm9wZXJ0eShvKSlyZXR1cm4hMDtpZih0aGlzLm9ialtvXS5pc0RpZmZlcmVudCh0Lm9ialtvXSkpcmV0dXJuITB9cmV0dXJuITF9LGV9KShsKTtlLk9iamVjdFNpZ25hdHVyZT1ofSkpLHlndD1iZSgoZnVuY3Rpb24odCxlKXsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKiBAZmlsZW92ZXJ2aWV3IEltcGxlbWVudHMgYSBmdW5jdGlvbiBtZW1vaXplciB1c2luZyB0aGUgU2lnbmF0dXJlIEFQSS4KICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5tZW1vaXplPWZ1bmN0aW9uIG4odCl7dmFyIGUsbj12b2lkIDAsaT0hMSxyPSExLG89ZnVuY3Rpb24oKXtmb3IodmFyIG89W10sYT0wO2E8YXJndW1lbnRzLmxlbmd0aDthKyspb1thXT1hcmd1bWVudHNbYV07aWYoaSlyZXR1cm4gZTt2YXIgcz1fZ3Quc2lnbkFycmF5KG8pO3JldHVybiB2b2lkIDA9PT1ufHxuLmlzRGlmZmVyZW50KHMpPyhyJiZjb25zb2xlLndhcm4oImNhY2hlIG1pc3MhIGNvbXB1dGluZyIpLG49cyxlPXQuYXBwbHkodGhpcyxvKSk6ciYmY29uc29sZS53YXJuKCJjYWNoZSBoaXQhIiksZX07cmV0dXJuIG8uZG9Mb2NrZWQ9ZnVuY3Rpb24odCl7aWYoaSl0aHJvdyBuZXcgRXJyb3IoIkxvY2tpbmcgYW4gYWxyZWFkeSBsb2NrZWQgbWVtb2l6ZSBmdW5jdGlvbiEiKTtpPSEwO3ZhciBlPXQuYXBwbHkodGhpcyk7cmV0dXJuIGk9ITEsZX0sby5sb2dQZXJmb3JtYW5jZT1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9ITApLHI9dCx0aGlzfSxvfX0pKSx2Z3Q9YmUoKGZ1bmN0aW9uKHQsZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPShmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLm1hcD1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuZXhpc3RzPU9iamVjdC5jcmVhdGUobnVsbCl9cmV0dXJuIHQucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbih0KXtyZXR1cm4gZGVsZXRlIHRoaXMubWFwW3RdLGRlbGV0ZSB0aGlzLmV4aXN0c1t0XSwhMH0sdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm1hcFt0XX0sdC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiEhdGhpcy5leGlzdHNbdF19LHQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLm1hcFt0XT1lLHRoaXMuZXhpc3RzW3RdPSEwLHRoaXN9LHR9KSgpLGk9KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMubWFwPW5ldyBufXJldHVybiB0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubWFwLmdldCh0WzBdKS5nZXQodFsxXSl9LHQucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5tYXAuaGFzKHRbMF0pJiZ0aGlzLm1hcC5nZXQodFswXSkuaGFzKHRbMV0pfSx0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5tYXAuaGFzKHRbMF0pfHx0aGlzLm1hcC5zZXQodFswXSxuZXcgbiksdGhpcy5tYXAuZ2V0KHRbMF0pLnNldCh0WzFdLGUpLHRoaXN9LHQucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5tYXAuaGFzKHRbMF0pJiZ0aGlzLm1hcC5nZXQodFswXSkuZGVsZXRlKHRbMV0pLCEwfSx0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMubWFwPW5ldyBufSx0LnJlc29sdmVyPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm5bbi51cGRhdGVJZCgpLGVdfSx0fSkoKTtmdW5jdGlvbiByKHQpe3ZhciBlPXdlLm1lbW9pemUodCxpLnJlc29sdmVyKTtyZXR1cm4gZS5jYWNoZT1uZXcgaSxlfWUubWVtb2l6ZVByb2plY3Rvcj1yLGUubWVtb2l6ZVByb2plY3RvcnM9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gT2JqZWN0LmtleXModCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dFtlXT1yKHRbZV0pfSkpLHR9fSkpLGJndD1iZSgoZnVuY3Rpb24odCxlKXsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKiBAZmlsZW92ZXJ2aWV3IEltcGxlbWVudHMgYSBjb252ZW5pZW50IHRodW5rIGZ1bmN0aW9uIHRvIGhhbmRsZSB0aGUgY29tbW9uIGNhc2UKICAgICAqIG9mIGNyZWF0aW5nIGEgbWVtb2l6ZWQgZnVuY3Rpb24gdGhhdCB0YWtlcyBpdHMgaW5wdXRzIGZyb20gbXV0YWJsZSBjbGFzcyBwcm9wZXJ0aWVzLgogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLm1lbVRodW5rPWZ1bmN0aW9uIG4oKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdFtlXT1hcmd1bWVudHNbZV07dmFyIG49dC5zbGljZSgwLC0xKSxpPXRbdC5sZW5ndGgtMV0scj14Z3QubWVtb2l6ZShpKSxvPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPW4ubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS5hcHBseSh0KX0pKTtyZXR1cm4gci5hcHBseSh2b2lkIDAsZSl9O3JldHVybiBvfX0pKSx4Z3Q9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxEZnQuX19leHBvcnRTdGFyKHlndCxlKSxEZnQuX19leHBvcnRTdGFyKHZndCxlKSxEZnQuX19leHBvcnRTdGFyKGJndCxlKSxlLnNpZ249X2d0LnNpZ259KSksd2d0PWJlKChmdW5jdGlvbih0LGUpewovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9kcmF3U3RlcD1lfXJldHVybiB0LnByb3RvdHlwZS5nZXREcmF3U3RlcD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kcmF3U3RlcH0sdC5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbih0LGUpe3ZhciBuPWVbZS5sZW5ndGgtMV0uYXR0clRvQXBwbGllZFByb2plY3Rvcjt0aGlzLl9jb250ZXh0LnNhdmUoKSx0aGlzLl9kcmF3U3RlcCh0aGlzLl9jb250ZXh0LHQsbiksdGhpcy5fY29udGV4dC5yZXN0b3JlKCl9LHQucHJvdG90eXBlLmdldFZpc3VhbFByaW1pdGl2ZXM9ZnVuY3Rpb24oKXtyZXR1cm5bXX0sdC5wcm90b3R5cGUuZ2V0VmlzdWFsUHJpbWl0aXZlQXRJbmRleD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbH0sdC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKCl7fSx0fSkoKTtmdW5jdGlvbiBpKHQsZSxuLGkpe2Zvcih2YXIgcj17fSxvPTAsYT1lO288YS5sZW5ndGg7bysrKXt2YXIgcz1hW29dO3QuaGFzT3duUHJvcGVydHkocykmJihyW3NdPXRbc10obixpKSl9cmV0dXJuIHJ9ZnVuY3Rpb24gcih0KXtyZXR1cm4gbnVsbCE9dFsic3Ryb2tlLXdpZHRoIl0/cGFyc2VGbG9hdCh0WyJzdHJva2Utd2lkdGgiXSk6MX1mdW5jdGlvbiBvKHQpe3ZhciBlPXRbInN0cm9rZS1kYXNoYXJyYXkiXTtpZihudWxsIT1lKXRyeXtyZXR1cm4gZS5zcGxpdCgvWyAsXSsvKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBwYXJzZUludCh0LDEwKX0pKX1jYXRjaCh0KXtyZXR1cm4gY29uc29sZS5lcnJvcigiZ2V0U3Ryb2tlRGFzaEFycmF5IGZhaWxlZCB3aXRoOiAiK3QpLFtdfXJldHVybltdfWZ1bmN0aW9uIGEodCxlKXtpZihlLnN0cm9rZSl7dC5saW5lV2lkdGg9cihlKTt2YXIgbj1pZHQuY29sb3IoZS5zdHJva2UpLGk9byhlKTt0LnNldExpbmVEYXNoKGkpLG4ub3BhY2l0eSo9KGZ1bmN0aW9uIGEodCl7dmFyIGU9bnVsbCE9dC5vcGFjaXR5P3BhcnNlRmxvYXQodC5vcGFjaXR5KToxO3JldHVybihudWxsIT10WyJzdHJva2Utb3BhY2l0eSJdP3BhcnNlRmxvYXQodFsic3Ryb2tlLW9wYWNpdHkiXSk6MSkqZX0pKGUpLHQuc3Ryb2tlU3R5bGU9bi50b1N0cmluZygpLHQuc3Ryb2tlKCl9aWYoZS5maWxsKXt2YXIgcz1pZHQuY29sb3IoZS5maWxsKTtzLm9wYWNpdHkqPShmdW5jdGlvbiBsKHQpe3ZhciBlPW51bGwhPXQub3BhY2l0eT9wYXJzZUZsb2F0KHQub3BhY2l0eSk6MTtyZXR1cm4obnVsbCE9dFsiZmlsbC1vcGFjaXR5Il0/cGFyc2VGbG9hdCh0WyJmaWxsLW9wYWNpdHkiXSk6MSkqZX0pKGUpLHQuZmlsbFN0eWxlPXMudG9TdHJpbmcoKSx0LmZpbGwoKX19ZS5DYW52YXNEcmF3ZXI9bixlLkNvbnRleHRTdHlsZUF0dHJzPVsiZmlsbC1vcGFjaXR5IiwiZmlsbCIsIm9wYWNpdHkiLCJzdHJva2Utb3BhY2l0eSIsInN0cm9rZS13aWR0aCIsInN0cm9rZSIsInN0cm9rZS1kYXNoYXJyYXkiXSxlLnJlc29sdmVBdHRyaWJ1dGVzU3Vic2V0V2l0aFN0eWxlcz1mdW5jdGlvbiBzKHQsbixyLG8pe3JldHVybiBpKHQsZS5Db250ZXh0U3R5bGVBdHRycy5jb25jYXQobikscixvKX0sZS5yZXNvbHZlQXR0cmlidXRlcz1pLGUuZ2V0U3Ryb2tlV2lkdGg9cixlLmdldFN0cm9rZURhc2hBcnJheT1vLGUucmVuZGVyQXJlYT1mdW5jdGlvbiBsKHQsZSxuLGkpe3Quc2F2ZSgpLHQuYmVnaW5QYXRoKCksZS5jb250ZXh0KHQpLGUobiksdC5saW5lSm9pbj0icm91bmQiLGEodCxpKSx0LnJlc3RvcmUoKX0sZS5yZW5kZXJMaW5lPWZ1bmN0aW9uIGModCxlLG4saSl7dC5zYXZlKCksdC5iZWdpblBhdGgoKSxlLmNvbnRleHQodCksZShuKSx0LmxpbmVKb2luPSJyb3VuZCIsYSh0LGkpLHQucmVzdG9yZSgpfSxlLnJlbmRlclBhdGhXaXRoU3R5bGU9YX0pKSxTZ3Q9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5fc3ZnRHJhd2VyRmFjdG9yeT10LHRoaXMuX2NhbnZhc0RyYXdlckZhY3Rvcnk9ZX1yZXR1cm4gdC5wcm90b3R5cGUudXNlU1ZHPWZ1bmN0aW9uKHQpe251bGwhPXRoaXMuX2N1cnJlbnREcmF3ZXImJnRoaXMuX2N1cnJlbnREcmF3ZXIucmVtb3ZlKCk7dmFyIGU9dGhpcy5fc3ZnRHJhd2VyRmFjdG9yeSgpO2UuYXR0YWNoVG8odCksdGhpcy5fY3VycmVudERyYXdlcj1lfSx0LnByb3RvdHlwZS51c2VDYW52YXM9ZnVuY3Rpb24odCl7bnVsbCE9dGhpcy5fY3VycmVudERyYXdlciYmdGhpcy5fY3VycmVudERyYXdlci5yZW1vdmUoKSx0aGlzLl9jdXJyZW50RHJhd2VyPXRoaXMuX2NhbnZhc0RyYXdlckZhY3RvcnkodC5ub2RlKCkuZ2V0Q29udGV4dCgiMmQiKSl9LHQucHJvdG90eXBlLmdldERyYXdlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jdXJyZW50RHJhd2VyfSx0LnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oKXtudWxsIT10aGlzLl9jdXJyZW50RHJhd2VyJiZ0aGlzLl9jdXJyZW50RHJhd2VyLnJlbW92ZSgpfSx0LnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKHQsZSl7dGhpcy5fY3VycmVudERyYXdlci5kcmF3KHQsZSl9LHQucHJvdG90eXBlLmdldFZpc3VhbFByaW1pdGl2ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY3VycmVudERyYXdlci5nZXRWaXN1YWxQcmltaXRpdmVzKCl9LHQucHJvdG90eXBlLmdldFZpc3VhbFByaW1pdGl2ZUF0SW5kZXg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2N1cnJlbnREcmF3ZXIuZ2V0VmlzdWFsUHJpbWl0aXZlQXRJbmRleCh0KX0sdH0pKCk7ZS5Qcm94eURyYXdlcj1ufSkpLE1ndD1iZSgoZnVuY3Rpb24odCxlKXsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPShmdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLl9yb290PWlkdC5zZWxlY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKSksdGhpcy5fY2xhc3NOYW1lPWUsdGhpcy5fc3ZnRWxlbWVudE5hbWU9dH1yZXR1cm4gdC5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7dGhpcy5fY3JlYXRlQW5kRGVzdHJveURPTUVsZW1lbnRzKHQpO2Zvcih2YXIgaT0wLHI9ZS5sZW5ndGgsbz1mdW5jdGlvbihyKXt2YXIgbz1lW3JdO1NtdC5XaW5kb3cuc2V0VGltZW91dCgoZnVuY3Rpb24oKXtyZXR1cm4gbi5fZHJhd1N0ZXAobyl9KSxpKSxpKz1vLmFuaW1hdG9yLnRvdGFsVGltZSh0Lmxlbmd0aCl9LGE9MDthPHI7YSsrKW8oYSl9LHQucHJvdG90eXBlLmdldFZpc3VhbFByaW1pdGl2ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09dGhpcy5fY2FjaGVkVmlzdWFsUHJpbWl0aXZlc05vZGVzJiYodGhpcy5fY2FjaGVkVmlzdWFsUHJpbWl0aXZlc05vZGVzPXRoaXMuX3NlbGVjdGlvbi5ub2RlcygpKSx0aGlzLl9jYWNoZWRWaXN1YWxQcmltaXRpdmVzTm9kZXN9LHQucHJvdG90eXBlLmdldFZpc3VhbFByaW1pdGl2ZUF0SW5kZXg9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXRoaXMuX2NhY2hlZFZpc3VhbFByaW1pdGl2ZXNOb2RlTWFwP251bGw6dGhpcy5fY2FjaGVkVmlzdWFsUHJpbWl0aXZlc05vZGVNYXAuZ2V0KHQpfSx0LnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oKXt0aGlzLl9yb290LnJlbW92ZSgpfSx0LnByb3RvdHlwZS5hdHRhY2hUbz1mdW5jdGlvbih0KXt0Lm5vZGUoKS5hcHBlbmRDaGlsZCh0aGlzLl9yb290Lm5vZGUoKSl9LHQucHJvdG90eXBlLmdldFJvb3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm9vdH0sdC5wcm90b3R5cGUuc2VsZWN0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3ZnRWxlbWVudE5hbWV9LHQucHJvdG90eXBlLl9hcHBseURlZmF1bHRBdHRyaWJ1dGVzPWZ1bmN0aW9uKHQpe30sdC5wcm90b3R5cGUuX2NyZWF0ZUFuZERlc3Ryb3lET01FbGVtZW50cz1mdW5jdGlvbih0KXt2YXIgZT10Lm1hcCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbCE9dD97ZDp0LGk6ZX06bnVsbH0pKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT10fSkpLG49dGhpcy5fcm9vdC5zZWxlY3RBbGwodGhpcy5zZWxlY3RvcigpKS5kYXRhKGUpO3RoaXMuX3NlbGVjdGlvbj1uLmVudGVyKCkuYXBwZW5kKHRoaXMuX3N2Z0VsZW1lbnROYW1lKS5tZXJnZShuKSxuLmV4aXQoKS5yZW1vdmUoKTt2YXIgaT1uZXcgU210Lk1hcDt0aGlzLl9zZWxlY3Rpb24uZWFjaCgoZnVuY3Rpb24odCl7aS5zZXQodC5pLHRoaXMpfSkpLHRoaXMuX2NhY2hlZFZpc3VhbFByaW1pdGl2ZXNOb2RlTWFwPWksdGhpcy5fY2FjaGVkVmlzdWFsUHJpbWl0aXZlc05vZGVzPW51bGwsdGhpcy5fc2VsZWN0aW9uLmRhdGEodGhpcy5fc2VsZWN0aW9uLmRhdGEoKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmR9KSkpLG51bGwhPXRoaXMuX2NsYXNzTmFtZSYmdGhpcy5fc2VsZWN0aW9uLmNsYXNzZWQodGhpcy5fY2xhc3NOYW1lLCEwKSx0aGlzLl9hcHBseURlZmF1bHRBdHRyaWJ1dGVzKHRoaXMuX3NlbGVjdGlvbil9LHQucHJvdG90eXBlLl9kcmF3U3RlcD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO1siZmlsbCIsInN0cm9rZSJdLmZvckVhY2goKGZ1bmN0aW9uKG4pe251bGwhPXQuYXR0clRvQXBwbGllZFByb2plY3RvcltuXSYmZS5fc2VsZWN0aW9uLmF0dHIobix0LmF0dHJUb0FwcGxpZWRQcm9qZWN0b3Jbbl0pfSkpLHQuYW5pbWF0b3IuYW5pbWF0ZSh0aGlzLl9zZWxlY3Rpb24sdC5hdHRyVG9BcHBsaWVkUHJvamVjdG9yKSxudWxsIT10aGlzLl9jbGFzc05hbWUmJnRoaXMuX3NlbGVjdGlvbi5jbGFzc2VkKHRoaXMuX2NsYXNzTmFtZSwhMCl9LHR9KSgpO2UuU1ZHRHJhd2VyPW59KSksRWd0PWJlKChmdW5jdGlvbih0LGUpewovKioKICAgICAqIENvcHlyaWdodCAyMDE3LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3ZhciB0PXRoaXM7dGhpcy5zY2FsZT0wLHRoaXMudHJhbnNsYXRlPTAsdGhpcy5jYWNoZWREb21haW49W251bGwsbnVsbF0sdGhpcy5sYXN0U2VlbkRvbWFpbj1bbnVsbCxudWxsXSx0aGlzLnVwZGF0ZURvbWFpbj1mdW5jdGlvbihlKXt0Lmxhc3RTZWVuRG9tYWluPWUuZ2V0VHJhbnNmb3JtYXRpb25Eb21haW4oKTt2YXIgbj1lLnNjYWxlVHJhbnNmb3JtYXRpb24odC5jYWNoZWREb21haW5bMV0pLWUuc2NhbGVUcmFuc2Zvcm1hdGlvbih0LmNhY2hlZERvbWFpblswXSksaT1lLnNjYWxlVHJhbnNmb3JtYXRpb24odC5sYXN0U2VlbkRvbWFpblsxXSktZS5zY2FsZVRyYW5zZm9ybWF0aW9uKHQubGFzdFNlZW5Eb21haW5bMF0pO3Quc2NhbGU9bi9pfHwxLHQudHJhbnNsYXRlPWUuc2NhbGVUcmFuc2Zvcm1hdGlvbih0LmNhY2hlZERvbWFpblswXSktZS5zY2FsZVRyYW5zZm9ybWF0aW9uKHQubGFzdFNlZW5Eb21haW5bMF0pKnQuc2NhbGV8fDB9fXJldHVybiB0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuc2NhbGU9MSx0aGlzLnRyYW5zbGF0ZT0wLHRoaXMuY2FjaGVkRG9tYWluPXRoaXMubGFzdFNlZW5Eb21haW59LHQucHJvdG90eXBlLnNldERvbWFpbj1mdW5jdGlvbih0KXt0aGlzLmNhY2hlZERvbWFpbj10LmdldFRyYW5zZm9ybWF0aW9uRG9tYWluKCl9LHR9KSgpLGk9KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLGkpe3ZhciByPXRoaXM7dGhpcy5yZW5kZXJDYWxsYmFjaz1lLHRoaXMuYXBwbHlUcmFuc2Zvcm1DYWxsYmFjaz1pLHRoaXMuZG9tYWluVHJhbnNmb3JtWD1uZXcgbix0aGlzLmRvbWFpblRyYW5zZm9ybVk9bmV3IG4sdGhpcy5yZW5kZXJEZWZlcnJlZD1mdW5jdGlvbigpe3IuYXBwbHlUcmFuc2Zvcm0oKSxjbGVhclRpbWVvdXQoci50aW1lb3V0VG9rZW4pLHIudGltZW91dFRva2VuPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ci5yZW5kZXJDYWxsYmFjaygpfSksdC5ERUZFUlJFRF9SRU5ERVJJTkdfREVMQVkpfX1yZXR1cm4gdC5wcm90b3R5cGUuc2V0RG9tYWlucz1mdW5jdGlvbih0LGUpe3QmJnRoaXMuZG9tYWluVHJhbnNmb3JtWC5zZXREb21haW4odCksZSYmdGhpcy5kb21haW5UcmFuc2Zvcm1ZLnNldERvbWFpbihlKSx0aGlzLnJlbmRlckRlZmVycmVkKCl9LHQucHJvdG90eXBlLnVwZGF0ZURvbWFpbnM9ZnVuY3Rpb24odCxlKXt0JiZ0aGlzLmRvbWFpblRyYW5zZm9ybVgudXBkYXRlRG9tYWluKHQpLGUmJnRoaXMuZG9tYWluVHJhbnNmb3JtWS51cGRhdGVEb21haW4oZSksdGhpcy5yZW5kZXJEZWZlcnJlZCgpfSx0LnByb3RvdHlwZS5yZXNldFRyYW5zZm9ybXM9ZnVuY3Rpb24oKXt0aGlzLmRvbWFpblRyYW5zZm9ybVgucmVzZXQoKSx0aGlzLmRvbWFpblRyYW5zZm9ybVkucmVzZXQoKSx0aGlzLmFwcGx5VHJhbnNmb3JtKCl9LHQucHJvdG90eXBlLmFwcGx5VHJhbnNmb3JtPWZ1bmN0aW9uKCl7dGhpcy5hcHBseVRyYW5zZm9ybUNhbGxiYWNrKHRoaXMuZG9tYWluVHJhbnNmb3JtWC50cmFuc2xhdGUsdGhpcy5kb21haW5UcmFuc2Zvcm1ZLnRyYW5zbGF0ZSx0aGlzLmRvbWFpblRyYW5zZm9ybVguc2NhbGUsdGhpcy5kb21haW5UcmFuc2Zvcm1ZLnNjYWxlKX0sdC5ERUZFUlJFRF9SRU5ERVJJTkdfREVMQVk9MjAwLHR9KSgpO2UuRGVmZXJyZWRSZW5kZXJlcj1pfSkpLFRndD1iZSgoZnVuY3Rpb24odCxlKXsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuUmVuZGVyZXI9SWZ0Lm1ha2VFbnVtKFsic3ZnIiwiY2FudmFzIl0pO3ZhciBuPShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dmFyIG49dC5jYWxsKHRoaXMpfHx0aGlzO24uX2RhdGFDaGFuZ2VkPSExLG4uX2F0dHJFeHRlbnRzPXt9LG4uX2FuaW1hdGU9ITEsbi5fYW5pbWF0b3JzPXt9LG4uX3Byb3BlcnR5RXh0ZW50cz17fSxuLl9yZXNldEVudGl0eVN0b3JlPWZ1bmN0aW9uKCl7bi5fY2FjaGVkRW50aXR5U3RvcmU9dm9pZCAwfSxuLl9vdmVyZmxvd0hpZGRlbj0hMCxuLmFkZENsYXNzKCJwbG90Iiksbi5fZGF0YXNldFRvRHJhd2VyPW5ldyBTbXQuTWFwLG4uX2F0dHJCaW5kaW5ncz1pZHQubWFwKCksbi5faW5jbHVkZWRWYWx1ZXNQcm92aWRlcj1mdW5jdGlvbih0LGUpe3JldHVybiBuLl9pbmNsdWRlZFZhbHVlc0ZvclNjYWxlKHQsZSl9LG4uX3JlbmRlckNhbGxiYWNrPWZ1bmN0aW9uKCl7cmV0dXJuIG4ucmVuZGVyKCl9LG4uX29uRGF0YXNldFVwZGF0ZUNhbGxiYWNrPWZ1bmN0aW9uKCl7cmV0dXJuIG4uX29uRGF0YXNldFVwZGF0ZSgpfSxuLl9wcm9wZXJ0eUJpbmRpbmdzPWlkdC5tYXAoKTt2YXIgaT0obmV3IEJmdC5FYXNpbmcpLm1heFRvdGFsRHVyYXRpb24oZS5fQU5JTUFUSU9OX01BWF9EVVJBVElPTik7cmV0dXJuIG4uYW5pbWF0b3IoZmd0LkFuaW1hdG9yLk1BSU4saSksbi5hbmltYXRvcihmZ3QuQW5pbWF0b3IuUkVTRVQsbmV3IEJmdC5OdWxsKSxuLl9kZWZlcnJlZFJlc2V0RW50aXR5U3RvcmU9U210LldpbmRvdy5kZWJvdW5jZShFZ3QuRGVmZXJyZWRSZW5kZXJlci5ERUZFUlJFRF9SRU5ERVJJTkdfREVMQVksbi5fcmVzZXRFbnRpdHlTdG9yZSksbn1yZXR1cm4gRGZ0Ll9fZXh0ZW5kcyhlLHQpLGUuZ2V0VG90YWxEcmF3VGltZT1mdW5jdGlvbih0LGUpe3JldHVybiBlLnJlZHVjZSgoZnVuY3Rpb24oZSxuKXtyZXR1cm4gZStuLmFuaW1hdG9yLnRvdGFsVGltZSh0Lmxlbmd0aCl9KSwwKX0sZS5hcHBseURyYXdTdGVwcz1mdW5jdGlvbih0LGUpe3JldHVybiB0Lm1hcCgoZnVuY3Rpb24odCl7dmFyIG49dC5hdHRyVG9Qcm9qZWN0b3IsaT17fTtyZXR1cm4gT2JqZWN0LmtleXMobikuZm9yRWFjaCgoZnVuY3Rpb24odCl7aVt0XT1mdW5jdGlvbihpLHIpe3JldHVybiBuW3RdKGkscixlKX19KSkse2F0dHJUb0FwcGxpZWRQcm9qZWN0b3I6aSxhbmltYXRvcjp0LmFuaW1hdG9yfX0pKX0sZS5wcm90b3R5cGUuYW5jaG9yPWZ1bmN0aW9uKGUpe3JldHVybiBlPU5mdC5jb2VyY2VFeHRlcm5hbEQzKGUpLHQucHJvdG90eXBlLmFuY2hvci5jYWxsKHRoaXMsZSksdGhpcy5fZGF0YUNoYW5nZWQ9ITAsdGhpcy5fcmVzZXRFbnRpdHlTdG9yZSgpLHRoaXMuX3VwZGF0ZUV4dGVudHMoKSx0aGlzfSxlLnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuX2lzU2V0dXB8fCh0LnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSxudWxsIT10aGlzLl9jYW52YXMmJnRoaXMuX2FwcGVuZENhbnZhc05vZGUoKSx0aGlzLl9yZW5kZXJBcmVhPXRoaXMuY29udGVudCgpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInJlbmRlci1hcmVhIiwhMCksdGhpcy5kYXRhc2V0cygpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3JldHVybiBlLl9jcmVhdGVOb2Rlc0ZvckRhdGFzZXQodCl9KSkpfSxlLnByb3RvdHlwZS5fYXBwZW5kQ2FudmFzTm9kZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZWxlbWVudCgpLnNlbGVjdCgiLnBsb3QtY2FudmFzLWNvbnRhaW5lciIpO3QuZW1wdHkoKSYmKHQ9dGhpcy5lbGVtZW50KCkuYXBwZW5kKCJkaXYiKS5jbGFzc2VkKCJwbG90LWNhbnZhcy1jb250YWluZXIiLCEwKSkubm9kZSgpLmFwcGVuZENoaWxkKHRoaXMuX2NhbnZhcy5ub2RlKCkpfSxlLnByb3RvdHlwZS5zZXRCb3VuZHM9ZnVuY3Rpb24oZSxuLGkscil7aWYodC5wcm90b3R5cGUuc2V0Qm91bmRzLmNhbGwodGhpcyxlLG4saSxyKSx0aGlzLl91cGRhdGVFeHRlbnRzKCksbnVsbCE9dGhpcy5fY2FudmFzKXtpZih0aGlzLl9idWZmZXJDYW52YXMmJiF0aGlzLl9idWZmZXJDYW52YXNWYWxpZCl7dGhpcy5fYnVmZmVyQ2FudmFzLmF0dHIoIndpZHRoIix0aGlzLl9jYW52YXMuYXR0cigid2lkdGgiKSksdGhpcy5fYnVmZmVyQ2FudmFzLmF0dHIoImhlaWdodCIsdGhpcy5fY2FudmFzLmF0dHIoImhlaWdodCIpKTt2YXIgbz10aGlzLl9idWZmZXJDYW52YXMubm9kZSgpLmdldENvbnRleHQoIjJkIik7aWYobyl7dmFyIGE9dGhpcy5fY2FudmFzLm5vZGUoKTthLndpZHRoPjAmJmEuaGVpZ2h0PjA/by5jYW52YXMud2lkdGg+MCYmby5jYW52YXMuaGVpZ2h0PjAmJm8uZHJhd0ltYWdlKGEsMCwwKTpjb25zb2xlLndhcm4oIkZhaWxlZCB0byBmaWxsIGJ1ZmZlciBjYW52YXMgd2l0aCB3aXRoIDB4MCBjYW52YXMiKX10aGlzLl9idWZmZXJDYW52YXNWYWxpZD0hMH12YXIgcz1udWxsIT13aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbz93aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbzoxO3RoaXMuX2NhbnZhcy5hdHRyKCJ3aWR0aCIsZSpzKSx0aGlzLl9jYW52YXMuYXR0cigiaGVpZ2h0IixuKnMpO3ZhciBsPXRoaXMuX2NhbnZhcy5ub2RlKCkuZ2V0Q29udGV4dCgiMmQiKTtpZihsJiYobC5zZXRUcmFuc2Zvcm0ocywwLDAscywwLDApLHRoaXMuX2J1ZmZlckNhbnZhcykpe3ZhciBjPXRoaXMuX2J1ZmZlckNhbnZhcy5ub2RlKCk7Yy53aWR0aD4wJiZjLmhlaWdodD4wP2wuY2FudmFzLndpZHRoPjAmJmwuY2FudmFzLmhlaWdodD4wJiZsLmRyYXdJbWFnZShjLDAsMCxlLG4pOmNvbnNvbGUud2FybigiRmFpbGVkIHRvIGZpbGwgY2FudmFzIHdpdGggMHgwIGJ1ZmZlciBjYW52YXMiKX19cmV0dXJuIHRoaXN9LGUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3QucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKSx0aGlzLl9zY2FsZXMoKS5mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gdC5vZmZVcGRhdGUoZS5fcmVuZGVyQ2FsbGJhY2spfSkpLHRoaXMuZGF0YXNldHMoW10pfSxlLnByb3RvdHlwZS5fY3JlYXRlTm9kZXNGb3JEYXRhc2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2RhdGFzZXRUb0RyYXdlci5nZXQodCk7cmV0dXJuInN2ZyI9PT10aGlzLnJlbmRlcmVyKCk/ZS51c2VTVkcodGhpcy5fcmVuZGVyQXJlYSk6ZS51c2VDYW52YXModGhpcy5fY2FudmFzKSxlfSxlLnByb3RvdHlwZS5fY3JlYXRlRHJhd2VyPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgU2d0LlByb3h5RHJhd2VyKChmdW5jdGlvbigpe3JldHVybiBuZXcgTWd0LlNWR0RyYXdlcigicGF0aCIsIiIpfSksKGZ1bmN0aW9uKHQpe3JldHVybiBuZXcgd2d0LkNhbnZhc0RyYXdlcih0LChmdW5jdGlvbigpe30pKX0pKX0sZS5wcm90b3R5cGUuX2dldEFuaW1hdG9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9hbmltYXRlT25OZXh0UmVuZGVyKCkmJnRoaXMuX2FuaW1hdG9yc1t0XXx8bmV3IEJmdC5OdWxsfSxlLnByb3RvdHlwZS5fb25EYXRhc2V0VXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlRXh0ZW50cygpLHRoaXMuX2RhdGFDaGFuZ2VkPSEwLHRoaXMuX3Jlc2V0RW50aXR5U3RvcmUoKSx0aGlzLnJlbmRlckxvd1ByaW9yaXR5KCl9LGUucHJvdG90eXBlLmF0dHI9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBudWxsPT1lP3RoaXMuX2F0dHJCaW5kaW5ncy5nZXQodCk6KHRoaXMuX2JpbmRBdHRyKHQsZSxuKSx0aGlzLnJlbmRlcigpLHRoaXMpfSxlLnByb3RvdHlwZS5fYmluZFByb3BlcnR5PWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciByPXRoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KHQpLG89bnVsbCE9cj9yLnNjYWxlOm51bGw7dGhpcy5fcHJvcGVydHlCaW5kaW5ncy5zZXQodCx7YWNjZXNzb3I6ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpmdW5jdGlvbigpe3JldHVybiBlfSxzY2FsZTpuLHBvc3RTY2FsZTppfSksbnVsbCE9byYmdGhpcy5fdW5pbnN0YWxsU2NhbGVGb3JLZXkobyx0KSxudWxsIT1uJiZ0aGlzLl9pbnN0YWxsU2NhbGVGb3JLZXkobix0KSx0aGlzLl9jbGVhckF0dHJUb1Byb2plY3RvckNhY2hlKCl9LGUucHJvdG90eXBlLl9iaW5kQXR0cj1mdW5jdGlvbih0LGUsbil7dmFyIGk9dGhpcy5fYXR0ckJpbmRpbmdzLmdldCh0KSxyPW51bGwhPWk/aS5zY2FsZTpudWxsO3RoaXMuX2F0dHJCaW5kaW5ncy5zZXQodCx7YWNjZXNzb3I6ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpmdW5jdGlvbigpe3JldHVybiBlfSxzY2FsZTpufSksbnVsbCE9ciYmdGhpcy5fdW5pbnN0YWxsU2NhbGVGb3JLZXkocix0KSxudWxsIT1uJiZ0aGlzLl9pbnN0YWxsU2NhbGVGb3JLZXkobix0KSx0aGlzLl9jbGVhckF0dHJUb1Byb2plY3RvckNhY2hlKCl9LGUucHJvdG90eXBlLl9jbGVhckF0dHJUb1Byb2plY3RvckNhY2hlPWZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXMuX2NhY2hlZEF0dHJUb1Byb2plY3Rvcn0sZS5wcm90b3R5cGUuX2dldEF0dHJUb1Byb2plY3Rvcj1mdW5jdGlvbigpe2lmKG51bGw9PXRoaXMuX2NhY2hlZEF0dHJUb1Byb2plY3Rvcil7dmFyIHQ9dGhpcy5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3IoKTtlLk9QVElNSVpFX01FTU9JWkVfUFJPSkVDVE9SUyYmKHQ9eGd0Lm1lbW9pemVQcm9qZWN0b3JzKHQpKSx0aGlzLl9jYWNoZWRBdHRyVG9Qcm9qZWN0b3I9dH1yZXR1cm4gU210LmFzc2lnbih7fSx0aGlzLl9jYWNoZWRBdHRyVG9Qcm9qZWN0b3IpfSxlLnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3I9ZnVuY3Rpb24oKXt2YXIgdD17fTt0aGlzLl9hdHRyQmluZGluZ3MuZWFjaCgoZnVuY3Rpb24obixpKXt0W2ldPWUuX3NjYWxlZEFjY2Vzc29yKG4pfSkpO3ZhciBuPXRoaXMuX3Byb3BlcnR5UHJvamVjdG9ycygpO3JldHVybiBPYmplY3Qua2V5cyhuKS5mb3JFYWNoKChmdW5jdGlvbihlKXtudWxsPT10W2VdJiYodFtlXT1uW2VdKX0pKSx0fSxlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseT1mdW5jdGlvbigpe3JldHVybiB0LnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHRoaXMpLHRoaXMuX2lzQW5jaG9yZWQmJih0aGlzLl9wYWludCgpLHRoaXMuX2RhdGFDaGFuZ2VkPSExKSx0aGlzfSxlLnByb3RvdHlwZS5yZW5kZXJMb3dQcmlvcml0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZW5kZXJDYWxsYmFjaygpLHRoaXN9LGUucHJvdG90eXBlLmFuaW1hdGVkPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX2FuaW1hdGU6KHRoaXMuX2FuaW1hdGU9dCx0aGlzKX0sZS5wcm90b3R5cGUuZGV0YWNoPWZ1bmN0aW9uKCl7cmV0dXJuIHQucHJvdG90eXBlLmRldGFjaC5jYWxsKHRoaXMpLHRoaXMuX3VwZGF0ZUV4dGVudHMoKSx0aGlzfSxlLnByb3RvdHlwZS5fc2NhbGVzPWZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuX2F0dHJCaW5kaW5ncy5lYWNoKChmdW5jdGlvbihlLG4pe3ZhciBpPWUuc2NhbGU7bnVsbCE9aSYmLTE9PT10LmluZGV4T2YoaSkmJnQucHVzaChpKX0pKSx0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmVhY2goKGZ1bmN0aW9uKGUsbil7dmFyIGk9ZS5zY2FsZTtudWxsIT1pJiYtMT09PXQuaW5kZXhPZihpKSYmdC5wdXNoKGkpfSkpLHR9LGUucHJvdG90eXBlLl91cGRhdGVFeHRlbnRzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9yZXNldEVudGl0eVN0b3JlKCksdGhpcy5fc2NhbGVzKCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuYWRkSW5jbHVkZWRWYWx1ZXNQcm92aWRlcih0Ll9pbmNsdWRlZFZhbHVlc1Byb3ZpZGVyKX0pKX0sZS5wcm90b3R5cGUuX2ZpbHRlckZvclByb3BlcnR5PWZ1bmN0aW9uKHQpe3JldHVybiBudWxsfSxlLnByb3RvdHlwZS5nZXRFeHRlbnRzRm9yQXR0cj1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKG51bGw9PXRoaXMuX2F0dHJFeHRlbnRzW3RdKXt2YXIgbj14Z3QubWVtVGh1bmsoKGZ1bmN0aW9uKCl7cmV0dXJuIGUuZGF0YXNldHMoKX0pLChmdW5jdGlvbigpe3JldHVybiBlLl9hdHRyQmluZGluZ3MuZ2V0KHQpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG51bGw9PWV8fG51bGw9PWUuYWNjZXNzb3I/bnVsbDp0Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGkodCxlLG51bGwpfSkpfSkpO3RoaXMuX2F0dHJFeHRlbnRzW3RdPW59cmV0dXJuIHRoaXMuX2F0dHJFeHRlbnRzW3RdKCl9LGUucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKG51bGw9PXRoaXMuX3Byb3BlcnR5RXh0ZW50c1t0XSl7dmFyIG49eGd0Lm1lbVRodW5rKChmdW5jdGlvbigpe3JldHVybiBlLmRhdGFzZXRzKCl9KSwoZnVuY3Rpb24oKXtyZXR1cm4gZS5fcHJvcGVydHlCaW5kaW5ncy5nZXQodCl9KSwoZnVuY3Rpb24oKXtyZXR1cm4gZS5fZmlsdGVyRm9yUHJvcGVydHkodCl9KSwoZnVuY3Rpb24odCxlLG4pe3JldHVybiBudWxsPT1lfHxudWxsPT1lLmFjY2Vzc29yP251bGw6dC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBpKHQsZSxuKX0pKX0pKTt0aGlzLl9wcm9wZXJ0eUV4dGVudHNbdF09bn1yZXR1cm4gdGhpcy5fcHJvcGVydHlFeHRlbnRzW3RdKCl9LGUucHJvdG90eXBlLl9pbmNsdWRlZFZhbHVlc0ZvclNjYWxlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztpZighdGhpcy5faXNBbmNob3JlZCYmIWUpcmV0dXJuW107dmFyIGk9W107cmV0dXJuIHRoaXMuX2F0dHJCaW5kaW5ncy5lYWNoKChmdW5jdGlvbihlLHIpe2lmKGUuc2NhbGU9PT10KXt2YXIgbz1uLmdldEV4dGVudHNGb3JBdHRyKHIpO251bGwhPW8mJihpPWkuY29uY2F0KGlkdC5tZXJnZShvKSkpfX0pKSx0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmVhY2goKGZ1bmN0aW9uKGUscil7aWYoZS5zY2FsZT09PXQpe3ZhciBvPW4uZ2V0RXh0ZW50c0ZvclByb3BlcnR5KHIpO251bGwhPW8mJihpPWkuY29uY2F0KGlkdC5tZXJnZShvKSkpfX0pKSxpfSxlLnByb3RvdHlwZS5hbmltYXRvcj1mdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT1lP3RoaXMuX2FuaW1hdG9yc1t0XToodGhpcy5fYW5pbWF0b3JzW3RdPWUsdGhpcyl9LGUucHJvdG90eXBlLnJlbmRlcmVyPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHZvaWQgMD09PXQ/bnVsbD09dGhpcy5fY2FudmFzPyJzdmciOiJjYW52YXMiOihudWxsPT10aGlzLl9jYW52YXMmJiJjYW52YXMiPT09dD8odGhpcy5fY2FudmFzPWlkdC5zZWxlY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIikpLmNsYXNzZWQoInBsb3QtY2FudmFzIiwhMCksdGhpcy5fYnVmZmVyQ2FudmFzPWlkdC5zZWxlY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIikpLG51bGwhPXRoaXMuZWxlbWVudCgpJiZ0aGlzLl9hcHBlbmRDYW52YXNOb2RlKCksdGhpcy5fZGF0YXNldFRvRHJhd2VyLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QudXNlQ2FudmFzKGUuX2NhbnZhcyl9KSksdGhpcy5yZW5kZXIoKSk6bnVsbCE9dGhpcy5fY2FudmFzJiYic3ZnIj09dCYmKHRoaXMuX2NhbnZhcy5yZW1vdmUoKSx0aGlzLl9jYW52YXM9bnVsbCx0aGlzLl9idWZmZXJDYW52YXM9bnVsbCx0aGlzLl9kYXRhc2V0VG9EcmF3ZXIuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC51c2VTVkcoZS5fcmVuZGVyQXJlYSl9KSksdGhpcy5yZW5kZXIoKSksdGhpcyl9LGUucHJvdG90eXBlLmFkZERhdGFzZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2FkZERhdGFzZXQodCksdGhpcy5fb25EYXRhc2V0VXBkYXRlKCksdGhpc30sZS5wcm90b3R5cGUuX2FkZERhdGFzZXQ9ZnVuY3Rpb24odCl7dGhpcy5fcmVtb3ZlRGF0YXNldCh0KTt2YXIgZT10aGlzLl9jcmVhdGVEcmF3ZXIodCk7cmV0dXJuIHRoaXMuX2RhdGFzZXRUb0RyYXdlci5zZXQodCxlKSx0aGlzLl9pc1NldHVwJiZ0aGlzLl9jcmVhdGVOb2Rlc0ZvckRhdGFzZXQodCksdC5vblVwZGF0ZSh0aGlzLl9vbkRhdGFzZXRVcGRhdGVDYWxsYmFjayksdGhpc30sZS5wcm90b3R5cGUucmVtb3ZlRGF0YXNldD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmVtb3ZlRGF0YXNldCh0KSx0aGlzLl9vbkRhdGFzZXRVcGRhdGUoKSx0aGlzfSxlLnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldD1mdW5jdGlvbih0KXtyZXR1cm4tMT09PXRoaXMuZGF0YXNldHMoKS5pbmRleE9mKHQpfHwodGhpcy5fcmVtb3ZlRGF0YXNldE5vZGVzKHQpLHQub2ZmVXBkYXRlKHRoaXMuX29uRGF0YXNldFVwZGF0ZUNhbGxiYWNrKSx0aGlzLl9kYXRhc2V0VG9EcmF3ZXIuZGVsZXRlKHQpKSx0aGlzfSxlLnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldE5vZGVzPWZ1bmN0aW9uKHQpe3RoaXMuX2RhdGFzZXRUb0RyYXdlci5nZXQodCkucmVtb3ZlKCl9LGUucHJvdG90eXBlLmRhdGFzZXRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1bXTtyZXR1cm4gdGhpcy5fZGF0YXNldFRvRHJhd2VyLmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4ucHVzaChlKX0pKSxudWxsPT10P246KG4uZm9yRWFjaCgoZnVuY3Rpb24odCl7cmV0dXJuIGUuX3JlbW92ZURhdGFzZXQodCl9KSksdC5mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gZS5fYWRkRGF0YXNldCh0KX0pKSx0aGlzLl9vbkRhdGFzZXRVcGRhdGUoKSx0aGlzKX0sZS5wcm90b3R5cGUuX2dlbmVyYXRlRHJhd1N0ZXBzPWZ1bmN0aW9uKCl7cmV0dXJuW3thdHRyVG9Qcm9qZWN0b3I6dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksYW5pbWF0b3I6bmV3IEJmdC5OdWxsfV19LGUucHJvdG90eXBlLl9hZGRpdGlvbmFsUGFpbnQ9ZnVuY3Rpb24odCl7fSxlLnByb3RvdHlwZS5fYnVpbGRMaWdodHdlaWdodFBsb3RFbnRpdGllcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49W107cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24odCxpKXtmb3IodmFyIHI9ZS5fZGF0YXNldFRvRHJhd2VyLmdldCh0KSxvPTAsYT10LmRhdGEoKSxzPWEubGVuZ3RoLGw9ZnVuY3Rpb24ocyl7dmFyIGw9YVtzXSxjPWUuX3BpeGVsUG9pbnQobCxzLHQpO2lmKFNtdC5NYXRoLmlzTmFOKGMueCl8fFNtdC5NYXRoLmlzTmFOKGMueSkpcmV0dXJuImNvbnRpbnVlIjt2YXIgdT1lO24ucHVzaCh7ZGF0dW06bCxnZXQgcG9zaXRpb24oKXtyZXR1cm4gdS5fcGl4ZWxQb2ludC5jYWxsKHUsbCxzLHQpfSxpbmRleDpzLGRhdGFzZXQ6dCxkYXRhc2V0SW5kZXg6aSxjb21wb25lbnQ6ZSxkcmF3ZXI6cix2YWxpZERhdHVtSW5kZXg6b30pLG8rK30sYz0wO2M8cztjKyspbChjKX0pKSxufSxlLnByb3RvdHlwZS5fZ2V0RGF0YVRvRHJhdz1mdW5jdGlvbigpe3ZhciB0PW5ldyBTbXQuTWFwO3JldHVybiB0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIHQuc2V0KGUsZS5kYXRhKCkpfSkpLHR9LGUucHJvdG90eXBlLl9wYWludD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7ZGVsZXRlIHRoaXMuX2NhY2hlZEF0dHJUb1Byb2plY3Rvcjt2YXIgbj10aGlzLl9nZW5lcmF0ZURyYXdTdGVwcygpLGk9dGhpcy5fZ2V0RGF0YVRvRHJhdygpLHI9dGhpcy5kYXRhc2V0cygpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHQuX2RhdGFzZXRUb0RyYXdlci5nZXQoZSl9KSk7aWYoImNhbnZhcyI9PT10aGlzLnJlbmRlcmVyKCkpe3ZhciBvPXRoaXMuX2NhbnZhcy5ub2RlKCk7by5nZXRDb250ZXh0KCIyZCIpLmNsZWFyUmVjdCgwLDAsby5jbGllbnRXaWR0aCxvLmNsaWVudEhlaWdodCksdGhpcy5fYnVmZmVyQ2FudmFzVmFsaWQ9ITF9dGhpcy5kYXRhc2V0cygpLmZvckVhY2goKGZ1bmN0aW9uKHQsbyl7dmFyIGE9ZS5hcHBseURyYXdTdGVwcyhuLHQpO3Jbb10uZHJhdyhpLmdldCh0KSxhKX0pKTt2YXIgYT10aGlzLmRhdGFzZXRzKCkubWFwKChmdW5jdGlvbih0LHIpe3JldHVybiBlLmdldFRvdGFsRHJhd1RpbWUoaS5nZXQodCksbil9KSkscz1TbXQuTWF0aC5tYXgoYSwwKTt0aGlzLl9hZGRpdGlvbmFsUGFpbnQocyl9LGUucHJvdG90eXBlLnNlbGVjdGlvbnM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZih2b2lkIDA9PT10JiYodD10aGlzLmRhdGFzZXRzKCkpLCJjYW52YXMiPT09dGhpcy5yZW5kZXJlcigpKXJldHVybiBpZHQuc2VsZWN0QWxsKCk7dmFyIG49W107cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGk9ZS5fZGF0YXNldFRvRHJhd2VyLmdldCh0KTtpZihudWxsIT1pKXt2YXIgcj1pLmdldFZpc3VhbFByaW1pdGl2ZXMoKTtuLnB1c2guYXBwbHkobixyKX19KSksaWR0LnNlbGVjdEFsbChuKX0sZS5wcm90b3R5cGUuZW50aXRpZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdGhpcy5fZ2V0RW50aXR5U3RvcmUodCkuZW50aXRpZXMoKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBlLl9saWdodHdlaWdodFBsb3RFbnRpdHlUb1Bsb3RFbnRpdHkodCl9KSl9LGUucHJvdG90eXBlLmZpbHRlckVudGl0aWVzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHRoaXMuX2dldEVudGl0eVN0b3JlKCkuZW50aXRpZXMoKS5maWx0ZXIodCkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gZS5fbGlnaHR3ZWlnaHRQbG90RW50aXR5VG9QbG90RW50aXR5KHQpfSkpfSxlLnByb3RvdHlwZS5fZ2V0RW50aXR5U3RvcmU9ZnVuY3Rpb24odCl7dmFyIGUsbj10aGlzLGk9ZnVuY3Rpb24odCl7cmV0dXJuIG4uX2VudGl0eUJvdW5kcyh0KX07cmV0dXJuIHZvaWQgMCE9PXQ/KChlPW5ldyBTbXQuRW50aXR5U3RvcmUpLmFkZEFsbCh0aGlzLl9idWlsZExpZ2h0d2VpZ2h0UGxvdEVudGl0aWVzKHQpLGksdGhpcy5fbG9jYWxPcmlnaW5Cb3VuZHMoKSksZSk6KHZvaWQgMD09PXRoaXMuX2NhY2hlZEVudGl0eVN0b3JlJiYoKGU9bmV3IFNtdC5FbnRpdHlTdG9yZSkuYWRkQWxsKHRoaXMuX2J1aWxkTGlnaHR3ZWlnaHRQbG90RW50aXRpZXModGhpcy5kYXRhc2V0cygpKSxpLHRoaXMuX2xvY2FsT3JpZ2luQm91bmRzKCkpLHRoaXMuX2NhY2hlZEVudGl0eVN0b3JlPWUpLHRoaXMuX2NhY2hlZEVudGl0eVN0b3JlKX0sZS5wcm90b3R5cGUuX2xvY2FsT3JpZ2luQm91bmRzPWZ1bmN0aW9uKCl7cmV0dXJue3RvcExlZnQ6e3g6MCx5OjB9LGJvdHRvbVJpZ2h0Ont4OnRoaXMud2lkdGgoKSx5OnRoaXMuaGVpZ2h0KCl9fX0sZS5wcm90b3R5cGUuX2VudGl0eUJvdW5kcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9waXhlbFBvaW50KHQuZGF0dW0sdC5pbmRleCx0LmRhdGFzZXQpO3JldHVybnt4OmUueCx5OmUueSx3aWR0aDowLGhlaWdodDowfX0sZS5wcm90b3R5cGUuX2xpZ2h0d2VpZ2h0UGxvdEVudGl0eVRvUGxvdEVudGl0eT1mdW5jdGlvbih0KXtyZXR1cm57Ym91bmRzOnRoaXMuX2VudGl0eUJvdW5kcyh0KSxjb21wb25lbnQ6dC5jb21wb25lbnQsZGF0YXNldDp0LmRhdGFzZXQsZGF0YXNldEluZGV4OnQuZGF0YXNldEluZGV4LGRhdHVtOnQuZGF0dW0saW5kZXg6dC5pbmRleCxwb3NpdGlvbjp0LnBvc2l0aW9uLHNlbGVjdGlvbjppZHQuc2VsZWN0KHQuZHJhd2VyLmdldFZpc3VhbFByaW1pdGl2ZUF0SW5kZXgodC52YWxpZERhdHVtSW5kZXgpKX19LGUucHJvdG90eXBlLmVudGl0aWVzQXQ9ZnVuY3Rpb24odCl7dGhyb3cgbmV3IEVycm9yKCJwbG90cyBtdXN0IGltcGxlbWVudCBlbnRpdGllc0F0Iil9LGUucHJvdG90eXBlLmVudGl0eU5lYXJlc3Q9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZ2V0RW50aXR5U3RvcmUoKS5lbnRpdHlOZWFyZXN0KHQpO3JldHVybiB2b2lkIDA9PT1lP3ZvaWQgMDp0aGlzLl9saWdodHdlaWdodFBsb3RFbnRpdHlUb1Bsb3RFbnRpdHkoZSl9LGUucHJvdG90eXBlLmVudGl0aWVzSW49ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5lbnRpdGllc0luQm91bmRzKG51bGw9PWU/e3g6dC50b3BMZWZ0LngseTp0LnRvcExlZnQueSx3aWR0aDp0LmJvdHRvbVJpZ2h0LngtdC50b3BMZWZ0LngsaGVpZ2h0OnQuYm90dG9tUmlnaHQueS10LnRvcExlZnQueX06e3g6dC5taW4seTplLm1pbix3aWR0aDp0Lm1heC10Lm1pbixoZWlnaHQ6ZS5tYXgtZS5taW59KX0sZS5wcm90b3R5cGUuZW50aXRpZXNJbkJvdW5kcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49dGhpcy5fZ2V0RW50aXR5U3RvcmUoKS5lbnRpdGllc0luQm91bmRzKHQpO2lmKG4pcmV0dXJuIG4ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gZS5fbGlnaHR3ZWlnaHRQbG90RW50aXR5VG9QbG90RW50aXR5KHQpfSkpfSxlLnByb3RvdHlwZS5lbnRpdGllc0luWEJvdW5kcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49dGhpcy5fZ2V0RW50aXR5U3RvcmUoKS5lbnRpdGllc0luWEJvdW5kcyh0KTtpZihuKXJldHVybiBuLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGUuX2xpZ2h0d2VpZ2h0UGxvdEVudGl0eVRvUGxvdEVudGl0eSh0KX0pKX0sZS5wcm90b3R5cGUuZW50aXRpZXNJbllCb3VuZHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXRoaXMuX2dldEVudGl0eVN0b3JlKCkuZW50aXRpZXNJbllCb3VuZHModCk7aWYobilyZXR1cm4gbi5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBlLl9saWdodHdlaWdodFBsb3RFbnRpdHlUb1Bsb3RFbnRpdHkodCl9KSl9LGUucHJvdG90eXBlLl91bmluc3RhbGxTY2FsZUZvcktleT1mdW5jdGlvbih0LGUpe3Qub2ZmVXBkYXRlKHRoaXMuX3JlbmRlckNhbGxiYWNrKSx0Lm9mZlVwZGF0ZSh0aGlzLl9kZWZlcnJlZFJlc2V0RW50aXR5U3RvcmUpLHQucmVtb3ZlSW5jbHVkZWRWYWx1ZXNQcm92aWRlcih0aGlzLl9pbmNsdWRlZFZhbHVlc1Byb3ZpZGVyKX0sZS5wcm90b3R5cGUuX2luc3RhbGxTY2FsZUZvcktleT1mdW5jdGlvbih0LGUpe3Qub25VcGRhdGUodGhpcy5fcmVuZGVyQ2FsbGJhY2spLHQub25VcGRhdGUodGhpcy5fZGVmZXJyZWRSZXNldEVudGl0eVN0b3JlKSx0LmFkZEluY2x1ZGVkVmFsdWVzUHJvdmlkZXIodGhpcy5faW5jbHVkZWRWYWx1ZXNQcm92aWRlcil9LGUucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnM9ZnVuY3Rpb24oKXtyZXR1cm57fX0sZS5fc2NhbGVkQWNjZXNzb3I9ZnVuY3Rpb24odCl7dmFyIGU9dC5zY2FsZSxuPXQuYWNjZXNzb3IsaT10LnBvc3RTY2FsZSxyPW51bGw9PWU/bjpmdW5jdGlvbih0LGkscil7cmV0dXJuIGUuc2NhbGUobih0LGkscikpfTtyZXR1cm4gbnVsbD09aT9yOmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gaShyKHQsZSxuKSx0LGUsbil9fSxlLnByb3RvdHlwZS5fcGl4ZWxQb2ludD1mdW5jdGlvbih0LGUsbil7cmV0dXJue3g6MCx5OjB9fSxlLnByb3RvdHlwZS5fYW5pbWF0ZU9uTmV4dFJlbmRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hbmltYXRlJiZ0aGlzLl9kYXRhQ2hhbmdlZH0sZS5PUFRJTUlaRV9NRU1PSVpFX1BST0pFQ1RPUlM9ITEsZS5fQU5JTUFUSU9OX01BWF9EVVJBVElPTj02MDAsZX0pKFRtdC5Db21wb25lbnQpO2Z1bmN0aW9uIGkodCxlLG4pe3ZhciBpPWUuYWNjZXNzb3Iscj1lLnNjYWxlO2lmKG51bGw9PXIpcmV0dXJuW107dmFyIG89dC5kYXRhKCk7bnVsbCE9biYmKG89by5maWx0ZXIoKGZ1bmN0aW9uKGUsaSl7cmV0dXJuIG4oZSxpLHQpfSkpKTt2YXIgYT1vLm1hcCgoZnVuY3Rpb24oZSxuKXtyZXR1cm4gaShlLG4sdCl9KSk7cmV0dXJuIHIuZXh0ZW50T2ZWYWx1ZXMoYSl9ZS5QbG90PW59KSksQ2d0PWJlKChmdW5jdGlvbih0LGUpewovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBEZnQuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUuZW50aXR5TmVhcmVzdD1mdW5jdGlvbih0KXt2YXIgZSxuPTEvMDtyZXR1cm4gdGhpcy5jb21wb25lbnRzKCkuZm9yRWFjaCgoZnVuY3Rpb24oaSl7dmFyIHI9aS5lbnRpdHlOZWFyZXN0KHQpO2lmKG51bGwhPXIpe3ZhciBvPVNtdC5NYXRoLmRpc3RhbmNlU3F1YXJlZChyLnBvc2l0aW9uLHQpO288PW4mJihuPW8sZT1yKX19KSksZX0sZS5wcm90b3R5cGUuYXBwZW5kPWZ1bmN0aW9uKGUpe2lmKG51bGwhPWUmJiEoZSBpbnN0YW5jZW9mIFRndC5QbG90KSl0aHJvdyBuZXcgRXJyb3IoIlBsb3QgR3JvdXAgb25seSBhY2NlcHRzIHBsb3RzIik7cmV0dXJuIHQucHJvdG90eXBlLmFwcGVuZC5jYWxsKHRoaXMsZSksdGhpc30sZX0pKGNndC5Hcm91cCk7ZS5QbG90R3JvdXA9bn0pKSxBZ3Q9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt2b2lkIDA9PT1lJiYoZT1bXSk7dmFyIG49dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBuLl9yb3dQYWRkaW5nPTAsbi5fY29sdW1uUGFkZGluZz0wLG4uX3Jvd3M9W10sbi5fcm93V2VpZ2h0cz1bXSxuLl9jb2x1bW5XZWlnaHRzPVtdLG4uX25Sb3dzPTAsbi5fbkNvbHM9MCxuLl9jYWxjdWxhdGVkTGF5b3V0PW51bGwsbi5hZGRDbGFzcygidGFibGUiKSxlLmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7dC5mb3JFYWNoKChmdW5jdGlvbih0LGkpe251bGwhPXQmJm4uYWRkKHQsZSxpKX0pKX0pKSxufXJldHVybiBEZnQuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUuX2ZvckVhY2g9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0aGlzLl9uUm93cztlKyspZm9yKHZhciBuPTA7bjx0aGlzLl9uQ29scztuKyspbnVsbCE9dGhpcy5fcm93c1tlXVtuXSYmdCh0aGlzLl9yb3dzW2VdW25dKX0sZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dGhpcy5fblJvd3M7ZSsrKWZvcih2YXIgbj0wO248dGhpcy5fbkNvbHM7bisrKWlmKHRoaXMuX3Jvd3NbZV1bbl09PT10KXJldHVybiEwO3JldHVybiExfSxlLnByb3RvdHlwZS5jb21wb25lbnRBdD1mdW5jdGlvbih0LGUpe3JldHVybiB0PDB8fHQ+PXRoaXMuX25Sb3dzfHxlPDB8fGU+PXRoaXMuX25Db2xzP251bGw6dGhpcy5fcm93c1t0XVtlXX0sZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHQsZSxuKXtpZihudWxsPT10KXRocm93IEVycm9yKCJDYW5ub3QgYWRkIG51bGwgdG8gYSB0YWJsZSBjZWxsIik7aWYoIXRoaXMuaGFzKHQpKXtpZihudWxsIT0odGhpcy5fcm93c1tlXSYmdGhpcy5fcm93c1tlXVtuXSkpdGhyb3cgbmV3IEVycm9yKCJjZWxsIGlzIG9jY3VwaWVkIik7dC5kZXRhY2goKSx0aGlzLl9uUm93cz1NYXRoLm1heChlKzEsdGhpcy5fblJvd3MpLHRoaXMuX25Db2xzPU1hdGgubWF4KG4rMSx0aGlzLl9uQ29scyksdGhpcy5fcGFkVGFibGVUb1NpemUodGhpcy5fblJvd3MsdGhpcy5fbkNvbHMpLHRoaXMuX3Jvd3NbZV1bbl09dCx0aGlzLl9hZG9wdEFuZEFuY2hvcih0KSx0aGlzLnJlZHJhdygpfXJldHVybiB0aGlzfSxlLnByb3RvdHlwZS5fcmVtb3ZlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dGhpcy5fblJvd3M7ZSsrKWZvcih2YXIgbj0wO248dGhpcy5fbkNvbHM7bisrKWlmKHRoaXMuX3Jvd3NbZV1bbl09PT10KXJldHVybiB0aGlzLl9yb3dzW2VdW25dPW51bGwsITA7cmV0dXJuITF9LGUucHJvdG90eXBlLl9pdGVyYXRlTGF5b3V0PWZ1bmN0aW9uKHQsbixpKXt2b2lkIDA9PT1pJiYoaT0hMSk7Zm9yKHZhciByLG8sYSxzLGwsYz10aGlzLl9yb3dzLHU9aWR0LnRyYW5zcG9zZSh0aGlzLl9yb3dzKSxoPXQtdGhpcy5fY29sdW1uUGFkZGluZyoodGhpcy5fbkNvbHMtMSksZD1uLXRoaXMuX3Jvd1BhZGRpbmcqKHRoaXMuX25Sb3dzLTEpLHA9ZS5fY2FsY0NvbXBvbmVudFdlaWdodHModGhpcy5fcm93V2VpZ2h0cyxjLChmdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dHx8dC5maXhlZEhlaWdodCgpfSkpLGY9ZS5fY2FsY0NvbXBvbmVudFdlaWdodHModGhpcy5fY29sdW1uV2VpZ2h0cyx1LChmdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dHx8dC5maXhlZFdpZHRoKCl9KSksbT1mLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIDA9PT10Py41OnR9KSksZz1wLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIDA9PT10Py41OnR9KSksXz1lLl9jYWxjUHJvcG9ydGlvbmFsU3BhY2UobSxoKSx5PWUuX2NhbGNQcm9wb3J0aW9uYWxTcGFjZShnLGQpLHY9U210LkFycmF5LmNyZWF0ZUZpbGxlZEFycmF5KDAsdGhpcy5fbkNvbHMpLGI9U210LkFycmF5LmNyZWF0ZUZpbGxlZEFycmF5KDAsdGhpcy5fblJvd3MpLHg9MDs7KXt2YXIgdz1TbXQuQXJyYXkuYWRkKGIseSksUz1TbXQuQXJyYXkuYWRkKHYsXyk7dj0oYT10aGlzLl9kZXRlcm1pbmVHdWFyYW50ZWVzKFMsdyxpKSkuZ3VhcmFudGVlZFdpZHRocyxiPWEuZ3VhcmFudGVlZEhlaWdodHMscz1hLndhbnRzV2lkdGhBcnIuc29tZSgoZnVuY3Rpb24odCl7cmV0dXJuIHR9KSksbD1hLndhbnRzSGVpZ2h0QXJyLnNvbWUoKGZ1bmN0aW9uKHQpe3JldHVybiB0fSkpO3ZhciBNPXIsRT1vO3I9aC1pZHQuc3VtKGEuZ3VhcmFudGVlZFdpZHRocyksbz1kLWlkdC5zdW0oYS5ndWFyYW50ZWVkSGVpZ2h0cyk7dmFyIFQ9dm9pZCAwO3M/KFQ9YS53YW50c1dpZHRoQXJyLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQ/LjE6MH0pKSxUPVNtdC5BcnJheS5hZGQoVCxmKSk6VD1mO3ZhciBDPXZvaWQgMDtpZihsPyhDPWEud2FudHNIZWlnaHRBcnIubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdD8uMTowfSkpLEM9U210LkFycmF5LmFkZChDLHApKTpDPXAsXz1lLl9jYWxjUHJvcG9ydGlvbmFsU3BhY2UoVCxyKSx5PWUuX2NhbGNQcm9wb3J0aW9uYWxTcGFjZShDLG8pLHgrKywhKHI+MCYmciE9PU18fG8+MCYmbyE9PUUpKWJyZWFrO2lmKHg+NSlicmVha31yZXR1cm4gcj1oLWlkdC5zdW0oYS5ndWFyYW50ZWVkV2lkdGhzKSxvPWQtaWR0LnN1bShhLmd1YXJhbnRlZWRIZWlnaHRzKSx7Y29sUHJvcG9ydGlvbmFsU3BhY2U6Xz1lLl9jYWxjUHJvcG9ydGlvbmFsU3BhY2UoZixyKSxyb3dQcm9wb3J0aW9uYWxTcGFjZTp5PWUuX2NhbGNQcm9wb3J0aW9uYWxTcGFjZShwLG8pLGd1YXJhbnRlZWRXaWR0aHM6YS5ndWFyYW50ZWVkV2lkdGhzLGd1YXJhbnRlZWRIZWlnaHRzOmEuZ3VhcmFudGVlZEhlaWdodHMsd2FudHNXaWR0aDpzLHdhbnRzSGVpZ2h0Omx9fSxlLnByb3RvdHlwZS5fZGV0ZXJtaW5lR3VhcmFudGVlcz1mdW5jdGlvbih0LGUsbil7dm9pZCAwPT09biYmKG49ITEpO3ZhciBpPVNtdC5BcnJheS5jcmVhdGVGaWxsZWRBcnJheSgwLHRoaXMuX25Db2xzKSxyPVNtdC5BcnJheS5jcmVhdGVGaWxsZWRBcnJheSgwLHRoaXMuX25Sb3dzKSxvPVNtdC5BcnJheS5jcmVhdGVGaWxsZWRBcnJheSghMSx0aGlzLl9uQ29scyksYT1TbXQuQXJyYXkuY3JlYXRlRmlsbGVkQXJyYXkoITEsdGhpcy5fblJvd3MpO3JldHVybiB0aGlzLl9yb3dzLmZvckVhY2goKGZ1bmN0aW9uKHMsbCl7cy5mb3JFYWNoKChmdW5jdGlvbihzLGMpe3ZhciB1O3U9bnVsbCE9cz9zLnJlcXVlc3RlZFNwYWNlKHRbY10sZVtsXSk6e21pbldpZHRoOjAsbWluSGVpZ2h0OjB9O3ZhciBoPW4/TWF0aC5taW4odS5taW5XaWR0aCx0W2NdKTp1Lm1pbldpZHRoO2lbY109TWF0aC5tYXgoaVtjXSxoKTt2YXIgZD1uP01hdGgubWluKHUubWluSGVpZ2h0LGVbbF0pOnUubWluSGVpZ2h0O3JbbF09TWF0aC5tYXgocltsXSxkKSxvW2NdPW9bY118fHUubWluV2lkdGg+dFtjXSxhW2xdPWFbbF18fHUubWluSGVpZ2h0PmVbbF19KSl9KSkse2d1YXJhbnRlZWRXaWR0aHM6aSxndWFyYW50ZWVkSGVpZ2h0czpyLHdhbnRzV2lkdGhBcnI6byx3YW50c0hlaWdodEFycjphfX0sZS5wcm90b3R5cGUucmVxdWVzdGVkU3BhY2U9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fY2FsY3VsYXRlZExheW91dD10aGlzLl9pdGVyYXRlTGF5b3V0KHQsZSkse21pbldpZHRoOmlkdC5zdW0odGhpcy5fY2FsY3VsYXRlZExheW91dC5ndWFyYW50ZWVkV2lkdGhzKSxtaW5IZWlnaHQ6aWR0LnN1bSh0aGlzLl9jYWxjdWxhdGVkTGF5b3V0Lmd1YXJhbnRlZWRIZWlnaHRzKX19LGUucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24oZSxuLGkpe3ZhciByPXRoaXM7dC5wcm90b3R5cGUuY29tcHV0ZUxheW91dC5jYWxsKHRoaXMsZSxuLGkpO3ZhciBvPWlkdC5zdW0odGhpcy5fY2FsY3VsYXRlZExheW91dC5ndWFyYW50ZWVkV2lkdGhzKSxhPWlkdC5zdW0odGhpcy5fY2FsY3VsYXRlZExheW91dC5ndWFyYW50ZWVkSGVpZ2h0cykscz10aGlzLl9jYWxjdWxhdGVkTGF5b3V0OyhvPnRoaXMud2lkdGgoKXx8YT50aGlzLmhlaWdodCgpKSYmKHM9dGhpcy5faXRlcmF0ZUxheW91dCh0aGlzLndpZHRoKCksdGhpcy5oZWlnaHQoKSwhMCkpO3ZhciBsPTAsYz1TbXQuQXJyYXkuYWRkKHMucm93UHJvcG9ydGlvbmFsU3BhY2Uscy5ndWFyYW50ZWVkSGVpZ2h0cyksdT1TbXQuQXJyYXkuYWRkKHMuY29sUHJvcG9ydGlvbmFsU3BhY2Uscy5ndWFyYW50ZWVkV2lkdGhzKTtyZXR1cm4gdGhpcy5fcm93cy5mb3JFYWNoKChmdW5jdGlvbih0LGUpe3ZhciBuPTA7dC5mb3JFYWNoKChmdW5jdGlvbih0LGkpe251bGwhPXQmJnQuY29tcHV0ZUxheW91dCh7eDpuLHk6bH0sdVtpXSxjW2VdKSxuKz11W2ldK3IuX2NvbHVtblBhZGRpbmd9KSksbCs9Y1tlXStyLl9yb3dQYWRkaW5nfSkpLHRoaXN9LGUucHJvdG90eXBlLnJvd1BhZGRpbmc9ZnVuY3Rpb24odCl7aWYobnVsbD09dClyZXR1cm4gdGhpcy5fcm93UGFkZGluZztpZighU210Lk1hdGguaXNWYWxpZE51bWJlcih0KXx8dDwwKXRocm93IEVycm9yKCJyb3dQYWRkaW5nIG11c3QgYmUgYSBub24tbmVnYXRpdmUgZmluaXRlIHZhbHVlIik7cmV0dXJuIHRoaXMuX3Jvd1BhZGRpbmc9dCx0aGlzLnJlZHJhdygpLHRoaXN9LGUucHJvdG90eXBlLmNvbHVtblBhZGRpbmc9ZnVuY3Rpb24odCl7aWYobnVsbD09dClyZXR1cm4gdGhpcy5fY29sdW1uUGFkZGluZztpZighU210Lk1hdGguaXNWYWxpZE51bWJlcih0KXx8dDwwKXRocm93IEVycm9yKCJjb2x1bW5QYWRkaW5nIG11c3QgYmUgYSBub24tbmVnYXRpdmUgZmluaXRlIHZhbHVlIik7cmV0dXJuIHRoaXMuX2NvbHVtblBhZGRpbmc9dCx0aGlzLnJlZHJhdygpLHRoaXN9LGUucHJvdG90eXBlLnJvd1dlaWdodD1mdW5jdGlvbih0LGUpe2lmKG51bGw9PWUpcmV0dXJuIHRoaXMuX3Jvd1dlaWdodHNbdF07aWYoIVNtdC5NYXRoLmlzVmFsaWROdW1iZXIoZSl8fGU8MCl0aHJvdyBFcnJvcigicm93V2VpZ2h0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgZmluaXRlIHZhbHVlIik7cmV0dXJuIHRoaXMuX3Jvd1dlaWdodHNbdF09ZSx0aGlzLnJlZHJhdygpLHRoaXN9LGUucHJvdG90eXBlLmNvbHVtbldlaWdodD1mdW5jdGlvbih0LGUpe2lmKG51bGw9PWUpcmV0dXJuIHRoaXMuX2NvbHVtbldlaWdodHNbdF07aWYoIVNtdC5NYXRoLmlzVmFsaWROdW1iZXIoZSl8fGU8MCl0aHJvdyBFcnJvcigiY29sdW1uV2VpZ2h0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgZmluaXRlIHZhbHVlIik7cmV0dXJuIHRoaXMuX2NvbHVtbldlaWdodHNbdF09ZSx0aGlzLnJlZHJhdygpLHRoaXN9LGUucHJvdG90eXBlLmZpeGVkV2lkdGg9ZnVuY3Rpb24oKXt2YXIgdD1pZHQudHJhbnNwb3NlKHRoaXMuX3Jvd3MpO3JldHVybiBlLl9maXhlZFNwYWNlKHQsKGZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10fHx0LmZpeGVkV2lkdGgoKX0pKX0sZS5wcm90b3R5cGUuZml4ZWRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5fZml4ZWRTcGFjZSh0aGlzLl9yb3dzLChmdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dHx8dC5maXhlZEhlaWdodCgpfSkpfSxlLnByb3RvdHlwZS5fcGFkVGFibGVUb1NpemU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49MDtuPHQ7bisrKXt2b2lkIDA9PT10aGlzLl9yb3dzW25dJiYodGhpcy5fcm93c1tuXT1bXSx0aGlzLl9yb3dXZWlnaHRzW25dPW51bGwpO2Zvcih2YXIgaT0wO2k8ZTtpKyspdm9pZCAwPT09dGhpcy5fcm93c1tuXVtpXSYmKHRoaXMuX3Jvd3Nbbl1baV09bnVsbCl9Zm9yKGk9MDtpPGU7aSsrKXZvaWQgMD09PXRoaXMuX2NvbHVtbldlaWdodHNbaV0mJih0aGlzLl9jb2x1bW5XZWlnaHRzW2ldPW51bGwpfSxlLl9jYWxjQ29tcG9uZW50V2VpZ2h0cz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHQubWFwKChmdW5jdGlvbih0LGkpe3JldHVybiBudWxsIT10P3Q6ZVtpXS5tYXAobikucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiB0JiZlfSksITApPzA6MX0pKX0sZS5fY2FsY1Byb3BvcnRpb25hbFNwYWNlPWZ1bmN0aW9uKHQsZSl7dmFyIG49aWR0LnN1bSh0KTtyZXR1cm4gMD09PW4/U210LkFycmF5LmNyZWF0ZUZpbGxlZEFycmF5KDAsdC5sZW5ndGgpOnQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gZSp0L259KSl9LGUuX2ZpeGVkU3BhY2U9ZnVuY3Rpb24odCxlKXt2YXIgbj1mdW5jdGlvbih0KXtyZXR1cm4gdC5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQmJmV9KSwhMCl9O3JldHVybiBuKHQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gbih0Lm1hcChlKSl9KSkpfSxlfSkobGd0LkNvbXBvbmVudENvbnRhaW5lcik7ZS5UYWJsZT1ufSkpLGtndD1iZSgoZnVuY3Rpb24odCxlKXsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dmFyIGU9bnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiBlLl9tYXhMaW5lcz0yLGV9cmV0dXJuIERmdC5fX2V4dGVuZHMoZSx0KSxlLnByb3RvdHlwZS5yZXF1ZXN0ZWRTcGFjZT1mdW5jdGlvbih0LGUpe3RoaXMuX3dyYXBwZXIubWF4TGluZXModGhpcy5fbWF4TGluZXMpO3ZhciBuPTA9PT10aGlzLmFuZ2xlKCk/dDplOzA9PT1uJiYobj0xLzApO3ZhciBpPXRoaXMuX3dyYXBwZXIud3JhcCh0aGlzLl90ZXh0LHRoaXMuX21lYXN1cmVyLG4pLHI9dGhpcy5fbWVhc3VyZXIubWVhc3VyZShpLndyYXBwZWRUZXh0KTtyZXR1cm57bWluV2lkdGg6KDA9PT10aGlzLmFuZ2xlKCk/ci53aWR0aDpyLmhlaWdodCkrMip0aGlzLnBhZGRpbmcoKSxtaW5IZWlnaHQ6KDA9PT10aGlzLmFuZ2xlKCk/ci5oZWlnaHQ6ci53aWR0aCkrMip0aGlzLnBhZGRpbmcoKX19LGUucHJvdG90eXBlLm1heExpbmVzPWZ1bmN0aW9uKHQpe3JldHVybiAwPT09YXJndW1lbnRzLmxlbmd0aD90aGlzLl9tYXhMaW5lczoodGhpcy5fbWF4TGluZXM9dCx0aGlzLnJlZHJhdygpLHRoaXMpfSxlfSkoaGd0LkxhYmVsKTtlLldyYXBwZWRMYWJlbD1ufSkpLExndD1iZSgoZnVuY3Rpb24odCxlKXsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dmFyIGU9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBlLmFkZENsYXNzKCJ4LWRyYWctYm94LWxheWVyIiksZS5faGFzQ29ybmVycz0hMSxlfXJldHVybiBEZnQuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUuY29tcHV0ZUxheW91dD1mdW5jdGlvbihlLG4saSl7cmV0dXJuIHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQuY2FsbCh0aGlzLGUsbixpKSx0aGlzLl9zZXRCb3VuZHModGhpcy5ib3VuZHMoKSksdGhpc30sZS5wcm90b3R5cGUuX3NldEJvdW5kcz1mdW5jdGlvbihlKXt0LnByb3RvdHlwZS5fc2V0Qm91bmRzLmNhbGwodGhpcyx7dG9wTGVmdDp7eDplLnRvcExlZnQueCx5OjB9LGJvdHRvbVJpZ2h0Ont4OmUuYm90dG9tUmlnaHQueCx5OnRoaXMuaGVpZ2h0KCl9fSl9LGUucHJvdG90eXBlLl9zZXRSZXNpemFibGVDbGFzc2VzPWZ1bmN0aW9uKHQpe3QmJnRoaXMuZW5hYmxlZCgpP3RoaXMuYWRkQ2xhc3MoIngtcmVzaXphYmxlIik6dGhpcy5yZW1vdmVDbGFzcygieC1yZXNpemFibGUiKX0sZS5wcm90b3R5cGUueVNjYWxlPWZ1bmN0aW9uKGUpe2lmKG51bGw9PWUpcmV0dXJuIHQucHJvdG90eXBlLnlTY2FsZS5jYWxsKHRoaXMpO3Rocm93IG5ldyBFcnJvcigieVNjYWxlcyBjYW5ub3QgYmUgc2V0IG9uIGFuIFhEcmFnQm94TGF5ZXIiKX0sZS5wcm90b3R5cGUueUV4dGVudD1mdW5jdGlvbihlKXtpZihudWxsPT1lKXJldHVybiB0LnByb3RvdHlwZS55RXh0ZW50LmNhbGwodGhpcyk7dGhyb3cgbmV3IEVycm9yKCJYRHJhZ0JveExheWVyIGhhcyBubyB5RXh0ZW50Iil9LGV9KShyZ3QuRHJhZ0JveExheWVyKTtlLlhEcmFnQm94TGF5ZXI9bn0pKSxQZ3Q9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBlPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gZS5hZGRDbGFzcygieS1kcmFnLWJveC1sYXllciIpLGUuX2hhc0Nvcm5lcnM9ITEsZX1yZXR1cm4gRGZ0Ll9fZXh0ZW5kcyhlLHQpLGUucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24oZSxuLGkpe3JldHVybiB0LnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcyxlLG4saSksdGhpcy5fc2V0Qm91bmRzKHRoaXMuYm91bmRzKCkpLHRoaXN9LGUucHJvdG90eXBlLl9zZXRCb3VuZHM9ZnVuY3Rpb24oZSl7dC5wcm90b3R5cGUuX3NldEJvdW5kcy5jYWxsKHRoaXMse3RvcExlZnQ6e3g6MCx5OmUudG9wTGVmdC55fSxib3R0b21SaWdodDp7eDp0aGlzLndpZHRoKCkseTplLmJvdHRvbVJpZ2h0Lnl9fSl9LGUucHJvdG90eXBlLl9zZXRSZXNpemFibGVDbGFzc2VzPWZ1bmN0aW9uKHQpe3QmJnRoaXMuZW5hYmxlZCgpP3RoaXMuYWRkQ2xhc3MoInktcmVzaXphYmxlIik6dGhpcy5yZW1vdmVDbGFzcygieS1yZXNpemFibGUiKX0sZS5wcm90b3R5cGUueFNjYWxlPWZ1bmN0aW9uKGUpe2lmKG51bGw9PWUpcmV0dXJuIHQucHJvdG90eXBlLnhTY2FsZS5jYWxsKHRoaXMpO3Rocm93IG5ldyBFcnJvcigieFNjYWxlcyBjYW5ub3QgYmUgc2V0IG9uIGFuIFlEcmFnQm94TGF5ZXIiKX0sZS5wcm90b3R5cGUueEV4dGVudD1mdW5jdGlvbihlKXtpZihudWxsPT1lKXJldHVybiB0LnByb3RvdHlwZS54RXh0ZW50LmNhbGwodGhpcyk7dGhyb3cgbmV3IEVycm9yKCJZRHJhZ0JveExheWVyIGhhcyBubyB4RXh0ZW50Iil9LGV9KShyZ3QuRHJhZ0JveExheWVyKTtlLllEcmFnQm94TGF5ZXI9bn0pKSxOZ3Q9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxEZnQuX19leHBvcnRTdGFyKHJndCxlKSxEZnQuX19leHBvcnRTdGFyKGFndCxlKSxEZnQuX19leHBvcnRTdGFyKHNndCxlKSxEZnQuX19leHBvcnRTdGFyKGNndCxlKSxEZnQuX19leHBvcnRTdGFyKG9ndCxlKSxEZnQuX19leHBvcnRTdGFyKHVndCxlKSxEZnQuX19leHBvcnRTdGFyKGhndCxlKSxEZnQuX19leHBvcnRTdGFyKHBndCxlKSxEZnQuX19leHBvcnRTdGFyKENndCxlKSxEZnQuX19leHBvcnRTdGFyKGlndCxlKSxEZnQuX19leHBvcnRTdGFyKEFndCxlKSxEZnQuX19leHBvcnRTdGFyKGtndCxlKSxEZnQuX19leHBvcnRTdGFyKExndCxlKSxEZnQuX19leHBvcnRTdGFyKFBndCxlKX0pKSxJZ3Q9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiB0LmNhbGwodGhpcywicGF0aCIsImFyYyBmaWxsIil8fHRoaXN9cmV0dXJuIERmdC5fX2V4dGVuZHMoZSx0KSxlLnByb3RvdHlwZS5fYXBwbHlEZWZhdWx0QXR0cmlidXRlcz1mdW5jdGlvbih0KXt0LnN0eWxlKCJzdHJva2UiLCJub25lIil9LGV9KShNZ3QuU1ZHRHJhd2VyKTtlLkFyY1NWR0RyYXdlcj1ufSkpLE9ndD1iZSgoZnVuY3Rpb24odCxlKXsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIHQuY2FsbCh0aGlzLCJwYXRoIiwiYXJjIG91dGxpbmUiKXx8dGhpc31yZXR1cm4gRGZ0Ll9fZXh0ZW5kcyhlLHQpLGUucHJvdG90eXBlLl9hcHBseURlZmF1bHRBdHRyaWJ1dGVzPWZ1bmN0aW9uKHQpe3Quc3R5bGUoImZpbGwiLCJub25lIil9LGV9KShNZ3QuU1ZHRHJhd2VyKTtlLkFyY091dGxpbmVTVkdEcmF3ZXI9bn0pKSxSZ3Q9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiB0LmNhbGwodGhpcywicGF0aCIsImFyZWEiKXx8dGhpc31yZXR1cm4gRGZ0Ll9fZXh0ZW5kcyhlLHQpLGUucHJvdG90eXBlLl9hcHBseURlZmF1bHRBdHRyaWJ1dGVzPWZ1bmN0aW9uKHQpe3Quc3R5bGUoInN0cm9rZSIsIm5vbmUiKX0sZS5wcm90b3R5cGUuZ2V0VmlzdWFsUHJpbWl0aXZlQXRJbmRleD1mdW5jdGlvbihlKXtyZXR1cm4gdC5wcm90b3R5cGUuZ2V0VmlzdWFsUHJpbWl0aXZlQXRJbmRleC5jYWxsKHRoaXMsMCl9LGV9KShNZ3QuU1ZHRHJhd2VyKTtlLkFyZWFTVkdEcmF3ZXI9bjt2YXIgaT1bIm9wYWNpdHkiLCJmaWxsIiwiZmlsbC1vcGFjaXR5Il0scj1bIm9wYWNpdHkiLCJzdHJva2UiLCJzdHJva2Utd2lkdGgiXTtlLm1ha2VBcmVhQ2FudmFzRHJhd1N0ZXA9ZnVuY3Rpb24gbyh0LGUpe3JldHVybiBmdW5jdGlvbihuLG8sYSl7dmFyIHM9d2d0LnJlc29sdmVBdHRyaWJ1dGVzKGEsaSxvWzBdLDApO3dndC5yZW5kZXJBcmVhKG4sdCgpLG9bMF0scyk7dmFyIGw9d2d0LnJlc29sdmVBdHRyaWJ1dGVzKGEscixvWzBdLDApO3dndC5yZW5kZXJMaW5lKG4sZSgpLG9bMF0sbCl9fX0pKSx6Z3Q9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiB0LmNhbGwodGhpcywicGF0aCIsImxpbmUiKXx8dGhpc31yZXR1cm4gRGZ0Ll9fZXh0ZW5kcyhlLHQpLGUucHJvdG90eXBlLl9hcHBseURlZmF1bHRBdHRyaWJ1dGVzPWZ1bmN0aW9uKHQpe3Quc3R5bGUoImZpbGwiLCJub25lIil9LGUucHJvdG90eXBlLmdldFZpc3VhbFByaW1pdGl2ZUF0SW5kZXg9ZnVuY3Rpb24oZSl7cmV0dXJuIHQucHJvdG90eXBlLmdldFZpc3VhbFByaW1pdGl2ZUF0SW5kZXguY2FsbCh0aGlzLDApfSxlfSkoTWd0LlNWR0RyYXdlcik7ZS5MaW5lU1ZHRHJhd2VyPW47dmFyIGk9WyJvcGFjaXR5Iiwic3Ryb2tlLW9wYWNpdHkiLCJzdHJva2Utd2lkdGgiLCJzdHJva2UiLCJzdHJva2UtZGFzaGFycmF5Il07ZS5tYWtlTGluZUNhbnZhc0RyYXdTdGVwPWZ1bmN0aW9uIHIodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbixyKXt2YXIgbz13Z3QucmVzb2x2ZUF0dHJpYnV0ZXMocixpLG5bMF0sMCk7d2d0LnJlbmRlckxpbmUoZSx0KCksblswXSxvKX19fSkpLERndD1iZSgoZnVuY3Rpb24odCxlKXsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3ZvaWQgMD09PWUmJihlPSIiKTt2YXIgbj10LmNhbGwodGhpcywicmVjdCIsIiIpfHx0aGlzO3JldHVybiBuLl9yb290Q2xhc3NOYW1lPWUsbi5fcm9vdC5jbGFzc2VkKG4uX3Jvb3RDbGFzc05hbWUsITApLG59cmV0dXJuIERmdC5fX2V4dGVuZHMoZSx0KSxlfSkoTWd0LlNWR0RyYXdlcik7ZS5SZWN0YW5nbGVTVkdEcmF3ZXI9bjt2YXIgaT13Z3QuQ29udGV4dFN0eWxlQXR0cnMuY29uY2F0KFsieCIsInkiLCJ3aWR0aCIsImhlaWdodCJdKTtlLlJlY3RhbmdsZUNhbnZhc0RyYXdTdGVwPWZ1bmN0aW9uKHQsZSxuKXt0LnNhdmUoKTtmb3IodmFyIHI9ZS5sZW5ndGgsbz0wO288cjtvKyspe3ZhciBhPWVbb107aWYobnVsbCE9YSl7dmFyIHM9d2d0LnJlc29sdmVBdHRyaWJ1dGVzKG4saSxhLG8pO3QuYmVnaW5QYXRoKCksdC5yZWN0KHMueCxzLnkscy53aWR0aCxzLmhlaWdodCksd2d0LnJlbmRlclBhdGhXaXRoU3R5bGUodCxzKX19dC5yZXN0b3JlKCl9O3ZhciByPShmdW5jdGlvbih0KXtmdW5jdGlvbiBuKG4pe3JldHVybiB0LmNhbGwodGhpcyxuLGUuUmVjdGFuZ2xlQ2FudmFzRHJhd1N0ZXApfHx0aGlzfXJldHVybiBEZnQuX19leHRlbmRzKG4sdCksbn0pKHdndC5DYW52YXNEcmF3ZXIpO2UuUmVjdGFuZ2xlQ2FudmFzRHJhd2VyPXJ9KSksQmd0PWJlKChmdW5jdGlvbih0LGUpewovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gdC5jYWxsKHRoaXMsImxpbmUiLCIiKXx8dGhpc31yZXR1cm4gRGZ0Ll9fZXh0ZW5kcyhlLHQpLGV9KShNZ3QuU1ZHRHJhd2VyKTtlLlNlZ21lbnRTVkdEcmF3ZXI9bn0pKSxIZ3Q9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTctcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUsbixpKXt2b2lkIDA9PT1pJiYoaT13aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyksdGhpcy5zY3JlZW5XaWR0aD1lLHRoaXMuc2NyZWVuSGVpZ2h0PW4sdGhpcy5kZXZpY2VQaXhlbFJhdGlvPWksdGhpcy5waXhlbFdpZHRoPWUqaSx0aGlzLnBpeGVsSGVpZ2h0PW4qaSx0aGlzLmNhbnZhcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSx0aGlzLmN0eD10aGlzLmNhbnZhcy5nZXRDb250ZXh0KCIyZCIpLHQuc2l6ZVBpeGVscyh0aGlzLmN0eCxlLG4saSl9cmV0dXJuIHQuc2l6ZVBpeGVscz1mdW5jdGlvbih0LGUsbixpKXt2YXIgcj10LmNhbnZhcztyLndpZHRoPWUqaSxyLmhlaWdodD1uKmksci5zdHlsZS53aWR0aD1lKyJweCIsci5zdHlsZS5oZWlnaHQ9bisicHgiLHQuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSx0LnNjYWxlKGksaSl9LHQucHJvdG90eXBlLmJsaXQ9ZnVuY3Rpb24odCxlLG4pe3ZvaWQgMD09PWUmJihlPTApLHZvaWQgMD09PW4mJihuPTApLHQuZHJhd0ltYWdlKHRoaXMuY2FudmFzLGUsbix0aGlzLnNjcmVlbldpZHRoLHRoaXMuc2NyZWVuSGVpZ2h0KX0sdC5wcm90b3R5cGUuYmxpdENlbnRlcj1mdW5jdGlvbih0LGUsbil7dm9pZCAwPT09ZSYmKGU9MCksdm9pZCAwPT09biYmKG49MCksdGhpcy5ibGl0KHQsTWF0aC5mbG9vcihlLXRoaXMuc2NyZWVuV2lkdGgvMiksTWF0aC5mbG9vcihuLXRoaXMuc2NyZWVuSGVpZ2h0LzIpKX0sdC5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKGUsbixpKXt2b2lkIDA9PT1pJiYoaT0hMSk7dmFyIHI9dGhpcy5kZXZpY2VQaXhlbFJhdGlvO3JldHVybiB0aGlzLnNjcmVlbldpZHRoPWUsdGhpcy5zY3JlZW5IZWlnaHQ9bix0aGlzLnBpeGVsV2lkdGg9ZSpyLHRoaXMucGl4ZWxIZWlnaHQ9bipyLHQuc2l6ZVBpeGVscyh0aGlzLmN0eCxlLG4sciksaSYmdGhpcy5jdHgudHJhbnNsYXRlKGUvMixlLzIpLHRoaXN9LHQucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1lLnBpeGVsV2lkdGgsaT1lLnBpeGVsSGVpZ2h0LHI9ZS5jdHg7cmV0dXJuIHIuc2F2ZSgpLHIuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSxudWxsPT10P3IuY2xlYXJSZWN0KDAsMCxuLGkpOihyLmZpbGxTdHlsZT10LHIuZmlsbFJlY3QoMCwwLG4saSkpLHIucmVzdG9yZSgpLHRoaXN9LHQucHJvdG90eXBlLmdldEltYWdlRGF0YT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN0eC5nZXRJbWFnZURhdGEoMCwwLHRoaXMucGl4ZWxXaWR0aCx0aGlzLnBpeGVsSGVpZ2h0KX0sdH0pKCk7ZS5DYW52YXNCdWZmZXI9bn0pKSxGZ3Q9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiB0LmNhbGwodGhpcywicGF0aCIsInN5bWJvbCIpfHx0aGlzfXJldHVybiBEZnQuX19leHRlbmRzKGUsdCksZX0pKE1ndC5TVkdEcmF3ZXIpO2UuU3ltYm9sU1ZHRHJhd2VyPW47dmFyIGk9d2d0LkNvbnRleHRTdHlsZUF0dHJzLmNvbmNhdChbIngiLCJ5Il0pO2Z1bmN0aW9uIHIodCxlLG4saSxyKXtyZXR1cm4gbityPj0wJiZuLXI8PXQmJmkrcj49MCYmaS1yPD1lfWZ1bmN0aW9uIG8odCxlLG4pe2lmKG51bGw9PXQpcmV0dXJuITE7Zm9yKHZhciBpPTA7aTxuLmxlbmd0aDtpKyspe3ZhciByPW5baV07aWYodFtyXSE9ZVtyXSlyZXR1cm4hMX1yZXR1cm4hMH1lLm1ha2VTeW1ib2xDYW52YXNEcmF3U3RlcD1mdW5jdGlvbiBhKHQsZSxuLHMpe3ZhciBsPXRoaXM7cmV0dXJuIGZ1bmN0aW9uKGEsYyx1KXtmb3IodmFyIGg9YS5jYW52YXMsZD1oLmNsaWVudFdpZHRoLHA9aC5jbGllbnRIZWlnaHQsZj12b2lkIDA9PT1zP25ldyBIZ3QuQ2FudmFzQnVmZmVyKDAsMCk6cyxtPWUoKSxnPW4oKSxfPW51bGwseT1udWxsLHY9bnVsbCxiPTA7YjxjLmxlbmd0aDtiKyspe3ZhciB4PWNbYl07aWYobnVsbCE9eCl7dmFyIHc9d2d0LnJlc29sdmVBdHRyaWJ1dGVzKHUsaSx4LGIpLFM9Zyh4LGIsdCk7aWYocihkLHAsdy54LHcueSxTKSl7dmFyIE09byhfLHcsd2d0LkNvbnRleHRTdHlsZUF0dHJzKSxFPW0oeCxiLGwuX2RhdGFzZXQpO2lmKE0mJnY9PVMmJnk9PUUpO2Vsc2V7dmFyIFQ9Uyt3Z3QuZ2V0U3Ryb2tlV2lkdGgodykrMTsoVD5mLnNjcmVlbldpZHRofHxUPmYuc2NyZWVuSGVpZ2h0KSYmZi5yZXNpemUoVCxULCEwKSxmLmNsZWFyKCk7dmFyIEM9Zi5jdHg7Qy5iZWdpblBhdGgoKSxFKFMpLmNvbnRleHQoQykobnVsbCksQy5jbG9zZVBhdGgoKSx3Z3QucmVuZGVyUGF0aFdpdGhTdHlsZShDLHcpLHk9RSx2PVMsXz13fWYuYmxpdENlbnRlcihhLHcueCx3LnkpfX19fX19KSksVmd0PWJlKChmdW5jdGlvbih0LGUpewovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksRGZ0Ll9fZXhwb3J0U3RhcihJZ3QsZSksRGZ0Ll9fZXhwb3J0U3RhcihPZ3QsZSksRGZ0Ll9fZXhwb3J0U3RhcihSZ3QsZSksRGZ0Ll9fZXhwb3J0U3Rhcih3Z3QsZSksRGZ0Ll9fZXhwb3J0U3RhcihTZ3QsZSksRGZ0Ll9fZXhwb3J0U3Rhcih6Z3QsZSksRGZ0Ll9fZXhwb3J0U3RhcihEZ3QsZSksRGZ0Ll9fZXhwb3J0U3RhcihCZ3QsZSksRGZ0Ll9fZXhwb3J0U3RhcihNZ3QsZSksRGZ0Ll9fZXhwb3J0U3RhcihGZ3QsZSl9KSksVWd0PWJlKChmdW5jdGlvbih0LGUpewovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt2YXIgZT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGUuX2F1dG9BZGp1c3RYU2NhbGVEb21haW49ITEsZS5fYXV0b0FkanVzdFlTY2FsZURvbWFpbj0hMSxlLl9kZWZlcnJlZFJlbmRlcmluZz0hMSxlLl9hcHBseURlZmVycmVkUmVuZGVyaW5nVHJhbnNmb3JtPWZ1bmN0aW9uKHQsbixpLHIpe2UuX2lzQW5jaG9yZWQmJihudWxsIT1lLl9yZW5kZXJBcmVhJiZlLl9yZW5kZXJBcmVhLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3QrIiwgIituKyIpIHNjYWxlKCIraSsiLCAiK3IrIikiKSxudWxsIT1lLl9jYW52YXMmJmUuX2NhbnZhcy5zdHlsZSgidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdCsicHgsICIrbisicHgpIHNjYWxlKCIraSsiLCAiK3IrIikiKSl9LGUuYWRkQ2xhc3MoInh5LXBsb3QiKSxlLl9hZGp1c3RZRG9tYWluT25DaGFuZ2VGcm9tWENhbGxiYWNrPWZ1bmN0aW9uKHQpe3JldHVybiBlLl9hZGp1c3RZRG9tYWluT25DaGFuZ2VGcm9tWCgpfSxlLl9hZGp1c3RYRG9tYWluT25DaGFuZ2VGcm9tWUNhbGxiYWNrPWZ1bmN0aW9uKHQpe3JldHVybiBlLl9hZGp1c3RYRG9tYWluT25DaGFuZ2VGcm9tWSgpfSxlLl9yZW5kZXJDYWxsYmFjaz1mdW5jdGlvbigpe2lmKGUuZGVmZXJyZWRSZW5kZXJpbmcoKSl7dmFyIHQ9ZS54KCkmJmUueCgpLnNjYWxlLG49ZS55KCkmJmUueSgpLnNjYWxlO2UuX2RlZmVycmVkUmVuZGVyZXIudXBkYXRlRG9tYWlucyh0LG4pfWVsc2UgZS5yZW5kZXIoKX0sZS5fZGVmZXJyZWRSZW5kZXJlcj1uZXcgRWd0LkRlZmVycmVkUmVuZGVyZXIoKGZ1bmN0aW9uKCl7cmV0dXJuIGUucmVuZGVyKCl9KSxlLl9hcHBseURlZmVycmVkUmVuZGVyaW5nVHJhbnNmb3JtKSxlfXJldHVybiBEZnQuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVmZXJyZWRSZW5kZXJpbmcoKSYmdGhpcy5fZGVmZXJyZWRSZW5kZXJlci5yZXNldFRyYW5zZm9ybXMoKSx0LnByb3RvdHlwZS5yZW5kZXIuY2FsbCh0aGlzKX0sZS5wcm90b3R5cGUuZGVmZXJyZWRSZW5kZXJpbmc9ZnVuY3Rpb24odCl7aWYobnVsbD09dClyZXR1cm4gdGhpcy5fZGVmZXJyZWRSZW5kZXJpbmc7aWYodCl7dmFyIGU9dGhpcy54KCkmJnRoaXMueCgpLnNjYWxlLG49dGhpcy55KCkmJnRoaXMueSgpLnNjYWxlO3RoaXMuX2RlZmVycmVkUmVuZGVyZXIuc2V0RG9tYWlucyhlLG4pfXJldHVybiB0aGlzLl9kZWZlcnJlZFJlbmRlcmluZz10LHRoaXN9LGUucHJvdG90eXBlLng9ZnVuY3Rpb24odCxuLGkpe2lmKG51bGw9PXQpcmV0dXJuIHRoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KGUuX1hfS0VZKTt0aGlzLl9iaW5kUHJvcGVydHkoZS5fWF9LRVksdCxuLGkpO3ZhciByPXRoaXMud2lkdGgoKTtyZXR1cm4gbnVsbCE9biYmbnVsbCE9ciYmbi5yYW5nZShbMCxyXSksdGhpcy5fYXV0b0FkanVzdFlTY2FsZURvbWFpbiYmdGhpcy5fdXBkYXRlWUV4dGVudHNBbmRBdXRvZG9tYWluKCksdGhpcy5yZW5kZXIoKSx0aGlzfSxlLnByb3RvdHlwZS55PWZ1bmN0aW9uKHQsbixpKXtpZihudWxsPT10KXJldHVybiB0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldChlLl9ZX0tFWSk7dGhpcy5fYmluZFByb3BlcnR5KGUuX1lfS0VZLHQsbixpKTt2YXIgcj10aGlzLmhlaWdodCgpO3JldHVybiBudWxsIT1uJiZudWxsIT1yJiZuLnJhbmdlKG4gaW5zdGFuY2VvZiBVbXQuQ2F0ZWdvcnk/WzAscl06W3IsMF0pLHRoaXMuX2F1dG9BZGp1c3RYU2NhbGVEb21haW4mJnRoaXMuX3VwZGF0ZVhFeHRlbnRzQW5kQXV0b2RvbWFpbigpLHRoaXMucmVuZGVyKCksdGhpc30sZS5wcm90b3R5cGUuX2ZpbHRlckZvclByb3BlcnR5PWZ1bmN0aW9uKHQpe3JldHVybiJ4Ij09PXQmJnRoaXMuX2F1dG9BZGp1c3RYU2NhbGVEb21haW4/dGhpcy5fbWFrZUZpbHRlckJ5UHJvcGVydHkoInkiKToieSIhPT10JiYieTAiIT09dHx8IXRoaXMuX2F1dG9BZGp1c3RZU2NhbGVEb21haW4/bnVsbDp0aGlzLl9tYWtlRmlsdGVyQnlQcm9wZXJ0eSgieCIpfSxlLnByb3RvdHlwZS5fbWFrZUZpbHRlckJ5UHJvcGVydHk9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQodCk7aWYobnVsbCE9ZSl7dmFyIG49ZS5hY2Nlc3NvcixpPWUuc2NhbGU7aWYobnVsbCE9aSlyZXR1cm4gZnVuY3Rpb24odCxlLHIpe3ZhciBvPWkucmFuZ2UoKTtyZXR1cm4gU210Lk1hdGguaW5SYW5nZShpLnNjYWxlKG4odCxlLHIpKSxvWzBdLG9bMV0pfX1yZXR1cm4gbnVsbH0sZS5wcm90b3R5cGUuX3VuaW5zdGFsbFNjYWxlRm9yS2V5PWZ1bmN0aW9uKG4saSl7dC5wcm90b3R5cGUuX3VuaW5zdGFsbFNjYWxlRm9yS2V5LmNhbGwodGhpcyxuLGkpLG4ub2ZmVXBkYXRlKGk9PT1lLl9YX0tFWT90aGlzLl9hZGp1c3RZRG9tYWluT25DaGFuZ2VGcm9tWENhbGxiYWNrOnRoaXMuX2FkanVzdFhEb21haW5PbkNoYW5nZUZyb21ZQ2FsbGJhY2spfSxlLnByb3RvdHlwZS5faW5zdGFsbFNjYWxlRm9yS2V5PWZ1bmN0aW9uKG4saSl7dC5wcm90b3R5cGUuX2luc3RhbGxTY2FsZUZvcktleS5jYWxsKHRoaXMsbixpKSxuLm9uVXBkYXRlKGk9PT1lLl9YX0tFWT90aGlzLl9hZGp1c3RZRG9tYWluT25DaGFuZ2VGcm9tWENhbGxiYWNrOnRoaXMuX2FkanVzdFhEb21haW5PbkNoYW5nZUZyb21ZQ2FsbGJhY2spfSxlLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7cmV0dXJuIHQucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKSx0aGlzLngoKS5zY2FsZSYmdGhpcy54KCkuc2NhbGUub2ZmVXBkYXRlKHRoaXMuX2FkanVzdFlEb21haW5PbkNoYW5nZUZyb21YQ2FsbGJhY2spLHRoaXMueSgpLnNjYWxlJiZ0aGlzLnkoKS5zY2FsZS5vZmZVcGRhdGUodGhpcy5fYWRqdXN0WERvbWFpbk9uQ2hhbmdlRnJvbVlDYWxsYmFjayksdGhpc30sZS5wcm90b3R5cGUuYXV0b3JhbmdlTW9kZT1mdW5jdGlvbih0KXtpZihudWxsPT10KXJldHVybiB0aGlzLl9hdXRvQWRqdXN0WFNjYWxlRG9tYWluPyJ4Ijp0aGlzLl9hdXRvQWRqdXN0WVNjYWxlRG9tYWluPyJ5Ijoibm9uZSI7c3dpdGNoKHQpe2Nhc2UieCI6dGhpcy5fYXV0b0FkanVzdFhTY2FsZURvbWFpbj0hMCx0aGlzLl9hdXRvQWRqdXN0WVNjYWxlRG9tYWluPSExLHRoaXMuX2FkanVzdFhEb21haW5PbkNoYW5nZUZyb21ZKCk7YnJlYWs7Y2FzZSJ5Ijp0aGlzLl9hdXRvQWRqdXN0WFNjYWxlRG9tYWluPSExLHRoaXMuX2F1dG9BZGp1c3RZU2NhbGVEb21haW49ITAsdGhpcy5fYWRqdXN0WURvbWFpbk9uQ2hhbmdlRnJvbVgoKTticmVhaztjYXNlIm5vbmUiOnRoaXMuX2F1dG9BZGp1c3RYU2NhbGVEb21haW49ITEsdGhpcy5fYXV0b0FkanVzdFlTY2FsZURvbWFpbj0hMTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzY2FsZSBuYW1lICciK3QrIicsIG11c3QgYmUgJ3gnLCAneScgb3IgJ25vbmUnIil9cmV0dXJuIHRoaXN9LGUucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24oZSxuLGkpe3QucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQuY2FsbCh0aGlzLGUsbixpKTt2YXIgcj10aGlzLngoKSxvPXImJnIuc2NhbGU7bnVsbCE9byYmby5yYW5nZShbMCx0aGlzLndpZHRoKCldKTt2YXIgYT10aGlzLnkoKSxzPWEmJmEuc2NhbGU7cmV0dXJuIG51bGwhPXMmJnMucmFuZ2UocyBpbnN0YW5jZW9mIFVtdC5DYXRlZ29yeT9bMCx0aGlzLmhlaWdodCgpXTpbdGhpcy5oZWlnaHQoKSwwXSksdGhpc30sZS5wcm90b3R5cGUuX3VwZGF0ZVhFeHRlbnRzQW5kQXV0b2RvbWFpbj1mdW5jdGlvbigpe3ZhciB0PXRoaXMueCgpLnNjYWxlO251bGwhPXQmJnQuYXV0b0RvbWFpbigpfSxlLnByb3RvdHlwZS5fdXBkYXRlWUV4dGVudHNBbmRBdXRvZG9tYWluPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy55KCkuc2NhbGU7bnVsbCE9dCYmdC5hdXRvRG9tYWluKCl9LGUucHJvdG90eXBlLnNob3dBbGxEYXRhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3VwZGF0ZVhFeHRlbnRzQW5kQXV0b2RvbWFpbigpLHRoaXMuX3VwZGF0ZVlFeHRlbnRzQW5kQXV0b2RvbWFpbigpLHRoaXN9LGUucHJvdG90eXBlLl9hZGp1c3RZRG9tYWluT25DaGFuZ2VGcm9tWD1mdW5jdGlvbigpe3RoaXMuX3Byb2plY3RvcnNSZWFkeSgpJiZ0aGlzLl9hdXRvQWRqdXN0WVNjYWxlRG9tYWluJiZ0aGlzLl91cGRhdGVZRXh0ZW50c0FuZEF1dG9kb21haW4oKX0sZS5wcm90b3R5cGUuX2FkanVzdFhEb21haW5PbkNoYW5nZUZyb21ZPWZ1bmN0aW9uKCl7dGhpcy5fcHJvamVjdG9yc1JlYWR5KCkmJnRoaXMuX2F1dG9BZGp1c3RYU2NhbGVEb21haW4mJnRoaXMuX3VwZGF0ZVhFeHRlbnRzQW5kQXV0b2RvbWFpbigpfSxlLnByb3RvdHlwZS5fcHJvamVjdG9yc1JlYWR5PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy54KCksZT10aGlzLnkoKTtyZXR1cm4gbnVsbCE9dCYmbnVsbCE9dC5hY2Nlc3NvciYmbnVsbCE9ZSYmbnVsbCE9ZS5hY2Nlc3Nvcn0sZS5wcm90b3R5cGUuX3BpeGVsUG9pbnQ9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPVRndC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSkscj1UZ3QuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpO3JldHVybnt4OmkodCxlLG4pLHk6cih0LGUsbil9fSxlLnByb3RvdHlwZS5fZ2V0RGF0YVRvRHJhdz1mdW5jdGlvbigpe3ZhciBlPXRoaXMsbj10LnByb3RvdHlwZS5fZ2V0RGF0YVRvRHJhdy5jYWxsKHRoaXMpLGk9dGhpcy5hdHRyKCJkZWZpbmVkIik7cmV0dXJuIHRoaXMuZGF0YXNldHMoKS5mb3JFYWNoKChmdW5jdGlvbih0KXtuLnNldCh0LG4uZ2V0KHQpLmZpbHRlcigoZnVuY3Rpb24obixyKXtyZXR1cm4oZnVuY3Rpb24odCxuLHIpe3ZhciBvPVRndC5QbG90Ll9zY2FsZWRBY2Nlc3NvcihlLngoKSkodCxuLHIpLGE9VGd0LlBsb3QuX3NjYWxlZEFjY2Vzc29yKGUueSgpKSh0LG4scik7cmV0dXJuKCFpfHwhMSE9PWkuYWNjZXNzb3IodCxuLHIpKSYmU210Lk1hdGguaXNWYWxpZE51bWJlcihvKSYmU210Lk1hdGguaXNWYWxpZE51bWJlcihhKX0pKG4scix0KX0pKSl9KSksbn0sZS5fWF9LRVk9IngiLGUuX1lfS0VZPSJ5IixlfSkoVGd0LlBsb3QpO2UuWFlQbG90PW59KSksamd0PWJlKChmdW5jdGlvbih0LGUpewovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49e2xpbmVhcjppZHQuY3VydmVMaW5lYXIsbGluZWFyQ2xvc2VkOmlkdC5jdXJ2ZUxpbmVhckNsb3NlZCxzdGVwOmlkdC5jdXJ2ZVN0ZXAsc3RlcEJlZm9yZTppZHQuY3VydmVTdGVwQmVmb3JlLHN0ZXBBZnRlcjppZHQuY3VydmVTdGVwQWZ0ZXIsYmFzaXM6aWR0LmN1cnZlQmFzaXMsYmFzaXNPcGVuOmlkdC5jdXJ2ZUJhc2lzT3BlbixiYXNpc0Nsb3NlZDppZHQuY3VydmVCYXNpc0Nsb3NlZCxidW5kbGU6aWR0LmN1cnZlQnVuZGxlLGNhcmRpbmFsOmlkdC5jdXJ2ZUNhcmRpbmFsLGNhcmRpbmFsT3BlbjppZHQuY3VydmVDYXJkaW5hbE9wZW4sY2FyZGluYWxDbG9zZWQ6aWR0LmN1cnZlQ2FyZGluYWxDbG9zZWQsbW9ub3RvbmU6aWR0LmN1cnZlTW9ub3RvbmVYfTtlLkN1cnZlTmFtZT1JZnQubWFrZUVudW0oWyJsaW5lYXIiLCJsaW5lYXJDbG9zZWQiLCJzdGVwIiwic3RlcEJlZm9yZSIsInN0ZXBBZnRlciIsImJhc2lzIiwiYmFzaXNPcGVuIiwiYmFzaXNDbG9zZWQiLCJidW5kbGUiLCJjYXJkaW5hbCIsImNhcmRpbmFsT3BlbiIsImNhcmRpbmFsQ2xvc2VkIiwibW9ub3RvbmUiXSk7dmFyIGk9KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt2YXIgZT10LmNhbGwodGhpcyl8fHRoaXM7ZS5fY3VydmU9ImxpbmVhciIsZS5fYXV0b3JhbmdlU21vb3RoPSExLGUuX2Nyb3BwZWRSZW5kZXJpbmdFbmFibGVkPSEwLGUuX2NvbGxhcHNlRGVuc2VWZXJ0aWNhbExpbmVzRW5hYmxlZD0hMSxlLl9kb3duc2FtcGxpbmdFbmFibGVkPSExLGUuYWRkQ2xhc3MoImxpbmUtcGxvdCIpO3ZhciBuPW5ldyBCZnQuRWFzaW5nO3JldHVybiBuLnN0ZXBEdXJhdGlvbihUZ3QuUGxvdC5fQU5JTUFUSU9OX01BWF9EVVJBVElPTiksbi5lYXNpbmdNb2RlKCJleHBJbk91dCIpLG4ubWF4VG90YWxEdXJhdGlvbihUZ3QuUGxvdC5fQU5JTUFUSU9OX01BWF9EVVJBVElPTiksZS5hbmltYXRvcih0X3QuQW5pbWF0b3IuTUFJTixuKSxlLmF0dHIoInN0cm9rZSIsKG5ldyBVbXQuQ29sb3IpLnJhbmdlKClbMF0pLGUuYXR0cigic3Ryb2tlLXdpZHRoIiwiMnB4IiksZX1yZXR1cm4gRGZ0Ll9fZXh0ZW5kcyhlLHQpLGUucHJvdG90eXBlLng9ZnVuY3Rpb24oZSxuLGkpe3JldHVybiBudWxsPT1lP3QucHJvdG90eXBlLnguY2FsbCh0aGlzKToodC5wcm90b3R5cGUueC5jYWxsKHRoaXMsZSxuLGkpLHRoaXMuX3NldFNjYWxlU25hcHBpbmcoKSx0aGlzKX0sZS5wcm90b3R5cGUueT1mdW5jdGlvbihlLG4saSl7cmV0dXJuIG51bGw9PWU/dC5wcm90b3R5cGUueS5jYWxsKHRoaXMpOih0LnByb3RvdHlwZS55LmNhbGwodGhpcyxlLG4saSksdGhpcy5fc2V0U2NhbGVTbmFwcGluZygpLHRoaXMpfSxlLnByb3RvdHlwZS5hdXRvcmFuZ2VNb2RlPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP3QucHJvdG90eXBlLmF1dG9yYW5nZU1vZGUuY2FsbCh0aGlzKToodC5wcm90b3R5cGUuYXV0b3JhbmdlTW9kZS5jYWxsKHRoaXMsZSksdGhpcy5fc2V0U2NhbGVTbmFwcGluZygpLHRoaXMpfSxlLnByb3RvdHlwZS5hdXRvcmFuZ2VTbW9vdGg9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5fYXV0b3JhbmdlU21vb3RoOih0aGlzLl9hdXRvcmFuZ2VTbW9vdGg9dCx0aGlzLl9zZXRTY2FsZVNuYXBwaW5nKCksdGhpcyl9LGUucHJvdG90eXBlLl9zZXRTY2FsZVNuYXBwaW5nPWZ1bmN0aW9uKCl7IngiPT09dGhpcy5hdXRvcmFuZ2VNb2RlKCkmJnRoaXMueCgpJiZ0aGlzLngoKS5zY2FsZSYmdGhpcy54KCkuc2NhbGUgaW5zdGFuY2VvZiBEbXQuUXVhbnRpdGF0aXZlU2NhbGUmJnRoaXMueCgpLnNjYWxlLnNuYXBwaW5nRG9tYWluRW5hYmxlZCghdGhpcy5hdXRvcmFuZ2VTbW9vdGgoKSksInkiPT09dGhpcy5hdXRvcmFuZ2VNb2RlKCkmJnRoaXMueSgpJiZ0aGlzLnkoKS5zY2FsZSYmdGhpcy55KCkuc2NhbGUgaW5zdGFuY2VvZiBEbXQuUXVhbnRpdGF0aXZlU2NhbGUmJnRoaXMueSgpLnNjYWxlLnNuYXBwaW5nRG9tYWluRW5hYmxlZCghdGhpcy5hdXRvcmFuZ2VTbW9vdGgoKSl9LGUucHJvdG90eXBlLmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX2N1cnZlOih0aGlzLl9jdXJ2ZT10LHRoaXMucmVuZGVyKCksdGhpcyl9LGUucHJvdG90eXBlLmRvd25zYW1wbGluZ0VuYWJsZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5fZG93bnNhbXBsaW5nRW5hYmxlZDoodGhpcy5fZG93bnNhbXBsaW5nRW5hYmxlZD10LHRoaXMpfSxlLnByb3RvdHlwZS5jcm9wcGVkUmVuZGVyaW5nRW5hYmxlZD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9jcm9wcGVkUmVuZGVyaW5nRW5hYmxlZDoodGhpcy5fY3JvcHBlZFJlbmRlcmluZ0VuYWJsZWQ9dCx0aGlzLnJlbmRlcigpLHRoaXMpfSxlLnByb3RvdHlwZS5jb2xsYXBzZURlbnNlTGluZXNFbmFibGVkPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX2NvbGxhcHNlRGVuc2VWZXJ0aWNhbExpbmVzRW5hYmxlZDoodGhpcy5fY29sbGFwc2VEZW5zZVZlcnRpY2FsTGluZXNFbmFibGVkPXQsdGhpcy5yZW5kZXIoKSx0aGlzKX0sZS5wcm90b3R5cGUuX2NyZWF0ZURyYXdlcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiBuZXcgU2d0LlByb3h5RHJhd2VyKChmdW5jdGlvbigpe3JldHVybiBuZXcgemd0LkxpbmVTVkdEcmF3ZXJ9KSwoZnVuY3Rpb24obil7cmV0dXJuIG5ldyBWZ3QuQ2FudmFzRHJhd2VyKG4semd0Lm1ha2VMaW5lQ2FudmFzRHJhd1N0ZXAoKGZ1bmN0aW9uKCl7cmV0dXJuIGUuX2QzTGluZUZhY3RvcnkodCl9KSkpfSkpfSxlLnByb3RvdHlwZS5nZXRFeHRlbnRzRm9yUHJvcGVydHk9ZnVuY3Rpb24oZSl7dmFyIG49dC5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5LmNhbGwodGhpcyxlKTtpZighdGhpcy5fYXV0b3JhbmdlU21vb3RoKXJldHVybiBuO2lmKHRoaXMuYXV0b3JhbmdlTW9kZSgpIT09ZSlyZXR1cm4gbjtpZigieCIhPT10aGlzLmF1dG9yYW5nZU1vZGUoKSYmInkiIT09dGhpcy5hdXRvcmFuZ2VNb2RlKCkpcmV0dXJuIG47dmFyIGkscj10aGlzLl9nZXRFZGdlSW50ZXJzZWN0aW9uUG9pbnRzKCk7cmV0dXJuIGk9InkiPT09dGhpcy5hdXRvcmFuZ2VNb2RlKCk/ci5sZWZ0LmNvbmNhdChyLnJpZ2h0KS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnl9KSk6ci50b3AuY29uY2F0KHIuYm90dG9tKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnh9KSksbi5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBpZHQuZXh0ZW50KGlkdC5tZXJnZShbdCxpXSkpfSkpfSxlLnByb3RvdHlwZS5fZ2V0RWRnZUludGVyc2VjdGlvblBvaW50cz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7aWYoISh0aGlzLnkoKS5zY2FsZSBpbnN0YW5jZW9mIERtdC5RdWFudGl0YXRpdmVTY2FsZSYmdGhpcy54KCkuc2NhbGUgaW5zdGFuY2VvZiBEbXQuUXVhbnRpdGF0aXZlU2NhbGUpKXJldHVybntsZWZ0OltdLHJpZ2h0OltdLHRvcDpbXSxib3R0b206W119O3ZhciBlPXRoaXMueSgpLnNjYWxlLG49dGhpcy54KCkuc2NhbGUsaT17bGVmdDpbXSxyaWdodDpbXSx0b3A6W10sYm90dG9tOltdfSxyPW4uc2NhbGUobi5kb21haW4oKVswXSksbz1uLnNjYWxlKG4uZG9tYWluKClbMV0pLGE9ZS5zY2FsZShlLmRvbWFpbigpWzBdKSxzPWUuc2NhbGUoZS5kb21haW4oKVsxXSk7cmV0dXJuIHRoaXMuZGF0YXNldHMoKS5mb3JFYWNoKChmdW5jdGlvbihsKXtmb3IodmFyIGMsdSxoLGQscD1sLmRhdGEoKSxmPTE7ZjxwLmxlbmd0aDtmKyspYz1ofHxuLnNjYWxlKHQueCgpLmFjY2Vzc29yKHBbZi0xXSxmLTEsbCkpLHU9ZHx8ZS5zY2FsZSh0LnkoKS5hY2Nlc3NvcihwW2YtMV0sZi0xLGwpKSxoPW4uc2NhbGUodC54KCkuYWNjZXNzb3IocFtmXSxmLGwpKSxkPWUuc2NhbGUodC55KCkuYWNjZXNzb3IocFtmXSxmLGwpKSxjPHI9PXI8PWgmJmkubGVmdC5wdXNoKHt4OnIseTplLmludmVydCh1KyhyLWMpKihkLXUpLyhoLWMpKX0pLGM8bz09bzw9aCYmaS5yaWdodC5wdXNoKHt4Om8seTplLmludmVydCh1KyhvLWMpKihkLXUpLyhoLWMpKX0pLHU8cz09czw9ZCYmaS50b3AucHVzaCh7eDpuLmludmVydChjKyhzLXUpKihoLWMpLyhkLXUpKSx5OnN9KSx1PGE9PWE8PWQmJmkuYm90dG9tLnB1c2goe3g6bi5pbnZlcnQoYysoYS11KSooaC1jKS8oZC11KSkseTphfSl9KSksaX0sZS5wcm90b3R5cGUuX2dldFJlc2V0WUZ1bmN0aW9uPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy55KCkuc2NhbGUuZG9tYWluKCksZT1NYXRoLm1heCh0WzBdLHRbMV0pLG49TWF0aC5taW4odFswXSx0WzFdKSxpPWU8MCYmZXx8bj4wJiZufHwwLHI9dGhpcy55KCkuc2NhbGUuc2NhbGUoaSk7cmV0dXJuIGZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gcn19LGUucHJvdG90eXBlLl9nZW5lcmF0ZURyYXdTdGVwcz1mdW5jdGlvbigpe3ZhciB0PVtdO2lmKHRoaXMuX2FuaW1hdGVPbk5leHRSZW5kZXIoKSl7dmFyIGU9dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCk7ZS5kPXRoaXMuX2NvbnN0cnVjdExpbmVQcm9qZWN0b3IoVGd0LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSx0aGlzLl9nZXRSZXNldFlGdW5jdGlvbigpKSx0LnB1c2goe2F0dHJUb1Byb2plY3RvcjplLGFuaW1hdG9yOnRoaXMuX2dldEFuaW1hdG9yKHRfdC5BbmltYXRvci5SRVNFVCl9KX1yZXR1cm4gdC5wdXNoKHthdHRyVG9Qcm9qZWN0b3I6dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3IodF90LkFuaW1hdG9yLk1BSU4pfSksdH0sZS5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yPWZ1bmN0aW9uKCl7dmFyIGU9dC5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yLmNhbGwodGhpcyk7cmV0dXJuIE9iamVjdC5rZXlzKGUpLmZvckVhY2goKGZ1bmN0aW9uKHQpe2lmKCJkIiE9PXQpe3ZhciBuPWVbdF07ZVt0XT1mdW5jdGlvbih0LGUsaSl7cmV0dXJuIHQubGVuZ3RoPjA/bih0WzBdLGUsaSk6bnVsbH19fSkpLGV9LGUucHJvdG90eXBlLmVudGl0aWVzQXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5lbnRpdHlOZWFyZXN0QnlYVGhlblkodCk7cmV0dXJuIG51bGwhPWU/W2VdOltdfSxlLnByb3RvdHlwZS5lbnRpdHlOZWFyZXN0QnlYVGhlblk9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG49MS8wLGk9MS8wLHI9dGhpcy5ib3VuZHMoKSxvPXRoaXMuZW50aXRpZXMoKSxhPW8ubGVuZ3RoLHM9MDtzPGE7cysrKXt2YXIgbD1vW3NdO2lmKFNtdC5NYXRoLndpdGhpbihsLnBvc2l0aW9uLHIpKXt2YXIgYz1NYXRoLmFicyh0LngtbC5wb3NpdGlvbi54KSx1PU1hdGguYWJzKHQueS1sLnBvc2l0aW9uLnkpOyhjPG58fGM9PT1uJiZ1PGkpJiYoZT1sLG49YyxpPXUpfX1yZXR1cm4gZX0sZS5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycz1mdW5jdGlvbigpe3ZhciBlPXQucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnMuY2FsbCh0aGlzKTtyZXR1cm4gZS5kPXRoaXMuX2NvbnN0cnVjdExpbmVQcm9qZWN0b3IoVGd0LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSxUZ3QuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpKSxlfSxlLnByb3RvdHlwZS5fY29uc3RydWN0TGluZVByb2plY3Rvcj1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7cmV0dXJuIGZ1bmN0aW9uKGkscixvKXtyZXR1cm4gbi5fZDNMaW5lRmFjdG9yeShvLHQsZSkoaSl9fSxlLnByb3RvdHlwZS5fZDNMaW5lRmFjdG9yeT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHZvaWQgMD09PWUmJihlPVRndC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSkpLHZvaWQgMD09PW4mJihuPVRndC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSkpLGlkdC5saW5lKCkueCgoZnVuY3Rpb24obixpKXtyZXR1cm4gZShuLGksdCl9KSkueSgoZnVuY3Rpb24oZSxpKXtyZXR1cm4gbihlLGksdCl9KSkuY3VydmUodGhpcy5fZ2V0Q3VydmVGYWN0b3J5KCkpLmRlZmluZWQoKGZ1bmN0aW9uKGkscil7cmV0dXJuKGZ1bmN0aW9uKHQsaSxyKXt2YXIgbz1lKHQsaSxyKSxhPW4odCxpLHIpO3JldHVybiBTbXQuTWF0aC5pc1ZhbGlkTnVtYmVyKG8pJiZTbXQuTWF0aC5pc1ZhbGlkTnVtYmVyKGEpfSkoaSxyLHQpfSkpfSxlLnByb3RvdHlwZS5fZ2V0Q3VydmVGYWN0b3J5PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jdXJ2ZSgpO2lmKCJzdHJpbmciPT10eXBlb2YgdCl7dmFyIGU9blt0XTtyZXR1cm4gbnVsbD09ZT9uLmxpbmVhcjplfXJldHVybiB0fSxlLnByb3RvdHlwZS5fZ2V0RGF0YVRvRHJhdz1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT1uZXcgU210Lk1hcDtyZXR1cm4gdGhpcy5kYXRhc2V0cygpLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciBpPW4uZGF0YSgpO2lmKHQuX2Nyb3BwZWRSZW5kZXJpbmdFbmFibGVkfHx0Ll9kb3duc2FtcGxpbmdFbmFibGVkKXtmb3IodmFyIHI9W10sbz1pLmxlbmd0aCxhPTA7YTxvO2ErKylyW2FdPWE7dC5fY3JvcHBlZFJlbmRlcmluZ0VuYWJsZWQmJihyPXQuX2ZpbHRlckNyb3BwZWRSZW5kZXJpbmcobixyKSksdC5fZG93bnNhbXBsaW5nRW5hYmxlZCYmKHI9dC5fZmlsdGVyRG93bnNhbXBsaW5nKG4scikpLHQuX2NvbGxhcHNlRGVuc2VWZXJ0aWNhbExpbmVzRW5hYmxlZCYmKHI9dC5fZmlsdGVyRGVuc2VMaW5lcyhuLHIpKTt2YXIgcz1bXSxsPXIubGVuZ3RoO2ZvcihhPTA7YTxsO2ErKylzW2FdPWlbclthXV07ZS5zZXQobixbc10pfWVsc2UgZS5zZXQobixbaV0pfSkpLGV9LGUucHJvdG90eXBlLl9maWx0ZXJDcm9wcGVkUmVuZGVyaW5nPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXRoaXMsaT1UZ3QuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpLHI9VGd0LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKSxvPXQuZGF0YSgpLGE9W10scz1mdW5jdGlvbih0LGUpe3JldHVybiBTbXQuTWF0aC5pblJhbmdlKHQsMCxuLndpZHRoKCkpJiZTbXQuTWF0aC5pblJhbmdlKGUsMCxuLmhlaWdodCgpKX0sbD0wO2w8ZS5sZW5ndGg7bCsrKXt2YXIgYz1zKGkob1tlW2xdXSxlW2xdLHQpLHIob1tlW2xdXSxlW2xdLHQpKTtpZighYyYmbnVsbCE9ZVtsLTFdJiZudWxsIT1vW2VbbC0xXV0pe3ZhciB1PWkob1tlW2wtMV1dLGVbbC0xXSx0KSxoPXIob1tlW2wtMV1dLGVbbC0xXSx0KTtjPWN8fHModSxoKX1pZighYyYmbnVsbCE9ZVtsKzFdJiZudWxsIT1vW2VbbCsxXV0pe3ZhciBkPWkob1tlW2wrMV1dLGVbbCsxXSx0KSxwPXIob1tlW2wrMV1dLGVbbCsxXSx0KTtjPWN8fHMoZCxwKX1jJiZhLnB1c2goZVtsXSl9cmV0dXJuIGF9LGUucHJvdG90eXBlLl9maWx0ZXJEb3duc2FtcGxpbmc9ZnVuY3Rpb24odCxlKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuW107Zm9yKHZhciBuPXQuZGF0YSgpLGk9VGd0LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSxyPVRndC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSksbz1bZVswXV0sYT1mdW5jdGlvbihvLGEpe3ZhciBzPWkobltlW29dXSxlW29dLHQpLGw9cihuW2Vbb11dLGVbb10sdCksYz1pKG5bZVtvKzFdXSxlW28rMV0sdCksdT1yKG5bZVtvKzFdXSxlW28rMV0sdCk7aWYoYT09PTEvMClyZXR1cm4gTWF0aC5mbG9vcihzKT09PU1hdGguZmxvb3IoYyk7dmFyIGg9bCsoYy1zKSphO3JldHVybiBNYXRoLmZsb29yKHUpPT09TWF0aC5mbG9vcihoKX0scz0wO3M8ZS5sZW5ndGgtMTspe2Zvcih2YXIgbD1lW3NdLGM9aShuW2Vbc11dLGVbc10sdCksdT1yKG5bZVtzXV0sZVtzXSx0KSxoPWkobltlW3MrMV1dLGVbcysxXSx0KSxkPXIobltlW3MrMV1dLGVbcysxXSx0KSxwPU1hdGguZmxvb3IoYyk9PT1NYXRoLmZsb29yKGgpPzEvMDooZC11KS8oaC1jKSxmPWVbc10sbT1wPT09MS8wP3U6YyxnPWYsXz1tLHk9ITA7czxlLmxlbmd0aC0xJiYoeXx8YShzLHApKTspe3MrKyx5PSExO3ZhciB2PXA9PT0xLzA/cihuW2Vbc11dLGVbc10sdCk6aShuW2Vbc11dLGVbc10sdCk7dj5fJiYoXz12LGc9ZVtzXSksdjxtJiYobT12LGY9ZVtzXSl9dmFyIGI9ZVtzXTtmIT09bCYmby5wdXNoKGYpLGchPT1mJiZnIT09bCYmby5wdXNoKGcpLGIhPT1sJiZiIT09ZiYmYiE9PWcmJm8ucHVzaChiKX1yZXR1cm4gb30sZS5wcm90b3R5cGUuX2ZpbHRlckRlbnNlTGluZXM9ZnVuY3Rpb24odCxlKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuW107dmFyIG49dC5kYXRhKCksaT1UZ3QuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpLHI9VGd0LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKTtyZXR1cm4gdGhpcy5fYnVja2V0QnlYKHQsZSwoZnVuY3Rpb24oZSl7cmV0dXJuIGkobltlXSxlLHQpfSksKGZ1bmN0aW9uKGUpe3JldHVybiByKG5bZV0sZSx0KX0pKX0sZS5wcm90b3R5cGUuX2J1Y2tldEJ5WD1mdW5jdGlvbih0LGUsbixpKXtmb3IodmFyIHI9W10sbz10LmRhdGEoKSxhPW51bGwscz1lLmxlbmd0aCxsPTA7bDw9czsrK2wpe3ZhciBjPWVbbF07aWYobnVsbCE9b1tjXSl7dmFyIHU9TWF0aC5mbG9vcihuKGMpKSxoPWkoYyk7bnVsbD09YT9hPW5ldyBTbXQuQnVja2V0KGMsdSxoKTphLmlzSW5CdWNrZXQodSk/YS5hZGRUb0J1Y2tldChoLGMpOihyLnB1c2guYXBwbHkocixhLmdldFVuaXF1ZUluZGljZXMoKSksYT1uZXcgU210LkJ1Y2tldChjLHUsaCkpfX1yZXR1cm4gbnVsbCE9YSYmci5wdXNoLmFwcGx5KHIsYS5nZXRVbmlxdWVJbmRpY2VzKCkpLHJ9LGV9KShVZ3QuWFlQbG90KTtlLkxpbmU9aX0pKSxHZ3Q9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBlPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gZS5hZGRDbGFzcygiYXJlYS1wbG90IiksZS55MCgwKSxlLmF0dHIoImZpbGwtb3BhY2l0eSIsLjI1KSxlLmF0dHIoImZpbGwiLChuZXcgVW10LkNvbG9yKS5yYW5nZSgpWzBdKSxlLl9saW5lRHJhd2Vycz1uZXcgU210Lk1hcCxlfXJldHVybiBEZnQuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUueT1mdW5jdGlvbihuLGkpe2lmKG51bGw9PW4pcmV0dXJuIHQucHJvdG90eXBlLnkuY2FsbCh0aGlzKTtpZihudWxsPT1pP3QucHJvdG90eXBlLnkuY2FsbCh0aGlzLG4pOnQucHJvdG90eXBlLnkuY2FsbCh0aGlzLG4saSksbnVsbCE9aSl7dmFyIHI9dGhpcy55MCgpLmFjY2Vzc29yO251bGwhPXImJnRoaXMuX2JpbmRQcm9wZXJ0eShlLl9ZMF9LRVkscixpKSx0aGlzLl91cGRhdGVZU2NhbGUoKX1yZXR1cm4gdGhpc30sZS5wcm90b3R5cGUueTA9ZnVuY3Rpb24odCl7aWYobnVsbD09dClyZXR1cm4gdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQoZS5fWTBfS0VZKTt2YXIgbj10aGlzLnkoKTtyZXR1cm4gdGhpcy5fYmluZFByb3BlcnR5KGUuX1kwX0tFWSx0LG4mJm4uc2NhbGUpLHRoaXMuX3VwZGF0ZVlTY2FsZSgpLHRoaXMucmVuZGVyKCksdGhpc30sZS5wcm90b3R5cGUuX29uRGF0YXNldFVwZGF0ZT1mdW5jdGlvbigpe3QucHJvdG90eXBlLl9vbkRhdGFzZXRVcGRhdGUuY2FsbCh0aGlzKSx0aGlzLl91cGRhdGVZU2NhbGUoKX0sZS5wcm90b3R5cGUuX2FkZERhdGFzZXQ9ZnVuY3Rpb24oZSl7dmFyIG49dGhpcztyZXR1cm4gdGhpcy5fbGluZURyYXdlcnMuc2V0KGUsbmV3IFZndC5Qcm94eURyYXdlcigoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHpndC5MaW5lU1ZHRHJhd2VyfSksKGZ1bmN0aW9uKHQpe3JldHVybiBuZXcgVmd0LkNhbnZhc0RyYXdlcih0LHpndC5tYWtlTGluZUNhbnZhc0RyYXdTdGVwKChmdW5jdGlvbigpe3ZhciB0PVRndC5QbG90Ll9zY2FsZWRBY2Nlc3NvcihuLngoKSksaT1UZ3QuUGxvdC5fc2NhbGVkQWNjZXNzb3Iobi55KCkpO3JldHVybiBuLl9kM0xpbmVGYWN0b3J5KGUsdCxpKX0pKSl9KSkpLHQucHJvdG90eXBlLl9hZGREYXRhc2V0LmNhbGwodGhpcyxlKSx0aGlzfSxlLnByb3RvdHlwZS5fY3JlYXRlTm9kZXNGb3JEYXRhc2V0PWZ1bmN0aW9uKGUpe3QucHJvdG90eXBlLl9jcmVhdGVOb2Rlc0ZvckRhdGFzZXQuY2FsbCh0aGlzLGUpO3ZhciBuPXRoaXMuX2xpbmVEcmF3ZXJzLmdldChlKTtyZXR1cm4ic3ZnIj09PXRoaXMucmVuZGVyZXIoKT9uLnVzZVNWRyh0aGlzLl9yZW5kZXJBcmVhKTpuLnVzZUNhbnZhcyh0aGlzLl9jYW52YXMpLG59LGUucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0Tm9kZXM9ZnVuY3Rpb24oZSl7dC5wcm90b3R5cGUuX3JlbW92ZURhdGFzZXROb2Rlcy5jYWxsKHRoaXMsZSksdGhpcy5fbGluZURyYXdlcnMuZ2V0KGUpLnJlbW92ZSgpfSxlLnByb3RvdHlwZS5fYWRkaXRpb25hbFBhaW50PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXRoaXMuX2dlbmVyYXRlTGluZURyYXdTdGVwcygpLG49dGhpcy5fZ2V0RGF0YVRvRHJhdygpO3RoaXMuZGF0YXNldHMoKS5mb3JFYWNoKChmdW5jdGlvbihpKXt2YXIgcj1UZ3QuUGxvdC5hcHBseURyYXdTdGVwcyhlLGkpO3QuX2xpbmVEcmF3ZXJzLmdldChpKS5kcmF3KG4uZ2V0KGkpLHIpfSkpfSxlLnByb3RvdHlwZS5fZ2VuZXJhdGVMaW5lRHJhd1N0ZXBzPWZ1bmN0aW9uKCl7dmFyIHQ9W107aWYodGhpcy5fYW5pbWF0ZU9uTmV4dFJlbmRlcigpKXt2YXIgZT10aGlzLl9nZW5lcmF0ZUxpbmVBdHRyVG9Qcm9qZWN0b3IoKTtlLmQ9dGhpcy5fY29uc3RydWN0TGluZVByb2plY3RvcihUZ3QuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpLHRoaXMuX2dldFJlc2V0WUZ1bmN0aW9uKCkpLHQucHVzaCh7YXR0clRvUHJvamVjdG9yOmUsYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3IodF90LkFuaW1hdG9yLlJFU0VUKX0pfXJldHVybiB0LnB1c2goe2F0dHJUb1Byb2plY3Rvcjp0aGlzLl9nZW5lcmF0ZUxpbmVBdHRyVG9Qcm9qZWN0b3IoKSxhbmltYXRvcjp0aGlzLl9nZXRBbmltYXRvcih0X3QuQW5pbWF0b3IuTUFJTil9KSx0fSxlLnByb3RvdHlwZS5fZ2VuZXJhdGVMaW5lQXR0clRvUHJvamVjdG9yPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCk7cmV0dXJuIHQuZD10aGlzLl9jb25zdHJ1Y3RMaW5lUHJvamVjdG9yKFRndC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksVGd0LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKSksdH0sZS5wcm90b3R5cGUuX2NyZWF0ZURyYXdlcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiBuZXcgU2d0LlByb3h5RHJhd2VyKChmdW5jdGlvbigpe3JldHVybiBuZXcgUmd0LkFyZWFTVkdEcmF3ZXJ9KSwoZnVuY3Rpb24obil7cmV0dXJuIG5ldyBWZ3QuQ2FudmFzRHJhd2VyKG4sUmd0Lm1ha2VBcmVhQ2FudmFzRHJhd1N0ZXAoKGZ1bmN0aW9uKCl7dmFyIG49ZS5fY29vcmRpbmF0ZVByb2plY3RvcnMoKSxpPW5bMF0scj1uWzFdLG89blsyXSxhPWUuX2NyZWF0ZURlZmluZWRQcm9qZWN0b3IoaSxyKTtyZXR1cm4gZS5fY3JlYXRlQXJlYUdlbmVyYXRvcihpLHIsbyxhLHQpfSksKGZ1bmN0aW9uKCl7dmFyIG49ZS5fY29vcmRpbmF0ZVByb2plY3RvcnMoKSxpPW5bMF0scj1uWzFdLG89ZS5fY3JlYXRlRGVmaW5lZFByb2plY3RvcihpLHIpO3JldHVybiBlLl9jcmVhdGVUb3BMaW5lR2VuZXJhdG9yKGkscixvLHQpfSkpKX0pKX0sZS5wcm90b3R5cGUuX2dlbmVyYXRlRHJhd1N0ZXBzPWZ1bmN0aW9uKCl7dmFyIHQ9W107aWYodGhpcy5fYW5pbWF0ZU9uTmV4dFJlbmRlcigpKXt2YXIgZT10aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKTtlLmQ9dGhpcy5fY29uc3RydWN0QXJlYVByb2plY3RvcihUZ3QuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpLHRoaXMuX2dldFJlc2V0WUZ1bmN0aW9uKCksVGd0LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueTAoKSkpLHQucHVzaCh7YXR0clRvUHJvamVjdG9yOmUsYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3IodF90LkFuaW1hdG9yLlJFU0VUKX0pfXJldHVybiB0LnB1c2goe2F0dHJUb1Byb2plY3Rvcjp0aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxhbmltYXRvcjp0aGlzLl9nZXRBbmltYXRvcih0X3QuQW5pbWF0b3IuTUFJTil9KSx0fSxlLnByb3RvdHlwZS5fdXBkYXRlWVNjYWxlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nZXRFeHRlbnRzRm9yUHJvcGVydHkoInkwIiksZT1TbXQuQXJyYXkuZmxhdHRlbih0KSxuPVNtdC5BcnJheS51bmlxKGUpLGk9MT09PW4ubGVuZ3RoP25bMF06bnVsbCxyPXRoaXMueSgpLG89ciYmci5zY2FsZTtudWxsIT1vJiYobnVsbCE9dGhpcy5fY29uc3RhbnRCYXNlbGluZVZhbHVlUHJvdmlkZXImJihvLnJlbW92ZVBhZGRpbmdFeGNlcHRpb25zUHJvdmlkZXIodGhpcy5fY29uc3RhbnRCYXNlbGluZVZhbHVlUHJvdmlkZXIpLHRoaXMuX2NvbnN0YW50QmFzZWxpbmVWYWx1ZVByb3ZpZGVyPW51bGwpLG51bGwhPWkmJih0aGlzLl9jb25zdGFudEJhc2VsaW5lVmFsdWVQcm92aWRlcj1mdW5jdGlvbigpe3JldHVybltpXX0sby5hZGRQYWRkaW5nRXhjZXB0aW9uc1Byb3ZpZGVyKHRoaXMuX2NvbnN0YW50QmFzZWxpbmVWYWx1ZVByb3ZpZGVyKSkpfSxlLnByb3RvdHlwZS5fZ2V0UmVzZXRZRnVuY3Rpb249ZnVuY3Rpb24oKXtyZXR1cm4gVGd0LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueTAoKSl9LGUucHJvdG90eXBlLl9jb29yZGluYXRlUHJvamVjdG9ycz1mdW5jdGlvbigpe3JldHVybltUZ3QuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpLFRndC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSksVGd0LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueTAoKSldfSxlLnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzPWZ1bmN0aW9uKCl7dmFyIGU9dC5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycy5jYWxsKHRoaXMpLG49dGhpcy5fY29vcmRpbmF0ZVByb2plY3RvcnMoKTtyZXR1cm4gZS5kPXRoaXMuX2NvbnN0cnVjdEFyZWFQcm9qZWN0b3IoblswXSxuWzFdLG5bMl0pLGV9LGUucHJvdG90eXBlLnNlbGVjdGlvbnM9ZnVuY3Rpb24oZSl7dmFyIG49dGhpcztpZih2b2lkIDA9PT1lJiYoZT10aGlzLmRhdGFzZXRzKCkpLCJjYW52YXMiPT09dGhpcy5yZW5kZXJlcigpKXJldHVybiBpZHQuc2VsZWN0QWxsKCk7dmFyIGk9dC5wcm90b3R5cGUuc2VsZWN0aW9ucy5jYWxsKHRoaXMsZSkubm9kZXMoKTtyZXR1cm4gZS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBuLl9saW5lRHJhd2Vycy5nZXQodCl9KSkuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9dH0pKS5mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gaS5wdXNoLmFwcGx5KGksdC5nZXRWaXN1YWxQcmltaXRpdmVzKCkpfSkpLGlkdC5zZWxlY3RBbGwoaSl9LGUucHJvdG90eXBlLl9jb25zdHJ1Y3RBcmVhUHJvamVjdG9yPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT10aGlzLHI9dGhpcy5fY3JlYXRlRGVmaW5lZFByb2plY3RvcihUZ3QuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpLFRndC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSkpO3JldHVybiBmdW5jdGlvbihvLGEscyl7cmV0dXJuIGkuX2NyZWF0ZUFyZWFHZW5lcmF0b3IodCxlLG4scixzKShvKX19LGUucHJvdG90eXBlLl9jcmVhdGVEZWZpbmVkUHJvamVjdG9yPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4saSxyKXt2YXIgbz10KG4saSxyKSxhPWUobixpLHIpO3JldHVybiBTbXQuTWF0aC5pc1ZhbGlkTnVtYmVyKG8pJiZTbXQuTWF0aC5pc1ZhbGlkTnVtYmVyKGEpfX0sZS5wcm90b3R5cGUuX2NyZWF0ZUFyZWFHZW5lcmF0b3I9ZnVuY3Rpb24odCxlLG4saSxyKXt2YXIgbz10aGlzLl9nZXRDdXJ2ZUZhY3RvcnkoKTtyZXR1cm4gaWR0LmFyZWEoKS54KChmdW5jdGlvbihlLG4pe3JldHVybiB0KGUsbixyKX0pKS55MSgoZnVuY3Rpb24odCxuKXtyZXR1cm4gZSh0LG4scil9KSkueTAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odCxlLHIpfSkpLmN1cnZlKG8pLmRlZmluZWQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGkodCxlLHIpfSkpfSxlLnByb3RvdHlwZS5fY3JlYXRlVG9wTGluZUdlbmVyYXRvcj1mdW5jdGlvbih0LGUsbixpKXt2YXIgcj10aGlzLl9nZXRDdXJ2ZUZhY3RvcnkoKTtyZXR1cm4gaWR0LmxpbmUoKS54KChmdW5jdGlvbihlLG4pe3JldHVybiB0KGUsbixpKX0pKS55KChmdW5jdGlvbih0LG4pe3JldHVybiBlKHQsbixpKX0pKS5jdXJ2ZShyKS5kZWZpbmVkKChmdW5jdGlvbih0LGUpe3JldHVybiBuKHQsZSxpKX0pKX0sZS5fWTBfS0VZPSJ5MCIsZX0pKGpndC5MaW5lKTtlLkFyZWE9bn0pKSxXZ3Q9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLkJhck9yaWVudGF0aW9uPUlmdC5tYWtlRW51bShbInZlcnRpY2FsIiwiaG9yaXpvbnRhbCJdKSxlLkxhYmVsc1Bvc2l0aW9uPUlmdC5tYWtlRW51bShbInN0YXJ0IiwibWlkZGxlIiwiZW5kIiwib3V0c2lkZSJdKSxlLkJhckFsaWdubWVudD1JZnQubWFrZUVudW0oWyJzdGFydCIsIm1pZGRsZSIsImVuZCJdKTt2YXIgbj0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gbihyKXt2b2lkIDA9PT1yJiYocj0idmVydGljYWwiKTt2YXIgbz10LmNhbGwodGhpcyl8fHRoaXM7aWYoby5fbGFiZWxGb3JtYXR0ZXI9Q210LmlkZW50aXR5KCksby5fbGFiZWxzRW5hYmxlZD0hMSxvLl9sYWJlbHNQb3NpdGlvbj1lLkxhYmVsc1Bvc2l0aW9uLmVuZCxvLl9oaWRlQmFyc0lmQW55QXJlVG9vV2lkZT0hMCxvLl9iYXJBbGlnbm1lbnQ9Im1pZGRsZSIsby5fY29tcHV0ZUJhclBpeGVsVGhpY2tuZXNzPXhndC5tZW1vaXplKGkpLG8uX2ZpeGVkQmFyUGl4ZWxUaGlja25lc3M9ITAsby5hZGRDbGFzcygiYmFyLXBsb3QiKSwidmVydGljYWwiIT09ciYmImhvcml6b250YWwiIT09cil0aHJvdyBuZXcgRXJyb3IocisiIGlzIG5vdCBhIHZhbGlkIG9yaWVudGF0aW9uIGZvciBQbG90cy5CYXIiKTtyZXR1cm4gby5faXNWZXJ0aWNhbD0idmVydGljYWwiPT09cixvLmFuaW1hdG9yKCJiYXNlbGluZSIsbmV3IEJmdC5OdWxsKSxvLmF0dHIoImZpbGwiLChuZXcgVW10LkNvbG9yKS5yYW5nZSgpWzBdKSxvLmF0dHIobi5fQkFSX1RISUNLTkVTU19LRVksKGZ1bmN0aW9uKCl7cmV0dXJuIG8uX2JhclBpeGVsVGhpY2tuZXNzKCl9KSksby5fbGFiZWxDb25maWc9bmV3IFNtdC5NYXAsby5fYmFzZWxpbmVWYWx1ZVByb3ZpZGVyPWZ1bmN0aW9uKCl7cmV0dXJuW28uYmFzZWxpbmVWYWx1ZSgpXX0sb31yZXR1cm4gRGZ0Ll9fZXh0ZW5kcyhuLHQpLG4ucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24oZSxuLGkpe3JldHVybiB0LnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcyxlLG4saSksdGhpcy5fdXBkYXRlRXh0ZW50cygpLHRoaXN9LG4ucHJvdG90eXBlLng9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbnVsbD09ZT90LnByb3RvdHlwZS54LmNhbGwodGhpcyk6KG51bGw9PW4/dC5wcm90b3R5cGUueC5jYWxsKHRoaXMsZSk6dC5wcm90b3R5cGUueC5jYWxsKHRoaXMsZSxuKSx0aGlzLl91cGRhdGVUaGlja25lc3NBdHRyKCksdGhpcy5fdXBkYXRlTGVuZ3RoU2NhbGUoKSx0aGlzKX0sbi5wcm90b3R5cGUueT1mdW5jdGlvbihlLG4pe3JldHVybiBudWxsPT1lP3QucHJvdG90eXBlLnkuY2FsbCh0aGlzKToobnVsbD09bj90LnByb3RvdHlwZS55LmNhbGwodGhpcyxlKTp0LnByb3RvdHlwZS55LmNhbGwodGhpcyxlLG4pLHRoaXMuX3VwZGF0ZUxlbmd0aFNjYWxlKCksdGhpcyl9LG4ucHJvdG90eXBlLmxlbmd0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc1ZlcnRpY2FsP3RoaXMueSgpOnRoaXMueCgpfSxuLnByb3RvdHlwZS5wb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc1ZlcnRpY2FsP3RoaXMueCgpOnRoaXMueSgpfSxuLnByb3RvdHlwZS5iYXJFbmQ9ZnVuY3Rpb24odCl7aWYobnVsbD09dClyZXR1cm4gdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQobi5fQkFSX0VORF9LRVkpO3ZhciBlPXRoaXMucG9zaXRpb24oKTtyZXR1cm4gdGhpcy5fYmluZFByb3BlcnR5KG4uX0JBUl9FTkRfS0VZLHQsZSYmZS5zY2FsZSksdGhpcy5fdXBkYXRlVGhpY2tuZXNzQXR0cigpLHRoaXMuX3VwZGF0ZUxlbmd0aFNjYWxlKCksdGhpcy5yZW5kZXIoKSx0aGlzfSxuLnByb3RvdHlwZS5iYXJBbGlnbm1lbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5fYmFyQWxpZ25tZW50Oih0aGlzLl9iYXJBbGlnbm1lbnQ9dCx0aGlzLl9jbGVhckF0dHJUb1Byb2plY3RvckNhY2hlKCksdGhpcy5yZW5kZXIoKSx0aGlzKX0sbi5wcm90b3R5cGUub3JpZW50YXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNWZXJ0aWNhbD8idmVydGljYWwiOiJob3Jpem9udGFsIn0sbi5wcm90b3R5cGUuX2NyZWF0ZURyYXdlcj1mdW5jdGlvbigpe3JldHVybiBuZXcgU2d0LlByb3h5RHJhd2VyKChmdW5jdGlvbigpe3JldHVybiBuZXcgRGd0LlJlY3RhbmdsZVNWR0RyYXdlcihuLl9CQVJfQVJFQV9DTEFTUyl9KSwoZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBWZ3QuUmVjdGFuZ2xlQ2FudmFzRHJhd2VyKHQpfSkpfSxuLnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXt0LnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl9iYXNlbGluZT10aGlzLl9yZW5kZXJBcmVhLmFwcGVuZCgibGluZSIpLmNsYXNzZWQoImJhc2VsaW5lIiwhMCl9LG4ucHJvdG90eXBlLmJhc2VsaW5lVmFsdWU9ZnVuY3Rpb24odCl7aWYobnVsbD09dCl7aWYobnVsbCE9dGhpcy5fYmFzZWxpbmVWYWx1ZSlyZXR1cm4gdGhpcy5fYmFzZWxpbmVWYWx1ZTtpZighdGhpcy5fcHJvamVjdG9yc1JlYWR5KCkpcmV0dXJuIDA7dmFyIGU9dGhpcy5sZW5ndGgoKS5zY2FsZTtyZXR1cm4gZSYmZSBpbnN0YW5jZW9mIFVtdC5UaW1lP25ldyBEYXRlKDApOjB9cmV0dXJuIHRoaXMuX2Jhc2VsaW5lVmFsdWU9dCx0aGlzLl91cGRhdGVMZW5ndGhTY2FsZSgpLHRoaXMuX2NsZWFyQXR0clRvUHJvamVjdG9yQ2FjaGUoKSx0aGlzLnJlbmRlcigpLHRoaXN9LG4ucHJvdG90eXBlLmFkZERhdGFzZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHQucHJvdG90eXBlLmFkZERhdGFzZXQuY2FsbCh0aGlzLGUpLHRoaXN9LG4ucHJvdG90eXBlLl9hZGREYXRhc2V0PWZ1bmN0aW9uKGUpe3JldHVybiB0LnByb3RvdHlwZS5fYWRkRGF0YXNldC5jYWxsKHRoaXMsZSksdGhpc30sbi5wcm90b3R5cGUucmVtb3ZlRGF0YXNldD1mdW5jdGlvbihlKXtyZXR1cm4gdC5wcm90b3R5cGUucmVtb3ZlRGF0YXNldC5jYWxsKHRoaXMsZSksdGhpc30sbi5wcm90b3R5cGUuX3JlbW92ZURhdGFzZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHQucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0LmNhbGwodGhpcyxlKSx0aGlzfSxuLnByb3RvdHlwZS5kYXRhc2V0cz1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT90LnByb3RvdHlwZS5kYXRhc2V0cy5jYWxsKHRoaXMpOih0LnByb3RvdHlwZS5kYXRhc2V0cy5jYWxsKHRoaXMsZSksdGhpcyl9LG4ucHJvdG90eXBlLmxhYmVsc0VuYWJsZWQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09dD90aGlzLl9sYWJlbHNFbmFibGVkOih0aGlzLl9sYWJlbHNFbmFibGVkPXQsbnVsbCE9ZSYmKHRoaXMuX2xhYmVsc1Bvc2l0aW9uPWUpLHRoaXMuX2NsZWFyQXR0clRvUHJvamVjdG9yQ2FjaGUoKSx0aGlzLnJlbmRlcigpLHRoaXMpfSxuLnByb3RvdHlwZS5sYWJlbEZvcm1hdHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9sYWJlbEZvcm1hdHRlcjoodGhpcy5fbGFiZWxGb3JtYXR0ZXI9dCx0aGlzLl9jbGVhckF0dHJUb1Byb2plY3RvckNhY2hlKCksdGhpcy5yZW5kZXIoKSx0aGlzKX0sbi5wcm90b3R5cGUuX2NyZWF0ZU5vZGVzRm9yRGF0YXNldD1mdW5jdGlvbihlKXt2YXIgaT10LnByb3RvdHlwZS5fY3JlYXRlTm9kZXNGb3JEYXRhc2V0LmNhbGwodGhpcyxlKSxyPXRoaXMuX3JlbmRlckFyZWEuYXBwZW5kKCJnIikuY2xhc3NlZChuLl9MQUJFTF9BUkVBX0NMQVNTLCEwKSxvPW5ldyBhbXQuU3ZnQ29udGV4dChyLm5vZGUoKSksYT1uZXcgYW10LkNhY2hlTWVhc3VyZXIobykscz1uZXcgYW10LldyaXRlcihhLG8pO3JldHVybiB0aGlzLl9sYWJlbENvbmZpZy5zZXQoZSx7bGFiZWxBcmVhOnIsbWVhc3VyZXI6YSx3cml0ZXI6c30pLGl9LG4ucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0Tm9kZXM9ZnVuY3Rpb24oZSl7dC5wcm90b3R5cGUuX3JlbW92ZURhdGFzZXROb2Rlcy5jYWxsKHRoaXMsZSk7dmFyIG49dGhpcy5fbGFiZWxDb25maWcuZ2V0KGUpO251bGwhPW4mJihuLmxhYmVsQXJlYS5yZW1vdmUoKSx0aGlzLl9sYWJlbENvbmZpZy5kZWxldGUoZSkpfSxuLnByb3RvdHlwZS5lbnRpdHlOZWFyZXN0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1mdW5jdGlvbigpe3ZhciBuPWUuX2lzVmVydGljYWw/ZS5fZ2V0RW50aXR5U3RvcmUoKS5lbnRpdHlOZWFyZXN0WCh0KTplLl9nZXRFbnRpdHlTdG9yZSgpLmVudGl0eU5lYXJlc3RZKHQpO3JldHVybiB2b2lkIDA9PT1uP3ZvaWQgMDplLl9saWdodHdlaWdodFBsb3RFbnRpdHlUb1Bsb3RFbnRpdHkobil9O3JldHVybiB0aGlzLl9maXhlZEJhclBpeGVsVGhpY2tuZXNzP3RoaXMuX2NvbXB1dGVCYXJQaXhlbFRoaWNrbmVzcy5kb0xvY2tlZChuKTpuKCl9LG4ucHJvdG90eXBlLmVudGl0aWVzQXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPWZ1bmN0aW9uKCl7cmV0dXJuIGUuX2VudGl0aWVzSW50ZXJzZWN0aW5nKHQueCx0LnkpfTtyZXR1cm4gdGhpcy5fZml4ZWRCYXJQaXhlbFRoaWNrbmVzcz90aGlzLl9jb21wdXRlQmFyUGl4ZWxUaGlja25lc3MuZG9Mb2NrZWQobik6bigpfSxuLnByb3RvdHlwZS5lbnRpdGllc0luQm91bmRzPWZ1bmN0aW9uKGUpe3ZhciBuPXRoaXMsaT1mdW5jdGlvbigpe3JldHVybiB0LnByb3RvdHlwZS5lbnRpdGllc0luQm91bmRzLmNhbGwobixlKX07cmV0dXJuIHRoaXMuX2ZpeGVkQmFyUGl4ZWxUaGlja25lc3M/dGhpcy5fY29tcHV0ZUJhclBpeGVsVGhpY2tuZXNzLmRvTG9ja2VkKGkpOmkoKX0sbi5wcm90b3R5cGUuZW50aXRpZXNJblhCb3VuZHM9ZnVuY3Rpb24oZSl7dmFyIG49dGhpcyxpPWZ1bmN0aW9uKCl7cmV0dXJuIHQucHJvdG90eXBlLmVudGl0aWVzSW5YQm91bmRzLmNhbGwobixlKX07cmV0dXJuIHRoaXMuX2ZpeGVkQmFyUGl4ZWxUaGlja25lc3M/dGhpcy5fY29tcHV0ZUJhclBpeGVsVGhpY2tuZXNzLmRvTG9ja2VkKGkpOmkoKX0sbi5wcm90b3R5cGUuZW50aXRpZXNJbllCb3VuZHM9ZnVuY3Rpb24oZSl7dmFyIG49dGhpcyxpPWZ1bmN0aW9uKCl7cmV0dXJuIHQucHJvdG90eXBlLmVudGl0aWVzSW5ZQm91bmRzLmNhbGwobixlKX07cmV0dXJuIHRoaXMuX2ZpeGVkQmFyUGl4ZWxUaGlja25lc3M/dGhpcy5fY29tcHV0ZUJhclBpeGVsVGhpY2tuZXNzLmRvTG9ja2VkKGkpOmkoKX0sbi5wcm90b3R5cGUuX2VudGl0aWVzSW50ZXJzZWN0aW5nPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPVtdLGk9dGhpcy5fZ2V0RW50aXR5U3RvcmUoKS5lbnRpdGllcygpLHI9aS5sZW5ndGgsbz0wO288cjtvKyspe3ZhciBhPWlbb107U210LkRPTS5pbnRlcnNlY3RzQkJveCh0LGUsdGhpcy5fZW50aXR5Qm91bmRzKGEpKSYmbi5wdXNoKHRoaXMuX2xpZ2h0d2VpZ2h0UGxvdEVudGl0eVRvUGxvdEVudGl0eShhKSl9cmV0dXJuIG59LG4ucHJvdG90eXBlLl91cGRhdGVMZW5ndGhTY2FsZT1mdW5jdGlvbigpe2lmKHRoaXMuX3Byb2plY3RvcnNSZWFkeSgpKXt2YXIgdD10aGlzLmxlbmd0aCgpLnNjYWxlO3QgaW5zdGFuY2VvZiBEbXQuUXVhbnRpdGF0aXZlU2NhbGUmJih0LmFkZFBhZGRpbmdFeGNlcHRpb25zUHJvdmlkZXIodGhpcy5fYmFzZWxpbmVWYWx1ZVByb3ZpZGVyKSx0LmFkZEluY2x1ZGVkVmFsdWVzUHJvdmlkZXIodGhpcy5fYmFzZWxpbmVWYWx1ZVByb3ZpZGVyKSl9fSxuLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseT1mdW5jdGlvbigpe3ZhciBlPXRoaXM7cmV0dXJuIHRoaXMuX2JhclBpeGVsVGhpY2tuZXNzKCksdGhpcy5fY29tcHV0ZUJhclBpeGVsVGhpY2tuZXNzLmRvTG9ja2VkKChmdW5jdGlvbigpe3JldHVybiB0LnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKGUpfSkpfSxuLnByb3RvdHlwZS5fYWRkaXRpb25hbFBhaW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10aGlzLmxlbmd0aCgpLnNjYWxlLnNjYWxlKHRoaXMuYmFzZWxpbmVWYWx1ZSgpKSxpPXt4MTp0aGlzLl9pc1ZlcnRpY2FsPzA6bix5MTp0aGlzLl9pc1ZlcnRpY2FsP246MCx4Mjp0aGlzLl9pc1ZlcnRpY2FsP3RoaXMud2lkdGgoKTpuLHkyOnRoaXMuX2lzVmVydGljYWw/bjp0aGlzLmhlaWdodCgpfTt0aGlzLl9nZXRBbmltYXRvcigiYmFzZWxpbmUiKS5hbmltYXRlKHRoaXMuX2Jhc2VsaW5lLGkpLHRoaXMuZGF0YXNldHMoKS5mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gZS5fbGFiZWxDb25maWcuZ2V0KHQpLmxhYmVsQXJlYS5zZWxlY3RBbGwoImciKS5yZW1vdmUoKX0pKSx0aGlzLl9sYWJlbHNFbmFibGVkJiZTbXQuV2luZG93LnNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7cmV0dXJuIGUuX2RyYXdMYWJlbHMoKX0pLHQpfSxuLnByb3RvdHlwZS5nZXRFeHRlbnRzRm9yUHJvcGVydHk9ZnVuY3Rpb24oZSl7dmFyIG4saT10aGlzLHI9dC5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5LmNhbGwodGhpcyxlKTtpZigieCI9PT1lJiZ0aGlzLl9pc1ZlcnRpY2FsKW49dGhpcy54KCk7ZWxzZXtpZigieSIhPT1lfHx0aGlzLl9pc1ZlcnRpY2FsKXJldHVybiByO249dGhpcy55KCl9aWYoIShuJiZuLnNjYWxlJiZuLnNjYWxlIGluc3RhbmNlb2YgRG10LlF1YW50aXRhdGl2ZVNjYWxlKSlyZXR1cm4gcjt2YXIgbz1uLnNjYWxlLGE9dGhpcy5fYmFyUGl4ZWxUaGlja25lc3MoKTtyZXR1cm4gci5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBpZHQuZXh0ZW50KFtvLmludmVydChpLl9nZXRQb3NpdGlvbkF0dHIoby5zY2FsZSh0WzBdKSxhKSksby5pbnZlcnQoaS5fZ2V0UG9zaXRpb25BdHRyKG8uc2NhbGUodFswXSksYSkrYSksby5pbnZlcnQoaS5fZ2V0UG9zaXRpb25BdHRyKG8uc2NhbGUodFsxXSksYSkpLG8uaW52ZXJ0KGkuX2dldFBvc2l0aW9uQXR0cihvLnNjYWxlKHRbMV0pLGEpK2EpXSl9KSl9LG4ucHJvdG90eXBlLl9nZXRQb3NpdGlvbkF0dHI9ZnVuY3Rpb24odCxlKXtzd2l0Y2godGhpcy5faXNWZXJ0aWNhbHx8KHQtPWUsZSo9LTEpLHRoaXMuX2JhckFsaWdubWVudCl7Y2FzZSJzdGFydCI6cmV0dXJuIHQ7Y2FzZSJlbmQiOnJldHVybiB0LWU7Y2FzZSJtaWRkbGUiOmRlZmF1bHQ6cmV0dXJuIHQtZS8yfX0sbi5wcm90b3R5cGUuX2RyYXdMYWJlbHM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dGhpcy5fZ2V0RGF0YVRvRHJhdygpLG49dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksaT10aGlzLmRhdGFzZXRzKCkuc29tZSgoZnVuY3Rpb24oaSl7cmV0dXJuIGUuZ2V0KGkpLnNvbWUoKGZ1bmN0aW9uKGUscil7cmV0dXJuIG51bGwhPWUmJnQuX2RyYXdMYWJlbChlLHIsaSxuKX0pKX0pKTt0aGlzLl9oaWRlQmFyc0lmQW55QXJlVG9vV2lkZSYmaSYmdGhpcy5kYXRhc2V0cygpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiB0Ll9sYWJlbENvbmZpZy5nZXQoZSkubGFiZWxBcmVhLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpfSkpfSxuLnByb3RvdHlwZS5fZHJhd0xhYmVsPWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciByPXRoaXMuX2xhYmVsQ29uZmlnLmdldChuKSxvPXIubGFiZWxBcmVhLGE9ci5tZWFzdXJlcixzPXIud3JpdGVyLGw9KDAsdGhpcy5sZW5ndGgoKS5hY2Nlc3NvcikodCxlLG4pLGM9dGhpcy5sZW5ndGgoKS5zY2FsZSx1PW51bGwhPWM/Yy5zY2FsZShsKTpsLGg9bnVsbCE9Yz9jLnNjYWxlKHRoaXMuYmFzZWxpbmVWYWx1ZSgpKTp0aGlzLmJhc2VsaW5lVmFsdWUoKSxkPXt4OmkueCh0LGUsbikseTppLnkodCxlLG4pfSxwPXt3aWR0aDppLndpZHRoKHQsZSxuKSxoZWlnaHQ6aS5oZWlnaHQodCxlLG4pfSxmPXRoaXMuX2xhYmVsRm9ybWF0dGVyKGwsdCxlLG4pLG09YS5tZWFzdXJlKGYpLGc9dGhpcy5fc2hvdWxkU2hvd0xhYmVsT25CYXIoZCxwLG0pLF89dGhpcy5fY2FsY3VsYXRlTGFiZWxQcm9wZXJ0aWVzKGQscCxtLGcsdGhpcy5faXNWZXJ0aWNhbD91PD1oOnU8aCkseT1fLmNvbnRhaW5lckRpbWVuc2lvbnMsdj1fLmxhYmVsQ29udGFpbmVyT3JpZ2luLGI9Xy5sYWJlbE9yaWdpbix4PV8uYWxpZ25tZW50LHc9aS5maWxsKHQsZSxuKSxTPXRoaXMuX2NyZWF0ZUxhYmVsQ29udGFpbmVyKG8sdixiLG0sZyx3KTtyZXR1cm4gcy53cml0ZShmLHkud2lkdGgseS5oZWlnaHQse3hBbGlnbjp4LngseUFsaWduOngueX0sUy5ub2RlKCkpLHRoaXMuX2lzVmVydGljYWw/cC53aWR0aDxtLndpZHRoOnAuaGVpZ2h0PG0uaGVpZ2h0fSxuLnByb3RvdHlwZS5fc2hvdWxkU2hvd0xhYmVsT25CYXI9ZnVuY3Rpb24odCxpLHIpe2lmKHRoaXMuX2xhYmVsc1Bvc2l0aW9uPT09ZS5MYWJlbHNQb3NpdGlvbi5vdXRzaWRlKXJldHVybiExO3ZhciBvPXRoaXMuX2lzVmVydGljYWw/dC55OnQueCxhPXRoaXMuX2lzVmVydGljYWw/aS5oZWlnaHQ6aS53aWR0aCxzPXRoaXMuX2lzVmVydGljYWw/dGhpcy5oZWlnaHQoKTp0aGlzLndpZHRoKCksbD1vK2EsYz1hO3JldHVybiBsPnM/Yz1zLW86bzwwJiYoYz1sKSwodGhpcy5faXNWZXJ0aWNhbD9yLmhlaWdodDpyLndpZHRoKStuLl9MQUJFTF9NQVJHSU5fSU5TSURFX0JBUjw9Y30sbi5wcm90b3R5cGUuX2NhbGN1bGF0ZUxhYmVsUHJvcGVydGllcz1mdW5jdGlvbih0LGkscixvLGEpe3ZhciBzPXRoaXMsbD10aGlzLl9pc1ZlcnRpY2FsP3QueTp0LngsYz10aGlzLl9pc1ZlcnRpY2FsP2kuaGVpZ2h0Omkud2lkdGgsdT10aGlzLl9pc1ZlcnRpY2FsP3IuaGVpZ2h0OnIud2lkdGgsaD0iY2VudGVyIixkPWMscD1sLGY9bCxtPWZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlInRvcExlZnQiOnJldHVybiBoPXMuX2lzVmVydGljYWw/InRvcCI6ImxlZnQiLHArPW4uX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSLHZvaWQoZis9bi5fTEFCRUxfTUFSR0lOX0lOU0lERV9CQVIpO2Nhc2UiY2VudGVyIjpyZXR1cm4gdm9pZChmKz0oYyt1KS8yKTtjYXNlImJvdHRvbVJpZ2h0IjpyZXR1cm4gaD1zLl9pc1ZlcnRpY2FsPyJib3R0b20iOiJyaWdodCIscC09bi5fTEFCRUxfTUFSR0lOX0lOU0lERV9CQVIsdm9pZChmKz1kLW4uX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSLXUpfX07aWYobylzd2l0Y2godGhpcy5fbGFiZWxzUG9zaXRpb24pe2Nhc2UgZS5MYWJlbHNQb3NpdGlvbi5zdGFydDptKGE/ImJvdHRvbVJpZ2h0IjoidG9wTGVmdCIpO2JyZWFrO2Nhc2UgZS5MYWJlbHNQb3NpdGlvbi5taWRkbGU6bSgiY2VudGVyIik7YnJlYWs7Y2FzZSBlLkxhYmVsc1Bvc2l0aW9uLmVuZDptKGE/InRvcExlZnQiOiJib3R0b21SaWdodCIpfWVsc2UgYT8oaD10aGlzLl9pc1ZlcnRpY2FsPyJ0b3AiOiJsZWZ0IixkPWMrbi5fTEFCRUxfTUFSR0lOX0lOU0lERV9CQVIrdSxwLT1uLl9MQUJFTF9NQVJHSU5fSU5TSURFX0JBUit1LGYtPW4uX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSK3UpOihoPXRoaXMuX2lzVmVydGljYWw/ImJvdHRvbSI6InJpZ2h0IixkPWMrbi5fTEFCRUxfTUFSR0lOX0lOU0lERV9CQVIrdSxmKz1jK24uX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSKTtyZXR1cm57Y29udGFpbmVyRGltZW5zaW9uczp7d2lkdGg6dGhpcy5faXNWZXJ0aWNhbD9pLndpZHRoOmQsaGVpZ2h0OnRoaXMuX2lzVmVydGljYWw/ZDppLmhlaWdodH0sbGFiZWxDb250YWluZXJPcmlnaW46e3g6dGhpcy5faXNWZXJ0aWNhbD90Lng6cCx5OnRoaXMuX2lzVmVydGljYWw/cDp0Lnl9LGxhYmVsT3JpZ2luOnt4OnRoaXMuX2lzVmVydGljYWw/dC54K2kud2lkdGgvMi1yLndpZHRoLzI6Zix5OnRoaXMuX2lzVmVydGljYWw/Zjp0LnkraS5oZWlnaHQvMi1yLmhlaWdodC8yfSxhbGlnbm1lbnQ6e3g6dGhpcy5faXNWZXJ0aWNhbD8iY2VudGVyIjpoLHk6dGhpcy5faXNWZXJ0aWNhbD9oOiJjZW50ZXIifX19LG4ucHJvdG90eXBlLl9jcmVhdGVMYWJlbENvbnRhaW5lcj1mdW5jdGlvbih0LGUsbixpLHIsbyl7dmFyIGE9dC5hcHBlbmQoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitlLngrIiwgIitlLnkrIikiKTtpZihyKXthLmNsYXNzZWQoIm9uLWJhci1sYWJlbCIsITApO3ZhciBzPTEuNipTbXQuQ29sb3IuY29udHJhc3QoIndoaXRlIixvKTxTbXQuQ29sb3IuY29udHJhc3QoImJsYWNrIixvKTthLmNsYXNzZWQocz8iZGFyay1sYWJlbCI6ImxpZ2h0LWxhYmVsIiwhMCl9ZWxzZSBhLmNsYXNzZWQoIm9mZi1iYXItbGFiZWwiLCEwKTtyZXR1cm4gYX0sbi5wcm90b3R5cGUuX2dlbmVyYXRlRHJhd1N0ZXBzPWZ1bmN0aW9uKCl7dmFyIHQ9W107aWYodGhpcy5fYW5pbWF0ZU9uTmV4dFJlbmRlcigpKXt2YXIgZT10aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxuPXRoaXMubGVuZ3RoKCkuc2NhbGUuc2NhbGUodGhpcy5iYXNlbGluZVZhbHVlKCkpLGk9dGhpcy5faXNWZXJ0aWNhbD8iaGVpZ2h0Ijoid2lkdGgiO2VbdGhpcy5faXNWZXJ0aWNhbD8ieSI6IngiXT1mdW5jdGlvbigpe3JldHVybiBufSxlW2ldPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LHQucHVzaCh7YXR0clRvUHJvamVjdG9yOmUsYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3IodF90LkFuaW1hdG9yLlJFU0VUKX0pfXJldHVybiB0LnB1c2goe2F0dHJUb1Byb2plY3Rvcjp0aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxhbmltYXRvcjp0aGlzLl9nZXRBbmltYXRvcih0X3QuQW5pbWF0b3IuTUFJTil9KSx0fSxuLnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3I9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLGk9dC5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yLmNhbGwodGhpcykscj10aGlzLmxlbmd0aCgpLnNjYWxlLnNjYWxlKHRoaXMuYmFzZWxpbmVWYWx1ZSgpKSxvPXRoaXMuX2lzVmVydGljYWw/InkiOiJ4IixhPXRoaXMuX2lzVmVydGljYWw/IngiOiJ5IixzPVRndC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnBvc2l0aW9uKCkpLGw9VGd0LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMubGVuZ3RoKCkpLGM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBNYXRoLmFicyhyLWwodCxlLG4pKX0sdT1pW24uX0JBUl9USElDS05FU1NfS0VZXSxoPWkuZ2FwLGQ9bnVsbD09aD91OmZ1bmN0aW9uKHQsZSxpKXt2YXIgcj11KHQsZSxpKTtyZXR1cm4gcjxuLl9CQVJfR0FQTEVTU19USFJFU0hPTERfUFg/cjpyLWgodCxlLGkpfTtyZXR1cm4gaS53aWR0aD10aGlzLl9pc1ZlcnRpY2FsP2Q6YyxpLmhlaWdodD10aGlzLl9pc1ZlcnRpY2FsP2M6ZCxpW29dPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT1sKHQsZSxuKTtyZXR1cm4gaT5yP3I6aX0saVthXT1mdW5jdGlvbih0LG4saSl7cmV0dXJuIGUuX2dldFBvc2l0aW9uQXR0cihzKHQsbixpKSx1KHQsbixpKSl9LGl9LG4ucHJvdG90eXBlLl91cGRhdGVUaGlja25lc3NBdHRyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXRoaXMucG9zaXRpb24oKSxpPXRoaXMuYmFyRW5kKCk7bnVsbCE9ZSYmbnVsbCE9aT8odGhpcy5fZml4ZWRCYXJQaXhlbFRoaWNrbmVzcz0hMSx0aGlzLmF0dHIobi5fQkFSX1RISUNLTkVTU19LRVksKGZ1bmN0aW9uKHQsbixyKXt2YXIgbz1lLmFjY2Vzc29yKHQsbixyKSxhPWkuYWNjZXNzb3IodCxuLHIpO3JldHVybiBvPWUuc2NhbGU/ZS5zY2FsZS5zY2FsZShvKTpvLGE9aS5zY2FsZT9pLnNjYWxlLnNjYWxlKGEpOmEsTWF0aC5hYnMoYS1vKX0pKSk6KHRoaXMuX2ZpeGVkQmFyUGl4ZWxUaGlja25lc3M9ITAsdGhpcy5hdHRyKG4uX0JBUl9USElDS05FU1NfS0VZLChmdW5jdGlvbigpe3JldHVybiB0Ll9iYXJQaXhlbFRoaWNrbmVzcygpfSkpKX0sbi5wcm90b3R5cGUuX2JhclBpeGVsVGhpY2tuZXNzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZpeGVkQmFyUGl4ZWxUaGlja25lc3MmJnRoaXMuX3Byb2plY3RvcnNSZWFkeSgpP3RoaXMuX2NvbXB1dGVCYXJQaXhlbFRoaWNrbmVzcyh0aGlzLnBvc2l0aW9uKCksdGhpcy5kYXRhc2V0cygpLHRoaXMuX2lzVmVydGljYWw/dGhpcy53aWR0aCgpOnRoaXMuaGVpZ2h0KCkpOjB9LG4ucHJvdG90eXBlLmVudGl0aWVzPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT10aGlzLmRhdGFzZXRzKCkpLHRoaXMuX3Byb2plY3RvcnNSZWFkeSgpP3QucHJvdG90eXBlLmVudGl0aWVzLmNhbGwodGhpcyxlKTpbXX0sbi5wcm90b3R5cGUuX2VudGl0eUJvdW5kcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGl4ZWxCb3VuZHModC5kYXR1bSx0LmluZGV4LHQuZGF0YXNldCl9LG4ucHJvdG90eXBlLl9waXhlbEJvdW5kcz1mdW5jdGlvbih0LGUsbil7dmFyIGk9dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCk7cmV0dXJue3g6aS54KHQsZSxuKSx5OmkueSh0LGUsbiksd2lkdGg6aS53aWR0aCh0LGUsbiksaGVpZ2h0OmkuaGVpZ2h0KHQsZSxuKX19LG4ucHJvdG90eXBlLl9waXhlbFBvaW50PWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT10aGlzLl9waXhlbEJvdW5kcyh0LGUsbikscj1UZ3QuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5faXNWZXJ0aWNhbD90aGlzLnkoKTp0aGlzLngoKSkodCxlLG4pLG89KHRoaXMuX2lzVmVydGljYWw/dGhpcy55KCkuc2NhbGU6dGhpcy54KCkuc2NhbGUpLnNjYWxlKHRoaXMuYmFzZWxpbmVWYWx1ZSgpKTtyZXR1cm4gdGhpcy5fcGl4ZWxQb2ludEJhcihyLG8saSl9LG4ucHJvdG90eXBlLl9waXhlbFBvaW50QmFyPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaSxyO3JldHVybiB0aGlzLl9pc1ZlcnRpY2FsPyhpPW4ueCtuLndpZHRoLzIscj10PD1lP24ueTpuLnkrbi5oZWlnaHQpOihpPXQ+PWU/bi54K24ud2lkdGg6bi54LHI9bi55K24uaGVpZ2h0LzIpLHt4OmkseTpyfX0sbi5wcm90b3R5cGUuX3VuaW5zdGFsbFNjYWxlRm9yS2V5PWZ1bmN0aW9uKGUsbil7dC5wcm90b3R5cGUuX3VuaW5zdGFsbFNjYWxlRm9yS2V5LmNhbGwodGhpcyxlLG4pfSxuLnByb3RvdHlwZS5fZ2V0RGF0YVRvRHJhdz1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT1uZXcgU210Lk1hcCxuPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGk9dGhpcy53aWR0aCgpLHI9dGhpcy5oZWlnaHQoKTtyZXR1cm4gdGhpcy5kYXRhc2V0cygpLmZvckVhY2goKGZ1bmN0aW9uKG8pe3ZhciBhPW8uZGF0YSgpLm1hcCgoZnVuY3Rpb24oZSxhKXtyZXR1cm4gdC5faXNEYXR1bU9uU2NyZWVuKG4saSxyLGUsYSxvKT9lOm51bGx9KSk7ZS5zZXQobyxhKX0pKSxlfSxuLnByb3RvdHlwZS5faXNEYXR1bU9uU2NyZWVuPWZ1bmN0aW9uKHQsZSxuLGkscixvKXt2YXIgYT10LngoaSxyLG8pLHM9dC55KGkscixvKSxsPXQud2lkdGgoaSxyLG8pLGM9dC5oZWlnaHQoaSxyLG8pO3JldHVybiEhKFNtdC5NYXRoLmlzVmFsaWROdW1iZXIoYSkmJlNtdC5NYXRoLmlzVmFsaWROdW1iZXIocykmJlNtdC5NYXRoLmlzVmFsaWROdW1iZXIobCkmJlNtdC5NYXRoLmlzVmFsaWROdW1iZXIoYykpJiZTbXQuTWF0aC5ib3VuZHNJbnRlcnNlY3RzKGEscyxsLGMsMCwwLGUsbil9LG4ucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZT1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dC5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlLmNhbGwodGhpcyksdGhpcy5kYXRhc2V0cygpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3JldHVybiBlLl9sYWJlbENvbmZpZy5nZXQodCkubWVhc3VyZXIucmVzZXQoKX0pKX0sbi5fQkFSX1RISUNLTkVTU19SQVRJTz0uOTUsbi5fQkFSX0dBUExFU1NfVEhSRVNIT0xEX1BYPTMsbi5fU0lOR0xFX0JBUl9ESU1FTlNJT05fUkFUSU89LjQsbi5fQkFSX0FSRUFfQ0xBU1M9ImJhci1hcmVhIixuLl9CQVJfRU5EX0tFWT0iYmFyRW5kIixuLl9CQVJfVEhJQ0tORVNTX0tFWT0id2lkdGgiLG4uX0xBQkVMX0FSRUFfQ0xBU1M9ImJhci1sYWJlbC10ZXh0LWFyZWEiLG4uX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSPTEwLG59KShVZ3QuWFlQbG90KTtmdW5jdGlvbiBpKHQsZSxpKXt2YXIgcixvPXQuc2NhbGU7aWYobyBpbnN0YW5jZW9mIFVtdC5DYXRlZ29yeSlyPW8ucmFuZ2VCYW5kKCk7ZWxzZXt2YXIgYT10LmFjY2Vzc29yLHM9aWR0LnNldChTbXQuQXJyYXkuZmxhdHRlbihlLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuZGF0YSgpLm1hcCgoZnVuY3Rpb24oZSxuKXtyZXR1cm4gYShlLG4sdCl9KSkuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9dH0pKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnZhbHVlT2YoKX0pKX0pKSkpLnZhbHVlcygpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuK3R9KSk7cy5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0LWV9KSk7dmFyIGw9cy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBvLnNjYWxlKHQpfSkpLGM9aWR0LnBhaXJzKGwpO3I9U210Lk1hdGgubWluKGMsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGguYWJzKHRbMV0tdFswXSl9KSxpKm4uX1NJTkdMRV9CQVJfRElNRU5TSU9OX1JBVElPKSxyKj1uLl9CQVJfVEhJQ0tORVNTX1JBVElPfXJldHVybiByfWUuQmFyPW59KSkscWd0PWJlKChmdW5jdGlvbih0LGUpewovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dm9pZCAwPT09ZSYmKGU9InZlcnRpY2FsIik7dmFyIG49dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIG4uX2NsdXN0ZXJPZmZzZXRzPW5ldyBTbXQuTWFwLG59cmV0dXJuIERmdC5fX2V4dGVuZHMoZSx0KSxlLnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3I9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLG49dC5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yLmNhbGwodGhpcyksaT10aGlzLl9tYWtlSW5uZXJTY2FsZSgpLHI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gaS5yYW5nZUJhbmQoKX07bi53aWR0aD10aGlzLl9pc1ZlcnRpY2FsP3I6bi53aWR0aCxuLmhlaWdodD10aGlzLl9pc1ZlcnRpY2FsP24uaGVpZ2h0OnI7dmFyIG89bi54LGE9bi55O3JldHVybiBuLng9dGhpcy5faXNWZXJ0aWNhbD9mdW5jdGlvbih0LG4saSl7cmV0dXJuIG8odCxuLGkpK2UuX2NsdXN0ZXJPZmZzZXRzLmdldChpKX06ZnVuY3Rpb24odCxlLG4pe3JldHVybiBvKHQsZSxuKX0sbi55PXRoaXMuX2lzVmVydGljYWw/ZnVuY3Rpb24odCxlLG4pe3JldHVybiBhKHQsZSxuKX06ZnVuY3Rpb24odCxuLGkpe3JldHVybiBhKHQsbixpKStlLl9jbHVzdGVyT2Zmc2V0cy5nZXQoaSl9LG59LGUucHJvdG90eXBlLl91cGRhdGVDbHVzdGVyUG9zaXRpb249ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dGhpcy5fbWFrZUlubmVyU2NhbGUoKTt0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaCgoZnVuY3Rpb24obixpKXtyZXR1cm4gdC5fY2x1c3Rlck9mZnNldHMuc2V0KG4sZS5zY2FsZShTdHJpbmcoaSkpLWUucmFuZ2VCYW5kKCkvMil9KSl9LGUucHJvdG90eXBlLl9tYWtlSW5uZXJTY2FsZT1mdW5jdGlvbigpe3ZhciB0PW5ldyBVbXQuQ2F0ZWdvcnk7dC5kb21haW4odGhpcy5kYXRhc2V0cygpLm1hcCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gU3RyaW5nKGUpfSkpKTt2YXIgZT1UZ3QuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5hdHRyKFdndC5CYXIuX0JBUl9USElDS05FU1NfS0VZKSk7cmV0dXJuIHQucmFuZ2UoWzAsZShudWxsLDAsbnVsbCldKSx0fSxlLnByb3RvdHlwZS5fZ2V0RGF0YVRvRHJhdz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl91cGRhdGVDbHVzdGVyUG9zaXRpb24oKSx0LnByb3RvdHlwZS5fZ2V0RGF0YVRvRHJhdy5jYWxsKHRoaXMpfSxlfSkoV2d0LkJhcik7ZS5DbHVzdGVyZWRCYXI9bn0pKSxZZ3Q9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBlPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gZS5fc3RhcnRBbmdsZT0wLGUuX2VuZEFuZ2xlPTIqTWF0aC5QSSxlLl9sYWJlbEZvcm1hdHRlcj1DbXQuaWRlbnRpdHkoKSxlLl9sYWJlbHNFbmFibGVkPSExLGUuaW5uZXJSYWRpdXMoMCksZS5vdXRlclJhZGl1cygoZnVuY3Rpb24oKXt2YXIgdD1lLl9waWVDZW50ZXIoKTtyZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgoZS53aWR0aCgpLXQueCx0LngpLE1hdGgubWF4KGUuaGVpZ2h0KCktdC55LHQueSkpfSkpLGUuYWRkQ2xhc3MoInBpZS1wbG90IiksZS5hdHRyKCJmaWxsIiwoZnVuY3Rpb24odCxlKXtyZXR1cm4gU3RyaW5nKGUpfSksbmV3IFVtdC5Db2xvciksZS5fc3Ryb2tlRHJhd2Vycz1uZXcgU210Lk1hcCxlfXJldHVybiBEZnQuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0LnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl9zdHJva2VEcmF3ZXJzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3JldHVybiB0LmF0dGFjaFRvKGUuX3JlbmRlckFyZWEpfSkpfSxlLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0PWZ1bmN0aW9uKGUsbixpKXt0LnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcyxlLG4saSk7dmFyIHI9dGhpcy5fcGllQ2VudGVyKCk7dGhpcy5fcmVuZGVyQXJlYS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIityLngrIiwiK3IueSsiKSIpO3ZhciBvPU1hdGgubWluKE1hdGgubWF4KHRoaXMud2lkdGgoKS1yLngsci54KSxNYXRoLm1heCh0aGlzLmhlaWdodCgpLXIueSxyLnkpKTtyZXR1cm4gbnVsbCE9dGhpcy5pbm5lclJhZGl1cygpLnNjYWxlJiZ0aGlzLmlubmVyUmFkaXVzKCkuc2NhbGUucmFuZ2UoWzAsb10pLG51bGwhPXRoaXMub3V0ZXJSYWRpdXMoKS5zY2FsZSYmdGhpcy5vdXRlclJhZGl1cygpLnNjYWxlLnJhbmdlKFswLG9dKSx0aGlzfSxlLnByb3RvdHlwZS5hZGREYXRhc2V0PWZ1bmN0aW9uKGUpe3JldHVybiB0LnByb3RvdHlwZS5hZGREYXRhc2V0LmNhbGwodGhpcyxlKSx0aGlzfSxlLnByb3RvdHlwZS5fYWRkRGF0YXNldD1mdW5jdGlvbihlKXtpZigxPT09dGhpcy5kYXRhc2V0cygpLmxlbmd0aClyZXR1cm4gU210LldpbmRvdy53YXJuKCJPbmx5IG9uZSBkYXRhc2V0IGlzIHN1cHBvcnRlZCBpbiBQaWUgcGxvdHMiKSx0aGlzO3RoaXMuX3VwZGF0ZVBpZUFuZ2xlcygpLHQucHJvdG90eXBlLl9hZGREYXRhc2V0LmNhbGwodGhpcyxlKTt2YXIgbj1uZXcgT2d0LkFyY091dGxpbmVTVkdEcmF3ZXI7cmV0dXJuIHRoaXMuX2lzU2V0dXAmJm4uYXR0YWNoVG8odGhpcy5fcmVuZGVyQXJlYSksdGhpcy5fc3Ryb2tlRHJhd2Vycy5zZXQoZSxuKSx0aGlzfSxlLnByb3RvdHlwZS5yZW1vdmVEYXRhc2V0PWZ1bmN0aW9uKGUpe3JldHVybiB0LnByb3RvdHlwZS5yZW1vdmVEYXRhc2V0LmNhbGwodGhpcyxlKSx0aGlzfSxlLnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldE5vZGVzPWZ1bmN0aW9uKGUpe3QucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0Tm9kZXMuY2FsbCh0aGlzLGUpLHRoaXMuX3N0cm9rZURyYXdlcnMuZ2V0KGUpLnJlbW92ZSgpfSxlLnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldD1mdW5jdGlvbihlKXtyZXR1cm4gdC5wcm90b3R5cGUuX3JlbW92ZURhdGFzZXQuY2FsbCh0aGlzLGUpLHRoaXMuX3N0cm9rZURyYXdlcnMuZGVsZXRlKGUpLHRoaXMuX3N0YXJ0QW5nbGVzPVtdLHRoaXMuX2VuZEFuZ2xlcz1bXSx0aGlzfSxlLnByb3RvdHlwZS5zZWxlY3Rpb25zPWZ1bmN0aW9uKGUpe3ZhciBuPXRoaXM7dm9pZCAwPT09ZSYmKGU9dGhpcy5kYXRhc2V0cygpKTt2YXIgaT10LnByb3RvdHlwZS5zZWxlY3Rpb25zLmNhbGwodGhpcyxlKS5ub2RlcygpO3JldHVybiBlLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPW4uX3N0cm9rZURyYXdlcnMuZ2V0KHQpO251bGwhPWUmJmkucHVzaC5hcHBseShpLGUuZ2V0VmlzdWFsUHJpbWl0aXZlcygpKX0pKSxpZHQuc2VsZWN0QWxsKGkpfSxlLnByb3RvdHlwZS5fb25EYXRhc2V0VXBkYXRlPWZ1bmN0aW9uKCl7dC5wcm90b3R5cGUuX29uRGF0YXNldFVwZGF0ZS5jYWxsKHRoaXMpLHRoaXMuX3VwZGF0ZVBpZUFuZ2xlcygpLHRoaXMucmVuZGVyKCl9LGUucHJvdG90eXBlLl9jcmVhdGVEcmF3ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFNndC5Qcm94eURyYXdlcigoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IElndC5BcmNTVkdEcmF3ZXJ9KSwoZnVuY3Rpb24oKXtyZXR1cm4gbW10Lndhcm4oImNhbnZhcyByZW5kZXJlciBpcyBub3Qgc3VwcG9ydGVkIG9uIFBpZSBQbG90ISIpLG51bGx9KSl9LGUucHJvdG90eXBlLmVudGl0aWVzPWZ1bmN0aW9uKGUpe3ZhciBuPXRoaXM7cmV0dXJuIHZvaWQgMD09PWUmJihlPXRoaXMuZGF0YXNldHMoKSksdC5wcm90b3R5cGUuZW50aXRpZXMuY2FsbCh0aGlzLGUpLm1hcCgoZnVuY3Rpb24odCl7dC5wb3NpdGlvbi54Kz1uLndpZHRoKCkvMix0LnBvc2l0aW9uLnkrPW4uaGVpZ2h0KCkvMjt2YXIgZT1pZHQuc2VsZWN0KG4uX3N0cm9rZURyYXdlcnMuZ2V0KHQuZGF0YXNldCkuZ2V0VmlzdWFsUHJpbWl0aXZlQXRJbmRleCh0LmluZGV4KSksaT10O3JldHVybiBpLnN0cm9rZVNlbGVjdGlvbj1lLGl9KSl9LGUucHJvdG90eXBlLnNlY3RvclZhbHVlPWZ1bmN0aW9uKHQsbil7cmV0dXJuIG51bGw9PXQ/dGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQoZS5fU0VDVE9SX1ZBTFVFX0tFWSk6KHRoaXMuX2JpbmRQcm9wZXJ0eShlLl9TRUNUT1JfVkFMVUVfS0VZLHQsbiksdGhpcy5fdXBkYXRlUGllQW5nbGVzKCksdGhpcy5yZW5kZXIoKSx0aGlzKX0sZS5wcm90b3R5cGUuaW5uZXJSYWRpdXM9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbnVsbD09dD90aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldChlLl9JTk5FUl9SQURJVVNfS0VZKToodGhpcy5fYmluZFByb3BlcnR5KGUuX0lOTkVSX1JBRElVU19LRVksdCxuKSx0aGlzLnJlbmRlcigpLHRoaXMpfSxlLnByb3RvdHlwZS5vdXRlclJhZGl1cz1mdW5jdGlvbih0LG4pe3JldHVybiBudWxsPT10P3RoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KGUuX09VVEVSX1JBRElVU19LRVkpOih0aGlzLl9iaW5kUHJvcGVydHkoZS5fT1VURVJfUkFESVVTX0tFWSx0LG4pLHRoaXMucmVuZGVyKCksdGhpcyl9LGUucHJvdG90eXBlLnN0YXJ0QW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5fc3RhcnRBbmdsZToodGhpcy5fc3RhcnRBbmdsZT10LHRoaXMuX3VwZGF0ZVBpZUFuZ2xlcygpLHRoaXMucmVuZGVyKCksdGhpcyl9LGUucHJvdG90eXBlLmVuZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX2VuZEFuZ2xlOih0aGlzLl9lbmRBbmdsZT10LHRoaXMuX3VwZGF0ZVBpZUFuZ2xlcygpLHRoaXMucmVuZGVyKCksdGhpcyl9LGUucHJvdG90eXBlLmxhYmVsc0VuYWJsZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5fbGFiZWxzRW5hYmxlZDoodGhpcy5fbGFiZWxzRW5hYmxlZD10LHRoaXMucmVuZGVyKCksdGhpcyl9LGUucHJvdG90eXBlLmxhYmVsRm9ybWF0dGVyPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX2xhYmVsRm9ybWF0dGVyOih0aGlzLl9sYWJlbEZvcm1hdHRlcj10LHRoaXMucmVuZGVyKCksdGhpcyl9LGUucHJvdG90eXBlLmVudGl0aWVzQXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy53aWR0aCgpLzIsbj10aGlzLmhlaWdodCgpLzIsaT10aGlzLl9zbGljZUluZGV4Rm9yUG9pbnQoe3g6dC54LWUseTp0Lnktbn0pO3JldHVybiBudWxsPT1pP1tdOlt0aGlzLmVudGl0aWVzKClbaV1dfSxlLnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxuPXQucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnMuY2FsbCh0aGlzKSxpPVRndC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLmlubmVyUmFkaXVzKCkpLHI9VGd0LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMub3V0ZXJSYWRpdXMoKSk7cmV0dXJuIG4uZD1mdW5jdGlvbih0LG4sbyl7cmV0dXJuIGlkdC5hcmMoKS5pbm5lclJhZGl1cyhpKHQsbixvKSkub3V0ZXJSYWRpdXMocih0LG4sbykpLnN0YXJ0QW5nbGUoZS5fc3RhcnRBbmdsZXNbbl0pLmVuZEFuZ2xlKGUuX2VuZEFuZ2xlc1tuXSkodCxuKX0sbn0sZS5wcm90b3R5cGUuX3VwZGF0ZVBpZUFuZ2xlcz1mdW5jdGlvbigpe2lmKG51bGwhPXRoaXMuc2VjdG9yVmFsdWUoKSYmMCE9PXRoaXMuZGF0YXNldHMoKS5sZW5ndGgpe3ZhciB0PVRndC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnNlY3RvclZhbHVlKCkpLGU9dGhpcy5kYXRhc2V0cygpWzBdLG49dGhpcy5fZ2V0RGF0YVRvRHJhdygpLmdldChlKSxpPWlkdC5waWUoKS5zb3J0KG51bGwpLnN0YXJ0QW5nbGUodGhpcy5fc3RhcnRBbmdsZSkuZW5kQW5nbGUodGhpcy5fZW5kQW5nbGUpLnZhbHVlKChmdW5jdGlvbihuLGkpe3JldHVybiB0KG4saSxlKX0pKShuKTt0aGlzLl9zdGFydEFuZ2xlcz1pLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuc3RhcnRBbmdsZX0pKSx0aGlzLl9lbmRBbmdsZXM9aS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmVuZEFuZ2xlfSkpfX0sZS5wcm90b3R5cGUuX3BpZUNlbnRlcj1mdW5jdGlvbigpe3ZhciB0LGUsbixpLHI9dGhpcy5fc3RhcnRBbmdsZTx0aGlzLl9lbmRBbmdsZT90aGlzLl9zdGFydEFuZ2xlOnRoaXMuX2VuZEFuZ2xlLG89dGhpcy5fc3RhcnRBbmdsZTx0aGlzLl9lbmRBbmdsZT90aGlzLl9lbmRBbmdsZTp0aGlzLl9zdGFydEFuZ2xlLGE9TWF0aC5zaW4ocikscz1NYXRoLmNvcyhyKSxsPU1hdGguc2luKG8pLGM9TWF0aC5jb3Mobyk7cmV0dXJuIGE+PTAmJmw+PTA/cz49MCYmYz49MD8odD1zLGU9MCxpPTAsbj1sKTpzPDAmJmM8MD8odD0wLGU9LWMsaT0wLG49YSk6cz49MCYmYzwwPyh0PXMsZT0tYyxpPTAsbj1hKTpzPDAmJmM+PTAmJih0PTEsZT0xLGk9MSxuPU1hdGgubWF4KGEsbCkpOmE+PTAmJmw8MD9zPj0wJiZjPj0wPyh0PU1hdGgubWF4KHMsYyksZT0xLGk9MSxuPTEpOnM8MCYmYzwwPyh0PTAsZT0xLGk9LWwsbj1hKTpzPj0wJiZjPDA/KHQ9cyxlPTEsaT0tbCxuPTEpOnM8MCYmYz49MCYmKHQ9YyxlPTEsaT0xLG49YSk6YTwwJiZsPj0wP3M+PTAmJmM+PTA/KHQ9MSxlPTAsaT0tYSxuPWwpOnM8MCYmYzwwPyh0PTEsZT1NYXRoLm1heCgtcywtYyksaT0xLG49MSk6cz49MCYmYzwwPyh0PTEsZT0tYyxpPS1hLG49MSk6czwwJiZjPj0wJiYodD0xLGU9LXMsaT0xLG49bCk6YTwwJiZsPDAmJihzPj0wJiZjPj0wPyh0PWMsZT0wLGk9LWEsbj0wKTpzPDAmJmM8MD8odD0wLGU9LXMsaT0tbCxuPTApOnM+PTAmJmM8MD8odD0xLGU9MSxpPU1hdGgubWF4KHMsLWMpLG49MSk6czwwJiZjPj0wJiYodD1jLGU9LXMsaT0xLG49MCkpLHt4Omkrbj09MD8wOmkvKGkrbikqdGhpcy53aWR0aCgpLHk6dCtlPT0wPzA6dC8odCtlKSp0aGlzLmhlaWdodCgpfX0sZS5wcm90b3R5cGUuX2dldERhdGFUb0RyYXc9ZnVuY3Rpb24oKXt2YXIgbj10LnByb3RvdHlwZS5fZ2V0RGF0YVRvRHJhdy5jYWxsKHRoaXMpO2lmKDA9PT10aGlzLmRhdGFzZXRzKCkubGVuZ3RoKXJldHVybiBuO3ZhciBpPVRndC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnNlY3RvclZhbHVlKCkpLHI9dGhpcy5kYXRhc2V0cygpWzBdLG89bi5nZXQocikuZmlsdGVyKChmdW5jdGlvbih0LG4pe3JldHVybiBlLl9pc1ZhbGlkRGF0YShpKHQsbixyKSl9KSk7cmV0dXJuIG4uc2V0KHIsbyksbn0sZS5faXNWYWxpZERhdGE9ZnVuY3Rpb24odCl7cmV0dXJuIFNtdC5NYXRoLmlzVmFsaWROdW1iZXIodCkmJnQ+PTB9LGUucHJvdG90eXBlLl9waXhlbFBvaW50PWZ1bmN0aW9uKHQsbixpKXt2YXIgcj1UZ3QuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5zZWN0b3JWYWx1ZSgpKTtpZighZS5faXNWYWxpZERhdGEocih0LG4saSkpKXJldHVybnt4Ok5hTix5Ok5hTn07dmFyIG89KFRndC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLmlubmVyUmFkaXVzKCkpKHQsbixpKStUZ3QuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5vdXRlclJhZGl1cygpKSh0LG4saSkpLzIsYT1pZHQucGllKCkuc29ydChudWxsKS52YWx1ZSgoZnVuY3Rpb24odCxuKXt2YXIgbz1yKHQsbixpKTtyZXR1cm4gZS5faXNWYWxpZERhdGEobyk/bzowfSkpLnN0YXJ0QW5nbGUodGhpcy5fc3RhcnRBbmdsZSkuZW5kQW5nbGUodGhpcy5fZW5kQW5nbGUpKGkuZGF0YSgpKSxzPShhW25dLnN0YXJ0QW5nbGUrYVtuXS5lbmRBbmdsZSkvMjtyZXR1cm57eDpvKk1hdGguc2luKHMpLHk6LW8qTWF0aC5jb3Mocyl9fSxlLnByb3RvdHlwZS5fYWRkaXRpb25hbFBhaW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5fcmVuZGVyQXJlYS5zZWxlY3QoIi5sYWJlbC1hcmVhIikucmVtb3ZlKCksdGhpcy5fbGFiZWxzRW5hYmxlZCYmU210LldpbmRvdy5zZXRUaW1lb3V0KChmdW5jdGlvbigpe3JldHVybiBlLl9kcmF3TGFiZWxzKCl9KSx0KTt2YXIgbj10aGlzLl9nZW5lcmF0ZVN0cm9rZURyYXdTdGVwcygpLGk9dGhpcy5fZ2V0RGF0YVRvRHJhdygpO3RoaXMuZGF0YXNldHMoKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgcj1UZ3QuUGxvdC5hcHBseURyYXdTdGVwcyhuLHQpO2UuX3N0cm9rZURyYXdlcnMuZ2V0KHQpLmRyYXcoaS5nZXQodCkscil9KSl9LGUucHJvdG90eXBlLl9nZW5lcmF0ZVN0cm9rZURyYXdTdGVwcz1mdW5jdGlvbigpe3JldHVyblt7YXR0clRvUHJvamVjdG9yOnRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGFuaW1hdG9yOm5ldyBCZnQuTnVsbH1dfSxlLnByb3RvdHlwZS5fc2xpY2VJbmRleEZvclBvaW50PWZ1bmN0aW9uKHQpe3ZhciBlLG49TWF0aC5zcXJ0KE1hdGgucG93KHQueCwyKStNYXRoLnBvdyh0LnksMikpLGk9TWF0aC5hY29zKC10Lnkvbik7dC54PDAmJihpPTIqTWF0aC5QSS1pKTtmb3IodmFyIHI9MDtyPHRoaXMuX3N0YXJ0QW5nbGVzLmxlbmd0aDtyKyspaWYodGhpcy5fc3RhcnRBbmdsZXNbcl08aSYmdGhpcy5fZW5kQW5nbGVzW3JdPmkpe2U9cjticmVha31pZih2b2lkIDAhPT1lKXt2YXIgbz10aGlzLmRhdGFzZXRzKClbMF0sYT1vLmRhdGEoKVtlXSxzPXRoaXMuaW5uZXJSYWRpdXMoKS5hY2Nlc3NvcihhLGUsbyksbD10aGlzLm91dGVyUmFkaXVzKCkuYWNjZXNzb3IoYSxlLG8pO2lmKG4+cyYmbjxsKXJldHVybiBlfXJldHVybiBudWxsfSxlLnByb3RvdHlwZS5fZHJhd0xhYmVscz1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLGU9dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksbj10aGlzLl9yZW5kZXJBcmVhLmFwcGVuZCgiZyIpLmNsYXNzZWQoImxhYmVsLWFyZWEiLCEwKSxpPW5ldyBhbXQuU3ZnQ29udGV4dChuLm5vZGUoKSkscj1uZXcgYW10LkNhY2hlTWVhc3VyZXIoaSksbz1uZXcgYW10LldyaXRlcihyLGkpLGE9dGhpcy5kYXRhc2V0cygpWzBdLHM9dGhpcy5fZ2V0RGF0YVRvRHJhdygpLmdldChhKSxsPXMubGVuZ3RoLGM9ZnVuY3Rpb24oaSl7dmFyIGw9c1tpXSxjPXUuc2VjdG9yVmFsdWUoKS5hY2Nlc3NvcihsLGksYSk7aWYoIVNtdC5NYXRoLmlzVmFsaWROdW1iZXIoYykpcmV0dXJuImNvbnRpbnVlIjtjPXUuX2xhYmVsRm9ybWF0dGVyKGMsbCxpLGEpO3ZhciBoPXIubWVhc3VyZShjKSxkPSh1Ll9lbmRBbmdsZXNbaV0rdS5fc3RhcnRBbmdsZXNbaV0pLzIscD11Lm91dGVyUmFkaXVzKCkuYWNjZXNzb3IobCxpLGEpO3Uub3V0ZXJSYWRpdXMoKS5zY2FsZSYmKHA9dS5vdXRlclJhZGl1cygpLnNjYWxlLnNjYWxlKHApKTt2YXIgZj11LmlubmVyUmFkaXVzKCkuYWNjZXNzb3IobCxpLGEpO3UuaW5uZXJSYWRpdXMoKS5zY2FsZSYmKGY9dS5pbm5lclJhZGl1cygpLnNjYWxlLnNjYWxlKGYpKTt2YXIgbT0ocCtmKS8yLGc9TWF0aC5zaW4oZCkqbS1oLndpZHRoLzIsXz0tTWF0aC5jb3MoZCkqbS1oLmhlaWdodC8yLHk9W3t4OmcseTpffSx7eDpnLHk6XytoLmhlaWdodH0se3g6ZytoLndpZHRoLHk6X30se3g6ZytoLndpZHRoLHk6XytoLmhlaWdodH1dLHY9eS5ldmVyeSgoZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguYWJzKGUueCk8PXQud2lkdGgoKS8yJiZNYXRoLmFicyhlLnkpPD10LmhlaWdodCgpLzJ9KSk7diYmKHY9eS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiB0Ll9zbGljZUluZGV4Rm9yUG9pbnQoZSl9KSkuZXZlcnkoKGZ1bmN0aW9uKHQpe3JldHVybiB0PT09aX0pKSk7dmFyIGI9ZS5maWxsKGwsaSxhKSx4PTEuNipTbXQuQ29sb3IuY29udHJhc3QoIndoaXRlIixiKTxTbXQuQ29sb3IuY29udHJhc3QoImJsYWNrIixiKSx3PW4uYXBwZW5kKCJnIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrZysiLCIrXysiKSIpO3cuY2xhc3NlZCh4PyJkYXJrLWxhYmVsIjoibGlnaHQtbGFiZWwiLCEwKSx3LnN0eWxlKCJ2aXNpYmlsaXR5Iix2PyJpbmhlcml0IjoiaGlkZGVuIiksby53cml0ZShjLGgud2lkdGgsaC5oZWlnaHQse3hBbGlnbjoiY2VudGVyIix5QWxpZ246ImNlbnRlciJ9LHcubm9kZSgpKX0sdT10aGlzLGg9MDtoPGw7aCsrKWMoaCl9LGUuX0lOTkVSX1JBRElVU19LRVk9ImlubmVyLXJhZGl1cyIsZS5fT1VURVJfUkFESVVTX0tFWT0ib3V0ZXItcmFkaXVzIixlLl9TRUNUT1JfVkFMVUVfS0VZPSJzZWN0b3ItdmFsdWUiLGV9KShUZ3QuUGxvdCk7ZS5QaWU9bn0pKSxYZ3Q9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBlPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gZS5fbGFiZWxzRW5hYmxlZD0hMSxlLl9sYWJlbD1udWxsLGUuYW5pbWF0b3IoInJlY3RhbmdsZXMiLG5ldyBCZnQuTnVsbCksZS5hZGRDbGFzcygicmVjdGFuZ2xlLXBsb3QiKSxlLmF0dHIoImZpbGwiLChuZXcgVW10LkNvbG9yKS5yYW5nZSgpWzBdKSxlfXJldHVybiBEZnQuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUuX2NyZWF0ZURyYXdlcj1mdW5jdGlvbigpe3JldHVybiBuZXcgU2d0LlByb3h5RHJhd2VyKChmdW5jdGlvbigpe3JldHVybiBuZXcgRGd0LlJlY3RhbmdsZVNWR0RyYXdlcn0pLChmdW5jdGlvbih0KXtyZXR1cm4gbmV3IFZndC5SZWN0YW5nbGVDYW52YXNEcmF3ZXIodCl9KSl9LGUucHJvdG90eXBlLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3Rvcj1mdW5jdGlvbigpe3ZhciBuPXRoaXMsaT10LnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3IuY2FsbCh0aGlzKSxyPVRndC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksbz1pW2UuX1gyX0tFWV0sYT1UZ3QuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpLHM9aVtlLl9ZMl9LRVldLGw9dGhpcy54KCkuc2NhbGUsYz10aGlzLnkoKS5zY2FsZTtyZXR1cm4gbnVsbCE9bz8oaS53aWR0aD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIE1hdGguYWJzKG8odCxlLG4pLXIodCxlLG4pKX0saS54PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gTWF0aC5taW4obyh0LGUsbikscih0LGUsbikpfSk6KGkud2lkdGg9ZnVuY3Rpb24odCxlLGkpe3JldHVybiBuLl9yZWN0YW5nbGVXaWR0aChsKX0saS54PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gcih0LGUsbiktLjUqaS53aWR0aCh0LGUsbil9KSxudWxsIT1zPyhpLmhlaWdodD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIE1hdGguYWJzKHModCxlLG4pLWEodCxlLG4pKX0saS55PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gTWF0aC5tYXgocyh0LGUsbiksYSh0LGUsbikpLWkuaGVpZ2h0KHQsZSxuKX0pOihpLmhlaWdodD1mdW5jdGlvbih0LGUsaSl7cmV0dXJuIG4uX3JlY3RhbmdsZVdpZHRoKGMpfSxpLnk9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBhKHQsZSxuKS0uNSppLmhlaWdodCh0LGUsbil9KSxkZWxldGUgaVtlLl9YMl9LRVldLGRlbGV0ZSBpW2UuX1kyX0tFWV0saX0sZS5wcm90b3R5cGUuX2dlbmVyYXRlRHJhd1N0ZXBzPWZ1bmN0aW9uKCl7cmV0dXJuW3thdHRyVG9Qcm9qZWN0b3I6dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3IoInJlY3RhbmdsZXMiKX1dfSxlLnByb3RvdHlwZS5fZmlsdGVyRm9yUHJvcGVydHk9ZnVuY3Rpb24oZSl7cmV0dXJuIHQucHJvdG90eXBlLl9maWx0ZXJGb3JQcm9wZXJ0eS5jYWxsKHRoaXMsIngyIj09PWU/IngiOiJ5MiI9PT1lPyJ5IjplKX0sZS5wcm90b3R5cGUueD1mdW5jdGlvbihuLGkscil7aWYobnVsbD09bilyZXR1cm4gdC5wcm90b3R5cGUueC5jYWxsKHRoaXMpO2lmKG51bGw9PWk/dC5wcm90b3R5cGUueC5jYWxsKHRoaXMsbik6dC5wcm90b3R5cGUueC5jYWxsKHRoaXMsbixpLHIpLG51bGwhPWkpe3ZhciBvPXRoaXMueDIoKSxhPW8mJm8uYWNjZXNzb3I7bnVsbCE9YSYmdGhpcy5fYmluZFByb3BlcnR5KGUuX1gyX0tFWSxhLGksby5wb3N0U2NhbGUpfXJldHVybiBpIGluc3RhbmNlb2YgVW10LkNhdGVnb3J5JiZpLmlubmVyUGFkZGluZygwKS5vdXRlclBhZGRpbmcoMCksdGhpc30sZS5wcm90b3R5cGUueDI9ZnVuY3Rpb24odCxuKXtpZihudWxsPT10KXJldHVybiB0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldChlLl9YMl9LRVkpO3ZhciBpPXRoaXMueCgpO3JldHVybiB0aGlzLl9iaW5kUHJvcGVydHkoZS5fWDJfS0VZLHQsaSYmaS5zY2FsZSxuKSx0aGlzLnJlbmRlcigpLHRoaXN9LGUucHJvdG90eXBlLnk9ZnVuY3Rpb24obixpLHIpe2lmKG51bGw9PW4pcmV0dXJuIHQucHJvdG90eXBlLnkuY2FsbCh0aGlzKTtpZihudWxsPT1pP3QucHJvdG90eXBlLnkuY2FsbCh0aGlzLG4pOnQucHJvdG90eXBlLnkuY2FsbCh0aGlzLG4saSxyKSxudWxsIT1pKXt2YXIgbz10aGlzLnkyKCksYT1vJiZvLmFjY2Vzc29yO251bGwhPWEmJnRoaXMuX2JpbmRQcm9wZXJ0eShlLl9ZMl9LRVksYSxpLG8ucG9zdFNjYWxlKX1yZXR1cm4gaSBpbnN0YW5jZW9mIFVtdC5DYXRlZ29yeSYmaS5pbm5lclBhZGRpbmcoMCkub3V0ZXJQYWRkaW5nKDApLHRoaXN9LGUucHJvdG90eXBlLnkyPWZ1bmN0aW9uKHQsbil7aWYobnVsbD09dClyZXR1cm4gdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQoZS5fWTJfS0VZKTt2YXIgaT10aGlzLnkoKTtyZXR1cm4gdGhpcy5fYmluZFByb3BlcnR5KGUuX1kyX0tFWSx0LGkmJmkuc2NhbGUsbiksdGhpcy5yZW5kZXIoKSx0aGlzfSxlLnByb3RvdHlwZS5lbnRpdGllc0F0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpO3JldHVybiB0aGlzLmVudGl0aWVzKCkuZmlsdGVyKChmdW5jdGlvbihuKXt2YXIgaT1uLmRhdHVtLHI9bi5pbmRleCxvPW4uZGF0YXNldCxhPWUueChpLHIsbykscz1lLnkoaSxyLG8pLGw9ZS53aWR0aChpLHIsbyksYz1lLmhlaWdodChpLHIsbyk7cmV0dXJuIGE8PXQueCYmdC54PD1hK2wmJnM8PXQueSYmdC55PD1zK2N9KSl9LGUucHJvdG90eXBlLl9lbnRpdHlCb3VuZHM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2VudGl0eUJCb3godC5kYXR1bSx0LmluZGV4LHQuZGF0YXNldCx0aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSl9LGUucHJvdG90eXBlLl9lbnRpdHlCQm94PWZ1bmN0aW9uKHQsZSxuLGkpe3JldHVybnt4OmkueCh0LGUsbikseTppLnkodCxlLG4pLHdpZHRoOmkud2lkdGgodCxlLG4pLGhlaWdodDppLmhlaWdodCh0LGUsbil9fSxlLnByb3RvdHlwZS5sYWJlbD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9sYWJlbDoodGhpcy5fbGFiZWw9dCx0aGlzLnJlbmRlcigpLHRoaXMpfSxlLnByb3RvdHlwZS5sYWJlbHNFbmFibGVkPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX2xhYmVsc0VuYWJsZWQ6KHRoaXMuX2xhYmVsc0VuYWJsZWQ9dCx0aGlzLnJlbmRlcigpLHRoaXMpfSxlLnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzPWZ1bmN0aW9uKCl7dmFyIGU9dC5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycy5jYWxsKHRoaXMpO3JldHVybiBudWxsIT10aGlzLngyKCkmJihlLngyPVRndC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngyKCkpKSxudWxsIT10aGlzLnkyKCkmJihlLnkyPVRndC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkyKCkpKSxlfSxlLnByb3RvdHlwZS5fcGl4ZWxQb2ludD1mdW5jdGlvbih0LGUsbil7dmFyIGk9dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCkscj1pLngodCxlLG4pLG89aS55KHQsZSxuKTtyZXR1cm57eDpyK2kud2lkdGgodCxlLG4pLzIseTpvK2kuaGVpZ2h0KHQsZSxuKS8yfX0sZS5wcm90b3R5cGUuX3JlY3RhbmdsZVdpZHRoPWZ1bmN0aW9uKHQpe2lmKHQgaW5zdGFuY2VvZiBVbXQuQ2F0ZWdvcnkpcmV0dXJuIHQucmFuZ2VCYW5kKCk7dmFyIGU9dD09PXRoaXMueCgpLnNjYWxlP3RoaXMueCgpLmFjY2Vzc29yOnRoaXMueSgpLmFjY2Vzc29yLG49aWR0LnNldChTbXQuQXJyYXkuZmxhdHRlbih0aGlzLmRhdGFzZXRzKCkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5kYXRhKCkubWFwKChmdW5jdGlvbihuLGkpe3JldHVybiBlKG4saSx0KS52YWx1ZU9mKCl9KSl9KSkpKS52YWx1ZXMoKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybit0fSkpLGk9U210Lk1hdGgubWluKG4sMCkscj1TbXQuTWF0aC5tYXgobiwwKSxvPXQuc2NhbGUoaSk7cmV0dXJuKHQuc2NhbGUociktbykvTWF0aC5hYnMoci1pKX0sZS5wcm90b3R5cGUuX2dldERhdGFUb0RyYXc9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgU210Lk1hcCxlPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpO3JldHVybiB0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIGk9bi5kYXRhKCkubWFwKChmdW5jdGlvbih0LGkpe3JldHVybiBTbXQuTWF0aC5pc1ZhbGlkTnVtYmVyKGUueCh0LGksbikpJiZTbXQuTWF0aC5pc1ZhbGlkTnVtYmVyKGUueSh0LGksbikpJiZTbXQuTWF0aC5pc1ZhbGlkTnVtYmVyKGUud2lkdGgodCxpLG4pKSYmU210Lk1hdGguaXNWYWxpZE51bWJlcihlLmhlaWdodCh0LGksbikpP3Q6bnVsbH0pKTt0LnNldChuLGkpfSkpLHR9LGUucHJvdG90eXBlLl9hZGRpdGlvbmFsUGFpbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLl9yZW5kZXJBcmVhLnNlbGVjdEFsbCgiLmxhYmVsLWFyZWEiKS5yZW1vdmUoKSx0aGlzLl9sYWJlbHNFbmFibGVkJiZudWxsIT10aGlzLmxhYmVsKCkmJlNtdC5XaW5kb3cuc2V0VGltZW91dCgoZnVuY3Rpb24oKXtyZXR1cm4gZS5fZHJhd0xhYmVscygpfSksdCl9LGUucHJvdG90eXBlLl9kcmF3TGFiZWxzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXRoaXMuX2dldERhdGFUb0RyYXcoKTt0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaCgoZnVuY3Rpb24obixpKXtyZXR1cm4gdC5fZHJhd0xhYmVsKGUsbixpKX0pKX0sZS5wcm90b3R5cGUuX2RyYXdMYWJlbD1mdW5jdGlvbih0LGUsbil7Zm9yKHZhciBpPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLHI9dGhpcy5fcmVuZGVyQXJlYS5hcHBlbmQoImciKS5jbGFzc2VkKCJsYWJlbC1hcmVhIiwhMCksbz1uZXcgYW10LlN2Z0NvbnRleHQoci5ub2RlKCkpLGE9bmV3IGFtdC5DYWNoZU1lYXN1cmVyKG8pLHM9bmV3IGFtdC5Xcml0ZXIoYSxvKSxsPXRoaXMueCgpLnNjYWxlLnJhbmdlKCksYz10aGlzLnkoKS5zY2FsZS5yYW5nZSgpLHU9TWF0aC5taW4uYXBwbHkobnVsbCxsKSxoPU1hdGgubWF4LmFwcGx5KG51bGwsbCksZD1NYXRoLm1pbi5hcHBseShudWxsLGMpLHA9TWF0aC5tYXguYXBwbHkobnVsbCxjKSxmPXQuZ2V0KGUpLG09Zi5sZW5ndGgsZz0wO2c8bTtnKyspe3ZhciBfPWZbZ107aWYobnVsbCE9Xyl7dmFyIHk9IiIrdGhpcy5sYWJlbCgpKF8sZyxlKSx2PWEubWVhc3VyZSh5KSxiPWkueChfLGcsZSkseD1pLnkoXyxnLGUpLHc9aS53aWR0aChfLGcsZSksUz1pLmhlaWdodChfLGcsZSk7aWYodi5oZWlnaHQ8PVMmJnYud2lkdGg8PXcpe3ZhciBNPXttaW46Yis9KHctdi53aWR0aCkvMixtYXg6Yit2LndpZHRofSxFPXttaW46eCs9KFMtdi5oZWlnaHQpLzIsbWF4Ongrdi5oZWlnaHR9O2lmKE0ubWluPHV8fE0ubWF4Pmh8fEUubWluPGR8fEUubWF4PnApY29udGludWU7aWYodGhpcy5fb3ZlcmxheUxhYmVsKE0sRSxnLG4sdCkpY29udGludWU7dmFyIFQ9aS5maWxsKF8sZyxlKSxDPTEuNipTbXQuQ29sb3IuY29udHJhc3QoIndoaXRlIixUKTxTbXQuQ29sb3IuY29udHJhc3QoImJsYWNrIixUKSxBPXIuYXBwZW5kKCJnIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrYisiLCIreCsiKSIpO0EuY2xhc3NlZChDPyJkYXJrLWxhYmVsIjoibGlnaHQtbGFiZWwiLCEwKSxzLndyaXRlKHksdi53aWR0aCx2LmhlaWdodCx7eEFsaWduOiJjZW50ZXIiLHlBbGlnbjoiY2VudGVyIn0sQS5ub2RlKCkpfX19fSxlLnByb3RvdHlwZS5fb3ZlcmxheUxhYmVsPWZ1bmN0aW9uKHQsZSxuLGkscil7Zm9yKHZhciBvPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGE9dGhpcy5kYXRhc2V0cygpLHM9aTtzPGEubGVuZ3RoO3MrKylmb3IodmFyIGw9YVtzXSxjPXIuZ2V0KGwpLHU9Yy5sZW5ndGgsaD1zPT09aT9uKzE6MDtoPHU7aCsrKWlmKFNtdC5ET00uaW50ZXJzZWN0c0JCb3godCxlLHRoaXMuX2VudGl0eUJCb3goY1toXSxoLGwsbykpKXJldHVybiEwO3JldHVybiExfSxlLl9YMl9LRVk9IngyIixlLl9ZMl9LRVk9InkyIixlfSkoVWd0LlhZUGxvdCk7ZS5SZWN0YW5nbGU9bn0pKSwkZ3Q9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBlPXQuY2FsbCh0aGlzKXx8dGhpcztlLl9sYWJlbEZvcm1hdHRlcj1DbXQuaWRlbnRpdHkoKSxlLl9sYWJlbHNFbmFibGVkPSExLGUuYWRkQ2xhc3MoInNjYXR0ZXItcGxvdCIpO3ZhciBuPW5ldyBCZnQuRWFzaW5nO24uc3RhcnREZWxheSg1KSxuLnN0ZXBEdXJhdGlvbigyNTApLG4ubWF4VG90YWxEdXJhdGlvbihUZ3QuUGxvdC5fQU5JTUFUSU9OX01BWF9EVVJBVElPTiksZS5hbmltYXRvcih0X3QuQW5pbWF0b3IuTUFJTixuKSxlLmF0dHIoIm9wYWNpdHkiLC42KSxlLmF0dHIoImZpbGwiLChuZXcgVW10LkNvbG9yKS5yYW5nZSgpWzBdKSxlLnNpemUoNik7dmFyIGk9ZGd0LmNpcmNsZSgpO3JldHVybiBlLnN5bWJvbCgoZnVuY3Rpb24oKXtyZXR1cm4gaX0pKSxlLl9sYWJlbENvbmZpZz1uZXcgU210Lk1hcCxlfXJldHVybiBEZnQuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUuX2J1aWxkTGlnaHR3ZWlnaHRQbG90RW50aXRpZXM9ZnVuY3Rpb24oZSl7dmFyIG49dGhpcztyZXR1cm4gdC5wcm90b3R5cGUuX2J1aWxkTGlnaHR3ZWlnaHRQbG90RW50aXRpZXMuY2FsbCh0aGlzLGUpLm1hcCgoZnVuY3Rpb24odCl7dmFyIGU9VGd0LlBsb3QuX3NjYWxlZEFjY2Vzc29yKG4uc2l6ZSgpKSh0LmRhdHVtLHQuaW5kZXgsdC5kYXRhc2V0KTtyZXR1cm4gdC5kaWFtZXRlcj1lLHR9KSl9LGUucHJvdG90eXBlLl9jcmVhdGVEcmF3ZXI9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gbmV3IFNndC5Qcm94eURyYXdlcigoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEZndC5TeW1ib2xTVkdEcmF3ZXJ9KSwoZnVuY3Rpb24obil7cmV0dXJuIG5ldyBWZ3QuQ2FudmFzRHJhd2VyKG4sRmd0Lm1ha2VTeW1ib2xDYW52YXNEcmF3U3RlcCh0LChmdW5jdGlvbigpe3JldHVybiBUZ3QuUGxvdC5fc2NhbGVkQWNjZXNzb3IoZS5zeW1ib2woKSl9KSwoZnVuY3Rpb24oKXtyZXR1cm4gVGd0LlBsb3QuX3NjYWxlZEFjY2Vzc29yKGUuc2l6ZSgpKX0pKSl9KSl9LGUucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbnVsbD09dD90aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldChlLl9TSVpFX0tFWSk6KHRoaXMuX2JpbmRQcm9wZXJ0eShlLl9TSVpFX0tFWSx0LG4pLHRoaXMucmVuZGVyKCksdGhpcyl9LGUucHJvdG90eXBlLnN5bWJvbD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldChlLl9TWU1CT0xfS0VZKToodGhpcy5fcHJvcGVydHlCaW5kaW5ncy5zZXQoZS5fU1lNQk9MX0tFWSx7YWNjZXNzb3I6dH0pLHRoaXMucmVuZGVyKCksdGhpcyl9LGUucHJvdG90eXBlLl9nZW5lcmF0ZURyYXdTdGVwcz1mdW5jdGlvbigpe3ZhciB0PVtdO2lmKHRoaXMuX2FuaW1hdGVPbk5leHRSZW5kZXIoKSl7dmFyIGU9dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksbj1UZ3QuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5zeW1ib2woKSk7ZS5kPWZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gbih0LGUsaSkoMCkobnVsbCl9LHQucHVzaCh7YXR0clRvUHJvamVjdG9yOmUsYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3IodF90LkFuaW1hdG9yLlJFU0VUKX0pfXJldHVybiB0LnB1c2goe2F0dHJUb1Byb2plY3Rvcjp0aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxhbmltYXRvcjp0aGlzLl9nZXRBbmltYXRvcih0X3QuQW5pbWF0b3IuTUFJTil9KSx0fSxlLnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzPWZ1bmN0aW9uKCl7dmFyIGU9dC5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycy5jYWxsKHRoaXMpLG49VGd0LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSxpPVRndC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSk7cmV0dXJuIGUueD1uLGUueT1pLGUudHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4idHJhbnNsYXRlKCIrbih0LGUscikrIiwiK2kodCxlLHIpKyIpIn0sZS5kPXRoaXMuX2NvbnN0cnVjdFN5bWJvbEdlbmVyYXRvcigpLGV9LGUucHJvdG90eXBlLl9jb25zdHJ1Y3RTeW1ib2xHZW5lcmF0b3I9ZnVuY3Rpb24oKXt2YXIgdD1UZ3QuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5zeW1ib2woKSksZT1UZ3QuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5zaXplKCkpO3JldHVybiBmdW5jdGlvbihuLGkscil7cmV0dXJuIHQobixpLHIpKGUobixpLHIpKShudWxsKX19LGUucHJvdG90eXBlLl9lbnRpdHlCb3VuZHM9ZnVuY3Rpb24odCl7cmV0dXJue3g6dC5wb3NpdGlvbi54LXQuZGlhbWV0ZXIvMix5OnQucG9zaXRpb24ueS10LmRpYW1ldGVyLzIsd2lkdGg6dC5kaWFtZXRlcixoZWlnaHQ6dC5kaWFtZXRlcn19LGUucHJvdG90eXBlLl9lbnRpdHlWaXNpYmxlT25QbG90PWZ1bmN0aW9uKHQsZSl7dmFyIG49e21pbjplLnRvcExlZnQueCxtYXg6ZS5ib3R0b21SaWdodC54fSxpPXttaW46ZS50b3BMZWZ0LnksbWF4OmUuYm90dG9tUmlnaHQueX0scj10aGlzLl9lbnRpdHlCb3VuZHModCk7cmV0dXJuIFNtdC5ET00uaW50ZXJzZWN0c0JCb3gobixpLHIpfSxlLnByb3RvdHlwZS5lbnRpdGllc0F0PWZ1bmN0aW9uKHQpe3ZhciBlPVRndC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksbj1UZ3QuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpLGk9VGd0LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMuc2l6ZSgpKTtyZXR1cm4gdGhpcy5lbnRpdGllcygpLmZpbHRlcigoZnVuY3Rpb24ocil7dmFyIG89ci5kYXR1bSxhPXIuaW5kZXgscz1yLmRhdGFzZXQsbD1lKG8sYSxzKSxjPW4obyxhLHMpLHU9aShvLGEscyk7cmV0dXJuIGwtdS8yPD10LngmJnQueDw9bCt1LzImJmMtdS8yPD10LnkmJnQueTw9Yyt1LzJ9KSl9LGUucHJvdG90eXBlLmxhYmVsc0VuYWJsZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5fbGFiZWxzRW5hYmxlZDoodGhpcy5fbGFiZWxzRW5hYmxlZD10LHRoaXMuX2NsZWFyQXR0clRvUHJvamVjdG9yQ2FjaGUoKSx0aGlzLnJlbmRlcigpLHRoaXMpfSxlLnByb3RvdHlwZS5fY3JlYXRlTm9kZXNGb3JEYXRhc2V0PWZ1bmN0aW9uKG4pe3ZhciBpPXQucHJvdG90eXBlLl9jcmVhdGVOb2Rlc0ZvckRhdGFzZXQuY2FsbCh0aGlzLG4pLHI9dGhpcy5fcmVuZGVyQXJlYS5hcHBlbmQoImciKS5jbGFzc2VkKGUuX0xBQkVMX0FSRUFfQ0xBU1MsITApLG89bmV3IGFtdC5TdmdDb250ZXh0KHIubm9kZSgpKSxhPW5ldyBhbXQuQ2FjaGVNZWFzdXJlcihvKSxzPW5ldyBhbXQuV3JpdGVyKGEsbyk7cmV0dXJuIHRoaXMuX2xhYmVsQ29uZmlnLnNldChuLHtsYWJlbEFyZWE6cixtZWFzdXJlcjphLHdyaXRlcjpzfSksaX0sZS5wcm90b3R5cGUuX3JlbW92ZURhdGFzZXROb2Rlcz1mdW5jdGlvbihlKXt0LnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldE5vZGVzLmNhbGwodGhpcyxlKTt2YXIgbj10aGlzLl9sYWJlbENvbmZpZy5nZXQoZSk7bnVsbCE9biYmKG4ubGFiZWxBcmVhLnJlbW92ZSgpLHRoaXMuX2xhYmVsQ29uZmlnLmRlbGV0ZShlKSl9LGUucHJvdG90eXBlLl9hZGRpdGlvbmFsUGFpbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7cmV0dXJuIGUuX2xhYmVsQ29uZmlnLmdldCh0KS5sYWJlbEFyZWEuc2VsZWN0QWxsKCJnIikucmVtb3ZlKCl9KSksdGhpcy5fbGFiZWxzRW5hYmxlZCYmU210LldpbmRvdy5zZXRUaW1lb3V0KChmdW5jdGlvbigpe3JldHVybiBlLl9kcmF3TGFiZWxzKCl9KSx0KX0sZS5wcm90b3R5cGUuX2RyYXdMYWJlbHM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dGhpcy5fZ2V0RGF0YVRvRHJhdygpLG49dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCk7dGhpcy5kYXRhc2V0cygpLmZvckVhY2goKGZ1bmN0aW9uKGkpe2Zvcih2YXIgcj1lLmdldChpKSxvPXIubGVuZ3RoLGE9MDthPG87YSsrKXt2YXIgcz1yW2FdO251bGwhPXMmJnQuX2RyYXdMYWJlbChzLGEsaSxuKX19KSl9LGUucHJvdG90eXBlLl9kcmF3TGFiZWw9ZnVuY3Rpb24odCxlLG4saSl7aWYobnVsbCE9dC5sYWJlbCl7dmFyIHI9dGhpcy5fbGFiZWxDb25maWcuZ2V0KG4pLG89ci5sYWJlbEFyZWEsYT1yLm1lYXN1cmVyLHM9ci53cml0ZXIsbD17eDppLngodCxlLG4pLHk6aS55KHQsZSxuKX0sYz1UZ3QuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5zaXplKCkpKHQsZSxuKSx1PXRoaXMuX2xhYmVsRm9ybWF0dGVyKHQubGFiZWwsdCxlLG4pLGg9YS5tZWFzdXJlKHUpLGQ9dGhpcy5fY2FsY3VsYXRlTGFiZWxQcm9wZXJ0aWVzKGwsYyxoKSxwPWQuY29udGFpbmVyRGltZW5zaW9ucyxmPWQuYWxpZ25tZW50LG09dGhpcy5fY3JlYXRlTGFiZWxDb250YWluZXIobyxkLmxhYmVsQ29udGFpbmVyT3JpZ2luLGQubGFiZWxPcmlnaW4saCk7cy53cml0ZSh1LHAud2lkdGgscC5oZWlnaHQse3hBbGlnbjpmLngseUFsaWduOmYueX0sbS5ub2RlKCkpfX0sZS5wcm90b3R5cGUuX2NhbGN1bGF0ZUxhYmVsUHJvcGVydGllcz1mdW5jdGlvbih0LG4saSl7cmV0dXJue2NvbnRhaW5lckRpbWVuc2lvbnM6e3dpZHRoOmkud2lkdGgsaGVpZ2h0OmkuaGVpZ2h0fSxsYWJlbENvbnRhaW5lck9yaWdpbjp7eDp0LngtaS53aWR0aC8yLHk6dC55LWkuaGVpZ2h0LzIrKG48aS5oZWlnaHQ/bi8yK2UuX0xBQkVMX01BUkdJTl9GUk9NX0JVQkJMRTowKX0sbGFiZWxPcmlnaW46e3g6dC54LHk6dC55fSxhbGlnbm1lbnQ6e3g6ImNlbnRlciIseToiY2VudGVyIn19fSxlLnByb3RvdHlwZS5fY3JlYXRlTGFiZWxDb250YWluZXI9ZnVuY3Rpb24odCxlLG4saSl7dmFyIHI9dC5hcHBlbmQoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitlLngrIiwgIitlLnkrIikiKTtyZXR1cm4gci5jbGFzc2VkKCJvbi1iYXItbGFiZWwiLCEwKSxyfSxlLl9TSVpFX0tFWT0ic2l6ZSIsZS5fU1lNQk9MX0tFWT0ic3ltYm9sIixlLl9MQUJFTF9BUkVBX0NMQVNTPSJzY2F0dGVyLWxhYmVsLXRleHQtYXJlYSIsZS5fTEFCRUxfTUFSR0lOX0ZST01fQlVCQkxFPTE1LGV9KShVZ3QuWFlQbG90KTtlLlNjYXR0ZXI9bn0pKSxLZ3Q9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBlPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gZS5hZGRDbGFzcygic2VnbWVudC1wbG90IiksZS5hdHRyKCJzdHJva2UiLChuZXcgVW10LkNvbG9yKS5yYW5nZSgpWzBdKSxlLmF0dHIoInN0cm9rZS13aWR0aCIsIjJweCIpLGV9cmV0dXJuIERmdC5fX2V4dGVuZHMoZSx0KSxlLnByb3RvdHlwZS5fY3JlYXRlRHJhd2VyPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBTZ3QuUHJveHlEcmF3ZXIoKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBCZ3QuU2VnbWVudFNWR0RyYXdlcn0pLChmdW5jdGlvbigpe3JldHVybiBtbXQud2FybigiY2FudmFzIHJlbmRlcmVyIGlzIG5vdCBzdXBwb3J0ZWQgb24gU2VnbWVudCBQbG90ISIpLG51bGx9KSl9LGUucHJvdG90eXBlLl9nZW5lcmF0ZURyYXdTdGVwcz1mdW5jdGlvbigpe3JldHVyblt7YXR0clRvUHJvamVjdG9yOnRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGFuaW1hdG9yOm5ldyBCZnQuTnVsbH1dfSxlLnByb3RvdHlwZS5fZmlsdGVyRm9yUHJvcGVydHk9ZnVuY3Rpb24oZSl7cmV0dXJuIHQucHJvdG90eXBlLl9maWx0ZXJGb3JQcm9wZXJ0eS5jYWxsKHRoaXMsIngyIj09PWU/IngiOiJ5MiI9PT1lPyJ5IjplKX0sZS5wcm90b3R5cGUueD1mdW5jdGlvbihuLGkpe2lmKG51bGw9PW4pcmV0dXJuIHQucHJvdG90eXBlLnguY2FsbCh0aGlzKTtpZihudWxsPT1pKXQucHJvdG90eXBlLnguY2FsbCh0aGlzLG4pO2Vsc2V7dC5wcm90b3R5cGUueC5jYWxsKHRoaXMsbixpKTt2YXIgcj10aGlzLngyKCksbz1yJiZyLmFjY2Vzc29yO251bGwhPW8mJnRoaXMuX2JpbmRQcm9wZXJ0eShlLl9YMl9LRVksbyxpKX1yZXR1cm4gdGhpc30sZS5wcm90b3R5cGUueDI9ZnVuY3Rpb24odCl7aWYobnVsbD09dClyZXR1cm4gdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQoZS5fWDJfS0VZKTt2YXIgbj10aGlzLngoKTtyZXR1cm4gdGhpcy5fYmluZFByb3BlcnR5KGUuX1gyX0tFWSx0LG4mJm4uc2NhbGUpLHRoaXMucmVuZGVyKCksdGhpc30sZS5wcm90b3R5cGUueT1mdW5jdGlvbihuLGkpe2lmKG51bGw9PW4pcmV0dXJuIHQucHJvdG90eXBlLnkuY2FsbCh0aGlzKTtpZihudWxsPT1pKXQucHJvdG90eXBlLnkuY2FsbCh0aGlzLG4pO2Vsc2V7dC5wcm90b3R5cGUueS5jYWxsKHRoaXMsbixpKTt2YXIgcj10aGlzLnkyKCksbz1yJiZyLmFjY2Vzc29yO251bGwhPW8mJnRoaXMuX2JpbmRQcm9wZXJ0eShlLl9ZMl9LRVksbyxpKX1yZXR1cm4gdGhpc30sZS5wcm90b3R5cGUueTI9ZnVuY3Rpb24odCl7aWYobnVsbD09dClyZXR1cm4gdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQoZS5fWTJfS0VZKTt2YXIgbj10aGlzLnkoKTtyZXR1cm4gdGhpcy5fYmluZFByb3BlcnR5KGUuX1kyX0tFWSx0LG4mJm4uc2NhbGUpLHRoaXMucmVuZGVyKCksdGhpc30sZS5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycz1mdW5jdGlvbigpe3ZhciBlPXQucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnMuY2FsbCh0aGlzKTtyZXR1cm4gZS54MT1UZ3QuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpLGUueDI9bnVsbD09dGhpcy54MigpP1RndC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSk6VGd0LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueDIoKSksZS55MT1UZ3QuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpLGUueTI9bnVsbD09dGhpcy55MigpP1RndC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSk6VGd0LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueTIoKSksZX0sZS5wcm90b3R5cGUuZW50aXRpZXNBdD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmVudGl0eU5lYXJlc3QodCk7cmV0dXJuIG51bGwhPWU/W2VdOltdfSxlLnByb3RvdHlwZS5lbnRpdGllc0luPWZ1bmN0aW9uKHQsZSl7dmFyIG4saTtyZXR1cm4gbnVsbD09ZT8obj17bWluOnQudG9wTGVmdC54LG1heDp0LmJvdHRvbVJpZ2h0Lnh9LGk9e21pbjp0LnRvcExlZnQueSxtYXg6dC5ib3R0b21SaWdodC55fSk6KG49dCxpPWUpLHRoaXMuX2VudGl0aWVzSW50ZXJzZWN0aW5nKG4saSl9LGUucHJvdG90eXBlLl9lbnRpdGllc0ludGVyc2VjdGluZz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj1bXSxpPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLHI9dGhpcy5lbnRpdGllcygpLG89ci5sZW5ndGgsYT0wO2E8bzthKyspe3ZhciBzPXJbYV07dGhpcy5fbGluZUludGVyc2VjdHNCb3gocyx0LGUsaSkmJm4ucHVzaChzKX1yZXR1cm4gbn0sZS5wcm90b3R5cGUuX2xpbmVJbnRlcnNlY3RzQm94PWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciByPXRoaXMsbz1pLngxKHQuZGF0dW0sdC5pbmRleCx0LmRhdGFzZXQpLGE9aS54Mih0LmRhdHVtLHQuaW5kZXgsdC5kYXRhc2V0KSxzPWkueTEodC5kYXR1bSx0LmluZGV4LHQuZGF0YXNldCksbD1pLnkyKHQuZGF0dW0sdC5pbmRleCx0LmRhdGFzZXQpO2lmKGUubWluPD1vJiZvPD1lLm1heCYmbi5taW48PXMmJnM8PW4ubWF4fHxlLm1pbjw9YSYmYTw9ZS5tYXgmJm4ubWluPD1sJiZsPD1uLm1heClyZXR1cm4hMDt2YXIgYz17eDpvLHk6c30sdT17eDphLHk6bH0saD1be3g6ZS5taW4seTpuLm1pbn0se3g6ZS5taW4seTpuLm1heH0se3g6ZS5tYXgseTpuLm1heH0se3g6ZS5tYXgseTpuLm1pbn1dO3JldHVybiBoLmZpbHRlcigoZnVuY3Rpb24odCxlKXtyZXR1cm4gMCE9PWUmJnIuX2xpbmVJbnRlcnNlY3RzU2VnbWVudChjLHUsdCxoW2UtMV0pJiZyLl9saW5lSW50ZXJzZWN0c1NlZ21lbnQodCxoW2UtMV0sYyx1KX0pKS5sZW5ndGg+MH0sZS5wcm90b3R5cGUuX2xpbmVJbnRlcnNlY3RzU2VnbWVudD1mdW5jdGlvbih0LGUsbixpKXt2YXIgcj1mdW5jdGlvbih0LGUsbil7cmV0dXJuKGUueC10LngpKihuLnktZS55KS0oZS55LXQueSkqKG4ueC1lLngpfTtyZXR1cm4gcih0LGUsbikqcih0LGUsaSk8MH0sZS5fWDJfS0VZPSJ4MiIsZS5fWTJfS0VZPSJ5MiIsZX0pKFVndC5YWVBsb3QpO2UuU2VnbWVudD1ufSkpLFpndD1iZSgoZnVuY3Rpb24odCxlKXsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dmFyIGU9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBlLl9zdGFja2luZ1Jlc3VsdD14Z3QubWVtVGh1bmsoKGZ1bmN0aW9uKCl7cmV0dXJuIGUuZGF0YXNldHMoKX0pLChmdW5jdGlvbigpe3JldHVybiBlLngoKS5hY2Nlc3Nvcn0pLChmdW5jdGlvbigpe3JldHVybiBlLnkoKS5hY2Nlc3Nvcn0pLChmdW5jdGlvbigpe3JldHVybiBlLl9zdGFja2luZ09yZGVyfSksKGZ1bmN0aW9uKHQsZSxuLGkpe3JldHVybiBTbXQuU3RhY2tpbmcuc3RhY2sodCxlLG4saSl9KSksZS5fc3RhY2tlZEV4dGVudD14Z3QubWVtVGh1bmsoZS5fc3RhY2tpbmdSZXN1bHQsKGZ1bmN0aW9uKCl7cmV0dXJuIGUueCgpLmFjY2Vzc29yfSksKGZ1bmN0aW9uKCl7cmV0dXJuIGUuX2ZpbHRlckZvclByb3BlcnR5KCJ5Iil9KSwoZnVuY3Rpb24odCxlLG4pe3JldHVybiBTbXQuU3RhY2tpbmcuc3RhY2tlZEV4dGVudCh0LGUsbil9KSksZS5fYmFzZWxpbmVWYWx1ZT0wLGUuX3N0YWNraW5nT3JkZXI9ImJvdHRvbXVwIixlLmFkZENsYXNzKCJzdGFja2VkLWFyZWEtcGxvdCIpLGUuX2Jhc2VsaW5lVmFsdWVQcm92aWRlcj1mdW5jdGlvbigpe3JldHVybltlLl9iYXNlbGluZVZhbHVlXX0sZS5jcm9wcGVkUmVuZGVyaW5nRW5hYmxlZCghMSksZX1yZXR1cm4gRGZ0Ll9fZXh0ZW5kcyhlLHQpLGUucHJvdG90eXBlLmNyb3BwZWRSZW5kZXJpbmdFbmFibGVkPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP3QucHJvdG90eXBlLmNyb3BwZWRSZW5kZXJpbmdFbmFibGVkLmNhbGwodGhpcyk6ZT8oU210LldpbmRvdy53YXJuKCJXYXJuaW5nOiBTdGFja2VkIEFyZWEgUGxvdCBkb2VzIG5vdCBzdXBwb3J0IGNyb3BwZWQgcmVuZGVyaW5nLiIpLHRoaXMpOnQucHJvdG90eXBlLmNyb3BwZWRSZW5kZXJpbmdFbmFibGVkLmNhbGwodGhpcyxlKX0sZS5wcm90b3R5cGUuX2dldEFuaW1hdG9yPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgQmZ0Lk51bGx9LGUucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe3QucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLHRoaXMuX2Jhc2VsaW5lPXRoaXMuX3JlbmRlckFyZWEuYXBwZW5kKCJsaW5lIikuY2xhc3NlZCgiYmFzZWxpbmUiLCEwKX0sZS5wcm90b3R5cGUueD1mdW5jdGlvbihlLG4pe3JldHVybiBudWxsPT1lP3QucHJvdG90eXBlLnguY2FsbCh0aGlzKToobnVsbD09bj90LnByb3RvdHlwZS54LmNhbGwodGhpcyxlKTp0LnByb3RvdHlwZS54LmNhbGwodGhpcyxlLG4pLHRoaXMuX2NoZWNrU2FtZURvbWFpbigpLHRoaXMpfSxlLnByb3RvdHlwZS55PWZ1bmN0aW9uKGUsbil7cmV0dXJuIG51bGw9PWU/dC5wcm90b3R5cGUueS5jYWxsKHRoaXMpOihudWxsPT1uP3QucHJvdG90eXBlLnkuY2FsbCh0aGlzLGUpOnQucHJvdG90eXBlLnkuY2FsbCh0aGlzLGUsbiksdGhpcy5fY2hlY2tTYW1lRG9tYWluKCksdGhpcyl9LGUucHJvdG90eXBlLnlPZmZzZXQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9zdGFja2luZ1Jlc3VsdCgpO2lmKG51bGwhPW4pe3ZhciBpPW4uZ2V0KHQpO2lmKG51bGwhPWkpe3ZhciByPWkuZ2V0KFN0cmluZyhlKSk7aWYobnVsbCE9cilyZXR1cm4gci5vZmZzZXR9fX0sZS5wcm90b3R5cGUuc3RhY2tpbmdPcmRlcj1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9zdGFja2luZ09yZGVyOih0aGlzLl9zdGFja2luZ09yZGVyPXQsdGhpcy5fb25EYXRhc2V0VXBkYXRlKCksdGhpcyl9LGUucHJvdG90eXBlLmRvd25zYW1wbGluZ0VuYWJsZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWU/dC5wcm90b3R5cGUuZG93bnNhbXBsaW5nRW5hYmxlZC5jYWxsKHRoaXMpOihTbXQuV2luZG93Lndhcm4oIldhcm5pbmc6IFN0YWNrZWQgQXJlYSBQbG90IGRvZXMgbm90IHN1cHBvcnQgZG93bnNhbXBsaW5nIiksdGhpcyl9LGUucHJvdG90eXBlLl9hZGRpdGlvbmFsUGFpbnQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnkoKS5zY2FsZS5zY2FsZSh0aGlzLl9iYXNlbGluZVZhbHVlKSxlPXt4MTowLHkxOnQseDI6dGhpcy53aWR0aCgpLHkyOnR9O3RoaXMuX2dldEFuaW1hdG9yKCJiYXNlbGluZSIpLmFuaW1hdGUodGhpcy5fYmFzZWxpbmUsZSl9LGUucHJvdG90eXBlLl91cGRhdGVZU2NhbGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnkoKSxlPXQmJnQuc2NhbGU7bnVsbCE9ZSYmKGUuYWRkUGFkZGluZ0V4Y2VwdGlvbnNQcm92aWRlcih0aGlzLl9iYXNlbGluZVZhbHVlUHJvdmlkZXIpLGUuYWRkSW5jbHVkZWRWYWx1ZXNQcm92aWRlcih0aGlzLl9iYXNlbGluZVZhbHVlUHJvdmlkZXIpKX0sZS5wcm90b3R5cGUuX29uRGF0YXNldFVwZGF0ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jaGVja1NhbWVEb21haW4oKSx0LnByb3RvdHlwZS5fb25EYXRhc2V0VXBkYXRlLmNhbGwodGhpcyksdGhpc30sZS5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5PWZ1bmN0aW9uKGUpe3JldHVybiJ5Ij09PWU/W3RoaXMuX3N0YWNrZWRFeHRlbnQoKV06dC5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5LmNhbGwodGhpcyxlKX0sZS5wcm90b3R5cGUuX2NoZWNrU2FtZURvbWFpbj1mdW5jdGlvbigpe2lmKHRoaXMuX3Byb2plY3RvcnNSZWFkeSgpKXt2YXIgdD10aGlzLmRhdGFzZXRzKCksbj10aGlzLngoKS5hY2Nlc3NvcixpPXQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gaWR0LnNldCh0LmRhdGEoKS5tYXAoKGZ1bmN0aW9uKGUsaSl7cmV0dXJuIFNtdC5TdGFja2luZy5ub3JtYWxpemVLZXkobihlLGksdCkpfSkpKS52YWx1ZXMoKX0pKSxyPWUuX2RvbWFpbktleXModCxuKTtpLnNvbWUoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lmxlbmd0aCE9PXIubGVuZ3RofSkpJiZTbXQuV2luZG93Lndhcm4oInRoZSBkb21haW5zIGFjcm9zcyB0aGUgZGF0YXNldHMgYXJlIG5vdCB0aGUgc2FtZS4gUGxvdCBtYXkgcHJvZHVjZSB1bmludGVuZGVkIGJlaGF2aW9yLiIpfX0sZS5fZG9tYWluS2V5cz1mdW5jdGlvbih0LGUpe3ZhciBuPWlkdC5zZXQoKTtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbih0KXtmb3IodmFyIGk9dC5kYXRhKCkscj1pLmxlbmd0aCxvPTA7bzxyO28rKyluLmFkZChlKGlbb10sbyx0KSl9KSksbi52YWx1ZXMoKX0sZS5wcm90b3R5cGUuX2Nvb3JkaW5hdGVQcm9qZWN0b3JzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPVRndC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksbj10aGlzLnkoKS5hY2Nlc3NvcixpPXRoaXMueCgpLmFjY2Vzc29yLHI9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBTbXQuU3RhY2tpbmcubm9ybWFsaXplS2V5KGkodCxlLG4pKX0sbz10aGlzLl9zdGFja2luZ1Jlc3VsdCgpO3JldHVybltlLGZ1bmN0aW9uKGUsaSxhKXt2YXIgcz0rbihlLGksYSksbD1vLmdldChhKS5nZXQocihlLGksYSkpLm9mZnNldDtyZXR1cm4gdC55KCkuc2NhbGUuc2NhbGUocytsKX0sZnVuY3Rpb24oZSxuLGkpe3ZhciBhPW8uZ2V0KGkpLmdldChyKGUsbixpKSkub2Zmc2V0O3JldHVybiB0LnkoKS5zY2FsZS5zY2FsZShhKX1dfSxlLnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzPWZ1bmN0aW9uKCl7dmFyIGU9dC5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycy5jYWxsKHRoaXMpLG49dGhpcy5fY29vcmRpbmF0ZVByb2plY3RvcnMoKTtyZXR1cm4gZS5kPXRoaXMuX2NvbnN0cnVjdEFyZWFQcm9qZWN0b3IoblswXSxuWzFdLG5bMl0pLGV9LGUucHJvdG90eXBlLl9waXhlbFBvaW50PWZ1bmN0aW9uKGUsbixpKXt2YXIgcj10LnByb3RvdHlwZS5fcGl4ZWxQb2ludC5jYWxsKHRoaXMsZSxuLGkpLG89dGhpcy54KCkuYWNjZXNzb3IoZSxuLGkpLGE9dGhpcy55KCkuYWNjZXNzb3IoZSxuLGkpLHM9dGhpcy55KCkuc2NhbGUuc2NhbGUoK2ErdGhpcy5fc3RhY2tpbmdSZXN1bHQoKS5nZXQoaSkuZ2V0KFNtdC5TdGFja2luZy5ub3JtYWxpemVLZXkobykpLm9mZnNldCk7cmV0dXJue3g6ci54LHk6c319LGV9KShHZ3QuQXJlYSk7ZS5TdGFja2VkQXJlYT1ufSkpLEpndD1iZSgoZnVuY3Rpb24odCxlKXsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3ZvaWQgMD09PWUmJihlPSJ2ZXJ0aWNhbCIpO3ZhciBuPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiBuLl9leHRyZW1hRm9ybWF0dGVyPUNtdC5pZGVudGl0eSgpLG4uX3N0YWNraW5nUmVzdWx0PXhndC5tZW1UaHVuaygoZnVuY3Rpb24oKXtyZXR1cm4gbi5kYXRhc2V0cygpfSksKGZ1bmN0aW9uKCl7cmV0dXJuIG4ucG9zaXRpb24oKS5hY2Nlc3Nvcn0pLChmdW5jdGlvbigpe3JldHVybiBuLmxlbmd0aCgpLmFjY2Vzc29yfSksKGZ1bmN0aW9uKCl7cmV0dXJuIG4uX3N0YWNraW5nT3JkZXJ9KSwoZnVuY3Rpb24odCxlLG4saSl7cmV0dXJuIFNtdC5TdGFja2luZy5zdGFjayh0LGUsbixpKX0pKSxuLl9zdGFja2VkRXh0ZW50PXhndC5tZW1UaHVuayhuLl9zdGFja2luZ1Jlc3VsdCwoZnVuY3Rpb24oKXtyZXR1cm4gbi5wb3NpdGlvbigpLmFjY2Vzc29yfSksKGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2ZpbHRlckZvclByb3BlcnR5KG4uX2lzVmVydGljYWw/InkiOiJ4Iil9KSwoZnVuY3Rpb24odCxlLG4pe3JldHVybiBTbXQuU3RhY2tpbmcuc3RhY2tlZEV4dGVudCh0LGUsbil9KSksbi5hZGRDbGFzcygic3RhY2tlZC1iYXItcGxvdCIpLG4uX3N0YWNraW5nT3JkZXI9ImJvdHRvbXVwIixufXJldHVybiBEZnQuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUuc3RhY2tpbmdPcmRlcj1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9zdGFja2luZ09yZGVyOih0aGlzLl9zdGFja2luZ09yZGVyPXQsdGhpcy5fb25EYXRhc2V0VXBkYXRlKCksdGhpcyl9LGUucHJvdG90eXBlLmV4dHJlbWFGb3JtYXR0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMuX2V4dHJlbWFGb3JtYXR0ZXI6KHRoaXMuX2V4dHJlbWFGb3JtYXR0ZXI9dCx0aGlzLnJlbmRlcigpLHRoaXMpfSxlLnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXt0LnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl9sYWJlbEFyZWE9dGhpcy5fcmVuZGVyQXJlYS5hcHBlbmQoImciKS5jbGFzc2VkKFdndC5CYXIuX0xBQkVMX0FSRUFfQ0xBU1MsITApO3ZhciBlPW5ldyBhbXQuU3ZnQ29udGV4dCh0aGlzLl9sYWJlbEFyZWEubm9kZSgpKTt0aGlzLl9tZWFzdXJlcj1uZXcgYW10LkNhY2hlTWVhc3VyZXIoZSksdGhpcy5fd3JpdGVyPW5ldyBhbXQuV3JpdGVyKHRoaXMuX21lYXN1cmVyLGUpfSxlLnByb3RvdHlwZS5fZHJhd0xhYmVscz1mdW5jdGlvbigpe3ZhciBuPXRoaXM7dC5wcm90b3R5cGUuX2RyYXdMYWJlbHMuY2FsbCh0aGlzKSx0aGlzLl9sYWJlbEFyZWEuc2VsZWN0QWxsKCJnIikucmVtb3ZlKCk7dmFyIGk9K3RoaXMuYmFzZWxpbmVWYWx1ZSgpLHI9dGhpcy5wb3NpdGlvbigpLnNjYWxlLG89dGhpcy5sZW5ndGgoKS5zY2FsZSxhPVNtdC5TdGFja2luZy5zdGFja2VkRXh0ZW50cyh0aGlzLl9zdGFja2luZ1Jlc3VsdCgpKSxzPWEubWluaW11bUV4dGVudHMsbD1bXSxjPWZ1bmN0aW9uKHQsZSl7dmFyIGE9bi5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3IoKSxzPW4ud2lkdGgoKSxjPW4uaGVpZ2h0KCk7dC5mb3JFYWNoKChmdW5jdGlvbih0KXtpZih0LmV4dGVudCE9PWkpe3ZhciB1PW4uZXh0cmVtYUZvcm1hdHRlcigpKHQuZXh0ZW50KSxoPW4uX21lYXN1cmVyLm1lYXN1cmUodSksZD10LnN0YWNrZWREYXR1bSxwPWQub3JpZ2luYWxEYXR1bSxmPWQub3JpZ2luYWxJbmRleCxtPWQub3JpZ2luYWxEYXRhc2V0O2lmKCFuLl9pc0RhdHVtT25TY3JlZW4oYSxzLGMscCxmLG0pKXJldHVybjt2YXIgZz1UZ3QuUGxvdC5fc2NhbGVkQWNjZXNzb3Iobi5hdHRyKFdndC5CYXIuX0JBUl9USElDS05FU1NfS0VZKSkocCxmLG0pLF89by5zY2FsZSh0LmV4dGVudCkseT1uLl9nZXRQb3NpdGlvbkF0dHIoci5zY2FsZSh0LmF4aXNWYWx1ZSksZykrZy8yLHY9ZShuLl9pc1ZlcnRpY2FsP3t4OnkseTpffTp7eDpfLHk6eX0saCxnKSxiPShmdW5jdGlvbih0LGUsaSl7dmFyIHI9ZS50b3BMZWZ0LG89ci54LGE9ci55LHM9ZS5ib3R0b21SaWdodC54LWUudG9wTGVmdC54LGw9ZS5ib3R0b21SaWdodC55LWUudG9wTGVmdC55LGM9bi5faXNWZXJ0aWNhbD9zPmk6bD5pO2lmKCFjKXt2YXIgdT1uLl9sYWJlbEFyZWEuYXBwZW5kKCJnIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrbysiLCAiK2ErIikiKTt1LmNsYXNzZWQoInN0YWNrZWQtYmFyLWxhYmVsIiwhMCksbi5fd3JpdGVyLndyaXRlKHQscyxsLHt4QWxpZ246ImNlbnRlciIseUFsaWduOiJjZW50ZXIifSx1Lm5vZGUoKSl9cmV0dXJuIGN9KSh1LHt0b3BMZWZ0OnYsYm90dG9tUmlnaHQ6e3g6di54K2gud2lkdGgseTp2LnkraC5oZWlnaHR9fSxnKTtsLnB1c2goYil9fSkpfTtjKGEubWF4aW11bUV4dGVudHMsKGZ1bmN0aW9uKHQsaSxyKXt2YXIgbz1uLl9pc1ZlcnRpY2FsP2kud2lkdGg6aS5oZWlnaHQ7cmV0dXJue3g6bi5faXNWZXJ0aWNhbD90Lngtby8yOnQueCtlLl9FWFRSRU1BX0xBQkVMX01BUkdJTl9GUk9NX0JBUix5Om4uX2lzVmVydGljYWw/dC55LShuLl9pc1ZlcnRpY2FsP2kuaGVpZ2h0Omkud2lkdGgpOnQueS1vLzJ9fSkpLGMocywoZnVuY3Rpb24odCxpLHIpe3ZhciBvPW4uX2lzVmVydGljYWw/aS53aWR0aDppLmhlaWdodDtyZXR1cm57eDpuLl9pc1ZlcnRpY2FsP3QueC1vLzI6dC54LShuLl9pc1ZlcnRpY2FsP2kuaGVpZ2h0Omkud2lkdGgpLHk6bi5faXNWZXJ0aWNhbD90LnkrZS5fRVhUUkVNQV9MQUJFTF9NQVJHSU5fRlJPTV9CQVI6dC55LW8vMn19KSksbC5zb21lKChmdW5jdGlvbih0KXtyZXR1cm4gdH0pKSYmdGhpcy5fbGFiZWxBcmVhLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpfSxlLnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3I9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLG49dC5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yLmNhbGwodGhpcyksaT10aGlzLl9pc1ZlcnRpY2FsPyJ5IjoieCIscj10aGlzLmxlbmd0aCgpLnNjYWxlLG89dGhpcy5sZW5ndGgoKS5hY2Nlc3NvcixhPXRoaXMucG9zaXRpb24oKS5hY2Nlc3NvcixzPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gU210LlN0YWNraW5nLm5vcm1hbGl6ZUtleShhKHQsZSxuKSl9LGw9dGhpcy5fc3RhY2tpbmdSZXN1bHQoKSxjPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gci5zY2FsZShsLmdldChuKS5nZXQocyh0LGUsbikpLm9mZnNldCl9LHU9ZnVuY3Rpb24odCxlLG4pe3JldHVybiByLnNjYWxlKCtvKHQsZSxuKStsLmdldChuKS5nZXQocyh0LGUsbikpLm9mZnNldCl9LGg9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBNYXRoLmFicyh1KHQsZSxuKS1jKHQsZSxuKSl9O25bdGhpcy5faXNWZXJ0aWNhbD8iaGVpZ2h0Ijoid2lkdGgiXT1oO3ZhciBkPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4rbyh0LGUsbik8MD9jKHQsZSxuKTp1KHQsZSxuKX07cmV0dXJuIG5baV09ZnVuY3Rpb24odCxuLGkpe3JldHVybiBlLl9pc1ZlcnRpY2FsP2QodCxuLGkpOmQodCxuLGkpLWgodCxuLGkpfSxufSxlLnByb3RvdHlwZS5nZXRFeHRlbnRzRm9yUHJvcGVydHk9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT0odGhpcy5faXNWZXJ0aWNhbD8ieSI6IngiKT9bdGhpcy5fc3RhY2tlZEV4dGVudCgpXTp0LnByb3RvdHlwZS5nZXRFeHRlbnRzRm9yUHJvcGVydHkuY2FsbCh0aGlzLGUpfSxlLnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGU9ZnVuY3Rpb24oKXt0LnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGUuY2FsbCh0aGlzKSx0aGlzLl9tZWFzdXJlci5yZXNldCgpfSxlLl9FWFRSRU1BX0xBQkVMX01BUkdJTl9GUk9NX0JBUj01LGV9KShXZ3QuQmFyKTtlLlN0YWNrZWRCYXI9bn0pKSxRZ3Q9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBlPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gZS5fY29ubmVjdG9yc0VuYWJsZWQ9ITEsZS5hZGRDbGFzcygid2F0ZXJmYWxsLXBsb3QiKSxlfXJldHVybiBEZnQuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUuY29ubmVjdG9yc0VuYWJsZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5fY29ubmVjdG9yc0VuYWJsZWQ6KHRoaXMuX2Nvbm5lY3RvcnNFbmFibGVkPXQsdGhpcyl9LGUucHJvdG90eXBlLnRvdGFsPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KGUuX1RPVEFMX0tFWSk6KHRoaXMuX2JpbmRQcm9wZXJ0eShlLl9UT1RBTF9LRVksdCxudWxsKSx0aGlzKX0sZS5wcm90b3R5cGUuX2FkZGl0aW9uYWxQYWludD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuX2Nvbm5lY3RvckFyZWEuc2VsZWN0QWxsKCJsaW5lIikucmVtb3ZlKCksdGhpcy5fY29ubmVjdG9yc0VuYWJsZWQmJlNtdC5XaW5kb3cuc2V0VGltZW91dCgoZnVuY3Rpb24oKXtyZXR1cm4gZS5fZHJhd0Nvbm5lY3RvcnMoKX0pLHQpfSxlLnByb3RvdHlwZS5fY3JlYXRlTm9kZXNGb3JEYXRhc2V0PWZ1bmN0aW9uKG4pe3ZhciBpPXQucHJvdG90eXBlLl9jcmVhdGVOb2Rlc0ZvckRhdGFzZXQuY2FsbCh0aGlzLG4pO3JldHVybiB0aGlzLl9jb25uZWN0b3JBcmVhPXRoaXMuX3JlbmRlckFyZWEuYXBwZW5kKCJnIikuY2xhc3NlZChlLl9DT05ORUNUT1JfQVJFQV9DTEFTUywhMCksaX0sZS5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5PWZ1bmN0aW9uKGUpe3JldHVybiJ5Ij09PWU/W3RoaXMuX2V4dGVudF06dC5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5LmNhbGwodGhpcyxlKX0sZS5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yPWZ1bmN0aW9uKCl7dmFyIG49dGhpcyxpPXQucHJvdG90eXBlLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3Rvci5jYWxsKHRoaXMpLHI9dGhpcy55KCkuc2NhbGUsbz1UZ3QuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy50b3RhbCgpKTtyZXR1cm4gbnVsbD09dGhpcy5hdHRyKCJ5IikmJihpLnk9ZnVuY3Rpb24odCxlLGkpe3ZhciBhPW4ueSgpLmFjY2Vzc29yKHQsZSxpKTtpZihvKHQsZSxpKSlyZXR1cm4gTWF0aC5taW4oci5zY2FsZShhKSxyLnNjYWxlKDApKTt2YXIgcz1uLl9zdWJ0b3RhbHNbZV07aWYoMD09PWUpcmV0dXJuIHIuc2NhbGUoYTwwP3MtYTpzKTt2YXIgbD1uLl9zdWJ0b3RhbHNbZS0xXTtyZXR1cm4gci5zY2FsZShzPmw/czpsKX0pLG51bGw9PXRoaXMuYXR0cigiaGVpZ2h0IikmJihpLmhlaWdodD1mdW5jdGlvbih0LGUsaSl7dmFyIGE9byh0LGUsaSkscz1uLnkoKS5hY2Nlc3Nvcih0LGUsaSk7aWYoYSlyZXR1cm4gTWF0aC5hYnMoci5zY2FsZShzKS1yLnNjYWxlKDApKTt2YXIgbD1uLl9zdWJ0b3RhbHNbZV07aWYoMD09PWUpcmV0dXJuIE1hdGguYWJzKHIuc2NhbGUobCktci5zY2FsZShsLXMpKTt2YXIgYz1uLl9zdWJ0b3RhbHNbZS0xXTtyZXR1cm4gTWF0aC5hYnMoci5zY2FsZShsKS1yLnNjYWxlKGMpKX0pLGkuY2xhc3M9ZnVuY3Rpb24odCxpLHIpe3ZhciBhPSIiO3JldHVybiBudWxsIT1uLmF0dHIoImNsYXNzIikmJihhPW4uYXR0cigiY2xhc3MiKS5hY2Nlc3Nvcih0LGkscikrIiAiKSxvKHQsaSxyKT9hK2UuX0JBUl9UT1RBTF9DTEFTUzphKyhuLnkoKS5hY2Nlc3Nvcih0LGkscik+MD9lLl9CQVJfR1JPV1RIX0NMQVNTOmUuX0JBUl9ERUNMSU5FX0NMQVNTKX0saX0sZS5wcm90b3R5cGUuX29uRGF0YXNldFVwZGF0ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl91cGRhdGVTdWJ0b3RhbHMoKSx0LnByb3RvdHlwZS5fb25EYXRhc2V0VXBkYXRlLmNhbGwodGhpcyksdGhpc30sZS5wcm90b3R5cGUuX2NhbGN1bGF0ZVN1YnRvdGFsc0FuZEV4dGVudD1mdW5jdGlvbih0KXtmb3IodmFyIGU9TnVtYmVyLk1BWF9WQUxVRSxuPU51bWJlci5NSU5fVkFMVUUsaT0wLHI9ITEsbz10LmRhdGEoKSxhPW8ubGVuZ3RoLHM9MDtzPGE7cysrKXt2YXIgbD1vW3NdLGM9dGhpcy55KCkuYWNjZXNzb3IobCxzLHQpLHU9dGhpcy50b3RhbCgpLmFjY2Vzc29yKGwscyx0KTtpZih1JiYwIT09c3x8KGkrPWMpLHRoaXMuX3N1YnRvdGFscy5wdXNoKGkpLGk8ZSYmKGU9aSksaT5uJiYobj1pKSx1JiYoYzxlJiYoZT1jKSxjPm4mJihuPWMpKSwhciYmdSl7Zm9yKHZhciBoPWMtaSxkPTA7ZDx0aGlzLl9zdWJ0b3RhbHMubGVuZ3RoO2QrKyl0aGlzLl9zdWJ0b3RhbHNbZF0rPWg7cj0hMCxpKz1oLGUrPWgsbis9aH19dGhpcy5fZXh0ZW50PVtlLG5dfSxlLnByb3RvdHlwZS5fZHJhd0Nvbm5lY3RvcnM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksbj10aGlzLmRhdGFzZXRzKClbMF0saT0xO2k8bi5kYXRhKCkubGVuZ3RoO2krKyl7dmFyIHI9aS0xLG89bi5kYXRhKClbaV0sYT1uLmRhdGEoKVtyXSxzPXQueChhLHIsbiksbD10LngobyxpLG4pK3Qud2lkdGgobyxpLG4pLGM9dC55KG8saSxuKTsodGhpcy5fc3VidG90YWxzW2ldPjAmJnRoaXMuX3N1YnRvdGFsc1tpXT50aGlzLl9zdWJ0b3RhbHNbcl18fHRoaXMuX3N1YnRvdGFsc1tpXTwwJiZ0aGlzLl9zdWJ0b3RhbHNbaV0+PXRoaXMuX3N1YnRvdGFsc1tyXSkmJihjPXQueShvLGksbikrdC5oZWlnaHQobyxpLG4pKSx0aGlzLl9jb25uZWN0b3JBcmVhLmFwcGVuZCgibGluZSIpLmNsYXNzZWQoZS5fQ09OTkVDVE9SX0NMQVNTLCEwKS5hdHRyKCJ4MSIscykuYXR0cigieDIiLGwpLmF0dHIoInkxIixjKS5hdHRyKCJ5MiIsYyl9fSxlLnByb3RvdHlwZS5fdXBkYXRlU3VidG90YWxzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5kYXRhc2V0cygpO2lmKHQubGVuZ3RoPjApe3ZhciBlPXRbdC5sZW5ndGgtMV07dGhpcy5fc3VidG90YWxzPW5ldyBBcnJheSx0aGlzLl9jYWxjdWxhdGVTdWJ0b3RhbHNBbmRFeHRlbnQoZSl9fSxlLl9CQVJfREVDTElORV9DTEFTUz0id2F0ZXJmYWxsLWRlY2xpbmUiLGUuX0JBUl9HUk9XVEhfQ0xBU1M9IndhdGVyZmFsbC1ncm93dGgiLGUuX0JBUl9UT1RBTF9DTEFTUz0id2F0ZXJmYWxsLXRvdGFsIixlLl9DT05ORUNUT1JfQ0xBU1M9ImNvbm5lY3RvciIsZS5fQ09OTkVDVE9SX0FSRUFfQ0xBU1M9ImNvbm5lY3Rvci1hcmVhIixlLl9UT1RBTF9LRVk9InRvdGFsIixlfSkoV2d0LkJhcik7ZS5XYXRlcmZhbGw9bn0pKSx0X3Q9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxEZnQuX19leHBvcnRTdGFyKEdndCxlKSxEZnQuX19leHBvcnRTdGFyKFdndCxlKSxEZnQuX19leHBvcnRTdGFyKGZndCxlKSxEZnQuX19leHBvcnRTdGFyKHFndCxlKSxEZnQuX19leHBvcnRTdGFyKGpndCxlKSxEZnQuX19leHBvcnRTdGFyKFlndCxlKSxEZnQuX19leHBvcnRTdGFyKFhndCxlKSxEZnQuX19leHBvcnRTdGFyKCRndCxlKSxEZnQuX19leHBvcnRTdGFyKEtndCxlKSxEZnQuX19leHBvcnRTdGFyKFpndCxlKSxEZnQuX19leHBvcnRTdGFyKEpndCxlKSxEZnQuX19leHBvcnRTdGFyKFFndCxlKX0pKSxlX3Q9YmUoKGZ1bmN0aW9uKHQsZSl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLnZlcnNpb249IjMuOS4wIn0pKSxuX3Q9YmUoKGZ1bmN0aW9uKHQsZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuQW5pbWF0b3JzPUJmdCxlLkF4ZXM9R210LGUuQ29tcG9uZW50cz1OZ3QsZS5Db25maWdzPWZtdCxlLkZvcm1hdHRlcnM9Q210LGUuUmVuZGVyQ29udHJvbGxlcj1FbXQsZS5SZW5kZXJQb2xpY2llcz1NbXQsZS5TeW1ib2xGYWN0b3JpZXM9ZGd0LGUuRGlzcGF0Y2hlcnM9JG10LGUuRHJhd2Vycz1WZ3QsZS5JbnRlcmFjdGlvbnM9bmd0LGUuUGxvdHM9dF90LGUuU2NhbGVzPVVtdCxlLlV0aWxzPVNtdCxEZnQuX19leHBvcnRTdGFyKEFtdCxlKSxlLlRpbWVJbnRlcnZhbD1qbXQuVGltZUludGVydmFsLERmdC5fX2V4cG9ydFN0YXIoVG10LGUpLERmdC5fX2V4cG9ydFN0YXIobGd0LGUpLERmdC5fX2V4cG9ydFN0YXIoZ2d0LGUpLGUudmVyc2lvbj1lX3QudmVyc2lvbixEZnQuX19leHBvcnRTdGFyKFdtdCxlKSxEZnQuX19leHBvcnRTdGFyKFNndCxlKSxEZnQuX19leHBvcnRTdGFyKEttdCxlKSxEZnQuX19leHBvcnRTdGFyKFFtdCxlKSxEZnQuX19leHBvcnRTdGFyKFVndCxlKSxEZnQuX19leHBvcnRTdGFyKFRndCxlKSxEZnQuX19leHBvcnRTdGFyKERtdCxlKSxEZnQuX19leHBvcnRTdGFyKEltdCxlKX0pKTtjb25zdCBpX3Q9W3tjaGFyYWN0ZXI6IuKXvCIsbWV0aG9kOm5fdC5TeW1ib2xGYWN0b3JpZXMuc3F1YXJlfSx7Y2hhcmFjdGVyOiLil4YiLG1ldGhvZDpuX3QuU3ltYm9sRmFjdG9yaWVzLmRpYW1vbmR9LHtjaGFyYWN0ZXI6IuKWsiIsbWV0aG9kOm5fdC5TeW1ib2xGYWN0b3JpZXMudHJpYW5nbGV9LHtjaGFyYWN0ZXI6IuKYhSIsbWV0aG9kOm5fdC5TeW1ib2xGYWN0b3JpZXMuc3Rhcn0se2NoYXJhY3Rlcjoi4pyaIixtZXRob2Q6bl90LlN5bWJvbEZhY3Rvcmllcy5jcm9zc31dO3ZhciByX3Q7ZnVuY3Rpb24gb190KHQpe3JldHVybiBlPT57bGV0IG4saT1NYXRoLmFicyhlKTtyZXR1cm4gaTwxZS0xNSYmKGk9MCksbj1meShpPj0xZTR8fGk+MCYmaTwuMDE/Ii4iK3QrIn5lIjoiLiIrdCsifmciKSxuKGUpfX0hKGZ1bmN0aW9uKHQpe3QuU1RFUD0ic3RlcCIsdC5SRUxBVElWRT0icmVsYXRpdmUiLHQuV0FMTF9USU1FPSJ3YWxsX3RpbWUifSkocl90fHwocl90PXt9KSk7Y29uc3QgYV90PWZ5KCIuNH5zIik7ZnVuY3Rpb24gc190KCl7bGV0IHQ9bmV3IG5fdC5TY2FsZXMuTGluZWFyO3QudGlja0dlbmVyYXRvcihuX3QuU2NhbGVzLlRpY2tHZW5lcmF0b3JzLmludGVnZXJUaWNrR2VuZXJhdG9yKCkpO2xldCBlPW5ldyBuX3QuQXhlcy5OdW1lcmljKHQsImJvdHRvbSIpO3JldHVybiBlLmZvcm1hdHRlcihhX3QpLHtzY2FsZTp0LGF4aXM6ZSxhY2Nlc3Nvcjp0PT50LnN0ZXB9fWxldCBsX3Q9bl90LkZvcm1hdHRlcnMudGltZSgiJWEgJWIgJWUsICVIOiVNOiVTIiksY190PSh0LGUsbik9PntpZihudWxsIT10LnJlbGF0aXZlKXJldHVybiB0LnJlbGF0aXZlO2xldCBpPW4uZGF0YSgpO3JldHVybigrdC53YWxsX3RpbWUtKGkubGVuZ3RoPjA/K2lbMF0ud2FsbF90aW1lOjApKS8zNmU1fSx1X3Q9dD0+e2xldCBlPSIiLG49TWF0aC5mbG9vcih0LzI0KTt0LT0yNCpuLG4mJihlKz1uKyJkICIpO2xldCBpPU1hdGguZmxvb3IodCk7dC09aSx0Kj02MCwoaXx8bikmJihlKz1pKyJoICIpO2xldCByPU1hdGguZmxvb3IodCk7cmV0dXJuIHQtPXIsdCo9NjAsKHJ8fGl8fG4pJiYoZSs9cisibSAiKSxlK01hdGguZmxvb3IodCkrInMifTtmdW5jdGlvbiBoX3QodCl7c3dpdGNoKHQpe2Nhc2Ugcl90LlNURVA6cmV0dXJuIHNfdCgpO2Nhc2Ugcl90LldBTExfVElNRTpyZXR1cm4oZnVuY3Rpb24gZSgpe2xldCB0PW5ldyBuX3QuU2NhbGVzLlRpbWU7cmV0dXJue3NjYWxlOnQsYXhpczpuZXcgbl90LkF4ZXMuVGltZSh0LCJib3R0b20iKSxhY2Nlc3Nvcjp0PT50LndhbGxfdGltZX19KSgpO2Nhc2Ugcl90LlJFTEFUSVZFOnJldHVybihmdW5jdGlvbiBuKCl7bGV0IHQ9bmV3IG5fdC5TY2FsZXMuTGluZWFyO3JldHVybntzY2FsZTp0LGF4aXM6bmV3IG5fdC5BeGVzLk51bWVyaWModCwiYm90dG9tIiksYWNjZXNzb3I6Y190fX0pKCk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgeFR5cGU6ICIrdCl9fXZhciBkX3Q7ZnVuY3Rpb24gcF90KHQpe3JldHVybiBjbGFzcyBleHRlbmRzIHR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMubG9hZEtleT0iIix0aGlzLmRhdGFUb0xvYWQ9W10sdGhpcy5nZXREYXRhTG9hZE5hbWU9dD0+U3RyaW5nKHQpLHRoaXMuZGF0YUxvYWRpbmc9ITEsdGhpcy5kYXRhTG9hZGVkQXRMZWFzdE9uY2U9ITEsdGhpcy5faXNDb25uZWN0ZWQ9ITEsdGhpcy5fZGF0YUxvYWRTdGF0ZT1uZXcgTWFwLHRoaXMuX2NhbmNlbGxlcj1uZXcgTk8sdGhpcy5fbG9hZERhdGFBc3luYz1udWxsLHRoaXMuX2xvYWREYXRhPXdlLnRocm90dGxlKHRoaXMuX2xvYWREYXRhSW1wbCwxMDAse2xlYWRpbmc6ITAsdHJhaWxpbmc6ITB9KX1jb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5faXNDb25uZWN0ZWQ9ITB9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuX2lzQ29ubmVjdGVkPSExfXN0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybnthY3RpdmU6e3R5cGU6Qm9vbGVhbixvYnNlcnZlcjoiX2xvYWREYXRhSWZBY3RpdmUifSxfaXNDb25uZWN0ZWQ6e3R5cGU6Qm9vbGVhbn0sbG9hZEtleTp7dHlwZTpTdHJpbmd9LGRhdGFUb0xvYWQ6e3R5cGU6QXJyYXl9LGdldERhdGFMb2FkTmFtZTp7dHlwZTpPYmplY3R9LGxvYWREYXRhQ2FsbGJhY2s6e3R5cGU6T2JqZWN0fSxyZXF1ZXN0RGF0YTp7dHlwZTpPYmplY3R9fX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX2RhdGFUb0xvYWRDaGFuZ2VkKF9pc0Nvbm5lY3RlZCwgZGF0YVRvTG9hZC4qKSJdfW9uTG9hZEZpbmlzaCgpe31yZWxvYWQoKXt0aGlzLl9kYXRhTG9hZFN0YXRlLmNsZWFyKCksdGhpcy5fbG9hZERhdGEoKX1yZXNldCgpe251bGwhPXRoaXMuX2xvYWREYXRhQXN5bmMmJihjbGVhclRpbWVvdXQodGhpcy5fbG9hZERhdGFBc3luYyksdGhpcy5fbG9hZERhdGFBc3luYz1udWxsKSx0aGlzLl9jYW5jZWxsZXImJnRoaXMuX2NhbmNlbGxlci5jYW5jZWxBbGwoKSx0aGlzLl9kYXRhTG9hZFN0YXRlJiZ0aGlzLl9kYXRhTG9hZFN0YXRlLmNsZWFyKCksdGhpcy5faXNDb25uZWN0ZWQmJnRoaXMuX2xvYWREYXRhKCl9X2RhdGFUb0xvYWRDaGFuZ2VkKCl7dGhpcy5faXNDb25uZWN0ZWQmJnRoaXMuX2xvYWREYXRhKCl9ZGV0YWNoZWQoKXtudWxsIT10aGlzLl9sb2FkRGF0YUFzeW5jJiYoY2xlYXJUaW1lb3V0KHRoaXMuX2xvYWREYXRhQXN5bmMpLHRoaXMuX2xvYWREYXRhQXN5bmM9bnVsbCl9X2xvYWREYXRhSWZBY3RpdmUoKXt0aGlzLmFjdGl2ZSYmdGhpcy5fbG9hZERhdGEoKX1fbG9hZERhdGFJbXBsKCl7dGhpcy5hY3RpdmUmJihudWxsIT09dGhpcy5fbG9hZERhdGFBc3luYyYmY2xlYXJUaW1lb3V0KHRoaXMuX2xvYWREYXRhQXN5bmMpLHRoaXMuX2xvYWREYXRhQXN5bmM9c2V0VGltZW91dCh0aGlzLl9jYW5jZWxsZXIuY2FuY2VsbGFibGUoKHQ9PntpZih0LmNhbmNlbGxlZClyZXR1cm47dGhpcy5kYXRhTG9hZGluZz0hMDtjb25zdCBlPXRoaXMuZGF0YVRvTG9hZC5maWx0ZXIoKHQ9Pntjb25zdCBlPXRoaXMuZ2V0RGF0YUxvYWROYW1lKHQpO3JldHVybiF0aGlzLl9kYXRhTG9hZFN0YXRlLmhhcyhlKX0pKTtmb3IoY29uc3QgdCBvZiBlKXtjb25zdCBlPXRoaXMuZ2V0RGF0YUxvYWROYW1lKHQpO3RoaXMuX2RhdGFMb2FkU3RhdGUuc2V0KGUsZF90LkxPQURJTkcpfWNvbnN0IG49dGhpcy5fY2FuY2VsbGVyLmNhbmNlbGxhYmxlKCh0PT57aWYodC5jYW5jZWxsZWQpcmV0dXJuO2NvbnN0e2l0ZW06ZSxkYXRhOm59PXQudmFsdWUsaT10aGlzLmdldERhdGFMb2FkTmFtZShlKTt0aGlzLl9kYXRhTG9hZFN0YXRlLnNldChpLGRfdC5MT0FERUQpLHRoaXMubG9hZERhdGFDYWxsYmFjayh0aGlzLGUsbil9KSksaT10aGlzLl9jYW5jZWxsZXIuY2FuY2VsbGFibGUoKHQ9PntpZighdC5jYW5jZWxsZWQpe2NvbnN0IHQ9bmV3IFNldChlLm1hcCgodD0+dGhpcy5nZXREYXRhTG9hZE5hbWUodCkpKSk7dGhpcy5kYXRhVG9Mb2FkLnNvbWUoKGU9PnQuaGFzKHRoaXMuZ2V0RGF0YUxvYWROYW1lKGUpKSkpJiZ0aGlzLm9uTG9hZEZpbmlzaCgpLHRoaXMuX2xvYWREYXRhQXN5bmM9bnVsbCx0aGlzLmRhdGFMb2FkZWRBdExlYXN0T25jZT0hMH1BcnJheS5mcm9tKHRoaXMuX2RhdGFMb2FkU3RhdGUudmFsdWVzKCkpLmluY2x1ZGVzKGRfdC5MT0FESU5HKXx8KHRoaXMuZGF0YUxvYWRpbmc9ITEpfSkpO3RoaXMucmVxdWVzdERhdGEoZSxuLCgoKT0+aSh2b2lkIDApKSl9KSkpKX19fSEoZnVuY3Rpb24odCl7dFt0LkxPQURJTkc9MF09IkxPQURJTkciLHRbdC5MT0FERUQ9MV09IkxPQURFRCJ9KShkX3R8fChkX3Q9e30pKSx0bCh7bW9kdWxlTmFtZToicGxvdHRhYmxlLXN0eWxlIixzdHlsZUNvbnRlbnQ6IlxuICAgIFxuLnBsb3R0YWJsZS1jb2xvcnMtMCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM1Mjc5Yzc7IC8qIElORElHTyAqL1xufVxuXG4ucGxvdHRhYmxlLWNvbG9ycy0xIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZkMzczZTsgLyogQ09SQUxfUkVEICovXG59XG5cbi5wbG90dGFibGUtY29sb3JzLTIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjNjMjYxOyAvKiBGRVJOICovXG59XG5cbi5wbG90dGFibGUtY29sb3JzLTMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmFkNDE5OyAvKiBCUklHSFRfU1VOICovXG59XG5cbi5wbG90dGFibGUtY29sb3JzLTQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMmMyYjZmOyAvKiBKQUNBUlRBICovXG59XG5cbi5wbG90dGFibGUtY29sb3JzLTUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY3OTM5OyAvKiBCVVJOSU5HX09SQU5HRSAqL1xufVxuXG4ucGxvdHRhYmxlLWNvbG9ycy02IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RiMmU2NTsgLyogQ0VSSVNFX1JFRCAqL1xufVxuXG4ucGxvdHRhYmxlLWNvbG9ycy03IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzk5Y2U1MDsgLyogQ09OSUZFUiAqL1xufVxuXG4ucGxvdHRhYmxlLWNvbG9ycy04IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzk2MjU2NTsgLyogUk9ZQUxfSEVBVEggKi9cbn1cblxuLnBsb3R0YWJsZS1jb2xvcnMtOSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMwNmNjY2M7IC8qIFJPQklOU19FR0dfQkxVRSAqL1xufVxuXG4vKipcbiAqIFVzZXItc3VwcGxpZWQgcmVuZGVyVG8gZWxlbWVudC5cbiAqL1xuLnBsb3R0YWJsZSB7XG4gIGRpc3BsYXk6IGJsb2NrOyAvKiBtdXN0IGJlIGJsb2NrIGVsZW1lbnRzIGZvciB3aWR0aC9oZWlnaHQgY2FsY3VsYXRpb25zIHRvIHdvcmsgaW4gRmlyZWZveC4gKi9cbiAgcG9pbnRlci1ldmVudHM6IHZpc2libGVGaWxsO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIC8qKlxuICAgKiBQcmUgMy4wLCB1c2VycyBjb3VsZCBzZXQgdGhlIGRpbWVuc2lvbiBvZiB0aGUgcm9vdCBlbGVtZW50IGluIHR3byB3YXlzOiBlaXRoZXIgdXNpbmcgQ1NTXG4gICAqIChpbmxpbmUgb3IgdGhyb3VnaCBhIHN0eWxlc2hlZXQpLCBvciB1c2luZyB0aGUgU1ZHIHdpZHRoL2hlaWdodCBhdHRyaWJ1dGVzLiBCeSBkZWZhdWx0LCB3ZVxuICAgKiBzZXQgdGhlIFNWRyB3aWR0aC9oZWlnaHQgYXR0cmlidXRlcyB0byAxMDAlLlxuICAgKlxuICAgKiBQb3N0IDMuMCB0aGUgcm9vdCBlbGVtZW50IGlzIGFsd2F5cyBhIG5vcm1hbCBkaXYgYW5kIHRoZSBvbmx5IHdheSB0byBzZXQgdGhlIGRpbWVuc2lvbnMgaXNcbiAgICogdG8gdXNlIENTUy4gVG8gcmVwbGljYXRlIHRoZSBcIjEwMCUtYnktZGVmYXVsdFwiIGJlaGF2aW9yLCB3ZSBhcHBseSB3aWR0aC9oZWlnaHQgMTAwJS5cbiAgICovXG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG59XG5cbi8qKlxuICogVGhlIF9lbGVtZW50IHRoYXQgcm9vdHMgZWFjaCBDb21wb25lbnQncyBET00uXG4gKi9cbi5wbG90dGFibGUgLmNvbXBvbmVudCB7XG4gIC8qIEFsbG93IGNvbXBvbmVudHMgdG8gYmUgcG9zaXRpb25lZCB3aXRoIGV4cGxpY2l0IGxlZnQvdG9wL3dpZHRoL2hlaWdodCBzdHlsZXMgKi9cbiAgcG9zaXRpb246IGFic29sdXRlO1xufVxuXG4ucGxvdHRhYmxlIC5iYWNrZ3JvdW5kLWNvbnRhaW5lcixcbi5wbG90dGFibGUgLmNvbnRlbnQsXG4ucGxvdHRhYmxlIC5mb3JlZ3JvdW5kLWNvbnRhaW5lciB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbn1cblxuLyoqXG4gKiBEb24ndCBhbGxvdyBzdmcgZWxlbWVudHMgYWJvdmUgdGhlIGNvbnRlbnQgdG8gc3RlYWwgZXZlbnRzXG4gKi9cbi5wbG90dGFibGUgLmZvcmVncm91bmQtY29udGFpbmVyIHtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbi5wbG90dGFibGUgLmNvbXBvbmVudC1vdmVyZmxvdy1oaWRkZW4ge1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4ucGxvdHRhYmxlIC5jb21wb25lbnQtb3ZlcmZsb3ctdmlzaWJsZSB7XG4gIG92ZXJmbG93OiB2aXNpYmxlO1xufVxuXG4ucGxvdHRhYmxlIC5wbG90LWNhbnZhcy1jb250YWluZXIge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4ucGxvdHRhYmxlIC5wbG90LWNhbnZhcyB7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIC8qKlxuICAgKiBQbGF5IHdlbGwgd2l0aCBkZWZlcnJlZCByZW5kZXJpbmcuXG4gICAqL1xuICB0cmFuc2Zvcm0tb3JpZ2luOiAwcHggMHB4IDBweDtcbn1cblxuLnBsb3R0YWJsZSB0ZXh0IHtcbiAgdGV4dC1yZW5kZXJpbmc6IGdlb21ldHJpY1ByZWNpc2lvbjtcbn1cblxuLnBsb3R0YWJsZSAubGFiZWwgdGV4dCB7XG4gIGZpbGw6ICMzMjMxM0Y7XG59XG5cbi5wbG90dGFibGUgLmJhci1sYWJlbC10ZXh0LWFyZWEgdGV4dCxcbi5wbG90dGFibGUgLnNjYXR0ZXItbGFiZWwtdGV4dC1hcmVhIHRleHQge1xuICBmb250LXNpemU6IDEycHg7XG59XG5cbi5wbG90dGFibGUgLmxhYmVsLWFyZWEgdGV4dCB7XG4gIGZpbGw6ICMzMjMxM0Y7XG4gIGZvbnQtc2l6ZTogMTRweDtcbn1cblxuLnBsb3R0YWJsZSAubGlnaHQtbGFiZWwgdGV4dCB7XG4gIGZpbGw6IHdoaXRlO1xufVxuXG4ucGxvdHRhYmxlIC5kYXJrLWxhYmVsIHRleHQge1xuICBmaWxsOiAjMzIzMTNGO1xufVxuXG4ucGxvdHRhYmxlIC5vZmYtYmFyLWxhYmVsIHRleHQge1xuICBmaWxsOiAjMzIzMTNGO1xufVxuXG4ucGxvdHRhYmxlIC5zdGFja2VkLWJhci1sYWJlbCB0ZXh0IHtcbiAgZmlsbDogIzMyMzEzRjtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xufVxuXG4ucGxvdHRhYmxlIC5zdGFja2VkLWJhci1wbG90IC5vZmYtYmFyLWxhYmVsIHtcbiAgLyogSEFDS0hBQ0sgIzI3OTU6IGNvcnJlY3Qgb2ZmLWJhciBsYWJlbCBsb2dpYyB0byBiZSBpbXBsZW1lbnRlZCBvbiBTdGFja2VkQmFyICovXG4gIHZpc2liaWxpdHk6IGhpZGRlbiAhaW1wb3J0YW50O1xufVxuXG4ucGxvdHRhYmxlIC5heGlzLWxhYmVsIHRleHQge1xuICBmb250LXNpemU6IDEwcHg7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBsZXR0ZXItc3BhY2luZzogMXB4O1xuICBsaW5lLWhlaWdodDogbm9ybWFsO1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xufVxuXG4ucGxvdHRhYmxlIC50aXRsZS1sYWJlbCB0ZXh0IHtcbiAgZm9udC1zaXplOiAyMHB4O1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cblxuLnBsb3R0YWJsZSAuYXhpcyBsaW5lLmJhc2VsaW5lIHtcbiAgc3Ryb2tlOiAjQ0NDO1xuICBzdHJva2Utd2lkdGg6IDFweDtcbn1cblxuLnBsb3R0YWJsZSAuYXhpcyBsaW5lLnRpY2stbWFyayB7XG4gIHN0cm9rZTogI0NDQztcbiAgc3Ryb2tlLXdpZHRoOiAxcHg7XG59XG5cbi5wbG90dGFibGUgLmF4aXMgdGV4dCB7XG4gIGZpbGw6ICMzMjMxM0Y7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgZm9udC13ZWlnaHQ6IDIwMDtcbiAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcbn1cblxuLnBsb3R0YWJsZSAuYXhpcyAuYW5ub3RhdGlvbi1jaXJjbGUge1xuICBmaWxsOiB3aGl0ZTtcbiAgc3Ryb2tlLXdpZHRoOiAxcHg7XG4gIHN0cm9rZTogI0NDQztcbn1cblxuLnBsb3R0YWJsZSAuYXhpcyAuYW5ub3RhdGlvbi1saW5lIHtcbiAgc3Ryb2tlOiAjQ0NDO1xuICBzdHJva2Utd2lkdGg6IDFweDtcbn1cblxuLnBsb3R0YWJsZSAuYXhpcyAuYW5ub3RhdGlvbi1yZWN0IHtcbiAgc3Ryb2tlOiAjQ0NDO1xuICBzdHJva2Utd2lkdGg6IDFweDtcbiAgZmlsbDogd2hpdGU7XG59XG5cbi5wbG90dGFibGUgLmJhci1wbG90IC5iYXNlbGluZSB7XG4gIHN0cm9rZTogIzk5OTtcbn1cblxuLnBsb3R0YWJsZSAuZ3JpZGxpbmVzIGxpbmUge1xuICBzdHJva2U6ICMzQzNDM0M7IC8qIGhhY2toYWNrOiBncmlkbGluZXMgc2hvdWxkIGJlIHNvbGlkOyBzZWUgIzgyMCAqL1xuICBvcGFjaXR5OiAwLjI1O1xuICBzdHJva2Utd2lkdGg6IDFweDtcbn1cblxuLnBsb3R0YWJsZSAuc2VsZWN0aW9uLWJveC1sYXllciAuc2VsZWN0aW9uLWFyZWEge1xuICBmaWxsOiBibGFjaztcbiAgZmlsbC1vcGFjaXR5OiAwLjAzO1xuICBzdHJva2U6ICNDQ0M7XG59XG4vKiBEcmFnQm94TGF5ZXIgKi9cbi5wbG90dGFibGUgLmRyYWctYm94LWxheWVyLngtcmVzaXphYmxlIC5kcmFnLWVkZ2UtbHIge1xuICBjdXJzb3I6IGV3LXJlc2l6ZTtcbn1cbi5wbG90dGFibGUgLmRyYWctYm94LWxheWVyLnktcmVzaXphYmxlIC5kcmFnLWVkZ2UtdGIge1xuICBjdXJzb3I6IG5zLXJlc2l6ZTtcbn1cblxuLnBsb3R0YWJsZSAuZHJhZy1ib3gtbGF5ZXIueC1yZXNpemFibGUueS1yZXNpemFibGUgLmRyYWctY29ybmVyLXRsIHtcbiAgY3Vyc29yOiBud3NlLXJlc2l6ZTtcbn1cbi5wbG90dGFibGUgLmRyYWctYm94LWxheWVyLngtcmVzaXphYmxlLnktcmVzaXphYmxlIC5kcmFnLWNvcm5lci10ciB7XG4gIGN1cnNvcjogbmVzdy1yZXNpemU7XG59XG4ucGxvdHRhYmxlIC5kcmFnLWJveC1sYXllci54LXJlc2l6YWJsZS55LXJlc2l6YWJsZSAuZHJhZy1jb3JuZXItYmwge1xuICBjdXJzb3I6IG5lc3ctcmVzaXplO1xufVxuLnBsb3R0YWJsZSAuZHJhZy1ib3gtbGF5ZXIueC1yZXNpemFibGUueS1yZXNpemFibGUgLmRyYWctY29ybmVyLWJyIHtcbiAgY3Vyc29yOiBud3NlLXJlc2l6ZTtcbn1cblxuLnBsb3R0YWJsZSAuZHJhZy1ib3gtbGF5ZXIubW92YWJsZSAuc2VsZWN0aW9uLWFyZWEge1xuICBjdXJzb3I6IG1vdmU7IC8qIElFIGZhbGxiYWNrICovXG4gIGN1cnNvcjogLW1vei1ncmFiO1xuICBjdXJzb3I6IC13ZWJraXQtZ3JhYjtcbiAgY3Vyc29yOiBncmFiO1xufVxuXG4ucGxvdHRhYmxlIC5kcmFnLWJveC1sYXllci5tb3ZhYmxlIC5zZWxlY3Rpb24tYXJlYTphY3RpdmUge1xuICBjdXJzb3I6IC1tb3otZ3JhYmJpbmc7XG4gIGN1cnNvcjogLXdlYmtpdC1ncmFiYmluZztcbiAgY3Vyc29yOiBncmFiYmluZztcbn1cbi8qIC9EcmFnQm94TGF5ZXIgKi9cblxuLnBsb3R0YWJsZSAuZ3VpZGUtbGluZS1sYXllciBsaW5lLmd1aWRlLWxpbmUge1xuICBzdHJva2U6ICNDQ0M7XG4gIHN0cm9rZS13aWR0aDogMXB4O1xufVxuXG4ucGxvdHRhYmxlIC5kcmFnLWxpbmUtbGF5ZXIuZW5hYmxlZC52ZXJ0aWNhbCBsaW5lLmRyYWctZWRnZSB7XG4gIGN1cnNvcjogZXctcmVzaXplO1xufVxuXG4ucGxvdHRhYmxlIC5kcmFnLWxpbmUtbGF5ZXIuZW5hYmxlZC5ob3Jpem9udGFsIGxpbmUuZHJhZy1lZGdlIHtcbiAgY3Vyc29yOiBucy1yZXNpemU7XG59XG5cbi5wbG90dGFibGUgLmxlZ2VuZCB0ZXh0IHtcbiAgZmlsbDogIzMyMzEzRjtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcbn1cblxuLnBsb3R0YWJsZSAuaW50ZXJwb2xhdGVkLWNvbG9yLWxlZ2VuZCByZWN0LnN3YXRjaC1ib3VuZGluZy1ib3gge1xuICBmaWxsOiBub25lO1xuICBzdHJva2U6ICNDQ0M7XG4gIHN0cm9rZS13aWR0aDogMXB4O1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cblxuLnBsb3R0YWJsZSAud2F0ZXJmYWxsLXBsb3QgbGluZS5jb25uZWN0b3Ige1xuICBzdHJva2U6ICNDQ0M7XG4gIHN0cm9rZS13aWR0aDogMXB4O1xufVxuXG4ucGxvdHRhYmxlIC5waWUtcGxvdCAuYXJjLm91dGxpbmUge1xuICBzdHJva2UtbGluZWpvaW46IHJvdW5kO1xufVxuXG4ifSk7Y29uc3QgZl90PVsxLDAsMCwxLDAsMF07Y2xhc3MgbV90IGV4dGVuZHMgbl90LlV0aWxzLlRyYW5zbGF0b3J7Y29tcHV0ZVBvc2l0aW9uKHQsZSl7Y29uc3Qgbj17eDp0LHk6ZX0saT0oZnVuY3Rpb24gcih0KXtjb25zdCBlPShmdW5jdGlvbiBuKHQpe2NvbnN0IGU9W107Zm9yKDt0JiZ0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQ7KWlmKGUucHVzaCh0KSx0LmFzc2lnbmVkU2xvdCl0PXQuYXNzaWduZWRTbG90O2Vsc2UgaWYodC5wYXJlbnRFbGVtZW50KXQ9dC5wYXJlbnRFbGVtZW50O2Vsc2V7Y29uc3QgZT10LnBhcmVudE5vZGU7dD1lIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudD9lLmhvc3Q6ZSE9PXQ/ZTpudWxsfXJldHVybiBlfSkodCk7bGV0IGk9Zl90LHI9bnVsbDtmb3IoY29uc3QgdCBvZiBlKXtjb25zdCBlPW5fdC5VdGlscy5ET00uZ2V0RWxlbWVudFRyYW5zZm9ybSh0KTtpZihudWxsIT1lKXtjb25zdCBuPXQuY2xpZW50V2lkdGgvMixyPXQuY2xpZW50SGVpZ2h0LzI7aT1uX3QuVXRpbHMuTWF0aC5tdWx0aXBseVRyYW5zbGF0ZShpLFtuLHJdKSxpPW5fdC5VdGlscy5NYXRoLm11bHRpcGx5TWF0cml4KGksbl90LlV0aWxzLk1hdGguaW52ZXJ0TWF0cml4KGUpKSxpPW5fdC5VdGlscy5NYXRoLm11bHRpcGx5VHJhbnNsYXRlKGksWy1uLC1yXSl9bGV0IG49dC5zY3JvbGxMZWZ0LG89dC5zY3JvbGxUb3A7bnVsbCE9PXImJnQhPT1yfHwobi09dC5vZmZzZXRMZWZ0K3QuY2xpZW50TGVmdCxvLT10Lm9mZnNldFRvcCt0LmNsaWVudFRvcCxyPXQub2Zmc2V0UGFyZW50KSxpPW5fdC5VdGlscy5NYXRoLm11bHRpcGx5VHJhbnNsYXRlKGksW24sb10pfXJldHVybiBpfSkodGhpcy5fcm9vdEVsZW1lbnQpO3JldHVybiBudWxsPT1pP246bl90LlV0aWxzLk1hdGguYXBwbHlUcmFuc2Zvcm0oaSxuKX19Y2xhc3MgZ190IGV4dGVuZHMgbl90LkRpc3BhdGNoZXJzLk1vdXNle2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpLHRoaXMuX2V2ZW50VGFyZ2V0PXQucm9vdCgpLnJvb3RFbGVtZW50KCkubm9kZSgpLHRoaXMuX3RyYW5zbGF0b3I9bmV3IG1fdCh0LnJvb3QoKS5yb290RWxlbWVudCgpLm5vZGUoKSl9c3RhdGljIGdldERpc3BhdGNoZXIodCl7Y29uc3QgZT10LnJvb3QoKS5yb290RWxlbWVudCgpO2xldCBuPWVbZ190Ll9ESVNQQVRDSEVSX0tFWV07cmV0dXJuIG58fChuPW5ldyBnX3QodCksZVtnX3QuX0RJU1BBVENIRVJfS0VZXT1uKSxufX1jbGFzcyBfX3QgZXh0ZW5kcyBuX3QuRGlzcGF0Y2hlcnMuVG91Y2h7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy5fZXZlbnRUYXJnZXQ9dC5yb290KCkucm9vdEVsZW1lbnQoKS5ub2RlKCksdGhpcy5fdHJhbnNsYXRvcj1uZXcgbV90KHQucm9vdCgpLnJvb3RFbGVtZW50KCkubm9kZSgpKX1zdGF0aWMgZ2V0RGlzcGF0Y2hlcih0KXtjb25zdCBlPXQucm9vdCgpLnJvb3RFbGVtZW50KCk7bGV0IG49ZVtfX3QuX0RJU1BBVENIRVJfS0VZXTtyZXR1cm4gbnx8KG49bmV3IF9fdCh0KSxlW19fdC5fRElTUEFUQ0hFUl9LRVldPW4pLG59fW5fdC5JbnRlcmFjdGlvbi5wcm90b3R5cGUuX2lzSW5zaWRlQ29tcG9uZW50PWZ1bmN0aW9uKHQpe3JldHVybiAwPD10LngmJjA8PXQueSYmdC54PHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8ud2lkdGgoKSYmdC55PHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8uaGVpZ2h0KCl9O2NsYXNzIHlfdCBleHRlbmRzIG5fdC5JbnRlcmFjdGlvbnMuUG9pbnRlcntfYW5jaG9yKHQpe2NvbnN0IGU9dGhpcztlLl9pc0FuY2hvcmVkPSEwLGUuX21vdXNlRGlzcGF0Y2hlcj1nX3QuZ2V0RGlzcGF0Y2hlcihlLl9jb21wb25lbnRBdHRhY2hlZFRvKSxlLl9tb3VzZURpc3BhdGNoZXIub25Nb3VzZU1vdmUoZS5fbW91c2VNb3ZlQ2FsbGJhY2spLGUuX3RvdWNoRGlzcGF0Y2hlcj1fX3QuZ2V0RGlzcGF0Y2hlcihlLl9jb21wb25lbnRBdHRhY2hlZFRvKSxlLl90b3VjaERpc3BhdGNoZXIub25Ub3VjaFN0YXJ0KGUuX3RvdWNoU3RhcnRDYWxsYmFjayl9fXZhciB2X3Q7IShmdW5jdGlvbih0KXt0LkFVVE89ImF1dG8iLHQuQk9UVE9NPSJib3R0b20iLHQuUklHSFQ9InJpZ2h0In0pKHZfdHx8KHZfdD17fSkpO2NvbnN0IGJfdD17Ym94U2hhZG93OiIwIDFweCA0cHggcmdiYSgwLCAwLCAwLCAuMykiLG9wYWNpdHk6MCxwb3NpdGlvbjoiZml4ZWQiLHdpbGxDaGFuZ2U6InRyYW5zZm9ybSIsekluZGV4OjV9O2xldCB4X3Q9Y2xhc3MgZXh0ZW5kcyh0cih5ZSkpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnBvc2l0aW9uPXZfdC5BVVRPLHRoaXMubWluRGlzdEZyb21FZGdlPTE1LHRoaXMuX3N0eWxlQ2FjaGU9bnVsbCx0aGlzLl9yYWY9bnVsbCx0aGlzLl90dW5uZWw9bnVsbH1yZWFkeSgpe3RoaXMuX3N0eWxlQ2FjaGU9bnVsbCx0aGlzLl9yYWY9bnVsbCx0aGlzLl90dW5uZWw9bnVsbH1hdHRhY2hlZCgpe3RoaXMuX3R1bm5lbD10aGlzLl9jcmVhdGVUdW5uZWwoKSx0aGlzLl9oaWRlT25CbHVyPSgpPT57ZG9jdW1lbnQuaGlkZGVuJiZ0aGlzLmhpZGUoKX0sd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLHRoaXMuX2hpZGVPbkJsdXIpfWRldGFjaGVkKCl7dGhpcy5oaWRlKCksdGhpcy5fcmVtb3ZlVHVubmVsKHRoaXMuX3R1bm5lbCksdGhpcy5fdHVubmVsPW51bGwsd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLHRoaXMuX2hpZGVPbkJsdXIpfWNvbnRlbnQoKXtyZXR1cm4gdGhpcy5fdHVubmVsLnNoYWRvd1Jvb3R9aGlkZSgpe3dpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yYWYpLHRoaXMuX3N0eWxlQ2FjaGU9bnVsbCx0aGlzLl90dW5uZWwuc3R5bGUub3BhY2l0eT0wfXVwZGF0ZUFuZFBvc2l0aW9uKHQpe3dpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yYWYpLHRoaXMuX3JhZj13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgoKT0+e3RoaXMuaXNBdHRhY2hlZCYmdGhpcy5fcmVwb3NpdGlvbkltcGwodCl9KSl9X3JlcG9zaXRpb25JbXBsKHQpe2NvbnN0IGU9dGhpcy5fdHVubmVsLG49dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxpPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscj13aW5kb3cuaW5uZXJIZWlnaHQsbz1kb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoLGE9bi50b3Ascz1hK24uaGVpZ2h0LGw9aS5oZWlnaHQrMjA7bGV0IGM9bnVsbCx1PU1hdGgubWF4KHRoaXMubWluRGlzdEZyb21FZGdlLG4ubGVmdCksaD1udWxsLGQ9YTt0aGlzLnBvc2l0aW9uPT12X3QuUklHSFQ/dT1uLnJpZ2h0OihkPXMrMjAsbzx1K2kud2lkdGgrdGhpcy5taW5EaXN0RnJvbUVkZ2UmJih1PW51bGwsaD10aGlzLm1pbkRpc3RGcm9tRWRnZSkpLHRoaXMucG9zaXRpb249PXZfdC5BVVRPJiZuLnRvcC1sPjAmJnI8bi50b3Arbi5oZWlnaHQrbCYmKGQ9bnVsbCxjPXItYSsyMCk7Y29uc3QgcD17Y29udGFpbjoiY29udGVudCIsb3BhY2l0eToxLGxlZnQ6dT9gJHt1fXB4YDpudWxsLHJpZ2h0Omg/YCR7aH1weGA6bnVsbCx0b3A6ZD9gJHtkfXB4YDpudWxsLGJvdHRvbTpjP2Ake2N9cHhgOm51bGx9O3dlLmlzRXF1YWwodGhpcy5fc3R5bGVDYWNoZSxwKXx8KE9iamVjdC5hc3NpZ24oZS5zdHlsZSxwKSx0aGlzLl9zdHlsZUNhY2hlPXApfV9jcmVhdGVUdW5uZWwoKXtpZighdGhpcy5jb250ZW50Q29tcG9uZW50TmFtZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiUmVxdWlyZSBgY29udGVudENvbXBvbmVudE5hbWVgIHRvIGJlIGEgbmFtZSBvZiBhIFBvbHltZXIgY29tcG9uZW50Iik7Y29uc3QgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KHRoaXMuY29udGVudENvbXBvbmVudE5hbWUpO3JldHVybiBPYmplY3QuYXNzaWduKHQuc3R5bGUsYl90KSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHQpLHR9X3JlbW92ZVR1bm5lbCh0KXtkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHQpfX07dChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0seF90LnByb3RvdHlwZSwiY29udGVudENvbXBvbmVudE5hbWUiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0seF90LnByb3RvdHlwZSwicG9zaXRpb24iLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXJ9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0seF90LnByb3RvdHlwZSwibWluRGlzdEZyb21FZGdlIix2b2lkIDApLHhfdD10KFtpKCJ2ei1jaGFydC10b29sdGlwIildLHhfdCk7Y29uc3Qgd190PWZ5KCIuMn5lIiksU190PWZ5KCIuNH5yIiksTV90PWZ5KCIsfiIpO2Z1bmN0aW9uIEVfdCh0KXtpZigwPT09dClyZXR1cm4iMCI7Y29uc3QgZT1NYXRoLmFicyh0KTtyZXR1cm4gZT49MWU0fHxlPC4wMDE/d190KHQpOlNfdCh0KX1jb25zdCBUX3Q9e2Zvcm1hdFRpY2s6RV90LGZvcm1hdFNob3J0OkVfdCxmb3JtYXRSZWFkYWJsZSh0KXtjb25zdCBlPU1hdGguYWJzKHQpO3JldHVybiBlPj0xZTR8fGU8LjAwMT93X3QodCk6TV90KHQpfSxmb3JtYXRMb25nOk1fdH07ZnkoIjAuM35zIiksZnkoIiwuM35mIiksZnkoIi40fiIpO2NvbnN0IENfdD1ZQygpLnRpY2tGb3JtYXQoKTtsZXQgQV90O2NvbnN0IGtfdD17Zm9ybWF0VGljazp0PT5DX3QobmV3IERhdGUodCkpLGZvcm1hdFNob3J0OnQ9Pm5ldyBEYXRlKHQpLnRvTG9jYWxlU3RyaW5nKEFfdCx7eWVhcjoibnVtZXJpYyIsbW9udGg6InNob3J0IixkYXk6Im51bWVyaWMiLGhvdXI6Im51bWVyaWMiLG1pbnV0ZToibnVtZXJpYyIsc2Vjb25kOiJudW1lcmljIn0pLGZvcm1hdFJlYWRhYmxlOnQ9Pm5ldyBEYXRlKHQpLnRvTG9jYWxlU3RyaW5nKEFfdCx7eWVhcjoibnVtZXJpYyIsbW9udGg6InNob3J0IixkYXk6Im51bWVyaWMiLGhvdXI6Im51bWVyaWMiLG1pbnV0ZToibnVtZXJpYyIsc2Vjb25kOiJudW1lcmljIix0aW1lWm9uZU5hbWU6InNob3J0In0pLGZvcm1hdExvbmc6dD0+bmV3IERhdGUodCkudG9Mb2NhbGVTdHJpbmcoQV90LHt5ZWFyOiJudW1lcmljIixtb250aDoibG9uZyIsZGF5OiJudW1lcmljIixob3VyOiJudW1lcmljIixtaW51dGU6Im51bWVyaWMiLHNlY29uZDoibnVtZXJpYyIsdGltZVpvbmVOYW1lOiJzaG9ydCIsZnJhY3Rpb25hbFNlY29uZERpZ2l0czozfSl9O3ZhciBMX3Q7IShmdW5jdGlvbih0KXt0W3QuTElORUFSPTBdPSJMSU5FQVIiLHRbdC5MT0cxMD0xXT0iTE9HMTAiLHRbdC5USU1FPTJdPSJUSU1FIn0pKExfdHx8KExfdD17fSkpO2NsYXNzIFBfdHtjb25zdHJ1Y3Rvcigpe3RoaXMuZGVmYXVsdEZvcm1hdHRlcj1UX3R9dHJhbnNmb3JtKHQsZSxuKXtjb25zdFtpLHJdPXQsbz1yLWksW2Esc109ZTtyZXR1cm4gMD09PW8/YToocy1hKS9vKihuLWkpK2F9Zm9yd2FyZCh0LGUsbil7cmV0dXJuIHRoaXMudHJhbnNmb3JtKHQsZSxuKX1yZXZlcnNlKHQsZSxuKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0oZSx0LG4pfW5pY2VEb21haW4odCl7bGV0W2Usbl09dDtpZihuPGUpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIGlucHV0OiBtaW4gaXMgbGFyZ2VyIHRoYW4gbWF4Iik7aWYobj09PWUpcmV0dXJuIDA9PT1lP1stMSwxXTplPDA/WzIqZSwwXTpbMCwyKmVdO2NvbnN0IGk9RE0oKSxyPS4wNSoobi1lK051bWJlci5FUFNJTE9OKSxbbyxhXT1pLmRvbWFpbihbZS1yLG4rcl0pLm5pY2UoKS5kb21haW4oKTtyZXR1cm5bbyxhXX10aWNrcyh0LGUpe3JldHVybiBETSgpLmRvbWFpbih0KS50aWNrcyhlKX1pc1NhZmVOdW1iZXIodCl7cmV0dXJuIE51bWJlci5pc0Zpbml0ZSh0KX19Y2xhc3MgTl90e2NvbnN0cnVjdG9yKCl7dGhpcy5kZWZhdWx0Rm9ybWF0dGVyPVRfdH10cmFuc2Zvcm0odCl7cmV0dXJuIE1hdGgubG9nMTAodD4wP3Q6TnVtYmVyLk1JTl9WQUxVRSl9dW50cmFuc2Zvcm0odCl7cmV0dXJuIE1hdGguZXhwKHQvTWF0aC5MT0cxMEUpfWZvcndhcmQodCxlLG4pe2lmKG48PTApcmV0dXJuIGVbMF07Y29uc3RbaSxyXT10LFtvLGFdPWUscz10aGlzLnRyYW5zZm9ybShpKSxsPXRoaXMudHJhbnNmb3JtKHIpLXMsYz1hLW87cmV0dXJuIG49dGhpcy50cmFuc2Zvcm0obiksYy8obCtOdW1iZXIuRVBTSUxPTikqKG4tcykrb31yZXZlcnNlKHQsZSxuKXtjb25zdFtpLHJdPXQsW28sYV09ZSxzPXRoaXMudHJhbnNmb3JtKGkpLGw9dGhpcy50cmFuc2Zvcm0ocik7cmV0dXJuIHRoaXMudW50cmFuc2Zvcm0oKGwtcykvKGEtbytOdW1iZXIuRVBTSUxPTikqKG4tbykrcyl9bmljZURvbWFpbih0KXtjb25zdFtlLG5dPXQ7aWYoZT5uKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBpbnB1dDogbWluIGlzIGxhcmdlciB0aGFuIG1heCIpO2NvbnN0IGk9TWF0aC5tYXgoZSxOdW1iZXIuTUlOX1ZBTFVFKSxyPU1hdGgubWF4KG4sTnVtYmVyLk1JTl9WQUxVRSk7cmV0dXJuIG48PTA/W051bWJlci5NSU5fVkFMVUUsMV06W01hdGgubWF4KE51bWJlci5NSU5fVkFMVUUsLjUqaSksMipyXX10aWNrcyh0LGUpe2NvbnN0IG49dFswXTw9MD9OdW1iZXIuTUlOX1ZBTFVFOnRbMF0saT10WzFdPD0wP051bWJlci5NSU5fVkFMVUU6dFsxXSxyPXFNKCkuZG9tYWluKFtuLGldKS50aWNrcyhlKTtyZXR1cm4gci5sZW5ndGg/cjp0fWlzU2FmZU51bWJlcih0KXtyZXR1cm4gTnVtYmVyLmlzRmluaXRlKHQpJiZ0PjB9fWNsYXNzIElfdHtjb25zdHJ1Y3Rvcigpe3RoaXMuc2NhbGU9WUMoKSx0aGlzLmRlZmF1bHRGb3JtYXR0ZXI9a190fWZvcndhcmQodCxlLG4pe3JldHVybiB0aGlzLnNjYWxlLmRvbWFpbih0KS5yYW5nZShlKShuKX1yZXZlcnNlKHQsZSxuKXtyZXR1cm4gdGhpcy5zY2FsZS5kb21haW4odCkucmFuZ2UoZSkuaW52ZXJ0KG4pLmdldFRpbWUoKX1uaWNlRG9tYWluKHQpe2NvbnN0W2Usbl09dGhpcy5zY2FsZS5kb21haW4odCkubmljZSgpLmRvbWFpbigpO3JldHVybltlLmdldFRpbWUoKSxuLmdldFRpbWUoKV19dGlja3ModCxlKXtyZXR1cm4gdGhpcy5zY2FsZS5kb21haW4odCkudGlja3MoZSkubWFwKCh0PT50LmdldFRpbWUoKSkpfWlzU2FmZU51bWJlcih0KXtyZXR1cm4gTnVtYmVyLmlzRmluaXRlKHQpfX1jbGFzcyBPX3QgZXh0ZW5kcyBuX3QuU2NhbGVzLkxpbmVhcntjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5faWdub3JlT3V0bGllcj0hMSx0aGlzLnBhZFByb3BvcnRpb24oLjIpfXNldFZhbHVlUHJvdmlkZXJGb3JEb21haW4odCl7cmV0dXJuIHRoaXMuX3ZhbHVlUHJvdmlkZXJGb3JEb21haW49dCx0aGlzfV9uaWNlRG9tYWluKHQsZSl7Y29uc3RbbixpXT10O3JldHVybihmdW5jdGlvbiByKHQpe3N3aXRjaCh0KXtjYXNlIExfdC5MSU5FQVI6cmV0dXJuIG5ldyBQX3Q7Y2FzZSBMX3QuTE9HMTA6cmV0dXJuIG5ldyBOX3Q7Y2FzZSBMX3QuVElNRTpyZXR1cm4gbmV3IElfdDtkZWZhdWx0OnRocm93IG5ldyBSYW5nZUVycm9yKGBTY2FsZVR5cGUgJHt0fSBub3Qgc3VwcG9ydGVkLmApfX0pKExfdC5MSU5FQVIpLm5pY2VEb21haW4oW24saV0pfV9nZXRVbmJvdW5kZWRFeHRlbnQodCl7Y29uc3QgZT10aGlzLl9nZXRBbGxJbmNsdWRlZFZhbHVlcyh0KTtsZXQgbj10aGlzLl9kZWZhdWx0RXh0ZW50KCk7aWYoMCE9PWUubGVuZ3RoKXtjb25zdCB0PVtuX3QuVXRpbHMuTWF0aC5taW4oZSxuWzBdKSxuX3QuVXRpbHMuTWF0aC5tYXgoZSxuWzFdKV07bj10aGlzLl9uaWNlRG9tYWluKHQpfXJldHVybiBufV9nZXRBbGxJbmNsdWRlZFZhbHVlcyh0PSExKXtjb25zdCBlPXRoaXMuX3ZhbHVlUHJvdmlkZXJGb3JEb21haW4/dGhpcy5fdmFsdWVQcm92aWRlckZvckRvbWFpbigpOltdO3JldHVybiB0aGlzLmV4dGVudE9mVmFsdWVzKGUpfWV4dGVudE9mVmFsdWVzKHQpe2NvbnN0IGU9dC5maWx0ZXIoKHQ9Pm5fdC5VdGlscy5NYXRoLmlzVmFsaWROdW1iZXIodCkpKTtsZXQgbj1lO2lmKHRoaXMuaWdub3JlT3V0bGllcigpKXtjb25zdCB0PWUuc29ydCgoKHQsZSk9PnQtZSkpLGk9amwodCwuMDUpLHI9amwodCwuOTUpO249ZS5maWx0ZXIoKHQ9PnQ+PWkmJnQ8PXIpKX1jb25zdCBpPWtsKG4pO3JldHVybiBudWxsPT1pWzBdfHxudWxsPT1pWzFdP1tdOml9aWdub3JlT3V0bGllcih0KXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiB0Pyh0aGlzLl9pZ25vcmVPdXRsaWVyPXQsdGhpcyk6dGhpcy5faWdub3JlT3V0bGllcn19Y2xhc3MgUl90IGV4dGVuZHMgbl90LlF1YW50aXRhdGl2ZVNjYWxle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9pZ25vcmVPdXRsaWVyPSExfXNldFZhbHVlUHJvdmlkZXJGb3JEb21haW4odCl7cmV0dXJuIHRoaXMuX3ZhbHVlUHJvdmlkZXJGb3JEb21haW49dCx0aGlzfWlnbm9yZU91dGxpZXIodCl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgdD8odGhpcy5faWdub3JlT3V0bGllcj10LHRoaXMpOnRoaXMuX2lnbm9yZU91dGxpZXJ9X2dldEFsbEluY2x1ZGVkVmFsdWVzKHQ9ITEpe2NvbnN0IGU9dGhpcy5fdmFsdWVQcm92aWRlckZvckRvbWFpbj90aGlzLl92YWx1ZVByb3ZpZGVyRm9yRG9tYWluKCk6W107cmV0dXJuIHRoaXMuZXh0ZW50T2ZWYWx1ZXMoZSl9fWNvbnN0IHpfdD1NYXRoLnBvdygyLC0xMDc0KTtmdW5jdGlvbiBEX3QodCl7cmV0dXJuIE1hdGgubG9nMTAodCl9ZnVuY3Rpb24gQl90KHQpe3JldHVybiBNYXRoLnBvdygxMCx0KX1jbGFzcyBIX3QgZXh0ZW5kcyBSX3R7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX2QzTG9nU2NhbGU9cU0oKSx0aGlzLnBhZFByb3BvcnRpb24oLjIpfXNjYWxlKHQpe3JldHVybiB0PD0wP05hTjp0aGlzLl9kM0xvZ1NjYWxlKHQpfWludmVydCh0KXtyZXR1cm4gdGhpcy5fZDNMb2dTY2FsZS5pbnZlcnQodCl9c2NhbGVUcmFuc2Zvcm1hdGlvbih0KXtyZXR1cm4gdGhpcy5zY2FsZSh0KX1pbnZlcnRlZFRyYW5zZm9ybWF0aW9uKHQpe3JldHVybiB0aGlzLmludmVydCh0KX1nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpe3JldHVybiB0aGlzLmRvbWFpbigpfXNldFRyYW5zZm9ybWF0aW9uRG9tYWluKHQpe3RoaXMuZG9tYWluKHQpfWdldFRyYW5zZm9ybWF0aW9uRXh0ZW50KCl7cmV0dXJuIHRoaXMuX2dldFVuYm91bmRlZEV4dGVudCghMCl9X2dldERvbWFpbigpe3JldHVybiB0aGlzLl91bnRyYW5zZm9ybWVkRG9tYWlufV9zZXREb21haW4odCl7dGhpcy5fdW50cmFuc2Zvcm1lZERvbWFpbj10O2NvbnN0W2Usbl09dDtzdXBlci5fc2V0RG9tYWluKFtNYXRoLm1heCh6X3QsZSksbl0pfV9uaWNlRG9tYWluKHQsZSl7Y29uc3RbbixpXT10LHI9TWF0aC5tYXgoRF90KHpfdCksRF90KG4pKSxvPURfdChpKSxhPW8tcixzPWE/YSp0aGlzLnBhZFByb3BvcnRpb24oKToxO3JldHVybltCX3QoTWF0aC5tYXgoRF90KHpfdCksci1zKSksQl90KG8rcyldfV9nZXRVbmJvdW5kZWRFeHRlbnQodCl7Y29uc3QgZT10aGlzLl9nZXRBbGxJbmNsdWRlZFZhbHVlcyh0KTtsZXQgbj10aGlzLl9kZWZhdWx0RXh0ZW50KCk7aWYoMCE9PWUubGVuZ3RoKXtjb25zdCB0PVtuX3QuVXRpbHMuTWF0aC5taW4oZSxuWzBdKSxuX3QuVXRpbHMuTWF0aC5tYXgoZSxuWzFdKV07bj10aGlzLl9uaWNlRG9tYWluKHQpfXJldHVybiBufV9nZXRBbGxJbmNsdWRlZFZhbHVlcyh0PSExKXtyZXR1cm4gc3VwZXIuX2dldEFsbEluY2x1ZGVkVmFsdWVzKCkubWFwKCh0PT50PjA/dDp6X3QpKX1fZGVmYXVsdEV4dGVudCgpe3JldHVyblsxLDEwXX1fYmFja2luZ1NjYWxlRG9tYWluKHQpe3JldHVybiBudWxsPT10P3RoaXMuX2QzTG9nU2NhbGUuZG9tYWluKCk6KHRoaXMuX2QzTG9nU2NhbGUuZG9tYWluKHQpLHRoaXMpfV9nZXRSYW5nZSgpe3JldHVybiB0aGlzLl9kM0xvZ1NjYWxlLnJhbmdlKCl9X3NldFJhbmdlKHQpe3RoaXMuX2QzTG9nU2NhbGUucmFuZ2UodCl9ZGVmYXVsdFRpY2tzKCl7cmV0dXJuIHRoaXMuX2QzTG9nU2NhbGUudGlja3MoMSl9dGlja3MoKXtyZXR1cm4gdGhpcy5fZDNMb2dTY2FsZS50aWNrcygpfWV4dGVudE9mVmFsdWVzKHQpe2NvbnN0IGU9dC5maWx0ZXIoKHQ9Pm5fdC5VdGlscy5NYXRoLmlzVmFsaWROdW1iZXIodCkmJnQ+MCkpO2xldCBuPWU7aWYodGhpcy5pZ25vcmVPdXRsaWVyKCkpe2NvbnN0IHQ9ZS5tYXAoRF90KS5zb3J0KCgodCxlKT0+dC1lKSksaT1qbCh0LC4wNSkscj1qbCh0LC45NSk7bj10LmZpbHRlcigodD0+dD49aSYmdDw9cikpLm1hcChCX3QpfWNvbnN0IGk9a2wobik7cmV0dXJuIG51bGw9PWlbMF18fG51bGw9PWlbMV0/W106aX19Y2xhc3MgRl90IGV4dGVuZHMgbl90LkNvbXBvbmVudHMuU2VsZWN0aW9uQm94TGF5ZXJ7Y29uc3RydWN0b3IodCxlLG4pe3N1cGVyKCksdGhpcy5lYXNlRm49RWYsdGhpcy5fYW5pbWF0aW9uVGltZT03NTAsdGhpcy54U2NhbGUodCksdGhpcy55U2NhbGUoZSksdGhpcy5fZHJhZ0ludGVyYWN0aW9uPW5ldyBuX3QuSW50ZXJhY3Rpb25zLkRyYWcsdGhpcy5fZG91YmxlQ2xpY2tJbnRlcmFjdGlvbj1uZXcgbl90LkludGVyYWN0aW9ucy5DbGljayx0aGlzLnNldHVwQ2FsbGJhY2tzKCksdGhpcy51bnpvb21NZXRob2Q9bix0aGlzLm9uRGV0YWNoKCgoKT0+e3RoaXMuX2RvdWJsZUNsaWNrSW50ZXJhY3Rpb24uZGV0YWNoRnJvbSh0aGlzKSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24uZGV0YWNoRnJvbSh0aGlzKX0pKSx0aGlzLm9uQW5jaG9yKCgoKT0+e3RoaXMuX2RvdWJsZUNsaWNrSW50ZXJhY3Rpb24uYXR0YWNoVG8odGhpcyksdGhpcy5fZHJhZ0ludGVyYWN0aW9uLmF0dGFjaFRvKHRoaXMpfSkpfWludGVyYWN0aW9uU3RhcnQodCl7dGhpcy5vblN0YXJ0PXR9aW50ZXJhY3Rpb25FbmQodCl7dGhpcy5vbkVuZD10fWRyYWdJbnRlcmFjdGlvbigpe3JldHVybiB0aGlzLl9kcmFnSW50ZXJhY3Rpb259c2V0dXBDYWxsYmFja3MoKXtsZXQgdD0hMTt0aGlzLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnU3RhcnQoKHQ9Pnt0aGlzLmJvdW5kcyh7dG9wTGVmdDp0LGJvdHRvbVJpZ2h0OnR9KSx0aGlzLm9uU3RhcnQoKX0pKSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnKCgoZSxuKT0+e3RoaXMuYm91bmRzKHt0b3BMZWZ0OmUsYm90dG9tUmlnaHQ6bn0pLHRoaXMuYm94VmlzaWJsZSghMCksdD0hMH0pKSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnRW5kKCgoZSxuKT0+e3RoaXMuYm94VmlzaWJsZSghMSksdGhpcy5ib3VuZHMoe3RvcExlZnQ6ZSxib3R0b21SaWdodDpufSksdD90aGlzLnpvb20oKTp0aGlzLm9uRW5kKCksdD0hMX0pKSx0aGlzLl9kb3VibGVDbGlja0ludGVyYWN0aW9uLm9uRG91YmxlQ2xpY2sodGhpcy51bnpvb20uYmluZCh0aGlzKSl9YW5pbWF0aW9uVGltZSh0KXtpZihudWxsPT10KXJldHVybiB0aGlzLl9hbmltYXRpb25UaW1lO2lmKHQ8MCl0aHJvdyBuZXcgRXJyb3IoImFuaW1hdGlvblRpbWUgY2Fubm90IGJlIG5lZ2F0aXZlIik7cmV0dXJuIHRoaXMuX2FuaW1hdGlvblRpbWU9dCx0aGlzfWVhc2UodCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKCJlYXNlIGZ1bmN0aW9uIG11c3QgYmUgYSBmdW5jdGlvbiIpO3JldHVybiAwPT09dCgwKSYmMT09PXQoMSl8fG5fdC5VdGlscy5XaW5kb3cud2FybigiRWFzaW5nIGZ1bmN0aW9uIGRvZXMgbm90IG1haW50YWluIGludmFyaWFudCBmKDApPT0wICYmIGYoMSk9PTEuIEJhZCBiZWhhdmlvciBtYXkgcmVzdWx0LiIpLHRoaXMuZWFzZUZuPXQsdGhpc316b29tKCl7bGV0IHQ9dGhpcy54RXh0ZW50KClbMF0udmFsdWVPZigpLGU9dGhpcy54RXh0ZW50KClbMV0udmFsdWVPZigpLG49dGhpcy55RXh0ZW50KClbMV0udmFsdWVPZigpLGk9dGhpcy55RXh0ZW50KClbMF0udmFsdWVPZigpO3QhPT1lJiZuIT09aSYmdGhpcy5pbnRlcnBvbGF0ZVpvb20odCxlLG4saSl9dW56b29tKCl7bGV0IHQ9dGhpcy54U2NhbGUoKTt0Ll9kb21haW5NaW49bnVsbCx0Ll9kb21haW5NYXg9bnVsbDtsZXQgZT10Ll9nZXRFeHRlbnQoKTt0aGlzLnhTY2FsZSgpLmRvbWFpbihlKSx0aGlzLnVuem9vbU1ldGhvZCgpfWlzWm9vbWluZyh0KXt0aGlzLl9kcmFnSW50ZXJhY3Rpb24uZW5hYmxlZCghdCksdGhpcy5fZG91YmxlQ2xpY2tJbnRlcmFjdGlvbi5lbmFibGVkKCF0KX1pbnRlcnBvbGF0ZVpvb20odCxlLG4saSl7bGV0IHI9dGhpcy54U2NhbGUoKS5kb21haW4oKVswXS52YWx1ZU9mKCksbz10aGlzLnhTY2FsZSgpLmRvbWFpbigpWzFdLnZhbHVlT2YoKSxhPXRoaXMueVNjYWxlKCkuZG9tYWluKClbMF0udmFsdWVPZigpLHM9dGhpcy55U2NhbGUoKS5kb21haW4oKVsxXS52YWx1ZU9mKCksbD10aGlzLmVhc2VGbixjPSh0LGUsbik9PkRkKHQsZSkobChuKSk7dGhpcy5pc1pvb21pbmcoITApO2xldCB1PURhdGUubm93KCksaD0oKT0+e2xldCBsPURhdGUubm93KCksZD0wPT09dGhpcy5fYW5pbWF0aW9uVGltZT8xOk1hdGgubWluKDEsKGwtdSkvdGhpcy5fYW5pbWF0aW9uVGltZSkscD1jKHIsdCxkKSxmPWMobyxlLGQpLG09YyhhLG4sZCksZz1jKHMsaSxkKTt0aGlzLnhTY2FsZSgpLmRvbWFpbihbcCxmXSksdGhpcy55U2NhbGUoKS5kb21haW4oW20sZ10pLGQ8MT9uX3QuVXRpbHMuRE9NLnJlcXVlc3RBbmltYXRpb25GcmFtZVBvbHlmaWxsKGgpOih0aGlzLm9uRW5kKCksdGhpcy5pc1pvb21pbmcoITEpKX07aCgpfX12YXIgVl90LFVfdCxqX3QsR190OyEoZnVuY3Rpb24odCl7dFt0Lk5PTkU9MF09Ik5PTkUiLHRbdC5EUkFHX1pPT01JTkc9MV09IkRSQUdfWk9PTUlORyIsdFt0LlBBTk5JTkc9Ml09IlBBTk5JTkcifSkoVl90fHwoVl90PXt9KSk7Y2xhc3MgV190IGV4dGVuZHMgbl90LkNvbXBvbmVudHMuR3JvdXB7Y29uc3RydWN0b3IodCxlLG4pe3N1cGVyKCksdGhpcy5zdGF0ZT1WX3QuTk9ORSx0aGlzLnBhblN0YXJ0Q2FsbGJhY2s9bmV3IG5fdC5VdGlscy5DYWxsYmFja1NldCx0aGlzLnBhbkVuZENhbGxiYWNrPW5ldyBuX3QuVXRpbHMuQ2FsbGJhY2tTZXQsdGhpcy5wYW5ab29tPW5ldyBuX3QuSW50ZXJhY3Rpb25zLlBhblpvb20odCxlKSx0aGlzLnBhblpvb20uZHJhZ0ludGVyYWN0aW9uKCkubW91c2VGaWx0ZXIoKHQ9PldfdC5pc1BhbktleSh0KSYmMD09PXQuYnV0dG9uKSksdGhpcy5wYW5ab29tLndoZWVsRmlsdGVyKHRoaXMuY2FuU2Nyb2xsWm9vbSksdGhpcy5kcmFnWm9vbUxheWVyPW5ldyBGX3QodCxlLG4pLHRoaXMuZHJhZ1pvb21MYXllci5kcmFnSW50ZXJhY3Rpb24oKS5tb3VzZUZpbHRlcigodD0+IVdfdC5pc1BhbktleSh0KSYmMD09PXQuYnV0dG9uKSksdGhpcy5hcHBlbmQodGhpcy5kcmFnWm9vbUxheWVyKTtjb25zdCBpPXRoaXMub25XaGVlbC5iaW5kKHRoaXMpO3RoaXMub25BbmNob3IoKCgpPT57dGhpcy5fbW91c2VEaXNwYXRjaGVyPW5fdC5EaXNwYXRjaGVycy5Nb3VzZS5nZXREaXNwYXRjaGVyKHRoaXMpLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vbldoZWVsKGkpLHRoaXMucGFuWm9vbS5hdHRhY2hUbyh0aGlzKX0pKSx0aGlzLm9uRGV0YWNoKCgoKT0+e3RoaXMucGFuWm9vbS5kZXRhY2hGcm9tKHRoaXMpLHRoaXMuX21vdXNlRGlzcGF0Y2hlciYmKHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZXaGVlbChpKSx0aGlzLl9tb3VzZURpc3BhdGNoZXI9bnVsbCl9KSksdGhpcy5wYW5ab29tLmRyYWdJbnRlcmFjdGlvbigpLm9uRHJhZ1N0YXJ0KCgoKT0+e3RoaXMuc3RhdGU9PVZfdC5OT05FJiZ0aGlzLnNldFN0YXRlKFZfdC5QQU5OSU5HKX0pKSx0aGlzLnBhblpvb20uZHJhZ0ludGVyYWN0aW9uKCkub25EcmFnRW5kKCgoKT0+e3RoaXMuc3RhdGU9PVZfdC5QQU5OSU5HJiZ0aGlzLnNldFN0YXRlKFZfdC5OT05FKX0pKSx0aGlzLmRyYWdab29tTGF5ZXIuZHJhZ0ludGVyYWN0aW9uKCkub25EcmFnU3RhcnQoKCgpPT57dGhpcy5zdGF0ZT09Vl90Lk5PTkUmJnRoaXMuc2V0U3RhdGUoVl90LkRSQUdfWk9PTUlORyl9KSksdGhpcy5kcmFnWm9vbUxheWVyLmRyYWdJbnRlcmFjdGlvbigpLm9uRHJhZ0VuZCgoKCk9Pnt0aGlzLnN0YXRlPT1WX3QuRFJBR19aT09NSU5HJiZ0aGlzLnNldFN0YXRlKFZfdC5OT05FKX0pKX1vbldoZWVsKHQsZSl7aWYodGhpcy5jYW5TY3JvbGxab29tKGUpKXJldHVybjtjb25zdCBuPXRoaXMuZWxlbWVudCgpO2lmKCFuLnNlbGVjdCgiLmhlbHAiKS5lbXB0eSgpKXJldHVybjtjb25zdCBpPW4uYXBwZW5kKCJkaXYiKS5jbGFzc2VkKCJoZWxwIiwhMCk7aS5hcHBlbmQoInNwYW4iKS50ZXh0KCJBbHQgKyBTY3JvbGwgdG8gWm9vbSIpLGkub24oImFuaW1hdGlvbmVuZCIsKCgpPT57aS5yZW1vdmUoKX0pKX1zdGF0aWMgaXNQYW5LZXkodCl7cmV0dXJuIEJvb2xlYW4odC5hbHRLZXkpfHxCb29sZWFuKHQuc2hpZnRLZXkpfWNhblNjcm9sbFpvb20odCl7cmV0dXJuIHQuYWx0S2V5fXNldFN0YXRlKHQpe2lmKHRoaXMuc3RhdGU9PXQpcmV0dXJuO2NvbnN0IGU9dGhpcy5zdGF0ZTt0aGlzLnN0YXRlPXQsdGhpcy5yb290KCkucmVtb3ZlQ2xhc3ModGhpcy5zdGF0ZUNsYXNzTmFtZShlKSksdGhpcy5yb290KCkuYWRkQ2xhc3ModGhpcy5zdGF0ZUNsYXNzTmFtZSh0KSksZT09Vl90LlBBTk5JTkcmJnRoaXMucGFuRW5kQ2FsbGJhY2suY2FsbENhbGxiYWNrcygpLHQ9PVZfdC5QQU5OSU5HJiZ0aGlzLnBhblN0YXJ0Q2FsbGJhY2suY2FsbENhbGxiYWNrcygpfXN0YXRlQ2xhc3NOYW1lKHQpe3N3aXRjaCh0KXtjYXNlIFZfdC5QQU5OSU5HOnJldHVybiJwYW5uaW5nIjtjYXNlIFZfdC5EUkFHX1pPT01JTkc6cmV0dXJuImRyYWctem9vbWluZyI7Y2FzZSBWX3QuTk9ORTpkZWZhdWx0OnJldHVybiIifX1vblBhblN0YXJ0KHQpe3RoaXMucGFuU3RhcnRDYWxsYmFjay5hZGQodCl9b25QYW5FbmQodCl7dGhpcy5wYW5FbmRDYWxsYmFjay5hZGQodCl9b25TY3JvbGxab29tKHQpe3RoaXMucGFuWm9vbS5vblpvb21FbmQodCl9b25EcmFnWm9vbVN0YXJ0KHQpe3RoaXMuZHJhZ1pvb21MYXllci5pbnRlcmFjdGlvblN0YXJ0KHQpfW9uRHJhZ1pvb21FbmQodCl7dGhpcy5kcmFnWm9vbUxheWVyLmludGVyYWN0aW9uRW5kKHQpfX0hKGZ1bmN0aW9uKHQpe3RbdC5URVhUPTBdPSJURVhUIix0W3QuRE9NPTFdPSJET00ifSkoVV90fHwoVV90PXt9KSksKGZ1bmN0aW9uKHQpe3QuTE9HPSJsb2ciLHQuTElORUFSPSJsaW5lYXIifSkoal90fHwoal90PXt9KSk7Y2xhc3MgcV90e2NvbnN0cnVjdG9yKHQsZSxuLGkscixvLGEscyxsLGMsdSl7dGhpcy5kaXJ0eURhdGFzZXRzPW5ldyBTZXQsdGhpcy5zZXJpZXNOYW1lcz1bXSx0aGlzLm5hbWUyZGF0YXNldHM9e30sdGhpcy5jb2xvclNjYWxlPWksdGhpcy50b29sdGlwPXIsdGhpcy5kYXRhc2V0cz1bXSx0aGlzLl9pZ25vcmVZT3V0bGllcnM9ITEsdGhpcy5sYXN0UG9pbnRzRGF0YXNldD1uZXcgbl90LkRhdGFzZXQsdGhpcy5uYW5EYXRhc2V0PW5ldyBuX3QuRGF0YXNldCx0aGlzLnlWYWx1ZUFjY2Vzc29yPWUsdGhpcy5zeW1ib2xGdW5jdGlvbj1jLHRoaXMuX2RlZmF1bHRYUmFuZ2U9cyx0aGlzLl9kZWZhdWx0WVJhbmdlPWwsdGhpcy50b29sdGlwQ29sdW1ucz1vLHRoaXMuYnVpbGRDaGFydCh0LGUsbixhLHUpfWJ1aWxkQ2hhcnQodCxlLG4saSxyKXt0aGlzLmRlc3Ryb3koKTtjb25zdCBvPXQoKTt0aGlzLnhBY2Nlc3Nvcj1vLmFjY2Vzc29yLHRoaXMueFNjYWxlPW8uc2NhbGUsdGhpcy54QXhpcz1vLmF4aXMsdGhpcy54QXhpcy5tYXJnaW4oMSkudGlja0xhYmVsUGFkZGluZygzKSxyJiZ0aGlzLnhBeGlzLmZvcm1hdHRlcihyKSx0aGlzLnlTY2FsZT1xX3QuZ2V0WVNjYWxlRnJvbVR5cGUobiksdGhpcy55U2NhbGUuc2V0VmFsdWVQcm92aWRlckZvckRvbWFpbigoKCk9PnRoaXMuZ2V0VmFsdWVzRm9yWUF4aXNEb21haW5Db21wdXRlKCkpKSx0aGlzLnlBeGlzPW5ldyBuX3QuQXhlcy5OdW1lcmljKHRoaXMueVNjYWxlLCJsZWZ0Iik7bGV0IGE9b190KDMpO3RoaXMueUF4aXMubWFyZ2luKDApLnRpY2tMYWJlbFBhZGRpbmcoNSkuZm9ybWF0dGVyKGEpLHRoaXMueUF4aXMudXNlc1RleHRXaWR0aEFwcHJveGltYXRpb24oITApLHRoaXMuZmlsbEFyZWE9aTtjb25zdCBzPW5ldyBXX3QodGhpcy54U2NhbGUsdGhpcy55U2NhbGUsKCgpPT50aGlzLnJlc2V0RG9tYWluKCkpKTt0aGlzLnRvb2x0aXBJbnRlcmFjdGlvbj10aGlzLmNyZWF0ZVRvb2x0aXBJbnRlcmFjdGlvbihzKSx0aGlzLnRvb2x0aXBQb2ludHNDb21wb25lbnQ9bmV3IG5fdC5Db21wb25lbnQ7Y29uc3QgbD10aGlzLmJ1aWxkUGxvdCh0aGlzLnhTY2FsZSx0aGlzLnlTY2FsZSxpKTt0aGlzLmdyaWRsaW5lcz1uZXcgbl90LkNvbXBvbmVudHMuR3JpZGxpbmVzKHRoaXMueFNjYWxlLHRoaXMueVNjYWxlKTtsZXQgYz1udWxsO24hPT1qX3QuTE9HJiYoYz1uZXcgbl90LkNvbXBvbmVudHMuR3VpZGVMaW5lTGF5ZXIoImhvcml6b250YWwiKSxjLnNjYWxlKHRoaXMueVNjYWxlKS52YWx1ZSgwKSk7bGV0IHU9bmV3IG5fdC5Db21wb25lbnRzLkd1aWRlTGluZUxheWVyKCJ2ZXJ0aWNhbCIpO3Uuc2NhbGUodGhpcy54U2NhbGUpLnZhbHVlKDApLHRoaXMuY2VudGVyPW5ldyBuX3QuQ29tcG9uZW50cy5Hcm91cChbdGhpcy5ncmlkbGluZXMsYyx1LGwsdGhpcy50b29sdGlwUG9pbnRzQ29tcG9uZW50LHNdKSx0aGlzLmNlbnRlci5hZGRDbGFzcygibWFpbiIpLHRoaXMub3V0ZXI9bmV3IG5fdC5Db21wb25lbnRzLlRhYmxlKFtbdGhpcy55QXhpcyx0aGlzLmNlbnRlcl0sW251bGwsdGhpcy54QXhpc11dKX1idWlsZFBsb3QodCxlLG4pe24mJih0aGlzLm1hcmdpbkFyZWFQbG90PW5ldyBuX3QuUGxvdHMuQXJlYSx0aGlzLm1hcmdpbkFyZWFQbG90LngodGhpcy54QWNjZXNzb3IsdCksdGhpcy5tYXJnaW5BcmVhUGxvdC55KG4uaGlnaGVyQWNjZXNzb3IsZSksdGhpcy5tYXJnaW5BcmVhUGxvdC55MChuLmxvd2VyQWNjZXNzb3IpLHRoaXMubWFyZ2luQXJlYVBsb3QuYXR0cigiZmlsbCIsKCh0LGUsbik9PnRoaXMuY29sb3JTY2FsZS5zY2FsZShuLm1ldGFkYXRhKCkubmFtZSkpKSx0aGlzLm1hcmdpbkFyZWFQbG90LmF0dHIoImZpbGwtb3BhY2l0eSIsLjMpLHRoaXMubWFyZ2luQXJlYVBsb3QuYXR0cigic3Ryb2tlLXdpZHRoIiwwKSksdGhpcy5zbW9vdGhlZEFjY2Vzc29yPXQ9PnQuc21vb3RoZWQ7bGV0IGk9bmV3IG5fdC5QbG90cy5MaW5lO2kueCh0aGlzLnhBY2Nlc3Nvcix0KSxpLnkodGhpcy55VmFsdWVBY2Nlc3NvcixlKSxpLmF0dHIoInN0cm9rZSIsKCh0LGUsbik9PnRoaXMuY29sb3JTY2FsZS5zY2FsZShuLm1ldGFkYXRhKCkubmFtZSkpKSx0aGlzLmxpbmVQbG90PWksdGhpcy5zZXR1cFRvb2x0aXBzKGkpO2xldCByPW5ldyBuX3QuUGxvdHMuTGluZTtpZihyLngodGhpcy54QWNjZXNzb3IsdCksci55KHRoaXMuc21vb3RoZWRBY2Nlc3NvcixlKSxyLmF0dHIoInN0cm9rZSIsKCh0LGUsbik9PnRoaXMuY29sb3JTY2FsZS5zY2FsZShuLm1ldGFkYXRhKCkubmFtZSkpKSx0aGlzLnNtb290aExpbmVQbG90PXIsdGhpcy5zeW1ib2xGdW5jdGlvbil7Y29uc3Qgbj1uZXcgbl90LlBsb3RzLlNjYXR0ZXI7bi54KHRoaXMueEFjY2Vzc29yLHQpLG4ueSh0aGlzLnlWYWx1ZUFjY2Vzc29yLGUpLG4uYXR0cigiZmlsbCIsKCh0LGUsbik9PnRoaXMuY29sb3JTY2FsZS5zY2FsZShuLm1ldGFkYXRhKCkubmFtZSkpKSxuLmF0dHIoIm9wYWNpdHkiLDEpLG4uc2l6ZSg4KSxuLnN5bWJvbCgoKHQsZSxuKT0+dGhpcy5zeW1ib2xGdW5jdGlvbihuLm1ldGFkYXRhKCkubmFtZSkpKSx0aGlzLm1hcmtlcnNTY2F0dGVyUGxvdD1ufWxldCBvPW5ldyBuX3QuUGxvdHMuU2NhdHRlcjtvLngodGhpcy54QWNjZXNzb3IsdCksby55KHRoaXMueVZhbHVlQWNjZXNzb3IsZSksby5hdHRyKCJmaWxsIiwodD0+dGhpcy5jb2xvclNjYWxlLnNjYWxlKHQubmFtZSkpKSxvLmF0dHIoIm9wYWNpdHkiLDEpLG8uc2l6ZSg4KSxvLmRhdGFzZXRzKFt0aGlzLmxhc3RQb2ludHNEYXRhc2V0XSksdGhpcy5zY2F0dGVyUGxvdD1vO2xldCBhPW5ldyBuX3QuUGxvdHMuU2NhdHRlcjthLngodGhpcy54QWNjZXNzb3IsdCksYS55KCh0PT50LmRpc3BsYXlZKSxlKSxhLmF0dHIoImZpbGwiLCh0PT50aGlzLmNvbG9yU2NhbGUuc2NhbGUodC5uYW1lKSkpLGEuYXR0cigib3BhY2l0eSIsMSksYS5zaXplKDEyKSxhLmRhdGFzZXRzKFt0aGlzLm5hbkRhdGFzZXRdKSxhLnN5bWJvbChuX3QuU3ltYm9sRmFjdG9yaWVzLnRyaWFuZ2xlKSx0aGlzLm5hbkRpc3BsYXk9YTtjb25zdCBzPVthLG8scixpXTtyZXR1cm4gdGhpcy5tYXJnaW5BcmVhUGxvdCYmcy5wdXNoKHRoaXMubWFyZ2luQXJlYVBsb3QpLHRoaXMubWFya2Vyc1NjYXR0ZXJQbG90JiZzLnB1c2godGhpcy5tYXJrZXJzU2NhdHRlclBsb3QpLG5ldyBuX3QuQ29tcG9uZW50cy5Hcm91cChzKX1pZ25vcmVZT3V0bGllcnModCl7dCE9PXRoaXMuX2lnbm9yZVlPdXRsaWVycyYmKHRoaXMuX2lnbm9yZVlPdXRsaWVycz10LHRoaXMudXBkYXRlU3BlY2lhbERhdGFzZXRzKCksdGhpcy55U2NhbGUuaWdub3JlT3V0bGllcih0KSx0aGlzLnJlc2V0WURvbWFpbigpKX1nZXRWYWx1ZXNGb3JZQXhpc0RvbWFpbkNvbXB1dGUoKXtjb25zdCB0PXRoaXMuZ2V0QWNjZXNzb3JzRm9yQ29tcHV0aW5nWVJhbmdlKCk7cmV0dXJuIHdlLmZsYXR0ZW5EZWVwKHRoaXMuZGF0YXNldHMubWFwKChlPT50Lm1hcCgodD0+ZS5kYXRhKCkubWFwKChuPT50KG4sLTEsZSkpKSkpKSkpLmZpbHRlcihpc0Zpbml0ZSl9dXBkYXRlU3BlY2lhbERhdGFzZXRzKCl7Y29uc3QgdD10aGlzLmdldFlBeGlzQWNjZXNzb3IoKTtsZXQgZT10aGlzLmRhdGFzZXRzLm1hcCgoZT0+e2xldCBuPW51bGwsaT1lLmRhdGEoKS5maWx0ZXIoKG49PiFpc05hTih0KG4sLTEsZSkpKSk7cmV0dXJuIGkubGVuZ3RoPjAmJihuPWlbaS5sZW5ndGgtMV0sbi5uYW1lPWUubWV0YWRhdGEoKS5uYW1lLG4ucmVsYXRpdmU9Y190KG4sMCxlKSksbn0pKS5maWx0ZXIoKHQ9Pm51bGwhPXQpKTt0aGlzLmxhc3RQb2ludHNEYXRhc2V0LmRhdGEoZSksdGhpcy5tYXJrZXJzU2NhdHRlclBsb3QmJnRoaXMubWFya2Vyc1NjYXR0ZXJQbG90LmRhdGFzZXRzKHRoaXMuZGF0YXNldHMubWFwKHRoaXMuY3JlYXRlU2FtcGxlZERhdGFzZXRGb3JNYXJrZXJzKSk7bGV0IG49d2UuZmxhdHRlbih0aGlzLmRhdGFzZXRzLm1hcCgoZT0+e2xldCBuPW51bGwsaT1lLmRhdGEoKSxyPTA7Zm9yKDtyPGkubGVuZ3RoJiZudWxsPT1uOylpc05hTih0KGlbcl0sLTEsZSkpfHwobj10KGlbcl0sLTEsZSkpLHIrKztudWxsPT1uJiYobj0wKTtsZXQgbz1bXTtmb3Iocj0wO3I8aS5sZW5ndGg7cisrKWlzTmFOKHQoaVtyXSwtMSxlKSk/KGlbcl0ubmFtZT1lLm1ldGFkYXRhKCkubmFtZSxpW3JdLmRpc3BsYXlZPW4saVtyXS5yZWxhdGl2ZT1jX3QoaVtyXSwwLGUpLG8ucHVzaChpW3JdKSk6bj10KGlbcl0sLTEsZSk7cmV0dXJuIG99KSkpO3RoaXMubmFuRGF0YXNldC5kYXRhKG4pfXJlc2V0RG9tYWluKCl7dGhpcy5yZXNldFhEb21haW4oKSx0aGlzLnJlc2V0WURvbWFpbigpfXJlc2V0WERvbWFpbigpe2xldCB0O2lmKG51bGwhPXRoaXMuX2RlZmF1bHRYUmFuZ2UpdD10aGlzLl9kZWZhdWx0WFJhbmdlO2Vsc2V7Y29uc3QgZT10aGlzLnhTY2FsZTtlLl9kb21haW5NaW49bnVsbCxlLl9kb21haW5NYXg9bnVsbCx0PWUuX2dldEV4dGVudCgpfXRoaXMueFNjYWxlLmRvbWFpbih0KX1yZXNldFlEb21haW4oKXtudWxsIT10aGlzLl9kZWZhdWx0WVJhbmdlP3RoaXMueVNjYWxlLmRvbWFpbih0aGlzLl9kZWZhdWx0WVJhbmdlKToodGhpcy55U2NhbGUuYXV0b0RvbWFpbigpLHRoaXMueVNjYWxlLmRvbWFpbih0aGlzLnlTY2FsZS5kb21haW4oKSkpfWdldEFjY2Vzc29yc0ZvckNvbXB1dGluZ1lSYW5nZSgpe2NvbnN0IHQ9W3RoaXMuZ2V0WUF4aXNBY2Nlc3NvcigpXTtyZXR1cm4gdGhpcy5maWxsQXJlYSYmdC5wdXNoKHRoaXMuZmlsbEFyZWEubG93ZXJBY2Nlc3Nvcix0aGlzLmZpbGxBcmVhLmhpZ2hlckFjY2Vzc29yKSx0fWdldFlBeGlzQWNjZXNzb3IoKXtyZXR1cm4gdGhpcy5zbW9vdGhpbmdFbmFibGVkP3RoaXMuc21vb3RoZWRBY2Nlc3Nvcjp0aGlzLnlWYWx1ZUFjY2Vzc29yfWNyZWF0ZVRvb2x0aXBJbnRlcmFjdGlvbih0KXtjb25zdCBlPW5ldyB5X3Qsbj0oKT0+e2UuZW5hYmxlZCghMSksdGhpcy5oaWRlVG9vbHRpcHMoKX0saT0oKT0+ZS5lbmFibGVkKCEwKTtyZXR1cm4gdC5vblBhblN0YXJ0KG4pLHQub25EcmFnWm9vbVN0YXJ0KG4pLHQub25QYW5FbmQoaSksdC5vbkRyYWdab29tRW5kKGkpLHQub25TY3JvbGxab29tKCgoKT0+dGhpcy51cGRhdGVUb29sdGlwQ29udGVudCh0aGlzLl9sYXN0TW91c2VQb3NpdGlvbikpKSxlLm9uUG9pbnRlck1vdmUoKHQ9Pnt0aGlzLl9sYXN0TW91c2VQb3NpdGlvbj10LHRoaXMudXBkYXRlVG9vbHRpcENvbnRlbnQodCl9KSksZS5vblBvaW50ZXJFeGl0KCgoKT0+dGhpcy5oaWRlVG9vbHRpcHMoKSkpLGV9dXBkYXRlVG9vbHRpcENvbnRlbnQodCl7dGhpcy5saW5lUGxvdCYmKHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl90b29sdGlwVXBkYXRlQW5pbWF0aW9uRnJhbWUpLHRoaXMuX3Rvb2x0aXBVcGRhdGVBbmltYXRpb25GcmFtZT13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgoKT0+e2xldCBlPXt4OnQueCx5OnQueSxkYXR1bTpudWxsLGRhdGFzZXQ6bnVsbH0sbj10aGlzLmdyaWRsaW5lcy5jb250ZW50KCkubm9kZSgpLmdldEJCb3goKSxpPXRoaXMubGluZVBsb3QuZGF0YXNldHMoKS5tYXAoKHQ9PnRoaXMuZmluZENsb3Nlc3RQb2ludChlLHQpKSkuZmlsdGVyKEJvb2xlYW4pLHI9bl90LlV0aWxzLkRPTS5pbnRlcnNlY3RzQkJveCxvPWkuZmlsdGVyKCh0PT5yKHQueCx0Lnksbil8fGlzTmFOKHRoaXMueVZhbHVlQWNjZXNzb3IodC5kYXR1bSwwLHQuZGF0YXNldCkpKSksYT1vLmZpbHRlcigodD0+IWlzTmFOKHRoaXMueVZhbHVlQWNjZXNzb3IodC5kYXR1bSwwLHQuZGF0YXNldCkpKSk7aWYoMCE9PWkubGVuZ3RoKXt0aGlzLnNjYXR0ZXJQbG90LmF0dHIoImRpc3BsYXkiLCJub25lIik7Y29uc3QgdD10aGlzLnRvb2x0aXBQb2ludHNDb21wb25lbnQuY29udGVudCgpLnNlbGVjdEFsbCgiLnBvaW50IikuZGF0YShhLCh0PT50LmRhdGFzZXQubWV0YWRhdGEoKS5uYW1lKSk7dC5lbnRlcigpLmFwcGVuZCgiY2lyY2xlIikuY2xhc3NlZCgicG9pbnQiLCEwKSx0LmF0dHIoInIiLDQpLmF0dHIoImN4IiwodD0+dC54KSkuYXR0cigiY3kiLCh0PT50LnkpKS5zdHlsZSgic3Ryb2tlIiwibm9uZSIpLmF0dHIoImZpbGwiLCh0PT50aGlzLmNvbG9yU2NhbGUuc2NhbGUodC5kYXRhc2V0Lm1ldGFkYXRhKCkubmFtZSkpKSx0LmV4aXQoKS5yZW1vdmUoKSx0aGlzLmRyYXdUb29sdGlwcyhvLGUsdGhpcy50b29sdGlwQ29sdW1ucyl9ZWxzZSB0aGlzLmhpZGVUb29sdGlwcygpfSkpKX1oaWRlVG9vbHRpcHMoKXt3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fdG9vbHRpcFVwZGF0ZUFuaW1hdGlvbkZyYW1lKSx0aGlzLnRvb2x0aXAuaGlkZSgpLHRoaXMuc2NhdHRlclBsb3QuYXR0cigiZGlzcGxheSIsImJsb2NrIiksdGhpcy50b29sdGlwUG9pbnRzQ29tcG9uZW50LmNvbnRlbnQoKS5zZWxlY3RBbGwoIi5wb2ludCIpLnJlbW92ZSgpfXNldHVwVG9vbHRpcHModCl7dC5vbkRldGFjaCgoKCk9Pnt0aGlzLnRvb2x0aXBJbnRlcmFjdGlvbi5kZXRhY2hGcm9tKHQpLHRoaXMudG9vbHRpcEludGVyYWN0aW9uLmVuYWJsZWQoITEpfSkpLHQub25BbmNob3IoKCgpPT57dGhpcy50b29sdGlwSW50ZXJhY3Rpb24uYXR0YWNoVG8odCksdGhpcy50b29sdGlwSW50ZXJhY3Rpb24uZW5hYmxlZCghMCl9KSl9ZHJhd1Rvb2x0aXBzKHQsZSxuKXtpZighdC5sZW5ndGgpcmV0dXJuIHZvaWQgdGhpcy50b29sdGlwLmhpZGUoKTtjb25zdHtjb2xvclNjYWxlOml9PXRoaXM7bj1be3RpdGxlOiIiLHN0YXRpYzohMSxldmFsVHlwZTpVX3QuRE9NLGV2YWx1YXRlKHQpe3JldHVybiB3dSh0aGlzKS5zZWxlY3QoInNwYW4iKS5zdHlsZSgiYmFja2dyb3VuZC1jb2xvciIsKCgpPT5pLnNjYWxlKHQuZGF0YXNldC5tZXRhZGF0YSgpLm5hbWUpKSksIiJ9LGVudGVyKHQpe3d1KHRoaXMpLmFwcGVuZCgic3BhbiIpLmNsYXNzZWQoInN3YXRjaCIsITApLnN0eWxlKCJiYWNrZ3JvdW5kLWNvbG9yIiwoKCk9Pmkuc2NhbGUodC5kYXRhc2V0Lm1ldGFkYXRhKCkubmFtZSkpKX19LC4uLm5dO2NvbnN0IHI9dD0+TWF0aC5wb3codC54LWUueCwyKStNYXRoLnBvdyh0LnktZS55LDIpLG89d2UubWluKHQubWFwKHIpKSxhPXRoaXMuc21vb3RoaW5nRW5hYmxlZD90aGlzLnNtb290aGVkQWNjZXNzb3I6dGhpcy55VmFsdWVBY2Nlc3Nvcjt0PSJhc2NlbmRpbmciPT09dGhpcy50b29sdGlwU29ydGluZ01ldGhvZD93ZS5zb3J0QnkodCwodD0+YSh0LmRhdHVtLC0xLHQuZGF0YXNldCkpKToiZGVzY2VuZGluZyI9PT10aGlzLnRvb2x0aXBTb3J0aW5nTWV0aG9kP3dlLnNvcnRCeSh0LCh0PT5hKHQuZGF0dW0sLTEsdC5kYXRhc2V0KSkpLnJldmVyc2UoKToibmVhcmVzdCI9PT10aGlzLnRvb2x0aXBTb3J0aW5nTWV0aG9kP3dlLnNvcnRCeSh0LHIpOnQuc2xpY2UoMCkucmV2ZXJzZSgpO2NvbnN0IHM9dGhpcyxsPXd1KHRoaXMudG9vbHRpcC5jb250ZW50KCkpLnNlbGVjdCgidGFibGUiKSxjPWwuc2VsZWN0KCJ0aGVhZCIpLnNlbGVjdEFsbCgidGgiKS5kYXRhKG4sKCh0LGUsbik9PnQudGl0bGUpKTtjLmVudGVyKCkuYXBwZW5kKCJ0aCIpLnRleHQoKHQ9PnQudGl0bGUpKS5ub2RlcygpLGMuZXhpdCgpLnJlbW92ZSgpO2NvbnN0IHU9bC5zZWxlY3QoInRib2R5Iikuc2VsZWN0QWxsKCJ0ciIpLmRhdGEodCwoKHQsZSxuKT0+dC5kYXRhc2V0Lm1ldGFkYXRhKCkubmFtZSkpO3UuY2xhc3NlZCgiZGlzdGFudCIsKHQ9PntsZXQgbj10LmRhdGFzZXQuZGF0YSgpWzBdLGk9d2UubGFzdCh0LmRhdGFzZXQuZGF0YSgpKSxyPXRoaXMueFNjYWxlLnNjYWxlKHRoaXMueEFjY2Vzc29yKG4sMCx0LmRhdGFzZXQpKSxvPXRoaXMueFNjYWxlLnNjYWxlKHRoaXMueEFjY2Vzc29yKGksMCx0LmRhdGFzZXQpKSxhPXRoaXMuc21vb3RoaW5nRW5hYmxlZD90LmRhdHVtLnNtb290aGVkOnRoaXMueVZhbHVlQWNjZXNzb3IodC5kYXR1bSwwLHQuZGF0YXNldCk7cmV0dXJuIGUueDxyfHxlLng+b3x8aXNOYU4oYSl9KSkuY2xhc3NlZCgiY2xvc2VzdCIsKHQ9PnIodCk9PT1vKSkuZWFjaCgoZnVuY3Rpb24odCl7cy5kcmF3VG9vbHRpcFJvdyh0aGlzLG4sdCl9KSkub3JkZXIoKSx1LmV4aXQoKS5yZW1vdmUoKSx1LmVudGVyKCkuYXBwZW5kKCJ0ciIpLmVhY2goKGZ1bmN0aW9uKHQpe3MuZHJhd1Rvb2x0aXBSb3codGhpcyxuLHQpfSkpLm5vZGVzKCksdGhpcy50b29sdGlwLnVwZGF0ZUFuZFBvc2l0aW9uKHRoaXMudGFyZ2V0U1ZHLm5vZGUoKSl9ZHJhd1Rvb2x0aXBSb3codCxlLG4pe2NvbnN0IGk9dGhpcyxyPXd1KHQpLnNlbGVjdEFsbCgidGQiKS5kYXRhKGUpO3IuZWFjaCgoZnVuY3Rpb24odCl7dC5zdGF0aWN8fGkuZHJhd1Rvb2x0aXBDb2x1bW4uY2FsbChpLHRoaXMsdCxuKX0pKSxyLmV4aXQoKS5yZW1vdmUoKSxyLmVudGVyKCkuYXBwZW5kKCJ0ZCIpLmVhY2goKGZ1bmN0aW9uKHQpeyJlbnRlciJpbiB0JiZ0LmVudGVyJiZ0LmVudGVyLmNhbGwodGhpcyxuKSxpLmRyYXdUb29sdGlwQ29sdW1uLmNhbGwoaSx0aGlzLHQsbil9KSl9ZHJhd1Rvb2x0aXBDb2x1bW4odCxlLG4pe2NvbnN0e3Ntb290aGluZ0VuYWJsZWQ6aX09dGhpczsiZXZhbFR5cGUiaW4gZSYmZS5ldmFsVHlwZT09VV90LkRPTT9lLmV2YWx1YXRlLmNhbGwodCxuLHtzbW9vdGhpbmdFbmFibGVkOml9KTp3dSh0KS50ZXh0KGUuZXZhbHVhdGUuY2FsbCh0LG4se3Ntb290aGluZ0VuYWJsZWQ6aX0pKX1maW5kQ2xvc2VzdFBvaW50KHQsZSl7Y29uc3Qgbj1lLmRhdGEoKS5tYXAoKCh0LG4pPT50aGlzLnhTY2FsZS5zY2FsZSh0aGlzLnhBY2Nlc3Nvcih0LG4sZSkpKSk7bGV0IGk9d2Uuc29ydGVkSW5kZXgobix0LngpO2lmKDA9PW4ubGVuZ3RoKXJldHVybiBudWxsO2k9PT1uLmxlbmd0aD9pLT0xOjAhPT1pJiYoaT1NYXRoLmFicyhuW2ktMV0tdC54KTxNYXRoLmFicyhuW2ldLXQueCk/aS0xOmkpO2NvbnN0IHI9ZS5kYXRhKClbaV0sbz10aGlzLnNtb290aGluZ0VuYWJsZWQ/dGhpcy5zbW9vdGhlZEFjY2Vzc29yKHIsaSxlKTp0aGlzLnlWYWx1ZUFjY2Vzc29yKHIsaSxlKTtyZXR1cm57eDpuW2ldLHk6dGhpcy55U2NhbGUuc2NhbGUobyksZGF0dW06cixkYXRhc2V0OmV9fXJlc21vb3RoRGF0YXNldCh0KXtsZXQgZT10LmRhdGEoKTtjb25zdCBuPXRoaXMuc21vb3RoaW5nV2VpZ2h0O2xldCBpPWUubGVuZ3RoPjA/MDpOYU4scj0wO2NvbnN0IG89ZS5tYXAoKChlLG4pPT50aGlzLnlWYWx1ZUFjY2Vzc29yKGUsbix0KSkpLGE9by5ldmVyeSgodD0+dD09b1swXSkpO2UuZm9yRWFjaCgoKHQsZSk9Pntjb25zdCBzPW9bZV07aWYoYXx8IU51bWJlci5pc0Zpbml0ZShzKSl0LnNtb290aGVkPXM7ZWxzZXtpPWkqbisoMS1uKSpzLHIrKztsZXQgZT0xOzEhPT1uJiYoZT0xLU1hdGgucG93KG4scikpLHQuc21vb3RoZWQ9aS9lfX0pKX1nZXREYXRhc2V0KHQpe3JldHVybiB2b2lkIDA9PT10aGlzLm5hbWUyZGF0YXNldHNbdF0mJih0aGlzLm5hbWUyZGF0YXNldHNbdF09bmV3IG5fdC5EYXRhc2V0KFtdLHtuYW1lOnQsbWV0YTpudWxsfSkpLHRoaXMubmFtZTJkYXRhc2V0c1t0XX1zdGF0aWMgZ2V0WVNjYWxlRnJvbVR5cGUodCl7aWYodD09PWpfdC5MT0cpcmV0dXJuIG5ldyBIX3Q7aWYodD09PWpfdC5MSU5FQVIpcmV0dXJuIG5ldyBPX3Q7dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgeVNjYWxlIHR5cGUgIit0KX1zZXRWaXNpYmxlU2VyaWVzKHQpe3RoaXMuZGlzYWJsZUNoYW5nZXMoKSwodD10LnNvcnQoKSkucmV2ZXJzZSgpLHRoaXMuc2VyaWVzTmFtZXM9dH1kaXNhYmxlQ2hhbmdlcygpe3RoaXMuZGlydHlEYXRhc2V0cy5zaXplfHwodGhpcy5saW5lUGxvdC5kYXRhc2V0cyhbXSksdGhpcy5zbW9vdGhMaW5lUGxvdCYmdGhpcy5zbW9vdGhMaW5lUGxvdC5kYXRhc2V0cyhbXSksdGhpcy5tYXJnaW5BcmVhUGxvdCYmdGhpcy5tYXJnaW5BcmVhUGxvdC5kYXRhc2V0cyhbXSkpfWNvbW1pdENoYW5nZXMoKXt0aGlzLmRhdGFzZXRzPXRoaXMuc2VyaWVzTmFtZXMubWFwKCh0PT50aGlzLmdldERhdGFzZXQodCkpKSxbLi4udGhpcy5kaXJ0eURhdGFzZXRzXS5mb3JFYWNoKCh0PT57dGhpcy5zbW9vdGhpbmdFbmFibGVkJiZ0aGlzLnJlc21vb3RoRGF0YXNldCh0aGlzLmdldERhdGFzZXQodCkpfSkpLHRoaXMudXBkYXRlU3BlY2lhbERhdGFzZXRzKCksdGhpcy5saW5lUGxvdC5kYXRhc2V0cyh0aGlzLmRhdGFzZXRzKSx0aGlzLnNtb290aGluZ0VuYWJsZWQmJnRoaXMuc21vb3RoTGluZVBsb3QuZGF0YXNldHModGhpcy5kYXRhc2V0cyksdGhpcy5tYXJnaW5BcmVhUGxvdCYmdGhpcy5tYXJnaW5BcmVhUGxvdC5kYXRhc2V0cyh0aGlzLmRhdGFzZXRzKSx0aGlzLm1lYXN1cmVCQm94QW5kTWF5YmVJbnZhbGlkYXRlTGF5b3V0SW5SYWYoKSx0aGlzLmRpcnR5RGF0YXNldHMuY2xlYXIoKX1jcmVhdGVTYW1wbGVkRGF0YXNldEZvck1hcmtlcnModCl7Y29uc3QgZT10LmRhdGEoKTtpZihlLmxlbmd0aDw9MjApcmV0dXJuIHQ7Y29uc3Qgbj1NYXRoLmNlaWwoZS5sZW5ndGgvMjApLGk9bmV3IEFycmF5KE1hdGguZmxvb3IoZS5sZW5ndGgvbikpO2ZvcihsZXQgdD0wLHI9MDt0PGkubGVuZ3RoO3QrKyxyKz1uKWlbdF09ZVtyXTtyZXR1cm4gbmV3IG5fdC5EYXRhc2V0KGksdC5tZXRhZGF0YSgpKX1zZXRTZXJpZXNEYXRhKHQsZSl7dGhpcy5kaXNhYmxlQ2hhbmdlcygpLHRoaXMuZ2V0RGF0YXNldCh0KS5kYXRhKGUpLHRoaXMuZGlydHlEYXRhc2V0cy5hZGQodCl9c2V0U2VyaWVzTWV0YWRhdGEodCxlKXt0aGlzLmRpc2FibGVDaGFuZ2VzKCksdGhpcy5nZXREYXRhc2V0KHQpLm1ldGFkYXRhKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0aGlzLmdldERhdGFzZXQodCkubWV0YWRhdGEoKSkse21ldGE6ZX0pKSx0aGlzLmRpcnR5RGF0YXNldHMuYWRkKHQpfXNtb290aGluZ1VwZGF0ZSh0KXt0aGlzLnNtb290aGluZ1dlaWdodD10LHRoaXMuZGF0YXNldHMuZm9yRWFjaCgodD0+dGhpcy5yZXNtb290aERhdGFzZXQodCkpKSx0aGlzLnNtb290aGluZ0VuYWJsZWR8fCh0aGlzLmxpbmVQbG90LmFkZENsYXNzKCJnaG9zdCIpLHRoaXMuc2NhdHRlclBsb3QueSh0aGlzLnNtb290aGVkQWNjZXNzb3IsdGhpcy55U2NhbGUpLHRoaXMuc21vb3RoaW5nRW5hYmxlZD0hMCx0aGlzLnNtb290aExpbmVQbG90LmRhdGFzZXRzKHRoaXMuZGF0YXNldHMpKSx0aGlzLm1hcmtlcnNTY2F0dGVyUGxvdCYmdGhpcy5tYXJrZXJzU2NhdHRlclBsb3QueSh0aGlzLmdldFlBeGlzQWNjZXNzb3IoKSx0aGlzLnlTY2FsZSksdGhpcy51cGRhdGVTcGVjaWFsRGF0YXNldHMoKX1zbW9vdGhpbmdEaXNhYmxlKCl7dGhpcy5zbW9vdGhpbmdFbmFibGVkJiYodGhpcy5saW5lUGxvdC5yZW1vdmVDbGFzcygiZ2hvc3QiKSx0aGlzLnNjYXR0ZXJQbG90LnkodGhpcy55VmFsdWVBY2Nlc3Nvcix0aGlzLnlTY2FsZSksdGhpcy5zbW9vdGhMaW5lUGxvdC5kYXRhc2V0cyhbXSksdGhpcy5zbW9vdGhpbmdFbmFibGVkPSExLHRoaXMudXBkYXRlU3BlY2lhbERhdGFzZXRzKCkpLHRoaXMubWFya2Vyc1NjYXR0ZXJQbG90JiZ0aGlzLm1hcmtlcnNTY2F0dGVyUGxvdC55KHRoaXMuZ2V0WUF4aXNBY2Nlc3NvcigpLHRoaXMueVNjYWxlKX1zZXRDb2xvclNjYWxlKHQpe3RoaXMuY29sb3JTY2FsZT10fXNldFRvb2x0aXBDb2x1bW5zKHQpe3RoaXMudG9vbHRpcENvbHVtbnM9dH1zZXRUb29sdGlwU29ydGluZ01ldGhvZCh0KXt0aGlzLnRvb2x0aXBTb3J0aW5nTWV0aG9kPXR9cmVuZGVyVG8odCl7dGhpcy50YXJnZXRTVkc9dCx0aGlzLm91dGVyLnJlbmRlclRvKHQpLG51bGwhPXRoaXMuX2RlZmF1bHRYUmFuZ2UmJnRoaXMucmVzZXRYRG9tYWluKCksbnVsbCE9dGhpcy5fZGVmYXVsdFlSYW5nZSYmdGhpcy5yZXNldFlEb21haW4oKSx0aGlzLm1lYXN1cmVCQm94QW5kTWF5YmVJbnZhbGlkYXRlTGF5b3V0SW5SYWYoKX1yZWRyYXcoKXt3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fcmVkcmF3UmFmKSx0aGlzLl9yZWRyYXdSYWY9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKCk9Pnt0aGlzLm1lYXN1cmVCQm94QW5kTWF5YmVJbnZhbGlkYXRlTGF5b3V0KCksdGhpcy5vdXRlci5yZWRyYXcoKX0pKX1tZWFzdXJlQkJveEFuZE1heWJlSW52YWxpZGF0ZUxheW91dEluUmFmKCl7d2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX2ludmFsaWRhdGVMYXlvdXRSYWYpLHRoaXMuX2ludmFsaWRhdGVMYXlvdXRSYWY9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKCk9Pnt0aGlzLm1lYXN1cmVCQm94QW5kTWF5YmVJbnZhbGlkYXRlTGF5b3V0KCl9KSl9bWVhc3VyZUJCb3hBbmRNYXliZUludmFsaWRhdGVMYXlvdXQoKXtpZih0aGlzLl9sYXN0RHJhd0JCb3gpe2NvbnN0e3dpZHRoOnR9PXRoaXMuX2xhc3REcmF3QkJveCx7d2lkdGg6ZX09dGhpcy50YXJnZXRTVkcubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOzA9PXQmJnQ8ZSYmdGhpcy5vdXRlci5pbnZhbGlkYXRlQ2FjaGUoKX10aGlzLl9sYXN0RHJhd0JCb3g9dGhpcy50YXJnZXRTVkcubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpfWRlc3Ryb3koKXt3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fcmVkcmF3UmFmKSx3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5faW52YWxpZGF0ZUxheW91dFJhZiksdGhpcy5vdXRlciYmdGhpcy5vdXRlci5kZXN0cm95KCl9b25BbmNob3IodCl7dGhpcy5vdXRlciYmdGhpcy5vdXRlci5vbkFuY2hvcih0KX1pc0RhdGFGaXRUb0RvbWFpbigpe3JldHVybiB0KHRoaXMueEF4aXMuZ2V0U2NhbGUoKSkmJnQodGhpcy55QXhpcy5nZXRTY2FsZSgpKTtmdW5jdGlvbiB0KHQpe2NvbnN0IGU9dC5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpLG49dC5nZXRUcmFuc2Zvcm1hdGlvbkV4dGVudCgpO3JldHVybiBuWzBdPT09ZVswXSYmblsxXT09PWVbMV19fX0hKGZ1bmN0aW9uKHQpe3QuR1JPVVA9IkciLHQuRElWPSJESVYiLHQuU1ZHPSJTVkciLHQuVEVYVD0iVEVYVCJ9KShHX3R8fChHX3Q9e30pKTtjbGFzcyBZX3QgZXh0ZW5kcyBjbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnVuaXF1ZUlkPTAsdGhpcy5yb290PXR9ZXhwb3J0QXNTdHJpbmcoKXtjb25zdCB0PXRoaXMuY29udmVydCh0aGlzLnJvb3QpO2lmKCF0KXJldHVybiIiO2NvbnN0IGU9dGhpcy5jcmVhdGVSb290U3ZnKCk7cmV0dXJuIGUuYXBwZW5kQ2hpbGQodCksZS5vdXRlckhUTUx9Y3JlYXRlVW5pcXVlSWQodCl7cmV0dXJuYCR7dH1fJHt0aGlzLnVuaXF1ZUlkKyt9YH1nZXRTaXplKCl7cmV0dXJuIHRoaXMucm9vdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKX1jcmVhdGVSb290U3ZnKCl7Y29uc3QgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdmciKSxlPXRoaXMuZ2V0U2l6ZSgpO3JldHVybiB0LnNldEF0dHJpYnV0ZU5TKCJzdmciLCJ2aWV3Qm94IixgMCAwICR7ZS53aWR0aH0gJHtlLmhlaWdodH1gKSx0LnNldEF0dHJpYnV0ZSgieG1sbnMiLCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIpLHR9Y29udmVydCh0KXtsZXQgZT1udWxsO2NvbnN0IG49dC5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpO2lmKHQubm9kZVR5cGUhPU5vZGUuRUxFTUVOVF9OT0RFfHxuIT1HX3QuRElWJiZuIT1HX3QuU1ZHKWU9dC5jbG9uZU5vZGUoKTtlbHNle2U9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChHX3QuR1JPVVApO2NvbnN0IG49d2luZG93LmdldENvbXB1dGVkU3R5bGUodCksaT1wYXJzZUludChuLmxlZnQsMTApLHI9cGFyc2VJbnQobi50b3AsMTApO2lmKGl8fHIpe2NvbnN0IHQ9dGhpcy5jcmVhdGVVbmlxdWVJZCgiY2xpcCIpO2Uuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtpfSwgJHtyfSlgKSxlLnNldEF0dHJpYnV0ZSgiY2xpcC1wYXRoIixgdXJsKCMke3R9KWApO2NvbnN0IG89cGFyc2VJbnQobi53aWR0aCwxMCksYT1wYXJzZUludChuLmhlaWdodCwxMCkscz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJyZWN0Iik7cy5zZXRBdHRyaWJ1dGUoIndpZHRoIixTdHJpbmcobykpLHMuc2V0QXR0cmlidXRlKCJoZWlnaHQiLFN0cmluZyhhKSk7Y29uc3QgbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoInN2ZyIsImNsaXBQYXRoIik7bC5pZD10LGwuYXBwZW5kQ2hpbGQocyksZS5hcHBlbmRDaGlsZChsKX19cmV0dXJuIEFycmF5LmZyb20odC5jaGlsZE5vZGVzKS5tYXAoKHQ9PnRoaXMuY29udmVydCh0KSkpLmZpbHRlcihCb29sZWFuKS5mb3JFYWNoKCh0PT5lLmFwcGVuZENoaWxkKHQpKSksZS5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpPT1HX3QuR1JPVVAmJiFlLmhhc0NoaWxkTm9kZXMoKXx8dGhpcy5zaG91bGRPbWl0Tm9kZSh0KT9udWxsOnRoaXMuc3RyaXBDbGFzcyh0aGlzLnRyYW5zZmVyU3R5bGUodCxlKSl9c3RyaXBDbGFzcyh0KXtyZXR1cm4gdC5ub2RlVHlwZT09Tm9kZS5FTEVNRU5UX05PREUmJnQucmVtb3ZlQXR0cmlidXRlKCJjbGFzcyIpLHR9dHJhbnNmZXJTdHlsZSh0LGUpe2lmKGUubm9kZVR5cGUhPU5vZGUuRUxFTUVOVF9OT0RFKXJldHVybiBlO2NvbnN0IG49ZSxpPWUubm9kZU5hbWUudG9VcHBlckNhc2UoKSxyPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQpO3JldHVybiBpPT1HX3QuVEVYVCYmT2JqZWN0LmFzc2lnbihuLnN0eWxlLHtmb250RmFtaWx5OnIuZm9udEZhbWlseSxmb250U2l6ZTpyLmZvbnRTaXplLGZvbnRXZWlnaHQ6ci5mb250V2VpZ2h0fSksaSE9R190LkdST1VQJiYobi5zZXRBdHRyaWJ1dGUoImZpbGwiLHIuZmlsbCksbi5zZXRBdHRyaWJ1dGUoInN0cm9rZSIsci5zdHJva2UpLG4uc2V0QXR0cmlidXRlKCJzdHJva2Utd2lkdGgiLHIuc3Ryb2tlV2lkdGgpKSwiMSIhPXIub3BhY2l0eSYmbi5zZXRBdHRyaWJ1dGUoIm9wYWNpdHkiLHIub3BhY2l0eSksZX1zaG91bGRPbWl0Tm9kZSh0KXtyZXR1cm4hMX19e3Nob3VsZE9taXROb2RlKHQpe3JldHVybiB0Lm5vZGVUeXBlPT1Ob2RlLkVMRU1FTlRfTk9ERSYmdC5jbGFzc0xpc3QuY29udGFpbnMoInNjYXR0ZXItcGxvdCIpfX10bCh7bW9kdWxlTmFtZToidnotcGFuLXpvb20tc3R5bGUiLHN0eWxlQ29udGVudDoiXG4gICAgLmhlbHAge1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGFuaW1hdGlvbi1kZWxheTogMXM7XG4gICAgICBhbmltYXRpb24tZHVyYXRpb246IDFzO1xuICAgICAgYW5pbWF0aW9uLW5hbWU6IGZhZGUtb3V0O1xuICAgICAgYmFja2dyb3VuZDogcmdiYSgzMCwgMzAsIDMwLCAwLjYpO1xuICAgICAgYm90dG9tOiAwO1xuICAgICAgY29sb3I6ICNmZmY7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICBsZWZ0OiAwO1xuICAgICAgb3BhY2l0eTogMTtcbiAgICAgIHBhZGRpbmc6IDIwcHg7XG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHJpZ2h0OiAwO1xuICAgICAgdG9wOiAwO1xuICAgIH1cblxuICAgIC5oZWxwID4gc3BhbiB7XG4gICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xuICAgIH1cblxuICAgIEBrZXlmcmFtZXMgZmFkZS1vdXQge1xuICAgICAgMCUge1xuICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgfVxuXG4gICAgICAxMDAlIHtcbiAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgIH1cbiAgICB9XG4gICJ9KTtjb25zdCBYX3Q9b190KDQpLCRfdD10PT5pc05hTih0KT8iTmFOIjpYX3QodCksS190PVt7dGl0bGU6Ik5hbWUiLGV2YWx1YXRlOnQ9PnQuZGF0YXNldC5tZXRhZGF0YSgpLm5hbWV9LHt0aXRsZToiU21vb3RoZWQiLGV2YWx1YXRlKHQsZSl7Y29uc3R7c21vb3RoaW5nRW5hYmxlZDpufT1lO3JldHVybiAkX3Qobj90LmRhdHVtLnNtb290aGVkOnQuZGF0dW0uc2NhbGFyKX19LHt0aXRsZToiVmFsdWUiLGV2YWx1YXRlOnQ9PiRfdCh0LmRhdHVtLnNjYWxhcil9LHt0aXRsZToiU3RlcCIsZXZhbHVhdGU6dD0+YV90KHQuZGF0dW0uc3RlcCl9LHt0aXRsZToiVGltZSIsZXZhbHVhdGU6dD0+bF90KHQuZGF0dW0ud2FsbF90aW1lKX0se3RpdGxlOiJSZWxhdGl2ZSIsZXZhbHVhdGU6dD0+dV90KGNfdCh0LmRhdHVtLDAsdC5kYXRhc2V0KSl9XTtsZXQgWl90PWNsYXNzIGV4dGVuZHModHIoeWUpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2xvclNjYWxlPShuZXcgbl90LlNjYWxlcy5Db2xvcikucmFuZ2UodEEuc2xpY2UoMCkpLHRoaXMuc21vb3RoaW5nRW5hYmxlZD0hMSx0aGlzLnNtb290aGluZ1dlaWdodD0uNix0aGlzLnhUeXBlPW51bGwsdGhpcy54Q29tcG9uZW50c0NyZWF0aW9uTWV0aG9kPW51bGwsdGhpcy55VmFsdWVBY2Nlc3Nvcj10PT50LnNjYWxhcix0aGlzLnRvb2x0aXBDb2x1bW5zPUtfdCx0aGlzLnlTY2FsZVR5cGU9al90LkxJTkVBUix0aGlzLmlnbm9yZVlPdXRsaWVycz0hMSx0aGlzLnRvb2x0aXBTb3J0aW5nTWV0aG9kPSJkZWZhdWx0Iix0aGlzLnRvb2x0aXBQb3NpdGlvbj12X3QuQk9UVE9NLHRoaXMuX3Zpc2libGVTZXJpZXNDYWNoZT1bXSx0aGlzLl9zZXJpZXNEYXRhQ2FjaGU9e30sdGhpcy5fc2VyaWVzTWV0YWRhdGFDYWNoZT17fSx0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQ9bnVsbH1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5zY29wZVN1YnRyZWUodGhpcy4kLmNoYXJ0ZGl2LCEwKX1hdHRhY2hlZCgpe2NvbnN0IHQ9e2NhcHR1cmU6ITAscGFzc2l2ZTohMH07dGhpcy5fbGlzdGVuKHRoaXMsIm1vdXNlZG93biIsdGhpcy5fb25Nb3VzZURvd24uYmluZCh0aGlzKSx0KSx0aGlzLl9saXN0ZW4odGhpcywibW91c2V1cCIsdGhpcy5fb25Nb3VzZVVwLmJpbmQodGhpcyksdCksdGhpcy5fbGlzdGVuKHdpbmRvdywia2V5ZG93biIsdGhpcy5fb25LZXlEb3duLmJpbmQodGhpcyksdCksdGhpcy5fbGlzdGVuKHdpbmRvdywia2V5dXAiLHRoaXMuX29uS2V5VXAuYmluZCh0aGlzKSx0KX1kZXRhY2hlZCgpe3RoaXMuY2FuY2VsQXN5bmModGhpcy5fbWFrZUNoYXJ0QXN5bmNDYWxsYmFja0lkKSx0aGlzLl9jaGFydCYmKHRoaXMuX2NoYXJ0LmRlc3Ryb3koKSx0aGlzLl9jaGFydD12b2lkIDApLHRoaXMuX2xpc3RlbmVycyYmKHRoaXMuX2xpc3RlbmVycy5mb3JFYWNoKCgoe25vZGU6dCxldmVudE5hbWU6ZSxmdW5jOm4sb3B0aW9uOml9KT0+e3QucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLG4saSl9KSksdGhpcy5fbGlzdGVuZXJzLmNsZWFyKCkpfV9saXN0ZW4odCxlLG4saT17fSl7dGhpcy5fbGlzdGVuZXJzfHwodGhpcy5fbGlzdGVuZXJzPW5ldyBTZXQpLHRoaXMuX2xpc3RlbmVycy5hZGQoe25vZGU6dCxldmVudE5hbWU6ZSxmdW5jOm4sb3B0aW9uOml9KSx0LmFkZEV2ZW50TGlzdGVuZXIoZSxuLGkpfV9vbktleURvd24odCl7dGhpcy50b2dnbGVDbGFzcygicGFua2V5IixXX3QuaXNQYW5LZXkodCkpfV9vbktleVVwKHQpe3RoaXMudG9nZ2xlQ2xhc3MoInBhbmtleSIsV190LmlzUGFuS2V5KHQpKX1fb25Nb3VzZURvd24odCl7dGhpcy50b2dnbGVDbGFzcygibW91c2Vkb3duIiwhMCl9X29uTW91c2VVcCh0KXt0aGlzLnRvZ2dsZUNsYXNzKCJtb3VzZWRvd24iLCExKX1pc0RhdGFGaXRUb0RvbWFpbigpe3JldHVybiF0aGlzLl9jaGFydHx8dGhpcy5fY2hhcnQuaXNEYXRhRml0VG9Eb21haW4oKX1zZXRWaXNpYmxlU2VyaWVzKHQpe3dlLmlzRXF1YWwodGhpcy5fdmlzaWJsZVNlcmllc0NhY2hlLHQpfHwodGhpcy5fdmlzaWJsZVNlcmllc0NhY2hlPXQpfXNldFNlcmllc0RhdGEodCxlKXt0aGlzLl9zZXJpZXNEYXRhQ2FjaGVbdF09ZSx0aGlzLl9jaGFydCYmdGhpcy5fY2hhcnQuc2V0U2VyaWVzRGF0YSh0LGUpfXNldFNlcmllc01ldGFkYXRhKHQsZSl7dGhpcy5fc2VyaWVzTWV0YWRhdGFDYWNoZVt0XT1lLHRoaXMuX2NoYXJ0JiZ0aGlzLl9jaGFydC5zZXRTZXJpZXNNZXRhZGF0YSh0LGUpfWNvbW1pdENoYW5nZXMoKXt0aGlzLl9jaGFydCYmdGhpcy5fY2hhcnQuY29tbWl0Q2hhbmdlcygpfXJlc2V0RG9tYWluKCl7dGhpcy5fY2hhcnQmJnRoaXMuX2NoYXJ0LnJlc2V0RG9tYWluKCl9cmVkcmF3KCl7dGhpcy5fY2hhcnQmJnRoaXMuX2NoYXJ0LnJlZHJhdygpfV9tYWtlQ2hhcnQoKXtudWxsIT09dGhpcy5fbWFrZUNoYXJ0QXN5bmNDYWxsYmFja0lkJiYodGhpcy5jYW5jZWxBc3luYyh0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQpLHRoaXMuX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZD1udWxsKSx0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQ9dGhpcy5hc3luYygoZnVuY3Rpb24oKXt0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQ9bnVsbDtsZXQgdD10aGlzLnhDb21wb25lbnRzQ3JlYXRpb25NZXRob2Q7aWYodGhpcy54VHlwZXx8dD90aGlzLnhUeXBlJiYodD0oKT0+aF90KHRoaXMueFR5cGUpKTp0PXNfdCx0JiZ0aGlzLnlWYWx1ZUFjY2Vzc29yJiZ0aGlzLnRvb2x0aXBDb2x1bW5zKXt2YXIgZT1uZXcgcV90KHQsdGhpcy55VmFsdWVBY2Nlc3Nvcix0aGlzLnlTY2FsZVR5cGUsdGhpcy5jb2xvclNjYWxlLHRoaXMuJC50b29sdGlwLHRoaXMudG9vbHRpcENvbHVtbnMsdGhpcy5maWxsQXJlYSx0aGlzLmRlZmF1bHRYUmFuZ2UsdGhpcy5kZWZhdWx0WVJhbmdlLHRoaXMuc3ltYm9sRnVuY3Rpb24sdGhpcy54QXhpc0Zvcm1hdHRlciksbj13dSh0aGlzLiQuY2hhcnRkaXYpO2UucmVuZGVyVG8obiksdGhpcy5fY2hhcnQmJnRoaXMuX2NoYXJ0LmRlc3Ryb3koKSx0aGlzLl9jaGFydD1lLHRoaXMuX2NoYXJ0Lm9uQW5jaG9yKCgoKT0+dGhpcy5maXJlKCJjaGFydC1hdHRhY2hlZCIpKSl9fSksMzUwKX1fcmVsb2FkRnJvbUNhY2hlKCl7dGhpcy5fY2hhcnQmJih0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGUuZm9yRWFjaCgodD0+e3RoaXMuX2NoYXJ0LnNldFNlcmllc0RhdGEodCx0aGlzLl9zZXJpZXNEYXRhQ2FjaGVbdF18fFtdKX0pKSx0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGUuZmlsdGVyKCh0PT50aGlzLl9zZXJpZXNNZXRhZGF0YUNhY2hlW3RdKSkuZm9yRWFjaCgodD0+e3RoaXMuX2NoYXJ0LnNldFNlcmllc01ldGFkYXRhKHQsdGhpcy5fc2VyaWVzTWV0YWRhdGFDYWNoZVt0XSl9KSksdGhpcy5fY2hhcnQuc2V0VmlzaWJsZVNlcmllcyh0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGUpLHRoaXMuX2NoYXJ0LmNvbW1pdENoYW5nZXMoKSl9X3Ntb290aGluZ0NoYW5nZWQoKXt0aGlzLl9jaGFydCYmKHRoaXMuc21vb3RoaW5nRW5hYmxlZD90aGlzLl9jaGFydC5zbW9vdGhpbmdVcGRhdGUodGhpcy5zbW9vdGhpbmdXZWlnaHQpOnRoaXMuX2NoYXJ0LnNtb290aGluZ0Rpc2FibGUoKSl9X291dGxpZXJzQ2hhbmdlZCgpe3RoaXMuX2NoYXJ0JiZ0aGlzLl9jaGFydC5pZ25vcmVZT3V0bGllcnModGhpcy5pZ25vcmVZT3V0bGllcnMpfV9jb2xvclNjYWxlQ2hhbmdlZCgpe3RoaXMuX2NoYXJ0JiYodGhpcy5fY2hhcnQuc2V0Q29sb3JTY2FsZSh0aGlzLmNvbG9yU2NhbGUpLHRoaXMuX2NoYXJ0LnJlZHJhdygpKX1fdG9vbHRpcENvbHVtbnNDaGFuZ2VkKCl7dGhpcy5fY2hhcnQmJnRoaXMuX2NoYXJ0LnNldFRvb2x0aXBDb2x1bW5zKHRoaXMudG9vbHRpcENvbHVtbnMpfV90b29sdGlwU29ydGluZ01ldGhvZENoYW5nZWQoKXt0aGlzLl9jaGFydCYmdGhpcy5fY2hhcnQuc2V0VG9vbHRpcFNvcnRpbmdNZXRob2QodGhpcy50b29sdGlwU29ydGluZ01ldGhvZCl9Z2V0RXhwb3J0ZXIoKXtyZXR1cm4gbmV3IFlfdCh0aGlzLiQuY2hhcnRkaXYpfX07Wl90LnRlbXBsYXRlPV9lYAogICAgPGRpdiBpZD0iY2hhcnRkaXYiPjwvZGl2PgogICAgPHZ6LWNoYXJ0LXRvb2x0aXAKICAgICAgaWQ9InRvb2x0aXAiCiAgICAgIHBvc2l0aW9uPSJbW3Rvb2x0aXBQb3NpdGlvbl1dIgogICAgICBjb250ZW50LWNvbXBvbmVudC1uYW1lPSJ2ei1saW5lLWNoYXJ0LXRvb2x0aXAiCiAgICA+PC92ei1jaGFydC10b29sdGlwPgogICAgPHN0eWxlIGluY2x1ZGU9InBsb3R0YWJsZS1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZSBpbmNsdWRlPSJ2ei1wYW4tem9vbS1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KICAgICAgZGl2IHsKICAgICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICB9CgogICAgICAjY2hhcnRkaXYgLm1haW4gewogICAgICAgIGNvbnRhaW46IHN0cmljdDsKICAgICAgICBjdXJzb3I6IGNyb3NzaGFpcjsKICAgICAgfQoKICAgICAgOmhvc3QoLnBhbmtleSkgI2NoYXJ0ZGl2IDpub3QoLmRyYWctem9vbWluZykgLm1haW4gewogICAgICAgIGN1cnNvcjogLXdlYmtpdC1ncmFiOwogICAgICAgIGN1cnNvcjogZ3JhYjsKICAgICAgfQoKICAgICAgOmhvc3QoLm1vdXNlZG93bikgI2NoYXJ0ZGl2IC5wYW5uaW5nIC5tYWluIHsKICAgICAgICBjdXJzb3I6IC13ZWJraXQtZ3JhYmJpbmc7CiAgICAgICAgY3Vyc29yOiBncmFiYmluZzsKICAgICAgfQoKICAgICAgI2NoYXJ0ZGl2IHsKICAgICAgICBjb250YWluOiBzdHJpY3Q7CiAgICAgIH0KCiAgICAgICNjaGFydGRpdiBsaW5lLmd1aWRlLWxpbmUgewogICAgICAgIHN0cm9rZTogIzk5OTsKICAgICAgICBzdHJva2Utd2lkdGg6IDEuNXB4OwogICAgICB9CiAgICAgICNjaGFydGRpdjpob3ZlciAubWFpbiB7CiAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsKICAgICAgfQoKICAgICAgLmdob3N0IHsKICAgICAgICBvcGFjaXR5OiAwLjI7CiAgICAgICAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgICAgIH0KCiAgICAgIC5wbG90dGFibGUgLmF4aXMgdGV4dCB7CiAgICAgICAgZmlsbDogY3VycmVudENvbG9yOwogICAgICB9CgogICAgICAucGxvdHRhYmxlIC5ncmlkbGluZXMgbGluZSB7CiAgICAgICAgc3Ryb2tlOiB2YXIoLS10Yi1zZWNvbmRhcnktdGV4dC1jb2xvcik7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYCx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixuX3QuU2NhbGVzLkNvbG9yKV0sWl90LnByb3RvdHlwZSwiY29sb3JTY2FsZSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLFpfdC5wcm90b3R5cGUsInN5bWJvbEZ1bmN0aW9uIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbixub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFpfdC5wcm90b3R5cGUsInNtb290aGluZ0VuYWJsZWQiLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXJ9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sWl90LnByb3RvdHlwZSwic21vb3RoaW5nV2VpZ2h0Iix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLFpfdC5wcm90b3R5cGUsInhUeXBlIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sWl90LnByb3RvdHlwZSwieENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZCIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLFpfdC5wcm90b3R5cGUsInhBeGlzRm9ybWF0dGVyIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sWl90LnByb3RvdHlwZSwieVZhbHVlQWNjZXNzb3IiLHZvaWQgMCksdChbbyh7dHlwZTpBcnJheX0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLFpfdC5wcm90b3R5cGUsInRvb2x0aXBDb2x1bW5zIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLFpfdC5wcm90b3R5cGUsImZpbGxBcmVhIix2b2lkIDApLHQoW28oe3R5cGU6QXJyYXl9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSxaX3QucHJvdG90eXBlLCJkZWZhdWx0WFJhbmdlIix2b2lkIDApLHQoW28oe3R5cGU6QXJyYXl9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSxaX3QucHJvdG90eXBlLCJkZWZhdWx0WVJhbmdlIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLFpfdC5wcm90b3R5cGUsInlTY2FsZVR5cGUiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxaX3QucHJvdG90eXBlLCJpZ25vcmVZT3V0bGllcnMiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sWl90LnByb3RvdHlwZSwidG9vbHRpcFNvcnRpbmdNZXRob2QiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sWl90LnByb3RvdHlwZSwidG9vbHRpcFBvc2l0aW9uIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLFpfdC5wcm90b3R5cGUsIl9jaGFydCIsdm9pZCAwKSx0KFtvKHt0eXBlOkFycmF5fSksZSgiZGVzaWduOnR5cGUiLEFycmF5KV0sWl90LnByb3RvdHlwZSwiX3Zpc2libGVTZXJpZXNDYWNoZSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxaX3QucHJvdG90eXBlLCJfc2VyaWVzRGF0YUNhY2hlIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLFpfdC5wcm90b3R5cGUsIl9zZXJpZXNNZXRhZGF0YUNhY2hlIix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLFpfdC5wcm90b3R5cGUsIl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQiLHZvaWQgMCksdChbYSgieENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZCIsInhUeXBlIiwieVZhbHVlQWNjZXNzb3IiLCJ5U2NhbGVUeXBlIiwiaXNBdHRhY2hlZCIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sWl90LnByb3RvdHlwZSwiX21ha2VDaGFydCIsbnVsbCksdChbYSgiX2NoYXJ0IiwiX3Zpc2libGVTZXJpZXNDYWNoZSIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sWl90LnByb3RvdHlwZSwiX3JlbG9hZEZyb21DYWNoZSIsbnVsbCksdChbYSgic21vb3RoaW5nRW5hYmxlZCIsInNtb290aGluZ1dlaWdodCIsIl9jaGFydCIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sWl90LnByb3RvdHlwZSwiX3Ntb290aGluZ0NoYW5nZWQiLG51bGwpLHQoW2EoImlnbm9yZVlPdXRsaWVycyIsIl9jaGFydCIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sWl90LnByb3RvdHlwZSwiX291dGxpZXJzQ2hhbmdlZCIsbnVsbCksdChbYSgiY29sb3JTY2FsZSIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sWl90LnByb3RvdHlwZSwiX2NvbG9yU2NhbGVDaGFuZ2VkIixudWxsKSx0KFthKCJ0b29sdGlwQ29sdW1ucyIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sWl90LnByb3RvdHlwZSwiX3Rvb2x0aXBDb2x1bW5zQ2hhbmdlZCIsbnVsbCksdChbYSgidG9vbHRpcFNvcnRpbmdNZXRob2QiLCJfY2hhcnQiKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFpfdC5wcm90b3R5cGUsIl90b29sdGlwU29ydGluZ01ldGhvZENoYW5nZWQiLG51bGwpLFpfdD10KFtpKCJ2ei1saW5lLWNoYXJ0MiIpXSxaX3QpO2xldCBKX3Q9Y2xhc3MgZXh0ZW5kcyB5ZXt9O0pfdC50ZW1wbGF0ZT1fZWAKICAgIDxkaXYgY2xhc3M9ImNvbnRlbnQiPgogICAgICA8dGFibGU+CiAgICAgICAgPHRoZWFkPjwvdGhlYWQ+CiAgICAgICAgPHRib2R5PjwvdGJvZHk+CiAgICAgIDwvdGFibGU+CiAgICA8L2Rpdj4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAuY29udGVudCB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjgpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICB0YWJsZSB7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjRlbTsKICAgICAgICBtYXJnaW4tdG9wOiAxMHB4OwogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgfQoKICAgICAgdGhlYWQgewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgfQoKICAgICAgdGJvZHkgewogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBsaW5lLWhlaWdodDogMjFweDsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CgogICAgICB0ZCB7CiAgICAgICAgcGFkZGluZzogMCA1cHg7CiAgICAgIH0KCiAgICAgIC5zd2F0Y2ggewogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBoZWlnaHQ6IDE4cHg7CiAgICAgICAgd2lkdGg6IDE4cHg7CiAgICAgIH0KCiAgICAgIC5jbG9zZXN0IC5zd2F0Y2ggewogICAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDJweCAjZmZmOwogICAgICB9CgogICAgICB0aCB7CiAgICAgICAgcGFkZGluZzogMCA1cHg7CiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKICAgICAgfQoKICAgICAgLmRpc3RhbnQgdGQ6bm90KC5zd2F0Y2gpIHsKICAgICAgICBvcGFjaXR5OiAwLjg7CiAgICAgIH0KCiAgICAgIC5naG9zdCB7CiAgICAgICAgb3BhY2l0eTogMC4yOwogICAgICAgIHN0cm9rZS13aWR0aDogMXB4OwogICAgICB9CiAgICA8L3N0eWxlPgogIGAsSl90PXQoW2koInZ6LWxpbmUtY2hhcnQtdG9vbHRpcCIpXSxKX3QpO2NvbnN0IFFfdD1bXSx0eXQ9d2UudGhyb3R0bGUoKGZ1bmN0aW9uIHQoKXtpZigwPT1RX3QubGVuZ3RoKXJldHVybjtjb25zdCBlPVFfdC5zaGlmdCgpO2UmJmUuYWN0aXZlJiYoZS5yZWRyYXcoKSxlLl9tYXliZVJlbmRlcmVkSW5CYWRTdGF0ZT0hMSksd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKDApLHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodCl9KSwxMDApO2xldCBleXQ9Y2xhc3MgZXh0ZW5kcyhwX3QodHIoeWUpKSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3JlZHJhd1JhZj1udWxsLHRoaXMuYWN0aXZlPSExLHRoaXMubG9nU2NhbGVBY3RpdmU9ITEsdGhpcy5jb2xvclNjYWxlPXtzY2FsZTpBT30sdGhpcy5fcmVzZXREb21haW5Pbk5leHRMb2FkPSEwLHRoaXMuX21heWJlUmVuZGVyZWRJbkJhZFN0YXRlPSExfW9uTG9hZEZpbmlzaCgpe3RoaXMuY29tbWl0Q2hhbmdlcygpLHRoaXMuZGF0YVRvTG9hZC5sZW5ndGg+MCYmdGhpcy5fcmVzZXREb21haW5Pbk5leHRMb2FkJiYodGhpcy5fcmVzZXREb21haW5Pbk5leHRMb2FkPSExLHRoaXMuZ2V0Q2hhcnQoKS5yZXNldERvbWFpbigpKSx0aGlzLnJlZHJhdygpfWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSxudWxsIT09dGhpcy5fcmVkcmF3UmFmJiZjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yZWRyYXdSYWYpfWV4cG9ydEFzU3ZnU3RyaW5nKCl7cmV0dXJuIHRoaXMuZ2V0Q2hhcnQoKS5nZXRFeHBvcnRlcigpLmV4cG9ydEFzU3RyaW5nKCl9Z2V0Q2hhcnQoKXtyZXR1cm4gdGhpcy4kLmNoYXJ0fXJlc2V0RG9tYWluKCl7dGhpcy5nZXRDaGFydCgpLnJlc2V0RG9tYWluKCl9c2V0U2VyaWVzRGF0YSh0LGUpe3RoaXMuZ2V0Q2hhcnQoKS5zZXRTZXJpZXNEYXRhKHQsZSl9c2V0U2VyaWVzTWV0YWRhdGEodCxlKXt0aGlzLmdldENoYXJ0KCkuc2V0U2VyaWVzTWV0YWRhdGEodCxlKX1jb21taXRDaGFuZ2VzKCl7dGhpcy5nZXRDaGFydCgpLmNvbW1pdENoYW5nZXMoKX1yZWRyYXcoKXtudWxsIT09dGhpcy5fcmVkcmF3UmFmJiZjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yZWRyYXdSYWYpLHRoaXMuX3JlZHJhd1JhZj13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgoKT0+e3RoaXMuYWN0aXZlP3RoaXMuZ2V0Q2hhcnQoKS5yZWRyYXcoKTp0aGlzLl9tYXliZVJlbmRlcmVkSW5CYWRTdGF0ZT0hMH0pKX1fbG9hZEtleUNoYW5nZWQoKXt0aGlzLnJlc2V0KCksdGhpcy5fcmVzZXREb21haW5Pbk5leHRMb2FkPSEwfV9kYXRhU2VyaWVzQ2hhbmdlZCgpe3RoaXMuZ2V0Q2hhcnQoKS5zZXRWaXNpYmxlU2VyaWVzKHRoaXMuZGF0YVNlcmllcyl9X2xvZ1NjYWxlQ2hhbmdlZCh0KXt0aGlzLmdldENoYXJ0KCkueVNjYWxlVHlwZT10P2pfdC5MT0c6al90LkxJTkVBUix0aGlzLnJlZHJhdygpfV9maXhCYWRTdGF0ZVdoZW5BY3RpdmUoKXt0aGlzLmFjdGl2ZSYmdGhpcy5fbWF5YmVSZW5kZXJlZEluQmFkU3RhdGUmJihRX3QucHVzaCh0aGlzKSx0eXQoKSl9X29uQ2hhcnRBdHRhY2hlZCgpe3RoaXMuYWN0aXZlfHwodGhpcy5fbWF5YmVSZW5kZXJlZEluQmFkU3RhdGU9ITApfX07ZXl0LnRlbXBsYXRlPV9lYAogICAgPGRpdiBpZD0iY2hhcnQtYW5kLXNwaW5uZXItY29udGFpbmVyIj4KICAgICAgPHZ6LWxpbmUtY2hhcnQyCiAgICAgICAgaWQ9ImNoYXJ0IgogICAgICAgIGRhdGEtbG9hZGluZyQ9IltbZGF0YUxvYWRpbmddXSIKICAgICAgICBkYXRhLWxvYWRlZC1vbmNlJD0iW1tkYXRhTG9hZGVkQXRMZWFzdE9uY2VdXSIKICAgICAgICBjb2xvci1zY2FsZT0iW1tjb2xvclNjYWxlXV0iCiAgICAgICAgZGVmYXVsdC14LXJhbmdlPSJbW2RlZmF1bHRYUmFuZ2VdXSIKICAgICAgICBkZWZhdWx0LXktcmFuZ2U9IltbZGVmYXVsdFlSYW5nZV1dIgogICAgICAgIGZpbGwtYXJlYT0iW1tmaWxsQXJlYV1dIgogICAgICAgIGlnbm9yZS15LW91dGxpZXJzPSJbW2lnbm9yZVlPdXRsaWVyc11dIgogICAgICAgIG9uLWNoYXJ0LWF0dGFjaGVkPSJfb25DaGFydEF0dGFjaGVkIgogICAgICAgIHNtb290aGluZy1lbmFibGVkPSJbW3Ntb290aGluZ0VuYWJsZWRdXSIKICAgICAgICBzbW9vdGhpbmctd2VpZ2h0PSJbW3Ntb290aGluZ1dlaWdodF1dIgogICAgICAgIHN5bWJvbC1mdW5jdGlvbj0iW1tzeW1ib2xGdW5jdGlvbl1dIgogICAgICAgIHRvb2x0aXAtY29sdW1ucz0iW1t0b29sdGlwQ29sdW1uc11dIgogICAgICAgIHRvb2x0aXAtcG9zaXRpb249IltbdG9vbHRpcFBvc2l0aW9uXV0iCiAgICAgICAgdG9vbHRpcC1zb3J0aW5nLW1ldGhvZD0iW1t0b29sdGlwU29ydGluZ01ldGhvZF1dIgogICAgICAgIHgtY29tcG9uZW50cy1jcmVhdGlvbi1tZXRob2Q9IltbeENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZF1dIgogICAgICAgIHgtdHlwZT0iW1t4VHlwZV1dIgogICAgICAgIHktdmFsdWUtYWNjZXNzb3I9IltbeVZhbHVlQWNjZXNzb3JdXSIKICAgICAgPjwvdnotbGluZS1jaGFydDI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tkYXRhTG9hZGluZ11dIj4KICAgICAgICA8ZGl2IGlkPSJsb2FkaW5nLXNwaW5uZXItY29udGFpbmVyIj4KICAgICAgICAgIDxwYXBlci1zcGlubmVyLWxpdGUgYWN0aXZlPSIiPjwvcGFwZXItc3Bpbm5lci1saXRlPgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICB9CgogICAgICA6aG9zdChbX21heWJlLXJlbmRlcmVkLWluLWJhZC1zdGF0ZV0pIHZ6LWxpbmUtY2hhcnQgewogICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgICAgfQoKICAgICAgI2NoYXJ0LWFuZC1zcGlubmVyLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAjbG9hZGluZy1zcGlubmVyLWNvbnRhaW5lciB7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIHRvcDogMDsKICAgICAgfQoKICAgICAgdnotbGluZS1jaGFydDIgewogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgfQoKICAgICAgdnotbGluZS1jaGFydDJbZGF0YS1sb2FkaW5nXSB7CiAgICAgICAgb3BhY2l0eTogMC4zOwogICAgICB9CiAgICA8L3N0eWxlPgogIGAsdChbbyh7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfZml4QmFkU3RhdGVXaGVuQWN0aXZlIn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sZXl0LnByb3RvdHlwZSwiYWN0aXZlIix2b2lkIDApLHQoW28oe3R5cGU6QXJyYXl9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSxleXQucHJvdG90eXBlLCJkYXRhU2VyaWVzIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLGhyKV0sZXl0LnByb3RvdHlwZSwicmVxdWVzdE1hbmFnZXIiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfbG9nU2NhbGVDaGFuZ2VkIn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sZXl0LnByb3RvdHlwZSwibG9nU2NhbGVBY3RpdmUiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZXl0LnByb3RvdHlwZSwieENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZCIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxleXQucHJvdG90eXBlLCJ4VHlwZSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLGV5dC5wcm90b3R5cGUsInlWYWx1ZUFjY2Vzc29yIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLGV5dC5wcm90b3R5cGUsImZpbGxBcmVhIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sZXl0LnByb3RvdHlwZSwic21vb3RoaW5nRW5hYmxlZCIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxleXQucHJvdG90eXBlLCJzbW9vdGhpbmdXZWlnaHQiLHZvaWQgMCksdChbbyh7dHlwZTpBcnJheX0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLGV5dC5wcm90b3R5cGUsInRvb2x0aXBDb2x1bW5zIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLGV5dC5wcm90b3R5cGUsInRvb2x0aXBTb3J0aW5nTWV0aG9kIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLGV5dC5wcm90b3R5cGUsInRvb2x0aXBQb3NpdGlvbiIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGV5dC5wcm90b3R5cGUsImlnbm9yZVlPdXRsaWVycyIsdm9pZCAwKSx0KFtvKHt0eXBlOkFycmF5fSksZSgiZGVzaWduOnR5cGUiLEFycmF5KV0sZXl0LnByb3RvdHlwZSwiZGVmYXVsdFhSYW5nZSIsdm9pZCAwKSx0KFtvKHt0eXBlOkFycmF5fSksZSgiZGVzaWduOnR5cGUiLEFycmF5KV0sZXl0LnByb3RvdHlwZSwiZGVmYXVsdFlSYW5nZSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLGV5dC5wcm90b3R5cGUsInN5bWJvbEZ1bmN0aW9uIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLGV5dC5wcm90b3R5cGUsImNvbG9yU2NhbGUiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxleXQucHJvdG90eXBlLCJfcmVzZXREb21haW5Pbk5leHRMb2FkIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGV5dC5wcm90b3R5cGUsIl9tYXliZVJlbmRlcmVkSW5CYWRTdGF0ZSIsdm9pZCAwKSx0KFthKCJsb2FkS2V5IiksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pLGUoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxleXQucHJvdG90eXBlLCJfbG9hZEtleUNoYW5nZWQiLG51bGwpLHQoW2EoImRhdGFTZXJpZXMuKiIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sZXl0LnByb3RvdHlwZSwiX2RhdGFTZXJpZXNDaGFuZ2VkIixudWxsKSxleXQ9dChbaSgidGYtbGluZS1jaGFydC1kYXRhLWxvYWRlciIpXSxleXQpLHRsKHttb2R1bGVOYW1lOiJ0Zi1jdXN0b20tc2NhbGFyLWNhcmQtc3R5bGUiLHN0eWxlQ29udGVudDoiXG4gICAgOmhvc3Qge1xuICAgICAgbWFyZ2luOiA1cHggMTBweDtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIHdpZHRoOiAzMzBweDtcbiAgICAgIHZlcnRpY2FsLWFsaWduOiB0ZXh0LXRvcDtcbiAgICB9XG5cbiAgICA6aG9zdChbX2V4cGFuZGVkXSkge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgfVxuXG4gICAgOmhvc3QoW19leHBhbmRlZF0pICN0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyLWNvbnRhaW5lciB7XG4gICAgICBoZWlnaHQ6IDQwMHB4O1xuICAgIH1cblxuICAgIGgxIHtcbiAgICAgIGZvbnQtc2l6ZTogMTlweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gICAgfVxuXG4gICAgI3RmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXItY29udGFpbmVyIHtcbiAgICAgIGhlaWdodDogMjAwcHg7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG5cbiAgICAjYnV0dG9ucyB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICB9XG5cbiAgICBwYXBlci1pY29uLWJ1dHRvbiB7XG4gICAgICBjb2xvcjogIzIxOTZmMztcbiAgICAgIGJvcmRlci1yYWRpdXM6IDEwMCU7XG4gICAgICB3aWR0aDogMzJweDtcbiAgICAgIGhlaWdodDogMzJweDtcbiAgICAgIHBhZGRpbmc6IDRweDtcbiAgICB9XG5cbiAgICBwYXBlci1pY29uLWJ1dHRvbltzZWxlY3RlZF0ge1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0tdGItdWktbGlnaHQtYWNjZW50KTtcbiAgICB9XG5cbiAgICAuZG93bmxvYWQtbGlua3Mge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGhlaWdodDogMzJweDtcbiAgICB9XG5cbiAgICAuZG93bmxvYWQtbGlua3MgYSB7XG4gICAgICBmb250LXNpemU6IDEwcHg7XG4gICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XG4gICAgICBtYXJnaW46IDJweDtcbiAgICB9XG5cbiAgICAuZG93bmxvYWQtbGlua3MgcGFwZXItZHJvcGRvd24tbWVudSB7XG4gICAgICB3aWR0aDogMTAwcHg7XG4gICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1sYWJlbDoge1xuICAgICAgICBmb250LXNpemU6IDEwcHg7XG4gICAgICB9XG4gICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDoge1xuICAgICAgICBmb250LXNpemU6IDEwcHg7XG4gICAgICB9XG4gICAgfVxuICAifSk7Y2xhc3Mgbnl0e2NvbnN0cnVjdG9yKHQsZSxuLGkscil7dGhpcy5ydW49dCx0aGlzLnRhZz1lLHRoaXMubmFtZT1uLHRoaXMuc2NhbGFyRGF0YT1pLHRoaXMuc3ltYm9sPXJ9Z2V0TmFtZSgpe3JldHVybiB0aGlzLm5hbWV9c2V0RGF0YSh0KXt0aGlzLnNjYWxhckRhdGE9dH1nZXREYXRhKCl7cmV0dXJuIHRoaXMuc2NhbGFyRGF0YX1nZXRSdW4oKXtyZXR1cm4gdGhpcy5ydW59Z2V0VGFnKCl7cmV0dXJuIHRoaXMudGFnfWdldFN5bWJvbCgpe3JldHVybiB0aGlzLnN5bWJvbH19ZnVuY3Rpb24gaXl0KHQsZSl7cmV0dXJuYCR7ZX0gKCR7dH0pYH1jbGFzcyByeXR7Y29uc3RydWN0b3IodCl7dGhpcy5ydW5CYXNlZENvbG9yU2NhbGU9dH1zY2FsZSh0KXtyZXR1cm4gdGhpcy5ydW5CYXNlZENvbG9yU2NhbGUuc2NhbGUodGhpcy5wYXJzZVJ1bk5hbWUodCkpfXBhcnNlUnVuTmFtZSh0KXtjb25zdCBlPXQubWF0Y2goL1woKC4qKVwpJC8pO3JldHVybiBlP2VbMV06IiJ9fWxldCBveXQ9Y2xhc3MgZXh0ZW5kcyh0cih5ZSkpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmFjdGl2ZT0hMCx0aGlzLl9jb2xvclNjYWxlPW5ldyByeXQoe3NjYWxlOkFPfSksdGhpcy5fbmFtZVRvRGF0YVNlcmllcz17fSx0aGlzLl9leHBhbmRlZD0hMSx0aGlzLl9yZXF1ZXN0RGF0YT0odCxlLG4pPT57Y29uc3QgaT1ncigpLnBsdWdpblJvdXRlKCJjdXN0b21fc2NhbGFycyIsIi9zY2FsYXJzIik7UHJvbWlzZS5hbGwodC5tYXAoKHQ9Pntjb25zdCBuPVZPKGkse3RhZzp0aGlzLl90YWdGaWx0ZXIscnVuOnR9KTtyZXR1cm4gdGhpcy5yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KG4pLnRoZW4oKG49PntlKHtpdGVtOnQsZGF0YTpufSl9KSl9KSkpLmZpbmFsbHkoKCgpPT57bigpfSkpfSx0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleD17fSx0aGlzLl9tYXRjaGVzTGlzdE9wZW5lZD0hMSx0aGlzLl9maWxsQXJlYT17bG93ZXJBY2Nlc3Nvcjp0PT50Lmxvd2VyLGhpZ2hlckFjY2Vzc29yOnQ9PnQudXBwZXJ9LHRoaXMuX3Rvb2x0aXBDb2x1bW5zPSgoKT0+e2NvbnN0IHQ9b190KDQpLGU9ZT0+aXNOYU4oZSk/Ik5hTiI6dChlKTtyZXR1cm5be3RpdGxlOiJOYW1lIixldmFsdWF0ZTp0PT50LmRhdGFzZXQubWV0YWRhdGEoKS5uYW1lfSx7dGl0bGU6IlZhbHVlIixldmFsdWF0ZTp0PT5lKHQuZGF0dW0uc2NhbGFyKX0se3RpdGxlOiJMb3dlciBNYXJnaW4iLGV2YWx1YXRlOnQ9PmUodC5kYXR1bS5sb3dlcil9LHt0aXRsZToiVXBwZXIgTWFyZ2luIixldmFsdWF0ZTp0PT5lKHQuZGF0dW0udXBwZXIpfSx7dGl0bGU6IlN0ZXAiLGV2YWx1YXRlOnQ9PmFfdCh0LmRhdHVtLnN0ZXApfSx7dGl0bGU6IlRpbWUiLGV2YWx1YXRlOnQ9PmxfdCh0LmRhdHVtLndhbGxfdGltZSl9LHt0aXRsZToiUmVsYXRpdmUiLGV2YWx1YXRlOnQ9PnVfdChjX3QodC5kYXR1bSwwLHQuZGF0YXNldCkpfV19KSgpLHRoaXMuX21pc3NpbmdUYWdzPVtdLHRoaXMuX21pc3NpbmdUYWdzQ29sbGFwc2libGVPcGVuZWQ9ITF9cmVsb2FkKCl7dGhpcy4kLmxvYWRlci5yZWxvYWQoKX1yZWRyYXcoKXt0aGlzLiQubG9hZGVyLnJlZHJhdygpfV90b2dnbGVFeHBhbmRlZCh0KXt0aGlzLnNldCgiX2V4cGFuZGVkIiwhdGhpcy5fZXhwYW5kZWQpLHRoaXMucmVkcmF3KCl9X3RvZ2dsZUxvZ1NjYWxlKCl7dGhpcy5zZXQoIl9sb2dTY2FsZUFjdGl2ZSIsIXRoaXMuX2xvZ1NjYWxlQWN0aXZlKX1fcmVzZXREb21haW4oKXtjb25zdCB0PXRoaXMuJC5sb2FkZXI7dCYmdC5yZXNldERvbWFpbigpfV9jc3ZVcmwodCxlKXtyZXR1cm4gZT9WTyh0aGlzLl9kb3dubG9hZERhdGFVcmwodCxlKSx7Zm9ybWF0OiJjc3YifSk6IiJ9X2pzb25VcmwodCxlKXtyZXR1cm4gZT9WTyh0aGlzLl9kb3dubG9hZERhdGFVcmwodCxlKSx7Zm9ybWF0OiJqc29uIn0pOiIifV9kb3dubG9hZERhdGFVcmwodCxlKXtjb25zdCBuPXRbZV0saT17dGFnOm4uZ2V0VGFnKCkscnVuOm4uZ2V0UnVuKCl9O3JldHVybiBWTyhncigpLnBsdWdpblJvdXRlKCJjdXN0b21fc2NhbGFycyIsIi9kb3dubG9hZF9kYXRhIiksaSl9X2NyZWF0ZVByb2Nlc3NEYXRhRnVuY3Rpb24odCl7cmV0dXJuKGUsbixpKT0+e2lmKCFpLnJlZ2V4X3ZhbGlkKXJldHVybiB2b2lkIHRoaXMuc2V0KCJfdGFnRmlsdGVySW52YWxpZCIsITApO2NvbnN0IHI9d2UuY2xvbmUodGhpcy5fbmFtZVRvRGF0YVNlcmllcyksbz1bXTt3ZS5mb3JFYWNoKHQsKHQ9PntsZXQgZT0hMTtjb25zdCBhPWkudGFnX3RvX2V2ZW50c1t0LnZhbHVlXSxzPWkudGFnX3RvX2V2ZW50c1t0Lmxvd2VyXSxsPWkudGFnX3RvX2V2ZW50c1t0LnVwcGVyXTtpZih3ZS5pc1VuZGVmaW5lZChhKSYmKG8ucHVzaCh0LnZhbHVlKSxlPSEwKSx3ZS5pc1VuZGVmaW5lZChzKSYmKG8ucHVzaCh0Lmxvd2VyKSxlPSEwKSx3ZS5pc1VuZGVmaW5lZChsKSYmKG8ucHVzaCh0LnVwcGVyKSxlPSEwKSxlKXJldHVybjtjb25zdCBjPXQ9PnRbMV0sdT10aGlzLl9maW5kU3RlcE1pc21hdGNoKHQsYS5tYXAoYykscy5tYXAoYyksbC5tYXAoYykpO2lmKHUpcmV0dXJuIHZvaWQgdGhpcy5zZXQoIl9zdGVwc01pc21hdGNoIix1KTtjb25zdCBoPXQ9PnRbMl0sZD1hLm1hcCgoKHQsZSk9Pih7d2FsbF90aW1lOm5ldyBEYXRlKDFlMyp0WzBdKSxzdGVwOmModCksc2NhbGFyOmgodCksbG93ZXI6aChzW2VdKSx1cHBlcjpoKGxbZV0pfSkpKSxwPWl5dChuLHQudmFsdWUpLGY9cltwXTtpZihmKWYuc2V0RGF0YShkKTtlbHNle2NvbnN0IGU9dGhpcy5fY3JlYXRlTmV3RGF0YVNlcmllcyhuLHQudmFsdWUscCxkKTtyW3BdPWV9fSkpLHRoaXMuc2V0KCJfbmFtZVRvRGF0YVNlcmllcyIscik7Y29uc3QgYT13ZS5maW5kSW5kZXgodGhpcy5fbWlzc2luZ1RhZ3MsKHQ9PnQucnVuPT09bikpO2lmKG8ubGVuZ3RoJiYzIT1vLmxlbmd0aCl7Y29uc3QgdD17cnVuOm4sdGFnczpvfTthPj0wP3RoaXMuc3BsaWNlKCJfbWlzc2luZ1RhZ3MiLGEsMSx0KTp0aGlzLnB1c2goIl9taXNzaW5nVGFncyIsdCl9ZWxzZSBhPj0wJiZ0aGlzLnNwbGljZSgiX21pc3NpbmdUYWdzIixhLDEpfX1fZmluZFN0ZXBNaXNtYXRjaCh0LGUsbixpKXtyZXR1cm4gd2UuaXNFcXVhbChuLGUpJiZ3ZS5pc0VxdWFsKGksZSk/bnVsbDp7c2VyaWVzT2JqZWN0OnQsdmFsdWVTdGVwczplLGxvd2VyU3RlcHM6bix1cHBlclN0ZXBzOml9fV9jcmVhdGVOZXdEYXRhU2VyaWVzKHQsZSxuLGkpe3RoaXMuX3J1blRvTmV4dEF2YWlsYWJsZVN5bWJvbEluZGV4W3RdfD0wO2NvbnN0IHI9bmV3IG55dCh0LGUsbixpLGlfdFt0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFt0XV0pO3JldHVybiB0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFt0XT0odGhpcy5fcnVuVG9OZXh0QXZhaWxhYmxlU3ltYm9sSW5kZXhbdF0rMSklaV90Lmxlbmd0aCxyfV91cGRhdGVDaGFydCgpe3dlLmZvck93bih0aGlzLl9uYW1lVG9EYXRhU2VyaWVzLCh0PT57dGhpcy4kLmxvYWRlci5zZXRTZXJpZXNEYXRhKHQuZ2V0TmFtZSgpLHQuZ2V0RGF0YSgpKX0pKSx0aGlzLiQubG9hZGVyLmNvbW1pdENoYW5nZXMoKX1nZXQgX3Nlcmllc05hbWVzKCl7Y29uc3QgdD1uZXcgU2V0KHRoaXMucnVucyk7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMuX25hbWVUb0RhdGFTZXJpZXMpLmZpbHRlcigoKFtlLG5dKT0+dC5oYXMobi5ydW4pKSkubWFwKCgoW3RdKT0+dCkpfV9kZXRlcm1pbmVDb2xvcih0LGUpe3JldHVybiB0LnNjYWxlKGUpfV9yZWZyZXNoRGF0YVNlcmllcygpe3RoaXMuc2V0KCJfbmFtZVRvRGF0YVNlcmllcyIse30pfV9jcmVhdGVTeW1ib2xGdW5jdGlvbigpe3JldHVybiB0PT50aGlzLl9uYW1lVG9EYXRhU2VyaWVzW3RdLmdldFN5bWJvbCgpLm1ldGhvZCgpfV9kZXRlcm1pbmVTeW1ib2wodCxlKXtyZXR1cm4gdFtlXS5nZXRTeW1ib2woKS5jaGFyYWN0ZXJ9Z2V0IF90YWdGaWx0ZXIoKXtyZXR1cm4gd2UuZmxhdHRlbih0aGlzLm1hcmdpbkNoYXJ0U2VyaWVzLm1hcCgodD0+W3QudmFsdWUsdC5sb3dlcix0LnVwcGVyXSkpKS5tYXAoKHQ9PiIoIit0aGlzLl9lc2NhcGVSZWdleENoYXJhY3RlcnModCkrIikiKSkuam9pbigifCIpfV9lc2NhcGVSZWdleENoYXJhY3RlcnModCl7cmV0dXJuIHQucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xdXFxdL2csIlxcJCYiKX1fZ2V0VG9nZ2xlQ29sbGFwc2libGVJY29uKHQpe3JldHVybiB0PyJleHBhbmQtbGVzcyI6ImV4cGFuZC1tb3JlIn1fdG9nZ2xlTWF0Y2hlc09wZW4oKXt0aGlzLnNldCgiX21hdGNoZXNMaXN0T3BlbmVkIiwhdGhpcy5fbWF0Y2hlc0xpc3RPcGVuZWQpfWdldCBfdGl0bGVEaXNwbGF5U3RyaW5nKCl7cmV0dXJuIHRoaXMudGl0bGV8fCJ1bnRpdGxlZCJ9X3NlcGFyYXRlV2l0aENvbW1hcyh0KXtyZXR1cm4gdC5qb2luKCIsICIpfV90b2dnbGVNaXNzaW5nVGFnc0NvbGxhcHNpYmxlT3Blbigpe3RoaXMuc2V0KCJfbWlzc2luZ1RhZ3NDb2xsYXBzaWJsZU9wZW5lZCIsIXRoaXMuX21pc3NpbmdUYWdzQ29sbGFwc2libGVPcGVuZWQpfV9tYXRjaExpc3RFbnRyeUNvbG9yVXBkYXRlZCgpe2NvbnN0IHQ9dGhpcy4kJCgiI21hdGNoLWxpc3QtcmVwZWF0Iik7dCYmdGhpcy5yb290LnF1ZXJ5U2VsZWN0b3JBbGwoIi5tYXRjaC1saXN0LWVudHJ5IikuZm9yRWFjaCgoZT0+e2NvbnN0IG49dC5pdGVtRm9yRWxlbWVudChlKTtlLnN0eWxlLmNvbG9yPXRoaXMuX2RldGVybWluZUNvbG9yKHRoaXMuX2NvbG9yU2NhbGUsbil9KSl9fTtveXQudGVtcGxhdGU9X2VgCiAgICA8dGYtY2FyZC1oZWFkaW5nIGRpc3BsYXktbmFtZT0iW1tfdGl0bGVEaXNwbGF5U3RyaW5nXV0iPjwvdGYtY2FyZC1oZWFkaW5nPgogICAgPGRpdiBpZD0idGYtbGluZS1jaGFydC1kYXRhLWxvYWRlci1jb250YWluZXIiPgogICAgICA8dGYtbGluZS1jaGFydC1kYXRhLWxvYWRlcgogICAgICAgIGlkPSJsb2FkZXIiCiAgICAgICAgYWN0aXZlPSJbW2FjdGl2ZV1dIgogICAgICAgIGNvbG9yLXNjYWxlPSJbW19jb2xvclNjYWxlXV0iCiAgICAgICAgZGF0YS1zZXJpZXM9IltbX3Nlcmllc05hbWVzXV0iCiAgICAgICAgZmlsbC1hcmVhPSJbW19maWxsQXJlYV1dIgogICAgICAgIGlnbm9yZS15LW91dGxpZXJzPSJbW2lnbm9yZVlPdXRsaWVyc11dIgogICAgICAgIGxvYWQta2V5PSJbW190YWdGaWx0ZXJdXSIKICAgICAgICBkYXRhLXRvLWxvYWQ9IltbcnVuc11dIgogICAgICAgIHJlcXVlc3QtZGF0YT0iW1tfcmVxdWVzdERhdGFdXSIKICAgICAgICBsb2ctc2NhbGUtYWN0aXZlPSJbW19sb2dTY2FsZUFjdGl2ZV1dIgogICAgICAgIGxvYWQtZGF0YS1jYWxsYmFjaz0iW1tfY3JlYXRlUHJvY2Vzc0RhdGFGdW5jdGlvbihtYXJnaW5DaGFydFNlcmllcyldXSIKICAgICAgICByZXF1ZXN0LW1hbmFnZXI9IltbcmVxdWVzdE1hbmFnZXJdXSIKICAgICAgICBzeW1ib2wtZnVuY3Rpb249IltbX2NyZWF0ZVN5bWJvbEZ1bmN0aW9uKCldXSIKICAgICAgICB0b29sdGlwLWNvbHVtbnM9IltbX3Rvb2x0aXBDb2x1bW5zXV0iCiAgICAgICAgdG9vbHRpcC1zb3J0aW5nLW1ldGhvZD0iW1t0b29sdGlwU29ydGluZ01ldGhvZF1dIgogICAgICAgIHgtdHlwZT0iW1t4VHlwZV1dIgogICAgICA+CiAgICAgIDwvdGYtbGluZS1jaGFydC1kYXRhLWxvYWRlcj4KICAgIDwvZGl2PgogICAgPGRpdiBpZD0iYnV0dG9ucyI+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIHNlbGVjdGVkJD0iW1tfZXhwYW5kZWRdXSIKICAgICAgICBpY29uPSJmdWxsc2NyZWVuIgogICAgICAgIG9uLXRhcD0iX3RvZ2dsZUV4cGFuZGVkIgogICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgc2VsZWN0ZWQkPSJbW19sb2dTY2FsZUFjdGl2ZV1dIgogICAgICAgIGljb249ImxpbmUtd2VpZ2h0IgogICAgICAgIG9uLXRhcD0iX3RvZ2dsZUxvZ1NjYWxlIgogICAgICAgIHRpdGxlPSJUb2dnbGUgeS1heGlzIGxvZyBzY2FsZSIKICAgICAgPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIGljb249InNldHRpbmdzLW92ZXJzY2FuIgogICAgICAgIG9uLXRhcD0iX3Jlc2V0RG9tYWluIgogICAgICAgIHRpdGxlPSJGaXQgZG9tYWluIHRvIGRhdGEiCiAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICA8c3BhbiBzdHlsZT0iZmxleC1ncm93OiAxIj48L3NwYW4+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzaG93RG93bmxvYWRMaW5rc11dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJkb3dubG9hZC1saW5rcyI+CiAgICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudQogICAgICAgICAgICBuby1sYWJlbC1mbG9hdD0idHJ1ZSIKICAgICAgICAgICAgbGFiZWw9InNlcmllcyB0byBkb3dubG9hZCIKICAgICAgICAgICAgc2VsZWN0ZWQtaXRlbS1sYWJlbD0ie3tfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkfX0iCiAgICAgICAgICA+CiAgICAgICAgICAgIDxwYXBlci1saXN0Ym94IGNsYXNzPSJkcm9wZG93bi1jb250ZW50IiBzbG90PSJkcm9wZG93bi1jb250ZW50Ij4KICAgICAgICAgICAgICA8dGVtcGxhdGUKICAgICAgICAgICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgICAgICAgICAgaXRlbXM9IltbX3Nlcmllc05hbWVzXV0iCiAgICAgICAgICAgICAgICBhcz0iZGF0YVNlcmllc05hbWUiCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0gbm8tbGFiZWwtZmxvYXQ9InRydWUiCiAgICAgICAgICAgICAgICAgID5bW2RhdGFTZXJpZXNOYW1lXV08L3BhcGVyLWl0ZW0KICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgICAgICA8YQogICAgICAgICAgICBkb3dubG9hZD0iW1tfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkXV0uY3N2IgogICAgICAgICAgICBocmVmPSJbW19jc3ZVcmwoX25hbWVUb0RhdGFTZXJpZXMsIF9kYXRhU2VyaWVzTmFtZVRvRG93bmxvYWQpXV0iCiAgICAgICAgICAgID5DU1Y8L2EKICAgICAgICAgID4KICAgICAgICAgIDxhCiAgICAgICAgICAgIGRvd25sb2FkPSJbW19kYXRhU2VyaWVzTmFtZVRvRG93bmxvYWRdXS5qc29uIgogICAgICAgICAgICBocmVmPSJbW19qc29uVXJsKF9uYW1lVG9EYXRhU2VyaWVzLCBfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkKV1dIgogICAgICAgICAgICA+SlNPTjwvYQogICAgICAgICAgPgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CgogICAgPCEtLSBoZXJlIC0tPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19taXNzaW5nVGFncy5sZW5ndGhdXSI+CiAgICAgIDxkaXYgY2xhc3M9ImNvbGxhcHNpYmxlLWxpc3QtdGl0bGUiPgogICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgICAgaWNvbj0iW1tfZ2V0VG9nZ2xlQ29sbGFwc2libGVJY29uKF9taXNzaW5nVGFnc0NvbGxhcHNpYmxlT3BlbmVkKV1dIgogICAgICAgICAgb24tY2xpY2s9Il90b2dnbGVNaXNzaW5nVGFnc0NvbGxhcHNpYmxlT3BlbiIKICAgICAgICAgIGNsYXNzPSJ0b2dnbGUtY29sbGFwc2libGUtYnV0dG9uIgogICAgICAgID4KICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgIDxzcGFuIGNsYXNzPSJjb2xsYXBzaWJsZS10aXRsZS10ZXh0Ij4KICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0iaWNvbnM6ZXJyb3IiPjwvaXJvbi1pY29uPiBNaXNzaW5nIFRhZ3MKICAgICAgICA8L3NwYW4+CiAgICAgIDwvZGl2PgogICAgICA8aXJvbi1jb2xsYXBzZSBvcGVuZWQ9IltbX21pc3NpbmdUYWdzQ29sbGFwc2libGVPcGVuZWRdXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iZXJyb3ItY29udGVudCI+CiAgICAgICAgICA8aXJvbi1pY29uIGNsYXNzPSJlcnJvci1pY29uIiBpY29uPSJpY29uczplcnJvciI+PC9pcm9uLWljb24+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19taXNzaW5nVGFnc11dIiBhcz0ibWlzc2luZ0VudHJ5Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWlzc2luZy10YWdzLWZvci1ydW4tY29udGFpbmVyIj4KICAgICAgICAgICAgICBSdW4gIltbbWlzc2luZ0VudHJ5LnJ1bl1dIiBsYWNrcyBkYXRhIGZvciB0YWdzCiAgICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgICAgPHRlbXBsYXRlCiAgICAgICAgICAgICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgICAgICAgICAgICBpdGVtcz0iW1ttaXNzaW5nRW50cnkudGFnc11dIgogICAgICAgICAgICAgICAgICBhcz0idGFnIgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICA8bGk+W1t0YWddXTwvbGk+CiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9pcm9uLWNvbGxhcHNlPgogICAgPC90ZW1wbGF0ZT4KCiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3RhZ0ZpbHRlckludmFsaWRdXSI+CiAgICAgIDxkaXYgY2xhc3M9ImVycm9yLWNvbnRlbnQiPgogICAgICAgIDxpcm9uLWljb24gY2xhc3M9ImVycm9yLWljb24iIGljb249Imljb25zOmVycm9yIj48L2lyb24taWNvbj4KICAgICAgICBUaGlzIHJlZ3VsYXIgZXhwcmVzaW9uIGlzIGludmFsaWQ6PGJyIC8+CiAgICAgICAgPHNwYW4gY2xhc3M9ImludmFsaWQtcmVnZXgiPltbX3RhZ0ZpbHRlcl1dPC9zcGFuPgogICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19zdGVwc01pc21hdGNoXV0iPgogICAgICA8ZGl2IGNsYXNzPSJlcnJvci1jb250ZW50Ij4KICAgICAgICA8aXJvbi1pY29uIGNsYXNzPSJlcnJvci1pY29uIiBpY29uPSJpY29uczplcnJvciI+PC9pcm9uLWljb24+CiAgICAgICAgVGhlIHN0ZXBzIGZvciB2YWx1ZSwgbG93ZXIsIGFuZCB1cHBlciB0YWdzIGRvIG5vdCBtYXRjaDoKICAgICAgICA8dWw+CiAgICAgICAgICA8bGk+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0YWctbmFtZSI+W1tfc3RlcHNNaXNtYXRjaC5zZXJpZXNPYmplY3QudmFsdWVdXTwvc3Bhbj46CiAgICAgICAgICAgIFtbX3NlcGFyYXRlV2l0aENvbW1hcyhfc3RlcHNNaXNtYXRjaC52YWx1ZVN0ZXBzKV1dCiAgICAgICAgICA8L2xpPgogICAgICAgICAgPGxpPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0idGFnLW5hbWUiPltbX3N0ZXBzTWlzbWF0Y2guc2VyaWVzT2JqZWN0Lmxvd2VyXV08L3NwYW4+OgogICAgICAgICAgICBbW19zZXBhcmF0ZVdpdGhDb21tYXMoX3N0ZXBzTWlzbWF0Y2gubG93ZXJTdGVwcyldXQogICAgICAgICAgPC9saT4KICAgICAgICAgIDxsaT4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRhZy1uYW1lIj5bW19zdGVwc01pc21hdGNoLnNlcmllc09iamVjdC51cHBlcl1dPC9zcGFuPjoKICAgICAgICAgICAgW1tfc2VwYXJhdGVXaXRoQ29tbWFzKF9zdGVwc01pc21hdGNoLnVwcGVyU3RlcHMpXV0KICAgICAgICAgIDwvbGk+CiAgICAgICAgPC91bD4KICAgICAgPC9kaXY+CiAgICA8L3RlbXBsYXRlPgoKICAgIDxkaXYgaWQ9Im1hdGNoZXMtY29udGFpbmVyIj4KICAgICAgPGRpdiBjbGFzcz0iY29sbGFwc2libGUtbGlzdC10aXRsZSI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19zZXJpZXNOYW1lcy5sZW5ndGhdXSI+CiAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICAgICAgaWNvbj0iW1tfZ2V0VG9nZ2xlQ29sbGFwc2libGVJY29uKF9tYXRjaGVzTGlzdE9wZW5lZCldXSIKICAgICAgICAgICAgb24tY2xpY2s9Il90b2dnbGVNYXRjaGVzT3BlbiIKICAgICAgICAgICAgY2xhc3M9InRvZ2dsZS1tYXRjaGVzLWJ1dHRvbiIKICAgICAgICAgID4KICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgPHNwYW4gY2xhc3M9ImNvbGxhcHNpYmxlLXRpdGxlLXRleHQiPgogICAgICAgICAgTWF0Y2hlcyAoW1tfc2VyaWVzTmFtZXMubGVuZ3RoXV0pCiAgICAgICAgPC9zcGFuPgogICAgICA8L2Rpdj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19zZXJpZXNOYW1lcy5sZW5ndGhdXSI+CiAgICAgICAgPGlyb24tY29sbGFwc2Ugb3BlbmVkPSJbW19tYXRjaGVzTGlzdE9wZW5lZF1dIj4KICAgICAgICAgIDxkaXYgaWQ9Im1hdGNoZXMtbGlzdCI+CiAgICAgICAgICAgIDx0ZW1wbGF0ZQogICAgICAgICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgICAgICAgIGl0ZW1zPSJbW19zZXJpZXNOYW1lc11dIgogICAgICAgICAgICAgIGFzPSJzZXJpZXNOYW1lIgogICAgICAgICAgICAgIGlkPSJtYXRjaC1saXN0LXJlcGVhdCIKICAgICAgICAgICAgICBvbi1kb20tY2hhbmdlPSJfbWF0Y2hMaXN0RW50cnlDb2xvclVwZGF0ZWQiCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtYXRjaC1saXN0LWVudHJ5Ij4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtYXRjaC1lbnRyeS1zeW1ib2wiPgogICAgICAgICAgICAgICAgICBbW19kZXRlcm1pbmVTeW1ib2woX25hbWVUb0RhdGFTZXJpZXMsIHNlcmllc05hbWUpXV0KICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgIFtbc2VyaWVzTmFtZV1dCiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2lyb24tY29sbGFwc2U+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L2Rpdj4KCiAgICA8c3R5bGUgaW5jbHVkZT0idGYtY3VzdG9tLXNjYWxhci1jYXJkLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAuZXJyb3ItY29udGVudCB7CiAgICAgICAgYmFja2dyb3VuZDogI2YwMDsKICAgICAgICBib3JkZXItcmFkaXVzOiA1cHg7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgbWFyZ2luOiAxMHB4IDAgMCAwOwogICAgICAgIHBhZGRpbmc6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5lcnJvci1pY29uIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBmaWxsOiAjZmZmOwogICAgICAgIG1hcmdpbjogMCBhdXRvIDVweCBhdXRvOwogICAgICB9CgogICAgICAuaW52YWxpZC1yZWdleCB7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgIH0KCiAgICAgIC5lcnJvci1jb250ZW50IHVsIHsKICAgICAgICBtYXJnaW46IDFweCAwIDAgMDsKICAgICAgICBwYWRkaW5nOiAwIDAgMCAxOXB4OwogICAgICB9CgogICAgICAudGFnLW5hbWUgewogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICB9CgogICAgICAuY29sbGFwc2libGUtbGlzdC10aXRsZSB7CiAgICAgICAgbWFyZ2luOiAxMHB4IDAgNXB4IDA7CiAgICAgIH0KCiAgICAgIC5jb2xsYXBzaWJsZS10aXRsZS10ZXh0IHsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgICB9CgogICAgICAjbWF0Y2hlcy1saXN0IHsKICAgICAgICBtYXgtaGVpZ2h0OiAyMDBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CgogICAgICAubWF0Y2gtbGlzdC1lbnRyeSB7CiAgICAgICAgbWFyZ2luOiAwIDAgNXB4IDA7CiAgICAgIH0KCiAgICAgIC5tYXRjaC1lbnRyeS1zeW1ib2wgewogICAgICAgIGZvbnQtZmFtaWx5OiBhcmlhbCwgc2Fucy1zZXJpZjsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgd2lkdGg6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5taXNzaW5nLXRhZ3MtZm9yLXJ1bi1jb250YWluZXIgewogICAgICAgIG1hcmdpbjogOHB4IDAgMCAwOwogICAgICB9CiAgICA8L3N0eWxlPgogIGAsdChbbyh7dHlwZTpBcnJheX0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLG95dC5wcm90b3R5cGUsInJ1bnMiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sb3l0LnByb3RvdHlwZSwieFR5cGUiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxveXQucHJvdG90eXBlLCJhY3RpdmUiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sb3l0LnByb3RvdHlwZSwidGl0bGUiLHZvaWQgMCksdChbbyh7dHlwZTpBcnJheX0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLG95dC5wcm90b3R5cGUsIm1hcmdpbkNoYXJ0U2VyaWVzIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sb3l0LnByb3RvdHlwZSwiaWdub3JlWU91dGxpZXJzIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLGhyKV0sb3l0LnByb3RvdHlwZSwicmVxdWVzdE1hbmFnZXIiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxveXQucHJvdG90eXBlLCJzaG93RG93bmxvYWRMaW5rcyIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxveXQucHJvdG90eXBlLCJ0YWdNZXRhZGF0YSIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxveXQucHJvdG90eXBlLCJ0b29sdGlwU29ydGluZ01ldGhvZCIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxveXQucHJvdG90eXBlLCJfY29sb3JTY2FsZSIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLG95dC5wcm90b3R5cGUsIl90YWdGaWx0ZXJJbnZhbGlkIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLG95dC5wcm90b3R5cGUsIl9uYW1lVG9EYXRhU2VyaWVzIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLG95dC5wcm90b3R5cGUsIl9leHBhbmRlZCIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLG95dC5wcm90b3R5cGUsIl9sb2dTY2FsZUFjdGl2ZSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLG95dC5wcm90b3R5cGUsIl9yZXF1ZXN0RGF0YSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxveXQucHJvdG90eXBlLCJfcnVuVG9OZXh0QXZhaWxhYmxlU3ltYm9sSW5kZXgiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxveXQucHJvdG90eXBlLCJfbWF0Y2hlc0xpc3RPcGVuZWQiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sb3l0LnByb3RvdHlwZSwiX2ZpbGxBcmVhIix2b2lkIDApLHQoW28oe3R5cGU6QXJyYXl9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSxveXQucHJvdG90eXBlLCJfdG9vbHRpcENvbHVtbnMiLHZvaWQgMCksdChbbyh7dHlwZTpBcnJheX0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLG95dC5wcm90b3R5cGUsIl9taXNzaW5nVGFncyIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLG95dC5wcm90b3R5cGUsIl9taXNzaW5nVGFnc0NvbGxhcHNpYmxlT3BlbmVkIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLG95dC5wcm90b3R5cGUsIl9zdGVwc01pc21hdGNoIix2b2lkIDApLHQoW2EoIl9uYW1lVG9EYXRhU2VyaWVzIiksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pLGUoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxveXQucHJvdG90eXBlLCJfdXBkYXRlQ2hhcnQiLG51bGwpLHQoW3MoIl9uYW1lVG9EYXRhU2VyaWVzIiwicnVucyIpLGUoImRlc2lnbjp0eXBlIixPYmplY3QpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLG95dC5wcm90b3R5cGUsIl9zZXJpZXNOYW1lcyIsbnVsbCksdChbYSgiX3RhZ0ZpbHRlciIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sb3l0LnByb3RvdHlwZSwiX3JlZnJlc2hEYXRhU2VyaWVzIixudWxsKSx0KFtzKCJtYXJnaW5DaGFydFNlcmllcyIpLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLG95dC5wcm90b3R5cGUsIl90YWdGaWx0ZXIiLG51bGwpLHQoW3MoInRpdGxlIiksZSgiZGVzaWduOnR5cGUiLFN0cmluZyksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sb3l0LnByb3RvdHlwZSwiX3RpdGxlRGlzcGxheVN0cmluZyIsbnVsbCksb3l0PXQoW2koInRmLWN1c3RvbS1zY2FsYXItbWFyZ2luLWNoYXJ0LWNhcmQiKV0sb3l0KTt2YXIgYXl0PU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLFRZUEVTOltdLGdldFJ1bnNOYW1lZDpmdW5jdGlvbiBzeXQodCl7cmV0dXJuIHdlLmtleXModCkuc29ydChlcil9LGdldFRhZ3M6b3IsZmlsdGVyVGFnczpmdW5jdGlvbiBseXQodCxlKXtsZXQgbj1bXTtyZXR1cm4gZS5mb3JFYWNoKChlPT5uPW4uY29uY2F0KHRbZV0pKSksd2UudW5pcShuKS5zb3J0KGVyKX0sTGlzdGVuS2V5OnBsLEJhc2VTdG9yZTpmbCxDYW5jZWxsZXI6Tk8sRW52aXJvbm1lbnRTdG9yZTptbCxlbnZpcm9ubWVudFN0b3JlOmdsLEV4cGVyaW1lbnRzU3RvcmU6TU8sZXhwZXJpbWVudHNTdG9yZTpFTyxSZXF1ZXN0Q2FuY2VsbGF0aW9uRXJyb3I6YXIsSW52YWxpZFJlcXVlc3RPcHRpb25zRXJyb3I6c3IsUmVxdWVzdE5ldHdvcmtFcnJvcjpscixnZXQgSHR0cE1ldGhvZFR5cGUoKXtyZXR1cm4gY3J9LFJlcXVlc3RPcHRpb25zOnVyLFJlcXVlc3RNYW5hZ2VyOmhyLGNyZWF0ZVJvdXRlcjptcixnZXRSb3V0ZXI6Z3Isc2V0Um91dGVyOmZ1bmN0aW9uIGN5dCh0KXtpZihudWxsPT10KXRocm93IG5ldyBFcnJvcigiUm91dGVyIHJlcXVpcmVkLCBidXQgZ290OiAiK3QpO2ZyPXR9LGNyZWF0ZVNlYXJjaFBhcmFtOnlyLFJ1bnNTdG9yZTpfbCxydW5zU3RvcmU6eWwsYWRkUGFyYW1zOlZPfSk7bGV0IHV5dD1jbGFzcyBleHRlbmRzKHRyKHllKSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuYWN0aXZlPSEwLHRoaXMuX2NvbG9yU2NhbGU9bmV3IHJ5dCh7c2NhbGU6QU99KSx0aGlzLl9uYW1lVG9EYXRhU2VyaWVzPXt9LHRoaXMuX2V4cGFuZGVkPSExLHRoaXMuX3JlcXVlc3REYXRhPSh0LGUsbik9Pntjb25zdCBpPWdyKCkucGx1Z2luUm91dGUoImN1c3RvbV9zY2FsYXJzIiwiL3NjYWxhcnMiKTtQcm9taXNlLmFsbCh0Lm1hcCgodD0+e2NvbnN0IG49Vk8oaSx7dGFnOnRoaXMuX3RhZ0ZpbHRlcixydW46dH0pO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QobikudGhlbigobj0+e2Uoe2l0ZW06dCxkYXRhOm59KX0pKX0pKSkuZmluYWxseSgoKCk9PntuKCl9KSl9LHRoaXMuX3J1blRvTmV4dEF2YWlsYWJsZVN5bWJvbEluZGV4PXt9LHRoaXMuX21hdGNoZXNMaXN0T3BlbmVkPSExfXJlbG9hZCgpe3RoaXMuJC5sb2FkZXIucmVsb2FkKCl9cmVkcmF3KCl7dGhpcy4kLmxvYWRlci5yZWRyYXcoKX1fdG9nZ2xlRXhwYW5kZWQodCl7dGhpcy5zZXQoIl9leHBhbmRlZCIsIXRoaXMuX2V4cGFuZGVkKSx0aGlzLnJlZHJhdygpfV90b2dnbGVMb2dTY2FsZSgpe3RoaXMuc2V0KCJfbG9nU2NhbGVBY3RpdmUiLCF0aGlzLl9sb2dTY2FsZUFjdGl2ZSl9X3Jlc2V0RG9tYWluKCl7Y29uc3QgdD10aGlzLiQubG9hZGVyO3QmJnQucmVzZXREb21haW4oKX1fY3N2VXJsKHQsZSl7cmV0dXJuIGU/Vk8odGhpcy5fZG93bmxvYWREYXRhVXJsKHQsZSkse2Zvcm1hdDoiY3N2In0pOiIifV9qc29uVXJsKHQsZSl7cmV0dXJuIGU/Vk8odGhpcy5fZG93bmxvYWREYXRhVXJsKHQsZSkse2Zvcm1hdDoianNvbiJ9KToiIn1fZG93bmxvYWREYXRhVXJsKHQsZSl7Y29uc3Qgbj10W2VdLGk9e3RhZzpuLmdldFRhZygpLHJ1bjpuLmdldFJ1bigpfTtyZXR1cm4gVk8oZ3IoKS5wbHVnaW5Sb3V0ZSgiY3VzdG9tX3NjYWxhcnMiLCIvZG93bmxvYWRfZGF0YSIpLGkpfV9jcmVhdGVQcm9jZXNzRGF0YUZ1bmN0aW9uKCl7cmV0dXJuKHQsZSxuKT0+e2lmKG4ucmVnZXhfdmFsaWQpe2NvbnN0IHQ9d2UuY2xvbmUodGhpcy5fbmFtZVRvRGF0YVNlcmllcyk7d2UuZm9yT3duKG4udGFnX3RvX2V2ZW50cywoKG4saSk9Pntjb25zdCByPW4ubWFwKCh0PT4oe3dhbGxfdGltZTpuZXcgRGF0ZSgxZTMqdFswXSksc3RlcDp0WzFdLHNjYWxhcjp0WzJdfSkpKSxvPWl5dChlLGkpLGE9dFtvXTtpZihhKWEuc2V0RGF0YShyKTtlbHNle3dlLmlzVW5kZWZpbmVkKHRoaXMuX3J1blRvTmV4dEF2YWlsYWJsZVN5bWJvbEluZGV4W2VdKSYmKHRoaXMuX3J1blRvTmV4dEF2YWlsYWJsZVN5bWJvbEluZGV4W2VdPTApO2NvbnN0IG49bmV3IG55dChlLGksbyxyLGlfdFt0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFtlXV0pO3Rbb109bix0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFtlXT0odGhpcy5fcnVuVG9OZXh0QXZhaWxhYmxlU3ltYm9sSW5kZXhbZV0rMSklaV90Lmxlbmd0aH19KSksdGhpcy5zZXQoIl9uYW1lVG9EYXRhU2VyaWVzIix0KX19fV91cGRhdGVDaGFydCgpe09iamVjdC5lbnRyaWVzKHRoaXMuX25hbWVUb0RhdGFTZXJpZXMpLmZvckVhY2goKChbdCxlXSk9Pnt0aGlzLiQubG9hZGVyLnNldFNlcmllc0RhdGEodCxlLmdldERhdGEoKSl9KSksdGhpcy4kLmxvYWRlci5jb21taXRDaGFuZ2VzKCl9X2NvbXB1dGVTZWxlY3RlZFJ1bnNTZXQodCl7Y29uc3QgZT17fTtyZXR1cm4gd2UuZm9yRWFjaCh0LCh0PT57ZVt0XT0xfSkpLGV9Z2V0IF9zZXJpZXNOYW1lcygpe2NvbnN0IHQ9bmV3IFNldCh0aGlzLnJ1bnMpO3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLl9uYW1lVG9EYXRhU2VyaWVzKS5maWx0ZXIoKChbZSxuXSk9PnQuaGFzKG4ucnVuKSkpLm1hcCgoKFt0XSk9PnQpKX1fZGV0ZXJtaW5lQ29sb3IodCxlKXtyZXR1cm4gdC5zY2FsZShlKX1fcmVmcmVzaERhdGFTZXJpZXMoKXt0aGlzLnNldCgiX25hbWVUb0RhdGFTZXJpZXMiLHt9KX1fY3JlYXRlU3ltYm9sRnVuY3Rpb24oKXtyZXR1cm4gdD0+dGhpcy5fbmFtZVRvRGF0YVNlcmllc1t0XS5nZXRTeW1ib2woKS5tZXRob2QoKX1fZGV0ZXJtaW5lU3ltYm9sKHQsZSl7cmV0dXJuIHRbZV0uZ2V0U3ltYm9sKCkuY2hhcmFjdGVyfWdldCBfdGFnRmlsdGVyKCl7dmFyIHQ9dGhpcy50YWdSZWdleGVzO3JldHVybiAxPT09dC5sZW5ndGg/dFswXTp0Lm1hcCgodD0+IigiK3QrIikiKSkuam9pbigifCIpfV9nZXRUb2dnbGVNYXRjaGVzSWNvbih0KXtyZXR1cm4gdD8iZXhwYW5kLWxlc3MiOiJleHBhbmQtbW9yZSJ9X3RvZ2dsZU1hdGNoZXNPcGVuKCl7dGhpcy5zZXQoIl9tYXRjaGVzTGlzdE9wZW5lZCIsIXRoaXMuX21hdGNoZXNMaXN0T3BlbmVkKX1nZXQgX3RpdGxlRGlzcGxheVN0cmluZygpe3JldHVybiB0aGlzLnRpdGxlfHwidW50aXRsZWQifV9tYXRjaExpc3RFbnRyeUNvbG9yVXBkYXRlZCh0KXtjb25zdCBlPXRoaXMuJCQoIiNtYXRjaC1saXN0LXJlcGVhdCIpO2UmJnRoaXMucm9vdC5xdWVyeVNlbGVjdG9yQWxsKCIubWF0Y2gtbGlzdC1lbnRyeSIpLmZvckVhY2goKHQ9Pntjb25zdCBuPWUuaXRlbUZvckVsZW1lbnQodCk7dC5zdHlsZS5jb2xvcj10aGlzLl9kZXRlcm1pbmVDb2xvcih0aGlzLl9jb2xvclNjYWxlLG4pfSkpfX07dXl0LnRlbXBsYXRlPV9lYAogICAgPHRmLWNhcmQtaGVhZGluZyBkaXNwbGF5LW5hbWU9IltbX3RpdGxlRGlzcGxheVN0cmluZ11dIj48L3RmLWNhcmQtaGVhZGluZz4KICAgIDxkaXYgaWQ9InRmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXItY29udGFpbmVyIj4KICAgICAgPHRmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXIKICAgICAgICBpZD0ibG9hZGVyIgogICAgICAgIGFjdGl2ZT0iW1thY3RpdmVdXSIKICAgICAgICBjb2xvci1zY2FsZT0iW1tfY29sb3JTY2FsZV1dIgogICAgICAgIGRhdGEtc2VyaWVzPSJbW19zZXJpZXNOYW1lc11dIgogICAgICAgIGlnbm9yZS15LW91dGxpZXJzPSJbW2lnbm9yZVlPdXRsaWVyc11dIgogICAgICAgIGxvYWQta2V5PSJbW190YWdGaWx0ZXJdXSIKICAgICAgICBkYXRhLXRvLWxvYWQ9IltbcnVuc11dIgogICAgICAgIHJlcXVlc3QtZGF0YT0iW1tfcmVxdWVzdERhdGFdXSIKICAgICAgICBsb2ctc2NhbGUtYWN0aXZlPSJbW19sb2dTY2FsZUFjdGl2ZV1dIgogICAgICAgIGxvYWQtZGF0YS1jYWxsYmFjaz0iW1tfY3JlYXRlUHJvY2Vzc0RhdGFGdW5jdGlvbigpXV0iCiAgICAgICAgcmVxdWVzdC1tYW5hZ2VyPSJbW3JlcXVlc3RNYW5hZ2VyXV0iCiAgICAgICAgc21vb3RoaW5nLWVuYWJsZWQ9Iltbc21vb3RoaW5nRW5hYmxlZF1dIgogICAgICAgIHNtb290aGluZy13ZWlnaHQ9Iltbc21vb3RoaW5nV2VpZ2h0XV0iCiAgICAgICAgc3ltYm9sLWZ1bmN0aW9uPSJbW19jcmVhdGVTeW1ib2xGdW5jdGlvbigpXV0iCiAgICAgICAgdG9vbHRpcC1zb3J0aW5nLW1ldGhvZD0iW1t0b29sdGlwU29ydGluZ01ldGhvZF1dIgogICAgICAgIHgtdHlwZT0iW1t4VHlwZV1dIgogICAgICA+CiAgICAgIDwvdGYtbGluZS1jaGFydC1kYXRhLWxvYWRlcj4KICAgIDwvZGl2PgogICAgPGRpdiBpZD0iYnV0dG9ucyI+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIHNlbGVjdGVkJD0iW1tfZXhwYW5kZWRdXSIKICAgICAgICBpY29uPSJmdWxsc2NyZWVuIgogICAgICAgIG9uLXRhcD0iX3RvZ2dsZUV4cGFuZGVkIgogICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgc2VsZWN0ZWQkPSJbW19sb2dTY2FsZUFjdGl2ZV1dIgogICAgICAgIGljb249ImxpbmUtd2VpZ2h0IgogICAgICAgIG9uLXRhcD0iX3RvZ2dsZUxvZ1NjYWxlIgogICAgICAgIHRpdGxlPSJUb2dnbGUgeS1heGlzIGxvZyBzY2FsZSIKICAgICAgPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIGljb249InNldHRpbmdzLW92ZXJzY2FuIgogICAgICAgIG9uLXRhcD0iX3Jlc2V0RG9tYWluIgogICAgICAgIHRpdGxlPSJGaXQgZG9tYWluIHRvIGRhdGEiCiAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICA8c3BhbiBzdHlsZT0iZmxleC1ncm93OiAxIj48L3NwYW4+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzaG93RG93bmxvYWRMaW5rc11dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJkb3dubG9hZC1saW5rcyI+CiAgICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudQogICAgICAgICAgICBuby1sYWJlbC1mbG9hdD0idHJ1ZSIKICAgICAgICAgICAgbGFiZWw9InNlcmllcyB0byBkb3dubG9hZCIKICAgICAgICAgICAgc2VsZWN0ZWQtaXRlbS1sYWJlbD0ie3tfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkfX0iCiAgICAgICAgICA+CiAgICAgICAgICAgIDxwYXBlci1saXN0Ym94IGNsYXNzPSJkcm9wZG93bi1jb250ZW50IiBzbG90PSJkcm9wZG93bi1jb250ZW50Ij4KICAgICAgICAgICAgICA8dGVtcGxhdGUKICAgICAgICAgICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgICAgICAgICAgaXRlbXM9IltbX3Nlcmllc05hbWVzXV0iCiAgICAgICAgICAgICAgICBhcz0iZGF0YVNlcmllc05hbWUiCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0gbm8tbGFiZWwtZmxvYXQ9InRydWUiCiAgICAgICAgICAgICAgICAgID5bW2RhdGFTZXJpZXNOYW1lXV08L3BhcGVyLWl0ZW0KICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgICAgICA8YQogICAgICAgICAgICBkb3dubG9hZD0iW1tfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkXV0uY3N2IgogICAgICAgICAgICBocmVmPSJbW19jc3ZVcmwoX25hbWVUb0RhdGFTZXJpZXMsIF9kYXRhU2VyaWVzTmFtZVRvRG93bmxvYWQpXV0iCiAgICAgICAgICAgID5DU1Y8L2EKICAgICAgICAgID4KICAgICAgICAgIDxhCiAgICAgICAgICAgIGRvd25sb2FkPSJbW19kYXRhU2VyaWVzTmFtZVRvRG93bmxvYWRdXS5qc29uIgogICAgICAgICAgICBocmVmPSJbW19qc29uVXJsKF9uYW1lVG9EYXRhU2VyaWVzLCBfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkKV1dIgogICAgICAgICAgICA+SlNPTjwvYQogICAgICAgICAgPgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CiAgICA8ZGl2IGlkPSJtYXRjaGVzLWNvbnRhaW5lciI+CiAgICAgIDxkaXYgaWQ9Im1hdGNoZXMtbGlzdC10aXRsZSI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19zZXJpZXNOYW1lcy5sZW5ndGhdXSI+CiAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICAgICAgaWNvbj0iW1tfZ2V0VG9nZ2xlTWF0Y2hlc0ljb24oX21hdGNoZXNMaXN0T3BlbmVkKV1dIgogICAgICAgICAgICBvbi1jbGljaz0iX3RvZ2dsZU1hdGNoZXNPcGVuIgogICAgICAgICAgICBjbGFzcz0idG9nZ2xlLW1hdGNoZXMtYnV0dG9uIgogICAgICAgICAgPgogICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICA8L3RlbXBsYXRlPgoKICAgICAgICA8c3BhbiBjbGFzcz0ibWF0Y2hlcy10ZXh0Ij4gTWF0Y2hlcyAoW1tfc2VyaWVzTmFtZXMubGVuZ3RoXV0pIDwvc3Bhbj4KICAgICAgPC9kaXY+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfc2VyaWVzTmFtZXMubGVuZ3RoXV0iPgogICAgICAgIDxpcm9uLWNvbGxhcHNlIG9wZW5lZD0iW1tfbWF0Y2hlc0xpc3RPcGVuZWRdXSI+CiAgICAgICAgICA8ZGl2IGlkPSJtYXRjaGVzLWxpc3QiPgogICAgICAgICAgICA8dGVtcGxhdGUKICAgICAgICAgICAgICBpcz0iZG9tLXJlcGVhdCIKICAgICAgICAgICAgICBpdGVtcz0iW1tfc2VyaWVzTmFtZXNdXSIKICAgICAgICAgICAgICBhcz0ic2VyaWVzTmFtZSIKICAgICAgICAgICAgICBpZD0ibWF0Y2gtbGlzdC1yZXBlYXQiCiAgICAgICAgICAgICAgb24tZG9tLWNoYW5nZT0iX21hdGNoTGlzdEVudHJ5Q29sb3JVcGRhdGVkIgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWF0Y2gtbGlzdC1lbnRyeSI+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibWF0Y2gtZW50cnktc3ltYm9sIj4KICAgICAgICAgICAgICAgICAgW1tfZGV0ZXJtaW5lU3ltYm9sKF9uYW1lVG9EYXRhU2VyaWVzLCBzZXJpZXNOYW1lKV1dCiAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICBbW3Nlcmllc05hbWVdXQogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9pcm9uLWNvbGxhcHNlPgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CgogICAgPHN0eWxlIGluY2x1ZGU9InRmLWN1c3RvbS1zY2FsYXItY2FyZC1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgI21hdGNoZXMtbGlzdC10aXRsZSB7CiAgICAgICAgbWFyZ2luOiAxMHB4IDAgNXB4IDA7CiAgICAgIH0KCiAgICAgICNtYXRjaGVzLWxpc3QgewogICAgICAgIG1heC1oZWlnaHQ6IDIwMHB4OwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgIH0KCiAgICAgIC5tYXRjaC1saXN0LWVudHJ5IHsKICAgICAgICBtYXJnaW46IDAgMCA1cHggMDsKICAgICAgfQoKICAgICAgLm1hdGNoLWVudHJ5LXN5bWJvbCB7CiAgICAgICAgZm9udC1mYW1pbHk6IGFyaWFsLCBzYW5zLXNlcmlmOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB3aWR0aDogMTBweDsKICAgICAgfQoKICAgICAgLm1hdGNoZXMtdGV4dCB7CiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgLHQoW28oe3R5cGU6QXJyYXl9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSx1eXQucHJvdG90eXBlLCJydW5zIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLHV5dC5wcm90b3R5cGUsInhUeXBlIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sdXl0LnByb3RvdHlwZSwiYWN0aXZlIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLHV5dC5wcm90b3R5cGUsInRpdGxlIix2b2lkIDApLHQoW28oe3R5cGU6QXJyYXl9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSx1eXQucHJvdG90eXBlLCJ0YWdSZWdleGVzIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sdXl0LnByb3RvdHlwZSwiaWdub3JlWU91dGxpZXJzIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLGhyKV0sdXl0LnByb3RvdHlwZSwicmVxdWVzdE1hbmFnZXIiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSx1eXQucHJvdG90eXBlLCJzaG93RG93bmxvYWRMaW5rcyIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHV5dC5wcm90b3R5cGUsInNtb290aGluZ0VuYWJsZWQiLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXJ9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sdXl0LnByb3RvdHlwZSwic21vb3RoaW5nV2VpZ2h0Iix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLHV5dC5wcm90b3R5cGUsInRhZ01ldGFkYXRhIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLHV5dC5wcm90b3R5cGUsInRvb2x0aXBTb3J0aW5nTWV0aG9kIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLHJ5dCldLHV5dC5wcm90b3R5cGUsIl9jb2xvclNjYWxlIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLHV5dC5wcm90b3R5cGUsIl9uYW1lVG9EYXRhU2VyaWVzIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHV5dC5wcm90b3R5cGUsIl9leHBhbmRlZCIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHV5dC5wcm90b3R5cGUsIl9sb2dTY2FsZUFjdGl2ZSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLHV5dC5wcm90b3R5cGUsIl9yZXF1ZXN0RGF0YSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSx1eXQucHJvdG90eXBlLCJfcnVuVG9OZXh0QXZhaWxhYmxlU3ltYm9sSW5kZXgiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSx1eXQucHJvdG90eXBlLCJfbWF0Y2hlc0xpc3RPcGVuZWQiLHZvaWQgMCksdChbYSgiX25hbWVUb0RhdGFTZXJpZXMiKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLHV5dC5wcm90b3R5cGUsIl91cGRhdGVDaGFydCIsbnVsbCksdChbcygiX25hbWVUb0RhdGFTZXJpZXMiLCJydW5zIiksZSgiZGVzaWduOnR5cGUiLE9iamVjdCksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sdXl0LnByb3RvdHlwZSwiX3Nlcmllc05hbWVzIixudWxsKSx0KFthKCJfdGFnRmlsdGVyIiksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pLGUoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSx1eXQucHJvdG90eXBlLCJfcmVmcmVzaERhdGFTZXJpZXMiLG51bGwpLHQoW3MoInRhZ1JlZ2V4ZXMiKSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSx1eXQucHJvdG90eXBlLCJfdGFnRmlsdGVyIixudWxsKSx0KFtzKCJ0aXRsZSIpLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLHV5dC5wcm90b3R5cGUsIl90aXRsZURpc3BsYXlTdHJpbmciLG51bGwpLHV5dD10KFtpKCJ0Zi1jdXN0b20tc2NhbGFyLW11bHRpLWxpbmUtY2hhcnQtY2FyZCIpXSx1eXQpO2xldCBoeXQ9Y2xhc3MgZXh0ZW5kcyB5ZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fcmVxdWVzdE1hbmFnZXI9bmV3IGhyKDUwKSx0aGlzLl9jYW5jZWxsZXI9bmV3IE5PLHRoaXMuX3Nob3dEb3dubG9hZExpbmtzPUJzKCJfc2hvd0Rvd25sb2FkTGlua3MiLHtkZWZhdWx0VmFsdWU6ITEsdXNlTG9jYWxTdG9yYWdlOiEwfSkuY2FsbCh0aGlzKSx0aGlzLl9zbW9vdGhpbmdXZWlnaHQ9anMoIl9zbW9vdGhpbmdXZWlnaHQiLHtkZWZhdWx0VmFsdWU6LjZ9KS5jYWxsKHRoaXMpLHRoaXMuX2lnbm9yZVlPdXRsaWVycz1CcygiX2lnbm9yZVlPdXRsaWVycyIse2RlZmF1bHRWYWx1ZTohMCx1c2VMb2NhbFN0b3JhZ2U6ITB9KS5jYWxsKHRoaXMpLHRoaXMuX3hUeXBlPSJzdGVwIix0aGlzLl9hY3RpdmU9ITAsdGhpcy5yZWxvYWRPblJlYWR5PSEwLHRoaXMuX3Nob3dEb3dubG9hZExpbmtzT2JzZXJ2ZXI9SHMoIl9zaG93RG93bmxvYWRMaW5rcyIse2RlZmF1bHRWYWx1ZTohMSx1c2VMb2NhbFN0b3JhZ2U6ITB9KSx0aGlzLl9zbW9vdGhpbmdXZWlnaHRPYnNlcnZlcj1HcygiX3Ntb290aGluZ1dlaWdodCIse2RlZmF1bHRWYWx1ZTouNn0pLHRoaXMuX2lnbm9yZVlPdXRsaWVyc09ic2VydmVyPUhzKCJfaWdub3JlWU91dGxpZXJzIix7ZGVmYXVsdFZhbHVlOiEwLHVzZUxvY2FsU3RvcmFnZTohMH0pfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLnJlbG9hZE9uUmVhZHkmJnRoaXMucmVsb2FkKCl9cmVsb2FkKCl7Y29uc3QgdD1ncigpLnBsdWdpbnNMaXN0aW5nKCksZT10aGlzLl9jYW5jZWxsZXIuY2FuY2VsbGFibGUoKHQ9Pnt0LmNhbmNlbGxlZHx8KHRoaXMuc2V0KCJfZGF0YU5vdEZvdW5kIiwhdC52YWx1ZS5jdXN0b21fc2NhbGFycyksdGhpcy5fZGF0YU5vdEZvdW5kfHx0aGlzLl9yZXRyaWV2ZUxheW91dEFuZERhdGEoKSl9KSk7dGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKGUpfV9yZWxvYWRDaGFydHMoKXt0aGlzLnJvb3QucXVlcnlTZWxlY3RvckFsbCgidGYtY3VzdG9tLXNjYWxhci1tYXJnaW4tY2hhcnQtY2FyZCwgdGYtY3VzdG9tLXNjYWxhci1tdWx0aS1saW5lLWNoYXJ0LWNhcmQiKS5mb3JFYWNoKCh0PT57dC5yZWxvYWQoKX0pKX1fcmV0cmlldmVMYXlvdXRBbmREYXRhKCl7Y29uc3QgdD1ncigpLnBsdWdpblJvdXRlKCJjdXN0b21fc2NhbGFycyIsIi9sYXlvdXQiKSxlPXRoaXMuX2NhbmNlbGxlci5jYW5jZWxsYWJsZSgodD0+e3QuY2FuY2VsbGVkfHwodGhpcy5zZXQoIl9sYXlvdXQiLHQudmFsdWUpLHRoaXMuX2RhdGFOb3RGb3VuZHx8dGhpcy5fcmVsb2FkQ2hhcnRzKCkpfSkpO3RoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbihlKX1nZXQgX3Ntb290aGluZ0VuYWJsZWQoKXtyZXR1cm4gdGhpcy5fc21vb3RoaW5nV2VpZ2h0PjB9Z2V0IF9jYXRlZ29yaWVzKCl7dmFyIHQ9dGhpcy5fbGF5b3V0O2lmKCF0LmNhdGVnb3J5KXJldHVybltdO2xldCBlPSExO3JldHVybiB0aGlzLl9vcGVuZWRDYXRlZ29yaWVzfHwoZT0hMCx0aGlzLl9vcGVuZWRDYXRlZ29yaWVzPXt9KSx0LmNhdGVnb3J5Lm1hcCgodD0+KGUmJiF0LmNsb3NlZCYmKHRoaXMuX29wZW5lZENhdGVnb3JpZXNbdC50aXRsZV09ITApLHtuYW1lOnQudGl0bGUsaXRlbXM6dC5jaGFydCxtZXRhZGF0YTp7dHlwZTp2ci5QUkVGSVhfR1JPVVAsb3BlbmVkOiEhdGhpcy5fb3BlbmVkQ2F0ZWdvcmllc1t0LnRpdGxlXX19KSkpfV9jYXRlZ29yeU9wZW5lZFRvZ2dsZWQodCl7Y29uc3QgZT10LnRhcmdldDtlLm9wZW5lZD90aGlzLl9vcGVuZWRDYXRlZ29yaWVzW2UuY2F0ZWdvcnkubmFtZV09ITA6ZGVsZXRlIHRoaXMuX29wZW5lZENhdGVnb3JpZXNbZS5jYXRlZ29yeS5uYW1lXX19O2h5dC50ZW1wbGF0ZT1fZWAKICAgIDx0Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyIiBzbG90PSJzaWRlYmFyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZXR0aW5ncyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJsaW5lLWl0ZW0iPgogICAgICAgICAgICAgIDxwYXBlci1jaGVja2JveCBjaGVja2VkPSJ7e19zaG93RG93bmxvYWRMaW5rc319IgogICAgICAgICAgICAgICAgPlNob3cgZGF0YSBkb3dubG9hZCBsaW5rczwvcGFwZXItY2hlY2tib3gKICAgICAgICAgICAgICA+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJsaW5lLWl0ZW0iPgogICAgICAgICAgICAgIDxwYXBlci1jaGVja2JveCBjaGVja2VkPSJ7e19pZ25vcmVZT3V0bGllcnN9fSIKICAgICAgICAgICAgICAgID5JZ25vcmUgb3V0bGllcnMgaW4gY2hhcnQgc2NhbGluZzwvcGFwZXItY2hlY2tib3gKICAgICAgICAgICAgICA+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGlkPSJ0b29sdGlwLXNvcnRpbmciPgogICAgICAgICAgICAgIDxkaXYgaWQ9InRvb2x0aXAtc29ydGluZy1sYWJlbCI+VG9vbHRpcCBzb3J0aW5nIG1ldGhvZDo8L2Rpdj4KICAgICAgICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudQogICAgICAgICAgICAgICAgbm8tbGFiZWwtZmxvYXQ9IiIKICAgICAgICAgICAgICAgIHNlbGVjdGVkLWl0ZW0tbGFiZWw9Int7X3Rvb2x0aXBTb3J0aW5nTWV0aG9kfX0iCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPHBhcGVyLWxpc3Rib3gKICAgICAgICAgICAgICAgICAgY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiCiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkPSIwIgogICAgICAgICAgICAgICAgICBzbG90PSJkcm9wZG93bi1jb250ZW50IgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICA8cGFwZXItaXRlbT5kZWZhdWx0PC9wYXBlci1pdGVtPgogICAgICAgICAgICAgICAgICA8cGFwZXItaXRlbT5kZXNjZW5kaW5nPC9wYXBlci1pdGVtPgogICAgICAgICAgICAgICAgICA8cGFwZXItaXRlbT5hc2NlbmRpbmc8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPm5lYXJlc3Q8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgICAgICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgICAgPHRmLXNtb290aGluZy1pbnB1dAogICAgICAgICAgICAgIHdlaWdodD0ie3tfc21vb3RoaW5nV2VpZ2h0fX0iCiAgICAgICAgICAgICAgc3RlcD0iMC4wMDEiCiAgICAgICAgICAgICAgbWluPSIwIgogICAgICAgICAgICAgIG1heD0iMSIKICAgICAgICAgICAgPjwvdGYtc21vb3RoaW5nLWlucHV0PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgICA8dGYtb3B0aW9uLXNlbGVjdG9yCiAgICAgICAgICAgICAgaWQ9IngtdHlwZS1zZWxlY3RvciIKICAgICAgICAgICAgICBuYW1lPSJIb3Jpem9udGFsIEF4aXMiCiAgICAgICAgICAgICAgc2VsZWN0ZWQtaWQ9Int7X3hUeXBlfX0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJzdGVwIj5zdGVwPC9wYXBlci1idXR0b24KICAgICAgICAgICAgICA+PCEtLQogICAgICAgICAgICAtLT48cGFwZXItYnV0dG9uIGlkPSJyZWxhdGl2ZSI+cmVsYXRpdmU8L3BhcGVyLWJ1dHRvbgogICAgICAgICAgICAgID48IS0tCiAgICAgICAgICAgIC0tPjxwYXBlci1idXR0b24gaWQ9IndhbGxfdGltZSI+d2FsbDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICA8L3RmLW9wdGlvbi1zZWxlY3Rvcj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiBydW5zLXNlbGVjdG9yIj4KICAgICAgICAgIDx0Zi1ydW5zLXNlbGVjdG9yIHNlbGVjdGVkLXJ1bnM9Int7X3NlbGVjdGVkUnVuc319Ij4KICAgICAgICAgIDwvdGYtcnVucy1zZWxlY3Rvcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNlbnRlciIgc2xvdD0iY2VudGVyIiBpZD0iY2F0ZWdvcmllcy1jb250YWluZXIiPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPGRpdiBjbGFzcz0ibm8tZGF0YS13YXJuaW5nIj4KICAgICAgICAgICAgPGgzPlRoZSBjdXN0b20gc2NhbGFycyBkYXNoYm9hcmQgaXMgaW5hY3RpdmUuPC9oMz4KICAgICAgICAgICAgPHA+UHJvYmFibGUgY2F1c2VzOjwvcD4KICAgICAgICAgICAgPG9sPgogICAgICAgICAgICAgIDxsaT5Zb3UgaGF2ZW4ndCBsYWlkIG91dCB0aGUgZGFzaGJvYXJkLjwvbGk+CiAgICAgICAgICAgICAgPGxpPllvdSBoYXZlbuKAmXQgd3JpdHRlbiBhbnkgc2NhbGFyIGRhdGEgdG8geW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICA8L29sPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgVG8gbGF5IG91dCB0aGUgZGFzaGJvYXJkLCBwYXNzIGEgPGNvZGU+TGF5b3V0PC9jb2RlPiBwcm90b2J1ZmZlcgogICAgICAgICAgICAgIHRvIHRoZSA8Y29kZT5zZXRfbGF5b3V0PC9jb2RlPiBtZXRob2QuIEZvciBleGFtcGxlLAogICAgICAgICAgICA8L3A+CiAgICAgICAgICAgIDxwcmU+CmZyb20gdGVuc29yYm9hcmQgaW1wb3J0IHN1bW1hcnkKZnJvbSB0ZW5zb3Jib2FyZC5wbHVnaW5zLmN1c3RvbV9zY2FsYXIgaW1wb3J0IGxheW91dF9wYjIKLi4uCiMgVGhpcyBhY3Rpb24gZG9lcyBub3QgaGF2ZSB0byBiZSBwZXJmb3JtZWQgYXQgZXZlcnkgc3RlcCwgc28gdGhlIGFjdGlvbiBpcyBub3QKIyB0YWtlbiBjYXJlIG9mIGJ5IGFuIG9wIGluIHRoZSBncmFwaC4gV2Ugb25seSBuZWVkIHRvIHNwZWNpZnkgdGhlIGxheW91dCBvbmNlCiMgKGluc3RlYWQgb2YgcGVyIHN0ZXApLgpsYXlvdXRfc3VtbWFyeSA9IHN1bW1hcnlfbGliLmN1c3RvbV9zY2FsYXJfcGIobGF5b3V0X3BiMi5MYXlvdXQoCiAgY2F0ZWdvcnk9WwogICAgbGF5b3V0X3BiMi5DYXRlZ29yeSgKICAgICAgdGl0bGU9J2xvc3NlcycsCiAgICAgIGNoYXJ0PVsKICAgICAgICAgIGxheW91dF9wYjIuQ2hhcnQoCiAgICAgICAgICAgICAgdGl0bGU9J2xvc3NlcycsCiAgICAgICAgICAgICAgbXVsdGlsaW5lPWxheW91dF9wYjIuTXVsdGlsaW5lQ2hhcnRDb250ZW50KAogICAgICAgICAgICAgICAgdGFnPVtyJ2xvc3MuKiddLAogICAgICAgICAgICAgICkpLAogICAgICAgICAgbGF5b3V0X3BiMi5DaGFydCgKICAgICAgICAgICAgICB0aXRsZT0nYmF6JywKICAgICAgICAgICAgICBtYXJnaW49bGF5b3V0X3BiMi5NYXJnaW5DaGFydENvbnRlbnQoCiAgICAgICAgICAgICAgICBzZXJpZXM9WwogICAgICAgICAgICAgICAgICBsYXlvdXRfcGIyLk1hcmdpbkNoYXJ0Q29udGVudC5TZXJpZXMoCiAgICAgICAgICAgICAgICAgICAgdmFsdWU9J2xvc3MvYmF6L3NjYWxhcl9zdW1tYXJ5JywKICAgICAgICAgICAgICAgICAgICBsb3dlcj0nYmF6X2xvd2VyL2Jhei9zY2FsYXJfc3VtbWFyeScsCiAgICAgICAgICAgICAgICAgICAgdXBwZXI9J2Jhel91cHBlci9iYXovc2NhbGFyX3N1bW1hcnknKSwKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgKSksCiAgICAgIF0pLAogICAgbGF5b3V0X3BiMi5DYXRlZ29yeSgKICAgICAgdGl0bGU9J3RyaWcgZnVuY3Rpb25zJywKICAgICAgY2hhcnQ9WwogICAgICAgICAgbGF5b3V0X3BiMi5DaGFydCgKICAgICAgICAgICAgICB0aXRsZT0nd2F2ZSB0cmlnIGZ1bmN0aW9ucycsCiAgICAgICAgICAgICAgbXVsdGlsaW5lPWxheW91dF9wYjIuTXVsdGlsaW5lQ2hhcnRDb250ZW50KAogICAgICAgICAgICAgICAgdGFnPVtyJ3RyaWdGdW5jdGlvbnMvY29zaW5lJywgcid0cmlnRnVuY3Rpb25zL3NpbmUnXSwKICAgICAgICAgICAgICApKSwKICAgICAgICAgICMgVGhlIHJhbmdlIG9mIHRhbmdlbnQgaXMgZGlmZmVyZW50LiBMZXQncyBnaXZlIGl0IGl0cyBvd24gY2hhcnQuCiAgICAgICAgICBsYXlvdXRfcGIyLkNoYXJ0KAogICAgICAgICAgICAgIHRpdGxlPSd0YW4nLAogICAgICAgICAgICAgIG11bHRpbGluZT1sYXlvdXRfcGIyLk11bHRpbGluZUNoYXJ0Q29udGVudCgKICAgICAgICAgICAgICAgIHRhZz1bcid0cmlnRnVuY3Rpb25zL3RhbmdlbnQnXSwKICAgICAgICAgICAgICApKSwKICAgICAgXSwKICAgICAgIyBUaGlzIGNhdGVnb3J5IHdlIGNhcmUgbGVzcyBhYm91dC4gTGV0J3MgbWFrZSBpdCBpbml0aWFsbHkgY2xvc2VkLgogICAgICBjbG9zZWQ9VHJ1ZSksCiAgXSkpCndyaXRlci5hZGRfc3VtbWFyeShsYXlvdXRfc3VtbWFyeSkKPC9wcmUKICAgICAgICAgICAgPgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3XigJlyZSBuZXcgdG8gdXNpbmcgVGVuc29yQm9hcmQsIGFuZCB3YW50IHRvIGZpbmQgb3V0IGhvdyB0bwogICAgICAgICAgICAgIGFkZCBkYXRhIGFuZCBzZXQgdXAgeW91ciBldmVudCBmaWxlcywgY2hlY2sgb3V0IHRoZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQiCiAgICAgICAgICAgICAgICA+UkVBRE1FPC9hCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIGFuZCBwZXJoYXBzIHRoZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9nZXRfc3RhcnRlZC9zdW1tYXJpZXNfYW5kX3RlbnNvcmJvYXJkIgogICAgICAgICAgICAgICAgPlRlbnNvckJvYXJkIHR1dG9yaWFsPC9hCiAgICAgICAgICAgICAgPi4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jYXRlZ29yaWVzXV0iIGFzPSJjYXRlZ29yeSI+CiAgICAgICAgICAgIDx0Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldwogICAgICAgICAgICAgIGFzPSJjaGFydCIKICAgICAgICAgICAgICBjYXRlZ29yeT0iW1tjYXRlZ29yeV1dIgogICAgICAgICAgICAgIGRpc2FibGUtcGFnaW5hdGlvbgogICAgICAgICAgICAgIGluaXRpYWwtb3BlbmVkPSJbW2NhdGVnb3J5Lm1ldGFkYXRhLm9wZW5lZF1dIgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2NoYXJ0Lm11bHRpbGluZV1dIj4KICAgICAgICAgICAgICAgICAgPHRmLWN1c3RvbS1zY2FsYXItbXVsdGktbGluZS1jaGFydC1jYXJkCiAgICAgICAgICAgICAgICAgICAgYWN0aXZlPSJbW2FjdGl2ZV1dIgogICAgICAgICAgICAgICAgICAgIHJlcXVlc3QtbWFuYWdlcj0iW1tfcmVxdWVzdE1hbmFnZXJdXSIKICAgICAgICAgICAgICAgICAgICBydW5zPSJbW19zZWxlY3RlZFJ1bnNdXSIKICAgICAgICAgICAgICAgICAgICB0aXRsZT0iW1tjaGFydC50aXRsZV1dIgogICAgICAgICAgICAgICAgICAgIHgtdHlwZT0iW1tfeFR5cGVdXSIKICAgICAgICAgICAgICAgICAgICBzbW9vdGhpbmctZW5hYmxlZD0iW1tfc21vb3RoaW5nRW5hYmxlZF1dIgogICAgICAgICAgICAgICAgICAgIHNtb290aGluZy13ZWlnaHQ9IltbX3Ntb290aGluZ1dlaWdodF1dIgogICAgICAgICAgICAgICAgICAgIHRvb2x0aXAtc29ydGluZy1tZXRob2Q9IltbdG9vbHRpcFNvcnRpbmdNZXRob2RdXSIKICAgICAgICAgICAgICAgICAgICBpZ25vcmUteS1vdXRsaWVycz0iW1tfaWdub3JlWU91dGxpZXJzXV0iCiAgICAgICAgICAgICAgICAgICAgc2hvdy1kb3dubG9hZC1saW5rcz0iW1tfc2hvd0Rvd25sb2FkTGlua3NdXSIKICAgICAgICAgICAgICAgICAgICB0YWctcmVnZXhlcz0iW1tjaGFydC5tdWx0aWxpbmUudGFnXV0iCiAgICAgICAgICAgICAgICAgID48L3RmLWN1c3RvbS1zY2FsYXItbXVsdGktbGluZS1jaGFydC1jYXJkPgogICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tjaGFydC5tYXJnaW5dXSI+CiAgICAgICAgICAgICAgICAgIDx0Zi1jdXN0b20tc2NhbGFyLW1hcmdpbi1jaGFydC1jYXJkCiAgICAgICAgICAgICAgICAgICAgYWN0aXZlPSJbW2FjdGl2ZV1dIgogICAgICAgICAgICAgICAgICAgIHJlcXVlc3QtbWFuYWdlcj0iW1tfcmVxdWVzdE1hbmFnZXJdXSIKICAgICAgICAgICAgICAgICAgICBydW5zPSJbW19zZWxlY3RlZFJ1bnNdXSIKICAgICAgICAgICAgICAgICAgICB0aXRsZT0iW1tjaGFydC50aXRsZV1dIgogICAgICAgICAgICAgICAgICAgIHgtdHlwZT0iW1tfeFR5cGVdXSIKICAgICAgICAgICAgICAgICAgICB0b29sdGlwLXNvcnRpbmctbWV0aG9kPSJbW3Rvb2x0aXBTb3J0aW5nTWV0aG9kXV0iCiAgICAgICAgICAgICAgICAgICAgaWdub3JlLXktb3V0bGllcnM9IltbX2lnbm9yZVlPdXRsaWVyc11dIgogICAgICAgICAgICAgICAgICAgIHNob3ctZG93bmxvYWQtbGlua3M9IltbX3Nob3dEb3dubG9hZExpbmtzXV0iCiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWNoYXJ0LXNlcmllcz0iW1tjaGFydC5tYXJnaW4uc2VyaWVzXV0iCiAgICAgICAgICAgICAgICAgID48L3RmLWN1c3RvbS1zY2FsYXItbWFyZ2luLWNoYXJ0LWNhcmQ+CiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvdGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXc+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC90Zi1kYXNoYm9hcmQtbGF5b3V0PgoKICAgIDxzdHlsZSBpbmNsdWRlPSJkYXNoYm9hcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgICN0b29sdGlwLXNvcnRpbmcgewogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgbWFyZ2luLXRvcDogMTVweDsKICAgICAgfQogICAgICAjdG9vbHRpcC1zb3J0aW5nIHBhcGVyLWRyb3Bkb3duLW1lbnUgewogICAgICAgIG1hcmdpbi1sZWZ0OiAxMHB4OwogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWZvY3VzLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICB3aWR0aDogMTA1cHg7CiAgICAgIH0KICAgICAgLmxpbmUtaXRlbSB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcGFkZGluZy10b3A6IDVweDsKICAgICAgfQogICAgICAubm8tZGF0YS13YXJuaW5nIHsKICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OwogICAgICAgIG1hcmdpbjogODBweCBhdXRvIDAgYXV0bzsKICAgICAgfQogICAgPC9zdHlsZT4KICBgLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLGhyKV0saHl0LnByb3RvdHlwZSwiX3JlcXVlc3RNYW5hZ2VyIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE5PKV0saHl0LnByb3RvdHlwZSwiX2NhbmNlbGxlciIsdm9pZCAwKSx0KFtvKHt0eXBlOkFycmF5fSksZSgiZGVzaWduOnR5cGUiLEFycmF5KV0saHl0LnByb3RvdHlwZSwiX3NlbGVjdGVkUnVucyIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwLG9ic2VydmVyOiJfc2hvd0Rvd25sb2FkTGlua3NPYnNlcnZlciJ9KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGh5dC5wcm90b3R5cGUsIl9zaG93RG93bmxvYWRMaW5rcyIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcixub3RpZnk6ITAsb2JzZXJ2ZXI6Il9zbW9vdGhpbmdXZWlnaHRPYnNlcnZlciJ9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0saHl0LnByb3RvdHlwZSwiX3Ntb290aGluZ1dlaWdodCIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW4sb2JzZXJ2ZXI6Il9pZ25vcmVZT3V0bGllcnNPYnNlcnZlciJ9KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGh5dC5wcm90b3R5cGUsIl9pZ25vcmVZT3V0bGllcnMiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0saHl0LnByb3RvdHlwZSwiX3hUeXBlIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLGh5dC5wcm90b3R5cGUsIl9sYXlvdXQiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxoeXQucHJvdG90eXBlLCJfZGF0YU5vdEZvdW5kIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLGh5dC5wcm90b3R5cGUsIl9vcGVuZWRDYXRlZ29yaWVzIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0saHl0LnByb3RvdHlwZSwiX2FjdGl2ZSIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGh5dC5wcm90b3R5cGUsInJlbG9hZE9uUmVhZHkiLHZvaWQgMCksdChbcygiX3Ntb290aGluZ1dlaWdodCIpLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxoeXQucHJvdG90eXBlLCJfc21vb3RoaW5nRW5hYmxlZCIsbnVsbCksdChbcygiX2xheW91dCIpLGUoImRlc2lnbjp0eXBlIixBcnJheSksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0saHl0LnByb3RvdHlwZSwiX2NhdGVnb3JpZXMiLG51bGwpLGh5dD10KFtpKCJ0Zi1jdXN0b20tc2NhbGFyLWRhc2hib2FyZCIpXSxoeXQpO2NsYXNzIGR5dHtjb25zdHJ1Y3Rvcih0LGUpe3RoaXMucnVuMmRhdGFzZXRzPXt9LHRoaXMuY29sb3JTY2FsZT1lLHRoaXMuYnVpbGRDaGFydCh0KX1nZXREYXRhc2V0KHQpe3JldHVybiB2b2lkIDA9PT10aGlzLnJ1bjJkYXRhc2V0c1t0XSYmKHRoaXMucnVuMmRhdGFzZXRzW3RdPW5ldyBuX3QuRGF0YXNldChbXSx7cnVuOnR9KSksdGhpcy5ydW4yZGF0YXNldHNbdF19YnVpbGRDaGFydCh0KXt0aGlzLm91dGVyJiZ0aGlzLm91dGVyLmRlc3Ryb3koKTtsZXQgZT1oX3QodCk7dGhpcy54QWNjZXNzb3I9ZS5hY2Nlc3Nvcix0aGlzLnhTY2FsZT1lLnNjYWxlLHRoaXMueEF4aXM9ZS5heGlzLHRoaXMueEF4aXMubWFyZ2luKDApLHRoaXMueEF4aXMudGlja0xhYmVsUGFkZGluZygzKSx0aGlzLnlTY2FsZT1uZXcgbl90LlNjYWxlcy5MaW5lYXIsdGhpcy55QXhpcz1uZXcgbl90LkF4ZXMuTnVtZXJpYyh0aGlzLnlTY2FsZSwibGVmdCIpO2xldCBuPW9fdCgzKTt0aGlzLnlBeGlzLm1hcmdpbigwKS50aWNrTGFiZWxQYWRkaW5nKDUpLmZvcm1hdHRlcihuKSx0aGlzLnlBeGlzLnVzZXNUZXh0V2lkdGhBcHByb3hpbWF0aW9uKCEwKTtsZXQgaT10aGlzLmJ1aWxkUGxvdCh0aGlzLnhBY2Nlc3Nvcix0aGlzLnhTY2FsZSx0aGlzLnlTY2FsZSk7dGhpcy5ncmlkbGluZXM9bmV3IG5fdC5Db21wb25lbnRzLkdyaWRsaW5lcyh0aGlzLnhTY2FsZSx0aGlzLnlTY2FsZSksdGhpcy5jZW50ZXI9bmV3IG5fdC5Db21wb25lbnRzLkdyb3VwKFt0aGlzLmdyaWRsaW5lcyxpXSksdGhpcy5vdXRlcj1uZXcgbl90LkNvbXBvbmVudHMuVGFibGUoW1t0aGlzLnlBeGlzLHRoaXMuY2VudGVyXSxbbnVsbCx0aGlzLnhBeGlzXV0pfWJ1aWxkUGxvdCh0LGUsbil7bGV0IGk9WzAsMjI4LDE1ODcsMzA4NSw1ZTMsNjkxNSw4NDEzLDk3NzIsMWU0XSxyPXdlLnJhbmdlKGkubGVuZ3RoLTEpLm1hcCgodD0+KGlbdCsxXS1pW3RdKS8yNTAwKSksbz1pLm1hcCgoKHQsZSk9PnQ9PnRbZV1bMV0pKSxhPW9bNF0scz13ZS5yYW5nZShvLmxlbmd0aC0xKS5tYXAoKGk9PntsZXQgYT1uZXcgbl90LlBsb3RzLkFyZWE7YS54KHQsZSk7bGV0IHM9aT40P29baV06b1tpKzFdO3JldHVybiBhLnkoaT40P29baSsxXTpvW2ldLG4pLGEueTAocyksYS5hdHRyKCJmaWxsIiwoKHQsZSxuKT0+dGhpcy5jb2xvclNjYWxlLnNjYWxlKG4ubWV0YWRhdGEoKS5ydW4pKSksYS5hdHRyKCJzdHJva2UiLCgodCxlLG4pPT50aGlzLmNvbG9yU2NhbGUuc2NhbGUobi5tZXRhZGF0YSgpLnJ1bikpKSxhLmF0dHIoInN0cm9rZS13ZWlnaHQiLCgodCxlLG4pPT4iMC41cHgiKSksYS5hdHRyKCJzdHJva2Utb3BhY2l0eSIsKCgpPT5yW2ldKSksYS5hdHRyKCJmaWxsLW9wYWNpdHkiLCgoKT0+cltpXSkpLGF9KSksbD1uZXcgbl90LlBsb3RzLkxpbmU7cmV0dXJuIGwueCh0LGUpLGwueShhLG4pLGwuYXR0cigic3Ryb2tlIiwoKHQsZSxuKT0+dGhpcy5jb2xvclNjYWxlLnNjYWxlKG4ucnVuKSkpLHRoaXMucGxvdHM9cyxuZXcgbl90LkNvbXBvbmVudHMuR3JvdXAocyl9c2V0VmlzaWJsZVNlcmllcyh0KXt0aGlzLnJ1bnM9dDtsZXQgZT10Lm1hcCgodD0+dGhpcy5nZXREYXRhc2V0KHQpKSk7dGhpcy5wbG90cy5mb3JFYWNoKCh0PT50LmRhdGFzZXRzKGUpKSl9c2V0U2VyaWVzRGF0YSh0LGUpe3RoaXMuZ2V0RGF0YXNldCh0KS5kYXRhKGUpfXJlbmRlclRvKHQpe3RoaXMudGFyZ2V0U1ZHPXQsdGhpcy5vdXRlci5yZW5kZXJUbyh0KX1yZWRyYXcoKXt0aGlzLm91dGVyLnJlZHJhdygpfWRlc3Ryb3koKXt0aGlzLm91dGVyLmRlc3Ryb3koKX19bGV0IHB5dD1jbGFzcyBleHRlbmRzKHRyKHllKSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29sb3JTY2FsZT0obmV3IG5fdC5TY2FsZXMuQ29sb3IpLnJhbmdlKHRBLnNsaWNlKCkpLHRoaXMueFR5cGU9InN0ZXAiLHRoaXMuX3Zpc2libGVTZXJpZXNDYWNoZT1bXSx0aGlzLl9zZXJpZXNEYXRhQ2FjaGU9e30sdGhpcy5fbWFrZUNoYXJ0QXN5bmNDYWxsYmFja0lkPW51bGx9c2V0VmlzaWJsZVNlcmllcyh0KXt0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGU9dCx0aGlzLl9jaGFydCYmKHRoaXMuX2NoYXJ0LnNldFZpc2libGVTZXJpZXModCksdGhpcy5yZWRyYXcoKSl9c2V0U2VyaWVzRGF0YSh0LGUpe3RoaXMuX3Nlcmllc0RhdGFDYWNoZVt0XT1lLHRoaXMuX2NoYXJ0JiZ0aGlzLl9jaGFydC5zZXRTZXJpZXNEYXRhKHQsZSl9cmVkcmF3KCl7dGhpcy5fY2hhcnQucmVkcmF3KCl9X21ha2VDaGFydCgpe3ZhciB0PXRoaXMueFR5cGUsZT10aGlzLmNvbG9yU2NhbGUsbj10aGlzLl9hdHRhY2hlZDtudWxsPT09dGhpcy5fbWFrZUNoYXJ0QXN5bmNDYWxsYmFja0lkJiZ0aGlzLmNhbmNlbEFzeW5jKHRoaXMuX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZCksdGhpcy5fbWFrZUNoYXJ0QXN5bmNDYWxsYmFja0lkPXRoaXMuYXN5bmMoKGZ1bmN0aW9uKCl7aWYodGhpcy5fbWFrZUNoYXJ0QXN5bmNDYWxsYmFja0lkPW51bGwsbil7dGhpcy5fY2hhcnQmJnRoaXMuX2NoYXJ0LmRlc3Ryb3koKTt2YXIgaT1uZXcgZHl0KHQsZSkscj13dSh0aGlzLiQuY2hhcnRkaXYpO2kucmVuZGVyVG8ociksdGhpcy5fY2hhcnQ9aX19KSwzNTApfV9yZWxvYWRGcm9tQ2FjaGUoKXt0aGlzLl9jaGFydCYmKHRoaXMuX2NoYXJ0LnNldFZpc2libGVTZXJpZXModGhpcy5fdmlzaWJsZVNlcmllc0NhY2hlKSx0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGUuZm9yRWFjaChmdW5jdGlvbih0KXt0aGlzLl9jaGFydC5zZXRTZXJpZXNEYXRhKHQsdGhpcy5fc2VyaWVzRGF0YUNhY2hlW3RdfHxbXSl9LmJpbmQodGhpcykpKX1hdHRhY2hlZCgpe3RoaXMuX2F0dGFjaGVkPSEwfWRldGFjaGVkKCl7dGhpcy5fYXR0YWNoZWQ9ITF9fTtweXQudGVtcGxhdGU9X2VgCiAgICA8c3R5bGUgaW5jbHVkZT0icGxvdHRhYmxlLXN0eWxlIj48L3N0eWxlPgogICAgPGRpdiBpZD0iY2hhcnRkaXYiPjwvZGl2PgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CiAgICAgICNjaGFydGRpdiB7CiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgfQogICAgICAucGxvdHRhYmxlIC5heGlzIHRleHQgewogICAgICAgIGZpbGw6IGN1cnJlbnRDb2xvcjsKICAgICAgfQogICAgPC9zdHlsZT4KICBgLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLG5fdC5TY2FsZXMuQ29sb3IpXSxweXQucHJvdG90eXBlLCJjb2xvclNjYWxlIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLHB5dC5wcm90b3R5cGUsInhUeXBlIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0scHl0LnByb3RvdHlwZSwiX2F0dGFjaGVkIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLGR5dCldLHB5dC5wcm90b3R5cGUsIl9jaGFydCIsdm9pZCAwKSx0KFtvKHt0eXBlOkFycmF5fSksZSgiZGVzaWduOnR5cGUiLEFycmF5KV0scHl0LnByb3RvdHlwZSwiX3Zpc2libGVTZXJpZXNDYWNoZSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxweXQucHJvdG90eXBlLCJfc2VyaWVzRGF0YUNhY2hlIix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLHB5dC5wcm90b3R5cGUsIl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQiLHZvaWQgMCksdChbYSgieFR5cGUiLCJjb2xvclNjYWxlIiwiX2F0dGFjaGVkIiksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pLGUoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxweXQucHJvdG90eXBlLCJfbWFrZUNoYXJ0IixudWxsKSx0KFthKCJfY2hhcnQiKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLHB5dC5wcm90b3R5cGUsIl9yZWxvYWRGcm9tQ2FjaGUiLG51bGwpLHB5dD10KFtpKCJ2ei1kaXN0cmlidXRpb24tY2hhcnQiKV0scHl0KTtsZXQgZnl0PWNsYXNzIGV4dGVuZHMocF90KHRyKHllKSkpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmdldERhdGFMb2FkTmFtZT0oe3J1bjp0fSk9PnQsdGhpcy5yZXF1ZXN0RGF0YT0odCxlLG4pPT57Y29uc3QgaT1ncigpLnBsdWdpblJvdXRlKCJkaXN0cmlidXRpb25zIiwiL2Rpc3RyaWJ1dGlvbnMiKTtQcm9taXNlLmFsbCh0Lm1hcCgodD0+e2NvbnN0IG49Vk8oaSx7dGFnOnQudGFnLHJ1bjp0LnJ1bn0pO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QobikudGhlbigobj0+e2Uoe2l0ZW06dCxkYXRhOm59KX0pKX0pKSkuZmluYWxseSgoKCk9PntuKCl9KSl9LHRoaXMubG9hZERhdGFDYWxsYmFjaz0odCxlLG4pPT57Y29uc3QgaT1uLm1hcCgodD0+e2NvbnN0W2UsbixpXT10O3JldHVybiBpLndhbGxfdGltZT1uZXcgRGF0ZSgxZTMqZSksaS5zdGVwPW4saX0pKSxyPXRoaXMuZ2V0RGF0YUxvYWROYW1lKGUpO3RoaXMuJC5jaGFydC5zZXRTZXJpZXNEYXRhKHIsaSksdGhpcy4kLmNoYXJ0LnNldFZpc2libGVTZXJpZXMoW3JdKX0sdGhpcy5fY29sb3JTY2FsZT17c2NhbGU6QU99LHRoaXMuX2V4cGFuZGVkPSExLHRoaXMuX2NhbmNlbGxlcj1uZXcgTk99X3JlbG9hZE9uUnVuVGFnQ2hhbmdlKCl7dGhpcy5yZWxvYWQoKX1fdXBkYXRlRGF0YVRvTG9hZCgpe3RoaXMuZGF0YVRvTG9hZD1be3J1bjp0aGlzLnJ1bix0YWc6dGhpcy50YWd9XX1nZXQgX3J1bkNvbG9yKCl7cmV0dXJuIHRoaXMuX2NvbG9yU2NhbGUuc2NhbGUodGhpcy5ydW4pfXJlZHJhdygpe3RoaXMuJC5jaGFydC5yZWRyYXcoKX1fdG9nZ2xlRXhwYW5kZWQodCl7dGhpcy5zZXQoIl9leHBhbmRlZCIsIXRoaXMuX2V4cGFuZGVkKSx0aGlzLnJlZHJhdygpfX07Znl0LnRlbXBsYXRlPV9lYAogICAgPHRmLWNhcmQtaGVhZGluZwogICAgICB0YWc9IltbdGFnXV0iCiAgICAgIHJ1bj0iW1tydW5dXSIKICAgICAgZGlzcGxheS1uYW1lPSJbW3RhZ01ldGFkYXRhLmRpc3BsYXlOYW1lXV0iCiAgICAgIGRlc2NyaXB0aW9uPSJbW3RhZ01ldGFkYXRhLmRlc2NyaXB0aW9uXV0iCiAgICAgIGNvbG9yPSJbW19ydW5Db2xvcl1dIgogICAgPjwvdGYtY2FyZC1oZWFkaW5nPgogICAgPCEtLQogICAgICBUaGUgbWFpbiBkaXN0cmlidXRpb24gdGhhdCB3ZSByZW5kZXIuIERhdGEgaXMgc2V0IGRpcmVjdGx5IHdpdGgKICAgICAgXGBzZXRTZXJpZXNEYXRhXGAsIG5vdCB3aXRoIGEgYm91bmQgcHJvcGVydHkuCiAgICAtLT4KICAgIDx2ei1kaXN0cmlidXRpb24tY2hhcnQKICAgICAgaWQ9ImNoYXJ0IgogICAgICB4LXR5cGU9IltbeFR5cGVdXSIKICAgICAgY29sb3Itc2NhbGU9IltbX2NvbG9yU2NhbGVdXSIKICAgID48L3Z6LWRpc3RyaWJ1dGlvbi1jaGFydD4KICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiByb3c7Ij4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgc2VsZWN0ZWQkPSJbW19leHBhbmRlZF1dIgogICAgICAgIGljb249ImZ1bGxzY3JlZW4iCiAgICAgICAgb24tdGFwPSJfdG9nZ2xlRXhwYW5kZWQiCiAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgd2lkdGg6IDMzMHB4OwogICAgICAgIGhlaWdodDogMjM1cHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7CiAgICAgIH0KICAgICAgOmhvc3QoW19leHBhbmRlZF0pIHsKICAgICAgICB3aWR0aDogNzAwcHg7CiAgICAgICAgaGVpZ2h0OiA1MDBweDsKICAgICAgfQoKICAgICAgdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMgewogICAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgfQoKICAgICAgcGFwZXItaWNvbi1idXR0b24gewogICAgICAgIGNvbG9yOiAjMjE5NmYzOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDEwMCU7CiAgICAgICAgd2lkdGg6IDMycHg7CiAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICAgIHBhZGRpbmc6IDRweDsKICAgICAgfQogICAgICBwYXBlci1pY29uLWJ1dHRvbltzZWxlY3RlZF0gewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXRiLXVpLWxpZ2h0LWFjY2VudCk7CiAgICAgIH0KCiAgICAgIHRmLWNhcmQtaGVhZGluZyB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgICAgfQogICAgPC9zdHlsZT4KICBgLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLGZ5dC5wcm90b3R5cGUsInJ1biIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxmeXQucHJvdG90eXBlLCJ0YWciLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZnl0LnByb3RvdHlwZSwidGFnTWV0YWRhdGEiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sZnl0LnByb3RvdHlwZSwieFR5cGUiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZnl0LnByb3RvdHlwZSwiZ2V0RGF0YUxvYWROYW1lIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLGZ5dC5wcm90b3R5cGUsImxvYWREYXRhQ2FsbGJhY2siLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZnl0LnByb3RvdHlwZSwiX2NvbG9yU2NhbGUiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFuLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sZnl0LnByb3RvdHlwZSwiX2V4cGFuZGVkIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLGhyKV0sZnl0LnByb3RvdHlwZSwicmVxdWVzdE1hbmFnZXIiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsTk8pXSxmeXQucHJvdG90eXBlLCJfY2FuY2VsbGVyIix2b2lkIDApLHQoW2EoInJ1biIsInRhZyIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sZnl0LnByb3RvdHlwZSwiX3JlbG9hZE9uUnVuVGFnQ2hhbmdlIixudWxsKSx0KFthKCJydW4iLCJ0YWciKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLGZ5dC5wcm90b3R5cGUsIl91cGRhdGVEYXRhVG9Mb2FkIixudWxsKSx0KFtzKCJydW4iKSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxmeXQucHJvdG90eXBlLCJfcnVuQ29sb3IiLG51bGwpLGZ5dD10KFtpKCJ0Zi1kaXN0cmlidXRpb24tbG9hZGVyIildLGZ5dCk7bGV0IG15dD1jbGFzcyBleHRlbmRzKHRyKHllKSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMucmVsb2FkT25SZWFkeT0hMCx0aGlzLl94VHlwZT0ic3RlcCIsdGhpcy5fcmVxdWVzdE1hbmFnZXI9bmV3IGhyfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLnJlbG9hZE9uUmVhZHkmJnRoaXMucmVsb2FkKCl9cmVsb2FkKCl7dGhpcy5fZmV0Y2hUYWdzKCkudGhlbigoKCk9Pnt0aGlzLl9yZWxvYWREaXN0cmlidXRpb25zKCl9KSl9X2ZldGNoVGFncygpe2NvbnN0IHQ9Z3IoKS5wbHVnaW5Sb3V0ZSgiZGlzdHJpYnV0aW9ucyIsIi90YWdzIik7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbigodD0+e2lmKHdlLmlzRXF1YWwodCx0aGlzLl9ydW5Ub1RhZ0luZm8pKXJldHVybjtjb25zdCBlPXdlLm1hcFZhbHVlcyh0LCh0PT5PYmplY3Qua2V5cyh0KSkpLG49b3IoZSk7dGhpcy5zZXQoIl9kYXRhTm90Rm91bmQiLDA9PT1uLmxlbmd0aCksdGhpcy5zZXQoIl9ydW5Ub1RhZyIsZSksdGhpcy5zZXQoIl9ydW5Ub1RhZ0luZm8iLHQpLHRoaXMuYXN5bmMoKCgpPT57dGhpcy5zZXQoIl9jYXRlZ29yaWVzRG9tUmVhZHkiLCEwKX0pKX0pKX1fcmVsb2FkRGlzdHJpYnV0aW9ucygpe3RoaXMucm9vdC5xdWVyeVNlbGVjdG9yQWxsKCJ0Zi1kaXN0cmlidXRpb24tbG9hZGVyIikuZm9yRWFjaCgodD0+e3QucmVsb2FkKCl9KSl9X3Nob3VsZE9wZW4odCl7cmV0dXJuIHQ8PTJ9Z2V0IF9jYXRlZ29yaWVzKCl7cmV0dXJuIFNyKHRoaXMuX3J1blRvVGFnLHRoaXMuX3NlbGVjdGVkUnVucyx0aGlzLl90YWdGaWx0ZXIpfV90YWdNZXRhZGF0YSh0LGUsbil7cmV0dXJuIHRbZV1bbl19fTtteXQudGVtcGxhdGU9X2VgCiAgICA8dGYtZGFzaGJvYXJkLWxheW91dD4KICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhciIgc2xvdD0ic2lkZWJhciI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2V0dGluZ3MiPgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgICAgPHRmLW9wdGlvbi1zZWxlY3RvcgogICAgICAgICAgICAgIGlkPSJ4VHlwZVNlbGVjdG9yIgogICAgICAgICAgICAgIG5hbWU9Ikhvcml6b250YWwgYXhpcyIKICAgICAgICAgICAgICBzZWxlY3RlZC1pZD0ie3tfeFR5cGV9fSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9InN0ZXAiPnN0ZXA8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJyZWxhdGl2ZSI+cmVsYXRpdmU8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJ3YWxsX3RpbWUiPndhbGw8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgPC90Zi1vcHRpb24tc2VsZWN0b3I+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24gcnVucy1zZWxlY3RvciI+CiAgICAgICAgICA8dGYtcnVucy1zZWxlY3RvciBzZWxlY3RlZC1ydW5zPSJ7e19zZWxlY3RlZFJ1bnN9fSI+CiAgICAgICAgICA8L3RmLXJ1bnMtc2VsZWN0b3I+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0iY2VudGVyIiBzbG90PSJjZW50ZXIiPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPGRpdiBjbGFzcz0ibm8tZGF0YS13YXJuaW5nIj4KICAgICAgICAgICAgPGgzPk5vIGRpc3RyaWJ1dGlvbiBkYXRhIHdhcyBmb3VuZC48L2gzPgogICAgICAgICAgICA8cD5Qcm9iYWJsZSBjYXVzZXM6PC9wPgogICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgWW91IGhhdmVu4oCZdCB3cml0dGVuIGFueSBoaXN0b2dyYW0gZGF0YSB0byB5b3VyIGV2ZW50IGZpbGVzLgogICAgICAgICAgICAgICAgKEhpc3RvZ3JhbXMgYW5kIGRpc3RyaWJ1dGlvbnMgYm90aCB1c2UgdGhlIGhpc3RvZ3JhbSBzdW1tYXJ5CiAgICAgICAgICAgICAgICBvcGVyYXRpb24uKQogICAgICAgICAgICAgIDwvbGk+CgogICAgICAgICAgICAgIDxsaT5UZW5zb3JCb2FyZCBjYW7igJl0IGZpbmQgeW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICA8L3VsPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW914oCZcmUgbmV3IHRvIHVzaW5nIFRlbnNvckJvYXJkLCBhbmQgd2FudCB0byBmaW5kIG91dCBob3cgdG8KICAgICAgICAgICAgICBhZGQgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIgogICAgICAgICAgICAgICAgPlJFQURNRTwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgcGVyaGFwcyB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCIKICAgICAgICAgICAgICAgID5UZW5zb3JCb2FyZCB0dXRvcmlhbDwvYQogICAgICAgICAgICAgID4uCiAgICAgICAgICAgIDwvcD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciCiAgICAgICAgICAgICAgICA+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgY29uc2lkZXIgZmlsaW5nIGFuIGlzc3VlIG9uIEdpdEh1Yi4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8dGYtdGFnLWZpbHRlcmVyIHRhZy1maWx0ZXI9Int7X3RhZ0ZpbHRlcn19Ij48L3RmLXRhZy1maWx0ZXJlcj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3CiAgICAgICAgICAgICAgY2F0ZWdvcnk9IltbY2F0ZWdvcnldXSIKICAgICAgICAgICAgICBpbml0aWFsLW9wZW5lZD0iW1tfc2hvdWxkT3BlbihpbmRleCldXSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0Zi1kaXN0cmlidXRpb24tbG9hZGVyCiAgICAgICAgICAgICAgICAgIGFjdGl2ZT0iW1thY3RpdmVdXSIKICAgICAgICAgICAgICAgICAgcnVuPSJbW2l0ZW0ucnVuXV0iCiAgICAgICAgICAgICAgICAgIHRhZz0iW1tpdGVtLnRhZ11dIgogICAgICAgICAgICAgICAgICB0YWctbWV0YWRhdGE9IltbX3RhZ01ldGFkYXRhKF9ydW5Ub1RhZ0luZm8sIGl0ZW0ucnVuLCBpdGVtLnRhZyldXSIKICAgICAgICAgICAgICAgICAgeC10eXBlPSJbW194VHlwZV1dIgogICAgICAgICAgICAgICAgICByZXF1ZXN0LW1hbmFnZXI9IltbX3JlcXVlc3RNYW5hZ2VyXV0iCiAgICAgICAgICAgICAgICA+PC90Zi1kaXN0cmlidXRpb24tbG9hZGVyPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvdGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXc+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC90Zi1kYXNoYm9hcmQtbGF5b3V0PgoKICAgIDxzdHlsZSBpbmNsdWRlPSJkYXNoYm9hcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CiAgICA8L3N0eWxlPgogIGAsdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxteXQucHJvdG90eXBlLCJyZWxvYWRPblJlYWR5Iix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLG15dC5wcm90b3R5cGUsIl94VHlwZSIsdm9pZCAwKSx0KFtvKHt0eXBlOkFycmF5fSksZSgiZGVzaWduOnR5cGUiLEFycmF5KV0sbXl0LnByb3RvdHlwZSwiX3NlbGVjdGVkUnVucyIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxteXQucHJvdG90eXBlLCJfcnVuVG9UYWciLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sbXl0LnByb3RvdHlwZSwiX3J1blRvVGFnSW5mbyIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLG15dC5wcm90b3R5cGUsIl9kYXRhTm90Rm91bmQiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sbXl0LnByb3RvdHlwZSwiX3RhZ0ZpbHRlciIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLG15dC5wcm90b3R5cGUsIl9jYXRlZ29yaWVzRG9tUmVhZHkiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsaHIpXSxteXQucHJvdG90eXBlLCJfcmVxdWVzdE1hbmFnZXIiLHZvaWQgMCksdChbcygiX3J1blRvVGFnIiwiX3NlbGVjdGVkUnVucyIsIl90YWdGaWx0ZXIiLCJfY2F0ZWdvcmllc0RvbVJlYWR5IiksZSgiZGVzaWduOnR5cGUiLEFycmF5KSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxteXQucHJvdG90eXBlLCJfY2F0ZWdvcmllcyIsbnVsbCksbXl0PXQoW2koInRmLWRpc3RyaWJ1dGlvbi1kYXNoYm9hcmQiKV0sbXl0KTt2YXIgZ3l0PU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLExpc3RlbktleTpocyxhZGRIYXNoTGlzdGVuZXI6ZnMsYWRkU3RvcmFnZUxpc3RlbmVyOm1zLGZpcmVTdG9yYWdlQ2hhbmdlZDpncyxyZW1vdmVIYXNoTGlzdGVuZXJCeUtleTpfcyxyZW1vdmVTdG9yYWdlTGlzdGVuZXJCeUtleTp5cyxnZXRVcmxIYXNoRGljdDpmdW5jdGlvbiBfeXQoKXtyZXR1cm4gVHN9LERJU0FNQklHVUFUT1I6ImRpc2FtYmlndWF0b3IiLGdldFN0cmluZzpQcyxzZXRTdHJpbmc6TnMsZ2V0U3RyaW5nSW5pdGlhbGl6ZXI6SXMsZ2V0U3RyaW5nT2JzZXJ2ZXI6T3MsZGlzcG9zZVN0cmluZ0JpbmRpbmc6UnMsZ2V0Qm9vbGVhbjp6cyxzZXRCb29sZWFuOkRzLGdldEJvb2xlYW5Jbml0aWFsaXplcjpCcyxnZXRCb29sZWFuT2JzZXJ2ZXI6SHMsZGlzcG9zZUJvb2xlYW5CaW5kaW5nOkZzLGdldE51bWJlcjpWcyxzZXROdW1iZXI6VXMsZ2V0TnVtYmVySW5pdGlhbGl6ZXI6anMsZ2V0TnVtYmVyT2JzZXJ2ZXI6R3MsZGlzcG9zZU51bWJlckJpbmRpbmc6V3MsZ2V0T2JqZWN0OnFzLHNldE9iamVjdDpZcyxnZXRPYmplY3RJbml0aWFsaXplcjpYcyxnZXRPYmplY3RPYnNlcnZlcjokcyxkaXNwb3NlT2JqZWN0QmluZGluZzpLcyxtYWtlQmluZGluZ3M6WnMsbWlncmF0ZUxlZ2FjeVVSTFNjaGVtZTpmdW5jdGlvbiB5eXQoKXtjb25zdCB0PW5ldyBTZXQoWyJleGFtcGxlc1BhdGgiLCJoaWRlTW9kZWxQYW5lMiIsIm1vZGVsTmFtZTEiLCJtb2RlbE5hbWUyIiwiaW5mZXJlbmNlQWRkcmVzczEiLCJpbmZlcmVuY2VBZGRyZXNzMiIsIm1vZGVsVHlwZSIsIm1vZGVsVmVyc2lvbjEiLCJtb2RlbFZlcnNpb24yIiwibW9kZWxTaWduYXR1cmUxIiwibW9kZWxTaWduYXR1cmUyIiwibWF4RXhhbXBsZXMiLCJsYWJlbFZvY2FiUGF0aCIsIm11bHRpQ2xhc3MiLCJzZXF1ZW5jZUV4YW1wbGVzIiwibWF4Q2xhc3Nlc1RvRGlzcGxheSIsInNhbXBsaW5nT2RkcyIsInVzZVByZWRpY3RBcGkiLCJwcmVkaWN0SW5wdXRUZW5zb3IiLCJwcmVkaWN0T3V0cHV0VGVuc29yIl0pLGU9QXMoQ3MoKSk7aWYoIndoYXRpZiI9PT1lLl9fdGFiX18pZm9yKGxldCBuIG9mIHQpbiBpbiBlJiYoZVtgcC53aGF0aWYuJHtufWBdPWVbbl0pO2tzKExzKGUpKSwoZnVuY3Rpb24gbih0KXtUcz10fSkoZSl9fSksdnl0PWZ1bmN0aW9uIGJ5dCh0LGUpe3JldHVybiB0PT09ZXx8dCE9dCYmZSE9ZX0seHl0PWZ1bmN0aW9uIHd5dCh0LGUpe2Zvcih2YXIgbj10Lmxlbmd0aDtuLS07KWlmKHZ5dCh0W25dWzBdLGUpKXJldHVybiBuO3JldHVybi0xfSxTeXQ9QXJyYXkucHJvdG90eXBlLnNwbGljZTtmdW5jdGlvbiBNeXQodCl7dmFyIGU9LTEsbj1udWxsPT10PzA6dC5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2U8bjspe3ZhciBpPXRbZV07dGhpcy5zZXQoaVswXSxpWzFdKX19TXl0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbiBFeXQoKXt0aGlzLl9fZGF0YV9fPVtdLHRoaXMuc2l6ZT0wfSxNeXQucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbiBUeXQodCl7dmFyIGU9dGhpcy5fX2RhdGFfXyxuPXh5dChlLHQpO3JldHVybiEobjwwfHwobj09ZS5sZW5ndGgtMT9lLnBvcCgpOlN5dC5jYWxsKGUsbiwxKSwtLXRoaXMuc2l6ZSwwKSl9LE15dC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uIEN5dCh0KXt2YXIgZT10aGlzLl9fZGF0YV9fLG49eHl0KGUsdCk7cmV0dXJuIG48MD92b2lkIDA6ZVtuXVsxXX0sTXl0LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24gQXl0KHQpe3JldHVybiB4eXQodGhpcy5fX2RhdGFfXyx0KT4tMX0sTXl0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24ga3l0KHQsZSl7dmFyIG49dGhpcy5fX2RhdGFfXyxpPXh5dChuLHQpO3JldHVybiBpPDA/KCsrdGhpcy5zaXplLG4ucHVzaChbdCxlXSkpOm5baV1bMV09ZSx0aGlzfTt2YXIgTHl0LFB5dD1NeXQsTnl0PSJvYmplY3QiPT10eXBlb2YgdmUmJnZlJiZ2ZS5PYmplY3Q9PT1PYmplY3QmJnZlLEl5dD0ib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmLE95dD1OeXR8fEl5dHx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKSxSeXQ9T3l0LlN5bWJvbCx6eXQ9T2JqZWN0LnByb3RvdHlwZSxEeXQ9enl0Lmhhc093blByb3BlcnR5LEJ5dD16eXQudG9TdHJpbmcsSHl0PVJ5dD9SeXQudG9TdHJpbmdUYWc6dm9pZCAwLEZ5dD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLFZ5dD1SeXQ/Unl0LnRvU3RyaW5nVGFnOnZvaWQgMCxVeXQ9ZnVuY3Rpb24ganl0KHQpe3JldHVybiBudWxsPT10P3ZvaWQgMD09PXQ/IltvYmplY3QgVW5kZWZpbmVkXSI6IltvYmplY3QgTnVsbF0iOlZ5dCYmVnl0IGluIE9iamVjdCh0KT8oZnVuY3Rpb24gZSh0KXt2YXIgZT1EeXQuY2FsbCh0LEh5dCksbj10W0h5dF07dHJ5e3RbSHl0XT12b2lkIDA7dmFyIGk9ITB9Y2F0Y2godCl7fXZhciByPUJ5dC5jYWxsKHQpO3JldHVybiBpJiYoZT90W0h5dF09bjpkZWxldGUgdFtIeXRdKSxyfSkodCk6KGZ1bmN0aW9uIG4odCl7cmV0dXJuIEZ5dC5jYWxsKHQpfSkodCl9LEd5dD1mdW5jdGlvbiBXeXQodCl7dmFyIGU9dHlwZW9mIHQ7cmV0dXJuIG51bGwhPXQmJigib2JqZWN0Ij09ZXx8ImZ1bmN0aW9uIj09ZSl9LHF5dD1mdW5jdGlvbiBZeXQodCl7aWYoIUd5dCh0KSlyZXR1cm4hMTt2YXIgZT1VeXQodCk7cmV0dXJuIltvYmplY3QgRnVuY3Rpb25dIj09ZXx8IltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIj09ZXx8IltvYmplY3QgQXN5bmNGdW5jdGlvbl0iPT1lfHwiW29iamVjdCBQcm94eV0iPT1lfSxYeXQ9T3l0WyJfX2NvcmUtanNfc2hhcmVkX18iXSwkeXQ9KEx5dD0vW14uXSskLy5leGVjKFh5dCYmWHl0LmtleXMmJlh5dC5rZXlzLklFX1BST1RPfHwiIikpPyJTeW1ib2woc3JjKV8xLiIrTHl0OiIiLEt5dD1GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcsWnl0PWZ1bmN0aW9uIEp5dCh0KXtpZihudWxsIT10KXt0cnl7cmV0dXJuIEt5dC5jYWxsKHQpfWNhdGNoKHQpe310cnl7cmV0dXJuIHQrIiJ9Y2F0Y2godCl7fX1yZXR1cm4iIn0sUXl0PS9eXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXSQvLHR2dD1SZWdFeHAoIl4iK0Z1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpLnJlcGxhY2UoL1tcXF4kLiorPygpW1xde318XS9nLCJcXCQmIikucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXCgpfCBmb3IgLis/KD89XFxcXSkvZywiJDEuKj8iKSsiJCIpLGV2dD1mdW5jdGlvbiBudnQodCxlKXt2YXIgbj0oZnVuY3Rpb24gaSh0LGUpe3JldHVybiBudWxsPT10P3ZvaWQgMDp0W2VdfSkodCxlKTtyZXR1cm4oZnVuY3Rpb24gcih0KXtyZXR1cm4hKCFHeXQodCl8fChmdW5jdGlvbiBlKHQpe3JldHVybiEhJHl0JiYkeXQgaW4gdH0pKHQpKSYmKHF5dCh0KT90dnQ6UXl0KS50ZXN0KFp5dCh0KSl9KShuKT9uOnZvaWQgMH0saXZ0PWV2dChPeXQsIk1hcCIpLHJ2dD1ldnQoT2JqZWN0LCJjcmVhdGUiKSxvdnQ9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxhdnQ9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBzdnQodCl7dmFyIGU9LTEsbj1udWxsPT10PzA6dC5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2U8bjspe3ZhciBpPXRbZV07dGhpcy5zZXQoaVswXSxpWzFdKX19c3Z0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbiBsdnQoKXt0aGlzLl9fZGF0YV9fPXJ2dD9ydnQobnVsbCk6e30sdGhpcy5zaXplPTB9LHN2dC5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uIGN2dCh0KXt2YXIgZT10aGlzLmhhcyh0KSYmZGVsZXRlIHRoaXMuX19kYXRhX19bdF07cmV0dXJuIHRoaXMuc2l6ZS09ZT8xOjAsZX0sc3Z0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24gdXZ0KHQpe3ZhciBlPXRoaXMuX19kYXRhX187aWYocnZ0KXt2YXIgbj1lW3RdO3JldHVybiJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIj09PW4/dm9pZCAwOm59cmV0dXJuIG92dC5jYWxsKGUsdCk/ZVt0XTp2b2lkIDB9LHN2dC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uIGh2dCh0KXt2YXIgZT10aGlzLl9fZGF0YV9fO3JldHVybiBydnQ/dm9pZCAwIT09ZVt0XTphdnQuY2FsbChlLHQpfSxzdnQucHJvdG90eXBlLnNldD1mdW5jdGlvbiBkdnQodCxlKXt2YXIgbj10aGlzLl9fZGF0YV9fO3JldHVybiB0aGlzLnNpemUrPXRoaXMuaGFzKHQpPzA6MSxuW3RdPXJ2dCYmdm9pZCAwPT09ZT8iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI6ZSx0aGlzfTt2YXIgcHZ0PXN2dCxmdnQ9ZnVuY3Rpb24gbXZ0KHQsZSl7dmFyIG49dC5fX2RhdGFfXztyZXR1cm4oZnVuY3Rpb24gaSh0KXt2YXIgZT10eXBlb2YgdDtyZXR1cm4ic3RyaW5nIj09ZXx8Im51bWJlciI9PWV8fCJzeW1ib2wiPT1lfHwiYm9vbGVhbiI9PWU/Il9fcHJvdG9fXyIhPT10Om51bGw9PT10fSkoZSk/blsic3RyaW5nIj09dHlwZW9mIGU/InN0cmluZyI6Imhhc2giXTpuLm1hcH07ZnVuY3Rpb24gZ3Z0KHQpe3ZhciBlPS0xLG49bnVsbD09dD8wOnQubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytlPG47KXt2YXIgaT10W2VdO3RoaXMuc2V0KGlbMF0saVsxXSl9fWd2dC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24gX3Z0KCl7dGhpcy5zaXplPTAsdGhpcy5fX2RhdGFfXz17aGFzaDpuZXcgcHZ0LG1hcDpuZXcoaXZ0fHxQeXQpLHN0cmluZzpuZXcgcHZ0fX0sZ3Z0LnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24geXZ0KHQpe3ZhciBlPWZ2dCh0aGlzLHQpLmRlbGV0ZSh0KTtyZXR1cm4gdGhpcy5zaXplLT1lPzE6MCxlfSxndnQucHJvdG90eXBlLmdldD1mdW5jdGlvbiB2dnQodCl7cmV0dXJuIGZ2dCh0aGlzLHQpLmdldCh0KX0sZ3Z0LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24gYnZ0KHQpe3JldHVybiBmdnQodGhpcyx0KS5oYXModCl9LGd2dC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uIHh2dCh0LGUpe3ZhciBuPWZ2dCh0aGlzLHQpLGk9bi5zaXplO3JldHVybiBuLnNldCh0LGUpLHRoaXMuc2l6ZSs9bi5zaXplPT1pPzA6MSx0aGlzfTt2YXIgd3Z0PWd2dDtmdW5jdGlvbiBTdnQodCl7dmFyIGU9dGhpcy5fX2RhdGFfXz1uZXcgUHl0KHQpO3RoaXMuc2l6ZT1lLnNpemV9U3Z0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbiBNdnQoKXt0aGlzLl9fZGF0YV9fPW5ldyBQeXQsdGhpcy5zaXplPTB9LFN2dC5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uIEV2dCh0KXt2YXIgZT10aGlzLl9fZGF0YV9fLG49ZS5kZWxldGUodCk7cmV0dXJuIHRoaXMuc2l6ZT1lLnNpemUsbn0sU3Z0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24gVHZ0KHQpe3JldHVybiB0aGlzLl9fZGF0YV9fLmdldCh0KX0sU3Z0LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24gQ3Z0KHQpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyh0KX0sU3Z0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24gQXZ0KHQsZSl7dmFyIG49dGhpcy5fX2RhdGFfXztpZihuIGluc3RhbmNlb2YgUHl0KXt2YXIgaT1uLl9fZGF0YV9fO2lmKCFpdnR8fGkubGVuZ3RoPDE5OSlyZXR1cm4gaS5wdXNoKFt0LGVdKSx0aGlzLnNpemU9KytuLnNpemUsdGhpcztuPXRoaXMuX19kYXRhX189bmV3IHd2dChpKX1yZXR1cm4gbi5zZXQodCxlKSx0aGlzLnNpemU9bi5zaXplLHRoaXN9O3ZhciBrdnQ9U3Z0LEx2dD1mdW5jdGlvbiBQdnQodCxlKXtmb3IodmFyIG49LTEsaT1udWxsPT10PzA6dC5sZW5ndGg7KytuPGkmJiExIT09ZSh0W25dLG4sdCk7KTtyZXR1cm4gdH0sTnZ0PShmdW5jdGlvbigpe3RyeXt2YXIgdD1ldnQoT2JqZWN0LCJkZWZpbmVQcm9wZXJ0eSIpO3JldHVybiB0KHt9LCIiLHt9KSx0fWNhdGNoKHQpe319KSgpLEl2dD1mdW5jdGlvbiBPdnQodCxlLG4peyJfX3Byb3RvX18iPT1lJiZOdnQ/TnZ0KHQsZSx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6bix3cml0YWJsZTohMH0pOnRbZV09bn0sUnZ0PU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksenZ0PWZ1bmN0aW9uIER2dCh0LGUsbil7dmFyIGk9dFtlXTtSdnQuY2FsbCh0LGUpJiZ2eXQoaSxuKSYmKHZvaWQgMCE9PW58fGUgaW4gdCl8fEl2dCh0LGUsbil9LEJ2dD1mdW5jdGlvbiBIdnQodCxlLG4saSl7dmFyIHI9IW47bnx8KG49e30pO2Zvcih2YXIgbz0tMSxhPWUubGVuZ3RoOysrbzxhOyl7dmFyIHM9ZVtvXSxsPWk/aShuW3NdLHRbc10scyxuLHQpOnZvaWQgMDt2b2lkIDA9PT1sJiYobD10W3NdKSxyP0l2dChuLHMsbCk6enZ0KG4scyxsKX1yZXR1cm4gbn0sRnZ0PWZ1bmN0aW9uIFZ2dCh0KXtyZXR1cm4gbnVsbCE9dCYmIm9iamVjdCI9PXR5cGVvZiB0fSxVdnQ9ZnVuY3Rpb24ganZ0KHQpe3JldHVybiBGdnQodCkmJiJbb2JqZWN0IEFyZ3VtZW50c10iPT1VeXQodCl9LEd2dD1PYmplY3QucHJvdG90eXBlLFd2dD1HdnQuaGFzT3duUHJvcGVydHkscXZ0PUd2dC5wcm9wZXJ0eUlzRW51bWVyYWJsZSxZdnQ9VXZ0KChmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KSgpKT9VdnQ6ZnVuY3Rpb24odCl7cmV0dXJuIEZ2dCh0KSYmV3Z0LmNhbGwodCwiY2FsbGVlIikmJiFxdnQuY2FsbCh0LCJjYWxsZWUiKX0sWHZ0PUFycmF5LmlzQXJyYXksJHZ0PWZ1bmN0aW9uIEt2dCgpe3JldHVybiExfSxadnQ9YmUoKGZ1bmN0aW9uKHQsZSl7dmFyIG49ZSYmIWUubm9kZVR5cGUmJmUsaT1uJiZ0JiYhdC5ub2RlVHlwZSYmdCxyPWkmJmkuZXhwb3J0cz09PW4/T3l0LkJ1ZmZlcjp2b2lkIDA7dC5leHBvcnRzPShyP3IuaXNCdWZmZXI6dm9pZCAwKXx8JHZ0fSkpLEp2dD0vXig/OjB8WzEtOV1cZCopJC8sUXZ0PWZ1bmN0aW9uIHRidCh0LGUpe3ZhciBuPXR5cGVvZiB0O3JldHVybiEhKGU9bnVsbD09ZT85MDA3MTk5MjU0NzQwOTkxOmUpJiYoIm51bWJlciI9PW58fCJzeW1ib2wiIT1uJiZKdnQudGVzdCh0KSkmJnQ+LTEmJnQlMT09MCYmdDxlfSxlYnQ9ZnVuY3Rpb24gbmJ0KHQpe3JldHVybiJudW1iZXIiPT10eXBlb2YgdCYmdD4tMSYmdCUxPT0wJiZ0PD05MDA3MTk5MjU0NzQwOTkxfSxpYnQ9e307aWJ0WyJbb2JqZWN0IEZsb2F0MzJBcnJheV0iXT1pYnRbIltvYmplY3QgRmxvYXQ2NEFycmF5XSJdPWlidFsiW29iamVjdCBJbnQ4QXJyYXldIl09aWJ0WyJbb2JqZWN0IEludDE2QXJyYXldIl09aWJ0WyJbb2JqZWN0IEludDMyQXJyYXldIl09aWJ0WyJbb2JqZWN0IFVpbnQ4QXJyYXldIl09aWJ0WyJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSJdPWlidFsiW29iamVjdCBVaW50MTZBcnJheV0iXT1pYnRbIltvYmplY3QgVWludDMyQXJyYXldIl09ITAsaWJ0WyJbb2JqZWN0IEFyZ3VtZW50c10iXT1pYnRbIltvYmplY3QgQXJyYXldIl09aWJ0WyJbb2JqZWN0IEFycmF5QnVmZmVyXSJdPWlidFsiW29iamVjdCBCb29sZWFuXSJdPWlidFsiW29iamVjdCBEYXRhVmlld10iXT1pYnRbIltvYmplY3QgRGF0ZV0iXT1pYnRbIltvYmplY3QgRXJyb3JdIl09aWJ0WyJbb2JqZWN0IEZ1bmN0aW9uXSJdPWlidFsiW29iamVjdCBNYXBdIl09aWJ0WyJbb2JqZWN0IE51bWJlcl0iXT1pYnRbIltvYmplY3QgT2JqZWN0XSJdPWlidFsiW29iamVjdCBSZWdFeHBdIl09aWJ0WyJbb2JqZWN0IFNldF0iXT1pYnRbIltvYmplY3QgU3RyaW5nXSJdPWlidFsiW29iamVjdCBXZWFrTWFwXSJdPSExO3ZhciByYnQ9ZnVuY3Rpb24gb2J0KHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdChlKX19LGFidD1iZSgoZnVuY3Rpb24odCxlKXt2YXIgbj1lJiYhZS5ub2RlVHlwZSYmZSxpPW4mJnQmJiF0Lm5vZGVUeXBlJiZ0LHI9aSYmaS5leHBvcnRzPT09biYmTnl0LnByb2Nlc3Msbz0oZnVuY3Rpb24oKXt0cnl7cmV0dXJuIGkmJmkucmVxdWlyZSYmaS5yZXF1aXJlKCJ1dGlsIikudHlwZXN8fHImJnIuYmluZGluZyYmci5iaW5kaW5nKCJ1dGlsIil9Y2F0Y2godCl7fX0pKCk7dC5leHBvcnRzPW99KSksc2J0PWFidCYmYWJ0LmlzVHlwZWRBcnJheSxsYnQ9c2J0P3JidChzYnQpOmZ1bmN0aW9uIGNidCh0KXtyZXR1cm4gRnZ0KHQpJiZlYnQodC5sZW5ndGgpJiYhIWlidFtVeXQodCldfSx1YnQ9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxoYnQ9ZnVuY3Rpb24gZGJ0KHQsZSl7dmFyIG49WHZ0KHQpLGk9IW4mJll2dCh0KSxyPSFuJiYhaSYmWnZ0KHQpLG89IW4mJiFpJiYhciYmbGJ0KHQpLGE9bnx8aXx8cnx8byxzPWE/KGZ1bmN0aW9uIGwodCxlKXtmb3IodmFyIG49LTEsaT1BcnJheSh0KTsrK248dDspaVtuXT1lKG4pO3JldHVybiBpfSkodC5sZW5ndGgsU3RyaW5nKTpbXSxjPXMubGVuZ3RoO2Zvcih2YXIgdSBpbiB0KSFlJiYhdWJ0LmNhbGwodCx1KXx8YSYmKCJsZW5ndGgiPT11fHxyJiYoIm9mZnNldCI9PXV8fCJwYXJlbnQiPT11KXx8byYmKCJidWZmZXIiPT11fHwiYnl0ZUxlbmd0aCI9PXV8fCJieXRlT2Zmc2V0Ij09dSl8fFF2dCh1LGMpKXx8cy5wdXNoKHUpO3JldHVybiBzfSxwYnQ9T2JqZWN0LnByb3RvdHlwZSxmYnQ9ZnVuY3Rpb24gbWJ0KHQpe3ZhciBlPXQmJnQuY29uc3RydWN0b3I7cmV0dXJuIHQ9PT0oImZ1bmN0aW9uIj09dHlwZW9mIGUmJmUucHJvdG90eXBlfHxwYnQpfSxnYnQ9ZnVuY3Rpb24gX2J0KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0KGUobikpfX0seWJ0PWdidChPYmplY3Qua2V5cyxPYmplY3QpLHZidD1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LGJidD1mdW5jdGlvbiB4YnQodCl7aWYoIWZidCh0KSlyZXR1cm4geWJ0KHQpO3ZhciBlPVtdO2Zvcih2YXIgbiBpbiBPYmplY3QodCkpdmJ0LmNhbGwodCxuKSYmImNvbnN0cnVjdG9yIiE9biYmZS5wdXNoKG4pO3JldHVybiBlfSx3YnQ9ZnVuY3Rpb24gU2J0KHQpe3JldHVybiBudWxsIT10JiZlYnQodC5sZW5ndGgpJiYhcXl0KHQpfSxNYnQ9ZnVuY3Rpb24gRWJ0KHQpe3JldHVybiB3YnQodCk/aGJ0KHQpOmJidCh0KX0sVGJ0PU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksQ2J0PWZ1bmN0aW9uIEFidCh0KXtyZXR1cm4gd2J0KHQpP2hidCh0LCEwKTooZnVuY3Rpb24gZSh0KXtpZighR3l0KHQpKXJldHVybihmdW5jdGlvbiBlKHQpe3ZhciBlPVtdO2lmKG51bGwhPXQpZm9yKHZhciBuIGluIE9iamVjdCh0KSllLnB1c2gobik7cmV0dXJuIGV9KSh0KTt2YXIgbj1mYnQodCksaT1bXTtmb3IodmFyIHIgaW4gdCkoImNvbnN0cnVjdG9yIiE9cnx8IW4mJlRidC5jYWxsKHQscikpJiZpLnB1c2gocik7cmV0dXJuIGl9KSh0KX0sa2J0PWJlKChmdW5jdGlvbih0LGUpe3ZhciBuPWUmJiFlLm5vZGVUeXBlJiZlLGk9biYmdCYmIXQubm9kZVR5cGUmJnQscj1pJiZpLmV4cG9ydHM9PT1uP095dC5CdWZmZXI6dm9pZCAwLG89cj9yLmFsbG9jVW5zYWZlOnZvaWQgMDt0LmV4cG9ydHM9ZnVuY3Rpb24gYSh0LGUpe2lmKGUpcmV0dXJuIHQuc2xpY2UoKTt2YXIgbj10Lmxlbmd0aCxpPW8/byhuKTpuZXcgdC5jb25zdHJ1Y3RvcihuKTtyZXR1cm4gdC5jb3B5KGkpLGl9fSkpLExidD1mdW5jdGlvbiBQYnQodCxlKXt2YXIgbj0tMSxpPXQubGVuZ3RoO2ZvcihlfHwoZT1BcnJheShpKSk7KytuPGk7KWVbbl09dFtuXTtyZXR1cm4gZX0sTmJ0PWZ1bmN0aW9uIElidCh0LGUpe2Zvcih2YXIgbj0tMSxpPW51bGw9PXQ/MDp0Lmxlbmd0aCxyPTAsbz1bXTsrK248aTspe3ZhciBhPXRbbl07ZShhLG4sdCkmJihvW3IrK109YSl9cmV0dXJuIG99LE9idD1mdW5jdGlvbiBSYnQoKXtyZXR1cm5bXX0semJ0PU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUsRGJ0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsQmJ0PURidD9mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD9bXToodD1PYmplY3QodCksTmJ0KERidCh0KSwoZnVuY3Rpb24oZSl7cmV0dXJuIHpidC5jYWxsKHQsZSl9KSkpfTpPYnQsSGJ0PWZ1bmN0aW9uIEZidCh0LGUpe2Zvcih2YXIgbj0tMSxpPWUubGVuZ3RoLHI9dC5sZW5ndGg7KytuPGk7KXRbcituXT1lW25dO3JldHVybiB0fSxWYnQ9Z2J0KE9iamVjdC5nZXRQcm90b3R5cGVPZixPYmplY3QpLFVidD1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzP2Z1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXTt0OylIYnQoZSxCYnQodCkpLHQ9VmJ0KHQpO3JldHVybiBlfTpPYnQsamJ0PWZ1bmN0aW9uIEdidCh0LGUsbil7dmFyIGk9ZSh0KTtyZXR1cm4gWHZ0KHQpP2k6SGJ0KGksbih0KSl9LFdidD1mdW5jdGlvbiBxYnQodCl7cmV0dXJuIGpidCh0LE1idCxCYnQpfSxZYnQ9ZnVuY3Rpb24gWGJ0KHQpe3JldHVybiBqYnQodCxDYnQsVWJ0KX0sJGJ0PWV2dChPeXQsIkRhdGFWaWV3IiksS2J0PWV2dChPeXQsIlByb21pc2UiKSxaYnQ9ZXZ0KE95dCwiU2V0IiksSmJ0PWV2dChPeXQsIldlYWtNYXAiKSxRYnQ9IltvYmplY3QgTWFwXSIsdHh0PSJbb2JqZWN0IFByb21pc2VdIixleHQ9IltvYmplY3QgU2V0XSIsbnh0PSJbb2JqZWN0IFdlYWtNYXBdIixpeHQ9IltvYmplY3QgRGF0YVZpZXddIixyeHQ9Wnl0KCRidCksb3h0PVp5dChpdnQpLGF4dD1aeXQoS2J0KSxzeHQ9Wnl0KFpidCksbHh0PVp5dChKYnQpLGN4dD1VeXQ7KCRidCYmY3h0KG5ldyAkYnQobmV3IEFycmF5QnVmZmVyKDEpKSkhPWl4dHx8aXZ0JiZjeHQobmV3IGl2dCkhPVFidHx8S2J0JiZjeHQoS2J0LnJlc29sdmUoKSkhPXR4dHx8WmJ0JiZjeHQobmV3IFpidCkhPWV4dHx8SmJ0JiZjeHQobmV3IEpidCkhPW54dCkmJihjeHQ9ZnVuY3Rpb24odCl7dmFyIGU9VXl0KHQpLG49IltvYmplY3QgT2JqZWN0XSI9PWU/dC5jb25zdHJ1Y3Rvcjp2b2lkIDAsaT1uP1p5dChuKToiIjtpZihpKXN3aXRjaChpKXtjYXNlIHJ4dDpyZXR1cm4gaXh0O2Nhc2Ugb3h0OnJldHVybiBRYnQ7Y2FzZSBheHQ6cmV0dXJuIHR4dDtjYXNlIHN4dDpyZXR1cm4gZXh0O2Nhc2UgbHh0OnJldHVybiBueHR9cmV0dXJuIGV9KTt2YXIgdXh0PWN4dCxoeHQ9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxkeHQ9T3l0LlVpbnQ4QXJyYXkscHh0PWZ1bmN0aW9uIGZ4dCh0KXt2YXIgZT1uZXcgdC5jb25zdHJ1Y3Rvcih0LmJ5dGVMZW5ndGgpO3JldHVybiBuZXcgZHh0KGUpLnNldChuZXcgZHh0KHQpKSxlfSxteHQ9L1x3KiQvLGd4dD1SeXQ/Unl0LnByb3RvdHlwZTp2b2lkIDAsX3h0PWd4dD9neHQudmFsdWVPZjp2b2lkIDAseXh0PWZ1bmN0aW9uIHZ4dCh0LGUpe3ZhciBuPWU/cHh0KHQuYnVmZmVyKTp0LmJ1ZmZlcjtyZXR1cm4gbmV3IHQuY29uc3RydWN0b3Iobix0LmJ5dGVPZmZzZXQsdC5sZW5ndGgpfSxieHQ9T2JqZWN0LmNyZWF0ZSx4eHQ9KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gZnVuY3Rpb24oZSl7aWYoIUd5dChlKSlyZXR1cm57fTtpZihieHQpcmV0dXJuIGJ4dChlKTt0LnByb3RvdHlwZT1lO3ZhciBuPW5ldyB0O3JldHVybiB0LnByb3RvdHlwZT12b2lkIDAsbn19KSgpLHd4dD1mdW5jdGlvbiBTeHQodCl7cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIHQuY29uc3RydWN0b3J8fGZidCh0KT97fTp4eHQoVmJ0KHQpKX0sTXh0PWFidCYmYWJ0LmlzTWFwLEV4dD1NeHQ/cmJ0KE14dCk6ZnVuY3Rpb24gVHh0KHQpe3JldHVybiBGdnQodCkmJiJbb2JqZWN0IE1hcF0iPT11eHQodCl9LEN4dD1hYnQmJmFidC5pc1NldCxBeHQ9Q3h0P3JidChDeHQpOmZ1bmN0aW9uIGt4dCh0KXtyZXR1cm4gRnZ0KHQpJiYiW29iamVjdCBTZXRdIj09dXh0KHQpfSxMeHQ9IltvYmplY3QgQXJndW1lbnRzXSIsUHh0PSJbb2JqZWN0IEZ1bmN0aW9uXSIsTnh0PSJbb2JqZWN0IE9iamVjdF0iLEl4dD17fTtJeHRbTHh0XT1JeHRbIltvYmplY3QgQXJyYXldIl09SXh0WyJbb2JqZWN0IEFycmF5QnVmZmVyXSJdPUl4dFsiW29iamVjdCBEYXRhVmlld10iXT1JeHRbIltvYmplY3QgQm9vbGVhbl0iXT1JeHRbIltvYmplY3QgRGF0ZV0iXT1JeHRbIltvYmplY3QgRmxvYXQzMkFycmF5XSJdPUl4dFsiW29iamVjdCBGbG9hdDY0QXJyYXldIl09SXh0WyJbb2JqZWN0IEludDhBcnJheV0iXT1JeHRbIltvYmplY3QgSW50MTZBcnJheV0iXT1JeHRbIltvYmplY3QgSW50MzJBcnJheV0iXT1JeHRbIltvYmplY3QgTWFwXSJdPUl4dFsiW29iamVjdCBOdW1iZXJdIl09SXh0W054dF09SXh0WyJbb2JqZWN0IFJlZ0V4cF0iXT1JeHRbIltvYmplY3QgU2V0XSJdPUl4dFsiW29iamVjdCBTdHJpbmddIl09SXh0WyJbb2JqZWN0IFN5bWJvbF0iXT1JeHRbIltvYmplY3QgVWludDhBcnJheV0iXT1JeHRbIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIl09SXh0WyJbb2JqZWN0IFVpbnQxNkFycmF5XSJdPUl4dFsiW29iamVjdCBVaW50MzJBcnJheV0iXT0hMCxJeHRbIltvYmplY3QgRXJyb3JdIl09SXh0W1B4dF09SXh0WyJbb2JqZWN0IFdlYWtNYXBdIl09ITE7dmFyIE94dD1mdW5jdGlvbiB0KGUsbixpLHIsbyxhKXt2YXIgcyxsPTEmbixjPTImbix1PTQmbjtpZihpJiYocz1vP2koZSxyLG8sYSk6aShlKSksdm9pZCAwIT09cylyZXR1cm4gcztpZighR3l0KGUpKXJldHVybiBlO3ZhciBoPVh2dChlKTtpZihoKXtpZihzPShmdW5jdGlvbiBkKHQpe3ZhciBlPXQubGVuZ3RoLG49bmV3IHQuY29uc3RydWN0b3IoZSk7cmV0dXJuIGUmJiJzdHJpbmciPT10eXBlb2YgdFswXSYmaHh0LmNhbGwodCwiaW5kZXgiKSYmKG4uaW5kZXg9dC5pbmRleCxuLmlucHV0PXQuaW5wdXQpLG59KShlKSwhbClyZXR1cm4gTGJ0KGUscyl9ZWxzZXt2YXIgcD11eHQoZSksZj1wPT1QeHR8fCJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSI9PXA7aWYoWnZ0KGUpKXJldHVybiBrYnQoZSxsKTtpZihwPT1OeHR8fHA9PUx4dHx8ZiYmIW8pe2lmKHM9Y3x8Zj97fTp3eHQoZSksIWwpcmV0dXJuIGM/KGZ1bmN0aW9uIGcodCxlKXtyZXR1cm4gQnZ0KHQsVWJ0KHQpLGUpfSkoZSwoZnVuY3Rpb24gbSh0LGUpe3JldHVybiB0JiZCdnQoZSxDYnQoZSksdCl9KShzLGUpKTooZnVuY3Rpb24geSh0LGUpe3JldHVybiBCdnQodCxCYnQodCksZSl9KShlLChmdW5jdGlvbiBfKHQsZSl7cmV0dXJuIHQmJkJ2dChlLE1idChlKSx0KX0pKHMsZSkpfWVsc2V7aWYoIUl4dFtwXSlyZXR1cm4gbz9lOnt9O3M9KGZ1bmN0aW9uIHYodCxlLG4pe3ZhciBpPXQuY29uc3RydWN0b3I7c3dpdGNoKGUpe2Nhc2UiW29iamVjdCBBcnJheUJ1ZmZlcl0iOnJldHVybiBweHQodCk7Y2FzZSJbb2JqZWN0IEJvb2xlYW5dIjpjYXNlIltvYmplY3QgRGF0ZV0iOnJldHVybiBuZXcgaSgrdCk7Y2FzZSJbb2JqZWN0IERhdGFWaWV3XSI6cmV0dXJuKGZ1bmN0aW9uIHIodCxlKXt2YXIgbj1lP3B4dCh0LmJ1ZmZlcik6dC5idWZmZXI7cmV0dXJuIG5ldyB0LmNvbnN0cnVjdG9yKG4sdC5ieXRlT2Zmc2V0LHQuYnl0ZUxlbmd0aCl9KSh0LG4pO2Nhc2UiW29iamVjdCBGbG9hdDMyQXJyYXldIjpjYXNlIltvYmplY3QgRmxvYXQ2NEFycmF5XSI6Y2FzZSJbb2JqZWN0IEludDhBcnJheV0iOmNhc2UiW29iamVjdCBJbnQxNkFycmF5XSI6Y2FzZSJbb2JqZWN0IEludDMyQXJyYXldIjpjYXNlIltvYmplY3QgVWludDhBcnJheV0iOmNhc2UiW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iOmNhc2UiW29iamVjdCBVaW50MTZBcnJheV0iOmNhc2UiW29iamVjdCBVaW50MzJBcnJheV0iOnJldHVybiB5eHQodCxuKTtjYXNlIltvYmplY3QgTWFwXSI6cmV0dXJuIG5ldyBpO2Nhc2UiW29iamVjdCBOdW1iZXJdIjpjYXNlIltvYmplY3QgU3RyaW5nXSI6cmV0dXJuIG5ldyBpKHQpO2Nhc2UiW29iamVjdCBSZWdFeHBdIjpyZXR1cm4oZnVuY3Rpb24gbyh0KXt2YXIgZT1uZXcgdC5jb25zdHJ1Y3Rvcih0LnNvdXJjZSxteHQuZXhlYyh0KSk7cmV0dXJuIGUubGFzdEluZGV4PXQubGFzdEluZGV4LGV9KSh0KTtjYXNlIltvYmplY3QgU2V0XSI6cmV0dXJuIG5ldyBpO2Nhc2UiW29iamVjdCBTeW1ib2xdIjpyZXR1cm4oZnVuY3Rpb24gYSh0KXtyZXR1cm4gX3h0P09iamVjdChfeHQuY2FsbCh0KSk6e319KSh0KX19KShlLHAsbCl9fWF8fChhPW5ldyBrdnQpO3ZhciBiPWEuZ2V0KGUpO2lmKGIpcmV0dXJuIGI7YS5zZXQoZSxzKSxBeHQoZSk/ZS5mb3JFYWNoKChmdW5jdGlvbihyKXtzLmFkZCh0KHIsbixpLHIsZSxhKSl9KSk6RXh0KGUpJiZlLmZvckVhY2goKGZ1bmN0aW9uKHIsbyl7cy5zZXQobyx0KHIsbixpLG8sZSxhKSl9KSk7dmFyIHg9aD92b2lkIDA6KHU/Yz9ZYnQ6V2J0OmM/Q2J0Ok1idCkoZSk7cmV0dXJuIEx2dCh4fHxlLChmdW5jdGlvbihyLG8pe3gmJihyPWVbbz1yXSksenZ0KHMsbyx0KHIsbixpLG8sZSxhKSl9KSksc30sUnh0PWZ1bmN0aW9uIHp4dCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19LER4dD0oZnVuY3Rpb24gQnh0KHQpe3JldHVybiBmdW5jdGlvbihlLG4saSl7Zm9yKHZhciByPS0xLG89T2JqZWN0KGUpLGE9aShlKSxzPWEubGVuZ3RoO3MtLTspe3ZhciBsPWFbdD9zOisrcl07aWYoITE9PT1uKG9bbF0sbCxvKSlicmVha31yZXR1cm4gZX19KSgpLEh4dD1mdW5jdGlvbiBGeHQodCxlKXtyZXR1cm4gdCYmRHh0KHQsZSxNYnQpfSxWeHQ9KGZ1bmN0aW9uIFV4dCh0LGUpe3JldHVybiBmdW5jdGlvbihuLGkpe2lmKG51bGw9PW4pcmV0dXJuIG47aWYoIXdidChuKSlyZXR1cm4gdChuLGkpO2Zvcih2YXIgcj1uLmxlbmd0aCxvPWU/cjotMSxhPU9iamVjdChuKTsoZT9vLS06KytvPHIpJiYhMSE9PWkoYVtvXSxvLGEpOyk7cmV0dXJuIG59fSkoSHh0KSxqeHQ9ZnVuY3Rpb24gR3h0KHQpe3JldHVybiB0fSxXeHQ9ZnVuY3Rpb24gcXh0KHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6anh0fSxZeHQ9ZnVuY3Rpb24gWHh0KHQsZSl7cmV0dXJuKFh2dCh0KT9MdnQ6Vnh0KSh0LFd4dChlKSl9LCR4dD1ZeHQsS3h0PWZ1bmN0aW9uIFp4dCh0LGUpe3ZhciBuPVtdO3JldHVybiBWeHQodCwoZnVuY3Rpb24odCxpLHIpe2UodCxpLHIpJiZuLnB1c2godCl9KSksbn07ZnVuY3Rpb24gSnh0KHQpe3ZhciBlPS0xLG49bnVsbD09dD8wOnQubGVuZ3RoO2Zvcih0aGlzLl9fZGF0YV9fPW5ldyB3dnQ7KytlPG47KXRoaXMuYWRkKHRbZV0pfUp4dC5wcm90b3R5cGUuYWRkPUp4dC5wcm90b3R5cGUucHVzaD1mdW5jdGlvbiBReHQodCl7cmV0dXJuIHRoaXMuX19kYXRhX18uc2V0KHQsIl9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iKSx0aGlzfSxKeHQucHJvdG90eXBlLmhhcz1mdW5jdGlvbiB0d3QodCl7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKHQpfTt2YXIgZXd0PUp4dCxud3Q9ZnVuY3Rpb24gaXd0KHQsZSl7Zm9yKHZhciBuPS0xLGk9bnVsbD09dD8wOnQubGVuZ3RoOysrbjxpOylpZihlKHRbbl0sbix0KSlyZXR1cm4hMDtyZXR1cm4hMX0scnd0PWZ1bmN0aW9uIG93dCh0LGUpe3JldHVybiB0LmhhcyhlKX0sYXd0PWZ1bmN0aW9uIHN3dCh0LGUsbixpLHIsbyl7dmFyIGE9MSZuLHM9dC5sZW5ndGgsbD1lLmxlbmd0aDtpZihzIT1sJiYhKGEmJmw+cykpcmV0dXJuITE7dmFyIGM9by5nZXQodCksdT1vLmdldChlKTtpZihjJiZ1KXJldHVybiBjPT1lJiZ1PT10O3ZhciBoPS0xLGQ9ITAscD0yJm4/bmV3IGV3dDp2b2lkIDA7Zm9yKG8uc2V0KHQsZSksby5zZXQoZSx0KTsrK2g8czspe3ZhciBmPXRbaF0sbT1lW2hdO2lmKGkpdmFyIGc9YT9pKG0sZixoLGUsdCxvKTppKGYsbSxoLHQsZSxvKTtpZih2b2lkIDAhPT1nKXtpZihnKWNvbnRpbnVlO2Q9ITE7YnJlYWt9aWYocCl7aWYoIW53dChlLChmdW5jdGlvbih0LGUpe2lmKCFyd3QocCxlKSYmKGY9PT10fHxyKGYsdCxuLGksbykpKXJldHVybiBwLnB1c2goZSl9KSkpe2Q9ITE7YnJlYWt9fWVsc2UgaWYoZiE9PW0mJiFyKGYsbSxuLGksbykpe2Q9ITE7YnJlYWt9fXJldHVybiBvLmRlbGV0ZSh0KSxvLmRlbGV0ZShlKSxkfSxsd3Q9ZnVuY3Rpb24gY3d0KHQpe3ZhciBlPS0xLG49QXJyYXkodC5zaXplKTtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbih0LGkpe25bKytlXT1baSx0XX0pKSxufSx1d3Q9ZnVuY3Rpb24gaHd0KHQpe3ZhciBlPS0xLG49QXJyYXkodC5zaXplKTtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbih0KXtuWysrZV09dH0pKSxufSxkd3Q9Unl0P1J5dC5wcm90b3R5cGU6dm9pZCAwLHB3dD1kd3Q/ZHd0LnZhbHVlT2Y6dm9pZCAwLGZ3dD1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LG13dD0iW29iamVjdCBBcmd1bWVudHNdIixnd3Q9IltvYmplY3QgQXJyYXldIixfd3Q9IltvYmplY3QgT2JqZWN0XSIseXd0PU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksdnd0PWZ1bmN0aW9uIHQoZSxuLGkscixvKXtyZXR1cm4gZT09PW58fChudWxsPT1lfHxudWxsPT1ufHwhRnZ0KGUpJiYhRnZ0KG4pP2UhPWUmJm4hPW46KGZ1bmN0aW9uIGEodCxlLG4saSxyLG8pe3ZhciBhPVh2dCh0KSxzPVh2dChlKSxsPWE/Z3d0OnV4dCh0KSxjPXM/Z3d0OnV4dChlKSx1PShsPWw9PW13dD9fd3Q6bCk9PV93dCxoPShjPWM9PW13dD9fd3Q6Yyk9PV93dCxkPWw9PWM7aWYoZCYmWnZ0KHQpKXtpZighWnZ0KGUpKXJldHVybiExO2E9ITAsdT0hMX1pZihkJiYhdSlyZXR1cm4gb3x8KG89bmV3IGt2dCksYXx8bGJ0KHQpP2F3dCh0LGUsbixpLHIsbyk6KGZ1bmN0aW9uIHAodCxlLG4saSxyLG8sYSl7c3dpdGNoKG4pe2Nhc2UiW29iamVjdCBEYXRhVmlld10iOmlmKHQuYnl0ZUxlbmd0aCE9ZS5ieXRlTGVuZ3RofHx0LmJ5dGVPZmZzZXQhPWUuYnl0ZU9mZnNldClyZXR1cm4hMTt0PXQuYnVmZmVyLGU9ZS5idWZmZXI7Y2FzZSJbb2JqZWN0IEFycmF5QnVmZmVyXSI6cmV0dXJuISh0LmJ5dGVMZW5ndGghPWUuYnl0ZUxlbmd0aHx8IW8obmV3IGR4dCh0KSxuZXcgZHh0KGUpKSk7Y2FzZSJbb2JqZWN0IEJvb2xlYW5dIjpjYXNlIltvYmplY3QgRGF0ZV0iOmNhc2UiW29iamVjdCBOdW1iZXJdIjpyZXR1cm4gdnl0KCt0LCtlKTtjYXNlIltvYmplY3QgRXJyb3JdIjpyZXR1cm4gdC5uYW1lPT1lLm5hbWUmJnQubWVzc2FnZT09ZS5tZXNzYWdlO2Nhc2UiW29iamVjdCBSZWdFeHBdIjpjYXNlIltvYmplY3QgU3RyaW5nXSI6cmV0dXJuIHQ9PWUrIiI7Y2FzZSJbb2JqZWN0IE1hcF0iOnZhciBzPWx3dDtjYXNlIltvYmplY3QgU2V0XSI6aWYoc3x8KHM9dXd0KSx0LnNpemUhPWUuc2l6ZSYmISgxJmkpKXJldHVybiExO3ZhciBsPWEuZ2V0KHQpO2lmKGwpcmV0dXJuIGw9PWU7aXw9MixhLnNldCh0LGUpO3ZhciBjPWF3dChzKHQpLHMoZSksaSxyLG8sYSk7cmV0dXJuIGEuZGVsZXRlKHQpLGM7Y2FzZSJbb2JqZWN0IFN5bWJvbF0iOmlmKHB3dClyZXR1cm4gcHd0LmNhbGwodCk9PXB3dC5jYWxsKGUpfXJldHVybiExfSkodCxlLGwsbixpLHIsbyk7aWYoISgxJm4pKXt2YXIgZj11JiZ5d3QuY2FsbCh0LCJfX3dyYXBwZWRfXyIpLG09aCYmeXd0LmNhbGwoZSwiX193cmFwcGVkX18iKTtpZihmfHxtKXt2YXIgZz1mP3QudmFsdWUoKTp0LF89bT9lLnZhbHVlKCk6ZTtyZXR1cm4gb3x8KG89bmV3IGt2dCkscihnLF8sbixpLG8pfX1yZXR1cm4hIWQmJihvfHwobz1uZXcga3Z0KSwoZnVuY3Rpb24geSh0LGUsbixpLHIsbyl7dmFyIGE9MSZuLHM9V2J0KHQpLGw9cy5sZW5ndGg7aWYobCE9V2J0KGUpLmxlbmd0aCYmIWEpcmV0dXJuITE7Zm9yKHZhciBjPWw7Yy0tOyl7dmFyIHU9c1tjXTtpZighKGE/dSBpbiBlOmZ3dC5jYWxsKGUsdSkpKXJldHVybiExfXZhciBoPW8uZ2V0KHQpLGQ9by5nZXQoZSk7aWYoaCYmZClyZXR1cm4gaD09ZSYmZD09dDt2YXIgcD0hMDtvLnNldCh0LGUpLG8uc2V0KGUsdCk7Zm9yKHZhciBmPWE7KytjPGw7KXt2YXIgbT10W3U9c1tjXV0sZz1lW3VdO2lmKGkpdmFyIF89YT9pKGcsbSx1LGUsdCxvKTppKG0sZyx1LHQsZSxvKTtpZighKHZvaWQgMD09PV8/bT09PWd8fHIobSxnLG4saSxvKTpfKSl7cD0hMTticmVha31mfHwoZj0iY29uc3RydWN0b3IiPT11KX1pZihwJiYhZil7dmFyIHk9dC5jb25zdHJ1Y3Rvcix2PWUuY29uc3RydWN0b3I7eT09dnx8ISgiY29uc3RydWN0b3IiaW4gdCl8fCEoImNvbnN0cnVjdG9yImluIGUpfHwiZnVuY3Rpb24iPT10eXBlb2YgeSYmeSBpbnN0YW5jZW9mIHkmJiJmdW5jdGlvbiI9PXR5cGVvZiB2JiZ2IGluc3RhbmNlb2Ygdnx8KHA9ITEpfXJldHVybiBvLmRlbGV0ZSh0KSxvLmRlbGV0ZShlKSxwfSkodCxlLG4saSxyLG8pKX0pKGUsbixpLHIsdCxvKSl9LGJ3dD1mdW5jdGlvbiB4d3QodCl7cmV0dXJuIHQ9PXQmJiFHeXQodCl9LHd3dD1mdW5jdGlvbiBTd3QodCxlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG51bGwhPW4mJm5bdF09PT1lJiYodm9pZCAwIT09ZXx8dCBpbiBPYmplY3QobikpfX0sTXd0PWZ1bmN0aW9uIEV3dCh0KXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHR8fEZ2dCh0KSYmIltvYmplY3QgU3ltYm9sXSI9PVV5dCh0KX0sVHd0PS9cLnxcWyg/OlteW1xdXSp8KFsiJ10pKD86KD8hXDEpW15cXF18XFwuKSo/XDEpXF0vLEN3dD0vXlx3KiQvLEF3dD1mdW5jdGlvbiBrd3QodCxlKXtpZihYdnQodCkpcmV0dXJuITE7dmFyIG49dHlwZW9mIHQ7cmV0dXJuISgibnVtYmVyIiE9biYmInN5bWJvbCIhPW4mJiJib29sZWFuIiE9biYmbnVsbCE9dCYmIU13dCh0KSl8fEN3dC50ZXN0KHQpfHwhVHd0LnRlc3QodCl8fG51bGwhPWUmJnQgaW4gT2JqZWN0KGUpfTtmdW5jdGlvbiBMd3QodCxlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdHx8bnVsbCE9ZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgYSBmdW5jdGlvbiIpO3ZhciBuPWZ1bmN0aW9uKCl7dmFyIGk9YXJndW1lbnRzLHI9ZT9lLmFwcGx5KHRoaXMsaSk6aVswXSxvPW4uY2FjaGU7aWYoby5oYXMocikpcmV0dXJuIG8uZ2V0KHIpO3ZhciBhPXQuYXBwbHkodGhpcyxpKTtyZXR1cm4gbi5jYWNoZT1vLnNldChyLGEpfHxvLGF9O3JldHVybiBuLmNhY2hlPW5ldyhMd3QuQ2FjaGV8fHd2dCksbn1Md3QuQ2FjaGU9d3Z0O3ZhciBQd3QsTnd0PUx3dCxJd3Q9L1teLltcXV0rfFxbKD86KC0/XGQrKD86XC5cZCspPyl8KFsiJ10pKCg/Oig/IVwyKVteXFxdfFxcLikqPylcMilcXXwoPz0oPzpcLnxcW1xdKSg/OlwufFxbXF18JCkpL2csT3d0PS9cXChcXCk/L2csUnd0PShmdW5jdGlvbiB6d3QodCl7dmFyIGU9Tnd0KHQsKGZ1bmN0aW9uKHQpe3JldHVybiA1MDA9PT1uLnNpemUmJm4uY2xlYXIoKSx0fSkpLG49ZS5jYWNoZTtyZXR1cm4gZX0pKChmdW5jdGlvbih0KXt2YXIgZT1bXTtyZXR1cm4gNDY9PT10LmNoYXJDb2RlQXQoMCkmJmUucHVzaCgiIiksdC5yZXBsYWNlKEl3dCwoZnVuY3Rpb24odCxuLGkscil7ZS5wdXNoKGk/ci5yZXBsYWNlKE93dCwiJDEiKTpufHx0KX0pKSxlfSkpLER3dD1mdW5jdGlvbiBCd3QodCxlKXtmb3IodmFyIG49LTEsaT1udWxsPT10PzA6dC5sZW5ndGgscj1BcnJheShpKTsrK248aTspcltuXT1lKHRbbl0sbix0KTtyZXR1cm4gcn0sSHd0PVJ5dD9SeXQucHJvdG90eXBlOnZvaWQgMCxGd3Q9SHd0P0h3dC50b1N0cmluZzp2b2lkIDAsVnd0PWZ1bmN0aW9uIHQoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBlO2lmKFh2dChlKSlyZXR1cm4gRHd0KGUsdCkrIiI7aWYoTXd0KGUpKXJldHVybiBGd3Q/Rnd0LmNhbGwoZSk6IiI7dmFyIG49ZSsiIjtyZXR1cm4iMCI9PW4mJjEvZT09LTEvMD8iLTAiOm59LFV3dD1mdW5jdGlvbiBqd3QodCl7cmV0dXJuIG51bGw9PXQ/IiI6Vnd0KHQpfSxHd3Q9ZnVuY3Rpb24gV3d0KHQsZSl7cmV0dXJuIFh2dCh0KT90OkF3dCh0LGUpP1t0XTpSd3QoVXd0KHQpKX0scXd0PWZ1bmN0aW9uIFl3dCh0KXtpZigic3RyaW5nIj09dHlwZW9mIHR8fE13dCh0KSlyZXR1cm4gdDt2YXIgZT10KyIiO3JldHVybiIwIj09ZSYmMS90PT0tMS8wPyItMCI6ZX0sWHd0PWZ1bmN0aW9uICR3dCh0LGUpe2Zvcih2YXIgbj0wLGk9KGU9R3d0KGUsdCkpLmxlbmd0aDtudWxsIT10JiZuPGk7KXQ9dFtxd3QoZVtuKytdKV07cmV0dXJuIG4mJm49PWk/dDp2b2lkIDB9LEt3dD1mdW5jdGlvbiBad3QodCxlKXtyZXR1cm4gbnVsbCE9dCYmZSBpbiBPYmplY3QodCl9LEp3dD1mdW5jdGlvbiBRd3QodCxlLG4pe2Zvcih2YXIgaT0tMSxyPShlPUd3dChlLHQpKS5sZW5ndGgsbz0hMTsrK2k8cjspe3ZhciBhPXF3dChlW2ldKTtpZighKG89bnVsbCE9dCYmbih0LGEpKSlicmVhazt0PXRbYV19cmV0dXJuIG98fCsraSE9cj9vOiEhKHI9bnVsbD09dD8wOnQubGVuZ3RoKSYmZWJ0KHIpJiZRdnQoYSxyKSYmKFh2dCh0KXx8WXZ0KHQpKX0sdFN0PWZ1bmN0aW9uIGVTdCh0LGUpe3JldHVybiBudWxsIT10JiZKd3QodCxlLEt3dCl9LG5TdD1mdW5jdGlvbiBpU3QodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP3ZvaWQgMDplW3RdfX0sclN0PWZ1bmN0aW9uIG9TdCh0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD90Om51bGw9PXQ/anh0OiJvYmplY3QiPT10eXBlb2YgdD9YdnQodCk/KGZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gQXd0KHQpJiZid3Qobik/d3d0KHF3dCh0KSxuKTpmdW5jdGlvbihlKXt2YXIgaT0oZnVuY3Rpb24gcih0LGUsbil7dmFyIGk9bnVsbD09dD92b2lkIDA6WHd0KHQsZSk7cmV0dXJuIHZvaWQgMD09PWk/bjppfSkoZSx0KTtyZXR1cm4gdm9pZCAwPT09aSYmaT09PW4/dFN0KGUsdCk6dnd0KG4saSwzKX19KSh0WzBdLHRbMV0pOihmdW5jdGlvbiBuKHQpe3ZhciBlPShmdW5jdGlvbiBuKHQpe2Zvcih2YXIgZT1NYnQodCksbj1lLmxlbmd0aDtuLS07KXt2YXIgaT1lW25dLHI9dFtpXTtlW25dPVtpLHIsYnd0KHIpXX1yZXR1cm4gZX0pKHQpO3JldHVybiAxPT1lLmxlbmd0aCYmZVswXVsyXT93d3QoZVswXVswXSxlWzBdWzFdKTpmdW5jdGlvbihuKXtyZXR1cm4gbj09PXR8fChmdW5jdGlvbiBpKHQsZSxuLHIpe3ZhciBvPW4ubGVuZ3RoLGE9byxzPSFyO2lmKG51bGw9PXQpcmV0dXJuIWE7Zm9yKHQ9T2JqZWN0KHQpO28tLTspe3ZhciBsPW5bb107aWYocyYmbFsyXT9sWzFdIT09dFtsWzBdXTohKGxbMF1pbiB0KSlyZXR1cm4hMX1mb3IoOysrbzxhOyl7dmFyIGM9KGw9bltvXSlbMF0sdT10W2NdLGg9bFsxXTtpZihzJiZsWzJdKXtpZih2b2lkIDA9PT11JiYhKGMgaW4gdCkpcmV0dXJuITF9ZWxzZXt2YXIgZD1uZXcga3Z0O2lmKHIpdmFyIHA9cih1LGgsYyx0LGUsZCk7aWYoISh2b2lkIDA9PT1wP3Z3dChoLHUsMyxyLGQpOnApKXJldHVybiExfX1yZXR1cm4hMH0pKG4sdCxlKX19KSh0KTooZnVuY3Rpb24gaSh0KXtyZXR1cm4gQXd0KHQpP25TdChxd3QodCkpOihmdW5jdGlvbiBlKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gWHd0KGUsdCl9fSkodCl9KSh0KX0sYVN0PWZ1bmN0aW9uIHNTdCh0LGUpe3JldHVybihYdnQodCk/TmJ0Okt4dCkodCxyU3QoZSkpfSxsU3Q9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxjU3Q9ZnVuY3Rpb24gdVN0KHQsZSl7cmV0dXJuIG51bGwhPXQmJmxTdC5jYWxsKHQsZSl9LGhTdD1mdW5jdGlvbiBkU3QodCxlKXtyZXR1cm4gbnVsbCE9dCYmSnd0KHQsZSxjU3QpfSxwU3Q9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxmU3Q9ZnVuY3Rpb24gbVN0KHQpe3JldHVybiB2b2lkIDA9PT10fSxnU3Q9ZnVuY3Rpb24gX1N0KHQsZSl7dmFyIG49LTEsaT13YnQodCk/QXJyYXkodC5sZW5ndGgpOltdO3JldHVybiBWeHQodCwoZnVuY3Rpb24odCxyLG8pe2lbKytuXT1lKHQscixvKX0pKSxpfSx5U3Q9ZnVuY3Rpb24gdlN0KHQsZSl7cmV0dXJuKFh2dCh0KT9Ed3Q6Z1N0KSh0LHJTdChlKSl9LGJTdD1mdW5jdGlvbiB4U3QodCxlLG4saSl7dmFyIHI9LTEsbz1udWxsPT10PzA6dC5sZW5ndGg7Zm9yKGkmJm8mJihuPXRbKytyXSk7KytyPG87KW49ZShuLHRbcl0scix0KTtyZXR1cm4gbn0sd1N0PWZ1bmN0aW9uIFNTdCh0LGUsbixpLHIpe3JldHVybiByKHQsKGZ1bmN0aW9uKHQscixvKXtuPWk/KGk9ITEsdCk6ZShuLHQscixvKX0pKSxufSxNU3Q9ZnVuY3Rpb24gRVN0KHQsZSxuKXt2YXIgaT1YdnQodCk/YlN0OndTdCxyPWFyZ3VtZW50cy5sZW5ndGg8MztyZXR1cm4gaSh0LHJTdChlKSxuLHIsVnh0KX0sVFN0PW5TdCgibGVuZ3RoIiksQ1N0PVJlZ0V4cCgiW1xcdTIwMGRcXHVkODAwLVxcdWRmZmZcXHUwMzAwLVxcdTAzNmZcXHVmZTIwLVxcdWZlMmZcXHUyMGQwLVxcdTIwZmZcXHVmZTBlXFx1ZmUwZl0iKSxBU3Q9IltcXHUwMzAwLVxcdTAzNmZcXHVmZTIwLVxcdWZlMmZcXHUyMGQwLVxcdTIwZmZdIixrU3Q9IlxcdWQ4M2NbXFx1ZGZmYi1cXHVkZmZmXSIsTFN0PSJbXlxcdWQ4MDAtXFx1ZGZmZl0iLFBTdD0iKD86XFx1ZDgzY1tcXHVkZGU2LVxcdWRkZmZdKXsyfSIsTlN0PSJbXFx1ZDgwMC1cXHVkYmZmXVtcXHVkYzAwLVxcdWRmZmZdIixJU3Q9Iig/OiIrQVN0KyJ8IitrU3QrIik/IixPU3Q9IltcXHVmZTBlXFx1ZmUwZl0/IixSU3Q9T1N0K0lTdCsiKD86XFx1MjAwZCg/OiIrW0xTdCxQU3QsTlN0XS5qb2luKCJ8IikrIikiK09TdCtJU3QrIikqIix6U3Q9Iig/OiIrW0xTdCtBU3QrIj8iLEFTdCxQU3QsTlN0LCJbXFx1ZDgwMC1cXHVkZmZmXSJdLmpvaW4oInwiKSsiKSIsRFN0PVJlZ0V4cChrU3QrIig/PSIra1N0KyIpfCIrelN0K1JTdCwiZyIpLEJTdD1SeXQ/Unl0LmlzQ29uY2F0U3ByZWFkYWJsZTp2b2lkIDAsSFN0PWZ1bmN0aW9uIEZTdCh0KXtyZXR1cm4gWHZ0KHQpfHxZdnQodCl8fCEhKEJTdCYmdCYmdFtCU3RdKX0sVlN0PWZ1bmN0aW9uIHQoZSxuLGkscixvKXt2YXIgYT0tMSxzPWUubGVuZ3RoO2ZvcihpfHwoaT1IU3QpLG98fChvPVtdKTsrK2E8czspe3ZhciBsPWVbYV07bj4wJiZpKGwpP24+MT90KGwsbi0xLGkscixvKTpIYnQobyxsKTpyfHwob1tvLmxlbmd0aF09bCl9cmV0dXJuIG99LFVTdD1mdW5jdGlvbiBqU3QodCxlLG4pe3N3aXRjaChuLmxlbmd0aCl7Y2FzZSAwOnJldHVybiB0LmNhbGwoZSk7Y2FzZSAxOnJldHVybiB0LmNhbGwoZSxuWzBdKTtjYXNlIDI6cmV0dXJuIHQuY2FsbChlLG5bMF0sblsxXSk7Y2FzZSAzOnJldHVybiB0LmNhbGwoZSxuWzBdLG5bMV0sblsyXSl9cmV0dXJuIHQuYXBwbHkoZSxuKX0sR1N0PU1hdGgubWF4LFdTdD1mdW5jdGlvbiBxU3QodCxlLG4pe3JldHVybiBlPUdTdCh2b2lkIDA9PT1lP3QubGVuZ3RoLTE6ZSwwKSxmdW5jdGlvbigpe2Zvcih2YXIgaT1hcmd1bWVudHMscj0tMSxvPUdTdChpLmxlbmd0aC1lLDApLGE9QXJyYXkobyk7KytyPG87KWFbcl09aVtlK3JdO3I9LTE7Zm9yKHZhciBzPUFycmF5KGUrMSk7KytyPGU7KXNbcl09aVtyXTtyZXR1cm4gc1tlXT1uKGEpLFVTdCh0LHRoaXMscyl9fSxZU3Q9RGF0ZS5ub3csWFN0PShmdW5jdGlvbiAkU3QodCl7dmFyIGU9MCxuPTA7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGk9WVN0KCkscj0xNi0oaS1uKTtpZihuPWkscj4wKXtpZigrK2U+PTgwMClyZXR1cm4gYXJndW1lbnRzWzBdfWVsc2UgZT0wO3JldHVybiB0LmFwcGx5KHZvaWQgMCxhcmd1bWVudHMpfX0pKE52dD9mdW5jdGlvbih0LGUpe3JldHVybiBOdnQodCwidG9TdHJpbmciLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx2YWx1ZTpSeHQoZSksd3JpdGFibGU6ITB9KX06anh0KSxLU3Q9ZnVuY3Rpb24gWlN0KHQsZSl7cmV0dXJuIFhTdChXU3QodCxlLGp4dCksdCsiIil9LEpTdD1mdW5jdGlvbiBRU3QodCxlLG4saSl7Zm9yKHZhciByPXQubGVuZ3RoLG89bisoaT8xOi0xKTtpP28tLTorK288cjspaWYoZSh0W29dLG8sdCkpcmV0dXJuIG87cmV0dXJuLTF9LHRNdD1mdW5jdGlvbiBlTXQodCl7cmV0dXJuIHQhPXR9LG5NdD1mdW5jdGlvbiBpTXQodCxlKXtyZXR1cm4hKG51bGw9PXR8fCF0Lmxlbmd0aCkmJihmdW5jdGlvbiBuKHQsZSxpKXtyZXR1cm4gZT09ZT8oZnVuY3Rpb24gcih0LGUsbil7Zm9yKHZhciBpPW4tMSxyPXQubGVuZ3RoOysraTxyOylpZih0W2ldPT09ZSlyZXR1cm4gaTtyZXR1cm4tMX0pKHQsZSxpKTpKU3QodCx0TXQsaSl9KSh0LGUsMCk+LTF9LHJNdD1mdW5jdGlvbiBvTXQodCxlLG4pe2Zvcih2YXIgaT0tMSxyPW51bGw9PXQ/MDp0Lmxlbmd0aDsrK2k8cjspaWYobihlLHRbaV0pKXJldHVybiEwO3JldHVybiExfSxhTXQ9WmJ0JiYxL3V3dChuZXcgWmJ0KFssLTBdKSlbMV09PTEvMD9mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFpidCh0KX06ZnVuY3Rpb24gc010KCl7fSxsTXQ9ZnVuY3Rpb24gY010KHQpe3JldHVybiBGdnQodCkmJndidCh0KX0sdU10PUtTdCgoZnVuY3Rpb24odCl7cmV0dXJuKGZ1bmN0aW9uIGUodCxuLGkpe3ZhciByPS0xLG89bk10LGE9dC5sZW5ndGgscz0hMCxsPVtdLGM9bDtpZihpKXM9ITEsbz1yTXQ7ZWxzZSBpZihhPj0yMDApe3ZhciB1PW4/bnVsbDphTXQodCk7aWYodSlyZXR1cm4gdXd0KHUpO3M9ITEsbz1yd3QsYz1uZXcgZXd0fWVsc2UgYz1uP1tdOmw7dDpmb3IoOysrcjxhOyl7dmFyIGg9dFtyXSxkPW4/bihoKTpoO2lmKGg9aXx8MCE9PWg/aDowLHMmJmQ9PWQpe2Zvcih2YXIgcD1jLmxlbmd0aDtwLS07KWlmKGNbcF09PT1kKWNvbnRpbnVlIHQ7biYmYy5wdXNoKGQpLGwucHVzaChoKX1lbHNlIG8oYyxkLGkpfHwoYyE9PWwmJmMucHVzaChkKSxsLnB1c2goaCkpfXJldHVybiBsfSkoVlN0KHQsMSxsTXQsITApKX0pKSxoTXQ9ZnVuY3Rpb24gZE10KHQpe3JldHVybiBudWxsPT10P1tdOihmdW5jdGlvbiBlKHQsbil7cmV0dXJuIER3dChuLChmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pKX0pKHQsTWJ0KHQpKX07dHJ5e1B3dD17Y2xvbmU6ZnVuY3Rpb24gcE10KHQpe3JldHVybiBPeHQodCw0KX0sY29uc3RhbnQ6Unh0LGVhY2g6JHh0LGZpbHRlcjphU3QsaGFzOmhTdCxpc0FycmF5Olh2dCxpc0VtcHR5OmZ1bmN0aW9uIGZNdCh0KXtpZihudWxsPT10KXJldHVybiEwO2lmKHdidCh0KSYmKFh2dCh0KXx8InN0cmluZyI9PXR5cGVvZiB0fHwiZnVuY3Rpb24iPT10eXBlb2YgdC5zcGxpY2V8fFp2dCh0KXx8bGJ0KHQpfHxZdnQodCkpKXJldHVybiF0Lmxlbmd0aDt2YXIgZT11eHQodCk7aWYoIltvYmplY3QgTWFwXSI9PWV8fCJbb2JqZWN0IFNldF0iPT1lKXJldHVybiF0LnNpemU7aWYoZmJ0KHQpKXJldHVybiFiYnQodCkubGVuZ3RoO2Zvcih2YXIgbiBpbiB0KWlmKHBTdC5jYWxsKHQsbikpcmV0dXJuITE7cmV0dXJuITB9LGlzRnVuY3Rpb246cXl0LGlzVW5kZWZpbmVkOmZTdCxrZXlzOk1idCxtYXA6eVN0LHJlZHVjZTpNU3Qsc2l6ZTpmdW5jdGlvbiBtTXQodCl7aWYobnVsbD09dClyZXR1cm4gMDtpZih3YnQodCkpcmV0dXJuKGZ1bmN0aW9uIGUodCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0fHwhWHZ0KHQpJiZGdnQodCkmJiJbb2JqZWN0IFN0cmluZ10iPT1VeXQodCl9KSh0KT8oZnVuY3Rpb24gbih0KXtyZXR1cm4oZnVuY3Rpb24gZSh0KXtyZXR1cm4gQ1N0LnRlc3QodCl9KSh0KT8oZnVuY3Rpb24gbih0KXtmb3IodmFyIGU9RFN0Lmxhc3RJbmRleD0wO0RTdC50ZXN0KHQpOykrK2U7cmV0dXJuIGV9KSh0KTpUU3QodCl9KSh0KTp0Lmxlbmd0aDt2YXIgaT11eHQodCk7cmV0dXJuIltvYmplY3QgTWFwXSI9PWl8fCJbb2JqZWN0IFNldF0iPT1pP3Quc2l6ZTpiYnQodCkubGVuZ3RofSx0cmFuc2Zvcm06ZnVuY3Rpb24gZ010KHQsZSxuKXt2YXIgaT1YdnQodCkscj1pfHxadnQodCl8fGxidCh0KTtpZihlPXJTdChlKSxudWxsPT1uKXt2YXIgbz10JiZ0LmNvbnN0cnVjdG9yO249cj9pP25ldyBvOltdOkd5dCh0KSYmcXl0KG8pP3h4dChWYnQodCkpOnt9fXJldHVybihyP0x2dDpIeHQpKHQsKGZ1bmN0aW9uKHQsaSxyKXtyZXR1cm4gZShuLHQsaSxyKX0pKSxufSx1bmlvbjp1TXQsdmFsdWVzOmhNdH19Y2F0Y2godCl7fVB3dHx8KFB3dD13aW5kb3cuXyk7dmFyIF9NdD1Qd3QseU10PWJNdCx2TXQ9IlwwIjtmdW5jdGlvbiBiTXQodCl7dGhpcy5faXNEaXJlY3RlZD0hX010Lmhhcyh0LCJkaXJlY3RlZCIpfHx0LmRpcmVjdGVkLHRoaXMuX2lzTXVsdGlncmFwaD0hIV9NdC5oYXModCwibXVsdGlncmFwaCIpJiZ0Lm11bHRpZ3JhcGgsdGhpcy5faXNDb21wb3VuZD0hIV9NdC5oYXModCwiY29tcG91bmQiKSYmdC5jb21wb3VuZCx0aGlzLl9sYWJlbD12b2lkIDAsdGhpcy5fZGVmYXVsdE5vZGVMYWJlbEZuPV9NdC5jb25zdGFudCh2b2lkIDApLHRoaXMuX2RlZmF1bHRFZGdlTGFiZWxGbj1fTXQuY29uc3RhbnQodm9pZCAwKSx0aGlzLl9ub2Rlcz17fSx0aGlzLl9pc0NvbXBvdW5kJiYodGhpcy5fcGFyZW50PXt9LHRoaXMuX2NoaWxkcmVuPXt9LHRoaXMuX2NoaWxkcmVuWyJcMCJdPXt9KSx0aGlzLl9pbj17fSx0aGlzLl9wcmVkcz17fSx0aGlzLl9vdXQ9e30sdGhpcy5fc3Vjcz17fSx0aGlzLl9lZGdlT2Jqcz17fSx0aGlzLl9lZGdlTGFiZWxzPXt9fWZ1bmN0aW9uIHhNdCh0LGUpe3RbZV0/dFtlXSsrOnRbZV09MX1mdW5jdGlvbiB3TXQodCxlKXstLXRbZV18fGRlbGV0ZSB0W2VdfWZ1bmN0aW9uIFNNdCh0LGUsbixpKXt2YXIgcj0iIitlLG89IiIrbjtpZighdCYmcj5vKXt2YXIgYT1yO3I9byxvPWF9cmV0dXJuIHIrIgEiK28rIgEiKyhfTXQuaXNVbmRlZmluZWQoaSk/IlwwIjppKX1mdW5jdGlvbiBNTXQodCxlLG4saSl7dmFyIHI9IiIrZSxvPSIiK247aWYoIXQmJnI+byl7dmFyIGE9cjtyPW8sbz1hfXZhciBzPXt2OnIsdzpvfTtyZXR1cm4gaSYmKHMubmFtZT1pKSxzfWZ1bmN0aW9uIEVNdCh0LGUpe3JldHVybiBTTXQodCxlLnYsZS53LGUubmFtZSl9Yk10LnByb3RvdHlwZS5fbm9kZUNvdW50PTAsYk10LnByb3RvdHlwZS5fZWRnZUNvdW50PTAsYk10LnByb3RvdHlwZS5pc0RpcmVjdGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzRGlyZWN0ZWR9LGJNdC5wcm90b3R5cGUuaXNNdWx0aWdyYXBoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzTXVsdGlncmFwaH0sYk10LnByb3RvdHlwZS5pc0NvbXBvdW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzQ29tcG91bmR9LGJNdC5wcm90b3R5cGUuc2V0R3JhcGg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2xhYmVsPXQsdGhpc30sYk10LnByb3RvdHlwZS5ncmFwaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9sYWJlbH0sYk10LnByb3RvdHlwZS5zZXREZWZhdWx0Tm9kZUxhYmVsPWZ1bmN0aW9uKHQpe3JldHVybiBfTXQuaXNGdW5jdGlvbih0KXx8KHQ9X010LmNvbnN0YW50KHQpKSx0aGlzLl9kZWZhdWx0Tm9kZUxhYmVsRm49dCx0aGlzfSxiTXQucHJvdG90eXBlLm5vZGVDb3VudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9ub2RlQ291bnR9LGJNdC5wcm90b3R5cGUubm9kZXM9ZnVuY3Rpb24oKXtyZXR1cm4gX010LmtleXModGhpcy5fbm9kZXMpfSxiTXQucHJvdG90eXBlLnNvdXJjZXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiBfTXQuZmlsdGVyKHRoaXMubm9kZXMoKSwoZnVuY3Rpb24oZSl7cmV0dXJuIF9NdC5pc0VtcHR5KHQuX2luW2VdKX0pKX0sYk10LnByb3RvdHlwZS5zaW5rcz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIF9NdC5maWx0ZXIodGhpcy5ub2RlcygpLChmdW5jdGlvbihlKXtyZXR1cm4gX010LmlzRW1wdHkodC5fb3V0W2VdKX0pKX0sYk10LnByb3RvdHlwZS5zZXROb2Rlcz1mdW5jdGlvbih0LGUpe3ZhciBuPWFyZ3VtZW50cyxpPXRoaXM7cmV0dXJuIF9NdC5lYWNoKHQsKGZ1bmN0aW9uKHQpe24ubGVuZ3RoPjE/aS5zZXROb2RlKHQsZSk6aS5zZXROb2RlKHQpfSkpLHRoaXN9LGJNdC5wcm90b3R5cGUuc2V0Tm9kZT1mdW5jdGlvbih0LGUpe3JldHVybiBfTXQuaGFzKHRoaXMuX25vZGVzLHQpPyhhcmd1bWVudHMubGVuZ3RoPjEmJih0aGlzLl9ub2Rlc1t0XT1lKSx0aGlzKToodGhpcy5fbm9kZXNbdF09YXJndW1lbnRzLmxlbmd0aD4xP2U6dGhpcy5fZGVmYXVsdE5vZGVMYWJlbEZuKHQpLHRoaXMuX2lzQ29tcG91bmQmJih0aGlzLl9wYXJlbnRbdF09dk10LHRoaXMuX2NoaWxkcmVuW3RdPXt9LHRoaXMuX2NoaWxkcmVuWyJcMCJdW3RdPSEwKSx0aGlzLl9pblt0XT17fSx0aGlzLl9wcmVkc1t0XT17fSx0aGlzLl9vdXRbdF09e30sdGhpcy5fc3Vjc1t0XT17fSwrK3RoaXMuX25vZGVDb3VudCx0aGlzKX0sYk10LnByb3RvdHlwZS5ub2RlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ub2Rlc1t0XX0sYk10LnByb3RvdHlwZS5oYXNOb2RlPWZ1bmN0aW9uKHQpe3JldHVybiBfTXQuaGFzKHRoaXMuX25vZGVzLHQpfSxiTXQucHJvdG90eXBlLnJlbW92ZU5vZGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZihfTXQuaGFzKHRoaXMuX25vZGVzLHQpKXt2YXIgbj1mdW5jdGlvbih0KXtlLnJlbW92ZUVkZ2UoZS5fZWRnZU9ianNbdF0pfTtkZWxldGUgdGhpcy5fbm9kZXNbdF0sdGhpcy5faXNDb21wb3VuZCYmKHRoaXMuX3JlbW92ZUZyb21QYXJlbnRzQ2hpbGRMaXN0KHQpLGRlbGV0ZSB0aGlzLl9wYXJlbnRbdF0sX010LmVhY2godGhpcy5jaGlsZHJlbih0KSwoZnVuY3Rpb24odCl7ZS5zZXRQYXJlbnQodCl9KSksZGVsZXRlIHRoaXMuX2NoaWxkcmVuW3RdKSxfTXQuZWFjaChfTXQua2V5cyh0aGlzLl9pblt0XSksbiksZGVsZXRlIHRoaXMuX2luW3RdLGRlbGV0ZSB0aGlzLl9wcmVkc1t0XSxfTXQuZWFjaChfTXQua2V5cyh0aGlzLl9vdXRbdF0pLG4pLGRlbGV0ZSB0aGlzLl9vdXRbdF0sZGVsZXRlIHRoaXMuX3N1Y3NbdF0sLS10aGlzLl9ub2RlQ291bnR9cmV0dXJuIHRoaXN9LGJNdC5wcm90b3R5cGUuc2V0UGFyZW50PWZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMuX2lzQ29tcG91bmQpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc2V0IHBhcmVudCBpbiBhIG5vbi1jb21wb3VuZCBncmFwaCIpO2lmKF9NdC5pc1VuZGVmaW5lZChlKSllPXZNdDtlbHNle2Zvcih2YXIgbj1lKz0iIjshX010LmlzVW5kZWZpbmVkKG4pO249dGhpcy5wYXJlbnQobikpaWYobj09PXQpdGhyb3cgbmV3IEVycm9yKCJTZXR0aW5nICIrZSsiIGFzIHBhcmVudCBvZiAiK3QrIiB3b3VsZCBjcmVhdGUgYSBjeWNsZSIpO3RoaXMuc2V0Tm9kZShlKX1yZXR1cm4gdGhpcy5zZXROb2RlKHQpLHRoaXMuX3JlbW92ZUZyb21QYXJlbnRzQ2hpbGRMaXN0KHQpLHRoaXMuX3BhcmVudFt0XT1lLHRoaXMuX2NoaWxkcmVuW2VdW3RdPSEwLHRoaXN9LGJNdC5wcm90b3R5cGUuX3JlbW92ZUZyb21QYXJlbnRzQ2hpbGRMaXN0PWZ1bmN0aW9uKHQpe2RlbGV0ZSB0aGlzLl9jaGlsZHJlblt0aGlzLl9wYXJlbnRbdF1dW3RdfSxiTXQucHJvdG90eXBlLnBhcmVudD1mdW5jdGlvbih0KXtpZih0aGlzLl9pc0NvbXBvdW5kKXt2YXIgZT10aGlzLl9wYXJlbnRbdF07aWYoZSE9PXZNdClyZXR1cm4gZX19LGJNdC5wcm90b3R5cGUuY2hpbGRyZW49ZnVuY3Rpb24odCl7aWYoX010LmlzVW5kZWZpbmVkKHQpJiYodD12TXQpLHRoaXMuX2lzQ29tcG91bmQpe3ZhciBlPXRoaXMuX2NoaWxkcmVuW3RdO2lmKGUpcmV0dXJuIF9NdC5rZXlzKGUpfWVsc2V7aWYodD09PXZNdClyZXR1cm4gdGhpcy5ub2RlcygpO2lmKHRoaXMuaGFzTm9kZSh0KSlyZXR1cm5bXX19LGJNdC5wcm90b3R5cGUucHJlZGVjZXNzb3JzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ByZWRzW3RdO2lmKGUpcmV0dXJuIF9NdC5rZXlzKGUpfSxiTXQucHJvdG90eXBlLnN1Y2Nlc3NvcnM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fc3Vjc1t0XTtpZihlKXJldHVybiBfTXQua2V5cyhlKX0sYk10LnByb3RvdHlwZS5uZWlnaGJvcnM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5wcmVkZWNlc3NvcnModCk7aWYoZSlyZXR1cm4gX010LnVuaW9uKGUsdGhpcy5zdWNjZXNzb3JzKHQpKX0sYk10LnByb3RvdHlwZS5pc0xlYWY9ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT0odGhpcy5pc0RpcmVjdGVkKCk/dGhpcy5zdWNjZXNzb3JzKHQpOnRoaXMubmVpZ2hib3JzKHQpKS5sZW5ndGh9LGJNdC5wcm90b3R5cGUuZmlsdGVyTm9kZXM9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IHRoaXMuY29uc3RydWN0b3Ioe2RpcmVjdGVkOnRoaXMuX2lzRGlyZWN0ZWQsbXVsdGlncmFwaDp0aGlzLl9pc011bHRpZ3JhcGgsY29tcG91bmQ6dGhpcy5faXNDb21wb3VuZH0pO2Uuc2V0R3JhcGgodGhpcy5ncmFwaCgpKTt2YXIgbj10aGlzO19NdC5lYWNoKHRoaXMuX25vZGVzLChmdW5jdGlvbihuLGkpe3QoaSkmJmUuc2V0Tm9kZShpLG4pfSkpLF9NdC5lYWNoKHRoaXMuX2VkZ2VPYmpzLChmdW5jdGlvbih0KXtlLmhhc05vZGUodC52KSYmZS5oYXNOb2RlKHQudykmJmUuc2V0RWRnZSh0LG4uZWRnZSh0KSl9KSk7dmFyIGk9e307ZnVuY3Rpb24gcih0KXt2YXIgbz1uLnBhcmVudCh0KTtyZXR1cm4gdm9pZCAwPT09b3x8ZS5oYXNOb2RlKG8pPyhpW3RdPW8sbyk6byBpbiBpP2lbb106cihvKX1yZXR1cm4gdGhpcy5faXNDb21wb3VuZCYmX010LmVhY2goZS5ub2RlcygpLChmdW5jdGlvbih0KXtlLnNldFBhcmVudCh0LHIodCkpfSkpLGV9LGJNdC5wcm90b3R5cGUuc2V0RGVmYXVsdEVkZ2VMYWJlbD1mdW5jdGlvbih0KXtyZXR1cm4gX010LmlzRnVuY3Rpb24odCl8fCh0PV9NdC5jb25zdGFudCh0KSksdGhpcy5fZGVmYXVsdEVkZ2VMYWJlbEZuPXQsdGhpc30sYk10LnByb3RvdHlwZS5lZGdlQ291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWRnZUNvdW50fSxiTXQucHJvdG90eXBlLmVkZ2VzPWZ1bmN0aW9uKCl7cmV0dXJuIF9NdC52YWx1ZXModGhpcy5fZWRnZU9ianMpfSxiTXQucHJvdG90eXBlLnNldFBhdGg9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLGk9YXJndW1lbnRzO3JldHVybiBfTXQucmVkdWNlKHQsKGZ1bmN0aW9uKHQscil7cmV0dXJuIGkubGVuZ3RoPjE/bi5zZXRFZGdlKHQscixlKTpuLnNldEVkZ2UodCxyKSxyfSkpLHRoaXN9LGJNdC5wcm90b3R5cGUuc2V0RWRnZT1mdW5jdGlvbigpe3ZhciB0LGUsbixpLHI9ITEsbz1hcmd1bWVudHNbMF07Im9iamVjdCI9PXR5cGVvZiBvJiZudWxsIT09byYmInYiaW4gbz8odD1vLnYsZT1vLncsbj1vLm5hbWUsMj09PWFyZ3VtZW50cy5sZW5ndGgmJihpPWFyZ3VtZW50c1sxXSxyPSEwKSk6KHQ9byxlPWFyZ3VtZW50c1sxXSxuPWFyZ3VtZW50c1szXSxhcmd1bWVudHMubGVuZ3RoPjImJihpPWFyZ3VtZW50c1syXSxyPSEwKSksdD0iIit0LGU9IiIrZSxfTXQuaXNVbmRlZmluZWQobil8fChuPSIiK24pO3ZhciBhPVNNdCh0aGlzLl9pc0RpcmVjdGVkLHQsZSxuKTtpZihfTXQuaGFzKHRoaXMuX2VkZ2VMYWJlbHMsYSkpcmV0dXJuIHImJih0aGlzLl9lZGdlTGFiZWxzW2FdPWkpLHRoaXM7aWYoIV9NdC5pc1VuZGVmaW5lZChuKSYmIXRoaXMuX2lzTXVsdGlncmFwaCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzZXQgYSBuYW1lZCBlZGdlIHdoZW4gaXNNdWx0aWdyYXBoID0gZmFsc2UiKTt0aGlzLnNldE5vZGUodCksdGhpcy5zZXROb2RlKGUpLHRoaXMuX2VkZ2VMYWJlbHNbYV09cj9pOnRoaXMuX2RlZmF1bHRFZGdlTGFiZWxGbih0LGUsbik7dmFyIHM9TU10KHRoaXMuX2lzRGlyZWN0ZWQsdCxlLG4pO3JldHVybiB0PXMudixlPXMudyxPYmplY3QuZnJlZXplKHMpLHRoaXMuX2VkZ2VPYmpzW2FdPXMseE10KHRoaXMuX3ByZWRzW2VdLHQpLHhNdCh0aGlzLl9zdWNzW3RdLGUpLHRoaXMuX2luW2VdW2FdPXMsdGhpcy5fb3V0W3RdW2FdPXMsdGhpcy5fZWRnZUNvdW50KyssdGhpc30sYk10LnByb3RvdHlwZS5lZGdlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT0xPT09YXJndW1lbnRzLmxlbmd0aD9FTXQodGhpcy5faXNEaXJlY3RlZCxhcmd1bWVudHNbMF0pOlNNdCh0aGlzLl9pc0RpcmVjdGVkLHQsZSxuKTtyZXR1cm4gdGhpcy5fZWRnZUxhYmVsc1tpXX0sYk10LnByb3RvdHlwZS5oYXNFZGdlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT0xPT09YXJndW1lbnRzLmxlbmd0aD9FTXQodGhpcy5faXNEaXJlY3RlZCxhcmd1bWVudHNbMF0pOlNNdCh0aGlzLl9pc0RpcmVjdGVkLHQsZSxuKTtyZXR1cm4gX010Lmhhcyh0aGlzLl9lZGdlTGFiZWxzLGkpfSxiTXQucHJvdG90eXBlLnJlbW92ZUVkZ2U9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPTE9PT1hcmd1bWVudHMubGVuZ3RoP0VNdCh0aGlzLl9pc0RpcmVjdGVkLGFyZ3VtZW50c1swXSk6U010KHRoaXMuX2lzRGlyZWN0ZWQsdCxlLG4pLHI9dGhpcy5fZWRnZU9ianNbaV07cmV0dXJuIHImJih0PXIudixlPXIudyxkZWxldGUgdGhpcy5fZWRnZUxhYmVsc1tpXSxkZWxldGUgdGhpcy5fZWRnZU9ianNbaV0sd010KHRoaXMuX3ByZWRzW2VdLHQpLHdNdCh0aGlzLl9zdWNzW3RdLGUpLGRlbGV0ZSB0aGlzLl9pbltlXVtpXSxkZWxldGUgdGhpcy5fb3V0W3RdW2ldLHRoaXMuX2VkZ2VDb3VudC0tKSx0aGlzfSxiTXQucHJvdG90eXBlLmluRWRnZXM9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9pblt0XTtpZihuKXt2YXIgaT1fTXQudmFsdWVzKG4pO3JldHVybiBlP19NdC5maWx0ZXIoaSwoZnVuY3Rpb24odCl7cmV0dXJuIHQudj09PWV9KSk6aX19LGJNdC5wcm90b3R5cGUub3V0RWRnZXM9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9vdXRbdF07aWYobil7dmFyIGk9X010LnZhbHVlcyhuKTtyZXR1cm4gZT9fTXQuZmlsdGVyKGksKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnc9PT1lfSkpOml9fSxiTXQucHJvdG90eXBlLm5vZGVFZGdlcz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuaW5FZGdlcyh0LGUpO2lmKG4pcmV0dXJuIG4uY29uY2F0KHRoaXMub3V0RWRnZXModCxlKSl9O3ZhciBUTXQ9e0dyYXBoOnlNdCx2ZXJzaW9uOiIyLjEuOCJ9LENNdD17d3JpdGU6ZnVuY3Rpb24gQU10KHQpe3ZhciBlPXtvcHRpb25zOntkaXJlY3RlZDp0LmlzRGlyZWN0ZWQoKSxtdWx0aWdyYXBoOnQuaXNNdWx0aWdyYXBoKCksY29tcG91bmQ6dC5pc0NvbXBvdW5kKCl9LG5vZGVzOkxNdCh0KSxlZGdlczpQTXQodCl9O3JldHVybiBfTXQuaXNVbmRlZmluZWQodC5ncmFwaCgpKXx8KGUudmFsdWU9X010LmNsb25lKHQuZ3JhcGgoKSkpLGV9LHJlYWQ6ZnVuY3Rpb24ga010KHQpe3ZhciBlPW5ldyB5TXQodC5vcHRpb25zKS5zZXRHcmFwaCh0LnZhbHVlKTtyZXR1cm4gX010LmVhY2godC5ub2RlcywoZnVuY3Rpb24odCl7ZS5zZXROb2RlKHQudix0LnZhbHVlKSx0LnBhcmVudCYmZS5zZXRQYXJlbnQodC52LHQucGFyZW50KX0pKSxfTXQuZWFjaCh0LmVkZ2VzLChmdW5jdGlvbih0KXtlLnNldEVkZ2Uoe3Y6dC52LHc6dC53LG5hbWU6dC5uYW1lfSx0LnZhbHVlKX0pKSxlfX07ZnVuY3Rpb24gTE10KHQpe3JldHVybiBfTXQubWFwKHQubm9kZXMoKSwoZnVuY3Rpb24oZSl7dmFyIG49dC5ub2RlKGUpLGk9dC5wYXJlbnQoZSkscj17djplfTtyZXR1cm4gX010LmlzVW5kZWZpbmVkKG4pfHwoci52YWx1ZT1uKSxfTXQuaXNVbmRlZmluZWQoaSl8fChyLnBhcmVudD1pKSxyfSkpfWZ1bmN0aW9uIFBNdCh0KXtyZXR1cm4gX010Lm1hcCh0LmVkZ2VzKCksKGZ1bmN0aW9uKGUpe3ZhciBuPXQuZWRnZShlKSxpPXt2OmUudix3OmUud307cmV0dXJuIF9NdC5pc1VuZGVmaW5lZChlLm5hbWUpfHwoaS5uYW1lPWUubmFtZSksX010LmlzVW5kZWZpbmVkKG4pfHwoaS52YWx1ZT1uKSxpfSkpfXZhciBOTXQ9SU10O2Z1bmN0aW9uIElNdCgpe3RoaXMuX2Fycj1bXSx0aGlzLl9rZXlJbmRpY2VzPXt9fUlNdC5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcnIubGVuZ3RofSxJTXQucHJvdG90eXBlLmtleXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXJyLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5fSkpfSxJTXQucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4gX010Lmhhcyh0aGlzLl9rZXlJbmRpY2VzLHQpfSxJTXQucHJvdG90eXBlLnByaW9yaXR5PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2tleUluZGljZXNbdF07aWYodm9pZCAwIT09ZSlyZXR1cm4gdGhpcy5fYXJyW2VdLnByaW9yaXR5fSxJTXQucHJvdG90eXBlLm1pbj1mdW5jdGlvbigpe2lmKDA9PT10aGlzLnNpemUoKSl0aHJvdyBuZXcgRXJyb3IoIlF1ZXVlIHVuZGVyZmxvdyIpO3JldHVybiB0aGlzLl9hcnJbMF0ua2V5fSxJTXQucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX2tleUluZGljZXM7aWYodD1TdHJpbmcodCksIV9NdC5oYXMobix0KSl7dmFyIGk9dGhpcy5fYXJyLHI9aS5sZW5ndGg7cmV0dXJuIG5bdF09cixpLnB1c2goe2tleTp0LHByaW9yaXR5OmV9KSx0aGlzLl9kZWNyZWFzZShyKSwhMH1yZXR1cm4hMX0sSU10LnByb3RvdHlwZS5yZW1vdmVNaW49ZnVuY3Rpb24oKXt0aGlzLl9zd2FwKDAsdGhpcy5fYXJyLmxlbmd0aC0xKTt2YXIgdD10aGlzLl9hcnIucG9wKCk7cmV0dXJuIGRlbGV0ZSB0aGlzLl9rZXlJbmRpY2VzW3Qua2V5XSx0aGlzLl9oZWFwaWZ5KDApLHQua2V5fSxJTXQucHJvdG90eXBlLmRlY3JlYXNlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fa2V5SW5kaWNlc1t0XTtpZihlPnRoaXMuX2FycltuXS5wcmlvcml0eSl0aHJvdyBuZXcgRXJyb3IoIk5ldyBwcmlvcml0eSBpcyBncmVhdGVyIHRoYW4gY3VycmVudCBwcmlvcml0eS4gS2V5OiAiK3QrIiBPbGQ6ICIrdGhpcy5fYXJyW25dLnByaW9yaXR5KyIgTmV3OiAiK2UpO3RoaXMuX2FycltuXS5wcmlvcml0eT1lLHRoaXMuX2RlY3JlYXNlKG4pfSxJTXQucHJvdG90eXBlLl9oZWFwaWZ5PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2FycixuPTIqdCxpPW4rMSxyPXQ7bjxlLmxlbmd0aCYmKHI9ZVtuXS5wcmlvcml0eTxlW3JdLnByaW9yaXR5P246cixpPGUubGVuZ3RoJiYocj1lW2ldLnByaW9yaXR5PGVbcl0ucHJpb3JpdHk/aTpyKSxyIT09dCYmKHRoaXMuX3N3YXAodCxyKSx0aGlzLl9oZWFwaWZ5KHIpKSl9LElNdC5wcm90b3R5cGUuX2RlY3JlYXNlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPXRoaXMuX2FycixpPW5bdF0ucHJpb3JpdHk7MCE9PXQmJiEobltlPXQ+PjFdLnByaW9yaXR5PGkpOyl0aGlzLl9zd2FwKHQsZSksdD1lfSxJTXQucHJvdG90eXBlLl9zd2FwPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fYXJyLGk9dGhpcy5fa2V5SW5kaWNlcyxyPW5bdF0sbz1uW2VdO25bdF09byxuW2VdPXIsaVtvLmtleV09dCxpW3Iua2V5XT1lfTt2YXIgT010PWZ1bmN0aW9uIFJNdCh0LGUsbixpKXtyZXR1cm4oZnVuY3Rpb24gcih0LGUsbixpKXt2YXIgcixvLGE9e30scz1uZXcgTk10LGw9ZnVuY3Rpb24odCl7dmFyIGU9dC52IT09cj90LnY6dC53LGk9YVtlXSxsPW4odCksYz1vLmRpc3RhbmNlK2w7aWYobDwwKXRocm93IG5ldyBFcnJvcigiZGlqa3N0cmEgZG9lcyBub3QgYWxsb3cgbmVnYXRpdmUgZWRnZSB3ZWlnaHRzLiBCYWQgZWRnZTogIit0KyIgV2VpZ2h0OiAiK2wpO2M8aS5kaXN0YW5jZSYmKGkuZGlzdGFuY2U9YyxpLnByZWRlY2Vzc29yPXIscy5kZWNyZWFzZShlLGMpKX07Zm9yKHQubm9kZXMoKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj10PT09ZT8wOk51bWJlci5QT1NJVElWRV9JTkZJTklUWTthW3RdPXtkaXN0YW5jZTpufSxzLmFkZCh0LG4pfSkpO3Muc2l6ZSgpPjAmJihyPXMucmVtb3ZlTWluKCksKG89YVtyXSkuZGlzdGFuY2UhPT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpOylpKHIpLmZvckVhY2gobCk7cmV0dXJuIGF9KSh0LFN0cmluZyhlKSxufHx6TXQsaXx8ZnVuY3Rpb24oZSl7cmV0dXJuIHQub3V0RWRnZXMoZSl9KX0sek10PV9NdC5jb25zdGFudCgxKSxETXQ9ZnVuY3Rpb24gQk10KHQpe3ZhciBlPTAsbj1bXSxpPXt9LHI9W107ZnVuY3Rpb24gbyhhKXt2YXIgcz1pW2FdPXtvblN0YWNrOiEwLGxvd2xpbms6ZSxpbmRleDplKyt9O2lmKG4ucHVzaChhKSx0LnN1Y2Nlc3NvcnMoYSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7X010LmhhcyhpLHQpP2lbdF0ub25TdGFjayYmKHMubG93bGluaz1NYXRoLm1pbihzLmxvd2xpbmssaVt0XS5pbmRleCkpOihvKHQpLHMubG93bGluaz1NYXRoLm1pbihzLmxvd2xpbmssaVt0XS5sb3dsaW5rKSl9KSkscy5sb3dsaW5rPT09cy5pbmRleCl7dmFyIGwsYz1bXTtkb3tsPW4ucG9wKCksaVtsXS5vblN0YWNrPSExLGMucHVzaChsKX13aGlsZShhIT09bCk7ci5wdXNoKGMpfX1yZXR1cm4gdC5ub2RlcygpLmZvckVhY2goKGZ1bmN0aW9uKHQpe19NdC5oYXMoaSx0KXx8byh0KX0pKSxyfSxITXQ9X010LmNvbnN0YW50KDEpLEZNdD1WTXQ7ZnVuY3Rpb24gVk10KHQpe3ZhciBlPXt9LG49e30saT1bXTtpZihfTXQuZWFjaCh0LnNpbmtzKCksKGZ1bmN0aW9uIHIobyl7aWYoX010LmhhcyhuLG8pKXRocm93IG5ldyBVTXQ7X010LmhhcyhlLG8pfHwobltvXT0hMCxlW29dPSEwLF9NdC5lYWNoKHQucHJlZGVjZXNzb3JzKG8pLHIpLGRlbGV0ZSBuW29dLGkucHVzaChvKSl9KSksX010LnNpemUoZSkhPT10Lm5vZGVDb3VudCgpKXRocm93IG5ldyBVTXQ7cmV0dXJuIGl9ZnVuY3Rpb24gVU10KCl7fVZNdC5DeWNsZUV4Y2VwdGlvbj1VTXQsVU10LnByb3RvdHlwZT1uZXcgRXJyb3I7dmFyIGpNdD1mdW5jdGlvbiBHTXQodCxlLG4pe19NdC5pc0FycmF5KGUpfHwoZT1bZV0pO3ZhciBpPSh0LmlzRGlyZWN0ZWQoKT90LnN1Y2Nlc3NvcnM6dC5uZWlnaGJvcnMpLmJpbmQodCkscj1bXSxvPXt9O3JldHVybiBfTXQuZWFjaChlLChmdW5jdGlvbihlKXtpZighdC5oYXNOb2RlKGUpKXRocm93IG5ldyBFcnJvcigiR3JhcGggZG9lcyBub3QgaGF2ZSBub2RlOiAiK2UpO1dNdCh0LGUsInBvc3QiPT09bixvLGkscil9KSkscn07ZnVuY3Rpb24gV010KHQsZSxuLGkscixvKXtfTXQuaGFzKGksZSl8fChpW2VdPSEwLG58fG8ucHVzaChlKSxfTXQuZWFjaChyKGUpLChmdW5jdGlvbihlKXtXTXQodCxlLG4saSxyLG8pfSkpLG4mJm8ucHVzaChlKSl9dmFyIHFNdCxZTXQ9e0dyYXBoOlRNdC5HcmFwaCxqc29uOkNNdCxhbGc6e2NvbXBvbmVudHM6ZnVuY3Rpb24gWE10KHQpe3ZhciBlLG49e30saT1bXTtmdW5jdGlvbiByKGkpe19NdC5oYXMobixpKXx8KG5baV09ITAsZS5wdXNoKGkpLF9NdC5lYWNoKHQuc3VjY2Vzc29ycyhpKSxyKSxfTXQuZWFjaCh0LnByZWRlY2Vzc29ycyhpKSxyKSl9cmV0dXJuIF9NdC5lYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24odCl7ZT1bXSxyKHQpLGUubGVuZ3RoJiZpLnB1c2goZSl9KSksaX0sZGlqa3N0cmE6T010LGRpamtzdHJhQWxsOmZ1bmN0aW9uICRNdCh0LGUsbil7cmV0dXJuIF9NdC50cmFuc2Zvcm0odC5ub2RlcygpLChmdW5jdGlvbihpLHIpe2lbcl09T010KHQscixlLG4pfSkse30pfSxmaW5kQ3ljbGVzOmZ1bmN0aW9uIEtNdCh0KXtyZXR1cm4gX010LmZpbHRlcihETXQodCksKGZ1bmN0aW9uKGUpe3JldHVybiBlLmxlbmd0aD4xfHwxPT09ZS5sZW5ndGgmJnQuaGFzRWRnZShlWzBdLGVbMF0pfSkpfSxmbG95ZFdhcnNoYWxsOmZ1bmN0aW9uIFpNdCh0LGUsbil7cmV0dXJuKGZ1bmN0aW9uIGkodCxlLG4pe3ZhciBpPXt9LHI9dC5ub2RlcygpO3JldHVybiByLmZvckVhY2goKGZ1bmN0aW9uKHQpe2lbdF09e30saVt0XVt0XT17ZGlzdGFuY2U6MH0sci5mb3JFYWNoKChmdW5jdGlvbihlKXt0IT09ZSYmKGlbdF1bZV09e2Rpc3RhbmNlOk51bWJlci5QT1NJVElWRV9JTkZJTklUWX0pfSkpLG4odCkuZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIHI9bi52PT09dD9uLnc6bi52LG89ZShuKTtpW3RdW3JdPXtkaXN0YW5jZTpvLHByZWRlY2Vzc29yOnR9fSkpfSkpLHIuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9aVt0XTtyLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciBvPWlbbl07ci5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgaT1lW25dLHI9b1tuXSxhPW9bdF0uZGlzdGFuY2UraS5kaXN0YW5jZTthPHIuZGlzdGFuY2UmJihyLmRpc3RhbmNlPWEsci5wcmVkZWNlc3Nvcj1pLnByZWRlY2Vzc29yKX0pKX0pKX0pKSxpfSkodCxlfHxITXQsbnx8ZnVuY3Rpb24oZSl7cmV0dXJuIHQub3V0RWRnZXMoZSl9KX0saXNBY3ljbGljOmZ1bmN0aW9uIEpNdCh0KXt0cnl7Rk10KHQpfWNhdGNoKHQpe2lmKHQgaW5zdGFuY2VvZiBGTXQuQ3ljbGVFeGNlcHRpb24pcmV0dXJuITE7dGhyb3cgdH1yZXR1cm4hMH0scG9zdG9yZGVyOmZ1bmN0aW9uIFFNdCh0LGUpe3JldHVybiBqTXQodCxlLCJwb3N0Iil9LHByZW9yZGVyOmZ1bmN0aW9uIHRFdCh0LGUpe3JldHVybiBqTXQodCxlLCJwcmUiKX0scHJpbTpmdW5jdGlvbiBlRXQodCxlKXt2YXIgbixpPW5ldyB5TXQscj17fSxvPW5ldyBOTXQ7ZnVuY3Rpb24gYSh0KXt2YXIgaT10LnY9PT1uP3Qudzp0LnYsYT1vLnByaW9yaXR5KGkpO2lmKHZvaWQgMCE9PWEpe3ZhciBzPWUodCk7czxhJiYocltpXT1uLG8uZGVjcmVhc2UoaSxzKSl9fWlmKDA9PT10Lm5vZGVDb3VudCgpKXJldHVybiBpO19NdC5lYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24odCl7by5hZGQodCxOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpLGkuc2V0Tm9kZSh0KX0pKSxvLmRlY3JlYXNlKHQubm9kZXMoKVswXSwwKTtmb3IodmFyIHM9ITE7by5zaXplKCk+MDspe2lmKG49by5yZW1vdmVNaW4oKSxfTXQuaGFzKHIsbikpaS5zZXRFZGdlKG4scltuXSk7ZWxzZXtpZihzKXRocm93IG5ldyBFcnJvcigiSW5wdXQgZ3JhcGggaXMgbm90IGNvbm5lY3RlZDogIit0KTtzPSEwfXQubm9kZUVkZ2VzKG4pLmZvckVhY2goYSl9cmV0dXJuIGl9LHRhcmphbjpETXQsdG9wc29ydDpGTXR9LHZlcnNpb246VE10LnZlcnNpb259O3RyeXtxTXQ9WU10fWNhdGNoKHQpe31xTXR8fChxTXQ9d2luZG93LmdyYXBobGliKTt2YXIgbkV0LGlFdD1xTXQsckV0PWZ1bmN0aW9uIG9FdCh0LGUsbil7aWYoIUd5dChuKSlyZXR1cm4hMTt2YXIgaT10eXBlb2YgZTtyZXR1cm4hISgibnVtYmVyIj09aT93YnQobikmJlF2dChlLG4ubGVuZ3RoKToic3RyaW5nIj09aSYmZSBpbiBuKSYmdnl0KG5bZV0sdCl9LGFFdD1PYmplY3QucHJvdG90eXBlLHNFdD1hRXQuaGFzT3duUHJvcGVydHksbEV0PUtTdCgoZnVuY3Rpb24odCxlKXt0PU9iamVjdCh0KTt2YXIgbj0tMSxpPWUubGVuZ3RoLHI9aT4yP2VbMl06dm9pZCAwO2ZvcihyJiZyRXQoZVswXSxlWzFdLHIpJiYoaT0xKTsrK248aTspZm9yKHZhciBvPWVbbl0sYT1DYnQobykscz0tMSxsPWEubGVuZ3RoOysrczxsOyl7dmFyIGM9YVtzXSx1PXRbY107KHZvaWQgMD09PXV8fHZ5dCh1LGFFdFtjXSkmJiFzRXQuY2FsbCh0LGMpKSYmKHRbY109b1tjXSl9cmV0dXJuIHR9KSksY0V0PS9ccy8sdUV0PS9eXHMrLyxoRXQ9L15bLStdMHhbMC05YS1mXSskL2ksZEV0PS9eMGJbMDFdKyQvaSxwRXQ9L14wb1swLTddKyQvaSxmRXQ9cGFyc2VJbnQsbUV0PWZ1bmN0aW9uIGdFdCh0KXtyZXR1cm4gdD8xLzA9PT0odD0oZnVuY3Rpb24gZSh0KXtpZigibnVtYmVyIj09dHlwZW9mIHQpcmV0dXJuIHQ7aWYoTXd0KHQpKXJldHVybiBOYU47aWYoR3l0KHQpKXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2YgdC52YWx1ZU9mP3QudmFsdWVPZigpOnQ7dD1HeXQoZSk/ZSsiIjplfWlmKCJzdHJpbmciIT10eXBlb2YgdClyZXR1cm4gMD09PXQ/dDordDt0PShmdW5jdGlvbiBuKHQpe3JldHVybiB0P3Quc2xpY2UoMCwoZnVuY3Rpb24gZSh0KXtmb3IodmFyIGU9dC5sZW5ndGg7ZS0tJiZjRXQudGVzdCh0LmNoYXJBdChlKSk7KTtyZXR1cm4gZX0pKHQpKzEpLnJlcGxhY2UodUV0LCIiKTp0fSkodCk7dmFyIGk9ZEV0LnRlc3QodCk7cmV0dXJuIGl8fHBFdC50ZXN0KHQpP2ZFdCh0LnNsaWNlKDIpLGk/Mjo4KTpoRXQudGVzdCh0KT9OYU46K3R9KSh0KSl8fHQ9PT0tMS8wPzE3OTc2OTMxMzQ4NjIzMTU3ZTI5MioodDwwPy0xOjEpOnQ9PXQ/dDowOjA9PT10P3Q6MH0sX0V0PU1hdGgubWF4LHlFdD0oZnVuY3Rpb24gYkV0KHQpe3JldHVybiBmdW5jdGlvbihlLG4saSl7dmFyIHI9T2JqZWN0KGUpO2lmKCF3YnQoZSkpe3ZhciBvPXJTdChuKTtlPU1idChlKSxuPWZ1bmN0aW9uKHQpe3JldHVybiBvKHJbdF0sdCxyKX19dmFyIGE9dChlLG4saSk7cmV0dXJuIGE+LTE/cltvP2VbYV06YV06dm9pZCAwfX0pKChmdW5jdGlvbiB2RXQodCxlLG4pe3ZhciBpPW51bGw9PXQ/MDp0Lmxlbmd0aDtpZighaSlyZXR1cm4tMTt2YXIgcj1udWxsPT1uPzA6KGZ1bmN0aW9uIG8odCl7dmFyIGU9bUV0KHQpLG49ZSUxO3JldHVybiBlPT1lP24/ZS1uOmU6MH0pKG4pO3JldHVybiByPDAmJihyPV9FdChpK3IsMCkpLEpTdCh0LHJTdChlKSxyKX0pKSx4RXQ9ZnVuY3Rpb24gd0V0KHQpe3JldHVybiBudWxsIT10JiZ0Lmxlbmd0aD9WU3QodCwxKTpbXX0sU0V0PWZ1bmN0aW9uIE1FdCh0LGUsbil7Zm9yKHZhciBpPS0xLHI9dC5sZW5ndGg7KytpPHI7KXt2YXIgbz10W2ldLGE9ZShvKTtpZihudWxsIT1hJiYodm9pZCAwPT09cz9hPT1hJiYhTXd0KGEpOm4oYSxzKSkpdmFyIHM9YSxsPW99cmV0dXJuIGx9LEVFdD1mdW5jdGlvbiBURXQodCxlKXtyZXR1cm4gdD5lfSxDRXQ9ZnVuY3Rpb24gQUV0KHQsZSxuKXsodm9pZCAwIT09biYmIXZ5dCh0W2VdLG4pfHx2b2lkIDA9PT1uJiYhKGUgaW4gdCkpJiZJdnQodCxlLG4pfSxrRXQ9RnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nLExFdD1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LFBFdD1rRXQuY2FsbChPYmplY3QpLE5FdD1mdW5jdGlvbiBJRXQodCxlKXtpZigoImNvbnN0cnVjdG9yIiE9PWV8fCJmdW5jdGlvbiIhPXR5cGVvZiB0W2VdKSYmIl9fcHJvdG9fXyIhPWUpcmV0dXJuIHRbZV19LE9FdD1mdW5jdGlvbiB0KGUsbixpLHIsbyl7ZSE9PW4mJkR4dChuLChmdW5jdGlvbihhLHMpe2lmKG98fChvPW5ldyBrdnQpLEd5dChhKSkhKGZ1bmN0aW9uIGwodCxlLG4saSxyLG8sYSl7dmFyIHM9TkV0KHQsbiksbD1ORXQoZSxuKSxjPWEuZ2V0KGwpO2lmKGMpQ0V0KHQsbixjKTtlbHNle3ZhciB1PW8/byhzLGwsbisiIix0LGUsYSk6dm9pZCAwLGg9dm9pZCAwPT09dTtpZihoKXt2YXIgZD1YdnQobCkscD0hZCYmWnZ0KGwpLGY9IWQmJiFwJiZsYnQobCk7dT1sLGR8fHB8fGY/WHZ0KHMpP3U9czpsTXQocyk/dT1MYnQocyk6cD8oaD0hMSx1PWtidChsLCEwKSk6Zj8oaD0hMSx1PXl4dChsLCEwKSk6dT1bXTooZnVuY3Rpb24gbSh0KXtpZighRnZ0KHQpfHwiW29iamVjdCBPYmplY3RdIiE9VXl0KHQpKXJldHVybiExO3ZhciBlPVZidCh0KTtpZihudWxsPT09ZSlyZXR1cm4hMDt2YXIgbj1MRXQuY2FsbChlLCJjb25zdHJ1Y3RvciIpJiZlLmNvbnN0cnVjdG9yO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBuJiZuIGluc3RhbmNlb2YgbiYma0V0LmNhbGwobik9PVBFdH0pKGwpfHxZdnQobCk/KHU9cyxZdnQocyk/dT0oZnVuY3Rpb24gZyh0KXtyZXR1cm4gQnZ0KHQsQ2J0KHQpKX0pKHMpOkd5dChzKSYmIXF5dChzKXx8KHU9d3h0KGwpKSk6aD0hMX1oJiYoYS5zZXQobCx1KSxyKHUsbCxpLG8sYSksYS5kZWxldGUobCkpLENFdCh0LG4sdSl9fSkoZSxuLHMsaSx0LHIsbyk7ZWxzZXt2YXIgYz1yP3IoTkV0KGUscyksYSxzKyIiLGUsbixvKTp2b2lkIDA7dm9pZCAwPT09YyYmKGM9YSksQ0V0KGUscyxjKX19KSxDYnQpfSxSRXQ9KGZ1bmN0aW9uIHpFdCh0KXtyZXR1cm4gS1N0KChmdW5jdGlvbihlLG4pe3ZhciBpPS0xLHI9bi5sZW5ndGgsbz1yPjE/bltyLTFdOnZvaWQgMCxhPXI+Mj9uWzJdOnZvaWQgMDtmb3Iobz10Lmxlbmd0aD4zJiYiZnVuY3Rpb24iPT10eXBlb2Ygbz8oci0tLG8pOnZvaWQgMCxhJiZyRXQoblswXSxuWzFdLGEpJiYobz1yPDM/dm9pZCAwOm8scj0xKSxlPU9iamVjdChlKTsrK2k8cjspe3ZhciBzPW5baV07cyYmdChlLHMsaSxvKX1yZXR1cm4gZX0pKX0pKChmdW5jdGlvbih0LGUsbil7T0V0KHQsZSxuKX0pKSxERXQ9ZnVuY3Rpb24gQkV0KHQsZSl7cmV0dXJuIHQ8ZX0sSEV0PWZ1bmN0aW9uIEZFdCh0LGUsbixpKXtpZighR3l0KHQpKXJldHVybiB0O2Zvcih2YXIgcj0tMSxvPShlPUd3dChlLHQpKS5sZW5ndGgsYT1vLTEscz10O251bGwhPXMmJisrcjxvOyl7dmFyIGw9cXd0KGVbcl0pLGM9bjtpZigiX19wcm90b19fIj09PWx8fCJjb25zdHJ1Y3RvciI9PT1sfHwicHJvdG90eXBlIj09PWwpcmV0dXJuIHQ7aWYociE9YSl7dmFyIHU9c1tsXTt2b2lkIDA9PT0oYz1pP2kodSxsLHMpOnZvaWQgMCkmJihjPUd5dCh1KT91OlF2dChlW3IrMV0pP1tdOnt9KX16dnQocyxsLGMpLHM9c1tsXX1yZXR1cm4gdH0sVkV0PShmdW5jdGlvbiBVRXQodCl7cmV0dXJuIFhTdChXU3QodCx2b2lkIDAseEV0KSx0KyIiKX0pKChmdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT10P3t9OihmdW5jdGlvbiBuKHQsZSl7cmV0dXJuKGZ1bmN0aW9uIG4odCxlLGkpe2Zvcih2YXIgcj0tMSxvPWUubGVuZ3RoLGE9e307KytyPG87KXt2YXIgcz1lW3JdLGw9WHd0KHQscyk7aShsLHMpJiZIRXQoYSxHd3Qocyx0KSxsKX1yZXR1cm4gYX0pKHQsZSwoZnVuY3Rpb24oZSxuKXtyZXR1cm4gdFN0KHQsbil9KSl9KSh0LGUpfSkpLGpFdD1NYXRoLmNlaWwsR0V0PU1hdGgubWF4LFdFdD0oZnVuY3Rpb24gcUV0KHQpe3JldHVybiBmdW5jdGlvbihlLG4saSl7cmV0dXJuIGkmJiJudW1iZXIiIT10eXBlb2YgaSYmckV0KGUsbixpKSYmKG49aT12b2lkIDApLGU9bUV0KGUpLHZvaWQgMD09PW4/KG49ZSxlPTApOm49bUV0KG4pLChmdW5jdGlvbiByKHQsZSxuLGkpe2Zvcih2YXIgcj0tMSxvPUdFdChqRXQoKGUtdCkvKG58fDEpKSwwKSxhPUFycmF5KG8pO28tLTspYVtpP286KytyXT10LHQrPW47cmV0dXJuIGF9KShlLG4saT12b2lkIDA9PT1pP2U8bj8xOi0xOm1FdChpKSx0KX19KSgpLFlFdD1mdW5jdGlvbiBYRXQodCxlKXtpZih0IT09ZSl7dmFyIG49dm9pZCAwIT09dCxpPW51bGw9PT10LHI9dD09dCxvPU13dCh0KSxhPXZvaWQgMCE9PWUscz1udWxsPT09ZSxsPWU9PWUsYz1Nd3QoZSk7aWYoIXMmJiFjJiYhbyYmdD5lfHxvJiZhJiZsJiYhcyYmIWN8fGkmJmEmJmx8fCFuJiZsfHwhcilyZXR1cm4gMTtpZighaSYmIW8mJiFjJiZ0PGV8fGMmJm4mJnImJiFpJiYhb3x8cyYmbiYmcnx8IWEmJnJ8fCFsKXJldHVybi0xfXJldHVybiAwfSwkRXQ9S1N0KChmdW5jdGlvbih0LGUpe2lmKG51bGw9PXQpcmV0dXJuW107dmFyIG49ZS5sZW5ndGg7cmV0dXJuIG4+MSYmckV0KHQsZVswXSxlWzFdKT9lPVtdOm4+MiYmckV0KGVbMF0sZVsxXSxlWzJdKSYmKGU9W2VbMF1dKSwoZnVuY3Rpb24gaSh0LGUsbil7ZT1lLmxlbmd0aD9Ed3QoZSwoZnVuY3Rpb24odCl7cmV0dXJuIFh2dCh0KT9mdW5jdGlvbihlKXtyZXR1cm4gWHd0KGUsMT09PXQubGVuZ3RoP3RbMF06dCl9OnR9KSk6W2p4dF07dmFyIGk9LTE7cmV0dXJuIGU9RHd0KGUscmJ0KHJTdCkpLChmdW5jdGlvbiByKHQsZSl7dmFyIG49dC5sZW5ndGg7Zm9yKHQuc29ydChlKTtuLS07KXRbbl09dFtuXS52YWx1ZTtyZXR1cm4gdH0pKGdTdCh0LChmdW5jdGlvbih0LG4scil7cmV0dXJue2NyaXRlcmlhOkR3dChlLChmdW5jdGlvbihlKXtyZXR1cm4gZSh0KX0pKSxpbmRleDorK2ksdmFsdWU6dH19KSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGZ1bmN0aW9uIGkodCxlLG4pe2Zvcih2YXIgaT0tMSxyPXQuY3JpdGVyaWEsbz1lLmNyaXRlcmlhLGE9ci5sZW5ndGgscz1uLmxlbmd0aDsrK2k8YTspe3ZhciBsPVlFdChyW2ldLG9baV0pO2lmKGwpcmV0dXJuIGk+PXM/bDpsKigiZGVzYyI9PW5baV0/LTE6MSl9cmV0dXJuIHQuaW5kZXgtZS5pbmRleH0pKHQsZSxuKX0pKX0pKHQsVlN0KGUsMSksW10pfSkpLEtFdD0wO3RyeXtuRXQ9e2Nsb25lRGVlcDpmdW5jdGlvbiBaRXQodCl7cmV0dXJuIE94dCh0LDUpfSxjb25zdGFudDpSeHQsZGVmYXVsdHM6bEV0LGVhY2g6JHh0LGZpbHRlcjphU3QsZmluZDp5RXQsZmxhdHRlbjp4RXQsZm9yRWFjaDpZeHQsZm9ySW46ZnVuY3Rpb24gSkV0KHQsZSl7cmV0dXJuIG51bGw9PXQ/dDpEeHQodCxXeHQoZSksQ2J0KX0saGFzOmhTdCxpc1VuZGVmaW5lZDpmU3QsbGFzdDpmdW5jdGlvbiBRRXQodCl7dmFyIGU9bnVsbD09dD8wOnQubGVuZ3RoO3JldHVybiBlP3RbZS0xXTp2b2lkIDB9LG1hcDp5U3QsbWFwVmFsdWVzOmZ1bmN0aW9uIHRUdCh0LGUpe3ZhciBuPXt9O3JldHVybiBlPXJTdChlKSxIeHQodCwoZnVuY3Rpb24odCxpLHIpe0l2dChuLGksZSh0LGkscikpfSkpLG59LG1heDpmdW5jdGlvbiBlVHQodCl7cmV0dXJuIHQmJnQubGVuZ3RoP1NFdCh0LGp4dCxFRXQpOnZvaWQgMH0sbWVyZ2U6UkV0LG1pbjpmdW5jdGlvbiBuVHQodCl7cmV0dXJuIHQmJnQubGVuZ3RoP1NFdCh0LGp4dCxERXQpOnZvaWQgMH0sbWluQnk6ZnVuY3Rpb24gaVR0KHQsZSl7cmV0dXJuIHQmJnQubGVuZ3RoP1NFdCh0LHJTdChlKSxERXQpOnZvaWQgMH0sbm93OmZ1bmN0aW9uKCl7cmV0dXJuIE95dC5EYXRlLm5vdygpfSxwaWNrOlZFdCxyYW5nZTpXRXQscmVkdWNlOk1TdCxzb3J0Qnk6JEV0LHVuaXF1ZUlkOmZ1bmN0aW9uIHJUdCh0KXt2YXIgZT0rK0tFdDtyZXR1cm4gVXd0KHQpK2V9LHZhbHVlczpoTXQsemlwT2JqZWN0OmZ1bmN0aW9uIG9UdCh0LGUpe3JldHVybihmdW5jdGlvbiBuKHQsZSxpKXtmb3IodmFyIHI9LTEsbz10Lmxlbmd0aCxhPWUubGVuZ3RoLHM9e307KytyPG87KWkocyx0W3JdLHI8YT9lW3JdOnZvaWQgMCk7cmV0dXJuIHN9KSh0fHxbXSxlfHxbXSx6dnQpfX19Y2F0Y2godCl7fW5FdHx8KG5FdD13aW5kb3cuXyk7dmFyIGFUdD1uRXQsc1R0PWxUdDtmdW5jdGlvbiBsVHQoKXt2YXIgdD17fTt0Ll9uZXh0PXQuX3ByZXY9dCx0aGlzLl9zZW50aW5lbD10fWZ1bmN0aW9uIGNUdCh0KXt0Ll9wcmV2Ll9uZXh0PXQuX25leHQsdC5fbmV4dC5fcHJldj10Ll9wcmV2LGRlbGV0ZSB0Ll9uZXh0LGRlbGV0ZSB0Ll9wcmV2fWZ1bmN0aW9uIHVUdCh0LGUpe2lmKCJfbmV4dCIhPT10JiYiX3ByZXYiIT09dClyZXR1cm4gZX1sVHQucHJvdG90eXBlLmRlcXVldWU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9zZW50aW5lbCxlPXQuX3ByZXY7aWYoZSE9PXQpcmV0dXJuIGNUdChlKSxlfSxsVHQucHJvdG90eXBlLmVucXVldWU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fc2VudGluZWw7dC5fcHJldiYmdC5fbmV4dCYmY1R0KHQpLHQuX25leHQ9ZS5fbmV4dCxlLl9uZXh0Ll9wcmV2PXQsZS5fbmV4dD10LHQuX3ByZXY9ZX0sbFR0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPXRoaXMuX3NlbnRpbmVsLG49ZS5fcHJldjtuIT09ZTspdC5wdXNoKEpTT04uc3RyaW5naWZ5KG4sdVR0KSksbj1uLl9wcmV2O3JldHVybiJbIit0LmpvaW4oIiwgIikrIl0ifTt2YXIgaFR0PWlFdC5HcmFwaCxkVHQ9YVR0LmNvbnN0YW50KDEpO2Z1bmN0aW9uIHBUdCh0LGUsbixpLHIpe3ZhciBvPXI/W106dm9pZCAwO3JldHVybiBhVHQuZm9yRWFjaCh0LmluRWRnZXMoaS52KSwoZnVuY3Rpb24oaSl7dmFyIGE9dC5lZGdlKGkpLHM9dC5ub2RlKGkudik7ciYmby5wdXNoKHt2Omkudix3Omkud30pLHMub3V0LT1hLGZUdChlLG4scyl9KSksYVR0LmZvckVhY2godC5vdXRFZGdlcyhpLnYpLChmdW5jdGlvbihpKXt2YXIgcj10LmVkZ2UoaSksbz10Lm5vZGUoaS53KTtvLmluLT1yLGZUdChlLG4sbyl9KSksdC5yZW1vdmVOb2RlKGkudiksb31mdW5jdGlvbiBmVHQodCxlLG4pe24ub3V0P24uaW4/dFtuLm91dC1uLmluK2VdLmVucXVldWUobik6dFt0Lmxlbmd0aC0xXS5lbnF1ZXVlKG4pOnRbMF0uZW5xdWV1ZShuKX12YXIgbVR0PWlFdC5HcmFwaCxnVHQ9e2FkZER1bW15Tm9kZTprVHQsc2ltcGxpZnk6ZnVuY3Rpb24gX1R0KHQpe3ZhciBlPShuZXcgbVR0KS5zZXRHcmFwaCh0LmdyYXBoKCkpO3JldHVybiBhVHQuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKG4pe2Uuc2V0Tm9kZShuLHQubm9kZShuKSl9KSksYVR0LmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihuKXt2YXIgaT1lLmVkZ2Uobi52LG4udyl8fHt3ZWlnaHQ6MCxtaW5sZW46MX0scj10LmVkZ2Uobik7ZS5zZXRFZGdlKG4udixuLncse3dlaWdodDppLndlaWdodCtyLndlaWdodCxtaW5sZW46TWF0aC5tYXgoaS5taW5sZW4sci5taW5sZW4pfSl9KSksZX0sYXNOb25Db21wb3VuZEdyYXBoOmZ1bmN0aW9uIHlUdCh0KXt2YXIgZT1uZXcgbVR0KHttdWx0aWdyYXBoOnQuaXNNdWx0aWdyYXBoKCl9KS5zZXRHcmFwaCh0LmdyYXBoKCkpO3JldHVybiBhVHQuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKG4pe3QuY2hpbGRyZW4obikubGVuZ3RofHxlLnNldE5vZGUobix0Lm5vZGUobikpfSkpLGFUdC5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24obil7ZS5zZXRFZGdlKG4sdC5lZGdlKG4pKX0pKSxlfSxzdWNjZXNzb3JXZWlnaHRzOmZ1bmN0aW9uIHZUdCh0KXt2YXIgZT1hVHQubWFwKHQubm9kZXMoKSwoZnVuY3Rpb24oZSl7dmFyIG49e307cmV0dXJuIGFUdC5mb3JFYWNoKHQub3V0RWRnZXMoZSksKGZ1bmN0aW9uKGUpe25bZS53XT0obltlLnddfHwwKSt0LmVkZ2UoZSkud2VpZ2h0fSkpLG59KSk7cmV0dXJuIGFUdC56aXBPYmplY3QodC5ub2RlcygpLGUpfSxwcmVkZWNlc3NvcldlaWdodHM6ZnVuY3Rpb24gYlR0KHQpe3ZhciBlPWFUdC5tYXAodC5ub2RlcygpLChmdW5jdGlvbihlKXt2YXIgbj17fTtyZXR1cm4gYVR0LmZvckVhY2godC5pbkVkZ2VzKGUpLChmdW5jdGlvbihlKXtuW2Uudl09KG5bZS52XXx8MCkrdC5lZGdlKGUpLndlaWdodH0pKSxufSkpO3JldHVybiBhVHQuemlwT2JqZWN0KHQubm9kZXMoKSxlKX0saW50ZXJzZWN0UmVjdDpmdW5jdGlvbiB4VHQodCxlKXt2YXIgbixpLHI9dC54LG89dC55LGE9ZS54LXIscz1lLnktbyxsPXQud2lkdGgvMixjPXQuaGVpZ2h0LzI7aWYoIWEmJiFzKXRocm93IG5ldyBFcnJvcigiTm90IHBvc3NpYmxlIHRvIGZpbmQgaW50ZXJzZWN0aW9uIGluc2lkZSBvZiB0aGUgcmVjdGFuZ2xlIik7cmV0dXJuIE1hdGguYWJzKHMpKmw+TWF0aC5hYnMoYSkqYz8oczwwJiYoYz0tYyksbj1jKmEvcyxpPWMpOihhPDAmJihsPS1sKSxuPWwsaT1sKnMvYSkse3g6cituLHk6bytpfX0sYnVpbGRMYXllck1hdHJpeDpmdW5jdGlvbiB3VHQodCl7dmFyIGU9YVR0Lm1hcChhVHQucmFuZ2UoTFR0KHQpKzEpLChmdW5jdGlvbigpe3JldHVybltdfSkpO3JldHVybiBhVHQuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKG4pe3ZhciBpPXQubm9kZShuKSxyPWkucmFuazthVHQuaXNVbmRlZmluZWQocil8fChlW3JdW2kub3JkZXJdPW4pfSkpLGV9LG5vcm1hbGl6ZVJhbmtzOmZ1bmN0aW9uIFNUdCh0KXt2YXIgZT1hVHQubWluKGFUdC5tYXAodC5ub2RlcygpLChmdW5jdGlvbihlKXtyZXR1cm4gdC5ub2RlKGUpLnJhbmt9KSkpO2FUdC5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24obil7dmFyIGk9dC5ub2RlKG4pO2FUdC5oYXMoaSwicmFuayIpJiYoaS5yYW5rLT1lKX0pKX0scmVtb3ZlRW1wdHlSYW5rczpmdW5jdGlvbiBNVHQodCl7dmFyIGU9YVR0Lm1pbihhVHQubWFwKHQubm9kZXMoKSwoZnVuY3Rpb24oZSl7cmV0dXJuIHQubm9kZShlKS5yYW5rfSkpKSxuPVtdO2FUdC5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24oaSl7dmFyIHI9dC5ub2RlKGkpLnJhbmstZTtuW3JdfHwobltyXT1bXSksbltyXS5wdXNoKGkpfSkpO3ZhciBpPTAscj10LmdyYXBoKCkubm9kZVJhbmtGYWN0b3I7YVR0LmZvckVhY2gobiwoZnVuY3Rpb24oZSxuKXthVHQuaXNVbmRlZmluZWQoZSkmJm4lciE9MD8tLWk6aSYmYVR0LmZvckVhY2goZSwoZnVuY3Rpb24oZSl7dC5ub2RlKGUpLnJhbmsrPWl9KSl9KSl9LGFkZEJvcmRlck5vZGU6ZnVuY3Rpb24gRVR0KHQsZSxuLGkpe3ZhciByPXt3aWR0aDowLGhlaWdodDowfTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD49NCYmKHIucmFuaz1uLHIub3JkZXI9aSksa1R0KHQsImJvcmRlciIscixlKX0sbWF4UmFuazpMVHQscGFydGl0aW9uOmZ1bmN0aW9uIFRUdCh0LGUpe3ZhciBuPXtsaHM6W10scmhzOltdfTtyZXR1cm4gYVR0LmZvckVhY2godCwoZnVuY3Rpb24odCl7ZSh0KT9uLmxocy5wdXNoKHQpOm4ucmhzLnB1c2godCl9KSksbn0sdGltZTpmdW5jdGlvbiBDVHQodCxlKXt2YXIgbj1hVHQubm93KCk7dHJ5e3JldHVybiBlKCl9ZmluYWxseXtjb25zb2xlLmxvZyh0KyIgdGltZTogIisoYVR0Lm5vdygpLW4pKyJtcyIpfX0sbm90aW1lOmZ1bmN0aW9uIEFUdCh0LGUpe3JldHVybiBlKCl9fTtmdW5jdGlvbiBrVHQodCxlLG4saSl7dmFyIHI7ZG97cj1hVHQudW5pcXVlSWQoaSl9d2hpbGUodC5oYXNOb2RlKHIpKTtyZXR1cm4gbi5kdW1teT1lLHQuc2V0Tm9kZShyLG4pLHJ9ZnVuY3Rpb24gTFR0KHQpe3JldHVybiBhVHQubWF4KGFUdC5tYXAodC5ub2RlcygpLChmdW5jdGlvbihlKXt2YXIgbj10Lm5vZGUoZSkucmFuaztpZighYVR0LmlzVW5kZWZpbmVkKG4pKXJldHVybiBufSkpKX12YXIgUFR0PWZ1bmN0aW9uIE5UdCh0KXt2YXIgZT17fTthVHQuZm9yRWFjaCh0LnNvdXJjZXMoKSwoZnVuY3Rpb24gbihpKXt2YXIgcj10Lm5vZGUoaSk7aWYoYVR0LmhhcyhlLGkpKXJldHVybiByLnJhbms7ZVtpXT0hMDt2YXIgbz1hVHQubWluKGFUdC5tYXAodC5vdXRFZGdlcyhpKSwoZnVuY3Rpb24oZSl7cmV0dXJuIG4oZS53KS10LmVkZ2UoZSkubWlubGVufSkpKTtyZXR1cm4gbyE9PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSYmbnVsbCE9b3x8KG89MCksci5yYW5rPW99KSl9LElUdD1mdW5jdGlvbiBPVHQodCxlKXtyZXR1cm4gdC5ub2RlKGUudykucmFuay10Lm5vZGUoZS52KS5yYW5rLXQuZWRnZShlKS5taW5sZW59LFJUdD1pRXQuR3JhcGgselR0PUlUdCxEVHQ9ZnVuY3Rpb24gQlR0KHQpe3ZhciBlLG4saT1uZXcgUlR0KHtkaXJlY3RlZDohMX0pLHI9dC5ub2RlcygpWzBdLG89dC5ub2RlQ291bnQoKTtmb3IoaS5zZXROb2RlKHIse30pO0hUdChpLHQpPG87KWU9RlR0KGksdCksbj1pLmhhc05vZGUoZS52KT96VHQodCxlKTotelR0KHQsZSksVlR0KGksdCxuKTtyZXR1cm4gaX07ZnVuY3Rpb24gSFR0KHQsZSl7cmV0dXJuIGFUdC5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24gbihpKXthVHQuZm9yRWFjaChlLm5vZGVFZGdlcyhpKSwoZnVuY3Rpb24ocil7dmFyIG89ci52LGE9aT09PW8/ci53Om87dC5oYXNOb2RlKGEpfHx6VHQoZSxyKXx8KHQuc2V0Tm9kZShhLHt9KSx0LnNldEVkZ2UoaSxhLHt9KSxuKGEpKX0pKX0pKSx0Lm5vZGVDb3VudCgpfWZ1bmN0aW9uIEZUdCh0LGUpe3JldHVybiBhVHQubWluQnkoZS5lZGdlcygpLChmdW5jdGlvbihuKXtpZih0Lmhhc05vZGUobi52KSE9PXQuaGFzTm9kZShuLncpKXJldHVybiB6VHQoZSxuKX0pKX1mdW5jdGlvbiBWVHQodCxlLG4pe2FUdC5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24odCl7ZS5ub2RlKHQpLnJhbmsrPW59KSl9dmFyIFVUdD1JVHQsalR0PVBUdCxHVHQ9aUV0LmFsZy5wcmVvcmRlcixXVHQ9aUV0LmFsZy5wb3N0b3JkZXIscVR0PWdUdC5zaW1wbGlmeSxZVHQ9WFR0O2Z1bmN0aW9uIFhUdCh0KXt0PXFUdCh0KSxqVHQodCk7dmFyIGUsbj1EVHQodCk7Zm9yKFpUdChuKSwkVHQobix0KTtlPVFUdChuKTspZUN0KG4sdCxlLHRDdChuLHQsZSkpfWZ1bmN0aW9uICRUdCh0LGUpe3ZhciBuPVdUdCh0LHQubm9kZXMoKSk7bj1uLnNsaWNlKDAsbi5sZW5ndGgtMSksYVR0LmZvckVhY2gobiwoZnVuY3Rpb24obil7IShmdW5jdGlvbiBpKHQsZSxuKXt2YXIgaT10Lm5vZGUobik7dC5lZGdlKG4saS5wYXJlbnQpLmN1dHZhbHVlPUtUdCh0LGUsbil9KSh0LGUsbil9KSl9ZnVuY3Rpb24gS1R0KHQsZSxuKXt2YXIgaT10Lm5vZGUobikucGFyZW50LHI9ITAsbz1lLmVkZ2UobixpKSxhPTA7cmV0dXJuIG98fChyPSExLG89ZS5lZGdlKGksbikpLGE9by53ZWlnaHQsYVR0LmZvckVhY2goZS5ub2RlRWRnZXMobiksKGZ1bmN0aW9uKG8pe3ZhciBzPW8udj09PW4sbD1zP28udzpvLnY7aWYobCE9PWkpe3ZhciBjPXM9PT1yLHU9ZS5lZGdlKG8pLndlaWdodDtpZihhKz1jP3U6LXUsKGZ1bmN0aW9uIGgodCxlLG4pe3JldHVybiB0Lmhhc0VkZ2UoZSxuKX0pKHQsbixsKSl7dmFyIGQ9dC5lZGdlKG4sbCkuY3V0dmFsdWU7YSs9Yz8tZDpkfX19KSksYX1mdW5jdGlvbiBaVHQodCxlKXthcmd1bWVudHMubGVuZ3RoPDImJihlPXQubm9kZXMoKVswXSksSlR0KHQse30sMSxlKX1mdW5jdGlvbiBKVHQodCxlLG4saSxyKXt2YXIgbz1uLGE9dC5ub2RlKGkpO3JldHVybiBlW2ldPSEwLGFUdC5mb3JFYWNoKHQubmVpZ2hib3JzKGkpLChmdW5jdGlvbihyKXthVHQuaGFzKGUscil8fChuPUpUdCh0LGUsbixyLGkpKX0pKSxhLmxvdz1vLGEubGltPW4rKyxyP2EucGFyZW50PXI6ZGVsZXRlIGEucGFyZW50LG59ZnVuY3Rpb24gUVR0KHQpe3JldHVybiBhVHQuZmluZCh0LmVkZ2VzKCksKGZ1bmN0aW9uKGUpe3JldHVybiB0LmVkZ2UoZSkuY3V0dmFsdWU8MH0pKX1mdW5jdGlvbiB0Q3QodCxlLG4pe3ZhciBpPW4udixyPW4udztlLmhhc0VkZ2UoaSxyKXx8KGk9bi53LHI9bi52KTt2YXIgbz10Lm5vZGUoaSksYT10Lm5vZGUocikscz1vLGw9ITE7by5saW0+YS5saW0mJihzPWEsbD0hMCk7dmFyIGM9YVR0LmZpbHRlcihlLmVkZ2VzKCksKGZ1bmN0aW9uKGUpe3JldHVybiBsPT09bkN0KDAsdC5ub2RlKGUudikscykmJmwhPT1uQ3QoMCx0Lm5vZGUoZS53KSxzKX0pKTtyZXR1cm4gYVR0Lm1pbkJ5KGMsKGZ1bmN0aW9uKHQpe3JldHVybiBVVHQoZSx0KX0pKX1mdW5jdGlvbiBlQ3QodCxlLG4saSl7dC5yZW1vdmVFZGdlKG4udixuLncpLHQuc2V0RWRnZShpLnYsaS53LHt9KSxaVHQodCksJFR0KHQsZSksKGZ1bmN0aW9uIHIodCxlKXt2YXIgbj1hVHQuZmluZCh0Lm5vZGVzKCksKGZ1bmN0aW9uKHQpe3JldHVybiFlLm5vZGUodCkucGFyZW50fSkpLGk9R1R0KHQsbik7aT1pLnNsaWNlKDEpLGFUdC5mb3JFYWNoKGksKGZ1bmN0aW9uKG4pe3ZhciBpPXQubm9kZShuKS5wYXJlbnQscj1lLmVkZ2UobixpKSxvPSExO3J8fChyPWUuZWRnZShpLG4pLG89ITApLGUubm9kZShuKS5yYW5rPWUubm9kZShpKS5yYW5rKyhvP3IubWlubGVuOi1yLm1pbmxlbil9KSl9KSh0LGUpfWZ1bmN0aW9uIG5DdCh0LGUsbil7cmV0dXJuIG4ubG93PD1lLmxpbSYmZS5saW08PW4ubGltfVhUdC5pbml0TG93TGltVmFsdWVzPVpUdCxYVHQuaW5pdEN1dFZhbHVlcz0kVHQsWFR0LmNhbGNDdXRWYWx1ZT1LVHQsWFR0LmxlYXZlRWRnZT1RVHQsWFR0LmVudGVyRWRnZT10Q3QsWFR0LmV4Y2hhbmdlRWRnZXM9ZUN0O3ZhciBpQ3Q9UFR0LHJDdD1pQ3Q7ZnVuY3Rpb24gb0N0KHQpe1lUdCh0KX12YXIgYUN0PWZ1bmN0aW9uIHNDdCh0KXt2YXIgZT1nVHQuYWRkRHVtbXlOb2RlKHQsInJvb3QiLHt9LCJfcm9vdCIpLG49KGZ1bmN0aW9uIGkodCl7dmFyIGU9e307ZnVuY3Rpb24gbihpLHIpe3ZhciBvPXQuY2hpbGRyZW4oaSk7byYmby5sZW5ndGgmJmFUdC5mb3JFYWNoKG8sKGZ1bmN0aW9uKHQpe24odCxyKzEpfSkpLGVbaV09cn1yZXR1cm4gYVR0LmZvckVhY2godC5jaGlsZHJlbigpLChmdW5jdGlvbih0KXtuKHQsMSl9KSksZX0pKHQpLHI9YVR0Lm1heChhVHQudmFsdWVzKG4pKS0xLG89MipyKzE7dC5ncmFwaCgpLm5lc3RpbmdSb290PWUsYVR0LmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihlKXt0LmVkZ2UoZSkubWlubGVuKj1vfSkpO3ZhciBhPShmdW5jdGlvbiBzKHQpe3JldHVybiBhVHQucmVkdWNlKHQuZWRnZXMoKSwoZnVuY3Rpb24oZSxuKXtyZXR1cm4gZSt0LmVkZ2Uobikud2VpZ2h0fSksMCl9KSh0KSsxO2FUdC5mb3JFYWNoKHQuY2hpbGRyZW4oKSwoZnVuY3Rpb24oaSl7bEN0KHQsZSxvLGEscixuLGkpfSkpLHQuZ3JhcGgoKS5ub2RlUmFua0ZhY3Rvcj1vfTtmdW5jdGlvbiBsQ3QodCxlLG4saSxyLG8sYSl7dmFyIHM9dC5jaGlsZHJlbihhKTtpZihzLmxlbmd0aCl7dmFyIGw9Z1R0LmFkZEJvcmRlck5vZGUodCwiX2J0IiksYz1nVHQuYWRkQm9yZGVyTm9kZSh0LCJfYmIiKSx1PXQubm9kZShhKTt0LnNldFBhcmVudChsLGEpLHUuYm9yZGVyVG9wPWwsdC5zZXRQYXJlbnQoYyxhKSx1LmJvcmRlckJvdHRvbT1jLGFUdC5mb3JFYWNoKHMsKGZ1bmN0aW9uKHMpe2xDdCh0LGUsbixpLHIsbyxzKTt2YXIgdT10Lm5vZGUocyksaD11LmJvcmRlclRvcD91LmJvcmRlclRvcDpzLGQ9dS5ib3JkZXJCb3R0b20/dS5ib3JkZXJCb3R0b206cyxwPXUuYm9yZGVyVG9wP2k6MippLGY9aCE9PWQ/MTpyLW9bYV0rMTt0LnNldEVkZ2UobCxoLHt3ZWlnaHQ6cCxtaW5sZW46ZixuZXN0aW5nRWRnZTohMH0pLHQuc2V0RWRnZShkLGMse3dlaWdodDpwLG1pbmxlbjpmLG5lc3RpbmdFZGdlOiEwfSl9KSksdC5wYXJlbnQoYSl8fHQuc2V0RWRnZShlLGwse3dlaWdodDowLG1pbmxlbjpyK29bYV19KX1lbHNlIGEhPT1lJiZ0LnNldEVkZ2UoZSxhLHt3ZWlnaHQ6MCxtaW5sZW46bn0pfWZ1bmN0aW9uIGNDdCh0LGUsbixpLHIsbyl7dmFyIGE9cltlXVtvLTFdLHM9Z1R0LmFkZER1bW15Tm9kZSh0LCJib3JkZXIiLHt3aWR0aDowLGhlaWdodDowLHJhbms6byxib3JkZXJUeXBlOmV9LG4pO3JbZV1bb109cyx0LnNldFBhcmVudChzLGkpLGEmJnQuc2V0RWRnZShhLHMse3dlaWdodDoxfSl9ZnVuY3Rpb24gdUN0KHQpe2FUdC5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24oZSl7aEN0KHQubm9kZShlKSl9KSksYVR0LmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihlKXtoQ3QodC5lZGdlKGUpKX0pKX1mdW5jdGlvbiBoQ3QodCl7dmFyIGU9dC53aWR0aDt0LndpZHRoPXQuaGVpZ2h0LHQuaGVpZ2h0PWV9ZnVuY3Rpb24gZEN0KHQpe3QueT0tdC55fWZ1bmN0aW9uIHBDdCh0KXt2YXIgZT10Lng7dC54PXQueSx0Lnk9ZX12YXIgZkN0PWZ1bmN0aW9uIG1DdCh0LGUpe2Zvcih2YXIgbj0wLGk9MTtpPGUubGVuZ3RoOysraSluKz1nQ3QodCxlW2ktMV0sZVtpXSk7cmV0dXJuIG59O2Z1bmN0aW9uIGdDdCh0LGUsbil7Zm9yKHZhciBpPWFUdC56aXBPYmplY3QobixhVHQubWFwKG4sKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV9KSkpLHI9YVR0LmZsYXR0ZW4oYVR0Lm1hcChlLChmdW5jdGlvbihlKXtyZXR1cm4gYVR0LnNvcnRCeShhVHQubWFwKHQub3V0RWRnZXMoZSksKGZ1bmN0aW9uKGUpe3JldHVybntwb3M6aVtlLnddLHdlaWdodDp0LmVkZ2UoZSkud2VpZ2h0fX0pKSwicG9zIil9KSksITApLG89MTtvPG4ubGVuZ3RoOylvPDw9MTt2YXIgYT0yKm8tMTtvLT0xO3ZhciBzPWFUdC5tYXAobmV3IEFycmF5KGEpLChmdW5jdGlvbigpe3JldHVybiAwfSkpLGw9MDtyZXR1cm4gYVR0LmZvckVhY2goci5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT10LnBvcytvO3NbZV0rPXQud2VpZ2h0O2Zvcih2YXIgbj0wO2U+MDspZSUyJiYobis9c1tlKzFdKSxzW2U9ZS0xPj4xXSs9dC53ZWlnaHQ7bCs9dC53ZWlnaHQqbn0pKSksbH1mdW5jdGlvbiBfQ3QodCxlLG4pe2Zvcih2YXIgaTtlLmxlbmd0aCYmKGk9YVR0Lmxhc3QoZSkpLmk8PW47KWUucG9wKCksdC5wdXNoKGkudnMpLG4rKztyZXR1cm4gbn12YXIgeUN0PWZ1bmN0aW9uIHQoZSxuLGkscil7dmFyIG89ZS5jaGlsZHJlbihuKSxhPWUubm9kZShuKSxzPWE/YS5ib3JkZXJMZWZ0OnZvaWQgMCxsPWE/YS5ib3JkZXJSaWdodDp2b2lkIDAsYz17fTtzJiYobz1hVHQuZmlsdGVyKG8sKGZ1bmN0aW9uKHQpe3JldHVybiB0IT09cyYmdCE9PWx9KSkpO3ZhciB1PShmdW5jdGlvbiBoKHQsZSl7cmV0dXJuIGFUdC5tYXAoZSwoZnVuY3Rpb24oZSl7dmFyIG49dC5pbkVkZ2VzKGUpO2lmKG4ubGVuZ3RoKXt2YXIgaT1hVHQucmVkdWNlKG4sKGZ1bmN0aW9uKGUsbil7dmFyIGk9dC5lZGdlKG4pLHI9dC5ub2RlKG4udik7cmV0dXJue3N1bTplLnN1bStpLndlaWdodCpyLm9yZGVyLHdlaWdodDplLndlaWdodCtpLndlaWdodH19KSx7c3VtOjAsd2VpZ2h0OjB9KTtyZXR1cm57djplLGJhcnljZW50ZXI6aS5zdW0vaS53ZWlnaHQsd2VpZ2h0Omkud2VpZ2h0fX1yZXR1cm57djplfX0pKX0pKGUsbyk7YVR0LmZvckVhY2godSwoZnVuY3Rpb24obil7aWYoZS5jaGlsZHJlbihuLnYpLmxlbmd0aCl7dmFyIG89dChlLG4udixpLHIpO2Nbbi52XT1vLGFUdC5oYXMobywiYmFyeWNlbnRlciIpJiYoZnVuY3Rpb24gYSh0LGUpe2FUdC5pc1VuZGVmaW5lZCh0LmJhcnljZW50ZXIpPyh0LmJhcnljZW50ZXI9ZS5iYXJ5Y2VudGVyLHQud2VpZ2h0PWUud2VpZ2h0KToodC5iYXJ5Y2VudGVyPSh0LmJhcnljZW50ZXIqdC53ZWlnaHQrZS5iYXJ5Y2VudGVyKmUud2VpZ2h0KS8odC53ZWlnaHQrZS53ZWlnaHQpLHQud2VpZ2h0Kz1lLndlaWdodCl9KShuLG8pfX0pKTt2YXIgZD0oZnVuY3Rpb24gcCh0LGUpe3ZhciBuPXt9O3JldHVybiBhVHQuZm9yRWFjaCh0LChmdW5jdGlvbih0LGUpe3ZhciBpPW5bdC52XT17aW5kZWdyZWU6MCxpbjpbXSxvdXQ6W10sdnM6W3Qudl0saTplfTthVHQuaXNVbmRlZmluZWQodC5iYXJ5Y2VudGVyKXx8KGkuYmFyeWNlbnRlcj10LmJhcnljZW50ZXIsaS53ZWlnaHQ9dC53ZWlnaHQpfSkpLGFUdC5mb3JFYWNoKGUuZWRnZXMoKSwoZnVuY3Rpb24odCl7dmFyIGU9blt0LnZdLGk9blt0LnddO2FUdC5pc1VuZGVmaW5lZChlKXx8YVR0LmlzVW5kZWZpbmVkKGkpfHwoaS5pbmRlZ3JlZSsrLGUub3V0LnB1c2goblt0LnddKSl9KSksKGZ1bmN0aW9uIGkodCl7dmFyIGU9W107ZnVuY3Rpb24gbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7ZS5tZXJnZWR8fChhVHQuaXNVbmRlZmluZWQoZS5iYXJ5Y2VudGVyKXx8YVR0LmlzVW5kZWZpbmVkKHQuYmFyeWNlbnRlcil8fGUuYmFyeWNlbnRlcj49dC5iYXJ5Y2VudGVyKSYmKGZ1bmN0aW9uIG4odCxlKXt2YXIgbj0wLGk9MDt0LndlaWdodCYmKG4rPXQuYmFyeWNlbnRlcip0LndlaWdodCxpKz10LndlaWdodCksZS53ZWlnaHQmJihuKz1lLmJhcnljZW50ZXIqZS53ZWlnaHQsaSs9ZS53ZWlnaHQpLHQudnM9ZS52cy5jb25jYXQodC52cyksdC5iYXJ5Y2VudGVyPW4vaSx0LndlaWdodD1pLHQuaT1NYXRoLm1pbihlLmksdC5pKSxlLm1lcmdlZD0hMH0pKHQsZSl9fWZ1bmN0aW9uIGkoZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe24uaW4ucHVzaChlKSwwPT0tLW4uaW5kZWdyZWUmJnQucHVzaChuKX19Zm9yKDt0Lmxlbmd0aDspe3ZhciByPXQucG9wKCk7ZS5wdXNoKHIpLGFUdC5mb3JFYWNoKHIuaW4ucmV2ZXJzZSgpLG4ocikpLGFUdC5mb3JFYWNoKHIub3V0LGkocikpfXJldHVybiBhVHQubWFwKGFUdC5maWx0ZXIoZSwoZnVuY3Rpb24odCl7cmV0dXJuIXQubWVyZ2VkfSkpLChmdW5jdGlvbih0KXtyZXR1cm4gYVR0LnBpY2sodCxbInZzIiwiaSIsImJhcnljZW50ZXIiLCJ3ZWlnaHQiXSl9KSl9KShhVHQuZmlsdGVyKG4sKGZ1bmN0aW9uKHQpe3JldHVybiF0LmluZGVncmVlfSkpKX0pKHUsaSk7IShmdW5jdGlvbiBmKHQsZSl7YVR0LmZvckVhY2godCwoZnVuY3Rpb24odCl7dC52cz1hVHQuZmxhdHRlbih0LnZzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGVbdF0/ZVt0XS52czp0fSkpLCEwKX0pKX0pKGQsYyk7dmFyIG09KGZ1bmN0aW9uIGcodCxlKXt2YXIgbj1nVHQucGFydGl0aW9uKHQsKGZ1bmN0aW9uKHQpe3JldHVybiBhVHQuaGFzKHQsImJhcnljZW50ZXIiKX0pKSxpPW4ubGhzLHI9YVR0LnNvcnRCeShuLnJocywoZnVuY3Rpb24odCl7cmV0dXJuLXQuaX0pKSxvPVtdLGE9MCxzPTAsbD0wO2kuc29ydCgoZnVuY3Rpb24gYyh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXtyZXR1cm4gZS5iYXJ5Y2VudGVyPG4uYmFyeWNlbnRlcj8tMTplLmJhcnljZW50ZXI+bi5iYXJ5Y2VudGVyPzE6dD9uLmktZS5pOmUuaS1uLml9fSkoISFlKSksbD1fQ3QobyxyLGwpLGFUdC5mb3JFYWNoKGksKGZ1bmN0aW9uKHQpe2wrPXQudnMubGVuZ3RoLG8ucHVzaCh0LnZzKSxhKz10LmJhcnljZW50ZXIqdC53ZWlnaHQscys9dC53ZWlnaHQsbD1fQ3QobyxyLGwpfSkpO3ZhciB1PXt2czphVHQuZmxhdHRlbihvLCEwKX07cmV0dXJuIHMmJih1LmJhcnljZW50ZXI9YS9zLHUud2VpZ2h0PXMpLHV9KShkLHIpO2lmKHMmJihtLnZzPWFUdC5mbGF0dGVuKFtzLG0udnMsbF0sITApLGUucHJlZGVjZXNzb3JzKHMpLmxlbmd0aCkpe3ZhciBfPWUubm9kZShlLnByZWRlY2Vzc29ycyhzKVswXSkseT1lLm5vZGUoZS5wcmVkZWNlc3NvcnMobClbMF0pO2FUdC5oYXMobSwiYmFyeWNlbnRlciIpfHwobS5iYXJ5Y2VudGVyPTAsbS53ZWlnaHQ9MCksbS5iYXJ5Y2VudGVyPShtLmJhcnljZW50ZXIqbS53ZWlnaHQrXy5vcmRlcit5Lm9yZGVyKS8obS53ZWlnaHQrMiksbS53ZWlnaHQrPTJ9cmV0dXJuIG19LHZDdD1pRXQuR3JhcGgsYkN0PWlFdC5HcmFwaDtmdW5jdGlvbiB4Q3QodCxlLG4pe3JldHVybiBhVHQubWFwKGUsKGZ1bmN0aW9uKGUpe3JldHVybihmdW5jdGlvbiBpKHQsZSxuKXt2YXIgaT0oZnVuY3Rpb24gcih0KXtmb3IodmFyIGU7dC5oYXNOb2RlKGU9YVR0LnVuaXF1ZUlkKCJfcm9vdCIpKTspO3JldHVybiBlfSkodCksbz1uZXcgdkN0KHtjb21wb3VuZDohMH0pLnNldEdyYXBoKHtyb290Oml9KS5zZXREZWZhdWx0Tm9kZUxhYmVsKChmdW5jdGlvbihlKXtyZXR1cm4gdC5ub2RlKGUpfSkpO3JldHVybiBhVHQuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKHIpe3ZhciBhPXQubm9kZShyKSxzPXQucGFyZW50KHIpOyhhLnJhbms9PT1lfHxhLm1pblJhbms8PWUmJmU8PWEubWF4UmFuaykmJihvLnNldE5vZGUociksby5zZXRQYXJlbnQocixzfHxpKSxhVHQuZm9yRWFjaCh0W25dKHIpLChmdW5jdGlvbihlKXt2YXIgbj1lLnY9PT1yP2UudzplLnYsaT1vLmVkZ2UobixyKSxhPWFUdC5pc1VuZGVmaW5lZChpKT8wOmkud2VpZ2h0O28uc2V0RWRnZShuLHIse3dlaWdodDp0LmVkZ2UoZSkud2VpZ2h0K2F9KX0pKSxhVHQuaGFzKGEsIm1pblJhbmsiKSYmby5zZXROb2RlKHIse2JvcmRlckxlZnQ6YS5ib3JkZXJMZWZ0W2VdLGJvcmRlclJpZ2h0OmEuYm9yZGVyUmlnaHRbZV19KSl9KSksb30pKHQsZSxuKX0pKX1mdW5jdGlvbiB3Q3QodCxlKXt2YXIgbj1uZXcgYkN0O2FUdC5mb3JFYWNoKHQsKGZ1bmN0aW9uKHQpe3ZhciBpPXQuZ3JhcGgoKS5yb290LHI9eUN0KHQsaSxuLGUpO2FUdC5mb3JFYWNoKHIudnMsKGZ1bmN0aW9uKGUsbil7dC5ub2RlKGUpLm9yZGVyPW59KSksKGZ1bmN0aW9uIG8odCxlLG4pe3ZhciBpLHI9e307YVR0LmZvckVhY2gobiwoZnVuY3Rpb24obil7Zm9yKHZhciBvLGEscz10LnBhcmVudChuKTtzOyl7aWYoKG89dC5wYXJlbnQocykpPyhhPXJbb10scltvXT1zKTooYT1pLGk9cyksYSYmYSE9PXMpcmV0dXJuIHZvaWQgZS5zZXRFZGdlKGEscyk7cz1vfX0pKX0pKHQsbixyLnZzKX0pKX1mdW5jdGlvbiBTQ3QodCxlKXthVHQuZm9yRWFjaChlLChmdW5jdGlvbihlKXthVHQuZm9yRWFjaChlLChmdW5jdGlvbihlLG4pe3Qubm9kZShlKS5vcmRlcj1ufSkpfSkpfXZhciBNQ3Q9aUV0LkdyYXBoO2Z1bmN0aW9uIEVDdCh0LGUsbil7aWYoZT5uKXt2YXIgaT1lO2U9bixuPWl9dmFyIHI9dFtlXTtyfHwodFtlXT1yPXt9KSxyW25dPSEwfWZ1bmN0aW9uIFRDdCh0LGUsbil7aWYoZT5uKXt2YXIgaT1lO2U9bixuPWl9cmV0dXJuIGFUdC5oYXModFtlXSxuKX12YXIgQ0N0PWdUdC5ub3JtYWxpemVSYW5rcyxBQ3Q9Z1R0LnJlbW92ZUVtcHR5UmFua3Msa0N0PWdUdCxMQ3Q9aUV0LkdyYXBoLFBDdD1bIm5vZGVzZXAiLCJlZGdlc2VwIiwicmFua3NlcCIsIm1hcmdpbngiLCJtYXJnaW55Il0sTkN0PXtyYW5rc2VwOjUwLGVkZ2VzZXA6MjAsbm9kZXNlcDo1MCxyYW5rZGlyOiJ0YiJ9LElDdD1bImFjeWNsaWNlciIsInJhbmtlciIsInJhbmtkaXIiLCJhbGlnbiJdLE9DdD1bIndpZHRoIiwiaGVpZ2h0Il0sUkN0PXt3aWR0aDowLGhlaWdodDowfSx6Q3Q9WyJtaW5sZW4iLCJ3ZWlnaHQiLCJ3aWR0aCIsImhlaWdodCIsImxhYmVsb2Zmc2V0Il0sREN0PXttaW5sZW46MSx3ZWlnaHQ6MSx3aWR0aDowLGhlaWdodDowLGxhYmVsb2Zmc2V0OjEwLGxhYmVscG9zOiJyIn0sQkN0PVsibGFiZWxwb3MiXTtmdW5jdGlvbiBIQ3QodCxlKXtyZXR1cm4gYVR0Lm1hcFZhbHVlcyhhVHQucGljayh0LGUpLE51bWJlcil9ZnVuY3Rpb24gRkN0KHQpe3ZhciBlPXt9O3JldHVybiBhVHQuZm9yRWFjaCh0LChmdW5jdGlvbih0LG4pe2Vbbi50b0xvd2VyQ2FzZSgpXT10fSkpLGV9dmFyIFZDdCxVQ3QsakN0PWlFdC5HcmFwaCxHQ3Q9e2dyYXBobGliOmlFdCxsYXlvdXQ6ZnVuY3Rpb24gV0N0KHQsZSl7dmFyIG49ZSYmZS5kZWJ1Z1RpbWluZz9rQ3QudGltZTprQ3Qubm90aW1lO24oImxheW91dCIsKGZ1bmN0aW9uKCl7dmFyIGU9bigiICBidWlsZExheW91dEdyYXBoIiwoZnVuY3Rpb24oKXtyZXR1cm4oZnVuY3Rpb24gZSh0KXt2YXIgZT1uZXcgTEN0KHttdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwfSksbj1GQ3QodC5ncmFwaCgpKTtyZXR1cm4gZS5zZXRHcmFwaChhVHQubWVyZ2Uoe30sTkN0LEhDdChuLFBDdCksYVR0LnBpY2sobixJQ3QpKSksYVR0LmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihuKXt2YXIgaT1GQ3QodC5ub2RlKG4pKTtlLnNldE5vZGUobixhVHQuZGVmYXVsdHMoSEN0KGksT0N0KSxSQ3QpKSxlLnNldFBhcmVudChuLHQucGFyZW50KG4pKX0pKSxhVHQuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKG4pe3ZhciBpPUZDdCh0LmVkZ2UobikpO2Uuc2V0RWRnZShuLGFUdC5tZXJnZSh7fSxEQ3QsSEN0KGksekN0KSxhVHQucGljayhpLEJDdCkpKX0pKSxlfSkodCl9KSk7bigiICBydW5MYXlvdXQiLChmdW5jdGlvbigpeyEoZnVuY3Rpb24gdChlLG4pe24oIiAgICBtYWtlU3BhY2VGb3JFZGdlTGFiZWxzIiwoZnVuY3Rpb24oKXshKGZ1bmN0aW9uIHQoZSl7dmFyIG49ZS5ncmFwaCgpO24ucmFua3NlcC89MixhVHQuZm9yRWFjaChlLmVkZ2VzKCksKGZ1bmN0aW9uKHQpe3ZhciBpPWUuZWRnZSh0KTtpLm1pbmxlbio9MiwiYyIhPT1pLmxhYmVscG9zLnRvTG93ZXJDYXNlKCkmJigiVEIiPT09bi5yYW5rZGlyfHwiQlQiPT09bi5yYW5rZGlyP2kud2lkdGgrPWkubGFiZWxvZmZzZXQ6aS5oZWlnaHQrPWkubGFiZWxvZmZzZXQpfSkpfSkoZSl9KSksbigiICAgIHJlbW92ZVNlbGZFZGdlcyIsKGZ1bmN0aW9uKCl7IShmdW5jdGlvbiB0KGUpe2FUdC5mb3JFYWNoKGUuZWRnZXMoKSwoZnVuY3Rpb24odCl7aWYodC52PT09dC53KXt2YXIgbj1lLm5vZGUodC52KTtuLnNlbGZFZGdlc3x8KG4uc2VsZkVkZ2VzPVtdKSxuLnNlbGZFZGdlcy5wdXNoKHtlOnQsbGFiZWw6ZS5lZGdlKHQpfSksZS5yZW1vdmVFZGdlKHQpfX0pKX0pKGUpfSkpLG4oIiAgICBhY3ljbGljIiwoZnVuY3Rpb24oKXshKGZ1bmN0aW9uIHQoZSl7dmFyIG49ImdyZWVkeSI9PT1lLmdyYXBoKCkuYWN5Y2xpY2VyPyhmdW5jdGlvbiByKHQsZSl7aWYodC5ub2RlQ291bnQoKTw9MSlyZXR1cm5bXTt2YXIgbj0oZnVuY3Rpb24gaSh0LGUpe3ZhciBuPW5ldyBoVHQsaT0wLHI9MDthVHQuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKHQpe24uc2V0Tm9kZSh0LHt2OnQsaW46MCxvdXQ6MH0pfSkpLGFUdC5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24odCl7dmFyIG89bi5lZGdlKHQudix0LncpfHwwLGE9ZSh0KTtuLnNldEVkZ2UodC52LHQudyxvK2EpLHI9TWF0aC5tYXgocixuLm5vZGUodC52KS5vdXQrPWEpLGk9TWF0aC5tYXgoaSxuLm5vZGUodC53KS5pbis9YSl9KSk7dmFyIG89YVR0LnJhbmdlKHIraSszKS5tYXAoKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBzVHR9KSksYT1pKzE7cmV0dXJuIGFUdC5mb3JFYWNoKG4ubm9kZXMoKSwoZnVuY3Rpb24odCl7ZlR0KG8sYSxuLm5vZGUodCkpfSkpLHtncmFwaDpuLGJ1Y2tldHM6byx6ZXJvSWR4OmF9fSkodCxlfHxkVHQpLHI9KGZ1bmN0aW9uIG8odCxlLG4pe2Zvcih2YXIgaSxyPVtdLG89ZVtlLmxlbmd0aC0xXSxhPWVbMF07dC5ub2RlQ291bnQoKTspe2Zvcig7aT1hLmRlcXVldWUoKTspcFR0KHQsZSxuLGkpO2Zvcig7aT1vLmRlcXVldWUoKTspcFR0KHQsZSxuLGkpO2lmKHQubm9kZUNvdW50KCkpZm9yKHZhciBzPWUubGVuZ3RoLTI7cz4wOy0tcylpZihpPWVbc10uZGVxdWV1ZSgpKXtyPXIuY29uY2F0KHBUdCh0LGUsbixpLCEwKSk7YnJlYWt9fXJldHVybiByfSkobi5ncmFwaCxuLmJ1Y2tldHMsbi56ZXJvSWR4KTtyZXR1cm4gYVR0LmZsYXR0ZW4oYVR0Lm1hcChyLChmdW5jdGlvbihlKXtyZXR1cm4gdC5vdXRFZGdlcyhlLnYsZS53KX0pKSwhMCl9KShlLChmdW5jdGlvbiBpKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC5lZGdlKGUpLndlaWdodH19KShlKSk6KGZ1bmN0aW9uIG8odCl7dmFyIGU9W10sbj17fSxpPXt9O3JldHVybiBhVHQuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uIHIobyl7YVR0LmhhcyhpLG8pfHwoaVtvXT0hMCxuW29dPSEwLGFUdC5mb3JFYWNoKHQub3V0RWRnZXMobyksKGZ1bmN0aW9uKHQpe2FUdC5oYXMobix0LncpP2UucHVzaCh0KTpyKHQudyl9KSksZGVsZXRlIG5bb10pfSkpLGV9KShlKTthVHQuZm9yRWFjaChuLChmdW5jdGlvbih0KXt2YXIgbj1lLmVkZ2UodCk7ZS5yZW1vdmVFZGdlKHQpLG4uZm9yd2FyZE5hbWU9dC5uYW1lLG4ucmV2ZXJzZWQ9ITAsZS5zZXRFZGdlKHQudyx0LnYsbixhVHQudW5pcXVlSWQoInJldiIpKX0pKX0pKGUpfSkpLG4oIiAgICBuZXN0aW5nR3JhcGgucnVuIiwoZnVuY3Rpb24oKXthQ3QoZSl9KSksbigiICAgIHJhbmsiLChmdW5jdGlvbigpeyEoZnVuY3Rpb24gdChlKXtzd2l0Y2goZS5ncmFwaCgpLnJhbmtlcil7Y2FzZSJuZXR3b3JrLXNpbXBsZXgiOm9DdChlKTticmVhaztjYXNlInRpZ2h0LXRyZWUiOiEoZnVuY3Rpb24gbih0KXtpQ3QodCksRFR0KHQpfSkoZSk7YnJlYWs7Y2FzZSJsb25nZXN0LXBhdGgiOnJDdChlKTticmVhaztkZWZhdWx0Om9DdChlKX19KShrQ3QuYXNOb25Db21wb3VuZEdyYXBoKGUpKX0pKSxuKCIgICAgaW5qZWN0RWRnZUxhYmVsUHJveGllcyIsKGZ1bmN0aW9uKCl7IShmdW5jdGlvbiB0KGUpe2FUdC5mb3JFYWNoKGUuZWRnZXMoKSwoZnVuY3Rpb24odCl7dmFyIG49ZS5lZGdlKHQpO2lmKG4ud2lkdGgmJm4uaGVpZ2h0KXt2YXIgaT1lLm5vZGUodC52KSxyPWUubm9kZSh0LncpO2tDdC5hZGREdW1teU5vZGUoZSwiZWRnZS1wcm94eSIse3Jhbms6KHIucmFuay1pLnJhbmspLzIraS5yYW5rLGU6dH0sIl9lcCIpfX0pKX0pKGUpfSkpLG4oIiAgICByZW1vdmVFbXB0eVJhbmtzIiwoZnVuY3Rpb24oKXtBQ3QoZSl9KSksbigiICAgIG5lc3RpbmdHcmFwaC5jbGVhbnVwIiwoZnVuY3Rpb24oKXshKGZ1bmN0aW9uIHQoZSl7dmFyIG49ZS5ncmFwaCgpO2UucmVtb3ZlTm9kZShuLm5lc3RpbmdSb290KSxkZWxldGUgbi5uZXN0aW5nUm9vdCxhVHQuZm9yRWFjaChlLmVkZ2VzKCksKGZ1bmN0aW9uKHQpe2UuZWRnZSh0KS5uZXN0aW5nRWRnZSYmZS5yZW1vdmVFZGdlKHQpfSkpfSkoZSl9KSksbigiICAgIG5vcm1hbGl6ZVJhbmtzIiwoZnVuY3Rpb24oKXtDQ3QoZSl9KSksbigiICAgIGFzc2lnblJhbmtNaW5NYXgiLChmdW5jdGlvbigpeyEoZnVuY3Rpb24gdChlKXt2YXIgbj0wO2FUdC5mb3JFYWNoKGUubm9kZXMoKSwoZnVuY3Rpb24odCl7dmFyIGk9ZS5ub2RlKHQpO2kuYm9yZGVyVG9wJiYoaS5taW5SYW5rPWUubm9kZShpLmJvcmRlclRvcCkucmFuayxpLm1heFJhbms9ZS5ub2RlKGkuYm9yZGVyQm90dG9tKS5yYW5rLG49YVR0Lm1heChuLGkubWF4UmFuaykpfSkpLGUuZ3JhcGgoKS5tYXhSYW5rPW59KShlKX0pKSxuKCIgICAgcmVtb3ZlRWRnZUxhYmVsUHJveGllcyIsKGZ1bmN0aW9uKCl7IShmdW5jdGlvbiB0KGUpe2FUdC5mb3JFYWNoKGUubm9kZXMoKSwoZnVuY3Rpb24odCl7dmFyIG49ZS5ub2RlKHQpOyJlZGdlLXByb3h5Ij09PW4uZHVtbXkmJihlLmVkZ2Uobi5lKS5sYWJlbFJhbms9bi5yYW5rLGUucmVtb3ZlTm9kZSh0KSl9KSl9KShlKX0pKSxuKCIgICAgbm9ybWFsaXplLnJ1biIsKGZ1bmN0aW9uKCl7IShmdW5jdGlvbiB0KGUpe2UuZ3JhcGgoKS5kdW1teUNoYWlucz1bXSxhVHQuZm9yRWFjaChlLmVkZ2VzKCksKGZ1bmN0aW9uKHQpeyEoZnVuY3Rpb24gbih0LGUpe3ZhciBuLGkscixvPWUudixhPXQubm9kZShvKS5yYW5rLHM9ZS53LGw9dC5ub2RlKHMpLnJhbmssYz1lLm5hbWUsdT10LmVkZ2UoZSksaD11LmxhYmVsUmFuaztpZihsIT09YSsxKXtmb3IodC5yZW1vdmVFZGdlKGUpLHI9MCwrK2E7YTxsOysrciwrK2EpdS5wb2ludHM9W10sbj1nVHQuYWRkRHVtbXlOb2RlKHQsImVkZ2UiLGk9e3dpZHRoOjAsaGVpZ2h0OjAsZWRnZUxhYmVsOnUsZWRnZU9iajplLHJhbms6YX0sIl9kIiksYT09PWgmJihpLndpZHRoPXUud2lkdGgsaS5oZWlnaHQ9dS5oZWlnaHQsaS5kdW1teT0iZWRnZS1sYWJlbCIsaS5sYWJlbHBvcz11LmxhYmVscG9zKSx0LnNldEVkZ2UobyxuLHt3ZWlnaHQ6dS53ZWlnaHR9LGMpLDA9PT1yJiZ0LmdyYXBoKCkuZHVtbXlDaGFpbnMucHVzaChuKSxvPW47dC5zZXRFZGdlKG8scyx7d2VpZ2h0OnUud2VpZ2h0fSxjKX19KShlLHQpfSkpfSkoZSl9KSksbigiICAgIHBhcmVudER1bW15Q2hhaW5zIiwoZnVuY3Rpb24oKXshKGZ1bmN0aW9uIHQoZSl7dmFyIG49KGZ1bmN0aW9uIGkodCl7dmFyIGU9e30sbj0wO3JldHVybiBhVHQuZm9yRWFjaCh0LmNoaWxkcmVuKCksKGZ1bmN0aW9uIGkocil7dmFyIG89bjthVHQuZm9yRWFjaCh0LmNoaWxkcmVuKHIpLGkpLGVbcl09e2xvdzpvLGxpbTpuKyt9fSkpLGV9KShlKTthVHQuZm9yRWFjaChlLmdyYXBoKCkuZHVtbXlDaGFpbnMsKGZ1bmN0aW9uKHQpe2Zvcih2YXIgaT1lLm5vZGUodCkscj1pLmVkZ2VPYmosbz0oZnVuY3Rpb24gYSh0LGUsbixpKXt2YXIgcixvLGE9W10scz1bXSxsPU1hdGgubWluKGVbbl0ubG93LGVbaV0ubG93KSxjPU1hdGgubWF4KGVbbl0ubGltLGVbaV0ubGltKTtyPW47ZG97cj10LnBhcmVudChyKSxhLnB1c2gocil9d2hpbGUociYmKGVbcl0ubG93Pmx8fGM+ZVtyXS5saW0pKTtmb3Iobz1yLHI9aTsocj10LnBhcmVudChyKSkhPT1vOylzLnB1c2gocik7cmV0dXJue3BhdGg6YS5jb25jYXQocy5yZXZlcnNlKCkpLGxjYTpvfX0pKGUsbixyLnYsci53KSxzPW8ucGF0aCxsPW8ubGNhLGM9MCx1PXNbY10saD0hMDt0IT09ci53Oyl7aWYoaT1lLm5vZGUodCksaCl7Zm9yKDsodT1zW2NdKSE9PWwmJmUubm9kZSh1KS5tYXhSYW5rPGkucmFuazspYysrO3U9PT1sJiYoaD0hMSl9aWYoIWgpe2Zvcig7YzxzLmxlbmd0aC0xJiZlLm5vZGUodT1zW2MrMV0pLm1pblJhbms8PWkucmFuazspYysrO3U9c1tjXX1lLnNldFBhcmVudCh0LHUpLHQ9ZS5zdWNjZXNzb3JzKHQpWzBdfX0pKX0pKGUpfSkpLG4oIiAgICBhZGRCb3JkZXJTZWdtZW50cyIsKGZ1bmN0aW9uKCl7IShmdW5jdGlvbiB0KGUpe2FUdC5mb3JFYWNoKGUuY2hpbGRyZW4oKSwoZnVuY3Rpb24gdChuKXt2YXIgaT1lLmNoaWxkcmVuKG4pLHI9ZS5ub2RlKG4pO2lmKGkubGVuZ3RoJiZhVHQuZm9yRWFjaChpLHQpLGFUdC5oYXMociwibWluUmFuayIpKXtyLmJvcmRlckxlZnQ9W10sci5ib3JkZXJSaWdodD1bXTtmb3IodmFyIG89ci5taW5SYW5rLGE9ci5tYXhSYW5rKzE7bzxhOysrbyljQ3QoZSwiYm9yZGVyTGVmdCIsIl9ibCIsbixyLG8pLGNDdChlLCJib3JkZXJSaWdodCIsIl9iciIsbixyLG8pfX0pKX0pKGUpfSkpLG4oIiAgICBvcmRlciIsKGZ1bmN0aW9uKCl7IShmdW5jdGlvbiB0KGUpe3ZhciBuPWdUdC5tYXhSYW5rKGUpLGk9eEN0KGUsYVR0LnJhbmdlKDEsbisxKSwiaW5FZGdlcyIpLHI9eEN0KGUsYVR0LnJhbmdlKG4tMSwtMSwtMSksIm91dEVkZ2VzIiksbz0oZnVuY3Rpb24gYSh0KXt2YXIgZT17fSxuPWFUdC5maWx0ZXIodC5ub2RlcygpLChmdW5jdGlvbihlKXtyZXR1cm4hdC5jaGlsZHJlbihlKS5sZW5ndGh9KSksaT1hVHQubWF4KGFUdC5tYXAobiwoZnVuY3Rpb24oZSl7cmV0dXJuIHQubm9kZShlKS5yYW5rfSkpKSxyPWFUdC5tYXAoYVR0LnJhbmdlKGkrMSksKGZ1bmN0aW9uKCl7cmV0dXJuW119KSksbz1hVHQuc29ydEJ5KG4sKGZ1bmN0aW9uKGUpe3JldHVybiB0Lm5vZGUoZSkucmFua30pKTtyZXR1cm4gYVR0LmZvckVhY2gobywoZnVuY3Rpb24gbihpKXtpZighYVR0LmhhcyhlLGkpKXtlW2ldPSEwO3ZhciBvPXQubm9kZShpKTtyW28ucmFua10ucHVzaChpKSxhVHQuZm9yRWFjaCh0LnN1Y2Nlc3NvcnMoaSksbil9fSkpLHJ9KShlKTtTQ3QoZSxvKTtmb3IodmFyIHMsbD1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksYz0wLHU9MDt1PDQ7KytjLCsrdSl7d0N0KGMlMj9pOnIsYyU0Pj0yKSxvPWdUdC5idWlsZExheWVyTWF0cml4KGUpO3ZhciBoPWZDdChlLG8pO2g8bCYmKHU9MCxzPWFUdC5jbG9uZURlZXAobyksbD1oKX1TQ3QoZSxzKX0pKGUpfSkpLG4oIiAgICBpbnNlcnRTZWxmRWRnZXMiLChmdW5jdGlvbigpeyEoZnVuY3Rpb24gdChlKXt2YXIgbj1rQ3QuYnVpbGRMYXllck1hdHJpeChlKTthVHQuZm9yRWFjaChuLChmdW5jdGlvbih0KXt2YXIgbj0wO2FUdC5mb3JFYWNoKHQsKGZ1bmN0aW9uKHQsaSl7dmFyIHI9ZS5ub2RlKHQpO3Iub3JkZXI9aStuLGFUdC5mb3JFYWNoKHIuc2VsZkVkZ2VzLChmdW5jdGlvbih0KXtrQ3QuYWRkRHVtbXlOb2RlKGUsInNlbGZlZGdlIix7d2lkdGg6dC5sYWJlbC53aWR0aCxoZWlnaHQ6dC5sYWJlbC5oZWlnaHQscmFuazpyLnJhbmssb3JkZXI6aSsgKytuLGU6dC5lLGxhYmVsOnQubGFiZWx9LCJfc2UiKX0pKSxkZWxldGUgci5zZWxmRWRnZXN9KSl9KSl9KShlKX0pKSxuKCIgICAgYWRqdXN0Q29vcmRpbmF0ZVN5c3RlbSIsKGZ1bmN0aW9uKCl7IShmdW5jdGlvbiB0KGUpe3ZhciBuPWUuZ3JhcGgoKS5yYW5rZGlyLnRvTG93ZXJDYXNlKCk7ImxyIiE9PW4mJiJybCIhPT1ufHx1Q3QoZSl9KShlKX0pKSxuKCIgICAgcG9zaXRpb24iLChmdW5jdGlvbigpeyEoZnVuY3Rpb24gdChlKXsoZnVuY3Rpb24gbih0KXt2YXIgZT1nVHQuYnVpbGRMYXllck1hdHJpeCh0KSxuPXQuZ3JhcGgoKS5yYW5rc2VwLGk9MDthVHQuZm9yRWFjaChlLChmdW5jdGlvbihlKXt2YXIgcj1hVHQubWF4KGFUdC5tYXAoZSwoZnVuY3Rpb24oZSl7cmV0dXJuIHQubm9kZShlKS5oZWlnaHR9KSkpO2FUdC5mb3JFYWNoKGUsKGZ1bmN0aW9uKGUpe3Qubm9kZShlKS55PWkrci8yfSkpLGkrPXIrbn0pKX0pKGU9Z1R0LmFzTm9uQ29tcG91bmRHcmFwaChlKSksYVR0LmZvckVhY2goKGZ1bmN0aW9uIGkodCl7dmFyIGUsbj1nVHQuYnVpbGRMYXllck1hdHJpeCh0KSxpPWFUdC5tZXJnZSgoZnVuY3Rpb24gcih0LGUpe3ZhciBuPXt9O3JldHVybiBhVHQucmVkdWNlKGUsKGZ1bmN0aW9uIGkoZSxyKXt2YXIgbz0wLGE9MCxzPWUubGVuZ3RoLGw9YVR0Lmxhc3Qocik7cmV0dXJuIGFUdC5mb3JFYWNoKHIsKGZ1bmN0aW9uKGUsaSl7dmFyIGM9KGZ1bmN0aW9uIHUodCxlKXtpZih0Lm5vZGUoZSkuZHVtbXkpcmV0dXJuIGFUdC5maW5kKHQucHJlZGVjZXNzb3JzKGUpLChmdW5jdGlvbihlKXtyZXR1cm4gdC5ub2RlKGUpLmR1bW15fSkpfSkodCxlKSxoPWM/dC5ub2RlKGMpLm9yZGVyOnM7KGN8fGU9PT1sKSYmKGFUdC5mb3JFYWNoKHIuc2xpY2UoYSxpKzEpLChmdW5jdGlvbihlKXthVHQuZm9yRWFjaCh0LnByZWRlY2Vzc29ycyhlKSwoZnVuY3Rpb24oaSl7dmFyIHI9dC5ub2RlKGkpLGE9ci5vcmRlcjshKGE8b3x8aDxhKXx8ci5kdW1teSYmdC5ub2RlKGUpLmR1bW15fHxFQ3QobixpLGUpfSkpfSkpLGE9aSsxLG89aCl9KSkscn0pKSxufSkodCxuKSwoZnVuY3Rpb24gbyh0LGUpe3ZhciBuPXt9O2Z1bmN0aW9uIGkoZSxpLHIsbyxhKXt2YXIgczthVHQuZm9yRWFjaChhVHQucmFuZ2UoaSxyKSwoZnVuY3Rpb24oaSl7dC5ub2RlKHM9ZVtpXSkuZHVtbXkmJmFUdC5mb3JFYWNoKHQucHJlZGVjZXNzb3JzKHMpLChmdW5jdGlvbihlKXt2YXIgaT10Lm5vZGUoZSk7aS5kdW1teSYmKGkub3JkZXI8b3x8aS5vcmRlcj5hKSYmRUN0KG4sZSxzKX0pKX0pKX1yZXR1cm4gYVR0LnJlZHVjZShlLChmdW5jdGlvbiByKGUsbil7dmFyIHIsbz0tMSxhPTA7cmV0dXJuIGFUdC5mb3JFYWNoKG4sKGZ1bmN0aW9uKHMsbCl7aWYoImJvcmRlciI9PT10Lm5vZGUocykuZHVtbXkpe3ZhciBjPXQucHJlZGVjZXNzb3JzKHMpO2MubGVuZ3RoJiYocj10Lm5vZGUoY1swXSkub3JkZXIsaShuLGEsbCxvLHIpLGE9bCxvPXIpfWkobixhLG4ubGVuZ3RoLHIsZS5sZW5ndGgpfSkpLG59KSksbn0pKHQsbikpLGE9e307YVR0LmZvckVhY2goWyJ1IiwiZCJdLChmdW5jdGlvbihyKXtlPSJ1Ij09PXI/bjphVHQudmFsdWVzKG4pLnJldmVyc2UoKSxhVHQuZm9yRWFjaChbImwiLCJyIl0sKGZ1bmN0aW9uKG4peyJyIj09PW4mJihlPWFUdC5tYXAoZSwoZnVuY3Rpb24odCl7cmV0dXJuIGFUdC52YWx1ZXModCkucmV2ZXJzZSgpfSkpKTt2YXIgbz0oInUiPT09cj90LnByZWRlY2Vzc29yczp0LnN1Y2Nlc3NvcnMpLmJpbmQodCkscz0oZnVuY3Rpb24gbCh0LGUsbixpKXt2YXIgcj17fSxvPXt9LGE9e307cmV0dXJuIGFUdC5mb3JFYWNoKGUsKGZ1bmN0aW9uKHQpe2FUdC5mb3JFYWNoKHQsKGZ1bmN0aW9uKHQsZSl7clt0XT10LG9bdF09dCxhW3RdPWV9KSl9KSksYVR0LmZvckVhY2goZSwoZnVuY3Rpb24odCl7dmFyIGU9LTE7YVR0LmZvckVhY2godCwoZnVuY3Rpb24odCl7dmFyIHM9aSh0KTtpZihzLmxlbmd0aClmb3IodmFyIGw9KChzPWFUdC5zb3J0QnkocywoZnVuY3Rpb24odCl7cmV0dXJuIGFbdF19KSkpLmxlbmd0aC0xKS8yLGM9TWF0aC5mbG9vcihsKSx1PU1hdGguY2VpbChsKTtjPD11OysrYyl7dmFyIGg9c1tjXTtvW3RdPT09dCYmZTxhW2hdJiYhVEN0KG4sdCxoKSYmKG9baF09dCxvW3RdPXJbdF09cltoXSxlPWFbaF0pfX0pKX0pKSx7cm9vdDpyLGFsaWduOm99fSkoMCxlLGksbyksYz0oZnVuY3Rpb24gdSh0LGUsbixpLHIpe3ZhciBvPXt9LGE9KGZ1bmN0aW9uIHModCxlLG4saSl7dmFyIHI9bmV3IE1DdCxvPXQuZ3JhcGgoKSxhPShmdW5jdGlvbiBzKHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24oaSxyLG8pe3ZhciBhLHM9aS5ub2RlKHIpLGw9aS5ub2RlKG8pLGM9MDtpZihjKz1zLndpZHRoLzIsYVR0LmhhcyhzLCJsYWJlbHBvcyIpKXN3aXRjaChzLmxhYmVscG9zLnRvTG93ZXJDYXNlKCkpe2Nhc2UibCI6YT0tcy53aWR0aC8yO2JyZWFrO2Nhc2UiciI6YT1zLndpZHRoLzJ9aWYoYSYmKGMrPW4/YTotYSksYT0wLGMrPShzLmR1bW15P2U6dCkvMixjKz0obC5kdW1teT9lOnQpLzIsYys9bC53aWR0aC8yLGFUdC5oYXMobCwibGFiZWxwb3MiKSlzd2l0Y2gobC5sYWJlbHBvcy50b0xvd2VyQ2FzZSgpKXtjYXNlImwiOmE9bC53aWR0aC8yO2JyZWFrO2Nhc2UiciI6YT0tbC53aWR0aC8yfXJldHVybiBhJiYoYys9bj9hOi1hKSxhPTAsY319KShvLm5vZGVzZXAsby5lZGdlc2VwLGkpO3JldHVybiBhVHQuZm9yRWFjaChlLChmdW5jdGlvbihlKXt2YXIgaTthVHQuZm9yRWFjaChlLChmdW5jdGlvbihlKXt2YXIgbz1uW2VdO2lmKHIuc2V0Tm9kZShvKSxpKXt2YXIgcz1uW2ldLGw9ci5lZGdlKHMsbyk7ci5zZXRFZGdlKHMsbyxNYXRoLm1heChhKHQsZSxpKSxsfHwwKSl9aT1lfSkpfSkpLHJ9KSh0LGUsbixyKSxsPXI/ImJvcmRlckxlZnQiOiJib3JkZXJSaWdodCI7ZnVuY3Rpb24gYyh0LGUpe2Zvcih2YXIgbj1hLm5vZGVzKCksaT1uLnBvcCgpLHI9e307aTspcltpXT90KGkpOihyW2ldPSEwLG4ucHVzaChpKSxuPW4uY29uY2F0KGUoaSkpKSxpPW4ucG9wKCl9cmV0dXJuIGMoKGZ1bmN0aW9uIHUodCl7b1t0XT1hLmluRWRnZXModCkucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLm1heCh0LG9bZS52XSthLmVkZ2UoZSkpfSksMCl9KSxhLnByZWRlY2Vzc29ycy5iaW5kKGEpKSxjKChmdW5jdGlvbiBoKGUpe3ZhciBuPWEub3V0RWRnZXMoZSkucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLm1pbih0LG9bZS53XS1hLmVkZ2UoZSkpfSksTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSxpPXQubm9kZShlKTtuIT09TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZJiZpLmJvcmRlclR5cGUhPT1sJiYob1tlXT1NYXRoLm1heChvW2VdLG4pKX0pLGEuc3VjY2Vzc29ycy5iaW5kKGEpKSxhVHQuZm9yRWFjaChpLChmdW5jdGlvbih0KXtvW3RdPW9bblt0XV19KSksb30pKHQsZSxzLnJvb3Qscy5hbGlnbiwiciI9PT1uKTsiciI9PT1uJiYoYz1hVHQubWFwVmFsdWVzKGMsKGZ1bmN0aW9uKHQpe3JldHVybi10fSkpKSxhW3Irbl09Y30pKX0pKTt2YXIgcz0oZnVuY3Rpb24gbCh0LGUpe3JldHVybiBhVHQubWluQnkoYVR0LnZhbHVlcyhlKSwoZnVuY3Rpb24oZSl7dmFyIG49TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLGk9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO3JldHVybiBhVHQuZm9ySW4oZSwoZnVuY3Rpb24oZSxyKXt2YXIgbz0oZnVuY3Rpb24gYSh0LGUpe3JldHVybiB0Lm5vZGUoZSkud2lkdGh9KSh0LHIpLzI7bj1NYXRoLm1heChlK28sbiksaT1NYXRoLm1pbihlLW8saSl9KSksbi1pfSkpfSkodCxhKTtyZXR1cm4oZnVuY3Rpb24gYyh0LGUpe3ZhciBuPWFUdC52YWx1ZXMoZSksaT1hVHQubWluKG4pLHI9YVR0Lm1heChuKTthVHQuZm9yRWFjaChbInUiLCJkIl0sKGZ1bmN0aW9uKG4pe2FUdC5mb3JFYWNoKFsibCIsInIiXSwoZnVuY3Rpb24obyl7dmFyIGEscz1uK28sbD10W3NdO2lmKGwhPT1lKXt2YXIgYz1hVHQudmFsdWVzKGwpOyhhPSJsIj09PW8/aS1hVHQubWluKGMpOnItYVR0Lm1heChjKSkmJih0W3NdPWFUdC5tYXBWYWx1ZXMobCwoZnVuY3Rpb24odCl7cmV0dXJuIHQrYX0pKSl9fSkpfSkpfSkoYSxzKSwoZnVuY3Rpb24gdSh0LGUpe3JldHVybiBhVHQubWFwVmFsdWVzKHQudWwsKGZ1bmN0aW9uKG4saSl7aWYoZSlyZXR1cm4gdFtlLnRvTG93ZXJDYXNlKCldW2ldO3ZhciByPWFUdC5zb3J0QnkoYVR0Lm1hcCh0LGkpKTtyZXR1cm4oclsxXStyWzJdKS8yfSkpfSkoYSx0LmdyYXBoKCkuYWxpZ24pfSkoZSksKGZ1bmN0aW9uKHQsbil7ZS5ub2RlKG4pLng9dH0pKX0pKGUpfSkpLG4oIiAgICBwb3NpdGlvblNlbGZFZGdlcyIsKGZ1bmN0aW9uKCl7IShmdW5jdGlvbiB0KGUpe2FUdC5mb3JFYWNoKGUubm9kZXMoKSwoZnVuY3Rpb24odCl7dmFyIG49ZS5ub2RlKHQpO2lmKCJzZWxmZWRnZSI9PT1uLmR1bW15KXt2YXIgaT1lLm5vZGUobi5lLnYpLHI9aS54K2kud2lkdGgvMixvPWkueSxhPW4ueC1yLHM9aS5oZWlnaHQvMjtlLnNldEVkZ2Uobi5lLG4ubGFiZWwpLGUucmVtb3ZlTm9kZSh0KSxuLmxhYmVsLnBvaW50cz1be3g6cisyKmEvMyx5Om8tc30se3g6cis1KmEvNix5Om8tc30se3g6cithLHk6b30se3g6cis1KmEvNix5Om8rc30se3g6cisyKmEvMyx5Om8rc31dLG4ubGFiZWwueD1uLngsbi5sYWJlbC55PW4ueX19KSl9KShlKX0pKSxuKCIgICAgcmVtb3ZlQm9yZGVyTm9kZXMiLChmdW5jdGlvbigpeyEoZnVuY3Rpb24gdChlKXthVHQuZm9yRWFjaChlLm5vZGVzKCksKGZ1bmN0aW9uKHQpe2lmKGUuY2hpbGRyZW4odCkubGVuZ3RoKXt2YXIgbj1lLm5vZGUodCksaT1lLm5vZGUobi5ib3JkZXJUb3ApLHI9ZS5ub2RlKG4uYm9yZGVyQm90dG9tKSxvPWUubm9kZShhVHQubGFzdChuLmJvcmRlckxlZnQpKSxhPWUubm9kZShhVHQubGFzdChuLmJvcmRlclJpZ2h0KSk7bi53aWR0aD1NYXRoLmFicyhhLngtby54KSxuLmhlaWdodD1NYXRoLmFicyhyLnktaS55KSxuLng9by54K24ud2lkdGgvMixuLnk9aS55K24uaGVpZ2h0LzJ9fSkpLGFUdC5mb3JFYWNoKGUubm9kZXMoKSwoZnVuY3Rpb24odCl7ImJvcmRlciI9PT1lLm5vZGUodCkuZHVtbXkmJmUucmVtb3ZlTm9kZSh0KX0pKX0pKGUpfSkpLG4oIiAgICBub3JtYWxpemUudW5kbyIsKGZ1bmN0aW9uKCl7IShmdW5jdGlvbiB0KGUpe2FUdC5mb3JFYWNoKGUuZ3JhcGgoKS5kdW1teUNoYWlucywoZnVuY3Rpb24odCl7dmFyIG4saT1lLm5vZGUodCkscj1pLmVkZ2VMYWJlbDtmb3IoZS5zZXRFZGdlKGkuZWRnZU9iaixyKTtpLmR1bW15OyluPWUuc3VjY2Vzc29ycyh0KVswXSxlLnJlbW92ZU5vZGUodCksci5wb2ludHMucHVzaCh7eDppLngseTppLnl9KSwiZWRnZS1sYWJlbCI9PT1pLmR1bW15JiYoci54PWkueCxyLnk9aS55LHIud2lkdGg9aS53aWR0aCxyLmhlaWdodD1pLmhlaWdodCksaT1lLm5vZGUodD1uKX0pKX0pKGUpfSkpLG4oIiAgICBmaXh1cEVkZ2VMYWJlbENvb3JkcyIsKGZ1bmN0aW9uKCl7IShmdW5jdGlvbiB0KGUpe2FUdC5mb3JFYWNoKGUuZWRnZXMoKSwoZnVuY3Rpb24odCl7dmFyIG49ZS5lZGdlKHQpO2lmKGFUdC5oYXMobiwieCIpKXN3aXRjaCgibCIhPT1uLmxhYmVscG9zJiYiciIhPT1uLmxhYmVscG9zfHwobi53aWR0aC09bi5sYWJlbG9mZnNldCksbi5sYWJlbHBvcyl7Y2FzZSJsIjpuLngtPW4ud2lkdGgvMituLmxhYmVsb2Zmc2V0O2JyZWFrO2Nhc2UiciI6bi54Kz1uLndpZHRoLzIrbi5sYWJlbG9mZnNldH19KSl9KShlKX0pKSxuKCIgICAgdW5kb0Nvb3JkaW5hdGVTeXN0ZW0iLChmdW5jdGlvbigpeyEoZnVuY3Rpb24gdChlKXt2YXIgbj1lLmdyYXBoKCkucmFua2Rpci50b0xvd2VyQ2FzZSgpOyJidCIhPT1uJiYicmwiIT09bnx8KGZ1bmN0aW9uIGkodCl7YVR0LmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihlKXtkQ3QodC5ub2RlKGUpKX0pKSxhVHQuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKGUpe3ZhciBuPXQuZWRnZShlKTthVHQuZm9yRWFjaChuLnBvaW50cyxkQ3QpLGFUdC5oYXMobiwieSIpJiZkQ3Qobil9KSl9KShlKSwibHIiIT09biYmInJsIiE9PW58fCgoZnVuY3Rpb24gcih0KXthVHQuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe3BDdCh0Lm5vZGUoZSkpfSkpLGFUdC5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24oZSl7dmFyIG49dC5lZGdlKGUpO2FUdC5mb3JFYWNoKG4ucG9pbnRzLHBDdCksYVR0LmhhcyhuLCJ4IikmJnBDdChuKX0pKX0pKGUpLHVDdChlKSl9KShlKX0pKSxuKCIgICAgdHJhbnNsYXRlR3JhcGgiLChmdW5jdGlvbigpeyEoZnVuY3Rpb24gdChlKXt2YXIgbj1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksaT0wLHI9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLG89MCxhPWUuZ3JhcGgoKSxzPWEubWFyZ2lueHx8MCxsPWEubWFyZ2lueXx8MDtmdW5jdGlvbiBjKHQpe3ZhciBlPXQueCxhPXQueSxzPXQud2lkdGgsbD10LmhlaWdodDtuPU1hdGgubWluKG4sZS1zLzIpLGk9TWF0aC5tYXgoaSxlK3MvMikscj1NYXRoLm1pbihyLGEtbC8yKSxvPU1hdGgubWF4KG8sYStsLzIpfWFUdC5mb3JFYWNoKGUubm9kZXMoKSwoZnVuY3Rpb24odCl7YyhlLm5vZGUodCkpfSkpLGFUdC5mb3JFYWNoKGUuZWRnZXMoKSwoZnVuY3Rpb24odCl7dmFyIG49ZS5lZGdlKHQpO2FUdC5oYXMobiwieCIpJiZjKG4pfSkpLG4tPXMsci09bCxhVHQuZm9yRWFjaChlLm5vZGVzKCksKGZ1bmN0aW9uKHQpe3ZhciBpPWUubm9kZSh0KTtpLngtPW4saS55LT1yfSkpLGFUdC5mb3JFYWNoKGUuZWRnZXMoKSwoZnVuY3Rpb24odCl7dmFyIGk9ZS5lZGdlKHQpO2FUdC5mb3JFYWNoKGkucG9pbnRzLChmdW5jdGlvbih0KXt0LngtPW4sdC55LT1yfSkpLGFUdC5oYXMoaSwieCIpJiYoaS54LT1uKSxhVHQuaGFzKGksInkiKSYmKGkueS09cil9KSksYS53aWR0aD1pLW4rcyxhLmhlaWdodD1vLXIrbH0pKGUpfSkpLG4oIiAgICBhc3NpZ25Ob2RlSW50ZXJzZWN0cyIsKGZ1bmN0aW9uKCl7IShmdW5jdGlvbiB0KGUpe2FUdC5mb3JFYWNoKGUuZWRnZXMoKSwoZnVuY3Rpb24odCl7dmFyIG4saSxyPWUuZWRnZSh0KSxvPWUubm9kZSh0LnYpLGE9ZS5ub2RlKHQudyk7ci5wb2ludHM/KG49ci5wb2ludHNbMF0saT1yLnBvaW50c1tyLnBvaW50cy5sZW5ndGgtMV0pOihyLnBvaW50cz1bXSxuPWEsaT1vKSxyLnBvaW50cy51bnNoaWZ0KGtDdC5pbnRlcnNlY3RSZWN0KG8sbikpLHIucG9pbnRzLnB1c2goa0N0LmludGVyc2VjdFJlY3QoYSxpKSl9KSl9KShlKX0pKSxuKCIgICAgcmV2ZXJzZVBvaW50cyIsKGZ1bmN0aW9uKCl7IShmdW5jdGlvbiB0KGUpe2FUdC5mb3JFYWNoKGUuZWRnZXMoKSwoZnVuY3Rpb24odCl7dmFyIG49ZS5lZGdlKHQpO24ucmV2ZXJzZWQmJm4ucG9pbnRzLnJldmVyc2UoKX0pKX0pKGUpfSkpLG4oIiAgICBhY3ljbGljLnVuZG8iLChmdW5jdGlvbigpeyEoZnVuY3Rpb24gdChlKXthVHQuZm9yRWFjaChlLmVkZ2VzKCksKGZ1bmN0aW9uKHQpe3ZhciBuPWUuZWRnZSh0KTtpZihuLnJldmVyc2VkKXtlLnJlbW92ZUVkZ2UodCk7dmFyIGk9bi5mb3J3YXJkTmFtZTtkZWxldGUgbi5yZXZlcnNlZCxkZWxldGUgbi5mb3J3YXJkTmFtZSxlLnNldEVkZ2UodC53LHQudixuLGkpfX0pKX0pKGUpfSkpfSkoZSxuKX0pKSxuKCIgIHVwZGF0ZUlucHV0R3JhcGgiLChmdW5jdGlvbigpeyEoZnVuY3Rpb24gbih0LGUpe2FUdC5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24obil7dmFyIGk9dC5ub2RlKG4pLHI9ZS5ub2RlKG4pO2kmJihpLng9ci54LGkueT1yLnksZS5jaGlsZHJlbihuKS5sZW5ndGgmJihpLndpZHRoPXIud2lkdGgsaS5oZWlnaHQ9ci5oZWlnaHQpKX0pKSxhVHQuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKG4pe3ZhciBpPXQuZWRnZShuKSxyPWUuZWRnZShuKTtpLnBvaW50cz1yLnBvaW50cyxhVHQuaGFzKHIsIngiKSYmKGkueD1yLngsaS55PXIueSl9KSksdC5ncmFwaCgpLndpZHRoPWUuZ3JhcGgoKS53aWR0aCx0LmdyYXBoKCkuaGVpZ2h0PWUuZ3JhcGgoKS5oZWlnaHR9KSh0LGUpfSkpfSkpfSxkZWJ1Zzp7ZGVidWdPcmRlcmluZzpmdW5jdGlvbiBxQ3QodCl7dmFyIGU9Z1R0LmJ1aWxkTGF5ZXJNYXRyaXgodCksbj1uZXcgakN0KHtjb21wb3VuZDohMCxtdWx0aWdyYXBoOiEwfSkuc2V0R3JhcGgoe30pO3JldHVybiBhVHQuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe24uc2V0Tm9kZShlLHtsYWJlbDplfSksbi5zZXRQYXJlbnQoZSwibGF5ZXIiK3Qubm9kZShlKS5yYW5rKX0pKSxhVHQuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKHQpe24uc2V0RWRnZSh0LnYsdC53LHt9LHQubmFtZSl9KSksYVR0LmZvckVhY2goZSwoZnVuY3Rpb24odCxlKXtuLnNldE5vZGUoImxheWVyIitlLHtyYW5rOiJzYW1lIn0pLGFUdC5yZWR1Y2UodCwoZnVuY3Rpb24odCxlKXtyZXR1cm4gbi5zZXRFZGdlKHQsZSx7c3R5bGU6ImludmlzIn0pLGV9KSl9KSksbn19LHV0aWw6e3RpbWU6Z1R0LnRpbWUsbm90aW1lOmdUdC5ub3RpbWV9LHZlcnNpb246IjAuOC41In07IShmdW5jdGlvbih0KXt0LkZFVENIX1BCVFhUX0JZVEVTPSJGRVRDSF9QQlRYVF9CWVRFUyIsdC5GRVRDSF9QQlRYVF9CWVRFU19GUk9NX0ZJTEVTWVNURU09IkZFVENIX1BCVFhUX0JZVEVTX0ZST01fRklMRVNZU1RFTSIsdC5GRVRDSF9QQlRYVF9CWVRFU19GUk9NX1NFUlZFUj0iRkVUQ0hfUEJUWFRfQllURVNfRlJPTV9TRVJWRVIiLHQuUEFSU0VfUEJUWFRfSU5UT19PQkpFQ1Q9IlBBUlNFX1BCVFhUX0lOVE9fT0JKRUNUIix0LkZFVENIX01FVEFEQVRBX1BCVFhUX0JZVEVTPSJGRVRDSF9NRVRBREFUQV9QQlRYVF9CWVRFUyIsdC5QQVJTRV9NRVRBREFUQV9QQlRYVF9JTlRPX09CSkVDVD0iUEFSU0VfTUVUQURBVEFfUEJUWFRfSU5UT19PQkpFQ1QiLHQuTk9STUFMSVpJTkdfTkFNRVM9Ik5PUk1BTElaSU5HX05BTUVTIix0LkJVSUxEX1NMSU1fR1JBUEg9IkJVSUxEX1NMSU1fR1JBUEgiLHQuSElFUkFSQ0hZX0FERF9OT0RFUz0iSElFUkFSQ0hZX0FERF9OT0RFUyIsdC5ISUVSQVJDSFlfREVURUNUX1NFUklFUz0iSElFUkFSQ0hZX0RFVEVDVF9TRVJJRVMiLHQuSElFUkFSQ0hZX0FERF9FREdFUz0iSElFUkFSQ0hZX0FERF9FREdFUyIsdC5ISUVSQVJDSFlfRklORF9TSU1JTEFSX1NVQkdSQVBIUz0iSElFUkFSQ0hZX0ZJTkRfU0lNSUxBUl9TVUJHUkFQSFMiLHQuUkVOREVSX0JVSUxEX0hJRVJBUkNIWT0iUkVOREVSX0JVSUxEX0hJRVJBUkNIWSIsdC5SRU5ERVJfU0NFTkVfTEFZT1VUPSJSRU5ERVJfU0NFTkVfTEFZT1VUIix0LlJFTkRFUl9TQ0VORV9CVUlMRF9TQ0VORT0iUkVOREVSX1NDRU5FX0JVSUxEX1NDRU5FIix0LkdSQVBIX0xPQURfU1VDQ0VFREVEPSJHUkFQSF9MT0FEX1NVQ0NFRURFRCIsdC5HUkFQSF9MT0FEX0ZBSUxFRD0iR1JBUEhfTE9BRF9GQUlMRUQifSkoVkN0fHwoVkN0PXt9KSksKGZ1bmN0aW9uKHQpe3QuTk9ERV9FWFBBTlNJT05fVE9HR0xFRD0iTk9ERV9FWFBBTlNJT05fVE9HR0xFRCIsdC5OT0RFX1NFQVJDSF9SRVNVTFRfRk9DVVNFRD0iTk9ERV9TRUFSQ0hfUkVTVUxUX0ZPQ1VTRUQiLHQuTk9ERV9BVVhJTElBUllfRVhUUkFDVElPTl9DSEFOR0VEPSJOT0RFX0FVWElMSUFSWV9FWFRSQUNUSU9OX0NIQU5HRUQiLHQuR1JBUEhfVFlQRV9DSEFOR0VEPSJHUkFQSF9UWVBFX0NIQU5HRUQiLHQuVFJBQ0VfSU5QVVRfTU9ERV9UT0dHTEVEPSJUUkFDRV9JTlBVVF9NT0RFX1RPR0dMRUQiLHQuTk9ERV9DT0xPUl9NT0RFX0NIQU5HRUQ9Ik5PREVfQ09MT1JfTU9ERV9DSEFOR0VEIix0LlVQTE9BREVEX0dSQVBIX0ZST01fRklMRVNZU1RFTT0iVVBMT0FERURfR1JBUEhfRlJPTV9GSUxFU1lTVEVNIn0pKFVDdHx8KFVDdD17fSkpO2NvbnN0IFlDdD1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sVkN0KSxVQ3QpO3ZhciBYQ3Q7IShmdW5jdGlvbih0KXt0Lk9QX0dSQVBIPSJvcF9ncmFwaCIsdC5DT05DRVBUVUFMX0dSQVBIPSJjb25jZXB0dWFsX2dyYXBoIix0LlBST0ZJTEU9InByb2ZpbGUifSkoWEN0fHwoWEN0PXt9KSk7bGV0ICRDdD17Tm9kZTp7Q09OVEFJTkVSOiJub2RlcyIsR1JPVVA6Im5vZGUiLFNIQVBFOiJub2Rlc2hhcGUiLENPTE9SX1RBUkdFVDoibm9kZWNvbG9ydGFyZ2V0IixMQUJFTDoibm9kZWxhYmVsIixCVVRUT05fQ09OVEFJTkVSOiJidXR0b25jb250YWluZXIiLEJVVFRPTl9DSVJDTEU6ImJ1dHRvbmNpcmNsZSIsRVhQQU5EX0JVVFRPTjoiZXhwYW5kYnV0dG9uIixDT0xMQVBTRV9CVVRUT046ImNvbGxhcHNlYnV0dG9uIn0sRWRnZTp7Q09OVEFJTkVSOiJlZGdlcyIsR1JPVVA6ImVkZ2UiLExJTkU6ImVkZ2VsaW5lIixSRUZFUkVOQ0VfRURHRToicmVmZXJlbmNlZWRnZSIsUkVGX0xJTkU6InJlZmxpbmUiLFNFTEVDVEFCTEU6InNlbGVjdGFibGVlZGdlIixTRUxFQ1RFRDoic2VsZWN0ZWRlZGdlIixTVFJVQ1RVUkFMOiJzdHJ1Y3R1cmFsIn0sQW5ub3RhdGlvbjp7T1VUQk9YOiJvdXQtYW5ub3RhdGlvbnMiLElOQk9YOiJpbi1hbm5vdGF0aW9ucyIsR1JPVVA6ImFubm90YXRpb24iLE5PREU6ImFubm90YXRpb24tbm9kZSIsRURHRToiYW5ub3RhdGlvbi1lZGdlIixDT05UUk9MX0VER0U6ImFubm90YXRpb24tY29udHJvbC1lZGdlIixMQUJFTDoiYW5ub3RhdGlvbi1sYWJlbCIsRUxMSVBTSVM6ImFubm90YXRpb24tZWxsaXBzaXMifSxTY2VuZTp7R1JPVVA6InNjZW5lIixDT1JFOiJjb3JlIixGVU5DVElPTl9MSUJSQVJZOiJmdW5jdGlvbi1saWJyYXJ5IixJTkVYVFJBQ1Q6ImluLWV4dHJhY3QiLE9VVEVYVFJBQ1Q6Im91dC1leHRyYWN0In0sU3Vic2NlbmU6e0dST1VQOiJzdWJzY2VuZSJ9LE9QTk9ERToib3AiLE1FVEFOT0RFOiJtZXRhIixTRVJJRVNOT0RFOiJzZXJpZXMiLEJSSURHRU5PREU6ImJyaWRnZSIsRUxMSVBTSVNOT0RFOiJlbGxpcHNpcyJ9O2NvbnN0IEtDdD0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciO2Z1bmN0aW9uIFpDdCh0LGUsbil7bGV0IGk9dC5ub2RlKCkuY2hpbGROb2Rlcztmb3IobGV0IHQ9MDt0PGkubGVuZ3RoO3QrKyl7bGV0IHI9aVt0XTtpZihyLnRhZ05hbWU9PT1lKWlmKG4gaW5zdGFuY2VvZiBBcnJheSl7bGV0IHQ9ITA7Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspdD10JiZyLmNsYXNzTGlzdC5jb250YWlucyhuW2VdKTtpZih0KXJldHVybiB3dShyKX1lbHNlIGlmKCFufHxyLmNsYXNzTGlzdC5jb250YWlucyhuKSlyZXR1cm4gd3Uocil9cmV0dXJuIHd1KG51bGwpfWZ1bmN0aW9uIEpDdCh0LGUsbixpKXtsZXQgcj1aQ3QodCxlLG4pO2lmKCFyLmVtcHR5KCkpcmV0dXJuIHI7bGV0IG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsZSk7aWYobiBpbnN0YW5jZW9mIEFycmF5KWZvcihsZXQgdD0wO3Q8bi5sZW5ndGg7dCsrKW8uY2xhc3NMaXN0LmFkZChuW3RdKTtlbHNlIG8uY2xhc3NMaXN0LmFkZChuKTtyZXR1cm4gaT90Lm5vZGUoKS5pbnNlcnRCZWZvcmUobyxpKTp0Lm5vZGUoKS5hcHBlbmRDaGlsZChvKSx3dShvKS5kYXR1bSh0LmRhdHVtKCkpfWNsYXNzIFFDdHtjb25zdHJ1Y3Rvcih0KXt0aGlzLnRvdGFsQnl0ZXM9MCx0aGlzLm91dHB1dFNpemU9dH1hZGRFeGVjdXRpb25UaW1lKHQsZSl7dGhpcy5zdGFydFRpbWU9bnVsbCE9dGhpcy5zdGFydFRpbWU/TWF0aC5taW4odGhpcy5zdGFydFRpbWUsdCk6dCx0aGlzLmVuZFRpbWU9bnVsbCE9dGhpcy5lbmRUaW1lP01hdGgubWF4KHRoaXMuZW5kVGltZSxlKTplfWFkZEJ5dGVzQWxsb2NhdGlvbih0KXt0aGlzLnRvdGFsQnl0ZXM9bnVsbCE9dGhpcy50b3RhbEJ5dGVzP01hdGgubWF4KHRoaXMudG90YWxCeXRlcyx0KTp0fWNvbWJpbmUodCl7bnVsbCE9dC50b3RhbEJ5dGVzJiYodGhpcy50b3RhbEJ5dGVzKz10LnRvdGFsQnl0ZXMpLG51bGwhPXQuZ2V0VG90YWxNaWNyb3MoKSYmdGhpcy5hZGRFeGVjdXRpb25UaW1lKHQuc3RhcnRUaW1lLHQuZW5kVGltZSl9Z2V0VG90YWxNaWNyb3MoKXtyZXR1cm4gbnVsbD09dGhpcy5zdGFydFRpbWV8fG51bGw9PXRoaXMuZW5kVGltZT9udWxsOnRoaXMuZW5kVGltZS10aGlzLnN0YXJ0VGltZX19Y29uc3QgdEF0PS43NSxlQXQ9dEUoKS5leHBvbmVudCguMykuZG9tYWluKFsxLDVlNl0pLnJhbmdlKFt0QXQsMTJdKS5jbGFtcCghMCk7ZnVuY3Rpb24gbkF0KHQpeyEoZnVuY3Rpb24gZSh0KXt0Lmhhc093blByb3BlcnR5KCJ0aW1pbmdJZCIpfSkodCl9ZnVuY3Rpb24gaUF0KHQsZSxuKXtsZXQgaT1EYXRlLm5vdygpLHI9ZSgpO2NvbnN0IG89RGF0ZS5ub3coKS1pO3JldHVybiBjb25zb2xlLmxvZyh0LCI6IixvLCJtcyIpLG4mJm5BdCh7dGltaW5nSWQ6bixldmVudFZhbHVlOm99KSxyfWZ1bmN0aW9uIHJBdCh0KXtyZXR1cm57c2V0TWVzc2FnZTpmdW5jdGlvbihlKXt0LnNldCgicHJvZ3Jlc3MiLHt2YWx1ZTp0LnByb2dyZXNzLnZhbHVlLG1zZzplfSl9LHVwZGF0ZVByb2dyZXNzOmZ1bmN0aW9uKGUpe3Quc2V0KCJwcm9ncmVzcyIse3ZhbHVlOnQucHJvZ3Jlc3MudmFsdWUrZSxtc2c6dC5wcm9ncmVzcy5tc2d9KX0scmVwb3J0RXJyb3I6ZnVuY3Rpb24oZSxuKXtjb25zb2xlLmVycm9yKG4uc3RhY2spLHQuc2V0KCJwcm9ncmVzcyIse3ZhbHVlOnQucHJvZ3Jlc3MudmFsdWUsbXNnOmUsZXJyb3I6ITB9KX19fWZ1bmN0aW9uIG9BdCh0LGUsbil7cmV0dXJue3NldE1lc3NhZ2U6ZnVuY3Rpb24oZSl7dC5zZXRNZXNzYWdlKG4rIjogIitlKX0sdXBkYXRlUHJvZ3Jlc3M6ZnVuY3Rpb24obil7dC51cGRhdGVQcm9ncmVzcyhuKmUvMTAwKX0scmVwb3J0RXJyb3I6ZnVuY3Rpb24oZSxpKXt0LnJlcG9ydEVycm9yKG4rIjogIitlLGkpfX19ZnVuY3Rpb24gYUF0KHQsZSxuLGkscil7cmV0dXJuIG5ldyBQcm9taXNlKCgobyxhKT0+e2kuc2V0TWVzc2FnZSh0KSxzZXRUaW1lb3V0KChmdW5jdGlvbigpe3RyeXtsZXQgYT1pQXQodCxuLHIpO2kudXBkYXRlUHJvZ3Jlc3MoZSksbyhhKX1jYXRjaChlKXtpLnJlcG9ydEVycm9yKCJGYWlsZWQgIit0LGUpfX0pLDIwKX0pKX1mdW5jdGlvbiBzQXQodCxlLG4saSxyKXtyZXR1cm4gbmV3IFByb21pc2UoKChvLGEpPT57bGV0IHM9ZnVuY3Rpb24oZSl7aS5yZXBvcnRFcnJvcigiRmFpbGVkICIrdCxlKSxhKGUpfTtpLnNldE1lc3NhZ2UodCksc2V0VGltZW91dCgoZnVuY3Rpb24oKXt0cnl7bGV0IGE9RGF0ZS5ub3coKTtuKCkudGhlbigoZnVuY3Rpb24obil7Y29uc3Qgcz1EYXRlLm5vdygpLWE7Y29uc29sZS5sb2codCwiOiIscywibXMiKSxpLnVwZGF0ZVByb2dyZXNzKGUpLG5BdCh7dGltaW5nSWQ6cixldmVudFZhbHVlOnN9KSxvKG4pfSkpLmNhdGNoKHMpfWNhdGNoKHQpe3ModCl9fSksMjApfSkpfWNvbnN0IGxBdD1be3N5bWJvbDoiQiJ9LHtzeW1ib2w6IktCIixudW1Vbml0czoxMDI0fSx7c3ltYm9sOiJNQiIsbnVtVW5pdHM6MTAyNH0se3N5bWJvbDoiR0IiLG51bVVuaXRzOjEwMjR9LHtzeW1ib2w6IlRCIixudW1Vbml0czoxMDI0fSx7c3ltYm9sOiJQQiIsbnVtVW5pdHM6MTAyNH1dLGNBdD1be3N5bWJvbDoiwrVzIn0se3N5bWJvbDoibXMiLG51bVVuaXRzOjFlM30se3N5bWJvbDoicyIsbnVtVW5pdHM6MWUzfSx7c3ltYm9sOiJtaW4iLG51bVVuaXRzOjYwfSx7c3ltYm9sOiJociIsbnVtVW5pdHM6NjB9LHtzeW1ib2w6ImRheXMiLG51bVVuaXRzOjI0fV07ZnVuY3Rpb24gdUF0KHQsZSxuPTApe3JldHVybiBuKzE8ZS5sZW5ndGgmJnQ+PWVbbisxXS5udW1Vbml0cz91QXQodC9lW24rMV0ubnVtVW5pdHMsZSxuKzEpOk51bWJlcih0LnRvUHJlY2lzaW9uKDMpKSsiICIrZVtuXS5zeW1ib2x9ZnVuY3Rpb24gaEF0KHQpe3JldHVybiEoIXR8fCEodC50b3RhbEJ5dGVzPjB8fHQuZ2V0VG90YWxNaWNyb3MoKT4wfHx0Lm91dHB1dFNpemUpKX1mdW5jdGlvbiBkQXQodCl7aWYodC5sZW5ndGg8MilyZXR1cm4gdDtsZXQgZT0wLG49MCxpPXdlLm1pbih3ZS5tYXAodCwodD0+dC5sZW5ndGgpKSk7Zm9yKDs7KXtlKys7bGV0IHI9d2UubWFwKHQsKHQ9PnQuc3Vic3RyaW5nKDAsZSkpKTtpZighci5ldmVyeSgoKHQsZSk9PjA9PT1lfHx0PT09cltlLTFdKSkpYnJlYWs7aWYoZT49aSlyZXR1cm4gdDtuPWV9cmV0dXJuIHdlLm1hcCh0LCh0PT50LnN1YnN0cmluZyhuKSkpfWNvbnN0IHBBdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKS5nZXRDb250ZXh0KCIyZCIpO2Z1bmN0aW9uIGZBdCh0LGUpe3JldHVybiBwQXQuZm9udD1gJHtlfXB4IFJvYm90bywgc2Fucy1zZXJpZmAscEF0Lm1lYXN1cmVUZXh0KHQpLndpZHRofWNvbnN0IG1BdD0iLyIsZ0F0PSJfX3Jvb3RfXyIsX0F0PSJfX2Z1bmN0aW9uX2xpYnJhcnlfXyI7dmFyIHlBdCx2QXQsYkF0LHhBdDshKGZ1bmN0aW9uKHQpe3RbdC5GVUxMPTBdPSJGVUxMIix0W3QuRU1CRURERUQ9MV09IkVNQkVEREVEIix0W3QuTUVUQT0yXT0iTUVUQSIsdFt0LlNFUklFUz0zXT0iU0VSSUVTIix0W3QuQ09SRT00XT0iQ09SRSIsdFt0LlNIQURPVz01XT0iU0hBRE9XIix0W3QuQlJJREdFPTZdPSJCUklER0UiLHRbdC5FREdFPTddPSJFREdFIn0pKHlBdHx8KHlBdD17fSkpLChmdW5jdGlvbih0KXt0W3QuTUVUQT0wXT0iTUVUQSIsdFt0Lk9QPTFdPSJPUCIsdFt0LlNFUklFUz0yXT0iU0VSSUVTIix0W3QuQlJJREdFPTNdPSJCUklER0UiLHRbdC5FTExJUFNJUz00XT0iRUxMSVBTSVMifSkodkF0fHwodkF0PXt9KSksKGZ1bmN0aW9uKHQpe3RbdC5JTkNMVURFPTBdPSJJTkNMVURFIix0W3QuRVhDTFVERT0xXT0iRVhDTFVERSIsdFt0LlVOU1BFQ0lGSUVEPTJdPSJVTlNQRUNJRklFRCJ9KShiQXR8fChiQXQ9e30pKSwoZnVuY3Rpb24odCl7dFt0LkdST1VQPTBdPSJHUk9VUCIsdFt0LlVOR1JPVVA9MV09IlVOR1JPVVAifSkoeEF0fHwoeEF0PXt9KSk7Y2xhc3Mgd0F0e2NvbnN0cnVjdG9yKCl7dGhpcy5ub2Rlcz17fSx0aGlzLmVkZ2VzPVtdfX1jbGFzcyBTQXR7Y29uc3RydWN0b3IodCl7dGhpcy50eXBlPXZBdC5FTExJUFNJUyx0aGlzLmlzR3JvdXBOb2RlPSExLHRoaXMuY2FyZGluYWxpdHk9MSx0aGlzLnBhcmVudE5vZGU9bnVsbCx0aGlzLnN0YXRzPW51bGwsdGhpcy5zZXROdW1Nb3JlTm9kZXModCksdGhpcy5pbmNsdWRlPWJBdC5VTlNQRUNJRklFRH1zZXROdW1Nb3JlTm9kZXModCl7dGhpcy5udW1Nb3JlTm9kZXM9dCx0aGlzLm5hbWU9Ii4uLiAiK3QrIiBtb3JlIn19Y2xhc3MgTUF0e2NvbnN0cnVjdG9yKHQpe3RoaXMub3A9dC5vcCx0aGlzLm5hbWU9dC5uYW1lLHRoaXMuZGV2aWNlPXQuZGV2aWNlLHRoaXMuYXR0cj10LmF0dHIsdGhpcy5pbnB1dHM9KGZ1bmN0aW9uIGUodCl7Y29uc3QgZT1bXTtsZXQgbj1udWxsO2ZvcihsZXQgaSBvZiB0fHxbXSl7Y29uc3QgdD1pLnN0YXJ0c1dpdGgoIl4iKTt0JiYoaT1pLnN1YnN0cmluZygxKSk7bGV0IHI9aSxvPSIwIjtjb25zdCBhPWkuaW5jbHVkZXMoIjoiKSYmaS5tYXRjaChOQXQpO2EmJihyPWFbMV0sbz1hWzJdKSxuIT09ciYmKG49cixlLnB1c2goe25hbWU6cixvdXRwdXRUZW5zb3JLZXk6byxpc0NvbnRyb2xEZXBlbmRlbmN5OnR9KSl9cmV0dXJuIGV9KSh0LmlucHV0KSx0aGlzLm91dHB1dFNoYXBlcz0oZnVuY3Rpb24gbih0KXtpZighdClyZXR1cm4gbnVsbDtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKyl7bGV0e2tleTpuLHZhbHVlOml9PXRbZV07aWYoIl9vdXRwdXRfc2hhcGVzIj09PW4pe2lmKCFpLmxpc3R8fCFpLmxpc3Quc2hhcGUpcmV0dXJuIG51bGw7bGV0IG49aS5saXN0LnNoYXBlLm1hcCgodD0+dC51bmtub3duX3Jhbms/bnVsbDpudWxsPT10LmRpbXx8MT09PXQuZGltLmxlbmd0aCYmbnVsbD09dC5kaW1bMF0uc2l6ZT9bXTp0LmRpbS5tYXAoKHQ9PnQuc2l6ZSkpKSk7cmV0dXJuIHQuc3BsaWNlKGUsMSksbn19cmV0dXJuIG51bGx9KSh0LmF0dHIpLHRoaXMueGxhQ2x1c3Rlcj0oZnVuY3Rpb24gaSh0KXtpZighdClyZXR1cm4gbnVsbDtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKylpZigiX1hsYUNsdXN0ZXIiPT09dFtlXS5rZXkpcmV0dXJuIHRbZV0udmFsdWUuc3x8bnVsbDtyZXR1cm4gbnVsbH0pKHQuYXR0ciksdGhpcy5jb21wYXRpYmxlPSExLHRoaXMudHlwZT12QXQuT1AsdGhpcy5pc0dyb3VwTm9kZT0hMSx0aGlzLmNhcmRpbmFsaXR5PTEsdGhpcy5pbkVtYmVkZGluZ3M9W10sdGhpcy5vdXRFbWJlZGRpbmdzPVtdLHRoaXMucGFyZW50Tm9kZT1udWxsLHRoaXMuaW5jbHVkZT1iQXQuVU5TUEVDSUZJRUQsdGhpcy5vd25pbmdTZXJpZXM9bnVsbH19ZnVuY3Rpb24gRUF0KHQsZT17fSl7cmV0dXJuIG5ldyBUQXQodCxlKX1jbGFzcyBUQXR7Y29uc3RydWN0b3IodCxlPXt9KXt0aGlzLm5hbWU9dCx0aGlzLnR5cGU9dkF0Lk1FVEEsdGhpcy5kZXB0aD0xLHRoaXMuaXNHcm91cE5vZGU9ITAsdGhpcy5jYXJkaW5hbGl0eT0wLHRoaXMubWV0YWdyYXBoPVJBdCh0LHlBdC5NRVRBLGUpLHRoaXMuYnJpZGdlZ3JhcGg9bnVsbCx0aGlzLm9wSGlzdG9ncmFtPXt9LHRoaXMuZGV2aWNlSGlzdG9ncmFtPXt9LHRoaXMueGxhQ2x1c3Rlckhpc3RvZ3JhbT17fSx0aGlzLmNvbXBhdGliaWxpdHlIaXN0b2dyYW09e2NvbXBhdGlibGU6MCxpbmNvbXBhdGlibGU6MH0sdGhpcy50ZW1wbGF0ZUlkPW51bGwsdGhpcy5wYXJlbnROb2RlPW51bGwsdGhpcy5oYXNOb25Db250cm9sRWRnZXM9ITEsdGhpcy5pbmNsdWRlPWJBdC5VTlNQRUNJRklFRCx0aGlzLmFzc29jaWF0ZWRGdW5jdGlvbj0iIn1nZXRGaXJzdENoaWxkKCl7cmV0dXJuIHRoaXMubWV0YWdyYXBoLm5vZGUodGhpcy5tZXRhZ3JhcGgubm9kZXMoKVswXSl9Z2V0Um9vdE9wKCl7bGV0IHQ9dGhpcy5uYW1lLnNwbGl0KCIvIik7cmV0dXJuIHRoaXMubWV0YWdyYXBoLm5vZGUodGhpcy5uYW1lKyIvKCIrdFt0Lmxlbmd0aC0xXSsiKSIpfWxlYXZlcygpe2xldCB0LGU9W10sbj1bdGhpc107Zm9yKDtuLmxlbmd0aDspe2xldCBpPW4uc2hpZnQoKTtpLmlzR3JvdXBOb2RlPyh0PWkubWV0YWdyYXBoLHdlLmVhY2godC5ub2RlcygpLChlPT5uLnB1c2godC5ub2RlKGUpKSkpKTplLnB1c2goaS5uYW1lKX1yZXR1cm4gZX19ZnVuY3Rpb24gQ0F0KHQsZSl7cmV0dXJuIG5ldyBBQXQodCxlKX1jbGFzcyBBQXR7Y29uc3RydWN0b3IodCxlKXt0aGlzLnY9dCx0aGlzLnc9ZSx0aGlzLmJhc2VFZGdlTGlzdD1bXSx0aGlzLmluYm91bmQ9bnVsbCx0aGlzLm51bVJlZ3VsYXJFZGdlcz0wLHRoaXMubnVtQ29udHJvbEVkZ2VzPTAsdGhpcy5udW1SZWZFZGdlcz0wLHRoaXMudG90YWxTaXplPTB9YWRkQmFzZUVkZ2UodCxlKXt0aGlzLmJhc2VFZGdlTGlzdC5wdXNoKHQpLHQuaXNDb250cm9sRGVwZW5kZW5jeT90aGlzLm51bUNvbnRyb2xFZGdlcys9MTp0aGlzLm51bVJlZ3VsYXJFZGdlcys9MSx0LmlzUmVmZXJlbmNlRWRnZSYmKHRoaXMubnVtUmVmRWRnZXMrPTEpLHRoaXMudG90YWxTaXplKz1BQXQuY29tcHV0ZVNpemVPZkVkZ2UodCxlKSxlLm1heE1ldGFFZGdlU2l6ZT1NYXRoLm1heChlLm1heE1ldGFFZGdlU2l6ZSx0aGlzLnRvdGFsU2l6ZSl9c3RhdGljIGNvbXB1dGVTaXplT2ZFZGdlKHQsZSl7bGV0IG49ZS5ub2RlKHQudik7aWYoIW4ub3V0cHV0U2hhcGVzKXJldHVybiAxO2UuaGFzU2hhcGVJbmZvPSEwO2NvbnN0IGk9T2JqZWN0LmtleXMobi5vdXRwdXRTaGFwZXMpLm1hcCgodD0+bi5vdXRwdXRTaGFwZXNbdF0pKS5tYXAoKHQ9Pm51bGw9PXQ/MTp0LnJlZHVjZSgoKHQsZSk9PigtMT09PWUmJihlPTEpLHQqZSkpLDEpKSk7cmV0dXJuIHdlLnN1bShpKX19ZnVuY3Rpb24ga0F0KHQsZSxuLGkscixvKXtyZXR1cm4gbmV3IFBBdCh0LGUsbixpLHIsbyl9ZnVuY3Rpb24gTEF0KHQsZSxuLGkscil7cmV0dXJuKG4/bisiLyI6IiIpK3QrKHZvaWQgMCE9PWkmJnZvaWQgMCE9PXI/IlsiK2krIi0iK3IrIl0iOiIjIikrZX1jbGFzcyBQQXR7Y29uc3RydWN0b3IodCxlLG4saSxyLG8pe3RoaXMubmFtZT1yfHxMQXQodCxlLG4pLHRoaXMudHlwZT12QXQuU0VSSUVTLHRoaXMuaGFzTG9vcD0hMSx0aGlzLnByZWZpeD10LHRoaXMuc3VmZml4PWUsdGhpcy5jbHVzdGVySWQ9aSx0aGlzLmlkcz1bXSx0aGlzLnBhcmVudD1uLHRoaXMuaXNHcm91cE5vZGU9ITAsdGhpcy5jYXJkaW5hbGl0eT0wLHRoaXMubWV0YWdyYXBoPVJBdChyLHlBdC5TRVJJRVMsbyksdGhpcy5icmlkZ2VncmFwaD1udWxsLHRoaXMucGFyZW50Tm9kZT1udWxsLHRoaXMuZGV2aWNlSGlzdG9ncmFtPXt9LHRoaXMueGxhQ2x1c3Rlckhpc3RvZ3JhbT17fSx0aGlzLmNvbXBhdGliaWxpdHlIaXN0b2dyYW09e2NvbXBhdGlibGU6MCxpbmNvbXBhdGlibGU6MH0sdGhpcy5oYXNOb25Db250cm9sRWRnZXM9ITEsdGhpcy5pbmNsdWRlPWJBdC5VTlNQRUNJRklFRH19Y29uc3QgTkF0PS9eKFteOl0rKTooKFx3Kzp8KVxkKykkLztmdW5jdGlvbiBJQXQodCxlLG4saSxyLG8pe2UhPT1uLm5hbWUmJnQuZWRnZXMucHVzaCh7djplLHc6bi5uYW1lLG91dHB1dFRlbnNvcktleTppLm91dHB1dFRlbnNvcktleSxpc0NvbnRyb2xEZXBlbmRlbmN5OmkuaXNDb250cm9sRGVwZW5kZW5jeSxpc1JlZmVyZW5jZUVkZ2U6ITA9PT1yLnJlZkVkZ2VzW24ub3ArIiAiK29dfSl9Y29uc3QgT0F0PXtlbmFibGVFbWJlZGRpbmc6ITAsaW5FbWJlZGRpbmdUeXBlczpbIkNvbnN0Il0sb3V0RW1iZWRkaW5nVHlwZXM6WyJeW2EtekEtWl0rU3VtbWFyeSQiXSxyZWZFZGdlczp7IkFzc2lnbiAwIjohMCwiQXNzaWduQWRkIDAiOiEwLCJBc3NpZ25TdWIgMCI6ITAsImFzc2lnbiAwIjohMCwiYXNzaWduX2FkZCAwIjohMCwiYXNzaWduX3N1YiAwIjohMCwiY291bnRfdXBfdG8gMCI6ITAsIlNjYXR0ZXJBZGQgMCI6ITAsIlNjYXR0ZXJTdWIgMCI6ITAsIlNjYXR0ZXJVcGRhdGUgMCI6ITAsInNjYXR0ZXJfYWRkIDAiOiEwLCJzY2F0dGVyX3N1YiAwIjohMCwic2NhdHRlcl91cGRhdGUgMCI6ITB9fTtmdW5jdGlvbiBSQXQodCxlLG49e30pe2NvbnN0IGk9bmV3IEdDdC5ncmFwaGxpYi5HcmFwaChuKTtyZXR1cm4gaS5zZXRHcmFwaCh7bmFtZTp0LHJhbmtkaXI6bi5yYW5rZGlyfHwiQlQiLHR5cGU6ZX0pLGl9ZnVuY3Rpb24gekF0KHQpe3JldHVybiBmdW5jdGlvbihlKXtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKyl7bGV0IGk9bmV3IFJlZ0V4cCh0W25dKTtpZigic3RyaW5nIj09dHlwZW9mIGUub3AmJmUub3AubWF0Y2goaSkpcmV0dXJuITB9cmV0dXJuITF9fWZ1bmN0aW9uIERBdCh0KXtsZXQgZT10LnNwbGl0KG1BdCk7cmV0dXJuIHQrbUF0KyIoIitlW2UubGVuZ3RoLTFdKyIpIn1mdW5jdGlvbiBCQXQodCl7bGV0IGU9dC5ub2RlcygpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHQubmVpZ2hib3JzKGUpLmxlbmd0aH0pKTtyZXR1cm4gZS5zb3J0KCksZX1mdW5jdGlvbiBIQXQodCxlKXtsZXQgbj1bXSxpPXQuaW5kZXhPZihtQXQpO2Zvcig7aT49MDspbi5wdXNoKHQuc3Vic3RyaW5nKDAsaSkpLGk9dC5pbmRleE9mKG1BdCxpKzEpO2lmKGUpe2xldCBpPWVbdF07aSYmbi5wdXNoKGkpfXJldHVybiBuLnB1c2godCksbn1mdW5jdGlvbiBGQXQodCl7cmV0dXJuIHQ9PT1iQXQuRVhDTFVERT8iQWRkIHRvIG1haW4gZ3JhcGgiOiJSZW1vdmUgZnJvbSBtYWluIGdyYXBoIn1sZXQgVkF0PSIjMGY5ZDU4IixVQXQ9IiNkYjQ0MzciLGpBdD17REVGQVVMVF9GSUxMOiIjZDlkOWQ5IixERUZBVUxUX1NUUk9LRToiI2E2YTZhNiIsU0FUVVJBVElPTjouNixMSUdIVE5FU1M6Ljg1LEVYUEFOREVEX0NPTE9SOiIjZjBmMGYwIixIVUVTOlsyMjAsMTAwLDE4MCw0MCwyMCwzNDAsMjYwLDMwMCwxNDAsNjBdLFNUUlVDVFVSRV9QQUxFVFRFKHQsZSl7bGV0IG49akF0LkhVRVMsaT1uW3Qlbi5sZW5ndGhdLHI9TWF0aC5zaW4oaSpNYXRoLlBJLzM2MCk7cmV0dXJuIFhoKGksLjAxKihlPzMwOjkwLTYwKnIpLC4wMSooZT85NTo4MCkpLnRvU3RyaW5nKCl9LERFVklDRV9QQUxFVFRFOnQ9PmpBdC5TVFJVQ1RVUkVfUEFMRVRURSh0KSxYTEFfQ0xVU1RFUl9QQUxFVFRFOnQ9PmpBdC5TVFJVQ1RVUkVfUEFMRVRURSh0KSxVTktOT1dOOiIjZWVlIixHUkFESUVOVF9PVVRMSU5FOiIjODg4In07Y29uc3QgR0F0PVsiTm9PcCJdLFdBdD1bXSxxQXQ9WyIjZmZmNWYwIiwiI2ZiNmE0YSJdLFlBdD1uZXcgUmVnRXhwKCJeKD86X19mdW5jdGlvbl9saWJyYXJ5X18pPyhcXHcrKV9bYS16MC05XXs4fSg/Ol9cXGQrKT8kIik7Y2xhc3MgWEF0e2NvbnN0cnVjdG9yKHQsZSxuKXt0aGlzLmhpZXJhcmNoeT10LHRoaXMuZGlzcGxheWluZ1N0YXRzPWUsdGhpcy5hdXRvRXh0cmFjdE5vZGVzPW4sdGhpcy5pbmRleD17fSx0aGlzLnJlbmRlcmVkT3BOYW1lcz1bXSx0aGlzLmNvbXB1dGVTY2FsZXMoKSx0aGlzLmhhc1N1YmhpZXJhcmNoeT17fSx0aGlzLnJvb3Q9bmV3IG5rdCh0LnJvb3QsdC5ncmFwaE9wdGlvbnMpLHRoaXMuaW5kZXhbdC5yb290Lm5hbWVdPXRoaXMucm9vdCx0aGlzLnJlbmRlcmVkT3BOYW1lcy5wdXNoKHQucm9vdC5uYW1lKSx0aGlzLmJ1aWxkU3ViaGllcmFyY2h5KHQucm9vdC5uYW1lKSx0aGlzLnJvb3QuZXhwYW5kZWQ9ITAsdGhpcy50cmFjZUlucHV0cz0hMX1jb21wdXRlU2NhbGVzKCl7dGhpcy5kZXZpY2VDb2xvck1hcD14TSgpLmRvbWFpbih0aGlzLmhpZXJhcmNoeS5kZXZpY2VzKS5yYW5nZSh3ZS5tYXAoUmwodGhpcy5oaWVyYXJjaHkuZGV2aWNlcy5sZW5ndGgpLGpBdC5ERVZJQ0VfUEFMRVRURSkpLHRoaXMueGxhQ2x1c3RlckNvbG9yTWFwPXhNKCkuZG9tYWluKHRoaXMuaGllcmFyY2h5LnhsYUNsdXN0ZXJzKS5yYW5nZSh3ZS5tYXAoUmwodGhpcy5oaWVyYXJjaHkueGxhQ2x1c3RlcnMubGVuZ3RoKSxqQXQuWExBX0NMVVNURVJfUEFMRVRURSkpO2xldCB0PXRoaXMuaGllcmFyY2h5LnJvb3QubWV0YWdyYXBoLGU9R2wodC5ub2RlcygpLCgoZSxuKT0+e2xldCBpPXQubm9kZShlKTtpZihudWxsIT1pLnN0YXRzKXJldHVybiBpLnN0YXRzLnRvdGFsQnl0ZXN9KSk7dGhpcy5tZW1vcnlVc2FnZVNjYWxlPURNKCkuZG9tYWluKFswLGVdKS5yYW5nZShxQXQpO2xldCBuPUdsKHQubm9kZXMoKSwoKGUsbik9PntsZXQgaT10Lm5vZGUoZSk7aWYobnVsbCE9aS5zdGF0cylyZXR1cm4gaS5zdGF0cy5nZXRUb3RhbE1pY3JvcygpfSkpO3RoaXMuY29tcHV0ZVRpbWVTY2FsZT1ETSgpLmRvbWFpbihbMCxuXSkucmFuZ2UocUF0KSx0aGlzLmVkZ2VXaWR0aFNpemVkQmFzZWRTY2FsZT10aGlzLmhpZXJhcmNoeS5oYXNTaGFwZUluZm8/ZUF0OkRNKCkuZG9tYWluKFsxLHRoaXMuaGllcmFyY2h5Lm1heE1ldGFFZGdlU2l6ZV0pLnJhbmdlKFt0QXQsMTJdKX1nZXRSZW5kZXJOb2RlQnlOYW1lKHQpe3JldHVybiB0aGlzLmluZGV4W3RdfWdldE5vZGVCeU5hbWUodCl7cmV0dXJuIHRoaXMuaGllcmFyY2h5Lm5vZGUodCl9Y29sb3JIaXN0b2dyYW0odCxlKXtpZihPYmplY3Qua2V5cyh0KS5sZW5ndGg+MCl7Y29uc3Qgbj13ZS5zdW0oT2JqZWN0LmtleXModCkubWFwKChlPT50W2VdKSkpO3JldHVybiBPYmplY3Qua2V5cyh0KS5tYXAoKGk9Pih7Y29sb3I6ZShpKSxwcm9wb3J0aW9uOnRbaV0vbn0pKSl9cmV0dXJuIG51bGx9Z2V0T3JDcmVhdGVSZW5kZXJOb2RlQnlOYW1lKHQpe2lmKCF0KXJldHVybiBudWxsO2lmKHQgaW4gdGhpcy5pbmRleClyZXR1cm4gdGhpcy5pbmRleFt0XTtsZXQgZT10aGlzLmhpZXJhcmNoeS5ub2RlKHQpO2lmKCFlKXJldHVybiBudWxsO2xldCBuPWUuaXNHcm91cE5vZGU/bmV3IG5rdChlLHRoaXMuaGllcmFyY2h5LmdyYXBoT3B0aW9ucyk6bmV3IEpBdChlKTt0aGlzLmluZGV4W3RdPW4sdGhpcy5yZW5kZXJlZE9wTmFtZXMucHVzaCh0KSxlLnN0YXRzJiYobi5tZW1vcnlDb2xvcj10aGlzLm1lbW9yeVVzYWdlU2NhbGUoZS5zdGF0cy50b3RhbEJ5dGVzKSxuLmNvbXB1dGVUaW1lQ29sb3I9dGhpcy5jb21wdXRlVGltZVNjYWxlKGUuc3RhdHMuZ2V0VG90YWxNaWNyb3MoKSkpLG4uaXNGYWRlZE91dD10aGlzLmRpc3BsYXlpbmdTdGF0cyYmIWhBdChlLnN0YXRzKTt2YXIgaT1udWxsLHI9bnVsbCxvPW51bGw7aWYoZS5pc0dyb3VwTm9kZSl7aT1lLmRldmljZUhpc3RvZ3JhbSxyPWUueGxhQ2x1c3Rlckhpc3RvZ3JhbTtsZXQgdD1lLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZSxuPWUuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGU7MD09dCYmMD09bnx8KG89dC8odCtuKSl9ZWxzZXtsZXQgdD1uLm5vZGUuZGV2aWNlO3QmJihpPXtbdF06MX0pO2xldCBlPW4ubm9kZS54bGFDbHVzdGVyO2UmJihyPXtbZV06MX0pLG4ubm9kZS50eXBlPT09dkF0Lk9QJiYobz1uLm5vZGUuY29tcGF0aWJsZT8xOjApfXJldHVybiBpJiYobi5kZXZpY2VDb2xvcnM9dGhpcy5jb2xvckhpc3RvZ3JhbShpLHRoaXMuZGV2aWNlQ29sb3JNYXApKSxyJiYobi54bGFDbHVzdGVyQ29sb3JzPXRoaXMuY29sb3JIaXN0b2dyYW0ocix0aGlzLnhsYUNsdXN0ZXJDb2xvck1hcCkpLG51bGwhPW8mJihuLmNvbXBhdGliaWxpdHlDb2xvcnM9W3tjb2xvcjpWQXQscHJvcG9ydGlvbjpvfSx7Y29sb3I6VUF0LHByb3BvcnRpb246MS1vfV0pLHRoaXMuaW5kZXhbdF19Z2V0TmVhcmVzdFZpc2libGVBbmNlc3Rvcih0KXtsZXQgZT1IQXQodCksbj0wLGk9bnVsbCxyPXQ7Zm9yKDtuPGUubGVuZ3RoJiYocj1lW25dLGk9dGhpcy5nZXRSZW5kZXJOb2RlQnlOYW1lKHIpLGkuZXhwYW5kZWQpO24rKyk7aWYobj09ZS5sZW5ndGgtMil7bGV0IHQ9ZVtuKzFdO2lmKGkuaW5Bbm5vdGF0aW9ucy5ub2RlTmFtZXNbdF0pcmV0dXJuIHQ7aWYoaS5vdXRBbm5vdGF0aW9ucy5ub2RlTmFtZXNbdF0pcmV0dXJuIHR9cmV0dXJuIHJ9c2V0RGVwdGgodCl7aWt0KHRoaXMucm9vdCwrdCl9aXNOb2RlQXV4aWxpYXJ5KHQpe2xldCBlPXRoaXMuZ2V0UmVuZGVyTm9kZUJ5TmFtZSh0Lm5vZGUucGFyZW50Tm9kZS5uYW1lKSxuPXdlLmZpbmQoZS5pc29sYXRlZEluRXh0cmFjdCwoZT0+ZS5ub2RlLm5hbWU9PT10Lm5vZGUubmFtZSkpO3JldHVybiEhbnx8KG49d2UuZmluZChlLmlzb2xhdGVkT3V0RXh0cmFjdCwoZT0+ZS5ub2RlLm5hbWU9PT10Lm5vZGUubmFtZSkpLCEhbil9Z2V0TmFtZXNPZlJlbmRlcmVkT3BzKCl7cmV0dXJuIHRoaXMucmVuZGVyZWRPcE5hbWVzfWNsb25lQW5kQWRkRnVuY3Rpb25PcE5vZGUodCxlLG4saSl7Y29uc3Qgcj1uLm5hbWUucmVwbGFjZShlLGkpO2xldCBvPXQubWV0YWdyYXBoLm5vZGUocik7aWYobylyZXR1cm4gbztvPW5ldyBNQXQoe25hbWU6cixpbnB1dDpbXSxkZXZpY2U6bi5kZXZpY2Usb3A6bi5vcCxhdHRyOndlLmNsb25lRGVlcChuLmF0dHIpfSksby5jYXJkaW5hbGl0eT1uLmNhcmRpbmFsaXR5LG8uaW5jbHVkZT1uLmluY2x1ZGUsby5vdXRwdXRTaGFwZXM9d2UuY2xvbmVEZWVwKG4ub3V0cHV0U2hhcGVzKSxvLnhsYUNsdXN0ZXI9bi54bGFDbHVzdGVyLG8uZnVuY3Rpb25JbnB1dEluZGV4PW4uZnVuY3Rpb25JbnB1dEluZGV4LG8uZnVuY3Rpb25PdXRwdXRJbmRleD1uLmZ1bmN0aW9uT3V0cHV0SW5kZXgsby5pbnB1dHM9bi5pbnB1dHMubWFwKCh0PT57Y29uc3Qgbj13ZS5jbG9uZSh0KTtyZXR1cm4gbi5uYW1lPXQubmFtZS5yZXBsYWNlKGUsaSksbn0pKSxvLnBhcmVudE5vZGU9dCx0Lm1ldGFncmFwaC5zZXROb2RlKG8ubmFtZSxvKSx0aGlzLmhpZXJhcmNoeS5zZXROb2RlKG8ubmFtZSxvKTtjb25zdCBhPW49PnRoaXMuY2xvbmVBbmRBZGRGdW5jdGlvbk9wTm9kZSh0LGUsbixpKTtyZXR1cm4gby5pbkVtYmVkZGluZ3M9bi5pbkVtYmVkZGluZ3MubWFwKGEpLG8ub3V0RW1iZWRkaW5ncz1uLm91dEVtYmVkZGluZ3MubWFwKGEpLG99Y2xvbmVGdW5jdGlvbkxpYnJhcnlNZXRhbm9kZSh0LGUsbixpLHIpe2NvbnN0IG89e30sYT10aGlzLmNsb25lRnVuY3Rpb25MaWJyYXJ5TWV0YW5vZGVIZWxwZXIodCxlLG4saSxyLG8pO3JldHVybiB3ZS5pc0VtcHR5KG8pfHx0aGlzLnBhdGNoRWRnZXNGcm9tRnVuY3Rpb25PdXRwdXRzKGUsbyksYX1jbG9uZUZ1bmN0aW9uTGlicmFyeU1ldGFub2RlSGVscGVyKHQsZSxuLGkscixvKXtjb25zdCBhPUVBdChuLm5hbWUucmVwbGFjZShpLHIpKTtyZXR1cm4gYS5kZXB0aD1uLmRlcHRoLGEuY2FyZGluYWxpdHk9bi5jYXJkaW5hbGl0eSxhLnRlbXBsYXRlSWQ9bi50ZW1wbGF0ZUlkLGEub3BIaXN0b2dyYW09d2UuY2xvbmUobi5vcEhpc3RvZ3JhbSksYS5kZXZpY2VIaXN0b2dyYW09d2UuY2xvbmUobi5kZXZpY2VIaXN0b2dyYW0pLGEueGxhQ2x1c3Rlckhpc3RvZ3JhbT13ZS5jbG9uZShuLnhsYUNsdXN0ZXJIaXN0b2dyYW0pLGEuaGFzTm9uQ29udHJvbEVkZ2VzPW4uaGFzTm9uQ29udHJvbEVkZ2VzLGEuaW5jbHVkZT1uLmluY2x1ZGUsYS5ub2RlQXR0cmlidXRlcz13ZS5jbG9uZShuLm5vZGVBdHRyaWJ1dGVzKSxhLmFzc29jaWF0ZWRGdW5jdGlvbj1uLmFzc29jaWF0ZWRGdW5jdGlvbix3ZS5lYWNoKG4ubWV0YWdyYXBoLm5vZGVzKCksKHM9Pntjb25zdCBsPW4ubWV0YWdyYXBoLm5vZGUocyk7c3dpdGNoKGwudHlwZSl7Y2FzZSB2QXQuTUVUQTpjb25zdCBuPXRoaXMuY2xvbmVGdW5jdGlvbkxpYnJhcnlNZXRhbm9kZUhlbHBlcih0LGUsbCxpLHIsbyk7bi5wYXJlbnROb2RlPWEsYS5tZXRhZ3JhcGguc2V0Tm9kZShuLm5hbWUsbiksdGhpcy5oaWVyYXJjaHkuc2V0Tm9kZShuLm5hbWUsbik7YnJlYWs7Y2FzZSB2QXQuT1A6Y29uc3Qgcz10aGlzLmNsb25lQW5kQWRkRnVuY3Rpb25PcE5vZGUoYSxpLGwscik7d2UuaXNOdW1iZXIocy5mdW5jdGlvbklucHV0SW5kZXgpJiZ0aGlzLnBhdGNoRWRnZXNJbnRvRnVuY3Rpb25JbnB1dHMoZSxzKSx3ZS5pc051bWJlcihzLmZ1bmN0aW9uT3V0cHV0SW5kZXgpJiYob1tzLmZ1bmN0aW9uT3V0cHV0SW5kZXhdPXMpO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS53YXJuKGwubmFtZSsiIGlzIG9kZGx5IG5laXRoZXIgYSBtZXRhbm9kZSBub3IgYW4gb3Bub2RlLiIpfX0pKSx0aGlzLmNsb25lTGlicmFyeU1ldGFub2RlRWRnZXMobixhLGksciksYX1jbG9uZUxpYnJhcnlNZXRhbm9kZUVkZ2VzKHQsZSxuLGkpe3dlLmVhY2godC5tZXRhZ3JhcGguZWRnZXMoKSwocj0+e2NvbnN0IG89dC5tZXRhZ3JhcGguZWRnZShyKSxhPW8udi5yZXBsYWNlKG4saSkscz1vLncucmVwbGFjZShuLGkpLGw9bmV3IEFBdChhLHMpO2wuaW5ib3VuZD1vLmluYm91bmQsbC5udW1SZWd1bGFyRWRnZXM9by5udW1SZWd1bGFyRWRnZXMsbC5udW1Db250cm9sRWRnZXM9by5udW1Db250cm9sRWRnZXMsbC5udW1SZWZFZGdlcz1vLm51bVJlZkVkZ2VzLGwudG90YWxTaXplPW8udG90YWxTaXplLG8uYmFzZUVkZ2VMaXN0JiYobC5iYXNlRWRnZUxpc3Q9by5iYXNlRWRnZUxpc3QubWFwKCh0PT57Y29uc3QgZT13ZS5jbG9uZSh0KTtyZXR1cm4gZS52PXQudi5yZXBsYWNlKG4saSksZS53PXQudy5yZXBsYWNlKG4saSksZX0pKSksZS5tZXRhZ3JhcGgubm9kZShzKT9lLm1ldGFncmFwaC5zZXRFZGdlKGEscyxsKTplLm1ldGFncmFwaC5zZXRFZGdlKHMsYSxsKX0pKX1wYXRjaEVkZ2VzSW50b0Z1bmN0aW9uSW5wdXRzKHQsZSl7bGV0IG49TWF0aC5taW4oZS5mdW5jdGlvbklucHV0SW5kZXgsdC5pbnB1dHMubGVuZ3RoLTEpLGk9d2UuY2xvbmUodC5pbnB1dHNbbl0pO2Zvcig7aS5pc0NvbnRyb2xEZXBlbmRlbmN5OyluKyssaT10LmlucHV0c1tuXTtlLmlucHV0cy5wdXNoKGkpO2NvbnN0IHI9dGhpcy5oaWVyYXJjaHkuZ2V0UHJlZGVjZXNzb3JzKHQubmFtZSk7bGV0IG8sYT0wO3dlLmVhY2goci5yZWd1bGFyLCh0PT57aWYoYSs9dC5udW1SZWd1bGFyRWRnZXMsYT5uKXJldHVybiBvPXQsITF9KSksd2UuZWFjaChvLmJhc2VFZGdlTGlzdCwobj0+e24udz09PXQubmFtZSYmKG4udz1lLm5hbWUpLG4udj09PXQubmFtZSYmKG4udj1lLm5hbWUpfSkpfXBhdGNoRWRnZXNGcm9tRnVuY3Rpb25PdXRwdXRzKHQsZSl7Y29uc3Qgbj10aGlzLmhpZXJhcmNoeS5nZXRTdWNjZXNzb3JzKHQubmFtZSk7d2UuZWFjaChuLnJlZ3VsYXIsKG49Pnt3ZS5lYWNoKG4uYmFzZUVkZ2VMaXN0LChuPT57Y29uc3QgaT10aGlzLmhpZXJhcmNoeS5ub2RlKG4udyk7d2UuZWFjaChpLmlucHV0cywoaT0+e2kubmFtZT09PXQubmFtZSYmKGkubmFtZT1lW2kub3V0cHV0VGVuc29yS2V5XS5uYW1lLGkub3V0cHV0VGVuc29yS2V5PW4ub3V0cHV0VGVuc29yS2V5KX0pKX0pKSx3ZS5lYWNoKG4uYmFzZUVkZ2VMaXN0LCh0PT57dC52PWVbdC5vdXRwdXRUZW5zb3JLZXldLm5hbWUsdC5vdXRwdXRUZW5zb3JLZXk9IjAifSkpfSkpfWJ1aWxkU3ViaGllcmFyY2h5KHQpe2lmKHQgaW4gdGhpcy5oYXNTdWJoaWVyYXJjaHkpcmV0dXJuO3RoaXMuaGFzU3ViaGllcmFyY2h5W3RdPSEwO2xldCBlPXRoaXMuaW5kZXhbdF07aWYoZS5ub2RlLnR5cGUhPT12QXQuTUVUQSYmZS5ub2RlLnR5cGUhPT12QXQuU0VSSUVTKXJldHVybjtsZXQgbj1lLGk9bi5ub2RlLm1ldGFncmFwaCxyPW4uY29yZUdyYXBoO2NvbnN0IG89W10sYT1bXTt3ZS5pc0VtcHR5KHRoaXMuaGllcmFyY2h5LmxpYnJhcnlGdW5jdGlvbnMpfHwod2UuZWFjaChpLm5vZGVzKCksKHQ9Pntjb25zdCBlPWkubm9kZSh0KSxuPXRoaXMuaGllcmFyY2h5LmxpYnJhcnlGdW5jdGlvbnNbZS5vcF07aWYoIW4pcmV0dXJuO2lmKDA9PT10LmluZGV4T2YoX0F0KSlyZXR1cm47Y29uc3Qgcj10aGlzLmNsb25lRnVuY3Rpb25MaWJyYXJ5TWV0YW5vZGUoaSxlLG4ubm9kZSxuLm5vZGUubmFtZSxlLm5hbWUpO28ucHVzaChlKSxhLnB1c2gocil9KSksd2UuZWFjaChhLCgodCxlKT0+e2NvbnN0IG49b1tlXTt0LnBhcmVudE5vZGU9bi5wYXJlbnROb2RlLGkuc2V0Tm9kZShuLm5hbWUsdCksdGhpcy5oaWVyYXJjaHkuc2V0Tm9kZShuLm5hbWUsdCl9KSkpLHdlLmVhY2goaS5ub2RlcygpLCh0PT57bGV0IGU9dGhpcy5nZXRPckNyZWF0ZVJlbmRlck5vZGVCeU5hbWUodCksbj1lLm5vZGU7ci5zZXROb2RlKHQsZSksbi5pc0dyb3VwTm9kZXx8KHdlLmVhY2gobi5pbkVtYmVkZGluZ3MsKHQ9PntsZXQgbj1uZXcgUUF0KG51bGwpLGk9bmV3IEpBdCh0KTt0a3QoZSx0LGksbixLQXQuQ09OU1RBTlQpLHRoaXMuaW5kZXhbdC5uYW1lXT1pfSkpLHdlLmVhY2gobi5vdXRFbWJlZGRpbmdzLCh0PT57bGV0IG49bmV3IFFBdChudWxsKSxpPW5ldyBKQXQodCk7ZWt0KGUsdCxpLG4sS0F0LlNVTU1BUlkpLHRoaXMuaW5kZXhbdC5uYW1lXT1pfSkpKX0pKSx3ZS5lYWNoKGkuZWRnZXMoKSwodD0+e2xldCBlPWkuZWRnZSh0KSxuPW5ldyBRQXQoZSk7bi5pc0ZhZGVkT3V0PXRoaXMuaW5kZXhbdC52XS5pc0ZhZGVkT3V0fHx0aGlzLmluZGV4W3Qud10uaXNGYWRlZE91dCxyLnNldEVkZ2UodC52LHQudyxuKX0pKSxuLm5vZGUudHlwZT09PXZBdC5NRVRBJiYoZnVuY3Rpb24gcyh0LGUpeyhmdW5jdGlvbiBuKHQpe2xldCBlPXQuY29yZUdyYXBoO3dlLmVhY2goZS5ub2RlcygpLChuPT57ZS5ub2RlKG4pLm5vZGUuaW5jbHVkZSE9PWJBdC5FWENMVURFfHxuLnN0YXJ0c1dpdGgoX0F0KXx8KHQuY29yZUdyYXBoLm91dEVkZ2VzKG4pLmxlbmd0aD50LmNvcmVHcmFwaC5pbkVkZ2VzKG4pLmxlbmd0aD9va3QodCxuKTpha3QodCxuKSl9KSl9KSh0KSxHQXQubGVuZ3RoJiYoZnVuY3Rpb24gaSh0KXtsZXQgZT10LmNvcmVHcmFwaDt3ZS5lYWNoKGUubm9kZXMoKSwobj0+e2xldCBpPWUubm9kZShuKTtpLm5vZGUuaW5jbHVkZT09PWJBdC5VTlNQRUNJRklFRCYmc2t0KGkubm9kZSxHQXQpJiZva3QodCxuKX0pKX0pKHQpLFdBdC5sZW5ndGgmJihmdW5jdGlvbiByKHQpe2xldCBlPXQuY29yZUdyYXBoO3dlLmVhY2goZS5ub2RlcygpLChuPT57bGV0IGk9ZS5ub2RlKG4pO2kubm9kZS5pbmNsdWRlPT09YkF0LlVOU1BFQ0lGSUVEJiZza3QoaS5ub2RlLFdBdCkmJmFrdCh0LG4pfSkpfSkodCksZSYmKGZ1bmN0aW9uIG8odCl7bGV0IGU9dC5jb3JlR3JhcGgsbj17fSxpPXt9LHI9MDtpZih3ZS5lYWNoKGUubm9kZXMoKSwodD0+e2lmKGUubm9kZSh0KS5ub2RlLmluY2x1ZGUhPT1iQXQuVU5TUEVDSUZJRUQpcmV0dXJuO2xldCBvPXdlLnJlZHVjZShlLnByZWRlY2Vzc29ycyh0KSwoKG4saSk9Pm4rKGUuZWRnZShpLHQpLm1ldGFlZGdlLm51bVJlZ3VsYXJFZGdlcz8xOjApKSwwKTswPT09byYmZS5wcmVkZWNlc3NvcnModCkubGVuZ3RoPjAmJihvPWUucHJlZGVjZXNzb3JzKHQpLmxlbmd0aCk7bGV0IGE9d2UucmVkdWNlKGUuc3VjY2Vzc29ycyh0KSwoKG4saSk9Pm4rKGUuZWRnZSh0LGkpLm1ldGFlZGdlLm51bVJlZ3VsYXJFZGdlcz8xOjApKSwwKTswPT09YSYmZS5zdWNjZXNzb3JzKHQpLmxlbmd0aD4wJiYoYT1lLnN1Y2Nlc3NvcnModCkubGVuZ3RoKSxuW3RdPW8saVt0XT1hLHIrK30pKSxyPDE1KXJldHVybjtsZXQgbz1NYXRoLnJvdW5kKC43NSpyKSxhPU1hdGgucm91bmQoLjI1KnIpLHM9T2JqZWN0LmtleXMobikuc29ydCgoKHQsZSk9Pm5bdF0tbltlXSkpLGw9bltzW29dXSxjPWwrbC1uW3NbYV1dO2M9TWF0aC5tYXgoYyw0KTtmb3IobGV0IGU9ci0xO25bc1tlXV0+YztlLS0pYWt0KHQsc1tlXSk7bGV0IHU9T2JqZWN0LmtleXMoaSkuc29ydCgoKHQsZSk9PmlbdF0taVtlXSkpLGg9aVt1W29dXSxkPWgrNCooaC1pW3VbYV1dKTtkPU1hdGgubWF4KGQsNCk7Zm9yKGxldCBuPXItMTtpW3Vbbl1dPmQ7bi0tKXtsZXQgaT1lLm5vZGUodVtuXSk7aSYmIWkuaXNJbkV4dHJhY3QmJm9rdCh0LHVbbl0pfX0pKHQpLChmdW5jdGlvbiBhKHQpe2xldCBlPXQuY29yZUdyYXBoLG49e307d2UuZWFjaChlLmVkZ2VzKCksKHQ9PntlLmVkZ2UodCkubWV0YWVkZ2UubnVtUmVndWxhckVkZ2VzfHwoKG5bdC52XT1uW3Qudl18fFtdKS5wdXNoKHQpLChuW3Qud109blt0LnddfHxbXSkucHVzaCh0KSl9KSksd2UuZWFjaChuLCgodCxuKT0+e3QubGVuZ3RoPjQmJndlLmVhY2godCwodD0+cmt0KGUsdC52LHQudykpKX0pKX0pKHQpO2xldCBzPXQuY29yZUdyYXBoO3dlLmVhY2gocy5ub2RlcygpLChlPT57bGV0IG49cy5ub2RlKGUpLGk9cy5uZWlnaGJvcnMoZSkubGVuZ3RoO2lmKG4ubm9kZS5pbmNsdWRlPT09YkF0LlVOU1BFQ0lGSUVEJiYwPT09aSl7bGV0IGk9bi5vdXRBbm5vdGF0aW9ucy5saXN0Lmxlbmd0aD4wLHI9bi5pbkFubm90YXRpb25zLmxpc3QubGVuZ3RoPjA7bi5pc0luRXh0cmFjdD8odC5pc29sYXRlZEluRXh0cmFjdC5wdXNoKG4pLG4ubm9kZS5pbmNsdWRlPWJBdC5FWENMVURFLHMucmVtb3ZlTm9kZShlKSk6bi5pc091dEV4dHJhY3Q/KHQuaXNvbGF0ZWRPdXRFeHRyYWN0LnB1c2gobiksbi5ub2RlLmluY2x1ZGU9YkF0LkVYQ0xVREUscy5yZW1vdmVOb2RlKGUpKTppJiYhcj8obi5pc0luRXh0cmFjdD0hMCx0Lmlzb2xhdGVkSW5FeHRyYWN0LnB1c2gobiksbi5ub2RlLmluY2x1ZGU9YkF0LkVYQ0xVREUscy5yZW1vdmVOb2RlKGUpKTpyJiYhaSYmKG4uaXNPdXRFeHRyYWN0PSEwLHQuaXNvbGF0ZWRPdXRFeHRyYWN0LnB1c2gobiksbi5ub2RlLmluY2x1ZGU9YkF0LkVYQ0xVREUscy5yZW1vdmVOb2RlKGUpKX19KSl9KShuLHRoaXMuYXV0b0V4dHJhY3ROb2Rlcyksd2UuaXNFbXB0eSh0aGlzLmhpZXJhcmNoeS5saWJyYXJ5RnVuY3Rpb25zKXx8dGhpcy5idWlsZFN1YmhpZXJhcmNoaWVzRm9yTmVlZGVkRnVuY3Rpb25zKGkpLHQ9PT1nQXQmJndlLmZvck93bih0aGlzLmhpZXJhcmNoeS5saWJyYXJ5RnVuY3Rpb25zLCgodCxlKT0+e2NvbnN0IGk9dC5ub2RlLG89dGhpcy5nZXRPckNyZWF0ZVJlbmRlck5vZGVCeU5hbWUoaS5uYW1lKTtuLmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0LnB1c2gobyksby5ub2RlLmluY2x1ZGU9YkF0LkVYQ0xVREUsci5yZW1vdmVOb2RlKGkubmFtZSl9KSk7bGV0IGw9bi5ub2RlLnBhcmVudE5vZGU7aWYoIWwpcmV0dXJuO2xldCBjPXRoaXMuaW5kZXhbbC5uYW1lXSx1PSh0LC4uLmUpPT5lLmNvbmNhdChbdD8iSU4iOiJPVVQiXSkuam9pbigifn4iKSxoPXRoaXMuaGllcmFyY2h5LmdldEJyaWRnZWdyYXBoKHQpLGQ9e2luOnt9LG91dDp7fSxjb250cm9sOnt9fTt3ZS5lYWNoKGguZWRnZXMoKSwodD0+e2xldCBlPSEhaS5ub2RlKHQudyksbj1lP3Qudjp0Lnc7aC5lZGdlKHQpLm51bVJlZ3VsYXJFZGdlcz9lP2Qub3V0W25dPShkLm91dFtuXXx8MCkrMTpkLmluW25dPShkLmluW25dfHwwKSsxOmQuY29udHJvbFtuXT0oZC5jb250cm9sW25dfHwwKSsxfSkpO2xldCBwPXRoaXMuaGllcmFyY2h5LmdldE5vZGVNYXAoKTt3ZS5lYWNoKGguZWRnZXMoKSwobj0+e2xldCBvPWguZWRnZShuKSxhPSEhaS5ub2RlKG4udyksW3MsZl09YT9bbi53LG4udl06W24udixuLnddLG09dGhpcy5pbmRleFtzXSxnPXRoaXMuaW5kZXhbZl0sXz1nP2cubm9kZTpwW2ZdLHk9IW8ubnVtUmVndWxhckVkZ2VzJiZkLmNvbnRyb2xbZl0+NCxbLHZdPWE/W2UuaW5Bbm5vdGF0aW9ucyxtLmluQW5ub3RhdGlvbnNdOltlLm91dEFubm90YXRpb25zLG0ub3V0QW5ub3RhdGlvbnNdLGI9bnVsbCx4PSExO2lmKCEoKGE/ZC5vdXQ6ZC5pbilbZl0+NCkmJiF5JiZtLmlzSW5Db3JlKCkpe2xldCBlPWU9PmMuY29yZUdyYXBoLmVkZ2UoYT97djplLHc6dH06e3Y6dCx3OmV9KTtiPWUoZiksYnx8KGI9ZSh1KGEsZixsLm5hbWUpKSkseD0hIWJ9bGV0IHc9ITE7aWYoYiYmIW8ubnVtUmVndWxhckVkZ2VzKXtsZXQgdD1iLGU9Yy5ub2RlO2Zvcig7dC5hZGpvaW5pbmdNZXRhZWRnZTspdD10LmFkam9pbmluZ01ldGFlZGdlLGU9ZS5wYXJlbnROb2RlO2xldCBuPXRoaXMuaGllcmFyY2h5LmdldFRvcG9sb2dpY2FsT3JkZXJpbmcoZS5uYW1lKSxpPXQubWV0YWVkZ2U7dz1uW2kudl0+bltpLnddfWlmKHg9eCYmIXcsIXgpcmV0dXJuIHZvaWQgdi5wdXNoKG5ldyAkQXQoXyxnLG5ldyBRQXQobyksS0F0LlNIT1JUQ1VULGEpKTtsZXQgUz11KGEsdCksTT11KGEsZix0KSxFPXIubm9kZShNKTtpZighRSl7bGV0IHQ9ci5ub2RlKFMpO3R8fCh0PW5ldyBKQXQoe25hbWU6Uyx0eXBlOnZBdC5CUklER0UsaXNHcm91cE5vZGU6ITEsY2FyZGluYWxpdHk6MCxwYXJlbnROb2RlOm51bGwsc3RhdHM6bnVsbCxpbmNsdWRlOmJBdC5VTlNQRUNJRklFRCxpbmJvdW5kOmEsbm9kZUF0dHJpYnV0ZXM6e319KSx0aGlzLmluZGV4W1NdPXQsci5zZXROb2RlKFMsdCkpLEU9bmV3IEpBdCh7bmFtZTpNLHR5cGU6dkF0LkJSSURHRSxpc0dyb3VwTm9kZTohMSxjYXJkaW5hbGl0eToxLHBhcmVudE5vZGU6bnVsbCxzdGF0czpudWxsLGluY2x1ZGU6YkF0LlVOU1BFQ0lGSUVELGluYm91bmQ6YSxub2RlQXR0cmlidXRlczp7fX0pLHRoaXMuaW5kZXhbTV09RSxyLnNldE5vZGUoTSxFKSxyLnNldFBhcmVudChNLFMpLHQubm9kZS5jYXJkaW5hbGl0eSsrfWxldCBUPW5ldyBRQXQobyk7VC5hZGpvaW5pbmdNZXRhZWRnZT1iLGE/ci5zZXRFZGdlKE0scyxUKTpyLnNldEVkZ2UocyxNLFQpfSkpLHdlLmVhY2goWyEwLCExXSwoZT0+e2xldCBuPXUoZSx0KSxpPXIubm9kZShuKTtpJiZ3ZS5lYWNoKHIubm9kZXMoKSwobz0+e2lmKHIubm9kZShvKS5ub2RlLnR5cGU9PT12QXQuQlJJREdFKXJldHVybjtpZighKGU/IXIucHJlZGVjZXNzb3JzKG8pLmxlbmd0aDohci5zdWNjZXNzb3JzKG8pLmxlbmd0aCkpcmV0dXJuO2xldCBhPXUoZSx0LCJTVFJVQ1RVUkFMX1RBUkdFVCIpLHM9ci5ub2RlKGEpO3N8fChzPW5ldyBKQXQoe25hbWU6YSx0eXBlOnZBdC5CUklER0UsaXNHcm91cE5vZGU6ITEsY2FyZGluYWxpdHk6MSxwYXJlbnROb2RlOm51bGwsc3RhdHM6bnVsbCxpbmNsdWRlOmJBdC5VTlNQRUNJRklFRCxpbmJvdW5kOmUsbm9kZUF0dHJpYnV0ZXM6e319KSxzLnN0cnVjdHVyYWw9ITAsdGhpcy5pbmRleFthXT1zLHIuc2V0Tm9kZShhLHMpLGkubm9kZS5jYXJkaW5hbGl0eSsrLHIuc2V0UGFyZW50KGEsbikpO2xldCBsPW5ldyBRQXQobnVsbCk7bC5zdHJ1Y3R1cmFsPSEwLGwud2VpZ2h0LS0sZT9yLnNldEVkZ2UoYSxvLGwpOnIuc2V0RWRnZShvLGEsbCl9KSl9KSl9YnVpbGRTdWJoaWVyYXJjaGllc0Zvck5lZWRlZEZ1bmN0aW9ucyh0KXt3ZS5lYWNoKHQuZWRnZXMoKSwoZT0+e2xldCBuPXQuZWRnZShlKSxpPW5ldyBRQXQobik7d2UuZm9yRWFjaChpLm1ldGFlZGdlLmJhc2VFZGdlTGlzdCwodD0+e2NvbnN0IGU9dC52LnNwbGl0KG1BdCk7Zm9yKGxldCB0PWUubGVuZ3RoO3Q+PTA7dC0tKXtjb25zdCBuPWUuc2xpY2UoMCx0KSxpPXRoaXMuaGllcmFyY2h5Lm5vZGUobi5qb2luKG1BdCkpO2lmKGkpe2lmKGkudHlwZT09PXZBdC5PUCYmdGhpcy5oaWVyYXJjaHkubGlicmFyeUZ1bmN0aW9uc1tpLm9wXSlmb3IobGV0IHQ9MTt0PG4ubGVuZ3RoO3QrKyl7Y29uc3QgZT1uLnNsaWNlKDAsdCkuam9pbihtQXQpO2UmJnRoaXMuYnVpbGRTdWJoaWVyYXJjaHkoZSl9YnJlYWt9fX0pKX0pKX19Y2xhc3MgJEF0e2NvbnN0cnVjdG9yKHQsZSxuLGkscil7dGhpcy5ub2RlPXQsdGhpcy5yZW5kZXJOb2RlSW5mbz1lLHRoaXMucmVuZGVyTWV0YWVkZ2VJbmZvPW4sdGhpcy5hbm5vdGF0aW9uVHlwZT1pLHRoaXMuZHg9MCx0aGlzLmR5PTAsdGhpcy53aWR0aD0wLHRoaXMuaGVpZ2h0PTAsbiYmbi5tZXRhZWRnZSYmKHRoaXMudj1uLm1ldGFlZGdlLnYsdGhpcy53PW4ubWV0YWVkZ2UudyksdGhpcy5pc0luPXIsdGhpcy5wb2ludHM9W119fXZhciBLQXQ7IShmdW5jdGlvbih0KXt0W3QuU0hPUlRDVVQ9MF09IlNIT1JUQ1VUIix0W3QuQ09OU1RBTlQ9MV09IkNPTlNUQU5UIix0W3QuU1VNTUFSWT0yXT0iU1VNTUFSWSIsdFt0LkVMTElQU0lTPTNdPSJFTExJUFNJUyJ9KShLQXR8fChLQXQ9e30pKTtjbGFzcyBaQXR7Y29uc3RydWN0b3IoKXt0aGlzLmxpc3Q9W10sdGhpcy5ub2RlTmFtZXM9e319cHVzaCh0KXtpZih0Lm5vZGUubmFtZSBpbiB0aGlzLm5vZGVOYW1lcylyZXR1cm47aWYodGhpcy5ub2RlTmFtZXNbdC5ub2RlLm5hbWVdPSEwLHRoaXMubGlzdC5sZW5ndGg8NSlyZXR1cm4gdm9pZCB0aGlzLmxpc3QucHVzaCh0KTtsZXQgZT10aGlzLmxpc3RbdGhpcy5saXN0Lmxlbmd0aC0xXTtpZihlLmFubm90YXRpb25UeXBlPT09S0F0LkVMTElQU0lTKXtsZXQgdD1lLm5vZGU7cmV0dXJuIHZvaWQgdC5zZXROdW1Nb3JlTm9kZXMoKyt0Lm51bU1vcmVOb2Rlcyl9bGV0IG49bmV3IFNBdCgxKTt0aGlzLmxpc3QucHVzaChuZXcgJEF0KG4sbmV3IEpBdChuKSxudWxsLEtBdC5FTExJUFNJUyx0LmlzSW4pKX19Y2xhc3MgSkF0e2NvbnN0cnVjdG9yKHQpe2lmKHRoaXMubm9kZT10LHRoaXMuZXhwYW5kZWQ9ITEsdGhpcy5pbkFubm90YXRpb25zPW5ldyBaQXQsdGhpcy5vdXRBbm5vdGF0aW9ucz1uZXcgWkF0LHRoaXMueD0wLHRoaXMueT0wLHRoaXMud2lkdGg9MCx0aGlzLmhlaWdodD0wLHRoaXMuaW5ib3hXaWR0aD0wLHRoaXMub3V0Ym94V2lkdGg9MCx0aGlzLmV4Y2x1ZGVkPSExLHRoaXMuc3RydWN0dXJhbD0hMSx0aGlzLmxhYmVsT2Zmc2V0PTAsdGhpcy5yYWRpdXM9MCx0aGlzLmxhYmVsSGVpZ2h0PTAsdGhpcy5wYWRkaW5nVG9wPTAsdGhpcy5wYWRkaW5nTGVmdD0wLHRoaXMucGFkZGluZ1JpZ2h0PTAsdGhpcy5wYWRkaW5nQm90dG9tPTAsdGhpcy5pc0luRXh0cmFjdD0hMSx0aGlzLmlzT3V0RXh0cmFjdD0hMSx0aGlzLmNvcmVCb3g9e3dpZHRoOjAsaGVpZ2h0OjB9LHRoaXMuaXNGYWRlZE91dD0hMSx0aGlzLmRpc3BsYXlOYW1lPXQubmFtZS5zdWJzdHJpbmcodC5uYW1lLmxhc3RJbmRleE9mKG1BdCkrMSksdC50eXBlPT09dkF0Lk1FVEEmJnQuYXNzb2NpYXRlZEZ1bmN0aW9uKXtjb25zdCB0PXRoaXMuZGlzcGxheU5hbWUubWF0Y2goWUF0KTt0P3RoaXMuZGlzcGxheU5hbWU9dFsxXTp3ZS5zdGFydHNXaXRoKHRoaXMuZGlzcGxheU5hbWUsX0F0KSYmKHRoaXMuZGlzcGxheU5hbWU9dGhpcy5kaXNwbGF5TmFtZS5zdWJzdHJpbmcoX0F0Lmxlbmd0aCkpfX1pc0luQ29yZSgpe3JldHVybiF0aGlzLmlzSW5FeHRyYWN0JiYhdGhpcy5pc091dEV4dHJhY3QmJiF0aGlzLmlzTGlicmFyeUZ1bmN0aW9ufX1jbGFzcyBRQXR7Y29uc3RydWN0b3IodCl7dGhpcy5tZXRhZWRnZT10LHRoaXMuYWRqb2luaW5nTWV0YWVkZ2U9bnVsbCx0aGlzLnN0cnVjdHVyYWw9ITEsdGhpcy53ZWlnaHQ9MSx0aGlzLmlzRmFkZWRPdXQ9ITF9fWZ1bmN0aW9uIHRrdCh0LGUsbixpLHIpe2xldCBvPW5ldyAkQXQoZSxuLGksciwhMCk7dC5pbkFubm90YXRpb25zLnB1c2gobyl9ZnVuY3Rpb24gZWt0KHQsZSxuLGkscil7bGV0IG89bmV3ICRBdChlLG4saSxyLCExKTt0Lm91dEFubm90YXRpb25zLnB1c2gobyl9Y2xhc3Mgbmt0IGV4dGVuZHMgSkF0e2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCk7bGV0IG49dC5tZXRhZ3JhcGguZ3JhcGgoKTt0aGlzLmNvcmVHcmFwaD1SQXQobi5uYW1lLHlBdC5DT1JFLGUpLHRoaXMuaW5FeHRyYWN0Qm94PXt3aWR0aDowLGhlaWdodDowfSx0aGlzLm91dEV4dHJhY3RCb3g9e3dpZHRoOjAsaGVpZ2h0OjB9LHRoaXMubGlicmFyeUZ1bmN0aW9uc0JveD17d2lkdGg6MCxoZWlnaHQ6MH0sdGhpcy5pc29sYXRlZEluRXh0cmFjdD1bXSx0aGlzLmlzb2xhdGVkT3V0RXh0cmFjdD1bXSx0aGlzLmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0PVtdfX1mdW5jdGlvbiBpa3QodCxlKXt0LmNvcmVHcmFwaCYmKGZ1bmN0aW9uIG4odCxlKXt3ZS5lYWNoKHQubm9kZXMoKSwobj0+e2xldCBpPXQubm9kZShuKTtpZihpLmV4cGFuZGVkPWU+MSxlPjApc3dpdGNoKGkubm9kZS50eXBlKXtjYXNlIHZBdC5NRVRBOmNhc2UgdkF0LlNFUklFUzppa3QoaSxlLTEpfX0pKX0pKHQuY29yZUdyYXBoLGUpfWZ1bmN0aW9uIHJrdCh0LGUsbil7bGV0IGk9dC5ub2RlKGUpLHI9dC5ub2RlKG4pLG89dC5lZGdlKGUsbik7KGkubm9kZS5pbmNsdWRlIT09YkF0LklOQ0xVREUmJnIubm9kZS5pbmNsdWRlIT09YkF0LklOQ0xVREV8fGkubm9kZS5pbmNsdWRlPT09YkF0LkVYQ0xVREV8fHIubm9kZS5pbmNsdWRlPT09YkF0LkVYQ0xVREUpJiYoZWt0KGksci5ub2RlLHIsbyxLQXQuU0hPUlRDVVQpLHRrdChyLGkubm9kZSxpLG8sS0F0LlNIT1JUQ1VUKSx0LnJlbW92ZUVkZ2UoZSxuKSl9ZnVuY3Rpb24gb2t0KHQsZSxuKXtsZXQgaT10LmNvcmVHcmFwaCxyPWkubm9kZShlKTtyLmlzT3V0RXh0cmFjdD0hMCx3ZS5lYWNoKGkucHJlZGVjZXNzb3JzKGUpLCgodCxuKT0+e3JrdChpLHQsZSl9KSksd2UuZWFjaChpLnN1Y2Nlc3NvcnMoZSksKCh0LG4pPT57cmt0KGksZSx0KX0pKSwwPT09aS5uZWlnaGJvcnMoZSkubGVuZ3RoJiYoci5ub2RlLmluY2x1ZGU9YkF0LkVYQ0xVREUsdC5pc29sYXRlZE91dEV4dHJhY3QucHVzaChyKSxpLnJlbW92ZU5vZGUoZSkpfWZ1bmN0aW9uIGFrdCh0LGUsbil7bGV0IGk9dC5jb3JlR3JhcGgscj1pLm5vZGUoZSk7ci5pc0luRXh0cmFjdD0hMCx3ZS5lYWNoKGkuc3VjY2Vzc29ycyhlKSwoKHQsbik9Pntya3QoaSxlLHQpfSkpLHdlLmVhY2goaS5wcmVkZWNlc3NvcnMoZSksKCh0LG4pPT57cmt0KGksdCxlKX0pKSwwPT09aS5uZWlnaGJvcnMoZSkubGVuZ3RoJiYoci5ub2RlLmluY2x1ZGU9YkF0LkVYQ0xVREUsdC5pc29sYXRlZEluRXh0cmFjdC5wdXNoKHIpLGkucmVtb3ZlTm9kZShlKSl9ZnVuY3Rpb24gc2t0KHQsZSl7aWYodC50eXBlPT09dkF0Lk9QKXtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKylpZih0Lm9wPT09ZVtuXSlyZXR1cm4hMH1lbHNlIGlmKHQudHlwZT09PXZBdC5NRVRBKXtsZXQgbj10LmdldFJvb3RPcCgpO2lmKG4pZm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0KyspaWYobi5vcD09PWVbdF0pcmV0dXJuITB9cmV0dXJuITF9Y29uc3QgbGt0PXthbmltYXRpb246e2R1cmF0aW9uOjI1MH0sZ3JhcGg6e21ldGE6e25vZGVTZXA6NSxyYW5rU2VwOjI1LGVkZ2VTZXA6NX0sc2VyaWVzOntub2RlU2VwOjUscmFua1NlcDoyNSxlZGdlU2VwOjV9LHBhZGRpbmc6e3BhZGRpbmdUb3A6NDAscGFkZGluZ0xlZnQ6MjB9fSxzdWJzY2VuZTp7bWV0YTp7cGFkZGluZ1RvcDoxMCxwYWRkaW5nQm90dG9tOjEwLHBhZGRpbmdMZWZ0OjEwLHBhZGRpbmdSaWdodDoxMCxsYWJlbEhlaWdodDoyMCxleHRyYWN0WE9mZnNldDoxNSxleHRyYWN0WU9mZnNldDoyMH0sc2VyaWVzOntwYWRkaW5nVG9wOjEwLHBhZGRpbmdCb3R0b206MTAscGFkZGluZ0xlZnQ6MTAscGFkZGluZ1JpZ2h0OjEwLGxhYmVsSGVpZ2h0OjEwfX0sbm9kZVNpemU6e21ldGE6e3JhZGl1czo1LHdpZHRoOjYwLG1heExhYmVsV2lkdGg6NTIsaGVpZ2h0OkRNKCkuZG9tYWluKFsxLDIwMF0pLnJhbmdlKFsxNSw2MF0pLmNsYW1wKCEwKSxleHBhbmRCdXR0b25SYWRpdXM6M30sb3A6e3dpZHRoOjE1LGhlaWdodDo2LHJhZGl1czozLGxhYmVsT2Zmc2V0Oi04LG1heExhYmVsV2lkdGg6MzB9LHNlcmllczp7ZXhwYW5kZWQ6e3JhZGl1czoxMCxsYWJlbE9mZnNldDowfSx2ZXJ0aWNhbDp7d2lkdGg6MTYsaGVpZ2h0OjEzLGxhYmVsT2Zmc2V0Oi0xM30saG9yaXpvbnRhbDp7d2lkdGg6MjQsaGVpZ2h0OjgscmFkaXVzOjEwLGxhYmVsT2Zmc2V0Oi0xMH19LGJyaWRnZTp7d2lkdGg6MjAsaGVpZ2h0OjIwLHJhZGl1czoyLGxhYmVsT2Zmc2V0OjB9fSxzaG9ydGN1dFNpemU6e29wOnt3aWR0aDoxMCxoZWlnaHQ6NH0sbWV0YTp7d2lkdGg6MTIsaGVpZ2h0OjQscmFkaXVzOjF9LHNlcmllczp7d2lkdGg6MTQsaGVpZ2h0OjR9fSxhbm5vdGF0aW9uczp7aW5ib3hXaWR0aDo1MCxvdXRib3hXaWR0aDo1MCx4T2Zmc2V0OjEwLHlPZmZzZXQ6MyxsYWJlbE9mZnNldDoyLG1heExhYmVsV2lkdGg6NDB9LGNvbnN0YW50OntzaXplOnt3aWR0aDo0LGhlaWdodDo0fX0sc2VyaWVzOnttYXhTdGFja0NvdW50OjMscGFyYWxsZWxTdGFja09mZnNldFJhdGlvOi4yLHRvd2VyU3RhY2tPZmZzZXRSYXRpbzouNX0sbWluaW1hcDp7c2l6ZToxNTB9fSxja3Q9MTQwO2Z1bmN0aW9uIHVrdCh0KXt0Lm5vZGUuaXNHcm91cE5vZGUmJihmdW5jdGlvbiBlKHQpe2xldCBlPXQuY29yZUdyYXBoLm5vZGVzKCkubWFwKChlPT50LmNvcmVHcmFwaC5ub2RlKGUpKSkuY29uY2F0KHQuaXNvbGF0ZWRJbkV4dHJhY3QsdC5pc29sYXRlZE91dEV4dHJhY3QsdC5saWJyYXJ5RnVuY3Rpb25zRXh0cmFjdCk7d2UuZWFjaChlLCh0PT57c3dpdGNoKHQubm9kZS50eXBlKXtjYXNlIHZBdC5PUDp3ZS5leHRlbmQodCxsa3Qubm9kZVNpemUub3ApO2JyZWFrO2Nhc2UgdkF0LkJSSURHRTp3ZS5leHRlbmQodCxsa3Qubm9kZVNpemUuYnJpZGdlKTticmVhaztjYXNlIHZBdC5NRVRBOnQuZXhwYW5kZWQ/dWt0KHQpOih3ZS5leHRlbmQodCxsa3Qubm9kZVNpemUubWV0YSksdC5oZWlnaHQ9bGt0Lm5vZGVTaXplLm1ldGEuaGVpZ2h0KHQubm9kZS5jYXJkaW5hbGl0eSkpO2JyZWFrO2Nhc2UgdkF0LlNFUklFUzp0LmV4cGFuZGVkPyh3ZS5leHRlbmQodCxsa3Qubm9kZVNpemUuc2VyaWVzLmV4cGFuZGVkKSx1a3QodCkpOndlLmV4dGVuZCh0LHQubm9kZS5oYXNOb25Db250cm9sRWRnZXM/bGt0Lm5vZGVTaXplLnNlcmllcy52ZXJ0aWNhbDpsa3Qubm9kZVNpemUuc2VyaWVzLmhvcml6b250YWwpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoIlVucmVjb2duaXplZCBub2RlIHR5cGU6ICIrdC5ub2RlLnR5cGUpfXQuZXhwYW5kZWR8fChmdW5jdGlvbiBlKHQpe3QuaW5ib3hXaWR0aD10LmluQW5ub3RhdGlvbnMubGlzdC5sZW5ndGg+MD9sa3QuYW5ub3RhdGlvbnMuaW5ib3hXaWR0aDowLHQub3V0Ym94V2lkdGg9dC5vdXRBbm5vdGF0aW9ucy5saXN0Lmxlbmd0aD4wP2xrdC5hbm5vdGF0aW9ucy5vdXRib3hXaWR0aDowLHQuY29yZUJveC53aWR0aD10LndpZHRoLHQuY29yZUJveC5oZWlnaHQ9dC5oZWlnaHQsdC53aWR0aD1NYXRoLm1heCh0LmNvcmVCb3gud2lkdGgrdC5pbmJveFdpZHRoK3Qub3V0Ym94V2lkdGgsMyp0LmRpc3BsYXlOYW1lLmxlbmd0aCl9KSh0KSwoZnVuY3Rpb24gbih0KXtpZih0LmV4cGFuZGVkKXJldHVybjtsZXQgZT10LmluQW5ub3RhdGlvbnMubGlzdCxuPXQub3V0QW5ub3RhdGlvbnMubGlzdDt3ZS5lYWNoKGUsKHQ9PmRrdCh0KSkpLHdlLmVhY2gobiwodD0+ZGt0KHQpKSk7bGV0IGk9bGt0LmFubm90YXRpb25zLHI9d2UucmVkdWNlKGUsKChlLG4scik9PntsZXQgbz1yPjA/aS55T2Zmc2V0OjA7cmV0dXJuIG4uZHg9LSh0LmNvcmVCb3gud2lkdGgrbi53aWR0aCkvMi1pLnhPZmZzZXQsbi5keT1lK28rbi5oZWlnaHQvMixlK28rbi5oZWlnaHR9KSwwKTt3ZS5lYWNoKGUsKHQ9Pnt0LmR5LT1yLzIsdC5sYWJlbE9mZnNldD1pLmxhYmVsT2Zmc2V0fSkpO2xldCBvPXdlLnJlZHVjZShuLCgoZSxuLHIpPT57bGV0IG89cj4wP2kueU9mZnNldDowO3JldHVybiBuLmR4PSh0LmNvcmVCb3gud2lkdGgrbi53aWR0aCkvMitpLnhPZmZzZXQsbi5keT1lK28rbi5oZWlnaHQvMixlK28rbi5oZWlnaHR9KSwwKTt3ZS5lYWNoKG4sKHQ9Pnt0LmR5LT1vLzIsdC5sYWJlbE9mZnNldD1pLmxhYmVsT2Zmc2V0fSkpO2xldCBhPU1hdGgubWluKHQuaGVpZ2h0LzItdC5yYWRpdXMsci8yKTthPWE8MD8wOmE7bGV0IHM9RE0oKS5kb21haW4oWzAsZS5sZW5ndGgtMV0pLnJhbmdlKFstYSxhXSk7d2UuZWFjaChlLCgobixpKT0+e24ucG9pbnRzPVt7ZHg6bi5keCtuLndpZHRoLzIsZHk6bi5keX0se2R4Oi10LmNvcmVCb3gud2lkdGgvMixkeTplLmxlbmd0aD4xP3MoaSk6MH1dfSkpO2xldCBsPU1hdGgubWluKHQuaGVpZ2h0LzItdC5yYWRpdXMsby8yKTtsPWw8MD8wOmw7bGV0IGM9RE0oKS5kb21haW4oWzAsbi5sZW5ndGgtMV0pLnJhbmdlKFstbCxsXSk7d2UuZWFjaChuLCgoZSxpKT0+e2UucG9pbnRzPVt7ZHg6dC5jb3JlQm94LndpZHRoLzIsZHk6bi5sZW5ndGg+MT9jKGkpOjB9LHtkeDplLmR4LWUud2lkdGgvMixkeTplLmR5fV19KSksdC5oZWlnaHQ9TWF0aC5tYXgodC5oZWlnaHQscixvKX0pKHQpfSkpfSkodCksdC5ub2RlLnR5cGU9PT12QXQuTUVUQT8oZnVuY3Rpb24gbih0KXtsZXQgZT1sa3Quc3Vic2NlbmUubWV0YTt3ZS5leHRlbmQodCxlKSx3ZS5leHRlbmQodC5jb3JlQm94LGhrdCh0LmNvcmVHcmFwaCxsa3QuZ3JhcGgubWV0YSkpO2xldCBuPXQuaXNvbGF0ZWRJbkV4dHJhY3QubGVuZ3RoP3dlLm1heEJ5KHQuaXNvbGF0ZWRJbkV4dHJhY3QsKHQ9PnQud2lkdGgpKS53aWR0aDpudWxsO3QuaW5FeHRyYWN0Qm94LndpZHRoPW51bGwhPW4/bjowLHQuaW5FeHRyYWN0Qm94LmhlaWdodD13ZS5yZWR1Y2UodC5pc29sYXRlZEluRXh0cmFjdCwoKHQsbixpKT0+e2xldCByPWk+MD9lLmV4dHJhY3RZT2Zmc2V0OjA7cmV0dXJuIG4ueD0wLG4ueT10K3Irbi5oZWlnaHQvMix0K3Irbi5oZWlnaHR9KSwwKTtsZXQgaT10Lmlzb2xhdGVkT3V0RXh0cmFjdC5sZW5ndGg/d2UubWF4QnkodC5pc29sYXRlZE91dEV4dHJhY3QsKHQ9PnQud2lkdGgpKS53aWR0aDpudWxsO3Qub3V0RXh0cmFjdEJveC53aWR0aD1udWxsIT1pP2k6MCx0Lm91dEV4dHJhY3RCb3guaGVpZ2h0PXdlLnJlZHVjZSh0Lmlzb2xhdGVkT3V0RXh0cmFjdCwoKHQsbixpKT0+e2xldCByPWk+MD9lLmV4dHJhY3RZT2Zmc2V0OjA7cmV0dXJuIG4ueD0wLG4ueT10K3Irbi5oZWlnaHQvMix0K3Irbi5oZWlnaHR9KSwwKTtsZXQgcj10LmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0Lmxlbmd0aD93ZS5tYXhCeSh0LmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0LCh0PT50LndpZHRoKSkud2lkdGg6bnVsbDt0LmxpYnJhcnlGdW5jdGlvbnNCb3gud2lkdGg9bnVsbCE9cj9yOjAsdC5saWJyYXJ5RnVuY3Rpb25zQm94LmhlaWdodD13ZS5yZWR1Y2UodC5saWJyYXJ5RnVuY3Rpb25zRXh0cmFjdCwoKHQsbixpKT0+e2xldCByPWk+MD9lLmV4dHJhY3RZT2Zmc2V0OjA7cmV0dXJuIG4ueD0wLG4ueT10K3Irbi5oZWlnaHQvMix0K3Irbi5oZWlnaHR9KSwwKTtsZXQgbz0wO3QuaXNvbGF0ZWRJbkV4dHJhY3QubGVuZ3RoPjAmJm8rKyx0Lmlzb2xhdGVkT3V0RXh0cmFjdC5sZW5ndGg+MCYmbysrLHQubGlicmFyeUZ1bmN0aW9uc0V4dHJhY3QubGVuZ3RoPjAmJm8rKyx0LmNvcmVHcmFwaC5ub2RlQ291bnQoKT4wJiZvKys7bGV0IGE9bzw9MT8wOm8qbGt0LnN1YnNjZW5lLm1ldGEuZXh0cmFjdFhPZmZzZXQ7Y29uc3Qgcz1NYXRoLm1heChja3QsdC5pbkV4dHJhY3RCb3gud2lkdGgrdC5vdXRFeHRyYWN0Qm94LndpZHRoKTt0LmNvcmVCb3gud2lkdGgrPXMrYSt0LmxpYnJhcnlGdW5jdGlvbnNCb3gud2lkdGgrYSx0LmNvcmVCb3guaGVpZ2h0PWUubGFiZWxIZWlnaHQrTWF0aC5tYXgodC5pbkV4dHJhY3RCb3guaGVpZ2h0LHQuY29yZUJveC5oZWlnaHQsdC5saWJyYXJ5RnVuY3Rpb25zQm94LmhlaWdodCx0Lm91dEV4dHJhY3RCb3guaGVpZ2h0KSx0LndpZHRoPXQuY29yZUJveC53aWR0aCtlLnBhZGRpbmdMZWZ0K2UucGFkZGluZ1JpZ2h0LHQuaGVpZ2h0PXQucGFkZGluZ1RvcCt0LmNvcmVCb3guaGVpZ2h0K3QucGFkZGluZ0JvdHRvbX0pKHQpOnQubm9kZS50eXBlPT09dkF0LlNFUklFUyYmKGZ1bmN0aW9uIGkodCl7bGV0IGU9dC5jb3JlR3JhcGgsbj1sa3Quc3Vic2NlbmUuc2VyaWVzO3dlLmV4dGVuZCh0LG4pLHdlLmV4dGVuZCh0LmNvcmVCb3gsaGt0KHQuY29yZUdyYXBoLGxrdC5ncmFwaC5zZXJpZXMpKSx3ZS5lYWNoKGUubm9kZXMoKSwodD0+e2Uubm9kZSh0KS5leGNsdWRlZD0hMX0pKSx0LndpZHRoPXQuY29yZUJveC53aWR0aCtuLnBhZGRpbmdMZWZ0K24ucGFkZGluZ1JpZ2h0LHQuaGVpZ2h0PXQuY29yZUJveC5oZWlnaHQrbi5wYWRkaW5nVG9wK24ucGFkZGluZ0JvdHRvbX0pKHQpfWZ1bmN0aW9uIGhrdCh0LGUpe3dlLmV4dGVuZCh0LmdyYXBoKCkse25vZGVzZXA6ZS5ub2RlU2VwLHJhbmtzZXA6ZS5yYW5rU2VwLGVkZ2VzZXA6ZS5lZGdlU2VwfSk7bGV0IG49W107aWYod2UuZWFjaCh0Lm5vZGVzKCksKGU9Pnt0Lm5vZGUoZSkubm9kZS50eXBlPT09dkF0LkJSSURHRXx8bi5wdXNoKGUpfSkpLCFuLmxlbmd0aClyZXR1cm57d2lkdGg6MCxoZWlnaHQ6MH07R0N0LmxheW91dCh0KTtsZXQgaT0xLzAscj0xLzAsbz0tMS8wLGE9LTEvMDtyZXR1cm4gd2UuZWFjaChuLChlPT57bGV0IG49dC5ub2RlKGUpLHM9LjUqbi53aWR0aCxsPW4ueC1zLGM9bi54K3M7aT1sPGk/bDppLG89Yz5vP2M6bztsZXQgdT0uNSpuLmhlaWdodCxoPW4ueS11LGQ9bi55K3U7cj1oPHI/aDpyLGE9ZD5hP2Q6YX0pKSx3ZS5lYWNoKHQuZWRnZXMoKSwoZT0+e2xldCBuPXQuZWRnZShlKTtpZihuLnN0cnVjdHVyYWwpcmV0dXJuO2xldCBzPXQubm9kZShuLm1ldGFlZGdlLnYpLGw9dC5ub2RlKG4ubWV0YWVkZ2Uudyk7aWYoMz09PW4ucG9pbnRzLmxlbmd0aCYmKGZ1bmN0aW9uIGModCl7bGV0IGU9Zmt0KHRbMF0sdFsxXSk7Zm9yKGxldCBuPTE7bjx0Lmxlbmd0aC0xO24rKyl7bGV0IGk9Zmt0KHRbbl0sdFtuKzFdKTtpZihNYXRoLmFicyhpLWUpPjEpcmV0dXJuITE7ZT1pfXJldHVybiEwfSkobi5wb2ludHMpKXtpZihudWxsIT1zKXtsZXQgdD1zLmV4cGFuZGVkP3MueDpwa3Qocyk7bi5wb2ludHNbMF0ueD10fWlmKG51bGwhPWwpe2xldCB0PWwuZXhwYW5kZWQ/bC54OnBrdChsKTtuLnBvaW50c1syXS54PXR9bi5wb2ludHM9W24ucG9pbnRzWzBdLG4ucG9pbnRzWzFdXX1udWxsIT1sJiYobi5wb2ludHNbbi5wb2ludHMubGVuZ3RoLTFdPW1rdChuLnBvaW50c1tuLnBvaW50cy5sZW5ndGgtMl0sbCkpLG51bGwhPXMmJihuLnBvaW50c1swXT1ta3Qobi5wb2ludHNbMV0scykpLHdlLmVhY2gobi5wb2ludHMsKHQ9PntpPXQueDxpP3QueDppLG89dC54Pm8/dC54Om8scj10Lnk8cj90Lnk6cixhPXQueT5hP3QueTphfSkpfSkpLHdlLmVhY2godC5ub2RlcygpLChlPT57bGV0IG49dC5ub2RlKGUpO24ueC09aSxuLnktPXJ9KSksd2UuZWFjaCh0LmVkZ2VzKCksKGU9Pnt3ZS5lYWNoKHQuZWRnZShlKS5wb2ludHMsKHQ9Pnt0LngtPWksdC55LT1yfSkpfSkpLHt3aWR0aDpvLWksaGVpZ2h0OmEtcn19ZnVuY3Rpb24gZGt0KHQpe3N3aXRjaCh0LmFubm90YXRpb25UeXBlKXtjYXNlIEtBdC5DT05TVEFOVDp3ZS5leHRlbmQodCxsa3QuY29uc3RhbnQuc2l6ZSk7YnJlYWs7Y2FzZSBLQXQuU0hPUlRDVVQ6aWYodC5ub2RlLnR5cGU9PT12QXQuT1Apd2UuZXh0ZW5kKHQsbGt0LnNob3J0Y3V0U2l6ZS5vcCk7ZWxzZSBpZih0Lm5vZGUudHlwZT09PXZBdC5NRVRBKXdlLmV4dGVuZCh0LGxrdC5zaG9ydGN1dFNpemUubWV0YSk7ZWxzZXtpZih0Lm5vZGUudHlwZSE9PXZBdC5TRVJJRVMpdGhyb3cgRXJyb3IoIkludmFsaWQgbm9kZSB0eXBlOiAiK3Qubm9kZS50eXBlKTt3ZS5leHRlbmQodCxsa3Quc2hvcnRjdXRTaXplLnNlcmllcyl9YnJlYWs7Y2FzZSBLQXQuU1VNTUFSWTp3ZS5leHRlbmQodCxsa3QuY29uc3RhbnQuc2l6ZSl9fWZ1bmN0aW9uIHBrdCh0KXtyZXR1cm4gdC5leHBhbmRlZD90Lng6dC54LXQud2lkdGgvMisodC5pbkFubm90YXRpb25zLmxpc3QubGVuZ3RoP3QuaW5ib3hXaWR0aDowKSt0LmNvcmVCb3gud2lkdGgvMn1mdW5jdGlvbiBma3QodCxlKXtyZXR1cm4gMTgwKk1hdGguYXRhbigoZS55LXQueSkvKGUueC10LngpKS9NYXRoLlBJfWZ1bmN0aW9uIG1rdCh0LGUpe2xldCBuLGkscj1lLmV4cGFuZGVkP2UueDpwa3QoZSksbz1lLnksYT10LngtcixzPXQueS1vLGw9ZS5leHBhbmRlZD9lLndpZHRoOmUuY29yZUJveC53aWR0aCxjPWUuZXhwYW5kZWQ/ZS5oZWlnaHQ6ZS5jb3JlQm94LmhlaWdodDtyZXR1cm4gTWF0aC5hYnMocykqbC8yPk1hdGguYWJzKGEpKmMvMj8oczwwJiYoYz0tYyksbj0wPT09cz8wOmMvMiphL3MsaT1jLzIpOihhPDAmJihsPS1sKSxuPWwvMixpPTA9PT1hPzA6bC8yKnMvYSkse3g6cituLHk6bytpfX1jb25zdCBna3Q9WkN0LF9rdD0kQ3Q7bGV0IHlrdD1be2JhY2tncm91bmRfY29sb3I6IiNDQzJGMkMiLGxhYmVsOiJOYU4ifSx7YmFja2dyb3VuZF9jb2xvcjoiI0ZGOEQwMCIsbGFiZWw6Ii3iiJ4ifSx7YmFja2dyb3VuZF9jb2xvcjoiI0VBRUFFQSIsbGFiZWw6Ii0ifSx7YmFja2dyb3VuZF9jb2xvcjoiI0E1QTVBNSIsbGFiZWw6IjAifSx7YmFja2dyb3VuZF9jb2xvcjoiIzI2MjYyNiIsbGFiZWw6IisifSx7YmFja2dyb3VuZF9jb2xvcjoiIzAwM0VENCIsbGFiZWw6IiviiJ4ifV07ZnVuY3Rpb24gdmt0KHQsZSxuKXtudWxsIT10LmF0dHIoInRyYW5zZm9ybSIpJiYodD10LnRyYW5zaXRpb24oInBvc2l0aW9uIikpLHQuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrZSsiLCIrbisiKSIpfWZ1bmN0aW9uIGJrdCh0LGUsbixpLHIpe3QudHJhbnNpdGlvbigpLmF0dHIoIngiLGUtaS8yKS5hdHRyKCJ5IixuLXIvMikuYXR0cigid2lkdGgiLGkpLmF0dHIoImhlaWdodCIscil9ZnVuY3Rpb24geGt0KHQsZSxuLGkscil7dC50cmFuc2l0aW9uKCkuYXR0cigiY3giLGUpLmF0dHIoImN5IixuKS5hdHRyKCJyeCIsaS8yKS5hdHRyKCJyeSIsci8yKX1mdW5jdGlvbiB3a3QodCxlKXtyZXR1cm4gZT90LnRvRml4ZWQoMCk6TWF0aC5hYnModCk+PTE/dC50b0ZpeGVkKDEpOnQudG9FeHBvbmVudGlhbCgxKX1sZXQgU2t0PWNsYXNzIGV4dGVuZHModHIoeWUpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5zcGVjaWZpY0hlYWx0aFBpbGxTdGVwPTAsdGhpcy5oZWFsdGhQaWxsRW50cmllcz15a3R9cmVhZHkoKXtzdXBlci5yZWFkeSgpO3ZhciB0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYWluQ29udGFpbmVyIiksZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJ0Zi1kYXNoYm9hcmQtbGF5b3V0IC5zY3JvbGxiYXIiKTt0JiZlJiYodC5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIixlLnN0eWxlLm92ZXJmbG93PSJoaWRkZW4iKX1faGVhbHRoUGlsbHNBdmFpbGFibGUodCxlKXtyZXR1cm4gdCYmZX1fY29tcHV0ZVRlbnNvckNvdW50U3RyaW5nKHQsZSl7cmV0dXJuIHQ/dFtlXS50b0ZpeGVkKDApOiIifWdldCBoZWFsdGhQaWxsVmFsdWVzRm9yU2VsZWN0ZWROb2RlKCl7dmFyIHQ9dGhpcy5zZWxlY3RlZE5vZGU7aWYodGhpcy5hcmVIZWFsdGhQaWxsc0xvYWRpbmcpcmV0dXJuIG51bGw7aWYoIXQpcmV0dXJuIG51bGw7Y29uc3QgZT10aGlzLm5vZGVOYW1lc1RvSGVhbHRoUGlsbHNbdF07aWYoIWUpcmV0dXJuIG51bGw7Y29uc3Qgbj1lW3RoaXMuYWxsU3RlcHNNb2RlRW5hYmxlZD8wOnRoaXMuaGVhbHRoUGlsbFN0ZXBJbmRleF07cmV0dXJuIG4/bi52YWx1ZS5zbGljZSgyLDgpOm51bGx9Z2V0IF9jdXJyZW50U3RlcERpc3BsYXlWYWx1ZSgpe3ZhciB0PXRoaXMubm9kZU5hbWVzVG9IZWFsdGhQaWxscyxlPXRoaXMuaGVhbHRoUGlsbFN0ZXBJbmRleCxuPXRoaXMuYXJlSGVhbHRoUGlsbHNMb2FkaW5nO2lmKHRoaXMuYWxsU3RlcHNNb2RlRW5hYmxlZClyZXR1cm4gdGhpcy5zcGVjaWZpY0hlYWx0aFBpbGxTdGVwLnRvRml4ZWQoMCk7aWYobilyZXR1cm4gMDtmb3IobGV0IG4gaW4gdClyZXR1cm4gdFtuXVtlXS5zdGVwLnRvRml4ZWQoMCk7cmV0dXJuIDB9Z2V0IF9iaWdnZXN0U3RlcEV2ZXJTZWVuKCl7dmFyIHQ9dGhpcy5ub2RlTmFtZXNUb0hlYWx0aFBpbGxzO2ZvcihsZXQgbiBpbiB0KXt2YXIgZT10W25dO3JldHVybiBNYXRoLm1heCh0aGlzLl9iaWdnZXN0U3RlcEV2ZXJTZWVuLGVbZS5sZW5ndGgtMV0uc3RlcCl9cmV0dXJuIHRoaXMuX2JpZ2dlc3RTdGVwRXZlclNlZW58fDB9Z2V0IF9tYXhTdGVwSW5kZXgoKXt2YXIgdD10aGlzLm5vZGVOYW1lc1RvSGVhbHRoUGlsbHM7Zm9yKGxldCBlIGluIHQpcmV0dXJuIHRbZV0ubGVuZ3RoLTE7cmV0dXJuIDB9X2hhc0RlYnVnZ2VyTnVtZXJpY0FsZXJ0cyh0KXtyZXR1cm4gdCYmdC5sZW5ndGh9X3VwZGF0ZUFsZXJ0c0xpc3QoKXt2YXIgdD10aGlzLmRlYnVnZ2VyTnVtZXJpY0FsZXJ0cyxlPXRoaXMuJCQoIiNudW1lcmljLWFsZXJ0cy1ib2R5Iik7aWYoZSl7ZS5pbm5lclRleHQ9IiI7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPXRbbl0scj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpLG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTtvLmlubmVyVGV4dD0oZj1pLmZpcnN0X3RpbWVzdGFtcCwobT0rbmV3IERhdGUtK25ldyBEYXRlKGYvMWUzKSk8M2U0PyJqdXN0IG5vdyI6bTw2ZTQ/TWF0aC5mbG9vcihtLzFlMykrIiBzZWNvbmRzIGFnbyI6bTwxMmU0PyJhIG1pbnV0ZSBhZ28iOm08MzZlNT9NYXRoLmZsb29yKG0vNmU0KSsiIG1pbnV0ZXMgYWdvIjoxPT1NYXRoLmZsb29yKG0vMzZlNSk/ImFuIGhvdXIgYWdvIjptPDg2NGU1P01hdGguZmxvb3IobS8zNmU1KSsiIGhvdXJzIGFnbyI6bTwxNzI4ZTU/Inllc3RlcmRheSI6TWF0aC5mbG9vcihtLzg2NGU1KSsiIGRheXMgYWdvIiksby5jbGFzc0xpc3QuYWRkKCJmaXJzdC1vZmZlbnNlLXRkIiksci5hcHBlbmRDaGlsZChvKTt2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpO2EuY2xhc3NMaXN0LmFkZCgidGVuc29yLWRldmljZS10ZCIpO3ZhciBzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3MuY2xhc3NMaXN0LmFkZCgidGVuc29yLXNlY3Rpb24td2l0aGluLXRhYmxlIikscy5pbm5lclRleHQ9aS50ZW5zb3JfbmFtZSx0aGlzLl9hZGRPcEV4cGFuc2lvbkxpc3RlbmVyKHMsaS50ZW5zb3JfbmFtZSksYS5hcHBlbmRDaGlsZChzKTt2YXIgbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtsLmNsYXNzTGlzdC5hZGQoImRldmljZS1zZWN0aW9uLXdpdGhpbi10YWJsZSIpLGwuaW5uZXJUZXh0PSIoIitpLmRldmljZV9uYW1lKyIpIixhLmFwcGVuZENoaWxkKGwpLHIuYXBwZW5kQ2hpbGQoYSk7dmFyIGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Yy5jbGFzc0xpc3QuYWRkKCJtaW5pLWhlYWx0aC1waWxsIik7dmFyIHU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTtpZih1LmNsYXNzTGlzdC5hZGQoIm1pbmktaGVhbHRoLXBpbGwtdGQiKSx1LmFwcGVuZENoaWxkKGMpLHIuYXBwZW5kQ2hpbGQodSksaS5uZWdfaW5mX2V2ZW50X2NvdW50KXt2YXIgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtoLmNsYXNzTGlzdC5hZGQoIm5lZ2F0aXZlLWluZi1taW5pLWhlYWx0aC1waWxsLXNlY3Rpb24iKSxoLmlubmVyVGV4dD1pLm5lZ19pbmZfZXZlbnRfY291bnQsaC5zZXRBdHRyaWJ1dGUoInRpdGxlIixpLm5lZ19pbmZfZXZlbnRfY291bnQrIiBldmVudHMgd2l0aCAt4oieIiksYy5hcHBlbmRDaGlsZChoKX1pZihpLnBvc19pbmZfZXZlbnRfY291bnQpe3ZhciBkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2QuY2xhc3NMaXN0LmFkZCgicG9zaXRpdmUtaW5mLW1pbmktaGVhbHRoLXBpbGwtc2VjdGlvbiIpLGQuaW5uZXJUZXh0PWkucG9zX2luZl9ldmVudF9jb3VudCxkLnNldEF0dHJpYnV0ZSgidGl0bGUiLGkucG9zX2luZl9ldmVudF9jb3VudCsiIGV2ZW50cyB3aXRoICviiJ4iKSxjLmFwcGVuZENoaWxkKGQpfWlmKGkubmFuX2V2ZW50X2NvdW50KXt2YXIgcD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtwLmNsYXNzTGlzdC5hZGQoIm5hbi1taW5pLWhlYWx0aC1waWxsLXNlY3Rpb24iKSxwLmlubmVyVGV4dD1pLm5hbl9ldmVudF9jb3VudCxwLnNldEF0dHJpYnV0ZSgidGl0bGUiLGkubmFuX2V2ZW50X2NvdW50KyIgZXZlbnRzIHdpdGggTmFOIiksYy5hcHBlbmRDaGlsZChwKX1xaShlKS5hcHBlbmRDaGlsZChyKX12YXIgZixtfX1fYWRkT3BFeHBhbnNpb25MaXN0ZW5lcih0LGUpe3QuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCgoKT0+e3ZhciB0LG49KGZ1bmN0aW9uIGkodCxlLG4pe2NvbnN0IGk9bi5zcGxpdCgiLyIpLHI9aVtpLmxlbmd0aC0xXS5tYXRjaCgvKC4qKTpcdysvKTsyPT09ci5sZW5ndGgmJihpW2kubGVuZ3RoLTFdPXJbMV0pO2xldCBvPWlbMF0sYT1lLmdldFJlbmRlck5vZGVCeU5hbWUobyk7Zm9yKGxldCBuPTE7bjxpLmxlbmd0aCYmYS5ub2RlLnR5cGUhPT12QXQuT1A7bisrKWUuYnVpbGRTdWJoaWVyYXJjaHkobyksYS5leHBhbmRlZD0hMCx0LnNldE5vZGVFeHBhbmRlZChhKSxvKz0iLyIraVtuXSxhPWUuZ2V0UmVuZGVyTm9kZUJ5TmFtZShvKTtyZXR1cm4gYS5ub2RlLm5hbWV9KShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2NlbmUiKSx0aGlzLnJlbmRlckhpZXJhcmNoeSxlKSxyPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInRmLWdyYXBoLWluZm8jZ3JhcGgtaW5mbyIpO3ImJih0PXIuc2Nyb2xsSGVpZ2h0LXIuc2Nyb2xsVG9wKTt2YXIgbz10aGlzLnNlbGVjdGVkTm9kZTt0aGlzLnNldCgic2VsZWN0ZWROb2RlIixuKTt2YXIgYT0oKT0+e3Iuc2Nyb2xsVG9wPXIuc2Nyb2xsSGVpZ2h0LXR9O3ImJihvP2EoKTp3aW5kb3cuc2V0VGltZW91dChhLDIwKSl9KSl9fTt2YXIgTWt0O1NrdC50ZW1wbGF0ZT1fZWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgaDIgewogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgfQoKICAgICAgLmhlYWx0aC1waWxsLWxlZ2VuZCB7CiAgICAgICAgcGFkZGluZzogMTVweDsKICAgICAgfQoKICAgICAgLmhlYWx0aC1waWxsLWxlZ2VuZCBoMiB7CiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKICAgICAgfQoKICAgICAgLmhlYWx0aC1waWxsLWVudHJ5IHsKICAgICAgICBtYXJnaW46IDEwcHggMTBweCAxMHB4IDA7CiAgICAgIH0KCiAgICAgIC5oZWFsdGgtcGlsbC1lbnRyeSAuY29sb3ItcHJldmlldyB7CiAgICAgICAgd2lkdGg6IDI2cHg7CiAgICAgICAgaGVpZ2h0OiAyNnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgbWFyZ2luOiAwIDEwcHggMCAwOwogICAgICB9CgogICAgICAuaGVhbHRoLXBpbGwtZW50cnkgLmNvbG9yLWxhYmVsLAogICAgICAuaGVhbHRoLXBpbGwtZW50cnkgLnRlbnNvci1jb3VudCB7CiAgICAgICAgY29sb3I6ICM3Nzc7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIGhlaWdodDogMjZweDsKICAgICAgICBmb250LXNpemU6IDIycHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDI2cHg7CiAgICAgICAgdmVydGljYWwtYWxpZ246IHRvcDsKICAgICAgfQoKICAgICAgLmhlYWx0aC1waWxsLWVudHJ5IC50ZW5zb3ItY291bnQgewogICAgICAgIGZsb2F0OiByaWdodDsKICAgICAgfQoKICAgICAgI2hlYWx0aC1waWxsLXN0ZXAtc2xpZGVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBtYXJnaW46IDAgMCAwIC0xNXB4OwogICAgICAgIC8qIDMxIGNvbWVzIGZyb20gYWRkaW5nIGEgcGFkZGluZyBvZiAxNXB4IGZyb20gYm90aCBzaWRlcyBvZiB0aGUgcGFwZXItc2xpZGVyLCBzdWJ0cmFjdGluZwogICAqIDFweCBzbyB0aGF0IHRoZSBzbGlkZXIgd2lkdGggYWxpZ25zIHdpdGggdGhlIGltYWdlICh0aGUgbGFzdCBzbGlkZXIgbWFya2VyIHRha2VzIHVwIDFweCksCiAgICogYW5kIGFkZGluZyAycHggdG8gYWNjb3VudCBmb3IgYSBib3JkZXIgb2YgMXB4IG9uIGJvdGggc2lkZXMgb2YgdGhlIGltYWdlLiAzMCAtIDEgKyAyLgogICAqIEFwcGFyZW50bHksIHRoZSBwYXBlci1zbGlkZXIgbGFja3MgYSBtaXhpbiBmb3IgdGhvc2UgcGFkZGluZyB2YWx1ZXMuICovCiAgICAgICAgd2lkdGg6IGNhbGMoMTAwJSArIDMxcHgpOwogICAgICB9CgogICAgICAjaGVhbHRoLXBpbGxzLWxvYWRpbmctc3Bpbm5lciB7CiAgICAgICAgd2lkdGg6IDIwcHg7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7CiAgICAgIH0KCiAgICAgICNoZWFsdGgtcGlsbC1zdGVwLW51bWJlci1pbnB1dCB7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7CiAgICAgIH0KCiAgICAgICNudW1lcmljLWFsZXJ0cy10YWJsZS1jb250YWluZXIgewogICAgICAgIG1heC1oZWlnaHQ6IDQwMHB4OwogICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CgogICAgICAjbnVtZXJpYy1hbGVydHMtdGFibGUgewogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgIH0KCiAgICAgICNudW1lcmljLWFsZXJ0cy10YWJsZSB0ZCB7CiAgICAgICAgdmVydGljYWwtYWxpZ246IHRvcDsKICAgICAgfQoKICAgICAgI251bWVyaWMtYWxlcnRzLXRhYmxlIC5maXJzdC1vZmZlbnNlLXRkIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KCiAgICAgIC5maXJzdC1vZmZlbnNlLXRkIHsKICAgICAgICB3aWR0aDogODBweDsKICAgICAgfQoKICAgICAgLnRlbnNvci1kZXZpY2UtdGQgewogICAgICAgIG1heC13aWR0aDogMTQwcHg7CiAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkOwogICAgICB9CgogICAgICAudGVuc29yLXNlY3Rpb24td2l0aGluLXRhYmxlIHsKICAgICAgICBjb2xvcjogIzI2NjIzNjsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgb3BhY2l0eTogMC44OwogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgICB9CgogICAgICAudGVuc29yLXNlY3Rpb24td2l0aGluLXRhYmxlOmhvdmVyIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAuZGV2aWNlLXNlY3Rpb24td2l0aGluLXRhYmxlIHsKICAgICAgICBjb2xvcjogIzY2NjsKICAgICAgfQoKICAgICAgLm1pbmktaGVhbHRoLXBpbGwgewogICAgICAgIHdpZHRoOiAxMzBweDsKICAgICAgfQoKICAgICAgLm1pbmktaGVhbHRoLXBpbGwgPiBkaXYgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICB3aWR0aDogNjBweDsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgIH0KCiAgICAgICNldmVudC1jb3VudHMtdGggewogICAgICAgIHBhZGRpbmc6IDAgMCAwIDEwcHg7CiAgICAgIH0KCiAgICAgIC5uZWdhdGl2ZS1pbmYtbWluaS1oZWFsdGgtcGlsbC1zZWN0aW9uIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2IoMjU1LCAxNDEsIDApOwogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICB9CgogICAgICAucG9zaXRpdmUtaW5mLW1pbmktaGVhbHRoLXBpbGwtc2VjdGlvbiB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiKDAsIDYyLCAyMTIpOwogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICB9CgogICAgICAubmFuLW1pbmktaGVhbHRoLXBpbGwtc2VjdGlvbiB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiKDIwNCwgNDcsIDQ0KTsKICAgICAgICB3aWR0aDogMjBweDsKICAgICAgfQoKICAgICAgLm5lZ2F0aXZlLWluZi1taW5pLWhlYWx0aC1waWxsLXNlY3Rpb24sCiAgICAgIC5wb3NpdGl2ZS1pbmYtbWluaS1oZWFsdGgtcGlsbC1zZWN0aW9uLAogICAgICAubmFuLW1pbmktaGVhbHRoLXBpbGwtc2VjdGlvbiB7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBsaW5lLWhlaWdodDogMjBweDsKICAgICAgICBtYXJnaW46IDAgMCAwIDEwcHg7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICB9CgogICAgICAubm8tbnVtZXJpYy1hbGVydHMtbm90aWZpY2F0aW9uIHsKICAgICAgICBtYXJnaW46IDA7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8cGFwZXItbWF0ZXJpYWwgZWxldmF0aW9uPSIxIiBjbGFzcz0iY2FyZCBoZWFsdGgtcGlsbC1sZWdlbmQiPgogICAgICA8ZGl2IGNsYXNzPSJ0aXRsZSI+CiAgICAgICAgRW5hYmxlIGFsbCAobm90IGp1c3Qgc2FtcGxlZCkgc3RlcHMuIFJlcXVpcmVzIHNsb3cgZGlzayByZWFkLgogICAgICA8L2Rpdj4KICAgICAgPHBhcGVyLXRvZ2dsZS1idXR0b24KICAgICAgICBpZD0iZW5hYmxlQWxsU3RlcHNNb2RlVG9nZ2xlIgogICAgICAgIGNoZWNrZWQ9Int7YWxsU3RlcHNNb2RlRW5hYmxlZH19IgogICAgICA+CiAgICAgIDwvcGFwZXItdG9nZ2xlLWJ1dHRvbj4KICAgICAgPGgyPgogICAgICAgIFN0ZXAgb2YgSGVhbHRoIFBpbGxzOgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1thbGxTdGVwc01vZGVFbmFibGVkXV0iPgogICAgICAgICAgPGlucHV0CiAgICAgICAgICAgIHR5cGU9Im51bWJlciIKICAgICAgICAgICAgaWQ9ImhlYWx0aC1waWxsLXN0ZXAtbnVtYmVyLWlucHV0IgogICAgICAgICAgICBtaW49IjAiCiAgICAgICAgICAgIG1heD0iW1tfYmlnZ2VzdFN0ZXBFdmVyU2Vlbl1dIgogICAgICAgICAgICB2YWx1ZT0ie3tzcGVjaWZpY0hlYWx0aFBpbGxTdGVwOjppbnB1dH19IgogICAgICAgICAgLz4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shYWxsU3RlcHNNb2RlRW5hYmxlZF1dIj4KICAgICAgICAgIFtbX2N1cnJlbnRTdGVwRGlzcGxheVZhbHVlXV0KICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDxwYXBlci1zcGlubmVyLWxpdGUKICAgICAgICAgIGFjdGl2ZQogICAgICAgICAgaGlkZGVuJD0iW1shYXJlSGVhbHRoUGlsbHNMb2FkaW5nXV0iCiAgICAgICAgICBpZD0iaGVhbHRoLXBpbGxzLWxvYWRpbmctc3Bpbm5lciIKICAgICAgICA+PC9wYXBlci1zcGlubmVyLWxpdGU+CiAgICAgIDwvaDI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1thbGxTdGVwc01vZGVFbmFibGVkXV0iPgogICAgICAgIDxwYXBlci1zbGlkZXIKICAgICAgICAgIGlkPSJoZWFsdGgtcGlsbC1zdGVwLXNsaWRlciIKICAgICAgICAgIGltbWVkaWF0ZS12YWx1ZT0ie3tzcGVjaWZpY0hlYWx0aFBpbGxTdGVwfX0iCiAgICAgICAgICBtYXg9IltbX2JpZ2dlc3RTdGVwRXZlclNlZW5dXSIKICAgICAgICAgIHNuYXBzCiAgICAgICAgICBzdGVwPSIxIgogICAgICAgICAgdmFsdWU9Int7c3BlY2lmaWNIZWFsdGhQaWxsU3RlcH19IgogICAgICAgID48L3BhcGVyLXNsaWRlcj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFhbGxTdGVwc01vZGVFbmFibGVkXV0iPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfbWF4U3RlcEluZGV4XV0iPgogICAgICAgICAgPHBhcGVyLXNsaWRlcgogICAgICAgICAgICBpZD0iaGVhbHRoLXBpbGwtc3RlcC1zbGlkZXIiCiAgICAgICAgICAgIGltbWVkaWF0ZS12YWx1ZT0ie3toZWFsdGhQaWxsU3RlcEluZGV4fX0iCiAgICAgICAgICAgIG1heD0iW1tfbWF4U3RlcEluZGV4XV0iCiAgICAgICAgICAgIHNuYXBzCiAgICAgICAgICAgIHN0ZXA9IjEiCiAgICAgICAgICAgIHZhbHVlPSJ7e2hlYWx0aFBpbGxTdGVwSW5kZXh9fSIKICAgICAgICAgID48L3BhcGVyLXNsaWRlcj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L3RlbXBsYXRlPgogICAgICA8aDI+CiAgICAgICAgSGVhbHRoIFBpbGwKICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbaGVhbHRoUGlsbFZhbHVlc0ZvclNlbGVjdGVkTm9kZV1dIj4KICAgICAgICAgIENvdW50cyBmb3IgU2VsZWN0ZWQgTm9kZQogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFoZWFsdGhQaWxsVmFsdWVzRm9yU2VsZWN0ZWROb2RlXV0iPgogICAgICAgICAgTGVnZW5kCiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9oMj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1toZWFsdGhQaWxsRW50cmllc11dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFsdGgtcGlsbC1lbnRyeSI+CiAgICAgICAgICA8ZGl2CiAgICAgICAgICAgIGNsYXNzPSJjb2xvci1wcmV2aWV3IgogICAgICAgICAgICBzdHlsZT0iYmFja2dyb3VuZDpbW2l0ZW0uYmFja2dyb3VuZF9jb2xvcl1dIgogICAgICAgICAgPjwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGFiZWwiPltbaXRlbS5sYWJlbF1dPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0ZW5zb3ItY291bnQiPgogICAgICAgICAgICBbW19jb21wdXRlVGVuc29yQ291bnRTdHJpbmcoaGVhbHRoUGlsbFZhbHVlc0ZvclNlbGVjdGVkTm9kZSwKICAgICAgICAgICAgaW5kZXgpXV0KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgICA8ZGl2IGhpZGRlbiQ9IltbIV9oYXNEZWJ1Z2dlck51bWVyaWNBbGVydHMoZGVidWdnZXJOdW1lcmljQWxlcnRzKV1dIj4KICAgICAgICA8aDIgaWQ9Im51bWVyaWMtYWxlcnRzLWhlYWRlciI+TnVtZXJpYyBBbGVydHM8L2gyPgogICAgICAgIDxwPkFsZXJ0cyBhcmUgc29ydGVkIGZyb20gdG9wIHRvIGJvdHRvbSBieSBpbmNyZWFzaW5nIHRpbWVzdGFtcC48L3A+CiAgICAgICAgPGRpdiBpZD0ibnVtZXJpYy1hbGVydHMtdGFibGUtY29udGFpbmVyIj4KICAgICAgICAgIDx0YWJsZSBpZD0ibnVtZXJpYy1hbGVydHMtdGFibGUiPgogICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgPHRoPkZpcnN0IE9mZmVuc2U8L3RoPgogICAgICAgICAgICAgICAgPHRoPlRlbnNvciAoRGV2aWNlKTwvdGg+CiAgICAgICAgICAgICAgICA8dGggaWQ9ImV2ZW50LWNvdW50cy10aCI+RXZlbnQgQ291bnRzPC90aD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICA8dGJvZHkgaWQ9Im51bWVyaWMtYWxlcnRzLWJvZHkiPjwvdGJvZHk+CiAgICAgICAgICA8L3RhYmxlPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPHRlbXBsYXRlCiAgICAgICAgaXM9ImRvbS1pZiIKICAgICAgICBpZj0iW1shX2hhc0RlYnVnZ2VyTnVtZXJpY0FsZXJ0cyhkZWJ1Z2dlck51bWVyaWNBbGVydHMpXV0iCiAgICAgID4KICAgICAgICA8cCBjbGFzcz0ibm8tbnVtZXJpYy1hbGVydHMtbm90aWZpY2F0aW9uIj4KICAgICAgICAgIE5vIG51bWVyaWMgYWxlcnRzIHNvIGZhci4gVGhhdCBpcyBsaWtlbHkgZ29vZC4gQWxlcnRzIGluZGljYXRlIHRoZQogICAgICAgICAgcHJlc2VuY2Ugb2YgTmFOIG9yICgrLy0pIEluZmluaXR5IHZhbHVlcywgd2hpY2ggbWF5IGJlIGNvbmNlcm5pbmcuCiAgICAgICAgPC9wPgogICAgICA8L3RlbXBsYXRlPgogICAgPC9wYXBlci1tYXRlcmlhbD4KICBgLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLFhBdCldLFNrdC5wcm90b3R5cGUsInJlbmRlckhpZXJhcmNoeSIsdm9pZCAwKSx0KFtvKHt0eXBlOkFycmF5LG5vdGlmeTohMH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxTa3QucHJvdG90eXBlLCJkZWJ1Z2dlck51bWVyaWNBbGVydHMiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sU2t0LnByb3RvdHlwZSwibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcixub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sU2t0LnByb3RvdHlwZSwiaGVhbHRoUGlsbFN0ZXBJbmRleCIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcixub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sU2t0LnByb3RvdHlwZSwic3BlY2lmaWNIZWFsdGhQaWxsU3RlcCIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sU2t0LnByb3RvdHlwZSwic2VsZWN0ZWROb2RlIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxTa3QucHJvdG90eXBlLCJoaWdobGlnaHRlZE5vZGUiLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXIsbm90aWZ5OiEwfSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLFNrdC5wcm90b3R5cGUsInNlbGVjdGVkTm9kZUluY2x1ZGUiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLFNrdC5wcm90b3R5cGUsImFyZUhlYWx0aFBpbGxzTG9hZGluZyIsdm9pZCAwKSx0KFtvKHt0eXBlOkFycmF5fSksZSgiZGVzaWduOnR5cGUiLEFycmF5KV0sU2t0LnByb3RvdHlwZSwiaGVhbHRoUGlsbEVudHJpZXMiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFuLG5vdGlmeTohMH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxTa3QucHJvdG90eXBlLCJhbGxTdGVwc01vZGVFbmFibGVkIix2b2lkIDApLHQoW3MoIm5vZGVOYW1lc1RvSGVhbHRoUGlsbHMiLCJoZWFsdGhQaWxsU3RlcEluZGV4Iiwic2VsZWN0ZWROb2RlIiwiYWxsU3RlcHNNb2RlRW5hYmxlZCIsImFyZUhlYWx0aFBpbGxzTG9hZGluZyIpLGUoImRlc2lnbjp0eXBlIixBcnJheSksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sU2t0LnByb3RvdHlwZSwiaGVhbHRoUGlsbFZhbHVlc0ZvclNlbGVjdGVkTm9kZSIsbnVsbCksdChbcygibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIsImhlYWx0aFBpbGxTdGVwSW5kZXgiLCJhbGxTdGVwc01vZGVFbmFibGVkIiwic3BlY2lmaWNIZWFsdGhQaWxsU3RlcCIsImFyZUhlYWx0aFBpbGxzTG9hZGluZyIpLGUoImRlc2lnbjp0eXBlIixPYmplY3QpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFNrdC5wcm90b3R5cGUsIl9jdXJyZW50U3RlcERpc3BsYXlWYWx1ZSIsbnVsbCksdChbcygibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIpLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFNrdC5wcm90b3R5cGUsIl9iaWdnZXN0U3RlcEV2ZXJTZWVuIixudWxsKSx0KFtzKCJub2RlTmFtZXNUb0hlYWx0aFBpbGxzIiksZSgiZGVzaWduOnR5cGUiLE51bWJlciksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sU2t0LnByb3RvdHlwZSwiX21heFN0ZXBJbmRleCIsbnVsbCksdChbYSgiZGVidWdnZXJOdW1lcmljQWxlcnRzIiksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pLGUoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxTa3QucHJvdG90eXBlLCJfdXBkYXRlQWxlcnRzTGlzdCIsbnVsbCksU2t0PXQoW2koInRmLWdyYXBoLWRlYnVnZ2VyLWRhdGEtY2FyZCIpXSxTa3QpLChmdW5jdGlvbih0KXt0LkNPTlNUPSJDT05TVCIsdC5NRVRBPSJNRVRBIix0Lk9QPSJPUCIsdC5TRVJJRVM9IlNFUklFUyIsdC5TVU1NQVJZPSJTVU1NQVJZIn0pKE1rdHx8KE1rdD17fSkpO2xldCBFa3Q9Y2xhc3MgZXh0ZW5kcyh0cihubCh5ZSkpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy52ZXJ0aWNhbD0hMSx0aGlzLmZpbGxPdmVycmlkZT1udWxsLHRoaXMuc3Ryb2tlT3ZlcnJpZGU9bnVsbCx0aGlzLmhlaWdodD0yMCx0aGlzLmZhZGVkPSExfWdldFN2Z0RlZmluYWJsZUVsZW1lbnQoKXtyZXR1cm4gdGhpcy4kLnN2Z0RlZnN9Z2V0IF9maWxsKCl7dmFyIHQ9dGhpcy5maWxsT3ZlcnJpZGU7aWYobnVsbCE9dClyZXR1cm4gdDtzd2l0Y2godGhpcy50eXBlKXtjYXNlIE1rdC5NRVRBOnJldHVybiBqQXQuREVGQVVMVF9GSUxMO2Nhc2UgTWt0LlNFUklFUzpyZXR1cm4id2hpdGUiO2RlZmF1bHQ6cmV0dXJuIiNmZmZmZmYifX1nZXQgX3N0cm9rZSgpe3ZhciB0PXRoaXMuc3Ryb2tlT3ZlcnJpZGU7aWYobnVsbCE9dClyZXR1cm4gdDtzd2l0Y2godGhpcy50eXBlKXtjYXNlIE1rdC5NRVRBOnJldHVybiBqQXQuREVGQVVMVF9TVFJPS0U7Y2FzZSBNa3QuU0VSSUVTOmRlZmF1bHQ6cmV0dXJuIiNiMmIyYjIifX1faXNUeXBlKHQsZSl7cmV0dXJuIHQ9PT1lfV9mYWRlZENsYXNzKHQsZSl7cmV0dXJuIHQ/ImZhZGVkLSIrZToiIn19O0VrdC50ZW1wbGF0ZT1fZWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGZvbnQtc2l6ZTogMDsKICAgICAgfQoKICAgICAgOmhvc3QoLmRhcmstbW9kZSkgc3ZnIHsKICAgICAgICBmaWx0ZXI6IGludmVydCgxKTsKICAgICAgfQoKICAgICAgLmZhZGVkLXJlY3QgewogICAgICAgIGZpbGw6IHVybCgjcmVjdEhhdGNoKTsKICAgICAgfQoKICAgICAgLmZhZGVkLWVsbGlwc2UgewogICAgICAgIGZpbGw6IHVybCgjZWxsaXBzZUhhdGNoKTsKICAgICAgfQoKICAgICAgLmZhZGVkLXJlY3QsCiAgICAgIC5mYWRlZC1lbGxpcHNlLAogICAgICAuZmFkZWQtc2VyaWVzIHsKICAgICAgICBzdHJva2U6IHZhcigtLXRiLWdyYXBoLWZhZGVkKSAhaW1wb3J0YW50OwogICAgICB9CiAgICAgICNyZWN0SGF0Y2ggbGluZSwKICAgICAgI2VsbGlwc2VIYXRjaCBsaW5lIHsKICAgICAgICBjb2xvcjogI2UwZDRiMyAhaW1wb3J0YW50OwogICAgICAgIGZpbGw6IHdoaXRlOwogICAgICAgIHN0cm9rZTogI2UwZDRiMyAhaW1wb3J0YW50OwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPCEtLSBTVkcgZm9yIGRlZmluaXRpb25zIC0tPgogICAgPHN2ZyBoZWlnaHQ9IjAiIHdpZHRoPSIwIiBpZD0ic3ZnRGVmcyI+CiAgICAgIDxkZWZzPgogICAgICAgIDwhLS0gSGF0Y2ggcGF0dGVybnMgZm9yIGZhZGVkIG91dCBub2Rlcy4gLS0+CiAgICAgICAgPHBhdHRlcm4KICAgICAgICAgIGlkPSJyZWN0SGF0Y2giCiAgICAgICAgICBwYXR0ZXJuVHJhbnNmb3JtPSJyb3RhdGUoNDUgMCAwKSIKICAgICAgICAgIHdpZHRoPSI1IgogICAgICAgICAgaGVpZ2h0PSI1IgogICAgICAgICAgcGF0dGVyblVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgICA+CiAgICAgICAgICA8bGluZSB4MT0iMCIgeTE9IjAiIHgyPSIwIiB5Mj0iNSIgc3R5bGU9InN0cm9rZS13aWR0aDogMSI+PC9saW5lPgogICAgICAgIDwvcGF0dGVybj4KICAgICAgICA8cGF0dGVybgogICAgICAgICAgaWQ9ImVsbGlwc2VIYXRjaCIKICAgICAgICAgIHBhdHRlcm5UcmFuc2Zvcm09InJvdGF0ZSg0NSAwIDApIgogICAgICAgICAgd2lkdGg9IjIiCiAgICAgICAgICBoZWlnaHQ9IjIiCiAgICAgICAgICBwYXR0ZXJuVW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgID4KICAgICAgICAgIDxsaW5lIHgxPSIwIiB5MT0iMCIgeDI9IjAiIHkyPSIyIiBzdHlsZT0ic3Ryb2tlLXdpZHRoOiAxIj48L2xpbmU+CiAgICAgICAgPC9wYXR0ZXJuPgogICAgICAgIDwhLS0gVGVtcGxhdGUgZm9yIGFuIE9wIG5vZGUgZWxsaXBzZS4gLS0+CiAgICAgICAgPGVsbGlwc2UKICAgICAgICAgIGlkPSJvcC1ub2RlLXN0YW1wIgogICAgICAgICAgcng9IjcuNSIKICAgICAgICAgIHJ5PSIzIgogICAgICAgICAgc3Ryb2tlPSJpbmhlcml0IgogICAgICAgICAgZmlsbD0iaW5oZXJpdCIKICAgICAgICA+PC9lbGxpcHNlPgogICAgICAgIDwhLS0gVGVtcGxhdGUgZm9yIGFuIE9wIG5vZGUgYW5ub3RhdGlvbiBlbGxpcHNlIChzbWFsbGVyKS4gLS0+CiAgICAgICAgPGVsbGlwc2UKICAgICAgICAgIGlkPSJvcC1ub2RlLWFubm90YXRpb24tc3RhbXAiCiAgICAgICAgICByeD0iNSIKICAgICAgICAgIHJ5PSIyIgogICAgICAgICAgc3Ryb2tlPSJpbmhlcml0IgogICAgICAgICAgZmlsbD0iaW5oZXJpdCIKICAgICAgICA+PC9lbGxpcHNlPgogICAgICAgIDwhLS0gVmVydGljYWxseSBzdGFja2VkIHNlcmllcyBvZiBPcCBub2RlcyB3aGVuIHVuZXhwYW5kZWQuIC0tPgogICAgICAgIDxnIGlkPSJvcC1zZXJpZXMtdmVydGljYWwtc3RhbXAiPgogICAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iOCIgeT0iOSI+PC91c2U+CiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSI4IiB5PSI2Ij48L3VzZT4KICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtc3RhbXAiIHg9IjgiIHk9IjMiPjwvdXNlPgogICAgICAgIDwvZz4KICAgICAgICA8ZyBpZD0ib3Atc2VyaWVzLWhvcml6b250YWwtc3RhbXAiPgogICAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iMTYiIHk9IjQiPjwvdXNlPgogICAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iMTIiIHk9IjQiPjwvdXNlPgogICAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iOCIgeT0iNCI+PC91c2U+CiAgICAgICAgPC9nPgogICAgICAgIDxnCiAgICAgICAgICBpZD0ic3VtbWFyeS1pY29uIgogICAgICAgICAgZmlsbD0iIzg0ODQ4NCIKICAgICAgICAgIGhlaWdodD0iMTIiCiAgICAgICAgICB2aWV3Qm94PSIwIDAgMjQgMjQiCiAgICAgICAgICB3aWR0aD0iMTIiCiAgICAgICAgPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgZD0iTTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yek05IDE3SDd2LTdoMnY3em00IDBoLTJWN2gydjEwem00IDBoLTJ2LTRoMnY0eiIKICAgICAgICAgID48L3BhdGg+CiAgICAgICAgPC9nPgogICAgICA8L2RlZnM+CiAgICA8L3N2Zz4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNUeXBlKHR5cGUsICdDT05TVCcpXV0iPgogICAgICA8c3ZnCiAgICAgICAgaGVpZ2h0JD0iW1toZWlnaHRdXSIKICAgICAgICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pZCBtZWV0IgogICAgICAgIHZpZXdCb3g9IjAgMCAxMCAxMCIKICAgICAgPgogICAgICAgIDxjaXJjbGUKICAgICAgICAgIGN4PSI1IgogICAgICAgICAgY3k9IjUiCiAgICAgICAgICByPSIzIgogICAgICAgICAgZmlsbCQ9IltbX2ZpbGxdXSIKICAgICAgICAgIHN0cm9rZSQ9IltbX3N0cm9rZV1dIgogICAgICAgID48L2NpcmNsZT4KICAgICAgPC9zdmc+CiAgICA8L3RlbXBsYXRlPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1R5cGUodHlwZSwgJ1NVTU1BUlknKV1dIj4KICAgICAgPHN2ZwogICAgICAgIHdpZHRoJD0iW1toZWlnaHRdXSIKICAgICAgICBoZWlnaHQkPSJbW2hlaWdodF1dIgogICAgICAgIHZpZXdCb3g9IjAgMCAyNCAyNCIKICAgICAgICBmaWxsPSIjODQ4NDg0IgogICAgICA+CiAgICAgICAgPHBhdGgKICAgICAgICAgIGQ9Ik0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnpNOSAxN0g3di03aDJ2N3ptNCAwaC0yVjdoMnYxMHptNCAwaC0ydi00aDJ2NHoiCiAgICAgICAgPjwvcGF0aD4KICAgICAgPC9zdmc+CiAgICA8L3RlbXBsYXRlPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1R5cGUodHlwZSwgJ09QJyldXSI+CiAgICAgIDxzdmcKICAgICAgICBoZWlnaHQkPSJbW2hlaWdodF1dIgogICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWlkIG1lZXQiCiAgICAgICAgdmlld0JveD0iMCAwIDE2IDgiCiAgICAgID4KICAgICAgICA8dXNlCiAgICAgICAgICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIKICAgICAgICAgIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIgogICAgICAgICAgZmlsbCQ9IltbX2ZpbGxdXSIKICAgICAgICAgIHN0cm9rZSQ9IltbX3N0cm9rZV1dIgogICAgICAgICAgY2xhc3MkPSJ7e19mYWRlZENsYXNzKGZhZGVkLCAnZWxsaXBzZScpfX0iCiAgICAgICAgICB4PSI4IgogICAgICAgICAgeT0iNCIKICAgICAgICA+PC91c2U+CiAgICAgIDwvc3ZnPgogICAgPC90ZW1wbGF0ZT4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNUeXBlKHR5cGUsICdNRVRBJyldXSI+CiAgICAgIDxzdmcKICAgICAgICBoZWlnaHQkPSJbW2hlaWdodF1dIgogICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWlkIG1lZXQiCiAgICAgICAgdmlld0JveD0iMCAwIDM3IDE2IgogICAgICA+CiAgICAgICAgPHJlY3QKICAgICAgICAgIHg9IjEiCiAgICAgICAgICB5PSIxIgogICAgICAgICAgZmlsbCQ9IltbX2ZpbGxdXSIKICAgICAgICAgIHN0cm9rZSQ9IltbX3N0cm9rZV1dIgogICAgICAgICAgY2xhc3MkPSJ7e19mYWRlZENsYXNzKGZhZGVkLCAncmVjdCcpfX0iCiAgICAgICAgICBzdHJva2Utd2lkdGg9IjJweCIKICAgICAgICAgIGhlaWdodD0iMTQiCiAgICAgICAgICB3aWR0aD0iMzUiCiAgICAgICAgICByeD0iNSIKICAgICAgICAgIHJ5PSI1IgogICAgICAgID48L3JlY3Q+CiAgICAgIDwvc3ZnPgogICAgPC90ZW1wbGF0ZT4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNUeXBlKHR5cGUsICdTRVJJRVMnKV1dIj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3ZlcnRpY2FsXV0iPgogICAgICAgIDxzdmcKICAgICAgICAgIGhlaWdodCQ9IltbaGVpZ2h0XV0iCiAgICAgICAgICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pZCBtZWV0IgogICAgICAgICAgdmlld0JveD0iMCAwIDE2IDE1IgogICAgICAgID4KICAgICAgICAgIDx1c2UKICAgICAgICAgICAgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiCiAgICAgICAgICAgIHhsaW5rOmhyZWY9IiNvcC1zZXJpZXMtdmVydGljYWwtc3RhbXAiCiAgICAgICAgICAgIGZpbGwkPSJbW19maWxsXV0iCiAgICAgICAgICAgIHN0cm9rZSQ9IltbX3N0cm9rZV1dIgogICAgICAgICAgICBjbGFzcyQ9Int7X2ZhZGVkQ2xhc3MoZmFkZWQsICdzZXJpZXMnKX19IgogICAgICAgICAgICB4PSIwIgogICAgICAgICAgICB5PSIyIgogICAgICAgICAgPjwvdXNlPgogICAgICAgIDwvc3ZnPgogICAgICA8L3RlbXBsYXRlPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIXZlcnRpY2FsXV0iPgogICAgICAgIDxzdmcKICAgICAgICAgIGhlaWdodCQ9IltbaGVpZ2h0XV0iCiAgICAgICAgICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pZCBtZWV0IgogICAgICAgICAgdmlld0JveD0iMCAwIDI0IDEwIgogICAgICAgID4KICAgICAgICAgIDx1c2UKICAgICAgICAgICAgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiCiAgICAgICAgICAgIHhsaW5rOmhyZWY9IiNvcC1zZXJpZXMtaG9yaXpvbnRhbC1zdGFtcCIKICAgICAgICAgICAgZmlsbCQ9IltbX2ZpbGxdXSIKICAgICAgICAgICAgc3Ryb2tlJD0iW1tfc3Ryb2tlXV0iCiAgICAgICAgICAgIGNsYXNzJD0ie3tfZmFkZWRDbGFzcyhmYWRlZCwgJ3NlcmllcycpfX0iCiAgICAgICAgICAgIHg9IjAiCiAgICAgICAgICAgIHk9IjEiCiAgICAgICAgICA+PC91c2U+CiAgICAgICAgPC9zdmc+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L3RlbXBsYXRlPgogIGAsdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRWt0LnByb3RvdHlwZSwidHlwZSIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEVrdC5wcm90b3R5cGUsInZlcnRpY2FsIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLEVrdC5wcm90b3R5cGUsImZpbGxPdmVycmlkZSIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxFa3QucHJvdG90eXBlLCJzdHJva2VPdmVycmlkZSIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxFa3QucHJvdG90eXBlLCJoZWlnaHQiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxFa3QucHJvdG90eXBlLCJmYWRlZCIsdm9pZCAwKSx0KFtzKCJ0eXBlIiwiZmlsbE92ZXJyaWRlIiksZSgiZGVzaWduOnR5cGUiLFN0cmluZyksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sRWt0LnByb3RvdHlwZSwiX2ZpbGwiLG51bGwpLHQoW3MoInR5cGUiLCJzdHJva2VPdmVycmlkZSIpLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLEVrdC5wcm90b3R5cGUsIl9zdHJva2UiLG51bGwpLEVrdD10KFtpKCJ0Zi1ncmFwaC1pY29uIildLEVrdCk7dmFyIFRrdD1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxnZXQgR3JhcGhJY29uVHlwZSgpe3JldHVybiBNa3R9fSk7ZnVuY3Rpb24gQ2t0KHQsZSl7Y29uc3Qgbj10LmdldENvbnRleHRNZW51KCksaT13dSh0LmdldENvbnRleHRNZW51KCkpO3JldHVybiBmdW5jdGlvbihyLG8pe2xldCBhPWN1O2NvbnN0IHM9KGZ1bmN0aW9uIGwodCl7bGV0IGU9MCxuPTAsaT10O2Zvcig7aSYmaS5vZmZzZXRMZWZ0Pj0wJiZpLm9mZnNldFRvcD49MDspZSs9aS5vZmZzZXRMZWZ0LWkuc2Nyb2xsTGVmdCxuKz1pLm9mZnNldFRvcC1pLnNjcm9sbFRvcCxpPWkub2Zmc2V0UGFyZW50O3JldHVybntsZWZ0OmUsdG9wOm59fSkodCk7ZnVuY3Rpb24gYyh0KXt0JiZ0LmNvbXBvc2VkUGF0aCgpLmluY2x1ZGVzKG4pfHwoaS5zdHlsZSgiZGlzcGxheSIsIm5vbmUiKSxkb2N1bWVudC5ib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsYyx7Y2FwdHVyZTohMH0pKX1pLnN0eWxlKCJkaXNwbGF5IiwiYmxvY2siKS5zdHlsZSgibGVmdCIsYS5jbGllbnRYLXMubGVmdCsxKyJweCIpLnN0eWxlKCJ0b3AiLGEuY2xpZW50WS1zLnRvcCsxKyJweCIpLGEucHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpLGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixjLHtjYXB0dXJlOiEwfSksaS5odG1sKCIiKSxpLmFwcGVuZCgidWwiKS5zZWxlY3RBbGwoImxpIikuZGF0YShlKS5lbnRlcigpLmFwcGVuZCgibGkiKS5vbigiY2xpY2siLCgodCxlKT0+e3QuYWN0aW9uKHRoaXMscixvKSxjKCl9KSkuaHRtbCgoZnVuY3Rpb24odCl7cmV0dXJuIHQudGl0bGUocil9KSl9fWxldCBBa3Q9bkUoKS5kb21haW4oW3RBdCwxMl0pLnJhbmdlKFsic21hbGwiLCJtZWRpdW0iLCJsYXJnZSIsInhsYXJnZSJdKTtmdW5jdGlvbiBra3QodCl7cmV0dXJuIHQudisiLS0iK3Qud31mdW5jdGlvbiBMa3QodCxlKXtsZXQgbj1lLmdldE5vZGVCeU5hbWUodC52KTtpZihudWxsPT1uLm91dHB1dFNoYXBlc3x8d2UuaXNFbXB0eShuLm91dHB1dFNoYXBlcykpcmV0dXJuIG51bGw7bGV0IGk9bi5vdXRwdXRTaGFwZXNbdC5vdXRwdXRUZW5zb3JLZXldO3JldHVybiBudWxsPT1pP251bGw6MD09PWkubGVuZ3RoPyJzY2FsYXIiOmkubWFwKCh0PT4tMT09PXQ/Ij8iOnQpKS5qb2luKCLDlyIpfWZ1bmN0aW9uIFBrdCh0LGUpe3JldHVybiBlLmVkZ2VMYWJlbEZ1bmN0aW9uP2UuZWRnZUxhYmVsRnVuY3Rpb24odCxlKTp0LmJhc2VFZGdlTGlzdC5sZW5ndGg+MT90LmJhc2VFZGdlTGlzdC5sZW5ndGgrIiB0ZW5zb3JzIjpMa3QodC5iYXNlRWRnZUxpc3RbMF0sZSl9ZnVuY3Rpb24gTmt0KHQsZSxuKXtjb25zdCBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhLQ3QsInBhdGgiKTtmb3IobGV0IHI9MTtyPHQubGVuZ3RoO3IrKylpZihpLnNldEF0dHJpYnV0ZSgiZCIsbih0LnNsaWNlKDAscikpKSxpLmdldFRvdGFsTGVuZ3RoKCk+ZSlyZXR1cm4gci0xO3JldHVybiB0Lmxlbmd0aC0xfWZ1bmN0aW9uIElrdCh0LGUsbil7bGV0IGk9WGsoKS54KCh0PT50LngpKS55KCh0PT50LnkpKSxyPXd1KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJwYXRoIikpLmF0dHIoImQiLGkodCkpLG89K2UuYXR0cigibWFya2VyV2lkdGgiKSxhPWUuYXR0cigidmlld0JveCIpLnNwbGl0KCIgIikubWFwKE51bWJlcikscz1hWzJdLWFbMF0sbD0rZS5hdHRyKCJyZWZYIiksYz1yLm5vZGUoKTtpZihuKXtjb25zdCBlPW8qKDEtbC9zKSxuPWMuZ2V0UG9pbnRBdExlbmd0aChlKSxyPU5rdCh0LGUsaSk7cmV0dXJuIHRbci0xXT17eDpuLngseTpuLnl9LHQuc2xpY2Uoci0xKX17Y29uc3QgZT0xLWwvcyxuPWMuZ2V0VG90YWxMZW5ndGgoKS1vKmUscj1jLmdldFBvaW50QXRMZW5ndGgobiksYT1Oa3QodCxuLGkpO3JldHVybiB0W2FdPXt4OnIueCx5OnIueX0sdC5zbGljZSgwLGErMSl9fWZ1bmN0aW9uIE9rdCh0LGUsbixpKXtpPWl8fCRDdC5FZGdlLkxJTkUsZS5sYWJlbCYmZS5sYWJlbC5zdHJ1Y3R1cmFsJiYoaSs9IiAiKyRDdC5FZGdlLlNUUlVDVFVSQUwpLGUubGFiZWwmJmUubGFiZWwubWV0YWVkZ2UmJmUubGFiZWwubWV0YWVkZ2UubnVtUmVmRWRnZXMmJihpKz0iICIrJEN0LkVkZ2UuUkVGRVJFTkNFX0VER0UpLG4uaGFuZGxlRWRnZVNlbGVjdGVkJiYoaSs9IiAiKyRDdC5FZGdlLlNFTEVDVEFCTEUpO2xldCByLG89InBhdGhfIitra3QoZSk7aWYobi5yZW5kZXJIaWVyYXJjaHkuZWRnZVdpZHRoRnVuY3Rpb24pcj1uLnJlbmRlckhpZXJhcmNoeS5lZGdlV2lkdGhGdW5jdGlvbihlLGkpO2Vsc2V7bGV0IHQ9MTtudWxsIT1lLmxhYmVsJiZudWxsIT1lLmxhYmVsLm1ldGFlZGdlJiYodD1lLmxhYmVsLm1ldGFlZGdlLnRvdGFsU2l6ZSkscj1uLnJlbmRlckhpZXJhcmNoeS5lZGdlV2lkdGhTaXplZEJhc2VkU2NhbGUodCl9bGV0IGE9dC5hcHBlbmQoInBhdGgiKS5hdHRyKCJpZCIsbykuYXR0cigiY2xhc3MiLGkpLnN0eWxlKCJzdHJva2Utd2lkdGgiLHIrInB4Iik7aWYoZS5sYWJlbCYmZS5sYWJlbC5tZXRhZWRnZSlpZihlLmxhYmVsLm1ldGFlZGdlLm51bVJlZkVkZ2VzKXtjb25zdCB0PWByZWZlcmVuY2UtYXJyb3doZWFkLSR7QWt0KHIpfWA7YS5zdHlsZSgibWFya2VyLXN0YXJ0IixgdXJsKCMke3R9KWApLGUubGFiZWwuc3RhcnRNYXJrZXJJZD10fWVsc2V7Y29uc3QgdD1gZGF0YWZsb3ctYXJyb3doZWFkLSR7QWt0KHIpfWA7YS5zdHlsZSgibWFya2VyLWVuZCIsYHVybCgjJHt0fSlgKSxlLmxhYmVsLmVuZE1hcmtlcklkPXR9aWYobnVsbD09ZS5sYWJlbHx8bnVsbD09ZS5sYWJlbC5tZXRhZWRnZSlyZXR1cm47bGV0IHM9UGt0KGUubGFiZWwubWV0YWVkZ2Usbi5yZW5kZXJIaWVyYXJjaHkpO251bGwhPXMmJnQuYXBwZW5kKCJ0ZXh0IikuYXBwZW5kKCJ0ZXh0UGF0aCIpLmF0dHIoInhsaW5rOmhyZWYiLCIjIitvKS5hdHRyKCJzdGFydE9mZnNldCIsIjUwJSIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJjZW50cmFsIikudGV4dChzKX1sZXQgUmt0PVhrKCkuY3VydmUoSUwpLngoKHQ9PnQueCkpLnkoKHQ9PnQueSkpO3ZhciB6a3Q7ZnVuY3Rpb24gRGt0KHQsZSxuKXtsZXQgaT1KQ3QodCwiZyIsJEN0Lk5vZGUuQ09OVEFJTkVSKS5zZWxlY3RBbGwoKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2hpbGROb2Rlc30pKS5kYXRhKGUsKHQ9PnQubm9kZS5uYW1lKyI6Iit0Lm5vZGUudHlwZSkpO3JldHVybiBpLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiZGF0YS1uYW1lIiwodD0+dC5ub2RlLm5hbWUpKS5lYWNoKChmdW5jdGlvbih0KXtsZXQgZT13dSh0aGlzKTtuLmFkZE5vZGVHcm91cCh0Lm5vZGUubmFtZSxlKX0pKS5tZXJnZShpKS5hdHRyKCJjbGFzcyIsKHQ9PiRDdC5Ob2RlLkdST1VQKyIgIitYa3QodCkpKS5lYWNoKChmdW5jdGlvbih0KXtsZXQgZT13dSh0aGlzKTtyTHQoSkN0KGUsImciLCRDdC5Bbm5vdGF0aW9uLklOQk9YKSx0LmluQW5ub3RhdGlvbnMsdCxuKSxyTHQoSkN0KGUsImciLCRDdC5Bbm5vdGF0aW9uLk9VVEJPWCksdC5vdXRBbm5vdGF0aW9ucyx0LG4pO2xldCBpPVlrdChlLHQsJEN0Lk5vZGUuU0hBUEUpO3Qubm9kZS5pc0dyb3VwTm9kZSYmKGZ1bmN0aW9uIHIodCxlLG4pe2xldCBpPUpDdCh0LCJnIiwkQ3QuTm9kZS5CVVRUT05fQ09OVEFJTkVSKTtKQ3QoaSwiY2lyY2xlIiwkQ3QuTm9kZS5CVVRUT05fQ0lSQ0xFKSxKQ3QoaSwicGF0aCIsJEN0Lk5vZGUuRVhQQU5EX0JVVFRPTikuYXR0cigiZCIsIk0wLC0yLjIgVjIuMiBNLTIuMiwwIEgyLjIiKSxKQ3QoaSwicGF0aCIsJEN0Lk5vZGUuQ09MTEFQU0VfQlVUVE9OKS5hdHRyKCJkIiwiTS0yLjIsMCBIMi4yIiksaS5vbigiY2xpY2siLCh0PT57Y3Uuc3RvcFByb3BhZ2F0aW9uKCksbi5maXJlKCJub2RlLXRvZ2dsZS1leHBhbmQiLHtuYW1lOnQubm9kZS5uYW1lfSl9KSksKGZ1bmN0aW9uIHIodCxlKXtsZXQgbj1wa3QoZSkrKGUuZXhwYW5kZWQ/ZS53aWR0aDplLmNvcmVCb3gud2lkdGgpLzItNixpPWUueS0oZS5leHBhbmRlZD9lLmhlaWdodDplLmNvcmVCb3guaGVpZ2h0KS8yKzY7ZS5ub2RlLnR5cGUhPT12QXQuU0VSSUVTfHxlLmV4cGFuZGVkfHwobis9MTAsaS09Mik7bGV0IHI9InRyYW5zbGF0ZSgiK24rIiwiK2krIikiO3Quc2VsZWN0QWxsKCJwYXRoIikudHJhbnNpdGlvbigpLmF0dHIoInRyYW5zZm9ybSIsciksdC5zZWxlY3QoImNpcmNsZSIpLnRyYW5zaXRpb24oKS5hdHRyKHtjeDpuLGN5Omkscjpsa3Qubm9kZVNpemUubWV0YS5leHBhbmRCdXR0b25SYWRpdXN9KX0pKGksZSl9KShpLHQsbiksSGt0KGksdCxuKSwoZnVuY3Rpb24gbyh0LGUsbil7aWYoZS5ub2RlLmlzR3JvdXBOb2RlKXtpZihlLmV4cGFuZGVkKXJldHVybiBhTHQodCxlLG4sJEN0LlN1YnNjZW5lLkdST1VQKTtna3QodCwiZyIsJEN0LlN1YnNjZW5lLkdST1VQKS5yZW1vdmUoKX19KShlLHQsbiksSGt0KChmdW5jdGlvbiBhKHQsZSxuKXtsZXQgaT1lLmRpc3BsYXlOYW1lLHI9ZS5ub2RlLnR5cGU9PT12QXQuTUVUQSYmIWUuZXhwYW5kZWQsbz1KQ3QodCwidGV4dCIsJEN0Lk5vZGUuTEFCRUwpLGE9by5ub2RlKCk7YS5wYXJlbnROb2RlLmFwcGVuZENoaWxkKGEpLG8uYXR0cigiZHkiLCIuMzVlbSIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIik7bGV0IHM9ODtzd2l0Y2goZS5ub2RlLnR5cGUpe2Nhc2UgdkF0Lk1FVEE6cz1lLmV4cGFuZGVkPzk6ODticmVhaztjYXNlIHZBdC5PUDpzPTZ9aWYocil7aS5sZW5ndGg+bi5tYXhNZXRhbm9kZUxhYmVsTGVuZ3RoJiYoaT1pLnN1YnN0cigwLG4ubWF4TWV0YW5vZGVMYWJlbExlbmd0aC0yKSsi4oCmIik7bGV0IHQ9KGZ1bmN0aW9uIGwodCl7cmV0dXJuIFdrdHx8KFdrdD1ETSgpLmRvbWFpbihbdC5tYXhNZXRhbm9kZUxhYmVsTGVuZ3RoTGFyZ2VGb250LHQubWF4TWV0YW5vZGVMYWJlbExlbmd0aF0pLnJhbmdlKFt0Lm1heE1ldGFub2RlTGFiZWxMZW5ndGhGb250U2l6ZSx0Lm1pbk1ldGFub2RlTGFiZWxMZW5ndGhGb250U2l6ZV0pLmNsYW1wKCEwKSksV2t0fSkobik7by5hdHRyKCJmb250LXNpemUiLHQoaS5sZW5ndGgpKyJweCIpLHM9dChpLmxlbmd0aCl9cmV0dXJuIEdrdChvLnRleHQoaSksZS5ub2RlLnR5cGUscyxlKSxvfSkoZSx0LG4pLHQsbix0Lm5vZGUudHlwZT09PXZBdC5NRVRBKSxKa3QoZSx0LG4pLChmdW5jdGlvbiBzKHQsZSl7bGV0IG49Z2t0KHQsImciLCRDdC5Ob2RlLlNIQVBFKSxpPXBrdChlKTtzd2l0Y2goZS5ub2RlLnR5cGUpe2Nhc2UgdkF0Lk9QOntjb25zdCByPWUubm9kZTt3ZS5pc051bWJlcihyLmZ1bmN0aW9uSW5wdXRJbmRleCl8fHdlLmlzTnVtYmVyKHIuZnVuY3Rpb25PdXRwdXRJbmRleCk/KGZ1bmN0aW9uIHIodCxlLG4saSxvKXtjb25zdCBhPW8vMixzPWkvMixsPVtbZSxuLWFdLFtlK3MsbithXSxbZS1zLG4rYV1dO3QudHJhbnNpdGlvbigpLmF0dHIoInBvaW50cyIsbC5tYXAoKHQ9PnQuam9pbigiLCIpKSkuam9pbigiICIpKX0pKGdrdChuLCJwb2x5Z29uIiksZS54LGUueSxlLmNvcmVCb3gud2lkdGgsZS5jb3JlQm94LmhlaWdodCk6eGt0KGdrdChuLCJlbGxpcHNlIiksaSxlLnksZS5jb3JlQm94LndpZHRoLGUuY29yZUJveC5oZWlnaHQpLHFrdCh0LGksZS55LGUubGFiZWxPZmZzZXQpO2JyZWFrfWNhc2UgdkF0Lk1FVEE6e2xldCByPW4uc2VsZWN0QWxsKCJyZWN0Iik7ZS5leHBhbmRlZD8oYmt0KHIsZS54LGUueSxlLndpZHRoLGUuaGVpZ2h0KSxCa3QodCxlKSxxa3QodCxpLGUueSwtZS5oZWlnaHQvMitlLmxhYmVsSGVpZ2h0LzIpKTooYmt0KHIsaSxlLnksZS5jb3JlQm94LndpZHRoLGUuY29yZUJveC5oZWlnaHQpLHFrdCh0LGksZS55LDApKTticmVha31jYXNlIHZBdC5TRVJJRVM6e2xldCByPWdrdChuLCJ1c2UiKTtlLmV4cGFuZGVkPyhia3QocixlLngsZS55LGUud2lkdGgsZS5oZWlnaHQpLEJrdCh0LGUpLHFrdCh0LGksZS55LC1lLmhlaWdodC8yK2UubGFiZWxIZWlnaHQvMikpOihia3QocixpLGUueSxlLmNvcmVCb3gud2lkdGgsZS5jb3JlQm94LmhlaWdodCkscWt0KHQsaSxlLnksZS5sYWJlbE9mZnNldCkpO2JyZWFrfWNhc2UgdkF0LkJSSURHRTpia3QoZ2t0KG4sInJlY3QiKSxlLngsZS55LGUud2lkdGgsZS5oZWlnaHQpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoIlVucmVjb2duaXplZCBub2RlIHR5cGU6ICIrZS5ub2RlLnR5cGUpfX0pKGUsdCl9KSksaS5leGl0KCkuZWFjaCgoZnVuY3Rpb24odCl7bi5yZW1vdmVOb2RlR3JvdXAodC5ub2RlLm5hbWUpO2xldCBlPXd1KHRoaXMpO3QuaW5Bbm5vdGF0aW9ucy5saXN0Lmxlbmd0aD4wJiZlLnNlbGVjdCgiLiIrJEN0LkFubm90YXRpb24uSU5CT1gpLnNlbGVjdEFsbCgiLiIrJEN0LkFubm90YXRpb24uR1JPVVApLmVhY2goKGU9PntuLnJlbW92ZUFubm90YXRpb25Hcm91cChlLHQpfSkpLHQub3V0QW5ub3RhdGlvbnMubGlzdC5sZW5ndGg+MCYmZS5zZWxlY3QoIi4iKyRDdC5Bbm5vdGF0aW9uLk9VVEJPWCkuc2VsZWN0QWxsKCIuIiskQ3QuQW5ub3RhdGlvbi5HUk9VUCkuZWFjaCgoZT0+e24ucmVtb3ZlQW5ub3RhdGlvbkdyb3VwKGUsdCl9KSl9KSkucmVtb3ZlKCksaX1mdW5jdGlvbiBCa3QodCxlKXtsZXQgbj1lLngtZS53aWR0aC8yK2UucGFkZGluZ0xlZnQsaT1lLnktZS5oZWlnaHQvMitlLnBhZGRpbmdUb3A7dmt0KGdrdCh0LCJnIiwkQ3QuU3Vic2NlbmUuR1JPVVApLG4saSl9ZnVuY3Rpb24gSGt0KHQsZSxuLGkpe2lmKGkpcmV0dXJuIHZvaWQgdC5hdHRyKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUiKTtsZXQgcj1Da3QobixGa3QoZS5ub2RlLG4pKTt0Lm9uKCJkYmxjbGljayIsKHQ9PntuLmZpcmUoIm5vZGUtdG9nZ2xlLWV4cGFuZCIse25hbWU6dC5ub2RlLm5hbWV9KX0pKS5vbigibW91c2VvdmVyIiwodD0+e24uaXNOb2RlRXhwYW5kZWQodCl8fG4uZmlyZSgibm9kZS1oaWdobGlnaHQiLHtuYW1lOnQubm9kZS5uYW1lfSl9KSkub24oIm1vdXNlb3V0IiwodD0+e24uaXNOb2RlRXhwYW5kZWQodCl8fG4uZmlyZSgibm9kZS11bmhpZ2hsaWdodCIse25hbWU6dC5ub2RlLm5hbWV9KX0pKS5vbigiY2xpY2siLCh0PT57Y3Uuc3RvcFByb3BhZ2F0aW9uKCksbi5maXJlKCJub2RlLXNlbGVjdCIse25hbWU6dC5ub2RlLm5hbWV9KX0pKS5vbigiY29udGV4dG1lbnUiLCgodCxlKT0+e24uZmlyZSgibm9kZS1zZWxlY3QiLHtuYW1lOnQubm9kZS5uYW1lfSksci5jYWxsKHQsZSl9KSl9ZnVuY3Rpb24gRmt0KHQsZSl7bGV0IG49W3t0aXRsZTplPT5GQXQodC5pbmNsdWRlKSxhY3Rpb246KG4saSxyKT0+e2UuZmlyZSgibm9kZS10b2dnbGUtZXh0cmFjdCIse25hbWU6dC5uYW1lfSl9fV07cmV0dXJuIGUubm9kZUNvbnRleHRNZW51SXRlbXMmJihuPW4uY29uY2F0KGUubm9kZUNvbnRleHRNZW51SXRlbXMpKSxWa3QodCkmJm4ucHVzaCh7dGl0bGU6ZT0+amt0KHQpLGFjdGlvbjoobixpLHIpPT57ZS5maXJlKCJub2RlLXRvZ2dsZS1zZXJpZXNncm91cCIse25hbWU6VWt0KHQpfSl9fSksbn1mdW5jdGlvbiBWa3QodCl7cmV0dXJuIG51bGwhPT1Va3QodCl9ZnVuY3Rpb24gVWt0KHQpe3JldHVybiB0P3QudHlwZT09PXZBdC5TRVJJRVM/dC5uYW1lOnQudHlwZT09PXZBdC5PUD90Lm93bmluZ1NlcmllczpudWxsOm51bGx9ZnVuY3Rpb24gamt0KHQpe3JldHVybihmdW5jdGlvbiBuKHQpe3JldHVybiB0PT09eEF0LkdST1VQPyJVbmdyb3VwIHRoaXMgc2VyaWVzIG9mIG5vZGVzIjoiR3JvdXAgdGhpcyBzZXJpZXMgb2Ygbm9kZXMifSkobnVsbCE9PShmdW5jdGlvbiBlKHQpe2xldCBlPW51bGw7cmV0dXJuIHQ/KHQudHlwZT09PXZBdC5TRVJJRVM/ZT10OnQucGFyZW50Tm9kZSYmdC5wYXJlbnROb2RlLnR5cGU9PT12QXQuU0VSSUVTJiYoZT10LnBhcmVudE5vZGUpLGUpOm51bGx9KSh0KT94QXQuR1JPVVA6eEF0LlVOR1JPVVApfWZ1bmN0aW9uIEdrdCh0LGUsbixpKXtsZXQgcj10Lm5vZGUoKSxvPXIudGV4dENvbnRlbnQsYT1udWxsO3N3aXRjaChlKXtjYXNlIHZBdC5NRVRBOmkmJiFpLmV4cGFuZGVkJiYoYT1sa3Qubm9kZVNpemUubWV0YS5tYXhMYWJlbFdpZHRoKTticmVhaztjYXNlIHZBdC5PUDphPWxrdC5ub2RlU2l6ZS5vcC5tYXhMYWJlbFdpZHRoO2JyZWFrO2Nhc2UtMTphPWxrdC5hbm5vdGF0aW9ucy5tYXhMYWJlbFdpZHRofWlmKG51bGwhPT1hKXJldHVybiByLnRleHRDb250ZW50PShmdW5jdGlvbiBzKHQsZSxuKXtpZighdClyZXR1cm4iIjtpZihmQXQodCxlKTw9bilyZXR1cm4gdDtsZXQgaT0wLHI9dC5sZW5ndGg7Zm9yKDtpPHI7KXtjb25zdCBvPWkrTWF0aC5yb3VuZCgoci1pKS8yKTtmQXQodC5zbGljZSgwLG8pKyLigKYiLGUpPD1uP2k9bzpyPW8tMX1yZXR1cm4gMD09PWk/dFswXTp0LnNsaWNlKDAsaSkrIuKApiJ9KShyLnRleHRDb250ZW50LG4sYSksdC5hcHBlbmQoInRpdGxlIikudGV4dChvKX0hKGZ1bmN0aW9uKHQpe3QuTk9ORT0ibm9uZSIsdC5DT01QVVRFX1RJTUU9ImNvbXB1dGVfdGltZSIsdC5ERVZJQ0U9ImRldmljZSIsdC5NRU1PUlk9Im1lbW9yeSIsdC5PUF9DT01QQVRJQklMSVRZPSJvcF9jb21wYXRpYmlsaXR5Iix0LlNUUlVDVFVSRT0ic3RydWN0dXJlIix0LlhMQV9DTFVTVEVSPSJ4bGFfY2x1c3RlciJ9KSh6a3R8fCh6a3Q9e30pKTtsZXQgV2t0PW51bGw7ZnVuY3Rpb24gcWt0KHQsZSxuLGkpe2drdCh0LCJ0ZXh0IiwkQ3QuTm9kZS5MQUJFTCkudHJhbnNpdGlvbigpLmF0dHIoIngiLGUpLmF0dHIoInkiLG4raSl9ZnVuY3Rpb24gWWt0KHQsZSxuKXtsZXQgaT1KQ3QodCwiZyIsbik7c3dpdGNoKGUubm9kZS50eXBlKXtjYXNlIHZBdC5PUDpjb25zdCB0PWUubm9kZTtpZih3ZS5pc051bWJlcih0LmZ1bmN0aW9uSW5wdXRJbmRleCl8fHdlLmlzTnVtYmVyKHQuZnVuY3Rpb25PdXRwdXRJbmRleCkpe0pDdChpLCJwb2x5Z29uIiwkQ3QuTm9kZS5DT0xPUl9UQVJHRVQpO2JyZWFrfUpDdChpLCJlbGxpcHNlIiwkQ3QuTm9kZS5DT0xPUl9UQVJHRVQpO2JyZWFrO2Nhc2UgdkF0LlNFUklFUzpsZXQgbj0iYW5ub3RhdGlvbiIscj1lO3IuY29yZUdyYXBoJiYobj1yLm5vZGUuaGFzTm9uQ29udHJvbEVkZ2VzPyJ2ZXJ0aWNhbCI6Imhvcml6b250YWwiKTtsZXQgbz1bJEN0Lk5vZGUuQ09MT1JfVEFSR0VUXTtyLmlzRmFkZWRPdXQmJm8ucHVzaCgiZmFkZWQtZWxsaXBzZSIpLEpDdChpLCJ1c2UiLG8pLmF0dHIoInhsaW5rOmhyZWYiLCIjb3Atc2VyaWVzLSIrbisiLXN0YW1wIiksSkN0KGksInJlY3QiLCRDdC5Ob2RlLkNPTE9SX1RBUkdFVCkuYXR0cigicngiLGUucmFkaXVzKS5hdHRyKCJyeSIsZS5yYWRpdXMpO2JyZWFrO2Nhc2UgdkF0LkJSSURHRTpjYXNlIHZBdC5NRVRBOkpDdChpLCJyZWN0IiwkQ3QuTm9kZS5DT0xPUl9UQVJHRVQpLmF0dHIoInJ4IixlLnJhZGl1cykuYXR0cigicnkiLGUucmFkaXVzKTticmVhaztkZWZhdWx0OnRocm93IEVycm9yKCJVbnJlY29nbml6ZWQgbm9kZSB0eXBlOiAiK2Uubm9kZS50eXBlKX1yZXR1cm4gaX1mdW5jdGlvbiBYa3QodCl7c3dpdGNoKHQubm9kZS50eXBlKXtjYXNlIHZBdC5PUDpyZXR1cm4gJEN0Lk9QTk9ERTtjYXNlIHZBdC5NRVRBOnJldHVybiAkQ3QuTUVUQU5PREU7Y2FzZSB2QXQuU0VSSUVTOnJldHVybiAkQ3QuU0VSSUVTTk9ERTtjYXNlIHZBdC5CUklER0U6cmV0dXJuICRDdC5CUklER0VOT0RFO2Nhc2UgdkF0LkVMTElQU0lTOnJldHVybiAkQ3QuRUxMSVBTSVNOT0RFfXRocm93IEVycm9yKCJVbnJlY29nbml6ZWQgbm9kZSB0eXBlOiAiK3Qubm9kZS50eXBlKX1mdW5jdGlvbiAka3QodCxlLG4pe2xldCBpPShmdW5jdGlvbiByKHQpe3JldHVybiB0LnJlcGxhY2UoLyhbOi5cW1xdLC9cXFwoXCldKS9nLCJcXCQxIil9KSh0KTtpZighbilyZXR1cm5gdXJsKCMke2l9KWA7bGV0IG89d3UobiksYT1vLnNlbGVjdCgiZGVmcyNfZ3JhcGgtZ3JhZGllbnRzIik7YS5lbXB0eSgpJiYoYT1vLmFwcGVuZCgiZGVmcyIpLmF0dHIoImlkIiwiX2dyYXBoLWdyYWRpZW50cyIpKTtsZXQgcz1hLnNlbGVjdCgibGluZWFyR3JhZGllbnQjIitpKTtpZihzLmVtcHR5KCkpe3M9YS5hcHBlbmQoImxpbmVhckdyYWRpZW50IikuYXR0cigiaWQiLHQpLHMuc2VsZWN0QWxsKCIqIikucmVtb3ZlKCk7bGV0IG49MDt3ZS5lYWNoKGUsKHQ9PntsZXQgZT10LmNvbG9yO3MuYXBwZW5kKCJzdG9wIikuYXR0cigib2Zmc2V0IixuKS5hdHRyKCJzdG9wLWNvbG9yIixlKSxzLmFwcGVuZCgic3RvcCIpLmF0dHIoIm9mZnNldCIsbit0LnByb3BvcnRpb24pLmF0dHIoInN0b3AtY29sb3IiLGUpLG4rPXQucHJvcG9ydGlvbn0pKX1yZXR1cm5gdXJsKCMke2l9KWB9ZnVuY3Rpb24gS2t0KHQpe3d1KHQpLnNlbGVjdCgiZGVmcyNfZ3JhcGgtZ3JhZGllbnRzIikucmVtb3ZlKCl9ZnVuY3Rpb24gWmt0KHQsZSxuLGkscil7bGV0IG89akF0O3N3aXRjaCh0PXR8fCgoKT0+MCksZSl7Y2FzZSB6a3QuTk9ORTpjYXNlIHprdC5TVFJVQ1RVUkU6aWYobi5ub2RlLnR5cGU9PT12QXQuTUVUQSl7bGV0IHI9bi5ub2RlLnRlbXBsYXRlSWQ7cmV0dXJuIGU9PT16a3QuU1RSVUNUVVJFJiZudWxsIT09cj9vLlNUUlVDVFVSRV9QQUxFVFRFKHQociksaSk6by5VTktOT1dOfXJldHVybiBuLm5vZGUudHlwZT09PXZBdC5TRVJJRVM/aT9vLkVYUEFOREVEX0NPTE9SOiJ3aGl0ZSI6bi5ub2RlLnR5cGU9PT12QXQuQlJJREdFP24uc3RydWN0dXJhbD8iI2YwZSI6bi5ub2RlLmluYm91bmQ/IiMwZWYiOiIjZmUwIjp3ZS5pc051bWJlcihuLm5vZGUuZnVuY3Rpb25JbnB1dEluZGV4KT8iIzc5NTU0OCI6d2UuaXNOdW1iZXIobi5ub2RlLmZ1bmN0aW9uT3V0cHV0SW5kZXgpPyIjMDA5Njg4Ijoid2hpdGUiO2Nhc2Ugemt0LkRFVklDRTpyZXR1cm4gbnVsbD09bi5kZXZpY2VDb2xvcnM/by5VTktOT1dOOmk/by5FWFBBTkRFRF9DT0xPUjoka3QoImRldmljZS0iK24ubm9kZS5uYW1lLG4uZGV2aWNlQ29sb3JzLHIpO2Nhc2Ugemt0LlhMQV9DTFVTVEVSOnJldHVybiBudWxsPT1uLnhsYUNsdXN0ZXJDb2xvcnM/by5VTktOT1dOOmk/by5FWFBBTkRFRF9DT0xPUjoka3QoInhsYS0iK24ubm9kZS5uYW1lLG4ueGxhQ2x1c3RlckNvbG9ycyxyKTtjYXNlIHprdC5DT01QVVRFX1RJTUU6cmV0dXJuIGk/by5FWFBBTkRFRF9DT0xPUjpuLmNvbXB1dGVUaW1lQ29sb3J8fG8uVU5LTk9XTjtjYXNlIHprdC5NRU1PUlk6cmV0dXJuIGk/by5FWFBBTkRFRF9DT0xPUjpuLm1lbW9yeUNvbG9yfHxvLlVOS05PV047Y2FzZSB6a3QuT1BfQ09NUEFUSUJJTElUWTpyZXR1cm4gbnVsbD09bi5jb21wYXRpYmlsaXR5Q29sb3JzP28uVU5LTk9XTjppP28uRVhQQU5ERURfQ09MT1I6JGt0KCJvcC1jb21wYXQtIituLm5vZGUubmFtZSxuLmNvbXBhdGliaWxpdHlDb2xvcnMscik7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gY2FzZSB0byBjb2xvciBub2RlcyBieSIpfX1mdW5jdGlvbiBKa3QodCxlLG4saSl7aT1pfHwkQ3QuTm9kZS5TSEFQRTtjb25zdCByPW4uaXNOb2RlSGlnaGxpZ2h0ZWQoZS5ub2RlLm5hbWUpLG89bi5pc05vZGVTZWxlY3RlZChlLm5vZGUubmFtZSksYT1lLmlzSW5FeHRyYWN0fHxlLmlzT3V0RXh0cmFjdHx8ZS5pc0xpYnJhcnlGdW5jdGlvbixzPWUuZXhwYW5kZWQmJmkhPT0kQ3QuQW5ub3RhdGlvbi5OT0RFLGw9ZS5pc0ZhZGVkT3V0O3QuY2xhc3NlZCgiaGlnaGxpZ2h0ZWQiLHIpLHQuY2xhc3NlZCgic2VsZWN0ZWQiLG8pLHQuY2xhc3NlZCgiZXh0cmFjdCIsYSksdC5jbGFzc2VkKCJleHBhbmRlZCIscyksdC5jbGFzc2VkKCJmYWRlZCIsbCk7Y29uc3QgYz10LnNlbGVjdCgiLiIraSsiIC4iKyRDdC5Ob2RlLkNPTE9SX1RBUkdFVCksdT1aa3Qobi50ZW1wbGF0ZUluZGV4LG4uY29sb3JCeSxlLHMsbi5nZXRHcmFwaFN2Z1Jvb3QoKSk7Yy5zdHlsZSgiZmlsbCIsdSksYy5zdHlsZSgic3Ryb2tlIixvP251bGw6UWt0KHUpKX1mdW5jdGlvbiBRa3QodCl7cmV0dXJuInVybCI9PT10LnN1YnN0cmluZygwLDMpP2pBdC5HUkFESUVOVF9PVVRMSU5FOlZoKHQpLmRhcmtlcigpLnRvU3RyaW5nKCl9ZnVuY3Rpb24gdEx0KHQsZSxuLGkpe2NvbnN0IHI9d3UodCk7aWYoci5zZWxlY3RBbGwoIi5pbnB1dC1oaWdobGlnaHQiKS5jbGFzc2VkKCJpbnB1dC1oaWdobGlnaHQiLCExKSxyLnNlbGVjdEFsbCgiLm5vbi1pbnB1dCIpLmNsYXNzZWQoIm5vbi1pbnB1dCIsITEpLHIuc2VsZWN0QWxsKCIuaW5wdXQtcGFyZW50IikuY2xhc3NlZCgiaW5wdXQtcGFyZW50IiwhMSksci5zZWxlY3RBbGwoIi5pbnB1dC1jaGlsZCIpLmNsYXNzZWQoImlucHV0LWNoaWxkIiwhMSksci5zZWxlY3RBbGwoIi5pbnB1dC1lZGdlLWhpZ2hsaWdodCIpLmNsYXNzZWQoImlucHV0LWVkZ2UtaGlnaGxpZ2h0IiwhMSksci5zZWxlY3RBbGwoIi5ub24taW5wdXQtZWRnZS1oaWdobGlnaHQiKS5jbGFzc2VkKCJub24taW5wdXQtZWRnZS1oaWdobGlnaHQiLCExKSxyLnNlbGVjdEFsbCgiLmlucHV0LWhpZ2hsaWdodC1zZWxlY3RlZCIpLmNsYXNzZWQoImlucHV0LWhpZ2hsaWdodC1zZWxlY3RlZCIsITEpLCFlfHwhaXx8IW4pcmV0dXJuO2xldCBvPWVMdChuLGUpLGE9e307d2UuZWFjaChvLChmdW5jdGlvbihuKXthPW5MdCh0LGUsbixhKX0pKTtsZXQgcz1PYmplY3Qua2V5cyhhKSxsPShmdW5jdGlvbiBjKHQsZSl7bGV0IG49e307cmV0dXJuIHdlLmVhY2goZSwoZnVuY3Rpb24oZSl7bGV0IGk9dC5nZXROb2RlQnlOYW1lKGUpLHI9aUx0KHQsaSk7bltyLm5hbWVdPXJ9KSksbn0pKGUscyk7IShmdW5jdGlvbiB1KHQsZSl7d2UuZm9yT3duKGUsKGZ1bmN0aW9uKGUpe2xldCBuPWU7Zm9yKDtuLm5hbWUhPT1nQXQ7KXtjb25zdCBlPXd1KHQpLnNlbGVjdChgLm5vZGVbZGF0YS1uYW1lPSIke24ubmFtZX0iXWApOyFlLm5vZGVzKCkubGVuZ3RofHxlLmNsYXNzZWQoImlucHV0LWhpZ2hsaWdodCIpfHxlLmNsYXNzZWQoInNlbGVjdGVkIil8fGUuY2xhc3NlZCgib3AiKXx8ZS5jbGFzc2VkKCJpbnB1dC1wYXJlbnQiLCEwKSxuPW4ucGFyZW50Tm9kZX19KSl9KSh0LGwpLHIuc2VsZWN0QWxsKCJnLm5vZGU6bm90KC5zZWxlY3RlZCk6bm90KC5pbnB1dC1oaWdobGlnaHQpOm5vdCguaW5wdXQtcGFyZW50KTpub3QoLmlucHV0LWNoaWxkcmVuKSIpLmNsYXNzZWQoIm5vbi1pbnB1dCIsITApLmVhY2goKGZ1bmN0aW9uKHQpe3Iuc2VsZWN0QWxsKGBbZGF0YS1uYW1lPSIke3Qubm9kZS5uYW1lfSJdYCkuY2xhc3NlZCgibm9uLWlucHV0IiwhMCl9KSksci5zZWxlY3RBbGwoImcuZWRnZTpub3QoLmlucHV0LWVkZ2UtaGlnaGxpZ2h0KSIpLmNsYXNzZWQoIm5vbi1pbnB1dC1lZGdlLWhpZ2hsaWdodCIsITApfWZ1bmN0aW9uIGVMdCh0LGUpe2xldCBuPVtdLGk9ZS5nZXROb2RlQnlOYW1lKHQpO2lmKGkgaW5zdGFuY2VvZiBNQXQpcmV0dXJuW2ldLmNvbmNhdChpLmluRW1iZWRkaW5ncyk7bGV0IHI9aS5tZXRhZ3JhcGgubm9kZXMoKTtyZXR1cm4gd2UuZWFjaChyLChmdW5jdGlvbih0KXtuPW4uY29uY2F0KGVMdCh0LGUpKX0pKSxufWZ1bmN0aW9uIG5MdCh0LGUsbixpKXtpZihpW24ubmFtZV0pcmV0dXJuIGk7aVtuLm5hbWVdPSEwO2xldCByPW4uaW5wdXRzLG89aUx0KGUsbik7d3UodCkuc2VsZWN0KGAubm9kZVtkYXRhLW5hbWU9IiR7by5uYW1lfSJdYCkuY2xhc3NlZCgiaW5wdXQtaGlnaGxpZ2h0IiwhMCk7bGV0IGE9e307d2UuZWFjaChyLChmdW5jdGlvbih0KXtsZXQgbj1lLmdldE5vZGVCeU5hbWUodC5uYW1lKTtpZih2b2lkIDA9PT1uKXJldHVybjtpZihuIGluc3RhbmNlb2YgVEF0KXtsZXQgdD1EQXQobi5uYW1lKTtuPWUuZ2V0Tm9kZUJ5TmFtZSh0KX1sZXQgaT1pTHQoZSxuKSxyPWFbaS5uYW1lXTtyP3Iub3BOb2Rlcy5wdXNoKG4pOmFbaS5uYW1lXT17dmlzaWJsZVBhcmVudDppLG9wTm9kZXM6W25dfX0pKTtsZXQgcz17fSxsPVtvXTtzW28ubmFtZV09e3RyYWNlZDohMSxpbmRleDowLGNvbm5lY3Rpb25FbmRwb2ludHM6W119O2xldCBjPW87Zm9yKGxldCB0PTE7Yy5uYW1lIT09Z0F0O3QrKyljPWMucGFyZW50Tm9kZSxzW2MubmFtZV09e3RyYWNlZDohMSxpbmRleDp0LGNvbm5lY3Rpb25FbmRwb2ludHM6W119LGxbdF09YztyZXR1cm4gd2UuZm9yT3duKGEsKGZ1bmN0aW9uKG4scil7bGV0IGE9bi52aXNpYmxlUGFyZW50O3dlLmVhY2gobi5vcE5vZGVzLChmdW5jdGlvbihuKXtpPW5MdCh0LGUsbixpKX0pKSxhLm5hbWUhPT1vLm5hbWUmJihmdW5jdGlvbiBjKHQsZSxuLGkpe2xldCByPWUsbz1lLGE9W107Zm9yKDshbltyLm5hbWVdOylvLm5hbWUhPT1yLm5hbWUmJmEucHVzaChbbyxyXSksbz1yLHI9ci5wYXJlbnROb2RlO2xldCBzPW5bci5uYW1lXS5pbmRleCxsPWlbTWF0aC5tYXgocy0xLDApXS5uYW1lLGM9bCx1PW8ubmFtZSxoPW8ubmFtZTtjb25zdCBkPXd1KHQpO2Quc2VsZWN0QWxsKGBbZGF0YS1lZGdlPSIke2h9LS0ke2x9Il1gKS5jbGFzc2VkKCJpbnB1dC1lZGdlLWhpZ2hsaWdodCIsITApLHdlLmVhY2goYSwoZnVuY3Rpb24odCl7ZC5zZWxlY3RBbGwoYFtkYXRhLWVkZ2U9IiR7dFswXS5uYW1lfS0tJHtjfX5+JHt0WzFdLm5hbWV9fn5PVVQiXWApLmNsYXNzZWQoImlucHV0LWVkZ2UtaGlnaGxpZ2h0IiwhMCl9KSk7Zm9yKGxldCB0PTE7dDxzO3QrKylkLnNlbGVjdEFsbChgW2RhdGEtZWRnZT0iJHt1fX5+JHtpW3RdLm5hbWV9fn5JTi0tJHtpW3QtMV0ubmFtZX0iXWApLmNsYXNzZWQoImlucHV0LWVkZ2UtaGlnaGxpZ2h0IiwhMCl9KSh0LGEscyxsKX0pKSxpfWZ1bmN0aW9uIGlMdCh0LGUpe2xldCBuPSExLGk9ZTtmb3IoOyFuOylpZihpPShlPWkpLnBhcmVudE5vZGUsdm9pZCAwPT09aSluPSEwO2Vsc2V7bGV0IGU9dC5nZXRSZW5kZXJOb2RlQnlOYW1lKGkubmFtZSk7ZSYmKGUuZXhwYW5kZWR8fGkgaW5zdGFuY2VvZiBNQXQpJiYobj0hMCl9cmV0dXJuIGV9ZnVuY3Rpb24gckx0KHQsZSxuLGkpe2xldCByPXQuc2VsZWN0QWxsKChmdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkTm9kZXN9KSkuZGF0YShlLmxpc3QsKHQ9PnQubm9kZS5uYW1lKSk7cmV0dXJuIHIuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJkYXRhLW5hbWUiLCh0PT50Lm5vZGUubmFtZSkpLmVhY2goKGZ1bmN0aW9uKHQpe2xldCBlPXd1KHRoaXMpO2kuYWRkQW5ub3RhdGlvbkdyb3VwKHQsbixlKTtsZXQgcj0kQ3QuQW5ub3RhdGlvbi5FREdFLG89dC5yZW5kZXJNZXRhZWRnZUluZm8mJnQucmVuZGVyTWV0YWVkZ2VJbmZvLm1ldGFlZGdlO28mJiFvLm51bVJlZ3VsYXJFZGdlcyYmKHIrPSIgIiskQ3QuQW5ub3RhdGlvbi5DT05UUk9MX0VER0UpLG8mJm8ubnVtUmVmRWRnZXMmJihyKz0iICIrJEN0LkVkZ2UuUkVGX0xJTkUpLE9rdChlLHQsaSxyKSx0LmFubm90YXRpb25UeXBlIT09S0F0LkVMTElQU0lTPygoZnVuY3Rpb24gYSh0LGUpe2xldCBuPWUubm9kZS5uYW1lLnNwbGl0KCIvIik7b0x0KHQsbltuLmxlbmd0aC0xXSxlLG51bGwpfSkoZSx0KSwoZnVuY3Rpb24gcyh0LGUpe2UuYW5ub3RhdGlvblR5cGU9PT1LQXQuU1VNTUFSWT9KQ3QodCwidXNlIikuYXR0cigiY2xhc3MiLCJzdW1tYXJ5IikuYXR0cigieGxpbms6aHJlZiIsIiNzdW1tYXJ5LWljb24iKS5hdHRyKCJjdXJzb3IiLCJwb2ludGVyIik6SkN0KFlrdCh0LGUsJEN0LkFubm90YXRpb24uTk9ERSksInRpdGxlIikudGV4dChlLm5vZGUubmFtZSl9KShlLHQpKTpvTHQoZSx0Lm5vZGUubmFtZSx0LCRDdC5Bbm5vdGF0aW9uLkVMTElQU0lTKX0pKS5tZXJnZShyKS5hdHRyKCJjbGFzcyIsKHQ9PiRDdC5Bbm5vdGF0aW9uLkdST1VQKyIgIisoZnVuY3Rpb24gZSh0KXtyZXR1cm4oS0F0W3RdfHwiIikudG9Mb3dlckNhc2UoKXx8bnVsbH0pKHQuYW5ub3RhdGlvblR5cGUpKyIgIitYa3QodCkpKS5lYWNoKChmdW5jdGlvbih0KXtsZXQgZT13dSh0aGlzKTshKGZ1bmN0aW9uIHIodCxlLG4saSl7bGV0IHI9cGt0KGUpO24ucmVuZGVyTm9kZUluZm8mJm4uYW5ub3RhdGlvblR5cGUhPT1LQXQuRUxMSVBTSVMmJkprdCh0LG4ucmVuZGVyTm9kZUluZm8saSwkQ3QuQW5ub3RhdGlvbi5OT0RFKSxuLmFubm90YXRpb25UeXBlPT09S0F0LlNVTU1BUlkmJihuLndpZHRoKz0xMCksdC5zZWxlY3QoInRleHQuIiskQ3QuQW5ub3RhdGlvbi5MQUJFTCkudHJhbnNpdGlvbigpLmF0dHIoIngiLHIrbi5keCsobi5pc0luPy0xOjEpKihuLndpZHRoLzIrbi5sYWJlbE9mZnNldCkpLmF0dHIoInkiLGUueStuLmR5KSx0LnNlbGVjdCgidXNlLnN1bW1hcnkiKS50cmFuc2l0aW9uKCkuYXR0cigieCIscituLmR4LTMpLmF0dHIoInkiLGUueStuLmR5LTYpLHhrdCh0LnNlbGVjdCgiLiIrJEN0LkFubm90YXRpb24uTk9ERSsiIGVsbGlwc2UiKSxyK24uZHgsZS55K24uZHksbi53aWR0aCxuLmhlaWdodCksYmt0KHQuc2VsZWN0KCIuIiskQ3QuQW5ub3RhdGlvbi5OT0RFKyIgcmVjdCIpLHIrbi5keCxlLnkrbi5keSxuLndpZHRoLG4uaGVpZ2h0KSxia3QodC5zZWxlY3QoIi4iKyRDdC5Bbm5vdGF0aW9uLk5PREUrIiB1c2UiKSxyK24uZHgsZS55K24uZHksbi53aWR0aCxuLmhlaWdodCksdC5zZWxlY3QoInBhdGguIiskQ3QuQW5ub3RhdGlvbi5FREdFKS50cmFuc2l0aW9uKCkuYXR0cigiZCIsKHQ9PntsZXQgbj10LnBvaW50cy5tYXAoKHQ9Pih7eDp0LmR4K3IseTp0LmR5K2UueX0pKSk7cmV0dXJuIFJrdChuKX0pKX0pKGUsbix0LGkpLHQuYW5ub3RhdGlvblR5cGUhPT1LQXQuRUxMSVBTSVMmJihmdW5jdGlvbiBvKHQsZSxuLGkpe3Qub24oIm1vdXNlb3ZlciIsKHQ9PntpLmZpcmUoImFubm90YXRpb24taGlnaGxpZ2h0Iix7bmFtZTp0Lm5vZGUubmFtZSxob3N0TmFtZTplLm5vZGUubmFtZX0pfSkpLm9uKCJtb3VzZW91dCIsKHQ9PntpLmZpcmUoImFubm90YXRpb24tdW5oaWdobGlnaHQiLHtuYW1lOnQubm9kZS5uYW1lLGhvc3ROYW1lOmUubm9kZS5uYW1lfSl9KSkub24oImNsaWNrIiwodD0+e2N1LnN0b3BQcm9wYWdhdGlvbigpLGkuZmlyZSgiYW5ub3RhdGlvbi1zZWxlY3QiLHtuYW1lOnQubm9kZS5uYW1lLGhvc3ROYW1lOmUubm9kZS5uYW1lfSl9KSksbi5hbm5vdGF0aW9uVHlwZSE9PUtBdC5TVU1NQVJZJiZuLmFubm90YXRpb25UeXBlIT09S0F0LkNPTlNUQU5UJiZ0Lm9uKCJjb250ZXh0bWVudSIsQ2t0KGksRmt0KG4ubm9kZSxpKSkpfSkoZSxuLHQsaSl9KSksci5leGl0KCkuZWFjaCgoZnVuY3Rpb24odCl7aS5yZW1vdmVBbm5vdGF0aW9uR3JvdXAodCxuKX0pKS5yZW1vdmUoKSxyfWZ1bmN0aW9uIG9MdCh0LGUsbixpKXtsZXQgcj0kQ3QuQW5ub3RhdGlvbi5MQUJFTDtyZXR1cm4gaSYmKHIrPSIgIitpKSxHa3QodC5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIscikuYXR0cigiZHkiLCIuMzVlbSIpLmF0dHIoInRleHQtYW5jaG9yIixuLmlzSW4/ImVuZCI6InN0YXJ0IikudGV4dChlKSwtMSw1KX1mdW5jdGlvbiBhTHQodCxlLG4saSl7bGV0IHI9WkN0KHQsImciLGk9aXx8JEN0LlNjZW5lLkdST1VQKS5lbXB0eSgpLG89SkN0KHQsImciLGkpLGE9SkN0KG8sImciLCRDdC5TY2VuZS5DT1JFKSxzPXdlLnJlZHVjZShlLmNvcmVHcmFwaC5ub2RlcygpLCgodCxuKT0+e2xldCBpPWUuY29yZUdyYXBoLm5vZGUobik7cmV0dXJuIGkuZXhjbHVkZWR8fHQucHVzaChpKSx0fSksW10pO3JldHVybiBlLm5vZGUudHlwZT09PXZBdC5TRVJJRVMmJnMucmV2ZXJzZSgpLChmdW5jdGlvbiBsKHQsZSxuKXtjb25zdCBpPW47bGV0IHI9W107cj13ZS5yZWR1Y2UoZS5lZGdlcygpLCgodCxuKT0+e2xldCBpPWUuZWRnZShuKTtyZXR1cm4gdC5wdXNoKHt2Om4udix3Om4udyxsYWJlbDppfSksdH0pLHIpO2xldCBvPUpDdCh0LCJnIiwkQ3QuRWRnZS5DT05UQUlORVIpLnNlbGVjdEFsbCgoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZE5vZGVzfSkpLmRhdGEocixra3QpO28uZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsJEN0LkVkZ2UuR1JPVVApLmF0dHIoImRhdGEtZWRnZSIsa2t0KS5lYWNoKChmdW5jdGlvbih0KXtsZXQgZT13dSh0aGlzKTt0LmxhYmVsLmVkZ2VHcm91cD1lLGkuX2VkZ2VHcm91cEluZGV4W2trdCh0KV09ZSxpLmhhbmRsZUVkZ2VTZWxlY3RlZCYmZS5vbigiY2xpY2siLCh0PT57Y3Uuc3RvcFByb3BhZ2F0aW9uKCksaS5maXJlKCJlZGdlLXNlbGVjdCIse2VkZ2VEYXRhOnQsZWRnZUdyb3VwOmV9KX0pKSxPa3QoZSx0LGkpfSkpLm1lcmdlKG8pLmVhY2goKGZ1bmN0aW9uKCl7IShmdW5jdGlvbiB0KGUsbil7d3Uobikuc2VsZWN0KCJwYXRoLiIrJEN0LkVkZ2UuTElORSkudHJhbnNpdGlvbigpLmF0dHJUd2VlbigiZCIsKGZ1bmN0aW9uKHQsbixpKXtyZXR1cm4oZnVuY3Rpb24gcih0LGUsbixpLG8pe2xldCBhPW4ubGFiZWwscz1hLmFkam9pbmluZ01ldGFlZGdlLGw9YS5wb2ludHM7Y29uc3R7c2hhZG93Um9vdDpjfT10O2lmKG4ubGFiZWwuc3RhcnRNYXJrZXJJZCYmKGw9SWt0KGwsd3UoYy5xdWVyeVNlbGVjdG9yKCIjIituLmxhYmVsLnN0YXJ0TWFya2VySWQpKSwhMCkpLG4ubGFiZWwuZW5kTWFya2VySWQmJihsPUlrdChsLHd1KGMucXVlcnlTZWxlY3RvcigiIyIrbi5sYWJlbC5lbmRNYXJrZXJJZCkpLCExKSksIXMpcmV0dXJuIFVkKG8sUmt0KGwpKTtsZXQgdT1zLmVkZ2VHcm91cC5ub2RlKCkuZmlyc3RDaGlsZCxoPWEubWV0YWVkZ2UuaW5ib3VuZDtyZXR1cm4gZnVuY3Rpb24odCl7bGV0IG49dS5nZXRQb2ludEF0TGVuZ3RoKGg/dS5nZXRUb3RhbExlbmd0aCgpOjApLm1hdHJpeFRyYW5zZm9ybSh1LmdldENUTSgpKS5tYXRyaXhUcmFuc2Zvcm0oZS5nZXRDVE0oKS5pbnZlcnNlKCkpLGk9aD8wOmwubGVuZ3RoLTE7cmV0dXJuIGxbaV0ueD1uLngsbFtpXS55PW4ueSxSa3QobCl9fSkoZSx0aGlzLHQsMCxpKX0pKX0pKG4sdGhpcyl9KSkuZWFjaCgoZnVuY3Rpb24odCl7IShmdW5jdGlvbiBlKHQsbixpKXt0LmNsYXNzZWQoImZhZGVkIixuLmxhYmVsLmlzRmFkZWRPdXQpO2xldCByPW4ubGFiZWwubWV0YWVkZ2U7dC5zZWxlY3QoInBhdGguIiskQ3QuRWRnZS5MSU5FKS5jbGFzc2VkKCJjb250cm9sLWRlcCIsciYmIXIubnVtUmVndWxhckVkZ2VzKX0pKHd1KHRoaXMpLHQpfSkpLG8uZXhpdCgpLmVhY2goKHQ9PntkZWxldGUgaS5fZWRnZUdyb3VwSW5kZXhba2t0KHQpXX0pKS5yZW1vdmUoKX0pKGEsZS5jb3JlR3JhcGgsbiksRGt0KGEscyxuKSxlLmlzb2xhdGVkSW5FeHRyYWN0Lmxlbmd0aD4wP0RrdChKQ3QobywiZyIsJEN0LlNjZW5lLklORVhUUkFDVCksZS5pc29sYXRlZEluRXh0cmFjdCxuKTpaQ3QobywiZyIsJEN0LlNjZW5lLklORVhUUkFDVCkucmVtb3ZlKCksZS5pc29sYXRlZE91dEV4dHJhY3QubGVuZ3RoPjA/RGt0KEpDdChvLCJnIiwkQ3QuU2NlbmUuT1VURVhUUkFDVCksZS5pc29sYXRlZE91dEV4dHJhY3Qsbik6WkN0KG8sImciLCRDdC5TY2VuZS5PVVRFWFRSQUNUKS5yZW1vdmUoKSxlLmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0Lmxlbmd0aD4wP0RrdChKQ3QobywiZyIsJEN0LlNjZW5lLkZVTkNUSU9OX0xJQlJBUlkpLGUubGlicmFyeUZ1bmN0aW9uc0V4dHJhY3Qsbik6WkN0KG8sImciLCRDdC5TY2VuZS5GVU5DVElPTl9MSUJSQVJZKS5yZW1vdmUoKSwoZnVuY3Rpb24gYyh0LGUpe2xldCBuPWUubm9kZS50eXBlPT09dkF0LlNFUklFUz8wOmxrdC5zdWJzY2VuZS5tZXRhLmxhYmVsSGVpZ2h0O3ZrdChna3QodCwiZyIsX2t0LlNjZW5lLkNPUkUpLDAsbik7bGV0IGk9ZS5pc29sYXRlZEluRXh0cmFjdC5sZW5ndGg+MCxyPWUuaXNvbGF0ZWRPdXRFeHRyYWN0Lmxlbmd0aD4wLG89ZS5saWJyYXJ5RnVuY3Rpb25zRXh0cmFjdC5sZW5ndGg+MCxhPWxrdC5zdWJzY2VuZS5tZXRhLmV4dHJhY3RYT2Zmc2V0LHM9MDtpZihpJiYocys9ZS5vdXRFeHRyYWN0Qm94LndpZHRoKSxyJiYocys9ZS5vdXRFeHRyYWN0Qm94LndpZHRoKSxpKXtsZXQgaT1lLmNvcmVCb3gud2lkdGg7aT1zPGNrdD9pLWNrdCtlLmluRXh0cmFjdEJveC53aWR0aC8yOmktZS5pbkV4dHJhY3RCb3gud2lkdGgvMi1lLm91dEV4dHJhY3RCb3gud2lkdGgtKHI/YTowKSxpPWktZS5saWJyYXJ5RnVuY3Rpb25zQm94LndpZHRoLShvP2E6MCksdmt0KGdrdCh0LCJnIixfa3QuU2NlbmUuSU5FWFRSQUNUKSxpLG4pfWlmKHIpe2xldCBpPWUuY29yZUJveC53aWR0aDtzPGNrdD9pPWktY2t0K2Uub3V0RXh0cmFjdEJveC53aWR0aC8yOmktPWUub3V0RXh0cmFjdEJveC53aWR0aC8yLGk9aS1lLmxpYnJhcnlGdW5jdGlvbnNCb3gud2lkdGgtKG8/YTowKSx2a3QoZ2t0KHQsImciLF9rdC5TY2VuZS5PVVRFWFRSQUNUKSxpLG4pfWlmKG8pe2xldCBpPWUuY29yZUJveC53aWR0aC1lLmxpYnJhcnlGdW5jdGlvbnNCb3gud2lkdGgvMjt2a3QoZ2t0KHQsImciLF9rdC5TY2VuZS5GVU5DVElPTl9MSUJSQVJZKSxpLG4pfX0pKG8sZSksciYmby5hdHRyKCJvcGFjaXR5IiwwKS50cmFuc2l0aW9uKCkuYXR0cigib3BhY2l0eSIsMSksb31sZXQgc0x0PWNsYXNzIGV4dGVuZHModHIoeWUpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5ub2RlPW51bGwsdGhpcy5yZW5kZXJJbmZvPW51bGwsdGhpcy5jb2xvckJ5PXprdC5TVFJVQ1RVUkUsdGhpcy50ZW1wbGF0ZUluZGV4PW51bGwsdGhpcy50eXBlPW51bGwsdGhpcy52ZXJ0aWNhbD0hMSx0aGlzLmNvbnN0PSExLHRoaXMuc3VtbWFyeT0hMSx0aGlzLmZpbGw9bnVsbCx0aGlzLmhlaWdodD0yMH1fY29tcHV0ZUZpbGxPdmVycmlkZSh0LGUsbixpLHIpe3JldHVybiB0JiZlJiZpP1prdChpLG4sZSwhMSk6cn1fZ2V0U3Ryb2tlT3ZlcnJpZGUodCl7cmV0dXJuIHQ/UWt0KHQpOm51bGx9X2dldFR5cGUodCxlLG4saSl7Y29uc3R7R3JhcGhJY29uVHlwZTpyfT1Ua3Q7aWYodClzd2l0Y2godC50eXBlKXtjYXNlIHZBdC5PUDp7Y29uc3QgaT10Lm9wO3JldHVybiJzdHJpbmciIT10eXBlb2YgaT9yLk9QOiJDb25zdCI9PT1pfHxuP3IuQ09OU1Q6aS5lbmRzV2l0aCgiU3VtbWFyeSIpfHxlP3IuU1VNTUFSWTpyLk9QfWNhc2UgdkF0Lk1FVEE6cmV0dXJuIHIuTUVUQTtjYXNlIHZBdC5TRVJJRVM6cmV0dXJuIHIuU0VSSUVTfXJldHVybiBpfV9pc1ZlcnRpY2FsKHQsZSl7cmV0dXJuIHQ/dC5oYXNOb25Db250cm9sRWRnZXM6ISFlfV9nZXRGYWRlZCh0KXtyZXR1cm4gdCYmdC5pc0ZhZGVkT3V0fV9vbkZpbGxPdmVycmlkZUNoYW5nZWQodCxlKXtjb25zdHtub2RlOm4scmVuZGVySW5mbzppLGNvbG9yQnk6cix0ZW1wbGF0ZUluZGV4Om99PXRoaXM7dCE9PWUmJktrdCh0aGlzLiQuaWNvbi5nZXRTdmdEZWZpbmFibGVFbGVtZW50KCkpLG4mJmkmJm8mJlprdChvLHIsaSwhMSx0aGlzLiQuaWNvbi5nZXRTdmdEZWZpbmFibGVFbGVtZW50KCkpfX07c0x0LnRlbXBsYXRlPV9lYAogICAgPHN0eWxlPgogICAgICB0Zi1ncmFwaC1pY29uIHsKICAgICAgICAtLXRiLWdyYXBoLWZhZGVkOiB2YXIoLS10Yi1ncmFwaC1mYWRlZCk7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8dGYtZ3JhcGgtaWNvbgogICAgICBpZD0iaWNvbiIKICAgICAgdHlwZT0iW1tfZ2V0VHlwZShub2RlLCBzdW1tYXJ5LCBjb25zdCwgdHlwZSldXSIKICAgICAgaGVpZ2h0PSJbW2hlaWdodF1dIgogICAgICBmaWxsLW92ZXJyaWRlPSJbW19maWxsT3ZlcnJpZGVdXSIKICAgICAgc3Ryb2tlLW92ZXJyaWRlPSJbW19nZXRTdHJva2VPdmVycmlkZShfZmlsbE92ZXJyaWRlKV1dIgogICAgICBmYWRlZD0iW1tfZ2V0RmFkZWQocmVuZGVySW5mbyldXSIKICAgICAgdmVydGljYWw9IltbX2lzVmVydGljYWwobm9kZSwgdmVydGljYWwpXV0iCiAgICA+PC90Zi1ncmFwaC1pY29uPgogIGAsdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sc0x0LnByb3RvdHlwZSwibm9kZSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxzTHQucHJvdG90eXBlLCJyZW5kZXJJbmZvIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLHNMdC5wcm90b3R5cGUsImNvbG9yQnkiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pXSxzTHQucHJvdG90eXBlLCJ0ZW1wbGF0ZUluZGV4Iix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLHNMdC5wcm90b3R5cGUsInR5cGUiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxzTHQucHJvdG90eXBlLCJ2ZXJ0aWNhbCIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHNMdC5wcm90b3R5cGUsImNvbnN0Iix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sc0x0LnByb3RvdHlwZSwic3VtbWFyeSIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxzTHQucHJvdG90eXBlLCJmaWxsIix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLHNMdC5wcm90b3R5cGUsImhlaWdodCIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZyxjb21wdXRlZDoiX2NvbXB1dGVGaWxsT3ZlcnJpZGUobm9kZSwgcmVuZGVySW5mbywgY29sb3JCeSwgdGVtcGxhdGVJbmRleCwgZmlsbCkiLG9ic2VydmVyOiJfb25GaWxsT3ZlcnJpZGVDaGFuZ2VkIn0pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxzTHQucHJvdG90eXBlLCJfZmlsbE92ZXJyaWRlIix2b2lkIDApLHNMdD10KFtpKCJ0Zi1ub2RlLWljb24iKV0sc0x0KTtsZXQgbEx0PWNsYXNzIGV4dGVuZHModHIoeWUpKXtfaXRlbVR5cGVDaGFuZ2VkKCl7InN1Ym5vZGUiIT09dGhpcy5pdGVtVHlwZT90aGlzLiRbImxpc3QtaXRlbSJdLmNsYXNzTGlzdC5hZGQoImNsaWNrYWJsZSIpOnRoaXMuJFsibGlzdC1pdGVtIl0uY2xhc3NMaXN0LnJlbW92ZSgiY2xpY2thYmxlIil9X25vZGVMaXN0ZW5lcih0KXt0aGlzLmZpcmUoIm5vZGUtbGlzdC1pdGVtLSIrdC50eXBlLHtub2RlTmFtZTp0aGlzLm5hbWUsdHlwZTp0aGlzLml0ZW1UeXBlfSl9X2ZhZGVkQ2xhc3ModCl7cmV0dXJuIHQmJnQuaXNGYWRlZE91dD8iZmFkZWQiOiIifX07ZnVuY3Rpb24gY0x0KHQsZSxuKXtyZXR1cm4gd2Uuc29ydEJ5KHQsW3Q9PmUubm9kZSh0KS5vcCx0PT5lLm5vZGUodCkudGVtcGxhdGVJZCx0PT5lLm5laWdoYm9ycyh0KS5sZW5ndGgsdD0+ZS5wcmVkZWNlc3NvcnModCkubGVuZ3RoLHQ9PmUuc3VjY2Vzc29ycyh0KS5sZW5ndGgsdD0+dC5zdWJzdHIobi5sZW5ndGgpXSl9ZnVuY3Rpb24gdUx0KHQsZSl7aWYoIShmdW5jdGlvbiBuKHQsZSl7bGV0IG49QkF0KHQpLGk9QkF0KGUpO2ZvcihsZXQgdD0wO3Q8bi5sZW5ndGg7dCsrKWlmKG5bdF0hPT1pW3RdKXJldHVybiExO3JldHVybiEwfSkodCxlKSlyZXR1cm4hMTtsZXQgaT10LmdyYXBoKCkubmFtZSxyPWUuZ3JhcGgoKS5uYW1lLG89e30sYT17fSxzPVtdO2Z1bmN0aW9uIGwodCxlKXtsZXQgbj10LnN1YnN0cihpLmxlbmd0aCksbD1lLnN1YnN0cihyLmxlbmd0aCk7cmV0dXJuIG9bbl1eYVtsXT8oY29uc29sZS53YXJuKCJkaWZmZXJlbnQgdmlzaXQgcGF0dGVybiIsIlsiK2krIl0iLG4sIlsiK3IrIl0iLGwpLCEwKToob1tuXXx8KG9bbl09YVtsXT0hMCxzLnB1c2goe24xOnQsbjI6ZX0pKSwhMSl9bGV0IGM9dC5zb3VyY2VzKCksdT1lLnNvdXJjZXMoKTtpZihjLmxlbmd0aCE9PXUubGVuZ3RoKXJldHVybiBjb25zb2xlLmxvZygiZGlmZmVyZW50IHNvdXJjZSBsZW5ndGgiKSwhMTtjPWNMdChjLHQsaSksdT1jTHQodSxlLHIpO2ZvcihsZXQgdD0wO3Q8Yy5sZW5ndGg7dCsrKWlmKGwoY1t0XSx1W3RdKSlyZXR1cm4hMTtmb3IoO3MubGVuZ3RoPjA7KXtsZXQgbj1zLnBvcCgpO2lmKCFoTHQodC5ub2RlKG4ubjEpLGUubm9kZShuLm4yKSkpcmV0dXJuITE7bGV0IG89dC5zdWNjZXNzb3JzKG4ubjEpLGE9ZS5zdWNjZXNzb3JzKG4ubjIpO2lmKG8ubGVuZ3RoIT09YS5sZW5ndGgpcmV0dXJuIGNvbnNvbGUubG9nKCIjIG9mIHN1Y2Nlc3NvcnMgbWlzbWF0Y2giLG8sYSksITE7bz1jTHQobyx0LGkpLGE9Y0x0KGEsZSxyKTtmb3IobGV0IHQ9MDt0PG8ubGVuZ3RoO3QrKylpZihsKG9bdF0sYVt0XSkpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gaEx0KHQsZSl7aWYodC50eXBlPT09dkF0Lk1FVEEpe2xldCBuPXQsaT1lO3JldHVybiBuLnRlbXBsYXRlSWQmJmkudGVtcGxhdGVJZCYmbi50ZW1wbGF0ZUlkPT09aS50ZW1wbGF0ZUlkfWlmKHQudHlwZT09PXZBdC5PUCYmZS50eXBlPT09dkF0Lk9QKXJldHVybiB0Lm9wPT09ZS5vcDtpZih0LnR5cGU9PT12QXQuU0VSSUVTJiZlLnR5cGU9PT12QXQuU0VSSUVTKXtsZXQgbj10LGk9ZSxyPW4ubWV0YWdyYXBoLm5vZGVDb3VudCgpO3JldHVybiByPT09aS5tZXRhZ3JhcGgubm9kZUNvdW50KCkmJigwPT09cnx8bi5tZXRhZ3JhcGgubm9kZShuLm1ldGFncmFwaC5ub2RlcygpWzBdKS5vcD09PWkubWV0YWdyYXBoLm5vZGUoaS5tZXRhZ3JhcGgubm9kZXMoKVswXSkub3ApfXJldHVybiExfXZhciBkTHQ7bEx0LnRlbXBsYXRlPV9lYAogICAgPHN0eWxlPgogICAgICAjbGlzdC1pdGVtIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBjb2xvcjogdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpOwogICAgICAgIGZvbnQtc2l6ZTogMTFwdDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KCiAgICAgICNsaXN0LWl0ZW06aG92ZXIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWdvb2dsZS15ZWxsb3ctMTAwKTsKICAgICAgfQoKICAgICAgLmNsaWNrYWJsZSB7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICB9CgogICAgICAjbGlzdC1pdGVtIHNwYW4gewogICAgICAgIG1hcmdpbi1sZWZ0OiA0MHB4OwogICAgICB9CgogICAgICAjbGlzdC1pdGVtLmV4Y2x1ZGVkIHNwYW4gewogICAgICAgIGNvbG9yOiAjOTk5OwogICAgICB9CgogICAgICAjbGlzdC1pdGVtIHNwYW4uZWRnZS1sYWJlbCB7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICBtYXJnaW4tbGVmdDogM3B4OwogICAgICAgIG1hcmdpbi1yaWdodDogNXB4OwogICAgICB9CgogICAgICAubm9kZS1pY29uIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAxcHg7CiAgICAgICAgbGVmdDogMnB4OwogICAgICB9CgogICAgICAuZmFkZWQgc3BhbiB7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLWdyYXBoLWZhZGVkKTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2CiAgICAgIGlkPSJsaXN0LWl0ZW0iCiAgICAgIG9uLW1vdXNlb3Zlcj0iX25vZGVMaXN0ZW5lciIKICAgICAgb24tbW91c2VvdXQ9Il9ub2RlTGlzdGVuZXIiCiAgICAgIG9uLWNsaWNrPSJfbm9kZUxpc3RlbmVyIgogICAgPgogICAgICA8ZGl2IGNsYXNzJD0ie3tfZmFkZWRDbGFzcyhpdGVtUmVuZGVySW5mbyl9fSI+CiAgICAgICAgPHRmLW5vZGUtaWNvbgogICAgICAgICAgY2xhc3M9Im5vZGUtaWNvbiIKICAgICAgICAgIGhlaWdodD0iMTIiCiAgICAgICAgICBjb2xvci1ieT0iW1tjb2xvckJ5XV0iCiAgICAgICAgICBjb2xvci1ieS1wYXJhbXM9IltbY29sb3JCeVBhcmFtc11dIgogICAgICAgICAgbm9kZT0iW1tpdGVtTm9kZV1dIgogICAgICAgICAgcmVuZGVyLWluZm89IltbaXRlbVJlbmRlckluZm9dXSIKICAgICAgICAgIHRlbXBsYXRlLWluZGV4PSJbW3RlbXBsYXRlSW5kZXhdXSIKICAgICAgICA+CiAgICAgICAgPC90Zi1ub2RlLWljb24+CiAgICAgICAgPHNwYW4gdGl0bGUkPSJbW25hbWVdXSI+W1tuYW1lXV08L3NwYW4+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgYCx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxsTHQucHJvdG90eXBlLCJjYXJkTm9kZSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxsTHQucHJvdG90eXBlLCJpdGVtTm9kZSIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxsTHQucHJvdG90eXBlLCJlZGdlTGFiZWwiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sbEx0LnByb3RvdHlwZSwiaXRlbVJlbmRlckluZm8iLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sbEx0LnByb3RvdHlwZSwibmFtZSIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZyxvYnNlcnZlcjoiX2l0ZW1UeXBlQ2hhbmdlZCJ9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sbEx0LnByb3RvdHlwZSwiaXRlbVR5cGUiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sbEx0LnByb3RvdHlwZSwiY29sb3JCeSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxsTHQucHJvdG90eXBlLCJjb2xvckJ5UGFyYW1zIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sbEx0LnByb3RvdHlwZSwidGVtcGxhdGVJbmRleCIsdm9pZCAwKSxsTHQ9dChbaSgidGYtZ3JhcGgtb3AtY29tcGF0LWxpc3QtaXRlbSIpXSxsTHQpLChmdW5jdGlvbih0KXt0W3QuVEVNUExBVEVTX1VQREFURUQ9MF09IlRFTVBMQVRFU19VUERBVEVEIn0pKGRMdHx8KGRMdD17fSkpO2NsYXNzIHBMdCBleHRlbmRzIGNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5ldmVudFR5cGVUb0xpc3RlbmVycz1uZXcgTWFwfWdldExpc3RlbmVycyh0KXtyZXR1cm4gdGhpcy5ldmVudFR5cGVUb0xpc3RlbmVycy5oYXModCl8fHRoaXMuZXZlbnRUeXBlVG9MaXN0ZW5lcnMuc2V0KHQsW10pLHRoaXMuZXZlbnRUeXBlVG9MaXN0ZW5lcnMuZ2V0KHQpfWFkZExpc3RlbmVyKHQsZSl7dGhpcy5nZXRMaXN0ZW5lcnModCkucHVzaChlKX1yZW1vdmVMaXN0ZW5lcih0LGUpe2NvbnN0IG49dGhpcy5nZXRMaXN0ZW5lcnModCkuZmlsdGVyKCh0PT50IT09ZSkpO3RoaXMuZXZlbnRUeXBlVG9MaXN0ZW5lcnMuc2V0KHQsbil9ZGlzcGF0Y2hFdmVudCh0LGUpe2Zvcihjb25zdCBuIG9mIHRoaXMuZ2V0TGlzdGVuZXJzKHQpKW4oZSl9fXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuaGFzU2hhcGVJbmZvPSExLHRoaXMubWF4TWV0YUVkZ2VTaXplPTEsdGhpcy5ncmFwaE9wdGlvbnM9e30sdGhpcy50ZW1wbGF0ZXM9bnVsbCx0aGlzLmdyYXBoT3B0aW9ucy5jb21wb3VuZD0hMCx0aGlzLmdyYXBoT3B0aW9ucy5yYW5rZGlyPXQucmFua0RpcmVjdGlvbix0aGlzLnJvb3Q9RUF0KGdBdCx0aGlzLmdyYXBoT3B0aW9ucyksdGhpcy5saWJyYXJ5RnVuY3Rpb25zPXt9LHRoaXMuc2VyaWVzR3JvdXBNYXA9bmV3IE1hcCh0LnNlcmllc01hcCksdGhpcy5kZXZpY2VzPW51bGwsdGhpcy54bGFDbHVzdGVycz1udWxsLHRoaXMudmVyaWZ5VGVtcGxhdGU9dC52ZXJpZnlUZW1wbGF0ZSx0aGlzLmluZGV4PXt9LHRoaXMuaW5kZXguX19yb290X189dGhpcy5yb290LHRoaXMub3JkZXJpbmdzPXt9fWdldFNlcmllc0dyb3VwVHlwZSh0KXt2YXIgZTtyZXR1cm4gbnVsbCE9PShlPXRoaXMuc2VyaWVzR3JvdXBNYXAuZ2V0KHQpKSYmdm9pZCAwIT09ZT9lOnhBdC5HUk9VUH1zZXRTZXJpZXNHcm91cFR5cGUodCxlKXtyZXR1cm4gdGhpcy5zZXJpZXNHcm91cE1hcC5zZXQodCxlKX1idWlsZFNlcmllc0dyb3VwTWFwVG9nZ2xlZCh0KXtjb25zdCBlPXRoaXMuZ2V0U2VyaWVzR3JvdXBUeXBlKHQpPT09eEF0LkdST1VQP3hBdC5VTkdST1VQOnhBdC5HUk9VUDtyZXR1cm4gbmV3IE1hcChbLi4udGhpcy5zZXJpZXNHcm91cE1hcCxbdCxlXV0pfWdldE5vZGVNYXAoKXtyZXR1cm4gdGhpcy5pbmRleH1ub2RlKHQpe3JldHVybiB0aGlzLmluZGV4W3RdfXNldE5vZGUodCxlKXt0aGlzLmluZGV4W3RdPWV9Z2V0QnJpZGdlZ3JhcGgodCl7bGV0IGU9dGhpcy5pbmRleFt0XTtpZighZSl0aHJvdyBFcnJvcigiQ291bGQgbm90IGZpbmQgbm9kZSBpbiBoaWVyYXJjaHk6ICIrdCk7aWYoISgibWV0YWdyYXBoImluIGUpKXJldHVybiBudWxsO2lmKGUuYnJpZGdlZ3JhcGgpcmV0dXJuIGUuYnJpZGdlZ3JhcGg7bGV0IG49ZS5icmlkZ2VncmFwaD1SQXQoIkJSSURHRUdSQVBIIix5QXQuQlJJREdFLHRoaXMuZ3JhcGhPcHRpb25zKTtpZighZS5wYXJlbnROb2RlfHwhKCJtZXRhZ3JhcGgiaW4gZS5wYXJlbnROb2RlKSlyZXR1cm4gbjtsZXQgaT1lLnBhcmVudE5vZGUscj1pLm1ldGFncmFwaCxvPXRoaXMuZ2V0QnJpZGdlZ3JhcGgoaS5uYW1lKTtyZXR1cm4gd2UuZWFjaChbcixvXSwoZT0+e2UuZWRnZXMoKS5maWx0ZXIoKGU9PmUudj09PXR8fGUudz09PXQpKS5mb3JFYWNoKChpPT57bGV0IHI9aS53PT09dCxvPWUuZWRnZShpKTt3ZS5lYWNoKG8uYmFzZUVkZ2VMaXN0LChlPT57bGV0W28sYV09cj9bZS53LGkudl06W2UudixpLnddLHM9dGhpcy5nZXRDaGlsZE5hbWUodCxvKSxsPXt2OnI/YTpzLHc6cj9zOmF9LGM9bi5lZGdlKGwpO2N8fChjPUNBdChsLnYsbC53KSxjLmluYm91bmQ9cixuLnNldEVkZ2UobC52LGwudyxjKSksYy5hZGRCYXNlRWRnZShlLHRoaXMpfSkpfSkpfSkpLG59Z2V0Q2hpbGROYW1lKHQsZSl7bGV0IG49dGhpcy5pbmRleFtlXTtmb3IoO247KXtpZihuLnBhcmVudE5vZGUmJm4ucGFyZW50Tm9kZS5uYW1lPT09dClyZXR1cm4gbi5uYW1lO249bi5wYXJlbnROb2RlfXRocm93IEVycm9yKCJDb3VsZCBub3QgZmluZCBpbW1lZGlhdGUgY2hpbGQgZm9yIGRlc2NlbmRhbnQ6ICIrZSl9Z2V0UHJlZGVjZXNzb3JzKHQpe2xldCBlPXRoaXMuaW5kZXhbdF07aWYoIWUpdGhyb3cgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIG5vZGUgd2l0aCBuYW1lOiAiK3QpO2xldCBuPXRoaXMuZ2V0T25lV2F5RWRnZXMoZSwhMCk7cmV0dXJuIGUuaXNHcm91cE5vZGV8fHdlLmVhY2goZS5pbkVtYmVkZGluZ3MsKGk9Pnt3ZS5lYWNoKGUuaW5wdXRzLChlPT57aWYoZS5uYW1lPT09aS5uYW1lKXtsZXQgcj1uZXcgQUF0KGkubmFtZSx0KTtyLmFkZEJhc2VFZGdlKHtpc0NvbnRyb2xEZXBlbmRlbmN5OmUuaXNDb250cm9sRGVwZW5kZW5jeSxvdXRwdXRUZW5zb3JLZXk6ZS5vdXRwdXRUZW5zb3JLZXksaXNSZWZlcmVuY2VFZGdlOiExLHY6aS5uYW1lLHc6dH0sdGhpcyksbi5yZWd1bGFyLnB1c2gocil9fSkpfSkpLG59Z2V0U3VjY2Vzc29ycyh0KXtsZXQgZT10aGlzLmluZGV4W3RdO2lmKCFlKXRocm93IEVycm9yKCJDb3VsZCBub3QgZmluZCBub2RlIHdpdGggbmFtZTogIit0KTtsZXQgbj10aGlzLmdldE9uZVdheUVkZ2VzKGUsITEpO3JldHVybiBlLmlzR3JvdXBOb2RlfHx3ZS5lYWNoKGUub3V0RW1iZWRkaW5ncywoZT0+e3dlLmVhY2goZS5pbnB1dHMsKGk9PntpZihpLm5hbWU9PT10KXtsZXQgcj1uZXcgQUF0KHQsZS5uYW1lKTtyLmFkZEJhc2VFZGdlKHtpc0NvbnRyb2xEZXBlbmRlbmN5OmkuaXNDb250cm9sRGVwZW5kZW5jeSxvdXRwdXRUZW5zb3JLZXk6aS5vdXRwdXRUZW5zb3JLZXksaXNSZWZlcmVuY2VFZGdlOiExLHY6dCx3OmUubmFtZX0sdGhpcyksbi5yZWd1bGFyLnB1c2gocil9fSkpfSkpLG59Z2V0T25lV2F5RWRnZXModCxlKXtsZXQgbj17Y29udHJvbDpbXSxyZWd1bGFyOltdfTtpZighdC5wYXJlbnROb2RlfHwhdC5wYXJlbnROb2RlLmlzR3JvdXBOb2RlKXJldHVybiBuO2xldCBpPXQucGFyZW50Tm9kZSxyPWkubWV0YWdyYXBoLG89dGhpcy5nZXRCcmlkZ2VncmFwaChpLm5hbWUpO3JldHVybiBmTHQocix0LGUsbiksZkx0KG8sdCxlLG4pLG59Z2V0VG9wb2xvZ2ljYWxPcmRlcmluZyh0KXtsZXQgZT10aGlzLmluZGV4W3RdO2lmKCFlKXRocm93IEVycm9yKCJDb3VsZCBub3QgZmluZCBub2RlIHdpdGggbmFtZTogIit0KTtpZighZS5pc0dyb3VwTm9kZSlyZXR1cm4gbnVsbDtpZih0IGluIHRoaXMub3JkZXJpbmdzKXJldHVybiB0aGlzLm9yZGVyaW5nc1t0XTtsZXQgbj17fSxpPXt9LHI9ZS5tZXRhZ3JhcGg7d2UuZWFjaChyLmVkZ2VzKCksKHQ9PntyLmVkZ2UodCkubnVtUmVndWxhckVkZ2VzJiYodC52IGluIG58fChuW3Qudl09W10pLG5bdC52XS5wdXNoKHQudyksaVt0LnddPSEwKX0pKTtsZXQgbz13ZS5kaWZmZXJlbmNlKHdlLmtleXMobiksd2Uua2V5cyhpKSksYT10aGlzLm9yZGVyaW5nc1t0XT17fSxzPTA7Zm9yKDtvLmxlbmd0aDspe2xldCB0PW8uc2hpZnQoKTthW3RdPXMrKyx3ZS5lYWNoKG5bdF0sKHQ9Pm8ucHVzaCh0KSkpLGRlbGV0ZSBuW3RdfXJldHVybiBhfWdldFRlbXBsYXRlSW5kZXgoKXtpZighdGhpcy50ZW1wbGF0ZXMpcmV0dXJuIG51bGw7bGV0IHQ9a2codGhpcy50ZW1wbGF0ZXMpO2lmKCF0Lmxlbmd0aClyZXR1cm4gbnVsbDtsZXQgZT14TSgpLmRvbWFpbih0KS5yYW5nZShSbCgwLHQubGVuZ3RoKSk7cmV0dXJuIHQ9PmUodCl9dXBkYXRlVGVtcGxhdGVzKCl7aUF0KCJGaW5kaW5nIHNpbWlsYXIgc3ViZ3JhcGhzIiwoKCk9Pnt0aGlzLnRlbXBsYXRlcz0oZnVuY3Rpb24gdChlLG4pe2xldCBpPShmdW5jdGlvbiBvKHQsZSl7cmV0dXJuIHdlLnJlZHVjZSh0LChmdW5jdGlvbih0LG4pe2xldCBpPW5bMF0scj1bXTtyZXR1cm4gblsxXS5ub2Rlcy5mb3JFYWNoKChmdW5jdGlvbih0KXtmb3IobGV0IG49MDtuPHIubGVuZ3RoO24rKylpZighZXx8dUx0KHJbbl0ubWV0YW5vZGUubWV0YWdyYXBoLHQubWV0YWdyYXBoKSlyZXR1cm4gdC50ZW1wbGF0ZUlkPXJbbl0ubWV0YW5vZGUudGVtcGxhdGVJZCx2b2lkIHJbbl0ubWVtYmVycy5wdXNoKHQubmFtZSk7dC50ZW1wbGF0ZUlkPWkrIlsiK3IubGVuZ3RoKyJdIixyLnB1c2goe21ldGFub2RlOnQsbWVtYmVyczpbdC5uYW1lXX0pfSkpLHIuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dFtlLm1ldGFub2RlLnRlbXBsYXRlSWRdPXtsZXZlbDpuWzFdLmxldmVsLG5vZGVzOmUubWVtYmVyc319KSksdH0pLHt9KX0pKChmdW5jdGlvbiByKHQpe2NvbnN0IGU9dC5nZXROb2RlTWFwKCk7bGV0IG49T2JqZWN0LmtleXMoZSkucmVkdWNlKCgodCxuKT0+e2NvbnN0IGk9ZVtuXTtpZihpLnR5cGUhPT12QXQuTUVUQSlyZXR1cm4gdDtsZXQgcj1uLnNwbGl0KCIvIikubGVuZ3RoLTEsbz0oZnVuY3Rpb24gYSh0KXtyZXR1cm4gd2UubWFwKHtkZXB0aDp0LmRlcHRoLCJ8VnwiOnQubWV0YWdyYXBoLm5vZGVzKCkubGVuZ3RoLCJ8RXwiOnQubWV0YWdyYXBoLmVkZ2VzKCkubGVuZ3RofSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZSsiPSIrdH0pKS5qb2luKCIgIikrIiBbb3BzXSAiK3dlLm1hcCh0Lm9wSGlzdG9ncmFtLChmdW5jdGlvbih0LGUpe3JldHVybiBlKyI9Iit0fSkpLmpvaW4oIiwiKX0pKGkpLHM9dFtvXXx8e25vZGVzOltdLGxldmVsOnJ9O3JldHVybiB0W29dPXMscy5ub2Rlcy5wdXNoKGkpLHMubGV2ZWw+ciYmKHMubGV2ZWw9ciksdH0pLHt9KTtyZXR1cm4gT2JqZWN0LmtleXMobikubWFwKCh0PT5bdCxuW3RdXSkpLmZpbHRlcigoKFt0LGVdKT0+e2NvbnN0e25vZGVzOm59PWU7aWYobi5sZW5ndGg+MSlyZXR1cm4hMDtjb25zdCBpPW5bMF07cmV0dXJuIGkudHlwZT09PXZBdC5NRVRBJiZpLmFzc29jaWF0ZWRGdW5jdGlvbn0pKS5zb3J0KCgoW3QsZV0pPT5lLm5vZGVzWzBdLmRlcHRoKSl9KShlKSxuKTtyZXR1cm4gT2JqZWN0LmtleXMoaSkuc29ydCgodD0+aVt0XS5sZXZlbCkpLnJlZHVjZSgoKHQsZSk9Pih0W2VdPWlbZV0sdCkpLHt9KX0pKHRoaXMsdGhpcy52ZXJpZnlUZW1wbGF0ZSksdGhpcy5kaXNwYXRjaEV2ZW50KGRMdC5URU1QTEFURVNfVVBEQVRFRCl9KSxZQ3QuSElFUkFSQ0hZX0ZJTkRfU0lNSUxBUl9TVUJHUkFQSFMpfX1mdW5jdGlvbiBmTHQodCxlLG4saSl7bGV0IHI9bj90LmluRWRnZXMoZS5uYW1lKTp0Lm91dEVkZ2VzKGUubmFtZSk7d2UuZWFjaChyLChlPT57bGV0IG49dC5lZGdlKGUpOyhuLm51bVJlZ3VsYXJFZGdlcz9pLnJlZ3VsYXI6aS5jb250cm9sKS5wdXNoKG4pfSkpfWNvbnN0IG1MdD17dmVyaWZ5VGVtcGxhdGU6ITAsc2VyaWVzTm9kZU1pblNpemU6NSxzZXJpZXNNYXA6bmV3IE1hcCxyYW5rRGlyZWN0aW9uOiJCVCIsdXNlR2VuZXJhbGl6ZWRTZXJpZXNQYXR0ZXJuczohMX07ZnVuY3Rpb24gZ0x0KHQsZSxuKXtjb25zdCBpPW5ldyBwTHQoZSkscj17fTtyZXR1cm4gYUF0KCJBZGRpbmcgbm9kZXMiLDMwLCgoKT0+e2xldCBlPXt9LG49e307d2UuZWFjaCh0Lm5vZGVzLCgodCxpKT0+e3QuZGV2aWNlJiYoZVt0LmRldmljZV09ITApLHQueGxhQ2x1c3RlciYmKG5bdC54bGFDbHVzdGVyXT0hMCl9KSksaS5kZXZpY2VzPXdlLmtleXMoZSksaS54bGFDbHVzdGVycz13ZS5rZXlzKG4pLChmdW5jdGlvbiByKHQsZSl7Y29uc3Qgbj17fTt3ZS5lYWNoKGUubm9kZXMsKChlLGkpPT57bGV0IHI9SEF0KGUubmFtZSksbz10LnJvb3Q7by5kZXB0aD1NYXRoLm1heChyLmxlbmd0aCxvLmRlcHRoKSxuW2Uub3BdfHwobltlLm9wXT1bXSksbltlLm9wXS5wdXNoKGUpO2ZvcihsZXQgaT0wO2k8ci5sZW5ndGgmJihvLmRlcHRoPU1hdGgubWF4KG8uZGVwdGgsci5sZW5ndGgtaSksby5jYXJkaW5hbGl0eSs9ZS5jYXJkaW5hbGl0eSxvLm9wSGlzdG9ncmFtW2Uub3BdPShvLm9wSGlzdG9ncmFtW2Uub3BdfHwwKSsxLG51bGwhPWUuZGV2aWNlJiYoby5kZXZpY2VIaXN0b2dyYW1bZS5kZXZpY2VdPShvLmRldmljZUhpc3RvZ3JhbVtlLmRldmljZV18fDApKzEpLG51bGwhPWUueGxhQ2x1c3RlciYmKG8ueGxhQ2x1c3Rlckhpc3RvZ3JhbVtlLnhsYUNsdXN0ZXJdPShvLnhsYUNsdXN0ZXJIaXN0b2dyYW1bZS54bGFDbHVzdGVyXXx8MCkrMSksZS5jb21wYXRpYmxlP28uY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5jb21wYXRpYmxlPShvLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZXx8MCkrMTpvLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlPShvLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlfHwwKSsxLHdlLmVhY2goZS5pbkVtYmVkZGluZ3MsKHQ9Pnt0LmNvbXBhdGlibGU/by5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGU9KG8uY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5jb21wYXRpYmxlfHwwKSsxOm8uY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGU9KG8uY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGV8fDApKzF9KSksd2UuZWFjaChlLm91dEVtYmVkZGluZ3MsKHQ9Pnt0LmNvbXBhdGlibGU/by5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGU9KG8uY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5jb21wYXRpYmxlfHwwKSsxOm8uY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGU9KG8uY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGV8fDApKzF9KSksaSE9PXIubGVuZ3RoLTEpO2krKyl7bGV0IGU9cltpXSxhPXQubm9kZShlKTtpZighYSYmKGE9RUF0KGUsdC5ncmFwaE9wdGlvbnMpLGEucGFyZW50Tm9kZT1vLHQuc2V0Tm9kZShlLGEpLG8ubWV0YWdyYXBoLnNldE5vZGUoZSxhKSwwPT09ZS5pbmRleE9mKF9BdCkmJm8ubmFtZT09PWdBdCkpe2NvbnN0IGk9ZS5zdWJzdHJpbmcoX0F0Lmxlbmd0aCk7bltpXXx8KG5baV09W10pLHQubGlicmFyeUZ1bmN0aW9uc1tpXT17bm9kZTphLHVzYWdlczpuW2ldfSxhLmFzc29jaWF0ZWRGdW5jdGlvbj1pfW89YX10LnNldE5vZGUoZS5uYW1lLGUpLGUucGFyZW50Tm9kZT1vLG8ubWV0YWdyYXBoLnNldE5vZGUoZS5uYW1lLGUpLHdlLmVhY2goZS5pbkVtYmVkZGluZ3MsKGZ1bmN0aW9uKG4pe3Quc2V0Tm9kZShuLm5hbWUsbiksbi5wYXJlbnROb2RlPWV9KSksd2UuZWFjaChlLm91dEVtYmVkZGluZ3MsKGZ1bmN0aW9uKG4pe3Quc2V0Tm9kZShuLm5hbWUsbiksbi5wYXJlbnROb2RlPWV9KSl9KSl9KShpLHQpfSksbixZQ3QuSElFUkFSQ0hZX0FERF9OT0RFUykudGhlbigoKCk9PmFBdCgiRGV0ZWN0IHNlcmllcyIsMzAsKCgpPT57ZS5zZXJpZXNOb2RlTWluU2l6ZT4wJiZfTHQoaS5yb290LGkscixlLnNlcmllc05vZGVNaW5TaXplLGUuc2VyaWVzTWFwLGUudXNlR2VuZXJhbGl6ZWRTZXJpZXNQYXR0ZXJucyl9KSxuLFlDdC5ISUVSQVJDSFlfREVURUNUX1NFUklFUykpKS50aGVuKCgoKT0+YUF0KCJBZGRpbmcgZWRnZXMiLDQwLCgoKT0+eyEoZnVuY3Rpb24gZSh0LG4saSl7bGV0IHI9dC5nZXROb2RlTWFwKCksbz1bXSxhPVtdLHM9KHQsZSk9PntsZXQgbj0wO2Zvcig7dDspZVtuKytdPXQubmFtZSx0PXQucGFyZW50Tm9kZTtyZXR1cm4gbi0xfTt3ZS5lYWNoKG4uZWRnZXMsKGU9PntsZXQgaT1zKG4ubm9kZXNbZS52XSxvKSxsPXMobi5ub2Rlc1tlLnddLGEpO2lmKC0xPT09aXx8LTE9PT1sKXJldHVybjtmb3IoO29baV09PT1hW2xdOylpZihpLS0sbC0tLGk8MHx8bDwwKXRocm93IEVycm9yKCJObyBkaWZmZXJlbmNlIGZvdW5kIGJldHdlZW4gYW5jZXN0b3IgcGF0aHMuIik7bGV0IGM9cltvW2krMV1dLHU9b1tpXSxoPWFbbF0sZD1jLm1ldGFncmFwaC5lZGdlKHUsaCk7ZHx8KGQ9Q0F0KHUsaCksYy5tZXRhZ3JhcGguc2V0RWRnZSh1LGgsZCkpLGMuaGFzTm9uQ29udHJvbEVkZ2VzfHxlLmlzQ29udHJvbERlcGVuZGVuY3l8fChjLmhhc05vbkNvbnRyb2xFZGdlcz0hMCksZC5hZGRCYXNlRWRnZShlLHQpfSkpfSkoaSx0KX0pLG4sWUN0LkhJRVJBUkNIWV9BRERfRURHRVMpKSkudGhlbigoKCk9PmkpKX1mdW5jdGlvbiBfTHQodCxlLG4saSxyLG8pe2xldCBhPXQubWV0YWdyYXBoO3dlLmVhY2goYS5ub2RlcygpLCh0PT57bGV0IHM9YS5ub2RlKHQpO3MudHlwZT09PXZBdC5NRVRBJiZfTHQocyxlLG4saSxyLG8pfSkpO2xldCBzPShmdW5jdGlvbiBsKHQpe3JldHVybiB3ZS5yZWR1Y2UodC5ub2RlcygpLCgoZSxuKT0+e2xldCBpPXQubm9kZShuKTtpZihpLnR5cGU9PT12QXQuTUVUQSlyZXR1cm4gZTtsZXQgcj1pLm9wO3JldHVybiByJiYoZVtyXT1lW3JdfHxbXSxlW3JdLnB1c2goaS5uYW1lKSksZX0pLHt9KX0pKGEpLGM9KG8/dkx0OnlMdCkocyxhLGUuZ3JhcGhPcHRpb25zKTt3ZS5lYWNoKGMsKGZ1bmN0aW9uKHQscil7bGV0IG89dC5tZXRhZ3JhcGgubm9kZXMoKTt3ZS5lYWNoKG8sKHQ9PntsZXQgZT1hLm5vZGUodCk7ZS5vd25pbmdTZXJpZXN8fChlLm93bmluZ1Nlcmllcz1yKX0pKSxvLmxlbmd0aDxpJiZlLmdldFNlcmllc0dyb3VwVHlwZSh0Lm5hbWUpPT09eEF0LkdST1VQJiZlLnNldFNlcmllc0dyb3VwVHlwZSh0Lm5hbWUseEF0LlVOR1JPVVApLGUuZ2V0U2VyaWVzR3JvdXBUeXBlKHQubmFtZSkhPT14QXQuVU5HUk9VUCYmKGUuc2V0Tm9kZShyLHQpLGEuc2V0Tm9kZShyLHQpLHdlLmVhY2gobywoZT0+e2xldCBpPWEubm9kZShlKTt0Lm1ldGFncmFwaC5zZXROb2RlKGUsaSksdC5wYXJlbnROb2RlPWkucGFyZW50Tm9kZSx0LmNhcmRpbmFsaXR5KyssbnVsbCE9aS5kZXZpY2UmJih0LmRldmljZUhpc3RvZ3JhbVtpLmRldmljZV09KHQuZGV2aWNlSGlzdG9ncmFtW2kuZGV2aWNlXXx8MCkrMSksbnVsbCE9aS54bGFDbHVzdGVyJiYodC54bGFDbHVzdGVySGlzdG9ncmFtW2kueGxhQ2x1c3Rlcl09KHQueGxhQ2x1c3Rlckhpc3RvZ3JhbVtpLnhsYUNsdXN0ZXJdfHwwKSsxKSxpLmNvbXBhdGlibGU/dC5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGU9KHQuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5jb21wYXRpYmxlfHwwKSsxOnQuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGU9KHQuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGV8fDApKzEsd2UuZWFjaChpLmluRW1iZWRkaW5ncywoZT0+e2UuY29tcGF0aWJsZT90LmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZT0odC5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGV8fDApKzE6dC5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZT0odC5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZXx8MCkrMX0pKSx3ZS5lYWNoKGkub3V0RW1iZWRkaW5ncywoZT0+e2UuY29tcGF0aWJsZT90LmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZT0odC5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGV8fDApKzE6dC5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZT0odC5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZXx8MCkrMX0pKSxpLnBhcmVudE5vZGU9dCxuW2VdPXIsYS5yZW1vdmVOb2RlKGUpfSkpKX0pKX1mdW5jdGlvbiB5THQodCxlLG4pe2xldCBpPXt9O3JldHVybiB3ZS5lYWNoKHQsKGZ1bmN0aW9uKHQscil7aWYodC5sZW5ndGg8PTEpcmV0dXJuO2xldCBvPXt9O3dlLmVhY2godCwoZnVuY3Rpb24odCl7Y29uc3QgZT0iKiI9PT10LmNoYXJBdCh0Lmxlbmd0aC0xKSxpPXQuc3BsaXQoIi8iKSxyPWlbaS5sZW5ndGgtMV0sYT1pLnNsaWNlKDAsaS5sZW5ndGgtMSkuam9pbigiLyIpLHM9ci5tYXRjaCgvXihcRCopKFxkKykkLyk7bGV0IGwsYyx1PSIiO3M/KGw9c1sxXSxjPXNbMl0pOihsPWU/ci5zdWJzdHIoMCxyLmxlbmd0aC0xKTpyLGM9MCx1PWU/IioiOiIiKTtjb25zdCBoPUxBdChsLHUsYSk7b1toXT1vW2hdfHxbXTtjb25zdCBkPWtBdChsLHUsYSwrYyx0LG4pO29baF0ucHVzaChkKX0pKSx3ZS5lYWNoKG8sKGZ1bmN0aW9uKHQsbyl7aWYodC5sZW5ndGg8MilyZXR1cm47dC5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybit0LmNsdXN0ZXJJZC0rZS5jbHVzdGVySWR9KSk7bGV0IGE9W3RbMF1dO2ZvcihsZXQgbz0xO288dC5sZW5ndGg7bysrKXtsZXQgcz10W29dO3MuY2x1c3RlcklkIT09YVthLmxlbmd0aC0xXS5jbHVzdGVySWQrMT8oYkx0KGEsaSwrcixlLG4pLGE9W3NdKTphLnB1c2gocyl9Ykx0KGEsaSwrcixlLG4pfSkpfSkpLGl9ZnVuY3Rpb24gdkx0KHQsZSxuKXtsZXQgaT17fTtyZXR1cm4gd2UuZWFjaCh0LChmdW5jdGlvbih0LHIpe2lmKHQubGVuZ3RoPD0xKXJldHVybjtsZXQgbz17fSxhPXt9O3dlLmVhY2godCwoZnVuY3Rpb24odCl7bGV0IGU9IioiPT09dC5jaGFyQXQodC5sZW5ndGgtMSksaT10LnNwbGl0KCIvIikscj1pW2kubGVuZ3RoLTFdLHM9aS5zbGljZSgwLGkubGVuZ3RoLTEpLmpvaW4oIi8iKTtjb25zdCBsPS8oXGQrKS9nO2xldCBjLHUsaCxkLHAsZj0wO2Zvcig7Yz1sLmV4ZWMocik7KSsrZix1PXIuc2xpY2UoMCxjLmluZGV4KSxoPWNbMF0sZD1yLnNsaWNlKGMuaW5kZXgrY1swXS5sZW5ndGgpLHA9TEF0KHUsZCxzKSxvW3BdPW9bcF0sb1twXXx8KG9bcF09a0F0KHUsZCxzLCtoLHQsbikpLG9bcF0uaWRzLnB1c2goaCksYVt0XT1hW3RdfHxbXSxhW3RdLnB1c2goW3AsaF0pO2Y8MSYmKHU9ZT9yLnN1YnN0cigwLHIubGVuZ3RoLTEpOnIsaD0wLGQ9ZT8iKiI6IiIscD1MQXQodSxkLHMpLG9bcF09b1twXSxvW3BdfHwob1twXT1rQXQodSxkLHMsK2gsdCxuKSksb1twXS5pZHMucHVzaChoKSxhW3RdPWFbdF18fFtdLGFbdF0ucHVzaChbcCxoXSkpfSkpO3ZhciBzPXt9O3dlLmVhY2goYSwoZnVuY3Rpb24odCxlKXt0LnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG9bZVswXV0uaWRzLmxlbmd0aC1vW3RbMF1dLmlkcy5sZW5ndGh9KSk7dmFyIGk9dFswXVswXSxyPXRbMF1bMV07c1tpXT1zW2ldfHxbXTtjb25zdCBhPWUuc3BsaXQoIi8iKSxsPWEuc2xpY2UoMCxhLmxlbmd0aC0xKS5qb2luKCIvIik7dmFyIGM9a0F0KG9baV0ucHJlZml4LG9baV0uc3VmZml4LGwsK3IsZSxuKTtzW2ldLnB1c2goYyl9KSksd2UuZWFjaChzLChmdW5jdGlvbih0LG8pe2lmKHQubGVuZ3RoPDIpcmV0dXJuO3Quc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4rdC5jbHVzdGVySWQtK2UuY2x1c3RlcklkfSkpO2xldCBhPVt0WzBdXTtmb3IobGV0IG89MTtvPHQubGVuZ3RoO28rKyl7bGV0IHM9dFtvXTtzLmNsdXN0ZXJJZCE9PWFbYS5sZW5ndGgtMV0uY2x1c3RlcklkKzE/KGJMdChhLGksK3IsZSxuKSxhPVtzXSk6YS5wdXNoKHMpfWJMdChhLGksK3IsZSxuKX0pKX0pKSxpfWZ1bmN0aW9uIGJMdCh0LGUsbixpLHIpe2lmKHQubGVuZ3RoPjEpe2xldCBvPUxBdCh0WzBdLnByZWZpeCx0WzBdLnN1ZmZpeCx0WzBdLnBhcmVudCx0WzBdLmNsdXN0ZXJJZCx0W3QubGVuZ3RoLTFdLmNsdXN0ZXJJZCksYT1rQXQodFswXS5wcmVmaXgsdFswXS5zdWZmaXgsdFswXS5wYXJlbnQsbixvLHIpO3dlLmVhY2godCwoZnVuY3Rpb24odCl7YS5pZHMucHVzaCh0LmNsdXN0ZXJJZCksYS5tZXRhZ3JhcGguc2V0Tm9kZSh0Lm5hbWUsaS5ub2RlKHQubmFtZSkpfSkpLGVbb109YX19bGV0IHhMdD1jbGFzcyBleHRlbmRzKHRyKG5sKHllKSkpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9leHBhbmRlZD0hMCx0aGlzLl9vcENvbXBhdENvbG9yPVZBdCx0aGlzLl9vcEluY29tcGF0Q29sb3I9VUF0LHRoaXMuX3RlbXBsYXRlSW5kZXg9bnVsbH1fZ2V0Tm9kZSh0LGUpe3JldHVybiBlLm5vZGUodCl9X2dldFJlbmRlckluZm8odCxlKXtyZXR1cm4gdGhpcy5yZW5kZXJIaWVyYXJjaHkuZ2V0T3JDcmVhdGVSZW5kZXJOb2RlQnlOYW1lKHQpfV90b2dnbGVFeHBhbmRlZCgpe3RoaXMuX2V4cGFuZGVkPSF0aGlzLl9leHBhbmRlZH1fZ2V0VG9nZ2xlSWNvbih0KXtyZXR1cm4gdD8iZXhwYW5kLWxlc3MiOiJleHBhbmQtbW9yZSJ9X3Jlc2l6ZUxpc3QodCl7dmFyIGU9ZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0KTtlJiZlLmZpcmUoImlyb24tcmVzaXplIil9Z2V0IF9pbmNvbXBhdGlibGVPcE5vZGVzKCl7Y29uc3QgdD10aGlzLmdyYXBoSGllcmFyY2h5O3JldHVybiB0JiZ0LnJvb3Q/KHRoaXMuYXN5bmModGhpcy5fcmVzaXplTGlzdC5iaW5kKHRoaXMsIiNpbmNvbXBhdGlibGVPcHNMaXN0IikpLChmdW5jdGlvbiBlKHQpe2NvbnN0IGU9W10sbj17fTtyZXR1cm4gd2UuZWFjaCh0LnJvb3QubGVhdmVzKCksKGk9PntsZXQgcj10Lm5vZGUoaSk7aWYoci50eXBlPT12QXQuT1Ape2xldCBpPXI7aWYoIWkuY29tcGF0aWJsZSlpZihpLm93bmluZ1Nlcmllcyl7aWYodC5nZXRTZXJpZXNHcm91cFR5cGUoaS5vd25pbmdTZXJpZXMpPT09eEF0LlVOR1JPVVApZS5wdXNoKGkpO2Vsc2UgaWYoIW5baS5vd25pbmdTZXJpZXNdKXtsZXQgcj10Lm5vZGUoaS5vd25pbmdTZXJpZXMpO3ImJihuW2kub3duaW5nU2VyaWVzXT1yLGUucHVzaChyKSl9fWVsc2UgZS5wdXNoKGkpO3dlLmVhY2goaS5pbkVtYmVkZGluZ3MsKHQ9Pnt0LmNvbXBhdGlibGV8fGUucHVzaCh0KX0pKSx3ZS5lYWNoKGkub3V0RW1iZWRkaW5ncywodD0+e3QuY29tcGF0aWJsZXx8ZS5wdXNoKHQpfSkpfX0pKSxlfSkodCkpOltdfWdldCBfb3BDb21wYXRTY29yZSgpe3ZhciB0PXRoaXMuZ3JhcGhIaWVyYXJjaHk7aWYodCYmdC5yb290KXt2YXIgZT10LnJvb3Qsbj1lLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZSxpPWUuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGU7cmV0dXJuIDA9PW4mJjA9PWk/MDpNYXRoLmZsb29yKDEwMCpuLyhuK2kpKS8xMDB9cmV0dXJuIDB9Z2V0IF9vcENvbXBhdFNjb3JlTGFiZWwoKXt2YXIgdD10aGlzLl9vcENvbXBhdFNjb3JlO3JldHVybiBmeSgiLjAlIikodCl9Z2V0IF90b3RhbEluY29tcGF0T3BzKCl7dmFyIHQ9dGhpcy5ncmFwaEhpZXJhcmNoeTtyZXR1cm4gdCYmdC5yb290P3Qucm9vdC5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZTowfV9ncmFwaEhpZXJhcmNoeUNoYW5nZWQoKXt0aGlzLl90ZW1wbGF0ZUluZGV4PXRoaXMuZ3JhcGhIaWVyYXJjaHkuZ2V0VGVtcGxhdGVJbmRleCgpLHRoaXMuZ3JhcGhIaWVyYXJjaHkuYWRkTGlzdGVuZXIoZEx0LlRFTVBMQVRFU19VUERBVEVELCgoKT0+e3RoaXMuX3RlbXBsYXRlSW5kZXg9dGhpcy5ncmFwaEhpZXJhcmNoeS5nZXRUZW1wbGF0ZUluZGV4KCl9KSl9fTt4THQudGVtcGxhdGU9X2VgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBtYXgtaGVpZ2h0OiA1MDBweDsKICAgICAgfQoKICAgICAgLmluY29tcGF0aWJsZS1vcHMtbGlzdCB7CiAgICAgICAgaGVpZ2h0OiAzNTBweDsKICAgICAgICBtYXgtaGVpZ2h0OiA0MDBweDsKICAgICAgICBvdmVyZmxvdy15OiBzY3JvbGw7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICB9CgogICAgICBpcm9uLWxpc3QgewogICAgICAgIGZsZXg6IDEgMSBhdXRvOwogICAgICB9CgogICAgICBwYXBlci1pdGVtIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXNlY29uZGFyeS1iYWNrZ3JvdW5kLWNvbG9yKTsKICAgICAgfQoKICAgICAgcGFwZXItaXRlbS1ib2R5W3R3by1saW5lXSB7CiAgICAgICAgbWluLWhlaWdodDogMDsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweCA0cHg7CiAgICAgIH0KCiAgICAgIC5leHBhbmRlZEluZm8gewogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgZm9udC1zaXplOiAxMnB0OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAubm9kZS1uYW1lIHsKICAgICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgICBmb250LXNpemU6IDE0cHQ7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgfQoKICAgICAgLnN1YnRpdGxlIHsKICAgICAgICBjb2xvcjogdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpOwogICAgICAgIGZvbnQtc2l6ZTogMTJwdDsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1idXR0b24gewogICAgICAgIGZsb2F0OiByaWdodDsKICAgICAgICBtYXgtaGVpZ2h0OiAyMHB4OwogICAgICAgIG1heC13aWR0aDogMjBweDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CgogICAgICAubm9uLWNvbnRyb2wtbGlzdC1pdGVtIHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDEwcHg7CiAgICAgIH0KCiAgICAgIGRpdi5vcC1jb21wYXQtZGlzcGxheSB7CiAgICAgICAgbWFyZ2luLXRvcDogMTBweDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBTYWRseSwgYmVjYXVzZSB0aGUgd2hvbGUgYm9keSBpcyBpbnZlcnRlZCBpbiBjb2xvciwgbGVnZW5kcyBhbHNvIG5lZWQKICAgICAgICogdG8gYmUgaW52ZXJ0ZWQuCiAgICAgICAqKi8KICAgICAgOmhvc3QoLmRhcmstbW9kZSkgZGl2Lm9wLWNvbXBhdC1kaXNwbGF5IHsKICAgICAgICBmaWx0ZXI6IGludmVydCgxKTsKICAgICAgfQoKICAgICAgc3ZnLm9wLWNvbXBhdCB7CiAgICAgICAgd2lkdGg6IDI1MHB4OwogICAgICAgIGhlaWdodDogMjVweDsKICAgICAgICBmbG9hdDogbGVmdDsKICAgICAgfQoKICAgICAgZGl2Lm9wLWNvbXBhdC12YWx1ZSB7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY29sb3I6IGJsYWNrOwogICAgICAgIG1hcmdpbi1sZWZ0OiAxMHB4OwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxwYXBlci1pdGVtPgogICAgICA8cGFwZXItaXRlbS1ib2R5IHR3by1saW5lPgogICAgICAgIDxkaXY+CiAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICAgICAgaWNvbj0ie3tfZ2V0VG9nZ2xlSWNvbihfZXhwYW5kZWQpfX0iCiAgICAgICAgICAgIG9uLWNsaWNrPSJfdG9nZ2xlRXhwYW5kZWQiCiAgICAgICAgICAgIGNsYXNzPSJ0b2dnbGUtYnV0dG9uIgogICAgICAgICAgPgogICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vZGUtbmFtZSIgaWQ9Im5vZGV0aXRsZSI+W1tub2RlVGl0bGVdXTwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgc2Vjb25kYXJ5PgogICAgICAgICAgPGRpdiBjbGFzcz0ic3VidGl0bGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJvcC1jb21wYXQtZGlzcGxheSI+CiAgICAgICAgICAgICAgPHN2ZwogICAgICAgICAgICAgICAgY2xhc3M9Im9wLWNvbXBhdCIKICAgICAgICAgICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWlkIG1lZXQiCiAgICAgICAgICAgICAgICB2aWV3Qm94PSIwIDAgMjUwIDI1IgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxkZWZzPgogICAgICAgICAgICAgICAgICA8bGluZWFyR3JhZGllbnQgaWQ9Im9wLWNvbXBhdC1maWxsIj4KICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3IkPSJbW19vcENvbXBhdENvbG9yXV0iPjwvc3RvcD4KICAgICAgICAgICAgICAgICAgICA8c3RvcAogICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0JD0iW1tfb3BDb21wYXRTY29yZV1dIgogICAgICAgICAgICAgICAgICAgICAgc3RvcC1jb2xvciQ9IltbX29wQ29tcGF0Q29sb3JdXSIKICAgICAgICAgICAgICAgICAgICA+PC9zdG9wPgogICAgICAgICAgICAgICAgICAgIDxzdG9wCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQkPSJbW19vcENvbXBhdFNjb3JlXV0iCiAgICAgICAgICAgICAgICAgICAgICBzdG9wLWNvbG9yJD0iW1tfb3BJbmNvbXBhdENvbG9yXV0iCiAgICAgICAgICAgICAgICAgICAgPjwvc3RvcD4KICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3IkPSJbW19vcEluY29tcGF0Q29sb3IgXV0iPjwvc3RvcD4KICAgICAgICAgICAgICAgICAgPC9saW5lYXJHcmFkaWVudD4KICAgICAgICAgICAgICAgIDwvZGVmcz4KICAgICAgICAgICAgICAgIDxyZWN0CiAgICAgICAgICAgICAgICAgIGhlaWdodD0iMjUiCiAgICAgICAgICAgICAgICAgIHdpZHRoPSIyNTAiCiAgICAgICAgICAgICAgICAgIHJ4PSI1IgogICAgICAgICAgICAgICAgICByeT0iNSIKICAgICAgICAgICAgICAgICAgc3R5bGU9ImZpbGw6IHVybCgnI29wLWNvbXBhdC1maWxsJyk7IgogICAgICAgICAgICAgICAgPjwvcmVjdD4KICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJvcC1jb21wYXQtdmFsdWUiPltbX29wQ29tcGF0U2NvcmVMYWJlbF1dPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvcGFwZXItaXRlbS1ib2R5PgogICAgPC9wYXBlci1pdGVtPgoKICAgIDxpcm9uLWNvbGxhcHNlIG9wZW5lZD0ie3tfZXhwYW5kZWR9fSI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfZXhwYW5kZWR9fSIgcmVzdGFtcD0idHJ1ZSI+CiAgICAgICAgPGRpdiBjbGFzcz0iZXhwYW5kZWRJbmZvIj4KICAgICAgICAgIEluY29tcGF0aWJsZSBPcGVyYXRpb25zOiAoPHNwYW4+W1tfdG90YWxJbmNvbXBhdE9wc11dPC9zcGFuPikKICAgICAgICAgIDxpcm9uLWxpc3QKICAgICAgICAgICAgY2xhc3M9ImluY29tcGF0aWJsZS1vcHMtbGlzdCIKICAgICAgICAgICAgaWQ9ImluY29tcGF0aWJsZU9wc0xpc3QiCiAgICAgICAgICAgIGl0ZW1zPSJbW19pbmNvbXBhdGlibGVPcE5vZGVzXV0iCiAgICAgICAgICA+CiAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICA8dGYtZ3JhcGgtb3AtY29tcGF0LWxpc3QtaXRlbQogICAgICAgICAgICAgICAgY2xhc3M9Im5vbi1jb250cm9sLWxpc3QtaXRlbSIKICAgICAgICAgICAgICAgIGl0ZW0tbm9kZT0iW1tpdGVtXV0iCiAgICAgICAgICAgICAgICBpdGVtLXJlbmRlci1pbmZvPSJbW19nZXRSZW5kZXJJbmZvKGl0ZW0ubmFtZSwgcmVuZGVySGllcmFyY2h5KV1dIgogICAgICAgICAgICAgICAgbmFtZT0iW1tpdGVtLm5hbWVdXSIKICAgICAgICAgICAgICAgIHRlbXBsYXRlLWluZGV4PSJbW190ZW1wbGF0ZUluZGV4XV0iCiAgICAgICAgICAgICAgICBjb2xvci1ieT0iW1tjb2xvckJ5XV0iCiAgICAgICAgICAgICAgICBpdGVtLXR5cGU9ImluY29tcGF0aWJsZS1vcHMiCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIDwvdGYtZ3JhcGgtb3AtY29tcGF0LWxpc3QtaXRlbT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvaXJvbi1saXN0PgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9pcm9uLWNvbGxhcHNlPgogIGAsdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIscEx0KV0seEx0LnByb3RvdHlwZSwiZ3JhcGhIaWVyYXJjaHkiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsWEF0KV0seEx0LnByb3RvdHlwZSwicmVuZGVySGllcmFyY2h5Iix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLHhMdC5wcm90b3R5cGUsIm5vZGVUaXRsZSIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHhMdC5wcm90b3R5cGUsIl9leHBhbmRlZCIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx4THQucHJvdG90eXBlLCJfb3BDb21wYXRDb2xvciIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx4THQucHJvdG90eXBlLCJfb3BJbmNvbXBhdENvbG9yIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0seEx0LnByb3RvdHlwZSwiX3RlbXBsYXRlSW5kZXgiLHZvaWQgMCksdChbcygiZ3JhcGhIaWVyYXJjaHkiKSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLHhMdC5wcm90b3R5cGUsIl9pbmNvbXBhdGlibGVPcE5vZGVzIixudWxsKSx0KFtzKCJncmFwaEhpZXJhcmNoeSIpLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLHhMdC5wcm90b3R5cGUsIl9vcENvbXBhdFNjb3JlIixudWxsKSx0KFtzKCJfb3BDb21wYXRTY29yZSIpLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLHhMdC5wcm90b3R5cGUsIl9vcENvbXBhdFNjb3JlTGFiZWwiLG51bGwpLHQoW3MoImdyYXBoSGllcmFyY2h5IiksZSgiZGVzaWduOnR5cGUiLE51bWJlciksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0seEx0LnByb3RvdHlwZSwiX3RvdGFsSW5jb21wYXRPcHMiLG51bGwpLHQoW2EoImdyYXBoSGllcmFyY2h5IiksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pLGUoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSx4THQucHJvdG90eXBlLCJfZ3JhcGhIaWVyYXJjaHlDaGFuZ2VkIixudWxsKSx4THQ9dChbaSgidGYtZ3JhcGgtb3AtY29tcGF0LWNhcmQiKV0seEx0KTtsZXQgd0x0PWNsYXNzIGV4dGVuZHModHIobmwoeWUpKSl7X2l0ZW1UeXBlQ2hhbmdlZCgpeyJzdWJub2RlIiE9PXRoaXMuaXRlbVR5cGU/dGhpcy4kWyJsaXN0LWl0ZW0iXS5jbGFzc0xpc3QuYWRkKCJjbGlja2FibGUiKTp0aGlzLiRbImxpc3QtaXRlbSJdLmNsYXNzTGlzdC5yZW1vdmUoImNsaWNrYWJsZSIpfV9ub2RlTGlzdGVuZXIodCl7dGhpcy5maXJlKCJub2RlLWxpc3QtaXRlbS0iK3QudHlwZSx7Y2FyZE5vZGU6dGhpcy5jYXJkTm9kZS5uYW1lLG5vZGVOYW1lOnRoaXMubmFtZSx0eXBlOnRoaXMuaXRlbVR5cGV9KX1fZmFkZWRDbGFzcyh0KXtyZXR1cm4gdCYmdC5pc0ZhZGVkT3V0PyJmYWRlZCI6IiJ9fTt3THQudGVtcGxhdGU9X2VgCiAgICA8c3R5bGU+CiAgICAgICNsaXN0LWl0ZW0gewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGNvbG9yOiB2YXIoLS1zZWNvbmRhcnktdGV4dC1jb2xvcik7CiAgICAgICAgZm9udC1zaXplOiAxMXB0OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgfQoKICAgICAgI2xpc3QtaXRlbTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZ29vZ2xlLXllbGxvdy0xMDApOwogICAgICB9CgogICAgICA6aG9zdCguZGFyay1tb2RlKSAjbGlzdC1pdGVtOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci15ZWxsb3ctOTAwKTsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgfQoKICAgICAgLmNsaWNrYWJsZSB7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICB9CgogICAgICAjbGlzdC1pdGVtIHNwYW4gewogICAgICAgIG1hcmdpbi1sZWZ0OiA0MHB4OwogICAgICB9CgogICAgICAjbGlzdC1pdGVtLmV4Y2x1ZGVkIHNwYW4gewogICAgICAgIGNvbG9yOiAjOTk5OwogICAgICB9CgogICAgICAjbGlzdC1pdGVtIHNwYW4uZWRnZS1sYWJlbCB7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICBtYXJnaW4tbGVmdDogM3B4OwogICAgICAgIG1hcmdpbi1yaWdodDogNXB4OwogICAgICB9CgogICAgICAubm9kZS1pY29uIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAxcHg7CiAgICAgICAgbGVmdDogMnB4OwogICAgICB9CgogICAgICAuZmFkZWQgc3BhbiB7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLWdyYXBoLWZhZGVkKTsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxkaXYKICAgICAgaWQ9Imxpc3QtaXRlbSIKICAgICAgb24tbW91c2VvdmVyPSJfbm9kZUxpc3RlbmVyIgogICAgICBvbi1tb3VzZW91dD0iX25vZGVMaXN0ZW5lciIKICAgICAgb24tY2xpY2s9Il9ub2RlTGlzdGVuZXIiCiAgICA+CiAgICAgIDxkaXYgY2xhc3MkPSJ7e19mYWRlZENsYXNzKGl0ZW1SZW5kZXJJbmZvKX19Ij4KICAgICAgICA8dGYtbm9kZS1pY29uCiAgICAgICAgICBjbGFzcz0ibm9kZS1pY29uIgogICAgICAgICAgaGVpZ2h0PSIxMiIKICAgICAgICAgIGNvbG9yLWJ5PSJbW2NvbG9yQnldXSIKICAgICAgICAgIGNvbG9yLWJ5LXBhcmFtcz0iW1tjb2xvckJ5UGFyYW1zXV0iCiAgICAgICAgICBub2RlPSJbW2l0ZW1Ob2RlXV0iCiAgICAgICAgICByZW5kZXItaW5mbz0iW1tpdGVtUmVuZGVySW5mb11dIgogICAgICAgICAgdGVtcGxhdGUtaW5kZXg9IltbdGVtcGxhdGVJbmRleF1dIgogICAgICAgID48L3RmLW5vZGUtaWNvbj4KICAgICAgICA8c3BhbiB0aXRsZSQ9IltbbmFtZV1dIj5bW25hbWVdXTwvc3Bhbj4KICAgICAgICA8c3BhbiBjbGFzcz0iZWRnZS1sYWJlbCI+W1tlZGdlTGFiZWxdXTwvc3Bhbj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICBgLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLHdMdC5wcm90b3R5cGUsImNhcmROb2RlIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLHdMdC5wcm90b3R5cGUsIml0ZW1Ob2RlIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLHdMdC5wcm90b3R5cGUsImVkZ2VMYWJlbCIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSx3THQucHJvdG90eXBlLCJpdGVtUmVuZGVySW5mbyIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx3THQucHJvdG90eXBlLCJuYW1lIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfaXRlbVR5cGVDaGFuZ2VkIn0pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx3THQucHJvdG90eXBlLCJpdGVtVHlwZSIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx3THQucHJvdG90eXBlLCJjb2xvckJ5Iix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLHdMdC5wcm90b3R5cGUsImNvbG9yQnlQYXJhbXMiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sd0x0LnByb3RvdHlwZSwidGVtcGxhdGVJbmRleCIsdm9pZCAwKSx3THQ9dChbaSgidGYtbm9kZS1saXN0LWl0ZW0iKV0sd0x0KTtsZXQgU0x0PWNsYXNzIGV4dGVuZHModHIoeWUpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fZXhwYW5kZWQ9ITAsdGhpcy5fb3BlbmVkQ29udHJvbFByZWQ9ITEsdGhpcy5fb3BlbmVkQ29udHJvbFN1Y2M9ITEsdGhpcy5fdGVtcGxhdGVJbmRleD1udWxsfWV4cGFuZE5vZGUoKXt0aGlzLmZpcmUoIl9ub2RlLmV4cGFuZCIsdGhpcy5ub2RlKX1fZ2V0Tm9kZSh0LGUpe3JldHVybiBlLm5vZGUodCl9X2dldE5vZGVTdGF0cyh0LGUpe3ZhciBuPXRoaXMuX2dldE5vZGUodCxlKTtyZXR1cm4gbj9uLnN0YXRzOm51bGx9X2dldFRvdGFsTWljcm9zKHQpe3JldHVybiB0P3QuZ2V0VG90YWxNaWNyb3MoKTowfWdldCBfaGFzRGlzcGxheWFibGVOb2RlU3RhdHMoKXtyZXR1cm4gaEF0KHRoaXMuX25vZGVTdGF0cyl9Z2V0IF9ub2RlU3RhdHNGb3JtYXR0ZWRCeXRlcygpe3ZhciB0PXRoaXMuX25vZGVTdGF0cztpZih0JiZ0LnRvdGFsQnl0ZXMpcmV0dXJuIHVBdCh0LnRvdGFsQnl0ZXMsbEF0KX1nZXQgX25vZGVTdGF0c0Zvcm1hdHRlZENvbXB1dGVUaW1lKCl7dmFyIHQ9dGhpcy5fbm9kZVN0YXRzO2lmKHQmJnQuZ2V0VG90YWxNaWNyb3MoKSlyZXR1cm4gdUF0KHQuZ2V0VG90YWxNaWNyb3MoKSxjQXQpfWdldCBfbm9kZVN0YXRzRm9ybWF0dGVkT3V0cHV0U2l6ZXMoKXt2YXIgdD10aGlzLl9ub2RlU3RhdHM7aWYodCYmdC5vdXRwdXRTaXplJiZ0Lm91dHB1dFNpemUubGVuZ3RoKXJldHVybiB3ZS5tYXAodC5vdXRwdXRTaXplLChmdW5jdGlvbih0KXtyZXR1cm4gMD09PXQubGVuZ3RoPyJzY2FsYXIiOiJbIit0LmpvaW4oIiwgIikrIl0ifSkpfV9nZXRSZW5kZXJJbmZvKHQsZSl7cmV0dXJuIHRoaXMucmVuZGVySGllcmFyY2h5LmdldE9yQ3JlYXRlUmVuZGVyTm9kZUJ5TmFtZSh0KX1nZXQgX2F0dHJpYnV0ZXMoKXt2YXIgdD10aGlzLl9ub2RlO2lmKHRoaXMuYXN5bmModGhpcy5fcmVzaXplTGlzdC5iaW5kKHRoaXMsIiNhdHRyaWJ1dGVzTGlzdCIpKSwhdHx8IXQuYXR0cilyZXR1cm5bXTt2YXIgZT1bXTtyZXR1cm4gd2UuZWFjaCh0LmF0dHIsKGZ1bmN0aW9uKHQpeyJfdG9vX2xhcmdlX2F0dHJzIj09PXQua2V5P2U9ZS5jb25jYXQodC52YWx1ZS5saXN0LnMubWFwKChmdW5jdGlvbih0KXtyZXR1cm57a2V5OnQsdmFsdWU6IlRvbyBsYXJnZSB0byBzaG93Li4uIn19KSkpOmUucHVzaCh7a2V5OnQua2V5LHZhbHVlOkpTT04uc3RyaW5naWZ5KHQudmFsdWUpfSl9KSksZX1nZXQgX2RldmljZSgpe3ZhciB0PXRoaXMuX25vZGU7cmV0dXJuIHQ/dC5kZXZpY2U6bnVsbH1nZXQgX3N1Y2Nlc3NvcnMoKXt2YXIgdD10aGlzLl9ub2RlLGU9dGhpcy5ncmFwaEhpZXJhcmNoeTtyZXR1cm4gdGhpcy5fcmVmcmVzaE5vZGVJdGVtTGlzdCgiaW5wdXRzTGlzdCIpLHQ/dGhpcy5fY29udmVydEVkZ2VMaXN0VG9FZGdlSW5mb0xpc3QoZS5nZXRTdWNjZXNzb3JzKHQubmFtZSksITEsdC5pc0dyb3VwTm9kZSk6e3JlZ3VsYXI6W10sY29udHJvbDpbXX19Z2V0IF9wcmVkZWNlc3NvcnMoKXt2YXIgdD10aGlzLl9ub2RlLGU9dGhpcy5ncmFwaEhpZXJhcmNoeTtyZXR1cm4gdGhpcy5fcmVmcmVzaE5vZGVJdGVtTGlzdCgib3V0cHV0c0xpc3QiKSx0P3RoaXMuX2NvbnZlcnRFZGdlTGlzdFRvRWRnZUluZm9MaXN0KGUuZ2V0UHJlZGVjZXNzb3JzKHQubmFtZSksITAsdC5pc0dyb3VwTm9kZSk6e3JlZ3VsYXI6W10sY29udHJvbDpbXX19Z2V0IF9mdW5jdGlvblVzYWdlcygpe3ZhciB0PXRoaXMuX25vZGUsZT10aGlzLmdyYXBoSGllcmFyY2h5O2lmKHRoaXMuX3JlZnJlc2hOb2RlSXRlbUxpc3QoImZ1bmN0aW9uVXNhZ2VzTGlzdCIpLCF0fHx0LnR5cGUhPT12QXQuTUVUQSlyZXR1cm5bXTtjb25zdCBuPWUubGlicmFyeUZ1bmN0aW9uc1t0LmFzc29jaWF0ZWRGdW5jdGlvbl07cmV0dXJuIG4/bi51c2FnZXM6W119X3JlZnJlc2hOb2RlSXRlbUxpc3QodCl7dGhpcy5hc3luYyh0aGlzLl9yZXNpemVMaXN0LmJpbmQodGhpcyxgIyR7dH1gKSl9X2NvbnZlcnRFZGdlTGlzdFRvRWRnZUluZm9MaXN0KHQsZSxuKXt2YXIgaT10PT53ZS5tYXAodC5iYXNlRWRnZUxpc3QsKHQ9Pnt2YXIgbj1lP3Qudjp0Lnc7cmV0dXJue25hbWU6bixub2RlOnRoaXMuX2dldE5vZGUobix0aGlzLmdyYXBoSGllcmFyY2h5KSxlZGdlTGFiZWw6TGt0KHQsdGhpcy5yZW5kZXJIaWVyYXJjaHkpLHJlbmRlckluZm86dGhpcy5fZ2V0UmVuZGVySW5mbyhuLHRoaXMucmVuZGVySGllcmFyY2h5KX19KSkscj1mdW5jdGlvbih0KXt2YXIgcj1bXTtyZXR1cm4gd2UuZWFjaCh0LCh0PT57dmFyIG89ZT90LnY6dC53O24mJjEhPXQuYmFzZUVkZ2VMaXN0Lmxlbmd0aD9yLnB1c2goe25hbWU6byxub2RlOnRoaXMuX2dldE5vZGUobyx0aGlzLmdyYXBoSGllcmFyY2h5KSxlZGdlTGFiZWw6UGt0KHQsdGhpcy5yZW5kZXJIaWVyYXJjaHkpLHJlbmRlckluZm86dGhpcy5fZ2V0UmVuZGVySW5mbyhvLHRoaXMucmVuZGVySGllcmFyY2h5KX0pOnI9ci5jb25jYXQoaSh0KSl9KSkscn0uYmluZCh0aGlzKTtyZXR1cm57cmVndWxhcjpyKHQucmVndWxhciksY29udHJvbDpyKHQuY29udHJvbCl9fWdldCBfc3Vibm9kZXMoKXt2YXIgdD10aGlzLl9ub2RlO3JldHVybiB0JiZ0Lm1ldGFncmFwaD90Lm1ldGFncmFwaC5ub2RlcygpOm51bGx9Z2V0IF90b3RhbFByZWRlY2Vzc29ycygpe3ZhciB0PXRoaXMuX3ByZWRlY2Vzc29ycztyZXR1cm4gdC5yZWd1bGFyLmxlbmd0aCt0LmNvbnRyb2wubGVuZ3RofWdldCBfdG90YWxTdWNjZXNzb3JzKCl7dmFyIHQ9dGhpcy5fc3VjY2Vzc29ycztyZXR1cm4gdC5yZWd1bGFyLmxlbmd0aCt0LmNvbnRyb2wubGVuZ3RofV90b2dnbGVDb250cm9sUHJlZCgpe3RoaXMuX29wZW5lZENvbnRyb2xQcmVkPSF0aGlzLl9vcGVuZWRDb250cm9sUHJlZH1fdG9nZ2xlQ29udHJvbFN1Y2MoKXt0aGlzLl9vcGVuZWRDb250cm9sU3VjYz0hdGhpcy5fb3BlbmVkQ29udHJvbFN1Y2N9X3RvZ2dsZUV4cGFuZGVkKCl7dGhpcy5fZXhwYW5kZWQ9IXRoaXMuX2V4cGFuZGVkfV9nZXRUb2dnbGVJY29uKHQpe3JldHVybiB0PyJleHBhbmQtbGVzcyI6ImV4cGFuZC1tb3JlIn1fcmVzZXRTdGF0ZSgpe3RoaXMuX29wZW5lZENvbnRyb2xQcmVkPSExLHRoaXMuX29wZW5lZENvbnRyb2xTdWNjPSExLHRoaXMuc2V0KCJfZ3JvdXBCdXR0b25UZXh0Iixqa3QodGhpcy5fbm9kZSkpfV9yZXNpemVMaXN0KHQpe3ZhciBlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodCk7ZSYmZS5maXJlKCJpcm9uLXJlc2l6ZSIpfV90b2dnbGVJbmNsdWRlKCl7dGhpcy5maXJlKCJub2RlLXRvZ2dsZS1pbmNsdXNpb24iLHtuYW1lOnRoaXMuZ3JhcGhOb2RlTmFtZX0pfV9ub2RlSW5jbHVkZVN0YXRlQ2hhbmdlZCh0LGUpe3RoaXMuc2V0KCJfYXV4QnV0dG9uVGV4dCIsRkF0KHQpKX1fdG9nZ2xlR3JvdXAoKXt2YXIgdD1Va3QodGhpcy5fbm9kZSk7dGhpcy5maXJlKCJub2RlLXRvZ2dsZS1zZXJpZXNncm91cCIse25hbWU6dH0pfV9pc0xpYnJhcnlGdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5uYW1lLnN0YXJ0c1dpdGgoX0F0KX1faXNJblNlcmllcyh0KXtyZXR1cm4gVmt0KHQpfV9ncmFwaEhpZXJhcmNoeUNoYW5nZWQoKXt0aGlzLl90ZW1wbGF0ZUluZGV4PXRoaXMuZ3JhcGhIaWVyYXJjaHkuZ2V0VGVtcGxhdGVJbmRleCgpLHRoaXMuZ3JhcGhIaWVyYXJjaHkuYWRkTGlzdGVuZXIoZEx0LlRFTVBMQVRFU19VUERBVEVELCgoKT0+e3RoaXMuX3RlbXBsYXRlSW5kZXg9dGhpcy5ncmFwaEhpZXJhcmNoeS5nZXRUZW1wbGF0ZUluZGV4KCl9KSl9fTtTTHQudGVtcGxhdGU9X2VgCiAgICA8c3R5bGU+CiAgICAgIC5zdWItbGlzdC1ncm91cCB7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBmb250LXNpemU6IDEycHQ7CiAgICAgICAgcGFkZGluZy1ib3R0b206IDhweDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgLnN1Yi1saXN0IHsKICAgICAgICBtYXgtaGVpZ2h0OiAzMDBweDsKICAgICAgICBvdmVyZmxvdy15OiBzY3JvbGw7CiAgICAgIH0KCiAgICAgIC5hdHRyLWxlZnQgewogICAgICAgIGZsb2F0OiBsZWZ0OwogICAgICAgIHdpZHRoOiAzMCU7CiAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkOwogICAgICAgIGNvbG9yOiB2YXIoLS1zZWNvbmRhcnktdGV4dC1jb2xvcik7CiAgICAgICAgZm9udC1zaXplOiAxMXB0OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgIH0KCiAgICAgIC5hdHRyLXJpZ2h0IHsKICAgICAgICBtYXJnaW4tbGVmdDogMzAlOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgICBjb2xvcjogdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpOwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgIH0KCiAgICAgIC5zdWItbGlzdC10YWJsZSB7CiAgICAgICAgZGlzcGxheTogdGFibGU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5zdWItbGlzdC10YWJsZS1yb3cgewogICAgICAgIGRpc3BsYXk6IHRhYmxlLXJvdzsKICAgICAgfQoKICAgICAgLnN1Yi1saXN0LXRhYmxlLXJvdyAuc3ViLWxpc3QtdGFibGUtY2VsbDpsYXN0LWNoaWxkIHsKICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgICAgfQoKICAgICAgLnN1Yi1saXN0LXRhYmxlLWNlbGwgewogICAgICAgIGNvbG9yOiB2YXIoLS1zZWNvbmRhcnktdGV4dC1jb2xvcik7CiAgICAgICAgZGlzcGxheTogdGFibGUtY2VsbDsKICAgICAgICBmb250LXNpemU6IDExcHQ7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBtYXgtd2lkdGg6IDIwMHB4OwogICAgICAgIHBhZGRpbmc6IDAgNHB4OwogICAgICB9CgogICAgICBwYXBlci1pdGVtIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXByaW1hcnktYmFja2dyb3VuZC1jb2xvcik7CiAgICAgIH0KCiAgICAgIHBhcGVyLWl0ZW0tYm9keVt0d28tbGluZV0gewogICAgICAgIG1pbi1oZWlnaHQ6IDA7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHggNHB4OwogICAgICB9CgogICAgICAuZXhwYW5kZWRJbmZvIHsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgfQoKICAgICAgLmNvbnRyb2xEZXBzIHsKICAgICAgICBwYWRkaW5nOiAwIDAgMCA4cHg7CiAgICAgIH0KCiAgICAgIC5ub2RlLW5hbWUgewogICAgICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7CiAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkOwogICAgICAgIGZvbnQtc2l6ZTogMTRwdDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICB9CgogICAgICAubm9kZS1pY29uIHsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICAgIH0KCiAgICAgIC5zdWJ0aXRsZSB7CiAgICAgICAgY29sb3I6IHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKTsKICAgICAgICBmb250LXNpemU6IDEycHQ7CiAgICAgIH0KCiAgICAgIC5jb250cm9sTGluZSB7CiAgICAgICAgZm9udC1zaXplOiAxMXB0OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtYnV0dG9uIHsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICAgICAgbWF4LWhlaWdodDogMjBweDsKICAgICAgICBtYXgtd2lkdGg6IDIwcHg7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQoKICAgICAgLmNvbnRyb2wtdG9nZ2xlLWJ1dHRvbiB7CiAgICAgICAgZmxvYXQ6IGxlZnQ7CiAgICAgICAgbWF4LWhlaWdodDogMjBweDsKICAgICAgICBtYXgtd2lkdGg6IDIwcHg7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1pbmNsdWRlLWdyb3VwIHsKICAgICAgICBwYWRkaW5nLXRvcDogNHB4OwogICAgICB9CgogICAgICAudG9nZ2xlLWluY2x1ZGUgewogICAgICAgIG1hcmdpbjogNXB4IDZweDsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTsKICAgICAgICBwYWRkaW5nOiA0cHggNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTBwdDsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmFmYWZhOwogICAgICAgIGNvbG9yOiAjNjY2OwogICAgICB9CgogICAgICAudG9nZ2xlLWluY2x1ZGU6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWdvb2dsZS15ZWxsb3ctMTAwKTsKICAgICAgfQoKICAgICAgLm5vbi1jb250cm9sLWxpc3QtaXRlbSB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAxMHB4OwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPHBhcGVyLWl0ZW0+CiAgICAgIDxwYXBlci1pdGVtLWJvZHkgdHdvLWxpbmU+CiAgICAgICAgPGRpdj4KICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgICAgICBpY29uPSJ7e19nZXRUb2dnbGVJY29uKF9leHBhbmRlZCl9fSIKICAgICAgICAgICAgb24tY2xpY2s9Il90b2dnbGVFeHBhbmRlZCIKICAgICAgICAgICAgY2xhc3M9InRvZ2dsZS1idXR0b24iCiAgICAgICAgICA+CiAgICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgPGRpdiBjbGFzcz0ibm9kZS1uYW1lIj4KICAgICAgICAgICAgPHRmLXdici1zdHJpbmcgdmFsdWU9IltbX25vZGUubmFtZV1dIiBkZWxpbWl0ZXItcGF0dGVybj0iLyI+CiAgICAgICAgICAgIDwvdGYtd2JyLXN0cmluZz4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgc2Vjb25kYXJ5PgogICAgICAgICAgPHRmLW5vZGUtaWNvbgogICAgICAgICAgICBjbGFzcz0ibm9kZS1pY29uIgogICAgICAgICAgICBub2RlPSJbW19ub2RlXV0iCiAgICAgICAgICAgIHJlbmRlci1pbmZvPSJbW19nZXRSZW5kZXJJbmZvKGdyYXBoTm9kZU5hbWUsIHJlbmRlckhpZXJhcmNoeSldXSIKICAgICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgICB0ZW1wbGF0ZS1pbmRleD0iW1tfdGVtcGxhdGVJbmRleF1dIgogICAgICAgICAgPjwvdGYtbm9kZS1pY29uPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJ7e19ub2RlLm9wfX0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWJ0aXRsZSI+CiAgICAgICAgICAgICAgT3BlcmF0aW9uOgogICAgICAgICAgICAgIDxzcGFuPltbX25vZGUub3BdXTwvc3Bhbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJ7e19ub2RlLm1ldGFncmFwaH19Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3VidGl0bGUiPgogICAgICAgICAgICAgIFN1YmdyYXBoOgogICAgICAgICAgICAgIDxzcGFuPltbX25vZGUuY2FyZGluYWxpdHldXTwvc3Bhbj4gbm9kZXMKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvZGl2PgogICAgICA8L3BhcGVyLWl0ZW0tYm9keT4KICAgIDwvcGFwZXItaXRlbT4KICAgIDxpcm9uLWNvbGxhcHNlIG9wZW5lZD0ie3tfZXhwYW5kZWR9fSI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfZXhwYW5kZWR9fSIgcmVzdGFtcD0idHJ1ZSI+CiAgICAgICAgPGRpdiBjbGFzcz0iZXhwYW5kZWRJbmZvIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LWdyb3VwIGF0dHJpYnV0ZXMiPgogICAgICAgICAgICBBdHRyaWJ1dGVzICg8c3Bhbj5bW19hdHRyaWJ1dGVzLmxlbmd0aF1dPC9zcGFuPikKICAgICAgICAgICAgPGlyb24tbGlzdAogICAgICAgICAgICAgIGNsYXNzPSJzdWItbGlzdCIKICAgICAgICAgICAgICBpZD0iYXR0cmlidXRlc0xpc3QiCiAgICAgICAgICAgICAgaXRlbXM9IltbX2F0dHJpYnV0ZXNdXSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImF0dHItbGVmdCI+W1tpdGVtLmtleV1dPC9kaXY+CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImF0dHItcmlnaHQiPltbaXRlbS52YWx1ZV1dPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L2lyb24tbGlzdD4KICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfZGV2aWNlfX0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC1ncm91cCBkZXZpY2UiPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImF0dHItbGVmdCI+RGV2aWNlPC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYXR0ci1yaWdodCI+W1tfZGV2aWNlXV08L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgoKICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LWdyb3VwIHByZWRlY2Vzc29ycyI+CiAgICAgICAgICAgIElucHV0cyAoPHNwYW4+W1tfdG90YWxQcmVkZWNlc3NvcnNdXTwvc3Bhbj4pCiAgICAgICAgICAgIDxpcm9uLWxpc3QKICAgICAgICAgICAgICBjbGFzcz0ic3ViLWxpc3QiCiAgICAgICAgICAgICAgaWQ9ImlucHV0c0xpc3QiCiAgICAgICAgICAgICAgaXRlbXM9IltbX3ByZWRlY2Vzc29ycy5yZWd1bGFyXV0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGYtbm9kZS1saXN0LWl0ZW0KICAgICAgICAgICAgICAgICAgY2xhc3M9Im5vbi1jb250cm9sLWxpc3QtaXRlbSIKICAgICAgICAgICAgICAgICAgY2FyZC1ub2RlPSJbW19ub2RlXV0iCiAgICAgICAgICAgICAgICAgIGl0ZW0tbm9kZT0iW1tpdGVtLm5vZGVdXSIKICAgICAgICAgICAgICAgICAgZWRnZS1sYWJlbD0iW1tpdGVtLmVkZ2VMYWJlbF1dIgogICAgICAgICAgICAgICAgICBpdGVtLXJlbmRlci1pbmZvPSJbW2l0ZW0ucmVuZGVySW5mb11dIgogICAgICAgICAgICAgICAgICBuYW1lPSJbW2l0ZW0ubmFtZV1dIgogICAgICAgICAgICAgICAgICBpdGVtLXR5cGU9InByZWRlY2Vzc29ycyIKICAgICAgICAgICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgICAgICAgICB0ZW1wbGF0ZS1pbmRleD0iW1tfdGVtcGxhdGVJbmRleF1dIgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPC90Zi1ub2RlLWxpc3QtaXRlbT4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L2lyb24tbGlzdD4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19wcmVkZWNlc3NvcnMuY29udHJvbC5sZW5ndGhdXSI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbERlcHMiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbExpbmUiPgogICAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICAgICAgICAgICAgICBpY29uPSJ7e19nZXRUb2dnbGVJY29uKF9vcGVuZWRDb250cm9sUHJlZCl9fSIKICAgICAgICAgICAgICAgICAgICBvbi1jbGljaz0iX3RvZ2dsZUNvbnRyb2xQcmVkIgogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJjb250cm9sLXRvZ2dsZS1idXR0b24iCiAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgQ29udHJvbCBkZXBlbmRlbmNpZXMKICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGlyb24tY29sbGFwc2Ugb3BlbmVkPSJ7e19vcGVuZWRDb250cm9sUHJlZH19IiBuby1hbmltYXRpb24+CiAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZQogICAgICAgICAgICAgICAgICAgIGlzPSJkb20taWYiCiAgICAgICAgICAgICAgICAgICAgaWY9Int7X29wZW5lZENvbnRyb2xQcmVkfX0iCiAgICAgICAgICAgICAgICAgICAgcmVzdGFtcD0idHJ1ZSIKICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgIDxpcm9uLWxpc3QKICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzdWItbGlzdCIKICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zPSJbW19wcmVkZWNlc3NvcnMuY29udHJvbF1dIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICAgICAgPHRmLW5vZGUtbGlzdC1pdGVtCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2FyZC1ub2RlPSJbW19ub2RlXV0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS1ub2RlPSJbW2l0ZW0ubm9kZV1dIgogICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tcmVuZGVyLWluZm89IltbaXRlbS5yZW5kZXJJbmZvXV0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT0iW1tpdGVtLm5hbWVdXSIKICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLXR5cGU9InByZWRlY2Vzc29ycyIKICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvci1ieT0iW1tjb2xvckJ5XV0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGUtaW5kZXg9IltbX3RlbXBsYXRlSW5kZXhdXSIKICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RmLW5vZGUtbGlzdC1pdGVtPgogICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICA8L2lyb24tbGlzdD4KICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDwvaXJvbi1jb2xsYXBzZT4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LWdyb3VwIHN1Y2Nlc3NvcnMiPgogICAgICAgICAgICBPdXRwdXRzICg8c3Bhbj5bW190b3RhbFN1Y2Nlc3NvcnNdXTwvc3Bhbj4pCiAgICAgICAgICAgIDxpcm9uLWxpc3QKICAgICAgICAgICAgICBjbGFzcz0ic3ViLWxpc3QiCiAgICAgICAgICAgICAgaWQ9Im91dHB1dHNMaXN0IgogICAgICAgICAgICAgIGl0ZW1zPSJbW19zdWNjZXNzb3JzLnJlZ3VsYXJdXSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0Zi1ub2RlLWxpc3QtaXRlbQogICAgICAgICAgICAgICAgICBjbGFzcz0ibm9uLWNvbnRyb2wtbGlzdC1pdGVtIgogICAgICAgICAgICAgICAgICBjYXJkLW5vZGU9IltbX25vZGVdXSIKICAgICAgICAgICAgICAgICAgaXRlbS1ub2RlPSJbW2l0ZW0ubm9kZV1dIgogICAgICAgICAgICAgICAgICBlZGdlLWxhYmVsPSJbW2l0ZW0uZWRnZUxhYmVsXV0iCiAgICAgICAgICAgICAgICAgIGl0ZW0tcmVuZGVyLWluZm89IltbaXRlbS5yZW5kZXJJbmZvXV0iCiAgICAgICAgICAgICAgICAgIG5hbWU9IltbaXRlbS5uYW1lXV0iCiAgICAgICAgICAgICAgICAgIGl0ZW0tdHlwZT0ic3VjY2Vzc29yIgogICAgICAgICAgICAgICAgICBjb2xvci1ieT0iW1tjb2xvckJ5XV0iCiAgICAgICAgICAgICAgICAgIHRlbXBsYXRlLWluZGV4PSJbW190ZW1wbGF0ZUluZGV4XV0iCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8L3RmLW5vZGUtbGlzdC1pdGVtPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvaXJvbi1saXN0PgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3N1Y2Nlc3NvcnMuY29udHJvbC5sZW5ndGhdXSI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbERlcHMiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbExpbmUiPgogICAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICAgICAgICAgICAgICBpY29uPSJ7e19nZXRUb2dnbGVJY29uKF9vcGVuZWRDb250cm9sU3VjYyl9fSIKICAgICAgICAgICAgICAgICAgICBvbi1jbGljaz0iX3RvZ2dsZUNvbnRyb2xTdWNjIgogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJjb250cm9sLXRvZ2dsZS1idXR0b24iCiAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgQ29udHJvbCBkZXBlbmRlbmNpZXMKICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGlyb24tY29sbGFwc2Ugb3BlbmVkPSJ7e19vcGVuZWRDb250cm9sU3VjY319IiBuby1hbmltYXRpb24+CiAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZQogICAgICAgICAgICAgICAgICAgIGlzPSJkb20taWYiCiAgICAgICAgICAgICAgICAgICAgaWY9Int7X29wZW5lZENvbnRyb2xTdWNjfX0iCiAgICAgICAgICAgICAgICAgICAgcmVzdGFtcD0idHJ1ZSIKICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgIDxpcm9uLWxpc3QgY2xhc3M9InN1Yi1saXN0IiBpdGVtcz0iW1tfc3VjY2Vzc29ycy5jb250cm9sXV0iPgogICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICAgICAgICAgICAgICA8dGYtbm9kZS1saXN0LWl0ZW0KICAgICAgICAgICAgICAgICAgICAgICAgICBjYXJkLW5vZGU9IltbX25vZGVdXSIKICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLW5vZGU9IltbaXRlbS5ub2RlXV0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS1yZW5kZXItaW5mbz0iW1tpdGVtLnJlbmRlckluZm9dXSIKICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPSJbW2l0ZW0ubmFtZV1dIgogICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tdHlwZT0ic3VjY2Vzc29ycyIKICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvci1ieT0iW1tjb2xvckJ5XV0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGUtaW5kZXg9IltbX3RlbXBsYXRlSW5kZXhdXSIKICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RmLW5vZGUtbGlzdC1pdGVtPgogICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICA8L2lyb24tbGlzdD4KICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDwvaXJvbi1jb2xsYXBzZT4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJ7e19oYXNEaXNwbGF5YWJsZU5vZGVTdGF0c319Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3ViLWxpc3QtZ3JvdXAgbm9kZS1zdGF0cyI+CiAgICAgICAgICAgICAgTm9kZSBTdGF0cwogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlIj4KICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfbm9kZVN0YXRzLnRvdGFsQnl0ZXN9fSI+CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLXJvdyI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3ViLWxpc3QtdGFibGUtY2VsbCI+TWVtb3J5PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3ViLWxpc3QtdGFibGUtY2VsbCI+CiAgICAgICAgICAgICAgICAgICAgICBbW19ub2RlU3RhdHNGb3JtYXR0ZWRCeXRlc11dCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfZ2V0VG90YWxNaWNyb3MoX25vZGVTdGF0cyl9fSI+CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLXJvdyI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3ViLWxpc3QtdGFibGUtY2VsbCI+Q29tcHV0ZSBUaW1lPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3ViLWxpc3QtdGFibGUtY2VsbCI+CiAgICAgICAgICAgICAgICAgICAgICBbW19ub2RlU3RhdHNGb3JtYXR0ZWRDb21wdXRlVGltZV1dCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfbm9kZVN0YXRzLm91dHB1dFNpemV9fSI+CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLXJvdyI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3ViLWxpc3QtdGFibGUtY2VsbCI+VGVuc29yIE91dHB1dCBTaXplczwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLWNlbGwiPgogICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlCiAgICAgICAgICAgICAgICAgICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgICAgICAgICAgICAgICAgICBpdGVtcz0ie3tfbm9kZVN0YXRzRm9ybWF0dGVkT3V0cHV0U2l6ZXN9fSIKICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgW1tpdGVtXV0gPGJyIC8+CiAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2Z1bmN0aW9uVXNhZ2VzLmxlbmd0aF1dIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3ViLWxpc3QtZ3JvdXAgcHJlZGVjZXNzb3JzIj4KICAgICAgICAgICAgICBVc2FnZXMgb2YgdGhlIEZ1bmN0aW9uICg8c3Bhbj5bW19mdW5jdGlvblVzYWdlcy5sZW5ndGhdXTwvc3Bhbj4pCiAgICAgICAgICAgICAgPGlyb24tbGlzdAogICAgICAgICAgICAgICAgY2xhc3M9InN1Yi1saXN0IgogICAgICAgICAgICAgICAgaWQ9ImZ1bmN0aW9uVXNhZ2VzTGlzdCIKICAgICAgICAgICAgICAgIGl0ZW1zPSJbW19mdW5jdGlvblVzYWdlc11dIgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgPHRmLW5vZGUtbGlzdC1pdGVtCiAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im5vbi1jb250cm9sLWxpc3QtaXRlbSIKICAgICAgICAgICAgICAgICAgICBjYXJkLW5vZGU9IltbX25vZGVdXSIKICAgICAgICAgICAgICAgICAgICBpdGVtLW5vZGU9IltbaXRlbV1dIgogICAgICAgICAgICAgICAgICAgIG5hbWU9IltbaXRlbS5uYW1lXV0iCiAgICAgICAgICAgICAgICAgICAgaXRlbS10eXBlPSJmdW5jdGlvblVzYWdlcyIKICAgICAgICAgICAgICAgICAgICBjb2xvci1ieT0iW1tjb2xvckJ5XV0iCiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGUtaW5kZXg9IltbX3RlbXBsYXRlSW5kZXhdXSIKICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICA8L3RmLW5vZGUtbGlzdC1pdGVtPgogICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICA8L2lyb24tbGlzdD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgoKICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2lzTGlicmFyeUZ1bmN0aW9uKF9ub2RlKV1dIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9nZ2xlLWluY2x1ZGUtZ3JvdXAiPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24KICAgICAgICAgICAgICAgIHJhaXNlZAogICAgICAgICAgICAgICAgY2xhc3M9InRvZ2dsZS1pbmNsdWRlIgogICAgICAgICAgICAgICAgb24tY2xpY2s9Il90b2dnbGVJbmNsdWRlIgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxzcGFuPltbX2F1eEJ1dHRvblRleHRdXTwvc3Bhbj4KICAgICAgICAgICAgICA8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgoKICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfaXNJblNlcmllcyhfbm9kZSl9fSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRvZ2dsZS1pbmNsdWRlLWdyb3VwIj4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgICByYWlzZWQKICAgICAgICAgICAgICAgIGNsYXNzPSJ0b2dnbGUtaW5jbHVkZSIKICAgICAgICAgICAgICAgIG9uLWNsaWNrPSJfdG9nZ2xlR3JvdXAiCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPHNwYW4+W1tfZ3JvdXBCdXR0b25UZXh0XV08L3NwYW4+CiAgICAgICAgICAgICAgPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvaXJvbi1jb2xsYXBzZT4KICBgLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLFNMdC5wcm90b3R5cGUsImdyYXBoTm9kZU5hbWUiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIscEx0KV0sU0x0LnByb3RvdHlwZSwiZ3JhcGhIaWVyYXJjaHkiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sU0x0LnByb3RvdHlwZSwicmVuZGVySGllcmFyY2h5Iix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLFNMdC5wcm90b3R5cGUsImNvbG9yQnkiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3QsY29tcHV0ZWQ6Il9nZXROb2RlKGdyYXBoTm9kZU5hbWUsIGdyYXBoSGllcmFyY2h5KSIsb2JzZXJ2ZXI6Il9yZXNldFN0YXRlIn0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxTTHQucHJvdG90eXBlLCJfbm9kZSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdCxjb21wdXRlZDoiX2dldE5vZGVTdGF0cyhncmFwaE5vZGVOYW1lLCBncmFwaEhpZXJhcmNoeSkiLG9ic2VydmVyOiJfcmVzZXRTdGF0ZSJ9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sU0x0LnByb3RvdHlwZSwiX25vZGVTdGF0cyIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcixvYnNlcnZlcjoiX25vZGVJbmNsdWRlU3RhdGVDaGFuZ2VkIn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxTTHQucHJvdG90eXBlLCJub2RlSW5jbHVkZSIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFNMdC5wcm90b3R5cGUsIl9leHBhbmRlZCIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFNMdC5wcm90b3R5cGUsIl9vcGVuZWRDb250cm9sUHJlZCIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFNMdC5wcm90b3R5cGUsIl9vcGVuZWRDb250cm9sU3VjYyIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxTTHQucHJvdG90eXBlLCJfYXV4QnV0dG9uVGV4dCIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxTTHQucHJvdG90eXBlLCJfZ3JvdXBCdXR0b25UZXh0Iix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sU0x0LnByb3RvdHlwZSwiX3RlbXBsYXRlSW5kZXgiLHZvaWQgMCksdChbcygiX25vZGVTdGF0cyIpLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxTTHQucHJvdG90eXBlLCJfaGFzRGlzcGxheWFibGVOb2RlU3RhdHMiLG51bGwpLHQoW3MoIl9ub2RlU3RhdHMiKSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxTTHQucHJvdG90eXBlLCJfbm9kZVN0YXRzRm9ybWF0dGVkQnl0ZXMiLG51bGwpLHQoW3MoIl9ub2RlU3RhdHMiKSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxTTHQucHJvdG90eXBlLCJfbm9kZVN0YXRzRm9ybWF0dGVkQ29tcHV0ZVRpbWUiLG51bGwpLHQoW3MoIl9ub2RlU3RhdHMiKSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFNMdC5wcm90b3R5cGUsIl9ub2RlU3RhdHNGb3JtYXR0ZWRPdXRwdXRTaXplcyIsbnVsbCksdChbcygiX25vZGUiKSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFNMdC5wcm90b3R5cGUsIl9hdHRyaWJ1dGVzIixudWxsKSx0KFtzKCJfbm9kZSIpLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFNMdC5wcm90b3R5cGUsIl9kZXZpY2UiLG51bGwpLHQoW3MoIl9ub2RlIiwiZ3JhcGhIaWVyYXJjaHkiKSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxTTHQucHJvdG90eXBlLCJfc3VjY2Vzc29ycyIsbnVsbCksdChbcygiX25vZGUiLCJncmFwaEhpZXJhcmNoeSIpLGUoImRlc2lnbjp0eXBlIixPYmplY3QpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFNMdC5wcm90b3R5cGUsIl9wcmVkZWNlc3NvcnMiLG51bGwpLHQoW3MoIl9ub2RlIiwiZ3JhcGhIaWVyYXJjaHkiKSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFNMdC5wcm90b3R5cGUsIl9mdW5jdGlvblVzYWdlcyIsbnVsbCksdChbcygiX25vZGUiKSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFNMdC5wcm90b3R5cGUsIl9zdWJub2RlcyIsbnVsbCksdChbcygiX3ByZWRlY2Vzc29ycyIpLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFNMdC5wcm90b3R5cGUsIl90b3RhbFByZWRlY2Vzc29ycyIsbnVsbCksdChbcygiX3N1Y2Nlc3NvcnMiKSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxTTHQucHJvdG90eXBlLCJfdG90YWxTdWNjZXNzb3JzIixudWxsKSx0KFthKCJncmFwaEhpZXJhcmNoeSIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sU0x0LnByb3RvdHlwZSwiX2dyYXBoSGllcmFyY2h5Q2hhbmdlZCIsbnVsbCksU0x0PXQoW2koInRmLW5vZGUtaW5mbyIpXSxTTHQpO2xldCBNTHQ9Y2xhc3MgZXh0ZW5kcyh0cih5ZSkpe3JlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoIm5vZGUtbGlzdC1pdGVtLWNsaWNrIix0aGlzLl9ub2RlTGlzdEl0ZW1DbGlja2VkLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigibm9kZS1saXN0LWl0ZW0tbW91c2VvdmVyIix0aGlzLl9ub2RlTGlzdEl0ZW1Nb3VzZW92ZXIuYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJub2RlLWxpc3QtaXRlbS1tb3VzZW91dCIsdGhpcy5fbm9kZUxpc3RJdGVtTW91c2VvdXQuYmluZCh0aGlzKSl9X25vZGVMaXN0SXRlbUNsaWNrZWQodCl7dGhpcy5zZWxlY3RlZE5vZGU9dC5kZXRhaWwubm9kZU5hbWV9X25vZGVMaXN0SXRlbU1vdXNlb3Zlcih0KXt0aGlzLmhpZ2hsaWdodGVkTm9kZT10LmRldGFpbC5ub2RlTmFtZX1fbm9kZUxpc3RJdGVtTW91c2VvdXQoKXt0aGlzLmhpZ2hsaWdodGVkTm9kZT1udWxsfV9oZWFsdGhQaWxsc0F2YWlsYWJsZSh0LGUpe3JldHVybiB0JiZlJiZPYmplY3Qua2V5cyhlKS5sZW5ndGg+MH1fZXF1YWxzKHQsZSl7cmV0dXJuIHQ9PT1lfX07TUx0LnRlbXBsYXRlPV9lYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tc2Vjb25kYXJ5LWJhY2tncm91bmQtY29sb3IpOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBtYXgtaGVpZ2h0OiA2NTBweDsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgfQoKICAgICAgaDIgewogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tzZWxlY3RlZE5vZGV9fSI+CiAgICAgIDxwYXBlci1tYXRlcmlhbCBlbGV2YXRpb249IjEiIGNsYXNzPSJjYXJkIj4KICAgICAgICA8dGYtbm9kZS1pbmZvCiAgICAgICAgICBncmFwaC1oaWVyYXJjaHk9IltbZ3JhcGhIaWVyYXJjaHldXSIKICAgICAgICAgIHJlbmRlci1oaWVyYXJjaHk9IltbcmVuZGVySGllcmFyY2h5XV0iCiAgICAgICAgICBmbGF0LWdyYXBoPSJbW2dyYXBoXV0iCiAgICAgICAgICBncmFwaC1ub2RlLW5hbWU9Iltbc2VsZWN0ZWROb2RlXV0iCiAgICAgICAgICBub2RlLWluY2x1ZGU9Iltbc2VsZWN0ZWROb2RlSW5jbHVkZV1dIgogICAgICAgICAgaGlnaGxpZ2h0ZWQtbm9kZT0ie3toaWdobGlnaHRlZE5vZGV9fSIKICAgICAgICAgIGNvbG9yLWJ5PSJbW2NvbG9yQnldXSIKICAgICAgICA+CiAgICAgICAgPC90Zi1ub2RlLWluZm8+CiAgICAgIDwvcGFwZXItbWF0ZXJpYWw+CiAgICA8L3RlbXBsYXRlPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19lcXVhbHMoY29sb3JCeSwgJ29wX2NvbXBhdGliaWxpdHknKV1dIj4KICAgICAgPHRmLWdyYXBoLW9wLWNvbXBhdC1jYXJkCiAgICAgICAgZ3JhcGgtaGllcmFyY2h5PSJbW2dyYXBoSGllcmFyY2h5XV0iCiAgICAgICAgcmVuZGVyLWhpZXJhcmNoeT0iW1tyZW5kZXJIaWVyYXJjaHldXSIKICAgICAgICBjb2xvci1ieT0iW1tjb2xvckJ5XV0iCiAgICAgICAgbm9kZS10aXRsZT0iW1tjb21wYXROb2RlVGl0bGVdXSIKICAgICAgPgogICAgICA8L3RmLWdyYXBoLW9wLWNvbXBhdC1jYXJkPgogICAgPC90ZW1wbGF0ZT4KICAgIDx0ZW1wbGF0ZQogICAgICBpcz0iZG9tLWlmIgogICAgICBpZj0iW1tfaGVhbHRoUGlsbHNBdmFpbGFibGUoZGVidWdnZXJEYXRhRW5hYmxlZCwgbm9kZU5hbWVzVG9IZWFsdGhQaWxscyldXSIKICAgID4KICAgICAgPHRmLWdyYXBoLWRlYnVnZ2VyLWRhdGEtY2FyZAogICAgICAgIHJlbmRlci1oaWVyYXJjaHk9IltbcmVuZGVySGllcmFyY2h5XV0iCiAgICAgICAgZGVidWdnZXItbnVtZXJpYy1hbGVydHM9IltbZGVidWdnZXJOdW1lcmljQWxlcnRzXV0iCiAgICAgICAgbm9kZS1uYW1lcy10by1oZWFsdGgtcGlsbHM9Iltbbm9kZU5hbWVzVG9IZWFsdGhQaWxsc11dIgogICAgICAgIHNlbGVjdGVkLW5vZGU9Int7c2VsZWN0ZWROb2RlfX0iCiAgICAgICAgaGlnaGxpZ2h0ZWQtbm9kZT0ie3toaWdobGlnaHRlZE5vZGV9fSIKICAgICAgICBhcmUtaGVhbHRoLXBpbGxzLWxvYWRpbmc9IltbYXJlSGVhbHRoUGlsbHNMb2FkaW5nXV0iCiAgICAgICAgYWxsLXN0ZXBzLW1vZGUtZW5hYmxlZD0ie3thbGxTdGVwc01vZGVFbmFibGVkfX0iCiAgICAgICAgc3BlY2lmaWMtaGVhbHRoLXBpbGwtc3RlcD0ie3tzcGVjaWZpY0hlYWx0aFBpbGxTdGVwfX0iCiAgICAgICAgaGVhbHRoLXBpbGwtc3RlcC1pbmRleD0ie3toZWFsdGhQaWxsU3RlcEluZGV4fX0iCiAgICAgID4KICAgICAgPC90Zi1ncmFwaC1kZWJ1Z2dlci1kYXRhLWNhcmQ+CiAgICA8L3RlbXBsYXRlPgogIGAsdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sTUx0LnByb3RvdHlwZSwidGl0bGUiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIscEx0KV0sTUx0LnByb3RvdHlwZSwiZ3JhcGhIaWVyYXJjaHkiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsd0F0KV0sTUx0LnByb3RvdHlwZSwiZ3JhcGgiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsWEF0KV0sTUx0LnByb3RvdHlwZSwicmVuZGVySGllcmFyY2h5Iix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLE1MdC5wcm90b3R5cGUsIm5vZGVOYW1lc1RvSGVhbHRoUGlsbHMiLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXIsbm90aWZ5OiEwfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLE1MdC5wcm90b3R5cGUsImhlYWx0aFBpbGxTdGVwSW5kZXgiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sTUx0LnByb3RvdHlwZSwiY29sb3JCeSIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxNTHQucHJvdG90eXBlLCJjb21wYXROb2RlVGl0bGUiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLE1MdC5wcm90b3R5cGUsInNlbGVjdGVkTm9kZSIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sTUx0LnByb3RvdHlwZSwiaGlnaGxpZ2h0ZWROb2RlIix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyLG5vdGlmeTohMH0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxNTHQucHJvdG90eXBlLCJzZWxlY3RlZE5vZGVJbmNsdWRlIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sTUx0LnByb3RvdHlwZSwiZGVidWdnZXJEYXRhRW5hYmxlZCIsdm9pZCAwKSxNTHQ9dChbaSgidGYtZ3JhcGgtaW5mbyIpXSxNTHQpO2NsYXNzIEVMdHtjb25zdHJ1Y3Rvcih0LGUsbixpLHIsbyl7dGhpcy5zdmc9dCx0aGlzLmxhYmVsUGFkZGluZz1vLHRoaXMuem9vbUc9ZSx0aGlzLm1haW5ab29tPW4sdGhpcy5tYXhXYW5kSD1yO2xldCBhPXd1KGkuc2hhZG93Um9vdCkscz1hLnNlbGVjdCgic3ZnIiksbD1zLnNlbGVjdCgicmVjdCIpO3RoaXMudmlld3BvaW50Q29vcmQ9e3g6MCx5OjB9O2xldCBjPXloKCkuc3ViamVjdChPYmplY3QpLm9uKCJkcmFnIiwodD0+e3RoaXMudmlld3BvaW50Q29vcmQueD1jdS54LHRoaXMudmlld3BvaW50Q29vcmQueT1jdS55LHRoaXMudXBkYXRlVmlld3BvaW50KCl9KSk7bC5kYXR1bSh0aGlzLnZpZXdwb2ludENvb3JkKS5jYWxsKGMpLHMub24oImNsaWNrIiwoKCk9PntpZihjdS5kZWZhdWx0UHJldmVudGVkKXJldHVybjtsZXQgdD1OdW1iZXIobC5hdHRyKCJ3aWR0aCIpKSxlPU51bWJlcihsLmF0dHIoImhlaWdodCIpKSxuPW9oKHMubm9kZSgpKTt0aGlzLnZpZXdwb2ludENvb3JkLng9blswXS10LzIsdGhpcy52aWV3cG9pbnRDb29yZC55PW5bMV0tZS8yLHRoaXMudXBkYXRlVmlld3BvaW50KCl9KSksdGhpcy52aWV3cG9pbnQ9bC5ub2RlKCksdGhpcy5taW5pbWFwU3ZnPXMubm9kZSgpLHRoaXMubWluaW1hcD1pLHRoaXMuY2FudmFzPWEuc2VsZWN0KCJjYW52YXMuZmlyc3QiKS5ub2RlKCksdGhpcy5jYW52YXNCdWZmZXI9YS5zZWxlY3QoImNhbnZhcy5zZWNvbmQiKS5ub2RlKCksdGhpcy5kb3dubG9hZENhbnZhcz1hLnNlbGVjdCgiY2FudmFzLmRvd25sb2FkIikubm9kZSgpLHd1KHRoaXMuZG93bmxvYWRDYW52YXMpLnN0eWxlKCJkaXNwbGF5Iiwibm9uZSIpLHRoaXMudXBkYXRlKCl9dXBkYXRlVmlld3BvaW50KCl7d3UodGhpcy52aWV3cG9pbnQpLmF0dHIoIngiLHRoaXMudmlld3BvaW50Q29vcmQueCkuYXR0cigieSIsdGhpcy52aWV3cG9pbnRDb29yZC55KTtsZXQgdD0tdGhpcy52aWV3cG9pbnRDb29yZC54KnRoaXMuc2NhbGVNYWluL3RoaXMuc2NhbGVNaW5pbWFwLGU9LXRoaXMudmlld3BvaW50Q29vcmQueSp0aGlzLnNjYWxlTWFpbi90aGlzLnNjYWxlTWluaW1hcDt3dSh0aGlzLnN2ZykuY2FsbCh0aGlzLm1haW5ab29tLnRyYW5zZm9ybSxpTi50cmFuc2xhdGUodCxlKS5zY2FsZSh0aGlzLnNjYWxlTWFpbikpfWdldEltYWdlQmxvYigpe3JldHVybiBuZXcgUHJvbWlzZSgodD0+e3RoaXMuZG93bmxvYWRDYW52YXMudG9CbG9iKChlPT57dChlKX0pLCJpbWFnZS9wbmciKX0pKX11cGRhdGUoKXtsZXQgdD1udWxsO3RyeXtpZih0PXRoaXMuem9vbUcuZ2V0QkJveCgpLDA9PT10LndpZHRoKXJldHVybn1jYXRjaCh0KXtyZXR1cm59bGV0IGU9d3UodGhpcy5zdmcpLG49IiI7Y29uc3QgaT10aGlzLnN2ZyxyPShpLmdldFJvb3ROb2RlP2kuZ2V0Um9vdE5vZGUoKTp0aGlzLnN2Zy5wYXJlbnROb2RlKS5zdHlsZVNoZWV0cztmb3IobGV0IHQ9MDt0PHIubGVuZ3RoO3QrKyl0cnl7bGV0IGU9clt0XS5jc3NSdWxlc3x8clt0XS5ydWxlcztpZihudWxsPT1lKWNvbnRpbnVlO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKW4rPWVbdF0uY3NzVGV4dC5yZXBsYWNlKC8gP3RmLVtcdy1dKyA/L2csIiIpKyJcbiJ9Y2F0Y2godCl7aWYoIlNlY3VyaXR5RXJyb3IiIT09dC5uYW1lKXRocm93IHR9bGV0IG89ZS5hcHBlbmQoInN0eWxlIik7by50ZXh0KG4pO2xldCBhPXd1KHRoaXMuem9vbUcpLHM9YS5hdHRyKCJ0cmFuc2Zvcm0iKTthLmF0dHIoInRyYW5zZm9ybSIsbnVsbCksdC5oZWlnaHQrPXQueSx0LndpZHRoKz10LngsdC5oZWlnaHQrPTIqdGhpcy5sYWJlbFBhZGRpbmcsdC53aWR0aCs9Mip0aGlzLmxhYmVsUGFkZGluZyxlLmF0dHIoIndpZHRoIix0LndpZHRoKS5hdHRyKCJoZWlnaHQiLHQuaGVpZ2h0KSx0aGlzLnNjYWxlTWluaW1hcD10aGlzLm1heFdhbmRIL01hdGgubWF4KHQud2lkdGgsdC5oZWlnaHQpLHRoaXMubWluaW1hcFNpemU9e3dpZHRoOnQud2lkdGgqdGhpcy5zY2FsZU1pbmltYXAsaGVpZ2h0OnQuaGVpZ2h0KnRoaXMuc2NhbGVNaW5pbWFwfSx3dSh0aGlzLm1pbmltYXBTdmcpLmF0dHIodGhpcy5taW5pbWFwU2l6ZSksd3UodGhpcy5jYW52YXNCdWZmZXIpLmF0dHIodGhpcy5taW5pbWFwU2l6ZSk7Y29uc3QgbD13dSh0aGlzLmRvd25sb2FkQ2FudmFzKTtsLnN0eWxlKCJ3aWR0aCIsdC53aWR0aCksbC5zdHlsZSgiaGVpZ2h0Iix0LmhlaWdodCksbC5hdHRyKCJ3aWR0aCIsMyp0LndpZHRoKSxsLmF0dHIoImhlaWdodCIsMyp0LmhlaWdodCksbnVsbCE9dGhpcy50cmFuc2xhdGUmJm51bGwhPXRoaXMuem9vbSYmcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgoKT0+dGhpcy56b29tKCkpKTtsZXQgYz0obmV3IFhNTFNlcmlhbGl6ZXIpLnNlcmlhbGl6ZVRvU3RyaW5nKHRoaXMuc3ZnKTtvLnJlbW92ZSgpLGUuYXR0cigid2lkdGgiLG51bGwpLmF0dHIoImhlaWdodCIsbnVsbCksYS5hdHRyKCJ0cmFuc2Zvcm0iLHMpO2xldCB1PW5ldyBJbWFnZTt1Lm9ubG9hZD0oKT0+e2xldCB0PXRoaXMuY2FudmFzQnVmZmVyLmdldENvbnRleHQoIjJkIik7dC5jbGVhclJlY3QoMCwwLHRoaXMuY2FudmFzQnVmZmVyLndpZHRoLHRoaXMuY2FudmFzQnVmZmVyLmhlaWdodCksdC5kcmF3SW1hZ2UodSwwLDAsdGhpcy5taW5pbWFwU2l6ZS53aWR0aCx0aGlzLm1pbmltYXBTaXplLmhlaWdodCkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgoKT0+e3d1KHRoaXMuY2FudmFzQnVmZmVyKS5zdHlsZSgiZGlzcGxheSIsbnVsbCksd3UodGhpcy5jYW52YXMpLnN0eWxlKCJkaXNwbGF5Iiwibm9uZSIpLFt0aGlzLmNhbnZhcyx0aGlzLmNhbnZhc0J1ZmZlcl09W3RoaXMuY2FudmFzQnVmZmVyLHRoaXMuY2FudmFzXX0pKTtsZXQgZT10aGlzLmRvd25sb2FkQ2FudmFzLmdldENvbnRleHQoIjJkIik7ZS5jbGVhclJlY3QoMCwwLHRoaXMuZG93bmxvYWRDYW52YXMud2lkdGgsdGhpcy5kb3dubG9hZENhbnZhcy5oZWlnaHQpLGUuZHJhd0ltYWdlKHUsMCwwLHRoaXMuZG93bmxvYWRDYW52YXMud2lkdGgsdGhpcy5kb3dubG9hZENhbnZhcy5oZWlnaHQpfSx1Lm9uZXJyb3I9KCk9PntsZXQgdD1uZXcgQmxvYihbY10se3R5cGU6ImltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCJ9KTt1LnNyYz1VUkwuY3JlYXRlT2JqZWN0VVJMKHQpfSx1LnNyYz0iZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsIitlbmNvZGVVUklDb21wb25lbnQoYyl9em9vbSh0KXtpZihudWxsPT10aGlzLnNjYWxlTWluaW1hcClyZXR1cm47dCYmKHRoaXMudHJhbnNsYXRlPVt0LngsdC55XSx0aGlzLnNjYWxlTWFpbj10LmspO2xldCBlPXRoaXMuc3ZnLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49d3UodGhpcy52aWV3cG9pbnQpO3RoaXMudmlld3BvaW50Q29vcmQueD0tdGhpcy50cmFuc2xhdGVbMF0qdGhpcy5zY2FsZU1pbmltYXAvdGhpcy5zY2FsZU1haW4sdGhpcy52aWV3cG9pbnRDb29yZC55PS10aGlzLnRyYW5zbGF0ZVsxXSp0aGlzLnNjYWxlTWluaW1hcC90aGlzLnNjYWxlTWFpbjtsZXQgaT1lLndpZHRoKnRoaXMuc2NhbGVNaW5pbWFwL3RoaXMuc2NhbGVNYWluLHI9ZS5oZWlnaHQqdGhpcy5zY2FsZU1pbmltYXAvdGhpcy5zY2FsZU1haW47bi5hdHRyKCJ4Iix0aGlzLnZpZXdwb2ludENvb3JkLngpLmF0dHIoInkiLHRoaXMudmlld3BvaW50Q29vcmQueSkuYXR0cigid2lkdGgiLGkpLmF0dHIoImhlaWdodCIscik7bGV0IG89dGhpcy5taW5pbWFwU2l6ZS53aWR0aCxhPXRoaXMubWluaW1hcFNpemUuaGVpZ2h0LHM9dGhpcy52aWV3cG9pbnRDb29yZC54LGw9dGhpcy52aWV3cG9pbnRDb29yZC55OyhNYXRoLm1pbihNYXRoLm1heCgwLHMraSksbyktTWF0aC5taW4oTWF0aC5tYXgoMCxzKSxvKSkqKE1hdGgubWluKE1hdGgubWF4KDAsbCtyKSxhKS1NYXRoLm1pbihNYXRoLm1heCgwLGwpLGEpKS8obyphKTwuOD90aGlzLm1pbmltYXAuY2xhc3NMaXN0LnJlbW92ZSgiaGlkZGVuIik6dGhpcy5taW5pbWFwLmNsYXNzTGlzdC5hZGQoImhpZGRlbiIpfX1sZXQgVEx0PWNsYXNzIGV4dGVuZHMgeWV7aW5pdCh0LGUsbixpLHIpe3JldHVybiBuZXcgRUx0KHQsZSxuLHRoaXMsaSxyKX19O1RMdC50ZW1wbGF0ZT1fZWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4zcyBsaW5lYXI7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgICAgIH0KCiAgICAgIDpob3N0KC5oaWRkZW4pIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICBjYW52YXMgewogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7CiAgICAgIH0KCiAgICAgIHJlY3QgewogICAgICAgIGZpbGw6IHdoaXRlOwogICAgICAgIHN0cm9rZTogIzExMTExMTsKICAgICAgICBzdHJva2Utd2lkdGg6IDFweDsKICAgICAgICBmaWxsLW9wYWNpdHk6IDA7CiAgICAgICAgZmlsdGVyOiB1cmwoI21pbmltYXBEcm9wU2hhZG93KTsKICAgICAgICBjdXJzb3I6IG1vdmU7CiAgICAgIH0KCiAgICAgIHN2ZyB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPHN2Zz4KICAgICAgPGRlZnM+CiAgICAgICAgPGZpbHRlcgogICAgICAgICAgaWQ9Im1pbmltYXBEcm9wU2hhZG93IgogICAgICAgICAgeD0iLTIwJSIKICAgICAgICAgIHk9Ii0yMCUiCiAgICAgICAgICB3aWR0aD0iMTUwJSIKICAgICAgICAgIGhlaWdodD0iMTUwJSIKICAgICAgICA+CiAgICAgICAgICA8ZmVPZmZzZXQgcmVzdWx0PSJvZmZPdXQiIGluPSJTb3VyY2VHcmFwaGljIiBkeD0iMSIgZHk9IjEiPjwvZmVPZmZzZXQ+CiAgICAgICAgICA8ZmVDb2xvck1hdHJpeAogICAgICAgICAgICByZXN1bHQ9Im1hdHJpeE91dCIKICAgICAgICAgICAgaW49Im9mZk91dCIKICAgICAgICAgICAgdHlwZT0ibWF0cml4IgogICAgICAgICAgICB2YWx1ZXM9IjAuMSAwIDAgMCAwIDAgMC4xIDAgMCAwIDAgMCAwLjEgMCAwIDAgMCAwIDAuNSAwIgogICAgICAgICAgPjwvZmVDb2xvck1hdHJpeD4KICAgICAgICAgIDxmZUdhdXNzaWFuQmx1cgogICAgICAgICAgICByZXN1bHQ9ImJsdXJPdXQiCiAgICAgICAgICAgIGluPSJtYXRyaXhPdXQiCiAgICAgICAgICAgIHN0ZERldmlhdGlvbj0iMiIKICAgICAgICAgID48L2ZlR2F1c3NpYW5CbHVyPgogICAgICAgICAgPGZlQmxlbmQgaW49IlNvdXJjZUdyYXBoaWMiIGluMj0iYmx1ck91dCIgbW9kZT0ibm9ybWFsIj48L2ZlQmxlbmQ+CiAgICAgICAgPC9maWx0ZXI+CiAgICAgIDwvZGVmcz4KICAgICAgPHJlY3Q+PC9yZWN0PgogICAgPC9zdmc+CiAgICA8Y2FudmFzIGNsYXNzPSJmaXJzdCI+PC9jYW52YXM+CiAgICA8IS0tIEFkZGl0aW9uYWwgY2FudmFzIHRvIHVzZSBhcyBidWZmZXIgdG8gYXZvaWQgZmxpY2tlcmluZyBiZXR3ZWVuIHVwZGF0ZXMgLS0+CiAgICA8Y2FudmFzIGNsYXNzPSJzZWNvbmQiPjwvY2FudmFzPgogICAgPGNhbnZhcyBjbGFzcz0iZG93bmxvYWQiPjwvY2FudmFzPgogIGAsVEx0PXQoW2koInRmLWdyYXBoLW1pbmltYXAiKV0sVEx0KTtjb25zdCBDTHQ9X2VgCiAgPHN0eWxlPgogICAgOmhvc3QoLmRhcmstbW9kZSkgewogICAgICBmaWx0ZXI6IGludmVydCgxKTsKICAgIH0KCiAgICA6aG9zdCB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZvbnQtc2l6ZTogMjBweDsKICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB3aWR0aDogMTAwJTsKICAgIH0KCiAgICAjc3ZnIHsKICAgICAgZmxleDogMTsKICAgICAgZm9udC1mYW1pbHk6IFJvYm90bywgc2Fucy1zZXJpZjsKICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB3aWR0aDogMTAwJTsKICAgIH0KCiAgICAjaGlkZGVuIHsKICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICB0b3A6IDBweDsKICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgfQoKICAgIHRleHQgewogICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgIH0KCiAgICAvKiAtLS0gTm9kZSBhbmQgYW5ub3RhdGlvbi1ub2RlIGZvciBNZXRhbm9kZSAtLS0gKi8KCiAgICAubWV0YSA+IC5ub2Rlc2hhcGUgPiByZWN0LAogICAgLm1ldGEgPiAuYW5ub3RhdGlvbi1ub2RlID4gcmVjdCB7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgZmlsbDogaHNsKDAsIDAlLCA3MCUpOwogICAgfQogICAgLm5vZGUubWV0YS5oaWdobGlnaHRlZCA+IC5ub2Rlc2hhcGUgPiByZWN0LAogICAgLm5vZGUubWV0YS5oaWdobGlnaHRlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiByZWN0IHsKICAgICAgc3Ryb2tlLXdpZHRoOiAyOwogICAgfQogICAgLmFubm90YXRpb24ubWV0YS5oaWdobGlnaHRlZCA+IC5ub2Rlc2hhcGUgPiByZWN0LAogICAgLmFubm90YXRpb24ubWV0YS5oaWdobGlnaHRlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiByZWN0IHsKICAgICAgc3Ryb2tlLXdpZHRoOiAxOwogICAgfQogICAgLm1ldGEuc2VsZWN0ZWQgPiAubm9kZXNoYXBlID4gcmVjdCwKICAgIC5tZXRhLnNlbGVjdGVkID4gLmFubm90YXRpb24tbm9kZSA+IHJlY3QgewogICAgICBzdHJva2U6IHJlZDsKICAgICAgc3Ryb2tlLXdpZHRoOiAyOwogICAgfQogICAgLm5vZGUubWV0YS5zZWxlY3RlZC5leHBhbmRlZCA+IC5ub2Rlc2hhcGUgPiByZWN0LAogICAgLm5vZGUubWV0YS5zZWxlY3RlZC5leHBhbmRlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiByZWN0IHsKICAgICAgc3Ryb2tlOiByZWQ7CiAgICAgIHN0cm9rZS13aWR0aDogMzsKICAgIH0KICAgIC5hbm5vdGF0aW9uLm1ldGEuc2VsZWN0ZWQgPiAubm9kZXNoYXBlID4gcmVjdCwKICAgIC5hbm5vdGF0aW9uLm1ldGEuc2VsZWN0ZWQgPiAuYW5ub3RhdGlvbi1ub2RlID4gcmVjdCB7CiAgICAgIHN0cm9rZTogcmVkOwogICAgICBzdHJva2Utd2lkdGg6IDI7CiAgICB9CiAgICAubm9kZS5tZXRhLnNlbGVjdGVkLmV4cGFuZGVkLmhpZ2hsaWdodGVkID4gLm5vZGVzaGFwZSA+IHJlY3QsCiAgICAubm9kZS5tZXRhLnNlbGVjdGVkLmV4cGFuZGVkLmhpZ2hsaWdodGVkID4gLmFubm90YXRpb24tbm9kZSA+IHJlY3QgewogICAgICBzdHJva2U6IHJlZDsKICAgICAgc3Ryb2tlLXdpZHRoOiA0OwogICAgfQoKICAgIC5mYWRlZCwKICAgIC5mYWRlZCByZWN0LAogICAgLmZhZGVkIGVsbGlwc2UsCiAgICAuZmFkZWQgcGF0aCwKICAgIC5mYWRlZCB1c2UsCiAgICAjcmVjdEhhdGNoIGxpbmUsCiAgICAjZWxsaXBzZUhhdGNoIGxpbmUgewogICAgICBjb2xvcjogI2UwZDRiMyAhaW1wb3J0YW50OwogICAgICBmaWxsOiB3aGl0ZTsKICAgICAgc3Ryb2tlOiAjZTBkNGIzICFpbXBvcnRhbnQ7CiAgICB9CgogICAgLmZhZGVkIHBhdGggewogICAgICBzdHJva2Utd2lkdGg6IDFweCAhaW1wb3J0YW50OwogICAgfQoKICAgIC5mYWRlZCByZWN0IHsKICAgICAgZmlsbDogdXJsKCNyZWN0SGF0Y2gpICFpbXBvcnRhbnQ7CiAgICB9CgogICAgLmZhZGVkIGVsbGlwc2UsCiAgICAuZmFkZWQgdXNlIHsKICAgICAgZmlsbDogdXJsKCNlbGxpcHNlSGF0Y2gpICFpbXBvcnRhbnQ7CiAgICB9CgogICAgLmZhZGVkIHRleHQgewogICAgICBvcGFjaXR5OiAwOwogICAgfQoKICAgIC8qIFJ1bGVzIHVzZWQgZm9yIGlucHV0LXRyYWNpbmcuICovCiAgICAuaW5wdXQtaGlnaGxpZ2h0ID4gKiA+IHJlY3QsCiAgICAuaW5wdXQtaGlnaGxpZ2h0ID4gKiA+IGVsbGlwc2UsCiAgICAuaW5wdXQtaGlnaGxpZ2h0ID4gKiA+IHVzZSB7CiAgICAgIGZpbGw6IHdoaXRlOwogICAgICBzdHJva2U6ICNmZjk4MDAgIWltcG9ydGFudDsKICAgIH0KCiAgICAvKiAgLSBGYWRlZCBub24taW5wdXQgc3R5bGluZyAqLwogICAgLm5vbi1pbnB1dCA+ICogPiByZWN0LAoubm9uLWlucHV0ID4gKiA+IGVsbGlwc2UsCi5ub24taW5wdXQgPiAqID4gdXNlLAovKiBGb3IgQ29uc3Qgbm9kZXMuICovCi5ub24taW5wdXQgPiAqID4gLmNvbnN0YW50Om5vdChbY2xhc3MqPSJpbnB1dC1oaWdobGlnaHQiXSkgPgogIC5hbm5vdGF0aW9uLW5vZGUgPiBlbGxpcHNlLAovKiBGb3Igc3R5bGluZyBvZiBhbm5vdGF0aW9uIG5vZGVzIG9mIG5vbi1pbnB1dCBub2Rlcy4gKi8KLm5vbi1pbnB1dCA+IGcgPiAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLW5vZGUgPiByZWN0IHsKICAgICAgc3Ryb2tlOiAjZTBkNGIzICFpbXBvcnRhbnQ7CiAgICAgIHN0cm9rZS13aWR0aDogaW5oZXJpdDsKICAgICAgc3Ryb2tlLWRhc2hhcnJheTogaW5oZXJpdDsKICAgIH0KCiAgICAubm9uLWlucHV0IHBhdGggewogICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICB9CgogICAgLm5vbi1pbnB1dCA+IC5ub2Rlc2hhcGUgPiByZWN0LAoubm9uLWlucHV0ID4gLmFubm90YXRpb24tbm9kZSA+IHJlY3QsCi8qIEZvciBzdHlsaW5nIG9mIGFubm90YXRpb24gbm9kZXMgb2Ygbm9uLWlucHV0IG5vZGVzLiAqLwoubm9uLWlucHV0ID4gZyA+IC5hbm5vdGF0aW9uID4gLmFubm90YXRpb24tbm9kZSA+IHJlY3QgewogICAgICBmaWxsOiB1cmwoI3JlY3RIYXRjaCkgIWltcG9ydGFudDsKICAgIH0KCiAgICAubm9uLWlucHV0IGVsbGlwc2UsCiAgICAubm9uLWlucHV0IHVzZSB7CiAgICAgIGZpbGw6IHVybCgjZWxsaXBzZUhhdGNoKSAhaW1wb3J0YW50OwogICAgfQoKICAgIC5ub24taW5wdXQgPiB0ZXh0IHsKICAgICAgb3BhY2l0eTogMDsKICAgIH0KCiAgICAubm9uLWlucHV0IC5hbm5vdGF0aW9uID4gLmFubm90YXRpb24tZWRnZSB7CiAgICAgIG1hcmtlci1lbmQ6IHVybCgjYW5ub3RhdGlvbi1hcnJvd2hlYWQtZmFkZWQpOwogICAgfQoKICAgIC5ub24taW5wdXQgLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1lZGdlLnJlZmxpbmUgewogICAgICBtYXJrZXItc3RhcnQ6IHVybCgjcmVmLWFubm90YXRpb24tYXJyb3doZWFkLWZhZGVkKTsKICAgIH0KCiAgICAvKiBJbnB1dCBlZGdlcy4gKi8KICAgIC5pbnB1dC1lZGdlLWhpZ2hsaWdodCA+IHRleHQgewogICAgICBmaWxsOiBibGFjayAhaW1wb3J0YW50OwogICAgfQogICAgLmlucHV0LWhpZ2hsaWdodCA+IC5pbi1hbm5vdGF0aW9ucyA+IC5hbm5vdGF0aW9uID4gLmFubm90YXRpb24tZWRnZSwKICAgIC5pbnB1dC1oaWdobGlnaHQtc2VsZWN0ZWQKICAgICAgPiAuaW4tYW5ub3RhdGlvbnMKICAgICAgPiAuYW5ub3RhdGlvbgogICAgICA+IC5hbm5vdGF0aW9uLWVkZ2UgewogICAgICBzdHJva2U6ICM5OTkgIWltcG9ydGFudDsKICAgIH0KCiAgICAvKiBOb24taW5wdXQgZWRnZXMuICovCiAgICAubm9uLWlucHV0LWVkZ2UtaGlnaGxpZ2h0LAoubm9uLWlucHV0ID4gZyA+IC5hbm5vdGF0aW9uID4gcGF0aCwKLyogQW5ub3RhdGlvbiBzdHlsZXMgKGxhYmVsIGFuZCBlZGdlcyByZXNwZWN0aXZlbHkpLiAqLwoubm9uLWlucHV0ID4gZyA+Ci5hbm5vdGF0aW9uOm5vdCguaW5wdXQtaGlnaGxpZ2h0KTpub3QoLmlucHV0LWhpZ2hsaWdodC1zZWxlY3RlZCkgPgouYW5ub3RhdGlvbi1sYWJlbAovKi5hbm5vdGF0aW9uLWVkZ2UqLyB7CiAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgIH0KCiAgICAvKiAtLS0gT3AgTm9kZSAtLS0gKi8KCiAgICAub3AgPiAubm9kZXNoYXBlID4gLm5vZGVjb2xvcnRhcmdldCwKICAgIC5vcCA+IC5hbm5vdGF0aW9uLW5vZGUgPiAubm9kZWNvbG9ydGFyZ2V0IHsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICBmaWxsOiAjZmZmOwogICAgICBzdHJva2U6ICNjY2M7CiAgICB9CgogICAgLm9wLnNlbGVjdGVkID4gLm5vZGVzaGFwZSA+IC5ub2RlY29sb3J0YXJnZXQsCiAgICAub3Auc2VsZWN0ZWQgPiAuYW5ub3RhdGlvbi1ub2RlID4gLm5vZGVjb2xvcnRhcmdldCB7CiAgICAgIHN0cm9rZTogcmVkOwogICAgICBzdHJva2Utd2lkdGg6IDI7CiAgICB9CgogICAgLm9wLmhpZ2hsaWdodGVkID4gLm5vZGVzaGFwZSA+IC5ub2RlY29sb3J0YXJnZXQsCiAgICAub3AuaGlnaGxpZ2h0ZWQgPiAuYW5ub3RhdGlvbi1ub2RlID4gLm5vZGVjb2xvcnRhcmdldCB7CiAgICAgIHN0cm9rZS13aWR0aDogMjsKICAgIH0KCiAgICAvKiAtLS0gU2VyaWVzIE5vZGUgLS0tICovCgogICAgLyogQnkgZGVmYXVsdCwgZG9uJ3Qgc2hvdyB0aGUgc2VyaWVzIGJhY2tncm91bmQgPHJlY3Q+LiAqLwogICAgLnNlcmllcyA+IC5ub2Rlc2hhcGUgPiByZWN0IHsKICAgICAgZmlsbDogaHNsKDAsIDAlLCA3MCUpOwogICAgICBmaWxsLW9wYWNpdHk6IDA7CiAgICAgIHN0cm9rZS1kYXNoYXJyYXk6IDUsIDU7CiAgICAgIHN0cm9rZS1vcGFjaXR5OiAwOwogICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB9CgogICAgLyogT25jZSBleHBhbmRlZCwgc2hvdyB0aGUgc2VyaWVzIGJhY2tncm91bmQgPHJlY3Q+IGFuZCBoaWRlIHRoZSA8dXNlPi4gKi8KICAgIC5zZXJpZXMuZXhwYW5kZWQgPiAubm9kZXNoYXBlID4gcmVjdCB7CiAgICAgIGZpbGwtb3BhY2l0eTogMC4xNTsKICAgICAgc3Ryb2tlOiBoc2woMCwgMCUsIDcwJSk7CiAgICAgIHN0cm9rZS1vcGFjaXR5OiAxOwogICAgfQogICAgLnNlcmllcy5leHBhbmRlZCA+IC5ub2Rlc2hhcGUgPiB1c2UgewogICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICB9CgogICAgLyoqCiAqIFRPRE86IFNpbXBsaWZ5IHRoaXMgYnkgYXBwbHlpbmcgYSBzdGFibGUgY2xhc3MgbmFtZSB0byBhbGwgPGc+CiAqIGVsZW1lbnRzIHRoYXQgY3VycmVudGx5IGhhdmUgZWl0aGVyIHRoZSBub2Rlc2hhcGUgb3IgYW5ub3RhdGlvbi1ub2RlIGNsYXNzZXMuCiAqLwogICAgLnNlcmllcyA+IC5ub2Rlc2hhcGUgPiB1c2UsCiAgICAuc2VyaWVzID4gLmFubm90YXRpb24tbm9kZSA+IHVzZSB7CiAgICAgIHN0cm9rZTogI2NjYzsKICAgIH0KICAgIC5zZXJpZXMuaGlnaGxpZ2h0ZWQgPiAubm9kZXNoYXBlID4gdXNlLAogICAgLnNlcmllcy5oaWdobGlnaHRlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiB1c2UgewogICAgICBzdHJva2Utd2lkdGg6IDI7CiAgICB9CiAgICAuc2VyaWVzLnNlbGVjdGVkID4gLm5vZGVzaGFwZSA+IHVzZSwKICAgIC5zZXJpZXMuc2VsZWN0ZWQgPiAuYW5ub3RhdGlvbi1ub2RlID4gdXNlIHsKICAgICAgc3Ryb2tlOiByZWQ7CiAgICAgIHN0cm9rZS13aWR0aDogMjsKICAgIH0KCiAgICAuc2VyaWVzLnNlbGVjdGVkID4gLm5vZGVzaGFwZSA+IHJlY3QgewogICAgICBzdHJva2U6IHJlZDsKICAgICAgc3Ryb2tlLXdpZHRoOiAyOwogICAgfQoKICAgIC5hbm5vdGF0aW9uLnNlcmllcy5zZWxlY3RlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiB1c2UgewogICAgICBzdHJva2U6IHJlZDsKICAgICAgc3Ryb2tlLXdpZHRoOiAyOwogICAgfQoKICAgIC8qIC0tLSBCcmlkZ2UgTm9kZSAtLS0gKi8KICAgIC5icmlkZ2UgPiAubm9kZXNoYXBlID4gcmVjdCB7CiAgICAgIHN0cm9rZTogI2YwZjsKICAgICAgb3BhY2l0eTogMC4yOwogICAgICBkaXNwbGF5OiBub25lOwogICAgfQoKICAgIC8qIC0tLSBTdHJ1Y3R1cmFsIEVsZW1lbnRzIC0tLSAqLwogICAgLmVkZ2UgPiBwYXRoLmVkZ2VsaW5lLnN0cnVjdHVyYWwgewogICAgICBzdHJva2U6ICNmMGY7CiAgICAgIG9wYWNpdHk6IDAuMjsKICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KCiAgICAvKiBSZWZlcmVuY2UgRWRnZSAqLwogICAgLmVkZ2UgPiBwYXRoLmVkZ2VsaW5lLnJlZmVyZW5jZWVkZ2UgewogICAgICBzdHJva2U6ICNmZmI3NGQ7CiAgICAgIG9wYWNpdHk6IDE7CiAgICB9CgogICAgLyogLS0tIFNlcmllcyBOb2RlcyAtLS0gKi8KCiAgICAvKiBIaWRlIHRoZSByZWN0IGZvciBhIHNlcmllcycgYW5ub3RhdGlvbi4gKi8KICAgIC5zZXJpZXMgPiAuYW5ub3RhdGlvbi1ub2RlID4gcmVjdCB7CiAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CgogICAgLyogLS0tIE5vZGUgbGFiZWwgLS0tICovCgogICAgLm5vZGUgewogICAgICAvKiBQcm92aWRlIGEgaGludCB0byBicm93c2VycyB0byBhdm9pZCB1c2luZyB0aGVpciBzdGF0aWMgcmFzdGVyaXphdGlvbgogICAgICBhdCBpbml0aWFsIHNjYWxlLCB3aGljaCBsb29rcyB2ZXJ5IHBpeGVsYXRlZCBvbiBDaHJvbWl1bSB3aGVuIHpvb21lZCBpbi4KICAgICAgTm90ZSB0aGF0IHdlIGludGVudGlvbmFsbHkgZG8gKm5vdCogdXNlICd3aWxsLWNoYW5nZTogdHJhbnNmb3JtJyBhbmQKICAgICAgJ3RyYW5zbGF0ZVooMCkgaGVyZSwgd2hpY2ggaW50cm9kdWNlIGJsdXJyaW5lc3Mgb24gRmlyZWZveC4KICAgICAgU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2lzc3Vlcy80NzQ0ICovCiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWigxcHgpOwogICAgfQoKICAgIC5ub2RlID4gdGV4dC5ub2RlbGFiZWwgewogICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIGZpbGw6ICM0NDQ7CiAgICB9CgogICAgLm1ldGEuZXhwYW5kZWQgPiB0ZXh0Lm5vZGVsYWJlbCB7CiAgICAgIGZvbnQtc2l6ZTogOXB4OwogICAgfQoKICAgIC5zZXJpZXMgPiB0ZXh0Lm5vZGVsYWJlbCB7CiAgICAgIGZvbnQtc2l6ZTogOHB4OwogICAgfQoKICAgIC5vcCA+IHRleHQubm9kZWxhYmVsIHsKICAgICAgZm9udC1zaXplOiA2cHg7CiAgICB9CgogICAgLmJyaWRnZSA+IHRleHQubm9kZWxhYmVsIHsKICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KCiAgICAubm9kZS5tZXRhLmV4cGFuZGVkID4gdGV4dC5ub2RlbGFiZWwgewogICAgICBjdXJzb3I6IG5vcm1hbDsKICAgIH0KCiAgICAuYW5ub3RhdGlvbi5tZXRhLmhpZ2hsaWdodGVkID4gdGV4dC5hbm5vdGF0aW9uLWxhYmVsIHsKICAgICAgZmlsbDogIzUwYTNmNzsKICAgIH0KCiAgICAuYW5ub3RhdGlvbi5tZXRhLnNlbGVjdGVkID4gdGV4dC5hbm5vdGF0aW9uLWxhYmVsIHsKICAgICAgZmlsbDogIzQyODVmNDsKICAgIH0KCiAgICAvKiAtLS0gQW5ub3RhdGlvbiAtLS0gKi8KCiAgICAvKiBvbmx5IGFwcGxpZWQgZm9yIGFubm90YXRpb25zIHRoYXQgYXJlIG5vdCBzdW1tYXJ5IG9yIGNvbnN0YW50LgooLnN1bW1hcnksIC5jb25zdGFudCBnZXRzIG92ZXJyaWRkZW4gYmVsb3cpICovCiAgICAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLW5vZGUgPiAqIHsKICAgICAgc3Ryb2tlLXdpZHRoOiAwLjU7CiAgICAgIHN0cm9rZS1kYXNoYXJyYXk6IDEsIDE7CiAgICB9CgogICAgLmFubm90YXRpb24uc3VtbWFyeSA+IC5hbm5vdGF0aW9uLW5vZGUgPiAqLAogICAgLmFubm90YXRpb24uY29uc3RhbnQgPiAuYW5ub3RhdGlvbi1ub2RlID4gKiB7CiAgICAgIHN0cm9rZS13aWR0aDogMTsKICAgICAgc3Ryb2tlLWRhc2hhcnJheTogbm9uZTsKICAgIH0KCiAgICAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWVkZ2UgewogICAgICBmaWxsOiBub25lOwogICAgICBzdHJva2U6ICNhYWE7CiAgICAgIHN0cm9rZS13aWR0aDogMC41OwogICAgICBtYXJrZXItZW5kOiB1cmwoI2Fubm90YXRpb24tYXJyb3doZWFkKTsKICAgIH0KCiAgICAuZmFkZWQgLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1lZGdlIHsKICAgICAgbWFya2VyLWVuZDogdXJsKCNhbm5vdGF0aW9uLWFycm93aGVhZC1mYWRlZCk7CiAgICB9CgogICAgLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1lZGdlLnJlZmxpbmUgewogICAgICBtYXJrZXItc3RhcnQ6IHVybCgjcmVmLWFubm90YXRpb24tYXJyb3doZWFkKTsKICAgIH0KCiAgICAuZmFkZWQgLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1lZGdlLnJlZmxpbmUgewogICAgICBtYXJrZXItc3RhcnQ6IHVybCgjcmVmLWFubm90YXRpb24tYXJyb3doZWFkLWZhZGVkKTsKICAgIH0KCiAgICAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWNvbnRyb2wtZWRnZSB7CiAgICAgIHN0cm9rZS1kYXNoYXJyYXk6IDEsIDE7CiAgICB9CgogICAgI2Fubm90YXRpb24tYXJyb3doZWFkIHsKICAgICAgZmlsbDogI2FhYTsKICAgIH0KCiAgICAjYW5ub3RhdGlvbi1hcnJvd2hlYWQtZmFkZWQgewogICAgICBmaWxsOiAjZTBkNGIzOwogICAgfQoKICAgICNyZWYtYW5ub3RhdGlvbi1hcnJvd2hlYWQgewogICAgICBmaWxsOiAjYWFhOwogICAgfQoKICAgICNyZWYtYW5ub3RhdGlvbi1hcnJvd2hlYWQtZmFkZWQgewogICAgICBmaWxsOiAjZTBkNGIzOwogICAgfQoKICAgIC5hbm5vdGF0aW9uID4gLmFubm90YXRpb24tbGFiZWwgewogICAgICBmb250LXNpemU6IDVweDsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgfQogICAgLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1sYWJlbC5hbm5vdGF0aW9uLWVsbGlwc2lzIHsKICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgfQoKICAgIC8qIEhpZGUgYW5ub3RhdGlvbnMgb24gZXhwYW5kZWQgbWV0YSBub2RlcyBzaW5jZSB0aGV5J3JlIHJlZHVuZGFudC4gKi8KICAgIC5leHBhbmRlZCA+IC5pbi1hbm5vdGF0aW9ucywKICAgIC5leHBhbmRlZCA+IC5vdXQtYW5ub3RhdGlvbnMgewogICAgICBkaXNwbGF5OiBub25lOwogICAgfQoKICAgIC8qIC0tLSBBbm5vdGF0aW9uOiBDb25zdGFudCAtLS0gKi8KCiAgICAuY29uc3RhbnQgPiAuYW5ub3RhdGlvbi1ub2RlID4gZWxsaXBzZSB7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgZmlsbDogd2hpdGU7CiAgICAgIHN0cm9rZTogIzg0ODQ4NDsKICAgIH0KCiAgICAuY29uc3RhbnQuc2VsZWN0ZWQgPiAuYW5ub3RhdGlvbi1ub2RlID4gZWxsaXBzZSB7CiAgICAgIGZpbGw6IHdoaXRlOwogICAgICBzdHJva2U6IHJlZDsKICAgIH0KCiAgICAuY29uc3RhbnQuaGlnaGxpZ2h0ZWQgPiAuYW5ub3RhdGlvbi1ub2RlID4gZWxsaXBzZSB7CiAgICAgIHN0cm9rZS13aWR0aDogMS41OwogICAgfQoKICAgIC8qIC0tLSBBbm5vdGF0aW9uOiBTdW1tYXJ5IC0tLSAqLwoKICAgIC5zdW1tYXJ5ID4gLmFubm90YXRpb24tbm9kZSA+IGVsbGlwc2UgewogICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIGZpbGw6ICNkYjQ0Mzc7CiAgICAgIHN0cm9rZTogI2RiNDQzNzsKICAgIH0KCiAgICAuc3VtbWFyeS5zZWxlY3RlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiBlbGxpcHNlIHsKICAgICAgZmlsbDogI2E1MjcxNDsKICAgICAgc3Ryb2tlOiAjYTUyNzE0OwogICAgfQoKICAgIC5zdW1tYXJ5LmhpZ2hsaWdodGVkID4gLmFubm90YXRpb24tbm9kZSA+IGVsbGlwc2UgewogICAgICBzdHJva2Utd2lkdGg6IDEuNTsKICAgIH0KCiAgICAvKiAtLS0gRWRnZSAtLS0gKi8KCiAgICAuZWRnZSA+IHBhdGguZWRnZWxpbmUgewogICAgICBmaWxsOiBub25lOwogICAgICBzdHJva2U6ICNiYmI7CiAgICAgIHN0cm9rZS1saW5lY2FwOiByb3VuZDsKICAgICAgc3Ryb2tlLXdpZHRoOiAwLjc1OwogICAgfQoKICAgIC5lZGdlIC5zZWxlY3RhYmxlZWRnZSB7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIH0KCiAgICAuc2VsZWN0ZWRlZGdlID4gcGF0aC5lZGdlbGluZSB7CiAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgc3Ryb2tlOiAjZjAwOwogICAgfQoKICAgIC5lZGdlLnNlbGVjdGVkZWRnZSB0ZXh0IHsKICAgICAgZmlsbDogIzAwMDsKICAgIH0KCiAgICAvKiBMYWJlbHMgc2hvd2luZyB0ZW5zb3Igc2hhcGVzIG9uIGVkZ2VzICovCiAgICAuZWRnZSA+IHRleHQgewogICAgICBmb250LXNpemU6IDMuNXB4OwogICAgICBmaWxsOiAjNjY2OwogICAgfQoKICAgIC5kYXRhZmxvdy1hcnJvd2hlYWQgewogICAgICBmaWxsOiAjYmJiOwogICAgfQoKICAgIC5yZWZlcmVuY2UtYXJyb3doZWFkIHsKICAgICAgZmlsbDogI2ZmYjc0ZDsKICAgIH0KCiAgICAuc2VsZWN0ZWQtYXJyb3doZWFkIHsKICAgICAgZmlsbDogI2YwMDsKICAgIH0KCiAgICAuZWRnZSAuY29udHJvbC1kZXAgewogICAgICBzdHJva2UtZGFzaGFycmF5OiAyLCAyOwogICAgfQoKICAgIC8qIC0tLSBHcm91cCBub2RlIGV4cGFuZC9jb2xsYXBzZSBidXR0b24gLS0tICovCgogICAgLyogSGlkZXMgZXhwYW5kL2NvbGxhcHNlIGJ1dHRvbnMgd2hlbiBhIG5vZGUgaXNuJ3QgZXhwYW5kZWQgb3IgaGlnaGxpZ2h0ZWQuIFVzaW5nCiAgIGluY3JlZGlibHkgc21hbGwgb3BhY2l0eSBzbyB0aGF0IHRoZSBib3VuZGluZyBib3ggb2YgdGhlIDxnPiBwYXJlbnQgc3RpbGwgdGFrZXMKICAgdGhpcyBjb250YWluZXIgaW50byBhY2NvdW50IGV2ZW4gd2hlbiBpdCBpc24ndCB2aXNpYmxlICovCiAgICAubm9kZTpub3QoLmhpZ2hsaWdodGVkKTpub3QoLmV4cGFuZGVkKSA+IC5ub2Rlc2hhcGUgPiAuYnV0dG9uY29udGFpbmVyIHsKICAgICAgb3BhY2l0eTogMC4wMTsKICAgIH0KICAgIC5ub2RlLmhpZ2hsaWdodGVkID4gLm5vZGVzaGFwZSA+IC5idXR0b25jb250YWluZXIgewogICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB9CiAgICAuYnV0dG9uY2lyY2xlIHsKICAgICAgZmlsbDogI2U3ODExZDsKICAgIH0KICAgIC5idXR0b25jaXJjbGU6aG92ZXIgewogICAgICBmaWxsOiAjYjk2NzE3OwogICAgfQogICAgLmV4cGFuZGJ1dHRvbiwKICAgIC5jb2xsYXBzZWJ1dHRvbiB7CiAgICAgIHN0cm9rZTogd2hpdGU7CiAgICB9CiAgICAvKiBEbyBub3QgbGV0IHRoZSBwYXRoIGVsZW1lbnRzIGluIHRoZSBidXR0b24gdGFrZSBwb2ludGVyIGZvY3VzICovCiAgICAubm9kZSA+IC5ub2Rlc2hhcGUgPiAuYnV0dG9uY29udGFpbmVyID4gLmV4cGFuZGJ1dHRvbiwKICAgIC5ub2RlID4gLm5vZGVzaGFwZSA+IC5idXR0b25jb250YWluZXIgPiAuY29sbGFwc2VidXR0b24gewogICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIH0KICAgIC8qIE9ubHkgc2hvdyB0aGUgZXhwYW5kIGJ1dHRvbiB3aGVuIGEgbm9kZSBpcyBjb2xsYXBzZWQgYW5kIG9ubHkgc2hvdyB0aGUKICAgY29sbGFwc2UgYnV0dG9uIHdoZW4gYSBub2RlIGlzIGV4cGFuZGVkLiAqLwogICAgLm5vZGUuZXhwYW5kZWQgPiAubm9kZXNoYXBlID4gLmJ1dHRvbmNvbnRhaW5lciA+IC5leHBhbmRidXR0b24gewogICAgICBkaXNwbGF5OiBub25lOwogICAgfQogICAgLm5vZGU6bm90KC5leHBhbmRlZCkgPiAubm9kZXNoYXBlID4gLmJ1dHRvbmNvbnRhaW5lciA+IC5jb2xsYXBzZWJ1dHRvbiB7CiAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CgogICAgLmhlYWx0aC1waWxsLXN0YXRzIHsKICAgICAgZm9udC1zaXplOiA0cHg7CiAgICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgICB9CgogICAgLmhlYWx0aC1waWxsIHJlY3QgewogICAgICBmaWx0ZXI6IHVybCgjaGVhbHRoLXBpbGwtc2hhZG93KTsKICAgICAgcng6IDM7CiAgICAgIHJ5OiAzOwogICAgfQoKICAgIC50aXRsZUNvbnRhaW5lciB7CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgdG9wOiAyMHB4OwogICAgfQoKICAgIC50aXRsZSwKICAgIC5hdXhUaXRsZSwKICAgIC5mdW5jdGlvbkxpYnJhcnlUaXRsZSB7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIH0KCiAgICAjbWluaW1hcCB7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgcmlnaHQ6IDIwcHg7CiAgICAgIGJvdHRvbTogMjBweDsKICAgIH0KCiAgICAuY29udGV4dC1tZW51IHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICBkaXNwbGF5OiBub25lOwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTJlMmUyOwogICAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgbWluLXdpZHRoOiAxNTBweDsKICAgICAgYm9yZGVyOiAxcHggc29saWQgI2Q0ZDRkNDsKICAgIH0KCiAgICAuY29udGV4dC1tZW51IHVsIHsKICAgICAgbGlzdC1zdHlsZS10eXBlOiBub25lOwogICAgICBtYXJnaW46IDA7CiAgICAgIHBhZGRpbmc6IDA7CiAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgIH0KCiAgICAuY29udGV4dC1tZW51IHVsIGxpIHsKICAgICAgcGFkZGluZzogNHB4IDE2cHg7CiAgICB9CgogICAgLmNvbnRleHQtbWVudSB1bCBsaTpob3ZlciB7CiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmMzkxM2U7CiAgICAgIGNvbG9yOiB3aGl0ZTsKICAgIH0KICA8L3N0eWxlPgogIDxkaXYgY2xhc3M9InRpdGxlQ29udGFpbmVyIj4KICAgIDxkaXYgaWQ9InRpdGxlIiBjbGFzcz0idGl0bGUiPk1haW4gR3JhcGg8L2Rpdj4KICAgIDxkaXYgaWQ9ImF1eFRpdGxlIiBjbGFzcz0iYXV4VGl0bGUiPkF1eGlsaWFyeSBOb2RlczwvZGl2PgogICAgPGRpdiBpZD0iZnVuY3Rpb25MaWJyYXJ5VGl0bGUiIGNsYXNzPSJmdW5jdGlvbkxpYnJhcnlUaXRsZSI+RnVuY3Rpb25zPC9kaXY+CiAgPC9kaXY+CiAgPHN2ZyBpZD0ic3ZnIj4KICAgIDxkZWZzPgogICAgICA8IS0tIEFycm93IGhlYWRzIGZvciByZWZlcmVuY2UgZWRnZSBwYXRocyBvZiBkaWZmZXJlbnQgcHJlZGVmaW5lZCBzaXplcyBwZXIgY29sb3IuIC0tPgogICAgICA8cGF0aAogICAgICAgIGlkPSJyZWZlcmVuY2UtYXJyb3doZWFkLXBhdGgiCiAgICAgICAgZD0iTSAwLDAgTCAxMCw1IEwgMCwxMCBDIDMsNyAzLDMgMCwwIgogICAgICA+PC9wYXRoPgogICAgICA8bWFya2VyCiAgICAgICAgY2xhc3M9InJlZmVyZW5jZS1hcnJvd2hlYWQiCiAgICAgICAgaWQ9InJlZmVyZW5jZS1hcnJvd2hlYWQtc21hbGwiCiAgICAgICAgdmlld0JveD0iMCAwIDEwIDEwIgogICAgICAgIG1hcmtlcldpZHRoPSI1IgogICAgICAgIG1hcmtlckhlaWdodD0iNSIKICAgICAgICByZWZYPSIyIgogICAgICAgIHJlZlk9IjUiCiAgICAgICAgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiCiAgICAgICAgbWFya2VyVW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICA+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjcmVmZXJlbmNlLWFycm93aGVhZC1wYXRoIj48L3VzZT4KICAgICAgPC9tYXJrZXI+CiAgICAgIDxtYXJrZXIKICAgICAgICBjbGFzcz0icmVmZXJlbmNlLWFycm93aGVhZCIKICAgICAgICBpZD0icmVmZXJlbmNlLWFycm93aGVhZC1tZWRpdW0iCiAgICAgICAgdmlld0JveD0iMCAwIDEwIDEwIgogICAgICAgIG1hcmtlcldpZHRoPSIxMyIKICAgICAgICBtYXJrZXJIZWlnaHQ9IjEzIgogICAgICAgIHJlZlg9IjIiCiAgICAgICAgcmVmWT0iNSIKICAgICAgICBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIKICAgICAgICBtYXJrZXJVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgID4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNyZWZlcmVuY2UtYXJyb3doZWFkLXBhdGgiPjwvdXNlPgogICAgICA8L21hcmtlcj4KICAgICAgPG1hcmtlcgogICAgICAgIGNsYXNzPSJyZWZlcmVuY2UtYXJyb3doZWFkIgogICAgICAgIGlkPSJyZWZlcmVuY2UtYXJyb3doZWFkLWxhcmdlIgogICAgICAgIHZpZXdCb3g9IjAgMCAxMCAxMCIKICAgICAgICBtYXJrZXJXaWR0aD0iMTYiCiAgICAgICAgbWFya2VySGVpZ2h0PSIxNiIKICAgICAgICByZWZYPSIyIgogICAgICAgIHJlZlk9IjUiCiAgICAgICAgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiCiAgICAgICAgbWFya2VyVW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICA+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjcmVmZXJlbmNlLWFycm93aGVhZC1wYXRoIj48L3VzZT4KICAgICAgPC9tYXJrZXI+CiAgICAgIDxtYXJrZXIKICAgICAgICBjbGFzcz0icmVmZXJlbmNlLWFycm93aGVhZCIKICAgICAgICBpZD0icmVmZXJlbmNlLWFycm93aGVhZC14bGFyZ2UiCiAgICAgICAgdmlld0JveD0iMCAwIDEwIDEwIgogICAgICAgIG1hcmtlcldpZHRoPSIyMCIKICAgICAgICBtYXJrZXJIZWlnaHQ9IjIwIgogICAgICAgIHJlZlg9IjIiCiAgICAgICAgcmVmWT0iNSIKICAgICAgICBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIKICAgICAgICBtYXJrZXJVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgID4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNyZWZlcmVuY2UtYXJyb3doZWFkLXBhdGgiPjwvdXNlPgogICAgICA8L21hcmtlcj4KCiAgICAgIDwhLS0gQXJyb3cgaGVhZHMgZm9yIGRhdGFmbG93IGVkZ2UgcGF0aHMgb2YgZGlmZmVyZW50IHByZWRlZmluZWQgc2l6ZXMgcGVyIGNvbG9yLiAtLT4KICAgICAgPHBhdGgKICAgICAgICBpZD0iZGF0YWZsb3ctYXJyb3doZWFkLXBhdGgiCiAgICAgICAgZD0iTSAwLDAgTCAxMCw1IEwgMCwxMCBDIDMsNyAzLDMgMCwwIgogICAgICA+PC9wYXRoPgogICAgICA8bWFya2VyCiAgICAgICAgY2xhc3M9ImRhdGFmbG93LWFycm93aGVhZCIKICAgICAgICBpZD0iZGF0YWZsb3ctYXJyb3doZWFkLXNtYWxsIgogICAgICAgIHZpZXdCb3g9IjAgMCAxMCAxMCIKICAgICAgICBtYXJrZXJXaWR0aD0iNSIKICAgICAgICBtYXJrZXJIZWlnaHQ9IjUiCiAgICAgICAgcmVmWD0iMiIKICAgICAgICByZWZZPSI1IgogICAgICAgIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIgogICAgICAgIG1hcmtlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgPgogICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI2RhdGFmbG93LWFycm93aGVhZC1wYXRoIj48L3VzZT4KICAgICAgPC9tYXJrZXI+CiAgICAgIDxtYXJrZXIKICAgICAgICBjbGFzcz0iZGF0YWZsb3ctYXJyb3doZWFkIgogICAgICAgIGlkPSJkYXRhZmxvdy1hcnJvd2hlYWQtbWVkaXVtIgogICAgICAgIHZpZXdCb3g9IjAgMCAxMCAxMCIKICAgICAgICBtYXJrZXJXaWR0aD0iMTMiCiAgICAgICAgbWFya2VySGVpZ2h0PSIxMyIKICAgICAgICByZWZYPSIyIgogICAgICAgIHJlZlk9IjUiCiAgICAgICAgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiCiAgICAgICAgbWFya2VyVW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICA+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjZGF0YWZsb3ctYXJyb3doZWFkLXBhdGgiPjwvdXNlPgogICAgICA8L21hcmtlcj4KICAgICAgPG1hcmtlcgogICAgICAgIGNsYXNzPSJkYXRhZmxvdy1hcnJvd2hlYWQiCiAgICAgICAgaWQ9ImRhdGFmbG93LWFycm93aGVhZC1sYXJnZSIKICAgICAgICB2aWV3Qm94PSIwIDAgMTAgMTAiCiAgICAgICAgbWFya2VyV2lkdGg9IjE2IgogICAgICAgIG1hcmtlckhlaWdodD0iMTYiCiAgICAgICAgcmVmWD0iMiIKICAgICAgICByZWZZPSI1IgogICAgICAgIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIgogICAgICAgIG1hcmtlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgPgogICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI2RhdGFmbG93LWFycm93aGVhZC1wYXRoIj48L3VzZT4KICAgICAgPC9tYXJrZXI+CiAgICAgIDxtYXJrZXIKICAgICAgICBjbGFzcz0iZGF0YWZsb3ctYXJyb3doZWFkIgogICAgICAgIGlkPSJkYXRhZmxvdy1hcnJvd2hlYWQteGxhcmdlIgogICAgICAgIHZpZXdCb3g9IjAgMCAxMCAxMCIKICAgICAgICBtYXJrZXJXaWR0aD0iMjAiCiAgICAgICAgbWFya2VySGVpZ2h0PSIyMCIKICAgICAgICByZWZYPSIyIgogICAgICAgIHJlZlk9IjUiCiAgICAgICAgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiCiAgICAgICAgbWFya2VyVW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICA+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjZGF0YWZsb3ctYXJyb3doZWFkLXBhdGgiPjwvdXNlPgogICAgICA8L21hcmtlcj4KCiAgICAgIDwhLS0gQXJyb3cgaGVhZCBmb3IgYW5ub3RhdGlvbiBlZGdlIHBhdGhzLiAtLT4KICAgICAgPG1hcmtlcgogICAgICAgIGlkPSJhbm5vdGF0aW9uLWFycm93aGVhZCIKICAgICAgICBtYXJrZXJXaWR0aD0iNSIKICAgICAgICBtYXJrZXJIZWlnaHQ9IjUiCiAgICAgICAgcmVmWD0iNSIKICAgICAgICByZWZZPSIyLjUiCiAgICAgICAgb3JpZW50PSJhdXRvIgogICAgICA+CiAgICAgICAgPHBhdGggZD0iTSAwLDAgTCA1LDIuNSBMIDAsNSBMIDAsMCI+PC9wYXRoPgogICAgICA8L21hcmtlcj4KICAgICAgPG1hcmtlcgogICAgICAgIGlkPSJhbm5vdGF0aW9uLWFycm93aGVhZC1mYWRlZCIKICAgICAgICBtYXJrZXJXaWR0aD0iNSIKICAgICAgICBtYXJrZXJIZWlnaHQ9IjUiCiAgICAgICAgcmVmWD0iNSIKICAgICAgICByZWZZPSIyLjUiCiAgICAgICAgb3JpZW50PSJhdXRvIgogICAgICA+CiAgICAgICAgPHBhdGggZD0iTSAwLDAgTCA1LDIuNSBMIDAsNSBMIDAsMCI+PC9wYXRoPgogICAgICA8L21hcmtlcj4KICAgICAgPG1hcmtlcgogICAgICAgIGlkPSJyZWYtYW5ub3RhdGlvbi1hcnJvd2hlYWQiCiAgICAgICAgbWFya2VyV2lkdGg9IjUiCiAgICAgICAgbWFya2VySGVpZ2h0PSI1IgogICAgICAgIHJlZlg9IjAiCiAgICAgICAgcmVmWT0iMi41IgogICAgICAgIG9yaWVudD0iYXV0byIKICAgICAgPgogICAgICAgIDxwYXRoIGQ9Ik0gNSwwIEwgMCwyLjUgTCA1LDUgTCA1LDAiPjwvcGF0aD4KICAgICAgPC9tYXJrZXI+CiAgICAgIDxtYXJrZXIKICAgICAgICBpZD0icmVmLWFubm90YXRpb24tYXJyb3doZWFkLWZhZGVkIgogICAgICAgIG1hcmtlcldpZHRoPSI1IgogICAgICAgIG1hcmtlckhlaWdodD0iNSIKICAgICAgICByZWZYPSIwIgogICAgICAgIHJlZlk9IjIuNSIKICAgICAgICBvcmllbnQ9ImF1dG8iCiAgICAgID4KICAgICAgICA8cGF0aCBkPSJNIDUsMCBMIDAsMi41IEwgNSw1IEwgNSwwIj48L3BhdGg+CiAgICAgIDwvbWFya2VyPgogICAgICA8IS0tIFRlbXBsYXRlIGZvciBhbiBPcCBub2RlIGVsbGlwc2UuIC0tPgogICAgICA8ZWxsaXBzZQogICAgICAgIGlkPSJvcC1ub2RlLXN0YW1wIgogICAgICAgIHJ4PSI3LjUiCiAgICAgICAgcnk9IjMiCiAgICAgICAgc3Ryb2tlPSJpbmhlcml0IgogICAgICAgIGZpbGw9ImluaGVyaXQiCiAgICAgID48L2VsbGlwc2U+CiAgICAgIDwhLS0gVGVtcGxhdGUgZm9yIGFuIE9wIG5vZGUgYW5ub3RhdGlvbiBlbGxpcHNlIChzbWFsbGVyKS4gLS0+CiAgICAgIDxlbGxpcHNlCiAgICAgICAgaWQ9Im9wLW5vZGUtYW5ub3RhdGlvbi1zdGFtcCIKICAgICAgICByeD0iNSIKICAgICAgICByeT0iMiIKICAgICAgICBzdHJva2U9ImluaGVyaXQiCiAgICAgICAgZmlsbD0iaW5oZXJpdCIKICAgICAgPjwvZWxsaXBzZT4KICAgICAgPCEtLSBWZXJ0aWNhbGx5IHN0YWNrZWQgc2VyaWVzIG9mIE9wIG5vZGVzIHdoZW4gdW5leHBhbmRlZC4gLS0+CiAgICAgIDxnIGlkPSJvcC1zZXJpZXMtdmVydGljYWwtc3RhbXAiPgogICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtc3RhbXAiIHg9IjgiIHk9IjkiPjwvdXNlPgogICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtc3RhbXAiIHg9IjgiIHk9IjYiPjwvdXNlPgogICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtc3RhbXAiIHg9IjgiIHk9IjMiPjwvdXNlPgogICAgICA8L2c+CiAgICAgIDwhLS0gSG9yaXpvbnRhbGx5IHN0YWNrZWQgc2VyaWVzIG9mIE9wIG5vZGVzIHdoZW4gdW5leHBhbmRlZC4gLS0+CiAgICAgIDxnIGlkPSJvcC1zZXJpZXMtaG9yaXpvbnRhbC1zdGFtcCI+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iMTYiIHk9IjQiPjwvdXNlPgogICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtc3RhbXAiIHg9IjEyIiB5PSI0Ij48L3VzZT4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSI4IiB5PSI0Ij48L3VzZT4KICAgICAgPC9nPgogICAgICA8IS0tIEhvcml6b250YWxseSBzdGFja2VkIHNlcmllcyBvZiBPcCBub2RlcyBmb3IgYW5ub3RhdGlvbi4gLS0+CiAgICAgIDxnIGlkPSJvcC1zZXJpZXMtYW5ub3RhdGlvbi1zdGFtcCI+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1hbm5vdGF0aW9uLXN0YW1wIiB4PSI5IiB5PSIyIj48L3VzZT4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLWFubm90YXRpb24tc3RhbXAiIHg9IjciIHk9IjIiPjwvdXNlPgogICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtYW5ub3RhdGlvbi1zdGFtcCIgeD0iNSIgeT0iMiI+PC91c2U+CiAgICAgIDwvZz4KICAgICAgPHN2ZwogICAgICAgIGlkPSJzdW1tYXJ5LWljb24iCiAgICAgICAgZmlsbD0iIzg0ODQ4NCIKICAgICAgICBoZWlnaHQ9IjEyIgogICAgICAgIHZpZXdCb3g9IjAgMCAyNCAyNCIKICAgICAgICB3aWR0aD0iMTIiCiAgICAgID4KICAgICAgICA8cGF0aAogICAgICAgICAgZD0iTTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yek05IDE3SDd2LTdoMnY3em00IDBoLTJWN2gydjEwem00IDBoLTJ2LTRoMnY0eiIKICAgICAgICA+PC9wYXRoPgogICAgICA8L3N2Zz4KCiAgICAgIDwhLS0gSGF0Y2ggcGF0dGVybnMgZm9yIGZhZGVkIG91dCBub2Rlcy4gLS0+CiAgICAgIDxwYXR0ZXJuCiAgICAgICAgaWQ9InJlY3RIYXRjaCIKICAgICAgICBwYXR0ZXJuVHJhbnNmb3JtPSJyb3RhdGUoNDUgMCAwKSIKICAgICAgICB3aWR0aD0iNSIKICAgICAgICBoZWlnaHQ9IjUiCiAgICAgICAgcGF0dGVyblVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgPgogICAgICAgIDxsaW5lIHgxPSIwIiB5MT0iMCIgeDI9IjAiIHkyPSI1IiBzdHlsZT0ic3Ryb2tlLXdpZHRoOiAxIj48L2xpbmU+CiAgICAgIDwvcGF0dGVybj4KICAgICAgPHBhdHRlcm4KICAgICAgICBpZD0iZWxsaXBzZUhhdGNoIgogICAgICAgIHBhdHRlcm5UcmFuc2Zvcm09InJvdGF0ZSg0NSAwIDApIgogICAgICAgIHdpZHRoPSIyIgogICAgICAgIGhlaWdodD0iMiIKICAgICAgICBwYXR0ZXJuVW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICA+CiAgICAgICAgPGxpbmUgeDE9IjAiIHkxPSIwIiB4Mj0iMCIgeTI9IjIiIHN0eWxlPSJzdHJva2Utd2lkdGg6IDEiPjwvbGluZT4KICAgICAgPC9wYXR0ZXJuPgoKICAgICAgPCEtLSBBIHNoYWRvdyBmb3IgaGVhbHRoIHBpbGxzLiAtLT4KICAgICAgPGZpbHRlcgogICAgICAgIGlkPSJoZWFsdGgtcGlsbC1zaGFkb3ciCiAgICAgICAgeD0iLTQwJSIKICAgICAgICB5PSItNDAlIgogICAgICAgIHdpZHRoPSIxODAlIgogICAgICAgIGhlaWdodD0iMTgwJSIKICAgICAgPgogICAgICAgIDxmZUdhdXNzaWFuQmx1ciBpbj0iU291cmNlQWxwaGEiIHN0ZERldmlhdGlvbj0iMC44Ij48L2ZlR2F1c3NpYW5CbHVyPgogICAgICAgIDxmZU9mZnNldCBkeD0iMCIgZHk9IjAiIHJlc3VsdD0ib2Zmc2V0Ymx1ciI+PC9mZU9mZnNldD4KICAgICAgICA8ZmVGbG9vZCBmbG9vZC1jb2xvcj0iIzAwMDAwMCI+PC9mZUZsb29kPgogICAgICAgIDxmZUNvbXBvc2l0ZSBpbjI9Im9mZnNldGJsdXIiIG9wZXJhdG9yPSJpbiI+PC9mZUNvbXBvc2l0ZT4KICAgICAgICA8ZmVNZXJnZT4KICAgICAgICAgIDxmZU1lcmdlTm9kZT48L2ZlTWVyZ2VOb2RlPgogICAgICAgICAgPGZlTWVyZ2VOb2RlIGluPSJTb3VyY2VHcmFwaGljIj48L2ZlTWVyZ2VOb2RlPgogICAgICAgIDwvZmVNZXJnZT4KICAgICAgPC9maWx0ZXI+CiAgICA8L2RlZnM+CiAgICA8IS0tIE1ha2UgYSBsYXJnZSByZWN0YW5nbGUgdGhhdCBmaWxscyB0aGUgc3ZnIHNwYWNlIHNvIHRoYXQKICB6b29tIGV2ZW50cyBnZXQgY2FwdHVyZWQgb24gc2FmYXJpIC0tPgogICAgPHJlY3QgZmlsbD0id2hpdGUiIHdpZHRoPSIxMDAwMCIgaGVpZ2h0PSIxMDAwMCI+PC9yZWN0PgogICAgPGcgaWQ9InJvb3QiPjwvZz4KICA8L3N2Zz4KICA8dGYtZ3JhcGgtbWluaW1hcCBpZD0ibWluaW1hcCI+PC90Zi1ncmFwaC1taW5pbWFwPgogIDxkaXYgaWQ9ImNvbnRleHRNZW51IiBjbGFzcz0iY29udGV4dC1tZW51Ij48L2Rpdj4KYDtsZXQgQUx0PWNsYXNzIGV4dGVuZHModHIobmwoeWUpKSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3pvb21lZD0hMSx0aGlzLl96b29tU3RhcnRDb29yZHM9bnVsbCx0aGlzLl96b29tVHJhbnNmb3JtPW51bGwsdGhpcy5fbWF4Wm9vbURpc3RhbmNlRm9yQ2xpY2s9MjAsdGhpcy5fbm9kZUdyb3VwSW5kZXg9e30sdGhpcy5fYW5ub3RhdGlvbkdyb3VwSW5kZXg9e30sdGhpcy5fZWRnZUdyb3VwSW5kZXg9e30sdGhpcy5tYXhNZXRhbm9kZUxhYmVsTGVuZ3RoRm9udFNpemU9OSx0aGlzLm1pbk1ldGFub2RlTGFiZWxMZW5ndGhGb250U2l6ZT02LHRoaXMubWF4TWV0YW5vZGVMYWJlbExlbmd0aExhcmdlRm9udD0xMSx0aGlzLm1heE1ldGFub2RlTGFiZWxMZW5ndGg9MTh9Z2V0Tm9kZSh0KXtyZXR1cm4gdGhpcy5yZW5kZXJIaWVyYXJjaHkuZ2V0UmVuZGVyTm9kZUJ5TmFtZSh0KX1pc05vZGVFeHBhbmRlZCh0KXtyZXR1cm4gdC5leHBhbmRlZH1zZXROb2RlRXhwYW5kZWQodCl7dGhpcy5fYnVpbGQodGhpcy5yZW5kZXJIaWVyYXJjaHkpLHRoaXMuX3VwZGF0ZUxhYmVscyghdGhpcy5fem9vbWVkKX1wYW5Ub05vZGUodCl7KGZ1bmN0aW9uIGUodCxuLGkscil7Y29uc3Qgbz13dShuKS5zZWxlY3QoYFtkYXRhLW5hbWU9IiR7dH0iXWApLm5vZGUoKTtpZighbylyZXR1cm4gY29uc29sZS53YXJuKGBwYW5Ub05vZGUoKSBmYWlsZWQgZm9yIG5vZGUgbmFtZSAiJHt0fSJgKSwhMTtsZXQgYT1vLmdldEJCb3goKSxzPW8uZ2V0U2NyZWVuQ1RNKCksbD1uLmNyZWF0ZVNWR1BvaW50KCksYz1uLmNyZWF0ZVNWR1BvaW50KCk7bC54PWEueCxsLnk9YS55LGMueD1hLngrYS53aWR0aCxjLnk9YS55K2EuaGVpZ2h0LGw9bC5tYXRyaXhUcmFuc2Zvcm0ocyksYz1jLm1hdHJpeFRyYW5zZm9ybShzKTtsZXQgdT0odCxlLG4saSk9PiEodD5uJiZlPGkpLGg9bi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtjb25zdCBkPWgudG9wK2guaGVpZ2h0LTE1MDtpZih1KGwueCxjLngsaC5sZWZ0LGgubGVmdCtoLndpZHRoLTMyMCl8fHUobC55LGMueSxoLnRvcCxkKSl7bGV0IHQ9aC5sZWZ0K2gud2lkdGgvMi0obC54K2MueCkvMixlPWgudG9wK2guaGVpZ2h0LzItKGwueStjLnkpLzI7Y29uc3QgaT1yTihuKTtyZXR1cm4gd3UobikudHJhbnNpdGlvbigpLmR1cmF0aW9uKDUwMCkuY2FsbChyLnRyYW5zbGF0ZUJ5LHQvaS5rLGUvaS5rKSwhMH1yZXR1cm4hMX0pKHQsdGhpcy4kLnN2ZywwLHRoaXMuX3pvb20pJiYodGhpcy5fem9vbWVkPSEwKX1nZXRHcmFwaFN2Z1Jvb3QoKXtyZXR1cm4gdGhpcy4kLnN2Z31nZXRDb250ZXh0TWVudSgpe3JldHVybiB0aGlzLiQuY29udGV4dE1lbnV9X3Jlc2V0U3RhdGUoKXt0aGlzLl9ub2RlR3JvdXBJbmRleD17fSx0aGlzLl9hbm5vdGF0aW9uR3JvdXBJbmRleD17fSx0aGlzLl9lZGdlR3JvdXBJbmRleD17fSx0aGlzLl91cGRhdGVMYWJlbHMoITEpLHd1KHRoaXMuJC5zdmcpLnNlbGVjdCgiI3Jvb3QiKS5zZWxlY3RBbGwoIioiKS5yZW1vdmUoKSxLa3QodGhpcy4kLnN2Zyl9X2J1aWxkKHQpe3RoaXMudGVtcGxhdGVJbmRleD10LmhpZXJhcmNoeS5nZXRUZW1wbGF0ZUluZGV4KCksaUF0KCJ0Zi1ncmFwaC1zY2VuZSAobGF5b3V0KToiLGZ1bmN0aW9uKCl7dWt0KHQucm9vdCl9LmJpbmQodGhpcyksWUN0LlJFTkRFUl9TQ0VORV9MQVlPVVQpLGlBdCgidGYtZ3JhcGgtc2NlbmUgKGJ1aWxkIHNjZW5lKToiLGZ1bmN0aW9uKCl7YUx0KHd1KHRoaXMuJC5yb290KSx0LnJvb3QsdGhpcyksKGZ1bmN0aW9uIGUodCxuKXt3dSh0KS5vbigiY2xpY2siLCgoKT0+e24uZmlyZSgiZ3JhcGgtc2VsZWN0Iil9KSl9KSh0aGlzLiQuc3ZnLHRoaXMpLHRoaXMuX3VwZGF0ZUlucHV0VHJhY2UoKX0uYmluZCh0aGlzKSxZQ3QuUkVOREVSX1NDRU5FX0JVSUxEX1NDRU5FKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlSGVhbHRoUGlsbHModGhpcy5ub2RlTmFtZXNUb0hlYWx0aFBpbGxzLHRoaXMuaGVhbHRoUGlsbFN0ZXBJbmRleCksdGhpcy5taW5pbWFwLnVwZGF0ZSgpfS5iaW5kKHRoaXMpLGxrdC5hbmltYXRpb24uZHVyYXRpb24pfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLl96b29tPXBOKCkub24oImVuZCIsZnVuY3Rpb24oKXt0aGlzLl96b29tU3RhcnRDb29yZHMmJihNYXRoLnNxcnQoTWF0aC5wb3codGhpcy5fem9vbVN0YXJ0Q29vcmRzLngtdGhpcy5fem9vbVRyYW5zZm9ybS54LDIpK01hdGgucG93KHRoaXMuX3pvb21TdGFydENvb3Jkcy55LXRoaXMuX3pvb21UcmFuc2Zvcm0ueSwyKSk8dGhpcy5fbWF4Wm9vbURpc3RhbmNlRm9yQ2xpY2s/dGhpcy5fZmlyZUVuYWJsZUNsaWNrKCk6c2V0VGltZW91dCh0aGlzLl9maXJlRW5hYmxlQ2xpY2suYmluZCh0aGlzKSw1MCkpLHRoaXMuX3pvb21TdGFydENvb3Jkcz1udWxsfS5iaW5kKHRoaXMpKS5vbigiem9vbSIsZnVuY3Rpb24oKXt0aGlzLl96b29tVHJhbnNmb3JtPWN1LnRyYW5zZm9ybSx0aGlzLl96b29tU3RhcnRDb29yZHN8fCh0aGlzLl96b29tU3RhcnRDb29yZHM9dGhpcy5fem9vbVRyYW5zZm9ybSx0aGlzLmZpcmUoImRpc2FibGUtY2xpY2siKSksdGhpcy5fem9vbWVkPSEwLHd1KHRoaXMuJC5yb290KS5hdHRyKCJ0cmFuc2Zvcm0iLGN1LnRyYW5zZm9ybSksdGhpcy5taW5pbWFwLnpvb20oY3UudHJhbnNmb3JtKX0uYmluZCh0aGlzKSksd3UodGhpcy4kLnN2ZykuY2FsbCh0aGlzLl96b29tKS5vbigiZGJsY2xpY2suem9vbSIsbnVsbCksd3Uod2luZG93KS5vbigicmVzaXplIixmdW5jdGlvbigpe3RoaXMubWluaW1hcC56b29tKCl9LmJpbmQodGhpcykpLHRoaXMubWluaW1hcD10aGlzLiQubWluaW1hcC5pbml0KHRoaXMuJC5zdmcsdGhpcy4kLnJvb3QsdGhpcy5fem9vbSxsa3QubWluaW1hcC5zaXplLGxrdC5zdWJzY2VuZS5tZXRhLmxhYmVsSGVpZ2h0KX1hdHRhY2hlZCgpe3RoaXMuc2V0KCJfaXNBdHRhY2hlZCIsITApfWRldGFjaGVkKCl7dGhpcy5zZXQoIl9pc0F0dGFjaGVkIiwhMSl9X3JlbmRlckhpZXJhcmNoeUNoYW5nZWQoKXt2YXIgdD10aGlzLnJlbmRlckhpZXJhcmNoeTt0aGlzLl9oYXNSZW5kZXJIaWVyYXJjaHlCZWVuRml0T25jZT0hMSx0aGlzLl9yZXNldFN0YXRlKCksdGhpcy5fYnVpbGQodCl9X2FuaW1hdGVBbmRGaXQoKXshdGhpcy5faGFzUmVuZGVySGllcmFyY2h5QmVlbkZpdE9uY2UmJnRoaXMuX2lzQXR0YWNoZWQmJnNldFRpbWVvdXQodGhpcy5maXQuYmluZCh0aGlzKSxsa3QuYW5pbWF0aW9uLmR1cmF0aW9uKX1fdXBkYXRlTGFiZWxzKHQpe3ZhciBlPXRoaXMuJCQoIi50aXRsZSIpLG49ZS5zdHlsZSxpPXRoaXMuJCQoIi5hdXhUaXRsZSIpLHI9aS5zdHlsZSxvPXRoaXMuJCQoIi5mdW5jdGlvbkxpYnJhcnlUaXRsZSIpLnN0eWxlO2NvbnN0IGE9d3UodGhpcy4kLnN2Zyk7dmFyIHM9YS5zZWxlY3QoIi4iK19rdC5TY2VuZS5HUk9VUCsiPi4iK19rdC5TY2VuZS5DT1JFKS5ub2RlKCk7aWYodCYmcyYmdGhpcy5wcm9ncmVzcyYmMTAwPT09dGhpcy5wcm9ncmVzcy52YWx1ZSl7dmFyIGw9YS5zZWxlY3QoIi4iK19rdC5TY2VuZS5HUk9VUCsiPi4iK19rdC5TY2VuZS5JTkVYVFJBQ1QpLm5vZGUoKXx8YS5zZWxlY3QoIi4iK19rdC5TY2VuZS5HUk9VUCsiPi4iK19rdC5TY2VuZS5PVVRFWFRSQUNUKS5ub2RlKCksYz1zLmdldENUTSgpLmUsdT1sP2wuZ2V0Q1RNKCkuZTpudWxsO24uZGlzcGxheT0iaW5saW5lIixuLmxlZnQ9YysicHgiLG51bGwhPT11JiZ1IT09Yz8oci5kaXNwbGF5PSJpbmxpbmUiLHU9TWF0aC5tYXgoYytlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoLHUpLHIubGVmdD11KyJweCIpOnIuZGlzcGxheT0ibm9uZSI7bGV0IHQ9YS5zZWxlY3QoIi4iK19rdC5TY2VuZS5HUk9VUCsiPi4iK19rdC5TY2VuZS5GVU5DVElPTl9MSUJSQVJZKS5ub2RlKCksaD10P3QuZ2V0Q1RNKCkuZTpudWxsO251bGwhPT1oJiZoIT09dT8oby5kaXNwbGF5PSJpbmxpbmUiLGg9TWF0aC5tYXgodStpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoLGgpLG8ubGVmdD1oKyJweCIpOm8uZGlzcGxheT0ibm9uZSJ9ZWxzZSBuLmRpc3BsYXk9Im5vbmUiLHIuZGlzcGxheT0ibm9uZSIsby5kaXNwbGF5PSJub25lIn1ub2RlQ29sb3JzQ2hhbmdlZCgpe251bGwhPXRoaXMucmVuZGVySGllcmFyY2h5JiYodGhpcy50ZW1wbGF0ZUluZGV4PXRoaXMucmVuZGVySGllcmFyY2h5LmhpZXJhcmNoeS5nZXRUZW1wbGF0ZUluZGV4KCksd2UuZWFjaCh0aGlzLl9ub2RlR3JvdXBJbmRleCwoKHQsZSk9Pnt0aGlzLl91cGRhdGVOb2RlU3RhdGUoZSl9KSksdGhpcy5taW5pbWFwLnVwZGF0ZSgpKX1maXQoKXt0aGlzLl9oYXNSZW5kZXJIaWVyYXJjaHlCZWVuRml0T25jZT0hMCwoZnVuY3Rpb24gdChlLG4saSxyKXtsZXQgbz1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGE9bnVsbDt0cnl7aWYoYT1uLmdldEJCb3goKSwwPT09YS53aWR0aClyZXR1cm59Y2F0Y2godCl7cmV0dXJufWxldCBzPS45Kk1hdGgubWluKG8ud2lkdGgvYS53aWR0aCxvLmhlaWdodC9hLmhlaWdodCwyKSxsPWxrdC5ncmFwaDtjb25zdCBjPWlOLnNjYWxlKHMpLnRyYW5zbGF0ZShsLnBhZGRpbmcucGFkZGluZ0xlZnQsbC5wYWRkaW5nLnBhZGRpbmdUb3ApO3d1KGUpLnRyYW5zaXRpb24oKS5kdXJhdGlvbig1MDApLmNhbGwoaS50cmFuc2Zvcm0sYykub24oImVuZC5maXR0ZWQiLCgoKT0+e2kub24oImVuZC5maXR0ZWQiLG51bGwpLHIoKX0pKX0pKHRoaXMuJC5zdmcsdGhpcy4kLnJvb3QsdGhpcy5fem9vbSxmdW5jdGlvbigpe3RoaXMuX3pvb21lZD0hMX0uYmluZCh0aGlzKSl9Z2V0SW1hZ2VCbG9iKCl7cmV0dXJuIHRoaXMubWluaW1hcC5nZXRJbWFnZUJsb2IoKX1pc05vZGVTZWxlY3RlZCh0KXtyZXR1cm4gdD09PXRoaXMuc2VsZWN0ZWROb2RlfWlzTm9kZUhpZ2hsaWdodGVkKHQpe3JldHVybiB0PT09dGhpcy5oaWdobGlnaHRlZE5vZGV9YWRkQW5ub3RhdGlvbkdyb3VwKHQsZSxuKXt2YXIgaT10Lm5vZGUubmFtZTt0aGlzLl9hbm5vdGF0aW9uR3JvdXBJbmRleFtpXT10aGlzLl9hbm5vdGF0aW9uR3JvdXBJbmRleFtpXXx8e30sdGhpcy5fYW5ub3RhdGlvbkdyb3VwSW5kZXhbaV1bZS5ub2RlLm5hbWVdPW59Z2V0QW5ub3RhdGlvbkdyb3Vwc0luZGV4KHQpe3JldHVybiB0aGlzLl9hbm5vdGF0aW9uR3JvdXBJbmRleFt0XX1yZW1vdmVBbm5vdGF0aW9uR3JvdXAodCxlKXtkZWxldGUgdGhpcy5fYW5ub3RhdGlvbkdyb3VwSW5kZXhbdC5ub2RlLm5hbWVdW2Uubm9kZS5uYW1lXX1hZGROb2RlR3JvdXAodCxlKXt0aGlzLl9ub2RlR3JvdXBJbmRleFt0XT1lfWdldE5vZGVHcm91cCh0KXtyZXR1cm4gdGhpcy5fbm9kZUdyb3VwSW5kZXhbdF19cmVtb3ZlTm9kZUdyb3VwKHQpe2RlbGV0ZSB0aGlzLl9ub2RlR3JvdXBJbmRleFt0XX1hZGRFZGdlR3JvdXAodCxlKXt0aGlzLl9lZGdlR3JvdXBJbmRleFt0XT1lfWdldEVkZ2VHcm91cCh0KXtyZXR1cm4gdGhpcy5fZWRnZUdyb3VwSW5kZXhbdF19X3VwZGF0ZUhlYWx0aFBpbGxzKCl7IShmdW5jdGlvbiB0KGUsbixpKXtpZighbilyZXR1cm47bGV0IHI9MTt3dShlKS5zZWxlY3RBbGwoImcubm9kZXNoYXBlIikuZWFjaCgoZnVuY3Rpb24odCl7Y29uc3QgZT1uW3Qubm9kZS5uYW1lXTshKGZ1bmN0aW9uIG8odCxlLG4saSxyPTYwLGE9MTAscz0wLGwpe2lmKHd1KHQucGFyZW50Tm9kZSkuc2VsZWN0QWxsKCIuaGVhbHRoLXBpbGwiKS5yZW1vdmUoKSwhZSlyZXR1cm47Y29uc3QgYz1lLnZhbHVlLHU9Yy5zbGljZSgyLDgpLGg9dVswXSxkPXVbMV0scD11WzVdO2xldCBmPWNbMV07Y29uc3QgbT17bWluOmNbOF0sbWF4OmNbOV0sbWVhbjpjWzEwXSxzdGRkZXY6TWF0aC5zcXJ0KGNbMTFdKX07bnVsbD09ciYmKHI9NjApLG51bGw9PWEmJihhPTEwKSxudWxsPT1zJiYocz0wKSxudWxsIT1uJiZuLm5vZGUudHlwZT09PXZBdC5PUCYmKHIvPTIsYS89Mik7bGV0IGc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKEtDdCwiZyIpO2cuY2xhc3NMaXN0LmFkZCgiaGVhbHRoLXBpbGwiKTtsZXQgXz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoS0N0LCJkZWZzIik7Zy5hcHBlbmRDaGlsZChfKTtsZXQgeT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoS0N0LCJsaW5lYXJHcmFkaWVudCIpO2NvbnN0IHY9ImhlYWx0aC1waWxsLWdyYWRpZW50LSIraTt5LnNldEF0dHJpYnV0ZSgiaWQiLHYpO2xldCBiPTAseD0iMCUiO2ZvcihsZXQgdD0wO3Q8dS5sZW5ndGg7dCsrKXtpZighdVt0XSljb250aW51ZTtiKz11W3RdO2xldCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhLQ3QsInN0b3AiKTtlLnNldEF0dHJpYnV0ZSgib2Zmc2V0Iix4KSxlLnNldEF0dHJpYnV0ZSgic3RvcC1jb2xvciIseWt0W3RdLmJhY2tncm91bmRfY29sb3IpLHkuYXBwZW5kQ2hpbGQoZSk7bGV0IG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKEtDdCwic3RvcCIpLGk9MTAwKmIvZisiJSI7bi5zZXRBdHRyaWJ1dGUoIm9mZnNldCIsaSksbi5zZXRBdHRyaWJ1dGUoInN0b3AtY29sb3IiLHlrdFt0XS5iYWNrZ3JvdW5kX2NvbG9yKSx5LmFwcGVuZENoaWxkKG4pLHg9aX1fLmFwcGVuZENoaWxkKHkpO2xldCB3PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhLQ3QsInJlY3QiKTt3LnNldEF0dHJpYnV0ZSgiZmlsbCIsInVybCgjIit2KyIpIiksdy5zZXRBdHRyaWJ1dGUoIndpZHRoIixTdHJpbmcocikpLHcuc2V0QXR0cmlidXRlKCJoZWlnaHQiLFN0cmluZyhhKSksdy5zZXRBdHRyaWJ1dGUoInkiLFN0cmluZyhzKSksZy5hcHBlbmRDaGlsZCh3KTtsZXQgUz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoS0N0LCJ0aXRsZSIpO1MudGV4dENvbnRlbnQ9KGZ1bmN0aW9uIE0odCxlLG4saSl7bGV0IHI9IkRldmljZTogIit0LmRldmljZV9uYW1lKyJcbiI7cis9ImR0eXBlOiAiK3QuZHR5cGUrIlxuIjtsZXQgbz0iKHNjYWxhcikiO3Quc2hhcGUubGVuZ3RoPjAmJihvPSIoIit0LnNoYXBlLmpvaW4oIiwiKSsiKSIpLHIrPSJcbnNoYXBlOiAiK28rIlxuXG4iLHIrPSIjKGVsZW1lbnRzKTogIitlKyJcbiI7Y29uc3QgYT1bXTtmb3IobGV0IHQ9MDt0PG4ubGVuZ3RoO3QrKyluW3RdPjAmJmEucHVzaCgiIygiK3lrdFt0XS5sYWJlbCsiKTogIituW3RdKTtyZXR1cm4gcis9YS5qb2luKCIsICIpKyJcblxuIixpLm1heD49aS5taW4mJihyKz0ibWluOiAiK2kubWluKyIsIG1heDogIitpLm1heCsiXG4iLHIrPSJtZWFuOiAiK2kubWVhbisiLCBzdGRkZXY6ICIraS5zdGRkZXYpLHJ9KShlLGYsdSxtKSxnLmFwcGVuZENoaWxkKFMpO2xldCBFPSExO2lmKG51bGwhPW4pe2xldCB0PW4ueS1hLW4uaGVpZ2h0LzItMjtpZihuLmxhYmVsT2Zmc2V0PDAmJih0Kz1uLmxhYmVsT2Zmc2V0KSxnLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKG4ueC1yLzIpKyIsICIrdCsiKSIpLHVbMl18fHVbM118fHVbNF0pe2xldCB0PW4ubm9kZS5hdHRyO2lmKHQmJnQubGVuZ3RoKWZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKWlmKCJUIj09PXRbZV0ua2V5KXtsZXQgbj10W2VdLnZhbHVlLnR5cGU7RT1uJiYvXkRUXyhCT09MfElOVHxVSU5UKS8udGVzdChuKTticmVha319fWxldCBUPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhLQ3QsInRleHQiKTtpZihOdW1iZXIuaXNGaW5pdGUobS5taW4pJiZOdW1iZXIuaXNGaW5pdGUobS5tYXgpKXtjb25zdCB0PXdrdChtLm1pbixFKSxlPXdrdChtLm1heCxFKTtpZihULnRleHRDb250ZW50PWY+MT90KyIgfiAiK2U6dCxoPjB8fGQ+MHx8cD4wKXtULnRleHRDb250ZW50Kz0iICgiO2NvbnN0IHQ9W107aD4wJiZ0LnB1c2goYE5hTsOXJHtofWApLGQ+MCYmdC5wdXNoKGAt4oiew5cke2R9YCkscD4wJiZ0LnB1c2goYCviiJ7DlyR7cH1gKSxULnRleHRDb250ZW50Kz10LmpvaW4oIjsgIikrIikifX1lbHNlIFQudGV4dENvbnRlbnQ9IihObyBmaW5pdGUgZWxlbWVudHMpIjtULmNsYXNzTGlzdC5hZGQoImhlYWx0aC1waWxsLXN0YXRzIiksbnVsbD09bCYmKGw9ci8yKSxULnNldEF0dHJpYnV0ZSgieCIsU3RyaW5nKGwpKSxULnNldEF0dHJpYnV0ZSgieSIsU3RyaW5nKHMtMikpLGcuYXBwZW5kQ2hpbGQoVCkscWkodC5wYXJlbnROb2RlKS5hcHBlbmRDaGlsZChnKX0pKHRoaXMsZT9lW2ldOm51bGwsdCxyKyspfSkpfSkodGhpcy4kLnN2Zyx0aGlzLm5vZGVOYW1lc1RvSGVhbHRoUGlsbHMsdGhpcy5oZWFsdGhQaWxsU3RlcEluZGV4KX1fdXBkYXRlTm9kZVN0YXRlKHQpe3ZhciBlPXRoaXMuZ2V0Tm9kZSh0KSxuPXRoaXMuZ2V0Tm9kZUdyb3VwKHQpO24mJkprdChuLGUsdGhpcyksZS5ub2RlLnR5cGU9PT12QXQuTUVUQSYmZS5ub2RlLmFzc29jaWF0ZWRGdW5jdGlvbiYmIWUuaXNMaWJyYXJ5RnVuY3Rpb24mJkprdCh3dSgiLiIrX2t0LlNjZW5lLkdST1VQKyI+LiIrX2t0LlNjZW5lLkZVTkNUSU9OX0xJQlJBUlkrJyBnW2RhdGEtbmFtZT0iJysoX0F0K2Uubm9kZS5hc3NvY2lhdGVkRnVuY3Rpb24pKyciXScpLGUsdGhpcyk7dmFyIGk9dGhpcy5nZXRBbm5vdGF0aW9uR3JvdXBzSW5kZXgodCk7d2UuZWFjaChpLCgodCxuKT0+e0prdCh0LGUsdGhpcyxfa3QuQW5ub3RhdGlvbi5OT0RFKX0pKX1fc2VsZWN0ZWROb2RlQ2hhbmdlZCh0LGUpe2lmKHQhPT1lJiYoZSYmdGhpcy5fdXBkYXRlTm9kZVN0YXRlKGUpLHQpKXt0aGlzLm1pbmltYXAudXBkYXRlKCk7Zm9yKHZhciBuLGk9dGhpcy5yZW5kZXJIaWVyYXJjaHkuaGllcmFyY2h5Lm5vZGUodCkscj1bXTtudWxsIT1pLnBhcmVudE5vZGUmJmkucGFyZW50Tm9kZS5uYW1lIT1nQXQ7KXIucHVzaCgoaT1pLnBhcmVudE5vZGUpLm5hbWUpO3dlLmZvckVhY2hSaWdodChyLCh0PT57dGhpcy5yZW5kZXJIaWVyYXJjaHkuYnVpbGRTdWJoaWVyYXJjaHkodCk7dmFyIGU9dGhpcy5yZW5kZXJIaWVyYXJjaHkuZ2V0UmVuZGVyTm9kZUJ5TmFtZSh0KTtlLm5vZGUuaXNHcm91cE5vZGUmJiFlLmV4cGFuZGVkJiYoZS5leHBhbmRlZD0hMCxufHwobj1lKSl9KSksbiYmKHRoaXMuc2V0Tm9kZUV4cGFuZGVkKG4pLHRoaXMuX3pvb21lZD0hMCksdCYmdGhpcy5fdXBkYXRlTm9kZVN0YXRlKHQpLHNldFRpbWVvdXQoKCgpPT57dGhpcy5wYW5Ub05vZGUodCl9KSxsa3QuYW5pbWF0aW9uLmR1cmF0aW9uKX19X2hpZ2hsaWdodGVkTm9kZUNoYW5nZWQodCxlKXt0IT09ZSYmKHQmJnRoaXMuX3VwZGF0ZU5vZGVTdGF0ZSh0KSxlJiZ0aGlzLl91cGRhdGVOb2RlU3RhdGUoZSkpfV9vblpvb21DaGFuZ2VkKCl7dGhpcy5fdXBkYXRlTGFiZWxzKCF0aGlzLl96b29tZWQpfV9maXJlRW5hYmxlQ2xpY2soKXt0aGlzLmZpcmUoImVuYWJsZS1jbGljayIpfV91cGRhdGVJbnB1dFRyYWNlKCl7dEx0KHRoaXMuZ2V0R3JhcGhTdmdSb290KCksdGhpcy5yZW5kZXJIaWVyYXJjaHksdGhpcy5zZWxlY3RlZE5vZGUsdGhpcy50cmFjZUlucHV0cyl9fTtBTHQudGVtcGxhdGU9Q0x0LHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLFhBdCldLEFMdC5wcm90b3R5cGUsInJlbmRlckhpZXJhcmNoeSIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxBTHQucHJvdG90eXBlLCJuYW1lIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLEFMdC5wcm90b3R5cGUsImNvbG9yQnkiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxBTHQucHJvdG90eXBlLCJ0cmFjZUlucHV0cyIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEFMdC5wcm90b3R5cGUsIl9oYXNSZW5kZXJIaWVyYXJjaHlCZWVuRml0T25jZSIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEFMdC5wcm90b3R5cGUsIl9pc0F0dGFjaGVkIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLEFMdC5wcm90b3R5cGUsIl96b29tIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfaGlnaGxpZ2h0ZWROb2RlQ2hhbmdlZCJ9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sQUx0LnByb3RvdHlwZSwiaGlnaGxpZ2h0ZWROb2RlIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfc2VsZWN0ZWROb2RlQ2hhbmdlZCJ9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sQUx0LnByb3RvdHlwZSwic2VsZWN0ZWROb2RlIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLEFMdC5wcm90b3R5cGUsImhhbmRsZUVkZ2VTZWxlY3RlZCIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW4sb2JzZXJ2ZXI6Il9vblpvb21DaGFuZ2VkIn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sQUx0LnByb3RvdHlwZSwiX3pvb21lZCIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxBTHQucHJvdG90eXBlLCJfem9vbVN0YXJ0Q29vcmRzIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLEFMdC5wcm90b3R5cGUsIl96b29tVHJhbnNmb3JtIix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLEFMdC5wcm90b3R5cGUsIl9tYXhab29tRGlzdGFuY2VGb3JDbGljayIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLEFMdC5wcm90b3R5cGUsInRlbXBsYXRlSW5kZXgiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sQUx0LnByb3RvdHlwZSwiX25vZGVHcm91cEluZGV4Iix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLEFMdC5wcm90b3R5cGUsIl9hbm5vdGF0aW9uR3JvdXBJbmRleCIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxBTHQucHJvdG90eXBlLCJfZWRnZUdyb3VwSW5kZXgiLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXJ9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sQUx0LnByb3RvdHlwZSwibWF4TWV0YW5vZGVMYWJlbExlbmd0aEZvbnRTaXplIix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLEFMdC5wcm90b3R5cGUsIm1pbk1ldGFub2RlTGFiZWxMZW5ndGhGb250U2l6ZSIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxBTHQucHJvdG90eXBlLCJtYXhNZXRhbm9kZUxhYmVsTGVuZ3RoTGFyZ2VGb250Iix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLEFMdC5wcm90b3R5cGUsIm1heE1ldGFub2RlTGFiZWxMZW5ndGgiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sQUx0LnByb3RvdHlwZSwicHJvZ3Jlc3MiLHZvaWQgMCksdChbbyh7dHlwZTpBcnJheX0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLEFMdC5wcm90b3R5cGUsIm5vZGVDb250ZXh0TWVudUl0ZW1zIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLEFMdC5wcm90b3R5cGUsIm5vZGVOYW1lc1RvSGVhbHRoUGlsbHMiLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXJ9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sQUx0LnByb3RvdHlwZSwiaGVhbHRoUGlsbFN0ZXBJbmRleCIsdm9pZCAwKSx0KFthKCJyZW5kZXJIaWVyYXJjaHkiKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEFMdC5wcm90b3R5cGUsIl9yZW5kZXJIaWVyYXJjaHlDaGFuZ2VkIixudWxsKSx0KFthKCJfaXNBdHRhY2hlZCIsInJlbmRlckhpZXJhcmNoeSIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sQUx0LnByb3RvdHlwZSwiX2FuaW1hdGVBbmRGaXQiLG51bGwpLHQoW2EoImNvbG9yQnkiKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEFMdC5wcm90b3R5cGUsIm5vZGVDb2xvcnNDaGFuZ2VkIixudWxsKSx0KFthKCJub2RlTmFtZXNUb0hlYWx0aFBpbGxzIiwiaGVhbHRoUGlsbFN0ZXBJbmRleCIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sQUx0LnByb3RvdHlwZSwiX3VwZGF0ZUhlYWx0aFBpbGxzIixudWxsKSx0KFthKCJ0cmFjZUlucHV0cyIsInNlbGVjdGVkTm9kZSIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sQUx0LnByb3RvdHlwZSwiX3VwZGF0ZUlucHV0VHJhY2UiLG51bGwpLEFMdD10KFtpKCJ0Zi1ncmFwaC1zY2VuZSIpXSxBTHQpO2xldCBrTHQ9Y2xhc3MgZXh0ZW5kcyh0cih5ZSkpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJEZXB0aD0xLHRoaXMuX2FsbG93R3JhcGhTZWxlY3Q9ITAsdGhpcy5lZGdlV2lkdGhGdW5jdGlvbj0iIix0aGlzLmhhbmRsZU5vZGVTZWxlY3RlZD0iIix0aGlzLmVkZ2VMYWJlbEZ1bmN0aW9uPSIiLHRoaXMuaGFuZGxlRWRnZVNlbGVjdGVkPSIifXBhblRvTm9kZSh0KXt0aGlzLiQkKCJ0Zi1ncmFwaC1zY2VuZSIpLnBhblRvTm9kZSh0KX1fYXV0b0V4dHJhY3ROb2Rlc0NoYW5nZWQoKXt2YXIgdD10aGlzLmdyYXBoSGllcmFyY2h5O2lmKHQpe2Zvcihjb25zdCBlIG9mIE9iamVjdC52YWx1ZXModC5nZXROb2RlTWFwKCkpKWUuaW5jbHVkZT1iQXQuVU5TUEVDSUZJRUQ7dGhpcy5fYnVpbGRSZW5kZXJIaWVyYXJjaHkodCl9fV9idWlsZE5ld1JlbmRlckhpZXJhcmNoeSgpe3ZhciB0PXRoaXMuZ3JhcGhIaWVyYXJjaHk7dCYmdGhpcy5fYnVpbGRSZW5kZXJIaWVyYXJjaHkodCl9X3N0YXRzQ2hhbmdlZCgpe3ZhciB0PXRoaXMuc3RhdHMsZT10aGlzLmRldmljZXNGb3JTdGF0czt0aGlzLmdyYXBoSGllcmFyY2h5JiYodCYmZSYmKChmdW5jdGlvbiBuKHQsZSxpKXt3ZS5lYWNoKHQubm9kZXMsKHQ9Pnt0LnN0YXRzPW51bGx9KSksd2UuZWFjaChlLmRldl9zdGF0cywoZT0+e2kmJiFpW2UuZGV2aWNlXXx8d2UuZWFjaChlLm5vZGVfc3RhdHMsKG49PntsZXQgaT1uLm5vZGVfbmFtZSBpbiB0Lm5vZGVzP24ubm9kZV9uYW1lOkRBdChuLm5vZGVfbmFtZSk7aWYoIShpIGluIHQubm9kZXMpKXJldHVybjtsZXQgcj0wO24ubWVtb3J5JiZ3ZS5lYWNoKG4ubWVtb3J5LCh0PT57dC50b3RhbF9ieXRlcyYmKHQudG90YWxfYnl0ZXM+MD9yKz1OdW1iZXIodC50b3RhbF9ieXRlcyk6Y29uc29sZS5sb2coImlnbm9yaW5nIG5lZ2F0aXZlIG1lbW9yeSBhbGxvY2F0aW9uIGZvciAiK2kpKX0pKTtsZXQgbz1udWxsO24ub3V0cHV0JiYobz13ZS5tYXAobi5vdXRwdXQsKHQ9PndlLm1hcCh0LnRlbnNvcl9kZXNjcmlwdGlvbi5zaGFwZS5kaW0sKHQ9Pk51bWJlcih0LnNpemUpKSkpKSksdC5ub2Rlc1tpXS5kZXZpY2U9ZS5kZXZpY2UsbnVsbD09dC5ub2Rlc1tpXS5zdGF0cyYmKHQubm9kZXNbaV0uc3RhdHM9bmV3IFFDdChvKSksdC5ub2Rlc1tpXS5zdGF0cy5hZGRCeXRlc0FsbG9jYXRpb24ociksbi5hbGxfZW5kX3JlbF9taWNyb3MmJihuLmFsbF9lbmRfcmVsX21pY3Jvcz4wP3Qubm9kZXNbaV0uc3RhdHMuYWRkRXhlY3V0aW9uVGltZShuLmFsbF9zdGFydF9taWNyb3Msbi5hbGxfc3RhcnRfbWljcm9zK24uYWxsX2VuZF9yZWxfbWljcm9zKTpjb25zb2xlLmxvZygiaWdub3JpbmcgbmVnYXRpdmUgcnVudGltZSBmb3IgIitpKSl9KSl9KSl9KSh0aGlzLmJhc2ljR3JhcGgsdCxlKSwoZnVuY3Rpb24gaSh0LGUpe2xldCBuPXt9LGk9e307d2UuZWFjaCh0LnJvb3QubGVhdmVzKCksKGU9PntsZXQgcj10Lm5vZGUoZSk7bnVsbCE9ci5kZXZpY2UmJihuW3IuZGV2aWNlXT0hMCksbnVsbCE9ci54bGFDbHVzdGVyJiYoaVtyLnhsYUNsdXN0ZXJdPSEwKX0pKSx0LmRldmljZXM9d2Uua2V5cyhuKSx0LnhsYUNsdXN0ZXJzPXdlLmtleXMoaSksd2UuZWFjaCh0LmdldE5vZGVNYXAoKSwoKHQsZSk9Pnt0LmlzR3JvdXBOb2RlJiYodC5zdGF0cz1uZXcgUUN0KG51bGwpLHQuZGV2aWNlSGlzdG9ncmFtPXt9KX0pKSx3ZS5lYWNoKHQucm9vdC5sZWF2ZXMoKSwoZT0+e2xldCBuPXQubm9kZShlKSxpPW47Zm9yKDtudWxsIT1pLnBhcmVudE5vZGU7KXtpZihudWxsIT1uLmRldmljZSl7bGV0IHQ9aS5wYXJlbnROb2RlLmRldmljZUhpc3RvZ3JhbTt0W24uZGV2aWNlXT0odFtuLmRldmljZV18fDApKzF9aWYobnVsbCE9bi54bGFDbHVzdGVyKXtsZXQgdD1pLnBhcmVudE5vZGUueGxhQ2x1c3Rlckhpc3RvZ3JhbTt0W24ueGxhQ2x1c3Rlcl09KHRbbi54bGFDbHVzdGVyXXx8MCkrMX1udWxsIT1uLnN0YXRzJiZpLnBhcmVudE5vZGUuc3RhdHMuY29tYmluZShuLnN0YXRzKSxpPWkucGFyZW50Tm9kZX19KSl9KSh0aGlzLmdyYXBoSGllcmFyY2h5KSksdGhpcy5fYnVpbGRSZW5kZXJIaWVyYXJjaHkodGhpcy5ncmFwaEhpZXJhcmNoeSkpfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImdyYXBoLXNlbGVjdCIsdGhpcy5fZ3JhcGhTZWxlY3RlZC5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImRpc2FibGUtY2xpY2siLHRoaXMuX2Rpc2FibGVDbGljay5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImVuYWJsZS1jbGljayIsdGhpcy5fZW5hYmxlQ2xpY2suYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJub2RlLXRvZ2dsZS1leHBhbmQiLHRoaXMuX25vZGVUb2dnbGVFeHBhbmQuYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJub2RlLXNlbGVjdCIsdGhpcy5fbm9kZVNlbGVjdGVkLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigibm9kZS1oaWdobGlnaHQiLHRoaXMuX25vZGVIaWdobGlnaHRlZC5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoIm5vZGUtdW5oaWdobGlnaHQiLHRoaXMuX25vZGVVbmhpZ2hsaWdodGVkLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigibm9kZS10b2dnbGUtZXh0cmFjdCIsdGhpcy5fbm9kZVRvZ2dsZUV4dHJhY3QuYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJub2RlLXRvZ2dsZS1zZXJpZXNncm91cCIsdGhpcy5fbm9kZVRvZ2dsZVNlcmllc0dyb3VwLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiZWRnZS1zZWxlY3QiLHRoaXMuX2VkZ2VTZWxlY3RlZC5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImFubm90YXRpb24tc2VsZWN0Iix0aGlzLl9ub2RlU2VsZWN0ZWQuYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJhbm5vdGF0aW9uLWhpZ2hsaWdodCIsdGhpcy5fbm9kZUhpZ2hsaWdodGVkLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiYW5ub3RhdGlvbi11bmhpZ2hsaWdodCIsdGhpcy5fbm9kZVVuaGlnaGxpZ2h0ZWQuYmluZCh0aGlzKSl9X2J1aWxkUmVuZGVySGllcmFyY2h5KHQpe2lmKHQucm9vdC50eXBlIT09dkF0Lk1FVEEpcmV0dXJuO2NvbnN0IGU9dGhpcyxuPWlBdCgibmV3IHRmX2dyYXBoX3JlbmRlci5IaWVyYXJjaHkiLCgoKT0+e2NvbnN0IG49bmV3IFhBdCh0LCEhdGhpcy5zdGF0cyx0aGlzLmF1dG9FeHRyYWN0Tm9kZXMpO2Z1bmN0aW9uIGkodCl7cmV0dXJue21pblZhbHVlOnQuZG9tYWluKClbMF0sbWF4VmFsdWU6dC5kb21haW4oKVsxXSxzdGFydENvbG9yOnQucmFuZ2UoKVswXSxlbmRDb2xvcjp0LnJhbmdlKClbMV19fXJldHVybiBuLmVkZ2VMYWJlbEZ1bmN0aW9uPXRoaXMuZWRnZUxhYmVsRnVuY3Rpb24sbi5lZGdlV2lkdGhGdW5jdGlvbj10aGlzLmVkZ2VXaWR0aEZ1bmN0aW9uLGUuX3NldENvbG9yQnlQYXJhbXMoe2NvbXB1dGVfdGltZTppKG4uY29tcHV0ZVRpbWVTY2FsZSksbWVtb3J5Omkobi5tZW1vcnlVc2FnZVNjYWxlKSxkZXZpY2U6d2UubWFwKG4uZGV2aWNlQ29sb3JNYXAuZG9tYWluKCksKGZ1bmN0aW9uKHQpe3JldHVybntkZXZpY2U6dCxjb2xvcjpuLmRldmljZUNvbG9yTWFwKHQpfX0pKSx4bGFfY2x1c3Rlcjp3ZS5tYXAobi54bGFDbHVzdGVyQ29sb3JNYXAuZG9tYWluKCksKGZ1bmN0aW9uKHQpe3JldHVybnt4bGFfY2x1c3Rlcjp0LGNvbG9yOm4ueGxhQ2x1c3RlckNvbG9yTWFwKHQpfX0pKX0pLG59KSxZQ3QuUkVOREVSX0JVSUxEX0hJRVJBUkNIWSk7ZS5fc2V0UmVuZGVySGllcmFyY2h5KG4pfV9nZXRWaXNpYmxlKHQpe3JldHVybiB0P3RoaXMucmVuZGVySGllcmFyY2h5LmdldE5lYXJlc3RWaXNpYmxlQW5jZXN0b3IodCk6dH1maXQoKXt0aGlzLiQuc2NlbmUuZml0KCl9Z2V0SW1hZ2VCbG9iKCl7cmV0dXJuIHRoaXMuJC5zY2VuZS5nZXRJbWFnZUJsb2IoKX1fZ3JhcGhDaGFuZ2VkKCl7dGhpcy5ncmFwaEhpZXJhcmNoeSYmKHRoaXMuZ3JhcGhIaWVyYXJjaHkuYWRkTGlzdGVuZXIoZEx0LlRFTVBMQVRFU19VUERBVEVELCgoKT0+e3RoaXMuJC5zY2VuZS5ub2RlQ29sb3JzQ2hhbmdlZCgpfSkpLHRoaXMuZmlyZSgiZ3JhcGgtc2VsZWN0IikpfV9ncmFwaFNlbGVjdGVkKHQpe3RoaXMuX2FsbG93R3JhcGhTZWxlY3QmJih0aGlzLnNldCgic2VsZWN0ZWROb2RlIixudWxsKSx0aGlzLnNldCgic2VsZWN0ZWRFZGdlIixudWxsKSksdGhpcy5fYWxsb3dHcmFwaFNlbGVjdD0hMH1fZGlzYWJsZUNsaWNrKHQpe3RoaXMuX2FsbG93R3JhcGhTZWxlY3Q9ITF9X2VuYWJsZUNsaWNrKHQpe3RoaXMuX2FsbG93R3JhcGhTZWxlY3Q9ITB9X3NlbGVjdGVkTm9kZUNoYW5nZWQoKXt0aGlzLmhhbmRsZU5vZGVTZWxlY3RlZCYmdGhpcy5oYW5kbGVOb2RlU2VsZWN0ZWQodGhpcy5zZWxlY3RlZE5vZGUpfV9zZWxlY3RlZEVkZ2VDaGFuZ2VkKCl7dmFyIHQ9dGhpcy5zZWxlY3RlZEVkZ2U7dGhpcy5fZGVzZWxlY3RQcmV2aW91c0VkZ2UoKSx0JiYodGhpcy5fbGFzdFNlbGVjdGVkRWRnZUdyb3VwLmNsYXNzZWQoX2t0LkVkZ2UuU0VMRUNURUQsITApLHRoaXMuX3VwZGF0ZU1hcmtlck9mU2VsZWN0ZWRFZGdlKHQpKSx0aGlzLmhhbmRsZUVkZ2VTZWxlY3RlZCYmdGhpcy5oYW5kbGVFZGdlU2VsZWN0ZWQodCl9X25vZGVTZWxlY3RlZCh0KXt0aGlzLl9hbGxvd0dyYXBoU2VsZWN0JiZ0aGlzLnNldCgic2VsZWN0ZWROb2RlIix0LmRldGFpbC5uYW1lKSx0aGlzLl9hbGxvd0dyYXBoU2VsZWN0PSEwfV9lZGdlU2VsZWN0ZWQodCl7dGhpcy5fYWxsb3dHcmFwaFNlbGVjdCYmKHRoaXMuc2V0KCJfbGFzdFNlbGVjdGVkRWRnZUdyb3VwIix0LmRldGFpbC5lZGdlR3JvdXApLHRoaXMuc2V0KCJzZWxlY3RlZEVkZ2UiLHQuZGV0YWlsLmVkZ2VEYXRhKSksdGhpcy5fYWxsb3dHcmFwaFNlbGVjdD0hMH1fbm9kZUhpZ2hsaWdodGVkKHQpe3RoaXMuc2V0KCJoaWdobGlnaHRlZE5vZGUiLHQuZGV0YWlsLm5hbWUpfV9ub2RlVW5oaWdobGlnaHRlZCh0KXt0aGlzLnNldCgiaGlnaGxpZ2h0ZWROb2RlIixudWxsKX1fbm9kZVRvZ2dsZUV4cGFuZCh0KXt0aGlzLl9ub2RlU2VsZWN0ZWQodCk7dmFyIGU9dC5kZXRhaWwubmFtZSxuPXRoaXMucmVuZGVySGllcmFyY2h5LmdldFJlbmRlck5vZGVCeU5hbWUoZSk7bi5ub2RlLnR5cGUhPT12QXQuT1AmJih0aGlzLnJlbmRlckhpZXJhcmNoeS5idWlsZFN1YmhpZXJhcmNoeShlKSxuLmV4cGFuZGVkPSFuLmV4cGFuZGVkLHRoaXMuYXN5bmMoKGZ1bmN0aW9uKCl7dGhpcy4kLnNjZW5lLnNldE5vZGVFeHBhbmRlZChuKX0pLDc1KSxuQXQoe2FjdGlvbklkOllDdC5OT0RFX0VYUEFOU0lPTl9UT0dHTEVELGV2ZW50TGFiZWw6bi5leHBhbmRlZD8iZXhwYW5kZWQiOiJjb2xsYXBzZWQifSkpfV9ub2RlVG9nZ2xlRXh0cmFjdCh0KXt0aGlzLm5vZGVUb2dnbGVFeHRyYWN0KHQuZGV0YWlsLm5hbWUpfW5vZGVUb2dnbGVFeHRyYWN0KHQpe2NvbnN0IGU9dGhpcy5yZW5kZXJIaWVyYXJjaHkuZ2V0UmVuZGVyTm9kZUJ5TmFtZSh0KTtlLm5vZGUuaW5jbHVkZT1lLm5vZGUuaW5jbHVkZT09YkF0LklOQ0xVREU/YkF0LkVYQ0xVREU6ZS5ub2RlLmluY2x1ZGU9PWJBdC5FWENMVURFfHx0aGlzLnJlbmRlckhpZXJhcmNoeS5pc05vZGVBdXhpbGlhcnkoZSk/YkF0LklOQ0xVREU6YkF0LkVYQ0xVREUsdGhpcy5fYnVpbGRSZW5kZXJIaWVyYXJjaHkodGhpcy5ncmFwaEhpZXJhcmNoeSksbkF0KHthY3Rpb25JZDpZQ3QuTk9ERV9BVVhJTElBUllfRVhUUkFDVElPTl9DSEFOR0VELGV2ZW50TGFiZWw6ZS5ub2RlLmluY2x1ZGU9PT1iQXQuSU5DTFVERT8iQXV4aWxpYXJ5IHRvIE1haW4iOiJNYWluIHRvIEF1eGlsaWFyeSJ9KX1fbm9kZVRvZ2dsZVNlcmllc0dyb3VwKHQpe3RoaXMubm9kZVRvZ2dsZVNlcmllc0dyb3VwKHQuZGV0YWlsLm5hbWUpfW5vZGVUb2dnbGVTZXJpZXNHcm91cCh0KXt0aGlzLnNldCgicHJvZ3Jlc3MiLHt2YWx1ZTowLG1zZzoiIn0pO3ZhciBlPW9BdChyQXQodGhpcyksMTAwLCJOYW1lc3BhY2UgaGllcmFyY2h5Iik7Y29uc3Qgbj1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdGhpcy5oaWVyYXJjaHlQYXJhbXMpLHtzZXJpZXNNYXA6dGhpcy5ncmFwaEhpZXJhcmNoeS5idWlsZFNlcmllc0dyb3VwTWFwVG9nZ2xlZCh0KX0pO2dMdCh0aGlzLmJhc2ljR3JhcGgsbixlKS50aGVuKGZ1bmN0aW9uKHQpe3RoaXMuc2V0KCJncmFwaEhpZXJhcmNoeSIsdCksdGhpcy5fYnVpbGRSZW5kZXJIaWVyYXJjaHkodGhpcy5ncmFwaEhpZXJhcmNoeSl9LmJpbmQodGhpcykpfV9kZXNlbGVjdFByZXZpb3VzRWRnZSgpe3d1KCIuIitfa3QuRWRnZS5TRUxFQ1RFRCkuY2xhc3NlZChfa3QuRWRnZS5TRUxFQ1RFRCwhMSkuZWFjaCgoKHQsZSk9PntpZih0LmxhYmVsKXtjb25zdCBlPXd1KHRoaXMpLnNlbGVjdEFsbCgicGF0aC5lZGdlbGluZSIpO3QubGFiZWwuc3RhcnRNYXJrZXJJZCYmZS5zdHlsZSgibWFya2VyLXN0YXJ0IixgdXJsKCMke3QubGFiZWwuc3RhcnRNYXJrZXJJZH0pYCksdC5sYWJlbC5lbmRNYXJrZXJJZCYmZS5zdHlsZSgibWFya2VyLWVuZCIsYHVybCgjJHt0LmxhYmVsLmVuZE1hcmtlcklkfSlgKX19KSl9X3VwZGF0ZU1hcmtlck9mU2VsZWN0ZWRFZGdlKHQpe2lmKHQubGFiZWwpe2NvbnN0IGU9dC5sYWJlbC5zdGFydE1hcmtlcklkfHx0LmxhYmVsLmVuZE1hcmtlcklkO2lmKGUpe2NvbnN0IG49ZS5yZXBsYWNlKCJkYXRhZmxvdy0iLCJzZWxlY3RlZC0iKTtsZXQgaT10aGlzLiQkKCIjIituKTtpZighaSl7Y29uc3QgdD10aGlzLiQuc2NlbmUucXVlcnlTZWxlY3RvcigiIyIrZSk7aT10LmNsb25lTm9kZSghMCksaS5zZXRBdHRyaWJ1dGUoImlkIixuKSxpLmNsYXNzTGlzdC5hZGQoInNlbGVjdGVkLWFycm93aGVhZCIpLHQucGFyZW50Tm9kZS5hcHBlbmRDaGlsZChpKX1jb25zdCByPXQubGFiZWwuc3RhcnRNYXJrZXJJZD8ibWFya2VyLXN0YXJ0IjoibWFya2VyLWVuZCI7dGhpcy5fbGFzdFNlbGVjdGVkRWRnZUdyb3VwLnNlbGVjdEFsbCgicGF0aC5lZGdlbGluZSIpLnN0eWxlKHIsYHVybCgjJHtufSlgKX19fW5vdCh0KXtyZXR1cm4hdH19O2tMdC50ZW1wbGF0ZT1fZWAKICAgIDxzdHlsZT4KICAgICAgLmNvbnRhaW5lciB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGJhY2tncm91bmQ6IHdoaXRlOwogICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMik7CiAgICAgIH0KCiAgICAgIC52ZXJ0aWNhbCB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIEBhcHBseSAtLWxheW91dC12ZXJ0aWNhbDsKICAgICAgfQoKICAgICAgLmF1dG8gewogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4LWF1dG87CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LXZlcnRpY2FsOwogICAgICB9CgogICAgICBoMiB7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICB9CgogICAgICBwYXBlci1idXR0b24gewogICAgICAgIHRleHQtdHJhbnNmb3JtOiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIj4KICAgICAgPGRpdiBjbGFzcz0idmVydGljYWwiPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1t0aXRsZV1dIj4KICAgICAgICAgIDxoMj5bW3RpdGxlXV08L2gyPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRmLWdyYXBoLXNjZW5lCiAgICAgICAgICBpZD0ic2NlbmUiCiAgICAgICAgICBjbGFzcz0iYXV0byIKICAgICAgICAgIHJlbmRlci1oaWVyYXJjaHk9IltbcmVuZGVySGllcmFyY2h5XV0iCiAgICAgICAgICBoaWdobGlnaHRlZC1ub2RlPSJbW19nZXRWaXNpYmxlKGhpZ2hsaWdodGVkTm9kZSldXSIKICAgICAgICAgIHNlbGVjdGVkLW5vZGU9Int7c2VsZWN0ZWROb2RlfX0iCiAgICAgICAgICBzZWxlY3RlZC1lZGdlPSJ7e3NlbGVjdGVkRWRnZX19IgogICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgcHJvZ3Jlc3M9IltbcHJvZ3Jlc3NdXSIKICAgICAgICAgIG5vZGUtY29udGV4dC1tZW51LWl0ZW1zPSJbW25vZGVDb250ZXh0TWVudUl0ZW1zXV0iCiAgICAgICAgICBub2RlLW5hbWVzLXRvLWhlYWx0aC1waWxscz0iW1tub2RlTmFtZXNUb0hlYWx0aFBpbGxzXV0iCiAgICAgICAgICBoZWFsdGgtcGlsbC1zdGVwLWluZGV4PSJ7e2hlYWx0aFBpbGxTdGVwSW5kZXh9fSIKICAgICAgICAgIGhhbmRsZS1lZGdlLXNlbGVjdGVkPSJbW2hhbmRsZUVkZ2VTZWxlY3RlZF1dIgogICAgICAgICAgdHJhY2UtaW5wdXRzPSJbW3RyYWNlSW5wdXRzXV0iCiAgICAgICAgPjwvdGYtZ3JhcGgtc2NlbmU+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgYCx0KFtvKHt0eXBlOk9iamVjdCxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9ncmFwaENoYW5nZWQifSksZSgiZGVzaWduOnR5cGUiLHBMdCldLGtMdC5wcm90b3R5cGUsImdyYXBoSGllcmFyY2h5Iix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLHdBdCldLGtMdC5wcm90b3R5cGUsImJhc2ljR3JhcGgiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sa0x0LnByb3RvdHlwZSwic3RhdHMiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sa0x0LnByb3RvdHlwZSwiZGV2aWNlc0ZvclN0YXRzIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLGtMdC5wcm90b3R5cGUsImhpZXJhcmNoeVBhcmFtcyIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdCxub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sa0x0LnByb3RvdHlwZSwicHJvZ3Jlc3MiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sa0x0LnByb3RvdHlwZSwidGl0bGUiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLGtMdC5wcm90b3R5cGUsInNlbGVjdGVkTm9kZSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdCxub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sa0x0LnByb3RvdHlwZSwic2VsZWN0ZWRFZGdlIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLGtMdC5wcm90b3R5cGUsIl9sYXN0U2VsZWN0ZWRFZGdlR3JvdXAiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLGtMdC5wcm90b3R5cGUsImhpZ2hsaWdodGVkTm9kZSIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxrTHQucHJvdG90eXBlLCJjb2xvckJ5Iix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0LG5vdGlmeTohMCxyZWFkT25seTohMH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxrTHQucHJvdG90eXBlLCJjb2xvckJ5UGFyYW1zIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0LHJlYWRPbmx5OiEwLG5vdGlmeTohMH0pLGUoImRlc2lnbjp0eXBlIixYQXQpXSxrTHQucHJvdG90eXBlLCJyZW5kZXJIaWVyYXJjaHkiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxrTHQucHJvdG90eXBlLCJ0cmFjZUlucHV0cyIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGtMdC5wcm90b3R5cGUsImF1dG9FeHRyYWN0Tm9kZXMiLHZvaWQgMCksdChbbyh7dHlwZTpBcnJheX0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLGtMdC5wcm90b3R5cGUsIm5vZGVDb250ZXh0TWVudUl0ZW1zIix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLGtMdC5wcm90b3R5cGUsIl9yZW5kZXJEZXB0aCIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGtMdC5wcm90b3R5cGUsIl9hbGxvd0dyYXBoU2VsZWN0Iix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLGtMdC5wcm90b3R5cGUsIm5vZGVOYW1lc1RvSGVhbHRoUGlsbHMiLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXJ9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sa0x0LnByb3RvdHlwZSwiaGVhbHRoUGlsbFN0ZXBJbmRleCIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxrTHQucHJvdG90eXBlLCJlZGdlV2lkdGhGdW5jdGlvbiIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxrTHQucHJvdG90eXBlLCJoYW5kbGVOb2RlU2VsZWN0ZWQiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sa0x0LnByb3RvdHlwZSwiZWRnZUxhYmVsRnVuY3Rpb24iLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sa0x0LnByb3RvdHlwZSwiaGFuZGxlRWRnZVNlbGVjdGVkIix2b2lkIDApLHQoW2EoImF1dG9FeHRyYWN0Tm9kZXMiKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLGtMdC5wcm90b3R5cGUsIl9hdXRvRXh0cmFjdE5vZGVzQ2hhbmdlZCIsbnVsbCksdChbYSgiZ3JhcGhIaWVyYXJjaHkiLCJlZGdlV2lkdGhGdW5jdGlvbiIsImhhbmRsZU5vZGVTZWxlY3RlZCIsImVkZ2VMYWJlbEZ1bmN0aW9uIiwiaGFuZGxlRWRnZVNlbGVjdGVkIiksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pLGUoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxrTHQucHJvdG90eXBlLCJfYnVpbGROZXdSZW5kZXJIaWVyYXJjaHkiLG51bGwpLHQoW2EoInN0YXRzIiwiZGV2aWNlc0ZvclN0YXRzIiksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pLGUoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxrTHQucHJvdG90eXBlLCJfc3RhdHNDaGFuZ2VkIixudWxsKSx0KFthKCJzZWxlY3RlZE5vZGUiKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLGtMdC5wcm90b3R5cGUsIl9zZWxlY3RlZE5vZGVDaGFuZ2VkIixudWxsKSx0KFthKCJzZWxlY3RlZEVkZ2UiKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLGtMdC5wcm90b3R5cGUsIl9zZWxlY3RlZEVkZ2VDaGFuZ2VkIixudWxsKSxrTHQ9dChbaSgidGYtZ3JhcGgiKV0sa0x0KTtjb25zdCBMTHQ9e01BWF9OT0RFX0NPVU5UOjFlNCxNQVhfRURHRV9DT1VOVDoxZTR9O2xldCBQTHQ9Y2xhc3MgZXh0ZW5kcyh0cih5ZSkpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmhpZXJhcmNoeVBhcmFtcz1tTHQsdGhpcy5hbGxTdGVwc01vZGVFbmFibGVkPSExLHRoaXMuc3BlY2lmaWNIZWFsdGhQaWxsU3RlcD0wLHRoaXMuY29tcGF0Tm9kZVRpdGxlPSJUUFUgQ29tcGF0aWJpbGl0eSJ9Zml0KCl7dGhpcy4kLmdyYXBoLmZpdCgpfWRvd25sb2FkQXNJbWFnZSh0KXtyZXR1cm4gbih0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9eWllbGQgdGhpcy4kLmdyYXBoLmdldEltYWdlQmxvYigpLG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO24uaHJlZj1VUkwuY3JlYXRlT2JqZWN0VVJMKGUpLG4uZG93bmxvYWQ9dCxuLmNsaWNrKCksVVJMLnJldm9rZU9iamVjdFVSTChuLmhyZWYpfSkpfV9pc05vdENvbXBsZXRlKHQpe3JldHVybiB0LnZhbHVlPDEwMH1fZ2V0Q29udGFpbmVyQ2xhc3ModCl7dmFyIGU9ImNvbnRhaW5lciI7cmV0dXJuIHQuZXJyb3ImJihlKz0iIGVycm9yIiksdGhpcy5faXNOb3RDb21wbGV0ZSh0KSYmKGUrPSIgbG9hZGluZyIpLGV9X29uTm9kZUluY2x1c2lvblRvZ2dsZWQodCl7dGhpcy4kLmdyYXBoLm5vZGVUb2dnbGVFeHRyYWN0KHQuZGV0YWlsLm5hbWUpfV9vbk5vZGVTZXJpZXNHcm91cFRvZ2dsZWQodCl7dGhpcy4kLmdyYXBoLm5vZGVUb2dnbGVTZXJpZXNHcm91cCh0LmRldGFpbC5uYW1lKX1fdXBkYXRlTm9kZUluY2x1ZGUoKXtjb25zdCB0PXRoaXMucmVuZGVySGllcmFyY2h5P3RoaXMucmVuZGVySGllcmFyY2h5LmdldE5vZGVCeU5hbWUodGhpcy5zZWxlY3RlZE5vZGUpOm51bGw7dGhpcy5fc2VsZWN0ZWROb2RlSW5jbHVkZT10P3QuaW5jbHVkZTpiQXQuVU5TUEVDSUZJRUR9X3NsaW1HcmFwaENoYW5nZWQoKXtpZighdGhpcy5ncmFwaClyZXR1cm47Y29uc3R7TUFYX05PREVfQ09VTlQ6dCxNQVhfRURHRV9DT1VOVDplfT1MTHQ7T2JqZWN0LmtleXModGhpcy5ncmFwaC5ub2RlcykubGVuZ3RoPnQmJnRoaXMuZ3JhcGguZWRnZXMubGVuZ3RoPmUmJnRoaXMuY29sb3JCeT09PXprdC5TVFJVQ1RVUkUmJih0aGlzLmNvbG9yQnk9emt0Lk5PTkUpfV9lbnN1cmVUZW1wbGF0ZXMoKXt0aGlzLmdyYXBoSGllcmFyY2h5JiZ0aGlzLmNvbG9yQnk9PT16a3QuU1RSVUNUVVJFJiYodGhpcy5ncmFwaEhpZXJhcmNoeS5nZXRUZW1wbGF0ZUluZGV4KCl8fHRoaXMuZ3JhcGhIaWVyYXJjaHkudXBkYXRlVGVtcGxhdGVzKCkpfX07UEx0LnRlbXBsYXRlPV9lYAogICAgPHN0eWxlPgogICAgICA6Omhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICAvZGVlcC8gLmNsb3NlIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGxlZnQ6IDE1cHg7CiAgICAgICAgYm90dG9tOiAxNXB4OwogICAgICB9CgogICAgICAuY29udGFpbmVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLmNvbnRhaW5lci5sb2FkaW5nIHsKICAgICAgICBjdXJzb3I6IHByb2dyZXNzOwogICAgICAgIG9wYWNpdHk6IDAuMTsKICAgICAgfQoKICAgICAgLmNvbnRhaW5lci5sb2FkaW5nLmVycm9yIHsKICAgICAgICBjdXJzb3I6IGF1dG87CiAgICAgIH0KCiAgICAgICNpbmZvIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IDVweDsKICAgICAgICB0b3A6IDVweDsKICAgICAgICBwYWRkaW5nOiAwcHg7CiAgICAgICAgbWF4LXdpZHRoOiAzODBweDsKICAgICAgICBtaW4td2lkdGg6IDMyMHB4OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTsKICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTJkcDsKICAgICAgfQoKICAgICAgI21haW4gewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQoKICAgICAgI3Byb2dyZXNzLWJhciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogNDBweDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgfQoKICAgICAgI3Byb2dyZXNzLW1zZyB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKICAgICAgICB3aWR0aDogNDAwcHg7CiAgICAgIH0KCiAgICAgIHBhcGVyLXByb2dyZXNzIHsKICAgICAgICB3aWR0aDogNDAwcHg7CiAgICAgICAgLS1wYXBlci1wcm9ncmVzcy1oZWlnaHQ6IDZweDsKICAgICAgICAtLXBhcGVyLXByb2dyZXNzLWFjdGl2ZS1jb2xvcjogI2YzOTEzZTsKICAgICAgfQoKICAgICAgLmNvbnRleHQtbWVudSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2UyZTJlMjsKICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIG1pbi13aWR0aDogMTUwcHg7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2Q0ZDRkNDsKICAgICAgfQoKICAgICAgL2RlZXAvIC5jb250ZXh0LW1lbnUgdWwgewogICAgICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgIH0KCiAgICAgIC9kZWVwLyAuY29udGV4dC1tZW51IHVsIGxpIHsKICAgICAgICBwYWRkaW5nOiA0cHggMTZweDsKICAgICAgfQoKICAgICAgL2RlZXAvIC5jb250ZXh0LW1lbnUgdWwgbGk6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmMzkxM2U7CiAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc05vdENvbXBsZXRlKHByb2dyZXNzKV1dIj4KICAgICAgPGRpdiBpZD0icHJvZ3Jlc3MtYmFyIj4KICAgICAgICA8ZGl2IGlkPSJwcm9ncmVzcy1tc2ciPltbcHJvZ3Jlc3MubXNnXV08L2Rpdj4KICAgICAgICA8cGFwZXItcHJvZ3Jlc3MgdmFsdWU9IltbcHJvZ3Jlc3MudmFsdWVdXSI+PC9wYXBlci1wcm9ncmVzcz4KICAgICAgPC9kaXY+CiAgICA8L3RlbXBsYXRlPgogICAgPGRpdiBjbGFzcyQ9IltbX2dldENvbnRhaW5lckNsYXNzKHByb2dyZXNzKV1dIj4KICAgICAgPGRpdiBpZD0ibWFpbiI+CiAgICAgICAgPHRmLWdyYXBoCiAgICAgICAgICBpZD0iZ3JhcGgiCiAgICAgICAgICBncmFwaC1oaWVyYXJjaHk9Int7Z3JhcGhIaWVyYXJjaHl9fSIKICAgICAgICAgIGJhc2ljLWdyYXBoPSJbW2dyYXBoXV0iCiAgICAgICAgICBoaWVyYXJjaHktcGFyYW1zPSJbW2hpZXJhcmNoeVBhcmFtc11dIgogICAgICAgICAgcmVuZGVyLWhpZXJhcmNoeT0ie3tyZW5kZXJIaWVyYXJjaHl9fSIKICAgICAgICAgIGRldmljZXMtZm9yLXN0YXRzPSJbW2RldmljZXNGb3JTdGF0c11dIgogICAgICAgICAgc3RhdHM9Iltbc3RhdHNdXSIKICAgICAgICAgIHNlbGVjdGVkLW5vZGU9Int7c2VsZWN0ZWROb2RlfX0iCiAgICAgICAgICBoaWdobGlnaHRlZC1ub2RlPSJ7e19oaWdobGlnaHRlZE5vZGV9fSIKICAgICAgICAgIGNvbG9yLWJ5PSJbW2NvbG9yQnldXSIKICAgICAgICAgIGNvbG9yLWJ5LXBhcmFtcz0ie3tjb2xvckJ5UGFyYW1zfX0iCiAgICAgICAgICBwcm9ncmVzcz0ie3twcm9ncmVzc319IgogICAgICAgICAgZWRnZS1sYWJlbC1mdW5jdGlvbj0iW1tlZGdlTGFiZWxGdW5jdGlvbl1dIgogICAgICAgICAgZWRnZS13aWR0aC1mdW5jdGlvbj0iW1tlZGdlV2lkdGhGdW5jdGlvbl1dIgogICAgICAgICAgbm9kZS1uYW1lcy10by1oZWFsdGgtcGlsbHM9Iltbbm9kZU5hbWVzVG9IZWFsdGhQaWxsc11dIgogICAgICAgICAgaGVhbHRoLXBpbGwtc3RlcC1pbmRleD0iW1toZWFsdGhQaWxsU3RlcEluZGV4XV0iCiAgICAgICAgICBoYW5kbGUtbm9kZS1zZWxlY3RlZD0iW1toYW5kbGVOb2RlU2VsZWN0ZWRdXSIKICAgICAgICAgIGhhbmRsZS1lZGdlLXNlbGVjdGVkPSJbW2hhbmRsZUVkZ2VTZWxlY3RlZF1dIgogICAgICAgICAgdHJhY2UtaW5wdXRzPSJbW3RyYWNlSW5wdXRzXV0iCiAgICAgICAgICBhdXRvLWV4dHJhY3Qtbm9kZXM9IltbYXV0b0V4dHJhY3ROb2Rlc11dIgogICAgICAgID48L3RmLWdyYXBoPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBpZD0iaW5mbyI+CiAgICAgICAgPHRmLWdyYXBoLWluZm8KICAgICAgICAgIGlkPSJncmFwaC1pbmZvIgogICAgICAgICAgdGl0bGU9InNlbGVjdGVkIgogICAgICAgICAgZ3JhcGgtaGllcmFyY2h5PSJbW2dyYXBoSGllcmFyY2h5XV0iCiAgICAgICAgICByZW5kZXItaGllcmFyY2h5PSJbW3JlbmRlckhpZXJhcmNoeV1dIgogICAgICAgICAgZ3JhcGg9IltbZ3JhcGhdXSIKICAgICAgICAgIHNlbGVjdGVkLW5vZGU9Int7c2VsZWN0ZWROb2RlfX0iCiAgICAgICAgICBzZWxlY3RlZC1ub2RlLWluY2x1ZGU9Int7X3NlbGVjdGVkTm9kZUluY2x1ZGV9fSIKICAgICAgICAgIGhpZ2hsaWdodGVkLW5vZGU9Int7X2hpZ2hsaWdodGVkTm9kZX19IgogICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgY29sb3ItYnktcGFyYW1zPSJbW2NvbG9yQnlQYXJhbXNdXSIKICAgICAgICAgIGRlYnVnZ2VyLWRhdGEtZW5hYmxlZD0iW1tkZWJ1Z2dlckRhdGFFbmFibGVkXV0iCiAgICAgICAgICBhcmUtaGVhbHRoLXBpbGxzLWxvYWRpbmc9IltbYXJlSGVhbHRoUGlsbHNMb2FkaW5nXV0iCiAgICAgICAgICBkZWJ1Z2dlci1udW1lcmljLWFsZXJ0cz0iW1tkZWJ1Z2dlck51bWVyaWNBbGVydHNdXSIKICAgICAgICAgIG5vZGUtbmFtZXMtdG8taGVhbHRoLXBpbGxzPSJbW25vZGVOYW1lc1RvSGVhbHRoUGlsbHNdXSIKICAgICAgICAgIGFsbC1zdGVwcy1tb2RlLWVuYWJsZWQ9Int7YWxsU3RlcHNNb2RlRW5hYmxlZH19IgogICAgICAgICAgc3BlY2lmaWMtaGVhbHRoLXBpbGwtc3RlcD0ie3tzcGVjaWZpY0hlYWx0aFBpbGxTdGVwfX0iCiAgICAgICAgICBoZWFsdGgtcGlsbC1zdGVwLWluZGV4PSJ7e2hlYWx0aFBpbGxTdGVwSW5kZXh9fSIKICAgICAgICAgIGNvbXBhdC1ub2RlLXRpdGxlPSJbW2NvbXBhdE5vZGVUaXRsZV1dIgogICAgICAgICAgb24tbm9kZS10b2dnbGUtaW5jbHVzaW9uPSJfb25Ob2RlSW5jbHVzaW9uVG9nZ2xlZCIKICAgICAgICAgIG9uLW5vZGUtdG9nZ2xlLXNlcmllc2dyb3VwPSJfb25Ob2RlU2VyaWVzR3JvdXBUb2dnbGVkIgogICAgICAgID48L3RmLWdyYXBoLWluZm8+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgYCx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixwTHQpXSxQTHQucHJvdG90eXBlLCJncmFwaEhpZXJhcmNoeSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIix3QXQpXSxQTHQucHJvdG90eXBlLCJncmFwaCIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxQTHQucHJvdG90eXBlLCJoaWVyYXJjaHlQYXJhbXMiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUEx0LnByb3RvdHlwZSwic3RhdHMiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUEx0LnByb3RvdHlwZSwicHJvZ3Jlc3MiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxQTHQucHJvdG90eXBlLCJ0cmFjZUlucHV0cyIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFBMdC5wcm90b3R5cGUsImF1dG9FeHRyYWN0Tm9kZXMiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLFBMdC5wcm90b3R5cGUsImNvbG9yQnkiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLFBMdC5wcm90b3R5cGUsImNvbG9yQnlQYXJhbXMiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSksZSgiZGVzaWduOnR5cGUiLFhBdCldLFBMdC5wcm90b3R5cGUsInJlbmRlckhpZXJhcmNoeSIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFBMdC5wcm90b3R5cGUsImRlYnVnZ2VyRGF0YUVuYWJsZWQiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxQTHQucHJvdG90eXBlLCJhcmVIZWFsdGhQaWxsc0xvYWRpbmciLHZvaWQgMCksdChbbyh7dHlwZTpBcnJheSxub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSxQTHQucHJvdG90eXBlLCJkZWJ1Z2dlck51bWVyaWNBbGVydHMiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUEx0LnByb3RvdHlwZSwibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwfSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxQTHQucHJvdG90eXBlLCJhbGxTdGVwc01vZGVFbmFibGVkIix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyLG5vdGlmeTohMH0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxQTHQucHJvdG90eXBlLCJzcGVjaWZpY0hlYWx0aFBpbGxTdGVwIix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLFBMdC5wcm90b3R5cGUsImhlYWx0aFBpbGxTdGVwSW5kZXgiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLFBMdC5wcm90b3R5cGUsInNlbGVjdGVkTm9kZSIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxQTHQucHJvdG90eXBlLCJjb21wYXROb2RlVGl0bGUiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUEx0LnByb3RvdHlwZSwiZWRnZVdpZHRoRnVuY3Rpb24iLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXJ9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sUEx0LnByb3RvdHlwZSwiX3NlbGVjdGVkTm9kZUluY2x1ZGUiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sUEx0LnByb3RvdHlwZSwiX2hpZ2hsaWdodGVkTm9kZSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxQTHQucHJvdG90eXBlLCJoYW5kbGVOb2RlU2VsZWN0ZWQiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUEx0LnByb3RvdHlwZSwiZWRnZUxhYmVsRnVuY3Rpb24iLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUEx0LnByb3RvdHlwZSwiaGFuZGxlRWRnZVNlbGVjdGVkIix2b2lkIDApLHQoW2EoInNlbGVjdGVkTm9kZSIsInJlbmRlckhpZXJhcmNoeSIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sUEx0LnByb3RvdHlwZSwiX3VwZGF0ZU5vZGVJbmNsdWRlIixudWxsKSx0KFthKCJncmFwaCIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sUEx0LnByb3RvdHlwZSwiX3NsaW1HcmFwaENoYW5nZWQiLG51bGwpLHQoW2EoImNvbG9yQnkiLCJncmFwaEhpZXJhcmNoeSIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sUEx0LnByb3RvdHlwZSwiX2Vuc3VyZVRlbXBsYXRlcyIsbnVsbCksUEx0PXQoW2koInRmLWdyYXBoLWJvYXJkIildLFBMdCk7bGV0IE5MdD1jbGFzcyBleHRlbmRzKHRyKHllKSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3Jhd1JlZ2V4SW5wdXQ9IiIsdGhpcy5fcHJldmlvdXNSZWdleElucHV0PSIiLHRoaXMuX3NlYXJjaFRpbWVvdXREZWxheT0xNTAsdGhpcy5fbWF4UmVnZXhSZXN1bHRzPTQyfWdldCBfcmVnZXhJbnB1dCgpe3JldHVybiB0aGlzLl9yYXdSZWdleElucHV0LnRyaW0oKX1fcmVnZXhJbnB1dENoYW5nZWQoKXt0aGlzLl9yZXF1ZXN0U2VhcmNoKCl9X2NsZWFyU2VhcmNoUmVzdWx0cygpe3RoaXMuc2V0KCJfcmVnZXhNYXRjaGVzIixbXSl9X3JlcXVlc3RTZWFyY2goKXt0aGlzLl9zZWFyY2hQZW5kaW5nfHwodGhpcy5fcmVnZXhJbnB1dCE9PXRoaXMuX3ByZXZpb3VzUmVnZXhJbnB1dD8odGhpcy5fc2VhcmNoUGVuZGluZz0hMCx0aGlzLl9leGVjdXRlU2VhcmNoKCksdGhpcy5hc3luYygoKCk9Pnt0aGlzLl9zZWFyY2hQZW5kaW5nPSExLHRoaXMuX3JlcXVlc3RTZWFyY2goKX0pLHRoaXMuX3NlYXJjaFRpbWVvdXREZWxheSkpOnRoaXMuX3NlYXJjaFBlbmRpbmc9ITEpfV9leGVjdXRlU2VhcmNoKCl7aWYodGhpcy5fcHJldmlvdXNSZWdleElucHV0PXRoaXMuX3JlZ2V4SW5wdXQsIXRoaXMuX3JlZ2V4SW5wdXQpcmV0dXJuIHZvaWQgdGhpcy5fY2xlYXJTZWFyY2hSZXN1bHRzKCk7dHJ5e3ZhciB0PW5ldyBSZWdFeHAodGhpcy5fcmVnZXhJbnB1dCl9Y2F0Y2godCl7cmV0dXJuIHZvaWQgdGhpcy5fY2xlYXJTZWFyY2hSZXN1bHRzKCl9Y29uc3QgZT1bXSxuPXRoaXMucmVuZGVySGllcmFyY2h5LmhpZXJhcmNoeS5nZXROb2RlTWFwKCk7d2UuZWFjaChuLCgobixpKT0+e2lmKGUubGVuZ3RoPj10aGlzLl9tYXhSZWdleFJlc3VsdHMpcmV0dXJuITE7dC50ZXN0KGkpJiZlLnB1c2goaSl9KSksdGhpcy5zZXQoIl9yZWdleE1hdGNoZXMiLGUpfV9tYXRjaENsaWNrZWQodCl7dGhpcy5zZXQoInNlbGVjdGVkTm9kZSIsdC5tb2RlbC5pdGVtKSxuQXQoe2FjdGlvbklkOllDdC5OT0RFX1NFQVJDSF9SRVNVTFRfRk9DVVNFRH0pfX07Tkx0LnRlbXBsYXRlPV9lYAogICAgPGRpdiBpZD0ic2VhcmNoLWNvbnRhaW5lciI+CiAgICAgIDxwYXBlci1pbnB1dAogICAgICAgIGlkPSJydW5zLXJlZ2V4IgogICAgICAgIGxhYmVsPSJTZWFyY2ggbm9kZXMgKHJlZ2V4KSIKICAgICAgICB2YWx1ZT0ie3tfcmF3UmVnZXhJbnB1dH19IgogICAgICA+CiAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICAgIDxkaXYgaWQ9InNlYXJjaC1yZXN1bHRzLWFuY2hvciI+CiAgICAgICAgPGRpdiBpZD0ic2VhcmNoLXJlc3VsdHMiPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfcmVnZXhNYXRjaGVzXV0iPgogICAgICAgICAgICA8ZGl2IGlkPSJzZWFyY2gtbWF0Y2giIG9uLWNsaWNrPSJfbWF0Y2hDbGlja2VkIj5bW2l0ZW1dXTwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxzdHlsZT4KICAgICAgI3NlYXJjaC1jb250YWluZXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIG92ZXJmbG93OiB2aXNpYmxlOwogICAgICB9CgogICAgICAjcnVucy1yZWdleCB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgICNzZWFyY2gtcmVzdWx0cy1hbmNob3IgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgI3NlYXJjaC1yZXN1bHRzIHsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgbWF4LWhlaWdodDogMjAwcHg7CiAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIH0KCiAgICAgICNzZWFyY2gtbWF0Y2ggewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIHBhZGRpbmc6IDNweDsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBkaXJlY3Rpb246IHJ0bDsKICAgICAgfQoKICAgICAgI3NlYXJjaC1tYXRjaDpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tdGItb3JhbmdlLXdlYWspOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQogICAgPC9zdHlsZT4KICBgLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLE5MdC5wcm90b3R5cGUsInJlbmRlckhpZXJhcmNoeSIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sTkx0LnByb3RvdHlwZSwic2VsZWN0ZWROb2RlIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLE5MdC5wcm90b3R5cGUsIl9yYXdSZWdleElucHV0Iix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLE5MdC5wcm90b3R5cGUsIl9wcmV2aW91c1JlZ2V4SW5wdXQiLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXJ9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sTkx0LnByb3RvdHlwZSwiX3NlYXJjaFRpbWVvdXREZWxheSIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLE5MdC5wcm90b3R5cGUsIl9zZWFyY2hQZW5kaW5nIix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLE5MdC5wcm90b3R5cGUsIl9tYXhSZWdleFJlc3VsdHMiLHZvaWQgMCksdChbbyh7dHlwZTpBcnJheX0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLE5MdC5wcm90b3R5cGUsIl9yZWdleE1hdGNoZXMiLHZvaWQgMCksdChbcygicmVuZGVySGllcmFyY2h5IiwiX3Jhd1JlZ2V4SW5wdXQiKSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxOTHQucHJvdG90eXBlLCJfcmVnZXhJbnB1dCIsbnVsbCksdChbYSgiX3JlZ2V4SW5wdXQiKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLE5MdC5wcm90b3R5cGUsIl9yZWdleElucHV0Q2hhbmdlZCIsbnVsbCksTkx0PXQoW2koInRmLWdyYXBoLW5vZGUtc2VhcmNoIildLE5MdCk7Y29uc3QgSUx0PS9kZXZpY2U6KFteOl0rOlswLTldKykkLyxPTHQ9W3tyZWdleDpJTHR9XSxSTHQ9W10sekx0PW5ldyBTZXQoW3prdC5DT01QVVRFX1RJTUUsemt0Lk1FTU9SWV0pO2xldCBETHQ9Y2xhc3MgZXh0ZW5kcyh0cihubCh5ZSkpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5Db2xvckJ5PXprdCx0aGlzLnN0YXRzPW51bGwsdGhpcy5kZXZpY2VzRm9yU3RhdHM9bnVsbCx0aGlzLmNvbG9yQnk9emt0LlNUUlVDVFVSRSx0aGlzLmRhdGFzZXRzPVtdLHRoaXMuX3NlbGVjdGVkUnVuSW5kZXg9MCx0aGlzLnRyYWNlSW5wdXRzPSExLHRoaXMuYXV0b0V4dHJhY3ROb2Rlcz0hMCx0aGlzLl9zZWxlY3RlZFRhZ0luZGV4PTAsdGhpcy5fc2VsZWN0ZWRHcmFwaFR5cGU9WEN0Lk9QX0dSQVBILHRoaXMuc2hvd1Nlc3Npb25SdW5zRHJvcGRvd249ITAsdGhpcy5zaG93VXBsb2FkQnV0dG9uPSEwLHRoaXMuX2xlZ2VuZE9wZW5lZD0hMCx0aGlzLl9kb3dubG9hZEZpbGVuYW1lPSJncmFwaC5wbmcifV9vbkdyYXBoVHlwZUNoYW5nZWRCeVVzZXJHZXN0dXJlKCl7bkF0KHthY3Rpb25JZDpZQ3QuR1JBUEhfVFlQRV9DSEFOR0VELGV2ZW50TGFiZWw6dGhpcy5fc2VsZWN0ZWRHcmFwaFR5cGV9KX1fb25Db2xvckJ5Q2hhbmdlZEJ5VXNlckdlc3R1cmUoKXtuQXQoe2FjdGlvbklkOllDdC5OT0RFX0NPTE9SX01PREVfQ0hBTkdFRCxldmVudExhYmVsOnRoaXMuY29sb3JCeX0pfV9vblRyYWNlSW5wdXRzQ2hhbmdlZEJ5VXNlckdlc3R1cmUoKXtuQXQoe2FjdGlvbklkOllDdC5UUkFDRV9JTlBVVF9NT0RFX1RPR0dMRUR9KX1feGxhQ2x1c3RlcnNQcm92aWRlZCh0KXtyZXR1cm4gdCYmdC5oaWVyYXJjaHkmJnQuaGllcmFyY2h5LnhsYUNsdXN0ZXJzLmxlbmd0aD4wfV9zdGF0c0NoYW5nZWQodCl7aWYobnVsbCE9dCl7dmFyIGU9e307d2UuZWFjaCh0LmRldl9zdGF0cywoZnVuY3Rpb24odCl7dmFyIG49d2Uuc29tZShPTHQsKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlZ2V4LnRlc3QodC5kZXZpY2UpfSkpLGk9d2Uuc29tZShSTHQsKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlZ2V4LnRlc3QodC5kZXZpY2UpfSkpO24mJiFpJiYoZVt0LmRldmljZV09ITApfSkpLHRoaXMuc2V0KCJkZXZpY2VzRm9yU3RhdHMiLGUpfX1nZXQgX2N1cnJlbnREZXZpY2VzKCl7dmFyIHQ9dGhpcy5kZXZpY2VzRm9yU3RhdHM7Y29uc3QgZT10aGlzLnN0YXRzLG49KGU/ZS5kZXZfc3RhdHM6W10pLm1hcCgodD0+dC5kZXZpY2UpKS5maWx0ZXIoKHQ9Pk9MdC5zb21lKChlPT5lLnJlZ2V4LnRlc3QodCkpKSkpLGk9ZEF0KG4pO2lmKDE9PWkubGVuZ3RoKXtjb25zdCB0PWlbMF0ubWF0Y2goSUx0KTt0JiYoaVswXT10WzFdKX1yZXR1cm4gbi5tYXAoKChlLG4pPT57bGV0IHI9bnVsbDtyZXR1cm4gUkx0LmZvckVhY2goKHQ9Pnt0LnJlZ2V4LnRlc3QoZSkmJihyPXQubXNnKX0pKSx7ZGV2aWNlOmUsc3VmZml4Omlbbl0sdXNlZDp0W2VdLGlnbm9yZWRNc2c6cn19KSl9X2RldmljZUNoZWNrYm94Q2xpY2tlZCh0KXtjb25zdCBlPXQudGFyZ2V0LG49T2JqZWN0LmFzc2lnbih7fSx0aGlzLmRldmljZXNGb3JTdGF0cyksaT1lLnZhbHVlO2UuY2hlY2tlZD9uW2ldPSEwOmRlbGV0ZSBuW2ldLHRoaXMuc2V0KCJkZXZpY2VzRm9yU3RhdHMiLG4pfV9udW1UYWdzKHQsZSl7cmV0dXJuIHRoaXMuX2dldFRhZ3ModCxlKS5sZW5ndGh9X2dldFRhZ3ModCxlKXtyZXR1cm4gdCYmdFtlXT90W2VdLnRhZ3M6W119X2ZpdCgpe3RoaXMuZmlyZSgiZml0LXRhcCIpfV9pc0dyYWRpZW50Q29sb3JpbmcodCxlKXtyZXR1cm4gekx0LmhhcyhlKSYmbnVsbCE9dH1fZXF1YWxzKHQsZSl7cmV0dXJuIHQ9PT1lfWdldCBfY3VycmVudERldmljZVBhcmFtcygpe2NvbnN0IHQ9dGhpcy5jb2xvckJ5UGFyYW1zLmRldmljZS5maWx0ZXIoKHQ9Pk9MdC5zb21lKChlPT5lLnJlZ2V4LnRlc3QodC5kZXZpY2UpKSkpKSxlPWRBdCh0Lm1hcCgodD0+dC5kZXZpY2UpKSk7aWYoMT09ZS5sZW5ndGgpe3ZhciBuPWVbMF0ubWF0Y2goSUx0KTtuJiYoZVswXT1uWzFdKX1yZXR1cm4gdC5tYXAoKCh0LG4pPT4oe2RldmljZTplW25dLGNvbG9yOnQuY29sb3J9KSkpfWdldCBfY3VycmVudFhsYUNsdXN0ZXJQYXJhbXMoKXtyZXR1cm4gdGhpcy5jb2xvckJ5UGFyYW1zLnhsYV9jbHVzdGVyfWdldCBfY3VycmVudEdyYWRpZW50UGFyYW1zKCl7dmFyIHQ9dGhpcy5jb2xvckJ5UGFyYW1zLGU9dGhpcy5jb2xvckJ5O2lmKCF0aGlzLl9pc0dyYWRpZW50Q29sb3JpbmcodGhpcy5zdGF0cyxlKSlyZXR1cm47Y29uc3Qgbj10W2VdO2xldCBpPW4ubWluVmFsdWUscj1uLm1heFZhbHVlO3JldHVybiBlPT09emt0Lk1FTU9SWT8oaT11QXQoaSxsQXQpLHI9dUF0KHIsbEF0KSk6ZT09PXprdC5DT01QVVRFX1RJTUUmJihpPXVBdChpLGNBdCkscj11QXQocixjQXQpKSx7bWluVmFsdWU6aSxtYXhWYWx1ZTpyLHN0YXJ0Q29sb3I6bi5zdGFydENvbG9yLGVuZENvbG9yOm4uZW5kQ29sb3J9fWRvd25sb2FkKCl7dGhpcy5maXJlKCJkb3dubG9hZC1pbWFnZS1yZXF1ZXN0ZWQiLHRoaXMuX2Rvd25sb2FkRmlsZW5hbWUpfV91cGRhdGVGaWxlSW5wdXQodCl7Y29uc3QgZT10LnRhcmdldC5maWxlc1swXTtpZighZSlyZXR1cm47bGV0IG49ZS5uYW1lO2NvbnN0IGk9bi5sYXN0SW5kZXhPZigiLiIpO2k+PTAmJihuPW4uc3Vic3RyaW5nKDAsaSkpO2NvbnN0IHI9bi5sYXN0SW5kZXhPZigiLyIpO3I+PTAmJihuPW4uc3Vic3RyaW5nKHIrMSkpLHRoaXMuX3NldERvd25sb2FkRmlsZW5hbWUobiksdGhpcy5zZXQoInNlbGVjdGVkRmlsZSIsdCksbkF0KHthY3Rpb25JZDpZQ3QuVVBMT0FERURfR1JBUEhfRlJPTV9GSUxFU1lTVEVNfSl9X2RhdGFzZXRzQ2hhbmdlZCh0LGUpe3ZhciBuO251bGwhPWUmJih0aGlzLl9zZWxlY3RlZFJ1bkluZGV4PTApLHRoaXMuX3NldERvd25sb2FkRmlsZW5hbWUobnVsbD09PShuPXRoaXMuZGF0YXNldHNbdGhpcy5fc2VsZWN0ZWRSdW5JbmRleF0pfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLm5hbWUpfV9jb21wdXRlU2VsZWN0aW9uKHQsZSxuLGkpe3JldHVybiB0W2VdJiZ0W2VdLnRhZ3Nbbl0/e3J1bjp0W2VdLm5hbWUsdGFnOnRbZV0udGFnc1tuXS50YWcsdHlwZTppfTpudWxsfV9zZWxlY3RlZFJ1bkluZGV4Q2hhbmdlZCh0KXt2YXIgZTt0aGlzLmRhdGFzZXRzJiYodGhpcy5jb2xvckJ5PXprdC5TVFJVQ1RVUkUsdGhpcy5fc2VsZWN0ZWRUYWdJbmRleD0wLHRoaXMuX3NlbGVjdGVkR3JhcGhUeXBlPXRoaXMuX2dldERlZmF1bHRTZWxlY3Rpb25UeXBlKCksdGhpcy50cmFjZUlucHV0cz0hMSx0aGlzLl9zZXREb3dubG9hZEZpbGVuYW1lKG51bGw9PT0oZT10aGlzLmRhdGFzZXRzW3RdKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5uYW1lKSl9X3NlbGVjdGVkVGFnSW5kZXhDaGFuZ2VkKCl7dGhpcy5fc2VsZWN0ZWRHcmFwaFR5cGU9dGhpcy5fZ2V0RGVmYXVsdFNlbGVjdGlvblR5cGUoKX1fZ2V0RGVmYXVsdFNlbGVjdGlvblR5cGUoKXtjb25zdHtkYXRhc2V0czp0LF9zZWxlY3RlZFJ1bkluZGV4OmUsX3NlbGVjdGVkVGFnSW5kZXg6bn09dGhpcztpZighdHx8IXRbZV18fCF0W2VdLnRhZ3Nbbl18fHRbZV0udGFnc1tuXS5vcEdyYXBoKXJldHVybiBYQ3QuT1BfR1JBUEg7Y29uc3QgaT10W2VdO3JldHVybiBpLnRhZ3Nbbl0ucHJvZmlsZT9YQ3QuUFJPRklMRTppLnRhZ3Nbbl0uY29uY2VwdHVhbEdyYXBoP1hDdC5DT05DRVBUVUFMX0dSQVBIOlhDdC5PUF9HUkFQSH1fZ2V0RmlsZSgpe3RoaXMuJCQoIiNmaWxlIikuY2xpY2soKX1fc2V0RG93bmxvYWRGaWxlbmFtZSh0KXt0aGlzLl9kb3dubG9hZEZpbGVuYW1lPSh0fHwiZ3JhcGgiKSsiLnBuZyJ9X3N0YXRzTm90TnVsbCh0KXtyZXR1cm4gbnVsbCE9PXR9X3RvZ2dsZUxlZ2VuZE9wZW4oKXt0aGlzLnNldCgiX2xlZ2VuZE9wZW5lZCIsIXRoaXMuX2xlZ2VuZE9wZW5lZCl9X2dldFRvZ2dsZUxlZ2VuZEljb24odCl7cmV0dXJuIHQ/ImV4cGFuZC1tb3JlIjoiZXhwYW5kLWxlc3MifV9nZXRTZWxlY3Rpb25PcEdyYXBoRGlzYWJsZWQodCxlLG4pe3JldHVybiF0W2VdfHwhdFtlXS50YWdzW25dfHwhdFtlXS50YWdzW25dLm9wR3JhcGh9X2dldFNlbGVjdGlvblByb2ZpbGVEaXNhYmxlZCh0LGUsbil7cmV0dXJuIXRbZV18fCF0W2VdLnRhZ3Nbbl18fCF0W2VdLnRhZ3Nbbl0ucHJvZmlsZX1fZ2V0U2VsZWN0aW9uQ29uY2VwdHVhbEdyYXBoRGlzYWJsZWQodCxlLG4pe3JldHVybiF0W2VdfHwhdFtlXS50YWdzW25dfHwhdFtlXS50YWdzW25dLmNvbmNlcHR1YWxHcmFwaH19O0RMdC50ZW1wbGF0ZT1fZWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGNvbG9yOiAjNTU1OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgLS10Yi1ncmFwaC1jb250cm9scy10aXRsZS1jb2xvcjogIzAwMDsKICAgICAgICAtLXRiLWdyYXBoLWNvbnRyb2xzLWxlZ2VuZC10ZXh0LWNvbG9yOiAjMDAwOwogICAgICAgIC0tdGItZ3JhcGgtY29udHJvbHMtdGV4dC1jb2xvcjogIzU1NTsKICAgICAgICAtLXRiLWdyYXBoLWNvbnRyb2xzLXRpdGxlLWZvbnQtc2l6ZTogMTRweDsKICAgICAgICAtLXRiLWdyYXBoLWNvbnRyb2xzLXN1YnRpdGxlLWZvbnQtc2l6ZTogMTRweDsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1zaGFyZWQtaW5wdXQtc3R5bGVfLV9mb250LXNpemU6IDE0cHg7CiAgICAgICAgLS1wYXBlci1mb250LXN1YmhlYWRfLV9mb250LXNpemU6IDE0cHg7CiAgICAgIH0KCiAgICAgIDpob3N0KC5kYXJrLW1vZGUpIHsKICAgICAgICAtLXRiLWdyYXBoLWNvbnRyb2xzLXRpdGxlLWNvbG9yOiAjZmZmOwogICAgICAgIC0tdGItZ3JhcGgtY29udHJvbHMtbGVnZW5kLXRleHQtY29sb3I6ICNmM2YzZjM7CiAgICAgICAgLS10Yi1ncmFwaC1jb250cm9scy10ZXh0LWNvbG9yOiAjZWVlOwogICAgICB9CgogICAgICBwYXBlci1kcm9wZG93bi1tZW51IHsKICAgICAgICAtLXBhcGVyLWRyb3Bkb3duLW1lbnUtaW5wdXQ6IHsKICAgICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgICBjb2xvcjogZ3JheTsKICAgICAgICB9CiAgICAgICAgLS1pcm9uLWljb24td2lkdGg6IDE1cHg7CiAgICAgICAgLS1pcm9uLWljb24taGVpZ2h0OiAxNXB4OwogICAgICAgIC0tcHJpbWFyeS10ZXh0LWNvbG9yOiBncmF5OwogICAgICAgIC0tcGFwZXItaXRlbS1taW4taGVpZ2h0OiAzMHB4OwogICAgICB9CgogICAgICBwYXBlci1idXR0b25bcmFpc2VkXS5rZXlib2FyZC1mb2N1cyB7CiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgICAgfQoKICAgICAgLnJ1bi1kcm9wZG93biB7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXI6IHsKICAgICAgICAgIHBhZGRpbmc6IDVweCAwIDVweCA1cHg7CiAgICAgICAgfQogICAgICB9CgogICAgICB0YWJsZSB7CiAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKICAgICAgICBib3JkZXItc3BhY2luZzogMDsKICAgICAgfQoKICAgICAgdGFibGUgdHIgewogICAgICAgIGhlaWdodDogMjBweDsKICAgICAgfQoKICAgICAgdGFibGUgdGQgewogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICB9CgogICAgICAuYWxsY29udHJvbHMgewogICAgICAgIHBhZGRpbmc6IDAgMjBweCAyMHB4OwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CgogICAgICAubGVnZW5kLWhvbGRlciB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tc2Vjb25kYXJ5LWJhY2tncm91bmQtY29sb3IpOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLWdyYXBoLWNvbnRyb2xzLXRleHQtY29sb3IpOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAubGVnZW5kLXRvb2xiYXIgewogICAgICAgIGFwcGVhcmFuY2U6IG5vbmU7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogaW5oZXJpdDsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2NjYzsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2NjYzsKICAgICAgICBib3JkZXItcmlnaHQ6IG5vbmU7CiAgICAgICAgYm9yZGVyLWxlZnQ6IG5vbmU7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1ncmFwaC1jb250cm9scy1sZWdlbmQtdGV4dC1jb2xvcik7CiAgICAgICAgZm9udDogaW5oZXJpdDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAubGVnZW5kLXRvb2xiYXIsCiAgICAgIC5sZWdlbmQtY29udGVudCB7CiAgICAgICAgcGFkZGluZzogOHB4IDIwcHg7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtbGVnZW5kLWJ1dHRvbiB7CiAgICAgICAgbWF4LWhlaWdodDogMjBweDsKICAgICAgICBtYXgtd2lkdGg6IDIwcHg7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1sZWdlbmQtdGV4dCB7CiAgICAgICAgZm9udC1zaXplOiB2YXIoLS10Yi1ncmFwaC1jb250cm9scy1zdWJ0aXRsZS1mb250LXNpemUpOwogICAgICB9CgogICAgICBwYXBlci1yYWRpby1idXR0b24gewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmc6IDVweDsKICAgICAgfQogICAgICBzdmcuaWNvbiwKICAgICAgdGYtZ3JhcGgtaWNvbiB7CiAgICAgICAgd2lkdGg6IDYwcHg7CiAgICAgICAgaGVpZ2h0OiAxOHB4OwogICAgICB9CiAgICAgIC5kb21haW5WYWx1ZXMgewogICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7CiAgICAgICAgd2lkdGg6IDE2NXB4OwogICAgICB9CiAgICAgIC5kb21haW5TdGFydCB7CiAgICAgICAgZmxvYXQ6IGxlZnQ7CiAgICAgIH0KICAgICAgLmRvbWFpbkVuZCB7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICB9CiAgICAgIC5jb2xvckJveCB7CiAgICAgICAgd2lkdGg6IDIwcHg7CiAgICAgIH0KCiAgICAgIC5pbWFnZS1pY29uIHsKICAgICAgICB3aWR0aDogMjRweDsKICAgICAgICBoZWlnaHQ6IDI0cHg7CiAgICAgIH0KCiAgICAgIC5oZWxwLWljb24gewogICAgICAgIGhlaWdodDogMTVweDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQoKICAgICAgLmdyYXkgewogICAgICAgIGNvbG9yOiAjNjY2OwogICAgICB9CgogICAgICAudGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tdGItZ3JhcGgtY29udHJvbHMtdGl0bGUtZm9udC1zaXplKTsKICAgICAgICBtYXJnaW46IDhweCA1cHggOHB4IDA7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLWdyYXBoLWNvbnRyb2xzLXRpdGxlLWNvbG9yKTsKICAgICAgfQogICAgICAudGl0bGUgc21hbGwgewogICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgIH0KICAgICAgLmRldmljZUxpc3QsCiAgICAgIC54bGFDbHVzdGVyTGlzdCB7CiAgICAgICAgbWF4LWhlaWdodDogMjAwcHg7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgfQoKICAgICAgI2ZpbGUgewogICAgICAgIHBhZGRpbmc6IDhweCAwOwogICAgICB9CgogICAgICAuY29sb3ItbGVnZW5kLXJvdyB7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBjbGVhcjogYm90aDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGhlaWdodDogMjBweDsKICAgICAgICBtYXJnaW4tdG9wOiA1cHg7CiAgICAgIH0KCiAgICAgIC5jb2xvci1sZWdlbmQtcm93IC5sYWJlbCwKICAgICAgLmNvbG9yLWxlZ2VuZC1yb3cgc3ZnLAogICAgICAuY29sb3ItbGVnZW5kLXJvdyB0Zi1ncmFwaC1pY29uIHsKICAgICAgICBmbGV4OiAwIDAgNDBweDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDIwcHg7CiAgICAgIH0KCiAgICAgIC5kZXZpY2VzLWNoZWNrYm94IGlucHV0IHsKICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgICAgIH0KCiAgICAgIC5jb250cm9sLWhvbGRlciAuaWNvbi1idXR0b24gewogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tdGItZ3JhcGgtY29udHJvbHMtc3VidGl0bGUtZm9udC1zaXplKTsKICAgICAgICBtYXJnaW46IDAgLTVweDsKICAgICAgICBwYWRkaW5nOiA1cHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLWdyYXBoLWNvbnRyb2xzLXRleHQtY29sb3IpOwogICAgICB9CgogICAgICAuYnV0dG9uLXRleHQgewogICAgICAgIHBhZGRpbmctbGVmdDogMjBweDsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTsKICAgICAgfQoKICAgICAgLnVwbG9hZC1idXR0b24gewogICAgICAgIHdpZHRoOiAxNjVweDsKICAgICAgICBoZWlnaHQ6IDI1cHg7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7CiAgICAgICAgbWFyZ2luLXRvcDogNHB4OwogICAgICB9CgogICAgICAuYnV0dG9uLWljb24gewogICAgICAgIHdpZHRoOiAyNnB4OwogICAgICAgIGhlaWdodDogMjZweDsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItb3JhbmdlLTUwMCk7CiAgICAgIH0KCiAgICAgIC5oaWRkZW4taW5wdXQgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5hbGxjb250cm9scyAuY29udHJvbC1ob2xkZXIgewogICAgICAgIGNsZWFyOiBib3RoOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICB9CgogICAgICAuYWxsY29udHJvbHMgLmNvbnRyb2wtaG9sZGVyLmNvbnRyb2wtb3B0aW9ucyB7CiAgICAgICAgcGFkZGluZzogMCAwIDE1cHggMTVweDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICB9CgogICAgICAuYWxsY29udHJvbHMgLmNvbnRyb2wtaG9sZGVyIHBhcGVyLXRvZ2dsZS1idXR0b24gewogICAgICAgIG1hcmdpbi1ib3R0b206IDVweDsKICAgICAgfQoKICAgICAgc3Bhbi5jb3VudGVyIHsKICAgICAgICBmb250LXNpemU6IHZhcigtLXRiLWdyYXBoLWNvbnRyb2xzLXN1YnRpdGxlLWZvbnQtc2l6ZSk7CiAgICAgICAgY29sb3I6IGdyYXk7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDRweDsKICAgICAgfQoKICAgICAgLnJ1bnMtcm93IC50aXRsZSwKICAgICAgLnRhZ3Mtcm93IC50aXRsZSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogYmFzZWxpbmU7CiAgICAgIH0KCiAgICAgIC5ydW5zLXJvdyBwYXBlci1pdGVtLAogICAgICAudGFncy1yb3cgcGFwZXItaXRlbSB7CiAgICAgICAgLS1wYXBlci1pdGVtOiB7CiAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIH0KICAgICAgfQoKICAgICAgdGFibGUuY29udHJvbC1ob2xkZXIgewogICAgICAgIGJvcmRlcjogMDsKICAgICAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwogICAgICB9CgogICAgICB0YWJsZS50Zi1ncmFwaC1jb250cm9scyB0ZC5pbnB1dC1lbGVtZW50LXRhYmxlLWRhdGEgewogICAgICAgIHBhZGRpbmc6IDAgMCAwIDIwcHg7CiAgICAgIH0KCiAgICAgIC5zcGFjZXIgewogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgfQoKICAgICAgLmNvbG9yLXRleHQgewogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5jb2xvci10ZXh0LmdyYWRpZW50LWNvbnRhaW5lciB7CiAgICAgICAgbWFyZ2luOiAwIDVweDsKICAgICAgfQoKICAgICAgLyoqIE92ZXJyaWRlIGlubGluZSBzdHlsZXMgdGhhdCBzdXBwcmVzcyBwb2ludGVyIGV2ZW50cyBmb3IgZGlzYWJsZWQgYnV0dG9ucy4gT3RoZXJ3aXNlLCB0aGUgKi8KICAgICAgLyogIHRvb2x0aXBzIGRvIG5vdCBhcHBlYXIuICovCiAgICAgIHBhcGVyLXJhZGlvLWdyb3VwIHBhcGVyLXJhZGlvLWJ1dHRvbiB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG8gIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgLmxlZ2VuZC1jbGFyaWZpZXIgewogICAgICAgIGNvbG9yOiAjMjY2MjM2OwogICAgICAgIGN1cnNvcjogaGVscDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICAgIH0KCiAgICAgIC5sZWdlbmQtY2xhcmlmaWVyIHBhcGVyLXRvb2x0aXAgewogICAgICAgIHdpZHRoOiAxNTBweDsKICAgICAgfQoKICAgICAgLyoqIE90aGVyd2lzZSwgcG9seW1lciBVSSBjb250cm9scyBhcHBlYXIgYXRvcCBub2RlIHNlYXJjaC4gKi8KICAgICAgdGYtZ3JhcGgtbm9kZS1zZWFyY2ggewogICAgICAgIHotaW5kZXg6IDE7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIHBhcGVyLWRyb3Bkb3duLW1lbnUgewogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGNsYXNzPSJhbGxjb250cm9scyI+CiAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtaG9sZGVyIj4KICAgICAgICA8dGYtZ3JhcGgtbm9kZS1zZWFyY2gKICAgICAgICAgIHNlbGVjdGVkLW5vZGU9Int7c2VsZWN0ZWROb2RlfX0iCiAgICAgICAgICByZW5kZXItaGllcmFyY2h5PSJbW3JlbmRlckhpZXJhcmNoeV1dIgogICAgICAgID48L3RmLWdyYXBoLW5vZGUtc2VhcmNoPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ob2xkZXIiPgogICAgICAgIDxwYXBlci1idXR0b24gY2xhc3M9Imljb24tYnV0dG9uIiBvbi10YXA9Il9maXQiIGFsdD0iRml0IHRvIHNjcmVlbiI+CiAgICAgICAgICA8aXJvbi1pY29uIGljb249ImFzcGVjdC1yYXRpbyIgY2xhc3M9ImJ1dHRvbi1pY29uIj48L2lyb24taWNvbj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJidXR0b24tdGV4dCI+Rml0IHRvIHNjcmVlbjwvc3Bhbj4KICAgICAgICA8L3BhcGVyLWJ1dHRvbj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtaG9sZGVyIj4KICAgICAgICA8cGFwZXItYnV0dG9uCiAgICAgICAgICBjbGFzcz0iaWNvbi1idXR0b24iCiAgICAgICAgICBvbi1jbGljaz0iZG93bmxvYWQiCiAgICAgICAgICBhbHQ9IkRvd25sb2FkIFBORyIKICAgICAgICA+CiAgICAgICAgICA8aXJvbi1pY29uIGljb249ImZpbGUtZG93bmxvYWQiIGNsYXNzPSJidXR0b24taWNvbiI+PC9pcm9uLWljb24+CiAgICAgICAgICA8c3BhbiBjbGFzcz0iYnV0dG9uLXRleHQiPkRvd25sb2FkIFBORzwvc3Bhbj4KICAgICAgICA8L3BhcGVyLWJ1dHRvbj4KICAgICAgPC9kaXY+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzaG93VXBsb2FkQnV0dG9uXV0iPgogICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtaG9sZGVyIj4KICAgICAgICAgIDxwYXBlci1idXR0b24KICAgICAgICAgICAgY2xhc3M9Imljb24tYnV0dG9uIgogICAgICAgICAgICBvbi1jbGljaz0iX2dldEZpbGUiCiAgICAgICAgICAgIGFsdD0iVXBsb2FkIGZpbGUiCiAgICAgICAgICAgIHRpdGxlPSJVcGxvYWQgYSBwYnR4dCBmaWxlIHRvIHZpZXcgYSBncmFwaCBmcm9tIHRoZSBsb2NhbCBmaWxlc3lzdGVtIgogICAgICAgICAgPgogICAgICAgICAgICA8aXJvbi1pY29uIGljb249ImZpbGUtdXBsb2FkIiBjbGFzcz0iYnV0dG9uLWljb24iPjwvaXJvbi1pY29uPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iYnV0dG9uLXRleHQiPlVwbG9hZCBmaWxlPC9zcGFuPgogICAgICAgICAgPC9wYXBlci1idXR0b24+CgogICAgICAgICAgPGRpdiBjbGFzcz0iaGlkZGVuLWlucHV0Ij4KICAgICAgICAgICAgPGlucHV0CiAgICAgICAgICAgICAgdHlwZT0iZmlsZSIKICAgICAgICAgICAgICBpZD0iZmlsZSIKICAgICAgICAgICAgICBuYW1lPSJmaWxlIgogICAgICAgICAgICAgIG9uLWNoYW5nZT0iX3VwZGF0ZUZpbGVJbnB1dCIKICAgICAgICAgICAgICBhY2NlcHQ9Ii5wYnR4dCIKICAgICAgICAgICAgLz4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWhvbGRlciBydW5zLXJvdyI+CiAgICAgICAgPGRpdiBjbGFzcz0idGl0bGUiPgogICAgICAgICAgUnVuIDxzcGFuIGNsYXNzPSJjb3VudGVyIj4oW1tkYXRhc2V0cy5sZW5ndGhdXSk8L3NwYW4+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUKICAgICAgICAgIG5vLWxhYmVsLWZsb2F0CiAgICAgICAgICBuby1hbmltYXRpb25zCiAgICAgICAgICBub2luawogICAgICAgICAgaG9yaXpvbnRhbC1hbGlnbj0ibGVmdCIKICAgICAgICAgIGNsYXNzPSJydW4tZHJvcGRvd24iCiAgICAgICAgPgogICAgICAgICAgPHBhcGVyLWxpc3Rib3gKICAgICAgICAgICAgY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiCiAgICAgICAgICAgIHNlbGVjdGVkPSJ7e19zZWxlY3RlZFJ1bkluZGV4fX0iCiAgICAgICAgICAgIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiCiAgICAgICAgICA+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbZGF0YXNldHNdXSI+CiAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+W1tpdGVtLm5hbWVdXTwvcGFwZXItaXRlbT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgIDwvZGl2PgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Iltbc2hvd1Nlc3Npb25SdW5zRHJvcGRvd25dXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ob2xkZXIgdGFncy1yb3ciPgogICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGUiPgogICAgICAgICAgICBUYWcKICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvdW50ZXIiCiAgICAgICAgICAgICAgPihbW19udW1UYWdzKGRhdGFzZXRzLCBfc2VsZWN0ZWRSdW5JbmRleCldXSk8L3NwYW4KICAgICAgICAgICAgPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudQogICAgICAgICAgICBuby1sYWJlbC1mbG9hdAogICAgICAgICAgICBuby1hbmltYXRpb25zCiAgICAgICAgICAgIGhvcml6b250YWwtYWxpZ249ImxlZnQiCiAgICAgICAgICAgIG5vaW5rCiAgICAgICAgICAgIGNsYXNzPSJydW4tZHJvcGRvd24iCiAgICAgICAgICA+CiAgICAgICAgICAgIDxwYXBlci1saXN0Ym94CiAgICAgICAgICAgICAgY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiCiAgICAgICAgICAgICAgc2VsZWN0ZWQ9Int7X3NlbGVjdGVkVGFnSW5kZXh9fSIKICAgICAgICAgICAgICBzbG90PSJkcm9wZG93bi1jb250ZW50IgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPHRlbXBsYXRlCiAgICAgICAgICAgICAgICBpcz0iZG9tLXJlcGVhdCIKICAgICAgICAgICAgICAgIGl0ZW1zPSJbW19nZXRUYWdzKGRhdGFzZXRzLCBfc2VsZWN0ZWRSdW5JbmRleCldXSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8cGFwZXItaXRlbT5bW2l0ZW0uZGlzcGxheU5hbWVdXTwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDxkaXYgY2xhc3M9InRpdGxlIj5HcmFwaCB0eXBlPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtaG9sZGVyIGNvbnRyb2wtb3B0aW9ucyI+CiAgICAgICAgPHBhcGVyLXJhZGlvLWdyb3VwCiAgICAgICAgICBzZWxlY3RlZD0ie3tfc2VsZWN0ZWRHcmFwaFR5cGV9fSIKICAgICAgICAgIG9uLXBhcGVyLXJhZGlvLWdyb3VwLWNoYW5nZWQ9Il9vbkdyYXBoVHlwZUNoYW5nZWRCeVVzZXJHZXN0dXJlIgogICAgICAgID4KICAgICAgICAgIDwhLS0gTm90ZSB0aGF0IHRoZSBuYW1lIGhhcyB0byBtYXRjaCB0aGF0IG9mIHRmX2dyYXBoX2NvbW1vbi5TZWxlY3Rpb25UeXBlLiAtLT4KICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24KICAgICAgICAgICAgbmFtZT0ib3BfZ3JhcGgiCiAgICAgICAgICAgIGRpc2FibGVkPSJbW19nZXRTZWxlY3Rpb25PcEdyYXBoRGlzYWJsZWQoZGF0YXNldHMsIF9zZWxlY3RlZFJ1bkluZGV4LCBfc2VsZWN0ZWRUYWdJbmRleCldXSIKICAgICAgICAgICAgPk9wIGdyYXBoPC9wYXBlci1yYWRpby1idXR0b24KICAgICAgICAgID4KICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24KICAgICAgICAgICAgbmFtZT0iY29uY2VwdHVhbF9ncmFwaCIKICAgICAgICAgICAgZGlzYWJsZWQ9IltbX2dldFNlbGVjdGlvbkNvbmNlcHR1YWxHcmFwaERpc2FibGVkKGRhdGFzZXRzLCBfc2VsZWN0ZWRSdW5JbmRleCwgX3NlbGVjdGVkVGFnSW5kZXgpXV0iCiAgICAgICAgICAgID5Db25jZXB0dWFsIGdyYXBoPC9wYXBlci1yYWRpby1idXR0b24KICAgICAgICAgID4KICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24KICAgICAgICAgICAgbmFtZT0icHJvZmlsZSIKICAgICAgICAgICAgZGlzYWJsZWQ9IltbX2dldFNlbGVjdGlvblByb2ZpbGVEaXNhYmxlZChkYXRhc2V0cywgX3NlbGVjdGVkUnVuSW5kZXgsIF9zZWxlY3RlZFRhZ0luZGV4KV1dIgogICAgICAgICAgICA+UHJvZmlsZTwvcGFwZXItcmFkaW8tYnV0dG9uCiAgICAgICAgICA+CiAgICAgICAgPC9wYXBlci1yYWRpby1ncm91cD4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InRpdGxlIj5Ob2RlIG9wdGlvbnM8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ob2xkZXIgY29udHJvbC1vcHRpb25zIj4KICAgICAgICA8cGFwZXItdG9nZ2xlLWJ1dHRvbgogICAgICAgICAgY2hlY2tlZD0ie3t0cmFjZUlucHV0c319IgogICAgICAgICAgb24tY2hhbmdlPSJfb25UcmFjZUlucHV0c0NoYW5nZWRCeVVzZXJHZXN0dXJlIgogICAgICAgID4KICAgICAgICAgIFRyYWNlIGlucHV0cwogICAgICAgIDwvcGFwZXItdG9nZ2xlLWJ1dHRvbj4KICAgICAgICA8cGFwZXItdG9nZ2xlLWJ1dHRvbiBjaGVja2VkPSJ7e2F1dG9FeHRyYWN0Tm9kZXN9fSI+CiAgICAgICAgICBBdXRvLWV4dHJhY3QgaGlnaC1kZWdyZWUgbm9kZXMKICAgICAgICA8L3BhcGVyLXRvZ2dsZS1idXR0b24+CiAgICAgIDwvZGl2PgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbaGVhbHRoUGlsbHNGZWF0dXJlRW5hYmxlZF1dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWhvbGRlciI+CiAgICAgICAgICA8cGFwZXItdG9nZ2xlLWJ1dHRvbiBjaGVja2VkPSJ7e2hlYWx0aFBpbGxzVG9nZ2xlZE9ufX0iCiAgICAgICAgICAgID5TaG93IGhlYWx0aCBwaWxsczwvcGFwZXItdG9nZ2xlLWJ1dHRvbgogICAgICAgICAgPgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgICA8ZGl2IGNsYXNzPSJ0aXRsZSI+Q29sb3IgYnk8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ob2xkZXIgY29udHJvbC1vcHRpb25zIj4KICAgICAgICA8cGFwZXItcmFkaW8tZ3JvdXAKICAgICAgICAgIHNlbGVjdGVkPSJ7e2NvbG9yQnl9fSIKICAgICAgICAgIG9uLXBhcGVyLXJhZGlvLWdyb3VwLWNoYW5nZWQ9Il9vbkNvbG9yQnlDaGFuZ2VkQnlVc2VyR2VzdHVyZSIKICAgICAgICA+CiAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIG5hbWU9IltbQ29sb3JCeS5OT05FXV0iPk5vbmU8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KCiAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIG5hbWU9IltbQ29sb3JCeS5TVFJVQ1RVUkVdXSIKICAgICAgICAgICAgPlN0cnVjdHVyZTwvcGFwZXItcmFkaW8tYnV0dG9uCiAgICAgICAgICA+CgogICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBuYW1lPSJbW0NvbG9yQnkuREVWSUNFXV0iCiAgICAgICAgICAgID5EZXZpY2U8L3BhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgPgoKICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24KICAgICAgICAgICAgaWQ9InhsYS1jbHVzdGVyLXJhZGlvLWJ1dHRvbiIKICAgICAgICAgICAgbmFtZT0iW1tDb2xvckJ5LlhMQV9DTFVTVEVSXV0iCiAgICAgICAgICAgIGRpc2FibGVkPSJbWyFfeGxhQ2x1c3RlcnNQcm92aWRlZChyZW5kZXJIaWVyYXJjaHkpXV0iCiAgICAgICAgICA+CiAgICAgICAgICAgIFhMQSBjbHVzdGVyCiAgICAgICAgICA8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgICAgIDxwYXBlci10b29sdGlwCiAgICAgICAgICAgIGFuaW1hdGlvbi1kZWxheT0iMCIKICAgICAgICAgICAgZm9yPSJ4bGEtY2x1c3Rlci1yYWRpby1idXR0b24iCiAgICAgICAgICAgIHBvc2l0aW9uPSJyaWdodCIKICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgPgogICAgICAgICAgICBDb2xvcmluZyBieSBYTEEgY2x1c3RlciBpcyBvbmx5IGVuYWJsZWQgaWYgYXQgbGVhc3QgMSBvcCBzcGVjaWZpZXMKICAgICAgICAgICAgYW4gWExBIGNsdXN0ZXIuCiAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CgogICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgICBpZD0iY29tcHV0ZS10aW1lLXJhZGlvLWJ1dHRvbiIKICAgICAgICAgICAgbmFtZT0iW1tDb2xvckJ5LkNPTVBVVEVfVElNRV1dIgogICAgICAgICAgICBkaXNhYmxlZD0iW1shc3RhdHNdXSIKICAgICAgICAgID4KICAgICAgICAgICAgQ29tcHV0ZSB0aW1lCiAgICAgICAgICA8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgICAgIDxwYXBlci10b29sdGlwCiAgICAgICAgICAgIGFuaW1hdGlvbi1kZWxheT0iMCIKICAgICAgICAgICAgZm9yPSJjb21wdXRlLXRpbWUtcmFkaW8tYnV0dG9uIgogICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgID4KICAgICAgICAgICAgQ29sb3JpbmcgYnkgY29tcHV0ZSB0aW1lIGlzIG9ubHkgZW5hYmxlZCBpZiB0aGUgUnVuTWV0YWRhdGEgcHJvdG8gaXMKICAgICAgICAgICAgcGFzc2VkIHRvIHRoZSBGaWxlV3JpdGVyIHdoZW4gYSBzcGVjaWZpYyBzZXNzaW9uIGlzIHJ1bi4KICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KCiAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uCiAgICAgICAgICAgIGlkPSJtZW1vcnktcmFkaW8tYnV0dG9uIgogICAgICAgICAgICBuYW1lPSJbW0NvbG9yQnkuTUVNT1JZXV0iCiAgICAgICAgICAgIGRpc2FibGVkPSJbWyFzdGF0c11dIgogICAgICAgICAgPgogICAgICAgICAgICBNZW1vcnkKICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgPHBhcGVyLXRvb2x0aXAKICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICBmb3I9Im1lbW9yeS1yYWRpby1idXR0b24iCiAgICAgICAgICAgIHBvc2l0aW9uPSJyaWdodCIKICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgPgogICAgICAgICAgICBDb2xvcmluZyBieSBtZW1vcnkgaXMgb25seSBlbmFibGVkIGlmIHRoZSBSdW5NZXRhZGF0YSBwcm90byBpcwogICAgICAgICAgICBwYXNzZWQgdG8gdGhlIEZpbGVXcml0ZXIgd2hlbiBhIHNwZWNpZmljIHNlc3Npb24gaXMgcnVuLgogICAgICAgICAgPC9wYXBlci10b29sdGlwPgoKICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24KICAgICAgICAgICAgaWQ9InRwdS1jb21wYXRpYmlsaXR5LXJhZGlvLWJ1dHRvbiIKICAgICAgICAgICAgbmFtZT0iW1tDb2xvckJ5Lk9QX0NPTVBBVElCSUxJVFldXSIKICAgICAgICAgID4KICAgICAgICAgICAgVFBVIGNvbXBhdGliaWxpdHkKICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgPHBhcGVyLXRvb2x0aXAKICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICBmb3I9InRwdS1jb21wYXRpYmlsaXR5LXJhZGlvLWJ1dHRvbiIKICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICA+CiAgICAgICAgICAgIENvbG9yaW5nIGJ5IHdoZXRoZXIgYW4gb3BlcmF0aW9uIGlzIGNvbXBhdGlibGUgZm9yIHRoZSBUUFUgZGV2aWNlLgogICAgICAgICAgPC9wYXBlci10b29sdGlwPgogICAgICAgIDwvcGFwZXItcmFkaW8tZ3JvdXA+CiAgICAgICAgPHNwYW4gY2xhc3M9InNwYWNlciI+PC9zcGFuPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0ibGVnZW5kLWhvbGRlciI+CiAgICAgIDxidXR0b24gY2xhc3M9ImxlZ2VuZC10b29sYmFyIiBvbi1jbGljaz0iX3RvZ2dsZUxlZ2VuZE9wZW4iPgogICAgICAgIDxzcGFuIGNsYXNzPSJ0b2dnbGUtbGVnZW5kLXRleHQiPkxlZ2VuZDwvc3Bhbj4KICAgICAgICA8aXJvbi1pY29uCiAgICAgICAgICBpY29uPSJbW19nZXRUb2dnbGVMZWdlbmRJY29uKF9sZWdlbmRPcGVuZWQpXV0iCiAgICAgICAgICBjbGFzcz0idG9nZ2xlLWxlZ2VuZC1idXR0b24iCiAgICAgICAgPgogICAgICAgIDwvaXJvbi1pY29uPgogICAgICA8L2J1dHRvbj4KICAgICAgPGlyb24tY29sbGFwc2Ugb3BlbmVkPSJbW19sZWdlbmRPcGVuZWRdXSIgY2xhc3M9ImxlZ2VuZC1jb250ZW50Ij4KICAgICAgICA8IS0tIENvbG9yLW1vZGUtc3BlY2lmaWMgbGVnZW5kIGl0ZW1zIC0tPgogICAgICAgIDxkaXY+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzR3JhZGllbnRDb2xvcmluZyhzdGF0cywgY29sb3JCeSldXSI+CiAgICAgICAgICAgIDxzdmcgd2lkdGg9IjE0MCIgaGVpZ2h0PSIyMCIgY2xhc3M9ImNvbG9yLXRleHQgZ3JhZGllbnQtY29udGFpbmVyIj4KICAgICAgICAgICAgICA8ZGVmcz4KICAgICAgICAgICAgICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgICAgICAgICAgICBpZD0ibGluZWFyR3JhZGllbnQiCiAgICAgICAgICAgICAgICAgIHgxPSIwJSIKICAgICAgICAgICAgICAgICAgeTE9IjAlIgogICAgICAgICAgICAgICAgICB4Mj0iMTAwJSIKICAgICAgICAgICAgICAgICAgeTI9IjAlIgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICA8c3RvcAogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzdGFydCIKICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAlIgogICAgICAgICAgICAgICAgICAgIHN0b3AtY29sb3IkPSJbW19jdXJyZW50R3JhZGllbnRQYXJhbXMuc3RhcnRDb2xvcl1dIgogICAgICAgICAgICAgICAgICA+PC9zdG9wPgogICAgICAgICAgICAgICAgICA8c3RvcAogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJlbmQiCiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIxMDAlIgogICAgICAgICAgICAgICAgICAgIHN0b3AtY29sb3IkPSJbW19jdXJyZW50R3JhZGllbnRQYXJhbXMuZW5kQ29sb3JdXSIKICAgICAgICAgICAgICAgICAgPjwvc3RvcD4KICAgICAgICAgICAgICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICAgICAgICAgICAgPC9kZWZzPgogICAgICAgICAgICAgIDxyZWN0CiAgICAgICAgICAgICAgICB4PSIwIgogICAgICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgICAgIHdpZHRoPSIxMzUiCiAgICAgICAgICAgICAgICBoZWlnaHQ9IjIwIgogICAgICAgICAgICAgICAgZmlsbD0idXJsKCNsaW5lYXJHcmFkaWVudCkiCiAgICAgICAgICAgICAgICBzdHJva2U9ImJsYWNrIgogICAgICAgICAgICAgID48L3JlY3Q+CiAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJkb21haW5WYWx1ZXMgY29sb3ItdGV4dCI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZG9tYWluU3RhcnQiPltbX2N1cnJlbnRHcmFkaWVudFBhcmFtcy5taW5WYWx1ZV1dPC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZG9tYWluRW5kIj5bW19jdXJyZW50R3JhZGllbnRQYXJhbXMubWF4VmFsdWVdXTwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGJyIHN0eWxlPSJjbGVhcjogYm90aCIgLz4KICAgICAgICAgICAgPGRpdj5EZXZpY2VzIGluY2x1ZGVkIGluIHN0YXRzOjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJkZXZpY2VMaXN0Ij4KICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jdXJyZW50RGV2aWNlc11dIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLWxlZ2VuZC1yb3cgZGV2aWNlcy1jaGVja2JveCI+CiAgICAgICAgICAgICAgICAgIDxzcGFuCiAgICAgICAgICAgICAgICAgICAgPjxpbnB1dAogICAgICAgICAgICAgICAgICAgICAgdHlwZT0iY2hlY2tib3giCiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSQ9IltbaXRlbS5kZXZpY2VdXSIKICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQkPSJbW2l0ZW0udXNlZF1dIgogICAgICAgICAgICAgICAgICAgICAgb24tY2xpY2s9Il9kZXZpY2VDaGVja2JveENsaWNrZWQiCiAgICAgICAgICAgICAgICAgIC8+PC9zcGFuPgogICAgICAgICAgICAgICAgICA8c3Bhbj5bW2l0ZW0uc3VmZml4XV08L3NwYW4+CiAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tpdGVtLmlnbm9yZWRNc2ddXSI+CiAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgICAgICAgICAgICAgICBpY29uPSJoZWxwIgogICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImhlbHAtaWNvbiIKICAgICAgICAgICAgICAgICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICAgICAgPltbaXRlbS5pZ25vcmVkTXNnXV08L3BhcGVyLXRvb2x0aXAKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2VxdWFscyhjb2xvckJ5LCAnc3RydWN0dXJlJyldXSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLXRleHQiPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLWxlZ2VuZC1yb3ciPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxhYmVsIj4gY29sb3JzIDwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb2xvci1sZWdlbmQtdmFsdWUiPnNhbWUgc3Vic3RydWN0dXJlPC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLWxlZ2VuZC1yb3ciPgogICAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24KICAgICAgICAgICAgICAgICAgdHlwZT0iTUVUQSIKICAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxNiIKICAgICAgICAgICAgICAgICAgZmlsbC1vdmVycmlkZT0iI2VlZSIKICAgICAgICAgICAgICAgICAgc3Ryb2tlLW92ZXJyaWRlPSIjYTZhNmE2IgogICAgICAgICAgICAgICAgPjwvdGYtZ3JhcGgtaWNvbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb2xvci1sZWdlbmQtdmFsdWUiPnVuaXF1ZSBzdWJzdHJ1Y3R1cmU8L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZXF1YWxzKGNvbG9yQnksICdkZXZpY2UnKV1dIj4KICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jdXJyZW50RGV2aWNlUGFyYW1zXV0iPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyI+CiAgICAgICAgICAgICAgICAgIDx0Zi1ncmFwaC1pY29uCiAgICAgICAgICAgICAgICAgICAgdHlwZT0iTUVUQSIKICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9IjE2IgogICAgICAgICAgICAgICAgICAgIGZpbGwtb3ZlcnJpZGU9IltbaXRlbS5jb2xvcl1dIgogICAgICAgICAgICAgICAgICAgIHN0cm9rZS1vdmVycmlkZT0iI2E2YTZhNiIKICAgICAgICAgICAgICAgICAgPjwvdGYtZ3JhcGgtaWNvbj4KICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvbG9yLWxlZ2VuZC12YWx1ZSI+W1tpdGVtLmRldmljZV1dPC9zcGFuPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2xvci1sZWdlbmQtcm93Ij4KICAgICAgICAgICAgICAgIDx0Zi1ncmFwaC1pY29uCiAgICAgICAgICAgICAgICAgIHR5cGU9Ik1FVEEiCiAgICAgICAgICAgICAgICAgIGhlaWdodD0iMTYiCiAgICAgICAgICAgICAgICAgIGZpbGwtb3ZlcnJpZGU9IiNlZWUiCiAgICAgICAgICAgICAgICAgIHN0cm9rZS1vdmVycmlkZT0iI2E2YTZhNiIKICAgICAgICAgICAgICAgID48L3RmLWdyYXBoLWljb24+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY29sb3ItbGVnZW5kLXZhbHVlIj51bmtub3duIGRldmljZTwvc3Bhbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19lcXVhbHMoY29sb3JCeSwgJ3hsYV9jbHVzdGVyJyldXSI+CiAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfY3VycmVudFhsYUNsdXN0ZXJQYXJhbXNdXSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2xvci1sZWdlbmQtcm93Ij4KICAgICAgICAgICAgICAgICAgPHN2Zz4KICAgICAgICAgICAgICAgICAgICA8dXNlCiAgICAgICAgICAgICAgICAgICAgICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIKICAgICAgICAgICAgICAgICAgICAgIHhsaW5rOmhyZWY9IiN1bmZpbGxlZC1yZWN0IgogICAgICAgICAgICAgICAgICAgICAgeD0iMCIKICAgICAgICAgICAgICAgICAgICAgIHk9IjAiCiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT0iZmlsbDpbW2l0ZW0uY29sb3JdXSIKICAgICAgICAgICAgICAgICAgICA+PC91c2U+CiAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY29sb3ItbGVnZW5kLXZhbHVlIj5bW2l0ZW0ueGxhX2NsdXN0ZXJdXTwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyI+CiAgICAgICAgICAgICAgICA8c3ZnPgogICAgICAgICAgICAgICAgICA8dXNlCiAgICAgICAgICAgICAgICAgICAgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiCiAgICAgICAgICAgICAgICAgICAgeGxpbms6aHJlZj0iI2dyZXktcmVjdCIKICAgICAgICAgICAgICAgICAgICB4PSIwIgogICAgICAgICAgICAgICAgICAgIHk9IjAiCiAgICAgICAgICAgICAgICAgID48L3VzZT4KICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvbG9yLWxlZ2VuZC12YWx1ZSI+dW5rbm93biBYTEEgY2x1c3Rlcjwvc3Bhbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19lcXVhbHMoY29sb3JCeSwgJ29wX2NvbXBhdGliaWxpdHknKV1dIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItdGV4dCI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyI+CiAgICAgICAgICAgICAgICA8dGYtZ3JhcGgtaWNvbgogICAgICAgICAgICAgICAgICB0eXBlPSJPUCIKICAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxNiIKICAgICAgICAgICAgICAgICAgZmlsbC1vdmVycmlkZT0iIzBmOWQ1OCIKICAgICAgICAgICAgICAgICAgc3Ryb2tlLW92ZXJyaWRlPSIjY2NjIgogICAgICAgICAgICAgICAgPjwvdGYtZ3JhcGgtaWNvbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb2xvci1sZWdlbmQtdmFsdWUiPlZhbGlkIE9wPC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLWxlZ2VuZC1yb3ciPgogICAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24KICAgICAgICAgICAgICAgICAgdHlwZT0iT1AiCiAgICAgICAgICAgICAgICAgIGhlaWdodD0iMTYiCiAgICAgICAgICAgICAgICAgIGZpbGwtb3ZlcnJpZGU9IiNkYjQ0MzciCiAgICAgICAgICAgICAgICAgIHN0cm9rZS1vdmVycmlkZT0iI2NjYyIKICAgICAgICAgICAgICAgID48L3RmLWdyYXBoLWljb24+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY29sb3ItbGVnZW5kLXZhbHVlIj5JbnZhbGlkIE9wPC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3N0YXRzTm90TnVsbChzdGF0cyldXSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLWxlZ2VuZC1yb3ciPgogICAgICAgICAgICAgIDx0Zi1ncmFwaC1pY29uIHR5cGU9Ik1FVEEiIGhlaWdodD0iMTYiIGZhZGVkPjwvdGYtZ3JhcGgtaWNvbj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY29sb3ItbGVnZW5kLXZhbHVlIj51bnVzZWQgc3Vic3RydWN0dXJlPC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDwhLS0gQ29tbW9uIGxlZ2VuZCBpdGVtcyAtLT4KICAgICAgICA8ZGl2PgogICAgICAgICAgPHRhYmxlPgogICAgICAgICAgICA8dGJvZHk+CiAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgPHRkPjwvdGQ+CiAgICAgICAgICAgICAgICA8dGQ+KCogPSBleHBhbmRhYmxlKTwvdGQ+CiAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIDx0Zi1ncmFwaC1pY29uCiAgICAgICAgICAgICAgICAgICAgdHlwZT0iTUVUQSIKICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9IjE2IgogICAgICAgICAgICAgICAgICAgIGZpbGwtb3ZlcnJpZGU9IiNkOWQ5ZDkiCiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLW92ZXJyaWRlPSIjY2NjIgogICAgICAgICAgICAgICAgICA+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgTmFtZXNwYWNlPHNwYW4gY2xhc3M9ImdyYXkiPio8L3NwYW4+CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxlZ2VuZC1jbGFyaWZpZXIiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuPj88L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPHBhcGVyLXRvb2x0aXAKICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbi1kZWxheT0iMCIKICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uPSJyaWdodCIKICAgICAgICAgICAgICAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICBFbmNhcHN1bGF0ZXMgYSBzZXQgb2Ygbm9kZXMuIE5hbWVzcGFjZSBpcyBoaWVyYXJjaGljYWwgYW5kCiAgICAgICAgICAgICAgICAgICAgICBiYXNlZCBvbiBzY29wZS4KICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24gdHlwZT0iT1AiIGhlaWdodD0iMTYiPjwvdGYtZ3JhcGgtaWNvbj4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIE9wTm9kZQogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtY2xhcmlmaWVyIj4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj4/PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci10b29sdGlwCiAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgTm9kZSB0aGF0IHBlcmZvcm1zIGFuIG9wZXJhdGlvbi4gVGhlc2Ugbm9kZXMgY2Fubm90CiAgICAgICAgICAgICAgICAgICAgICBleHBhbmQuCiAgICAgICAgICAgICAgICAgICAgPC9wYXBlci10b29sdGlwPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIDx0Zi1ncmFwaC1pY29uIHR5cGU9IlNFUklFUyIgaGVpZ2h0PSIxNiI+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgVW5jb25uZWN0ZWQgc2VyaWVzPHNwYW4gY2xhc3M9ImdyYXkiPio8L3NwYW4+CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxlZ2VuZC1jbGFyaWZpZXIiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuPj88L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPHBhcGVyLXRvb2x0aXAKICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbi1kZWxheT0iMCIKICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uPSJyaWdodCIKICAgICAgICAgICAgICAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICBTZXF1ZW5jZSBvZiBudW1iZXJlZCBub2RlcyB0aGF0IGFyZSBub3QgY29ubmVjdGVkIHRvIGVhY2gKICAgICAgICAgICAgICAgICAgICAgIG90aGVyLgogICAgICAgICAgICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICA8dGYtZ3JhcGgtaWNvbgogICAgICAgICAgICAgICAgICAgIHR5cGU9IlNFUklFUyIKICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9IjE2IgogICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsCiAgICAgICAgICAgICAgICAgID48L3RmLWdyYXBoLWljb24+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICBDb25uZWN0ZWQgc2VyaWVzPHNwYW4gY2xhc3M9ImdyYXkiPio8L3NwYW4+CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxlZ2VuZC1jbGFyaWZpZXIiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuPj88L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPHBhcGVyLXRvb2x0aXAKICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbi1kZWxheT0iMCIKICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uPSJyaWdodCIKICAgICAgICAgICAgICAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICBTZXF1ZW5jZSBvZiBudW1iZXJlZCBub2RlcyB0aGF0IGFyZSBjb25uZWN0ZWQgdG8gZWFjaAogICAgICAgICAgICAgICAgICAgICAgb3RoZXIuCiAgICAgICAgICAgICAgICAgICAgPC9wYXBlci10b29sdGlwPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9Imljb24iPgogICAgICAgICAgICAgICAgICAgIDxjaXJjbGUKICAgICAgICAgICAgICAgICAgICAgIGZpbGw9IndoaXRlIgogICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPSIjODQ4NDg0IgogICAgICAgICAgICAgICAgICAgICAgY3g9IjEwIgogICAgICAgICAgICAgICAgICAgICAgY3k9IjEwIgogICAgICAgICAgICAgICAgICAgICAgcj0iNSIKICAgICAgICAgICAgICAgICAgICA+PC9jaXJjbGU+CiAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgQ29uc3RhbnQKICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWNsYXJpZmllciI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+Pzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgIE5vZGUgdGhhdCBvdXRwdXRzIGEgY29uc3RhbnQgdmFsdWUuCiAgICAgICAgICAgICAgICAgICAgPC9wYXBlci10b29sdGlwPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIDx0Zi1ncmFwaC1pY29uIHR5cGU9IlNVTU1BUlkiIGhlaWdodD0iMjAiPjwvdGYtZ3JhcGgtaWNvbj4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIFN1bW1hcnkKICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWNsYXJpZmllciI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+Pzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgIE5vZGUgdGhhdCBjb2xsZWN0cyBkYXRhIGZvciB2aXN1YWxpemF0aW9uIHdpdGhpbgogICAgICAgICAgICAgICAgICAgICAgVGVuc29yQm9hcmQuCiAgICAgICAgICAgICAgICAgICAgPC9wYXBlci10b29sdGlwPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIDxzdmcKICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaWNvbiIKICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9IjE1cHgiCiAgICAgICAgICAgICAgICAgICAgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pbllNaWQgbWVldCIKICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PSIwIDAgMTUgMTUiCiAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICA8ZGVmcz4KICAgICAgICAgICAgICAgICAgICAgIDxtYXJrZXIKICAgICAgICAgICAgICAgICAgICAgICAgaWQ9ImRhdGFmbG93LWFycm93aGVhZC1sZWdlbmQiCiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9IiNiYmIiCiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlcldpZHRoPSIxMCIKICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VySGVpZ2h0PSIxMCIKICAgICAgICAgICAgICAgICAgICAgICAgcmVmWD0iOSIKICAgICAgICAgICAgICAgICAgICAgICAgcmVmWT0iNSIKICAgICAgICAgICAgICAgICAgICAgICAgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiCiAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0gMCwwIEwgMTAsNSBMIDAsMTAgQyAzLDcgMywzIDAsMCI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgICAgPC9tYXJrZXI+CiAgICAgICAgICAgICAgICAgICAgPC9kZWZzPgogICAgICAgICAgICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICAgICAgICAgICBtYXJrZXItZW5kPSJ1cmwoI2RhdGFmbG93LWFycm93aGVhZC1sZWdlbmQpIgogICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPSIjYmJiIgogICAgICAgICAgICAgICAgICAgICAgZD0iTTIgOSBsIDI5IDAiCiAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD0icm91bmQiCiAgICAgICAgICAgICAgICAgICAgPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICBEYXRhZmxvdyBlZGdlCiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxlZ2VuZC1jbGFyaWZpZXIiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuPj88L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPHBhcGVyLXRvb2x0aXAKICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbi1kZWxheT0iMCIKICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uPSJyaWdodCIKICAgICAgICAgICAgICAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICBFZGdlIHNob3dpbmcgdGhlIGRhdGEgZmxvdyBiZXR3ZWVuIG9wZXJhdGlvbnMuIEVkZ2VzIGZsb3cKICAgICAgICAgICAgICAgICAgICAgIHVwd2FyZHMgdW5sZXNzIGFycm93aGVhZHMgc3BlY2lmeSBvdGhlcndpc2UuCiAgICAgICAgICAgICAgICAgICAgPC9wYXBlci10b29sdGlwPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIDxzdmcKICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaWNvbiIKICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9IjE1cHgiCiAgICAgICAgICAgICAgICAgICAgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pbllNaWQgbWVldCIKICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PSIwIDAgMTUgMTUiCiAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPSIjYmJiIgogICAgICAgICAgICAgICAgICAgICAgZD0iTTIgOSBsIDI5IDAiCiAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD0icm91bmQiCiAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtZGFzaGFycmF5PSIyLCAyIgogICAgICAgICAgICAgICAgICAgID48L3BhdGg+CiAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgQ29udHJvbCBkZXBlbmRlbmN5IGVkZ2UKICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWNsYXJpZmllciI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+Pzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgIEVkZ2Ugc2hvd2luZyB0aGUgY29udHJvbCBkZXBlbmRlbmN5IGJldHdlZW4gb3BlcmF0aW9ucy4KICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHN2ZwogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpY29uIgogICAgICAgICAgICAgICAgICAgIGhlaWdodD0iMTVweCIKICAgICAgICAgICAgICAgICAgICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pZCBtZWV0IgogICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9IjAgMCAxNSAxNSIKICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgIDxkZWZzPgogICAgICAgICAgICAgICAgICAgICAgPG1hcmtlcgogICAgICAgICAgICAgICAgICAgICAgICBpZD0icmVmZXJlbmNlLWFycm93aGVhZC1sZWdlbmQiCiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9IiNGRkI3NEQiCiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlcldpZHRoPSIxMCIKICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VySGVpZ2h0PSIxMCIKICAgICAgICAgICAgICAgICAgICAgICAgcmVmWD0iOSIKICAgICAgICAgICAgICAgICAgICAgICAgcmVmWT0iNSIKICAgICAgICAgICAgICAgICAgICAgICAgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiCiAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0gMCwwIEwgMTAsNSBMIDAsMTAgQyAzLDcgMywzIDAsMCI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgICAgPC9tYXJrZXI+CiAgICAgICAgICAgICAgICAgICAgPC9kZWZzPgogICAgICAgICAgICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICAgICAgICAgICBtYXJrZXItZW5kPSJ1cmwoI3JlZmVyZW5jZS1hcnJvd2hlYWQtbGVnZW5kKSIKICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT0iI0ZGQjc0RCIKICAgICAgICAgICAgICAgICAgICAgIGQ9Ik0yIDkgbCAyOSAwIgogICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogICAgICAgICAgICAgICAgICAgID48L3BhdGg+CiAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgUmVmZXJlbmNlIGVkZ2UKICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWNsYXJpZmllciI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+Pzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgIEVkZ2Ugc2hvd2luZyB0aGF0IHRoZSBvdXRnb2luZyBvcGVyYXRpb24gbm9kZSBjYW4gbXV0YXRlCiAgICAgICAgICAgICAgICAgICAgICB0aGUgaW5jb21pbmcgdGVuc29yLgogICAgICAgICAgICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgICA8L3RhYmxlPgogICAgICAgIDwvZGl2PgogICAgICA8L2lyb24tY29sbGFwc2U+CiAgICA8L2Rpdj4KICBgLHQoW28oe3R5cGU6T2JqZWN0LG9ic2VydmVyOiJfc3RhdHNDaGFuZ2VkIn0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxETHQucHJvdG90eXBlLCJzdGF0cyIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdCxub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sREx0LnByb3RvdHlwZSwiZGV2aWNlc0ZvclN0YXRzIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxETHQucHJvdG90eXBlLCJjb2xvckJ5Iix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxETHQucHJvdG90eXBlLCJjb2xvckJ5UGFyYW1zIix2b2lkIDApLHQoW28oe3R5cGU6QXJyYXksb2JzZXJ2ZXI6Il9kYXRhc2V0c0NoYW5nZWQifSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLERMdC5wcm90b3R5cGUsImRhdGFzZXRzIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLFhBdCldLERMdC5wcm90b3R5cGUsInJlbmRlckhpZXJhcmNoeSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdCxub3RpZnk6ITAscmVhZE9ubHk6ITAsY29tcHV0ZWQ6Il9jb21wdXRlU2VsZWN0aW9uKGRhdGFzZXRzLCBfc2VsZWN0ZWRSdW5JbmRleCwgX3NlbGVjdGVkVGFnSW5kZXgsIF9zZWxlY3RlZEdyYXBoVHlwZSkifSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLERMdC5wcm90b3R5cGUsInNlbGVjdGlvbiIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdCxub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sREx0LnByb3RvdHlwZSwic2VsZWN0ZWRGaWxlIix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyLG9ic2VydmVyOiJfc2VsZWN0ZWRSdW5JbmRleENoYW5nZWQifSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLERMdC5wcm90b3R5cGUsIl9zZWxlY3RlZFJ1bkluZGV4Iix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbixub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLERMdC5wcm90b3R5cGUsInRyYWNlSW5wdXRzIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbixub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLERMdC5wcm90b3R5cGUsImF1dG9FeHRyYWN0Tm9kZXMiLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXIsb2JzZXJ2ZXI6Il9zZWxlY3RlZFRhZ0luZGV4Q2hhbmdlZCJ9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sREx0LnByb3RvdHlwZSwiX3NlbGVjdGVkVGFnSW5kZXgiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sREx0LnByb3RvdHlwZSwiX3NlbGVjdGVkR3JhcGhUeXBlIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxETHQucHJvdG90eXBlLCJzZWxlY3RlZE5vZGUiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxETHQucHJvdG90eXBlLCJzaG93U2Vzc2lvblJ1bnNEcm9wZG93biIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLERMdC5wcm90b3R5cGUsInNob3dVcGxvYWRCdXR0b24iLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxETHQucHJvdG90eXBlLCJoZWFsdGhQaWxsc0ZlYXR1cmVFbmFibGVkIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbixub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLERMdC5wcm90b3R5cGUsImhlYWx0aFBpbGxzVG9nZ2xlZE9uIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sREx0LnByb3RvdHlwZSwiX2xlZ2VuZE9wZW5lZCIsdm9pZCAwKSx0KFtzKCJkZXZpY2VzRm9yU3RhdHMiKSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLERMdC5wcm90b3R5cGUsIl9jdXJyZW50RGV2aWNlcyIsbnVsbCksdChbcygiY29sb3JCeVBhcmFtcyIpLGUoImRlc2lnbjp0eXBlIixBcnJheSksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sREx0LnByb3RvdHlwZSwiX2N1cnJlbnREZXZpY2VQYXJhbXMiLG51bGwpLHQoW3MoImNvbG9yQnlQYXJhbXMiKSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLERMdC5wcm90b3R5cGUsIl9jdXJyZW50WGxhQ2x1c3RlclBhcmFtcyIsbnVsbCksdChbcygiY29sb3JCeVBhcmFtcyIsImNvbG9yQnkiKSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxETHQucHJvdG90eXBlLCJfY3VycmVudEdyYWRpZW50UGFyYW1zIixudWxsKSxETHQ9dChbaSgidGYtZ3JhcGgtY29udHJvbHMiKV0sREx0KTtjbGFzcyBCTHR7aXNOb3RUcHVPcCh0KXtyZXR1cm4tMSE9dC50b0xvd2VyQ2FzZSgpLnNlYXJjaCgiY3B1OiIpfHwtMSE9dC50b0xvd2VyQ2FzZSgpLnNlYXJjaCgiZ3B1OiIpfHwtMT09dC50b0xvd2VyQ2FzZSgpLnNlYXJjaCgidHB1Iil9b3BWYWxpZCh0KXtyZXR1cm4gMD09dC5uYW1lLnNlYXJjaChfQXQpfHwhdC5vcHx8ISghdC5kZXZpY2V8fCF0aGlzLmlzTm90VHB1T3AodC5kZXZpY2UpKXx8ISghdC5kZXZpY2V8fC0xPT10LmRldmljZS5zZWFyY2goIlRQVV9TWVNURU0iKSl8fHdlLmluY2x1ZGVzKEJMdC5XSElURUxJU1QsdC5vcCl9fWZ1bmN0aW9uIEhMdCh0KXtyZXR1cm4gbmV3IFByb21pc2UoKChlLG4pPT57ZmV0Y2godCkudGhlbigodD0+e3Qub2s/dC5hcnJheUJ1ZmZlcigpLnRoZW4oZSxuKTp0LnRleHQoKS50aGVuKG4sbil9KSl9KSl9Qkx0LldISVRFTElTVD1bIkFicyIsIkFjb3MiLCJBY29zaCIsIkFkZCIsIkFkZE4iLCJBZGRWMiIsIkFkanVzdENvbnRyYXN0djIiLCJBZGp1c3RIdWUiLCJBZGp1c3RTYXR1cmF0aW9uIiwiQWxsIiwiQWxsVG9BbGwiLCJBbmdsZSIsIkFueSIsIkFwcHJveGltYXRlRXF1YWwiLCJBcmdNYXgiLCJBcmdNaW4iLCJBc2luIiwiQXNpbmgiLCJBc3NlcnQiLCJBc3NpZ25BZGRWYXJpYWJsZU9wIiwiQXNzaWduU3ViVmFyaWFibGVPcCIsIkFzc2lnblZhcmlhYmxlT3AiLCJBdGFuIiwiQXRhbjIiLCJBdGFuaCIsIkF2Z1Bvb2wiLCJBdmdQb29sM0QiLCJBdmdQb29sM0RHcmFkIiwiQXZnUG9vbEdyYWQiLCJCYXRjaE1hdE11bCIsIkJhdGNoTWF0TXVsVjIiLCJCYXRjaFRvU3BhY2UiLCJCYXRjaFRvU3BhY2VORCIsIkJlc3NlbEkwZSIsIkJlc3NlbEkxZSIsIkJldGFpbmMiLCJCaWFzQWRkIiwiQmlhc0FkZEdyYWQiLCJCaWFzQWRkVjEiLCJCaXRjYXN0IiwiQml0d2lzZUFuZCIsIkJpdHdpc2VPciIsIkJpdHdpc2VYb3IiLCJCcm9hZGNhc3RBcmdzIiwiQnJvYWRjYXN0R3JhZGllbnRBcmdzIiwiQnJvYWRjYXN0VG8iLCJCdWNrZXRpemUiLCJDYXNlIiwiQ2FzdCIsIkNlaWwiLCJDaGVja051bWVyaWNzIiwiQ2hvbGVza3kiLCJDbGlwQnlWYWx1ZSIsIkNvbGxlY3RpdmVQZXJtdXRlIiwiQ29sbGVjdGl2ZVJlZHVjZVYyIiwiQ29tcGxleCIsIkNvbXBsZXhBYnMiLCJDb25jYXQiLCJDb25jYXRPZmZzZXQiLCJDb25jYXRWMiIsIkNvbmoiLCJDb25qdWdhdGVUcmFuc3Bvc2UiLCJDb25zdCIsIkNvbnRyb2xUcmlnZ2VyIiwiQ29udjJEIiwiQ29udjJEQmFja3Byb3BGaWx0ZXIiLCJDb252MkRCYWNrcHJvcElucHV0IiwiQ29udjNEIiwiQ29udjNEQmFja3Byb3BGaWx0ZXJWMiIsIkNvbnYzREJhY2twcm9wSW5wdXRWMiIsIkNvcyIsIkNvc2giLCJDcm9zcyIsIkNyb3NzUmVwbGljYVN1bSIsIkN1bXByb2QiLCJDdW1zdW0iLCJEYXRhRm9ybWF0RGltTWFwIiwiRGF0YUZvcm1hdFZlY1Blcm11dGUiLCJEZXB0aFRvU3BhY2UiLCJEZXB0aHdpc2VDb252MmROYXRpdmUiLCJEZXB0aHdpc2VDb252MmROYXRpdmVCYWNrcHJvcEZpbHRlciIsIkRlcHRod2lzZUNvbnYyZE5hdGl2ZUJhY2twcm9wSW5wdXQiLCJEZXF1YW50aXplIiwiRGV2aWNlSW5kZXgiLCJEaWFnIiwiRGlhZ1BhcnQiLCJEaWdhbW1hIiwiRGl2IiwiRGl2Tm9OYW4iLCJEeW5hbWljU3RpdGNoIiwiRWluc3VtIiwiRWx1IiwiRWx1R3JhZCIsIkVtcHR5IiwiRW1wdHlUZW5zb3JMaXN0IiwiRW5zdXJlU2hhcGUiLCJFcXVhbCIsIkVyZiIsIkVyZmMiLCJFcmZpbnYiLCJFeHAiLCJFeHBhbmREaW1zIiwiRXhwbTEiLCJFeHRyYWN0SW1hZ2VQYXRjaGVzIiwiRkZUIiwiRkZUMkQiLCJGRlQzRCIsIkZha2VQYXJhbSIsIkZha2VRdWFudFdpdGhNaW5NYXhBcmdzIiwiRmFrZVF1YW50V2l0aE1pbk1heEFyZ3NHcmFkaWVudCIsIkZha2VRdWFudFdpdGhNaW5NYXhWYXJzIiwiRmFrZVF1YW50V2l0aE1pbk1heFZhcnNHcmFkaWVudCIsIkZpbGwiLCJGbG9vciIsIkZsb29yRGl2IiwiRmxvb3JNb2QiLCJGdXNlZEJhdGNoTm9ybSIsIkZ1c2VkQmF0Y2hOb3JtR3JhZCIsIkZ1c2VkQmF0Y2hOb3JtR3JhZFYyIiwiRnVzZWRCYXRjaE5vcm1HcmFkVjMiLCJGdXNlZEJhdGNoTm9ybVYyIiwiRnVzZWRCYXRjaE5vcm1WMyIsIkdhdGhlciIsIkdhdGhlck5kIiwiR2F0aGVyVjIiLCJHZXRJdGVtIiwiR3JlYXRlciIsIkdyZWF0ZXJFcXVhbCIsIkhTVlRvUkdCIiwiSUZGVCIsIklGRlQyRCIsIklGRlQzRCIsIklSRkZUIiwiSVJGRlQyRCIsIklSRkZUM0QiLCJJZGVudGl0eSIsIklkZW50aXR5TiIsIklmIiwiSWdhbW1hIiwiSWdhbW1hR3JhZEEiLCJJZ2FtbWFjIiwiSW1hZyIsIkluVG9wS1YyIiwiSW5mZWVkRGVxdWV1ZSIsIkluZmVlZERlcXVldWVUdXBsZSIsIklucGxhY2VBZGQiLCJJbnBsYWNlVXBkYXRlIiwiSW52IiwiSW52ZXJ0IiwiSW52ZXJ0UGVybXV0YXRpb24iLCJJc0Zpbml0ZSIsIklzSW5mIiwiSXNOYW4iLCJLdGhPcmRlclN0YXRpc3RpYyIsIkwyTG9zcyIsIkxSTiIsIkxSTkdyYWQiLCJMZWFreVJlbHUiLCJMZWFreVJlbHVHcmFkIiwiTGVmdFNoaWZ0IiwiTGVzcyIsIkxlc3NFcXVhbCIsIkxnYW1tYSIsIkxpblNwYWNlIiwiTGlzdERpZmYiLCJMb2ciLCJMb2cxcCIsIkxvZ1NvZnRtYXgiLCJMb2dpY2FsQW5kIiwiTG9naWNhbE5vdCIsIkxvZ2ljYWxPciIsIkxvd2VyQm91bmQiLCJNYWtlVW5pcXVlIiwiTWF0TXVsIiwiTWF0cml4QmFuZFBhcnQiLCJNYXRyaXhEaWFnIiwiTWF0cml4RGlhZ1BhcnQiLCJNYXRyaXhEaWFnUGFydFYyIiwiTWF0cml4RGlhZ1BhcnRWMyIsIk1hdHJpeERpYWdWMiIsIk1hdHJpeERpYWdWMyIsIk1hdHJpeEludmVyc2UiLCJNYXRyaXhTZXREaWFnIiwiTWF0cml4U2V0RGlhZ1YyIiwiTWF0cml4U2V0RGlhZ1YzIiwiTWF0cml4U29sdmUiLCJNYXRyaXhUcmlhbmd1bGFyU29sdmUiLCJNYXgiLCJNYXhQb29sIiwiTWF4UG9vbDNEIiwiTWF4UG9vbDNER3JhZCIsIk1heFBvb2wzREdyYWRHcmFkIiwiTWF4UG9vbEdyYWQiLCJNYXhQb29sR3JhZEdyYWQiLCJNYXhQb29sR3JhZEdyYWRWMiIsIk1heFBvb2xHcmFkVjIiLCJNYXhQb29sVjIiLCJNYXhpbXVtIiwiTWVhbiIsIk1pbiIsIk1pbmltdW0iLCJNaXJyb3JQYWQiLCJNaXJyb3JQYWRHcmFkIiwiTW9kIiwiTXVsIiwiTXVsTm9OYW4iLCJNdWx0aW5vbWlhbCIsIk5kdHJpIiwiTmVnIiwiTmV4dEFmdGVyIiwiTm9PcCIsIk5vbk1heFN1cHByZXNzaW9uVjQiLCJOb3RFcXVhbCIsIk9uZUhvdCIsIk9uZXNMaWtlIiwiT3V0ZmVlZEVucXVldWUiLCJPdXRmZWVkRW5xdWV1ZVR1cGxlIiwiUGFjayIsIlBhZCIsIlBhZFYyIiwiUGFyYWxsZWxEeW5hbWljU3RpdGNoIiwiUGFyYW1ldGVyaXplZFRydW5jYXRlZE5vcm1hbCIsIlBhcnRpdGlvbmVkQ2FsbCIsIlBsYWNlaG9sZGVyV2l0aERlZmF1bHQiLCJQb2x5Z2FtbWEiLCJQb3B1bGF0aW9uQ291bnQiLCJQb3ciLCJQcmV2ZW50R3JhZGllbnQiLCJQcm9kIiwiUXIiLCJRdWFudGl6ZUFuZERlcXVhbnRpemVWMiIsIlF1YW50aXplQW5kRGVxdWFudGl6ZVYzIiwiUkZGVCIsIlJGRlQyRCIsIlJGRlQzRCIsIlJHQlRvSFNWIiwiUmFuZG9tR2FtbWFHcmFkIiwiUmFuZG9tU2h1ZmZsZSIsIlJhbmRvbVN0YW5kYXJkTm9ybWFsIiwiUmFuZG9tVW5pZm9ybSIsIlJhbmRvbVVuaWZvcm1JbnQiLCJSYW5nZSIsIlJhbmsiLCJSZWFkVmFyaWFibGVPcCIsIlJlYWwiLCJSZWFsRGl2IiwiUmVjaXByb2NhbCIsIlJlY2lwcm9jYWxHcmFkIiwiUmVsdSIsIlJlbHU2IiwiUmVsdTZHcmFkIiwiUmVsdUdyYWQiLCJSZXNoYXBlIiwiUmVzaXplQmlsaW5lYXIiLCJSZXNpemVCaWxpbmVhckdyYWQiLCJSZXNpemVOZWFyZXN0TmVpZ2hib3IiLCJSZXNpemVOZWFyZXN0TmVpZ2hib3JHcmFkIiwiUmVzb3VyY2VBcHBseUFkYU1heCIsIlJlc291cmNlQXBwbHlBZGFkZWx0YSIsIlJlc291cmNlQXBwbHlBZGFncmFkIiwiUmVzb3VyY2VBcHBseUFkYWdyYWREQSIsIlJlc291cmNlQXBwbHlBZGFncmFkVjIiLCJSZXNvdXJjZUFwcGx5QWRhbSIsIlJlc291cmNlQXBwbHlBZGRTaWduIiwiUmVzb3VyY2VBcHBseUNlbnRlcmVkUk1TUHJvcCIsIlJlc291cmNlQXBwbHlGdHJsIiwiUmVzb3VyY2VBcHBseUZ0cmxWMiIsIlJlc291cmNlQXBwbHlHcmFkaWVudERlc2NlbnQiLCJSZXNvdXJjZUFwcGx5S2VyYXNNb21lbnR1bSIsIlJlc291cmNlQXBwbHlNb21lbnR1bSIsIlJlc291cmNlQXBwbHlQb3dlclNpZ24iLCJSZXNvdXJjZUFwcGx5UHJveGltYWxBZGFncmFkIiwiUmVzb3VyY2VBcHBseVByb3hpbWFsR3JhZGllbnREZXNjZW50IiwiUmVzb3VyY2VBcHBseVJNU1Byb3AiLCJSZXNvdXJjZUdhdGhlciIsIlJlc291cmNlU2NhdHRlckFkZCIsIlJlc291cmNlU2NhdHRlckRpdiIsIlJlc291cmNlU2NhdHRlck1heCIsIlJlc291cmNlU2NhdHRlck1pbiIsIlJlc291cmNlU2NhdHRlck11bCIsIlJlc291cmNlU2NhdHRlck5kQWRkIiwiUmVzb3VyY2VTY2F0dGVyTmRTdWIiLCJSZXNvdXJjZVNjYXR0ZXJOZFVwZGF0ZSIsIlJlc291cmNlU2NhdHRlclN1YiIsIlJlc291cmNlU2NhdHRlclVwZGF0ZSIsIlJlc291cmNlU3RyaWRlZFNsaWNlQXNzaWduIiwiUmV2ZXJzZSIsIlJldmVyc2VTZXF1ZW5jZSIsIlJldmVyc2VWMiIsIlJpZ2h0U2hpZnQiLCJSaW50IiwiUm5nUmVhZEFuZFNraXAiLCJSbmdTa2lwIiwiUm9sbCIsIlJvdW5kIiwiUnNxcnQiLCJSc3FydEdyYWQiLCJTY2F0dGVyTmQiLCJTZWxlY3QiLCJTZWxlY3RWMiIsIlNlbGZBZGpvaW50RWlnVjIiLCJTZWx1IiwiU2VsdUdyYWQiLCJTaGFwZSIsIlNoYXBlTiIsIlNpZ21vaWQiLCJTaWdtb2lkR3JhZCIsIlNpZ24iLCJTaW4iLCJTaW5oIiwiU2l6ZSIsIlNsaWNlIiwiU25hcHNob3QiLCJTb2Z0bWF4IiwiU29mdG1heENyb3NzRW50cm9weVdpdGhMb2dpdHMiLCJTb2Z0cGx1cyIsIlNvZnRwbHVzR3JhZCIsIlNvZnRzaWduIiwiU29mdHNpZ25HcmFkIiwiU3BhY2VUb0JhdGNoIiwiU3BhY2VUb0JhdGNoTkQiLCJTcGFjZVRvRGVwdGgiLCJTcGFyc2VNYXRNdWwiLCJTcGFyc2VTb2Z0bWF4Q3Jvc3NFbnRyb3B5V2l0aExvZ2l0cyIsIlNwYXJzZVRvRGVuc2UiLCJTcGxpdCIsIlNwbGl0ViIsIlNxcnQiLCJTcXJ0R3JhZCIsIlNxdWFyZSIsIlNxdWFyZWREaWZmZXJlbmNlIiwiU3F1ZWV6ZSIsIlN0YWNrQ2xvc2VWMiIsIlN0YWNrUG9wVjIiLCJTdGFja1B1c2hWMiIsIlN0YWNrVjIiLCJTdGF0ZWZ1bFBhcnRpdGlvbmVkQ2FsbCIsIlN0YXRlZnVsU3RhbmRhcmROb3JtYWxWMiIsIlN0YXRlZnVsVHJ1bmNhdGVkTm9ybWFsIiwiU3RhdGVmdWxVbmlmb3JtIiwiU3RhdGVmdWxVbmlmb3JtRnVsbEludCIsIlN0YXRlZnVsVW5pZm9ybUludCIsIlN0YXRlbGVzc0Nhc2UiLCJTdGF0ZWxlc3NJZiIsIlN0YXRlbGVzc011bHRpbm9taWFsIiwiU3RhdGVsZXNzUmFuZG9tR2V0QWxnIiwiU3RhdGVsZXNzUmFuZG9tR2V0S2V5Q291bnRlciIsIlN0YXRlbGVzc1JhbmRvbUdldEtleUNvdW50ZXJBbGciLCJTdGF0ZWxlc3NSYW5kb21Ob3JtYWwiLCJTdGF0ZWxlc3NSYW5kb21Ob3JtYWxWMiIsIlN0YXRlbGVzc1JhbmRvbVVuaWZvcm0iLCJTdGF0ZWxlc3NSYW5kb21Vbmlmb3JtRnVsbEludCIsIlN0YXRlbGVzc1JhbmRvbVVuaWZvcm1GdWxsSW50VjIiLCJTdGF0ZWxlc3NSYW5kb21Vbmlmb3JtSW50IiwiU3RhdGVsZXNzUmFuZG9tVW5pZm9ybUludFYyIiwiU3RhdGVsZXNzUmFuZG9tVW5pZm9ybVYyIiwiU3RhdGVsZXNzVHJ1bmNhdGVkTm9ybWFsIiwiU3RhdGVsZXNzVHJ1bmNhdGVkTm9ybWFsVjIiLCJTdGF0ZWxlc3NXaGlsZSIsIlN0b3BHcmFkaWVudCIsIlN0cmlkZWRTbGljZSIsIlN0cmlkZWRTbGljZUdyYWQiLCJTdWIiLCJTdW0iLCJTdmQiLCJTeW1ib2xpY0dyYWRpZW50IiwiVFBVRW1iZWRkaW5nQWN0aXZhdGlvbnMiLCJUYW4iLCJUYW5oIiwiVGFuaEdyYWQiLCJUZW5zb3JBcnJheUNsb3NlVjMiLCJUZW5zb3JBcnJheUNvbmNhdFYzIiwiVGVuc29yQXJyYXlHYXRoZXJWMyIsIlRlbnNvckFycmF5R3JhZFYzIiwiVGVuc29yQXJyYXlSZWFkVjMiLCJUZW5zb3JBcnJheVNjYXR0ZXJWMyIsIlRlbnNvckFycmF5U2l6ZVYzIiwiVGVuc29yQXJyYXlTcGxpdFYzIiwiVGVuc29yQXJyYXlWMyIsIlRlbnNvckFycmF5V3JpdGVWMyIsIlRlbnNvckxpc3RDb25jYXRWMiIsIlRlbnNvckxpc3RFbGVtZW50U2hhcGUiLCJUZW5zb3JMaXN0RnJvbVRlbnNvciIsIlRlbnNvckxpc3RHYXRoZXIiLCJUZW5zb3JMaXN0R2V0SXRlbSIsIlRlbnNvckxpc3RMZW5ndGgiLCJUZW5zb3JMaXN0UG9wQmFjayIsIlRlbnNvckxpc3RQdXNoQmFjayIsIlRlbnNvckxpc3RSZXNlcnZlIiwiVGVuc29yTGlzdFNldEl0ZW0iLCJUZW5zb3JMaXN0U3BsaXQiLCJUZW5zb3JMaXN0U3RhY2siLCJUZW5zb3JTY2F0dGVyQWRkIiwiVGVuc29yU2NhdHRlck1heCIsIlRlbnNvclNjYXR0ZXJNaW4iLCJUZW5zb3JTY2F0dGVyU3ViIiwiVGVuc29yU2NhdHRlclVwZGF0ZSIsIlRlbnNvclN0cmlkZWRTbGljZVVwZGF0ZSIsIlRpbGUiLCJUb3BLVW5pcXVlIiwiVG9wS1YyIiwiVG9wS1dpdGhVbmlxdWUiLCJUcmFuc3Bvc2UiLCJUcmlkaWFnb25hbFNvbHZlIiwiVHJ1bmNhdGVEaXYiLCJUcnVuY2F0ZU1vZCIsIlRydW5jYXRlZE5vcm1hbCIsIlVuaXF1ZSIsIlVucGFjayIsIlVuc29ydGVkU2VnbWVudE1heCIsIlVuc29ydGVkU2VnbWVudE1pbiIsIlVuc29ydGVkU2VnbWVudFByb2QiLCJVbnNvcnRlZFNlZ21lbnRTdW0iLCJVcHBlckJvdW5kIiwiVmFySXNJbml0aWFsaXplZE9wIiwiVmFyaWFibGVTaGFwZSIsIldoZXJlIiwiV2hpbGUiLCJYZGl2eSIsIlhsYUJyb2FkY2FzdEhlbHBlciIsIlhsYUNvbnYiLCJYbGFDb252VjIiLCJYbGFEZXF1YW50aXplIiwiWGxhRG90IiwiWGxhRG90VjIiLCJYbGFEeW5hbWljU2xpY2UiLCJYbGFEeW5hbWljVXBkYXRlU2xpY2UiLCJYbGFFaW5zdW0iLCJYbGFHYXRoZXIiLCJYbGFIb3N0Q29tcHV0ZSIsIlhsYUlmIiwiWGxhS2V5VmFsdWVTb3J0IiwiWGxhUGFkIiwiWGxhUmVjdiIsIlhsYVJlY3ZGcm9tSG9zdCIsIlhsYVJlZHVjZSIsIlhsYVJlZHVjZVdpbmRvdyIsIlhsYVJlcGxpY2FJZCIsIlhsYVNjYXR0ZXIiLCJYbGFTZWxlY3RBbmRTY2F0dGVyIiwiWGxhU2VsZkFkam9pbnRFaWciLCJYbGFTZW5kIiwiWGxhU2VuZFRvSG9zdCIsIlhsYVNldEJvdW5kIiwiWGxhU2V0RHluYW1pY0RpbWVuc2lvblNpemUiLCJYbGFTaGFyZGluZyIsIlhsYVNvcnQiLCJYbGFTcG1kRnVsbFRvU2hhcmRTaGFwZSIsIlhsYVNwbWRTaGFyZFRvRnVsbFNoYXBlIiwiWGxhU3ZkIiwiWGxhVmFyaWFkaWNSZWR1Y2UiLCJYbGFWYXJpYWRpY1NvcnQiLCJYbGFXaGlsZSIsIlhsb2cxcHkiLCJYbG9neSIsIlplcm9zTGlrZSIsIlpldGEiLCJFbnRlciIsIkV4aXQiLCJMb29wQ29uZCIsIk1lcmdlIiwiTmV4dEl0ZXJhdGlvbiIsIlN3aXRjaCIsIl9BcmciLCJfQXJyYXlUb0xpc3QiLCJfRnVzZWRCYXRjaE5vcm1FeCIsIl9MaXN0VG9BcnJheSIsIl9QYXJhbGxlbENvbmNhdFVwZGF0ZSIsIl9SZWN2VFBVRW1iZWRkaW5nQWN0aXZhdGlvbnMiLCJfUmVjdlRQVUVtYmVkZGluZ0RlZHVwbGljYXRpb25EYXRhIiwiX1JldHZhbCIsIl9TZW5kVFBVRW1iZWRkaW5nR3JhZGllbnRzIiwiX1RQVUNvbXBpbGUiLCJfVFBVRXhlY3V0ZSIsIl9VbmFyeU9wc0NvbXBvc2l0aW9uIiwiVFBVQ29tcGlsYXRpb25SZXN1bHQiLCJUUFVSZXBsaWNhdGVkSW5wdXQiLCJUUFVSZXBsaWNhdGVkT3V0cHV0IiwiVFBVUmVwbGljYXRlTWV0YWRhdGEiLCJNZXJnZVYyQ2hlY2twb2ludHMiLCJSZXN0b3JlVjIiLCJTYXZlVjIiLCJBYm9ydCIsIkFzc2VydCIsIkFzc2lnbiIsIlBsYWNlaG9sZGVyIiwiUGxhY2Vob2xkZXJWMiIsIlNoYXJkZWRGaWxlbmFtZSIsIlN0cmluZ0pvaW4iLCJWYXJpYWJsZSIsIlZhcmlhYmxlVjIiLCJWYXJIYW5kbGVPcCIsIkF1ZGlvU3VtbWFyeSIsIkF1ZGlvU3VtbWFyeVYyIiwiRGVidWdOdW1lcmljU3VtbWFyeSIsIkhpc3RvZ3JhbVN1bW1hcnkiLCJJbWFnZVN1bW1hcnkiLCJNZXJnZVN1bW1hcnkiLCJTY2FsYXJTdW1tYXJ5IiwiU3RhdHNBZ2dyZWdhdG9yU3VtbWFyeSJdO2NvbnN0IEZMdD17ImxpYnJhcnkuZnVuY3Rpb24iOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5pbnB1dCI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuYXR0ciI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuYXR0ci52YWx1ZS5saXN0LmIiOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUubGlzdC5mIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3QuZnVuYyI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuYXR0ci52YWx1ZS5saXN0LmkiOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUubGlzdC5zIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3Quc2hhcGUiOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUubGlzdC5zaGFwZS5kaW0iOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUubGlzdC50ZW5zb3IiOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUubGlzdC50eXBlIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLnNoYXBlLmRpbSI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuYXR0ci52YWx1ZS50ZW5zb3Iuc3RyaW5nX3ZhbCI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuYXR0ci52YWx1ZS50ZW5zb3IudGVuc29yX3NoYXBlLmRpbSI6ITAsImxpYnJhcnkuZnVuY3Rpb24uc2lnbmF0dXJlLmlucHV0X2FyZyI6ITAsImxpYnJhcnkuZnVuY3Rpb24uc2lnbmF0dXJlLm91dHB1dF9hcmciOiEwLCJsaWJyYXJ5LnZlcnNpb25zIjohMCxub2RlOiEwLCJub2RlLmlucHV0IjohMCwibm9kZS5hdHRyIjohMCwibm9kZS5hdHRyLnZhbHVlLmxpc3QuYiI6ITAsIm5vZGUuYXR0ci52YWx1ZS5saXN0LmYiOiEwLCJub2RlLmF0dHIudmFsdWUubGlzdC5mdW5jIjohMCwibm9kZS5hdHRyLnZhbHVlLmxpc3QuaSI6ITAsIm5vZGUuYXR0ci52YWx1ZS5saXN0LnMiOiEwLCJub2RlLmF0dHIudmFsdWUubGlzdC5zaGFwZSI6ITAsIm5vZGUuYXR0ci52YWx1ZS5saXN0LnNoYXBlLmRpbSI6ITAsIm5vZGUuYXR0ci52YWx1ZS5saXN0LnRlbnNvciI6ITAsIm5vZGUuYXR0ci52YWx1ZS5saXN0LnR5cGUiOiEwLCJub2RlLmF0dHIudmFsdWUuc2hhcGUuZGltIjohMCwibm9kZS5hdHRyLnZhbHVlLnRlbnNvci5zdHJpbmdfdmFsIjohMCwibm9kZS5hdHRyLnZhbHVlLnRlbnNvci50ZW5zb3Jfc2hhcGUuZGltIjohMH0sVkx0PXsic3RlcF9zdGF0cy5kZXZfc3RhdHMiOiEwLCJzdGVwX3N0YXRzLmRldl9zdGF0cy5ub2RlX3N0YXRzIjohMCwic3RlcF9zdGF0cy5kZXZfc3RhdHMubm9kZV9zdGF0cy5vdXRwdXQiOiEwLCJzdGVwX3N0YXRzLmRldl9zdGF0cy5ub2RlX3N0YXRzLm1lbW9yeSI6ITAsInN0ZXBfc3RhdHMuZGV2X3N0YXRzLm5vZGVfc3RhdHMub3V0cHV0LnRlbnNvcl9kZXNjcmlwdGlvbi5zaGFwZS5kaW0iOiEwfTtmdW5jdGlvbiBVTHQodCxlKXtsZXQgbj17fSxpPVtdLHI9W10sbz1uO2Z1bmN0aW9uIGEodCxuLGkscil7bGV0IG89dFtuXTtudWxsPT1vP3Rbbl09ci5qb2luKCIuIilpbiBlP1tpXTppOkFycmF5LmlzQXJyYXkobyk/by5wdXNoKGkpOnRbbl09W28saV19cmV0dXJuKGZ1bmN0aW9uIHModCxlLG49MWU2LGk9IlxuIil7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihyLG8peyEoZnVuY3Rpb24gYShzLGwsYyl7Y29uc3QgdT1jPj10LmJ5dGVMZW5ndGgsaD1sLnNwbGl0KGkpO2hbMF09cytoWzBdO2NvbnN0IGQ9dT8iIjpoLnBvcCgpO2ZvcihsZXQgdCBvZiBoKXRyeXtlKHQpfWNhdGNoKHQpe3JldHVybiB2b2lkIG8odCl9aWYodSlyZXR1cm4gdm9pZCByKCEwKTtjb25zdCBwPW5ldyBCbG9iKFt0LnNsaWNlKGMsYytuKV0pLGY9bmV3IEZpbGVSZWFkZXI7Zi5vbmxvYWQ9ZnVuY3Rpb24odCl7YShkLHQudGFyZ2V0LnJlc3VsdCxjK24pfSxmLnJlYWRBc1RleHQocCl9KSgiIiwiIiwwKX0pKX0pKHQsKGZ1bmN0aW9uKHQpe2lmKHQ9dC50cmltKCkpc3dpdGNoKHRbdC5sZW5ndGgtMV0pe2Nhc2UieyI6bGV0IGU9dC5zdWJzdHJpbmcoMCx0Lmxlbmd0aC0yKS50cmltKCksbj17fTtpLnB1c2gobyksci5wdXNoKGUpLGEobyxlLG4sciksbz1uO2JyZWFrO2Nhc2UifSI6bz1pLnBvcCgpLHIucG9wKCk7YnJlYWs7ZGVmYXVsdDpsZXQgcz0oZnVuY3Rpb24gZSh0KXtsZXQgZT10LmluZGV4T2YoIjoiKTtyZXR1cm57bmFtZTp0LnN1YnN0cmluZygwLGUpLnRyaW0oKSx2YWx1ZTooZnVuY3Rpb24gbih0KXtpZigidHJ1ZSI9PT10KXJldHVybiEwO2lmKCJmYWxzZSI9PT10KXJldHVybiExO2lmKCciJz09PXRbMF0pcmV0dXJuIHQuc3Vic3RyaW5nKDEsdC5sZW5ndGgtMSk7bGV0IGU9cGFyc2VGbG9hdCh0KTtyZXR1cm4gaXNOYU4oZSk/dDplfSkodC5zdWJzdHJpbmcoZSsyKS50cmltKCkpfX0pKHQpO2EobyxzLm5hbWUscy52YWx1ZSxyLmNvbmNhdChzLm5hbWUpKX19KSkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gbn0pKX1sZXQgakx0PWNsYXNzIGV4dGVuZHModHIoeWUpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb21wYXRpYmlsaXR5UHJvdmlkZXI9bmV3IEJMdCx0aGlzLmhpZXJhcmNoeVBhcmFtcz1tTHQsdGhpcy5fdGVtcGxhdGU9bnVsbH1fc2VsZWN0aW9uQ2hhbmdlZCgpe3RoaXMuc2VsZWN0aW9uJiZ0aGlzLmRlYm91bmNlKCJzZWxlY3Rpb25jaGFuZ2UiLCgoKT0+e3RoaXMuX2xvYWQodGhpcy5zZWxlY3Rpb24pfSkpfV9sb2FkKHQpe2NvbnN0e3J1bjplLHRhZzpuLHR5cGU6aX09dDtzd2l0Y2goaSl7Y2FzZSBYQ3QuT1BfR1JBUEg6Y2FzZSBYQ3QuQ09OQ0VQVFVBTF9HUkFQSDp7KGZ1bmN0aW9uKCl7dGhpcy5fc2V0T3V0U3RhdHMobnVsbCl9KS5iaW5kKHRoaXMpKCk7Y29uc3QgdD1uZXcgVVJMU2VhcmNoUGFyYW1zO3Quc2V0KCJydW4iLGUpLHQuc2V0KCJjb25jZXB0dWFsIixTdHJpbmcoaT09PVhDdC5DT05DRVBUVUFMX0dSQVBIKSksbiYmdC5zZXQoInRhZyIsbik7Y29uc3Qgcj1ncigpLnBsdWdpblJvdXRlKCJncmFwaHMiLCIvZ3JhcGgiLHQpO3JldHVybiB0aGlzLl9mZXRjaEFuZENvbnN0cnVjdEhpZXJhcmNoaWNhbEdyYXBoKHIpLnRoZW4oKCgpPT57dGhpcy5fZ3JhcGhSdW5UYWc9e3J1bjplLHRhZzpufX0pKX1jYXNlIFhDdC5QUk9GSUxFOntjb25zdHt0YWdzOnR9PXRoaXMuZGF0YXNldHMuZmluZCgoKHtuYW1lOnR9KT0+dD09PWUpKSxpPXQuZmluZCgodD0+dC50YWc9PT1uKSkub3BHcmFwaD9uOm51bGw7Y29uc29sZS5hc3NlcnQodC5maW5kKCh0PT50LnRhZz09PWkpKSxgUmVxdWlyZWQgdGFnICgke2l9KSBpcyBtaXNzaW5nLmApO2NvbnN0IHI9dGhpcy5fZ3JhcGhSdW5UYWcmJnRoaXMuX2dyYXBoUnVuVGFnLnJ1bj09PWUmJnRoaXMuX2dyYXBoUnVuVGFnLnRhZz09PWk/UHJvbWlzZS5yZXNvbHZlKCk6dGhpcy5fbG9hZCh7cnVuOmUsdGFnOmksdHlwZTpYQ3QuT1BfR1JBUEh9KSxvPW5ldyBVUkxTZWFyY2hQYXJhbXM7by5zZXQoInRhZyIsbiksby5zZXQoInJ1biIsZSk7Y29uc3QgYT1ncigpLnBsdWdpblJvdXRlKCJncmFwaHMiLCIvcnVuX21ldGFkYXRhIixvKTtyZXR1cm4gci50aGVuKCgoKT0+dGhpcy5fcmVhZEFuZFBhcnNlTWV0YWRhdGEoYSkpKX1kZWZhdWx0OnJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoYFVua25vd24gc2VsZWN0aW9uIHR5cGU6ICR7aX1gKSl9fV9yZWFkQW5kUGFyc2VNZXRhZGF0YSh0KXt0aGlzLnNldCgicHJvZ3Jlc3MiLHt2YWx1ZTowLG1zZzoiIn0pLChmdW5jdGlvbiBlKHQsbil7cmV0dXJuKGZ1bmN0aW9uIGkodCxlLG4scixvKXtyLnNldE1lc3NhZ2UodCk7dHJ5e2xldCBpPWlBdCh0LG4sbyk7cmV0dXJuIHIudXBkYXRlUHJvZ3Jlc3MoZSksaX1jYXRjaChlKXtyLnJlcG9ydEVycm9yKCJGYWlsZWQgIit0LGUpfX0pKCJSZWFkaW5nIG1ldGFkYXRhIHBidHh0Iiw0MCwoKCk9Pm51bGw9PXQ/UHJvbWlzZS5yZXNvbHZlKG51bGwpOkhMdCh0KSksbixZQ3QuRkVUQ0hfTUVUQURBVEFfUEJUWFRfQllURVMpLnRoZW4oKHQ9PnNBdCgiUGFyc2luZyBtZXRhZGF0YS5wYnR4dCIsNjAsKCgpPT5udWxsIT10PyhmdW5jdGlvbiBlKHQpe3JldHVybiBVTHQodCxWTHQpLnRoZW4oKHQ9PnQuc3RlcF9zdGF0cykpfSkodCk6UHJvbWlzZS5yZXNvbHZlKG51bGwpKSxuLFlDdC5QQVJTRV9NRVRBREFUQV9QQlRYVF9JTlRPX09CSkVDVCkpKX0pKHQsckF0KHRoaXMpKS50aGVuKGZ1bmN0aW9uKHQpe3RoaXMuX3NldE91dFN0YXRzKHQpfS5iaW5kKHRoaXMpKX1fZmV0Y2hBbmRDb25zdHJ1Y3RIaWVyYXJjaGljYWxHcmFwaCh0LGUpe3JldHVybiB0aGlzLnNldCgicHJvZ3Jlc3MiLHt2YWx1ZTowLG1zZzoiIn0pLChmdW5jdGlvbiBpKHQsZSxyLG89bmV3IEJMdCxhPW1MdCl7Y29uc3Qgcz1vQXQodCwzMCwiRGF0YSIpLGw9b0F0KHQsMjAsIkdyYXBoIiksYz1vQXQodCw1MCwiTmFtZXNwYWNlIGhpZXJhcmNoeSIpLHU9RGF0ZS5ub3coKTtyZXR1cm4oZnVuY3Rpb24gaCh0LGUsaSl7cmV0dXJuIHNBdCgiUmVhZGluZyBncmFwaCBwYnR4dCIsNDAsKCgpPT5uKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgbj1EYXRlLm5vdygpO2lmKGUpe2NvbnN0IHQ9eWllbGQgbmV3IFByb21pc2UoKGZ1bmN0aW9uKHQsbil7bGV0IGk9bmV3IEZpbGVSZWFkZXI7aS5vbmxvYWQ9KCk9PnQoaS5yZXN1bHQpLGkub25lcnJvcj0oKT0+bihpLmVycm9yKSxpLnJlYWRBc0FycmF5QnVmZmVyKGUpfSkpO3JldHVybiBuQXQoe3RpbWluZ0lkOllDdC5GRVRDSF9QQlRYVF9CWVRFU19GUk9NX0ZJTEVTWVNURU0sZXZlbnRWYWx1ZTpEYXRlLm5vdygpLW59KSx0fWNvbnN0IGk9eWllbGQgSEx0KHQpO3JldHVybiBuQXQoe3RpbWluZ0lkOllDdC5GRVRDSF9QQlRYVF9CWVRFU19GUk9NX1NFUlZFUixldmVudFZhbHVlOkRhdGUubm93KCktbn0pLGl9KSkpLGksWUN0LkZFVENIX1BCVFhUX0JZVEVTKS50aGVuKCh0PT5zQXQoIlBhcnNpbmcgZ3JhcGgucGJ0eHQiLDYwLCgoKT0+KGZ1bmN0aW9uIGUodCl7cmV0dXJuIFVMdCh0LEZMdCl9KSh0KSksaSxZQ3QuUEFSU0VfUEJUWFRfSU5UT19PQkpFQ1QpKSl9KShlLHIscykudGhlbigoZnVuY3Rpb24odCl7aWYoIXQubm9kZSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBncmFwaCBpcyBlbXB0eS4gVGhpcyBjYW4gaGFwcGVuIHdoZW4gVGVuc29yRmxvdyBjb3VsZCBub3QgdHJhY2UgYW55IGdyYXBoLiBQbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvaXNzdWVzLzE5NjEgZm9yIG1vcmUgaW5mb3JtYXRpb24uIik7cmV0dXJuKGZ1bmN0aW9uIGUodCxuLGkpe2xldCByPXt9LG89e30sYT17fSxzPXpBdChuLmluRW1iZWRkaW5nVHlwZXMpLGw9ekF0KG4ub3V0RW1iZWRkaW5nVHlwZXMpLGM9W10sdT10Lm5vZGUsaD1uZXcgQXJyYXkodS5sZW5ndGgpO3JldHVybiBhQXQoIk5vcm1hbGl6aW5nIG5hbWVzIiwzMCwoKCk9PntsZXQgZT1uZXcgQXJyYXkodS5sZW5ndGgpLG49MDtjb25zdCBpPXQ9PntsZXQgaT1uZXcgTUF0KHQpO3JldHVybiBzKGkpPyhjLnB1c2goaS5uYW1lKSxyW2kubmFtZV09aSxpKTpsKGkpPyhjLnB1c2goaS5uYW1lKSxvW2kubmFtZV09aSx3ZS5lYWNoKGkuaW5wdXRzLCh0PT57bGV0IGU9dC5uYW1lO2FbZV09YVtlXXx8W10sYVtlXS5wdXNoKGkpfSkpLGkpOihlW25dPWksaFtuXT1pLm5hbWUsbisrLGkpfTtyZXR1cm4gd2UuZWFjaCh1LGkpLHQubGlicmFyeSYmdC5saWJyYXJ5LmZ1bmN0aW9uJiZ3ZS5lYWNoKHQubGlicmFyeS5mdW5jdGlvbiwodD0+e2NvbnN0IGU9X0F0K3Quc2lnbmF0dXJlLm5hbWU7aWYoaSh7bmFtZTplLGlucHV0OltdLGRldmljZToiIixvcDoiIixhdHRyOltdfSksdC5zaWduYXR1cmUuaW5wdXRfYXJnKXtsZXQgbj0wO2NvbnN0IHI9dD0+e2koe25hbWU6ZSttQXQrdC5uYW1lLGlucHV0OltdLGRldmljZToiIixvcDoiaW5wdXRfYXJnIixhdHRyOlt7a2V5OiJUIix2YWx1ZTp7dHlwZTp0LnR5cGV9fV19KS5mdW5jdGlvbklucHV0SW5kZXg9bixuKyt9O3Quc2lnbmF0dXJlLmlucHV0X2FyZy5uYW1lP3IodC5zaWduYXR1cmUuaW5wdXRfYXJnKTp3ZS5lYWNoKHQuc2lnbmF0dXJlLmlucHV0X2FyZyxyKX1sZXQgbj0wO2NvbnN0IHI9e307aWYodC5zaWduYXR1cmUub3V0cHV0X2FyZyl7Y29uc3QgaT10PT57cltlK21BdCt0Lm5hbWVdPW4sbisrfTt0LnNpZ25hdHVyZS5vdXRwdXRfYXJnLm5hbWU/aSh0LnNpZ25hdHVyZS5vdXRwdXRfYXJnKTp3ZS5lYWNoKHQuc2lnbmF0dXJlLm91dHB1dF9hcmcsaSl9d2UuZWFjaCh0Lm5vZGVfZGVmLCh0PT57dC5uYW1lPWUrIi8iK3QubmFtZSwic3RyaW5nIj09dHlwZW9mIHQuaW5wdXQmJih0LmlucHV0PVt0LmlucHV0XSk7Y29uc3Qgbj1pKHQpO3dlLmlzTnVtYmVyKHJbdC5uYW1lXSkmJihuLmZ1bmN0aW9uT3V0cHV0SW5kZXg9clt0Lm5hbWVdKSx3ZS5lYWNoKG4uaW5wdXRzLCh0PT57dC5uYW1lPWUrbUF0K3QubmFtZX0pKX0pKX0pKSxlLnNwbGljZShuKSxoLnNwbGljZShuKSxlfSksaSxZQ3QuTk9STUFMSVpJTkdfTkFNRVMpLnRoZW4oKHQ9PmFBdCgiQnVpbGRpbmcgdGhlIGRhdGEgc3RydWN0dXJlIiw3MCwoKCk9PntsZXQgZT0oZnVuY3Rpb24gaSh0LGUpe2xldCBuPXt9LGk9e307dC5zb3J0KCk7Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aC0xOysrZSl7bGV0IHI9dFtlXTt3ZS5lYWNoKEhBdChyKS5zbGljZSgwLC0xKSwodD0+e2lbdF09ITB9KSk7Zm9yKGxldCBpPWUrMTtpPHQubGVuZ3RoOysraSl7bGV0IGU9dFtpXTtpZighd2Uuc3RhcnRzV2l0aChlLHIpKWJyZWFrO2lmKGUubGVuZ3RoPnIubGVuZ3RoJiZlLmNoYXJBdChyLmxlbmd0aCk9PT1tQXQpe25bcl09REF0KHIpO2JyZWFrfX19cmV0dXJuIHdlLmVhY2goZSwodD0+e3QgaW4gaSYmKG5bdF09REF0KHQpKX0pKSxufSkoaCxjKSxzPW5ldyB3QXQ7cmV0dXJuIHdlLmVhY2godCwodD0+e2xldCBuPWVbdC5uYW1lXXx8dC5uYW1lO3Mubm9kZXNbbl09dCx0Lm5hbWUgaW4gYSYmKHQub3V0RW1iZWRkaW5ncz1hW3QubmFtZV0sd2UuZWFjaCh0Lm91dEVtYmVkZGluZ3MsKHQ9Pnt0Lm5hbWU9ZVt0Lm5hbWVdfHx0Lm5hbWV9KSkpLHQubmFtZT1ufSkpLHdlLmVhY2godCwodD0+e3dlLmVhY2godC5pbnB1dHMsKChpLGEpPT57bGV0IGw9aS5uYW1lO2lmKGwgaW4gcil7bGV0IGk9cltsXTt0LmluRW1iZWRkaW5ncy5wdXNoKGkpO2ZvcihsZXQgciBvZiBpLmlucHV0cylJQXQocyxlW3IubmFtZV18fHIubmFtZSx0LHIsbixhKX1lbHNlIGlmKGwgaW4gbyl7bGV0IHI9b1tsXTtmb3IobGV0IG8gb2Ygci5pbnB1dHMpSUF0KHMsZVtvLm5hbWVdfHxvLm5hbWUsdCxpLG4sYSl9ZWxzZSBJQXQocyxlW2xdfHxsLHQsaSxuLGEpfSkpfSkpLHdlLmVhY2gociwoKHQsbik9Pnt0Lm5hbWU9ZVt0Lm5hbWVdfHx0Lm5hbWV9KSksc30pLGksWUN0LkJVSUxEX1NMSU1fR1JBUEgpKSl9KSh0LE9BdCxsKX0pLCgoKT0+e3Rocm93IG5ldyBFcnJvcigiTWFsZm9ybWVkIEdyYXBoRGVmLiBUaGlzIGNhbiBzb21ldGltZXMgYmUgY2F1c2VkIGJ5IGEgYmFkIG5ldHdvcmsgY29ubmVjdGlvbiBvciBkaWZmaWN1bHR5IHJlY29uY2lsaW5nIG11bHRpcGxlIEdyYXBoRGVmczsgZm9yIHRoZSBsYXR0ZXIgY2FzZSwgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2lzc3Vlcy8xOTI5LiIpfSkpLnRoZW4oKHQ9Pm4odGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXshKGZ1bmN0aW9uIGUodCxuKXtpZihudWxsPT09bil0aHJvdyBuZXcgRXJyb3IoIkNvbXBhdGliaWxpdHkgcHJvdmlkZXIgcmVxdWlyZWQsIGJ1dCBnb3Q6ICIrbik7d2UuZWFjaCh0Lm5vZGVzLCh0PT57dC5jb21wYXRpYmxlPW4ub3BWYWxpZCh0KSx3ZS5lYWNoKHQuaW5FbWJlZGRpbmdzLCh0PT57dC5jb21wYXRpYmxlPW4ub3BWYWxpZCh0KX0pKSx3ZS5lYWNoKHQub3V0RW1iZWRkaW5ncywodD0+e3QuY29tcGF0aWJsZT1uLm9wVmFsaWQodCl9KSl9KSl9KSh0LG8pO2NvbnN0IG49eWllbGQgZ0x0KHQsYSxjKTtyZXR1cm4gbkF0KHt0aW1pbmdJZDpZQ3QuR1JBUEhfTE9BRF9TVUNDRUVERUQsZXZlbnRWYWx1ZTpEYXRlLm5vdygpLXV9KSx7Z3JhcGg6dCxncmFwaEhpZXJhcmNoeTpufX0pKSkpLmNhdGNoKChlPT57dGhyb3cgdC5yZXBvcnRFcnJvcihgR3JhcGggdmlzdWFsaXphdGlvbiBmYWlsZWQuXG5cbiR7ZX1gLGUpLG5BdCh7dGltaW5nSWQ6WUN0LkdSQVBIX0xPQURfRkFJTEVELGV2ZW50VmFsdWU6RGF0ZS5ub3coKS11fSksZX0pKX0pKHJBdCh0aGlzKSx0LGUsdGhpcy5jb21wYXRpYmlsaXR5UHJvdmlkZXIsdGhpcy5oaWVyYXJjaHlQYXJhbXMpLnRoZW4oZnVuY3Rpb24oe2dyYXBoOnQsZ3JhcGhIaWVyYXJjaHk6ZX0pe3RoaXMuX3NldE91dEdyYXBoKHQpLHRoaXMuX3NldE91dEdyYXBoSGllcmFyY2h5KGUpfS5iaW5kKHRoaXMpKX1fc2VsZWN0ZWRGaWxlQ2hhbmdlZCgpe3ZhciB0PXRoaXMuc2VsZWN0ZWRGaWxlO2lmKCF0KXJldHVybjtjb25zdCBlPXQudGFyZ2V0LG49ZS5maWxlc1swXTtuJiYoZS52YWx1ZT0iIix0aGlzLl9mZXRjaEFuZENvbnN0cnVjdEhpZXJhcmNoaWNhbEdyYXBoKG51bGwsbikpfX07dChbbyh7dHlwZTpBcnJheX0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLGpMdC5wcm90b3R5cGUsImRhdGFzZXRzIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxqTHQucHJvdG90eXBlLCJwcm9ncmVzcyIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxqTHQucHJvdG90eXBlLCJzZWxlY3Rpb24iLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sakx0LnByb3RvdHlwZSwic2VsZWN0ZWRGaWxlIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLGpMdC5wcm90b3R5cGUsImNvbXBhdGliaWxpdHlQcm92aWRlciIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxqTHQucHJvdG90eXBlLCJoaWVyYXJjaHlQYXJhbXMiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3QscmVhZE9ubHk6ITAsbm90aWZ5OiEwfSksZSgiZGVzaWduOnR5cGUiLHBMdCldLGpMdC5wcm90b3R5cGUsIm91dEdyYXBoSGllcmFyY2h5Iix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0LHJlYWRPbmx5OiEwLG5vdGlmeTohMH0pLGUoImRlc2lnbjp0eXBlIix3QXQpXSxqTHQucHJvdG90eXBlLCJvdXRHcmFwaCIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdCxyZWFkT25seTohMCxub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sakx0LnByb3RvdHlwZSwib3V0U3RhdHMiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sakx0LnByb3RvdHlwZSwiX2dyYXBoUnVuVGFnIix2b2lkIDApLHQoW2EoInNlbGVjdGlvbiIsImNvbXBhdGliaWxpdHlQcm92aWRlciIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sakx0LnByb3RvdHlwZSwiX3NlbGVjdGlvbkNoYW5nZWQiLG51bGwpLHQoW2EoInNlbGVjdGVkRmlsZSIsImNvbXBhdGliaWxpdHlQcm92aWRlciIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sakx0LnByb3RvdHlwZSwiX3NlbGVjdGVkRmlsZUNoYW5nZWQiLG51bGwpLGpMdD10KFtpKCJ0Zi1ncmFwaC1kYXNoYm9hcmQtbG9hZGVyIildLGpMdCk7bGV0IEdMdD1jbGFzcyBleHRlbmRzKHRyKHllKSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2RhdGFzZXRzPVtdLHRoaXMuX2RhdGFzZXRzRmV0Y2hlZD0hMSx0aGlzLl9zZWxlY3RlZERhdGFzZXQ9MCx0aGlzLl9yZXF1ZXN0TWFuYWdlcj1uZXcgaHIsdGhpcy5fY2FuY2VsbGVyPW5ldyBOTyx0aGlzLnNwZWNpZmljSGVhbHRoUGlsbFN0ZXA9MCx0aGlzLmhlYWx0aFBpbGxzVG9nZ2xlZE9uPSExLHRoaXMuX2RlYnVnZ2VyTnVtZXJpY0FsZXJ0cz1bXSx0aGlzLl9ub2RlTmFtZXNUb0hlYWx0aFBpbGxzPXt9LHRoaXMuX2hlYWx0aFBpbGxSZXF1ZXN0SWQ9MSx0aGlzLl9oZWFsdGhQaWxsU3RlcFJlcXVlc3RUaW1lckRlbGF5PTUwMCx0aGlzLnJ1bj1JcygicnVuIix7ZGVmYXVsdFZhbHVlOiIiLHVzZUxvY2FsU3RvcmFnZTohMX0pLmNhbGwodGhpcyksdGhpcy5fcnVuT2JzZXJ2ZXI9T3MoInJ1biIse2RlZmF1bHRWYWx1ZToiIixwb2x5bWVyUHJvcGVydHk6InJ1biIsdXNlTG9jYWxTdG9yYWdlOiExfSl9YXR0YWNoZWQoKXt0aGlzLnNldCgiX2lzQXR0YWNoZWQiLCEwKX1kZXRhY2hlZCgpe3RoaXMuc2V0KCJfaXNBdHRhY2hlZCIsITEpfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoIm5vZGUtdG9nZ2xlLWV4cGFuZCIsdGhpcy5faGFuZGxlTm9kZVRvZ2dsZUV4cGFuZC5iaW5kKHRoaXMpKX1yZWxvYWQoKXt0aGlzLl9kZWJ1Z2dlckRhdGFFbmFibGVkfHx0aGlzLl9yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KGdyKCkucGx1Z2luc0xpc3RpbmcoKSkudGhlbih0aGlzLl9jYW5jZWxsZXIuY2FuY2VsbGFibGUoKHQ9Pnt0LmNhbmNlbGxlZHx8dC52YWx1ZS5kZWJ1Z2dlciYmdGhpcy5zZXQoIl9kZWJ1Z2dlckRhdGFFbmFibGVkIiwhMCl9KSkpLHRoaXMuX21heWJlRmV0Y2hIZWFsdGhQaWxscygpfV9maXQoKXt0aGlzLiQkKCIjZ3JhcGhib2FyZCIpLmZpdCgpfV9vbkRvd25sb2FkSW1hZ2VSZXF1ZXN0ZWQodCl7dGhpcy4kJCgiI2dyYXBoYm9hcmQiKS5kb3dubG9hZEFzSW1hZ2UodC5kZXRhaWwpfV9nZXRHcmFwaERpc3BsYXlDbGFzc05hbWUodCxlKXtyZXR1cm4gdHx8ZS5sZW5ndGg/IiI6Im5vLWdyYXBoIn1fZmV0Y2hEYXRhc2V0KCl7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoZ3IoKS5wbHVnaW5Sb3V0ZSgiZ3JhcGhzIiwiL2luZm8iKSl9X2ZldGNoSGVhbHRoUGlsbHModCxlKXtjb25zdCBuPXtub2RlX25hbWVzOkpTT04uc3RyaW5naWZ5KHQpLHJ1bjoiX19kZWJ1Z2dlcl9kYXRhX18ifTt2b2lkIDAhPT1lJiYobi5zdGVwPWUpO2NvbnN0IGk9Z3IoKS5wbHVnaW5Sb3V0ZSgiZGVidWdnZXIiLCIvaGVhbHRoX3BpbGxzIik7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoaSxuKX1fZmV0Y2hEZWJ1Z2dlck51bWVyaWNzQWxlcnRzKCl7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoZ3IoKS5wbHVnaW5Sb3V0ZSgiZGVidWdnZXIiLCIvbnVtZXJpY3NfYWxlcnRfcmVwb3J0IikpfV9ncmFwaFVybCh0LGUsbil7cmV0dXJuIGdyKCkucGx1Z2luUm91dGUoImdyYXBocyIsIi9ncmFwaCIsbmV3IFVSTFNlYXJjaFBhcmFtcyh7cnVuOnQsbGltaXRfYXR0cl9zaXplOmUsbGFyZ2VfYXR0cnNfa2V5Om59KSl9X3Nob3VsZFJlcXVlc3RIZWFsdGhQaWxscygpe3JldHVybiB0aGlzLl9kZWJ1Z2dlckRhdGFFbmFibGVkJiZ0aGlzLmhlYWx0aFBpbGxzVG9nZ2xlZE9uJiZ0aGlzLl9yZW5kZXJIaWVyYXJjaHkmJnRoaXMuX2RhdGFzZXRzU3RhdGUodGhpcy5fZGF0YXNldHNGZXRjaGVkLHRoaXMuX2RhdGFzZXRzLCJQUkVTRU5UIil9X21heWJlSW5pdGlhbGl6ZURhc2hib2FyZCgpeyF0aGlzLl9pbml0aWFsaXplZCYmdGhpcy5faXNBdHRhY2hlZCYmKHRoaXMuc2V0KCJfY29tcGF0aWJpbGl0eVByb3ZpZGVyIixuZXcgQkx0KSx0aGlzLl9pbml0aWFsaXplZD0hMCx0aGlzLl9mZXRjaERhdGFzZXQoKS50aGVuKCh0PT57Y29uc3QgZT1PYmplY3Qua2V5cyh0KTt0aGlzLl9kYXRhc2V0cz1lLnNvcnQoZXIpLm1hcCgoZT0+e2NvbnN0IG49dFtlXSxpPU9iamVjdC5rZXlzKG4udGFncykuc29ydChlcikubWFwKCh0PT5uLnRhZ3NbdF0pKS5tYXAoKCh7dGFnOnQsY29uY2VwdHVhbF9ncmFwaDplLG9wX2dyYXBoOm4scHJvZmlsZTppfSk9Pih7dGFnOnQsZGlzcGxheU5hbWU6dCxjb25jZXB0dWFsR3JhcGg6ZSxvcEdyYXBoOm4scHJvZmlsZTppfSkpKTtyZXR1cm57bmFtZTplLHRhZ3M6bi5ydW5fZ3JhcGg/W3t0YWc6bnVsbCxkaXNwbGF5TmFtZToiRGVmYXVsdCIsY29uY2VwdHVhbEdyYXBoOiExLG9wR3JhcGg6ITAscHJvZmlsZTohMX0sLi4uaV06aX19KSksdGhpcy5fZGF0YXNldHNGZXRjaGVkPSEwfSkpKX1fZGV0ZXJtaW5lU2VsZWN0ZWREYXRhc2V0KCl7dmFyIHQ9dGhpcy5fZGF0YXNldHNGZXRjaGVkLGU9dGhpcy5fZGF0YXNldHMsbj10aGlzLnJ1bjtpZighbilyZXR1cm4gdm9pZCB0aGlzLnNldCgiX3NlbGVjdGVkRGF0YXNldCIsMCk7Y29uc3QgaT1lLmZpbmRJbmRleCgodD0+dC5uYW1lPT09bikpO2lmKC0xIT09aSl0aGlzLnNldCgiX3NlbGVjdGVkRGF0YXNldCIsaSk7ZWxzZSBpZih0KXtjb25zdCB0PXRoaXMuJCQoIiNlcnJvci1kaWFsb2ciKTt0LnRleHRDb250ZW50PWBObyBkYXRhc2V0IG5hbWVkICIke259IiBjb3VsZCBiZSBmb3VuZC5gLHQub3BlbigpfX1fdXBkYXRlU2VsZWN0ZWREYXRhc2V0TmFtZSgpe3ZhciB0PXRoaXMuX2RhdGFzZXRzLGU9dGhpcy5fc2VsZWN0ZWREYXRhc2V0O3RoaXMuX2RhdGFzZXRzRmV0Y2hlZCYmKHQubGVuZ3RoPD1lfHx0aGlzLnNldCgicnVuIix0W2VdLm5hbWUpKX1fcmVxdWVzdEhlYWx0aFBpbGxzKCl7dGhpcy5zZXQoIl9hcmVIZWFsdGhQaWxsc0xvYWRpbmciLCEwKTt2YXIgdD0rK3RoaXMuX2hlYWx0aFBpbGxSZXF1ZXN0SWQ7bnVsbCE9PXRoaXMuX2hlYWx0aFBpbGxTdGVwUmVxdWVzdFRpbWVySWQmJih3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMuX2hlYWx0aFBpbGxTdGVwUmVxdWVzdFRpbWVySWQpLHRoaXMuX2hlYWx0aFBpbGxTdGVwUmVxdWVzdFRpbWVySWQ9bnVsbCksdGhpcy5hbGxTdGVwc01vZGVFbmFibGVkP3RoaXMuX2hlYWx0aFBpbGxTdGVwUmVxdWVzdFRpbWVySWQ9c2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuX2hlYWx0aFBpbGxTdGVwUmVxdWVzdFRpbWVySWQ9bnVsbCx0aGlzLl9pbml0aWF0ZU5ldHdvcmtSZXF1ZXN0Rm9ySGVhbHRoUGlsbHModCl9LmJpbmQodGhpcyksdGhpcy5faGVhbHRoUGlsbFN0ZXBSZXF1ZXN0VGltZXJEZWxheSk6dGhpcy5faW5pdGlhdGVOZXR3b3JrUmVxdWVzdEZvckhlYWx0aFBpbGxzKHQpfV9pbml0aWF0ZU5ldHdvcmtSZXF1ZXN0Rm9ySGVhbHRoUGlsbHModCl7aWYodGhpcy5faGVhbHRoUGlsbFJlcXVlc3RJZCE9PXQpcmV0dXJuO2NvbnN0IGU9dGhpcy5hbGxTdGVwc01vZGVFbmFibGVkP3RoaXMuc3BlY2lmaWNIZWFsdGhQaWxsU3RlcDp2b2lkIDAsbj10aGlzLl9mZXRjaEhlYWx0aFBpbGxzKHRoaXMuX3JlbmRlckhpZXJhcmNoeS5nZXROYW1lc09mUmVuZGVyZWRPcHMoKSxlKSxpPXRoaXMuX2ZldGNoRGVidWdnZXJOdW1lcmljc0FsZXJ0cygpO1Byb21pc2UuYWxsKFtuLGldKS50aGVuKGZ1bmN0aW9uKGUpe3ZhciBuPWVbMF0saT1lWzFdO2lmKHRoaXMuaGVhbHRoUGlsbHNUb2dnbGVkT24mJnQ9PT10aGlzLl9oZWFsdGhQaWxsUmVxdWVzdElkKXtmb3IodmFyIHIgaW4gbil7dGhpcy5zZXQoIl9oZWFsdGhQaWxsU3RlcEluZGV4IixuW3JdLmxlbmd0aC0xKTticmVha310aGlzLnNldCgiX2RlYnVnZ2VyTnVtZXJpY0FsZXJ0cyIsaSksdGhpcy5zZXQoIl9ub2RlTmFtZXNUb0hlYWx0aFBpbGxzIixuKSx0aGlzLnNldCgiX2FyZUhlYWx0aFBpbGxzTG9hZGluZyIsITEpLHRoaXMuc2V0KCJfaGVhbHRoUGlsbFN0ZXBSZXF1ZXN0VGltZXJJZCIsbnVsbCl9fS5iaW5kKHRoaXMpKX1fZGF0YXNldHNTdGF0ZSh0LGUsbil7cmV0dXJuIHQ/ZSYmZS5sZW5ndGg/IlBSRVNFTlQiPT09bjoiRU1QVFkiPT09bjoiTk9UX0xPQURFRCI9PT1ufV9yZW5kZXJIaWVyYXJjaHlDaGFuZ2VkKHQpe3RoaXMucmVsb2FkKCl9X2hhbmRsZU5vZGVUb2dnbGVFeHBhbmQoKXt0aGlzLl9tYXliZUZldGNoSGVhbHRoUGlsbHMoKX1faGVhbHRoUGlsbHNUb2dnbGVkT25DaGFuZ2VkKHQpe3Q/dGhpcy5yZWxvYWQoKTp0aGlzLnNldCgiX25vZGVOYW1lc1RvSGVhbHRoUGlsbHMiLHt9KX1fbWF5YmVGZXRjaEhlYWx0aFBpbGxzKCl7dGhpcy5fc2hvdWxkUmVxdWVzdEhlYWx0aFBpbGxzKCkmJnRoaXMuX3JlcXVlc3RIZWFsdGhQaWxscygpfX07R0x0LnRlbXBsYXRlPV9lYAogICAgPHBhcGVyLWRpYWxvZyBpZD0iZXJyb3ItZGlhbG9nIiB3aXRoLWJhY2tkcm9wPjwvcGFwZXItZGlhbG9nPgogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDx0Zi1ncmFwaC1jb250cm9scwogICAgICAgIGlkPSJjb250cm9scyIKICAgICAgICBjbGFzcz0ic2lkZWJhciIKICAgICAgICBzbG90PSJzaWRlYmFyIgogICAgICAgIGRldmljZXMtZm9yLXN0YXRzPSJ7e19kZXZpY2VzRm9yU3RhdHN9fSIKICAgICAgICBjb2xvci1ieS1wYXJhbXM9IltbX2NvbG9yQnlQYXJhbXNdXSIKICAgICAgICBzdGF0cz0iW1tfc3RhdHNdXSIKICAgICAgICBjb2xvci1ieT0ie3tfY29sb3JCeX19IgogICAgICAgIGRhdGFzZXRzPSJbW19kYXRhc2V0c11dIgogICAgICAgIHJlbmRlci1oaWVyYXJjaHk9IltbX3JlbmRlckhpZXJhcmNoeV1dIgogICAgICAgIHNlbGVjdGlvbj0ie3tfc2VsZWN0aW9ufX0iCiAgICAgICAgc2VsZWN0ZWQtZmlsZT0ie3tfc2VsZWN0ZWRGaWxlfX0iCiAgICAgICAgc2VsZWN0ZWQtbm9kZT0ie3tfc2VsZWN0ZWROb2RlfX0iCiAgICAgICAgaGVhbHRoLXBpbGxzLWZlYXR1cmUtZW5hYmxlZD0iW1tfZGVidWdnZXJEYXRhRW5hYmxlZF1dIgogICAgICAgIGhlYWx0aC1waWxscy10b2dnbGVkLW9uPSJ7e2hlYWx0aFBpbGxzVG9nZ2xlZE9ufX0iCiAgICAgICAgb24tZml0LXRhcD0iX2ZpdCIKICAgICAgICB0cmFjZS1pbnB1dHM9Int7X3RyYWNlSW5wdXRzfX0iCiAgICAgICAgYXV0by1leHRyYWN0LW5vZGVzPSJ7e19hdXRvRXh0cmFjdE5vZGVzfX0iCiAgICAgICAgb24tZG93bmxvYWQtaW1hZ2UtcmVxdWVzdGVkPSJfb25Eb3dubG9hZEltYWdlUmVxdWVzdGVkIgogICAgICA+PC90Zi1ncmFwaC1jb250cm9scz4KICAgICAgPGRpdgogICAgICAgIGNsYXNzJD0iY2VudGVyIFtbX2dldEdyYXBoRGlzcGxheUNsYXNzTmFtZShfc2VsZWN0ZWRGaWxlLCBfZGF0YXNldHMpXV0iCiAgICAgICAgc2xvdD0iY2VudGVyIgogICAgICA+CiAgICAgICAgPHRmLWdyYXBoLWRhc2hib2FyZC1sb2FkZXIKICAgICAgICAgIGlkPSJsb2FkZXIiCiAgICAgICAgICBkYXRhc2V0cz0iW1tfZGF0YXNldHNdXSIKICAgICAgICAgIHNlbGVjdGlvbj0iW1tfc2VsZWN0aW9uXV0iCiAgICAgICAgICBzZWxlY3RlZC1maWxlPSJbW19zZWxlY3RlZEZpbGVdXSIKICAgICAgICAgIG91dC1ncmFwaC1oaWVyYXJjaHk9Int7X2dyYXBoSGllcmFyY2h5fX0iCiAgICAgICAgICBvdXQtZ3JhcGg9Int7X2dyYXBofX0iCiAgICAgICAgICBvdXQtc3RhdHM9Int7X3N0YXRzfX0iCiAgICAgICAgICBwcm9ncmVzcz0ie3tfcHJvZ3Jlc3N9fSIKICAgICAgICAgIGhpZXJhcmNoeS1wYXJhbXM9IltbX2hpZXJhcmNoeVBhcmFtc11dIgogICAgICAgICAgY29tcGF0aWJpbGl0eS1wcm92aWRlcj0iW1tfY29tcGF0aWJpbGl0eVByb3ZpZGVyXV0iCiAgICAgICAgPjwvdGYtZ3JhcGgtZGFzaGJvYXJkLWxvYWRlcj4KICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLW1lc3NhZ2UiPgogICAgICAgICAgPGgzPk5vIGdyYXBoIGRlZmluaXRpb24gZmlsZXMgd2VyZSBmb3VuZC48L2gzPgogICAgICAgICAgPHA+CiAgICAgICAgICAgIFRvIHN0b3JlIGEgZ3JhcGgsIGNyZWF0ZSBhCiAgICAgICAgICAgIDxjb2RlPnRmLnN1bW1hcnkuRmlsZVdyaXRlcjwvY29kZT4KICAgICAgICAgICAgYW5kIHBhc3MgdGhlIGdyYXBoIGVpdGhlciB2aWEgdGhlIGNvbnN0cnVjdG9yLCBvciBieSBjYWxsaW5nIGl0cwogICAgICAgICAgICA8Y29kZT5hZGRfZ3JhcGgoKTwvY29kZT4gbWV0aG9kLiBZb3UgbWF5IHdhbnQgdG8gY2hlY2sgb3V0IHRoZQogICAgICAgICAgICA8YSBocmVmPSJodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy90ZW5zb3Jib2FyZC9ncmFwaHMiCiAgICAgICAgICAgICAgPmV4YW1pbmluZyB0aGUgVGVuc29yRmxvdyBncmFwaCB0dXRvcmlhbDwvYQogICAgICAgICAgICA+LgogICAgICAgICAgPC9wPgoKICAgICAgICAgIDxwPgogICAgICAgICAgICBJZiB5b3XigJlyZSBuZXcgdG8gdXNpbmcgVGVuc29yQm9hcmQsIGFuZCB3YW50IHRvIGZpbmQgb3V0IGhvdyB0byBhZGQKICAgICAgICAgICAgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgPGEKICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQiCiAgICAgICAgICAgICAgPlJFQURNRTwvYQogICAgICAgICAgICA+CiAgICAgICAgICAgIGFuZCBwZXJoYXBzIHRoZQogICAgICAgICAgICA8YQogICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiCiAgICAgICAgICAgICAgPlRlbnNvckJvYXJkIHR1dG9yaWFsPC9hCiAgICAgICAgICAgID4uCiAgICAgICAgICA8L3A+CgogICAgICAgICAgPHA+CiAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI215LXRlbnNvcmJvYXJkLWlzbnQtc2hvd2luZy1hbnktZGF0YS13aGF0cy13cm9uZyIKICAgICAgICAgICAgICA+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYQogICAgICAgICAgICA+CiAgICAgICAgICAgIGFuZCBjb25zaWRlciBmaWxpbmcgYW4gaXNzdWUgb24gR2l0SHViLgogICAgICAgICAgPC9wPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImdyYXBoYm9hcmQiPgogICAgICAgICAgPHRmLWdyYXBoLWJvYXJkCiAgICAgICAgICAgIGlkPSJncmFwaGJvYXJkIgogICAgICAgICAgICBkZXZpY2VzLWZvci1zdGF0cz0iW1tfZGV2aWNlc0ZvclN0YXRzXV0iCiAgICAgICAgICAgIGNvbG9yLWJ5PSJ7e19jb2xvckJ5fX0iCiAgICAgICAgICAgIGNvbG9yLWJ5LXBhcmFtcz0ie3tfY29sb3JCeVBhcmFtc319IgogICAgICAgICAgICBncmFwaC1oaWVyYXJjaHk9IltbX2dyYXBoSGllcmFyY2h5XV0iCiAgICAgICAgICAgIGdyYXBoPSJbW19ncmFwaF1dIgogICAgICAgICAgICBoaWVyYXJjaHktcGFyYW1zPSJbW19oaWVyYXJjaHlQYXJhbXNdXSIKICAgICAgICAgICAgcHJvZ3Jlc3M9IltbX3Byb2dyZXNzXV0iCiAgICAgICAgICAgIGRlYnVnZ2VyLWRhdGEtZW5hYmxlZD0iW1tfZGVidWdnZXJEYXRhRW5hYmxlZF1dIgogICAgICAgICAgICBhcmUtaGVhbHRoLXBpbGxzLWxvYWRpbmc9IltbX2FyZUhlYWx0aFBpbGxzTG9hZGluZ11dIgogICAgICAgICAgICBkZWJ1Z2dlci1udW1lcmljLWFsZXJ0cz0iW1tfZGVidWdnZXJOdW1lcmljQWxlcnRzXV0iCiAgICAgICAgICAgIG5vZGUtbmFtZXMtdG8taGVhbHRoLXBpbGxzPSJbW19ub2RlTmFtZXNUb0hlYWx0aFBpbGxzXV0iCiAgICAgICAgICAgIGFsbC1zdGVwcy1tb2RlLWVuYWJsZWQ9Int7YWxsU3RlcHNNb2RlRW5hYmxlZH19IgogICAgICAgICAgICBzcGVjaWZpYy1oZWFsdGgtcGlsbC1zdGVwPSJ7e3NwZWNpZmljSGVhbHRoUGlsbFN0ZXB9fSIKICAgICAgICAgICAgaGVhbHRoLXBpbGwtc3RlcC1pbmRleD0iW1tfaGVhbHRoUGlsbFN0ZXBJbmRleF1dIgogICAgICAgICAgICByZW5kZXItaGllcmFyY2h5PSJ7e19yZW5kZXJIaWVyYXJjaHl9fSIKICAgICAgICAgICAgc2VsZWN0ZWQtbm9kZT0ie3tfc2VsZWN0ZWROb2RlfX0iCiAgICAgICAgICAgIHN0YXRzPSJbW19zdGF0c11dIgogICAgICAgICAgICB0cmFjZS1pbnB1dHM9IltbX3RyYWNlSW5wdXRzXV0iCiAgICAgICAgICAgIGF1dG8tZXh0cmFjdC1ub2Rlcz0iW1tfYXV0b0V4dHJhY3ROb2Rlc11dIgogICAgICAgICAgPjwvdGYtZ3JhcGgtYm9hcmQ+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC90Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgPHN0eWxlPgogICAgICA6aG9zdCAvZGVlcC8gewogICAgICAgIGZvbnQtZmFtaWx5OiAnUm9ib3RvJywgc2Fucy1zZXJpZjsKICAgICAgfQoKICAgICAgLnNpZGViYXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAuY2VudGVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICBwYXBlci1kaWFsb2cgewogICAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgIH0KCiAgICAgIC5uby1kYXRhLW1lc3NhZ2UgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CgogICAgICAuZ3JhcGhib2FyZCB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAubm8tZ3JhcGggLmdyYXBoYm9hcmQgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5jZW50ZXI6bm90KC5uby1ncmFwaCkgLm5vLWRhdGEtbWVzc2FnZSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgLHQoW28oe3R5cGU6QXJyYXl9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSxHTHQucHJvdG90eXBlLCJfZGF0YXNldHMiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxHTHQucHJvdG90eXBlLCJfZGF0YXNldHNGZXRjaGVkIix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLEdMdC5wcm90b3R5cGUsIl9zZWxlY3RlZERhdGFzZXQiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3Qsb2JzZXJ2ZXI6Il9yZW5kZXJIaWVyYXJjaHlDaGFuZ2VkIn0pLGUoImRlc2lnbjp0eXBlIixYQXQpXSxHTHQucHJvdG90eXBlLCJfcmVuZGVySGllcmFyY2h5Iix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLGhyKV0sR0x0LnByb3RvdHlwZSwiX3JlcXVlc3RNYW5hZ2VyIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE5PKV0sR0x0LnByb3RvdHlwZSwiX2NhbmNlbGxlciIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEdMdC5wcm90b3R5cGUsIl9kZWJ1Z2dlckRhdGFFbmFibGVkIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sR0x0LnByb3RvdHlwZSwiYWxsU3RlcHNNb2RlRW5hYmxlZCIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxHTHQucHJvdG90eXBlLCJzcGVjaWZpY0hlYWx0aFBpbGxTdGVwIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbixvYnNlcnZlcjoiX2hlYWx0aFBpbGxzVG9nZ2xlZE9uQ2hhbmdlZCJ9KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEdMdC5wcm90b3R5cGUsImhlYWx0aFBpbGxzVG9nZ2xlZE9uIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxHTHQucHJvdG90eXBlLCJzZWxlY3RlZE5vZGUiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxHTHQucHJvdG90eXBlLCJfaXNBdHRhY2hlZCIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEdMdC5wcm90b3R5cGUsIl9pbml0aWFsaXplZCIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEdMdC5wcm90b3R5cGUsIl9hcmVIZWFsdGhQaWxsc0xvYWRpbmciLHZvaWQgMCksdChbbyh7dHlwZTpBcnJheSxub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSxHTHQucHJvdG90eXBlLCJfZGVidWdnZXJOdW1lcmljQWxlcnRzIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLEdMdC5wcm90b3R5cGUsIl9ub2RlTmFtZXNUb0hlYWx0aFBpbGxzIix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLEdMdC5wcm90b3R5cGUsIl9oZWFsdGhQaWxsU3RlcEluZGV4Iix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLEdMdC5wcm90b3R5cGUsIl9oZWFsdGhQaWxsUmVxdWVzdElkIix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLEdMdC5wcm90b3R5cGUsIl9oZWFsdGhQaWxsU3RlcFJlcXVlc3RUaW1lcklkIix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLEdMdC5wcm90b3R5cGUsIl9oZWFsdGhQaWxsU3RlcFJlcXVlc3RUaW1lckRlbGF5Iix2b2lkIDApLHQoW28oe3R5cGU6QXJyYXl9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSxHTHQucHJvdG90eXBlLCJydW5zIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nLG5vdGlmeTohMCxvYnNlcnZlcjoiX3J1bk9ic2VydmVyIn0pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxHTHQucHJvdG90eXBlLCJydW4iLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sR0x0LnByb3RvdHlwZSwiX3NlbGVjdGlvbiIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxHTHQucHJvdG90eXBlLCJfY29tcGF0aWJpbGl0eVByb3ZpZGVyIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sR0x0LnByb3RvdHlwZSwiX3RyYWNlSW5wdXRzIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sR0x0LnByb3RvdHlwZSwiX2F1dG9FeHRyYWN0Tm9kZXMiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sR0x0LnByb3RvdHlwZSwiX3NlbGVjdGVkRmlsZSIsdm9pZCAwKSx0KFthKCJfaXNBdHRhY2hlZCIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sR0x0LnByb3RvdHlwZSwiX21heWJlSW5pdGlhbGl6ZURhc2hib2FyZCIsbnVsbCksdChbYSgiX2RhdGFzZXRzRmV0Y2hlZCIsIl9kYXRhc2V0cyIsInJ1biIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sR0x0LnByb3RvdHlwZSwiX2RldGVybWluZVNlbGVjdGVkRGF0YXNldCIsbnVsbCksdChbYSgiX2RhdGFzZXRzRmV0Y2hlZCIsIl9kYXRhc2V0cyIsIl9zZWxlY3RlZERhdGFzZXQiKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEdMdC5wcm90b3R5cGUsIl91cGRhdGVTZWxlY3RlZERhdGFzZXROYW1lIixudWxsKSxHTHQ9dChbaSgidGYtZ3JhcGgtZGFzaGJvYXJkIildLEdMdCk7Y29uc3QgV0x0PWZOO2xldCBxTHQ9Y2xhc3MgZXh0ZW5kcyh0cihubCh5ZSkpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5tb2RlPSJvZmZzZXQiLHRoaXMudGltZVByb3BlcnR5PSJzdGVwIix0aGlzLmJpbnM9ImJpbnMiLHRoaXMueD0ieCIsdGhpcy5keD0iZHgiLHRoaXMueT0ieSIsdGhpcy5jb2xvclNjYWxlPVdMdC5zY2FsZU9yZGluYWwoV0x0LnNjaGVtZUNhdGVnb3J5MTApLHRoaXMubW9kZVRyYW5zaXRpb25EdXJhdGlvbj01MDAsdGhpcy5fbmFtZT1udWxsLHRoaXMuX2RhdGE9bnVsbH1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5zY29wZVN1YnRyZWUodGhpcy4kLnN2ZywhMCl9YXR0YWNoZWQoKXt0aGlzLl9hdHRhY2hlZD0hMH1kZXRhY2hlZCgpe3RoaXMuX2F0dGFjaGVkPSExfXNldFNlcmllc0RhdGEodCxlKXt0aGlzLl9uYW1lPXQsdGhpcy5fZGF0YT1lLHRoaXMucmVkcmF3KCl9X3JlZHJhd09uQ2hhbmdlKCl7dGhpcy5yZWRyYXcoKX1yZWRyYXcoKXt0aGlzLl9kcmF3KDApfV9tb2RlUmVkcmF3KCl7dGhpcy5fZHJhdyh0aGlzLm1vZGVUcmFuc2l0aW9uRHVyYXRpb24pfV9kcmF3KHQpe2lmKCF0aGlzLl9hdHRhY2hlZHx8IXRoaXMuX2RhdGEpcmV0dXJuO2lmKHZvaWQgMD09PXQpdGhyb3cgbmV3IEVycm9yKCJ2ei1oaXN0b2dyYW0tdGltZXNlcmllcyBfZHJhdyBuZWVkcyBkdXJhdGlvbiIpO2lmKHRoaXMuX2RhdGEubGVuZ3RoPD0wKXRocm93IG5ldyBFcnJvcigiTm90IGVub3VnaCBzdGVwcyBpbiB0aGUgZGF0YSIpO2lmKCF0aGlzLl9kYXRhWzBdLmhhc093blByb3BlcnR5KHRoaXMuYmlucykpdGhyb3cgbmV3IEVycm9yKCJObyBiaW5zIHByb3BlcnR5IG9mICciK3RoaXMuYmlucysiJyBpbiBkYXRhIik7aWYodGhpcy5fZGF0YVswXVt0aGlzLmJpbnNdLmxlbmd0aDw9MCl0aHJvdyBuZXcgRXJyb3IoIk11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgYmluIGluIGJpbnMgaW4gZGF0YSIpO2lmKCF0aGlzLl9kYXRhWzBdW3RoaXMuYmluc11bMF0uaGFzT3duUHJvcGVydHkodGhpcy54KSl0aHJvdyBuZXcgRXJyb3IoIk5vIHggcHJvcGVydHkgJyIrdGhpcy54KyInIG9uIGJpbnMgZGF0YSIpO2lmKCF0aGlzLl9kYXRhWzBdW3RoaXMuYmluc11bMF0uaGFzT3duUHJvcGVydHkodGhpcy5keCkpdGhyb3cgbmV3IEVycm9yKCJObyBkeCBwcm9wZXJ0eSAnIit0aGlzLmR4KyInIG9uIGJpbnMgZGF0YSIpO2lmKCF0aGlzLl9kYXRhWzBdW3RoaXMuYmluc11bMF0uaGFzT3duUHJvcGVydHkodGhpcy55KSl0aHJvdyBuZXcgRXJyb3IoIk5vIHkgcHJvcGVydHkgJyIrdGhpcy55KyInIG9uIGJpbnMgZGF0YSIpO3ZhciBlPXRoaXMudGltZVByb3BlcnR5LG49dGhpcy54LGk9dGhpcy5iaW5zLHI9dGhpcy5keCxvPXRoaXMueSxhPXRoaXMuX2RhdGEscz10aGlzLm1vZGUsbD1XTHQuaGNsKHRoaXMuY29sb3JTY2FsZSh0aGlzLl9uYW1lKSksYz1XTHQuc2VsZWN0KHRoaXMuJC50b29sdGlwKSx1PWZ1bmN0aW9uKHQpe3JldHVybiB0W25dfSxoPWZ1bmN0aW9uKHQpe3JldHVybiB0W29dfSxkPWZ1bmN0aW9uKHQpe3JldHVybiB0W25dK3Rbcl19LHA9ZnVuY3Rpb24odCl7cmV0dXJuIHRbZV19OyJyZWxhdGl2ZSI9PT1lJiYocD1mdW5jdGlvbih0KXtyZXR1cm4gdC53YWxsX3RpbWUtYVswXS53YWxsX3RpbWV9KTt2YXIgZixtPXRoaXMuJC5zdmcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZz1tLndpZHRoLF89bS5oZWlnaHQseT17dG9wOjUscmlnaHQ6NjAsYm90dG9tOjIwLGxlZnQ6MjR9OyJvZmZzZXQiPT09cz95LnRvcD01KyhmPV8vMi41KTpmPV8teS50b3AteS5ib3R0b207dmFyIHY9Zy15LmxlZnQteS5yaWdodCxiPV8teS50b3AteS5ib3R0b207V0x0Lm1pbihhLHUpLFdMdC5tYXgoYSxkKTt2YXIgeD1XTHQuZm9ybWF0KCIuM24iKSx3PVdMdC5mb3JtYXQoIi4wZiIpOyJ3YWxsX3RpbWUiPT09ZT93PVdMdC50aW1lRm9ybWF0KCIlbS8lZCAlWCIpOiJyZWxhdGl2ZSI9PT1lJiYodz1mdW5jdGlvbih0KXtyZXR1cm4gV0x0LmZvcm1hdCgiLjFyIikodC8zNmU1KSsiaCJ9KTt2YXIgUz1hLm1hcCgoZnVuY3Rpb24odCxlKXtyZXR1cm5bV0x0Lm1pbih0W2ldLHUpLFdMdC5tYXgodFtpXSxkKV19KSksTT1hLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIFdMdC5leHRlbnQodFtpXSxoKX0pKSxFPTUwMCxUPVdMdC5leHRlbnQoYSxwKSxDPSgid2FsbF90aW1lIj09PWU/V0x0LnNjYWxlVGltZSgpOldMdC5zY2FsZUxpbmVhcigpKS5kb21haW4oVCkucmFuZ2UoWzAsIm9mZnNldCI9PT1zP2I6MF0pLEE9V0x0LnNjYWxlTGluZWFyKCkuZG9tYWluKFswLFdMdC5tYXgoYSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gTVtlXVsxXX0pKV0pLnJhbmdlKFtmLDBdKSxrPVdMdC5zY2FsZUxpbmVhcigpLmRvbWFpbihBLmRvbWFpbigpKS5yYW5nZShbRSwwXSksTD1XTHQuc2NhbGVMaW5lYXIoKS5kb21haW4oW1dMdC5taW4oYSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gU1tlXVswXX0pKSxXTHQubWF4KGEsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIFNbZV1bMV19KSldKS5uaWNlKCkucmFuZ2UoWzAsdl0pLFA9V0x0LnNjYWxlTGluZWFyKCkuZG9tYWluKEwuZG9tYWluKCkpLnJhbmdlKFswLEVdKTtjb25zdCBOPVdMdC5zY2FsZUxpbmVhcigpLmRvbWFpbihXTHQuZXh0ZW50KGEscCkpLnJhbmdlKFtsLmJyaWdodGVyKCksbC5kYXJrZXIoKV0pLmludGVycG9sYXRlKFdMdC5pbnRlcnBvbGF0ZUhjbCk7dmFyIEk9V0x0LmF4aXNCb3R0b20oTCkudGlja3MoTWF0aC5tYXgoMix2LzIwKSksTz1XTHQuYXhpc1JpZ2h0KEMpLnRpY2tzKE1hdGgubWF4KDIsYi8xNSkpLnRpY2tGb3JtYXQodyksUj1XTHQuYXhpc1JpZ2h0KEEpLnRpY2tzKE1hdGgubWF4KDIsYi8xNSkpLnRpY2tTaXplKHYrNSkudGlja0Zvcm1hdCh4KSx6PWZ1bmN0aW9uKHQpe3JldHVybiB0W25dK3Rbcl0vMn0sRD1XTHQubGluZSgpLngoKGZ1bmN0aW9uKHQpe3JldHVybiBQKHoodCkpfSkpLnkoKGZ1bmN0aW9uKHQpe3JldHVybiBrKHRbb10pfSkpLEI9dGhpcy4kLnN2ZyxIPVdMdC5zZWxlY3QoQiksRj1ILnRyYW5zaXRpb24oKS5kdXJhdGlvbih0KSxWPUguc2VsZWN0KCJnIikuY2xhc3NlZCgic21hbGwiLChmdW5jdGlvbigpe3JldHVybiB2PjAmJnY8PTE1MH0pKS5jbGFzc2VkKCJtZWRpdW0iLChmdW5jdGlvbigpe3JldHVybiB2PjE1MCYmdjw9MzAwfSkpLmNsYXNzZWQoImxhcmdlIiwoZnVuY3Rpb24oKXtyZXR1cm4gdj4zMDB9KSksVT1GLnNlbGVjdCgiZyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3kubGVmdCsiLCIreS50b3ArIikiKSxqPVdMdC5iaXNlY3RvcihkKS5sZWZ0LEc9Vi5zZWxlY3QoIi5zdGFnZSIpLm9uKCJtb3VzZW92ZXIiLChmdW5jdGlvbigpe0ouc3R5bGUoIm9wYWNpdHkiLDEpLGV0LnN0eWxlKCJvcGFjaXR5IiwxKSxydC5zdHlsZSgib3BhY2l0eSIsMSksc3Quc3R5bGUoIm9wYWNpdHkiLDEpLGMuc3R5bGUoIm9wYWNpdHkiLDEpfSkpLm9uKCJtb3VzZW91dCIsKGZ1bmN0aW9uKCl7Si5zdHlsZSgib3BhY2l0eSIsMCksZXQuc3R5bGUoIm9wYWNpdHkiLDApLHJ0LnN0eWxlKCJvcGFjaXR5IiwwKSxzdC5zdHlsZSgib3BhY2l0eSIsMCksSi5jbGFzc2VkKCJob3Zlci1jbG9zZXN0IiwhMSksSy5jbGFzc2VkKCJvdXRsaW5lLWhvdmVyIiwhMSksYy5zdHlsZSgib3BhY2l0eSIsMCl9KSkub24oIm1vdXNlbW92ZSIsKGZ1bmN0aW9uIFcoKXt2YXIgdCxhPVdMdC5tb3VzZSh0aGlzKSxsPUwuaW52ZXJ0KGFbMF0pO2Z1bmN0aW9uIHUodCl7cmV0dXJuIE1hdGgubWluKHRbaV0ubGVuZ3RoLTEsaih0W2ldLGwpKX1DLmludmVydChhWzFdKTt2YXIgaCxkPTEvMDtKLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKGUsbCl7dmFyIGM9dShlKTtoPWU7dmFyIG09TChlW2ldW2NdW25dK2VbaV1bY11bcl0vMiksZz1BKGVbaV1bY11bb10pLF89Im9mZnNldCI9PT1zP0MocChlKSktKGYtZyk6Zyx5PU1hdGguYWJzKGFbMV0tXyk7cmV0dXJuIHk8ZCYmKGQ9eSx0PWUpLCJ0cmFuc2xhdGUoIittKyIsIitnKyIpIn0pKSxKLnNlbGVjdCgidGV4dCIpLnRleHQoKGZ1bmN0aW9uKHQpe3ZhciBlPXUodCk7cmV0dXJuIHRbaV1bZV1bb119KSksSi5jbGFzc2VkKCJob3Zlci1jbG9zZXN0IiwoZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT10fSkpLEsuY2xhc3NlZCgib3V0bGluZS1ob3ZlciIsKGZ1bmN0aW9uKGUpe3JldHVybiBlPT09dH0pKTt2YXIgbT11KGgpO2V0LmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3JldHVybiJ0cmFuc2xhdGUoIitMKGhbaV1bbV1bbl0raFtpXVttXVtyXS8yKSsiLCAiK2IrIikifSkpLnNlbGVjdCgidGV4dCIpLnRleHQoKGZ1bmN0aW9uKHQpe3JldHVybiB4KGhbaV1bbV1bbl0raFtpXVttXVtyXS8yKX0pKTt2YXIgZz1PLnRpY2tGb3JtYXQoKTtydC5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbihlKXtyZXR1cm4idHJhbnNsYXRlKCIrdisiLCAiKygib2Zmc2V0Ij09PXM/QyhwKHQpKTowKSsiKSJ9KSkuc3R5bGUoImRpc3BsYXkiLCJvZmZzZXQiPT09cz8iIjoibm9uZSIpLnNlbGVjdCgidGV4dCIpLnRleHQoKGZ1bmN0aW9uKGUpe3JldHVybiBnKHAodCkpfSkpO3ZhciBfPVIudGlja0Zvcm1hdCgpO3N0LmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKGUpe3JldHVybiJ0cmFuc2xhdGUoIit2KyIsICIrKCJvZmZzZXQiPT09cz8wOkEodFtpXVttXVtvXSkpKyIpIn0pKS5zdHlsZSgiZGlzcGxheSIsIm9mZnNldCI9PT1zPyJub25lIjoiIikuc2VsZWN0KCJ0ZXh0IikudGV4dCgoZnVuY3Rpb24oZSl7cmV0dXJuIF8odFtpXVttXVtvXSl9KSk7dmFyIHk9V0x0Lm1vdXNlKEIpO2Muc3R5bGUoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyh5WzBdKzE1KSsicHgsIisoeVsxXS0xNSkrInB4KSIpLnNlbGVjdCgic3BhbiIpLnRleHQoIm9mZnNldCI9PT1zP18odFtpXVttXVtvXSk6KCJzdGVwIj09PWU/InN0ZXAgIjoiIikrZyhwKHQpKSl9KSk7Ry5zZWxlY3QoIi5iYWNrZ3JvdW5kIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLXkubGVmdCsiLCIrLXkudG9wKyIpIikuYXR0cigid2lkdGgiLGcpLmF0dHIoImhlaWdodCIsXyk7dmFyIHE9Ry5zZWxlY3RBbGwoIi5oaXN0b2dyYW0iKS5kYXRhKGEpO3EuZXhpdCgpLnJlbW92ZSgpO3ZhciBZPXEuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImhpc3RvZ3JhbSIpLFg9WS5tZXJnZShxKS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiBwKHQpLXAoZSl9KSksJD1VLnNlbGVjdEFsbCgiLmhpc3RvZ3JhbSIpLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3JldHVybiJ0cmFuc2xhdGUoMCwgIisoIm9mZnNldCI9PT1zP0MocCh0KSktZjowKSsiKSJ9KSk7WS5hcHBlbmQoImxpbmUiKS5hdHRyKCJjbGFzcyIsImJhc2VsaW5lIiksJC5zZWxlY3QoIi5iYXNlbGluZSIpLnN0eWxlKCJzdHJva2Utb3BhY2l0eSIsKGZ1bmN0aW9uKHQpe3JldHVybiJvZmZzZXQiPT09cz8uMTowfSkpLmF0dHIoInkxIixmKS5hdHRyKCJ5MiIsZikuYXR0cigieDIiLHYpLFkuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJvdXRsaW5lIik7dmFyIEs9WC5zZWxlY3QoIi5vdXRsaW5lIikuYXR0cigidmVjdG9yLWVmZmVjdCIsIm5vbi1zY2FsaW5nLXN0cm9rZSIpLmF0dHIoImQiLChmdW5jdGlvbih0KXtyZXR1cm4oZnVuY3Rpb24odCl7cmV0dXJuIk0iK1Aoeih0WzBdKSkrIiwiK2soMCkrIkwiK0QodCkuc2xpY2UoMSkrIkwiK1Aoeih0W3QubGVuZ3RoLTFdKSkrIiwiK2soMCl9KSh0W2ldKX0pKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwxKTskLnNlbGVjdCgiLm91dGxpbmUiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJzY2FsZSgiK3YvRSsiLCAiK2YvRSsiKSIpLnN0eWxlKCJzdHJva2UiLChmdW5jdGlvbih0KXtyZXR1cm4ib2Zmc2V0Ij09PXM/IiI6TihwKHQpKX0pKS5zdHlsZSgiZmlsbC1vcGFjaXR5IiwoZnVuY3Rpb24odCl7cmV0dXJuIm9mZnNldCI9PT1zPzE6MH0pKS5zdHlsZSgiZmlsbCIsKGZ1bmN0aW9uKHQpe3JldHVybiBOKHAodCkpfSkpO3ZhciBaPVkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJob3ZlciIpLEo9WC5zZWxlY3QoIi5ob3ZlciIpLnN0eWxlKCJmaWxsIiwoZnVuY3Rpb24odCl7cmV0dXJuIE4ocCh0KSl9KSk7Wi5hcHBlbmQoImNpcmNsZSIpLmF0dHIoInIiLDIpLFouYXBwZW5kKCJ0ZXh0Iikuc3R5bGUoImRpc3BsYXkiLCJub25lIikuYXR0cigiZHgiLDQpO3ZhciBRPVYuc2VsZWN0KCIueC1heGlzLWhvdmVyIikuc2VsZWN0QWxsKCIubGFiZWwiKS5kYXRhKFsieCJdKSx0dD1RLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLGV0PVEubWVyZ2UodHQpO3R0LmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLC0yMCkuYXR0cigieSIsNikuYXR0cigid2lkdGgiLDQwKS5hdHRyKCJoZWlnaHQiLDE0KSx0dC5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsMCkuYXR0cigieDIiLDApLmF0dHIoInkxIiwwKS5hdHRyKCJ5MiIsNiksdHQuYXBwZW5kKCJ0ZXh0IikuYXR0cigiZHkiLDE4KTt2YXIgbnQ9Vi5zZWxlY3QoIi55LWF4aXMtaG92ZXIiKS5zZWxlY3RBbGwoIi5sYWJlbCIpLmRhdGEoWyJ5Il0pLGl0PW50LmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLHJ0PW50Lm1lcmdlKGl0KTtpdC5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4Iiw4KS5hdHRyKCJ5IiwtNikuYXR0cigid2lkdGgiLDQwKS5hdHRyKCJoZWlnaHQiLDE0KSxpdC5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsMCkuYXR0cigieDIiLDYpLmF0dHIoInkxIiwwKS5hdHRyKCJ5MiIsMCksaXQuYXBwZW5kKCJ0ZXh0IikuYXR0cigiZHgiLDgpLmF0dHIoImR5Iiw0KTt2YXIgb3Q9Vi5zZWxlY3QoIi55LXNsaWNlLWF4aXMtaG92ZXIiKS5zZWxlY3RBbGwoIi5sYWJlbCIpLmRhdGEoWyJ5Il0pLGF0PW90LmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLHN0PW90Lm1lcmdlKGF0KTthdC5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4Iiw4KS5hdHRyKCJ5IiwtNikuYXR0cigid2lkdGgiLDQwKS5hdHRyKCJoZWlnaHQiLDE0KSxhdC5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsMCkuYXR0cigieDIiLDYpLmF0dHIoInkxIiwwKS5hdHRyKCJ5MiIsMCksYXQuYXBwZW5kKCJ0ZXh0IikuYXR0cigiZHgiLDgpLmF0dHIoImR5Iiw0KSxVLnNlbGVjdCgiLnkuYXhpcy5zbGljZSIpLnN0eWxlKCJvcGFjaXR5Iiwib2Zmc2V0Ij09PXM/MDoxKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwgIisoIm9mZnNldCI9PT1zPy1mOjApKyIpIikuY2FsbChSKSxVLnNlbGVjdCgiLnguYXhpcyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCAiK2IrIikiKS5jYWxsKEkpLFUuc2VsZWN0KCIueS5heGlzIikuc3R5bGUoIm9wYWNpdHkiLCJvZmZzZXQiPT09cz8xOjApLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3YrIiwgIisoIm9mZnNldCI9PT1zPzA6YikrIikiKS5jYWxsKE8pLFUuc2VsZWN0QWxsKCIudGljayB0ZXh0IikuYXR0cigiZmlsbCIsIiNhYWEiKSxVLnNlbGVjdEFsbCgiLmF4aXMgcGF0aC5kb21haW4iKS5hdHRyKCJzdHJva2UiLCJub25lIil9fTtmdW5jdGlvbiBZTHQodCl7Y29uc3RbZSxuLGldPXQ7cmV0dXJue3dhbGxfdGltZTplLHN0ZXA6bixtaW46cWwoaS5tYXAoKChbdCwsXSk9PnQpKSksbWF4OkdsKGkubWFwKCgoWyx0XSk9PnQpKSksYnVja2V0czppLm1hcCgoKFt0LGUsbl0pPT4oe2xlZnQ6dCxyaWdodDplLGNvdW50Om59KSkpfX1mdW5jdGlvbiBYTHQodCxlLG4saT0zMCl7bj09PWUmJihuPTEuMSplKzEsZT1lLzEuMS0xKTtjb25zdCByPShuLWUpL2k7bGV0IG89MDtyZXR1cm4gUmwoZSxuLHIpLm1hcCgoaT0+e2NvbnN0IGE9aStyO2xldCBzPTA7Zm9yKDtvPHQuYnVja2V0cy5sZW5ndGg7KXtjb25zdCByPU1hdGgubWluKG4sdC5idWNrZXRzW29dLnJpZ2h0KSxsPU1hdGgubWF4KGUsdC5idWNrZXRzW29dLmxlZnQpLGM9TWF0aC5taW4ocixhKS1NYXRoLm1heChsLGkpLHU9Yy8oci1sKSp0LmJ1Y2tldHNbb10uY291bnQ7aWYocys9Yz4wP3U6MCxyPmEpYnJlYWs7bysrfXJldHVybnt4OmksZHg6cix5OnN9fSkpfXFMdC50ZW1wbGF0ZT1fZWAKICAgIDxkaXYgaWQ9InRvb2x0aXAiPjxzcGFuPjwvc3Bhbj48L2Rpdj4KICAgIDxzdmcgaWQ9InN2ZyI+CiAgICAgIDxnPgogICAgICAgIDxnIGNsYXNzPSJheGlzIHgiPjwvZz4KICAgICAgICA8ZyBjbGFzcz0iYXhpcyB5Ij48L2c+CiAgICAgICAgPGcgY2xhc3M9ImF4aXMgeSBzbGljZSI+PC9nPgogICAgICAgIDxnIGNsYXNzPSJzdGFnZSI+CiAgICAgICAgICA8cmVjdCBjbGFzcz0iYmFja2dyb3VuZCI+PC9yZWN0PgogICAgICAgIDwvZz4KICAgICAgICA8ZyBjbGFzcz0ieC1heGlzLWhvdmVyIj48L2c+CiAgICAgICAgPGcgY2xhc3M9InktYXhpcy1ob3ZlciI+PC9nPgogICAgICAgIDxnIGNsYXNzPSJ5LXNsaWNlLWF4aXMtaG92ZXIiPjwvZz4KICAgICAgPC9nPgogICAgPC9zdmc+CgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgY29sb3I6ICNhYWE7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgLS12ei1oaXN0b2dyYW0tdGltZXNlcmllcy1ob3Zlci1iZy1jb2xvcjogI2ZmZjsKICAgICAgICAtLXZ6LWhpc3RvZ3JhbS10aW1lc2VyaWVzLW91dGxpbmUtY29sb3I6ICNmZmY7CiAgICAgICAgLS12ei1oaXN0b2dyYW0tdGltZXNlcmllcy1ob3Zlci1vdXRsaW5lLWNvbG9yOiAjMDAwOwogICAgICB9CgogICAgICA6aG9zdCguZGFyay1tb2RlKSB7CiAgICAgICAgLS12ei1oaXN0b2dyYW0tdGltZXNlcmllcy1ob3Zlci1iZy1jb2xvcjogdmFyKAogICAgICAgICAgLS1wcmltYXJ5LWJhY2tncm91bmQtY29sb3IKICAgICAgICApOwogICAgICAgIC0tdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMtb3V0bGluZS1jb2xvcjogdmFyKC0tcGFwZXItZ3JleS02MDApOwogICAgICAgIC0tdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMtaG92ZXItb3V0bGluZS1jb2xvcjogI2ZmZjsKICAgICAgfQoKICAgICAgc3ZnIHsKICAgICAgICBmb250LWZhbWlseTogcm9ib3RvLCBzYW5zLXNlcmlmOwogICAgICAgIG92ZXJmbG93OiB2aXNpYmxlOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgfQoKICAgICAgdGV4dCB7CiAgICAgICAgZmlsbDogY3VycmVudENvbG9yOwogICAgICB9CgogICAgICAjdG9vbHRpcCB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICB9CgogICAgICAuYmFja2dyb3VuZCB7CiAgICAgICAgZmlsbC1vcGFjaXR5OiAwOwogICAgICAgIGZpbGw6IHJlZDsKICAgICAgfQoKICAgICAgLmhpc3RvZ3JhbSB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5ob3ZlciB7CiAgICAgICAgZm9udC1zaXplOiA5cHg7CiAgICAgICAgZG9taW5hbnQtYmFzZWxpbmU6IG1pZGRsZTsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICB9CgogICAgICAuaG92ZXIgY2lyY2xlIHsKICAgICAgICBzdHJva2U6IHdoaXRlOwogICAgICAgIHN0cm9rZS1vcGFjaXR5OiAwLjU7CiAgICAgICAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgICAgIH0KCiAgICAgIC5ob3ZlciB0ZXh0IHsKICAgICAgICBmaWxsOiBibGFjazsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICB9CgogICAgICAuaG92ZXIuaG92ZXItY2xvc2VzdCBjaXJjbGUgewogICAgICAgIGZpbGw6IHZhcigtLXZ6LWhpc3RvZ3JhbS10aW1lc2VyaWVzLWhvdmVyLW91dGxpbmUtY29sb3IpICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIC5ob3Zlci5ob3Zlci1jbG9zZXN0IHRleHQgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgIH0KCiAgICAgIC5iYXNlbGluZSB7CiAgICAgICAgc3Ryb2tlOiBibGFjazsKICAgICAgICBzdHJva2Utb3BhY2l0eTogMC4xOwogICAgICB9CgogICAgICAub3V0bGluZSB7CiAgICAgICAgZmlsbDogbm9uZTsKICAgICAgICBzdHJva2U6IHZhcigtLXZ6LWhpc3RvZ3JhbS10aW1lc2VyaWVzLW91dGxpbmUtY29sb3IpOwogICAgICAgIHN0cm9rZS1vcGFjaXR5OiAwLjU7CiAgICAgIH0KCiAgICAgIC5vdXRsaW5lLm91dGxpbmUtaG92ZXIgewogICAgICAgIHN0cm9rZTogdmFyKC0tdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMtaG92ZXItb3V0bGluZS1jb2xvcikgIWltcG9ydGFudDsKICAgICAgICBzdHJva2Utb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLngtYXhpcy1ob3ZlciwKICAgICAgLnktYXhpcy1ob3ZlciwKICAgICAgLnktc2xpY2UtYXhpcy1ob3ZlciB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIC54LWF4aXMtaG92ZXIgLmxhYmVsLAogICAgICAueS1heGlzLWhvdmVyIC5sYWJlbCwKICAgICAgLnktc2xpY2UtYXhpcy1ob3ZlciAubGFiZWwgewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIHRleHQtYW5jaG9yOiBlbmQ7CiAgICAgIH0KCiAgICAgIC54LWF4aXMtaG92ZXIgdGV4dCB7CiAgICAgICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAgICAgfQoKICAgICAgLnktYXhpcy1ob3ZlciB0ZXh0LAogICAgICAueS1zbGljZS1heGlzLWhvdmVyIHRleHQgewogICAgICAgIHRleHQtYW5jaG9yOiBzdGFydDsKICAgICAgfQoKICAgICAgLngtYXhpcy1ob3ZlciBsaW5lLAogICAgICAueS1heGlzLWhvdmVyIGxpbmUsCiAgICAgIC55LXNsaWNlLWF4aXMtaG92ZXIgbGluZSB7CiAgICAgICAgc3Ryb2tlOiBjdXJyZW50Q29sb3I7CiAgICAgIH0KCiAgICAgIC54LWF4aXMtaG92ZXIgcmVjdCwKICAgICAgLnktYXhpcy1ob3ZlciByZWN0LAogICAgICAueS1zbGljZS1heGlzLWhvdmVyIHJlY3QgewogICAgICAgIGZpbGw6IHZhcigtLXZ6LWhpc3RvZ3JhbS10aW1lc2VyaWVzLWhvdmVyLWJnLWNvbG9yKTsKICAgICAgfQoKICAgICAgI3Rvb2x0aXAsCiAgICAgIC54LWF4aXMtaG92ZXIgdGV4dCwKICAgICAgLnktYXhpcy1ob3ZlciB0ZXh0LAogICAgICAueS1zbGljZS1heGlzLWhvdmVyIHRleHQgewogICAgICAgIGNvbG9yOiB2YXIoLS12ei1oaXN0b2dyYW0tdGltZXNlcmllcy1ob3Zlci1vdXRsaW5lLWNvbG9yKTsKICAgICAgfQoKICAgICAgLmF4aXMgewogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgfQoKICAgICAgLmF4aXMgcGF0aC5kb21haW4gewogICAgICAgIGZpbGw6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5heGlzIC50aWNrIGxpbmUgewogICAgICAgIHN0cm9rZTogI2RkZDsKICAgICAgfQoKICAgICAgLmF4aXMuc2xpY2UgewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgIH0KCiAgICAgIC5heGlzLnNsaWNlIC50aWNrIGxpbmUgewogICAgICAgIHN0cm9rZS1kYXNoYXJyYXk6IDI7CiAgICAgIH0KCiAgICAgIC5zbWFsbCAuYXhpcyB0ZXh0IHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CiAgICAgIC5zbWFsbCAuYXhpcyAudGljazpmaXJzdC1vZi10eXBlIHRleHQgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICAgIC5zbWFsbCAuYXhpcyAudGljazpsYXN0LW9mLXR5cGUgdGV4dCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KICAgICAgLm1lZGl1bSAuYXhpcyB0ZXh0IHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CiAgICAgIC5tZWRpdW0gLmF4aXMgLnRpY2s6bnRoLWNoaWxkKDJuICsgMSkgdGV4dCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KICAgICAgLmxhcmdlIC5heGlzIHRleHQgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KICAgICAgLmxhcmdlIC5heGlzIC50aWNrOm50aC1jaGlsZCgybiArIDEpIHRleHQgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICA8L3N0eWxlPgogIGAsdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0scUx0LnByb3RvdHlwZSwibW9kZSIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxxTHQucHJvdG90eXBlLCJ0aW1lUHJvcGVydHkiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0scUx0LnByb3RvdHlwZSwiYmlucyIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxxTHQucHJvdG90eXBlLCJ4Iix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLHFMdC5wcm90b3R5cGUsImR4Iix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLHFMdC5wcm90b3R5cGUsInkiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0scUx0LnByb3RvdHlwZSwiY29sb3JTY2FsZSIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxxTHQucHJvdG90eXBlLCJtb2RlVHJhbnNpdGlvbkR1cmF0aW9uIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0scUx0LnByb3RvdHlwZSwiX2F0dGFjaGVkIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLHFMdC5wcm90b3R5cGUsIl9uYW1lIix2b2lkIDApLHQoW28oe3R5cGU6QXJyYXl9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSxxTHQucHJvdG90eXBlLCJfZGF0YSIsdm9pZCAwKSx0KFthKCJ0aW1lUHJvcGVydHkiLCJjb2xvclNjYWxlIiwiX2F0dGFjaGVkIiksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pLGUoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxxTHQucHJvdG90eXBlLCJfcmVkcmF3T25DaGFuZ2UiLG51bGwpLHQoW2EoIm1vZGUiKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLHFMdC5wcm90b3R5cGUsIl9tb2RlUmVkcmF3IixudWxsKSxxTHQ9dChbaSgidnotaGlzdG9ncmFtLXRpbWVzZXJpZXMiKV0scUx0KTtsZXQgJEx0PWNsYXNzIGV4dGVuZHMocF90KHRyKHllKSkpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmdldERhdGFMb2FkTmFtZT0oe3J1bjp0fSk9PnQsdGhpcy5yZXF1ZXN0RGF0YT0odCxlLG4pPT57Y29uc3QgaT1ncigpLnBsdWdpblJvdXRlKCJoaXN0b2dyYW1zIiwiL2hpc3RvZ3JhbXMiKTtQcm9taXNlLmFsbCh0Lm1hcCgodD0+e2NvbnN0IG49Vk8oaSx7dGFnOnQudGFnLHJ1bjp0LnJ1bn0pO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QobikudGhlbigobj0+e2Uoe2l0ZW06dCxkYXRhOm59KX0pKX0pKSkuZmluYWxseSgoKCk9PntuKCl9KSl9LHRoaXMubG9hZERhdGFDYWxsYmFjaz0odCxlLG4pPT57Y29uc3QgaT0oZnVuY3Rpb24gcih0KXtjb25zdCBlPXQubWFwKFlMdCksbj1xbChlLCh0PT50Lm1pbikpLGk9R2woZSwodD0+dC5tYXgpKTtyZXR1cm4gZS5tYXAoKHQ9Pih7d2FsbF90aW1lOnQud2FsbF90aW1lLHN0ZXA6dC5zdGVwLGJpbnM6WEx0KHQsbixpKX0pKSl9KShuKSxvPXRoaXMuZ2V0RGF0YUxvYWROYW1lKGUpO3RoaXMuJC5jaGFydC5zZXRTZXJpZXNEYXRhKG8saSl9LHRoaXMuX2NvbG9yU2NhbGVGdW5jdGlvbj1BTyx0aGlzLl9leHBhbmRlZD0hMX1fcmVsb2FkT25SdW5UYWdSZXF1ZXN0TWFuYWdlckNoYW5nZSgpe3RoaXMucmVsb2FkKCl9X3VwZGF0ZURhdGFUb0xvYWQoKXt0aGlzLmRhdGFUb0xvYWQ9W3tydW46dGhpcy5ydW4sdGFnOnRoaXMudGFnfV19Z2V0IF9ydW5Db2xvcigpe3JldHVybiB0aGlzLl9jb2xvclNjYWxlRnVuY3Rpb24odGhpcy5ydW4pfXJlZHJhdygpe3RoaXMuJC5jaGFydC5yZWRyYXcoKX1fdG9nZ2xlRXhwYW5kZWQodCl7dGhpcy5zZXQoIl9leHBhbmRlZCIsIXRoaXMuX2V4cGFuZGVkKSx0aGlzLnJlZHJhdygpfX07JEx0LnRlbXBsYXRlPV9lYAogICAgPHRmLWNhcmQtaGVhZGluZwogICAgICB0YWc9IltbdGFnXV0iCiAgICAgIHJ1bj0iW1tydW5dXSIKICAgICAgZGlzcGxheS1uYW1lPSJbW3RhZ01ldGFkYXRhLmRpc3BsYXlOYW1lXV0iCiAgICAgIGRlc2NyaXB0aW9uPSJbW3RhZ01ldGFkYXRhLmRlc2NyaXB0aW9uXV0iCiAgICAgIGNvbG9yPSJbW19ydW5Db2xvcl1dIgogICAgPjwvdGYtY2FyZC1oZWFkaW5nPgogICAgPCEtLQogICAgICBUaGUgbWFpbiBoaXN0b2dyYW0gdGhhdCB3ZSByZW5kZXIuIERhdGEgaXMgc2V0IGRpcmVjdGx5IHdpdGgKICAgICAgXGBzZXRTZXJpZXNEYXRhXGAsIG5vdCB3aXRoIGEgYm91bmQgcHJvcGVydHkuCiAgICAtLT4KICAgIDx2ei1oaXN0b2dyYW0tdGltZXNlcmllcwogICAgICBpZD0iY2hhcnQiCiAgICAgIHRpbWUtcHJvcGVydHk9IltbdGltZVByb3BlcnR5XV0iCiAgICAgIG1vZGU9IltbaGlzdG9ncmFtTW9kZV1dIgogICAgICBjb2xvci1zY2FsZT0iW1tfY29sb3JTY2FsZUZ1bmN0aW9uXV0iCiAgICA+PC92ei1oaXN0b2dyYW0tdGltZXNlcmllcz4KICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiByb3c7Ij4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgc2VsZWN0ZWQkPSJbW19leHBhbmRlZF1dIgogICAgICAgIGljb249ImZ1bGxzY3JlZW4iCiAgICAgICAgb24tdGFwPSJfdG9nZ2xlRXhwYW5kZWQiCiAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgd2lkdGg6IDMzMHB4OwogICAgICAgIGhlaWdodDogMjM1cHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7CiAgICAgIH0KICAgICAgOmhvc3QoW19leHBhbmRlZF0pIHsKICAgICAgICB3aWR0aDogNzAwcHg7CiAgICAgICAgaGVpZ2h0OiA1MDBweDsKICAgICAgfQoKICAgICAgdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMgewogICAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICB9CgogICAgICBwYXBlci1pY29uLWJ1dHRvbiB7CiAgICAgICAgY29sb3I6ICMyMTk2ZjM7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTAwJTsKICAgICAgICB3aWR0aDogMzJweDsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgcGFkZGluZzogNHB4OwogICAgICB9CgogICAgICBwYXBlci1pY29uLWJ1dHRvbltzZWxlY3RlZF0gewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXRiLXVpLWxpZ2h0LWFjY2VudCk7CiAgICAgIH0KCiAgICAgIHRmLWNhcmQtaGVhZGluZyB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgICAgICB3aWR0aDogOTAlOwogICAgICB9CiAgICA8L3N0eWxlPgogIGAsdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sJEx0LnByb3RvdHlwZSwicnVuIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLCRMdC5wcm90b3R5cGUsInRhZyIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSwkTHQucHJvdG90eXBlLCJnZXREYXRhTG9hZE5hbWUiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsaHIpXSwkTHQucHJvdG90eXBlLCJyZXF1ZXN0TWFuYWdlciIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSwkTHQucHJvdG90eXBlLCJsb2FkRGF0YUNhbGxiYWNrIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLCRMdC5wcm90b3R5cGUsInRhZ01ldGFkYXRhIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLCRMdC5wcm90b3R5cGUsInRpbWVQcm9wZXJ0eSIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSwkTHQucHJvdG90eXBlLCJoaXN0b2dyYW1Nb2RlIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sJEx0LnByb3RvdHlwZSwiX2NvbG9yU2NhbGVGdW5jdGlvbiIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwfSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSwkTHQucHJvdG90eXBlLCJfZXhwYW5kZWQiLHZvaWQgMCksdChbYSgicnVuIiwidGFnIiwicmVxdWVzdE1hbmFnZXIiKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLCRMdC5wcm90b3R5cGUsIl9yZWxvYWRPblJ1blRhZ1JlcXVlc3RNYW5hZ2VyQ2hhbmdlIixudWxsKSx0KFthKCJydW4iLCJ0YWciKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLCRMdC5wcm90b3R5cGUsIl91cGRhdGVEYXRhVG9Mb2FkIixudWxsKSx0KFtzKCJydW4iKSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSwkTHQucHJvdG90eXBlLCJfcnVuQ29sb3IiLG51bGwpLCRMdD10KFtpKCJ0Zi1oaXN0b2dyYW0tbG9hZGVyIildLCRMdCk7bGV0IEtMdD1jbGFzcyBleHRlbmRzKHRyKHllKSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMucmVsb2FkT25SZWFkeT0hMCx0aGlzLl9oaXN0b2dyYW1Nb2RlPSJvZmZzZXQiLHRoaXMuX3RpbWVQcm9wZXJ0eT0ic3RlcCIsdGhpcy5fcmVzdGFtcD0hMSx0aGlzLl9yZXF1ZXN0TWFuYWdlcj1uZXcgaHJ9X3JlZHJhd0NhdGVnb3J5UGFuZSh0LGUpe2UmJnQudGFyZ2V0LnF1ZXJ5U2VsZWN0b3JBbGwoInRmLWhpc3RvZ3JhbS1sb2FkZXIiKS5mb3JFYWNoKCh0PT50LnJlZHJhdygpKSl9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMucmVsb2FkT25SZWFkeSYmdGhpcy5yZWxvYWQoKX1yZWxvYWQoKXt0aGlzLl9mZXRjaFRhZ3MoKS50aGVuKCgoKT0+e3RoaXMuX3JlbG9hZEhpc3RvZ3JhbXMoKX0pKX1fZmV0Y2hUYWdzKCl7Y29uc3QgdD1ncigpLnBsdWdpblJvdXRlKCJoaXN0b2dyYW1zIiwiL3RhZ3MiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKCh0PT57aWYod2UuaXNFcXVhbCh0LHRoaXMuX3J1blRvVGFnSW5mbykpcmV0dXJuO2NvbnN0IGU9d2UubWFwVmFsdWVzKHQsKHQ9Pk9iamVjdC5rZXlzKHQpKSksbj1vcihlKTt0aGlzLnNldCgiX2RhdGFOb3RGb3VuZCIsMD09PW4ubGVuZ3RoKSx0aGlzLnNldCgiX3J1blRvVGFnIixlKSx0aGlzLnNldCgiX3J1blRvVGFnSW5mbyIsdCksdGhpcy5hc3luYygoKCk9Pnt0aGlzLnNldCgiX2NhdGVnb3JpZXNEb21SZWFkeSIsITApfSkpfSkpfV9yZWxvYWRIaXN0b2dyYW1zKCl7dGhpcy5yb290LnF1ZXJ5U2VsZWN0b3JBbGwoInRmLWhpc3RvZ3JhbS1sb2FkZXIiKS5mb3JFYWNoKCh0PT57dC5yZWxvYWQoKX0pKX1fc2hvdWxkT3Blbih0KXtyZXR1cm4gdDw9Mn1nZXQgX2NhdGVnb3JpZXMoKXtyZXR1cm4gU3IodGhpcy5fcnVuVG9UYWcsdGhpcy5fc2VsZWN0ZWRSdW5zLHRoaXMuX3RhZ0ZpbHRlcil9X3RhZ01ldGFkYXRhKHQsZSxuKXtyZXR1cm4gdFtlXVtuXX19O2Z1bmN0aW9uIFpMdCh0KXtyZXR1cm4iIiE9PXQuZGlzcGxheU5hbWUmJnZvaWQgMCE9PXQuZGlzcGxheU5hbWU/dC5kaXNwbGF5TmFtZTp0Lm5hbWV9ZnVuY3Rpb24gSkx0KHQpe2lmKCIiIT09dC5kaXNwbGF5TmFtZSYmdm9pZCAwIT09dC5kaXNwbGF5TmFtZSlyZXR1cm4gdC5kaXNwbGF5TmFtZTtsZXQgZT10Lm5hbWUuZ3JvdXAsbj10Lm5hbWUudGFnO3JldHVybiB2b2lkIDA9PT1lJiYoZT0iIiksdm9pZCAwPT09biYmKG49IiIpLCIiPT09ZT9uOmUrIi4iK259ZnVuY3Rpb24gUUx0KHQsZSl7cmV0dXJuIGU8dC5ocGFyYW1Db2x1bW5zLmxlbmd0aD9aTHQodC5ocGFyYW1Db2x1bW5zW2VdLmhwYXJhbUluZm8pOkpMdCh0Lm1ldHJpY0NvbHVtbnNbZS10LmhwYXJhbUNvbHVtbnMubGVuZ3RoXS5tZXRyaWNJbmZvKX1mdW5jdGlvbiB0UHQodCl7cmV0dXJuIHQuaHBhcmFtQ29sdW1ucy5sZW5ndGh9ZnVuY3Rpb24gZVB0KHQpe3JldHVybiB0Lm1ldHJpY0NvbHVtbnMubGVuZ3RofWZ1bmN0aW9uIG5QdCh0KXtyZXR1cm4gdFB0KHQpK2VQdCh0KX1mdW5jdGlvbiBpUHQodCxlKXtyZXR1cm4gdFtlXX1mdW5jdGlvbiByUHQodCxlKXtyZXR1cm4gdC5maW5kKCh0PT53ZS5pc0VxdWFsKHQubmFtZSxlKSkpfWZ1bmN0aW9uIG9QdCh0LGUsbil7cmV0dXJuIGUuaHBhcmFtc1t0LmhwYXJhbUNvbHVtbnNbbl0uaHBhcmFtSW5mby5uYW1lXX1mdW5jdGlvbiBhUHQodCxlLG4pe2NvbnN0IGk9clB0KGUubWV0cmljVmFsdWVzLHQubWV0cmljQ29sdW1uc1tuXS5tZXRyaWNJbmZvLm5hbWUpO3JldHVybiB2b2lkIDA9PT1pP3ZvaWQgMDppLnZhbHVlfWZ1bmN0aW9uIHNQdCh0LGUsbil7cmV0dXJuIG48dC5ocGFyYW1Db2x1bW5zLmxlbmd0aD9vUHQodCxlLG4pOmFQdCh0LGUsbi10LmhwYXJhbUNvbHVtbnMubGVuZ3RoKX1mdW5jdGlvbiBsUHQodCxlLG4pe3JldHVybiBrbChlLChlPT5zUHQodCxlLG4pKSl9ZnVuY3Rpb24gY1B0KHQsZSxuKXtsZXQgaTtpZihuPGUuaHBhcmFtSW5mb3MubGVuZ3RoKWk9dC5ocGFyYW1Db2x1bW5zLmZpbmRJbmRleCgodD0+dC5ocGFyYW1JbmZvLm5hbWU9PT1lLmhwYXJhbUluZm9zW25dLm5hbWUpKTtlbHNle2NvbnN0IHI9ZS5tZXRyaWNJbmZvc1tuLWUuaHBhcmFtSW5mb3MubGVuZ3RoXS5uYW1lO2k9dC5ocGFyYW1Db2x1bW5zLmxlbmd0aCt0Lm1ldHJpY0NvbHVtbnMuZmluZEluZGV4KCh0PT50Lm1ldHJpY0luZm8ubmFtZT09PXIpKX1yZXR1cm4gY29uc29sZS5hc3NlcnQoLTEhPT1pKSxpfWZ1bmN0aW9uIHVQdCh0KXtyZXR1cm4gdC5ocGFyYW1JbmZvcy5sZW5ndGh9ZnVuY3Rpb24gaFB0KHQpe3JldHVybiB0Lm1ldHJpY0luZm9zLmxlbmd0aH1mdW5jdGlvbiBkUHQodCxlLG4pe3JldHVybiBrbChlLChlPT5nUHQodCxlLG4pKSl9ZnVuY3Rpb24gcFB0KHQsZSl7cmV0dXJuIHQuZmluZCgodD0+dC5uYW1lPT09ZSkpfWZ1bmN0aW9uIGZQdCh0LGUsbil7cmV0dXJuIGUuaHBhcmFtc1t0LmhwYXJhbUluZm9zW25dLm5hbWVdfWZ1bmN0aW9uIG1QdCh0LGUsbil7Y29uc3QgaT1yUHQoZS5tZXRyaWNWYWx1ZXMsdC5tZXRyaWNJbmZvc1tuXS5uYW1lKTtyZXR1cm4gdm9pZCAwPT09aT92b2lkIDA6aS52YWx1ZX1mdW5jdGlvbiBnUHQodCxlLG4pe3JldHVybiBuPHQuaHBhcmFtSW5mb3MubGVuZ3RoP2ZQdCh0LGUsbik6bVB0KHQsZSxuLXQuaHBhcmFtSW5mb3MubGVuZ3RoKX1mdW5jdGlvbiBfUHQodCl7cmV0dXJuIHdlLmlzTnVtYmVyKHQpP3QudG9QcmVjaXNpb24oNSk6dm9pZCAwPT09dD8iIjp0LnRvU3RyaW5nKCl9ZnVuY3Rpb24geVB0KHQsZSl7cmV0dXJuIHQqdCtlKmV9ZnVuY3Rpb24gdlB0KHQsZSxuLGkpe3JldHVybiBNYXRoLnNxcnQoeVB0KHQtbixlLWkpKX1mdW5jdGlvbiBiUHQodCxlLG4saSxyLG8pe2lmKHQ8biYmZTxpKXJldHVybiB2UHQodCxlLG4saSk7aWYobjw9dCYmdDxyJiZlPGkpcmV0dXJuIGktZTtpZihyPD10JiZlPGkpcmV0dXJuIHZQdCh0LGUscixpKTtpZih0PG4mJmk8PWUmJmU8bylyZXR1cm4gbi10O2lmKG48PXQmJnQ8ciYmaTw9ZSYmZTxvKXJldHVybiAwO2lmKHI8PXQmJmk8PWUmJmU8bylyZXR1cm4gdC1yO2lmKHQ8biYmbzw9ZSlyZXR1cm4gdlB0KHQsZSxuLG8pO2lmKG48PXQmJnQ8ciYmbzw9ZSlyZXR1cm4gZS1vO2lmKHI8PXQmJm88PWUpcmV0dXJuIHZQdCh0LGUscixvKTt0aHJvdyJQb2ludCAoeCx5KSBtdXN0IGJlIGluIG9uZSBvZiB0aGUgcmVnaW9ucyBkZWZpbmVkIGFib3ZlLiJ9ZnVuY3Rpb24geFB0KHQsZSl7cmV0dXJuIHZvaWQgMD09PWU/InRyYW5zbGF0ZSgiK3QrIikiOiJ0cmFuc2xhdGUoIit0KyIsIitlKyIpIn1mdW5jdGlvbiB3UHQodCxlLG4pe2NvbnN0IGk9dC5nZXQoZSx0KTtBcnJheS5pc0FycmF5KGkpP3Quc3BsaWNlLmFwcGx5KHQsW2UsMCxpLmxlbmd0aF0uY29uY2F0KG4pKTp0LnNldChlLG4pfWZ1bmN0aW9uIFNQdCh0KXtsZXQgZT0wO2ZvcihsZXQgbj0wO248dC5sZW5ndGg7KytuKWU9MzEqZSt0LmNoYXJDb2RlQXQobikmNDI5NDk2NzI5NTtyZXR1cm4gZStNYXRoLnBvdygyLDMxKX1LTHQudGVtcGxhdGU9X2VgCiAgICA8dGYtZGFzaGJvYXJkLWxheW91dD4KICAgICAgPGRpdiBzbG90PSJzaWRlYmFyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZXR0aW5ncyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgICA8dGYtb3B0aW9uLXNlbGVjdG9yCiAgICAgICAgICAgICAgaWQ9Imhpc3RvZ3JhbU1vZGVTZWxlY3RvciIKICAgICAgICAgICAgICBuYW1lPSJIaXN0b2dyYW0gbW9kZSIKICAgICAgICAgICAgICBzZWxlY3RlZC1pZD0ie3tfaGlzdG9ncmFtTW9kZX19IgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBpZD0ib3ZlcmxheSI+b3ZlcmxheTwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9Im9mZnNldCI+b2Zmc2V0PC9wYXBlci1idXR0b24+CiAgICAgICAgICAgIDwvdGYtb3B0aW9uLXNlbGVjdG9yPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgICA8dGYtb3B0aW9uLXNlbGVjdG9yCiAgICAgICAgICAgICAgaWQ9InRpbWVQcm9wZXJ0eVNlbGVjdG9yIgogICAgICAgICAgICAgIG5hbWU9Ik9mZnNldCB0aW1lIGF4aXMiCiAgICAgICAgICAgICAgc2VsZWN0ZWQtaWQ9Int7X3RpbWVQcm9wZXJ0eX19IgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBpZD0ic3RlcCI+c3RlcDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9InJlbGF0aXZlIj5yZWxhdGl2ZTwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9IndhbGxfdGltZSI+d2FsbDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICA8L3RmLW9wdGlvbi1zZWxlY3Rvcj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiBydW5zLXNlbGVjdG9yIj4KICAgICAgICAgIDx0Zi1ydW5zLXNlbGVjdG9yIHNlbGVjdGVkLXJ1bnM9Int7X3NlbGVjdGVkUnVuc319Ij4KICAgICAgICAgIDwvdGYtcnVucy1zZWxlY3Rvcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgc2xvdD0iY2VudGVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtd2FybmluZyI+CiAgICAgICAgICAgIDxoMz5ObyBoaXN0b2dyYW0gZGF0YSB3YXMgZm91bmQuPC9oMz4KICAgICAgICAgICAgPHA+UHJvYmFibGUgY2F1c2VzOjwvcD4KICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgIFlvdSBoYXZlbuKAmXQgd3JpdHRlbiBhbnkgaGlzdG9ncmFtIGRhdGEgdG8geW91ciBldmVudCBmaWxlcy4KICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgIDxsaT5UZW5zb3JCb2FyZCBjYW7igJl0IGZpbmQgeW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICA8L3VsPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW914oCZcmUgbmV3IHRvIHVzaW5nIFRlbnNvckJvYXJkLCBhbmQgd2FudCB0byBmaW5kIG91dCBob3cgdG8KICAgICAgICAgICAgICBhZGQgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIgogICAgICAgICAgICAgICAgPlJFQURNRTwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgcGVyaGFwcyB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCIKICAgICAgICAgICAgICAgID5UZW5zb3JCb2FyZCB0dXRvcmlhbDwvYQogICAgICAgICAgICAgID4uCiAgICAgICAgICAgIDwvcD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciCiAgICAgICAgICAgICAgICA+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgY29uc2lkZXIgZmlsaW5nIGFuIGlzc3VlIG9uIEdpdEh1Yi4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8dGYtdGFnLWZpbHRlcmVyIHRhZy1maWx0ZXI9Int7X3RhZ0ZpbHRlcn19Ij48L3RmLXRhZy1maWx0ZXJlcj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3CiAgICAgICAgICAgICAgY2F0ZWdvcnk9IltbY2F0ZWdvcnldXSIKICAgICAgICAgICAgICBpbml0aWFsLW9wZW5lZD0iW1tfc2hvdWxkT3BlbihpbmRleCldXSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0Zi1oaXN0b2dyYW0tbG9hZGVyCiAgICAgICAgICAgICAgICAgIHJ1bj0iW1tpdGVtLnJ1bl1dIgogICAgICAgICAgICAgICAgICB0YWc9IltbaXRlbS50YWddXSIKICAgICAgICAgICAgICAgICAgYWN0aXZlPSJbW2FjdGl2ZV1dIgogICAgICAgICAgICAgICAgICB0YWctbWV0YWRhdGE9IltbX3RhZ01ldGFkYXRhKF9ydW5Ub1RhZ0luZm8sIGl0ZW0ucnVuLCBpdGVtLnRhZyldXSIKICAgICAgICAgICAgICAgICAgdGltZS1wcm9wZXJ0eT0iW1tfdGltZVByb3BlcnR5XV0iCiAgICAgICAgICAgICAgICAgIGhpc3RvZ3JhbS1tb2RlPSJbW19oaXN0b2dyYW1Nb2RlXV0iCiAgICAgICAgICAgICAgICAgIHJlcXVlc3QtbWFuYWdlcj0iW1tfcmVxdWVzdE1hbmFnZXJdXSIKICAgICAgICAgICAgICAgID48L3RmLWhpc3RvZ3JhbS1sb2FkZXI+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldz4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICA8L3RmLWRhc2hib2FyZC1sYXlvdXQ+CgogICAgPHN0eWxlIGluY2x1ZGU9ImRhc2hib2FyZC1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgLm5vLWRhdGEtd2FybmluZyB7CiAgICAgICAgbWF4LXdpZHRoOiA1NDBweDsKICAgICAgICBtYXJnaW46IDgwcHggYXV0byAwIGF1dG87CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYCx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEtMdC5wcm90b3R5cGUsInJlbG9hZE9uUmVhZHkiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sS0x0LnByb3RvdHlwZSwiX2hpc3RvZ3JhbU1vZGUiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sS0x0LnByb3RvdHlwZSwiX3RpbWVQcm9wZXJ0eSIsdm9pZCAwKSx0KFtvKHt0eXBlOkFycmF5fSksZSgiZGVzaWduOnR5cGUiLEFycmF5KV0sS0x0LnByb3RvdHlwZSwiX3NlbGVjdGVkUnVucyIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxLTHQucHJvdG90eXBlLCJfcnVuVG9UYWciLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sS0x0LnByb3RvdHlwZSwiX3J1blRvVGFnSW5mbyIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEtMdC5wcm90b3R5cGUsIl9kYXRhTm90Rm91bmQiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sS0x0LnByb3RvdHlwZSwiX3RhZ0ZpbHRlciIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEtMdC5wcm90b3R5cGUsIl9yZXN0YW1wIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sS0x0LnByb3RvdHlwZSwiX2NhdGVnb3JpZXNEb21SZWFkeSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixocildLEtMdC5wcm90b3R5cGUsIl9yZXF1ZXN0TWFuYWdlciIsdm9pZCAwKSx0KFtzKCJfcnVuVG9UYWciLCJfc2VsZWN0ZWRSdW5zIiwiX3RhZ0ZpbHRlciIsIl9jYXRlZ29yaWVzRG9tUmVhZHkiKSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLEtMdC5wcm90b3R5cGUsIl9jYXRlZ29yaWVzIixudWxsKSxLTHQ9dChbaSgidGYtaGlzdG9ncmFtLWRhc2hib2FyZCIpXSxLTHQpO3ZhciBNUHQ9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsaHBhcmFtTmFtZTpaTHQsbWV0cmljTmFtZTpKTHQsc2NoZW1hQ29sdW1uTmFtZTpRTHQsbnVtSFBhcmFtczp0UHQsbnVtTWV0cmljczplUHQsbnVtQ29sdW1uczpuUHQsaHBhcmFtVmFsdWVCeU5hbWU6aVB0LG1ldHJpY1ZhbHVlQnlOYW1lOnJQdCxocGFyYW1WYWx1ZUJ5SW5kZXg6b1B0LG1ldHJpY1ZhbHVlQnlJbmRleDphUHQsY29sdW1uVmFsdWVCeUluZGV4OnNQdCxudW1lcmljQ29sdW1uRXh0ZW50OmxQdCxnZXRBYnNvbHV0ZUNvbHVtbkluZGV4OmNQdCxzY2hlbWFWaXNpYmxlQ29sdW1uTmFtZTpmdW5jdGlvbiBFUHQodCxlKXtyZXR1cm4gZTx0LmhwYXJhbUluZm9zLmxlbmd0aD9aTHQodC5ocGFyYW1JbmZvc1tlXSk6Skx0KHQubWV0cmljSW5mb3NbZS10LmhwYXJhbUluZm9zLmxlbmd0aF0pfSxudW1WaXNpYmxlSFBhcmFtczp1UHQsbnVtVmlzaWJsZU1ldHJpY3M6aFB0LG51bVZpc2libGVDb2x1bW5zOmZ1bmN0aW9uIFRQdCh0KXtyZXR1cm4gdVB0KHQpK2hQdCh0KX0sdmlzaWJsZU51bWVyaWNDb2x1bW5FeHRlbnQ6ZFB0LHByZXR0eVByaW50SFBhcmFtVmFsdWVCeU5hbWU6ZnVuY3Rpb24gQ1B0KHQsZSl7cmV0dXJuIF9QdChpUHQodCxlKSl9LHByZXR0eVByaW50TWV0cmljVmFsdWVCeU5hbWU6ZnVuY3Rpb24gQVB0KHQsZSl7cmV0dXJuIF9QdChyUHQodCxlKSl9LHNlc3Npb25Hcm91cFdpdGhOYW1lOnBQdCxocGFyYW1WYWx1ZUJ5VmlzaWJsZUluZGV4OmZQdCxtZXRyaWNWYWx1ZUJ5VmlzaWJsZUluZGV4Om1QdCxjb2x1bW5WYWx1ZUJ5VmlzaWJsZUluZGV4OmdQdCxwcmV0dHlQcmludDpfUHQsbDJOb3JtU3F1YXJlZDp5UHQsZXVjbGlkZWFuRGlzdDp2UHQscG9pbnRUb1JlY3RhbmdsZURpc3Q6YlB0LHRyYW5zbGF0ZVN0cjp4UHQscm90YXRlU3RyOmZ1bmN0aW9uIGtQdCh0LGUsbil7bGV0IGk9InJvdGF0ZSgiK3Q7cmV0dXJuIHZvaWQgMCE9PWUmJnZvaWQgMCE9PW4mJihpPWkrIiwiK2UrIiwiK24pLGkrPSIpIixpfSxpc051bGxPclVuZGVmaW5lZDpmdW5jdGlvbiBMUHQodCl7cmV0dXJuIG51bGw9PXR9LHF1YWRUcmVlVmlzaXRQb2ludHNJblJlY3Q6ZnVuY3Rpb24gUFB0KHQsZSxuLGkscixvKXt0LnZpc2l0KCgoYSxzLGwsYyx1KT0+e2lmKHZvaWQgMD09PWEubGVuZ3RoKXtkb3tjb25zdCBzPXQueCgpKGEuZGF0YSksbD10LnkoKShhLmRhdGEpO2U8PXMmJnM8aSYmbjw9bCYmbDxyJiZvKGEuZGF0YSl9d2hpbGUoYT1hLm5leHQpO3JldHVybiEwfXJldHVybiBzPj1pfHxjPD1lfHxsPj1yfHx1PD1ufSkpfSxxdWFkVHJlZVZpc2l0UG9pbnRzSW5EaXNrOmZ1bmN0aW9uIE5QdCh0LGUsbixpLHIpe3QudmlzaXQoKChvLGEscyxsLGMpPT57aWYodm9pZCAwPT09by5sZW5ndGgpe2Rve2NvbnN0IGE9dC54KCkoby5kYXRhKSxzPXQueSgpKG8uZGF0YSksbD12UHQoZSxuLGEscyk7bDw9aSYmcihvLmRhdGEsbCl9d2hpbGUobz1vLm5leHQpO3JldHVybiEwfXJldHVybiBiUHQoZSxuLGEscyxsLGMpPml9KSl9LGZpbHRlclNldDpmdW5jdGlvbiBJUHQodCxlKXtjb25zdCBuPW5ldyBTZXQ7cmV0dXJuIHQuZm9yRWFjaCgodD0+e2UodCkmJm4uYWRkKHQpfSkpLG59LHNldEFycmF5T2JzZXJ2YWJseTp3UHQsaGFzaE9mU3RyaW5nOlNQdH0pO2xldCBPUHQ9Y2xhc3MgZXh0ZW5kcyB5ZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5vcmllbnRhdGlvbj0iaG9yaXpvbnRhbCJ9fTtPUHQudGVtcGxhdGU9X2VgCiAgICA8c2xvdCBuYW1lPSJjb250ZW50Ij48L3Nsb3Q+CgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIDpob3N0IHNsb3QgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICA6aG9zdCA6OnNsb3R0ZWQoKikgewogICAgICAgIGZsZXg6IDAgMCBhdXRvOwogICAgICB9CgogICAgICA6aG9zdChbb3JpZW50YXRpb249J2hvcml6b250YWwnXSkgc2xvdCB7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBvdmVyZmxvdy14OiBhdXRvOwogICAgICB9CgogICAgICA6aG9zdChbb3JpZW50YXRpb249J3ZlcnRpY2FsJ10pIHNsb3QgewogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgfQoKICAgICAgOmhvc3QgOjpzbG90dGVkKCo6bm90KDpsYXN0LWNoaWxkKSkgewogICAgICAgIGJvcmRlcjogMCBzb2xpZCB2YXIoLS1kaXZpZGVyLWNvbG9yLCAjY2NjKTsKICAgICAgfQoKICAgICAgOmhvc3QoW29yaWVudGF0aW9uPSd2ZXJ0aWNhbCddKSA6OnNsb3R0ZWQoKjpub3QoOmxhc3QtY2hpbGQpKSB7CiAgICAgICAgYm9yZGVyLWJvdHRvbS13aWR0aDogNXB4OwogICAgICB9CgogICAgICA6aG9zdChbb3JpZW50YXRpb249J2hvcml6b250YWwnXSkgOjpzbG90dGVkKCo6bm90KDpsYXN0LWNoaWxkKSkgewogICAgICAgIGJvcmRlci1yaWdodC13aWR0aDogNXB4OwogICAgICB9CiAgICA8L3N0eWxlPgogIGAsdChbbyh7dHlwZTpTdHJpbmcscmVmbGVjdFRvQXR0cmlidXRlOiEwfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLE9QdC5wcm90b3R5cGUsIm9yaWVudGF0aW9uIix2b2lkIDApLE9QdD10KFtpKCJocGFyYW1zLXNwbGl0LWxheW91dCIpXSxPUHQpO2xldCBSUHQ9Y2xhc3MgZXh0ZW5kcyh0cih5ZSkpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvbmZpZ3VyYXRpb249e3NjaGVtYTp7aHBhcmFtQ29sdW1uczpbXSxtZXRyaWNDb2x1bW5zOltdfSxjb2x1bW5zVmlzaWJpbGl0eTpbXSx2aXNpYmxlU2NoZW1hOntocGFyYW1JbmZvczpbXSxtZXRyaWNJbmZvczpbXX19LHRoaXMuc2Vzc2lvbkdyb3Vwcz1bXSx0aGlzLmRhdGFMb2FkZWRXaXRoTm9uRW1wdHlIcGFyYW1zPSExLHRoaXMuZGF0YUxvYWRlZFdpdGhFbXB0eUhwYXJhbXM9ITEsdGhpcy5fc3RhdHVzZXM9W3t2YWx1ZToiU1RBVFVTX1VOS05PV04iLGRpc3BsYXlOYW1lOiJVbmtub3duIixhbGxvd2VkOiEwfSx7dmFsdWU6IlNUQVRVU19TVUNDRVNTIixkaXNwbGF5TmFtZToiU3VjY2VzcyIsYWxsb3dlZDohMH0se3ZhbHVlOiJTVEFUVVNfRkFJTFVSRSIsZGlzcGxheU5hbWU6IkZhaWx1cmUiLGFsbG93ZWQ6ITB9LHt2YWx1ZToiU1RBVFVTX1JVTk5JTkciLGRpc3BsYXlOYW1lOiJSdW5uaW5nIixhbGxvd2VkOiEwfV0sdGhpcy5fZ2V0RXhwZXJpbWVudFJlc29sdmVkPW5ldyBQcm9taXNlKCh0PT57dGhpcy5fcmVzb2x2ZUdldEV4cGVyaW1lbnQ9dH0pKSx0aGlzLl9saXN0U2Vzc2lvbkdyb3Vwc0NhbmNlbGxlcj1uZXcgTk8sdGhpcy5fcGFnZVNpemVJbnB1dD17dmFsdWU6IjEwMCIsaW52YWxpZDohMX0sdGhpcy5fcGFnZU51bWJlcklucHV0PXt2YWx1ZToiMSIsaW52YWxpZDohMX0sdGhpcy5fcGFnZUNvdW50U3RyPSI/Iix0aGlzLl9ocGFyYW1OYW1lPVpMdCx0aGlzLl9tZXRyaWNOYW1lPUpMdCx0aGlzLl9wcmV0dHlQcmludD1fUHR9cmVsb2FkKCl7dGhpcy5fcXVlcnlTZXJ2ZXIoKX1fY3N2VXJsKHQsZSl7cmV0dXJuIHRoaXMuX2Rvd25sb2FkRGF0YVVybCh0LGUsImNzdiIpfV9qc29uVXJsKHQsZSl7cmV0dXJuIHRoaXMuX2Rvd25sb2FkRGF0YVVybCh0LGUsImpzb24iKX1fbGF0ZXhVcmwodCxlKXtyZXR1cm4gdGhpcy5fZG93bmxvYWREYXRhVXJsKHQsZSwibGF0ZXgiKX1fZG93bmxvYWREYXRhVXJsKHQsZSxuKXtyZXR1cm4gdGhpcy5iYWNrZW5kLmdldERvd25sb2FkVXJsKG4sdCxlLmNvbHVtbnNWaXNpYmlsaXR5KX1fY29tcHV0ZUV4cGVyaW1lbnRBbmRSZWxhdGVkUHJvcHMoKXtjb25zdCB0PU1QdDt0LmlzTnVsbE9yVW5kZWZpbmVkKHRoaXMuYmFja2VuZCl8fHQuaXNOdWxsT3JVbmRlZmluZWQodGhpcy5leHBlcmltZW50TmFtZSl8fHRoaXMuYmFja2VuZC5nZXRFeHBlcmltZW50KHtleHBlcmltZW50TmFtZTp0aGlzLmV4cGVyaW1lbnROYW1lfSkudGhlbigodD0+e3dlLmlzRXF1YWwodCx0aGlzLl9leHBlcmltZW50KXx8KHRoaXMuc2V0KCJfZXhwZXJpbWVudCIsdCksdGhpcy5fY29tcHV0ZUhQYXJhbXMoKSx0aGlzLl9jb21wdXRlTWV0cmljcygpLHRoaXMuX3F1ZXJ5U2VydmVyKCksdGhpcy5fcmVzb2x2ZUdldEV4cGVyaW1lbnQoKSl9KSkuZmluYWxseSgoKCk9Pnt0aGlzLl9jb21wdXRlRGF0YUZvdW5kKCl9KSl9X2NvbXB1dGVEYXRhRm91bmQoKXtjb25zdCB0PUJvb2xlYW4odGhpcy5fZXhwZXJpbWVudCYmdGhpcy5fZXhwZXJpbWVudC5ocGFyYW1JbmZvcyYmdGhpcy5fZXhwZXJpbWVudC5ocGFyYW1JbmZvcy5sZW5ndGg+MCYmdGhpcy5fZXhwZXJpbWVudC5tZXRyaWNJbmZvcyYmdGhpcy5fZXhwZXJpbWVudC5tZXRyaWNJbmZvcy5sZW5ndGg+MCk7dGhpcy5zZXQoImRhdGFMb2FkZWRXaXRoTm9uRW1wdHlIcGFyYW1zIix0KSx0aGlzLnNldCgiZGF0YUxvYWRlZFdpdGhFbXB0eUhwYXJhbXMiLCF0KX1fY29tcHV0ZUhQYXJhbXMoKXtjb25zdCB0PVtdO3RoaXMuX2V4cGVyaW1lbnQuaHBhcmFtSW5mb3MuZm9yRWFjaCgoKGUsbik9Pntjb25zdCBpPXtpbmZvOmUsZGlzcGxheWVkOm48NSxmaWx0ZXI6e319O2kuaW5mby5oYXNPd25Qcm9wZXJ0eSgiZG9tYWluRGlzY3JldGUiKT8oaS5maWx0ZXIuZG9tYWluRGlzY3JldGU9W10saS5pbmZvLmRvbWFpbkRpc2NyZXRlLmZvckVhY2goKHQ9PntpLmZpbHRlci5kb21haW5EaXNjcmV0ZS5wdXNoKHt2YWx1ZTp0LGNoZWNrZWQ6ITB9KX0pKSk6IkRBVEFfVFlQRV9CT09MIj09PWkuaW5mby50eXBlP2kuZmlsdGVyLmRvbWFpbkRpc2NyZXRlPVt7dmFsdWU6ITEsY2hlY2tlZDohMH0se3ZhbHVlOiEwLGNoZWNrZWQ6ITB9XToiREFUQV9UWVBFX0ZMT0FUNjQiPT09aS5pbmZvLnR5cGU/aS5maWx0ZXIuaW50ZXJ2YWw9e21pbjp7dmFsdWU6IiIsaW52YWxpZDohMX0sbWF4Ont2YWx1ZToiIixpbnZhbGlkOiExfX06IkRBVEFfVFlQRV9TVFJJTkciPT09aS5pbmZvLnR5cGU/aS5maWx0ZXIucmVnZXhwPSIiOmNvbnNvbGUud2FybigidW5rbm93biBocGFyYW0uaW5mby50eXBlOiAlcyIsaS5pbmZvLnR5cGUpLHQucHVzaChpKX0pKSx0aGlzLnNldCgiX2hwYXJhbXMiLHQpfV9jb21wdXRlTWV0cmljcygpe2NvbnN0IHQ9W107dGhpcy5fZXhwZXJpbWVudC5tZXRyaWNJbmZvcy5mb3JFYWNoKCgoZSxuKT0+e3QucHVzaCh7aW5mbzplLGZpbHRlcjp7aW50ZXJ2YWw6e21pbjp7dmFsdWU6IiIsaW52YWxpZDohMX0sbWF4Ont2YWx1ZToiIixpbnZhbGlkOiExfX19LGRpc3BsYXllZDpuPDV9KX0pKSx0aGlzLnNldCgiX21ldHJpY3MiLHQpfV9jb21wdXRlU2NoZW1hKCl7cmV0dXJuIHRoaXMuX2hwYXJhbXMmJnRoaXMuX21ldHJpY3M/e2hwYXJhbUNvbHVtbnM6dGhpcy5faHBhcmFtcy5tYXAoKHQ9Pih7aHBhcmFtSW5mbzp0LmluZm99KSkpLG1ldHJpY0NvbHVtbnM6dGhpcy5fbWV0cmljcy5tYXAoKHQ9Pih7bWV0cmljSW5mbzp0LmluZm99KSkpfTp7aHBhcmFtQ29sdW1uczpbXSxtZXRyaWNDb2x1bW5zOltdfX1fdXBkYXRlQ29uZmlndXJhdGlvbigpe3RoaXMuZGVib3VuY2UoIl91cGRhdGVDb25maWd1cmF0aW9uIiwoKCk9Pnt0aGlzLmNvbmZpZ3VyYXRpb249e3NjaGVtYTp0aGlzLl9jb21wdXRlU2NoZW1hKCksY29sdW1uc1Zpc2liaWxpdHk6dGhpcy5fY29tcHV0ZUNvbHVtbnNWaXNpYmlsaXR5KCksdmlzaWJsZVNjaGVtYTp0aGlzLl9jb21wdXRlVmlzaWJsZVNjaGVtYSgpfX0pKX1fY29tcHV0ZUNvbHVtbnNWaXNpYmlsaXR5KCl7cmV0dXJuIHRoaXMuX2hwYXJhbXMmJnRoaXMuX21ldHJpY3M/dGhpcy5faHBhcmFtcy5tYXAoKHQ9PnQuZGlzcGxheWVkKSkuY29uY2F0KHRoaXMuX21ldHJpY3MubWFwKCh0PT50LmRpc3BsYXllZCkpKTpbXX1fY29tcHV0ZVZpc2libGVTY2hlbWEoKXtyZXR1cm4gdGhpcy5faHBhcmFtcyYmdGhpcy5fbWV0cmljcz97aHBhcmFtSW5mb3M6dGhpcy5faHBhcmFtcy5maWx0ZXIoKHQ9PnQuZGlzcGxheWVkKSkubWFwKCh0PT50LmluZm8pKSxtZXRyaWNJbmZvczp0aGlzLl9tZXRyaWNzLmZpbHRlcigodD0+dC5kaXNwbGF5ZWQpKS5tYXAoKHQ9PnQuaW5mbykpfTp7aHBhcmFtSW5mb3M6W10sbWV0cmljSW5mb3M6W119fV9xdWVyeVNlcnZlcigpe3RoaXMuZGVib3VuY2UoInF1ZXJ5U2VydmVyIiwoKCk9PnRoaXMuX3F1ZXJ5U2VydmVyTm9EZWJvdW5jZSgpKSwxMDApfV9xdWVyeVNlcnZlck5vRGVib3VuY2UoKXtpZih0aGlzLl9ocGFyYW1zJiZ0aGlzLl9tZXRyaWNzKXJldHVybiB0aGlzLl9zZW5kTGlzdFNlc3Npb25Hcm91cHNSZXF1ZXN0KCkudGhlbih0aGlzLl9saXN0U2Vzc2lvbkdyb3Vwc0NhbmNlbGxlci5jYW5jZWxsYWJsZSgoKHt2YWx1ZTp0LGNhbmNlbGxlZDplfSk9PntlfHwodC50b3RhbFNpemU+PTA/KHRoaXMuc2V0KCJfcGFnZUNvdW50U3RyIixTdHJpbmcoTWF0aC5jZWlsKHQudG90YWxTaXplLyt0aGlzLl9wYWdlU2l6ZUlucHV0LnZhbHVlKSkpLHRoaXMuc2V0KCJfdG90YWxTZXNzaW9uR3JvdXBzQ291bnRTdHIiLHQudG90YWxTaXplKSk6KHRoaXMuc2V0KCJfcGFnZUNvdW50U3RyIiwiPyIpLHRoaXMuc2V0KCJfdG90YWxTZXNzaW9uR3JvdXBzQ291bnRTdHIiLCJVbmtub3duIikpLHdQdCh0aGlzLCJzZXNzaW9uR3JvdXBzIix0LnNlc3Npb25Hcm91cHMpKX0pKSl9X3NlbmRMaXN0U2Vzc2lvbkdyb3Vwc1JlcXVlc3QoKXtjb25zdCB0PXRoaXMuX2J1aWxkTGlzdFNlc3Npb25Hcm91cHNSZXF1ZXN0KCk7aWYobnVsbCE9PXQpcmV0dXJuIHRoaXMuc2V0KCJfc2Vzc2lvbkdyb3Vwc1JlcXVlc3QiLHQpLHRoaXMuX2xpc3RTZXNzaW9uR3JvdXBzQ2FuY2VsbGVyLmNhbmNlbEFsbCgpLHRoaXMuYmFja2VuZC5saXN0U2Vzc2lvbkdyb3Vwcyh0KX1fYnVpbGRMaXN0U2Vzc2lvbkdyb3Vwc1JlcXVlc3QoKXtjb25zdCB0PXRoaXM7bGV0IGU9ITA7ZnVuY3Rpb24gbihuKXtjb25zdCBpPXQuZ2V0KG4rIi5taW4udmFsdWUiKTtjb25zb2xlLmFzc2VydCh2b2lkIDAhPT1pKTtjb25zdCByPSIiPT09aT8iLUluZmluaXR5IjoraTt0LnNldChuKyIubWluLmludmFsaWQiLGlzTmFOKHIpKSxlPWUmJiFpc05hTihyKTtjb25zdCBvPXQuZ2V0KG4rIi5tYXgudmFsdWUiKTtjb25zb2xlLmFzc2VydCh2b2lkIDAhPT1vKTtjb25zdCBhPSIiPT09bz8iSW5maW5pdHkiOitvO3JldHVybiB0LnNldChuKyIubWF4LmludmFsaWQiLGlzTmFOKGEpKSxlPWUmJiFpc05hTihhKSxpc05hTihyKXx8aXNOYU4oYSk/bnVsbDp7bWluVmFsdWU6cixtYXhWYWx1ZTphfX1mdW5jdGlvbiBpKG4pe2NvbnN0IGk9dC5nZXQobisiLnZhbHVlIik7Y29uc29sZS5hc3NlcnQodm9pZCAwIT09aSk7Y29uc3Qgcj0raSxvPU51bWJlci5pc0ludGVnZXIocikmJnI+MDtyZXR1cm4gdC5zZXQobisiLmludmFsaWQiLCFvKSxlPWUmJm8sbz9yOm51bGx9Y29uc3Qgcj10aGlzLl9zdGF0dXNlcy5maWx0ZXIoKHQ9PnQuYWxsb3dlZCkpLm1hcCgodD0+dC52YWx1ZSkpO2xldCBvPVtdO2lmKHRoaXMuX2hwYXJhbXMuZm9yRWFjaCgoKHQsZSk9PntsZXQgaT17aHBhcmFtOnQuaW5mby5uYW1lfTtpZih0LmZpbHRlci5kb21haW5EaXNjcmV0ZSlpLmZpbHRlckRpc2NyZXRlPVtdLHQuZmlsdGVyLmRvbWFpbkRpc2NyZXRlLmZvckVhY2goKHQ9Pnt0LmNoZWNrZWQmJmkuZmlsdGVyRGlzY3JldGUucHVzaCh0LnZhbHVlKX0pKTtlbHNlIGlmKHQuZmlsdGVyLmludGVydmFsKWkuZmlsdGVySW50ZXJ2YWw9bigiX2hwYXJhbXMuIitlKyIuZmlsdGVyLmludGVydmFsIik7ZWxzZXtpZighdC5maWx0ZXIucmVnZXhwKXJldHVybiBjb25zb2xlLmVycm9yKCJocGFyYW0uZmlsdGVyIHdpdGggbm8gZG9tYWluRGlzY3JldGUsIGludGVydmFsIG9yIHJlZ2V4cCBwcm9wZXJ0aWVzIHNldDogJXMiLHQpLG51bGw7aS5maWx0ZXJSZWdleHA9dC5maWx0ZXIucmVnZXhwfW8ucHVzaChpKX0pKSx0aGlzLl9tZXRyaWNzLmZvckVhY2goKCh0LGUpPT57bGV0IGk9e21ldHJpYzp0LmluZm8ubmFtZSxmaWx0ZXJJbnRlcnZhbDpuKCJfbWV0cmljcy4iK2UrIi5maWx0ZXIuaW50ZXJ2YWwiKX07by5wdXNoKGkpfSkpLHZvaWQgMCE9PXRoaXMuX3NvcnRCeUluZGV4JiZ2b2lkIDAhPT10aGlzLl9zb3J0RGlyZWN0aW9uKXtpZighKHRoaXMuX3NvcnRCeUluZGV4IGluIG8pKXJldHVybiBjb25zb2xlLmVycm9yKCJObyBjb2x1bW4gaW4gY29sUGFyYW1zIHdpdGggaW5kZXggc29ydEJ5SW5kZXg6ICVzIix0aGlzLl9zb3J0QnlJbmRleCksbnVsbDtvW3RoaXMuX3NvcnRCeUluZGV4XS5vcmRlcj0wPT09dGhpcy5fc29ydERpcmVjdGlvbj8iT1JERVJfQVNDIjoiT1JERVJfREVTQyJ9Y29uc3QgYT1pKCJfcGFnZU51bWJlcklucHV0Iikscz1pKCJfcGFnZVNpemVJbnB1dCIpO3JldHVybiBlP3tleHBlcmltZW50TmFtZTp0aGlzLmV4cGVyaW1lbnROYW1lLGFsbG93ZWRTdGF0dXNlczpyLGNvbFBhcmFtczpvLHN0YXJ0SW5kZXg6cyooYS0xKSxzbGljZVNpemU6c306bnVsbH1fbWV0cmljU29ydEJ5SW5kZXgodCl7cmV0dXJuIHQrdGhpcy5faHBhcmFtcy5sZW5ndGh9fTtSUHQudGVtcGxhdGU9X2VgCiAgICA8aHBhcmFtcy1zcGxpdC1sYXlvdXQgb3JpZW50YXRpb249InZlcnRpY2FsIj4KICAgICAgPGRpdiBzbG90PSJjb250ZW50IiBjbGFzcz0ic2VjdGlvbiBoeXBlcnBhcmFtZXRlcnMiPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPkh5cGVycGFyYW1ldGVyczwvZGl2PgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9Int7X2hwYXJhbXN9fSIgYXM9ImhwYXJhbSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJocGFyYW0iPgogICAgICAgICAgICA8cGFwZXItY2hlY2tib3gKICAgICAgICAgICAgICBjaGVja2VkPSJ7e2hwYXJhbS5kaXNwbGF5ZWR9fSIKICAgICAgICAgICAgICBjbGFzcz0iaHBhcmFtLWNoZWNrYm94IgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgW1tfaHBhcmFtTmFtZShocGFyYW0uaW5mbyldXQogICAgICAgICAgICA8L3BhcGVyLWNoZWNrYm94PgogICAgICAgICAgICA8IS0tIFByZWNpc2VseSBvbmUgb2YgdGhlIHRlbXBsYXRlcyBiZWxvdyB3aWxsIGJlIHN0YW1wZWQuLS0+CiAgICAgICAgICAgIDwhLS0gMS4gQSBsaXN0IG9mIGNoZWNrYm94ZXMgLS0+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tocGFyYW0uZmlsdGVyLmRvbWFpbkRpc2NyZXRlXV0iPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZQogICAgICAgICAgICAgICAgaXM9ImRvbS1yZXBlYXQiCiAgICAgICAgICAgICAgICBpdGVtcz0iW1tocGFyYW0uZmlsdGVyLmRvbWFpbkRpc2NyZXRlXV0iCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94CiAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9Int7aXRlbS5jaGVja2VkfX0iCiAgICAgICAgICAgICAgICAgIGNsYXNzPSJkaXNjcmV0ZS12YWx1ZS1jaGVja2JveCIKICAgICAgICAgICAgICAgICAgb24tY2hhbmdlPSJfcXVlcnlTZXJ2ZXIiCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIFtbX3ByZXR0eVByaW50KGl0ZW0udmFsdWUpXV0KICAgICAgICAgICAgICAgIDwvcGFwZXItY2hlY2tib3g+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPCEtLSAyLiBBIG51bWVyaWMgaW50ZXJ2YWwgLS0+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tocGFyYW0uZmlsdGVyLmludGVydmFsXV0iPgogICAgICAgICAgICAgIDxwYXBlci1pbnB1dAogICAgICAgICAgICAgICAgbGFiZWw9Ik1pbiIKICAgICAgICAgICAgICAgIHZhbHVlPSJ7e2hwYXJhbS5maWx0ZXIuaW50ZXJ2YWwubWluLnZhbHVlfX0iCiAgICAgICAgICAgICAgICBhbGxvd2VkX3BhdHRlcm49IlswLTkuZVxcLV0iCiAgICAgICAgICAgICAgICBvbi12YWx1ZS1jaGFuZ2VkPSJfcXVlcnlTZXJ2ZXIiCiAgICAgICAgICAgICAgICBlcnJvci1tZXNzYWdlPSJJbnZhbGlkIGlucHV0IgogICAgICAgICAgICAgICAgaW52YWxpZD0iW1tocGFyYW0uZmlsdGVyLmludGVydmFsLm1pbi5pbnZhbGlkXV0iCiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0iLWluZmluaXR5IgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICA8L3BhcGVyLWlucHV0PgogICAgICAgICAgICAgIDxwYXBlci1pbnB1dAogICAgICAgICAgICAgICAgbGFiZWw9Ik1heCIKICAgICAgICAgICAgICAgIHZhbHVlPSJ7e2hwYXJhbS5maWx0ZXIuaW50ZXJ2YWwubWF4LnZhbHVlfX0iCiAgICAgICAgICAgICAgICBhbGxvd2VkX3BhdHRlcm49IlswLTkuZVxcLV0iCiAgICAgICAgICAgICAgICBvbi12YWx1ZS1jaGFuZ2VkPSJfcXVlcnlTZXJ2ZXIiCiAgICAgICAgICAgICAgICBlcnJvci1tZXNzYWdlPSJJbnZhbGlkIGlucHV0IgogICAgICAgICAgICAgICAgaW52YWxpZD0iW1tocGFyYW0uZmlsdGVyLmludGVydmFsLm1heC5pbnZhbGlkXV0iCiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0iK2luZmluaXR5IgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICA8L3BhcGVyLWlucHV0PgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8IS0tIDMuIEEgcmVnZXhwIC0tPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbaHBhcmFtLmZpbHRlci5yZWdleHBdXSI+CiAgICAgICAgICAgICAgPHBhcGVyLWlucHV0CiAgICAgICAgICAgICAgICBsYWJlbD0iUmVndWxhciBleHByZXNzaW9uIgogICAgICAgICAgICAgICAgdmFsdWU9Int7aHBhcmFtLmZpbHRlci5yZWdleHB9fSIKICAgICAgICAgICAgICAgIG9uLXZhbHVlLWNoYW5nZWQ9Il9xdWVyeVNlcnZlciIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IHNsb3Q9ImNvbnRlbnQiIGNsYXNzPSJzZWN0aW9uIG1ldHJpY3MiPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPk1ldHJpY3M8L2Rpdj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJ7e19tZXRyaWNzfX0iIGFzPSJtZXRyaWMiPgogICAgICAgICAgPGRpdiBjbGFzcz0ibWV0cmljIj4KICAgICAgICAgICAgPCEtLSBUT0RPKGVyZXopOiBNYWtlIGl0IGVhc2llciB0byBoYW5kbGUgYSBsYXJnZSBudW1iZXIgb2YKICAgICAgICAgICAgICAgICAgbWV0cmljczoKICAgICAgICAgICAgICAgICAgMS4gQWRkIGFuICdpc29sYXRvcicgcmFkaW8tYnV0dG9uIHRvIHNlbGVjdCBqdXN0IG9uZQogICAgICAgICAgICAgICAgICBtZXRyaWMgYW5kCiAgICAgICAgICAgICAgICAgIGhpZGUgYWxsIHRoZSByZXN0CiAgICAgICAgICAgICAgICAgIDIuIEFkZCBhICd0b2dnbGUtYWxsJyBidXR0b24gdGhhdCB3aWxsIGhpZGUvdW5oaWRlCiAgICAgICAgICAgICAgICAgICAgYWxsIHRoZQogICAgICAgICAgICAgICAgICBtZXRyaWNzLgogICAgICAgICAgICAgICAgICBVc2Ugc2ltaWxhciBsb2dpYy9hcHBlYXJhbmNlIHRvIHRoZSBydW4tc2VsZWN0b3Igb2YKICAgICAgICAgICAgICAgICAgc2NhbGFycy4tLT4KICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94CiAgICAgICAgICAgICAgY2hlY2tlZD0ie3ttZXRyaWMuZGlzcGxheWVkfX0iCiAgICAgICAgICAgICAgY2xhc3M9Im1ldHJpYy1jaGVja2JveCIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIFtbX21ldHJpY05hbWUobWV0cmljLmluZm8pXV0KICAgICAgICAgICAgPC9wYXBlci1jaGVja2JveD4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5saW5lLWVsZW1lbnQiPgogICAgICAgICAgICAgIDxwYXBlci1pbnB1dAogICAgICAgICAgICAgICAgbGFiZWw9Ik1pbiIKICAgICAgICAgICAgICAgIHZhbHVlPSJ7e21ldHJpYy5maWx0ZXIuaW50ZXJ2YWwubWluLnZhbHVlfX0iCiAgICAgICAgICAgICAgICBhbGxvd2VkLXBhdHRlcm49IlswLTkuZVxcLV0iCiAgICAgICAgICAgICAgICBvbi12YWx1ZS1jaGFuZ2VkPSJfcXVlcnlTZXJ2ZXIiCiAgICAgICAgICAgICAgICBlcnJvci1tZXNzYWdlPSJJbnZhbGlkIGlucHV0IgogICAgICAgICAgICAgICAgaW52YWxpZD0ie3ttZXRyaWMuZmlsdGVyLmludGVydmFsLm1pbi5pbnZhbGlkfX0iCiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0iLWluZmluaXR5IgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICA8L3BhcGVyLWlucHV0PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5saW5lLWVsZW1lbnQiPgogICAgICAgICAgICAgIDxwYXBlci1pbnB1dAogICAgICAgICAgICAgICAgbGFiZWw9Ik1heCIKICAgICAgICAgICAgICAgIGFsbG93ZWQtcGF0dGVybj0iWzAtOS5lXFwtXSIKICAgICAgICAgICAgICAgIHZhbHVlPSJ7e21ldHJpYy5maWx0ZXIuaW50ZXJ2YWwubWF4LnZhbHVlfX0iCiAgICAgICAgICAgICAgICBvbi12YWx1ZS1jaGFuZ2VkPSJfcXVlcnlTZXJ2ZXIiCiAgICAgICAgICAgICAgICBlcnJvci1tZXNzYWdlPSJJbnZhbGlkIGlucHV0IgogICAgICAgICAgICAgICAgaW52YWxpZD0ie3ttZXRyaWMuZmlsdGVyLmludGVydmFsLm1heC5pbnZhbGlkfX0iCiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0iK2luZmluaXR5IgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICA8L3BhcGVyLWlucHV0PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IHNsb3Q9ImNvbnRlbnQiIGNsYXNzPSJzZWN0aW9uIHN0YXR1cyI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+U3RhdHVzPC9kaXY+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfc3RhdHVzZXNdXSIgYXM9InN0YXR1cyI+CiAgICAgICAgICA8cGFwZXItY2hlY2tib3ggY2hlY2tlZD0ie3tzdGF0dXMuYWxsb3dlZH19IiBvbi1jaGFuZ2U9Il9xdWVyeVNlcnZlciI+CiAgICAgICAgICAgIFtbc3RhdHVzLmRpc3BsYXlOYW1lXV0KICAgICAgICAgIDwvcGFwZXItY2hlY2tib3g+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgc2xvdD0iY29udGVudCIgY2xhc3M9InNlY3Rpb24gc29ydGluZyI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+U29ydGluZzwvZGl2PgogICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51CiAgICAgICAgICBsYWJlbD0iU29ydCBieSIKICAgICAgICAgIG9uLXNlbGVjdGVkLWl0ZW0tY2hhbmdlZD0iX3F1ZXJ5U2VydmVyIgogICAgICAgICAgaG9yaXpvbnRhbC1hbGlnbj0ibGVmdCIKICAgICAgICA+CiAgICAgICAgICA8cGFwZXItbGlzdGJveAogICAgICAgICAgICBjbGFzcz0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgICAgc2xvdD0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgICAgc2VsZWN0ZWQ9Int7X3NvcnRCeUluZGV4fX0iCiAgICAgICAgICAgIG9uLXNlbGVjdGVkLWl0ZW0tY2hhbmdlZD0iX3F1ZXJ5U2VydmVyIgogICAgICAgICAgPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19ocGFyYW1zXV0iIGFzPSJocGFyYW0iPgogICAgICAgICAgICAgIDxwYXBlci1pdGVtPiBbW19ocGFyYW1OYW1lKGhwYXJhbS5pbmZvKV1dIDwvcGFwZXItaXRlbT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfbWV0cmljc11dIiBhcz0ibWV0cmljIj4KICAgICAgICAgICAgICA8cGFwZXItaXRlbT4gW1tfbWV0cmljTmFtZShtZXRyaWMuaW5mbyldXSA8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgogICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51CiAgICAgICAgICBsYWJlbD0iRGlyZWN0aW9uIgogICAgICAgICAgb24tc2VsZWN0ZWQtaXRlbS1jaGFuZ2VkPSJfcXVlcnlTZXJ2ZXIiCiAgICAgICAgICBob3Jpem9udGFsLWFsaWduPSJsZWZ0IgogICAgICAgID4KICAgICAgICAgIDxwYXBlci1saXN0Ym94CiAgICAgICAgICAgIGNsYXNzPSJkcm9wZG93bi1jb250ZW50IgogICAgICAgICAgICBzbG90PSJkcm9wZG93bi1jb250ZW50IgogICAgICAgICAgICBzZWxlY3RlZD0ie3tfc29ydERpcmVjdGlvbn19IgogICAgICAgICAgPgogICAgICAgICAgICA8cGFwZXItaXRlbT5Bc2NlbmRpbmc8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgIDxwYXBlci1pdGVtPkRlc2NlbmRpbmc8L3BhcGVyLWl0ZW0+CiAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBzbG90PSJjb250ZW50IiBjbGFzcz0ic2VjdGlvbiBwYWdpbmciPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPlBhZ2luZzwvZGl2PgogICAgICAgIDxkaXY+CiAgICAgICAgICBOdW1iZXIgb2YgbWF0Y2hpbmcgc2Vzc2lvbiBncm91cHM6IFtbX3RvdGFsU2Vzc2lvbkdyb3Vwc0NvdW50U3RyXV0KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJpbmxpbmUtZWxlbWVudCBwYWdlLW51bWJlci1pbnB1dCI+CiAgICAgICAgICA8cGFwZXItaW5wdXQKICAgICAgICAgICAgbGFiZWw9IlBhZ2UgIyIKICAgICAgICAgICAgdmFsdWU9Int7X3BhZ2VOdW1iZXJJbnB1dC52YWx1ZX19IgogICAgICAgICAgICBhbGxvd2VkLXBhdHRlcm49IlswLTldIgogICAgICAgICAgICBlcnJvci1tZXNzYWdlPSJJbnZhbGlkIGlucHV0IgogICAgICAgICAgICBpbnZhbGlkPSJbW19wYWdlTnVtYmVySW5wdXQuaW52YWxpZF1dIgogICAgICAgICAgICBvbi12YWx1ZS1jaGFuZ2VkPSJfcXVlcnlTZXJ2ZXIiCiAgICAgICAgICA+CiAgICAgICAgICAgIDxkaXYgc2xvdD0ic3VmZml4IiBjbGFzcz0icGFnZS1zdWZmaXgiPi8gW1tfcGFnZUNvdW50U3RyXV08L2Rpdj4KICAgICAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iaW5saW5lLWVsZW1lbnQgcGFnZS1zaXplLWlucHV0Ij4KICAgICAgICAgIDxwYXBlci1pbnB1dAogICAgICAgICAgICBsYWJlbD0iTWF4ICMgb2Ygc2Vzc2lvbiBncm91cHMgcGVyIHBhZ2U6IgogICAgICAgICAgICB2YWx1ZT0ie3tfcGFnZVNpemVJbnB1dC52YWx1ZX19IgogICAgICAgICAgICBhbGxvd2VkLXBhdHRlcm49IlswLTldIgogICAgICAgICAgICBlcnJvci1tZXNzYWdlPSJJbnZhbGlkIGlucHV0IgogICAgICAgICAgICBpbnZhbGlkPSJbW19wYWdlU2l6ZUlucHV0LmludmFsaWRdXSIKICAgICAgICAgICAgb24tdmFsdWUtY2hhbmdlZD0iX3F1ZXJ5U2VydmVyIgogICAgICAgICAgPgogICAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgc2xvdD0iY29udGVudCIgY2xhc3M9InNlY3Rpb24gZG93bmxvYWQiPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfc2Vzc2lvbkdyb3Vwc1JlcXVlc3RdXSI+CiAgICAgICAgICBEb3dubG9hZCBkYXRhIGFzCiAgICAgICAgICA8c3Bhbj4KICAgICAgICAgICAgPGEKICAgICAgICAgICAgICBpZD0iY3N2TGluayIKICAgICAgICAgICAgICBkb3dubG9hZD0iaHBhcmFtc190YWJsZS5jc3YiCiAgICAgICAgICAgICAgaHJlZj0iW1tfY3N2VXJsKF9zZXNzaW9uR3JvdXBzUmVxdWVzdCwgY29uZmlndXJhdGlvbildXSIKICAgICAgICAgICAgICA+Q1NWPC9hCiAgICAgICAgICAgID4KICAgICAgICAgICAgPGEKICAgICAgICAgICAgICBpZD0ianNvbkxpbmsiCiAgICAgICAgICAgICAgZG93bmxvYWQ9ImhwYXJhbXNfdGFibGUuanNvbiIKICAgICAgICAgICAgICBocmVmPSJbW19qc29uVXJsKF9zZXNzaW9uR3JvdXBzUmVxdWVzdCwgY29uZmlndXJhdGlvbildXSIKICAgICAgICAgICAgICA+SlNPTjwvYQogICAgICAgICAgICA+CiAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgaWQ9ImxhdGV4TGluayIKICAgICAgICAgICAgICBkb3dubG9hZD0iaHBhcmFtc190YWJsZS50ZXgiCiAgICAgICAgICAgICAgaHJlZj0iW1tfbGF0ZXhVcmwoX3Nlc3Npb25Hcm91cHNSZXF1ZXN0LCBjb25maWd1cmF0aW9uKV1dIgogICAgICAgICAgICAgID5MYVRlWDwvYQogICAgICAgICAgICA+CiAgICAgICAgICA8L3NwYW4+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICA8L2hwYXJhbXMtc3BsaXQtbGF5b3V0PgogICAgPHN0eWxlPgogICAgICAuc2VjdGlvbiB7CiAgICAgICAgcGFkZGluZzogMTBweDsKICAgICAgfQogICAgICAuc2VjdGlvbi10aXRsZSB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogN3B4OwogICAgICB9CiAgICAgIC5kaXNjcmV0ZS12YWx1ZS1jaGVja2JveCwKICAgICAgLm1ldHJpYy1jaGVja2JveCwKICAgICAgLmhwYXJhbS1jaGVja2JveCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KICAgICAgLmRpc2NyZXRlLXZhbHVlLWNoZWNrYm94IHsKICAgICAgICBtYXJnaW4tbGVmdDogMjBweDsKICAgICAgfQogICAgICAuaHBhcmFtLAogICAgICAubWV0cmljIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgICAuaW5saW5lLWVsZW1lbnQgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB3aWR0aDogNDAlOwogICAgICAgIG1hcmdpbi1sZWZ0OiAxMHB4OwogICAgICB9CiAgICAgIC5wYWdlLW51bWJlci1pbnB1dCB7CiAgICAgICAgd2lkdGg6IDIwJTsKICAgICAgfQogICAgICAucGFnZS1zaXplLWlucHV0IHsKICAgICAgICB3aWR0aDogNjAlOwogICAgICB9CiAgICAgIHZhYWRpbi1zcGxpdC1sYXlvdXQgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQogICAgICBwYXBlci1saXN0Ym94IHsKICAgICAgICBtYXgtaGVpZ2h0OiAxNWVtOwogICAgICB9CiAgICAgIC5wYWdlLXN1ZmZpeCB7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgfQogICAgPC9zdHlsZT4KICBgLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLFJQdC5wcm90b3R5cGUsImV4cGVyaW1lbnROYW1lIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxSUHQucHJvdG90eXBlLCJjb25maWd1cmF0aW9uIix2b2lkIDApLHQoW28oe3R5cGU6QXJyYXksbm90aWZ5OiEwfSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLFJQdC5wcm90b3R5cGUsInNlc3Npb25Hcm91cHMiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFuLG5vdGlmeTohMH0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sUlB0LnByb3RvdHlwZSwiZGF0YUxvYWRlZFdpdGhOb25FbXB0eUhwYXJhbXMiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFuLG5vdGlmeTohMH0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sUlB0LnByb3RvdHlwZSwiZGF0YUxvYWRlZFdpdGhFbXB0eUhwYXJhbXMiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUlB0LnByb3RvdHlwZSwiX2V4cGVyaW1lbnQiLHZvaWQgMCksdChbbyh7dHlwZTpBcnJheX0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLFJQdC5wcm90b3R5cGUsIl9ocGFyYW1zIix2b2lkIDApLHQoW28oe3R5cGU6QXJyYXl9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSxSUHQucHJvdG90eXBlLCJfbWV0cmljcyIsdm9pZCAwKSx0KFtvKHt0eXBlOkFycmF5fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLFJQdC5wcm90b3R5cGUsIl9zdGF0dXNlcyIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxSUHQucHJvdG90eXBlLCJfZ2V0RXhwZXJpbWVudFJlc29sdmVkIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sUlB0LnByb3RvdHlwZSwiX3Jlc29sdmVHZXRFeHBlcmltZW50Iix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLFJQdC5wcm90b3R5cGUsIl9saXN0U2Vzc2lvbkdyb3Vwc0NhbmNlbGxlciIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxSUHQucHJvdG90eXBlLCJfc29ydEJ5SW5kZXgiLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXJ9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sUlB0LnByb3RvdHlwZSwiX3NvcnREaXJlY3Rpb24iLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUlB0LnByb3RvdHlwZSwiX3BhZ2VTaXplSW5wdXQiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUlB0LnByb3RvdHlwZSwiX3BhZ2VOdW1iZXJJbnB1dCIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxSUHQucHJvdG90eXBlLCJfcGFnZUNvdW50U3RyIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLFJQdC5wcm90b3R5cGUsIl90b3RhbFNlc3Npb25Hcm91cHNDb3VudFN0ciIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxSUHQucHJvdG90eXBlLCJfc2Vzc2lvbkdyb3Vwc1JlcXVlc3QiLHZvaWQgMCksdChbYSgiYmFja2VuZCIsImV4cGVyaW1lbnROYW1lIiksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pLGUoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxSUHQucHJvdG90eXBlLCJfY29tcHV0ZUV4cGVyaW1lbnRBbmRSZWxhdGVkUHJvcHMiLG51bGwpLHQoW2EoIl9ocGFyYW1zLioiLCJfbWV0cmljcy4qIiksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pLGUoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxSUHQucHJvdG90eXBlLCJfdXBkYXRlQ29uZmlndXJhdGlvbiIsbnVsbCksUlB0PXQoW2koInRmLWhwYXJhbXMtcXVlcnktcGFuZSIpXSxSUHQpO2xldCB6UHQ9Y2xhc3MgZXh0ZW5kcyB5ZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5vcHRpb25zPW51bGx9X2NvbmZpZ3VyYXRpb25DaGFuZ2VkKCl7Y29uc3QgdD10aGlzLmNvbmZpZ3VyYXRpb24udmlzaWJsZVNjaGVtYSxlPXRoaXMuY29uZmlndXJhdGlvbi5zY2hlbWEsbj17Y29sdW1uczp0LmhwYXJhbUluZm9zLm1hcCgoKG4saSk9Pih7bmFtZTpaTHQobiksaW5kZXg6aSxhYnNvbHV0ZUluZGV4OmNQdChlLHQsaSksc2NhbGU6dGhpcy5faXNOdW1lcmljQ29sdW1uKGkpPyJMSU5FQVIiOiJOT05fTlVNRVJJQyJ9KSkpLmNvbmNhdCh0Lm1ldHJpY0luZm9zLm1hcCgoKG4saSk9Pntjb25zdCByPWkrdC5ocGFyYW1JbmZvcy5sZW5ndGg7cmV0dXJue3NjYWxlOiJMSU5FQVIiLG5hbWU6Skx0KG4pLGluZGV4OnIsYWJzb2x1dGVJbmRleDpjUHQoZSx0LHIpfX0pKSksbWluQ29sb3I6IiMwMDAwRkYiLG1heENvbG9yOiIjRkYwMDAwIixjb25maWd1cmF0aW9uOnRoaXMuY29uZmlndXJhdGlvbn07dGhpcy5zZXQoIm9wdGlvbnMiLG4pLHppKCksdGhpcy5zZXQoIm9wdGlvbnMuY29sb3JCeUNvbHVtbkluZGV4Iix0aGlzLl9kZWZhdWx0Q29sb3JCeUNvbHVtbkluZGV4KCkpfV91bnNlbGVjdERpc2FibGVkTG9nU2NhbGVzKCl7bnVsbCE9PXRoaXMub3B0aW9ucyYmdGhpcy5vcHRpb25zLmNvbHVtbnMuZm9yRWFjaCgodD0+e2NvbnN0IGU9Im9wdGlvbnMuY29sdW1ucy4iK3QuaW5kZXg7dGhpcy5fYWxsb3dMb2dTY2FsZSh0KXx8IkxPRyIhPT10LnNjYWxlfHx0aGlzLnNldChlKyIuc2NhbGUiLCJMSU5FQVIiKX0pKX1fYWxsb3dMb2dTY2FsZSh0KXtpZighdGhpcy5faXNOdW1lcmljQ29sdW1uKHQuaW5kZXgpfHwhdGhpcy5zZXNzaW9uR3JvdXBzKXJldHVybiExO2NvbnN0W2Usbl09ZFB0KHRoaXMuY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hLHRoaXMuc2Vzc2lvbkdyb3Vwcyx0LmluZGV4KTtyZXR1cm4gZT4wfHxuPDB9X2lzTnVtZXJpY0NvbHVtbih0KXtyZXR1cm4gdD49dGhpcy5jb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWEuaHBhcmFtSW5mb3MubGVuZ3RofHwiREFUQV9UWVBFX0ZMT0FUNjQiPT09dGhpcy5jb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWEuaHBhcmFtSW5mb3NbdF0udHlwZX1fZGVmYXVsdENvbG9yQnlDb2x1bW5JbmRleCgpe2lmKHRoaXMuY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hLm1ldHJpY0luZm9zLmxlbmd0aD4wKXJldHVybiB0aGlzLmNvbmZpZ3VyYXRpb24udmlzaWJsZVNjaGVtYS5ocGFyYW1JbmZvcy5sZW5ndGg7Y29uc3QgdD10aGlzLmNvbmZpZ3VyYXRpb24udmlzaWJsZVNjaGVtYS5ocGFyYW1JbmZvcy5maW5kSW5kZXgoKHQ9PiJEQVRBX1RZUEVfRkxPQVQ2NCI9PT10LnR5cGUpKTtyZXR1cm4tMSE9PXQ/dDp2b2lkIDB9fTt6UHQudGVtcGxhdGU9X2VgCiAgICA8ZGl2IGNsYXNzPSJjb250cm9sLXBhbmVsIj4KICAgICAgPCEtLSAnQ29sb3IgYnknIGRyb3AgZG93biBtZW51IC0tPgogICAgICA8cGFwZXItZHJvcGRvd24tbWVudQogICAgICAgIGxhYmVsPSJDb2xvciBieSIKICAgICAgICBpZD0iY29sb3JCeURyb3BEb3duTWVudSIKICAgICAgICBob3Jpem9udGFsLWFsaWduPSJsZWZ0IgogICAgICA+CiAgICAgICAgPHBhcGVyLWxpc3Rib3gKICAgICAgICAgIGNsYXNzPSJkcm9wZG93bi1jb250ZW50IgogICAgICAgICAgc2xvdD0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgIHNlbGVjdGVkPSJ7e29wdGlvbnMuY29sb3JCeUNvbHVtbkluZGV4fX0iCiAgICAgICAgICBpZD0iY29sb3JCeUxpc3RCb3giCiAgICAgICAgPgogICAgICAgICAgPHRlbXBsYXRlCiAgICAgICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgICAgICBpdGVtcz0iW1tvcHRpb25zLmNvbHVtbnNdXSIKICAgICAgICAgICAgYXM9ImNvbHVtbiIKICAgICAgICAgICAgaWQ9ImNvbG9yQnlDb2x1bW5UZW1wbGF0ZSIKICAgICAgICAgID4KICAgICAgICAgICAgPHBhcGVyLWl0ZW0gZGlzYWJsZWQ9IltbIV9pc051bWVyaWNDb2x1bW4oY29sdW1uLmluZGV4KV1dIj4KICAgICAgICAgICAgICBbW2NvbHVtbi5uYW1lXV0KICAgICAgICAgICAgPC9wYXBlci1pdGVtPgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KCiAgICAgIDwhLS0gQ29sdW1ucyBzY2FsZXMgLS0+CiAgICAgIDxkaXYgY2xhc3M9ImNvbHVtbnMtY29udGFpbmVyIj4KICAgICAgICA8IS0tIFNjYWxlIG9wdGlvbnMgZm9yIGVhY2ggbnVtZXJpYyBmZWF0dXJlIC0tPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9Int7b3B0aW9ucy5jb2x1bW5zfX0iIGFzPSJjb2x1bW4iPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc051bWVyaWNDb2x1bW4oY29sdW1uLmluZGV4KV1dIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sdW1uIj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2x1bW4tdGl0bGUiPltbY29sdW1uLm5hbWVdXTwvZGl2PgogICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICA8cGFwZXItcmFkaW8tZ3JvdXAKICAgICAgICAgICAgICAgICAgY2xhc3M9InNjYWxlLXJhZGlvLWdyb3VwIgogICAgICAgICAgICAgICAgICBzZWxlY3RlZD0ie3tjb2x1bW4uc2NhbGV9fSIKICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBuYW1lPSJMSU5FQVIiPgogICAgICAgICAgICAgICAgICAgIExpbmVhcgogICAgICAgICAgICAgICAgICA8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgPCEtLSBUaGUgaWQgaGVyZSBpcyB1c2VkIHRvIGFjY2VzcyB0aGlzIGJ1dHRvbiBpbiB1bml0CiAgICAgICAgICAgICAgICAgICAgICAgdGVzdHMuLS0+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24KICAgICAgICAgICAgICAgICAgICBpZD0ibG9nU2NhbGVCdXR0b25fW1tjb2x1bW4ubmFtZV1dIgogICAgICAgICAgICAgICAgICAgIG5hbWU9IkxPRyIKICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD0iW1shX2FsbG93TG9nU2NhbGUoY29sdW1uLCBzZXNzaW9uR3JvdXBzLiopXV0iCiAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICBMb2dhcml0aG1pYwogICAgICAgICAgICAgICAgICA8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBuYW1lPSJRVUFOVElMRSI+CiAgICAgICAgICAgICAgICAgICAgUXVhbnRpbGUKICAgICAgICAgICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICAgICAgICA8L3BhcGVyLXJhZGlvLWdyb3VwPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgICAuY29udHJvbC1wYW5lbCB7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgIH0KICAgICAgLmNvbHVtbiB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIG1hcmdpbi1yaWdodDogNXB4OwogICAgICAgIGJvcmRlcjogc29saWQgMXB4IGRhcmtncmF5OwogICAgICAgIHBhZGRpbmc6IDNweDsKICAgICAgfQogICAgICAuY29sdW1uLXRpdGxlIHsKICAgICAgICAvKiBGaXQgZXZlcnkgdGl0bGUgaW4gb25lIGxpbmUgc28gdGhlIHJhZGlvIGJveGVzIGFsaWduIHZlcnRpY2FsbHkuICovCiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgICAgfQogICAgICAuY29sdW1ucy1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgfQogICAgICAuc2NhbGUtcmFkaW8tZ3JvdXAgcGFwZXItcmFkaW8tYnV0dG9uIHsKICAgICAgICBwYWRkaW5nOiAycHg7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KICAgICAgcGFwZXItbGlzdGJveCB7CiAgICAgICAgbWF4LWhlaWdodDogMTVlbTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLHpQdC5wcm90b3R5cGUsImNvbmZpZ3VyYXRpb24iLHZvaWQgMCksdChbbyh7dHlwZTpBcnJheX0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLHpQdC5wcm90b3R5cGUsInNlc3Npb25Hcm91cHMiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLHpQdC5wcm90b3R5cGUsIm9wdGlvbnMiLHZvaWQgMCksdChbYSgiY29uZmlndXJhdGlvbi4qIiksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pLGUoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSx6UHQucHJvdG90eXBlLCJfY29uZmlndXJhdGlvbkNoYW5nZWQiLG51bGwpLHQoW2EoInNlc3Npb25Hcm91cHMuKiIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0selB0LnByb3RvdHlwZSwiX3Vuc2VsZWN0RGlzYWJsZWRMb2dTY2FsZXMiLG51bGwpLHpQdD10KFtpKCJ0Zi1ocGFyYW1zLXNjYWxlLWFuZC1jb2xvci1jb250cm9scyIpXSx6UHQpO2NsYXNzIERQdCBleHRlbmRzIEhUTUxFbGVtZW50e3N0YXRpYyBnZXQgdmVyc2lvbigpe3JldHVybiIxLjYuMSJ9fWN1c3RvbUVsZW1lbnRzLmRlZmluZSgidmFhZGluLWx1bW8tc3R5bGVzIixEUHQpO2NvbnN0IEJQdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO0JQdC5pbm5lckhUTUw9JzxjdXN0b20tc3R5bGU+XG4gIDxzdHlsZT5cbiAgICBodG1sIHtcbiAgICAgIC8qIEJhc2UgKGJhY2tncm91bmQpICovXG4gICAgICAtLWx1bW8tYmFzZS1jb2xvcjogI0ZGRjtcblxuICAgICAgLyogVGludCAqL1xuICAgICAgLS1sdW1vLXRpbnQtNXBjdDogaHNsYSgwLCAwJSwgMTAwJSwgMC4zKTtcbiAgICAgIC0tbHVtby10aW50LTEwcGN0OiBoc2xhKDAsIDAlLCAxMDAlLCAwLjM3KTtcbiAgICAgIC0tbHVtby10aW50LTIwcGN0OiBoc2xhKDAsIDAlLCAxMDAlLCAwLjQ0KTtcbiAgICAgIC0tbHVtby10aW50LTMwcGN0OiBoc2xhKDAsIDAlLCAxMDAlLCAwLjUpO1xuICAgICAgLS1sdW1vLXRpbnQtNDBwY3Q6IGhzbGEoMCwgMCUsIDEwMCUsIDAuNTcpO1xuICAgICAgLS1sdW1vLXRpbnQtNTBwY3Q6IGhzbGEoMCwgMCUsIDEwMCUsIDAuNjQpO1xuICAgICAgLS1sdW1vLXRpbnQtNjBwY3Q6IGhzbGEoMCwgMCUsIDEwMCUsIDAuNyk7XG4gICAgICAtLWx1bW8tdGludC03MHBjdDogaHNsYSgwLCAwJSwgMTAwJSwgMC43Nyk7XG4gICAgICAtLWx1bW8tdGludC04MHBjdDogaHNsYSgwLCAwJSwgMTAwJSwgMC44NCk7XG4gICAgICAtLWx1bW8tdGludC05MHBjdDogaHNsYSgwLCAwJSwgMTAwJSwgMC45KTtcbiAgICAgIC0tbHVtby10aW50OiAjRkZGO1xuXG4gICAgICAvKiBTaGFkZSAqL1xuICAgICAgLS1sdW1vLXNoYWRlLTVwY3Q6IGhzbGEoMjE0LCA2MSUsIDI1JSwgMC4wNSk7XG4gICAgICAtLWx1bW8tc2hhZGUtMTBwY3Q6IGhzbGEoMjE0LCA1NyUsIDI0JSwgMC4xKTtcbiAgICAgIC0tbHVtby1zaGFkZS0yMHBjdDogaHNsYSgyMTQsIDUzJSwgMjMlLCAwLjE2KTtcbiAgICAgIC0tbHVtby1zaGFkZS0zMHBjdDogaHNsYSgyMTQsIDUwJSwgMjIlLCAwLjI2KTtcbiAgICAgIC0tbHVtby1zaGFkZS00MHBjdDogaHNsYSgyMTQsIDQ3JSwgMjElLCAwLjM4KTtcbiAgICAgIC0tbHVtby1zaGFkZS01MHBjdDogaHNsYSgyMTQsIDQ1JSwgMjAlLCAwLjUpO1xuICAgICAgLS1sdW1vLXNoYWRlLTYwcGN0OiBoc2xhKDIxNCwgNDMlLCAxOSUsIDAuNjEpO1xuICAgICAgLS1sdW1vLXNoYWRlLTcwcGN0OiBoc2xhKDIxNCwgNDIlLCAxOCUsIDAuNzIpO1xuICAgICAgLS1sdW1vLXNoYWRlLTgwcGN0OiBoc2xhKDIxNCwgNDElLCAxNyUsIDAuODMpO1xuICAgICAgLS1sdW1vLXNoYWRlLTkwcGN0OiBoc2xhKDIxNCwgNDAlLCAxNiUsIDAuOTQpO1xuICAgICAgLS1sdW1vLXNoYWRlOiBoc2woMjE0LCAzNSUsIDE1JSk7XG5cbiAgICAgIC8qIENvbnRyYXN0ICovXG4gICAgICAtLWx1bW8tY29udHJhc3QtNXBjdDogdmFyKC0tbHVtby1zaGFkZS01cGN0KTtcbiAgICAgIC0tbHVtby1jb250cmFzdC0xMHBjdDogdmFyKC0tbHVtby1zaGFkZS0xMHBjdCk7XG4gICAgICAtLWx1bW8tY29udHJhc3QtMjBwY3Q6IHZhcigtLWx1bW8tc2hhZGUtMjBwY3QpO1xuICAgICAgLS1sdW1vLWNvbnRyYXN0LTMwcGN0OiB2YXIoLS1sdW1vLXNoYWRlLTMwcGN0KTtcbiAgICAgIC0tbHVtby1jb250cmFzdC00MHBjdDogdmFyKC0tbHVtby1zaGFkZS00MHBjdCk7XG4gICAgICAtLWx1bW8tY29udHJhc3QtNTBwY3Q6IHZhcigtLWx1bW8tc2hhZGUtNTBwY3QpO1xuICAgICAgLS1sdW1vLWNvbnRyYXN0LTYwcGN0OiB2YXIoLS1sdW1vLXNoYWRlLTYwcGN0KTtcbiAgICAgIC0tbHVtby1jb250cmFzdC03MHBjdDogdmFyKC0tbHVtby1zaGFkZS03MHBjdCk7XG4gICAgICAtLWx1bW8tY29udHJhc3QtODBwY3Q6IHZhcigtLWx1bW8tc2hhZGUtODBwY3QpO1xuICAgICAgLS1sdW1vLWNvbnRyYXN0LTkwcGN0OiB2YXIoLS1sdW1vLXNoYWRlLTkwcGN0KTtcbiAgICAgIC0tbHVtby1jb250cmFzdDogdmFyKC0tbHVtby1zaGFkZSk7XG5cbiAgICAgIC8qIFRleHQgKi9cbiAgICAgIC0tbHVtby1oZWFkZXItdGV4dC1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdCk7XG4gICAgICAtLWx1bW8tYm9keS10ZXh0LWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTkwcGN0KTtcbiAgICAgIC0tbHVtby1zZWNvbmRhcnktdGV4dC1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdC03MHBjdCk7XG4gICAgICAtLWx1bW8tdGVydGlhcnktdGV4dC1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdC01MHBjdCk7XG4gICAgICAtLWx1bW8tZGlzYWJsZWQtdGV4dC1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdC0zMHBjdCk7XG5cbiAgICAgIC8qIFByaW1hcnkgKi9cbiAgICAgIC0tbHVtby1wcmltYXJ5LWNvbG9yOiBoc2woMjE0LCA5MCUsIDUyJSk7XG4gICAgICAtLWx1bW8tcHJpbWFyeS1jb2xvci01MHBjdDogaHNsYSgyMTQsIDkwJSwgNTIlLCAwLjUpO1xuICAgICAgLS1sdW1vLXByaW1hcnktY29sb3ItMTBwY3Q6IGhzbGEoMjE0LCA5MCUsIDUyJSwgMC4xKTtcbiAgICAgIC0tbHVtby1wcmltYXJ5LXRleHQtY29sb3I6IHZhcigtLWx1bW8tcHJpbWFyeS1jb2xvcik7XG4gICAgICAtLWx1bW8tcHJpbWFyeS1jb250cmFzdC1jb2xvcjogI0ZGRjtcblxuICAgICAgLyogRXJyb3IgKi9cbiAgICAgIC0tbHVtby1lcnJvci1jb2xvcjogaHNsKDMsIDEwMCUsIDYxJSk7XG4gICAgICAtLWx1bW8tZXJyb3ItY29sb3ItNTBwY3Q6IGhzbGEoMywgMTAwJSwgNjAlLCAwLjUpO1xuICAgICAgLS1sdW1vLWVycm9yLWNvbG9yLTEwcGN0OiBoc2xhKDMsIDEwMCUsIDYwJSwgMC4xKTtcbiAgICAgIC0tbHVtby1lcnJvci10ZXh0LWNvbG9yOiBoc2woMywgOTIlLCA1MyUpO1xuICAgICAgLS1sdW1vLWVycm9yLWNvbnRyYXN0LWNvbG9yOiAjRkZGO1xuXG4gICAgICAvKiBTdWNjZXNzICovXG4gICAgICAtLWx1bW8tc3VjY2Vzcy1jb2xvcjogaHNsKDE0NSwgODAlLCA0MiUpOyAvKiBoc2woMTQ0LDgyJSwzNyUpOyAqL1xuICAgICAgLS1sdW1vLXN1Y2Nlc3MtY29sb3ItNTBwY3Q6IGhzbGEoMTQ1LCA3NiUsIDQ0JSwgMC41NSk7XG4gICAgICAtLWx1bW8tc3VjY2Vzcy1jb2xvci0xMHBjdDogaHNsYSgxNDUsIDc2JSwgNDQlLCAwLjEyKTtcbiAgICAgIC0tbHVtby1zdWNjZXNzLXRleHQtY29sb3I6IGhzbCgxNDUsIDEwMCUsIDMyJSk7XG4gICAgICAtLWx1bW8tc3VjY2Vzcy1jb250cmFzdC1jb2xvcjogI0ZGRjtcbiAgICB9XG4gIDwvc3R5bGU+XG48L2N1c3RvbS1zdHlsZT48ZG9tLW1vZHVsZSBpZD0ibHVtby1jb2xvciI+XG4gIDx0ZW1wbGF0ZT5cbiAgICA8c3R5bGU+XG4gICAgICBbdGhlbWV+PSJkYXJrIl0ge1xuICAgICAgICAvKiBCYXNlIChiYWNrZ3JvdW5kKSAqL1xuICAgICAgICAtLWx1bW8tYmFzZS1jb2xvcjogaHNsKDIxNCwgMzUlLCAyMSUpO1xuXG4gICAgICAgIC8qIFRpbnQgKi9cbiAgICAgICAgLS1sdW1vLXRpbnQtNXBjdDogaHNsYSgyMTQsIDY1JSwgODUlLCAwLjA2KTtcbiAgICAgICAgLS1sdW1vLXRpbnQtMTBwY3Q6IGhzbGEoMjE0LCA2MCUsIDgwJSwgMC4xNCk7XG4gICAgICAgIC0tbHVtby10aW50LTIwcGN0OiBoc2xhKDIxNCwgNjQlLCA4MiUsIDAuMjMpO1xuICAgICAgICAtLWx1bW8tdGludC0zMHBjdDogaHNsYSgyMTQsIDY5JSwgODQlLCAwLjMyKTtcbiAgICAgICAgLS1sdW1vLXRpbnQtNDBwY3Q6IGhzbGEoMjE0LCA3MyUsIDg2JSwgMC40MSk7XG4gICAgICAgIC0tbHVtby10aW50LTUwcGN0OiBoc2xhKDIxNCwgNzglLCA4OCUsIDAuNSk7XG4gICAgICAgIC0tbHVtby10aW50LTYwcGN0OiBoc2xhKDIxNCwgODIlLCA5MCUsIDAuNik7XG4gICAgICAgIC0tbHVtby10aW50LTcwcGN0OiBoc2xhKDIxNCwgODclLCA5MiUsIDAuNyk7XG4gICAgICAgIC0tbHVtby10aW50LTgwcGN0OiBoc2xhKDIxNCwgOTElLCA5NCUsIDAuOCk7XG4gICAgICAgIC0tbHVtby10aW50LTkwcGN0OiBoc2xhKDIxNCwgOTYlLCA5NiUsIDAuOSk7XG4gICAgICAgIC0tbHVtby10aW50OiBoc2woMjE0LCAxMDAlLCA5OCUpO1xuXG4gICAgICAgIC8qIFNoYWRlICovXG4gICAgICAgIC0tbHVtby1zaGFkZS01cGN0OiBoc2xhKDIxNCwgMCUsIDAlLCAwLjA3KTtcbiAgICAgICAgLS1sdW1vLXNoYWRlLTEwcGN0OiBoc2xhKDIxNCwgNCUsIDIlLCAwLjE1KTtcbiAgICAgICAgLS1sdW1vLXNoYWRlLTIwcGN0OiBoc2xhKDIxNCwgOCUsIDQlLCAwLjIzKTtcbiAgICAgICAgLS1sdW1vLXNoYWRlLTMwcGN0OiBoc2xhKDIxNCwgMTIlLCA2JSwgMC4zMik7XG4gICAgICAgIC0tbHVtby1zaGFkZS00MHBjdDogaHNsYSgyMTQsIDE2JSwgOCUsIDAuNDEpO1xuICAgICAgICAtLWx1bW8tc2hhZGUtNTBwY3Q6IGhzbGEoMjE0LCAyMCUsIDEwJSwgMC41KTtcbiAgICAgICAgLS1sdW1vLXNoYWRlLTYwcGN0OiBoc2xhKDIxNCwgMjQlLCAxMiUsIDAuNik7XG4gICAgICAgIC0tbHVtby1zaGFkZS03MHBjdDogaHNsYSgyMTQsIDI4JSwgMTMlLCAwLjcpO1xuICAgICAgICAtLWx1bW8tc2hhZGUtODBwY3Q6IGhzbGEoMjE0LCAzMiUsIDEzJSwgMC44KTtcbiAgICAgICAgLS1sdW1vLXNoYWRlLTkwcGN0OiBoc2xhKDIxNCwgMzMlLCAxMyUsIDAuOSk7XG4gICAgICAgIC0tbHVtby1zaGFkZTogaHNsKDIxNCwgMzMlLCAxMyUpO1xuXG4gICAgICAgIC8qIENvbnRyYXN0ICovXG4gICAgICAgIC0tbHVtby1jb250cmFzdC01cGN0OiB2YXIoLS1sdW1vLXRpbnQtNXBjdCk7XG4gICAgICAgIC0tbHVtby1jb250cmFzdC0xMHBjdDogdmFyKC0tbHVtby10aW50LTEwcGN0KTtcbiAgICAgICAgLS1sdW1vLWNvbnRyYXN0LTIwcGN0OiB2YXIoLS1sdW1vLXRpbnQtMjBwY3QpO1xuICAgICAgICAtLWx1bW8tY29udHJhc3QtMzBwY3Q6IHZhcigtLWx1bW8tdGludC0zMHBjdCk7XG4gICAgICAgIC0tbHVtby1jb250cmFzdC00MHBjdDogdmFyKC0tbHVtby10aW50LTQwcGN0KTtcbiAgICAgICAgLS1sdW1vLWNvbnRyYXN0LTUwcGN0OiB2YXIoLS1sdW1vLXRpbnQtNTBwY3QpO1xuICAgICAgICAtLWx1bW8tY29udHJhc3QtNjBwY3Q6IHZhcigtLWx1bW8tdGludC02MHBjdCk7XG4gICAgICAgIC0tbHVtby1jb250cmFzdC03MHBjdDogdmFyKC0tbHVtby10aW50LTcwcGN0KTtcbiAgICAgICAgLS1sdW1vLWNvbnRyYXN0LTgwcGN0OiB2YXIoLS1sdW1vLXRpbnQtODBwY3QpO1xuICAgICAgICAtLWx1bW8tY29udHJhc3QtOTBwY3Q6IHZhcigtLWx1bW8tdGludC05MHBjdCk7XG4gICAgICAgIC0tbHVtby1jb250cmFzdDogdmFyKC0tbHVtby10aW50KTtcblxuICAgICAgICAvKiBUZXh0ICovXG4gICAgICAgIC0tbHVtby1oZWFkZXItdGV4dC1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdCk7XG4gICAgICAgIC0tbHVtby1ib2R5LXRleHQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtOTBwY3QpO1xuICAgICAgICAtLWx1bW8tc2Vjb25kYXJ5LXRleHQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtNzBwY3QpO1xuICAgICAgICAtLWx1bW8tdGVydGlhcnktdGV4dC1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdC01MHBjdCk7XG4gICAgICAgIC0tbHVtby1kaXNhYmxlZC10ZXh0LWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTMwcGN0KTtcblxuICAgICAgICAvKiBQcmltYXJ5ICovXG4gICAgICAgIC0tbHVtby1wcmltYXJ5LWNvbG9yOiBoc2woMjE0LCA4NiUsIDU1JSk7XG4gICAgICAgIC0tbHVtby1wcmltYXJ5LWNvbG9yLTUwcGN0OiBoc2xhKDIxNCwgODYlLCA1NSUsIDAuNSk7XG4gICAgICAgIC0tbHVtby1wcmltYXJ5LWNvbG9yLTEwcGN0OiBoc2xhKDIxNCwgOTAlLCA2MyUsIDAuMSk7XG4gICAgICAgIC0tbHVtby1wcmltYXJ5LXRleHQtY29sb3I6IGhzbCgyMTQsIDEwMCUsIDcwJSk7XG4gICAgICAgIC0tbHVtby1wcmltYXJ5LWNvbnRyYXN0LWNvbG9yOiAjRkZGO1xuXG4gICAgICAgIC8qIEVycm9yICovXG4gICAgICAgIC0tbHVtby1lcnJvci1jb2xvcjogaHNsKDMsIDkwJSwgNjMlKTtcbiAgICAgICAgLS1sdW1vLWVycm9yLWNvbG9yLTUwcGN0OiBoc2xhKDMsIDkwJSwgNjMlLCAwLjUpO1xuICAgICAgICAtLWx1bW8tZXJyb3ItY29sb3ItMTBwY3Q6IGhzbGEoMywgOTAlLCA2MyUsIDAuMSk7XG4gICAgICAgIC0tbHVtby1lcnJvci10ZXh0LWNvbG9yOiBoc2woMywgMTAwJSwgNjclKTtcblxuICAgICAgICAvKiBTdWNjZXNzICovXG4gICAgICAgIC0tbHVtby1zdWNjZXNzLWNvbG9yOiBoc2woMTQ1LCA2NSUsIDQyJSk7XG4gICAgICAgIC0tbHVtby1zdWNjZXNzLWNvbG9yLTUwcGN0OiBoc2xhKDE0NSwgNjUlLCA0MiUsIDAuNSk7XG4gICAgICAgIC0tbHVtby1zdWNjZXNzLWNvbG9yLTEwcGN0OiBoc2xhKDE0NSwgNjUlLCA0MiUsIDAuMSk7XG4gICAgICAgIC0tbHVtby1zdWNjZXNzLXRleHQtY29sb3I6IGhzbCgxNDUsIDg1JSwgNDclKTtcbiAgICAgIH1cblxuICAgICAgaHRtbCB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1sdW1vLWJvZHktdGV4dC1jb2xvcik7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tYmFzZS1jb2xvcik7XG4gICAgICB9XG5cbiAgICAgIFt0aGVtZX49ImRhcmsiXSB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1sdW1vLWJvZHktdGV4dC1jb2xvcik7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tYmFzZS1jb2xvcik7XG4gICAgICB9XG5cbiAgICAgIGgxLFxuICAgICAgaDIsXG4gICAgICBoMyxcbiAgICAgIGg0LFxuICAgICAgaDUsXG4gICAgICBoNiB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1sdW1vLWhlYWRlci10ZXh0LWNvbG9yKTtcbiAgICAgIH1cblxuICAgICAgYSB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1sdW1vLXByaW1hcnktdGV4dC1jb2xvcik7XG4gICAgICB9XG5cbiAgICAgIGJsb2NrcXVvdGUge1xuICAgICAgICBjb2xvcjogdmFyKC0tbHVtby1zZWNvbmRhcnktdGV4dC1jb2xvcik7XG4gICAgICB9XG5cbiAgICAgIGNvZGUsXG4gICAgICBwcmUge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTEwcGN0KTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbHVtby1ib3JkZXItcmFkaXVzLW0pO1xuICAgICAgfVxuICAgIDwvc3R5bGU+XG4gIDwvdGVtcGxhdGU+XG48L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9Imx1bW8tY29sb3ItbGVnYWN5Ij5cbiAgPHRlbXBsYXRlPlxuICAgIDxzdHlsZSBpbmNsdWRlPSJsdW1vLWNvbG9yIj5cbiAgICAgIDpob3N0IHtcbiAgICAgICAgY29sb3I6IHZhcigtLWx1bW8tYm9keS10ZXh0LWNvbG9yKSAhaW1wb3J0YW50O1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLWJhc2UtY29sb3IpICFpbXBvcnRhbnQ7XG4gICAgICB9XG4gICAgPC9zdHlsZT5cbiAgPC90ZW1wbGF0ZT5cbjwvZG9tLW1vZHVsZT4nLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoQlB0LmNvbnRlbnQpO2NvbnN0IEhQdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO0hQdC5pbm5lckhUTUw9JzxjdXN0b20tc3R5bGU+XG4gIDxzdHlsZT5cbiAgICBAZm9udC1mYWNlIHtcbiAgICAgIGZvbnQtZmFtaWx5OiBcJ2x1bW8taWNvbnNcJztcbiAgICAgIHNyYzogdXJsKGRhdGE6YXBwbGljYXRpb24vZm9udC13b2ZmO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdSZ0FCQUFBQUFCRWNBQXNBQUFBQUlpd0FBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCSFUxVkNBQUFCQ0FBQUFEc0FBQUJVSUlzbGVrOVRMeklBQUFGRUFBQUFRd0FBQUZaQUlVdUtZMjFoY0FBQUFZZ0FBQUQ0QUFBRHJzQ1U4ZDVuYkhsbUFBQUNnQUFBQzJNQUFCZDRoOVRvMldobFlXUUFBQTNrQUFBQU1BQUFBRFphLzZTc2FHaGxZUUFBRGhRQUFBQWRBQUFBSkFicEEzNW9iWFI0QUFBT05BQUFBQkFBQUFDc3BCQUFBR3h2WTJFQUFBNUVBQUFBV0FBQUFGaDU1SUFzYldGNGNBQUFEcHdBQUFBZkFBQUFJQUZLQVhCdVlXMWxBQUFPdkFBQUFURUFBQUl1VVVKWkNIQnZjM1FBQUEvd0FBQUJLd0FBQWVsbThTelZlSnhqWUdSZ1lPQmlNR0N3WTJCeWNmTUpZZURMU1N6Slk1QmlZR0dBQUpBOE1wc3hKek05a1lFRHhnUEtzWUJwRGlCbWc0Z0NBQ1k3QlVnQWVKeGpZR1MreURpQmdaV0JnYW1LYVE4REEwTVBoR1o4d0dESXlBUVVaV0JsWnNBS0F0SmNVeGdjWGpHKzBtSU8rcC9GRU1VY3hEQU5LTXdJa2dNQUJuOE1MUUI0bk8zU1dXNkRNQUJGMFV0d0NFbklQTS96aExLOExxaGZYUnliU1AxNFhVWXRIVjloR1lRd1FCTklvM2NVSVBraFFlTTdyaWIxZWtxblhnOTgxWHVDMXF2eTg0bHpvamxlaDNwdXhMMGhQakdqUlU0NzN0ZWxvRWVmQVVOR2pKa3daY2FjQlV0V3JObXdaY2VlQTBkT25MbHc1Y2FkQjA5ZWxQR2hHZitqME5USS82NUtmWGVyVDZKaHFLbnBSS3RnT3B1cWFUcnRLalBVbHFIbWh0bzIxSTdwTDZpNmhscVkzcTdxR1dyZlVBZUdPalRVa2FHT0RYVmlxRk5EblJucTNGQVhocm8wMUpXaHJnMTFZNmhiUTkwWjZ0NVFENFo2Tk5TVG9aNE45V0tvVjBPOUdlcmRVQitHK2pUVWw2R1dSdmtMMjRCa0VYaWN0Vmg5YkZ2VkZiL254dmJ6KzdSZi9ONnpIY2QyYkNmUCtXZ2MxWjlOMGpwTm5FTDZrYlJWUzZIQTJoUVlHaDlUR1IxQ2JDcWEyclhyV09rUUUvc0hOSmdtdFp2b1ZOWnFFMUIxRE5IeHpUUXhDZWhVVFlpSlRReUVOdWkwcVNMZXpyM1BkdXlRZmdtUldPZmRlOCs5NTUxejdybm4vTzRqTG9KL2JSUDBVYUtRTUxGSmpwQkF2cGhMWkMzRGswb2s3V0J6UjIvdXBKczdSeXcvbmZGYmxuL3V1Ti9hcEN2d3JLTHJTdlVxUnVmYm01cG4wZnMwdzRnWXhuR1ZQNnFIbk80YldpRFFHUWd3dFM2bG0zbEIzUW9YMU0ydndFbXV6aXJGMzl5K0VzMitESjhkMXBreXFCSXFvemUzRDErWno0RHJGb2F6eEk4ZFd3TXJEbFoyRE1xUUFSOUFST3NKVSsyY21sVFBhelRjbzUyRjF4VGEyYTIrSzh2dnE5MmRWSG10TG9QZVFYL0FaUFJZR3RoRFlPZVpqQmpLb0ZzVkd1bFIzbFdVOTVXZUNLNDRxSFU3TWhXVUdVS1pEVDNvS1VjRzJHV3VoK0VERGZVWUEvamhBaGwwVE9zSk5ZU0V1N21RbWkzVXpmWHdaS0E0QnNWc0hMWFFZR2dSVzk1dUV0cEoxVmZuOVhpTHJpUkJsRkVxeHNEakEwOXlDTlVvUXh4d2Q3S1dTVHQyeTNHVEtpZmxxSFJTb1daYzNtMTFXYS9mSmRGZ1hENHNTWWZsZUpCS2Q4R016N0o4ZFpuL2NHUkNjS0dEbkEyR2UzZkt6Y3ZsblRETnRoR1dMWHpYL1dhWHRVQW1SZ2VMbEhTcjMwcjBHOVVUWE1iMEF0bXd6T295NzNma1NsSFprZHV3L1RZdVU5Y0FENFl1dFBveFRUc0EzNzk3d1ZyNFovMU5DNXpBUkhyNHZ0eEpqeElmaVpNaE1rYldrKzE0Qm5KWkt3cUdad0Rmc3dMeXhXRFNnMTFyRkxKRjdOb3B4amQxaDEvUU9UK29lemdmdTNZcStIaytkdWY1eCs0MG8xR1RrYUlnaWtLL0lFbkM2YVl4Q1VCYVpKU040WFRZRmpVL1lNTklLcUp3aERHT0NDSThGRFhuWG1YanRHaEdKeVNocWpBT25CT2tXMkpHOVM3R2dZZU1XQVU1SnpobldtQk9hT00rQ0tFUG9xU2ZGREMyVW5xK0RMbFVnVVZVRkZMWkdKZzZqdGxvanNkc2E4a1BPYlB1SmRpNWRuQmRCc0xKTUdUV0RhNHQySnZ0d3VQbzlzK1k4NnN1di9XMzNRRzFyQWFPQVVWK3Z4NEs2ZjJEMDRQVktsQzdXTFNyWnpBaTQ1WlY2bElDN1dvWHFtUnl2VXFvVndyelVvVnNJamVUWFdRditSSDVHVGxCWGlCL0luOGxuMEliQkNBRk9hakFKcmdaWXlPSFdxT2ZVZS9hSGpJMTJSNk9RbzFqQ2d0MjE1bCs0ZjZYUGIrME1Ob3UwVis0M24yRjc3dFNmUmIyNGQ3eml0Z25LbXZZSHM2OXp1Z2FQdkJ3djZpb1hrYjJMZEw2NUF0dzUxdUxrWGx1MWJoTU1SY1hTUGNZb3FLSVJsaDM0bFFQOC81SmJ1VUZ5ZTR2eEQ2LzZNeEZGMTFDMHVWTHI5VWxndzQ0dFMzcE1WaU5MVUV4YnljRmdMSWN0K1FETWliUmlteDF5ZFV6OEZYWml1T0lEQk9NVlgyblVaYytodU5FNVhVSjgxdWlKb2lhYndxYVZGMHVhY0tiYXUvcGw0UjJWVzBYWGxKcmE2Ym9WcllHNjQ2VEY1Tll6d3k0dmpFTlZyRGxjTnBaUGw4REg2WFg4WFdDeDBtdldWWlk2S0ZMcnZzWTY2L3pQaWN0NUZueGFOVVIvanV2WkNNM1R2RDYwRTJXMXRaaXpiWFRQRHVhYmNtMG5iYnpwV0twbUExYXlCUThnaWVkTFVNK0Ewa05qQmpRam11WXo3WXJnSVhZdm1GNjNaTEJ3U1hycG45VGI5d3dkZC9VMUgwUE1RSzNYY084dWwzV1Q3UHlQUGRweTBUZW1LeE5SY0pOYXVpWEpublVEcFVwcFFXczRTblVJeTBFRVNHWXFKWVFMR0h4emFHV3dWSWFTNlk3bVFGTThaallEUTNheGpmNjFTV2pVMzNKd09aQTFwd2FHMUw5bXpmNzFhSFJkWDFKSHc2RnAwYVhoTndicXllR05nNE5iZHpHQ0J4b3o0WlhqeTROdTY5WnI2c0RZNnZNckxVNW5BMVA4SmtiZFdYSjZFUmZNcnl2TmgxSmZROStUNGRJaEd2Szl3M2R4akJCemF0c1EvTWxPSFZJRG5ZcER6Nm9kQVhsUTAxdDJQYTVJYWZkOE1NcHhBZURLUDBDNkNqZ1ZMVDVvc0I2aWNVeDAxbFdqWHh6VC9HeVJGMndlbEVNNVovN2pHM1ZqUTFTck5uNUlieXpPRzVkb2JCMy9RSHh5WnZzWGNvejhJb0V3UzdwbENnK3p4SFFrNDI0cTlCZkVwa0VTSmJGSFF1c0RCU1dGa3VCa29QTzBrTEt3UlZZanhHWGxIVGNURFFNSi9INlRYOWFma083bW5yYVRPMWZlVG5aQVhMdTRjcDdIQVhNbU5HMXllRms5VGdTL05IaFpSLzRRb0JUci9aQis2aENneWwxNU5xMVViTjZuRTEvWm5QMVUyY2l6Q0JwdnM4Y0pRWko0TGtZeDVOL3laUEFVWk5RUTBWNGYzQlFsbFdySzNZUnpsMzBkT1Q2UlZuMnVwTnVyNndvU2E4Q3FwZFQvYUtuQk00bzNqTnVyOWQ5eHF0VVQ2dmVCRXQ5Q2E5YXQrRVJ6RUVoVWtSOHNhNW1RNGFWdkpvVmVFQTh6STRlaTVtVUxYRkd5VTd6LzZUQWVZTFZjcHpTV1pZOFBZWUY1eXJUVjYwc1QwK1hWMTQxdlgrK1dmMTZWMmJGZUdWUFpYeEZwa3Z5ZUtUV0xsemZXMG1uS3hzWTZZMzI5NC8wOTk4U0NmWDFibG01cGJjdkZHbHEvcjA3TVJBTWhZSURpVzVKRktXVzN2ZHJFcENzWlNKRytvbTdadS9QU1NjWkpoTmtMYm1XNVdzcjEycFdxVzV6S3Rsd1JTNGJGT3hVdzE3bUN6eTZsc2tDRGwxV1lPR1dEWXJBRHJNQTdCRER3ZVdXTmQ1a29pSm5SMWR6K3l0TFAycTBTcVBCMWxuSzJjY0I3UlllNEZTb1BrczNpQjN0NHR4VFNIY3RiMnN5MWl2azBwdkh1Q05tNncxZjZ3eHYzK09DZ043OExxZFFuVVZoN1Iwb1RBcDB6T2YycmJXNzcwVnU1QzJkSXlHZFRuSG84elNqaTdkcHBqMFVTb1ZDeitsaFJNVGg1M1RlcTlWYkdmYmp1U2JBb29TZFhheVk0UFlIZzM3NEM2ZjdnbDFCL0RYdUo0L1FYeE9CZEpGSnNwRnNJM2VncG9XVVVDamxUSUZuTllObCtaeVpLbUJlWUtHSGtEMVF5RGxoYUtiS3dLY0lKcUo0VExKMk9tZFkvSldYYWU0RGRHQnc4SFo3ZVhjZ0ZGMnpyMlNvYWxEcnk1aUtxb2EwUHVoZTNoUFEyczNlbFRZTStNSStuM3JLMEtnTDcvTGEzR2VNTHQ2bTd1OTEydkdudnRPUmlJYTBxQm1ocVZpK1hXOVhOQm1xYjhlVmdLeklIZkdJNWJOb0c3WDBVQ3plSVNtcUljTy9uWThGSDdVOGF2WDlmeC9TVCtoeDBzZXpQdzlReThNdW0zR1dmMk40VXkveUlZR1ZCWGJKSFdJWnA3ZGZUY3B0ZE1UcjlRbXE3RGFpSy91a3FDTDRrdDRSVWZTNVhQbk10bVQyMi9tUUZxRjdlbVNxdHJsdThTVkVseERSSnJaT0RrcHV3ZTBWZlRmamRFcDFmN0E3ditmb3pOQlhVSi82V1R1SzJUdEZscEZWWkFaM0xjRnZVaTFaMnAyWVQrRU1Ba0dKVlN0T3pMVEFQZzRJcVdJQWx6UlNqT0JrbDJ6eGozVEt5Y3B6VC9NbnZYM3VhU01XTStnVTBya1hqb2hoZWZWUk1hcHMzL2tMTVNLdjIzbFQyM3V4UXJrUWp5T0psZU1Ec2RoQW5ENlpHRWxXWjVNakNYekNFL2hrV1grV0Y0a256R2hWT3lLMmVRWmVrVjNleW8wekw4a3VZV0NuREN2ampoQWtjVFBPQkRYVmRvYXYzSFZjRm5Rakx2dFY5UzJwMHpBNkplZ1B3TVF4dCt5RmIzbGw5ekdscS81ZFJLYjNjRXlRWW9hTllwaGFySjd4Q0I3QVd4c0xZM2pqWlhZMFhzWmowV2p3YzlJNlBQL2RLQUJuQ1phcUhwYVpFQUN4azRaZUxaU0tOZ1pBQmwrbFlRWDFzSlFPU1gzbjZyNDEwZXZjb3VkNUplQUdVWFZQOUgxdFpPS2VqVHE0T25vMHowZXJybzFGcm5PcG9odmExZC9oVGR0VnNRZEtONVc5UmxUM05qRDBuem55S05UZ0tBTWZXTldjeW9kVjBJR0xQSUhPRjBvNEp5cXVmYUs0ejZXSUl6dUdoM2Q4Yzhjd1FnOEVSK09WeHlyamRtOHZOdWh0czRMb09paEd4SU11VWRnendpWU43eGhoMStvWm5KTnVURzdnUVp2dTRYV1o5R0FaWmpHRXVid2VQcVlodEtEVEgrOVZRa2wxNy9pR3lic25KKzgrc0t0eVByY2xsOXR5NjVac2RzdC85aXFwRUtoN001VmRCeGgzY3NPZE5jNnRXM0kxdXlNMVB6T1hlZ1NPckxGc0ZOSTJPMjdNK1RGMkFwbk45TVV2NXVkNkxqeEl2RVFuSFJ6eEl1NElzQTlNTEZrSm4ydGNab1o3T043ZFhlN3VqcmM4SHJ1c1BLYW1scVh3ZDc3bFFVdUxwaWxhdTRQVU1hcHVlQmI3aXJVNFJvVVhFWVh1VnVJR2xSR21PcCsybE5rYVJQVnppT3FtbGFadmFxRzRkRmdTajBqeEVKV3J2MTJJVVdudG13K3JmUWFyUkUwQXBoNG9jSTZubFVsR3FzK3UzLytUL2V0aFc2MlBwSHAyZUhiWnN0bmgvd09POTV5REFIaWNZMkJrWUdBQTRwbUo2UUh4L0RaZkdiaVpYd0JGR0dwVU56UWk2UCt2bWFjeTNRSnlPUmlZUUtJQU5vVUxWWGljWTJCa1lHQU8rcDhGSkY4d0FBSHpWQVpHQmxTZ0RRQlc5Z052QUFBQWVKeGpZR0JnWUg0eE5EQUF6d1FtandBQUFBQUFUZ0NhQU9nQkNnRXNBVTRCY0FHYUFjUUI3Z0lhQXB3QzZBU2FCTHdFMWdUeUJRNEZLZ1Y2QmRBRi9nWkVCbVlHdGdjWUI1QUlHQWhTQ0dvSS9nbEdDYjRKMmdvRUNqd0tnZ3E0Q3ZBTFVBdVdDN3g0bkdOZ1pHQmcwR1pNWVJCbEFBRW1JT1lDUWdhRy8yQStBd0FZbEFHOEFIaWNiWkU5VHNNd0dJYmY5QS9SU2dnRVltSHhBZ3RxK2pOMlpHajNEdDNUMUdsVE9YSGt1Qlc5QXlmZ0VCeUNnVE53Q0E3QlcvTkpsVkJ0eWQvangrOFhLd21BYTN3aHduRkU2SWIxT0JxNDRPNlBtNlFiNFJiNVFiaU5IaDZGTy9SRDRTNmVNUkh1NFJhYVQ0aGFselIzZUJWdTRBcHZ3azM2ZCtFVytVTzRqWHQ4Q25mb3Y0VzdXT0JIdUllbjZNWHNDdHZQVTF2V2M3M2VtY1NkeElrVzJ0VzVMZFVvSHA3a1RKZmFKVjZ2MVBLZzZ2MTY3SDJtTW1jTE5iV2wxOFpZVlRtNzFhbVBOOTVYazhFZ0V4K250b0RCRGdVcytzaVJzcGFvTWVmN3J1a05Fcml6aVhOdXdTN0htb2U5d2dneHYrZTU1SXpKTXFRVGVOWVYwMHNjdU5iWTgrWXhyVWZHZmNhTVpiL0NOUFFlMDRiVDBsVGhiRXVUMHNmWWhLNksvMjNBbWYzTHgrSDI0aGNqNEdTY0FBQUFlSnh0anRsdWd6QVFSYmtKVUVKSXV1Lzd2cVI4bEdOUEFjV3gwWUFiNWUvTGtsUjk2RWdlblN1ZkdZMDM4UHFLdmY5cmhnR0c4QkVneEE0aWpCQmpqQVFUVExHTFBlempBSWM0d2pGT2NJb3puT01DbDdqQ05XNXdpenZjNHdHUGVNSXpYdkNLTjd6akF6Tjhlb25RUldaU1NhWW1qdnVnNmFzZTk4aEZsdGV4TUptbVZObVYyV0J2ZE5nWlVjK3VqQVd6WFczVURudTF3NDNhc1N0SGM4R3B6QVhYL3B5MGpxVFFaSlRna2N4SkxwYUNGMGxEMzJ4TnQrNDN0QXNuMjlEZnQwMnVES1MyY2pHVU5nc2syNnFLMmxGdGhZb1UyN0lOUHFtaURxZzVnb2UwcHFSNXFTb3FNZGVrL0NVWkZ5d0w0NnJFc2lJbWxlcWlxb015dDRiYVhsdS8xR0xkTkZmNXpiY05tZHIxWVVXQ1plNDdvK3pVbWIvRG9TdGJ3M2NWc2VmOUFMamppUFFBKSBmb3JtYXQoXCd3b2ZmXCcpO1xuICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICB9XG5cbiAgICBodG1sIHtcbiAgICAgIC0tbHVtby1pY29ucy1hbGlnbi1jZW50ZXI6ICJcXGVhMDEiO1xuICAgICAgLS1sdW1vLWljb25zLWFsaWduLWxlZnQ6ICJcXGVhMDIiO1xuICAgICAgLS1sdW1vLWljb25zLWFsaWduLXJpZ2h0OiAiXFxlYTAzIjtcbiAgICAgIC0tbHVtby1pY29ucy1hbmdsZS1kb3duOiAiXFxlYTA0IjtcbiAgICAgIC0tbHVtby1pY29ucy1hbmdsZS1sZWZ0OiAiXFxlYTA1IjtcbiAgICAgIC0tbHVtby1pY29ucy1hbmdsZS1yaWdodDogIlxcZWEwNiI7XG4gICAgICAtLWx1bW8taWNvbnMtYW5nbGUtdXA6ICJcXGVhMDciO1xuICAgICAgLS1sdW1vLWljb25zLWFycm93LWRvd246ICJcXGVhMDgiO1xuICAgICAgLS1sdW1vLWljb25zLWFycm93LWxlZnQ6ICJcXGVhMDkiO1xuICAgICAgLS1sdW1vLWljb25zLWFycm93LXJpZ2h0OiAiXFxlYTBhIjtcbiAgICAgIC0tbHVtby1pY29ucy1hcnJvdy11cDogIlxcZWEwYiI7XG4gICAgICAtLWx1bW8taWNvbnMtYmFyLWNoYXJ0OiAiXFxlYTBjIjtcbiAgICAgIC0tbHVtby1pY29ucy1iZWxsOiAiXFxlYTBkIjtcbiAgICAgIC0tbHVtby1pY29ucy1jYWxlbmRhcjogIlxcZWEwZSI7XG4gICAgICAtLWx1bW8taWNvbnMtY2hlY2ttYXJrOiAiXFxlYTBmIjtcbiAgICAgIC0tbHVtby1pY29ucy1jaGV2cm9uLWRvd246ICJcXGVhMTAiO1xuICAgICAgLS1sdW1vLWljb25zLWNoZXZyb24tbGVmdDogIlxcZWExMSI7XG4gICAgICAtLWx1bW8taWNvbnMtY2hldnJvbi1yaWdodDogIlxcZWExMiI7XG4gICAgICAtLWx1bW8taWNvbnMtY2hldnJvbi11cDogIlxcZWExMyI7XG4gICAgICAtLWx1bW8taWNvbnMtY2xvY2s6ICJcXGVhMTQiO1xuICAgICAgLS1sdW1vLWljb25zLWNvZzogIlxcZWExNSI7XG4gICAgICAtLWx1bW8taWNvbnMtY3Jvc3M6ICJcXGVhMTYiO1xuICAgICAgLS1sdW1vLWljb25zLWRvd25sb2FkOiAiXFxlYTE3IjtcbiAgICAgIC0tbHVtby1pY29ucy1kcm9wZG93bjogIlxcZWExOCI7XG4gICAgICAtLWx1bW8taWNvbnMtZWRpdDogIlxcZWExOSI7XG4gICAgICAtLWx1bW8taWNvbnMtZXJyb3I6ICJcXGVhMWEiO1xuICAgICAgLS1sdW1vLWljb25zLWV5ZTogIlxcZWExYiI7XG4gICAgICAtLWx1bW8taWNvbnMtZXllLWRpc2FibGVkOiAiXFxlYTFjIjtcbiAgICAgIC0tbHVtby1pY29ucy1tZW51OiAiXFxlYTFkIjtcbiAgICAgIC0tbHVtby1pY29ucy1taW51czogIlxcZWExZSI7XG4gICAgICAtLWx1bW8taWNvbnMtb3JkZXJlZC1saXN0OiAiXFxlYTFmIjtcbiAgICAgIC0tbHVtby1pY29ucy1waG9uZTogIlxcZWEyMCI7XG4gICAgICAtLWx1bW8taWNvbnMtcGhvdG86ICJcXGVhMjEiO1xuICAgICAgLS1sdW1vLWljb25zLXBsYXk6ICJcXGVhMjIiO1xuICAgICAgLS1sdW1vLWljb25zLXBsdXM6ICJcXGVhMjMiO1xuICAgICAgLS1sdW1vLWljb25zLXJlZG86ICJcXGVhMjQiO1xuICAgICAgLS1sdW1vLWljb25zLXJlbG9hZDogIlxcZWEyNSI7XG4gICAgICAtLWx1bW8taWNvbnMtc2VhcmNoOiAiXFxlYTI2IjtcbiAgICAgIC0tbHVtby1pY29ucy11bmRvOiAiXFxlYTI3IjtcbiAgICAgIC0tbHVtby1pY29ucy11bm9yZGVyZWQtbGlzdDogIlxcZWEyOCI7XG4gICAgICAtLWx1bW8taWNvbnMtdXBsb2FkOiAiXFxlYTI5IjtcbiAgICAgIC0tbHVtby1pY29ucy11c2VyOiAiXFxlYTJhIjtcbiAgICB9XG4gIDwvc3R5bGU+XG48L2N1c3RvbS1zdHlsZT4nLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoSFB0LmNvbnRlbnQpO2NvbnN0IEZQdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO0ZQdC5pbm5lckhUTUw9IjxjdXN0b20tc3R5bGU+XG4gIDxzdHlsZT5cbiAgICBodG1sIHtcbiAgICAgIC0tbHVtby1zaXplLXhzOiAxLjYyNXJlbTtcbiAgICAgIC0tbHVtby1zaXplLXM6IDEuODc1cmVtO1xuICAgICAgLS1sdW1vLXNpemUtbTogMi4yNXJlbTtcbiAgICAgIC0tbHVtby1zaXplLWw6IDIuNzVyZW07XG4gICAgICAtLWx1bW8tc2l6ZS14bDogMy41cmVtO1xuXG4gICAgICAvKiBJY29ucyAqL1xuICAgICAgLS1sdW1vLWljb24tc2l6ZS1zOiAxLjI1ZW07XG4gICAgICAtLWx1bW8taWNvbi1zaXplLW06IDEuNWVtO1xuICAgICAgLS1sdW1vLWljb24tc2l6ZS1sOiAyLjI1ZW07XG4gICAgICAvKiBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgKi9cbiAgICAgIC0tbHVtby1pY29uLXNpemU6IHZhcigtLWx1bW8taWNvbi1zaXplLW0pO1xuICAgIH1cbiAgPC9zdHlsZT5cbjwvY3VzdG9tLXN0eWxlPiIsZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChGUHQuY29udGVudCk7Y29uc3QgVlB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7VlB0LmlubmVySFRNTD0iPGN1c3RvbS1zdHlsZT5cbiAgPHN0eWxlPlxuICAgIGh0bWwge1xuICAgICAgLyogU3F1YXJlICovXG4gICAgICAtLWx1bW8tc3BhY2UteHM6IDAuMjVyZW07XG4gICAgICAtLWx1bW8tc3BhY2UtczogMC41cmVtO1xuICAgICAgLS1sdW1vLXNwYWNlLW06IDFyZW07XG4gICAgICAtLWx1bW8tc3BhY2UtbDogMS41cmVtO1xuICAgICAgLS1sdW1vLXNwYWNlLXhsOiAyLjVyZW07XG5cbiAgICAgIC8qIFdpZGUgKi9cbiAgICAgIC0tbHVtby1zcGFjZS13aWRlLXhzOiBjYWxjKHZhcigtLWx1bW8tc3BhY2UteHMpIC8gMikgdmFyKC0tbHVtby1zcGFjZS14cyk7XG4gICAgICAtLWx1bW8tc3BhY2Utd2lkZS1zOiBjYWxjKHZhcigtLWx1bW8tc3BhY2UtcykgLyAyKSB2YXIoLS1sdW1vLXNwYWNlLXMpO1xuICAgICAgLS1sdW1vLXNwYWNlLXdpZGUtbTogY2FsYyh2YXIoLS1sdW1vLXNwYWNlLW0pIC8gMikgdmFyKC0tbHVtby1zcGFjZS1tKTtcbiAgICAgIC0tbHVtby1zcGFjZS13aWRlLWw6IGNhbGModmFyKC0tbHVtby1zcGFjZS1sKSAvIDIpIHZhcigtLWx1bW8tc3BhY2UtbCk7XG4gICAgICAtLWx1bW8tc3BhY2Utd2lkZS14bDogY2FsYyh2YXIoLS1sdW1vLXNwYWNlLXhsKSAvIDIpIHZhcigtLWx1bW8tc3BhY2UteGwpO1xuXG4gICAgICAvKiBUYWxsICovXG4gICAgICAtLWx1bW8tc3BhY2UtdGFsbC14czogdmFyKC0tbHVtby1zcGFjZS14cykgY2FsYyh2YXIoLS1sdW1vLXNwYWNlLXhzKSAvIDIpO1xuICAgICAgLS1sdW1vLXNwYWNlLXRhbGwtczogdmFyKC0tbHVtby1zcGFjZS1zKSBjYWxjKHZhcigtLWx1bW8tc3BhY2UtcykgLyAyKTtcbiAgICAgIC0tbHVtby1zcGFjZS10YWxsLW06IHZhcigtLWx1bW8tc3BhY2UtbSkgY2FsYyh2YXIoLS1sdW1vLXNwYWNlLW0pIC8gMik7XG4gICAgICAtLWx1bW8tc3BhY2UtdGFsbC1sOiB2YXIoLS1sdW1vLXNwYWNlLWwpIGNhbGModmFyKC0tbHVtby1zcGFjZS1sKSAvIDIpO1xuICAgICAgLS1sdW1vLXNwYWNlLXRhbGwteGw6IHZhcigtLWx1bW8tc3BhY2UteGwpIGNhbGModmFyKC0tbHVtby1zcGFjZS14bCkgLyAyKTtcbiAgICB9XG4gIDwvc3R5bGU+XG48L2N1c3RvbS1zdHlsZT4iLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoVlB0LmNvbnRlbnQpO2NvbnN0IFVQdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO1VQdC5pbm5lckhUTUw9IjxjdXN0b20tc3R5bGU+XG4gIDxzdHlsZT5cbiAgICBodG1sIHtcbiAgICAgIC8qIEJvcmRlciByYWRpdXMgKi9cbiAgICAgIC0tbHVtby1ib3JkZXItcmFkaXVzLXM6IDAuMjVlbTsgLyogQ2hlY2tib3gsIGJhZGdlLCBkYXRlLXBpY2tlciB5ZWFyIGluZGljYXRvciwgZXRjICovXG4gICAgICAtLWx1bW8tYm9yZGVyLXJhZGl1cy1tOiB2YXIoLS1sdW1vLWJvcmRlci1yYWRpdXMsIDAuMjVlbSk7IC8qIEJ1dHRvbiwgdGV4dCBmaWVsZCwgbWVudSBvdmVybGF5LCBldGMgKi9cbiAgICAgIC0tbHVtby1ib3JkZXItcmFkaXVzLWw6IDAuNWVtOyAvKiBEaWFsb2csIG5vdGlmaWNhdGlvbiwgZXRjICovXG4gICAgICAtLWx1bW8tYm9yZGVyLXJhZGl1czogMC4yNWVtOyAvKiBEZXByZWNhdGVkICovXG5cbiAgICAgIC8qIFNoYWRvdyAqL1xuICAgICAgLS1sdW1vLWJveC1zaGFkb3cteHM6IDAgMXB4IDRweCAtMXB4IHZhcigtLWx1bW8tc2hhZGUtNTBwY3QpO1xuICAgICAgLS1sdW1vLWJveC1zaGFkb3ctczogMCAycHggNHB4IC0xcHggdmFyKC0tbHVtby1zaGFkZS0yMHBjdCksIDAgM3B4IDEycHggLTFweCB2YXIoLS1sdW1vLXNoYWRlLTMwcGN0KTtcbiAgICAgIC0tbHVtby1ib3gtc2hhZG93LW06IDAgMnB4IDZweCAtMXB4IHZhcigtLWx1bW8tc2hhZGUtMjBwY3QpLCAwIDhweCAyNHB4IC00cHggdmFyKC0tbHVtby1zaGFkZS00MHBjdCk7XG4gICAgICAtLWx1bW8tYm94LXNoYWRvdy1sOiAwIDNweCAxOHB4IC0ycHggdmFyKC0tbHVtby1zaGFkZS0yMHBjdCksIDAgMTJweCA0OHB4IC02cHggdmFyKC0tbHVtby1zaGFkZS00MHBjdCk7XG4gICAgICAtLWx1bW8tYm94LXNoYWRvdy14bDogMCA0cHggMjRweCAtM3B4IHZhcigtLWx1bW8tc2hhZGUtMjBwY3QpLCAwIDE4cHggNjRweCAtOHB4IHZhcigtLWx1bW8tc2hhZGUtNDBwY3QpO1xuXG4gICAgICAvKiBDbGlja2FibGUgZWxlbWVudCBjdXJzb3IgKi9cbiAgICAgIC0tbHVtby1jbGlja2FibGUtY3Vyc29yOiBkZWZhdWx0O1xuICAgIH1cbiAgPC9zdHlsZT5cbjwvY3VzdG9tLXN0eWxlPiIsZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChVUHQuY29udGVudCk7Y29uc3QgalB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7alB0LmlubmVySFRNTD0nPGN1c3RvbS1zdHlsZT5cbiAgPHN0eWxlPlxuICAgIGh0bWwge1xuICAgICAgLyogRm9udCBmYW1pbGllcyAqL1xuICAgICAgLS1sdW1vLWZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICJSb2JvdG8iLCAiU2Vnb2UgVUkiLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmLCAiQXBwbGUgQ29sb3IgRW1vamkiLCAiU2Vnb2UgVUkgRW1vamkiLCAiU2Vnb2UgVUkgU3ltYm9sIjtcblxuICAgICAgLyogRm9udCBzaXplcyAqL1xuICAgICAgLS1sdW1vLWZvbnQtc2l6ZS14eHM6IC43NXJlbTtcbiAgICAgIC0tbHVtby1mb250LXNpemUteHM6IC44MTI1cmVtO1xuICAgICAgLS1sdW1vLWZvbnQtc2l6ZS1zOiAuODc1cmVtO1xuICAgICAgLS1sdW1vLWZvbnQtc2l6ZS1tOiAxcmVtO1xuICAgICAgLS1sdW1vLWZvbnQtc2l6ZS1sOiAxLjEyNXJlbTtcbiAgICAgIC0tbHVtby1mb250LXNpemUteGw6IDEuMzc1cmVtO1xuICAgICAgLS1sdW1vLWZvbnQtc2l6ZS14eGw6IDEuNzVyZW07XG4gICAgICAtLWx1bW8tZm9udC1zaXplLXh4eGw6IDIuNXJlbTtcblxuICAgICAgLyogTGluZSBoZWlnaHRzICovXG4gICAgICAtLWx1bW8tbGluZS1oZWlnaHQteHM6IDEuMjU7XG4gICAgICAtLWx1bW8tbGluZS1oZWlnaHQtczogMS4zNzU7XG4gICAgICAtLWx1bW8tbGluZS1oZWlnaHQtbTogMS42MjU7XG4gICAgfVxuXG4gIDwvc3R5bGU+XG48L2N1c3RvbS1zdHlsZT48ZG9tLW1vZHVsZSBpZD0ibHVtby10eXBvZ3JhcGh5Ij5cbiAgPHRlbXBsYXRlPlxuICAgIDxzdHlsZT5cbiAgICAgIGh0bWwge1xuICAgICAgICBmb250LWZhbWlseTogdmFyKC0tbHVtby1mb250LWZhbWlseSk7XG4gICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tbHVtby1mb250LXNpemUsIHZhcigtLWx1bW8tZm9udC1zaXplLW0pKTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IHZhcigtLWx1bW8tbGluZS1oZWlnaHQtbSk7XG4gICAgICAgIC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTtcbiAgICAgICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gICAgICAgIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XG4gICAgICB9XG5cbiAgICAgIC8qIENhbuKAmXQgY29tYmluZSB3aXRoIHRoZSBhYm92ZSBzZWxlY3RvciBiZWNhdXNlIHRoYXQgZG9lc27igJl0IHdvcmsgaW4gYnJvd3NlcnMgd2l0aG91dCBuYXRpdmUgc2hhZG93IGRvbSAqL1xuICAgICAgOmhvc3Qge1xuICAgICAgICBmb250LWZhbWlseTogdmFyKC0tbHVtby1mb250LWZhbWlseSk7XG4gICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tbHVtby1mb250LXNpemUsIHZhcigtLWx1bW8tZm9udC1zaXplLW0pKTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IHZhcigtLWx1bW8tbGluZS1oZWlnaHQtbSk7XG4gICAgICAgIC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTtcbiAgICAgICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gICAgICAgIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XG4gICAgICB9XG5cbiAgICAgIHNtYWxsLFxuICAgICAgW3RoZW1lfj0iZm9udC1zaXplLXMiXSB7XG4gICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tbHVtby1mb250LXNpemUtcyk7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1sdW1vLWxpbmUtaGVpZ2h0LXMpO1xuICAgICAgfVxuXG4gICAgICBbdGhlbWV+PSJmb250LXNpemUteHMiXSB7XG4gICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tbHVtby1mb250LXNpemUteHMpO1xuICAgICAgICBsaW5lLWhlaWdodDogdmFyKC0tbHVtby1saW5lLWhlaWdodC14cyk7XG4gICAgICB9XG5cbiAgICAgIGgxLFxuICAgICAgaDIsXG4gICAgICBoMyxcbiAgICAgIGg0LFxuICAgICAgaDUsXG4gICAgICBoNiB7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1sdW1vLWxpbmUtaGVpZ2h0LXhzKTtcbiAgICAgICAgbWFyZ2luLXRvcDogMS4yNWVtO1xuICAgICAgfVxuXG4gICAgICBoMSB7XG4gICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tbHVtby1mb250LXNpemUteHh4bCk7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDAuNzVlbTtcbiAgICAgIH1cblxuICAgICAgaDIge1xuICAgICAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLXh4bCk7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDAuNWVtO1xuICAgICAgfVxuXG4gICAgICBoMyB7XG4gICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tbHVtby1mb250LXNpemUteGwpO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAwLjVlbTtcbiAgICAgIH1cblxuICAgICAgaDQge1xuICAgICAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLWwpO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAwLjVlbTtcbiAgICAgIH1cblxuICAgICAgaDUge1xuICAgICAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLW0pO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAwLjI1ZW07XG4gICAgICB9XG5cbiAgICAgIGg2IHtcbiAgICAgICAgZm9udC1zaXplOiB2YXIoLS1sdW1vLWZvbnQtc2l6ZS14cyk7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjAzZW07XG4gICAgICB9XG5cbiAgICAgIHAsXG4gICAgICBibG9ja3F1b3RlIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMC41ZW07XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDAuNzVlbTtcbiAgICAgIH1cblxuICAgICAgYSB7XG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICAgIH1cblxuICAgICAgYTpob3ZlciB7XG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICAgICAgfVxuXG4gICAgICBociB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBhbGlnbi1zZWxmOiBzdHJldGNoO1xuICAgICAgICBoZWlnaHQ6IDFweDtcbiAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICBtYXJnaW46IHZhcigtLWx1bW8tc3BhY2UtcykgY2FsYyh2YXIoLS1sdW1vLWJvcmRlci1yYWRpdXMtbSkgLyAyKTtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdC0xMHBjdCk7XG4gICAgICB9XG5cbiAgICAgIGJsb2NrcXVvdGUge1xuICAgICAgICBib3JkZXItbGVmdDogMnB4IHNvbGlkIHZhcigtLWx1bW8tY29udHJhc3QtMzBwY3QpO1xuICAgICAgfVxuXG4gICAgICBiLFxuICAgICAgc3Ryb25nIHtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIH1cblxuICAgICAgLyogUlRMIHNwZWNpZmljIHN0eWxlcyAqL1xuXG4gICAgICBibG9ja3F1b3RlW2Rpcj0icnRsIl0ge1xuICAgICAgICBib3JkZXItbGVmdDogbm9uZTtcbiAgICAgICAgYm9yZGVyLXJpZ2h0OiAycHggc29saWQgdmFyKC0tbHVtby1jb250cmFzdC0zMHBjdCk7XG4gICAgICB9XG5cbiAgICA8L3N0eWxlPlxuICA8L3RlbXBsYXRlPlxuPC9kb20tbW9kdWxlPicsZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChqUHQuY29udGVudCk7Y29uc3QgR1B0PV9lYDxkb20tbW9kdWxlIGlkPSJsdW1vLWNoZWNrYm94IiB0aGVtZS1mb3I9InZhYWRpbi1jaGVja2JveCI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlIGluY2x1ZGU9Imx1bW8tY2hlY2tib3gtc3R5bGUgbHVtby1jaGVja2JveC1lZmZlY3RzIj4KICAgICAgLyogSUUxMSBvbmx5ICovCiAgICAgIDo6LW1zLWJhY2tkcm9wLAogICAgICBbcGFydD0iY2hlY2tib3giXSB7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJsdW1vLWNoZWNrYm94LXN0eWxlIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50OwogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIH0KCiAgICAgIFtwYXJ0PSJsYWJlbCJdOm5vdChbZW1wdHldKSB7CiAgICAgICAgbWFyZ2luOiAwLjE4NzVlbSAwLjg3NWVtIDAuMTg3NWVtIDAuMzc1ZW07CiAgICAgIH0KCiAgICAgIFtwYXJ0PSJjaGVja2JveCJdIHsKICAgICAgICB3aWR0aDogY2FsYygxZW0gKyAycHgpOwogICAgICAgIGhlaWdodDogY2FsYygxZW0gKyAycHgpOwogICAgICAgIG1hcmdpbjogMC4xODc1ZW07CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWx1bW8tYm9yZGVyLXJhZGl1cy1zKTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTIwcGN0KTsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4ycyBjdWJpYy1iZXppZXIoLjEyLCAuMzIsIC41NCwgMiksIGJhY2tncm91bmQtY29sb3IgMC4xNXM7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjsKICAgICAgfQoKICAgICAgOmhvc3QoW2luZGV0ZXJtaW5hdGVdKSBbcGFydD0iY2hlY2tib3giXSwKICAgICAgOmhvc3QoW2NoZWNrZWRdKSBbcGFydD0iY2hlY2tib3giXSB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1wcmltYXJ5LWNvbG9yKTsKICAgICAgfQoKICAgICAgLyogTmVlZGVkIHRvIGFsaWduIHRoZSBjaGVja2JveCBuaWNlbHkgb24gdGhlIGJhc2VsaW5lICovCiAgICAgIFtwYXJ0PSJjaGVja2JveCJdOjpiZWZvcmUgewogICAgICAgIGNvbnRlbnQ6ICJcXDIwMDMiOwogICAgICB9CgogICAgICAvKiBDaGVja21hcmsgKi8KICAgICAgW3BhcnQ9ImNoZWNrYm94Il06OmFmdGVyIHsKICAgICAgICBjb250ZW50OiAiIjsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgd2lkdGg6IDA7CiAgICAgICAgaGVpZ2h0OiAwOwogICAgICAgIGJvcmRlcjogMCBzb2xpZCB2YXIoLS1sdW1vLXByaW1hcnktY29udHJhc3QtY29sb3IpOwogICAgICAgIGJvcmRlci13aWR0aDogMC4xODc1ZW0gMCAwIDAuMTg3NWVtOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogMCAwOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDAuODEyNWVtOwogICAgICAgIGxlZnQ6IDAuNWVtOwogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC41NSkgcm90YXRlKC0xMzVkZWcpOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjaGVja2VkXSkgW3BhcnQ9ImNoZWNrYm94Il06OmFmdGVyIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgIHdpZHRoOiAwLjYyNWVtOwogICAgICAgIGhlaWdodDogMS4wNjI1ZW07CiAgICAgIH0KCiAgICAgIC8qIEluZGV0ZXJtaW5hdGUgY2hlY2ttYXJrICovCgogICAgICA6aG9zdChbaW5kZXRlcm1pbmF0ZV0pIFtwYXJ0PSJjaGVja2JveCJdOjphZnRlciB7CiAgICAgICAgdHJhbnNmb3JtOiBub25lOwogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgdG9wOiA0NSU7CiAgICAgICAgaGVpZ2h0OiAxMCU7CiAgICAgICAgbGVmdDogMjIlOwogICAgICAgIHJpZ2h0OiAyMiU7CiAgICAgICAgd2lkdGg6IGF1dG87CiAgICAgICAgYm9yZGVyOiAwOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tcHJpbWFyeS1jb250cmFzdC1jb2xvcik7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjI1czsKICAgICAgfQoKICAgICAgLyogRm9jdXMgcmluZyAqLwoKICAgICAgOmhvc3QoW2ZvY3VzLXJpbmddKSBbcGFydD0iY2hlY2tib3giXSB7CiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgM3B4IHZhcigtLWx1bW8tcHJpbWFyeS1jb2xvci01MHBjdCk7CiAgICAgIH0KCiAgICAgIC8qIERpc2FibGVkICovCgogICAgICA6aG9zdChbZGlzYWJsZWRdKSB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgY29sb3I6IHZhcigtLWx1bW8tZGlzYWJsZWQtdGV4dC1jb2xvcik7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIFtwYXJ0PSJsYWJlbCJdIDo6c2xvdHRlZCgqKSB7CiAgICAgICAgY29sb3I6IGluaGVyaXQ7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIFtwYXJ0PSJjaGVja2JveCJdIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTEwcGN0KTsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgW3BhcnQ9ImNoZWNrYm94Il06OmFmdGVyIHsKICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtMzBwY3QpOwogICAgICB9CgogICAgICA6aG9zdChbaW5kZXRlcm1pbmF0ZV1bZGlzYWJsZWRdKSBbcGFydD0iY2hlY2tib3giXTo6YWZ0ZXIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtMzBwY3QpOwogICAgICB9CgogICAgICAvKiBSVEwgc3BlY2lmaWMgc3R5bGVzICovCgogICAgICA6aG9zdChbZGlyPSJydGwiXSkgW3BhcnQ9ImxhYmVsIl06bm90KFtlbXB0eV0pIHsKICAgICAgICBtYXJnaW46IDAuMTg3NWVtIDAuMzc1ZW0gMC4xODc1ZW0gMC44NzVlbTsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9Imx1bW8tY2hlY2tib3gtZWZmZWN0cyI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICAvKiBUcmFuc2l0aW9uIHRoZSBjaGVja21hcmsgaWYgYWN0aXZhdGVkIHdpdGggdGhlIG1vdXNlIChkaXNhYmxlZCBmb3IgZ3JpZCBzZWxlY3QtYWxsIHRoaXMgd2F5KSAqLwogICAgICA6aG9zdCg6aG92ZXIpIFtwYXJ0PSJjaGVja2JveCJdOjphZnRlciB7CiAgICAgICAgdHJhbnNpdGlvbjogd2lkdGggMC4xcywgaGVpZ2h0IDAuMjVzOwogICAgICB9CgogICAgICAvKiBVc2VkIGZvciBhY3RpdmF0aW9uICJoYWxvIiAqLwogICAgICBbcGFydD0iY2hlY2tib3giXTo6YmVmb3JlIHsKICAgICAgICBjb2xvcjogdHJhbnNwYXJlbnQ7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBib3JkZXItcmFkaXVzOiBpbmhlcml0OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IGluaGVyaXQ7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjQpOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMXMsIG9wYWNpdHkgMC44czsKICAgICAgfQoKICAgICAgLyogSG92ZXIgKi8KCiAgICAgIDpob3N0KDpub3QoW2NoZWNrZWRdKTpub3QoW2luZGV0ZXJtaW5hdGVdKTpub3QoW2Rpc2FibGVkXSk6aG92ZXIpIFtwYXJ0PSJjaGVja2JveCJdIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTMwcGN0KTsKICAgICAgfQoKICAgICAgLyogRGlzYWJsZSBob3ZlciBmb3IgdG91Y2ggZGV2aWNlcyAqLwogICAgICBAbWVkaWEgKHBvaW50ZXI6IGNvYXJzZSkgewogICAgICAgIDpob3N0KDpub3QoW2NoZWNrZWRdKTpub3QoW2luZGV0ZXJtaW5hdGVdKTpub3QoW2Rpc2FibGVkXSk6aG92ZXIpIFtwYXJ0PSJjaGVja2JveCJdIHsKICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtMjBwY3QpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLyogQWN0aXZlICovCgogICAgICA6aG9zdChbYWN0aXZlXSkgW3BhcnQ9ImNoZWNrYm94Il0gewogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC45KTsKICAgICAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjA1czsKICAgICAgfQoKICAgICAgOmhvc3QoW2FjdGl2ZV1bY2hlY2tlZF0pIFtwYXJ0PSJjaGVja2JveCJdIHsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMSk7CiAgICAgIH0KCiAgICAgIDpob3N0KFthY3RpdmVdOm5vdChbY2hlY2tlZF0pKSBbcGFydD0iY2hlY2tib3giXTo6YmVmb3JlIHsKICAgICAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjAxcywgMC4wMXM7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwKTsKICAgICAgICBvcGFjaXR5OiAwLjQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChHUHQuY29udGVudCk7Y29uc3QgV1B0PXQ9PmNsYXNzIGV4dGVuZHMgdHtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57dGhlbWU6e3R5cGU6U3RyaW5nLHJlYWRPbmx5OiEwfX19YXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHQsZSxuKXtzdXBlci5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sodCxlLG4pLCJ0aGVtZSI9PT10JiZ0aGlzLl9zZXRUaGVtZShuKX19LHFQdD10PT5jbGFzcyBleHRlbmRzKFdQdCh0KSl7c3RhdGljIGZpbmFsaXplKCl7c3VwZXIuZmluYWxpemUoKTtjb25zdCB0PXRoaXMucHJvdG90eXBlLl90ZW1wbGF0ZSxlPXRoaXMudGVtcGxhdGUmJnRoaXMudGVtcGxhdGUucGFyZW50RWxlbWVudCYmdGhpcy50ZW1wbGF0ZS5wYXJlbnRFbGVtZW50LmlkPT09dGhpcy5pcyxuPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzLnByb3RvdHlwZSkuX3RlbXBsYXRlO24mJiFlJiZBcnJheS5mcm9tKG4uY29udGVudC5xdWVyeVNlbGVjdG9yQWxsKCJzdHlsZVtpbmNsdWRlXSIpKS5mb3JFYWNoKChlPT57dGhpcy5faW5jbHVkZVN0eWxlKGUuZ2V0QXR0cmlidXRlKCJpbmNsdWRlIiksdCl9KSksdGhpcy5faW5jbHVkZU1hdGNoaW5nVGhlbWVzKHQpfXN0YXRpYyBfaW5jbHVkZU1hdGNoaW5nVGhlbWVzKHQpe2NvbnN0IGU9Qi5wcm90b3R5cGUubW9kdWxlcztsZXQgbj0hMTtjb25zdCBpPXRoaXMuaXMrIi1kZWZhdWx0LXRoZW1lIjtPYmplY3Qua2V5cyhlKS5zb3J0KCgodCxlKT0+e2NvbnN0IG49MD09PXQuaW5kZXhPZigidmFhZGluLSIpLGk9MD09PWUuaW5kZXhPZigidmFhZGluLSIpLHI9WyJsdW1vLSIsIm1hdGVyaWFsLSJdLG89ci5maWx0ZXIoKGU9PjA9PT10LmluZGV4T2YoZSkpKS5sZW5ndGg+MCxhPXIuZmlsdGVyKCh0PT4wPT09ZS5pbmRleE9mKHQpKSkubGVuZ3RoPjA7cmV0dXJuIG4hPT1pP24/LTE6MTpvIT09YT9vPy0xOjE6MH0pKS5mb3JFYWNoKChyPT57aWYociE9PWkpe2NvbnN0IGk9ZVtyXS5nZXRBdHRyaWJ1dGUoInRoZW1lLWZvciIpO2kmJmkuc3BsaXQoIiAiKS5mb3JFYWNoKChlPT57bmV3IFJlZ0V4cCgiXiIrZS5zcGxpdCgiKiIpLmpvaW4oIi4qIikrIiQiKS50ZXN0KHRoaXMuaXMpJiYobj0hMCx0aGlzLl9pbmNsdWRlU3R5bGUocix0KSl9KSl9fSkpLCFuJiZlW2ldJiZ0aGlzLl9pbmNsdWRlU3R5bGUoaSx0KX1zdGF0aWMgX2luY2x1ZGVTdHlsZSh0LGUpe2lmKGUmJiFlLmNvbnRlbnQucXVlcnlTZWxlY3Rvcihgc3R5bGVbaW5jbHVkZT0iJHt0fSJdYCkpe2NvbnN0IG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtuLnNldEF0dHJpYnV0ZSgiaW5jbHVkZSIsdCksZS5jb250ZW50LmFwcGVuZENoaWxkKG4pfX19Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBWYWFkaW4gTHRkLgogICAgVGhpcyBwcm9ncmFtIGlzIGF2YWlsYWJsZSB1bmRlciBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCwgYXZhaWxhYmxlIGF0IGh0dHBzOi8vdmFhZGluLmNvbS9saWNlbnNlLwogICAgKi87bGV0IFlQdD0hMTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsKCgpPT57WVB0PSEwfSkse2NhcHR1cmU6ITB9KSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwoKCk9PntZUHQ9ITF9KSx7Y2FwdHVyZTohMH0pO2NvbnN0IFhQdD10PT5jbGFzcyBleHRlbmRzKCh0PT5jbGFzcyBleHRlbmRzIHR7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7dmFyIHQ9e3RhYmluZGV4Ont0eXBlOk51bWJlcix2YWx1ZTowLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCxvYnNlcnZlcjoiX3RhYmluZGV4Q2hhbmdlZCJ9fTtyZXR1cm4gd2luZG93LlNoYWR5RE9NJiYodC50YWJJbmRleD10LnRhYmluZGV4KSx0fX0pKHQpKXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57YXV0b2ZvY3VzOnt0eXBlOkJvb2xlYW59LF9wcmV2aW91c1RhYkluZGV4Ont0eXBlOk51bWJlcn0sZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbixvYnNlcnZlcjoiX2Rpc2FibGVkQ2hhbmdlZCIscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxfaXNTaGlmdFRhYmJpbmc6e3R5cGU6Qm9vbGVhbn19fXJlYWR5KCl7dGhpcy5hZGRFdmVudExpc3RlbmVyKCJmb2N1c2luIiwodD0+e3QuY29tcG9zZWRQYXRoKClbMF09PT10aGlzP3RoaXMuY29udGFpbnModC5yZWxhdGVkVGFyZ2V0KXx8dGhpcy5fZm9jdXMoKTotMT09PXQuY29tcG9zZWRQYXRoKCkuaW5kZXhPZih0aGlzLmZvY3VzRWxlbWVudCl8fHRoaXMuZGlzYWJsZWR8fHRoaXMuX3NldEZvY3VzZWQoITApfSkpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNvdXQiLCh0PT50aGlzLl9zZXRGb2N1c2VkKCExKSkpLHN1cGVyLnJlYWR5KCk7Y29uc3QgdD10PT57dC5jb21wb3NlZHx8dC50YXJnZXQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQodC50eXBlLHtidWJibGVzOiEwLGNvbXBvc2VkOiEwLGNhbmNlbGFibGU6ITF9KSl9O3RoaXMuc2hhZG93Um9vdC5hZGRFdmVudExpc3RlbmVyKCJmb2N1c2luIix0KSx0aGlzLnNoYWRvd1Jvb3QuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNvdXQiLHQpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsKHQ9PntpZighdC5kZWZhdWx0UHJldmVudGVkJiY5PT09dC5rZXlDb2RlKWlmKHQuc2hpZnRLZXkpdGhpcy5faXNTaGlmdFRhYmJpbmc9ITAsSFRNTEVsZW1lbnQucHJvdG90eXBlLmZvY3VzLmFwcGx5KHRoaXMpLHRoaXMuX3NldEZvY3VzZWQoITEpLHNldFRpbWVvdXQoKCgpPT50aGlzLl9pc1NoaWZ0VGFiYmluZz0hMSksMCk7ZWxzZXtjb25zdCB0PXdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9GaXJlZm94XC8oXGRcZFwuXGQpLyk7aWYodCYmcGFyc2VGbG9hdCh0WzFdKT49NjMmJnBhcnNlRmxvYXQodFsxXSk8NjYmJnRoaXMucGFyZW50Tm9kZSYmdGhpcy5uZXh0U2libGluZyl7Y29uc3QgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO3Quc3R5bGUucG9zaXRpb249ImFic29sdXRlIix0LnN0eWxlLm9wYWNpdHk9IjAiLHQudGFiSW5kZXg9dGhpcy50YWJJbmRleCx0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHQsdGhpcy5uZXh0U2libGluZyksdC5mb2N1cygpLHQuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNvdXQiLCgoKT0+dGhpcy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpKSl9fX0pKSx0aGlzLmF1dG9mb2N1cyYmIXRoaXMuZGlzYWJsZWQmJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCgpPT57dGhpcy5fZm9jdXMoKSx0aGlzLl9zZXRGb2N1c2VkKCEwKSx0aGlzLnNldEF0dHJpYnV0ZSgiZm9jdXMtcmluZyIsIiIpfSkpfWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLmhhc0F0dHJpYnV0ZSgiZm9jdXNlZCIpJiZ0aGlzLl9zZXRGb2N1c2VkKCExKX1fc2V0Rm9jdXNlZCh0KXt0P3RoaXMuc2V0QXR0cmlidXRlKCJmb2N1c2VkIiwiIik6dGhpcy5yZW1vdmVBdHRyaWJ1dGUoImZvY3VzZWQiKSx0JiZZUHQ/dGhpcy5zZXRBdHRyaWJ1dGUoImZvY3VzLXJpbmciLCIiKTp0aGlzLnJlbW92ZUF0dHJpYnV0ZSgiZm9jdXMtcmluZyIpfWdldCBmb2N1c0VsZW1lbnQoKXtyZXR1cm4gd2luZG93LmNvbnNvbGUud2FybihgUGxlYXNlIGltcGxlbWVudCB0aGUgJ2ZvY3VzRWxlbWVudCcgcHJvcGVydHkgaW4gPCR7dGhpcy5sb2NhbE5hbWV9PmApLHRoaXN9X2ZvY3VzKCl7dGhpcy5mb2N1c0VsZW1lbnQmJiF0aGlzLl9pc1NoaWZ0VGFiYmluZyYmKHRoaXMuZm9jdXNFbGVtZW50LmZvY3VzKCksdGhpcy5fc2V0Rm9jdXNlZCghMCkpfWZvY3VzKCl7dGhpcy5mb2N1c0VsZW1lbnQmJiF0aGlzLmRpc2FibGVkJiYodGhpcy5mb2N1c0VsZW1lbnQuZm9jdXMoKSx0aGlzLl9zZXRGb2N1c2VkKCEwKSl9Ymx1cigpe3RoaXMuZm9jdXNFbGVtZW50JiYodGhpcy5mb2N1c0VsZW1lbnQuYmx1cigpLHRoaXMuX3NldEZvY3VzZWQoITEpKX1fZGlzYWJsZWRDaGFuZ2VkKHQpe3RoaXMuZm9jdXNFbGVtZW50LmRpc2FibGVkPXQsdD8odGhpcy5ibHVyKCksdGhpcy5fcHJldmlvdXNUYWJJbmRleD10aGlzLnRhYmluZGV4LHRoaXMudGFiaW5kZXg9LTEsdGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtZGlzYWJsZWQiLCJ0cnVlIikpOih2b2lkIDAhPT10aGlzLl9wcmV2aW91c1RhYkluZGV4JiYodGhpcy50YWJpbmRleD10aGlzLl9wcmV2aW91c1RhYkluZGV4KSx0aGlzLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1kaXNhYmxlZCIpKX1fdGFiaW5kZXhDaGFuZ2VkKHQpe3ZvaWQgMCE9PXQmJih0aGlzLmZvY3VzRWxlbWVudC50YWJJbmRleD10KSx0aGlzLmRpc2FibGVkJiZ0aGlzLnRhYmluZGV4JiYoLTEhPT10aGlzLnRhYmluZGV4JiYodGhpcy5fcHJldmlvdXNUYWJJbmRleD10aGlzLnRhYmluZGV4KSx0aGlzLnRhYmluZGV4PXQ9dm9pZCAwKSx3aW5kb3cuU2hhZHlET00mJnRoaXMuc2V0UHJvcGVydGllcyh7dGFiSW5kZXg6dCx0YWJpbmRleDp0fSl9Y2xpY2soKXt0aGlzLmRpc2FibGVkfHxzdXBlci5jbGljaygpfX0KLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDIwIFZhYWRpbiBMdGQuCiAgICBUaGlzIHByb2dyYW0gaXMgYXZhaWxhYmxlIHVuZGVyIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wLCBhdmFpbGFibGUgYXQgaHR0cHM6Ly92YWFkaW4uY29tL2xpY2Vuc2UvCiAgICAqLztjbGFzcyAkUHR7c3RhdGljIGRldGVjdFNjcm9sbFR5cGUoKXtjb25zdCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3QudGV4dENvbnRlbnQ9IkFCQ0QiLHQuZGlyPSJydGwiLHQuc3R5bGUuZm9udFNpemU9IjE0cHgiLHQuc3R5bGUud2lkdGg9IjRweCIsdC5zdHlsZS5oZWlnaHQ9IjFweCIsdC5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHQuc3R5bGUudG9wPSItMTAwMHB4Iix0LnN0eWxlLm92ZXJmbG93PSJzY3JvbGwiLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodCk7bGV0IGU9InJldmVyc2UiO3JldHVybiB0LnNjcm9sbExlZnQ+MD9lPSJkZWZhdWx0IjoodC5zY3JvbGxMZWZ0PTIsdC5zY3JvbGxMZWZ0PDImJihlPSJuZWdhdGl2ZSIpKSxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHQpLGV9c3RhdGljIGdldE5vcm1hbGl6ZWRTY3JvbGxMZWZ0KHQsZSxuKXtjb25zdHtzY3JvbGxMZWZ0Oml9PW47aWYoInJ0bCIhPT1lfHwhdClyZXR1cm4gaTtzd2l0Y2godCl7Y2FzZSJuZWdhdGl2ZSI6cmV0dXJuIG4uc2Nyb2xsV2lkdGgtbi5jbGllbnRXaWR0aCtpO2Nhc2UicmV2ZXJzZSI6cmV0dXJuIG4uc2Nyb2xsV2lkdGgtbi5jbGllbnRXaWR0aC1pfXJldHVybiBpfXN0YXRpYyBzZXROb3JtYWxpemVkU2Nyb2xsTGVmdCh0LGUsbixpKXtpZigicnRsIj09PWUmJnQpc3dpdGNoKHQpe2Nhc2UibmVnYXRpdmUiOm4uc2Nyb2xsTGVmdD1uLmNsaWVudFdpZHRoLW4uc2Nyb2xsV2lkdGgraTticmVhaztjYXNlInJldmVyc2UiOm4uc2Nyb2xsTGVmdD1uLnNjcm9sbFdpZHRoLW4uY2xpZW50V2lkdGgtaTticmVhaztkZWZhdWx0Om4uc2Nyb2xsTGVmdD1pfWVsc2Ugbi5zY3JvbGxMZWZ0PWl9fWNvbnN0IEtQdD1bXTtsZXQgWlB0O25ldyBNdXRhdGlvbk9ic2VydmVyKChmdW5jdGlvbigpe2NvbnN0IHQ9UVB0KCk7S1B0LmZvckVhY2goKGU9PntKUHQoZSx0KX0pKX0pKS5vYnNlcnZlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCx7YXR0cmlidXRlczohMCxhdHRyaWJ1dGVGaWx0ZXI6WyJkaXIiXX0pO2NvbnN0IEpQdD1mdW5jdGlvbih0LGUpe2U/dC5zZXRBdHRyaWJ1dGUoImRpciIsZSk6dC5yZW1vdmVBdHRyaWJ1dGUoImRpciIpfSxRUHQ9ZnVuY3Rpb24oKXtyZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgiZGlyIil9LHROdD10PT5jbGFzcyBleHRlbmRzIHR7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue2Rpcjp7dHlwZTpTdHJpbmcscmVhZE9ubHk6ITB9fX1zdGF0aWMgZmluYWxpemUoKXtzdXBlci5maW5hbGl6ZSgpLFpQdHx8KFpQdD0kUHQuZGV0ZWN0U2Nyb2xsVHlwZSgpKX1jb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5oYXNBdHRyaWJ1dGUoImRpciIpfHwodGhpcy5fX3N1YnNjcmliZSgpLEpQdCh0aGlzLFFQdCgpKSl9YXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHQsZSxuKXtpZihzdXBlci5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sodCxlLG4pLCJkaXIiIT09dClyZXR1cm47Y29uc3QgaT1uPT09UVB0KCkmJi0xPT09S1B0LmluZGV4T2YodGhpcykscj0hbiYmZSYmLTE9PT1LUHQuaW5kZXhPZih0aGlzKSxvPW4hPT1RUHQoKSYmZT09PVFQdCgpO2l8fHI/KHRoaXMuX19zdWJzY3JpYmUoKSxKUHQodGhpcyxRUHQoKSkpOm8mJnRoaXMuX19zdWJzY3JpYmUoITEpfWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLl9fc3Vic2NyaWJlKCExKSx0aGlzLnJlbW92ZUF0dHJpYnV0ZSgiZGlyIil9X19zdWJzY3JpYmUodD0hMCl7dD8tMT09PUtQdC5pbmRleE9mKHRoaXMpJiZLUHQucHVzaCh0aGlzKTpLUHQuaW5kZXhPZih0aGlzKT4tMSYmS1B0LnNwbGljZShLUHQuaW5kZXhPZih0aGlzKSwxKX1fX2dldE5vcm1hbGl6ZWRTY3JvbGxMZWZ0KHQpe3JldHVybiAkUHQuZ2V0Tm9ybWFsaXplZFNjcm9sbExlZnQoWlB0LHRoaXMuZ2V0QXR0cmlidXRlKCJkaXIiKXx8Imx0ciIsdCl9X19zZXROb3JtYWxpemVkU2Nyb2xsTGVmdCh0LGUpe3JldHVybiAkUHQuc2V0Tm9ybWFsaXplZFNjcm9sbExlZnQoWlB0LHRoaXMuZ2V0QXR0cmlidXRlKCJkaXIiKXx8Imx0ciIsdCxlKX19LGVOdD0vXC9cKlwqXHMrdmFhZGluLWRldi1tb2RlOnN0YXJ0KFtcc1xTXSopdmFhZGluLWRldi1tb2RlOmVuZFxzK1wqXCpcLy9pLG5OdD13aW5kb3cuVmFhZGluJiZ3aW5kb3cuVmFhZGluLkZsb3cmJndpbmRvdy5WYWFkaW4uRmxvdy5jbGllbnRzO2Z1bmN0aW9uIGlOdCh0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXJldHVybjtjb25zdCBuPWVOdC5leGVjKHQudG9TdHJpbmcoKSk7aWYobil0cnl7dD1uZXcgRnVuY3Rpb24oblsxXSl9Y2F0Y2godCl7Y29uc29sZS5sb2coInZhYWRpbi1kZXZlbG9wbWVudC1tb2RlLWRldGVjdG9yOiB1bmNvbW1lbnRBbmRSdW4oKSBmYWlsZWQiLHQpfXJldHVybiB0KGUpfWZ1bmN0aW9uIHJOdCgpe313aW5kb3cuVmFhZGluPXdpbmRvdy5WYWFkaW58fHt9LHZvaWQgMD09PXdpbmRvdy5WYWFkaW4uZGV2ZWxvcG1lbnRNb2RlJiYod2luZG93LlZhYWRpbi5kZXZlbG9wbWVudE1vZGU9KGZ1bmN0aW9uIG9OdCgpe3RyeXtyZXR1cm4hIShmdW5jdGlvbiB0KCl7cmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ2YWFkaW4uZGV2ZWxvcG1lbnRtb2RlLmZvcmNlIil9KSgpfHwhIShmdW5jdGlvbiBlKCl7cmV0dXJuWyJsb2NhbGhvc3QiLCIxMjcuMC4wLjEiXS5pbmRleE9mKHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSk+PTB9KSgpJiYobk50PyEoZnVuY3Rpb24gbigpe3JldHVybiEhKG5OdCYmT2JqZWN0LmtleXMobk50KS5tYXAoKHQ9Pm5OdFt0XSkpLmZpbHRlcigodD0+dC5wcm9kdWN0aW9uTW9kZSkpLmxlbmd0aD4wKX0pKCk6IShmdW5jdGlvbiBpKCl7cmV0dXJuIGlOdCgoZnVuY3Rpb24gdCgpe3JldHVybiEwfSkpfSkoKSl9Y2F0Y2godCl7cmV0dXJuITF9fSkoKSk7Y29uc3QgYU50PWZ1bmN0aW9uKCl7cmV0dXJuKGZ1bmN0aW9uKHQsZSl7aWYod2luZG93LlZhYWRpbi5kZXZlbG9wbWVudE1vZGUpcmV0dXJuIGlOdCh0LHZvaWQgMCl9KShyTnQpfTtsZXQgc050O3dpbmRvdy5WYWFkaW58fCh3aW5kb3cuVmFhZGluPXt9KSx3aW5kb3cuVmFhZGluLnJlZ2lzdHJhdGlvbnM9d2luZG93LlZhYWRpbi5yZWdpc3RyYXRpb25zfHxbXSx3aW5kb3cuVmFhZGluLmRldmVsb3BtZW50TW9kZUNhbGxiYWNrPXdpbmRvdy5WYWFkaW4uZGV2ZWxvcG1lbnRNb2RlQ2FsbGJhY2t8fHt9LHdpbmRvdy5WYWFkaW4uZGV2ZWxvcG1lbnRNb2RlQ2FsbGJhY2tbInZhYWRpbi11c2FnZS1zdGF0aXN0aWNzIl09ZnVuY3Rpb24oKXthTnQmJmFOdCgpfTtjb25zdCBsTnQ9bmV3IFNldCxjTnQ9dD0+Y2xhc3MgZXh0ZW5kcyh0TnQodCkpe3N0YXRpYyBmaW5hbGl6ZSgpe3N1cGVyLmZpbmFsaXplKCk7Y29uc3R7aXM6dH09dGhpczt0JiYhbE50Lmhhcyh0KSYmKHdpbmRvdy5WYWFkaW4ucmVnaXN0cmF0aW9ucy5wdXNoKHRoaXMpLGxOdC5hZGQodCksd2luZG93LlZhYWRpbi5kZXZlbG9wbWVudE1vZGVDYWxsYmFjayYmKHNOdD1Fbi5kZWJvdW5jZShzTnQseXQsKCgpPT57d2luZG93LlZhYWRpbi5kZXZlbG9wbWVudE1vZGVDYWxsYmFja1sidmFhZGluLXVzYWdlLXN0YXRpc3RpY3MiXSgpfSkpLENuKHNOdCkpKX1jb25zdHJ1Y3Rvcigpe3N1cGVyKCksbnVsbD09PWRvY3VtZW50LmRvY3R5cGUmJmNvbnNvbGUud2FybignVmFhZGluIGNvbXBvbmVudHMgcmVxdWlyZSB0aGUgInN0YW5kYXJkcyBtb2RlIiBkZWNsYXJhdGlvbi4gUGxlYXNlIGFkZCA8IURPQ1RZUEUgaHRtbD4gdG8gdGhlIEhUTUwgZG9jdW1lbnQuJyl9fQovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTcgVmFhZGluIEx0ZC4KICAgIFRoaXMgcHJvZ3JhbSBpcyBhdmFpbGFibGUgdW5kZXIgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAsIGF2YWlsYWJsZSBhdCBodHRwczovL3ZhYWRpbi5jb20vbGljZW5zZS8KICAgICovO2NsYXNzIHVOdCBleHRlbmRzKGNOdChYUHQocVB0KGRpKHllKSkpKSl7c3RhdGljIGdldCB0ZW1wbGF0ZSgpe3JldHVybiBfZWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgfQoKICAgICAgOmhvc3QoW2hpZGRlbl0pIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIGxhYmVsIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogYmFzZWxpbmU7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgfQoKICAgICAgW3BhcnQ9ImNoZWNrYm94Il0gewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgZmxleDogbm9uZTsKICAgICAgfQoKICAgICAgaW5wdXRbdHlwZT0iY2hlY2tib3giXSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIGN1cnNvcjogaW5oZXJpdDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIHsKICAgICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50OwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxsYWJlbD4KICAgICAgPHNwYW4gcGFydD0iY2hlY2tib3giPgogICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgY2hlY2tlZD0ie3tjaGVja2VkOjpjaGFuZ2V9fSIgZGlzYWJsZWRcJD0iW1tkaXNhYmxlZF1dIiBpbmRldGVybWluYXRlPSJ7e2luZGV0ZXJtaW5hdGU6OmNoYW5nZX19IiByb2xlPSJwcmVzZW50YXRpb24iIHRhYmluZGV4PSItMSI+CiAgICAgIDwvc3Bhbj4KCiAgICAgIDxzcGFuIHBhcnQ9ImxhYmVsIj4KICAgICAgICA8c2xvdD48L3Nsb3Q+CiAgICAgIDwvc3Bhbj4KICAgIDwvbGFiZWw+CmB9c3RhdGljIGdldCBpcygpe3JldHVybiJ2YWFkaW4tY2hlY2tib3gifXN0YXRpYyBnZXQgdmVyc2lvbigpe3JldHVybiIyLjUuMCJ9c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue2NoZWNrZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9jaGVja2VkQ2hhbmdlZCIscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxpbmRldGVybWluYXRlOnt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwLG9ic2VydmVyOiJfaW5kZXRlcm1pbmF0ZUNoYW5nZWQiLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCx2YWx1ZTohMX0sdmFsdWU6e3R5cGU6U3RyaW5nLHZhbHVlOiJvbiJ9LF9uYXRpdmVDaGVja2JveDp7dHlwZTpPYmplY3R9fX1jb25zdHJ1Y3Rvcigpe3N1cGVyKCl9Z2V0IG5hbWUoKXtyZXR1cm4gdGhpcy5jaGVja2VkP3RoaXMuX3N0b3JlZE5hbWU6IiJ9c2V0IG5hbWUodCl7dGhpcy5fc3RvcmVkTmFtZT10fXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLnNldEF0dHJpYnV0ZSgicm9sZSIsImNoZWNrYm94IiksdGhpcy5fbmF0aXZlQ2hlY2tib3g9dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3R5cGU9ImNoZWNrYm94Il0nKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLl9oYW5kbGVDbGljay5iaW5kKHRoaXMpKSx0aGlzLl9hZGRBY3RpdmVMaXN0ZW5lcnMoKTtjb25zdCB0PXRoaXMuZ2V0QXR0cmlidXRlKCJuYW1lIik7dCYmKHRoaXMubmFtZT10KSx0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignW3BhcnR+PSJsYWJlbCJdJykucXVlcnlTZWxlY3Rvcigic2xvdCIpLmFkZEV2ZW50TGlzdGVuZXIoInNsb3RjaGFuZ2UiLHRoaXMuX3VwZGF0ZUxhYmVsQXR0cmlidXRlLmJpbmQodGhpcykpLHRoaXMuX3VwZGF0ZUxhYmVsQXR0cmlidXRlKCl9X3VwZGF0ZUxhYmVsQXR0cmlidXRlKCl7Y29uc3QgdD10aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignW3BhcnR+PSJsYWJlbCJdJyksZT10LmZpcnN0RWxlbWVudENoaWxkLmFzc2lnbmVkTm9kZXMoKTt0aGlzLl9pc0Fzc2lnbmVkTm9kZXNFbXB0eShlKT90LnNldEF0dHJpYnV0ZSgiZW1wdHkiLCIiKTp0LnJlbW92ZUF0dHJpYnV0ZSgiZW1wdHkiKX1faXNBc3NpZ25lZE5vZGVzRW1wdHkodCl7cmV0dXJuIDA9PT10Lmxlbmd0aHx8MT09dC5sZW5ndGgmJnRbMF0ubm9kZVR5cGU9PU5vZGUuVEVYVF9OT0RFJiYiIj09PXRbMF0udGV4dENvbnRlbnQudHJpbSgpfV9jaGVja2VkQ2hhbmdlZCh0KXt0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1jaGVja2VkIix0aGlzLmluZGV0ZXJtaW5hdGU/Im1peGVkIjpCb29sZWFuKHQpKX1faW5kZXRlcm1pbmF0ZUNoYW5nZWQodCl7dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtY2hlY2tlZCIsdD8ibWl4ZWQiOnRoaXMuY2hlY2tlZCl9X2FkZEFjdGl2ZUxpc3RlbmVycygpe3RoaXMuX2FkZEV2ZW50TGlzdGVuZXJUb05vZGUodGhpcywiZG93biIsKHQ9Pnt0aGlzLl9faW50ZXJhY3Rpb25zQWxsb3dlZCh0KSYmdGhpcy5zZXRBdHRyaWJ1dGUoImFjdGl2ZSIsIiIpfSkpLHRoaXMuX2FkZEV2ZW50TGlzdGVuZXJUb05vZGUodGhpcywidXAiLCgoKT0+dGhpcy5yZW1vdmVBdHRyaWJ1dGUoImFjdGl2ZSIpKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwodD0+e3RoaXMuX19pbnRlcmFjdGlvbnNBbGxvd2VkKHQpJiYzMj09PXQua2V5Q29kZSYmKHQucHJldmVudERlZmF1bHQoKSx0aGlzLnNldEF0dHJpYnV0ZSgiYWN0aXZlIiwiIikpfSkpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLCh0PT57dGhpcy5fX2ludGVyYWN0aW9uc0FsbG93ZWQodCkmJjMyPT09dC5rZXlDb2RlJiYodC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX3RvZ2dsZUNoZWNrZWQoKSx0aGlzLnJlbW92ZUF0dHJpYnV0ZSgiYWN0aXZlIiksdGhpcy5pbmRldGVybWluYXRlJiYodGhpcy5pbmRldGVybWluYXRlPSExKSl9KSl9Z2V0IGZvY3VzRWxlbWVudCgpe3JldHVybiB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiaW5wdXQiKX1fX2ludGVyYWN0aW9uc0FsbG93ZWQodCl7cmV0dXJuIXRoaXMuZGlzYWJsZWQmJiJhIiE9PXQudGFyZ2V0LmxvY2FsTmFtZX1faGFuZGxlQ2xpY2sodCl7dGhpcy5fX2ludGVyYWN0aW9uc0FsbG93ZWQodCkmJih0aGlzLmluZGV0ZXJtaW5hdGU/KHRoaXMuaW5kZXRlcm1pbmF0ZT0hMSx0LnByZXZlbnREZWZhdWx0KCksdGhpcy5fdG9nZ2xlQ2hlY2tlZCgpKTp0LmNvbXBvc2VkUGF0aCgpWzBdIT09dGhpcy5fbmF0aXZlQ2hlY2tib3gmJih0LnByZXZlbnREZWZhdWx0KCksdGhpcy5fdG9nZ2xlQ2hlY2tlZCgpKSl9X3RvZ2dsZUNoZWNrZWQoKXt0aGlzLmNoZWNrZWQ9IXRoaXMuY2hlY2tlZCx0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJjaGFuZ2UiLHtjb21wb3NlZDohMSxidWJibGVzOiEwfSkpfX1jdXN0b21FbGVtZW50cy5kZWZpbmUodU50LmlzLHVOdCk7Y29uc3QgaE50PV9lYDxkb20tbW9kdWxlIGlkPSJsdW1vLWdyaWQiIHRoZW1lLWZvcj0idmFhZGluLWdyaWQiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1sdW1vLWZvbnQtZmFtaWx5KTsKICAgICAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLW0pOwogICAgICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1sdW1vLWxpbmUtaGVpZ2h0LXMpOwogICAgICAgIGNvbG9yOiB2YXIoLS1sdW1vLWJvZHktdGV4dC1jb2xvcik7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1iYXNlLWNvbG9yKTsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsKICAgICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50OwogICAgICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOwogICAgICAgIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7CgogICAgICAgIC8qIEZvciBpbnRlcm5hbCB1c2Ugb25seSAqLwogICAgICAgIC0tX2x1bW8tZ3JpZC1ib3JkZXItY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtMjBwY3QpOwogICAgICAgIC0tX2x1bW8tZ3JpZC1zZWNvbmRhcnktYm9yZGVyLWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTEwcGN0KTsKICAgICAgICAtLV9sdW1vLWdyaWQtYm9yZGVyLXdpZHRoOiAxcHg7CiAgICAgICAgLS1fbHVtby1ncmlkLXNlbGVjdGVkLXJvdy1jb2xvcjogdmFyKC0tbHVtby1wcmltYXJ5LWNvbG9yLTEwcGN0KTsKICAgICAgfQoKICAgICAgLyogTm8gKG91dGVyKSBib3JkZXIgKi8KCiAgICAgIDpob3N0KDpub3QoW3RoZW1lfj0ibm8tYm9yZGVyIl0pKSB7CiAgICAgICAgYm9yZGVyOiB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItY29sb3IpOwogICAgICB9CgogICAgICAvKiBDZWxsIHN0eWxlcyAqLwoKICAgICAgW3BhcnR+PSJjZWxsIl0gewogICAgICAgIG1pbi1oZWlnaHQ6IHZhcigtLWx1bW8tc2l6ZS1tKTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLWJhc2UtY29sb3IpOwogICAgICB9CgogICAgICBbcGFydH49ImNlbGwiXSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICAgIHBhZGRpbmc6IHZhcigtLWx1bW8tc3BhY2UteHMpIHZhcigtLWx1bW8tc3BhY2UtbSk7CiAgICAgIH0KCiAgICAgIC8qIEFwcGx5IHJvdyBib3JkZXJzIGJ5IGRlZmF1bHQgYW5kIGludHJvZHVjZSB0aGUgIm5vLXJvdy1ib3JkZXJzIiB2YXJpYW50ICovCiAgICAgIDpob3N0KDpub3QoW3RoZW1lfj0ibm8tcm93LWJvcmRlcnMiXSkpIFtwYXJ0fj0iY2VsbCJdOm5vdChbcGFydH49ImRldGFpbHMtY2VsbCJdKSB7CiAgICAgICAgYm9yZGVyLXRvcDogdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLV9sdW1vLWdyaWQtc2Vjb25kYXJ5LWJvcmRlci1jb2xvcik7CiAgICAgIH0KCiAgICAgIC8qIEhpZGUgZmlyc3QgYm9keSByb3cgdG9wIGJvcmRlciAqLwogICAgICA6aG9zdCg6bm90KFt0aGVtZX49Im5vLXJvdy1ib3JkZXJzIl0pKSBbcGFydD0icm93Il1bZmlyc3RdIFtwYXJ0fj0iY2VsbCJdOm5vdChbcGFydH49ImRldGFpbHMtY2VsbCJdKSB7CiAgICAgICAgYm9yZGVyLXRvcDogMDsKICAgICAgICBtaW4taGVpZ2h0OiBjYWxjKHZhcigtLWx1bW8tc2l6ZS1tKSAtIHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLXdpZHRoKSk7CiAgICAgIH0KCiAgICAgIC8qIEZvY3VzLXJpbmcgKi8KCiAgICAgIFtwYXJ0fj0iY2VsbCJdOmZvY3VzIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICB9CgogICAgICA6aG9zdChbbmF2aWdhdGluZ10pIFtwYXJ0fj0iY2VsbCJdOmZvY3VzOjpiZWZvcmUgewogICAgICAgIGNvbnRlbnQ6ICIiOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgMnB4IHZhcigtLWx1bW8tcHJpbWFyeS1jb2xvci01MHBjdCk7CiAgICAgIH0KCiAgICAgIC8qIERyYWcgYW5kIERyb3Agc3R5bGVzICovCiAgICAgIDpob3N0KFtkcmFnb3Zlcl0pOjphZnRlciB7CiAgICAgICAgY29udGVudDogIiI7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHotaW5kZXg6IDEwMDsKICAgICAgICB0b3A6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgMnB4IHZhcigtLWx1bW8tcHJpbWFyeS1jb2xvci01MHBjdCk7CiAgICAgIH0KCiAgICAgIFtwYXJ0fj0icm93Il1bZHJhZ292ZXJdIHsKICAgICAgICB6LWluZGV4OiAxMDAgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgW3BhcnR+PSJyb3ciXVtkcmFnb3Zlcl0gW3BhcnR+PSJjZWxsIl0gewogICAgICAgIG92ZXJmbG93OiB2aXNpYmxlOwogICAgICB9CgogICAgICBbcGFydH49InJvdyJdW2RyYWdvdmVyXSBbcGFydH49ImNlbGwiXTo6YWZ0ZXIgewogICAgICAgIGNvbnRlbnQ6ICIiOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgaGVpZ2h0OiBjYWxjKHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLXdpZHRoKSArIDJweCk7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tbHVtby1wcmltYXJ5LWNvbG9yLTUwcGN0KTsKICAgICAgfQoKICAgICAgOmhvc3QoW3RoZW1lfj0ibm8tcm93LWJvcmRlcnMiXSkgW2RyYWdvdmVyXSBbcGFydH49ImNlbGwiXTo6YWZ0ZXIgewogICAgICAgIGhlaWdodDogMnB4OwogICAgICB9CgogICAgICBbcGFydH49InJvdyJdW2RyYWdvdmVyPSJiZWxvdyJdIFtwYXJ0fj0iY2VsbCJdOjphZnRlciB7CiAgICAgICAgdG9wOiAxMDAlOwogICAgICAgIGJvdHRvbTogYXV0bzsKICAgICAgICBtYXJnaW4tdG9wOiAtMXB4OwogICAgICB9CgogICAgICBbcGFydH49InJvdyJdW2RyYWdvdmVyPSJhYm92ZSJdIFtwYXJ0fj0iY2VsbCJdOjphZnRlciB7CiAgICAgICAgdG9wOiBhdXRvOwogICAgICAgIGJvdHRvbTogMTAwJTsKICAgICAgICBtYXJnaW4tYm90dG9tOiAtMXB4OwogICAgICB9CgogICAgICBbcGFydH49InJvdyJdW2RldGFpbHMtb3BlbmVkXVtkcmFnb3Zlcj0iYmVsb3ciXSBbcGFydH49ImNlbGwiXTpub3QoW3BhcnR+PSJkZXRhaWxzLWNlbGwiXSk6OmFmdGVyLAogICAgICBbcGFydH49InJvdyJdW2RldGFpbHMtb3BlbmVkXVtkcmFnb3Zlcj0iYWJvdmUiXSBbcGFydH49ImRldGFpbHMtY2VsbCJdOjphZnRlciB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgW3BhcnR+PSJyb3ciXVtkcmFnb3Zlcl1bZHJhZ292ZXI9Im9uLXRvcCJdIFtwYXJ0fj0iY2VsbCJdOjphZnRlciB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICBbcGFydH49InJvdyJdW2RyYWdzdGFydF0gewogICAgICAgIC8qIEFkZCBib3R0b20tc3BhY2UgdG8gdGhlIHJvdyBzbyB0aGUgZHJhZyBudW1iZXIgZG9lc24ndCBnZXQgY2xpcHBlZC4gTmVlZGVkIGZvciBJRS9FZGdlICovCiAgICAgICAgYm9yZGVyLWJvdHRvbTogMTAwcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgICAgei1pbmRleDogMTAwICFpbXBvcnRhbnQ7CiAgICAgICAgb3BhY2l0eTogMC45OwogICAgICB9CgogICAgICBbcGFydH49InJvdyJdW2RyYWdzdGFydF0gW3BhcnR+PSJjZWxsIl0gewogICAgICAgIGJvcmRlcjogbm9uZSAhaW1wb3J0YW50OwogICAgICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgW3BhcnR+PSJyb3ciXVtkcmFnc3RhcnRdIFtwYXJ0fj0iY2VsbCJdW2xhc3QtY29sdW1uXSB7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMCB2YXIoLS1sdW1vLWJvcmRlci1yYWRpdXMtcykgdmFyKC0tbHVtby1ib3JkZXItcmFkaXVzLXMpIDA7CiAgICAgIH0KCiAgICAgIFtwYXJ0fj0icm93Il1bZHJhZ3N0YXJ0XSBbcGFydH49ImNlbGwiXVtmaXJzdC1jb2x1bW5dIHsKICAgICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1sdW1vLWJvcmRlci1yYWRpdXMtcykgMCAwIHZhcigtLWx1bW8tYm9yZGVyLXJhZGl1cy1zKTsKICAgICAgfQoKICAgICAgW2lvc10gW3BhcnR+PSJyb3ciXVtkcmFnc3RhcnRdIFtwYXJ0fj0iY2VsbCJdIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1sdW1vLXByaW1hcnktY29sb3ItNTBwY3QpOwogICAgICB9CgogICAgICAjc2Nyb2xsZXI6bm90KFtpb3NdKSBbcGFydH49InJvdyJdW2RyYWdzdGFydF06bm90KFtkcmFnc3RhcnQ9IiJdKTo6YWZ0ZXIgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiB2YXIoLS1fZ3JpZC1kcmFnLXN0YXJ0LXgpOwogICAgICAgIHRvcDogdmFyKC0tX2dyaWQtZHJhZy1zdGFydC15KTsKICAgICAgICB6LWluZGV4OiAxMDA7CiAgICAgICAgY29udGVudDogYXR0cihkcmFnc3RhcnQpOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBwYWRkaW5nOiBjYWxjKHZhcigtLWx1bW8tc3BhY2UteHMpICogMC44KTsKICAgICAgICBjb2xvcjogdmFyKC0tbHVtby1lcnJvci1jb250cmFzdC1jb2xvcik7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1lcnJvci1jb2xvcik7CiAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbHVtby1ib3JkZXItcmFkaXVzLW0pOwogICAgICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1sdW1vLWZvbnQtZmFtaWx5KTsKICAgICAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLXh4cyk7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogaW5pdGlhbDsKICAgICAgICBsZXR0ZXItc3BhY2luZzogaW5pdGlhbDsKICAgICAgICBtaW4td2lkdGg6IGNhbGModmFyKC0tbHVtby1zaXplLXMpICogMC43KTsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC8qIEhlYWRlcnMgYW5kIGZvb3RlcnMgKi8KCiAgICAgIFtwYXJ0fj0iaGVhZGVyLWNlbGwiXSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSwKICAgICAgW3BhcnR+PSJmb290ZXItY2VsbCJdIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpLAogICAgICBbcGFydH49InJlb3JkZXItZ2hvc3QiXSB7CiAgICAgICAgZm9udC1zaXplOiB2YXIoLS1sdW1vLWZvbnQtc2l6ZS1zKTsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICB9CgogICAgICBbcGFydH49ImZvb3Rlci1jZWxsIl0gOjpzbG90dGVkKHZhYWRpbi1ncmlkLWNlbGwtY29udGVudCkgewogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgIH0KCiAgICAgIFtwYXJ0PSJyb3ciXTpvbmx5LWNoaWxkIFtwYXJ0fj0iaGVhZGVyLWNlbGwiXSB7CiAgICAgICAgbWluLWhlaWdodDogdmFyKC0tbHVtby1zaXplLXhsKTsKICAgICAgfQoKICAgICAgLyogSGVhZGVyIGJvcmRlcnMgKi8KCiAgICAgIC8qIEhpZGUgZmlyc3QgaGVhZGVyIHJvdyB0b3AgYm9yZGVyICovCiAgICAgIDpob3N0KDpub3QoW3RoZW1lfj0ibm8tcm93LWJvcmRlcnMiXSkpIFtwYXJ0PSJyb3ciXTpmaXJzdC1jaGlsZCBbcGFydH49ImhlYWRlci1jZWxsIl0gewogICAgICAgIGJvcmRlci10b3A6IDA7CiAgICAgIH0KCiAgICAgIFtwYXJ0PSJyb3ciXTpsYXN0LWNoaWxkIFtwYXJ0fj0iaGVhZGVyLWNlbGwiXSB7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItd2lkdGgpIHNvbGlkIHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICA6aG9zdCg6bm90KFt0aGVtZX49Im5vLXJvdy1ib3JkZXJzIl0pKSBbcGFydD0icm93Il06bGFzdC1jaGlsZCBbcGFydH49ImhlYWRlci1jZWxsIl0gewogICAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6IHZhcigtLV9sdW1vLWdyaWQtc2Vjb25kYXJ5LWJvcmRlci1jb2xvcik7CiAgICAgIH0KCiAgICAgIC8qIE92ZXJmbG93IHVzZXMgYSBzdHJvbmdlciBib3JkZXIgY29sb3IgKi8KICAgICAgOmhvc3QoW292ZXJmbG93fj0idG9wIl0pIFtwYXJ0PSJyb3ciXTpsYXN0LWNoaWxkIFtwYXJ0fj0iaGVhZGVyLWNlbGwiXSB7CiAgICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItY29sb3IpOwogICAgICB9CgogICAgICAvKiBGb290ZXIgYm9yZGVycyAqLwoKICAgICAgW3BhcnQ9InJvdyJdOmZpcnN0LWNoaWxkIFtwYXJ0fj0iZm9vdGVyLWNlbGwiXSB7CiAgICAgICAgYm9yZGVyLXRvcDogdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItd2lkdGgpIHNvbGlkIHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICA6aG9zdCg6bm90KFt0aGVtZX49Im5vLXJvdy1ib3JkZXJzIl0pKSBbcGFydD0icm93Il06Zmlyc3QtY2hpbGQgW3BhcnR+PSJmb290ZXItY2VsbCJdIHsKICAgICAgICBib3JkZXItdG9wLWNvbG9yOiB2YXIoLS1fbHVtby1ncmlkLXNlY29uZGFyeS1ib3JkZXItY29sb3IpOwogICAgICB9CgogICAgICAvKiBPdmVyZmxvdyB1c2VzIGEgc3Ryb25nZXIgYm9yZGVyIGNvbG9yICovCiAgICAgIDpob3N0KFtvdmVyZmxvd349ImJvdHRvbSJdKSBbcGFydD0icm93Il06Zmlyc3QtY2hpbGQgW3BhcnR+PSJmb290ZXItY2VsbCJdIHsKICAgICAgICBib3JkZXItdG9wLWNvbG9yOiB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci1jb2xvcik7CiAgICAgIH0KCiAgICAgIC8qIENvbHVtbiByZW9yZGVyaW5nICovCgogICAgICA6aG9zdChbcmVvcmRlcmluZ10pIFtwYXJ0fj0iY2VsbCJdIHsKICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodmFyKC0tbHVtby1zaGFkZS0yMHBjdCksIHZhcigtLWx1bW8tc2hhZGUtMjBwY3QpKSB2YXIoLS1sdW1vLWJhc2UtY29sb3IpOwogICAgICB9CgogICAgICA6aG9zdChbcmVvcmRlcmluZ10pIFtwYXJ0fj0iY2VsbCJdW3Jlb3JkZXItc3RhdHVzPSJhbGxvd2VkIl0gewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWx1bW8tYmFzZS1jb2xvcik7CiAgICAgIH0KCiAgICAgIDpob3N0KFtyZW9yZGVyaW5nXSkgW3BhcnR+PSJjZWxsIl1bcmVvcmRlci1zdGF0dXM9ImRyYWdnaW5nIl0gewogICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh2YXIoLS1sdW1vLWNvbnRyYXN0LTVwY3QpLCB2YXIoLS1sdW1vLWNvbnRyYXN0LTVwY3QpKSB2YXIoLS1sdW1vLWJhc2UtY29sb3IpOwogICAgICB9CgogICAgICBbcGFydH49InJlb3JkZXItZ2hvc3QiXSB7CiAgICAgICAgb3BhY2l0eTogMC44NTsKICAgICAgICBib3gtc2hhZG93OiB2YXIoLS1sdW1vLWJveC1zaGFkb3ctcyk7CiAgICAgICAgLyogVE9ETyBVc2UgdGhlIHNhbWUgc3R5bGVzIGFzIGZvciB0aGUgY2VsbCBlbGVtZW50IChyZW9yZGVyLWdob3N0IGNvcGllcyBzdHlsZXMgZnJvbSB0aGUgY2VsbCBlbGVtZW50KSAqLwogICAgICAgIHBhZGRpbmc6IHZhcigtLWx1bW8tc3BhY2UtcykgdmFyKC0tbHVtby1zcGFjZS1tKSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAvKiBDb2x1bW4gcmVzaXppbmcgKi8KCiAgICAgIFtwYXJ0PSJyZXNpemUtaGFuZGxlIl0gewogICAgICAgIHdpZHRoOiAzcHg7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1wcmltYXJ5LWNvbG9yLTUwcGN0KTsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4yczsKICAgICAgfQoKICAgICAgOmhvc3QoOm5vdChbcmVvcmRlcmluZ10pKSAqOm5vdChbY29sdW1uLXJlc2l6aW5nXSkgW3BhcnR+PSJjZWxsIl06aG92ZXIgW3BhcnQ9InJlc2l6ZS1oYW5kbGUiXSwKICAgICAgW3BhcnQ9InJlc2l6ZS1oYW5kbGUiXTphY3RpdmUgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgdHJhbnNpdGlvbi1kZWxheTogMC4xNXM7CiAgICAgIH0KCiAgICAgIC8qIENvbHVtbiBib3JkZXJzICovCgogICAgICA6aG9zdChbdGhlbWV+PSJjb2x1bW4tYm9yZGVycyJdKSBbcGFydH49ImNlbGwiXTpub3QoW2xhc3QtY29sdW1uXSk6bm90KFtwYXJ0fj0iZGV0YWlscy1jZWxsIl0pIHsKICAgICAgICBib3JkZXItcmlnaHQ6IHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1fbHVtby1ncmlkLXNlY29uZGFyeS1ib3JkZXItY29sb3IpOwogICAgICB9CgogICAgICAvKiBGcm96ZW4gY29sdW1ucyAqLwoKICAgICAgW2xhc3QtZnJvemVuXSB7CiAgICAgICAgYm9yZGVyLXJpZ2h0OiB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci13aWR0aCkgc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgOmhvc3QoW292ZXJmbG93fj0ibGVmdCJdKSBbcGFydH49ImNlbGwiXVtsYXN0LWZyb3plbl06bm90KFtwYXJ0fj0iZGV0YWlscy1jZWxsIl0pIHsKICAgICAgICBib3JkZXItcmlnaHQtY29sb3I6IHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLWNvbG9yKTsKICAgICAgfQoKICAgICAgLyogUm93IHN0cmlwZXMgKi8KCiAgICAgIDpob3N0KFt0aGVtZX49InJvdy1zdHJpcGVzIl0pIFtwYXJ0fj0icm93Il06bm90KFtvZGRdKSBbcGFydH49ImJvZHktY2VsbCJdLAogICAgICA6aG9zdChbdGhlbWV+PSJyb3ctc3RyaXBlcyJdKSBbcGFydH49InJvdyJdOm5vdChbb2RkXSkgW3BhcnR+PSJkZXRhaWxzLWNlbGwiXSB7CiAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHZhcigtLWx1bW8tY29udHJhc3QtNXBjdCksIHZhcigtLWx1bW8tY29udHJhc3QtNXBjdCkpOwogICAgICAgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKICAgICAgfQoKICAgICAgLyogU2VsZWN0ZWQgcm93ICovCgogICAgICAvKiBSYWlzZSB0aGUgc2VsZWN0ZWQgcm93cyBhYm92ZSB1bnNlbGVjdGVkIHJvd3MgKHNvIHRoYXQgYm94LXNoYWRvdyBjYW4gY292ZXIgdW5zZWxlY3RlZCByb3dzKSAqLwogICAgICA6aG9zdCg6bm90KFtyZW9yZGVyaW5nXSkpIFtwYXJ0fj0icm93Il1bc2VsZWN0ZWRdIHsKICAgICAgICB6LWluZGV4OiAxOwogICAgICB9CgogICAgICA6aG9zdCg6bm90KFtyZW9yZGVyaW5nXSkpIFtwYXJ0fj0icm93Il1bc2VsZWN0ZWRdIFtwYXJ0fj0iYm9keS1jZWxsIl06bm90KFtwYXJ0fj0iZGV0YWlscy1jZWxsIl0pIHsKICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodmFyKC0tX2x1bW8tZ3JpZC1zZWxlY3RlZC1yb3ctY29sb3IpLCB2YXIoLS1fbHVtby1ncmlkLXNlbGVjdGVkLXJvdy1jb2xvcikpOwogICAgICAgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQ7CiAgICAgIH0KCiAgICAgIC8qIENvdmVyIHRoZSBib3JkZXIgb2YgYW4gdW5zZWxlY3RlZCByb3cgKi8KICAgICAgOmhvc3QoOm5vdChbdGhlbWV+PSJuby1yb3ctYm9yZGVycyJdKSkgW3BhcnR+PSJyb3ciXVtzZWxlY3RlZF0gW3BhcnR+PSJjZWxsIl06bm90KFtwYXJ0fj0iZGV0YWlscy1jZWxsIl0pIHsKICAgICAgICBib3gtc2hhZG93OiAwIHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLXdpZHRoKSAwIDAgdmFyKC0tX2x1bW8tZ3JpZC1zZWxlY3RlZC1yb3ctY29sb3IpOwogICAgICB9CgogICAgICAvKiBDb21wYWN0ICovCgogICAgICA6aG9zdChbdGhlbWV+PSJjb21wYWN0Il0pIFtwYXJ0PSJyb3ciXTpvbmx5LWNoaWxkIFtwYXJ0fj0iaGVhZGVyLWNlbGwiXSB7CiAgICAgICAgbWluLWhlaWdodDogdmFyKC0tbHVtby1zaXplLW0pOwogICAgICB9CgogICAgICA6aG9zdChbdGhlbWV+PSJjb21wYWN0Il0pIFtwYXJ0fj0iY2VsbCJdIHsKICAgICAgICBtaW4taGVpZ2h0OiB2YXIoLS1sdW1vLXNpemUtcyk7CiAgICAgIH0KCiAgICAgIDpob3N0KFt0aGVtZX49ImNvbXBhY3QiXSkgW3BhcnQ9InJvdyJdW2ZpcnN0XSBbcGFydH49ImNlbGwiXTpub3QoW3BhcnR+PSJkZXRhaWxzLWNlbGwiXSkgewogICAgICAgIG1pbi1oZWlnaHQ6IGNhbGModmFyKC0tbHVtby1zaXplLXMpIC0gdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItd2lkdGgpKTsKICAgICAgfQoKICAgICAgOmhvc3QoW3RoZW1lfj0iY29tcGFjdCJdKSBbcGFydH49ImNlbGwiXSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgICAgcGFkZGluZzogdmFyKC0tbHVtby1zcGFjZS14cykgdmFyKC0tbHVtby1zcGFjZS1zKTsKICAgICAgfQoKICAgICAgLyogV3JhcCBjZWxsIGNvbnRlbnRzICovCgogICAgICA6aG9zdChbdGhlbWV+PSJ3cmFwLWNlbGwtY29udGVudCJdKSBbcGFydH49ImNlbGwiXSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsKICAgICAgfQoKICAgICAgLyogUlRMIHNwZWNpZmljIHN0eWxlcyAqLwoKICAgICAgOmhvc3QoW2Rpcj0icnRsIl0pIFtwYXJ0fj0icm93Il1bZHJhZ3N0YXJ0XSBbcGFydH49ImNlbGwiXVtsYXN0LWNvbHVtbl0gewogICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWx1bW8tYm9yZGVyLXJhZGl1cy1zKSAwIDAgdmFyKC0tbHVtby1ib3JkZXItcmFkaXVzLXMpOwogICAgICB9CgogICAgICA6aG9zdChbZGlyPSJydGwiXSkgW3BhcnR+PSJyb3ciXVtkcmFnc3RhcnRdIFtwYXJ0fj0iY2VsbCJdW2ZpcnN0LWNvbHVtbl0gewogICAgICAgIGJvcmRlci1yYWRpdXM6IDAgdmFyKC0tbHVtby1ib3JkZXItcmFkaXVzLXMpIHZhcigtLWx1bW8tYm9yZGVyLXJhZGl1cy1zKSAwOwogICAgICB9CgogICAgICA6aG9zdChbZGlyPSJydGwiXVt0aGVtZX49ImNvbHVtbi1ib3JkZXJzIl0pIFtwYXJ0fj0iY2VsbCJdOm5vdChbbGFzdC1jb2x1bW5dKTpub3QoW3BhcnR+PSJkZXRhaWxzLWNlbGwiXSkgewogICAgICAgIGJvcmRlci1yaWdodDogbm9uZTsKICAgICAgICBib3JkZXItbGVmdDogdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLV9sdW1vLWdyaWQtc2Vjb25kYXJ5LWJvcmRlci1jb2xvcik7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXI9InJ0bCJdKSBbbGFzdC1mcm96ZW5dIHsKICAgICAgICBib3JkZXItcmlnaHQ6IG5vbmU7CiAgICAgICAgYm9yZGVyLWxlZnQ6IHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLXdpZHRoKSBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpcj0icnRsIl1bb3ZlcmZsb3d+PSJyaWdodCJdKSBbcGFydH49ImNlbGwiXVtsYXN0LWZyb3plbl06bm90KFtwYXJ0fj0iZGV0YWlscy1jZWxsIl0pIHsKICAgICAgICBib3JkZXItbGVmdC1jb2xvcjogdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItY29sb3IpOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSB0aGVtZS1mb3I9InZhYWRpbi1jaGVja2JveCIgaWQ9InZhYWRpbi1ncmlkLXNlbGVjdC1hbGwtY2hlY2tib3gtbHVtbyI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCgudmFhZGluLWdyaWQtc2VsZWN0LWFsbC1jaGVja2JveCkgewogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tbHVtby1mb250LXNpemUtbSk7CiAgICAgIH0KICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+YDtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGhOdC5jb250ZW50KTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE2IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KdmFyIGROdD1uYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUCg/OmhvbmV8YWQ7KD86IFU7KT8gQ1BVKSBPUyAoXGQrKS8pLHBOdD1kTnQmJmROdFsxXT49OCxmTnQ9X3QsbU50PXl0LGdOdD12dDtjb25zdCBfTnQ9TnIoe2JlaGF2aW9yczpbbW8sem9dLF9yYXRpbzouNSxfc2Nyb2xsZXJQYWRkaW5nVG9wOjAsX3Njcm9sbFBvc2l0aW9uOjAsX3BoeXNpY2FsU2l6ZTowLF9waHlzaWNhbEF2ZXJhZ2U6MCxfcGh5c2ljYWxBdmVyYWdlQ291bnQ6MCxfcGh5c2ljYWxUb3A6MCxfdmlydHVhbENvdW50OjAsX2VzdFNjcm9sbEhlaWdodDowLF9zY3JvbGxIZWlnaHQ6MCxfdmlld3BvcnRIZWlnaHQ6MCxfdmlld3BvcnRXaWR0aDowLF9waHlzaWNhbEl0ZW1zOm51bGwsX3BoeXNpY2FsU2l6ZXM6bnVsbCxfZmlyc3RWaXNpYmxlSW5kZXhWYWw6bnVsbCxfY29sbGVjdGlvbjpudWxsLF9sYXN0VmlzaWJsZUluZGV4VmFsOm51bGwsX21heFBhZ2VzOjIsX2ZvY3VzZWRWaXJ0dWFsSW5kZXg6LTEsX2l0ZW1zUGVyUm93OjEsX3Jvd0hlaWdodDowLF90ZW1wbGF0ZUNvc3Q6MCxnZXQgX3BoeXNpY2FsQm90dG9tKCl7cmV0dXJuIHRoaXMuX3BoeXNpY2FsVG9wK3RoaXMuX3BoeXNpY2FsU2l6ZX0sZ2V0IF9zY3JvbGxCb3R0b20oKXtyZXR1cm4gdGhpcy5fc2Nyb2xsUG9zaXRpb24rdGhpcy5fdmlld3BvcnRIZWlnaHR9LGdldCBfdmlydHVhbEVuZCgpe3JldHVybiB0aGlzLl92aXJ0dWFsU3RhcnQrdGhpcy5fcGh5c2ljYWxDb3VudC0xfSxnZXQgX2hpZGRlbkNvbnRlbnRTaXplKCl7cmV0dXJuKHRoaXMuZ3JpZD90aGlzLl9waHlzaWNhbFJvd3MqdGhpcy5fcm93SGVpZ2h0OnRoaXMuX3BoeXNpY2FsU2l6ZSktdGhpcy5fdmlld3BvcnRIZWlnaHR9LGdldCBfbWF4U2Nyb2xsVG9wKCl7cmV0dXJuIHRoaXMuX2VzdFNjcm9sbEhlaWdodC10aGlzLl92aWV3cG9ydEhlaWdodCt0aGlzLl9zY3JvbGxPZmZzZXR9LGdldCBfbWF4VmlydHVhbFN0YXJ0KCl7dmFyIHQ9dGhpcy5fY29udmVydEluZGV4VG9Db21wbGV0ZVJvdyh0aGlzLl92aXJ0dWFsQ291bnQpO3JldHVybiBNYXRoLm1heCgwLHQtdGhpcy5fcGh5c2ljYWxDb3VudCl9LHNldCBfdmlydHVhbFN0YXJ0KHQpe3Q9dGhpcy5fY2xhbXAodCwwLHRoaXMuX21heFZpcnR1YWxTdGFydCksdGhpcy5ncmlkJiYodC09dCV0aGlzLl9pdGVtc1BlclJvdyksdGhpcy5fdmlydHVhbFN0YXJ0VmFsPXR9LGdldCBfdmlydHVhbFN0YXJ0KCl7cmV0dXJuIHRoaXMuX3ZpcnR1YWxTdGFydFZhbHx8MH0sc2V0IF9waHlzaWNhbFN0YXJ0KHQpeyh0JT10aGlzLl9waHlzaWNhbENvdW50KTwwJiYodD10aGlzLl9waHlzaWNhbENvdW50K3QpLHRoaXMuZ3JpZCYmKHQtPXQldGhpcy5faXRlbXNQZXJSb3cpLHRoaXMuX3BoeXNpY2FsU3RhcnRWYWw9dH0sZ2V0IF9waHlzaWNhbFN0YXJ0KCl7cmV0dXJuIHRoaXMuX3BoeXNpY2FsU3RhcnRWYWx8fDB9LGdldCBfcGh5c2ljYWxFbmQoKXtyZXR1cm4odGhpcy5fcGh5c2ljYWxTdGFydCt0aGlzLl9waHlzaWNhbENvdW50LTEpJXRoaXMuX3BoeXNpY2FsQ291bnR9LHNldCBfcGh5c2ljYWxDb3VudCh0KXt0aGlzLl9waHlzaWNhbENvdW50VmFsPXR9LGdldCBfcGh5c2ljYWxDb3VudCgpe3JldHVybiB0aGlzLl9waHlzaWNhbENvdW50VmFsfHwwfSxnZXQgX29wdFBoeXNpY2FsU2l6ZSgpe3JldHVybiAwPT09dGhpcy5fdmlld3BvcnRIZWlnaHQ/MS8wOnRoaXMuX3ZpZXdwb3J0SGVpZ2h0KnRoaXMuX21heFBhZ2VzfSxnZXQgX2lzVmlzaWJsZSgpe3JldHVybiBCb29sZWFuKHRoaXMub2Zmc2V0V2lkdGh8fHRoaXMub2Zmc2V0SGVpZ2h0KX0sZ2V0IGZpcnN0VmlzaWJsZUluZGV4KCl7dmFyIHQ9dGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw7aWYobnVsbD09dCl7dmFyIGU9dGhpcy5fcGh5c2ljYWxUb3ArdGhpcy5fc2Nyb2xsT2Zmc2V0O3Q9dGhpcy5faXRlcmF0ZUl0ZW1zKChmdW5jdGlvbih0LG4pe3JldHVybihlKz10aGlzLl9nZXRQaHlzaWNhbFNpemVJbmNyZW1lbnQodCkpPnRoaXMuX3Njcm9sbFBvc2l0aW9uP3RoaXMuZ3JpZD9uLW4ldGhpcy5faXRlbXNQZXJSb3c6bjp0aGlzLmdyaWQmJnRoaXMuX3ZpcnR1YWxDb3VudC0xPT09bj9uLW4ldGhpcy5faXRlbXNQZXJSb3c6dm9pZCAwfSkpfHwwLHRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsPXR9cmV0dXJuIHR9LGdldCBsYXN0VmlzaWJsZUluZGV4KCl7dmFyIHQ9dGhpcy5fbGFzdFZpc2libGVJbmRleFZhbDtpZihudWxsPT10KXtpZih0aGlzLmdyaWQpdD1NYXRoLm1pbih0aGlzLl92aXJ0dWFsQ291bnQsdGhpcy5maXJzdFZpc2libGVJbmRleCt0aGlzLl9lc3RSb3dzSW5WaWV3KnRoaXMuX2l0ZW1zUGVyUm93LTEpO2Vsc2V7dmFyIGU9dGhpcy5fcGh5c2ljYWxUb3ArdGhpcy5fc2Nyb2xsT2Zmc2V0O3RoaXMuX2l0ZXJhdGVJdGVtcygoZnVuY3Rpb24obixpKXtlPHRoaXMuX3Njcm9sbEJvdHRvbSYmKHQ9aSksZSs9dGhpcy5fZ2V0UGh5c2ljYWxTaXplSW5jcmVtZW50KG4pfSkpfXRoaXMuX2xhc3RWaXNpYmxlSW5kZXhWYWw9dH1yZXR1cm4gdH0sZ2V0IF9zY3JvbGxPZmZzZXQoKXtyZXR1cm4gdGhpcy5fc2Nyb2xsZXJQYWRkaW5nVG9wfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX2RlYm91bmNlKCJfcmVuZGVyIix0aGlzLl9yZW5kZXIsZk50KSx0aGlzLmxpc3Rlbih0aGlzLCJpcm9uLXJlc2l6ZSIsIl9yZXNpemVIYW5kbGVyIil9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy51bmxpc3Rlbih0aGlzLCJpcm9uLXJlc2l6ZSIsIl9yZXNpemVIYW5kbGVyIil9LHVwZGF0ZVZpZXdwb3J0Qm91bmRhcmllczpmdW5jdGlvbigpe3ZhciB0PXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMpO3RoaXMuX3Njcm9sbGVyUGFkZGluZ1RvcD10aGlzLnNjcm9sbFRhcmdldD09PXRoaXM/MDpwYXJzZUludCh0WyJwYWRkaW5nLXRvcCJdLDEwKSx0aGlzLl9pc1JUTD1Cb29sZWFuKCJydGwiPT09dC5kaXJlY3Rpb24pLHRoaXMuX3ZpZXdwb3J0V2lkdGg9dGhpcy4kLml0ZW1zLm9mZnNldFdpZHRoLHRoaXMuX3ZpZXdwb3J0SGVpZ2h0PXRoaXMuX3Njcm9sbFRhcmdldEhlaWdodCx0aGlzLmdyaWQmJnRoaXMuX3VwZGF0ZUdyaWRNZXRyaWNzKCl9LF9zY3JvbGxIYW5kbGVyOmZ1bmN0aW9uKCl7dmFyIHQ9TWF0aC5tYXgoMCxNYXRoLm1pbih0aGlzLl9tYXhTY3JvbGxUb3AsdGhpcy5fc2Nyb2xsVG9wKSksZT10LXRoaXMuX3Njcm9sbFBvc2l0aW9uLG49ZT49MDtpZih0aGlzLl9zY3JvbGxQb3NpdGlvbj10LHRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsPW51bGwsdGhpcy5fbGFzdFZpc2libGVJbmRleFZhbD1udWxsLE1hdGguYWJzKGUpPnRoaXMuX3BoeXNpY2FsU2l6ZSYmdGhpcy5fcGh5c2ljYWxTaXplPjApe2UtPXRoaXMuX3Njcm9sbE9mZnNldDt2YXIgaT1NYXRoLnJvdW5kKGUvdGhpcy5fcGh5c2ljYWxBdmVyYWdlKSp0aGlzLl9pdGVtc1BlclJvdzt0aGlzLl92aXJ0dWFsU3RhcnQ9dGhpcy5fdmlydHVhbFN0YXJ0K2ksdGhpcy5fcGh5c2ljYWxTdGFydD10aGlzLl9waHlzaWNhbFN0YXJ0K2ksdGhpcy5fcGh5c2ljYWxUb3A9TWF0aC5mbG9vcih0aGlzLl92aXJ0dWFsU3RhcnQvdGhpcy5faXRlbXNQZXJSb3cpKnRoaXMuX3BoeXNpY2FsQXZlcmFnZSx0aGlzLl91cGRhdGUoKX1lbHNlIGlmKHRoaXMuX3BoeXNpY2FsQ291bnQ+MCl7dmFyIHI9dGhpcy5fZ2V0UmV1c2FibGVzKG4pO24/KHRoaXMuX3BoeXNpY2FsVG9wPXIucGh5c2ljYWxUb3AsdGhpcy5fdmlydHVhbFN0YXJ0PXRoaXMuX3ZpcnR1YWxTdGFydCtyLmluZGV4ZXMubGVuZ3RoLHRoaXMuX3BoeXNpY2FsU3RhcnQ9dGhpcy5fcGh5c2ljYWxTdGFydCtyLmluZGV4ZXMubGVuZ3RoKToodGhpcy5fdmlydHVhbFN0YXJ0PXRoaXMuX3ZpcnR1YWxTdGFydC1yLmluZGV4ZXMubGVuZ3RoLHRoaXMuX3BoeXNpY2FsU3RhcnQ9dGhpcy5fcGh5c2ljYWxTdGFydC1yLmluZGV4ZXMubGVuZ3RoKSx0aGlzLl91cGRhdGUoci5pbmRleGVzLG4/bnVsbDpyLmluZGV4ZXMpLHRoaXMuX2RlYm91bmNlKCJfaW5jcmVhc2VQb29sSWZOZWVkZWQiLHRoaXMuX2luY3JlYXNlUG9vbElmTmVlZGVkLmJpbmQodGhpcywwKSxnTnQpfX0sX2dldFJldXNhYmxlczpmdW5jdGlvbih0KXt2YXIgZSxuLGkscj1bXSxvPXRoaXMuX2hpZGRlbkNvbnRlbnRTaXplKnRoaXMuX3JhdGlvLGE9dGhpcy5fdmlydHVhbFN0YXJ0LHM9dGhpcy5fdmlydHVhbEVuZCxsPXRoaXMuX3BoeXNpY2FsQ291bnQsYz10aGlzLl9waHlzaWNhbFRvcCt0aGlzLl9zY3JvbGxPZmZzZXQsdT10aGlzLl9zY3JvbGxUb3AsaD10aGlzLl9zY3JvbGxCb3R0b207Zm9yKHQ/KGU9dGhpcy5fcGh5c2ljYWxTdGFydCxuPXUtYyk6KGU9dGhpcy5fcGh5c2ljYWxFbmQsbj10aGlzLl9waHlzaWNhbEJvdHRvbSt0aGlzLl9zY3JvbGxPZmZzZXQtaCk7bi09aT10aGlzLl9nZXRQaHlzaWNhbFNpemVJbmNyZW1lbnQoZSksIShyLmxlbmd0aD49bHx8bjw9byk7KWlmKHQpe2lmKHMrci5sZW5ndGgrMT49dGhpcy5fdmlydHVhbENvdW50KWJyZWFrO2lmKGMraT49dS10aGlzLl9zY3JvbGxPZmZzZXQpYnJlYWs7ci5wdXNoKGUpLGMrPWksZT0oZSsxKSVsfWVsc2V7aWYoYS1yLmxlbmd0aDw9MClicmVhaztpZihjK3RoaXMuX3BoeXNpY2FsU2l6ZS1pPD1oKWJyZWFrO3IucHVzaChlKSxjLT1pLGU9MD09PWU/bC0xOmUtMX1yZXR1cm57aW5kZXhlczpyLHBoeXNpY2FsVG9wOmMtdGhpcy5fc2Nyb2xsT2Zmc2V0fX0sX3VwZGF0ZTpmdW5jdGlvbih0LGUpe2lmKCEodCYmMD09PXQubGVuZ3RofHwwPT09dGhpcy5fcGh5c2ljYWxDb3VudCkpe2lmKHRoaXMuX21hbmFnZUZvY3VzKCksdGhpcy5fYXNzaWduTW9kZWxzKHQpLHRoaXMuX3VwZGF0ZU1ldHJpY3ModCksZSlmb3IoO2UubGVuZ3RoOyl7dmFyIG49ZS5wb3AoKTt0aGlzLl9waHlzaWNhbFRvcC09dGhpcy5fZ2V0UGh5c2ljYWxTaXplSW5jcmVtZW50KG4pfXRoaXMuX3Bvc2l0aW9uSXRlbXMoKSx0aGlzLl91cGRhdGVTY3JvbGxlclNpemUoKX19LF9pc0NsaWVudEZ1bGw6ZnVuY3Rpb24oKXtyZXR1cm4gMCE9dGhpcy5fc2Nyb2xsQm90dG9tJiZ0aGlzLl9waHlzaWNhbEJvdHRvbS0xPj10aGlzLl9zY3JvbGxCb3R0b20mJnRoaXMuX3BoeXNpY2FsVG9wPD10aGlzLl9zY3JvbGxQb3NpdGlvbn0sX2luY3JlYXNlUG9vbElmTmVlZGVkOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2NsYW1wKHRoaXMuX3BoeXNpY2FsQ291bnQrdCwzLHRoaXMuX3ZpcnR1YWxDb3VudC10aGlzLl92aXJ0dWFsU3RhcnQpLG49KGU9dGhpcy5fY29udmVydEluZGV4VG9Db21wbGV0ZVJvdyhlKSktdGhpcy5fcGh5c2ljYWxDb3VudCxpPU1hdGgucm91bmQoLjUqdGhpcy5fcGh5c2ljYWxDb3VudCk7aWYoIShuPDApKXtpZihuPjApe3ZhciByPXdpbmRvdy5wZXJmb3JtYW5jZS5ub3coKTtbXS5wdXNoLmFwcGx5KHRoaXMuX3BoeXNpY2FsSXRlbXMsdGhpcy5fY3JlYXRlUG9vbChuKSk7Zm9yKHZhciBvPTA7bzxuO28rKyl0aGlzLl9waHlzaWNhbFNpemVzLnB1c2goMCk7dGhpcy5fcGh5c2ljYWxDb3VudD10aGlzLl9waHlzaWNhbENvdW50K24sdGhpcy5fcGh5c2ljYWxTdGFydD50aGlzLl9waHlzaWNhbEVuZCYmdGhpcy5faXNJbmRleFJlbmRlcmVkKHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXgpJiZ0aGlzLl9nZXRQaHlzaWNhbEluZGV4KHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXgpPHRoaXMuX3BoeXNpY2FsRW5kJiYodGhpcy5fcGh5c2ljYWxTdGFydD10aGlzLl9waHlzaWNhbFN0YXJ0K24pLHRoaXMuX3VwZGF0ZSgpLHRoaXMuX3RlbXBsYXRlQ29zdD0od2luZG93LnBlcmZvcm1hbmNlLm5vdygpLXIpL24saT1NYXRoLnJvdW5kKC41KnRoaXMuX3BoeXNpY2FsQ291bnQpfXRoaXMuX3ZpcnR1YWxFbmQ+PXRoaXMuX3ZpcnR1YWxDb3VudC0xfHwwPT09aXx8KHRoaXMuX2lzQ2xpZW50RnVsbCgpP3RoaXMuX3BoeXNpY2FsU2l6ZTx0aGlzLl9vcHRQaHlzaWNhbFNpemUmJnRoaXMuX2RlYm91bmNlKCJfaW5jcmVhc2VQb29sSWZOZWVkZWQiLHRoaXMuX2luY3JlYXNlUG9vbElmTmVlZGVkLmJpbmQodGhpcyx0aGlzLl9jbGFtcChNYXRoLnJvdW5kKDUwL3RoaXMuX3RlbXBsYXRlQ29zdCksMSxpKSksbU50KTp0aGlzLl9kZWJvdW5jZSgiX2luY3JlYXNlUG9vbElmTmVlZGVkIix0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZC5iaW5kKHRoaXMsaSksZ050KSl9fSxfcmVuZGVyOmZ1bmN0aW9uKCl7aWYodGhpcy5pc0F0dGFjaGVkJiZ0aGlzLl9pc1Zpc2libGUpaWYoMCE9PXRoaXMuX3BoeXNpY2FsQ291bnQpe3ZhciB0PXRoaXMuX2dldFJldXNhYmxlcyghMCk7dGhpcy5fcGh5c2ljYWxUb3A9dC5waHlzaWNhbFRvcCx0aGlzLl92aXJ0dWFsU3RhcnQ9dGhpcy5fdmlydHVhbFN0YXJ0K3QuaW5kZXhlcy5sZW5ndGgsdGhpcy5fcGh5c2ljYWxTdGFydD10aGlzLl9waHlzaWNhbFN0YXJ0K3QuaW5kZXhlcy5sZW5ndGgsdGhpcy5fdXBkYXRlKHQuaW5kZXhlcyksdGhpcy5fdXBkYXRlKCksdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQoMCl9ZWxzZSB0aGlzLl92aXJ0dWFsQ291bnQ+MCYmKHRoaXMudXBkYXRlVmlld3BvcnRCb3VuZGFyaWVzKCksdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQoMykpfSxfaXRlbXNDaGFuZ2VkOmZ1bmN0aW9uKHQpeyJpdGVtcyI9PT10LnBhdGgmJih0aGlzLl92aXJ0dWFsU3RhcnQ9MCx0aGlzLl9waHlzaWNhbFRvcD0wLHRoaXMuX3ZpcnR1YWxDb3VudD10aGlzLml0ZW1zP3RoaXMuaXRlbXMubGVuZ3RoOjAsdGhpcy5fY29sbGVjdGlvbj1udWxsLHRoaXMuX3BoeXNpY2FsSW5kZXhGb3JLZXk9e30sdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGwsdGhpcy5fcGh5c2ljYWxDb3VudD10aGlzLl9waHlzaWNhbENvdW50fHwwLHRoaXMuX3BoeXNpY2FsSXRlbXM9dGhpcy5fcGh5c2ljYWxJdGVtc3x8W10sdGhpcy5fcGh5c2ljYWxTaXplcz10aGlzLl9waHlzaWNhbFNpemVzfHxbXSx0aGlzLl9waHlzaWNhbFN0YXJ0PTAsdGhpcy5fc2Nyb2xsVG9wPnRoaXMuX3Njcm9sbE9mZnNldCYmdGhpcy5fcmVzZXRTY3JvbGxQb3NpdGlvbigwKSx0aGlzLl9yZW1vdmVGb2N1c2VkSXRlbSgpLHRoaXMuX2RlYm91bmNlKCJfcmVuZGVyIix0aGlzLl9yZW5kZXIsZk50KSl9LF9pdGVyYXRlSXRlbXM6ZnVuY3Rpb24odCxlKXt2YXIgbixpLHIsbztpZigyPT09YXJndW1lbnRzLmxlbmd0aCYmZSl7Zm9yKG89MDtvPGUubGVuZ3RoO28rKylpZihpPXRoaXMuX2NvbXB1dGVWaWR4KG49ZVtvXSksbnVsbCE9KHI9dC5jYWxsKHRoaXMsbixpKSkpcmV0dXJuIHJ9ZWxzZXtmb3Iobj10aGlzLl9waHlzaWNhbFN0YXJ0LGk9dGhpcy5fdmlydHVhbFN0YXJ0O248dGhpcy5fcGh5c2ljYWxDb3VudDtuKyssaSsrKWlmKG51bGwhPShyPXQuY2FsbCh0aGlzLG4saSkpKXJldHVybiByO2ZvcihuPTA7bjx0aGlzLl9waHlzaWNhbFN0YXJ0O24rKyxpKyspaWYobnVsbCE9KHI9dC5jYWxsKHRoaXMsbixpKSkpcmV0dXJuIHJ9fSxfY29tcHV0ZVZpZHg6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PXRoaXMuX3BoeXNpY2FsU3RhcnQ/dGhpcy5fdmlydHVhbFN0YXJ0Kyh0LXRoaXMuX3BoeXNpY2FsU3RhcnQpOnRoaXMuX3ZpcnR1YWxTdGFydCsodGhpcy5fcGh5c2ljYWxDb3VudC10aGlzLl9waHlzaWNhbFN0YXJ0KSt0fSxfdXBkYXRlTWV0cmljczpmdW5jdGlvbih0KXt6aSgpO3ZhciBlPTAsbj0wLGk9dGhpcy5fcGh5c2ljYWxBdmVyYWdlQ291bnQscj10aGlzLl9waHlzaWNhbEF2ZXJhZ2U7dGhpcy5faXRlcmF0ZUl0ZW1zKChmdW5jdGlvbih0LGkpe24rPXRoaXMuX3BoeXNpY2FsU2l6ZXNbdF0sdGhpcy5fcGh5c2ljYWxTaXplc1t0XT10aGlzLl9waHlzaWNhbEl0ZW1zW3RdLm9mZnNldEhlaWdodCxlKz10aGlzLl9waHlzaWNhbFNpemVzW3RdLHRoaXMuX3BoeXNpY2FsQXZlcmFnZUNvdW50Kz10aGlzLl9waHlzaWNhbFNpemVzW3RdPzE6MH0pLHQpLHRoaXMuZ3JpZD8odGhpcy5fdXBkYXRlR3JpZE1ldHJpY3MoKSx0aGlzLl9waHlzaWNhbFNpemU9TWF0aC5jZWlsKHRoaXMuX3BoeXNpY2FsQ291bnQvdGhpcy5faXRlbXNQZXJSb3cpKnRoaXMuX3Jvd0hlaWdodCk6KG49MT09PXRoaXMuX2l0ZW1zUGVyUm93P246TWF0aC5jZWlsKHRoaXMuX3BoeXNpY2FsQ291bnQvdGhpcy5faXRlbXNQZXJSb3cpKnRoaXMuX3Jvd0hlaWdodCx0aGlzLl9waHlzaWNhbFNpemU9dGhpcy5fcGh5c2ljYWxTaXplK2Utbix0aGlzLl9pdGVtc1BlclJvdz0xKSx0aGlzLl9waHlzaWNhbEF2ZXJhZ2VDb3VudCE9PWkmJih0aGlzLl9waHlzaWNhbEF2ZXJhZ2U9TWF0aC5yb3VuZCgocippK2UpL3RoaXMuX3BoeXNpY2FsQXZlcmFnZUNvdW50KSl9LF9wb3NpdGlvbkl0ZW1zOmZ1bmN0aW9uKCl7dGhpcy5fYWRqdXN0U2Nyb2xsUG9zaXRpb24oKTt2YXIgdD10aGlzLl9waHlzaWNhbFRvcDt0aGlzLl9pdGVyYXRlSXRlbXMoKGZ1bmN0aW9uKGUsbil7dGhpcy50cmFuc2xhdGUzZCgwLHQrInB4IiwwLHRoaXMuX3BoeXNpY2FsSXRlbXNbZV0pLHQrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbZV19KSl9LF9nZXRQaHlzaWNhbFNpemVJbmNyZW1lbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZ3JpZD90aGlzLl9jb21wdXRlVmlkeCh0KSV0aGlzLl9pdGVtc1BlclJvdyE9dGhpcy5faXRlbXNQZXJSb3ctMT8wOnRoaXMuX3Jvd0hlaWdodDp0aGlzLl9waHlzaWNhbFNpemVzW3RdfSxfYWRqdXN0U2Nyb2xsUG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgdD0wPT09dGhpcy5fdmlydHVhbFN0YXJ0P3RoaXMuX3BoeXNpY2FsVG9wOk1hdGgubWluKHRoaXMuX3Njcm9sbFBvc2l0aW9uK3RoaXMuX3BoeXNpY2FsVG9wLDApO2lmKDAhPT10KXt0aGlzLl9waHlzaWNhbFRvcD10aGlzLl9waHlzaWNhbFRvcC10O3ZhciBlPXRoaXMuX3Njcm9sbFRvcDshcE50JiZlPjAmJnRoaXMuX3Jlc2V0U2Nyb2xsUG9zaXRpb24oZS10KX19LF9yZXNldFNjcm9sbFBvc2l0aW9uOmZ1bmN0aW9uKHQpe3RoaXMuc2Nyb2xsVGFyZ2V0JiZ0Pj0wJiYodGhpcy5fc2Nyb2xsVG9wPXQsdGhpcy5fc2Nyb2xsUG9zaXRpb249dGhpcy5fc2Nyb2xsVG9wKX0sX3VwZGF0ZVNjcm9sbGVyU2l6ZTpmdW5jdGlvbih0KXt0aGlzLl9lc3RTY3JvbGxIZWlnaHQ9dGhpcy5ncmlkP3RoaXMuX3ZpcnR1YWxSb3dDb3VudCp0aGlzLl9yb3dIZWlnaHQ6dGhpcy5fcGh5c2ljYWxCb3R0b20rTWF0aC5tYXgodGhpcy5fdmlydHVhbENvdW50LXRoaXMuX3BoeXNpY2FsQ291bnQtdGhpcy5fdmlydHVhbFN0YXJ0LDApKnRoaXMuX3BoeXNpY2FsQXZlcmFnZSwoKHQ9KHQ9KHQ9dHx8MD09PXRoaXMuX3Njcm9sbEhlaWdodCl8fHRoaXMuX3Njcm9sbFBvc2l0aW9uPj10aGlzLl9lc3RTY3JvbGxIZWlnaHQtdGhpcy5fcGh5c2ljYWxTaXplKXx8dGhpcy5ncmlkJiZ0aGlzLiQuaXRlbXMuc3R5bGUuaGVpZ2h0PHRoaXMuX2VzdFNjcm9sbEhlaWdodCl8fE1hdGguYWJzKHRoaXMuX2VzdFNjcm9sbEhlaWdodC10aGlzLl9zY3JvbGxIZWlnaHQpPj10aGlzLl92aWV3cG9ydEhlaWdodCkmJih0aGlzLiQuaXRlbXMuc3R5bGUuaGVpZ2h0PXRoaXMuX2VzdFNjcm9sbEhlaWdodCsicHgiLHRoaXMuX3Njcm9sbEhlaWdodD10aGlzLl9lc3RTY3JvbGxIZWlnaHQpfSxzY3JvbGxUb0luZGV4OmZ1bmN0aW9uKHQpe2lmKCEoIm51bWJlciIhPXR5cGVvZiB0fHx0PDB8fHQ+dGhpcy5pdGVtcy5sZW5ndGgtMSkmJih6aSgpLDAhPT10aGlzLl9waHlzaWNhbENvdW50KSl7dD10aGlzLl9jbGFtcCh0LDAsdGhpcy5fdmlydHVhbENvdW50LTEpLCghdGhpcy5faXNJbmRleFJlbmRlcmVkKHQpfHx0Pj10aGlzLl9tYXhWaXJ0dWFsU3RhcnQpJiYodGhpcy5fdmlydHVhbFN0YXJ0PXRoaXMuZ3JpZD90LTIqdGhpcy5faXRlbXNQZXJSb3c6dC0xKSx0aGlzLl9tYW5hZ2VGb2N1cygpLHRoaXMuX2Fzc2lnbk1vZGVscygpLHRoaXMuX3VwZGF0ZU1ldHJpY3MoKSx0aGlzLl9waHlzaWNhbFRvcD1NYXRoLmZsb29yKHRoaXMuX3ZpcnR1YWxTdGFydC90aGlzLl9pdGVtc1BlclJvdykqdGhpcy5fcGh5c2ljYWxBdmVyYWdlO2Zvcih2YXIgZT10aGlzLl9waHlzaWNhbFN0YXJ0LG49dGhpcy5fdmlydHVhbFN0YXJ0LGk9MCxyPXRoaXMuX2hpZGRlbkNvbnRlbnRTaXplO248dCYmaTw9cjspaSs9dGhpcy5fZ2V0UGh5c2ljYWxTaXplSW5jcmVtZW50KGUpLGU9KGUrMSkldGhpcy5fcGh5c2ljYWxDb3VudCxuKys7dGhpcy5fdXBkYXRlU2Nyb2xsZXJTaXplKCEwKSx0aGlzLl9wb3NpdGlvbkl0ZW1zKCksdGhpcy5fcmVzZXRTY3JvbGxQb3NpdGlvbih0aGlzLl9waHlzaWNhbFRvcCt0aGlzLl9zY3JvbGxPZmZzZXQraSksdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQoMCksdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGx9fSxfcmVzZXRBdmVyYWdlOmZ1bmN0aW9uKCl7dGhpcy5fcGh5c2ljYWxBdmVyYWdlPTAsdGhpcy5fcGh5c2ljYWxBdmVyYWdlQ291bnQ9MH0sX3Jlc2l6ZUhhbmRsZXI6ZnVuY3Rpb24oKXt0aGlzLl9kZWJvdW5jZSgiX3JlbmRlciIsKGZ1bmN0aW9uKCl7dGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGwsdGhpcy51cGRhdGVWaWV3cG9ydEJvdW5kYXJpZXMoKSx0aGlzLl9pc1Zpc2libGU/KHRoaXMudG9nZ2xlU2Nyb2xsTGlzdGVuZXIoITApLHRoaXMuX3Jlc2V0QXZlcmFnZSgpLHRoaXMuX3JlbmRlcigpKTp0aGlzLnRvZ2dsZVNjcm9sbExpc3RlbmVyKCExKX0pLGZOdCl9LF9jb252ZXJ0SW5kZXhUb0NvbXBsZXRlUm93OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9pdGVtc1BlclJvdz10aGlzLl9pdGVtc1BlclJvd3x8MSx0aGlzLmdyaWQ/TWF0aC5jZWlsKHQvdGhpcy5faXRlbXNQZXJSb3cpKnRoaXMuX2l0ZW1zUGVyUm93OnR9LF9pc0luZGV4UmVuZGVyZWQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PXRoaXMuX3ZpcnR1YWxTdGFydCYmdDw9dGhpcy5fdmlydHVhbEVuZH0sX2dldFBoeXNpY2FsSW5kZXg6ZnVuY3Rpb24odCl7cmV0dXJuKHRoaXMuX3BoeXNpY2FsU3RhcnQrKHQtdGhpcy5fdmlydHVhbFN0YXJ0KSkldGhpcy5fcGh5c2ljYWxDb3VudH0sX2NsYW1wOmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gTWF0aC5taW4obixNYXRoLm1heChlLHQpKX0sX2RlYm91bmNlOmZ1bmN0aW9uKHQsZSxuKXt0aGlzLl9kZWJvdW5jZXJzPXRoaXMuX2RlYm91bmNlcnN8fHt9LHRoaXMuX2RlYm91bmNlcnNbdF09RW4uZGVib3VuY2UodGhpcy5fZGVib3VuY2Vyc1t0XSxuLGUuYmluZCh0aGlzKSksQ24odGhpcy5fZGVib3VuY2Vyc1t0XSl9fSk7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBWYWFkaW4gTHRkLgogICAgVGhpcyBwcm9ncmFtIGlzIGF2YWlsYWJsZSB1bmRlciBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCwgYXZhaWxhYmxlIGF0IGh0dHBzOi8vdmFhZGluLmNvbS9saWNlbnNlLwogICAgKi9jbGFzcyB5TnQgZXh0ZW5kcyBfTnR7c3RhdGljIGdldCBpcygpe3JldHVybiJ2YWFkaW4tZ3JpZC1zY3JvbGxlciJ9c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue3NpemU6e3R5cGU6TnVtYmVyLG5vdGlmeTohMH0sX3ZpZHhPZmZzZXQ6e3ZhbHVlOjB9fX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX2VmZmVjdGl2ZVNpemVDaGFuZ2VkKF9lZmZlY3RpdmVTaXplKSJdfWNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLl9zY3JvbGxIYW5kbGVyKCl9X3VwZGF0ZVNjcm9sbGVySXRlbSh0LGUpe31fYWZ0ZXJTY3JvbGwoKXt9X2dldFJvd1RhcmdldCgpe31fY3JlYXRlU2Nyb2xsZXJSb3dzKCl7fV9jYW5Qb3B1bGF0ZSgpe31zY3JvbGxUb0luZGV4KHQpe3RoaXMuX3dhcm5Qcml2YXRlQVBJQWNjZXNzKCJzY3JvbGxUb0luZGV4IiksdGhpcy5fc2Nyb2xsaW5nVG9JbmRleD0hMCx0PU1hdGgubWluKE1hdGgubWF4KHQsMCksdGhpcy5fZWZmZWN0aXZlU2l6ZS0xKSx0aGlzLiQudGFibGUuc2Nyb2xsVG9wPXQvdGhpcy5fZWZmZWN0aXZlU2l6ZSoodGhpcy4kLnRhYmxlLnNjcm9sbEhlaWdodC10aGlzLiQudGFibGUub2Zmc2V0SGVpZ2h0KSx0aGlzLl9zY3JvbGxIYW5kbGVyKCksdGhpcy5fYWNjZXNzSXJvbkxpc3RBUEkoKCgpPT50aGlzLl9tYXhTY3JvbGxUb3ApKSYmdGhpcy5fdmlydHVhbENvdW50PHRoaXMuX2VmZmVjdGl2ZVNpemUmJnRoaXMuX2FkanVzdFZpcnR1YWxJbmRleE9mZnNldCgxZTYpLHRoaXMuX2FjY2Vzc0lyb25MaXN0QVBJKCgoKT0+c3VwZXIuc2Nyb2xsVG9JbmRleCh0LXRoaXMuX3ZpZHhPZmZzZXQpKSksdGhpcy5fc2Nyb2xsSGFuZGxlcigpO2NvbnN0IGU9QXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZpbHRlcigoZT0+ZS5pbmRleD09PXQpKVswXTtpZihlKXtjb25zdCB0PWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wLXRoaXMuJC5oZWFkZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tO01hdGguYWJzKHQpPjEmJih0aGlzLiQudGFibGUuc2Nyb2xsVG9wKz10LHRoaXMuX3Njcm9sbEhhbmRsZXIoKSl9dGhpcy5fc2Nyb2xsaW5nVG9JbmRleD0hMX1fZWZmZWN0aXZlU2l6ZUNoYW5nZWQodCl7bGV0IGUsbj0wO3RoaXMuX2l0ZXJhdGVJdGVtcygoKHQsaSk9PntpZihpPT09dGhpcy5fZmlyc3RWaXNpYmxlSW5kZXgpe2NvbnN0IGk9dGhpcy5fcGh5c2ljYWxJdGVtc1t0XTtlPWkuaW5kZXgsbj1pLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcH19KSksdGhpcy5pdGVtcyYmdDx0aGlzLml0ZW1zLmxlbmd0aCYmKHRoaXMuX3Njcm9sbFRvcD0wKSxBcnJheS5pc0FycmF5KHRoaXMuaXRlbXMpfHwodGhpcy5pdGVtcz17bGVuZ3RoOk1hdGgubWluKHQsdGhpcy5fZWRnZXx8dGhpcy5faWU/M2U0OjFlNSl9KSx0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSSgoKCk9PnN1cGVyLl9pdGVtc0NoYW5nZWQoe3BhdGg6Iml0ZW1zIn0pKSksdGhpcy5fdmlydHVhbENvdW50PU1hdGgubWluKHRoaXMuaXRlbXMubGVuZ3RoLHQpfHwwLDA9PT10aGlzLl9zY3JvbGxUb3AmJih0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSSgoKCk9PnRoaXMuX3Njcm9sbFRvSW5kZXgoTWF0aC5taW4odC0xLGUpKSkpLHRoaXMuX2l0ZXJhdGVJdGVtcygoKHQsaSk9Pntjb25zdCByPXRoaXMuX3BoeXNpY2FsSXRlbXNbdF07aWYoci5pbmRleD09PWUmJih0aGlzLiQudGFibGUuc2Nyb2xsVG9wKz1NYXRoLnJvdW5kKHIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wLW4pKSxyLmluZGV4PT09dGhpcy5fZm9jdXNlZEl0ZW1JbmRleCYmdGhpcy5faXRlbXNGb2N1c2FibGUmJnRoaXMuJC5pdGVtcy5jb250YWlucyh0aGlzLnNoYWRvd1Jvb3QuYWN0aXZlRWxlbWVudCkpe2NvbnN0IHQ9QXJyYXkuZnJvbSh0aGlzLl9pdGVtc0ZvY3VzYWJsZS5wYXJlbnRFbGVtZW50LmNoaWxkcmVuKS5pbmRleE9mKHRoaXMuX2l0ZW1zRm9jdXNhYmxlKTtyLmNoaWxkcmVuW3RdLmZvY3VzKCl9fSkpKSx0aGlzLl9hc3NpZ25Nb2RlbHMoKSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCgpPT50aGlzLl91cGRhdGUoKSkpLHRoaXMuX191cGRhdGVGb290ZXJQb3NpdGlvbmluZygpLHRoaXMuX2llJiYodGhpcy4kLnRhYmxlLnN0eWxlLmRpc3BsYXk9ImJsb2NrIixzZXRUaW1lb3V0KCgoKT0+e3RoaXMuJC50YWJsZS5zdHlsZS5kaXNwbGF5PSJmbGV4Iix0aGlzLl90cmFuc2xhdGVTdGF0aW9uYXJ5RWxlbWVudHMoKX0pKSl9X3Bvc2l0aW9uSXRlbXMoKXtsZXQgdDt0aGlzLl9hZGp1c3RTY3JvbGxQb3NpdGlvbigpLGlzTmFOKHRoaXMuX3BoeXNpY2FsVG9wKSYmKHQ9ITAsdGhpcy5fcGh5c2ljYWxUb3A9MCk7bGV0IGU9dGhpcy5fcGh5c2ljYWxUb3A7dGhpcy5faXRlcmF0ZUl0ZW1zKCgodCxuKT0+e3RoaXMuX3BoeXNpY2FsSXRlbXNbdF0uc3R5bGUudHJhbnNmb3JtPWB0cmFuc2xhdGVZKCR7ZX1weClgLGUrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbdF19KSksdCYmdGhpcy5fc2Nyb2xsVG9JbmRleCgwKX1faW5jcmVhc2VQb29sSWZOZWVkZWQodCl7MD09PXQmJnRoaXMuX3Njcm9sbGluZ1RvSW5kZXh8fCF0aGlzLl9jYW5Qb3B1bGF0ZSgpfHwhdGhpcy5fZWZmZWN0aXZlU2l6ZXx8KHRoaXMuX2luaXRpYWxQb29sQ3JlYXRlZD90aGlzLl9vcHRQaHlzaWNhbFNpemUhPT0xLzAmJih0aGlzLl9kZWJvdW5jZUluY3JlYXNlUG9vbD1Fbi5kZWJvdW5jZSh0aGlzLl9kZWJvdW5jZUluY3JlYXNlUG9vbCxfdCwoKCk9Pnt0aGlzLl91cGRhdGVNZXRyaWNzKCk7bGV0IHQ9TWF0aC5jZWlsKCh0aGlzLl9vcHRQaHlzaWNhbFNpemUtdGhpcy5fcGh5c2ljYWxTaXplKS90aGlzLl9waHlzaWNhbEF2ZXJhZ2UpO3RoaXMuX3BoeXNpY2FsQ291bnQrdD50aGlzLl9lZmZlY3RpdmVTaXplJiYodD1NYXRoLm1heCgwLHRoaXMuX2VmZmVjdGl2ZVNpemUtdGhpcy5fcGh5c2ljYWxDb3VudCkpLHRoaXMuX3BoeXNpY2FsU2l6ZSYmdD4wJiZ0aGlzLl9vcHRQaHlzaWNhbFNpemUhPT0xLzAmJihzdXBlci5faW5jcmVhc2VQb29sSWZOZWVkZWQodCksdGhpcy5fX3Jlb3JkZXJDaGlsZE5vZGVzKCkpfSkpKToodGhpcy5faW5pdGlhbFBvb2xDcmVhdGVkPSEwLHN1cGVyLl9pbmNyZWFzZVBvb2xJZk5lZWRlZCgyNSkpKX1fX3Jlb3JkZXJDaGlsZE5vZGVzKCl7Y29uc3QgdD1BcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZE5vZGVzKTt0LnJlZHVjZSgoKHQsZSxuLGkpPT57aWYoMD09PW58fGlbbi0xXS5pbmRleD09PWUuaW5kZXgtMSlyZXR1cm4gdH0pLCEwKXx8dC5zb3J0KCgodCxlKT0+dC5pbmRleC1lLmluZGV4KSkuZm9yRWFjaCgodD0+dGhpcy4kLml0ZW1zLmFwcGVuZENoaWxkKHQpKSl9X2NyZWF0ZVBvb2wodCl7Y29uc3QgZT1kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksbj10aGlzLl9jcmVhdGVTY3JvbGxlclJvd3ModCk7bi5mb3JFYWNoKCh0PT5lLmFwcGVuZENoaWxkKHQpKSksdGhpcy5fZ2V0Um93VGFyZ2V0KCkuYXBwZW5kQ2hpbGQoZSk7Y29uc3QgaT10aGlzLnF1ZXJ5U2VsZWN0b3IoIltzbG90XSIpO2lmKGkpe2NvbnN0IHQ9aS5nZXRBdHRyaWJ1dGUoInNsb3QiKTtpLnNldEF0dHJpYnV0ZSgic2xvdCIsImZvby1iYXIiKSxpLnNldEF0dHJpYnV0ZSgic2xvdCIsdCl9cmV0dXJuIGtpKHRoaXMsKCgpPT50aGlzLm5vdGlmeVJlc2l6ZSgpKSksbn1fYXNzaWduTW9kZWxzKHQpe3RoaXMuX2l0ZXJhdGVJdGVtcygoKHQsZSk9Pntjb25zdCBuPXRoaXMuX3BoeXNpY2FsSXRlbXNbdF07dGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJoaWRkZW4iLGU+PXRoaXMuX2VmZmVjdGl2ZVNpemUsbiksdGhpcy5fdXBkYXRlU2Nyb2xsZXJJdGVtKG4sZSsodGhpcy5fdmlkeE9mZnNldHx8MCkpfSksdCl9X3Njcm9sbEhhbmRsZXIoKXtjb25zdCB0PXRoaXMuJC50YWJsZS5zY3JvbGxUb3AtdGhpcy5fc2Nyb2xsUG9zaXRpb247dGhpcy5fYWNjZXNzSXJvbkxpc3RBUEkoc3VwZXIuX3Njcm9sbEhhbmRsZXIpO2NvbnN0IGU9dGhpcy5fdmlkeE9mZnNldDt0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSSgoKCk9PnRoaXMuX21heFNjcm9sbFRvcCkpJiZ0aGlzLl92aXJ0dWFsQ291bnQ8dGhpcy5fZWZmZWN0aXZlU2l6ZT90aGlzLl9hZGp1c3RWaXJ0dWFsSW5kZXhPZmZzZXQodCk6dGhpcy5fdmlkeE9mZnNldD0wLHRoaXMuX3ZpZHhPZmZzZXQhPT1lJiZ0aGlzLl91cGRhdGUoKSx0aGlzLl9hZnRlclNjcm9sbCgpfV9hZGp1c3RWaXJ0dWFsSW5kZXhPZmZzZXQodCl7aWYoTWF0aC5hYnModCk+MWU0KXtpZih0aGlzLl9ub1NjYWxlKXJldHVybiB2b2lkKHRoaXMuX25vU2NhbGU9ITEpO2NvbnN0IHQ9dGhpcy4kLnRhYmxlLnNjcm9sbFRvcC8odGhpcy4kLnRhYmxlLnNjcm9sbEhlaWdodC10aGlzLiQudGFibGUub2Zmc2V0SGVpZ2h0KTt0aGlzLl92aWR4T2Zmc2V0PU1hdGgucm91bmQodCp0aGlzLl9lZmZlY3RpdmVTaXplLXQqdGhpcy5fdmlydHVhbENvdW50KX1lbHNle2NvbnN0IHQ9dGhpcy5fdmlkeE9mZnNldHx8MCxlPTFlMyxuPTEwMDswPT09dGhpcy5fc2Nyb2xsVG9wPyh0aGlzLl92aWR4T2Zmc2V0PTAsdCE9PXRoaXMuX3ZpZHhPZmZzZXQmJnN1cGVyLnNjcm9sbFRvSW5kZXgoMCkpOnRoaXMuZmlyc3RWaXNpYmxlSW5kZXg8ZSYmdGhpcy5fdmlkeE9mZnNldD4wJiYodGhpcy5fdmlkeE9mZnNldC09TWF0aC5taW4odGhpcy5fdmlkeE9mZnNldCxuKSx0IT09dGhpcy5fdmlkeE9mZnNldCYmc3VwZXIuc2Nyb2xsVG9JbmRleCh0aGlzLmZpcnN0VmlzaWJsZUluZGV4Kyh0LXRoaXMuX3ZpZHhPZmZzZXQpKSx0aGlzLl9ub1NjYWxlPSEwKTtjb25zdCBpPXRoaXMuX2VmZmVjdGl2ZVNpemUtdGhpcy5fdmlydHVhbENvdW50O3RoaXMuX3Njcm9sbFRvcD49dGhpcy5fbWF4U2Nyb2xsVG9wJiZ0aGlzLl9tYXhTY3JvbGxUb3A+MD8odGhpcy5fdmlkeE9mZnNldD1pLHQhPT10aGlzLl92aWR4T2Zmc2V0JiZzdXBlci5zY3JvbGxUb0luZGV4KHRoaXMuX3ZpcnR1YWxDb3VudCkpOnRoaXMuZmlyc3RWaXNpYmxlSW5kZXg+dGhpcy5fdmlydHVhbENvdW50LWUmJnRoaXMuX3ZpZHhPZmZzZXQ8aSYmKHRoaXMuX3ZpZHhPZmZzZXQrPU1hdGgubWluKGktdGhpcy5fdmlkeE9mZnNldCxuKSx0IT09dGhpcy5fdmlkeE9mZnNldCYmc3VwZXIuc2Nyb2xsVG9JbmRleCh0aGlzLmZpcnN0VmlzaWJsZUluZGV4LSh0aGlzLl92aWR4T2Zmc2V0LXQpKSx0aGlzLl9ub1NjYWxlPSEwKX19X2FjY2Vzc0lyb25MaXN0QVBJKHQpe3RoaXMuX3dhcm5Qcml2YXRlQVBJQWNjZXNzQXN5bmNFbmFibGVkPSExO2NvbnN0IGU9dC5hcHBseSh0aGlzKTtyZXR1cm4gdGhpcy5fZGVib3VuY2VyV2FyblByaXZhdGVBUElBY2Nlc3M9RW4uZGVib3VuY2UodGhpcy5fZGVib3VuY2VyV2FyblByaXZhdGVBUElBY2Nlc3MsX3QsKCgpPT50aGlzLl93YXJuUHJpdmF0ZUFQSUFjY2Vzc0FzeW5jRW5hYmxlZD0hMCkpLGV9X2RlYm91bmNlUmVuZGVyKHQsZSl7c3VwZXIuX2RlYm91bmNlUmVuZGVyKCgoKT0+dGhpcy5fYWNjZXNzSXJvbkxpc3RBUEkodCkpLGUpfV93YXJuUHJpdmF0ZUFQSUFjY2Vzcyh0KXt0aGlzLl93YXJuUHJpdmF0ZUFQSUFjY2Vzc0FzeW5jRW5hYmxlZCYmY29uc29sZS53YXJuKGBBY2Nlc3NpbmcgcHJpdmF0ZSBBUEkgKCR7dH0pIWApfV9yZW5kZXIoKXt0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSShzdXBlci5fcmVuZGVyKX1fY3JlYXRlRm9jdXNCYWNrZmlsbEl0ZW0oKXt9X211bHRpU2VsZWN0aW9uQ2hhbmdlZCgpe31jbGVhclNlbGVjdGlvbigpe31faXRlbXNDaGFuZ2VkKCl7fV9tYW5hZ2VGb2N1cygpe31fcmVtb3ZlRm9jdXNlZEl0ZW0oKXt9Z2V0IF9maXJzdFZpc2libGVJbmRleCgpe3JldHVybiB0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSSgoKCk9PnN1cGVyLmZpcnN0VmlzaWJsZUluZGV4KSl9Z2V0IF9sYXN0VmlzaWJsZUluZGV4KCl7cmV0dXJuIHRoaXMuX2FjY2Vzc0lyb25MaXN0QVBJKCgoKT0+c3VwZXIubGFzdFZpc2libGVJbmRleCkpfV9zY3JvbGxUb0luZGV4KHQpe3RoaXMuX2FjY2Vzc0lyb25MaXN0QVBJKCgoKT0+dGhpcy5zY3JvbGxUb0luZGV4KHQpKSl9Z2V0IGZpcnN0VmlzaWJsZUluZGV4KCl7cmV0dXJuIHRoaXMuX3dhcm5Qcml2YXRlQVBJQWNjZXNzKCJmaXJzdFZpc2libGVJbmRleCIpLHN1cGVyLmZpcnN0VmlzaWJsZUluZGV4fXNldCBmaXJzdFZpc2libGVJbmRleCh0KXt0aGlzLl93YXJuUHJpdmF0ZUFQSUFjY2VzcygiZmlyc3RWaXNpYmxlSW5kZXgiKSxzdXBlci5maXJzdFZpc2libGVJbmRleD10fWdldCBsYXN0VmlzaWJsZUluZGV4KCl7cmV0dXJuIHRoaXMuX3dhcm5Qcml2YXRlQVBJQWNjZXNzKCJsYXN0VmlzaWJsZUluZGV4Iiksc3VwZXIubGFzdFZpc2libGVJbmRleH1zZXQgbGFzdFZpc2libGVJbmRleCh0KXt0aGlzLl93YXJuUHJpdmF0ZUFQSUFjY2VzcygibGFzdFZpc2libGVJbmRleCIpLHN1cGVyLmxhc3RWaXNpYmxlSW5kZXg9dH11cGRhdGVWaWV3cG9ydEJvdW5kYXJpZXMoKXt0aGlzLl93YXJuUHJpdmF0ZUFQSUFjY2VzcygidXBkYXRlVmlld3BvcnRCb3VuZGFyaWVzIiksc3VwZXIudXBkYXRlVmlld3BvcnRCb3VuZGFyaWVzLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1fcmVzaXplSGFuZGxlcigpe3N1cGVyLl9yZXNpemVIYW5kbGVyKCksemkoKX19Y3VzdG9tRWxlbWVudHMuZGVmaW5lKHlOdC5pcyx5TnQpOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTcgVmFhZGluIEx0ZC4KICAgIFRoaXMgcHJvZ3JhbSBpcyBhdmFpbGFibGUgdW5kZXIgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAsIGF2YWlsYWJsZSBhdCBodHRwczovL3ZhYWRpbi5jb20vbGljZW5zZS8KICAgICovCmNvbnN0IHZOdD10PT5jbGFzcyBleHRlbmRzIHR7c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl9hMTF5VXBkYXRlR3JpZFNpemUoc2l6ZSwgX2NvbHVtblRyZWUsIF9jb2x1bW5UcmVlLiopIl19X2ExMXlHZXRIZWFkZXJSb3dDb3VudCh0KXtyZXR1cm4gdC5maWx0ZXIoKHQ9PnQuc29tZSgodD0+dC5faGVhZGVyVGVtcGxhdGV8fHQuaGVhZGVyUmVuZGVyZXJ8fHQucGF0aHx8dC5oZWFkZXIpKSkpLmxlbmd0aH1fYTExeUdldEZvb3RlclJvd0NvdW50KHQpe3JldHVybiB0LmZpbHRlcigodD0+dC5zb21lKCh0PT50Ll9oZWFkZXJUZW1wbGF0ZXx8dC5oZWFkZXJSZW5kZXJlcikpKSkubGVuZ3RofV9hMTF5VXBkYXRlR3JpZFNpemUodCxlKXtpZih2b2lkIDA9PT10fHx2b2lkIDA9PT1lKXJldHVybjtjb25zdCBuPWVbZS5sZW5ndGgtMV07dGhpcy4kLnRhYmxlLnNldEF0dHJpYnV0ZSgiYXJpYS1yb3djb3VudCIsdCt0aGlzLl9hMTF5R2V0SGVhZGVyUm93Q291bnQoZSkrdGhpcy5fYTExeUdldEZvb3RlclJvd0NvdW50KGUpKSx0aGlzLiQudGFibGUuc2V0QXR0cmlidXRlKCJhcmlhLWNvbGNvdW50IixuJiZuLmxlbmd0aHx8MCksdGhpcy5fYTExeVVwZGF0ZUhlYWRlclJvd3MoKSx0aGlzLl9hMTF5VXBkYXRlRm9vdGVyUm93cygpfV9hMTF5VXBkYXRlSGVhZGVyUm93cygpe0FycmF5LmZyb20odGhpcy4kLmhlYWRlci5jaGlsZHJlbikuZm9yRWFjaCgoKHQsZSk9PnQuc2V0QXR0cmlidXRlKCJhcmlhLXJvd2luZGV4IixlKzEpKSl9X2ExMXlVcGRhdGVGb290ZXJSb3dzKCl7QXJyYXkuZnJvbSh0aGlzLiQuZm9vdGVyLmNoaWxkcmVuKS5mb3JFYWNoKCgodCxlKT0+dC5zZXRBdHRyaWJ1dGUoImFyaWEtcm93aW5kZXgiLHRoaXMuX2ExMXlHZXRIZWFkZXJSb3dDb3VudCh0aGlzLl9jb2x1bW5UcmVlKSt0aGlzLnNpemUrZSsxKSkpfV9hMTF5VXBkYXRlUm93Um93aW5kZXgodCxlKXt0LnNldEF0dHJpYnV0ZSgiYXJpYS1yb3dpbmRleCIsZSt0aGlzLl9hMTF5R2V0SGVhZGVyUm93Q291bnQodGhpcy5fY29sdW1uVHJlZSkrMSl9X2ExMXlVcGRhdGVSb3dTZWxlY3RlZCh0LGUpe3Quc2V0QXR0cmlidXRlKCJhcmlhLXNlbGVjdGVkIixCb29sZWFuKGUpKSxBcnJheS5mcm9tKHQuY2hpbGRyZW4pLmZvckVhY2goKHQ9PnQuc2V0QXR0cmlidXRlKCJhcmlhLXNlbGVjdGVkIixCb29sZWFuKGUpKSkpfV9hMTF5VXBkYXRlUm93TGV2ZWwodCxlKXt0LnNldEF0dHJpYnV0ZSgiYXJpYS1sZXZlbCIsZSsxKX1fYTExeVVwZGF0ZVJvd0RldGFpbHNPcGVuZWQodCxlKXtBcnJheS5mcm9tKHQuY2hpbGRyZW4pLmZvckVhY2goKHQ9PnsiYm9vbGVhbiI9PXR5cGVvZiBlP3Quc2V0QXR0cmlidXRlKCJhcmlhLWV4cGFuZGVkIixlKTp0Lmhhc0F0dHJpYnV0ZSgiYXJpYS1leHBhbmRlZCIpJiZ0LnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1leHBhbmRlZCIpfSkpfV9hMTF5U2V0Um93RGV0YWlsc0NlbGwodCxlKXtBcnJheS5mcm9tKHQuY2hpbGRyZW4pLmZvckVhY2goKHQ9Pnt0IT09ZSYmdC5zZXRBdHRyaWJ1dGUoImFyaWEtY29udHJvbHMiLGUuaWQpfSkpfV9hMTF5VXBkYXRlQ2VsbENvbHNwYW4odCxlKXt0LnNldEF0dHJpYnV0ZSgiYXJpYS1jb2xzcGFuIixOdW1iZXIoZSkpfV9hMTF5VXBkYXRlU29ydGVycygpe0FycmF5LmZyb20odGhpcy5xdWVyeVNlbGVjdG9yQWxsKCJ2YWFkaW4tZ3JpZC1zb3J0ZXIiKSkuZm9yRWFjaCgodD0+e2xldCBlPXQucGFyZW50Tm9kZTtmb3IoO2UmJiJ2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQiIT09ZS5sb2NhbE5hbWU7KWU9ZS5wYXJlbnROb2RlO2UmJmUuYXNzaWduZWRTbG90JiZlLmFzc2lnbmVkU2xvdC5wYXJlbnROb2RlLnNldEF0dHJpYnV0ZSgiYXJpYS1zb3J0Iix7YXNjOiJhc2NlbmRpbmciLGRlc2M6ImRlc2NlbmRpbmcifVtTdHJpbmcodC5kaXJlY3Rpb24pXXx8Im5vbmUiKX0pKX19Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBWYWFkaW4gTHRkLgogICAgVGhpcyBwcm9ncmFtIGlzIGF2YWlsYWJsZSB1bmRlciBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCwgYXZhaWxhYmxlIGF0IGh0dHBzOi8vdmFhZGluLmNvbS9saWNlbnNlLwogICAgKi8sYk50PXQ9PmNsYXNzIGV4dGVuZHMgdHtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57YWN0aXZlSXRlbTp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwLHZhbHVlOm51bGx9fX1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy4kLnNjcm9sbGVyLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLl9vbkNsaWNrLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiY2VsbC1hY3RpdmF0ZSIsdGhpcy5fYWN0aXZhdGVJdGVtLmJpbmQodGhpcykpfV9hY3RpdmF0ZUl0ZW0odCl7Y29uc3QgZT10LmRldGFpbC5tb2RlbCxuPWU/ZS5pdGVtOm51bGw7biYmKHRoaXMuYWN0aXZlSXRlbT10aGlzLl9pdGVtc0VxdWFsKHRoaXMuYWN0aXZlSXRlbSxuKT9udWxsOm4pfV9vbkNsaWNrKHQpe2lmKHQuZGVmYXVsdFByZXZlbnRlZClyZXR1cm47Y29uc3QgZT10LmNvbXBvc2VkUGF0aCgpLG49ZVtlLmluZGV4T2YodGhpcy4kLnRhYmxlKS0zXTtpZighbnx8bi5nZXRBdHRyaWJ1dGUoInBhcnQiKS5pbmRleE9mKCJkZXRhaWxzLWNlbGwiKT4tMSlyZXR1cm47Y29uc3QgaT1uLl9jb250ZW50LHI9dGhpcy5nZXRSb290Tm9kZSgpLmFjdGl2ZUVsZW1lbnQ7aS5jb250YWlucyhyKSYmKCF0aGlzLl9pZXx8dGhpcy5faXNGb2N1c2FibGUocikpfHx0aGlzLl9pc0ZvY3VzYWJsZSh0LnRhcmdldCl8fHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNlbGwtYWN0aXZhdGUiLHtkZXRhaWw6e21vZGVsOnRoaXMuX19nZXRSb3dNb2RlbChuLnBhcmVudEVsZW1lbnQpfX0pKX1faXNGb2N1c2FibGUodCl7cmV0dXJuIHhOdCh0KX19LHhOdD10PT57aWYoIXQucGFyZW50Tm9kZSlyZXR1cm4hMTtjb25zdCBlPS0xIT09QXJyYXkuZnJvbSh0LnBhcmVudE5vZGUucXVlcnlTZWxlY3RvckFsbCgiW3RhYmluZGV4XSwgYnV0dG9uLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgb2JqZWN0LCBpZnJhbWUsIGxhYmVsLCBhW2hyZWZdLCBhcmVhW2hyZWZdIikpLmZpbHRlcigodD0+ImNlbGwgYm9keS1jZWxsIiE9PXQuZ2V0QXR0cmlidXRlKCJwYXJ0IikpKS5pbmRleE9mKHQpO3JldHVybiF0LmRpc2FibGVkJiZlfSx3TnQ9dD0+Y2xhc3MgZXh0ZW5kcyB0e3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntpdGVtczpBcnJheX19c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl9pdGVtc0NoYW5nZWQoaXRlbXMsIGl0ZW1zLiosIGlzQXR0YWNoZWQpIl19X2l0ZW1zQ2hhbmdlZCh0LGUsbil7aWYobil7aWYoIUFycmF5LmlzQXJyYXkodCkpcmV0dXJuIG51bGw9PXQmJih0aGlzLnNpemU9MCksdm9pZCh0aGlzLmRhdGFQcm92aWRlcj09PXRoaXMuX2FycmF5RGF0YVByb3ZpZGVyJiYodGhpcy5kYXRhUHJvdmlkZXI9dm9pZCAwKSk7dGhpcy5zaXplPXQubGVuZ3RoLHRoaXMuZGF0YVByb3ZpZGVyPXRoaXMuZGF0YVByb3ZpZGVyfHx0aGlzLl9hcnJheURhdGFQcm92aWRlcix0aGlzLmNsZWFyQ2FjaGUoKSx0aGlzLl9lbnN1cmVGaXJzdFBhZ2VMb2FkZWQoKX19X2FycmF5RGF0YVByb3ZpZGVyKHQsZSl7bGV0IG49KEFycmF5LmlzQXJyYXkodGhpcy5pdGVtcyk/dGhpcy5pdGVtczpbXSkuc2xpY2UoMCk7dGhpcy5fZmlsdGVycyYmdGhpcy5fY2hlY2tQYXRocyh0aGlzLl9maWx0ZXJzLCJmaWx0ZXJpbmciLG4pJiYobj10aGlzLl9maWx0ZXIobikpLHRoaXMuc2l6ZT1uLmxlbmd0aCx0LnNvcnRPcmRlcnMubGVuZ3RoJiZ0aGlzLl9jaGVja1BhdGhzKHRoaXMuX3NvcnRlcnMsInNvcnRpbmciLG4pJiYobj1uLnNvcnQodGhpcy5fbXVsdGlTb3J0LmJpbmQodGhpcykpKTtjb25zdCBpPXQucGFnZSp0LnBhZ2VTaXplO2Uobi5zbGljZShpLGkrdC5wYWdlU2l6ZSksbi5sZW5ndGgpfV9jaGVja1BhdGhzKHQsZSxuKXtpZighbi5sZW5ndGgpcmV0dXJuITE7bGV0IGk9ITA7Zm9yKHZhciByIGluIHQpe2NvbnN0IG89dFtyXS5wYXRoO2lmKCFvfHwtMT09PW8uaW5kZXhPZigiLiIpKWNvbnRpbnVlO2NvbnN0IGE9by5yZXBsYWNlKC9cLlteXC5dKiQvLCIiKTt2b2lkIDA9PT1wby5nZXQoYSxuWzBdKSYmKGNvbnNvbGUud2FybihgUGF0aCAiJHtvfSIgdXNlZCBmb3IgJHtlfSBkb2VzIG5vdCBleGlzdCBpbiBhbGwgb2YgdGhlIGl0ZW1zLCAke2V9IGlzIGRpc2FibGVkLmApLGk9ITEpfXJldHVybiBpfV9tdWx0aVNvcnQodCxlKXtyZXR1cm4gdGhpcy5fc29ydGVycy5tYXAoKG49PiJhc2MiPT09bi5kaXJlY3Rpb24/dGhpcy5fY29tcGFyZShwby5nZXQobi5wYXRoLHQpLHBvLmdldChuLnBhdGgsZSkpOiJkZXNjIj09PW4uZGlyZWN0aW9uP3RoaXMuX2NvbXBhcmUocG8uZ2V0KG4ucGF0aCxlKSxwby5nZXQobi5wYXRoLHQpKTowKSkucmVkdWNlKCgodCxlKT0+dHx8ZSksMCl9X25vcm1hbGl6ZUVtcHR5VmFsdWUodCl7cmV0dXJuW3ZvaWQgMCxudWxsXS5pbmRleE9mKHQpPj0wPyIiOmlzTmFOKHQpP3QudG9TdHJpbmcoKTp0fV9jb21wYXJlKHQsZSl7cmV0dXJuKHQ9dGhpcy5fbm9ybWFsaXplRW1wdHlWYWx1ZSh0KSk8KGU9dGhpcy5fbm9ybWFsaXplRW1wdHlWYWx1ZShlKSk/LTE6dD5lPzE6MH1fZmlsdGVyKHQpe3JldHVybiB0LmZpbHRlcigoKHQsZSk9PjA9PT10aGlzLl9maWx0ZXJzLmZpbHRlcigoZT0+e2NvbnN0IG49dGhpcy5fbm9ybWFsaXplRW1wdHlWYWx1ZShwby5nZXQoZS5wYXRoLHQpKSxpPXRoaXMuX25vcm1hbGl6ZUVtcHR5VmFsdWUoZS52YWx1ZSkudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpO3JldHVybi0xPT09bi50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihpKX0pKS5sZW5ndGgpKX19Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBWYWFkaW4gTHRkLgogICAgVGhpcyBwcm9ncmFtIGlzIGF2YWlsYWJsZSB1bmRlciBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCwgYXZhaWxhYmxlIGF0IGh0dHBzOi8vdmFhZGluLmNvbS9saWNlbnNlLwogICAgKi8sU050PXQ9PmNsYXNzIGV4dGVuZHMoZGkodCkpe3JlYWR5KCl7c3VwZXIucmVhZHkoKTtjb25zdCB0PXRoaXMuJC5zY3JvbGxlcjtuaSh0LCJ0cmFjayIsdGhpcy5fb25IZWFkZXJUcmFjay5iaW5kKHRoaXMpKSx0LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsKGU9PnQuaGFzQXR0cmlidXRlKCJjb2x1bW4tcmVzaXppbmciKSYmZS5wcmV2ZW50RGVmYXVsdCgpKSksdC5hZGRFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsKHQ9PiJyZXNpemUtaGFuZGxlIj09dC50YXJnZXQuZ2V0QXR0cmlidXRlKCJwYXJ0IikmJnQucHJldmVudERlZmF1bHQoKSkpLHQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwodD0+InJlc2l6ZS1oYW5kbGUiPT09dC50YXJnZXQuZ2V0QXR0cmlidXRlKCJwYXJ0IikmJnQucHJldmVudERlZmF1bHQoKSkpfV9vbkhlYWRlclRyYWNrKHQpe2NvbnN0IGU9dC50YXJnZXQ7aWYoInJlc2l6ZS1oYW5kbGUiPT09ZS5nZXRBdHRyaWJ1dGUoInBhcnQiKSl7bGV0IG89ZS5wYXJlbnRFbGVtZW50Ll9jb2x1bW47Zm9yKHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgiY29sdW1uLXJlc2l6aW5nIiwhMCx0aGlzLiQuc2Nyb2xsZXIpOyJ2YWFkaW4tZ3JpZC1jb2x1bW4tZ3JvdXAiPT09by5sb2NhbE5hbWU7KW89QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoby5fY2hpbGRDb2x1bW5zLDApLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuX29yZGVyLWUuX29yZGVyfSkpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIXQuaGlkZGVufSkpLnBvcCgpO2NvbnN0IGE9QXJyYXkuZnJvbSh0aGlzLiQuaGVhZGVyLnF1ZXJ5U2VsZWN0b3JBbGwoJ1twYXJ0fj0icm93Il06bGFzdC1jaGlsZCBbcGFydH49ImNlbGwiXScpKTt2YXIgbj1hLmZpbHRlcigodD0+dC5fY29sdW1uPT09bykpWzBdO2lmKG4ub2Zmc2V0V2lkdGgpe3ZhciBpPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKG4pLHI9MTArcGFyc2VJbnQoaS5wYWRkaW5nTGVmdCkrcGFyc2VJbnQoaS5wYWRkaW5nUmlnaHQpK3BhcnNlSW50KGkuYm9yZGVyTGVmdFdpZHRoKStwYXJzZUludChpLmJvcmRlclJpZ2h0V2lkdGgpK3BhcnNlSW50KGkubWFyZ2luTGVmdCkrcGFyc2VJbnQoaS5tYXJnaW5SaWdodCk7Y29uc3QgZT1uLm9mZnNldFdpZHRoKyh0aGlzLl9faXNSVEw/bi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0LXQuZGV0YWlsLng6dC5kZXRhaWwueC1uLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnJpZ2h0KTtvLndpZHRoPU1hdGgubWF4KHIsZSkrInB4IixvLmZsZXhHcm93PTB9YS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0Ll9jb2x1bW4uX29yZGVyLWUuX2NvbHVtbi5fb3JkZXJ9KSkuZm9yRWFjaCgoZnVuY3Rpb24odCxlLGkpe2U8aS5pbmRleE9mKG4pJiYodC5fY29sdW1uLndpZHRoPXQub2Zmc2V0V2lkdGgrInB4Iix0Ll9jb2x1bW4uZmxleEdyb3c9MCl9KSksImVuZCI9PT10LmRldGFpbC5zdGF0ZSYmKHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgiY29sdW1uLXJlc2l6aW5nIiwhMSx0aGlzLiQuc2Nyb2xsZXIpLHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNvbHVtbi1yZXNpemUiLHtkZXRhaWw6e3Jlc2l6ZWRDb2x1bW46b319KSkpLHRoaXMuX3Jlc2l6ZUhhbmRsZXIoKX19fQovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTcgVmFhZGluIEx0ZC4KICAgIFRoaXMgcHJvZ3JhbSBpcyBhdmFpbGFibGUgdW5kZXIgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAsIGF2YWlsYWJsZSBhdCBodHRwczovL3ZhYWRpbi5jb20vbGljZW5zZS8KICAgICovLE1OdD1jbGFzcyB0e2NvbnN0cnVjdG9yKHQsZSxuKXt0aGlzLmdyaWQ9dCx0aGlzLnBhcmVudENhY2hlPWUsdGhpcy5wYXJlbnRJdGVtPW4sdGhpcy5pdGVtQ2FjaGVzPXt9LHRoaXMuaXRlbXM9e30sdGhpcy5lZmZlY3RpdmVTaXplPTAsdGhpcy5zaXplPTAsdGhpcy5wZW5kaW5nUmVxdWVzdHM9e319aXNMb2FkaW5nKCl7cmV0dXJuIEJvb2xlYW4oT2JqZWN0LmtleXModGhpcy5wZW5kaW5nUmVxdWVzdHMpLmxlbmd0aHx8T2JqZWN0LmtleXModGhpcy5pdGVtQ2FjaGVzKS5maWx0ZXIoKHQ9PnRoaXMuaXRlbUNhY2hlc1t0XS5pc0xvYWRpbmcoKSkpWzBdKX1nZXRJdGVtRm9ySW5kZXgodCl7Y29uc3R7Y2FjaGU6ZSxzY2FsZWRJbmRleDpufT10aGlzLmdldENhY2hlQW5kSW5kZXgodCk7cmV0dXJuIGUuaXRlbXNbbl19dXBkYXRlU2l6ZSgpe3RoaXMuZWZmZWN0aXZlU2l6ZT0hdGhpcy5wYXJlbnRJdGVtfHx0aGlzLmdyaWQuX2lzRXhwYW5kZWQodGhpcy5wYXJlbnRJdGVtKT90aGlzLnNpemUrT2JqZWN0LmtleXModGhpcy5pdGVtQ2FjaGVzKS5yZWR1Y2UoKCh0LGUpPT57Y29uc3Qgbj10aGlzLml0ZW1DYWNoZXNbZV07cmV0dXJuIG4udXBkYXRlU2l6ZSgpLHQrbi5lZmZlY3RpdmVTaXplfSksMCk6MH1lbnN1cmVTdWJDYWNoZUZvclNjYWxlZEluZGV4KGUpe2lmKCF0aGlzLml0ZW1DYWNoZXNbZV0pe2NvbnN0IG49bmV3IHQodGhpcy5ncmlkLHRoaXMsdGhpcy5pdGVtc1tlXSk7dGhpcy5pdGVtQ2FjaGVzW2VdPW4sdGhpcy5ncmlkLl9sb2FkUGFnZSgwLG4pfX1nZXRDYWNoZUFuZEluZGV4KHQpe2xldCBlPXQ7Y29uc3Qgbj1PYmplY3Qua2V5cyh0aGlzLml0ZW1DYWNoZXMpO2Zvcih2YXIgaT0wO2k8bi5sZW5ndGg7aSsrKXtjb25zdCB0PU51bWJlcihuW2ldKSxyPXRoaXMuaXRlbUNhY2hlc1t0XTtpZihlPD10KXJldHVybntjYWNoZTp0aGlzLHNjYWxlZEluZGV4OmV9O2lmKGU8PXQrci5lZmZlY3RpdmVTaXplKXJldHVybiByLmdldENhY2hlQW5kSW5kZXgoZS10LTEpO2UtPXIuZWZmZWN0aXZlU2l6ZX1yZXR1cm57Y2FjaGU6dGhpcyxzY2FsZWRJbmRleDplfX19LEVOdD10PT5jbGFzcyBleHRlbmRzIHR7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue3BhZ2VTaXplOnt0eXBlOk51bWJlcix2YWx1ZTo1MCxvYnNlcnZlcjoiX3BhZ2VTaXplQ2hhbmdlZCJ9LGRhdGFQcm92aWRlcjp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwLG9ic2VydmVyOiJfZGF0YVByb3ZpZGVyQ2hhbmdlZCJ9LGxvYWRpbmc6e3R5cGU6Qm9vbGVhbixub3RpZnk6ITAscmVhZE9ubHk6ITAscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxfY2FjaGU6e3R5cGU6T2JqZWN0LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBNTnQodGhpcyl9fSxpdGVtSWRQYXRoOnt0eXBlOlN0cmluZyx2YWx1ZTpudWxsfSxleHBhbmRlZEl0ZW1zOnt0eXBlOk9iamVjdCxub3RpZnk6ITAsdmFsdWU6KCk9PltdfX19c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl9zaXplQ2hhbmdlZChzaXplKSIsIl9pdGVtSWRQYXRoQ2hhbmdlZChpdGVtSWRQYXRoKSIsIl9leHBhbmRlZEl0ZW1zQ2hhbmdlZChleHBhbmRlZEl0ZW1zLiopIl19X3NpemVDaGFuZ2VkKHQpe2NvbnN0IGU9dC10aGlzLl9jYWNoZS5zaXplO3RoaXMuX2NhY2hlLnNpemUrPWUsdGhpcy5fY2FjaGUuZWZmZWN0aXZlU2l6ZSs9ZSx0aGlzLl9lZmZlY3RpdmVTaXplPXRoaXMuX2NhY2hlLmVmZmVjdGl2ZVNpemUsdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQoMCksdGhpcy5fZGVib3VuY2VJbmNyZWFzZVBvb2wmJnRoaXMuX2RlYm91bmNlSW5jcmVhc2VQb29sLmZsdXNoKCl9X2dldEl0ZW0odCxlKXtpZih0Pj10aGlzLl9lZmZlY3RpdmVTaXplKXJldHVybjtlLmluZGV4PXQ7Y29uc3R7Y2FjaGU6bixzY2FsZWRJbmRleDppfT10aGlzLl9jYWNoZS5nZXRDYWNoZUFuZEluZGV4KHQpLHI9bi5pdGVtc1tpXTtyPyh0aGlzLl90b2dnbGVBdHRyaWJ1dGUoImxvYWRpbmciLCExLGUpLHRoaXMuX3VwZGF0ZUl0ZW0oZSxyKSx0aGlzLl9pc0V4cGFuZGVkKHIpJiZuLmVuc3VyZVN1YkNhY2hlRm9yU2NhbGVkSW5kZXgoaSkpOih0aGlzLl90b2dnbGVBdHRyaWJ1dGUoImxvYWRpbmciLCEwLGUpLHRoaXMuX2xvYWRQYWdlKHRoaXMuX2dldFBhZ2VGb3JJbmRleChpKSxuKSl9X2V4cGFuZGVkSW5zdGFuY2VDaGFuZ2VkQ2FsbGJhY2sodCxlKXt2b2lkIDAhPT10Lml0ZW0mJihlP3RoaXMuZXhwYW5kSXRlbSh0Lml0ZW0pOnRoaXMuY29sbGFwc2VJdGVtKHQuaXRlbSkpfWdldEl0ZW1JZCh0KXtyZXR1cm4gdGhpcy5pdGVtSWRQYXRoP3RoaXMuZ2V0KHRoaXMuaXRlbUlkUGF0aCx0KTp0fV9pc0V4cGFuZGVkKHQpe3JldHVybiB0aGlzLl9fZXhwYW5kZWRLZXlzLmhhcyh0aGlzLmdldEl0ZW1JZCh0KSl9X2V4cGFuZGVkSXRlbXNDaGFuZ2VkKHQpe3RoaXMuX19jYWNoZUV4cGFuZGVkS2V5cygpLHRoaXMuX2NhY2hlLnVwZGF0ZVNpemUoKSx0aGlzLl9lZmZlY3RpdmVTaXplPXRoaXMuX2NhY2hlLmVmZmVjdGl2ZVNpemUsdGhpcy5fYXNzaWduTW9kZWxzKCl9X2l0ZW1JZFBhdGhDaGFuZ2VkKHQpe3RoaXMuX19jYWNoZUV4cGFuZGVkS2V5cygpfV9fY2FjaGVFeHBhbmRlZEtleXMoKXt0aGlzLmV4cGFuZGVkSXRlbXMmJih0aGlzLl9fZXhwYW5kZWRLZXlzPW5ldyBTZXQsdGhpcy5leHBhbmRlZEl0ZW1zLmZvckVhY2goKHQ9Pnt0aGlzLl9fZXhwYW5kZWRLZXlzLmFkZCh0aGlzLmdldEl0ZW1JZCh0KSl9KSkpfWV4cGFuZEl0ZW0odCl7dGhpcy5faXNFeHBhbmRlZCh0KXx8dGhpcy5wdXNoKCJleHBhbmRlZEl0ZW1zIix0KX1jb2xsYXBzZUl0ZW0odCl7dGhpcy5faXNFeHBhbmRlZCh0KSYmdGhpcy5zcGxpY2UoImV4cGFuZGVkSXRlbXMiLHRoaXMuX2dldEl0ZW1JbmRleEluQXJyYXkodCx0aGlzLmV4cGFuZGVkSXRlbXMpLDEpfV9nZXRJbmRleExldmVsKHQpe2xldHtjYWNoZTplfT10aGlzLl9jYWNoZS5nZXRDYWNoZUFuZEluZGV4KHQpLG49MDtmb3IoO2UucGFyZW50Q2FjaGU7KWU9ZS5wYXJlbnRDYWNoZSxuKys7cmV0dXJuIG59X2NhblBvcHVsYXRlKCl7cmV0dXJuIEJvb2xlYW4odGhpcy5faGFzRGF0YSYmdGhpcy5fY29sdW1uVHJlZSl9X2xvYWRQYWdlKHQsZSl7aWYoIWUucGVuZGluZ1JlcXVlc3RzW3RdJiZ0aGlzLmRhdGFQcm92aWRlcil7dGhpcy5fc2V0TG9hZGluZyghMCksZS5wZW5kaW5nUmVxdWVzdHNbdF09ITA7Y29uc3Qgbj17cGFnZTp0LHBhZ2VTaXplOnRoaXMucGFnZVNpemUsc29ydE9yZGVyczp0aGlzLl9tYXBTb3J0ZXJzKCksZmlsdGVyczp0aGlzLl9tYXBGaWx0ZXJzKCkscGFyZW50SXRlbTplLnBhcmVudEl0ZW19O3RoaXMuX2RlYm91bmNlSW5jcmVhc2VQb29sJiZ0aGlzLl9kZWJvdW5jZUluY3JlYXNlUG9vbC5mbHVzaCgpLHRoaXMuZGF0YVByb3ZpZGVyKG4sKChpLHIpPT57dm9pZCAwIT09cj9lLnNpemU9cjpuLnBhcmVudEl0ZW0mJihlLnNpemU9aS5sZW5ndGgpO2NvbnN0IG89QXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLm1hcCgodD0+dC5faXRlbSkpO2kuZm9yRWFjaCgoKG4saSk9Pntjb25zdCByPXQqdGhpcy5wYWdlU2l6ZStpO2UuaXRlbXNbcl09bix0aGlzLl9pc0V4cGFuZGVkKG4pJiZvLmluZGV4T2Yobik+LTEmJmUuZW5zdXJlU3ViQ2FjaGVGb3JTY2FsZWRJbmRleChyKX0pKSx0aGlzLl9oYXNEYXRhPSEwLGRlbGV0ZSBlLnBlbmRpbmdSZXF1ZXN0c1t0XSx0aGlzLl9kZWJvdW5jZXJBcHBseUNhY2hlZERhdGE9RW4uZGVib3VuY2UodGhpcy5fZGVib3VuY2VyQXBwbHlDYWNoZWREYXRhLGd0LmFmdGVyKDApLCgoKT0+e3RoaXMuX3NldExvYWRpbmcoITEpLHRoaXMuX2NhY2hlLnVwZGF0ZVNpemUoKSx0aGlzLl9lZmZlY3RpdmVTaXplPXRoaXMuX2NhY2hlLmVmZmVjdGl2ZVNpemUsQXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZpbHRlcigodD0+IXQuaGlkZGVuKSkuZm9yRWFjaCgodD0+e3RoaXMuX2NhY2hlLmdldEl0ZW1Gb3JJbmRleCh0LmluZGV4KSYmdGhpcy5fZ2V0SXRlbSh0LmluZGV4LHQpfSkpLHRoaXMuX2luY3JlYXNlUG9vbElmTmVlZGVkKDApLHRoaXMuX19zY3JvbGxUb1BlbmRpbmdJbmRleCgpfSkpLHRoaXMuX2NhY2hlLmlzTG9hZGluZygpfHx0aGlzLl9kZWJvdW5jZXJBcHBseUNhY2hlZERhdGEuZmx1c2goKSx0aGlzLl9faXRlbXNSZWNlaXZlZCgpfSkpfX1fZ2V0UGFnZUZvckluZGV4KHQpe3JldHVybiBNYXRoLmZsb29yKHQvdGhpcy5wYWdlU2l6ZSl9Y2xlYXJDYWNoZSgpe3RoaXMuX2NhY2hlPW5ldyBNTnQodGhpcyksQXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZvckVhY2goKHQ9PntBcnJheS5mcm9tKHQuY2hpbGRyZW4pLmZvckVhY2goKHQ9Pnt0Ll9pbnN0YW5jZSYmdC5faW5zdGFuY2UuX3NldFBlbmRpbmdQcm9wZXJ0eSgiaXRlbSIse30sITEpfSkpfSkpLHRoaXMuX2NhY2hlLnNpemU9dGhpcy5zaXplfHwwLHRoaXMuX2NhY2hlLnVwZGF0ZVNpemUoKSx0aGlzLl9oYXNEYXRhPSExLHRoaXMuX2Fzc2lnbk1vZGVscygpLHRoaXMuX2VmZmVjdGl2ZVNpemUmJnRoaXMuX2luaXRpYWxQb29sQ3JlYXRlZHx8dGhpcy5fbG9hZFBhZ2UoMCx0aGlzLl9jYWNoZSl9X3BhZ2VTaXplQ2hhbmdlZCh0LGUpe3ZvaWQgMCE9PWUmJnQhPT1lJiZ0aGlzLmNsZWFyQ2FjaGUoKX1fY2hlY2tTaXplKCl7dm9pZCAwPT09dGhpcy5zaXplJiYwPT09dGhpcy5fZWZmZWN0aXZlU2l6ZSYmY29uc29sZS53YXJuKCJUaGUgPHZhYWRpbi1ncmlkPiBuZWVkcyB0aGUgdG90YWwgbnVtYmVyIG9mIGl0ZW1zIGluIG9yZGVyIHRvIGRpc3BsYXkgcm93cy4gU2V0IHRoZSB0b3RhbCBudW1iZXIgb2YgaXRlbXMgdG8gdGhlIGBzaXplYCBwcm9wZXJ0eSwgb3IgcHJvdmlkZSB0aGUgdG90YWwgbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBzZWNvbmQgYXJndW1lbnQgb2YgdGhlIGBkYXRhUHJvdmlkZXJg4oCZcyBgY2FsbGJhY2tgIGNhbGwuIil9X2RhdGFQcm92aWRlckNoYW5nZWQodCxlKXt2b2lkIDAhPT1lJiZ0aGlzLmNsZWFyQ2FjaGUoKSx0JiZ0aGlzLml0ZW1zJiZ0aGlzLml0ZW1zLmxlbmd0aCYmdGhpcy5fc2Nyb2xsVG9JbmRleCh0aGlzLl9maXJzdFZpc2libGVJbmRleCksdGhpcy5fZW5zdXJlRmlyc3RQYWdlTG9hZGVkKCksdGhpcy5fZGVib3VuY2VyQ2hlY2tTaXplPUVuLmRlYm91bmNlKHRoaXMuX2RlYm91bmNlckNoZWNrU2l6ZSxndC5hZnRlcigyZTMpLHRoaXMuX2NoZWNrU2l6ZS5iaW5kKHRoaXMpKSx0aGlzLl9zY3JvbGxIYW5kbGVyKCl9X2Vuc3VyZUZpcnN0UGFnZUxvYWRlZCgpe3RoaXMuX2hhc0RhdGF8fHRoaXMuX2xvYWRQYWdlKDAsdGhpcy5fY2FjaGUpfV9pdGVtc0VxdWFsKHQsZSl7cmV0dXJuIHRoaXMuZ2V0SXRlbUlkKHQpPT09dGhpcy5nZXRJdGVtSWQoZSl9X2dldEl0ZW1JbmRleEluQXJyYXkodCxlKXtsZXQgbj0tMTtyZXR1cm4gZS5mb3JFYWNoKCgoZSxpKT0+e3RoaXMuX2l0ZW1zRXF1YWwoZSx0KSYmKG49aSl9KSksbn1zY3JvbGxUb0luZGV4KHQpe3N1cGVyLnNjcm9sbFRvSW5kZXgodCksaXNOYU4odCl8fCF0aGlzLl9jYWNoZS5pc0xvYWRpbmcoKSYmdGhpcy5jbGllbnRIZWlnaHR8fCh0aGlzLl9fcGVuZGluZ1Njcm9sbFRvSW5kZXg9dCl9X19zY3JvbGxUb1BlbmRpbmdJbmRleCgpe2lmKHRoaXMuX19wZW5kaW5nU2Nyb2xsVG9JbmRleCYmdGhpcy4kLml0ZW1zLmNoaWxkcmVuLmxlbmd0aCl7Y29uc3QgdD10aGlzLl9fcGVuZGluZ1Njcm9sbFRvSW5kZXg7ZGVsZXRlIHRoaXMuX19wZW5kaW5nU2Nyb2xsVG9JbmRleCx0aGlzLl9kZWJvdW5jZUluY3JlYXNlUG9vbCYmdGhpcy5fZGVib3VuY2VJbmNyZWFzZVBvb2wuZmx1c2goKSx0aGlzLnNjcm9sbFRvSW5kZXgodCl9fX0KLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE3IFZhYWRpbiBMdGQuCiAgICBUaGlzIHByb2dyYW0gaXMgYXZhaWxhYmxlIHVuZGVyIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wLCBhdmFpbGFibGUgYXQgaHR0cHM6Ly92YWFkaW4uY29tL2xpY2Vuc2UvCiAgICAqLyxUTnQ9dD0+Y2xhc3MgZXh0ZW5kcyB0e3JlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLl9hZGROb2RlT2JzZXJ2ZXIoKX1faGFzQ29sdW1uR3JvdXBzKHQpe2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKWlmKCJ2YWFkaW4tZ3JpZC1jb2x1bW4tZ3JvdXAiPT09dFtlXS5sb2NhbE5hbWUpcmV0dXJuITA7cmV0dXJuITF9X2dldENoaWxkQ29sdW1ucyh0KXtyZXR1cm4gUmkuZ2V0RmxhdHRlbmVkTm9kZXModCkuZmlsdGVyKHRoaXMuX2lzQ29sdW1uRWxlbWVudCl9X2ZsYXR0ZW5Db2x1bW5Hcm91cHModCl7cmV0dXJuIHQubWFwKCh0PT4idmFhZGluLWdyaWQtY29sdW1uLWdyb3VwIj09PXQubG9jYWxOYW1lP3RoaXMuX2dldENoaWxkQ29sdW1ucyh0KTpbdF0pKS5yZWR1Y2UoKCh0LGUpPT50LmNvbmNhdChlKSksW10pfV9nZXRDb2x1bW5UcmVlKCl7Zm9yKHZhciB0PVtdLGU9UmkuZ2V0RmxhdHRlbmVkTm9kZXModGhpcykuZmlsdGVyKHRoaXMuX2lzQ29sdW1uRWxlbWVudCk7dC5wdXNoKGUpLHRoaXMuX2hhc0NvbHVtbkdyb3VwcyhlKTspZT10aGlzLl9mbGF0dGVuQ29sdW1uR3JvdXBzKGUpO3JldHVybiB0fV91cGRhdGVDb2x1bW5UcmVlKCl7dmFyIHQ9dGhpcy5fZ2V0Q29sdW1uVHJlZSgpO3RoaXMuX2FycmF5RXF1YWxzKHQsdGhpcy5fY29sdW1uVHJlZSl8fCh0aGlzLl9jb2x1bW5UcmVlPXQpfV9hZGROb2RlT2JzZXJ2ZXIoKXt0aGlzLl9vYnNlcnZlcj1uZXcgUmkodGhpcywodD0+e2NvbnN0IGU9dC5hZGRlZE5vZGVzLmZpbHRlcigodD0+InRlbXBsYXRlIj09PXQubG9jYWxOYW1lJiZ0LmNsYXNzTGlzdC5jb250YWlucygicm93LWRldGFpbHMiKSkpWzBdO2UmJnRoaXMuX3Jvd0RldGFpbHNUZW1wbGF0ZSE9PWUmJih0aGlzLl9yb3dEZXRhaWxzVGVtcGxhdGU9ZSk7Y29uc3Qgbj10PT50LmZpbHRlcih0aGlzLl9pc0NvbHVtbkVsZW1lbnQpLmxlbmd0aD4wO2lmKG4odC5hZGRlZE5vZGVzKXx8bih0LnJlbW92ZWROb2Rlcykpe2NvbnN0IGU9dC5yZW1vdmVkTm9kZXMucmVkdWNlKCgodCxlKT0+dC5jb25jYXQoZS5fYWxsQ2VsbHMpKSxbXSksbj10PT5lLmZpbHRlcigoZT0+ZS5fY29udGVudC5jb250YWlucyh0KSkpLmxlbmd0aDt0aGlzLl9fcmVtb3ZlU29ydGVycyh0aGlzLl9zb3J0ZXJzLmZpbHRlcihuKSksdGhpcy5fX3JlbW92ZUZpbHRlcnModGhpcy5fZmlsdGVycy5maWx0ZXIobikpLHRoaXMuX3VwZGF0ZUNvbHVtblRyZWUoKX10aGlzLl9kZWJvdW5jZXJDaGVja0ltcG9ydHM9RW4uZGVib3VuY2UodGhpcy5fZGVib3VuY2VyQ2hlY2tJbXBvcnRzLGd0LmFmdGVyKDJlMyksdGhpcy5fY2hlY2tJbXBvcnRzLmJpbmQodGhpcykpLHRoaXMuX2Vuc3VyZUZpcnN0UGFnZUxvYWRlZCgpfSkpfV9hcnJheUVxdWFscyh0LGUpe2lmKCF0fHwhZXx8dC5sZW5ndGghPWUubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgbj0wLGk9dC5sZW5ndGg7bjxpO24rKylpZih0W25daW5zdGFuY2VvZiBBcnJheSYmZVtuXWluc3RhbmNlb2YgQXJyYXkpe2lmKCF0aGlzLl9hcnJheUVxdWFscyh0W25dLGVbbl0pKXJldHVybiExfWVsc2UgaWYodFtuXSE9ZVtuXSlyZXR1cm4hMTtyZXR1cm4hMH1fY2hlY2tJbXBvcnRzKCl7WyJ2YWFkaW4tZ3JpZC1jb2x1bW4tZ3JvdXAiLCJ2YWFkaW4tZ3JpZC1maWx0ZXIiLCJ2YWFkaW4tZ3JpZC1maWx0ZXItY29sdW1uIiwidmFhZGluLWdyaWQtdHJlZS10b2dnbGUiLCJ2YWFkaW4tZ3JpZC1zZWxlY3Rpb24tY29sdW1uIiwidmFhZGluLWdyaWQtc29ydC1jb2x1bW4iLCJ2YWFkaW4tZ3JpZC1zb3J0ZXIiXS5mb3JFYWNoKCh0PT57dmFyIGU9dGhpcy5xdWVyeVNlbGVjdG9yKHQpOyFlfHxlIGluc3RhbmNlb2YgeWV8fGNvbnNvbGUud2FybihgTWFrZSBzdXJlIHlvdSBoYXZlIGltcG9ydGVkIHRoZSByZXF1aXJlZCBtb2R1bGUgZm9yIDwke3R9PiBlbGVtZW50LmApfSkpfV91cGRhdGVGaXJzdEFuZExhc3RDb2x1bW4oKXtBcnJheS5mcm9tKHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCJ0ciIpKS5mb3JFYWNoKCh0PT50aGlzLl91cGRhdGVGaXJzdEFuZExhc3RDb2x1bW5Gb3JSb3codCkpKX1fdXBkYXRlRmlyc3RBbmRMYXN0Q29sdW1uRm9yUm93KHQpe0FycmF5LmZyb20odC5xdWVyeVNlbGVjdG9yQWxsKCdbcGFydH49ImNlbGwiXTpub3QoW3BhcnR+PSJkZXRhaWxzLWNlbGwiXSknKSkuc29ydCgoKHQsZSk9PnQuX2NvbHVtbi5fb3JkZXItZS5fY29sdW1uLl9vcmRlcikpLmZvckVhY2goKCh0LGUsbik9Pnt0aGlzLl90b2dnbGVBdHRyaWJ1dGUoImZpcnN0LWNvbHVtbiIsMD09PWUsdCksdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJsYXN0LWNvbHVtbiIsZT09PW4ubGVuZ3RoLTEsdCl9KSl9X2lzQ29sdW1uRWxlbWVudCh0KXtyZXR1cm4gdC5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFJiYvXGJjb2x1bW5cYi8udGVzdCh0LmxvY2FsTmFtZSl9fQovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTggVmFhZGluIEx0ZC4KICAgIFRoaXMgcHJvZ3JhbSBpcyBhdmFpbGFibGUgdW5kZXIgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAsIGF2YWlsYWJsZSBhdCBodHRwczovL3ZhYWRpbi5jb20vbGljZW5zZS8KICAgICovLENOdD10PT5jbGFzcyBleHRlbmRzIHR7Z2V0RXZlbnRDb250ZXh0KHQpe2NvbnN0IGU9e30sbj10LmNvbXBvc2VkUGF0aCgpLGk9bltuLmluZGV4T2YodGhpcy4kLnRhYmxlKS0zXTtyZXR1cm4gaT8oZS5zZWN0aW9uPVsiYm9keSIsImhlYWRlciIsImZvb3RlciIsImRldGFpbHMiXS5maWx0ZXIoKHQ9PmkuZ2V0QXR0cmlidXRlKCJwYXJ0IikuaW5kZXhPZih0KT4tMSkpWzBdLGkuX2NvbHVtbiYmKGUuY29sdW1uPWkuX2NvbHVtbiksImJvZHkiIT09ZS5zZWN0aW9uJiYiZGV0YWlscyIhPT1lLnNlY3Rpb258fE9iamVjdC5hc3NpZ24oZSx0aGlzLl9fZ2V0Um93TW9kZWwoaS5wYXJlbnRFbGVtZW50KSksZSk6ZX19Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBWYWFkaW4gTHRkLgogICAgVGhpcyBwcm9ncmFtIGlzIGF2YWlsYWJsZSB1bmRlciBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCwgYXZhaWxhYmxlIGF0IGh0dHBzOi8vdmFhZGluLmNvbS9saWNlbnNlLwogICAgKi8sQU50PXQ9PmNsYXNzIGV4dGVuZHMgdHtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57X2ZpbHRlcnM6e3R5cGU6QXJyYXksdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19fX1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJmaWx0ZXItY2hhbmdlZCIsdGhpcy5fZmlsdGVyQ2hhbmdlZC5iaW5kKHRoaXMpKX1fZmlsdGVyQ2hhbmdlZCh0KXt0LnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuX19hZGRGaWx0ZXIodC50YXJnZXQpLHRoaXMuX19hcHBseUZpbHRlcnMoKX1fX3JlbW92ZUZpbHRlcnModCl7MCE9dC5sZW5ndGgmJih0aGlzLl9maWx0ZXJzPXRoaXMuX2ZpbHRlcnMuZmlsdGVyKChlPT50LmluZGV4T2YoZSk8MCkpLHRoaXMuX19hcHBseUZpbHRlcnMoKSl9X19hZGRGaWx0ZXIodCl7LTE9PT10aGlzLl9maWx0ZXJzLmluZGV4T2YodCkmJnRoaXMuX2ZpbHRlcnMucHVzaCh0KX1fX2FwcGx5RmlsdGVycygpe3RoaXMuZGF0YVByb3ZpZGVyJiZ0aGlzLmlzQXR0YWNoZWQmJnRoaXMuY2xlYXJDYWNoZSgpfV9tYXBGaWx0ZXJzKCl7cmV0dXJuIHRoaXMuX2ZpbHRlcnMubWFwKCh0PT4oe3BhdGg6dC5wYXRoLHZhbHVlOnQudmFsdWV9KSkpfX0KLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE3IFZhYWRpbiBMdGQuCiAgICBUaGlzIHByb2dyYW0gaXMgYXZhaWxhYmxlIHVuZGVyIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wLCBhdmFpbGFibGUgYXQgaHR0cHM6Ly92YWFkaW4uY29tL2xpY2Vuc2UvCiAgICAqLztjbGFzcyBrTnQgZXh0ZW5kcyBjbGFzcyBleHRlbmRzIHlle317c3RhdGljIGdldCBpcygpe3JldHVybiJ2YWFkaW4tZ3JpZC10ZW1wbGF0aXplciJ9c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue2RhdGFIb3N0Ok9iamVjdCx0ZW1wbGF0ZTpPYmplY3QsX3RlbXBsYXRlSW5zdGFuY2VzOnt0eXBlOkFycmF5LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuW119fSxfcGFyZW50UGF0aFZhbHVlczp7dmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm57fX19LF9ncmlkOk9iamVjdH19c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl90ZW1wbGF0ZUluc3RhbmNlc0NoYW5nZWQoX3RlbXBsYXRlSW5zdGFuY2VzLiosIF9wYXJlbnRQYXRoVmFsdWVzLiopIl19Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX2luc3RhbmNlUHJvcHM9e2RldGFpbHNPcGVuZWQ6ITAsaW5kZXg6ITAsaXRlbTohMCxzZWxlY3RlZDohMCxleHBhbmRlZDohMCxsZXZlbDohMH19Y3JlYXRlSW5zdGFuY2UoKXt0aGlzLl9lbnN1cmVUZW1wbGF0aXplZCgpO2NvbnN0IHQ9bmV3IHRoaXMuX1RlbXBsYXRlQ2xhc3Moe30pO3JldHVybiB0aGlzLmFkZEluc3RhbmNlKHQpLHR9YWRkSW5zdGFuY2UodCl7LTE9PT10aGlzLl90ZW1wbGF0ZUluc3RhbmNlcy5pbmRleE9mKHQpJiYodGhpcy5fdGVtcGxhdGVJbnN0YW5jZXMucHVzaCh0KSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCgpPT50aGlzLm5vdGlmeVBhdGgoIl90ZW1wbGF0ZUluc3RhbmNlcy4qIix0aGlzLl90ZW1wbGF0ZUluc3RhbmNlcykpKSl9cmVtb3ZlSW5zdGFuY2UodCl7Y29uc3QgZT10aGlzLl90ZW1wbGF0ZUluc3RhbmNlcy5pbmRleE9mKHQpO3RoaXMuc3BsaWNlKCJfdGVtcGxhdGVJbnN0YW5jZXMiLGUsMSl9X2Vuc3VyZVRlbXBsYXRpemVkKCl7dGhpcy5fVGVtcGxhdGVDbGFzc3x8KHRoaXMuX1RlbXBsYXRlQ2xhc3M9WHIodGhpcy50ZW1wbGF0ZSx0aGlzLHtpbnN0YW5jZVByb3BzOnRoaXMuX2luc3RhbmNlUHJvcHMscGFyZW50TW9kZWw6ITAsZm9yd2FyZEhvc3RQcm9wOmZ1bmN0aW9uKHQsZSl7dGhpcy5fZm9yd2FyZFBhcmVudFByb3AodCxlKSx0aGlzLl90ZW1wbGF0ZUluc3RhbmNlcyYmdGhpcy5fdGVtcGxhdGVJbnN0YW5jZXMuZm9yRWFjaCgobj0+bi5ub3RpZnlQYXRoKHQsZSkpKX0sbm90aWZ5SW5zdGFuY2VQcm9wOmZ1bmN0aW9uKHQsZSxuKXtpZigiaW5kZXgiPT09ZXx8Iml0ZW0iPT09ZSlyZXR1cm47Y29uc3QgaT1gX18ke2V9X19gO2lmKHRbaV09PT1uKXJldHVybjt0W2ldPW47Y29uc3Qgcj1BcnJheS5mcm9tKHRoaXMuX2dyaWQuJC5pdGVtcy5jaGlsZHJlbikuZmlsdGVyKChlPT50aGlzLl9ncmlkLl9pdGVtc0VxdWFsKGUuX2l0ZW0sdC5pdGVtKSkpWzBdO3ImJkFycmF5LmZyb20oci5jaGlsZHJlbikuZm9yRWFjaCgodD0+e3QuX2luc3RhbmNlJiYodC5faW5zdGFuY2VbaV09bix0Ll9pbnN0YW5jZS5ub3RpZnlQYXRoKGUsbikpfSkpO2NvbnN0IG89Iml0ZW0uIjtpZihBcnJheS5pc0FycmF5KHRoaXMuX2dyaWQuaXRlbXMpJiYwPT09ZS5pbmRleE9mKG8pKXtjb25zdCBpPXRoaXMuX2dyaWQuaXRlbXMuaW5kZXhPZih0Lml0ZW0pLHI9ZS5zbGljZShvLmxlbmd0aCk7dGhpcy5fZ3JpZC5ub3RpZnlQYXRoKGBpdGVtcy4ke2l9LiR7cn1gLG4pfWNvbnN0IGE9YF8ke2V9SW5zdGFuY2VDaGFuZ2VkQ2FsbGJhY2tgO3RoaXMuX2dyaWQmJnRoaXMuX2dyaWRbYV0mJnRoaXMuX2dyaWRbYV0odCxuKX19KSl9X2ZvcndhcmRQYXJlbnRQcm9wKHQsZSl7dGhpcy5fcGFyZW50UGF0aFZhbHVlc1t0XT1lLHRoaXMuX3RlbXBsYXRlSW5zdGFuY2VzLmZvckVhY2goKG49Pm4ubm90aWZ5UGF0aCh0LGUpKSl9X3RlbXBsYXRlSW5zdGFuY2VzQ2hhbmdlZCh0LGUpe2xldCBuLGk7aWYoIl90ZW1wbGF0ZUluc3RhbmNlcyI9PT10LnBhdGgpbj0wLGk9dGhpcy5fdGVtcGxhdGVJbnN0YW5jZXMubGVuZ3RoO2Vsc2V7aWYoIl90ZW1wbGF0ZUluc3RhbmNlcy5zcGxpY2VzIiE9PXQucGF0aClyZXR1cm47bj10LnZhbHVlLmluZGV4LGk9dC52YWx1ZS5hZGRlZENvdW50fU9iamVjdC5rZXlzKHRoaXMuX3BhcmVudFBhdGhWYWx1ZXN8fHt9KS5mb3JFYWNoKCh0PT57Zm9yKHZhciBlPW47ZTxuK2k7ZSsrKXRoaXMuX3RlbXBsYXRlSW5zdGFuY2VzW2VdLnNldCh0LHRoaXMuX3BhcmVudFBhdGhWYWx1ZXNbdF0pfSkpfX1jdXN0b21FbGVtZW50cy5kZWZpbmUoa050LmlzLGtOdCk7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBWYWFkaW4gTHRkLgogICAgVGhpcyBwcm9ncmFtIGlzIGF2YWlsYWJsZSB1bmRlciBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCwgYXZhaWxhYmxlIGF0IGh0dHBzOi8vdmFhZGluLmNvbS9saWNlbnNlLwogICAgKi8KY29uc3QgTE50PXQ9PmNsYXNzIGV4dGVuZHMgdHtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57ZGV0YWlsc09wZW5lZEl0ZW1zOnt0eXBlOkFycmF5LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuW119fSxfcm93RGV0YWlsc1RlbXBsYXRlOk9iamVjdCxyb3dEZXRhaWxzUmVuZGVyZXI6RnVuY3Rpb24sX2RldGFpbHNDZWxsczp7dHlwZTpBcnJheX19fXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfZGV0YWlsc09wZW5lZEl0ZW1zQ2hhbmdlZChkZXRhaWxzT3BlbmVkSXRlbXMuKiwgX3Jvd0RldGFpbHNUZW1wbGF0ZSwgcm93RGV0YWlsc1JlbmRlcmVyKSIsIl9yb3dEZXRhaWxzVGVtcGxhdGVPclJlbmRlcmVyQ2hhbmdlZChfcm93RGV0YWlsc1RlbXBsYXRlLCByb3dEZXRhaWxzUmVuZGVyZXIpIl19X3Jvd0RldGFpbHNUZW1wbGF0ZU9yUmVuZGVyZXJDaGFuZ2VkKHQsZSl7aWYodCYmZSl0aHJvdyBuZXcgRXJyb3IoIllvdSBzaG91bGQgb25seSB1c2UgZWl0aGVyIGEgcmVuZGVyZXIgb3IgYSB0ZW1wbGF0ZSBmb3Igcm93IGRldGFpbHMiKTtpZih0fHxlKXtpZih0JiYhdC50ZW1wbGF0aXplcil7dmFyIG49bmV3IGtOdDtuLl9ncmlkPXRoaXMsbi5kYXRhSG9zdD10aGlzLmRhdGFIb3N0LG4udGVtcGxhdGU9dCx0LnRlbXBsYXRpemVyPW59dGhpcy5fY29sdW1uVHJlZSYmQXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZvckVhY2goKHQ9Pnt0LnF1ZXJ5U2VsZWN0b3IoIltwYXJ0fj1kZXRhaWxzLWNlbGxdIil8fCh0aGlzLl91cGRhdGVSb3codCx0aGlzLl9jb2x1bW5UcmVlW3RoaXMuX2NvbHVtblRyZWUubGVuZ3RoLTFdKSx0aGlzLl9hMTF5VXBkYXRlUm93RGV0YWlsc09wZW5lZCh0LCExKSksZGVsZXRlIHQucXVlcnlTZWxlY3RvcigiW3BhcnR+PWRldGFpbHMtY2VsbF0iKS5faW5zdGFuY2V9KSksdGhpcy5kZXRhaWxzT3BlbmVkSXRlbXMubGVuZ3RoJiYoQXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZvckVhY2godGhpcy5fdG9nZ2xlRGV0YWlsc0NlbGwsdGhpcyksdGhpcy5fdXBkYXRlKCkpfX1fZGV0YWlsc09wZW5lZEl0ZW1zQ2hhbmdlZCh0LGUsbil7ImRldGFpbHNPcGVuZWRJdGVtcy5sZW5ndGgiIT09dC5wYXRoJiZ0LnZhbHVlJiZBcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZm9yRWFjaCgodD0+e3RoaXMuX3RvZ2dsZURldGFpbHNDZWxsKHQsdC5faXRlbSksdGhpcy5fYTExeVVwZGF0ZVJvd0RldGFpbHNPcGVuZWQodCx0aGlzLl9pc0RldGFpbHNPcGVuZWQodC5faXRlbSkpLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgiZGV0YWlscy1vcGVuZWQiLHRoaXMuX2lzRGV0YWlsc09wZW5lZCh0Ll9pdGVtKSx0KX0pKX1fY29uZmlndXJlRGV0YWlsc0NlbGwodCl7dC5zZXRBdHRyaWJ1dGUoInBhcnQiLCJjZWxsIGRldGFpbHMtY2VsbCIpLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgiZnJvemVuIiwhMCx0KX1fdG9nZ2xlRGV0YWlsc0NlbGwodCxlKXtjb25zdCBuPXQucXVlcnlTZWxlY3RvcignW3BhcnR+PSJkZXRhaWxzLWNlbGwiXScpO2lmKCFuKXJldHVybjtjb25zdCBpPSF0aGlzLl9pc0RldGFpbHNPcGVuZWQoZSkscj0hIW4uaGlkZGVuIT09aTsobi5faW5zdGFuY2V8fG4uX3JlbmRlcmVyKSYmbi5oaWRkZW49PT1pfHwobi5oaWRkZW49aSxpP3Quc3R5bGUucmVtb3ZlUHJvcGVydHkoInBhZGRpbmctYm90dG9tIik6KHRoaXMucm93RGV0YWlsc1JlbmRlcmVyPyhuLl9yZW5kZXJlcj10aGlzLnJvd0RldGFpbHNSZW5kZXJlcixuLl9yZW5kZXJlci5jYWxsKHRoaXMsbi5fY29udGVudCx0aGlzLHtpbmRleDp0LmluZGV4LGl0ZW06ZX0pKTp0aGlzLl9yb3dEZXRhaWxzVGVtcGxhdGUmJiFuLl9pbnN0YW5jZSYmKG4uX2luc3RhbmNlPXRoaXMuX3Jvd0RldGFpbHNUZW1wbGF0ZS50ZW1wbGF0aXplci5jcmVhdGVJbnN0YW5jZSgpLG4uX2NvbnRlbnQuaW5uZXJIVE1MPSIiLG4uX2NvbnRlbnQuYXBwZW5kQ2hpbGQobi5faW5zdGFuY2Uucm9vdCksdGhpcy5fdXBkYXRlSXRlbSh0LGUpKSx6aSgpLHQuc3R5bGUuc2V0UHJvcGVydHkoInBhZGRpbmctYm90dG9tIixgJHtuLm9mZnNldEhlaWdodH1weGApLHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKCk9PnRoaXMubm90aWZ5UmVzaXplKCkpKSkpLHImJih0aGlzLl91cGRhdGVNZXRyaWNzKCksdGhpcy5fcG9zaXRpb25JdGVtcygpKX1fdXBkYXRlRGV0YWlsc0NlbGxIZWlnaHRzKCl7QXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMucXVlcnlTZWxlY3RvckFsbCgnW3BhcnR+PSJkZXRhaWxzLWNlbGwiXTpub3QoW2hpZGRlbl0pJykpLmZvckVhY2goKHQ9Pnt0LnBhcmVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoInBhZGRpbmctYm90dG9tIixgJHt0Lm9mZnNldEhlaWdodH1weGApfSkpfV9pc0RldGFpbHNPcGVuZWQodCl7cmV0dXJuIHRoaXMuZGV0YWlsc09wZW5lZEl0ZW1zJiYtMSE9PXRoaXMuX2dldEl0ZW1JbmRleEluQXJyYXkodCx0aGlzLmRldGFpbHNPcGVuZWRJdGVtcyl9b3Blbkl0ZW1EZXRhaWxzKHQpe3RoaXMuX2lzRGV0YWlsc09wZW5lZCh0KXx8dGhpcy5wdXNoKCJkZXRhaWxzT3BlbmVkSXRlbXMiLHQpfWNsb3NlSXRlbURldGFpbHModCl7dGhpcy5faXNEZXRhaWxzT3BlbmVkKHQpJiZ0aGlzLnNwbGljZSgiZGV0YWlsc09wZW5lZEl0ZW1zIix0aGlzLl9nZXRJdGVtSW5kZXhJbkFycmF5KHQsdGhpcy5kZXRhaWxzT3BlbmVkSXRlbXMpLDEpfV9kZXRhaWxzT3BlbmVkSW5zdGFuY2VDaGFuZ2VkQ2FsbGJhY2sodCxlKXtzdXBlci5fZGV0YWlsc09wZW5lZEluc3RhbmNlQ2hhbmdlZENhbGxiYWNrJiZzdXBlci5fZGV0YWlsc09wZW5lZEluc3RhbmNlQ2hhbmdlZENhbGxiYWNrKHQsZSksZT90aGlzLm9wZW5JdGVtRGV0YWlscyh0Lml0ZW0pOnRoaXMuY2xvc2VJdGVtRGV0YWlscyh0Lml0ZW0pfX0KLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE3IFZhYWRpbiBMdGQuCiAgICBUaGlzIHByb2dyYW0gaXMgYXZhaWxhYmxlIHVuZGVyIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wLCBhdmFpbGFibGUgYXQgaHR0cHM6Ly92YWFkaW4uY29tL2xpY2Vuc2UvCiAgICAqLyxQTnQ9dD0+Y2xhc3MgZXh0ZW5kcyB0e2dldCBfdGltZW91dHMoKXtyZXR1cm57U0NST0xMSU5HOjUwMCxJR05PUkVfV0hFRUw6NTAwfX1zdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57X2Zyb3plbkNlbGxzOnt0eXBlOkFycmF5LHZhbHVlOigpPT5bXX0sX3Jvd1dpdGhGb2N1c2VkRWxlbWVudDpFbGVtZW50LF9kZWx0YVlBY2M6e3R5cGU6TnVtYmVyLHZhbHVlOjB9LF91c2VTdGlja3k6e3R5cGU6Qm9vbGVhbix2YWx1ZTp3aW5kb3cuQ1NTJiZ3aW5kb3cuQ1NTLnN1cHBvcnRzJiYod2luZG93LkNTUy5zdXBwb3J0cygicG9zaXRpb24iLCJzdGlja3kiKXx8d2luZG93LkNTUy5zdXBwb3J0cygicG9zaXRpb24iLCItd2Via2l0LXN0aWNreSIpKX19fXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfc2Nyb2xsVmlld3BvcnRIZWlnaHRVcGRhdGVkKF92aWV3cG9ydEhlaWdodCkiXX1zZXQgX3Njcm9sbFRvcCh0KXt0aGlzLiQudGFibGUuc2Nyb2xsVG9wPXR9Z2V0IF9zY3JvbGxUb3AoKXtyZXR1cm4gdGhpcy4kLnRhYmxlLnNjcm9sbFRvcH1jb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fc2Nyb2xsTGluZUhlaWdodD10aGlzLl9nZXRTY3JvbGxMaW5lSGVpZ2h0KCl9X2dldFNjcm9sbExpbmVIZWlnaHQoKXtjb25zdCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3Quc3R5bGUuZm9udFNpemU9ImluaXRpYWwiLHQuc3R5bGUuZGlzcGxheT0ibm9uZSIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0KTtjb25zdCBlPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQpLmZvbnRTaXplO3JldHVybiBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHQpLGU/d2luZG93LnBhcnNlSW50KGUpOnZvaWQgMH1fc2Nyb2xsVmlld3BvcnRIZWlnaHRVcGRhdGVkKHQpe3RoaXMuX3Njcm9sbFBhZ2VIZWlnaHQ9dC10aGlzLiQuaGVhZGVyLmNsaWVudEhlaWdodC10aGlzLiQuZm9vdGVyLmNsaWVudEhlaWdodC10aGlzLl9zY3JvbGxMaW5lSGVpZ2h0fXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLiQub3V0ZXJzY3JvbGxlcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLnNjcm9sbFRhcmdldD10aGlzLiQudGFibGUsdGhpcy5hZGRFdmVudExpc3RlbmVyKCJ3aGVlbCIsdGhpcy5fb25XaGVlbCksdGhpcy4kLml0ZW1zLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzaW4iLCh0PT57Y29uc3QgZT10LmNvbXBvc2VkUGF0aCgpLmluZGV4T2YodGhpcy4kLml0ZW1zKTt0aGlzLl9yb3dXaXRoRm9jdXNlZEVsZW1lbnQ9dC5jb21wb3NlZFBhdGgoKVtlLTFdfSkpLHRoaXMuJC5pdGVtcy5hZGRFdmVudExpc3RlbmVyKCJmb2N1c291dCIsKCgpPT50aGlzLl9yb3dXaXRoRm9jdXNlZEVsZW1lbnQ9dm9pZCAwKSksdGhpcy5zY3JvbGxUYXJnZXQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwoKCk9PnRoaXMuX19tb3VzZURvd249ITApKSx0aGlzLnNjcm9sbFRhcmdldC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIiwoKCk9Pnt0aGlzLl9fbW91c2VEb3duPSExLHRoaXMuX19wZW5kaW5nUmVvcmRlciYmKHRoaXMuX19wZW5kaW5nUmVvcmRlcj0hMSxzZXRUaW1lb3V0KCgoKT0+dGhpcy5fcmVvcmRlclJvd3MoKSksdGhpcy5fdGltZW91dHMuU0NST0xMSU5HKSl9KSl9c2Nyb2xsVG9JbmRleCh0KXt0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSSgoKCk9PnN1cGVyLnNjcm9sbFRvSW5kZXgodCkpKX1fb25XaGVlbCh0KXtpZih0LmN0cmxLZXl8fHRoaXMuX2hhc1Njcm9sbGVkQW5jZXN0b3IodC50YXJnZXQsdC5kZWx0YVgsdC5kZWx0YVkpKXJldHVybjtjb25zdCBlPXRoaXMuJC50YWJsZTtsZXQgbj10LmRlbHRhWTtpZih0LmRlbHRhTW9kZT09PVdoZWVsRXZlbnQuRE9NX0RFTFRBX0xJTkU/bio9dGhpcy5fc2Nyb2xsTGluZUhlaWdodDp0LmRlbHRhTW9kZT09PVdoZWVsRXZlbnQuRE9NX0RFTFRBX1BBR0UmJihuKj10aGlzLl9zY3JvbGxQYWdlSGVpZ2h0KSx0aGlzLl93aGVlbEFuaW1hdGlvbkZyYW1lKXJldHVybiB0aGlzLl9kZWx0YVlBY2MrPW4sdm9pZCB0LnByZXZlbnREZWZhdWx0KCk7bis9dGhpcy5fZGVsdGFZQWNjLHRoaXMuX2RlbHRhWUFjYz0wLHRoaXMuX3doZWVsQW5pbWF0aW9uRnJhbWU9ITAsdGhpcy5fZGVib3VuY2VyV2hlZWxBbmltYXRpb25GcmFtZT1Fbi5kZWJvdW5jZSh0aGlzLl9kZWJvdW5jZXJXaGVlbEFuaW1hdGlvbkZyYW1lLF90LCgoKT0+dGhpcy5fd2hlZWxBbmltYXRpb25GcmFtZT0hMSkpO3ZhciBpPU1hdGguYWJzKHQuZGVsdGFYKStNYXRoLmFicyhuKTt0aGlzLl9jYW5TY3JvbGwoZSx0LmRlbHRhWCxuKT8odC5wcmV2ZW50RGVmYXVsdCgpLGUuc2Nyb2xsVG9wKz1uLGUuc2Nyb2xsTGVmdCs9dC5kZWx0YVgsdGhpcy5fc2Nyb2xsSGFuZGxlcigpLHRoaXMuX2hhc1Jlc2lkdWFsTW9tZW50dW09ITAsdGhpcy5faWdub3JlTmV3V2hlZWw9ITAsdGhpcy5fZGVib3VuY2VySWdub3JlTmV3V2hlZWw9RW4uZGVib3VuY2UodGhpcy5fZGVib3VuY2VySWdub3JlTmV3V2hlZWwsZ3QuYWZ0ZXIodGhpcy5fdGltZW91dHMuSUdOT1JFX1dIRUVMKSwoKCk9PnRoaXMuX2lnbm9yZU5ld1doZWVsPSExKSkpOnRoaXMuX2hhc1Jlc2lkdWFsTW9tZW50dW0mJmk8PXRoaXMuX3ByZXZpb3VzTW9tZW50dW18fHRoaXMuX2lnbm9yZU5ld1doZWVsP3QucHJldmVudERlZmF1bHQoKTppPnRoaXMuX3ByZXZpb3VzTW9tZW50dW0mJih0aGlzLl9oYXNSZXNpZHVhbE1vbWVudHVtPSExKSx0aGlzLl9wcmV2aW91c01vbWVudHVtPWl9X2hhc1Njcm9sbGVkQW5jZXN0b3IodCxlLG4pe3JldHVybiJ2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQiIT09dC5sb2NhbE5hbWUmJighKCF0aGlzLl9jYW5TY3JvbGwodCxlLG4pfHwtMT09PVsiYXV0byIsInNjcm9sbCJdLmluZGV4T2YoZ2V0Q29tcHV0ZWRTdHlsZSh0KS5vdmVyZmxvdykpfHwodCE9PXRoaXMmJnQucGFyZW50RWxlbWVudD90aGlzLl9oYXNTY3JvbGxlZEFuY2VzdG9yKHQucGFyZW50RWxlbWVudCxlLG4pOnZvaWQgMCkpfV9jYW5TY3JvbGwodCxlLG4pe3JldHVybiBuPjAmJnQuc2Nyb2xsVG9wPHQuc2Nyb2xsSGVpZ2h0LXQub2Zmc2V0SGVpZ2h0fHxuPDAmJnQuc2Nyb2xsVG9wPjB8fGU+MCYmdC5zY3JvbGxMZWZ0PHQuc2Nyb2xsV2lkdGgtdC5vZmZzZXRXaWR0aHx8ZTwwJiZ0LnNjcm9sbExlZnQ+MH1fc2NoZWR1bGVTY3JvbGxpbmcoKXt0aGlzLl9zY3JvbGxpbmdGcmFtZXx8KHRoaXMuX3Njcm9sbGluZ0ZyYW1lPXJlcXVlc3RBbmltYXRpb25GcmFtZSgoKCk9PnRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgic2Nyb2xsaW5nIiwhMCx0aGlzLiQuc2Nyb2xsZXIpKSkpLHRoaXMuX2RlYm91bmNlU2Nyb2xsaW5nPUVuLmRlYm91bmNlKHRoaXMuX2RlYm91bmNlU2Nyb2xsaW5nLGd0LmFmdGVyKHRoaXMuX3RpbWVvdXRzLlNDUk9MTElORyksKCgpPT57Y2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fc2Nyb2xsaW5nRnJhbWUpLGRlbGV0ZSB0aGlzLl9zY3JvbGxpbmdGcmFtZSx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoInNjcm9sbGluZyIsITEsdGhpcy4kLnNjcm9sbGVyKSx0aGlzLl9yZW9yZGVyUm93cygpfSkpfV9hZnRlclNjcm9sbCgpe3RoaXMuX3RyYW5zbGF0ZVN0YXRpb25hcnlFbGVtZW50cygpLHRoaXMuaGFzQXR0cmlidXRlKCJyZW9yZGVyaW5nIil8fHRoaXMuX3NjaGVkdWxlU2Nyb2xsaW5nKCksdGhpcy5fdXBkYXRlT3ZlcmZsb3coKX1fdXBkYXRlT3ZlcmZsb3coKXtsZXQgdD0iIjtjb25zdCBlPXRoaXMuJC50YWJsZTtlLnNjcm9sbFRvcDxlLnNjcm9sbEhlaWdodC1lLmNsaWVudEhlaWdodCYmKHQrPSIgYm90dG9tIiksZS5zY3JvbGxUb3A+MCYmKHQrPSIgdG9wIiksZS5zY3JvbGxMZWZ0PGUuc2Nyb2xsV2lkdGgtZS5jbGllbnRXaWR0aCYmKHQrPSIgcmlnaHQiKSxlLnNjcm9sbExlZnQ+MCYmKHQrPSIgbGVmdCIpLHRoaXMuX2RlYm91bmNlT3ZlcmZsb3c9RW4uZGVib3VuY2UodGhpcy5fZGVib3VuY2VPdmVyZmxvdyxfdCwoKCk9Pntjb25zdCBlPXQudHJpbSgpO2UubGVuZ3RoPjAmJnRoaXMuZ2V0QXR0cmlidXRlKCJvdmVyZmxvdyIpIT09ZT90aGlzLnNldEF0dHJpYnV0ZSgib3ZlcmZsb3ciLGUpOjA9PWUubGVuZ3RoJiZ0aGlzLmhhc0F0dHJpYnV0ZSgib3ZlcmZsb3ciKSYmdGhpcy5yZW1vdmVBdHRyaWJ1dGUoIm92ZXJmbG93Iil9KSl9X3Jlb3JkZXJSb3dzKCl7aWYodGhpcy5fX21vdXNlRG93bilyZXR1cm4gdm9pZCh0aGlzLl9fcGVuZGluZ1Jlb3JkZXI9ITApO2NvbnN0IHQ9dGhpcy4kLml0ZW1zLGU9dC5xdWVyeVNlbGVjdG9yQWxsKCJ0ciIpO2lmKCFlLmxlbmd0aClyZXR1cm47Y29uc3Qgbj10aGlzLl92aXJ0dWFsU3RhcnQrdGhpcy5fdmlkeE9mZnNldCxpPXRoaXMuX3Jvd1dpdGhGb2N1c2VkRWxlbWVudHx8QXJyYXkuZnJvbShlKS5maWx0ZXIoKHQ9PiF0LmhpZGRlbikpWzBdO2lmKCFpKXJldHVybjtjb25zdCByPWkuaW5kZXgtbixvPUFycmF5LmZyb20oZSkuaW5kZXhPZihpKS1yO2lmKG8+MClmb3IobGV0IG49MDtuPG87bisrKXQuYXBwZW5kQ2hpbGQoZVtuXSk7ZWxzZSBpZihvPDApZm9yKGxldCBuPWUubGVuZ3RoK287bjxlLmxlbmd0aDtuKyspdC5pbnNlcnRCZWZvcmUoZVtuXSxlWzBdKTtpZih0aGlzLl9zYWZhcmkpe2NvbnN0e3RyYW5zZm9ybTp0fT10aGlzLiQuaGVhZGVyLnN0eWxlO3RoaXMuJC5oZWFkZXIuc3R5bGUudHJhbnNmb3JtPSIiLHNldFRpbWVvdXQoKCgpPT50aGlzLiQuaGVhZGVyLnN0eWxlLnRyYW5zZm9ybT10KSl9fV9mcm96ZW5DZWxsc0NoYW5nZWQoKXt0aGlzLl9kZWJvdW5jZXJDYWNoZUVsZW1lbnRzPUVuLmRlYm91bmNlKHRoaXMuX2RlYm91bmNlckNhY2hlRWxlbWVudHMsdnQsKCgpPT57QXJyYXkuZnJvbSh0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgnW3BhcnR+PSJjZWxsIl0nKSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5zdHlsZS50cmFuc2Zvcm09IiJ9KSksdGhpcy5fZnJvemVuQ2VsbHM9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy4kLnRhYmxlLnF1ZXJ5U2VsZWN0b3JBbGwoIltmcm96ZW5dIikpLHRoaXMuX3VwZGF0ZVNjcm9sbGVyTWVhc3VyZW1lbnRzKCksdGhpcy5fdHJhbnNsYXRlU3RhdGlvbmFyeUVsZW1lbnRzKCl9KSksdGhpcy5fdXBkYXRlTGFzdEZyb3plbigpfV91cGRhdGVTY3JvbGxlck1lYXN1cmVtZW50cygpe3RoaXMuX2Zyb3plbkNlbGxzLmxlbmd0aD4wJiZ0aGlzLl9faXNSVEwmJih0aGlzLl9fc2Nyb2xsZXJNZXRyaWNzPXtzY3JvbGxXaWR0aDp0aGlzLiQudGFibGUuc2Nyb2xsV2lkdGgsY2xpZW50V2lkdGg6dGhpcy4kLnRhYmxlLmNsaWVudFdpZHRofSl9X3VwZGF0ZUxhc3RGcm96ZW4oKXtpZighdGhpcy5fY29sdW1uVHJlZSlyZXR1cm47Y29uc3QgdD10aGlzLl9jb2x1bW5UcmVlW3RoaXMuX2NvbHVtblRyZWUubGVuZ3RoLTFdLnNsaWNlKDApO3Quc29ydCgoKHQsZSk9PnQuX29yZGVyLWUuX29yZGVyKSk7Y29uc3QgZT10LnJlZHVjZSgoKHQsZSxuKT0+KGUuX2xhc3RGcm96ZW49ITEsZS5mcm96ZW4mJiFlLmhpZGRlbj9uOnQpKSx2b2lkIDApO3ZvaWQgMCE9PWUmJih0W2VdLl9sYXN0RnJvemVuPSEwKX1fdHJhbnNsYXRlU3RhdGlvbmFyeUVsZW1lbnRzKCl7Y29uc3QgdD1NYXRoLm1heCgwLHRoaXMuX3Njcm9sbExlZnQpLGU9TWF0aC5tYXgoMCx0aGlzLl9zY3JvbGxUb3ApO2xldCBuPTAsaT0wLHI9MDtpZih0aGlzLl91c2VTdGlja3l8fChuPXQsaT1lLHI9dGhpcy4kLnRhYmxlLmNsaWVudEhlaWdodC10aGlzLiQuZm9vdGVyLm9mZnNldEhlaWdodC10aGlzLiQuZm9vdGVyLm9mZnNldFRvcCksdGhpcy4kLmhlYWRlci5zdHlsZS50cmFuc2Zvcm09dGhpcy5fZ2V0VHJhbnNsYXRlKC10K24saSksdGhpcy4kLmZvb3Rlci5zdHlsZS50cmFuc2Zvcm09dGhpcy5fZ2V0VHJhbnNsYXRlKC10K24saStyKSx0aGlzLiQuaXRlbXMuc3R5bGUudHJhbnNmb3JtPXRoaXMuX2dldFRyYW5zbGF0ZSgtdCtuLDApLHRoaXMuX2Zyb3plbkNlbGxzLmxlbmd0aD4wKXtjb25zdCB0PXRoaXMuX19pc1JUTD90aGlzLl9fZ2V0Tm9ybWFsaXplZFNjcm9sbExlZnQodGhpcy4kLnRhYmxlKSt0aGlzLl9fc2Nyb2xsZXJNZXRyaWNzLmNsaWVudFdpZHRoLXRoaXMuX19zY3JvbGxlck1ldHJpY3Muc2Nyb2xsV2lkdGg6dGhpcy5fc2Nyb2xsTGVmdDtmb3IodmFyIG89dGhpcy5fZ2V0VHJhbnNsYXRlKHQsMCksYT0wO2E8dGhpcy5fZnJvemVuQ2VsbHMubGVuZ3RoO2ErKyl0aGlzLl9mcm96ZW5DZWxsc1thXS5zdHlsZS50cmFuc2Zvcm09b319X2dldFRyYW5zbGF0ZSh0LGUpe3JldHVybmB0cmFuc2xhdGUoJHt0fXB4LCAke2V9cHgpYH19Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBWYWFkaW4gTHRkLgogICAgVGhpcyBwcm9ncmFtIGlzIGF2YWlsYWJsZSB1bmRlciBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCwgYXZhaWxhYmxlIGF0IGh0dHBzOi8vdmFhZGluLmNvbS9saWNlbnNlLwogICAgKi8sTk50PXQ9PmNsYXNzIGV4dGVuZHMgdHtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57c2VsZWN0ZWRJdGVtczp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwLHZhbHVlOigpPT5bXX19fXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfc2VsZWN0ZWRJdGVtc0NoYW5nZWQoc2VsZWN0ZWRJdGVtcy4qKSJdfV9pc1NlbGVjdGVkKHQpe3JldHVybiB0aGlzLnNlbGVjdGVkSXRlbXMmJnRoaXMuX2dldEl0ZW1JbmRleEluQXJyYXkodCx0aGlzLnNlbGVjdGVkSXRlbXMpPi0xfXNlbGVjdEl0ZW0odCl7dGhpcy5faXNTZWxlY3RlZCh0KXx8dGhpcy5wdXNoKCJzZWxlY3RlZEl0ZW1zIix0KX1kZXNlbGVjdEl0ZW0odCl7Y29uc3QgZT10aGlzLl9nZXRJdGVtSW5kZXhJbkFycmF5KHQsdGhpcy5zZWxlY3RlZEl0ZW1zKTtlPi0xJiZ0aGlzLnNwbGljZSgic2VsZWN0ZWRJdGVtcyIsZSwxKX1fdG9nZ2xlSXRlbSh0KXstMT09PXRoaXMuX2dldEl0ZW1JbmRleEluQXJyYXkodCx0aGlzLnNlbGVjdGVkSXRlbXMpP3RoaXMuc2VsZWN0SXRlbSh0KTp0aGlzLmRlc2VsZWN0SXRlbSh0KX1fc2VsZWN0ZWRJdGVtc0NoYW5nZWQodCl7IXRoaXMuJC5pdGVtcy5jaGlsZHJlbi5sZW5ndGh8fCJzZWxlY3RlZEl0ZW1zIiE9PXQucGF0aCYmInNlbGVjdGVkSXRlbXMuc3BsaWNlcyIhPT10LnBhdGh8fEFycmF5LmZyb20odGhpcy4kLml0ZW1zLmNoaWxkcmVuKS5mb3JFYWNoKCh0PT57dGhpcy5fdXBkYXRlSXRlbSh0LHQuX2l0ZW0pfSkpfV9zZWxlY3RlZEluc3RhbmNlQ2hhbmdlZENhbGxiYWNrKHQsZSl7c3VwZXIuX3NlbGVjdGVkSW5zdGFuY2VDaGFuZ2VkQ2FsbGJhY2smJnN1cGVyLl9zZWxlY3RlZEluc3RhbmNlQ2hhbmdlZENhbGxiYWNrKHQsZSksZT90aGlzLnNlbGVjdEl0ZW0odC5pdGVtKTp0aGlzLmRlc2VsZWN0SXRlbSh0Lml0ZW0pfX0KLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE3IFZhYWRpbiBMdGQuCiAgICBUaGlzIHByb2dyYW0gaXMgYXZhaWxhYmxlIHVuZGVyIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wLCBhdmFpbGFibGUgYXQgaHR0cHM6Ly92YWFkaW4uY29tL2xpY2Vuc2UvCiAgICAqLyxJTnQ9dD0+Y2xhc3MgZXh0ZW5kcyB0e3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybnttdWx0aVNvcnQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX3NvcnRlcnM6e3R5cGU6QXJyYXksdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19LF9wcmV2aW91c1NvcnRlcnM6e3R5cGU6QXJyYXksdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19fX1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJzb3J0ZXItY2hhbmdlZCIsdGhpcy5fb25Tb3J0ZXJDaGFuZ2VkKSx3aW5kb3cuU2hhZHlET00mJnZ0LnJ1bigoKCk9Pntjb25zdCB0PXRoaXMucXVlcnlTZWxlY3RvckFsbCgidmFhZGluLWdyaWQtc29ydGVyIik7QXJyYXkuZnJvbSh0KS5mb3JFYWNoKCh0PT57dCBpbnN0YW5jZW9mIHllJiZ0LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJzb3J0ZXItY2hhbmdlZCIse2J1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSl9KSl9KSl9X29uU29ydGVyQ2hhbmdlZCh0KXtjb25zdCBlPXQudGFyZ2V0O3Quc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5fX3VwZGF0ZVNvcnRlcihlKSx0aGlzLl9fYXBwbHlTb3J0ZXJzKCl9X19yZW1vdmVTb3J0ZXJzKHQpezAhPXQubGVuZ3RoJiYodGhpcy5fc29ydGVycz10aGlzLl9zb3J0ZXJzLmZpbHRlcigoZT0+dC5pbmRleE9mKGUpPDApKSx0aGlzLm11bHRpU29ydCYmdGhpcy5fX3VwZGF0ZVNvcnRPcmRlcnMoKSx0aGlzLl9fYXBwbHlTb3J0ZXJzKCkpfV9fdXBkYXRlU29ydE9yZGVycygpe3RoaXMuX3NvcnRlcnMuZm9yRWFjaCgoKHQsZSk9PnQuX29yZGVyPXRoaXMuX3NvcnRlcnMubGVuZ3RoPjE/ZTpudWxsKSx0aGlzKX1fX3VwZGF0ZVNvcnRlcih0KXtpZih0LmRpcmVjdGlvbnx8LTEhPT10aGlzLl9zb3J0ZXJzLmluZGV4T2YodCkpaWYodC5fb3JkZXI9bnVsbCx0aGlzLm11bHRpU29ydCl0aGlzLl9yZW1vdmVBcnJheUl0ZW0odGhpcy5fc29ydGVycyx0KSx0LmRpcmVjdGlvbiYmdGhpcy5fc29ydGVycy51bnNoaWZ0KHQpLHRoaXMuX191cGRhdGVTb3J0T3JkZXJzKCksdGhpcy5fc29ydGVycy5mb3JFYWNoKCgodCxlKT0+dC5fb3JkZXI9dGhpcy5fc29ydGVycy5sZW5ndGg+MT9lOm51bGwpLHRoaXMpO2Vsc2UgaWYodC5kaXJlY3Rpb24pe2NvbnN0IGU9dGhpcy5fc29ydGVycy5maWx0ZXIoKGU9PmUhPXQpKTt0aGlzLl9zb3J0ZXJzPVt0XSxlLmZvckVhY2goKHQ9Pnt0Ll9vcmRlcj1udWxsLHQuZGlyZWN0aW9uPW51bGx9KSl9fV9fYXBwbHlTb3J0ZXJzKCl7dGhpcy5kYXRhUHJvdmlkZXImJnRoaXMuaXNBdHRhY2hlZCYmSlNPTi5zdHJpbmdpZnkodGhpcy5fcHJldmlvdXNTb3J0ZXJzKSE9PUpTT04uc3RyaW5naWZ5KHRoaXMuX21hcFNvcnRlcnMoKSkmJnRoaXMuY2xlYXJDYWNoZSgpLHRoaXMuX2ExMXlVcGRhdGVTb3J0ZXJzKCksdGhpcy5fcHJldmlvdXNTb3J0ZXJzPXRoaXMuX21hcFNvcnRlcnMoKX1fbWFwU29ydGVycygpe3JldHVybiB0aGlzLl9zb3J0ZXJzLm1hcCgodD0+KHtwYXRoOnQucGF0aCxkaXJlY3Rpb246dC5kaXJlY3Rpb259KSkpfV9yZW1vdmVBcnJheUl0ZW0odCxlKXtjb25zdCBuPXQuaW5kZXhPZihlKTtuPi0xJiZ0LnNwbGljZShuLDEpfX0KLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE4IFZhYWRpbiBMdGQuCiAgICBUaGlzIHByb2dyYW0gaXMgYXZhaWxhYmxlIHVuZGVyIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wLCBhdmFpbGFibGUgYXQgaHR0cHM6Ly92YWFkaW4uY29tL2xpY2Vuc2UvCiAgICAqLyxPTnQ9dD0+Y2xhc3MgZXh0ZW5kcyB0e3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntjZWxsQ2xhc3NOYW1lR2VuZXJhdG9yOkZ1bmN0aW9ufX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX19jZWxsQ2xhc3NOYW1lR2VuZXJhdG9yQ2hhbmdlZChjZWxsQ2xhc3NOYW1lR2VuZXJhdG9yKSJdfV9fY2VsbENsYXNzTmFtZUdlbmVyYXRvckNoYW5nZWQodCl7dGhpcy5nZW5lcmF0ZUNlbGxDbGFzc05hbWVzKCl9Z2VuZXJhdGVDZWxsQ2xhc3NOYW1lcygpe0FycmF5LmZyb20odGhpcy4kLml0ZW1zLmNoaWxkcmVuKS5maWx0ZXIoKHQ9PiF0LmhpZGRlbikpLmZvckVhY2goKHQ9PnRoaXMuX2dlbmVyYXRlQ2VsbENsYXNzTmFtZXModCx0aGlzLl9fZ2V0Um93TW9kZWwodCkpKSl9X2dlbmVyYXRlQ2VsbENsYXNzTmFtZXModCxlKXtBcnJheS5mcm9tKHQuY2hpbGRyZW4pLmZvckVhY2goKHQ9PntpZih0Ll9fZ2VuZXJhdGVkQ2xhc3NlcyYmdC5fX2dlbmVyYXRlZENsYXNzZXMuZm9yRWFjaCgoZT0+dC5jbGFzc0xpc3QucmVtb3ZlKGUpKSksdGhpcy5jZWxsQ2xhc3NOYW1lR2VuZXJhdG9yKXtjb25zdCBuPXRoaXMuY2VsbENsYXNzTmFtZUdlbmVyYXRvcih0Ll9jb2x1bW4sZSk7dC5fX2dlbmVyYXRlZENsYXNzZXM9biYmbi5zcGxpdCgiICIpLmZpbHRlcigodD0+dC5sZW5ndGg+MCkpLHQuX19nZW5lcmF0ZWRDbGFzc2VzJiZ0Ll9fZ2VuZXJhdGVkQ2xhc3Nlcy5mb3JFYWNoKChlPT50LmNsYXNzTGlzdC5hZGQoZSkpKX19KSl9fQovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTkgVmFhZGluIEx0ZC4KICAgIFRoaXMgcHJvZ3JhbSBpcyBhdmFpbGFibGUgdW5kZXIgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAsIGF2YWlsYWJsZSBhdCBodHRwczovL3ZhYWRpbi5jb20vbGljZW5zZS8KICAgICovLFJOdD0iYmV0d2VlbiIsek50PSJvbi10b3Atb3ItYmV0d2VlbiIsRE50PSJhYm92ZSIsQk50PSJiZWxvdyIsSE50PSJlbXB0eSIsRk50PXQ9PmNsYXNzIGV4dGVuZHMgdHtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57ZHJvcE1vZGU6U3RyaW5nLHJvd3NEcmFnZ2FibGU6Qm9vbGVhbixkcmFnRmlsdGVyOkZ1bmN0aW9uLGRyb3BGaWx0ZXI6RnVuY3Rpb24sX19kbmRBdXRvU2Nyb2xsVGhyZXNob2xkOnt2YWx1ZTo1MH19fXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfZHJhZ0Ryb3BBY2Nlc3NDaGFuZ2VkKHJvd3NEcmFnZ2FibGUsIGRyb3BNb2RlLCBkcmFnRmlsdGVyLCBkcm9wRmlsdGVyKSJdfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLiQudGFibGUuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ3N0YXJ0Iix0aGlzLl9vbkRyYWdTdGFydC5iaW5kKHRoaXMpKSx0aGlzLiQudGFibGUuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ2VuZCIsdGhpcy5fb25EcmFnRW5kLmJpbmQodGhpcykpLHRoaXMuJC50YWJsZS5hZGRFdmVudExpc3RlbmVyKCJkcmFnb3ZlciIsdGhpcy5fb25EcmFnT3Zlci5iaW5kKHRoaXMpKSx0aGlzLiQudGFibGUuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ2xlYXZlIix0aGlzLl9vbkRyYWdMZWF2ZS5iaW5kKHRoaXMpKSx0aGlzLiQudGFibGUuYWRkRXZlbnRMaXN0ZW5lcigiZHJvcCIsdGhpcy5fb25Ecm9wLmJpbmQodGhpcykpLHRoaXMuJC50YWJsZS5hZGRFdmVudExpc3RlbmVyKCJkcmFnZW50ZXIiLCh0PT57dGhpcy5kcm9wTW9kZSYmKHQucHJldmVudERlZmF1bHQoKSx0LnN0b3BQcm9wYWdhdGlvbigpKX0pKX1fb25EcmFnU3RhcnQodCl7aWYodGhpcy5yb3dzRHJhZ2dhYmxlKXtsZXQgZT10LnRhcmdldDtpZigidmFhZGluLWdyaWQtY2VsbC1jb250ZW50Ij09PWUubG9jYWxOYW1lJiYoZT1lLmFzc2lnbmVkU2xvdC5wYXJlbnROb2RlLnBhcmVudE5vZGUpLGUucGFyZW50Tm9kZSE9PXRoaXMuJC5pdGVtcylyZXR1cm47aWYodC5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoImRyYWdnaW5nLXJvd3MiLCEwLHRoaXMpLHRoaXMuX3NhZmFyaSl7Y29uc3QgdD1lLnN0eWxlLnRyYW5zZm9ybTtlLnN0eWxlLnRvcD0vdHJhbnNsYXRlWVwoKC4qKVwpLy5leGVjKHQpWzFdLGUuc3R5bGUudHJhbnNmb3JtPSJub25lIixyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCgpPT57ZS5zdHlsZS50b3A9IiIsZS5zdHlsZS50cmFuc2Zvcm09dH0pKX1jb25zdCBuPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7d2luZG93LlNoYWR5RE9NfHwodGhpcy5faW9zP3QuZGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZShlKTp0LmRhdGFUcmFuc2Zlci5zZXREcmFnSW1hZ2UoZSx0LmNsaWVudFgtbi5sZWZ0LHQuY2xpZW50WS1uLnRvcCkpO2xldCBpPVtlXTt0aGlzLl9pc1NlbGVjdGVkKGUuX2l0ZW0pJiYoaT10aGlzLl9fZ2V0Vmlld3BvcnRSb3dzKCkuZmlsdGVyKCh0PT50aGlzLl9pc1NlbGVjdGVkKHQuX2l0ZW0pKSkuZmlsdGVyKCh0PT4hdGhpcy5kcmFnRmlsdGVyfHx0aGlzLmRyYWdGaWx0ZXIodGhpcy5fX2dldFJvd01vZGVsKHQpKSkpKSx0LmRhdGFUcmFuc2Zlci5zZXREYXRhKCJ0ZXh0Iix0aGlzLl9fZm9ybWF0RGVmYXVsdFRyYW5zZmVyRGF0YShpKSksZS5zZXRBdHRyaWJ1dGUoImRyYWdzdGFydCIsaS5sZW5ndGg+MT9pLmxlbmd0aDoiIiksdGhpcy51cGRhdGVTdHlsZXMoeyItLV9ncmlkLWRyYWctc3RhcnQteCI6dC5jbGllbnRYLW4ubGVmdCsyMCsicHgiLCItLV9ncmlkLWRyYWctc3RhcnQteSI6dC5jbGllbnRZLW4udG9wKzEwKyJweCJ9KSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCgpPT57ZS5yZW1vdmVBdHRyaWJ1dGUoImRyYWdzdGFydCIpLHRoaXMudXBkYXRlU3R5bGVzKHsiLS1fZ3JpZC1kcmFnLXN0YXJ0LXgiOiIiLCItLV9ncmlkLWRyYWctc3RhcnQteSI6IiJ9KX0pKTtjb25zdCByPW5ldyBDdXN0b21FdmVudCgiZ3JpZC1kcmFnc3RhcnQiLHtkZXRhaWw6e2RyYWdnZWRJdGVtczppLm1hcCgodD0+dC5faXRlbSkpLHNldERyYWdEYXRhOihlLG4pPT50LmRhdGFUcmFuc2Zlci5zZXREYXRhKGUsbiksc2V0RHJhZ2dlZEl0ZW1zQ291bnQ6dD0+ZS5zZXRBdHRyaWJ1dGUoImRyYWdzdGFydCIsdCl9fSk7ci5vcmlnaW5hbEV2ZW50PXQsdGhpcy5kaXNwYXRjaEV2ZW50KHIpfX1fb25EcmFnRW5kKHQpe3RoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgiZHJhZ2dpbmctcm93cyIsITEsdGhpcyksdC5zdG9wUHJvcGFnYXRpb24oKTtjb25zdCBlPW5ldyBDdXN0b21FdmVudCgiZ3JpZC1kcmFnZW5kIik7ZS5vcmlnaW5hbEV2ZW50PXQsdGhpcy5kaXNwYXRjaEV2ZW50KGUpfV9vbkRyYWdMZWF2ZSh0KXt0LnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuX2NsZWFyRHJhZ1N0eWxlcygpfV9vbkRyYWdPdmVyKHQpe2lmKHRoaXMuZHJvcE1vZGUpe2lmKHRoaXMuX2Ryb3BMb2NhdGlvbj12b2lkIDAsdGhpcy5fZHJhZ092ZXJJdGVtPXZvaWQgMCx0aGlzLl9fZG5kQXV0b1Njcm9sbCh0LmNsaWVudFkpKXJldHVybiB2b2lkIHRoaXMuX2NsZWFyRHJhZ1N0eWxlcygpO2xldCBlPXQuY29tcG9zZWRQYXRoKCkuZmlsdGVyKCh0PT4idHIiPT09dC5sb2NhbE5hbWUpKVswXTtpZih0aGlzLl9lZmZlY3RpdmVTaXplJiYib24tZ3JpZCIhPT10aGlzLmRyb3BNb2RlKWlmKGUmJmUucGFyZW50Tm9kZT09PXRoaXMuJC5pdGVtcyl7Y29uc3Qgbj1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3RoaXMuX2Ryb3BMb2NhdGlvbj0ib24tdG9wIix0aGlzLmRyb3BNb2RlPT09Uk50P3RoaXMuX2Ryb3BMb2NhdGlvbj10LmNsaWVudFktbi50b3A8bi5ib3R0b20tdC5jbGllbnRZP0ROdDpCTnQ6dGhpcy5kcm9wTW9kZT09PXpOdCYmKHQuY2xpZW50WS1uLnRvcDxuLmhlaWdodC8zP3RoaXMuX2Ryb3BMb2NhdGlvbj1ETnQ6dC5jbGllbnRZLW4udG9wPm4uaGVpZ2h0LzMqMiYmKHRoaXMuX2Ryb3BMb2NhdGlvbj1CTnQpKX1lbHNle2lmKGUpcmV0dXJuO2lmKHRoaXMuZHJvcE1vZGUhPT1STnQmJnRoaXMuZHJvcE1vZGUhPT16TnQpcmV0dXJuO2U9QXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZpbHRlcigodD0+IXQuaGlkZGVuKSkucG9wKCksdGhpcy5fZHJvcExvY2F0aW9uPUJOdH1lbHNlIHRoaXMuX2Ryb3BMb2NhdGlvbj1ITnQ7aWYoZSYmZS5oYXNBdHRyaWJ1dGUoImRyb3AtZGlzYWJsZWQiKSlyZXR1cm4gdm9pZCh0aGlzLl9kcm9wTG9jYXRpb249dm9pZCAwKTt0LnN0b3BQcm9wYWdhdGlvbigpLHQucHJldmVudERlZmF1bHQoKSx0aGlzLl9kcm9wTG9jYXRpb249PT1ITnQ/dGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJkcmFnb3ZlciIsITAsdGhpcyk6ZT8odGhpcy5fZHJhZ092ZXJJdGVtPWUuX2l0ZW0sZS5nZXRBdHRyaWJ1dGUoImRyYWdvdmVyIikhPT10aGlzLl9kcm9wTG9jYXRpb24mJmUuc2V0QXR0cmlidXRlKCJkcmFnb3ZlciIsdGhpcy5fZHJvcExvY2F0aW9uKSk6dGhpcy5fY2xlYXJEcmFnU3R5bGVzKCl9fV9fZG5kQXV0b1Njcm9sbCh0KXtpZih0aGlzLl9fZG5kQXV0b1Njcm9sbGluZylyZXR1cm4hMDtjb25zdCBlPXRoaXMuJC5oZWFkZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tLG49dGhpcy4kLmZvb3Rlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AsaT1lLXQrdGhpcy5fX2RuZEF1dG9TY3JvbGxUaHJlc2hvbGQscj10LW4rdGhpcy5fX2RuZEF1dG9TY3JvbGxUaHJlc2hvbGQ7bGV0IG89MDtpZihyPjA/bz0yKnI6aT4wJiYobz0yKi1pKSxvKXtjb25zdCB0PXRoaXMuJC50YWJsZS5zY3JvbGxUb3A7aWYodGhpcy4kLnRhYmxlLnNjcm9sbFRvcCs9byx0IT09dGhpcy4kLnRhYmxlLnNjcm9sbFRvcClyZXR1cm4gdGhpcy5fX2RuZEF1dG9TY3JvbGxpbmc9ITAsc2V0VGltZW91dCgoKCk9PnRoaXMuX19kbmRBdXRvU2Nyb2xsaW5nPSExKSwyMCksdGhpcy5fc2Nyb2xsSGFuZGxlcigpLCEwfX1fX2dldFZpZXdwb3J0Um93cygpe2NvbnN0IHQ9dGhpcy4kLmhlYWRlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5ib3R0b20sZT10aGlzLiQuZm9vdGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZpbHRlcigobj0+e2NvbnN0IGk9bi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gaS5ib3R0b20+dCYmaS50b3A8ZX0pKX1fY2xlYXJEcmFnU3R5bGVzKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoImRyYWdvdmVyIiksQXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZvckVhY2goKHQ9PnQucmVtb3ZlQXR0cmlidXRlKCJkcmFnb3ZlciIpKSl9X29uRHJvcCh0KXtpZih0aGlzLmRyb3BNb2RlKXt0LnN0b3BQcm9wYWdhdGlvbigpLHQucHJldmVudERlZmF1bHQoKTtjb25zdCBlPXQuZGF0YVRyYW5zZmVyLnR5cGVzJiZBcnJheS5mcm9tKHQuZGF0YVRyYW5zZmVyLnR5cGVzKS5tYXAoKGU9Pih7dHlwZTplLGRhdGE6dC5kYXRhVHJhbnNmZXIuZ2V0RGF0YShlKX0pKSk7dGhpcy5fY2xlYXJEcmFnU3R5bGVzKCk7Y29uc3Qgbj1uZXcgQ3VzdG9tRXZlbnQoImdyaWQtZHJvcCIse2J1YmJsZXM6dC5idWJibGVzLGNhbmNlbGFibGU6dC5jYW5jZWxhYmxlLGRldGFpbDp7ZHJvcFRhcmdldEl0ZW06dGhpcy5fZHJhZ092ZXJJdGVtLGRyb3BMb2NhdGlvbjp0aGlzLl9kcm9wTG9jYXRpb24sZHJhZ0RhdGE6ZX19KTtuLm9yaWdpbmFsRXZlbnQ9dCx0aGlzLmRpc3BhdGNoRXZlbnQobil9fV9fZm9ybWF0RGVmYXVsdFRyYW5zZmVyRGF0YSh0KXtyZXR1cm4gdC5tYXAoKHQ9PkFycmF5LmZyb20odC5jaGlsZHJlbikuZmlsdGVyKCh0PT4hdC5oaWRkZW4mJi0xPT09dC5nZXRBdHRyaWJ1dGUoInBhcnQiKS5pbmRleE9mKCJkZXRhaWxzLWNlbGwiKSkpLnNvcnQoKCh0LGUpPT50Ll9jb2x1bW4uX29yZGVyPmUuX2NvbHVtbi5fb3JkZXI/MTotMSkpLm1hcCgodD0+dC5fY29udGVudC50ZXh0Q29udGVudC50cmltKCkpKS5maWx0ZXIoKHQ9PnQpKS5qb2luKCJcdCIpKSkuam9pbigiXG4iKX1fZHJhZ0Ryb3BBY2Nlc3NDaGFuZ2VkKHQsZSxuLGkpe3RoaXMuZmlsdGVyRHJhZ0FuZERyb3AoKX1maWx0ZXJEcmFnQW5kRHJvcCgpe0FycmF5LmZyb20odGhpcy4kLml0ZW1zLmNoaWxkcmVuKS5maWx0ZXIoKHQ9PiF0LmhpZGRlbikpLmZvckVhY2goKHQ9Pnt0aGlzLl9maWx0ZXJEcmFnQW5kRHJvcCh0LHRoaXMuX19nZXRSb3dNb2RlbCh0KSl9KSl9X2ZpbHRlckRyYWdBbmREcm9wKHQsZSl7Y29uc3Qgbj0hdGhpcy5yb3dzRHJhZ2dhYmxlfHx0aGlzLmRyYWdGaWx0ZXImJiF0aGlzLmRyYWdGaWx0ZXIoZSksaT0hdGhpcy5kcm9wTW9kZXx8dGhpcy5kcm9wRmlsdGVyJiYhdGhpcy5kcm9wRmlsdGVyKGUpOyh3aW5kb3cuU2hhZHlET00/W3RdOkFycmF5LmZyb20odC5jaGlsZHJlbikubWFwKCh0PT50Ll9jb250ZW50KSkpLmZvckVhY2goKHQ9PntuP3QucmVtb3ZlQXR0cmlidXRlKCJkcmFnZ2FibGUiKTp0LnNldEF0dHJpYnV0ZSgiZHJhZ2dhYmxlIiwhMCl9KSksdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJkcmFnLWRpc2FibGVkIixuLHQpLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgiZHJvcC1kaXNhYmxlZCIsaSx0KX19Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBWYWFkaW4gTHRkLgogICAgVGhpcyBwcm9ncmFtIGlzIGF2YWlsYWJsZSB1bmRlciBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCwgYXZhaWxhYmxlIGF0IGh0dHBzOi8vdmFhZGluLmNvbS9saWNlbnNlLwogICAgKi8sVk50PXQ9PmNsYXNzIGV4dGVuZHMgdHtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57X2hlYWRlckZvY3VzYWJsZTp7dHlwZTpPYmplY3Qsb2JzZXJ2ZXI6Il9mb2N1c2FibGVDaGFuZ2VkIn0sX2l0ZW1zRm9jdXNhYmxlOnt0eXBlOk9iamVjdCxvYnNlcnZlcjoiX2ZvY3VzYWJsZUNoYW5nZWQifSxfZm9vdGVyRm9jdXNhYmxlOnt0eXBlOk9iamVjdCxvYnNlcnZlcjoiX2ZvY3VzYWJsZUNoYW5nZWQifSxfbmF2aWdhdGluZ0lzSGlkZGVuOkJvb2xlYW4sX2ZvY3VzZWRJdGVtSW5kZXg6e3R5cGU6TnVtYmVyLHZhbHVlOjB9LF9mb2N1c2VkQ29sdW1uT3JkZXI6TnVtYmVyfX1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5faW9zfHx0aGlzLl9hbmRyb2lkfHwodGhpcy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLl9vbktleURvd24pLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLHRoaXMuX29uS2V5VXApLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNpbiIsdGhpcy5fb25Gb2N1c0luKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImZvY3Vzb3V0Iix0aGlzLl9vbkZvY3VzT3V0KSx0aGlzLiQudGFibGUuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNpbiIsdGhpcy5fb25DZWxsRm9jdXNJbi5iaW5kKHRoaXMpKSx0aGlzLiQudGFibGUuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNvdXQiLHRoaXMuX29uQ2VsbEZvY3VzT3V0LmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwoKCk9Pnt0aGlzLl90b2dnbGVBdHRyaWJ1dGUoIm5hdmlnYXRpbmciLCExLHRoaXMpLHRoaXMuX2lzTW91c2Vkb3duPSEwfSkpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsKCgpPT50aGlzLl9pc01vdXNlZG93bj0hMSkpKX1fZm9jdXNhYmxlQ2hhbmdlZCh0LGUpe2UmJmUuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIi0xIiksdCYmdC5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiMCIpfV9vbktleURvd24odCl7bGV0IGUsbj10LmtleTtzd2l0Y2goIlVwIiE9PW4mJiJEb3duIiE9PW4mJiJMZWZ0IiE9PW4mJiJSaWdodCIhPT1ufHwobj0iQXJyb3ciK24pLCJFc2MiPT09biYmKG49IkVzY2FwZSIpLCJTcGFjZWJhciI9PT1uJiYobj0iICIpLG4pe2Nhc2UiQXJyb3dVcCI6Y2FzZSJBcnJvd0Rvd24iOmNhc2UiQXJyb3dMZWZ0IjpjYXNlIkFycm93UmlnaHQiOmNhc2UiUGFnZVVwIjpjYXNlIlBhZ2VEb3duIjpjYXNlIkhvbWUiOmNhc2UiRW5kIjplPSJOYXZpZ2F0aW9uIjticmVhaztjYXNlIkVudGVyIjpjYXNlIkVzY2FwZSI6Y2FzZSJGMiI6ZT0iSW50ZXJhY3Rpb24iO2JyZWFrO2Nhc2UiVGFiIjplPSJUYWIiO2JyZWFrO2Nhc2UiICI6ZT0iU3BhY2UifXRoaXMuX2RldGVjdEludGVyYWN0aW5nKHQpLHRoaXMuaGFzQXR0cmlidXRlKCJpbnRlcmFjdGluZyIpJiYiSW50ZXJhY3Rpb24iIT09ZSYmKGU9dm9pZCAwKSxlJiZ0aGlzW2Bfb24ke2V9S2V5RG93bmBdKHQsbil9X2Vuc3VyZVNjcm9sbGVkVG9JbmRleCh0KXtBcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZmlsdGVyKChlPT5lLmluZGV4PT09dCkpWzBdfHx0aGlzLl9zY3JvbGxUb0luZGV4KHQpfV9vbk5hdmlnYXRpb25LZXlEb3duKHQsZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbCh0LnBhcmVudE5vZGUuY2hpbGRyZW4sdCl9dGhpcy5fc2Nyb2xsSGFuZGxlcigpLHQucHJldmVudERlZmF1bHQoKTtjb25zdCBpPXRoaXMuX2xhc3RWaXNpYmxlSW5kZXgtdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXgtMTtsZXQgcj0wLG89MDtzd2l0Y2goZSl7Y2FzZSJBcnJvd1JpZ2h0IjpyPXRoaXMuX19pc1JUTD8tMToxO2JyZWFrO2Nhc2UiQXJyb3dMZWZ0IjpyPXRoaXMuX19pc1JUTD8xOi0xO2JyZWFrO2Nhc2UiSG9tZSI6cj0tMS8wLHQuY3RybEtleSYmKG89LTEvMCk7YnJlYWs7Y2FzZSJFbmQiOnI9MS8wLHQuY3RybEtleSYmKG89MS8wKTticmVhaztjYXNlIkFycm93RG93biI6bz0xO2JyZWFrO2Nhc2UiQXJyb3dVcCI6bz0tMTticmVhaztjYXNlIlBhZ2VEb3duIjpvPWk7YnJlYWs7Y2FzZSJQYWdlVXAiOm89LWl9Y29uc3QgYT10LmNvbXBvc2VkUGF0aCgpWzBdLHM9bihhKSxsPXRoaXMuX2VsZW1lbnRNYXRjaGVzKGEsJ1twYXJ0fj0iZGV0YWlscy1jZWxsIl0nKSxjPWEucGFyZW50Tm9kZSx1PWMucGFyZW50Tm9kZSxoPSh1PT09dGhpcy4kLml0ZW1zP3RoaXMuX2VmZmVjdGl2ZVNpemU6dS5jaGlsZHJlbi5sZW5ndGgpLTEsZD11PT09dGhpcy4kLml0ZW1zP3ZvaWQgMCE9PXRoaXMuX2ZvY3VzZWRJdGVtSW5kZXg/dGhpcy5fZm9jdXNlZEl0ZW1JbmRleDpjLmluZGV4Om4oYyk7bGV0IHA9TWF0aC5tYXgoMCxNYXRoLm1pbihkK28saCkpLGY9ITE7aWYodT09PXRoaXMuJC5pdGVtcyl7Y29uc3QgdD1jLl9pdGVtLGU9dGhpcy5fY2FjaGUuZ2V0SXRlbUZvckluZGV4KHApO2Y9bD8wPT09bzoxPT09byYmdGhpcy5faXNEZXRhaWxzT3BlbmVkKHQpfHwtMT09PW8mJnAhPT1kJiZ0aGlzLl9pc0RldGFpbHNPcGVuZWQoZSksZiE9PWwmJigxPT09byYmZnx8LTE9PT1vJiYhZikmJihwPWQpfWlmKHUhPT10aGlzLiQuaXRlbXMpaWYocD5kKWZvcig7cDxoJiZ1LmNoaWxkcmVuW3BdLmhpZGRlbjspcCsrO2Vsc2UgaWYocDxkKWZvcig7cD4wJiZ1LmNoaWxkcmVuW3BdLmhpZGRlbjspcC0tO3ZvaWQgMD09PXRoaXMuX2ZvY3VzZWRDb2x1bW5PcmRlciYmKHRoaXMuX2ZvY3VzZWRDb2x1bW5PcmRlcj1sPzA6dGhpcy5fZ2V0Q29sdW1ucyh1LGQpLmZpbHRlcigodD0+IXQuaGlkZGVuKSlbc10uX29yZGVyKTtjb25zdCBtPXRoaXMuX2dldENvbHVtbnModSxwKS5maWx0ZXIoKHQ9PiF0LmhpZGRlbikpLGc9bS5tYXAoKHQ9PnQuX29yZGVyKSkuc29ydCgoKHQsZSk9PnQtZSkpLF89Zy5sZW5ndGgtMSx5PWcuaW5kZXhPZihnLnNsaWNlKDApLnNvcnQoKCh0LGUpPT5NYXRoLmFicyh0LXRoaXMuX2ZvY3VzZWRDb2x1bW5PcmRlciktTWF0aC5hYnMoZS10aGlzLl9mb2N1c2VkQ29sdW1uT3JkZXIpKSlbMF0pLHY9MD09PW8mJmw/eTpNYXRoLm1heCgwLE1hdGgubWluKHkrcixfKSk7diE9PXkmJih0aGlzLl9mb2N1c2VkQ29sdW1uT3JkZXI9dm9pZCAwKSx1PT09dGhpcy4kLml0ZW1zJiZ0aGlzLl9lbnN1cmVTY3JvbGxlZFRvSW5kZXgocCksdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJuYXZpZ2F0aW5nIiwhMCx0aGlzKTtjb25zdCBiPW0ucmVkdWNlKCgodCxlLG4pPT4odFtlLl9vcmRlcl09bix0KSkse30pW2dbdl1dLHg9dT09PXRoaXMuJC5pdGVtcz9BcnJheS5mcm9tKHUuY2hpbGRyZW4pLmZpbHRlcigodD0+dC5pbmRleD09PXApKVswXTp1LmNoaWxkcmVuW3BdO2lmKCF4KXJldHVybjtjb25zdCB3PWY/QXJyYXkuZnJvbSh4LmNoaWxkcmVuKS5maWx0ZXIoKHQ9PnRoaXMuX2VsZW1lbnRNYXRjaGVzKHQsJ1twYXJ0fj0iZGV0YWlscy1jZWxsIl0nKSkpWzBdOnguY2hpbGRyZW5bYl07aWYodGhpcy5fc2Nyb2xsSG9yaXpvbnRhbGx5VG9DZWxsKHcpLHU9PT10aGlzLiQuaXRlbXMmJih0aGlzLl9mb2N1c2VkSXRlbUluZGV4PXApLHU9PT10aGlzLiQuaXRlbXMpe2NvbnN0IHQ9dy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxlPXRoaXMuJC5mb290ZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wLG49dGhpcy4kLmhlYWRlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5ib3R0b207dC5ib3R0b20+ZT8odGhpcy4kLnRhYmxlLnNjcm9sbFRvcCs9dC5ib3R0b20tZSx0aGlzLl9zY3JvbGxIYW5kbGVyKCkpOnQudG9wPG4mJih0aGlzLiQudGFibGUuc2Nyb2xsVG9wLT1uLXQudG9wLHRoaXMuX3Njcm9sbEhhbmRsZXIoKSl9dy5mb2N1cygpfV9wYXJzZUV2ZW50UGF0aCh0KXtjb25zdCBlPXQuaW5kZXhPZih0aGlzLiQudGFibGUpO3JldHVybntyb3dHcm91cDp0W2UtMV0scm93OnRbZS0yXSxjZWxsOnRbZS0zXX19X29uSW50ZXJhY3Rpb25LZXlEb3duKHQsZSl7Y29uc3Qgbj10LmNvbXBvc2VkUGF0aCgpWzBdLGk9ImlucHV0Ij09PW4ubG9jYWxOYW1lJiYhL14oYnV0dG9ufGNoZWNrYm94fGNvbG9yfGZpbGV8aW1hZ2V8cmFkaW98cmFuZ2V8cmVzZXR8c3VibWl0KSQvaS50ZXN0KG4udHlwZSk7bGV0IHI7c3dpdGNoKGUpe2Nhc2UiRW50ZXIiOnI9IXRoaXMuaGFzQXR0cmlidXRlKCJpbnRlcmFjdGluZyIpfHwhaTticmVhaztjYXNlIkVzY2FwZSI6cj0hMTticmVhaztjYXNlIkYyIjpyPSF0aGlzLmhhc0F0dHJpYnV0ZSgiaW50ZXJhY3RpbmciKX1jb25zdHtjZWxsOm99PXRoaXMuX3BhcnNlRXZlbnRQYXRoKHQuY29tcG9zZWRQYXRoKCkpO2lmKHRoaXMuaGFzQXR0cmlidXRlKCJpbnRlcmFjdGluZyIpIT09cilpZihyKXtjb25zdCBlPW8uX2NvbnRlbnQucXVlcnlTZWxlY3RvcigiW2ZvY3VzLXRhcmdldF0iKXx8by5fY29udGVudC5maXJzdEVsZW1lbnRDaGlsZDtlJiYodC5wcmV2ZW50RGVmYXVsdCgpLGUuZm9jdXMoKSx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoImludGVyYWN0aW5nIiwhMCx0aGlzKSx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoIm5hdmlnYXRpbmciLCExLHRoaXMpKX1lbHNlIHQucHJldmVudERlZmF1bHQoKSx0aGlzLl9mb2N1c2VkQ29sdW1uT3JkZXI9dm9pZCAwLG8uZm9jdXMoKSx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoImludGVyYWN0aW5nIiwhMSx0aGlzKSx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoIm5hdmlnYXRpbmciLCEwLHRoaXMpfV9wcmVkaWN0Rm9jdXNTdGVwVGFyZ2V0KHQsZSl7Y29uc3Qgbj1bdGhpcy4kLnRhYmxlLHRoaXMuX2hlYWRlckZvY3VzYWJsZSx0aGlzLl9pdGVtc0ZvY3VzYWJsZSx0aGlzLl9mb290ZXJGb2N1c2FibGUsdGhpcy4kLmZvY3VzZXhpdF07bGV0IGk9bi5pbmRleE9mKHQpO2ZvcihpKz1lO2k+PTAmJmk8PW4ubGVuZ3RoLTEmJighbltpXXx8bltpXS5wYXJlbnROb2RlLmhpZGRlbik7KWkrPWU7cmV0dXJuIG5baV19X29uVGFiS2V5RG93bih0KXtjb25zdCBlPXRoaXMuX3ByZWRpY3RGb2N1c1N0ZXBUYXJnZXQodC5jb21wb3NlZFBhdGgoKVswXSx0LnNoaWZ0S2V5Py0xOjEpO2lmKGU9PT10aGlzLiQudGFibGUpdGhpcy4kLnRhYmxlLmZvY3VzKCk7ZWxzZSBpZihlPT09dGhpcy4kLmZvY3VzZXhpdCl0aGlzLiQuZm9jdXNleGl0LmZvY3VzKCk7ZWxzZSBpZihlPT09dGhpcy5faXRlbXNGb2N1c2FibGUpe2xldCBuPWU7Y29uc3QgaT10aGlzLl9pdGVtc0ZvY3VzYWJsZS5wYXJlbnROb2RlO2lmKHRoaXMuX2Vuc3VyZVNjcm9sbGVkVG9JbmRleCh0aGlzLl9mb2N1c2VkSXRlbUluZGV4KSxpLmluZGV4IT09dGhpcy5fZm9jdXNlZEl0ZW1JbmRleCl7Y29uc3QgdD1BcnJheS5mcm9tKGkuY2hpbGRyZW4pLmluZGV4T2YodGhpcy5faXRlbXNGb2N1c2FibGUpLGU9QXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZpbHRlcigodD0+dC5pbmRleD09PXRoaXMuX2ZvY3VzZWRJdGVtSW5kZXgpKVswXTtlJiYobj1lLmNoaWxkcmVuW3RdKX10LnByZXZlbnREZWZhdWx0KCksbi5mb2N1cygpfWVsc2UgdC5wcmV2ZW50RGVmYXVsdCgpLGUuZm9jdXMoKTt0aGlzLl90b2dnbGVBdHRyaWJ1dGUoIm5hdmlnYXRpbmciLCEwLHRoaXMpfV9vblNwYWNlS2V5RG93bih0KXt0LnByZXZlbnREZWZhdWx0KCk7Y29uc3QgZT10LmNvbXBvc2VkUGF0aCgpWzBdO2UuX2NvbnRlbnQmJmUuX2NvbnRlbnQuZmlyc3RFbGVtZW50Q2hpbGR8fHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNlbGwtYWN0aXZhdGUiLHtkZXRhaWw6e21vZGVsOnRoaXMuX19nZXRSb3dNb2RlbChlLnBhcmVudEVsZW1lbnQpfX0pKX1fb25LZXlVcCh0KXtpZighL14oIHxTcGFjZUJhcikkLy50ZXN0KHQua2V5KSlyZXR1cm47dC5wcmV2ZW50RGVmYXVsdCgpO2NvbnN0IGU9dC5jb21wb3NlZFBhdGgoKVswXTtpZihlLl9jb250ZW50JiZlLl9jb250ZW50LmZpcnN0RWxlbWVudENoaWxkKXtjb25zdCB0PXRoaXMuaGFzQXR0cmlidXRlKCJuYXZpZ2F0aW5nIik7ZS5fY29udGVudC5maXJzdEVsZW1lbnRDaGlsZC5jbGljaygpLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibmF2aWdhdGluZyIsdCx0aGlzKX19X29uRm9jdXNJbih0KXt0aGlzLl9pc01vdXNlZG93bnx8dGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJuYXZpZ2F0aW5nIiwhMCx0aGlzKTtjb25zdCBlPXQuY29tcG9zZWRQYXRoKClbMF07ZT09PXRoaXMuJC50YWJsZXx8ZT09PXRoaXMuJC5mb2N1c2V4aXQ/KHRoaXMuX3ByZWRpY3RGb2N1c1N0ZXBUYXJnZXQoZSxlPT09dGhpcy4kLnRhYmxlPzE6LTEpLmZvY3VzKCksdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJpbnRlcmFjdGluZyIsITEsdGhpcykpOnRoaXMuX2RldGVjdEludGVyYWN0aW5nKHQpfV9vbkZvY3VzT3V0KHQpe3RoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibmF2aWdhdGluZyIsITEsdGhpcyksdGhpcy5fZGV0ZWN0SW50ZXJhY3RpbmcodCl9X29uQ2VsbEZvY3VzSW4odCl7aWYodGhpcy5fZGV0ZWN0SW50ZXJhY3RpbmcodCksMz09PXQuY29tcG9zZWRQYXRoKCkuaW5kZXhPZih0aGlzLiQudGFibGUpKXtjb25zdCBlPXQuY29tcG9zZWRQYXRoKClbMF07dGhpcy5fYWN0aXZlUm93R3JvdXA9ZS5wYXJlbnROb2RlLnBhcmVudE5vZGUsdGhpcy5fYWN0aXZlUm93R3JvdXA9PT10aGlzLiQuaGVhZGVyP3RoaXMuX2hlYWRlckZvY3VzYWJsZT1lOnRoaXMuX2FjdGl2ZVJvd0dyb3VwPT09dGhpcy4kLml0ZW1zP3RoaXMuX2l0ZW1zRm9jdXNhYmxlPWU6dGhpcy5fYWN0aXZlUm93R3JvdXA9PT10aGlzLiQuZm9vdGVyJiYodGhpcy5fZm9vdGVyRm9jdXNhYmxlPWUpLGUuX2NvbnRlbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNlbGwtZm9jdXNpbiIse2J1YmJsZXM6ITF9KSl9dGhpcy5fZGV0ZWN0Rm9jdXNlZEl0ZW1JbmRleCh0KX1fb25DZWxsRm9jdXNPdXQodCl7Mz09PXQuY29tcG9zZWRQYXRoKCkuaW5kZXhPZih0aGlzLiQudGFibGUpJiZ0LmNvbXBvc2VkUGF0aCgpWzBdLl9jb250ZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJjZWxsLWZvY3Vzb3V0Iix7YnViYmxlczohMX0pKX1fZGV0ZWN0SW50ZXJhY3RpbmcodCl7dGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJpbnRlcmFjdGluZyIsdC5jb21wb3NlZFBhdGgoKS5zb21lKCh0PT4idmFhZGluLWdyaWQtY2VsbC1jb250ZW50Ij09PXQubG9jYWxOYW1lKSksdGhpcyl9X2RldGVjdEZvY3VzZWRJdGVtSW5kZXgodCl7Y29uc3R7cm93R3JvdXA6ZSxyb3c6bn09dGhpcy5fcGFyc2VFdmVudFBhdGgodC5jb21wb3NlZFBhdGgoKSk7ZT09PXRoaXMuJC5pdGVtcyYmKHRoaXMuX2ZvY3VzZWRJdGVtSW5kZXg9bi5pbmRleCl9X3ByZXZlbnRTY3JvbGxlclJvdGF0aW5nQ2VsbEZvY3VzKHQsZSl7dC5pbmRleD09PXRoaXMuX2ZvY3VzZWRJdGVtSW5kZXgmJnRoaXMuaGFzQXR0cmlidXRlKCJuYXZpZ2F0aW5nIikmJnRoaXMuX2FjdGl2ZVJvd0dyb3VwPT09dGhpcy4kLml0ZW1zJiYodGhpcy5fbmF2aWdhdGluZ0lzSGlkZGVuPSEwLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibmF2aWdhdGluZyIsITEsdGhpcykpLGU9PT10aGlzLl9mb2N1c2VkSXRlbUluZGV4JiZ0aGlzLl9uYXZpZ2F0aW5nSXNIaWRkZW4mJih0aGlzLl9uYXZpZ2F0aW5nSXNIaWRkZW49ITEsdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJuYXZpZ2F0aW5nIiwhMCx0aGlzKSl9X2dldENvbHVtbnModCxlKXtsZXQgbj10aGlzLl9jb2x1bW5UcmVlLmxlbmd0aC0xO3JldHVybiB0PT09dGhpcy4kLmhlYWRlcj9uPWU6dD09PXRoaXMuJC5mb290ZXImJihuPXRoaXMuX2NvbHVtblRyZWUubGVuZ3RoLTEtZSksdGhpcy5fY29sdW1uVHJlZVtuXX1fcmVzZXRLZXlib2FyZE5hdmlnYXRpb24oKXtpZih0aGlzLiQuaGVhZGVyLmZpcnN0RWxlbWVudENoaWxkJiYodGhpcy5faGVhZGVyRm9jdXNhYmxlPUFycmF5LmZyb20odGhpcy4kLmhlYWRlci5maXJzdEVsZW1lbnRDaGlsZC5jaGlsZHJlbikuZmlsdGVyKCh0PT4hdC5oaWRkZW4pKVswXSksdGhpcy4kLml0ZW1zLmZpcnN0RWxlbWVudENoaWxkKXtjb25zdCB0PXRoaXMuX2l0ZXJhdGVJdGVtcygoKHQsZSk9PntpZih0aGlzLl9maXJzdFZpc2libGVJbmRleD09PWUpcmV0dXJuIHRoaXMuJC5pdGVtcy5jaGlsZHJlblt0XX0pKTt0JiYodGhpcy5faXRlbXNGb2N1c2FibGU9QXJyYXkuZnJvbSh0LmNoaWxkcmVuKS5maWx0ZXIoKHQ9PiF0LmhpZGRlbikpWzBdKX10aGlzLiQuZm9vdGVyLmZpcnN0RWxlbWVudENoaWxkJiYodGhpcy5fZm9vdGVyRm9jdXNhYmxlPUFycmF5LmZyb20odGhpcy4kLmZvb3Rlci5maXJzdEVsZW1lbnRDaGlsZC5jaGlsZHJlbikuZmlsdGVyKCh0PT4hdC5oaWRkZW4pKVswXSl9X3Njcm9sbEhvcml6b250YWxseVRvQ2VsbCh0KXtpZih0Lmhhc0F0dHJpYnV0ZSgiZnJvemVuIil8fHRoaXMuX2VsZW1lbnRNYXRjaGVzKHQsJ1twYXJ0fj0iZGV0YWlscy1jZWxsIl0nKSlyZXR1cm47Y29uc3QgZT10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49dC5wYXJlbnROb2RlLGk9QXJyYXkuZnJvbShuLmNoaWxkcmVuKS5pbmRleE9mKHQpLHI9dGhpcy4kLnRhYmxlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2xldCBvPXIubGVmdCxhPXIucmlnaHQ7Zm9yKGxldCB0PWktMTt0Pj0wO3QtLSl7Y29uc3QgZT1uLmNoaWxkcmVuW3RdO2lmKCFlLmhhc0F0dHJpYnV0ZSgiaGlkZGVuIikmJiF0aGlzLl9lbGVtZW50TWF0Y2hlcyhlLCdbcGFydH49ImRldGFpbHMtY2VsbCJdJykmJmUuaGFzQXR0cmlidXRlKCJmcm96ZW4iKSl7bz1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnJpZ2h0O2JyZWFrfX1mb3IobGV0IHQ9aSsxO3Q8bi5jaGlsZHJlbi5sZW5ndGg7dCsrKXtjb25zdCBlPW4uY2hpbGRyZW5bdF07aWYoIWUuaGFzQXR0cmlidXRlKCJoaWRkZW4iKSYmIXRoaXMuX2VsZW1lbnRNYXRjaGVzKGUsJ1twYXJ0fj0iZGV0YWlscy1jZWxsIl0nKSYmZS5oYXNBdHRyaWJ1dGUoImZyb3plbiIpKXthPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDticmVha319ZS5sZWZ0PG8mJih0aGlzLiQudGFibGUuc2Nyb2xsTGVmdCs9TWF0aC5yb3VuZChlLmxlZnQtbykpLGUucmlnaHQ+YSYmKHRoaXMuJC50YWJsZS5zY3JvbGxMZWZ0Kz1NYXRoLnJvdW5kKGUucmlnaHQtYSkpfV9lbGVtZW50TWF0Y2hlcyh0LGUpe3JldHVybiB0Lm1hdGNoZXM/dC5tYXRjaGVzKGUpOi0xIT09QXJyYXkuZnJvbSh0LnBhcmVudE5vZGUucXVlcnlTZWxlY3RvckFsbChlKSkuaW5kZXhPZih0KX19Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBWYWFkaW4gTHRkLgogICAgVGhpcyBwcm9ncmFtIGlzIGF2YWlsYWJsZSB1bmRlciBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCwgYXZhaWxhYmxlIGF0IGh0dHBzOi8vdmFhZGluLmNvbS9saWNlbnNlLwogICAgKi8sVU50PXQ9PmNsYXNzIGV4dGVuZHMoZGkodCkpe3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntjb2x1bW5SZW9yZGVyaW5nQWxsb3dlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfb3JkZXJCYXNlU2NvcGU6e3R5cGU6TnVtYmVyLHZhbHVlOjFlN319fXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfdXBkYXRlT3JkZXJzKF9jb2x1bW5UcmVlLCBfY29sdW1uVHJlZS4qKSJdfXJlYWR5KCl7c3VwZXIucmVhZHkoKSxuaSh0aGlzLCJ0cmFjayIsdGhpcy5fb25UcmFja0V2ZW50KSx0aGlzLl9yZW9yZGVyR2hvc3Q9dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJ1twYXJ0PSJyZW9yZGVyLWdob3N0Il0nKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMuX29uVG91Y2hTdGFydC5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsdGhpcy5fb25Ub3VjaE1vdmUuYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsdGhpcy5fb25Ub3VjaEVuZC5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51Iix0aGlzLl9vbkNvbnRleHRNZW51LmJpbmQodGhpcykpfV9vbkNvbnRleHRNZW51KHQpe3RoaXMuaGFzQXR0cmlidXRlKCJyZW9yZGVyaW5nIikmJnQucHJldmVudERlZmF1bHQoKX1fb25Ub3VjaFN0YXJ0KHQpe3RoaXMuX3N0YXJ0VG91Y2hSZW9yZGVyVGltZW91dD1zZXRUaW1lb3V0KCgoKT0+e3RoaXMuX29uVHJhY2tTdGFydCh7ZGV0YWlsOnt4OnQudG91Y2hlc1swXS5jbGllbnRYLHk6dC50b3VjaGVzWzBdLmNsaWVudFl9fSl9KSwxMDApfV9vblRvdWNoTW92ZSh0KXt0aGlzLl9kcmFnZ2VkQ29sdW1uJiZ0LnByZXZlbnREZWZhdWx0KCksY2xlYXJUaW1lb3V0KHRoaXMuX3N0YXJ0VG91Y2hSZW9yZGVyVGltZW91dCl9X29uVG91Y2hFbmQoKXtjbGVhclRpbWVvdXQodGhpcy5fc3RhcnRUb3VjaFJlb3JkZXJUaW1lb3V0KSx0aGlzLl9vblRyYWNrRW5kKCl9X29uVHJhY2tFdmVudCh0KXtpZigic3RhcnQiPT09dC5kZXRhaWwuc3RhdGUpe2NvbnN0IGU9dC5jb21wb3NlZFBhdGgoKSxuPWVbZS5pbmRleE9mKHRoaXMuJC5oZWFkZXIpLTJdO2lmKCFufHwhbi5fY29udGVudClyZXR1cm47Y29uc3QgaT10aGlzLmdldFJvb3ROb2RlKCkuYWN0aXZlRWxlbWVudDtpZihuLl9jb250ZW50LmNvbnRhaW5zKHRoaXMuZ2V0Um9vdE5vZGUoKS5hY3RpdmVFbGVtZW50KSYmKCF0aGlzLl9pZXx8IXRoaXMuX2lzRm9jdXNhYmxlKGkpKSlyZXR1cm47aWYodGhpcy4kLnNjcm9sbGVyLmhhc0F0dHJpYnV0ZSgiY29sdW1uLXJlc2l6aW5nIikpcmV0dXJuO3RoaXMuX3RvdWNoRGV2aWNlfHx0aGlzLl9vblRyYWNrU3RhcnQodCl9ZWxzZSJ0cmFjayI9PT10LmRldGFpbC5zdGF0ZT90aGlzLl9vblRyYWNrKHQpOiJlbmQiPT09dC5kZXRhaWwuc3RhdGUmJnRoaXMuX29uVHJhY2tFbmQodCl9X29uVHJhY2tTdGFydCh0KXtpZighdGhpcy5jb2x1bW5SZW9yZGVyaW5nQWxsb3dlZClyZXR1cm47Y29uc3QgZT10LnBhdGh8fHFpKHQpLnBhdGg7aWYoZSYmZS5maWx0ZXIoKHQ9PnQuaGFzQXR0cmlidXRlJiZ0Lmhhc0F0dHJpYnV0ZSgiZHJhZ2dhYmxlIikpKVswXSlyZXR1cm47Y29uc3Qgbj10aGlzLl9jZWxsRnJvbVBvaW50KHQuZGV0YWlsLngsdC5kZXRhaWwueSk7aWYobiYmLTEhPT1uLmdldEF0dHJpYnV0ZSgicGFydCIpLmluZGV4T2YoImhlYWRlci1jZWxsIikpe2Zvcih0aGlzLl90b2dnbGVBdHRyaWJ1dGUoInJlb3JkZXJpbmciLCEwLHRoaXMpLHRoaXMuX2RyYWdnZWRDb2x1bW49bi5fY29sdW1uOzE9PT10aGlzLl9kcmFnZ2VkQ29sdW1uLnBhcmVudEVsZW1lbnQuY2hpbGRFbGVtZW50Q291bnQ7KXRoaXMuX2RyYWdnZWRDb2x1bW49dGhpcy5fZHJhZ2dlZENvbHVtbi5wYXJlbnRFbGVtZW50O3RoaXMuX3NldFNpYmxpbmdzUmVvcmRlclN0YXR1cyh0aGlzLl9kcmFnZ2VkQ29sdW1uLCJhbGxvd2VkIiksdGhpcy5fZHJhZ2dlZENvbHVtbi5fcmVvcmRlclN0YXR1cz0iZHJhZ2dpbmciLHRoaXMuX3VwZGF0ZUdob3N0KG4pLHRoaXMuX3Jlb3JkZXJHaG9zdC5zdHlsZS52aXNpYmlsaXR5PSJ2aXNpYmxlIix0aGlzLl91cGRhdGVHaG9zdFBvc2l0aW9uKHQuZGV0YWlsLngsdGhpcy5fdG91Y2hEZXZpY2U/dC5kZXRhaWwueS01MDp0LmRldGFpbC55KSx0aGlzLl9hdXRvU2Nyb2xsZXIoKX19X29uVHJhY2sodCl7aWYoIXRoaXMuX2RyYWdnZWRDb2x1bW4pcmV0dXJuO2NvbnN0IGU9dGhpcy5fY2VsbEZyb21Qb2ludCh0LmRldGFpbC54LHQuZGV0YWlsLnkpO2lmKCFlKXJldHVybjtjb25zdCBuPXRoaXMuX2dldFRhcmdldENvbHVtbihlLHRoaXMuX2RyYWdnZWRDb2x1bW4pO3RoaXMuX2lzU3dhcEFsbG93ZWQodGhpcy5fZHJhZ2dlZENvbHVtbixuKSYmdGhpcy5faXNTd2FwcGFibGVCeVBvc2l0aW9uKG4sdC5kZXRhaWwueCkmJnRoaXMuX3N3YXBDb2x1bW5PcmRlcnModGhpcy5fZHJhZ2dlZENvbHVtbixuKSx0aGlzLl91cGRhdGVHaG9zdFBvc2l0aW9uKHQuZGV0YWlsLngsdGhpcy5fdG91Y2hEZXZpY2U/dC5kZXRhaWwueS01MDp0LmRldGFpbC55KSx0aGlzLl9sYXN0RHJhZ0NsaWVudFg9dC5kZXRhaWwueH1fb25UcmFja0VuZCgpe3RoaXMuX2RyYWdnZWRDb2x1bW4mJih0aGlzLl90b2dnbGVBdHRyaWJ1dGUoInJlb3JkZXJpbmciLCExLHRoaXMpLHRoaXMuX2RyYWdnZWRDb2x1bW4uX3Jlb3JkZXJTdGF0dXM9IiIsdGhpcy5fc2V0U2libGluZ3NSZW9yZGVyU3RhdHVzKHRoaXMuX2RyYWdnZWRDb2x1bW4sIiIpLHRoaXMuX2RyYWdnZWRDb2x1bW49bnVsbCx0aGlzLl9sYXN0RHJhZ0NsaWVudFg9bnVsbCx0aGlzLl9yZW9yZGVyR2hvc3Quc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIix0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJjb2x1bW4tcmVvcmRlciIse2RldGFpbDp7Y29sdW1uczp0aGlzLl9nZXRDb2x1bW5zSW5PcmRlcigpfX0pKSl9X2dldENvbHVtbnNJbk9yZGVyKCl7cmV0dXJuIHRoaXMuX2NvbHVtblRyZWUuc2xpY2UoMCkucG9wKCkuZmlsdGVyKCh0PT4hdC5oaWRkZW4pKS5zb3J0KCgodCxlKT0+dC5fb3JkZXItZS5fb3JkZXIpKX1fY2VsbEZyb21Qb2ludCh0LGUpe2xldCBuO2lmKHQ9dHx8MCxlPWV8fDAsdGhpcy5fZHJhZ2dlZENvbHVtbnx8dGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJuby1jb250ZW50LXBvaW50ZXItZXZlbnRzIiwhMCx0aGlzLiQuc2Nyb2xsZXIpLG0/bj10aGlzLnNoYWRvd1Jvb3QuZWxlbWVudEZyb21Qb2ludCh0LGUpOihuPWRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQodCxlKSwidmFhZGluLWdyaWQtY2VsbC1jb250ZW50Ij09PW4ubG9jYWxOYW1lJiYobj1uLmFzc2lnbmVkU2xvdC5wYXJlbnROb2RlKSksdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJuby1jb250ZW50LXBvaW50ZXItZXZlbnRzIiwhMSx0aGlzLiQuc2Nyb2xsZXIpLG4mJm4uX2NvbHVtbilyZXR1cm4gbn1fdXBkYXRlR2hvc3RQb3NpdGlvbih0LGUpe2NvbnN0IG49dGhpcy5fcmVvcmRlckdob3N0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGk9dC1uLndpZHRoLzIscj1lLW4uaGVpZ2h0LzIsbz1wYXJzZUludCh0aGlzLl9yZW9yZGVyR2hvc3QuX2xlZnR8fDApLGE9cGFyc2VJbnQodGhpcy5fcmVvcmRlckdob3N0Ll90b3B8fDApO3RoaXMuX3Jlb3JkZXJHaG9zdC5fbGVmdD1vLShuLmxlZnQtaSksdGhpcy5fcmVvcmRlckdob3N0Ll90b3A9YS0obi50b3AtciksdGhpcy5fcmVvcmRlckdob3N0LnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlKCR7dGhpcy5fcmVvcmRlckdob3N0Ll9sZWZ0fXB4LCAke3RoaXMuX3Jlb3JkZXJHaG9zdC5fdG9wfXB4KWB9X2dldElubmVyVGV4dCh0KXtyZXR1cm4gdC5sb2NhbE5hbWU/Im5vbmUiPT09Z2V0Q29tcHV0ZWRTdHlsZSh0KS5kaXNwbGF5PyIiOkFycmF5LmZyb20odC5jaGlsZE5vZGVzKS5tYXAoKHQ9PnRoaXMuX2dldElubmVyVGV4dCh0KSkpLmpvaW4oIiIpOnQudGV4dENvbnRlbnR9X3VwZGF0ZUdob3N0KHQpe2NvbnN0IGU9dGhpcy5fcmVvcmRlckdob3N0O2UudGV4dENvbnRlbnQ9dGhpcy5fZ2V0SW5uZXJUZXh0KHQuX2NvbnRlbnQpO2NvbnN0IG49d2luZG93LmdldENvbXB1dGVkU3R5bGUodCk7cmV0dXJuWyJib3hTaXppbmciLCJkaXNwbGF5Iiwid2lkdGgiLCJoZWlnaHQiLCJiYWNrZ3JvdW5kIiwiYWxpZ25JdGVtcyIsInBhZGRpbmciLCJib3JkZXIiLCJmbGV4LWRpcmVjdGlvbiIsIm92ZXJmbG93Il0uZm9yRWFjaCgodD0+ZS5zdHlsZVt0XT1uW3RdKSksZX1fdXBkYXRlT3JkZXJzKHQsZSl7dm9pZCAwIT09dCYmdm9pZCAwIT09ZSYmKHRbMF0uZm9yRWFjaCgoKHQsZSk9PnQuX29yZGVyPTApKSx0WzBdLmZvckVhY2goKCh0LGUpPT50Ll9vcmRlcj0oZSsxKSp0aGlzLl9vcmRlckJhc2VTY29wZSkpKX1fc2V0U2libGluZ3NSZW9yZGVyU3RhdHVzKHQsZSl7QXJyYXkuZnJvbSh0LnBhcmVudE5vZGUuY2hpbGRyZW4pLmZpbHRlcigoZT0+L2NvbHVtbi8udGVzdChlLmxvY2FsTmFtZSkmJnRoaXMuX2lzU3dhcEFsbG93ZWQoZSx0KSkpLmZvckVhY2goKHQ9PnQuX3Jlb3JkZXJTdGF0dXM9ZSkpfV9hdXRvU2Nyb2xsZXIoKXtpZih0aGlzLl9sYXN0RHJhZ0NsaWVudFgpe2NvbnN0IHQ9dGhpcy5fbGFzdERyYWdDbGllbnRYLXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQrNTAsZT10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQtdGhpcy5fbGFzdERyYWdDbGllbnRYKzUwO3Q+MD90aGlzLiQudGFibGUuc2Nyb2xsTGVmdCs9dC8xMDplPjAmJih0aGlzLiQudGFibGUuc2Nyb2xsTGVmdC09ZS8xMCksdGhpcy5fc2Nyb2xsSGFuZGxlcigpfXRoaXMuX2RyYWdnZWRDb2x1bW4mJnRoaXMuYXN5bmModGhpcy5fYXV0b1Njcm9sbGVyLDEwKX1faXNTd2FwQWxsb3dlZCh0LGUpe2lmKHQmJmUpe2NvbnN0IG49dC5wYXJlbnRFbGVtZW50PT09ZS5wYXJlbnRFbGVtZW50LGk9dC5mcm96ZW49PT1lLmZyb3plbjtyZXR1cm4gdCE9PWUmJm4mJml9fV9pc1N3YXBwYWJsZUJ5UG9zaXRpb24odCxlKXtjb25zdCBuPUFycmF5LmZyb20odGhpcy4kLmhlYWRlci5xdWVyeVNlbGVjdG9yQWxsKCd0cjpub3QoW2hpZGRlbl0pIFtwYXJ0fj0iY2VsbCJdJykpLmZpbHRlcigoZT0+dC5jb250YWlucyhlLl9jb2x1bW4pKSlbMF0saT10aGlzLiQuaGVhZGVyLnF1ZXJ5U2VsZWN0b3IoInRyOm5vdChbaGlkZGVuXSkgW3Jlb3JkZXItc3RhdHVzPWRyYWdnaW5nXSIpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHI9bi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gci5sZWZ0PmkubGVmdD9lPnIucmlnaHQtaS53aWR0aDplPHIubGVmdCtpLndpZHRofV9zd2FwQ29sdW1uT3JkZXJzKHQsZSl7Y29uc3Qgbj10Ll9vcmRlcjt0Ll9vcmRlcj1lLl9vcmRlcixlLl9vcmRlcj1uLHRoaXMuX3VwZGF0ZUxhc3RGcm96ZW4oKSx0aGlzLl91cGRhdGVGaXJzdEFuZExhc3RDb2x1bW4oKX1fZ2V0VGFyZ2V0Q29sdW1uKHQsZSl7aWYodCYmZSl7bGV0IG49dC5fY29sdW1uO2Zvcig7bi5wYXJlbnRFbGVtZW50IT09ZS5wYXJlbnRFbGVtZW50JiZuIT09dGhpczspbj1uLnBhcmVudEVsZW1lbnQ7cmV0dXJuIG4ucGFyZW50RWxlbWVudD09PWUucGFyZW50RWxlbWVudD9uOnQuX2NvbHVtbn19fQovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTggVmFhZGluIEx0ZC4KICAgIFRoaXMgcHJvZ3JhbSBpcyBhdmFpbGFibGUgdW5kZXIgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAsIGF2YWlsYWJsZSBhdCBodHRwczovL3ZhYWRpbi5jb20vbGljZW5zZS8KICAgICovLGpOdD10PT5jbGFzcyBleHRlbmRzIHR7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue3Jlc2l6YWJsZTp7dHlwZTpCb29sZWFuLHZhbHVlOmZ1bmN0aW9uKCl7aWYoInZhYWRpbi1ncmlkLWNvbHVtbi1ncm91cCI9PT10aGlzLmxvY2FsTmFtZSlyZXR1cm47Y29uc3QgdD10aGlzLnBhcmVudE5vZGU7cmV0dXJuIHQmJiJ2YWFkaW4tZ3JpZC1jb2x1bW4tZ3JvdXAiPT09dC5sb2NhbE5hbWUmJnQucmVzaXphYmxlfHwhMX19LF9oZWFkZXJUZW1wbGF0ZTp7dHlwZTpPYmplY3R9LF9mb290ZXJUZW1wbGF0ZTp7dHlwZTpPYmplY3R9LGZyb3plbjp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxoaWRkZW46e3R5cGU6Qm9vbGVhbn0saGVhZGVyOnt0eXBlOlN0cmluZ30sdGV4dEFsaWduOnt0eXBlOlN0cmluZ30sX2xhc3RGcm96ZW46e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX29yZGVyOk51bWJlcixfcmVvcmRlclN0YXR1czpCb29sZWFuLF9lbXB0eUNlbGxzOkFycmF5LF9oZWFkZXJDZWxsOk9iamVjdCxfZm9vdGVyQ2VsbDpPYmplY3QsX2dyaWQ6T2JqZWN0LGhlYWRlclJlbmRlcmVyOkZ1bmN0aW9uLGZvb3RlclJlbmRlcmVyOkZ1bmN0aW9ufX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX3dpZHRoQ2hhbmdlZCh3aWR0aCwgX2hlYWRlckNlbGwsIF9mb290ZXJDZWxsLCBfY2VsbHMuKikiLCJfZnJvemVuQ2hhbmdlZChmcm96ZW4sIF9oZWFkZXJDZWxsLCBfZm9vdGVyQ2VsbCwgX2NlbGxzLiopIiwiX2ZsZXhHcm93Q2hhbmdlZChmbGV4R3JvdywgX2hlYWRlckNlbGwsIF9mb290ZXJDZWxsLCBfY2VsbHMuKikiLCJfcGF0aE9ySGVhZGVyQ2hhbmdlZChwYXRoLCBoZWFkZXIsIF9oZWFkZXJDZWxsLCBfZm9vdGVyQ2VsbCwgX2NlbGxzLiosIHJlbmRlcmVyLCBoZWFkZXJSZW5kZXJlciwgX2JvZHlUZW1wbGF0ZSwgX2hlYWRlclRlbXBsYXRlKSIsIl90ZXh0QWxpZ25DaGFuZ2VkKHRleHRBbGlnbiwgX2NlbGxzLiosIF9oZWFkZXJDZWxsLCBfZm9vdGVyQ2VsbCkiLCJfb3JkZXJDaGFuZ2VkKF9vcmRlciwgX2hlYWRlckNlbGwsIF9mb290ZXJDZWxsLCBfY2VsbHMuKikiLCJfbGFzdEZyb3plbkNoYW5nZWQoX2xhc3RGcm96ZW4pIiwiX3NldEJvZHlUZW1wbGF0ZU9yUmVuZGVyZXIoX2JvZHlUZW1wbGF0ZSwgcmVuZGVyZXIsIF9jZWxscywgX2NlbGxzLiopIiwiX3NldEhlYWRlclRlbXBsYXRlT3JSZW5kZXJlcihfaGVhZGVyVGVtcGxhdGUsIGhlYWRlclJlbmRlcmVyLCBfaGVhZGVyQ2VsbCkiLCJfc2V0Rm9vdGVyVGVtcGxhdGVPclJlbmRlcmVyKF9mb290ZXJUZW1wbGF0ZSwgZm9vdGVyUmVuZGVyZXIsIF9mb290ZXJDZWxsKSIsIl9yZXNpemFibGVDaGFuZ2VkKHJlc2l6YWJsZSwgX2hlYWRlckNlbGwpIiwiX3Jlb3JkZXJTdGF0dXNDaGFuZ2VkKF9yZW9yZGVyU3RhdHVzLCBfaGVhZGVyQ2VsbCwgX2Zvb3RlckNlbGwsIF9jZWxscy4qKSIsIl9oaWRkZW5DaGFuZ2VkKGhpZGRlbiwgX2hlYWRlckNlbGwsIF9mb290ZXJDZWxsLCBfY2VsbHMuKikiXX1jb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5fYm9keVRlbXBsYXRlJiYodGhpcy5fYm9keVRlbXBsYXRlLnRlbXBsYXRpemVyLl9ncmlkPXRoaXMuX2dyaWQpLHRoaXMuX2hlYWRlclRlbXBsYXRlJiYodGhpcy5faGVhZGVyVGVtcGxhdGUudGVtcGxhdGl6ZXIuX2dyaWQ9dGhpcy5fZ3JpZCksdGhpcy5fZm9vdGVyVGVtcGxhdGUmJih0aGlzLl9mb290ZXJUZW1wbGF0ZS50ZW1wbGF0aXplci5fZ3JpZD10aGlzLl9ncmlkKSx0aGlzLl90ZW1wbGF0ZU9ic2VydmVyLmZsdXNoKCksdGhpcy5fYm9keVRlbXBsYXRlfHx0aGlzLl90ZW1wbGF0ZU9ic2VydmVyLmNhbGxiYWNrKCkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgoKT0+e3RoaXMuX2FsbENlbGxzLmZvckVhY2goKHQ9Pnt0Ll9jb250ZW50LnBhcmVudE5vZGV8fHRoaXMuX2dyaWQmJnRoaXMuX2dyaWQuYXBwZW5kQ2hpbGQodC5fY29udGVudCl9KSl9KSl9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKCk9Pnt0aGlzLl9maW5kSG9zdEdyaWQoKXx8dGhpcy5fYWxsQ2VsbHMuZm9yRWFjaCgodD0+e3QuX2NvbnRlbnQucGFyZW50Tm9kZSYmdC5fY29udGVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQuX2NvbnRlbnQpfSkpfSkpLHRoaXMuX2dyaWRWYWx1ZT12b2lkIDB9X2ZpbmRIb3N0R3JpZCgpe2xldCB0PXRoaXM7Zm9yKDt0JiYhL152YWFkaW4uKmdyaWQoLXBybyk/JC8udGVzdCh0LmxvY2FsTmFtZSk7KXQ9dC5hc3NpZ25lZFNsb3Q/dC5hc3NpZ25lZFNsb3QucGFyZW50Tm9kZTp0LnBhcmVudE5vZGU7cmV0dXJuIHR8fHZvaWQgMH1nZXQgX2dyaWQoKXtyZXR1cm4gdGhpcy5fZ3JpZFZhbHVlfHwodGhpcy5fZ3JpZFZhbHVlPXRoaXMuX2ZpbmRIb3N0R3JpZCgpKSx0aGlzLl9ncmlkVmFsdWV9Z2V0IF9hbGxDZWxscygpe3JldHVybltdLmNvbmNhdCh0aGlzLl9jZWxsc3x8W10pLmNvbmNhdCh0aGlzLl9lbXB0eUNlbGxzfHxbXSkuY29uY2F0KHRoaXMuX2hlYWRlckNlbGwpLmNvbmNhdCh0aGlzLl9mb290ZXJDZWxsKS5maWx0ZXIoKHQ9PnQpKX1jb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fdGVtcGxhdGVPYnNlcnZlcj1uZXcgUmkodGhpcywodD0+e3RoaXMuX2hlYWRlclRlbXBsYXRlPXRoaXMuX3ByZXBhcmVIZWFkZXJUZW1wbGF0ZSgpLHRoaXMuX2Zvb3RlclRlbXBsYXRlPXRoaXMuX3ByZXBhcmVGb290ZXJUZW1wbGF0ZSgpLHRoaXMuX2JvZHlUZW1wbGF0ZT10aGlzLl9wcmVwYXJlQm9keVRlbXBsYXRlKCl9KSl9X3ByZXBhcmVIZWFkZXJUZW1wbGF0ZSgpe3JldHVybiB0aGlzLl9wcmVwYXJlVGVtcGxhdGl6ZXIodGhpcy5fZmluZFRlbXBsYXRlKCEwKXx8bnVsbCx7fSl9X3ByZXBhcmVGb290ZXJUZW1wbGF0ZSgpe3JldHVybiB0aGlzLl9wcmVwYXJlVGVtcGxhdGl6ZXIodGhpcy5fZmluZFRlbXBsYXRlKCExLCEwKXx8bnVsbCx7fSl9X3ByZXBhcmVCb2R5VGVtcGxhdGUoKXtyZXR1cm4gdGhpcy5fcHJlcGFyZVRlbXBsYXRpemVyKHRoaXMuX2ZpbmRUZW1wbGF0ZSgpfHxudWxsKX1fcHJlcGFyZVRlbXBsYXRpemVyKHQsZSl7aWYodCYmIXQudGVtcGxhdGl6ZXIpe2NvbnN0IG49bmV3IGtOdDtuLl9ncmlkPXRoaXMuX2dyaWQsbi5kYXRhSG9zdD10aGlzLmRhdGFIb3N0LG4uX2luc3RhbmNlUHJvcHM9ZXx8bi5faW5zdGFuY2VQcm9wcyxuLnRlbXBsYXRlPXQsdC50ZW1wbGF0aXplcj1ufXJldHVybiB0fV9yZW5kZXJIZWFkZXJBbmRGb290ZXIoKXt0aGlzLmhlYWRlclJlbmRlcmVyJiZ0aGlzLl9oZWFkZXJDZWxsJiZ0aGlzLl9fcnVuUmVuZGVyZXIodGhpcy5oZWFkZXJSZW5kZXJlcix0aGlzLl9oZWFkZXJDZWxsKSx0aGlzLmZvb3RlclJlbmRlcmVyJiZ0aGlzLl9mb290ZXJDZWxsJiZ0aGlzLl9fcnVuUmVuZGVyZXIodGhpcy5mb290ZXJSZW5kZXJlcix0aGlzLl9mb290ZXJDZWxsKX1fX3J1blJlbmRlcmVyKHQsZSxuKXtjb25zdCBpPVtlLl9jb250ZW50LHRoaXNdO24mJm4uaXRlbSYmaS5wdXNoKG4pLHQuYXBwbHkodGhpcyxpKX1fX3NldENvbHVtblRlbXBsYXRlT3JSZW5kZXJlcih0LGUsbil7aWYoIXRoaXMuaGlkZGVuKXtpZih0JiZlKXRocm93IG5ldyBFcnJvcigiWW91IHNob3VsZCBvbmx5IHVzZSBlaXRoZXIgYSByZW5kZXJlciBvciBhIHRlbXBsYXRlIik7bi5mb3JFYWNoKChuPT57Y29uc3QgaT10aGlzLl9ncmlkLl9fZ2V0Um93TW9kZWwobi5wYXJlbnRFbGVtZW50KTtpZihlKW4uX3JlbmRlcmVyPWUsKGkuaXRlbXx8ZT09PXRoaXMuaGVhZGVyUmVuZGVyZXJ8fGU9PT10aGlzLmZvb3RlclJlbmRlcmVyKSYmdGhpcy5fX3J1blJlbmRlcmVyKGUsbixpKTtlbHNlIGlmKG4uX3RlbXBsYXRlIT09dCl7bi5fdGVtcGxhdGU9dCxuLl9jb250ZW50LmlubmVySFRNTD0iIix0LnRlbXBsYXRpemVyLl9ncmlkPXQudGVtcGxhdGl6ZXIuX2dyaWR8fHRoaXMuX2dyaWQ7Y29uc3QgZT10LnRlbXBsYXRpemVyLmNyZWF0ZUluc3RhbmNlKCk7bi5fY29udGVudC5hcHBlbmRDaGlsZChlLnJvb3QpLG4uX2luc3RhbmNlPWUsaS5pdGVtJiZuLl9pbnN0YW5jZS5zZXRQcm9wZXJ0aWVzKGkpfX0pKX19X3NldEJvZHlUZW1wbGF0ZU9yUmVuZGVyZXIodCxlLG4saSl7KHR8fGUpJiZuJiZ0aGlzLl9fc2V0Q29sdW1uVGVtcGxhdGVPclJlbmRlcmVyKHQsZSxuKX1fc2V0SGVhZGVyVGVtcGxhdGVPclJlbmRlcmVyKHQsZSxuKXsodHx8ZSkmJm4mJnRoaXMuX19zZXRDb2x1bW5UZW1wbGF0ZU9yUmVuZGVyZXIodCxlLFtuXSl9X3NldEZvb3RlclRlbXBsYXRlT3JSZW5kZXJlcih0LGUsbil7KHR8fGUpJiZuJiYodGhpcy5fX3NldENvbHVtblRlbXBsYXRlT3JSZW5kZXJlcih0LGUsW25dKSx0aGlzLl9ncmlkLl9fdXBkYXRlSGVhZGVyRm9vdGVyUm93VmlzaWJpbGl0eShuLnBhcmVudEVsZW1lbnQpKX1fc2VsZWN0Rmlyc3RUZW1wbGF0ZSh0PSExLGU9ITEpe3JldHVybiBSaS5nZXRGbGF0dGVuZWROb2Rlcyh0aGlzKS5maWx0ZXIoKG49PiJ0ZW1wbGF0ZSI9PT1uLmxvY2FsTmFtZSYmbi5jbGFzc0xpc3QuY29udGFpbnMoImhlYWRlciIpPT09dCYmbi5jbGFzc0xpc3QuY29udGFpbnMoImZvb3RlciIpPT09ZSkpWzBdfV9maW5kVGVtcGxhdGUodCxlKXtjb25zdCBuPXRoaXMuX3NlbGVjdEZpcnN0VGVtcGxhdGUodCxlKTtyZXR1cm4gbiYmdGhpcy5kYXRhSG9zdCYmKG4uX3Jvb3REYXRhSG9zdD10aGlzLmRhdGFIb3N0Ll9yb290RGF0YUhvc3R8fHRoaXMuZGF0YUhvc3QpLG59X2ZsZXhHcm93Q2hhbmdlZCh0LGUsbixpKXt0aGlzLnBhcmVudEVsZW1lbnQmJnRoaXMucGFyZW50RWxlbWVudC5fY29sdW1uUHJvcENoYW5nZWQmJnRoaXMucGFyZW50RWxlbWVudC5fY29sdW1uUHJvcENoYW5nZWQoImZsZXhHcm93IiksdGhpcy5fYWxsQ2VsbHMuZm9yRWFjaCgoZT0+ZS5zdHlsZS5mbGV4R3Jvdz10KSl9X29yZGVyQ2hhbmdlZCh0LGUsbixpKXt0aGlzLl9hbGxDZWxscy5mb3JFYWNoKChlPT5lLnN0eWxlLm9yZGVyPXQpKX1fd2lkdGhDaGFuZ2VkKHQsZSxuLGkpe3RoaXMucGFyZW50RWxlbWVudCYmdGhpcy5wYXJlbnRFbGVtZW50Ll9jb2x1bW5Qcm9wQ2hhbmdlZCYmdGhpcy5wYXJlbnRFbGVtZW50Ll9jb2x1bW5Qcm9wQ2hhbmdlZCgid2lkdGgiKSx0aGlzLl9hbGxDZWxscy5mb3JFYWNoKChlPT5lLnN0eWxlLndpZHRoPXQpKSx0aGlzLl9ncmlkJiZ0aGlzLl9ncmlkLl9fZm9yY2VSZWZsb3cmJnRoaXMuX2dyaWQuX19mb3JjZVJlZmxvdygpfV9mcm96ZW5DaGFuZ2VkKHQsZSxuLGkpe3RoaXMucGFyZW50RWxlbWVudCYmdGhpcy5wYXJlbnRFbGVtZW50Ll9jb2x1bW5Qcm9wQ2hhbmdlZCYmdGhpcy5wYXJlbnRFbGVtZW50Ll9jb2x1bW5Qcm9wQ2hhbmdlZCgiZnJvemVuIix0KSx0aGlzLl9hbGxDZWxscy5mb3JFYWNoKChlPT50aGlzLl90b2dnbGVBdHRyaWJ1dGUoImZyb3plbiIsdCxlKSkpLHRoaXMuX2dyaWQmJnRoaXMuX2dyaWQuX2Zyb3plbkNlbGxzQ2hhbmdlZCYmdGhpcy5fZ3JpZC5fZnJvemVuQ2VsbHNDaGFuZ2VkKCl9X2xhc3RGcm96ZW5DaGFuZ2VkKHQpe3RoaXMuX2FsbENlbGxzLmZvckVhY2goKGU9PnRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibGFzdC1mcm96ZW4iLHQsZSkpKSx0aGlzLnBhcmVudEVsZW1lbnQmJnRoaXMucGFyZW50RWxlbWVudC5fY29sdW1uUHJvcENoYW5nZWQmJih0aGlzLnBhcmVudEVsZW1lbnQuX2xhc3RGcm96ZW49dCl9X3BhdGhPckhlYWRlckNoYW5nZWQodCxlLG4saSxyLG8sYSxzLGwpe2NvbnN0IGM9dm9pZCAwIT09ZTshYSYmIWwmJmMmJm4mJnRoaXMuX19zZXRUZXh0Q29udGVudChuLl9jb250ZW50LGUpLHQmJnIudmFsdWUmJihvfHxzfHx0aGlzLl9fc2V0Q29sdW1uVGVtcGxhdGVPclJlbmRlcmVyKHZvaWQgMCwoKGUsbix7aXRlbTppfSk9PnRoaXMuX19zZXRUZXh0Q29udGVudChlLHRoaXMuZ2V0KHQsaSkpKSxyLnZhbHVlKSxhfHxsfHxjfHwhbnx8bnVsbD09PWV8fHRoaXMuX19zZXRUZXh0Q29udGVudChuLl9jb250ZW50LHRoaXMuX2dlbmVyYXRlSGVhZGVyKHQpKSksbiYmdGhpcy5fZ3JpZC5fX3VwZGF0ZUhlYWRlckZvb3RlclJvd1Zpc2liaWxpdHkobi5wYXJlbnRFbGVtZW50KX1fX3NldFRleHRDb250ZW50KHQsZSl7dC50ZXh0Q29udGVudCE9PWUmJih0LnRleHRDb250ZW50PWUpfV9nZW5lcmF0ZUhlYWRlcih0KXtyZXR1cm4gdC5zdWJzdHIodC5sYXN0SW5kZXhPZigiLiIpKzEpLnJlcGxhY2UoLyhbQS1aXSkvZywiLSQxIikudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8tL2csIiAiKS5yZXBsYWNlKC9eLi8sKHQ9PnQudG9VcHBlckNhc2UoKSkpfV90b2dnbGVBdHRyaWJ1dGUodCxlLG4pe24uaGFzQXR0cmlidXRlKHQpPT09IWUmJihlP24uc2V0QXR0cmlidXRlKHQsIiIpOm4ucmVtb3ZlQXR0cmlidXRlKHQpKX1fcmVvcmRlclN0YXR1c0NoYW5nZWQodCxlLG4saSl7dGhpcy5fYWxsQ2VsbHMuZm9yRWFjaCgoZT0+ZS5zZXRBdHRyaWJ1dGUoInJlb3JkZXItc3RhdHVzIix0KSkpfV9yZXNpemFibGVDaGFuZ2VkKHQsZSl7dm9pZCAwIT09dCYmdm9pZCAwIT09ZSYmZSYmW2VdLmNvbmNhdCh0aGlzLl9lbXB0eUNlbGxzKS5mb3JFYWNoKChlPT57aWYoZSl7Y29uc3Qgbj1lLnF1ZXJ5U2VsZWN0b3IoJ1twYXJ0fj0icmVzaXplLWhhbmRsZSJdJyk7aWYobiYmZS5yZW1vdmVDaGlsZChuKSx0KXtjb25zdCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3Quc2V0QXR0cmlidXRlKCJwYXJ0IiwicmVzaXplLWhhbmRsZSIpLGUuYXBwZW5kQ2hpbGQodCl9fX0pKX1fdGV4dEFsaWduQ2hhbmdlZCh0LGUsbixpKXtpZih2b2lkIDA9PT10KXJldHVybjtpZigtMT09PVsic3RhcnQiLCJlbmQiLCJjZW50ZXIiXS5pbmRleE9mKHQpKXJldHVybiB2b2lkIGNvbnNvbGUud2FybigndGV4dEFsaWduIGNhbiBvbmx5IGJlIHNldCBhcyAic3RhcnQiLCAiZW5kIiBvciAiY2VudGVyIicpO2xldCByOyJsdHIiPT09Z2V0Q29tcHV0ZWRTdHlsZSh0aGlzLl9ncmlkKS5kaXJlY3Rpb24/InN0YXJ0Ij09PXQ/cj0ibGVmdCI6ImVuZCI9PT10JiYocj0icmlnaHQiKToic3RhcnQiPT09dD9yPSJyaWdodCI6ImVuZCI9PT10JiYocj0ibGVmdCIpLHRoaXMuX2FsbENlbGxzLmZvckVhY2goKGU9PntlLl9jb250ZW50LnN0eWxlLnRleHRBbGlnbj10LGdldENvbXB1dGVkU3R5bGUoZS5fY29udGVudCkudGV4dEFsaWduIT09dCYmKGUuX2NvbnRlbnQuc3R5bGUudGV4dEFsaWduPXIpfSkpfV9oaWRkZW5DaGFuZ2VkKHQsZSxuLGkpe3RoaXMucGFyZW50RWxlbWVudCYmdGhpcy5wYXJlbnRFbGVtZW50Ll9jb2x1bW5Qcm9wQ2hhbmdlZCYmdGhpcy5wYXJlbnRFbGVtZW50Ll9jb2x1bW5Qcm9wQ2hhbmdlZCgiaGlkZGVuIix0KSwhIXQhPSEhdGhpcy5fcHJldmlvdXNIaWRkZW4mJnRoaXMuX2dyaWQmJighMD09PXQmJnRoaXMuX2FsbENlbGxzLmZvckVhY2goKHQ9Pnt0Ll9jb250ZW50LnBhcmVudE5vZGUmJnQuX2NvbnRlbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0Ll9jb250ZW50KX0pKSx0aGlzLl9ncmlkLl9kZWJvdW5jZXJIaWRkZW5DaGFuZ2VkPUVuLmRlYm91bmNlKHRoaXMuX2dyaWQuX2RlYm91bmNlckhpZGRlbkNoYW5nZWQsX3QsKCgpPT57dGhpcy5fZ3JpZCYmdGhpcy5fZ3JpZC5fcmVuZGVyQ29sdW1uVHJlZSYmdGhpcy5fZ3JpZC5fcmVuZGVyQ29sdW1uVHJlZSh0aGlzLl9ncmlkLl9jb2x1bW5UcmVlKX0pKSx0aGlzLl9ncmlkLl91cGRhdGVMYXN0RnJvemVuJiZ0aGlzLl9ncmlkLl91cGRhdGVMYXN0RnJvemVuKCksdGhpcy5fZ3JpZC5ub3RpZnlSZXNpemUmJnRoaXMuX2dyaWQubm90aWZ5UmVzaXplKCksdGhpcy5fZ3JpZC5fcmVzZXRLZXlib2FyZE5hdmlnYXRpb24mJnRoaXMuX2dyaWQuX3Jlc2V0S2V5Ym9hcmROYXZpZ2F0aW9uKCkpLHRoaXMuX3ByZXZpb3VzSGlkZGVuPXR9fTtjbGFzcyBHTnQgZXh0ZW5kcyhqTnQodE50KHllKSkpe3N0YXRpYyBnZXQgaXMoKXtyZXR1cm4idmFhZGluLWdyaWQtY29sdW1uIn1zdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57d2lkdGg6e3R5cGU6U3RyaW5nLHZhbHVlOiIxMDBweCJ9LGZsZXhHcm93Ont0eXBlOk51bWJlcix2YWx1ZToxfSxyZW5kZXJlcjpGdW5jdGlvbixwYXRoOnt0eXBlOlN0cmluZ30sYXV0b1dpZHRoOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9ib2R5VGVtcGxhdGU6e3R5cGU6T2JqZWN0fSxfY2VsbHM6QXJyYXl9fX1jdXN0b21FbGVtZW50cy5kZWZpbmUoR050LmlzLEdOdCk7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBWYWFkaW4gTHRkLgogICAgVGhpcyBwcm9ncmFtIGlzIGF2YWlsYWJsZSB1bmRlciBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCwgYXZhaWxhYmxlIGF0IGh0dHBzOi8vdmFhZGluLmNvbS9saWNlbnNlLwogICAgKi8KY29uc3QgV050PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRvbS1tb2R1bGUiKTtXTnQuYXBwZW5kQ2hpbGQoX2VgCiAgPHN0eWxlPgogICAgQGtleWZyYW1lcyB2YWFkaW4tZ3JpZC1hcHBlYXIgewogICAgICB0byB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQogICAgfQoKICAgIDpob3N0IHsKICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIGFuaW1hdGlvbjogMW1zIHZhYWRpbi1ncmlkLWFwcGVhcjsKICAgICAgaGVpZ2h0OiA0MDBweDsKICAgICAgZmxleDogMSAxIGF1dG87CiAgICAgIGFsaWduLXNlbGY6IHN0cmV0Y2g7CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIH0KCiAgICA6aG9zdChbaGlkZGVuXSkgewogICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICB9CgogICAgI3Njcm9sbGVyIHsKICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsKICAgICAgd2lkdGg6IGF1dG87CiAgICAgIGhlaWdodDogYXV0bzsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB0b3A6IDA7CiAgICAgIHJpZ2h0OiAwOwogICAgICBib3R0b206IDA7CiAgICAgIGxlZnQ6IDA7CiAgICB9CgogICAgOmhvc3QoW2hlaWdodC1ieS1yb3dzXSkgewogICAgICBoZWlnaHQ6IGF1dG87CiAgICAgIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7CiAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgd2lkdGg6IDEwMCU7CiAgICB9CgogICAgOmhvc3QoW2hlaWdodC1ieS1yb3dzXSkgI3Njcm9sbGVyIHsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIGhlaWdodDogMTAwJTsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgfQoKICAgICN0YWJsZSB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIC8qIFdvcmthcm91bmQgZm9yIGEgRGVza3RvcCBTYWZhcmkgYnVnOiBuZXcgc3RhY2tpbmcgY29udGV4dCBoZXJlIHByZXZlbnRzIHRoZSBzY3JvbGxiYXIgZnJvbSBnZXR0aW5nIGhpZGRlbiAqLwogICAgICB6LWluZGV4OiAwOwogICAgfQoKICAgICNoZWFkZXIsCiAgICAjZm9vdGVyIHsKICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIHBvc2l0aW9uOiAtd2Via2l0LXN0aWNreTsKICAgICAgcG9zaXRpb246IHN0aWNreTsKICAgICAgbGVmdDogMDsKICAgICAgb3ZlcmZsb3c6IHZpc2libGU7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICB6LWluZGV4OiAxOwogICAgfQoKICAgICNoZWFkZXIgewogICAgICB0b3A6IDA7CiAgICB9CgogICAgdGggewogICAgICB0ZXh0LWFsaWduOiBpbmhlcml0OwogICAgfQoKICAgIC8qIFNhZmFyaSBkb2Vzbid0IHdvcmsgd2l0aCAiaW5oZXJpdCIgKi8KICAgIFtzYWZhcmldIHRoIHsKICAgICAgdGV4dC1hbGlnbjogaW5pdGlhbDsKICAgIH0KCiAgICAjZm9vdGVyIHsKICAgICAgYm90dG9tOiAwOwogICAgfQoKICAgICNpdGVtcyB7CiAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICBwb3NpdGlvbjogLXdlYmtpdC1zdGlja3k7CiAgICAgIHBvc2l0aW9uOiBzdGlja3k7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBsZWZ0OiAwOwogICAgICBvdmVyZmxvdzogdmlzaWJsZTsKICAgIH0KCiAgICBbcGFydH49InJvdyJdIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIG1hcmdpbjogMDsKICAgIH0KCiAgICBbcGFydH49InJvdyJdW2xvYWRpbmddIFtwYXJ0fj0iYm9keS1jZWxsIl0gOjpzbG90dGVkKHZhYWRpbi1ncmlkLWNlbGwtY29udGVudCkgewogICAgICBvcGFjaXR5OiAwOwogICAgfQoKICAgICNpdGVtcyBbcGFydH49InJvdyJdIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgfQoKICAgICNpdGVtcyBbcGFydH49InJvdyJdOmVtcHR5IHsKICAgICAgaGVpZ2h0OiAxZW07CiAgICB9CgogICAgW3BhcnR+PSJjZWxsIl06bm90KFtwYXJ0fj0iZGV0YWlscy1jZWxsIl0pIHsKICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgcGFkZGluZzogMDsKICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIH0KCiAgICBbcGFydH49ImRldGFpbHMtY2VsbCJdIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICBib3R0b206IDA7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICBwYWRkaW5nOiAwOwogICAgfQoKICAgIFtwYXJ0fj0iY2VsbCJdIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpIHsKICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIH0KCiAgICBbaGlkZGVuXSB7CiAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgIH0KCiAgICBbZnJvemVuXSB7CiAgICAgIHotaW5kZXg6IDI7CiAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICB9CgogICAgW25vLXNjcm9sbGJhcnNdW3NhZmFyaV0gI3RhYmxlLAogICAgW25vLXNjcm9sbGJhcnNdW2ZpcmVmb3hdICN0YWJsZSB7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB9CgogICAgLyogUmVvcmRlcmluZyBzdHlsZXMgKi8KICAgIDpob3N0KFtyZW9yZGVyaW5nXSkgW3BhcnR+PSJjZWxsIl0gOjpzbG90dGVkKHZhYWRpbi1ncmlkLWNlbGwtY29udGVudCksCiAgICA6aG9zdChbcmVvcmRlcmluZ10pIFtwYXJ0fj0icmVzaXplLWhhbmRsZSJdLAogICAgI3Njcm9sbGVyW25vLWNvbnRlbnQtcG9pbnRlci1ldmVudHNdIFtwYXJ0fj0iY2VsbCJdIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpIHsKICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICB9CgogICAgW3BhcnR+PSJyZW9yZGVyLWdob3N0Il0gewogICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIG9wYWNpdHk6IDAuNTsKCiAgICAgIC8qIFByZXZlbnQgb3ZlcmZsb3dpbmcgdGhlIGdyaWQgaW4gRmlyZWZveCAqLwogICAgICB0b3A6IDA7CiAgICAgIGxlZnQ6IDA7CiAgICB9CgogICAgOmhvc3QoW3Jlb3JkZXJpbmddKSB7CiAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgfQoKICAgICNzY3JvbGxlcltpZV1bY29sdW1uLXJlb3JkZXJpbmctYWxsb3dlZF0gW3BhcnR+PSJoZWFkZXItY2VsbCJdIHsKICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lOwogICAgfQoKICAgIC8qIFJlc2l6aW5nIHN0eWxlcyAqLwogICAgW3BhcnR+PSJyZXNpemUtaGFuZGxlIl0gewogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIHRvcDogMDsKICAgICAgcmlnaHQ6IDA7CiAgICAgIGhlaWdodDogMTAwJTsKICAgICAgY3Vyc29yOiBjb2wtcmVzaXplOwogICAgICB6LWluZGV4OiAxOwogICAgfQoKICAgIFtwYXJ0fj0icmVzaXplLWhhbmRsZSJdOjpiZWZvcmUgewogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIGNvbnRlbnQ6ICIiOwogICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIHdpZHRoOiAzNXB4OwogICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7CiAgICB9CgogICAgW2xhc3QtY29sdW1uXSBbcGFydH49InJlc2l6ZS1oYW5kbGUiXTo6YmVmb3JlLAogICAgW2xhc3QtZnJvemVuXSBbcGFydH49InJlc2l6ZS1oYW5kbGUiXTo6YmVmb3JlIHsKICAgICAgd2lkdGg6IDE4cHg7CiAgICAgIHRyYW5zZm9ybTogbm9uZTsKICAgICAgcmlnaHQ6IDA7CiAgICB9CgogICAgI3Njcm9sbGVyW2NvbHVtbi1yZXNpemluZ10gewogICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgfQoKICAgIC8qIFNpemVyIHN0eWxlcyAqLwogICAgI3NpemVyIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICB9CgogICAgI3NpemVyIFtwYXJ0fj0iZGV0YWlscy1jZWxsIl0gewogICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICB9CgogICAgI3NpemVyIFtwYXJ0fj0iY2VsbCJdW2hpZGRlbl0gewogICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICB9CgogICAgI3NpemVyIFtwYXJ0fj0iY2VsbCJdIHsKICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICBsaW5lLWhlaWdodDogMDsKICAgICAgaGVpZ2h0OiAwICFpbXBvcnRhbnQ7CiAgICAgIG1pbi1oZWlnaHQ6IDAgIWltcG9ydGFudDsKICAgICAgbWF4LWhlaWdodDogMCAhaW1wb3J0YW50OwogICAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7CiAgICAgIGJvcmRlcjogbm9uZSAhaW1wb3J0YW50OwogICAgfQoKICAgICNzaXplciBbcGFydH49ImNlbGwiXTo6YmVmb3JlIHsKICAgICAgY29udGVudDogIi0iOwogICAgfQoKICAgICNzaXplciBbcGFydH49ImNlbGwiXSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgIH0KCiAgICAvKiBSVEwgc3BlY2lmaWMgc3R5bGVzICovCgogICAgOmhvc3QoW2Rpcj0icnRsIl0pICNpdGVtcywKICAgIDpob3N0KFtkaXI9InJ0bCJdKSAjaGVhZGVyLAogICAgOmhvc3QoW2Rpcj0icnRsIl0pICNmb290ZXIgewogICAgICBsZWZ0OiBhdXRvOwogICAgfQoKICAgIDpob3N0KFtkaXI9InJ0bCJdKSBbcGFydH49InJlb3JkZXItZ2hvc3QiXSB7CiAgICAgIGxlZnQ6IGF1dG87CiAgICAgIHJpZ2h0OiAwOwogICAgfQoKICAgIDpob3N0KFtkaXI9InJ0bCJdKSBbcGFydH49InJlc2l6ZS1oYW5kbGUiXSB7CiAgICAgIGxlZnQ6IDA7CiAgICAgIHJpZ2h0OiBhdXRvOwogICAgfQoKICAgIDpob3N0KFtkaXI9InJ0bCJdKSBbcGFydH49InJlc2l6ZS1oYW5kbGUiXTo6YmVmb3JlIHsKICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDUwJSk7CiAgICB9CgogICAgOmhvc3QoW2Rpcj0icnRsIl0pIFtsYXN0LWNvbHVtbl0gW3BhcnR+PSJyZXNpemUtaGFuZGxlIl06OmJlZm9yZSwKICAgIDpob3N0KFtkaXI9InJ0bCJdKSBbbGFzdC1mcm96ZW5dIFtwYXJ0fj0icmVzaXplLWhhbmRsZSJdOjpiZWZvcmUgewogICAgICBsZWZ0OiAwOwogICAgICByaWdodDogYXV0bzsKICAgIH0KICA8L3N0eWxlPgpgKSxXTnQucmVnaXN0ZXIoInZhYWRpbi1ncmlkLXN0eWxlcyIpOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTcgVmFhZGluIEx0ZC4KICAgIFRoaXMgcHJvZ3JhbSBpcyBhdmFpbGFibGUgdW5kZXIgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAsIGF2YWlsYWJsZSBhdCBodHRwczovL3ZhYWRpbi5jb20vbGljZW5zZS8KICAgICovCmNvbnN0IHFOdD0oKCk9Pnt0cnl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUV2ZW50KCJUb3VjaEV2ZW50IiksITB9Y2F0Y2godCl7cmV0dXJuITF9fSkoKTtjbGFzcyBZTnQgZXh0ZW5kcyhjTnQocVB0KEVOdCh3TnQoVE50KGJOdChQTnQoTk50KElOdChMTnQoVk50KHZOdChBTnQoVU50KFNOdChDTnQoRk50KE9OdCh5TnQpKSkpKSkpKSkpKSkpKSkpKSkpe3N0YXRpYyBnZXQgdGVtcGxhdGUoKXtyZXR1cm4gX2VgCiAgICA8c3R5bGUgaW5jbHVkZT0idmFhZGluLWdyaWQtc3R5bGVzIj48L3N0eWxlPgoKICAgIDxkaXYgaWQ9InNjcm9sbGVyIiBzYWZhcmlcJD0iW1tfc2FmYXJpXV0iIGlvc1wkPSJbW19pb3NdXSIgaWVcJD0iW1tfaWVdXSIgbG9hZGluZ1wkPSJbW2xvYWRpbmddXSIgY29sdW1uLXJlb3JkZXJpbmctYWxsb3dlZFwkPSJbW2NvbHVtblJlb3JkZXJpbmdBbGxvd2VkXV0iPgoKICAgICAgPHRhYmxlIGlkPSJ0YWJsZSIgcm9sZT0iZ3JpZCIgYXJpYS1tdWx0aXNlbGVjdGFibGU9InRydWUiIHRhYmluZGV4PSIwIj4KICAgICAgICA8Y2FwdGlvbiBpZD0ic2l6ZXIiIHBhcnQ9InJvdyI+PC9jYXB0aW9uPgogICAgICAgIDx0aGVhZCBpZD0iaGVhZGVyIiByb2xlPSJyb3dncm91cCI+PC90aGVhZD4KICAgICAgICA8dGJvZHkgaWQ9Iml0ZW1zIiByb2xlPSJyb3dncm91cCI+PC90Ym9keT4KICAgICAgICA8dGZvb3QgaWQ9ImZvb3RlciIgcm9sZT0icm93Z3JvdXAiPjwvdGZvb3Q+CiAgICAgIDwvdGFibGU+CgogICAgICA8ZGl2IHBhcnQ9InJlb3JkZXItZ2hvc3QiPjwvZGl2PgogICAgPC9kaXY+CgogICAgPCEtLSBUaGUgdGVtcGxhdGUgbmVlZHMgYXQgbGVhc3Qgb25lIHNsb3Qgb3IgZWxzZSBzaGFkeSBkb2Vzbid0IGRpc3RyaWJ1dGUgLS0+CiAgICA8c2xvdCBuYW1lPSJub2Rpc3RyaWJ1dGUiPjwvc2xvdD4KCiAgICA8ZGl2IGlkPSJmb2N1c2V4aXQiIHRhYmluZGV4PSIwIj48L2Rpdj4KYH1zdGF0aWMgZ2V0IGlzKCl7cmV0dXJuInZhYWRpbi1ncmlkIn1zdGF0aWMgZ2V0IHZlcnNpb24oKXtyZXR1cm4iNS43LjEzIn1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX2NvbHVtblRyZWVDaGFuZ2VkKF9jb2x1bW5UcmVlLCBfY29sdW1uVHJlZS4qKSJdfXN0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntfc2FmYXJpOnt0eXBlOkJvb2xlYW4sdmFsdWU6L14oKD8hY2hyb21lfGFuZHJvaWQpLikqc2FmYXJpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KX0sX2lvczp7dHlwZTpCb29sZWFuLHZhbHVlOi9pUGFkfGlQaG9uZXxpUG9kLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYhd2luZG93Lk1TU3RyZWFtfHwiTWFjSW50ZWwiPT09bmF2aWdhdG9yLnBsYXRmb3JtJiZuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHM+MX0sX2VkZ2U6e3R5cGU6Qm9vbGVhbix2YWx1ZToidW5kZWZpbmVkIiE9dHlwZW9mIENTUyYmQ1NTLnN1cHBvcnRzKCIoLW1zLWltZS1hbGlnbjphdXRvKSIpfSxfaWU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohKCFuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9UcmlkZW50Lyl8fG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL01TSUUvKSl9LF9maXJlZm94Ont0eXBlOkJvb2xlYW4sdmFsdWU6bmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoImZpcmVmb3giKT4tMX0sX2FuZHJvaWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTovYW5kcm9pZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCl9LF90b3VjaERldmljZTp7dHlwZTpCb29sZWFuLHZhbHVlOnFOdH0saGVpZ2h0QnlSb3dzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVmbGVjdFRvQXR0cmlidXRlOiEwLG9ic2VydmVyOiJfaGVpZ2h0QnlSb3dzQ2hhbmdlZCJ9LF9yZWNhbGN1bGF0ZUNvbHVtbldpZHRoT25jZUxvYWRpbmdGaW5pc2hlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiEwfX19Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiYW5pbWF0aW9uZW5kIix0aGlzLl9vbkFuaW1hdGlvbkVuZCl9Y29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMucmVjYWxjdWxhdGVDb2x1bW5XaWR0aHMoKX1hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sodCxlLG4pe3N1cGVyLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayh0LGUsbiksImRpciI9PT10JiYodGhpcy5fX2lzUlRMPSJydGwiPT09bix0aGlzLl91cGRhdGVTY3JvbGxlck1lYXN1cmVtZW50cygpKX1fX2hhc1Jvd3NXaXRoQ2xpZW50SGVpZ2h0KCl7cmV0dXJuISFBcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZmlsdGVyKCh0PT50LmNsaWVudEhlaWdodCkpLmxlbmd0aH1fX2l0ZW1zUmVjZWl2ZWQoKXt0aGlzLl9yZWNhbGN1bGF0ZUNvbHVtbldpZHRoT25jZUxvYWRpbmdGaW5pc2hlZCYmIXRoaXMuX2NhY2hlLmlzTG9hZGluZygpJiZ0aGlzLl9faGFzUm93c1dpdGhDbGllbnRIZWlnaHQoKSYmKHRoaXMuX3JlY2FsY3VsYXRlQ29sdW1uV2lkdGhPbmNlTG9hZGluZ0ZpbmlzaGVkPSExLHRoaXMucmVjYWxjdWxhdGVDb2x1bW5XaWR0aHMoKSl9X3JlY2FsY3VsYXRlQ29sdW1uV2lkdGhzKHQpe3QuZm9yRWFjaCgodD0+e3Qud2lkdGg9ImF1dG8iLHQuX29yaWdGbGV4R3Jvdz10LmZsZXhHcm93LHQuZmxleEdyb3c9MH0pKSx0LmZvckVhY2goKHQ9Pnt0Ll9jdXJyZW50V2lkdGg9MCx0Ll9hbGxDZWxscy5mb3JFYWNoKChlPT57dC5fY3VycmVudFdpZHRoPU1hdGgubWF4KHQuX2N1cnJlbnRXaWR0aCxlLm9mZnNldFdpZHRoKzEpfSkpfSkpLHQuZm9yRWFjaCgodD0+e3Qud2lkdGg9YCR7dC5fY3VycmVudFdpZHRofXB4YCx0LmZsZXhHcm93PXQuX29yaWdGbGV4R3Jvdyx0Ll9jdXJyZW50V2lkdGg9dm9pZCAwLHQuX29yaWdGbGV4R3Jvdz12b2lkIDB9KSl9cmVjYWxjdWxhdGVDb2x1bW5XaWR0aHMoKXtpZih0aGlzLl9jb2x1bW5UcmVlKWlmKHRoaXMuX2NhY2hlLmlzTG9hZGluZygpKXRoaXMuX3JlY2FsY3VsYXRlQ29sdW1uV2lkdGhPbmNlTG9hZGluZ0ZpbmlzaGVkPSEwO2Vsc2V7Y29uc3QgdD10aGlzLl9nZXRDb2x1bW5zKCkuZmlsdGVyKCh0PT4hdC5oaWRkZW4mJnQuYXV0b1dpZHRoKSk7dGhpcy5fcmVjYWxjdWxhdGVDb2x1bW5XaWR0aHModCl9fV9jcmVhdGVTY3JvbGxlclJvd3ModCl7Y29uc3QgZT1bXTtmb3IodmFyIG49MDtuPHQ7bisrKXtjb25zdCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIik7dC5zZXRBdHRyaWJ1dGUoInBhcnQiLCJyb3ciKSx0LnNldEF0dHJpYnV0ZSgicm9sZSIsInJvdyIpLHRoaXMuX2NvbHVtblRyZWUmJnRoaXMuX3VwZGF0ZVJvdyh0LHRoaXMuX2NvbHVtblRyZWVbdGhpcy5fY29sdW1uVHJlZS5sZW5ndGgtMV0sImJvZHkiLCExLCEwKSxlLnB1c2godCl9cmV0dXJuIHRoaXMuX2NvbHVtblRyZWUmJnRoaXMuX2NvbHVtblRyZWVbdGhpcy5fY29sdW1uVHJlZS5sZW5ndGgtMV0uZm9yRWFjaCgodD0+dC5pc0Nvbm5lY3RlZCYmdC5ub3RpZnlQYXRoJiZ0Lm5vdGlmeVBhdGgoIl9jZWxscy4qIix0Ll9jZWxscykpKSwoZnVuY3Rpb24gaSh0LGUsbil7TWl8fENpKCksRWkucHVzaChbdCxlLG5dKX0pKHRoaXMsKCgpPT57dGhpcy5fdXBkYXRlRmlyc3RBbmRMYXN0Q29sdW1uKCksdGhpcy5fcmVzZXRLZXlib2FyZE5hdmlnYXRpb24oKX0pKSxlfV9nZXRSb3dUYXJnZXQoKXtyZXR1cm4gdGhpcy4kLml0ZW1zfV9jcmVhdGVDZWxsKHQpe2NvbnN0IGU9InZhYWRpbi1ncmlkLWNlbGwtY29udGVudC0iKyh0aGlzLl9jb250ZW50SW5kZXg9dGhpcy5fY29udGVudEluZGV4KzF8fDApLG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidmFhZGluLWdyaWQtY2VsbC1jb250ZW50Iik7bi5zZXRBdHRyaWJ1dGUoInNsb3QiLGUpO2NvbnN0IGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0KTtpLmlkPWUucmVwbGFjZSgiLWNvbnRlbnQtIiwiLSIpLGkuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIi0xIiksaS5zZXRBdHRyaWJ1dGUoInJvbGUiLCJ0ZCI9PT10PyJncmlkY2VsbCI6ImNvbHVtbmhlYWRlciIpO2NvbnN0IHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2xvdCIpO3JldHVybiByLnNldEF0dHJpYnV0ZSgibmFtZSIsZSksaS5hcHBlbmRDaGlsZChyKSxpLl9jb250ZW50PW4sbi5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCgoKT0+e2lmKHdpbmRvdy5jaHJvbWUpe2NvbnN0IHQ9KCk9PntuLmNvbnRhaW5zKHRoaXMuZ2V0Um9vdE5vZGUoKS5hY3RpdmVFbGVtZW50KXx8aS5mb2N1cygpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHQsITApfTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIix0LCEwKX1lbHNlIHNldFRpbWVvdXQoKCgpPT57bi5jb250YWlucyh0aGlzLmdldFJvb3ROb2RlKCkuYWN0aXZlRWxlbWVudCl8fGkuZm9jdXMoKX0pKX0pKSxpfV91cGRhdGVSb3codCxlLG4saSxyKXtuPW58fCJib2R5Ijtjb25zdCBvPWRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtBcnJheS5mcm9tKHQuY2hpbGRyZW4pLmZvckVhY2goKHQ9PnQuX3ZhY2FudD0hMCkpLHQuaW5uZXJIVE1MPSIiLCJzaXplciIhPT10LmlkJiYodC5oaWRkZW49ITApLGUuZmlsdGVyKCh0PT4hdC5oaWRkZW4pKS5mb3JFYWNoKCgoZSxhLHMpPT57bGV0IGw7aWYoImJvZHkiPT09bil7aWYoZS5fY2VsbHM9ZS5fY2VsbHN8fFtdLGw9ZS5fY2VsbHMuZmlsdGVyKCh0PT50Ll92YWNhbnQpKVswXSxsfHwobD10aGlzLl9jcmVhdGVDZWxsKCJ0ZCIpLGUuX2NlbGxzLnB1c2gobCkpLGwuc2V0QXR0cmlidXRlKCJwYXJ0IiwiY2VsbCBib2R5LWNlbGwiKSx0LmFwcGVuZENoaWxkKGwpLGE9PT1zLmxlbmd0aC0xJiYodGhpcy5fcm93RGV0YWlsc1RlbXBsYXRlfHx0aGlzLnJvd0RldGFpbHNSZW5kZXJlcikpe3RoaXMuX2RldGFpbHNDZWxscz10aGlzLl9kZXRhaWxzQ2VsbHN8fFtdO2NvbnN0IGU9dGhpcy5fZGV0YWlsc0NlbGxzLmZpbHRlcigodD0+dC5fdmFjYW50KSlbMF18fHRoaXMuX2NyZWF0ZUNlbGwoInRkIik7LTE9PT10aGlzLl9kZXRhaWxzQ2VsbHMuaW5kZXhPZihlKSYmdGhpcy5fZGV0YWlsc0NlbGxzLnB1c2goZSksZS5fY29udGVudC5wYXJlbnRFbGVtZW50fHxvLmFwcGVuZENoaWxkKGUuX2NvbnRlbnQpLHRoaXMuX2NvbmZpZ3VyZURldGFpbHNDZWxsKGUpLHQuYXBwZW5kQ2hpbGQoZSksdGhpcy5fYTExeVNldFJvd0RldGFpbHNDZWxsKHQsZSksZS5fdmFjYW50PSExfWUubm90aWZ5UGF0aCYmIXImJmUubm90aWZ5UGF0aCgiX2NlbGxzLioiLGUuX2NlbGxzKX1lbHNle2NvbnN0IHI9ImhlYWRlciI9PT1uPyJ0aCI6InRkIjtpfHwidmFhZGluLWdyaWQtY29sdW1uLWdyb3VwIj09PWUubG9jYWxOYW1lPyhsPWVbYF8ke259Q2VsbGBdfHx0aGlzLl9jcmVhdGVDZWxsKHIpLGwuX2NvbHVtbj1lLHQuYXBwZW5kQ2hpbGQobCksZVtgXyR7bn1DZWxsYF09bCk6KGUuX2VtcHR5Q2VsbHM9ZS5fZW1wdHlDZWxsc3x8W10sbD1lLl9lbXB0eUNlbGxzLmZpbHRlcigodD0+dC5fdmFjYW50KSlbMF18fHRoaXMuX2NyZWF0ZUNlbGwociksbC5fY29sdW1uPWUsdC5hcHBlbmRDaGlsZChsKSwtMT09PWUuX2VtcHR5Q2VsbHMuaW5kZXhPZihsKSYmZS5fZW1wdHlDZWxscy5wdXNoKGwpKSxsLnNldEF0dHJpYnV0ZSgicGFydCIsYGNlbGwgJHtufS1jZWxsYCksdGhpcy5fX3VwZGF0ZUhlYWRlckZvb3RlclJvd1Zpc2liaWxpdHkodCl9bC5fY29udGVudC5wYXJlbnRFbGVtZW50fHxvLmFwcGVuZENoaWxkKGwuX2NvbnRlbnQpLGwuX3ZhY2FudD0hMSxsLl9jb2x1bW49ZX0pKSx0aGlzLmFwcGVuZENoaWxkKG8pLHRoaXMuX2Zyb3plbkNlbGxzQ2hhbmdlZCgpLHRoaXMuX3VwZGF0ZUZpcnN0QW5kTGFzdENvbHVtbkZvclJvdyh0KX1fX3VwZGF0ZUhlYWRlckZvb3RlclJvd1Zpc2liaWxpdHkodCl7aWYoIXQpcmV0dXJuO2NvbnN0IGU9QXJyYXkuZnJvbSh0LmNoaWxkcmVuKS5maWx0ZXIoKGU9Pntjb25zdCBuPWUuX2NvbHVtbjtpZihuLl9lbXB0eUNlbGxzJiZuLl9lbXB0eUNlbGxzLmluZGV4T2YoZSk+LTEpcmV0dXJuITE7aWYodC5wYXJlbnRFbGVtZW50PT09dGhpcy4kLmhlYWRlcil7aWYobi5oZWFkZXJSZW5kZXJlcnx8bi5faGVhZGVyVGVtcGxhdGUpcmV0dXJuITA7aWYobnVsbD09PW4uaGVhZGVyKXJldHVybiExO2lmKG4ucGF0aHx8dm9pZCAwIT09bi5oZWFkZXIpcmV0dXJuITB9ZWxzZSBpZihuLmZvb3RlclJlbmRlcmVyfHxuLl9mb290ZXJUZW1wbGF0ZSlyZXR1cm4hMH0pKTt0LmhpZGRlbiE9PSFlLmxlbmd0aCYmKHQuaGlkZGVuPSFlLmxlbmd0aCx0aGlzLm5vdGlmeVJlc2l6ZSgpKX1fdXBkYXRlU2Nyb2xsZXJJdGVtKHQsZSl7dGhpcy5fcHJldmVudFNjcm9sbGVyUm90YXRpbmdDZWxsRm9jdXModCxlKSx0aGlzLl9jb2x1bW5UcmVlJiYodGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJmaXJzdCIsMD09PWUsdCksdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJvZGQiLGUlMix0KSx0aGlzLl9hMTF5VXBkYXRlUm93Um93aW5kZXgodCxlKSx0aGlzLl9nZXRJdGVtKGUsdCkpfV9jb2x1bW5UcmVlQ2hhbmdlZCh0LGUpe3RoaXMuX3JlbmRlckNvbHVtblRyZWUodCksdGhpcy5yZWNhbGN1bGF0ZUNvbHVtbldpZHRocygpfV9yZW5kZXJDb2x1bW5UcmVlKHQpe2ZvcihBcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZm9yRWFjaCgoZT0+dGhpcy5fdXBkYXRlUm93KGUsdFt0Lmxlbmd0aC0xXSxudWxsLCExLCEwKSkpO3RoaXMuJC5oZWFkZXIuY2hpbGRyZW4ubGVuZ3RoPHQubGVuZ3RoOyl7Y29uc3QgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpO3Quc2V0QXR0cmlidXRlKCJwYXJ0Iiwicm93IiksdC5zZXRBdHRyaWJ1dGUoInJvbGUiLCJyb3ciKSx0aGlzLiQuaGVhZGVyLmFwcGVuZENoaWxkKHQpO2NvbnN0IGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTtlLnNldEF0dHJpYnV0ZSgicGFydCIsInJvdyIpLGUuc2V0QXR0cmlidXRlKCJyb2xlIiwicm93IiksdGhpcy4kLmZvb3Rlci5hcHBlbmRDaGlsZChlKX1mb3IoO3RoaXMuJC5oZWFkZXIuY2hpbGRyZW4ubGVuZ3RoPnQubGVuZ3RoOyl0aGlzLiQuaGVhZGVyLnJlbW92ZUNoaWxkKHRoaXMuJC5oZWFkZXIuZmlyc3RFbGVtZW50Q2hpbGQpLHRoaXMuJC5mb290ZXIucmVtb3ZlQ2hpbGQodGhpcy4kLmZvb3Rlci5maXJzdEVsZW1lbnRDaGlsZCk7QXJyYXkuZnJvbSh0aGlzLiQuaGVhZGVyLmNoaWxkcmVuKS5mb3JFYWNoKCgoZSxuKT0+dGhpcy5fdXBkYXRlUm93KGUsdFtuXSwiaGVhZGVyIixuPT09dC5sZW5ndGgtMSkpKSxBcnJheS5mcm9tKHRoaXMuJC5mb290ZXIuY2hpbGRyZW4pLmZvckVhY2goKChlLG4pPT50aGlzLl91cGRhdGVSb3coZSx0W3QubGVuZ3RoLTEtbl0sImZvb3RlciIsMD09PW4pKSksdGhpcy5fdXBkYXRlUm93KHRoaXMuJC5zaXplcix0W3QubGVuZ3RoLTFdKSx0aGlzLl9yZXNpemVIYW5kbGVyKCksdGhpcy5fZnJvemVuQ2VsbHNDaGFuZ2VkKCksdGhpcy5fdXBkYXRlRmlyc3RBbmRMYXN0Q29sdW1uKCksdGhpcy5fcmVzZXRLZXlib2FyZE5hdmlnYXRpb24oKSx0aGlzLl9hMTF5VXBkYXRlSGVhZGVyUm93cygpLHRoaXMuX2ExMXlVcGRhdGVGb290ZXJSb3dzKCksdGhpcy5fX3VwZGF0ZUZvb3RlclBvc2l0aW9uaW5nKCl9X191cGRhdGVGb290ZXJQb3NpdGlvbmluZygpe3RoaXMuX2ZpcmVmb3gmJih0aGlzLiQuaXRlbXMuc3R5bGUucGFkZGluZ0JvdHRvbT0wLHRoaXMuaGVpZ2h0QnlSb3dzfHwodGhpcy4kLml0ZW1zLnN0eWxlLnBhZGRpbmdCb3R0b209YCR7dGhpcy4kLmZvb3Rlci5vZmZzZXRIZWlnaHR9cHhgKSksdGhpcy5faW9zJiYhd2luZG93LkNTUy5zdXBwb3J0cygicG9zaXRpb24iLCJzdGlja3kiKSYmKHRoaXMuJC50YWJsZS5zdHlsZS5oZWlnaHQ9IiIsdGhpcy4kLnRhYmxlLnN0eWxlLm1pbkhlaWdodD0iMTAwJSIsdGhpcy4kLnRhYmxlLnN0eWxlLm1heEhlaWdodD0iMTAwJSIsc2V0VGltZW91dCgoKCk9PnRoaXMuJC50YWJsZS5zdHlsZS5oZWlnaHQ9YCR7dGhpcy4kLnNjcm9sbGVyLm9mZnNldEhlaWdodH1weGApKSl9X3VwZGF0ZUl0ZW0odCxlKXt0Ll9pdGVtPWU7Y29uc3Qgbj10aGlzLl9fZ2V0Um93TW9kZWwodCk7dGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJzZWxlY3RlZCIsbi5zZWxlY3RlZCx0KSx0aGlzLl9hMTF5VXBkYXRlUm93U2VsZWN0ZWQodCxuLnNlbGVjdGVkKSx0aGlzLl9hMTF5VXBkYXRlUm93TGV2ZWwodCxuLmxldmVsKSx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoImV4cGFuZGVkIixuLmV4cGFuZGVkLHQpLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgiZGV0YWlscy1vcGVuZWQiLHRoaXMuX2lzRGV0YWlsc09wZW5lZChlKSx0KSwodGhpcy5fcm93RGV0YWlsc1RlbXBsYXRlfHx0aGlzLnJvd0RldGFpbHNSZW5kZXJlcikmJnRoaXMuX3RvZ2dsZURldGFpbHNDZWxsKHQsZSksdGhpcy5fZ2VuZXJhdGVDZWxsQ2xhc3NOYW1lcyh0LG4pLHRoaXMuX2ZpbHRlckRyYWdBbmREcm9wKHQsbiksQXJyYXkuZnJvbSh0LmNoaWxkcmVuKS5mb3JFYWNoKCh0PT57aWYodC5fcmVuZGVyZXIpe2NvbnN0IGU9dC5fY29sdW1ufHx0aGlzO3QuX3JlbmRlcmVyLmNhbGwoZSx0Ll9jb250ZW50LGUsbil9ZWxzZSB0Ll9pbnN0YW5jZSYmKHQuX2luc3RhbmNlLl9fZGV0YWlsc09wZW5lZF9fPW4uZGV0YWlsc09wZW5lZCx0Ll9pbnN0YW5jZS5fX3NlbGVjdGVkX189bi5zZWxlY3RlZCx0Ll9pbnN0YW5jZS5fX2xldmVsX189bi5sZXZlbCx0Ll9pbnN0YW5jZS5fX2V4cGFuZGVkX189bi5leHBhbmRlZCx0Ll9pbnN0YW5jZS5zZXRQcm9wZXJ0aWVzKG4pKX0pKSx0aGlzLl9kZWJvdW5jZXJVcGRhdGVIZWlnaHRzPUVuLmRlYm91bmNlKHRoaXMuX2RlYm91bmNlclVwZGF0ZUhlaWdodHMsZ3QuYWZ0ZXIoMSksKCgpPT57dGhpcy5fdXBkYXRlTWV0cmljcygpLHRoaXMuX3Bvc2l0aW9uSXRlbXMoKSx0aGlzLl91cGRhdGVTY3JvbGxlclNpemUoKX0pKX1fcmVzaXplSGFuZGxlcigpe3RoaXMuX3VwZGF0ZURldGFpbHNDZWxsSGVpZ2h0cygpLHRoaXMuX2FjY2Vzc0lyb25MaXN0QVBJKHN1cGVyLl9yZXNpemVIYW5kbGVyLCEwKSx0aGlzLl91cGRhdGVTY3JvbGxlck1lYXN1cmVtZW50cygpLHRoaXMuX191cGRhdGVGb290ZXJQb3NpdGlvbmluZygpfV9vbkFuaW1hdGlvbkVuZCh0KXswPT09dC5hbmltYXRpb25OYW1lLmluZGV4T2YoInZhYWRpbi1ncmlkLWFwcGVhciIpJiYodGhpcy5fcmVuZGVyKCksdC5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLm5vdGlmeVJlc2l6ZSgpLHRoaXMuX19pdGVtc1JlY2VpdmVkKCkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgoKT0+e3RoaXMuX19zY3JvbGxUb1BlbmRpbmdJbmRleCgpLHRoaXMuJC50YWJsZS5zdHlsZS53ZWJraXRPdmVyZmxvd1Njcm9sbGluZz0idG91Y2gifSkpKX1fdG9nZ2xlQXR0cmlidXRlKHQsZSxuKXtuLmhhc0F0dHJpYnV0ZSh0KT09PSFlJiYoZT9uLnNldEF0dHJpYnV0ZSh0LCIiKTpuLnJlbW92ZUF0dHJpYnV0ZSh0KSl9X19nZXRSb3dNb2RlbCh0KXtyZXR1cm57aW5kZXg6dC5pbmRleCxpdGVtOnQuX2l0ZW0sbGV2ZWw6dGhpcy5fZ2V0SW5kZXhMZXZlbCh0LmluZGV4KSxleHBhbmRlZDp0aGlzLl9pc0V4cGFuZGVkKHQuX2l0ZW0pLHNlbGVjdGVkOnRoaXMuX2lzU2VsZWN0ZWQodC5faXRlbSksZGV0YWlsc09wZW5lZDohKCF0aGlzLl9yb3dEZXRhaWxzVGVtcGxhdGUmJiF0aGlzLnJvd0RldGFpbHNSZW5kZXJlcikmJnRoaXMuX2lzRGV0YWlsc09wZW5lZCh0Ll9pdGVtKX19cmVuZGVyKCl7dGhpcy5fY29sdW1uVHJlZSYmKHRoaXMuX2NvbHVtblRyZWUuZm9yRWFjaCgodD0+e3QuZm9yRWFjaCgodD0+dC5fcmVuZGVySGVhZGVyQW5kRm9vdGVyKCkpKX0pKSx0aGlzLl91cGRhdGUoKSl9bm90aWZ5UmVzaXplKCl7c3VwZXIubm90aWZ5UmVzaXplKCl9X2hlaWdodEJ5Um93c0NoYW5nZWQodCxlKXsodHx8ZSkmJnRoaXMubm90aWZ5UmVzaXplKCl9X19mb3JjZVJlZmxvdygpe3RoaXMuX2RlYm91bmNlckZvcmNlUmVmbG93PUVuLmRlYm91bmNlKHRoaXMuX2RlYm91bmNlckZvcmNlUmVmbG93LF90LCgoKT0+e3RoaXMuJC5zY3JvbGxlci5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIixzZXRUaW1lb3V0KCgoKT0+dGhpcy4kLnNjcm9sbGVyLnN0eWxlLm92ZXJmbG93PSIiKSl9KSl9fWN1c3RvbUVsZW1lbnRzLmRlZmluZShZTnQuaXMsWU50KTtsZXQgWE50PWNsYXNzIGV4dGVuZHMgeWV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3J1bj0iIn1fY3N2VXJsKHQsZSxuKXtyZXR1cm4gZT9WTyhuKHQsZSkse2Zvcm1hdDoiY3N2In0pOiIifV9qc29uVXJsKHQsZSxuKXtyZXR1cm4gZT9uKHQsZSk6IiJ9X2Nzdk5hbWUodCxlKXtyZXR1cm4gZT9gcnVuLSR7ZX0tdGFnLSR7dH0uY3N2YDoiIn1fanNvbk5hbWUodCxlKXtyZXR1cm4gZT9gcnVuLSR7ZX0tdGFnLSR7dH0uanNvbmA6IiJ9fTtYTnQudGVtcGxhdGU9X2VgCiAgICA8cGFwZXItZHJvcGRvd24tbWVudQogICAgICBuby1sYWJlbC1mbG9hdD0idHJ1ZSIKICAgICAgbGFiZWw9InJ1biB0byBkb3dubG9hZCIKICAgICAgc2VsZWN0ZWQtaXRlbS1sYWJlbD0ie3tfcnVufX0iCiAgICA+CiAgICAgIDxwYXBlci1saXN0Ym94IHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbcnVuc11dIj4KICAgICAgICAgIDxwYXBlci1pdGVtIG5vLWxhYmVsLWZsb2F0PSJ0cnVlIj5bW2l0ZW1dXTwvcGFwZXItaXRlbT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3J1bl1dIj4KICAgICAgPGEgZG93bmxvYWQ9IltbX2Nzdk5hbWUodGFnLCBfcnVuKV1dIiBocmVmPSJbW19jc3ZVcmwodGFnLCBfcnVuLCB1cmxGbildXSIKICAgICAgICA+Q1NWPC9hCiAgICAgID48IS0tCiAgICAgIC0tPjxhCiAgICAgICAgZG93bmxvYWQ9IltbX2pzb25OYW1lKHRhZywgX3J1bildXSIKICAgICAgICBocmVmPSJbW19qc29uVXJsKHRhZywgX3J1biwgdXJsRm4pXV0iCiAgICAgICAgPkpTT048L2EKICAgICAgPgogICAgPC90ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgIH0KICAgICAgcGFwZXItZHJvcGRvd24tbWVudSB7CiAgICAgICAgd2lkdGg6IDEwMHB4OwogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsOiB7CiAgICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgfQogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0OiB7CiAgICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgfQogICAgICB9CiAgICAgIGEgewogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICBtYXJnaW46IDAgMC4yZW07CiAgICAgIH0KICAgICAgcGFwZXItaW5wdXQgewogICAgICAgIGZvbnQtc2l6ZTogMjJweDsKICAgICAgfQogICAgPC9zdHlsZT4KICBgLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLFhOdC5wcm90b3R5cGUsIl9ydW4iLHZvaWQgMCksdChbbyh7dHlwZTpBcnJheX0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLFhOdC5wcm90b3R5cGUsInJ1bnMiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sWE50LnByb3RvdHlwZSwidGFnIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLFhOdC5wcm90b3R5cGUsInVybEZuIix2b2lkIDApLFhOdD10KFtpKCJ0Zi1kb3dubG9hZGVyIildLFhOdCksbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtsZXQgJE50PWNsYXNzIGV4dGVuZHMgeWV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29sb3JTY2FsZT1udWxsLHRoaXMuX2xvYWREYXRhQ2FsbGJhY2s9KHQsZSxuKT0+e2lmKG51bGw9PW4pcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiRmFpbGVkIHRvIGxvYWQgZGF0YSBmb3I6IixlKTtjb25zdCBpPW4ubWFwKCh0PT4oe3dhbGxfdGltZTpuZXcgRGF0ZSgxZTMqdFswXSksc3RlcDp0WzFdLHNjYWxhcjp0WzJdfSkpKSxyPXRoaXMuX2dldFNlcmllc05hbWVGcm9tRGF0dW0oZSk7dC5zZXRTZXJpZXNNZXRhZGF0YShyLGUpLHQuc2V0U2VyaWVzRGF0YShyLGkpfSx0aGlzLmdldERhdGFMb2FkVXJsPSh7dGFnOnQscnVuOmV9KT0+Z3IoKS5wbHVnaW5Sb3V0ZSgic2NhbGFycyIsIi9zY2FsYXJzIixuZXcgVVJMU2VhcmNoUGFyYW1zKHt0YWc6dCxydW46ZX0pKSx0aGlzLl9kb3dubG9hZFVybEZuPSh0LGUpPT50aGlzLmdldERhdGFMb2FkVXJsKHt0YWc6dCxydW46ZX0pLHRoaXMucmVxdWVzdERhdGE9KHQsZSxuKT0+dGhpcy5pbkNvbGFiP3RoaXMuX3JlcXVlc3REYXRhR2V0KHQsZSxuKTp0aGlzLl9yZXF1ZXN0RGF0YVBvc3QodCxlLG4pLHRoaXMuX3JlcXVlc3REYXRhR2V0PSh0LGUsbik9Pntjb25zdCBpPWdyKCkucGx1Z2luUm91dGUoInNjYWxhcnMiLCIvc2NhbGFycyIpO1Byb21pc2UuYWxsKHQubWFwKCh0PT57Y29uc3Qgbj1WTyhpLHt0YWc6dC50YWcscnVuOnQucnVufSk7cmV0dXJuIHRoaXMucmVxdWVzdE1hbmFnZXIucmVxdWVzdChuKS50aGVuKChuPT57ZSh7aXRlbTp0LGRhdGE6bn0pfSkpfSkpKS5maW5hbGx5KCgoKT0+e24oKX0pKX0sdGhpcy5fcmVxdWVzdERhdGFQb3N0PSh0LGUsbik9Pnt2YXIgaTtjb25zdCByPWdyKCkucGx1Z2luUm91dGUoInNjYWxhcnMiLCIvc2NhbGFyc19tdWx0aXJ1biIpLG89bmV3IE1hcDtmb3IoY29uc3R7dGFnOmUscnVuOm59b2YgdCl7bGV0IHQ9by5nZXQoZSk7bnVsbD09dCYmby5zZXQoZSx0PVtdKSx0LnB1c2gobil9Y29uc3QgYT1udWxsIT09KGk9dGhpcy5iYXRjaFNpemUpJiZ2b2lkIDAhPT1pP2k6NjQscz1bXTtmb3IoY29uc3RbdCxlXW9mIG8pZm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKz1hKXMucHVzaCh7dGFnOnQscnVuczplLnNsaWNlKG4sbithKX0pO1Byb21pc2UuYWxsKHMubWFwKCgoe3RhZzp0LHJ1bnM6bn0pPT50aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3Qocix7dGFnOnQscnVuczpufSkudGhlbigoaT0+e2Zvcihjb25zdCByIG9mIG4pe2NvbnN0IG49e3RhZzp0LHJ1bjpyfTtPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaSxyKT9lKHtpdGVtOm4sZGF0YTppW3JdfSk6ZSh7aXRlbTpuLGRhdGE6bnVsbH0pfX0pKSkpKS5maW5hbGx5KCgoKT0+e24oKX0pKX0sdGhpcy5fZ2V0RGF0YUxvYWROYW1lPXQ9PnRoaXMuX2dldFNlcmllc05hbWVGcm9tRGF0dW0odCksdGhpcy5fZXhwYW5kZWQ9ITEsdGhpcy5fdG9vbHRpcENvbHVtbnM9KCgpPT57Y29uc3QgdD1LX3Quc2xpY2UoKSxlPXQuZmluZEluZGV4KCh0PT4iTmFtZSI9PXQudGl0bGUpKTtyZXR1cm4gdC5zcGxpY2UoZSwxLHt0aXRsZToiTmFtZSIsZXZhbHVhdGU6dD0+e2NvbnN0IGU9dC5kYXRhc2V0Lm1ldGFkYXRhKCkubWV0YTtyZXR1cm4gdGhpcy5fZ2V0U2VyaWVzRGlzcGxheU5hbWVGcm9tRGF0dW0oZSl9fSksdH0pKCl9X2dldENoYXJ0RGF0YUxvYWRlcigpe3JldHVybiB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigidGYtbGluZS1jaGFydC1kYXRhLWxvYWRlciIpfXJlbG9hZCgpe3RoaXMuX2dldENoYXJ0RGF0YUxvYWRlcigpLnJlbG9hZCgpfXJlZHJhdygpe3RoaXMuX2dldENoYXJ0RGF0YUxvYWRlcigpLnJlZHJhdygpfV90b2dnbGVFeHBhbmRlZCh0KXt0aGlzLnNldCgiX2V4cGFuZGVkIiwhdGhpcy5fZXhwYW5kZWQpLHRoaXMucmVkcmF3KCl9X3RvZ2dsZUxvZ1NjYWxlKCl7dGhpcy5zZXQoIl9sb2dTY2FsZUFjdGl2ZSIsIXRoaXMuX2xvZ1NjYWxlQWN0aXZlKX1fcmVzZXREb21haW4oKXtjb25zdCB0PXRoaXMuX2dldENoYXJ0RGF0YUxvYWRlcigpO3QmJnQucmVzZXREb21haW4oKX1fdXBkYXRlRG93bmxvYWRMaW5rKCl7Y29uc3QgdD10aGlzLl9nZXRDaGFydERhdGFMb2FkZXIoKS5leHBvcnRBc1N2Z1N0cmluZygpO3RoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIjc3ZnTGluayIpLmhyZWY9YGRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsJHtidG9hKHQpfWB9X3J1bnNGcm9tRGF0YSh0KXtyZXR1cm4gdC5tYXAoKHQ9PnQucnVuKSl9X2dldERhdGFTZXJpZXMoKXtyZXR1cm4gdGhpcy5kYXRhVG9Mb2FkLm1hcCgodD0+dGhpcy5fZ2V0U2VyaWVzTmFtZUZyb21EYXR1bSh0KSkpfV9nZXRTZXJpZXNOYW1lRnJvbURhdHVtKHtydW46dCxleHBlcmltZW50OmU9e25hbWU6Il9kZWZhdWx0In19KXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoW2UubmFtZSx0XSl9X2dldFNlcmllc0Rpc3BsYXlOYW1lRnJvbURhdHVtKHQpe3JldHVybiB0LnJ1bn1fZ2V0Q29sb3JTY2FsZSgpe3JldHVybiBudWxsIT09dGhpcy5jb2xvclNjYWxlP3RoaXMuY29sb3JTY2FsZTp7c2NhbGU6dD0+e2NvbnN0WyxlXT1KU09OLnBhcnNlKHQpO3JldHVybiBBTyhlKX19fX07JE50LnRlbXBsYXRlPV9lYAogICAgPHRmLWNhcmQtaGVhZGluZwogICAgICB0YWc9IltbdGFnXV0iCiAgICAgIGRpc3BsYXktbmFtZT0iW1t0YWdNZXRhZGF0YS5kaXNwbGF5TmFtZV1dIgogICAgICBkZXNjcmlwdGlvbj0iW1t0YWdNZXRhZGF0YS5kZXNjcmlwdGlvbl1dIgogICAgPjwvdGYtY2FyZC1oZWFkaW5nPgogICAgPGRpdiBpZD0idGYtbGluZS1jaGFydC1kYXRhLWxvYWRlci1jb250YWluZXIiPgogICAgICA8dGYtbGluZS1jaGFydC1kYXRhLWxvYWRlcgogICAgICAgIGFjdGl2ZT0iW1thY3RpdmVdXSIKICAgICAgICBjb2xvci1zY2FsZT0iW1tfZ2V0Q29sb3JTY2FsZShjb2xvclNjYWxlKV1dIgogICAgICAgIGRhdGEtc2VyaWVzPSJbW19nZXREYXRhU2VyaWVzKGRhdGFUb0xvYWQuKildXSIKICAgICAgICBkYXRhLXRvLWxvYWQ9IltbZGF0YVRvTG9hZF1dIgogICAgICAgIGdldC1kYXRhLWxvYWQtbmFtZT0iW1tfZ2V0RGF0YUxvYWROYW1lXV0iCiAgICAgICAgZ2V0LWRhdGEtbG9hZC11cmw9IltbZ2V0RGF0YUxvYWRVcmxdXSIKICAgICAgICByZXF1ZXN0LWRhdGE9IltbcmVxdWVzdERhdGFdXSIKICAgICAgICBpZ25vcmUteS1vdXRsaWVycz0iW1tpZ25vcmVZT3V0bGllcnNdXSIKICAgICAgICBsb2FkLWRhdGEtY2FsbGJhY2s9IltbX2xvYWREYXRhQ2FsbGJhY2tdXSIKICAgICAgICBsb2FkLWtleT0iW1t0YWddXSIKICAgICAgICBsb2ctc2NhbGUtYWN0aXZlPSJbW19sb2dTY2FsZUFjdGl2ZV1dIgogICAgICAgIHJlcXVlc3QtbWFuYWdlcj0iW1tyZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgIHNtb290aGluZy1lbmFibGVkPSJbW3Ntb290aGluZ0VuYWJsZWRdXSIKICAgICAgICBzbW9vdGhpbmctd2VpZ2h0PSJbW3Ntb290aGluZ1dlaWdodF1dIgogICAgICAgIHRhZy1tZXRhZGF0YT0iW1t0YWdNZXRhZGF0YV1dIgogICAgICAgIHRvb2x0aXAtY29sdW1ucz0iW1tfdG9vbHRpcENvbHVtbnNdXSIKICAgICAgICB0b29sdGlwLXBvc2l0aW9uPSJhdXRvIgogICAgICAgIHRvb2x0aXAtc29ydGluZy1tZXRob2Q9IltbdG9vbHRpcFNvcnRpbmdNZXRob2RdXSIKICAgICAgICB4LXR5cGU9IltbeFR5cGVdXSIKICAgICAgPgogICAgICA8L3RmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXI+CiAgICA8L2Rpdj4KICAgIDxkaXYgaWQ9ImJ1dHRvbnMiPgogICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICBzZWxlY3RlZCQ9IltbX2V4cGFuZGVkXV0iCiAgICAgICAgaWNvbj0iZnVsbHNjcmVlbiIKICAgICAgICBvbi10YXA9Il90b2dnbGVFeHBhbmRlZCIKICAgICAgPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIHNlbGVjdGVkJD0iW1tfbG9nU2NhbGVBY3RpdmVdXSIKICAgICAgICBpY29uPSJsaW5lLXdlaWdodCIKICAgICAgICBvbi10YXA9Il90b2dnbGVMb2dTY2FsZSIKICAgICAgICB0aXRsZT0iVG9nZ2xlIHktYXhpcyBsb2cgc2NhbGUiCiAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICBpY29uPSJzZXR0aW5ncy1vdmVyc2NhbiIKICAgICAgICBvbi10YXA9Il9yZXNldERvbWFpbiIKICAgICAgICB0aXRsZT0iRml0IGRvbWFpbiB0byBkYXRhIgogICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3Nob3dEb3dubG9hZExpbmtzXV0iPgogICAgICAgIDxwYXBlci1tZW51LWJ1dHRvbiBvbi1wYXBlci1kcm9wZG93bi1vcGVuPSJfdXBkYXRlRG93bmxvYWRMaW5rIj4KICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgICAgICBjbGFzcz0iZHJvcGRvd24tdHJpZ2dlciIKICAgICAgICAgICAgc2xvdD0iZHJvcGRvd24tdHJpZ2dlciIKICAgICAgICAgICAgaWNvbj0iZmlsZS1kb3dubG9hZCIKICAgICAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgPHBhcGVyLWxpc3Rib3ggY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiPgogICAgICAgICAgICA8cGFwZXItaXRlbT4KICAgICAgICAgICAgICA8YSBpZD0ic3ZnTGluayIgZG93bmxvYWQ9IltbdGFnXV0uc3ZnIj4KICAgICAgICAgICAgICAgIERvd25sb2FkIEN1cnJlbnQgQ2hhcnQgYXMgU1ZHCiAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICA8L3BhcGVyLWl0ZW0+CiAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgPC9wYXBlci1tZW51LWJ1dHRvbj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHNwYW4gc3R5bGU9ImZsZXgtZ3JvdzogMSI+PC9zcGFuPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Iltbc2hvd0Rvd25sb2FkTGlua3NdXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iZG93bmxvYWQtbGlua3MiPgogICAgICAgICAgPHRmLWRvd25sb2FkZXIKICAgICAgICAgICAgcnVucz0iW1tfcnVuc0Zyb21EYXRhKGRhdGFUb0xvYWQpXV0iCiAgICAgICAgICAgIHRhZz0iW1t0YWddXSIKICAgICAgICAgICAgdXJsLWZuPSJbW19kb3dubG9hZFVybEZuXV0iCiAgICAgICAgICA+PC90Zi1kb3dubG9hZGVyPgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBtYXJnaW46IDVweDsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMzMwcHg7CiAgICAgIH0KCiAgICAgIDpob3N0KFtfZXhwYW5kZWRdKSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtfZXhwYW5kZWRdKSAjdGYtbGluZS1jaGFydC1kYXRhLWxvYWRlci1jb250YWluZXIgewogICAgICAgIGhlaWdodDogNDAwcHg7CiAgICAgIH0KCiAgICAgICN0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyLWNvbnRhaW5lciB7CiAgICAgICAgaGVpZ2h0OiAyMDBweDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgdGYtY2FyZC1oZWFkaW5nIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4OwogICAgICB9CgogICAgICAjYnV0dG9ucyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICB9CgogICAgICBwYXBlci1pY29uLWJ1dHRvbiB7CiAgICAgICAgY29sb3I6ICMyMTk2ZjM7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTAwJTsKICAgICAgICB3aWR0aDogMzJweDsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgcGFkZGluZzogNHB4OwogICAgICB9CgogICAgICBwYXBlci1pY29uLWJ1dHRvbltzZWxlY3RlZF0gewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXRiLXVpLWxpZ2h0LWFjY2VudCk7CiAgICAgIH0KCiAgICAgIC5kb3dubG9hZC1saW5rcyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgIH0KCiAgICAgIC5kb3dubG9hZC1saW5rcyBhIHsKICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIG1hcmdpbjogMnB4OwogICAgICB9CgogICAgICAuZG93bmxvYWQtbGlua3MgcGFwZXItZHJvcGRvd24tbWVudSB7CiAgICAgICAgd2lkdGg6IDEwMHB4OwogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsOiB7CiAgICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgfQogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0OiB7CiAgICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgfQogICAgICB9CgogICAgICBwYXBlci1tZW51LWJ1dHRvbiB7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQogICAgICBwYXBlci1pdGVtIGEgewogICAgICAgIGNvbG9yOiBpbmhlcml0OwogICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CiAgICA8L3N0eWxlPgogIGAsdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sJE50LnByb3RvdHlwZSwidGFnIix2b2lkIDApLHQoW28oe3R5cGU6QXJyYXl9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSwkTnQucHJvdG90eXBlLCJkYXRhVG9Mb2FkIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLCROdC5wcm90b3R5cGUsInhUeXBlIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sJE50LnByb3RvdHlwZSwiYWN0aXZlIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sJE50LnByb3RvdHlwZSwiaWdub3JlWU91dGxpZXJzIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLGhyKV0sJE50LnByb3RvdHlwZSwicmVxdWVzdE1hbmFnZXIiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSwkTnQucHJvdG90eXBlLCJzaG93RG93bkxpbmtzIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sJE50LnByb3RvdHlwZSwic21vb3RoaW5nRW5hYmxlZCIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSwkTnQucHJvdG90eXBlLCJzbW9vdGhpbmdXZWlnaHQiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sJE50LnByb3RvdHlwZSwidGFnTWV0YWRhdGEiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sJE50LnByb3RvdHlwZSwiY29sb3JTY2FsZSIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSwkTnQucHJvdG90eXBlLCJ0b29sdGlwU29ydGluZ01ldGhvZCIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSwkTnQucHJvdG90eXBlLCJiYXRjaFNpemUiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLCROdC5wcm90b3R5cGUsImluQ29sYWIiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sJE50LnByb3RvdHlwZSwiX2xvYWREYXRhQ2FsbGJhY2siLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pXSwkTnQucHJvdG90eXBlLCJnZXREYXRhTG9hZFVybCIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSwkTnQucHJvdG90eXBlLCJfZG93bmxvYWRVcmxGbiIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLCROdC5wcm90b3R5cGUsInJlcXVlc3REYXRhIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLCROdC5wcm90b3R5cGUsIl9nZXREYXRhTG9hZE5hbWUiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFuLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sJE50LnByb3RvdHlwZSwiX2V4cGFuZGVkIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sJE50LnByb3RvdHlwZSwiX2xvZ1NjYWxlQWN0aXZlIix2b2lkIDApLHQoW28oe3R5cGU6QXJyYXl9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSwkTnQucHJvdG90eXBlLCJfdG9vbHRpcENvbHVtbnMiLHZvaWQgMCksJE50PXQoW2koInRmLXNjYWxhci1jYXJkIildLCROdCk7bGV0IEtOdD1jbGFzcyBleHRlbmRzKChmdW5jdGlvbiB0KGUsbil7cmV0dXJuIFByKHt9LHRyKG4pLGUpfSkoW2dvXSx5ZSkpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnNlc3Npb25Hcm91cD1udWxsLHRoaXMuX3hUeXBlPXJfdC5TVEVQLHRoaXMuX25vTXVsdGlFeHBlcmltZW50cz0hMSx0aGlzLl9yZXF1ZXN0RGF0YT0odCxlLG4pPT57UHJvbWlzZS5hbGwodC5tYXAoKHQ9PnRoaXMuYmFja2VuZC5saXN0TWV0cmljRXZhbHMoe2V4cGVyaW1lbnROYW1lOnRoaXMuZXhwZXJpbWVudE5hbWUsc2Vzc2lvbk5hbWU6dC5ydW4sbWV0cmljTmFtZTp0LnRhZ30pLnRoZW4oKG49PntlKHtpdGVtOnQsZGF0YTpufSl9KSkpKSkuZmluYWxseSgoKCk9PntuKCl9KSl9LHRoaXMuX2NvbG9yU2NhbGU9e3NjYWxlOnQ9Pntjb25zdCBlPUpTT04ucGFyc2UodClbMV0sbj10aGlzLl9pbmRleE9mU2Vzc2lvbi5nZXQoZSk7cmV0dXJuIFNPWyh0aGlzLl9zZXNzaW9uR3JvdXBOYW1lSGFzaCtuKSVTTy5sZW5ndGhdfX19Y29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiaXJvbi1yZXNpemUiLHRoaXMucmVkcmF3LmJpbmQodGhpcykpfXJlZHJhdygpe3RoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCJ0Zi1zY2FsYXItY2FyZCIpLmZvckVhY2goKHQ9PnQucmVkcmF3KCkpKX1fc2Vzc2lvbkdyb3VwQ2hhbmdlZCgpe3RoaXMuc2Vzc2lvbkdyb3VwJiYwIT1PYmplY3Qua2V5cyh0aGlzLnNlc3Npb25Hcm91cCkubGVuZ3RoPyh0aGlzLl9pbmRleE9mU2Vzc2lvbj1uZXcgTWFwKHRoaXMuc2Vzc2lvbkdyb3VwLnNlc3Npb25zLm1hcCgoKHQsZSk9Plt0Lm5hbWUsZV0pKSksdGhpcy5fc2Vzc2lvbkdyb3VwTmFtZUhhc2g9U1B0KHRoaXMuc2Vzc2lvbkdyb3VwLm5hbWUpKToodGhpcy5faW5kZXhPZlNlc3Npb249bmV3IE1hcCx0aGlzLl9zZXNzaW9uR3JvdXBOYW1lSGFzaD0wKSx0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgidGYtc2NhbGFyLWNhcmQiKS5mb3JFYWNoKCh0PT57Y29uc3QgZT10LG49ZS5nZXQoInRhZyIpO2Uuc2V0KCJ0YWciLCIiKSxlLnNldCgidGFnIixuKX0pKX1faGF2ZU1ldHJpY3MoKXtyZXR1cm4gdGhpcy52aXNpYmxlU2NoZW1hJiZBcnJheS5pc0FycmF5KHRoaXMudmlzaWJsZVNjaGVtYS5tZXRyaWNJbmZvcykmJnRoaXMudmlzaWJsZVNjaGVtYS5tZXRyaWNJbmZvcy5sZW5ndGg+MH1faGF2ZU1ldHJpY3NBbmRTZXNzaW9uR3JvdXAoKXtyZXR1cm4gdGhpcy5zZXNzaW9uR3JvdXAmJnRoaXMuX2hhdmVNZXRyaWNzKCl9X2NvbXB1dGVTZXJpZXNGb3JTZXNzaW9uR3JvdXBNZXRyaWModCxlKXtyZXR1cm4gbnVsbD09PXR8fDA9PU9iamVjdC5rZXlzKHQpLmxlbmd0aHx8bnVsbD09PWU/W106dC5zZXNzaW9ucy5maWx0ZXIoKHQ9PnZvaWQgMCE9PXJQdCh0Lm1ldHJpY1ZhbHVlcyxlLm5hbWUpKSkubWFwKCh0PT4oe3RhZzplLm5hbWUscnVuOnQubmFtZX0pKSl9X2NvbXB1dGVUYWdNZXRhZGF0YSh0KXtyZXR1cm57ZGlzcGxheU5hbWU6Skx0KHQpLGRlc2NyaXB0aW9uOnQuZGVzY3JpcHRpb258fCIifX19O0tOdC50ZW1wbGF0ZT1fZWAKICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shc2Vzc2lvbkdyb3VwXV0iPgogICAgICA8ZGl2PgogICAgICAgIDxoMz5ObyBzZXNzaW9uIGdyb3VwIHNlbGVjdGVkPC9oMz4KICAgICAgICA8cD5QbGVhc2Ugc2VsZWN0IGEgc2Vzc2lvbiBncm91cCB0byBzZWUgaXRzIG1ldHJpYy1ncmFwaHMgaGVyZS48L3A+CiAgICAgIDwvZGl2PgogICAgPC90ZW1wbGF0ZT4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2hhdmVNZXRyaWNzKHZpc2libGVTY2hlbWEuKildXSI+CiAgICAgIDxkaXY+CiAgICAgICAgPGgzPk5vIG1ldHJpY3MgYXJlIGVuYWJsZWQ8L2gzPgogICAgICAgIDxwPlBsZWFzZSBlbmFibGUgc29tZSBtZXRyaWNzIHRvIHNlZSBjb250ZW50IGhlcmUuPC9wPgogICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CiAgICA8ZGl2IGNsYXNzPSJsYXlvdXQgaG9yaXpvbnRhbCB3cmFwIHNlc3Npb24tZ3JvdXAtZGV0YWlscyI+CiAgICAgIDx0ZW1wbGF0ZQogICAgICAgIGlzPSJkb20taWYiCiAgICAgICAgaWY9IltbX2hhdmVNZXRyaWNzQW5kU2Vzc2lvbkdyb3VwKHZpc2libGVTY2hlbWEuKiwgc2Vzc2lvbkdyb3VwKV1dIgogICAgICA+CiAgICAgICAgPHRlbXBsYXRlCiAgICAgICAgICBpcz0iZG9tLXJlcGVhdCIKICAgICAgICAgIGl0ZW1zPSJbW3Zpc2libGVTY2hlbWEubWV0cmljSW5mb3NdXSIKICAgICAgICAgIGFzPSJtZXRyaWNJbmZvIgogICAgICAgID4KICAgICAgICAgIDwhLS0gTm90ZSB0aGF0IHdlIGRvIG5vdCBwcm92aWRlIGEgcmVxdWVzdC1tYW5hZ2VyIGF0dHJpYnV0ZSBzaW5jZQogICAgICAgICAgICAgICB3ZSBwcm92aWRlIGEgZnVuY3Rpb24gaW4gcmVxdWVzdC1kYXRhIGZvciBjYWxsaW5nIHRoZSBiYWNrZW5kCiAgICAgICAgICAgICAgIHRvIGdldCB0aGUgbWV0cmljcyBkYXRhLgogICAgICAgICAgICAtLT4KICAgICAgICAgIDx0Zi1zY2FsYXItY2FyZAogICAgICAgICAgICBjbGFzcz0ic2NhbGFyLWNhcmQiCiAgICAgICAgICAgIGNvbG9yLXNjYWxlPSJbW19jb2xvclNjYWxlXV0iCiAgICAgICAgICAgIGRhdGEtdG8tbG9hZD0iW1tfY29tcHV0ZVNlcmllc0ZvclNlc3Npb25Hcm91cE1ldHJpYyhzZXNzaW9uR3JvdXAsIG1ldHJpY0luZm8pXV0iCiAgICAgICAgICAgIHRhZz0iW1ttZXRyaWNJbmZvLm5hbWUudGFnXV0iCiAgICAgICAgICAgIHRhZy1tZXRhZGF0YT0iW1tfY29tcHV0ZVRhZ01ldGFkYXRhKG1ldHJpY0luZm8pXV0iCiAgICAgICAgICAgIHgtdHlwZT0iW1tfeFR5cGVdXSIKICAgICAgICAgICAgbXVsdGktZXhwZXJpbWVudHM9IltbX25vTXVsdGlFeHBlcmltZW50c11dIgogICAgICAgICAgICByZXF1ZXN0LWRhdGE9IltbX3JlcXVlc3REYXRhXV0iCiAgICAgICAgICAgIGFjdGl2ZQogICAgICAgICAgPgogICAgICAgICAgPC90Zi1zY2FsYXItY2FyZD4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CiAgICA8IS0tICJpcm9uLWZsZXgiIGlzIG5lZWRlZCB0byB1c2UgdGhlIGxheW91dCBjbGFzc2VzIGluIHRoZSBkaXYgYWJvdmUgLS0+CiAgICA8c3R5bGUgaW5jbHVkZT0iaXJvbi1mbGV4Ij4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICA8L3N0eWxlPgogIGAsdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sS050LnByb3RvdHlwZSwiYmFja2VuZCIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxLTnQucHJvdG90eXBlLCJleHBlcmltZW50TmFtZSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxLTnQucHJvdG90eXBlLCJ2aXNpYmxlU2NoZW1hIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLEtOdC5wcm90b3R5cGUsInNlc3Npb25Hcm91cCIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxLTnQucHJvdG90eXBlLCJfeFR5cGUiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxLTnQucHJvdG90eXBlLCJfbm9NdWx0aUV4cGVyaW1lbnRzIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLEtOdC5wcm90b3R5cGUsIl9pbmRleE9mU2Vzc2lvbiIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxLTnQucHJvdG90eXBlLCJfc2Vzc2lvbkdyb3VwTmFtZUhhc2giLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pXSxLTnQucHJvdG90eXBlLCJfcmVxdWVzdERhdGEiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sS050LnByb3RvdHlwZSwiX2NvbG9yU2NhbGUiLHZvaWQgMCksdChbYSgic2Vzc2lvbkdyb3VwLioiKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEtOdC5wcm90b3R5cGUsIl9zZXNzaW9uR3JvdXBDaGFuZ2VkIixudWxsKSxLTnQ9dChbaSgidGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLWRldGFpbHMiKV0sS050KTtsZXQgWk50PWNsYXNzIGV4dGVuZHModHIobmwoeWUpKSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2hwYXJhbU5hbWU9Wkx0LHRoaXMuX21ldHJpY05hbWU9Skx0fV92aXNpYmxlU2NoZW1hT3JTZXNzaW9uR3JvdXBzQ2hhbmdlZCgpe2NvbnN0IHQ9dGhpcy4kLnNlc3Npb25Hcm91cHNUYWJsZS5nZXQoImRldGFpbHNPcGVuZWRJdGVtcyIpO3RoaXMuJC5zZXNzaW9uR3JvdXBzVGFibGUuc2V0KCJkZXRhaWxzT3BlbmVkSXRlbXMiLFtdKSx6aSgpO2NvbnN0IGU9bmV3IE1hcDt0aGlzLnNlc3Npb25Hcm91cHMuZm9yRWFjaCgodD0+e2Uuc2V0KHQubmFtZSx0KX0pKSx0aGlzLiQuc2Vzc2lvbkdyb3Vwc1RhYmxlLnNldCgiZGV0YWlsc09wZW5lZEl0ZW1zIix0Lm1hcCgodD0+ZS5nZXQodC5uYW1lKSkpLmZpbHRlcihCb29sZWFuKSl9X3Nlc3Npb25Hcm91cEhQYXJhbSh0LGUpe3JldHVybiBudWxsIT10JiYwIT1PYmplY3Qua2V5cyh0KS5sZW5ndGgmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LmhwYXJhbXMsZSk/X1B0KHQuaHBhcmFtc1tlXSk6IiJ9X3Nlc3Npb25Hcm91cE1ldHJpYyh0LGUpe2lmKG51bGw9PXR8fDA9PU9iamVjdC5rZXlzKHQpLmxlbmd0aClyZXR1cm4iIjtmb3IobGV0IG49MDtuPHQubWV0cmljVmFsdWVzLmxlbmd0aDsrK24pe2xldCBpPXQubWV0cmljVmFsdWVzW25dO2lmKGkubmFtZS5ncm91cD09PWUuZ3JvdXAmJmkubmFtZS50YWc9PWUudGFnKXJldHVybiBfUHQoaS52YWx1ZSl9cmV0dXJuIiJ9X3Jvd051bWJlcih0KXtyZXR1cm4gdCsxfX07Wk50LnRlbXBsYXRlPV9lYAogICAgPHZhYWRpbi1ncmlkCiAgICAgIGNsYXNzPSJzZXNzaW9uLWdyb3VwLXRhYmxlIgogICAgICBpZD0ic2Vzc2lvbkdyb3Vwc1RhYmxlIgogICAgICBjb2x1bW4tcmVvcmRlcmluZy1hbGxvd2VkPSIiCiAgICAgIGl0ZW1zPSJbW3Nlc3Npb25Hcm91cHNdXSIKICAgID4KICAgICAgPHZhYWRpbi1ncmlkLWNvbHVtbiBmbGV4LWdyb3c9IjAiIHdpZHRoPSIxMGVtIiByZXNpemFibGU9IiI+CiAgICAgICAgPHRlbXBsYXRlIGNsYXNzPSJoZWFkZXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0idGFibGUtaGVhZGVyIHRhYmxlLWNlbGwiPlRyaWFsIElEPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1jZWxsIj5bW2l0ZW0ubmFtZV1dPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC92YWFkaW4tZ3JpZC1jb2x1bW4+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tlbmFibGVTaG93TWV0cmljc11dIj4KICAgICAgICA8dmFhZGluLWdyaWQtY29sdW1uIGZsZXgtZ3Jvdz0iMCIgYXV0b1dpZHRoPSIiIHJlc2l6YWJsZT0iIj4KICAgICAgICAgIDx0ZW1wbGF0ZSBjbGFzcz0iaGVhZGVyIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idGFibGUtaGVhZGVyIHRhYmxlLWNlbGwiPlNob3cgTWV0cmljczwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94IGNsYXNzPSJ0YWJsZS1jZWxsIiBjaGVja2VkPSJ7e2RldGFpbHNPcGVuZWR9fSI+CiAgICAgICAgICAgIDwvcGFwZXItY2hlY2tib3g+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvdmFhZGluLWdyaWQtY29sdW1uPgogICAgICA8L3RlbXBsYXRlPgogICAgICA8dGVtcGxhdGUKICAgICAgICBpcz0iZG9tLXJlcGVhdCIKICAgICAgICBpdGVtcz0iW1t2aXNpYmxlU2NoZW1hLmhwYXJhbUluZm9zXV0iCiAgICAgICAgYXM9ImhwYXJhbUluZm8iCiAgICAgICAgaW5kZXgtYXM9ImhwYXJhbUluZGV4IgogICAgICA+CiAgICAgICAgPHZhYWRpbi1ncmlkLWNvbHVtbiBmbGV4LWdyb3c9IjIiIHdpZHRoPSIxMGVtIiByZXNpemFibGU9IiI+CiAgICAgICAgICA8dGVtcGxhdGUgY2xhc3M9ImhlYWRlciI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhYmxlLWhlYWRlciB0YWJsZS1jZWxsIj4KICAgICAgICAgICAgICBbW19ocGFyYW1OYW1lKGhwYXJhbUluZm8pXV0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1jZWxsIj4KICAgICAgICAgICAgICBbW19zZXNzaW9uR3JvdXBIUGFyYW0oaXRlbSwgaHBhcmFtSW5mby5uYW1lKV1dCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3ZhYWRpbi1ncmlkLWNvbHVtbj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHRlbXBsYXRlCiAgICAgICAgaXM9ImRvbS1yZXBlYXQiCiAgICAgICAgaXRlbXM9Int7dmlzaWJsZVNjaGVtYS5tZXRyaWNJbmZvc319IgogICAgICAgIGFzPSJtZXRyaWNJbmZvIgogICAgICAgIGluZGV4LWFzPSJtZXRyaWNJbmRleCIKICAgICAgPgogICAgICAgIDx2YWFkaW4tZ3JpZC1jb2x1bW4gZmxleC1ncm93PSIyIiB3aWR0aD0iMTBlbSIgcmVzaXphYmxlPSIiPgogICAgICAgICAgPHRlbXBsYXRlIGNsYXNzPSJoZWFkZXIiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1oZWFkZXIgdGFibGUtY2VsbCI+CiAgICAgICAgICAgICAgW1tfbWV0cmljTmFtZShtZXRyaWNJbmZvKV1dCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idGFibGUtY2VsbCI+CiAgICAgICAgICAgICAgW1tfc2Vzc2lvbkdyb3VwTWV0cmljKGl0ZW0sIG1ldHJpY0luZm8ubmFtZSldXQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC92YWFkaW4tZ3JpZC1jb2x1bW4+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZSBjbGFzcz0icm93LWRldGFpbHMiPgogICAgICAgIDx0Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtZGV0YWlscwogICAgICAgICAgYmFja2VuZD0iW1tiYWNrZW5kXV0iCiAgICAgICAgICBleHBlcmltZW50LW5hbWU9IltbZXhwZXJpbWVudE5hbWVdXSIKICAgICAgICAgIHNlc3Npb24tZ3JvdXA9IltbaXRlbV1dIgogICAgICAgICAgdmlzaWJsZS1zY2hlbWE9IltbdmlzaWJsZVNjaGVtYV1dIgogICAgICAgICAgY2xhc3M9InNlc3Npb24tZ3JvdXAtZGV0YWlscyIKICAgICAgICA+CiAgICAgICAgPC90Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtZGV0YWlscz4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvdmFhZGluLWdyaWQ+CgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lOwogICAgICB9CgogICAgICA6aG9zdCguZGFyay1tb2RlKSB7CiAgICAgICAgLS1sdW1vLWJhc2UtY29sb3I6ICMzMDMwMzA7CiAgICAgICAgLS1sdW1vLWJvZHktdGV4dC1jb2xvcjogI2ZmZjsKICAgICAgfQoKICAgICAgOmhvc3QoLmRhcmstbW9kZSkgdmFhZGluLWdyaWQgewogICAgICAgIC0tX2x1bW8tZ3JpZC1zZWNvbmRhcnktYm9yZGVyLWNvbG9yOiAjNTA1MDUwOwogICAgICB9CgogICAgICAudGFibGUtY2VsbCB7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CiAgICAgIC50YWJsZS1oZWFkZXIgewogICAgICAgIC8qIGxpbmUtYnJlYWsgb3ZlcmZsb3dpbmcgY29sdW1uIGhlYWRlcnMgKi8KICAgICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOwogICAgICAgIG92ZXJmbG93LXdyYXA6IGJyZWFrLXdvcmQ7CiAgICAgIH0KICAgICAgLnNlc3Npb24tZ3JvdXAtdGFibGUgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQogICAgICAuc2Vzc2lvbi1ncm91cC1kZXRhaWxzIHsKICAgICAgICBoZWlnaHQ6IDM2MHB4OwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYCx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxaTnQucHJvdG90eXBlLCJ2aXNpYmxlU2NoZW1hIix2b2lkIDApLHQoW28oe3R5cGU6QXJyYXl9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSxaTnQucHJvdG90eXBlLCJzZXNzaW9uR3JvdXBzIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sWk50LnByb3RvdHlwZSwiZW5hYmxlU2hvd01ldHJpY3MiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sWk50LnByb3RvdHlwZSwiYmFja2VuZCIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxaTnQucHJvdG90eXBlLCJleHBlcmltZW50TmFtZSIsdm9pZCAwKSx0KFthKCJ2aXNpYmxlU2NoZW1hLioiLCJzZXNzaW9uR3JvdXBzLioiKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFpOdC5wcm90b3R5cGUsIl92aXNpYmxlU2NoZW1hT3JTZXNzaW9uR3JvdXBzQ2hhbmdlZCIsbnVsbCksWk50PXQoW2koInRmLWhwYXJhbXMtdGFibGUtdmlldyIpXSxaTnQpO2xldCBKTnQ9Y2xhc3MgZXh0ZW5kcyB5ZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5zZXNzaW9uR3JvdXA9bnVsbCx0aGlzLnZpc2libGVTY2hlbWE9bnVsbH1fcHJvcGVydGllc0FyZVBvcHVsYXRlZCh0LGUpe3JldHVybiBudWxsIT10JiZudWxsIT1lfV9zaW5nbGV0b25TZXNzaW9uR3JvdXBzKHQpe3JldHVybiBudWxsPT10P1tdOlt0XX19O2Z1bmN0aW9uIFFOdCh0LGUsbil7ZnVuY3Rpb24gaSgpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm5bMSwyXTtjb25zdFtlLG5dPWtsKHQpO3JldHVybiBlIT09bj9bZSxuXTplPjA/Wy41KmUsMS41KmVdOmU8MD9bMS41KmUsLjUqZV06Wy0xLDFdfWlmKCJMSU5FQVIiPT09bilyZXR1cm4gRE0oKS5kb21haW4oaSgpKS5yYW5nZShbZSwwXSk7aWYoIkxPRyI9PT1uKXtjb25zdCBuPWkoKTtyZXR1cm4gblswXTw9MCYmblsxXT49MD9RTnQodCxlLCJMSU5FQVIiKTpxTSgpLmRvbWFpbihuKS5yYW5nZShbZSwwXSl9aWYoIlFVQU5USUxFIj09PW4pe2NvbnN0IG49MjAsaT1SbChuKS5tYXAoKHQ9PmUtdCplLyhuLTEpKSk7cmV0dXJuIDA9PT10Lmxlbmd0aCYmKHQ9WzFdKSxlRSgpLmRvbWFpbih3ZS51bmlxKHQpKS5yYW5nZShpKX1pZigiTk9OX05VTUVSSUMiPT09bilyZXR1cm4gTU0oKS5kb21haW4od2UudW5pcSh0LnNvcnQoKSkpLnJhbmdlKFtlLDBdKS5wYWRkaW5nKC4xKTt0aHJvdyBSYW5nZUVycm9yKCJVbmtub3duIHNjYWxlOiAiK24pfXZhciB0SXQsZUl0O0pOdC50ZW1wbGF0ZT1fZWAKICAgIDwhLS0gSWYgc2Vzc2lvbkdyb3VwIG9yIHZpc2libGVTY2hlbWEgYXJlIG5vdCBwb3B1bGF0ZWQsIGRvIG5vdCBkaXNwbGF5CiAgICAgICAgIGFueXRoaW5nLgogICAgICAtLT4KICAgIDx0ZW1wbGF0ZQogICAgICBpcz0iZG9tLWlmIgogICAgICBpZj0iW1tfcHJvcGVydGllc0FyZVBvcHVsYXRlZCh2aXNpYmxlU2NoZW1hLCBzZXNzaW9uR3JvdXApXV0iCiAgICA+CiAgICAgIDwhLS0gRGlzcGxheSBvbmUgcm93IHdpdGhvdXQgYSAic2hvdy1tZXRyaWNzIiBjb2x1bW4gLS0+CiAgICAgIDx0Zi1ocGFyYW1zLXRhYmxlLXZpZXcKICAgICAgICB2aXNpYmxlLXNjaGVtYT0iW1t2aXNpYmxlU2NoZW1hXV0iCiAgICAgICAgc2Vzc2lvbi1ncm91cHM9IltbX3NpbmdsZXRvblNlc3Npb25Hcm91cHMoc2Vzc2lvbkdyb3VwKV1dIgogICAgICA+CiAgICAgIDwvdGYtaHBhcmFtcy10YWJsZS12aWV3PgogICAgPC90ZW1wbGF0ZT4KICAgIDx0ZW1wbGF0ZQogICAgICBpcz0iZG9tLWlmIgogICAgICBpZj0iW1shX3Byb3BlcnRpZXNBcmVQb3B1bGF0ZWQodmlzaWJsZVNjaGVtYSwgc2Vzc2lvbkdyb3VwKV1dIgogICAgPgogICAgICA8ZGl2PkNsaWNrIG9yIGhvdmVyIG92ZXIgYSBzZXNzaW9uIGdyb3VwIHRvIGRpc3BsYXkgaXRzIHZhbHVlcyBoZXJlLjwvZGl2PgogICAgPC90ZW1wbGF0ZT4KCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgPC9zdHlsZT4KICBgLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLEpOdC5wcm90b3R5cGUsInNlc3Npb25Hcm91cCIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxKTnQucHJvdG90eXBlLCJ2aXNpYmxlU2NoZW1hIix2b2lkIDApLEpOdD10KFtpKCJ0Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtdmFsdWVzIildLEpOdCksKGZ1bmN0aW9uKHQpe3QuTElORUFSPSJMSU5FQVIiLHQuTE9HPSJMT0ciLHQuUVVBTlRJTEU9IlFVQU5USUxFIix0Lk5PTl9OVU1FUklDPSJOT05fTlVNRVJJQyJ9KSh0SXR8fCh0SXQ9e30pKTtjbGFzcyBuSXR7aXNQYXNzaW5nKHQpe3JldHVybiEwfX1jbGFzcyBpSXR7Y29uc3RydWN0b3IodCxlLG4saSl7dGhpcy5fbG93ZXI9dCx0aGlzLl91cHBlcj1lLHRoaXMuX2xvd2VyT3Blbj1uLHRoaXMuX3VwcGVyT3Blbj1pfWlzUGFzc2luZyh0KXtjb25zdCBlPXQ7cmV0dXJuIHRoaXMuX2JlZm9yZSh0aGlzLl9sb3dlcixlLCF0aGlzLl9sb3dlck9wZW4pJiZ0aGlzLl9iZWZvcmUoZSx0aGlzLl91cHBlciwhdGhpcy5fdXBwZXJPcGVuKX1fYmVmb3JlKHQsZSxuKXtyZXR1cm4gbj90PD1lOnQ8ZX19Y2xhc3Mgckl0e2NvbnN0cnVjdG9yKHQpe3RoaXMuX2RvbWFpblNldD10fWlzUGFzc2luZyh0KXtyZXR1cm4tMSE9PXRoaXMuX2RvbWFpblNldC5maW5kSW5kZXgoKGU9PmU9PT10KSl9fWNsYXNzIG9JdHtjb25zdHJ1Y3Rvcih0LGUsbixpKXt0aGlzLl9zdmdQcm9wcz10LHRoaXMuX3NjaGVtYT1lLHRoaXMuX2ludGVyYWN0aW9uTWFuYWdlcj1uLHRoaXMuX2NvbEluZGV4PWksdGhpcy5faXNEaXNwbGF5ZWQ9ITEsdGhpcy5feVNjYWxlPW51bGwsdGhpcy5fc2NhbGVUeXBlPW51bGwsdGhpcy5zZXRCcnVzaFNlbGVjdGlvbihudWxsKX1jb2xJbmRleCgpe3JldHVybiB0aGlzLl9jb2xJbmRleH15U2NhbGUoKXtyZXR1cm4gdGhpcy5feVNjYWxlfXNjYWxlVHlwZSgpe3JldHVybiB0aGlzLl9zY2FsZVR5cGV9YnJ1c2hTZWxlY3Rpb24oKXtyZXR1cm4gdGhpcy5fYnJ1c2hTZWxlY3Rpb259aXNEaXNwbGF5ZWQoKXtyZXR1cm4gdGhpcy5faXNEaXNwbGF5ZWR9c2V0QnJ1c2hTZWxlY3Rpb24odCl7dGhpcy5fYnJ1c2hTZWxlY3Rpb249dCx0aGlzLl9icnVzaEZpbHRlcj10aGlzLl9idWlsZEJydXNoRmlsdGVyKHRoaXMuYnJ1c2hTZWxlY3Rpb24oKSx0aGlzLnNjYWxlVHlwZSgpLHRoaXMueVNjYWxlKCkpfXNldERvbWFpbkFuZFNjYWxlKHQsZSl7dGhpcy5fc2NhbGVUeXBlPWUsdGhpcy5feVNjYWxlPVFOdCh0LnNsaWNlKCksdGhpcy5fc3ZnUHJvcHMuaGVpZ2h0LHRoaXMuc2NhbGVUeXBlKCkpLHRoaXMuX2JydXNoRmlsdGVyPXRoaXMuX2J1aWxkQnJ1c2hGaWx0ZXIodGhpcy5icnVzaFNlbGVjdGlvbigpLHRoaXMuc2NhbGVUeXBlKCksdGhpcy55U2NhbGUoKSl9YnJ1c2hGaWx0ZXIoKXtyZXR1cm4gdGhpcy5fYnJ1c2hGaWx0ZXJ9dXBkYXRlRE9NKHQpe2xldCBlPW9jKHRoaXMueVNjYWxlKCkpO3RoaXMuc2NhbGVUeXBlKCk9PT10SXQuUVVBTlRJTEUmJihlPWUudGlja1ZhbHVlcyh0aGlzLnlTY2FsZSgpLnF1YW50aWxlcygpKS50aWNrRm9ybWF0KGZ5KCItLjZnIikpKTtjb25zdCBuPXd1KHQpO24uc2VsZWN0QWxsKCJnIikucmVtb3ZlKCksbi5hcHBlbmQoImciKS5jbGFzc2VkKCJheGlzIiwhMCkuY2FsbChlKS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKCJheGlzLXRpdGxlIiwhMCkuc3R5bGUoImN1cnNvciIsIm1vdmUiKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJ5IiwtOSkudGV4dCgodD0+UUx0KHRoaXMuX3NjaGVtYSx0KSkpLG4uY2FsbCh5aCgpLm9uKCJzdGFydCIsKCgpPT57dC5zZXRBdHRyaWJ1dGUoImlzLWRyYWdnaW5nIiwiIiksdGhpcy5faW50ZXJhY3Rpb25NYW5hZ2VyLm9uRHJhZ1N0YXJ0KHRoaXMuY29sSW5kZXgoKSl9KSkub24oImRyYWciLCgoKT0+dGhpcy5faW50ZXJhY3Rpb25NYW5hZ2VyLm9uRHJhZyhjdS54KSkpLm9uKCJlbmQiLCgoKT0+e3RoaXMuX2ludGVyYWN0aW9uTWFuYWdlci5vbkRyYWdFbmQoKSx0LnJlbW92ZUF0dHJpYnV0ZSgiaXMtZHJhZ2dpbmciKX0pKSk7Y29uc3QgaT1LbSgpLmV4dGVudChbWy04LDBdLFs4LHRoaXMuX3N2Z1Byb3BzLmhlaWdodCsxXV0pLm9uKCJzdGFydCIsKCgpPT57c0l0KGN1KSYmKHQuc2V0QXR0cmlidXRlKCJpcy1icnVzaGluZyIsIiIpLHRoaXMuX2ludGVyYWN0aW9uTWFuYWdlci5vbkJydXNoQ2hhbmdlZCh0aGlzLmNvbEluZGV4KCksY3Uuc2VsZWN0aW9uKSl9KSkub24oImJydXNoIiwoKCk9PntzSXQoY3UpJiZ0aGlzLl9pbnRlcmFjdGlvbk1hbmFnZXIub25CcnVzaENoYW5nZWQodGhpcy5jb2xJbmRleCgpLGN1LnNlbGVjdGlvbil9KSkub24oImVuZCIsKCgpPT57c0l0KGN1KSYmKHRoaXMuX2ludGVyYWN0aW9uTWFuYWdlci5vbkJydXNoQ2hhbmdlZCh0aGlzLmNvbEluZGV4KCksY3Uuc2VsZWN0aW9uKSx0LnJlbW92ZUF0dHJpYnV0ZSgiaXMtYnJ1c2hpbmciKSl9KSkscj13dSh0KS5hcHBlbmQoImciKS5jbGFzc2VkKCJicnVzaCIsITApO3IuY2FsbChpKSxpLm1vdmUocix0aGlzLmJydXNoU2VsZWN0aW9uKCkpfXNldERpc3BsYXllZCh0KXt0aGlzLl9pc0Rpc3BsYXllZD10fV9idWlsZEJydXNoRmlsdGVyKHQsZSxuKXtpZihudWxsPT09dClyZXR1cm4gbmV3IG5JdDtpZihudWxsPT09ZSlyZXR1cm4gY29uc29sZS5lcnJvcigiU2NhbGUgdHlwZSBpcyBudWxsLCBidXQgYnJ1c2hTZWxlY3Rpb24gaXNuJ3Q6ICIsdCksbmV3IG5JdDtzd2l0Y2goZSl7Y2FzZSB0SXQuTElORUFSOmNhc2UgdEl0LkxPRzp7Y29uc3RbZSxpXT0oZnVuY3Rpb24gaSh0LGUsbil7cmV0dXJuW3QuaW52ZXJ0KGUpLHQuaW52ZXJ0KG4pXS5zb3J0KCgodCxlKT0+dC1lKSl9KShuLHRbMF0sdFsxXSk7cmV0dXJuIG5ldyBpSXQoZSxpLCExLCExKX1jYXNlIHRJdC5RVUFOVElMRTp7Y29uc3RbZSxpXT0oZnVuY3Rpb24gcih0LGUsbil7Y29uc3QgaT10LnJhbmdlKCkscj1pLmZpbHRlcigodD0+ZTw9dCYmdDw9bikpLm1hcCgoZT0+e2NvbnN0IG49dC5pbnZlcnRFeHRlbnQoZSk7cmV0dXJuIGU9PT1pW2kubGVuZ3RoLTFdP1tuWzBdLG5bMV0rMV06bn0pKTtyZXR1cm4gMD09ci5sZW5ndGg/WzAsMF06a2woV2wocikpfSkobix0WzBdLHRbMV0pO3JldHVybiBuZXcgaUl0KGUsaSwhMSwhMCl9Y2FzZSB0SXQuTk9OX05VTUVSSUM6cmV0dXJuIG5ldyBySXQoKGZ1bmN0aW9uIG8odCxlLG4pe3JldHVybiB0LmRvbWFpbigpLmZpbHRlcigoaT0+e2NvbnN0IHI9dChpKTtyZXR1cm4gZTw9ciYmcjw9bn0pKX0pKG4sdFswXSx0WzFdKSl9cmV0dXJuIGNvbnNvbGUuZXJyb3IoIlVua25vd24gc2NhbGUgdHlwZTogIixlKSxuZXcgbkl0fX1jbGFzcyBhSXR7Y29uc3RydWN0b3IodCxlLG4pe3RoaXMuX3N2Z1Byb3BzPXQsdGhpcy5fc2NoZW1hPWUsdGhpcy5fYXhlcz10aGlzLl9jcmVhdGVBeGVzKG4pLHRoaXMuX3N0YXRpb25hcnlBeGVzUG9zaXRpb25zPU1NKCkucmFuZ2UoWzEsdGhpcy5fc3ZnUHJvcHMud2lkdGgtMV0pLnBhZGRpbmcoLjUpLHRoaXMuX2RyYWdnZWRBeGlzPW51bGwsdGhpcy5fc3ZnUHJvcHMuc3ZnRy5zZWxlY3RBbGwoImcuYXhpcy1wYXJlbnQiKS5yZW1vdmUoKSx0aGlzLl9wYXJlbnRzU2VsPXRoaXMuX3N2Z1Byb3BzLnN2Z0cuc2VsZWN0QWxsKCIuYXhpcy1wYXJlbnQiKX11cGRhdGVBeGVzKHQsZSl7Y29uc29sZS5hc3NlcnQoIXRoaXMuaXNBeGlzRHJhZ2dpbmcoKSk7Y29uc3Qgbj1uZXcgU2V0O3QuY29sdW1ucy5mb3JFYWNoKCh0PT57Y29uc3QgaT10LmFic29sdXRlSW5kZXg7bGV0IHI9dGhpcy5fYXhlc1tpXTtyLnNldERpc3BsYXllZCghMCk7Y29uc3Qgbz1lLm1hcCgodD0+c1B0KHRoaXMuX3NjaGVtYSx0LGkpKSk7ci5zZXREb21haW5BbmRTY2FsZShvLHQuc2NhbGUpLG4uYWRkKGkpfSkpLHRoaXMuX2F4ZXMuZm9yRWFjaCgodD0+e24uaGFzKHQuY29sSW5kZXgoKSl8fHQuc2V0RGlzcGxheWVkKCExKX0pKSx0aGlzLl91cGRhdGVTdGF0aW9uYXJ5QXhlc1Bvc2l0aW9ucyhuKSx0aGlzLl9wYXJlbnRzU2VsPXRoaXMuX3BhcmVudHNTZWwuZGF0YShBcnJheS5mcm9tKG4pLCh0PT50KSksdGhpcy5fcGFyZW50c1NlbC5leGl0KCkucmVtb3ZlKCksdGhpcy5fcGFyZW50c1NlbD10aGlzLl9wYXJlbnRzU2VsLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiYXhpcy1wYXJlbnQiLCEwKS5tZXJnZSh0aGlzLl9wYXJlbnRzU2VsKTtjb25zdCBpPXRoaXM7dGhpcy5fcGFyZW50c1NlbC5jYWxsKCh0PT50aGlzLl91cGRhdGVBeGVzUG9zaXRpb25zSW5ET00odCkpKS5lYWNoKChmdW5jdGlvbih0KXtpLl9heGVzW3RdLnVwZGF0ZURPTSh0aGlzKX0pKX1tYXBWaXNpYmxlQXhlcyh0KXtyZXR1cm4gdGhpcy5fc3RhdGlvbmFyeUF4ZXNQb3NpdGlvbnMuZG9tYWluKCkubWFwKChlPT50KHRoaXMuZ2V0QXhpc1Bvc2l0aW9uKGUpLHRoaXMuX2F4ZXNbZV0pKSl9YWxsVmlzaWJsZUF4ZXNTYXRpc2Z5KHQpe3JldHVybiB0aGlzLl9zdGF0aW9uYXJ5QXhlc1Bvc2l0aW9ucy5kb21haW4oKS5ldmVyeSgoZT0+dCh0aGlzLmdldEF4aXNQb3NpdGlvbihlKSx0aGlzLl9heGVzW2VdKSkpfWdldEF4aXNGb3JDb2xJbmRleCh0KXtyZXR1cm4gdGhpcy5fYXhlc1t0XX1kcmFnU3RhcnQodCl7Y29uc29sZS5hc3NlcnQoIXRoaXMuaXNBeGlzRHJhZ2dpbmcoKSksY29uc29sZS5hc3NlcnQodGhpcy5fYXhlc1t0XS5pc0Rpc3BsYXllZCgpKSx0aGlzLl9kcmFnZ2VkQXhpcz10aGlzLl9heGVzW3RdLHRoaXMuX2RyYWdnZWRBeGlzUG9zaXRpb249dGhpcy5fc3RhdGlvbmFyeUF4ZXNQb3NpdGlvbnModCl9ZHJhZyh0KXt0PU1hdGgubWluKE1hdGgubWF4KHQsMCksdGhpcy5fc3ZnUHJvcHMud2lkdGgpLHRoaXMuX2RyYWdnZWRBeGlzUG9zaXRpb249dDtsZXQgZT10aGlzLl9zdGF0aW9uYXJ5QXhlc1Bvc2l0aW9ucy5kb21haW4oKTtlLnNvcnQoKCh0LGUpPT50aGlzLmdldEF4aXNQb3NpdGlvbih0KS10aGlzLmdldEF4aXNQb3NpdGlvbihlKSkpLHRoaXMuX3N0YXRpb25hcnlBeGVzUG9zaXRpb25zLmRvbWFpbihlKSx0aGlzLl91cGRhdGVBeGVzUG9zaXRpb25zSW5ET00odGhpcy5fcGFyZW50c1NlbCl9ZHJhZ0VuZCh0KXtjb25zb2xlLmFzc2VydCh0aGlzLmlzQXhpc0RyYWdnaW5nKCkpLHRoaXMuX2RyYWdnZWRBeGlzUG9zaXRpb249bnVsbCx0aGlzLl9kcmFnZ2VkQXhpcz1udWxsLHRoaXMuX3VwZGF0ZUF4ZXNQb3NpdGlvbnNJbkRPTSh0aGlzLl9wYXJlbnRzU2VsLnRyYW5zaXRpb24oKS5kdXJhdGlvbih0KSl9aXNBeGlzRHJhZ2dpbmcoKXtyZXR1cm4gbnVsbCE9PXRoaXMuX2RyYWdnZWRBeGlzfWdldEF4aXNQb3NpdGlvbih0KXtyZXR1cm4gbnVsbCE9PXRoaXMuX2RyYWdnZWRBeGlzJiZ0aGlzLl9kcmFnZ2VkQXhpcy5jb2xJbmRleCgpPT09dD90aGlzLl9kcmFnZ2VkQXhpc1Bvc2l0aW9uOnRoaXMuX3N0YXRpb25hcnlBeGVzUG9zaXRpb25zKHQpfV91cGRhdGVTdGF0aW9uYXJ5QXhlc1Bvc2l0aW9ucyh0KXtjb25zdCBlPXRoaXMuX3N0YXRpb25hcnlBeGVzUG9zaXRpb25zLmRvbWFpbigpLmZpbHRlcigoZT0+dC5oYXMoZSkpKSxuPUFycmF5LmZyb20obmV3IFNldChbLi4uZSwuLi5BcnJheS5mcm9tKHQpXSkpO3RoaXMuX3N0YXRpb25hcnlBeGVzUG9zaXRpb25zLmRvbWFpbihuKX1fdXBkYXRlQXhlc1Bvc2l0aW9uc0luRE9NKHQpe3QuYXR0cigidHJhbnNmb3JtIiwodD0+eFB0KHRoaXMuZ2V0QXhpc1Bvc2l0aW9uKHQpKSkpfV9jcmVhdGVBeGVzKHQpe3JldHVybiBSbChuUHQodGhpcy5fc2NoZW1hKSkubWFwKChlPT5uZXcgb0l0KHRoaXMuX3N2Z1Byb3BzLHRoaXMuX3NjaGVtYSx0LGUpKSl9fWZ1bmN0aW9uIHNJdCh0KXtyZXR1cm4gbnVsbCE9PXQuc291cmNlRXZlbnR9IShmdW5jdGlvbih0KXt0W3QuRk9SRUdST1VORD0wXT0iRk9SRUdST1VORCIsdFt0LkJBQ0tHUk9VTkQ9MV09IkJBQ0tHUk9VTkQifSkoZUl0fHwoZUl0PXt9KSk7Y2xhc3MgbEl0e2NvbnN0cnVjdG9yKHQpe3ZvaWQgMD09PXQmJih0PWFoKG51bGwpKSxjb25zb2xlLmFzc2VydCh0LnNpemUoKTw9MSksdGhpcy5fc2Vzc2lvbkdyb3VwU2VsPXR9c2Vzc2lvbkdyb3VwKCl7cmV0dXJuIDE9PT10aGlzLl9zZXNzaW9uR3JvdXBTZWwuc2l6ZSgpP3RoaXMuX3Nlc3Npb25Hcm91cFNlbC5kYXR1bSgpOm51bGx9aXNOdWxsKCl7cmV0dXJuIG51bGw9PT10aGlzLnNlc3Npb25Hcm91cCgpfXNlbGVjdGlvbigpe3JldHVybiB0aGlzLl9zZXNzaW9uR3JvdXBTZWx9ZXF1YWxzVG8odCl7cmV0dXJuIHRoaXMuaXNOdWxsKCk/dC5pc051bGwoKTohdC5pc051bGwoKSYmdC5zZXNzaW9uR3JvdXAoKS5uYW1lPT10aGlzLnNlc3Npb25Hcm91cCgpLm5hbWV9fWNsYXNzIGNJdHtjb25zdHJ1Y3Rvcih0LGUsbil7dGhpcy5fc3ZnUHJvcHM9dCx0aGlzLl9zY2hlbWE9ZSx0aGlzLl9heGVzQ29sbGVjdGlvbj1uLHRoaXMuX3Nlc3Npb25Hcm91cHM9W10sdGhpcy5fc3ZnUHJvcHMuc3ZnRy5zZWxlY3RBbGwoImcuYmFja2dyb3VuZCIpLnJlbW92ZSgpLHRoaXMuX3N2Z1Byb3BzLnN2Z0cuc2VsZWN0QWxsKCJnLmZvcmVncm91bmQiKS5yZW1vdmUoKSx0aGlzLl9iZ1BhdGhzU2VsPXRoaXMuX3N2Z1Byb3BzLnN2Z0cuYXBwZW5kKCJnIikuY2xhc3NlZCgiYmFja2dyb3VuZCIsITApLnNlbGVjdEFsbCgicGF0aCIpLHRoaXMuX2ZnUGF0aHNTZWw9dGhpcy5fc3ZnUHJvcHMuc3ZnRy5hcHBlbmQoImciKS5jbGFzc2VkKCJmb3JlZ3JvdW5kIiwhMCkuc2VsZWN0QWxsKCJwYXRoIiksdGhpcy5fdXBkYXRlVmlzaWJsZUZnUGF0aHNTZWwoKSx0aGlzLl9wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGU9bmV3IGxJdCx0aGlzLl9zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZT1uZXcgbEl0LHRoaXMuX2QzbGluZT1YaygpLmN1cnZlKFdrKX1nZXRTZXNzaW9uR3JvdXBIYW5kbGUodCl7cmV0dXJuIG51bGw9PXQ/bmV3IGxJdDpuZXcgbEl0KHRoaXMuX2ZnUGF0aHNTZWwuZmlsdGVyKChlPT5lLm5hbWU9PT10Lm5hbWUpKSl9aGlkZUJhY2tncm91bmRMaW5lcygpe3RoaXMuX2JnUGF0aHNTZWwuYXR0cigidmlzaWJpbGl0eSIsImhpZGRlbiIpfXNob3dCYWNrZ3JvdW5kTGluZXMoKXt0aGlzLl9iZ1BhdGhzU2VsLmF0dHIoInZpc2liaWxpdHkiLG51bGwpfXBlYWtlZFNlc3Npb25Hcm91cEhhbmRsZSgpe3JldHVybiB0aGlzLl9wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGV9c2VsZWN0ZWRTZXNzaW9uR3JvdXBIYW5kbGUoKXtyZXR1cm4gdGhpcy5fc2VsZWN0ZWRTZXNzaW9uR3JvdXBIYW5kbGV9cmVjb21wdXRlQ29udHJvbFBvaW50cyh0LGU9MCl7KHQ9PT1lSXQuRk9SRUdST1VORD90aGlzLl9mZ1BhdGhzU2VsOnRoaXMuX2JnUGF0aHNTZWwpLnRyYW5zaXRpb24oKS5kdXJhdGlvbihlKS5hdHRyKCJkIiwodD0+dGhpcy5fcGF0aERBdHRyaWJ1dGUodCkpKSx0PT09ZUl0LkZPUkVHUk9VTkQmJndpbmRvdy5zZXRUaW1lb3V0KCgoKT0+e2NvbnN0IHQ9dGhpczt0aGlzLl9mZ1BhdGhzU2VsLmVhY2goKGZ1bmN0aW9uKGUpe3QuX3NldENvbnRyb2xQb2ludHNQcm9wZXJ0eSh0aGlzLGUpfSkpfSkpfXJlY29tcHV0ZUZvcmVncm91bmRMaW5lc1Zpc2liaWxpdHkoKXt0aGlzLl9mZ1BhdGhzU2VsLmNsYXNzZWQoImludmlzaWJsZS1wYXRoIiwodD0+IXRoaXMuX2F4ZXNDb2xsZWN0aW9uLmFsbFZpc2libGVBeGVzU2F0aXNmeSgoKGUsbik9Pm4uYnJ1c2hGaWx0ZXIoKS5pc1Bhc3Npbmcoc1B0KHRoaXMuX3NjaGVtYSx0LG4uY29sSW5kZXgoKSkpKSkpKSx0aGlzLl91cGRhdGVWaXNpYmxlRmdQYXRoc1NlbCgpfXNldEZvcmVncm91bmRMaW5lc0NvbG9yKHQsZSxuKXtjb25zdCBpPXRoaXMuX2NyZWF0ZUxpbmVDb2xvckZ1bmN0aW9uKHQsZSxuKTt0aGlzLl9mZ1BhdGhzU2VsLmF0dHIoInN0cm9rZSIsaSl9cmVkcmF3KHQsZSxuLGkpe2NvbnN0IHI9dGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlLnNlc3Npb25Hcm91cCgpLG89dGhpcy5fc2VsZWN0ZWRTZXNzaW9uR3JvdXBIYW5kbGUuc2Vzc2lvbkdyb3VwKCk7dGhpcy5fc2Vzc2lvbkdyb3Vwcz10LHRoaXMuX2ZnUGF0aHNTZWw9dGhpcy5fcmVjb21wdXRlUGF0aFNlbGVjdGlvbih0aGlzLl9mZ1BhdGhzU2VsKSx0aGlzLl9iZ1BhdGhzU2VsPXRoaXMuX3JlY29tcHV0ZVBhdGhTZWxlY3Rpb24odGhpcy5fYmdQYXRoc1NlbCksdGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlPXRoaXMuZ2V0U2Vzc2lvbkdyb3VwSGFuZGxlKHIpLHRoaXMuX3NlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlPXRoaXMuZ2V0U2Vzc2lvbkdyb3VwSGFuZGxlKG8pLHRoaXMucmVjb21wdXRlQ29udHJvbFBvaW50cyhlSXQuRk9SRUdST1VORCksdGhpcy5yZWNvbXB1dGVDb250cm9sUG9pbnRzKGVJdC5CQUNLR1JPVU5EKSx0aGlzLnJlY29tcHV0ZUZvcmVncm91bmRMaW5lc1Zpc2liaWxpdHkoKSx0aGlzLnNldEZvcmVncm91bmRMaW5lc0NvbG9yKGUsbixpKX11cGRhdGVQZWFrZWRTZXNzaW9uR3JvdXAodCl7dGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlLnNlbGVjdGlvbigpLmNsYXNzZWQoInBlYWtlZC1wYXRoIiwhMSksdGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlPXQsdGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlLnNlbGVjdGlvbigpLmNsYXNzZWQoInBlYWtlZC1wYXRoIiwhMCl9Y2xlYXJQZWFrZWRTZXNzaW9uR3JvdXAoKXt0aGlzLnVwZGF0ZVBlYWtlZFNlc3Npb25Hcm91cChuZXcgbEl0KX11cGRhdGVTZWxlY3RlZFNlc3Npb25Hcm91cCh0KXt0aGlzLl9zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZS5zZWxlY3Rpb24oKS5jbGFzc2VkKCJzZWxlY3RlZC1wYXRoIiwhMSksdGhpcy5fc2VsZWN0ZWRTZXNzaW9uR3JvdXBIYW5kbGU9dCx0aGlzLl9zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZS5zZWxlY3Rpb24oKS5jbGFzc2VkKCJzZWxlY3RlZC1wYXRoIiwhMCl9ZmluZENsb3Nlc3RTZXNzaW9uR3JvdXAodCxlKXtjb25zdCBuPXRoaXMuX2F4ZXNDb2xsZWN0aW9uLm1hcFZpc2libGVBeGVzKCgodCxlKT0+dCkpLGk9KGZ1bmN0aW9uIHIodCxlLG4saSl7aWYoZS5sZW5ndGg8MilyZXR1cm4gY29uc29sZS5lcnJvcigiTGVzcyB0aGFuIHR3byBheGVzIGluIHBhcmFsbGVsIGNvb3JkaW5hdGVzIHBsb3QuIiksbnVsbDtjb25zdCByPW5bMF0sbz1uWzFdO2lmKHI8PWVbMF18fHI+PWVbZS5sZW5ndGgtMV0pcmV0dXJuIG51bGw7Y29uc3QgYT13ZS5zb3J0ZWRJbmRleChlLHIpO2NvbnNvbGUuYXNzZXJ0KGE+MCksY29uc29sZS5hc3NlcnQoYTxlLmxlbmd0aCk7Y29uc3Qgcz1hLTE7bGV0IGw9bnVsbCxjPW51bGw7cmV0dXJuIHQuZm9yRWFjaCgodD0+e2NvbnN0IGU9KGZ1bmN0aW9uIG4odCxlLGksYSl7Y29uc3Qgcz10LWksbD1lLWEsYz1yLWksdT1vLWEsaD0ocypjK2wqdSkvKHMqcytsKmwpO3JldHVybiBoPD0wP3lQdChjLHUpOmg+PTE/eVB0KHQtcixlLW8pOnlQdChjLWgqcyx1LWgqbCl9KSh0LmNvbnRyb2xQb2ludHNbc11bMF0sdC5jb250cm9sUG9pbnRzW3NdWzFdLHQuY29udHJvbFBvaW50c1thXVswXSx0LmNvbnRyb2xQb2ludHNbYV1bMV0pO2U+aXx8KG51bGw9PT1sfHxlPGwpJiYobD1lLGM9dCl9KSksY30pKHRoaXMuX3Zpc2libGVGZ1BhdGhzU2VsLm5vZGVzKCksbixbdCxlXSwxMDApO3JldHVybiBudWxsPT09aT9uZXcgbEl0Om5ldyBsSXQod3UoaSkpfV9jcmVhdGVMaW5lQ29sb3JGdW5jdGlvbih0LGUsbil7aWYobnVsbD09PXQpcmV0dXJuKCk9PiJyZWQiO2NvbnN0IGk9RE0oKS5kb21haW4obFB0KHRoaXMuX3NjaGVtYSx0aGlzLl9zZXNzaW9uR3JvdXBzLHQpKS5yYW5nZShbZSxuXSkuaW50ZXJwb2xhdGUobHApO3JldHVybiBlPT5pKHNQdCh0aGlzLl9zY2hlbWEsZSx0KSl9X3JlY29tcHV0ZVBhdGhTZWxlY3Rpb24odCl7cmV0dXJuKHQ9dC5kYXRhKHRoaXMuX3Nlc3Npb25Hcm91cHMsKHQ9PnQubmFtZSkpKS5leGl0KCkucmVtb3ZlKCksdC5lbnRlcigpLmFwcGVuZCgicGF0aCIpLm1lcmdlKHQpfV9zZXRDb250cm9sUG9pbnRzUHJvcGVydHkodCxlKXt0LmNvbnRyb2xQb2ludHM9dGhpcy5fY29tcHV0ZUNvbnRyb2xQb2ludHMoZSl9X2NvbXB1dGVDb250cm9sUG9pbnRzKHQpe3JldHVybiB0aGlzLl9heGVzQ29sbGVjdGlvbi5tYXBWaXNpYmxlQXhlcygoKGUsbik9PltlLG4ueVNjYWxlKCkoc1B0KHRoaXMuX3NjaGVtYSx0LG4uY29sSW5kZXgoKSkpXSkpfV9wYXRoREF0dHJpYnV0ZSh0KXtyZXR1cm4gdGhpcy5fZDNsaW5lKHRoaXMuX2NvbXB1dGVDb250cm9sUG9pbnRzKHQpKX1fdXBkYXRlVmlzaWJsZUZnUGF0aHNTZWwoKXt0aGlzLl92aXNpYmxlRmdQYXRoc1NlbD10aGlzLl9mZ1BhdGhzU2VsLmZpbHRlcigiOm5vdCguaW52aXNpYmxlLXBhdGgpIil9fWNsYXNzIHVJdHtjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuc3ZnPXd1KHQpO2NvbnN0IG49MTAwKmUrMTArMTA7dGhpcy5zdmcuYXR0cigidmlld0JveCIsYDAgMCAke259IDI0MGApLHRoaXMuc3ZnLmF0dHIoInByZXNlcnZlQXNwZWN0UmF0aW8iLCJ4TWlkWU1pZCIpLHRoaXMuc3ZnLnN0eWxlKCJtaW4td2lkdGgiLG4rInB4IiksdGhpcy5zdmcuc3R5bGUoIm1pbi1oZWlnaHQiLCIyNDBweCIpLHRoaXMud2lkdGg9bi0xMC0xMCx0aGlzLmhlaWdodD0yMDAsdGhpcy5zdmdHPXRoaXMuc3ZnLmFwcGVuZCgiZyIpLmF0dHIoInRyYW5zZm9ybSIseFB0KDEwLDMwKSl9fWNsYXNzIGhJdHtjb25zdHJ1Y3Rvcih0LGUsbixpKXt0aGlzLl9zdmdQcm9wcz10LHRoaXMuX3NjaGVtYT1lLHRoaXMuX3BlYWtlZFNlc3Npb25Hcm91cENoYW5nZWRDQj1uLHRoaXMuX3NlbGVjdGVkU2Vzc2lvbkdyb3VwQ2hhbmdlZENCPWksdGhpcy5fYXhlc0NvbGxlY3Rpb249bmV3IGFJdCh0LGUsdGhpcyksdGhpcy5fbGluZXNDb2xsZWN0aW9uPW5ldyBjSXQodCxlLHRoaXMuX2F4ZXNDb2xsZWN0aW9uKSx0aGlzLl9zdmdQcm9wcy5zdmcub24oImNsaWNrIiwoKCk9PnRoaXMub25DbGljaygpKSkub24oIm1vdXNlbW92ZSBtb3VzZWVudGVyIiwoKCk9Pntjb25zdFt0LGVdPW9oKHRoaXMuX3N2Z1Byb3BzLnN2Z0cubm9kZSgpKTt0aGlzLm9uTW91c2VNb3ZlZCh0LGUpfSkpLm9uKCJtb3VzZWxlYXZlIiwoKCk9PnRoaXMub25Nb3VzZUxlYXZlKCkpKX1vbkRyYWdTdGFydCh0KXt0aGlzLl9heGVzQ29sbGVjdGlvbi5kcmFnU3RhcnQodCksdGhpcy5fbGluZXNDb2xsZWN0aW9uLmhpZGVCYWNrZ3JvdW5kTGluZXMoKX1vbkRyYWcodCl7dGhpcy5fYXhlc0NvbGxlY3Rpb24uZHJhZyh0KSx0aGlzLl9saW5lc0NvbGxlY3Rpb24ucmVjb21wdXRlQ29udHJvbFBvaW50cyhlSXQuRk9SRUdST1VORCl9b25EcmFnRW5kKCl7dGhpcy5fYXhlc0NvbGxlY3Rpb24uZHJhZ0VuZCg1MDApLHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5yZWNvbXB1dGVDb250cm9sUG9pbnRzKGVJdC5GT1JFR1JPVU5ELDUwMCksd2luZG93LnNldFRpbWVvdXQoKCgpPT57dGhpcy5fbGluZXNDb2xsZWN0aW9uLnJlY29tcHV0ZUNvbnRyb2xQb2ludHMoZUl0LkJBQ0tHUk9VTkQpLHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5zaG93QmFja2dyb3VuZExpbmVzKCl9KSw1MDApfW9uQnJ1c2hDaGFuZ2VkKHQsZSl7dGhpcy5fYXhlc0NvbGxlY3Rpb24uZ2V0QXhpc0ZvckNvbEluZGV4KHQpLnNldEJydXNoU2VsZWN0aW9uKGUpLHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5yZWNvbXB1dGVGb3JlZ3JvdW5kTGluZXNWaXNpYmlsaXR5KCl9b25Nb3VzZU1vdmVkKHQsZSl7dGhpcy5fbGluZXNDb2xsZWN0aW9uLnVwZGF0ZVBlYWtlZFNlc3Npb25Hcm91cCh0aGlzLl9saW5lc0NvbGxlY3Rpb24uZmluZENsb3Nlc3RTZXNzaW9uR3JvdXAodCxlKSksdGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwQ2hhbmdlZENCKHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGUoKS5zZXNzaW9uR3JvdXAoKSl9b25Nb3VzZUxlYXZlKCl7dGhpcy5fbGluZXNDb2xsZWN0aW9uLnBlYWtlZFNlc3Npb25Hcm91cEhhbmRsZSgpLmlzTnVsbCgpfHwodGhpcy5fbGluZXNDb2xsZWN0aW9uLmNsZWFyUGVha2VkU2Vzc2lvbkdyb3VwKCksdGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwQ2hhbmdlZENCKG51bGwpKX1vbkNsaWNrKCl7dGhpcy5fbGluZXNDb2xsZWN0aW9uLnBlYWtlZFNlc3Npb25Hcm91cEhhbmRsZSgpLnNlc3Npb25Hcm91cCgpPT09dGhpcy5fbGluZXNDb2xsZWN0aW9uLnNlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlKCkuc2Vzc2lvbkdyb3VwKCk/dGhpcy5fbGluZXNDb2xsZWN0aW9uLnVwZGF0ZVNlbGVjdGVkU2Vzc2lvbkdyb3VwKG5ldyBsSXQpOnRoaXMuX2xpbmVzQ29sbGVjdGlvbi51cGRhdGVTZWxlY3RlZFNlc3Npb25Hcm91cCh0aGlzLl9saW5lc0NvbGxlY3Rpb24ucGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlKCkpLHRoaXMuX3NlbGVjdGVkU2Vzc2lvbkdyb3VwQ2hhbmdlZENCKHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZSgpLnNlc3Npb25Hcm91cCgpKX1vbk9wdGlvbnNPclNlc3Npb25Hcm91cHNDaGFuZ2VkKHQsZSl7dGhpcy5fYXhlc0NvbGxlY3Rpb24udXBkYXRlQXhlcyh0LGUpO2NvbnN0IG49dGhpcy5fbGluZXNDb2xsZWN0aW9uLnBlYWtlZFNlc3Npb25Hcm91cEhhbmRsZSgpLGk9dGhpcy5fbGluZXNDb2xsZWN0aW9uLnNlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlKCk7dGhpcy5fbGluZXNDb2xsZWN0aW9uLnJlZHJhdyhlLHZvaWQgMCE9PXQuY29sb3JCeUNvbHVtbkluZGV4P3QuY29sdW1uc1t0LmNvbG9yQnlDb2x1bW5JbmRleF0uYWJzb2x1dGVJbmRleDpudWxsLHQubWluQ29sb3IsdC5tYXhDb2xvciksbi5lcXVhbHNUbyh0aGlzLl9saW5lc0NvbGxlY3Rpb24ucGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlKCkpfHx0aGlzLl9wZWFrZWRTZXNzaW9uR3JvdXBDaGFuZ2VkQ0IodGhpcy5fbGluZXNDb2xsZWN0aW9uLnBlYWtlZFNlc3Npb25Hcm91cEhhbmRsZSgpLnNlc3Npb25Hcm91cCgpKSxpLmVxdWFsc1RvKHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZSgpKXx8dGhpcy5fc2VsZWN0ZWRTZXNzaW9uR3JvdXBDaGFuZ2VkQ0IodGhpcy5fbGluZXNDb2xsZWN0aW9uLnNlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlKCkuc2Vzc2lvbkdyb3VwKCkpfXNjaGVtYSgpe3JldHVybiB0aGlzLl9zY2hlbWF9fWxldCBkSXQ9Y2xhc3MgZXh0ZW5kcyh0cihubCh5ZSkpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5zZWxlY3RlZFNlc3Npb25Hcm91cD1udWxsLHRoaXMuY2xvc2VzdFNlc3Npb25Hcm91cD1udWxsLHRoaXMucmVkcmF3Q291bnQ9MH1fb3B0aW9uc09yU2Vzc2lvbkdyb3Vwc0NoYW5nZWQoKXt2YXIgdDtpZighdGhpcy5vcHRpb25zKXJldHVybjtjb25zdHtjb25maWd1cmF0aW9uOmV9PW51bGwhPT0odD10aGlzLl9wcmV2T3B0aW9ucykmJnZvaWQgMCE9PXQ/dDp7fSx7Y29uZmlndXJhdGlvbjpufT10aGlzLm9wdGlvbnM7aWYodm9pZCAwPT09dGhpcy5faW50ZXJhY3Rpb25NYW5hZ2VyfHwhd2UuaXNFcXVhbChlLnNjaGVtYSxuLnNjaGVtYSl8fCF3ZS5pc0VxdWFsKGUuY29sdW1uc1Zpc2liaWxpdHksbi5jb2x1bW5zVmlzaWJpbGl0eSkpe3d1KHRoaXMuJC5zdmcpLnNlbGVjdEFsbCgiKiIpLnJlbW92ZSgpO2NvbnN0IHQ9bmV3IHVJdCh0aGlzLiQuc3ZnLG4uY29sdW1uc1Zpc2liaWxpdHkuZmlsdGVyKEJvb2xlYW4pLmxlbmd0aCk7dGhpcy5zY29wZVN1YnRyZWUodGhpcy4kLnN2ZywhMCksdGhpcy5faW50ZXJhY3Rpb25NYW5hZ2VyPW5ldyBoSXQodCxuLnNjaGVtYSwodD0+dGhpcy5jbG9zZXN0U2Vzc2lvbkdyb3VwQ2hhbmdlZCh0KSksKHQ9PnRoaXMuc2VsZWN0ZWRTZXNzaW9uR3JvdXBDaGFuZ2VkKHQpKSl9dGhpcy5fY29tcHV0ZVZhbGlkU2Vzc2lvbkdyb3VwcygpLHRoaXMuX2ludGVyYWN0aW9uTWFuYWdlci5vbk9wdGlvbnNPclNlc3Npb25Hcm91cHNDaGFuZ2VkKHRoaXMub3B0aW9ucyx0aGlzLl92YWxpZFNlc3Npb25Hcm91cHMpLHRoaXMucmVkcmF3Q291bnQrKyx0aGlzLl9wcmV2T3B0aW9ucz10aGlzLm9wdGlvbnN9Y2xvc2VzdFNlc3Npb25Hcm91cENoYW5nZWQodCl7dGhpcy5jbG9zZXN0U2Vzc2lvbkdyb3VwPXR9c2VsZWN0ZWRTZXNzaW9uR3JvdXBDaGFuZ2VkKHQpe3RoaXMuc2VsZWN0ZWRTZXNzaW9uR3JvdXA9dH1fY29tcHV0ZVZhbGlkU2Vzc2lvbkdyb3Vwcygpe2NvbnN0IHQ9TVB0O2lmKHZvaWQgMD09PXRoaXMuc2Vzc2lvbkdyb3VwcylyZXR1cm4gdm9pZCh0aGlzLl92YWxpZFNlc3Npb25Hcm91cHM9dm9pZCAwKTtjb25zdCBlPXRoaXMub3B0aW9ucy5jb25maWd1cmF0aW9uLnNjaGVtYTt0aGlzLl92YWxpZFNlc3Npb25Hcm91cHM9dGhpcy5zZXNzaW9uR3JvdXBzLmZpbHRlcigobj0+e2ZvcihsZXQgaT0wO2k8dC5udW1Db2x1bW5zKGUpOysraSlpZih0aGlzLm9wdGlvbnMuY29uZmlndXJhdGlvbi5jb2x1bW5zVmlzaWJpbGl0eVtpXSYmdm9pZCAwPT09dC5jb2x1bW5WYWx1ZUJ5SW5kZXgoZSxuLGkpKXJldHVybiExO3JldHVybiEwfSkpfX07ZEl0LnRlbXBsYXRlPV9lYAogICAgPGRpdiBpZD0iY29udGFpbmVyIj4KICAgICAgPHN2ZyBpZD0ic3ZnIj48L3N2Zz4KICAgIDwvZGl2PgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgLS10Zi1ocGFyYW1zLXBhcmFsbGVsLWNvb3Jkcy1wbG90LWF4aXMtc2hhZG93OiAwIDFweCAwICNmZmYsCiAgICAgICAgICAxcHggMCAwICNmZmYsIDAgLTFweCAwICNmZmYsIC0xcHggMCAwICNmZmY7CiAgICAgIH0KICAgICAgOmhvc3QoLmRhcmstbW9kZSkgewogICAgICAgIC0tdGYtaHBhcmFtcy1wYXJhbGxlbC1jb29yZHMtcGxvdC1heGlzLXNoYWRvdzogMCAxcHggMCAjMDAwLAogICAgICAgICAgMXB4IDAgMCAjMDAwLCAwIC0xcHggMCAjMDAwLCAtMXB4IDAgMCAjMDAwOwogICAgICB9CiAgICAgIHN2ZyB7CiAgICAgICAgZm9udDogMTBweCBzYW5zLXNlcmlmOwogICAgICB9CgogICAgICAuYmFja2dyb3VuZCBwYXRoIHsKICAgICAgICBmaWxsOiBub25lOwogICAgICAgIHN0cm9rZTogI2RkZDsKICAgICAgICBzaGFwZS1yZW5kZXJpbmc6IGNyaXNwRWRnZXM7CiAgICAgIH0KCiAgICAgIC5mb3JlZ3JvdW5kIHBhdGggewogICAgICAgIGZpbGw6IG5vbmU7CiAgICAgICAgc3Ryb2tlLW9wYWNpdHk6IDAuNzsKICAgICAgICBzdHJva2Utd2lkdGg6IDE7CiAgICAgIH0KCiAgICAgIC8qIFdpbGwgYmUgc2V0IG9uIGZvcmVncm91bmQgcGF0aHMgdGhhdCBhcmUgbm90ICJjb250YWluZWQiIGluIHRoZSBjdXJyZW50CiAgICAgICAgIGF4ZXMgYnJ1c2hlcy4gSWYgbm8gYnJ1c2hlcyBhcmUgc2V0LCBubyBwYXRoIHdpbGwgaGF2ZSB0aGlzIGNsYXNzLiAqLwogICAgICAuZm9yZWdyb3VuZCAuaW52aXNpYmxlLXBhdGggewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC8qIFN0eWxlIGZvciB0aGUgcGF0aCBjbG9zZXN0IHRvIHRoZSBtb3VzZSBwb2ludGVyICh0eXBpY2FsbHkgd2lsbCBiZWNvbWUKICAgICAgdGhlIHNlbGVjdGVkIHBhdGggd2hlbiB0aGUgdXNlciBjbGlja3MpLiAqLwogICAgICAuZm9yZWdyb3VuZCAucGVha2VkLXBhdGggewogICAgICAgIHN0cm9rZS13aWR0aDogMzsKICAgICAgfQoKICAgICAgLyogVGhlIGN1cnJlbnRseSBzZWxlY3RlZCBwYXRoIGNsYXNzLiBXZSB1c2UgIWltcG9ydGFudCB0byBvdmVycmlkZSB0aGUKICAgICAgICAgaW5saW5lIHN0eWxlIHRoYXQgc2V0cyB0aGUgcmVndWxhciBjb2xvciBvZiBhIHBhdGguICovCiAgICAgIC5mb3JlZ3JvdW5kIC5zZWxlY3RlZC1wYXRoIHsKICAgICAgICBzdHJva2Utd2lkdGg6IDMgIWltcG9ydGFudDsKICAgICAgICBzdHJva2U6ICMwZjAgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgI2NvbnRhaW5lciB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICBzdmcgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQoKICAgICAgLmF4aXMgdGV4dCB7CiAgICAgICAgdGV4dC1zaGFkb3c6IHZhcigtLXRmLWhwYXJhbXMtcGFyYWxsZWwtY29vcmRzLXBsb3QtYXhpcy1zaGFkb3cpOwogICAgICAgIGZpbGw6IGN1cnJlbnRDb2xvcjsKICAgICAgICBjdXJzb3I6IG1vdmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYCx0KFtvKHt0eXBlOkFycmF5fSksZSgiZGVzaWduOnR5cGUiLEFycmF5KV0sZEl0LnByb3RvdHlwZSwic2Vzc2lvbkdyb3VwcyIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxkSXQucHJvdG90eXBlLCJvcHRpb25zIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxkSXQucHJvdG90eXBlLCJzZWxlY3RlZFNlc3Npb25Hcm91cCIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdCxub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZEl0LnByb3RvdHlwZSwiY2xvc2VzdFNlc3Npb25Hcm91cCIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxkSXQucHJvdG90eXBlLCJyZWRyYXdDb3VudCIsdm9pZCAwKSx0KFtvKHt0eXBlOkFycmF5fSksZSgiZGVzaWduOnR5cGUiLEFycmF5KV0sZEl0LnByb3RvdHlwZSwiX3ZhbGlkU2Vzc2lvbkdyb3VwcyIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxkSXQucHJvdG90eXBlLCJfaW50ZXJhY3Rpb25NYW5hZ2VyIix2b2lkIDApLHQoW2EoIm9wdGlvbnMuKiIsInNlc3Npb25Hcm91cHMuKiIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sZEl0LnByb3RvdHlwZSwiX29wdGlvbnNPclNlc3Npb25Hcm91cHNDaGFuZ2VkIixudWxsKSxkSXQ9dChbaSgidGYtaHBhcmFtcy1wYXJhbGxlbC1jb29yZHMtcGxvdCIpXSxkSXQpO2xldCBwSXQ9Y2xhc3MgZXh0ZW5kcyB5ZXtfY2xvc2VzdE9yU2VsZWN0ZWQodCxlKXtyZXR1cm4gbnVsbCE9PXQ/dDplfX07cEl0LnRlbXBsYXRlPV9lYAogICAgPCEtLSBDb250cm9scyBiZWhhdmlvciBvZiBwYXJhbGxlbCBjb29yZGluYXRlcyBwbG90CiAgICAgICAgIG91dHB1dHMgc2V0IG9wdGlvbnMgdG8gdGhlIF9vcHRpb25zIHByb3BlcnR5LgogICAgICAtLT4KICAgIDxocGFyYW1zLXNwbGl0LWxheW91dCBvcmllbnRhdGlvbj0idmVydGljYWwiPgogICAgICA8IS0tIFRoZSBzY2FsZSBhbmQgY29sb3IgY29udHJvbHMuIC0tPgogICAgICA8dGYtaHBhcmFtcy1zY2FsZS1hbmQtY29sb3ItY29udHJvbHMKICAgICAgICBpZD0iY29udHJvbHMiCiAgICAgICAgc2xvdD0iY29udGVudCIKICAgICAgICBjbGFzcz0ic2VjdGlvbiIKICAgICAgICBjb25maWd1cmF0aW9uPSJbW2NvbmZpZ3VyYXRpb25dXSIKICAgICAgICBzZXNzaW9uLWdyb3Vwcz0iW1tzZXNzaW9uR3JvdXBzXV0iCiAgICAgICAgb3B0aW9ucz0ie3tfb3B0aW9uc319IgogICAgICA+CiAgICAgIDwvdGYtaHBhcmFtcy1zY2FsZS1hbmQtY29sb3ItY29udHJvbHM+CiAgICAgIDwhLS0gVGhlIGFjdHVhbCBwYXJhbGxlbCBjb29yZGluYXRlcyBwbG90IC0tPgogICAgICA8dGYtaHBhcmFtcy1wYXJhbGxlbC1jb29yZHMtcGxvdAogICAgICAgIGlkPSJwbG90IgogICAgICAgIHNsb3Q9ImNvbnRlbnQiCiAgICAgICAgY2xhc3M9InNlY3Rpb24iCiAgICAgICAgc2Vzc2lvbi1ncm91cHM9Iltbc2Vzc2lvbkdyb3Vwc11dIgogICAgICAgIHNlbGVjdGVkLXNlc3Npb24tZ3JvdXA9Int7X3NlbGVjdGVkR3JvdXB9fSIKICAgICAgICBjbG9zZXN0LXNlc3Npb24tZ3JvdXA9Int7X2Nsb3Nlc3RHcm91cH19IgogICAgICAgIG9wdGlvbnM9IltbX29wdGlvbnNdXSIKICAgICAgPgogICAgICA8L3RmLWhwYXJhbXMtcGFyYWxsZWwtY29vcmRzLXBsb3Q+CiAgICAgIDx0Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtdmFsdWVzCiAgICAgICAgaWQ9InZhbHVlcyIKICAgICAgICBzbG90PSJjb250ZW50IgogICAgICAgIGNsYXNzPSJzZWN0aW9uIgogICAgICAgIHZpc2libGUtc2NoZW1hPSJbW2NvbmZpZ3VyYXRpb24udmlzaWJsZVNjaGVtYV1dIgogICAgICAgIHNlc3Npb24tZ3JvdXA9IltbX2Nsb3Nlc3RPclNlbGVjdGVkKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbG9zZXN0R3JvdXAsIF9zZWxlY3RlZEdyb3VwKV1dIgogICAgICA+CiAgICAgIDwvdGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLXZhbHVlcz4KICAgICAgPHRmLWhwYXJhbXMtc2Vzc2lvbi1ncm91cC1kZXRhaWxzCiAgICAgICAgaWQ9ImRldGFpbHMiCiAgICAgICAgc2xvdD0iY29udGVudCIKICAgICAgICBjbGFzcz0ic2VjdGlvbiIKICAgICAgICBiYWNrZW5kPSJbW2JhY2tlbmRdXSIKICAgICAgICBleHBlcmltZW50LW5hbWU9IltbZXhwZXJpbWVudE5hbWVdXSIKICAgICAgICBzZXNzaW9uLWdyb3VwPSJbW19zZWxlY3RlZEdyb3VwXV0iCiAgICAgICAgdmlzaWJsZS1zY2hlbWE9IltbY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hXV0iCiAgICAgID4KICAgICAgPC90Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtZGV0YWlscz4KICAgIDwvaHBhcmFtcy1zcGxpdC1sYXlvdXQ+CgogICAgPHN0eWxlPgogICAgICAuc2VjdGlvbiB7CiAgICAgICAgcGFkZGluZzogMTBweDsKICAgICAgfQogICAgICAjdmFsdWVzIHsKICAgICAgICBoZWlnaHQ6IDExNXB4OwogICAgICB9CiAgICAgICNkZXRhaWxzIHsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgbWF4LWhlaWdodDogZml0LWNvbnRlbnQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYCx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxwSXQucHJvdG90eXBlLCJiYWNrZW5kIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLHBJdC5wcm90b3R5cGUsImV4cGVyaW1lbnROYW1lIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLHBJdC5wcm90b3R5cGUsImNvbmZpZ3VyYXRpb24iLHZvaWQgMCksdChbbyh7dHlwZTpBcnJheX0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLHBJdC5wcm90b3R5cGUsInNlc3Npb25Hcm91cHMiLHZvaWQgMCkscEl0PXQoW2koInRmLWhwYXJhbXMtcGFyYWxsZWwtY29vcmRzLXZpZXciKV0scEl0KTtsZXQgZkl0PWNsYXNzIGV4dGVuZHModHIoeWUpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5zZWxlY3RlZFNlc3Npb25Hcm91cD1udWxsLHRoaXMuY2xvc2VzdFNlc3Npb25Hcm91cD1udWxsLHRoaXMuX2NvbnRhaW5lcj1udWxsLHRoaXMuX3N2Zz1udWxsLHRoaXMud2lkdGg9MCx0aGlzLmhlaWdodD0wLHRoaXMuX2JydXNoZWRDZWxsSW5kZXg9bnVsbCx0aGlzLl9icnVzaFNlbGVjdGlvbj1udWxsfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLl9jb250YWluZXI9dGhpcy4kLmNvbnRhaW5lcix0aGlzLl9zdmc9d3UodGhpcy4kLnN2ZyksdGhpcy5fcmVkcmF3KCl9X3Nlc3Npb25Hcm91cHNDaGFuZ2VkKCl7bnVsbCE9PXRoaXMuc2VsZWN0ZWRTZXNzaW9uR3JvdXAmJih0aGlzLnNlbGVjdGVkU2Vzc2lvbkdyb3VwPXBQdCh0aGlzLnNlc3Npb25Hcm91cHMsdGhpcy5zZWxlY3RlZFNlc3Npb25Hcm91cC5uYW1lKXx8bnVsbCksdGhpcy5fcmVkcmF3KCl9X3Zpc2libGVTY2hlbWFDaGFuZ2VkKCl7dGhpcy5fYnJ1c2hlZENlbGxJbmRleD1udWxsLHRoaXMuX2JydXNoU2VsZWN0aW9uPW51bGwsdGhpcy5fcmVkcmF3KCl9X3JlZHJhdygpe3RoaXMuZGVib3VuY2UoIl9yZWRyYXciLCgoKT0+e2NvbnN0IHQ9TVB0O3RoaXMud2lkdGg9TWF0aC5tYXgoMTUwKnQubnVtVmlzaWJsZUNvbHVtbnModGhpcy52aXNpYmxlU2NoZW1hKSwxMjAwKSx0aGlzLmhlaWdodD1NYXRoLm1heCgxMTIuNSp0Lm51bVZpc2libGVNZXRyaWNzKHRoaXMudmlzaWJsZVNjaGVtYSksNDgwKSx0aGlzLl9jb250YWluZXIuc3R5bGUud2lkdGg9dGhpcy53aWR0aCsicHgiLHRoaXMuX2NvbnRhaW5lci5zdHlsZS5oZWlnaHQ9dGhpcy5oZWlnaHQrInB4Iix0aGlzLl9zdmcuYXR0cigid2lkdGgiLHRoaXMud2lkdGgpLmF0dHIoImhlaWdodCIsdGhpcy5oZWlnaHQpLHRoaXMuX3N2Zy5zZWxlY3RBbGwoImciKS5yZW1vdmUoKSx0aGlzLl9kcmF3KCl9KSwxMDApfV9kcmF3KCl7Y29uc3QgdD1NUHQsZT10aGlzO2lmKCF0aGlzLnNlc3Npb25Hcm91cHN8fDA9PXRoaXMuc2Vzc2lvbkdyb3Vwcy5sZW5ndGh8fCF0aGlzLnZpc2libGVTY2hlbWF8fDA9PXRoaXMudmlzaWJsZVNjaGVtYS5tZXRyaWNJbmZvcy5sZW5ndGgpcmV0dXJuO2NvbnN0IG49UmwodC5udW1WaXNpYmxlQ29sdW1ucyhlLnZpc2libGVTY2hlbWEpKSxpPVJsKHQubnVtVmlzaWJsZU1ldHJpY3MoZS52aXNpYmxlU2NoZW1hKSkscj13TSgpLmRvbWFpbihuKS5yYW5nZShbODUsdGhpcy53aWR0aC0xLTVdKS5wYWRkaW5nSW5uZXIoLjEpLG89d00oKS5kb21haW4oaSkucmFuZ2UoW3RoaXMuaGVpZ2h0LTEtNS01MCw1XSkucGFkZGluZ0lubmVyKC4xKSxhPXIuYmFuZHdpZHRoKCkscz1vLmJhbmR3aWR0aCgpLGw9bi5tYXAoKHQ9PmUuX2NlbGxTY2FsZSh0LFswLGEtMV0pKSksYz1pLm1hcCgobj0+ZS5fY2VsbFNjYWxlKG4rdC5udW1WaXNpYmxlSFBhcmFtcyhlLnZpc2libGVTY2hlbWEpLFtzLTEsMF0pKSksdT10aGlzLl9zdmcuc2VsZWN0QWxsKCIueC1heGlzIikuZGF0YShuKS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoIngtYXhpcyIsITApLmF0dHIoInRyYW5zZm9ybSIsKGU9PnQudHJhbnNsYXRlU3RyKHIoZSksMCkpKTtmdW5jdGlvbiBoKHQpe3JldHVybiJ4LWF4aXMtY2xpcC1wYXRoLSIrdH1mdW5jdGlvbiBkKHQpe3JldHVybiJ4LWxhYmVsLWNsaXAtcGF0aC0iK3R9dS5hcHBlbmQoImNsaXBQYXRoIikuYXR0cigiaWQiLGgpLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLC01KS5hdHRyKCJ5IiwwKS5hdHRyKCJ3aWR0aCIsYSsxMCkuYXR0cigiaGVpZ2h0IixlLmhlaWdodC0yNSksdS5hcHBlbmQoImNsaXBQYXRoIikuYXR0cigiaWQiLGQpLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLDApLmF0dHIoInkiLGUuaGVpZ2h0LTI1KS5hdHRyKCJ3aWR0aCIsYSkuYXR0cigiaGVpZ2h0IiwyNSksdS5hcHBlbmQoImciKS5hdHRyKCJjbGlwLXBhdGgiLCh0PT4idXJsKCMiK2godCkrIikiKSkuZWFjaCgoZnVuY3Rpb24odCl7d3UodGhpcykuY2FsbChnLHJjKGxbdF0pLnRpY2tTaXplKGUuaGVpZ2h0LTUwKSxhLDQwLGUub3B0aW9ucy5jb2x1bW5zW3RdLnNjYWxlKX0pKSx1LmFwcGVuZCgiZyIpLmNsYXNzZWQoIngtYXhpcy1sYWJlbCIsITApLmF0dHIoImNsaXAtcGF0aCIsKHQ9PiJ1cmwoIyIrZCh0KSsiKSIpKS5hcHBlbmQoInRleHQiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoIngiLGEvMikuYXR0cigieSIsZS5oZWlnaHQtMS0xMi41KS50ZXh0KChuPT50LnNjaGVtYVZpc2libGVDb2x1bW5OYW1lKGUudmlzaWJsZVNjaGVtYSxuKSkpLmFwcGVuZCgidGl0bGUiKS50ZXh0KChuPT50LnNjaGVtYVZpc2libGVDb2x1bW5OYW1lKGUudmlzaWJsZVNjaGVtYSxuKSkpO2NvbnN0IHA9dGhpcy5fc3ZnLnNlbGVjdEFsbCgiLnktYXhpcyIpLmRhdGEoaSkuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJ5LWF4aXMiLCEwKS5hdHRyKCJ0cmFuc2Zvcm0iLChuPT50LnRyYW5zbGF0ZVN0cihlLndpZHRoLTEsbyhuKSkpKTtmdW5jdGlvbiBmKHQpe3JldHVybiJ5LWF4aXMtY2xpcC1wYXRoLSIrdH1mdW5jdGlvbiBtKHQpe3JldHVybiJ5LWxhYmVsLWNsaXAtcGF0aC0iK3R9ZnVuY3Rpb24gZyh0LGUsbixpLHIpe2NvbnN0IG89TWF0aC5mbG9vcihuL2kpLGE9ZS5zY2FsZSgpO2lmKCJRVUFOVElMRSI9PT1yKXtsZXQgdD1hLnF1YW50aWxlcygpO2NvbnN0IG49TWF0aC5jZWlsKHQubGVuZ3RoL28pO3Q9UmwoMCx0Lmxlbmd0aCxuKS5tYXAoKGU9PnRbZV0pKSxlLnRpY2tWYWx1ZXModCkudGlja0Zvcm1hdChmeSgiLS4yZyIpKX0iTElORUFSIiE9PXImJiJMT0ciIT09cnx8ZS50aWNrcyhvKSx0LmNhbGwoZSksdC5zZWxlY3RBbGwoIi5kb21haW4iKS5yZW1vdmUoKSx0LnNlbGVjdEFsbCgiLnRpY2sgbGluZSIpLmF0dHIoInN0cm9rZSIsIiNkZGQiKX1wLmFwcGVuZCgiY2xpcFBhdGgiKS5hdHRyKCJpZCIsZikuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsLShlLndpZHRoLTQwLTEpKS5hdHRyKCJ5IiwtNSkuYXR0cigid2lkdGgiLGUud2lkdGgtNDApLmF0dHIoImhlaWdodCIscysxMCkscC5hcHBlbmQoImNsaXBQYXRoIikuYXR0cigiaWQiLG0pLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLC0oZS53aWR0aC0xKSkuYXR0cigieSIsMCkuYXR0cigid2lkdGgiLDQwKS5hdHRyKCJoZWlnaHQiLHMpLHAuYXBwZW5kKCJnIikuYXR0cigiY2xpcC1wYXRoIiwodD0+InVybCgjIitmKHQpKyIpIikpLmVhY2goKGZ1bmN0aW9uKG4pe3d1KHRoaXMpLmNhbGwoZyxvYyhjW25dKS50aWNrU2l6ZShlLndpZHRoLTgwKSxzLDIwLGUub3B0aW9ucy5jb2x1bW5zW24rdC5udW1WaXNpYmxlSFBhcmFtcyhlLnZpc2libGVTY2hlbWEpXS5zY2FsZSl9KSkscC5hcHBlbmQoImciKS5jbGFzc2VkKCJ5LWF4aXMtbGFiZWwiLCEwKS5hdHRyKCJjbGlwLXBhdGgiLCh0PT4idXJsKCMiK20odCkrIikiKSkuYXBwZW5kKCJ0ZXh0IikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJ4IiwtKGUud2lkdGgtMjAtMSkpLmF0dHIoInkiLHMvMikuYXR0cigidHJhbnNmb3JtIix0LnJvdGF0ZVN0cig5MCwtKGUud2lkdGgtMjAtMSkscy8yKSkudGV4dCgobj0+dC5tZXRyaWNOYW1lKGUudmlzaWJsZVNjaGVtYS5tZXRyaWNJbmZvc1tuXSkpKS5hcHBlbmQoInRpdGxlIikudGV4dCgobj0+dC5tZXRyaWNOYW1lKGUudmlzaWJsZVNjaGVtYS5tZXRyaWNJbmZvc1tuXSkpKTtjb25zdCBfPXRoaXMuX3N2Zy5zZWxlY3RBbGwoIi5jZWxsIikuZGF0YShFbChuLGkpKS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImNlbGwiLCEwKS5hdHRyKCJ0cmFuc2Zvcm0iLCgoW2Usbl0pPT50LnRyYW5zbGF0ZVN0cihyKGUpLG8obikpKSk7Xy5hcHBlbmQoImciKS5jbGFzc2VkKCJmcmFtZSIsITApLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLC01KS5hdHRyKCJ5IiwtNSkuYXR0cigid2lkdGgiLGErMTApLmF0dHIoImhlaWdodCIscysxMCkuYXR0cigic3Ryb2tlIiwiIzAwMCIpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigic2hhcGUtcmVuZGVyaW5nIiwiY3Jpc3BFZGdlcyIpO2xldCB5PW51bGw7dm9pZCAwIT09ZS5vcHRpb25zLmNvbG9yQnlDb2x1bW5JbmRleCYmKHk9RE0oKS5kb21haW4odGhpcy5fY29sRXh0ZW50KHRoaXMub3B0aW9ucy5jb2xvckJ5Q29sdW1uSW5kZXgpKS5yYW5nZShbdGhpcy5vcHRpb25zLm1pbkNvbG9yLHRoaXMub3B0aW9ucy5tYXhDb2xvcl0pLmludGVycG9sYXRlKGxwKSk7Y29uc3Qgdj12b2lkIDA9PT1lLm9wdGlvbnMuY29sb3JCeUNvbHVtbkluZGV4PygpPT4icmVkIjooe3Nlc3Npb25Hcm91cDp0fSk9PnkodGhpcy5fY29sVmFsdWUodCxlLm9wdGlvbnMuY29sb3JCeUNvbHVtbkluZGV4KSk7ZnVuY3Rpb24gYih0LG4pe3JldHVybiBsW25dKGUuX2NvbFZhbHVlKHQsbikpfWZ1bmN0aW9uIHgodCxuKXtyZXR1cm4gY1tuXShlLl9tZXRyaWNWYWx1ZSh0LG4pKX1jb25zdFt3LFMsTV09KGZ1bmN0aW9uIEUodCxyKXtjb25zdCBvPXQuc2VsZWN0QWxsKCIuZGF0YS1tYXJrZXIiKS5kYXRhKCgoW3Qsbl0pPT5lLnNlc3Npb25Hcm91cHMuZmlsdGVyKChpPT52b2lkIDAhPT1lLl9jb2xWYWx1ZShpLHQpJiZ2b2lkIDAhPT1lLl9tZXRyaWNWYWx1ZShpLG4pKSkubWFwKChlPT4oe2NvbDp0LG1ldHJpYzpuLHNlc3Npb25Hcm91cDplLHg6YihlLHQpLHk6eChlLG4pLHNlc3Npb25Hcm91cE1hcmtlcnM6bnVsbH0pKSkpKS5lbnRlcigpLmFwcGVuZCgiY2lyY2xlIikuY2xhc3NlZCgiZGF0YS1tYXJrZXIiLCEwKS5hdHRyKCJjeCIsKCh7eDp0fSk9PnQpKS5hdHRyKCJjeSIsKCh7eTp0fSk9PnQpKS5hdHRyKCJyIiwyKS5hdHRyKCJmaWxsIixyKSxhPW5ldyBNYXA7ZS5zZXNzaW9uR3JvdXBzLmZvckVhY2goKHQ9PnthLnNldCh0LFtdKX0pKSxvLmVhY2goKGZ1bmN0aW9uKHQpe2EuZ2V0KHQuc2Vzc2lvbkdyb3VwKS5wdXNoKHRoaXMpfSkpLG8uZWFjaCgodD0+e2NvbnN0IGU9YS5nZXQodC5zZXNzaW9uR3JvdXApO3Quc2Vzc2lvbkdyb3VwTWFya2Vycz1uZXcgU2V0KGUpfSkpO2NvbnN0IHM9bi5tYXAoKHQ9PmkubWFwKChlPT5vLmZpbHRlcigobj0+bi5jb2w9PXQmJm4ubWV0cmljPT1lKSkpKSkpO3JldHVybltvLHMsYV19KShfLmFwcGVuZCgiZyIpLHYpLFQ9bi5tYXAoKHQ9PmkubWFwKChlPT4oZnVuY3Rpb24gbih0LGUpe2NvbnN0IG49W107cmV0dXJuIFNbdF1bZV0uZWFjaCgoZnVuY3Rpb24oKXtuLnB1c2godGhpcyl9KSksUF8oKS54KCh0PT53dSh0KS5kYXR1bSgpLngpKS55KCh0PT53dSh0KS5kYXR1bSgpLnkpKS5hZGRBbGwobil9KSh0LGUpKSkpKTtsZXQgQz1udWxsO04oKSYmKEM9Xy5maWx0ZXIoKHQ9PndlLmlzRXF1YWwodCxlLl9icnVzaGVkQ2VsbEluZGV4KSkpLGNvbnNvbGUuYXNzZXJ0KDE9PUMuc2l6ZSgpLEMpKTtsZXQgQT1uZXcgU2V0KHcubm9kZXMoKSk7ZnVuY3Rpb24gaygpe2xldCBuPW5ldyBTZXQody5ub2RlcygpKTsoZnVuY3Rpb24gaSgpe3JldHVybiFOKCl8fGUuX2JydXNoU2VsZWN0aW9uWzBdWzBdPT09ZS5fYnJ1c2hTZWxlY3Rpb25bMV1bMF18fGUuX2JydXNoU2VsZWN0aW9uWzBdWzFdPT09ZS5fYnJ1c2hTZWxlY3Rpb25bMV1bMV19KSgpfHwobj0oZnVuY3Rpb24gcihlLG4pe2NvbnNvbGUuYXNzZXJ0KG51bGwhPT1lKSxjb25zb2xlLmFzc2VydChudWxsIT09bik7Y29uc3RbaSxyXT1lLG89bmV3IFNldDtyZXR1cm4gdC5xdWFkVHJlZVZpc2l0UG9pbnRzSW5SZWN0KFRbaV1bcl0sblswXVswXSxuWzBdWzFdLG5bMV1bMF0sblsxXVsxXSwodD0+e3d1KHQpLmRhdHVtKCkuc2Vzc2lvbkdyb3VwTWFya2Vycy5mb3JFYWNoKCh0PT57by5hZGQodCl9KSl9KSksb30pKGUuX2JydXNoZWRDZWxsSW5kZXgsZS5fYnJ1c2hTZWxlY3Rpb24pKSxhaChBcnJheS5mcm9tKHQuZmlsdGVyU2V0KG4sKHQ9PiFBLmhhcyh0KSkpKSkuYXR0cigiZmlsbCIsdiksYWgoQXJyYXkuZnJvbSh0LmZpbHRlclNldChBLCh0PT4hbi5oYXModCkpKSkpLmF0dHIoImZpbGwiLCIjZGRkIiksQT1ufWsoKTtjb25zdCBMPVptKCkuZXh0ZW50KFtbLTQsLTRdLFthLTErNS0xLHMtMSs1LTFdXSkub24oInN0YXJ0IiwoZnVuY3Rpb24oKXtOKCkmJkMubm9kZSgpIT10aGlzJiZMLm1vdmUoQyxudWxsKSxQKHRoaXMpfSkpLm9uKCJicnVzaCIsKGZ1bmN0aW9uKCl7UCh0aGlzKX0pKS5vbigiZW5kIiwoZnVuY3Rpb24oKXtQKHRoaXMpfSkpO2Z1bmN0aW9uIFAodCl7Y29uc3Qgbj0kbSh0KTshTigpJiZudWxsPT09bnx8TigpJiZ0PT09Qy5ub2RlKCkmJndlLmlzRXF1YWwobixlLl9icnVzaFNlbGVjdGlvbil8fChlLl9icnVzaFNlbGVjdGlvbj1uLG51bGwhPT1uPyhDPXd1KHQpLGUuX2JydXNoZWRDZWxsSW5kZXg9Qy5kYXR1bSgpKTooQz1udWxsLGUuX2JydXNoZWRDZWxsSW5kZXg9bnVsbCksaygpKX1mdW5jdGlvbiBOKCl7cmV0dXJuIG51bGwhPT1lLl9icnVzaGVkQ2VsbEluZGV4JiZudWxsIT09ZS5fYnJ1c2hTZWxlY3Rpb259Xy5jYWxsKEwpLE4oKSYmTC5tb3ZlKEMsZS5fYnJ1c2hTZWxlY3Rpb24pO2xldCBJPW51bGwsTz1udWxsO251bGwhPT10aGlzLnNlbGVjdGVkU2Vzc2lvbkdyb3VwJiYoTz1haChNLmdldCh0aGlzLnNlbGVjdGVkU2Vzc2lvbkdyb3VwKSkuY2xhc3NlZCgic2VsZWN0ZWQtbWFya2VyIiwhMCkpLF8ub24oImNsaWNrIiwoZnVuY3Rpb24oKXtjb25zdCB0PUk9PT1PP251bGw6STtpZih0PT09TylyZXR1cm47bnVsbCE9PU8mJk8uY2xhc3NlZCgic2VsZWN0ZWQtbWFya2VyIiwhMSksTz10LG51bGwhPT1PJiZPLmNsYXNzZWQoInNlbGVjdGVkLW1hcmtlciIsITApO2NvbnN0IG49bnVsbD09PU8/bnVsbDpPLmRhdHVtKCkuc2Vzc2lvbkdyb3VwO2Uuc2VsZWN0ZWRTZXNzaW9uR3JvdXA9bn0pKS5vbigibW91c2Vtb3ZlIG1vdXNlZW50ZXIiLChmdW5jdGlvbihbbixpXSl7Y29uc3RbcixvXT1vaCh0aGlzKSxhPShmdW5jdGlvbiBzKGUsbixpLHIsbyl7bGV0IGE9MS8wLHM9bnVsbDtyZXR1cm4gdC5xdWFkVHJlZVZpc2l0UG9pbnRzSW5EaXNrKFRbZV1bbl0saSxyLG8sKCh0LGUpPT57aWYoQS5oYXModCkmJmU8YSl7Y29uc3Qgbj13dSh0KS5kYXR1bSgpO2E9ZSxzPW4uc2Vzc2lvbkdyb3VwfX0pKSxudWxsPT09cz9udWxsOmFoKE0uZ2V0KHMpKX0pKG4saSxyLG8sMjApO0khPT1hJiYobnVsbCE9PUkmJkkuY2xhc3NlZCgiY2xvc2VzdC1tYXJrZXIiLCExKSxJPWEsbnVsbCE9PUk/KEkuY2xhc3NlZCgiY2xvc2VzdC1tYXJrZXIiLCEwKSxlLmNsb3Nlc3RTZXNzaW9uR3JvdXA9SS5kYXR1bSgpLnNlc3Npb25Hcm91cCk6ZS5jbG9zZXN0U2Vzc2lvbkdyb3VwPW51bGwpfSkpLm9uKCJtb3VzZWxlYXZlIiwoZnVuY3Rpb24oW3Qsbl0pe251bGwhPT1JJiYoSS5jbGFzc2VkKCJjbG9zZXN0LW1hcmtlciIsITEpLEk9bnVsbCxlLmNsb3Nlc3RTZXNzaW9uR3JvdXA9bnVsbCl9KSksdGhpcy5fc3ZnLnNlbGVjdEFsbCgiKiIpLmNsYXNzZWQoInRmLWhwYXJhbXMtc2NhdHRlci1wbG90LW1hdHJpeC1wbG90IiwhMCl9X2NlbGxTY2FsZSh0LGUpe2NvbnN0IG49dGhpcy5fY29sRXh0ZW50KHQpLGk9RE0oKS5kb21haW4obikucmFuZ2UoZSk7aWYoIkxJTkVBUiI9PT10aGlzLm9wdGlvbnMuY29sdW1uc1t0XS5zY2FsZSlyZXR1cm4gaTtpZigiTE9HIj09PXRoaXMub3B0aW9ucy5jb2x1bW5zW3RdLnNjYWxlKXJldHVybiBuWzBdPD0wJiZuWzFdPj0wP2k6cU0oKS5kb21haW4obikucmFuZ2UoZSk7aWYoIlFVQU5USUxFIj09PXRoaXMub3B0aW9ucy5jb2x1bW5zW3RdLnNjYWxlKXtjb25zdCBuPShlWzFdLWVbMF0pLzE5LGk9UmwoMjApLm1hcCgodD0+ZVswXStuKnQpKTtyZXR1cm4gZUUoKS5kb21haW4od2UudW5pcSh0aGlzLnNlc3Npb25Hcm91cHMubWFwKChlPT50aGlzLl9jb2xWYWx1ZShlLHQpKSkpKS5yYW5nZShpKX1pZigiTk9OX05VTUVSSUMiPT09dGhpcy5vcHRpb25zLmNvbHVtbnNbdF0uc2NhbGUpcmV0dXJuIE1NKCkuZG9tYWluKHdlLnVuaXEodGhpcy5zZXNzaW9uR3JvdXBzLm1hcCgoZT0+dGhpcy5fY29sVmFsdWUoZSx0KSkpLnNvcnQoKSkpLnJhbmdlKGUpLnBhZGRpbmcoLjEpO3Rocm93IlVua25vd24gc2NhbGUgZm9yIGNvbHVtbjogIit0KyIuIG9wdGlvbnM6ICIrdGhpcy5vcHRpb25zfV9jb2xWYWx1ZSh0LGUpe3JldHVybiBnUHQodGhpcy52aXNpYmxlU2NoZW1hLHQsZSl9X21ldHJpY1ZhbHVlKHQsZSl7cmV0dXJuIG1QdCh0aGlzLnZpc2libGVTY2hlbWEsdCxlKX1fY29sRXh0ZW50KHQpe3JldHVybiBkUHQodGhpcy52aXNpYmxlU2NoZW1hLHRoaXMuc2Vzc2lvbkdyb3Vwcyx0KX19O2ZJdC50ZW1wbGF0ZT1fZWAKICAgIDxkaXYgaWQ9ImNvbnRhaW5lciI+CiAgICAgIDxzdmcgaWQ9InN2ZyI+PC9zdmc+CiAgICA8L2Rpdj4KCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgICBzdmcgewogICAgICAgIGZvbnQ6IDEwcHggc2Fucy1zZXJpZjsKICAgICAgfQoKICAgICAgdGV4dCB7CiAgICAgICAgZmlsbDogY3VycmVudENvbG9yOwogICAgICB9CgogICAgICAuZnJhbWUgcmVjdCB7CiAgICAgICAgc3Ryb2tlOiBjdXJyZW50Q29sb3I7CiAgICAgIH0KCiAgICAgIC8qIFRoZSBjbG9zZXN0IGRhdGEgcG9pbnQgbWFya2VyIHRvIHRoZSBtb3VzZSBwb2ludGVyLiBXZSB1c2UgIWltcG9ydGFudAogICAgICAgICB0byBvdmVycmlkZSB0aGUgaW5saW5lIHN0eWxlIHRoYXQgc2V0cyB0aGUgcmVndWxhciBzdHlsZSBvZiBhIG1hcmtlci4KICAgICAgKi8KICAgICAgLmNsb3Nlc3QtbWFya2VyIHsKICAgICAgICByOiA2ICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIC8qIFRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZGF0YSBwb2ludCBtYXJrZXIuIFdlIHVzZSAhaW1wb3J0YW50IHRvCiAgICAgICAgIG92ZXJyaWRlIHRoZSBpbmxpbmUgc3R5bGUgdGhhdCBzZXRzIHRoZSByZWd1bGFyIHN0eWxlIG9mIGEgbWFya2VyLiAqLwogICAgICAuc2VsZWN0ZWQtbWFya2VyIHsKICAgICAgICByOiA2ICFpbXBvcnRhbnQ7CiAgICAgICAgZmlsbDogIzBmMCAhaW1wb3J0YW50OwogICAgICB9CiAgICA8L3N0eWxlPgogIGAsdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZkl0LnByb3RvdHlwZSwidmlzaWJsZVNjaGVtYSIsdm9pZCAwKSx0KFtvKHt0eXBlOkFycmF5fSksZSgiZGVzaWduOnR5cGUiLEFycmF5KV0sZkl0LnByb3RvdHlwZSwic2Vzc2lvbkdyb3VwcyIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxmSXQucHJvdG90eXBlLCJvcHRpb25zIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxmSXQucHJvdG90eXBlLCJzZWxlY3RlZFNlc3Npb25Hcm91cCIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdCxub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZkl0LnByb3RvdHlwZSwiY2xvc2VzdFNlc3Npb25Hcm91cCIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixIVE1MRWxlbWVudCldLGZJdC5wcm90b3R5cGUsIl9jb250YWluZXIiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZkl0LnByb3RvdHlwZSwiX3N2ZyIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxmSXQucHJvdG90eXBlLCJ3aWR0aCIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxmSXQucHJvdG90eXBlLCJoZWlnaHQiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZkl0LnByb3RvdHlwZSwiX2JydXNoZWRDZWxsSW5kZXgiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZkl0LnByb3RvdHlwZSwiX2JydXNoU2VsZWN0aW9uIix2b2lkIDApLHQoW2EoInNlc3Npb25Hcm91cHMuKiIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sZkl0LnByb3RvdHlwZSwiX3Nlc3Npb25Hcm91cHNDaGFuZ2VkIixudWxsKSx0KFthKCJ2aXNpYmxlU2NoZW1hLioiKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLGZJdC5wcm90b3R5cGUsIl92aXNpYmxlU2NoZW1hQ2hhbmdlZCIsbnVsbCksdChbYSgib3B0aW9ucy4qIiksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pLGUoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxmSXQucHJvdG90eXBlLCJfcmVkcmF3IixudWxsKSxmSXQ9dChbaSgidGYtaHBhcmFtcy1zY2F0dGVyLXBsb3QtbWF0cml4LXBsb3QiKV0sZkl0KTtsZXQgbUl0PWNsYXNzIGV4dGVuZHMgeWV7X2Nsb3Nlc3RPclNlbGVjdGVkKHQsZSl7cmV0dXJuIG51bGwhPT10P3Q6ZX19O21JdC50ZW1wbGF0ZT1fZWAKICAgIDxocGFyYW1zLXNwbGl0LWxheW91dCBvcmllbnRhdGlvbj0idmVydGljYWwiPgogICAgICA8IS0tIENvbnRyb2xzIGJlaGF2aW9yIG9mIHRoZSBzY2F0dGVyIHBsb3QgbWF0cml4CiAgICAgICAgICAgICBvdXRwdXRzIHRoZSBjb25maWd1cmVkIG9wdGlvbnMgdG8gdGhlIF9vcHRpb25zIHByb3BlcnR5LiAtLT4KICAgICAgPHRmLWhwYXJhbXMtc2NhbGUtYW5kLWNvbG9yLWNvbnRyb2xzCiAgICAgICAgc2xvdD0iY29udGVudCIKICAgICAgICBjbGFzcz0ic2VjdGlvbiIKICAgICAgICBpZD0iY29udHJvbHMiCiAgICAgICAgY29uZmlndXJhdGlvbj0iW1tjb25maWd1cmF0aW9uXV0iCiAgICAgICAgc2Vzc2lvbi1ncm91cHM9Iltbc2Vzc2lvbkdyb3Vwc11dIgogICAgICAgIG9wdGlvbnM9Int7X29wdGlvbnN9fSIKICAgICAgPgogICAgICA8L3RmLWhwYXJhbXMtc2NhbGUtYW5kLWNvbG9yLWNvbnRyb2xzPgogICAgICA8IS0tIFRoZSBhY3R1YWwgc2NhdHRlciBwbG90IG1hdHJpeCAtLT4KICAgICAgPHRmLWhwYXJhbXMtc2NhdHRlci1wbG90LW1hdHJpeC1wbG90CiAgICAgICAgc2xvdD0iY29udGVudCIKICAgICAgICBjbGFzcz0ic2VjdGlvbiIKICAgICAgICBpZD0icGxvdCIKICAgICAgICB2aXNpYmxlLXNjaGVtYT0iW1tjb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWFdXSIKICAgICAgICBzZXNzaW9uLWdyb3Vwcz0iW1tzZXNzaW9uR3JvdXBzXV0iCiAgICAgICAgc2VsZWN0ZWQtc2Vzc2lvbi1ncm91cD0ie3tfc2VsZWN0ZWRHcm91cH19IgogICAgICAgIGNsb3Nlc3Qtc2Vzc2lvbi1ncm91cD0ie3tfY2xvc2VzdEdyb3VwfX0iCiAgICAgICAgb3B0aW9ucz0iW1tfb3B0aW9uc11dIgogICAgICA+CiAgICAgIDwvdGYtaHBhcmFtcy1zY2F0dGVyLXBsb3QtbWF0cml4LXBsb3Q+CiAgICAgIDx0Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtdmFsdWVzCiAgICAgICAgc2xvdD0iY29udGVudCIKICAgICAgICBjbGFzcz0ic2VjdGlvbiIKICAgICAgICBpZD0idmFsdWVzIgogICAgICAgIHZpc2libGUtc2NoZW1hPSJbW2NvbmZpZ3VyYXRpb24udmlzaWJsZVNjaGVtYV1dIgogICAgICAgIHNlc3Npb24tZ3JvdXA9IltbX2Nsb3Nlc3RPclNlbGVjdGVkKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xvc2VzdEdyb3VwLCBfc2VsZWN0ZWRHcm91cCldXSIKICAgICAgPgogICAgICA8L3RmLWhwYXJhbXMtc2Vzc2lvbi1ncm91cC12YWx1ZXM+CiAgICAgIDwhLS0gU2hvd3Mgc2Vzc2lvbiBncm91cCBkZXRhaWxzIGZvciB0aGUgY2xpY2tlZCBtYXJrZXIuIC0tPgogICAgICA8dGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLWRldGFpbHMKICAgICAgICBzbG90PSJjb250ZW50IgogICAgICAgIGNsYXNzPSJzZWN0aW9uIgogICAgICAgIGlkPSJkZXRhaWxzIgogICAgICAgIGJhY2tlbmQ9IltbYmFja2VuZF1dIgogICAgICAgIGV4cGVyaW1lbnQtbmFtZT0iW1tleHBlcmltZW50TmFtZV1dIgogICAgICAgIHNlc3Npb24tZ3JvdXA9IltbX3NlbGVjdGVkR3JvdXBdXSIKICAgICAgICB2aXNpYmxlLXNjaGVtYT0iW1tjb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWFdXSIKICAgICAgPgogICAgICA8L3RmLWhwYXJhbXMtc2Vzc2lvbi1ncm91cC1kZXRhaWxzPgogICAgPC9ocGFyYW1zLXNwbGl0LWxheW91dD4KICAgIDxzdHlsZT4KICAgICAgLnNlY3Rpb24gewogICAgICAgIHBhZGRpbmc6IDEwcHg7CiAgICAgIH0KICAgICAgI2NvbnRyb2xzIHsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgZmxleC1iYXNpczogYXV0bzsKICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBtYXgtaGVpZ2h0OiBmaXQtY29udGVudDsKICAgICAgfQogICAgICAjcGxvdCB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIGZsZXgtYmFzaXM6IGF1dG87CiAgICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgbWF4LWhlaWdodDogZml0LWNvbnRlbnQ7CiAgICAgIH0KICAgICAgI3ZhbHVlcyB7CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIGZsZXgtYmFzaXM6IGF1dG87CiAgICAgICAgaGVpZ2h0OiAxMTVweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIG1heC1oZWlnaHQ6IGZpdC1jb250ZW50OwogICAgICB9CiAgICAgICNkZXRhaWxzIHsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgZmxleC1iYXNpczogYXV0bzsKICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBtYXgtaGVpZ2h0OiBmaXQtY29udGVudDsKICAgICAgfQogICAgICB2YWFkaW4tc3BsaXQtbGF5b3V0IHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYCx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxtSXQucHJvdG90eXBlLCJiYWNrZW5kIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLG1JdC5wcm90b3R5cGUsImV4cGVyaW1lbnROYW1lIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLG1JdC5wcm90b3R5cGUsImNvbmZpZ3VyYXRpb24iLHZvaWQgMCksdChbbyh7dHlwZTpBcnJheX0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLG1JdC5wcm90b3R5cGUsInNlc3Npb25Hcm91cHMiLHZvaWQgMCksbUl0PXQoW2koInRmLWhwYXJhbXMtc2NhdHRlci1wbG90LW1hdHJpeC12aWV3IildLG1JdCk7bGV0IGdJdD1jbGFzcyBleHRlbmRzIHlle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9zZWxlY3RlZFRhYj0wfX07Z0l0LnRlbXBsYXRlPV9lYAogICAgPHBhcGVyLWhlYWRlci1wYW5lbD4KICAgICAgPHBhcGVyLXRvb2xiYXIgc2xvdD0iaGVhZGVyIiBjbGFzcz0idGFiLWJhciI+CiAgICAgICAgPHBhcGVyLXRhYnMgc2VsZWN0ZWQ9Int7X3NlbGVjdGVkVGFifX0iIHNsb3Q9InRvcCI+CiAgICAgICAgICA8IS0tIHZpZXctaWQgY2FuIGJlIHVzZWQgYnkgaW50ZWdyYXRpb24gdGVzdHMgdG8gbG9jYXRlIGEgdGFiLgogICAgICAgICAgICAgICBJdCBzaG91bGQgYmUgdGhlIG5hbWUgb2YgdGhlIHJvb3QgZWxlbWVudCBpbXBsZW1lbnRpbmcgdGhlIHZpZXcKICAgICAgICAgICAgICAgd2l0aG91dCB0aGUgJ3RmLWhwYXJhbXMtJyBwcmVmaXguIC0tPgogICAgICAgICAgPHBhcGVyLXRhYiB2aWV3LWlkPSJ0YWJsZS12aWV3Ij4gVEFCTEUgVklFVyA8L3BhcGVyLXRhYj4KICAgICAgICAgIDxwYXBlci10YWIgdmlldy1pZD0icGFyYWxsZWwtY29vcmRzLXZpZXciPgogICAgICAgICAgICBQQVJBTExFTCBDT09SRElOQVRFUyBWSUVXCiAgICAgICAgICA8L3BhcGVyLXRhYj4KICAgICAgICAgIDxwYXBlci10YWIgdmlldy1pZD0ic2NhdHRlci1wbG90LW1hdHJpeC12aWV3Ij4KICAgICAgICAgICAgU0NBVFRFUiBQTE9UIE1BVFJJWCBWSUVXCiAgICAgICAgICA8L3BhcGVyLXRhYj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImhlbHAtYW5kLWZlZWRiYWNrIj4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2J1Z1JlcG9ydFVybF1dIj4KICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZiQ9IltbYnVnUmVwb3J0VXJsXV0iCiAgICAgICAgICAgICAgICB0YXJnZXQ9Il9ibGFuayIKICAgICAgICAgICAgICAgIHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgICAgIGlkPSJidWctcmVwb3J0IgogICAgICAgICAgICAgICAgICByYWlzZWQKICAgICAgICAgICAgICAgICAgdGl0bGU9IlNlbmQgYSBidWcgcmVwb3J0IG9yIGZlYXR1cmUgcmVxdWVzdCIKICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgQnVnIFJlcG9ydCAvIEZlYXR1cmUgUmVxdWVzdAogICAgICAgICAgICAgICAgPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbaGVscFVybF1dIj4KICAgICAgICAgICAgICA8YSBocmVmJD0iW1toZWxwVXJsXV0iIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIG5vcmVmZXJyZXIiPgogICAgICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgICAgICAgICAgIGljb249ImhlbHAtb3V0bGluZSIKICAgICAgICAgICAgICAgICAgdGl0bGU9IlZpZXcgZG9jdW1lbnRhdGlvbiIKICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9wYXBlci10YWJzPgogICAgICA8L3BhcGVyLXRvb2xiYXI+CiAgICAgIDxpcm9uLXBhZ2VzIHNlbGVjdGVkPSJbW19zZWxlY3RlZFRhYl1dIiBjbGFzcz0iZml0IHRhYi12aWV3Ij4KICAgICAgICA8ZGl2IGlkPSIwIiBjbGFzcz0idGFiIj4KICAgICAgICAgIDx0Zi1ocGFyYW1zLXRhYmxlLXZpZXcKICAgICAgICAgICAgYmFja2VuZD0iW1tiYWNrZW5kXV0iCiAgICAgICAgICAgIGV4cGVyaW1lbnQtbmFtZT0iW1tleHBlcmltZW50TmFtZV1dIgogICAgICAgICAgICB2aXNpYmxlLXNjaGVtYT0iW1tjb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWFdXSIKICAgICAgICAgICAgc2Vzc2lvbi1ncm91cHM9Iltbc2Vzc2lvbkdyb3Vwc11dIgogICAgICAgICAgICBlbmFibGUtc2hvdy1tZXRyaWNzCiAgICAgICAgICA+CiAgICAgICAgICA8L3RmLWhwYXJhbXMtdGFibGUtdmlldz4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGlkPSIxIiBjbGFzcz0idGFiIj4KICAgICAgICAgIDx0Zi1ocGFyYW1zLXBhcmFsbGVsLWNvb3Jkcy12aWV3CiAgICAgICAgICAgIGJhY2tlbmQ9IltbYmFja2VuZF1dIgogICAgICAgICAgICBleHBlcmltZW50LW5hbWU9IltbZXhwZXJpbWVudE5hbWVdXSIKICAgICAgICAgICAgY29uZmlndXJhdGlvbj0iW1tjb25maWd1cmF0aW9uXV0iCiAgICAgICAgICAgIHNlc3Npb24tZ3JvdXBzPSJbW3Nlc3Npb25Hcm91cHNdXSIKICAgICAgICAgID4KICAgICAgICAgIDwvdGYtaHBhcmFtcy1wYXJhbGxlbC1jb29yZHMtdmlldz4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGlkPSIyIiBjbGFzcz0idGFiIj4KICAgICAgICAgIDx0Zi1ocGFyYW1zLXNjYXR0ZXItcGxvdC1tYXRyaXgtdmlldwogICAgICAgICAgICBiYWNrZW5kPSJbW2JhY2tlbmRdXSIKICAgICAgICAgICAgZXhwZXJpbWVudC1uYW1lPSJbW2V4cGVyaW1lbnROYW1lXV0iCiAgICAgICAgICAgIGNvbmZpZ3VyYXRpb249IltbY29uZmlndXJhdGlvbl1dIgogICAgICAgICAgICBzZXNzaW9uLWdyb3Vwcz0iW1tzZXNzaW9uR3JvdXBzXV0iCiAgICAgICAgICA+CiAgICAgICAgICA8L3RmLWhwYXJhbXMtc2NhdHRlci1wbG90LW1hdHJpeC12aWV3PgogICAgICAgIDwvZGl2PgogICAgICA8L2lyb24tcGFnZXM+CiAgICA8L3BhcGVyLWhlYWRlci1wYW5lbD4KCiAgICA8c3R5bGU+CiAgICAgIC50YWItdmlldyB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CiAgICAgIC50YWItYmFyIHsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoCiAgICAgICAgICAtLXRiLXRvb2xiYXItYmFja2dyb3VuZC1jb2xvciwKICAgICAgICAgIHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpCiAgICAgICAgKTsKICAgICAgfQogICAgICAudGFiIHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KICAgICAgcGFwZXItdGFicyB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICAtLXBhcGVyLXRhYnMtc2VsZWN0aW9uLWJhci1jb2xvcjogd2hpdGU7CiAgICAgICAgLS1wYXBlci10YWJzLWNvbnRlbnQ6IHsKICAgICAgICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOwogICAgICAgIH0KICAgICAgfQogICAgICB0Zi1ocGFyYW1zLXRhYmxlLXZpZXcgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQogICAgICAuaGVscC1hbmQtZmVlZGJhY2sgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OyAvKiBFbnN1cmUgdGhhdCBpY29ucyBzdGF5IGFsaWduZWQgKi8KICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICB9CiAgICAgICNidWctcmVwb3J0IHsKICAgICAgICBib3JkZXI6IHNvbGlkIGJsYWNrOwogICAgICAgIGJhY2tncm91bmQ6IHJlZDsKICAgICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOwogICAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmRzOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBtYXgtd2lkdGg6IDE1MHB4OwogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgIH0KICAgICAgLmhlbHAtYW5kLWZlZWRiYWNrIGEgewogICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYCx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxnSXQucHJvdG90eXBlLCJiYWNrZW5kIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLGdJdC5wcm90b3R5cGUsImhlbHBVcmwiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sZ0l0LnByb3RvdHlwZSwiYnVnUmVwb3J0VXJsIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLGdJdC5wcm90b3R5cGUsImV4cGVyaW1lbnROYW1lIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLGdJdC5wcm90b3R5cGUsImNvbmZpZ3VyYXRpb24iLHZvaWQgMCksdChbbyh7dHlwZTpBcnJheX0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLGdJdC5wcm90b3R5cGUsInNlc3Npb25Hcm91cHMiLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXJ9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sZ0l0LnByb3RvdHlwZSwiX3NlbGVjdGVkVGFiIix2b2lkIDApLGdJdD10KFtpKCJ0Zi1ocGFyYW1zLXNlc3Npb25zLXBhbmUiKV0sZ0l0KTtjbGFzcyBfSXR7Y29uc3RydWN0b3IodCxlLG49ITApe3RoaXMuX2FwaVVybD10LHRoaXMuX3JlcXVlc3RNYW5hZ2VyPWUsdGhpcy5fdXNlSHR0cEdldD1ufWdldEV4cGVyaW1lbnQodCl7cmV0dXJuIHRoaXMuX3NlbmRSZXF1ZXN0KCJleHBlcmltZW50Iix0KX1nZXREb3dubG9hZFVybCh0LGUsbil7cmV0dXJuIHRoaXMuX2FwaVVybCsiL2Rvd25sb2FkX2RhdGE/IituZXcgVVJMU2VhcmNoUGFyYW1zKHtmb3JtYXQ6dCxjb2x1bW5zVmlzaWJpbGl0eTpKU09OLnN0cmluZ2lmeShuKSxyZXF1ZXN0OkpTT04uc3RyaW5naWZ5KGUpfSl9bGlzdFNlc3Npb25Hcm91cHModCl7cmV0dXJuIHRoaXMuX3NlbmRSZXF1ZXN0KCJzZXNzaW9uX2dyb3VwcyIsdCl9bGlzdE1ldHJpY0V2YWxzKHQpe3JldHVybiB0aGlzLl9zZW5kUmVxdWVzdCgibWV0cmljX2V2YWxzIix0KX1fc2VuZFJlcXVlc3QodCxlKXtpZih0aGlzLl91c2VIdHRwR2V0KXtjb25zdCBuPWVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShlKSk7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodGhpcy5fYXBpVXJsKyIvIit0KyI/cmVxdWVzdD0iK24pfWNvbnN0IG49bmV3IHVyO3JldHVybiBuLndpdGhDcmVkZW50aWFscz0hMCxuLm1ldGhvZFR5cGU9Y3IuUE9TVCxuLmNvbnRlbnRUeXBlPSJ0ZXh0L3BsYWluIixuLmJvZHk9SlNPTi5zdHJpbmdpZnkoZSksdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdFdpdGhPcHRpb25zKHRoaXMuX2FwaVVybCsiLyIrdCxuKX19bGV0IHlJdD1jbGFzcyBleHRlbmRzKHRyKHllKSl7cmVsb2FkKCl7dGhpcy4kWyJxdWVyeS1wYW5lIl0ucmVsb2FkKCl9fTt5SXQudGVtcGxhdGU9X2VgCiAgICA8aHBhcmFtcy1zcGxpdC1sYXlvdXQ+CiAgICAgIDxkaXYgc2xvdD0iY29udGVudCIgY2xhc3M9InNpZGViYXIiPgogICAgICAgIDx0Zi1ocGFyYW1zLXF1ZXJ5LXBhbmUKICAgICAgICAgIGlkPSJxdWVyeS1wYW5lIgogICAgICAgICAgYmFja2VuZD0iW1tiYWNrZW5kXV0iCiAgICAgICAgICBleHBlcmltZW50LW5hbWU9IltbZXhwZXJpbWVudE5hbWVdXSIKICAgICAgICAgIGNvbmZpZ3VyYXRpb249Int7X2NvbmZpZ3VyYXRpb259fSIKICAgICAgICAgIHNlc3Npb24tZ3JvdXBzPSJ7e19zZXNzaW9uR3JvdXBzfX0iCiAgICAgICAgICBkYXRhLWxvYWRlZC13aXRoLW5vbi1lbXB0eS1ocGFyYW1zPSJ7e19kYXRhTG9hZGVkV2l0aE5vbkVtcHR5SHBhcmFtc319IgogICAgICAgICAgZGF0YS1sb2FkZWQtd2l0aC1lbXB0eS1ocGFyYW1zPSJ7e19kYXRhTG9hZGVkV2l0aEVtcHR5SHBhcmFtc319IgogICAgICAgID4KICAgICAgICA8L3RmLWhwYXJhbXMtcXVlcnktcGFuZT4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgc2xvdD0iY29udGVudCIgY2xhc3M9ImNlbnRlciI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTG9hZGVkV2l0aEVtcHR5SHBhcmFtc11dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtd2FybmluZyI+CiAgICAgICAgICAgIDxoMz5ObyBocGFyYW1zIGRhdGEgd2FzIGZvdW5kLjwvaDM+CiAgICAgICAgICAgIDxwPlByb2JhYmxlIGNhdXNlczo8L3A+CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICA8bGk+WW91IGhhdmVu4oCZdCB3cml0dGVuIGFueSBocGFyYW1zIGRhdGEgdG8geW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgIEV2ZW50IGZpbGVzIGFyZSBzdGlsbCBiZWluZyBsb2FkZWQgKHRyeSByZWxvYWRpbmcgdGhpcyBwYWdlKS4KICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgIDxsaT5UZW5zb3JCb2FyZCBjYW7igJl0IGZpbmQgeW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICA8L3VsPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW914oCZcmUgbmV3IHRvIHVzaW5nIFRlbnNvckJvYXJkLCBhbmQgd2FudCB0byBmaW5kIG91dCBob3cgdG8KICAgICAgICAgICAgICBhZGQgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIgogICAgICAgICAgICAgICAgPlJFQURNRTwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgcGVyaGFwcyB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCIKICAgICAgICAgICAgICAgID5UZW5zb3JCb2FyZCB0dXRvcmlhbDwvYQogICAgICAgICAgICAgID4uCiAgICAgICAgICAgIDwvcD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciCiAgICAgICAgICAgICAgICA+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgY29uc2lkZXIgZmlsaW5nIGFuIGlzc3VlIG9uIEdpdEh1Yi4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTG9hZGVkV2l0aE5vbkVtcHR5SHBhcmFtc11dIj4KICAgICAgICAgIDx0Zi1ocGFyYW1zLXNlc3Npb25zLXBhbmUKICAgICAgICAgICAgaWQ9InNlc3Npb25zLXBhbmUiCiAgICAgICAgICAgIGJhY2tlbmQ9IltbYmFja2VuZF1dIgogICAgICAgICAgICBoZWxwLXVybD0iW1toZWxwVXJsXV0iCiAgICAgICAgICAgIGJ1Zy1yZXBvcnQtdXJsPSJbW2J1Z1JlcG9ydFVybF1dIgogICAgICAgICAgICBleHBlcmltZW50LW5hbWU9IltbZXhwZXJpbWVudE5hbWVdXSIKICAgICAgICAgICAgY29uZmlndXJhdGlvbj0iW1tfY29uZmlndXJhdGlvbl1dIgogICAgICAgICAgICBzZXNzaW9uLWdyb3Vwcz0iW1tfc2Vzc2lvbkdyb3Vwc11dIgogICAgICAgICAgPgogICAgICAgICAgPC90Zi1ocGFyYW1zLXNlc3Npb25zLXBhbmU+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICA8L2hwYXJhbXMtc3BsaXQtbGF5b3V0PgogICAgPHN0eWxlPgogICAgICBocGFyYW1zLXNwbGl0LWxheW91dCB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5zaWRlYmFyIHsKICAgICAgICB3aWR0aDogMjAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgbWluLXdpZHRoOiAxMCU7CiAgICAgIH0KCiAgICAgIC5jZW50ZXIgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICB3aWR0aDogODAlOwogICAgICB9CgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgLm5vLWRhdGEtd2FybmluZyB7CiAgICAgICAgbWF4LXdpZHRoOiA1NDBweDsKICAgICAgICBtYXJnaW46IDgwcHggYXV0byAwIGF1dG87CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYCx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixfSXQpXSx5SXQucHJvdG90eXBlLCJiYWNrZW5kIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLHlJdC5wcm90b3R5cGUsImV4cGVyaW1lbnROYW1lIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLHlJdC5wcm90b3R5cGUsImhlbHBVcmwiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0seUl0LnByb3RvdHlwZSwiYnVnUmVwb3J0VXJsIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLHlJdC5wcm90b3R5cGUsIl9jb25maWd1cmF0aW9uIix2b2lkIDApLHQoW28oe3R5cGU6QXJyYXl9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSx5SXQucHJvdG90eXBlLCJfc2Vzc2lvbkdyb3VwcyIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHlJdC5wcm90b3R5cGUsIl9kYXRhTG9hZGVkV2l0aE5vbkVtcHR5SHBhcmFtcyIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHlJdC5wcm90b3R5cGUsIl9kYXRhTG9hZGVkV2l0aEVtcHR5SHBhcmFtcyIsdm9pZCAwKSx5SXQ9dChbaSgidGYtaHBhcmFtcy1tYWluIildLHlJdCk7Y29uc3Qgdkl0PSJ0cnVlIj09PW5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCkuZ2V0KCJ0ZW5zb3Jib2FyZENvbGFiIik7bGV0IGJJdD1jbGFzcyBleHRlbmRzKHRyKHllKSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2JhY2tlbmQ9bmV3IF9JdChncigpLnBsdWdpblJvdXRlKCJocGFyYW1zIiwiIiksbmV3IGhyLHZJdCl9cmVsb2FkKCl7dGhpcy4kWyJocGFyYW1zLW1haW4iXS5yZWxvYWQoKX19O2JJdC50ZW1wbGF0ZT1fZWAKICAgIDwhLS0gVGVuc29yQm9hcmQgZG9lcyBub3Qgc3BlY2lmeSBhbiBleHBlcmltZW50TmFtZS4gQ3VycmVudGx5IGl0IG9ubHkKICAgICAgICAgc3VwcG9ydHMgb25lIGV4cGVyaW1lbnQgcGVyIGludm9jYXRpb24uIC0tPgogICAgPHRmLWhwYXJhbXMtbWFpbgogICAgICBpZD0iaHBhcmFtcy1tYWluIgogICAgICBiYWNrZW5kPSJbW19iYWNrZW5kXV0iCiAgICAgIGV4cGVyaW1lbnQtbmFtZT0iIgogICAgPgogICAgPC90Zi1ocGFyYW1zLW1haW4+CiAgYCx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxiSXQucHJvdG90eXBlLCJfYmFja2VuZCIsdm9pZCAwKSxiSXQ9dChbaSgidGYtaHBhcmFtcy1kYXNoYm9hcmQiKV0sYkl0KTtsZXQgeEl0PWNsYXNzIGV4dGVuZHModHIoeWUpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5hY3R1YWxTaXplPSExLHRoaXMuYnJpZ2h0bmVzc0FkanVzdG1lbnQ9LjUsdGhpcy5jb250cmFzdFBlcmNlbnRhZ2U9MCx0aGlzLl9tZXRhZGF0YUNhbmNlbGxlcj1uZXcgTk8sdGhpcy5faW1hZ2VDYW5jZWxsZXI9bmV3IE5PLHRoaXMuX3N0ZXBzPVtdLHRoaXMuX2lzSW1hZ2VMb2FkaW5nPSExfWdldCBfcnVuQ29sb3IoKXtyZXR1cm4gQU8odGhpcy5ydW4pfWdldCBfaGFzQXRMZWFzdE9uZVN0ZXAoKXt2YXIgdD10aGlzLl9zdGVwcztyZXR1cm4hIXQmJnQubGVuZ3RoPjB9Z2V0IF9oYXNNdWx0aXBsZVN0ZXBzKCl7dmFyIHQ9dGhpcy5fc3RlcHM7cmV0dXJuISF0JiZ0Lmxlbmd0aD4xfWdldCBfY3VycmVudFN0ZXAoKXtyZXR1cm4gdGhpcy5fc3RlcHNbdGhpcy5fc3RlcEluZGV4XXx8bnVsbH1nZXQgX3N0ZXBWYWx1ZSgpe3ZhciB0PXRoaXMuX2N1cnJlbnRTdGVwO3JldHVybiB0P3Quc3RlcDowfWdldCBfY3VycmVudFdhbGxUaW1lKCl7dmFyIHQ9dGhpcy5fY3VycmVudFN0ZXA7cmV0dXJuIHQ/T08odC53YWxsX3RpbWUpOiIifWdldCBfbWF4U3RlcEluZGV4KCl7cmV0dXJuIHRoaXMuX3N0ZXBzLmxlbmd0aC0xfWdldCBfc2FtcGxlVGV4dCgpe3JldHVybmAke3RoaXMuc2FtcGxlKzF9YH1nZXQgX2hhc011bHRpcGxlU2FtcGxlcygpe3JldHVybiB0aGlzLm9mU2FtcGxlcz4xfV9nZXRBcmlhRXhwYW5kZWQoKXtyZXR1cm4gdGhpcy5hY3R1YWxTaXplPyJ0cnVlIjoiZmFsc2UifWF0dGFjaGVkKCl7dGhpcy5yZWxvYWQoKX1yZWxvYWQoKXtpZighdGhpcy5pc0F0dGFjaGVkKXJldHVybjt0aGlzLl9tZXRhZGF0YUNhbmNlbGxlci5jYW5jZWxBbGwoKTtjb25zdCB0PVZPKGdyKCkucGx1Z2luUm91dGUoImltYWdlcyIsIi9pbWFnZXMiKSx7dGFnOnRoaXMudGFnLHJ1bjp0aGlzLnJ1bixzYW1wbGU6dGhpcy5zYW1wbGV9KSxlPXRoaXMuX21ldGFkYXRhQ2FuY2VsbGVyLmNhbmNlbGxhYmxlKCh0PT57aWYodC5jYW5jZWxsZWQpcmV0dXJuO2NvbnN0IGU9dC52YWx1ZS5tYXAodGhpcy5fY3JlYXRlU3RlcERhdHVtLmJpbmQodGhpcykpO3RoaXMuc2V0KCJfc3RlcHMiLGUpLHRoaXMuc2V0KCJfc3RlcEluZGV4IixlLmxlbmd0aC0xKX0pKTt0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbihlKX1fY3JlYXRlU3RlcERhdHVtKHQpe2xldCBlPWdyKCkucGx1Z2luUm91dGUoImltYWdlcyIsIi9pbmRpdmlkdWFsSW1hZ2UiKTtyZXR1cm4gZT1WTyhlLHt0czp0LndhbGxfdGltZX0pLGUrPSImIit0LnF1ZXJ5LHt3YWxsX3RpbWU6bmV3IERhdGUoMWUzKnQud2FsbF90aW1lKSxzdGVwOnQuc3RlcCx1cmw6ZX19X3VwZGF0ZUltYWdlVXJsKCl7dmFyIHQ9dGhpcy5fY3VycmVudFN0ZXAsZT10aGlzLmJyaWdodG5lc3NBZGp1c3RtZW50LG49dGhpcy5jb250cmFzdFBlcmNlbnRhZ2U7aWYoIXQpcmV0dXJuO2NvbnN0IGk9bmV3IEltYWdlO3RoaXMuX2ltYWdlQ2FuY2VsbGVyLmNhbmNlbEFsbCgpLGkub25sb2FkPWkub25lcnJvcj10aGlzLl9pbWFnZUNhbmNlbGxlci5jYW5jZWxsYWJsZSgodD0+e2lmKHQuY2FuY2VsbGVkKXJldHVybjtjb25zdCBlPXRoaXMuJCQoIiNtYWluLWltYWdlLWNvbnRhaW5lciIpO2UudGV4dENvbnRlbnQ9IiIscWkoZSkuYXBwZW5kQ2hpbGQoaSksdGhpcy5zZXQoIl9pc0ltYWdlTG9hZGluZyIsITEpfSkpLmJpbmQodGhpcyksaS5zdHlsZS5maWx0ZXI9YGNvbnRyYXN0KCR7bn0lKSBgLGkuc3R5bGUuZmlsdGVyKz1gYnJpZ2h0bmVzcygke2V9KWAsdGhpcy5zZXQoIl9pc0ltYWdlTG9hZGluZyIsITApLGkuc3JjPXQudXJsfV9oYW5kbGVUYXAodCl7dGhpcy5zZXQoImFjdHVhbFNpemUiLCF0aGlzLmFjdHVhbFNpemUpfV90b0xvY2FsZVN0cmluZyh0KXtyZXR1cm4gdC50b0xvY2FsZVN0cmluZygpfX07eEl0LnRlbXBsYXRlPV9lYAogICAgPHRmLWNhcmQtaGVhZGluZwogICAgICB0YWc9IltbdGFnXV0iCiAgICAgIHJ1bj0iW1tydW5dXSIKICAgICAgZGlzcGxheS1uYW1lPSJbW3RhZ01ldGFkYXRhLmRpc3BsYXlOYW1lXV0iCiAgICAgIGRlc2NyaXB0aW9uPSJbW3RhZ01ldGFkYXRhLmRlc2NyaXB0aW9uXV0iCiAgICAgIGNvbG9yPSJbW19ydW5Db2xvcl1dIgogICAgPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc011bHRpcGxlU2FtcGxlc11dIj4KICAgICAgICA8ZGl2PnNhbXBsZTogW1tfc2FtcGxlVGV4dF1dIG9mIFtbb2ZTYW1wbGVzXV08L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNBdExlYXN0T25lU3RlcF1dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLXJvdyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIj4KICAgICAgICAgICAgc3RlcAogICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQiCiAgICAgICAgICAgICAgPltbX3RvTG9jYWxlU3RyaW5nKF9zdGVwVmFsdWUpXV08L3NwYW4KICAgICAgICAgICAgPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIGhlYWRpbmctcmlnaHQgZGF0ZXRpbWUiPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2N1cnJlbnRXYWxsVGltZV1dIj4KICAgICAgICAgICAgICBbW19jdXJyZW50V2FsbFRpbWVdXQogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJsYWJlbCByaWdodCI+CiAgICAgICAgICAgIDxwYXBlci1zcGlubmVyLWxpdGUgYWN0aXZlIGhpZGRlbiQ9IltbIV9pc0ltYWdlTG9hZGluZ11dIj4KICAgICAgICAgICAgPC9wYXBlci1zcGlubmVyLWxpdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNNdWx0aXBsZVN0ZXBzXV0iPgogICAgICAgIDxkaXY+CiAgICAgICAgICA8cGFwZXItc2xpZGVyCiAgICAgICAgICAgIGlkPSJzdGVwcyIKICAgICAgICAgICAgaW1tZWRpYXRlLXZhbHVlPSJ7e19zdGVwSW5kZXh9fSIKICAgICAgICAgICAgbWF4PSJbW19tYXhTdGVwSW5kZXhdXSIKICAgICAgICAgICAgbWF4LW1hcmtlcnM9IltbX21heFN0ZXBJbmRleF1dIgogICAgICAgICAgICBzbmFwcwogICAgICAgICAgICBzdGVwPSIxIgogICAgICAgICAgICB2YWx1ZT0ie3tfc3RlcEluZGV4fX0iCiAgICAgICAgICA+PC9wYXBlci1zbGlkZXI+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L3RmLWNhcmQtaGVhZGluZz4KCiAgICA8IS0tIFNlbWFudGljYWxseSBhIGJ1dHRvbiBidXQgPGltZz4gaW5zaWRlIGEgPGJ1dHRvbj4gZGlzYWxsb3dzIHVzZXIgdG8gZG8KICAgIGFuIGludGVyZXN0aW5nIG9wZXJhdGlvbiBsaWtlICJDb3B5IEltYWdlIiBpbiBub24tQ2hyb21pdW0gYnJvd3NlcnMuIC0tPgogICAgPGEKICAgICAgaWQ9Im1haW4taW1hZ2UtY29udGFpbmVyIgogICAgICByb2xlPSJidXR0b24iCiAgICAgIGFyaWEtbGFiZWw9IlRvZ2dsZSBhY3R1YWwgc2l6ZSIKICAgICAgYXJpYS1leHBhbmRlZCQ9IltbX2dldEFyaWFFeHBhbmRlZChhY3R1YWxTaXplKV1dIgogICAgICBvbi10YXA9Il9oYW5kbGVUYXAiCiAgICA+PC9hPgoKICAgIDxzdHlsZSBpbmNsdWRlPSJ0Zi1jYXJkLWhlYWRpbmctc3R5bGUiPgogICAgICAvKiogTWFrZSBidXR0b24gYSBkaXYuICovCiAgICAgIGJ1dHRvbiB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgYmFja2dyb3VuZDogbm9uZTsKICAgICAgICBib3JkZXI6IDA7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQoKICAgICAgLyoqIEZpcmVmb3g6IEdldCByaWQgb2YgZG90dGVkIGxpbmUgaW5zaWRlIGJ1dHRvbi4gKi8KICAgICAgYnV0dG9uOjotbW96LWZvY3VzLWlubmVyIHsKICAgICAgICBib3JkZXI6IDA7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQoKICAgICAgLyoqIEZpcmVmb3g6IFNpbXVsYXRlIENocm9tZSdzIG91dGVyIGdsb3cgb24gYnV0dG9uIHdoZW4gZm9jdXNlZC4gKi8KICAgICAgYnV0dG9uOi1tb3otZm9jdXNyaW5nIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJveC1zaGFkb3c6IDBweCAwcHggMXB4IDJweCBIaWdobGlnaHQ7CiAgICAgIH0KCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMzUwcHg7CiAgICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtYXJnaW46IDAgMTVweCA0MHB4IDA7CiAgICAgICAgb3ZlcmZsb3cteDogYXV0bzsKICAgICAgfQoKICAgICAgLyoqIFdoZW4gYWN0dWFsIHNpemUgc2hvd24gaXMgb24sIHVzZSB0aGUgYWN0dWFsIGltYWdlIHdpZHRoLiAqLwogICAgICA6aG9zdChbYWN0dWFsLXNpemVdKSB7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICAgIHdpZHRoOiBhdXRvOwogICAgICB9CgogICAgICA6aG9zdChbYWN0dWFsLXNpemVdKSAjbWFpbi1pbWFnZS1jb250YWluZXIgewogICAgICAgIG1heC1oZWlnaHQ6IG5vbmU7CiAgICAgICAgd2lkdGg6IGF1dG87CiAgICAgIH0KCiAgICAgIDpob3N0KFthY3R1YWwtc2l6ZV0pICNtYWluLWltYWdlLWNvbnRhaW5lciBpbWcgewogICAgICAgIHdpZHRoOiBhdXRvOwogICAgICB9CgogICAgICBwYXBlci1zcGlubmVyLWxpdGUgewogICAgICAgIHdpZHRoOiAxNHB4OwogICAgICAgIGhlaWdodDogMTRweDsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdGV4dC1ib3R0b207CiAgICAgICAgLS1wYXBlci1zcGlubmVyLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgfQoKICAgICAgI3N0ZXBzIHsKICAgICAgICBoZWlnaHQ6IDE1cHg7CiAgICAgICAgbWFyZ2luOiAwIDAgMCAtMTVweDsKICAgICAgICAvKgogICAgICAgICAqIDMxIGNvbWVzIGZyb20gYWRkaW5nIGEgcGFkZGluZyBvZiAxNXB4IGZyb20gYm90aCBzaWRlcyBvZiB0aGUKICAgICAgICAgKiBwYXBlci1zbGlkZXIsIHN1YnRyYWN0aW5nIDFweCBzbyB0aGF0IHRoZSBzbGlkZXIgd2lkdGggYWxpZ25zCiAgICAgICAgICogd2l0aCB0aGUgaW1hZ2UgKHRoZSBsYXN0IHNsaWRlciBtYXJrZXIgdGFrZXMgdXAgMXB4KSwgYW5kCiAgICAgICAgICogYWRkaW5nIDJweCB0byBhY2NvdW50IGZvciBhIGJvcmRlciBvZiAxcHggb24gYm90aCBzaWRlcyBvZgogICAgICAgICAqIHRoZSBpbWFnZS4gMzAgLSAxICsgMi4KICAgICAgICAgKi8KICAgICAgICB3aWR0aDogY2FsYygxMDAlICsgMzFweCk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItYWN0aXZlLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLXN0YXJ0LWJvcmRlci1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItbWFya2Vycy1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItcGluLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1waW4tc3RhcnQtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICB9CgogICAgICAjbWFpbi1pbWFnZS1jb250YWluZXIgewogICAgICAgIG1heC1oZWlnaHQ6IDEwMjRweDsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgfQoKICAgICAgI21haW4taW1hZ2UtY29udGFpbmVyIGltZyB7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGltYWdlLXJlbmRlcmluZzogLW1vei1jcmlzcC1lZGdlczsKICAgICAgICBpbWFnZS1yZW5kZXJpbmc6IHBpeGVsYXRlZDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgIH0KCiAgICAgIHBhcGVyLWljb24tYnV0dG9uIHsKICAgICAgICBjb2xvcjogIzIxOTZmMzsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMDAlOwogICAgICAgIHdpZHRoOiAzMnB4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBwYWRkaW5nOiA0cHg7CiAgICAgIH0KICAgICAgcGFwZXItaWNvbi1idXR0b25bc2VsZWN0ZWRdIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10Yi11aS1saWdodC1hY2NlbnQpOwogICAgICB9CiAgICAgIFtoaWRkZW5dIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgogIGAsdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0seEl0LnByb3RvdHlwZSwicnVuIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLHhJdC5wcm90b3R5cGUsInRhZyIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSx4SXQucHJvdG90eXBlLCJzYW1wbGUiLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXJ9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0seEl0LnByb3RvdHlwZSwib2ZTYW1wbGVzIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLHhJdC5wcm90b3R5cGUsInRhZ01ldGFkYXRhIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHhJdC5wcm90b3R5cGUsImFjdHVhbFNpemUiLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXJ9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0seEl0LnByb3RvdHlwZSwiYnJpZ2h0bmVzc0FkanVzdG1lbnQiLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXJ9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0seEl0LnByb3RvdHlwZSwiY29udHJhc3RQZXJjZW50YWdlIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLGhyKV0seEl0LnByb3RvdHlwZSwicmVxdWVzdE1hbmFnZXIiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0seEl0LnByb3RvdHlwZSwiX21ldGFkYXRhQ2FuY2VsbGVyIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLHhJdC5wcm90b3R5cGUsIl9pbWFnZUNhbmNlbGxlciIsdm9pZCAwKSx0KFtvKHt0eXBlOkFycmF5LG5vdGlmeTohMH0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLHhJdC5wcm90b3R5cGUsIl9zdGVwcyIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcixub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0seEl0LnByb3RvdHlwZSwiX3N0ZXBJbmRleCIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHhJdC5wcm90b3R5cGUsIl9pc0ltYWdlTG9hZGluZyIsdm9pZCAwKSx0KFtzKCJydW4iKSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSx4SXQucHJvdG90eXBlLCJfcnVuQ29sb3IiLG51bGwpLHQoW3MoIl9zdGVwcyIpLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSx4SXQucHJvdG90eXBlLCJfaGFzQXRMZWFzdE9uZVN0ZXAiLG51bGwpLHQoW3MoIl9zdGVwcyIpLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSx4SXQucHJvdG90eXBlLCJfaGFzTXVsdGlwbGVTdGVwcyIsbnVsbCksdChbcygiX3N0ZXBzIiwiX3N0ZXBJbmRleCIpLGUoImRlc2lnbjp0eXBlIixPYmplY3QpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLHhJdC5wcm90b3R5cGUsIl9jdXJyZW50U3RlcCIsbnVsbCksdChbcygiX2N1cnJlbnRTdGVwIiksZSgiZGVzaWduOnR5cGUiLE51bWJlciksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0seEl0LnByb3RvdHlwZSwiX3N0ZXBWYWx1ZSIsbnVsbCksdChbcygiX2N1cnJlbnRTdGVwIiksZSgiZGVzaWduOnR5cGUiLFN0cmluZyksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0seEl0LnByb3RvdHlwZSwiX2N1cnJlbnRXYWxsVGltZSIsbnVsbCksdChbcygiX3N0ZXBzIiksZSgiZGVzaWduOnR5cGUiLE51bWJlciksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0seEl0LnByb3RvdHlwZSwiX21heFN0ZXBJbmRleCIsbnVsbCksdChbcygic2FtcGxlIiksZSgiZGVzaWduOnR5cGUiLFN0cmluZyksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0seEl0LnByb3RvdHlwZSwiX3NhbXBsZVRleHQiLG51bGwpLHQoW3MoIm9mU2FtcGxlcyIpLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSx4SXQucHJvdG90eXBlLCJfaGFzTXVsdGlwbGVTYW1wbGVzIixudWxsKSx0KFthKCJydW4iLCJ0YWciKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLHhJdC5wcm90b3R5cGUsInJlbG9hZCIsbnVsbCksdChbYSgiX2N1cnJlbnRTdGVwIiwiYnJpZ2h0bmVzc0FkanVzdG1lbnQiLCJjb250cmFzdFBlcmNlbnRhZ2UiKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLHhJdC5wcm90b3R5cGUsIl91cGRhdGVJbWFnZVVybCIsbnVsbCkseEl0PXQoW2koInRmLWltYWdlLWxvYWRlciIpXSx4SXQpO2xldCB3SXQ9Y2xhc3MgZXh0ZW5kcyh0cih5ZSkpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnJlbG9hZE9uUmVhZHk9ITAsdGhpcy5fZGVmYXVsdEJyaWdodG5lc3NBZGp1c3RtZW50PTEsdGhpcy5fZGVmYXVsdENvbnRyYXN0UGVyY2VudGFnZT0xMDAsdGhpcy5fYnJpZ2h0bmVzc0FkanVzdG1lbnQ9MSx0aGlzLl9jb250cmFzdFBlcmNlbnRhZ2U9MTAwLHRoaXMuX3JlcXVlc3RNYW5hZ2VyPW5ldyBocn1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5yZWxvYWRPblJlYWR5JiZ0aGlzLnJlbG9hZCgpfXJlbG9hZCgpe3RoaXMuX2ZldGNoVGFncygpLnRoZW4oKCgpPT57dGhpcy5fcmVsb2FkSW1hZ2VzKCl9KSl9X2ZldGNoVGFncygpe2NvbnN0IHQ9Z3IoKS5wbHVnaW5Sb3V0ZSgiaW1hZ2VzIiwiL3RhZ3MiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKCh0PT57aWYod2UuaXNFcXVhbCh0LHRoaXMuX3J1blRvVGFnSW5mbykpcmV0dXJuO2NvbnN0IGU9b3Iod2UubWFwVmFsdWVzKHQsKHQ9Pk9iamVjdC5rZXlzKHQpKSkpO3RoaXMuc2V0KCJfZGF0YU5vdEZvdW5kIiwwPT09ZS5sZW5ndGgpLHRoaXMuc2V0KCJfcnVuVG9UYWdJbmZvIix0KSx0aGlzLmFzeW5jKCgoKT0+e3RoaXMuc2V0KCJfY2F0ZWdvcmllc0RvbVJlYWR5IiwhMCl9KSl9KSl9X3JlbG9hZEltYWdlcygpe3RoaXMucm9vdC5xdWVyeVNlbGVjdG9yQWxsKCJ0Zi1pbWFnZS1sb2FkZXIiKS5mb3JFYWNoKCh0PT57dC5yZWxvYWQoKX0pKX1fc2hvdWxkT3Blbih0KXtyZXR1cm4gdDw9Mn1fcmVzZXRCcmlnaHRuZXNzKCl7dGhpcy5fYnJpZ2h0bmVzc0FkanVzdG1lbnQ9dGhpcy5fZGVmYXVsdEJyaWdodG5lc3NBZGp1c3RtZW50fV9yZXNldENvbnRyYXN0KCl7dGhpcy5fY29udHJhc3RQZXJjZW50YWdlPXRoaXMuX2RlZmF1bHRDb250cmFzdFBlcmNlbnRhZ2V9Z2V0IF9icmlnaHRuZXNzSXNEZWZhdWx0KCl7cmV0dXJuIHRoaXMuX2JyaWdodG5lc3NBZGp1c3RtZW50PT09dGhpcy5fZGVmYXVsdEJyaWdodG5lc3NBZGp1c3RtZW50fWdldCBfY29udHJhc3RJc0RlZmF1bHQoKXtyZXR1cm4gdGhpcy5fY29udHJhc3RQZXJjZW50YWdlPT09dGhpcy5fZGVmYXVsdENvbnRyYXN0UGVyY2VudGFnZX1nZXQgX2NhdGVnb3JpZXMoKXt2YXIgdD10aGlzLl9ydW5Ub1RhZ0luZm8sZT10aGlzLl9zZWxlY3RlZFJ1bnMsbj10aGlzLl90YWdGaWx0ZXI7ZnVuY3Rpb24gaShlKXtjb25zdCBuPXRbZS5ydW5dW2UudGFnXS5zYW1wbGVzO3JldHVybiB3ZS5yYW5nZShuKS5tYXAoKHQ9Pk9iamVjdC5hc3NpZ24oe30sZSx7c2FtcGxlOnQsb2ZTYW1wbGVzOm59KSkpfXJldHVybiBTcih3ZS5tYXBWYWx1ZXModCwodD0+T2JqZWN0LmtleXModCkpKSxlLG4pLm1hcCgodD0+T2JqZWN0LmFzc2lnbih7fSx0LHtpdGVtczpbXS5jb25jYXQuYXBwbHkoW10sdC5pdGVtcy5tYXAoaSkpfSkpKX1fdGFnTWV0YWRhdGEodCxlLG4pe3JldHVybiB0W2VdW25dfX07dmFyIFNJdCxNSXQsRUl0O3dJdC50ZW1wbGF0ZT1fZWAKICAgIDx0Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyIiBzbG90PSJzaWRlYmFyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZXR0aW5ncyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJsaW5lLWl0ZW0iPgogICAgICAgICAgICAgIDxwYXBlci1jaGVja2JveCBjaGVja2VkPSJ7e19hY3R1YWxTaXplfX0iCiAgICAgICAgICAgICAgICA+U2hvdyBhY3R1YWwgaW1hZ2Ugc2l6ZTwvcGFwZXItY2hlY2tib3gKICAgICAgICAgICAgICA+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgICA8aDMgY2xhc3M9InRvb2x0aXAtY29udGFpbmVyIj5CcmlnaHRuZXNzIGFkanVzdG1lbnQ8L2gzPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJyZXNldHRhYmxlLXNsaWRlci1jb250YWluZXIiPgogICAgICAgICAgICAgIDxwYXBlci1zbGlkZXIKICAgICAgICAgICAgICAgIG1pbj0iMCIKICAgICAgICAgICAgICAgIG1heD0iMiIKICAgICAgICAgICAgICAgIHNuYXBzCiAgICAgICAgICAgICAgICBwaW4KICAgICAgICAgICAgICAgIHN0ZXA9IjAuMDEiCiAgICAgICAgICAgICAgICB2YWx1ZT0ie3tfYnJpZ2h0bmVzc0FkanVzdG1lbnR9fSIKICAgICAgICAgICAgICAgIGltbWVkaWF0ZS12YWx1ZT0ie3tfYnJpZ2h0bmVzc0FkanVzdG1lbnR9fSIKICAgICAgICAgICAgICA+PC9wYXBlci1zbGlkZXI+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgICAgICAgY2xhc3M9IngtYnV0dG9uIgogICAgICAgICAgICAgICAgb24tdGFwPSJfcmVzZXRCcmlnaHRuZXNzIgogICAgICAgICAgICAgICAgZGlzYWJsZWQ9IltbX2JyaWdodG5lc3NJc0RlZmF1bHRdXSIKICAgICAgICAgICAgICAgID5SZXNldDwvcGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgICAgPGgzIGNsYXNzPSJ0b29sdGlwLWNvbnRhaW5lciI+Q29udHJhc3QgYWRqdXN0bWVudDwvaDM+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InJlc2V0dGFibGUtc2xpZGVyLWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgPHBhcGVyLXNsaWRlcgogICAgICAgICAgICAgICAgbWluPSIwIgogICAgICAgICAgICAgICAgbWF4PSI1MDAiCiAgICAgICAgICAgICAgICBzbmFwcwogICAgICAgICAgICAgICAgcGluCiAgICAgICAgICAgICAgICBzdGVwPSIxIgogICAgICAgICAgICAgICAgdmFsdWU9Int7X2NvbnRyYXN0UGVyY2VudGFnZX19IgogICAgICAgICAgICAgICAgaW1tZWRpYXRlLXZhbHVlPSJ7e19jb250cmFzdFBlcmNlbnRhZ2V9fSIKICAgICAgICAgICAgICA+PC9wYXBlci1zbGlkZXI+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgICAgICAgY2xhc3M9IngtYnV0dG9uIgogICAgICAgICAgICAgICAgb24tdGFwPSJfcmVzZXRDb250cmFzdCIKICAgICAgICAgICAgICAgIGRpc2FibGVkPSJbW19jb250cmFzdElzRGVmYXVsdF1dIgogICAgICAgICAgICAgICAgPlJlc2V0PC9wYXBlci1idXR0b24KICAgICAgICAgICAgICA+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIHJ1bnMtc2VsZWN0b3IiPgogICAgICAgICAgPHRmLXJ1bnMtc2VsZWN0b3IKICAgICAgICAgICAgaWQ9InJ1bnMtc2VsZWN0b3IiCiAgICAgICAgICAgIHNlbGVjdGVkLXJ1bnM9Int7X3NlbGVjdGVkUnVuc319IgogICAgICAgICAgPjwvdGYtcnVucy1zZWxlY3Rvcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNlbnRlciIgc2xvdD0iY2VudGVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtd2FybmluZyI+CiAgICAgICAgICAgIDxoMz5ObyBpbWFnZSBkYXRhIHdhcyBmb3VuZC48L2gzPgogICAgICAgICAgICA8cD5Qcm9iYWJsZSBjYXVzZXM6PC9wPgogICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgPGxpPllvdSBoYXZlbuKAmXQgd3JpdHRlbiBhbnkgaW1hZ2UgZGF0YSB0byB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgICAgPGxpPlRlbnNvckJvYXJkIGNhbuKAmXQgZmluZCB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgIDwvdWw+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3XigJlyZSBuZXcgdG8gdXNpbmcgVGVuc29yQm9hcmQsIGFuZCB3YW50IHRvIGZpbmQgb3V0IGhvdyB0bwogICAgICAgICAgICAgIGFkZCBkYXRhIGFuZCBzZXQgdXAgeW91ciBldmVudCBmaWxlcywgY2hlY2sgb3V0IHRoZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQiCiAgICAgICAgICAgICAgICA+UkVBRE1FPC9hCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIGFuZCBwZXJoYXBzIHRoZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9nZXRfc3RhcnRlZC9zdW1tYXJpZXNfYW5kX3RlbnNvcmJvYXJkIgogICAgICAgICAgICAgICAgPlRlbnNvckJvYXJkIHR1dG9yaWFsPC9hCiAgICAgICAgICAgICAgPi4KICAgICAgICAgICAgPC9wPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW91IHRoaW5rIFRlbnNvckJvYXJkIGlzIGNvbmZpZ3VyZWQgcHJvcGVybHksIHBsZWFzZSBzZWUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI215LXRlbnNvcmJvYXJkLWlzbnQtc2hvd2luZy1hbnktZGF0YS13aGF0cy13cm9uZyIKICAgICAgICAgICAgICAgID50aGUgc2VjdGlvbiBvZiB0aGUgUkVBRE1FIGRldm90ZWQgdG8gbWlzc2luZyBkYXRhIHByb2JsZW1zPC9hCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIGFuZCBjb25zaWRlciBmaWxpbmcgYW4gaXNzdWUgb24gR2l0SHViLgogICAgICAgICAgICA8L3A+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDx0Zi10YWctZmlsdGVyZXIgdGFnLWZpbHRlcj0ie3tfdGFnRmlsdGVyfX0iPjwvdGYtdGFnLWZpbHRlcmVyPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfY2F0ZWdvcmllc11dIiBhcz0iY2F0ZWdvcnkiPgogICAgICAgICAgICA8dGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXcKICAgICAgICAgICAgICBjYXRlZ29yeT0iW1tjYXRlZ29yeV1dIgogICAgICAgICAgICAgIGluaXRpYWwtb3BlbmVkPSJbW19zaG91bGRPcGVuKGluZGV4KV1dIgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICAgICAgPHRmLWltYWdlLWxvYWRlcgogICAgICAgICAgICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgICAgICAgICAgIHJ1bj0iW1tpdGVtLnJ1bl1dIgogICAgICAgICAgICAgICAgICB0YWc9IltbaXRlbS50YWddXSIKICAgICAgICAgICAgICAgICAgc2FtcGxlPSJbW2l0ZW0uc2FtcGxlXV0iCiAgICAgICAgICAgICAgICAgIG9mLXNhbXBsZXM9IltbaXRlbS5vZlNhbXBsZXNdXSIKICAgICAgICAgICAgICAgICAgdGFnLW1ldGFkYXRhPSJbW190YWdNZXRhZGF0YShfcnVuVG9UYWdJbmZvLCBpdGVtLnJ1biwgaXRlbS50YWcpXV0iCiAgICAgICAgICAgICAgICAgIHJlcXVlc3QtbWFuYWdlcj0iW1tfcmVxdWVzdE1hbmFnZXJdXSIKICAgICAgICAgICAgICAgICAgYWN0dWFsLXNpemU9IltbX2FjdHVhbFNpemVdXSIKICAgICAgICAgICAgICAgICAgYnJpZ2h0bmVzcy1hZGp1c3RtZW50PSJbW19icmlnaHRuZXNzQWRqdXN0bWVudF1dIgogICAgICAgICAgICAgICAgICBjb250cmFzdC1wZXJjZW50YWdlPSJbW19jb250cmFzdFBlcmNlbnRhZ2VdXSIKICAgICAgICAgICAgICAgID48L3RmLWltYWdlLWxvYWRlcj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3RmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGYtZGFzaGJvYXJkLWxheW91dD4KICAgIDxzdHlsZSBpbmNsdWRlPSJkYXNoYm9hcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIC5yZXNldHRhYmxlLXNsaWRlci1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KICAgICAgLnJlc2V0dGFibGUtc2xpZGVyLWNvbnRhaW5lciBwYXBlci1zbGlkZXIgewogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgfQogICAgICAucmVzZXR0YWJsZS1zbGlkZXItY29udGFpbmVyIHBhcGVyLWJ1dHRvbiB7CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICB9CiAgICAgIC5yZXNldHRhYmxlLXNsaWRlci1jb250YWluZXIgcGFwZXItYnV0dG9uW2Rpc2FibGVkXSB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdW5zZXQ7CiAgICAgIH0KICAgICAgLngtYnV0dG9uIHsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tdGItdWktbGlnaHQtYWNjZW50KTsKICAgICAgICBjb2xvcjogdmFyKC0tdGItdWktZGFyay1hY2NlbnQpOwogICAgICB9CiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CiAgICAgIHBhcGVyLXNsaWRlciB7CiAgICAgICAgLS1wYXBlci1zbGlkZXItYWN0aXZlLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLXN0YXJ0LWJvcmRlci1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItbWFya2Vycy1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItcGluLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1waW4tc3RhcnQtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICB9CiAgICA8L3N0eWxlPgogIGAsdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSx3SXQucHJvdG90eXBlLCJyZWxvYWRPblJlYWR5Iix2b2lkIDApLHQoW28oe3R5cGU6QXJyYXl9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSx3SXQucHJvdG90eXBlLCJfc2VsZWN0ZWRSdW5zIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLHdJdC5wcm90b3R5cGUsIl9ydW5Ub1RhZ0luZm8iLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSx3SXQucHJvdG90eXBlLCJfZGF0YU5vdEZvdW5kIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sd0l0LnByb3RvdHlwZSwiX2FjdHVhbFNpemUiLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXJ9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sd0l0LnByb3RvdHlwZSwiX2RlZmF1bHRCcmlnaHRuZXNzQWRqdXN0bWVudCIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSx3SXQucHJvdG90eXBlLCJfZGVmYXVsdENvbnRyYXN0UGVyY2VudGFnZSIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSx3SXQucHJvdG90eXBlLCJfYnJpZ2h0bmVzc0FkanVzdG1lbnQiLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXJ9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sd0l0LnByb3RvdHlwZSwiX2NvbnRyYXN0UGVyY2VudGFnZSIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx3SXQucHJvdG90eXBlLCJfdGFnRmlsdGVyIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sd0l0LnByb3RvdHlwZSwiX2NhdGVnb3JpZXNEb21SZWFkeSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSx3SXQucHJvdG90eXBlLCJfcmVxdWVzdE1hbmFnZXIiLHZvaWQgMCksdChbcygiX2JyaWdodG5lc3NBZGp1c3RtZW50IiksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLHdJdC5wcm90b3R5cGUsIl9icmlnaHRuZXNzSXNEZWZhdWx0IixudWxsKSx0KFtzKCJfY29udHJhc3RQZXJjZW50YWdlIiksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLHdJdC5wcm90b3R5cGUsIl9jb250cmFzdElzRGVmYXVsdCIsbnVsbCksdChbcygiX3J1blRvVGFnSW5mbyIsIl9zZWxlY3RlZFJ1bnMiLCJfdGFnRmlsdGVyIiwiX2NhdGVnb3JpZXNEb21SZWFkeSIpLGUoImRlc2lnbjp0eXBlIixBcnJheSksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sd0l0LnByb3RvdHlwZSwiX2NhdGVnb3JpZXMiLG51bGwpLHdJdD10KFtpKCJ0Zi1pbWFnZS1kYXNoYm9hcmQiKV0sd0l0KSwoZnVuY3Rpb24odCl7dFt0LkNBTkNFTExFRD0xXT0iQ0FOQ0VMTEVEIn0pKFNJdHx8KFNJdD17fSkpLChmdW5jdGlvbih0KXt0W3QuVkVSVEVYPTFdPSJWRVJURVgiLHRbdC5GQUNFPTJdPSJGQUNFIix0W3QuQ09MT1I9M109IkNPTE9SIn0pKE1JdHx8KE1JdD17fSkpLChmdW5jdGlvbih0KXt0LlZFUlRFWD0iZmxvYXQzMiIsdC5GQUNFPSJpbnQzMiIsdC5DT0xPUj0idWludDgifSkoRUl0fHwoRUl0PXt9KSk7Y2xhc3MgVEl0e2NvbnN0cnVjdG9yKHQpe3RoaXMuX2NhbmNlbGxlcj1uZXcgTk8sdGhpcy5fcmVxdWVzdE1hbmFnZXI9dH1yZWxvYWQodCxlLG4pe3JldHVybiB0aGlzLl9jYW5jZWxsZXIuY2FuY2VsQWxsKCksdGhpcy5fZmV0Y2hNZXRhZGF0YSh0LGUsbil9X2ZldGNoRGF0YUJ5U3RlcCh0LGUsbixpLHIsbyl7Y29uc3QgYT1ncigpLnBsdWdpblJvdXRlKCJtZXNoIiwiL2RhdGEiLG5ldyBVUkxTZWFyY2hQYXJhbXMoe3RhZzplLHJ1bjp0LGNvbnRlbnRfdHlwZTpuLHNhbXBsZTpTdHJpbmcoaSksc3RlcDpTdHJpbmcocil9KSkscz1mdW5jdGlvbih0KXtsZXQgZT1bXTtmb3IobGV0IG49MDtuPHQubGVuZ3RoLzM7bisrKXtsZXQgaT1bXTtmb3IobGV0IGU9MDtlPDM7ZSsrKWkucHVzaCh0WzMqbitlXSk7ZS5wdXNoKGkpfXJldHVybiBlfSxsPXRoaXMuX2NhbmNlbGxlci5jYW5jZWxsYWJsZSgodD0+e2lmKHQuY2FuY2VsbGVkKXJldHVybiBQcm9taXNlLnJlamVjdCh7Y29kZTpTSXQuQ0FOQ0VMTEVELG1lc3NhZ2U6IlJlc3BvbnNlIHdhcyBpbnZhbGlkYXRlZC4ifSk7bGV0IGU9dC52YWx1ZTtzd2l0Y2gobil7Y2FzZSJWRVJURVgiOm8udmVydGljZXM9cyhuZXcgRmxvYXQzMkFycmF5KGUpKTticmVhaztjYXNlIkZBQ0UiOm8uZmFjZXM9cyhuZXcgSW50MzJBcnJheShlKSk7YnJlYWs7Y2FzZSJDT0xPUiI6by5jb2xvcnM9cyhuZXcgVWludDhBcnJheShlKSl9cmV0dXJuIG99KSk7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLmZldGNoKGEse21ldGhvZDoiR0VUIixoZWFkZXJzOntyZXNwb25zZVR5cGU6ImFycmF5YnVmZmVyIixjb250ZW50VHlwZTpFSXRbbl19fSkudGhlbigodD0+dC5hcnJheUJ1ZmZlcigpKSkudGhlbihsKX1mZXRjaERhdGEodCxlLG4saSl7bGV0IHI9W10sbz1uZXcgTWFwO3JldHVybiBPYmplY3Qua2V5cyhNSXQpLmZvckVhY2goKGE9Pnt0LmNvbXBvbmVudHMmMTw8TUl0W2FdJiZyLnB1c2godGhpcy5fZmV0Y2hEYXRhQnlTdGVwKGUsbixhLGksdC5zdGVwLG8pKX0pKSxQcm9taXNlLmFsbChyKX1fZmV0Y2hNZXRhZGF0YSh0LGUsbil7dGhpcy5fY2FuY2VsbGVyLmNhbmNlbEFsbCgpO2NvbnN0IGk9Z3IoKS5wbHVnaW5Sb3V0ZSgibWVzaCIsIi9tZXNoZXMiLG5ldyBVUkxTZWFyY2hQYXJhbXMoe3RhZzplLHJ1bjp0LHNhbXBsZTpufSkpLHI9dGhpcy5fY2FuY2VsbGVyLmNhbmNlbGxhYmxlKCh0PT50LmNhbmNlbGxlZD9Qcm9taXNlLnJlamVjdCh7Y29kZTpTSXQuQ0FOQ0VMTEVELG1lc3NhZ2U6IlJlc3BvbnNlIHdhcyBpbnZhbGlkYXRlZC4ifSk6dC52YWx1ZSkpO3JldHVybiB0aGlzLl9yZXF1ZXN0TWFuYWdlci5mZXRjaChpKS50aGVuKCh0PT50Lmpzb24oKSkpLnRoZW4ocikudGhlbih0aGlzLl9wcm9jZXNzTWV0YWRhdGEuYmluZCh0aGlzKSl9X3Byb2Nlc3NNZXRhZGF0YSh0KXtpZighdClyZXR1cm47Y29uc3QgZT1uZXcgTWFwO2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKXtsZXQgaT10W25dO2UuaGFzKGkuc3RlcCl8fGUuc2V0KGkuc3RlcCxbXSksZS5nZXQoaS5zdGVwKS5wdXNoKGkpfWxldCBuPVtdO3JldHVybiBlLmZvckVhY2goKHQ9PntsZXQgZT10aGlzLl9jcmVhdGVTdGVwRGF0dW0odFswXSk7bi5wdXNoKGUpfSkpLG59X2NyZWF0ZVN0ZXBEYXR1bSh0KXtyZXR1cm57d2FsbF90aW1lOm5ldyBEYXRlKDFlMyp0LndhbGxfdGltZSksc3RlcDp0LnN0ZXAsY29uZmlnOnQuY29uZmlnLGNvbnRlbnRfdHlwZTp0LmNvbnRlbnRfdHlwZSxjb21wb25lbnRzOnQuY29tcG9uZW50c319fWNvbnN0IENJdD0iMTI1IixBSXQ9e0xFRlQ6MCxNSURETEU6MSxSSUdIVDoyLFJPVEFURTowLERPTExZOjEsUEFOOjJ9LGtJdD17Uk9UQVRFOjAsUEFOOjEsRE9MTFlfUEFOOjIsRE9MTFlfUk9UQVRFOjN9LExJdD0xMDAsUEl0PTMwMCxOSXQ9MzAxLElJdD0zMDIsT0l0PTMwMyxSSXQ9MzA0LHpJdD0zMDYsREl0PTMwNyxCSXQ9MWUzLEhJdD0xMDAxLEZJdD0xMDAyLFZJdD0xMDAzLFVJdD0xMDA0LGpJdD0xMDA1LEdJdD0xMDA2LFdJdD0xMDA3LHFJdD0xMDA4LFlJdD0xMDA5LFhJdD0xMDEyLCRJdD0xMDE0LEtJdD0xMDE1LFpJdD0xMDE2LEpJdD0xMDIwLFFJdD0xMDIyLHRPdD0xMDIzLGVPdD0xMDI2LG5PdD0xMDI3LGlPdD0zMzc3NixyT3Q9MzM3Nzcsb090PTMzNzc4LGFPdD0zMzc3OSxzT3Q9MzU4NDAsbE90PTM1ODQxLGNPdD0zNTg0Mix1T3Q9MzU4NDMsaE90PTM3NDkyLGRPdD0zNzQ5NixwT3Q9MjMwMCxmT3Q9MjMwMSxtT3Q9MjMwMixnT3Q9MjQwMCxfT3Q9MjQwMSx5T3Q9MjQwMix2T3Q9MjUwMCxiT3Q9MjUwMSx4T3Q9M2UzLHdPdD0zMDAxLFNPdD0zMDA3LE1PdD0zMDAyLEVPdD0zMDA0LFRPdD0zMDA1LENPdD0zMDA2LEFPdD03NjgwLGtPdD0zNTA0NCxMT3Q9MzUwNDgsUE90PSIzMDAgZXMiO2Z1bmN0aW9uIE5PdCgpe31PYmplY3QuYXNzaWduKE5PdC5wcm90b3R5cGUse2FkZEV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT10aGlzLl9saXN0ZW5lcnMmJih0aGlzLl9saXN0ZW5lcnM9e30pO2NvbnN0IG49dGhpcy5fbGlzdGVuZXJzO3ZvaWQgMD09PW5bdF0mJihuW3RdPVtdKSwtMT09PW5bdF0uaW5kZXhPZihlKSYmblt0XS5wdXNoKGUpfSxoYXNFdmVudExpc3RlbmVyOmZ1bmN0aW9uKHQsZSl7aWYodm9pZCAwPT09dGhpcy5fbGlzdGVuZXJzKXJldHVybiExO2NvbnN0IG49dGhpcy5fbGlzdGVuZXJzO3JldHVybiB2b2lkIDAhPT1uW3RdJiYtMSE9PW5bdF0uaW5kZXhPZihlKX0scmVtb3ZlRXZlbnRMaXN0ZW5lcjpmdW5jdGlvbih0LGUpe2lmKHZvaWQgMD09PXRoaXMuX2xpc3RlbmVycylyZXR1cm47Y29uc3Qgbj10aGlzLl9saXN0ZW5lcnNbdF07aWYodm9pZCAwIT09bil7Y29uc3QgdD1uLmluZGV4T2YoZSk7LTEhPT10JiZuLnNwbGljZSh0LDEpfX0sZGlzcGF0Y2hFdmVudDpmdW5jdGlvbih0KXtpZih2b2lkIDA9PT10aGlzLl9saXN0ZW5lcnMpcmV0dXJuO2NvbnN0IGU9dGhpcy5fbGlzdGVuZXJzW3QudHlwZV07aWYodm9pZCAwIT09ZSl7dC50YXJnZXQ9dGhpcztjb25zdCBuPWUuc2xpY2UoMCk7Zm9yKGxldCBlPTAsaT1uLmxlbmd0aDtlPGk7ZSsrKW5bZV0uY2FsbCh0aGlzLHQpfX19KTtjb25zdCBJT3Q9W107Zm9yKGxldCB0PTA7dDwyNTY7dCsrKUlPdFt0XT0odDwxNj8iMCI6IiIpK3QudG9TdHJpbmcoMTYpO2xldCBPT3Q9MTIzNDU2Nztjb25zdCBST3Q9e0RFRzJSQUQ6TWF0aC5QSS8xODAsUkFEMkRFRzoxODAvTWF0aC5QSSxnZW5lcmF0ZVVVSUQ6ZnVuY3Rpb24oKXtjb25zdCB0PTQyOTQ5NjcyOTUqTWF0aC5yYW5kb20oKXwwLGU9NDI5NDk2NzI5NSpNYXRoLnJhbmRvbSgpfDAsbj00Mjk0OTY3Mjk1Kk1hdGgucmFuZG9tKCl8MCxpPTQyOTQ5NjcyOTUqTWF0aC5yYW5kb20oKXwwO3JldHVybihJT3RbMjU1JnRdK0lPdFt0Pj44JjI1NV0rSU90W3Q+PjE2JjI1NV0rSU90W3Q+PjI0JjI1NV0rIi0iK0lPdFsyNTUmZV0rSU90W2U+PjgmMjU1XSsiLSIrSU90W2U+PjE2JjE1fDY0XStJT3RbZT4+MjQmMjU1XSsiLSIrSU90WzYzJm58MTI4XStJT3Rbbj4+OCYyNTVdKyItIitJT3Rbbj4+MTYmMjU1XStJT3Rbbj4+MjQmMjU1XStJT3RbMjU1JmldK0lPdFtpPj44JjI1NV0rSU90W2k+PjE2JjI1NV0rSU90W2k+PjI0JjI1NV0pLnRvVXBwZXJDYXNlKCl9LGNsYW1wOmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gTWF0aC5tYXgoZSxNYXRoLm1pbihuLHQpKX0sZXVjbGlkZWFuTW9kdWxvOmZ1bmN0aW9uKHQsZSl7cmV0dXJuKHQlZStlKSVlfSxtYXBMaW5lYXI6ZnVuY3Rpb24odCxlLG4saSxyKXtyZXR1cm4gaSsodC1lKSooci1pKS8obi1lKX0sbGVycDpmdW5jdGlvbih0LGUsbil7cmV0dXJuKDEtbikqdCtuKmV9LGRhbXA6ZnVuY3Rpb24odCxlLG4saSl7cmV0dXJuIFJPdC5sZXJwKHQsZSwxLU1hdGguZXhwKC1uKmkpKX0scGluZ3Bvbmc6ZnVuY3Rpb24odCxlPTEpe3JldHVybiBlLU1hdGguYWJzKFJPdC5ldWNsaWRlYW5Nb2R1bG8odCwyKmUpLWUpfSxzbW9vdGhzdGVwOmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdDw9ZT8wOnQ+PW4/MToodD0odC1lKS8obi1lKSkqdCooMy0yKnQpfSxzbW9vdGhlcnN0ZXA6ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0PD1lPzA6dD49bj8xOih0PSh0LWUpLyhuLWUpKSp0KnQqKHQqKDYqdC0xNSkrMTApfSxyYW5kSW50OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKihlLXQrMSkpfSxyYW5kRmxvYXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtNYXRoLnJhbmRvbSgpKihlLXQpfSxyYW5kRmxvYXRTcHJlYWQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQqKC41LU1hdGgucmFuZG9tKCkpfSxzZWVkZWRSYW5kb206ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMCE9PXQmJihPT3Q9dCUyMTQ3NDgzNjQ3KSxPT3Q9MTY4MDcqT090JTIxNDc0ODM2NDcsKE9PdC0xKS8yMTQ3NDgzNjQ2fSxkZWdUb1JhZDpmdW5jdGlvbih0KXtyZXR1cm4gdCpST3QuREVHMlJBRH0scmFkVG9EZWc6ZnVuY3Rpb24odCl7cmV0dXJuIHQqUk90LlJBRDJERUd9LGlzUG93ZXJPZlR3bzpmdW5jdGlvbih0KXtyZXR1cm4gMD09KHQmdC0xKSYmMCE9PXR9LGNlaWxQb3dlck9mVHdvOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnBvdygyLE1hdGguY2VpbChNYXRoLmxvZyh0KS9NYXRoLkxOMikpfSxmbG9vclBvd2VyT2ZUd286ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucG93KDIsTWF0aC5mbG9vcihNYXRoLmxvZyh0KS9NYXRoLkxOMikpfSxzZXRRdWF0ZXJuaW9uRnJvbVByb3BlckV1bGVyOmZ1bmN0aW9uKHQsZSxuLGkscil7Y29uc3Qgbz1NYXRoLmNvcyxhPU1hdGguc2luLHM9byhuLzIpLGw9YShuLzIpLGM9bygoZStpKS8yKSx1PWEoKGUraSkvMiksaD1vKChlLWkpLzIpLGQ9YSgoZS1pKS8yKSxwPW8oKGktZSkvMiksZj1hKChpLWUpLzIpO3N3aXRjaChyKXtjYXNlIlhZWCI6dC5zZXQocyp1LGwqaCxsKmQscypjKTticmVhaztjYXNlIllaWSI6dC5zZXQobCpkLHMqdSxsKmgscypjKTticmVhaztjYXNlIlpYWiI6dC5zZXQobCpoLGwqZCxzKnUscypjKTticmVhaztjYXNlIlhaWCI6dC5zZXQocyp1LGwqZixsKnAscypjKTticmVhaztjYXNlIllYWSI6dC5zZXQobCpwLHMqdSxsKmYscypjKTticmVhaztjYXNlIlpZWiI6dC5zZXQobCpmLGwqcCxzKnUscypjKTticmVhaztkZWZhdWx0OmNvbnNvbGUud2FybigiVEhSRUUuTWF0aFV0aWxzOiAuc2V0UXVhdGVybmlvbkZyb21Qcm9wZXJFdWxlcigpIGVuY291bnRlcmVkIGFuIHVua25vd24gb3JkZXI6ICIrcil9fX07Y2xhc3Mgek90e2NvbnN0cnVjdG9yKHQ9MCxlPTApe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpc1ZlY3RvcjIiLHt2YWx1ZTohMH0pLHRoaXMueD10LHRoaXMueT1lfWdldCB3aWR0aCgpe3JldHVybiB0aGlzLnh9c2V0IHdpZHRoKHQpe3RoaXMueD10fWdldCBoZWlnaHQoKXtyZXR1cm4gdGhpcy55fXNldCBoZWlnaHQodCl7dGhpcy55PXR9c2V0KHQsZSl7cmV0dXJuIHRoaXMueD10LHRoaXMueT1lLHRoaXN9c2V0U2NhbGFyKHQpe3JldHVybiB0aGlzLng9dCx0aGlzLnk9dCx0aGlzfXNldFgodCl7cmV0dXJuIHRoaXMueD10LHRoaXN9c2V0WSh0KXtyZXR1cm4gdGhpcy55PXQsdGhpc31zZXRDb21wb25lbnQodCxlKXtzd2l0Y2godCl7Y2FzZSAwOnRoaXMueD1lO2JyZWFrO2Nhc2UgMTp0aGlzLnk9ZTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK3QpfXJldHVybiB0aGlzfWdldENvbXBvbmVudCh0KXtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiB0aGlzLng7Y2FzZSAxOnJldHVybiB0aGlzLnk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX19Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy54LHRoaXMueSl9Y29weSh0KXtyZXR1cm4gdGhpcy54PXQueCx0aGlzLnk9dC55LHRoaXN9YWRkKHQsZSl7cmV0dXJuIHZvaWQgMCE9PWU/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLmFkZCgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLmFkZFZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuYWRkVmVjdG9ycyh0LGUpKToodGhpcy54Kz10LngsdGhpcy55Kz10LnksdGhpcyl9YWRkU2NhbGFyKHQpe3JldHVybiB0aGlzLngrPXQsdGhpcy55Kz10LHRoaXN9YWRkVmVjdG9ycyh0LGUpe3JldHVybiB0aGlzLng9dC54K2UueCx0aGlzLnk9dC55K2UueSx0aGlzfWFkZFNjYWxlZFZlY3Rvcih0LGUpe3JldHVybiB0aGlzLngrPXQueCplLHRoaXMueSs9dC55KmUsdGhpc31zdWIodCxlKXtyZXR1cm4gdm9pZCAwIT09ZT8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiAuc3ViKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuc3ViVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5zdWJWZWN0b3JzKHQsZSkpOih0aGlzLngtPXQueCx0aGlzLnktPXQueSx0aGlzKX1zdWJTY2FsYXIodCl7cmV0dXJuIHRoaXMueC09dCx0aGlzLnktPXQsdGhpc31zdWJWZWN0b3JzKHQsZSl7cmV0dXJuIHRoaXMueD10LngtZS54LHRoaXMueT10LnktZS55LHRoaXN9bXVsdGlwbHkodCl7cmV0dXJuIHRoaXMueCo9dC54LHRoaXMueSo9dC55LHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7cmV0dXJuIHRoaXMueCo9dCx0aGlzLnkqPXQsdGhpc31kaXZpZGUodCl7cmV0dXJuIHRoaXMueC89dC54LHRoaXMueS89dC55LHRoaXN9ZGl2aWRlU2NhbGFyKHQpe3JldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKDEvdCl9YXBwbHlNYXRyaXgzKHQpe2NvbnN0IGU9dGhpcy54LG49dGhpcy55LGk9dC5lbGVtZW50cztyZXR1cm4gdGhpcy54PWlbMF0qZStpWzNdKm4raVs2XSx0aGlzLnk9aVsxXSplK2lbNF0qbitpWzddLHRoaXN9bWluKHQpe3JldHVybiB0aGlzLng9TWF0aC5taW4odGhpcy54LHQueCksdGhpcy55PU1hdGgubWluKHRoaXMueSx0LnkpLHRoaXN9bWF4KHQpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodGhpcy54LHQueCksdGhpcy55PU1hdGgubWF4KHRoaXMueSx0LnkpLHRoaXN9Y2xhbXAodCxlKXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHQueCxNYXRoLm1pbihlLngsdGhpcy54KSksdGhpcy55PU1hdGgubWF4KHQueSxNYXRoLm1pbihlLnksdGhpcy55KSksdGhpc31jbGFtcFNjYWxhcih0LGUpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMueCkpLHRoaXMueT1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy55KSksdGhpc31jbGFtcExlbmd0aCh0LGUpe2NvbnN0IG49dGhpcy5sZW5ndGgoKTtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIobnx8MSkubXVsdGlwbHlTY2FsYXIoTWF0aC5tYXgodCxNYXRoLm1pbihlLG4pKSl9Zmxvb3IoKXtyZXR1cm4gdGhpcy54PU1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9TWF0aC5mbG9vcih0aGlzLnkpLHRoaXN9Y2VpbCgpe3JldHVybiB0aGlzLng9TWF0aC5jZWlsKHRoaXMueCksdGhpcy55PU1hdGguY2VpbCh0aGlzLnkpLHRoaXN9cm91bmQoKXtyZXR1cm4gdGhpcy54PU1hdGgucm91bmQodGhpcy54KSx0aGlzLnk9TWF0aC5yb3VuZCh0aGlzLnkpLHRoaXN9cm91bmRUb1plcm8oKXtyZXR1cm4gdGhpcy54PXRoaXMueDwwP01hdGguY2VpbCh0aGlzLngpOk1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9dGhpcy55PDA/TWF0aC5jZWlsKHRoaXMueSk6TWF0aC5mbG9vcih0aGlzLnkpLHRoaXN9bmVnYXRlKCl7cmV0dXJuIHRoaXMueD0tdGhpcy54LHRoaXMueT0tdGhpcy55LHRoaXN9ZG90KHQpe3JldHVybiB0aGlzLngqdC54K3RoaXMueSp0Lnl9Y3Jvc3ModCl7cmV0dXJuIHRoaXMueCp0LnktdGhpcy55KnQueH1sZW5ndGhTcSgpe3JldHVybiB0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnl9bGVuZ3RoKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkpfW1hbmhhdHRhbkxlbmd0aCgpe3JldHVybiBNYXRoLmFicyh0aGlzLngpK01hdGguYWJzKHRoaXMueSl9bm9ybWFsaXplKCl7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKHRoaXMubGVuZ3RoKCl8fDEpfWFuZ2xlKCl7cmV0dXJuIE1hdGguYXRhbjIoLXRoaXMueSwtdGhpcy54KStNYXRoLlBJfWRpc3RhbmNlVG8odCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLmRpc3RhbmNlVG9TcXVhcmVkKHQpKX1kaXN0YW5jZVRvU3F1YXJlZCh0KXtjb25zdCBlPXRoaXMueC10Lngsbj10aGlzLnktdC55O3JldHVybiBlKmUrbipufW1hbmhhdHRhbkRpc3RhbmNlVG8odCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueC10LngpK01hdGguYWJzKHRoaXMueS10LnkpfXNldExlbmd0aCh0KXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0KX1sZXJwKHQsZSl7cmV0dXJuIHRoaXMueCs9KHQueC10aGlzLngpKmUsdGhpcy55Kz0odC55LXRoaXMueSkqZSx0aGlzfWxlcnBWZWN0b3JzKHQsZSxuKXtyZXR1cm4gdGhpcy54PXQueCsoZS54LXQueCkqbix0aGlzLnk9dC55KyhlLnktdC55KSpuLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lng9PT10aGlzLngmJnQueT09PXRoaXMueX1mcm9tQXJyYXkodCxlPTApe3JldHVybiB0aGlzLng9dFtlXSx0aGlzLnk9dFtlKzFdLHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7cmV0dXJuIHRbZV09dGhpcy54LHRbZSsxXT10aGlzLnksdH1mcm9tQnVmZmVyQXR0cmlidXRlKHQsZSxuKXtyZXR1cm4gdm9pZCAwIT09biYmY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiBvZmZzZXQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy54PXQuZ2V0WChlKSx0aGlzLnk9dC5nZXRZKGUpLHRoaXN9cm90YXRlQXJvdW5kKHQsZSl7Y29uc3Qgbj1NYXRoLmNvcyhlKSxpPU1hdGguc2luKGUpLHI9dGhpcy54LXQueCxvPXRoaXMueS10Lnk7cmV0dXJuIHRoaXMueD1yKm4tbyppK3QueCx0aGlzLnk9cippK28qbit0LnksdGhpc31yYW5kb20oKXtyZXR1cm4gdGhpcy54PU1hdGgucmFuZG9tKCksdGhpcy55PU1hdGgucmFuZG9tKCksdGhpc319Y2xhc3MgRE90e2NvbnN0cnVjdG9yKCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlzTWF0cml4MyIse3ZhbHVlOiEwfSksdGhpcy5lbGVtZW50cz1bMSwwLDAsMCwxLDAsMCwwLDFdLGFyZ3VtZW50cy5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4MzogdGhlIGNvbnN0cnVjdG9yIG5vIGxvbmdlciByZWFkcyBhcmd1bWVudHMuIHVzZSAuc2V0KCkgaW5zdGVhZC4iKX1zZXQodCxlLG4saSxyLG8sYSxzLGwpe2NvbnN0IGM9dGhpcy5lbGVtZW50cztyZXR1cm4gY1swXT10LGNbMV09aSxjWzJdPWEsY1szXT1lLGNbNF09cixjWzVdPXMsY1s2XT1uLGNbN109byxjWzhdPWwsdGhpc31pZGVudGl0eSgpe3JldHVybiB0aGlzLnNldCgxLDAsMCwwLDEsMCwwLDAsMSksdGhpc31jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuZnJvbUFycmF5KHRoaXMuZWxlbWVudHMpfWNvcHkodCl7Y29uc3QgZT10aGlzLmVsZW1lbnRzLG49dC5lbGVtZW50cztyZXR1cm4gZVswXT1uWzBdLGVbMV09blsxXSxlWzJdPW5bMl0sZVszXT1uWzNdLGVbNF09bls0XSxlWzVdPW5bNV0sZVs2XT1uWzZdLGVbN109bls3XSxlWzhdPW5bOF0sdGhpc31leHRyYWN0QmFzaXModCxlLG4pe3JldHVybiB0LnNldEZyb21NYXRyaXgzQ29sdW1uKHRoaXMsMCksZS5zZXRGcm9tTWF0cml4M0NvbHVtbih0aGlzLDEpLG4uc2V0RnJvbU1hdHJpeDNDb2x1bW4odGhpcywyKSx0aGlzfXNldEZyb21NYXRyaXg0KHQpe2NvbnN0IGU9dC5lbGVtZW50cztyZXR1cm4gdGhpcy5zZXQoZVswXSxlWzRdLGVbOF0sZVsxXSxlWzVdLGVbOV0sZVsyXSxlWzZdLGVbMTBdKSx0aGlzfW11bHRpcGx5KHQpe3JldHVybiB0aGlzLm11bHRpcGx5TWF0cmljZXModGhpcyx0KX1wcmVtdWx0aXBseSh0KXtyZXR1cm4gdGhpcy5tdWx0aXBseU1hdHJpY2VzKHQsdGhpcyl9bXVsdGlwbHlNYXRyaWNlcyh0LGUpe2NvbnN0IG49dC5lbGVtZW50cyxpPWUuZWxlbWVudHMscj10aGlzLmVsZW1lbnRzLG89blswXSxhPW5bM10scz1uWzZdLGw9blsxXSxjPW5bNF0sdT1uWzddLGg9blsyXSxkPW5bNV0scD1uWzhdLGY9aVswXSxtPWlbM10sZz1pWzZdLF89aVsxXSx5PWlbNF0sdj1pWzddLGI9aVsyXSx4PWlbNV0sdz1pWzhdO3JldHVybiByWzBdPW8qZithKl8rcypiLHJbM109byptK2EqeStzKngscls2XT1vKmcrYSp2K3MqdyxyWzFdPWwqZitjKl8rdSpiLHJbNF09bCptK2MqeSt1Kngscls3XT1sKmcrYyp2K3UqdyxyWzJdPWgqZitkKl8rcCpiLHJbNV09aCptK2QqeStwKngscls4XT1oKmcrZCp2K3Aqdyx0aGlzfW11bHRpcGx5U2NhbGFyKHQpe2NvbnN0IGU9dGhpcy5lbGVtZW50cztyZXR1cm4gZVswXSo9dCxlWzNdKj10LGVbNl0qPXQsZVsxXSo9dCxlWzRdKj10LGVbN10qPXQsZVsyXSo9dCxlWzVdKj10LGVbOF0qPXQsdGhpc31kZXRlcm1pbmFudCgpe2NvbnN0IHQ9dGhpcy5lbGVtZW50cyxlPXRbMF0sbj10WzFdLGk9dFsyXSxyPXRbM10sbz10WzRdLGE9dFs1XSxzPXRbNl0sbD10WzddLGM9dFs4XTtyZXR1cm4gZSpvKmMtZSphKmwtbipyKmMrbiphKnMraSpyKmwtaSpvKnN9aW52ZXJ0KCl7Y29uc3QgdD10aGlzLmVsZW1lbnRzLGU9dFswXSxuPXRbMV0saT10WzJdLHI9dFszXSxvPXRbNF0sYT10WzVdLHM9dFs2XSxsPXRbN10sYz10WzhdLHU9YypvLWEqbCxoPWEqcy1jKnIsZD1sKnItbypzLHA9ZSp1K24qaCtpKmQ7aWYoMD09PXApcmV0dXJuIHRoaXMuc2V0KDAsMCwwLDAsMCwwLDAsMCwwKTtjb25zdCBmPTEvcDtyZXR1cm4gdFswXT11KmYsdFsxXT0oaSpsLWMqbikqZix0WzJdPShhKm4taSpvKSpmLHRbM109aCpmLHRbNF09KGMqZS1pKnMpKmYsdFs1XT0oaSpyLWEqZSkqZix0WzZdPWQqZix0WzddPShuKnMtbCplKSpmLHRbOF09KG8qZS1uKnIpKmYsdGhpc310cmFuc3Bvc2UoKXtsZXQgdDtjb25zdCBlPXRoaXMuZWxlbWVudHM7cmV0dXJuIHQ9ZVsxXSxlWzFdPWVbM10sZVszXT10LHQ9ZVsyXSxlWzJdPWVbNl0sZVs2XT10LHQ9ZVs1XSxlWzVdPWVbN10sZVs3XT10LHRoaXN9Z2V0Tm9ybWFsTWF0cml4KHQpe3JldHVybiB0aGlzLnNldEZyb21NYXRyaXg0KHQpLmNvcHkodGhpcykuaW52ZXJ0KCkudHJhbnNwb3NlKCl9dHJhbnNwb3NlSW50b0FycmF5KHQpe2NvbnN0IGU9dGhpcy5lbGVtZW50cztyZXR1cm4gdFswXT1lWzBdLHRbMV09ZVszXSx0WzJdPWVbNl0sdFszXT1lWzFdLHRbNF09ZVs0XSx0WzVdPWVbN10sdFs2XT1lWzJdLHRbN109ZVs1XSx0WzhdPWVbOF0sdGhpc31zZXRVdlRyYW5zZm9ybSh0LGUsbixpLHIsbyxhKXtjb25zdCBzPU1hdGguY29zKHIpLGw9TWF0aC5zaW4ocik7cmV0dXJuIHRoaXMuc2V0KG4qcyxuKmwsLW4qKHMqbytsKmEpK28rdCwtaSpsLGkqcywtaSooLWwqbytzKmEpK2ErZSwwLDAsMSksdGhpc31zY2FsZSh0LGUpe2NvbnN0IG49dGhpcy5lbGVtZW50cztyZXR1cm4gblswXSo9dCxuWzNdKj10LG5bNl0qPXQsblsxXSo9ZSxuWzRdKj1lLG5bN10qPWUsdGhpc31yb3RhdGUodCl7Y29uc3QgZT1NYXRoLmNvcyh0KSxuPU1hdGguc2luKHQpLGk9dGhpcy5lbGVtZW50cyxyPWlbMF0sbz1pWzNdLGE9aVs2XSxzPWlbMV0sbD1pWzRdLGM9aVs3XTtyZXR1cm4gaVswXT1lKnIrbipzLGlbM109ZSpvK24qbCxpWzZdPWUqYStuKmMsaVsxXT0tbipyK2UqcyxpWzRdPS1uKm8rZSpsLGlbN109LW4qYStlKmMsdGhpc310cmFuc2xhdGUodCxlKXtjb25zdCBuPXRoaXMuZWxlbWVudHM7cmV0dXJuIG5bMF0rPXQqblsyXSxuWzNdKz10Km5bNV0sbls2XSs9dCpuWzhdLG5bMV0rPWUqblsyXSxuWzRdKz1lKm5bNV0sbls3XSs9ZSpuWzhdLHRoaXN9ZXF1YWxzKHQpe2NvbnN0IGU9dGhpcy5lbGVtZW50cyxuPXQuZWxlbWVudHM7Zm9yKGxldCB0PTA7dDw5O3QrKylpZihlW3RdIT09blt0XSlyZXR1cm4hMTtyZXR1cm4hMH1mcm9tQXJyYXkodCxlPTApe2ZvcihsZXQgbj0wO248OTtuKyspdGhpcy5lbGVtZW50c1tuXT10W24rZV07cmV0dXJuIHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7Y29uc3Qgbj10aGlzLmVsZW1lbnRzO3JldHVybiB0W2VdPW5bMF0sdFtlKzFdPW5bMV0sdFtlKzJdPW5bMl0sdFtlKzNdPW5bM10sdFtlKzRdPW5bNF0sdFtlKzVdPW5bNV0sdFtlKzZdPW5bNl0sdFtlKzddPW5bN10sdFtlKzhdPW5bOF0sdH19bGV0IEJPdDtjb25zdCBIT3Q9e2dldERhdGFVUkw6ZnVuY3Rpb24odCl7aWYoL15kYXRhOi9pLnRlc3QodC5zcmMpKXJldHVybiB0LnNyYztpZigidW5kZWZpbmVkIj09dHlwZW9mIEhUTUxDYW52YXNFbGVtZW50KXJldHVybiB0LnNyYztsZXQgZTtpZih0IGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQpZT10O2Vsc2V7dm9pZCAwPT09Qk90JiYoQk90PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsImNhbnZhcyIpKSxCT3Qud2lkdGg9dC53aWR0aCxCT3QuaGVpZ2h0PXQuaGVpZ2h0O2NvbnN0IG49Qk90LmdldENvbnRleHQoIjJkIik7dCBpbnN0YW5jZW9mIEltYWdlRGF0YT9uLnB1dEltYWdlRGF0YSh0LDAsMCk6bi5kcmF3SW1hZ2UodCwwLDAsdC53aWR0aCx0LmhlaWdodCksZT1CT3R9cmV0dXJuIGUud2lkdGg+MjA0OHx8ZS5oZWlnaHQ+MjA0OD9lLnRvRGF0YVVSTCgiaW1hZ2UvanBlZyIsLjYpOmUudG9EYXRhVVJMKCJpbWFnZS9wbmciKX19O2xldCBGT3Q9MDtmdW5jdGlvbiBWT3QodD1WT3QuREVGQVVMVF9JTUFHRSxlPVZPdC5ERUZBVUxUX01BUFBJTkcsbj0xMDAxLGk9MTAwMSxyPTEwMDYsbz0xMDA4LGE9MTAyMyxzPTEwMDksbD0xLGM9M2UzKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTpGT3QrK30pLHRoaXMudXVpZD1ST3QuZ2VuZXJhdGVVVUlEKCksdGhpcy5uYW1lPSIiLHRoaXMuaW1hZ2U9dCx0aGlzLm1pcG1hcHM9W10sdGhpcy5tYXBwaW5nPWUsdGhpcy53cmFwUz1uLHRoaXMud3JhcFQ9aSx0aGlzLm1hZ0ZpbHRlcj1yLHRoaXMubWluRmlsdGVyPW8sdGhpcy5hbmlzb3Ryb3B5PWwsdGhpcy5mb3JtYXQ9YSx0aGlzLmludGVybmFsRm9ybWF0PW51bGwsdGhpcy50eXBlPXMsdGhpcy5vZmZzZXQ9bmV3IHpPdCgwLDApLHRoaXMucmVwZWF0PW5ldyB6T3QoMSwxKSx0aGlzLmNlbnRlcj1uZXcgek90KDAsMCksdGhpcy5yb3RhdGlvbj0wLHRoaXMubWF0cml4QXV0b1VwZGF0ZT0hMCx0aGlzLm1hdHJpeD1uZXcgRE90LHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSEwLHRoaXMucHJlbXVsdGlwbHlBbHBoYT0hMSx0aGlzLmZsaXBZPSEwLHRoaXMudW5wYWNrQWxpZ25tZW50PTQsdGhpcy5lbmNvZGluZz1jLHRoaXMudmVyc2lvbj0wLHRoaXMub25VcGRhdGU9bnVsbH1mdW5jdGlvbiBVT3QodCl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBIVE1MSW1hZ2VFbGVtZW50JiZ0IGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudHx8InVuZGVmaW5lZCIhPXR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudCYmdCBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50fHwidW5kZWZpbmVkIiE9dHlwZW9mIEltYWdlQml0bWFwJiZ0IGluc3RhbmNlb2YgSW1hZ2VCaXRtYXA/SE90LmdldERhdGFVUkwodCk6dC5kYXRhP3tkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQuZGF0YSksd2lkdGg6dC53aWR0aCxoZWlnaHQ6dC5oZWlnaHQsdHlwZTp0LmRhdGEuY29uc3RydWN0b3IubmFtZX06KGNvbnNvbGUud2FybigiVEhSRUUuVGV4dHVyZTogVW5hYmxlIHRvIHNlcmlhbGl6ZSBUZXh0dXJlLiIpLHt9KX1WT3QuREVGQVVMVF9JTUFHRT12b2lkIDAsVk90LkRFRkFVTFRfTUFQUElORz1QSXQsVk90LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoTk90LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOlZPdCxpc1RleHR1cmU6ITAsdXBkYXRlTWF0cml4OmZ1bmN0aW9uKCl7dGhpcy5tYXRyaXguc2V0VXZUcmFuc2Zvcm0odGhpcy5vZmZzZXQueCx0aGlzLm9mZnNldC55LHRoaXMucmVwZWF0LngsdGhpcy5yZXBlYXQueSx0aGlzLnJvdGF0aW9uLHRoaXMuY2VudGVyLngsdGhpcy5jZW50ZXIueSl9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfSxjb3B5OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm5hbWU9dC5uYW1lLHRoaXMuaW1hZ2U9dC5pbWFnZSx0aGlzLm1pcG1hcHM9dC5taXBtYXBzLnNsaWNlKDApLHRoaXMubWFwcGluZz10Lm1hcHBpbmcsdGhpcy53cmFwUz10LndyYXBTLHRoaXMud3JhcFQ9dC53cmFwVCx0aGlzLm1hZ0ZpbHRlcj10Lm1hZ0ZpbHRlcix0aGlzLm1pbkZpbHRlcj10Lm1pbkZpbHRlcix0aGlzLmFuaXNvdHJvcHk9dC5hbmlzb3Ryb3B5LHRoaXMuZm9ybWF0PXQuZm9ybWF0LHRoaXMuaW50ZXJuYWxGb3JtYXQ9dC5pbnRlcm5hbEZvcm1hdCx0aGlzLnR5cGU9dC50eXBlLHRoaXMub2Zmc2V0LmNvcHkodC5vZmZzZXQpLHRoaXMucmVwZWF0LmNvcHkodC5yZXBlYXQpLHRoaXMuY2VudGVyLmNvcHkodC5jZW50ZXIpLHRoaXMucm90YXRpb249dC5yb3RhdGlvbix0aGlzLm1hdHJpeEF1dG9VcGRhdGU9dC5tYXRyaXhBdXRvVXBkYXRlLHRoaXMubWF0cml4LmNvcHkodC5tYXRyaXgpLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPXQuZ2VuZXJhdGVNaXBtYXBzLHRoaXMucHJlbXVsdGlwbHlBbHBoYT10LnByZW11bHRpcGx5QWxwaGEsdGhpcy5mbGlwWT10LmZsaXBZLHRoaXMudW5wYWNrQWxpZ25tZW50PXQudW5wYWNrQWxpZ25tZW50LHRoaXMuZW5jb2Rpbmc9dC5lbmNvZGluZyx0aGlzfSx0b0pTT046ZnVuY3Rpb24odCl7Y29uc3QgZT12b2lkIDA9PT10fHwic3RyaW5nIj09dHlwZW9mIHQ7aWYoIWUmJnZvaWQgMCE9PXQudGV4dHVyZXNbdGhpcy51dWlkXSlyZXR1cm4gdC50ZXh0dXJlc1t0aGlzLnV1aWRdO2NvbnN0IG49e21ldGFkYXRhOnt2ZXJzaW9uOjQuNSx0eXBlOiJUZXh0dXJlIixnZW5lcmF0b3I6IlRleHR1cmUudG9KU09OIn0sdXVpZDp0aGlzLnV1aWQsbmFtZTp0aGlzLm5hbWUsbWFwcGluZzp0aGlzLm1hcHBpbmcscmVwZWF0Olt0aGlzLnJlcGVhdC54LHRoaXMucmVwZWF0LnldLG9mZnNldDpbdGhpcy5vZmZzZXQueCx0aGlzLm9mZnNldC55XSxjZW50ZXI6W3RoaXMuY2VudGVyLngsdGhpcy5jZW50ZXIueV0scm90YXRpb246dGhpcy5yb3RhdGlvbix3cmFwOlt0aGlzLndyYXBTLHRoaXMud3JhcFRdLGZvcm1hdDp0aGlzLmZvcm1hdCx0eXBlOnRoaXMudHlwZSxlbmNvZGluZzp0aGlzLmVuY29kaW5nLG1pbkZpbHRlcjp0aGlzLm1pbkZpbHRlcixtYWdGaWx0ZXI6dGhpcy5tYWdGaWx0ZXIsYW5pc290cm9weTp0aGlzLmFuaXNvdHJvcHksZmxpcFk6dGhpcy5mbGlwWSxwcmVtdWx0aXBseUFscGhhOnRoaXMucHJlbXVsdGlwbHlBbHBoYSx1bnBhY2tBbGlnbm1lbnQ6dGhpcy51bnBhY2tBbGlnbm1lbnR9O2lmKHZvaWQgMCE9PXRoaXMuaW1hZ2Upe2NvbnN0IGk9dGhpcy5pbWFnZTtpZih2b2lkIDA9PT1pLnV1aWQmJihpLnV1aWQ9Uk90LmdlbmVyYXRlVVVJRCgpKSwhZSYmdm9pZCAwPT09dC5pbWFnZXNbaS51dWlkXSl7bGV0IGU7aWYoQXJyYXkuaXNBcnJheShpKSl7ZT1bXTtmb3IobGV0IHQ9MCxuPWkubGVuZ3RoO3Q8bjt0KyspZS5wdXNoKFVPdChpW3RdLmlzRGF0YVRleHR1cmU/aVt0XS5pbWFnZTppW3RdKSl9ZWxzZSBlPVVPdChpKTt0LmltYWdlc1tpLnV1aWRdPXt1dWlkOmkudXVpZCx1cmw6ZX19bi5pbWFnZT1pLnV1aWR9cmV0dXJuIGV8fCh0LnRleHR1cmVzW3RoaXMudXVpZF09biksbn0sZGlzcG9zZTpmdW5jdGlvbigpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX0sdHJhbnNmb3JtVXY6ZnVuY3Rpb24odCl7aWYodGhpcy5tYXBwaW5nIT09UEl0KXJldHVybiB0O2lmKHQuYXBwbHlNYXRyaXgzKHRoaXMubWF0cml4KSx0Lng8MHx8dC54PjEpc3dpdGNoKHRoaXMud3JhcFMpe2Nhc2UgQkl0OnQueD10LngtTWF0aC5mbG9vcih0LngpO2JyZWFrO2Nhc2UgSEl0OnQueD10Lng8MD8wOjE7YnJlYWs7Y2FzZSBGSXQ6dC54PTE9PT1NYXRoLmFicyhNYXRoLmZsb29yKHQueCklMik/TWF0aC5jZWlsKHQueCktdC54OnQueC1NYXRoLmZsb29yKHQueCl9aWYodC55PDB8fHQueT4xKXN3aXRjaCh0aGlzLndyYXBUKXtjYXNlIEJJdDp0Lnk9dC55LU1hdGguZmxvb3IodC55KTticmVhaztjYXNlIEhJdDp0Lnk9dC55PDA/MDoxO2JyZWFrO2Nhc2UgRkl0OnQueT0xPT09TWF0aC5hYnMoTWF0aC5mbG9vcih0LnkpJTIpP01hdGguY2VpbCh0LnkpLXQueTp0LnktTWF0aC5mbG9vcih0LnkpfXJldHVybiB0aGlzLmZsaXBZJiYodC55PTEtdC55KSx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWT3QucHJvdG90eXBlLCJuZWVkc1VwZGF0ZSIse3NldDpmdW5jdGlvbih0KXshMD09PXQmJnRoaXMudmVyc2lvbisrfX0pO2NsYXNzIGpPdHtjb25zdHJ1Y3Rvcih0PTAsZT0wLG49MCxpPTEpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpc1ZlY3RvcjQiLHt2YWx1ZTohMH0pLHRoaXMueD10LHRoaXMueT1lLHRoaXMuej1uLHRoaXMudz1pfWdldCB3aWR0aCgpe3JldHVybiB0aGlzLnp9c2V0IHdpZHRoKHQpe3RoaXMuej10fWdldCBoZWlnaHQoKXtyZXR1cm4gdGhpcy53fXNldCBoZWlnaHQodCl7dGhpcy53PXR9c2V0KHQsZSxuLGkpe3JldHVybiB0aGlzLng9dCx0aGlzLnk9ZSx0aGlzLno9bix0aGlzLnc9aSx0aGlzfXNldFNjYWxhcih0KXtyZXR1cm4gdGhpcy54PXQsdGhpcy55PXQsdGhpcy56PXQsdGhpcy53PXQsdGhpc31zZXRYKHQpe3JldHVybiB0aGlzLng9dCx0aGlzfXNldFkodCl7cmV0dXJuIHRoaXMueT10LHRoaXN9c2V0Wih0KXtyZXR1cm4gdGhpcy56PXQsdGhpc31zZXRXKHQpe3JldHVybiB0aGlzLnc9dCx0aGlzfXNldENvbXBvbmVudCh0LGUpe3N3aXRjaCh0KXtjYXNlIDA6dGhpcy54PWU7YnJlYWs7Y2FzZSAxOnRoaXMueT1lO2JyZWFrO2Nhc2UgMjp0aGlzLno9ZTticmVhaztjYXNlIDM6dGhpcy53PWU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX1yZXR1cm4gdGhpc31nZXRDb21wb25lbnQodCl7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gdGhpcy54O2Nhc2UgMTpyZXR1cm4gdGhpcy55O2Nhc2UgMjpyZXR1cm4gdGhpcy56O2Nhc2UgMzpyZXR1cm4gdGhpcy53O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrdCl9fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMueCx0aGlzLnksdGhpcy56LHRoaXMudyl9Y29weSh0KXtyZXR1cm4gdGhpcy54PXQueCx0aGlzLnk9dC55LHRoaXMuej10LnosdGhpcy53PXZvaWQgMCE9PXQudz90Lnc6MSx0aGlzfWFkZCh0LGUpe3JldHVybiB2b2lkIDAhPT1lPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IC5hZGQoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5hZGRWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmFkZFZlY3RvcnModCxlKSk6KHRoaXMueCs9dC54LHRoaXMueSs9dC55LHRoaXMueis9dC56LHRoaXMudys9dC53LHRoaXMpfWFkZFNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kz10LHRoaXMueSs9dCx0aGlzLnorPXQsdGhpcy53Kz10LHRoaXN9YWRkVmVjdG9ycyh0LGUpe3JldHVybiB0aGlzLng9dC54K2UueCx0aGlzLnk9dC55K2UueSx0aGlzLno9dC56K2Uueix0aGlzLnc9dC53K2Uudyx0aGlzfWFkZFNjYWxlZFZlY3Rvcih0LGUpe3JldHVybiB0aGlzLngrPXQueCplLHRoaXMueSs9dC55KmUsdGhpcy56Kz10LnoqZSx0aGlzLncrPXQudyplLHRoaXN9c3ViKHQsZSl7cmV0dXJuIHZvaWQgMCE9PWU/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogLnN1YigpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLnN1YlZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuc3ViVmVjdG9ycyh0LGUpKToodGhpcy54LT10LngsdGhpcy55LT10LnksdGhpcy56LT10LnosdGhpcy53LT10LncsdGhpcyl9c3ViU2NhbGFyKHQpe3JldHVybiB0aGlzLngtPXQsdGhpcy55LT10LHRoaXMuei09dCx0aGlzLnctPXQsdGhpc31zdWJWZWN0b3JzKHQsZSl7cmV0dXJuIHRoaXMueD10LngtZS54LHRoaXMueT10LnktZS55LHRoaXMuej10LnotZS56LHRoaXMudz10LnctZS53LHRoaXN9bXVsdGlwbHkodCl7cmV0dXJuIHRoaXMueCo9dC54LHRoaXMueSo9dC55LHRoaXMueio9dC56LHRoaXMudyo9dC53LHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7cmV0dXJuIHRoaXMueCo9dCx0aGlzLnkqPXQsdGhpcy56Kj10LHRoaXMudyo9dCx0aGlzfWFwcGx5TWF0cml4NCh0KXtjb25zdCBlPXRoaXMueCxuPXRoaXMueSxpPXRoaXMueixyPXRoaXMudyxvPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMueD1vWzBdKmUrb1s0XSpuK29bOF0qaStvWzEyXSpyLHRoaXMueT1vWzFdKmUrb1s1XSpuK29bOV0qaStvWzEzXSpyLHRoaXMuej1vWzJdKmUrb1s2XSpuK29bMTBdKmkrb1sxNF0qcix0aGlzLnc9b1szXSplK29bN10qbitvWzExXSppK29bMTVdKnIsdGhpc31kaXZpZGVTY2FsYXIodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlTY2FsYXIoMS90KX1zZXRBeGlzQW5nbGVGcm9tUXVhdGVybmlvbih0KXt0aGlzLnc9MipNYXRoLmFjb3ModC53KTtjb25zdCBlPU1hdGguc3FydCgxLXQudyp0LncpO3JldHVybiBlPDFlLTQ/KHRoaXMueD0xLHRoaXMueT0wLHRoaXMuej0wKToodGhpcy54PXQueC9lLHRoaXMueT10LnkvZSx0aGlzLno9dC56L2UpLHRoaXN9c2V0QXhpc0FuZ2xlRnJvbVJvdGF0aW9uTWF0cml4KHQpe2xldCBlLG4saSxyO2NvbnN0IG89LjAxLGE9LjEscz10LmVsZW1lbnRzLGw9c1swXSxjPXNbNF0sdT1zWzhdLGg9c1sxXSxkPXNbNV0scD1zWzldLGY9c1syXSxtPXNbNl0sZz1zWzEwXTtpZihNYXRoLmFicyhjLWgpPG8mJk1hdGguYWJzKHUtZik8byYmTWF0aC5hYnMocC1tKTxvKXtpZihNYXRoLmFicyhjK2gpPGEmJk1hdGguYWJzKHUrZik8YSYmTWF0aC5hYnMocCttKTxhJiZNYXRoLmFicyhsK2QrZy0zKTxhKXJldHVybiB0aGlzLnNldCgxLDAsMCwwKSx0aGlzO2U9TWF0aC5QSTtjb25zdCB0PShsKzEpLzIscz0oZCsxKS8yLF89KGcrMSkvMix5PShjK2gpLzQsdj0odStmKS80LGI9KHArbSkvNDtyZXR1cm4gdD5zJiZ0Pl8/dDxvPyhuPTAsaT0uNzA3MTA2NzgxLHI9LjcwNzEwNjc4MSk6KG49TWF0aC5zcXJ0KHQpLGk9eS9uLHI9di9uKTpzPl8/czxvPyhuPS43MDcxMDY3ODEsaT0wLHI9LjcwNzEwNjc4MSk6KGk9TWF0aC5zcXJ0KHMpLG49eS9pLHI9Yi9pKTpfPG8/KG49LjcwNzEwNjc4MSxpPS43MDcxMDY3ODEscj0wKToocj1NYXRoLnNxcnQoXyksbj12L3IsaT1iL3IpLHRoaXMuc2V0KG4saSxyLGUpLHRoaXN9bGV0IF89TWF0aC5zcXJ0KChtLXApKihtLXApKyh1LWYpKih1LWYpKyhoLWMpKihoLWMpKTtyZXR1cm4gTWF0aC5hYnMoXyk8LjAwMSYmKF89MSksdGhpcy54PShtLXApL18sdGhpcy55PSh1LWYpL18sdGhpcy56PShoLWMpL18sdGhpcy53PU1hdGguYWNvcygobCtkK2ctMSkvMiksdGhpc31taW4odCl7cmV0dXJuIHRoaXMueD1NYXRoLm1pbih0aGlzLngsdC54KSx0aGlzLnk9TWF0aC5taW4odGhpcy55LHQueSksdGhpcy56PU1hdGgubWluKHRoaXMueix0LnopLHRoaXMudz1NYXRoLm1pbih0aGlzLncsdC53KSx0aGlzfW1heCh0KXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1heCh0aGlzLnksdC55KSx0aGlzLno9TWF0aC5tYXgodGhpcy56LHQueiksdGhpcy53PU1hdGgubWF4KHRoaXMudyx0LncpLHRoaXN9Y2xhbXAodCxlKXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHQueCxNYXRoLm1pbihlLngsdGhpcy54KSksdGhpcy55PU1hdGgubWF4KHQueSxNYXRoLm1pbihlLnksdGhpcy55KSksdGhpcy56PU1hdGgubWF4KHQueixNYXRoLm1pbihlLnosdGhpcy56KSksdGhpcy53PU1hdGgubWF4KHQudyxNYXRoLm1pbihlLncsdGhpcy53KSksdGhpc31jbGFtcFNjYWxhcih0LGUpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMueCkpLHRoaXMueT1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy55KSksdGhpcy56PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLnopKSx0aGlzLnc9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMudykpLHRoaXN9Y2xhbXBMZW5ndGgodCxlKXtjb25zdCBuPXRoaXMubGVuZ3RoKCk7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKG58fDEpLm11bHRpcGx5U2NhbGFyKE1hdGgubWF4KHQsTWF0aC5taW4oZSxuKSkpfWZsb29yKCl7cmV0dXJuIHRoaXMueD1NYXRoLmZsb29yKHRoaXMueCksdGhpcy55PU1hdGguZmxvb3IodGhpcy55KSx0aGlzLno9TWF0aC5mbG9vcih0aGlzLnopLHRoaXMudz1NYXRoLmZsb29yKHRoaXMudyksdGhpc31jZWlsKCl7cmV0dXJuIHRoaXMueD1NYXRoLmNlaWwodGhpcy54KSx0aGlzLnk9TWF0aC5jZWlsKHRoaXMueSksdGhpcy56PU1hdGguY2VpbCh0aGlzLnopLHRoaXMudz1NYXRoLmNlaWwodGhpcy53KSx0aGlzfXJvdW5kKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJvdW5kKHRoaXMueCksdGhpcy55PU1hdGgucm91bmQodGhpcy55KSx0aGlzLno9TWF0aC5yb3VuZCh0aGlzLnopLHRoaXMudz1NYXRoLnJvdW5kKHRoaXMudyksdGhpc31yb3VuZFRvWmVybygpe3JldHVybiB0aGlzLng9dGhpcy54PDA/TWF0aC5jZWlsKHRoaXMueCk6TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT10aGlzLnk8MD9NYXRoLmNlaWwodGhpcy55KTpNYXRoLmZsb29yKHRoaXMueSksdGhpcy56PXRoaXMuejwwP01hdGguY2VpbCh0aGlzLnopOk1hdGguZmxvb3IodGhpcy56KSx0aGlzLnc9dGhpcy53PDA/TWF0aC5jZWlsKHRoaXMudyk6TWF0aC5mbG9vcih0aGlzLncpLHRoaXN9bmVnYXRlKCl7cmV0dXJuIHRoaXMueD0tdGhpcy54LHRoaXMueT0tdGhpcy55LHRoaXMuej0tdGhpcy56LHRoaXMudz0tdGhpcy53LHRoaXN9ZG90KHQpe3JldHVybiB0aGlzLngqdC54K3RoaXMueSp0LnkrdGhpcy56KnQueit0aGlzLncqdC53fWxlbmd0aFNxKCl7cmV0dXJuIHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSt0aGlzLnoqdGhpcy56K3RoaXMudyp0aGlzLnd9bGVuZ3RoKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkrdGhpcy56KnRoaXMueit0aGlzLncqdGhpcy53KX1tYW5oYXR0YW5MZW5ndGgoKXtyZXR1cm4gTWF0aC5hYnModGhpcy54KStNYXRoLmFicyh0aGlzLnkpK01hdGguYWJzKHRoaXMueikrTWF0aC5hYnModGhpcy53KX1ub3JtYWxpemUoKXtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIodGhpcy5sZW5ndGgoKXx8MSl9c2V0TGVuZ3RoKHQpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKHQpfWxlcnAodCxlKXtyZXR1cm4gdGhpcy54Kz0odC54LXRoaXMueCkqZSx0aGlzLnkrPSh0LnktdGhpcy55KSplLHRoaXMueis9KHQuei10aGlzLnopKmUsdGhpcy53Kz0odC53LXRoaXMudykqZSx0aGlzfWxlcnBWZWN0b3JzKHQsZSxuKXtyZXR1cm4gdGhpcy54PXQueCsoZS54LXQueCkqbix0aGlzLnk9dC55KyhlLnktdC55KSpuLHRoaXMuej10LnorKGUuei10LnopKm4sdGhpcy53PXQudysoZS53LXQudykqbix0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC54PT09dGhpcy54JiZ0Lnk9PT10aGlzLnkmJnQuej09PXRoaXMueiYmdC53PT09dGhpcy53fWZyb21BcnJheSh0LGU9MCl7cmV0dXJuIHRoaXMueD10W2VdLHRoaXMueT10W2UrMV0sdGhpcy56PXRbZSsyXSx0aGlzLnc9dFtlKzNdLHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7cmV0dXJuIHRbZV09dGhpcy54LHRbZSsxXT10aGlzLnksdFtlKzJdPXRoaXMueix0W2UrM109dGhpcy53LHR9ZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUsbil7cmV0dXJuIHZvaWQgMCE9PW4mJmNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogb2Zmc2V0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMueD10LmdldFgoZSksdGhpcy55PXQuZ2V0WShlKSx0aGlzLno9dC5nZXRaKGUpLHRoaXMudz10LmdldFcoZSksdGhpc31yYW5kb20oKXtyZXR1cm4gdGhpcy54PU1hdGgucmFuZG9tKCksdGhpcy55PU1hdGgucmFuZG9tKCksdGhpcy56PU1hdGgucmFuZG9tKCksdGhpcy53PU1hdGgucmFuZG9tKCksdGhpc319Y2xhc3MgR090IGV4dGVuZHMgTk90e2NvbnN0cnVjdG9yKHQsZSxuKXtzdXBlcigpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpc1dlYkdMUmVuZGVyVGFyZ2V0Iix7dmFsdWU6ITB9KSx0aGlzLndpZHRoPXQsdGhpcy5oZWlnaHQ9ZSx0aGlzLnNjaXNzb3I9bmV3IGpPdCgwLDAsdCxlKSx0aGlzLnNjaXNzb3JUZXN0PSExLHRoaXMudmlld3BvcnQ9bmV3IGpPdCgwLDAsdCxlKSx0aGlzLnRleHR1cmU9bmV3IFZPdCh2b2lkIDAsKG49bnx8e30pLm1hcHBpbmcsbi53cmFwUyxuLndyYXBULG4ubWFnRmlsdGVyLG4ubWluRmlsdGVyLG4uZm9ybWF0LG4udHlwZSxuLmFuaXNvdHJvcHksbi5lbmNvZGluZyksdGhpcy50ZXh0dXJlLmltYWdlPXt9LHRoaXMudGV4dHVyZS5pbWFnZS53aWR0aD10LHRoaXMudGV4dHVyZS5pbWFnZS5oZWlnaHQ9ZSx0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzPXZvaWQgMCE9PW4uZ2VuZXJhdGVNaXBtYXBzJiZuLmdlbmVyYXRlTWlwbWFwcyx0aGlzLnRleHR1cmUubWluRmlsdGVyPXZvaWQgMCE9PW4ubWluRmlsdGVyP24ubWluRmlsdGVyOkdJdCx0aGlzLmRlcHRoQnVmZmVyPXZvaWQgMD09PW4uZGVwdGhCdWZmZXJ8fG4uZGVwdGhCdWZmZXIsdGhpcy5zdGVuY2lsQnVmZmVyPXZvaWQgMCE9PW4uc3RlbmNpbEJ1ZmZlciYmbi5zdGVuY2lsQnVmZmVyLHRoaXMuZGVwdGhUZXh0dXJlPXZvaWQgMCE9PW4uZGVwdGhUZXh0dXJlP24uZGVwdGhUZXh0dXJlOm51bGx9c2V0U2l6ZSh0LGUpe3RoaXMud2lkdGg9PT10JiZ0aGlzLmhlaWdodD09PWV8fCh0aGlzLndpZHRoPXQsdGhpcy5oZWlnaHQ9ZSx0aGlzLnRleHR1cmUuaW1hZ2Uud2lkdGg9dCx0aGlzLnRleHR1cmUuaW1hZ2UuaGVpZ2h0PWUsdGhpcy5kaXNwb3NlKCkpLHRoaXMudmlld3BvcnQuc2V0KDAsMCx0LGUpLHRoaXMuc2Npc3Nvci5zZXQoMCwwLHQsZSl9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9Y29weSh0KXtyZXR1cm4gdGhpcy53aWR0aD10LndpZHRoLHRoaXMuaGVpZ2h0PXQuaGVpZ2h0LHRoaXMudmlld3BvcnQuY29weSh0LnZpZXdwb3J0KSx0aGlzLnRleHR1cmU9dC50ZXh0dXJlLmNsb25lKCksdGhpcy5kZXB0aEJ1ZmZlcj10LmRlcHRoQnVmZmVyLHRoaXMuc3RlbmNpbEJ1ZmZlcj10LnN0ZW5jaWxCdWZmZXIsdGhpcy5kZXB0aFRleHR1cmU9dC5kZXB0aFRleHR1cmUsdGhpc31kaXNwb3NlKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfX1jbGFzcyBXT3R7Y29uc3RydWN0b3IodD0wLGU9MCxuPTAsaT0xKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaXNRdWF0ZXJuaW9uIix7dmFsdWU6ITB9KSx0aGlzLl94PXQsdGhpcy5feT1lLHRoaXMuX3o9bix0aGlzLl93PWl9c3RhdGljIHNsZXJwKHQsZSxuLGkpe3JldHVybiBuLmNvcHkodCkuc2xlcnAoZSxpKX1zdGF0aWMgc2xlcnBGbGF0KHQsZSxuLGkscixvLGEpe2xldCBzPW5baSswXSxsPW5baSsxXSxjPW5baSsyXSx1PW5baSszXTtjb25zdCBoPXJbbyswXSxkPXJbbysxXSxwPXJbbysyXSxmPXJbbyszXTtpZih1IT09Znx8cyE9PWh8fGwhPT1kfHxjIT09cCl7bGV0IHQ9MS1hO2NvbnN0IGU9cypoK2wqZCtjKnArdSpmLG49ZT49MD8xOi0xLGk9MS1lKmU7aWYoaT5OdW1iZXIuRVBTSUxPTil7Y29uc3Qgcj1NYXRoLnNxcnQoaSksbz1NYXRoLmF0YW4yKHIsZSpuKTt0PU1hdGguc2luKHQqbykvcixhPU1hdGguc2luKGEqbykvcn1jb25zdCByPWEqbjtpZihzPXMqdCtoKnIsbD1sKnQrZCpyLGM9Yyp0K3Aqcix1PXUqdCtmKnIsdD09PTEtYSl7Y29uc3QgdD0xL01hdGguc3FydChzKnMrbCpsK2MqYyt1KnUpO3MqPXQsbCo9dCxjKj10LHUqPXR9fXRbZV09cyx0W2UrMV09bCx0W2UrMl09Yyx0W2UrM109dX1zdGF0aWMgbXVsdGlwbHlRdWF0ZXJuaW9uc0ZsYXQodCxlLG4saSxyLG8pe2NvbnN0IGE9bltpXSxzPW5baSsxXSxsPW5baSsyXSxjPW5baSszXSx1PXJbb10saD1yW28rMV0sZD1yW28rMl0scD1yW28rM107cmV0dXJuIHRbZV09YSpwK2MqdStzKmQtbCpoLHRbZSsxXT1zKnArYypoK2wqdS1hKmQsdFtlKzJdPWwqcCtjKmQrYSpoLXMqdSx0W2UrM109YypwLWEqdS1zKmgtbCpkLHR9Z2V0IHgoKXtyZXR1cm4gdGhpcy5feH1zZXQgeCh0KXt0aGlzLl94PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCB5KCl7cmV0dXJuIHRoaXMuX3l9c2V0IHkodCl7dGhpcy5feT10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgeigpe3JldHVybiB0aGlzLl96fXNldCB6KHQpe3RoaXMuX3o9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IHcoKXtyZXR1cm4gdGhpcy5fd31zZXQgdyh0KXt0aGlzLl93PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfXNldCh0LGUsbixpKXtyZXR1cm4gdGhpcy5feD10LHRoaXMuX3k9ZSx0aGlzLl96PW4sdGhpcy5fdz1pLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMuX3gsdGhpcy5feSx0aGlzLl96LHRoaXMuX3cpfWNvcHkodCl7cmV0dXJuIHRoaXMuX3g9dC54LHRoaXMuX3k9dC55LHRoaXMuX3o9dC56LHRoaXMuX3c9dC53LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21FdWxlcih0LGUpe2lmKCF0fHwhdC5pc0V1bGVyKXRocm93IG5ldyBFcnJvcigiVEhSRUUuUXVhdGVybmlvbjogLnNldEZyb21FdWxlcigpIG5vdyBleHBlY3RzIGFuIEV1bGVyIHJvdGF0aW9uIHJhdGhlciB0aGFuIGEgVmVjdG9yMyBhbmQgb3JkZXIuIik7Y29uc3Qgbj10Ll94LGk9dC5feSxyPXQuX3osbz10Ll9vcmRlcixhPU1hdGguY29zLHM9TWF0aC5zaW4sbD1hKG4vMiksYz1hKGkvMiksdT1hKHIvMiksaD1zKG4vMiksZD1zKGkvMikscD1zKHIvMik7c3dpdGNoKG8pe2Nhc2UiWFlaIjp0aGlzLl94PWgqYyp1K2wqZCpwLHRoaXMuX3k9bCpkKnUtaCpjKnAsdGhpcy5fej1sKmMqcCtoKmQqdSx0aGlzLl93PWwqYyp1LWgqZCpwO2JyZWFrO2Nhc2UiWVhaIjp0aGlzLl94PWgqYyp1K2wqZCpwLHRoaXMuX3k9bCpkKnUtaCpjKnAsdGhpcy5fej1sKmMqcC1oKmQqdSx0aGlzLl93PWwqYyp1K2gqZCpwO2JyZWFrO2Nhc2UiWlhZIjp0aGlzLl94PWgqYyp1LWwqZCpwLHRoaXMuX3k9bCpkKnUraCpjKnAsdGhpcy5fej1sKmMqcCtoKmQqdSx0aGlzLl93PWwqYyp1LWgqZCpwO2JyZWFrO2Nhc2UiWllYIjp0aGlzLl94PWgqYyp1LWwqZCpwLHRoaXMuX3k9bCpkKnUraCpjKnAsdGhpcy5fej1sKmMqcC1oKmQqdSx0aGlzLl93PWwqYyp1K2gqZCpwO2JyZWFrO2Nhc2UiWVpYIjp0aGlzLl94PWgqYyp1K2wqZCpwLHRoaXMuX3k9bCpkKnUraCpjKnAsdGhpcy5fej1sKmMqcC1oKmQqdSx0aGlzLl93PWwqYyp1LWgqZCpwO2JyZWFrO2Nhc2UiWFpZIjp0aGlzLl94PWgqYyp1LWwqZCpwLHRoaXMuX3k9bCpkKnUtaCpjKnAsdGhpcy5fej1sKmMqcCtoKmQqdSx0aGlzLl93PWwqYyp1K2gqZCpwO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiAuc2V0RnJvbUV1bGVyKCkgZW5jb3VudGVyZWQgYW4gdW5rbm93biBvcmRlcjogIitvKX1yZXR1cm4hMSE9PWUmJnRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21BeGlzQW5nbGUodCxlKXtjb25zdCBuPWUvMixpPU1hdGguc2luKG4pO3JldHVybiB0aGlzLl94PXQueCppLHRoaXMuX3k9dC55KmksdGhpcy5fej10LnoqaSx0aGlzLl93PU1hdGguY29zKG4pLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21Sb3RhdGlvbk1hdHJpeCh0KXtjb25zdCBlPXQuZWxlbWVudHMsbj1lWzBdLGk9ZVs0XSxyPWVbOF0sbz1lWzFdLGE9ZVs1XSxzPWVbOV0sbD1lWzJdLGM9ZVs2XSx1PWVbMTBdLGg9bithK3U7aWYoaD4wKXtjb25zdCB0PS41L01hdGguc3FydChoKzEpO3RoaXMuX3c9LjI1L3QsdGhpcy5feD0oYy1zKSp0LHRoaXMuX3k9KHItbCkqdCx0aGlzLl96PShvLWkpKnR9ZWxzZSBpZihuPmEmJm4+dSl7Y29uc3QgdD0yKk1hdGguc3FydCgxK24tYS11KTt0aGlzLl93PShjLXMpL3QsdGhpcy5feD0uMjUqdCx0aGlzLl95PShpK28pL3QsdGhpcy5fej0ocitsKS90fWVsc2UgaWYoYT51KXtjb25zdCB0PTIqTWF0aC5zcXJ0KDErYS1uLXUpO3RoaXMuX3c9KHItbCkvdCx0aGlzLl94PShpK28pL3QsdGhpcy5feT0uMjUqdCx0aGlzLl96PShzK2MpL3R9ZWxzZXtjb25zdCB0PTIqTWF0aC5zcXJ0KDErdS1uLWEpO3RoaXMuX3c9KG8taSkvdCx0aGlzLl94PShyK2wpL3QsdGhpcy5feT0ocytjKS90LHRoaXMuX3o9LjI1KnR9cmV0dXJuIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21Vbml0VmVjdG9ycyh0LGUpe2xldCBuPXQuZG90KGUpKzE7cmV0dXJuIG48MWUtNj8obj0wLE1hdGguYWJzKHQueCk+TWF0aC5hYnModC56KT8odGhpcy5feD0tdC55LHRoaXMuX3k9dC54LHRoaXMuX3o9MCx0aGlzLl93PW4pOih0aGlzLl94PTAsdGhpcy5feT0tdC56LHRoaXMuX3o9dC55LHRoaXMuX3c9bikpOih0aGlzLl94PXQueSplLnotdC56KmUueSx0aGlzLl95PXQueiplLngtdC54KmUueix0aGlzLl96PXQueCplLnktdC55KmUueCx0aGlzLl93PW4pLHRoaXMubm9ybWFsaXplKCl9YW5nbGVUbyh0KXtyZXR1cm4gMipNYXRoLmFjb3MoTWF0aC5hYnMoUk90LmNsYW1wKHRoaXMuZG90KHQpLC0xLDEpKSl9cm90YXRlVG93YXJkcyh0LGUpe2NvbnN0IG49dGhpcy5hbmdsZVRvKHQpO2lmKDA9PT1uKXJldHVybiB0aGlzO2NvbnN0IGk9TWF0aC5taW4oMSxlL24pO3JldHVybiB0aGlzLnNsZXJwKHQsaSksdGhpc31pZGVudGl0eSgpe3JldHVybiB0aGlzLnNldCgwLDAsMCwxKX1pbnZlcnQoKXtyZXR1cm4gdGhpcy5jb25qdWdhdGUoKX1jb25qdWdhdGUoKXtyZXR1cm4gdGhpcy5feCo9LTEsdGhpcy5feSo9LTEsdGhpcy5feio9LTEsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9ZG90KHQpe3JldHVybiB0aGlzLl94KnQuX3grdGhpcy5feSp0Ll95K3RoaXMuX3oqdC5feit0aGlzLl93KnQuX3d9bGVuZ3RoU3EoKXtyZXR1cm4gdGhpcy5feCp0aGlzLl94K3RoaXMuX3kqdGhpcy5feSt0aGlzLl96KnRoaXMuX3ordGhpcy5fdyp0aGlzLl93fWxlbmd0aCgpe3JldHVybiBNYXRoLnNxcnQodGhpcy5feCp0aGlzLl94K3RoaXMuX3kqdGhpcy5feSt0aGlzLl96KnRoaXMuX3ordGhpcy5fdyp0aGlzLl93KX1ub3JtYWxpemUoKXtsZXQgdD10aGlzLmxlbmd0aCgpO3JldHVybiAwPT09dD8odGhpcy5feD0wLHRoaXMuX3k9MCx0aGlzLl96PTAsdGhpcy5fdz0xKToodD0xL3QsdGhpcy5feD10aGlzLl94KnQsdGhpcy5feT10aGlzLl95KnQsdGhpcy5fej10aGlzLl96KnQsdGhpcy5fdz10aGlzLl93KnQpLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfW11bHRpcGx5KHQsZSl7cmV0dXJuIHZvaWQgMCE9PWU/KGNvbnNvbGUud2FybigiVEhSRUUuUXVhdGVybmlvbjogLm11bHRpcGx5KCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAubXVsdGlwbHlRdWF0ZXJuaW9ucyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5tdWx0aXBseVF1YXRlcm5pb25zKHQsZSkpOnRoaXMubXVsdGlwbHlRdWF0ZXJuaW9ucyh0aGlzLHQpfXByZW11bHRpcGx5KHQpe3JldHVybiB0aGlzLm11bHRpcGx5UXVhdGVybmlvbnModCx0aGlzKX1tdWx0aXBseVF1YXRlcm5pb25zKHQsZSl7Y29uc3Qgbj10Ll94LGk9dC5feSxyPXQuX3osbz10Ll93LGE9ZS5feCxzPWUuX3ksbD1lLl96LGM9ZS5fdztyZXR1cm4gdGhpcy5feD1uKmMrbyphK2kqbC1yKnMsdGhpcy5feT1pKmMrbypzK3IqYS1uKmwsdGhpcy5fej1yKmMrbypsK24qcy1pKmEsdGhpcy5fdz1vKmMtbiphLWkqcy1yKmwsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2xlcnAodCxlKXtpZigwPT09ZSlyZXR1cm4gdGhpcztpZigxPT09ZSlyZXR1cm4gdGhpcy5jb3B5KHQpO2NvbnN0IG49dGhpcy5feCxpPXRoaXMuX3kscj10aGlzLl96LG89dGhpcy5fdztsZXQgYT1vKnQuX3crbip0Ll94K2kqdC5feStyKnQuX3o7aWYoYTwwPyh0aGlzLl93PS10Ll93LHRoaXMuX3g9LXQuX3gsdGhpcy5feT0tdC5feSx0aGlzLl96PS10Ll96LGE9LWEpOnRoaXMuY29weSh0KSxhPj0xKXJldHVybiB0aGlzLl93PW8sdGhpcy5feD1uLHRoaXMuX3k9aSx0aGlzLl96PXIsdGhpcztjb25zdCBzPTEtYSphO2lmKHM8PU51bWJlci5FUFNJTE9OKXtjb25zdCB0PTEtZTtyZXR1cm4gdGhpcy5fdz10Km8rZSp0aGlzLl93LHRoaXMuX3g9dCpuK2UqdGhpcy5feCx0aGlzLl95PXQqaStlKnRoaXMuX3ksdGhpcy5fej10KnIrZSp0aGlzLl96LHRoaXMubm9ybWFsaXplKCksdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9Y29uc3QgbD1NYXRoLnNxcnQocyksYz1NYXRoLmF0YW4yKGwsYSksdT1NYXRoLnNpbigoMS1lKSpjKS9sLGg9TWF0aC5zaW4oZSpjKS9sO3JldHVybiB0aGlzLl93PW8qdSt0aGlzLl93KmgsdGhpcy5feD1uKnUrdGhpcy5feCpoLHRoaXMuX3k9aSp1K3RoaXMuX3kqaCx0aGlzLl96PXIqdSt0aGlzLl96KmgsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Ll94PT09dGhpcy5feCYmdC5feT09PXRoaXMuX3kmJnQuX3o9PT10aGlzLl96JiZ0Ll93PT09dGhpcy5fd31mcm9tQXJyYXkodCxlPTApe3JldHVybiB0aGlzLl94PXRbZV0sdGhpcy5feT10W2UrMV0sdGhpcy5fej10W2UrMl0sdGhpcy5fdz10W2UrM10sdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7cmV0dXJuIHRbZV09dGhpcy5feCx0W2UrMV09dGhpcy5feSx0W2UrMl09dGhpcy5feix0W2UrM109dGhpcy5fdyx0fWZyb21CdWZmZXJBdHRyaWJ1dGUodCxlKXtyZXR1cm4gdGhpcy5feD10LmdldFgoZSksdGhpcy5feT10LmdldFkoZSksdGhpcy5fej10LmdldFooZSksdGhpcy5fdz10LmdldFcoZSksdGhpc31fb25DaGFuZ2UodCl7cmV0dXJuIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2s9dCx0aGlzfV9vbkNoYW5nZUNhbGxiYWNrKCl7fX1jbGFzcyBxT3R7Y29uc3RydWN0b3IodD0wLGU9MCxuPTApe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpc1ZlY3RvcjMiLHt2YWx1ZTohMH0pLHRoaXMueD10LHRoaXMueT1lLHRoaXMuej1ufXNldCh0LGUsbil7cmV0dXJuIHZvaWQgMD09PW4mJihuPXRoaXMueiksdGhpcy54PXQsdGhpcy55PWUsdGhpcy56PW4sdGhpc31zZXRTY2FsYXIodCl7cmV0dXJuIHRoaXMueD10LHRoaXMueT10LHRoaXMuej10LHRoaXN9c2V0WCh0KXtyZXR1cm4gdGhpcy54PXQsdGhpc31zZXRZKHQpe3JldHVybiB0aGlzLnk9dCx0aGlzfXNldFoodCl7cmV0dXJuIHRoaXMuej10LHRoaXN9c2V0Q29tcG9uZW50KHQsZSl7c3dpdGNoKHQpe2Nhc2UgMDp0aGlzLng9ZTticmVhaztjYXNlIDE6dGhpcy55PWU7YnJlYWs7Y2FzZSAyOnRoaXMuej1lO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrdCl9cmV0dXJuIHRoaXN9Z2V0Q29tcG9uZW50KHQpe3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIHRoaXMueDtjYXNlIDE6cmV0dXJuIHRoaXMueTtjYXNlIDI6cmV0dXJuIHRoaXMuejtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK3QpfX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLngsdGhpcy55LHRoaXMueil9Y29weSh0KXtyZXR1cm4gdGhpcy54PXQueCx0aGlzLnk9dC55LHRoaXMuej10LnosdGhpc31hZGQodCxlKXtyZXR1cm4gdm9pZCAwIT09ZT8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuYWRkKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuYWRkVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5hZGRWZWN0b3JzKHQsZSkpOih0aGlzLngrPXQueCx0aGlzLnkrPXQueSx0aGlzLnorPXQueix0aGlzKX1hZGRTY2FsYXIodCl7cmV0dXJuIHRoaXMueCs9dCx0aGlzLnkrPXQsdGhpcy56Kz10LHRoaXN9YWRkVmVjdG9ycyh0LGUpe3JldHVybiB0aGlzLng9dC54K2UueCx0aGlzLnk9dC55K2UueSx0aGlzLno9dC56K2Uueix0aGlzfWFkZFNjYWxlZFZlY3Rvcih0LGUpe3JldHVybiB0aGlzLngrPXQueCplLHRoaXMueSs9dC55KmUsdGhpcy56Kz10LnoqZSx0aGlzfXN1Yih0LGUpe3JldHVybiB2b2lkIDAhPT1lPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5zdWIoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5zdWJWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLnN1YlZlY3RvcnModCxlKSk6KHRoaXMueC09dC54LHRoaXMueS09dC55LHRoaXMuei09dC56LHRoaXMpfXN1YlNjYWxhcih0KXtyZXR1cm4gdGhpcy54LT10LHRoaXMueS09dCx0aGlzLnotPXQsdGhpc31zdWJWZWN0b3JzKHQsZSl7cmV0dXJuIHRoaXMueD10LngtZS54LHRoaXMueT10LnktZS55LHRoaXMuej10LnotZS56LHRoaXN9bXVsdGlwbHkodCxlKXtyZXR1cm4gdm9pZCAwIT09ZT8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAubXVsdGlwbHkoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5tdWx0aXBseVZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMubXVsdGlwbHlWZWN0b3JzKHQsZSkpOih0aGlzLngqPXQueCx0aGlzLnkqPXQueSx0aGlzLnoqPXQueix0aGlzKX1tdWx0aXBseVNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kj10LHRoaXMueSo9dCx0aGlzLnoqPXQsdGhpc31tdWx0aXBseVZlY3RvcnModCxlKXtyZXR1cm4gdGhpcy54PXQueCplLngsdGhpcy55PXQueSplLnksdGhpcy56PXQueiplLnosdGhpc31hcHBseUV1bGVyKHQpe3JldHVybiB0JiZ0LmlzRXVsZXJ8fGNvbnNvbGUuZXJyb3IoIlRIUkVFLlZlY3RvcjM6IC5hcHBseUV1bGVyKCkgbm93IGV4cGVjdHMgYW4gRXVsZXIgcm90YXRpb24gcmF0aGVyIHRoYW4gYSBWZWN0b3IzIGFuZCBvcmRlci4iKSx0aGlzLmFwcGx5UXVhdGVybmlvbihYT3Quc2V0RnJvbUV1bGVyKHQpKX1hcHBseUF4aXNBbmdsZSh0LGUpe3JldHVybiB0aGlzLmFwcGx5UXVhdGVybmlvbihYT3Quc2V0RnJvbUF4aXNBbmdsZSh0LGUpKX1hcHBseU1hdHJpeDModCl7Y29uc3QgZT10aGlzLngsbj10aGlzLnksaT10aGlzLnoscj10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9clswXSplK3JbM10qbityWzZdKmksdGhpcy55PXJbMV0qZStyWzRdKm4rcls3XSppLHRoaXMuej1yWzJdKmUrcls1XSpuK3JbOF0qaSx0aGlzfWFwcGx5Tm9ybWFsTWF0cml4KHQpe3JldHVybiB0aGlzLmFwcGx5TWF0cml4Myh0KS5ub3JtYWxpemUoKX1hcHBseU1hdHJpeDQodCl7Y29uc3QgZT10aGlzLngsbj10aGlzLnksaT10aGlzLnoscj10LmVsZW1lbnRzLG89MS8oclszXSplK3JbN10qbityWzExXSppK3JbMTVdKTtyZXR1cm4gdGhpcy54PShyWzBdKmUrcls0XSpuK3JbOF0qaStyWzEyXSkqbyx0aGlzLnk9KHJbMV0qZStyWzVdKm4rcls5XSppK3JbMTNdKSpvLHRoaXMuej0oclsyXSplK3JbNl0qbityWzEwXSppK3JbMTRdKSpvLHRoaXN9YXBwbHlRdWF0ZXJuaW9uKHQpe2NvbnN0IGU9dGhpcy54LG49dGhpcy55LGk9dGhpcy56LHI9dC54LG89dC55LGE9dC56LHM9dC53LGw9cyplK28qaS1hKm4sYz1zKm4rYSplLXIqaSx1PXMqaStyKm4tbyplLGg9LXIqZS1vKm4tYSppO3JldHVybiB0aGlzLng9bCpzK2gqLXIrYyotYS11Ki1vLHRoaXMueT1jKnMraCotbyt1Ki1yLWwqLWEsdGhpcy56PXUqcytoKi1hK2wqLW8tYyotcix0aGlzfXByb2plY3QodCl7cmV0dXJuIHRoaXMuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGRJbnZlcnNlKS5hcHBseU1hdHJpeDQodC5wcm9qZWN0aW9uTWF0cml4KX11bnByb2plY3QodCl7cmV0dXJuIHRoaXMuYXBwbHlNYXRyaXg0KHQucHJvamVjdGlvbk1hdHJpeEludmVyc2UpLmFwcGx5TWF0cml4NCh0Lm1hdHJpeFdvcmxkKX10cmFuc2Zvcm1EaXJlY3Rpb24odCl7Y29uc3QgZT10aGlzLngsbj10aGlzLnksaT10aGlzLnoscj10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9clswXSplK3JbNF0qbityWzhdKmksdGhpcy55PXJbMV0qZStyWzVdKm4rcls5XSppLHRoaXMuej1yWzJdKmUrcls2XSpuK3JbMTBdKmksdGhpcy5ub3JtYWxpemUoKX1kaXZpZGUodCl7cmV0dXJuIHRoaXMueC89dC54LHRoaXMueS89dC55LHRoaXMuei89dC56LHRoaXN9ZGl2aWRlU2NhbGFyKHQpe3JldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKDEvdCl9bWluKHQpe3JldHVybiB0aGlzLng9TWF0aC5taW4odGhpcy54LHQueCksdGhpcy55PU1hdGgubWluKHRoaXMueSx0LnkpLHRoaXMuej1NYXRoLm1pbih0aGlzLnosdC56KSx0aGlzfW1heCh0KXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1heCh0aGlzLnksdC55KSx0aGlzLno9TWF0aC5tYXgodGhpcy56LHQueiksdGhpc31jbGFtcCh0LGUpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodC54LE1hdGgubWluKGUueCx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodC55LE1hdGgubWluKGUueSx0aGlzLnkpKSx0aGlzLno9TWF0aC5tYXgodC56LE1hdGgubWluKGUueix0aGlzLnopKSx0aGlzfWNsYW1wU2NhbGFyKHQsZSl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy54KSksdGhpcy55PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLnkpKSx0aGlzLno9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMueikpLHRoaXN9Y2xhbXBMZW5ndGgodCxlKXtjb25zdCBuPXRoaXMubGVuZ3RoKCk7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKG58fDEpLm11bHRpcGx5U2NhbGFyKE1hdGgubWF4KHQsTWF0aC5taW4oZSxuKSkpfWZsb29yKCl7cmV0dXJuIHRoaXMueD1NYXRoLmZsb29yKHRoaXMueCksdGhpcy55PU1hdGguZmxvb3IodGhpcy55KSx0aGlzLno9TWF0aC5mbG9vcih0aGlzLnopLHRoaXN9Y2VpbCgpe3JldHVybiB0aGlzLng9TWF0aC5jZWlsKHRoaXMueCksdGhpcy55PU1hdGguY2VpbCh0aGlzLnkpLHRoaXMuej1NYXRoLmNlaWwodGhpcy56KSx0aGlzfXJvdW5kKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJvdW5kKHRoaXMueCksdGhpcy55PU1hdGgucm91bmQodGhpcy55KSx0aGlzLno9TWF0aC5yb3VuZCh0aGlzLnopLHRoaXN9cm91bmRUb1plcm8oKXtyZXR1cm4gdGhpcy54PXRoaXMueDwwP01hdGguY2VpbCh0aGlzLngpOk1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9dGhpcy55PDA/TWF0aC5jZWlsKHRoaXMueSk6TWF0aC5mbG9vcih0aGlzLnkpLHRoaXMuej10aGlzLno8MD9NYXRoLmNlaWwodGhpcy56KTpNYXRoLmZsb29yKHRoaXMueiksdGhpc31uZWdhdGUoKXtyZXR1cm4gdGhpcy54PS10aGlzLngsdGhpcy55PS10aGlzLnksdGhpcy56PS10aGlzLnosdGhpc31kb3QodCl7cmV0dXJuIHRoaXMueCp0LngrdGhpcy55KnQueSt0aGlzLnoqdC56fWxlbmd0aFNxKCl7cmV0dXJuIHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSt0aGlzLnoqdGhpcy56fWxlbmd0aCgpe3JldHVybiBNYXRoLnNxcnQodGhpcy54KnRoaXMueCt0aGlzLnkqdGhpcy55K3RoaXMueip0aGlzLnopfW1hbmhhdHRhbkxlbmd0aCgpe3JldHVybiBNYXRoLmFicyh0aGlzLngpK01hdGguYWJzKHRoaXMueSkrTWF0aC5hYnModGhpcy56KX1ub3JtYWxpemUoKXtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIodGhpcy5sZW5ndGgoKXx8MSl9c2V0TGVuZ3RoKHQpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKHQpfWxlcnAodCxlKXtyZXR1cm4gdGhpcy54Kz0odC54LXRoaXMueCkqZSx0aGlzLnkrPSh0LnktdGhpcy55KSplLHRoaXMueis9KHQuei10aGlzLnopKmUsdGhpc31sZXJwVmVjdG9ycyh0LGUsbil7cmV0dXJuIHRoaXMueD10LngrKGUueC10LngpKm4sdGhpcy55PXQueSsoZS55LXQueSkqbix0aGlzLno9dC56KyhlLnotdC56KSpuLHRoaXN9Y3Jvc3ModCxlKXtyZXR1cm4gdm9pZCAwIT09ZT8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuY3Jvc3MoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5jcm9zc1ZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuY3Jvc3NWZWN0b3JzKHQsZSkpOnRoaXMuY3Jvc3NWZWN0b3JzKHRoaXMsdCl9Y3Jvc3NWZWN0b3JzKHQsZSl7Y29uc3Qgbj10LngsaT10Lnkscj10Lnosbz1lLngsYT1lLnkscz1lLno7cmV0dXJuIHRoaXMueD1pKnMtciphLHRoaXMueT1yKm8tbipzLHRoaXMuej1uKmEtaSpvLHRoaXN9cHJvamVjdE9uVmVjdG9yKHQpe2NvbnN0IGU9dC5sZW5ndGhTcSgpO2lmKDA9PT1lKXJldHVybiB0aGlzLnNldCgwLDAsMCk7Y29uc3Qgbj10LmRvdCh0aGlzKS9lO3JldHVybiB0aGlzLmNvcHkodCkubXVsdGlwbHlTY2FsYXIobil9cHJvamVjdE9uUGxhbmUodCl7cmV0dXJuIFlPdC5jb3B5KHRoaXMpLnByb2plY3RPblZlY3Rvcih0KSx0aGlzLnN1YihZT3QpfXJlZmxlY3QodCl7cmV0dXJuIHRoaXMuc3ViKFlPdC5jb3B5KHQpLm11bHRpcGx5U2NhbGFyKDIqdGhpcy5kb3QodCkpKX1hbmdsZVRvKHQpe2NvbnN0IGU9TWF0aC5zcXJ0KHRoaXMubGVuZ3RoU3EoKSp0Lmxlbmd0aFNxKCkpO2lmKDA9PT1lKXJldHVybiBNYXRoLlBJLzI7Y29uc3Qgbj10aGlzLmRvdCh0KS9lO3JldHVybiBNYXRoLmFjb3MoUk90LmNsYW1wKG4sLTEsMSkpfWRpc3RhbmNlVG8odCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLmRpc3RhbmNlVG9TcXVhcmVkKHQpKX1kaXN0YW5jZVRvU3F1YXJlZCh0KXtjb25zdCBlPXRoaXMueC10Lngsbj10aGlzLnktdC55LGk9dGhpcy56LXQuejtyZXR1cm4gZSplK24qbitpKml9bWFuaGF0dGFuRGlzdGFuY2VUbyh0KXtyZXR1cm4gTWF0aC5hYnModGhpcy54LXQueCkrTWF0aC5hYnModGhpcy55LXQueSkrTWF0aC5hYnModGhpcy56LXQueil9c2V0RnJvbVNwaGVyaWNhbCh0KXtyZXR1cm4gdGhpcy5zZXRGcm9tU3BoZXJpY2FsQ29vcmRzKHQucmFkaXVzLHQucGhpLHQudGhldGEpfXNldEZyb21TcGhlcmljYWxDb29yZHModCxlLG4pe2NvbnN0IGk9TWF0aC5zaW4oZSkqdDtyZXR1cm4gdGhpcy54PWkqTWF0aC5zaW4obiksdGhpcy55PU1hdGguY29zKGUpKnQsdGhpcy56PWkqTWF0aC5jb3MobiksdGhpc31zZXRGcm9tQ3lsaW5kcmljYWwodCl7cmV0dXJuIHRoaXMuc2V0RnJvbUN5bGluZHJpY2FsQ29vcmRzKHQucmFkaXVzLHQudGhldGEsdC55KX1zZXRGcm9tQ3lsaW5kcmljYWxDb29yZHModCxlLG4pe3JldHVybiB0aGlzLng9dCpNYXRoLnNpbihlKSx0aGlzLnk9bix0aGlzLno9dCpNYXRoLmNvcyhlKSx0aGlzfXNldEZyb21NYXRyaXhQb3NpdGlvbih0KXtjb25zdCBlPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMueD1lWzEyXSx0aGlzLnk9ZVsxM10sdGhpcy56PWVbMTRdLHRoaXN9c2V0RnJvbU1hdHJpeFNjYWxlKHQpe2NvbnN0IGU9dGhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKHQsMCkubGVuZ3RoKCksbj10aGlzLnNldEZyb21NYXRyaXhDb2x1bW4odCwxKS5sZW5ndGgoKSxpPXRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbih0LDIpLmxlbmd0aCgpO3JldHVybiB0aGlzLng9ZSx0aGlzLnk9bix0aGlzLno9aSx0aGlzfXNldEZyb21NYXRyaXhDb2x1bW4odCxlKXtyZXR1cm4gdGhpcy5mcm9tQXJyYXkodC5lbGVtZW50cyw0KmUpfXNldEZyb21NYXRyaXgzQ29sdW1uKHQsZSl7cmV0dXJuIHRoaXMuZnJvbUFycmF5KHQuZWxlbWVudHMsMyplKX1lcXVhbHModCl7cmV0dXJuIHQueD09PXRoaXMueCYmdC55PT09dGhpcy55JiZ0Lno9PT10aGlzLnp9ZnJvbUFycmF5KHQsZT0wKXtyZXR1cm4gdGhpcy54PXRbZV0sdGhpcy55PXRbZSsxXSx0aGlzLno9dFtlKzJdLHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7cmV0dXJuIHRbZV09dGhpcy54LHRbZSsxXT10aGlzLnksdFtlKzJdPXRoaXMueix0fWZyb21CdWZmZXJBdHRyaWJ1dGUodCxlLG4pe3JldHVybiB2b2lkIDAhPT1uJiZjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IG9mZnNldCBoYXMgYmVlbiByZW1vdmVkIGZyb20gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKSx0aGlzLng9dC5nZXRYKGUpLHRoaXMueT10LmdldFkoZSksdGhpcy56PXQuZ2V0WihlKSx0aGlzfXJhbmRvbSgpe3JldHVybiB0aGlzLng9TWF0aC5yYW5kb20oKSx0aGlzLnk9TWF0aC5yYW5kb20oKSx0aGlzLno9TWF0aC5yYW5kb20oKSx0aGlzfX1jb25zdCBZT3Q9bmV3IHFPdCxYT3Q9bmV3IFdPdDtjbGFzcyAkT3R7Y29uc3RydWN0b3IodCxlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaXNCb3gzIix7dmFsdWU6ITB9KSx0aGlzLm1pbj12b2lkIDAhPT10P3Q6bmV3IHFPdCgxLzAsMS8wLDEvMCksdGhpcy5tYXg9dm9pZCAwIT09ZT9lOm5ldyBxT3QoLTEvMCwtMS8wLC0xLzApfXNldCh0LGUpe3JldHVybiB0aGlzLm1pbi5jb3B5KHQpLHRoaXMubWF4LmNvcHkoZSksdGhpc31zZXRGcm9tQXJyYXkodCl7bGV0IGU9MS8wLG49MS8wLGk9MS8wLHI9LTEvMCxvPS0xLzAsYT0tMS8wO2ZvcihsZXQgcz0wLGw9dC5sZW5ndGg7czxsO3MrPTMpe2NvbnN0IGw9dFtzXSxjPXRbcysxXSx1PXRbcysyXTtsPGUmJihlPWwpLGM8biYmKG49YyksdTxpJiYoaT11KSxsPnImJihyPWwpLGM+byYmKG89YyksdT5hJiYoYT11KX1yZXR1cm4gdGhpcy5taW4uc2V0KGUsbixpKSx0aGlzLm1heC5zZXQocixvLGEpLHRoaXN9c2V0RnJvbUJ1ZmZlckF0dHJpYnV0ZSh0KXtsZXQgZT0xLzAsbj0xLzAsaT0xLzAscj0tMS8wLG89LTEvMCxhPS0xLzA7Zm9yKGxldCBzPTAsbD10LmNvdW50O3M8bDtzKyspe2NvbnN0IGw9dC5nZXRYKHMpLGM9dC5nZXRZKHMpLHU9dC5nZXRaKHMpO2w8ZSYmKGU9bCksYzxuJiYobj1jKSx1PGkmJihpPXUpLGw+ciYmKHI9bCksYz5vJiYobz1jKSx1PmEmJihhPXUpfXJldHVybiB0aGlzLm1pbi5zZXQoZSxuLGkpLHRoaXMubWF4LnNldChyLG8sYSksdGhpc31zZXRGcm9tUG9pbnRzKHQpe3RoaXMubWFrZUVtcHR5KCk7Zm9yKGxldCBlPTAsbj10Lmxlbmd0aDtlPG47ZSsrKXRoaXMuZXhwYW5kQnlQb2ludCh0W2VdKTtyZXR1cm4gdGhpc31zZXRGcm9tQ2VudGVyQW5kU2l6ZSh0LGUpe2NvbnN0IG49Sk90LmNvcHkoZSkubXVsdGlwbHlTY2FsYXIoLjUpO3JldHVybiB0aGlzLm1pbi5jb3B5KHQpLnN1YihuKSx0aGlzLm1heC5jb3B5KHQpLmFkZChuKSx0aGlzfXNldEZyb21PYmplY3QodCl7cmV0dXJuIHRoaXMubWFrZUVtcHR5KCksdGhpcy5leHBhbmRCeU9iamVjdCh0KX1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLm1pbi5jb3B5KHQubWluKSx0aGlzLm1heC5jb3B5KHQubWF4KSx0aGlzfW1ha2VFbXB0eSgpe3JldHVybiB0aGlzLm1pbi54PXRoaXMubWluLnk9dGhpcy5taW4uej0xLzAsdGhpcy5tYXgueD10aGlzLm1heC55PXRoaXMubWF4Lno9LTEvMCx0aGlzfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5tYXgueDx0aGlzLm1pbi54fHx0aGlzLm1heC55PHRoaXMubWluLnl8fHRoaXMubWF4Lno8dGhpcy5taW4uen1nZXRDZW50ZXIodCl7cmV0dXJuIHZvaWQgMD09PXQmJihjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5nZXRDZW50ZXIoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIiksdD1uZXcgcU90KSx0aGlzLmlzRW1wdHkoKT90LnNldCgwLDAsMCk6dC5hZGRWZWN0b3JzKHRoaXMubWluLHRoaXMubWF4KS5tdWx0aXBseVNjYWxhciguNSl9Z2V0U2l6ZSh0KXtyZXR1cm4gdm9pZCAwPT09dCYmKGNvbnNvbGUud2FybigiVEhSRUUuQm94MzogLmdldFNpemUoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIiksdD1uZXcgcU90KSx0aGlzLmlzRW1wdHkoKT90LnNldCgwLDAsMCk6dC5zdWJWZWN0b3JzKHRoaXMubWF4LHRoaXMubWluKX1leHBhbmRCeVBvaW50KHQpe3JldHVybiB0aGlzLm1pbi5taW4odCksdGhpcy5tYXgubWF4KHQpLHRoaXN9ZXhwYW5kQnlWZWN0b3IodCl7cmV0dXJuIHRoaXMubWluLnN1Yih0KSx0aGlzLm1heC5hZGQodCksdGhpc31leHBhbmRCeVNjYWxhcih0KXtyZXR1cm4gdGhpcy5taW4uYWRkU2NhbGFyKC10KSx0aGlzLm1heC5hZGRTY2FsYXIodCksdGhpc31leHBhbmRCeU9iamVjdCh0KXt0LnVwZGF0ZVdvcmxkTWF0cml4KCExLCExKTtjb25zdCBlPXQuZ2VvbWV0cnk7dm9pZCAwIT09ZSYmKG51bGw9PT1lLmJvdW5kaW5nQm94JiZlLmNvbXB1dGVCb3VuZGluZ0JveCgpLFFPdC5jb3B5KGUuYm91bmRpbmdCb3gpLFFPdC5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZCksdGhpcy51bmlvbihRT3QpKTtjb25zdCBuPXQuY2hpbGRyZW47Zm9yKGxldCB0PTAsZT1uLmxlbmd0aDt0PGU7dCsrKXRoaXMuZXhwYW5kQnlPYmplY3Qoblt0XSk7cmV0dXJuIHRoaXN9Y29udGFpbnNQb2ludCh0KXtyZXR1cm4hKHQueDx0aGlzLm1pbi54fHx0Lng+dGhpcy5tYXgueHx8dC55PHRoaXMubWluLnl8fHQueT50aGlzLm1heC55fHx0Lno8dGhpcy5taW4uenx8dC56PnRoaXMubWF4LnopfWNvbnRhaW5zQm94KHQpe3JldHVybiB0aGlzLm1pbi54PD10Lm1pbi54JiZ0Lm1heC54PD10aGlzLm1heC54JiZ0aGlzLm1pbi55PD10Lm1pbi55JiZ0Lm1heC55PD10aGlzLm1heC55JiZ0aGlzLm1pbi56PD10Lm1pbi56JiZ0Lm1heC56PD10aGlzLm1heC56fWdldFBhcmFtZXRlcih0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuZ2V0UGFyYW1ldGVyKCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLGU9bmV3IHFPdCksZS5zZXQoKHQueC10aGlzLm1pbi54KS8odGhpcy5tYXgueC10aGlzLm1pbi54KSwodC55LXRoaXMubWluLnkpLyh0aGlzLm1heC55LXRoaXMubWluLnkpLCh0LnotdGhpcy5taW4ueikvKHRoaXMubWF4LnotdGhpcy5taW4ueikpfWludGVyc2VjdHNCb3godCl7cmV0dXJuISh0Lm1heC54PHRoaXMubWluLnh8fHQubWluLng+dGhpcy5tYXgueHx8dC5tYXgueTx0aGlzLm1pbi55fHx0Lm1pbi55PnRoaXMubWF4Lnl8fHQubWF4Lno8dGhpcy5taW4uenx8dC5taW4uej50aGlzLm1heC56KX1pbnRlcnNlY3RzU3BoZXJlKHQpe3JldHVybiB0aGlzLmNsYW1wUG9pbnQodC5jZW50ZXIsSk90KSxKT3QuZGlzdGFuY2VUb1NxdWFyZWQodC5jZW50ZXIpPD10LnJhZGl1cyp0LnJhZGl1c31pbnRlcnNlY3RzUGxhbmUodCl7bGV0IGUsbjtyZXR1cm4gdC5ub3JtYWwueD4wPyhlPXQubm9ybWFsLngqdGhpcy5taW4ueCxuPXQubm9ybWFsLngqdGhpcy5tYXgueCk6KGU9dC5ub3JtYWwueCp0aGlzLm1heC54LG49dC5ub3JtYWwueCp0aGlzLm1pbi54KSx0Lm5vcm1hbC55PjA/KGUrPXQubm9ybWFsLnkqdGhpcy5taW4ueSxuKz10Lm5vcm1hbC55KnRoaXMubWF4LnkpOihlKz10Lm5vcm1hbC55KnRoaXMubWF4Lnksbis9dC5ub3JtYWwueSp0aGlzLm1pbi55KSx0Lm5vcm1hbC56PjA/KGUrPXQubm9ybWFsLnoqdGhpcy5taW4ueixuKz10Lm5vcm1hbC56KnRoaXMubWF4LnopOihlKz10Lm5vcm1hbC56KnRoaXMubWF4Lnosbis9dC5ub3JtYWwueip0aGlzLm1pbi56KSxlPD0tdC5jb25zdGFudCYmbj49LXQuY29uc3RhbnR9aW50ZXJzZWN0c1RyaWFuZ2xlKHQpe2lmKHRoaXMuaXNFbXB0eSgpKXJldHVybiExO3RoaXMuZ2V0Q2VudGVyKGFSdCksc1J0LnN1YlZlY3RvcnModGhpcy5tYXgsYVJ0KSx0UnQuc3ViVmVjdG9ycyh0LmEsYVJ0KSxlUnQuc3ViVmVjdG9ycyh0LmIsYVJ0KSxuUnQuc3ViVmVjdG9ycyh0LmMsYVJ0KSxpUnQuc3ViVmVjdG9ycyhlUnQsdFJ0KSxyUnQuc3ViVmVjdG9ycyhuUnQsZVJ0KSxvUnQuc3ViVmVjdG9ycyh0UnQsblJ0KTtsZXQgZT1bMCwtaVJ0LnosaVJ0LnksMCwtclJ0LnosclJ0LnksMCwtb1J0Lnosb1J0LnksaVJ0LnosMCwtaVJ0LngsclJ0LnosMCwtclJ0Lngsb1J0LnosMCwtb1J0LngsLWlSdC55LGlSdC54LDAsLXJSdC55LHJSdC54LDAsLW9SdC55LG9SdC54LDBdO3JldHVybiEhS090KGUsdFJ0LGVSdCxuUnQsc1J0KSYmKGU9WzEsMCwwLDAsMSwwLDAsMCwxXSwhIUtPdChlLHRSdCxlUnQsblJ0LHNSdCkmJihsUnQuY3Jvc3NWZWN0b3JzKGlSdCxyUnQpLGU9W2xSdC54LGxSdC55LGxSdC56XSxLT3QoZSx0UnQsZVJ0LG5SdCxzUnQpKSl9Y2xhbXBQb2ludCh0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuY2xhbXBQb2ludCgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSxlPW5ldyBxT3QpLGUuY29weSh0KS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCl9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiBKT3QuY29weSh0KS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCkuc3ViKHQpLmxlbmd0aCgpfWdldEJvdW5kaW5nU3BoZXJlKHQpe3JldHVybiB2b2lkIDA9PT10JiZjb25zb2xlLmVycm9yKCJUSFJFRS5Cb3gzOiAuZ2V0Qm91bmRpbmdTcGhlcmUoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIiksdGhpcy5nZXRDZW50ZXIodC5jZW50ZXIpLHQucmFkaXVzPS41KnRoaXMuZ2V0U2l6ZShKT3QpLmxlbmd0aCgpLHR9aW50ZXJzZWN0KHQpe3JldHVybiB0aGlzLm1pbi5tYXgodC5taW4pLHRoaXMubWF4Lm1pbih0Lm1heCksdGhpcy5pc0VtcHR5KCkmJnRoaXMubWFrZUVtcHR5KCksdGhpc311bmlvbih0KXtyZXR1cm4gdGhpcy5taW4ubWluKHQubWluKSx0aGlzLm1heC5tYXgodC5tYXgpLHRoaXN9YXBwbHlNYXRyaXg0KHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKXx8KFpPdFswXS5zZXQodGhpcy5taW4ueCx0aGlzLm1pbi55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxaT3RbMV0uc2V0KHRoaXMubWluLngsdGhpcy5taW4ueSx0aGlzLm1heC56KS5hcHBseU1hdHJpeDQodCksWk90WzJdLnNldCh0aGlzLm1pbi54LHRoaXMubWF4LnksdGhpcy5taW4ueikuYXBwbHlNYXRyaXg0KHQpLFpPdFszXS5zZXQodGhpcy5taW4ueCx0aGlzLm1heC55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSxaT3RbNF0uc2V0KHRoaXMubWF4LngsdGhpcy5taW4ueSx0aGlzLm1pbi56KS5hcHBseU1hdHJpeDQodCksWk90WzVdLnNldCh0aGlzLm1heC54LHRoaXMubWluLnksdGhpcy5tYXgueikuYXBwbHlNYXRyaXg0KHQpLFpPdFs2XS5zZXQodGhpcy5tYXgueCx0aGlzLm1heC55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxaT3RbN10uc2V0KHRoaXMubWF4LngsdGhpcy5tYXgueSx0aGlzLm1heC56KS5hcHBseU1hdHJpeDQodCksdGhpcy5zZXRGcm9tUG9pbnRzKFpPdCkpLHRoaXN9dHJhbnNsYXRlKHQpe3JldHVybiB0aGlzLm1pbi5hZGQodCksdGhpcy5tYXguYWRkKHQpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lm1pbi5lcXVhbHModGhpcy5taW4pJiZ0Lm1heC5lcXVhbHModGhpcy5tYXgpfX1mdW5jdGlvbiBLT3QodCxlLG4saSxyKXtmb3IobGV0IG89MCxhPXQubGVuZ3RoLTM7bzw9YTtvKz0zKXtjUnQuZnJvbUFycmF5KHQsbyk7Y29uc3QgYT1yLngqTWF0aC5hYnMoY1J0LngpK3IueSpNYXRoLmFicyhjUnQueSkrci56Kk1hdGguYWJzKGNSdC56KSxzPWUuZG90KGNSdCksbD1uLmRvdChjUnQpLGM9aS5kb3QoY1J0KTtpZihNYXRoLm1heCgtTWF0aC5tYXgocyxsLGMpLE1hdGgubWluKHMsbCxjKSk+YSlyZXR1cm4hMX1yZXR1cm4hMH1jb25zdCBaT3Q9W25ldyBxT3QsbmV3IHFPdCxuZXcgcU90LG5ldyBxT3QsbmV3IHFPdCxuZXcgcU90LG5ldyBxT3QsbmV3IHFPdF0sSk90PW5ldyBxT3QsUU90PW5ldyAkT3QsdFJ0PW5ldyBxT3QsZVJ0PW5ldyBxT3QsblJ0PW5ldyBxT3QsaVJ0PW5ldyBxT3QsclJ0PW5ldyBxT3Qsb1J0PW5ldyBxT3QsYVJ0PW5ldyBxT3Qsc1J0PW5ldyBxT3QsbFJ0PW5ldyBxT3QsY1J0PW5ldyBxT3QsdVJ0PW5ldyAkT3Q7Y2xhc3MgaFJ0e2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5jZW50ZXI9dm9pZCAwIT09dD90Om5ldyBxT3QsdGhpcy5yYWRpdXM9dm9pZCAwIT09ZT9lOi0xfXNldCh0LGUpe3JldHVybiB0aGlzLmNlbnRlci5jb3B5KHQpLHRoaXMucmFkaXVzPWUsdGhpc31zZXRGcm9tUG9pbnRzKHQsZSl7Y29uc3Qgbj10aGlzLmNlbnRlcjt2b2lkIDAhPT1lP24uY29weShlKTp1UnQuc2V0RnJvbVBvaW50cyh0KS5nZXRDZW50ZXIobik7bGV0IGk9MDtmb3IobGV0IGU9MCxyPXQubGVuZ3RoO2U8cjtlKyspaT1NYXRoLm1heChpLG4uZGlzdGFuY2VUb1NxdWFyZWQodFtlXSkpO3JldHVybiB0aGlzLnJhZGl1cz1NYXRoLnNxcnQoaSksdGhpc31jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLmNlbnRlci5jb3B5KHQuY2VudGVyKSx0aGlzLnJhZGl1cz10LnJhZGl1cyx0aGlzfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5yYWRpdXM8MH1tYWtlRW1wdHkoKXtyZXR1cm4gdGhpcy5jZW50ZXIuc2V0KDAsMCwwKSx0aGlzLnJhZGl1cz0tMSx0aGlzfWNvbnRhaW5zUG9pbnQodCl7cmV0dXJuIHQuZGlzdGFuY2VUb1NxdWFyZWQodGhpcy5jZW50ZXIpPD10aGlzLnJhZGl1cyp0aGlzLnJhZGl1c31kaXN0YW5jZVRvUG9pbnQodCl7cmV0dXJuIHQuZGlzdGFuY2VUbyh0aGlzLmNlbnRlciktdGhpcy5yYWRpdXN9aW50ZXJzZWN0c1NwaGVyZSh0KXtjb25zdCBlPXRoaXMucmFkaXVzK3QucmFkaXVzO3JldHVybiB0LmNlbnRlci5kaXN0YW5jZVRvU3F1YXJlZCh0aGlzLmNlbnRlcik8PWUqZX1pbnRlcnNlY3RzQm94KHQpe3JldHVybiB0LmludGVyc2VjdHNTcGhlcmUodGhpcyl9aW50ZXJzZWN0c1BsYW5lKHQpe3JldHVybiBNYXRoLmFicyh0LmRpc3RhbmNlVG9Qb2ludCh0aGlzLmNlbnRlcikpPD10aGlzLnJhZGl1c31jbGFtcFBvaW50KHQsZSl7Y29uc3Qgbj10aGlzLmNlbnRlci5kaXN0YW5jZVRvU3F1YXJlZCh0KTtyZXR1cm4gdm9pZCAwPT09ZSYmKGNvbnNvbGUud2FybigiVEhSRUUuU3BoZXJlOiAuY2xhbXBQb2ludCgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSxlPW5ldyBxT3QpLGUuY29weSh0KSxuPnRoaXMucmFkaXVzKnRoaXMucmFkaXVzJiYoZS5zdWIodGhpcy5jZW50ZXIpLm5vcm1hbGl6ZSgpLGUubXVsdGlwbHlTY2FsYXIodGhpcy5yYWRpdXMpLmFkZCh0aGlzLmNlbnRlcikpLGV9Z2V0Qm91bmRpbmdCb3godCl7cmV0dXJuIHZvaWQgMD09PXQmJihjb25zb2xlLndhcm4oIlRIUkVFLlNwaGVyZTogLmdldEJvdW5kaW5nQm94KCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLHQ9bmV3ICRPdCksdGhpcy5pc0VtcHR5KCk/KHQubWFrZUVtcHR5KCksdCk6KHQuc2V0KHRoaXMuY2VudGVyLHRoaXMuY2VudGVyKSx0LmV4cGFuZEJ5U2NhbGFyKHRoaXMucmFkaXVzKSx0KX1hcHBseU1hdHJpeDQodCl7cmV0dXJuIHRoaXMuY2VudGVyLmFwcGx5TWF0cml4NCh0KSx0aGlzLnJhZGl1cz10aGlzLnJhZGl1cyp0LmdldE1heFNjYWxlT25BeGlzKCksdGhpc310cmFuc2xhdGUodCl7cmV0dXJuIHRoaXMuY2VudGVyLmFkZCh0KSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5jZW50ZXIuZXF1YWxzKHRoaXMuY2VudGVyKSYmdC5yYWRpdXM9PT10aGlzLnJhZGl1c319Y29uc3QgZFJ0PW5ldyBxT3QscFJ0PW5ldyBxT3QsZlJ0PW5ldyBxT3QsbVJ0PW5ldyBxT3QsZ1J0PW5ldyBxT3QsX1J0PW5ldyBxT3QseVJ0PW5ldyBxT3Q7Y2xhc3MgdlJ0e2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5vcmlnaW49dm9pZCAwIT09dD90Om5ldyBxT3QsdGhpcy5kaXJlY3Rpb249dm9pZCAwIT09ZT9lOm5ldyBxT3QoMCwwLC0xKX1zZXQodCxlKXtyZXR1cm4gdGhpcy5vcmlnaW4uY29weSh0KSx0aGlzLmRpcmVjdGlvbi5jb3B5KGUpLHRoaXN9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9Y29weSh0KXtyZXR1cm4gdGhpcy5vcmlnaW4uY29weSh0Lm9yaWdpbiksdGhpcy5kaXJlY3Rpb24uY29weSh0LmRpcmVjdGlvbiksdGhpc31hdCh0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoY29uc29sZS53YXJuKCJUSFJFRS5SYXk6IC5hdCgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSxlPW5ldyBxT3QpLGUuY29weSh0aGlzLmRpcmVjdGlvbikubXVsdGlwbHlTY2FsYXIodCkuYWRkKHRoaXMub3JpZ2luKX1sb29rQXQodCl7cmV0dXJuIHRoaXMuZGlyZWN0aW9uLmNvcHkodCkuc3ViKHRoaXMub3JpZ2luKS5ub3JtYWxpemUoKSx0aGlzfXJlY2FzdCh0KXtyZXR1cm4gdGhpcy5vcmlnaW4uY29weSh0aGlzLmF0KHQsZFJ0KSksdGhpc31jbG9zZXN0UG9pbnRUb1BvaW50KHQsZSl7dm9pZCAwPT09ZSYmKGNvbnNvbGUud2FybigiVEhSRUUuUmF5OiAuY2xvc2VzdFBvaW50VG9Qb2ludCgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSxlPW5ldyBxT3QpLGUuc3ViVmVjdG9ycyh0LHRoaXMub3JpZ2luKTtjb25zdCBuPWUuZG90KHRoaXMuZGlyZWN0aW9uKTtyZXR1cm4gbjwwP2UuY29weSh0aGlzLm9yaWdpbik6ZS5jb3B5KHRoaXMuZGlyZWN0aW9uKS5tdWx0aXBseVNjYWxhcihuKS5hZGQodGhpcy5vcmlnaW4pfWRpc3RhbmNlVG9Qb2ludCh0KXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdGFuY2VTcVRvUG9pbnQodCkpfWRpc3RhbmNlU3FUb1BvaW50KHQpe2NvbnN0IGU9ZFJ0LnN1YlZlY3RvcnModCx0aGlzLm9yaWdpbikuZG90KHRoaXMuZGlyZWN0aW9uKTtyZXR1cm4gZTwwP3RoaXMub3JpZ2luLmRpc3RhbmNlVG9TcXVhcmVkKHQpOihkUnQuY29weSh0aGlzLmRpcmVjdGlvbikubXVsdGlwbHlTY2FsYXIoZSkuYWRkKHRoaXMub3JpZ2luKSxkUnQuZGlzdGFuY2VUb1NxdWFyZWQodCkpfWRpc3RhbmNlU3FUb1NlZ21lbnQodCxlLG4saSl7cFJ0LmNvcHkodCkuYWRkKGUpLm11bHRpcGx5U2NhbGFyKC41KSxmUnQuY29weShlKS5zdWIodCkubm9ybWFsaXplKCksbVJ0LmNvcHkodGhpcy5vcmlnaW4pLnN1YihwUnQpO2NvbnN0IHI9LjUqdC5kaXN0YW5jZVRvKGUpLG89LXRoaXMuZGlyZWN0aW9uLmRvdChmUnQpLGE9bVJ0LmRvdCh0aGlzLmRpcmVjdGlvbikscz0tbVJ0LmRvdChmUnQpLGw9bVJ0Lmxlbmd0aFNxKCksYz1NYXRoLmFicygxLW8qbyk7bGV0IHUsaCxkLHA7aWYoYz4wKWlmKHU9bypzLWEsaD1vKmEtcyxwPXIqYyx1Pj0wKWlmKGg+PS1wKWlmKGg8PXApe2NvbnN0IHQ9MS9jO3UqPXQsaCo9dCxkPXUqKHUrbypoKzIqYSkraCoobyp1K2grMipzKStsfWVsc2UgaD1yLHU9TWF0aC5tYXgoMCwtKG8qaCthKSksZD0tdSp1K2gqKGgrMipzKStsO2Vsc2UgaD0tcix1PU1hdGgubWF4KDAsLShvKmgrYSkpLGQ9LXUqdStoKihoKzIqcykrbDtlbHNlIGg8PS1wPyh1PU1hdGgubWF4KDAsLSgtbypyK2EpKSxoPXU+MD8tcjpNYXRoLm1pbihNYXRoLm1heCgtciwtcyksciksZD0tdSp1K2gqKGgrMipzKStsKTpoPD1wPyh1PTAsaD1NYXRoLm1pbihNYXRoLm1heCgtciwtcyksciksZD1oKihoKzIqcykrbCk6KHU9TWF0aC5tYXgoMCwtKG8qcithKSksaD11PjA/cjpNYXRoLm1pbihNYXRoLm1heCgtciwtcyksciksZD0tdSp1K2gqKGgrMipzKStsKTtlbHNlIGg9bz4wPy1yOnIsdT1NYXRoLm1heCgwLC0obypoK2EpKSxkPS11KnUraCooaCsyKnMpK2w7cmV0dXJuIG4mJm4uY29weSh0aGlzLmRpcmVjdGlvbikubXVsdGlwbHlTY2FsYXIodSkuYWRkKHRoaXMub3JpZ2luKSxpJiZpLmNvcHkoZlJ0KS5tdWx0aXBseVNjYWxhcihoKS5hZGQocFJ0KSxkfWludGVyc2VjdFNwaGVyZSh0LGUpe2RSdC5zdWJWZWN0b3JzKHQuY2VudGVyLHRoaXMub3JpZ2luKTtjb25zdCBuPWRSdC5kb3QodGhpcy5kaXJlY3Rpb24pLGk9ZFJ0LmRvdChkUnQpLW4qbixyPXQucmFkaXVzKnQucmFkaXVzO2lmKGk+cilyZXR1cm4gbnVsbDtjb25zdCBvPU1hdGguc3FydChyLWkpLGE9bi1vLHM9bitvO3JldHVybiBhPDAmJnM8MD9udWxsOnRoaXMuYXQoYTwwP3M6YSxlKX1pbnRlcnNlY3RzU3BoZXJlKHQpe3JldHVybiB0aGlzLmRpc3RhbmNlU3FUb1BvaW50KHQuY2VudGVyKTw9dC5yYWRpdXMqdC5yYWRpdXN9ZGlzdGFuY2VUb1BsYW5lKHQpe2NvbnN0IGU9dC5ub3JtYWwuZG90KHRoaXMuZGlyZWN0aW9uKTtpZigwPT09ZSlyZXR1cm4gMD09PXQuZGlzdGFuY2VUb1BvaW50KHRoaXMub3JpZ2luKT8wOm51bGw7Y29uc3Qgbj0tKHRoaXMub3JpZ2luLmRvdCh0Lm5vcm1hbCkrdC5jb25zdGFudCkvZTtyZXR1cm4gbj49MD9uOm51bGx9aW50ZXJzZWN0UGxhbmUodCxlKXtjb25zdCBuPXRoaXMuZGlzdGFuY2VUb1BsYW5lKHQpO3JldHVybiBudWxsPT09bj9udWxsOnRoaXMuYXQobixlKX1pbnRlcnNlY3RzUGxhbmUodCl7Y29uc3QgZT10LmRpc3RhbmNlVG9Qb2ludCh0aGlzLm9yaWdpbik7cmV0dXJuIDA9PT1lfHx0Lm5vcm1hbC5kb3QodGhpcy5kaXJlY3Rpb24pKmU8MH1pbnRlcnNlY3RCb3godCxlKXtsZXQgbixpLHIsbyxhLHM7Y29uc3QgbD0xL3RoaXMuZGlyZWN0aW9uLngsYz0xL3RoaXMuZGlyZWN0aW9uLnksdT0xL3RoaXMuZGlyZWN0aW9uLnosaD10aGlzLm9yaWdpbjtyZXR1cm4gbD49MD8obj0odC5taW4ueC1oLngpKmwsaT0odC5tYXgueC1oLngpKmwpOihuPSh0Lm1heC54LWgueCkqbCxpPSh0Lm1pbi54LWgueCkqbCksYz49MD8ocj0odC5taW4ueS1oLnkpKmMsbz0odC5tYXgueS1oLnkpKmMpOihyPSh0Lm1heC55LWgueSkqYyxvPSh0Lm1pbi55LWgueSkqYyksbj5vfHxyPmk/bnVsbDooKHI+bnx8biE9bikmJihuPXIpLChvPGl8fGkhPWkpJiYoaT1vKSx1Pj0wPyhhPSh0Lm1pbi56LWgueikqdSxzPSh0Lm1heC56LWgueikqdSk6KGE9KHQubWF4LnotaC56KSp1LHM9KHQubWluLnotaC56KSp1KSxuPnN8fGE+aT9udWxsOigoYT5ufHxuIT1uKSYmKG49YSksKHM8aXx8aSE9aSkmJihpPXMpLGk8MD9udWxsOnRoaXMuYXQobj49MD9uOmksZSkpKX1pbnRlcnNlY3RzQm94KHQpe3JldHVybiBudWxsIT09dGhpcy5pbnRlcnNlY3RCb3godCxkUnQpfWludGVyc2VjdFRyaWFuZ2xlKHQsZSxuLGkscil7Z1J0LnN1YlZlY3RvcnMoZSx0KSxfUnQuc3ViVmVjdG9ycyhuLHQpLHlSdC5jcm9zc1ZlY3RvcnMoZ1J0LF9SdCk7bGV0IG8sYT10aGlzLmRpcmVjdGlvbi5kb3QoeVJ0KTtpZihhPjApe2lmKGkpcmV0dXJuIG51bGw7bz0xfWVsc2V7aWYoIShhPDApKXJldHVybiBudWxsO289LTEsYT0tYX1tUnQuc3ViVmVjdG9ycyh0aGlzLm9yaWdpbix0KTtjb25zdCBzPW8qdGhpcy5kaXJlY3Rpb24uZG90KF9SdC5jcm9zc1ZlY3RvcnMobVJ0LF9SdCkpO2lmKHM8MClyZXR1cm4gbnVsbDtjb25zdCBsPW8qdGhpcy5kaXJlY3Rpb24uZG90KGdSdC5jcm9zcyhtUnQpKTtpZihsPDApcmV0dXJuIG51bGw7aWYocytsPmEpcmV0dXJuIG51bGw7Y29uc3QgYz0tbyptUnQuZG90KHlSdCk7cmV0dXJuIGM8MD9udWxsOnRoaXMuYXQoYy9hLHIpfWFwcGx5TWF0cml4NCh0KXtyZXR1cm4gdGhpcy5vcmlnaW4uYXBwbHlNYXRyaXg0KHQpLHRoaXMuZGlyZWN0aW9uLnRyYW5zZm9ybURpcmVjdGlvbih0KSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5vcmlnaW4uZXF1YWxzKHRoaXMub3JpZ2luKSYmdC5kaXJlY3Rpb24uZXF1YWxzKHRoaXMuZGlyZWN0aW9uKX19Y2xhc3MgYlJ0e2NvbnN0cnVjdG9yKCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlzTWF0cml4NCIse3ZhbHVlOiEwfSksdGhpcy5lbGVtZW50cz1bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV0sYXJndW1lbnRzLmxlbmd0aD4wJiZjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiB0aGUgY29uc3RydWN0b3Igbm8gbG9uZ2VyIHJlYWRzIGFyZ3VtZW50cy4gdXNlIC5zZXQoKSBpbnN0ZWFkLiIpfXNldCh0LGUsbixpLHIsbyxhLHMsbCxjLHUsaCxkLHAsZixtKXtjb25zdCBnPXRoaXMuZWxlbWVudHM7cmV0dXJuIGdbMF09dCxnWzRdPWUsZ1s4XT1uLGdbMTJdPWksZ1sxXT1yLGdbNV09byxnWzldPWEsZ1sxM109cyxnWzJdPWwsZ1s2XT1jLGdbMTBdPXUsZ1sxNF09aCxnWzNdPWQsZ1s3XT1wLGdbMTFdPWYsZ1sxNV09bSx0aGlzfWlkZW50aXR5KCl7cmV0dXJuIHRoaXMuc2V0KDEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDEpLHRoaXN9Y2xvbmUoKXtyZXR1cm4obmV3IGJSdCkuZnJvbUFycmF5KHRoaXMuZWxlbWVudHMpfWNvcHkodCl7Y29uc3QgZT10aGlzLmVsZW1lbnRzLG49dC5lbGVtZW50cztyZXR1cm4gZVswXT1uWzBdLGVbMV09blsxXSxlWzJdPW5bMl0sZVszXT1uWzNdLGVbNF09bls0XSxlWzVdPW5bNV0sZVs2XT1uWzZdLGVbN109bls3XSxlWzhdPW5bOF0sZVs5XT1uWzldLGVbMTBdPW5bMTBdLGVbMTFdPW5bMTFdLGVbMTJdPW5bMTJdLGVbMTNdPW5bMTNdLGVbMTRdPW5bMTRdLGVbMTVdPW5bMTVdLHRoaXN9Y29weVBvc2l0aW9uKHQpe2NvbnN0IGU9dGhpcy5lbGVtZW50cyxuPXQuZWxlbWVudHM7cmV0dXJuIGVbMTJdPW5bMTJdLGVbMTNdPW5bMTNdLGVbMTRdPW5bMTRdLHRoaXN9c2V0RnJvbU1hdHJpeDModCl7Y29uc3QgZT10LmVsZW1lbnRzO3JldHVybiB0aGlzLnNldChlWzBdLGVbM10sZVs2XSwwLGVbMV0sZVs0XSxlWzddLDAsZVsyXSxlWzVdLGVbOF0sMCwwLDAsMCwxKSx0aGlzfWV4dHJhY3RCYXNpcyh0LGUsbil7cmV0dXJuIHQuc2V0RnJvbU1hdHJpeENvbHVtbih0aGlzLDApLGUuc2V0RnJvbU1hdHJpeENvbHVtbih0aGlzLDEpLG4uc2V0RnJvbU1hdHJpeENvbHVtbih0aGlzLDIpLHRoaXN9bWFrZUJhc2lzKHQsZSxuKXtyZXR1cm4gdGhpcy5zZXQodC54LGUueCxuLngsMCx0LnksZS55LG4ueSwwLHQueixlLnosbi56LDAsMCwwLDAsMSksdGhpc31leHRyYWN0Um90YXRpb24odCl7Y29uc3QgZT10aGlzLmVsZW1lbnRzLG49dC5lbGVtZW50cyxpPTEveFJ0LnNldEZyb21NYXRyaXhDb2x1bW4odCwwKS5sZW5ndGgoKSxyPTEveFJ0LnNldEZyb21NYXRyaXhDb2x1bW4odCwxKS5sZW5ndGgoKSxvPTEveFJ0LnNldEZyb21NYXRyaXhDb2x1bW4odCwyKS5sZW5ndGgoKTtyZXR1cm4gZVswXT1uWzBdKmksZVsxXT1uWzFdKmksZVsyXT1uWzJdKmksZVszXT0wLGVbNF09bls0XSpyLGVbNV09bls1XSpyLGVbNl09bls2XSpyLGVbN109MCxlWzhdPW5bOF0qbyxlWzldPW5bOV0qbyxlWzEwXT1uWzEwXSpvLGVbMTFdPTAsZVsxMl09MCxlWzEzXT0wLGVbMTRdPTAsZVsxNV09MSx0aGlzfW1ha2VSb3RhdGlvbkZyb21FdWxlcih0KXt0JiZ0LmlzRXVsZXJ8fGNvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5tYWtlUm90YXRpb25Gcm9tRXVsZXIoKSBub3cgZXhwZWN0cyBhIEV1bGVyIHJvdGF0aW9uIHJhdGhlciB0aGFuIGEgVmVjdG9yMyBhbmQgb3JkZXIuIik7Y29uc3QgZT10aGlzLmVsZW1lbnRzLG49dC54LGk9dC55LHI9dC56LG89TWF0aC5jb3MobiksYT1NYXRoLnNpbihuKSxzPU1hdGguY29zKGkpLGw9TWF0aC5zaW4oaSksYz1NYXRoLmNvcyhyKSx1PU1hdGguc2luKHIpO2lmKCJYWVoiPT09dC5vcmRlcil7Y29uc3QgdD1vKmMsbj1vKnUsaT1hKmMscj1hKnU7ZVswXT1zKmMsZVs0XT0tcyp1LGVbOF09bCxlWzFdPW4raSpsLGVbNV09dC1yKmwsZVs5XT0tYSpzLGVbMl09ci10KmwsZVs2XT1pK24qbCxlWzEwXT1vKnN9ZWxzZSBpZigiWVhaIj09PXQub3JkZXIpe2NvbnN0IHQ9cypjLG49cyp1LGk9bCpjLHI9bCp1O2VbMF09dCtyKmEsZVs0XT1pKmEtbixlWzhdPW8qbCxlWzFdPW8qdSxlWzVdPW8qYyxlWzldPS1hLGVbMl09biphLWksZVs2XT1yK3QqYSxlWzEwXT1vKnN9ZWxzZSBpZigiWlhZIj09PXQub3JkZXIpe2NvbnN0IHQ9cypjLG49cyp1LGk9bCpjLHI9bCp1O2VbMF09dC1yKmEsZVs0XT0tbyp1LGVbOF09aStuKmEsZVsxXT1uK2kqYSxlWzVdPW8qYyxlWzldPXItdCphLGVbMl09LW8qbCxlWzZdPWEsZVsxMF09bypzfWVsc2UgaWYoIlpZWCI9PT10Lm9yZGVyKXtjb25zdCB0PW8qYyxuPW8qdSxpPWEqYyxyPWEqdTtlWzBdPXMqYyxlWzRdPWkqbC1uLGVbOF09dCpsK3IsZVsxXT1zKnUsZVs1XT1yKmwrdCxlWzldPW4qbC1pLGVbMl09LWwsZVs2XT1hKnMsZVsxMF09bypzfWVsc2UgaWYoIllaWCI9PT10Lm9yZGVyKXtjb25zdCB0PW8qcyxuPW8qbCxpPWEqcyxyPWEqbDtlWzBdPXMqYyxlWzRdPXItdCp1LGVbOF09aSp1K24sZVsxXT11LGVbNV09bypjLGVbOV09LWEqYyxlWzJdPS1sKmMsZVs2XT1uKnUraSxlWzEwXT10LXIqdX1lbHNlIGlmKCJYWlkiPT09dC5vcmRlcil7Y29uc3QgdD1vKnMsbj1vKmwsaT1hKnMscj1hKmw7ZVswXT1zKmMsZVs0XT0tdSxlWzhdPWwqYyxlWzFdPXQqdStyLGVbNV09bypjLGVbOV09bip1LWksZVsyXT1pKnUtbixlWzZdPWEqYyxlWzEwXT1yKnUrdH1yZXR1cm4gZVszXT0wLGVbN109MCxlWzExXT0wLGVbMTJdPTAsZVsxM109MCxlWzE0XT0wLGVbMTVdPTEsdGhpc31tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbih0KXtyZXR1cm4gdGhpcy5jb21wb3NlKFNSdCx0LE1SdCl9bG9va0F0KHQsZSxuKXtjb25zdCBpPXRoaXMuZWxlbWVudHM7cmV0dXJuIENSdC5zdWJWZWN0b3JzKHQsZSksMD09PUNSdC5sZW5ndGhTcSgpJiYoQ1J0Lno9MSksQ1J0Lm5vcm1hbGl6ZSgpLEVSdC5jcm9zc1ZlY3RvcnMobixDUnQpLDA9PT1FUnQubGVuZ3RoU3EoKSYmKDE9PT1NYXRoLmFicyhuLnopP0NSdC54Kz0xZS00OkNSdC56Kz0xZS00LENSdC5ub3JtYWxpemUoKSxFUnQuY3Jvc3NWZWN0b3JzKG4sQ1J0KSksRVJ0Lm5vcm1hbGl6ZSgpLFRSdC5jcm9zc1ZlY3RvcnMoQ1J0LEVSdCksaVswXT1FUnQueCxpWzRdPVRSdC54LGlbOF09Q1J0LngsaVsxXT1FUnQueSxpWzVdPVRSdC55LGlbOV09Q1J0LnksaVsyXT1FUnQueixpWzZdPVRSdC56LGlbMTBdPUNSdC56LHRoaXN9bXVsdGlwbHkodCxlKXtyZXR1cm4gdm9pZCAwIT09ZT8oY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHkoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5tdWx0aXBseU1hdHJpY2VzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLm11bHRpcGx5TWF0cmljZXModCxlKSk6dGhpcy5tdWx0aXBseU1hdHJpY2VzKHRoaXMsdCl9cHJlbXVsdGlwbHkodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlNYXRyaWNlcyh0LHRoaXMpfW11bHRpcGx5TWF0cmljZXModCxlKXtjb25zdCBuPXQuZWxlbWVudHMsaT1lLmVsZW1lbnRzLHI9dGhpcy5lbGVtZW50cyxvPW5bMF0sYT1uWzRdLHM9bls4XSxsPW5bMTJdLGM9blsxXSx1PW5bNV0saD1uWzldLGQ9blsxM10scD1uWzJdLGY9bls2XSxtPW5bMTBdLGc9blsxNF0sXz1uWzNdLHk9bls3XSx2PW5bMTFdLGI9blsxNV0seD1pWzBdLHc9aVs0XSxTPWlbOF0sTT1pWzEyXSxFPWlbMV0sVD1pWzVdLEM9aVs5XSxBPWlbMTNdLGs9aVsyXSxMPWlbNl0sUD1pWzEwXSxOPWlbMTRdLEk9aVszXSxPPWlbN10sUj1pWzExXSx6PWlbMTVdO3JldHVybiByWzBdPW8qeCthKkUrcyprK2wqSSxyWzRdPW8qdythKlQrcypMK2wqTyxyWzhdPW8qUythKkMrcypQK2wqUixyWzEyXT1vKk0rYSpBK3MqTitsKnosclsxXT1jKngrdSpFK2gqaytkKkkscls1XT1jKncrdSpUK2gqTCtkKk8scls5XT1jKlMrdSpDK2gqUCtkKlIsclsxM109YypNK3UqQStoKk4rZCp6LHJbMl09cCp4K2YqRSttKmsrZypJLHJbNl09cCp3K2YqVCttKkwrZypPLHJbMTBdPXAqUytmKkMrbSpQK2cqUixyWzE0XT1wKk0rZipBK20qTitnKnosclszXT1fKngreSpFK3YqaytiKkkscls3XT1fKncreSpUK3YqTCtiKk8sclsxMV09XypTK3kqQyt2KlArYipSLHJbMTVdPV8qTSt5KkErdipOK2Iqeix0aGlzfW11bHRpcGx5U2NhbGFyKHQpe2NvbnN0IGU9dGhpcy5lbGVtZW50cztyZXR1cm4gZVswXSo9dCxlWzRdKj10LGVbOF0qPXQsZVsxMl0qPXQsZVsxXSo9dCxlWzVdKj10LGVbOV0qPXQsZVsxM10qPXQsZVsyXSo9dCxlWzZdKj10LGVbMTBdKj10LGVbMTRdKj10LGVbM10qPXQsZVs3XSo9dCxlWzExXSo9dCxlWzE1XSo9dCx0aGlzfWRldGVybWluYW50KCl7Y29uc3QgdD10aGlzLmVsZW1lbnRzLGU9dFswXSxuPXRbNF0saT10WzhdLHI9dFsxMl0sbz10WzFdLGE9dFs1XSxzPXRbOV0sbD10WzEzXSxjPXRbMl0sdT10WzZdLGg9dFsxMF0sZD10WzE0XTtyZXR1cm4gdFszXSooK3Iqcyp1LWkqbCp1LXIqYSpoK24qbCpoK2kqYSpkLW4qcypkKSt0WzddKigrZSpzKmQtZSpsKmgrcipvKmgtaSpvKmQraSpsKmMtcipzKmMpK3RbMTFdKigrZSpsKnUtZSphKmQtcipvKnUrbipvKmQrciphKmMtbipsKmMpK3RbMTVdKigtaSphKmMtZSpzKnUrZSphKmgraSpvKnUtbipvKmgrbipzKmMpfXRyYW5zcG9zZSgpe2NvbnN0IHQ9dGhpcy5lbGVtZW50cztsZXQgZTtyZXR1cm4gZT10WzFdLHRbMV09dFs0XSx0WzRdPWUsZT10WzJdLHRbMl09dFs4XSx0WzhdPWUsZT10WzZdLHRbNl09dFs5XSx0WzldPWUsZT10WzNdLHRbM109dFsxMl0sdFsxMl09ZSxlPXRbN10sdFs3XT10WzEzXSx0WzEzXT1lLGU9dFsxMV0sdFsxMV09dFsxNF0sdFsxNF09ZSx0aGlzfXNldFBvc2l0aW9uKHQsZSxuKXtjb25zdCBpPXRoaXMuZWxlbWVudHM7cmV0dXJuIHQuaXNWZWN0b3IzPyhpWzEyXT10LngsaVsxM109dC55LGlbMTRdPXQueik6KGlbMTJdPXQsaVsxM109ZSxpWzE0XT1uKSx0aGlzfWludmVydCgpe2NvbnN0IHQ9dGhpcy5lbGVtZW50cyxlPXRbMF0sbj10WzFdLGk9dFsyXSxyPXRbM10sbz10WzRdLGE9dFs1XSxzPXRbNl0sbD10WzddLGM9dFs4XSx1PXRbOV0saD10WzEwXSxkPXRbMTFdLHA9dFsxMl0sZj10WzEzXSxtPXRbMTRdLGc9dFsxNV0sXz11Km0qbC1mKmgqbCtmKnMqZC1hKm0qZC11KnMqZythKmgqZyx5PXAqaCpsLWMqbSpsLXAqcypkK28qbSpkK2MqcypnLW8qaCpnLHY9YypmKmwtcCp1KmwrcCphKmQtbypmKmQtYyphKmcrbyp1KmcsYj1wKnUqcy1jKmYqcy1wKmEqaCtvKmYqaCtjKmEqbS1vKnUqbSx4PWUqXytuKnkraSp2K3IqYjtpZigwPT09eClyZXR1cm4gdGhpcy5zZXQoMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCk7Y29uc3Qgdz0xL3g7cmV0dXJuIHRbMF09Xyp3LHRbMV09KGYqaCpyLXUqbSpyLWYqaSpkK24qbSpkK3UqaSpnLW4qaCpnKSp3LHRbMl09KGEqbSpyLWYqcypyK2YqaSpsLW4qbSpsLWEqaSpnK24qcypnKSp3LHRbM109KHUqcypyLWEqaCpyLXUqaSpsK24qaCpsK2EqaSpkLW4qcypkKSp3LHRbNF09eSp3LHRbNV09KGMqbSpyLXAqaCpyK3AqaSpkLWUqbSpkLWMqaSpnK2UqaCpnKSp3LHRbNl09KHAqcypyLW8qbSpyLXAqaSpsK2UqbSpsK28qaSpnLWUqcypnKSp3LHRbN109KG8qaCpyLWMqcypyK2MqaSpsLWUqaCpsLW8qaSpkK2UqcypkKSp3LHRbOF09dip3LHRbOV09KHAqdSpyLWMqZipyLXAqbipkK2UqZipkK2MqbipnLWUqdSpnKSp3LHRbMTBdPShvKmYqci1wKmEqcitwKm4qbC1lKmYqbC1vKm4qZytlKmEqZykqdyx0WzExXT0oYyphKnItbyp1KnItYypuKmwrZSp1KmwrbypuKmQtZSphKmQpKncsdFsxMl09Yip3LHRbMTNdPShjKmYqaS1wKnUqaStwKm4qaC1lKmYqaC1jKm4qbStlKnUqbSkqdyx0WzE0XT0ocCphKmktbypmKmktcCpuKnMrZSpmKnMrbypuKm0tZSphKm0pKncsdFsxNV09KG8qdSppLWMqYSppK2MqbipzLWUqdSpzLW8qbipoK2UqYSpoKSp3LHRoaXN9c2NhbGUodCl7Y29uc3QgZT10aGlzLmVsZW1lbnRzLG49dC54LGk9dC55LHI9dC56O3JldHVybiBlWzBdKj1uLGVbNF0qPWksZVs4XSo9cixlWzFdKj1uLGVbNV0qPWksZVs5XSo9cixlWzJdKj1uLGVbNl0qPWksZVsxMF0qPXIsZVszXSo9bixlWzddKj1pLGVbMTFdKj1yLHRoaXN9Z2V0TWF4U2NhbGVPbkF4aXMoKXtjb25zdCB0PXRoaXMuZWxlbWVudHM7cmV0dXJuIE1hdGguc3FydChNYXRoLm1heCh0WzBdKnRbMF0rdFsxXSp0WzFdK3RbMl0qdFsyXSx0WzRdKnRbNF0rdFs1XSp0WzVdK3RbNl0qdFs2XSx0WzhdKnRbOF0rdFs5XSp0WzldK3RbMTBdKnRbMTBdKSl9bWFrZVRyYW5zbGF0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5zZXQoMSwwLDAsdCwwLDEsMCxlLDAsMCwxLG4sMCwwLDAsMSksdGhpc31tYWtlUm90YXRpb25YKHQpe2NvbnN0IGU9TWF0aC5jb3ModCksbj1NYXRoLnNpbih0KTtyZXR1cm4gdGhpcy5zZXQoMSwwLDAsMCwwLGUsLW4sMCwwLG4sZSwwLDAsMCwwLDEpLHRoaXN9bWFrZVJvdGF0aW9uWSh0KXtjb25zdCBlPU1hdGguY29zKHQpLG49TWF0aC5zaW4odCk7cmV0dXJuIHRoaXMuc2V0KGUsMCxuLDAsMCwxLDAsMCwtbiwwLGUsMCwwLDAsMCwxKSx0aGlzfW1ha2VSb3RhdGlvbloodCl7Y29uc3QgZT1NYXRoLmNvcyh0KSxuPU1hdGguc2luKHQpO3JldHVybiB0aGlzLnNldChlLC1uLDAsMCxuLGUsMCwwLDAsMCwxLDAsMCwwLDAsMSksdGhpc31tYWtlUm90YXRpb25BeGlzKHQsZSl7Y29uc3Qgbj1NYXRoLmNvcyhlKSxpPU1hdGguc2luKGUpLHI9MS1uLG89dC54LGE9dC55LHM9dC56LGw9cipvLGM9ciphO3JldHVybiB0aGlzLnNldChsKm8rbixsKmEtaSpzLGwqcytpKmEsMCxsKmEraSpzLGMqYStuLGMqcy1pKm8sMCxsKnMtaSphLGMqcytpKm8scipzKnMrbiwwLDAsMCwwLDEpLHRoaXN9bWFrZVNjYWxlKHQsZSxuKXtyZXR1cm4gdGhpcy5zZXQodCwwLDAsMCwwLGUsMCwwLDAsMCxuLDAsMCwwLDAsMSksdGhpc31tYWtlU2hlYXIodCxlLG4pe3JldHVybiB0aGlzLnNldCgxLGUsbiwwLHQsMSxuLDAsdCxlLDEsMCwwLDAsMCwxKSx0aGlzfWNvbXBvc2UodCxlLG4pe2NvbnN0IGk9dGhpcy5lbGVtZW50cyxyPWUuX3gsbz1lLl95LGE9ZS5feixzPWUuX3csbD1yK3IsYz1vK28sdT1hK2EsaD1yKmwsZD1yKmMscD1yKnUsZj1vKmMsbT1vKnUsZz1hKnUsXz1zKmwseT1zKmMsdj1zKnUsYj1uLngseD1uLnksdz1uLno7cmV0dXJuIGlbMF09KDEtKGYrZykpKmIsaVsxXT0oZCt2KSpiLGlbMl09KHAteSkqYixpWzNdPTAsaVs0XT0oZC12KSp4LGlbNV09KDEtKGgrZykpKngsaVs2XT0obStfKSp4LGlbN109MCxpWzhdPShwK3kpKncsaVs5XT0obS1fKSp3LGlbMTBdPSgxLShoK2YpKSp3LGlbMTFdPTAsaVsxMl09dC54LGlbMTNdPXQueSxpWzE0XT10LnosaVsxNV09MSx0aGlzfWRlY29tcG9zZSh0LGUsbil7Y29uc3QgaT10aGlzLmVsZW1lbnRzO2xldCByPXhSdC5zZXQoaVswXSxpWzFdLGlbMl0pLmxlbmd0aCgpO2NvbnN0IG89eFJ0LnNldChpWzRdLGlbNV0saVs2XSkubGVuZ3RoKCksYT14UnQuc2V0KGlbOF0saVs5XSxpWzEwXSkubGVuZ3RoKCk7dGhpcy5kZXRlcm1pbmFudCgpPDAmJihyPS1yKSx0Lng9aVsxMl0sdC55PWlbMTNdLHQuej1pWzE0XSx3UnQuY29weSh0aGlzKTtjb25zdCBzPTEvcixsPTEvbyxjPTEvYTtyZXR1cm4gd1J0LmVsZW1lbnRzWzBdKj1zLHdSdC5lbGVtZW50c1sxXSo9cyx3UnQuZWxlbWVudHNbMl0qPXMsd1J0LmVsZW1lbnRzWzRdKj1sLHdSdC5lbGVtZW50c1s1XSo9bCx3UnQuZWxlbWVudHNbNl0qPWwsd1J0LmVsZW1lbnRzWzhdKj1jLHdSdC5lbGVtZW50c1s5XSo9Yyx3UnQuZWxlbWVudHNbMTBdKj1jLGUuc2V0RnJvbVJvdGF0aW9uTWF0cml4KHdSdCksbi54PXIsbi55PW8sbi56PWEsdGhpc31tYWtlUGVyc3BlY3RpdmUodCxlLG4saSxyLG8pe3ZvaWQgMD09PW8mJmNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm1ha2VQZXJzcGVjdGl2ZSgpIGhhcyBiZWVuIHJlZGVmaW5lZCBhbmQgaGFzIGEgbmV3IHNpZ25hdHVyZS4gUGxlYXNlIGNoZWNrIHRoZSBkb2NzLiIpO2NvbnN0IGE9dGhpcy5lbGVtZW50cyxzPTIqci8obi1pKSxsPShlK3QpLyhlLXQpLGM9KG4raSkvKG4taSksdT0tKG8rcikvKG8tciksaD0tMipvKnIvKG8tcik7cmV0dXJuIGFbMF09MipyLyhlLXQpLGFbNF09MCxhWzhdPWwsYVsxMl09MCxhWzFdPTAsYVs1XT1zLGFbOV09YyxhWzEzXT0wLGFbMl09MCxhWzZdPTAsYVsxMF09dSxhWzE0XT1oLGFbM109MCxhWzddPTAsYVsxMV09LTEsYVsxNV09MCx0aGlzfW1ha2VPcnRob2dyYXBoaWModCxlLG4saSxyLG8pe2NvbnN0IGE9dGhpcy5lbGVtZW50cyxzPTEvKGUtdCksbD0xLyhuLWkpLGM9MS8oby1yKSx1PShlK3QpKnMsaD0obitpKSpsLGQ9KG8rcikqYztyZXR1cm4gYVswXT0yKnMsYVs0XT0wLGFbOF09MCxhWzEyXT0tdSxhWzFdPTAsYVs1XT0yKmwsYVs5XT0wLGFbMTNdPS1oLGFbMl09MCxhWzZdPTAsYVsxMF09LTIqYyxhWzE0XT0tZCxhWzNdPTAsYVs3XT0wLGFbMTFdPTAsYVsxNV09MSx0aGlzfWVxdWFscyh0KXtjb25zdCBlPXRoaXMuZWxlbWVudHMsbj10LmVsZW1lbnRzO2ZvcihsZXQgdD0wO3Q8MTY7dCsrKWlmKGVbdF0hPT1uW3RdKXJldHVybiExO3JldHVybiEwfWZyb21BcnJheSh0LGU9MCl7Zm9yKGxldCBuPTA7bjwxNjtuKyspdGhpcy5lbGVtZW50c1tuXT10W24rZV07cmV0dXJuIHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7Y29uc3Qgbj10aGlzLmVsZW1lbnRzO3JldHVybiB0W2VdPW5bMF0sdFtlKzFdPW5bMV0sdFtlKzJdPW5bMl0sdFtlKzNdPW5bM10sdFtlKzRdPW5bNF0sdFtlKzVdPW5bNV0sdFtlKzZdPW5bNl0sdFtlKzddPW5bN10sdFtlKzhdPW5bOF0sdFtlKzldPW5bOV0sdFtlKzEwXT1uWzEwXSx0W2UrMTFdPW5bMTFdLHRbZSsxMl09blsxMl0sdFtlKzEzXT1uWzEzXSx0W2UrMTRdPW5bMTRdLHRbZSsxNV09blsxNV0sdH19Y29uc3QgeFJ0PW5ldyBxT3Qsd1J0PW5ldyBiUnQsU1J0PW5ldyBxT3QoMCwwLDApLE1SdD1uZXcgcU90KDEsMSwxKSxFUnQ9bmV3IHFPdCxUUnQ9bmV3IHFPdCxDUnQ9bmV3IHFPdDtjbGFzcyBBUnR7Y29uc3RydWN0b3IodD0wLGU9MCxuPTAsaT1BUnQuRGVmYXVsdE9yZGVyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaXNFdWxlciIse3ZhbHVlOiEwfSksdGhpcy5feD10LHRoaXMuX3k9ZSx0aGlzLl96PW4sdGhpcy5fb3JkZXI9aX1nZXQgeCgpe3JldHVybiB0aGlzLl94fXNldCB4KHQpe3RoaXMuX3g9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IHkoKXtyZXR1cm4gdGhpcy5feX1zZXQgeSh0KXt0aGlzLl95PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCB6KCl7cmV0dXJuIHRoaXMuX3p9c2V0IHoodCl7dGhpcy5fej10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgb3JkZXIoKXtyZXR1cm4gdGhpcy5fb3JkZXJ9c2V0IG9yZGVyKHQpe3RoaXMuX29yZGVyPXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfXNldCh0LGUsbixpKXtyZXR1cm4gdGhpcy5feD10LHRoaXMuX3k9ZSx0aGlzLl96PW4sdGhpcy5fb3JkZXI9aXx8dGhpcy5fb3JkZXIsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5feCx0aGlzLl95LHRoaXMuX3osdGhpcy5fb3JkZXIpfWNvcHkodCl7cmV0dXJuIHRoaXMuX3g9dC5feCx0aGlzLl95PXQuX3ksdGhpcy5fej10Ll96LHRoaXMuX29yZGVyPXQuX29yZGVyLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21Sb3RhdGlvbk1hdHJpeCh0LGUsbil7Y29uc3QgaT1ST3QuY2xhbXAscj10LmVsZW1lbnRzLG89clswXSxhPXJbNF0scz1yWzhdLGw9clsxXSxjPXJbNV0sdT1yWzldLGg9clsyXSxkPXJbNl0scD1yWzEwXTtzd2l0Y2goZT1lfHx0aGlzLl9vcmRlcil7Y2FzZSJYWVoiOnRoaXMuX3k9TWF0aC5hc2luKGkocywtMSwxKSksTWF0aC5hYnMocyk8Ljk5OTk5OTk/KHRoaXMuX3g9TWF0aC5hdGFuMigtdSxwKSx0aGlzLl96PU1hdGguYXRhbjIoLWEsbykpOih0aGlzLl94PU1hdGguYXRhbjIoZCxjKSx0aGlzLl96PTApO2JyZWFrO2Nhc2UiWVhaIjp0aGlzLl94PU1hdGguYXNpbigtaSh1LC0xLDEpKSxNYXRoLmFicyh1KTwuOTk5OTk5OT8odGhpcy5feT1NYXRoLmF0YW4yKHMscCksdGhpcy5fej1NYXRoLmF0YW4yKGwsYykpOih0aGlzLl95PU1hdGguYXRhbjIoLWgsbyksdGhpcy5fej0wKTticmVhaztjYXNlIlpYWSI6dGhpcy5feD1NYXRoLmFzaW4oaShkLC0xLDEpKSxNYXRoLmFicyhkKTwuOTk5OTk5OT8odGhpcy5feT1NYXRoLmF0YW4yKC1oLHApLHRoaXMuX3o9TWF0aC5hdGFuMigtYSxjKSk6KHRoaXMuX3k9MCx0aGlzLl96PU1hdGguYXRhbjIobCxvKSk7YnJlYWs7Y2FzZSJaWVgiOnRoaXMuX3k9TWF0aC5hc2luKC1pKGgsLTEsMSkpLE1hdGguYWJzKGgpPC45OTk5OTk5Pyh0aGlzLl94PU1hdGguYXRhbjIoZCxwKSx0aGlzLl96PU1hdGguYXRhbjIobCxvKSk6KHRoaXMuX3g9MCx0aGlzLl96PU1hdGguYXRhbjIoLWEsYykpO2JyZWFrO2Nhc2UiWVpYIjp0aGlzLl96PU1hdGguYXNpbihpKGwsLTEsMSkpLE1hdGguYWJzKGwpPC45OTk5OTk5Pyh0aGlzLl94PU1hdGguYXRhbjIoLXUsYyksdGhpcy5feT1NYXRoLmF0YW4yKC1oLG8pKToodGhpcy5feD0wLHRoaXMuX3k9TWF0aC5hdGFuMihzLHApKTticmVhaztjYXNlIlhaWSI6dGhpcy5fej1NYXRoLmFzaW4oLWkoYSwtMSwxKSksTWF0aC5hYnMoYSk8Ljk5OTk5OTk/KHRoaXMuX3g9TWF0aC5hdGFuMihkLGMpLHRoaXMuX3k9TWF0aC5hdGFuMihzLG8pKToodGhpcy5feD1NYXRoLmF0YW4yKC11LHApLHRoaXMuX3k9MCk7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLndhcm4oIlRIUkVFLkV1bGVyOiAuc2V0RnJvbVJvdGF0aW9uTWF0cml4KCkgZW5jb3VudGVyZWQgYW4gdW5rbm93biBvcmRlcjogIitlKX1yZXR1cm4gdGhpcy5fb3JkZXI9ZSwhMSE9PW4mJnRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21RdWF0ZXJuaW9uKHQsZSxuKXtyZXR1cm4ga1J0Lm1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKHQpLHRoaXMuc2V0RnJvbVJvdGF0aW9uTWF0cml4KGtSdCxlLG4pfXNldEZyb21WZWN0b3IzKHQsZSl7cmV0dXJuIHRoaXMuc2V0KHQueCx0LnksdC56LGV8fHRoaXMuX29yZGVyKX1yZW9yZGVyKHQpe3JldHVybiBMUnQuc2V0RnJvbUV1bGVyKHRoaXMpLHRoaXMuc2V0RnJvbVF1YXRlcm5pb24oTFJ0LHQpfWVxdWFscyh0KXtyZXR1cm4gdC5feD09PXRoaXMuX3gmJnQuX3k9PT10aGlzLl95JiZ0Ll96PT09dGhpcy5feiYmdC5fb3JkZXI9PT10aGlzLl9vcmRlcn1mcm9tQXJyYXkodCl7cmV0dXJuIHRoaXMuX3g9dFswXSx0aGlzLl95PXRbMV0sdGhpcy5fej10WzJdLHZvaWQgMCE9PXRbM10mJih0aGlzLl9vcmRlcj10WzNdKSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc310b0FycmF5KHQ9W10sZT0wKXtyZXR1cm4gdFtlXT10aGlzLl94LHRbZSsxXT10aGlzLl95LHRbZSsyXT10aGlzLl96LHRbZSszXT10aGlzLl9vcmRlcix0fXRvVmVjdG9yMyh0KXtyZXR1cm4gdD90LnNldCh0aGlzLl94LHRoaXMuX3ksdGhpcy5feik6bmV3IHFPdCh0aGlzLl94LHRoaXMuX3ksdGhpcy5feil9X29uQ2hhbmdlKHQpe3JldHVybiB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrPXQsdGhpc31fb25DaGFuZ2VDYWxsYmFjaygpe319QVJ0LkRlZmF1bHRPcmRlcj0iWFlaIixBUnQuUm90YXRpb25PcmRlcnM9WyJYWVoiLCJZWlgiLCJaWFkiLCJYWlkiLCJZWFoiLCJaWVgiXTtjb25zdCBrUnQ9bmV3IGJSdCxMUnQ9bmV3IFdPdDtjbGFzcyBQUnR7Y29uc3RydWN0b3IoKXt0aGlzLm1hc2s9MX1zZXQodCl7dGhpcy5tYXNrPTE8PHR8MH1lbmFibGUodCl7dGhpcy5tYXNrfD0xPDx0fDB9ZW5hYmxlQWxsKCl7dGhpcy5tYXNrPS0xfXRvZ2dsZSh0KXt0aGlzLm1hc2tePTE8PHR8MH1kaXNhYmxlKHQpe3RoaXMubWFzayY9figxPDx0fDApfWRpc2FibGVBbGwoKXt0aGlzLm1hc2s9MH10ZXN0KHQpe3JldHVybiAwIT0odGhpcy5tYXNrJnQubWFzayl9fWxldCBOUnQ9MDtjb25zdCBJUnQ9bmV3IHFPdCxPUnQ9bmV3IFdPdCxSUnQ9bmV3IGJSdCx6UnQ9bmV3IHFPdCxEUnQ9bmV3IHFPdCxCUnQ9bmV3IHFPdCxIUnQ9bmV3IFdPdCxGUnQ9bmV3IHFPdCgxLDAsMCksVlJ0PW5ldyBxT3QoMCwxLDApLFVSdD1uZXcgcU90KDAsMCwxKSxqUnQ9e3R5cGU6ImFkZGVkIn0sR1J0PXt0eXBlOiJyZW1vdmVkIn07ZnVuY3Rpb24gV1J0KCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlkIix7dmFsdWU6TlJ0Kyt9KSx0aGlzLnV1aWQ9Uk90LmdlbmVyYXRlVVVJRCgpLHRoaXMubmFtZT0iIix0aGlzLnR5cGU9Ik9iamVjdDNEIix0aGlzLnBhcmVudD1udWxsLHRoaXMuY2hpbGRyZW49W10sdGhpcy51cD1XUnQuRGVmYXVsdFVwLmNsb25lKCk7Y29uc3QgdD1uZXcgcU90LGU9bmV3IEFSdCxuPW5ldyBXT3QsaT1uZXcgcU90KDEsMSwxKTtlLl9vbkNoYW5nZSgoZnVuY3Rpb24gcigpe24uc2V0RnJvbUV1bGVyKGUsITEpfSkpLG4uX29uQ2hhbmdlKChmdW5jdGlvbiBvKCl7ZS5zZXRGcm9tUXVhdGVybmlvbihuLHZvaWQgMCwhMSl9KSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7cG9zaXRpb246e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOnR9LHJvdGF0aW9uOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTplfSxxdWF0ZXJuaW9uOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpufSxzY2FsZTp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6aX0sbW9kZWxWaWV3TWF0cml4Ont2YWx1ZTpuZXcgYlJ0fSxub3JtYWxNYXRyaXg6e3ZhbHVlOm5ldyBET3R9fSksdGhpcy5tYXRyaXg9bmV3IGJSdCx0aGlzLm1hdHJpeFdvcmxkPW5ldyBiUnQsdGhpcy5tYXRyaXhBdXRvVXBkYXRlPVdSdC5EZWZhdWx0TWF0cml4QXV0b1VwZGF0ZSx0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITEsdGhpcy5sYXllcnM9bmV3IFBSdCx0aGlzLnZpc2libGU9ITAsdGhpcy5jYXN0U2hhZG93PSExLHRoaXMucmVjZWl2ZVNoYWRvdz0hMSx0aGlzLmZydXN0dW1DdWxsZWQ9ITAsdGhpcy5yZW5kZXJPcmRlcj0wLHRoaXMuYW5pbWF0aW9ucz1bXSx0aGlzLnVzZXJEYXRhPXt9fVdSdC5EZWZhdWx0VXA9bmV3IHFPdCgwLDEsMCksV1J0LkRlZmF1bHRNYXRyaXhBdXRvVXBkYXRlPSEwLFdSdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKE5PdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpXUnQsaXNPYmplY3QzRDohMCxvbkJlZm9yZVJlbmRlcjpmdW5jdGlvbigpe30sb25BZnRlclJlbmRlcjpmdW5jdGlvbigpe30sYXBwbHlNYXRyaXg0OmZ1bmN0aW9uKHQpe3RoaXMubWF0cml4QXV0b1VwZGF0ZSYmdGhpcy51cGRhdGVNYXRyaXgoKSx0aGlzLm1hdHJpeC5wcmVtdWx0aXBseSh0KSx0aGlzLm1hdHJpeC5kZWNvbXBvc2UodGhpcy5wb3NpdGlvbix0aGlzLnF1YXRlcm5pb24sdGhpcy5zY2FsZSl9LGFwcGx5UXVhdGVybmlvbjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5xdWF0ZXJuaW9uLnByZW11bHRpcGx5KHQpLHRoaXN9LHNldFJvdGF0aW9uRnJvbUF4aXNBbmdsZTpmdW5jdGlvbih0LGUpe3RoaXMucXVhdGVybmlvbi5zZXRGcm9tQXhpc0FuZ2xlKHQsZSl9LHNldFJvdGF0aW9uRnJvbUV1bGVyOmZ1bmN0aW9uKHQpe3RoaXMucXVhdGVybmlvbi5zZXRGcm9tRXVsZXIodCwhMCl9LHNldFJvdGF0aW9uRnJvbU1hdHJpeDpmdW5jdGlvbih0KXt0aGlzLnF1YXRlcm5pb24uc2V0RnJvbVJvdGF0aW9uTWF0cml4KHQpfSxzZXRSb3RhdGlvbkZyb21RdWF0ZXJuaW9uOmZ1bmN0aW9uKHQpe3RoaXMucXVhdGVybmlvbi5jb3B5KHQpfSxyb3RhdGVPbkF4aXM6ZnVuY3Rpb24odCxlKXtyZXR1cm4gT1J0LnNldEZyb21BeGlzQW5nbGUodCxlKSx0aGlzLnF1YXRlcm5pb24ubXVsdGlwbHkoT1J0KSx0aGlzfSxyb3RhdGVPbldvcmxkQXhpczpmdW5jdGlvbih0LGUpe3JldHVybiBPUnQuc2V0RnJvbUF4aXNBbmdsZSh0LGUpLHRoaXMucXVhdGVybmlvbi5wcmVtdWx0aXBseShPUnQpLHRoaXN9LHJvdGF0ZVg6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucm90YXRlT25BeGlzKEZSdCx0KX0scm90YXRlWTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5yb3RhdGVPbkF4aXMoVlJ0LHQpfSxyb3RhdGVaOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnJvdGF0ZU9uQXhpcyhVUnQsdCl9LHRyYW5zbGF0ZU9uQXhpczpmdW5jdGlvbih0LGUpe3JldHVybiBJUnQuY29weSh0KS5hcHBseVF1YXRlcm5pb24odGhpcy5xdWF0ZXJuaW9uKSx0aGlzLnBvc2l0aW9uLmFkZChJUnQubXVsdGlwbHlTY2FsYXIoZSkpLHRoaXN9LHRyYW5zbGF0ZVg6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudHJhbnNsYXRlT25BeGlzKEZSdCx0KX0sdHJhbnNsYXRlWTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50cmFuc2xhdGVPbkF4aXMoVlJ0LHQpfSx0cmFuc2xhdGVaOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRyYW5zbGF0ZU9uQXhpcyhVUnQsdCl9LGxvY2FsVG9Xb3JsZDpmdW5jdGlvbih0KXtyZXR1cm4gdC5hcHBseU1hdHJpeDQodGhpcy5tYXRyaXhXb3JsZCl9LHdvcmxkVG9Mb2NhbDpmdW5jdGlvbih0KXtyZXR1cm4gdC5hcHBseU1hdHJpeDQoUlJ0LmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCkpfSxsb29rQXQ6ZnVuY3Rpb24odCxlLG4pe3QuaXNWZWN0b3IzP3pSdC5jb3B5KHQpOnpSdC5zZXQodCxlLG4pO2NvbnN0IGk9dGhpcy5wYXJlbnQ7dGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksRFJ0LnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1hdHJpeFdvcmxkKSx0aGlzLmlzQ2FtZXJhfHx0aGlzLmlzTGlnaHQ/UlJ0Lmxvb2tBdChEUnQselJ0LHRoaXMudXApOlJSdC5sb29rQXQoelJ0LERSdCx0aGlzLnVwKSx0aGlzLnF1YXRlcm5pb24uc2V0RnJvbVJvdGF0aW9uTWF0cml4KFJSdCksaSYmKFJSdC5leHRyYWN0Um90YXRpb24oaS5tYXRyaXhXb3JsZCksT1J0LnNldEZyb21Sb3RhdGlvbk1hdHJpeChSUnQpLHRoaXMucXVhdGVybmlvbi5wcmVtdWx0aXBseShPUnQuaW52ZXJ0KCkpKX0sYWRkOmZ1bmN0aW9uKHQpe2lmKGFyZ3VtZW50cy5sZW5ndGg+MSl7Zm9yKGxldCB0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl0aGlzLmFkZChhcmd1bWVudHNbdF0pO3JldHVybiB0aGlzfXJldHVybiB0PT09dGhpcz8oY29uc29sZS5lcnJvcigiVEhSRUUuT2JqZWN0M0QuYWRkOiBvYmplY3QgY2FuJ3QgYmUgYWRkZWQgYXMgYSBjaGlsZCBvZiBpdHNlbGYuIix0KSx0aGlzKToodCYmdC5pc09iamVjdDNEPyhudWxsIT09dC5wYXJlbnQmJnQucGFyZW50LnJlbW92ZSh0KSx0LnBhcmVudD10aGlzLHRoaXMuY2hpbGRyZW4ucHVzaCh0KSx0LmRpc3BhdGNoRXZlbnQoalJ0KSk6Y29uc29sZS5lcnJvcigiVEhSRUUuT2JqZWN0M0QuYWRkOiBvYmplY3Qgbm90IGFuIGluc3RhbmNlIG9mIFRIUkVFLk9iamVjdDNELiIsdCksdGhpcyl9LHJlbW92ZTpmdW5jdGlvbih0KXtpZihhcmd1bWVudHMubGVuZ3RoPjEpe2ZvcihsZXQgdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspdGhpcy5yZW1vdmUoYXJndW1lbnRzW3RdKTtyZXR1cm4gdGhpc31jb25zdCBlPXRoaXMuY2hpbGRyZW4uaW5kZXhPZih0KTtyZXR1cm4tMSE9PWUmJih0LnBhcmVudD1udWxsLHRoaXMuY2hpbGRyZW4uc3BsaWNlKGUsMSksdC5kaXNwYXRjaEV2ZW50KEdSdCkpLHRoaXN9LGNsZWFyOmZ1bmN0aW9uKCl7Zm9yKGxldCB0PTA7dDx0aGlzLmNoaWxkcmVuLmxlbmd0aDt0Kyspe2NvbnN0IGU9dGhpcy5jaGlsZHJlblt0XTtlLnBhcmVudD1udWxsLGUuZGlzcGF0Y2hFdmVudChHUnQpfXJldHVybiB0aGlzLmNoaWxkcmVuLmxlbmd0aD0wLHRoaXN9LGF0dGFjaDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksUlJ0LmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCksbnVsbCE9PXQucGFyZW50JiYodC5wYXJlbnQudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLFJSdC5tdWx0aXBseSh0LnBhcmVudC5tYXRyaXhXb3JsZCkpLHQuYXBwbHlNYXRyaXg0KFJSdCksdC51cGRhdGVXb3JsZE1hdHJpeCghMSwhMSksdGhpcy5hZGQodCksdGhpc30sZ2V0T2JqZWN0QnlJZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5nZXRPYmplY3RCeVByb3BlcnR5KCJpZCIsdCl9LGdldE9iamVjdEJ5TmFtZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5nZXRPYmplY3RCeVByb3BlcnR5KCJuYW1lIix0KX0sZ2V0T2JqZWN0QnlQcm9wZXJ0eTpmdW5jdGlvbih0LGUpe2lmKHRoaXNbdF09PT1lKXJldHVybiB0aGlzO2ZvcihsZXQgbj0wLGk9dGhpcy5jaGlsZHJlbi5sZW5ndGg7bjxpO24rKyl7Y29uc3QgaT10aGlzLmNoaWxkcmVuW25dLmdldE9iamVjdEJ5UHJvcGVydHkodCxlKTtpZih2b2lkIDAhPT1pKXJldHVybiBpfX0sZ2V0V29ybGRQb3NpdGlvbjpmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKGNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5nZXRXb3JsZFBvc2l0aW9uKCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLHQ9bmV3IHFPdCksdGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksdC5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5tYXRyaXhXb3JsZCl9LGdldFdvcmxkUXVhdGVybmlvbjpmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKGNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5nZXRXb3JsZFF1YXRlcm5pb24oKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIiksdD1uZXcgV090KSx0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSx0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZShEUnQsdCxCUnQpLHR9LGdldFdvcmxkU2NhbGU6ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJihjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAuZ2V0V29ybGRTY2FsZSgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSx0PW5ldyBxT3QpLHRoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLHRoaXMubWF0cml4V29ybGQuZGVjb21wb3NlKERSdCxIUnQsdCksdH0sZ2V0V29ybGREaXJlY3Rpb246ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKGNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5nZXRXb3JsZERpcmVjdGlvbigpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSx0PW5ldyBxT3QpLHRoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpO2NvbnN0IGU9dGhpcy5tYXRyaXhXb3JsZC5lbGVtZW50cztyZXR1cm4gdC5zZXQoZVs4XSxlWzldLGVbMTBdKS5ub3JtYWxpemUoKX0scmF5Y2FzdDpmdW5jdGlvbigpe30sdHJhdmVyc2U6ZnVuY3Rpb24odCl7dCh0aGlzKTtjb25zdCBlPXRoaXMuY2hpbGRyZW47Zm9yKGxldCBuPTAsaT1lLmxlbmd0aDtuPGk7bisrKWVbbl0udHJhdmVyc2UodCl9LHRyYXZlcnNlVmlzaWJsZTpmdW5jdGlvbih0KXtpZighMT09PXRoaXMudmlzaWJsZSlyZXR1cm47dCh0aGlzKTtjb25zdCBlPXRoaXMuY2hpbGRyZW47Zm9yKGxldCBuPTAsaT1lLmxlbmd0aDtuPGk7bisrKWVbbl0udHJhdmVyc2VWaXNpYmxlKHQpfSx0cmF2ZXJzZUFuY2VzdG9yczpmdW5jdGlvbih0KXtjb25zdCBlPXRoaXMucGFyZW50O251bGwhPT1lJiYodChlKSxlLnRyYXZlcnNlQW5jZXN0b3JzKHQpKX0sdXBkYXRlTWF0cml4OmZ1bmN0aW9uKCl7dGhpcy5tYXRyaXguY29tcG9zZSh0aGlzLnBvc2l0aW9uLHRoaXMucXVhdGVybmlvbix0aGlzLnNjYWxlKSx0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9LHVwZGF0ZU1hdHJpeFdvcmxkOmZ1bmN0aW9uKHQpe3RoaXMubWF0cml4QXV0b1VwZGF0ZSYmdGhpcy51cGRhdGVNYXRyaXgoKSwodGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlfHx0KSYmKG51bGw9PT10aGlzLnBhcmVudD90aGlzLm1hdHJpeFdvcmxkLmNvcHkodGhpcy5tYXRyaXgpOnRoaXMubWF0cml4V29ybGQubXVsdGlwbHlNYXRyaWNlcyh0aGlzLnBhcmVudC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeCksdGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSExLHQ9ITApO2NvbnN0IGU9dGhpcy5jaGlsZHJlbjtmb3IobGV0IG49MCxpPWUubGVuZ3RoO248aTtuKyspZVtuXS51cGRhdGVNYXRyaXhXb3JsZCh0KX0sdXBkYXRlV29ybGRNYXRyaXg6ZnVuY3Rpb24odCxlKXtjb25zdCBuPXRoaXMucGFyZW50O2lmKCEwPT09dCYmbnVsbCE9PW4mJm4udXBkYXRlV29ybGRNYXRyaXgoITAsITEpLHRoaXMubWF0cml4QXV0b1VwZGF0ZSYmdGhpcy51cGRhdGVNYXRyaXgoKSxudWxsPT09dGhpcy5wYXJlbnQ/dGhpcy5tYXRyaXhXb3JsZC5jb3B5KHRoaXMubWF0cml4KTp0aGlzLm1hdHJpeFdvcmxkLm11bHRpcGx5TWF0cmljZXModGhpcy5wYXJlbnQubWF0cml4V29ybGQsdGhpcy5tYXRyaXgpLCEwPT09ZSl7Y29uc3QgdD10aGlzLmNoaWxkcmVuO2ZvcihsZXQgZT0wLG49dC5sZW5ndGg7ZTxuO2UrKyl0W2VdLnVwZGF0ZVdvcmxkTWF0cml4KCExLCEwKX19LHRvSlNPTjpmdW5jdGlvbih0KXtjb25zdCBlPXZvaWQgMD09PXR8fCJzdHJpbmciPT10eXBlb2YgdCxuPXt9O2UmJih0PXtnZW9tZXRyaWVzOnt9LG1hdGVyaWFsczp7fSx0ZXh0dXJlczp7fSxpbWFnZXM6e30sc2hhcGVzOnt9LHNrZWxldG9uczp7fSxhbmltYXRpb25zOnt9fSxuLm1ldGFkYXRhPXt2ZXJzaW9uOjQuNSx0eXBlOiJPYmplY3QiLGdlbmVyYXRvcjoiT2JqZWN0M0QudG9KU09OIn0pO2NvbnN0IGk9e307ZnVuY3Rpb24gcihlLG4pe3JldHVybiB2b2lkIDA9PT1lW24udXVpZF0mJihlW24udXVpZF09bi50b0pTT04odCkpLG4udXVpZH1pZihpLnV1aWQ9dGhpcy51dWlkLGkudHlwZT10aGlzLnR5cGUsIiIhPT10aGlzLm5hbWUmJihpLm5hbWU9dGhpcy5uYW1lKSwhMD09PXRoaXMuY2FzdFNoYWRvdyYmKGkuY2FzdFNoYWRvdz0hMCksITA9PT10aGlzLnJlY2VpdmVTaGFkb3cmJihpLnJlY2VpdmVTaGFkb3c9ITApLCExPT09dGhpcy52aXNpYmxlJiYoaS52aXNpYmxlPSExKSwhMT09PXRoaXMuZnJ1c3R1bUN1bGxlZCYmKGkuZnJ1c3R1bUN1bGxlZD0hMSksMCE9PXRoaXMucmVuZGVyT3JkZXImJihpLnJlbmRlck9yZGVyPXRoaXMucmVuZGVyT3JkZXIpLCJ7fSIhPT1KU09OLnN0cmluZ2lmeSh0aGlzLnVzZXJEYXRhKSYmKGkudXNlckRhdGE9dGhpcy51c2VyRGF0YSksaS5sYXllcnM9dGhpcy5sYXllcnMubWFzayxpLm1hdHJpeD10aGlzLm1hdHJpeC50b0FycmF5KCksITE9PT10aGlzLm1hdHJpeEF1dG9VcGRhdGUmJihpLm1hdHJpeEF1dG9VcGRhdGU9ITEpLHRoaXMuaXNJbnN0YW5jZWRNZXNoJiYoaS50eXBlPSJJbnN0YW5jZWRNZXNoIixpLmNvdW50PXRoaXMuY291bnQsaS5pbnN0YW5jZU1hdHJpeD10aGlzLmluc3RhbmNlTWF0cml4LnRvSlNPTigpKSx0aGlzLmlzTWVzaHx8dGhpcy5pc0xpbmV8fHRoaXMuaXNQb2ludHMpe2kuZ2VvbWV0cnk9cih0Lmdlb21ldHJpZXMsdGhpcy5nZW9tZXRyeSk7Y29uc3QgZT10aGlzLmdlb21ldHJ5LnBhcmFtZXRlcnM7aWYodm9pZCAwIT09ZSYmdm9pZCAwIT09ZS5zaGFwZXMpe2NvbnN0IG49ZS5zaGFwZXM7aWYoQXJyYXkuaXNBcnJheShuKSlmb3IobGV0IGU9MCxpPW4ubGVuZ3RoO2U8aTtlKyspcih0LnNoYXBlcyxuW2VdKTtlbHNlIHIodC5zaGFwZXMsbil9fWlmKHRoaXMuaXNTa2lubmVkTWVzaCYmKGkuYmluZE1vZGU9dGhpcy5iaW5kTW9kZSxpLmJpbmRNYXRyaXg9dGhpcy5iaW5kTWF0cml4LnRvQXJyYXkoKSx2b2lkIDAhPT10aGlzLnNrZWxldG9uJiYocih0LnNrZWxldG9ucyx0aGlzLnNrZWxldG9uKSxpLnNrZWxldG9uPXRoaXMuc2tlbGV0b24udXVpZCkpLHZvaWQgMCE9PXRoaXMubWF0ZXJpYWwpaWYoQXJyYXkuaXNBcnJheSh0aGlzLm1hdGVyaWFsKSl7Y29uc3QgZT1bXTtmb3IobGV0IG49MCxpPXRoaXMubWF0ZXJpYWwubGVuZ3RoO248aTtuKyspZS5wdXNoKHIodC5tYXRlcmlhbHMsdGhpcy5tYXRlcmlhbFtuXSkpO2kubWF0ZXJpYWw9ZX1lbHNlIGkubWF0ZXJpYWw9cih0Lm1hdGVyaWFscyx0aGlzLm1hdGVyaWFsKTtpZih0aGlzLmNoaWxkcmVuLmxlbmd0aD4wKXtpLmNoaWxkcmVuPVtdO2ZvcihsZXQgZT0wO2U8dGhpcy5jaGlsZHJlbi5sZW5ndGg7ZSsrKWkuY2hpbGRyZW4ucHVzaCh0aGlzLmNoaWxkcmVuW2VdLnRvSlNPTih0KS5vYmplY3QpfWlmKHRoaXMuYW5pbWF0aW9ucy5sZW5ndGg+MCl7aS5hbmltYXRpb25zPVtdO2ZvcihsZXQgZT0wO2U8dGhpcy5hbmltYXRpb25zLmxlbmd0aDtlKyspaS5hbmltYXRpb25zLnB1c2gocih0LmFuaW1hdGlvbnMsdGhpcy5hbmltYXRpb25zW2VdKSl9aWYoZSl7Y29uc3QgZT1vKHQuZ2VvbWV0cmllcyksaT1vKHQubWF0ZXJpYWxzKSxyPW8odC50ZXh0dXJlcyksYT1vKHQuaW1hZ2VzKSxzPW8odC5zaGFwZXMpLGw9byh0LnNrZWxldG9ucyksYz1vKHQuYW5pbWF0aW9ucyk7ZS5sZW5ndGg+MCYmKG4uZ2VvbWV0cmllcz1lKSxpLmxlbmd0aD4wJiYobi5tYXRlcmlhbHM9aSksci5sZW5ndGg+MCYmKG4udGV4dHVyZXM9ciksYS5sZW5ndGg+MCYmKG4uaW1hZ2VzPWEpLHMubGVuZ3RoPjAmJihuLnNoYXBlcz1zKSxsLmxlbmd0aD4wJiYobi5za2VsZXRvbnM9bCksYy5sZW5ndGg+MCYmKG4uYW5pbWF0aW9ucz1jKX1yZXR1cm4gbi5vYmplY3Q9aSxuO2Z1bmN0aW9uIG8odCl7Y29uc3QgZT1bXTtmb3IoY29uc3QgbiBpbiB0KXtjb25zdCBpPXRbbl07ZGVsZXRlIGkubWV0YWRhdGEsZS5wdXNoKGkpfXJldHVybiBlfX0sY2xvbmU6ZnVuY3Rpb24odCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMsdCl9LGNvcHk6ZnVuY3Rpb24odCxlPSEwKXtpZih0aGlzLm5hbWU9dC5uYW1lLHRoaXMudXAuY29weSh0LnVwKSx0aGlzLnBvc2l0aW9uLmNvcHkodC5wb3NpdGlvbiksdGhpcy5yb3RhdGlvbi5vcmRlcj10LnJvdGF0aW9uLm9yZGVyLHRoaXMucXVhdGVybmlvbi5jb3B5KHQucXVhdGVybmlvbiksdGhpcy5zY2FsZS5jb3B5KHQuc2NhbGUpLHRoaXMubWF0cml4LmNvcHkodC5tYXRyaXgpLHRoaXMubWF0cml4V29ybGQuY29weSh0Lm1hdHJpeFdvcmxkKSx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9dC5tYXRyaXhBdXRvVXBkYXRlLHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZT10Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGUsdGhpcy5sYXllcnMubWFzaz10LmxheWVycy5tYXNrLHRoaXMudmlzaWJsZT10LnZpc2libGUsdGhpcy5jYXN0U2hhZG93PXQuY2FzdFNoYWRvdyx0aGlzLnJlY2VpdmVTaGFkb3c9dC5yZWNlaXZlU2hhZG93LHRoaXMuZnJ1c3R1bUN1bGxlZD10LmZydXN0dW1DdWxsZWQsdGhpcy5yZW5kZXJPcmRlcj10LnJlbmRlck9yZGVyLHRoaXMudXNlckRhdGE9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0LnVzZXJEYXRhKSksITA9PT1lKWZvcihsZXQgZT0wO2U8dC5jaGlsZHJlbi5sZW5ndGg7ZSsrKXRoaXMuYWRkKHQuY2hpbGRyZW5bZV0uY2xvbmUoKSk7cmV0dXJuIHRoaXN9fSk7Y29uc3QgcVJ0PW5ldyBxT3QsWVJ0PW5ldyBxT3QsWFJ0PW5ldyBET3Q7Y2xhc3MgJFJ0e2NvbnN0cnVjdG9yKHQsZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlzUGxhbmUiLHt2YWx1ZTohMH0pLHRoaXMubm9ybWFsPXZvaWQgMCE9PXQ/dDpuZXcgcU90KDEsMCwwKSx0aGlzLmNvbnN0YW50PXZvaWQgMCE9PWU/ZTowfXNldCh0LGUpe3JldHVybiB0aGlzLm5vcm1hbC5jb3B5KHQpLHRoaXMuY29uc3RhbnQ9ZSx0aGlzfXNldENvbXBvbmVudHModCxlLG4saSl7cmV0dXJuIHRoaXMubm9ybWFsLnNldCh0LGUsbiksdGhpcy5jb25zdGFudD1pLHRoaXN9c2V0RnJvbU5vcm1hbEFuZENvcGxhbmFyUG9pbnQodCxlKXtyZXR1cm4gdGhpcy5ub3JtYWwuY29weSh0KSx0aGlzLmNvbnN0YW50PS1lLmRvdCh0aGlzLm5vcm1hbCksdGhpc31zZXRGcm9tQ29wbGFuYXJQb2ludHModCxlLG4pe2NvbnN0IGk9cVJ0LnN1YlZlY3RvcnMobixlKS5jcm9zcyhZUnQuc3ViVmVjdG9ycyh0LGUpKS5ub3JtYWxpemUoKTtyZXR1cm4gdGhpcy5zZXRGcm9tTm9ybWFsQW5kQ29wbGFuYXJQb2ludChpLHQpLHRoaXN9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9Y29weSh0KXtyZXR1cm4gdGhpcy5ub3JtYWwuY29weSh0Lm5vcm1hbCksdGhpcy5jb25zdGFudD10LmNvbnN0YW50LHRoaXN9bm9ybWFsaXplKCl7Y29uc3QgdD0xL3RoaXMubm9ybWFsLmxlbmd0aCgpO3JldHVybiB0aGlzLm5vcm1hbC5tdWx0aXBseVNjYWxhcih0KSx0aGlzLmNvbnN0YW50Kj10LHRoaXN9bmVnYXRlKCl7cmV0dXJuIHRoaXMuY29uc3RhbnQqPS0xLHRoaXMubm9ybWFsLm5lZ2F0ZSgpLHRoaXN9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiB0aGlzLm5vcm1hbC5kb3QodCkrdGhpcy5jb25zdGFudH1kaXN0YW5jZVRvU3BoZXJlKHQpe3JldHVybiB0aGlzLmRpc3RhbmNlVG9Qb2ludCh0LmNlbnRlciktdC5yYWRpdXN9cHJvamVjdFBvaW50KHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihjb25zb2xlLndhcm4oIlRIUkVFLlBsYW5lOiAucHJvamVjdFBvaW50KCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLGU9bmV3IHFPdCksZS5jb3B5KHRoaXMubm9ybWFsKS5tdWx0aXBseVNjYWxhcigtdGhpcy5kaXN0YW5jZVRvUG9pbnQodCkpLmFkZCh0KX1pbnRlcnNlY3RMaW5lKHQsZSl7dm9pZCAwPT09ZSYmKGNvbnNvbGUud2FybigiVEhSRUUuUGxhbmU6IC5pbnRlcnNlY3RMaW5lKCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLGU9bmV3IHFPdCk7Y29uc3Qgbj10LmRlbHRhKHFSdCksaT10aGlzLm5vcm1hbC5kb3Qobik7aWYoMD09PWkpcmV0dXJuIDA9PT10aGlzLmRpc3RhbmNlVG9Qb2ludCh0LnN0YXJ0KT9lLmNvcHkodC5zdGFydCk6dm9pZCAwO2NvbnN0IHI9LSh0LnN0YXJ0LmRvdCh0aGlzLm5vcm1hbCkrdGhpcy5jb25zdGFudCkvaTtyZXR1cm4gcjwwfHxyPjE/dm9pZCAwOmUuY29weShuKS5tdWx0aXBseVNjYWxhcihyKS5hZGQodC5zdGFydCl9aW50ZXJzZWN0c0xpbmUodCl7Y29uc3QgZT10aGlzLmRpc3RhbmNlVG9Qb2ludCh0LnN0YXJ0KSxuPXRoaXMuZGlzdGFuY2VUb1BvaW50KHQuZW5kKTtyZXR1cm4gZTwwJiZuPjB8fG48MCYmZT4wfWludGVyc2VjdHNCb3godCl7cmV0dXJuIHQuaW50ZXJzZWN0c1BsYW5lKHRoaXMpfWludGVyc2VjdHNTcGhlcmUodCl7cmV0dXJuIHQuaW50ZXJzZWN0c1BsYW5lKHRoaXMpfWNvcGxhbmFyUG9pbnQodCl7cmV0dXJuIHZvaWQgMD09PXQmJihjb25zb2xlLndhcm4oIlRIUkVFLlBsYW5lOiAuY29wbGFuYXJQb2ludCgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSx0PW5ldyBxT3QpLHQuY29weSh0aGlzLm5vcm1hbCkubXVsdGlwbHlTY2FsYXIoLXRoaXMuY29uc3RhbnQpfWFwcGx5TWF0cml4NCh0LGUpe2NvbnN0IG49ZXx8WFJ0LmdldE5vcm1hbE1hdHJpeCh0KSxpPXRoaXMuY29wbGFuYXJQb2ludChxUnQpLmFwcGx5TWF0cml4NCh0KSxyPXRoaXMubm9ybWFsLmFwcGx5TWF0cml4MyhuKS5ub3JtYWxpemUoKTtyZXR1cm4gdGhpcy5jb25zdGFudD0taS5kb3QociksdGhpc310cmFuc2xhdGUodCl7cmV0dXJuIHRoaXMuY29uc3RhbnQtPXQuZG90KHRoaXMubm9ybWFsKSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5ub3JtYWwuZXF1YWxzKHRoaXMubm9ybWFsKSYmdC5jb25zdGFudD09PXRoaXMuY29uc3RhbnR9fWNvbnN0IEtSdD1uZXcgcU90LFpSdD1uZXcgcU90LEpSdD1uZXcgcU90LFFSdD1uZXcgcU90LHR6dD1uZXcgcU90LGV6dD1uZXcgcU90LG56dD1uZXcgcU90LGl6dD1uZXcgcU90LHJ6dD1uZXcgcU90LG96dD1uZXcgcU90O2NsYXNzIGF6dHtjb25zdHJ1Y3Rvcih0LGUsbil7dGhpcy5hPXZvaWQgMCE9PXQ/dDpuZXcgcU90LHRoaXMuYj12b2lkIDAhPT1lP2U6bmV3IHFPdCx0aGlzLmM9dm9pZCAwIT09bj9uOm5ldyBxT3R9c3RhdGljIGdldE5vcm1hbCh0LGUsbixpKXt2b2lkIDA9PT1pJiYoY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLmdldE5vcm1hbCgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSxpPW5ldyBxT3QpLGkuc3ViVmVjdG9ycyhuLGUpLEtSdC5zdWJWZWN0b3JzKHQsZSksaS5jcm9zcyhLUnQpO2NvbnN0IHI9aS5sZW5ndGhTcSgpO3JldHVybiByPjA/aS5tdWx0aXBseVNjYWxhcigxL01hdGguc3FydChyKSk6aS5zZXQoMCwwLDApfXN0YXRpYyBnZXRCYXJ5Y29vcmQodCxlLG4saSxyKXtLUnQuc3ViVmVjdG9ycyhpLGUpLFpSdC5zdWJWZWN0b3JzKG4sZSksSlJ0LnN1YlZlY3RvcnModCxlKTtjb25zdCBvPUtSdC5kb3QoS1J0KSxhPUtSdC5kb3QoWlJ0KSxzPUtSdC5kb3QoSlJ0KSxsPVpSdC5kb3QoWlJ0KSxjPVpSdC5kb3QoSlJ0KSx1PW8qbC1hKmE7aWYodm9pZCAwPT09ciYmKGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5nZXRCYXJ5Y29vcmQoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIikscj1uZXcgcU90KSwwPT09dSlyZXR1cm4gci5zZXQoLTIsLTEsLTEpO2NvbnN0IGg9MS91LGQ9KGwqcy1hKmMpKmgscD0obypjLWEqcykqaDtyZXR1cm4gci5zZXQoMS1kLXAscCxkKX1zdGF0aWMgY29udGFpbnNQb2ludCh0LGUsbixpKXtyZXR1cm4gdGhpcy5nZXRCYXJ5Y29vcmQodCxlLG4saSxRUnQpLFFSdC54Pj0wJiZRUnQueT49MCYmUVJ0LngrUVJ0Lnk8PTF9c3RhdGljIGdldFVWKHQsZSxuLGkscixvLGEscyl7cmV0dXJuIHRoaXMuZ2V0QmFyeWNvb3JkKHQsZSxuLGksUVJ0KSxzLnNldCgwLDApLHMuYWRkU2NhbGVkVmVjdG9yKHIsUVJ0LngpLHMuYWRkU2NhbGVkVmVjdG9yKG8sUVJ0LnkpLHMuYWRkU2NhbGVkVmVjdG9yKGEsUVJ0LnopLHN9c3RhdGljIGlzRnJvbnRGYWNpbmcodCxlLG4saSl7cmV0dXJuIEtSdC5zdWJWZWN0b3JzKG4sZSksWlJ0LnN1YlZlY3RvcnModCxlKSxLUnQuY3Jvc3MoWlJ0KS5kb3QoaSk8MH1zZXQodCxlLG4pe3JldHVybiB0aGlzLmEuY29weSh0KSx0aGlzLmIuY29weShlKSx0aGlzLmMuY29weShuKSx0aGlzfXNldEZyb21Qb2ludHNBbmRJbmRpY2VzKHQsZSxuLGkpe3JldHVybiB0aGlzLmEuY29weSh0W2VdKSx0aGlzLmIuY29weSh0W25dKSx0aGlzLmMuY29weSh0W2ldKSx0aGlzfWNsb25lKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMuYS5jb3B5KHQuYSksdGhpcy5iLmNvcHkodC5iKSx0aGlzLmMuY29weSh0LmMpLHRoaXN9Z2V0QXJlYSgpe3JldHVybiBLUnQuc3ViVmVjdG9ycyh0aGlzLmMsdGhpcy5iKSxaUnQuc3ViVmVjdG9ycyh0aGlzLmEsdGhpcy5iKSwuNSpLUnQuY3Jvc3MoWlJ0KS5sZW5ndGgoKX1nZXRNaWRwb2ludCh0KXtyZXR1cm4gdm9pZCAwPT09dCYmKGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5nZXRNaWRwb2ludCgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSx0PW5ldyBxT3QpLHQuYWRkVmVjdG9ycyh0aGlzLmEsdGhpcy5iKS5hZGQodGhpcy5jKS5tdWx0aXBseVNjYWxhcigxLzMpfWdldE5vcm1hbCh0KXtyZXR1cm4gYXp0LmdldE5vcm1hbCh0aGlzLmEsdGhpcy5iLHRoaXMuYyx0KX1nZXRQbGFuZSh0KXtyZXR1cm4gdm9pZCAwPT09dCYmKGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5nZXRQbGFuZSgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSx0PW5ldyAkUnQpLHQuc2V0RnJvbUNvcGxhbmFyUG9pbnRzKHRoaXMuYSx0aGlzLmIsdGhpcy5jKX1nZXRCYXJ5Y29vcmQodCxlKXtyZXR1cm4gYXp0LmdldEJhcnljb29yZCh0LHRoaXMuYSx0aGlzLmIsdGhpcy5jLGUpfWdldFVWKHQsZSxuLGkscil7cmV0dXJuIGF6dC5nZXRVVih0LHRoaXMuYSx0aGlzLmIsdGhpcy5jLGUsbixpLHIpfWNvbnRhaW5zUG9pbnQodCl7cmV0dXJuIGF6dC5jb250YWluc1BvaW50KHQsdGhpcy5hLHRoaXMuYix0aGlzLmMpfWlzRnJvbnRGYWNpbmcodCl7cmV0dXJuIGF6dC5pc0Zyb250RmFjaW5nKHRoaXMuYSx0aGlzLmIsdGhpcy5jLHQpfWludGVyc2VjdHNCb3godCl7cmV0dXJuIHQuaW50ZXJzZWN0c1RyaWFuZ2xlKHRoaXMpfWNsb3Nlc3RQb2ludFRvUG9pbnQodCxlKXt2b2lkIDA9PT1lJiYoY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLmNsb3Nlc3RQb2ludFRvUG9pbnQoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIiksZT1uZXcgcU90KTtjb25zdCBuPXRoaXMuYSxpPXRoaXMuYixyPXRoaXMuYztsZXQgbyxhO3R6dC5zdWJWZWN0b3JzKGksbiksZXp0LnN1YlZlY3RvcnMocixuKSxpenQuc3ViVmVjdG9ycyh0LG4pO2NvbnN0IHM9dHp0LmRvdChpenQpLGw9ZXp0LmRvdChpenQpO2lmKHM8PTAmJmw8PTApcmV0dXJuIGUuY29weShuKTtyenQuc3ViVmVjdG9ycyh0LGkpO2NvbnN0IGM9dHp0LmRvdChyenQpLHU9ZXp0LmRvdChyenQpO2lmKGM+PTAmJnU8PWMpcmV0dXJuIGUuY29weShpKTtjb25zdCBoPXMqdS1jKmw7aWYoaDw9MCYmcz49MCYmYzw9MClyZXR1cm4gbz1zLyhzLWMpLGUuY29weShuKS5hZGRTY2FsZWRWZWN0b3IodHp0LG8pO296dC5zdWJWZWN0b3JzKHQscik7Y29uc3QgZD10enQuZG90KG96dCkscD1lenQuZG90KG96dCk7aWYocD49MCYmZDw9cClyZXR1cm4gZS5jb3B5KHIpO2NvbnN0IGY9ZCpsLXMqcDtpZihmPD0wJiZsPj0wJiZwPD0wKXJldHVybiBhPWwvKGwtcCksZS5jb3B5KG4pLmFkZFNjYWxlZFZlY3RvcihlenQsYSk7Y29uc3QgbT1jKnAtZCp1O2lmKG08PTAmJnUtYz49MCYmZC1wPj0wKXJldHVybiBuenQuc3ViVmVjdG9ycyhyLGkpLGE9KHUtYykvKHUtYysoZC1wKSksZS5jb3B5KGkpLmFkZFNjYWxlZFZlY3RvcihuenQsYSk7Y29uc3QgZz0xLyhtK2YraCk7cmV0dXJuIG89ZipnLGE9aCpnLGUuY29weShuKS5hZGRTY2FsZWRWZWN0b3IodHp0LG8pLmFkZFNjYWxlZFZlY3RvcihlenQsYSl9ZXF1YWxzKHQpe3JldHVybiB0LmEuZXF1YWxzKHRoaXMuYSkmJnQuYi5lcXVhbHModGhpcy5iKSYmdC5jLmVxdWFscyh0aGlzLmMpfX1jb25zdCBzenQ9e2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH0sbHp0PXtoOjAsczowLGw6MH0sY3p0PXtoOjAsczowLGw6MH07ZnVuY3Rpb24gdXp0KHQsZSxuKXtyZXR1cm4gbjwwJiYobis9MSksbj4xJiYobi09MSksbjwxLzY/dCs2KihlLXQpKm46bjwuNT9lOm48Mi8zP3QrNiooZS10KSooMi8zLW4pOnR9ZnVuY3Rpb24gaHp0KHQpe3JldHVybiB0PC4wNDA0NT8uMDc3Mzk5MzgwOCp0Ok1hdGgucG93KC45NDc4NjcyOTg2KnQrLjA1MjEzMjcwMTQsMi40KX1mdW5jdGlvbiBkenQodCl7cmV0dXJuIHQ8LjAwMzEzMDg/MTIuOTIqdDoxLjA1NSpNYXRoLnBvdyh0LC40MTY2NiktLjA1NX1jbGFzcyBwenR7Y29uc3RydWN0b3IodCxlLG4pe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaXNDb2xvciIse3ZhbHVlOiEwfSksdm9pZCAwPT09ZSYmdm9pZCAwPT09bj90aGlzLnNldCh0KTp0aGlzLnNldFJHQih0LGUsbil9c2V0KHQpe3JldHVybiB0JiZ0LmlzQ29sb3I/dGhpcy5jb3B5KHQpOiJudW1iZXIiPT10eXBlb2YgdD90aGlzLnNldEhleCh0KToic3RyaW5nIj09dHlwZW9mIHQmJnRoaXMuc2V0U3R5bGUodCksdGhpc31zZXRTY2FsYXIodCl7cmV0dXJuIHRoaXMucj10LHRoaXMuZz10LHRoaXMuYj10LHRoaXN9c2V0SGV4KHQpe3JldHVybiB0PU1hdGguZmxvb3IodCksdGhpcy5yPSh0Pj4xNiYyNTUpLzI1NSx0aGlzLmc9KHQ+PjgmMjU1KS8yNTUsdGhpcy5iPSgyNTUmdCkvMjU1LHRoaXN9c2V0UkdCKHQsZSxuKXtyZXR1cm4gdGhpcy5yPXQsdGhpcy5nPWUsdGhpcy5iPW4sdGhpc31zZXRIU0wodCxlLG4pe2lmKHQ9Uk90LmV1Y2xpZGVhbk1vZHVsbyh0LDEpLGU9Uk90LmNsYW1wKGUsMCwxKSxuPVJPdC5jbGFtcChuLDAsMSksMD09PWUpdGhpcy5yPXRoaXMuZz10aGlzLmI9bjtlbHNle2NvbnN0IGk9bjw9LjU/biooMStlKTpuK2UtbiplLHI9MipuLWk7dGhpcy5yPXV6dChyLGksdCsxLzMpLHRoaXMuZz11enQocixpLHQpLHRoaXMuYj11enQocixpLHQtMS8zKX1yZXR1cm4gdGhpc31zZXRTdHlsZSh0KXtmdW5jdGlvbiBlKGUpe3ZvaWQgMCE9PWUmJnBhcnNlRmxvYXQoZSk8MSYmY29uc29sZS53YXJuKCJUSFJFRS5Db2xvcjogQWxwaGEgY29tcG9uZW50IG9mICIrdCsiIHdpbGwgYmUgaWdub3JlZC4iKX1sZXQgbjtpZihuPS9eKCg/OnJnYnxoc2wpYT8pXCgoW15cKV0qKVwpLy5leGVjKHQpKXtsZXQgdDtjb25zdCBpPW5bMl07c3dpdGNoKG5bMV0pe2Nhc2UicmdiIjpjYXNlInJnYmEiOmlmKHQ9L15ccyooXGQrKVxzKixccyooXGQrKVxzKixccyooXGQrKVxzKig/OixccyooXGQqXC4/XGQrKVxzKik/JC8uZXhlYyhpKSlyZXR1cm4gdGhpcy5yPU1hdGgubWluKDI1NSxwYXJzZUludCh0WzFdLDEwKSkvMjU1LHRoaXMuZz1NYXRoLm1pbigyNTUscGFyc2VJbnQodFsyXSwxMCkpLzI1NSx0aGlzLmI9TWF0aC5taW4oMjU1LHBhcnNlSW50KHRbM10sMTApKS8yNTUsZSh0WzRdKSx0aGlzO2lmKHQ9L15ccyooXGQrKVwlXHMqLFxzKihcZCspXCVccyosXHMqKFxkKylcJVxzKig/OixccyooXGQqXC4/XGQrKVxzKik/JC8uZXhlYyhpKSlyZXR1cm4gdGhpcy5yPU1hdGgubWluKDEwMCxwYXJzZUludCh0WzFdLDEwKSkvMTAwLHRoaXMuZz1NYXRoLm1pbigxMDAscGFyc2VJbnQodFsyXSwxMCkpLzEwMCx0aGlzLmI9TWF0aC5taW4oMTAwLHBhcnNlSW50KHRbM10sMTApKS8xMDAsZSh0WzRdKSx0aGlzO2JyZWFrO2Nhc2UiaHNsIjpjYXNlImhzbGEiOmlmKHQ9L15ccyooXGQqXC4/XGQrKVxzKixccyooXGQrKVwlXHMqLFxzKihcZCspXCVccyooPzosXHMqKFxkKlwuP1xkKylccyopPyQvLmV4ZWMoaSkpe2NvbnN0IG49cGFyc2VGbG9hdCh0WzFdKS8zNjAsaT1wYXJzZUludCh0WzJdLDEwKS8xMDAscj1wYXJzZUludCh0WzNdLDEwKS8xMDA7cmV0dXJuIGUodFs0XSksdGhpcy5zZXRIU0wobixpLHIpfX19ZWxzZSBpZihuPS9eXCMoW0EtRmEtZlxkXSspJC8uZXhlYyh0KSl7Y29uc3QgdD1uWzFdLGU9dC5sZW5ndGg7aWYoMz09PWUpcmV0dXJuIHRoaXMucj1wYXJzZUludCh0LmNoYXJBdCgwKSt0LmNoYXJBdCgwKSwxNikvMjU1LHRoaXMuZz1wYXJzZUludCh0LmNoYXJBdCgxKSt0LmNoYXJBdCgxKSwxNikvMjU1LHRoaXMuYj1wYXJzZUludCh0LmNoYXJBdCgyKSt0LmNoYXJBdCgyKSwxNikvMjU1LHRoaXM7aWYoNj09PWUpcmV0dXJuIHRoaXMucj1wYXJzZUludCh0LmNoYXJBdCgwKSt0LmNoYXJBdCgxKSwxNikvMjU1LHRoaXMuZz1wYXJzZUludCh0LmNoYXJBdCgyKSt0LmNoYXJBdCgzKSwxNikvMjU1LHRoaXMuYj1wYXJzZUludCh0LmNoYXJBdCg0KSt0LmNoYXJBdCg1KSwxNikvMjU1LHRoaXN9cmV0dXJuIHQmJnQubGVuZ3RoPjA/dGhpcy5zZXRDb2xvck5hbWUodCk6dGhpc31zZXRDb2xvck5hbWUodCl7Y29uc3QgZT1zenRbdF07cmV0dXJuIHZvaWQgMCE9PWU/dGhpcy5zZXRIZXgoZSk6Y29uc29sZS53YXJuKCJUSFJFRS5Db2xvcjogVW5rbm93biBjb2xvciAiK3QpLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5yLHRoaXMuZyx0aGlzLmIpfWNvcHkodCl7cmV0dXJuIHRoaXMucj10LnIsdGhpcy5nPXQuZyx0aGlzLmI9dC5iLHRoaXN9Y29weUdhbW1hVG9MaW5lYXIodCxlPTIpe3JldHVybiB0aGlzLnI9TWF0aC5wb3codC5yLGUpLHRoaXMuZz1NYXRoLnBvdyh0LmcsZSksdGhpcy5iPU1hdGgucG93KHQuYixlKSx0aGlzfWNvcHlMaW5lYXJUb0dhbW1hKHQsZT0yKXtjb25zdCBuPWU+MD8xL2U6MTtyZXR1cm4gdGhpcy5yPU1hdGgucG93KHQucixuKSx0aGlzLmc9TWF0aC5wb3codC5nLG4pLHRoaXMuYj1NYXRoLnBvdyh0LmIsbiksdGhpc31jb252ZXJ0R2FtbWFUb0xpbmVhcih0KXtyZXR1cm4gdGhpcy5jb3B5R2FtbWFUb0xpbmVhcih0aGlzLHQpLHRoaXN9Y29udmVydExpbmVhclRvR2FtbWEodCl7cmV0dXJuIHRoaXMuY29weUxpbmVhclRvR2FtbWEodGhpcyx0KSx0aGlzfWNvcHlTUkdCVG9MaW5lYXIodCl7cmV0dXJuIHRoaXMucj1oenQodC5yKSx0aGlzLmc9aHp0KHQuZyksdGhpcy5iPWh6dCh0LmIpLHRoaXN9Y29weUxpbmVhclRvU1JHQih0KXtyZXR1cm4gdGhpcy5yPWR6dCh0LnIpLHRoaXMuZz1kenQodC5nKSx0aGlzLmI9ZHp0KHQuYiksdGhpc31jb252ZXJ0U1JHQlRvTGluZWFyKCl7cmV0dXJuIHRoaXMuY29weVNSR0JUb0xpbmVhcih0aGlzKSx0aGlzfWNvbnZlcnRMaW5lYXJUb1NSR0IoKXtyZXR1cm4gdGhpcy5jb3B5TGluZWFyVG9TUkdCKHRoaXMpLHRoaXN9Z2V0SGV4KCl7cmV0dXJuIDI1NSp0aGlzLnI8PDE2XjI1NSp0aGlzLmc8PDheMjU1KnRoaXMuYjw8MH1nZXRIZXhTdHJpbmcoKXtyZXR1cm4oIjAwMDAwMCIrdGhpcy5nZXRIZXgoKS50b1N0cmluZygxNikpLnNsaWNlKC02KX1nZXRIU0wodCl7dm9pZCAwPT09dCYmKGNvbnNvbGUud2FybigiVEhSRUUuQ29sb3I6IC5nZXRIU0woKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIiksdD17aDowLHM6MCxsOjB9KTtjb25zdCBlPXRoaXMucixuPXRoaXMuZyxpPXRoaXMuYixyPU1hdGgubWF4KGUsbixpKSxvPU1hdGgubWluKGUsbixpKTtsZXQgYSxzO2NvbnN0IGw9KG8rcikvMjtpZihvPT09cilhPTAscz0wO2Vsc2V7Y29uc3QgdD1yLW87c3dpdGNoKHM9bDw9LjU/dC8ocitvKTp0LygyLXItbykscil7Y2FzZSBlOmE9KG4taSkvdCsobjxpPzY6MCk7YnJlYWs7Y2FzZSBuOmE9KGktZSkvdCsyO2JyZWFrO2Nhc2UgaTphPShlLW4pL3QrNH1hLz02fXJldHVybiB0Lmg9YSx0LnM9cyx0Lmw9bCx0fWdldFN0eWxlKCl7cmV0dXJuInJnYigiKygyNTUqdGhpcy5yfDApKyIsIisoMjU1KnRoaXMuZ3wwKSsiLCIrKDI1NSp0aGlzLmJ8MCkrIikifW9mZnNldEhTTCh0LGUsbil7cmV0dXJuIHRoaXMuZ2V0SFNMKGx6dCksbHp0LmgrPXQsbHp0LnMrPWUsbHp0LmwrPW4sdGhpcy5zZXRIU0wobHp0LmgsbHp0LnMsbHp0LmwpLHRoaXN9YWRkKHQpe3JldHVybiB0aGlzLnIrPXQucix0aGlzLmcrPXQuZyx0aGlzLmIrPXQuYix0aGlzfWFkZENvbG9ycyh0LGUpe3JldHVybiB0aGlzLnI9dC5yK2Uucix0aGlzLmc9dC5nK2UuZyx0aGlzLmI9dC5iK2UuYix0aGlzfWFkZFNjYWxhcih0KXtyZXR1cm4gdGhpcy5yKz10LHRoaXMuZys9dCx0aGlzLmIrPXQsdGhpc31zdWIodCl7cmV0dXJuIHRoaXMucj1NYXRoLm1heCgwLHRoaXMuci10LnIpLHRoaXMuZz1NYXRoLm1heCgwLHRoaXMuZy10LmcpLHRoaXMuYj1NYXRoLm1heCgwLHRoaXMuYi10LmIpLHRoaXN9bXVsdGlwbHkodCl7cmV0dXJuIHRoaXMucio9dC5yLHRoaXMuZyo9dC5nLHRoaXMuYio9dC5iLHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7cmV0dXJuIHRoaXMucio9dCx0aGlzLmcqPXQsdGhpcy5iKj10LHRoaXN9bGVycCh0LGUpe3JldHVybiB0aGlzLnIrPSh0LnItdGhpcy5yKSplLHRoaXMuZys9KHQuZy10aGlzLmcpKmUsdGhpcy5iKz0odC5iLXRoaXMuYikqZSx0aGlzfWxlcnBDb2xvcnModCxlLG4pe3JldHVybiB0aGlzLnI9dC5yKyhlLnItdC5yKSpuLHRoaXMuZz10LmcrKGUuZy10LmcpKm4sdGhpcy5iPXQuYisoZS5iLXQuYikqbix0aGlzfWxlcnBIU0wodCxlKXt0aGlzLmdldEhTTChsenQpLHQuZ2V0SFNMKGN6dCk7Y29uc3Qgbj1ST3QubGVycChsenQuaCxjenQuaCxlKSxpPVJPdC5sZXJwKGx6dC5zLGN6dC5zLGUpLHI9Uk90LmxlcnAobHp0LmwsY3p0LmwsZSk7cmV0dXJuIHRoaXMuc2V0SFNMKG4saSxyKSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5yPT09dGhpcy5yJiZ0Lmc9PT10aGlzLmcmJnQuYj09PXRoaXMuYn1mcm9tQXJyYXkodCxlPTApe3JldHVybiB0aGlzLnI9dFtlXSx0aGlzLmc9dFtlKzFdLHRoaXMuYj10W2UrMl0sdGhpc310b0FycmF5KHQ9W10sZT0wKXtyZXR1cm4gdFtlXT10aGlzLnIsdFtlKzFdPXRoaXMuZyx0W2UrMl09dGhpcy5iLHR9ZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUpe3JldHVybiB0aGlzLnI9dC5nZXRYKGUpLHRoaXMuZz10LmdldFkoZSksdGhpcy5iPXQuZ2V0WihlKSwhMD09PXQubm9ybWFsaXplZCYmKHRoaXMuci89MjU1LHRoaXMuZy89MjU1LHRoaXMuYi89MjU1KSx0aGlzfXRvSlNPTigpe3JldHVybiB0aGlzLmdldEhleCgpfX1wenQuTkFNRVM9c3p0LHB6dC5wcm90b3R5cGUucj0xLHB6dC5wcm90b3R5cGUuZz0xLHB6dC5wcm90b3R5cGUuYj0xO2NsYXNzIGZ6dHtjb25zdHJ1Y3Rvcih0LGUsbixpLHIsbz0wKXt0aGlzLmE9dCx0aGlzLmI9ZSx0aGlzLmM9bix0aGlzLm5vcm1hbD1pJiZpLmlzVmVjdG9yMz9pOm5ldyBxT3QsdGhpcy52ZXJ0ZXhOb3JtYWxzPUFycmF5LmlzQXJyYXkoaSk/aTpbXSx0aGlzLmNvbG9yPXImJnIuaXNDb2xvcj9yOm5ldyBwenQsdGhpcy52ZXJ0ZXhDb2xvcnM9QXJyYXkuaXNBcnJheShyKT9yOltdLHRoaXMubWF0ZXJpYWxJbmRleD1vfWNsb25lKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfWNvcHkodCl7dGhpcy5hPXQuYSx0aGlzLmI9dC5iLHRoaXMuYz10LmMsdGhpcy5ub3JtYWwuY29weSh0Lm5vcm1hbCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubWF0ZXJpYWxJbmRleD10Lm1hdGVyaWFsSW5kZXg7Zm9yKGxldCBlPTAsbj10LnZlcnRleE5vcm1hbHMubGVuZ3RoO2U8bjtlKyspdGhpcy52ZXJ0ZXhOb3JtYWxzW2VdPXQudmVydGV4Tm9ybWFsc1tlXS5jbG9uZSgpO2ZvcihsZXQgZT0wLG49dC52ZXJ0ZXhDb2xvcnMubGVuZ3RoO2U8bjtlKyspdGhpcy52ZXJ0ZXhDb2xvcnNbZV09dC52ZXJ0ZXhDb2xvcnNbZV0uY2xvbmUoKTtyZXR1cm4gdGhpc319bGV0IG16dD0wO2Z1bmN0aW9uIGd6dCgpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpZCIse3ZhbHVlOm16dCsrfSksdGhpcy51dWlkPVJPdC5nZW5lcmF0ZVVVSUQoKSx0aGlzLm5hbWU9IiIsdGhpcy50eXBlPSJNYXRlcmlhbCIsdGhpcy5mb2c9ITAsdGhpcy5ibGVuZGluZz0xLHRoaXMuc2lkZT0wLHRoaXMuZmxhdFNoYWRpbmc9ITEsdGhpcy52ZXJ0ZXhDb2xvcnM9ITEsdGhpcy5vcGFjaXR5PTEsdGhpcy50cmFuc3BhcmVudD0hMSx0aGlzLmJsZW5kU3JjPTIwNCx0aGlzLmJsZW5kRHN0PTIwNSx0aGlzLmJsZW5kRXF1YXRpb249TEl0LHRoaXMuYmxlbmRTcmNBbHBoYT1udWxsLHRoaXMuYmxlbmREc3RBbHBoYT1udWxsLHRoaXMuYmxlbmRFcXVhdGlvbkFscGhhPW51bGwsdGhpcy5kZXB0aEZ1bmM9Myx0aGlzLmRlcHRoVGVzdD0hMCx0aGlzLmRlcHRoV3JpdGU9ITAsdGhpcy5zdGVuY2lsV3JpdGVNYXNrPTI1NSx0aGlzLnN0ZW5jaWxGdW5jPTUxOSx0aGlzLnN0ZW5jaWxSZWY9MCx0aGlzLnN0ZW5jaWxGdW5jTWFzaz0yNTUsdGhpcy5zdGVuY2lsRmFpbD1BT3QsdGhpcy5zdGVuY2lsWkZhaWw9QU90LHRoaXMuc3RlbmNpbFpQYXNzPUFPdCx0aGlzLnN0ZW5jaWxXcml0ZT0hMSx0aGlzLmNsaXBwaW5nUGxhbmVzPW51bGwsdGhpcy5jbGlwSW50ZXJzZWN0aW9uPSExLHRoaXMuY2xpcFNoYWRvd3M9ITEsdGhpcy5zaGFkb3dTaWRlPW51bGwsdGhpcy5jb2xvcldyaXRlPSEwLHRoaXMucHJlY2lzaW9uPW51bGwsdGhpcy5wb2x5Z29uT2Zmc2V0PSExLHRoaXMucG9seWdvbk9mZnNldEZhY3Rvcj0wLHRoaXMucG9seWdvbk9mZnNldFVuaXRzPTAsdGhpcy5kaXRoZXJpbmc9ITEsdGhpcy5hbHBoYVRlc3Q9MCx0aGlzLnByZW11bHRpcGxpZWRBbHBoYT0hMSx0aGlzLnZpc2libGU9ITAsdGhpcy50b25lTWFwcGVkPSEwLHRoaXMudXNlckRhdGE9e30sdGhpcy52ZXJzaW9uPTB9ZnVuY3Rpb24gX3p0KHQpe2d6dC5jYWxsKHRoaXMpLHRoaXMudHlwZT0iTWVzaEJhc2ljTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IHB6dCgxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmxpZ2h0TWFwPW51bGwsdGhpcy5saWdodE1hcEludGVuc2l0eT0xLHRoaXMuYW9NYXA9bnVsbCx0aGlzLmFvTWFwSW50ZW5zaXR5PTEsdGhpcy5zcGVjdWxhck1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmVudk1hcD1udWxsLHRoaXMuY29tYmluZT0wLHRoaXMucmVmbGVjdGl2aXR5PTEsdGhpcy5yZWZyYWN0aW9uUmF0aW89Ljk4LHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy53aXJlZnJhbWVMaW5lY2FwPSJyb3VuZCIsdGhpcy53aXJlZnJhbWVMaW5lam9pbj0icm91bmQiLHRoaXMuc2tpbm5pbmc9ITEsdGhpcy5tb3JwaFRhcmdldHM9ITEsdGhpcy5zZXRWYWx1ZXModCl9Z3p0LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoTk90LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOmd6dCxpc01hdGVyaWFsOiEwLG9uQmVmb3JlQ29tcGlsZTpmdW5jdGlvbigpe30sY3VzdG9tUHJvZ3JhbUNhY2hlS2V5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub25CZWZvcmVDb21waWxlLnRvU3RyaW5nKCl9LHNldFZhbHVlczpmdW5jdGlvbih0KXtpZih2b2lkIDAhPT10KWZvcihjb25zdCBlIGluIHQpe2NvbnN0IG49dFtlXTtpZih2b2lkIDA9PT1uKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAnIitlKyInIHBhcmFtZXRlciBpcyB1bmRlZmluZWQuIik7Y29udGludWV9aWYoInNoYWRpbmciPT09ZSl7Y29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAuc2hhZGluZyBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdGhlIGJvb2xlYW4gLmZsYXRTaGFkaW5nIGluc3RlYWQuIiksdGhpcy5mbGF0U2hhZGluZz0xPT09bjtjb250aW51ZX1jb25zdCBpPXRoaXNbZV07dm9pZCAwIT09aT9pJiZpLmlzQ29sb3I/aS5zZXQobik6aSYmaS5pc1ZlY3RvcjMmJm4mJm4uaXNWZWN0b3IzP2kuY29weShuKTp0aGlzW2VdPW46Y29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAnIitlKyInIGlzIG5vdCBhIHByb3BlcnR5IG9mIHRoaXMgbWF0ZXJpYWwuIil9fSx0b0pTT046ZnVuY3Rpb24odCl7Y29uc3QgZT12b2lkIDA9PT10fHwic3RyaW5nIj09dHlwZW9mIHQ7ZSYmKHQ9e3RleHR1cmVzOnt9LGltYWdlczp7fX0pO2NvbnN0IG49e21ldGFkYXRhOnt2ZXJzaW9uOjQuNSx0eXBlOiJNYXRlcmlhbCIsZ2VuZXJhdG9yOiJNYXRlcmlhbC50b0pTT04ifX07ZnVuY3Rpb24gaSh0KXtjb25zdCBlPVtdO2Zvcihjb25zdCBuIGluIHQpe2NvbnN0IGk9dFtuXTtkZWxldGUgaS5tZXRhZGF0YSxlLnB1c2goaSl9cmV0dXJuIGV9aWYobi51dWlkPXRoaXMudXVpZCxuLnR5cGU9dGhpcy50eXBlLCIiIT09dGhpcy5uYW1lJiYobi5uYW1lPXRoaXMubmFtZSksdGhpcy5jb2xvciYmdGhpcy5jb2xvci5pc0NvbG9yJiYobi5jb2xvcj10aGlzLmNvbG9yLmdldEhleCgpKSx2b2lkIDAhPT10aGlzLnJvdWdobmVzcyYmKG4ucm91Z2huZXNzPXRoaXMucm91Z2huZXNzKSx2b2lkIDAhPT10aGlzLm1ldGFsbmVzcyYmKG4ubWV0YWxuZXNzPXRoaXMubWV0YWxuZXNzKSx0aGlzLnNoZWVuJiZ0aGlzLnNoZWVuLmlzQ29sb3ImJihuLnNoZWVuPXRoaXMuc2hlZW4uZ2V0SGV4KCkpLHRoaXMuZW1pc3NpdmUmJnRoaXMuZW1pc3NpdmUuaXNDb2xvciYmKG4uZW1pc3NpdmU9dGhpcy5lbWlzc2l2ZS5nZXRIZXgoKSksdGhpcy5lbWlzc2l2ZUludGVuc2l0eSYmMSE9PXRoaXMuZW1pc3NpdmVJbnRlbnNpdHkmJihuLmVtaXNzaXZlSW50ZW5zaXR5PXRoaXMuZW1pc3NpdmVJbnRlbnNpdHkpLHRoaXMuc3BlY3VsYXImJnRoaXMuc3BlY3VsYXIuaXNDb2xvciYmKG4uc3BlY3VsYXI9dGhpcy5zcGVjdWxhci5nZXRIZXgoKSksdm9pZCAwIT09dGhpcy5zaGluaW5lc3MmJihuLnNoaW5pbmVzcz10aGlzLnNoaW5pbmVzcyksdm9pZCAwIT09dGhpcy5jbGVhcmNvYXQmJihuLmNsZWFyY29hdD10aGlzLmNsZWFyY29hdCksdm9pZCAwIT09dGhpcy5jbGVhcmNvYXRSb3VnaG5lc3MmJihuLmNsZWFyY29hdFJvdWdobmVzcz10aGlzLmNsZWFyY29hdFJvdWdobmVzcyksdGhpcy5jbGVhcmNvYXRNYXAmJnRoaXMuY2xlYXJjb2F0TWFwLmlzVGV4dHVyZSYmKG4uY2xlYXJjb2F0TWFwPXRoaXMuY2xlYXJjb2F0TWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcCYmdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3NNYXAuaXNUZXh0dXJlJiYobi5jbGVhcmNvYXRSb3VnaG5lc3NNYXA9dGhpcy5jbGVhcmNvYXRSb3VnaG5lc3NNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuY2xlYXJjb2F0Tm9ybWFsTWFwJiZ0aGlzLmNsZWFyY29hdE5vcm1hbE1hcC5pc1RleHR1cmUmJihuLmNsZWFyY29hdE5vcm1hbE1hcD10aGlzLmNsZWFyY29hdE5vcm1hbE1hcC50b0pTT04odCkudXVpZCxuLmNsZWFyY29hdE5vcm1hbFNjYWxlPXRoaXMuY2xlYXJjb2F0Tm9ybWFsU2NhbGUudG9BcnJheSgpKSx0aGlzLm1hcCYmdGhpcy5tYXAuaXNUZXh0dXJlJiYobi5tYXA9dGhpcy5tYXAudG9KU09OKHQpLnV1aWQpLHRoaXMubWF0Y2FwJiZ0aGlzLm1hdGNhcC5pc1RleHR1cmUmJihuLm1hdGNhcD10aGlzLm1hdGNhcC50b0pTT04odCkudXVpZCksdGhpcy5hbHBoYU1hcCYmdGhpcy5hbHBoYU1hcC5pc1RleHR1cmUmJihuLmFscGhhTWFwPXRoaXMuYWxwaGFNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMubGlnaHRNYXAmJnRoaXMubGlnaHRNYXAuaXNUZXh0dXJlJiYobi5saWdodE1hcD10aGlzLmxpZ2h0TWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmFvTWFwJiZ0aGlzLmFvTWFwLmlzVGV4dHVyZSYmKG4uYW9NYXA9dGhpcy5hb01hcC50b0pTT04odCkudXVpZCxuLmFvTWFwSW50ZW5zaXR5PXRoaXMuYW9NYXBJbnRlbnNpdHkpLHRoaXMuYnVtcE1hcCYmdGhpcy5idW1wTWFwLmlzVGV4dHVyZSYmKG4uYnVtcE1hcD10aGlzLmJ1bXBNYXAudG9KU09OKHQpLnV1aWQsbi5idW1wU2NhbGU9dGhpcy5idW1wU2NhbGUpLHRoaXMubm9ybWFsTWFwJiZ0aGlzLm5vcm1hbE1hcC5pc1RleHR1cmUmJihuLm5vcm1hbE1hcD10aGlzLm5vcm1hbE1hcC50b0pTT04odCkudXVpZCxuLm5vcm1hbE1hcFR5cGU9dGhpcy5ub3JtYWxNYXBUeXBlLG4ubm9ybWFsU2NhbGU9dGhpcy5ub3JtYWxTY2FsZS50b0FycmF5KCkpLHRoaXMuZGlzcGxhY2VtZW50TWFwJiZ0aGlzLmRpc3BsYWNlbWVudE1hcC5pc1RleHR1cmUmJihuLmRpc3BsYWNlbWVudE1hcD10aGlzLmRpc3BsYWNlbWVudE1hcC50b0pTT04odCkudXVpZCxuLmRpc3BsYWNlbWVudFNjYWxlPXRoaXMuZGlzcGxhY2VtZW50U2NhbGUsbi5kaXNwbGFjZW1lbnRCaWFzPXRoaXMuZGlzcGxhY2VtZW50QmlhcyksdGhpcy5yb3VnaG5lc3NNYXAmJnRoaXMucm91Z2huZXNzTWFwLmlzVGV4dHVyZSYmKG4ucm91Z2huZXNzTWFwPXRoaXMucm91Z2huZXNzTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLm1ldGFsbmVzc01hcCYmdGhpcy5tZXRhbG5lc3NNYXAuaXNUZXh0dXJlJiYobi5tZXRhbG5lc3NNYXA9dGhpcy5tZXRhbG5lc3NNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuZW1pc3NpdmVNYXAmJnRoaXMuZW1pc3NpdmVNYXAuaXNUZXh0dXJlJiYobi5lbWlzc2l2ZU1hcD10aGlzLmVtaXNzaXZlTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLnNwZWN1bGFyTWFwJiZ0aGlzLnNwZWN1bGFyTWFwLmlzVGV4dHVyZSYmKG4uc3BlY3VsYXJNYXA9dGhpcy5zcGVjdWxhck1hcC50b0pTT04odCkudXVpZCksdGhpcy5lbnZNYXAmJnRoaXMuZW52TWFwLmlzVGV4dHVyZSYmKG4uZW52TWFwPXRoaXMuZW52TWFwLnRvSlNPTih0KS51dWlkLG4ucmVmbGVjdGl2aXR5PXRoaXMucmVmbGVjdGl2aXR5LG4ucmVmcmFjdGlvblJhdGlvPXRoaXMucmVmcmFjdGlvblJhdGlvLHZvaWQgMCE9PXRoaXMuY29tYmluZSYmKG4uY29tYmluZT10aGlzLmNvbWJpbmUpLHZvaWQgMCE9PXRoaXMuZW52TWFwSW50ZW5zaXR5JiYobi5lbnZNYXBJbnRlbnNpdHk9dGhpcy5lbnZNYXBJbnRlbnNpdHkpKSx0aGlzLmdyYWRpZW50TWFwJiZ0aGlzLmdyYWRpZW50TWFwLmlzVGV4dHVyZSYmKG4uZ3JhZGllbnRNYXA9dGhpcy5ncmFkaWVudE1hcC50b0pTT04odCkudXVpZCksdm9pZCAwIT09dGhpcy5zaXplJiYobi5zaXplPXRoaXMuc2l6ZSksdm9pZCAwIT09dGhpcy5zaXplQXR0ZW51YXRpb24mJihuLnNpemVBdHRlbnVhdGlvbj10aGlzLnNpemVBdHRlbnVhdGlvbiksMSE9PXRoaXMuYmxlbmRpbmcmJihuLmJsZW5kaW5nPXRoaXMuYmxlbmRpbmcpLCEwPT09dGhpcy5mbGF0U2hhZGluZyYmKG4uZmxhdFNoYWRpbmc9dGhpcy5mbGF0U2hhZGluZyksMCE9PXRoaXMuc2lkZSYmKG4uc2lkZT10aGlzLnNpZGUpLHRoaXMudmVydGV4Q29sb3JzJiYobi52ZXJ0ZXhDb2xvcnM9ITApLHRoaXMub3BhY2l0eTwxJiYobi5vcGFjaXR5PXRoaXMub3BhY2l0eSksITA9PT10aGlzLnRyYW5zcGFyZW50JiYobi50cmFuc3BhcmVudD10aGlzLnRyYW5zcGFyZW50KSxuLmRlcHRoRnVuYz10aGlzLmRlcHRoRnVuYyxuLmRlcHRoVGVzdD10aGlzLmRlcHRoVGVzdCxuLmRlcHRoV3JpdGU9dGhpcy5kZXB0aFdyaXRlLG4uc3RlbmNpbFdyaXRlPXRoaXMuc3RlbmNpbFdyaXRlLG4uc3RlbmNpbFdyaXRlTWFzaz10aGlzLnN0ZW5jaWxXcml0ZU1hc2ssbi5zdGVuY2lsRnVuYz10aGlzLnN0ZW5jaWxGdW5jLG4uc3RlbmNpbFJlZj10aGlzLnN0ZW5jaWxSZWYsbi5zdGVuY2lsRnVuY01hc2s9dGhpcy5zdGVuY2lsRnVuY01hc2ssbi5zdGVuY2lsRmFpbD10aGlzLnN0ZW5jaWxGYWlsLG4uc3RlbmNpbFpGYWlsPXRoaXMuc3RlbmNpbFpGYWlsLG4uc3RlbmNpbFpQYXNzPXRoaXMuc3RlbmNpbFpQYXNzLHRoaXMucm90YXRpb24mJjAhPT10aGlzLnJvdGF0aW9uJiYobi5yb3RhdGlvbj10aGlzLnJvdGF0aW9uKSwhMD09PXRoaXMucG9seWdvbk9mZnNldCYmKG4ucG9seWdvbk9mZnNldD0hMCksMCE9PXRoaXMucG9seWdvbk9mZnNldEZhY3RvciYmKG4ucG9seWdvbk9mZnNldEZhY3Rvcj10aGlzLnBvbHlnb25PZmZzZXRGYWN0b3IpLDAhPT10aGlzLnBvbHlnb25PZmZzZXRVbml0cyYmKG4ucG9seWdvbk9mZnNldFVuaXRzPXRoaXMucG9seWdvbk9mZnNldFVuaXRzKSx0aGlzLmxpbmV3aWR0aCYmMSE9PXRoaXMubGluZXdpZHRoJiYobi5saW5ld2lkdGg9dGhpcy5saW5ld2lkdGgpLHZvaWQgMCE9PXRoaXMuZGFzaFNpemUmJihuLmRhc2hTaXplPXRoaXMuZGFzaFNpemUpLHZvaWQgMCE9PXRoaXMuZ2FwU2l6ZSYmKG4uZ2FwU2l6ZT10aGlzLmdhcFNpemUpLHZvaWQgMCE9PXRoaXMuc2NhbGUmJihuLnNjYWxlPXRoaXMuc2NhbGUpLCEwPT09dGhpcy5kaXRoZXJpbmcmJihuLmRpdGhlcmluZz0hMCksdGhpcy5hbHBoYVRlc3Q+MCYmKG4uYWxwaGFUZXN0PXRoaXMuYWxwaGFUZXN0KSwhMD09PXRoaXMucHJlbXVsdGlwbGllZEFscGhhJiYobi5wcmVtdWx0aXBsaWVkQWxwaGE9dGhpcy5wcmVtdWx0aXBsaWVkQWxwaGEpLCEwPT09dGhpcy53aXJlZnJhbWUmJihuLndpcmVmcmFtZT10aGlzLndpcmVmcmFtZSksdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg+MSYmKG4ud2lyZWZyYW1lTGluZXdpZHRoPXRoaXMud2lyZWZyYW1lTGluZXdpZHRoKSwicm91bmQiIT09dGhpcy53aXJlZnJhbWVMaW5lY2FwJiYobi53aXJlZnJhbWVMaW5lY2FwPXRoaXMud2lyZWZyYW1lTGluZWNhcCksInJvdW5kIiE9PXRoaXMud2lyZWZyYW1lTGluZWpvaW4mJihuLndpcmVmcmFtZUxpbmVqb2luPXRoaXMud2lyZWZyYW1lTGluZWpvaW4pLCEwPT09dGhpcy5tb3JwaFRhcmdldHMmJihuLm1vcnBoVGFyZ2V0cz0hMCksITA9PT10aGlzLm1vcnBoTm9ybWFscyYmKG4ubW9ycGhOb3JtYWxzPSEwKSwhMD09PXRoaXMuc2tpbm5pbmcmJihuLnNraW5uaW5nPSEwKSwhMT09PXRoaXMudmlzaWJsZSYmKG4udmlzaWJsZT0hMSksITE9PT10aGlzLnRvbmVNYXBwZWQmJihuLnRvbmVNYXBwZWQ9ITEpLCJ7fSIhPT1KU09OLnN0cmluZ2lmeSh0aGlzLnVzZXJEYXRhKSYmKG4udXNlckRhdGE9dGhpcy51c2VyRGF0YSksZSl7Y29uc3QgZT1pKHQudGV4dHVyZXMpLHI9aSh0LmltYWdlcyk7ZS5sZW5ndGg+MCYmKG4udGV4dHVyZXM9ZSksci5sZW5ndGg+MCYmKG4uaW1hZ2VzPXIpfXJldHVybiBufSxjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX0sY29weTpmdW5jdGlvbih0KXt0aGlzLm5hbWU9dC5uYW1lLHRoaXMuZm9nPXQuZm9nLHRoaXMuYmxlbmRpbmc9dC5ibGVuZGluZyx0aGlzLnNpZGU9dC5zaWRlLHRoaXMuZmxhdFNoYWRpbmc9dC5mbGF0U2hhZGluZyx0aGlzLnZlcnRleENvbG9ycz10LnZlcnRleENvbG9ycyx0aGlzLm9wYWNpdHk9dC5vcGFjaXR5LHRoaXMudHJhbnNwYXJlbnQ9dC50cmFuc3BhcmVudCx0aGlzLmJsZW5kU3JjPXQuYmxlbmRTcmMsdGhpcy5ibGVuZERzdD10LmJsZW5kRHN0LHRoaXMuYmxlbmRFcXVhdGlvbj10LmJsZW5kRXF1YXRpb24sdGhpcy5ibGVuZFNyY0FscGhhPXQuYmxlbmRTcmNBbHBoYSx0aGlzLmJsZW5kRHN0QWxwaGE9dC5ibGVuZERzdEFscGhhLHRoaXMuYmxlbmRFcXVhdGlvbkFscGhhPXQuYmxlbmRFcXVhdGlvbkFscGhhLHRoaXMuZGVwdGhGdW5jPXQuZGVwdGhGdW5jLHRoaXMuZGVwdGhUZXN0PXQuZGVwdGhUZXN0LHRoaXMuZGVwdGhXcml0ZT10LmRlcHRoV3JpdGUsdGhpcy5zdGVuY2lsV3JpdGVNYXNrPXQuc3RlbmNpbFdyaXRlTWFzayx0aGlzLnN0ZW5jaWxGdW5jPXQuc3RlbmNpbEZ1bmMsdGhpcy5zdGVuY2lsUmVmPXQuc3RlbmNpbFJlZix0aGlzLnN0ZW5jaWxGdW5jTWFzaz10LnN0ZW5jaWxGdW5jTWFzayx0aGlzLnN0ZW5jaWxGYWlsPXQuc3RlbmNpbEZhaWwsdGhpcy5zdGVuY2lsWkZhaWw9dC5zdGVuY2lsWkZhaWwsdGhpcy5zdGVuY2lsWlBhc3M9dC5zdGVuY2lsWlBhc3MsdGhpcy5zdGVuY2lsV3JpdGU9dC5zdGVuY2lsV3JpdGU7Y29uc3QgZT10LmNsaXBwaW5nUGxhbmVzO2xldCBuPW51bGw7aWYobnVsbCE9PWUpe2NvbnN0IHQ9ZS5sZW5ndGg7bj1uZXcgQXJyYXkodCk7Zm9yKGxldCBpPTA7aSE9PXQ7KytpKW5baV09ZVtpXS5jbG9uZSgpfXJldHVybiB0aGlzLmNsaXBwaW5nUGxhbmVzPW4sdGhpcy5jbGlwSW50ZXJzZWN0aW9uPXQuY2xpcEludGVyc2VjdGlvbix0aGlzLmNsaXBTaGFkb3dzPXQuY2xpcFNoYWRvd3MsdGhpcy5zaGFkb3dTaWRlPXQuc2hhZG93U2lkZSx0aGlzLmNvbG9yV3JpdGU9dC5jb2xvcldyaXRlLHRoaXMucHJlY2lzaW9uPXQucHJlY2lzaW9uLHRoaXMucG9seWdvbk9mZnNldD10LnBvbHlnb25PZmZzZXQsdGhpcy5wb2x5Z29uT2Zmc2V0RmFjdG9yPXQucG9seWdvbk9mZnNldEZhY3Rvcix0aGlzLnBvbHlnb25PZmZzZXRVbml0cz10LnBvbHlnb25PZmZzZXRVbml0cyx0aGlzLmRpdGhlcmluZz10LmRpdGhlcmluZyx0aGlzLmFscGhhVGVzdD10LmFscGhhVGVzdCx0aGlzLnByZW11bHRpcGxpZWRBbHBoYT10LnByZW11bHRpcGxpZWRBbHBoYSx0aGlzLnZpc2libGU9dC52aXNpYmxlLHRoaXMudG9uZU1hcHBlZD10LnRvbmVNYXBwZWQsdGhpcy51c2VyRGF0YT1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQudXNlckRhdGEpKSx0aGlzfSxkaXNwb3NlOmZ1bmN0aW9uKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnenQucHJvdG90eXBlLCJuZWVkc1VwZGF0ZSIse3NldDpmdW5jdGlvbih0KXshMD09PXQmJnRoaXMudmVyc2lvbisrfX0pLChfenQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZ3p0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPV96dCxfenQucHJvdG90eXBlLmlzTWVzaEJhc2ljTWF0ZXJpYWw9ITAsX3p0LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHQpe3JldHVybiBnenQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hcD10Lm1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5zcGVjdWxhck1hcD10LnNwZWN1bGFyTWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmVudk1hcD10LmVudk1hcCx0aGlzLmNvbWJpbmU9dC5jb21iaW5lLHRoaXMucmVmbGVjdGl2aXR5PXQucmVmbGVjdGl2aXR5LHRoaXMucmVmcmFjdGlvblJhdGlvPXQucmVmcmFjdGlvblJhdGlvLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMud2lyZWZyYW1lTGluZWNhcD10LndpcmVmcmFtZUxpbmVjYXAsdGhpcy53aXJlZnJhbWVMaW5lam9pbj10LndpcmVmcmFtZUxpbmVqb2luLHRoaXMuc2tpbm5pbmc9dC5za2lubmluZyx0aGlzLm1vcnBoVGFyZ2V0cz10Lm1vcnBoVGFyZ2V0cyx0aGlzfTtjb25zdCB5enQ9bmV3IHFPdCx2enQ9bmV3IHpPdDtmdW5jdGlvbiBienQodCxlLG4pe2lmKEFycmF5LmlzQXJyYXkodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiBhcnJheSBzaG91bGQgYmUgYSBUeXBlZCBBcnJheS4iKTt0aGlzLm5hbWU9IiIsdGhpcy5hcnJheT10LHRoaXMuaXRlbVNpemU9ZSx0aGlzLmNvdW50PXZvaWQgMCE9PXQ/dC5sZW5ndGgvZTowLHRoaXMubm9ybWFsaXplZD0hMD09PW4sdGhpcy51c2FnZT1rT3QsdGhpcy51cGRhdGVSYW5nZT17b2Zmc2V0OjAsY291bnQ6LTF9LHRoaXMudmVyc2lvbj0wfWZ1bmN0aW9uIHh6dCh0LGUsbil7Ynp0LmNhbGwodGhpcyxuZXcgSW50OEFycmF5KHQpLGUsbil9ZnVuY3Rpb24gd3p0KHQsZSxuKXtienQuY2FsbCh0aGlzLG5ldyBVaW50OEFycmF5KHQpLGUsbil9ZnVuY3Rpb24gU3p0KHQsZSxuKXtienQuY2FsbCh0aGlzLG5ldyBVaW50OENsYW1wZWRBcnJheSh0KSxlLG4pfWZ1bmN0aW9uIE16dCh0LGUsbil7Ynp0LmNhbGwodGhpcyxuZXcgSW50MTZBcnJheSh0KSxlLG4pfWZ1bmN0aW9uIEV6dCh0LGUsbil7Ynp0LmNhbGwodGhpcyxuZXcgVWludDE2QXJyYXkodCksZSxuKX1mdW5jdGlvbiBUenQodCxlLG4pe2J6dC5jYWxsKHRoaXMsbmV3IEludDMyQXJyYXkodCksZSxuKX1mdW5jdGlvbiBDenQodCxlLG4pe2J6dC5jYWxsKHRoaXMsbmV3IFVpbnQzMkFycmF5KHQpLGUsbil9ZnVuY3Rpb24gQXp0KHQsZSxuKXtienQuY2FsbCh0aGlzLG5ldyBVaW50MTZBcnJheSh0KSxlLG4pfWZ1bmN0aW9uIGt6dCh0LGUsbil7Ynp0LmNhbGwodGhpcyxuZXcgRmxvYXQzMkFycmF5KHQpLGUsbil9ZnVuY3Rpb24gTHp0KHQsZSxuKXtienQuY2FsbCh0aGlzLG5ldyBGbG9hdDY0QXJyYXkodCksZSxuKX1mdW5jdGlvbiBQenQodCl7aWYoMD09PXQubGVuZ3RoKXJldHVybi0xLzA7bGV0IGU9dFswXTtmb3IobGV0IG49MSxpPXQubGVuZ3RoO248aTsrK24pdFtuXT5lJiYoZT10W25dKTtyZXR1cm4gZX1PYmplY3QuZGVmaW5lUHJvcGVydHkoYnp0LnByb3RvdHlwZSwibmVlZHNVcGRhdGUiLHtzZXQ6ZnVuY3Rpb24odCl7ITA9PT10JiZ0aGlzLnZlcnNpb24rK319KSxPYmplY3QuYXNzaWduKGJ6dC5wcm90b3R5cGUse2lzQnVmZmVyQXR0cmlidXRlOiEwLG9uVXBsb2FkQ2FsbGJhY2s6ZnVuY3Rpb24oKXt9LHNldFVzYWdlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnVzYWdlPXQsdGhpc30sY29weTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5uYW1lPXQubmFtZSx0aGlzLmFycmF5PW5ldyB0LmFycmF5LmNvbnN0cnVjdG9yKHQuYXJyYXkpLHRoaXMuaXRlbVNpemU9dC5pdGVtU2l6ZSx0aGlzLmNvdW50PXQuY291bnQsdGhpcy5ub3JtYWxpemVkPXQubm9ybWFsaXplZCx0aGlzLnVzYWdlPXQudXNhZ2UsdGhpc30sY29weUF0OmZ1bmN0aW9uKHQsZSxuKXt0Kj10aGlzLml0ZW1TaXplLG4qPWUuaXRlbVNpemU7Zm9yKGxldCBpPTAscj10aGlzLml0ZW1TaXplO2k8cjtpKyspdGhpcy5hcnJheVt0K2ldPWUuYXJyYXlbbitpXTtyZXR1cm4gdGhpc30sY29weUFycmF5OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmFycmF5LnNldCh0KSx0aGlzfSxjb3B5Q29sb3JzQXJyYXk6ZnVuY3Rpb24odCl7Y29uc3QgZT10aGlzLmFycmF5O2xldCBuPTA7Zm9yKGxldCBpPTAscj10Lmxlbmd0aDtpPHI7aSsrKXtsZXQgcj10W2ldO3ZvaWQgMD09PXImJihjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZS5jb3B5Q29sb3JzQXJyYXkoKTogY29sb3IgaXMgdW5kZWZpbmVkIixpKSxyPW5ldyBwenQpLGVbbisrXT1yLnIsZVtuKytdPXIuZyxlW24rK109ci5ifXJldHVybiB0aGlzfSxjb3B5VmVjdG9yMnNBcnJheTpmdW5jdGlvbih0KXtjb25zdCBlPXRoaXMuYXJyYXk7bGV0IG49MDtmb3IobGV0IGk9MCxyPXQubGVuZ3RoO2k8cjtpKyspe2xldCByPXRbaV07dm9pZCAwPT09ciYmKGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlWZWN0b3Iyc0FycmF5KCk6IHZlY3RvciBpcyB1bmRlZmluZWQiLGkpLHI9bmV3IHpPdCksZVtuKytdPXIueCxlW24rK109ci55fXJldHVybiB0aGlzfSxjb3B5VmVjdG9yM3NBcnJheTpmdW5jdGlvbih0KXtjb25zdCBlPXRoaXMuYXJyYXk7bGV0IG49MDtmb3IobGV0IGk9MCxyPXQubGVuZ3RoO2k8cjtpKyspe2xldCByPXRbaV07dm9pZCAwPT09ciYmKGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlWZWN0b3Izc0FycmF5KCk6IHZlY3RvciBpcyB1bmRlZmluZWQiLGkpLHI9bmV3IHFPdCksZVtuKytdPXIueCxlW24rK109ci55LGVbbisrXT1yLnp9cmV0dXJuIHRoaXN9LGNvcHlWZWN0b3I0c0FycmF5OmZ1bmN0aW9uKHQpe2NvbnN0IGU9dGhpcy5hcnJheTtsZXQgbj0wO2ZvcihsZXQgaT0wLHI9dC5sZW5ndGg7aTxyO2krKyl7bGV0IHI9dFtpXTt2b2lkIDA9PT1yJiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weVZlY3RvcjRzQXJyYXkoKTogdmVjdG9yIGlzIHVuZGVmaW5lZCIsaSkscj1uZXcgak90KSxlW24rK109ci54LGVbbisrXT1yLnksZVtuKytdPXIueixlW24rK109ci53fXJldHVybiB0aGlzfSxhcHBseU1hdHJpeDM6ZnVuY3Rpb24odCl7aWYoMj09PXRoaXMuaXRlbVNpemUpZm9yKGxldCBlPTAsbj10aGlzLmNvdW50O2U8bjtlKyspdnp0LmZyb21CdWZmZXJBdHRyaWJ1dGUodGhpcyxlKSx2enQuYXBwbHlNYXRyaXgzKHQpLHRoaXMuc2V0WFkoZSx2enQueCx2enQueSk7ZWxzZSBpZigzPT09dGhpcy5pdGVtU2l6ZSlmb3IobGV0IGU9MCxuPXRoaXMuY291bnQ7ZTxuO2UrKyl5enQuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0aGlzLGUpLHl6dC5hcHBseU1hdHJpeDModCksdGhpcy5zZXRYWVooZSx5enQueCx5enQueSx5enQueik7cmV0dXJuIHRoaXN9LGFwcGx5TWF0cml4NDpmdW5jdGlvbih0KXtmb3IobGV0IGU9MCxuPXRoaXMuY291bnQ7ZTxuO2UrKyl5enQueD10aGlzLmdldFgoZSkseXp0Lnk9dGhpcy5nZXRZKGUpLHl6dC56PXRoaXMuZ2V0WihlKSx5enQuYXBwbHlNYXRyaXg0KHQpLHRoaXMuc2V0WFlaKGUseXp0LngseXp0LnkseXp0LnopO3JldHVybiB0aGlzfSxhcHBseU5vcm1hbE1hdHJpeDpmdW5jdGlvbih0KXtmb3IobGV0IGU9MCxuPXRoaXMuY291bnQ7ZTxuO2UrKyl5enQueD10aGlzLmdldFgoZSkseXp0Lnk9dGhpcy5nZXRZKGUpLHl6dC56PXRoaXMuZ2V0WihlKSx5enQuYXBwbHlOb3JtYWxNYXRyaXgodCksdGhpcy5zZXRYWVooZSx5enQueCx5enQueSx5enQueik7cmV0dXJuIHRoaXN9LHRyYW5zZm9ybURpcmVjdGlvbjpmdW5jdGlvbih0KXtmb3IobGV0IGU9MCxuPXRoaXMuY291bnQ7ZTxuO2UrKyl5enQueD10aGlzLmdldFgoZSkseXp0Lnk9dGhpcy5nZXRZKGUpLHl6dC56PXRoaXMuZ2V0WihlKSx5enQudHJhbnNmb3JtRGlyZWN0aW9uKHQpLHRoaXMuc2V0WFlaKGUseXp0LngseXp0LnkseXp0LnopO3JldHVybiB0aGlzfSxzZXQ6ZnVuY3Rpb24odCxlPTApe3JldHVybiB0aGlzLmFycmF5LnNldCh0LGUpLHRoaXN9LGdldFg6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplXX0sc2V0WDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZV09ZSx0aGlzfSxnZXRZOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSsxXX0sc2V0WTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSsxXT1lLHRoaXN9LGdldFo6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzJdfSxzZXRaOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzJdPWUsdGhpc30sZ2V0VzpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemUrM119LHNldFc6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemUrM109ZSx0aGlzfSxzZXRYWTpmdW5jdGlvbih0LGUsbil7cmV0dXJuIHRoaXMuYXJyYXlbMCsodCo9dGhpcy5pdGVtU2l6ZSldPWUsdGhpcy5hcnJheVt0KzFdPW4sdGhpc30sc2V0WFlaOmZ1bmN0aW9uKHQsZSxuLGkpe3JldHVybiB0aGlzLmFycmF5WzArKHQqPXRoaXMuaXRlbVNpemUpXT1lLHRoaXMuYXJyYXlbdCsxXT1uLHRoaXMuYXJyYXlbdCsyXT1pLHRoaXN9LHNldFhZWlc6ZnVuY3Rpb24odCxlLG4saSxyKXtyZXR1cm4gdGhpcy5hcnJheVswKyh0Kj10aGlzLml0ZW1TaXplKV09ZSx0aGlzLmFycmF5W3QrMV09bix0aGlzLmFycmF5W3QrMl09aSx0aGlzLmFycmF5W3QrM109cix0aGlzfSxvblVwbG9hZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vblVwbG9hZENhbGxiYWNrPXQsdGhpc30sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5hcnJheSx0aGlzLml0ZW1TaXplKS5jb3B5KHRoaXMpfSx0b0pTT046ZnVuY3Rpb24oKXtyZXR1cm57aXRlbVNpemU6dGhpcy5pdGVtU2l6ZSx0eXBlOnRoaXMuYXJyYXkuY29uc3RydWN0b3IubmFtZSxhcnJheTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLmFycmF5KSxub3JtYWxpemVkOnRoaXMubm9ybWFsaXplZH19fSksKHh6dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShienQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9eHp0LCh3enQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYnp0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPXd6dCwoU3p0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGJ6dC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1TenQsKE16dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShienQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9TXp0LChFenQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYnp0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPUV6dCwoVHp0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGJ6dC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1UenQsKEN6dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShienQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9Q3p0LChBenQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYnp0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPUF6dCxBenQucHJvdG90eXBlLmlzRmxvYXQxNkJ1ZmZlckF0dHJpYnV0ZT0hMCwoa3p0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGJ6dC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1renQsKEx6dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShienQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9THp0O2NvbnN0IE56dD17SW50OEFycmF5OkludDhBcnJheSxVaW50OEFycmF5OlVpbnQ4QXJyYXksVWludDhDbGFtcGVkQXJyYXk6InVuZGVmaW5lZCIhPXR5cGVvZiBVaW50OENsYW1wZWRBcnJheT9VaW50OENsYW1wZWRBcnJheTpVaW50OEFycmF5LEludDE2QXJyYXk6SW50MTZBcnJheSxVaW50MTZBcnJheTpVaW50MTZBcnJheSxJbnQzMkFycmF5OkludDMyQXJyYXksVWludDMyQXJyYXk6VWludDMyQXJyYXksRmxvYXQzMkFycmF5OkZsb2F0MzJBcnJheSxGbG9hdDY0QXJyYXk6RmxvYXQ2NEFycmF5fTtmdW5jdGlvbiBJenQodCxlKXtyZXR1cm4gbmV3IE56dFt0XShlKX1sZXQgT3p0PTA7Y29uc3QgUnp0PW5ldyBiUnQsenp0PW5ldyBXUnQsRHp0PW5ldyBxT3QsQnp0PW5ldyAkT3QsSHp0PW5ldyAkT3QsRnp0PW5ldyBxT3Q7ZnVuY3Rpb24gVnp0KCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlkIix7dmFsdWU6T3p0Kyt9KSx0aGlzLnV1aWQ9Uk90LmdlbmVyYXRlVVVJRCgpLHRoaXMubmFtZT0iIix0aGlzLnR5cGU9IkJ1ZmZlckdlb21ldHJ5Iix0aGlzLmluZGV4PW51bGwsdGhpcy5hdHRyaWJ1dGVzPXt9LHRoaXMubW9ycGhBdHRyaWJ1dGVzPXt9LHRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU9ITEsdGhpcy5ncm91cHM9W10sdGhpcy5ib3VuZGluZ0JveD1udWxsLHRoaXMuYm91bmRpbmdTcGhlcmU9bnVsbCx0aGlzLmRyYXdSYW5nZT17c3RhcnQ6MCxjb3VudDoxLzB9LHRoaXMudXNlckRhdGE9e319Vnp0LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoTk90LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOlZ6dCxpc0J1ZmZlckdlb21ldHJ5OiEwLGdldEluZGV4OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5kZXh9LHNldEluZGV4OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmluZGV4PUFycmF5LmlzQXJyYXkodCk/bmV3KFB6dCh0KT42NTUzNT9DenQ6RXp0KSh0LDEpOnQsdGhpc30sZ2V0QXR0cmlidXRlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmF0dHJpYnV0ZXNbdF19LHNldEF0dHJpYnV0ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmF0dHJpYnV0ZXNbdF09ZSx0aGlzfSxkZWxldGVBdHRyaWJ1dGU6ZnVuY3Rpb24odCl7cmV0dXJuIGRlbGV0ZSB0aGlzLmF0dHJpYnV0ZXNbdF0sdGhpc30saGFzQXR0cmlidXRlOmZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDAhPT10aGlzLmF0dHJpYnV0ZXNbdF19LGFkZEdyb3VwOmZ1bmN0aW9uKHQsZSxuPTApe3RoaXMuZ3JvdXBzLnB1c2goe3N0YXJ0OnQsY291bnQ6ZSxtYXRlcmlhbEluZGV4Om59KX0sY2xlYXJHcm91cHM6ZnVuY3Rpb24oKXt0aGlzLmdyb3Vwcz1bXX0sc2V0RHJhd1JhbmdlOmZ1bmN0aW9uKHQsZSl7dGhpcy5kcmF3UmFuZ2Uuc3RhcnQ9dCx0aGlzLmRyYXdSYW5nZS5jb3VudD1lfSxhcHBseU1hdHJpeDQ6ZnVuY3Rpb24odCl7Y29uc3QgZT10aGlzLmF0dHJpYnV0ZXMucG9zaXRpb247dm9pZCAwIT09ZSYmKGUuYXBwbHlNYXRyaXg0KHQpLGUubmVlZHNVcGRhdGU9ITApO2NvbnN0IG49dGhpcy5hdHRyaWJ1dGVzLm5vcm1hbDtpZih2b2lkIDAhPT1uKXtjb25zdCBlPShuZXcgRE90KS5nZXROb3JtYWxNYXRyaXgodCk7bi5hcHBseU5vcm1hbE1hdHJpeChlKSxuLm5lZWRzVXBkYXRlPSEwfWNvbnN0IGk9dGhpcy5hdHRyaWJ1dGVzLnRhbmdlbnQ7cmV0dXJuIHZvaWQgMCE9PWkmJihpLnRyYW5zZm9ybURpcmVjdGlvbih0KSxpLm5lZWRzVXBkYXRlPSEwKSxudWxsIT09dGhpcy5ib3VuZGluZ0JveCYmdGhpcy5jb21wdXRlQm91bmRpbmdCb3goKSxudWxsIT09dGhpcy5ib3VuZGluZ1NwaGVyZSYmdGhpcy5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSx0aGlzfSxyb3RhdGVYOmZ1bmN0aW9uKHQpe3JldHVybiBSenQubWFrZVJvdGF0aW9uWCh0KSx0aGlzLmFwcGx5TWF0cml4NChSenQpLHRoaXN9LHJvdGF0ZVk6ZnVuY3Rpb24odCl7cmV0dXJuIFJ6dC5tYWtlUm90YXRpb25ZKHQpLHRoaXMuYXBwbHlNYXRyaXg0KFJ6dCksdGhpc30scm90YXRlWjpmdW5jdGlvbih0KXtyZXR1cm4gUnp0Lm1ha2VSb3RhdGlvbloodCksdGhpcy5hcHBseU1hdHJpeDQoUnp0KSx0aGlzfSx0cmFuc2xhdGU6ZnVuY3Rpb24odCxlLG4pe3JldHVybiBSenQubWFrZVRyYW5zbGF0aW9uKHQsZSxuKSx0aGlzLmFwcGx5TWF0cml4NChSenQpLHRoaXN9LHNjYWxlOmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gUnp0Lm1ha2VTY2FsZSh0LGUsbiksdGhpcy5hcHBseU1hdHJpeDQoUnp0KSx0aGlzfSxsb29rQXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHp6dC5sb29rQXQodCksenp0LnVwZGF0ZU1hdHJpeCgpLHRoaXMuYXBwbHlNYXRyaXg0KHp6dC5tYXRyaXgpLHRoaXN9LGNlbnRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbXB1dGVCb3VuZGluZ0JveCgpLHRoaXMuYm91bmRpbmdCb3guZ2V0Q2VudGVyKER6dCkubmVnYXRlKCksdGhpcy50cmFuc2xhdGUoRHp0LngsRHp0LnksRHp0LnopLHRoaXN9LHNldEZyb21Qb2ludHM6ZnVuY3Rpb24odCl7Y29uc3QgZT1bXTtmb3IobGV0IG49MCxpPXQubGVuZ3RoO248aTtuKyspe2NvbnN0IGk9dFtuXTtlLnB1c2goaS54LGkueSxpLnp8fDApfXJldHVybiB0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBrenQoZSwzKSksdGhpc30sY29tcHV0ZUJvdW5kaW5nQm94OmZ1bmN0aW9uKCl7bnVsbD09PXRoaXMuYm91bmRpbmdCb3gmJih0aGlzLmJvdW5kaW5nQm94PW5ldyAkT3QpO2NvbnN0IHQ9dGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uLGU9dGhpcy5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb247aWYodCYmdC5pc0dMQnVmZmVyQXR0cmlidXRlKXJldHVybiBjb25zb2xlLmVycm9yKCdUSFJFRS5CdWZmZXJHZW9tZXRyeS5jb21wdXRlQm91bmRpbmdCb3goKTogR0xCdWZmZXJBdHRyaWJ1dGUgcmVxdWlyZXMgYSBtYW51YWwgYm91bmRpbmcgYm94LiBBbHRlcm5hdGl2ZWx5IHNldCAibWVzaC5mcnVzdHVtQ3VsbGVkIiB0byAiZmFsc2UiLicsdGhpcyksdm9pZCB0aGlzLmJvdW5kaW5nQm94LnNldChuZXcgcU90KC0xLzAsLTEvMCwtMS8wKSxuZXcgcU90KDEvMCwxLzAsMS8wKSk7aWYodm9pZCAwIT09dCl7aWYodGhpcy5ib3VuZGluZ0JveC5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKHQpLGUpZm9yKGxldCB0PTAsbj1lLmxlbmd0aDt0PG47dCsrKUJ6dC5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKGVbdF0pLHRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU/KEZ6dC5hZGRWZWN0b3JzKHRoaXMuYm91bmRpbmdCb3gubWluLEJ6dC5taW4pLHRoaXMuYm91bmRpbmdCb3guZXhwYW5kQnlQb2ludChGenQpLEZ6dC5hZGRWZWN0b3JzKHRoaXMuYm91bmRpbmdCb3gubWF4LEJ6dC5tYXgpLHRoaXMuYm91bmRpbmdCb3guZXhwYW5kQnlQb2ludChGenQpKToodGhpcy5ib3VuZGluZ0JveC5leHBhbmRCeVBvaW50KEJ6dC5taW4pLHRoaXMuYm91bmRpbmdCb3guZXhwYW5kQnlQb2ludChCenQubWF4KSl9ZWxzZSB0aGlzLmJvdW5kaW5nQm94Lm1ha2VFbXB0eSgpOyhpc05hTih0aGlzLmJvdW5kaW5nQm94Lm1pbi54KXx8aXNOYU4odGhpcy5ib3VuZGluZ0JveC5taW4ueSl8fGlzTmFOKHRoaXMuYm91bmRpbmdCb3gubWluLnopKSYmY29uc29sZS5lcnJvcignVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nQm94KCk6IENvbXB1dGVkIG1pbi9tYXggaGF2ZSBOYU4gdmFsdWVzLiBUaGUgInBvc2l0aW9uIiBhdHRyaWJ1dGUgaXMgbGlrZWx5IHRvIGhhdmUgTmFOIHZhbHVlcy4nLHRoaXMpfSxjb21wdXRlQm91bmRpbmdTcGhlcmU6ZnVuY3Rpb24oKXtudWxsPT09dGhpcy5ib3VuZGluZ1NwaGVyZSYmKHRoaXMuYm91bmRpbmdTcGhlcmU9bmV3IGhSdCk7Y29uc3QgdD10aGlzLmF0dHJpYnV0ZXMucG9zaXRpb24sZT10aGlzLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbjtpZih0JiZ0LmlzR0xCdWZmZXJBdHRyaWJ1dGUpcmV0dXJuIGNvbnNvbGUuZXJyb3IoJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpOiBHTEJ1ZmZlckF0dHJpYnV0ZSByZXF1aXJlcyBhIG1hbnVhbCBib3VuZGluZyBzcGhlcmUuIEFsdGVybmF0aXZlbHkgc2V0ICJtZXNoLmZydXN0dW1DdWxsZWQiIHRvICJmYWxzZSIuJyx0aGlzKSx2b2lkIHRoaXMuYm91bmRpbmdTcGhlcmUuc2V0KG5ldyBxT3QsMS8wKTtpZih0KXtjb25zdCBuPXRoaXMuYm91bmRpbmdTcGhlcmUuY2VudGVyO2lmKEJ6dC5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKHQpLGUpZm9yKGxldCB0PTAsbj1lLmxlbmd0aDt0PG47dCsrKUh6dC5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKGVbdF0pLHRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU/KEZ6dC5hZGRWZWN0b3JzKEJ6dC5taW4sSHp0Lm1pbiksQnp0LmV4cGFuZEJ5UG9pbnQoRnp0KSxGenQuYWRkVmVjdG9ycyhCenQubWF4LEh6dC5tYXgpLEJ6dC5leHBhbmRCeVBvaW50KEZ6dCkpOihCenQuZXhwYW5kQnlQb2ludChIenQubWluKSxCenQuZXhwYW5kQnlQb2ludChIenQubWF4KSk7Qnp0LmdldENlbnRlcihuKTtsZXQgaT0wO2ZvcihsZXQgZT0wLHI9dC5jb3VudDtlPHI7ZSsrKUZ6dC5mcm9tQnVmZmVyQXR0cmlidXRlKHQsZSksaT1NYXRoLm1heChpLG4uZGlzdGFuY2VUb1NxdWFyZWQoRnp0KSk7aWYoZSlmb3IobGV0IHI9MCxvPWUubGVuZ3RoO3I8bztyKyspe2NvbnN0IG89ZVtyXSxhPXRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU7Zm9yKGxldCBlPTAscj1vLmNvdW50O2U8cjtlKyspRnp0LmZyb21CdWZmZXJBdHRyaWJ1dGUobyxlKSxhJiYoRHp0LmZyb21CdWZmZXJBdHRyaWJ1dGUodCxlKSxGenQuYWRkKER6dCkpLGk9TWF0aC5tYXgoaSxuLmRpc3RhbmNlVG9TcXVhcmVkKEZ6dCkpfXRoaXMuYm91bmRpbmdTcGhlcmUucmFkaXVzPU1hdGguc3FydChpKSxpc05hTih0aGlzLmJvdW5kaW5nU3BoZXJlLnJhZGl1cykmJmNvbnNvbGUuZXJyb3IoJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpOiBDb21wdXRlZCByYWRpdXMgaXMgTmFOLiBUaGUgInBvc2l0aW9uIiBhdHRyaWJ1dGUgaXMgbGlrZWx5IHRvIGhhdmUgTmFOIHZhbHVlcy4nLHRoaXMpfX0sY29tcHV0ZUZhY2VOb3JtYWxzOmZ1bmN0aW9uKCl7fSxjb21wdXRlVGFuZ2VudHM6ZnVuY3Rpb24oKXtjb25zdCB0PXRoaXMuaW5kZXgsZT10aGlzLmF0dHJpYnV0ZXM7aWYobnVsbD09PXR8fHZvaWQgMD09PWUucG9zaXRpb258fHZvaWQgMD09PWUubm9ybWFsfHx2b2lkIDA9PT1lLnV2KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuY29tcHV0ZVRhbmdlbnRzKCkgZmFpbGVkLiBNaXNzaW5nIHJlcXVpcmVkIGF0dHJpYnV0ZXMgKGluZGV4LCBwb3NpdGlvbiwgbm9ybWFsIG9yIHV2KSIpO2NvbnN0IG49dC5hcnJheSxpPWUucG9zaXRpb24uYXJyYXkscj1lLm5vcm1hbC5hcnJheSxvPWUudXYuYXJyYXksYT1pLmxlbmd0aC8zO3ZvaWQgMD09PWUudGFuZ2VudCYmdGhpcy5zZXRBdHRyaWJ1dGUoInRhbmdlbnQiLG5ldyBienQobmV3IEZsb2F0MzJBcnJheSg0KmEpLDQpKTtjb25zdCBzPWUudGFuZ2VudC5hcnJheSxsPVtdLGM9W107Zm9yKGxldCB0PTA7dDxhO3QrKylsW3RdPW5ldyBxT3QsY1t0XT1uZXcgcU90O2NvbnN0IHU9bmV3IHFPdCxoPW5ldyBxT3QsZD1uZXcgcU90LHA9bmV3IHpPdCxmPW5ldyB6T3QsbT1uZXcgek90LGc9bmV3IHFPdCxfPW5ldyBxT3Q7ZnVuY3Rpb24geSh0LGUsbil7dS5mcm9tQXJyYXkoaSwzKnQpLGguZnJvbUFycmF5KGksMyplKSxkLmZyb21BcnJheShpLDMqbikscC5mcm9tQXJyYXkobywyKnQpLGYuZnJvbUFycmF5KG8sMiplKSxtLmZyb21BcnJheShvLDIqbiksaC5zdWIodSksZC5zdWIodSksZi5zdWIocCksbS5zdWIocCk7Y29uc3Qgcj0xLyhmLngqbS55LW0ueCpmLnkpO2lzRmluaXRlKHIpJiYoZy5jb3B5KGgpLm11bHRpcGx5U2NhbGFyKG0ueSkuYWRkU2NhbGVkVmVjdG9yKGQsLWYueSkubXVsdGlwbHlTY2FsYXIociksXy5jb3B5KGQpLm11bHRpcGx5U2NhbGFyKGYueCkuYWRkU2NhbGVkVmVjdG9yKGgsLW0ueCkubXVsdGlwbHlTY2FsYXIociksbFt0XS5hZGQoZyksbFtlXS5hZGQoZyksbFtuXS5hZGQoZyksY1t0XS5hZGQoXyksY1tlXS5hZGQoXyksY1tuXS5hZGQoXykpfWxldCB2PXRoaXMuZ3JvdXBzOzA9PT12Lmxlbmd0aCYmKHY9W3tzdGFydDowLGNvdW50Om4ubGVuZ3RofV0pO2ZvcihsZXQgdD0wLGU9di5sZW5ndGg7dDxlOysrdCl7Y29uc3QgZT12W3RdLGk9ZS5zdGFydDtmb3IobGV0IHQ9aSxyPWkrZS5jb3VudDt0PHI7dCs9Myl5KG5bdCswXSxuW3QrMV0sblt0KzJdKX1jb25zdCBiPW5ldyBxT3QseD1uZXcgcU90LHc9bmV3IHFPdCxTPW5ldyBxT3Q7ZnVuY3Rpb24gTSh0KXt3LmZyb21BcnJheShyLDMqdCksUy5jb3B5KHcpO2NvbnN0IGU9bFt0XTtiLmNvcHkoZSksYi5zdWIody5tdWx0aXBseVNjYWxhcih3LmRvdChlKSkpLm5vcm1hbGl6ZSgpLHguY3Jvc3NWZWN0b3JzKFMsZSk7Y29uc3Qgbj14LmRvdChjW3RdKTwwPy0xOjE7c1s0KnRdPWIueCxzWzQqdCsxXT1iLnksc1s0KnQrMl09Yi56LHNbNCp0KzNdPW59Zm9yKGxldCB0PTAsZT12Lmxlbmd0aDt0PGU7Kyt0KXtjb25zdCBlPXZbdF0saT1lLnN0YXJ0O2ZvcihsZXQgdD1pLHI9aStlLmNvdW50O3Q8cjt0Kz0zKU0oblt0KzBdKSxNKG5bdCsxXSksTShuW3QrMl0pfX0sY29tcHV0ZVZlcnRleE5vcm1hbHM6ZnVuY3Rpb24oKXtjb25zdCB0PXRoaXMuaW5kZXgsZT10aGlzLmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKTtpZih2b2lkIDAhPT1lKXtsZXQgbj10aGlzLmdldEF0dHJpYnV0ZSgibm9ybWFsIik7aWYodm9pZCAwPT09biluPW5ldyBienQobmV3IEZsb2F0MzJBcnJheSgzKmUuY291bnQpLDMpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG4pO2Vsc2UgZm9yKGxldCB0PTAsZT1uLmNvdW50O3Q8ZTt0Kyspbi5zZXRYWVoodCwwLDAsMCk7Y29uc3QgaT1uZXcgcU90LHI9bmV3IHFPdCxvPW5ldyBxT3QsYT1uZXcgcU90LHM9bmV3IHFPdCxsPW5ldyBxT3QsYz1uZXcgcU90LHU9bmV3IHFPdDtpZih0KWZvcihsZXQgaD0wLGQ9dC5jb3VudDtoPGQ7aCs9Myl7Y29uc3QgZD10LmdldFgoaCswKSxwPXQuZ2V0WChoKzEpLGY9dC5nZXRYKGgrMik7aS5mcm9tQnVmZmVyQXR0cmlidXRlKGUsZCksci5mcm9tQnVmZmVyQXR0cmlidXRlKGUscCksby5mcm9tQnVmZmVyQXR0cmlidXRlKGUsZiksYy5zdWJWZWN0b3JzKG8sciksdS5zdWJWZWN0b3JzKGksciksYy5jcm9zcyh1KSxhLmZyb21CdWZmZXJBdHRyaWJ1dGUobixkKSxzLmZyb21CdWZmZXJBdHRyaWJ1dGUobixwKSxsLmZyb21CdWZmZXJBdHRyaWJ1dGUobixmKSxhLmFkZChjKSxzLmFkZChjKSxsLmFkZChjKSxuLnNldFhZWihkLGEueCxhLnksYS56KSxuLnNldFhZWihwLHMueCxzLnkscy56KSxuLnNldFhZWihmLGwueCxsLnksbC56KX1lbHNlIGZvcihsZXQgdD0wLGE9ZS5jb3VudDt0PGE7dCs9MylpLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSx0KzApLHIuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLHQrMSksby5mcm9tQnVmZmVyQXR0cmlidXRlKGUsdCsyKSxjLnN1YlZlY3RvcnMobyxyKSx1LnN1YlZlY3RvcnMoaSxyKSxjLmNyb3NzKHUpLG4uc2V0WFlaKHQrMCxjLngsYy55LGMueiksbi5zZXRYWVoodCsxLGMueCxjLnksYy56KSxuLnNldFhZWih0KzIsYy54LGMueSxjLnopO3RoaXMubm9ybWFsaXplTm9ybWFscygpLG4ubmVlZHNVcGRhdGU9ITB9fSxtZXJnZTpmdW5jdGlvbih0LGUpe2lmKCF0fHwhdC5pc0J1ZmZlckdlb21ldHJ5KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLkJ1ZmZlckdlb21ldHJ5Lm1lcmdlKCk6IGdlb21ldHJ5IG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5CdWZmZXJHZW9tZXRyeS4iLHQpO3ZvaWQgMD09PWUmJihlPTAsY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeS5tZXJnZSgpOiBPdmVyd3JpdGluZyBvcmlnaW5hbCBnZW9tZXRyeSwgc3RhcnRpbmcgYXQgb2Zmc2V0PTAuIFVzZSBCdWZmZXJHZW9tZXRyeVV0aWxzLm1lcmdlQnVmZmVyR2VvbWV0cmllcygpIGZvciBsb3NzbGVzcyBtZXJnZS4iKSk7Y29uc3Qgbj10aGlzLmF0dHJpYnV0ZXM7Zm9yKGNvbnN0IGkgaW4gbil7aWYodm9pZCAwPT09dC5hdHRyaWJ1dGVzW2ldKWNvbnRpbnVlO2NvbnN0IHI9bltpXS5hcnJheSxvPXQuYXR0cmlidXRlc1tpXSxhPW8uYXJyYXkscz1vLml0ZW1TaXplKmUsbD1NYXRoLm1pbihhLmxlbmd0aCxyLmxlbmd0aC1zKTtmb3IobGV0IHQ9MCxlPXM7dDxsO3QrKyxlKyspcltlXT1hW3RdfXJldHVybiB0aGlzfSxub3JtYWxpemVOb3JtYWxzOmZ1bmN0aW9uKCl7Y29uc3QgdD10aGlzLmF0dHJpYnV0ZXMubm9ybWFsO2ZvcihsZXQgZT0wLG49dC5jb3VudDtlPG47ZSsrKUZ6dC5mcm9tQnVmZmVyQXR0cmlidXRlKHQsZSksRnp0Lm5vcm1hbGl6ZSgpLHQuc2V0WFlaKGUsRnp0LngsRnp0LnksRnp0LnopfSx0b05vbkluZGV4ZWQ6ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7Y29uc3Qgbj10LmFycmF5LGk9dC5pdGVtU2l6ZSxyPXQubm9ybWFsaXplZCxvPW5ldyBuLmNvbnN0cnVjdG9yKGUubGVuZ3RoKmkpO2xldCBhPTAscz0wO2ZvcihsZXQgdD0wLHI9ZS5sZW5ndGg7dDxyO3QrKyl7YT1lW3RdKmk7Zm9yKGxldCB0PTA7dDxpO3QrKylvW3MrK109blthKytdfXJldHVybiBuZXcgYnp0KG8saSxyKX1pZihudWxsPT09dGhpcy5pbmRleClyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeS50b05vbkluZGV4ZWQoKTogQnVmZmVyR2VvbWV0cnkgaXMgYWxyZWFkeSBub24taW5kZXhlZC4iKSx0aGlzO2NvbnN0IGU9bmV3IFZ6dCxuPXRoaXMuaW5kZXguYXJyYXksaT10aGlzLmF0dHJpYnV0ZXM7Zm9yKGNvbnN0IHIgaW4gaSl7Y29uc3Qgbz10KGlbcl0sbik7ZS5zZXRBdHRyaWJ1dGUocixvKX1jb25zdCByPXRoaXMubW9ycGhBdHRyaWJ1dGVzO2Zvcihjb25zdCBpIGluIHIpe2NvbnN0IG89W10sYT1yW2ldO2ZvcihsZXQgZT0wLGk9YS5sZW5ndGg7ZTxpO2UrKyl7Y29uc3QgaT10KGFbZV0sbik7by5wdXNoKGkpfWUubW9ycGhBdHRyaWJ1dGVzW2ldPW99ZS5tb3JwaFRhcmdldHNSZWxhdGl2ZT10aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlO2NvbnN0IG89dGhpcy5ncm91cHM7Zm9yKGxldCB0PTAsbj1vLmxlbmd0aDt0PG47dCsrKXtjb25zdCBuPW9bdF07ZS5hZGRHcm91cChuLnN0YXJ0LG4uY291bnQsbi5tYXRlcmlhbEluZGV4KX1yZXR1cm4gZX0sdG9KU09OOmZ1bmN0aW9uKCl7Y29uc3QgdD17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6IkJ1ZmZlckdlb21ldHJ5IixnZW5lcmF0b3I6IkJ1ZmZlckdlb21ldHJ5LnRvSlNPTiJ9fTtpZih0LnV1aWQ9dGhpcy51dWlkLHQudHlwZT10aGlzLnR5cGUsIiIhPT10aGlzLm5hbWUmJih0Lm5hbWU9dGhpcy5uYW1lKSxPYmplY3Qua2V5cyh0aGlzLnVzZXJEYXRhKS5sZW5ndGg+MCYmKHQudXNlckRhdGE9dGhpcy51c2VyRGF0YSksdm9pZCAwIT09dGhpcy5wYXJhbWV0ZXJzKXtjb25zdCBlPXRoaXMucGFyYW1ldGVycztmb3IoY29uc3QgbiBpbiBlKXZvaWQgMCE9PWVbbl0mJih0W25dPWVbbl0pO3JldHVybiB0fXQuZGF0YT17YXR0cmlidXRlczp7fX07Y29uc3QgZT10aGlzLmluZGV4O251bGwhPT1lJiYodC5kYXRhLmluZGV4PXt0eXBlOmUuYXJyYXkuY29uc3RydWN0b3IubmFtZSxhcnJheTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlLmFycmF5KX0pO2NvbnN0IG49dGhpcy5hdHRyaWJ1dGVzO2Zvcihjb25zdCBlIGluIG4pe2NvbnN0IGk9bltlXSxyPWkudG9KU09OKHQuZGF0YSk7IiIhPT1pLm5hbWUmJihyLm5hbWU9aS5uYW1lKSx0LmRhdGEuYXR0cmlidXRlc1tlXT1yfWNvbnN0IGk9e307bGV0IHI9ITE7Zm9yKGNvbnN0IGUgaW4gdGhpcy5tb3JwaEF0dHJpYnV0ZXMpe2NvbnN0IG49dGhpcy5tb3JwaEF0dHJpYnV0ZXNbZV0sbz1bXTtmb3IobGV0IGU9MCxpPW4ubGVuZ3RoO2U8aTtlKyspe2NvbnN0IGk9bltlXSxyPWkudG9KU09OKHQuZGF0YSk7IiIhPT1pLm5hbWUmJihyLm5hbWU9aS5uYW1lKSxvLnB1c2gocil9by5sZW5ndGg+MCYmKGlbZV09byxyPSEwKX1yJiYodC5kYXRhLm1vcnBoQXR0cmlidXRlcz1pLHQuZGF0YS5tb3JwaFRhcmdldHNSZWxhdGl2ZT10aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlKTtjb25zdCBvPXRoaXMuZ3JvdXBzO28ubGVuZ3RoPjAmJih0LmRhdGEuZ3JvdXBzPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkobykpKTtjb25zdCBhPXRoaXMuYm91bmRpbmdTcGhlcmU7cmV0dXJuIG51bGwhPT1hJiYodC5kYXRhLmJvdW5kaW5nU3BoZXJlPXtjZW50ZXI6YS5jZW50ZXIudG9BcnJheSgpLHJhZGl1czphLnJhZGl1c30pLHR9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBWenQpLmNvcHkodGhpcyl9LGNvcHk6ZnVuY3Rpb24odCl7dGhpcy5pbmRleD1udWxsLHRoaXMuYXR0cmlidXRlcz17fSx0aGlzLm1vcnBoQXR0cmlidXRlcz17fSx0aGlzLmdyb3Vwcz1bXSx0aGlzLmJvdW5kaW5nQm94PW51bGwsdGhpcy5ib3VuZGluZ1NwaGVyZT1udWxsO2NvbnN0IGU9e307dGhpcy5uYW1lPXQubmFtZTtjb25zdCBuPXQuaW5kZXg7bnVsbCE9PW4mJnRoaXMuc2V0SW5kZXgobi5jbG9uZShlKSk7Y29uc3QgaT10LmF0dHJpYnV0ZXM7Zm9yKGNvbnN0IHQgaW4gaSl0aGlzLnNldEF0dHJpYnV0ZSh0LGlbdF0uY2xvbmUoZSkpO2NvbnN0IHI9dC5tb3JwaEF0dHJpYnV0ZXM7Zm9yKGNvbnN0IHQgaW4gcil7Y29uc3Qgbj1bXSxpPXJbdF07Zm9yKGxldCB0PTAscj1pLmxlbmd0aDt0PHI7dCsrKW4ucHVzaChpW3RdLmNsb25lKGUpKTt0aGlzLm1vcnBoQXR0cmlidXRlc1t0XT1ufXRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU9dC5tb3JwaFRhcmdldHNSZWxhdGl2ZTtjb25zdCBvPXQuZ3JvdXBzO2ZvcihsZXQgdD0wLGU9by5sZW5ndGg7dDxlO3QrKyl7Y29uc3QgZT1vW3RdO3RoaXMuYWRkR3JvdXAoZS5zdGFydCxlLmNvdW50LGUubWF0ZXJpYWxJbmRleCl9Y29uc3QgYT10LmJvdW5kaW5nQm94O251bGwhPT1hJiYodGhpcy5ib3VuZGluZ0JveD1hLmNsb25lKCkpO2NvbnN0IHM9dC5ib3VuZGluZ1NwaGVyZTtyZXR1cm4gbnVsbCE9PXMmJih0aGlzLmJvdW5kaW5nU3BoZXJlPXMuY2xvbmUoKSksdGhpcy5kcmF3UmFuZ2Uuc3RhcnQ9dC5kcmF3UmFuZ2Uuc3RhcnQsdGhpcy5kcmF3UmFuZ2UuY291bnQ9dC5kcmF3UmFuZ2UuY291bnQsdGhpcy51c2VyRGF0YT10LnVzZXJEYXRhLHRoaXN9LGRpc3Bvc2U6ZnVuY3Rpb24oKXt0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc3Bvc2UifSl9fSk7Y29uc3QgVXp0PW5ldyBiUnQsanp0PW5ldyB2UnQsR3p0PW5ldyBoUnQsV3p0PW5ldyBxT3QscXp0PW5ldyBxT3QsWXp0PW5ldyBxT3QsWHp0PW5ldyBxT3QsJHp0PW5ldyBxT3QsS3p0PW5ldyBxT3QsWnp0PW5ldyBxT3QsSnp0PW5ldyBxT3QsUXp0PW5ldyBxT3QsdER0PW5ldyB6T3QsZUR0PW5ldyB6T3QsbkR0PW5ldyB6T3QsaUR0PW5ldyBxT3QsckR0PW5ldyBxT3Q7ZnVuY3Rpb24gb0R0KHQ9bmV3IFZ6dCxlPW5ldyBfenQpe1dSdC5jYWxsKHRoaXMpLHRoaXMudHlwZT0iTWVzaCIsdGhpcy5nZW9tZXRyeT10LHRoaXMubWF0ZXJpYWw9ZSx0aGlzLnVwZGF0ZU1vcnBoVGFyZ2V0cygpfWZ1bmN0aW9uIGFEdCh0LGUsbixpLHIsbyxhLHMsbCxjLHUsaCl7V3p0LmZyb21CdWZmZXJBdHRyaWJ1dGUocixjKSxxenQuZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLHUpLFl6dC5mcm9tQnVmZmVyQXR0cmlidXRlKHIsaCk7Y29uc3QgZD10Lm1vcnBoVGFyZ2V0SW5mbHVlbmNlcztpZihlLm1vcnBoVGFyZ2V0cyYmbyYmZCl7Wnp0LnNldCgwLDAsMCksSnp0LnNldCgwLDAsMCksUXp0LnNldCgwLDAsMCk7Zm9yKGxldCB0PTAsZT1vLmxlbmd0aDt0PGU7dCsrKXtjb25zdCBlPWRbdF0sbj1vW3RdOzAhPT1lJiYoWHp0LmZyb21CdWZmZXJBdHRyaWJ1dGUobixjKSwkenQuZnJvbUJ1ZmZlckF0dHJpYnV0ZShuLHUpLEt6dC5mcm9tQnVmZmVyQXR0cmlidXRlKG4saCksYT8oWnp0LmFkZFNjYWxlZFZlY3RvcihYenQsZSksSnp0LmFkZFNjYWxlZFZlY3RvcigkenQsZSksUXp0LmFkZFNjYWxlZFZlY3RvcihLenQsZSkpOihaenQuYWRkU2NhbGVkVmVjdG9yKFh6dC5zdWIoV3p0KSxlKSxKenQuYWRkU2NhbGVkVmVjdG9yKCR6dC5zdWIocXp0KSxlKSxRenQuYWRkU2NhbGVkVmVjdG9yKEt6dC5zdWIoWXp0KSxlKSkpfVd6dC5hZGQoWnp0KSxxenQuYWRkKEp6dCksWXp0LmFkZChRenQpfXQuaXNTa2lubmVkTWVzaCYmKHQuYm9uZVRyYW5zZm9ybShjLFd6dCksdC5ib25lVHJhbnNmb3JtKHUscXp0KSx0LmJvbmVUcmFuc2Zvcm0oaCxZenQpKTtjb25zdCBwPShmdW5jdGlvbiBmKHQsZSxuLGkscixvLGEscyl7bGV0IGw7aWYobD0xPT09ZS5zaWRlP2kuaW50ZXJzZWN0VHJpYW5nbGUoYSxvLHIsITAscyk6aS5pbnRlcnNlY3RUcmlhbmdsZShyLG8sYSwyIT09ZS5zaWRlLHMpLG51bGw9PT1sKXJldHVybiBudWxsO3JEdC5jb3B5KHMpLHJEdC5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZCk7Y29uc3QgYz1uLnJheS5vcmlnaW4uZGlzdGFuY2VUbyhyRHQpO3JldHVybiBjPG4ubmVhcnx8Yz5uLmZhcj9udWxsOntkaXN0YW5jZTpjLHBvaW50OnJEdC5jbG9uZSgpLG9iamVjdDp0fX0pKHQsZSxuLGksV3p0LHF6dCxZenQsaUR0KTtpZihwKXtzJiYodER0LmZyb21CdWZmZXJBdHRyaWJ1dGUocyxjKSxlRHQuZnJvbUJ1ZmZlckF0dHJpYnV0ZShzLHUpLG5EdC5mcm9tQnVmZmVyQXR0cmlidXRlKHMsaCkscC51dj1henQuZ2V0VVYoaUR0LFd6dCxxenQsWXp0LHREdCxlRHQsbkR0LG5ldyB6T3QpKSxsJiYodER0LmZyb21CdWZmZXJBdHRyaWJ1dGUobCxjKSxlRHQuZnJvbUJ1ZmZlckF0dHJpYnV0ZShsLHUpLG5EdC5mcm9tQnVmZmVyQXR0cmlidXRlKGwsaCkscC51djI9YXp0LmdldFVWKGlEdCxXenQscXp0LFl6dCx0RHQsZUR0LG5EdCxuZXcgek90KSk7Y29uc3QgdD1uZXcgZnp0KGMsdSxoKTthenQuZ2V0Tm9ybWFsKFd6dCxxenQsWXp0LHQubm9ybWFsKSxwLmZhY2U9dH1yZXR1cm4gcH1vRHQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShXUnQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6b0R0LGlzTWVzaDohMCxjb3B5OmZ1bmN0aW9uKHQpe3JldHVybiBXUnQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHZvaWQgMCE9PXQubW9ycGhUYXJnZXRJbmZsdWVuY2VzJiYodGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXM9dC5tb3JwaFRhcmdldEluZmx1ZW5jZXMuc2xpY2UoKSksdm9pZCAwIT09dC5tb3JwaFRhcmdldERpY3Rpb25hcnkmJih0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeT1PYmplY3QuYXNzaWduKHt9LHQubW9ycGhUYXJnZXREaWN0aW9uYXJ5KSksdGhpcy5tYXRlcmlhbD10Lm1hdGVyaWFsLHRoaXMuZ2VvbWV0cnk9dC5nZW9tZXRyeSx0aGlzfSx1cGRhdGVNb3JwaFRhcmdldHM6ZnVuY3Rpb24oKXtjb25zdCB0PXRoaXMuZ2VvbWV0cnk7aWYodC5pc0J1ZmZlckdlb21ldHJ5KXtjb25zdCBlPXQubW9ycGhBdHRyaWJ1dGVzLG49T2JqZWN0LmtleXMoZSk7aWYobi5sZW5ndGg+MCl7Y29uc3QgdD1lW25bMF1dO2lmKHZvaWQgMCE9PXQpe3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzPVtdLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5PXt9O2ZvcihsZXQgZT0wLG49dC5sZW5ndGg7ZTxuO2UrKyl7Y29uc3Qgbj10W2VdLm5hbWV8fFN0cmluZyhlKTt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcy5wdXNoKDApLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5W25dPWV9fX19ZWxzZXtjb25zdCBlPXQubW9ycGhUYXJnZXRzO3ZvaWQgMCE9PWUmJmUubGVuZ3RoPjAmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLk1lc2gudXBkYXRlTW9ycGhUYXJnZXRzKCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX19LHJheWNhc3Q6ZnVuY3Rpb24odCxlKXtjb25zdCBuPXRoaXMuZ2VvbWV0cnksaT10aGlzLm1hdGVyaWFsLHI9dGhpcy5tYXRyaXhXb3JsZDtpZih2b2lkIDA9PT1pKXJldHVybjtpZihudWxsPT09bi5ib3VuZGluZ1NwaGVyZSYmbi5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSxHenQuY29weShuLmJvdW5kaW5nU3BoZXJlKSxHenQuYXBwbHlNYXRyaXg0KHIpLCExPT09dC5yYXkuaW50ZXJzZWN0c1NwaGVyZShHenQpKXJldHVybjtpZihVenQuY29weShyKS5pbnZlcnQoKSxqenQuY29weSh0LnJheSkuYXBwbHlNYXRyaXg0KFV6dCksbnVsbCE9PW4uYm91bmRpbmdCb3gmJiExPT09anp0LmludGVyc2VjdHNCb3gobi5ib3VuZGluZ0JveCkpcmV0dXJuO2xldCBvO2lmKG4uaXNCdWZmZXJHZW9tZXRyeSl7Y29uc3Qgcj1uLmluZGV4LGE9bi5hdHRyaWJ1dGVzLnBvc2l0aW9uLHM9bi5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24sbD1uLm1vcnBoVGFyZ2V0c1JlbGF0aXZlLGM9bi5hdHRyaWJ1dGVzLnV2LHU9bi5hdHRyaWJ1dGVzLnV2MixoPW4uZ3JvdXBzLGQ9bi5kcmF3UmFuZ2U7aWYobnVsbCE9PXIpaWYoQXJyYXkuaXNBcnJheShpKSlmb3IobGV0IG49MCxwPWgubGVuZ3RoO248cDtuKyspe2NvbnN0IHA9aFtuXSxmPWlbcC5tYXRlcmlhbEluZGV4XTtmb3IobGV0IG49TWF0aC5tYXgocC5zdGFydCxkLnN0YXJ0KSxpPU1hdGgubWluKHAuc3RhcnQrcC5jb3VudCxkLnN0YXJ0K2QuY291bnQpO248aTtuKz0zKXtjb25zdCBpPXIuZ2V0WChuKSxoPXIuZ2V0WChuKzEpLGQ9ci5nZXRYKG4rMik7bz1hRHQodGhpcyxmLHQsanp0LGEscyxsLGMsdSxpLGgsZCksbyYmKG8uZmFjZUluZGV4PU1hdGguZmxvb3Iobi8zKSxvLmZhY2UubWF0ZXJpYWxJbmRleD1wLm1hdGVyaWFsSW5kZXgsZS5wdXNoKG8pKX19ZWxzZSBmb3IobGV0IG49TWF0aC5tYXgoMCxkLnN0YXJ0KSxoPU1hdGgubWluKHIuY291bnQsZC5zdGFydCtkLmNvdW50KTtuPGg7bis9Myl7Y29uc3QgaD1yLmdldFgobiksZD1yLmdldFgobisxKSxwPXIuZ2V0WChuKzIpO289YUR0KHRoaXMsaSx0LGp6dCxhLHMsbCxjLHUsaCxkLHApLG8mJihvLmZhY2VJbmRleD1NYXRoLmZsb29yKG4vMyksZS5wdXNoKG8pKX1lbHNlIGlmKHZvaWQgMCE9PWEpaWYoQXJyYXkuaXNBcnJheShpKSlmb3IobGV0IG49MCxyPWgubGVuZ3RoO248cjtuKyspe2NvbnN0IHI9aFtuXSxwPWlbci5tYXRlcmlhbEluZGV4XTtmb3IobGV0IG49TWF0aC5tYXgoci5zdGFydCxkLnN0YXJ0KSxpPU1hdGgubWluKHIuc3RhcnQrci5jb3VudCxkLnN0YXJ0K2QuY291bnQpO248aTtuKz0zKW89YUR0KHRoaXMscCx0LGp6dCxhLHMsbCxjLHUsbixuKzEsbisyKSxvJiYoby5mYWNlSW5kZXg9TWF0aC5mbG9vcihuLzMpLG8uZmFjZS5tYXRlcmlhbEluZGV4PXIubWF0ZXJpYWxJbmRleCxlLnB1c2gobykpfWVsc2UgZm9yKGxldCBuPU1hdGgubWF4KDAsZC5zdGFydCkscj1NYXRoLm1pbihhLmNvdW50LGQuc3RhcnQrZC5jb3VudCk7bjxyO24rPTMpbz1hRHQodGhpcyxpLHQsanp0LGEscyxsLGMsdSxuLG4rMSxuKzIpLG8mJihvLmZhY2VJbmRleD1NYXRoLmZsb29yKG4vMyksZS5wdXNoKG8pKX1lbHNlIG4uaXNHZW9tZXRyeSYmY29uc29sZS5lcnJvcigiVEhSRUUuTWVzaC5yYXljYXN0KCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX19KTtjbGFzcyBzRHQgZXh0ZW5kcyBWenR7Y29uc3RydWN0b3IodD0xLGU9MSxuPTEsaT0xLHI9MSxvPTEpe3N1cGVyKCksdGhpcy50eXBlPSJCb3hHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXt3aWR0aDp0LGhlaWdodDplLGRlcHRoOm4sd2lkdGhTZWdtZW50czppLGhlaWdodFNlZ21lbnRzOnIsZGVwdGhTZWdtZW50czpvfTtjb25zdCBhPXRoaXM7aT1NYXRoLmZsb29yKGkpLHI9TWF0aC5mbG9vcihyKSxvPU1hdGguZmxvb3Iobyk7Y29uc3Qgcz1bXSxsPVtdLGM9W10sdT1bXTtsZXQgaD0wLGQ9MDtmdW5jdGlvbiBwKHQsZSxuLGkscixvLHAsZixtLGcsXyl7Y29uc3QgeT1vL20sdj1wL2csYj1vLzIseD1wLzIsdz1mLzIsUz1tKzEsTT1nKzE7bGV0IEU9MCxUPTA7Y29uc3QgQz1uZXcgcU90O2ZvcihsZXQgbz0wO288TTtvKyspe2NvbnN0IGE9byp2LXg7Zm9yKGxldCBzPTA7czxTO3MrKylDW3RdPShzKnktYikqaSxDW2VdPWEqcixDW25dPXcsbC5wdXNoKEMueCxDLnksQy56KSxDW3RdPTAsQ1tlXT0wLENbbl09Zj4wPzE6LTEsYy5wdXNoKEMueCxDLnksQy56KSx1LnB1c2gocy9tKSx1LnB1c2goMS1vL2cpLEUrPTF9Zm9yKGxldCB0PTA7dDxnO3QrKylmb3IobGV0IGU9MDtlPG07ZSsrKXtjb25zdCBuPWgrZStTKih0KzEpLGk9aCsoZSsxKStTKih0KzEpLHI9aCsoZSsxKStTKnQ7cy5wdXNoKGgrZStTKnQsbixyKSxzLnB1c2gobixpLHIpLFQrPTZ9YS5hZGRHcm91cChkLFQsXyksZCs9VCxoKz1FfXAoInoiLCJ5IiwieCIsLTEsLTEsbixlLHQsbyxyLDApLHAoInoiLCJ5IiwieCIsMSwtMSxuLGUsLXQsbyxyLDEpLHAoIngiLCJ6IiwieSIsMSwxLHQsbixlLGksbywyKSxwKCJ4IiwieiIsInkiLDEsLTEsdCxuLC1lLGksbywzKSxwKCJ4IiwieSIsInoiLDEsLTEsdCxlLG4saSxyLDQpLHAoIngiLCJ5IiwieiIsLTEsLTEsdCxlLC1uLGksciw1KSx0aGlzLnNldEluZGV4KHMpLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGt6dChsLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcga3p0KGMsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IGt6dCh1LDIpKX19ZnVuY3Rpb24gbER0KHQpe2NvbnN0IGU9e307Zm9yKGNvbnN0IG4gaW4gdCl7ZVtuXT17fTtmb3IoY29uc3QgaSBpbiB0W25dKXtjb25zdCByPXRbbl1baV07ZVtuXVtpXT1yJiYoci5pc0NvbG9yfHxyLmlzTWF0cml4M3x8ci5pc01hdHJpeDR8fHIuaXNWZWN0b3IyfHxyLmlzVmVjdG9yM3x8ci5pc1ZlY3RvcjR8fHIuaXNUZXh0dXJlKT9yLmNsb25lKCk6QXJyYXkuaXNBcnJheShyKT9yLnNsaWNlKCk6cn19cmV0dXJuIGV9ZnVuY3Rpb24gY0R0KHQpe2NvbnN0IGU9e307Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspe2NvbnN0IGk9bER0KHRbbl0pO2Zvcihjb25zdCB0IGluIGkpZVt0XT1pW3RdfXJldHVybiBlfWNvbnN0IHVEdD17Y2xvbmU6bER0LG1lcmdlOmNEdH07ZnVuY3Rpb24gaER0KHQpe2d6dC5jYWxsKHRoaXMpLHRoaXMudHlwZT0iU2hhZGVyTWF0ZXJpYWwiLHRoaXMuZGVmaW5lcz17fSx0aGlzLnVuaWZvcm1zPXt9LHRoaXMudmVydGV4U2hhZGVyPSJ2b2lkIG1haW4oKSB7XG5cdGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIG1vZGVsVmlld01hdHJpeCAqIHZlYzQoIHBvc2l0aW9uLCAxLjAgKTtcbn0iLHRoaXMuZnJhZ21lbnRTaGFkZXI9InZvaWQgbWFpbigpIHtcblx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggMS4wLCAwLjAsIDAuMCwgMS4wICk7XG59Iix0aGlzLmxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy5mb2c9ITEsdGhpcy5saWdodHM9ITEsdGhpcy5jbGlwcGluZz0hMSx0aGlzLnNraW5uaW5nPSExLHRoaXMubW9ycGhUYXJnZXRzPSExLHRoaXMubW9ycGhOb3JtYWxzPSExLHRoaXMuZXh0ZW5zaW9ucz17ZGVyaXZhdGl2ZXM6ITEsZnJhZ0RlcHRoOiExLGRyYXdCdWZmZXJzOiExLHNoYWRlclRleHR1cmVMT0Q6ITF9LHRoaXMuZGVmYXVsdEF0dHJpYnV0ZVZhbHVlcz17Y29sb3I6WzEsMSwxXSx1djpbMCwwXSx1djI6WzAsMF19LHRoaXMuaW5kZXgwQXR0cmlidXRlTmFtZT12b2lkIDAsdGhpcy51bmlmb3Jtc05lZWRVcGRhdGU9ITEsdGhpcy5nbHNsVmVyc2lvbj1udWxsLHZvaWQgMCE9PXQmJih2b2lkIDAhPT10LmF0dHJpYnV0ZXMmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLlNoYWRlck1hdGVyaWFsOiBhdHRyaWJ1dGVzIHNob3VsZCBub3cgYmUgZGVmaW5lZCBpbiBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpLHRoaXMuc2V0VmFsdWVzKHQpKX1mdW5jdGlvbiBkRHQoKXtXUnQuY2FsbCh0aGlzKSx0aGlzLnR5cGU9IkNhbWVyYSIsdGhpcy5tYXRyaXhXb3JsZEludmVyc2U9bmV3IGJSdCx0aGlzLnByb2plY3Rpb25NYXRyaXg9bmV3IGJSdCx0aGlzLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlPW5ldyBiUnR9ZnVuY3Rpb24gcER0KHQ9NTAsZT0xLG49LjEsaT0yZTMpe2REdC5jYWxsKHRoaXMpLHRoaXMudHlwZT0iUGVyc3BlY3RpdmVDYW1lcmEiLHRoaXMuZm92PXQsdGhpcy56b29tPTEsdGhpcy5uZWFyPW4sdGhpcy5mYXI9aSx0aGlzLmZvY3VzPTEwLHRoaXMuYXNwZWN0PWUsdGhpcy52aWV3PW51bGwsdGhpcy5maWxtR2F1Z2U9MzUsdGhpcy5maWxtT2Zmc2V0PTAsdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9KGhEdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShnenQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9aER0LGhEdC5wcm90b3R5cGUuaXNTaGFkZXJNYXRlcmlhbD0hMCxoRHQucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24odCl7cmV0dXJuIGd6dC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy5mcmFnbWVudFNoYWRlcj10LmZyYWdtZW50U2hhZGVyLHRoaXMudmVydGV4U2hhZGVyPXQudmVydGV4U2hhZGVyLHRoaXMudW5pZm9ybXM9bER0KHQudW5pZm9ybXMpLHRoaXMuZGVmaW5lcz1PYmplY3QuYXNzaWduKHt9LHQuZGVmaW5lcyksdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy5saWdodHM9dC5saWdodHMsdGhpcy5jbGlwcGluZz10LmNsaXBwaW5nLHRoaXMuc2tpbm5pbmc9dC5za2lubmluZyx0aGlzLm1vcnBoVGFyZ2V0cz10Lm1vcnBoVGFyZ2V0cyx0aGlzLm1vcnBoTm9ybWFscz10Lm1vcnBoTm9ybWFscyx0aGlzLmV4dGVuc2lvbnM9T2JqZWN0LmFzc2lnbih7fSx0LmV4dGVuc2lvbnMpLHRoaXMuZ2xzbFZlcnNpb249dC5nbHNsVmVyc2lvbix0aGlzfSxoRHQucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbih0KXtjb25zdCBlPWd6dC5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyx0KTtlLmdsc2xWZXJzaW9uPXRoaXMuZ2xzbFZlcnNpb24sZS51bmlmb3Jtcz17fTtmb3IoY29uc3QgbiBpbiB0aGlzLnVuaWZvcm1zKXtjb25zdCBpPXRoaXMudW5pZm9ybXNbbl0udmFsdWU7ZS51bmlmb3Jtc1tuXT1pJiZpLmlzVGV4dHVyZT97dHlwZToidCIsdmFsdWU6aS50b0pTT04odCkudXVpZH06aSYmaS5pc0NvbG9yP3t0eXBlOiJjIix2YWx1ZTppLmdldEhleCgpfTppJiZpLmlzVmVjdG9yMj97dHlwZToidjIiLHZhbHVlOmkudG9BcnJheSgpfTppJiZpLmlzVmVjdG9yMz97dHlwZToidjMiLHZhbHVlOmkudG9BcnJheSgpfTppJiZpLmlzVmVjdG9yND97dHlwZToidjQiLHZhbHVlOmkudG9BcnJheSgpfTppJiZpLmlzTWF0cml4Mz97dHlwZToibTMiLHZhbHVlOmkudG9BcnJheSgpfTppJiZpLmlzTWF0cml4ND97dHlwZToibTQiLHZhbHVlOmkudG9BcnJheSgpfTp7dmFsdWU6aX19T2JqZWN0LmtleXModGhpcy5kZWZpbmVzKS5sZW5ndGg+MCYmKGUuZGVmaW5lcz10aGlzLmRlZmluZXMpLGUudmVydGV4U2hhZGVyPXRoaXMudmVydGV4U2hhZGVyLGUuZnJhZ21lbnRTaGFkZXI9dGhpcy5mcmFnbWVudFNoYWRlcjtjb25zdCBuPXt9O2Zvcihjb25zdCB0IGluIHRoaXMuZXh0ZW5zaW9ucykhMD09PXRoaXMuZXh0ZW5zaW9uc1t0XSYmKG5bdF09ITApO3JldHVybiBPYmplY3Qua2V5cyhuKS5sZW5ndGg+MCYmKGUuZXh0ZW5zaW9ucz1uKSxlfSxkRHQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShXUnQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6ZER0LGlzQ2FtZXJhOiEwLGNvcHk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gV1J0LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0LGUpLHRoaXMubWF0cml4V29ybGRJbnZlcnNlLmNvcHkodC5tYXRyaXhXb3JsZEludmVyc2UpLHRoaXMucHJvamVjdGlvbk1hdHJpeC5jb3B5KHQucHJvamVjdGlvbk1hdHJpeCksdGhpcy5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZS5jb3B5KHQucHJvamVjdGlvbk1hdHJpeEludmVyc2UpLHRoaXN9LGdldFdvcmxkRGlyZWN0aW9uOmZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJihjb25zb2xlLndhcm4oIlRIUkVFLkNhbWVyYTogLmdldFdvcmxkRGlyZWN0aW9uKCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLHQ9bmV3IHFPdCksdGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSk7Y29uc3QgZT10aGlzLm1hdHJpeFdvcmxkLmVsZW1lbnRzO3JldHVybiB0LnNldCgtZVs4XSwtZVs5XSwtZVsxMF0pLm5vcm1hbGl6ZSgpfSx1cGRhdGVNYXRyaXhXb3JsZDpmdW5jdGlvbih0KXtXUnQucHJvdG90eXBlLnVwZGF0ZU1hdHJpeFdvcmxkLmNhbGwodGhpcyx0KSx0aGlzLm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KHRoaXMubWF0cml4V29ybGQpLmludmVydCgpfSx1cGRhdGVXb3JsZE1hdHJpeDpmdW5jdGlvbih0LGUpe1dSdC5wcm90b3R5cGUudXBkYXRlV29ybGRNYXRyaXguY2FsbCh0aGlzLHQsZSksdGhpcy5tYXRyaXhXb3JsZEludmVyc2UuY29weSh0aGlzLm1hdHJpeFdvcmxkKS5pbnZlcnQoKX0sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9fSkscER0LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoZER0LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOnBEdCxpc1BlcnNwZWN0aXZlQ2FtZXJhOiEwLGNvcHk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZER0LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0LGUpLHRoaXMuZm92PXQuZm92LHRoaXMuem9vbT10Lnpvb20sdGhpcy5uZWFyPXQubmVhcix0aGlzLmZhcj10LmZhcix0aGlzLmZvY3VzPXQuZm9jdXMsdGhpcy5hc3BlY3Q9dC5hc3BlY3QsdGhpcy52aWV3PW51bGw9PT10LnZpZXc/bnVsbDpPYmplY3QuYXNzaWduKHt9LHQudmlldyksdGhpcy5maWxtR2F1Z2U9dC5maWxtR2F1Z2UsdGhpcy5maWxtT2Zmc2V0PXQuZmlsbU9mZnNldCx0aGlzfSxzZXRGb2NhbExlbmd0aDpmdW5jdGlvbih0KXtjb25zdCBlPS41KnRoaXMuZ2V0RmlsbUhlaWdodCgpL3Q7dGhpcy5mb3Y9MipST3QuUkFEMkRFRypNYXRoLmF0YW4oZSksdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9LGdldEZvY2FsTGVuZ3RoOmZ1bmN0aW9uKCl7Y29uc3QgdD1NYXRoLnRhbiguNSpST3QuREVHMlJBRCp0aGlzLmZvdik7cmV0dXJuLjUqdGhpcy5nZXRGaWxtSGVpZ2h0KCkvdH0sZ2V0RWZmZWN0aXZlRk9WOmZ1bmN0aW9uKCl7cmV0dXJuIDIqUk90LlJBRDJERUcqTWF0aC5hdGFuKE1hdGgudGFuKC41KlJPdC5ERUcyUkFEKnRoaXMuZm92KS90aGlzLnpvb20pfSxnZXRGaWxtV2lkdGg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWxtR2F1Z2UqTWF0aC5taW4odGhpcy5hc3BlY3QsMSl9LGdldEZpbG1IZWlnaHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWxtR2F1Z2UvTWF0aC5tYXgodGhpcy5hc3BlY3QsMSl9LHNldFZpZXdPZmZzZXQ6ZnVuY3Rpb24odCxlLG4saSxyLG8pe3RoaXMuYXNwZWN0PXQvZSxudWxsPT09dGhpcy52aWV3JiYodGhpcy52aWV3PXtlbmFibGVkOiEwLGZ1bGxXaWR0aDoxLGZ1bGxIZWlnaHQ6MSxvZmZzZXRYOjAsb2Zmc2V0WTowLHdpZHRoOjEsaGVpZ2h0OjF9KSx0aGlzLnZpZXcuZW5hYmxlZD0hMCx0aGlzLnZpZXcuZnVsbFdpZHRoPXQsdGhpcy52aWV3LmZ1bGxIZWlnaHQ9ZSx0aGlzLnZpZXcub2Zmc2V0WD1uLHRoaXMudmlldy5vZmZzZXRZPWksdGhpcy52aWV3LndpZHRoPXIsdGhpcy52aWV3LmhlaWdodD1vLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfSxjbGVhclZpZXdPZmZzZXQ6ZnVuY3Rpb24oKXtudWxsIT09dGhpcy52aWV3JiYodGhpcy52aWV3LmVuYWJsZWQ9ITEpLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfSx1cGRhdGVQcm9qZWN0aW9uTWF0cml4OmZ1bmN0aW9uKCl7Y29uc3QgdD10aGlzLm5lYXI7bGV0IGU9dCpNYXRoLnRhbiguNSpST3QuREVHMlJBRCp0aGlzLmZvdikvdGhpcy56b29tLG49MiplLGk9dGhpcy5hc3BlY3QqbixyPS0uNSppO2NvbnN0IG89dGhpcy52aWV3O2lmKG51bGwhPT10aGlzLnZpZXcmJnRoaXMudmlldy5lbmFibGVkKXtjb25zdCB0PW8uZnVsbFdpZHRoLGE9by5mdWxsSGVpZ2h0O3IrPW8ub2Zmc2V0WCppL3QsZS09by5vZmZzZXRZKm4vYSxpKj1vLndpZHRoL3Qsbio9by5oZWlnaHQvYX1jb25zdCBhPXRoaXMuZmlsbU9mZnNldDswIT09YSYmKHIrPXQqYS90aGlzLmdldEZpbG1XaWR0aCgpKSx0aGlzLnByb2plY3Rpb25NYXRyaXgubWFrZVBlcnNwZWN0aXZlKHIscitpLGUsZS1uLHQsdGhpcy5mYXIpLHRoaXMucHJvamVjdGlvbk1hdHJpeEludmVyc2UuY29weSh0aGlzLnByb2plY3Rpb25NYXRyaXgpLmludmVydCgpfSx0b0pTT046ZnVuY3Rpb24odCl7Y29uc3QgZT1XUnQucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMsdCk7cmV0dXJuIGUub2JqZWN0LmZvdj10aGlzLmZvdixlLm9iamVjdC56b29tPXRoaXMuem9vbSxlLm9iamVjdC5uZWFyPXRoaXMubmVhcixlLm9iamVjdC5mYXI9dGhpcy5mYXIsZS5vYmplY3QuZm9jdXM9dGhpcy5mb2N1cyxlLm9iamVjdC5hc3BlY3Q9dGhpcy5hc3BlY3QsbnVsbCE9PXRoaXMudmlldyYmKGUub2JqZWN0LnZpZXc9T2JqZWN0LmFzc2lnbih7fSx0aGlzLnZpZXcpKSxlLm9iamVjdC5maWxtR2F1Z2U9dGhpcy5maWxtR2F1Z2UsZS5vYmplY3QuZmlsbU9mZnNldD10aGlzLmZpbG1PZmZzZXQsZX19KTtjb25zdCBmRHQ9OTA7ZnVuY3Rpb24gbUR0KHQsZSxuKXtpZihXUnQuY2FsbCh0aGlzKSx0aGlzLnR5cGU9IkN1YmVDYW1lcmEiLCEwIT09bi5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldClyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5DdWJlQ2FtZXJhOiBUaGUgY29uc3RydWN0b3Igbm93IGV4cGVjdHMgYW4gaW5zdGFuY2Ugb2YgV2ViR0xDdWJlUmVuZGVyVGFyZ2V0IGFzIHRoaXJkIHBhcmFtZXRlci4iKTt0aGlzLnJlbmRlclRhcmdldD1uO2NvbnN0IGk9bmV3IHBEdChmRHQsMSx0LGUpO2kubGF5ZXJzPXRoaXMubGF5ZXJzLGkudXAuc2V0KDAsLTEsMCksaS5sb29rQXQobmV3IHFPdCgxLDAsMCkpLHRoaXMuYWRkKGkpO2NvbnN0IHI9bmV3IHBEdChmRHQsMSx0LGUpO3IubGF5ZXJzPXRoaXMubGF5ZXJzLHIudXAuc2V0KDAsLTEsMCksci5sb29rQXQobmV3IHFPdCgtMSwwLDApKSx0aGlzLmFkZChyKTtjb25zdCBvPW5ldyBwRHQoZkR0LDEsdCxlKTtvLmxheWVycz10aGlzLmxheWVycyxvLnVwLnNldCgwLDAsMSksby5sb29rQXQobmV3IHFPdCgwLDEsMCkpLHRoaXMuYWRkKG8pO2NvbnN0IGE9bmV3IHBEdChmRHQsMSx0LGUpO2EubGF5ZXJzPXRoaXMubGF5ZXJzLGEudXAuc2V0KDAsMCwtMSksYS5sb29rQXQobmV3IHFPdCgwLC0xLDApKSx0aGlzLmFkZChhKTtjb25zdCBzPW5ldyBwRHQoZkR0LDEsdCxlKTtzLmxheWVycz10aGlzLmxheWVycyxzLnVwLnNldCgwLC0xLDApLHMubG9va0F0KG5ldyBxT3QoMCwwLDEpKSx0aGlzLmFkZChzKTtjb25zdCBsPW5ldyBwRHQoZkR0LDEsdCxlKTtsLmxheWVycz10aGlzLmxheWVycyxsLnVwLnNldCgwLC0xLDApLGwubG9va0F0KG5ldyBxT3QoMCwwLC0xKSksdGhpcy5hZGQobCksdGhpcy51cGRhdGU9ZnVuY3Rpb24odCxlKXtudWxsPT09dGhpcy5wYXJlbnQmJnRoaXMudXBkYXRlTWF0cml4V29ybGQoKTtjb25zdCBjPXQueHIuZW5hYmxlZCx1PXQuZ2V0UmVuZGVyVGFyZ2V0KCk7dC54ci5lbmFibGVkPSExO2NvbnN0IGg9bi50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcztuLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzPSExLHQuc2V0UmVuZGVyVGFyZ2V0KG4sMCksdC5yZW5kZXIoZSxpKSx0LnNldFJlbmRlclRhcmdldChuLDEpLHQucmVuZGVyKGUsciksdC5zZXRSZW5kZXJUYXJnZXQobiwyKSx0LnJlbmRlcihlLG8pLHQuc2V0UmVuZGVyVGFyZ2V0KG4sMyksdC5yZW5kZXIoZSxhKSx0LnNldFJlbmRlclRhcmdldChuLDQpLHQucmVuZGVyKGUscyksbi50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz1oLHQuc2V0UmVuZGVyVGFyZ2V0KG4sNSksdC5yZW5kZXIoZSxsKSx0LnNldFJlbmRlclRhcmdldCh1KSx0LnhyLmVuYWJsZWQ9Y319ZnVuY3Rpb24gZ0R0KHQsZSxuLGkscixvLGEscyxsLGMpe1ZPdC5jYWxsKHRoaXMsdD12b2lkIDAhPT10P3Q6W10sZT12b2lkIDAhPT1lP2U6Tkl0LG4saSxyLG8sYT12b2lkIDAhPT1hP2E6UUl0LHMsbCxjKSx0aGlzLmZsaXBZPSExLHRoaXMuX25lZWRzRmxpcEVudk1hcD0hMH0obUR0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFdSdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1tRHQsKGdEdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShWT3QucHJvdG90eXBlKSkuY29uc3RydWN0b3I9Z0R0LGdEdC5wcm90b3R5cGUuaXNDdWJlVGV4dHVyZT0hMCxPYmplY3QuZGVmaW5lUHJvcGVydHkoZ0R0LnByb3RvdHlwZSwiaW1hZ2VzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW1hZ2V9LHNldDpmdW5jdGlvbih0KXt0aGlzLmltYWdlPXR9fSk7Y2xhc3MgX0R0IGV4dGVuZHMgR090e2NvbnN0cnVjdG9yKHQsZSxuKXtOdW1iZXIuaXNJbnRlZ2VyKGUpJiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTEN1YmVSZW5kZXJUYXJnZXQ6IGNvbnN0cnVjdG9yIHNpZ25hdHVyZSBpcyBub3cgV2ViR0xDdWJlUmVuZGVyVGFyZ2V0KCBzaXplLCBvcHRpb25zICkiKSxlPW4pLHN1cGVyKHQsdCxlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQiLHt2YWx1ZTohMH0pLHRoaXMudGV4dHVyZT1uZXcgZ0R0KHZvaWQgMCwoZT1lfHx7fSkubWFwcGluZyxlLndyYXBTLGUud3JhcFQsZS5tYWdGaWx0ZXIsZS5taW5GaWx0ZXIsZS5mb3JtYXQsZS50eXBlLGUuYW5pc290cm9weSxlLmVuY29kaW5nKSx0aGlzLnRleHR1cmUuX25lZWRzRmxpcEVudk1hcD0hMX1mcm9tRXF1aXJlY3Rhbmd1bGFyVGV4dHVyZSh0LGUpe3RoaXMudGV4dHVyZS50eXBlPWUudHlwZSx0aGlzLnRleHR1cmUuZm9ybWF0PXRPdCx0aGlzLnRleHR1cmUuZW5jb2Rpbmc9ZS5lbmNvZGluZyx0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzPWUuZ2VuZXJhdGVNaXBtYXBzLHRoaXMudGV4dHVyZS5taW5GaWx0ZXI9ZS5taW5GaWx0ZXIsdGhpcy50ZXh0dXJlLm1hZ0ZpbHRlcj1lLm1hZ0ZpbHRlcjtjb25zdCBuPW5ldyBzRHQoNSw1LDUpLGk9bmV3IGhEdCh7bmFtZToiQ3ViZW1hcEZyb21FcXVpcmVjdCIsdW5pZm9ybXM6bER0KHt0RXF1aXJlY3Q6e3ZhbHVlOm51bGx9fSksdmVydGV4U2hhZGVyOiJcblxuXHRcdFx0XHR2YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uO1xuXG5cdFx0XHRcdHZlYzMgdHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7XG5cblx0XHRcdFx0XHRyZXR1cm4gbm9ybWFsaXplKCAoIG1hdHJpeCAqIHZlYzQoIGRpciwgMC4wICkgKS54eXogKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0dm9pZCBtYWluKCkge1xuXG5cdFx0XHRcdFx0dldvcmxkRGlyZWN0aW9uID0gdHJhbnNmb3JtRGlyZWN0aW9uKCBwb3NpdGlvbiwgbW9kZWxNYXRyaXggKTtcblxuXHRcdFx0XHRcdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdFx0XHRcdFx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXG5cdFx0XHRcdH1cblx0XHRcdCIsZnJhZ21lbnRTaGFkZXI6IlxuXG5cdFx0XHRcdHVuaWZvcm0gc2FtcGxlcjJEIHRFcXVpcmVjdDtcblxuXHRcdFx0XHR2YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uO1xuXG5cdFx0XHRcdCNpbmNsdWRlIDxjb21tb24+XG5cblx0XHRcdFx0dm9pZCBtYWluKCkge1xuXG5cdFx0XHRcdFx0dmVjMyBkaXJlY3Rpb24gPSBub3JtYWxpemUoIHZXb3JsZERpcmVjdGlvbiApO1xuXG5cdFx0XHRcdFx0dmVjMiBzYW1wbGVVViA9IGVxdWlyZWN0VXYoIGRpcmVjdGlvbiApO1xuXG5cdFx0XHRcdFx0Z2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKCB0RXF1aXJlY3QsIHNhbXBsZVVWICk7XG5cblx0XHRcdFx0fVxuXHRcdFx0IixzaWRlOjEsYmxlbmRpbmc6MH0pO2kudW5pZm9ybXMudEVxdWlyZWN0LnZhbHVlPWU7Y29uc3Qgcj1uZXcgb0R0KG4saSksbz1lLm1pbkZpbHRlcjtyZXR1cm4gZS5taW5GaWx0ZXI9PT1xSXQmJihlLm1pbkZpbHRlcj1HSXQpLG5ldyBtRHQoMSwxMCx0aGlzKS51cGRhdGUodCxyKSxlLm1pbkZpbHRlcj1vLHIuZ2VvbWV0cnkuZGlzcG9zZSgpLHIubWF0ZXJpYWwuZGlzcG9zZSgpLHRoaXN9Y2xlYXIodCxlLG4saSl7Y29uc3Qgcj10LmdldFJlbmRlclRhcmdldCgpO2ZvcihsZXQgcj0wO3I8NjtyKyspdC5zZXRSZW5kZXJUYXJnZXQodGhpcyxyKSx0LmNsZWFyKGUsbixpKTt0LnNldFJlbmRlclRhcmdldChyKX19ZnVuY3Rpb24geUR0KHQsZSxuLGkscixvLGEscyxsLGMsdSxoKXtWT3QuY2FsbCh0aGlzLG51bGwsbyxhLHMsbCxjLGkscix1LGgpLHRoaXMuaW1hZ2U9e2RhdGE6dHx8bnVsbCx3aWR0aDplfHwxLGhlaWdodDpufHwxfSx0aGlzLm1hZ0ZpbHRlcj12b2lkIDAhPT1sP2w6Vkl0LHRoaXMubWluRmlsdGVyPXZvaWQgMCE9PWM/YzpWSXQsdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITEsdGhpcy5mbGlwWT0hMSx0aGlzLnVucGFja0FsaWdubWVudD0xLHRoaXMubmVlZHNVcGRhdGU9ITB9KHlEdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShWT3QucHJvdG90eXBlKSkuY29uc3RydWN0b3I9eUR0LHlEdC5wcm90b3R5cGUuaXNEYXRhVGV4dHVyZT0hMDtjb25zdCB2RHQ9bmV3IGhSdCxiRHQ9bmV3IHFPdDtjbGFzcyB4RHR7Y29uc3RydWN0b3IodCxlLG4saSxyLG8pe3RoaXMucGxhbmVzPVt2b2lkIDAhPT10P3Q6bmV3ICRSdCx2b2lkIDAhPT1lP2U6bmV3ICRSdCx2b2lkIDAhPT1uP246bmV3ICRSdCx2b2lkIDAhPT1pP2k6bmV3ICRSdCx2b2lkIDAhPT1yP3I6bmV3ICRSdCx2b2lkIDAhPT1vP286bmV3ICRSdF19c2V0KHQsZSxuLGkscixvKXtjb25zdCBhPXRoaXMucGxhbmVzO3JldHVybiBhWzBdLmNvcHkodCksYVsxXS5jb3B5KGUpLGFbMl0uY29weShuKSxhWzNdLmNvcHkoaSksYVs0XS5jb3B5KHIpLGFbNV0uY29weShvKSx0aGlzfWNsb25lKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfWNvcHkodCl7Y29uc3QgZT10aGlzLnBsYW5lcztmb3IobGV0IG49MDtuPDY7bisrKWVbbl0uY29weSh0LnBsYW5lc1tuXSk7cmV0dXJuIHRoaXN9c2V0RnJvbVByb2plY3Rpb25NYXRyaXgodCl7Y29uc3QgZT10aGlzLnBsYW5lcyxuPXQuZWxlbWVudHMsaT1uWzBdLHI9blsxXSxvPW5bMl0sYT1uWzNdLHM9bls0XSxsPW5bNV0sYz1uWzZdLHU9bls3XSxoPW5bOF0sZD1uWzldLHA9blsxMF0sZj1uWzExXSxtPW5bMTJdLGc9blsxM10sXz1uWzE0XSx5PW5bMTVdO3JldHVybiBlWzBdLnNldENvbXBvbmVudHMoYS1pLHUtcyxmLWgseS1tKS5ub3JtYWxpemUoKSxlWzFdLnNldENvbXBvbmVudHMoYStpLHUrcyxmK2gseSttKS5ub3JtYWxpemUoKSxlWzJdLnNldENvbXBvbmVudHMoYStyLHUrbCxmK2QseStnKS5ub3JtYWxpemUoKSxlWzNdLnNldENvbXBvbmVudHMoYS1yLHUtbCxmLWQseS1nKS5ub3JtYWxpemUoKSxlWzRdLnNldENvbXBvbmVudHMoYS1vLHUtYyxmLXAseS1fKS5ub3JtYWxpemUoKSxlWzVdLnNldENvbXBvbmVudHMoYStvLHUrYyxmK3AseStfKS5ub3JtYWxpemUoKSx0aGlzfWludGVyc2VjdHNPYmplY3QodCl7Y29uc3QgZT10Lmdlb21ldHJ5O3JldHVybiBudWxsPT09ZS5ib3VuZGluZ1NwaGVyZSYmZS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSx2RHQuY29weShlLmJvdW5kaW5nU3BoZXJlKS5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZCksdGhpcy5pbnRlcnNlY3RzU3BoZXJlKHZEdCl9aW50ZXJzZWN0c1Nwcml0ZSh0KXtyZXR1cm4gdkR0LmNlbnRlci5zZXQoMCwwLDApLHZEdC5yYWRpdXM9LjcwNzEwNjc4MTE4NjU0NzYsdkR0LmFwcGx5TWF0cml4NCh0Lm1hdHJpeFdvcmxkKSx0aGlzLmludGVyc2VjdHNTcGhlcmUodkR0KX1pbnRlcnNlY3RzU3BoZXJlKHQpe2NvbnN0IGU9dGhpcy5wbGFuZXMsbj10LmNlbnRlcixpPS10LnJhZGl1cztmb3IobGV0IHQ9MDt0PDY7dCsrKWlmKGVbdF0uZGlzdGFuY2VUb1BvaW50KG4pPGkpcmV0dXJuITE7cmV0dXJuITB9aW50ZXJzZWN0c0JveCh0KXtjb25zdCBlPXRoaXMucGxhbmVzO2ZvcihsZXQgbj0wO248NjtuKyspe2NvbnN0IGk9ZVtuXTtpZihiRHQueD1pLm5vcm1hbC54PjA/dC5tYXgueDp0Lm1pbi54LGJEdC55PWkubm9ybWFsLnk+MD90Lm1heC55OnQubWluLnksYkR0Lno9aS5ub3JtYWwuej4wP3QubWF4Lno6dC5taW4ueixpLmRpc3RhbmNlVG9Qb2ludChiRHQpPDApcmV0dXJuITF9cmV0dXJuITB9Y29udGFpbnNQb2ludCh0KXtjb25zdCBlPXRoaXMucGxhbmVzO2ZvcihsZXQgbj0wO248NjtuKyspaWYoZVtuXS5kaXN0YW5jZVRvUG9pbnQodCk8MClyZXR1cm4hMTtyZXR1cm4hMH19ZnVuY3Rpb24gd0R0KCl7bGV0IHQ9bnVsbCxlPSExLG49bnVsbCxpPW51bGw7ZnVuY3Rpb24gcihlLG8pe24oZSxvKSxpPXQucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHIpfXJldHVybntzdGFydDpmdW5jdGlvbigpeyEwIT09ZSYmbnVsbCE9PW4mJihpPXQucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHIpLGU9ITApfSxzdG9wOmZ1bmN0aW9uKCl7dC5jYW5jZWxBbmltYXRpb25GcmFtZShpKSxlPSExfSxzZXRBbmltYXRpb25Mb29wOmZ1bmN0aW9uKHQpe249dH0sc2V0Q29udGV4dDpmdW5jdGlvbihlKXt0PWV9fX1mdW5jdGlvbiBTRHQodCxlKXtjb25zdCBuPWUuaXNXZWJHTDIsaT1uZXcgV2Vha01hcDtyZXR1cm57Z2V0OmZ1bmN0aW9uIHIodCl7cmV0dXJuIHQuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSYmKHQ9dC5kYXRhKSxpLmdldCh0KX0scmVtb3ZlOmZ1bmN0aW9uIG8oZSl7ZS5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlJiYoZT1lLmRhdGEpO2NvbnN0IG49aS5nZXQoZSk7biYmKHQuZGVsZXRlQnVmZmVyKG4uYnVmZmVyKSxpLmRlbGV0ZShlKSl9LHVwZGF0ZTpmdW5jdGlvbiBhKGUscil7aWYoZS5pc0dMQnVmZmVyQXR0cmlidXRlKXtjb25zdCB0PWkuZ2V0KGUpO3JldHVybiB2b2lkKCghdHx8dC52ZXJzaW9uPGUudmVyc2lvbikmJmkuc2V0KGUse2J1ZmZlcjplLmJ1ZmZlcix0eXBlOmUudHlwZSxieXRlc1BlckVsZW1lbnQ6ZS5lbGVtZW50U2l6ZSx2ZXJzaW9uOmUudmVyc2lvbn0pKX1lLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUmJihlPWUuZGF0YSk7Y29uc3Qgbz1pLmdldChlKTt2b2lkIDA9PT1vP2kuc2V0KGUsKGZ1bmN0aW9uIGEoZSxpKXtjb25zdCByPWUuYXJyYXksbz1lLnVzYWdlLGE9dC5jcmVhdGVCdWZmZXIoKTt0LmJpbmRCdWZmZXIoaSxhKSx0LmJ1ZmZlckRhdGEoaSxyLG8pLGUub25VcGxvYWRDYWxsYmFjaygpO2xldCBzPTUxMjY7cmV0dXJuIHIgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXk/cz01MTI2OnIgaW5zdGFuY2VvZiBGbG9hdDY0QXJyYXk/Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTEF0dHJpYnV0ZXM6IFVuc3VwcG9ydGVkIGRhdGEgYnVmZmVyIGZvcm1hdDogRmxvYXQ2NEFycmF5LiIpOnIgaW5zdGFuY2VvZiBVaW50MTZBcnJheT9lLmlzRmxvYXQxNkJ1ZmZlckF0dHJpYnV0ZT9uP3M9NTEzMTpjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMQXR0cmlidXRlczogVXNhZ2Ugb2YgRmxvYXQxNkJ1ZmZlckF0dHJpYnV0ZSByZXF1aXJlcyBXZWJHTDIuIik6cz01MTIzOnIgaW5zdGFuY2VvZiBJbnQxNkFycmF5P3M9NTEyMjpyIGluc3RhbmNlb2YgVWludDMyQXJyYXk/cz01MTI1OnIgaW5zdGFuY2VvZiBJbnQzMkFycmF5P3M9NTEyNDpyIGluc3RhbmNlb2YgSW50OEFycmF5P3M9NTEyMDpyIGluc3RhbmNlb2YgVWludDhBcnJheSYmKHM9NTEyMSkse2J1ZmZlcjphLHR5cGU6cyxieXRlc1BlckVsZW1lbnQ6ci5CWVRFU19QRVJfRUxFTUVOVCx2ZXJzaW9uOmUudmVyc2lvbn19KShlLHIpKTpvLnZlcnNpb248ZS52ZXJzaW9uJiYoKGZ1bmN0aW9uIHMoZSxpLHIpe2NvbnN0IG89aS5hcnJheSxhPWkudXBkYXRlUmFuZ2U7dC5iaW5kQnVmZmVyKHIsZSksLTE9PT1hLmNvdW50P3QuYnVmZmVyU3ViRGF0YShyLDAsbyk6KG4/dC5idWZmZXJTdWJEYXRhKHIsYS5vZmZzZXQqby5CWVRFU19QRVJfRUxFTUVOVCxvLGEub2Zmc2V0LGEuY291bnQpOnQuYnVmZmVyU3ViRGF0YShyLGEub2Zmc2V0Km8uQllURVNfUEVSX0VMRU1FTlQsby5zdWJhcnJheShhLm9mZnNldCxhLm9mZnNldCthLmNvdW50KSksYS5jb3VudD0tMSl9KShvLmJ1ZmZlcixlLHIpLG8udmVyc2lvbj1lLnZlcnNpb24pfX19Y2xhc3MgTUR0IGV4dGVuZHMgVnp0e2NvbnN0cnVjdG9yKHQ9MSxlPTEsbj0xLGk9MSl7c3VwZXIoKSx0aGlzLnR5cGU9IlBsYW5lR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17d2lkdGg6dCxoZWlnaHQ6ZSx3aWR0aFNlZ21lbnRzOm4saGVpZ2h0U2VnbWVudHM6aX07Y29uc3Qgcj10LzIsbz1lLzIsYT1NYXRoLmZsb29yKG4pLHM9TWF0aC5mbG9vcihpKSxsPWErMSxjPXMrMSx1PXQvYSxoPWUvcyxkPVtdLHA9W10sZj1bXSxtPVtdO2ZvcihsZXQgdD0wO3Q8Yzt0Kyspe2NvbnN0IGU9dCpoLW87Zm9yKGxldCBuPTA7bjxsO24rKylwLnB1c2gobip1LXIsLWUsMCksZi5wdXNoKDAsMCwxKSxtLnB1c2gobi9hKSxtLnB1c2goMS10L3MpfWZvcihsZXQgdD0wO3Q8czt0KyspZm9yKGxldCBlPTA7ZTxhO2UrKyl7Y29uc3Qgbj1lK2wqKHQrMSksaT1lKzErbCoodCsxKSxyPWUrMStsKnQ7ZC5wdXNoKGUrbCp0LG4sciksZC5wdXNoKG4saSxyKX10aGlzLnNldEluZGV4KGQpLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGt6dChwLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcga3p0KGYsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IGt6dChtLDIpKX19Y29uc3QgRUR0PXthbHBoYW1hcF9mcmFnbWVudDoiI2lmZGVmIFVTRV9BTFBIQU1BUFxuXHRkaWZmdXNlQ29sb3IuYSAqPSB0ZXh0dXJlMkQoIGFscGhhTWFwLCB2VXYgKS5nO1xuI2VuZGlmIixhbHBoYW1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0FMUEhBTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGFscGhhTWFwO1xuI2VuZGlmIixhbHBoYXRlc3RfZnJhZ21lbnQ6IiNpZmRlZiBBTFBIQVRFU1Rcblx0aWYgKCBkaWZmdXNlQ29sb3IuYSA8IEFMUEhBVEVTVCApIGRpc2NhcmQ7XG4jZW5kaWYiLGFvbWFwX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0FPTUFQXG5cdGZsb2F0IGFtYmllbnRPY2NsdXNpb24gPSAoIHRleHR1cmUyRCggYW9NYXAsIHZVdjIgKS5yIC0gMS4wICkgKiBhb01hcEludGVuc2l0eSArIDEuMDtcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICo9IGFtYmllbnRPY2NsdXNpb247XG5cdCNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgJiYgZGVmaW5lZCggU1RBTkRBUkQgKVxuXHRcdGZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyICkgKTtcblx0XHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICo9IGNvbXB1dGVTcGVjdWxhck9jY2x1c2lvbiggZG90TlYsIGFtYmllbnRPY2NsdXNpb24sIG1hdGVyaWFsLnNwZWN1bGFyUm91Z2huZXNzICk7XG5cdCNlbmRpZlxuI2VuZGlmIixhb21hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0FPTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGFvTWFwO1xuXHR1bmlmb3JtIGZsb2F0IGFvTWFwSW50ZW5zaXR5O1xuI2VuZGlmIixiZWdpbl92ZXJ0ZXg6InZlYzMgdHJhbnNmb3JtZWQgPSB2ZWMzKCBwb3NpdGlvbiApOyIsYmVnaW5ub3JtYWxfdmVydGV4OiJ2ZWMzIG9iamVjdE5vcm1hbCA9IHZlYzMoIG5vcm1hbCApO1xuI2lmZGVmIFVTRV9UQU5HRU5UXG5cdHZlYzMgb2JqZWN0VGFuZ2VudCA9IHZlYzMoIHRhbmdlbnQueHl6ICk7XG4jZW5kaWYiLGJzZGZzOiJ2ZWMyIGludGVncmF0ZVNwZWN1bGFyQlJERiggY29uc3QgaW4gZmxvYXQgZG90TlYsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHtcblx0Y29uc3QgdmVjNCBjMCA9IHZlYzQoIC0gMSwgLSAwLjAyNzUsIC0gMC41NzIsIDAuMDIyICk7XG5cdGNvbnN0IHZlYzQgYzEgPSB2ZWM0KCAxLCAwLjA0MjUsIDEuMDQsIC0gMC4wNCApO1xuXHR2ZWM0IHIgPSByb3VnaG5lc3MgKiBjMCArIGMxO1xuXHRmbG9hdCBhMDA0ID0gbWluKCByLnggKiByLngsIGV4cDIoIC0gOS4yOCAqIGRvdE5WICkgKSAqIHIueCArIHIueTtcblx0cmV0dXJuIHZlYzIoIC0xLjA0LCAxLjA0ICkgKiBhMDA0ICsgci56dztcbn1cbmZsb2F0IHB1bmN0dWFsTGlnaHRJbnRlbnNpdHlUb0lycmFkaWFuY2VGYWN0b3IoIGNvbnN0IGluIGZsb2F0IGxpZ2h0RGlzdGFuY2UsIGNvbnN0IGluIGZsb2F0IGN1dG9mZkRpc3RhbmNlLCBjb25zdCBpbiBmbG9hdCBkZWNheUV4cG9uZW50ICkge1xuI2lmIGRlZmluZWQgKCBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTIClcblx0ZmxvYXQgZGlzdGFuY2VGYWxsb2ZmID0gMS4wIC8gbWF4KCBwb3coIGxpZ2h0RGlzdGFuY2UsIGRlY2F5RXhwb25lbnQgKSwgMC4wMSApO1xuXHRpZiggY3V0b2ZmRGlzdGFuY2UgPiAwLjAgKSB7XG5cdFx0ZGlzdGFuY2VGYWxsb2ZmICo9IHBvdzIoIHNhdHVyYXRlKCAxLjAgLSBwb3c0KCBsaWdodERpc3RhbmNlIC8gY3V0b2ZmRGlzdGFuY2UgKSApICk7XG5cdH1cblx0cmV0dXJuIGRpc3RhbmNlRmFsbG9mZjtcbiNlbHNlXG5cdGlmKCBjdXRvZmZEaXN0YW5jZSA+IDAuMCAmJiBkZWNheUV4cG9uZW50ID4gMC4wICkge1xuXHRcdHJldHVybiBwb3coIHNhdHVyYXRlKCAtbGlnaHREaXN0YW5jZSAvIGN1dG9mZkRpc3RhbmNlICsgMS4wICksIGRlY2F5RXhwb25lbnQgKTtcblx0fVxuXHRyZXR1cm4gMS4wO1xuI2VuZGlmXG59XG52ZWMzIEJSREZfRGlmZnVzZV9MYW1iZXJ0KCBjb25zdCBpbiB2ZWMzIGRpZmZ1c2VDb2xvciApIHtcblx0cmV0dXJuIFJFQ0lQUk9DQUxfUEkgKiBkaWZmdXNlQ29sb3I7XG59XG52ZWMzIEZfU2NobGljayggY29uc3QgaW4gdmVjMyBzcGVjdWxhckNvbG9yLCBjb25zdCBpbiBmbG9hdCBkb3RMSCApIHtcblx0ZmxvYXQgZnJlc25lbCA9IGV4cDIoICggLTUuNTU0NzMgKiBkb3RMSCAtIDYuOTgzMTYgKSAqIGRvdExIICk7XG5cdHJldHVybiAoIDEuMCAtIHNwZWN1bGFyQ29sb3IgKSAqIGZyZXNuZWwgKyBzcGVjdWxhckNvbG9yO1xufVxudmVjMyBGX1NjaGxpY2tfUm91Z2huZXNzRGVwZW5kZW50KCBjb25zdCBpbiB2ZWMzIEYwLCBjb25zdCBpbiBmbG9hdCBkb3ROViwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkge1xuXHRmbG9hdCBmcmVzbmVsID0gZXhwMiggKCAtNS41NTQ3MyAqIGRvdE5WIC0gNi45ODMxNiApICogZG90TlYgKTtcblx0dmVjMyBGciA9IG1heCggdmVjMyggMS4wIC0gcm91Z2huZXNzICksIEYwICkgLSBGMDtcblx0cmV0dXJuIEZyICogZnJlc25lbCArIEYwO1xufVxuZmxvYXQgR19HR1hfU21pdGgoIGNvbnN0IGluIGZsb2F0IGFscGhhLCBjb25zdCBpbiBmbG9hdCBkb3ROTCwgY29uc3QgaW4gZmxvYXQgZG90TlYgKSB7XG5cdGZsb2F0IGEyID0gcG93MiggYWxwaGEgKTtcblx0ZmxvYXQgZ2wgPSBkb3ROTCArIHNxcnQoIGEyICsgKCAxLjAgLSBhMiApICogcG93MiggZG90TkwgKSApO1xuXHRmbG9hdCBndiA9IGRvdE5WICsgc3FydCggYTIgKyAoIDEuMCAtIGEyICkgKiBwb3cyKCBkb3ROViApICk7XG5cdHJldHVybiAxLjAgLyAoIGdsICogZ3YgKTtcbn1cbmZsb2F0IEdfR0dYX1NtaXRoQ29ycmVsYXRlZCggY29uc3QgaW4gZmxvYXQgYWxwaGEsIGNvbnN0IGluIGZsb2F0IGRvdE5MLCBjb25zdCBpbiBmbG9hdCBkb3ROViApIHtcblx0ZmxvYXQgYTIgPSBwb3cyKCBhbHBoYSApO1xuXHRmbG9hdCBndiA9IGRvdE5MICogc3FydCggYTIgKyAoIDEuMCAtIGEyICkgKiBwb3cyKCBkb3ROViApICk7XG5cdGZsb2F0IGdsID0gZG90TlYgKiBzcXJ0KCBhMiArICggMS4wIC0gYTIgKSAqIHBvdzIoIGRvdE5MICkgKTtcblx0cmV0dXJuIDAuNSAvIG1heCggZ3YgKyBnbCwgRVBTSUxPTiApO1xufVxuZmxvYXQgRF9HR1goIGNvbnN0IGluIGZsb2F0IGFscGhhLCBjb25zdCBpbiBmbG9hdCBkb3ROSCApIHtcblx0ZmxvYXQgYTIgPSBwb3cyKCBhbHBoYSApO1xuXHRmbG9hdCBkZW5vbSA9IHBvdzIoIGRvdE5IICkgKiAoIGEyIC0gMS4wICkgKyAxLjA7XG5cdHJldHVybiBSRUNJUFJPQ0FMX1BJICogYTIgLyBwb3cyKCBkZW5vbSApO1xufVxudmVjMyBCUkRGX1NwZWN1bGFyX0dHWCggY29uc3QgaW4gSW5jaWRlbnRMaWdodCBpbmNpZGVudExpZ2h0LCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHtcblx0ZmxvYXQgYWxwaGEgPSBwb3cyKCByb3VnaG5lc3MgKTtcblx0dmVjMyBoYWxmRGlyID0gbm9ybWFsaXplKCBpbmNpZGVudExpZ2h0LmRpcmVjdGlvbiArIHZpZXdEaXIgKTtcblx0ZmxvYXQgZG90TkwgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIGluY2lkZW50TGlnaHQuZGlyZWN0aW9uICkgKTtcblx0ZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIHZpZXdEaXIgKSApO1xuXHRmbG9hdCBkb3ROSCA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgaGFsZkRpciApICk7XG5cdGZsb2F0IGRvdExIID0gc2F0dXJhdGUoIGRvdCggaW5jaWRlbnRMaWdodC5kaXJlY3Rpb24sIGhhbGZEaXIgKSApO1xuXHR2ZWMzIEYgPSBGX1NjaGxpY2soIHNwZWN1bGFyQ29sb3IsIGRvdExIICk7XG5cdGZsb2F0IEcgPSBHX0dHWF9TbWl0aENvcnJlbGF0ZWQoIGFscGhhLCBkb3ROTCwgZG90TlYgKTtcblx0ZmxvYXQgRCA9IERfR0dYKCBhbHBoYSwgZG90TkggKTtcblx0cmV0dXJuIEYgKiAoIEcgKiBEICk7XG59XG52ZWMyIExUQ19VdiggY29uc3QgaW4gdmVjMyBOLCBjb25zdCBpbiB2ZWMzIFYsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHtcblx0Y29uc3QgZmxvYXQgTFVUX1NJWkUgPSA2NC4wO1xuXHRjb25zdCBmbG9hdCBMVVRfU0NBTEUgPSAoIExVVF9TSVpFIC0gMS4wICkgLyBMVVRfU0laRTtcblx0Y29uc3QgZmxvYXQgTFVUX0JJQVMgPSAwLjUgLyBMVVRfU0laRTtcblx0ZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBOLCBWICkgKTtcblx0dmVjMiB1diA9IHZlYzIoIHJvdWdobmVzcywgc3FydCggMS4wIC0gZG90TlYgKSApO1xuXHR1diA9IHV2ICogTFVUX1NDQUxFICsgTFVUX0JJQVM7XG5cdHJldHVybiB1djtcbn1cbmZsb2F0IExUQ19DbGlwcGVkU3BoZXJlRm9ybUZhY3RvciggY29uc3QgaW4gdmVjMyBmICkge1xuXHRmbG9hdCBsID0gbGVuZ3RoKCBmICk7XG5cdHJldHVybiBtYXgoICggbCAqIGwgKyBmLnogKSAvICggbCArIDEuMCApLCAwLjAgKTtcbn1cbnZlYzMgTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb25zdCBpbiB2ZWMzIHYxLCBjb25zdCBpbiB2ZWMzIHYyICkge1xuXHRmbG9hdCB4ID0gZG90KCB2MSwgdjIgKTtcblx0ZmxvYXQgeSA9IGFicyggeCApO1xuXHRmbG9hdCBhID0gMC44NTQzOTg1ICsgKCAwLjQ5NjUxNTUgKyAwLjAxNDUyMDYgKiB5ICkgKiB5O1xuXHRmbG9hdCBiID0gMy40MTc1OTQwICsgKCA0LjE2MTY3MjQgKyB5ICkgKiB5O1xuXHRmbG9hdCB2ID0gYSAvIGI7XG5cdGZsb2F0IHRoZXRhX3NpbnRoZXRhID0gKCB4ID4gMC4wICkgPyB2IDogMC41ICogaW52ZXJzZXNxcnQoIG1heCggMS4wIC0geCAqIHgsIDFlLTcgKSApIC0gdjtcblx0cmV0dXJuIGNyb3NzKCB2MSwgdjIgKSAqIHRoZXRhX3NpbnRoZXRhO1xufVxudmVjMyBMVENfRXZhbHVhdGUoIGNvbnN0IGluIHZlYzMgTiwgY29uc3QgaW4gdmVjMyBWLCBjb25zdCBpbiB2ZWMzIFAsIGNvbnN0IGluIG1hdDMgbUludiwgY29uc3QgaW4gdmVjMyByZWN0Q29vcmRzWyA0IF0gKSB7XG5cdHZlYzMgdjEgPSByZWN0Q29vcmRzWyAxIF0gLSByZWN0Q29vcmRzWyAwIF07XG5cdHZlYzMgdjIgPSByZWN0Q29vcmRzWyAzIF0gLSByZWN0Q29vcmRzWyAwIF07XG5cdHZlYzMgbGlnaHROb3JtYWwgPSBjcm9zcyggdjEsIHYyICk7XG5cdGlmKCBkb3QoIGxpZ2h0Tm9ybWFsLCBQIC0gcmVjdENvb3Jkc1sgMCBdICkgPCAwLjAgKSByZXR1cm4gdmVjMyggMC4wICk7XG5cdHZlYzMgVDEsIFQyO1xuXHRUMSA9IG5vcm1hbGl6ZSggViAtIE4gKiBkb3QoIFYsIE4gKSApO1xuXHRUMiA9IC0gY3Jvc3MoIE4sIFQxICk7XG5cdG1hdDMgbWF0ID0gbUludiAqIHRyYW5zcG9zZU1hdDMoIG1hdDMoIFQxLCBUMiwgTiApICk7XG5cdHZlYzMgY29vcmRzWyA0IF07XG5cdGNvb3Jkc1sgMCBdID0gbWF0ICogKCByZWN0Q29vcmRzWyAwIF0gLSBQICk7XG5cdGNvb3Jkc1sgMSBdID0gbWF0ICogKCByZWN0Q29vcmRzWyAxIF0gLSBQICk7XG5cdGNvb3Jkc1sgMiBdID0gbWF0ICogKCByZWN0Q29vcmRzWyAyIF0gLSBQICk7XG5cdGNvb3Jkc1sgMyBdID0gbWF0ICogKCByZWN0Q29vcmRzWyAzIF0gLSBQICk7XG5cdGNvb3Jkc1sgMCBdID0gbm9ybWFsaXplKCBjb29yZHNbIDAgXSApO1xuXHRjb29yZHNbIDEgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAxIF0gKTtcblx0Y29vcmRzWyAyIF0gPSBub3JtYWxpemUoIGNvb3Jkc1sgMiBdICk7XG5cdGNvb3Jkc1sgMyBdID0gbm9ybWFsaXplKCBjb29yZHNbIDMgXSApO1xuXHR2ZWMzIHZlY3RvckZvcm1GYWN0b3IgPSB2ZWMzKCAwLjAgKTtcblx0dmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMCBdLCBjb29yZHNbIDEgXSApO1xuXHR2ZWN0b3JGb3JtRmFjdG9yICs9IExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29vcmRzWyAxIF0sIGNvb3Jkc1sgMiBdICk7XG5cdHZlY3RvckZvcm1GYWN0b3IgKz0gTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb29yZHNbIDIgXSwgY29vcmRzWyAzIF0gKTtcblx0dmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMyBdLCBjb29yZHNbIDAgXSApO1xuXHRmbG9hdCByZXN1bHQgPSBMVENfQ2xpcHBlZFNwaGVyZUZvcm1GYWN0b3IoIHZlY3RvckZvcm1GYWN0b3IgKTtcblx0cmV0dXJuIHZlYzMoIHJlc3VsdCApO1xufVxudmVjMyBCUkRGX1NwZWN1bGFyX0dHWF9FbnZpcm9ubWVudCggY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyBzcGVjdWxhckNvbG9yLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7XG5cdGZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCB2aWV3RGlyICkgKTtcblx0dmVjMiBicmRmID0gaW50ZWdyYXRlU3BlY3VsYXJCUkRGKCBkb3ROViwgcm91Z2huZXNzICk7XG5cdHJldHVybiBzcGVjdWxhckNvbG9yICogYnJkZi54ICsgYnJkZi55O1xufVxudm9pZCBCUkRGX1NwZWN1bGFyX011bHRpc2NhdHRlcmluZ19FbnZpcm9ubWVudCggY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gdmVjMyBzcGVjdWxhckNvbG9yLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGlub3V0IHZlYzMgc2luZ2xlU2NhdHRlciwgaW5vdXQgdmVjMyBtdWx0aVNjYXR0ZXIgKSB7XG5cdGZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyICkgKTtcblx0dmVjMyBGID0gRl9TY2hsaWNrX1JvdWdobmVzc0RlcGVuZGVudCggc3BlY3VsYXJDb2xvciwgZG90TlYsIHJvdWdobmVzcyApO1xuXHR2ZWMyIGJyZGYgPSBpbnRlZ3JhdGVTcGVjdWxhckJSREYoIGRvdE5WLCByb3VnaG5lc3MgKTtcblx0dmVjMyBGc3NFc3MgPSBGICogYnJkZi54ICsgYnJkZi55O1xuXHRmbG9hdCBFc3MgPSBicmRmLnggKyBicmRmLnk7XG5cdGZsb2F0IEVtcyA9IDEuMCAtIEVzcztcblx0dmVjMyBGYXZnID0gc3BlY3VsYXJDb2xvciArICggMS4wIC0gc3BlY3VsYXJDb2xvciApICogMC4wNDc2MTk7XHR2ZWMzIEZtcyA9IEZzc0VzcyAqIEZhdmcgLyAoIDEuMCAtIEVtcyAqIEZhdmcgKTtcblx0c2luZ2xlU2NhdHRlciArPSBGc3NFc3M7XG5cdG11bHRpU2NhdHRlciArPSBGbXMgKiBFbXM7XG59XG5mbG9hdCBHX0JsaW5uUGhvbmdfSW1wbGljaXQoICkge1xuXHRyZXR1cm4gMC4yNTtcbn1cbmZsb2F0IERfQmxpbm5QaG9uZyggY29uc3QgaW4gZmxvYXQgc2hpbmluZXNzLCBjb25zdCBpbiBmbG9hdCBkb3ROSCApIHtcblx0cmV0dXJuIFJFQ0lQUk9DQUxfUEkgKiAoIHNoaW5pbmVzcyAqIDAuNSArIDEuMCApICogcG93KCBkb3ROSCwgc2hpbmluZXNzICk7XG59XG52ZWMzIEJSREZfU3BlY3VsYXJfQmxpbm5QaG9uZyggY29uc3QgaW4gSW5jaWRlbnRMaWdodCBpbmNpZGVudExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNoaW5pbmVzcyApIHtcblx0dmVjMyBoYWxmRGlyID0gbm9ybWFsaXplKCBpbmNpZGVudExpZ2h0LmRpcmVjdGlvbiArIGdlb21ldHJ5LnZpZXdEaXIgKTtcblx0ZmxvYXQgZG90TkggPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGhhbGZEaXIgKSApO1xuXHRmbG9hdCBkb3RMSCA9IHNhdHVyYXRlKCBkb3QoIGluY2lkZW50TGlnaHQuZGlyZWN0aW9uLCBoYWxmRGlyICkgKTtcblx0dmVjMyBGID0gRl9TY2hsaWNrKCBzcGVjdWxhckNvbG9yLCBkb3RMSCApO1xuXHRmbG9hdCBHID0gR19CbGlublBob25nX0ltcGxpY2l0KCApO1xuXHRmbG9hdCBEID0gRF9CbGlublBob25nKCBzaGluaW5lc3MsIGRvdE5IICk7XG5cdHJldHVybiBGICogKCBHICogRCApO1xufVxuZmxvYXQgR0dYUm91Z2huZXNzVG9CbGlubkV4cG9uZW50KCBjb25zdCBpbiBmbG9hdCBnZ3hSb3VnaG5lc3MgKSB7XG5cdHJldHVybiAoIDIuMCAvIHBvdzIoIGdneFJvdWdobmVzcyArIDAuMDAwMSApIC0gMi4wICk7XG59XG5mbG9hdCBCbGlubkV4cG9uZW50VG9HR1hSb3VnaG5lc3MoIGNvbnN0IGluIGZsb2F0IGJsaW5uRXhwb25lbnQgKSB7XG5cdHJldHVybiBzcXJ0KCAyLjAgLyAoIGJsaW5uRXhwb25lbnQgKyAyLjAgKSApO1xufVxuI2lmIGRlZmluZWQoIFVTRV9TSEVFTiApXG5mbG9hdCBEX0NoYXJsaWUoZmxvYXQgcm91Z2huZXNzLCBmbG9hdCBOb0gpIHtcblx0ZmxvYXQgaW52QWxwaGEgPSAxLjAgLyByb3VnaG5lc3M7XG5cdGZsb2F0IGNvczJoID0gTm9IICogTm9IO1xuXHRmbG9hdCBzaW4yaCA9IG1heCgxLjAgLSBjb3MyaCwgMC4wMDc4MTI1KTtcdHJldHVybiAoMi4wICsgaW52QWxwaGEpICogcG93KHNpbjJoLCBpbnZBbHBoYSAqIDAuNSkgLyAoMi4wICogUEkpO1xufVxuZmxvYXQgVl9OZXViZWx0KGZsb2F0IE5vViwgZmxvYXQgTm9MKSB7XG5cdHJldHVybiBzYXR1cmF0ZSgxLjAgLyAoNC4wICogKE5vTCArIE5vViAtIE5vTCAqIE5vVikpKTtcbn1cbnZlYzMgQlJERl9TcGVjdWxhcl9TaGVlbiggY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzLCBjb25zdCBpbiB2ZWMzIEwsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIHZlYzMgc3BlY3VsYXJDb2xvciApIHtcblx0dmVjMyBOID0gZ2VvbWV0cnkubm9ybWFsO1xuXHR2ZWMzIFYgPSBnZW9tZXRyeS52aWV3RGlyO1xuXHR2ZWMzIEggPSBub3JtYWxpemUoIFYgKyBMICk7XG5cdGZsb2F0IGRvdE5IID0gc2F0dXJhdGUoIGRvdCggTiwgSCApICk7XG5cdHJldHVybiBzcGVjdWxhckNvbG9yICogRF9DaGFybGllKCByb3VnaG5lc3MsIGRvdE5IICkgKiBWX05ldWJlbHQoIGRvdChOLCBWKSwgZG90KE4sIEwpICk7XG59XG4jZW5kaWYiLGJ1bXBtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9CVU1QTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGJ1bXBNYXA7XG5cdHVuaWZvcm0gZmxvYXQgYnVtcFNjYWxlO1xuXHR2ZWMyIGRIZHh5X2Z3ZCgpIHtcblx0XHR2ZWMyIGRTVGR4ID0gZEZkeCggdlV2ICk7XG5cdFx0dmVjMiBkU1RkeSA9IGRGZHkoIHZVdiApO1xuXHRcdGZsb2F0IEhsbCA9IGJ1bXBTY2FsZSAqIHRleHR1cmUyRCggYnVtcE1hcCwgdlV2ICkueDtcblx0XHRmbG9hdCBkQnggPSBidW1wU2NhbGUgKiB0ZXh0dXJlMkQoIGJ1bXBNYXAsIHZVdiArIGRTVGR4ICkueCAtIEhsbDtcblx0XHRmbG9hdCBkQnkgPSBidW1wU2NhbGUgKiB0ZXh0dXJlMkQoIGJ1bXBNYXAsIHZVdiArIGRTVGR5ICkueCAtIEhsbDtcblx0XHRyZXR1cm4gdmVjMiggZEJ4LCBkQnkgKTtcblx0fVxuXHR2ZWMzIHBlcnR1cmJOb3JtYWxBcmIoIHZlYzMgc3VyZl9wb3MsIHZlYzMgc3VyZl9ub3JtLCB2ZWMyIGRIZHh5ICkge1xuXHRcdHZlYzMgdlNpZ21hWCA9IHZlYzMoIGRGZHgoIHN1cmZfcG9zLnggKSwgZEZkeCggc3VyZl9wb3MueSApLCBkRmR4KCBzdXJmX3Bvcy56ICkgKTtcblx0XHR2ZWMzIHZTaWdtYVkgPSB2ZWMzKCBkRmR5KCBzdXJmX3Bvcy54ICksIGRGZHkoIHN1cmZfcG9zLnkgKSwgZEZkeSggc3VyZl9wb3MueiApICk7XG5cdFx0dmVjMyB2TiA9IHN1cmZfbm9ybTtcblx0XHR2ZWMzIFIxID0gY3Jvc3MoIHZTaWdtYVksIHZOICk7XG5cdFx0dmVjMyBSMiA9IGNyb3NzKCB2TiwgdlNpZ21hWCApO1xuXHRcdGZsb2F0IGZEZXQgPSBkb3QoIHZTaWdtYVgsIFIxICk7XG5cdFx0ZkRldCAqPSAoIGZsb2F0KCBnbF9Gcm9udEZhY2luZyApICogMi4wIC0gMS4wICk7XG5cdFx0dmVjMyB2R3JhZCA9IHNpZ24oIGZEZXQgKSAqICggZEhkeHkueCAqIFIxICsgZEhkeHkueSAqIFIyICk7XG5cdFx0cmV0dXJuIG5vcm1hbGl6ZSggYWJzKCBmRGV0ICkgKiBzdXJmX25vcm0gLSB2R3JhZCApO1xuXHR9XG4jZW5kaWYiLGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudDoiI2lmIE5VTV9DTElQUElOR19QTEFORVMgPiAwXG5cdHZlYzQgcGxhbmU7XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgVU5JT05fQ0xJUFBJTkdfUExBTkVTOyBpICsrICkge1xuXHRcdHBsYW5lID0gY2xpcHBpbmdQbGFuZXNbIGkgXTtcblx0XHRpZiAoIGRvdCggdkNsaXBQb3NpdGlvbiwgcGxhbmUueHl6ICkgPiBwbGFuZS53ICkgZGlzY2FyZDtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuXHQjaWYgVU5JT05fQ0xJUFBJTkdfUExBTkVTIDwgTlVNX0NMSVBQSU5HX1BMQU5FU1xuXHRcdGJvb2wgY2xpcHBlZCA9IHRydWU7XG5cdFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRcdGZvciAoIGludCBpID0gVU5JT05fQ0xJUFBJTkdfUExBTkVTOyBpIDwgTlVNX0NMSVBQSU5HX1BMQU5FUzsgaSArKyApIHtcblx0XHRcdHBsYW5lID0gY2xpcHBpbmdQbGFuZXNbIGkgXTtcblx0XHRcdGNsaXBwZWQgPSAoIGRvdCggdkNsaXBQb3NpdGlvbiwgcGxhbmUueHl6ICkgPiBwbGFuZS53ICkgJiYgY2xpcHBlZDtcblx0XHR9XG5cdFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcblx0XHRpZiAoIGNsaXBwZWQgKSBkaXNjYXJkO1xuXHQjZW5kaWZcbiNlbmRpZiIsY2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ6IiNpZiBOVU1fQ0xJUFBJTkdfUExBTkVTID4gMFxuXHR2YXJ5aW5nIHZlYzMgdkNsaXBQb3NpdGlvbjtcblx0dW5pZm9ybSB2ZWM0IGNsaXBwaW5nUGxhbmVzWyBOVU1fQ0xJUFBJTkdfUExBTkVTIF07XG4jZW5kaWYiLGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleDoiI2lmIE5VTV9DTElQUElOR19QTEFORVMgPiAwXG5cdHZhcnlpbmcgdmVjMyB2Q2xpcFBvc2l0aW9uO1xuI2VuZGlmIixjbGlwcGluZ19wbGFuZXNfdmVydGV4OiIjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyA+IDBcblx0dkNsaXBQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7XG4jZW5kaWYiLGNvbG9yX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0NPTE9SXG5cdGRpZmZ1c2VDb2xvci5yZ2IgKj0gdkNvbG9yO1xuI2VuZGlmIixjb2xvcl9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0NPTE9SXG5cdHZhcnlpbmcgdmVjMyB2Q29sb3I7XG4jZW5kaWYiLGNvbG9yX3BhcnNfdmVydGV4OiIjaWYgZGVmaW5lZCggVVNFX0NPTE9SICkgfHwgZGVmaW5lZCggVVNFX0lOU1RBTkNJTkdfQ09MT1IgKVxuXHR2YXJ5aW5nIHZlYzMgdkNvbG9yO1xuI2VuZGlmIixjb2xvcl92ZXJ0ZXg6IiNpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKSB8fCBkZWZpbmVkKCBVU0VfSU5TVEFOQ0lOR19DT0xPUiApXG5cdHZDb2xvciA9IHZlYzMoIDEuMCApO1xuI2VuZGlmXG4jaWZkZWYgVVNFX0NPTE9SXG5cdHZDb2xvci54eXogKj0gY29sb3IueHl6O1xuI2VuZGlmXG4jaWZkZWYgVVNFX0lOU1RBTkNJTkdfQ09MT1Jcblx0dkNvbG9yLnh5eiAqPSBpbnN0YW5jZUNvbG9yLnh5ejtcbiNlbmRpZiIsY29tbW9uOiIjZGVmaW5lIFBJIDMuMTQxNTkyNjUzNTg5NzkzXG4jZGVmaW5lIFBJMiA2LjI4MzE4NTMwNzE3OTU4NlxuI2RlZmluZSBQSV9IQUxGIDEuNTcwNzk2MzI2Nzk0ODk2NlxuI2RlZmluZSBSRUNJUFJPQ0FMX1BJIDAuMzE4MzA5ODg2MTgzNzkwN1xuI2RlZmluZSBSRUNJUFJPQ0FMX1BJMiAwLjE1OTE1NDk0MzA5MTg5NTM1XG4jZGVmaW5lIEVQU0lMT04gMWUtNlxuI2lmbmRlZiBzYXR1cmF0ZVxuI2RlZmluZSBzYXR1cmF0ZShhKSBjbGFtcCggYSwgMC4wLCAxLjAgKVxuI2VuZGlmXG4jZGVmaW5lIHdoaXRlQ29tcGxlbWVudChhKSAoIDEuMCAtIHNhdHVyYXRlKCBhICkgKVxuZmxvYXQgcG93MiggY29uc3QgaW4gZmxvYXQgeCApIHsgcmV0dXJuIHgqeDsgfVxuZmxvYXQgcG93MyggY29uc3QgaW4gZmxvYXQgeCApIHsgcmV0dXJuIHgqeCp4OyB9XG5mbG9hdCBwb3c0KCBjb25zdCBpbiBmbG9hdCB4ICkgeyBmbG9hdCB4MiA9IHgqeDsgcmV0dXJuIHgyKngyOyB9XG5mbG9hdCBhdmVyYWdlKCBjb25zdCBpbiB2ZWMzIGNvbG9yICkgeyByZXR1cm4gZG90KCBjb2xvciwgdmVjMyggMC4zMzMzICkgKTsgfVxuaGlnaHAgZmxvYXQgcmFuZCggY29uc3QgaW4gdmVjMiB1diApIHtcblx0Y29uc3QgaGlnaHAgZmxvYXQgYSA9IDEyLjk4OTgsIGIgPSA3OC4yMzMsIGMgPSA0Mzc1OC41NDUzO1xuXHRoaWdocCBmbG9hdCBkdCA9IGRvdCggdXYueHksIHZlYzIoIGEsYiApICksIHNuID0gbW9kKCBkdCwgUEkgKTtcblx0cmV0dXJuIGZyYWN0KHNpbihzbikgKiBjKTtcbn1cbiNpZmRlZiBISUdIX1BSRUNJU0lPTlxuXHRmbG9hdCBwcmVjaXNpb25TYWZlTGVuZ3RoKCB2ZWMzIHYgKSB7IHJldHVybiBsZW5ndGgoIHYgKTsgfVxuI2Vsc2Vcblx0ZmxvYXQgbWF4MyggdmVjMyB2ICkgeyByZXR1cm4gbWF4KCBtYXgoIHYueCwgdi55ICksIHYueiApOyB9XG5cdGZsb2F0IHByZWNpc2lvblNhZmVMZW5ndGgoIHZlYzMgdiApIHtcblx0XHRmbG9hdCBtYXhDb21wb25lbnQgPSBtYXgzKCBhYnMoIHYgKSApO1xuXHRcdHJldHVybiBsZW5ndGgoIHYgLyBtYXhDb21wb25lbnQgKSAqIG1heENvbXBvbmVudDtcblx0fVxuI2VuZGlmXG5zdHJ1Y3QgSW5jaWRlbnRMaWdodCB7XG5cdHZlYzMgY29sb3I7XG5cdHZlYzMgZGlyZWN0aW9uO1xuXHRib29sIHZpc2libGU7XG59O1xuc3RydWN0IFJlZmxlY3RlZExpZ2h0IHtcblx0dmVjMyBkaXJlY3REaWZmdXNlO1xuXHR2ZWMzIGRpcmVjdFNwZWN1bGFyO1xuXHR2ZWMzIGluZGlyZWN0RGlmZnVzZTtcblx0dmVjMyBpbmRpcmVjdFNwZWN1bGFyO1xufTtcbnN0cnVjdCBHZW9tZXRyaWNDb250ZXh0IHtcblx0dmVjMyBwb3NpdGlvbjtcblx0dmVjMyBub3JtYWw7XG5cdHZlYzMgdmlld0RpcjtcbiNpZmRlZiBDTEVBUkNPQVRcblx0dmVjMyBjbGVhcmNvYXROb3JtYWw7XG4jZW5kaWZcbn07XG52ZWMzIHRyYW5zZm9ybURpcmVjdGlvbiggaW4gdmVjMyBkaXIsIGluIG1hdDQgbWF0cml4ICkge1xuXHRyZXR1cm4gbm9ybWFsaXplKCAoIG1hdHJpeCAqIHZlYzQoIGRpciwgMC4wICkgKS54eXogKTtcbn1cbnZlYzMgaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggaW4gdmVjMyBkaXIsIGluIG1hdDQgbWF0cml4ICkge1xuXHRyZXR1cm4gbm9ybWFsaXplKCAoIHZlYzQoIGRpciwgMC4wICkgKiBtYXRyaXggKS54eXogKTtcbn1cbnZlYzMgcHJvamVjdE9uUGxhbmUoaW4gdmVjMyBwb2ludCwgaW4gdmVjMyBwb2ludE9uUGxhbmUsIGluIHZlYzMgcGxhbmVOb3JtYWwgKSB7XG5cdGZsb2F0IGRpc3RhbmNlID0gZG90KCBwbGFuZU5vcm1hbCwgcG9pbnQgLSBwb2ludE9uUGxhbmUgKTtcblx0cmV0dXJuIC0gZGlzdGFuY2UgKiBwbGFuZU5vcm1hbCArIHBvaW50O1xufVxuZmxvYXQgc2lkZU9mUGxhbmUoIGluIHZlYzMgcG9pbnQsIGluIHZlYzMgcG9pbnRPblBsYW5lLCBpbiB2ZWMzIHBsYW5lTm9ybWFsICkge1xuXHRyZXR1cm4gc2lnbiggZG90KCBwb2ludCAtIHBvaW50T25QbGFuZSwgcGxhbmVOb3JtYWwgKSApO1xufVxudmVjMyBsaW5lUGxhbmVJbnRlcnNlY3QoIGluIHZlYzMgcG9pbnRPbkxpbmUsIGluIHZlYzMgbGluZURpcmVjdGlvbiwgaW4gdmVjMyBwb2ludE9uUGxhbmUsIGluIHZlYzMgcGxhbmVOb3JtYWwgKSB7XG5cdHJldHVybiBsaW5lRGlyZWN0aW9uICogKCBkb3QoIHBsYW5lTm9ybWFsLCBwb2ludE9uUGxhbmUgLSBwb2ludE9uTGluZSApIC8gZG90KCBwbGFuZU5vcm1hbCwgbGluZURpcmVjdGlvbiApICkgKyBwb2ludE9uTGluZTtcbn1cbm1hdDMgdHJhbnNwb3NlTWF0MyggY29uc3QgaW4gbWF0MyBtICkge1xuXHRtYXQzIHRtcDtcblx0dG1wWyAwIF0gPSB2ZWMzKCBtWyAwIF0ueCwgbVsgMSBdLngsIG1bIDIgXS54ICk7XG5cdHRtcFsgMSBdID0gdmVjMyggbVsgMCBdLnksIG1bIDEgXS55LCBtWyAyIF0ueSApO1xuXHR0bXBbIDIgXSA9IHZlYzMoIG1bIDAgXS56LCBtWyAxIF0ueiwgbVsgMiBdLnogKTtcblx0cmV0dXJuIHRtcDtcbn1cbmZsb2F0IGxpbmVhclRvUmVsYXRpdmVMdW1pbmFuY2UoIGNvbnN0IGluIHZlYzMgY29sb3IgKSB7XG5cdHZlYzMgd2VpZ2h0cyA9IHZlYzMoIDAuMjEyNiwgMC43MTUyLCAwLjA3MjIgKTtcblx0cmV0dXJuIGRvdCggd2VpZ2h0cywgY29sb3IucmdiICk7XG59XG5ib29sIGlzUGVyc3BlY3RpdmVNYXRyaXgoIG1hdDQgbSApIHtcblx0cmV0dXJuIG1bIDIgXVsgMyBdID09IC0gMS4wO1xufVxudmVjMiBlcXVpcmVjdFV2KCBpbiB2ZWMzIGRpciApIHtcblx0ZmxvYXQgdSA9IGF0YW4oIGRpci56LCBkaXIueCApICogUkVDSVBST0NBTF9QSTIgKyAwLjU7XG5cdGZsb2F0IHYgPSBhc2luKCBjbGFtcCggZGlyLnksIC0gMS4wLCAxLjAgKSApICogUkVDSVBST0NBTF9QSSArIDAuNTtcblx0cmV0dXJuIHZlYzIoIHUsIHYgKTtcbn0iLGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudDoiI2lmZGVmIEVOVk1BUF9UWVBFX0NVQkVfVVZcblx0I2RlZmluZSBjdWJlVVZfbWF4TWlwTGV2ZWwgOC4wXG5cdCNkZWZpbmUgY3ViZVVWX21pbk1pcExldmVsIDQuMFxuXHQjZGVmaW5lIGN1YmVVVl9tYXhUaWxlU2l6ZSAyNTYuMFxuXHQjZGVmaW5lIGN1YmVVVl9taW5UaWxlU2l6ZSAxNi4wXG5cdGZsb2F0IGdldEZhY2UoIHZlYzMgZGlyZWN0aW9uICkge1xuXHRcdHZlYzMgYWJzRGlyZWN0aW9uID0gYWJzKCBkaXJlY3Rpb24gKTtcblx0XHRmbG9hdCBmYWNlID0gLSAxLjA7XG5cdFx0aWYgKCBhYnNEaXJlY3Rpb24ueCA+IGFic0RpcmVjdGlvbi56ICkge1xuXHRcdFx0aWYgKCBhYnNEaXJlY3Rpb24ueCA+IGFic0RpcmVjdGlvbi55IClcblx0XHRcdFx0ZmFjZSA9IGRpcmVjdGlvbi54ID4gMC4wID8gMC4wIDogMy4wO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRmYWNlID0gZGlyZWN0aW9uLnkgPiAwLjAgPyAxLjAgOiA0LjA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICggYWJzRGlyZWN0aW9uLnogPiBhYnNEaXJlY3Rpb24ueSApXG5cdFx0XHRcdGZhY2UgPSBkaXJlY3Rpb24ueiA+IDAuMCA/IDIuMCA6IDUuMDtcblx0XHRcdGVsc2Vcblx0XHRcdFx0ZmFjZSA9IGRpcmVjdGlvbi55ID4gMC4wID8gMS4wIDogNC4wO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFjZTtcblx0fVxuXHR2ZWMyIGdldFVWKCB2ZWMzIGRpcmVjdGlvbiwgZmxvYXQgZmFjZSApIHtcblx0XHR2ZWMyIHV2O1xuXHRcdGlmICggZmFjZSA9PSAwLjAgKSB7XG5cdFx0XHR1diA9IHZlYzIoIGRpcmVjdGlvbi56LCBkaXJlY3Rpb24ueSApIC8gYWJzKCBkaXJlY3Rpb24ueCApO1xuXHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gMS4wICkge1xuXHRcdFx0dXYgPSB2ZWMyKCAtIGRpcmVjdGlvbi54LCAtIGRpcmVjdGlvbi56ICkgLyBhYnMoIGRpcmVjdGlvbi55ICk7XG5cdFx0fSBlbHNlIGlmICggZmFjZSA9PSAyLjAgKSB7XG5cdFx0XHR1diA9IHZlYzIoIC0gZGlyZWN0aW9uLngsIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi56ICk7XG5cdFx0fSBlbHNlIGlmICggZmFjZSA9PSAzLjAgKSB7XG5cdFx0XHR1diA9IHZlYzIoIC0gZGlyZWN0aW9uLnosIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi54ICk7XG5cdFx0fSBlbHNlIGlmICggZmFjZSA9PSA0LjAgKSB7XG5cdFx0XHR1diA9IHZlYzIoIC0gZGlyZWN0aW9uLngsIGRpcmVjdGlvbi56ICkgLyBhYnMoIGRpcmVjdGlvbi55ICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHV2ID0gdmVjMiggZGlyZWN0aW9uLngsIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi56ICk7XG5cdFx0fVxuXHRcdHJldHVybiAwLjUgKiAoIHV2ICsgMS4wICk7XG5cdH1cblx0dmVjMyBiaWxpbmVhckN1YmVVViggc2FtcGxlcjJEIGVudk1hcCwgdmVjMyBkaXJlY3Rpb24sIGZsb2F0IG1pcEludCApIHtcblx0XHRmbG9hdCBmYWNlID0gZ2V0RmFjZSggZGlyZWN0aW9uICk7XG5cdFx0ZmxvYXQgZmlsdGVySW50ID0gbWF4KCBjdWJlVVZfbWluTWlwTGV2ZWwgLSBtaXBJbnQsIDAuMCApO1xuXHRcdG1pcEludCA9IG1heCggbWlwSW50LCBjdWJlVVZfbWluTWlwTGV2ZWwgKTtcblx0XHRmbG9hdCBmYWNlU2l6ZSA9IGV4cDIoIG1pcEludCApO1xuXHRcdGZsb2F0IHRleGVsU2l6ZSA9IDEuMCAvICggMy4wICogY3ViZVVWX21heFRpbGVTaXplICk7XG5cdFx0dmVjMiB1diA9IGdldFVWKCBkaXJlY3Rpb24sIGZhY2UgKSAqICggZmFjZVNpemUgLSAxLjAgKTtcblx0XHR2ZWMyIGYgPSBmcmFjdCggdXYgKTtcblx0XHR1diArPSAwLjUgLSBmO1xuXHRcdGlmICggZmFjZSA+IDIuMCApIHtcblx0XHRcdHV2LnkgKz0gZmFjZVNpemU7XG5cdFx0XHRmYWNlIC09IDMuMDtcblx0XHR9XG5cdFx0dXYueCArPSBmYWNlICogZmFjZVNpemU7XG5cdFx0aWYgKCBtaXBJbnQgPCBjdWJlVVZfbWF4TWlwTGV2ZWwgKSB7XG5cdFx0XHR1di55ICs9IDIuMCAqIGN1YmVVVl9tYXhUaWxlU2l6ZTtcblx0XHR9XG5cdFx0dXYueSArPSBmaWx0ZXJJbnQgKiAyLjAgKiBjdWJlVVZfbWluVGlsZVNpemU7XG5cdFx0dXYueCArPSAzLjAgKiBtYXgoIDAuMCwgY3ViZVVWX21heFRpbGVTaXplIC0gMi4wICogZmFjZVNpemUgKTtcblx0XHR1diAqPSB0ZXhlbFNpemU7XG5cdFx0dmVjMyB0bCA9IGVudk1hcFRleGVsVG9MaW5lYXIoIHRleHR1cmUyRCggZW52TWFwLCB1diApICkucmdiO1xuXHRcdHV2LnggKz0gdGV4ZWxTaXplO1xuXHRcdHZlYzMgdHIgPSBlbnZNYXBUZXhlbFRvTGluZWFyKCB0ZXh0dXJlMkQoIGVudk1hcCwgdXYgKSApLnJnYjtcblx0XHR1di55ICs9IHRleGVsU2l6ZTtcblx0XHR2ZWMzIGJyID0gZW52TWFwVGV4ZWxUb0xpbmVhciggdGV4dHVyZTJEKCBlbnZNYXAsIHV2ICkgKS5yZ2I7XG5cdFx0dXYueCAtPSB0ZXhlbFNpemU7XG5cdFx0dmVjMyBibCA9IGVudk1hcFRleGVsVG9MaW5lYXIoIHRleHR1cmUyRCggZW52TWFwLCB1diApICkucmdiO1xuXHRcdHZlYzMgdG0gPSBtaXgoIHRsLCB0ciwgZi54ICk7XG5cdFx0dmVjMyBibSA9IG1peCggYmwsIGJyLCBmLnggKTtcblx0XHRyZXR1cm4gbWl4KCB0bSwgYm0sIGYueSApO1xuXHR9XG5cdCNkZWZpbmUgcjAgMS4wXG5cdCNkZWZpbmUgdjAgMC4zMzlcblx0I2RlZmluZSBtMCAtIDIuMFxuXHQjZGVmaW5lIHIxIDAuOFxuXHQjZGVmaW5lIHYxIDAuMjc2XG5cdCNkZWZpbmUgbTEgLSAxLjBcblx0I2RlZmluZSByNCAwLjRcblx0I2RlZmluZSB2NCAwLjA0NlxuXHQjZGVmaW5lIG00IDIuMFxuXHQjZGVmaW5lIHI1IDAuMzA1XG5cdCNkZWZpbmUgdjUgMC4wMTZcblx0I2RlZmluZSBtNSAzLjBcblx0I2RlZmluZSByNiAwLjIxXG5cdCNkZWZpbmUgdjYgMC4wMDM4XG5cdCNkZWZpbmUgbTYgNC4wXG5cdGZsb2F0IHJvdWdobmVzc1RvTWlwKCBmbG9hdCByb3VnaG5lc3MgKSB7XG5cdFx0ZmxvYXQgbWlwID0gMC4wO1xuXHRcdGlmICggcm91Z2huZXNzID49IHIxICkge1xuXHRcdFx0bWlwID0gKCByMCAtIHJvdWdobmVzcyApICogKCBtMSAtIG0wICkgLyAoIHIwIC0gcjEgKSArIG0wO1xuXHRcdH0gZWxzZSBpZiAoIHJvdWdobmVzcyA+PSByNCApIHtcblx0XHRcdG1pcCA9ICggcjEgLSByb3VnaG5lc3MgKSAqICggbTQgLSBtMSApIC8gKCByMSAtIHI0ICkgKyBtMTtcblx0XHR9IGVsc2UgaWYgKCByb3VnaG5lc3MgPj0gcjUgKSB7XG5cdFx0XHRtaXAgPSAoIHI0IC0gcm91Z2huZXNzICkgKiAoIG01IC0gbTQgKSAvICggcjQgLSByNSApICsgbTQ7XG5cdFx0fSBlbHNlIGlmICggcm91Z2huZXNzID49IHI2ICkge1xuXHRcdFx0bWlwID0gKCByNSAtIHJvdWdobmVzcyApICogKCBtNiAtIG01ICkgLyAoIHI1IC0gcjYgKSArIG01O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRtaXAgPSAtIDIuMCAqIGxvZzIoIDEuMTYgKiByb3VnaG5lc3MgKTtcdFx0fVxuXHRcdHJldHVybiBtaXA7XG5cdH1cblx0dmVjNCB0ZXh0dXJlQ3ViZVVWKCBzYW1wbGVyMkQgZW52TWFwLCB2ZWMzIHNhbXBsZURpciwgZmxvYXQgcm91Z2huZXNzICkge1xuXHRcdGZsb2F0IG1pcCA9IGNsYW1wKCByb3VnaG5lc3NUb01pcCggcm91Z2huZXNzICksIG0wLCBjdWJlVVZfbWF4TWlwTGV2ZWwgKTtcblx0XHRmbG9hdCBtaXBGID0gZnJhY3QoIG1pcCApO1xuXHRcdGZsb2F0IG1pcEludCA9IGZsb29yKCBtaXAgKTtcblx0XHR2ZWMzIGNvbG9yMCA9IGJpbGluZWFyQ3ViZVVWKCBlbnZNYXAsIHNhbXBsZURpciwgbWlwSW50ICk7XG5cdFx0aWYgKCBtaXBGID09IDAuMCApIHtcblx0XHRcdHJldHVybiB2ZWM0KCBjb2xvcjAsIDEuMCApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR2ZWMzIGNvbG9yMSA9IGJpbGluZWFyQ3ViZVVWKCBlbnZNYXAsIHNhbXBsZURpciwgbWlwSW50ICsgMS4wICk7XG5cdFx0XHRyZXR1cm4gdmVjNCggbWl4KCBjb2xvcjAsIGNvbG9yMSwgbWlwRiApLCAxLjAgKTtcblx0XHR9XG5cdH1cbiNlbmRpZiIsZGVmYXVsdG5vcm1hbF92ZXJ0ZXg6InZlYzMgdHJhbnNmb3JtZWROb3JtYWwgPSBvYmplY3ROb3JtYWw7XG4jaWZkZWYgVVNFX0lOU1RBTkNJTkdcblx0bWF0MyBtID0gbWF0MyggaW5zdGFuY2VNYXRyaXggKTtcblx0dHJhbnNmb3JtZWROb3JtYWwgLz0gdmVjMyggZG90KCBtWyAwIF0sIG1bIDAgXSApLCBkb3QoIG1bIDEgXSwgbVsgMSBdICksIGRvdCggbVsgMiBdLCBtWyAyIF0gKSApO1xuXHR0cmFuc2Zvcm1lZE5vcm1hbCA9IG0gKiB0cmFuc2Zvcm1lZE5vcm1hbDtcbiNlbmRpZlxudHJhbnNmb3JtZWROb3JtYWwgPSBub3JtYWxNYXRyaXggKiB0cmFuc2Zvcm1lZE5vcm1hbDtcbiNpZmRlZiBGTElQX1NJREVEXG5cdHRyYW5zZm9ybWVkTm9ybWFsID0gLSB0cmFuc2Zvcm1lZE5vcm1hbDtcbiNlbmRpZlxuI2lmZGVmIFVTRV9UQU5HRU5UXG5cdHZlYzMgdHJhbnNmb3JtZWRUYW5nZW50ID0gKCBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KCBvYmplY3RUYW5nZW50LCAwLjAgKSApLnh5ejtcblx0I2lmZGVmIEZMSVBfU0lERURcblx0XHR0cmFuc2Zvcm1lZFRhbmdlbnQgPSAtIHRyYW5zZm9ybWVkVGFuZ2VudDtcblx0I2VuZGlmXG4jZW5kaWYiLGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleDoiI2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgZGlzcGxhY2VtZW50TWFwO1xuXHR1bmlmb3JtIGZsb2F0IGRpc3BsYWNlbWVudFNjYWxlO1xuXHR1bmlmb3JtIGZsb2F0IGRpc3BsYWNlbWVudEJpYXM7XG4jZW5kaWYiLGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg6IiNpZmRlZiBVU0VfRElTUExBQ0VNRU5UTUFQXG5cdHRyYW5zZm9ybWVkICs9IG5vcm1hbGl6ZSggb2JqZWN0Tm9ybWFsICkgKiAoIHRleHR1cmUyRCggZGlzcGxhY2VtZW50TWFwLCB2VXYgKS54ICogZGlzcGxhY2VtZW50U2NhbGUgKyBkaXNwbGFjZW1lbnRCaWFzICk7XG4jZW5kaWYiLGVtaXNzaXZlbWFwX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0VNSVNTSVZFTUFQXG5cdHZlYzQgZW1pc3NpdmVDb2xvciA9IHRleHR1cmUyRCggZW1pc3NpdmVNYXAsIHZVdiApO1xuXHRlbWlzc2l2ZUNvbG9yLnJnYiA9IGVtaXNzaXZlTWFwVGV4ZWxUb0xpbmVhciggZW1pc3NpdmVDb2xvciApLnJnYjtcblx0dG90YWxFbWlzc2l2ZVJhZGlhbmNlICo9IGVtaXNzaXZlQ29sb3IucmdiO1xuI2VuZGlmIixlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0VNSVNTSVZFTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGVtaXNzaXZlTWFwO1xuI2VuZGlmIixlbmNvZGluZ3NfZnJhZ21lbnQ6ImdsX0ZyYWdDb2xvciA9IGxpbmVhclRvT3V0cHV0VGV4ZWwoIGdsX0ZyYWdDb2xvciApOyIsZW5jb2RpbmdzX3BhcnNfZnJhZ21lbnQ6IlxudmVjNCBMaW5lYXJUb0xpbmVhciggaW4gdmVjNCB2YWx1ZSApIHtcblx0cmV0dXJuIHZhbHVlO1xufVxudmVjNCBHYW1tYVRvTGluZWFyKCBpbiB2ZWM0IHZhbHVlLCBpbiBmbG9hdCBnYW1tYUZhY3RvciApIHtcblx0cmV0dXJuIHZlYzQoIHBvdyggdmFsdWUucmdiLCB2ZWMzKCBnYW1tYUZhY3RvciApICksIHZhbHVlLmEgKTtcbn1cbnZlYzQgTGluZWFyVG9HYW1tYSggaW4gdmVjNCB2YWx1ZSwgaW4gZmxvYXQgZ2FtbWFGYWN0b3IgKSB7XG5cdHJldHVybiB2ZWM0KCBwb3coIHZhbHVlLnJnYiwgdmVjMyggMS4wIC8gZ2FtbWFGYWN0b3IgKSApLCB2YWx1ZS5hICk7XG59XG52ZWM0IHNSR0JUb0xpbmVhciggaW4gdmVjNCB2YWx1ZSApIHtcblx0cmV0dXJuIHZlYzQoIG1peCggcG93KCB2YWx1ZS5yZ2IgKiAwLjk0Nzg2NzI5ODYgKyB2ZWMzKCAwLjA1MjEzMjcwMTQgKSwgdmVjMyggMi40ICkgKSwgdmFsdWUucmdiICogMC4wNzczOTkzODA4LCB2ZWMzKCBsZXNzVGhhbkVxdWFsKCB2YWx1ZS5yZ2IsIHZlYzMoIDAuMDQwNDUgKSApICkgKSwgdmFsdWUuYSApO1xufVxudmVjNCBMaW5lYXJUb3NSR0IoIGluIHZlYzQgdmFsdWUgKSB7XG5cdHJldHVybiB2ZWM0KCBtaXgoIHBvdyggdmFsdWUucmdiLCB2ZWMzKCAwLjQxNjY2ICkgKSAqIDEuMDU1IC0gdmVjMyggMC4wNTUgKSwgdmFsdWUucmdiICogMTIuOTIsIHZlYzMoIGxlc3NUaGFuRXF1YWwoIHZhbHVlLnJnYiwgdmVjMyggMC4wMDMxMzA4ICkgKSApICksIHZhbHVlLmEgKTtcbn1cbnZlYzQgUkdCRVRvTGluZWFyKCBpbiB2ZWM0IHZhbHVlICkge1xuXHRyZXR1cm4gdmVjNCggdmFsdWUucmdiICogZXhwMiggdmFsdWUuYSAqIDI1NS4wIC0gMTI4LjAgKSwgMS4wICk7XG59XG52ZWM0IExpbmVhclRvUkdCRSggaW4gdmVjNCB2YWx1ZSApIHtcblx0ZmxvYXQgbWF4Q29tcG9uZW50ID0gbWF4KCBtYXgoIHZhbHVlLnIsIHZhbHVlLmcgKSwgdmFsdWUuYiApO1xuXHRmbG9hdCBmRXhwID0gY2xhbXAoIGNlaWwoIGxvZzIoIG1heENvbXBvbmVudCApICksIC0xMjguMCwgMTI3LjAgKTtcblx0cmV0dXJuIHZlYzQoIHZhbHVlLnJnYiAvIGV4cDIoIGZFeHAgKSwgKCBmRXhwICsgMTI4LjAgKSAvIDI1NS4wICk7XG59XG52ZWM0IFJHQk1Ub0xpbmVhciggaW4gdmVjNCB2YWx1ZSwgaW4gZmxvYXQgbWF4UmFuZ2UgKSB7XG5cdHJldHVybiB2ZWM0KCB2YWx1ZS5yZ2IgKiB2YWx1ZS5hICogbWF4UmFuZ2UsIDEuMCApO1xufVxudmVjNCBMaW5lYXJUb1JHQk0oIGluIHZlYzQgdmFsdWUsIGluIGZsb2F0IG1heFJhbmdlICkge1xuXHRmbG9hdCBtYXhSR0IgPSBtYXgoIHZhbHVlLnIsIG1heCggdmFsdWUuZywgdmFsdWUuYiApICk7XG5cdGZsb2F0IE0gPSBjbGFtcCggbWF4UkdCIC8gbWF4UmFuZ2UsIDAuMCwgMS4wICk7XG5cdE0gPSBjZWlsKCBNICogMjU1LjAgKSAvIDI1NS4wO1xuXHRyZXR1cm4gdmVjNCggdmFsdWUucmdiIC8gKCBNICogbWF4UmFuZ2UgKSwgTSApO1xufVxudmVjNCBSR0JEVG9MaW5lYXIoIGluIHZlYzQgdmFsdWUsIGluIGZsb2F0IG1heFJhbmdlICkge1xuXHRyZXR1cm4gdmVjNCggdmFsdWUucmdiICogKCAoIG1heFJhbmdlIC8gMjU1LjAgKSAvIHZhbHVlLmEgKSwgMS4wICk7XG59XG52ZWM0IExpbmVhclRvUkdCRCggaW4gdmVjNCB2YWx1ZSwgaW4gZmxvYXQgbWF4UmFuZ2UgKSB7XG5cdGZsb2F0IG1heFJHQiA9IG1heCggdmFsdWUuciwgbWF4KCB2YWx1ZS5nLCB2YWx1ZS5iICkgKTtcblx0ZmxvYXQgRCA9IG1heCggbWF4UmFuZ2UgLyBtYXhSR0IsIDEuMCApO1xuXHREID0gY2xhbXAoIGZsb29yKCBEICkgLyAyNTUuMCwgMC4wLCAxLjAgKTtcblx0cmV0dXJuIHZlYzQoIHZhbHVlLnJnYiAqICggRCAqICggMjU1LjAgLyBtYXhSYW5nZSApICksIEQgKTtcbn1cbmNvbnN0IG1hdDMgY0xvZ0x1dk0gPSBtYXQzKCAwLjIyMDksIDAuMzM5MCwgMC40MTg0LCAwLjExMzgsIDAuNjc4MCwgMC43MzE5LCAwLjAxMDIsIDAuMTEzMCwgMC4yOTY5ICk7XG52ZWM0IExpbmVhclRvTG9nTHV2KCBpbiB2ZWM0IHZhbHVlICkge1xuXHR2ZWMzIFhwX1lfWFlacCA9IGNMb2dMdXZNICogdmFsdWUucmdiO1xuXHRYcF9ZX1hZWnAgPSBtYXgoIFhwX1lfWFlacCwgdmVjMyggMWUtNiwgMWUtNiwgMWUtNiApICk7XG5cdHZlYzQgdlJlc3VsdDtcblx0dlJlc3VsdC54eSA9IFhwX1lfWFlacC54eSAvIFhwX1lfWFlacC56O1xuXHRmbG9hdCBMZSA9IDIuMCAqIGxvZzIoWHBfWV9YWVpwLnkpICsgMTI3LjA7XG5cdHZSZXN1bHQudyA9IGZyYWN0KCBMZSApO1xuXHR2UmVzdWx0LnogPSAoIExlIC0gKCBmbG9vciggdlJlc3VsdC53ICogMjU1LjAgKSApIC8gMjU1LjAgKSAvIDI1NS4wO1xuXHRyZXR1cm4gdlJlc3VsdDtcbn1cbmNvbnN0IG1hdDMgY0xvZ0x1dkludmVyc2VNID0gbWF0MyggNi4wMDE0LCAtMi43MDA4LCAtMS43OTk2LCAtMS4zMzIwLCAzLjEwMjksIC01Ljc3MjEsIDAuMzAwOCwgLTEuMDg4MiwgNS42MjY4ICk7XG52ZWM0IExvZ0x1dlRvTGluZWFyKCBpbiB2ZWM0IHZhbHVlICkge1xuXHRmbG9hdCBMZSA9IHZhbHVlLnogKiAyNTUuMCArIHZhbHVlLnc7XG5cdHZlYzMgWHBfWV9YWVpwO1xuXHRYcF9ZX1hZWnAueSA9IGV4cDIoICggTGUgLSAxMjcuMCApIC8gMi4wICk7XG5cdFhwX1lfWFlacC56ID0gWHBfWV9YWVpwLnkgLyB2YWx1ZS55O1xuXHRYcF9ZX1hZWnAueCA9IHZhbHVlLnggKiBYcF9ZX1hZWnAuejtcblx0dmVjMyB2UkdCID0gY0xvZ0x1dkludmVyc2VNICogWHBfWV9YWVpwLnJnYjtcblx0cmV0dXJuIHZlYzQoIG1heCggdlJHQiwgMC4wICksIDEuMCApO1xufSIsZW52bWFwX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0VOVk1BUFxuXHQjaWZkZWYgRU5WX1dPUkxEUE9TXG5cdFx0dmVjMyBjYW1lcmFUb0ZyYWc7XG5cdFx0aWYgKCBpc09ydGhvZ3JhcGhpYyApIHtcblx0XHRcdGNhbWVyYVRvRnJhZyA9IG5vcm1hbGl6ZSggdmVjMyggLSB2aWV3TWF0cml4WyAwIF1bIDIgXSwgLSB2aWV3TWF0cml4WyAxIF1bIDIgXSwgLSB2aWV3TWF0cml4WyAyIF1bIDIgXSApICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNhbWVyYVRvRnJhZyA9IG5vcm1hbGl6ZSggdldvcmxkUG9zaXRpb24gLSBjYW1lcmFQb3NpdGlvbiApO1xuXHRcdH1cblx0XHR2ZWMzIHdvcmxkTm9ybWFsID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggbm9ybWFsLCB2aWV3TWF0cml4ICk7XG5cdFx0I2lmZGVmIEVOVk1BUF9NT0RFX1JFRkxFQ1RJT05cblx0XHRcdHZlYzMgcmVmbGVjdFZlYyA9IHJlZmxlY3QoIGNhbWVyYVRvRnJhZywgd29ybGROb3JtYWwgKTtcblx0XHQjZWxzZVxuXHRcdFx0dmVjMyByZWZsZWN0VmVjID0gcmVmcmFjdCggY2FtZXJhVG9GcmFnLCB3b3JsZE5vcm1hbCwgcmVmcmFjdGlvblJhdGlvICk7XG5cdFx0I2VuZGlmXG5cdCNlbHNlXG5cdFx0dmVjMyByZWZsZWN0VmVjID0gdlJlZmxlY3Q7XG5cdCNlbmRpZlxuXHQjaWZkZWYgRU5WTUFQX1RZUEVfQ1VCRVxuXHRcdHZlYzQgZW52Q29sb3IgPSB0ZXh0dXJlQ3ViZSggZW52TWFwLCB2ZWMzKCBmbGlwRW52TWFwICogcmVmbGVjdFZlYy54LCByZWZsZWN0VmVjLnl6ICkgKTtcblx0I2VsaWYgZGVmaW5lZCggRU5WTUFQX1RZUEVfQ1VCRV9VViApXG5cdFx0dmVjNCBlbnZDb2xvciA9IHRleHR1cmVDdWJlVVYoIGVudk1hcCwgcmVmbGVjdFZlYywgMC4wICk7XG5cdCNlbHNlXG5cdFx0dmVjNCBlbnZDb2xvciA9IHZlYzQoIDAuMCApO1xuXHQjZW5kaWZcblx0I2lmbmRlZiBFTlZNQVBfVFlQRV9DVUJFX1VWXG5cdFx0ZW52Q29sb3IgPSBlbnZNYXBUZXhlbFRvTGluZWFyKCBlbnZDb2xvciApO1xuXHQjZW5kaWZcblx0I2lmZGVmIEVOVk1BUF9CTEVORElOR19NVUxUSVBMWVxuXHRcdG91dGdvaW5nTGlnaHQgPSBtaXgoIG91dGdvaW5nTGlnaHQsIG91dGdvaW5nTGlnaHQgKiBlbnZDb2xvci54eXosIHNwZWN1bGFyU3RyZW5ndGggKiByZWZsZWN0aXZpdHkgKTtcblx0I2VsaWYgZGVmaW5lZCggRU5WTUFQX0JMRU5ESU5HX01JWCApXG5cdFx0b3V0Z29pbmdMaWdodCA9IG1peCggb3V0Z29pbmdMaWdodCwgZW52Q29sb3IueHl6LCBzcGVjdWxhclN0cmVuZ3RoICogcmVmbGVjdGl2aXR5ICk7XG5cdCNlbGlmIGRlZmluZWQoIEVOVk1BUF9CTEVORElOR19BREQgKVxuXHRcdG91dGdvaW5nTGlnaHQgKz0gZW52Q29sb3IueHl6ICogc3BlY3VsYXJTdHJlbmd0aCAqIHJlZmxlY3Rpdml0eTtcblx0I2VuZGlmXG4jZW5kaWYiLGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9FTlZNQVBcblx0dW5pZm9ybSBmbG9hdCBlbnZNYXBJbnRlbnNpdHk7XG5cdHVuaWZvcm0gZmxvYXQgZmxpcEVudk1hcDtcblx0dW5pZm9ybSBpbnQgbWF4TWlwTGV2ZWw7XG5cdCNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFXG5cdFx0dW5pZm9ybSBzYW1wbGVyQ3ViZSBlbnZNYXA7XG5cdCNlbHNlXG5cdFx0dW5pZm9ybSBzYW1wbGVyMkQgZW52TWFwO1xuXHQjZW5kaWZcblx0XG4jZW5kaWYiLGVudm1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0VOVk1BUFxuXHR1bmlmb3JtIGZsb2F0IHJlZmxlY3Rpdml0eTtcblx0I2lmIGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVVNFX05PUk1BTE1BUCApIHx8IGRlZmluZWQoIFBIT05HIClcblx0XHQjZGVmaW5lIEVOVl9XT1JMRFBPU1xuXHQjZW5kaWZcblx0I2lmZGVmIEVOVl9XT1JMRFBPU1xuXHRcdHZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjtcblx0XHR1bmlmb3JtIGZsb2F0IHJlZnJhY3Rpb25SYXRpbztcblx0I2Vsc2Vcblx0XHR2YXJ5aW5nIHZlYzMgdlJlZmxlY3Q7XG5cdCNlbmRpZlxuI2VuZGlmIixlbnZtYXBfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfRU5WTUFQXG5cdCNpZiBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFVTRV9OT1JNQUxNQVAgKSB8fGRlZmluZWQoIFBIT05HIClcblx0XHQjZGVmaW5lIEVOVl9XT1JMRFBPU1xuXHQjZW5kaWZcblx0I2lmZGVmIEVOVl9XT1JMRFBPU1xuXHRcdFxuXHRcdHZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjtcblx0I2Vsc2Vcblx0XHR2YXJ5aW5nIHZlYzMgdlJlZmxlY3Q7XG5cdFx0dW5pZm9ybSBmbG9hdCByZWZyYWN0aW9uUmF0aW87XG5cdCNlbmRpZlxuI2VuZGlmIixlbnZtYXBfcGh5c2ljYWxfcGFyc19mcmFnbWVudDoiI2lmIGRlZmluZWQoIFVTRV9FTlZNQVAgKVxuXHQjaWZkZWYgRU5WTUFQX01PREVfUkVGUkFDVElPTlxuXHRcdHVuaWZvcm0gZmxvYXQgcmVmcmFjdGlvblJhdGlvO1xuXHQjZW5kaWZcblx0dmVjMyBnZXRMaWdodFByb2JlSW5kaXJlY3RJcnJhZGlhbmNlKCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBpbnQgbWF4TUlQTGV2ZWwgKSB7XG5cdFx0dmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIGdlb21ldHJ5Lm5vcm1hbCwgdmlld01hdHJpeCApO1xuXHRcdCNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFXG5cdFx0XHR2ZWMzIHF1ZXJ5VmVjID0gdmVjMyggZmxpcEVudk1hcCAqIHdvcmxkTm9ybWFsLngsIHdvcmxkTm9ybWFsLnl6ICk7XG5cdFx0XHQjaWZkZWYgVEVYVFVSRV9MT0RfRVhUXG5cdFx0XHRcdHZlYzQgZW52TWFwQ29sb3IgPSB0ZXh0dXJlQ3ViZUxvZEVYVCggZW52TWFwLCBxdWVyeVZlYywgZmxvYXQoIG1heE1JUExldmVsICkgKTtcblx0XHRcdCNlbHNlXG5cdFx0XHRcdHZlYzQgZW52TWFwQ29sb3IgPSB0ZXh0dXJlQ3ViZSggZW52TWFwLCBxdWVyeVZlYywgZmxvYXQoIG1heE1JUExldmVsICkgKTtcblx0XHRcdCNlbmRpZlxuXHRcdFx0ZW52TWFwQ29sb3IucmdiID0gZW52TWFwVGV4ZWxUb0xpbmVhciggZW52TWFwQ29sb3IgKS5yZ2I7XG5cdFx0I2VsaWYgZGVmaW5lZCggRU5WTUFQX1RZUEVfQ1VCRV9VViApXG5cdFx0XHR2ZWM0IGVudk1hcENvbG9yID0gdGV4dHVyZUN1YmVVViggZW52TWFwLCB3b3JsZE5vcm1hbCwgMS4wICk7XG5cdFx0I2Vsc2Vcblx0XHRcdHZlYzQgZW52TWFwQ29sb3IgPSB2ZWM0KCAwLjAgKTtcblx0XHQjZW5kaWZcblx0XHRyZXR1cm4gUEkgKiBlbnZNYXBDb2xvci5yZ2IgKiBlbnZNYXBJbnRlbnNpdHk7XG5cdH1cblx0ZmxvYXQgZ2V0U3BlY3VsYXJNSVBMZXZlbCggY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzLCBjb25zdCBpbiBpbnQgbWF4TUlQTGV2ZWwgKSB7XG5cdFx0ZmxvYXQgbWF4TUlQTGV2ZWxTY2FsYXIgPSBmbG9hdCggbWF4TUlQTGV2ZWwgKTtcblx0XHRmbG9hdCBzaWdtYSA9IFBJICogcm91Z2huZXNzICogcm91Z2huZXNzIC8gKCAxLjAgKyByb3VnaG5lc3MgKTtcblx0XHRmbG9hdCBkZXNpcmVkTUlQTGV2ZWwgPSBtYXhNSVBMZXZlbFNjYWxhciArIGxvZzIoIHNpZ21hICk7XG5cdFx0cmV0dXJuIGNsYW1wKCBkZXNpcmVkTUlQTGV2ZWwsIDAuMCwgbWF4TUlQTGV2ZWxTY2FsYXIgKTtcblx0fVxuXHR2ZWMzIGdldExpZ2h0UHJvYmVJbmRpcmVjdFJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGNvbnN0IGluIGludCBtYXhNSVBMZXZlbCApIHtcblx0XHQjaWZkZWYgRU5WTUFQX01PREVfUkVGTEVDVElPTlxuXHRcdFx0dmVjMyByZWZsZWN0VmVjID0gcmVmbGVjdCggLXZpZXdEaXIsIG5vcm1hbCApO1xuXHRcdFx0cmVmbGVjdFZlYyA9IG5vcm1hbGl6ZSggbWl4KCByZWZsZWN0VmVjLCBub3JtYWwsIHJvdWdobmVzcyAqIHJvdWdobmVzcykgKTtcblx0XHQjZWxzZVxuXHRcdFx0dmVjMyByZWZsZWN0VmVjID0gcmVmcmFjdCggLXZpZXdEaXIsIG5vcm1hbCwgcmVmcmFjdGlvblJhdGlvICk7XG5cdFx0I2VuZGlmXG5cdFx0cmVmbGVjdFZlYyA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIHJlZmxlY3RWZWMsIHZpZXdNYXRyaXggKTtcblx0XHRmbG9hdCBzcGVjdWxhck1JUExldmVsID0gZ2V0U3BlY3VsYXJNSVBMZXZlbCggcm91Z2huZXNzLCBtYXhNSVBMZXZlbCApO1xuXHRcdCNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFXG5cdFx0XHR2ZWMzIHF1ZXJ5UmVmbGVjdFZlYyA9IHZlYzMoIGZsaXBFbnZNYXAgKiByZWZsZWN0VmVjLngsIHJlZmxlY3RWZWMueXogKTtcblx0XHRcdCNpZmRlZiBURVhUVVJFX0xPRF9FWFRcblx0XHRcdFx0dmVjNCBlbnZNYXBDb2xvciA9IHRleHR1cmVDdWJlTG9kRVhUKCBlbnZNYXAsIHF1ZXJ5UmVmbGVjdFZlYywgc3BlY3VsYXJNSVBMZXZlbCApO1xuXHRcdFx0I2Vsc2Vcblx0XHRcdFx0dmVjNCBlbnZNYXBDb2xvciA9IHRleHR1cmVDdWJlKCBlbnZNYXAsIHF1ZXJ5UmVmbGVjdFZlYywgc3BlY3VsYXJNSVBMZXZlbCApO1xuXHRcdFx0I2VuZGlmXG5cdFx0XHRlbnZNYXBDb2xvci5yZ2IgPSBlbnZNYXBUZXhlbFRvTGluZWFyKCBlbnZNYXBDb2xvciApLnJnYjtcblx0XHQjZWxpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWIClcblx0XHRcdHZlYzQgZW52TWFwQ29sb3IgPSB0ZXh0dXJlQ3ViZVVWKCBlbnZNYXAsIHJlZmxlY3RWZWMsIHJvdWdobmVzcyApO1xuXHRcdCNlbmRpZlxuXHRcdHJldHVybiBlbnZNYXBDb2xvci5yZ2IgKiBlbnZNYXBJbnRlbnNpdHk7XG5cdH1cbiNlbmRpZiIsZW52bWFwX3ZlcnRleDoiI2lmZGVmIFVTRV9FTlZNQVBcblx0I2lmZGVmIEVOVl9XT1JMRFBPU1xuXHRcdHZXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbi54eXo7XG5cdCNlbHNlXG5cdFx0dmVjMyBjYW1lcmFUb1ZlcnRleDtcblx0XHRpZiAoIGlzT3J0aG9ncmFwaGljICkge1xuXHRcdFx0Y2FtZXJhVG9WZXJ0ZXggPSBub3JtYWxpemUoIHZlYzMoIC0gdmlld01hdHJpeFsgMCBdWyAyIF0sIC0gdmlld01hdHJpeFsgMSBdWyAyIF0sIC0gdmlld01hdHJpeFsgMiBdWyAyIF0gKSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjYW1lcmFUb1ZlcnRleCA9IG5vcm1hbGl6ZSggd29ybGRQb3NpdGlvbi54eXogLSBjYW1lcmFQb3NpdGlvbiApO1xuXHRcdH1cblx0XHR2ZWMzIHdvcmxkTm9ybWFsID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggdHJhbnNmb3JtZWROb3JtYWwsIHZpZXdNYXRyaXggKTtcblx0XHQjaWZkZWYgRU5WTUFQX01PREVfUkVGTEVDVElPTlxuXHRcdFx0dlJlZmxlY3QgPSByZWZsZWN0KCBjYW1lcmFUb1ZlcnRleCwgd29ybGROb3JtYWwgKTtcblx0XHQjZWxzZVxuXHRcdFx0dlJlZmxlY3QgPSByZWZyYWN0KCBjYW1lcmFUb1ZlcnRleCwgd29ybGROb3JtYWwsIHJlZnJhY3Rpb25SYXRpbyApO1xuXHRcdCNlbmRpZlxuXHQjZW5kaWZcbiNlbmRpZiIsZm9nX3ZlcnRleDoiI2lmZGVmIFVTRV9GT0dcblx0Zm9nRGVwdGggPSAtIG12UG9zaXRpb24uejtcbiNlbmRpZiIsZm9nX3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX0ZPR1xuXHR2YXJ5aW5nIGZsb2F0IGZvZ0RlcHRoO1xuI2VuZGlmIixmb2dfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfRk9HXG5cdCNpZmRlZiBGT0dfRVhQMlxuXHRcdGZsb2F0IGZvZ0ZhY3RvciA9IDEuMCAtIGV4cCggLSBmb2dEZW5zaXR5ICogZm9nRGVuc2l0eSAqIGZvZ0RlcHRoICogZm9nRGVwdGggKTtcblx0I2Vsc2Vcblx0XHRmbG9hdCBmb2dGYWN0b3IgPSBzbW9vdGhzdGVwKCBmb2dOZWFyLCBmb2dGYXIsIGZvZ0RlcHRoICk7XG5cdCNlbmRpZlxuXHRnbF9GcmFnQ29sb3IucmdiID0gbWl4KCBnbF9GcmFnQ29sb3IucmdiLCBmb2dDb2xvciwgZm9nRmFjdG9yICk7XG4jZW5kaWYiLGZvZ19wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0ZPR1xuXHR1bmlmb3JtIHZlYzMgZm9nQ29sb3I7XG5cdHZhcnlpbmcgZmxvYXQgZm9nRGVwdGg7XG5cdCNpZmRlZiBGT0dfRVhQMlxuXHRcdHVuaWZvcm0gZmxvYXQgZm9nRGVuc2l0eTtcblx0I2Vsc2Vcblx0XHR1bmlmb3JtIGZsb2F0IGZvZ05lYXI7XG5cdFx0dW5pZm9ybSBmbG9hdCBmb2dGYXI7XG5cdCNlbmRpZlxuI2VuZGlmIixncmFkaWVudG1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0dSQURJRU5UTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGdyYWRpZW50TWFwO1xuI2VuZGlmXG52ZWMzIGdldEdyYWRpZW50SXJyYWRpYW5jZSggdmVjMyBub3JtYWwsIHZlYzMgbGlnaHREaXJlY3Rpb24gKSB7XG5cdGZsb2F0IGRvdE5MID0gZG90KCBub3JtYWwsIGxpZ2h0RGlyZWN0aW9uICk7XG5cdHZlYzIgY29vcmQgPSB2ZWMyKCBkb3ROTCAqIDAuNSArIDAuNSwgMC4wICk7XG5cdCNpZmRlZiBVU0VfR1JBRElFTlRNQVBcblx0XHRyZXR1cm4gdGV4dHVyZTJEKCBncmFkaWVudE1hcCwgY29vcmQgKS5yZ2I7XG5cdCNlbHNlXG5cdFx0cmV0dXJuICggY29vcmQueCA8IDAuNyApID8gdmVjMyggMC43ICkgOiB2ZWMzKCAxLjAgKTtcblx0I2VuZGlmXG59IixsaWdodG1hcF9mcmFnbWVudDoiI2lmZGVmIFVTRV9MSUdIVE1BUFxuXHR2ZWM0IGxpZ2h0TWFwVGV4ZWw9IHRleHR1cmUyRCggbGlnaHRNYXAsIHZVdjIgKTtcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IFBJICogbGlnaHRNYXBUZXhlbFRvTGluZWFyKCBsaWdodE1hcFRleGVsICkucmdiICogbGlnaHRNYXBJbnRlbnNpdHk7XG4jZW5kaWYiLGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfTElHSFRNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgbGlnaHRNYXA7XG5cdHVuaWZvcm0gZmxvYXQgbGlnaHRNYXBJbnRlbnNpdHk7XG4jZW5kaWYiLGxpZ2h0c19sYW1iZXJ0X3ZlcnRleDoidmVjMyBkaWZmdXNlID0gdmVjMyggMS4wICk7XG5HZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5O1xuZ2VvbWV0cnkucG9zaXRpb24gPSBtdlBvc2l0aW9uLnh5ejtcbmdlb21ldHJ5Lm5vcm1hbCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWROb3JtYWwgKTtcbmdlb21ldHJ5LnZpZXdEaXIgPSAoIGlzT3J0aG9ncmFwaGljICkgPyB2ZWMzKCAwLCAwLCAxICkgOiBub3JtYWxpemUoIC1tdlBvc2l0aW9uLnh5eiApO1xuR2VvbWV0cmljQ29udGV4dCBiYWNrR2VvbWV0cnk7XG5iYWNrR2VvbWV0cnkucG9zaXRpb24gPSBnZW9tZXRyeS5wb3NpdGlvbjtcbmJhY2tHZW9tZXRyeS5ub3JtYWwgPSAtZ2VvbWV0cnkubm9ybWFsO1xuYmFja0dlb21ldHJ5LnZpZXdEaXIgPSBnZW9tZXRyeS52aWV3RGlyO1xudkxpZ2h0RnJvbnQgPSB2ZWMzKCAwLjAgKTtcbnZJbmRpcmVjdEZyb250ID0gdmVjMyggMC4wICk7XG4jaWZkZWYgRE9VQkxFX1NJREVEXG5cdHZMaWdodEJhY2sgPSB2ZWMzKCAwLjAgKTtcblx0dkluZGlyZWN0QmFjayA9IHZlYzMoIDAuMCApO1xuI2VuZGlmXG5JbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0O1xuZmxvYXQgZG90Tkw7XG52ZWMzIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcbnZJbmRpcmVjdEZyb250ICs9IGdldEFtYmllbnRMaWdodElycmFkaWFuY2UoIGFtYmllbnRMaWdodENvbG9yICk7XG52SW5kaXJlY3RGcm9udCArPSBnZXRMaWdodFByb2JlSXJyYWRpYW5jZSggbGlnaHRQcm9iZSwgZ2VvbWV0cnkgKTtcbiNpZmRlZiBET1VCTEVfU0lERURcblx0dkluZGlyZWN0QmFjayArPSBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBhbWJpZW50TGlnaHRDb2xvciApO1xuXHR2SW5kaXJlY3RCYWNrICs9IGdldExpZ2h0UHJvYmVJcnJhZGlhbmNlKCBsaWdodFByb2JlLCBiYWNrR2VvbWV0cnkgKTtcbiNlbmRpZlxuI2lmIE5VTV9QT0lOVF9MSUdIVFMgPiAwXG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUUzsgaSArKyApIHtcblx0XHRnZXRQb2ludERpcmVjdExpZ2h0SXJyYWRpYW5jZSggcG9pbnRMaWdodHNbIGkgXSwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7XG5cdFx0ZG90TkwgPSBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICk7XG5cdFx0ZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlID0gUEkgKiBkaXJlY3RMaWdodC5jb2xvcjtcblx0XHR2TGlnaHRGcm9udCArPSBzYXR1cmF0ZSggZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR2TGlnaHRCYWNrICs9IHNhdHVyYXRlKCAtZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcblx0XHQjZW5kaWZcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuI2VuZGlmXG4jaWYgTlVNX1NQT1RfTElHSFRTID4gMFxuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9TUE9UX0xJR0hUUzsgaSArKyApIHtcblx0XHRnZXRTcG90RGlyZWN0TGlnaHRJcnJhZGlhbmNlKCBzcG90TGlnaHRzWyBpIF0sIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApO1xuXHRcdGRvdE5MID0gZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApO1xuXHRcdGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZSA9IFBJICogZGlyZWN0TGlnaHQuY29sb3I7XG5cdFx0dkxpZ2h0RnJvbnQgKz0gc2F0dXJhdGUoIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG5cdFx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdFx0dkxpZ2h0QmFjayArPSBzYXR1cmF0ZSggLWRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG5cdFx0I2VuZGlmXG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcbiNlbmRpZlxuI2lmIE5VTV9ESVJfTElHSFRTID4gMFxuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9ESVJfTElHSFRTOyBpICsrICkge1xuXHRcdGdldERpcmVjdGlvbmFsRGlyZWN0TGlnaHRJcnJhZGlhbmNlKCBkaXJlY3Rpb25hbExpZ2h0c1sgaSBdLCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcblx0XHRkb3ROTCA9IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKTtcblx0XHRkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2UgPSBQSSAqIGRpcmVjdExpZ2h0LmNvbG9yO1xuXHRcdHZMaWdodEZyb250ICs9IHNhdHVyYXRlKCBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlO1xuXHRcdCNpZmRlZiBET1VCTEVfU0lERURcblx0XHRcdHZMaWdodEJhY2sgKz0gc2F0dXJhdGUoIC1kb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlO1xuXHRcdCNlbmRpZlxuXHR9XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG4jZW5kaWZcbiNpZiBOVU1fSEVNSV9MSUdIVFMgPiAwXG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0hFTUlfTElHSFRTOyBpICsrICkge1xuXHRcdHZJbmRpcmVjdEZyb250ICs9IGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgZ2VvbWV0cnkgKTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR2SW5kaXJlY3RCYWNrICs9IGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgYmFja0dlb21ldHJ5ICk7XG5cdFx0I2VuZGlmXG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcbiNlbmRpZiIsbGlnaHRzX3BhcnNfYmVnaW46InVuaWZvcm0gYm9vbCByZWNlaXZlU2hhZG93O1xudW5pZm9ybSB2ZWMzIGFtYmllbnRMaWdodENvbG9yO1xudW5pZm9ybSB2ZWMzIGxpZ2h0UHJvYmVbIDkgXTtcbnZlYzMgc2hHZXRJcnJhZGlhbmNlQXQoIGluIHZlYzMgbm9ybWFsLCBpbiB2ZWMzIHNoQ29lZmZpY2llbnRzWyA5IF0gKSB7XG5cdGZsb2F0IHggPSBub3JtYWwueCwgeSA9IG5vcm1hbC55LCB6ID0gbm9ybWFsLno7XG5cdHZlYzMgcmVzdWx0ID0gc2hDb2VmZmljaWVudHNbIDAgXSAqIDAuODg2MjI3O1xuXHRyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDEgXSAqIDIuMCAqIDAuNTExNjY0ICogeTtcblx0cmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyAyIF0gKiAyLjAgKiAwLjUxMTY2NCAqIHo7XG5cdHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgMyBdICogMi4wICogMC41MTE2NjQgKiB4O1xuXHRyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDQgXSAqIDIuMCAqIDAuNDI5MDQzICogeCAqIHk7XG5cdHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgNSBdICogMi4wICogMC40MjkwNDMgKiB5ICogejtcblx0cmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA2IF0gKiAoIDAuNzQzMTI1ICogeiAqIHogLSAwLjI0NzcwOCApO1xuXHRyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDcgXSAqIDIuMCAqIDAuNDI5MDQzICogeCAqIHo7XG5cdHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgOCBdICogMC40MjkwNDMgKiAoIHggKiB4IC0geSAqIHkgKTtcblx0cmV0dXJuIHJlc3VsdDtcbn1cbnZlYzMgZ2V0TGlnaHRQcm9iZUlycmFkaWFuY2UoIGNvbnN0IGluIHZlYzMgbGlnaHRQcm9iZVsgOSBdLCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5ICkge1xuXHR2ZWMzIHdvcmxkTm9ybWFsID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggZ2VvbWV0cnkubm9ybWFsLCB2aWV3TWF0cml4ICk7XG5cdHZlYzMgaXJyYWRpYW5jZSA9IHNoR2V0SXJyYWRpYW5jZUF0KCB3b3JsZE5vcm1hbCwgbGlnaHRQcm9iZSApO1xuXHRyZXR1cm4gaXJyYWRpYW5jZTtcbn1cbnZlYzMgZ2V0QW1iaWVudExpZ2h0SXJyYWRpYW5jZSggY29uc3QgaW4gdmVjMyBhbWJpZW50TGlnaHRDb2xvciApIHtcblx0dmVjMyBpcnJhZGlhbmNlID0gYW1iaWVudExpZ2h0Q29sb3I7XG5cdCNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUU1xuXHRcdGlycmFkaWFuY2UgKj0gUEk7XG5cdCNlbmRpZlxuXHRyZXR1cm4gaXJyYWRpYW5jZTtcbn1cbiNpZiBOVU1fRElSX0xJR0hUUyA+IDBcblx0c3RydWN0IERpcmVjdGlvbmFsTGlnaHQge1xuXHRcdHZlYzMgZGlyZWN0aW9uO1xuXHRcdHZlYzMgY29sb3I7XG5cdH07XG5cdHVuaWZvcm0gRGlyZWN0aW9uYWxMaWdodCBkaXJlY3Rpb25hbExpZ2h0c1sgTlVNX0RJUl9MSUdIVFMgXTtcblx0dm9pZCBnZXREaXJlY3Rpb25hbERpcmVjdExpZ2h0SXJyYWRpYW5jZSggY29uc3QgaW4gRGlyZWN0aW9uYWxMaWdodCBkaXJlY3Rpb25hbExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBvdXQgSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodCApIHtcblx0XHRkaXJlY3RMaWdodC5jb2xvciA9IGRpcmVjdGlvbmFsTGlnaHQuY29sb3I7XG5cdFx0ZGlyZWN0TGlnaHQuZGlyZWN0aW9uID0gZGlyZWN0aW9uYWxMaWdodC5kaXJlY3Rpb247XG5cdFx0ZGlyZWN0TGlnaHQudmlzaWJsZSA9IHRydWU7XG5cdH1cbiNlbmRpZlxuI2lmIE5VTV9QT0lOVF9MSUdIVFMgPiAwXG5cdHN0cnVjdCBQb2ludExpZ2h0IHtcblx0XHR2ZWMzIHBvc2l0aW9uO1xuXHRcdHZlYzMgY29sb3I7XG5cdFx0ZmxvYXQgZGlzdGFuY2U7XG5cdFx0ZmxvYXQgZGVjYXk7XG5cdH07XG5cdHVuaWZvcm0gUG9pbnRMaWdodCBwb2ludExpZ2h0c1sgTlVNX1BPSU5UX0xJR0hUUyBdO1xuXHR2b2lkIGdldFBvaW50RGlyZWN0TGlnaHRJcnJhZGlhbmNlKCBjb25zdCBpbiBQb2ludExpZ2h0IHBvaW50TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIG91dCBJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0ICkge1xuXHRcdHZlYzMgbFZlY3RvciA9IHBvaW50TGlnaHQucG9zaXRpb24gLSBnZW9tZXRyeS5wb3NpdGlvbjtcblx0XHRkaXJlY3RMaWdodC5kaXJlY3Rpb24gPSBub3JtYWxpemUoIGxWZWN0b3IgKTtcblx0XHRmbG9hdCBsaWdodERpc3RhbmNlID0gbGVuZ3RoKCBsVmVjdG9yICk7XG5cdFx0ZGlyZWN0TGlnaHQuY29sb3IgPSBwb2ludExpZ2h0LmNvbG9yO1xuXHRcdGRpcmVjdExpZ2h0LmNvbG9yICo9IHB1bmN0dWFsTGlnaHRJbnRlbnNpdHlUb0lycmFkaWFuY2VGYWN0b3IoIGxpZ2h0RGlzdGFuY2UsIHBvaW50TGlnaHQuZGlzdGFuY2UsIHBvaW50TGlnaHQuZGVjYXkgKTtcblx0XHRkaXJlY3RMaWdodC52aXNpYmxlID0gKCBkaXJlY3RMaWdodC5jb2xvciAhPSB2ZWMzKCAwLjAgKSApO1xuXHR9XG4jZW5kaWZcbiNpZiBOVU1fU1BPVF9MSUdIVFMgPiAwXG5cdHN0cnVjdCBTcG90TGlnaHQge1xuXHRcdHZlYzMgcG9zaXRpb247XG5cdFx0dmVjMyBkaXJlY3Rpb247XG5cdFx0dmVjMyBjb2xvcjtcblx0XHRmbG9hdCBkaXN0YW5jZTtcblx0XHRmbG9hdCBkZWNheTtcblx0XHRmbG9hdCBjb25lQ29zO1xuXHRcdGZsb2F0IHBlbnVtYnJhQ29zO1xuXHR9O1xuXHR1bmlmb3JtIFNwb3RMaWdodCBzcG90TGlnaHRzWyBOVU1fU1BPVF9MSUdIVFMgXTtcblx0dm9pZCBnZXRTcG90RGlyZWN0TGlnaHRJcnJhZGlhbmNlKCBjb25zdCBpbiBTcG90TGlnaHQgc3BvdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBvdXQgSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodCApIHtcblx0XHR2ZWMzIGxWZWN0b3IgPSBzcG90TGlnaHQucG9zaXRpb24gLSBnZW9tZXRyeS5wb3NpdGlvbjtcblx0XHRkaXJlY3RMaWdodC5kaXJlY3Rpb24gPSBub3JtYWxpemUoIGxWZWN0b3IgKTtcblx0XHRmbG9hdCBsaWdodERpc3RhbmNlID0gbGVuZ3RoKCBsVmVjdG9yICk7XG5cdFx0ZmxvYXQgYW5nbGVDb3MgPSBkb3QoIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiwgc3BvdExpZ2h0LmRpcmVjdGlvbiApO1xuXHRcdGlmICggYW5nbGVDb3MgPiBzcG90TGlnaHQuY29uZUNvcyApIHtcblx0XHRcdGZsb2F0IHNwb3RFZmZlY3QgPSBzbW9vdGhzdGVwKCBzcG90TGlnaHQuY29uZUNvcywgc3BvdExpZ2h0LnBlbnVtYnJhQ29zLCBhbmdsZUNvcyApO1xuXHRcdFx0ZGlyZWN0TGlnaHQuY29sb3IgPSBzcG90TGlnaHQuY29sb3I7XG5cdFx0XHRkaXJlY3RMaWdodC5jb2xvciAqPSBzcG90RWZmZWN0ICogcHVuY3R1YWxMaWdodEludGVuc2l0eVRvSXJyYWRpYW5jZUZhY3RvciggbGlnaHREaXN0YW5jZSwgc3BvdExpZ2h0LmRpc3RhbmNlLCBzcG90TGlnaHQuZGVjYXkgKTtcblx0XHRcdGRpcmVjdExpZ2h0LnZpc2libGUgPSB0cnVlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkaXJlY3RMaWdodC5jb2xvciA9IHZlYzMoIDAuMCApO1xuXHRcdFx0ZGlyZWN0TGlnaHQudmlzaWJsZSA9IGZhbHNlO1xuXHRcdH1cblx0fVxuI2VuZGlmXG4jaWYgTlVNX1JFQ1RfQVJFQV9MSUdIVFMgPiAwXG5cdHN0cnVjdCBSZWN0QXJlYUxpZ2h0IHtcblx0XHR2ZWMzIGNvbG9yO1xuXHRcdHZlYzMgcG9zaXRpb247XG5cdFx0dmVjMyBoYWxmV2lkdGg7XG5cdFx0dmVjMyBoYWxmSGVpZ2h0O1xuXHR9O1xuXHR1bmlmb3JtIHNhbXBsZXIyRCBsdGNfMTtcdHVuaWZvcm0gc2FtcGxlcjJEIGx0Y18yO1xuXHR1bmlmb3JtIFJlY3RBcmVhTGlnaHQgcmVjdEFyZWFMaWdodHNbIE5VTV9SRUNUX0FSRUFfTElHSFRTIF07XG4jZW5kaWZcbiNpZiBOVU1fSEVNSV9MSUdIVFMgPiAwXG5cdHN0cnVjdCBIZW1pc3BoZXJlTGlnaHQge1xuXHRcdHZlYzMgZGlyZWN0aW9uO1xuXHRcdHZlYzMgc2t5Q29sb3I7XG5cdFx0dmVjMyBncm91bmRDb2xvcjtcblx0fTtcblx0dW5pZm9ybSBIZW1pc3BoZXJlTGlnaHQgaGVtaXNwaGVyZUxpZ2h0c1sgTlVNX0hFTUlfTElHSFRTIF07XG5cdHZlYzMgZ2V0SGVtaXNwaGVyZUxpZ2h0SXJyYWRpYW5jZSggY29uc3QgaW4gSGVtaXNwaGVyZUxpZ2h0IGhlbWlMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSApIHtcblx0XHRmbG9hdCBkb3ROTCA9IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBoZW1pTGlnaHQuZGlyZWN0aW9uICk7XG5cdFx0ZmxvYXQgaGVtaURpZmZ1c2VXZWlnaHQgPSAwLjUgKiBkb3ROTCArIDAuNTtcblx0XHR2ZWMzIGlycmFkaWFuY2UgPSBtaXgoIGhlbWlMaWdodC5ncm91bmRDb2xvciwgaGVtaUxpZ2h0LnNreUNvbG9yLCBoZW1pRGlmZnVzZVdlaWdodCApO1xuXHRcdCNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUU1xuXHRcdFx0aXJyYWRpYW5jZSAqPSBQSTtcblx0XHQjZW5kaWZcblx0XHRyZXR1cm4gaXJyYWRpYW5jZTtcblx0fVxuI2VuZGlmIixsaWdodHNfdG9vbl9mcmFnbWVudDoiVG9vbk1hdGVyaWFsIG1hdGVyaWFsO1xubWF0ZXJpYWwuZGlmZnVzZUNvbG9yID0gZGlmZnVzZUNvbG9yLnJnYjsiLGxpZ2h0c190b29uX3BhcnNfZnJhZ21lbnQ6InZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcbiNlbmRpZlxuc3RydWN0IFRvb25NYXRlcmlhbCB7XG5cdHZlYzMgZGlmZnVzZUNvbG9yO1xufTtcbnZvaWQgUkVfRGlyZWN0X1Rvb24oIGNvbnN0IGluIEluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFRvb25NYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7XG5cdHZlYzMgaXJyYWRpYW5jZSA9IGdldEdyYWRpZW50SXJyYWRpYW5jZSggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSAqIGRpcmVjdExpZ2h0LmNvbG9yO1xuXHQjaWZuZGVmIFBIWVNJQ0FMTFlfQ09SUkVDVF9MSUdIVFNcblx0XHRpcnJhZGlhbmNlICo9IFBJO1xuXHQjZW5kaWZcblx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9EaWZmdXNlX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xufVxudm9pZCBSRV9JbmRpcmVjdERpZmZ1c2VfVG9vbiggY29uc3QgaW4gdmVjMyBpcnJhZGlhbmNlLCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBUb29uTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfRGlmZnVzZV9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTtcbn1cbiNkZWZpbmUgUkVfRGlyZWN0XHRcdFx0XHRSRV9EaXJlY3RfVG9vblxuI2RlZmluZSBSRV9JbmRpcmVjdERpZmZ1c2VcdFx0UkVfSW5kaXJlY3REaWZmdXNlX1Rvb25cbiNkZWZpbmUgTWF0ZXJpYWxfTGlnaHRQcm9iZUxPRCggbWF0ZXJpYWwgKVx0KDApIixsaWdodHNfcGhvbmdfZnJhZ21lbnQ6IkJsaW5uUGhvbmdNYXRlcmlhbCBtYXRlcmlhbDtcbm1hdGVyaWFsLmRpZmZ1c2VDb2xvciA9IGRpZmZ1c2VDb2xvci5yZ2I7XG5tYXRlcmlhbC5zcGVjdWxhckNvbG9yID0gc3BlY3VsYXI7XG5tYXRlcmlhbC5zcGVjdWxhclNoaW5pbmVzcyA9IHNoaW5pbmVzcztcbm1hdGVyaWFsLnNwZWN1bGFyU3RyZW5ndGggPSBzcGVjdWxhclN0cmVuZ3RoOyIsbGlnaHRzX3Bob25nX3BhcnNfZnJhZ21lbnQ6InZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcbiNlbmRpZlxuc3RydWN0IEJsaW5uUGhvbmdNYXRlcmlhbCB7XG5cdHZlYzMgZGlmZnVzZUNvbG9yO1xuXHR2ZWMzIHNwZWN1bGFyQ29sb3I7XG5cdGZsb2F0IHNwZWN1bGFyU2hpbmluZXNzO1xuXHRmbG9hdCBzcGVjdWxhclN0cmVuZ3RoO1xufTtcbnZvaWQgUkVfRGlyZWN0X0JsaW5uUGhvbmcoIGNvbnN0IGluIEluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIEJsaW5uUGhvbmdNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7XG5cdGZsb2F0IGRvdE5MID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSApO1xuXHR2ZWMzIGlycmFkaWFuY2UgPSBkb3ROTCAqIGRpcmVjdExpZ2h0LmNvbG9yO1xuXHQjaWZuZGVmIFBIWVNJQ0FMTFlfQ09SUkVDVF9MSUdIVFNcblx0XHRpcnJhZGlhbmNlICo9IFBJO1xuXHQjZW5kaWZcblx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9EaWZmdXNlX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xuXHRyZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArPSBpcnJhZGlhbmNlICogQlJERl9TcGVjdWxhcl9CbGlublBob25nKCBkaXJlY3RMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyU2hpbmluZXNzICkgKiBtYXRlcmlhbC5zcGVjdWxhclN0cmVuZ3RoO1xufVxudm9pZCBSRV9JbmRpcmVjdERpZmZ1c2VfQmxpbm5QaG9uZyggY29uc3QgaW4gdmVjMyBpcnJhZGlhbmNlLCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBCbGlublBob25nTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfRGlmZnVzZV9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTtcbn1cbiNkZWZpbmUgUkVfRGlyZWN0XHRcdFx0XHRSRV9EaXJlY3RfQmxpbm5QaG9uZ1xuI2RlZmluZSBSRV9JbmRpcmVjdERpZmZ1c2VcdFx0UkVfSW5kaXJlY3REaWZmdXNlX0JsaW5uUGhvbmdcbiNkZWZpbmUgTWF0ZXJpYWxfTGlnaHRQcm9iZUxPRCggbWF0ZXJpYWwgKVx0KDApIixsaWdodHNfcGh5c2ljYWxfZnJhZ21lbnQ6IlBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWw7XG5tYXRlcmlhbC5kaWZmdXNlQ29sb3IgPSBkaWZmdXNlQ29sb3IucmdiICogKCAxLjAgLSBtZXRhbG5lc3NGYWN0b3IgKTtcbnZlYzMgZHh5ID0gbWF4KCBhYnMoIGRGZHgoIGdlb21ldHJ5Tm9ybWFsICkgKSwgYWJzKCBkRmR5KCBnZW9tZXRyeU5vcm1hbCApICkgKTtcbmZsb2F0IGdlb21ldHJ5Um91Z2huZXNzID0gbWF4KCBtYXgoIGR4eS54LCBkeHkueSApLCBkeHkueiApO1xubWF0ZXJpYWwuc3BlY3VsYXJSb3VnaG5lc3MgPSBtYXgoIHJvdWdobmVzc0ZhY3RvciwgMC4wNTI1ICk7bWF0ZXJpYWwuc3BlY3VsYXJSb3VnaG5lc3MgKz0gZ2VvbWV0cnlSb3VnaG5lc3M7XG5tYXRlcmlhbC5zcGVjdWxhclJvdWdobmVzcyA9IG1pbiggbWF0ZXJpYWwuc3BlY3VsYXJSb3VnaG5lc3MsIDEuMCApO1xuI2lmZGVmIFJFRkxFQ1RJVklUWVxuXHRtYXRlcmlhbC5zcGVjdWxhckNvbG9yID0gbWl4KCB2ZWMzKCBNQVhJTVVNX1NQRUNVTEFSX0NPRUZGSUNJRU5UICogcG93MiggcmVmbGVjdGl2aXR5ICkgKSwgZGlmZnVzZUNvbG9yLnJnYiwgbWV0YWxuZXNzRmFjdG9yICk7XG4jZWxzZVxuXHRtYXRlcmlhbC5zcGVjdWxhckNvbG9yID0gbWl4KCB2ZWMzKCBERUZBVUxUX1NQRUNVTEFSX0NPRUZGSUNJRU5UICksIGRpZmZ1c2VDb2xvci5yZ2IsIG1ldGFsbmVzc0ZhY3RvciApO1xuI2VuZGlmXG4jaWZkZWYgQ0xFQVJDT0FUXG5cdG1hdGVyaWFsLmNsZWFyY29hdCA9IGNsZWFyY29hdDtcblx0bWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzID0gY2xlYXJjb2F0Um91Z2huZXNzO1xuXHQjaWZkZWYgVVNFX0NMRUFSQ09BVE1BUFxuXHRcdG1hdGVyaWFsLmNsZWFyY29hdCAqPSB0ZXh0dXJlMkQoIGNsZWFyY29hdE1hcCwgdlV2ICkueDtcblx0I2VuZGlmXG5cdCNpZmRlZiBVU0VfQ0xFQVJDT0FUX1JPVUdITkVTU01BUFxuXHRcdG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyAqPSB0ZXh0dXJlMkQoIGNsZWFyY29hdFJvdWdobmVzc01hcCwgdlV2ICkueTtcblx0I2VuZGlmXG5cdG1hdGVyaWFsLmNsZWFyY29hdCA9IHNhdHVyYXRlKCBtYXRlcmlhbC5jbGVhcmNvYXQgKTtcdG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyA9IG1heCggbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzLCAwLjA1MjUgKTtcblx0bWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzICs9IGdlb21ldHJ5Um91Z2huZXNzO1xuXHRtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgPSBtaW4oIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcywgMS4wICk7XG4jZW5kaWZcbiNpZmRlZiBVU0VfU0hFRU5cblx0bWF0ZXJpYWwuc2hlZW5Db2xvciA9IHNoZWVuO1xuI2VuZGlmIixsaWdodHNfcGh5c2ljYWxfcGFyc19mcmFnbWVudDoic3RydWN0IFBoeXNpY2FsTWF0ZXJpYWwge1xuXHR2ZWMzIGRpZmZ1c2VDb2xvcjtcblx0ZmxvYXQgc3BlY3VsYXJSb3VnaG5lc3M7XG5cdHZlYzMgc3BlY3VsYXJDb2xvcjtcbiNpZmRlZiBDTEVBUkNPQVRcblx0ZmxvYXQgY2xlYXJjb2F0O1xuXHRmbG9hdCBjbGVhcmNvYXRSb3VnaG5lc3M7XG4jZW5kaWZcbiNpZmRlZiBVU0VfU0hFRU5cblx0dmVjMyBzaGVlbkNvbG9yO1xuI2VuZGlmXG59O1xuI2RlZmluZSBNQVhJTVVNX1NQRUNVTEFSX0NPRUZGSUNJRU5UIDAuMTZcbiNkZWZpbmUgREVGQVVMVF9TUEVDVUxBUl9DT0VGRklDSUVOVCAwLjA0XG5mbG9hdCBjbGVhcmNvYXRESFJBcHByb3goIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcywgY29uc3QgaW4gZmxvYXQgZG90TkwgKSB7XG5cdHJldHVybiBERUZBVUxUX1NQRUNVTEFSX0NPRUZGSUNJRU5UICsgKCAxLjAgLSBERUZBVUxUX1NQRUNVTEFSX0NPRUZGSUNJRU5UICkgKiAoIHBvdyggMS4wIC0gZG90TkwsIDUuMCApICogcG93KCAxLjAgLSByb3VnaG5lc3MsIDIuMCApICk7XG59XG4jaWYgTlVNX1JFQ1RfQVJFQV9MSUdIVFMgPiAwXG5cdHZvaWQgUkVfRGlyZWN0X1JlY3RBcmVhX1BoeXNpY2FsKCBjb25zdCBpbiBSZWN0QXJlYUxpZ2h0IHJlY3RBcmVhTGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xuXHRcdHZlYzMgbm9ybWFsID0gZ2VvbWV0cnkubm9ybWFsO1xuXHRcdHZlYzMgdmlld0RpciA9IGdlb21ldHJ5LnZpZXdEaXI7XG5cdFx0dmVjMyBwb3NpdGlvbiA9IGdlb21ldHJ5LnBvc2l0aW9uO1xuXHRcdHZlYzMgbGlnaHRQb3MgPSByZWN0QXJlYUxpZ2h0LnBvc2l0aW9uO1xuXHRcdHZlYzMgaGFsZldpZHRoID0gcmVjdEFyZWFMaWdodC5oYWxmV2lkdGg7XG5cdFx0dmVjMyBoYWxmSGVpZ2h0ID0gcmVjdEFyZWFMaWdodC5oYWxmSGVpZ2h0O1xuXHRcdHZlYzMgbGlnaHRDb2xvciA9IHJlY3RBcmVhTGlnaHQuY29sb3I7XG5cdFx0ZmxvYXQgcm91Z2huZXNzID0gbWF0ZXJpYWwuc3BlY3VsYXJSb3VnaG5lc3M7XG5cdFx0dmVjMyByZWN0Q29vcmRzWyA0IF07XG5cdFx0cmVjdENvb3Jkc1sgMCBdID0gbGlnaHRQb3MgKyBoYWxmV2lkdGggLSBoYWxmSGVpZ2h0O1x0XHRyZWN0Q29vcmRzWyAxIF0gPSBsaWdodFBvcyAtIGhhbGZXaWR0aCAtIGhhbGZIZWlnaHQ7XG5cdFx0cmVjdENvb3Jkc1sgMiBdID0gbGlnaHRQb3MgLSBoYWxmV2lkdGggKyBoYWxmSGVpZ2h0O1xuXHRcdHJlY3RDb29yZHNbIDMgXSA9IGxpZ2h0UG9zICsgaGFsZldpZHRoICsgaGFsZkhlaWdodDtcblx0XHR2ZWMyIHV2ID0gTFRDX1V2KCBub3JtYWwsIHZpZXdEaXIsIHJvdWdobmVzcyApO1xuXHRcdHZlYzQgdDEgPSB0ZXh0dXJlMkQoIGx0Y18xLCB1diApO1xuXHRcdHZlYzQgdDIgPSB0ZXh0dXJlMkQoIGx0Y18yLCB1diApO1xuXHRcdG1hdDMgbUludiA9IG1hdDMoXG5cdFx0XHR2ZWMzKCB0MS54LCAwLCB0MS55ICksXG5cdFx0XHR2ZWMzKCAgICAwLCAxLCAgICAwICksXG5cdFx0XHR2ZWMzKCB0MS56LCAwLCB0MS53IClcblx0XHQpO1xuXHRcdHZlYzMgZnJlc25lbCA9ICggbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciAqIHQyLnggKyAoIHZlYzMoIDEuMCApIC0gbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciApICogdDIueSApO1xuXHRcdHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICs9IGxpZ2h0Q29sb3IgKiBmcmVzbmVsICogTFRDX0V2YWx1YXRlKCBub3JtYWwsIHZpZXdEaXIsIHBvc2l0aW9uLCBtSW52LCByZWN0Q29vcmRzICk7XG5cdFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArPSBsaWdodENvbG9yICogbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICogTFRDX0V2YWx1YXRlKCBub3JtYWwsIHZpZXdEaXIsIHBvc2l0aW9uLCBtYXQzKCAxLjAgKSwgcmVjdENvb3JkcyApO1xuXHR9XG4jZW5kaWZcbnZvaWQgUkVfRGlyZWN0X1BoeXNpY2FsKCBjb25zdCBpbiBJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0ZmxvYXQgZG90TkwgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApICk7XG5cdHZlYzMgaXJyYWRpYW5jZSA9IGRvdE5MICogZGlyZWN0TGlnaHQuY29sb3I7XG5cdCNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUU1xuXHRcdGlycmFkaWFuY2UgKj0gUEk7XG5cdCNlbmRpZlxuXHQjaWZkZWYgQ0xFQVJDT0FUXG5cdFx0ZmxvYXQgY2NEb3ROTCA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5LmNsZWFyY29hdE5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICkgKTtcblx0XHR2ZWMzIGNjSXJyYWRpYW5jZSA9IGNjRG90TkwgKiBkaXJlY3RMaWdodC5jb2xvcjtcblx0XHQjaWZuZGVmIFBIWVNJQ0FMTFlfQ09SUkVDVF9MSUdIVFNcblx0XHRcdGNjSXJyYWRpYW5jZSAqPSBQSTtcblx0XHQjZW5kaWZcblx0XHRmbG9hdCBjbGVhcmNvYXRESFIgPSBtYXRlcmlhbC5jbGVhcmNvYXQgKiBjbGVhcmNvYXRESFJBcHByb3goIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcywgY2NEb3ROTCApO1xuXHRcdHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICs9IGNjSXJyYWRpYW5jZSAqIG1hdGVyaWFsLmNsZWFyY29hdCAqIEJSREZfU3BlY3VsYXJfR0dYKCBkaXJlY3RMaWdodCwgZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCB2ZWMzKCBERUZBVUxUX1NQRUNVTEFSX0NPRUZGSUNJRU5UICksIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyApO1xuXHQjZWxzZVxuXHRcdGZsb2F0IGNsZWFyY29hdERIUiA9IDAuMDtcblx0I2VuZGlmXG5cdCNpZmRlZiBVU0VfU0hFRU5cblx0XHRyZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArPSAoIDEuMCAtIGNsZWFyY29hdERIUiApICogaXJyYWRpYW5jZSAqIEJSREZfU3BlY3VsYXJfU2hlZW4oXG5cdFx0XHRtYXRlcmlhbC5zcGVjdWxhclJvdWdobmVzcyxcblx0XHRcdGRpcmVjdExpZ2h0LmRpcmVjdGlvbixcblx0XHRcdGdlb21ldHJ5LFxuXHRcdFx0bWF0ZXJpYWwuc2hlZW5Db2xvclxuXHRcdCk7XG5cdCNlbHNlXG5cdFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKz0gKCAxLjAgLSBjbGVhcmNvYXRESFIgKSAqIGlycmFkaWFuY2UgKiBCUkRGX1NwZWN1bGFyX0dHWCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5Lm5vcm1hbCwgbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciwgbWF0ZXJpYWwuc3BlY3VsYXJSb3VnaG5lc3MpO1xuXHQjZW5kaWZcblx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArPSAoIDEuMCAtIGNsZWFyY29hdERIUiApICogaXJyYWRpYW5jZSAqIEJSREZfRGlmZnVzZV9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTtcbn1cbnZvaWQgUkVfSW5kaXJlY3REaWZmdXNlX1BoeXNpY2FsKCBjb25zdCBpbiB2ZWMzIGlycmFkaWFuY2UsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfRGlmZnVzZV9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTtcbn1cbnZvaWQgUkVfSW5kaXJlY3RTcGVjdWxhcl9QaHlzaWNhbCggY29uc3QgaW4gdmVjMyByYWRpYW5jZSwgY29uc3QgaW4gdmVjMyBpcnJhZGlhbmNlLCBjb25zdCBpbiB2ZWMzIGNsZWFyY29hdFJhZGlhbmNlLCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCkge1xuXHQjaWZkZWYgQ0xFQVJDT0FUXG5cdFx0ZmxvYXQgY2NEb3ROViA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5LmNsZWFyY29hdE5vcm1hbCwgZ2VvbWV0cnkudmlld0RpciApICk7XG5cdFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArPSBjbGVhcmNvYXRSYWRpYW5jZSAqIG1hdGVyaWFsLmNsZWFyY29hdCAqIEJSREZfU3BlY3VsYXJfR0dYX0Vudmlyb25tZW50KCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIHZlYzMoIERFRkFVTFRfU1BFQ1VMQVJfQ09FRkZJQ0lFTlQgKSwgbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzICk7XG5cdFx0ZmxvYXQgY2NEb3ROTCA9IGNjRG90TlY7XG5cdFx0ZmxvYXQgY2xlYXJjb2F0REhSID0gbWF0ZXJpYWwuY2xlYXJjb2F0ICogY2xlYXJjb2F0REhSQXBwcm94KCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MsIGNjRG90TkwgKTtcblx0I2Vsc2Vcblx0XHRmbG9hdCBjbGVhcmNvYXRESFIgPSAwLjA7XG5cdCNlbmRpZlxuXHRmbG9hdCBjbGVhcmNvYXRJbnYgPSAxLjAgLSBjbGVhcmNvYXRESFI7XG5cdHZlYzMgc2luZ2xlU2NhdHRlcmluZyA9IHZlYzMoIDAuMCApO1xuXHR2ZWMzIG11bHRpU2NhdHRlcmluZyA9IHZlYzMoIDAuMCApO1xuXHR2ZWMzIGNvc2luZVdlaWdodGVkSXJyYWRpYW5jZSA9IGlycmFkaWFuY2UgKiBSRUNJUFJPQ0FMX1BJO1xuXHRCUkRGX1NwZWN1bGFyX011bHRpc2NhdHRlcmluZ19FbnZpcm9ubWVudCggZ2VvbWV0cnksIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyUm91Z2huZXNzLCBzaW5nbGVTY2F0dGVyaW5nLCBtdWx0aVNjYXR0ZXJpbmcgKTtcblx0dmVjMyBkaWZmdXNlID0gbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICogKCAxLjAgLSAoIHNpbmdsZVNjYXR0ZXJpbmcgKyBtdWx0aVNjYXR0ZXJpbmcgKSApO1xuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICs9IGNsZWFyY29hdEludiAqIHJhZGlhbmNlICogc2luZ2xlU2NhdHRlcmluZztcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArPSBtdWx0aVNjYXR0ZXJpbmcgKiBjb3NpbmVXZWlnaHRlZElycmFkaWFuY2U7XG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBkaWZmdXNlICogY29zaW5lV2VpZ2h0ZWRJcnJhZGlhbmNlO1xufVxuI2RlZmluZSBSRV9EaXJlY3RcdFx0XHRcdFJFX0RpcmVjdF9QaHlzaWNhbFxuI2RlZmluZSBSRV9EaXJlY3RfUmVjdEFyZWFcdFx0UkVfRGlyZWN0X1JlY3RBcmVhX1BoeXNpY2FsXG4jZGVmaW5lIFJFX0luZGlyZWN0RGlmZnVzZVx0XHRSRV9JbmRpcmVjdERpZmZ1c2VfUGh5c2ljYWxcbiNkZWZpbmUgUkVfSW5kaXJlY3RTcGVjdWxhclx0XHRSRV9JbmRpcmVjdFNwZWN1bGFyX1BoeXNpY2FsXG5mbG9hdCBjb21wdXRlU3BlY3VsYXJPY2NsdXNpb24oIGNvbnN0IGluIGZsb2F0IGRvdE5WLCBjb25zdCBpbiBmbG9hdCBhbWJpZW50T2NjbHVzaW9uLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7XG5cdHJldHVybiBzYXR1cmF0ZSggcG93KCBkb3ROViArIGFtYmllbnRPY2NsdXNpb24sIGV4cDIoIC0gMTYuMCAqIHJvdWdobmVzcyAtIDEuMCApICkgLSAxLjAgKyBhbWJpZW50T2NjbHVzaW9uICk7XG59IixsaWdodHNfZnJhZ21lbnRfYmVnaW46IlxuR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeTtcbmdlb21ldHJ5LnBvc2l0aW9uID0gLSB2Vmlld1Bvc2l0aW9uO1xuZ2VvbWV0cnkubm9ybWFsID0gbm9ybWFsO1xuZ2VvbWV0cnkudmlld0RpciA9ICggaXNPcnRob2dyYXBoaWMgKSA/IHZlYzMoIDAsIDAsIDEgKSA6IG5vcm1hbGl6ZSggdlZpZXdQb3NpdGlvbiApO1xuI2lmZGVmIENMRUFSQ09BVFxuXHRnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwgPSBjbGVhcmNvYXROb3JtYWw7XG4jZW5kaWZcbkluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQ7XG4jaWYgKCBOVU1fUE9JTlRfTElHSFRTID4gMCApICYmIGRlZmluZWQoIFJFX0RpcmVjdCApXG5cdFBvaW50TGlnaHQgcG9pbnRMaWdodDtcblx0I2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDBcblx0UG9pbnRMaWdodFNoYWRvdyBwb2ludExpZ2h0U2hhZG93O1xuXHQjZW5kaWZcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fUE9JTlRfTElHSFRTOyBpICsrICkge1xuXHRcdHBvaW50TGlnaHQgPSBwb2ludExpZ2h0c1sgaSBdO1xuXHRcdGdldFBvaW50RGlyZWN0TGlnaHRJcnJhZGlhbmNlKCBwb2ludExpZ2h0LCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcblx0XHQjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmICggVU5ST0xMRURfTE9PUF9JTkRFWCA8IE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIClcblx0XHRwb2ludExpZ2h0U2hhZG93ID0gcG9pbnRMaWdodFNoYWRvd3NbIGkgXTtcblx0XHRkaXJlY3RMaWdodC5jb2xvciAqPSBhbGwoIGJ2ZWMyKCBkaXJlY3RMaWdodC52aXNpYmxlLCByZWNlaXZlU2hhZG93ICkgKSA/IGdldFBvaW50U2hhZG93KCBwb2ludFNoYWRvd01hcFsgaSBdLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd01hcFNpemUsIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93QmlhcywgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dSYWRpdXMsIHZQb2ludFNoYWRvd0Nvb3JkWyBpIF0sIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93Q2FtZXJhTmVhciwgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dDYW1lcmFGYXIgKSA6IDEuMDtcblx0XHQjZW5kaWZcblx0XHRSRV9EaXJlY3QoIGRpcmVjdExpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7XG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcbiNlbmRpZlxuI2lmICggTlVNX1NQT1RfTElHSFRTID4gMCApICYmIGRlZmluZWQoIFJFX0RpcmVjdCApXG5cdFNwb3RMaWdodCBzcG90TGlnaHQ7XG5cdCNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDBcblx0U3BvdExpZ2h0U2hhZG93IHNwb3RMaWdodFNoYWRvdztcblx0I2VuZGlmXG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRTOyBpICsrICkge1xuXHRcdHNwb3RMaWdodCA9IHNwb3RMaWdodHNbIGkgXTtcblx0XHRnZXRTcG90RGlyZWN0TGlnaHRJcnJhZGlhbmNlKCBzcG90TGlnaHQsIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApO1xuXHRcdCNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgKCBVTlJPTExFRF9MT09QX0lOREVYIDwgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyApXG5cdFx0c3BvdExpZ2h0U2hhZG93ID0gc3BvdExpZ2h0U2hhZG93c1sgaSBdO1xuXHRcdGRpcmVjdExpZ2h0LmNvbG9yICo9IGFsbCggYnZlYzIoIGRpcmVjdExpZ2h0LnZpc2libGUsIHJlY2VpdmVTaGFkb3cgKSApID8gZ2V0U2hhZG93KCBzcG90U2hhZG93TWFwWyBpIF0sIHNwb3RMaWdodFNoYWRvdy5zaGFkb3dNYXBTaXplLCBzcG90TGlnaHRTaGFkb3cuc2hhZG93Qmlhcywgc3BvdExpZ2h0U2hhZG93LnNoYWRvd1JhZGl1cywgdlNwb3RTaGFkb3dDb29yZFsgaSBdICkgOiAxLjA7XG5cdFx0I2VuZGlmXG5cdFx0UkVfRGlyZWN0KCBkaXJlY3RMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApO1xuXHR9XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG4jZW5kaWZcbiNpZiAoIE5VTV9ESVJfTElHSFRTID4gMCApICYmIGRlZmluZWQoIFJFX0RpcmVjdCApXG5cdERpcmVjdGlvbmFsTGlnaHQgZGlyZWN0aW9uYWxMaWdodDtcblx0I2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwXG5cdERpcmVjdGlvbmFsTGlnaHRTaGFkb3cgZGlyZWN0aW9uYWxMaWdodFNoYWRvdztcblx0I2VuZGlmXG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0RJUl9MSUdIVFM7IGkgKysgKSB7XG5cdFx0ZGlyZWN0aW9uYWxMaWdodCA9IGRpcmVjdGlvbmFsTGlnaHRzWyBpIF07XG5cdFx0Z2V0RGlyZWN0aW9uYWxEaXJlY3RMaWdodElycmFkaWFuY2UoIGRpcmVjdGlvbmFsTGlnaHQsIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApO1xuXHRcdCNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgKCBVTlJPTExFRF9MT09QX0lOREVYIDwgTlVNX0RJUl9MSUdIVF9TSEFET1dTIClcblx0XHRkaXJlY3Rpb25hbExpZ2h0U2hhZG93ID0gZGlyZWN0aW9uYWxMaWdodFNoYWRvd3NbIGkgXTtcblx0XHRkaXJlY3RMaWdodC5jb2xvciAqPSBhbGwoIGJ2ZWMyKCBkaXJlY3RMaWdodC52aXNpYmxlLCByZWNlaXZlU2hhZG93ICkgKSA/IGdldFNoYWRvdyggZGlyZWN0aW9uYWxTaGFkb3dNYXBbIGkgXSwgZGlyZWN0aW9uYWxMaWdodFNoYWRvdy5zaGFkb3dNYXBTaXplLCBkaXJlY3Rpb25hbExpZ2h0U2hhZG93LnNoYWRvd0JpYXMsIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3cuc2hhZG93UmFkaXVzLCB2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgaSBdICkgOiAxLjA7XG5cdFx0I2VuZGlmXG5cdFx0UkVfRGlyZWN0KCBkaXJlY3RMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApO1xuXHR9XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG4jZW5kaWZcbiNpZiAoIE5VTV9SRUNUX0FSRUFfTElHSFRTID4gMCApICYmIGRlZmluZWQoIFJFX0RpcmVjdF9SZWN0QXJlYSApXG5cdFJlY3RBcmVhTGlnaHQgcmVjdEFyZWFMaWdodDtcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fUkVDVF9BUkVBX0xJR0hUUzsgaSArKyApIHtcblx0XHRyZWN0QXJlYUxpZ2h0ID0gcmVjdEFyZWFMaWdodHNbIGkgXTtcblx0XHRSRV9EaXJlY3RfUmVjdEFyZWEoIHJlY3RBcmVhTGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuI2VuZGlmXG4jaWYgZGVmaW5lZCggUkVfSW5kaXJlY3REaWZmdXNlIClcblx0dmVjMyBpYmxJcnJhZGlhbmNlID0gdmVjMyggMC4wICk7XG5cdHZlYzMgaXJyYWRpYW5jZSA9IGdldEFtYmllbnRMaWdodElycmFkaWFuY2UoIGFtYmllbnRMaWdodENvbG9yICk7XG5cdGlycmFkaWFuY2UgKz0gZ2V0TGlnaHRQcm9iZUlycmFkaWFuY2UoIGxpZ2h0UHJvYmUsIGdlb21ldHJ5ICk7XG5cdCNpZiAoIE5VTV9IRU1JX0xJR0hUUyA+IDAgKVxuXHRcdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0XHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fSEVNSV9MSUdIVFM7IGkgKysgKSB7XG5cdFx0XHRpcnJhZGlhbmNlICs9IGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgZ2VvbWV0cnkgKTtcblx0XHR9XG5cdFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcblx0I2VuZGlmXG4jZW5kaWZcbiNpZiBkZWZpbmVkKCBSRV9JbmRpcmVjdFNwZWN1bGFyIClcblx0dmVjMyByYWRpYW5jZSA9IHZlYzMoIDAuMCApO1xuXHR2ZWMzIGNsZWFyY29hdFJhZGlhbmNlID0gdmVjMyggMC4wICk7XG4jZW5kaWYiLGxpZ2h0c19mcmFnbWVudF9tYXBzOiIjaWYgZGVmaW5lZCggUkVfSW5kaXJlY3REaWZmdXNlIClcblx0I2lmZGVmIFVTRV9MSUdIVE1BUFxuXHRcdHZlYzQgbGlnaHRNYXBUZXhlbD0gdGV4dHVyZTJEKCBsaWdodE1hcCwgdlV2MiApO1xuXHRcdHZlYzMgbGlnaHRNYXBJcnJhZGlhbmNlID0gbGlnaHRNYXBUZXhlbFRvTGluZWFyKCBsaWdodE1hcFRleGVsICkucmdiICogbGlnaHRNYXBJbnRlbnNpdHk7XG5cdFx0I2lmbmRlZiBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTXG5cdFx0XHRsaWdodE1hcElycmFkaWFuY2UgKj0gUEk7XG5cdFx0I2VuZGlmXG5cdFx0aXJyYWRpYW5jZSArPSBsaWdodE1hcElycmFkaWFuY2U7XG5cdCNlbmRpZlxuXHQjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApICYmIGRlZmluZWQoIFNUQU5EQVJEICkgJiYgZGVmaW5lZCggRU5WTUFQX1RZUEVfQ1VCRV9VViApXG5cdFx0aWJsSXJyYWRpYW5jZSArPSBnZXRMaWdodFByb2JlSW5kaXJlY3RJcnJhZGlhbmNlKCBnZW9tZXRyeSwgbWF4TWlwTGV2ZWwgKTtcblx0I2VuZGlmXG4jZW5kaWZcbiNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgJiYgZGVmaW5lZCggUkVfSW5kaXJlY3RTcGVjdWxhciApXG5cdHJhZGlhbmNlICs9IGdldExpZ2h0UHJvYmVJbmRpcmVjdFJhZGlhbmNlKCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnNwZWN1bGFyUm91Z2huZXNzLCBtYXhNaXBMZXZlbCApO1xuXHQjaWZkZWYgQ0xFQVJDT0FUXG5cdFx0Y2xlYXJjb2F0UmFkaWFuY2UgKz0gZ2V0TGlnaHRQcm9iZUluZGlyZWN0UmFkaWFuY2UoIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5LmNsZWFyY29hdE5vcm1hbCwgbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzLCBtYXhNaXBMZXZlbCApO1xuXHQjZW5kaWZcbiNlbmRpZiIsbGlnaHRzX2ZyYWdtZW50X2VuZDoiI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0RGlmZnVzZSApXG5cdFJFX0luZGlyZWN0RGlmZnVzZSggaXJyYWRpYW5jZSwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApO1xuI2VuZGlmXG4jaWYgZGVmaW5lZCggUkVfSW5kaXJlY3RTcGVjdWxhciApXG5cdFJFX0luZGlyZWN0U3BlY3VsYXIoIHJhZGlhbmNlLCBpYmxJcnJhZGlhbmNlLCBjbGVhcmNvYXRSYWRpYW5jZSwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApO1xuI2VuZGlmIixsb2dkZXB0aGJ1Zl9mcmFnbWVudDoiI2lmIGRlZmluZWQoIFVTRV9MT0dERVBUSEJVRiApICYmIGRlZmluZWQoIFVTRV9MT0dERVBUSEJVRl9FWFQgKVxuXHRnbF9GcmFnRGVwdGhFWFQgPSB2SXNQZXJzcGVjdGl2ZSA9PSAwLjAgPyBnbF9GcmFnQ29vcmQueiA6IGxvZzIoIHZGcmFnRGVwdGggKSAqIGxvZ0RlcHRoQnVmRkMgKiAwLjU7XG4jZW5kaWYiLGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ6IiNpZiBkZWZpbmVkKCBVU0VfTE9HREVQVEhCVUYgKSAmJiBkZWZpbmVkKCBVU0VfTE9HREVQVEhCVUZfRVhUIClcblx0dW5pZm9ybSBmbG9hdCBsb2dEZXB0aEJ1ZkZDO1xuXHR2YXJ5aW5nIGZsb2F0IHZGcmFnRGVwdGg7XG5cdHZhcnlpbmcgZmxvYXQgdklzUGVyc3BlY3RpdmU7XG4jZW5kaWYiLGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX0xPR0RFUFRIQlVGXG5cdCNpZmRlZiBVU0VfTE9HREVQVEhCVUZfRVhUXG5cdFx0dmFyeWluZyBmbG9hdCB2RnJhZ0RlcHRoO1xuXHRcdHZhcnlpbmcgZmxvYXQgdklzUGVyc3BlY3RpdmU7XG5cdCNlbHNlXG5cdFx0dW5pZm9ybSBmbG9hdCBsb2dEZXB0aEJ1ZkZDO1xuXHQjZW5kaWZcbiNlbmRpZiIsbG9nZGVwdGhidWZfdmVydGV4OiIjaWZkZWYgVVNFX0xPR0RFUFRIQlVGXG5cdCNpZmRlZiBVU0VfTE9HREVQVEhCVUZfRVhUXG5cdFx0dkZyYWdEZXB0aCA9IDEuMCArIGdsX1Bvc2l0aW9uLnc7XG5cdFx0dklzUGVyc3BlY3RpdmUgPSBmbG9hdCggaXNQZXJzcGVjdGl2ZU1hdHJpeCggcHJvamVjdGlvbk1hdHJpeCApICk7XG5cdCNlbHNlXG5cdFx0aWYgKCBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICkgKSB7XG5cdFx0XHRnbF9Qb3NpdGlvbi56ID0gbG9nMiggbWF4KCBFUFNJTE9OLCBnbF9Qb3NpdGlvbi53ICsgMS4wICkgKSAqIGxvZ0RlcHRoQnVmRkMgLSAxLjA7XG5cdFx0XHRnbF9Qb3NpdGlvbi56ICo9IGdsX1Bvc2l0aW9uLnc7XG5cdFx0fVxuXHQjZW5kaWZcbiNlbmRpZiIsbWFwX2ZyYWdtZW50OiIjaWZkZWYgVVNFX01BUFxuXHR2ZWM0IHRleGVsQ29sb3IgPSB0ZXh0dXJlMkQoIG1hcCwgdlV2ICk7XG5cdHRleGVsQ29sb3IgPSBtYXBUZXhlbFRvTGluZWFyKCB0ZXhlbENvbG9yICk7XG5cdGRpZmZ1c2VDb2xvciAqPSB0ZXhlbENvbG9yO1xuI2VuZGlmIixtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9NQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgbWFwO1xuI2VuZGlmIixtYXBfcGFydGljbGVfZnJhZ21lbnQ6IiNpZiBkZWZpbmVkKCBVU0VfTUFQICkgfHwgZGVmaW5lZCggVVNFX0FMUEhBTUFQIClcblx0dmVjMiB1diA9ICggdXZUcmFuc2Zvcm0gKiB2ZWMzKCBnbF9Qb2ludENvb3JkLngsIDEuMCAtIGdsX1BvaW50Q29vcmQueSwgMSApICkueHk7XG4jZW5kaWZcbiNpZmRlZiBVU0VfTUFQXG5cdHZlYzQgbWFwVGV4ZWwgPSB0ZXh0dXJlMkQoIG1hcCwgdXYgKTtcblx0ZGlmZnVzZUNvbG9yICo9IG1hcFRleGVsVG9MaW5lYXIoIG1hcFRleGVsICk7XG4jZW5kaWZcbiNpZmRlZiBVU0VfQUxQSEFNQVBcblx0ZGlmZnVzZUNvbG9yLmEgKj0gdGV4dHVyZTJEKCBhbHBoYU1hcCwgdXYgKS5nO1xuI2VuZGlmIixtYXBfcGFydGljbGVfcGFyc19mcmFnbWVudDoiI2lmIGRlZmluZWQoIFVTRV9NQVAgKSB8fCBkZWZpbmVkKCBVU0VfQUxQSEFNQVAgKVxuXHR1bmlmb3JtIG1hdDMgdXZUcmFuc2Zvcm07XG4jZW5kaWZcbiNpZmRlZiBVU0VfTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIG1hcDtcbiNlbmRpZlxuI2lmZGVmIFVTRV9BTFBIQU1BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBhbHBoYU1hcDtcbiNlbmRpZiIsbWV0YWxuZXNzbWFwX2ZyYWdtZW50OiJmbG9hdCBtZXRhbG5lc3NGYWN0b3IgPSBtZXRhbG5lc3M7XG4jaWZkZWYgVVNFX01FVEFMTkVTU01BUFxuXHR2ZWM0IHRleGVsTWV0YWxuZXNzID0gdGV4dHVyZTJEKCBtZXRhbG5lc3NNYXAsIHZVdiApO1xuXHRtZXRhbG5lc3NGYWN0b3IgKj0gdGV4ZWxNZXRhbG5lc3MuYjtcbiNlbmRpZiIsbWV0YWxuZXNzbWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfTUVUQUxORVNTTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIG1ldGFsbmVzc01hcDtcbiNlbmRpZiIsbW9ycGhub3JtYWxfdmVydGV4OiIjaWZkZWYgVVNFX01PUlBITk9STUFMU1xuXHRvYmplY3ROb3JtYWwgKj0gbW9ycGhUYXJnZXRCYXNlSW5mbHVlbmNlO1xuXHRvYmplY3ROb3JtYWwgKz0gbW9ycGhOb3JtYWwwICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAwIF07XG5cdG9iamVjdE5vcm1hbCArPSBtb3JwaE5vcm1hbDEgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDEgXTtcblx0b2JqZWN0Tm9ybWFsICs9IG1vcnBoTm9ybWFsMiAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMiBdO1xuXHRvYmplY3ROb3JtYWwgKz0gbW9ycGhOb3JtYWwzICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAzIF07XG4jZW5kaWYiLG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX01PUlBIVEFSR0VUU1xuXHR1bmlmb3JtIGZsb2F0IG1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZTtcblx0I2lmbmRlZiBVU0VfTU9SUEhOT1JNQUxTXG5cdFx0dW5pZm9ybSBmbG9hdCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDggXTtcblx0I2Vsc2Vcblx0XHR1bmlmb3JtIGZsb2F0IG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNCBdO1xuXHQjZW5kaWZcbiNlbmRpZiIsbW9ycGh0YXJnZXRfdmVydGV4OiIjaWZkZWYgVVNFX01PUlBIVEFSR0VUU1xuXHR0cmFuc2Zvcm1lZCAqPSBtb3JwaFRhcmdldEJhc2VJbmZsdWVuY2U7XG5cdHRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0MCAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMCBdO1xuXHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDEgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDEgXTtcblx0dHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQyICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAyIF07XG5cdHRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0MyAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMyBdO1xuXHQjaWZuZGVmIFVTRV9NT1JQSE5PUk1BTFNcblx0XHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDQgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDQgXTtcblx0XHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDUgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDUgXTtcblx0XHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDYgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDYgXTtcblx0XHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDcgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDcgXTtcblx0I2VuZGlmXG4jZW5kaWYiLG5vcm1hbF9mcmFnbWVudF9iZWdpbjoiI2lmZGVmIEZMQVRfU0hBREVEXG5cdHZlYzMgZmR4ID0gdmVjMyggZEZkeCggdlZpZXdQb3NpdGlvbi54ICksIGRGZHgoIHZWaWV3UG9zaXRpb24ueSApLCBkRmR4KCB2Vmlld1Bvc2l0aW9uLnogKSApO1xuXHR2ZWMzIGZkeSA9IHZlYzMoIGRGZHkoIHZWaWV3UG9zaXRpb24ueCApLCBkRmR5KCB2Vmlld1Bvc2l0aW9uLnkgKSwgZEZkeSggdlZpZXdQb3NpdGlvbi56ICkgKTtcblx0dmVjMyBub3JtYWwgPSBub3JtYWxpemUoIGNyb3NzKCBmZHgsIGZkeSApICk7XG4jZWxzZVxuXHR2ZWMzIG5vcm1hbCA9IG5vcm1hbGl6ZSggdk5vcm1hbCApO1xuXHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0bm9ybWFsID0gbm9ybWFsICogKCBmbG9hdCggZ2xfRnJvbnRGYWNpbmcgKSAqIDIuMCAtIDEuMCApO1xuXHQjZW5kaWZcblx0I2lmZGVmIFVTRV9UQU5HRU5UXG5cdFx0dmVjMyB0YW5nZW50ID0gbm9ybWFsaXplKCB2VGFuZ2VudCApO1xuXHRcdHZlYzMgYml0YW5nZW50ID0gbm9ybWFsaXplKCB2Qml0YW5nZW50ICk7XG5cdFx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdFx0dGFuZ2VudCA9IHRhbmdlbnQgKiAoIGZsb2F0KCBnbF9Gcm9udEZhY2luZyApICogMi4wIC0gMS4wICk7XG5cdFx0XHRiaXRhbmdlbnQgPSBiaXRhbmdlbnQgKiAoIGZsb2F0KCBnbF9Gcm9udEZhY2luZyApICogMi4wIC0gMS4wICk7XG5cdFx0I2VuZGlmXG5cdFx0I2lmIGRlZmluZWQoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQ0xFQVJDT0FUX05PUk1BTE1BUCApXG5cdFx0XHRtYXQzIHZUQk4gPSBtYXQzKCB0YW5nZW50LCBiaXRhbmdlbnQsIG5vcm1hbCApO1xuXHRcdCNlbmRpZlxuXHQjZW5kaWZcbiNlbmRpZlxudmVjMyBnZW9tZXRyeU5vcm1hbCA9IG5vcm1hbDsiLG5vcm1hbF9mcmFnbWVudF9tYXBzOiIjaWZkZWYgT0JKRUNUU1BBQ0VfTk9STUFMTUFQXG5cdG5vcm1hbCA9IHRleHR1cmUyRCggbm9ybWFsTWFwLCB2VXYgKS54eXogKiAyLjAgLSAxLjA7XG5cdCNpZmRlZiBGTElQX1NJREVEXG5cdFx0bm9ybWFsID0gLSBub3JtYWw7XG5cdCNlbmRpZlxuXHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0bm9ybWFsID0gbm9ybWFsICogKCBmbG9hdCggZ2xfRnJvbnRGYWNpbmcgKSAqIDIuMCAtIDEuMCApO1xuXHQjZW5kaWZcblx0bm9ybWFsID0gbm9ybWFsaXplKCBub3JtYWxNYXRyaXggKiBub3JtYWwgKTtcbiNlbGlmIGRlZmluZWQoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKVxuXHR2ZWMzIG1hcE4gPSB0ZXh0dXJlMkQoIG5vcm1hbE1hcCwgdlV2ICkueHl6ICogMi4wIC0gMS4wO1xuXHRtYXBOLnh5ICo9IG5vcm1hbFNjYWxlO1xuXHQjaWZkZWYgVVNFX1RBTkdFTlRcblx0XHRub3JtYWwgPSBub3JtYWxpemUoIHZUQk4gKiBtYXBOICk7XG5cdCNlbHNlXG5cdFx0bm9ybWFsID0gcGVydHVyYk5vcm1hbDJBcmIoIC12Vmlld1Bvc2l0aW9uLCBub3JtYWwsIG1hcE4gKTtcblx0I2VuZGlmXG4jZWxpZiBkZWZpbmVkKCBVU0VfQlVNUE1BUCApXG5cdG5vcm1hbCA9IHBlcnR1cmJOb3JtYWxBcmIoIC12Vmlld1Bvc2l0aW9uLCBub3JtYWwsIGRIZHh5X2Z3ZCgpICk7XG4jZW5kaWYiLG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX05PUk1BTE1BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBub3JtYWxNYXA7XG5cdHVuaWZvcm0gdmVjMiBub3JtYWxTY2FsZTtcbiNlbmRpZlxuI2lmZGVmIE9CSkVDVFNQQUNFX05PUk1BTE1BUFxuXHR1bmlmb3JtIG1hdDMgbm9ybWFsTWF0cml4O1xuI2VuZGlmXG4jaWYgISBkZWZpbmVkICggVVNFX1RBTkdFTlQgKSAmJiAoIGRlZmluZWQgKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCAoIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQICkgKVxuXHR2ZWMzIHBlcnR1cmJOb3JtYWwyQXJiKCB2ZWMzIGV5ZV9wb3MsIHZlYzMgc3VyZl9ub3JtLCB2ZWMzIG1hcE4gKSB7XG5cdFx0dmVjMyBxMCA9IHZlYzMoIGRGZHgoIGV5ZV9wb3MueCApLCBkRmR4KCBleWVfcG9zLnkgKSwgZEZkeCggZXllX3Bvcy56ICkgKTtcblx0XHR2ZWMzIHExID0gdmVjMyggZEZkeSggZXllX3Bvcy54ICksIGRGZHkoIGV5ZV9wb3MueSApLCBkRmR5KCBleWVfcG9zLnogKSApO1xuXHRcdHZlYzIgc3QwID0gZEZkeCggdlV2LnN0ICk7XG5cdFx0dmVjMiBzdDEgPSBkRmR5KCB2VXYuc3QgKTtcblx0XHRmbG9hdCBzY2FsZSA9IHNpZ24oIHN0MS50ICogc3QwLnMgLSBzdDAudCAqIHN0MS5zICk7XG5cdFx0dmVjMyBTID0gbm9ybWFsaXplKCAoIHEwICogc3QxLnQgLSBxMSAqIHN0MC50ICkgKiBzY2FsZSApO1xuXHRcdHZlYzMgVCA9IG5vcm1hbGl6ZSggKCAtIHEwICogc3QxLnMgKyBxMSAqIHN0MC5zICkgKiBzY2FsZSApO1xuXHRcdHZlYzMgTiA9IG5vcm1hbGl6ZSggc3VyZl9ub3JtICk7XG5cdFx0bWF0MyB0c24gPSBtYXQzKCBTLCBULCBOICk7XG5cdFx0bWFwTi54eSAqPSAoIGZsb2F0KCBnbF9Gcm9udEZhY2luZyApICogMi4wIC0gMS4wICk7XG5cdFx0cmV0dXJuIG5vcm1hbGl6ZSggdHNuICogbWFwTiApO1xuXHR9XG4jZW5kaWYiLGNsZWFyY29hdF9ub3JtYWxfZnJhZ21lbnRfYmVnaW46IiNpZmRlZiBDTEVBUkNPQVRcblx0dmVjMyBjbGVhcmNvYXROb3JtYWwgPSBnZW9tZXRyeU5vcm1hbDtcbiNlbmRpZiIsY2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9tYXBzOiIjaWZkZWYgVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVBcblx0dmVjMyBjbGVhcmNvYXRNYXBOID0gdGV4dHVyZTJEKCBjbGVhcmNvYXROb3JtYWxNYXAsIHZVdiApLnh5eiAqIDIuMCAtIDEuMDtcblx0Y2xlYXJjb2F0TWFwTi54eSAqPSBjbGVhcmNvYXROb3JtYWxTY2FsZTtcblx0I2lmZGVmIFVTRV9UQU5HRU5UXG5cdFx0Y2xlYXJjb2F0Tm9ybWFsID0gbm9ybWFsaXplKCB2VEJOICogY2xlYXJjb2F0TWFwTiApO1xuXHQjZWxzZVxuXHRcdGNsZWFyY29hdE5vcm1hbCA9IHBlcnR1cmJOb3JtYWwyQXJiKCAtIHZWaWV3UG9zaXRpb24sIGNsZWFyY29hdE5vcm1hbCwgY2xlYXJjb2F0TWFwTiApO1xuXHQjZW5kaWZcbiNlbmRpZiIsY2xlYXJjb2F0X3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfQ0xFQVJDT0FUTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGNsZWFyY29hdE1hcDtcbiNlbmRpZlxuI2lmZGVmIFVTRV9DTEVBUkNPQVRfUk9VR0hORVNTTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGNsZWFyY29hdFJvdWdobmVzc01hcDtcbiNlbmRpZlxuI2lmZGVmIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGNsZWFyY29hdE5vcm1hbE1hcDtcblx0dW5pZm9ybSB2ZWMyIGNsZWFyY29hdE5vcm1hbFNjYWxlO1xuI2VuZGlmIixwYWNraW5nOiJ2ZWMzIHBhY2tOb3JtYWxUb1JHQiggY29uc3QgaW4gdmVjMyBub3JtYWwgKSB7XG5cdHJldHVybiBub3JtYWxpemUoIG5vcm1hbCApICogMC41ICsgMC41O1xufVxudmVjMyB1bnBhY2tSR0JUb05vcm1hbCggY29uc3QgaW4gdmVjMyByZ2IgKSB7XG5cdHJldHVybiAyLjAgKiByZ2IueHl6IC0gMS4wO1xufVxuY29uc3QgZmxvYXQgUGFja1Vwc2NhbGUgPSAyNTYuIC8gMjU1Ljtjb25zdCBmbG9hdCBVbnBhY2tEb3duc2NhbGUgPSAyNTUuIC8gMjU2LjtcbmNvbnN0IHZlYzMgUGFja0ZhY3RvcnMgPSB2ZWMzKCAyNTYuICogMjU2LiAqIDI1Ni4sIDI1Ni4gKiAyNTYuLCAyNTYuICk7XG5jb25zdCB2ZWM0IFVucGFja0ZhY3RvcnMgPSBVbnBhY2tEb3duc2NhbGUgLyB2ZWM0KCBQYWNrRmFjdG9ycywgMS4gKTtcbmNvbnN0IGZsb2F0IFNoaWZ0UmlnaHQ4ID0gMS4gLyAyNTYuO1xudmVjNCBwYWNrRGVwdGhUb1JHQkEoIGNvbnN0IGluIGZsb2F0IHYgKSB7XG5cdHZlYzQgciA9IHZlYzQoIGZyYWN0KCB2ICogUGFja0ZhY3RvcnMgKSwgdiApO1xuXHRyLnl6dyAtPSByLnh5eiAqIFNoaWZ0UmlnaHQ4O1x0cmV0dXJuIHIgKiBQYWNrVXBzY2FsZTtcbn1cbmZsb2F0IHVucGFja1JHQkFUb0RlcHRoKCBjb25zdCBpbiB2ZWM0IHYgKSB7XG5cdHJldHVybiBkb3QoIHYsIFVucGFja0ZhY3RvcnMgKTtcbn1cbnZlYzQgcGFjazJIYWxmVG9SR0JBKCB2ZWMyIHYgKSB7XG5cdHZlYzQgciA9IHZlYzQoIHYueCwgZnJhY3QoIHYueCAqIDI1NS4wICksIHYueSwgZnJhY3QoIHYueSAqIDI1NS4wICkpO1xuXHRyZXR1cm4gdmVjNCggci54IC0gci55IC8gMjU1LjAsIHIueSwgci56IC0gci53IC8gMjU1LjAsIHIudyk7XG59XG52ZWMyIHVucGFja1JHQkFUbzJIYWxmKCB2ZWM0IHYgKSB7XG5cdHJldHVybiB2ZWMyKCB2LnggKyAoIHYueSAvIDI1NS4wICksIHYueiArICggdi53IC8gMjU1LjAgKSApO1xufVxuZmxvYXQgdmlld1pUb09ydGhvZ3JhcGhpY0RlcHRoKCBjb25zdCBpbiBmbG9hdCB2aWV3WiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkge1xuXHRyZXR1cm4gKCB2aWV3WiArIG5lYXIgKSAvICggbmVhciAtIGZhciApO1xufVxuZmxvYXQgb3J0aG9ncmFwaGljRGVwdGhUb1ZpZXdaKCBjb25zdCBpbiBmbG9hdCBsaW5lYXJDbGlwWiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkge1xuXHRyZXR1cm4gbGluZWFyQ2xpcFogKiAoIG5lYXIgLSBmYXIgKSAtIG5lYXI7XG59XG5mbG9hdCB2aWV3WlRvUGVyc3BlY3RpdmVEZXB0aCggY29uc3QgaW4gZmxvYXQgdmlld1osIGNvbnN0IGluIGZsb2F0IG5lYXIsIGNvbnN0IGluIGZsb2F0IGZhciApIHtcblx0cmV0dXJuICgoIG5lYXIgKyB2aWV3WiApICogZmFyICkgLyAoKCBmYXIgLSBuZWFyICkgKiB2aWV3WiApO1xufVxuZmxvYXQgcGVyc3BlY3RpdmVEZXB0aFRvVmlld1ooIGNvbnN0IGluIGZsb2F0IGludkNsaXBaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7XG5cdHJldHVybiAoIG5lYXIgKiBmYXIgKSAvICggKCBmYXIgLSBuZWFyICkgKiBpbnZDbGlwWiAtIGZhciApO1xufSIscHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudDoiI2lmZGVmIFBSRU1VTFRJUExJRURfQUxQSEFcblx0Z2xfRnJhZ0NvbG9yLnJnYiAqPSBnbF9GcmFnQ29sb3IuYTtcbiNlbmRpZiIscHJvamVjdF92ZXJ0ZXg6InZlYzQgbXZQb3NpdGlvbiA9IHZlYzQoIHRyYW5zZm9ybWVkLCAxLjAgKTtcbiNpZmRlZiBVU0VfSU5TVEFOQ0lOR1xuXHRtdlBvc2l0aW9uID0gaW5zdGFuY2VNYXRyaXggKiBtdlBvc2l0aW9uO1xuI2VuZGlmXG5tdlBvc2l0aW9uID0gbW9kZWxWaWV3TWF0cml4ICogbXZQb3NpdGlvbjtcbmdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIG12UG9zaXRpb247IixkaXRoZXJpbmdfZnJhZ21lbnQ6IiNpZmRlZiBESVRIRVJJTkdcblx0Z2xfRnJhZ0NvbG9yLnJnYiA9IGRpdGhlcmluZyggZ2xfRnJhZ0NvbG9yLnJnYiApO1xuI2VuZGlmIixkaXRoZXJpbmdfcGFyc19mcmFnbWVudDoiI2lmZGVmIERJVEhFUklOR1xuXHR2ZWMzIGRpdGhlcmluZyggdmVjMyBjb2xvciApIHtcblx0XHRmbG9hdCBncmlkX3Bvc2l0aW9uID0gcmFuZCggZ2xfRnJhZ0Nvb3JkLnh5ICk7XG5cdFx0dmVjMyBkaXRoZXJfc2hpZnRfUkdCID0gdmVjMyggMC4yNSAvIDI1NS4wLCAtMC4yNSAvIDI1NS4wLCAwLjI1IC8gMjU1LjAgKTtcblx0XHRkaXRoZXJfc2hpZnRfUkdCID0gbWl4KCAyLjAgKiBkaXRoZXJfc2hpZnRfUkdCLCAtMi4wICogZGl0aGVyX3NoaWZ0X1JHQiwgZ3JpZF9wb3NpdGlvbiApO1xuXHRcdHJldHVybiBjb2xvciArIGRpdGhlcl9zaGlmdF9SR0I7XG5cdH1cbiNlbmRpZiIscm91Z2huZXNzbWFwX2ZyYWdtZW50OiJmbG9hdCByb3VnaG5lc3NGYWN0b3IgPSByb3VnaG5lc3M7XG4jaWZkZWYgVVNFX1JPVUdITkVTU01BUFxuXHR2ZWM0IHRleGVsUm91Z2huZXNzID0gdGV4dHVyZTJEKCByb3VnaG5lc3NNYXAsIHZVdiApO1xuXHRyb3VnaG5lc3NGYWN0b3IgKj0gdGV4ZWxSb3VnaG5lc3MuZztcbiNlbmRpZiIscm91Z2huZXNzbWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfUk9VR0hORVNTTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIHJvdWdobmVzc01hcDtcbiNlbmRpZiIsc2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfU0hBRE9XTUFQXG5cdCNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwXG5cdFx0dW5pZm9ybSBzYW1wbGVyMkQgZGlyZWN0aW9uYWxTaGFkb3dNYXBbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHZhcnlpbmcgdmVjNCB2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07XG5cdFx0c3RydWN0IERpcmVjdGlvbmFsTGlnaHRTaGFkb3cge1xuXHRcdFx0ZmxvYXQgc2hhZG93Qmlhcztcblx0XHRcdGZsb2F0IHNoYWRvd05vcm1hbEJpYXM7XG5cdFx0XHRmbG9hdCBzaGFkb3dSYWRpdXM7XG5cdFx0XHR2ZWMyIHNoYWRvd01hcFNpemU7XG5cdFx0fTtcblx0XHR1bmlmb3JtIERpcmVjdGlvbmFsTGlnaHRTaGFkb3cgZGlyZWN0aW9uYWxMaWdodFNoYWRvd3NbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdO1xuXHQjZW5kaWZcblx0I2lmIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwXG5cdFx0dW5pZm9ybSBzYW1wbGVyMkQgc3BvdFNoYWRvd01hcFsgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHZhcnlpbmcgdmVjNCB2U3BvdFNoYWRvd0Nvb3JkWyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07XG5cdFx0c3RydWN0IFNwb3RMaWdodFNoYWRvdyB7XG5cdFx0XHRmbG9hdCBzaGFkb3dCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93Tm9ybWFsQmlhcztcblx0XHRcdGZsb2F0IHNoYWRvd1JhZGl1cztcblx0XHRcdHZlYzIgc2hhZG93TWFwU2l6ZTtcblx0XHR9O1xuXHRcdHVuaWZvcm0gU3BvdExpZ2h0U2hhZG93IHNwb3RMaWdodFNoYWRvd3NbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTtcblx0I2VuZGlmXG5cdCNpZiBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDBcblx0XHR1bmlmb3JtIHNhbXBsZXIyRCBwb2ludFNoYWRvd01hcFsgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTtcblx0XHR2YXJ5aW5nIHZlYzQgdlBvaW50U2hhZG93Q29vcmRbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07XG5cdFx0c3RydWN0IFBvaW50TGlnaHRTaGFkb3cge1xuXHRcdFx0ZmxvYXQgc2hhZG93Qmlhcztcblx0XHRcdGZsb2F0IHNoYWRvd05vcm1hbEJpYXM7XG5cdFx0XHRmbG9hdCBzaGFkb3dSYWRpdXM7XG5cdFx0XHR2ZWMyIHNoYWRvd01hcFNpemU7XG5cdFx0XHRmbG9hdCBzaGFkb3dDYW1lcmFOZWFyO1xuXHRcdFx0ZmxvYXQgc2hhZG93Q2FtZXJhRmFyO1xuXHRcdH07XG5cdFx0dW5pZm9ybSBQb2ludExpZ2h0U2hhZG93IHBvaW50TGlnaHRTaGFkb3dzWyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdO1xuXHQjZW5kaWZcblx0ZmxvYXQgdGV4dHVyZTJEQ29tcGFyZSggc2FtcGxlcjJEIGRlcHRocywgdmVjMiB1diwgZmxvYXQgY29tcGFyZSApIHtcblx0XHRyZXR1cm4gc3RlcCggY29tcGFyZSwgdW5wYWNrUkdCQVRvRGVwdGgoIHRleHR1cmUyRCggZGVwdGhzLCB1diApICkgKTtcblx0fVxuXHR2ZWMyIHRleHR1cmUyRERpc3RyaWJ1dGlvbiggc2FtcGxlcjJEIHNoYWRvdywgdmVjMiB1diApIHtcblx0XHRyZXR1cm4gdW5wYWNrUkdCQVRvMkhhbGYoIHRleHR1cmUyRCggc2hhZG93LCB1diApICk7XG5cdH1cblx0ZmxvYXQgVlNNU2hhZG93IChzYW1wbGVyMkQgc2hhZG93LCB2ZWMyIHV2LCBmbG9hdCBjb21wYXJlICl7XG5cdFx0ZmxvYXQgb2NjbHVzaW9uID0gMS4wO1xuXHRcdHZlYzIgZGlzdHJpYnV0aW9uID0gdGV4dHVyZTJERGlzdHJpYnV0aW9uKCBzaGFkb3csIHV2ICk7XG5cdFx0ZmxvYXQgaGFyZF9zaGFkb3cgPSBzdGVwKCBjb21wYXJlICwgZGlzdHJpYnV0aW9uLnggKTtcblx0XHRpZiAoaGFyZF9zaGFkb3cgIT0gMS4wICkge1xuXHRcdFx0ZmxvYXQgZGlzdGFuY2UgPSBjb21wYXJlIC0gZGlzdHJpYnV0aW9uLnggO1xuXHRcdFx0ZmxvYXQgdmFyaWFuY2UgPSBtYXgoIDAuMDAwMDAsIGRpc3RyaWJ1dGlvbi55ICogZGlzdHJpYnV0aW9uLnkgKTtcblx0XHRcdGZsb2F0IHNvZnRuZXNzX3Byb2JhYmlsaXR5ID0gdmFyaWFuY2UgLyAodmFyaWFuY2UgKyBkaXN0YW5jZSAqIGRpc3RhbmNlICk7XHRcdFx0c29mdG5lc3NfcHJvYmFiaWxpdHkgPSBjbGFtcCggKCBzb2Z0bmVzc19wcm9iYWJpbGl0eSAtIDAuMyApIC8gKCAwLjk1IC0gMC4zICksIDAuMCwgMS4wICk7XHRcdFx0b2NjbHVzaW9uID0gY2xhbXAoIG1heCggaGFyZF9zaGFkb3csIHNvZnRuZXNzX3Byb2JhYmlsaXR5ICksIDAuMCwgMS4wICk7XG5cdFx0fVxuXHRcdHJldHVybiBvY2NsdXNpb247XG5cdH1cblx0ZmxvYXQgZ2V0U2hhZG93KCBzYW1wbGVyMkQgc2hhZG93TWFwLCB2ZWMyIHNoYWRvd01hcFNpemUsIGZsb2F0IHNoYWRvd0JpYXMsIGZsb2F0IHNoYWRvd1JhZGl1cywgdmVjNCBzaGFkb3dDb29yZCApIHtcblx0XHRmbG9hdCBzaGFkb3cgPSAxLjA7XG5cdFx0c2hhZG93Q29vcmQueHl6IC89IHNoYWRvd0Nvb3JkLnc7XG5cdFx0c2hhZG93Q29vcmQueiArPSBzaGFkb3dCaWFzO1xuXHRcdGJ2ZWM0IGluRnJ1c3R1bVZlYyA9IGJ2ZWM0ICggc2hhZG93Q29vcmQueCA+PSAwLjAsIHNoYWRvd0Nvb3JkLnggPD0gMS4wLCBzaGFkb3dDb29yZC55ID49IDAuMCwgc2hhZG93Q29vcmQueSA8PSAxLjAgKTtcblx0XHRib29sIGluRnJ1c3R1bSA9IGFsbCggaW5GcnVzdHVtVmVjICk7XG5cdFx0YnZlYzIgZnJ1c3R1bVRlc3RWZWMgPSBidmVjMiggaW5GcnVzdHVtLCBzaGFkb3dDb29yZC56IDw9IDEuMCApO1xuXHRcdGJvb2wgZnJ1c3R1bVRlc3QgPSBhbGwoIGZydXN0dW1UZXN0VmVjICk7XG5cdFx0aWYgKCBmcnVzdHVtVGVzdCApIHtcblx0XHQjaWYgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfUENGIClcblx0XHRcdHZlYzIgdGV4ZWxTaXplID0gdmVjMiggMS4wICkgLyBzaGFkb3dNYXBTaXplO1xuXHRcdFx0ZmxvYXQgZHgwID0gLSB0ZXhlbFNpemUueCAqIHNoYWRvd1JhZGl1cztcblx0XHRcdGZsb2F0IGR5MCA9IC0gdGV4ZWxTaXplLnkgKiBzaGFkb3dSYWRpdXM7XG5cdFx0XHRmbG9hdCBkeDEgPSArIHRleGVsU2l6ZS54ICogc2hhZG93UmFkaXVzO1xuXHRcdFx0ZmxvYXQgZHkxID0gKyB0ZXhlbFNpemUueSAqIHNoYWRvd1JhZGl1cztcblx0XHRcdGZsb2F0IGR4MiA9IGR4MCAvIDIuMDtcblx0XHRcdGZsb2F0IGR5MiA9IGR5MCAvIDIuMDtcblx0XHRcdGZsb2F0IGR4MyA9IGR4MSAvIDIuMDtcblx0XHRcdGZsb2F0IGR5MyA9IGR5MSAvIDIuMDtcblx0XHRcdHNoYWRvdyA9IChcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MCwgZHkwICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCAwLjAsIGR5MCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgxLCBkeTAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MiwgZHkyICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCAwLjAsIGR5MiApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgzLCBkeTIgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MCwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDIsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5LCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgzLCAwLjAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MSwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDIsIGR5MyApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggMC4wLCBkeTMgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MywgZHkzICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDAsIGR5MSApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggMC4wLCBkeTEgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MSwgZHkxICksIHNoYWRvd0Nvb3JkLnogKVxuXHRcdFx0KSAqICggMS4wIC8gMTcuMCApO1xuXHRcdCNlbGlmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRl9TT0ZUIClcblx0XHRcdHZlYzIgdGV4ZWxTaXplID0gdmVjMiggMS4wICkgLyBzaGFkb3dNYXBTaXplO1xuXHRcdFx0ZmxvYXQgZHggPSB0ZXhlbFNpemUueDtcblx0XHRcdGZsb2F0IGR5ID0gdGV4ZWxTaXplLnk7XG5cdFx0XHR2ZWMyIHV2ID0gc2hhZG93Q29vcmQueHk7XG5cdFx0XHR2ZWMyIGYgPSBmcmFjdCggdXYgKiBzaGFkb3dNYXBTaXplICsgMC41ICk7XG5cdFx0XHR1diAtPSBmICogdGV4ZWxTaXplO1xuXHRcdFx0c2hhZG93ID0gKFxuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2LCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggZHgsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMC4wLCBkeSApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdGV4ZWxTaXplLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHRtaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAtZHgsIDAuMCApLCBzaGFkb3dDb29yZC56ICksIFxuXHRcdFx0XHRcdCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMi4wICogZHgsIDAuMCApLCBzaGFkb3dDb29yZC56ICksXG5cdFx0XHRcdFx0IGYueCApICtcblx0XHRcdFx0bWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggLWR4LCBkeSApLCBzaGFkb3dDb29yZC56ICksIFxuXHRcdFx0XHRcdCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMi4wICogZHgsIGR5ICksIHNoYWRvd0Nvb3JkLnogKSxcblx0XHRcdFx0XHQgZi54ICkgK1xuXHRcdFx0XHRtaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAwLjAsIC1keSApLCBzaGFkb3dDb29yZC56ICksIFxuXHRcdFx0XHRcdCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMC4wLCAyLjAgKiBkeSApLCBzaGFkb3dDb29yZC56ICksXG5cdFx0XHRcdFx0IGYueSApICtcblx0XHRcdFx0bWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggZHgsIC1keSApLCBzaGFkb3dDb29yZC56ICksIFxuXHRcdFx0XHRcdCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggZHgsIDIuMCAqIGR5ICksIHNoYWRvd0Nvb3JkLnogKSxcblx0XHRcdFx0XHQgZi55ICkgK1xuXHRcdFx0XHRtaXgoIG1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIC1keCwgLWR5ICksIHNoYWRvd0Nvb3JkLnogKSwgXG5cdFx0XHRcdFx0XHQgIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAyLjAgKiBkeCwgLWR5ICksIHNoYWRvd0Nvb3JkLnogKSxcblx0XHRcdFx0XHRcdCAgZi54ICksXG5cdFx0XHRcdFx0IG1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIC1keCwgMi4wICogZHkgKSwgc2hhZG93Q29vcmQueiApLCBcblx0XHRcdFx0XHRcdCAgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDIuMCAqIGR4LCAyLjAgKiBkeSApLCBzaGFkb3dDb29yZC56ICksXG5cdFx0XHRcdFx0XHQgIGYueCApLFxuXHRcdFx0XHRcdCBmLnkgKVxuXHRcdFx0KSAqICggMS4wIC8gOS4wICk7XG5cdFx0I2VsaWYgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfVlNNIClcblx0XHRcdHNoYWRvdyA9IFZTTVNoYWRvdyggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSwgc2hhZG93Q29vcmQueiApO1xuXHRcdCNlbHNlXG5cdFx0XHRzaGFkb3cgPSB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5LCBzaGFkb3dDb29yZC56ICk7XG5cdFx0I2VuZGlmXG5cdFx0fVxuXHRcdHJldHVybiBzaGFkb3c7XG5cdH1cblx0dmVjMiBjdWJlVG9VViggdmVjMyB2LCBmbG9hdCB0ZXhlbFNpemVZICkge1xuXHRcdHZlYzMgYWJzViA9IGFicyggdiApO1xuXHRcdGZsb2F0IHNjYWxlVG9DdWJlID0gMS4wIC8gbWF4KCBhYnNWLngsIG1heCggYWJzVi55LCBhYnNWLnogKSApO1xuXHRcdGFic1YgKj0gc2NhbGVUb0N1YmU7XG5cdFx0diAqPSBzY2FsZVRvQ3ViZSAqICggMS4wIC0gMi4wICogdGV4ZWxTaXplWSApO1xuXHRcdHZlYzIgcGxhbmFyID0gdi54eTtcblx0XHRmbG9hdCBhbG1vc3RBVGV4ZWwgPSAxLjUgKiB0ZXhlbFNpemVZO1xuXHRcdGZsb2F0IGFsbW9zdE9uZSA9IDEuMCAtIGFsbW9zdEFUZXhlbDtcblx0XHRpZiAoIGFic1YueiA+PSBhbG1vc3RPbmUgKSB7XG5cdFx0XHRpZiAoIHYueiA+IDAuMCApXG5cdFx0XHRcdHBsYW5hci54ID0gNC4wIC0gdi54O1xuXHRcdH0gZWxzZSBpZiAoIGFic1YueCA+PSBhbG1vc3RPbmUgKSB7XG5cdFx0XHRmbG9hdCBzaWduWCA9IHNpZ24oIHYueCApO1xuXHRcdFx0cGxhbmFyLnggPSB2LnogKiBzaWduWCArIDIuMCAqIHNpZ25YO1xuXHRcdH0gZWxzZSBpZiAoIGFic1YueSA+PSBhbG1vc3RPbmUgKSB7XG5cdFx0XHRmbG9hdCBzaWduWSA9IHNpZ24oIHYueSApO1xuXHRcdFx0cGxhbmFyLnggPSB2LnggKyAyLjAgKiBzaWduWSArIDIuMDtcblx0XHRcdHBsYW5hci55ID0gdi56ICogc2lnblkgLSAyLjA7XG5cdFx0fVxuXHRcdHJldHVybiB2ZWMyKCAwLjEyNSwgMC4yNSApICogcGxhbmFyICsgdmVjMiggMC4zNzUsIDAuNzUgKTtcblx0fVxuXHRmbG9hdCBnZXRQb2ludFNoYWRvdyggc2FtcGxlcjJEIHNoYWRvd01hcCwgdmVjMiBzaGFkb3dNYXBTaXplLCBmbG9hdCBzaGFkb3dCaWFzLCBmbG9hdCBzaGFkb3dSYWRpdXMsIHZlYzQgc2hhZG93Q29vcmQsIGZsb2F0IHNoYWRvd0NhbWVyYU5lYXIsIGZsb2F0IHNoYWRvd0NhbWVyYUZhciApIHtcblx0XHR2ZWMyIHRleGVsU2l6ZSA9IHZlYzIoIDEuMCApIC8gKCBzaGFkb3dNYXBTaXplICogdmVjMiggNC4wLCAyLjAgKSApO1xuXHRcdHZlYzMgbGlnaHRUb1Bvc2l0aW9uID0gc2hhZG93Q29vcmQueHl6O1xuXHRcdGZsb2F0IGRwID0gKCBsZW5ndGgoIGxpZ2h0VG9Qb3NpdGlvbiApIC0gc2hhZG93Q2FtZXJhTmVhciApIC8gKCBzaGFkb3dDYW1lcmFGYXIgLSBzaGFkb3dDYW1lcmFOZWFyICk7XHRcdGRwICs9IHNoYWRvd0JpYXM7XG5cdFx0dmVjMyBiZDNEID0gbm9ybWFsaXplKCBsaWdodFRvUG9zaXRpb24gKTtcblx0XHQjaWYgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfUENGICkgfHwgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfUENGX1NPRlQgKSB8fCBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9WU00gKVxuXHRcdFx0dmVjMiBvZmZzZXQgPSB2ZWMyKCAtIDEsIDEgKSAqIHNoYWRvd1JhZGl1cyAqIHRleGVsU2l6ZS55O1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC54eXksIHRleGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnl5eSwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHl4LCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eXgsIHRleGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNELCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC54eHksIHRleGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnl4eSwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHh4LCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eHgsIHRleGVsU2l6ZS55ICksIGRwIClcblx0XHRcdCkgKiAoIDEuMCAvIDkuMCApO1xuXHRcdCNlbHNlXG5cdFx0XHRyZXR1cm4gdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCwgdGV4ZWxTaXplLnkgKSwgZHAgKTtcblx0XHQjZW5kaWZcblx0fVxuI2VuZGlmIixzaGFkb3dtYXBfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfU0hBRE9XTUFQXG5cdCNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwXG5cdFx0dW5pZm9ybSBtYXQ0IGRpcmVjdGlvbmFsU2hhZG93TWF0cml4WyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTtcblx0XHR2YXJ5aW5nIHZlYzQgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHN0cnVjdCBEaXJlY3Rpb25hbExpZ2h0U2hhZG93IHtcblx0XHRcdGZsb2F0IHNoYWRvd0JpYXM7XG5cdFx0XHRmbG9hdCBzaGFkb3dOb3JtYWxCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93UmFkaXVzO1xuXHRcdFx0dmVjMiBzaGFkb3dNYXBTaXplO1xuXHRcdH07XG5cdFx0dW5pZm9ybSBEaXJlY3Rpb25hbExpZ2h0U2hhZG93IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTtcblx0I2VuZGlmXG5cdCNpZiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMFxuXHRcdHVuaWZvcm0gbWF0NCBzcG90U2hhZG93TWF0cml4WyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07XG5cdFx0dmFyeWluZyB2ZWM0IHZTcG90U2hhZG93Q29vcmRbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTtcblx0XHRzdHJ1Y3QgU3BvdExpZ2h0U2hhZG93IHtcblx0XHRcdGZsb2F0IHNoYWRvd0JpYXM7XG5cdFx0XHRmbG9hdCBzaGFkb3dOb3JtYWxCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93UmFkaXVzO1xuXHRcdFx0dmVjMiBzaGFkb3dNYXBTaXplO1xuXHRcdH07XG5cdFx0dW5pZm9ybSBTcG90TGlnaHRTaGFkb3cgc3BvdExpZ2h0U2hhZG93c1sgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdO1xuXHQjZW5kaWZcblx0I2lmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMFxuXHRcdHVuaWZvcm0gbWF0NCBwb2ludFNoYWRvd01hdHJpeFsgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTtcblx0XHR2YXJ5aW5nIHZlYzQgdlBvaW50U2hhZG93Q29vcmRbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07XG5cdFx0c3RydWN0IFBvaW50TGlnaHRTaGFkb3cge1xuXHRcdFx0ZmxvYXQgc2hhZG93Qmlhcztcblx0XHRcdGZsb2F0IHNoYWRvd05vcm1hbEJpYXM7XG5cdFx0XHRmbG9hdCBzaGFkb3dSYWRpdXM7XG5cdFx0XHR2ZWMyIHNoYWRvd01hcFNpemU7XG5cdFx0XHRmbG9hdCBzaGFkb3dDYW1lcmFOZWFyO1xuXHRcdFx0ZmxvYXQgc2hhZG93Q2FtZXJhRmFyO1xuXHRcdH07XG5cdFx0dW5pZm9ybSBQb2ludExpZ2h0U2hhZG93IHBvaW50TGlnaHRTaGFkb3dzWyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdO1xuXHQjZW5kaWZcbiNlbmRpZiIsc2hhZG93bWFwX3ZlcnRleDoiI2lmZGVmIFVTRV9TSEFET1dNQVBcblx0I2lmIE5VTV9ESVJfTElHSFRfU0hBRE9XUyA+IDAgfHwgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDAgfHwgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwXG5cdFx0dmVjMyBzaGFkb3dXb3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIHRyYW5zZm9ybWVkTm9ybWFsLCB2aWV3TWF0cml4ICk7XG5cdFx0dmVjNCBzaGFkb3dXb3JsZFBvc2l0aW9uO1xuXHQjZW5kaWZcblx0I2lmIE5VTV9ESVJfTElHSFRfU0hBRE9XUyA+IDBcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fRElSX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7XG5cdFx0c2hhZG93V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24gKyB2ZWM0KCBzaGFkb3dXb3JsZE5vcm1hbCAqIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBpIF0uc2hhZG93Tm9ybWFsQmlhcywgMCApO1xuXHRcdHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBpIF0gPSBkaXJlY3Rpb25hbFNoYWRvd01hdHJpeFsgaSBdICogc2hhZG93V29ybGRQb3NpdGlvbjtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuXHQjZW5kaWZcblx0I2lmIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwXG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRfU0hBRE9XUzsgaSArKyApIHtcblx0XHRzaGFkb3dXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbiArIHZlYzQoIHNoYWRvd1dvcmxkTm9ybWFsICogc3BvdExpZ2h0U2hhZG93c1sgaSBdLnNoYWRvd05vcm1hbEJpYXMsIDAgKTtcblx0XHR2U3BvdFNoYWRvd0Nvb3JkWyBpIF0gPSBzcG90U2hhZG93TWF0cml4WyBpIF0gKiBzaGFkb3dXb3JsZFBvc2l0aW9uO1xuXHR9XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG5cdCNlbmRpZlxuXHQjaWYgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwXG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7XG5cdFx0c2hhZG93V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24gKyB2ZWM0KCBzaGFkb3dXb3JsZE5vcm1hbCAqIHBvaW50TGlnaHRTaGFkb3dzWyBpIF0uc2hhZG93Tm9ybWFsQmlhcywgMCApO1xuXHRcdHZQb2ludFNoYWRvd0Nvb3JkWyBpIF0gPSBwb2ludFNoYWRvd01hdHJpeFsgaSBdICogc2hhZG93V29ybGRQb3NpdGlvbjtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuXHQjZW5kaWZcbiNlbmRpZiIsc2hhZG93bWFza19wYXJzX2ZyYWdtZW50OiJmbG9hdCBnZXRTaGFkb3dNYXNrKCkge1xuXHRmbG9hdCBzaGFkb3cgPSAxLjA7XG5cdCNpZmRlZiBVU0VfU0hBRE9XTUFQXG5cdCNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwXG5cdERpcmVjdGlvbmFsTGlnaHRTaGFkb3cgZGlyZWN0aW9uYWxMaWdodDtcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fRElSX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7XG5cdFx0ZGlyZWN0aW9uYWxMaWdodCA9IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBpIF07XG5cdFx0c2hhZG93ICo9IHJlY2VpdmVTaGFkb3cgPyBnZXRTaGFkb3coIGRpcmVjdGlvbmFsU2hhZG93TWFwWyBpIF0sIGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93TWFwU2l6ZSwgZGlyZWN0aW9uYWxMaWdodC5zaGFkb3dCaWFzLCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvd1JhZGl1cywgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIGkgXSApIDogMS4wO1xuXHR9XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG5cdCNlbmRpZlxuXHQjaWYgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDBcblx0U3BvdExpZ2h0U2hhZG93IHNwb3RMaWdodDtcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fU1BPVF9MSUdIVF9TSEFET1dTOyBpICsrICkge1xuXHRcdHNwb3RMaWdodCA9IHNwb3RMaWdodFNoYWRvd3NbIGkgXTtcblx0XHRzaGFkb3cgKj0gcmVjZWl2ZVNoYWRvdyA/IGdldFNoYWRvdyggc3BvdFNoYWRvd01hcFsgaSBdLCBzcG90TGlnaHQuc2hhZG93TWFwU2l6ZSwgc3BvdExpZ2h0LnNoYWRvd0JpYXMsIHNwb3RMaWdodC5zaGFkb3dSYWRpdXMsIHZTcG90U2hhZG93Q29vcmRbIGkgXSApIDogMS4wO1xuXHR9XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG5cdCNlbmRpZlxuXHQjaWYgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwXG5cdFBvaW50TGlnaHRTaGFkb3cgcG9pbnRMaWdodDtcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUzsgaSArKyApIHtcblx0XHRwb2ludExpZ2h0ID0gcG9pbnRMaWdodFNoYWRvd3NbIGkgXTtcblx0XHRzaGFkb3cgKj0gcmVjZWl2ZVNoYWRvdyA/IGdldFBvaW50U2hhZG93KCBwb2ludFNoYWRvd01hcFsgaSBdLCBwb2ludExpZ2h0LnNoYWRvd01hcFNpemUsIHBvaW50TGlnaHQuc2hhZG93QmlhcywgcG9pbnRMaWdodC5zaGFkb3dSYWRpdXMsIHZQb2ludFNoYWRvd0Nvb3JkWyBpIF0sIHBvaW50TGlnaHQuc2hhZG93Q2FtZXJhTmVhciwgcG9pbnRMaWdodC5zaGFkb3dDYW1lcmFGYXIgKSA6IDEuMDtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuXHQjZW5kaWZcblx0I2VuZGlmXG5cdHJldHVybiBzaGFkb3c7XG59Iixza2luYmFzZV92ZXJ0ZXg6IiNpZmRlZiBVU0VfU0tJTk5JTkdcblx0bWF0NCBib25lTWF0WCA9IGdldEJvbmVNYXRyaXgoIHNraW5JbmRleC54ICk7XG5cdG1hdDQgYm9uZU1hdFkgPSBnZXRCb25lTWF0cml4KCBza2luSW5kZXgueSApO1xuXHRtYXQ0IGJvbmVNYXRaID0gZ2V0Qm9uZU1hdHJpeCggc2tpbkluZGV4LnogKTtcblx0bWF0NCBib25lTWF0VyA9IGdldEJvbmVNYXRyaXgoIHNraW5JbmRleC53ICk7XG4jZW5kaWYiLHNraW5uaW5nX3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX1NLSU5OSU5HXG5cdHVuaWZvcm0gbWF0NCBiaW5kTWF0cml4O1xuXHR1bmlmb3JtIG1hdDQgYmluZE1hdHJpeEludmVyc2U7XG5cdCNpZmRlZiBCT05FX1RFWFRVUkVcblx0XHR1bmlmb3JtIGhpZ2hwIHNhbXBsZXIyRCBib25lVGV4dHVyZTtcblx0XHR1bmlmb3JtIGludCBib25lVGV4dHVyZVNpemU7XG5cdFx0bWF0NCBnZXRCb25lTWF0cml4KCBjb25zdCBpbiBmbG9hdCBpICkge1xuXHRcdFx0ZmxvYXQgaiA9IGkgKiA0LjA7XG5cdFx0XHRmbG9hdCB4ID0gbW9kKCBqLCBmbG9hdCggYm9uZVRleHR1cmVTaXplICkgKTtcblx0XHRcdGZsb2F0IHkgPSBmbG9vciggaiAvIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKSApO1xuXHRcdFx0ZmxvYXQgZHggPSAxLjAgLyBmbG9hdCggYm9uZVRleHR1cmVTaXplICk7XG5cdFx0XHRmbG9hdCBkeSA9IDEuMCAvIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKTtcblx0XHRcdHkgPSBkeSAqICggeSArIDAuNSApO1xuXHRcdFx0dmVjNCB2MSA9IHRleHR1cmUyRCggYm9uZVRleHR1cmUsIHZlYzIoIGR4ICogKCB4ICsgMC41ICksIHkgKSApO1xuXHRcdFx0dmVjNCB2MiA9IHRleHR1cmUyRCggYm9uZVRleHR1cmUsIHZlYzIoIGR4ICogKCB4ICsgMS41ICksIHkgKSApO1xuXHRcdFx0dmVjNCB2MyA9IHRleHR1cmUyRCggYm9uZVRleHR1cmUsIHZlYzIoIGR4ICogKCB4ICsgMi41ICksIHkgKSApO1xuXHRcdFx0dmVjNCB2NCA9IHRleHR1cmUyRCggYm9uZVRleHR1cmUsIHZlYzIoIGR4ICogKCB4ICsgMy41ICksIHkgKSApO1xuXHRcdFx0bWF0NCBib25lID0gbWF0NCggdjEsIHYyLCB2MywgdjQgKTtcblx0XHRcdHJldHVybiBib25lO1xuXHRcdH1cblx0I2Vsc2Vcblx0XHR1bmlmb3JtIG1hdDQgYm9uZU1hdHJpY2VzWyBNQVhfQk9ORVMgXTtcblx0XHRtYXQ0IGdldEJvbmVNYXRyaXgoIGNvbnN0IGluIGZsb2F0IGkgKSB7XG5cdFx0XHRtYXQ0IGJvbmUgPSBib25lTWF0cmljZXNbIGludChpKSBdO1xuXHRcdFx0cmV0dXJuIGJvbmU7XG5cdFx0fVxuXHQjZW5kaWZcbiNlbmRpZiIsc2tpbm5pbmdfdmVydGV4OiIjaWZkZWYgVVNFX1NLSU5OSU5HXG5cdHZlYzQgc2tpblZlcnRleCA9IGJpbmRNYXRyaXggKiB2ZWM0KCB0cmFuc2Zvcm1lZCwgMS4wICk7XG5cdHZlYzQgc2tpbm5lZCA9IHZlYzQoIDAuMCApO1xuXHRza2lubmVkICs9IGJvbmVNYXRYICogc2tpblZlcnRleCAqIHNraW5XZWlnaHQueDtcblx0c2tpbm5lZCArPSBib25lTWF0WSAqIHNraW5WZXJ0ZXggKiBza2luV2VpZ2h0Lnk7XG5cdHNraW5uZWQgKz0gYm9uZU1hdFogKiBza2luVmVydGV4ICogc2tpbldlaWdodC56O1xuXHRza2lubmVkICs9IGJvbmVNYXRXICogc2tpblZlcnRleCAqIHNraW5XZWlnaHQudztcblx0dHJhbnNmb3JtZWQgPSAoIGJpbmRNYXRyaXhJbnZlcnNlICogc2tpbm5lZCApLnh5ejtcbiNlbmRpZiIsc2tpbm5vcm1hbF92ZXJ0ZXg6IiNpZmRlZiBVU0VfU0tJTk5JTkdcblx0bWF0NCBza2luTWF0cml4ID0gbWF0NCggMC4wICk7XG5cdHNraW5NYXRyaXggKz0gc2tpbldlaWdodC54ICogYm9uZU1hdFg7XG5cdHNraW5NYXRyaXggKz0gc2tpbldlaWdodC55ICogYm9uZU1hdFk7XG5cdHNraW5NYXRyaXggKz0gc2tpbldlaWdodC56ICogYm9uZU1hdFo7XG5cdHNraW5NYXRyaXggKz0gc2tpbldlaWdodC53ICogYm9uZU1hdFc7XG5cdHNraW5NYXRyaXggPSBiaW5kTWF0cml4SW52ZXJzZSAqIHNraW5NYXRyaXggKiBiaW5kTWF0cml4O1xuXHRvYmplY3ROb3JtYWwgPSB2ZWM0KCBza2luTWF0cml4ICogdmVjNCggb2JqZWN0Tm9ybWFsLCAwLjAgKSApLnh5ejtcblx0I2lmZGVmIFVTRV9UQU5HRU5UXG5cdFx0b2JqZWN0VGFuZ2VudCA9IHZlYzQoIHNraW5NYXRyaXggKiB2ZWM0KCBvYmplY3RUYW5nZW50LCAwLjAgKSApLnh5ejtcblx0I2VuZGlmXG4jZW5kaWYiLHNwZWN1bGFybWFwX2ZyYWdtZW50OiJmbG9hdCBzcGVjdWxhclN0cmVuZ3RoO1xuI2lmZGVmIFVTRV9TUEVDVUxBUk1BUFxuXHR2ZWM0IHRleGVsU3BlY3VsYXIgPSB0ZXh0dXJlMkQoIHNwZWN1bGFyTWFwLCB2VXYgKTtcblx0c3BlY3VsYXJTdHJlbmd0aCA9IHRleGVsU3BlY3VsYXIucjtcbiNlbHNlXG5cdHNwZWN1bGFyU3RyZW5ndGggPSAxLjA7XG4jZW5kaWYiLHNwZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfU1BFQ1VMQVJNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgc3BlY3VsYXJNYXA7XG4jZW5kaWYiLHRvbmVtYXBwaW5nX2ZyYWdtZW50OiIjaWYgZGVmaW5lZCggVE9ORV9NQVBQSU5HIClcblx0Z2xfRnJhZ0NvbG9yLnJnYiA9IHRvbmVNYXBwaW5nKCBnbF9GcmFnQ29sb3IucmdiICk7XG4jZW5kaWYiLHRvbmVtYXBwaW5nX3BhcnNfZnJhZ21lbnQ6IiNpZm5kZWYgc2F0dXJhdGVcbiNkZWZpbmUgc2F0dXJhdGUoYSkgY2xhbXAoIGEsIDAuMCwgMS4wIClcbiNlbmRpZlxudW5pZm9ybSBmbG9hdCB0b25lTWFwcGluZ0V4cG9zdXJlO1xudmVjMyBMaW5lYXJUb25lTWFwcGluZyggdmVjMyBjb2xvciApIHtcblx0cmV0dXJuIHRvbmVNYXBwaW5nRXhwb3N1cmUgKiBjb2xvcjtcbn1cbnZlYzMgUmVpbmhhcmRUb25lTWFwcGluZyggdmVjMyBjb2xvciApIHtcblx0Y29sb3IgKj0gdG9uZU1hcHBpbmdFeHBvc3VyZTtcblx0cmV0dXJuIHNhdHVyYXRlKCBjb2xvciAvICggdmVjMyggMS4wICkgKyBjb2xvciApICk7XG59XG52ZWMzIE9wdGltaXplZENpbmVvblRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkge1xuXHRjb2xvciAqPSB0b25lTWFwcGluZ0V4cG9zdXJlO1xuXHRjb2xvciA9IG1heCggdmVjMyggMC4wICksIGNvbG9yIC0gMC4wMDQgKTtcblx0cmV0dXJuIHBvdyggKCBjb2xvciAqICggNi4yICogY29sb3IgKyAwLjUgKSApIC8gKCBjb2xvciAqICggNi4yICogY29sb3IgKyAxLjcgKSArIDAuMDYgKSwgdmVjMyggMi4yICkgKTtcbn1cbnZlYzMgUlJUQW5kT0RURml0KCB2ZWMzIHYgKSB7XG5cdHZlYzMgYSA9IHYgKiAoIHYgKyAwLjAyNDU3ODYgKSAtIDAuMDAwMDkwNTM3O1xuXHR2ZWMzIGIgPSB2ICogKCAwLjk4MzcyOSAqIHYgKyAwLjQzMjk1MTAgKSArIDAuMjM4MDgxO1xuXHRyZXR1cm4gYSAvIGI7XG59XG52ZWMzIEFDRVNGaWxtaWNUb25lTWFwcGluZyggdmVjMyBjb2xvciApIHtcblx0Y29uc3QgbWF0MyBBQ0VTSW5wdXRNYXQgPSBtYXQzKFxuXHRcdHZlYzMoIDAuNTk3MTksIDAuMDc2MDAsIDAuMDI4NDAgKSxcdFx0dmVjMyggMC4zNTQ1OCwgMC45MDgzNCwgMC4xMzM4MyApLFxuXHRcdHZlYzMoIDAuMDQ4MjMsIDAuMDE1NjYsIDAuODM3NzcgKVxuXHQpO1xuXHRjb25zdCBtYXQzIEFDRVNPdXRwdXRNYXQgPSBtYXQzKFxuXHRcdHZlYzMoICAxLjYwNDc1LCAtMC4xMDIwOCwgLTAuMDAzMjcgKSxcdFx0dmVjMyggLTAuNTMxMDgsICAxLjEwODEzLCAtMC4wNzI3NiApLFxuXHRcdHZlYzMoIC0wLjA3MzY3LCAtMC4wMDYwNSwgIDEuMDc2MDIgKVxuXHQpO1xuXHRjb2xvciAqPSB0b25lTWFwcGluZ0V4cG9zdXJlIC8gMC42O1xuXHRjb2xvciA9IEFDRVNJbnB1dE1hdCAqIGNvbG9yO1xuXHRjb2xvciA9IFJSVEFuZE9EVEZpdCggY29sb3IgKTtcblx0Y29sb3IgPSBBQ0VTT3V0cHV0TWF0ICogY29sb3I7XG5cdHJldHVybiBzYXR1cmF0ZSggY29sb3IgKTtcbn1cbnZlYzMgQ3VzdG9tVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7IHJldHVybiBjb2xvcjsgfSIsdHJhbnNtaXNzaW9ubWFwX2ZyYWdtZW50OiIjaWZkZWYgVVNFX1RSQU5TTUlTU0lPTk1BUFxuXHR0b3RhbFRyYW5zbWlzc2lvbiAqPSB0ZXh0dXJlMkQoIHRyYW5zbWlzc2lvbk1hcCwgdlV2ICkucjtcbiNlbmRpZiIsdHJhbnNtaXNzaW9ubWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIHRyYW5zbWlzc2lvbk1hcDtcbiNlbmRpZiIsdXZfcGFyc19mcmFnbWVudDoiI2lmICggZGVmaW5lZCggVVNFX1VWICkgJiYgISBkZWZpbmVkKCBVVlNfVkVSVEVYX09OTFkgKSApXG5cdHZhcnlpbmcgdmVjMiB2VXY7XG4jZW5kaWYiLHV2X3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX1VWXG5cdCNpZmRlZiBVVlNfVkVSVEVYX09OTFlcblx0XHR2ZWMyIHZVdjtcblx0I2Vsc2Vcblx0XHR2YXJ5aW5nIHZlYzIgdlV2O1xuXHQjZW5kaWZcblx0dW5pZm9ybSBtYXQzIHV2VHJhbnNmb3JtO1xuI2VuZGlmIix1dl92ZXJ0ZXg6IiNpZmRlZiBVU0VfVVZcblx0dlV2ID0gKCB1dlRyYW5zZm9ybSAqIHZlYzMoIHV2LCAxICkgKS54eTtcbiNlbmRpZiIsdXYyX3BhcnNfZnJhZ21lbnQ6IiNpZiBkZWZpbmVkKCBVU0VfTElHSFRNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQU9NQVAgKVxuXHR2YXJ5aW5nIHZlYzIgdlV2MjtcbiNlbmRpZiIsdXYyX3BhcnNfdmVydGV4OiIjaWYgZGVmaW5lZCggVVNFX0xJR0hUTUFQICkgfHwgZGVmaW5lZCggVVNFX0FPTUFQIClcblx0YXR0cmlidXRlIHZlYzIgdXYyO1xuXHR2YXJ5aW5nIHZlYzIgdlV2Mjtcblx0dW5pZm9ybSBtYXQzIHV2MlRyYW5zZm9ybTtcbiNlbmRpZiIsdXYyX3ZlcnRleDoiI2lmIGRlZmluZWQoIFVTRV9MSUdIVE1BUCApIHx8IGRlZmluZWQoIFVTRV9BT01BUCApXG5cdHZVdjIgPSAoIHV2MlRyYW5zZm9ybSAqIHZlYzMoIHV2MiwgMSApICkueHk7XG4jZW5kaWYiLHdvcmxkcG9zX3ZlcnRleDoiI2lmIGRlZmluZWQoIFVTRV9FTlZNQVAgKSB8fCBkZWZpbmVkKCBESVNUQU5DRSApIHx8IGRlZmluZWQgKCBVU0VfU0hBRE9XTUFQIClcblx0dmVjNCB3b3JsZFBvc2l0aW9uID0gdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApO1xuXHQjaWZkZWYgVVNFX0lOU1RBTkNJTkdcblx0XHR3b3JsZFBvc2l0aW9uID0gaW5zdGFuY2VNYXRyaXggKiB3b3JsZFBvc2l0aW9uO1xuXHQjZW5kaWZcblx0d29ybGRQb3NpdGlvbiA9IG1vZGVsTWF0cml4ICogd29ybGRQb3NpdGlvbjtcbiNlbmRpZiIsYmFja2dyb3VuZF9mcmFnOiJ1bmlmb3JtIHNhbXBsZXIyRCB0MkQ7XG52YXJ5aW5nIHZlYzIgdlV2O1xudm9pZCBtYWluKCkge1xuXHR2ZWM0IHRleENvbG9yID0gdGV4dHVyZTJEKCB0MkQsIHZVdiApO1xuXHRnbF9GcmFnQ29sb3IgPSBtYXBUZXhlbFRvTGluZWFyKCB0ZXhDb2xvciApO1xuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG59IixiYWNrZ3JvdW5kX3ZlcnQ6InZhcnlpbmcgdmVjMiB2VXY7XG51bmlmb3JtIG1hdDMgdXZUcmFuc2Zvcm07XG52b2lkIG1haW4oKSB7XG5cdHZVdiA9ICggdXZUcmFuc2Zvcm0gKiB2ZWMzKCB1diwgMSApICkueHk7XG5cdGdsX1Bvc2l0aW9uID0gdmVjNCggcG9zaXRpb24ueHksIDEuMCwgMS4wICk7XG59IixjdWJlX2ZyYWc6IiNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG52YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uO1xuI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD5cbnZvaWQgbWFpbigpIHtcblx0dmVjMyB2UmVmbGVjdCA9IHZXb3JsZERpcmVjdGlvbjtcblx0I2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD5cblx0Z2xfRnJhZ0NvbG9yID0gZW52Q29sb3I7XG5cdGdsX0ZyYWdDb2xvci5hICo9IG9wYWNpdHk7XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cbn0iLGN1YmVfdmVydDoidmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjtcbiNpbmNsdWRlIDxjb21tb24+XG52b2lkIG1haW4oKSB7XG5cdHZXb3JsZERpcmVjdGlvbiA9IHRyYW5zZm9ybURpcmVjdGlvbiggcG9zaXRpb24sIG1vZGVsTWF0cml4ICk7XG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0Z2xfUG9zaXRpb24ueiA9IGdsX1Bvc2l0aW9uLnc7XG59IixkZXB0aF9mcmFnOiIjaWYgREVQVEhfUEFDS0lORyA9PSAzMjAwXG5cdHVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNlbmRpZlxuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxwYWNraW5nPlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50PlxudmFyeWluZyB2ZWMyIHZIaWdoUHJlY2lzaW9uWlc7XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggMS4wICk7XG5cdCNpZiBERVBUSF9QQUNLSU5HID09IDMyMDBcblx0XHRkaWZmdXNlQ29sb3IuYSA9IG9wYWNpdHk7XG5cdCNlbmRpZlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0ZmxvYXQgZnJhZ0Nvb3JkWiA9IDAuNSAqIHZIaWdoUHJlY2lzaW9uWldbMF0gLyB2SGlnaFByZWNpc2lvblpXWzFdICsgMC41O1xuXHQjaWYgREVQVEhfUEFDS0lORyA9PSAzMjAwXG5cdFx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggdmVjMyggMS4wIC0gZnJhZ0Nvb3JkWiApLCBvcGFjaXR5ICk7XG5cdCNlbGlmIERFUFRIX1BBQ0tJTkcgPT0gMzIwMVxuXHRcdGdsX0ZyYWdDb2xvciA9IHBhY2tEZXB0aFRvUkdCQSggZnJhZ0Nvb3JkWiApO1xuXHQjZW5kaWZcbn0iLGRlcHRoX3ZlcnQ6IiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cbnZhcnlpbmcgdmVjMiB2SGlnaFByZWNpc2lvblpXO1xudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaWZkZWYgVVNFX0RJU1BMQUNFTUVOVE1BUFxuXHRcdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdFx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0XHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNlbmRpZlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0dkhpZ2hQcmVjaXNpb25aVyA9IGdsX1Bvc2l0aW9uLnp3O1xufSIsZGlzdGFuY2VSR0JBX2ZyYWc6IiNkZWZpbmUgRElTVEFOQ0VcbnVuaWZvcm0gdmVjMyByZWZlcmVuY2VQb3NpdGlvbjtcbnVuaWZvcm0gZmxvYXQgbmVhckRpc3RhbmNlO1xudW5pZm9ybSBmbG9hdCBmYXJEaXN0YW5jZTtcbnZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjtcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4gKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIDEuMCApO1xuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XG5cdGZsb2F0IGRpc3QgPSBsZW5ndGgoIHZXb3JsZFBvc2l0aW9uIC0gcmVmZXJlbmNlUG9zaXRpb24gKTtcblx0ZGlzdCA9ICggZGlzdCAtIG5lYXJEaXN0YW5jZSApIC8gKCBmYXJEaXN0YW5jZSAtIG5lYXJEaXN0YW5jZSApO1xuXHRkaXN0ID0gc2F0dXJhdGUoIGRpc3QgKTtcblx0Z2xfRnJhZ0NvbG9yID0gcGFja0RlcHRoVG9SR0JBKCBkaXN0ICk7XG59IixkaXN0YW5jZVJHQkFfdmVydDoiI2RlZmluZSBESVNUQU5DRVxudmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaWZkZWYgVVNFX0RJU1BMQUNFTUVOVE1BUFxuXHRcdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdFx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0XHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNlbmRpZlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0dldvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uLnh5ejtcbn0iLGVxdWlyZWN0X2ZyYWc6InVuaWZvcm0gc2FtcGxlcjJEIHRFcXVpcmVjdDtcbnZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247XG4jaW5jbHVkZSA8Y29tbW9uPlxudm9pZCBtYWluKCkge1xuXHR2ZWMzIGRpcmVjdGlvbiA9IG5vcm1hbGl6ZSggdldvcmxkRGlyZWN0aW9uICk7XG5cdHZlYzIgc2FtcGxlVVYgPSBlcXVpcmVjdFV2KCBkaXJlY3Rpb24gKTtcblx0dmVjNCB0ZXhDb2xvciA9IHRleHR1cmUyRCggdEVxdWlyZWN0LCBzYW1wbGVVViApO1xuXHRnbF9GcmFnQ29sb3IgPSBtYXBUZXhlbFRvTGluZWFyKCB0ZXhDb2xvciApO1xuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG59IixlcXVpcmVjdF92ZXJ0OiJ2YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uO1xuI2luY2x1ZGUgPGNvbW1vbj5cbnZvaWQgbWFpbigpIHtcblx0dldvcmxkRGlyZWN0aW9uID0gdHJhbnNmb3JtRGlyZWN0aW9uKCBwb3NpdGlvbiwgbW9kZWxNYXRyaXggKTtcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxufSIsbGluZWRhc2hlZF9mcmFnOiJ1bmlmb3JtIHZlYzMgZGlmZnVzZTtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbnVuaWZvcm0gZmxvYXQgZGFzaFNpemU7XG51bmlmb3JtIGZsb2F0IHRvdGFsU2l6ZTtcbnZhcnlpbmcgZmxvYXQgdkxpbmVEaXN0YW5jZTtcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHRpZiAoIG1vZCggdkxpbmVEaXN0YW5jZSwgdG90YWxTaXplICkgPiBkYXNoU2l6ZSApIHtcblx0XHRkaXNjYXJkO1xuXHR9XG5cdHZlYzMgb3V0Z29pbmdMaWdodCA9IHZlYzMoIDAuMCApO1xuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdG91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiO1xuXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCBvdXRnb2luZ0xpZ2h0LCBkaWZmdXNlQ29sb3IuYSApO1xuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxufSIsbGluZWRhc2hlZF92ZXJ0OiJ1bmlmb3JtIGZsb2F0IHNjYWxlO1xuYXR0cmlidXRlIGZsb2F0IGxpbmVEaXN0YW5jZTtcbnZhcnlpbmcgZmxvYXQgdkxpbmVEaXN0YW5jZTtcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0dkxpbmVEaXN0YW5jZSA9IHNjYWxlICogbGluZURpc3RhbmNlO1xuXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbn0iLG1lc2hiYXNpY19mcmFnOiJ1bmlmb3JtIHZlYzMgZGlmZnVzZTtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dmFyeWluZyB2ZWMzIHZOb3JtYWw7XG4jZW5kaWZcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YW9tYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxlbnZtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8c3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPHNwZWN1bGFybWFwX2ZyYWdtZW50PlxuXHRSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApO1xuXHQjaWZkZWYgVVNFX0xJR0hUTUFQXG5cdFxuXHRcdHZlYzQgbGlnaHRNYXBUZXhlbD0gdGV4dHVyZTJEKCBsaWdodE1hcCwgdlV2MiApO1xuXHRcdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBsaWdodE1hcFRleGVsVG9MaW5lYXIoIGxpZ2h0TWFwVGV4ZWwgKS5yZ2IgKiBsaWdodE1hcEludGVuc2l0eTtcblx0I2Vsc2Vcblx0XHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gdmVjMyggMS4wICk7XG5cdCNlbmRpZlxuXHQjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+XG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSAqPSBkaWZmdXNlQ29sb3IucmdiO1xuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2U7XG5cdCNpbmNsdWRlIDxlbnZtYXBfZnJhZ21lbnQ+XG5cdGdsX0ZyYWdDb2xvciA9IHZlYzQoIG91dGdvaW5nTGlnaHQsIGRpZmZ1c2VDb2xvci5hICk7XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+XG59IixtZXNoYmFzaWNfdmVydDoiI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZW52bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx1djJfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaWZkZWYgVVNFX0VOVk1BUFxuXHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD5cblx0I2VuZGlmXG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxlbnZtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbn0iLG1lc2hsYW1iZXJ0X2ZyYWc6InVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSB2ZWMzIGVtaXNzaXZlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xudmFyeWluZyB2ZWMzIHZMaWdodEZyb250O1xudmFyeWluZyB2ZWMzIHZJbmRpcmVjdEZyb250O1xuI2lmZGVmIERPVUJMRV9TSURFRFxuXHR2YXJ5aW5nIHZlYzMgdkxpZ2h0QmFjaztcblx0dmFyeWluZyB2ZWMzIHZJbmRpcmVjdEJhY2s7XG4jZW5kaWZcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW52bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJzZGZzPlxuI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHNoYWRvd21hc2tfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xuXHRSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApO1xuXHR2ZWMzIHRvdGFsRW1pc3NpdmVSYWRpYW5jZSA9IGVtaXNzaXZlO1xuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8c3BlY3VsYXJtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9mcmFnbWVudD5cblx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSAoIGdsX0Zyb250RmFjaW5nICkgPyB2SW5kaXJlY3RGcm9udCA6IHZJbmRpcmVjdEJhY2s7XG5cdCNlbHNlXG5cdFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IHZJbmRpcmVjdEZyb250O1xuXHQjZW5kaWZcblx0I2luY2x1ZGUgPGxpZ2h0bWFwX2ZyYWdtZW50PlxuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKj0gQlJERl9EaWZmdXNlX0xhbWJlcnQoIGRpZmZ1c2VDb2xvci5yZ2IgKTtcblx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgPSAoIGdsX0Zyb250RmFjaW5nICkgPyB2TGlnaHRGcm9udCA6IHZMaWdodEJhY2s7XG5cdCNlbHNlXG5cdFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSA9IHZMaWdodEZyb250O1xuXHQjZW5kaWZcblx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSAqPSBCUkRGX0RpZmZ1c2VfTGFtYmVydCggZGlmZnVzZUNvbG9yLnJnYiApICogZ2V0U2hhZG93TWFzaygpO1xuXHQjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+XG5cdHZlYzMgb3V0Z29pbmdMaWdodCA9IHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKyB0b3RhbEVtaXNzaXZlUmFkaWFuY2U7XG5cdCNpbmNsdWRlIDxlbnZtYXBfZnJhZ21lbnQ+XG5cdGdsX0ZyYWdDb2xvciA9IHZlYzQoIG91dGdvaW5nTGlnaHQsIGRpZmZ1c2VDb2xvci5hICk7XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+XG59IixtZXNobGFtYmVydF92ZXJ0OiIjZGVmaW5lIExBTUJFUlRcbnZhcnlpbmcgdmVjMyB2TGlnaHRGcm9udDtcbnZhcnlpbmcgdmVjMyB2SW5kaXJlY3RGcm9udDtcbiNpZmRlZiBET1VCTEVfU0lERURcblx0dmFyeWluZyB2ZWMzIHZMaWdodEJhY2s7XG5cdHZhcnlpbmcgdmVjMyB2SW5kaXJlY3RCYWNrO1xuI2VuZGlmXG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxlbnZtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8YnNkZnM+XG4jaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx1djJfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0I2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD5cblx0I2luY2x1ZGUgPGVudm1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxsaWdodHNfbGFtYmVydF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbn0iLG1lc2htYXRjYXBfZnJhZzoiI2RlZmluZSBNQVRDQVBcbnVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xudW5pZm9ybSBzYW1wbGVyMkQgbWF0Y2FwO1xudmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xuI2VuZGlmXG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPlxuXHR2ZWMzIHZpZXdEaXIgPSBub3JtYWxpemUoIHZWaWV3UG9zaXRpb24gKTtcblx0dmVjMyB4ID0gbm9ybWFsaXplKCB2ZWMzKCB2aWV3RGlyLnosIDAuMCwgLSB2aWV3RGlyLnggKSApO1xuXHR2ZWMzIHkgPSBjcm9zcyggdmlld0RpciwgeCApO1xuXHR2ZWMyIHV2ID0gdmVjMiggZG90KCB4LCBub3JtYWwgKSwgZG90KCB5LCBub3JtYWwgKSApICogMC40OTUgKyAwLjU7XG5cdCNpZmRlZiBVU0VfTUFUQ0FQXG5cdFx0dmVjNCBtYXRjYXBDb2xvciA9IHRleHR1cmUyRCggbWF0Y2FwLCB1diApO1xuXHRcdG1hdGNhcENvbG9yID0gbWF0Y2FwVGV4ZWxUb0xpbmVhciggbWF0Y2FwQ29sb3IgKTtcblx0I2Vsc2Vcblx0XHR2ZWM0IG1hdGNhcENvbG9yID0gdmVjNCggMS4wICk7XG5cdCNlbmRpZlxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiICogbWF0Y2FwQ29sb3IucmdiO1xuXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCBvdXRnb2luZ0xpZ2h0LCBkaWZmdXNlQ29sb3IuYSApO1xuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50PlxufSIsbWVzaG1hdGNhcF92ZXJ0OiIjZGVmaW5lIE1BVENBUFxudmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xuI2VuZGlmXG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD5cblx0I2lmbmRlZiBGTEFUX1NIQURFRFxuXHRcdHZOb3JtYWwgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkTm9ybWFsICk7XG5cdCNlbmRpZlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0I2luY2x1ZGUgPGZvZ192ZXJ0ZXg+XG5cdHZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6O1xufSIsbWVzaHRvb25fZnJhZzoiI2RlZmluZSBUT09OXG51bmlmb3JtIHZlYzMgZGlmZnVzZTtcbnVuaWZvcm0gdmVjMyBlbWlzc2l2ZTtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxncmFkaWVudG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJzZGZzPlxuI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPlxuI2luY2x1ZGUgPGxpZ2h0c190b29uX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xuXHRSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApO1xuXHR2ZWMzIHRvdGFsRW1pc3NpdmVSYWRpYW5jZSA9IGVtaXNzaXZlO1xuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X2JlZ2luPlxuXHQjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+XG5cdCNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGxpZ2h0c190b29uX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2JlZ2luPlxuXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X21hcHM+XG5cdCNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfZW5kPlxuXHQjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+XG5cdHZlYzMgb3V0Z29pbmdMaWdodCA9IHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKyB0b3RhbEVtaXNzaXZlUmFkaWFuY2U7XG5cdGdsX0ZyYWdDb2xvciA9IHZlYzQoIG91dGdvaW5nTGlnaHQsIGRpZmZ1c2VDb2xvci5hICk7XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+XG59IixtZXNodG9vbl92ZXJ0OiIjZGVmaW5lIFRPT05cbnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcbiNlbmRpZlxuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8dXYyX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+XG4jaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZOb3JtYWwgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkTm9ybWFsICk7XG4jZW5kaWZcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdHZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6O1xuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPGZvZ192ZXJ0ZXg+XG59IixtZXNocGhvbmdfZnJhZzoiI2RlZmluZSBQSE9OR1xudW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XG51bmlmb3JtIHZlYzMgZW1pc3NpdmU7XG51bmlmb3JtIHZlYzMgc3BlY3VsYXI7XG51bmlmb3JtIGZsb2F0IHNoaW5pbmVzcztcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW52bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJzZGZzPlxuI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPlxuI2luY2x1ZGUgPGxpZ2h0c19waG9uZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xuXHRSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApO1xuXHR2ZWMzIHRvdGFsRW1pc3NpdmVSYWRpYW5jZSA9IGVtaXNzaXZlO1xuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8c3BlY3VsYXJtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+XG5cdCNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz5cblx0I2luY2x1ZGUgPGVtaXNzaXZlbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bGlnaHRzX3Bob25nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2JlZ2luPlxuXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X21hcHM+XG5cdCNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfZW5kPlxuXHQjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+XG5cdHZlYzMgb3V0Z29pbmdMaWdodCA9IHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKyByZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3BlY3VsYXIgKyB0b3RhbEVtaXNzaXZlUmFkaWFuY2U7XG5cdCNpbmNsdWRlIDxlbnZtYXBfZnJhZ21lbnQ+XG5cdGdsX0ZyYWdDb2xvciA9IHZlYzQoIG91dGdvaW5nTGlnaHQsIGRpZmZ1c2VDb2xvci5hICk7XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+XG59IixtZXNocGhvbmdfdmVydDoiI2RlZmluZSBQSE9OR1xudmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xuI2VuZGlmXG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZW52bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8dXYyX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+XG4jaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZOb3JtYWwgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkTm9ybWFsICk7XG4jZW5kaWZcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdHZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6O1xuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZW52bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNoYWRvd21hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufSIsbWVzaHBoeXNpY2FsX2ZyYWc6IiNkZWZpbmUgU1RBTkRBUkRcbiNpZmRlZiBQSFlTSUNBTFxuXHQjZGVmaW5lIFJFRkxFQ1RJVklUWVxuXHQjZGVmaW5lIENMRUFSQ09BVFxuXHQjZGVmaW5lIFRSQU5TTUlTU0lPTlxuI2VuZGlmXG51bmlmb3JtIHZlYzMgZGlmZnVzZTtcbnVuaWZvcm0gdmVjMyBlbWlzc2l2ZTtcbnVuaWZvcm0gZmxvYXQgcm91Z2huZXNzO1xudW5pZm9ybSBmbG9hdCBtZXRhbG5lc3M7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jaWZkZWYgVFJBTlNNSVNTSU9OXG5cdHVuaWZvcm0gZmxvYXQgdHJhbnNtaXNzaW9uO1xuI2VuZGlmXG4jaWZkZWYgUkVGTEVDVElWSVRZXG5cdHVuaWZvcm0gZmxvYXQgcmVmbGVjdGl2aXR5O1xuI2VuZGlmXG4jaWZkZWYgQ0xFQVJDT0FUXG5cdHVuaWZvcm0gZmxvYXQgY2xlYXJjb2F0O1xuXHR1bmlmb3JtIGZsb2F0IGNsZWFyY29hdFJvdWdobmVzcztcbiNlbmRpZlxuI2lmZGVmIFVTRV9TSEVFTlxuXHR1bmlmb3JtIHZlYzMgc2hlZW47XG4jZW5kaWZcbnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcblx0I2lmZGVmIFVTRV9UQU5HRU5UXG5cdFx0dmFyeWluZyB2ZWMzIHZUYW5nZW50O1xuXHRcdHZhcnlpbmcgdmVjMyB2Qml0YW5nZW50O1xuXHQjZW5kaWZcbiNlbmRpZlxuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxwYWNraW5nPlxuI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1djJfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFvbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHRyYW5zbWlzc2lvbm1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJzZGZzPlxuI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD5cbiNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW52bWFwX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+XG4jaW5jbHVkZSA8bGlnaHRzX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsZWFyY29hdF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHJvdWdobmVzc21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1ldGFsbmVzc21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xuXHRSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApO1xuXHR2ZWMzIHRvdGFsRW1pc3NpdmVSYWRpYW5jZSA9IGVtaXNzaXZlO1xuXHQjaWZkZWYgVFJBTlNNSVNTSU9OXG5cdFx0ZmxvYXQgdG90YWxUcmFuc21pc3Npb24gPSB0cmFuc21pc3Npb247XG5cdCNlbmRpZlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8cm91Z2huZXNzbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWV0YWxuZXNzbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X2JlZ2luPlxuXHQjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+XG5cdCNpbmNsdWRlIDxjbGVhcmNvYXRfbm9ybWFsX2ZyYWdtZW50X2JlZ2luPlxuXHQjaW5jbHVkZSA8Y2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9tYXBzPlxuXHQjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDx0cmFuc21pc3Npb25tYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxsaWdodHNfcGh5c2ljYWxfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfYmVnaW4+XG5cdCNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfbWFwcz5cblx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9lbmQ+XG5cdCNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD5cblx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTtcblx0I2lmZGVmIFRSQU5TTUlTU0lPTlxuXHRcdGRpZmZ1c2VDb2xvci5hICo9IG1peCggc2F0dXJhdGUoIDEuIC0gdG90YWxUcmFuc21pc3Npb24gKyBsaW5lYXJUb1JlbGF0aXZlTHVtaW5hbmNlKCByZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3BlY3VsYXIgKSApLCAxLjAsIG1ldGFsbmVzcyApO1xuXHQjZW5kaWZcblx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggb3V0Z29pbmdMaWdodCwgZGlmZnVzZUNvbG9yLmEgKTtcblx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD5cbn0iLG1lc2hwaHlzaWNhbF92ZXJ0OiIjZGVmaW5lIFNUQU5EQVJEXG52YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dmFyeWluZyB2ZWMzIHZOb3JtYWw7XG5cdCNpZmRlZiBVU0VfVEFOR0VOVFxuXHRcdHZhcnlpbmcgdmVjMyB2VGFuZ2VudDtcblx0XHR2YXJ5aW5nIHZlYzMgdkJpdGFuZ2VudDtcblx0I2VuZGlmXG4jZW5kaWZcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8dXYyX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cblx0I2luY2x1ZGUgPHV2Ml92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2Tm9ybWFsID0gbm9ybWFsaXplKCB0cmFuc2Zvcm1lZE5vcm1hbCApO1xuXHQjaWZkZWYgVVNFX1RBTkdFTlRcblx0XHR2VGFuZ2VudCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWRUYW5nZW50ICk7XG5cdFx0dkJpdGFuZ2VudCA9IG5vcm1hbGl6ZSggY3Jvc3MoIHZOb3JtYWwsIHZUYW5nZW50ICkgKiB0YW5nZW50LncgKTtcblx0I2VuZGlmXG4jZW5kaWZcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdHZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6O1xuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPGZvZ192ZXJ0ZXg+XG59Iixub3JtYWxfZnJhZzoiI2RlZmluZSBOT1JNQUxcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNpZiBkZWZpbmVkKCBGTEFUX1NIQURFRCApIHx8IGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApXG5cdHZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2VuZGlmXG4jaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xuXHQjaWZkZWYgVVNFX1RBTkdFTlRcblx0XHR2YXJ5aW5nIHZlYzMgdlRhbmdlbnQ7XG5cdFx0dmFyeWluZyB2ZWMzIHZCaXRhbmdlbnQ7XG5cdCNlbmRpZlxuI2VuZGlmXG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+XG5cdCNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz5cblx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggcGFja05vcm1hbFRvUkdCKCBub3JtYWwgKSwgb3BhY2l0eSApO1xufSIsbm9ybWFsX3ZlcnQ6IiNkZWZpbmUgTk9STUFMXG4jaWYgZGVmaW5lZCggRkxBVF9TSEFERUQgKSB8fCBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKVxuXHR2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbiNlbmRpZlxuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcblx0I2lmZGVmIFVTRV9UQU5HRU5UXG5cdFx0dmFyeWluZyB2ZWMzIHZUYW5nZW50O1xuXHRcdHZhcnlpbmcgdmVjMyB2Qml0YW5nZW50O1xuXHQjZW5kaWZcbiNlbmRpZlxuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD5cbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dk5vcm1hbCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWROb3JtYWwgKTtcblx0I2lmZGVmIFVTRV9UQU5HRU5UXG5cdFx0dlRhbmdlbnQgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkVGFuZ2VudCApO1xuXHRcdHZCaXRhbmdlbnQgPSBub3JtYWxpemUoIGNyb3NzKCB2Tm9ybWFsLCB2VGFuZ2VudCApICogdGFuZ2VudC53ICk7XG5cdCNlbmRpZlxuI2VuZGlmXG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PlxuI2lmIGRlZmluZWQoIEZMQVRfU0hBREVEICkgfHwgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQIClcblx0dlZpZXdQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7XG4jZW5kaWZcbn0iLHBvaW50c19mcmFnOiJ1bmlmb3JtIHZlYzMgZGlmZnVzZTtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFydGljbGVfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSB2ZWMzKCAwLjAgKTtcblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG1hcF9wYXJ0aWNsZV9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHRvdXRnb2luZ0xpZ2h0ID0gZGlmZnVzZUNvbG9yLnJnYjtcblx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggb3V0Z29pbmdMaWdodCwgZGlmZnVzZUNvbG9yLmEgKTtcblx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cbn0iLHBvaW50c192ZXJ0OiJ1bmlmb3JtIGZsb2F0IHNpemU7XG51bmlmb3JtIGZsb2F0IHNjYWxlO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG5cdGdsX1BvaW50U2l6ZSA9IHNpemU7XG5cdCNpZmRlZiBVU0VfU0laRUFUVEVOVUFUSU9OXG5cdFx0Ym9vbCBpc1BlcnNwZWN0aXZlID0gaXNQZXJzcGVjdGl2ZU1hdHJpeCggcHJvamVjdGlvbk1hdHJpeCApO1xuXHRcdGlmICggaXNQZXJzcGVjdGl2ZSApIGdsX1BvaW50U2l6ZSAqPSAoIHNjYWxlIC8gLSBtdlBvc2l0aW9uLnogKTtcblx0I2VuZGlmXG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PlxuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbn0iLHNoYWRvd19mcmFnOiJ1bmlmb3JtIHZlYzMgY29sb3I7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YnNkZnM+XG4jaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+XG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8c2hhZG93bWFza19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCBjb2xvciwgb3BhY2l0eSAqICggMS4wIC0gZ2V0U2hhZG93TWFzaygpICkgKTtcblx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxufSIsc2hhZG93X3ZlcnQ6IiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNoYWRvd21hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufSIsc3ByaXRlX2ZyYWc6InVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cblx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gdmVjMyggMC4wICk7XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cblx0b3V0Z29pbmdMaWdodCA9IGRpZmZ1c2VDb2xvci5yZ2I7XG5cdGdsX0ZyYWdDb2xvciA9IHZlYzQoIG91dGdvaW5nTGlnaHQsIGRpZmZ1c2VDb2xvci5hICk7XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cbn0iLHNwcml0ZV92ZXJ0OiJ1bmlmb3JtIGZsb2F0IHJvdGF0aW9uO1xudW5pZm9ybSB2ZWMyIGNlbnRlcjtcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cblx0dmVjNCBtdlBvc2l0aW9uID0gbW9kZWxWaWV3TWF0cml4ICogdmVjNCggMC4wLCAwLjAsIDAuMCwgMS4wICk7XG5cdHZlYzIgc2NhbGU7XG5cdHNjYWxlLnggPSBsZW5ndGgoIHZlYzMoIG1vZGVsTWF0cml4WyAwIF0ueCwgbW9kZWxNYXRyaXhbIDAgXS55LCBtb2RlbE1hdHJpeFsgMCBdLnogKSApO1xuXHRzY2FsZS55ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMSBdLngsIG1vZGVsTWF0cml4WyAxIF0ueSwgbW9kZWxNYXRyaXhbIDEgXS56ICkgKTtcblx0I2lmbmRlZiBVU0VfU0laRUFUVEVOVUFUSU9OXG5cdFx0Ym9vbCBpc1BlcnNwZWN0aXZlID0gaXNQZXJzcGVjdGl2ZU1hdHJpeCggcHJvamVjdGlvbk1hdHJpeCApO1xuXHRcdGlmICggaXNQZXJzcGVjdGl2ZSApIHNjYWxlICo9IC0gbXZQb3NpdGlvbi56O1xuXHQjZW5kaWZcblx0dmVjMiBhbGlnbmVkUG9zaXRpb24gPSAoIHBvc2l0aW9uLnh5IC0gKCBjZW50ZXIgLSB2ZWMyKCAwLjUgKSApICkgKiBzY2FsZTtcblx0dmVjMiByb3RhdGVkUG9zaXRpb247XG5cdHJvdGF0ZWRQb3NpdGlvbi54ID0gY29zKCByb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnggLSBzaW4oIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueTtcblx0cm90YXRlZFBvc2l0aW9uLnkgPSBzaW4oIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueCArIGNvcyggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi55O1xuXHRtdlBvc2l0aW9uLnh5ICs9IHJvdGF0ZWRQb3NpdGlvbjtcblx0Z2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbXZQb3NpdGlvbjtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufSJ9LFREdD17Y29tbW9uOntkaWZmdXNlOnt2YWx1ZTpuZXcgcHp0KDE1NjU4NzM0KX0sb3BhY2l0eTp7dmFsdWU6MX0sbWFwOnt2YWx1ZTpudWxsfSx1dlRyYW5zZm9ybTp7dmFsdWU6bmV3IERPdH0sdXYyVHJhbnNmb3JtOnt2YWx1ZTpuZXcgRE90fSxhbHBoYU1hcDp7dmFsdWU6bnVsbH19LHNwZWN1bGFybWFwOntzcGVjdWxhck1hcDp7dmFsdWU6bnVsbH19LGVudm1hcDp7ZW52TWFwOnt2YWx1ZTpudWxsfSxmbGlwRW52TWFwOnt2YWx1ZTotMX0scmVmbGVjdGl2aXR5Ont2YWx1ZToxfSxyZWZyYWN0aW9uUmF0aW86e3ZhbHVlOi45OH0sbWF4TWlwTGV2ZWw6e3ZhbHVlOjB9fSxhb21hcDp7YW9NYXA6e3ZhbHVlOm51bGx9LGFvTWFwSW50ZW5zaXR5Ont2YWx1ZToxfX0sbGlnaHRtYXA6e2xpZ2h0TWFwOnt2YWx1ZTpudWxsfSxsaWdodE1hcEludGVuc2l0eTp7dmFsdWU6MX19LGVtaXNzaXZlbWFwOntlbWlzc2l2ZU1hcDp7dmFsdWU6bnVsbH19LGJ1bXBtYXA6e2J1bXBNYXA6e3ZhbHVlOm51bGx9LGJ1bXBTY2FsZTp7dmFsdWU6MX19LG5vcm1hbG1hcDp7bm9ybWFsTWFwOnt2YWx1ZTpudWxsfSxub3JtYWxTY2FsZTp7dmFsdWU6bmV3IHpPdCgxLDEpfX0sZGlzcGxhY2VtZW50bWFwOntkaXNwbGFjZW1lbnRNYXA6e3ZhbHVlOm51bGx9LGRpc3BsYWNlbWVudFNjYWxlOnt2YWx1ZToxfSxkaXNwbGFjZW1lbnRCaWFzOnt2YWx1ZTowfX0scm91Z2huZXNzbWFwOntyb3VnaG5lc3NNYXA6e3ZhbHVlOm51bGx9fSxtZXRhbG5lc3NtYXA6e21ldGFsbmVzc01hcDp7dmFsdWU6bnVsbH19LGdyYWRpZW50bWFwOntncmFkaWVudE1hcDp7dmFsdWU6bnVsbH19LGZvZzp7Zm9nRGVuc2l0eTp7dmFsdWU6MjVlLTV9LGZvZ05lYXI6e3ZhbHVlOjF9LGZvZ0Zhcjp7dmFsdWU6MmUzfSxmb2dDb2xvcjp7dmFsdWU6bmV3IHB6dCgxNjc3NzIxNSl9fSxsaWdodHM6e2FtYmllbnRMaWdodENvbG9yOnt2YWx1ZTpbXX0sbGlnaHRQcm9iZTp7dmFsdWU6W119LGRpcmVjdGlvbmFsTGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntkaXJlY3Rpb246e30sY29sb3I6e319fSxkaXJlY3Rpb25hbExpZ2h0U2hhZG93czp7dmFsdWU6W10scHJvcGVydGllczp7c2hhZG93Qmlhczp7fSxzaGFkb3dOb3JtYWxCaWFzOnt9LHNoYWRvd1JhZGl1czp7fSxzaGFkb3dNYXBTaXplOnt9fX0sZGlyZWN0aW9uYWxTaGFkb3dNYXA6e3ZhbHVlOltdfSxkaXJlY3Rpb25hbFNoYWRvd01hdHJpeDp7dmFsdWU6W119LHNwb3RMaWdodHM6e3ZhbHVlOltdLHByb3BlcnRpZXM6e2NvbG9yOnt9LHBvc2l0aW9uOnt9LGRpcmVjdGlvbjp7fSxkaXN0YW5jZTp7fSxjb25lQ29zOnt9LHBlbnVtYnJhQ29zOnt9LGRlY2F5Ont9fX0sc3BvdExpZ2h0U2hhZG93czp7dmFsdWU6W10scHJvcGVydGllczp7c2hhZG93Qmlhczp7fSxzaGFkb3dOb3JtYWxCaWFzOnt9LHNoYWRvd1JhZGl1czp7fSxzaGFkb3dNYXBTaXplOnt9fX0sc3BvdFNoYWRvd01hcDp7dmFsdWU6W119LHNwb3RTaGFkb3dNYXRyaXg6e3ZhbHVlOltdfSxwb2ludExpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7Y29sb3I6e30scG9zaXRpb246e30sZGVjYXk6e30sZGlzdGFuY2U6e319fSxwb2ludExpZ2h0U2hhZG93czp7dmFsdWU6W10scHJvcGVydGllczp7c2hhZG93Qmlhczp7fSxzaGFkb3dOb3JtYWxCaWFzOnt9LHNoYWRvd1JhZGl1czp7fSxzaGFkb3dNYXBTaXplOnt9LHNoYWRvd0NhbWVyYU5lYXI6e30sc2hhZG93Q2FtZXJhRmFyOnt9fX0scG9pbnRTaGFkb3dNYXA6e3ZhbHVlOltdfSxwb2ludFNoYWRvd01hdHJpeDp7dmFsdWU6W119LGhlbWlzcGhlcmVMaWdodHM6e3ZhbHVlOltdLHByb3BlcnRpZXM6e2RpcmVjdGlvbjp7fSxza3lDb2xvcjp7fSxncm91bmRDb2xvcjp7fX19LHJlY3RBcmVhTGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntjb2xvcjp7fSxwb3NpdGlvbjp7fSx3aWR0aDp7fSxoZWlnaHQ6e319fSxsdGNfMTp7dmFsdWU6bnVsbH0sbHRjXzI6e3ZhbHVlOm51bGx9fSxwb2ludHM6e2RpZmZ1c2U6e3ZhbHVlOm5ldyBwenQoMTU2NTg3MzQpfSxvcGFjaXR5Ont2YWx1ZToxfSxzaXplOnt2YWx1ZToxfSxzY2FsZTp7dmFsdWU6MX0sbWFwOnt2YWx1ZTpudWxsfSxhbHBoYU1hcDp7dmFsdWU6bnVsbH0sdXZUcmFuc2Zvcm06e3ZhbHVlOm5ldyBET3R9fSxzcHJpdGU6e2RpZmZ1c2U6e3ZhbHVlOm5ldyBwenQoMTU2NTg3MzQpfSxvcGFjaXR5Ont2YWx1ZToxfSxjZW50ZXI6e3ZhbHVlOm5ldyB6T3QoLjUsLjUpfSxyb3RhdGlvbjp7dmFsdWU6MH0sbWFwOnt2YWx1ZTpudWxsfSxhbHBoYU1hcDp7dmFsdWU6bnVsbH0sdXZUcmFuc2Zvcm06e3ZhbHVlOm5ldyBET3R9fX0sQ0R0PXtiYXNpYzp7dW5pZm9ybXM6Y0R0KFtURHQuY29tbW9uLFREdC5zcGVjdWxhcm1hcCxURHQuZW52bWFwLFREdC5hb21hcCxURHQubGlnaHRtYXAsVER0LmZvZ10pLHZlcnRleFNoYWRlcjpFRHQubWVzaGJhc2ljX3ZlcnQsZnJhZ21lbnRTaGFkZXI6RUR0Lm1lc2hiYXNpY19mcmFnfSxsYW1iZXJ0Ont1bmlmb3JtczpjRHQoW1REdC5jb21tb24sVER0LnNwZWN1bGFybWFwLFREdC5lbnZtYXAsVER0LmFvbWFwLFREdC5saWdodG1hcCxURHQuZW1pc3NpdmVtYXAsVER0LmZvZyxURHQubGlnaHRzLHtlbWlzc2l2ZTp7dmFsdWU6bmV3IHB6dCgwKX19XSksdmVydGV4U2hhZGVyOkVEdC5tZXNobGFtYmVydF92ZXJ0LGZyYWdtZW50U2hhZGVyOkVEdC5tZXNobGFtYmVydF9mcmFnfSxwaG9uZzp7dW5pZm9ybXM6Y0R0KFtURHQuY29tbW9uLFREdC5zcGVjdWxhcm1hcCxURHQuZW52bWFwLFREdC5hb21hcCxURHQubGlnaHRtYXAsVER0LmVtaXNzaXZlbWFwLFREdC5idW1wbWFwLFREdC5ub3JtYWxtYXAsVER0LmRpc3BsYWNlbWVudG1hcCxURHQuZm9nLFREdC5saWdodHMse2VtaXNzaXZlOnt2YWx1ZTpuZXcgcHp0KDApfSxzcGVjdWxhcjp7dmFsdWU6bmV3IHB6dCgxMTE4NDgxKX0sc2hpbmluZXNzOnt2YWx1ZTozMH19XSksdmVydGV4U2hhZGVyOkVEdC5tZXNocGhvbmdfdmVydCxmcmFnbWVudFNoYWRlcjpFRHQubWVzaHBob25nX2ZyYWd9LHN0YW5kYXJkOnt1bmlmb3JtczpjRHQoW1REdC5jb21tb24sVER0LmVudm1hcCxURHQuYW9tYXAsVER0LmxpZ2h0bWFwLFREdC5lbWlzc2l2ZW1hcCxURHQuYnVtcG1hcCxURHQubm9ybWFsbWFwLFREdC5kaXNwbGFjZW1lbnRtYXAsVER0LnJvdWdobmVzc21hcCxURHQubWV0YWxuZXNzbWFwLFREdC5mb2csVER0LmxpZ2h0cyx7ZW1pc3NpdmU6e3ZhbHVlOm5ldyBwenQoMCl9LHJvdWdobmVzczp7dmFsdWU6MX0sbWV0YWxuZXNzOnt2YWx1ZTowfSxlbnZNYXBJbnRlbnNpdHk6e3ZhbHVlOjF9fV0pLHZlcnRleFNoYWRlcjpFRHQubWVzaHBoeXNpY2FsX3ZlcnQsZnJhZ21lbnRTaGFkZXI6RUR0Lm1lc2hwaHlzaWNhbF9mcmFnfSx0b29uOnt1bmlmb3JtczpjRHQoW1REdC5jb21tb24sVER0LmFvbWFwLFREdC5saWdodG1hcCxURHQuZW1pc3NpdmVtYXAsVER0LmJ1bXBtYXAsVER0Lm5vcm1hbG1hcCxURHQuZGlzcGxhY2VtZW50bWFwLFREdC5ncmFkaWVudG1hcCxURHQuZm9nLFREdC5saWdodHMse2VtaXNzaXZlOnt2YWx1ZTpuZXcgcHp0KDApfX1dKSx2ZXJ0ZXhTaGFkZXI6RUR0Lm1lc2h0b29uX3ZlcnQsZnJhZ21lbnRTaGFkZXI6RUR0Lm1lc2h0b29uX2ZyYWd9LG1hdGNhcDp7dW5pZm9ybXM6Y0R0KFtURHQuY29tbW9uLFREdC5idW1wbWFwLFREdC5ub3JtYWxtYXAsVER0LmRpc3BsYWNlbWVudG1hcCxURHQuZm9nLHttYXRjYXA6e3ZhbHVlOm51bGx9fV0pLHZlcnRleFNoYWRlcjpFRHQubWVzaG1hdGNhcF92ZXJ0LGZyYWdtZW50U2hhZGVyOkVEdC5tZXNobWF0Y2FwX2ZyYWd9LHBvaW50czp7dW5pZm9ybXM6Y0R0KFtURHQucG9pbnRzLFREdC5mb2ddKSx2ZXJ0ZXhTaGFkZXI6RUR0LnBvaW50c192ZXJ0LGZyYWdtZW50U2hhZGVyOkVEdC5wb2ludHNfZnJhZ30sZGFzaGVkOnt1bmlmb3JtczpjRHQoW1REdC5jb21tb24sVER0LmZvZyx7c2NhbGU6e3ZhbHVlOjF9LGRhc2hTaXplOnt2YWx1ZToxfSx0b3RhbFNpemU6e3ZhbHVlOjJ9fV0pLHZlcnRleFNoYWRlcjpFRHQubGluZWRhc2hlZF92ZXJ0LGZyYWdtZW50U2hhZGVyOkVEdC5saW5lZGFzaGVkX2ZyYWd9LGRlcHRoOnt1bmlmb3JtczpjRHQoW1REdC5jb21tb24sVER0LmRpc3BsYWNlbWVudG1hcF0pLHZlcnRleFNoYWRlcjpFRHQuZGVwdGhfdmVydCxmcmFnbWVudFNoYWRlcjpFRHQuZGVwdGhfZnJhZ30sbm9ybWFsOnt1bmlmb3JtczpjRHQoW1REdC5jb21tb24sVER0LmJ1bXBtYXAsVER0Lm5vcm1hbG1hcCxURHQuZGlzcGxhY2VtZW50bWFwLHtvcGFjaXR5Ont2YWx1ZToxfX1dKSx2ZXJ0ZXhTaGFkZXI6RUR0Lm5vcm1hbF92ZXJ0LGZyYWdtZW50U2hhZGVyOkVEdC5ub3JtYWxfZnJhZ30sc3ByaXRlOnt1bmlmb3JtczpjRHQoW1REdC5zcHJpdGUsVER0LmZvZ10pLHZlcnRleFNoYWRlcjpFRHQuc3ByaXRlX3ZlcnQsZnJhZ21lbnRTaGFkZXI6RUR0LnNwcml0ZV9mcmFnfSxiYWNrZ3JvdW5kOnt1bmlmb3Jtczp7dXZUcmFuc2Zvcm06e3ZhbHVlOm5ldyBET3R9LHQyRDp7dmFsdWU6bnVsbH19LHZlcnRleFNoYWRlcjpFRHQuYmFja2dyb3VuZF92ZXJ0LGZyYWdtZW50U2hhZGVyOkVEdC5iYWNrZ3JvdW5kX2ZyYWd9LGN1YmU6e3VuaWZvcm1zOmNEdChbVER0LmVudm1hcCx7b3BhY2l0eTp7dmFsdWU6MX19XSksdmVydGV4U2hhZGVyOkVEdC5jdWJlX3ZlcnQsZnJhZ21lbnRTaGFkZXI6RUR0LmN1YmVfZnJhZ30sZXF1aXJlY3Q6e3VuaWZvcm1zOnt0RXF1aXJlY3Q6e3ZhbHVlOm51bGx9fSx2ZXJ0ZXhTaGFkZXI6RUR0LmVxdWlyZWN0X3ZlcnQsZnJhZ21lbnRTaGFkZXI6RUR0LmVxdWlyZWN0X2ZyYWd9LGRpc3RhbmNlUkdCQTp7dW5pZm9ybXM6Y0R0KFtURHQuY29tbW9uLFREdC5kaXNwbGFjZW1lbnRtYXAse3JlZmVyZW5jZVBvc2l0aW9uOnt2YWx1ZTpuZXcgcU90fSxuZWFyRGlzdGFuY2U6e3ZhbHVlOjF9LGZhckRpc3RhbmNlOnt2YWx1ZToxZTN9fV0pLHZlcnRleFNoYWRlcjpFRHQuZGlzdGFuY2VSR0JBX3ZlcnQsZnJhZ21lbnRTaGFkZXI6RUR0LmRpc3RhbmNlUkdCQV9mcmFnfSxzaGFkb3c6e3VuaWZvcm1zOmNEdChbVER0LmxpZ2h0cyxURHQuZm9nLHtjb2xvcjp7dmFsdWU6bmV3IHB6dCgwKX0sb3BhY2l0eTp7dmFsdWU6MX19XSksdmVydGV4U2hhZGVyOkVEdC5zaGFkb3dfdmVydCxmcmFnbWVudFNoYWRlcjpFRHQuc2hhZG93X2ZyYWd9fTtmdW5jdGlvbiBBRHQodCxlLG4saSxyKXtjb25zdCBvPW5ldyBwenQoMCk7bGV0IGEscyxsPTAsYz1udWxsLHU9MCxoPW51bGw7ZnVuY3Rpb24gZCh0LGUpe24uYnVmZmVycy5jb2xvci5zZXRDbGVhcih0LnIsdC5nLHQuYixlLHIpfXJldHVybntnZXRDbGVhckNvbG9yOmZ1bmN0aW9uKCl7cmV0dXJuIG99LHNldENsZWFyQ29sb3I6ZnVuY3Rpb24odCxlPTEpe28uc2V0KHQpLGw9ZSxkKG8sbCl9LGdldENsZWFyQWxwaGE6ZnVuY3Rpb24oKXtyZXR1cm4gbH0sc2V0Q2xlYXJBbHBoYTpmdW5jdGlvbih0KXtsPXQsZChvLGwpfSxyZW5kZXI6ZnVuY3Rpb24gcChuLHIsZixtKXtsZXQgZz0hMD09PXIuaXNTY2VuZT9yLmJhY2tncm91bmQ6bnVsbDtnJiZnLmlzVGV4dHVyZSYmKGc9ZS5nZXQoZykpO2NvbnN0IF89dC54cix5PV8uZ2V0U2Vzc2lvbiYmXy5nZXRTZXNzaW9uKCk7eSYmImFkZGl0aXZlIj09PXkuZW52aXJvbm1lbnRCbGVuZE1vZGUmJihnPW51bGwpLG51bGw9PT1nP2QobyxsKTpnJiZnLmlzQ29sb3ImJihkKGcsMSksbT0hMCksKHQuYXV0b0NsZWFyfHxtKSYmdC5jbGVhcih0LmF1dG9DbGVhckNvbG9yLHQuYXV0b0NsZWFyRGVwdGgsdC5hdXRvQ2xlYXJTdGVuY2lsKSxnJiYoZy5pc0N1YmVUZXh0dXJlfHxnLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0fHxnLm1hcHBpbmc9PT16SXQpPyh2b2lkIDA9PT1zJiYocz1uZXcgb0R0KG5ldyBzRHQoMSwxLDEpLG5ldyBoRHQoe25hbWU6IkJhY2tncm91bmRDdWJlTWF0ZXJpYWwiLHVuaWZvcm1zOmxEdChDRHQuY3ViZS51bmlmb3JtcyksdmVydGV4U2hhZGVyOkNEdC5jdWJlLnZlcnRleFNoYWRlcixmcmFnbWVudFNoYWRlcjpDRHQuY3ViZS5mcmFnbWVudFNoYWRlcixzaWRlOjEsZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITEsZm9nOiExfSkpLHMuZ2VvbWV0cnkuZGVsZXRlQXR0cmlidXRlKCJub3JtYWwiKSxzLmdlb21ldHJ5LmRlbGV0ZUF0dHJpYnV0ZSgidXYiKSxzLm9uQmVmb3JlUmVuZGVyPWZ1bmN0aW9uKHQsZSxuKXt0aGlzLm1hdHJpeFdvcmxkLmNvcHlQb3NpdGlvbihuLm1hdHJpeFdvcmxkKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHMubWF0ZXJpYWwsImVudk1hcCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnVuaWZvcm1zLmVudk1hcC52YWx1ZX19KSxpLnVwZGF0ZShzKSksZy5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldCYmKGc9Zy50ZXh0dXJlKSxzLm1hdGVyaWFsLnVuaWZvcm1zLmVudk1hcC52YWx1ZT1nLHMubWF0ZXJpYWwudW5pZm9ybXMuZmxpcEVudk1hcC52YWx1ZT1nLmlzQ3ViZVRleHR1cmUmJmcuX25lZWRzRmxpcEVudk1hcD8tMToxLGM9PT1nJiZ1PT09Zy52ZXJzaW9uJiZoPT09dC50b25lTWFwcGluZ3x8KHMubWF0ZXJpYWwubmVlZHNVcGRhdGU9ITAsYz1nLHU9Zy52ZXJzaW9uLGg9dC50b25lTWFwcGluZyksbi51bnNoaWZ0KHMscy5nZW9tZXRyeSxzLm1hdGVyaWFsLDAsMCxudWxsKSk6ZyYmZy5pc1RleHR1cmUmJih2b2lkIDA9PT1hJiYoYT1uZXcgb0R0KG5ldyBNRHQoMiwyKSxuZXcgaER0KHtuYW1lOiJCYWNrZ3JvdW5kTWF0ZXJpYWwiLHVuaWZvcm1zOmxEdChDRHQuYmFja2dyb3VuZC51bmlmb3JtcyksdmVydGV4U2hhZGVyOkNEdC5iYWNrZ3JvdW5kLnZlcnRleFNoYWRlcixmcmFnbWVudFNoYWRlcjpDRHQuYmFja2dyb3VuZC5mcmFnbWVudFNoYWRlcixzaWRlOjAsZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITEsZm9nOiExfSkpLGEuZ2VvbWV0cnkuZGVsZXRlQXR0cmlidXRlKCJub3JtYWwiKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYS5tYXRlcmlhbCwibWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudW5pZm9ybXMudDJELnZhbHVlfX0pLGkudXBkYXRlKGEpKSxhLm1hdGVyaWFsLnVuaWZvcm1zLnQyRC52YWx1ZT1nLCEwPT09Zy5tYXRyaXhBdXRvVXBkYXRlJiZnLnVwZGF0ZU1hdHJpeCgpLGEubWF0ZXJpYWwudW5pZm9ybXMudXZUcmFuc2Zvcm0udmFsdWUuY29weShnLm1hdHJpeCksYz09PWcmJnU9PT1nLnZlcnNpb24mJmg9PT10LnRvbmVNYXBwaW5nfHwoYS5tYXRlcmlhbC5uZWVkc1VwZGF0ZT0hMCxjPWcsdT1nLnZlcnNpb24saD10LnRvbmVNYXBwaW5nKSxuLnVuc2hpZnQoYSxhLmdlb21ldHJ5LGEubWF0ZXJpYWwsMCwwLG51bGwpKX19fWZ1bmN0aW9uIGtEdCh0LGUsbixpKXtjb25zdCByPXQuZ2V0UGFyYW1ldGVyKDM0OTIxKSxvPWkuaXNXZWJHTDI/bnVsbDplLmdldCgiT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKSxhPWkuaXNXZWJHTDJ8fG51bGwhPT1vLHM9e30sbD1kKG51bGwpO2xldCBjPWw7ZnVuY3Rpb24gdShlKXtyZXR1cm4gaS5pc1dlYkdMMj90LmJpbmRWZXJ0ZXhBcnJheShlKTpvLmJpbmRWZXJ0ZXhBcnJheU9FUyhlKX1mdW5jdGlvbiBoKGUpe3JldHVybiBpLmlzV2ViR0wyP3QuZGVsZXRlVmVydGV4QXJyYXkoZSk6by5kZWxldGVWZXJ0ZXhBcnJheU9FUyhlKX1mdW5jdGlvbiBkKHQpe2NvbnN0IGU9W10sbj1bXSxpPVtdO2ZvcihsZXQgdD0wO3Q8cjt0KyspZVt0XT0wLG5bdF09MCxpW3RdPTA7cmV0dXJue2dlb21ldHJ5Om51bGwscHJvZ3JhbTpudWxsLHdpcmVmcmFtZTohMSxuZXdBdHRyaWJ1dGVzOmUsZW5hYmxlZEF0dHJpYnV0ZXM6bixhdHRyaWJ1dGVEaXZpc29yczppLG9iamVjdDp0LGF0dHJpYnV0ZXM6e30saW5kZXg6bnVsbH19ZnVuY3Rpb24gcCgpe2NvbnN0IHQ9Yy5uZXdBdHRyaWJ1dGVzO2ZvcihsZXQgZT0wLG49dC5sZW5ndGg7ZTxuO2UrKyl0W2VdPTB9ZnVuY3Rpb24gZih0KXttKHQsMCl9ZnVuY3Rpb24gbShuLHIpe2NvbnN0IG89Yy5lbmFibGVkQXR0cmlidXRlcyxhPWMuYXR0cmlidXRlRGl2aXNvcnM7Yy5uZXdBdHRyaWJ1dGVzW25dPTEsMD09PW9bbl0mJih0LmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KG4pLG9bbl09MSksYVtuXSE9PXImJigoaS5pc1dlYkdMMj90OmUuZ2V0KCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIikpW2kuaXNXZWJHTDI/InZlcnRleEF0dHJpYkRpdmlzb3IiOiJ2ZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUiXShuLHIpLGFbbl09cil9ZnVuY3Rpb24gZygpe2NvbnN0IGU9Yy5uZXdBdHRyaWJ1dGVzLG49Yy5lbmFibGVkQXR0cmlidXRlcztmb3IobGV0IGk9MCxyPW4ubGVuZ3RoO2k8cjtpKyspbltpXSE9PWVbaV0mJih0LmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpKSxuW2ldPTApfWZ1bmN0aW9uIF8oZSxuLHIsbyxhLHMpeyEwIT09aS5pc1dlYkdMMnx8NTEyNCE9PXImJjUxMjUhPT1yP3QudmVydGV4QXR0cmliUG9pbnRlcihlLG4scixvLGEscyk6dC52ZXJ0ZXhBdHRyaWJJUG9pbnRlcihlLG4scixhLHMpfWZ1bmN0aW9uIHkoKXt2KCksYyE9PWwmJihjPWwsdShjLm9iamVjdCkpfWZ1bmN0aW9uIHYoKXtsLmdlb21ldHJ5PW51bGwsbC5wcm9ncmFtPW51bGwsbC53aXJlZnJhbWU9ITF9cmV0dXJue3NldHVwOmZ1bmN0aW9uIGIocixsLGgseSx2KXtsZXQgYj0hMTtpZihhKXtjb25zdCBlPShmdW5jdGlvbiB4KGUsbixyKXtjb25zdCBhPSEwPT09ci53aXJlZnJhbWU7bGV0IGw9c1tlLmlkXTt2b2lkIDA9PT1sJiYobD17fSxzW2UuaWRdPWwpO2xldCBjPWxbbi5pZF07dm9pZCAwPT09YyYmKGM9e30sbFtuLmlkXT1jKTtsZXQgdT1jW2FdO3JldHVybiB2b2lkIDA9PT11JiYodT1kKChmdW5jdGlvbiBoKCl7cmV0dXJuIGkuaXNXZWJHTDI/dC5jcmVhdGVWZXJ0ZXhBcnJheSgpOm8uY3JlYXRlVmVydGV4QXJyYXlPRVMoKX0pKCkpLGNbYV09dSksdX0pKHksaCxsKTtjIT09ZSYmKGM9ZSx1KGMub2JqZWN0KSksYj0oZnVuY3Rpb24gdyh0LGUpe2NvbnN0IG49Yy5hdHRyaWJ1dGVzLGk9dC5hdHRyaWJ1dGVzO2xldCByPTA7Zm9yKGNvbnN0IHQgaW4gaSl7Y29uc3QgZT1uW3RdLG89aVt0XTtpZih2b2lkIDA9PT1lKXJldHVybiEwO2lmKGUuYXR0cmlidXRlIT09bylyZXR1cm4hMDtpZihlLmRhdGEhPT1vLmRhdGEpcmV0dXJuITA7cisrfXJldHVybiBjLmF0dHJpYnV0ZXNOdW0hPT1yfHxjLmluZGV4IT09ZX0pKHksdiksYiYmKGZ1bmN0aW9uIFModCxlKXtjb25zdCBuPXt9LGk9dC5hdHRyaWJ1dGVzO2xldCByPTA7Zm9yKGNvbnN0IHQgaW4gaSl7Y29uc3QgZT1pW3RdLG89e307by5hdHRyaWJ1dGU9ZSxlLmRhdGEmJihvLmRhdGE9ZS5kYXRhKSxuW3RdPW8scisrfWMuYXR0cmlidXRlcz1uLGMuYXR0cmlidXRlc051bT1yLGMuaW5kZXg9ZX0pKHksdil9ZWxzZXtjb25zdCB0PSEwPT09bC53aXJlZnJhbWU7Yy5nZW9tZXRyeT09PXkuaWQmJmMucHJvZ3JhbT09PWguaWQmJmMud2lyZWZyYW1lPT09dHx8KGMuZ2VvbWV0cnk9eS5pZCxjLnByb2dyYW09aC5pZCxjLndpcmVmcmFtZT10LGI9ITApfSEwPT09ci5pc0luc3RhbmNlZE1lc2gmJihiPSEwKSxudWxsIT09diYmbi51cGRhdGUodiwzNDk2MyksYiYmKChmdW5jdGlvbiBNKHIsbyxhLHMpe2lmKCExPT09aS5pc1dlYkdMMiYmKHIuaXNJbnN0YW5jZWRNZXNofHxzLmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkpJiZudWxsPT09ZS5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSlyZXR1cm47cCgpO2NvbnN0IGw9cy5hdHRyaWJ1dGVzLGM9YS5nZXRBdHRyaWJ1dGVzKCksdT1vLmRlZmF1bHRBdHRyaWJ1dGVWYWx1ZXM7Zm9yKGNvbnN0IGUgaW4gYyl7Y29uc3QgaT1jW2VdO2lmKGk+PTApe2NvbnN0IG89bFtlXTtpZih2b2lkIDAhPT1vKXtjb25zdCBlPW8ubm9ybWFsaXplZCxyPW8uaXRlbVNpemUsYT1uLmdldChvKTtpZih2b2lkIDA9PT1hKWNvbnRpbnVlO2NvbnN0IGw9YS5idWZmZXIsYz1hLnR5cGUsdT1hLmJ5dGVzUGVyRWxlbWVudDtpZihvLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUpe2NvbnN0IG49by5kYXRhLGE9bi5zdHJpZGUsaD1vLm9mZnNldDtuJiZuLmlzSW5zdGFuY2VkSW50ZXJsZWF2ZWRCdWZmZXI/KG0oaSxuLm1lc2hQZXJBdHRyaWJ1dGUpLHZvaWQgMD09PXMuX21heEluc3RhbmNlQ291bnQmJihzLl9tYXhJbnN0YW5jZUNvdW50PW4ubWVzaFBlckF0dHJpYnV0ZSpuLmNvdW50KSk6ZihpKSx0LmJpbmRCdWZmZXIoMzQ5NjIsbCksXyhpLHIsYyxlLGEqdSxoKnUpfWVsc2Ugby5pc0luc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZT8obShpLG8ubWVzaFBlckF0dHJpYnV0ZSksdm9pZCAwPT09cy5fbWF4SW5zdGFuY2VDb3VudCYmKHMuX21heEluc3RhbmNlQ291bnQ9by5tZXNoUGVyQXR0cmlidXRlKm8uY291bnQpKTpmKGkpLHQuYmluZEJ1ZmZlcigzNDk2MixsKSxfKGkscixjLGUsMCwwKX1lbHNlIGlmKCJpbnN0YW5jZU1hdHJpeCI9PT1lKXtjb25zdCBlPW4uZ2V0KHIuaW5zdGFuY2VNYXRyaXgpO2lmKHZvaWQgMD09PWUpY29udGludWU7Y29uc3Qgbz1lLmJ1ZmZlcixhPWUudHlwZTttKGkrMCwxKSxtKGkrMSwxKSxtKGkrMiwxKSxtKGkrMywxKSx0LmJpbmRCdWZmZXIoMzQ5NjIsbyksdC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGkrMCw0LGEsITEsNjQsMCksdC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGkrMSw0LGEsITEsNjQsMTYpLHQudmVydGV4QXR0cmliUG9pbnRlcihpKzIsNCxhLCExLDY0LDMyKSx0LnZlcnRleEF0dHJpYlBvaW50ZXIoaSszLDQsYSwhMSw2NCw0OCl9ZWxzZSBpZigiaW5zdGFuY2VDb2xvciI9PT1lKXtjb25zdCBlPW4uZ2V0KHIuaW5zdGFuY2VDb2xvcik7aWYodm9pZCAwPT09ZSljb250aW51ZTtjb25zdCBvPWUuYnVmZmVyLGE9ZS50eXBlO20oaSwxKSx0LmJpbmRCdWZmZXIoMzQ5NjIsbyksdC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGksMyxhLCExLDEyLDApfWVsc2UgaWYodm9pZCAwIT09dSl7Y29uc3Qgbj11W2VdO2lmKHZvaWQgMCE9PW4pc3dpdGNoKG4ubGVuZ3RoKXtjYXNlIDI6dC52ZXJ0ZXhBdHRyaWIyZnYoaSxuKTticmVhaztjYXNlIDM6dC52ZXJ0ZXhBdHRyaWIzZnYoaSxuKTticmVhaztjYXNlIDQ6dC52ZXJ0ZXhBdHRyaWI0ZnYoaSxuKTticmVhaztkZWZhdWx0OnQudmVydGV4QXR0cmliMWZ2KGksbil9fX19ZygpfSkocixsLGgseSksbnVsbCE9PXYmJnQuYmluZEJ1ZmZlcigzNDk2MyxuLmdldCh2KS5idWZmZXIpKX0scmVzZXQ6eSxyZXNldERlZmF1bHRTdGF0ZTp2LGRpc3Bvc2U6ZnVuY3Rpb24geCgpe3koKTtmb3IoY29uc3QgdCBpbiBzKXtjb25zdCBlPXNbdF07Zm9yKGNvbnN0IHQgaW4gZSl7Y29uc3Qgbj1lW3RdO2Zvcihjb25zdCB0IGluIG4paChuW3RdLm9iamVjdCksZGVsZXRlIG5bdF07ZGVsZXRlIGVbdF19ZGVsZXRlIHNbdF19fSxyZWxlYXNlU3RhdGVzT2ZHZW9tZXRyeTpmdW5jdGlvbiB3KHQpe2lmKHZvaWQgMD09PXNbdC5pZF0pcmV0dXJuO2NvbnN0IGU9c1t0LmlkXTtmb3IoY29uc3QgdCBpbiBlKXtjb25zdCBuPWVbdF07Zm9yKGNvbnN0IHQgaW4gbiloKG5bdF0ub2JqZWN0KSxkZWxldGUgblt0XTtkZWxldGUgZVt0XX1kZWxldGUgc1t0LmlkXX0scmVsZWFzZVN0YXRlc09mUHJvZ3JhbTpmdW5jdGlvbiBTKHQpe2Zvcihjb25zdCBlIGluIHMpe2NvbnN0IG49c1tlXTtpZih2b2lkIDA9PT1uW3QuaWRdKWNvbnRpbnVlO2NvbnN0IGk9blt0LmlkXTtmb3IoY29uc3QgdCBpbiBpKWgoaVt0XS5vYmplY3QpLGRlbGV0ZSBpW3RdO2RlbGV0ZSBuW3QuaWRdfX0saW5pdEF0dHJpYnV0ZXM6cCxlbmFibGVBdHRyaWJ1dGU6ZixkaXNhYmxlVW51c2VkQXR0cmlidXRlczpnfX1mdW5jdGlvbiBMRHQodCxlLG4saSl7Y29uc3Qgcj1pLmlzV2ViR0wyO2xldCBvO3RoaXMuc2V0TW9kZT1mdW5jdGlvbiBhKHQpe289dH0sdGhpcy5yZW5kZXI9ZnVuY3Rpb24gcyhlLGkpe3QuZHJhd0FycmF5cyhvLGUsaSksbi51cGRhdGUoaSxvLDEpfSx0aGlzLnJlbmRlckluc3RhbmNlcz1mdW5jdGlvbiBsKGksYSxzKXtpZigwPT09cylyZXR1cm47bGV0IGwsYztpZihyKWw9dCxjPSJkcmF3QXJyYXlzSW5zdGFuY2VkIjtlbHNlIGlmKGw9ZS5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSxjPSJkcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUiLG51bGw9PT1sKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMQnVmZmVyUmVuZGVyZXI6IHVzaW5nIFRIUkVFLkluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5IGJ1dCBoYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0IGV4dGVuc2lvbiBBTkdMRV9pbnN0YW5jZWRfYXJyYXlzLiIpO2xbY10obyxpLGEscyksbi51cGRhdGUoYSxvLHMpfX1mdW5jdGlvbiBQRHQodCxlLG4pe2xldCBpO2Z1bmN0aW9uIHIoZSl7aWYoImhpZ2hwIj09PWUpe2lmKHQuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KDM1NjMzLDM2MzM4KS5wcmVjaXNpb24+MCYmdC5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoMzU2MzIsMzYzMzgpLnByZWNpc2lvbj4wKXJldHVybiJoaWdocCI7ZT0ibWVkaXVtcCJ9cmV0dXJuIm1lZGl1bXAiPT09ZSYmdC5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoMzU2MzMsMzYzMzcpLnByZWNpc2lvbj4wJiZ0LmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgzNTYzMiwzNjMzNykucHJlY2lzaW9uPjA/Im1lZGl1bXAiOiJsb3dwIn1jb25zdCBvPSJ1bmRlZmluZWQiIT10eXBlb2YgV2ViR0wyUmVuZGVyaW5nQ29udGV4dCYmdCBpbnN0YW5jZW9mIFdlYkdMMlJlbmRlcmluZ0NvbnRleHR8fCJ1bmRlZmluZWQiIT10eXBlb2YgV2ViR0wyQ29tcHV0ZVJlbmRlcmluZ0NvbnRleHQmJnQgaW5zdGFuY2VvZiBXZWJHTDJDb21wdXRlUmVuZGVyaW5nQ29udGV4dDtsZXQgYT12b2lkIDAhPT1uLnByZWNpc2lvbj9uLnByZWNpc2lvbjoiaGlnaHAiO2NvbnN0IHM9cihhKTtzIT09YSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjoiLGEsIm5vdCBzdXBwb3J0ZWQsIHVzaW5nIixzLCJpbnN0ZWFkLiIpLGE9cyk7Y29uc3QgbD0hMD09PW4ubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcixjPXQuZ2V0UGFyYW1ldGVyKDM0OTMwKSx1PXQuZ2V0UGFyYW1ldGVyKDM1NjYwKSxoPXQuZ2V0UGFyYW1ldGVyKDMzNzkpLGQ9dC5nZXRQYXJhbWV0ZXIoMzQwNzYpLHA9dC5nZXRQYXJhbWV0ZXIoMzQ5MjEpLGY9dC5nZXRQYXJhbWV0ZXIoMzYzNDcpLG09dC5nZXRQYXJhbWV0ZXIoMzYzNDgpLGc9dC5nZXRQYXJhbWV0ZXIoMzYzNDkpLF89dT4wLHk9b3x8ISFlLmdldCgiT0VTX3RleHR1cmVfZmxvYXQiKTtyZXR1cm57aXNXZWJHTDI6byxnZXRNYXhBbmlzb3Ryb3B5OmZ1bmN0aW9uIHYoKXtpZih2b2lkIDAhPT1pKXJldHVybiBpO2NvbnN0IG49ZS5nZXQoIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpO3JldHVybiBpPW51bGwhPT1uP3QuZ2V0UGFyYW1ldGVyKG4uTUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUKTowLGl9LGdldE1heFByZWNpc2lvbjpyLHByZWNpc2lvbjphLGxvZ2FyaXRobWljRGVwdGhCdWZmZXI6bCxtYXhUZXh0dXJlczpjLG1heFZlcnRleFRleHR1cmVzOnUsbWF4VGV4dHVyZVNpemU6aCxtYXhDdWJlbWFwU2l6ZTpkLG1heEF0dHJpYnV0ZXM6cCxtYXhWZXJ0ZXhVbmlmb3JtczpmLG1heFZhcnlpbmdzOm0sbWF4RnJhZ21lbnRVbmlmb3JtczpnLHZlcnRleFRleHR1cmVzOl8sZmxvYXRGcmFnbWVudFRleHR1cmVzOnksZmxvYXRWZXJ0ZXhUZXh0dXJlczpfJiZ5LG1heFNhbXBsZXM6bz90LmdldFBhcmFtZXRlcigzNjE4Myk6MH19ZnVuY3Rpb24gTkR0KHQpe2NvbnN0IGU9dGhpcztsZXQgbj1udWxsLGk9MCxyPSExLG89ITE7Y29uc3QgYT1uZXcgJFJ0LHM9bmV3IERPdCxsPXt2YWx1ZTpudWxsLG5lZWRzVXBkYXRlOiExfTtmdW5jdGlvbiBjKCl7bC52YWx1ZSE9PW4mJihsLnZhbHVlPW4sbC5uZWVkc1VwZGF0ZT1pPjApLGUubnVtUGxhbmVzPWksZS5udW1JbnRlcnNlY3Rpb249MH1mdW5jdGlvbiB1KHQsbixpLHIpe2NvbnN0IG89bnVsbCE9PXQ/dC5sZW5ndGg6MDtsZXQgYz1udWxsO2lmKDAhPT1vKXtpZihjPWwudmFsdWUsITAhPT1yfHxudWxsPT09Yyl7Y29uc3QgZT1pKzQqbyxyPW4ubWF0cml4V29ybGRJbnZlcnNlO3MuZ2V0Tm9ybWFsTWF0cml4KHIpLChudWxsPT09Y3x8Yy5sZW5ndGg8ZSkmJihjPW5ldyBGbG9hdDMyQXJyYXkoZSkpO2ZvcihsZXQgZT0wLG49aTtlIT09bzsrK2Usbis9NClhLmNvcHkodFtlXSkuYXBwbHlNYXRyaXg0KHIscyksYS5ub3JtYWwudG9BcnJheShjLG4pLGNbbiszXT1hLmNvbnN0YW50fWwudmFsdWU9YyxsLm5lZWRzVXBkYXRlPSEwfXJldHVybiBlLm51bVBsYW5lcz1vLGUubnVtSW50ZXJzZWN0aW9uPTAsY310aGlzLnVuaWZvcm09bCx0aGlzLm51bVBsYW5lcz0wLHRoaXMubnVtSW50ZXJzZWN0aW9uPTAsdGhpcy5pbml0PWZ1bmN0aW9uKHQsZSxvKXtjb25zdCBhPTAhPT10Lmxlbmd0aHx8ZXx8MCE9PWl8fHI7cmV0dXJuIHI9ZSxuPXUodCxvLDApLGk9dC5sZW5ndGgsYX0sdGhpcy5iZWdpblNoYWRvd3M9ZnVuY3Rpb24oKXtvPSEwLHUobnVsbCl9LHRoaXMuZW5kU2hhZG93cz1mdW5jdGlvbigpe289ITEsYygpfSx0aGlzLnNldFN0YXRlPWZ1bmN0aW9uKGUsYSxzKXtjb25zdCBoPWUuY2xpcHBpbmdQbGFuZXMsZD1lLmNsaXBJbnRlcnNlY3Rpb24scD1lLmNsaXBTaGFkb3dzLGY9dC5nZXQoZSk7aWYoIXJ8fG51bGw9PT1ofHwwPT09aC5sZW5ndGh8fG8mJiFwKW8/dShudWxsKTpjKCk7ZWxzZXtjb25zdCB0PW8/MDppLGU9NCp0O2xldCByPWYuY2xpcHBpbmdTdGF0ZXx8bnVsbDtsLnZhbHVlPXIscj11KGgsYSxlLHMpO2ZvcihsZXQgdD0wO3QhPT1lOysrdClyW3RdPW5bdF07Zi5jbGlwcGluZ1N0YXRlPXIsdGhpcy5udW1JbnRlcnNlY3Rpb249ZD90aGlzLm51bVBsYW5lczowLHRoaXMubnVtUGxhbmVzKz10fX19ZnVuY3Rpb24gSUR0KHQpe2xldCBlPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIG4odCxlKXtyZXR1cm4gZT09PU9JdD90Lm1hcHBpbmc9Tkl0OmU9PT1SSXQmJih0Lm1hcHBpbmc9SUl0KSx0fWZ1bmN0aW9uIGkodCl7Y29uc3Qgbj10LnRhcmdldDtuLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGkpO2NvbnN0IHI9ZS5nZXQobik7dm9pZCAwIT09ciYmKGUuZGVsZXRlKG4pLHIuZGlzcG9zZSgpKX1yZXR1cm57Z2V0OmZ1bmN0aW9uIHIobyl7aWYobyYmby5pc1RleHR1cmUpe2NvbnN0IHI9by5tYXBwaW5nO2lmKHI9PT1PSXR8fHI9PT1SSXQpe2lmKGUuaGFzKG8pKXJldHVybiBuKGUuZ2V0KG8pLnRleHR1cmUsby5tYXBwaW5nKTt7Y29uc3Qgcj1vLmltYWdlO2lmKHImJnIuaGVpZ2h0PjApe2NvbnN0IGE9dC5nZXRSZW5kZXJMaXN0KCkscz10LmdldFJlbmRlclRhcmdldCgpLGw9bmV3IF9EdChyLmhlaWdodC8yKTtyZXR1cm4gbC5mcm9tRXF1aXJlY3Rhbmd1bGFyVGV4dHVyZSh0LG8pLGUuc2V0KG8sbCksdC5zZXRSZW5kZXJUYXJnZXQocyksdC5zZXRSZW5kZXJMaXN0KGEpLG8uYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsaSksbihsLnRleHR1cmUsby5tYXBwaW5nKX1yZXR1cm4gbnVsbH19fXJldHVybiBvfSxkaXNwb3NlOmZ1bmN0aW9uIG8oKXtlPW5ldyBXZWFrTWFwfX19ZnVuY3Rpb24gT0R0KHQpe2NvbnN0IGU9e307ZnVuY3Rpb24gbihuKXtpZih2b2lkIDAhPT1lW25dKXJldHVybiBlW25dO2xldCBpO3N3aXRjaChuKXtjYXNlIldFQkdMX2RlcHRoX3RleHR1cmUiOmk9dC5nZXRFeHRlbnNpb24oIldFQkdMX2RlcHRoX3RleHR1cmUiKXx8dC5nZXRFeHRlbnNpb24oIk1PWl9XRUJHTF9kZXB0aF90ZXh0dXJlIil8fHQuZ2V0RXh0ZW5zaW9uKCJXRUJLSVRfV0VCR0xfZGVwdGhfdGV4dHVyZSIpO2JyZWFrO2Nhc2UiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIjppPXQuZ2V0RXh0ZW5zaW9uKCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKXx8dC5nZXRFeHRlbnNpb24oIk1PWl9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKXx8dC5nZXRFeHRlbnNpb24oIldFQktJVF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKTticmVhaztjYXNlIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIjppPXQuZ2V0RXh0ZW5zaW9uKCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpfHx0LmdldEV4dGVuc2lvbigiTU9aX1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIil8fHQuZ2V0RXh0ZW5zaW9uKCJXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKTticmVhaztjYXNlIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyI6aT10LmdldEV4dGVuc2lvbigiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIil8fHQuZ2V0RXh0ZW5zaW9uKCJXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIik7YnJlYWs7ZGVmYXVsdDppPXQuZ2V0RXh0ZW5zaW9uKG4pfXJldHVybiBlW25dPWksaX1yZXR1cm57aGFzOmZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT09bih0KX0saW5pdDpmdW5jdGlvbih0KXt0LmlzV2ViR0wyP24oIkVYVF9jb2xvcl9idWZmZXJfZmxvYXQiKToobigiV0VCR0xfZGVwdGhfdGV4dHVyZSIpLG4oIk9FU190ZXh0dXJlX2Zsb2F0IiksbigiT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpLG4oIk9FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIiksbigiT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIiksbigiT0VTX2VsZW1lbnRfaW5kZXhfdWludCIpLG4oIk9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IiksbigiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpKSxuKCJPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKSxuKCJFWFRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQiKX0sZ2V0OmZ1bmN0aW9uKHQpe2NvbnN0IGU9bih0KTtyZXR1cm4gbnVsbD09PWUmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogIit0KyIgZXh0ZW5zaW9uIG5vdCBzdXBwb3J0ZWQuIiksZX19fWZ1bmN0aW9uIFJEdCh0LGUsbixpKXtjb25zdCByPXt9LG89bmV3IFdlYWtNYXA7ZnVuY3Rpb24gYSh0KXtjb25zdCBzPXQudGFyZ2V0O251bGwhPT1zLmluZGV4JiZlLnJlbW92ZShzLmluZGV4KTtmb3IoY29uc3QgdCBpbiBzLmF0dHJpYnV0ZXMpZS5yZW1vdmUocy5hdHRyaWJ1dGVzW3RdKTtzLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGEpLGRlbGV0ZSByW3MuaWRdO2NvbnN0IGw9by5nZXQocyk7bCYmKGUucmVtb3ZlKGwpLG8uZGVsZXRlKHMpKSxpLnJlbGVhc2VTdGF0ZXNPZkdlb21ldHJ5KHMpLCEwPT09cy5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5JiZkZWxldGUgcy5fbWF4SW5zdGFuY2VDb3VudCxuLm1lbW9yeS5nZW9tZXRyaWVzLS19ZnVuY3Rpb24gcyh0KXtjb25zdCBuPVtdLGk9dC5pbmRleCxyPXQuYXR0cmlidXRlcy5wb3NpdGlvbjtsZXQgYT0wO2lmKG51bGwhPT1pKXtjb25zdCB0PWkuYXJyYXk7YT1pLnZlcnNpb247Zm9yKGxldCBlPTAsaT10Lmxlbmd0aDtlPGk7ZSs9Myl7Y29uc3QgaT10W2UrMF0scj10W2UrMV0sbz10W2UrMl07bi5wdXNoKGkscixyLG8sbyxpKX19ZWxzZXthPXIudmVyc2lvbjtmb3IobGV0IHQ9MCxlPXIuYXJyYXkubGVuZ3RoLzMtMTt0PGU7dCs9Myl7Y29uc3QgZT10KzAsaT10KzEscj10KzI7bi5wdXNoKGUsaSxpLHIscixlKX19Y29uc3Qgcz1uZXcoUHp0KG4pPjY1NTM1P0N6dDpFenQpKG4sMSk7cy52ZXJzaW9uPWE7Y29uc3QgbD1vLmdldCh0KTtsJiZlLnJlbW92ZShsKSxvLnNldCh0LHMpfXJldHVybntnZXQ6ZnVuY3Rpb24gbCh0LGUpe3JldHVybiEwPT09cltlLmlkXXx8KGUuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsYSkscltlLmlkXT0hMCxuLm1lbW9yeS5nZW9tZXRyaWVzKyspLGV9LHVwZGF0ZTpmdW5jdGlvbiBjKHQpe2NvbnN0IG49dC5hdHRyaWJ1dGVzO2Zvcihjb25zdCB0IGluIG4pZS51cGRhdGUoblt0XSwzNDk2Mik7Y29uc3QgaT10Lm1vcnBoQXR0cmlidXRlcztmb3IoY29uc3QgdCBpbiBpKXtjb25zdCBuPWlbdF07Zm9yKGxldCB0PTAsaT1uLmxlbmd0aDt0PGk7dCsrKWUudXBkYXRlKG5bdF0sMzQ5NjIpfX0sZ2V0V2lyZWZyYW1lQXR0cmlidXRlOmZ1bmN0aW9uIHUodCl7Y29uc3QgZT1vLmdldCh0KTtpZihlKXtjb25zdCBuPXQuaW5kZXg7bnVsbCE9PW4mJmUudmVyc2lvbjxuLnZlcnNpb24mJnModCl9ZWxzZSBzKHQpO3JldHVybiBvLmdldCh0KX19fWZ1bmN0aW9uIHpEdCh0LGUsbixpKXtjb25zdCByPWkuaXNXZWJHTDI7bGV0IG8sYSxzO3RoaXMuc2V0TW9kZT1mdW5jdGlvbiBsKHQpe289dH0sdGhpcy5zZXRJbmRleD1mdW5jdGlvbiBjKHQpe2E9dC50eXBlLHM9dC5ieXRlc1BlckVsZW1lbnR9LHRoaXMucmVuZGVyPWZ1bmN0aW9uIHUoZSxpKXt0LmRyYXdFbGVtZW50cyhvLGksYSxlKnMpLG4udXBkYXRlKGksbywxKX0sdGhpcy5yZW5kZXJJbnN0YW5jZXM9ZnVuY3Rpb24gaChpLGwsYyl7aWYoMD09PWMpcmV0dXJuO2xldCB1LGg7aWYocil1PXQsaD0iZHJhd0VsZW1lbnRzSW5zdGFuY2VkIjtlbHNlIGlmKHU9ZS5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSxoPSJkcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRSIsbnVsbD09PXUpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xJbmRleGVkQnVmZmVyUmVuZGVyZXI6IHVzaW5nIFRIUkVFLkluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5IGJ1dCBoYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0IGV4dGVuc2lvbiBBTkdMRV9pbnN0YW5jZWRfYXJyYXlzLiIpO3VbaF0obyxsLGEsaSpzLGMpLG4udXBkYXRlKGwsbyxjKX19ZnVuY3Rpb24gRER0KHQpe2NvbnN0IGU9e2ZyYW1lOjAsY2FsbHM6MCx0cmlhbmdsZXM6MCxwb2ludHM6MCxsaW5lczowfTtyZXR1cm57bWVtb3J5OntnZW9tZXRyaWVzOjAsdGV4dHVyZXM6MH0scmVuZGVyOmUscHJvZ3JhbXM6bnVsbCxhdXRvUmVzZXQ6ITAscmVzZXQ6ZnVuY3Rpb24gbigpe2UuZnJhbWUrKyxlLmNhbGxzPTAsZS50cmlhbmdsZXM9MCxlLnBvaW50cz0wLGUubGluZXM9MH0sdXBkYXRlOmZ1bmN0aW9uIGkodCxuLHIpe3N3aXRjaChlLmNhbGxzKyssbil7Y2FzZSA0OmUudHJpYW5nbGVzKz1yKih0LzMpO2JyZWFrO2Nhc2UgMTplLmxpbmVzKz1yKih0LzIpO2JyZWFrO2Nhc2UgMzplLmxpbmVzKz1yKih0LTEpO2JyZWFrO2Nhc2UgMjplLmxpbmVzKz1yKnQ7YnJlYWs7Y2FzZSAwOmUucG9pbnRzKz1yKnQ7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTEluZm86IFVua25vd24gZHJhdyBtb2RlOiIsbil9fX19ZnVuY3Rpb24gQkR0KHQsZSl7cmV0dXJuIHRbMF0tZVswXX1mdW5jdGlvbiBIRHQodCxlKXtyZXR1cm4gTWF0aC5hYnMoZVsxXSktTWF0aC5hYnModFsxXSl9ZnVuY3Rpb24gRkR0KHQpe2NvbnN0IGU9e30sbj1uZXcgRmxvYXQzMkFycmF5KDgpLGk9W107Zm9yKGxldCB0PTA7dDw4O3QrKylpW3RdPVt0LDBdO3JldHVybnt1cGRhdGU6ZnVuY3Rpb24gcihvLGEscyxsKXtjb25zdCBjPW8ubW9ycGhUYXJnZXRJbmZsdWVuY2VzLHU9dm9pZCAwPT09Yz8wOmMubGVuZ3RoO2xldCBoPWVbYS5pZF07aWYodm9pZCAwPT09aCl7aD1bXTtmb3IobGV0IHQ9MDt0PHU7dCsrKWhbdF09W3QsMF07ZVthLmlkXT1ofWZvcihsZXQgdD0wO3Q8dTt0Kyspe2NvbnN0IGU9aFt0XTtlWzBdPXQsZVsxXT1jW3RdfWguc29ydChIRHQpO2ZvcihsZXQgdD0wO3Q8ODt0KyspdDx1JiZoW3RdWzFdPyhpW3RdWzBdPWhbdF1bMF0saVt0XVsxXT1oW3RdWzFdKTooaVt0XVswXT1OdW1iZXIuTUFYX1NBRkVfSU5URUdFUixpW3RdWzFdPTApO2kuc29ydChCRHQpO2NvbnN0IGQ9cy5tb3JwaFRhcmdldHMmJmEubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLHA9cy5tb3JwaE5vcm1hbHMmJmEubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbDtsZXQgZj0wO2ZvcihsZXQgdD0wO3Q8ODt0Kyspe2NvbnN0IGU9aVt0XSxyPWVbMF0sbz1lWzFdO3IhPT1OdW1iZXIuTUFYX1NBRkVfSU5URUdFUiYmbz8oZCYmYS5nZXRBdHRyaWJ1dGUoIm1vcnBoVGFyZ2V0Iit0KSE9PWRbcl0mJmEuc2V0QXR0cmlidXRlKCJtb3JwaFRhcmdldCIrdCxkW3JdKSxwJiZhLmdldEF0dHJpYnV0ZSgibW9ycGhOb3JtYWwiK3QpIT09cFtyXSYmYS5zZXRBdHRyaWJ1dGUoIm1vcnBoTm9ybWFsIit0LHBbcl0pLG5bdF09byxmKz1vKTooZCYmITA9PT1hLmhhc0F0dHJpYnV0ZSgibW9ycGhUYXJnZXQiK3QpJiZhLmRlbGV0ZUF0dHJpYnV0ZSgibW9ycGhUYXJnZXQiK3QpLHAmJiEwPT09YS5oYXNBdHRyaWJ1dGUoIm1vcnBoTm9ybWFsIit0KSYmYS5kZWxldGVBdHRyaWJ1dGUoIm1vcnBoTm9ybWFsIit0KSxuW3RdPTApfWNvbnN0IG09YS5tb3JwaFRhcmdldHNSZWxhdGl2ZT8xOjEtZjtsLmdldFVuaWZvcm1zKCkuc2V0VmFsdWUodCwibW9ycGhUYXJnZXRCYXNlSW5mbHVlbmNlIixtKSxsLmdldFVuaWZvcm1zKCkuc2V0VmFsdWUodCwibW9ycGhUYXJnZXRJbmZsdWVuY2VzIixuKX19fWZ1bmN0aW9uIFZEdCh0LGUsbixpKXtsZXQgcj1uZXcgV2Vha01hcDtmdW5jdGlvbiBvKHQpe2NvbnN0IGU9dC50YXJnZXQ7ZS5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixvKSxuLnJlbW92ZShlLmluc3RhbmNlTWF0cml4KSxudWxsIT09ZS5pbnN0YW5jZUNvbG9yJiZuLnJlbW92ZShlLmluc3RhbmNlQ29sb3IpfXJldHVybnt1cGRhdGU6ZnVuY3Rpb24gYSh0KXtjb25zdCBhPWkucmVuZGVyLmZyYW1lLHM9ZS5nZXQodCx0Lmdlb21ldHJ5KTtyZXR1cm4gci5nZXQocykhPT1hJiYoZS51cGRhdGUocyksci5zZXQocyxhKSksdC5pc0luc3RhbmNlZE1lc2gmJighMT09PXQuaGFzRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsbykmJnQuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsbyksbi51cGRhdGUodC5pbnN0YW5jZU1hdHJpeCwzNDk2MiksbnVsbCE9PXQuaW5zdGFuY2VDb2xvciYmbi51cGRhdGUodC5pbnN0YW5jZUNvbG9yLDM0OTYyKSksc30sZGlzcG9zZTpmdW5jdGlvbiBzKCl7cj1uZXcgV2Vha01hcH19fWZ1bmN0aW9uIFVEdCh0PW51bGwsZT0xLG49MSxpPTEpe1ZPdC5jYWxsKHRoaXMsbnVsbCksdGhpcy5pbWFnZT17ZGF0YTp0LHdpZHRoOmUsaGVpZ2h0Om4sZGVwdGg6aX0sdGhpcy5tYWdGaWx0ZXI9Vkl0LHRoaXMubWluRmlsdGVyPVZJdCx0aGlzLndyYXBSPUhJdCx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMSx0aGlzLmZsaXBZPSExLHRoaXMubmVlZHNVcGRhdGU9ITB9ZnVuY3Rpb24gakR0KHQ9bnVsbCxlPTEsbj0xLGk9MSl7Vk90LmNhbGwodGhpcyxudWxsKSx0aGlzLmltYWdlPXtkYXRhOnQsd2lkdGg6ZSxoZWlnaHQ6bixkZXB0aDppfSx0aGlzLm1hZ0ZpbHRlcj1WSXQsdGhpcy5taW5GaWx0ZXI9Vkl0LHRoaXMud3JhcFI9SEl0LHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExLHRoaXMuZmxpcFk9ITEsdGhpcy5uZWVkc1VwZGF0ZT0hMH1DRHQucGh5c2ljYWw9e3VuaWZvcm1zOmNEdChbQ0R0LnN0YW5kYXJkLnVuaWZvcm1zLHtjbGVhcmNvYXQ6e3ZhbHVlOjB9LGNsZWFyY29hdE1hcDp7dmFsdWU6bnVsbH0sY2xlYXJjb2F0Um91Z2huZXNzOnt2YWx1ZTowfSxjbGVhcmNvYXRSb3VnaG5lc3NNYXA6e3ZhbHVlOm51bGx9LGNsZWFyY29hdE5vcm1hbFNjYWxlOnt2YWx1ZTpuZXcgek90KDEsMSl9LGNsZWFyY29hdE5vcm1hbE1hcDp7dmFsdWU6bnVsbH0sc2hlZW46e3ZhbHVlOm5ldyBwenQoMCl9LHRyYW5zbWlzc2lvbjp7dmFsdWU6MH0sdHJhbnNtaXNzaW9uTWFwOnt2YWx1ZTpudWxsfX1dKSx2ZXJ0ZXhTaGFkZXI6RUR0Lm1lc2hwaHlzaWNhbF92ZXJ0LGZyYWdtZW50U2hhZGVyOkVEdC5tZXNocGh5c2ljYWxfZnJhZ30sKFVEdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShWT3QucHJvdG90eXBlKSkuY29uc3RydWN0b3I9VUR0LFVEdC5wcm90b3R5cGUuaXNEYXRhVGV4dHVyZTJEQXJyYXk9ITAsKGpEdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShWT3QucHJvdG90eXBlKSkuY29uc3RydWN0b3I9akR0LGpEdC5wcm90b3R5cGUuaXNEYXRhVGV4dHVyZTNEPSEwO2NvbnN0IEdEdD1uZXcgVk90LFdEdD1uZXcgVUR0LHFEdD1uZXcgakR0LFlEdD1uZXcgZ0R0LFhEdD1bXSwkRHQ9W10sS0R0PW5ldyBGbG9hdDMyQXJyYXkoMTYpLFpEdD1uZXcgRmxvYXQzMkFycmF5KDkpLEpEdD1uZXcgRmxvYXQzMkFycmF5KDQpO2Z1bmN0aW9uIFFEdCh0LGUsbil7Y29uc3QgaT10WzBdO2lmKGk8PTB8fGk+MClyZXR1cm4gdDtjb25zdCByPWUqbjtsZXQgbz1YRHRbcl07aWYodm9pZCAwPT09byYmKG89bmV3IEZsb2F0MzJBcnJheShyKSxYRHRbcl09byksMCE9PWUpe2kudG9BcnJheShvLDApO2ZvcihsZXQgaT0xLHI9MDtpIT09ZTsrK2kpcis9bix0W2ldLnRvQXJyYXkobyxyKX1yZXR1cm4gb31mdW5jdGlvbiB0QnQodCxlKXtpZih0Lmxlbmd0aCE9PWUubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgbj0wLGk9dC5sZW5ndGg7bjxpO24rKylpZih0W25dIT09ZVtuXSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBlQnQodCxlKXtmb3IobGV0IG49MCxpPWUubGVuZ3RoO248aTtuKyspdFtuXT1lW25dfWZ1bmN0aW9uIG5CdCh0LGUpe2xldCBuPSREdFtlXTt2b2lkIDA9PT1uJiYobj1uZXcgSW50MzJBcnJheShlKSwkRHRbZV09bik7Zm9yKGxldCBpPTA7aSE9PWU7KytpKW5baV09dC5hbGxvY2F0ZVRleHR1cmVVbml0KCk7cmV0dXJuIG59ZnVuY3Rpb24gaUJ0KHQsZSl7Y29uc3Qgbj10aGlzLmNhY2hlO25bMF0hPT1lJiYodC51bmlmb3JtMWYodGhpcy5hZGRyLGUpLG5bMF09ZSl9ZnVuY3Rpb24gckJ0KHQsZSl7Y29uc3Qgbj10aGlzLmNhY2hlO2lmKHZvaWQgMCE9PWUueCluWzBdPT09ZS54JiZuWzFdPT09ZS55fHwodC51bmlmb3JtMmYodGhpcy5hZGRyLGUueCxlLnkpLG5bMF09ZS54LG5bMV09ZS55KTtlbHNle2lmKHRCdChuLGUpKXJldHVybjt0LnVuaWZvcm0yZnYodGhpcy5hZGRyLGUpLGVCdChuLGUpfX1mdW5jdGlvbiBvQnQodCxlKXtjb25zdCBuPXRoaXMuY2FjaGU7aWYodm9pZCAwIT09ZS54KW5bMF09PT1lLngmJm5bMV09PT1lLnkmJm5bMl09PT1lLnp8fCh0LnVuaWZvcm0zZih0aGlzLmFkZHIsZS54LGUueSxlLnopLG5bMF09ZS54LG5bMV09ZS55LG5bMl09ZS56KTtlbHNlIGlmKHZvaWQgMCE9PWUuciluWzBdPT09ZS5yJiZuWzFdPT09ZS5nJiZuWzJdPT09ZS5ifHwodC51bmlmb3JtM2YodGhpcy5hZGRyLGUucixlLmcsZS5iKSxuWzBdPWUucixuWzFdPWUuZyxuWzJdPWUuYik7ZWxzZXtpZih0QnQobixlKSlyZXR1cm47dC51bmlmb3JtM2Z2KHRoaXMuYWRkcixlKSxlQnQobixlKX19ZnVuY3Rpb24gYUJ0KHQsZSl7Y29uc3Qgbj10aGlzLmNhY2hlO2lmKHZvaWQgMCE9PWUueCluWzBdPT09ZS54JiZuWzFdPT09ZS55JiZuWzJdPT09ZS56JiZuWzNdPT09ZS53fHwodC51bmlmb3JtNGYodGhpcy5hZGRyLGUueCxlLnksZS56LGUudyksblswXT1lLngsblsxXT1lLnksblsyXT1lLnosblszXT1lLncpO2Vsc2V7aWYodEJ0KG4sZSkpcmV0dXJuO3QudW5pZm9ybTRmdih0aGlzLmFkZHIsZSksZUJ0KG4sZSl9fWZ1bmN0aW9uIHNCdCh0LGUpe2NvbnN0IG49dGhpcy5jYWNoZSxpPWUuZWxlbWVudHM7aWYodm9pZCAwPT09aSl7aWYodEJ0KG4sZSkpcmV0dXJuO3QudW5pZm9ybU1hdHJpeDJmdih0aGlzLmFkZHIsITEsZSksZUJ0KG4sZSl9ZWxzZXtpZih0QnQobixpKSlyZXR1cm47SkR0LnNldChpKSx0LnVuaWZvcm1NYXRyaXgyZnYodGhpcy5hZGRyLCExLEpEdCksZUJ0KG4saSl9fWZ1bmN0aW9uIGxCdCh0LGUpe2NvbnN0IG49dGhpcy5jYWNoZSxpPWUuZWxlbWVudHM7aWYodm9pZCAwPT09aSl7aWYodEJ0KG4sZSkpcmV0dXJuO3QudW5pZm9ybU1hdHJpeDNmdih0aGlzLmFkZHIsITEsZSksZUJ0KG4sZSl9ZWxzZXtpZih0QnQobixpKSlyZXR1cm47WkR0LnNldChpKSx0LnVuaWZvcm1NYXRyaXgzZnYodGhpcy5hZGRyLCExLFpEdCksZUJ0KG4saSl9fWZ1bmN0aW9uIGNCdCh0LGUpe2NvbnN0IG49dGhpcy5jYWNoZSxpPWUuZWxlbWVudHM7aWYodm9pZCAwPT09aSl7aWYodEJ0KG4sZSkpcmV0dXJuO3QudW5pZm9ybU1hdHJpeDRmdih0aGlzLmFkZHIsITEsZSksZUJ0KG4sZSl9ZWxzZXtpZih0QnQobixpKSlyZXR1cm47S0R0LnNldChpKSx0LnVuaWZvcm1NYXRyaXg0ZnYodGhpcy5hZGRyLCExLEtEdCksZUJ0KG4saSl9fWZ1bmN0aW9uIHVCdCh0LGUsbil7Y29uc3QgaT10aGlzLmNhY2hlLHI9bi5hbGxvY2F0ZVRleHR1cmVVbml0KCk7aVswXSE9PXImJih0LnVuaWZvcm0xaSh0aGlzLmFkZHIsciksaVswXT1yKSxuLnNhZmVTZXRUZXh0dXJlMkQoZXx8R0R0LHIpfWZ1bmN0aW9uIGhCdCh0LGUsbil7Y29uc3QgaT10aGlzLmNhY2hlLHI9bi5hbGxvY2F0ZVRleHR1cmVVbml0KCk7aVswXSE9PXImJih0LnVuaWZvcm0xaSh0aGlzLmFkZHIsciksaVswXT1yKSxuLnNldFRleHR1cmUyREFycmF5KGV8fFdEdCxyKX1mdW5jdGlvbiBkQnQodCxlLG4pe2NvbnN0IGk9dGhpcy5jYWNoZSxyPW4uYWxsb2NhdGVUZXh0dXJlVW5pdCgpO2lbMF0hPT1yJiYodC51bmlmb3JtMWkodGhpcy5hZGRyLHIpLGlbMF09ciksbi5zZXRUZXh0dXJlM0QoZXx8cUR0LHIpfWZ1bmN0aW9uIHBCdCh0LGUsbil7Y29uc3QgaT10aGlzLmNhY2hlLHI9bi5hbGxvY2F0ZVRleHR1cmVVbml0KCk7aVswXSE9PXImJih0LnVuaWZvcm0xaSh0aGlzLmFkZHIsciksaVswXT1yKSxuLnNhZmVTZXRUZXh0dXJlQ3ViZShlfHxZRHQscil9ZnVuY3Rpb24gZkJ0KHQsZSl7Y29uc3Qgbj10aGlzLmNhY2hlO25bMF0hPT1lJiYodC51bmlmb3JtMWkodGhpcy5hZGRyLGUpLG5bMF09ZSl9ZnVuY3Rpb24gbUJ0KHQsZSl7Y29uc3Qgbj10aGlzLmNhY2hlO3RCdChuLGUpfHwodC51bmlmb3JtMml2KHRoaXMuYWRkcixlKSxlQnQobixlKSl9ZnVuY3Rpb24gZ0J0KHQsZSl7Y29uc3Qgbj10aGlzLmNhY2hlO3RCdChuLGUpfHwodC51bmlmb3JtM2l2KHRoaXMuYWRkcixlKSxlQnQobixlKSl9ZnVuY3Rpb24gX0J0KHQsZSl7Y29uc3Qgbj10aGlzLmNhY2hlO3RCdChuLGUpfHwodC51bmlmb3JtNGl2KHRoaXMuYWRkcixlKSxlQnQobixlKSl9ZnVuY3Rpb24geUJ0KHQsZSl7Y29uc3Qgbj10aGlzLmNhY2hlO25bMF0hPT1lJiYodC51bmlmb3JtMXVpKHRoaXMuYWRkcixlKSxuWzBdPWUpfWZ1bmN0aW9uIHZCdCh0LGUpe3QudW5pZm9ybTFmdih0aGlzLmFkZHIsZSl9ZnVuY3Rpb24gYkJ0KHQsZSl7dC51bmlmb3JtMWl2KHRoaXMuYWRkcixlKX1mdW5jdGlvbiB4QnQodCxlKXt0LnVuaWZvcm0yaXYodGhpcy5hZGRyLGUpfWZ1bmN0aW9uIHdCdCh0LGUpe3QudW5pZm9ybTNpdih0aGlzLmFkZHIsZSl9ZnVuY3Rpb24gU0J0KHQsZSl7dC51bmlmb3JtNGl2KHRoaXMuYWRkcixlKX1mdW5jdGlvbiBNQnQodCxlKXtjb25zdCBuPVFEdChlLHRoaXMuc2l6ZSwyKTt0LnVuaWZvcm0yZnYodGhpcy5hZGRyLG4pfWZ1bmN0aW9uIEVCdCh0LGUpe2NvbnN0IG49UUR0KGUsdGhpcy5zaXplLDMpO3QudW5pZm9ybTNmdih0aGlzLmFkZHIsbil9ZnVuY3Rpb24gVEJ0KHQsZSl7Y29uc3Qgbj1RRHQoZSx0aGlzLnNpemUsNCk7dC51bmlmb3JtNGZ2KHRoaXMuYWRkcixuKX1mdW5jdGlvbiBDQnQodCxlKXtjb25zdCBuPVFEdChlLHRoaXMuc2l6ZSw0KTt0LnVuaWZvcm1NYXRyaXgyZnYodGhpcy5hZGRyLCExLG4pfWZ1bmN0aW9uIEFCdCh0LGUpe2NvbnN0IG49UUR0KGUsdGhpcy5zaXplLDkpO3QudW5pZm9ybU1hdHJpeDNmdih0aGlzLmFkZHIsITEsbil9ZnVuY3Rpb24ga0J0KHQsZSl7Y29uc3Qgbj1RRHQoZSx0aGlzLnNpemUsMTYpO3QudW5pZm9ybU1hdHJpeDRmdih0aGlzLmFkZHIsITEsbil9ZnVuY3Rpb24gTEJ0KHQsZSxuKXtjb25zdCBpPWUubGVuZ3RoLHI9bkJ0KG4saSk7dC51bmlmb3JtMWl2KHRoaXMuYWRkcixyKTtmb3IobGV0IHQ9MDt0IT09aTsrK3Qpbi5zYWZlU2V0VGV4dHVyZTJEKGVbdF18fEdEdCxyW3RdKX1mdW5jdGlvbiBQQnQodCxlLG4pe2NvbnN0IGk9ZS5sZW5ndGgscj1uQnQobixpKTt0LnVuaWZvcm0xaXYodGhpcy5hZGRyLHIpO2ZvcihsZXQgdD0wO3QhPT1pOysrdCluLnNhZmVTZXRUZXh0dXJlQ3ViZShlW3RdfHxZRHQsclt0XSl9ZnVuY3Rpb24gTkJ0KHQsZSxuKXt0aGlzLmlkPXQsdGhpcy5hZGRyPW4sdGhpcy5jYWNoZT1bXSx0aGlzLnNldFZhbHVlPShmdW5jdGlvbiBpKHQpe3N3aXRjaCh0KXtjYXNlIDUxMjY6cmV0dXJuIGlCdDtjYXNlIDM1NjY0OnJldHVybiByQnQ7Y2FzZSAzNTY2NTpyZXR1cm4gb0J0O2Nhc2UgMzU2NjY6cmV0dXJuIGFCdDtjYXNlIDM1Njc0OnJldHVybiBzQnQ7Y2FzZSAzNTY3NTpyZXR1cm4gbEJ0O2Nhc2UgMzU2NzY6cmV0dXJuIGNCdDtjYXNlIDUxMjQ6Y2FzZSAzNTY3MDpyZXR1cm4gZkJ0O2Nhc2UgMzU2Njc6Y2FzZSAzNTY3MTpyZXR1cm4gbUJ0O2Nhc2UgMzU2Njg6Y2FzZSAzNTY3MjpyZXR1cm4gZ0J0O2Nhc2UgMzU2Njk6Y2FzZSAzNTY3MzpyZXR1cm4gX0J0O2Nhc2UgNTEyNTpyZXR1cm4geUJ0O2Nhc2UgMzU2Nzg6Y2FzZSAzNjE5ODpjYXNlIDM2Mjk4OmNhc2UgMzYzMDY6Y2FzZSAzNTY4MjpyZXR1cm4gdUJ0O2Nhc2UgMzU2Nzk6Y2FzZSAzNjI5OTpjYXNlIDM2MzA3OnJldHVybiBkQnQ7Y2FzZSAzNTY4MDpjYXNlIDM2MzAwOmNhc2UgMzYzMDg6Y2FzZSAzNjI5MzpyZXR1cm4gcEJ0O2Nhc2UgMzYyODk6Y2FzZSAzNjMwMzpjYXNlIDM2MzExOmNhc2UgMzYyOTI6cmV0dXJuIGhCdH19KShlLnR5cGUpfWZ1bmN0aW9uIElCdCh0LGUsbil7dGhpcy5pZD10LHRoaXMuYWRkcj1uLHRoaXMuY2FjaGU9W10sdGhpcy5zaXplPWUuc2l6ZSx0aGlzLnNldFZhbHVlPShmdW5jdGlvbiBpKHQpe3N3aXRjaCh0KXtjYXNlIDUxMjY6cmV0dXJuIHZCdDtjYXNlIDM1NjY0OnJldHVybiBNQnQ7Y2FzZSAzNTY2NTpyZXR1cm4gRUJ0O2Nhc2UgMzU2NjY6cmV0dXJuIFRCdDtjYXNlIDM1Njc0OnJldHVybiBDQnQ7Y2FzZSAzNTY3NTpyZXR1cm4gQUJ0O2Nhc2UgMzU2NzY6cmV0dXJuIGtCdDtjYXNlIDUxMjQ6Y2FzZSAzNTY3MDpyZXR1cm4gYkJ0O2Nhc2UgMzU2Njc6Y2FzZSAzNTY3MTpyZXR1cm4geEJ0O2Nhc2UgMzU2Njg6Y2FzZSAzNTY3MjpyZXR1cm4gd0J0O2Nhc2UgMzU2Njk6Y2FzZSAzNTY3MzpyZXR1cm4gU0J0O2Nhc2UgMzU2Nzg6Y2FzZSAzNjE5ODpjYXNlIDM2Mjk4OmNhc2UgMzYzMDY6Y2FzZSAzNTY4MjpyZXR1cm4gTEJ0O2Nhc2UgMzU2ODA6Y2FzZSAzNjMwMDpjYXNlIDM2MzA4OmNhc2UgMzYyOTM6cmV0dXJuIFBCdH19KShlLnR5cGUpfWZ1bmN0aW9uIE9CdCh0KXt0aGlzLmlkPXQsdGhpcy5zZXE9W10sdGhpcy5tYXA9e319SUJ0LnByb3RvdHlwZS51cGRhdGVDYWNoZT1mdW5jdGlvbih0KXtjb25zdCBlPXRoaXMuY2FjaGU7dCBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSYmZS5sZW5ndGghPT10Lmxlbmd0aCYmKHRoaXMuY2FjaGU9bmV3IEZsb2F0MzJBcnJheSh0Lmxlbmd0aCkpLGVCdChlLHQpfSxPQnQucHJvdG90eXBlLnNldFZhbHVlPWZ1bmN0aW9uKHQsZSxuKXtjb25zdCBpPXRoaXMuc2VxO2ZvcihsZXQgcj0wLG89aS5sZW5ndGg7ciE9PW87KytyKXtjb25zdCBvPWlbcl07by5zZXRWYWx1ZSh0LGVbby5pZF0sbil9fTtjb25zdCBSQnQ9LyhcdyspKFxdKT8oXFt8XC4pPy9nO2Z1bmN0aW9uIHpCdCh0LGUpe3Quc2VxLnB1c2goZSksdC5tYXBbZS5pZF09ZX1mdW5jdGlvbiBEQnQodCxlLG4pe2NvbnN0IGk9dC5uYW1lLHI9aS5sZW5ndGg7Zm9yKFJCdC5sYXN0SW5kZXg9MDs7KXtjb25zdCBvPVJCdC5leGVjKGkpLGE9UkJ0Lmxhc3RJbmRleDtsZXQgcz1vWzFdO2NvbnN0IGw9b1szXTtpZigiXSI9PT1vWzJdJiYoc3w9MCksdm9pZCAwPT09bHx8IlsiPT09bCYmYSsyPT09cil7ekJ0KG4sdm9pZCAwPT09bD9uZXcgTkJ0KHMsdCxlKTpuZXcgSUJ0KHMsdCxlKSk7YnJlYWt9e2xldCB0PW4ubWFwW3NdO3ZvaWQgMD09PXQmJih0PW5ldyBPQnQocyksekJ0KG4sdCkpLG49dH19fWZ1bmN0aW9uIEJCdCh0LGUpe3RoaXMuc2VxPVtdLHRoaXMubWFwPXt9O2NvbnN0IG49dC5nZXRQcm9ncmFtUGFyYW1ldGVyKGUsMzU3MTgpO2ZvcihsZXQgaT0wO2k8bjsrK2kpe2NvbnN0IG49dC5nZXRBY3RpdmVVbmlmb3JtKGUsaSk7REJ0KG4sdC5nZXRVbmlmb3JtTG9jYXRpb24oZSxuLm5hbWUpLHRoaXMpfX1mdW5jdGlvbiBIQnQodCxlLG4pe2NvbnN0IGk9dC5jcmVhdGVTaGFkZXIoZSk7cmV0dXJuIHQuc2hhZGVyU291cmNlKGksbiksdC5jb21waWxlU2hhZGVyKGkpLGl9QkJ0LnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbih0LGUsbixpKXtjb25zdCByPXRoaXMubWFwW2VdO3ZvaWQgMCE9PXImJnIuc2V0VmFsdWUodCxuLGkpfSxCQnQucHJvdG90eXBlLnNldE9wdGlvbmFsPWZ1bmN0aW9uKHQsZSxuKXtjb25zdCBpPWVbbl07dm9pZCAwIT09aSYmdGhpcy5zZXRWYWx1ZSh0LG4saSl9LEJCdC51cGxvYWQ9ZnVuY3Rpb24odCxlLG4saSl7Zm9yKGxldCByPTAsbz1lLmxlbmd0aDtyIT09bzsrK3Ipe2NvbnN0IG89ZVtyXSxhPW5bby5pZF07ITEhPT1hLm5lZWRzVXBkYXRlJiZvLnNldFZhbHVlKHQsYS52YWx1ZSxpKX19LEJCdC5zZXFXaXRoVmFsdWU9ZnVuY3Rpb24odCxlKXtjb25zdCBuPVtdO2ZvcihsZXQgaT0wLHI9dC5sZW5ndGg7aSE9PXI7KytpKXtjb25zdCByPXRbaV07ci5pZCBpbiBlJiZuLnB1c2gocil9cmV0dXJuIG59O2xldCBGQnQ9MDtmdW5jdGlvbiBWQnQodCl7c3dpdGNoKHQpe2Nhc2UgeE90OnJldHVyblsiTGluZWFyIiwiKCB2YWx1ZSApIl07Y2FzZSB3T3Q6cmV0dXJuWyJzUkdCIiwiKCB2YWx1ZSApIl07Y2FzZSBNT3Q6cmV0dXJuWyJSR0JFIiwiKCB2YWx1ZSApIl07Y2FzZSBFT3Q6cmV0dXJuWyJSR0JNIiwiKCB2YWx1ZSwgNy4wICkiXTtjYXNlIFRPdDpyZXR1cm5bIlJHQk0iLCIoIHZhbHVlLCAxNi4wICkiXTtjYXNlIENPdDpyZXR1cm5bIlJHQkQiLCIoIHZhbHVlLCAyNTYuMCApIl07Y2FzZSBTT3Q6cmV0dXJuWyJHYW1tYSIsIiggdmFsdWUsIGZsb2F0KCBHQU1NQV9GQUNUT1IgKSApIl07Y2FzZSAzMDAzOnJldHVyblsiTG9nTHV2IiwiKCB2YWx1ZSApIl07ZGVmYXVsdDpyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW06IFVuc3VwcG9ydGVkIGVuY29kaW5nOiIsdCksWyJMaW5lYXIiLCIoIHZhbHVlICkiXX19ZnVuY3Rpb24gVUJ0KHQsZSxuKXtjb25zdCBpPXQuZ2V0U2hhZGVyUGFyYW1ldGVyKGUsMzU3MTMpLHI9dC5nZXRTaGFkZXJJbmZvTG9nKGUpLnRyaW0oKTtyZXR1cm4gaSYmIiI9PT1yPyIiOiJUSFJFRS5XZWJHTFNoYWRlcjogZ2wuZ2V0U2hhZGVySW5mb0xvZygpICIrbisiXG4iK3IrKGZ1bmN0aW9uIG8odCl7Y29uc3QgZT10LnNwbGl0KCJcbiIpO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKWVbdF09dCsxKyI6ICIrZVt0XTtyZXR1cm4gZS5qb2luKCJcbiIpfSkodC5nZXRTaGFkZXJTb3VyY2UoZSkpfWZ1bmN0aW9uIGpCdCh0LGUpe2NvbnN0IG49VkJ0KGUpO3JldHVybiJ2ZWM0ICIrdCsiKCB2ZWM0IHZhbHVlICkgeyByZXR1cm4gIituWzBdKyJUb0xpbmVhciIrblsxXSsiOyB9In1mdW5jdGlvbiBHQnQodCxlKXtjb25zdCBuPVZCdChlKTtyZXR1cm4idmVjNCAiK3QrIiggdmVjNCB2YWx1ZSApIHsgcmV0dXJuIExpbmVhclRvIituWzBdK25bMV0rIjsgfSJ9ZnVuY3Rpb24gV0J0KHQsZSl7bGV0IG47c3dpdGNoKGUpe2Nhc2UgMTpuPSJMaW5lYXIiO2JyZWFrO2Nhc2UgMjpuPSJSZWluaGFyZCI7YnJlYWs7Y2FzZSAzOm49Ik9wdGltaXplZENpbmVvbiI7YnJlYWs7Y2FzZSA0Om49IkFDRVNGaWxtaWMiO2JyZWFrO2Nhc2UgNTpuPSJDdXN0b20iO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW06IFVuc3VwcG9ydGVkIHRvbmVNYXBwaW5nOiIsZSksbj0iTGluZWFyIn1yZXR1cm4idmVjMyAiK3QrIiggdmVjMyBjb2xvciApIHsgcmV0dXJuICIrbisiVG9uZU1hcHBpbmcoIGNvbG9yICk7IH0ifWZ1bmN0aW9uIHFCdCh0KXtyZXR1cm4iIiE9PXR9ZnVuY3Rpb24gWUJ0KHQsZSl7cmV0dXJuIHQucmVwbGFjZSgvTlVNX0RJUl9MSUdIVFMvZyxlLm51bURpckxpZ2h0cykucmVwbGFjZSgvTlVNX1NQT1RfTElHSFRTL2csZS5udW1TcG90TGlnaHRzKS5yZXBsYWNlKC9OVU1fUkVDVF9BUkVBX0xJR0hUUy9nLGUubnVtUmVjdEFyZWFMaWdodHMpLnJlcGxhY2UoL05VTV9QT0lOVF9MSUdIVFMvZyxlLm51bVBvaW50TGlnaHRzKS5yZXBsYWNlKC9OVU1fSEVNSV9MSUdIVFMvZyxlLm51bUhlbWlMaWdodHMpLnJlcGxhY2UoL05VTV9ESVJfTElHSFRfU0hBRE9XUy9nLGUubnVtRGlyTGlnaHRTaGFkb3dzKS5yZXBsYWNlKC9OVU1fU1BPVF9MSUdIVF9TSEFET1dTL2csZS5udW1TcG90TGlnaHRTaGFkb3dzKS5yZXBsYWNlKC9OVU1fUE9JTlRfTElHSFRfU0hBRE9XUy9nLGUubnVtUG9pbnRMaWdodFNoYWRvd3MpfWZ1bmN0aW9uIFhCdCh0LGUpe3JldHVybiB0LnJlcGxhY2UoL05VTV9DTElQUElOR19QTEFORVMvZyxlLm51bUNsaXBwaW5nUGxhbmVzKS5yZXBsYWNlKC9VTklPTl9DTElQUElOR19QTEFORVMvZyxlLm51bUNsaXBwaW5nUGxhbmVzLWUubnVtQ2xpcEludGVyc2VjdGlvbil9Y29uc3QgJEJ0PS9eWyBcdF0qI2luY2x1ZGUgKzwoW1x3XGQuL10rKT4vZ207ZnVuY3Rpb24gS0J0KHQpe3JldHVybiB0LnJlcGxhY2UoJEJ0LFpCdCl9ZnVuY3Rpb24gWkJ0KHQsZSl7Y29uc3Qgbj1FRHRbZV07aWYodm9pZCAwPT09bil0aHJvdyBuZXcgRXJyb3IoIkNhbiBub3QgcmVzb2x2ZSAjaW5jbHVkZSA8IitlKyI+Iik7cmV0dXJuIEtCdChuKX1jb25zdCBKQnQ9LyNwcmFnbWEgdW5yb2xsX2xvb3BbXHNdKz9mb3IgXCggaW50IGkgXD0gKFxkKylcOyBpIDwgKFxkKylcOyBpIFwrXCsgXCkgXHsoW1xzXFNdKz8pKD89XH0pXH0vZyxRQnQ9LyNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRccytmb3JccypcKFxzKmludFxzK2lccyo9XHMqKFxkKylccyo7XHMqaVxzKjxccyooXGQrKVxzKjtccyppXHMqXCtcK1xzKlwpXHMqeyhbXHNcU10rPyl9XHMrI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQvZztmdW5jdGlvbiB0SHQodCl7cmV0dXJuIHQucmVwbGFjZShRQnQsbkh0KS5yZXBsYWNlKEpCdCxlSHQpfWZ1bmN0aW9uIGVIdCh0LGUsbixpKXtyZXR1cm4gY29uc29sZS53YXJuKCJXZWJHTFByb2dyYW06ICNwcmFnbWEgdW5yb2xsX2xvb3Agc2hhZGVyIHN5bnRheCBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlICNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQgc3ludGF4IGluc3RlYWQuIiksbkh0KDAsZSxuLGkpfWZ1bmN0aW9uIG5IdCh0LGUsbixpKXtsZXQgcj0iIjtmb3IobGV0IHQ9cGFyc2VJbnQoZSk7dDxwYXJzZUludChuKTt0Kyspcis9aS5yZXBsYWNlKC9cW1xzKmlccypcXS9nLCJbICIrdCsiIF0iKS5yZXBsYWNlKC9VTlJPTExFRF9MT09QX0lOREVYL2csdCk7cmV0dXJuIHJ9ZnVuY3Rpb24gaUh0KHQpe2xldCBlPSJwcmVjaXNpb24gIit0LnByZWNpc2lvbisiIGZsb2F0O1xucHJlY2lzaW9uICIrdC5wcmVjaXNpb24rIiBpbnQ7IjtyZXR1cm4iaGlnaHAiPT09dC5wcmVjaXNpb24/ZSs9IlxuI2RlZmluZSBISUdIX1BSRUNJU0lPTiI6Im1lZGl1bXAiPT09dC5wcmVjaXNpb24/ZSs9IlxuI2RlZmluZSBNRURJVU1fUFJFQ0lTSU9OIjoibG93cCI9PT10LnByZWNpc2lvbiYmKGUrPSJcbiNkZWZpbmUgTE9XX1BSRUNJU0lPTiIpLGV9ZnVuY3Rpb24gckh0KHQsZSxuLGkpe2NvbnN0IHI9dC5nZXRDb250ZXh0KCksbz1uLmRlZmluZXM7bGV0IGE9bi52ZXJ0ZXhTaGFkZXIscz1uLmZyYWdtZW50U2hhZGVyO2NvbnN0IGw9KGZ1bmN0aW9uIGModCl7bGV0IGU9IlNIQURPV01BUF9UWVBFX0JBU0lDIjtyZXR1cm4gMT09PXQuc2hhZG93TWFwVHlwZT9lPSJTSEFET1dNQVBfVFlQRV9QQ0YiOjI9PT10LnNoYWRvd01hcFR5cGU/ZT0iU0hBRE9XTUFQX1RZUEVfUENGX1NPRlQiOjM9PT10LnNoYWRvd01hcFR5cGUmJihlPSJTSEFET1dNQVBfVFlQRV9WU00iKSxlfSkobiksdT0oZnVuY3Rpb24gaCh0KXtsZXQgZT0iRU5WTUFQX1RZUEVfQ1VCRSI7aWYodC5lbnZNYXApc3dpdGNoKHQuZW52TWFwTW9kZSl7Y2FzZSBOSXQ6Y2FzZSBJSXQ6ZT0iRU5WTUFQX1RZUEVfQ1VCRSI7YnJlYWs7Y2FzZSB6SXQ6Y2FzZSBESXQ6ZT0iRU5WTUFQX1RZUEVfQ1VCRV9VViJ9cmV0dXJuIGV9KShuKSxkPShmdW5jdGlvbiBwKHQpe2xldCBlPSJFTlZNQVBfTU9ERV9SRUZMRUNUSU9OIjtpZih0LmVudk1hcClzd2l0Y2godC5lbnZNYXBNb2RlKXtjYXNlIElJdDpjYXNlIERJdDplPSJFTlZNQVBfTU9ERV9SRUZSQUNUSU9OIn1yZXR1cm4gZX0pKG4pLGY9KGZ1bmN0aW9uIG0odCl7bGV0IGU9IkVOVk1BUF9CTEVORElOR19OT05FIjtpZih0LmVudk1hcClzd2l0Y2godC5jb21iaW5lKXtjYXNlIDA6ZT0iRU5WTUFQX0JMRU5ESU5HX01VTFRJUExZIjticmVhaztjYXNlIDE6ZT0iRU5WTUFQX0JMRU5ESU5HX01JWCI7YnJlYWs7Y2FzZSAyOmU9IkVOVk1BUF9CTEVORElOR19BREQifXJldHVybiBlfSkobiksZz10LmdhbW1hRmFjdG9yPjA/dC5nYW1tYUZhY3RvcjoxLF89bi5pc1dlYkdMMj8iIjooZnVuY3Rpb24geSh0KXtyZXR1cm5bdC5leHRlbnNpb25EZXJpdmF0aXZlc3x8dC5lbnZNYXBDdWJlVVZ8fHQuYnVtcE1hcHx8dC50YW5nZW50U3BhY2VOb3JtYWxNYXB8fHQuY2xlYXJjb2F0Tm9ybWFsTWFwfHx0LmZsYXRTaGFkaW5nfHwicGh5c2ljYWwiPT09dC5zaGFkZXJJRD8iI2V4dGVuc2lvbiBHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgOiBlbmFibGUiOiIiLCh0LmV4dGVuc2lvbkZyYWdEZXB0aHx8dC5sb2dhcml0aG1pY0RlcHRoQnVmZmVyKSYmdC5yZW5kZXJlckV4dGVuc2lvbkZyYWdEZXB0aD8iI2V4dGVuc2lvbiBHTF9FWFRfZnJhZ19kZXB0aCA6IGVuYWJsZSI6IiIsdC5leHRlbnNpb25EcmF3QnVmZmVycyYmdC5yZW5kZXJlckV4dGVuc2lvbkRyYXdCdWZmZXJzPyIjZXh0ZW5zaW9uIEdMX0VYVF9kcmF3X2J1ZmZlcnMgOiByZXF1aXJlIjoiIiwodC5leHRlbnNpb25TaGFkZXJUZXh0dXJlTE9EfHx0LmVudk1hcCkmJnQucmVuZGVyZXJFeHRlbnNpb25TaGFkZXJUZXh0dXJlTG9kPyIjZXh0ZW5zaW9uIEdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QgOiBlbmFibGUiOiIiXS5maWx0ZXIocUJ0KS5qb2luKCJcbiIpfSkobiksdj0oZnVuY3Rpb24gYih0KXtjb25zdCBlPVtdO2Zvcihjb25zdCBuIGluIHQpe2NvbnN0IGk9dFtuXTshMSE9PWkmJmUucHVzaCgiI2RlZmluZSAiK24rIiAiK2kpfXJldHVybiBlLmpvaW4oIlxuIil9KShvKSx4PXIuY3JlYXRlUHJvZ3JhbSgpO2xldCB3LFMsTT1uLmdsc2xWZXJzaW9uPyIjdmVyc2lvbiAiK24uZ2xzbFZlcnNpb24rIlxuIjoiIjtuLmlzUmF3U2hhZGVyTWF0ZXJpYWw/KHc9W3ZdLmZpbHRlcihxQnQpLmpvaW4oIlxuIiksdy5sZW5ndGg+MCYmKHcrPSJcbiIpLFM9W18sdl0uZmlsdGVyKHFCdCkuam9pbigiXG4iKSxTLmxlbmd0aD4wJiYoUys9IlxuIikpOih3PVtpSHQobiksIiNkZWZpbmUgU0hBREVSX05BTUUgIituLnNoYWRlck5hbWUsdixuLmluc3RhbmNpbmc/IiNkZWZpbmUgVVNFX0lOU1RBTkNJTkciOiIiLG4uaW5zdGFuY2luZ0NvbG9yPyIjZGVmaW5lIFVTRV9JTlNUQU5DSU5HX0NPTE9SIjoiIixuLnN1cHBvcnRzVmVydGV4VGV4dHVyZXM/IiNkZWZpbmUgVkVSVEVYX1RFWFRVUkVTIjoiIiwiI2RlZmluZSBHQU1NQV9GQUNUT1IgIitnLCIjZGVmaW5lIE1BWF9CT05FUyAiK24ubWF4Qm9uZXMsbi51c2VGb2cmJm4uZm9nPyIjZGVmaW5lIFVTRV9GT0ciOiIiLG4udXNlRm9nJiZuLmZvZ0V4cDI/IiNkZWZpbmUgRk9HX0VYUDIiOiIiLG4ubWFwPyIjZGVmaW5lIFVTRV9NQVAiOiIiLG4uZW52TWFwPyIjZGVmaW5lIFVTRV9FTlZNQVAiOiIiLG4uZW52TWFwPyIjZGVmaW5lICIrZDoiIixuLmxpZ2h0TWFwPyIjZGVmaW5lIFVTRV9MSUdIVE1BUCI6IiIsbi5hb01hcD8iI2RlZmluZSBVU0VfQU9NQVAiOiIiLG4uZW1pc3NpdmVNYXA/IiNkZWZpbmUgVVNFX0VNSVNTSVZFTUFQIjoiIixuLmJ1bXBNYXA/IiNkZWZpbmUgVVNFX0JVTVBNQVAiOiIiLG4ubm9ybWFsTWFwPyIjZGVmaW5lIFVTRV9OT1JNQUxNQVAiOiIiLG4ubm9ybWFsTWFwJiZuLm9iamVjdFNwYWNlTm9ybWFsTWFwPyIjZGVmaW5lIE9CSkVDVFNQQUNFX05PUk1BTE1BUCI6IiIsbi5ub3JtYWxNYXAmJm4udGFuZ2VudFNwYWNlTm9ybWFsTWFwPyIjZGVmaW5lIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAiOiIiLG4uY2xlYXJjb2F0TWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRNQVAiOiIiLG4uY2xlYXJjb2F0Um91Z2huZXNzTWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRfUk9VR0hORVNTTUFQIjoiIixuLmNsZWFyY29hdE5vcm1hbE1hcD8iI2RlZmluZSBVU0VfQ0xFQVJDT0FUX05PUk1BTE1BUCI6IiIsbi5kaXNwbGFjZW1lbnRNYXAmJm4uc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcz8iI2RlZmluZSBVU0VfRElTUExBQ0VNRU5UTUFQIjoiIixuLnNwZWN1bGFyTWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUk1BUCI6IiIsbi5yb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX1JPVUdITkVTU01BUCI6IiIsbi5tZXRhbG5lc3NNYXA/IiNkZWZpbmUgVVNFX01FVEFMTkVTU01BUCI6IiIsbi5hbHBoYU1hcD8iI2RlZmluZSBVU0VfQUxQSEFNQVAiOiIiLG4udHJhbnNtaXNzaW9uTWFwPyIjZGVmaW5lIFVTRV9UUkFOU01JU1NJT05NQVAiOiIiLG4udmVydGV4VGFuZ2VudHM/IiNkZWZpbmUgVVNFX1RBTkdFTlQiOiIiLG4udmVydGV4Q29sb3JzPyIjZGVmaW5lIFVTRV9DT0xPUiI6IiIsbi52ZXJ0ZXhVdnM/IiNkZWZpbmUgVVNFX1VWIjoiIixuLnV2c1ZlcnRleE9ubHk/IiNkZWZpbmUgVVZTX1ZFUlRFWF9PTkxZIjoiIixuLmZsYXRTaGFkaW5nPyIjZGVmaW5lIEZMQVRfU0hBREVEIjoiIixuLnNraW5uaW5nPyIjZGVmaW5lIFVTRV9TS0lOTklORyI6IiIsbi51c2VWZXJ0ZXhUZXh0dXJlPyIjZGVmaW5lIEJPTkVfVEVYVFVSRSI6IiIsbi5tb3JwaFRhcmdldHM/IiNkZWZpbmUgVVNFX01PUlBIVEFSR0VUUyI6IiIsbi5tb3JwaE5vcm1hbHMmJiExPT09bi5mbGF0U2hhZGluZz8iI2RlZmluZSBVU0VfTU9SUEhOT1JNQUxTIjoiIixuLmRvdWJsZVNpZGVkPyIjZGVmaW5lIERPVUJMRV9TSURFRCI6IiIsbi5mbGlwU2lkZWQ/IiNkZWZpbmUgRkxJUF9TSURFRCI6IiIsbi5zaGFkb3dNYXBFbmFibGVkPyIjZGVmaW5lIFVTRV9TSEFET1dNQVAiOiIiLG4uc2hhZG93TWFwRW5hYmxlZD8iI2RlZmluZSAiK2w6IiIsbi5zaXplQXR0ZW51YXRpb24/IiNkZWZpbmUgVVNFX1NJWkVBVFRFTlVBVElPTiI6IiIsbi5sb2dhcml0aG1pY0RlcHRoQnVmZmVyPyIjZGVmaW5lIFVTRV9MT0dERVBUSEJVRiI6IiIsbi5sb2dhcml0aG1pY0RlcHRoQnVmZmVyJiZuLnJlbmRlcmVyRXh0ZW5zaW9uRnJhZ0RlcHRoPyIjZGVmaW5lIFVTRV9MT0dERVBUSEJVRl9FWFQiOiIiLCJ1bmlmb3JtIG1hdDQgbW9kZWxNYXRyaXg7IiwidW5pZm9ybSBtYXQ0IG1vZGVsVmlld01hdHJpeDsiLCJ1bmlmb3JtIG1hdDQgcHJvamVjdGlvbk1hdHJpeDsiLCJ1bmlmb3JtIG1hdDQgdmlld01hdHJpeDsiLCJ1bmlmb3JtIG1hdDMgbm9ybWFsTWF0cml4OyIsInVuaWZvcm0gdmVjMyBjYW1lcmFQb3NpdGlvbjsiLCJ1bmlmb3JtIGJvb2wgaXNPcnRob2dyYXBoaWM7IiwiI2lmZGVmIFVTRV9JTlNUQU5DSU5HIiwiXHRhdHRyaWJ1dGUgbWF0NCBpbnN0YW5jZU1hdHJpeDsiLCIjZW5kaWYiLCIjaWZkZWYgVVNFX0lOU1RBTkNJTkdfQ09MT1IiLCJcdGF0dHJpYnV0ZSB2ZWMzIGluc3RhbmNlQ29sb3I7IiwiI2VuZGlmIiwiYXR0cmlidXRlIHZlYzMgcG9zaXRpb247IiwiYXR0cmlidXRlIHZlYzMgbm9ybWFsOyIsImF0dHJpYnV0ZSB2ZWMyIHV2OyIsIiNpZmRlZiBVU0VfVEFOR0VOVCIsIlx0YXR0cmlidXRlIHZlYzQgdGFuZ2VudDsiLCIjZW5kaWYiLCIjaWZkZWYgVVNFX0NPTE9SIiwiXHRhdHRyaWJ1dGUgdmVjMyBjb2xvcjsiLCIjZW5kaWYiLCIjaWZkZWYgVVNFX01PUlBIVEFSR0VUUyIsIlx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQwOyIsIlx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQxOyIsIlx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQyOyIsIlx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQzOyIsIlx0I2lmZGVmIFVTRV9NT1JQSE5PUk1BTFMiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwwOyIsIlx0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaE5vcm1hbDE7IiwiXHRcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoTm9ybWFsMjsiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwzOyIsIlx0I2Vsc2UiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQ0OyIsIlx0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDU7IiwiXHRcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0NjsiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQ3OyIsIlx0I2VuZGlmIiwiI2VuZGlmIiwiI2lmZGVmIFVTRV9TS0lOTklORyIsIlx0YXR0cmlidXRlIHZlYzQgc2tpbkluZGV4OyIsIlx0YXR0cmlidXRlIHZlYzQgc2tpbldlaWdodDsiLCIjZW5kaWYiLCJcbiJdLmZpbHRlcihxQnQpLmpvaW4oIlxuIiksUz1bXyxpSHQobiksIiNkZWZpbmUgU0hBREVSX05BTUUgIituLnNoYWRlck5hbWUsdixuLmFscGhhVGVzdD8iI2RlZmluZSBBTFBIQVRFU1QgIituLmFscGhhVGVzdCsobi5hbHBoYVRlc3QlMT8iIjoiLjAiKToiIiwiI2RlZmluZSBHQU1NQV9GQUNUT1IgIitnLG4udXNlRm9nJiZuLmZvZz8iI2RlZmluZSBVU0VfRk9HIjoiIixuLnVzZUZvZyYmbi5mb2dFeHAyPyIjZGVmaW5lIEZPR19FWFAyIjoiIixuLm1hcD8iI2RlZmluZSBVU0VfTUFQIjoiIixuLm1hdGNhcD8iI2RlZmluZSBVU0VfTUFUQ0FQIjoiIixuLmVudk1hcD8iI2RlZmluZSBVU0VfRU5WTUFQIjoiIixuLmVudk1hcD8iI2RlZmluZSAiK3U6IiIsbi5lbnZNYXA/IiNkZWZpbmUgIitkOiIiLG4uZW52TWFwPyIjZGVmaW5lICIrZjoiIixuLmxpZ2h0TWFwPyIjZGVmaW5lIFVTRV9MSUdIVE1BUCI6IiIsbi5hb01hcD8iI2RlZmluZSBVU0VfQU9NQVAiOiIiLG4uZW1pc3NpdmVNYXA/IiNkZWZpbmUgVVNFX0VNSVNTSVZFTUFQIjoiIixuLmJ1bXBNYXA/IiNkZWZpbmUgVVNFX0JVTVBNQVAiOiIiLG4ubm9ybWFsTWFwPyIjZGVmaW5lIFVTRV9OT1JNQUxNQVAiOiIiLG4ubm9ybWFsTWFwJiZuLm9iamVjdFNwYWNlTm9ybWFsTWFwPyIjZGVmaW5lIE9CSkVDVFNQQUNFX05PUk1BTE1BUCI6IiIsbi5ub3JtYWxNYXAmJm4udGFuZ2VudFNwYWNlTm9ybWFsTWFwPyIjZGVmaW5lIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAiOiIiLG4uY2xlYXJjb2F0TWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRNQVAiOiIiLG4uY2xlYXJjb2F0Um91Z2huZXNzTWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRfUk9VR0hORVNTTUFQIjoiIixuLmNsZWFyY29hdE5vcm1hbE1hcD8iI2RlZmluZSBVU0VfQ0xFQVJDT0FUX05PUk1BTE1BUCI6IiIsbi5zcGVjdWxhck1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJNQVAiOiIiLG4ucm91Z2huZXNzTWFwPyIjZGVmaW5lIFVTRV9ST1VHSE5FU1NNQVAiOiIiLG4ubWV0YWxuZXNzTWFwPyIjZGVmaW5lIFVTRV9NRVRBTE5FU1NNQVAiOiIiLG4uYWxwaGFNYXA/IiNkZWZpbmUgVVNFX0FMUEhBTUFQIjoiIixuLnNoZWVuPyIjZGVmaW5lIFVTRV9TSEVFTiI6IiIsbi50cmFuc21pc3Npb25NYXA/IiNkZWZpbmUgVVNFX1RSQU5TTUlTU0lPTk1BUCI6IiIsbi52ZXJ0ZXhUYW5nZW50cz8iI2RlZmluZSBVU0VfVEFOR0VOVCI6IiIsbi52ZXJ0ZXhDb2xvcnN8fG4uaW5zdGFuY2luZ0NvbG9yPyIjZGVmaW5lIFVTRV9DT0xPUiI6IiIsbi52ZXJ0ZXhVdnM/IiNkZWZpbmUgVVNFX1VWIjoiIixuLnV2c1ZlcnRleE9ubHk/IiNkZWZpbmUgVVZTX1ZFUlRFWF9PTkxZIjoiIixuLmdyYWRpZW50TWFwPyIjZGVmaW5lIFVTRV9HUkFESUVOVE1BUCI6IiIsbi5mbGF0U2hhZGluZz8iI2RlZmluZSBGTEFUX1NIQURFRCI6IiIsbi5kb3VibGVTaWRlZD8iI2RlZmluZSBET1VCTEVfU0lERUQiOiIiLG4uZmxpcFNpZGVkPyIjZGVmaW5lIEZMSVBfU0lERUQiOiIiLG4uc2hhZG93TWFwRW5hYmxlZD8iI2RlZmluZSBVU0VfU0hBRE9XTUFQIjoiIixuLnNoYWRvd01hcEVuYWJsZWQ/IiNkZWZpbmUgIitsOiIiLG4ucHJlbXVsdGlwbGllZEFscGhhPyIjZGVmaW5lIFBSRU1VTFRJUExJRURfQUxQSEEiOiIiLG4ucGh5c2ljYWxseUNvcnJlY3RMaWdodHM/IiNkZWZpbmUgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUUyI6IiIsbi5sb2dhcml0aG1pY0RlcHRoQnVmZmVyPyIjZGVmaW5lIFVTRV9MT0dERVBUSEJVRiI6IiIsbi5sb2dhcml0aG1pY0RlcHRoQnVmZmVyJiZuLnJlbmRlcmVyRXh0ZW5zaW9uRnJhZ0RlcHRoPyIjZGVmaW5lIFVTRV9MT0dERVBUSEJVRl9FWFQiOiIiLChuLmV4dGVuc2lvblNoYWRlclRleHR1cmVMT0R8fG4uZW52TWFwKSYmbi5yZW5kZXJlckV4dGVuc2lvblNoYWRlclRleHR1cmVMb2Q/IiNkZWZpbmUgVEVYVFVSRV9MT0RfRVhUIjoiIiwidW5pZm9ybSBtYXQ0IHZpZXdNYXRyaXg7IiwidW5pZm9ybSB2ZWMzIGNhbWVyYVBvc2l0aW9uOyIsInVuaWZvcm0gYm9vbCBpc09ydGhvZ3JhcGhpYzsiLDAhPT1uLnRvbmVNYXBwaW5nPyIjZGVmaW5lIFRPTkVfTUFQUElORyI6IiIsMCE9PW4udG9uZU1hcHBpbmc/RUR0LnRvbmVtYXBwaW5nX3BhcnNfZnJhZ21lbnQ6IiIsMCE9PW4udG9uZU1hcHBpbmc/V0J0KCJ0b25lTWFwcGluZyIsbi50b25lTWFwcGluZyk6IiIsbi5kaXRoZXJpbmc/IiNkZWZpbmUgRElUSEVSSU5HIjoiIixFRHQuZW5jb2RpbmdzX3BhcnNfZnJhZ21lbnQsbi5tYXA/akJ0KCJtYXBUZXhlbFRvTGluZWFyIixuLm1hcEVuY29kaW5nKToiIixuLm1hdGNhcD9qQnQoIm1hdGNhcFRleGVsVG9MaW5lYXIiLG4ubWF0Y2FwRW5jb2RpbmcpOiIiLG4uZW52TWFwP2pCdCgiZW52TWFwVGV4ZWxUb0xpbmVhciIsbi5lbnZNYXBFbmNvZGluZyk6IiIsbi5lbWlzc2l2ZU1hcD9qQnQoImVtaXNzaXZlTWFwVGV4ZWxUb0xpbmVhciIsbi5lbWlzc2l2ZU1hcEVuY29kaW5nKToiIixuLmxpZ2h0TWFwP2pCdCgibGlnaHRNYXBUZXhlbFRvTGluZWFyIixuLmxpZ2h0TWFwRW5jb2RpbmcpOiIiLEdCdCgibGluZWFyVG9PdXRwdXRUZXhlbCIsbi5vdXRwdXRFbmNvZGluZyksbi5kZXB0aFBhY2tpbmc/IiNkZWZpbmUgREVQVEhfUEFDS0lORyAiK24uZGVwdGhQYWNraW5nOiIiLCJcbiJdLmZpbHRlcihxQnQpLmpvaW4oIlxuIikpLGE9S0J0KGEpLGE9WUJ0KGEsbiksYT1YQnQoYSxuKSxzPUtCdChzKSxzPVlCdChzLG4pLHM9WEJ0KHMsbiksYT10SHQoYSkscz10SHQocyksbi5pc1dlYkdMMiYmITAhPT1uLmlzUmF3U2hhZGVyTWF0ZXJpYWwmJihNPSIjdmVyc2lvbiAzMDAgZXNcbiIsdz1bIiNkZWZpbmUgYXR0cmlidXRlIGluIiwiI2RlZmluZSB2YXJ5aW5nIG91dCIsIiNkZWZpbmUgdGV4dHVyZTJEIHRleHR1cmUiXS5qb2luKCJcbiIpKyJcbiIrdyxTPVsiI2RlZmluZSB2YXJ5aW5nIGluIixuLmdsc2xWZXJzaW9uPT09UE90PyIiOiJvdXQgaGlnaHAgdmVjNCBwY19mcmFnQ29sb3I7IixuLmdsc2xWZXJzaW9uPT09UE90PyIiOiIjZGVmaW5lIGdsX0ZyYWdDb2xvciBwY19mcmFnQ29sb3IiLCIjZGVmaW5lIGdsX0ZyYWdEZXB0aEVYVCBnbF9GcmFnRGVwdGgiLCIjZGVmaW5lIHRleHR1cmUyRCB0ZXh0dXJlIiwiI2RlZmluZSB0ZXh0dXJlQ3ViZSB0ZXh0dXJlIiwiI2RlZmluZSB0ZXh0dXJlMkRQcm9qIHRleHR1cmVQcm9qIiwiI2RlZmluZSB0ZXh0dXJlMkRMb2RFWFQgdGV4dHVyZUxvZCIsIiNkZWZpbmUgdGV4dHVyZTJEUHJvakxvZEVYVCB0ZXh0dXJlUHJvakxvZCIsIiNkZWZpbmUgdGV4dHVyZUN1YmVMb2RFWFQgdGV4dHVyZUxvZCIsIiNkZWZpbmUgdGV4dHVyZTJER3JhZEVYVCB0ZXh0dXJlR3JhZCIsIiNkZWZpbmUgdGV4dHVyZTJEUHJvakdyYWRFWFQgdGV4dHVyZVByb2pHcmFkIiwiI2RlZmluZSB0ZXh0dXJlQ3ViZUdyYWRFWFQgdGV4dHVyZUdyYWQiXS5qb2luKCJcbiIpKyJcbiIrUyk7Y29uc3QgRT1NK1MrcyxUPUhCdChyLDM1NjMzLE0rdythKSxDPUhCdChyLDM1NjMyLEUpO2lmKHIuYXR0YWNoU2hhZGVyKHgsVCksci5hdHRhY2hTaGFkZXIoeCxDKSx2b2lkIDAhPT1uLmluZGV4MEF0dHJpYnV0ZU5hbWU/ci5iaW5kQXR0cmliTG9jYXRpb24oeCwwLG4uaW5kZXgwQXR0cmlidXRlTmFtZSk6ITA9PT1uLm1vcnBoVGFyZ2V0cyYmci5iaW5kQXR0cmliTG9jYXRpb24oeCwwLCJwb3NpdGlvbiIpLHIubGlua1Byb2dyYW0oeCksdC5kZWJ1Zy5jaGVja1NoYWRlckVycm9ycyl7Y29uc3QgdD1yLmdldFByb2dyYW1JbmZvTG9nKHgpLnRyaW0oKSxlPXIuZ2V0U2hhZGVySW5mb0xvZyhUKS50cmltKCksbj1yLmdldFNoYWRlckluZm9Mb2coQykudHJpbSgpO2xldCBpPSEwLG89ITA7aWYoITE9PT1yLmdldFByb2dyYW1QYXJhbWV0ZXIoeCwzNTcxNCkpe2k9ITE7Y29uc3QgZT1VQnQocixULCJ2ZXJ0ZXgiKSxuPVVCdChyLEMsImZyYWdtZW50Iik7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xQcm9ncmFtOiBzaGFkZXIgZXJyb3I6ICIsci5nZXRFcnJvcigpLCIzNTcxNSIsci5nZXRQcm9ncmFtUGFyYW1ldGVyKHgsMzU3MTUpLCJnbC5nZXRQcm9ncmFtSW5mb0xvZyIsdCxlLG4pfWVsc2UiIiE9PXQ/Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW06IGdsLmdldFByb2dyYW1JbmZvTG9nKCkiLHQpOiIiIT09ZSYmIiIhPT1ufHwobz0hMSk7byYmKHRoaXMuZGlhZ25vc3RpY3M9e3J1bm5hYmxlOmkscHJvZ3JhbUxvZzp0LHZlcnRleFNoYWRlcjp7bG9nOmUscHJlZml4Ond9LGZyYWdtZW50U2hhZGVyOntsb2c6bixwcmVmaXg6U319KX1sZXQgQSxrO3JldHVybiByLmRlbGV0ZVNoYWRlcihUKSxyLmRlbGV0ZVNoYWRlcihDKSx0aGlzLmdldFVuaWZvcm1zPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PUEmJihBPW5ldyBCQnQocix4KSksQX0sdGhpcy5nZXRBdHRyaWJ1dGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PWsmJihrPShmdW5jdGlvbiB0KGUsbil7Y29uc3QgaT17fSxyPWUuZ2V0UHJvZ3JhbVBhcmFtZXRlcihuLDM1NzIxKTtmb3IobGV0IHQ9MDt0PHI7dCsrKXtjb25zdCByPWUuZ2V0QWN0aXZlQXR0cmliKG4sdCkubmFtZTtpW3JdPWUuZ2V0QXR0cmliTG9jYXRpb24obixyKX1yZXR1cm4gaX0pKHIseCkpLGt9LHRoaXMuZGVzdHJveT1mdW5jdGlvbigpe2kucmVsZWFzZVN0YXRlc09mUHJvZ3JhbSh0aGlzKSxyLmRlbGV0ZVByb2dyYW0oeCksdGhpcy5wcm9ncmFtPXZvaWQgMH0sdGhpcy5uYW1lPW4uc2hhZGVyTmFtZSx0aGlzLmlkPUZCdCsrLHRoaXMuY2FjaGVLZXk9ZSx0aGlzLnVzZWRUaW1lcz0xLHRoaXMucHJvZ3JhbT14LHRoaXMudmVydGV4U2hhZGVyPVQsdGhpcy5mcmFnbWVudFNoYWRlcj1DLHRoaXN9ZnVuY3Rpb24gb0h0KHQsZSxuLGkscixvKXtjb25zdCBhPVtdLHM9aS5pc1dlYkdMMixsPWkubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcixjPWkuZmxvYXRWZXJ0ZXhUZXh0dXJlcyx1PWkubWF4VmVydGV4VW5pZm9ybXMsaD1pLnZlcnRleFRleHR1cmVzO2xldCBkPWkucHJlY2lzaW9uO2NvbnN0IHA9e01lc2hEZXB0aE1hdGVyaWFsOiJkZXB0aCIsTWVzaERpc3RhbmNlTWF0ZXJpYWw6ImRpc3RhbmNlUkdCQSIsTWVzaE5vcm1hbE1hdGVyaWFsOiJub3JtYWwiLE1lc2hCYXNpY01hdGVyaWFsOiJiYXNpYyIsTWVzaExhbWJlcnRNYXRlcmlhbDoibGFtYmVydCIsTWVzaFBob25nTWF0ZXJpYWw6InBob25nIixNZXNoVG9vbk1hdGVyaWFsOiJ0b29uIixNZXNoU3RhbmRhcmRNYXRlcmlhbDoicGh5c2ljYWwiLE1lc2hQaHlzaWNhbE1hdGVyaWFsOiJwaHlzaWNhbCIsTWVzaE1hdGNhcE1hdGVyaWFsOiJtYXRjYXAiLExpbmVCYXNpY01hdGVyaWFsOiJiYXNpYyIsTGluZURhc2hlZE1hdGVyaWFsOiJkYXNoZWQiLFBvaW50c01hdGVyaWFsOiJwb2ludHMiLFNoYWRvd01hdGVyaWFsOiJzaGFkb3ciLFNwcml0ZU1hdGVyaWFsOiJzcHJpdGUifSxmPVsicHJlY2lzaW9uIiwiaXNXZWJHTDIiLCJzdXBwb3J0c1ZlcnRleFRleHR1cmVzIiwib3V0cHV0RW5jb2RpbmciLCJpbnN0YW5jaW5nIiwiaW5zdGFuY2luZ0NvbG9yIiwibWFwIiwibWFwRW5jb2RpbmciLCJtYXRjYXAiLCJtYXRjYXBFbmNvZGluZyIsImVudk1hcCIsImVudk1hcE1vZGUiLCJlbnZNYXBFbmNvZGluZyIsImVudk1hcEN1YmVVViIsImxpZ2h0TWFwIiwibGlnaHRNYXBFbmNvZGluZyIsImFvTWFwIiwiZW1pc3NpdmVNYXAiLCJlbWlzc2l2ZU1hcEVuY29kaW5nIiwiYnVtcE1hcCIsIm5vcm1hbE1hcCIsIm9iamVjdFNwYWNlTm9ybWFsTWFwIiwidGFuZ2VudFNwYWNlTm9ybWFsTWFwIiwiY2xlYXJjb2F0TWFwIiwiY2xlYXJjb2F0Um91Z2huZXNzTWFwIiwiY2xlYXJjb2F0Tm9ybWFsTWFwIiwiZGlzcGxhY2VtZW50TWFwIiwic3BlY3VsYXJNYXAiLCJyb3VnaG5lc3NNYXAiLCJtZXRhbG5lc3NNYXAiLCJncmFkaWVudE1hcCIsImFscGhhTWFwIiwiY29tYmluZSIsInZlcnRleENvbG9ycyIsInZlcnRleFRhbmdlbnRzIiwidmVydGV4VXZzIiwidXZzVmVydGV4T25seSIsImZvZyIsInVzZUZvZyIsImZvZ0V4cDIiLCJmbGF0U2hhZGluZyIsInNpemVBdHRlbnVhdGlvbiIsImxvZ2FyaXRobWljRGVwdGhCdWZmZXIiLCJza2lubmluZyIsIm1heEJvbmVzIiwidXNlVmVydGV4VGV4dHVyZSIsIm1vcnBoVGFyZ2V0cyIsIm1vcnBoTm9ybWFscyIsIm1heE1vcnBoVGFyZ2V0cyIsIm1heE1vcnBoTm9ybWFscyIsInByZW11bHRpcGxpZWRBbHBoYSIsIm51bURpckxpZ2h0cyIsIm51bVBvaW50TGlnaHRzIiwibnVtU3BvdExpZ2h0cyIsIm51bUhlbWlMaWdodHMiLCJudW1SZWN0QXJlYUxpZ2h0cyIsIm51bURpckxpZ2h0U2hhZG93cyIsIm51bVBvaW50TGlnaHRTaGFkb3dzIiwibnVtU3BvdExpZ2h0U2hhZG93cyIsInNoYWRvd01hcEVuYWJsZWQiLCJzaGFkb3dNYXBUeXBlIiwidG9uZU1hcHBpbmciLCJwaHlzaWNhbGx5Q29ycmVjdExpZ2h0cyIsImFscGhhVGVzdCIsImRvdWJsZVNpZGVkIiwiZmxpcFNpZGVkIiwibnVtQ2xpcHBpbmdQbGFuZXMiLCJudW1DbGlwSW50ZXJzZWN0aW9uIiwiZGVwdGhQYWNraW5nIiwiZGl0aGVyaW5nIiwic2hlZW4iLCJ0cmFuc21pc3Npb25NYXAiXTtmdW5jdGlvbiBtKHQpe2xldCBlO3JldHVybiB0JiZ0LmlzVGV4dHVyZT9lPXQuZW5jb2Rpbmc6dCYmdC5pc1dlYkdMUmVuZGVyVGFyZ2V0Pyhjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUHJvZ3JhbXMuZ2V0VGV4dHVyZUVuY29kaW5nRnJvbU1hcDogZG9uJ3QgdXNlIHJlbmRlciB0YXJnZXRzIGFzIHRleHR1cmVzLiBVc2UgdGhlaXIgLnRleHR1cmUgcHJvcGVydHkgaW5zdGVhZC4iKSxlPXQudGV4dHVyZS5lbmNvZGluZyk6ZT14T3QsZX1yZXR1cm57Z2V0UGFyYW1ldGVyczpmdW5jdGlvbiBnKHIsYSxmLF8seSl7Y29uc3Qgdj1fLmZvZyxiPWUuZ2V0KHIuZW52TWFwfHwoci5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP18uZW52aXJvbm1lbnQ6bnVsbCkpLHg9cFtyLnR5cGVdLHc9eS5pc1NraW5uZWRNZXNoPyhmdW5jdGlvbiBTKHQpe2NvbnN0IGU9dC5za2VsZXRvbi5ib25lcztpZihjKXJldHVybiAxMDI0O3tjb25zdCB0PU1hdGguZmxvb3IoKHUtMjApLzQpLG49TWF0aC5taW4odCxlLmxlbmd0aCk7cmV0dXJuIG48ZS5sZW5ndGg/KGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogU2tlbGV0b24gaGFzICIrZS5sZW5ndGgrIiBib25lcy4gVGhpcyBHUFUgc3VwcG9ydHMgIituKyIuIiksMCk6bn19KSh5KTowO2xldCBNLEU7aWYobnVsbCE9PXIucHJlY2lzaW9uJiYoZD1pLmdldE1heFByZWNpc2lvbihyLnByZWNpc2lvbiksZCE9PXIucHJlY2lzaW9uJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUHJvZ3JhbS5nZXRQYXJhbWV0ZXJzOiIsci5wcmVjaXNpb24sIm5vdCBzdXBwb3J0ZWQsIHVzaW5nIixkLCJpbnN0ZWFkLiIpKSx4KXtjb25zdCB0PUNEdFt4XTtNPXQudmVydGV4U2hhZGVyLEU9dC5mcmFnbWVudFNoYWRlcn1lbHNlIE09ci52ZXJ0ZXhTaGFkZXIsRT1yLmZyYWdtZW50U2hhZGVyO2NvbnN0IFQ9dC5nZXRSZW5kZXJUYXJnZXQoKTtyZXR1cm57aXNXZWJHTDI6cyxzaGFkZXJJRDp4LHNoYWRlck5hbWU6ci50eXBlLHZlcnRleFNoYWRlcjpNLGZyYWdtZW50U2hhZGVyOkUsZGVmaW5lczpyLmRlZmluZXMsaXNSYXdTaGFkZXJNYXRlcmlhbDohMD09PXIuaXNSYXdTaGFkZXJNYXRlcmlhbCxnbHNsVmVyc2lvbjpyLmdsc2xWZXJzaW9uLHByZWNpc2lvbjpkLGluc3RhbmNpbmc6ITA9PT15LmlzSW5zdGFuY2VkTWVzaCxpbnN0YW5jaW5nQ29sb3I6ITA9PT15LmlzSW5zdGFuY2VkTWVzaCYmbnVsbCE9PXkuaW5zdGFuY2VDb2xvcixzdXBwb3J0c1ZlcnRleFRleHR1cmVzOmgsb3V0cHV0RW5jb2Rpbmc6bnVsbCE9PVQ/bShULnRleHR1cmUpOnQub3V0cHV0RW5jb2RpbmcsbWFwOiEhci5tYXAsbWFwRW5jb2Rpbmc6bShyLm1hcCksbWF0Y2FwOiEhci5tYXRjYXAsbWF0Y2FwRW5jb2Rpbmc6bShyLm1hdGNhcCksZW52TWFwOiEhYixlbnZNYXBNb2RlOmImJmIubWFwcGluZyxlbnZNYXBFbmNvZGluZzptKGIpLGVudk1hcEN1YmVVVjohIWImJihiLm1hcHBpbmc9PT16SXR8fGIubWFwcGluZz09PURJdCksbGlnaHRNYXA6ISFyLmxpZ2h0TWFwLGxpZ2h0TWFwRW5jb2Rpbmc6bShyLmxpZ2h0TWFwKSxhb01hcDohIXIuYW9NYXAsZW1pc3NpdmVNYXA6ISFyLmVtaXNzaXZlTWFwLGVtaXNzaXZlTWFwRW5jb2Rpbmc6bShyLmVtaXNzaXZlTWFwKSxidW1wTWFwOiEhci5idW1wTWFwLG5vcm1hbE1hcDohIXIubm9ybWFsTWFwLG9iamVjdFNwYWNlTm9ybWFsTWFwOjE9PT1yLm5vcm1hbE1hcFR5cGUsdGFuZ2VudFNwYWNlTm9ybWFsTWFwOjA9PT1yLm5vcm1hbE1hcFR5cGUsY2xlYXJjb2F0TWFwOiEhci5jbGVhcmNvYXRNYXAsY2xlYXJjb2F0Um91Z2huZXNzTWFwOiEhci5jbGVhcmNvYXRSb3VnaG5lc3NNYXAsY2xlYXJjb2F0Tm9ybWFsTWFwOiEhci5jbGVhcmNvYXROb3JtYWxNYXAsZGlzcGxhY2VtZW50TWFwOiEhci5kaXNwbGFjZW1lbnRNYXAscm91Z2huZXNzTWFwOiEhci5yb3VnaG5lc3NNYXAsbWV0YWxuZXNzTWFwOiEhci5tZXRhbG5lc3NNYXAsc3BlY3VsYXJNYXA6ISFyLnNwZWN1bGFyTWFwLGFscGhhTWFwOiEhci5hbHBoYU1hcCxncmFkaWVudE1hcDohIXIuZ3JhZGllbnRNYXAsc2hlZW46ISFyLnNoZWVuLHRyYW5zbWlzc2lvbk1hcDohIXIudHJhbnNtaXNzaW9uTWFwLGNvbWJpbmU6ci5jb21iaW5lLHZlcnRleFRhbmdlbnRzOnIubm9ybWFsTWFwJiZyLnZlcnRleFRhbmdlbnRzLHZlcnRleENvbG9yczpyLnZlcnRleENvbG9ycyx2ZXJ0ZXhVdnM6ISEoci5tYXB8fHIuYnVtcE1hcHx8ci5ub3JtYWxNYXB8fHIuc3BlY3VsYXJNYXB8fHIuYWxwaGFNYXB8fHIuZW1pc3NpdmVNYXB8fHIucm91Z2huZXNzTWFwfHxyLm1ldGFsbmVzc01hcHx8ci5jbGVhcmNvYXRNYXB8fHIuY2xlYXJjb2F0Um91Z2huZXNzTWFwfHxyLmNsZWFyY29hdE5vcm1hbE1hcHx8ci5kaXNwbGFjZW1lbnRNYXB8fHIudHJhbnNtaXNzaW9uTWFwKSx1dnNWZXJ0ZXhPbmx5OiEoci5tYXB8fHIuYnVtcE1hcHx8ci5ub3JtYWxNYXB8fHIuc3BlY3VsYXJNYXB8fHIuYWxwaGFNYXB8fHIuZW1pc3NpdmVNYXB8fHIucm91Z2huZXNzTWFwfHxyLm1ldGFsbmVzc01hcHx8ci5jbGVhcmNvYXROb3JtYWxNYXB8fHIudHJhbnNtaXNzaW9uTWFwfHwhci5kaXNwbGFjZW1lbnRNYXApLGZvZzohIXYsdXNlRm9nOnIuZm9nLGZvZ0V4cDI6diYmdi5pc0ZvZ0V4cDIsZmxhdFNoYWRpbmc6ci5mbGF0U2hhZGluZyxzaXplQXR0ZW51YXRpb246ci5zaXplQXR0ZW51YXRpb24sbG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcjpsLHNraW5uaW5nOnIuc2tpbm5pbmcmJnc+MCxtYXhCb25lczp3LHVzZVZlcnRleFRleHR1cmU6Yyxtb3JwaFRhcmdldHM6ci5tb3JwaFRhcmdldHMsbW9ycGhOb3JtYWxzOnIubW9ycGhOb3JtYWxzLG1heE1vcnBoVGFyZ2V0czp0Lm1heE1vcnBoVGFyZ2V0cyxtYXhNb3JwaE5vcm1hbHM6dC5tYXhNb3JwaE5vcm1hbHMsbnVtRGlyTGlnaHRzOmEuZGlyZWN0aW9uYWwubGVuZ3RoLG51bVBvaW50TGlnaHRzOmEucG9pbnQubGVuZ3RoLG51bVNwb3RMaWdodHM6YS5zcG90Lmxlbmd0aCxudW1SZWN0QXJlYUxpZ2h0czphLnJlY3RBcmVhLmxlbmd0aCxudW1IZW1pTGlnaHRzOmEuaGVtaS5sZW5ndGgsbnVtRGlyTGlnaHRTaGFkb3dzOmEuZGlyZWN0aW9uYWxTaGFkb3dNYXAubGVuZ3RoLG51bVBvaW50TGlnaHRTaGFkb3dzOmEucG9pbnRTaGFkb3dNYXAubGVuZ3RoLG51bVNwb3RMaWdodFNoYWRvd3M6YS5zcG90U2hhZG93TWFwLmxlbmd0aCxudW1DbGlwcGluZ1BsYW5lczpvLm51bVBsYW5lcyxudW1DbGlwSW50ZXJzZWN0aW9uOm8ubnVtSW50ZXJzZWN0aW9uLGRpdGhlcmluZzpyLmRpdGhlcmluZyxzaGFkb3dNYXBFbmFibGVkOnQuc2hhZG93TWFwLmVuYWJsZWQmJmYubGVuZ3RoPjAsc2hhZG93TWFwVHlwZTp0LnNoYWRvd01hcC50eXBlLHRvbmVNYXBwaW5nOnIudG9uZU1hcHBlZD90LnRvbmVNYXBwaW5nOjAscGh5c2ljYWxseUNvcnJlY3RMaWdodHM6dC5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cyxwcmVtdWx0aXBsaWVkQWxwaGE6ci5wcmVtdWx0aXBsaWVkQWxwaGEsYWxwaGFUZXN0OnIuYWxwaGFUZXN0LGRvdWJsZVNpZGVkOjI9PT1yLnNpZGUsZmxpcFNpZGVkOjE9PT1yLnNpZGUsZGVwdGhQYWNraW5nOnZvaWQgMCE9PXIuZGVwdGhQYWNraW5nJiZyLmRlcHRoUGFja2luZyxpbmRleDBBdHRyaWJ1dGVOYW1lOnIuaW5kZXgwQXR0cmlidXRlTmFtZSxleHRlbnNpb25EZXJpdmF0aXZlczpyLmV4dGVuc2lvbnMmJnIuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlcyxleHRlbnNpb25GcmFnRGVwdGg6ci5leHRlbnNpb25zJiZyLmV4dGVuc2lvbnMuZnJhZ0RlcHRoLGV4dGVuc2lvbkRyYXdCdWZmZXJzOnIuZXh0ZW5zaW9ucyYmci5leHRlbnNpb25zLmRyYXdCdWZmZXJzLGV4dGVuc2lvblNoYWRlclRleHR1cmVMT0Q6ci5leHRlbnNpb25zJiZyLmV4dGVuc2lvbnMuc2hhZGVyVGV4dHVyZUxPRCxyZW5kZXJlckV4dGVuc2lvbkZyYWdEZXB0aDpzfHxuLmhhcygiRVhUX2ZyYWdfZGVwdGgiKSxyZW5kZXJlckV4dGVuc2lvbkRyYXdCdWZmZXJzOnN8fG4uaGFzKCJXRUJHTF9kcmF3X2J1ZmZlcnMiKSxyZW5kZXJlckV4dGVuc2lvblNoYWRlclRleHR1cmVMb2Q6c3x8bi5oYXMoIkVYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKSxjdXN0b21Qcm9ncmFtQ2FjaGVLZXk6ci5jdXN0b21Qcm9ncmFtQ2FjaGVLZXkoKX19LGdldFByb2dyYW1DYWNoZUtleTpmdW5jdGlvbiBfKGUpe2NvbnN0IG49W107aWYoZS5zaGFkZXJJRD9uLnB1c2goZS5zaGFkZXJJRCk6KG4ucHVzaChlLmZyYWdtZW50U2hhZGVyKSxuLnB1c2goZS52ZXJ0ZXhTaGFkZXIpKSx2b2lkIDAhPT1lLmRlZmluZXMpZm9yKGNvbnN0IHQgaW4gZS5kZWZpbmVzKW4ucHVzaCh0KSxuLnB1c2goZS5kZWZpbmVzW3RdKTtpZighMT09PWUuaXNSYXdTaGFkZXJNYXRlcmlhbCl7Zm9yKGxldCB0PTA7dDxmLmxlbmd0aDt0Kyspbi5wdXNoKGVbZlt0XV0pO24ucHVzaCh0Lm91dHB1dEVuY29kaW5nKSxuLnB1c2godC5nYW1tYUZhY3Rvcil9cmV0dXJuIG4ucHVzaChlLmN1c3RvbVByb2dyYW1DYWNoZUtleSksbi5qb2luKCl9LGdldFVuaWZvcm1zOmZ1bmN0aW9uIHkodCl7Y29uc3QgZT1wW3QudHlwZV07bGV0IG47cmV0dXJuIG49ZT91RHQuY2xvbmUoQ0R0W2VdLnVuaWZvcm1zKTp0LnVuaWZvcm1zLG59LGFjcXVpcmVQcm9ncmFtOmZ1bmN0aW9uIHYoZSxuKXtsZXQgaTtmb3IobGV0IHQ9MCxlPWEubGVuZ3RoO3Q8ZTt0Kyspe2NvbnN0IGU9YVt0XTtpZihlLmNhY2hlS2V5PT09bil7aT1lLCsraS51c2VkVGltZXM7YnJlYWt9fXJldHVybiB2b2lkIDA9PT1pJiYoaT1uZXcgckh0KHQsbixlLHIpLGEucHVzaChpKSksaX0scmVsZWFzZVByb2dyYW06ZnVuY3Rpb24gYih0KXtpZigwPT0tLXQudXNlZFRpbWVzKXtjb25zdCBlPWEuaW5kZXhPZih0KTthW2VdPWFbYS5sZW5ndGgtMV0sYS5wb3AoKSx0LmRlc3Ryb3koKX19LHByb2dyYW1zOmF9fWZ1bmN0aW9uIGFIdCgpe2xldCB0PW5ldyBXZWFrTWFwO3JldHVybntnZXQ6ZnVuY3Rpb24gZShuKXtsZXQgaT10LmdldChuKTtyZXR1cm4gdm9pZCAwPT09aSYmKGk9e30sdC5zZXQobixpKSksaX0scmVtb3ZlOmZ1bmN0aW9uIG4oZSl7dC5kZWxldGUoZSl9LHVwZGF0ZTpmdW5jdGlvbiBpKGUsbixyKXt0LmdldChlKVtuXT1yfSxkaXNwb3NlOmZ1bmN0aW9uIHIoKXt0PW5ldyBXZWFrTWFwfX19ZnVuY3Rpb24gc0h0KHQsZSl7cmV0dXJuIHQuZ3JvdXBPcmRlciE9PWUuZ3JvdXBPcmRlcj90Lmdyb3VwT3JkZXItZS5ncm91cE9yZGVyOnQucmVuZGVyT3JkZXIhPT1lLnJlbmRlck9yZGVyP3QucmVuZGVyT3JkZXItZS5yZW5kZXJPcmRlcjp0LnByb2dyYW0hPT1lLnByb2dyYW0/dC5wcm9ncmFtLmlkLWUucHJvZ3JhbS5pZDp0Lm1hdGVyaWFsLmlkIT09ZS5tYXRlcmlhbC5pZD90Lm1hdGVyaWFsLmlkLWUubWF0ZXJpYWwuaWQ6dC56IT09ZS56P3Quei1lLno6dC5pZC1lLmlkfWZ1bmN0aW9uIGxIdCh0LGUpe3JldHVybiB0Lmdyb3VwT3JkZXIhPT1lLmdyb3VwT3JkZXI/dC5ncm91cE9yZGVyLWUuZ3JvdXBPcmRlcjp0LnJlbmRlck9yZGVyIT09ZS5yZW5kZXJPcmRlcj90LnJlbmRlck9yZGVyLWUucmVuZGVyT3JkZXI6dC56IT09ZS56P2Uuei10Lno6dC5pZC1lLmlkfWZ1bmN0aW9uIGNIdCh0KXtjb25zdCBlPVtdO2xldCBuPTA7Y29uc3QgaT1bXSxyPVtdLG89e2lkOi0xfTtmdW5jdGlvbiBhKGkscixhLHMsbCxjKXtsZXQgdT1lW25dO2NvbnN0IGg9dC5nZXQoYSk7cmV0dXJuIHZvaWQgMD09PXU/KHU9e2lkOmkuaWQsb2JqZWN0OmksZ2VvbWV0cnk6cixtYXRlcmlhbDphLHByb2dyYW06aC5wcm9ncmFtfHxvLGdyb3VwT3JkZXI6cyxyZW5kZXJPcmRlcjppLnJlbmRlck9yZGVyLHo6bCxncm91cDpjfSxlW25dPXUpOih1LmlkPWkuaWQsdS5vYmplY3Q9aSx1Lmdlb21ldHJ5PXIsdS5tYXRlcmlhbD1hLHUucHJvZ3JhbT1oLnByb2dyYW18fG8sdS5ncm91cE9yZGVyPXMsdS5yZW5kZXJPcmRlcj1pLnJlbmRlck9yZGVyLHUuej1sLHUuZ3JvdXA9YyksbisrLHV9cmV0dXJue29wYXF1ZTppLHRyYW5zcGFyZW50OnIsaW5pdDpmdW5jdGlvbiBzKCl7bj0wLGkubGVuZ3RoPTAsci5sZW5ndGg9MH0scHVzaDpmdW5jdGlvbiBsKHQsZSxuLG8scyxjKXtjb25zdCB1PWEodCxlLG4sbyxzLGMpOyghMD09PW4udHJhbnNwYXJlbnQ/cjppKS5wdXNoKHUpfSx1bnNoaWZ0OmZ1bmN0aW9uIGModCxlLG4sbyxzLGwpe2NvbnN0IGM9YSh0LGUsbixvLHMsbCk7KCEwPT09bi50cmFuc3BhcmVudD9yOmkpLnVuc2hpZnQoYyl9LGZpbmlzaDpmdW5jdGlvbiB1KCl7Zm9yKGxldCB0PW4saT1lLmxlbmd0aDt0PGk7dCsrKXtjb25zdCBuPWVbdF07aWYobnVsbD09PW4uaWQpYnJlYWs7bi5pZD1udWxsLG4ub2JqZWN0PW51bGwsbi5nZW9tZXRyeT1udWxsLG4ubWF0ZXJpYWw9bnVsbCxuLnByb2dyYW09bnVsbCxuLmdyb3VwPW51bGx9fSxzb3J0OmZ1bmN0aW9uIGgodCxlKXtpLmxlbmd0aD4xJiZpLnNvcnQodHx8c0h0KSxyLmxlbmd0aD4xJiZyLnNvcnQoZXx8bEh0KX19fWZ1bmN0aW9uIHVIdCh0KXtsZXQgZT1uZXcgV2Vha01hcDtyZXR1cm57Z2V0OmZ1bmN0aW9uIG4oaSxyKXtjb25zdCBvPWUuZ2V0KGkpO2xldCBhO3JldHVybiB2b2lkIDA9PT1vPyhhPW5ldyBjSHQodCksZS5zZXQoaSxuZXcgV2Vha01hcCksZS5nZXQoaSkuc2V0KHIsYSkpOihhPW8uZ2V0KHIpLHZvaWQgMD09PWEmJihhPW5ldyBjSHQodCksby5zZXQocixhKSkpLGF9LGRpc3Bvc2U6ZnVuY3Rpb24gaSgpe2U9bmV3IFdlYWtNYXB9fX1mdW5jdGlvbiBoSHQoKXtjb25zdCB0PXt9O3JldHVybntnZXQ6ZnVuY3Rpb24oZSl7aWYodm9pZCAwIT09dFtlLmlkXSlyZXR1cm4gdFtlLmlkXTtsZXQgbjtzd2l0Y2goZS50eXBlKXtjYXNlIkRpcmVjdGlvbmFsTGlnaHQiOm49e2RpcmVjdGlvbjpuZXcgcU90LGNvbG9yOm5ldyBwenR9O2JyZWFrO2Nhc2UiU3BvdExpZ2h0IjpuPXtwb3NpdGlvbjpuZXcgcU90LGRpcmVjdGlvbjpuZXcgcU90LGNvbG9yOm5ldyBwenQsZGlzdGFuY2U6MCxjb25lQ29zOjAscGVudW1icmFDb3M6MCxkZWNheTowfTticmVhaztjYXNlIlBvaW50TGlnaHQiOm49e3Bvc2l0aW9uOm5ldyBxT3QsY29sb3I6bmV3IHB6dCxkaXN0YW5jZTowLGRlY2F5OjB9O2JyZWFrO2Nhc2UiSGVtaXNwaGVyZUxpZ2h0IjpuPXtkaXJlY3Rpb246bmV3IHFPdCxza3lDb2xvcjpuZXcgcHp0LGdyb3VuZENvbG9yOm5ldyBwenR9O2JyZWFrO2Nhc2UiUmVjdEFyZWFMaWdodCI6bj17Y29sb3I6bmV3IHB6dCxwb3NpdGlvbjpuZXcgcU90LGhhbGZXaWR0aDpuZXcgcU90LGhhbGZIZWlnaHQ6bmV3IHFPdH19cmV0dXJuIHRbZS5pZF09bixufX19bGV0IGRIdD0wO2Z1bmN0aW9uIHBIdCh0LGUpe3JldHVybihlLmNhc3RTaGFkb3c/MTowKS0odC5jYXN0U2hhZG93PzE6MCl9ZnVuY3Rpb24gZkh0KHQsZSl7Y29uc3Qgbj1uZXcgaEh0LGk9KGZ1bmN0aW9uIHIoKXtjb25zdCB0PXt9O3JldHVybntnZXQ6ZnVuY3Rpb24oZSl7aWYodm9pZCAwIT09dFtlLmlkXSlyZXR1cm4gdFtlLmlkXTtsZXQgbjtzd2l0Y2goZS50eXBlKXtjYXNlIkRpcmVjdGlvbmFsTGlnaHQiOmNhc2UiU3BvdExpZ2h0IjpuPXtzaGFkb3dCaWFzOjAsc2hhZG93Tm9ybWFsQmlhczowLHNoYWRvd1JhZGl1czoxLHNoYWRvd01hcFNpemU6bmV3IHpPdH07YnJlYWs7Y2FzZSJQb2ludExpZ2h0IjpuPXtzaGFkb3dCaWFzOjAsc2hhZG93Tm9ybWFsQmlhczowLHNoYWRvd1JhZGl1czoxLHNoYWRvd01hcFNpemU6bmV3IHpPdCxzaGFkb3dDYW1lcmFOZWFyOjEsc2hhZG93Q2FtZXJhRmFyOjFlM319cmV0dXJuIHRbZS5pZF09bixufX19KSgpLG89e3ZlcnNpb246MCxoYXNoOntkaXJlY3Rpb25hbExlbmd0aDotMSxwb2ludExlbmd0aDotMSxzcG90TGVuZ3RoOi0xLHJlY3RBcmVhTGVuZ3RoOi0xLGhlbWlMZW5ndGg6LTEsbnVtRGlyZWN0aW9uYWxTaGFkb3dzOi0xLG51bVBvaW50U2hhZG93czotMSxudW1TcG90U2hhZG93czotMX0sYW1iaWVudDpbMCwwLDBdLHByb2JlOltdLGRpcmVjdGlvbmFsOltdLGRpcmVjdGlvbmFsU2hhZG93OltdLGRpcmVjdGlvbmFsU2hhZG93TWFwOltdLGRpcmVjdGlvbmFsU2hhZG93TWF0cml4OltdLHNwb3Q6W10sc3BvdFNoYWRvdzpbXSxzcG90U2hhZG93TWFwOltdLHNwb3RTaGFkb3dNYXRyaXg6W10scmVjdEFyZWE6W10scmVjdEFyZWFMVEMxOm51bGwscmVjdEFyZWFMVEMyOm51bGwscG9pbnQ6W10scG9pbnRTaGFkb3c6W10scG9pbnRTaGFkb3dNYXA6W10scG9pbnRTaGFkb3dNYXRyaXg6W10saGVtaTpbXX07Zm9yKGxldCB0PTA7dDw5O3QrKylvLnByb2JlLnB1c2gobmV3IHFPdCk7Y29uc3QgYT1uZXcgcU90LHM9bmV3IGJSdCxsPW5ldyBiUnQ7cmV0dXJue3NldHVwOmZ1bmN0aW9uIGMocil7bGV0IGE9MCxzPTAsbD0wO2ZvcihsZXQgdD0wO3Q8OTt0Kyspby5wcm9iZVt0XS5zZXQoMCwwLDApO2xldCBjPTAsdT0wLGg9MCxkPTAscD0wLGY9MCxtPTAsZz0wO3Iuc29ydChwSHQpO2ZvcihsZXQgdD0wLGU9ci5sZW5ndGg7dDxlO3QrKyl7Y29uc3QgZT1yW3RdLF89ZS5jb2xvcix5PWUuaW50ZW5zaXR5LHY9ZS5kaXN0YW5jZSxiPWUuc2hhZG93JiZlLnNoYWRvdy5tYXA/ZS5zaGFkb3cubWFwLnRleHR1cmU6bnVsbDtpZihlLmlzQW1iaWVudExpZ2h0KWErPV8ucip5LHMrPV8uZyp5LGwrPV8uYip5O2Vsc2UgaWYoZS5pc0xpZ2h0UHJvYmUpZm9yKGxldCB0PTA7dDw5O3QrKylvLnByb2JlW3RdLmFkZFNjYWxlZFZlY3RvcihlLnNoLmNvZWZmaWNpZW50c1t0XSx5KTtlbHNlIGlmKGUuaXNEaXJlY3Rpb25hbExpZ2h0KXtjb25zdCB0PW4uZ2V0KGUpO2lmKHQuY29sb3IuY29weShlLmNvbG9yKS5tdWx0aXBseVNjYWxhcihlLmludGVuc2l0eSksZS5jYXN0U2hhZG93KXtjb25zdCB0PWUuc2hhZG93LG49aS5nZXQoZSk7bi5zaGFkb3dCaWFzPXQuYmlhcyxuLnNoYWRvd05vcm1hbEJpYXM9dC5ub3JtYWxCaWFzLG4uc2hhZG93UmFkaXVzPXQucmFkaXVzLG4uc2hhZG93TWFwU2l6ZT10Lm1hcFNpemUsby5kaXJlY3Rpb25hbFNoYWRvd1tjXT1uLG8uZGlyZWN0aW9uYWxTaGFkb3dNYXBbY109YixvLmRpcmVjdGlvbmFsU2hhZG93TWF0cml4W2NdPWUuc2hhZG93Lm1hdHJpeCxmKyt9by5kaXJlY3Rpb25hbFtjXT10LGMrK31lbHNlIGlmKGUuaXNTcG90TGlnaHQpe2NvbnN0IHQ9bi5nZXQoZSk7aWYodC5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oZS5tYXRyaXhXb3JsZCksdC5jb2xvci5jb3B5KF8pLm11bHRpcGx5U2NhbGFyKHkpLHQuZGlzdGFuY2U9dix0LmNvbmVDb3M9TWF0aC5jb3MoZS5hbmdsZSksdC5wZW51bWJyYUNvcz1NYXRoLmNvcyhlLmFuZ2xlKigxLWUucGVudW1icmEpKSx0LmRlY2F5PWUuZGVjYXksZS5jYXN0U2hhZG93KXtjb25zdCB0PWUuc2hhZG93LG49aS5nZXQoZSk7bi5zaGFkb3dCaWFzPXQuYmlhcyxuLnNoYWRvd05vcm1hbEJpYXM9dC5ub3JtYWxCaWFzLG4uc2hhZG93UmFkaXVzPXQucmFkaXVzLG4uc2hhZG93TWFwU2l6ZT10Lm1hcFNpemUsby5zcG90U2hhZG93W2hdPW4sby5zcG90U2hhZG93TWFwW2hdPWIsby5zcG90U2hhZG93TWF0cml4W2hdPWUuc2hhZG93Lm1hdHJpeCxnKyt9by5zcG90W2hdPXQsaCsrfWVsc2UgaWYoZS5pc1JlY3RBcmVhTGlnaHQpe2NvbnN0IHQ9bi5nZXQoZSk7dC5jb2xvci5jb3B5KF8pLm11bHRpcGx5U2NhbGFyKHkpLHQuaGFsZldpZHRoLnNldCguNSplLndpZHRoLDAsMCksdC5oYWxmSGVpZ2h0LnNldCgwLC41KmUuaGVpZ2h0LDApLG8ucmVjdEFyZWFbZF09dCxkKyt9ZWxzZSBpZihlLmlzUG9pbnRMaWdodCl7Y29uc3QgdD1uLmdldChlKTtpZih0LmNvbG9yLmNvcHkoZS5jb2xvcikubXVsdGlwbHlTY2FsYXIoZS5pbnRlbnNpdHkpLHQuZGlzdGFuY2U9ZS5kaXN0YW5jZSx0LmRlY2F5PWUuZGVjYXksZS5jYXN0U2hhZG93KXtjb25zdCB0PWUuc2hhZG93LG49aS5nZXQoZSk7bi5zaGFkb3dCaWFzPXQuYmlhcyxuLnNoYWRvd05vcm1hbEJpYXM9dC5ub3JtYWxCaWFzLG4uc2hhZG93UmFkaXVzPXQucmFkaXVzLG4uc2hhZG93TWFwU2l6ZT10Lm1hcFNpemUsbi5zaGFkb3dDYW1lcmFOZWFyPXQuY2FtZXJhLm5lYXIsbi5zaGFkb3dDYW1lcmFGYXI9dC5jYW1lcmEuZmFyLG8ucG9pbnRTaGFkb3dbdV09bixvLnBvaW50U2hhZG93TWFwW3VdPWIsby5wb2ludFNoYWRvd01hdHJpeFt1XT1lLnNoYWRvdy5tYXRyaXgsbSsrfW8ucG9pbnRbdV09dCx1Kyt9ZWxzZSBpZihlLmlzSGVtaXNwaGVyZUxpZ2h0KXtjb25zdCB0PW4uZ2V0KGUpO3Quc2t5Q29sb3IuY29weShlLmNvbG9yKS5tdWx0aXBseVNjYWxhcih5KSx0Lmdyb3VuZENvbG9yLmNvcHkoZS5ncm91bmRDb2xvcikubXVsdGlwbHlTY2FsYXIoeSksby5oZW1pW3BdPXQscCsrfX1kPjAmJihlLmlzV2ViR0wyfHwhMD09PXQuaGFzKCJPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKT8oby5yZWN0QXJlYUxUQzE9VER0LkxUQ19GTE9BVF8xLG8ucmVjdEFyZWFMVEMyPVREdC5MVENfRkxPQVRfMik6ITA9PT10LmhhcygiT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIiKT8oby5yZWN0QXJlYUxUQzE9VER0LkxUQ19IQUxGXzEsby5yZWN0QXJlYUxUQzI9VER0LkxUQ19IQUxGXzIpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXI6IFVuYWJsZSB0byB1c2UgUmVjdEFyZWFMaWdodC4gTWlzc2luZyBXZWJHTCBleHRlbnNpb25zLiIpKSxvLmFtYmllbnRbMF09YSxvLmFtYmllbnRbMV09cyxvLmFtYmllbnRbMl09bDtjb25zdCBfPW8uaGFzaDtfLmRpcmVjdGlvbmFsTGVuZ3RoPT09YyYmXy5wb2ludExlbmd0aD09PXUmJl8uc3BvdExlbmd0aD09PWgmJl8ucmVjdEFyZWFMZW5ndGg9PT1kJiZfLmhlbWlMZW5ndGg9PT1wJiZfLm51bURpcmVjdGlvbmFsU2hhZG93cz09PWYmJl8ubnVtUG9pbnRTaGFkb3dzPT09bSYmXy5udW1TcG90U2hhZG93cz09PWd8fChvLmRpcmVjdGlvbmFsLmxlbmd0aD1jLG8uc3BvdC5sZW5ndGg9aCxvLnJlY3RBcmVhLmxlbmd0aD1kLG8ucG9pbnQubGVuZ3RoPXUsby5oZW1pLmxlbmd0aD1wLG8uZGlyZWN0aW9uYWxTaGFkb3cubGVuZ3RoPWYsby5kaXJlY3Rpb25hbFNoYWRvd01hcC5sZW5ndGg9ZixvLnBvaW50U2hhZG93Lmxlbmd0aD1tLG8ucG9pbnRTaGFkb3dNYXAubGVuZ3RoPW0sby5zcG90U2hhZG93Lmxlbmd0aD1nLG8uc3BvdFNoYWRvd01hcC5sZW5ndGg9ZyxvLmRpcmVjdGlvbmFsU2hhZG93TWF0cml4Lmxlbmd0aD1mLG8ucG9pbnRTaGFkb3dNYXRyaXgubGVuZ3RoPW0sby5zcG90U2hhZG93TWF0cml4Lmxlbmd0aD1nLF8uZGlyZWN0aW9uYWxMZW5ndGg9YyxfLnBvaW50TGVuZ3RoPXUsXy5zcG90TGVuZ3RoPWgsXy5yZWN0QXJlYUxlbmd0aD1kLF8uaGVtaUxlbmd0aD1wLF8ubnVtRGlyZWN0aW9uYWxTaGFkb3dzPWYsXy5udW1Qb2ludFNoYWRvd3M9bSxfLm51bVNwb3RTaGFkb3dzPWcsby52ZXJzaW9uPWRIdCsrKX0sc2V0dXBWaWV3OmZ1bmN0aW9uIHUodCxlKXtsZXQgbj0wLGk9MCxyPTAsYz0wLHU9MDtjb25zdCBoPWUubWF0cml4V29ybGRJbnZlcnNlO2ZvcihsZXQgZT0wLGQ9dC5sZW5ndGg7ZTxkO2UrKyl7Y29uc3QgZD10W2VdO2lmKGQuaXNEaXJlY3Rpb25hbExpZ2h0KXtjb25zdCB0PW8uZGlyZWN0aW9uYWxbbl07dC5kaXJlY3Rpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGQubWF0cml4V29ybGQpLGEuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGQudGFyZ2V0Lm1hdHJpeFdvcmxkKSx0LmRpcmVjdGlvbi5zdWIoYSksdC5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKGgpLG4rK31lbHNlIGlmKGQuaXNTcG90TGlnaHQpe2NvbnN0IHQ9by5zcG90W3JdO3QucG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGQubWF0cml4V29ybGQpLHQucG9zaXRpb24uYXBwbHlNYXRyaXg0KGgpLHQuZGlyZWN0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihkLm1hdHJpeFdvcmxkKSxhLnNldEZyb21NYXRyaXhQb3NpdGlvbihkLnRhcmdldC5tYXRyaXhXb3JsZCksdC5kaXJlY3Rpb24uc3ViKGEpLHQuZGlyZWN0aW9uLnRyYW5zZm9ybURpcmVjdGlvbihoKSxyKyt9ZWxzZSBpZihkLmlzUmVjdEFyZWFMaWdodCl7Y29uc3QgdD1vLnJlY3RBcmVhW2NdO3QucG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGQubWF0cml4V29ybGQpLHQucG9zaXRpb24uYXBwbHlNYXRyaXg0KGgpLGwuaWRlbnRpdHkoKSxzLmNvcHkoZC5tYXRyaXhXb3JsZCkscy5wcmVtdWx0aXBseShoKSxsLmV4dHJhY3RSb3RhdGlvbihzKSx0LmhhbGZXaWR0aC5zZXQoLjUqZC53aWR0aCwwLDApLHQuaGFsZkhlaWdodC5zZXQoMCwuNSpkLmhlaWdodCwwKSx0LmhhbGZXaWR0aC5hcHBseU1hdHJpeDQobCksdC5oYWxmSGVpZ2h0LmFwcGx5TWF0cml4NChsKSxjKyt9ZWxzZSBpZihkLmlzUG9pbnRMaWdodCl7Y29uc3QgdD1vLnBvaW50W2ldO3QucG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGQubWF0cml4V29ybGQpLHQucG9zaXRpb24uYXBwbHlNYXRyaXg0KGgpLGkrK31lbHNlIGlmKGQuaXNIZW1pc3BoZXJlTGlnaHQpe2NvbnN0IHQ9by5oZW1pW3VdO3QuZGlyZWN0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihkLm1hdHJpeFdvcmxkKSx0LmRpcmVjdGlvbi50cmFuc2Zvcm1EaXJlY3Rpb24oaCksdC5kaXJlY3Rpb24ubm9ybWFsaXplKCksdSsrfX19LHN0YXRlOm99fWZ1bmN0aW9uIG1IdCh0LGUpe2NvbnN0IG49bmV3IGZIdCh0LGUpLGk9W10scj1bXTtyZXR1cm57aW5pdDpmdW5jdGlvbiBvKCl7aS5sZW5ndGg9MCxyLmxlbmd0aD0wfSxzdGF0ZTp7bGlnaHRzQXJyYXk6aSxzaGFkb3dzQXJyYXk6cixsaWdodHM6bn0sc2V0dXBMaWdodHM6ZnVuY3Rpb24gYSgpe24uc2V0dXAoaSl9LHNldHVwTGlnaHRzVmlldzpmdW5jdGlvbiBzKHQpe24uc2V0dXBWaWV3KGksdCl9LHB1c2hMaWdodDpmdW5jdGlvbiBsKHQpe2kucHVzaCh0KX0scHVzaFNoYWRvdzpmdW5jdGlvbiBjKHQpe3IucHVzaCh0KX19fWZ1bmN0aW9uIGdIdCh0LGUpe2xldCBuPW5ldyBXZWFrTWFwO3JldHVybntnZXQ6ZnVuY3Rpb24gaShyLG89MCl7bGV0IGE7cmV0dXJuITE9PT1uLmhhcyhyKT8oYT1uZXcgbUh0KHQsZSksbi5zZXQocixbXSksbi5nZXQocikucHVzaChhKSk6bz49bi5nZXQocikubGVuZ3RoPyhhPW5ldyBtSHQodCxlKSxuLmdldChyKS5wdXNoKGEpKTphPW4uZ2V0KHIpW29dLGF9LGRpc3Bvc2U6ZnVuY3Rpb24gcigpe249bmV3IFdlYWtNYXB9fX1mdW5jdGlvbiBfSHQodCl7Z3p0LmNhbGwodGhpcyksdGhpcy50eXBlPSJNZXNoRGVwdGhNYXRlcmlhbCIsdGhpcy5kZXB0aFBhY2tpbmc9MzIwMCx0aGlzLnNraW5uaW5nPSExLHRoaXMubW9ycGhUYXJnZXRzPSExLHRoaXMubWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy5mb2c9ITEsdGhpcy5zZXRWYWx1ZXModCl9ZnVuY3Rpb24geUh0KHQpe2d6dC5jYWxsKHRoaXMpLHRoaXMudHlwZT0iTWVzaERpc3RhbmNlTWF0ZXJpYWwiLHRoaXMucmVmZXJlbmNlUG9zaXRpb249bmV3IHFPdCx0aGlzLm5lYXJEaXN0YW5jZT0xLHRoaXMuZmFyRGlzdGFuY2U9MWUzLHRoaXMuc2tpbm5pbmc9ITEsdGhpcy5tb3JwaFRhcmdldHM9ITEsdGhpcy5tYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy5mb2c9ITEsdGhpcy5zZXRWYWx1ZXModCl9ZnVuY3Rpb24gdkh0KHQsZSxuKXtsZXQgaT1uZXcgeER0O2NvbnN0IHI9bmV3IHpPdCxvPW5ldyB6T3QsYT1uZXcgak90LHM9W10sbD1bXSxjPXt9LHU9ezA6MSwxOjAsMjoyfSxoPW5ldyBoRHQoe2RlZmluZXM6e1NBTVBMRV9SQVRFOjIvOCxIQUxGX1NBTVBMRV9SQVRFOjEvOH0sdW5pZm9ybXM6e3NoYWRvd19wYXNzOnt2YWx1ZTpudWxsfSxyZXNvbHV0aW9uOnt2YWx1ZTpuZXcgek90fSxyYWRpdXM6e3ZhbHVlOjR9fSx2ZXJ0ZXhTaGFkZXI6InZvaWQgbWFpbigpIHtcblx0Z2xfUG9zaXRpb24gPSB2ZWM0KCBwb3NpdGlvbiwgMS4wICk7XG59IixmcmFnbWVudFNoYWRlcjoidW5pZm9ybSBzYW1wbGVyMkQgc2hhZG93X3Bhc3M7XG51bmlmb3JtIHZlYzIgcmVzb2x1dGlvbjtcbnVuaWZvcm0gZmxvYXQgcmFkaXVzO1xuI2luY2x1ZGUgPHBhY2tpbmc+XG52b2lkIG1haW4oKSB7XG5cdGZsb2F0IG1lYW4gPSAwLjA7XG5cdGZsb2F0IHNxdWFyZWRfbWVhbiA9IDAuMDtcblx0ZmxvYXQgZGVwdGggPSB1bnBhY2tSR0JBVG9EZXB0aCggdGV4dHVyZTJEKCBzaGFkb3dfcGFzcywgKCBnbF9GcmFnQ29vcmQueHkgKSAvIHJlc29sdXRpb24gKSApO1xuXHRmb3IgKCBmbG9hdCBpID0gLTEuMDsgaSA8IDEuMCA7IGkgKz0gU0FNUExFX1JBVEUpIHtcblx0XHQjaWZkZWYgSE9SSVpPTlRBTF9QQVNTXG5cdFx0XHR2ZWMyIGRpc3RyaWJ1dGlvbiA9IHVucGFja1JHQkFUbzJIYWxmKCB0ZXh0dXJlMkQoIHNoYWRvd19wYXNzLCAoIGdsX0ZyYWdDb29yZC54eSArIHZlYzIoIGksIDAuMCApICogcmFkaXVzICkgLyByZXNvbHV0aW9uICkgKTtcblx0XHRcdG1lYW4gKz0gZGlzdHJpYnV0aW9uLng7XG5cdFx0XHRzcXVhcmVkX21lYW4gKz0gZGlzdHJpYnV0aW9uLnkgKiBkaXN0cmlidXRpb24ueSArIGRpc3RyaWJ1dGlvbi54ICogZGlzdHJpYnV0aW9uLng7XG5cdFx0I2Vsc2Vcblx0XHRcdGZsb2F0IGRlcHRoID0gdW5wYWNrUkdCQVRvRGVwdGgoIHRleHR1cmUyRCggc2hhZG93X3Bhc3MsICggZ2xfRnJhZ0Nvb3JkLnh5ICsgdmVjMiggMC4wLCBpICkgKiByYWRpdXMgKSAvIHJlc29sdXRpb24gKSApO1xuXHRcdFx0bWVhbiArPSBkZXB0aDtcblx0XHRcdHNxdWFyZWRfbWVhbiArPSBkZXB0aCAqIGRlcHRoO1xuXHRcdCNlbmRpZlxuXHR9XG5cdG1lYW4gPSBtZWFuICogSEFMRl9TQU1QTEVfUkFURTtcblx0c3F1YXJlZF9tZWFuID0gc3F1YXJlZF9tZWFuICogSEFMRl9TQU1QTEVfUkFURTtcblx0ZmxvYXQgc3RkX2RldiA9IHNxcnQoIHNxdWFyZWRfbWVhbiAtIG1lYW4gKiBtZWFuICk7XG5cdGdsX0ZyYWdDb2xvciA9IHBhY2sySGFsZlRvUkdCQSggdmVjMiggbWVhbiwgc3RkX2RldiApICk7XG59In0pLGQ9aC5jbG9uZSgpO2QuZGVmaW5lcy5IT1JJWk9OVEFMX1BBU1M9MTtjb25zdCBwPW5ldyBWenQ7cC5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgYnp0KG5ldyBGbG9hdDMyQXJyYXkoWy0xLC0xLC41LDMsLTEsLjUsLTEsMywuNV0pLDMpKTtjb25zdCBmPW5ldyBvRHQocCxoKSxtPXRoaXM7ZnVuY3Rpb24gZyhuLGkpe2NvbnN0IHI9ZS51cGRhdGUoZik7aC51bmlmb3Jtcy5zaGFkb3dfcGFzcy52YWx1ZT1uLm1hcC50ZXh0dXJlLGgudW5pZm9ybXMucmVzb2x1dGlvbi52YWx1ZT1uLm1hcFNpemUsaC51bmlmb3Jtcy5yYWRpdXMudmFsdWU9bi5yYWRpdXMsdC5zZXRSZW5kZXJUYXJnZXQobi5tYXBQYXNzKSx0LmNsZWFyKCksdC5yZW5kZXJCdWZmZXJEaXJlY3QoaSxudWxsLHIsaCxmLG51bGwpLGQudW5pZm9ybXMuc2hhZG93X3Bhc3MudmFsdWU9bi5tYXBQYXNzLnRleHR1cmUsZC51bmlmb3Jtcy5yZXNvbHV0aW9uLnZhbHVlPW4ubWFwU2l6ZSxkLnVuaWZvcm1zLnJhZGl1cy52YWx1ZT1uLnJhZGl1cyx0LnNldFJlbmRlclRhcmdldChuLm1hcCksdC5jbGVhcigpLHQucmVuZGVyQnVmZmVyRGlyZWN0KGksbnVsbCxyLGQsZixudWxsKX1mdW5jdGlvbiBfKHQsZSxuKXtjb25zdCBpPXQ8PDB8ZTw8MXxuPDwyO2xldCByPXNbaV07cmV0dXJuIHZvaWQgMD09PXImJihyPW5ldyBfSHQoe2RlcHRoUGFja2luZzozMjAxLG1vcnBoVGFyZ2V0czp0LHNraW5uaW5nOmV9KSxzW2ldPXIpLHJ9ZnVuY3Rpb24geSh0LGUsbil7Y29uc3QgaT10PDwwfGU8PDF8bjw8MjtsZXQgcj1sW2ldO3JldHVybiB2b2lkIDA9PT1yJiYocj1uZXcgeUh0KHttb3JwaFRhcmdldHM6dCxza2lubmluZzplfSksbFtpXT1yKSxyfWZ1bmN0aW9uIHYoZSxuLGkscixvLGEscyl7bGV0IGw9bnVsbCxoPV8sZD1lLmN1c3RvbURlcHRoTWF0ZXJpYWw7aWYoITA9PT1yLmlzUG9pbnRMaWdodCYmKGg9eSxkPWUuY3VzdG9tRGlzdGFuY2VNYXRlcmlhbCksdm9pZCAwPT09ZCl7bGV0IHQ9ITE7ITA9PT1pLm1vcnBoVGFyZ2V0cyYmKHQ9bi5tb3JwaEF0dHJpYnV0ZXMmJm4ubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uJiZuLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbi5sZW5ndGg+MCk7bGV0IHI9ITE7ITA9PT1lLmlzU2tpbm5lZE1lc2gmJighMD09PWkuc2tpbm5pbmc/cj0hMDpjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMU2hhZG93TWFwOiBUSFJFRS5Ta2lubmVkTWVzaCB3aXRoIG1hdGVyaWFsLnNraW5uaW5nIHNldCB0byBmYWxzZToiLGUpKSxsPWgodCxyLCEwPT09ZS5pc0luc3RhbmNlZE1lc2gpfWVsc2UgbD1kO2lmKHQubG9jYWxDbGlwcGluZ0VuYWJsZWQmJiEwPT09aS5jbGlwU2hhZG93cyYmMCE9PWkuY2xpcHBpbmdQbGFuZXMubGVuZ3RoKXtjb25zdCB0PWwudXVpZCxlPWkudXVpZDtsZXQgbj1jW3RdO3ZvaWQgMD09PW4mJihuPXt9LGNbdF09bik7bGV0IHI9bltlXTt2b2lkIDA9PT1yJiYocj1sLmNsb25lKCksbltlXT1yKSxsPXJ9cmV0dXJuIGwudmlzaWJsZT1pLnZpc2libGUsbC53aXJlZnJhbWU9aS53aXJlZnJhbWUsbC5zaWRlPTM9PT1zP251bGwhPT1pLnNoYWRvd1NpZGU/aS5zaGFkb3dTaWRlOmkuc2lkZTpudWxsIT09aS5zaGFkb3dTaWRlP2kuc2hhZG93U2lkZTp1W2kuc2lkZV0sbC5jbGlwU2hhZG93cz1pLmNsaXBTaGFkb3dzLGwuY2xpcHBpbmdQbGFuZXM9aS5jbGlwcGluZ1BsYW5lcyxsLmNsaXBJbnRlcnNlY3Rpb249aS5jbGlwSW50ZXJzZWN0aW9uLGwud2lyZWZyYW1lTGluZXdpZHRoPWkud2lyZWZyYW1lTGluZXdpZHRoLGwubGluZXdpZHRoPWkubGluZXdpZHRoLCEwPT09ci5pc1BvaW50TGlnaHQmJiEwPT09bC5pc01lc2hEaXN0YW5jZU1hdGVyaWFsJiYobC5yZWZlcmVuY2VQb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oci5tYXRyaXhXb3JsZCksbC5uZWFyRGlzdGFuY2U9byxsLmZhckRpc3RhbmNlPWEpLGx9ZnVuY3Rpb24gYihuLHIsbyxhLHMpe2lmKCExPT09bi52aXNpYmxlKXJldHVybjtpZihuLmxheWVycy50ZXN0KHIubGF5ZXJzKSYmKG4uaXNNZXNofHxuLmlzTGluZXx8bi5pc1BvaW50cykmJihuLmNhc3RTaGFkb3d8fG4ucmVjZWl2ZVNoYWRvdyYmMz09PXMpJiYoIW4uZnJ1c3R1bUN1bGxlZHx8aS5pbnRlcnNlY3RzT2JqZWN0KG4pKSl7bi5tb2RlbFZpZXdNYXRyaXgubXVsdGlwbHlNYXRyaWNlcyhvLm1hdHJpeFdvcmxkSW52ZXJzZSxuLm1hdHJpeFdvcmxkKTtjb25zdCBpPWUudXBkYXRlKG4pLHI9bi5tYXRlcmlhbDtpZihBcnJheS5pc0FycmF5KHIpKXtjb25zdCBlPWkuZ3JvdXBzO2ZvcihsZXQgbD0wLGM9ZS5sZW5ndGg7bDxjO2wrKyl7Y29uc3QgYz1lW2xdLHU9cltjLm1hdGVyaWFsSW5kZXhdO2lmKHUmJnUudmlzaWJsZSl7Y29uc3QgZT12KG4saSx1LGEsby5uZWFyLG8uZmFyLHMpO3QucmVuZGVyQnVmZmVyRGlyZWN0KG8sbnVsbCxpLGUsbixjKX19fWVsc2UgaWYoci52aXNpYmxlKXtjb25zdCBlPXYobixpLHIsYSxvLm5lYXIsby5mYXIscyk7dC5yZW5kZXJCdWZmZXJEaXJlY3QobyxudWxsLGksZSxuLG51bGwpfX1jb25zdCBsPW4uY2hpbGRyZW47Zm9yKGxldCB0PTAsZT1sLmxlbmd0aDt0PGU7dCsrKWIobFt0XSxyLG8sYSxzKX10aGlzLmVuYWJsZWQ9ITEsdGhpcy5hdXRvVXBkYXRlPSEwLHRoaXMubmVlZHNVcGRhdGU9ITEsdGhpcy50eXBlPTEsdGhpcy5yZW5kZXI9ZnVuY3Rpb24oZSxzLGwpe2lmKCExPT09bS5lbmFibGVkKXJldHVybjtpZighMT09PW0uYXV0b1VwZGF0ZSYmITE9PT1tLm5lZWRzVXBkYXRlKXJldHVybjtpZigwPT09ZS5sZW5ndGgpcmV0dXJuO2NvbnN0IGM9dC5nZXRSZW5kZXJUYXJnZXQoKSx1PXQuZ2V0QWN0aXZlQ3ViZUZhY2UoKSxoPXQuZ2V0QWN0aXZlTWlwbWFwTGV2ZWwoKSxkPXQuc3RhdGU7ZC5zZXRCbGVuZGluZygwKSxkLmJ1ZmZlcnMuY29sb3Iuc2V0Q2xlYXIoMSwxLDEsMSksZC5idWZmZXJzLmRlcHRoLnNldFRlc3QoITApLGQuc2V0U2Npc3NvclRlc3QoITEpO2ZvcihsZXQgYz0wLHU9ZS5sZW5ndGg7Yzx1O2MrKyl7Y29uc3QgdT1lW2NdLGg9dS5zaGFkb3c7aWYodm9pZCAwPT09aCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFNoYWRvd01hcDoiLHUsImhhcyBubyBzaGFkb3cuIik7Y29udGludWV9aWYoITE9PT1oLmF1dG9VcGRhdGUmJiExPT09aC5uZWVkc1VwZGF0ZSljb250aW51ZTtyLmNvcHkoaC5tYXBTaXplKTtjb25zdCBwPWguZ2V0RnJhbWVFeHRlbnRzKCk7aWYoci5tdWx0aXBseShwKSxvLmNvcHkoaC5tYXBTaXplKSwoci54Pm58fHIueT5uKSYmKHIueD5uJiYoby54PU1hdGguZmxvb3Iobi9wLngpLHIueD1vLngqcC54LGgubWFwU2l6ZS54PW8ueCksci55Pm4mJihvLnk9TWF0aC5mbG9vcihuL3AueSksci55PW8ueSpwLnksaC5tYXBTaXplLnk9by55KSksbnVsbD09PWgubWFwJiYhaC5pc1BvaW50TGlnaHRTaGFkb3cmJjM9PT10aGlzLnR5cGUpe2NvbnN0IHQ9e21pbkZpbHRlcjpHSXQsbWFnRmlsdGVyOkdJdCxmb3JtYXQ6dE90fTtoLm1hcD1uZXcgR090KHIueCxyLnksdCksaC5tYXAudGV4dHVyZS5uYW1lPXUubmFtZSsiLnNoYWRvd01hcCIsaC5tYXBQYXNzPW5ldyBHT3Qoci54LHIueSx0KSxoLmNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9bnVsbD09PWgubWFwJiYoaC5tYXA9bmV3IEdPdChyLngsci55LHttaW5GaWx0ZXI6Vkl0LG1hZ0ZpbHRlcjpWSXQsZm9ybWF0OnRPdH0pLGgubWFwLnRleHR1cmUubmFtZT11Lm5hbWUrIi5zaGFkb3dNYXAiLGguY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKSksdC5zZXRSZW5kZXJUYXJnZXQoaC5tYXApLHQuY2xlYXIoKTtjb25zdCBmPWguZ2V0Vmlld3BvcnRDb3VudCgpO2ZvcihsZXQgdD0wO3Q8Zjt0Kyspe2NvbnN0IGU9aC5nZXRWaWV3cG9ydCh0KTthLnNldChvLngqZS54LG8ueSplLnksby54KmUueixvLnkqZS53KSxkLnZpZXdwb3J0KGEpLGgudXBkYXRlTWF0cmljZXModSx0KSxpPWguZ2V0RnJ1c3R1bSgpLGIocyxsLGguY2FtZXJhLHUsdGhpcy50eXBlKX1oLmlzUG9pbnRMaWdodFNoYWRvd3x8MyE9PXRoaXMudHlwZXx8ZyhoLGwpLGgubmVlZHNVcGRhdGU9ITF9bS5uZWVkc1VwZGF0ZT0hMSx0LnNldFJlbmRlclRhcmdldChjLHUsaCl9fWZ1bmN0aW9uIGJIdCh0LGUsbil7Y29uc3QgaT1uLmlzV2ViR0wyLHI9bmV3KGZ1bmN0aW9uIG8oKXtsZXQgZT0hMTtjb25zdCBuPW5ldyBqT3Q7bGV0IGk9bnVsbDtjb25zdCByPW5ldyBqT3QoMCwwLDAsMCk7cmV0dXJue3NldE1hc2s6ZnVuY3Rpb24obil7aT09PW58fGV8fCh0LmNvbG9yTWFzayhuLG4sbixuKSxpPW4pfSxzZXRMb2NrZWQ6ZnVuY3Rpb24odCl7ZT10fSxzZXRDbGVhcjpmdW5jdGlvbihlLGksbyxhLHMpeyEwPT09cyYmKGUqPWEsaSo9YSxvKj1hKSxuLnNldChlLGksbyxhKSwhMT09PXIuZXF1YWxzKG4pJiYodC5jbGVhckNvbG9yKGUsaSxvLGEpLHIuY29weShuKSl9LHJlc2V0OmZ1bmN0aW9uKCl7ZT0hMSxpPW51bGwsci5zZXQoLTEsMCwwLDApfX19KSxhPW5ldyhmdW5jdGlvbiBzKCl7bGV0IGU9ITEsbj1udWxsLGk9bnVsbCxyPW51bGw7cmV0dXJue3NldFRlc3Q6ZnVuY3Rpb24odCl7dD96KDI5MjkpOkQoMjkyOSl9LHNldE1hc2s6ZnVuY3Rpb24oaSl7bj09PWl8fGV8fCh0LmRlcHRoTWFzayhpKSxuPWkpfSxzZXRGdW5jOmZ1bmN0aW9uKGUpe2lmKGkhPT1lKXtpZihlKXN3aXRjaChlKXtjYXNlIDA6dC5kZXB0aEZ1bmMoNTEyKTticmVhaztjYXNlIDE6dC5kZXB0aEZ1bmMoNTE5KTticmVhaztjYXNlIDI6dC5kZXB0aEZ1bmMoNTEzKTticmVhaztjYXNlIDM6dC5kZXB0aEZ1bmMoNTE1KTticmVhaztjYXNlIDQ6dC5kZXB0aEZ1bmMoNTE0KTticmVhaztjYXNlIDU6dC5kZXB0aEZ1bmMoNTE4KTticmVhaztjYXNlIDY6dC5kZXB0aEZ1bmMoNTE2KTticmVhaztjYXNlIDc6dC5kZXB0aEZ1bmMoNTE3KTticmVhaztkZWZhdWx0OnQuZGVwdGhGdW5jKDUxNSl9ZWxzZSB0LmRlcHRoRnVuYyg1MTUpO2k9ZX19LHNldExvY2tlZDpmdW5jdGlvbih0KXtlPXR9LHNldENsZWFyOmZ1bmN0aW9uKGUpe3IhPT1lJiYodC5jbGVhckRlcHRoKGUpLHI9ZSl9LHJlc2V0OmZ1bmN0aW9uKCl7ZT0hMSxuPW51bGwsaT1udWxsLHI9bnVsbH19fSksbD1uZXcoZnVuY3Rpb24gYygpe2xldCBlPSExLG49bnVsbCxpPW51bGwscj1udWxsLG89bnVsbCxhPW51bGwscz1udWxsLGw9bnVsbCxjPW51bGw7cmV0dXJue3NldFRlc3Q6ZnVuY3Rpb24odCl7ZXx8KHQ/eigyOTYwKTpEKDI5NjApKX0sc2V0TWFzazpmdW5jdGlvbihpKXtuPT09aXx8ZXx8KHQuc3RlbmNpbE1hc2soaSksbj1pKX0sc2V0RnVuYzpmdW5jdGlvbihlLG4sYSl7aT09PWUmJnI9PT1uJiZvPT09YXx8KHQuc3RlbmNpbEZ1bmMoZSxuLGEpLGk9ZSxyPW4sbz1hKX0sc2V0T3A6ZnVuY3Rpb24oZSxuLGkpe2E9PT1lJiZzPT09biYmbD09PWl8fCh0LnN0ZW5jaWxPcChlLG4saSksYT1lLHM9bixsPWkpfSxzZXRMb2NrZWQ6ZnVuY3Rpb24odCl7ZT10fSxzZXRDbGVhcjpmdW5jdGlvbihlKXtjIT09ZSYmKHQuY2xlYXJTdGVuY2lsKGUpLGM9ZSl9LHJlc2V0OmZ1bmN0aW9uKCl7ZT0hMSxuPW51bGwsaT1udWxsLHI9bnVsbCxvPW51bGwsYT1udWxsLHM9bnVsbCxsPW51bGwsYz1udWxsfX19KTtsZXQgdT17fSxoPW51bGwsZD1udWxsLHA9bnVsbCxmPW51bGwsbT1udWxsLGc9bnVsbCxfPW51bGwseT1udWxsLHY9bnVsbCxiPSExLHg9bnVsbCx3PW51bGwsUz1udWxsLE09bnVsbCxFPW51bGw7Y29uc3QgVD10LmdldFBhcmFtZXRlcigzNTY2MSk7bGV0IEM9ITEsQT0wO2NvbnN0IGs9dC5nZXRQYXJhbWV0ZXIoNzkzOCk7LTEhPT1rLmluZGV4T2YoIldlYkdMIik/KEE9cGFyc2VGbG9hdCgvXldlYkdMIChcZCkvLmV4ZWMoaylbMV0pLEM9QT49MSk6LTEhPT1rLmluZGV4T2YoIk9wZW5HTCBFUyIpJiYoQT1wYXJzZUZsb2F0KC9eT3BlbkdMIEVTIChcZCkvLmV4ZWMoaylbMV0pLEM9QT49Mik7bGV0IEw9bnVsbCxQPXt9O2NvbnN0IE49bmV3IGpPdCxJPW5ldyBqT3Q7ZnVuY3Rpb24gTyhlLG4saSl7Y29uc3Qgcj1uZXcgVWludDhBcnJheSg0KSxvPXQuY3JlYXRlVGV4dHVyZSgpO3QuYmluZFRleHR1cmUoZSxvKSx0LnRleFBhcmFtZXRlcmkoZSwxMDI0MSw5NzI4KSx0LnRleFBhcmFtZXRlcmkoZSwxMDI0MCw5NzI4KTtmb3IobGV0IGU9MDtlPGk7ZSsrKXQudGV4SW1hZ2UyRChuK2UsMCw2NDA4LDEsMSwwLDY0MDgsNTEyMSxyKTtyZXR1cm4gb31jb25zdCBSPXt9O2Z1bmN0aW9uIHooZSl7ITAhPT11W2VdJiYodC5lbmFibGUoZSksdVtlXT0hMCl9ZnVuY3Rpb24gRChlKXshMSE9PXVbZV0mJih0LmRpc2FibGUoZSksdVtlXT0hMSl9UlszNTUzXT1PKDM1NTMsMzU1MywxKSxSWzM0MDY3XT1PKDM0MDY3LDM0MDY5LDYpLHIuc2V0Q2xlYXIoMCwwLDAsMSksYS5zZXRDbGVhcigxKSxsLnNldENsZWFyKDApLHooMjkyOSksYS5zZXRGdW5jKDMpLFYoITEpLFUoMSkseigyODg0KSxGKDApO2NvbnN0IEI9e1tMSXRdOjMyNzc0LDEwMTozMjc3OCwxMDI6MzI3Nzl9O2lmKGkpQlsxMDNdPTMyNzc1LEJbMTA0XT0zMjc3NjtlbHNle2NvbnN0IHQ9ZS5nZXQoIkVYVF9ibGVuZF9taW5tYXgiKTtudWxsIT09dCYmKEJbMTAzXT10Lk1JTl9FWFQsQlsxMDRdPXQuTUFYX0VYVCl9Y29uc3QgSD17MjAwOjAsMjAxOjEsMjAyOjc2OCwyMDQ6NzcwLDIxMDo3NzYsMjA4Ojc3NCwyMDY6NzcyLDIwMzo3NjksMjA1Ojc3MSwyMDk6Nzc1LDIwNzo3NzN9O2Z1bmN0aW9uIEYoZSxuLGkscixvLGEscyxsKXtpZigwIT09ZSl7aWYoZHx8KHooMzA0MiksZD0hMCksNT09PWUpbz1vfHxuLGE9YXx8aSxzPXN8fHIsbj09PWYmJm89PT1ffHwodC5ibGVuZEVxdWF0aW9uU2VwYXJhdGUoQltuXSxCW29dKSxmPW4sXz1vKSxpPT09bSYmcj09PWcmJmE9PT15JiZzPT09dnx8KHQuYmxlbmRGdW5jU2VwYXJhdGUoSFtpXSxIW3JdLEhbYV0sSFtzXSksbT1pLGc9cix5PWEsdj1zKSxwPWUsYj1udWxsO2Vsc2UgaWYoZSE9PXB8fGwhPT1iKXtpZihmPT09TEl0JiZfPT09TEl0fHwodC5ibGVuZEVxdWF0aW9uKDMyNzc0KSxmPUxJdCxfPUxJdCksbClzd2l0Y2goZSl7Y2FzZSAxOnQuYmxlbmRGdW5jU2VwYXJhdGUoMSw3NzEsMSw3NzEpO2JyZWFrO2Nhc2UgMjp0LmJsZW5kRnVuYygxLDEpO2JyZWFrO2Nhc2UgMzp0LmJsZW5kRnVuY1NlcGFyYXRlKDAsMCw3NjksNzcxKTticmVhaztjYXNlIDQ6dC5ibGVuZEZ1bmNTZXBhcmF0ZSgwLDc2OCwwLDc3MCk7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiBJbnZhbGlkIGJsZW5kaW5nOiAiLGUpfWVsc2Ugc3dpdGNoKGUpe2Nhc2UgMTp0LmJsZW5kRnVuY1NlcGFyYXRlKDc3MCw3NzEsMSw3NzEpO2JyZWFrO2Nhc2UgMjp0LmJsZW5kRnVuYyg3NzAsMSk7YnJlYWs7Y2FzZSAzOnQuYmxlbmRGdW5jKDAsNzY5KTticmVhaztjYXNlIDQ6dC5ibGVuZEZ1bmMoMCw3NjgpO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZTogSW52YWxpZCBibGVuZGluZzogIixlKX1tPW51bGwsZz1udWxsLHk9bnVsbCx2PW51bGwscD1lLGI9bH19ZWxzZSBkJiYoRCgzMDQyKSxkPSExKX1mdW5jdGlvbiBWKGUpe3ghPT1lJiYodC5mcm9udEZhY2UoZT8yMzA0OjIzMDUpLHg9ZSl9ZnVuY3Rpb24gVShlKXswIT09ZT8oeigyODg0KSxlIT09dyYmdC5jdWxsRmFjZSgxPT09ZT8xMDI5OjI9PT1lPzEwMjg6MTAzMikpOkQoMjg4NCksdz1lfWZ1bmN0aW9uIGooZSxuLGkpe2U/KHooMzI4MjMpLE09PT1uJiZFPT09aXx8KHQucG9seWdvbk9mZnNldChuLGkpLE09bixFPWkpKTpEKDMyODIzKX1mdW5jdGlvbiBHKGUpe3ZvaWQgMD09PWUmJihlPTMzOTg0K1QtMSksTCE9PWUmJih0LmFjdGl2ZVRleHR1cmUoZSksTD1lKX1yZXR1cm57YnVmZmVyczp7Y29sb3I6cixkZXB0aDphLHN0ZW5jaWw6bH0sZW5hYmxlOnosZGlzYWJsZTpELHVzZVByb2dyYW06ZnVuY3Rpb24gVyhlKXtyZXR1cm4gaCE9PWUmJih0LnVzZVByb2dyYW0oZSksaD1lLCEwKX0sc2V0QmxlbmRpbmc6RixzZXRNYXRlcmlhbDpmdW5jdGlvbiBxKHQsZSl7Mj09PXQuc2lkZT9EKDI4ODQpOnooMjg4NCk7bGV0IG49MT09PXQuc2lkZTtlJiYobj0hbiksVihuKSwxPT09dC5ibGVuZGluZyYmITE9PT10LnRyYW5zcGFyZW50P0YoMCk6Rih0LmJsZW5kaW5nLHQuYmxlbmRFcXVhdGlvbix0LmJsZW5kU3JjLHQuYmxlbmREc3QsdC5ibGVuZEVxdWF0aW9uQWxwaGEsdC5ibGVuZFNyY0FscGhhLHQuYmxlbmREc3RBbHBoYSx0LnByZW11bHRpcGxpZWRBbHBoYSksYS5zZXRGdW5jKHQuZGVwdGhGdW5jKSxhLnNldFRlc3QodC5kZXB0aFRlc3QpLGEuc2V0TWFzayh0LmRlcHRoV3JpdGUpLHIuc2V0TWFzayh0LmNvbG9yV3JpdGUpO2NvbnN0IGk9dC5zdGVuY2lsV3JpdGU7bC5zZXRUZXN0KGkpLGkmJihsLnNldE1hc2sodC5zdGVuY2lsV3JpdGVNYXNrKSxsLnNldEZ1bmModC5zdGVuY2lsRnVuYyx0LnN0ZW5jaWxSZWYsdC5zdGVuY2lsRnVuY01hc2spLGwuc2V0T3AodC5zdGVuY2lsRmFpbCx0LnN0ZW5jaWxaRmFpbCx0LnN0ZW5jaWxaUGFzcykpLGoodC5wb2x5Z29uT2Zmc2V0LHQucG9seWdvbk9mZnNldEZhY3Rvcix0LnBvbHlnb25PZmZzZXRVbml0cyl9LHNldEZsaXBTaWRlZDpWLHNldEN1bGxGYWNlOlUsc2V0TGluZVdpZHRoOmZ1bmN0aW9uIFkoZSl7ZSE9PVMmJihDJiZ0LmxpbmVXaWR0aChlKSxTPWUpfSxzZXRQb2x5Z29uT2Zmc2V0Omosc2V0U2Npc3NvclRlc3Q6ZnVuY3Rpb24gWCh0KXt0P3ooMzA4OSk6RCgzMDg5KX0sYWN0aXZlVGV4dHVyZTpHLGJpbmRUZXh0dXJlOmZ1bmN0aW9uICQoZSxuKXtudWxsPT09TCYmRygpO2xldCBpPVBbTF07dm9pZCAwPT09aSYmKGk9e3R5cGU6dm9pZCAwLHRleHR1cmU6dm9pZCAwfSxQW0xdPWkpLGkudHlwZT09PWUmJmkudGV4dHVyZT09PW58fCh0LmJpbmRUZXh0dXJlKGUsbnx8UltlXSksaS50eXBlPWUsaS50ZXh0dXJlPW4pfSx1bmJpbmRUZXh0dXJlOmZ1bmN0aW9uIEsoKXtjb25zdCBlPVBbTF07dm9pZCAwIT09ZSYmdm9pZCAwIT09ZS50eXBlJiYodC5iaW5kVGV4dHVyZShlLnR5cGUsbnVsbCksZS50eXBlPXZvaWQgMCxlLnRleHR1cmU9dm9pZCAwKX0sY29tcHJlc3NlZFRleEltYWdlMkQ6ZnVuY3Rpb24gWigpe3RyeXt0LmNvbXByZXNzZWRUZXhJbWFnZTJELmFwcGx5KHQsYXJndW1lbnRzKX1jYXRjaCh0KXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsdCl9fSx0ZXhJbWFnZTJEOmZ1bmN0aW9uIEooKXt0cnl7dC50ZXhJbWFnZTJELmFwcGx5KHQsYXJndW1lbnRzKX1jYXRjaCh0KXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsdCl9fSx0ZXhJbWFnZTNEOmZ1bmN0aW9uIFEoKXt0cnl7dC50ZXhJbWFnZTNELmFwcGx5KHQsYXJndW1lbnRzKX1jYXRjaCh0KXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsdCl9fSxzY2lzc29yOmZ1bmN0aW9uIHR0KGUpeyExPT09Ti5lcXVhbHMoZSkmJih0LnNjaXNzb3IoZS54LGUueSxlLnosZS53KSxOLmNvcHkoZSkpfSx2aWV3cG9ydDpmdW5jdGlvbiBldChlKXshMT09PUkuZXF1YWxzKGUpJiYodC52aWV3cG9ydChlLngsZS55LGUueixlLncpLEkuY29weShlKSl9LHJlc2V0OmZ1bmN0aW9uIG50KCl7dT17fSxMPW51bGwsUD17fSxoPW51bGwsZD1udWxsLHA9bnVsbCxmPW51bGwsbT1udWxsLGc9bnVsbCxfPW51bGwseT1udWxsLHY9bnVsbCxiPSExLHg9bnVsbCx3PW51bGwsUz1udWxsLE09bnVsbCxFPW51bGwsci5yZXNldCgpLGEucmVzZXQoKSxsLnJlc2V0KCl9fX1mdW5jdGlvbiB4SHQodCxlLG4saSxyLG8sYSl7Y29uc3Qgcz1yLmlzV2ViR0wyLGw9ci5tYXhUZXh0dXJlcyxjPXIubWF4Q3ViZW1hcFNpemUsdT1yLm1heFRleHR1cmVTaXplLGg9ci5tYXhTYW1wbGVzLGQ9bmV3IFdlYWtNYXA7bGV0IHAsZj0hMTt0cnl7Zj0idW5kZWZpbmVkIiE9dHlwZW9mIE9mZnNjcmVlbkNhbnZhcyYmbnVsbCE9PW5ldyBPZmZzY3JlZW5DYW52YXMoMSwxKS5nZXRDb250ZXh0KCIyZCIpfWNhdGNoKHQpe31mdW5jdGlvbiBtKHQsZSl7cmV0dXJuIGY/bmV3IE9mZnNjcmVlbkNhbnZhcyh0LGUpOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsImNhbnZhcyIpfWZ1bmN0aW9uIGcodCxlLG4saSl7bGV0IHI9MTtpZigodC53aWR0aD5pfHx0LmhlaWdodD5pKSYmKHI9aS9NYXRoLm1heCh0LndpZHRoLHQuaGVpZ2h0KSkscjwxfHwhMD09PWUpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgSFRNTEltYWdlRWxlbWVudCYmdCBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnR8fCJ1bmRlZmluZWQiIT10eXBlb2YgSFRNTENhbnZhc0VsZW1lbnQmJnQgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudHx8InVuZGVmaW5lZCIhPXR5cGVvZiBJbWFnZUJpdG1hcCYmdCBpbnN0YW5jZW9mIEltYWdlQml0bWFwKXtjb25zdCBpPWU/Uk90LmZsb29yUG93ZXJPZlR3bzpNYXRoLmZsb29yLG89aShyKnQud2lkdGgpLGE9aShyKnQuaGVpZ2h0KTt2b2lkIDA9PT1wJiYocD1tKG8sYSkpO2NvbnN0IHM9bj9tKG8sYSk6cDtyZXR1cm4gcy53aWR0aD1vLHMuaGVpZ2h0PWEscy5nZXRDb250ZXh0KCIyZCIpLmRyYXdJbWFnZSh0LDAsMCxvLGEpLGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVGV4dHVyZSBoYXMgYmVlbiByZXNpemVkIGZyb20gKCIrdC53aWR0aCsieCIrdC5oZWlnaHQrIikgdG8gKCIrbysieCIrYSsiKS4iKSxzfXJldHVybiJkYXRhImluIHQmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogSW1hZ2UgaW4gRGF0YVRleHR1cmUgaXMgdG9vIGJpZyAoIit0LndpZHRoKyJ4Iit0LmhlaWdodCsiKS4iKSx0fXJldHVybiB0fWZ1bmN0aW9uIF8odCl7cmV0dXJuIFJPdC5pc1Bvd2VyT2ZUd28odC53aWR0aCkmJlJPdC5pc1Bvd2VyT2ZUd28odC5oZWlnaHQpfWZ1bmN0aW9uIHkodCxlKXtyZXR1cm4gdC5nZW5lcmF0ZU1pcG1hcHMmJmUmJnQubWluRmlsdGVyIT09Vkl0JiZ0Lm1pbkZpbHRlciE9PUdJdH1mdW5jdGlvbiB2KGUsbixyLG8pe3QuZ2VuZXJhdGVNaXBtYXAoZSksaS5nZXQobikuX19tYXhNaXBMZXZlbD1NYXRoLmxvZyhNYXRoLm1heChyLG8pKSpNYXRoLkxPRzJFfWZ1bmN0aW9uIGIobixpLHIpe2lmKCExPT09cylyZXR1cm4gaTtpZihudWxsIT09bil7aWYodm9pZCAwIT09dFtuXSlyZXR1cm4gdFtuXTtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IEF0dGVtcHQgdG8gdXNlIG5vbi1leGlzdGluZyBXZWJHTCBpbnRlcm5hbCBmb3JtYXQgJyIrbisiJyIpfWxldCBvPWk7cmV0dXJuIDY0MDM9PT1pJiYoNTEyNj09PXImJihvPTMzMzI2KSw1MTMxPT09ciYmKG89MzMzMjUpLDUxMjE9PT1yJiYobz0zMzMyMSkpLDY0MDc9PT1pJiYoNTEyNj09PXImJihvPTM0ODM3KSw1MTMxPT09ciYmKG89MzQ4NDMpLDUxMjE9PT1yJiYobz0zMjg0OSkpLDY0MDg9PT1pJiYoNTEyNj09PXImJihvPTM0ODM2KSw1MTMxPT09ciYmKG89MzQ4NDIpLDUxMjE9PT1yJiYobz0zMjg1NikpLDMzMzI1IT09byYmMzMzMjYhPT1vJiYzNDg0MiE9PW8mJjM0ODM2IT09b3x8ZS5nZXQoIkVYVF9jb2xvcl9idWZmZXJfZmxvYXQiKSxvfWZ1bmN0aW9uIHgodCl7cmV0dXJuIHQ9PT1WSXR8fHQ9PT1VSXR8fHQ9PT1qSXQ/OTcyODo5NzI5fWZ1bmN0aW9uIHcoZSl7Y29uc3Qgbj1lLnRhcmdldDtuLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLHcpLChmdW5jdGlvbiByKGUpe2NvbnN0IG49aS5nZXQoZSk7dm9pZCAwIT09bi5fX3dlYmdsSW5pdCYmKHQuZGVsZXRlVGV4dHVyZShuLl9fd2ViZ2xUZXh0dXJlKSxpLnJlbW92ZShlKSl9KShuKSxuLmlzVmlkZW9UZXh0dXJlJiZkLmRlbGV0ZShuKSxhLm1lbW9yeS50ZXh0dXJlcy0tfWZ1bmN0aW9uIFMoZSl7Y29uc3Qgbj1lLnRhcmdldDtuLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLFMpLChmdW5jdGlvbiByKGUpe2NvbnN0IG49aS5nZXQoZSkscj1pLmdldChlLnRleHR1cmUpO2lmKGUpe2lmKHZvaWQgMCE9PXIuX193ZWJnbFRleHR1cmUmJnQuZGVsZXRlVGV4dHVyZShyLl9fd2ViZ2xUZXh0dXJlKSxlLmRlcHRoVGV4dHVyZSYmZS5kZXB0aFRleHR1cmUuZGlzcG9zZSgpLGUuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQpZm9yKGxldCBlPTA7ZTw2O2UrKyl0LmRlbGV0ZUZyYW1lYnVmZmVyKG4uX193ZWJnbEZyYW1lYnVmZmVyW2VdKSxuLl9fd2ViZ2xEZXB0aGJ1ZmZlciYmdC5kZWxldGVSZW5kZXJidWZmZXIobi5fX3dlYmdsRGVwdGhidWZmZXJbZV0pO2Vsc2UgdC5kZWxldGVGcmFtZWJ1ZmZlcihuLl9fd2ViZ2xGcmFtZWJ1ZmZlciksbi5fX3dlYmdsRGVwdGhidWZmZXImJnQuZGVsZXRlUmVuZGVyYnVmZmVyKG4uX193ZWJnbERlcHRoYnVmZmVyKSxuLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlciYmdC5kZWxldGVGcmFtZWJ1ZmZlcihuLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlciksbi5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXImJnQuZGVsZXRlUmVuZGVyYnVmZmVyKG4uX193ZWJnbENvbG9yUmVuZGVyYnVmZmVyKSxuLl9fd2ViZ2xEZXB0aFJlbmRlcmJ1ZmZlciYmdC5kZWxldGVSZW5kZXJidWZmZXIobi5fX3dlYmdsRGVwdGhSZW5kZXJidWZmZXIpO2kucmVtb3ZlKGUudGV4dHVyZSksaS5yZW1vdmUoZSl9fSkobiksYS5tZW1vcnkudGV4dHVyZXMtLX1sZXQgTT0wO2Z1bmN0aW9uIEUodCxlKXtjb25zdCByPWkuZ2V0KHQpO2lmKHQuaXNWaWRlb1RleHR1cmUmJihmdW5jdGlvbiBvKHQpe2NvbnN0IGU9YS5yZW5kZXIuZnJhbWU7ZC5nZXQodCkhPT1lJiYoZC5zZXQodCxlKSx0LnVwZGF0ZSgpKX0pKHQpLHQudmVyc2lvbj4wJiZyLl9fdmVyc2lvbiE9PXQudmVyc2lvbil7Y29uc3Qgbj10LmltYWdlO2lmKHZvaWQgMD09PW4pY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIG1hcmtlZCBmb3IgdXBkYXRlIGJ1dCBpbWFnZSBpcyB1bmRlZmluZWQiKTtlbHNle2lmKCExIT09bi5jb21wbGV0ZSlyZXR1cm4gdm9pZCBQKHIsdCxlKTtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgbWFya2VkIGZvciB1cGRhdGUgYnV0IGltYWdlIGlzIGluY29tcGxldGUiKX19bi5hY3RpdmVUZXh0dXJlKDMzOTg0K2UpLG4uYmluZFRleHR1cmUoMzU1MyxyLl9fd2ViZ2xUZXh0dXJlKX1mdW5jdGlvbiBUKGUscil7Y29uc3QgYT1pLmdldChlKTtlLnZlcnNpb24+MCYmYS5fX3ZlcnNpb24hPT1lLnZlcnNpb24/KGZ1bmN0aW9uIGwoZSxpLHIpe2lmKDYhPT1pLmltYWdlLmxlbmd0aClyZXR1cm47TChlLGkpLG4uYWN0aXZlVGV4dHVyZSgzMzk4NCtyKSxuLmJpbmRUZXh0dXJlKDM0MDY3LGUuX193ZWJnbFRleHR1cmUpLHQucGl4ZWxTdG9yZWkoMzc0NDAsaS5mbGlwWSksdC5waXhlbFN0b3JlaSgzNzQ0MSxpLnByZW11bHRpcGx5QWxwaGEpLHQucGl4ZWxTdG9yZWkoMzMxNyxpLnVucGFja0FsaWdubWVudCk7Y29uc3QgYT1pJiYoaS5pc0NvbXByZXNzZWRUZXh0dXJlfHxpLmltYWdlWzBdLmlzQ29tcHJlc3NlZFRleHR1cmUpLGw9aS5pbWFnZVswXSYmaS5pbWFnZVswXS5pc0RhdGFUZXh0dXJlLHU9W107Zm9yKGxldCB0PTA7dDw2O3QrKyl1W3RdPWF8fGw/bD9pLmltYWdlW3RdLmltYWdlOmkuaW1hZ2VbdF06ZyhpLmltYWdlW3RdLCExLCEwLGMpO2NvbnN0IGg9dVswXSxkPV8oaCl8fHMscD1vLmNvbnZlcnQoaS5mb3JtYXQpLGY9by5jb252ZXJ0KGkudHlwZSksbT1iKGkuaW50ZXJuYWxGb3JtYXQscCxmKTtsZXQgeDtpZihrKDM0MDY3LGksZCksYSl7Zm9yKGxldCB0PTA7dDw2O3QrKyl7eD11W3RdLm1pcG1hcHM7Zm9yKGxldCBlPTA7ZTx4Lmxlbmd0aDtlKyspe2NvbnN0IHI9eFtlXTtpLmZvcm1hdCE9PXRPdCYmaS5mb3JtYXQhPT1RSXQ/bnVsbCE9PXA/bi5jb21wcmVzc2VkVGV4SW1hZ2UyRCgzNDA2OSt0LGUsbSxyLndpZHRoLHIuaGVpZ2h0LDAsci5kYXRhKTpjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IEF0dGVtcHQgdG8gbG9hZCB1bnN1cHBvcnRlZCBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0IGluIC5zZXRUZXh0dXJlQ3ViZSgpIik6bi50ZXhJbWFnZTJEKDM0MDY5K3QsZSxtLHIud2lkdGgsci5oZWlnaHQsMCxwLGYsci5kYXRhKX19ZS5fX21heE1pcExldmVsPXgubGVuZ3RoLTF9ZWxzZXt4PWkubWlwbWFwcztmb3IobGV0IHQ9MDt0PDY7dCsrKWlmKGwpe24udGV4SW1hZ2UyRCgzNDA2OSt0LDAsbSx1W3RdLndpZHRoLHVbdF0uaGVpZ2h0LDAscCxmLHVbdF0uZGF0YSk7Zm9yKGxldCBlPTA7ZTx4Lmxlbmd0aDtlKyspe2NvbnN0IGk9eFtlXS5pbWFnZVt0XS5pbWFnZTtuLnRleEltYWdlMkQoMzQwNjkrdCxlKzEsbSxpLndpZHRoLGkuaGVpZ2h0LDAscCxmLGkuZGF0YSl9fWVsc2V7bi50ZXhJbWFnZTJEKDM0MDY5K3QsMCxtLHAsZix1W3RdKTtmb3IobGV0IGU9MDtlPHgubGVuZ3RoO2UrKyluLnRleEltYWdlMkQoMzQwNjkrdCxlKzEsbSxwLGYseFtlXS5pbWFnZVt0XSl9ZS5fX21heE1pcExldmVsPXgubGVuZ3RofXkoaSxkKSYmdigzNDA2NyxpLGgud2lkdGgsaC5oZWlnaHQpLGUuX192ZXJzaW9uPWkudmVyc2lvbixpLm9uVXBkYXRlJiZpLm9uVXBkYXRlKGkpfSkoYSxlLHIpOihuLmFjdGl2ZVRleHR1cmUoMzM5ODQrciksbi5iaW5kVGV4dHVyZSgzNDA2NyxhLl9fd2ViZ2xUZXh0dXJlKSl9Y29uc3QgQz17W0JJdF06MTA0OTcsW0hJdF06MzMwNzEsW0ZJdF06MzM2NDh9LEE9e1tWSXRdOjk3MjgsW1VJdF06OTk4NCxbakl0XTo5OTg2LFtHSXRdOjk3MjksW1dJdF06OTk4NSxbcUl0XTo5OTg3fTtmdW5jdGlvbiBrKG4sbyxhKXthPyh0LnRleFBhcmFtZXRlcmkobiwxMDI0MixDW28ud3JhcFNdKSx0LnRleFBhcmFtZXRlcmkobiwxMDI0MyxDW28ud3JhcFRdKSwzMjg3OSE9PW4mJjM1ODY2IT09bnx8dC50ZXhQYXJhbWV0ZXJpKG4sMzI4ODIsQ1tvLndyYXBSXSksdC50ZXhQYXJhbWV0ZXJpKG4sMTAyNDAsQVtvLm1hZ0ZpbHRlcl0pLHQudGV4UGFyYW1ldGVyaShuLDEwMjQxLEFbby5taW5GaWx0ZXJdKSk6KHQudGV4UGFyYW1ldGVyaShuLDEwMjQyLDMzMDcxKSx0LnRleFBhcmFtZXRlcmkobiwxMDI0MywzMzA3MSksMzI4NzkhPT1uJiYzNTg2NiE9PW58fHQudGV4UGFyYW1ldGVyaShuLDMyODgyLDMzMDcxKSxvLndyYXBTPT09SEl0JiZvLndyYXBUPT09SEl0fHxjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgaXMgbm90IHBvd2VyIG9mIHR3by4gVGV4dHVyZS53cmFwUyBhbmQgVGV4dHVyZS53cmFwVCBzaG91bGQgYmUgc2V0IHRvIFRIUkVFLkNsYW1wVG9FZGdlV3JhcHBpbmcuIiksdC50ZXhQYXJhbWV0ZXJpKG4sMTAyNDAseChvLm1hZ0ZpbHRlcikpLHQudGV4UGFyYW1ldGVyaShuLDEwMjQxLHgoby5taW5GaWx0ZXIpKSxvLm1pbkZpbHRlciE9PVZJdCYmby5taW5GaWx0ZXIhPT1HSXQmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVGV4dHVyZSBpcyBub3QgcG93ZXIgb2YgdHdvLiBUZXh0dXJlLm1pbkZpbHRlciBzaG91bGQgYmUgc2V0IHRvIFRIUkVFLk5lYXJlc3RGaWx0ZXIgb3IgVEhSRUUuTGluZWFyRmlsdGVyLiIpKTtjb25zdCBsPWUuZ2V0KCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKTtpZihsKXtpZihvLnR5cGU9PT1LSXQmJm51bGw9PT1lLmdldCgiT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIikpcmV0dXJuO2lmKG8udHlwZT09PVpJdCYmbnVsbD09PShzfHxlLmdldCgiT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIiKSkpcmV0dXJuOyhvLmFuaXNvdHJvcHk+MXx8aS5nZXQobykuX19jdXJyZW50QW5pc290cm9weSkmJih0LnRleFBhcmFtZXRlcmYobixsLlRFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhULE1hdGgubWluKG8uYW5pc290cm9weSxyLmdldE1heEFuaXNvdHJvcHkoKSkpLGkuZ2V0KG8pLl9fY3VycmVudEFuaXNvdHJvcHk9by5hbmlzb3Ryb3B5KX19ZnVuY3Rpb24gTChlLG4pe3ZvaWQgMD09PWUuX193ZWJnbEluaXQmJihlLl9fd2ViZ2xJbml0PSEwLG4uYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsdyksZS5fX3dlYmdsVGV4dHVyZT10LmNyZWF0ZVRleHR1cmUoKSxhLm1lbW9yeS50ZXh0dXJlcysrKX1mdW5jdGlvbiBQKGUsaSxyKXtsZXQgYT0zNTUzO2kuaXNEYXRhVGV4dHVyZTJEQXJyYXkmJihhPTM1ODY2KSxpLmlzRGF0YVRleHR1cmUzRCYmKGE9MzI4NzkpLEwoZSxpKSxuLmFjdGl2ZVRleHR1cmUoMzM5ODQrciksbi5iaW5kVGV4dHVyZShhLGUuX193ZWJnbFRleHR1cmUpLHQucGl4ZWxTdG9yZWkoMzc0NDAsaS5mbGlwWSksdC5waXhlbFN0b3JlaSgzNzQ0MSxpLnByZW11bHRpcGx5QWxwaGEpLHQucGl4ZWxTdG9yZWkoMzMxNyxpLnVucGFja0FsaWdubWVudCk7Y29uc3QgbD0oZnVuY3Rpb24gYyh0KXtyZXR1cm4hcyYmKHQud3JhcFMhPT1ISXR8fHQud3JhcFQhPT1ISXR8fHQubWluRmlsdGVyIT09Vkl0JiZ0Lm1pbkZpbHRlciE9PUdJdCl9KShpKSYmITE9PT1fKGkuaW1hZ2UpLGg9ZyhpLmltYWdlLGwsITEsdSksZD1fKGgpfHxzLHA9by5jb252ZXJ0KGkuZm9ybWF0KTtsZXQgZixtPW8uY29udmVydChpLnR5cGUpLHg9YihpLmludGVybmFsRm9ybWF0LHAsbSk7ayhhLGksZCk7Y29uc3Qgdz1pLm1pcG1hcHM7aWYoaS5pc0RlcHRoVGV4dHVyZSl4PTY0MDIscz94PWkudHlwZT09PUtJdD8zNjAxMjppLnR5cGU9PT0kSXQ/MzMxOTA6aS50eXBlPT09Skl0PzM1MDU2OjMzMTg5OmkudHlwZT09PUtJdCYmY29uc29sZS5lcnJvcigiV2ViR0xSZW5kZXJlcjogRmxvYXRpbmcgcG9pbnQgZGVwdGggdGV4dHVyZSByZXF1aXJlcyBXZWJHTDIuIiksaS5mb3JtYXQ9PT1lT3QmJjY0MDI9PT14JiZpLnR5cGUhPT1YSXQmJmkudHlwZSE9PSRJdCYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVXNlIFVuc2lnbmVkU2hvcnRUeXBlIG9yIFVuc2lnbmVkSW50VHlwZSBmb3IgRGVwdGhGb3JtYXQgRGVwdGhUZXh0dXJlLiIpLGkudHlwZT1YSXQsbT1vLmNvbnZlcnQoaS50eXBlKSksaS5mb3JtYXQ9PT1uT3QmJjY0MDI9PT14JiYoeD0zNDA0MSxpLnR5cGUhPT1KSXQmJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFVzZSBVbnNpZ25lZEludDI0OFR5cGUgZm9yIERlcHRoU3RlbmNpbEZvcm1hdCBEZXB0aFRleHR1cmUuIiksaS50eXBlPUpJdCxtPW8uY29udmVydChpLnR5cGUpKSksbi50ZXhJbWFnZTJEKDM1NTMsMCx4LGgud2lkdGgsaC5oZWlnaHQsMCxwLG0sbnVsbCk7ZWxzZSBpZihpLmlzRGF0YVRleHR1cmUpaWYody5sZW5ndGg+MCYmZCl7Zm9yKGxldCB0PTAsZT13Lmxlbmd0aDt0PGU7dCsrKWY9d1t0XSxuLnRleEltYWdlMkQoMzU1Myx0LHgsZi53aWR0aCxmLmhlaWdodCwwLHAsbSxmLmRhdGEpO2kuZ2VuZXJhdGVNaXBtYXBzPSExLGUuX19tYXhNaXBMZXZlbD13Lmxlbmd0aC0xfWVsc2Ugbi50ZXhJbWFnZTJEKDM1NTMsMCx4LGgud2lkdGgsaC5oZWlnaHQsMCxwLG0saC5kYXRhKSxlLl9fbWF4TWlwTGV2ZWw9MDtlbHNlIGlmKGkuaXNDb21wcmVzc2VkVGV4dHVyZSl7Zm9yKGxldCB0PTAsZT13Lmxlbmd0aDt0PGU7dCsrKWY9d1t0XSxpLmZvcm1hdCE9PXRPdCYmaS5mb3JtYXQhPT1RSXQ/bnVsbCE9PXA/bi5jb21wcmVzc2VkVGV4SW1hZ2UyRCgzNTUzLHQseCxmLndpZHRoLGYuaGVpZ2h0LDAsZi5kYXRhKTpjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IEF0dGVtcHQgdG8gbG9hZCB1bnN1cHBvcnRlZCBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0IGluIC51cGxvYWRUZXh0dXJlKCkiKTpuLnRleEltYWdlMkQoMzU1Myx0LHgsZi53aWR0aCxmLmhlaWdodCwwLHAsbSxmLmRhdGEpO2UuX19tYXhNaXBMZXZlbD13Lmxlbmd0aC0xfWVsc2UgaWYoaS5pc0RhdGFUZXh0dXJlMkRBcnJheSluLnRleEltYWdlM0QoMzU4NjYsMCx4LGgud2lkdGgsaC5oZWlnaHQsaC5kZXB0aCwwLHAsbSxoLmRhdGEpLGUuX19tYXhNaXBMZXZlbD0wO2Vsc2UgaWYoaS5pc0RhdGFUZXh0dXJlM0Qpbi50ZXhJbWFnZTNEKDMyODc5LDAseCxoLndpZHRoLGguaGVpZ2h0LGguZGVwdGgsMCxwLG0saC5kYXRhKSxlLl9fbWF4TWlwTGV2ZWw9MDtlbHNlIGlmKHcubGVuZ3RoPjAmJmQpe2ZvcihsZXQgdD0wLGU9dy5sZW5ndGg7dDxlO3QrKylmPXdbdF0sbi50ZXhJbWFnZTJEKDM1NTMsdCx4LHAsbSxmKTtpLmdlbmVyYXRlTWlwbWFwcz0hMSxlLl9fbWF4TWlwTGV2ZWw9dy5sZW5ndGgtMX1lbHNlIG4udGV4SW1hZ2UyRCgzNTUzLDAseCxwLG0saCksZS5fX21heE1pcExldmVsPTA7eShpLGQpJiZ2KGEsaSxoLndpZHRoLGguaGVpZ2h0KSxlLl9fdmVyc2lvbj1pLnZlcnNpb24saS5vblVwZGF0ZSYmaS5vblVwZGF0ZShpKX1mdW5jdGlvbiBOKGUscixhLHMpe2NvbnN0IGw9by5jb252ZXJ0KHIudGV4dHVyZS5mb3JtYXQpLGM9by5jb252ZXJ0KHIudGV4dHVyZS50eXBlKSx1PWIoci50ZXh0dXJlLmludGVybmFsRm9ybWF0LGwsYyk7bi50ZXhJbWFnZTJEKHMsMCx1LHIud2lkdGgsci5oZWlnaHQsMCxsLGMsbnVsbCksdC5iaW5kRnJhbWVidWZmZXIoMzYxNjAsZSksdC5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCxhLHMsaS5nZXQoci50ZXh0dXJlKS5fX3dlYmdsVGV4dHVyZSwwKSx0LmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxudWxsKX1mdW5jdGlvbiBJKGUsbixpKXtpZih0LmJpbmRSZW5kZXJidWZmZXIoMzYxNjEsZSksbi5kZXB0aEJ1ZmZlciYmIW4uc3RlbmNpbEJ1ZmZlcil7bGV0IHI9MzMxODk7aWYoaSl7Y29uc3QgZT1uLmRlcHRoVGV4dHVyZTtlJiZlLmlzRGVwdGhUZXh0dXJlJiYoZS50eXBlPT09S0l0P3I9MzYwMTI6ZS50eXBlPT09JEl0JiYocj0zMzE5MCkpO2NvbnN0IGk9TyhuKTt0LnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSgzNjE2MSxpLHIsbi53aWR0aCxuLmhlaWdodCl9ZWxzZSB0LnJlbmRlcmJ1ZmZlclN0b3JhZ2UoMzYxNjEscixuLndpZHRoLG4uaGVpZ2h0KTt0LmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKDM2MTYwLDM2MDk2LDM2MTYxLGUpfWVsc2UgaWYobi5kZXB0aEJ1ZmZlciYmbi5zdGVuY2lsQnVmZmVyKXtpZihpKXtjb25zdCBlPU8obik7dC5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoMzYxNjEsZSwzNTA1NixuLndpZHRoLG4uaGVpZ2h0KX1lbHNlIHQucmVuZGVyYnVmZmVyU3RvcmFnZSgzNjE2MSwzNDA0MSxuLndpZHRoLG4uaGVpZ2h0KTt0LmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKDM2MTYwLDMzMzA2LDM2MTYxLGUpfWVsc2V7Y29uc3QgZT1vLmNvbnZlcnQobi50ZXh0dXJlLmZvcm1hdCkscj1vLmNvbnZlcnQobi50ZXh0dXJlLnR5cGUpLGE9YihuLnRleHR1cmUuaW50ZXJuYWxGb3JtYXQsZSxyKTtpZihpKXtjb25zdCBlPU8obik7dC5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoMzYxNjEsZSxhLG4ud2lkdGgsbi5oZWlnaHQpfWVsc2UgdC5yZW5kZXJidWZmZXJTdG9yYWdlKDM2MTYxLGEsbi53aWR0aCxuLmhlaWdodCl9dC5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLG51bGwpfWZ1bmN0aW9uIE8odCl7cmV0dXJuIHMmJnQuaXNXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0P01hdGgubWluKGgsdC5zYW1wbGVzKTowfWxldCBSPSExLHo9ITE7dGhpcy5hbGxvY2F0ZVRleHR1cmVVbml0PWZ1bmN0aW9uIEQoKXtjb25zdCB0PU07cmV0dXJuIHQ+PWwmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xUZXh0dXJlczogVHJ5aW5nIHRvIHVzZSAiK3QrIiB0ZXh0dXJlIHVuaXRzIHdoaWxlIHRoaXMgR1BVIHN1cHBvcnRzIG9ubHkgIitsKSxNKz0xLHR9LHRoaXMucmVzZXRUZXh0dXJlVW5pdHM9ZnVuY3Rpb24gQigpe009MH0sdGhpcy5zZXRUZXh0dXJlMkQ9RSx0aGlzLnNldFRleHR1cmUyREFycmF5PWZ1bmN0aW9uIEgodCxlKXtjb25zdCByPWkuZ2V0KHQpO3QudmVyc2lvbj4wJiZyLl9fdmVyc2lvbiE9PXQudmVyc2lvbj9QKHIsdCxlKToobi5hY3RpdmVUZXh0dXJlKDMzOTg0K2UpLG4uYmluZFRleHR1cmUoMzU4NjYsci5fX3dlYmdsVGV4dHVyZSkpfSx0aGlzLnNldFRleHR1cmUzRD1mdW5jdGlvbiBGKHQsZSl7Y29uc3Qgcj1pLmdldCh0KTt0LnZlcnNpb24+MCYmci5fX3ZlcnNpb24hPT10LnZlcnNpb24/UChyLHQsZSk6KG4uYWN0aXZlVGV4dHVyZSgzMzk4NCtlKSxuLmJpbmRUZXh0dXJlKDMyODc5LHIuX193ZWJnbFRleHR1cmUpKX0sdGhpcy5zZXRUZXh0dXJlQ3ViZT1ULHRoaXMuc2V0dXBSZW5kZXJUYXJnZXQ9ZnVuY3Rpb24gVihlKXtjb25zdCByPWkuZ2V0KGUpLGw9aS5nZXQoZS50ZXh0dXJlKTtlLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLFMpLGwuX193ZWJnbFRleHR1cmU9dC5jcmVhdGVUZXh0dXJlKCksYS5tZW1vcnkudGV4dHVyZXMrKztjb25zdCBjPSEwPT09ZS5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldCx1PSEwPT09ZS5pc1dlYkdMTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQsaD1fKGUpfHxzO2lmKCFzfHxlLnRleHR1cmUuZm9ybWF0IT09UUl0fHxlLnRleHR1cmUudHlwZSE9PUtJdCYmZS50ZXh0dXJlLnR5cGUhPT1aSXR8fChlLnRleHR1cmUuZm9ybWF0PXRPdCxjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFJlbmRlcmluZyB0byB0ZXh0dXJlcyB3aXRoIFJHQiBmb3JtYXQgaXMgbm90IHN1cHBvcnRlZC4gVXNpbmcgUkdCQSBmb3JtYXQgaW5zdGVhZC4iKSksYyl7ci5fX3dlYmdsRnJhbWVidWZmZXI9W107Zm9yKGxldCBlPTA7ZTw2O2UrKylyLl9fd2ViZ2xGcmFtZWJ1ZmZlcltlXT10LmNyZWF0ZUZyYW1lYnVmZmVyKCl9ZWxzZSBpZihyLl9fd2ViZ2xGcmFtZWJ1ZmZlcj10LmNyZWF0ZUZyYW1lYnVmZmVyKCksdSlpZihzKXtyLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlcj10LmNyZWF0ZUZyYW1lYnVmZmVyKCksci5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXI9dC5jcmVhdGVSZW5kZXJidWZmZXIoKSx0LmJpbmRSZW5kZXJidWZmZXIoMzYxNjEsci5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXIpO2NvbnN0IG49by5jb252ZXJ0KGUudGV4dHVyZS5mb3JtYXQpLGk9by5jb252ZXJ0KGUudGV4dHVyZS50eXBlKSxhPWIoZS50ZXh0dXJlLmludGVybmFsRm9ybWF0LG4saSkscz1PKGUpO3QucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKDM2MTYxLHMsYSxlLndpZHRoLGUuaGVpZ2h0KSx0LmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxyLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlciksdC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcigzNjE2MCwzNjA2NCwzNjE2MSxyLl9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlciksdC5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLG51bGwpLGUuZGVwdGhCdWZmZXImJihyLl9fd2ViZ2xEZXB0aFJlbmRlcmJ1ZmZlcj10LmNyZWF0ZVJlbmRlcmJ1ZmZlcigpLEkoci5fX3dlYmdsRGVwdGhSZW5kZXJidWZmZXIsZSwhMCkpLHQuYmluZEZyYW1lYnVmZmVyKDM2MTYwLG51bGwpfWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBXZWJHTDIuIik7aWYoYyl7bi5iaW5kVGV4dHVyZSgzNDA2NyxsLl9fd2ViZ2xUZXh0dXJlKSxrKDM0MDY3LGUudGV4dHVyZSxoKTtmb3IobGV0IHQ9MDt0PDY7dCsrKU4oci5fX3dlYmdsRnJhbWVidWZmZXJbdF0sZSwzNjA2NCwzNDA2OSt0KTt5KGUudGV4dHVyZSxoKSYmdigzNDA2NyxlLnRleHR1cmUsZS53aWR0aCxlLmhlaWdodCksbi5iaW5kVGV4dHVyZSgzNDA2NyxudWxsKX1lbHNlIG4uYmluZFRleHR1cmUoMzU1MyxsLl9fd2ViZ2xUZXh0dXJlKSxrKDM1NTMsZS50ZXh0dXJlLGgpLE4oci5fX3dlYmdsRnJhbWVidWZmZXIsZSwzNjA2NCwzNTUzKSx5KGUudGV4dHVyZSxoKSYmdigzNTUzLGUudGV4dHVyZSxlLndpZHRoLGUuaGVpZ2h0KSxuLmJpbmRUZXh0dXJlKDM1NTMsbnVsbCk7ZS5kZXB0aEJ1ZmZlciYmKGZ1bmN0aW9uIGQoZSl7Y29uc3Qgbj1pLmdldChlKSxyPSEwPT09ZS5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldDtpZihlLmRlcHRoVGV4dHVyZSl7aWYocil0aHJvdyBuZXcgRXJyb3IoInRhcmdldC5kZXB0aFRleHR1cmUgbm90IHN1cHBvcnRlZCBpbiBDdWJlIHJlbmRlciB0YXJnZXRzIik7IShmdW5jdGlvbiBvKGUsbil7aWYobiYmbi5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldCl0aHJvdyBuZXcgRXJyb3IoIkRlcHRoIFRleHR1cmUgd2l0aCBjdWJlIHJlbmRlciB0YXJnZXRzIGlzIG5vdCBzdXBwb3J0ZWQiKTtpZih0LmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxlKSwhbi5kZXB0aFRleHR1cmV8fCFuLmRlcHRoVGV4dHVyZS5pc0RlcHRoVGV4dHVyZSl0aHJvdyBuZXcgRXJyb3IoInJlbmRlclRhcmdldC5kZXB0aFRleHR1cmUgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBUSFJFRS5EZXB0aFRleHR1cmUiKTtpLmdldChuLmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmUmJm4uZGVwdGhUZXh0dXJlLmltYWdlLndpZHRoPT09bi53aWR0aCYmbi5kZXB0aFRleHR1cmUuaW1hZ2UuaGVpZ2h0PT09bi5oZWlnaHR8fChuLmRlcHRoVGV4dHVyZS5pbWFnZS53aWR0aD1uLndpZHRoLG4uZGVwdGhUZXh0dXJlLmltYWdlLmhlaWdodD1uLmhlaWdodCxuLmRlcHRoVGV4dHVyZS5uZWVkc1VwZGF0ZT0hMCksRShuLmRlcHRoVGV4dHVyZSwwKTtjb25zdCByPWkuZ2V0KG4uZGVwdGhUZXh0dXJlKS5fX3dlYmdsVGV4dHVyZTtpZihuLmRlcHRoVGV4dHVyZS5mb3JtYXQ9PT1lT3QpdC5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzNjA5NiwzNTUzLHIsMCk7ZWxzZXtpZihuLmRlcHRoVGV4dHVyZS5mb3JtYXQhPT1uT3QpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGRlcHRoVGV4dHVyZSBmb3JtYXQiKTt0LmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLDMzMzA2LDM1NTMsciwwKX19KShuLl9fd2ViZ2xGcmFtZWJ1ZmZlcixlKX1lbHNlIGlmKHIpe24uX193ZWJnbERlcHRoYnVmZmVyPVtdO2ZvcihsZXQgaT0wO2k8NjtpKyspdC5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbi5fX3dlYmdsRnJhbWVidWZmZXJbaV0pLG4uX193ZWJnbERlcHRoYnVmZmVyW2ldPXQuY3JlYXRlUmVuZGVyYnVmZmVyKCksSShuLl9fd2ViZ2xEZXB0aGJ1ZmZlcltpXSxlLCExKX1lbHNlIHQuYmluZEZyYW1lYnVmZmVyKDM2MTYwLG4uX193ZWJnbEZyYW1lYnVmZmVyKSxuLl9fd2ViZ2xEZXB0aGJ1ZmZlcj10LmNyZWF0ZVJlbmRlcmJ1ZmZlcigpLEkobi5fX3dlYmdsRGVwdGhidWZmZXIsZSwhMSk7dC5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCl9KShlKX0sdGhpcy51cGRhdGVSZW5kZXJUYXJnZXRNaXBtYXA9ZnVuY3Rpb24gVSh0KXtjb25zdCBlPXQudGV4dHVyZTtpZih5KGUsXyh0KXx8cykpe2NvbnN0IHI9dC5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldD8zNDA2NzozNTUzLG89aS5nZXQoZSkuX193ZWJnbFRleHR1cmU7bi5iaW5kVGV4dHVyZShyLG8pLHYocixlLHQud2lkdGgsdC5oZWlnaHQpLG4uYmluZFRleHR1cmUocixudWxsKX19LHRoaXMudXBkYXRlTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQ9ZnVuY3Rpb24gaihlKXtpZihlLmlzV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldClpZihzKXtjb25zdCBuPWkuZ2V0KGUpO3QuYmluZEZyYW1lYnVmZmVyKDM2MDA4LG4uX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyKSx0LmJpbmRGcmFtZWJ1ZmZlcigzNjAwOSxuLl9fd2ViZ2xGcmFtZWJ1ZmZlcik7Y29uc3Qgcj1lLndpZHRoLG89ZS5oZWlnaHQ7bGV0IGE9MTYzODQ7ZS5kZXB0aEJ1ZmZlciYmKGF8PTI1NiksZS5zdGVuY2lsQnVmZmVyJiYoYXw9MTAyNCksdC5ibGl0RnJhbWVidWZmZXIoMCwwLHIsbywwLDAscixvLGEsOTcyOCksdC5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbi5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXIpfWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBXZWJHTDIuIil9LHRoaXMuc2FmZVNldFRleHR1cmUyRD1mdW5jdGlvbiBHKHQsZSl7dCYmdC5pc1dlYkdMUmVuZGVyVGFyZ2V0JiYoITE9PT1SJiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFRleHR1cmVzLnNhZmVTZXRUZXh0dXJlMkQ6IGRvbid0IHVzZSByZW5kZXIgdGFyZ2V0cyBhcyB0ZXh0dXJlcy4gVXNlIHRoZWlyIC50ZXh0dXJlIHByb3BlcnR5IGluc3RlYWQuIiksUj0hMCksdD10LnRleHR1cmUpLEUodCxlKX0sdGhpcy5zYWZlU2V0VGV4dHVyZUN1YmU9ZnVuY3Rpb24gVyh0LGUpe3QmJnQuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQmJighMT09PXomJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMVGV4dHVyZXMuc2FmZVNldFRleHR1cmVDdWJlOiBkb24ndCB1c2UgY3ViZSByZW5kZXIgdGFyZ2V0cyBhcyB0ZXh0dXJlcy4gVXNlIHRoZWlyIC50ZXh0dXJlIHByb3BlcnR5IGluc3RlYWQuIiksej0hMCksdD10LnRleHR1cmUpLFQodCxlKX19ZnVuY3Rpb24gd0h0KHQsZSxuKXtjb25zdCBpPW4uaXNXZWJHTDI7cmV0dXJue2NvbnZlcnQ6ZnVuY3Rpb24gcih0KXtsZXQgbjtpZih0PT09WUl0KXJldHVybiA1MTIxO2lmKDEwMTc9PT10KXJldHVybiAzMjgxOTtpZigxMDE4PT09dClyZXR1cm4gMzI4MjA7aWYoMTAxOT09PXQpcmV0dXJuIDMzNjM1O2lmKDEwMTA9PT10KXJldHVybiA1MTIwO2lmKDEwMTE9PT10KXJldHVybiA1MTIyO2lmKHQ9PT1YSXQpcmV0dXJuIDUxMjM7aWYoMTAxMz09PXQpcmV0dXJuIDUxMjQ7aWYodD09PSRJdClyZXR1cm4gNTEyNTtpZih0PT09S0l0KXJldHVybiA1MTI2O2lmKHQ9PT1aSXQpcmV0dXJuIGk/NTEzMToobj1lLmdldCgiT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpLG51bGwhPT1uP24uSEFMRl9GTE9BVF9PRVM6bnVsbCk7aWYoMTAyMT09PXQpcmV0dXJuIDY0MDY7aWYodD09PVFJdClyZXR1cm4gNjQwNztpZih0PT09dE90KXJldHVybiA2NDA4O2lmKDEwMjQ9PT10KXJldHVybiA2NDA5O2lmKDEwMjU9PT10KXJldHVybiA2NDEwO2lmKHQ9PT1lT3QpcmV0dXJuIDY0MDI7aWYodD09PW5PdClyZXR1cm4gMzQwNDE7aWYoMTAyOD09PXQpcmV0dXJuIDY0MDM7aWYoMTAyOT09PXQpcmV0dXJuIDM2MjQ0O2lmKDEwMzA9PT10KXJldHVybiAzMzMxOTtpZigxMDMxPT09dClyZXR1cm4gMzMzMjA7aWYoMTAzMj09PXQpcmV0dXJuIDM2MjQ4O2lmKDEwMzM9PT10KXJldHVybiAzNjI0OTtpZih0PT09aU90fHx0PT09ck90fHx0PT09b090fHx0PT09YU90KXtpZihuPWUuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpLG51bGw9PT1uKXJldHVybiBudWxsO2lmKHQ9PT1pT3QpcmV0dXJuIG4uQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDtpZih0PT09ck90KXJldHVybiBuLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUO2lmKHQ9PT1vT3QpcmV0dXJuIG4uQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19FWFQ7aWYodD09PWFPdClyZXR1cm4gbi5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVH1pZih0PT09c090fHx0PT09bE90fHx0PT09Y090fHx0PT09dU90KXtpZihuPWUuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKSxudWxsPT09bilyZXR1cm4gbnVsbDtpZih0PT09c090KXJldHVybiBuLkNPTVBSRVNTRURfUkdCX1BWUlRDXzRCUFBWMV9JTUc7aWYodD09PWxPdClyZXR1cm4gbi5DT01QUkVTU0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1HO2lmKHQ9PT1jT3QpcmV0dXJuIG4uQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzRCUFBWMV9JTUc7aWYodD09PXVPdClyZXR1cm4gbi5DT01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNR31pZigzNjE5Nj09PXQpcmV0dXJuIG49ZS5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9ldGMxIiksbnVsbCE9PW4/bi5DT01QUkVTU0VEX1JHQl9FVEMxX1dFQkdMOm51bGw7aWYoKHQ9PT1oT3R8fHQ9PT1kT3QpJiYobj1lLmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2V0YyIpLG51bGwhPT1uKSl7aWYodD09PWhPdClyZXR1cm4gbi5DT01QUkVTU0VEX1JHQjhfRVRDMjtpZih0PT09ZE90KXJldHVybiBuLkNPTVBSRVNTRURfUkdCQThfRVRDMl9FQUN9cmV0dXJuIDM3ODA4PT09dHx8Mzc4MDk9PT10fHwzNzgxMD09PXR8fDM3ODExPT09dHx8Mzc4MTI9PT10fHwzNzgxMz09PXR8fDM3ODE0PT09dHx8Mzc4MTU9PT10fHwzNzgxNj09PXR8fDM3ODE3PT09dHx8Mzc4MTg9PT10fHwzNzgxOT09PXR8fDM3ODIwPT09dHx8Mzc4MjE9PT10fHwzNzg0MD09PXR8fDM3ODQxPT09dHx8Mzc4NDI9PT10fHwzNzg0Mz09PXR8fDM3ODQ0PT09dHx8Mzc4NDU9PT10fHwzNzg0Nj09PXR8fDM3ODQ3PT09dHx8Mzc4NDg9PT10fHwzNzg0OT09PXR8fDM3ODUwPT09dHx8Mzc4NTE9PT10fHwzNzg1Mj09PXR8fDM3ODUzPT09dD8obj1lLmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2FzdGMiKSxudWxsIT09bj90Om51bGwpOjM2NDkyPT09dD8obj1lLmdldCgiRVhUX3RleHR1cmVfY29tcHJlc3Npb25fYnB0YyIpLG51bGwhPT1uP3Q6bnVsbCk6dD09PUpJdD9pPzM0MDQyOihuPWUuZ2V0KCJXRUJHTF9kZXB0aF90ZXh0dXJlIiksbnVsbCE9PW4/bi5VTlNJR05FRF9JTlRfMjRfOF9XRUJHTDpudWxsKTp2b2lkIDB9fX1mdW5jdGlvbiBTSHQodD1bXSl7cER0LmNhbGwodGhpcyksdGhpcy5jYW1lcmFzPXR9ZnVuY3Rpb24gTUh0KCl7V1J0LmNhbGwodGhpcyksdGhpcy50eXBlPSJHcm91cCJ9ZnVuY3Rpb24gRUh0KCl7dGhpcy5fdGFyZ2V0UmF5PW51bGwsdGhpcy5fZ3JpcD1udWxsLHRoaXMuX2hhbmQ9bnVsbH1mdW5jdGlvbiBUSHQodCxlKXtjb25zdCBuPXRoaXM7bGV0IGk9bnVsbCxyPTEsbz1udWxsLGE9ImxvY2FsLWZsb29yIixzPW51bGw7Y29uc3QgbD1bXSxjPW5ldyBNYXAsdT1uZXcgcER0O3UubGF5ZXJzLmVuYWJsZSgxKSx1LnZpZXdwb3J0PW5ldyBqT3Q7Y29uc3QgaD1uZXcgcER0O2gubGF5ZXJzLmVuYWJsZSgyKSxoLnZpZXdwb3J0PW5ldyBqT3Q7Y29uc3QgZD1bdSxoXSxwPW5ldyBTSHQ7cC5sYXllcnMuZW5hYmxlKDEpLHAubGF5ZXJzLmVuYWJsZSgyKTtsZXQgZj1udWxsLG09bnVsbDtmdW5jdGlvbiBnKHQpe2NvbnN0IGU9Yy5nZXQodC5pbnB1dFNvdXJjZSk7ZSYmZS5kaXNwYXRjaEV2ZW50KHt0eXBlOnQudHlwZSxkYXRhOnQuaW5wdXRTb3VyY2V9KX1mdW5jdGlvbiBfKCl7Yy5mb3JFYWNoKChmdW5jdGlvbih0LGUpe3QuZGlzY29ubmVjdChlKX0pKSxjLmNsZWFyKCksZj1udWxsLG09bnVsbCx0LnNldEZyYW1lYnVmZmVyKG51bGwpLHQuc2V0UmVuZGVyVGFyZ2V0KHQuZ2V0UmVuZGVyVGFyZ2V0KCkpLFMuc3RvcCgpLG4uaXNQcmVzZW50aW5nPSExLG4uZGlzcGF0Y2hFdmVudCh7dHlwZToic2Vzc2lvbmVuZCJ9KX1mdW5jdGlvbiB5KHQpe2NvbnN0IGU9aS5pbnB1dFNvdXJjZXM7Zm9yKGxldCB0PTA7dDxsLmxlbmd0aDt0KyspYy5zZXQoZVt0XSxsW3RdKTtmb3IobGV0IGU9MDtlPHQucmVtb3ZlZC5sZW5ndGg7ZSsrKXtjb25zdCBuPXQucmVtb3ZlZFtlXSxpPWMuZ2V0KG4pO2kmJihpLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc2Nvbm5lY3RlZCIsZGF0YTpufSksYy5kZWxldGUobikpfWZvcihsZXQgZT0wO2U8dC5hZGRlZC5sZW5ndGg7ZSsrKXtjb25zdCBuPXQuYWRkZWRbZV0saT1jLmdldChuKTtpJiZpLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImNvbm5lY3RlZCIsZGF0YTpufSl9fXRoaXMuZW5hYmxlZD0hMSx0aGlzLmlzUHJlc2VudGluZz0hMSx0aGlzLmdldENvbnRyb2xsZXI9ZnVuY3Rpb24odCl7bGV0IGU9bFt0XTtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9bmV3IEVIdCxsW3RdPWUpLGUuZ2V0VGFyZ2V0UmF5U3BhY2UoKX0sdGhpcy5nZXRDb250cm9sbGVyR3JpcD1mdW5jdGlvbih0KXtsZXQgZT1sW3RdO3JldHVybiB2b2lkIDA9PT1lJiYoZT1uZXcgRUh0LGxbdF09ZSksZS5nZXRHcmlwU3BhY2UoKX0sdGhpcy5nZXRIYW5kPWZ1bmN0aW9uKHQpe2xldCBlPWxbdF07cmV0dXJuIHZvaWQgMD09PWUmJihlPW5ldyBFSHQsbFt0XT1lKSxlLmdldEhhbmRTcGFjZSgpfSx0aGlzLnNldEZyYW1lYnVmZmVyU2NhbGVGYWN0b3I9ZnVuY3Rpb24odCl7cj10LCEwPT09bi5pc1ByZXNlbnRpbmcmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViWFJNYW5hZ2VyOiBDYW5ub3QgY2hhbmdlIGZyYW1lYnVmZmVyIHNjYWxlIHdoaWxlIHByZXNlbnRpbmcuIil9LHRoaXMuc2V0UmVmZXJlbmNlU3BhY2VUeXBlPWZ1bmN0aW9uKHQpe2E9dCwhMD09PW4uaXNQcmVzZW50aW5nJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYlhSTWFuYWdlcjogQ2Fubm90IGNoYW5nZSByZWZlcmVuY2Ugc3BhY2UgdHlwZSB3aGlsZSBwcmVzZW50aW5nLiIpfSx0aGlzLmdldFJlZmVyZW5jZVNwYWNlPWZ1bmN0aW9uKCl7cmV0dXJuIG99LHRoaXMuZ2V0U2Vzc2lvbj1mdW5jdGlvbigpe3JldHVybiBpfSx0aGlzLnNldFNlc3Npb249YXN5bmMgZnVuY3Rpb24odCl7aWYoaT10LG51bGwhPT1pKXtpLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdCIsZyksaS5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3RzdGFydCIsZyksaS5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3RlbmQiLGcpLGkuYWRkRXZlbnRMaXN0ZW5lcigic3F1ZWV6ZSIsZyksaS5hZGRFdmVudExpc3RlbmVyKCJzcXVlZXplc3RhcnQiLGcpLGkuYWRkRXZlbnRMaXN0ZW5lcigic3F1ZWV6ZWVuZCIsZyksaS5hZGRFdmVudExpc3RlbmVyKCJlbmQiLF8pLGkuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXRzb3VyY2VzY2hhbmdlIix5KTtjb25zdCB0PWUuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKTshMCE9PXQueHJDb21wYXRpYmxlJiZhd2FpdCBlLm1ha2VYUkNvbXBhdGlibGUoKTtjb25zdCBzPW5ldyBYUldlYkdMTGF5ZXIoaSxlLHthbnRpYWxpYXM6dC5hbnRpYWxpYXMsYWxwaGE6dC5hbHBoYSxkZXB0aDp0LmRlcHRoLHN0ZW5jaWw6dC5zdGVuY2lsLGZyYW1lYnVmZmVyU2NhbGVGYWN0b3I6cn0pO2kudXBkYXRlUmVuZGVyU3RhdGUoe2Jhc2VMYXllcjpzfSksbz1hd2FpdCBpLnJlcXVlc3RSZWZlcmVuY2VTcGFjZShhKSxTLnNldENvbnRleHQoaSksUy5zdGFydCgpLG4uaXNQcmVzZW50aW5nPSEwLG4uZGlzcGF0Y2hFdmVudCh7dHlwZToic2Vzc2lvbnN0YXJ0In0pfX07Y29uc3Qgdj1uZXcgcU90LGI9bmV3IHFPdDtmdW5jdGlvbiB4KHQsZSl7bnVsbD09PWU/dC5tYXRyaXhXb3JsZC5jb3B5KHQubWF0cml4KTp0Lm1hdHJpeFdvcmxkLm11bHRpcGx5TWF0cmljZXMoZS5tYXRyaXhXb3JsZCx0Lm1hdHJpeCksdC5tYXRyaXhXb3JsZEludmVyc2UuY29weSh0Lm1hdHJpeFdvcmxkKS5pbnZlcnQoKX10aGlzLmdldENhbWVyYT1mdW5jdGlvbih0KXtwLm5lYXI9aC5uZWFyPXUubmVhcj10Lm5lYXIscC5mYXI9aC5mYXI9dS5mYXI9dC5mYXIsZj09PXAubmVhciYmbT09PXAuZmFyfHwoaS51cGRhdGVSZW5kZXJTdGF0ZSh7ZGVwdGhOZWFyOnAubmVhcixkZXB0aEZhcjpwLmZhcn0pLGY9cC5uZWFyLG09cC5mYXIpO2NvbnN0IGU9dC5wYXJlbnQsbj1wLmNhbWVyYXM7eChwLGUpO2ZvcihsZXQgdD0wO3Q8bi5sZW5ndGg7dCsrKXgoblt0XSxlKTt0Lm1hdHJpeFdvcmxkLmNvcHkocC5tYXRyaXhXb3JsZCksdC5tYXRyaXguY29weShwLm1hdHJpeCksdC5tYXRyaXguZGVjb21wb3NlKHQucG9zaXRpb24sdC5xdWF0ZXJuaW9uLHQuc2NhbGUpO2NvbnN0IHI9dC5jaGlsZHJlbjtmb3IobGV0IHQ9MCxlPXIubGVuZ3RoO3Q8ZTt0Kyspclt0XS51cGRhdGVNYXRyaXhXb3JsZCghMCk7cmV0dXJuIDI9PT1uLmxlbmd0aD8oZnVuY3Rpb24gbyh0LGUsbil7di5zZXRGcm9tTWF0cml4UG9zaXRpb24oZS5tYXRyaXhXb3JsZCksYi5zZXRGcm9tTWF0cml4UG9zaXRpb24obi5tYXRyaXhXb3JsZCk7Y29uc3QgaT12LmRpc3RhbmNlVG8oYikscj1lLnByb2plY3Rpb25NYXRyaXguZWxlbWVudHMsbz1uLnByb2plY3Rpb25NYXRyaXguZWxlbWVudHMsYT1yWzE0XS8oclsxMF0tMSkscz1yWzE0XS8oclsxMF0rMSksbD0ocls5XSsxKS9yWzVdLGM9KHJbOV0tMSkvcls1XSx1PShyWzhdLTEpL3JbMF0saD0ob1s4XSsxKS9vWzBdLGQ9YSp1LHA9YSpoLGY9aS8oLXUraCksbT1mKi11O2UubWF0cml4V29ybGQuZGVjb21wb3NlKHQucG9zaXRpb24sdC5xdWF0ZXJuaW9uLHQuc2NhbGUpLHQudHJhbnNsYXRlWChtKSx0LnRyYW5zbGF0ZVooZiksdC5tYXRyaXhXb3JsZC5jb21wb3NlKHQucG9zaXRpb24sdC5xdWF0ZXJuaW9uLHQuc2NhbGUpLHQubWF0cml4V29ybGRJbnZlcnNlLmNvcHkodC5tYXRyaXhXb3JsZCkuaW52ZXJ0KCk7Y29uc3QgZz1hK2YsXz1zK2Y7dC5wcm9qZWN0aW9uTWF0cml4Lm1ha2VQZXJzcGVjdGl2ZShkLW0scCsoaS1tKSxsKnMvXypnLGMqcy9fKmcsZyxfKX0pKHAsdSxoKTpwLnByb2plY3Rpb25NYXRyaXguY29weSh1LnByb2plY3Rpb25NYXRyaXgpLHB9O2xldCB3PW51bGw7Y29uc3QgUz1uZXcgd0R0O1Muc2V0QW5pbWF0aW9uTG9vcCgoZnVuY3Rpb24gTShlLG4pe2lmKHM9bi5nZXRWaWV3ZXJQb3NlKG8pLG51bGwhPT1zKXtjb25zdCBlPXMudmlld3Msbj1pLnJlbmRlclN0YXRlLmJhc2VMYXllcjt0LnNldEZyYW1lYnVmZmVyKG4uZnJhbWVidWZmZXIpO2xldCByPSExO2UubGVuZ3RoIT09cC5jYW1lcmFzLmxlbmd0aCYmKHAuY2FtZXJhcy5sZW5ndGg9MCxyPSEwKTtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyl7Y29uc3QgaT1lW3RdLG89bi5nZXRWaWV3cG9ydChpKSxhPWRbdF07YS5tYXRyaXguZnJvbUFycmF5KGkudHJhbnNmb3JtLm1hdHJpeCksYS5wcm9qZWN0aW9uTWF0cml4LmZyb21BcnJheShpLnByb2plY3Rpb25NYXRyaXgpLGEudmlld3BvcnQuc2V0KG8ueCxvLnksby53aWR0aCxvLmhlaWdodCksMD09PXQmJnAubWF0cml4LmNvcHkoYS5tYXRyaXgpLCEwPT09ciYmcC5jYW1lcmFzLnB1c2goYSl9fWNvbnN0IHI9aS5pbnB1dFNvdXJjZXM7Zm9yKGxldCB0PTA7dDxsLmxlbmd0aDt0KyspbFt0XS51cGRhdGUoclt0XSxuLG8pO3cmJncoZSxuKX0pKSx0aGlzLnNldEFuaW1hdGlvbkxvb3A9ZnVuY3Rpb24odCl7dz10fSx0aGlzLmRpc3Bvc2U9ZnVuY3Rpb24oKXt9fWZ1bmN0aW9uIENIdCh0KXtmdW5jdGlvbiBlKGUsbil7ZS5vcGFjaXR5LnZhbHVlPW4ub3BhY2l0eSxuLmNvbG9yJiZlLmRpZmZ1c2UudmFsdWUuY29weShuLmNvbG9yKSxuLmVtaXNzaXZlJiZlLmVtaXNzaXZlLnZhbHVlLmNvcHkobi5lbWlzc2l2ZSkubXVsdGlwbHlTY2FsYXIobi5lbWlzc2l2ZUludGVuc2l0eSksbi5tYXAmJihlLm1hcC52YWx1ZT1uLm1hcCksbi5hbHBoYU1hcCYmKGUuYWxwaGFNYXAudmFsdWU9bi5hbHBoYU1hcCksbi5zcGVjdWxhck1hcCYmKGUuc3BlY3VsYXJNYXAudmFsdWU9bi5zcGVjdWxhck1hcCk7Y29uc3QgaT10LmdldChuKS5lbnZNYXA7aWYoaSl7ZS5lbnZNYXAudmFsdWU9aSxlLmZsaXBFbnZNYXAudmFsdWU9aS5pc0N1YmVUZXh0dXJlJiZpLl9uZWVkc0ZsaXBFbnZNYXA/LTE6MSxlLnJlZmxlY3Rpdml0eS52YWx1ZT1uLnJlZmxlY3Rpdml0eSxlLnJlZnJhY3Rpb25SYXRpby52YWx1ZT1uLnJlZnJhY3Rpb25SYXRpbztjb25zdCByPXQuZ2V0KGkpLl9fbWF4TWlwTGV2ZWw7dm9pZCAwIT09ciYmKGUubWF4TWlwTGV2ZWwudmFsdWU9cil9bGV0IHIsbztuLmxpZ2h0TWFwJiYoZS5saWdodE1hcC52YWx1ZT1uLmxpZ2h0TWFwLGUubGlnaHRNYXBJbnRlbnNpdHkudmFsdWU9bi5saWdodE1hcEludGVuc2l0eSksbi5hb01hcCYmKGUuYW9NYXAudmFsdWU9bi5hb01hcCxlLmFvTWFwSW50ZW5zaXR5LnZhbHVlPW4uYW9NYXBJbnRlbnNpdHkpLG4ubWFwP3I9bi5tYXA6bi5zcGVjdWxhck1hcD9yPW4uc3BlY3VsYXJNYXA6bi5kaXNwbGFjZW1lbnRNYXA/cj1uLmRpc3BsYWNlbWVudE1hcDpuLm5vcm1hbE1hcD9yPW4ubm9ybWFsTWFwOm4uYnVtcE1hcD9yPW4uYnVtcE1hcDpuLnJvdWdobmVzc01hcD9yPW4ucm91Z2huZXNzTWFwOm4ubWV0YWxuZXNzTWFwP3I9bi5tZXRhbG5lc3NNYXA6bi5hbHBoYU1hcD9yPW4uYWxwaGFNYXA6bi5lbWlzc2l2ZU1hcD9yPW4uZW1pc3NpdmVNYXA6bi5jbGVhcmNvYXRNYXA/cj1uLmNsZWFyY29hdE1hcDpuLmNsZWFyY29hdE5vcm1hbE1hcD9yPW4uY2xlYXJjb2F0Tm9ybWFsTWFwOm4uY2xlYXJjb2F0Um91Z2huZXNzTWFwJiYocj1uLmNsZWFyY29hdFJvdWdobmVzc01hcCksdm9pZCAwIT09ciYmKHIuaXNXZWJHTFJlbmRlclRhcmdldCYmKHI9ci50ZXh0dXJlKSwhMD09PXIubWF0cml4QXV0b1VwZGF0ZSYmci51cGRhdGVNYXRyaXgoKSxlLnV2VHJhbnNmb3JtLnZhbHVlLmNvcHkoci5tYXRyaXgpKSxuLmFvTWFwP289bi5hb01hcDpuLmxpZ2h0TWFwJiYobz1uLmxpZ2h0TWFwKSx2b2lkIDAhPT1vJiYoby5pc1dlYkdMUmVuZGVyVGFyZ2V0JiYobz1vLnRleHR1cmUpLCEwPT09by5tYXRyaXhBdXRvVXBkYXRlJiZvLnVwZGF0ZU1hdHJpeCgpLGUudXYyVHJhbnNmb3JtLnZhbHVlLmNvcHkoby5tYXRyaXgpKX1mdW5jdGlvbiBuKGUsbil7ZS5yb3VnaG5lc3MudmFsdWU9bi5yb3VnaG5lc3MsZS5tZXRhbG5lc3MudmFsdWU9bi5tZXRhbG5lc3Msbi5yb3VnaG5lc3NNYXAmJihlLnJvdWdobmVzc01hcC52YWx1ZT1uLnJvdWdobmVzc01hcCksbi5tZXRhbG5lc3NNYXAmJihlLm1ldGFsbmVzc01hcC52YWx1ZT1uLm1ldGFsbmVzc01hcCksbi5lbWlzc2l2ZU1hcCYmKGUuZW1pc3NpdmVNYXAudmFsdWU9bi5lbWlzc2l2ZU1hcCksbi5idW1wTWFwJiYoZS5idW1wTWFwLnZhbHVlPW4uYnVtcE1hcCxlLmJ1bXBTY2FsZS52YWx1ZT1uLmJ1bXBTY2FsZSwxPT09bi5zaWRlJiYoZS5idW1wU2NhbGUudmFsdWUqPS0xKSksbi5ub3JtYWxNYXAmJihlLm5vcm1hbE1hcC52YWx1ZT1uLm5vcm1hbE1hcCxlLm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkobi5ub3JtYWxTY2FsZSksMT09PW4uc2lkZSYmZS5ub3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKSksbi5kaXNwbGFjZW1lbnRNYXAmJihlLmRpc3BsYWNlbWVudE1hcC52YWx1ZT1uLmRpc3BsYWNlbWVudE1hcCxlLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPW4uZGlzcGxhY2VtZW50U2NhbGUsZS5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPW4uZGlzcGxhY2VtZW50QmlhcyksdC5nZXQobikuZW52TWFwJiYoZS5lbnZNYXBJbnRlbnNpdHkudmFsdWU9bi5lbnZNYXBJbnRlbnNpdHkpfXJldHVybntyZWZyZXNoRm9nVW5pZm9ybXM6ZnVuY3Rpb24gaSh0LGUpe3QuZm9nQ29sb3IudmFsdWUuY29weShlLmNvbG9yKSxlLmlzRm9nPyh0LmZvZ05lYXIudmFsdWU9ZS5uZWFyLHQuZm9nRmFyLnZhbHVlPWUuZmFyKTplLmlzRm9nRXhwMiYmKHQuZm9nRGVuc2l0eS52YWx1ZT1lLmRlbnNpdHkpfSxyZWZyZXNoTWF0ZXJpYWxVbmlmb3JtczpmdW5jdGlvbiByKHQsaSxvLGEpe2kuaXNNZXNoQmFzaWNNYXRlcmlhbD9lKHQsaSk6aS5pc01lc2hMYW1iZXJ0TWF0ZXJpYWw/KGUodCxpKSwoZnVuY3Rpb24gcyh0LGUpe2UuZW1pc3NpdmVNYXAmJih0LmVtaXNzaXZlTWFwLnZhbHVlPWUuZW1pc3NpdmVNYXApfSkodCxpKSk6aS5pc01lc2hUb29uTWF0ZXJpYWw/KGUodCxpKSwoZnVuY3Rpb24gbCh0LGUpe2UuZ3JhZGllbnRNYXAmJih0LmdyYWRpZW50TWFwLnZhbHVlPWUuZ3JhZGllbnRNYXApLGUuZW1pc3NpdmVNYXAmJih0LmVtaXNzaXZlTWFwLnZhbHVlPWUuZW1pc3NpdmVNYXApLGUuYnVtcE1hcCYmKHQuYnVtcE1hcC52YWx1ZT1lLmJ1bXBNYXAsdC5idW1wU2NhbGUudmFsdWU9ZS5idW1wU2NhbGUsMT09PWUuc2lkZSYmKHQuYnVtcFNjYWxlLnZhbHVlKj0tMSkpLGUubm9ybWFsTWFwJiYodC5ub3JtYWxNYXAudmFsdWU9ZS5ub3JtYWxNYXAsdC5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KGUubm9ybWFsU2NhbGUpLDE9PT1lLnNpZGUmJnQubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLGUuZGlzcGxhY2VtZW50TWFwJiYodC5kaXNwbGFjZW1lbnRNYXAudmFsdWU9ZS5kaXNwbGFjZW1lbnRNYXAsdC5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT1lLmRpc3BsYWNlbWVudFNjYWxlLHQuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT1lLmRpc3BsYWNlbWVudEJpYXMpfSkodCxpKSk6aS5pc01lc2hQaG9uZ01hdGVyaWFsPyhlKHQsaSksKGZ1bmN0aW9uIGModCxlKXt0LnNwZWN1bGFyLnZhbHVlLmNvcHkoZS5zcGVjdWxhciksdC5zaGluaW5lc3MudmFsdWU9TWF0aC5tYXgoZS5zaGluaW5lc3MsMWUtNCksZS5lbWlzc2l2ZU1hcCYmKHQuZW1pc3NpdmVNYXAudmFsdWU9ZS5lbWlzc2l2ZU1hcCksZS5idW1wTWFwJiYodC5idW1wTWFwLnZhbHVlPWUuYnVtcE1hcCx0LmJ1bXBTY2FsZS52YWx1ZT1lLmJ1bXBTY2FsZSwxPT09ZS5zaWRlJiYodC5idW1wU2NhbGUudmFsdWUqPS0xKSksZS5ub3JtYWxNYXAmJih0Lm5vcm1hbE1hcC52YWx1ZT1lLm5vcm1hbE1hcCx0Lm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoZS5ub3JtYWxTY2FsZSksMT09PWUuc2lkZSYmdC5ub3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKSksZS5kaXNwbGFjZW1lbnRNYXAmJih0LmRpc3BsYWNlbWVudE1hcC52YWx1ZT1lLmRpc3BsYWNlbWVudE1hcCx0LmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPWUuZGlzcGxhY2VtZW50U2NhbGUsdC5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPWUuZGlzcGxhY2VtZW50Qmlhcyl9KSh0LGkpKTppLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/KGUodCxpKSxpLmlzTWVzaFBoeXNpY2FsTWF0ZXJpYWw/KGZ1bmN0aW9uIHUodCxlKXtuKHQsZSksdC5yZWZsZWN0aXZpdHkudmFsdWU9ZS5yZWZsZWN0aXZpdHksdC5jbGVhcmNvYXQudmFsdWU9ZS5jbGVhcmNvYXQsdC5jbGVhcmNvYXRSb3VnaG5lc3MudmFsdWU9ZS5jbGVhcmNvYXRSb3VnaG5lc3MsZS5zaGVlbiYmdC5zaGVlbi52YWx1ZS5jb3B5KGUuc2hlZW4pLGUuY2xlYXJjb2F0TWFwJiYodC5jbGVhcmNvYXRNYXAudmFsdWU9ZS5jbGVhcmNvYXRNYXApLGUuY2xlYXJjb2F0Um91Z2huZXNzTWFwJiYodC5jbGVhcmNvYXRSb3VnaG5lc3NNYXAudmFsdWU9ZS5jbGVhcmNvYXRSb3VnaG5lc3NNYXApLGUuY2xlYXJjb2F0Tm9ybWFsTWFwJiYodC5jbGVhcmNvYXROb3JtYWxTY2FsZS52YWx1ZS5jb3B5KGUuY2xlYXJjb2F0Tm9ybWFsU2NhbGUpLHQuY2xlYXJjb2F0Tm9ybWFsTWFwLnZhbHVlPWUuY2xlYXJjb2F0Tm9ybWFsTWFwLDE9PT1lLnNpZGUmJnQuY2xlYXJjb2F0Tm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLHQudHJhbnNtaXNzaW9uLnZhbHVlPWUudHJhbnNtaXNzaW9uLGUudHJhbnNtaXNzaW9uTWFwJiYodC50cmFuc21pc3Npb25NYXAudmFsdWU9ZS50cmFuc21pc3Npb25NYXApfSkodCxpKTpuKHQsaSkpOmkuaXNNZXNoTWF0Y2FwTWF0ZXJpYWw/KGUodCxpKSwoZnVuY3Rpb24gaCh0LGUpe2UubWF0Y2FwJiYodC5tYXRjYXAudmFsdWU9ZS5tYXRjYXApLGUuYnVtcE1hcCYmKHQuYnVtcE1hcC52YWx1ZT1lLmJ1bXBNYXAsdC5idW1wU2NhbGUudmFsdWU9ZS5idW1wU2NhbGUsMT09PWUuc2lkZSYmKHQuYnVtcFNjYWxlLnZhbHVlKj0tMSkpLGUubm9ybWFsTWFwJiYodC5ub3JtYWxNYXAudmFsdWU9ZS5ub3JtYWxNYXAsdC5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KGUubm9ybWFsU2NhbGUpLDE9PT1lLnNpZGUmJnQubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLGUuZGlzcGxhY2VtZW50TWFwJiYodC5kaXNwbGFjZW1lbnRNYXAudmFsdWU9ZS5kaXNwbGFjZW1lbnRNYXAsdC5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT1lLmRpc3BsYWNlbWVudFNjYWxlLHQuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT1lLmRpc3BsYWNlbWVudEJpYXMpfSkodCxpKSk6aS5pc01lc2hEZXB0aE1hdGVyaWFsPyhlKHQsaSksKGZ1bmN0aW9uIGQodCxlKXtlLmRpc3BsYWNlbWVudE1hcCYmKHQuZGlzcGxhY2VtZW50TWFwLnZhbHVlPWUuZGlzcGxhY2VtZW50TWFwLHQuZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9ZS5kaXNwbGFjZW1lbnRTY2FsZSx0LmRpc3BsYWNlbWVudEJpYXMudmFsdWU9ZS5kaXNwbGFjZW1lbnRCaWFzKX0pKHQsaSkpOmkuaXNNZXNoRGlzdGFuY2VNYXRlcmlhbD8oZSh0LGkpLChmdW5jdGlvbiBwKHQsZSl7ZS5kaXNwbGFjZW1lbnRNYXAmJih0LmRpc3BsYWNlbWVudE1hcC52YWx1ZT1lLmRpc3BsYWNlbWVudE1hcCx0LmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPWUuZGlzcGxhY2VtZW50U2NhbGUsdC5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPWUuZGlzcGxhY2VtZW50QmlhcyksdC5yZWZlcmVuY2VQb3NpdGlvbi52YWx1ZS5jb3B5KGUucmVmZXJlbmNlUG9zaXRpb24pLHQubmVhckRpc3RhbmNlLnZhbHVlPWUubmVhckRpc3RhbmNlLHQuZmFyRGlzdGFuY2UudmFsdWU9ZS5mYXJEaXN0YW5jZX0pKHQsaSkpOmkuaXNNZXNoTm9ybWFsTWF0ZXJpYWw/KGUodCxpKSwoZnVuY3Rpb24gZih0LGUpe2UuYnVtcE1hcCYmKHQuYnVtcE1hcC52YWx1ZT1lLmJ1bXBNYXAsdC5idW1wU2NhbGUudmFsdWU9ZS5idW1wU2NhbGUsMT09PWUuc2lkZSYmKHQuYnVtcFNjYWxlLnZhbHVlKj0tMSkpLGUubm9ybWFsTWFwJiYodC5ub3JtYWxNYXAudmFsdWU9ZS5ub3JtYWxNYXAsdC5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KGUubm9ybWFsU2NhbGUpLDE9PT1lLnNpZGUmJnQubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLGUuZGlzcGxhY2VtZW50TWFwJiYodC5kaXNwbGFjZW1lbnRNYXAudmFsdWU9ZS5kaXNwbGFjZW1lbnRNYXAsdC5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT1lLmRpc3BsYWNlbWVudFNjYWxlLHQuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT1lLmRpc3BsYWNlbWVudEJpYXMpfSkodCxpKSk6aS5pc0xpbmVCYXNpY01hdGVyaWFsPygoZnVuY3Rpb24gbSh0LGUpe3QuZGlmZnVzZS52YWx1ZS5jb3B5KGUuY29sb3IpLHQub3BhY2l0eS52YWx1ZT1lLm9wYWNpdHl9KSh0LGkpLGkuaXNMaW5lRGFzaGVkTWF0ZXJpYWwmJihmdW5jdGlvbiBnKHQsZSl7dC5kYXNoU2l6ZS52YWx1ZT1lLmRhc2hTaXplLHQudG90YWxTaXplLnZhbHVlPWUuZGFzaFNpemUrZS5nYXBTaXplLHQuc2NhbGUudmFsdWU9ZS5zY2FsZX0pKHQsaSkpOmkuaXNQb2ludHNNYXRlcmlhbD8oZnVuY3Rpb24gXyh0LGUsbixpKXtsZXQgcjt0LmRpZmZ1c2UudmFsdWUuY29weShlLmNvbG9yKSx0Lm9wYWNpdHkudmFsdWU9ZS5vcGFjaXR5LHQuc2l6ZS52YWx1ZT1lLnNpemUqbix0LnNjYWxlLnZhbHVlPS41KmksZS5tYXAmJih0Lm1hcC52YWx1ZT1lLm1hcCksZS5hbHBoYU1hcCYmKHQuYWxwaGFNYXAudmFsdWU9ZS5hbHBoYU1hcCksZS5tYXA/cj1lLm1hcDplLmFscGhhTWFwJiYocj1lLmFscGhhTWFwKSx2b2lkIDAhPT1yJiYoITA9PT1yLm1hdHJpeEF1dG9VcGRhdGUmJnIudXBkYXRlTWF0cml4KCksdC51dlRyYW5zZm9ybS52YWx1ZS5jb3B5KHIubWF0cml4KSl9KSh0LGksbyxhKTppLmlzU3ByaXRlTWF0ZXJpYWw/KGZ1bmN0aW9uIHkodCxlKXtsZXQgbjt0LmRpZmZ1c2UudmFsdWUuY29weShlLmNvbG9yKSx0Lm9wYWNpdHkudmFsdWU9ZS5vcGFjaXR5LHQucm90YXRpb24udmFsdWU9ZS5yb3RhdGlvbixlLm1hcCYmKHQubWFwLnZhbHVlPWUubWFwKSxlLmFscGhhTWFwJiYodC5hbHBoYU1hcC52YWx1ZT1lLmFscGhhTWFwKSxlLm1hcD9uPWUubWFwOmUuYWxwaGFNYXAmJihuPWUuYWxwaGFNYXApLHZvaWQgMCE9PW4mJighMD09PW4ubWF0cml4QXV0b1VwZGF0ZSYmbi51cGRhdGVNYXRyaXgoKSx0LnV2VHJhbnNmb3JtLnZhbHVlLmNvcHkobi5tYXRyaXgpKX0pKHQsaSk6aS5pc1NoYWRvd01hdGVyaWFsPyh0LmNvbG9yLnZhbHVlLmNvcHkoaS5jb2xvciksdC5vcGFjaXR5LnZhbHVlPWkub3BhY2l0eSk6aS5pc1NoYWRlck1hdGVyaWFsJiYoaS51bmlmb3Jtc05lZWRVcGRhdGU9ITEpfX19ZnVuY3Rpb24gQUh0KHQpe2NvbnN0IGU9dm9pZCAwIT09KHQ9dHx8e30pLmNhbnZhcz90LmNhbnZhczooZnVuY3Rpb24gbigpe2NvbnN0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiY2FudmFzIik7cmV0dXJuIHQuc3R5bGUuZGlzcGxheT0iYmxvY2siLHR9KSgpLGk9dm9pZCAwIT09dC5jb250ZXh0P3QuY29udGV4dDpudWxsLHI9dm9pZCAwIT09dC5hbHBoYSYmdC5hbHBoYSxvPXZvaWQgMD09PXQuZGVwdGh8fHQuZGVwdGgsYT12b2lkIDA9PT10LnN0ZW5jaWx8fHQuc3RlbmNpbCxzPXZvaWQgMCE9PXQuYW50aWFsaWFzJiZ0LmFudGlhbGlhcyxsPXZvaWQgMD09PXQucHJlbXVsdGlwbGllZEFscGhhfHx0LnByZW11bHRpcGxpZWRBbHBoYSxjPXZvaWQgMCE9PXQucHJlc2VydmVEcmF3aW5nQnVmZmVyJiZ0LnByZXNlcnZlRHJhd2luZ0J1ZmZlcix1PXZvaWQgMCE9PXQucG93ZXJQcmVmZXJlbmNlP3QucG93ZXJQcmVmZXJlbmNlOiJkZWZhdWx0IixoPXZvaWQgMCE9PXQuZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdCYmdC5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0O2xldCBkPW51bGwscD1udWxsO2NvbnN0IGY9W107dGhpcy5kb21FbGVtZW50PWUsdGhpcy5kZWJ1Zz17Y2hlY2tTaGFkZXJFcnJvcnM6ITB9LHRoaXMuYXV0b0NsZWFyPSEwLHRoaXMuYXV0b0NsZWFyQ29sb3I9ITAsdGhpcy5hdXRvQ2xlYXJEZXB0aD0hMCx0aGlzLmF1dG9DbGVhclN0ZW5jaWw9ITAsdGhpcy5zb3J0T2JqZWN0cz0hMCx0aGlzLmNsaXBwaW5nUGxhbmVzPVtdLHRoaXMubG9jYWxDbGlwcGluZ0VuYWJsZWQ9ITEsdGhpcy5nYW1tYUZhY3Rvcj0yLHRoaXMub3V0cHV0RW5jb2Rpbmc9eE90LHRoaXMucGh5c2ljYWxseUNvcnJlY3RMaWdodHM9ITEsdGhpcy50b25lTWFwcGluZz0wLHRoaXMudG9uZU1hcHBpbmdFeHBvc3VyZT0xLHRoaXMubWF4TW9ycGhUYXJnZXRzPTgsdGhpcy5tYXhNb3JwaE5vcm1hbHM9NDtjb25zdCBtPXRoaXM7bGV0IGc9ITEsXz1udWxsLHk9MCx2PTAsYj1udWxsLHg9bnVsbCx3PS0xLFM9bnVsbDtjb25zdCBNPW5ldyBqT3QsRT1uZXcgak90O2xldCBUPW51bGwsQz1lLndpZHRoLEE9ZS5oZWlnaHQsaz0xLEw9bnVsbCxQPW51bGw7Y29uc3QgTj1uZXcgak90KDAsMCxDLEEpLEk9bmV3IGpPdCgwLDAsQyxBKTtsZXQgTz0hMTtjb25zdCBSPW5ldyB4RHQ7bGV0IHo9ITEsRD0hMTtjb25zdCBCPW5ldyBiUnQsSD1uZXcgcU90LEY9e2JhY2tncm91bmQ6bnVsbCxmb2c6bnVsbCxlbnZpcm9ubWVudDpudWxsLG92ZXJyaWRlTWF0ZXJpYWw6bnVsbCxpc1NjZW5lOiEwfTtmdW5jdGlvbiBWKCl7cmV0dXJuIG51bGw9PT1iP2s6MX1sZXQgVSxqLEcsVyxxLFksWCwkLEssWixKLFEsdHQsZXQsbnQsaXQscnQsb3QsYXQsc3QsbHQsY3Q9aTtmdW5jdGlvbiB1dCh0LG4pe2ZvcihsZXQgaT0wO2k8dC5sZW5ndGg7aSsrKXtjb25zdCByPWUuZ2V0Q29udGV4dCh0W2ldLG4pO2lmKG51bGwhPT1yKXJldHVybiByfXJldHVybiBudWxsfXRyeXtjb25zdCB0PXthbHBoYTpyLGRlcHRoOm8sc3RlbmNpbDphLGFudGlhbGlhczpzLHByZW11bHRpcGxpZWRBbHBoYTpsLHByZXNlcnZlRHJhd2luZ0J1ZmZlcjpjLHBvd2VyUHJlZmVyZW5jZTp1LGZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQ6aH07aWYoZS5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IixmdCwhMSksZS5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRyZXN0b3JlZCIsbXQsITEpLG51bGw9PT1jdCl7Y29uc3QgZT1bIndlYmdsMiIsIndlYmdsIiwiZXhwZXJpbWVudGFsLXdlYmdsIl07aWYoITA9PT1tLmlzV2ViR0wxUmVuZGVyZXImJmUuc2hpZnQoKSxjdD11dChlLHQpLG51bGw9PT1jdCl0aHJvdyB1dChlKT9uZXcgRXJyb3IoIkVycm9yIGNyZWF0aW5nIFdlYkdMIGNvbnRleHQgd2l0aCB5b3VyIHNlbGVjdGVkIGF0dHJpYnV0ZXMuIik6bmV3IEVycm9yKCJFcnJvciBjcmVhdGluZyBXZWJHTCBjb250ZXh0LiIpfXZvaWQgMD09PWN0LmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCYmKGN0LmdldFNoYWRlclByZWNpc2lvbkZvcm1hdD1mdW5jdGlvbigpe3JldHVybntyYW5nZU1pbjoxLHJhbmdlTWF4OjEscHJlY2lzaW9uOjF9fSl9Y2F0Y2godCl7dGhyb3cgY29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlcjogIit0Lm1lc3NhZ2UpLHR9ZnVuY3Rpb24gaHQoKXtVPW5ldyBPRHQoY3QpLGo9bmV3IFBEdChjdCxVLHQpLFUuaW5pdChqKSxzdD1uZXcgd0h0KGN0LFUsaiksRz1uZXcgYkh0KGN0LFUsaiksRy5zY2lzc29yKEUuY29weShJKS5tdWx0aXBseVNjYWxhcihrKS5mbG9vcigpKSxHLnZpZXdwb3J0KE0uY29weShOKS5tdWx0aXBseVNjYWxhcihrKS5mbG9vcigpKSxXPW5ldyBERHQoY3QpLHE9bmV3IGFIdCxZPW5ldyB4SHQoY3QsVSxHLHEsaixzdCxXKSxYPW5ldyBJRHQobSksJD1uZXcgU0R0KGN0LGopLGx0PW5ldyBrRHQoY3QsVSwkLGopLEs9bmV3IFJEdChjdCwkLFcsbHQpLFo9bmV3IFZEdChjdCxLLCQsVykscnQ9bmV3IEZEdChjdCksbnQ9bmV3IE5EdChxKSxKPW5ldyBvSHQobSxYLFUsaixsdCxudCksUT1uZXcgQ0h0KHEpLHR0PW5ldyB1SHQocSksZXQ9bmV3IGdIdChVLGopLGl0PW5ldyBBRHQobSxYLEcsWixsKSxvdD1uZXcgTER0KGN0LFUsVyxqKSxhdD1uZXcgekR0KGN0LFUsVyxqKSxXLnByb2dyYW1zPUoucHJvZ3JhbXMsbS5jYXBhYmlsaXRpZXM9aixtLmV4dGVuc2lvbnM9VSxtLnByb3BlcnRpZXM9cSxtLnJlbmRlckxpc3RzPXR0LG0uc3RhdGU9RyxtLmluZm89V31odCgpO2NvbnN0IGR0PW5ldyBUSHQobSxjdCk7dGhpcy54cj1kdDtjb25zdCBwdD1uZXcgdkh0KG0sWixqLm1heFRleHR1cmVTaXplKTtmdW5jdGlvbiBmdCh0KXt0LnByZXZlbnREZWZhdWx0KCksY29uc29sZS5sb2coIlRIUkVFLldlYkdMUmVuZGVyZXI6IENvbnRleHQgTG9zdC4iKSxnPSEwfWZ1bmN0aW9uIG10KCl7Y29uc29sZS5sb2coIlRIUkVFLldlYkdMUmVuZGVyZXI6IENvbnRleHQgUmVzdG9yZWQuIiksZz0hMSxodCgpfWZ1bmN0aW9uIGd0KHQpe2NvbnN0IGU9dC50YXJnZXQ7ZS5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixndCksKGZ1bmN0aW9uIG4odCl7X3QodCkscS5yZW1vdmUodCl9KShlKX1mdW5jdGlvbiBfdCh0KXtjb25zdCBlPXEuZ2V0KHQpLnByb2dyYW07dm9pZCAwIT09ZSYmSi5yZWxlYXNlUHJvZ3JhbShlKX10aGlzLnNoYWRvd01hcD1wdCx0aGlzLmdldENvbnRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4gY3R9LHRoaXMuZ2V0Q29udGV4dEF0dHJpYnV0ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gY3QuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKX0sdGhpcy5mb3JjZUNvbnRleHRMb3NzPWZ1bmN0aW9uKCl7Y29uc3QgdD1VLmdldCgiV0VCR0xfbG9zZV9jb250ZXh0Iik7dCYmdC5sb3NlQ29udGV4dCgpfSx0aGlzLmZvcmNlQ29udGV4dFJlc3RvcmU9ZnVuY3Rpb24oKXtjb25zdCB0PVUuZ2V0KCJXRUJHTF9sb3NlX2NvbnRleHQiKTt0JiZ0LnJlc3RvcmVDb250ZXh0KCl9LHRoaXMuZ2V0UGl4ZWxSYXRpbz1mdW5jdGlvbigpe3JldHVybiBrfSx0aGlzLnNldFBpeGVsUmF0aW89ZnVuY3Rpb24odCl7dm9pZCAwIT09dCYmKGs9dCx0aGlzLnNldFNpemUoQyxBLCExKSl9LHRoaXMuZ2V0U2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKGNvbnNvbGUud2FybigiV2ViR0xSZW5kZXJlcjogLmdldHNpemUoKSBub3cgcmVxdWlyZXMgYSBWZWN0b3IyIGFzIGFuIGFyZ3VtZW50IiksdD1uZXcgek90KSx0LnNldChDLEEpfSx0aGlzLnNldFNpemU9ZnVuY3Rpb24odCxuLGkpe2R0LmlzUHJlc2VudGluZz9jb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IENhbid0IGNoYW5nZSBzaXplIHdoaWxlIFZSIGRldmljZSBpcyBwcmVzZW50aW5nLiIpOihDPXQsQT1uLGUud2lkdGg9TWF0aC5mbG9vcih0KmspLGUuaGVpZ2h0PU1hdGguZmxvb3IobiprKSwhMSE9PWkmJihlLnN0eWxlLndpZHRoPXQrInB4IixlLnN0eWxlLmhlaWdodD1uKyJweCIpLHRoaXMuc2V0Vmlld3BvcnQoMCwwLHQsbikpfSx0aGlzLmdldERyYXdpbmdCdWZmZXJTaXplPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYoY29uc29sZS53YXJuKCJXZWJHTFJlbmRlcmVyOiAuZ2V0ZHJhd2luZ0J1ZmZlclNpemUoKSBub3cgcmVxdWlyZXMgYSBWZWN0b3IyIGFzIGFuIGFyZ3VtZW50IiksdD1uZXcgek90KSx0LnNldChDKmssQSprKS5mbG9vcigpfSx0aGlzLnNldERyYXdpbmdCdWZmZXJTaXplPWZ1bmN0aW9uKHQsbixpKXtDPXQsQT1uLGs9aSxlLndpZHRoPU1hdGguZmxvb3IodCppKSxlLmhlaWdodD1NYXRoLmZsb29yKG4qaSksdGhpcy5zZXRWaWV3cG9ydCgwLDAsdCxuKX0sdGhpcy5nZXRDdXJyZW50Vmlld3BvcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJihjb25zb2xlLndhcm4oIldlYkdMUmVuZGVyZXI6IC5nZXRDdXJyZW50Vmlld3BvcnQoKSBub3cgcmVxdWlyZXMgYSBWZWN0b3I0IGFzIGFuIGFyZ3VtZW50IiksdD1uZXcgak90KSx0LmNvcHkoTSl9LHRoaXMuZ2V0Vmlld3BvcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQuY29weShOKX0sdGhpcy5zZXRWaWV3cG9ydD1mdW5jdGlvbih0LGUsbixpKXt0LmlzVmVjdG9yND9OLnNldCh0LngsdC55LHQueix0LncpOk4uc2V0KHQsZSxuLGkpLEcudmlld3BvcnQoTS5jb3B5KE4pLm11bHRpcGx5U2NhbGFyKGspLmZsb29yKCkpfSx0aGlzLmdldFNjaXNzb3I9ZnVuY3Rpb24odCl7cmV0dXJuIHQuY29weShJKX0sdGhpcy5zZXRTY2lzc29yPWZ1bmN0aW9uKHQsZSxuLGkpe3QuaXNWZWN0b3I0P0kuc2V0KHQueCx0LnksdC56LHQudyk6SS5zZXQodCxlLG4saSksRy5zY2lzc29yKEUuY29weShJKS5tdWx0aXBseVNjYWxhcihrKS5mbG9vcigpKX0sdGhpcy5nZXRTY2lzc29yVGVzdD1mdW5jdGlvbigpe3JldHVybiBPfSx0aGlzLnNldFNjaXNzb3JUZXN0PWZ1bmN0aW9uKHQpe0cuc2V0U2Npc3NvclRlc3QoTz10KX0sdGhpcy5zZXRPcGFxdWVTb3J0PWZ1bmN0aW9uKHQpe0w9dH0sdGhpcy5zZXRUcmFuc3BhcmVudFNvcnQ9ZnVuY3Rpb24odCl7UD10fSx0aGlzLmdldENsZWFyQ29sb3I9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJihjb25zb2xlLndhcm4oIldlYkdMUmVuZGVyZXI6IC5nZXRDbGVhckNvbG9yKCkgbm93IHJlcXVpcmVzIGEgQ29sb3IgYXMgYW4gYXJndW1lbnQiKSx0PW5ldyBwenQpLHQuY29weShpdC5nZXRDbGVhckNvbG9yKCkpfSx0aGlzLnNldENsZWFyQ29sb3I9ZnVuY3Rpb24oKXtpdC5zZXRDbGVhckNvbG9yLmFwcGx5KGl0LGFyZ3VtZW50cyl9LHRoaXMuZ2V0Q2xlYXJBbHBoYT1mdW5jdGlvbigpe3JldHVybiBpdC5nZXRDbGVhckFscGhhKCl9LHRoaXMuc2V0Q2xlYXJBbHBoYT1mdW5jdGlvbigpe2l0LnNldENsZWFyQWxwaGEuYXBwbHkoaXQsYXJndW1lbnRzKX0sdGhpcy5jbGVhcj1mdW5jdGlvbih0LGUsbil7bGV0IGk9MDsodm9pZCAwPT09dHx8dCkmJihpfD0xNjM4NCksKHZvaWQgMD09PWV8fGUpJiYoaXw9MjU2KSwodm9pZCAwPT09bnx8bikmJihpfD0xMDI0KSxjdC5jbGVhcihpKX0sdGhpcy5jbGVhckNvbG9yPWZ1bmN0aW9uKCl7dGhpcy5jbGVhcighMCwhMSwhMSl9LHRoaXMuY2xlYXJEZXB0aD1mdW5jdGlvbigpe3RoaXMuY2xlYXIoITEsITAsITEpfSx0aGlzLmNsZWFyU3RlbmNpbD1mdW5jdGlvbigpe3RoaXMuY2xlYXIoITEsITEsITApfSx0aGlzLmRpc3Bvc2U9ZnVuY3Rpb24oKXtlLnJlbW92ZUV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLGZ0LCExKSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dHJlc3RvcmVkIixtdCwhMSksdHQuZGlzcG9zZSgpLGV0LmRpc3Bvc2UoKSxxLmRpc3Bvc2UoKSxYLmRpc3Bvc2UoKSxaLmRpc3Bvc2UoKSxsdC5kaXNwb3NlKCksZHQuZGlzcG9zZSgpLHZ0LnN0b3AoKX0sdGhpcy5yZW5kZXJCdWZmZXJJbW1lZGlhdGU9ZnVuY3Rpb24odCxlKXtsdC5pbml0QXR0cmlidXRlcygpO2NvbnN0IG49cS5nZXQodCk7dC5oYXNQb3NpdGlvbnMmJiFuLnBvc2l0aW9uJiYobi5wb3NpdGlvbj1jdC5jcmVhdGVCdWZmZXIoKSksdC5oYXNOb3JtYWxzJiYhbi5ub3JtYWwmJihuLm5vcm1hbD1jdC5jcmVhdGVCdWZmZXIoKSksdC5oYXNVdnMmJiFuLnV2JiYobi51dj1jdC5jcmVhdGVCdWZmZXIoKSksdC5oYXNDb2xvcnMmJiFuLmNvbG9yJiYobi5jb2xvcj1jdC5jcmVhdGVCdWZmZXIoKSk7Y29uc3QgaT1lLmdldEF0dHJpYnV0ZXMoKTt0Lmhhc1Bvc2l0aW9ucyYmKGN0LmJpbmRCdWZmZXIoMzQ5NjIsbi5wb3NpdGlvbiksY3QuYnVmZmVyRGF0YSgzNDk2Mix0LnBvc2l0aW9uQXJyYXksMzUwNDgpLGx0LmVuYWJsZUF0dHJpYnV0ZShpLnBvc2l0aW9uKSxjdC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGkucG9zaXRpb24sMyw1MTI2LCExLDAsMCkpLHQuaGFzTm9ybWFscyYmKGN0LmJpbmRCdWZmZXIoMzQ5NjIsbi5ub3JtYWwpLGN0LmJ1ZmZlckRhdGEoMzQ5NjIsdC5ub3JtYWxBcnJheSwzNTA0OCksbHQuZW5hYmxlQXR0cmlidXRlKGkubm9ybWFsKSxjdC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGkubm9ybWFsLDMsNTEyNiwhMSwwLDApKSx0Lmhhc1V2cyYmKGN0LmJpbmRCdWZmZXIoMzQ5NjIsbi51diksY3QuYnVmZmVyRGF0YSgzNDk2Mix0LnV2QXJyYXksMzUwNDgpLGx0LmVuYWJsZUF0dHJpYnV0ZShpLnV2KSxjdC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGkudXYsMiw1MTI2LCExLDAsMCkpLHQuaGFzQ29sb3JzJiYoY3QuYmluZEJ1ZmZlcigzNDk2MixuLmNvbG9yKSxjdC5idWZmZXJEYXRhKDM0OTYyLHQuY29sb3JBcnJheSwzNTA0OCksbHQuZW5hYmxlQXR0cmlidXRlKGkuY29sb3IpLGN0LnZlcnRleEF0dHJpYlBvaW50ZXIoaS5jb2xvciwzLDUxMjYsITEsMCwwKSksbHQuZGlzYWJsZVVudXNlZEF0dHJpYnV0ZXMoKSxjdC5kcmF3QXJyYXlzKDQsMCx0LmNvdW50KSx0LmNvdW50PTB9LHRoaXMucmVuZGVyQnVmZmVyRGlyZWN0PWZ1bmN0aW9uKHQsZSxuLGkscixvKXtudWxsPT09ZSYmKGU9Rik7Y29uc3QgYT1yLmlzTWVzaCYmci5tYXRyaXhXb3JsZC5kZXRlcm1pbmFudCgpPDAscz1NdCh0LGUsaSxyKTtHLnNldE1hdGVyaWFsKGksYSk7bGV0IGw9bi5pbmRleDtjb25zdCBjPW4uYXR0cmlidXRlcy5wb3NpdGlvbjtpZihudWxsPT09bCl7aWYodm9pZCAwPT09Y3x8MD09PWMuY291bnQpcmV0dXJufWVsc2UgaWYoMD09PWwuY291bnQpcmV0dXJuO2xldCB1LGg9MTshMD09PWkud2lyZWZyYW1lJiYobD1LLmdldFdpcmVmcmFtZUF0dHJpYnV0ZShuKSxoPTIpLChpLm1vcnBoVGFyZ2V0c3x8aS5tb3JwaE5vcm1hbHMpJiZydC51cGRhdGUocixuLGkscyksbHQuc2V0dXAocixpLHMsbixsKTtsZXQgZD1vdDtudWxsIT09bCYmKHU9JC5nZXQobCksZD1hdCxkLnNldEluZGV4KHUpKTtjb25zdCBwPW51bGwhPT1sP2wuY291bnQ6Yy5jb3VudCxmPW4uZHJhd1JhbmdlLnN0YXJ0KmgsbT1uLmRyYXdSYW5nZS5jb3VudCpoLGc9bnVsbCE9PW8/by5zdGFydCpoOjAsXz1udWxsIT09bz9vLmNvdW50Kmg6MS8wLHk9TWF0aC5tYXgoZixnKSx2PU1hdGgubWluKHAsZittLGcrXyktMSxiPU1hdGgubWF4KDAsdi15KzEpO2lmKDAhPT1iKXtpZihyLmlzTWVzaCkhMD09PWkud2lyZWZyYW1lPyhHLnNldExpbmVXaWR0aChpLndpcmVmcmFtZUxpbmV3aWR0aCpWKCkpLGQuc2V0TW9kZSgxKSk6ZC5zZXRNb2RlKDQpO2Vsc2UgaWYoci5pc0xpbmUpe2xldCB0PWkubGluZXdpZHRoO3ZvaWQgMD09PXQmJih0PTEpLEcuc2V0TGluZVdpZHRoKHQqVigpKSxkLnNldE1vZGUoci5pc0xpbmVTZWdtZW50cz8xOnIuaXNMaW5lTG9vcD8yOjMpfWVsc2Ugci5pc1BvaW50cz9kLnNldE1vZGUoMCk6ci5pc1Nwcml0ZSYmZC5zZXRNb2RlKDQpO2lmKHIuaXNJbnN0YW5jZWRNZXNoKWQucmVuZGVySW5zdGFuY2VzKHksYixyLmNvdW50KTtlbHNlIGlmKG4uaXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSl7Y29uc3QgdD1NYXRoLm1pbihuLmluc3RhbmNlQ291bnQsbi5fbWF4SW5zdGFuY2VDb3VudCk7ZC5yZW5kZXJJbnN0YW5jZXMoeSxiLHQpfWVsc2UgZC5yZW5kZXIoeSxiKX19LHRoaXMuY29tcGlsZT1mdW5jdGlvbih0LGUpe3A9ZXQuZ2V0KHQpLHAuaW5pdCgpLHQudHJhdmVyc2VWaXNpYmxlKChmdW5jdGlvbih0KXt0LmlzTGlnaHQmJnQubGF5ZXJzLnRlc3QoZS5sYXllcnMpJiYocC5wdXNoTGlnaHQodCksdC5jYXN0U2hhZG93JiZwLnB1c2hTaGFkb3codCkpfSkpLHAuc2V0dXBMaWdodHMoKTtjb25zdCBuPW5ldyBXZWFrTWFwO3QudHJhdmVyc2UoKGZ1bmN0aW9uKGUpe2NvbnN0IGk9ZS5tYXRlcmlhbDtpZihpKWlmKEFycmF5LmlzQXJyYXkoaSkpZm9yKGxldCByPTA7cjxpLmxlbmd0aDtyKyspe2NvbnN0IG89aVtyXTshMT09PW4uaGFzKG8pJiYoU3Qobyx0LGUpLG4uc2V0KG8pKX1lbHNlITE9PT1uLmhhcyhpKSYmKFN0KGksdCxlKSxuLnNldChpKSl9KSl9O2xldCB5dD1udWxsO2NvbnN0IHZ0PW5ldyB3RHQ7ZnVuY3Rpb24gYnQodCxlLG4saSl7aWYoITE9PT10LnZpc2libGUpcmV0dXJuO2lmKHQubGF5ZXJzLnRlc3QoZS5sYXllcnMpKWlmKHQuaXNHcm91cCluPXQucmVuZGVyT3JkZXI7ZWxzZSBpZih0LmlzTE9EKSEwPT09dC5hdXRvVXBkYXRlJiZ0LnVwZGF0ZShlKTtlbHNlIGlmKHQuaXNMaWdodClwLnB1c2hMaWdodCh0KSx0LmNhc3RTaGFkb3cmJnAucHVzaFNoYWRvdyh0KTtlbHNlIGlmKHQuaXNTcHJpdGUpe2lmKCF0LmZydXN0dW1DdWxsZWR8fFIuaW50ZXJzZWN0c1Nwcml0ZSh0KSl7aSYmSC5zZXRGcm9tTWF0cml4UG9zaXRpb24odC5tYXRyaXhXb3JsZCkuYXBwbHlNYXRyaXg0KEIpO2NvbnN0IGU9Wi51cGRhdGUodCkscj10Lm1hdGVyaWFsO3IudmlzaWJsZSYmZC5wdXNoKHQsZSxyLG4sSC56LG51bGwpfX1lbHNlIGlmKHQuaXNJbW1lZGlhdGVSZW5kZXJPYmplY3QpaSYmSC5zZXRGcm9tTWF0cml4UG9zaXRpb24odC5tYXRyaXhXb3JsZCkuYXBwbHlNYXRyaXg0KEIpLGQucHVzaCh0LG51bGwsdC5tYXRlcmlhbCxuLEgueixudWxsKTtlbHNlIGlmKCh0LmlzTWVzaHx8dC5pc0xpbmV8fHQuaXNQb2ludHMpJiYodC5pc1NraW5uZWRNZXNoJiZ0LnNrZWxldG9uLmZyYW1lIT09Vy5yZW5kZXIuZnJhbWUmJih0LnNrZWxldG9uLnVwZGF0ZSgpLHQuc2tlbGV0b24uZnJhbWU9Vy5yZW5kZXIuZnJhbWUpLCF0LmZydXN0dW1DdWxsZWR8fFIuaW50ZXJzZWN0c09iamVjdCh0KSkpe2kmJkguc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHQubWF0cml4V29ybGQpLmFwcGx5TWF0cml4NChCKTtjb25zdCBlPVoudXBkYXRlKHQpLHI9dC5tYXRlcmlhbDtpZihBcnJheS5pc0FycmF5KHIpKXtjb25zdCBpPWUuZ3JvdXBzO2ZvcihsZXQgbz0wLGE9aS5sZW5ndGg7bzxhO28rKyl7Y29uc3QgYT1pW29dLHM9clthLm1hdGVyaWFsSW5kZXhdO3MmJnMudmlzaWJsZSYmZC5wdXNoKHQsZSxzLG4sSC56LGEpfX1lbHNlIHIudmlzaWJsZSYmZC5wdXNoKHQsZSxyLG4sSC56LG51bGwpfWNvbnN0IHI9dC5jaGlsZHJlbjtmb3IobGV0IHQ9MCxvPXIubGVuZ3RoO3Q8bzt0KyspYnQoclt0XSxlLG4saSl9ZnVuY3Rpb24geHQodCxlLG4pe2NvbnN0IGk9ITA9PT1lLmlzU2NlbmU/ZS5vdmVycmlkZU1hdGVyaWFsOm51bGw7Zm9yKGxldCByPTAsbz10Lmxlbmd0aDtyPG87cisrKXtjb25zdCBvPXRbcl0sYT1vLm9iamVjdCxzPW8uZ2VvbWV0cnksbD1udWxsPT09aT9vLm1hdGVyaWFsOmksYz1vLmdyb3VwO2lmKG4uaXNBcnJheUNhbWVyYSl7Y29uc3QgdD1uLmNhbWVyYXM7Zm9yKGxldCBuPTAsaT10Lmxlbmd0aDtuPGk7bisrKXtjb25zdCBpPXRbbl07YS5sYXllcnMudGVzdChpLmxheWVycykmJihHLnZpZXdwb3J0KE0uY29weShpLnZpZXdwb3J0KSkscC5zZXR1cExpZ2h0c1ZpZXcoaSksd3QoYSxlLGkscyxsLGMpKX19ZWxzZSB3dChhLGUsbixzLGwsYyl9fWZ1bmN0aW9uIHd0KHQsZSxuLGkscixvKXtpZih0Lm9uQmVmb3JlUmVuZGVyKG0sZSxuLGkscixvKSx0Lm1vZGVsVmlld01hdHJpeC5tdWx0aXBseU1hdHJpY2VzKG4ubWF0cml4V29ybGRJbnZlcnNlLHQubWF0cml4V29ybGQpLHQubm9ybWFsTWF0cml4LmdldE5vcm1hbE1hdHJpeCh0Lm1vZGVsVmlld01hdHJpeCksdC5pc0ltbWVkaWF0ZVJlbmRlck9iamVjdCl7Y29uc3QgaT1NdChuLGUscix0KTtHLnNldE1hdGVyaWFsKHIpLGx0LnJlc2V0KCksKGZ1bmN0aW9uIGEodCxlKXt0LnJlbmRlcigoZnVuY3Rpb24odCl7bS5yZW5kZXJCdWZmZXJJbW1lZGlhdGUodCxlKX0pKX0pKHQsaSl9ZWxzZSBtLnJlbmRlckJ1ZmZlckRpcmVjdChuLGUsaSxyLHQsbyk7dC5vbkFmdGVyUmVuZGVyKG0sZSxuLGkscixvKX1mdW5jdGlvbiBTdCh0LGUsbil7ITAhPT1lLmlzU2NlbmUmJihlPUYpO2NvbnN0IGk9cS5nZXQodCkscj1wLnN0YXRlLmxpZ2h0cyxvPXIuc3RhdGUudmVyc2lvbixhPUouZ2V0UGFyYW1ldGVycyh0LHIuc3RhdGUscC5zdGF0ZS5zaGFkb3dzQXJyYXksZSxuKSxzPUouZ2V0UHJvZ3JhbUNhY2hlS2V5KGEpO2xldCBsPWkucHJvZ3JhbSxjPSEwO2lmKGkuZW52aXJvbm1lbnQ9dC5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP2UuZW52aXJvbm1lbnQ6bnVsbCxpLmZvZz1lLmZvZyxpLmVudk1hcD1YLmdldCh0LmVudk1hcHx8aS5lbnZpcm9ubWVudCksdm9pZCAwPT09bCl0LmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGd0KTtlbHNlIGlmKGwuY2FjaGVLZXkhPT1zKV90KHQpO2Vsc2UgaWYoaS5saWdodHNTdGF0ZVZlcnNpb24hPT1vKWM9ITE7ZWxzZXtpZih2b2lkIDAhPT1hLnNoYWRlcklEKXJldHVybjtjPSExfWMmJihhLnVuaWZvcm1zPUouZ2V0VW5pZm9ybXModCksdC5vbkJlZm9yZUNvbXBpbGUoYSxtKSxsPUouYWNxdWlyZVByb2dyYW0oYSxzKSxpLnByb2dyYW09bCxpLnVuaWZvcm1zPWEudW5pZm9ybXMsaS5vdXRwdXRFbmNvZGluZz1hLm91dHB1dEVuY29kaW5nKTtjb25zdCB1PWkudW5pZm9ybXM7KHQuaXNTaGFkZXJNYXRlcmlhbHx8dC5pc1Jhd1NoYWRlck1hdGVyaWFsKSYmITAhPT10LmNsaXBwaW5nfHwoaS5udW1DbGlwcGluZ1BsYW5lcz1udC5udW1QbGFuZXMsaS5udW1JbnRlcnNlY3Rpb249bnQubnVtSW50ZXJzZWN0aW9uLHUuY2xpcHBpbmdQbGFuZXM9bnQudW5pZm9ybSksaS5uZWVkc0xpZ2h0cz0oZnVuY3Rpb24gaCh0KXtyZXR1cm4gdC5pc01lc2hMYW1iZXJ0TWF0ZXJpYWx8fHQuaXNNZXNoVG9vbk1hdGVyaWFsfHx0LmlzTWVzaFBob25nTWF0ZXJpYWx8fHQuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbHx8dC5pc1NoYWRvd01hdGVyaWFsfHx0LmlzU2hhZGVyTWF0ZXJpYWwmJiEwPT09dC5saWdodHN9KSh0KSxpLmxpZ2h0c1N0YXRlVmVyc2lvbj1vLGkubmVlZHNMaWdodHMmJih1LmFtYmllbnRMaWdodENvbG9yLnZhbHVlPXIuc3RhdGUuYW1iaWVudCx1LmxpZ2h0UHJvYmUudmFsdWU9ci5zdGF0ZS5wcm9iZSx1LmRpcmVjdGlvbmFsTGlnaHRzLnZhbHVlPXIuc3RhdGUuZGlyZWN0aW9uYWwsdS5kaXJlY3Rpb25hbExpZ2h0U2hhZG93cy52YWx1ZT1yLnN0YXRlLmRpcmVjdGlvbmFsU2hhZG93LHUuc3BvdExpZ2h0cy52YWx1ZT1yLnN0YXRlLnNwb3QsdS5zcG90TGlnaHRTaGFkb3dzLnZhbHVlPXIuc3RhdGUuc3BvdFNoYWRvdyx1LnJlY3RBcmVhTGlnaHRzLnZhbHVlPXIuc3RhdGUucmVjdEFyZWEsdS5sdGNfMS52YWx1ZT1yLnN0YXRlLnJlY3RBcmVhTFRDMSx1Lmx0Y18yLnZhbHVlPXIuc3RhdGUucmVjdEFyZWFMVEMyLHUucG9pbnRMaWdodHMudmFsdWU9ci5zdGF0ZS5wb2ludCx1LnBvaW50TGlnaHRTaGFkb3dzLnZhbHVlPXIuc3RhdGUucG9pbnRTaGFkb3csdS5oZW1pc3BoZXJlTGlnaHRzLnZhbHVlPXIuc3RhdGUuaGVtaSx1LmRpcmVjdGlvbmFsU2hhZG93TWFwLnZhbHVlPXIuc3RhdGUuZGlyZWN0aW9uYWxTaGFkb3dNYXAsdS5kaXJlY3Rpb25hbFNoYWRvd01hdHJpeC52YWx1ZT1yLnN0YXRlLmRpcmVjdGlvbmFsU2hhZG93TWF0cml4LHUuc3BvdFNoYWRvd01hcC52YWx1ZT1yLnN0YXRlLnNwb3RTaGFkb3dNYXAsdS5zcG90U2hhZG93TWF0cml4LnZhbHVlPXIuc3RhdGUuc3BvdFNoYWRvd01hdHJpeCx1LnBvaW50U2hhZG93TWFwLnZhbHVlPXIuc3RhdGUucG9pbnRTaGFkb3dNYXAsdS5wb2ludFNoYWRvd01hdHJpeC52YWx1ZT1yLnN0YXRlLnBvaW50U2hhZG93TWF0cml4KTtjb25zdCBkPWkucHJvZ3JhbS5nZXRVbmlmb3JtcygpLGY9QkJ0LnNlcVdpdGhWYWx1ZShkLnNlcSx1KTtpLnVuaWZvcm1zTGlzdD1mfWZ1bmN0aW9uIE10KHQsZSxuLGkpeyEwIT09ZS5pc1NjZW5lJiYoZT1GKSxZLnJlc2V0VGV4dHVyZVVuaXRzKCk7Y29uc3Qgcj1lLmZvZyxvPW4uaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD9lLmVudmlyb25tZW50Om51bGwsYT1udWxsPT09Yj9tLm91dHB1dEVuY29kaW5nOmIudGV4dHVyZS5lbmNvZGluZyxzPVguZ2V0KG4uZW52TWFwfHxvKSxsPXEuZ2V0KG4pLGM9cC5zdGF0ZS5saWdodHM7ITAhPT16fHwhMCE9PUQmJnQ9PT1TfHxudC5zZXRTdGF0ZShuLHQsdD09PVMmJm4uaWQ9PT13KSxuLnZlcnNpb249PT1sLl9fdmVyc2lvbj9uLmZvZyYmbC5mb2chPT1yfHxsLmVudmlyb25tZW50IT09b3x8bC5uZWVkc0xpZ2h0cyYmbC5saWdodHNTdGF0ZVZlcnNpb24hPT1jLnN0YXRlLnZlcnNpb24/U3QobixlLGkpOnZvaWQgMD09PWwubnVtQ2xpcHBpbmdQbGFuZXN8fGwubnVtQ2xpcHBpbmdQbGFuZXM9PT1udC5udW1QbGFuZXMmJmwubnVtSW50ZXJzZWN0aW9uPT09bnQubnVtSW50ZXJzZWN0aW9uPyhsLm91dHB1dEVuY29kaW5nIT09YXx8bC5lbnZNYXAhPT1zKSYmU3QobixlLGkpOlN0KG4sZSxpKTooU3QobixlLGkpLGwuX192ZXJzaW9uPW4udmVyc2lvbik7bGV0IHU9ITEsaD0hMSxkPSExO2NvbnN0IGY9bC5wcm9ncmFtLGc9Zi5nZXRVbmlmb3JtcygpLF89bC51bmlmb3JtcztpZihHLnVzZVByb2dyYW0oZi5wcm9ncmFtKSYmKHU9ITAsaD0hMCxkPSEwKSxuLmlkIT09dyYmKHc9bi5pZCxoPSEwKSx1fHxTIT09dCl7aWYoZy5zZXRWYWx1ZShjdCwicHJvamVjdGlvbk1hdHJpeCIsdC5wcm9qZWN0aW9uTWF0cml4KSxqLmxvZ2FyaXRobWljRGVwdGhCdWZmZXImJmcuc2V0VmFsdWUoY3QsImxvZ0RlcHRoQnVmRkMiLDIvKE1hdGgubG9nKHQuZmFyKzEpL01hdGguTE4yKSksUyE9PXQmJihTPXQsaD0hMCxkPSEwKSxuLmlzU2hhZGVyTWF0ZXJpYWx8fG4uaXNNZXNoUGhvbmdNYXRlcmlhbHx8bi5pc01lc2hUb29uTWF0ZXJpYWx8fG4uaXNNZXNoU3RhbmRhcmRNYXRlcmlhbHx8bi5lbnZNYXApe2NvbnN0IGU9Zy5tYXAuY2FtZXJhUG9zaXRpb247dm9pZCAwIT09ZSYmZS5zZXRWYWx1ZShjdCxILnNldEZyb21NYXRyaXhQb3NpdGlvbih0Lm1hdHJpeFdvcmxkKSl9KG4uaXNNZXNoUGhvbmdNYXRlcmlhbHx8bi5pc01lc2hUb29uTWF0ZXJpYWx8fG4uaXNNZXNoTGFtYmVydE1hdGVyaWFsfHxuLmlzTWVzaEJhc2ljTWF0ZXJpYWx8fG4uaXNNZXNoU3RhbmRhcmRNYXRlcmlhbHx8bi5pc1NoYWRlck1hdGVyaWFsKSYmZy5zZXRWYWx1ZShjdCwiaXNPcnRob2dyYXBoaWMiLCEwPT09dC5pc09ydGhvZ3JhcGhpY0NhbWVyYSksKG4uaXNNZXNoUGhvbmdNYXRlcmlhbHx8bi5pc01lc2hUb29uTWF0ZXJpYWx8fG4uaXNNZXNoTGFtYmVydE1hdGVyaWFsfHxuLmlzTWVzaEJhc2ljTWF0ZXJpYWx8fG4uaXNNZXNoU3RhbmRhcmRNYXRlcmlhbHx8bi5pc1NoYWRlck1hdGVyaWFsfHxuLmlzU2hhZG93TWF0ZXJpYWx8fG4uc2tpbm5pbmcpJiZnLnNldFZhbHVlKGN0LCJ2aWV3TWF0cml4Iix0Lm1hdHJpeFdvcmxkSW52ZXJzZSl9aWYobi5za2lubmluZyl7Zy5zZXRPcHRpb25hbChjdCxpLCJiaW5kTWF0cml4IiksZy5zZXRPcHRpb25hbChjdCxpLCJiaW5kTWF0cml4SW52ZXJzZSIpO2NvbnN0IHQ9aS5za2VsZXRvbjtpZih0KXtjb25zdCBlPXQuYm9uZXM7aWYoai5mbG9hdFZlcnRleFRleHR1cmVzKXtpZihudWxsPT09dC5ib25lVGV4dHVyZSl7bGV0IG49TWF0aC5zcXJ0KDQqZS5sZW5ndGgpO249Uk90LmNlaWxQb3dlck9mVHdvKG4pLG49TWF0aC5tYXgobiw0KTtjb25zdCBpPW5ldyBGbG9hdDMyQXJyYXkobipuKjQpO2kuc2V0KHQuYm9uZU1hdHJpY2VzKTtjb25zdCByPW5ldyB5RHQoaSxuLG4sdE90LEtJdCk7dC5ib25lTWF0cmljZXM9aSx0LmJvbmVUZXh0dXJlPXIsdC5ib25lVGV4dHVyZVNpemU9bn1nLnNldFZhbHVlKGN0LCJib25lVGV4dHVyZSIsdC5ib25lVGV4dHVyZSxZKSxnLnNldFZhbHVlKGN0LCJib25lVGV4dHVyZVNpemUiLHQuYm9uZVRleHR1cmVTaXplKX1lbHNlIGcuc2V0T3B0aW9uYWwoY3QsdCwiYm9uZU1hdHJpY2VzIil9fXJldHVybihofHxsLnJlY2VpdmVTaGFkb3chPT1pLnJlY2VpdmVTaGFkb3cpJiYobC5yZWNlaXZlU2hhZG93PWkucmVjZWl2ZVNoYWRvdyxnLnNldFZhbHVlKGN0LCJyZWNlaXZlU2hhZG93IixpLnJlY2VpdmVTaGFkb3cpKSxoJiYoZy5zZXRWYWx1ZShjdCwidG9uZU1hcHBpbmdFeHBvc3VyZSIsbS50b25lTWFwcGluZ0V4cG9zdXJlKSxsLm5lZWRzTGlnaHRzJiYoZnVuY3Rpb24geSh0LGUpe3QuYW1iaWVudExpZ2h0Q29sb3IubmVlZHNVcGRhdGU9ZSx0LmxpZ2h0UHJvYmUubmVlZHNVcGRhdGU9ZSx0LmRpcmVjdGlvbmFsTGlnaHRzLm5lZWRzVXBkYXRlPWUsdC5kaXJlY3Rpb25hbExpZ2h0U2hhZG93cy5uZWVkc1VwZGF0ZT1lLHQucG9pbnRMaWdodHMubmVlZHNVcGRhdGU9ZSx0LnBvaW50TGlnaHRTaGFkb3dzLm5lZWRzVXBkYXRlPWUsdC5zcG90TGlnaHRzLm5lZWRzVXBkYXRlPWUsdC5zcG90TGlnaHRTaGFkb3dzLm5lZWRzVXBkYXRlPWUsdC5yZWN0QXJlYUxpZ2h0cy5uZWVkc1VwZGF0ZT1lLHQuaGVtaXNwaGVyZUxpZ2h0cy5uZWVkc1VwZGF0ZT1lfSkoXyxkKSxyJiZuLmZvZyYmUS5yZWZyZXNoRm9nVW5pZm9ybXMoXyxyKSxRLnJlZnJlc2hNYXRlcmlhbFVuaWZvcm1zKF8sbixrLEEpLEJCdC51cGxvYWQoY3QsbC51bmlmb3Jtc0xpc3QsXyxZKSksbi5pc1NoYWRlck1hdGVyaWFsJiYhMD09PW4udW5pZm9ybXNOZWVkVXBkYXRlJiYoQkJ0LnVwbG9hZChjdCxsLnVuaWZvcm1zTGlzdCxfLFkpLG4udW5pZm9ybXNOZWVkVXBkYXRlPSExKSxuLmlzU3ByaXRlTWF0ZXJpYWwmJmcuc2V0VmFsdWUoY3QsImNlbnRlciIsaS5jZW50ZXIpLGcuc2V0VmFsdWUoY3QsIm1vZGVsVmlld01hdHJpeCIsaS5tb2RlbFZpZXdNYXRyaXgpLGcuc2V0VmFsdWUoY3QsIm5vcm1hbE1hdHJpeCIsaS5ub3JtYWxNYXRyaXgpLGcuc2V0VmFsdWUoY3QsIm1vZGVsTWF0cml4IixpLm1hdHJpeFdvcmxkKSxmfXZ0LnNldEFuaW1hdGlvbkxvb3AoKGZ1bmN0aW9uIEV0KHQpe2R0LmlzUHJlc2VudGluZ3x8eXQmJnl0KHQpfSkpLCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZ2dC5zZXRDb250ZXh0KHdpbmRvdyksdGhpcy5zZXRBbmltYXRpb25Mb29wPWZ1bmN0aW9uKHQpe3l0PXQsZHQuc2V0QW5pbWF0aW9uTG9vcCh0KSxudWxsPT09dD92dC5zdG9wKCk6dnQuc3RhcnQoKX0sdGhpcy5yZW5kZXI9ZnVuY3Rpb24odCxlKXtsZXQgbixpO2lmKHZvaWQgMCE9PWFyZ3VtZW50c1syXSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZW5kZXIoKTogdGhlIHJlbmRlclRhcmdldCBhcmd1bWVudCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnNldFJlbmRlclRhcmdldCgpIGluc3RlYWQuIiksbj1hcmd1bWVudHNbMl0pLHZvaWQgMCE9PWFyZ3VtZW50c1szXSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZW5kZXIoKTogdGhlIGZvcmNlQ2xlYXIgYXJndW1lbnQgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5jbGVhcigpIGluc3RlYWQuIiksaT1hcmd1bWVudHNbM10pLHZvaWQgMCE9PWUmJiEwIT09ZS5pc0NhbWVyYSlyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlbmRlcjogY2FtZXJhIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5DYW1lcmEuIik7aWYoITA9PT1nKXJldHVybjtsdC5yZXNldERlZmF1bHRTdGF0ZSgpLHc9LTEsUz1udWxsLCEwPT09dC5hdXRvVXBkYXRlJiZ0LnVwZGF0ZU1hdHJpeFdvcmxkKCksbnVsbD09PWUucGFyZW50JiZlLnVwZGF0ZU1hdHJpeFdvcmxkKCksITA9PT1kdC5lbmFibGVkJiYhMD09PWR0LmlzUHJlc2VudGluZyYmKGU9ZHQuZ2V0Q2FtZXJhKGUpKSwhMD09PXQuaXNTY2VuZSYmdC5vbkJlZm9yZVJlbmRlcihtLHQsZSxufHxiKSxwPWV0LmdldCh0LGYubGVuZ3RoKSxwLmluaXQoKSxmLnB1c2gocCksQi5tdWx0aXBseU1hdHJpY2VzKGUucHJvamVjdGlvbk1hdHJpeCxlLm1hdHJpeFdvcmxkSW52ZXJzZSksUi5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeChCKSxEPXRoaXMubG9jYWxDbGlwcGluZ0VuYWJsZWQsej1udC5pbml0KHRoaXMuY2xpcHBpbmdQbGFuZXMsRCxlKSxkPXR0LmdldCh0LGUpLGQuaW5pdCgpLGJ0KHQsZSwwLG0uc29ydE9iamVjdHMpLGQuZmluaXNoKCksITA9PT1tLnNvcnRPYmplY3RzJiZkLnNvcnQoTCxQKSwhMD09PXomJm50LmJlZ2luU2hhZG93cygpO2NvbnN0IHI9cC5zdGF0ZS5zaGFkb3dzQXJyYXk7cHQucmVuZGVyKHIsdCxlKSxwLnNldHVwTGlnaHRzKCkscC5zZXR1cExpZ2h0c1ZpZXcoZSksITA9PT16JiZudC5lbmRTaGFkb3dzKCksITA9PT10aGlzLmluZm8uYXV0b1Jlc2V0JiZ0aGlzLmluZm8ucmVzZXQoKSx2b2lkIDAhPT1uJiZ0aGlzLnNldFJlbmRlclRhcmdldChuKSxpdC5yZW5kZXIoZCx0LGUsaSk7Y29uc3Qgbz1kLm9wYXF1ZSxhPWQudHJhbnNwYXJlbnQ7by5sZW5ndGg+MCYmeHQobyx0LGUpLGEubGVuZ3RoPjAmJnh0KGEsdCxlKSwhMD09PXQuaXNTY2VuZSYmdC5vbkFmdGVyUmVuZGVyKG0sdCxlKSxudWxsIT09YiYmKFkudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwKGIpLFkudXBkYXRlTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQoYikpLEcuYnVmZmVycy5kZXB0aC5zZXRUZXN0KCEwKSxHLmJ1ZmZlcnMuZGVwdGguc2V0TWFzayghMCksRy5idWZmZXJzLmNvbG9yLnNldE1hc2soITApLEcuc2V0UG9seWdvbk9mZnNldCghMSksZi5wb3AoKSxwPWYubGVuZ3RoPjA/ZltmLmxlbmd0aC0xXTpudWxsLGQ9bnVsbH0sdGhpcy5zZXRGcmFtZWJ1ZmZlcj1mdW5jdGlvbih0KXtfIT09dCYmbnVsbD09PWImJmN0LmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCx0KSxfPXR9LHRoaXMuZ2V0QWN0aXZlQ3ViZUZhY2U9ZnVuY3Rpb24oKXtyZXR1cm4geX0sdGhpcy5nZXRBY3RpdmVNaXBtYXBMZXZlbD1mdW5jdGlvbigpe3JldHVybiB2fSx0aGlzLmdldFJlbmRlckxpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gZH0sdGhpcy5zZXRSZW5kZXJMaXN0PWZ1bmN0aW9uKHQpe2Q9dH0sdGhpcy5nZXRSZW5kZXJUYXJnZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gYn0sdGhpcy5zZXRSZW5kZXJUYXJnZXQ9ZnVuY3Rpb24odCxlPTAsbj0wKXtiPXQseT1lLHY9bix0JiZ2b2lkIDA9PT1xLmdldCh0KS5fX3dlYmdsRnJhbWVidWZmZXImJlkuc2V0dXBSZW5kZXJUYXJnZXQodCk7bGV0IGk9XyxyPSExO2lmKHQpe2NvbnN0IG49cS5nZXQodCkuX193ZWJnbEZyYW1lYnVmZmVyO3QuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQ/KGk9bltlXSxyPSEwKTppPXQuaXNXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0P3EuZ2V0KHQpLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlcjpuLE0uY29weSh0LnZpZXdwb3J0KSxFLmNvcHkodC5zY2lzc29yKSxUPXQuc2Npc3NvclRlc3R9ZWxzZSBNLmNvcHkoTikubXVsdGlwbHlTY2FsYXIoaykuZmxvb3IoKSxFLmNvcHkoSSkubXVsdGlwbHlTY2FsYXIoaykuZmxvb3IoKSxUPU87aWYoeCE9PWkmJihjdC5iaW5kRnJhbWVidWZmZXIoMzYxNjAsaSkseD1pKSxHLnZpZXdwb3J0KE0pLEcuc2Npc3NvcihFKSxHLnNldFNjaXNzb3JUZXN0KFQpLHIpe2NvbnN0IGk9cS5nZXQodC50ZXh0dXJlKTtjdC5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzNjA2NCwzNDA2OStlLGkuX193ZWJnbFRleHR1cmUsbil9fSx0aGlzLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM9ZnVuY3Rpb24odCxlLG4saSxyLG8sYSl7aWYoIXR8fCF0LmlzV2ViR0xSZW5kZXJUYXJnZXQpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZW5kZXJUYXJnZXQgaXMgbm90IFRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0LiIpO2xldCBzPXEuZ2V0KHQpLl9fd2ViZ2xGcmFtZWJ1ZmZlcjtpZih0LmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0JiZ2b2lkIDAhPT1hJiYocz1zW2FdKSxzKXtsZXQgYT0hMTtzIT09eCYmKGN0LmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxzKSxhPSEwKTt0cnl7Y29uc3Qgcz10LnRleHR1cmUsbD1zLmZvcm1hdCxjPXMudHlwZTtpZihsIT09dE90JiZzdC5jb252ZXJ0KGwpIT09Y3QuZ2V0UGFyYW1ldGVyKDM1NzM5KSlyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM6IHJlbmRlclRhcmdldCBpcyBub3QgaW4gUkdCQSBvciBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkIGZvcm1hdC4iKTtjb25zdCB1PWM9PT1aSXQmJihVLmhhcygiRVhUX2NvbG9yX2J1ZmZlcl9oYWxmX2Zsb2F0Iil8fGouaXNXZWJHTDImJlUuaGFzKCJFWFRfY29sb3JfYnVmZmVyX2Zsb2F0IikpO2lmKCEoYz09PVlJdHx8c3QuY29udmVydChjKT09PWN0LmdldFBhcmFtZXRlcigzNTczOCl8fGM9PT1LSXQmJihqLmlzV2ViR0wyfHxVLmhhcygiT0VTX3RleHR1cmVfZmxvYXQiKXx8VS5oYXMoIldFQkdMX2NvbG9yX2J1ZmZlcl9mbG9hdCIpKXx8dSkpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZW5kZXJUYXJnZXQgaXMgbm90IGluIFVuc2lnbmVkQnl0ZVR5cGUgb3IgaW1wbGVtZW50YXRpb24gZGVmaW5lZCB0eXBlLiIpOzM2MDUzPT09Y3QuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cygzNjE2MCk/ZT49MCYmZTw9dC53aWR0aC1pJiZuPj0wJiZuPD10LmhlaWdodC1yJiZjdC5yZWFkUGl4ZWxzKGUsbixpLHIsc3QuY29udmVydChsKSxzdC5jb252ZXJ0KGMpLG8pOmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXIucmVhZFJlbmRlclRhcmdldFBpeGVsczogcmVhZFBpeGVscyBmcm9tIHJlbmRlclRhcmdldCBmYWlsZWQuIEZyYW1lYnVmZmVyIG5vdCBjb21wbGV0ZS4iKX1maW5hbGx5e2EmJmN0LmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCx4KX19fSx0aGlzLmNvcHlGcmFtZWJ1ZmZlclRvVGV4dHVyZT1mdW5jdGlvbih0LGUsbj0wKXtjb25zdCBpPU1hdGgucG93KDIsLW4pLHI9TWF0aC5mbG9vcihlLmltYWdlLndpZHRoKmkpLG89TWF0aC5mbG9vcihlLmltYWdlLmhlaWdodCppKSxhPXN0LmNvbnZlcnQoZS5mb3JtYXQpO1kuc2V0VGV4dHVyZTJEKGUsMCksY3QuY29weVRleEltYWdlMkQoMzU1MyxuLGEsdC54LHQueSxyLG8sMCksRy51bmJpbmRUZXh0dXJlKCl9LHRoaXMuY29weVRleHR1cmVUb1RleHR1cmU9ZnVuY3Rpb24odCxlLG4saT0wKXtjb25zdCByPWUuaW1hZ2Uud2lkdGgsbz1lLmltYWdlLmhlaWdodCxhPXN0LmNvbnZlcnQobi5mb3JtYXQpLHM9c3QuY29udmVydChuLnR5cGUpO1kuc2V0VGV4dHVyZTJEKG4sMCksY3QucGl4ZWxTdG9yZWkoMzc0NDAsbi5mbGlwWSksY3QucGl4ZWxTdG9yZWkoMzc0NDEsbi5wcmVtdWx0aXBseUFscGhhKSxjdC5waXhlbFN0b3JlaSgzMzE3LG4udW5wYWNrQWxpZ25tZW50KSxlLmlzRGF0YVRleHR1cmU/Y3QudGV4U3ViSW1hZ2UyRCgzNTUzLGksdC54LHQueSxyLG8sYSxzLGUuaW1hZ2UuZGF0YSk6ZS5pc0NvbXByZXNzZWRUZXh0dXJlP2N0LmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKDM1NTMsaSx0LngsdC55LGUubWlwbWFwc1swXS53aWR0aCxlLm1pcG1hcHNbMF0uaGVpZ2h0LGEsZS5taXBtYXBzWzBdLmRhdGEpOmN0LnRleFN1YkltYWdlMkQoMzU1MyxpLHQueCx0LnksYSxzLGUuaW1hZ2UpLDA9PT1pJiZuLmdlbmVyYXRlTWlwbWFwcyYmY3QuZ2VuZXJhdGVNaXBtYXAoMzU1MyksRy51bmJpbmRUZXh0dXJlKCl9LHRoaXMuaW5pdFRleHR1cmU9ZnVuY3Rpb24odCl7WS5zZXRUZXh0dXJlMkQodCwwKSxHLnVuYmluZFRleHR1cmUoKX0sdGhpcy5yZXNldFN0YXRlPWZ1bmN0aW9uKCl7Ry5yZXNldCgpLGx0LnJlc2V0KCl9LCJ1bmRlZmluZWQiIT10eXBlb2YgX19USFJFRV9ERVZUT09MU19fJiZfX1RIUkVFX0RFVlRPT0xTX18uZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoIm9ic2VydmUiLHtkZXRhaWw6dGhpc30pKX1mdW5jdGlvbiBrSHQodCl7QUh0LmNhbGwodGhpcyx0KX0oX0h0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGd6dC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1fSHQsX0h0LnByb3RvdHlwZS5pc01lc2hEZXB0aE1hdGVyaWFsPSEwLF9IdC5wcm90b3R5cGUuY29weT1mdW5jdGlvbih0KXtyZXR1cm4gZ3p0LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLmRlcHRoUGFja2luZz10LmRlcHRoUGFja2luZyx0aGlzLnNraW5uaW5nPXQuc2tpbm5pbmcsdGhpcy5tb3JwaFRhcmdldHM9dC5tb3JwaFRhcmdldHMsdGhpcy5tYXA9dC5tYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXN9LCh5SHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZ3p0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPXlIdCx5SHQucHJvdG90eXBlLmlzTWVzaERpc3RhbmNlTWF0ZXJpYWw9ITAseUh0LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHQpe3JldHVybiBnenQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMucmVmZXJlbmNlUG9zaXRpb24uY29weSh0LnJlZmVyZW5jZVBvc2l0aW9uKSx0aGlzLm5lYXJEaXN0YW5jZT10Lm5lYXJEaXN0YW5jZSx0aGlzLmZhckRpc3RhbmNlPXQuZmFyRGlzdGFuY2UsdGhpcy5za2lubmluZz10LnNraW5uaW5nLHRoaXMubW9ycGhUYXJnZXRzPXQubW9ycGhUYXJnZXRzLHRoaXMubWFwPXQubWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzfSxTSHQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShwRHQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6U0h0LGlzQXJyYXlDYW1lcmE6ITB9KSxNSHQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShXUnQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6TUh0LGlzR3JvdXA6ITB9KSxPYmplY3QuYXNzaWduKEVIdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOkVIdCxnZXRIYW5kU3BhY2U6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09PXRoaXMuX2hhbmQmJih0aGlzLl9oYW5kPW5ldyBNSHQsdGhpcy5faGFuZC5tYXRyaXhBdXRvVXBkYXRlPSExLHRoaXMuX2hhbmQudmlzaWJsZT0hMSx0aGlzLl9oYW5kLmpvaW50cz17fSx0aGlzLl9oYW5kLmlucHV0U3RhdGU9e3BpbmNoaW5nOiExfSksdGhpcy5faGFuZH0sZ2V0VGFyZ2V0UmF5U3BhY2U6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09PXRoaXMuX3RhcmdldFJheSYmKHRoaXMuX3RhcmdldFJheT1uZXcgTUh0LHRoaXMuX3RhcmdldFJheS5tYXRyaXhBdXRvVXBkYXRlPSExLHRoaXMuX3RhcmdldFJheS52aXNpYmxlPSExKSx0aGlzLl90YXJnZXRSYXl9LGdldEdyaXBTcGFjZTpmdW5jdGlvbigpe3JldHVybiBudWxsPT09dGhpcy5fZ3JpcCYmKHRoaXMuX2dyaXA9bmV3IE1IdCx0aGlzLl9ncmlwLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5fZ3JpcC52aXNpYmxlPSExKSx0aGlzLl9ncmlwfSxkaXNwYXRjaEV2ZW50OmZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT09dGhpcy5fdGFyZ2V0UmF5JiZ0aGlzLl90YXJnZXRSYXkuZGlzcGF0Y2hFdmVudCh0KSxudWxsIT09dGhpcy5fZ3JpcCYmdGhpcy5fZ3JpcC5kaXNwYXRjaEV2ZW50KHQpLG51bGwhPT10aGlzLl9oYW5kJiZ0aGlzLl9oYW5kLmRpc3BhdGNoRXZlbnQodCksdGhpc30sZGlzY29ubmVjdDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNjb25uZWN0ZWQiLGRhdGE6dH0pLG51bGwhPT10aGlzLl90YXJnZXRSYXkmJih0aGlzLl90YXJnZXRSYXkudmlzaWJsZT0hMSksbnVsbCE9PXRoaXMuX2dyaXAmJih0aGlzLl9ncmlwLnZpc2libGU9ITEpLG51bGwhPT10aGlzLl9oYW5kJiYodGhpcy5faGFuZC52aXNpYmxlPSExKSx0aGlzfSx1cGRhdGU6ZnVuY3Rpb24odCxlLG4pe2xldCBpPW51bGwscj1udWxsLG89bnVsbDtjb25zdCBhPXRoaXMuX3RhcmdldFJheSxzPXRoaXMuX2dyaXAsbD10aGlzLl9oYW5kO2lmKHQmJiJ2aXNpYmxlLWJsdXJyZWQiIT09ZS5zZXNzaW9uLnZpc2liaWxpdHlTdGF0ZSlpZihsJiZ0LmhhbmQpe289ITA7Zm9yKGNvbnN0IGkgb2YgdC5oYW5kLnZhbHVlcygpKXtjb25zdCB0PWUuZ2V0Sm9pbnRQb3NlKGksbik7aWYodm9pZCAwPT09bC5qb2ludHNbaS5qb2ludE5hbWVdKXtjb25zdCB0PW5ldyBNSHQ7dC5tYXRyaXhBdXRvVXBkYXRlPSExLHQudmlzaWJsZT0hMSxsLmpvaW50c1tpLmpvaW50TmFtZV09dCxsLmFkZCh0KX1jb25zdCByPWwuam9pbnRzW2kuam9pbnROYW1lXTtudWxsIT09dCYmKHIubWF0cml4LmZyb21BcnJheSh0LnRyYW5zZm9ybS5tYXRyaXgpLHIubWF0cml4LmRlY29tcG9zZShyLnBvc2l0aW9uLHIucm90YXRpb24sci5zY2FsZSksci5qb2ludFJhZGl1cz10LnJhZGl1cyksci52aXNpYmxlPW51bGwhPT10fWNvbnN0IGk9bC5qb2ludHNbImluZGV4LWZpbmdlci10aXAiXS5wb3NpdGlvbi5kaXN0YW5jZVRvKGwuam9pbnRzWyJ0aHVtYi10aXAiXS5wb3NpdGlvbikscj0uMDIsYT0uMDA1O2wuaW5wdXRTdGF0ZS5waW5jaGluZyYmaT5yK2E/KGwuaW5wdXRTdGF0ZS5waW5jaGluZz0hMSx0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6InBpbmNoZW5kIixoYW5kZWRuZXNzOnQuaGFuZGVkbmVzcyx0YXJnZXQ6dGhpc30pKTohbC5pbnB1dFN0YXRlLnBpbmNoaW5nJiZpPD1yLWEmJihsLmlucHV0U3RhdGUucGluY2hpbmc9ITAsdGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJwaW5jaHN0YXJ0IixoYW5kZWRuZXNzOnQuaGFuZGVkbmVzcyx0YXJnZXQ6dGhpc30pKX1lbHNlIG51bGwhPT1hJiYoaT1lLmdldFBvc2UodC50YXJnZXRSYXlTcGFjZSxuKSxudWxsIT09aSYmKGEubWF0cml4LmZyb21BcnJheShpLnRyYW5zZm9ybS5tYXRyaXgpLGEubWF0cml4LmRlY29tcG9zZShhLnBvc2l0aW9uLGEucm90YXRpb24sYS5zY2FsZSkpKSxudWxsIT09cyYmdC5ncmlwU3BhY2UmJihyPWUuZ2V0UG9zZSh0LmdyaXBTcGFjZSxuKSxudWxsIT09ciYmKHMubWF0cml4LmZyb21BcnJheShyLnRyYW5zZm9ybS5tYXRyaXgpLHMubWF0cml4LmRlY29tcG9zZShzLnBvc2l0aW9uLHMucm90YXRpb24scy5zY2FsZSkpKTtyZXR1cm4gbnVsbCE9PWEmJihhLnZpc2libGU9bnVsbCE9PWkpLG51bGwhPT1zJiYocy52aXNpYmxlPW51bGwhPT1yKSxudWxsIT09bCYmKGwudmlzaWJsZT1udWxsIT09byksdGhpc319KSxPYmplY3QuYXNzaWduKFRIdC5wcm90b3R5cGUsTk90LnByb3RvdHlwZSksa0h0LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoQUh0LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOmtIdCxpc1dlYkdMMVJlbmRlcmVyOiEwfSk7Y2xhc3MgTEh0e2NvbnN0cnVjdG9yKHQsZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlzRm9nRXhwMiIse3ZhbHVlOiEwfSksdGhpcy5uYW1lPSIiLHRoaXMuY29sb3I9bmV3IHB6dCh0KSx0aGlzLmRlbnNpdHk9dm9pZCAwIT09ZT9lOjI1ZS01fWNsb25lKCl7cmV0dXJuIG5ldyBMSHQodGhpcy5jb2xvcix0aGlzLmRlbnNpdHkpfXRvSlNPTigpe3JldHVybnt0eXBlOiJGb2dFeHAyIixjb2xvcjp0aGlzLmNvbG9yLmdldEhleCgpLGRlbnNpdHk6dGhpcy5kZW5zaXR5fX19Y2xhc3MgUEh0e2NvbnN0cnVjdG9yKHQsZSxuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaXNGb2ciLHt2YWx1ZTohMH0pLHRoaXMubmFtZT0iIix0aGlzLmNvbG9yPW5ldyBwenQodCksdGhpcy5uZWFyPXZvaWQgMCE9PWU/ZToxLHRoaXMuZmFyPXZvaWQgMCE9PW4/bjoxZTN9Y2xvbmUoKXtyZXR1cm4gbmV3IFBIdCh0aGlzLmNvbG9yLHRoaXMubmVhcix0aGlzLmZhcil9dG9KU09OKCl7cmV0dXJue3R5cGU6IkZvZyIsY29sb3I6dGhpcy5jb2xvci5nZXRIZXgoKSxuZWFyOnRoaXMubmVhcixmYXI6dGhpcy5mYXJ9fX1jbGFzcyBOSHQgZXh0ZW5kcyBXUnR7Y29uc3RydWN0b3IoKXtzdXBlcigpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpc1NjZW5lIix7dmFsdWU6ITB9KSx0aGlzLnR5cGU9IlNjZW5lIix0aGlzLmJhY2tncm91bmQ9bnVsbCx0aGlzLmVudmlyb25tZW50PW51bGwsdGhpcy5mb2c9bnVsbCx0aGlzLm92ZXJyaWRlTWF0ZXJpYWw9bnVsbCx0aGlzLmF1dG9VcGRhdGU9ITAsInVuZGVmaW5lZCIhPXR5cGVvZiBfX1RIUkVFX0RFVlRPT0xTX18mJl9fVEhSRUVfREVWVE9PTFNfXy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgib2JzZXJ2ZSIse2RldGFpbDp0aGlzfSkpfWNvcHkodCxlKXtyZXR1cm4gc3VwZXIuY29weSh0LGUpLG51bGwhPT10LmJhY2tncm91bmQmJih0aGlzLmJhY2tncm91bmQ9dC5iYWNrZ3JvdW5kLmNsb25lKCkpLG51bGwhPT10LmVudmlyb25tZW50JiYodGhpcy5lbnZpcm9ubWVudD10LmVudmlyb25tZW50LmNsb25lKCkpLG51bGwhPT10LmZvZyYmKHRoaXMuZm9nPXQuZm9nLmNsb25lKCkpLG51bGwhPT10Lm92ZXJyaWRlTWF0ZXJpYWwmJih0aGlzLm92ZXJyaWRlTWF0ZXJpYWw9dC5vdmVycmlkZU1hdGVyaWFsLmNsb25lKCkpLHRoaXMuYXV0b1VwZGF0ZT10LmF1dG9VcGRhdGUsdGhpcy5tYXRyaXhBdXRvVXBkYXRlPXQubWF0cml4QXV0b1VwZGF0ZSx0aGlzfXRvSlNPTih0KXtjb25zdCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gbnVsbCE9PXRoaXMuYmFja2dyb3VuZCYmKGUub2JqZWN0LmJhY2tncm91bmQ9dGhpcy5iYWNrZ3JvdW5kLnRvSlNPTih0KSksbnVsbCE9PXRoaXMuZW52aXJvbm1lbnQmJihlLm9iamVjdC5lbnZpcm9ubWVudD10aGlzLmVudmlyb25tZW50LnRvSlNPTih0KSksbnVsbCE9PXRoaXMuZm9nJiYoZS5vYmplY3QuZm9nPXRoaXMuZm9nLnRvSlNPTigpKSxlfX1mdW5jdGlvbiBJSHQodCxlKXt0aGlzLmFycmF5PXQsdGhpcy5zdHJpZGU9ZSx0aGlzLmNvdW50PXZvaWQgMCE9PXQ/dC5sZW5ndGgvZTowLHRoaXMudXNhZ2U9a090LHRoaXMudXBkYXRlUmFuZ2U9e29mZnNldDowLGNvdW50Oi0xfSx0aGlzLnZlcnNpb249MCx0aGlzLnV1aWQ9Uk90LmdlbmVyYXRlVVVJRCgpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShJSHQucHJvdG90eXBlLCJuZWVkc1VwZGF0ZSIse3NldDpmdW5jdGlvbih0KXshMD09PXQmJnRoaXMudmVyc2lvbisrfX0pLE9iamVjdC5hc3NpZ24oSUh0LnByb3RvdHlwZSx7aXNJbnRlcmxlYXZlZEJ1ZmZlcjohMCxvblVwbG9hZENhbGxiYWNrOmZ1bmN0aW9uKCl7fSxzZXRVc2FnZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy51c2FnZT10LHRoaXN9LGNvcHk6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYXJyYXk9bmV3IHQuYXJyYXkuY29uc3RydWN0b3IodC5hcnJheSksdGhpcy5jb3VudD10LmNvdW50LHRoaXMuc3RyaWRlPXQuc3RyaWRlLHRoaXMudXNhZ2U9dC51c2FnZSx0aGlzfSxjb3B5QXQ6ZnVuY3Rpb24odCxlLG4pe3QqPXRoaXMuc3RyaWRlLG4qPWUuc3RyaWRlO2ZvcihsZXQgaT0wLHI9dGhpcy5zdHJpZGU7aTxyO2krKyl0aGlzLmFycmF5W3QraV09ZS5hcnJheVtuK2ldO3JldHVybiB0aGlzfSxzZXQ6ZnVuY3Rpb24odCxlPTApe3JldHVybiB0aGlzLmFycmF5LnNldCh0LGUpLHRoaXN9LGNsb25lOmZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQuYXJyYXlCdWZmZXJzJiYodC5hcnJheUJ1ZmZlcnM9e30pLHZvaWQgMD09PXRoaXMuYXJyYXkuYnVmZmVyLl91dWlkJiYodGhpcy5hcnJheS5idWZmZXIuX3V1aWQ9Uk90LmdlbmVyYXRlVVVJRCgpKSx2b2lkIDA9PT10LmFycmF5QnVmZmVyc1t0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZF0mJih0LmFycmF5QnVmZmVyc1t0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZF09dGhpcy5hcnJheS5zbGljZSgwKS5idWZmZXIpO2NvbnN0IGU9bmV3IElIdChuZXcgdGhpcy5hcnJheS5jb25zdHJ1Y3Rvcih0LmFycmF5QnVmZmVyc1t0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZF0pLHRoaXMuc3RyaWRlKTtyZXR1cm4gZS5zZXRVc2FnZSh0aGlzLnVzYWdlKSxlfSxvblVwbG9hZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vblVwbG9hZENhbGxiYWNrPXQsdGhpc30sdG9KU09OOmZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10LmFycmF5QnVmZmVycyYmKHQuYXJyYXlCdWZmZXJzPXt9KSx2b2lkIDA9PT10aGlzLmFycmF5LmJ1ZmZlci5fdXVpZCYmKHRoaXMuYXJyYXkuYnVmZmVyLl91dWlkPVJPdC5nZW5lcmF0ZVVVSUQoKSksdm9pZCAwPT09dC5hcnJheUJ1ZmZlcnNbdGhpcy5hcnJheS5idWZmZXIuX3V1aWRdJiYodC5hcnJheUJ1ZmZlcnNbdGhpcy5hcnJheS5idWZmZXIuX3V1aWRdPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG5ldyBVaW50MzJBcnJheSh0aGlzLmFycmF5LmJ1ZmZlcikpKSx7dXVpZDp0aGlzLnV1aWQsYnVmZmVyOnRoaXMuYXJyYXkuYnVmZmVyLl91dWlkLHR5cGU6dGhpcy5hcnJheS5jb25zdHJ1Y3Rvci5uYW1lLHN0cmlkZTp0aGlzLnN0cmlkZX19fSk7Y29uc3QgT0h0PW5ldyBxT3Q7ZnVuY3Rpb24gUkh0KHQsZSxuLGkpe3RoaXMubmFtZT0iIix0aGlzLmRhdGE9dCx0aGlzLml0ZW1TaXplPWUsdGhpcy5vZmZzZXQ9bix0aGlzLm5vcm1hbGl6ZWQ9ITA9PT1pfWZ1bmN0aW9uIHpIdCh0KXtnenQuY2FsbCh0aGlzKSx0aGlzLnR5cGU9IlNwcml0ZU1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBwenQoMTY3NzcyMTUpLHRoaXMubWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMucm90YXRpb249MCx0aGlzLnNpemVBdHRlbnVhdGlvbj0hMCx0aGlzLnRyYW5zcGFyZW50PSEwLHRoaXMuc2V0VmFsdWVzKHQpfWxldCBESHQ7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUkh0LnByb3RvdHlwZSx7Y291bnQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGEuY291bnR9fSxhcnJheTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheX19LG5lZWRzVXBkYXRlOntzZXQ6ZnVuY3Rpb24odCl7dGhpcy5kYXRhLm5lZWRzVXBkYXRlPXR9fX0pLE9iamVjdC5hc3NpZ24oUkh0LnByb3RvdHlwZSx7aXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZTohMCxhcHBseU1hdHJpeDQ6ZnVuY3Rpb24odCl7Zm9yKGxldCBlPTAsbj10aGlzLmRhdGEuY291bnQ7ZTxuO2UrKylPSHQueD10aGlzLmdldFgoZSksT0h0Lnk9dGhpcy5nZXRZKGUpLE9IdC56PXRoaXMuZ2V0WihlKSxPSHQuYXBwbHlNYXRyaXg0KHQpLHRoaXMuc2V0WFlaKGUsT0h0LngsT0h0LnksT0h0LnopO3JldHVybiB0aGlzfSxzZXRYOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXRdPWUsdGhpc30sc2V0WTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzFdPWUsdGhpc30sc2V0WjpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzJdPWUsdGhpc30sc2V0VzpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzNdPWUsdGhpc30sZ2V0WDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldF19LGdldFk6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrMV19LGdldFo6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrMl19LGdldFc6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrM119LHNldFhZOmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5Wyh0PXQqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCkrMF09ZSx0aGlzLmRhdGEuYXJyYXlbdCsxXT1uLHRoaXN9LHNldFhZWjpmdW5jdGlvbih0LGUsbixpKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5Wyh0PXQqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCkrMF09ZSx0aGlzLmRhdGEuYXJyYXlbdCsxXT1uLHRoaXMuZGF0YS5hcnJheVt0KzJdPWksdGhpc30sc2V0WFlaVzpmdW5jdGlvbih0LGUsbixpLHIpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbKHQ9dCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KSswXT1lLHRoaXMuZGF0YS5hcnJheVt0KzFdPW4sdGhpcy5kYXRhLmFycmF5W3QrMl09aSx0aGlzLmRhdGEuYXJyYXlbdCszXT1yLHRoaXN9LGNsb25lOmZ1bmN0aW9uKHQpe2lmKHZvaWQgMD09PXQpe2NvbnNvbGUubG9nKCJUSFJFRS5JbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZS5jbG9uZSgpOiBDbG9uaW5nIGFuIGludGVybGF2ZWQgYnVmZmVyIGF0dHJpYnV0ZSB3aWxsIGRlaW50ZXJsZWF2ZSBidWZmZXIgZGF0YS4iKTtjb25zdCB0PVtdO2ZvcihsZXQgZT0wO2U8dGhpcy5jb3VudDtlKyspe2NvbnN0IG49ZSp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0O2ZvcihsZXQgZT0wO2U8dGhpcy5pdGVtU2l6ZTtlKyspdC5wdXNoKHRoaXMuZGF0YS5hcnJheVtuK2VdKX1yZXR1cm4gbmV3IGJ6dChuZXcgdGhpcy5hcnJheS5jb25zdHJ1Y3Rvcih0KSx0aGlzLml0ZW1TaXplLHRoaXMubm9ybWFsaXplZCl9cmV0dXJuIHZvaWQgMD09PXQuaW50ZXJsZWF2ZWRCdWZmZXJzJiYodC5pbnRlcmxlYXZlZEJ1ZmZlcnM9e30pLHZvaWQgMD09PXQuaW50ZXJsZWF2ZWRCdWZmZXJzW3RoaXMuZGF0YS51dWlkXSYmKHQuaW50ZXJsZWF2ZWRCdWZmZXJzW3RoaXMuZGF0YS51dWlkXT10aGlzLmRhdGEuY2xvbmUodCkpLG5ldyBSSHQodC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdLHRoaXMuaXRlbVNpemUsdGhpcy5vZmZzZXQsdGhpcy5ub3JtYWxpemVkKX0sdG9KU09OOmZ1bmN0aW9uKHQpe2lmKHZvaWQgMD09PXQpe2NvbnNvbGUubG9nKCJUSFJFRS5JbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZS50b0pTT04oKTogU2VyaWFsaXppbmcgYW4gaW50ZXJsYXZlZCBidWZmZXIgYXR0cmlidXRlIHdpbGwgZGVpbnRlcmxlYXZlIGJ1ZmZlciBkYXRhLiIpO2NvbnN0IHQ9W107Zm9yKGxldCBlPTA7ZTx0aGlzLmNvdW50O2UrKyl7Y29uc3Qgbj1lKnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQ7Zm9yKGxldCBlPTA7ZTx0aGlzLml0ZW1TaXplO2UrKyl0LnB1c2godGhpcy5kYXRhLmFycmF5W24rZV0pfXJldHVybntpdGVtU2l6ZTp0aGlzLml0ZW1TaXplLHR5cGU6dGhpcy5hcnJheS5jb25zdHJ1Y3Rvci5uYW1lLGFycmF5OnQsbm9ybWFsaXplZDp0aGlzLm5vcm1hbGl6ZWR9fXJldHVybiB2b2lkIDA9PT10LmludGVybGVhdmVkQnVmZmVycyYmKHQuaW50ZXJsZWF2ZWRCdWZmZXJzPXt9KSx2b2lkIDA9PT10LmludGVybGVhdmVkQnVmZmVyc1t0aGlzLmRhdGEudXVpZF0mJih0LmludGVybGVhdmVkQnVmZmVyc1t0aGlzLmRhdGEudXVpZF09dGhpcy5kYXRhLnRvSlNPTih0KSkse2lzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU6ITAsaXRlbVNpemU6dGhpcy5pdGVtU2l6ZSxkYXRhOnRoaXMuZGF0YS51dWlkLG9mZnNldDp0aGlzLm9mZnNldCxub3JtYWxpemVkOnRoaXMubm9ybWFsaXplZH19fSksKHpIdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShnenQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ekh0LHpIdC5wcm90b3R5cGUuaXNTcHJpdGVNYXRlcmlhbD0hMCx6SHQucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24odCl7cmV0dXJuIGd6dC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubWFwPXQubWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLnJvdGF0aW9uPXQucm90YXRpb24sdGhpcy5zaXplQXR0ZW51YXRpb249dC5zaXplQXR0ZW51YXRpb24sdGhpc307Y29uc3QgQkh0PW5ldyBxT3QsSEh0PW5ldyBxT3QsRkh0PW5ldyBxT3QsVkh0PW5ldyB6T3QsVUh0PW5ldyB6T3Qsakh0PW5ldyBiUnQsR0h0PW5ldyBxT3QsV0h0PW5ldyBxT3QscUh0PW5ldyBxT3QsWUh0PW5ldyB6T3QsWEh0PW5ldyB6T3QsJEh0PW5ldyB6T3Q7ZnVuY3Rpb24gS0h0KHQpe2lmKFdSdC5jYWxsKHRoaXMpLHRoaXMudHlwZT0iU3ByaXRlIix2b2lkIDA9PT1ESHQpe0RIdD1uZXcgVnp0O2NvbnN0IHQ9bmV3IElIdChuZXcgRmxvYXQzMkFycmF5KFstLjUsLS41LDAsMCwwLC41LC0uNSwwLDEsMCwuNSwuNSwwLDEsMSwtLjUsLjUsMCwwLDFdKSw1KTtESHQuc2V0SW5kZXgoWzAsMSwyLDAsMiwzXSksREh0LnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBSSHQodCwzLDAsITEpKSxESHQuc2V0QXR0cmlidXRlKCJ1diIsbmV3IFJIdCh0LDIsMywhMSkpfXRoaXMuZ2VvbWV0cnk9REh0LHRoaXMubWF0ZXJpYWw9dm9pZCAwIT09dD90Om5ldyB6SHQsdGhpcy5jZW50ZXI9bmV3IHpPdCguNSwuNSl9ZnVuY3Rpb24gWkh0KHQsZSxuLGkscixvKXtWSHQuc3ViVmVjdG9ycyh0LG4pLmFkZFNjYWxhciguNSkubXVsdGlwbHkoaSksdm9pZCAwIT09cj8oVUh0Lng9bypWSHQueC1yKlZIdC55LFVIdC55PXIqVkh0LngrbypWSHQueSk6VUh0LmNvcHkoVkh0KSx0LmNvcHkoZSksdC54Kz1VSHQueCx0LnkrPVVIdC55LHQuYXBwbHlNYXRyaXg0KGpIdCl9S0h0LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoV1J0LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOktIdCxpc1Nwcml0ZTohMCxyYXljYXN0OmZ1bmN0aW9uKHQsZSl7bnVsbD09PXQuY2FtZXJhJiZjb25zb2xlLmVycm9yKCdUSFJFRS5TcHJpdGU6ICJSYXljYXN0ZXIuY2FtZXJhIiBuZWVkcyB0byBiZSBzZXQgaW4gb3JkZXIgdG8gcmF5Y2FzdCBhZ2FpbnN0IHNwcml0ZXMuJyksSEh0LnNldEZyb21NYXRyaXhTY2FsZSh0aGlzLm1hdHJpeFdvcmxkKSxqSHQuY29weSh0LmNhbWVyYS5tYXRyaXhXb3JsZCksdGhpcy5tb2RlbFZpZXdNYXRyaXgubXVsdGlwbHlNYXRyaWNlcyh0LmNhbWVyYS5tYXRyaXhXb3JsZEludmVyc2UsdGhpcy5tYXRyaXhXb3JsZCksRkh0LnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1vZGVsVmlld01hdHJpeCksdC5jYW1lcmEuaXNQZXJzcGVjdGl2ZUNhbWVyYSYmITE9PT10aGlzLm1hdGVyaWFsLnNpemVBdHRlbnVhdGlvbiYmSEh0Lm11bHRpcGx5U2NhbGFyKC1GSHQueik7Y29uc3Qgbj10aGlzLm1hdGVyaWFsLnJvdGF0aW9uO2xldCBpLHI7MCE9PW4mJihyPU1hdGguY29zKG4pLGk9TWF0aC5zaW4obikpO2NvbnN0IG89dGhpcy5jZW50ZXI7Wkh0KEdIdC5zZXQoLS41LC0uNSwwKSxGSHQsbyxISHQsaSxyKSxaSHQoV0h0LnNldCguNSwtLjUsMCksRkh0LG8sSEh0LGksciksWkh0KHFIdC5zZXQoLjUsLjUsMCksRkh0LG8sSEh0LGksciksWUh0LnNldCgwLDApLFhIdC5zZXQoMSwwKSwkSHQuc2V0KDEsMSk7bGV0IGE9dC5yYXkuaW50ZXJzZWN0VHJpYW5nbGUoR0h0LFdIdCxxSHQsITEsQkh0KTtpZihudWxsPT09YSYmKFpIdChXSHQuc2V0KC0uNSwuNSwwKSxGSHQsbyxISHQsaSxyKSxYSHQuc2V0KDAsMSksYT10LnJheS5pbnRlcnNlY3RUcmlhbmdsZShHSHQscUh0LFdIdCwhMSxCSHQpLG51bGw9PT1hKSlyZXR1cm47Y29uc3Qgcz10LnJheS5vcmlnaW4uZGlzdGFuY2VUbyhCSHQpO3M8dC5uZWFyfHxzPnQuZmFyfHxlLnB1c2goe2Rpc3RhbmNlOnMscG9pbnQ6Qkh0LmNsb25lKCksdXY6YXp0LmdldFVWKEJIdCxHSHQsV0h0LHFIdCxZSHQsWEh0LCRIdCxuZXcgek90KSxmYWNlOm51bGwsb2JqZWN0OnRoaXN9KX0sY29weTpmdW5jdGlvbih0KXtyZXR1cm4gV1J0LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx2b2lkIDAhPT10LmNlbnRlciYmdGhpcy5jZW50ZXIuY29weSh0LmNlbnRlciksdGhpcy5tYXRlcmlhbD10Lm1hdGVyaWFsLHRoaXN9fSk7Y29uc3QgSkh0PW5ldyBxT3QsUUh0PW5ldyBxT3Q7ZnVuY3Rpb24gdEZ0KCl7V1J0LmNhbGwodGhpcyksdGhpcy5fY3VycmVudExldmVsPTAsdGhpcy50eXBlPSJMT0QiLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMse2xldmVsczp7ZW51bWVyYWJsZTohMCx2YWx1ZTpbXX19KSx0aGlzLmF1dG9VcGRhdGU9ITB9dEZ0LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoV1J0LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOnRGdCxpc0xPRDohMCxjb3B5OmZ1bmN0aW9uKHQpe1dSdC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCwhMSk7Y29uc3QgZT10LmxldmVscztmb3IobGV0IHQ9MCxuPWUubGVuZ3RoO3Q8bjt0Kyspe2NvbnN0IG49ZVt0XTt0aGlzLmFkZExldmVsKG4ub2JqZWN0LmNsb25lKCksbi5kaXN0YW5jZSl9cmV0dXJuIHRoaXMuYXV0b1VwZGF0ZT10LmF1dG9VcGRhdGUsdGhpc30sYWRkTGV2ZWw6ZnVuY3Rpb24odCxlPTApe2U9TWF0aC5hYnMoZSk7Y29uc3Qgbj10aGlzLmxldmVscztsZXQgaTtmb3IoaT0wO2k8bi5sZW5ndGgmJiEoZTxuW2ldLmRpc3RhbmNlKTtpKyspO3JldHVybiBuLnNwbGljZShpLDAse2Rpc3RhbmNlOmUsb2JqZWN0OnR9KSx0aGlzLmFkZCh0KSx0aGlzfSxnZXRDdXJyZW50TGV2ZWw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY3VycmVudExldmVsfSxnZXRPYmplY3RGb3JEaXN0YW5jZTpmdW5jdGlvbih0KXtjb25zdCBlPXRoaXMubGV2ZWxzO2lmKGUubGVuZ3RoPjApe2xldCBuLGk7Zm9yKG49MSxpPWUubGVuZ3RoO248aSYmISh0PGVbbl0uZGlzdGFuY2UpO24rKyk7cmV0dXJuIGVbbi0xXS5vYmplY3R9cmV0dXJuIG51bGx9LHJheWNhc3Q6ZnVuY3Rpb24odCxlKXtpZih0aGlzLmxldmVscy5sZW5ndGg+MCl7Skh0LnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1hdHJpeFdvcmxkKTtjb25zdCBuPXQucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKEpIdCk7dGhpcy5nZXRPYmplY3RGb3JEaXN0YW5jZShuKS5yYXljYXN0KHQsZSl9fSx1cGRhdGU6ZnVuY3Rpb24odCl7Y29uc3QgZT10aGlzLmxldmVscztpZihlLmxlbmd0aD4xKXtKSHQuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHQubWF0cml4V29ybGQpLFFIdC5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5tYXRyaXhXb3JsZCk7Y29uc3Qgbj1KSHQuZGlzdGFuY2VUbyhRSHQpL3Quem9vbTtsZXQgaSxyO2ZvcihlWzBdLm9iamVjdC52aXNpYmxlPSEwLGk9MSxyPWUubGVuZ3RoO2k8ciYmbj49ZVtpXS5kaXN0YW5jZTtpKyspZVtpLTFdLm9iamVjdC52aXNpYmxlPSExLGVbaV0ub2JqZWN0LnZpc2libGU9ITA7Zm9yKHRoaXMuX2N1cnJlbnRMZXZlbD1pLTE7aTxyO2krKyllW2ldLm9iamVjdC52aXNpYmxlPSExfX0sdG9KU09OOmZ1bmN0aW9uKHQpe2NvbnN0IGU9V1J0LnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzLHQpOyExPT09dGhpcy5hdXRvVXBkYXRlJiYoZS5vYmplY3QuYXV0b1VwZGF0ZT0hMSksZS5vYmplY3QubGV2ZWxzPVtdO2NvbnN0IG49dGhpcy5sZXZlbHM7Zm9yKGxldCB0PTAsaT1uLmxlbmd0aDt0PGk7dCsrKXtjb25zdCBpPW5bdF07ZS5vYmplY3QubGV2ZWxzLnB1c2goe29iamVjdDppLm9iamVjdC51dWlkLGRpc3RhbmNlOmkuZGlzdGFuY2V9KX1yZXR1cm4gZX19KTtjb25zdCBlRnQ9bmV3IHFPdCxuRnQ9bmV3IGpPdCxpRnQ9bmV3IGpPdCxyRnQ9bmV3IHFPdCxvRnQ9bmV3IGJSdDtmdW5jdGlvbiBhRnQodCxlKXt0JiZ0LmlzR2VvbWV0cnkmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLlNraW5uZWRNZXNoIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIiksb0R0LmNhbGwodGhpcyx0LGUpLHRoaXMudHlwZT0iU2tpbm5lZE1lc2giLHRoaXMuYmluZE1vZGU9ImF0dGFjaGVkIix0aGlzLmJpbmRNYXRyaXg9bmV3IGJSdCx0aGlzLmJpbmRNYXRyaXhJbnZlcnNlPW5ldyBiUnR9ZnVuY3Rpb24gc0Z0KCl7V1J0LmNhbGwodGhpcyksdGhpcy50eXBlPSJCb25lIn1hRnQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShvRHQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6YUZ0LGlzU2tpbm5lZE1lc2g6ITAsY29weTpmdW5jdGlvbih0KXtyZXR1cm4gb0R0LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLmJpbmRNb2RlPXQuYmluZE1vZGUsdGhpcy5iaW5kTWF0cml4LmNvcHkodC5iaW5kTWF0cml4KSx0aGlzLmJpbmRNYXRyaXhJbnZlcnNlLmNvcHkodC5iaW5kTWF0cml4SW52ZXJzZSksdGhpcy5za2VsZXRvbj10LnNrZWxldG9uLHRoaXN9LGJpbmQ6ZnVuY3Rpb24odCxlKXt0aGlzLnNrZWxldG9uPXQsdm9pZCAwPT09ZSYmKHRoaXMudXBkYXRlTWF0cml4V29ybGQoITApLHRoaXMuc2tlbGV0b24uY2FsY3VsYXRlSW52ZXJzZXMoKSxlPXRoaXMubWF0cml4V29ybGQpLHRoaXMuYmluZE1hdHJpeC5jb3B5KGUpLHRoaXMuYmluZE1hdHJpeEludmVyc2UuY29weShlKS5pbnZlcnQoKX0scG9zZTpmdW5jdGlvbigpe3RoaXMuc2tlbGV0b24ucG9zZSgpfSxub3JtYWxpemVTa2luV2VpZ2h0czpmdW5jdGlvbigpe2NvbnN0IHQ9bmV3IGpPdCxlPXRoaXMuZ2VvbWV0cnkuYXR0cmlidXRlcy5za2luV2VpZ2h0O2ZvcihsZXQgbj0wLGk9ZS5jb3VudDtuPGk7bisrKXt0Lng9ZS5nZXRYKG4pLHQueT1lLmdldFkobiksdC56PWUuZ2V0WihuKSx0Lnc9ZS5nZXRXKG4pO2NvbnN0IGk9MS90Lm1hbmhhdHRhbkxlbmd0aCgpO2khPT0xLzA/dC5tdWx0aXBseVNjYWxhcihpKTp0LnNldCgxLDAsMCwwKSxlLnNldFhZWlcobix0LngsdC55LHQueix0LncpfX0sdXBkYXRlTWF0cml4V29ybGQ6ZnVuY3Rpb24odCl7b0R0LnByb3RvdHlwZS51cGRhdGVNYXRyaXhXb3JsZC5jYWxsKHRoaXMsdCksImF0dGFjaGVkIj09PXRoaXMuYmluZE1vZGU/dGhpcy5iaW5kTWF0cml4SW52ZXJzZS5jb3B5KHRoaXMubWF0cml4V29ybGQpLmludmVydCgpOiJkZXRhY2hlZCI9PT10aGlzLmJpbmRNb2RlP3RoaXMuYmluZE1hdHJpeEludmVyc2UuY29weSh0aGlzLmJpbmRNYXRyaXgpLmludmVydCgpOmNvbnNvbGUud2FybigiVEhSRUUuU2tpbm5lZE1lc2g6IFVucmVjb2duaXplZCBiaW5kTW9kZTogIit0aGlzLmJpbmRNb2RlKX0sYm9uZVRyYW5zZm9ybTpmdW5jdGlvbih0LGUpe2NvbnN0IG49dGhpcy5za2VsZXRvbixpPXRoaXMuZ2VvbWV0cnk7bkZ0LmZyb21CdWZmZXJBdHRyaWJ1dGUoaS5hdHRyaWJ1dGVzLnNraW5JbmRleCx0KSxpRnQuZnJvbUJ1ZmZlckF0dHJpYnV0ZShpLmF0dHJpYnV0ZXMuc2tpbldlaWdodCx0KSxlRnQuZnJvbUJ1ZmZlckF0dHJpYnV0ZShpLmF0dHJpYnV0ZXMucG9zaXRpb24sdCkuYXBwbHlNYXRyaXg0KHRoaXMuYmluZE1hdHJpeCksZS5zZXQoMCwwLDApO2ZvcihsZXQgdD0wO3Q8NDt0Kyspe2NvbnN0IGk9aUZ0LmdldENvbXBvbmVudCh0KTtpZigwIT09aSl7Y29uc3Qgcj1uRnQuZ2V0Q29tcG9uZW50KHQpO29GdC5tdWx0aXBseU1hdHJpY2VzKG4uYm9uZXNbcl0ubWF0cml4V29ybGQsbi5ib25lSW52ZXJzZXNbcl0pLGUuYWRkU2NhbGVkVmVjdG9yKHJGdC5jb3B5KGVGdCkuYXBwbHlNYXRyaXg0KG9GdCksaSl9fXJldHVybiBlLmFwcGx5TWF0cml4NCh0aGlzLmJpbmRNYXRyaXhJbnZlcnNlKX19KSxzRnQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShXUnQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6c0Z0LGlzQm9uZTohMH0pO2NvbnN0IGxGdD1uZXcgYlJ0LGNGdD1uZXcgYlJ0O2Z1bmN0aW9uIHVGdCh0PVtdLGU9W10pe3RoaXMudXVpZD1ST3QuZ2VuZXJhdGVVVUlEKCksdGhpcy5ib25lcz10LnNsaWNlKDApLHRoaXMuYm9uZUludmVyc2VzPWUsdGhpcy5ib25lTWF0cmljZXM9bnVsbCx0aGlzLmJvbmVUZXh0dXJlPW51bGwsdGhpcy5ib25lVGV4dHVyZVNpemU9MCx0aGlzLmZyYW1lPS0xLHRoaXMuaW5pdCgpfU9iamVjdC5hc3NpZ24odUZ0LnByb3RvdHlwZSx7aW5pdDpmdW5jdGlvbigpe2NvbnN0IHQ9dGhpcy5ib25lcyxlPXRoaXMuYm9uZUludmVyc2VzO2lmKHRoaXMuYm9uZU1hdHJpY2VzPW5ldyBGbG9hdDMyQXJyYXkoMTYqdC5sZW5ndGgpLDA9PT1lLmxlbmd0aCl0aGlzLmNhbGN1bGF0ZUludmVyc2VzKCk7ZWxzZSBpZih0Lmxlbmd0aCE9PWUubGVuZ3RoKXtjb25zb2xlLndhcm4oIlRIUkVFLlNrZWxldG9uOiBOdW1iZXIgb2YgaW52ZXJzZSBib25lIG1hdHJpY2VzIGRvZXMgbm90IG1hdGNoIGFtb3VudCBvZiBib25lcy4iKSx0aGlzLmJvbmVJbnZlcnNlcz1bXTtmb3IobGV0IHQ9MCxlPXRoaXMuYm9uZXMubGVuZ3RoO3Q8ZTt0KyspdGhpcy5ib25lSW52ZXJzZXMucHVzaChuZXcgYlJ0KX19LGNhbGN1bGF0ZUludmVyc2VzOmZ1bmN0aW9uKCl7dGhpcy5ib25lSW52ZXJzZXMubGVuZ3RoPTA7Zm9yKGxldCB0PTAsZT10aGlzLmJvbmVzLmxlbmd0aDt0PGU7dCsrKXtjb25zdCBlPW5ldyBiUnQ7dGhpcy5ib25lc1t0XSYmZS5jb3B5KHRoaXMuYm9uZXNbdF0ubWF0cml4V29ybGQpLmludmVydCgpLHRoaXMuYm9uZUludmVyc2VzLnB1c2goZSl9fSxwb3NlOmZ1bmN0aW9uKCl7Zm9yKGxldCB0PTAsZT10aGlzLmJvbmVzLmxlbmd0aDt0PGU7dCsrKXtjb25zdCBlPXRoaXMuYm9uZXNbdF07ZSYmZS5tYXRyaXhXb3JsZC5jb3B5KHRoaXMuYm9uZUludmVyc2VzW3RdKS5pbnZlcnQoKX1mb3IobGV0IHQ9MCxlPXRoaXMuYm9uZXMubGVuZ3RoO3Q8ZTt0Kyspe2NvbnN0IGU9dGhpcy5ib25lc1t0XTtlJiYoZS5wYXJlbnQmJmUucGFyZW50LmlzQm9uZT8oZS5tYXRyaXguY29weShlLnBhcmVudC5tYXRyaXhXb3JsZCkuaW52ZXJ0KCksZS5tYXRyaXgubXVsdGlwbHkoZS5tYXRyaXhXb3JsZCkpOmUubWF0cml4LmNvcHkoZS5tYXRyaXhXb3JsZCksZS5tYXRyaXguZGVjb21wb3NlKGUucG9zaXRpb24sZS5xdWF0ZXJuaW9uLGUuc2NhbGUpKX19LHVwZGF0ZTpmdW5jdGlvbigpe2NvbnN0IHQ9dGhpcy5ib25lcyxlPXRoaXMuYm9uZUludmVyc2VzLG49dGhpcy5ib25lTWF0cmljZXMsaT10aGlzLmJvbmVUZXh0dXJlO2ZvcihsZXQgaT0wLHI9dC5sZW5ndGg7aTxyO2krKylsRnQubXVsdGlwbHlNYXRyaWNlcyh0W2ldP3RbaV0ubWF0cml4V29ybGQ6Y0Z0LGVbaV0pLGxGdC50b0FycmF5KG4sMTYqaSk7bnVsbCE9PWkmJihpLm5lZWRzVXBkYXRlPSEwKX0sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHVGdCh0aGlzLmJvbmVzLHRoaXMuYm9uZUludmVyc2VzKX0sZ2V0Qm9uZUJ5TmFtZTpmdW5jdGlvbih0KXtmb3IobGV0IGU9MCxuPXRoaXMuYm9uZXMubGVuZ3RoO2U8bjtlKyspe2NvbnN0IG49dGhpcy5ib25lc1tlXTtpZihuLm5hbWU9PT10KXJldHVybiBufX0sZGlzcG9zZTpmdW5jdGlvbigpe251bGwhPT10aGlzLmJvbmVUZXh0dXJlJiYodGhpcy5ib25lVGV4dHVyZS5kaXNwb3NlKCksdGhpcy5ib25lVGV4dHVyZT1udWxsKX0sZnJvbUpTT046ZnVuY3Rpb24odCxlKXt0aGlzLnV1aWQ9dC51dWlkO2ZvcihsZXQgbj0wLGk9dC5ib25lcy5sZW5ndGg7bjxpO24rKyl7Y29uc3QgaT10LmJvbmVzW25dO2xldCByPWVbaV07dm9pZCAwPT09ciYmKGNvbnNvbGUud2FybigiVEhSRUUuU2tlbGV0b246IE5vIGJvbmUgZm91bmQgd2l0aCBVVUlEOiIsaSkscj1uZXcgc0Z0KSx0aGlzLmJvbmVzLnB1c2gociksdGhpcy5ib25lSW52ZXJzZXMucHVzaCgobmV3IGJSdCkuZnJvbUFycmF5KHQuYm9uZUludmVyc2VzW25dKSl9cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXN9LHRvSlNPTjpmdW5jdGlvbigpe2NvbnN0IHQ9e21ldGFkYXRhOnt2ZXJzaW9uOjQuNSx0eXBlOiJTa2VsZXRvbiIsZ2VuZXJhdG9yOiJTa2VsZXRvbi50b0pTT04ifSxib25lczpbXSxib25lSW52ZXJzZXM6W119O3QudXVpZD10aGlzLnV1aWQ7Y29uc3QgZT10aGlzLmJvbmVzLG49dGhpcy5ib25lSW52ZXJzZXM7Zm9yKGxldCBpPTAscj1lLmxlbmd0aDtpPHI7aSsrKXQuYm9uZXMucHVzaChlW2ldLnV1aWQpLHQuYm9uZUludmVyc2VzLnB1c2gobltpXS50b0FycmF5KCkpO3JldHVybiB0fX0pO2NvbnN0IGhGdD1uZXcgYlJ0LGRGdD1uZXcgYlJ0LHBGdD1bXSxmRnQ9bmV3IG9EdDtmdW5jdGlvbiBtRnQodCxlLG4pe29EdC5jYWxsKHRoaXMsdCxlKSx0aGlzLmluc3RhbmNlTWF0cml4PW5ldyBienQobmV3IEZsb2F0MzJBcnJheSgxNipuKSwxNiksdGhpcy5pbnN0YW5jZUNvbG9yPW51bGwsdGhpcy5jb3VudD1uLHRoaXMuZnJ1c3R1bUN1bGxlZD0hMX1mdW5jdGlvbiBnRnQodCl7Z3p0LmNhbGwodGhpcyksdGhpcy50eXBlPSJMaW5lQmFzaWNNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgcHp0KDE2Nzc3MjE1KSx0aGlzLmxpbmV3aWR0aD0xLHRoaXMubGluZWNhcD0icm91bmQiLHRoaXMubGluZWpvaW49InJvdW5kIix0aGlzLm1vcnBoVGFyZ2V0cz0hMSx0aGlzLnNldFZhbHVlcyh0KX1tRnQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShvRHQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6bUZ0LGlzSW5zdGFuY2VkTWVzaDohMCxjb3B5OmZ1bmN0aW9uKHQpe3JldHVybiBvRHQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMuaW5zdGFuY2VNYXRyaXguY29weSh0Lmluc3RhbmNlTWF0cml4KSxudWxsIT09dC5pbnN0YW5jZUNvbG9yJiYodGhpcy5pbnN0YW5jZUNvbG9yPXQuaW5zdGFuY2VDb2xvci5jbG9uZSgpKSx0aGlzLmNvdW50PXQuY291bnQsdGhpc30sZ2V0Q29sb3JBdDpmdW5jdGlvbih0LGUpe2UuZnJvbUFycmF5KHRoaXMuaW5zdGFuY2VDb2xvci5hcnJheSwzKnQpfSxnZXRNYXRyaXhBdDpmdW5jdGlvbih0LGUpe2UuZnJvbUFycmF5KHRoaXMuaW5zdGFuY2VNYXRyaXguYXJyYXksMTYqdCl9LHJheWNhc3Q6ZnVuY3Rpb24odCxlKXtjb25zdCBuPXRoaXMubWF0cml4V29ybGQsaT10aGlzLmNvdW50O2lmKGZGdC5nZW9tZXRyeT10aGlzLmdlb21ldHJ5LGZGdC5tYXRlcmlhbD10aGlzLm1hdGVyaWFsLHZvaWQgMCE9PWZGdC5tYXRlcmlhbClmb3IobGV0IHI9MDtyPGk7cisrKXt0aGlzLmdldE1hdHJpeEF0KHIsaEZ0KSxkRnQubXVsdGlwbHlNYXRyaWNlcyhuLGhGdCksZkZ0Lm1hdHJpeFdvcmxkPWRGdCxmRnQucmF5Y2FzdCh0LHBGdCk7Zm9yKGxldCB0PTAsbj1wRnQubGVuZ3RoO3Q8bjt0Kyspe2NvbnN0IG49cEZ0W3RdO24uaW5zdGFuY2VJZD1yLG4ub2JqZWN0PXRoaXMsZS5wdXNoKG4pfXBGdC5sZW5ndGg9MH19LHNldENvbG9yQXQ6ZnVuY3Rpb24odCxlKXtudWxsPT09dGhpcy5pbnN0YW5jZUNvbG9yJiYodGhpcy5pbnN0YW5jZUNvbG9yPW5ldyBienQobmV3IEZsb2F0MzJBcnJheSgzKnRoaXMuY291bnQpLDMpKSxlLnRvQXJyYXkodGhpcy5pbnN0YW5jZUNvbG9yLmFycmF5LDMqdCl9LHNldE1hdHJpeEF0OmZ1bmN0aW9uKHQsZSl7ZS50b0FycmF5KHRoaXMuaW5zdGFuY2VNYXRyaXguYXJyYXksMTYqdCl9LHVwZGF0ZU1vcnBoVGFyZ2V0czpmdW5jdGlvbigpe30sZGlzcG9zZTpmdW5jdGlvbigpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX19KSwoZ0Z0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGd6dC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1nRnQsZ0Z0LnByb3RvdHlwZS5pc0xpbmVCYXNpY01hdGVyaWFsPSEwLGdGdC5wcm90b3R5cGUuY29weT1mdW5jdGlvbih0KXtyZXR1cm4gZ3p0LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5saW5ld2lkdGg9dC5saW5ld2lkdGgsdGhpcy5saW5lY2FwPXQubGluZWNhcCx0aGlzLmxpbmVqb2luPXQubGluZWpvaW4sdGhpcy5tb3JwaFRhcmdldHM9dC5tb3JwaFRhcmdldHMsdGhpc307Y29uc3QgX0Z0PW5ldyBxT3QseUZ0PW5ldyBxT3QsdkZ0PW5ldyBiUnQsYkZ0PW5ldyB2UnQseEZ0PW5ldyBoUnQ7ZnVuY3Rpb24gd0Z0KHQ9bmV3IFZ6dCxlPW5ldyBnRnQpe1dSdC5jYWxsKHRoaXMpLHRoaXMudHlwZT0iTGluZSIsdGhpcy5nZW9tZXRyeT10LHRoaXMubWF0ZXJpYWw9ZSx0aGlzLnVwZGF0ZU1vcnBoVGFyZ2V0cygpfXdGdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKFdSdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3Rvcjp3RnQsaXNMaW5lOiEwLGNvcHk6ZnVuY3Rpb24odCl7cmV0dXJuIFdSdC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy5tYXRlcmlhbD10Lm1hdGVyaWFsLHRoaXMuZ2VvbWV0cnk9dC5nZW9tZXRyeSx0aGlzfSxjb21wdXRlTGluZURpc3RhbmNlczpmdW5jdGlvbigpe2NvbnN0IHQ9dGhpcy5nZW9tZXRyeTtpZih0LmlzQnVmZmVyR2VvbWV0cnkpaWYobnVsbD09PXQuaW5kZXgpe2NvbnN0IGU9dC5hdHRyaWJ1dGVzLnBvc2l0aW9uLG49WzBdO2ZvcihsZXQgdD0xLGk9ZS5jb3VudDt0PGk7dCsrKV9GdC5mcm9tQnVmZmVyQXR0cmlidXRlKGUsdC0xKSx5RnQuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLHQpLG5bdF09blt0LTFdLG5bdF0rPV9GdC5kaXN0YW5jZVRvKHlGdCk7dC5zZXRBdHRyaWJ1dGUoImxpbmVEaXN0YW5jZSIsbmV3IGt6dChuLDEpKX1lbHNlIGNvbnNvbGUud2FybigiVEhSRUUuTGluZS5jb21wdXRlTGluZURpc3RhbmNlcygpOiBDb21wdXRhdGlvbiBvbmx5IHBvc3NpYmxlIHdpdGggbm9uLWluZGV4ZWQgQnVmZmVyR2VvbWV0cnkuIik7ZWxzZSB0LmlzR2VvbWV0cnkmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLkxpbmUuY29tcHV0ZUxpbmVEaXN0YW5jZXMoKSBubyBsb25nZXIgc3VwcG9ydHMgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpO3JldHVybiB0aGlzfSxyYXljYXN0OmZ1bmN0aW9uKHQsZSl7Y29uc3Qgbj10aGlzLmdlb21ldHJ5LGk9dGhpcy5tYXRyaXhXb3JsZCxyPXQucGFyYW1zLkxpbmUudGhyZXNob2xkO2lmKG51bGw9PT1uLmJvdW5kaW5nU3BoZXJlJiZuLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLHhGdC5jb3B5KG4uYm91bmRpbmdTcGhlcmUpLHhGdC5hcHBseU1hdHJpeDQoaSkseEZ0LnJhZGl1cys9ciwhMT09PXQucmF5LmludGVyc2VjdHNTcGhlcmUoeEZ0KSlyZXR1cm47dkZ0LmNvcHkoaSkuaW52ZXJ0KCksYkZ0LmNvcHkodC5yYXkpLmFwcGx5TWF0cml4NCh2RnQpO2NvbnN0IG89ci8oKHRoaXMuc2NhbGUueCt0aGlzLnNjYWxlLnkrdGhpcy5zY2FsZS56KS8zKSxhPW8qbyxzPW5ldyBxT3QsbD1uZXcgcU90LGM9bmV3IHFPdCx1PW5ldyBxT3QsaD10aGlzLmlzTGluZVNlZ21lbnRzPzI6MTtpZihuLmlzQnVmZmVyR2VvbWV0cnkpe2NvbnN0IGk9bi5pbmRleCxyPW4uYXR0cmlidXRlcy5wb3NpdGlvbjtpZihudWxsIT09aSl7Y29uc3Qgbj1pLmFycmF5O2ZvcihsZXQgaT0wLG89bi5sZW5ndGgtMTtpPG87aSs9aCl7Y29uc3Qgbz1uW2krMV07aWYocy5mcm9tQnVmZmVyQXR0cmlidXRlKHIsbltpXSksbC5mcm9tQnVmZmVyQXR0cmlidXRlKHIsbyksYkZ0LmRpc3RhbmNlU3FUb1NlZ21lbnQocyxsLHUsYyk+YSljb250aW51ZTt1LmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKTtjb25zdCBoPXQucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKHUpO2g8dC5uZWFyfHxoPnQuZmFyfHxlLnB1c2goe2Rpc3RhbmNlOmgscG9pbnQ6Yy5jbG9uZSgpLmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKSxpbmRleDppLGZhY2U6bnVsbCxmYWNlSW5kZXg6bnVsbCxvYmplY3Q6dGhpc30pfX1lbHNlIGZvcihsZXQgbj0wLGk9ci5jb3VudC0xO248aTtuKz1oKXtpZihzLmZyb21CdWZmZXJBdHRyaWJ1dGUocixuKSxsLmZyb21CdWZmZXJBdHRyaWJ1dGUocixuKzEpLGJGdC5kaXN0YW5jZVNxVG9TZWdtZW50KHMsbCx1LGMpPmEpY29udGludWU7dS5hcHBseU1hdHJpeDQodGhpcy5tYXRyaXhXb3JsZCk7Y29uc3QgaT10LnJheS5vcmlnaW4uZGlzdGFuY2VUbyh1KTtpPHQubmVhcnx8aT50LmZhcnx8ZS5wdXNoKHtkaXN0YW5jZTppLHBvaW50OmMuY2xvbmUoKS5hcHBseU1hdHJpeDQodGhpcy5tYXRyaXhXb3JsZCksaW5kZXg6bixmYWNlOm51bGwsZmFjZUluZGV4Om51bGwsb2JqZWN0OnRoaXN9KX19ZWxzZSBuLmlzR2VvbWV0cnkmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLkxpbmUucmF5Y2FzdCgpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9LHVwZGF0ZU1vcnBoVGFyZ2V0czpmdW5jdGlvbigpe2NvbnN0IHQ9dGhpcy5nZW9tZXRyeTtpZih0LmlzQnVmZmVyR2VvbWV0cnkpe2NvbnN0IGU9dC5tb3JwaEF0dHJpYnV0ZXMsbj1PYmplY3Qua2V5cyhlKTtpZihuLmxlbmd0aD4wKXtjb25zdCB0PWVbblswXV07aWYodm9pZCAwIT09dCl7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXM9W10sdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnk9e307Zm9yKGxldCBlPTAsbj10Lmxlbmd0aDtlPG47ZSsrKXtjb25zdCBuPXRbZV0ubmFtZXx8U3RyaW5nKGUpO3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzLnB1c2goMCksdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnlbbl09ZX19fX1lbHNle2NvbnN0IGU9dC5tb3JwaFRhcmdldHM7dm9pZCAwIT09ZSYmZS5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuTGluZS51cGRhdGVNb3JwaFRhcmdldHMoKSBkb2VzIG5vdCBzdXBwb3J0IFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX19fSk7Y29uc3QgU0Z0PW5ldyBxT3QsTUZ0PW5ldyBxT3Q7ZnVuY3Rpb24gRUZ0KHQsZSl7d0Z0LmNhbGwodGhpcyx0LGUpLHRoaXMudHlwZT0iTGluZVNlZ21lbnRzIn1mdW5jdGlvbiBURnQodCxlKXt3RnQuY2FsbCh0aGlzLHQsZSksdGhpcy50eXBlPSJMaW5lTG9vcCJ9ZnVuY3Rpb24gQ0Z0KHQpe2d6dC5jYWxsKHRoaXMpLHRoaXMudHlwZT0iUG9pbnRzTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IHB6dCgxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5zaXplPTEsdGhpcy5zaXplQXR0ZW51YXRpb249ITAsdGhpcy5tb3JwaFRhcmdldHM9ITEsdGhpcy5zZXRWYWx1ZXModCl9RUZ0LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUod0Z0LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOkVGdCxpc0xpbmVTZWdtZW50czohMCxjb21wdXRlTGluZURpc3RhbmNlczpmdW5jdGlvbigpe2NvbnN0IHQ9dGhpcy5nZW9tZXRyeTtpZih0LmlzQnVmZmVyR2VvbWV0cnkpaWYobnVsbD09PXQuaW5kZXgpe2NvbnN0IGU9dC5hdHRyaWJ1dGVzLnBvc2l0aW9uLG49W107Zm9yKGxldCB0PTAsaT1lLmNvdW50O3Q8aTt0Kz0yKVNGdC5mcm9tQnVmZmVyQXR0cmlidXRlKGUsdCksTUZ0LmZyb21CdWZmZXJBdHRyaWJ1dGUoZSx0KzEpLG5bdF09MD09PXQ/MDpuW3QtMV0sblt0KzFdPW5bdF0rU0Z0LmRpc3RhbmNlVG8oTUZ0KTt0LnNldEF0dHJpYnV0ZSgibGluZURpc3RhbmNlIixuZXcga3p0KG4sMSkpfWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5MaW5lU2VnbWVudHMuY29tcHV0ZUxpbmVEaXN0YW5jZXMoKTogQ29tcHV0YXRpb24gb25seSBwb3NzaWJsZSB3aXRoIG5vbi1pbmRleGVkIEJ1ZmZlckdlb21ldHJ5LiIpO2Vsc2UgdC5pc0dlb21ldHJ5JiZjb25zb2xlLmVycm9yKCJUSFJFRS5MaW5lU2VnbWVudHMuY29tcHV0ZUxpbmVEaXN0YW5jZXMoKSBubyBsb25nZXIgc3VwcG9ydHMgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpO3JldHVybiB0aGlzfX0pLFRGdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKHdGdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpURnQsaXNMaW5lTG9vcDohMH0pLChDRnQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZ3p0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPUNGdCxDRnQucHJvdG90eXBlLmlzUG9pbnRzTWF0ZXJpYWw9ITAsQ0Z0LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHQpe3JldHVybiBnenQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hcD10Lm1hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5zaXplPXQuc2l6ZSx0aGlzLnNpemVBdHRlbnVhdGlvbj10LnNpemVBdHRlbnVhdGlvbix0aGlzLm1vcnBoVGFyZ2V0cz10Lm1vcnBoVGFyZ2V0cyx0aGlzfTtjb25zdCBBRnQ9bmV3IGJSdCxrRnQ9bmV3IHZSdCxMRnQ9bmV3IGhSdCxQRnQ9bmV3IHFPdDtmdW5jdGlvbiBORnQodD1uZXcgVnp0LGU9bmV3IENGdCl7V1J0LmNhbGwodGhpcyksdGhpcy50eXBlPSJQb2ludHMiLHRoaXMuZ2VvbWV0cnk9dCx0aGlzLm1hdGVyaWFsPWUsdGhpcy51cGRhdGVNb3JwaFRhcmdldHMoKX1mdW5jdGlvbiBJRnQodCxlLG4saSxyLG8sYSl7Y29uc3Qgcz1rRnQuZGlzdGFuY2VTcVRvUG9pbnQodCk7aWYoczxuKXtjb25zdCBuPW5ldyBxT3Q7a0Z0LmNsb3Nlc3RQb2ludFRvUG9pbnQodCxuKSxuLmFwcGx5TWF0cml4NChpKTtjb25zdCBsPXIucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKG4pO2lmKGw8ci5uZWFyfHxsPnIuZmFyKXJldHVybjtvLnB1c2goe2Rpc3RhbmNlOmwsZGlzdGFuY2VUb1JheTpNYXRoLnNxcnQocykscG9pbnQ6bixpbmRleDplLGZhY2U6bnVsbCxvYmplY3Q6YX0pfX1mdW5jdGlvbiBPRnQodCxlLG4saSxyLG8sYSxzLGwpe1ZPdC5jYWxsKHRoaXMsdCxlLG4saSxyLG8sYSxzLGwpLHRoaXMuZm9ybWF0PXZvaWQgMCE9PWE/YTpRSXQsdGhpcy5taW5GaWx0ZXI9dm9pZCAwIT09bz9vOkdJdCx0aGlzLm1hZ0ZpbHRlcj12b2lkIDAhPT1yP3I6R0l0LHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExO2NvbnN0IGM9dGhpczsicmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayJpbiB0JiZ0LnJlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2soKGZ1bmN0aW9uIGUoKXtjLm5lZWRzVXBkYXRlPSEwLHQucmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayhlKX0pKX1mdW5jdGlvbiBSRnQodCxlLG4saSxyLG8sYSxzLGwsYyx1LGgpe1ZPdC5jYWxsKHRoaXMsbnVsbCxvLGEscyxsLGMsaSxyLHUsaCksdGhpcy5pbWFnZT17d2lkdGg6ZSxoZWlnaHQ6bn0sdGhpcy5taXBtYXBzPXQsdGhpcy5mbGlwWT0hMSx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMX1mdW5jdGlvbiB6RnQodCxlLG4saSxyLG8sYSxzLGwpe1ZPdC5jYWxsKHRoaXMsdCxlLG4saSxyLG8sYSxzLGwpLHRoaXMubmVlZHNVcGRhdGU9ITB9ZnVuY3Rpb24gREZ0KHQsZSxuLGkscixvLGEscyxsLGMpe2lmKChjPXZvaWQgMCE9PWM/YzplT3QpIT09ZU90JiZjIT09bk90KXRocm93IG5ldyBFcnJvcigiRGVwdGhUZXh0dXJlIGZvcm1hdCBtdXN0IGJlIGVpdGhlciBUSFJFRS5EZXB0aEZvcm1hdCBvciBUSFJFRS5EZXB0aFN0ZW5jaWxGb3JtYXQiKTt2b2lkIDA9PT1uJiZjPT09ZU90JiYobj1YSXQpLHZvaWQgMD09PW4mJmM9PT1uT3QmJihuPUpJdCksVk90LmNhbGwodGhpcyxudWxsLGkscixvLGEscyxjLG4sbCksdGhpcy5pbWFnZT17d2lkdGg6dCxoZWlnaHQ6ZX0sdGhpcy5tYWdGaWx0ZXI9dm9pZCAwIT09YT9hOlZJdCx0aGlzLm1pbkZpbHRlcj12b2lkIDAhPT1zP3M6Vkl0LHRoaXMuZmxpcFk9ITEsdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITF9TkZ0LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoV1J0LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOk5GdCxpc1BvaW50czohMCxjb3B5OmZ1bmN0aW9uKHQpe3JldHVybiBXUnQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMubWF0ZXJpYWw9dC5tYXRlcmlhbCx0aGlzLmdlb21ldHJ5PXQuZ2VvbWV0cnksdGhpc30scmF5Y2FzdDpmdW5jdGlvbih0LGUpe2NvbnN0IG49dGhpcy5nZW9tZXRyeSxpPXRoaXMubWF0cml4V29ybGQscj10LnBhcmFtcy5Qb2ludHMudGhyZXNob2xkO2lmKG51bGw9PT1uLmJvdW5kaW5nU3BoZXJlJiZuLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLExGdC5jb3B5KG4uYm91bmRpbmdTcGhlcmUpLExGdC5hcHBseU1hdHJpeDQoaSksTEZ0LnJhZGl1cys9ciwhMT09PXQucmF5LmludGVyc2VjdHNTcGhlcmUoTEZ0KSlyZXR1cm47QUZ0LmNvcHkoaSkuaW52ZXJ0KCksa0Z0LmNvcHkodC5yYXkpLmFwcGx5TWF0cml4NChBRnQpO2NvbnN0IG89ci8oKHRoaXMuc2NhbGUueCt0aGlzLnNjYWxlLnkrdGhpcy5zY2FsZS56KS8zKSxhPW8qbztpZihuLmlzQnVmZmVyR2VvbWV0cnkpe2NvbnN0IHI9bi5pbmRleCxvPW4uYXR0cmlidXRlcy5wb3NpdGlvbjtpZihudWxsIT09cil7Y29uc3Qgbj1yLmFycmF5O2ZvcihsZXQgcj0wLHM9bi5sZW5ndGg7cjxzO3IrKyl7Y29uc3Qgcz1uW3JdO1BGdC5mcm9tQnVmZmVyQXR0cmlidXRlKG8scyksSUZ0KFBGdCxzLGEsaSx0LGUsdGhpcyl9fWVsc2UgZm9yKGxldCBuPTAscj1vLmNvdW50O248cjtuKyspUEZ0LmZyb21CdWZmZXJBdHRyaWJ1dGUobyxuKSxJRnQoUEZ0LG4sYSxpLHQsZSx0aGlzKX1lbHNlIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlBvaW50cy5yYXljYXN0KCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX0sdXBkYXRlTW9ycGhUYXJnZXRzOmZ1bmN0aW9uKCl7Y29uc3QgdD10aGlzLmdlb21ldHJ5O2lmKHQuaXNCdWZmZXJHZW9tZXRyeSl7Y29uc3QgZT10Lm1vcnBoQXR0cmlidXRlcyxuPU9iamVjdC5rZXlzKGUpO2lmKG4ubGVuZ3RoPjApe2NvbnN0IHQ9ZVtuWzBdXTtpZih2b2lkIDAhPT10KXt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcz1bXSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeT17fTtmb3IobGV0IGU9MCxuPXQubGVuZ3RoO2U8bjtlKyspe2NvbnN0IG49dFtlXS5uYW1lfHxTdHJpbmcoZSk7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXMucHVzaCgwKSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeVtuXT1lfX19fWVsc2V7Y29uc3QgZT10Lm1vcnBoVGFyZ2V0czt2b2lkIDAhPT1lJiZlLmxlbmd0aD4wJiZjb25zb2xlLmVycm9yKCJUSFJFRS5Qb2ludHMudXBkYXRlTW9ycGhUYXJnZXRzKCkgZG9lcyBub3Qgc3VwcG9ydCBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9fX0pLE9GdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKFZPdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpPRnQsY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5pbWFnZSkuY29weSh0aGlzKX0saXNWaWRlb1RleHR1cmU6ITAsdXBkYXRlOmZ1bmN0aW9uKCl7Y29uc3QgdD10aGlzLmltYWdlOzA9PSJyZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrImluIHQmJnQucmVhZHlTdGF0ZT49dC5IQVZFX0NVUlJFTlRfREFUQSYmKHRoaXMubmVlZHNVcGRhdGU9ITApfX0pLChSRnQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoVk90LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPVJGdCxSRnQucHJvdG90eXBlLmlzQ29tcHJlc3NlZFRleHR1cmU9ITAsKHpGdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShWT3QucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ekZ0LHpGdC5wcm90b3R5cGUuaXNDYW52YXNUZXh0dXJlPSEwLChERnQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoVk90LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPURGdCxERnQucHJvdG90eXBlLmlzRGVwdGhUZXh0dXJlPSEwO2NsYXNzIEJGdCBleHRlbmRzIFZ6dHtjb25zdHJ1Y3Rvcih0PTEsZT04LG49MCxpPTIqTWF0aC5QSSl7c3VwZXIoKSx0aGlzLnR5cGU9IkNpcmNsZUdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czp0LHNlZ21lbnRzOmUsdGhldGFTdGFydDpuLHRoZXRhTGVuZ3RoOml9LGU9TWF0aC5tYXgoMyxlKTtjb25zdCByPVtdLG89W10sYT1bXSxzPVtdLGw9bmV3IHFPdCxjPW5ldyB6T3Q7by5wdXNoKDAsMCwwKSxhLnB1c2goMCwwLDEpLHMucHVzaCguNSwuNSk7Zm9yKGxldCByPTAsdT0zO3I8PWU7cisrLHUrPTMpe2NvbnN0IGg9bityL2UqaTtsLng9dCpNYXRoLmNvcyhoKSxsLnk9dCpNYXRoLnNpbihoKSxvLnB1c2gobC54LGwueSxsLnopLGEucHVzaCgwLDAsMSksYy54PShvW3VdL3QrMSkvMixjLnk9KG9bdSsxXS90KzEpLzIscy5wdXNoKGMueCxjLnkpfWZvcihsZXQgdD0xO3Q8PWU7dCsrKXIucHVzaCh0LHQrMSwwKTt0aGlzLnNldEluZGV4KHIpLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGt6dChvLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcga3p0KGEsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IGt6dChzLDIpKX19Y2xhc3MgSEZ0IGV4dGVuZHMgVnp0e2NvbnN0cnVjdG9yKHQ9MSxlPTEsbj0xLGk9OCxyPTEsbz0hMSxhPTAscz0yKk1hdGguUEkpe3N1cGVyKCksdGhpcy50eXBlPSJDeWxpbmRlckdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3JhZGl1c1RvcDp0LHJhZGl1c0JvdHRvbTplLGhlaWdodDpuLHJhZGlhbFNlZ21lbnRzOmksaGVpZ2h0U2VnbWVudHM6cixvcGVuRW5kZWQ6byx0aGV0YVN0YXJ0OmEsdGhldGFMZW5ndGg6c307Y29uc3QgbD10aGlzO2k9TWF0aC5mbG9vcihpKSxyPU1hdGguZmxvb3Iocik7Y29uc3QgYz1bXSx1PVtdLGg9W10sZD1bXTtsZXQgcD0wO2NvbnN0IGY9W10sbT1uLzI7bGV0IGc9MDtmdW5jdGlvbiBfKG4pe2NvbnN0IHI9cCxvPW5ldyB6T3QsZj1uZXcgcU90O2xldCBfPTA7Y29uc3QgeT0hMD09PW4/dDplLHY9ITA9PT1uPzE6LTE7Zm9yKGxldCB0PTE7dDw9aTt0KyspdS5wdXNoKDAsbSp2LDApLGgucHVzaCgwLHYsMCksZC5wdXNoKC41LC41KSxwKys7Y29uc3QgYj1wO2ZvcihsZXQgdD0wO3Q8PWk7dCsrKXtjb25zdCBlPXQvaSpzK2Esbj1NYXRoLmNvcyhlKSxyPU1hdGguc2luKGUpO2YueD15KnIsZi55PW0qdixmLno9eSpuLHUucHVzaChmLngsZi55LGYueiksaC5wdXNoKDAsdiwwKSxvLng9LjUqbisuNSxvLnk9LjUqcip2Ky41LGQucHVzaChvLngsby55KSxwKyt9Zm9yKGxldCB0PTA7dDxpO3QrKyl7Y29uc3QgZT1yK3QsaT1iK3Q7ITA9PT1uP2MucHVzaChpLGkrMSxlKTpjLnB1c2goaSsxLGksZSksXys9M31sLmFkZEdyb3VwKGcsXywhMD09PW4/MToyKSxnKz1ffSEoZnVuY3Rpb24geSgpe2NvbnN0IG89bmV3IHFPdCxfPW5ldyBxT3Q7bGV0IHk9MDtjb25zdCB2PShlLXQpL247Zm9yKGxldCBsPTA7bDw9cjtsKyspe2NvbnN0IGM9W10sZz1sL3IseT1nKihlLXQpK3Q7Zm9yKGxldCB0PTA7dDw9aTt0Kyspe2NvbnN0IGU9dC9pLHI9ZSpzK2EsbD1NYXRoLnNpbihyKSxmPU1hdGguY29zKHIpO18ueD15KmwsXy55PS1nKm4rbSxfLno9eSpmLHUucHVzaChfLngsXy55LF8ueiksby5zZXQobCx2LGYpLm5vcm1hbGl6ZSgpLGgucHVzaChvLngsby55LG8ueiksZC5wdXNoKGUsMS1nKSxjLnB1c2gocCsrKX1mLnB1c2goYyl9Zm9yKGxldCB0PTA7dDxpO3QrKylmb3IobGV0IGU9MDtlPHI7ZSsrKXtjb25zdCBuPWZbZSsxXVt0XSxpPWZbZSsxXVt0KzFdLHI9ZltlXVt0KzFdO2MucHVzaChmW2VdW3RdLG4sciksYy5wdXNoKG4saSxyKSx5Kz02fWwuYWRkR3JvdXAoZyx5LDApLGcrPXl9KSgpLCExPT09byYmKHQ+MCYmXyghMCksZT4wJiZfKCExKSksdGhpcy5zZXRJbmRleChjKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBrenQodSwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IGt6dChoLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyBrenQoZCwyKSl9fWNsYXNzIEZGdCBleHRlbmRzIEhGdHtjb25zdHJ1Y3Rvcih0PTEsZT0xLG49OCxpPTEscj0hMSxvPTAsYT0yKk1hdGguUEkpe3N1cGVyKDAsdCxlLG4saSxyLG8sYSksdGhpcy50eXBlPSJDb25lR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cmFkaXVzOnQsaGVpZ2h0OmUscmFkaWFsU2VnbWVudHM6bixoZWlnaHRTZWdtZW50czppLG9wZW5FbmRlZDpyLHRoZXRhU3RhcnQ6byx0aGV0YUxlbmd0aDphfX19Y2xhc3MgVkZ0IGV4dGVuZHMgVnp0e2NvbnN0cnVjdG9yKHQsZSxuPTEsaT0wKXtzdXBlcigpLHRoaXMudHlwZT0iUG9seWhlZHJvbkdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3ZlcnRpY2VzOnQsaW5kaWNlczplLHJhZGl1czpuLGRldGFpbDppfTtjb25zdCByPVtdLG89W107ZnVuY3Rpb24gYSh0LGUsbixpKXtjb25zdCByPWkrMSxvPVtdO2ZvcihsZXQgaT0wO2k8PXI7aSsrKXtvW2ldPVtdO2NvbnN0IGE9dC5jbG9uZSgpLmxlcnAobixpL3IpLHM9ZS5jbG9uZSgpLmxlcnAobixpL3IpLGw9ci1pO2ZvcihsZXQgdD0wO3Q8PWw7dCsrKW9baV1bdF09MD09PXQmJmk9PT1yP2E6YS5jbG9uZSgpLmxlcnAocyx0L2wpfWZvcihsZXQgdD0wO3Q8cjt0KyspZm9yKGxldCBlPTA7ZTwyKihyLXQpLTE7ZSsrKXtjb25zdCBuPU1hdGguZmxvb3IoZS8yKTtlJTI9PTA/KHMob1t0XVtuKzFdKSxzKG9bdCsxXVtuXSkscyhvW3RdW25dKSk6KHMob1t0XVtuKzFdKSxzKG9bdCsxXVtuKzFdKSxzKG9bdCsxXVtuXSkpfX1mdW5jdGlvbiBzKHQpe3IucHVzaCh0LngsdC55LHQueil9ZnVuY3Rpb24gbChlLG4pe2NvbnN0IGk9MyplO24ueD10W2krMF0sbi55PXRbaSsxXSxuLno9dFtpKzJdfWZ1bmN0aW9uIGModCxlLG4saSl7aTwwJiYxPT09dC54JiYob1tlXT10LngtMSksMD09PW4ueCYmMD09PW4ueiYmKG9bZV09aS8yL01hdGguUEkrLjUpfWZ1bmN0aW9uIHUodCl7cmV0dXJuIE1hdGguYXRhbjIodC56LC10LngpfSEoZnVuY3Rpb24gaCh0KXtjb25zdCBuPW5ldyBxT3QsaT1uZXcgcU90LHI9bmV3IHFPdDtmb3IobGV0IG89MDtvPGUubGVuZ3RoO28rPTMpbChlW28rMF0sbiksbChlW28rMV0saSksbChlW28rMl0sciksYShuLGkscix0KX0pKGkpLChmdW5jdGlvbiBkKHQpe2NvbnN0IGU9bmV3IHFPdDtmb3IobGV0IG49MDtuPHIubGVuZ3RoO24rPTMpZS54PXJbbiswXSxlLnk9cltuKzFdLGUuej1yW24rMl0sZS5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0KSxyW24rMF09ZS54LHJbbisxXT1lLnkscltuKzJdPWUuen0pKG4pLChmdW5jdGlvbiBwKCl7Y29uc3QgdD1uZXcgcU90O2ZvcihsZXQgbj0wO248ci5sZW5ndGg7bis9Myl7dC54PXJbbiswXSx0Lnk9cltuKzFdLHQuej1yW24rMl07Y29uc3QgaT11KHQpLzIvTWF0aC5QSSsuNSxhPShlPXQsTWF0aC5hdGFuMigtZS55LE1hdGguc3FydChlLngqZS54K2UueiplLnopKS9NYXRoLlBJKy41KTtvLnB1c2goaSwxLWEpfXZhciBlOyhmdW5jdGlvbiBuKCl7Y29uc3QgdD1uZXcgcU90LGU9bmV3IHFPdCxuPW5ldyBxT3QsaT1uZXcgcU90LGE9bmV3IHpPdCxzPW5ldyB6T3QsbD1uZXcgek90O2ZvcihsZXQgaD0wLGQ9MDtoPHIubGVuZ3RoO2grPTksZCs9Nil7dC5zZXQocltoKzBdLHJbaCsxXSxyW2grMl0pLGUuc2V0KHJbaCszXSxyW2grNF0scltoKzVdKSxuLnNldChyW2grNl0scltoKzddLHJbaCs4XSksYS5zZXQob1tkKzBdLG9bZCsxXSkscy5zZXQob1tkKzJdLG9bZCszXSksbC5zZXQob1tkKzRdLG9bZCs1XSksaS5jb3B5KHQpLmFkZChlKS5hZGQobikuZGl2aWRlU2NhbGFyKDMpO2NvbnN0IHA9dShpKTtjKGEsZCswLHQscCksYyhzLGQrMixlLHApLGMobCxkKzQsbixwKX19KSgpLChmdW5jdGlvbiBpKCl7Zm9yKGxldCB0PTA7dDxvLmxlbmd0aDt0Kz02KXtjb25zdCBlPW9bdCswXSxuPW9bdCsyXSxpPW9bdCs0XSxyPU1hdGgubWF4KGUsbixpKSxhPU1hdGgubWluKGUsbixpKTtyPi45JiZhPC4xJiYoZTwuMiYmKG9bdCswXSs9MSksbjwuMiYmKG9bdCsyXSs9MSksaTwuMiYmKG9bdCs0XSs9MSkpfX0pKCl9KSgpLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGt6dChyLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcga3p0KHIuc2xpY2UoKSwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcga3p0KG8sMikpLDA9PT1pP3RoaXMuY29tcHV0ZVZlcnRleE5vcm1hbHMoKTp0aGlzLm5vcm1hbGl6ZU5vcm1hbHMoKX19Y2xhc3MgVUZ0IGV4dGVuZHMgVkZ0e2NvbnN0cnVjdG9yKHQ9MSxlPTApe2NvbnN0IG49KDErTWF0aC5zcXJ0KDUpKS8yLGk9MS9uO3N1cGVyKFstMSwtMSwtMSwtMSwtMSwxLC0xLDEsLTEsLTEsMSwxLDEsLTEsLTEsMSwtMSwxLDEsMSwtMSwxLDEsMSwwLC1pLC1uLDAsLWksbiwwLGksLW4sMCxpLG4sLWksLW4sMCwtaSxuLDAsaSwtbiwwLGksbiwwLC1uLDAsLWksbiwwLC1pLC1uLDAsaSxuLDAsaV0sWzMsMTEsNywzLDcsMTUsMywxNSwxMyw3LDE5LDE3LDcsMTcsNiw3LDYsMTUsMTcsNCw4LDE3LDgsMTAsMTcsMTAsNiw4LDAsMTYsOCwxNiwyLDgsMiwxMCwwLDEyLDEsMCwxLDE4LDAsMTgsMTYsNiwxMCwyLDYsMiwxMyw2LDEzLDE1LDIsMTYsMTgsMiwxOCwzLDIsMywxMywxOCwxLDksMTgsOSwxMSwxOCwxMSwzLDQsMTQsMTIsNCwxMiwwLDQsMCw4LDExLDksNSwxMSw1LDE5LDExLDE5LDcsMTksNSwxNCwxOSwxNCw0LDE5LDQsMTcsMSwxMiwxNCwxLDE0LDUsMSw1LDldLHQsZSksdGhpcy50eXBlPSJEb2RlY2FoZWRyb25HZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6dCxkZXRhaWw6ZX19fWNvbnN0IGpGdD1uZXcgcU90LEdGdD1uZXcgcU90LFdGdD1uZXcgcU90LHFGdD1uZXcgYXp0O2NsYXNzIFlGdCBleHRlbmRzIFZ6dHtjb25zdHJ1Y3Rvcih0LGUpe2lmKHN1cGVyKCksdGhpcy50eXBlPSJFZGdlc0dlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3RocmVzaG9sZEFuZ2xlOmV9LGU9dm9pZCAwIT09ZT9lOjEsITA9PT10LmlzR2VvbWV0cnkpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuRWRnZXNHZW9tZXRyeSBubyBsb25nZXIgc3VwcG9ydHMgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpO2NvbnN0IG49TWF0aC5wb3coMTAsNCksaT1NYXRoLmNvcyhST3QuREVHMlJBRCplKSxyPXQuZ2V0SW5kZXgoKSxvPXQuZ2V0QXR0cmlidXRlKCJwb3NpdGlvbiIpLGE9cj9yLmNvdW50Om8uY291bnQscz1bMCwwLDBdLGw9WyJhIiwiYiIsImMiXSxjPW5ldyBBcnJheSgzKSx1PXt9LGg9W107Zm9yKGxldCB0PTA7dDxhO3QrPTMpe3I/KHNbMF09ci5nZXRYKHQpLHNbMV09ci5nZXRYKHQrMSksc1syXT1yLmdldFgodCsyKSk6KHNbMF09dCxzWzFdPXQrMSxzWzJdPXQrMik7Y29uc3R7YTplLGI6YSxjOmR9PXFGdDtpZihlLmZyb21CdWZmZXJBdHRyaWJ1dGUobyxzWzBdKSxhLmZyb21CdWZmZXJBdHRyaWJ1dGUobyxzWzFdKSxkLmZyb21CdWZmZXJBdHRyaWJ1dGUobyxzWzJdKSxxRnQuZ2V0Tm9ybWFsKFdGdCksY1swXT1gJHtNYXRoLnJvdW5kKGUueCpuKX0sJHtNYXRoLnJvdW5kKGUueSpuKX0sJHtNYXRoLnJvdW5kKGUueipuKX1gLGNbMV09YCR7TWF0aC5yb3VuZChhLngqbil9LCR7TWF0aC5yb3VuZChhLnkqbil9LCR7TWF0aC5yb3VuZChhLnoqbil9YCxjWzJdPWAke01hdGgucm91bmQoZC54Km4pfSwke01hdGgucm91bmQoZC55Km4pfSwke01hdGgucm91bmQoZC56Km4pfWAsY1swXSE9PWNbMV0mJmNbMV0hPT1jWzJdJiZjWzJdIT09Y1swXSlmb3IobGV0IHQ9MDt0PDM7dCsrKXtjb25zdCBlPSh0KzEpJTMsbj1jW3RdLHI9Y1tlXSxvPXFGdFtsW3RdXSxhPXFGdFtsW2VdXSxkPWAke259XyR7cn1gLHA9YCR7cn1fJHtufWA7cCBpbiB1JiZ1W3BdPyhXRnQuZG90KHVbcF0ubm9ybWFsKTw9aSYmKGgucHVzaChvLngsby55LG8ueiksaC5wdXNoKGEueCxhLnksYS56KSksdVtwXT1udWxsKTpkIGluIHV8fCh1W2RdPXtpbmRleDA6c1t0XSxpbmRleDE6c1tlXSxub3JtYWw6V0Z0LmNsb25lKCl9KX19Zm9yKGNvbnN0IHQgaW4gdSlpZih1W3RdKXtjb25zdHtpbmRleDA6ZSxpbmRleDE6bn09dVt0XTtqRnQuZnJvbUJ1ZmZlckF0dHJpYnV0ZShvLGUpLEdGdC5mcm9tQnVmZmVyQXR0cmlidXRlKG8sbiksaC5wdXNoKGpGdC54LGpGdC55LGpGdC56KSxoLnB1c2goR0Z0LngsR0Z0LnksR0Z0LnopfXRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGt6dChoLDMpKX19ZnVuY3Rpb24gWEZ0KHQsZSxuLGkscil7bGV0IG8sYTtpZihyPT09KGZ1bmN0aW9uIHModCxlLG4saSl7bGV0IHI9MDtmb3IobGV0IG89ZSxhPW4taTtvPG47bys9aSlyKz0odFthXS10W29dKSoodFtvKzFdK3RbYSsxXSksYT1vO3JldHVybiByfSkodCxlLG4saSk+MClmb3Iobz1lO288bjtvKz1pKWE9bVZ0KG8sdFtvXSx0W28rMV0sYSk7ZWxzZSBmb3Iobz1uLWk7bz49ZTtvLT1pKWE9bVZ0KG8sdFtvXSx0W28rMV0sYSk7cmV0dXJuIGEmJmNWdChhLGEubmV4dCkmJihnVnQoYSksYT1hLm5leHQpLGF9ZnVuY3Rpb24gJEZ0KHQsZSl7aWYoIXQpcmV0dXJuIHQ7ZXx8KGU9dCk7bGV0IG4saT10O2Rve2lmKG49ITEsaS5zdGVpbmVyfHwhY1Z0KGksaS5uZXh0KSYmMCE9PWxWdChpLnByZXYsaSxpLm5leHQpKWk9aS5uZXh0O2Vsc2V7aWYoZ1Z0KGkpLGk9ZT1pLnByZXYsaT09PWkubmV4dClicmVhaztuPSEwfX13aGlsZShufHxpIT09ZSk7cmV0dXJuIGV9ZnVuY3Rpb24gS0Z0KHQsZSxuLGkscixvLGEpe2lmKCF0KXJldHVybjshYSYmbyYmKGZ1bmN0aW9uIHModCxlLG4saSl7bGV0IHI9dDtkb3tudWxsPT09ci56JiYoci56PXJWdChyLngsci55LGUsbixpKSksci5wcmV2Wj1yLnByZXYsci5uZXh0Wj1yLm5leHQscj1yLm5leHR9d2hpbGUociE9PXQpO3IucHJldloubmV4dFo9bnVsbCxyLnByZXZaPW51bGwsKGZ1bmN0aW9uIG8odCl7bGV0IGUsbixpLHIsbyxhLHMsbCxjPTE7ZG97Zm9yKG49dCx0PW51bGwsbz1udWxsLGE9MDtuOyl7Zm9yKGErKyxpPW4scz0wLGU9MDtlPGMmJihzKyssaT1pLm5leHRaLGkpO2UrKyk7Zm9yKGw9YztzPjB8fGw+MCYmaTspMCE9PXMmJigwPT09bHx8IWl8fG4uejw9aS56KT8ocj1uLG49bi5uZXh0WixzLS0pOihyPWksaT1pLm5leHRaLGwtLSksbz9vLm5leHRaPXI6dD1yLHIucHJldlo9byxvPXI7bj1pfW8ubmV4dFo9bnVsbCxjKj0yfXdoaWxlKGE+MSl9KShyKX0pKHQsaSxyLG8pO2xldCBsLGMsdT10O2Zvcig7dC5wcmV2IT09dC5uZXh0OylpZihsPXQucHJldixjPXQubmV4dCxvP0pGdCh0LGkscixvKTpaRnQodCkpZS5wdXNoKGwuaS9uKSxlLnB1c2godC5pL24pLGUucHVzaChjLmkvbiksZ1Z0KHQpLHQ9Yy5uZXh0LHU9Yy5uZXh0O2Vsc2UgaWYoKHQ9Yyk9PT11KXthPzE9PT1hP0tGdCh0PVFGdCgkRnQodCksZSxuKSxlLG4saSxyLG8sMik6Mj09PWEmJnRWdCh0LGUsbixpLHIsbyk6S0Z0KCRGdCh0KSxlLG4saSxyLG8sMSk7YnJlYWt9fWZ1bmN0aW9uIFpGdCh0KXtjb25zdCBlPXQucHJldixuPXQsaT10Lm5leHQ7aWYobFZ0KGUsbixpKT49MClyZXR1cm4hMTtsZXQgcj10Lm5leHQubmV4dDtmb3IoO3IhPT10LnByZXY7KXtpZihhVnQoZS54LGUueSxuLngsbi55LGkueCxpLnksci54LHIueSkmJmxWdChyLnByZXYscixyLm5leHQpPj0wKXJldHVybiExO3I9ci5uZXh0fXJldHVybiEwfWZ1bmN0aW9uIEpGdCh0LGUsbixpKXtjb25zdCByPXQucHJldixvPXQsYT10Lm5leHQ7aWYobFZ0KHIsbyxhKT49MClyZXR1cm4hMTtjb25zdCBzPXIueD5vLng/ci54PmEueD9yLng6YS54Om8ueD5hLng/by54OmEueCxsPXIueT5vLnk/ci55PmEueT9yLnk6YS55Om8ueT5hLnk/by55OmEueSxjPXJWdChyLng8by54P3IueDxhLng/ci54OmEueDpvLng8YS54P28ueDphLngsci55PG8ueT9yLnk8YS55P3IueTphLnk6by55PGEueT9vLnk6YS55LGUsbixpKSx1PXJWdChzLGwsZSxuLGkpO2xldCBoPXQucHJldlosZD10Lm5leHRaO2Zvcig7aCYmaC56Pj1jJiZkJiZkLno8PXU7KXtpZihoIT09dC5wcmV2JiZoIT09dC5uZXh0JiZhVnQoci54LHIueSxvLngsby55LGEueCxhLnksaC54LGgueSkmJmxWdChoLnByZXYsaCxoLm5leHQpPj0wKXJldHVybiExO2lmKGg9aC5wcmV2WixkIT09dC5wcmV2JiZkIT09dC5uZXh0JiZhVnQoci54LHIueSxvLngsby55LGEueCxhLnksZC54LGQueSkmJmxWdChkLnByZXYsZCxkLm5leHQpPj0wKXJldHVybiExO2Q9ZC5uZXh0Wn1mb3IoO2gmJmguej49Yzspe2lmKGghPT10LnByZXYmJmghPT10Lm5leHQmJmFWdChyLngsci55LG8ueCxvLnksYS54LGEueSxoLngsaC55KSYmbFZ0KGgucHJldixoLGgubmV4dCk+PTApcmV0dXJuITE7aD1oLnByZXZafWZvcig7ZCYmZC56PD11Oyl7aWYoZCE9PXQucHJldiYmZCE9PXQubmV4dCYmYVZ0KHIueCxyLnksby54LG8ueSxhLngsYS55LGQueCxkLnkpJiZsVnQoZC5wcmV2LGQsZC5uZXh0KT49MClyZXR1cm4hMTtkPWQubmV4dFp9cmV0dXJuITB9ZnVuY3Rpb24gUUZ0KHQsZSxuKXtsZXQgaT10O2Rve2NvbnN0IHI9aS5wcmV2LG89aS5uZXh0Lm5leHQ7IWNWdChyLG8pJiZ1VnQocixpLGkubmV4dCxvKSYmcFZ0KHIsbykmJnBWdChvLHIpJiYoZS5wdXNoKHIuaS9uKSxlLnB1c2goaS5pL24pLGUucHVzaChvLmkvbiksZ1Z0KGkpLGdWdChpLm5leHQpLGk9dD1vKSxpPWkubmV4dH13aGlsZShpIT09dCk7cmV0dXJuICRGdChpKX1mdW5jdGlvbiB0VnQodCxlLG4saSxyLG8pe2xldCBhPXQ7ZG97bGV0IHQ9YS5uZXh0Lm5leHQ7Zm9yKDt0IT09YS5wcmV2Oyl7aWYoYS5pIT09dC5pJiZzVnQoYSx0KSl7bGV0IHM9ZlZ0KGEsdCk7cmV0dXJuIGE9JEZ0KGEsYS5uZXh0KSxzPSRGdChzLHMubmV4dCksS0Z0KGEsZSxuLGkscixvKSx2b2lkIEtGdChzLGUsbixpLHIsbyl9dD10Lm5leHR9YT1hLm5leHR9d2hpbGUoYSE9PXQpfWZ1bmN0aW9uIGVWdCh0LGUpe3JldHVybiB0LngtZS54fWZ1bmN0aW9uIG5WdCh0LGUpe2lmKGU9KGZ1bmN0aW9uIG4odCxlKXtsZXQgbj1lO2NvbnN0IGk9dC54LHI9dC55O2xldCBvLGE9LTEvMDtkb3tpZihyPD1uLnkmJnI+PW4ubmV4dC55JiZuLm5leHQueSE9PW4ueSl7Y29uc3QgdD1uLngrKHItbi55KSoobi5uZXh0Lngtbi54KS8obi5uZXh0Lnktbi55KTtpZih0PD1pJiZ0PmEpe2lmKGE9dCx0PT09aSl7aWYocj09PW4ueSlyZXR1cm4gbjtpZihyPT09bi5uZXh0LnkpcmV0dXJuIG4ubmV4dH1vPW4ueDxuLm5leHQueD9uOm4ubmV4dH19bj1uLm5leHR9d2hpbGUobiE9PWUpO2lmKCFvKXJldHVybiBudWxsO2lmKGk9PT1hKXJldHVybiBvO2NvbnN0IHM9byxsPW8ueCxjPW8ueTtsZXQgdSxoPTEvMDtuPW87ZG97aT49bi54JiZuLng+PWwmJmkhPT1uLngmJmFWdChyPGM/aTphLHIsbCxjLHI8Yz9hOmkscixuLngsbi55KSYmKHU9TWF0aC5hYnMoci1uLnkpLyhpLW4ueCkscFZ0KG4sdCkmJih1PGh8fHU9PT1oJiYobi54Pm8ueHx8bi54PT09by54JiZpVnQobyxuKSkpJiYobz1uLGg9dSkpLG49bi5uZXh0fXdoaWxlKG4hPT1zKTtyZXR1cm4gb30pKHQsZSkpe2NvbnN0IG49ZlZ0KGUsdCk7JEZ0KGUsZS5uZXh0KSwkRnQobixuLm5leHQpfX1mdW5jdGlvbiBpVnQodCxlKXtyZXR1cm4gbFZ0KHQucHJldix0LGUucHJldik8MCYmbFZ0KGUubmV4dCx0LHQubmV4dCk8MH1mdW5jdGlvbiByVnQodCxlLG4saSxyKXtyZXR1cm4odD0xNDMxNjU1NzY1JigodD04NTg5OTM0NTkmKCh0PTI1MjY0NTEzNSYoKHQ9MTY3MTE5MzUmKCh0PTMyNzY3Kih0LW4pKnIpfHQ8PDgpKXx0PDw0KSl8dDw8MikpfHQ8PDEpKXwoZT0xNDMxNjU1NzY1JigoZT04NTg5OTM0NTkmKChlPTI1MjY0NTEzNSYoKGU9MTY3MTE5MzUmKChlPTMyNzY3KihlLWkpKnIpfGU8PDgpKXxlPDw0KSl8ZTw8MikpfGU8PDEpKTw8MX1mdW5jdGlvbiBvVnQodCl7bGV0IGU9dCxuPXQ7ZG97KGUueDxuLnh8fGUueD09PW4ueCYmZS55PG4ueSkmJihuPWUpLGU9ZS5uZXh0fXdoaWxlKGUhPT10KTtyZXR1cm4gbn1mdW5jdGlvbiBhVnQodCxlLG4saSxyLG8sYSxzKXtyZXR1cm4oci1hKSooZS1zKS0odC1hKSooby1zKT49MCYmKHQtYSkqKGktcyktKG4tYSkqKGUtcyk+PTAmJihuLWEpKihvLXMpLShyLWEpKihpLXMpPj0wfWZ1bmN0aW9uIHNWdCh0LGUpe3JldHVybiB0Lm5leHQuaSE9PWUuaSYmdC5wcmV2LmkhPT1lLmkmJiEoZnVuY3Rpb24gbih0LGUpe2xldCBuPXQ7ZG97aWYobi5pIT09dC5pJiZuLm5leHQuaSE9PXQuaSYmbi5pIT09ZS5pJiZuLm5leHQuaSE9PWUuaSYmdVZ0KG4sbi5uZXh0LHQsZSkpcmV0dXJuITA7bj1uLm5leHR9d2hpbGUobiE9PXQpO3JldHVybiExfSkodCxlKSYmKHBWdCh0LGUpJiZwVnQoZSx0KSYmKGZ1bmN0aW9uIGkodCxlKXtsZXQgbj10LGk9ITE7Y29uc3Qgcj0odC54K2UueCkvMixvPSh0LnkrZS55KS8yO2Rve24ueT5vIT1uLm5leHQueT5vJiZuLm5leHQueSE9PW4ueSYmcjwobi5uZXh0Lngtbi54KSooby1uLnkpLyhuLm5leHQueS1uLnkpK24ueCYmKGk9IWkpLG49bi5uZXh0fXdoaWxlKG4hPT10KTtyZXR1cm4gaX0pKHQsZSkmJihsVnQodC5wcmV2LHQsZS5wcmV2KXx8bFZ0KHQsZS5wcmV2LGUpKXx8Y1Z0KHQsZSkmJmxWdCh0LnByZXYsdCx0Lm5leHQpPjAmJmxWdChlLnByZXYsZSxlLm5leHQpPjApfWZ1bmN0aW9uIGxWdCh0LGUsbil7cmV0dXJuKGUueS10LnkpKihuLngtZS54KS0oZS54LXQueCkqKG4ueS1lLnkpfWZ1bmN0aW9uIGNWdCh0LGUpe3JldHVybiB0Lng9PT1lLngmJnQueT09PWUueX1mdW5jdGlvbiB1VnQodCxlLG4saSl7Y29uc3Qgcj1kVnQobFZ0KHQsZSxuKSksbz1kVnQobFZ0KHQsZSxpKSksYT1kVnQobFZ0KG4saSx0KSkscz1kVnQobFZ0KG4saSxlKSk7cmV0dXJuIHIhPT1vJiZhIT09c3x8ISgwIT09cnx8IWhWdCh0LG4sZSkpfHwhKDAhPT1vfHwhaFZ0KHQsaSxlKSl8fCEoMCE9PWF8fCFoVnQobix0LGkpKXx8ISgwIT09c3x8IWhWdChuLGUsaSkpfWZ1bmN0aW9uIGhWdCh0LGUsbil7cmV0dXJuIGUueDw9TWF0aC5tYXgodC54LG4ueCkmJmUueD49TWF0aC5taW4odC54LG4ueCkmJmUueTw9TWF0aC5tYXgodC55LG4ueSkmJmUueT49TWF0aC5taW4odC55LG4ueSl9ZnVuY3Rpb24gZFZ0KHQpe3JldHVybiB0PjA/MTp0PDA/LTE6MH1mdW5jdGlvbiBwVnQodCxlKXtyZXR1cm4gbFZ0KHQucHJldix0LHQubmV4dCk8MD9sVnQodCxlLHQubmV4dCk+PTAmJmxWdCh0LHQucHJldixlKT49MDpsVnQodCxlLHQucHJldik8MHx8bFZ0KHQsdC5uZXh0LGUpPDB9ZnVuY3Rpb24gZlZ0KHQsZSl7Y29uc3Qgbj1uZXcgX1Z0KHQuaSx0LngsdC55KSxpPW5ldyBfVnQoZS5pLGUueCxlLnkpLHI9dC5uZXh0LG89ZS5wcmV2O3JldHVybiB0Lm5leHQ9ZSxlLnByZXY9dCxuLm5leHQ9cixyLnByZXY9bixpLm5leHQ9bixuLnByZXY9aSxvLm5leHQ9aSxpLnByZXY9byxpfWZ1bmN0aW9uIG1WdCh0LGUsbixpKXtjb25zdCByPW5ldyBfVnQodCxlLG4pO3JldHVybiBpPyhyLm5leHQ9aS5uZXh0LHIucHJldj1pLGkubmV4dC5wcmV2PXIsaS5uZXh0PXIpOihyLnByZXY9cixyLm5leHQ9cikscn1mdW5jdGlvbiBnVnQodCl7dC5uZXh0LnByZXY9dC5wcmV2LHQucHJldi5uZXh0PXQubmV4dCx0LnByZXZaJiYodC5wcmV2Wi5uZXh0Wj10Lm5leHRaKSx0Lm5leHRaJiYodC5uZXh0Wi5wcmV2Wj10LnByZXZaKX1mdW5jdGlvbiBfVnQodCxlLG4pe3RoaXMuaT10LHRoaXMueD1lLHRoaXMueT1uLHRoaXMucHJldj1udWxsLHRoaXMubmV4dD1udWxsLHRoaXMuej1udWxsLHRoaXMucHJldlo9bnVsbCx0aGlzLm5leHRaPW51bGwsdGhpcy5zdGVpbmVyPSExfWNvbnN0IHlWdD17YXJlYTpmdW5jdGlvbih0KXtjb25zdCBlPXQubGVuZ3RoO2xldCBuPTA7Zm9yKGxldCBpPWUtMSxyPTA7cjxlO2k9cisrKW4rPXRbaV0ueCp0W3JdLnktdFtyXS54KnRbaV0ueTtyZXR1cm4uNSpufSxpc0Nsb2NrV2lzZTpmdW5jdGlvbih0KXtyZXR1cm4geVZ0LmFyZWEodCk8MH0sdHJpYW5ndWxhdGVTaGFwZTpmdW5jdGlvbih0LGUpe2NvbnN0IG49W10saT1bXSxyPVtdO3ZWdCh0KSxiVnQobix0KTtsZXQgbz10Lmxlbmd0aDtlLmZvckVhY2godlZ0KTtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKylpLnB1c2gobyksbys9ZVt0XS5sZW5ndGgsYlZ0KG4sZVt0XSk7Y29uc3QgYT0oZnVuY3Rpb24odCxlLG4pe249bnx8Mjtjb25zdCBpPWUmJmUubGVuZ3RoLHI9aT9lWzBdKm46dC5sZW5ndGg7bGV0IG89WEZ0KHQsMCxyLG4sITApO2NvbnN0IGE9W107aWYoIW98fG8ubmV4dD09PW8ucHJldilyZXR1cm4gYTtsZXQgcyxsLGMsdSxoLGQscDtpZihpJiYobz0oZnVuY3Rpb24gZih0LGUsbixpKXtjb25zdCByPVtdO2xldCBvLGEscyxsLGM7Zm9yKG89MCxhPWUubGVuZ3RoO288YTtvKyspcz1lW29dKmksbD1vPGEtMT9lW28rMV0qaTp0Lmxlbmd0aCxjPVhGdCh0LHMsbCxpLCExKSxjPT09Yy5uZXh0JiYoYy5zdGVpbmVyPSEwKSxyLnB1c2gob1Z0KGMpKTtmb3Ioci5zb3J0KGVWdCksbz0wO288ci5sZW5ndGg7bysrKW5WdChyW29dLG4pLG49JEZ0KG4sbi5uZXh0KTtyZXR1cm4gbn0pKHQsZSxvLG4pKSx0Lmxlbmd0aD44MCpuKXtzPWM9dFswXSxsPXU9dFsxXTtmb3IobGV0IGU9bjtlPHI7ZSs9biloPXRbZV0sZD10W2UrMV0saDxzJiYocz1oKSxkPGwmJihsPWQpLGg+YyYmKGM9aCksZD51JiYodT1kKTtwPU1hdGgubWF4KGMtcyx1LWwpLHA9MCE9PXA/MS9wOjB9cmV0dXJuIEtGdChvLGEsbixzLGwscCksYX0pKG4saSk7Zm9yKGxldCB0PTA7dDxhLmxlbmd0aDt0Kz0zKXIucHVzaChhLnNsaWNlKHQsdCszKSk7cmV0dXJuIHJ9fTtmdW5jdGlvbiB2VnQodCl7Y29uc3QgZT10Lmxlbmd0aDtlPjImJnRbZS0xXS5lcXVhbHModFswXSkmJnQucG9wKCl9ZnVuY3Rpb24gYlZ0KHQsZSl7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspdC5wdXNoKGVbbl0ueCksdC5wdXNoKGVbbl0ueSl9Y2xhc3MgeFZ0IGV4dGVuZHMgVnp0e2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIoKSx0aGlzLnR5cGU9IkV4dHJ1ZGVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtzaGFwZXM6dCxvcHRpb25zOmV9LHQ9QXJyYXkuaXNBcnJheSh0KT90Olt0XTtjb25zdCBuPXRoaXMsaT1bXSxyPVtdO2ZvcihsZXQgZT0wLG49dC5sZW5ndGg7ZTxuO2UrKylvKHRbZV0pO2Z1bmN0aW9uIG8odCl7Y29uc3Qgbz1bXSxhPXZvaWQgMCE9PWUuY3VydmVTZWdtZW50cz9lLmN1cnZlU2VnbWVudHM6MTIscz12b2lkIDAhPT1lLnN0ZXBzP2Uuc3RlcHM6MTtsZXQgbD12b2lkIDAhPT1lLmRlcHRoP2UuZGVwdGg6MTAwLGM9dm9pZCAwPT09ZS5iZXZlbEVuYWJsZWR8fGUuYmV2ZWxFbmFibGVkLHU9dm9pZCAwIT09ZS5iZXZlbFRoaWNrbmVzcz9lLmJldmVsVGhpY2tuZXNzOjYsaD12b2lkIDAhPT1lLmJldmVsU2l6ZT9lLmJldmVsU2l6ZTp1LTIsZD12b2lkIDAhPT1lLmJldmVsT2Zmc2V0P2UuYmV2ZWxPZmZzZXQ6MCxwPXZvaWQgMCE9PWUuYmV2ZWxTZWdtZW50cz9lLmJldmVsU2VnbWVudHM6Mztjb25zdCBmPWUuZXh0cnVkZVBhdGgsbT12b2lkIDAhPT1lLlVWR2VuZXJhdG9yP2UuVVZHZW5lcmF0b3I6d1Z0O3ZvaWQgMCE9PWUuYW1vdW50JiYoY29uc29sZS53YXJuKCJUSFJFRS5FeHRydWRlQnVmZmVyR2VvbWV0cnk6IGFtb3VudCBoYXMgYmVlbiByZW5hbWVkIHRvIGRlcHRoLiIpLGw9ZS5hbW91bnQpO2xldCBnLF8seSx2LGIseD0hMTtmJiYoZz1mLmdldFNwYWNlZFBvaW50cyhzKSx4PSEwLGM9ITEsXz1mLmNvbXB1dGVGcmVuZXRGcmFtZXMocywhMSkseT1uZXcgcU90LHY9bmV3IHFPdCxiPW5ldyBxT3QpLGN8fChwPTAsdT0wLGg9MCxkPTApO2NvbnN0IHc9dC5leHRyYWN0UG9pbnRzKGEpO2xldCBTPXcuc2hhcGU7Y29uc3QgTT13LmhvbGVzO2lmKCF5VnQuaXNDbG9ja1dpc2UoUykpe1M9Uy5yZXZlcnNlKCk7Zm9yKGxldCB0PTAsZT1NLmxlbmd0aDt0PGU7dCsrKXtjb25zdCBlPU1bdF07eVZ0LmlzQ2xvY2tXaXNlKGUpJiYoTVt0XT1lLnJldmVyc2UoKSl9fWNvbnN0IEU9eVZ0LnRyaWFuZ3VsYXRlU2hhcGUoUyxNKSxUPVM7Zm9yKGxldCB0PTAsZT1NLmxlbmd0aDt0PGU7dCsrKVM9Uy5jb25jYXQoTVt0XSk7ZnVuY3Rpb24gQyh0LGUsbil7cmV0dXJuIGV8fGNvbnNvbGUuZXJyb3IoIlRIUkVFLkV4dHJ1ZGVHZW9tZXRyeTogdmVjIGRvZXMgbm90IGV4aXN0IiksZS5jbG9uZSgpLm11bHRpcGx5U2NhbGFyKG4pLmFkZCh0KX1jb25zdCBBPVMubGVuZ3RoLGs9RS5sZW5ndGg7ZnVuY3Rpb24gTCh0LGUsbil7bGV0IGkscixvO2NvbnN0IGE9dC54LWUueCxzPXQueS1lLnksbD1uLngtdC54LGM9bi55LXQueSx1PWEqYStzKnM7aWYoTWF0aC5hYnMoYSpjLXMqbCk+TnVtYmVyLkVQU0lMT04pe2NvbnN0IGg9TWF0aC5zcXJ0KHUpLGQ9TWF0aC5zcXJ0KGwqbCtjKmMpLHA9ZS54LXMvaCxmPWUueSthL2gsbT0oKG4ueC1jL2QtcCkqYy0obi55K2wvZC1mKSpsKS8oYSpjLXMqbCk7aT1wK2EqbS10Lngscj1mK3MqbS10Lnk7Y29uc3QgZz1pKmkrcipyO2lmKGc8PTIpcmV0dXJuIG5ldyB6T3QoaSxyKTtvPU1hdGguc3FydChnLzIpfWVsc2V7bGV0IHQ9ITE7YT5OdW1iZXIuRVBTSUxPTj9sPk51bWJlci5FUFNJTE9OJiYodD0hMCk6YTwtTnVtYmVyLkVQU0lMT04/bDwtTnVtYmVyLkVQU0lMT04mJih0PSEwKTpNYXRoLnNpZ24ocyk9PT1NYXRoLnNpZ24oYykmJih0PSEwKSx0PyhpPS1zLHI9YSxvPU1hdGguc3FydCh1KSk6KGk9YSxyPXMsbz1NYXRoLnNxcnQodS8yKSl9cmV0dXJuIG5ldyB6T3QoaS9vLHIvbyl9Y29uc3QgUD1bXTtmb3IobGV0IHQ9MCxlPVQubGVuZ3RoLG49ZS0xLGk9dCsxO3Q8ZTt0KyssbisrLGkrKyluPT09ZSYmKG49MCksaT09PWUmJihpPTApLFBbdF09TChUW3RdLFRbbl0sVFtpXSk7Y29uc3QgTj1bXTtsZXQgSSxPPVAuY29uY2F0KCk7Zm9yKGxldCB0PTAsZT1NLmxlbmd0aDt0PGU7dCsrKXtjb25zdCBlPU1bdF07ST1bXTtmb3IobGV0IHQ9MCxuPWUubGVuZ3RoLGk9bi0xLHI9dCsxO3Q8bjt0KyssaSsrLHIrKylpPT09biYmKGk9MCkscj09PW4mJihyPTApLElbdF09TChlW3RdLGVbaV0sZVtyXSk7Ti5wdXNoKEkpLE89Ty5jb25jYXQoSSl9Zm9yKGxldCB0PTA7dDxwO3QrKyl7Y29uc3QgZT10L3Asbj11Kk1hdGguY29zKGUqTWF0aC5QSS8yKSxpPWgqTWF0aC5zaW4oZSpNYXRoLlBJLzIpK2Q7Zm9yKGxldCB0PTAsZT1ULmxlbmd0aDt0PGU7dCsrKXtjb25zdCBlPUMoVFt0XSxQW3RdLGkpO0QoZS54LGUueSwtbil9Zm9yKGxldCB0PTAsZT1NLmxlbmd0aDt0PGU7dCsrKXtjb25zdCBlPU1bdF07ST1OW3RdO2ZvcihsZXQgdD0wLHI9ZS5sZW5ndGg7dDxyO3QrKyl7Y29uc3Qgcj1DKGVbdF0sSVt0XSxpKTtEKHIueCxyLnksLW4pfX19Y29uc3QgUj1oK2Q7Zm9yKGxldCB0PTA7dDxBO3QrKyl7Y29uc3QgZT1jP0MoU1t0XSxPW3RdLFIpOlNbdF07eD8odi5jb3B5KF8ubm9ybWFsc1swXSkubXVsdGlwbHlTY2FsYXIoZS54KSx5LmNvcHkoXy5iaW5vcm1hbHNbMF0pLm11bHRpcGx5U2NhbGFyKGUueSksYi5jb3B5KGdbMF0pLmFkZCh2KS5hZGQoeSksRChiLngsYi55LGIueikpOkQoZS54LGUueSwwKX1mb3IobGV0IHQ9MTt0PD1zO3QrKylmb3IobGV0IGU9MDtlPEE7ZSsrKXtjb25zdCBuPWM/QyhTW2VdLE9bZV0sUik6U1tlXTt4Pyh2LmNvcHkoXy5ub3JtYWxzW3RdKS5tdWx0aXBseVNjYWxhcihuLngpLHkuY29weShfLmJpbm9ybWFsc1t0XSkubXVsdGlwbHlTY2FsYXIobi55KSxiLmNvcHkoZ1t0XSkuYWRkKHYpLmFkZCh5KSxEKGIueCxiLnksYi56KSk6RChuLngsbi55LGwvcyp0KX1mb3IobGV0IHQ9cC0xO3Q+PTA7dC0tKXtjb25zdCBlPXQvcCxuPXUqTWF0aC5jb3MoZSpNYXRoLlBJLzIpLGk9aCpNYXRoLnNpbihlKk1hdGguUEkvMikrZDtmb3IobGV0IHQ9MCxlPVQubGVuZ3RoO3Q8ZTt0Kyspe2NvbnN0IGU9QyhUW3RdLFBbdF0saSk7RChlLngsZS55LGwrbil9Zm9yKGxldCB0PTAsZT1NLmxlbmd0aDt0PGU7dCsrKXtjb25zdCBlPU1bdF07ST1OW3RdO2ZvcihsZXQgdD0wLHI9ZS5sZW5ndGg7dDxyO3QrKyl7Y29uc3Qgcj1DKGVbdF0sSVt0XSxpKTt4P0Qoci54LHIueStnW3MtMV0ueSxnW3MtMV0ueCtuKTpEKHIueCxyLnksbCtuKX19fWZ1bmN0aW9uIHoodCxlKXtsZXQgbj10Lmxlbmd0aDtmb3IoOy0tbj49MDspe2NvbnN0IGk9bjtsZXQgcj1uLTE7cjwwJiYocj10Lmxlbmd0aC0xKTtmb3IobGV0IHQ9MCxuPXMrMipwO3Q8bjt0Kyspe2NvbnN0IG49QSp0LG89QSoodCsxKTtIKGUraStuLGUrcituLGUrcitvLGUraStvKX19fWZ1bmN0aW9uIEQodCxlLG4pe28ucHVzaCh0KSxvLnB1c2goZSksby5wdXNoKG4pfWZ1bmN0aW9uIEIodCxlLHIpe0YodCksRihlKSxGKHIpO2NvbnN0IG89aS5sZW5ndGgvMyxhPW0uZ2VuZXJhdGVUb3BVVihuLGksby0zLG8tMixvLTEpO1YoYVswXSksVihhWzFdKSxWKGFbMl0pfWZ1bmN0aW9uIEgodCxlLHIsbyl7Rih0KSxGKGUpLEYobyksRihlKSxGKHIpLEYobyk7Y29uc3QgYT1pLmxlbmd0aC8zLHM9bS5nZW5lcmF0ZVNpZGVXYWxsVVYobixpLGEtNixhLTMsYS0yLGEtMSk7VihzWzBdKSxWKHNbMV0pLFYoc1szXSksVihzWzFdKSxWKHNbMl0pLFYoc1szXSl9ZnVuY3Rpb24gRih0KXtpLnB1c2gob1szKnQrMF0pLGkucHVzaChvWzMqdCsxXSksaS5wdXNoKG9bMyp0KzJdKX1mdW5jdGlvbiBWKHQpe3IucHVzaCh0LngpLHIucHVzaCh0LnkpfSEoZnVuY3Rpb24gVSgpe2NvbnN0IHQ9aS5sZW5ndGgvMztpZihjKXtsZXQgdD0wLGU9QSp0O2ZvcihsZXQgdD0wO3Q8azt0Kyspe2NvbnN0IG49RVt0XTtCKG5bMl0rZSxuWzFdK2UsblswXStlKX10PXMrMipwLGU9QSp0O2ZvcihsZXQgdD0wO3Q8azt0Kyspe2NvbnN0IG49RVt0XTtCKG5bMF0rZSxuWzFdK2UsblsyXStlKX19ZWxzZXtmb3IobGV0IHQ9MDt0PGs7dCsrKXtjb25zdCBlPUVbdF07QihlWzJdLGVbMV0sZVswXSl9Zm9yKGxldCB0PTA7dDxrO3QrKyl7Y29uc3QgZT1FW3RdO0IoZVswXStBKnMsZVsxXStBKnMsZVsyXStBKnMpfX1uLmFkZEdyb3VwKHQsaS5sZW5ndGgvMy10LDApfSkoKSwoZnVuY3Rpb24gaigpe2NvbnN0IHQ9aS5sZW5ndGgvMztsZXQgZT0wO3ooVCxlKSxlKz1ULmxlbmd0aDtmb3IobGV0IHQ9MCxuPU0ubGVuZ3RoO3Q8bjt0Kyspe2NvbnN0IG49TVt0XTt6KG4sZSksZSs9bi5sZW5ndGh9bi5hZGRHcm91cCh0LGkubGVuZ3RoLzMtdCwxKX0pKCl9dGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcga3p0KGksMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IGt6dChyLDIpKSx0aGlzLmNvbXB1dGVWZXJ0ZXhOb3JtYWxzKCl9dG9KU09OKCl7Y29uc3QgdD1WenQucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMpO3JldHVybihmdW5jdGlvbiBlKHQsbixpKXtpZihpLnNoYXBlcz1bXSxBcnJheS5pc0FycmF5KHQpKWZvcihsZXQgZT0wLG49dC5sZW5ndGg7ZTxuO2UrKylpLnNoYXBlcy5wdXNoKHRbZV0udXVpZCk7ZWxzZSBpLnNoYXBlcy5wdXNoKHQudXVpZCk7cmV0dXJuIHZvaWQgMCE9PW4uZXh0cnVkZVBhdGgmJihpLm9wdGlvbnMuZXh0cnVkZVBhdGg9bi5leHRydWRlUGF0aC50b0pTT04oKSksaX0pKHRoaXMucGFyYW1ldGVycy5zaGFwZXMsdGhpcy5wYXJhbWV0ZXJzLm9wdGlvbnMsdCl9fWNvbnN0IHdWdD17Z2VuZXJhdGVUb3BVVjpmdW5jdGlvbih0LGUsbixpLHIpe2NvbnN0IG89ZVszKmldLGE9ZVszKmkrMV0scz1lWzMqcl0sbD1lWzMqcisxXTtyZXR1cm5bbmV3IHpPdChlWzMqbl0sZVszKm4rMV0pLG5ldyB6T3QobyxhKSxuZXcgek90KHMsbCldfSxnZW5lcmF0ZVNpZGVXYWxsVVY6ZnVuY3Rpb24odCxlLG4saSxyLG8pe2NvbnN0IGE9ZVszKm5dLHM9ZVszKm4rMV0sbD1lWzMqbisyXSxjPWVbMyppXSx1PWVbMyppKzFdLGg9ZVszKmkrMl0sZD1lWzMqcl0scD1lWzMqcisxXSxmPWVbMypyKzJdLG09ZVszKm9dLGc9ZVszKm8rMV0sXz1lWzMqbysyXTtyZXR1cm4gTWF0aC5hYnMocy11KTwuMDE/W25ldyB6T3QoYSwxLWwpLG5ldyB6T3QoYywxLWgpLG5ldyB6T3QoZCwxLWYpLG5ldyB6T3QobSwxLV8pXTpbbmV3IHpPdChzLDEtbCksbmV3IHpPdCh1LDEtaCksbmV3IHpPdChwLDEtZiksbmV3IHpPdChnLDEtXyldfX07Y2xhc3MgU1Z0IGV4dGVuZHMgVkZ0e2NvbnN0cnVjdG9yKHQ9MSxlPTApe2NvbnN0IG49KDErTWF0aC5zcXJ0KDUpKS8yO3N1cGVyKFstMSxuLDAsMSxuLDAsLTEsLW4sMCwxLC1uLDAsMCwtMSxuLDAsMSxuLDAsLTEsLW4sMCwxLC1uLG4sMCwtMSxuLDAsMSwtbiwwLC0xLC1uLDAsMV0sWzAsMTEsNSwwLDUsMSwwLDEsNywwLDcsMTAsMCwxMCwxMSwxLDUsOSw1LDExLDQsMTEsMTAsMiwxMCw3LDYsNywxLDgsMyw5LDQsMyw0LDIsMywyLDYsMyw2LDgsMyw4LDksNCw5LDUsMiw0LDExLDYsMiwxMCw4LDYsNyw5LDgsMV0sdCxlKSx0aGlzLnR5cGU9Ikljb3NhaGVkcm9uR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cmFkaXVzOnQsZGV0YWlsOmV9fX1jbGFzcyBNVnQgZXh0ZW5kcyBWenR7Y29uc3RydWN0b3IodCxlPTEyLG49MCxpPTIqTWF0aC5QSSl7c3VwZXIoKSx0aGlzLnR5cGU9IkxhdGhlR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cG9pbnRzOnQsc2VnbWVudHM6ZSxwaGlTdGFydDpuLHBoaUxlbmd0aDppfSxlPU1hdGguZmxvb3IoZSksaT1ST3QuY2xhbXAoaSwwLDIqTWF0aC5QSSk7Y29uc3Qgcj1bXSxvPVtdLGE9W10scz0xL2UsbD1uZXcgcU90LGM9bmV3IHpPdDtmb3IobGV0IHI9MDtyPD1lO3IrKyl7Y29uc3QgdT1uK3IqcyppLGg9TWF0aC5zaW4odSksZD1NYXRoLmNvcyh1KTtmb3IobGV0IG49MDtuPD10Lmxlbmd0aC0xO24rKylsLng9dFtuXS54KmgsbC55PXRbbl0ueSxsLno9dFtuXS54KmQsby5wdXNoKGwueCxsLnksbC56KSxjLng9ci9lLGMueT1uLyh0Lmxlbmd0aC0xKSxhLnB1c2goYy54LGMueSl9Zm9yKGxldCBuPTA7bjxlO24rKylmb3IobGV0IGU9MDtlPHQubGVuZ3RoLTE7ZSsrKXtjb25zdCBpPWUrbip0Lmxlbmd0aCxvPWkrdC5sZW5ndGgsYT1pK3QubGVuZ3RoKzEscz1pKzE7ci5wdXNoKGksbyxzKSxyLnB1c2gobyxhLHMpfWlmKHRoaXMuc2V0SW5kZXgociksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcga3p0KG8sMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IGt6dChhLDIpKSx0aGlzLmNvbXB1dGVWZXJ0ZXhOb3JtYWxzKCksaT09PTIqTWF0aC5QSSl7Y29uc3Qgbj10aGlzLmF0dHJpYnV0ZXMubm9ybWFsLmFycmF5LGk9bmV3IHFPdCxyPW5ldyBxT3Qsbz1uZXcgcU90LGE9ZSp0Lmxlbmd0aCozO2ZvcihsZXQgZT0wLHM9MDtlPHQubGVuZ3RoO2UrKyxzKz0zKWkueD1uW3MrMF0saS55PW5bcysxXSxpLno9bltzKzJdLHIueD1uW2ErcyswXSxyLnk9blthK3MrMV0sci56PW5bYStzKzJdLG8uYWRkVmVjdG9ycyhpLHIpLm5vcm1hbGl6ZSgpLG5bcyswXT1uW2ErcyswXT1vLngsbltzKzFdPW5bYStzKzFdPW8ueSxuW3MrMl09blthK3MrMl09by56fX19Y2xhc3MgRVZ0IGV4dGVuZHMgVkZ0e2NvbnN0cnVjdG9yKHQ9MSxlPTApe3N1cGVyKFsxLDAsMCwtMSwwLDAsMCwxLDAsMCwtMSwwLDAsMCwxLDAsMCwtMV0sWzAsMiw0LDAsNCwzLDAsMyw1LDAsNSwyLDEsMiw1LDEsNSwzLDEsMyw0LDEsNCwyXSx0LGUpLHRoaXMudHlwZT0iT2N0YWhlZHJvbkdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czp0LGRldGFpbDplfX19ZnVuY3Rpb24gVFZ0KHQsZSxuKXtWenQuY2FsbCh0aGlzKSx0aGlzLnR5cGU9IlBhcmFtZXRyaWNHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtmdW5jOnQsc2xpY2VzOmUsc3RhY2tzOm59O2NvbnN0IGk9W10scj1bXSxvPVtdLGE9W10scz0xZS01LGw9bmV3IHFPdCxjPW5ldyBxT3QsdT1uZXcgcU90LGg9bmV3IHFPdCxkPW5ldyBxT3Q7dC5sZW5ndGg8MyYmY29uc29sZS5lcnJvcigiVEhSRUUuUGFyYW1ldHJpY0dlb21ldHJ5OiBGdW5jdGlvbiBtdXN0IG5vdyBtb2RpZnkgYSBWZWN0b3IzIGFzIHRoaXJkIHBhcmFtZXRlci4iKTtjb25zdCBwPWUrMTtmb3IobGV0IGk9MDtpPD1uO2krKyl7Y29uc3QgcD1pL247Zm9yKGxldCBuPTA7bjw9ZTtuKyspe2NvbnN0IGk9bi9lO3QoaSxwLGMpLHIucHVzaChjLngsYy55LGMueiksaS1zPj0wPyh0KGktcyxwLHUpLGguc3ViVmVjdG9ycyhjLHUpKToodChpK3MscCx1KSxoLnN1YlZlY3RvcnModSxjKSkscC1zPj0wPyh0KGkscC1zLHUpLGQuc3ViVmVjdG9ycyhjLHUpKToodChpLHArcyx1KSxkLnN1YlZlY3RvcnModSxjKSksbC5jcm9zc1ZlY3RvcnMoaCxkKS5ub3JtYWxpemUoKSxvLnB1c2gobC54LGwueSxsLnopLGEucHVzaChpLHApfX1mb3IobGV0IHQ9MDt0PG47dCsrKWZvcihsZXQgbj0wO248ZTtuKyspe2NvbnN0IGU9dCpwK24rMSxyPSh0KzEpKnArbisxLG89KHQrMSkqcCtuO2kucHVzaCh0KnArbixlLG8pLGkucHVzaChlLHIsbyl9dGhpcy5zZXRJbmRleChpKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBrenQociwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IGt6dChvLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyBrenQoYSwyKSl9KFRWdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShWenQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9VFZ0O2NsYXNzIENWdCBleHRlbmRzIFZ6dHtjb25zdHJ1Y3Rvcih0PS41LGU9MSxuPTgsaT0xLHI9MCxvPTIqTWF0aC5QSSl7c3VwZXIoKSx0aGlzLnR5cGU9IlJpbmdHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtpbm5lclJhZGl1czp0LG91dGVyUmFkaXVzOmUsdGhldGFTZWdtZW50czpuLHBoaVNlZ21lbnRzOmksdGhldGFTdGFydDpyLHRoZXRhTGVuZ3RoOm99LG49TWF0aC5tYXgoMyxuKTtjb25zdCBhPVtdLHM9W10sbD1bXSxjPVtdO2xldCB1PXQ7Y29uc3QgaD0oZS10KS8oaT1NYXRoLm1heCgxLGkpKSxkPW5ldyBxT3QscD1uZXcgek90O2ZvcihsZXQgdD0wO3Q8PWk7dCsrKXtmb3IobGV0IHQ9MDt0PD1uO3QrKyl7Y29uc3QgaT1yK3QvbipvO2QueD11Kk1hdGguY29zKGkpLGQueT11Kk1hdGguc2luKGkpLHMucHVzaChkLngsZC55LGQueiksbC5wdXNoKDAsMCwxKSxwLng9KGQueC9lKzEpLzIscC55PShkLnkvZSsxKS8yLGMucHVzaChwLngscC55KX11Kz1ofWZvcihsZXQgdD0wO3Q8aTt0Kyspe2NvbnN0IGU9dCoobisxKTtmb3IobGV0IHQ9MDt0PG47dCsrKXtjb25zdCBpPXQrZSxyPWkrbisxLG89aStuKzIscz1pKzE7YS5wdXNoKGkscixzKSxhLnB1c2gocixvLHMpfX10aGlzLnNldEluZGV4KGEpLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGt6dChzLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcga3p0KGwsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IGt6dChjLDIpKX19Y2xhc3MgQVZ0IGV4dGVuZHMgVnp0e2NvbnN0cnVjdG9yKHQsZT0xMil7c3VwZXIoKSx0aGlzLnR5cGU9IlNoYXBlR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17c2hhcGVzOnQsY3VydmVTZWdtZW50czplfTtjb25zdCBuPVtdLGk9W10scj1bXSxvPVtdO2xldCBhPTAscz0wO2lmKCExPT09QXJyYXkuaXNBcnJheSh0KSlsKHQpO2Vsc2UgZm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspbCh0W2VdKSx0aGlzLmFkZEdyb3VwKGEscyxlKSxhKz1zLHM9MDtmdW5jdGlvbiBsKHQpe2NvbnN0IGE9aS5sZW5ndGgvMyxsPXQuZXh0cmFjdFBvaW50cyhlKTtsZXQgYz1sLnNoYXBlO2NvbnN0IHU9bC5ob2xlczshMT09PXlWdC5pc0Nsb2NrV2lzZShjKSYmKGM9Yy5yZXZlcnNlKCkpO2ZvcihsZXQgdD0wLGU9dS5sZW5ndGg7dDxlO3QrKyl7Y29uc3QgZT11W3RdOyEwPT09eVZ0LmlzQ2xvY2tXaXNlKGUpJiYodVt0XT1lLnJldmVyc2UoKSl9Y29uc3QgaD15VnQudHJpYW5ndWxhdGVTaGFwZShjLHUpO2ZvcihsZXQgdD0wLGU9dS5sZW5ndGg7dDxlO3QrKyljPWMuY29uY2F0KHVbdF0pO2ZvcihsZXQgdD0wLGU9Yy5sZW5ndGg7dDxlO3QrKyl7Y29uc3QgZT1jW3RdO2kucHVzaChlLngsZS55LDApLHIucHVzaCgwLDAsMSksby5wdXNoKGUueCxlLnkpfWZvcihsZXQgdD0wLGU9aC5sZW5ndGg7dDxlO3QrKyl7Y29uc3QgZT1oW3RdO24ucHVzaChlWzBdK2EsZVsxXSthLGVbMl0rYSkscys9M319dGhpcy5zZXRJbmRleChuKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBrenQoaSwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IGt6dChyLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyBrenQobywyKSl9dG9KU09OKCl7Y29uc3QgdD1WenQucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMpO3JldHVybihmdW5jdGlvbiBlKHQsbil7aWYobi5zaGFwZXM9W10sQXJyYXkuaXNBcnJheSh0KSlmb3IobGV0IGU9MCxpPXQubGVuZ3RoO2U8aTtlKyspbi5zaGFwZXMucHVzaCh0W2VdLnV1aWQpO2Vsc2Ugbi5zaGFwZXMucHVzaCh0LnV1aWQpO3JldHVybiBufSkodGhpcy5wYXJhbWV0ZXJzLnNoYXBlcyx0KX19Y2xhc3Mga1Z0IGV4dGVuZHMgVnp0e2NvbnN0cnVjdG9yKHQ9MSxlPTgsbj02LGk9MCxyPTIqTWF0aC5QSSxvPTAsYT1NYXRoLlBJKXtzdXBlcigpLHRoaXMudHlwZT0iU3BoZXJlR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cmFkaXVzOnQsd2lkdGhTZWdtZW50czplLGhlaWdodFNlZ21lbnRzOm4scGhpU3RhcnQ6aSxwaGlMZW5ndGg6cix0aGV0YVN0YXJ0Om8sdGhldGFMZW5ndGg6YX0sZT1NYXRoLm1heCgzLE1hdGguZmxvb3IoZSkpLG49TWF0aC5tYXgoMixNYXRoLmZsb29yKG4pKTtjb25zdCBzPU1hdGgubWluKG8rYSxNYXRoLlBJKTtsZXQgbD0wO2NvbnN0IGM9W10sdT1uZXcgcU90LGg9bmV3IHFPdCxkPVtdLHA9W10sZj1bXSxtPVtdO2ZvcihsZXQgZD0wO2Q8PW47ZCsrKXtjb25zdCBnPVtdLF89ZC9uO2xldCB5PTA7MD09ZCYmMD09bz95PS41L2U6ZD09biYmcz09TWF0aC5QSSYmKHk9LS41L2UpO2ZvcihsZXQgbj0wO248PWU7bisrKXtjb25zdCBzPW4vZTt1Lng9LXQqTWF0aC5jb3MoaStzKnIpKk1hdGguc2luKG8rXyphKSx1Lnk9dCpNYXRoLmNvcyhvK18qYSksdS56PXQqTWF0aC5zaW4oaStzKnIpKk1hdGguc2luKG8rXyphKSxwLnB1c2godS54LHUueSx1LnopLGguY29weSh1KS5ub3JtYWxpemUoKSxmLnB1c2goaC54LGgueSxoLnopLG0ucHVzaChzK3ksMS1fKSxnLnB1c2gobCsrKX1jLnB1c2goZyl9Zm9yKGxldCB0PTA7dDxuO3QrKylmb3IobGV0IGk9MDtpPGU7aSsrKXtjb25zdCBlPWNbdF1baSsxXSxyPWNbdF1baV0sYT1jW3QrMV1baV0sbD1jW3QrMV1baSsxXTsoMCE9PXR8fG8+MCkmJmQucHVzaChlLHIsbCksKHQhPT1uLTF8fHM8TWF0aC5QSSkmJmQucHVzaChyLGEsbCl9dGhpcy5zZXRJbmRleChkKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBrenQocCwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IGt6dChmLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyBrenQobSwyKSl9fWNsYXNzIExWdCBleHRlbmRzIFZGdHtjb25zdHJ1Y3Rvcih0PTEsZT0wKXtzdXBlcihbMSwxLDEsLTEsLTEsMSwtMSwxLC0xLDEsLTEsLTFdLFsyLDEsMCwwLDMsMiwxLDMsMCwyLDMsMV0sdCxlKSx0aGlzLnR5cGU9IlRldHJhaGVkcm9uR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cmFkaXVzOnQsZGV0YWlsOmV9fX1jbGFzcyBQVnQgZXh0ZW5kcyB4VnR7Y29uc3RydWN0b3IodCxlPXt9KXtjb25zdCBuPWUuZm9udDtpZighbnx8IW4uaXNGb250KXJldHVybiBjb25zb2xlLmVycm9yKCJUSFJFRS5UZXh0R2VvbWV0cnk6IGZvbnQgcGFyYW1ldGVyIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5Gb250LiIpLG5ldyBWenQ7Y29uc3QgaT1uLmdlbmVyYXRlU2hhcGVzKHQsZS5zaXplKTtlLmRlcHRoPXZvaWQgMCE9PWUuaGVpZ2h0P2UuaGVpZ2h0OjUwLHZvaWQgMD09PWUuYmV2ZWxUaGlja25lc3MmJihlLmJldmVsVGhpY2tuZXNzPTEwKSx2b2lkIDA9PT1lLmJldmVsU2l6ZSYmKGUuYmV2ZWxTaXplPTgpLHZvaWQgMD09PWUuYmV2ZWxFbmFibGVkJiYoZS5iZXZlbEVuYWJsZWQ9ITEpLHN1cGVyKGksZSksdGhpcy50eXBlPSJUZXh0R2VvbWV0cnkifX1jbGFzcyBOVnQgZXh0ZW5kcyBWenR7Y29uc3RydWN0b3IodD0xLGU9LjQsbj04LGk9NixyPTIqTWF0aC5QSSl7c3VwZXIoKSx0aGlzLnR5cGU9IlRvcnVzR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cmFkaXVzOnQsdHViZTplLHJhZGlhbFNlZ21lbnRzOm4sdHVidWxhclNlZ21lbnRzOmksYXJjOnJ9LG49TWF0aC5mbG9vcihuKSxpPU1hdGguZmxvb3IoaSk7Y29uc3Qgbz1bXSxhPVtdLHM9W10sbD1bXSxjPW5ldyBxT3QsdT1uZXcgcU90LGg9bmV3IHFPdDtmb3IobGV0IG89MDtvPD1uO28rKylmb3IobGV0IGQ9MDtkPD1pO2QrKyl7Y29uc3QgcD1kL2kqcixmPW8vbipNYXRoLlBJKjI7dS54PSh0K2UqTWF0aC5jb3MoZikpKk1hdGguY29zKHApLHUueT0odCtlKk1hdGguY29zKGYpKSpNYXRoLnNpbihwKSx1Lno9ZSpNYXRoLnNpbihmKSxhLnB1c2godS54LHUueSx1LnopLGMueD10Kk1hdGguY29zKHApLGMueT10Kk1hdGguc2luKHApLGguc3ViVmVjdG9ycyh1LGMpLm5vcm1hbGl6ZSgpLHMucHVzaChoLngsaC55LGgueiksbC5wdXNoKGQvaSksbC5wdXNoKG8vbil9Zm9yKGxldCB0PTE7dDw9bjt0KyspZm9yKGxldCBlPTE7ZTw9aTtlKyspe2NvbnN0IG49KGkrMSkqKHQtMSkrZS0xLHI9KGkrMSkqKHQtMSkrZSxhPShpKzEpKnQrZTtvLnB1c2goKGkrMSkqdCtlLTEsbixhKSxvLnB1c2gobixyLGEpfXRoaXMuc2V0SW5kZXgobyksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcga3p0KGEsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyBrenQocywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcga3p0KGwsMikpfX1jbGFzcyBJVnQgZXh0ZW5kcyBWenR7Y29uc3RydWN0b3IodD0xLGU9LjQsbj02NCxpPTgscj0yLG89Myl7c3VwZXIoKSx0aGlzLnR5cGU9IlRvcnVzS25vdEdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czp0LHR1YmU6ZSx0dWJ1bGFyU2VnbWVudHM6bixyYWRpYWxTZWdtZW50czppLHA6cixxOm99LG49TWF0aC5mbG9vcihuKSxpPU1hdGguZmxvb3IoaSk7Y29uc3QgYT1bXSxzPVtdLGw9W10sYz1bXSx1PW5ldyBxT3QsaD1uZXcgcU90LGQ9bmV3IHFPdCxwPW5ldyBxT3QsZj1uZXcgcU90LG09bmV3IHFPdCxnPW5ldyBxT3Q7Zm9yKGxldCBhPTA7YTw9bjsrK2Epe2NvbnN0IHk9YS9uKnIqTWF0aC5QSSoyO18oeSxyLG8sdCxkKSxfKHkrLjAxLHIsbyx0LHApLG0uc3ViVmVjdG9ycyhwLGQpLGcuYWRkVmVjdG9ycyhwLGQpLGYuY3Jvc3NWZWN0b3JzKG0sZyksZy5jcm9zc1ZlY3RvcnMoZixtKSxmLm5vcm1hbGl6ZSgpLGcubm9ybWFsaXplKCk7Zm9yKGxldCB0PTA7dDw9aTsrK3Qpe2NvbnN0IHI9dC9pKk1hdGguUEkqMixvPS1lKk1hdGguY29zKHIpLHA9ZSpNYXRoLnNpbihyKTt1Lng9ZC54KyhvKmcueCtwKmYueCksdS55PWQueSsobypnLnkrcCpmLnkpLHUuej1kLnorKG8qZy56K3AqZi56KSxzLnB1c2godS54LHUueSx1LnopLGguc3ViVmVjdG9ycyh1LGQpLm5vcm1hbGl6ZSgpLGwucHVzaChoLngsaC55LGgueiksYy5wdXNoKGEvbiksYy5wdXNoKHQvaSl9fWZvcihsZXQgdD0xO3Q8PW47dCsrKWZvcihsZXQgZT0xO2U8PWk7ZSsrKXtjb25zdCBuPShpKzEpKnQrKGUtMSkscj0oaSsxKSp0K2Usbz0oaSsxKSoodC0xKStlO2EucHVzaCgoaSsxKSoodC0xKSsoZS0xKSxuLG8pLGEucHVzaChuLHIsbyl9ZnVuY3Rpb24gXyh0LGUsbixpLHIpe2NvbnN0IG89TWF0aC5jb3ModCksYT1NYXRoLnNpbih0KSxzPW4vZSp0LGw9TWF0aC5jb3Mocyk7ci54PWkqKDIrbCkqLjUqbyxyLnk9aSooMitsKSphKi41LHIuej1pKk1hdGguc2luKHMpKi41fXRoaXMuc2V0SW5kZXgoYSksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcga3p0KHMsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyBrenQobCwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcga3p0KGMsMikpfX1jbGFzcyBPVnQgZXh0ZW5kcyBWenR7Y29uc3RydWN0b3IodCxlPTY0LG49MSxpPTgscj0hMSl7c3VwZXIoKSx0aGlzLnR5cGU9IlR1YmVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtwYXRoOnQsdHVidWxhclNlZ21lbnRzOmUscmFkaXVzOm4scmFkaWFsU2VnbWVudHM6aSxjbG9zZWQ6cn07Y29uc3Qgbz10LmNvbXB1dGVGcmVuZXRGcmFtZXMoZSxyKTt0aGlzLnRhbmdlbnRzPW8udGFuZ2VudHMsdGhpcy5ub3JtYWxzPW8ubm9ybWFscyx0aGlzLmJpbm9ybWFscz1vLmJpbm9ybWFscztjb25zdCBhPW5ldyBxT3Qscz1uZXcgcU90LGw9bmV3IHpPdDtsZXQgYz1uZXcgcU90O2NvbnN0IHU9W10saD1bXSxkPVtdLHA9W107ZnVuY3Rpb24gZihyKXtjPXQuZ2V0UG9pbnRBdChyL2UsYyk7Y29uc3QgbD1vLm5vcm1hbHNbcl0sZD1vLmJpbm9ybWFsc1tyXTtmb3IobGV0IHQ9MDt0PD1pO3QrKyl7Y29uc3QgZT10L2kqTWF0aC5QSSoyLHI9TWF0aC5zaW4oZSksbz0tTWF0aC5jb3MoZSk7cy54PW8qbC54K3IqZC54LHMueT1vKmwueStyKmQueSxzLno9bypsLnorcipkLnoscy5ub3JtYWxpemUoKSxoLnB1c2gocy54LHMueSxzLnopLGEueD1jLngrbipzLngsYS55PWMueStuKnMueSxhLno9Yy56K24qcy56LHUucHVzaChhLngsYS55LGEueil9fSEoZnVuY3Rpb24gbSgpe2ZvcihsZXQgdD0wO3Q8ZTt0KyspZih0KTtmKCExPT09cj9lOjApLChmdW5jdGlvbiB0KCl7Zm9yKGxldCB0PTA7dDw9ZTt0KyspZm9yKGxldCBuPTA7bjw9aTtuKyspbC54PXQvZSxsLnk9bi9pLGQucHVzaChsLngsbC55KX0pKCksKGZ1bmN0aW9uIG4oKXtmb3IobGV0IHQ9MTt0PD1lO3QrKylmb3IobGV0IGU9MTtlPD1pO2UrKyl7Y29uc3Qgbj0oaSsxKSp0KyhlLTEpLHI9KGkrMSkqdCtlLG89KGkrMSkqKHQtMSkrZTtwLnB1c2goKGkrMSkqKHQtMSkrKGUtMSksbixvKSxwLnB1c2gobixyLG8pfX0pKCl9KSgpLHRoaXMuc2V0SW5kZXgocCksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcga3p0KHUsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyBrenQoaCwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcga3p0KGQsMikpfXRvSlNPTigpe2NvbnN0IHQ9Vnp0LnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzKTtyZXR1cm4gdC5wYXRoPXRoaXMucGFyYW1ldGVycy5wYXRoLnRvSlNPTigpLHR9fWNsYXNzIFJWdCBleHRlbmRzIFZ6dHtjb25zdHJ1Y3Rvcih0KXtpZihzdXBlcigpLHRoaXMudHlwZT0iV2lyZWZyYW1lR2VvbWV0cnkiLCEwPT09dC5pc0dlb21ldHJ5KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLldpcmVmcmFtZUdlb21ldHJ5IG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIik7Y29uc3QgZT1bXSxuPVswLDBdLGk9e30scj1uZXcgcU90O2lmKG51bGwhPT10LmluZGV4KXtjb25zdCBvPXQuYXR0cmlidXRlcy5wb3NpdGlvbixhPXQuaW5kZXg7bGV0IHM9dC5ncm91cHM7MD09PXMubGVuZ3RoJiYocz1be3N0YXJ0OjAsY291bnQ6YS5jb3VudCxtYXRlcmlhbEluZGV4OjB9XSk7Zm9yKGxldCB0PTAsZT1zLmxlbmd0aDt0PGU7Kyt0KXtjb25zdCBlPXNbdF0scj1lLnN0YXJ0O2ZvcihsZXQgdD1yLG89citlLmNvdW50O3Q8bzt0Kz0zKWZvcihsZXQgZT0wO2U8MztlKyspe2NvbnN0IHI9YS5nZXRYKHQrZSksbz1hLmdldFgodCsoZSsxKSUzKTtuWzBdPU1hdGgubWluKHIsbyksblsxXT1NYXRoLm1heChyLG8pO2NvbnN0IHM9blswXSsiLCIrblsxXTt2b2lkIDA9PT1pW3NdJiYoaVtzXT17aW5kZXgxOm5bMF0saW5kZXgyOm5bMV19KX19Zm9yKGNvbnN0IHQgaW4gaSl7Y29uc3Qgbj1pW3RdO3IuZnJvbUJ1ZmZlckF0dHJpYnV0ZShvLG4uaW5kZXgxKSxlLnB1c2goci54LHIueSxyLnopLHIuZnJvbUJ1ZmZlckF0dHJpYnV0ZShvLG4uaW5kZXgyKSxlLnB1c2goci54LHIueSxyLnopfX1lbHNle2NvbnN0IG49dC5hdHRyaWJ1dGVzLnBvc2l0aW9uO2ZvcihsZXQgdD0wLGk9bi5jb3VudC8zO3Q8aTt0KyspZm9yKGxldCBpPTA7aTwzO2krKylyLmZyb21CdWZmZXJBdHRyaWJ1dGUobiwzKnQraSksZS5wdXNoKHIueCxyLnksci56KSxyLmZyb21CdWZmZXJBdHRyaWJ1dGUobiwzKnQrKGkrMSklMyksZS5wdXNoKHIueCxyLnksci56KX10aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBrenQoZSwzKSl9fXZhciB6VnQ9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsQm94R2VvbWV0cnk6c0R0LEJveEJ1ZmZlckdlb21ldHJ5OnNEdCxDaXJjbGVHZW9tZXRyeTpCRnQsQ2lyY2xlQnVmZmVyR2VvbWV0cnk6QkZ0LENvbmVHZW9tZXRyeTpGRnQsQ29uZUJ1ZmZlckdlb21ldHJ5OkZGdCxDeWxpbmRlckdlb21ldHJ5OkhGdCxDeWxpbmRlckJ1ZmZlckdlb21ldHJ5OkhGdCxEb2RlY2FoZWRyb25HZW9tZXRyeTpVRnQsRG9kZWNhaGVkcm9uQnVmZmVyR2VvbWV0cnk6VUZ0LEVkZ2VzR2VvbWV0cnk6WUZ0LEV4dHJ1ZGVHZW9tZXRyeTp4VnQsRXh0cnVkZUJ1ZmZlckdlb21ldHJ5OnhWdCxJY29zYWhlZHJvbkdlb21ldHJ5OlNWdCxJY29zYWhlZHJvbkJ1ZmZlckdlb21ldHJ5OlNWdCxMYXRoZUdlb21ldHJ5Ok1WdCxMYXRoZUJ1ZmZlckdlb21ldHJ5Ok1WdCxPY3RhaGVkcm9uR2VvbWV0cnk6RVZ0LE9jdGFoZWRyb25CdWZmZXJHZW9tZXRyeTpFVnQsUGFyYW1ldHJpY0dlb21ldHJ5OlRWdCxQYXJhbWV0cmljQnVmZmVyR2VvbWV0cnk6VFZ0LFBsYW5lR2VvbWV0cnk6TUR0LFBsYW5lQnVmZmVyR2VvbWV0cnk6TUR0LFBvbHloZWRyb25HZW9tZXRyeTpWRnQsUG9seWhlZHJvbkJ1ZmZlckdlb21ldHJ5OlZGdCxSaW5nR2VvbWV0cnk6Q1Z0LFJpbmdCdWZmZXJHZW9tZXRyeTpDVnQsU2hhcGVHZW9tZXRyeTpBVnQsU2hhcGVCdWZmZXJHZW9tZXRyeTpBVnQsU3BoZXJlR2VvbWV0cnk6a1Z0LFNwaGVyZUJ1ZmZlckdlb21ldHJ5OmtWdCxUZXRyYWhlZHJvbkdlb21ldHJ5OkxWdCxUZXRyYWhlZHJvbkJ1ZmZlckdlb21ldHJ5OkxWdCxUZXh0R2VvbWV0cnk6UFZ0LFRleHRCdWZmZXJHZW9tZXRyeTpQVnQsVG9ydXNHZW9tZXRyeTpOVnQsVG9ydXNCdWZmZXJHZW9tZXRyeTpOVnQsVG9ydXNLbm90R2VvbWV0cnk6SVZ0LFRvcnVzS25vdEJ1ZmZlckdlb21ldHJ5OklWdCxUdWJlR2VvbWV0cnk6T1Z0LFR1YmVCdWZmZXJHZW9tZXRyeTpPVnQsV2lyZWZyYW1lR2VvbWV0cnk6UlZ0fSk7ZnVuY3Rpb24gRFZ0KHQpe2d6dC5jYWxsKHRoaXMpLHRoaXMudHlwZT0iU2hhZG93TWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IHB6dCgwKSx0aGlzLnRyYW5zcGFyZW50PSEwLHRoaXMuc2V0VmFsdWVzKHQpfWZ1bmN0aW9uIEJWdCh0KXtoRHQuY2FsbCh0aGlzLHQpLHRoaXMudHlwZT0iUmF3U2hhZGVyTWF0ZXJpYWwifWZ1bmN0aW9uIEhWdCh0KXtnenQuY2FsbCh0aGlzKSx0aGlzLmRlZmluZXM9e1NUQU5EQVJEOiIifSx0aGlzLnR5cGU9Ik1lc2hTdGFuZGFyZE1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBwenQoMTY3NzcyMTUpLHRoaXMucm91Z2huZXNzPTEsdGhpcy5tZXRhbG5lc3M9MCx0aGlzLm1hcD1udWxsLHRoaXMubGlnaHRNYXA9bnVsbCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTEsdGhpcy5hb01hcD1udWxsLHRoaXMuYW9NYXBJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlPW5ldyBwenQoMCksdGhpcy5lbWlzc2l2ZUludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmVNYXA9bnVsbCx0aGlzLmJ1bXBNYXA9bnVsbCx0aGlzLmJ1bXBTY2FsZT0xLHRoaXMubm9ybWFsTWFwPW51bGwsdGhpcy5ub3JtYWxNYXBUeXBlPTAsdGhpcy5ub3JtYWxTY2FsZT1uZXcgek90KDEsMSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy5yb3VnaG5lc3NNYXA9bnVsbCx0aGlzLm1ldGFsbmVzc01hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmVudk1hcD1udWxsLHRoaXMuZW52TWFwSW50ZW5zaXR5PTEsdGhpcy5yZWZyYWN0aW9uUmF0aW89Ljk4LHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy53aXJlZnJhbWVMaW5lY2FwPSJyb3VuZCIsdGhpcy53aXJlZnJhbWVMaW5lam9pbj0icm91bmQiLHRoaXMuc2tpbm5pbmc9ITEsdGhpcy5tb3JwaFRhcmdldHM9ITEsdGhpcy5tb3JwaE5vcm1hbHM9ITEsdGhpcy52ZXJ0ZXhUYW5nZW50cz0hMSx0aGlzLnNldFZhbHVlcyh0KX1mdW5jdGlvbiBGVnQodCl7SFZ0LmNhbGwodGhpcyksdGhpcy5kZWZpbmVzPXtTVEFOREFSRDoiIixQSFlTSUNBTDoiIn0sdGhpcy50eXBlPSJNZXNoUGh5c2ljYWxNYXRlcmlhbCIsdGhpcy5jbGVhcmNvYXQ9MCx0aGlzLmNsZWFyY29hdE1hcD1udWxsLHRoaXMuY2xlYXJjb2F0Um91Z2huZXNzPTAsdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3NNYXA9bnVsbCx0aGlzLmNsZWFyY29hdE5vcm1hbFNjYWxlPW5ldyB6T3QoMSwxKSx0aGlzLmNsZWFyY29hdE5vcm1hbE1hcD1udWxsLHRoaXMucmVmbGVjdGl2aXR5PS41LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpb3IiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMSsuNCp0aGlzLnJlZmxlY3Rpdml0eSkvKDEtLjQqdGhpcy5yZWZsZWN0aXZpdHkpfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5yZWZsZWN0aXZpdHk9Uk90LmNsYW1wKDIuNSoodC0xKS8odCsxKSwwLDEpfX0pLHRoaXMuc2hlZW49bnVsbCx0aGlzLnRyYW5zbWlzc2lvbj0wLHRoaXMudHJhbnNtaXNzaW9uTWFwPW51bGwsdGhpcy5zZXRWYWx1ZXModCl9ZnVuY3Rpb24gVlZ0KHQpe2d6dC5jYWxsKHRoaXMpLHRoaXMudHlwZT0iTWVzaFBob25nTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IHB6dCgxNjc3NzIxNSksdGhpcy5zcGVjdWxhcj1uZXcgcHp0KDExMTg0ODEpLHRoaXMuc2hpbmluZXNzPTMwLHRoaXMubWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmU9bmV3IHB6dCgwKSx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZU1hcD1udWxsLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9MCx0aGlzLm5vcm1hbFNjYWxlPW5ldyB6T3QoMSwxKSx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLnNwZWN1bGFyTWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZW52TWFwPW51bGwsdGhpcy5jb21iaW5lPTAsdGhpcy5yZWZsZWN0aXZpdHk9MSx0aGlzLnJlZnJhY3Rpb25SYXRpbz0uOTgsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZUxpbmVjYXA9InJvdW5kIix0aGlzLndpcmVmcmFtZUxpbmVqb2luPSJyb3VuZCIsdGhpcy5za2lubmluZz0hMSx0aGlzLm1vcnBoVGFyZ2V0cz0hMSx0aGlzLm1vcnBoTm9ybWFscz0hMSx0aGlzLnNldFZhbHVlcyh0KX1mdW5jdGlvbiBVVnQodCl7Z3p0LmNhbGwodGhpcyksdGhpcy5kZWZpbmVzPXtUT09OOiIifSx0aGlzLnR5cGU9Ik1lc2hUb29uTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IHB6dCgxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmdyYWRpZW50TWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmU9bmV3IHB6dCgwKSx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZU1hcD1udWxsLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9MCx0aGlzLm5vcm1hbFNjYWxlPW5ldyB6T3QoMSwxKSx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZUxpbmVjYXA9InJvdW5kIix0aGlzLndpcmVmcmFtZUxpbmVqb2luPSJyb3VuZCIsdGhpcy5za2lubmluZz0hMSx0aGlzLm1vcnBoVGFyZ2V0cz0hMSx0aGlzLm1vcnBoTm9ybWFscz0hMSx0aGlzLnNldFZhbHVlcyh0KX1mdW5jdGlvbiBqVnQodCl7Z3p0LmNhbGwodGhpcyksdGhpcy50eXBlPSJNZXNoTm9ybWFsTWF0ZXJpYWwiLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9MCx0aGlzLm5vcm1hbFNjYWxlPW5ldyB6T3QoMSwxKSx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMuZm9nPSExLHRoaXMuc2tpbm5pbmc9ITEsdGhpcy5tb3JwaFRhcmdldHM9ITEsdGhpcy5tb3JwaE5vcm1hbHM9ITEsdGhpcy5zZXRWYWx1ZXModCl9ZnVuY3Rpb24gR1Z0KHQpe2d6dC5jYWxsKHRoaXMpLHRoaXMudHlwZT0iTWVzaExhbWJlcnRNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgcHp0KDE2Nzc3MjE1KSx0aGlzLm1hcD1udWxsLHRoaXMubGlnaHRNYXA9bnVsbCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTEsdGhpcy5hb01hcD1udWxsLHRoaXMuYW9NYXBJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlPW5ldyBwenQoMCksdGhpcy5lbWlzc2l2ZUludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmVNYXA9bnVsbCx0aGlzLnNwZWN1bGFyTWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZW52TWFwPW51bGwsdGhpcy5jb21iaW5lPTAsdGhpcy5yZWZsZWN0aXZpdHk9MSx0aGlzLnJlZnJhY3Rpb25SYXRpbz0uOTgsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZUxpbmVjYXA9InJvdW5kIix0aGlzLndpcmVmcmFtZUxpbmVqb2luPSJyb3VuZCIsdGhpcy5za2lubmluZz0hMSx0aGlzLm1vcnBoVGFyZ2V0cz0hMSx0aGlzLm1vcnBoTm9ybWFscz0hMSx0aGlzLnNldFZhbHVlcyh0KX1mdW5jdGlvbiBXVnQodCl7Z3p0LmNhbGwodGhpcyksdGhpcy5kZWZpbmVzPXtNQVRDQVA6IiJ9LHRoaXMudHlwZT0iTWVzaE1hdGNhcE1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBwenQoMTY3NzcyMTUpLHRoaXMubWF0Y2FwPW51bGwsdGhpcy5tYXA9bnVsbCx0aGlzLmJ1bXBNYXA9bnVsbCx0aGlzLmJ1bXBTY2FsZT0xLHRoaXMubm9ybWFsTWFwPW51bGwsdGhpcy5ub3JtYWxNYXBUeXBlPTAsdGhpcy5ub3JtYWxTY2FsZT1uZXcgek90KDEsMSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuc2tpbm5pbmc9ITEsdGhpcy5tb3JwaFRhcmdldHM9ITEsdGhpcy5tb3JwaE5vcm1hbHM9ITEsdGhpcy5zZXRWYWx1ZXModCl9ZnVuY3Rpb24gcVZ0KHQpe2dGdC5jYWxsKHRoaXMpLHRoaXMudHlwZT0iTGluZURhc2hlZE1hdGVyaWFsIix0aGlzLnNjYWxlPTEsdGhpcy5kYXNoU2l6ZT0zLHRoaXMuZ2FwU2l6ZT0xLHRoaXMuc2V0VmFsdWVzKHQpfShEVnQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZ3p0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPURWdCxEVnQucHJvdG90eXBlLmlzU2hhZG93TWF0ZXJpYWw9ITAsRFZ0LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHQpe3JldHVybiBnenQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzfSwoQlZ0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGhEdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1CVnQsQlZ0LnByb3RvdHlwZS5pc1Jhd1NoYWRlck1hdGVyaWFsPSEwLChIVnQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZ3p0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPUhWdCxIVnQucHJvdG90eXBlLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw9ITAsSFZ0LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHQpe3JldHVybiBnenQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMuZGVmaW5lcz17U1RBTkRBUkQ6IiJ9LHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLnJvdWdobmVzcz10LnJvdWdobmVzcyx0aGlzLm1ldGFsbmVzcz10Lm1ldGFsbmVzcyx0aGlzLm1hcD10Lm1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5lbWlzc2l2ZS5jb3B5KHQuZW1pc3NpdmUpLHRoaXMuZW1pc3NpdmVNYXA9dC5lbWlzc2l2ZU1hcCx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PXQuZW1pc3NpdmVJbnRlbnNpdHksdGhpcy5idW1wTWFwPXQuYnVtcE1hcCx0aGlzLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSx0aGlzLm5vcm1hbE1hcD10Lm5vcm1hbE1hcCx0aGlzLm5vcm1hbE1hcFR5cGU9dC5ub3JtYWxNYXBUeXBlLHRoaXMubm9ybWFsU2NhbGUuY29weSh0Lm5vcm1hbFNjYWxlKSx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLnJvdWdobmVzc01hcD10LnJvdWdobmVzc01hcCx0aGlzLm1ldGFsbmVzc01hcD10Lm1ldGFsbmVzc01hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5lbnZNYXA9dC5lbnZNYXAsdGhpcy5lbnZNYXBJbnRlbnNpdHk9dC5lbnZNYXBJbnRlbnNpdHksdGhpcy5yZWZyYWN0aW9uUmF0aW89dC5yZWZyYWN0aW9uUmF0aW8sdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpcy5za2lubmluZz10LnNraW5uaW5nLHRoaXMubW9ycGhUYXJnZXRzPXQubW9ycGhUYXJnZXRzLHRoaXMubW9ycGhOb3JtYWxzPXQubW9ycGhOb3JtYWxzLHRoaXMudmVydGV4VGFuZ2VudHM9dC52ZXJ0ZXhUYW5nZW50cyx0aGlzfSwoRlZ0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEhWdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1GVnQsRlZ0LnByb3RvdHlwZS5pc01lc2hQaHlzaWNhbE1hdGVyaWFsPSEwLEZWdC5wcm90b3R5cGUuY29weT1mdW5jdGlvbih0KXtyZXR1cm4gSFZ0LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLmRlZmluZXM9e1NUQU5EQVJEOiIiLFBIWVNJQ0FMOiIifSx0aGlzLmNsZWFyY29hdD10LmNsZWFyY29hdCx0aGlzLmNsZWFyY29hdE1hcD10LmNsZWFyY29hdE1hcCx0aGlzLmNsZWFyY29hdFJvdWdobmVzcz10LmNsZWFyY29hdFJvdWdobmVzcyx0aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcD10LmNsZWFyY29hdFJvdWdobmVzc01hcCx0aGlzLmNsZWFyY29hdE5vcm1hbE1hcD10LmNsZWFyY29hdE5vcm1hbE1hcCx0aGlzLmNsZWFyY29hdE5vcm1hbFNjYWxlLmNvcHkodC5jbGVhcmNvYXROb3JtYWxTY2FsZSksdGhpcy5yZWZsZWN0aXZpdHk9dC5yZWZsZWN0aXZpdHksdGhpcy5zaGVlbj10LnNoZWVuPyh0aGlzLnNoZWVufHxuZXcgcHp0KS5jb3B5KHQuc2hlZW4pOm51bGwsdGhpcy50cmFuc21pc3Npb249dC50cmFuc21pc3Npb24sdGhpcy50cmFuc21pc3Npb25NYXA9dC50cmFuc21pc3Npb25NYXAsdGhpc30sKFZWdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShnenQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9VlZ0LFZWdC5wcm90b3R5cGUuaXNNZXNoUGhvbmdNYXRlcmlhbD0hMCxWVnQucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24odCl7cmV0dXJuIGd6dC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMuc3BlY3VsYXIuY29weSh0LnNwZWN1bGFyKSx0aGlzLnNoaW5pbmVzcz10LnNoaW5pbmVzcyx0aGlzLm1hcD10Lm1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5lbWlzc2l2ZS5jb3B5KHQuZW1pc3NpdmUpLHRoaXMuZW1pc3NpdmVNYXA9dC5lbWlzc2l2ZU1hcCx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PXQuZW1pc3NpdmVJbnRlbnNpdHksdGhpcy5idW1wTWFwPXQuYnVtcE1hcCx0aGlzLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSx0aGlzLm5vcm1hbE1hcD10Lm5vcm1hbE1hcCx0aGlzLm5vcm1hbE1hcFR5cGU9dC5ub3JtYWxNYXBUeXBlLHRoaXMubm9ybWFsU2NhbGUuY29weSh0Lm5vcm1hbFNjYWxlKSx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLnNwZWN1bGFyTWFwPXQuc3BlY3VsYXJNYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZW52TWFwPXQuZW52TWFwLHRoaXMuY29tYmluZT10LmNvbWJpbmUsdGhpcy5yZWZsZWN0aXZpdHk9dC5yZWZsZWN0aXZpdHksdGhpcy5yZWZyYWN0aW9uUmF0aW89dC5yZWZyYWN0aW9uUmF0aW8sdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpcy5za2lubmluZz10LnNraW5uaW5nLHRoaXMubW9ycGhUYXJnZXRzPXQubW9ycGhUYXJnZXRzLHRoaXMubW9ycGhOb3JtYWxzPXQubW9ycGhOb3JtYWxzLHRoaXN9LChVVnQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZ3p0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPVVWdCxVVnQucHJvdG90eXBlLmlzTWVzaFRvb25NYXRlcmlhbD0hMCxVVnQucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24odCl7cmV0dXJuIGd6dC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubWFwPXQubWFwLHRoaXMuZ3JhZGllbnRNYXA9dC5ncmFkaWVudE1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5lbWlzc2l2ZS5jb3B5KHQuZW1pc3NpdmUpLHRoaXMuZW1pc3NpdmVNYXA9dC5lbWlzc2l2ZU1hcCx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PXQuZW1pc3NpdmVJbnRlbnNpdHksdGhpcy5idW1wTWFwPXQuYnVtcE1hcCx0aGlzLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSx0aGlzLm5vcm1hbE1hcD10Lm5vcm1hbE1hcCx0aGlzLm5vcm1hbE1hcFR5cGU9dC5ub3JtYWxNYXBUeXBlLHRoaXMubm9ybWFsU2NhbGUuY29weSh0Lm5vcm1hbFNjYWxlKSx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpcy5za2lubmluZz10LnNraW5uaW5nLHRoaXMubW9ycGhUYXJnZXRzPXQubW9ycGhUYXJnZXRzLHRoaXMubW9ycGhOb3JtYWxzPXQubW9ycGhOb3JtYWxzLHRoaXN9LChqVnQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZ3p0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWpWdCxqVnQucHJvdG90eXBlLmlzTWVzaE5vcm1hbE1hdGVyaWFsPSEwLGpWdC5wcm90b3R5cGUuY29weT1mdW5jdGlvbih0KXtyZXR1cm4gZ3p0LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMuc2tpbm5pbmc9dC5za2lubmluZyx0aGlzLm1vcnBoVGFyZ2V0cz10Lm1vcnBoVGFyZ2V0cyx0aGlzLm1vcnBoTm9ybWFscz10Lm1vcnBoTm9ybWFscyx0aGlzfSwoR1Z0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGd6dC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1HVnQsR1Z0LnByb3RvdHlwZS5pc01lc2hMYW1iZXJ0TWF0ZXJpYWw9ITAsR1Z0LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHQpe3JldHVybiBnenQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hcD10Lm1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5lbWlzc2l2ZS5jb3B5KHQuZW1pc3NpdmUpLHRoaXMuZW1pc3NpdmVNYXA9dC5lbWlzc2l2ZU1hcCx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PXQuZW1pc3NpdmVJbnRlbnNpdHksdGhpcy5zcGVjdWxhck1hcD10LnNwZWN1bGFyTWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmVudk1hcD10LmVudk1hcCx0aGlzLmNvbWJpbmU9dC5jb21iaW5lLHRoaXMucmVmbGVjdGl2aXR5PXQucmVmbGVjdGl2aXR5LHRoaXMucmVmcmFjdGlvblJhdGlvPXQucmVmcmFjdGlvblJhdGlvLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMud2lyZWZyYW1lTGluZWNhcD10LndpcmVmcmFtZUxpbmVjYXAsdGhpcy53aXJlZnJhbWVMaW5lam9pbj10LndpcmVmcmFtZUxpbmVqb2luLHRoaXMuc2tpbm5pbmc9dC5za2lubmluZyx0aGlzLm1vcnBoVGFyZ2V0cz10Lm1vcnBoVGFyZ2V0cyx0aGlzLm1vcnBoTm9ybWFscz10Lm1vcnBoTm9ybWFscyx0aGlzfSwoV1Z0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGd6dC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1XVnQsV1Z0LnByb3RvdHlwZS5pc01lc2hNYXRjYXBNYXRlcmlhbD0hMCxXVnQucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24odCl7cmV0dXJuIGd6dC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy5kZWZpbmVzPXtNQVRDQVA6IiJ9LHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hdGNhcD10Lm1hdGNhcCx0aGlzLm1hcD10Lm1hcCx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLnNraW5uaW5nPXQuc2tpbm5pbmcsdGhpcy5tb3JwaFRhcmdldHM9dC5tb3JwaFRhcmdldHMsdGhpcy5tb3JwaE5vcm1hbHM9dC5tb3JwaE5vcm1hbHMsdGhpc30sKHFWdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShnRnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9cVZ0LHFWdC5wcm90b3R5cGUuaXNMaW5lRGFzaGVkTWF0ZXJpYWw9ITAscVZ0LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHQpe3JldHVybiBnRnQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMuc2NhbGU9dC5zY2FsZSx0aGlzLmRhc2hTaXplPXQuZGFzaFNpemUsdGhpcy5nYXBTaXplPXQuZ2FwU2l6ZSx0aGlzfTt2YXIgWVZ0PU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLFNoYWRvd01hdGVyaWFsOkRWdCxTcHJpdGVNYXRlcmlhbDp6SHQsUmF3U2hhZGVyTWF0ZXJpYWw6QlZ0LFNoYWRlck1hdGVyaWFsOmhEdCxQb2ludHNNYXRlcmlhbDpDRnQsTWVzaFBoeXNpY2FsTWF0ZXJpYWw6RlZ0LE1lc2hTdGFuZGFyZE1hdGVyaWFsOkhWdCxNZXNoUGhvbmdNYXRlcmlhbDpWVnQsTWVzaFRvb25NYXRlcmlhbDpVVnQsTWVzaE5vcm1hbE1hdGVyaWFsOmpWdCxNZXNoTGFtYmVydE1hdGVyaWFsOkdWdCxNZXNoRGVwdGhNYXRlcmlhbDpfSHQsTWVzaERpc3RhbmNlTWF0ZXJpYWw6eUh0LE1lc2hCYXNpY01hdGVyaWFsOl96dCxNZXNoTWF0Y2FwTWF0ZXJpYWw6V1Z0LExpbmVEYXNoZWRNYXRlcmlhbDpxVnQsTGluZUJhc2ljTWF0ZXJpYWw6Z0Z0LE1hdGVyaWFsOmd6dH0pO2NvbnN0IFhWdD17YXJyYXlTbGljZTpmdW5jdGlvbih0LGUsbil7cmV0dXJuIFhWdC5pc1R5cGVkQXJyYXkodCk/bmV3IHQuY29uc3RydWN0b3IodC5zdWJhcnJheShlLHZvaWQgMCE9PW4/bjp0Lmxlbmd0aCkpOnQuc2xpY2UoZSxuKX0sY29udmVydEFycmF5OmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4hdHx8IW4mJnQuY29uc3RydWN0b3I9PT1lP3Q6Im51bWJlciI9PXR5cGVvZiBlLkJZVEVTX1BFUl9FTEVNRU5UP25ldyBlKHQpOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpfSxpc1R5cGVkQXJyYXk6ZnVuY3Rpb24odCl7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyh0KSYmISh0IGluc3RhbmNlb2YgRGF0YVZpZXcpfSxnZXRLZXlmcmFtZU9yZGVyOmZ1bmN0aW9uKHQpe2NvbnN0IGU9dC5sZW5ndGgsbj1uZXcgQXJyYXkoZSk7Zm9yKGxldCB0PTA7dCE9PWU7Kyt0KW5bdF09dDtyZXR1cm4gbi5zb3J0KChmdW5jdGlvbiBpKGUsbil7cmV0dXJuIHRbZV0tdFtuXX0pKSxufSxzb3J0ZWRBcnJheTpmdW5jdGlvbih0LGUsbil7Y29uc3QgaT10Lmxlbmd0aCxyPW5ldyB0LmNvbnN0cnVjdG9yKGkpO2ZvcihsZXQgbz0wLGE9MDthIT09aTsrK28pe2NvbnN0IGk9bltvXSplO2ZvcihsZXQgbj0wO24hPT1lOysrbilyW2ErK109dFtpK25dfXJldHVybiByfSxmbGF0dGVuSlNPTjpmdW5jdGlvbih0LGUsbixpKXtsZXQgcj0xLG89dFswXTtmb3IoO3ZvaWQgMCE9PW8mJnZvaWQgMD09PW9baV07KW89dFtyKytdO2lmKHZvaWQgMD09PW8pcmV0dXJuO2xldCBhPW9baV07aWYodm9pZCAwIT09YSlpZihBcnJheS5pc0FycmF5KGEpKWRve2E9b1tpXSx2b2lkIDAhPT1hJiYoZS5wdXNoKG8udGltZSksbi5wdXNoLmFwcGx5KG4sYSkpLG89dFtyKytdfXdoaWxlKHZvaWQgMCE9PW8pO2Vsc2UgaWYodm9pZCAwIT09YS50b0FycmF5KWRve2E9b1tpXSx2b2lkIDAhPT1hJiYoZS5wdXNoKG8udGltZSksYS50b0FycmF5KG4sbi5sZW5ndGgpKSxvPXRbcisrXX13aGlsZSh2b2lkIDAhPT1vKTtlbHNlIGRve2E9b1tpXSx2b2lkIDAhPT1hJiYoZS5wdXNoKG8udGltZSksbi5wdXNoKGEpKSxvPXRbcisrXX13aGlsZSh2b2lkIDAhPT1vKX0sc3ViY2xpcDpmdW5jdGlvbih0LGUsbixpLHI9MzApe2NvbnN0IG89dC5jbG9uZSgpO28ubmFtZT1lO2NvbnN0IGE9W107Zm9yKGxldCB0PTA7dDxvLnRyYWNrcy5sZW5ndGg7Kyt0KXtjb25zdCBlPW8udHJhY2tzW3RdLHM9ZS5nZXRWYWx1ZVNpemUoKSxsPVtdLGM9W107Zm9yKGxldCB0PTA7dDxlLnRpbWVzLmxlbmd0aDsrK3Qpe2NvbnN0IG89ZS50aW1lc1t0XSpyO2lmKCEobzxufHxvPj1pKSl7bC5wdXNoKGUudGltZXNbdF0pO2ZvcihsZXQgbj0wO248czsrK24pYy5wdXNoKGUudmFsdWVzW3QqcytuXSl9fTAhPT1sLmxlbmd0aCYmKGUudGltZXM9WFZ0LmNvbnZlcnRBcnJheShsLGUudGltZXMuY29uc3RydWN0b3IpLGUudmFsdWVzPVhWdC5jb252ZXJ0QXJyYXkoYyxlLnZhbHVlcy5jb25zdHJ1Y3RvciksYS5wdXNoKGUpKX1vLnRyYWNrcz1hO2xldCBzPTEvMDtmb3IobGV0IHQ9MDt0PG8udHJhY2tzLmxlbmd0aDsrK3Qpcz5vLnRyYWNrc1t0XS50aW1lc1swXSYmKHM9by50cmFja3NbdF0udGltZXNbMF0pO2ZvcihsZXQgdD0wO3Q8by50cmFja3MubGVuZ3RoOysrdClvLnRyYWNrc1t0XS5zaGlmdCgtMSpzKTtyZXR1cm4gby5yZXNldER1cmF0aW9uKCksb30sbWFrZUNsaXBBZGRpdGl2ZTpmdW5jdGlvbih0LGU9MCxuPXQsaT0zMCl7aTw9MCYmKGk9MzApO2NvbnN0IHI9bi50cmFja3MubGVuZ3RoLG89ZS9pO2ZvcihsZXQgZT0wO2U8cjsrK2Upe2NvbnN0IGk9bi50cmFja3NbZV0scj1pLlZhbHVlVHlwZU5hbWU7aWYoImJvb2wiPT09cnx8InN0cmluZyI9PT1yKWNvbnRpbnVlO2NvbnN0IGE9dC50cmFja3MuZmluZCgoZnVuY3Rpb24odCl7cmV0dXJuIHQubmFtZT09PWkubmFtZSYmdC5WYWx1ZVR5cGVOYW1lPT09cn0pKTtpZih2b2lkIDA9PT1hKWNvbnRpbnVlO2xldCBzPTA7Y29uc3QgbD1pLmdldFZhbHVlU2l6ZSgpO2kuY3JlYXRlSW50ZXJwb2xhbnQuaXNJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RHTFRGQ3ViaWNTcGxpbmUmJihzPWwvMyk7bGV0IGM9MDtjb25zdCB1PWEuZ2V0VmFsdWVTaXplKCk7YS5jcmVhdGVJbnRlcnBvbGFudC5pc0ludGVycG9sYW50RmFjdG9yeU1ldGhvZEdMVEZDdWJpY1NwbGluZSYmKGM9dS8zKTtjb25zdCBoPWkudGltZXMubGVuZ3RoLTE7bGV0IGQ7aWYobzw9aS50aW1lc1swXSlkPVhWdC5hcnJheVNsaWNlKGkudmFsdWVzLHMsbC1zKTtlbHNlIGlmKG8+PWkudGltZXNbaF0pe2NvbnN0IHQ9aCpsK3M7ZD1YVnQuYXJyYXlTbGljZShpLnZhbHVlcyx0LHQrbC1zKX1lbHNle2NvbnN0IHQ9aS5jcmVhdGVJbnRlcnBvbGFudCgpLGU9cyxuPWwtczt0LmV2YWx1YXRlKG8pLGQ9WFZ0LmFycmF5U2xpY2UodC5yZXN1bHRCdWZmZXIsZSxuKX0icXVhdGVybmlvbiI9PT1yJiYobmV3IFdPdCkuZnJvbUFycmF5KGQpLm5vcm1hbGl6ZSgpLmNvbmp1Z2F0ZSgpLnRvQXJyYXkoZCk7Y29uc3QgcD1hLnRpbWVzLmxlbmd0aDtmb3IobGV0IHQ9MDt0PHA7Kyt0KXtjb25zdCBlPXQqdStjO2lmKCJxdWF0ZXJuaW9uIj09PXIpV090Lm11bHRpcGx5UXVhdGVybmlvbnNGbGF0KGEudmFsdWVzLGUsZCwwLGEudmFsdWVzLGUpO2Vsc2V7Y29uc3QgdD11LTIqYztmb3IobGV0IG49MDtuPHQ7KytuKWEudmFsdWVzW2Urbl0tPWRbbl19fX1yZXR1cm4gdC5ibGVuZE1vZGU9Yk90LHR9fTtmdW5jdGlvbiAkVnQodCxlLG4saSl7dGhpcy5wYXJhbWV0ZXJQb3NpdGlvbnM9dCx0aGlzLl9jYWNoZWRJbmRleD0wLHRoaXMucmVzdWx0QnVmZmVyPXZvaWQgMCE9PWk/aTpuZXcgZS5jb25zdHJ1Y3RvcihuKSx0aGlzLnNhbXBsZVZhbHVlcz1lLHRoaXMudmFsdWVTaXplPW59ZnVuY3Rpb24gS1Z0KHQsZSxuLGkpeyRWdC5jYWxsKHRoaXMsdCxlLG4saSksdGhpcy5fd2VpZ2h0UHJldj0tMCx0aGlzLl9vZmZzZXRQcmV2PS0wLHRoaXMuX3dlaWdodE5leHQ9LTAsdGhpcy5fb2Zmc2V0TmV4dD0tMH1mdW5jdGlvbiBaVnQodCxlLG4saSl7JFZ0LmNhbGwodGhpcyx0LGUsbixpKX1mdW5jdGlvbiBKVnQodCxlLG4saSl7JFZ0LmNhbGwodGhpcyx0LGUsbixpKX1mdW5jdGlvbiBRVnQodCxlLG4saSl7aWYodm9pZCAwPT09dCl0aHJvdyBuZXcgRXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IHRyYWNrIG5hbWUgaXMgdW5kZWZpbmVkIik7aWYodm9pZCAwPT09ZXx8MD09PWUubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogbm8ga2V5ZnJhbWVzIGluIHRyYWNrIG5hbWVkICIrdCk7dGhpcy5uYW1lPXQsdGhpcy50aW1lcz1YVnQuY29udmVydEFycmF5KGUsdGhpcy5UaW1lQnVmZmVyVHlwZSksdGhpcy52YWx1ZXM9WFZ0LmNvbnZlcnRBcnJheShuLHRoaXMuVmFsdWVCdWZmZXJUeXBlKSx0aGlzLnNldEludGVycG9sYXRpb24oaXx8dGhpcy5EZWZhdWx0SW50ZXJwb2xhdGlvbil9ZnVuY3Rpb24gdFV0KHQsZSxuKXtRVnQuY2FsbCh0aGlzLHQsZSxuKX1mdW5jdGlvbiBlVXQodCxlLG4saSl7UVZ0LmNhbGwodGhpcyx0LGUsbixpKX1mdW5jdGlvbiBuVXQodCxlLG4saSl7UVZ0LmNhbGwodGhpcyx0LGUsbixpKX1mdW5jdGlvbiBpVXQodCxlLG4saSl7JFZ0LmNhbGwodGhpcyx0LGUsbixpKX1mdW5jdGlvbiByVXQodCxlLG4saSl7UVZ0LmNhbGwodGhpcyx0LGUsbixpKX1mdW5jdGlvbiBvVXQodCxlLG4saSl7UVZ0LmNhbGwodGhpcyx0LGUsbixpKX1mdW5jdGlvbiBhVXQodCxlLG4saSl7UVZ0LmNhbGwodGhpcyx0LGUsbixpKX1mdW5jdGlvbiBzVXQodCxlPS0xLG4saT0yNTAwKXt0aGlzLm5hbWU9dCx0aGlzLnRyYWNrcz1uLHRoaXMuZHVyYXRpb249ZSx0aGlzLmJsZW5kTW9kZT1pLHRoaXMudXVpZD1ST3QuZ2VuZXJhdGVVVUlEKCksdGhpcy5kdXJhdGlvbjwwJiZ0aGlzLnJlc2V0RHVyYXRpb24oKX1mdW5jdGlvbiBsVXQodCl7aWYodm9pZCAwPT09dC50eXBlKXRocm93IG5ldyBFcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogdHJhY2sgdHlwZSB1bmRlZmluZWQsIGNhbiBub3QgcGFyc2UiKTtjb25zdCBlPShmdW5jdGlvbiBuKHQpe3N3aXRjaCh0LnRvTG93ZXJDYXNlKCkpe2Nhc2Uic2NhbGFyIjpjYXNlImRvdWJsZSI6Y2FzZSJmbG9hdCI6Y2FzZSJudW1iZXIiOmNhc2UiaW50ZWdlciI6cmV0dXJuIG5VdDtjYXNlInZlY3RvciI6Y2FzZSJ2ZWN0b3IyIjpjYXNlInZlY3RvcjMiOmNhc2UidmVjdG9yNCI6cmV0dXJuIGFVdDtjYXNlImNvbG9yIjpyZXR1cm4gZVV0O2Nhc2UicXVhdGVybmlvbiI6cmV0dXJuIHJVdDtjYXNlImJvb2wiOmNhc2UiYm9vbGVhbiI6cmV0dXJuIHRVdDtjYXNlInN0cmluZyI6cmV0dXJuIG9VdH10aHJvdyBuZXcgRXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IFVuc3VwcG9ydGVkIHR5cGVOYW1lOiAiK3QpfSkodC50eXBlKTtpZih2b2lkIDA9PT10LnRpbWVzKXtjb25zdCBlPVtdLG49W107WFZ0LmZsYXR0ZW5KU09OKHQua2V5cyxlLG4sInZhbHVlIiksdC50aW1lcz1lLHQudmFsdWVzPW59cmV0dXJuIHZvaWQgMCE9PWUucGFyc2U/ZS5wYXJzZSh0KTpuZXcgZSh0Lm5hbWUsdC50aW1lcyx0LnZhbHVlcyx0LmludGVycG9sYXRpb24pfU9iamVjdC5hc3NpZ24oJFZ0LnByb3RvdHlwZSx7ZXZhbHVhdGU6ZnVuY3Rpb24odCl7Y29uc3QgZT10aGlzLnBhcmFtZXRlclBvc2l0aW9ucztsZXQgbj10aGlzLl9jYWNoZWRJbmRleCxpPWVbbl0scj1lW24tMV07dDp7ZTp7bGV0IG87bjp7aTppZighKHQ8aSkpe2ZvcihsZXQgbz1uKzI7Oyl7aWYodm9pZCAwPT09aSl7aWYodDxyKWJyZWFrIGk7cmV0dXJuIG49ZS5sZW5ndGgsdGhpcy5fY2FjaGVkSW5kZXg9bix0aGlzLmFmdGVyRW5kXyhuLTEsdCxyKX1pZihuPT09bylicmVhaztpZihyPWksaT1lWysrbl0sdDxpKWJyZWFrIGV9bz1lLmxlbmd0aDticmVhayBufWlmKHQ+PXIpYnJlYWsgdDt7Y29uc3QgYT1lWzFdO3Q8YSYmKG49MixyPWEpO2ZvcihsZXQgbz1uLTI7Oyl7aWYodm9pZCAwPT09cilyZXR1cm4gdGhpcy5fY2FjaGVkSW5kZXg9MCx0aGlzLmJlZm9yZVN0YXJ0XygwLHQsaSk7aWYobj09PW8pYnJlYWs7aWYoaT1yLHI9ZVstLW4tMV0sdD49cilicmVhayBlfW89bixuPTB9fWZvcig7bjxvOyl7Y29uc3QgaT1uK28+Pj4xO3Q8ZVtpXT9vPWk6bj1pKzF9aWYoaT1lW25dLHI9ZVtuLTFdLHZvaWQgMD09PXIpcmV0dXJuIHRoaXMuX2NhY2hlZEluZGV4PTAsdGhpcy5iZWZvcmVTdGFydF8oMCx0LGkpO2lmKHZvaWQgMD09PWkpcmV0dXJuIG49ZS5sZW5ndGgsdGhpcy5fY2FjaGVkSW5kZXg9bix0aGlzLmFmdGVyRW5kXyhuLTEscix0KX10aGlzLl9jYWNoZWRJbmRleD1uLHRoaXMuaW50ZXJ2YWxDaGFuZ2VkXyhuLHIsaSl9cmV0dXJuIHRoaXMuaW50ZXJwb2xhdGVfKG4scix0LGkpfSxzZXR0aW5nczpudWxsLERlZmF1bHRTZXR0aW5nc186e30sZ2V0U2V0dGluZ3NfOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0dGluZ3N8fHRoaXMuRGVmYXVsdFNldHRpbmdzX30sY29weVNhbXBsZVZhbHVlXzpmdW5jdGlvbih0KXtjb25zdCBlPXRoaXMucmVzdWx0QnVmZmVyLG49dGhpcy5zYW1wbGVWYWx1ZXMsaT10aGlzLnZhbHVlU2l6ZSxyPXQqaTtmb3IobGV0IHQ9MDt0IT09aTsrK3QpZVt0XT1uW3IrdF07cmV0dXJuIGV9LGludGVycG9sYXRlXzpmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiY2FsbCB0byBhYnN0cmFjdCBtZXRob2QiKX0saW50ZXJ2YWxDaGFuZ2VkXzpmdW5jdGlvbigpe319KSxPYmplY3QuYXNzaWduKCRWdC5wcm90b3R5cGUse2JlZm9yZVN0YXJ0XzokVnQucHJvdG90eXBlLmNvcHlTYW1wbGVWYWx1ZV8sYWZ0ZXJFbmRfOiRWdC5wcm90b3R5cGUuY29weVNhbXBsZVZhbHVlX30pLEtWdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKCRWdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpLVnQsRGVmYXVsdFNldHRpbmdzXzp7ZW5kaW5nU3RhcnQ6Z090LGVuZGluZ0VuZDpnT3R9LGludGVydmFsQ2hhbmdlZF86ZnVuY3Rpb24odCxlLG4pe2NvbnN0IGk9dGhpcy5wYXJhbWV0ZXJQb3NpdGlvbnM7bGV0IHI9dC0yLG89dCsxLGE9aVtyXSxzPWlbb107aWYodm9pZCAwPT09YSlzd2l0Y2godGhpcy5nZXRTZXR0aW5nc18oKS5lbmRpbmdTdGFydCl7Y2FzZSBfT3Q6cj10LGE9MiplLW47YnJlYWs7Y2FzZSB5T3Q6cj1pLmxlbmd0aC0yLGE9ZStpW3JdLWlbcisxXTticmVhaztkZWZhdWx0OnI9dCxhPW59aWYodm9pZCAwPT09cylzd2l0Y2godGhpcy5nZXRTZXR0aW5nc18oKS5lbmRpbmdFbmQpe2Nhc2UgX090Om89dCxzPTIqbi1lO2JyZWFrO2Nhc2UgeU90Om89MSxzPW4raVsxXS1pWzBdO2JyZWFrO2RlZmF1bHQ6bz10LTEscz1lfWNvbnN0IGw9LjUqKG4tZSksYz10aGlzLnZhbHVlU2l6ZTt0aGlzLl93ZWlnaHRQcmV2PWwvKGUtYSksdGhpcy5fd2VpZ2h0TmV4dD1sLyhzLW4pLHRoaXMuX29mZnNldFByZXY9cipjLHRoaXMuX29mZnNldE5leHQ9bypjfSxpbnRlcnBvbGF0ZV86ZnVuY3Rpb24odCxlLG4saSl7Y29uc3Qgcj10aGlzLnJlc3VsdEJ1ZmZlcixvPXRoaXMuc2FtcGxlVmFsdWVzLGE9dGhpcy52YWx1ZVNpemUscz10KmEsbD1zLWEsYz10aGlzLl9vZmZzZXRQcmV2LHU9dGhpcy5fb2Zmc2V0TmV4dCxoPXRoaXMuX3dlaWdodFByZXYsZD10aGlzLl93ZWlnaHROZXh0LHA9KG4tZSkvKGktZSksZj1wKnAsbT1mKnAsZz0taCptKzIqaCpmLWgqcCxfPSgxK2gpKm0rKC0xLjUtMipoKSpmKygtLjUraCkqcCsxLHk9KC0xLWQpKm0rKDEuNStkKSpmKy41KnAsdj1kKm0tZCpmO2ZvcihsZXQgdD0wO3QhPT1hOysrdClyW3RdPWcqb1tjK3RdK18qb1tsK3RdK3kqb1tzK3RdK3Yqb1t1K3RdO3JldHVybiByfX0pLFpWdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKCRWdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpaVnQsaW50ZXJwb2xhdGVfOmZ1bmN0aW9uKHQsZSxuLGkpe2NvbnN0IHI9dGhpcy5yZXN1bHRCdWZmZXIsbz10aGlzLnNhbXBsZVZhbHVlcyxhPXRoaXMudmFsdWVTaXplLHM9dCphLGw9cy1hLGM9KG4tZSkvKGktZSksdT0xLWM7Zm9yKGxldCB0PTA7dCE9PWE7Kyt0KXJbdF09b1tsK3RdKnUrb1tzK3RdKmM7cmV0dXJuIHJ9fSksSlZ0LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoJFZ0LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOkpWdCxpbnRlcnBvbGF0ZV86ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY29weVNhbXBsZVZhbHVlXyh0LTEpfX0pLE9iamVjdC5hc3NpZ24oUVZ0LHt0b0pTT046ZnVuY3Rpb24odCl7Y29uc3QgZT10LmNvbnN0cnVjdG9yO2xldCBuO2lmKHZvaWQgMCE9PWUudG9KU09OKW49ZS50b0pTT04odCk7ZWxzZXtuPXtuYW1lOnQubmFtZSx0aW1lczpYVnQuY29udmVydEFycmF5KHQudGltZXMsQXJyYXkpLHZhbHVlczpYVnQuY29udmVydEFycmF5KHQudmFsdWVzLEFycmF5KX07Y29uc3QgZT10LmdldEludGVycG9sYXRpb24oKTtlIT09dC5EZWZhdWx0SW50ZXJwb2xhdGlvbiYmKG4uaW50ZXJwb2xhdGlvbj1lKX1yZXR1cm4gbi50eXBlPXQuVmFsdWVUeXBlTmFtZSxufX0pLE9iamVjdC5hc3NpZ24oUVZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6UVZ0LFRpbWVCdWZmZXJUeXBlOkZsb2F0MzJBcnJheSxWYWx1ZUJ1ZmZlclR5cGU6RmxvYXQzMkFycmF5LERlZmF1bHRJbnRlcnBvbGF0aW9uOmZPdCxJbnRlcnBvbGFudEZhY3RvcnlNZXRob2REaXNjcmV0ZTpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IEpWdCh0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksdCl9LEludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IFpWdCh0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksdCl9LEludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aDpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IEtWdCh0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksdCl9LHNldEludGVycG9sYXRpb246ZnVuY3Rpb24odCl7bGV0IGU7c3dpdGNoKHQpe2Nhc2UgcE90OmU9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2REaXNjcmV0ZTticmVhaztjYXNlIGZPdDplPXRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyO2JyZWFrO2Nhc2UgbU90OmU9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGh9aWYodm9pZCAwPT09ZSl7Y29uc3QgZT0idW5zdXBwb3J0ZWQgaW50ZXJwb2xhdGlvbiBmb3IgIit0aGlzLlZhbHVlVHlwZU5hbWUrIiBrZXlmcmFtZSB0cmFjayBuYW1lZCAiK3RoaXMubmFtZTtpZih2b2lkIDA9PT10aGlzLmNyZWF0ZUludGVycG9sYW50KXtpZih0PT09dGhpcy5EZWZhdWx0SW50ZXJwb2xhdGlvbil0aHJvdyBuZXcgRXJyb3IoZSk7dGhpcy5zZXRJbnRlcnBvbGF0aW9uKHRoaXMuRGVmYXVsdEludGVycG9sYXRpb24pfXJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLktleWZyYW1lVHJhY2s6IixlKSx0aGlzfXJldHVybiB0aGlzLmNyZWF0ZUludGVycG9sYW50PWUsdGhpc30sZ2V0SW50ZXJwb2xhdGlvbjpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmNyZWF0ZUludGVycG9sYW50KXtjYXNlIHRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kRGlzY3JldGU6cmV0dXJuIHBPdDtjYXNlIHRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyOnJldHVybiBmT3Q7Y2FzZSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aDpyZXR1cm4gbU90fX0sZ2V0VmFsdWVTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmFsdWVzLmxlbmd0aC90aGlzLnRpbWVzLmxlbmd0aH0sc2hpZnQ6ZnVuY3Rpb24odCl7aWYoMCE9PXQpe2NvbnN0IGU9dGhpcy50aW1lcztmb3IobGV0IG49MCxpPWUubGVuZ3RoO24hPT1pOysrbillW25dKz10fXJldHVybiB0aGlzfSxzY2FsZTpmdW5jdGlvbih0KXtpZigxIT09dCl7Y29uc3QgZT10aGlzLnRpbWVzO2ZvcihsZXQgbj0wLGk9ZS5sZW5ndGg7biE9PWk7KytuKWVbbl0qPXR9cmV0dXJuIHRoaXN9LHRyaW06ZnVuY3Rpb24odCxlKXtjb25zdCBuPXRoaXMudGltZXMsaT1uLmxlbmd0aDtsZXQgcj0wLG89aS0xO2Zvcig7ciE9PWkmJm5bcl08dDspKytyO2Zvcig7LTEhPT1vJiZuW29dPmU7KS0tbztpZigrK28sMCE9PXJ8fG8hPT1pKXtyPj1vJiYobz1NYXRoLm1heChvLDEpLHI9by0xKTtjb25zdCB0PXRoaXMuZ2V0VmFsdWVTaXplKCk7dGhpcy50aW1lcz1YVnQuYXJyYXlTbGljZShuLHIsbyksdGhpcy52YWx1ZXM9WFZ0LmFycmF5U2xpY2UodGhpcy52YWx1ZXMscip0LG8qdCl9cmV0dXJuIHRoaXN9LHZhbGlkYXRlOmZ1bmN0aW9uKCl7bGV0IHQ9ITA7Y29uc3QgZT10aGlzLmdldFZhbHVlU2l6ZSgpO2UtTWF0aC5mbG9vcihlKSE9MCYmKGNvbnNvbGUuZXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IEludmFsaWQgdmFsdWUgc2l6ZSBpbiB0cmFjay4iLHRoaXMpLHQ9ITEpO2NvbnN0IG49dGhpcy50aW1lcyxpPXRoaXMudmFsdWVzLHI9bi5sZW5ndGg7MD09PXImJihjb25zb2xlLmVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBUcmFjayBpcyBlbXB0eS4iLHRoaXMpLHQ9ITEpO2xldCBvPW51bGw7Zm9yKGxldCBlPTA7ZSE9PXI7ZSsrKXtjb25zdCBpPW5bZV07aWYoIm51bWJlciI9PXR5cGVvZiBpJiZpc05hTihpKSl7Y29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogVGltZSBpcyBub3QgYSB2YWxpZCBudW1iZXIuIix0aGlzLGUsaSksdD0hMTticmVha31pZihudWxsIT09byYmbz5pKXtjb25zb2xlLmVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBPdXQgb2Ygb3JkZXIga2V5cy4iLHRoaXMsZSxpLG8pLHQ9ITE7YnJlYWt9bz1pfWlmKHZvaWQgMCE9PWkmJlhWdC5pc1R5cGVkQXJyYXkoaSkpZm9yKGxldCBlPTAsbj1pLmxlbmd0aDtlIT09bjsrK2Upe2NvbnN0IG49aVtlXTtpZihpc05hTihuKSl7Y29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogVmFsdWUgaXMgbm90IGEgdmFsaWQgbnVtYmVyLiIsdGhpcyxlLG4pLHQ9ITE7YnJlYWt9fXJldHVybiB0fSxvcHRpbWl6ZTpmdW5jdGlvbigpe2NvbnN0IHQ9WFZ0LmFycmF5U2xpY2UodGhpcy50aW1lcyksZT1YVnQuYXJyYXlTbGljZSh0aGlzLnZhbHVlcyksbj10aGlzLmdldFZhbHVlU2l6ZSgpLGk9dGhpcy5nZXRJbnRlcnBvbGF0aW9uKCk9PT1tT3Qscj10Lmxlbmd0aC0xO2xldCBvPTE7Zm9yKGxldCBhPTE7YTxyOysrYSl7bGV0IHI9ITE7Y29uc3Qgcz10W2FdO2lmKHMhPT10W2ErMV0mJigxIT09YXx8cyE9PXRbMF0pKWlmKGkpcj0hMDtlbHNle2NvbnN0IHQ9YSpuLGk9dC1uLG89dCtuO2ZvcihsZXQgYT0wO2EhPT1uOysrYSl7Y29uc3Qgbj1lW3QrYV07aWYobiE9PWVbaSthXXx8biE9PWVbbythXSl7cj0hMDticmVha319fWlmKHIpe2lmKGEhPT1vKXt0W29dPXRbYV07Y29uc3QgaT1hKm4scj1vKm47Zm9yKGxldCB0PTA7dCE9PW47Kyt0KWVbcit0XT1lW2krdF19KytvfX1pZihyPjApe3Rbb109dFtyXTtmb3IobGV0IHQ9cipuLGk9bypuLGE9MDthIT09bjsrK2EpZVtpK2FdPWVbdCthXTsrK299cmV0dXJuIG8hPT10Lmxlbmd0aD8odGhpcy50aW1lcz1YVnQuYXJyYXlTbGljZSh0LDAsbyksdGhpcy52YWx1ZXM9WFZ0LmFycmF5U2xpY2UoZSwwLG8qbikpOih0aGlzLnRpbWVzPXQsdGhpcy52YWx1ZXM9ZSksdGhpc30sY2xvbmU6ZnVuY3Rpb24oKXtjb25zdCB0PVhWdC5hcnJheVNsaWNlKHRoaXMudGltZXMsMCksZT1YVnQuYXJyYXlTbGljZSh0aGlzLnZhbHVlcywwKSxuPW5ldygwLHRoaXMuY29uc3RydWN0b3IpKHRoaXMubmFtZSx0LGUpO3JldHVybiBuLmNyZWF0ZUludGVycG9sYW50PXRoaXMuY3JlYXRlSW50ZXJwb2xhbnQsbn19KSx0VXQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShRVnQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6dFV0LFZhbHVlVHlwZU5hbWU6ImJvb2wiLFZhbHVlQnVmZmVyVHlwZTpBcnJheSxEZWZhdWx0SW50ZXJwb2xhdGlvbjpwT3QsSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyOnZvaWQgMCxJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGg6dm9pZCAwfSksZVV0LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoUVZ0LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOmVVdCxWYWx1ZVR5cGVOYW1lOiJjb2xvciJ9KSxuVXQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShRVnQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6blV0LFZhbHVlVHlwZU5hbWU6Im51bWJlciJ9KSxpVXQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZSgkVnQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6aVV0LGludGVycG9sYXRlXzpmdW5jdGlvbih0LGUsbixpKXtjb25zdCByPXRoaXMucmVzdWx0QnVmZmVyLG89dGhpcy5zYW1wbGVWYWx1ZXMsYT10aGlzLnZhbHVlU2l6ZSxzPShuLWUpLyhpLWUpO2xldCBsPXQqYTtmb3IobGV0IHQ9bCthO2whPT10O2wrPTQpV090LnNsZXJwRmxhdChyLDAsbyxsLWEsbyxsLHMpO3JldHVybiByfX0pLHJVdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKFFWdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpyVXQsVmFsdWVUeXBlTmFtZToicXVhdGVybmlvbiIsRGVmYXVsdEludGVycG9sYXRpb246Zk90LEludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGlVdCh0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksdCl9LEludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aDp2b2lkIDB9KSxvVXQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShRVnQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6b1V0LFZhbHVlVHlwZU5hbWU6InN0cmluZyIsVmFsdWVCdWZmZXJUeXBlOkFycmF5LERlZmF1bHRJbnRlcnBvbGF0aW9uOnBPdCxJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI6dm9pZCAwLEludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aDp2b2lkIDB9KSxhVXQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShRVnQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6YVV0LFZhbHVlVHlwZU5hbWU6InZlY3RvciJ9KSxPYmplY3QuYXNzaWduKHNVdCx7cGFyc2U6ZnVuY3Rpb24odCl7Y29uc3QgZT1bXSxuPXQudHJhY2tzLGk9MS8odC5mcHN8fDEpO2ZvcihsZXQgdD0wLHI9bi5sZW5ndGg7dCE9PXI7Kyt0KWUucHVzaChsVXQoblt0XSkuc2NhbGUoaSkpO2NvbnN0IHI9bmV3IHNVdCh0Lm5hbWUsdC5kdXJhdGlvbixlLHQuYmxlbmRNb2RlKTtyZXR1cm4gci51dWlkPXQudXVpZCxyfSx0b0pTT046ZnVuY3Rpb24odCl7Y29uc3QgZT1bXSxuPXQudHJhY2tzLGk9e25hbWU6dC5uYW1lLGR1cmF0aW9uOnQuZHVyYXRpb24sdHJhY2tzOmUsdXVpZDp0LnV1aWQsYmxlbmRNb2RlOnQuYmxlbmRNb2RlfTtmb3IobGV0IHQ9MCxpPW4ubGVuZ3RoO3QhPT1pOysrdCllLnB1c2goUVZ0LnRvSlNPTihuW3RdKSk7cmV0dXJuIGl9LENyZWF0ZUZyb21Nb3JwaFRhcmdldFNlcXVlbmNlOmZ1bmN0aW9uKHQsZSxuLGkpe2NvbnN0IHI9ZS5sZW5ndGgsbz1bXTtmb3IobGV0IHQ9MDt0PHI7dCsrKXtsZXQgYT1bXSxzPVtdO2EucHVzaCgodCtyLTEpJXIsdCwodCsxKSVyKSxzLnB1c2goMCwxLDApO2NvbnN0IGw9WFZ0LmdldEtleWZyYW1lT3JkZXIoYSk7YT1YVnQuc29ydGVkQXJyYXkoYSwxLGwpLHM9WFZ0LnNvcnRlZEFycmF5KHMsMSxsKSxpfHwwIT09YVswXXx8KGEucHVzaChyKSxzLnB1c2goc1swXSkpLG8ucHVzaChuZXcgblV0KCIubW9ycGhUYXJnZXRJbmZsdWVuY2VzWyIrZVt0XS5uYW1lKyJdIixhLHMpLnNjYWxlKDEvbikpfXJldHVybiBuZXcgc1V0KHQsLTEsbyl9LGZpbmRCeU5hbWU6ZnVuY3Rpb24odCxlKXtsZXQgbj10O2lmKCFBcnJheS5pc0FycmF5KHQpKXtjb25zdCBlPXQ7bj1lLmdlb21ldHJ5JiZlLmdlb21ldHJ5LmFuaW1hdGlvbnN8fGUuYW5pbWF0aW9uc31mb3IobGV0IHQ9MDt0PG4ubGVuZ3RoO3QrKylpZihuW3RdLm5hbWU9PT1lKXJldHVybiBuW3RdO3JldHVybiBudWxsfSxDcmVhdGVDbGlwc0Zyb21Nb3JwaFRhcmdldFNlcXVlbmNlczpmdW5jdGlvbih0LGUsbil7Y29uc3QgaT17fSxyPS9eKFtcdy1dKj8pKFtcZF0rKSQvO2ZvcihsZXQgZT0wLG49dC5sZW5ndGg7ZTxuO2UrKyl7Y29uc3Qgbj10W2VdLG89bi5uYW1lLm1hdGNoKHIpO2lmKG8mJm8ubGVuZ3RoPjEpe2NvbnN0IHQ9b1sxXTtsZXQgZT1pW3RdO2V8fChpW3RdPWU9W10pLGUucHVzaChuKX19Y29uc3Qgbz1bXTtmb3IoY29uc3QgdCBpbiBpKW8ucHVzaChzVXQuQ3JlYXRlRnJvbU1vcnBoVGFyZ2V0U2VxdWVuY2UodCxpW3RdLGUsbikpO3JldHVybiBvfSxwYXJzZUFuaW1hdGlvbjpmdW5jdGlvbih0LGUpe2lmKCF0KXJldHVybiBjb25zb2xlLmVycm9yKCJUSFJFRS5BbmltYXRpb25DbGlwOiBObyBhbmltYXRpb24gaW4gSlNPTkxvYWRlciBkYXRhLiIpLG51bGw7Y29uc3Qgbj1mdW5jdGlvbih0LGUsbixpLHIpe2lmKDAhPT1uLmxlbmd0aCl7Y29uc3Qgbz1bXSxhPVtdO1hWdC5mbGF0dGVuSlNPTihuLG8sYSxpKSwwIT09by5sZW5ndGgmJnIucHVzaChuZXcgdChlLG8sYSkpfX0saT1bXSxyPXQubmFtZXx8ImRlZmF1bHQiLG89dC5mcHN8fDMwLGE9dC5ibGVuZE1vZGU7bGV0IHM9dC5sZW5ndGh8fC0xO2NvbnN0IGw9dC5oaWVyYXJjaHl8fFtdO2ZvcihsZXQgdD0wO3Q8bC5sZW5ndGg7dCsrKXtjb25zdCByPWxbdF0ua2V5cztpZihyJiYwIT09ci5sZW5ndGgpaWYoclswXS5tb3JwaFRhcmdldHMpe2NvbnN0IHQ9e307bGV0IGU7Zm9yKGU9MDtlPHIubGVuZ3RoO2UrKylpZihyW2VdLm1vcnBoVGFyZ2V0cylmb3IobGV0IG49MDtuPHJbZV0ubW9ycGhUYXJnZXRzLmxlbmd0aDtuKyspdFtyW2VdLm1vcnBoVGFyZ2V0c1tuXV09LTE7Zm9yKGNvbnN0IG4gaW4gdCl7Y29uc3QgdD1bXSxvPVtdO2ZvcihsZXQgaT0wO2khPT1yW2VdLm1vcnBoVGFyZ2V0cy5sZW5ndGg7KytpKXtjb25zdCBpPXJbZV07dC5wdXNoKGkudGltZSksby5wdXNoKGkubW9ycGhUYXJnZXQ9PT1uPzE6MCl9aS5wdXNoKG5ldyBuVXQoIi5tb3JwaFRhcmdldEluZmx1ZW5jZVsiK24rIl0iLHQsbykpfXM9dC5sZW5ndGgqKG98fDEpfWVsc2V7Y29uc3Qgbz0iLmJvbmVzWyIrZVt0XS5uYW1lKyJdIjtuKGFVdCxvKyIucG9zaXRpb24iLHIsInBvcyIsaSksbihyVXQsbysiLnF1YXRlcm5pb24iLHIsInJvdCIsaSksbihhVXQsbysiLnNjYWxlIixyLCJzY2wiLGkpfX1yZXR1cm4gMD09PWkubGVuZ3RoP251bGw6bmV3IHNVdChyLHMsaSxhKX19KSxPYmplY3QuYXNzaWduKHNVdC5wcm90b3R5cGUse3Jlc2V0RHVyYXRpb246ZnVuY3Rpb24oKXtsZXQgdD0wO2ZvcihsZXQgZT0wLG49dGhpcy50cmFja3MubGVuZ3RoO2UhPT1uOysrZSl7Y29uc3Qgbj10aGlzLnRyYWNrc1tlXTt0PU1hdGgubWF4KHQsbi50aW1lc1tuLnRpbWVzLmxlbmd0aC0xXSl9cmV0dXJuIHRoaXMuZHVyYXRpb249dCx0aGlzfSx0cmltOmZ1bmN0aW9uKCl7Zm9yKGxldCB0PTA7dDx0aGlzLnRyYWNrcy5sZW5ndGg7dCsrKXRoaXMudHJhY2tzW3RdLnRyaW0oMCx0aGlzLmR1cmF0aW9uKTtyZXR1cm4gdGhpc30sdmFsaWRhdGU6ZnVuY3Rpb24oKXtsZXQgdD0hMDtmb3IobGV0IGU9MDtlPHRoaXMudHJhY2tzLmxlbmd0aDtlKyspdD10JiZ0aGlzLnRyYWNrc1tlXS52YWxpZGF0ZSgpO3JldHVybiB0fSxvcHRpbWl6ZTpmdW5jdGlvbigpe2ZvcihsZXQgdD0wO3Q8dGhpcy50cmFja3MubGVuZ3RoO3QrKyl0aGlzLnRyYWNrc1t0XS5vcHRpbWl6ZSgpO3JldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbigpe2NvbnN0IHQ9W107Zm9yKGxldCBlPTA7ZTx0aGlzLnRyYWNrcy5sZW5ndGg7ZSsrKXQucHVzaCh0aGlzLnRyYWNrc1tlXS5jbG9uZSgpKTtyZXR1cm4gbmV3IHNVdCh0aGlzLm5hbWUsdGhpcy5kdXJhdGlvbix0LHRoaXMuYmxlbmRNb2RlKX0sdG9KU09OOmZ1bmN0aW9uKCl7cmV0dXJuIHNVdC50b0pTT04odGhpcyl9fSk7Y29uc3QgY1V0PXtlbmFibGVkOiExLGZpbGVzOnt9LGFkZDpmdW5jdGlvbih0LGUpeyExIT09dGhpcy5lbmFibGVkJiYodGhpcy5maWxlc1t0XT1lKX0sZ2V0OmZ1bmN0aW9uKHQpe2lmKCExIT09dGhpcy5lbmFibGVkKXJldHVybiB0aGlzLmZpbGVzW3RdfSxyZW1vdmU6ZnVuY3Rpb24odCl7ZGVsZXRlIHRoaXMuZmlsZXNbdF19LGNsZWFyOmZ1bmN0aW9uKCl7dGhpcy5maWxlcz17fX19O2Z1bmN0aW9uIHVVdCh0LGUsbil7Y29uc3QgaT10aGlzO2xldCByLG89ITEsYT0wLHM9MDtjb25zdCBsPVtdO3RoaXMub25TdGFydD12b2lkIDAsdGhpcy5vbkxvYWQ9dCx0aGlzLm9uUHJvZ3Jlc3M9ZSx0aGlzLm9uRXJyb3I9bix0aGlzLml0ZW1TdGFydD1mdW5jdGlvbih0KXtzKyssITE9PT1vJiZ2b2lkIDAhPT1pLm9uU3RhcnQmJmkub25TdGFydCh0LGEscyksbz0hMH0sdGhpcy5pdGVtRW5kPWZ1bmN0aW9uKHQpe2ErKyx2b2lkIDAhPT1pLm9uUHJvZ3Jlc3MmJmkub25Qcm9ncmVzcyh0LGEscyksYT09PXMmJihvPSExLHZvaWQgMCE9PWkub25Mb2FkJiZpLm9uTG9hZCgpKX0sdGhpcy5pdGVtRXJyb3I9ZnVuY3Rpb24odCl7dm9pZCAwIT09aS5vbkVycm9yJiZpLm9uRXJyb3IodCl9LHRoaXMucmVzb2x2ZVVSTD1mdW5jdGlvbih0KXtyZXR1cm4gcj9yKHQpOnR9LHRoaXMuc2V0VVJMTW9kaWZpZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHI9dCx0aGlzfSx0aGlzLmFkZEhhbmRsZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbC5wdXNoKHQsZSksdGhpc30sdGhpcy5yZW1vdmVIYW5kbGVyPWZ1bmN0aW9uKHQpe2NvbnN0IGU9bC5pbmRleE9mKHQpO3JldHVybi0xIT09ZSYmbC5zcGxpY2UoZSwyKSx0aGlzfSx0aGlzLmdldEhhbmRsZXI9ZnVuY3Rpb24odCl7Zm9yKGxldCBlPTAsbj1sLmxlbmd0aDtlPG47ZSs9Mil7Y29uc3Qgbj1sW2VdLGk9bFtlKzFdO2lmKG4uZ2xvYmFsJiYobi5sYXN0SW5kZXg9MCksbi50ZXN0KHQpKXJldHVybiBpfXJldHVybiBudWxsfX1jb25zdCBoVXQ9bmV3IHVVdDtmdW5jdGlvbiBkVXQodCl7dGhpcy5tYW5hZ2VyPXZvaWQgMCE9PXQ/dDpoVXQsdGhpcy5jcm9zc09yaWdpbj0iYW5vbnltb3VzIix0aGlzLndpdGhDcmVkZW50aWFscz0hMSx0aGlzLnBhdGg9IiIsdGhpcy5yZXNvdXJjZVBhdGg9IiIsdGhpcy5yZXF1ZXN0SGVhZGVyPXt9fU9iamVjdC5hc3NpZ24oZFV0LnByb3RvdHlwZSx7bG9hZDpmdW5jdGlvbigpe30sbG9hZEFzeW5jOmZ1bmN0aW9uKHQsZSl7Y29uc3Qgbj10aGlzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24oaSxyKXtuLmxvYWQodCxpLGUscil9KSl9LHBhcnNlOmZ1bmN0aW9uKCl7fSxzZXRDcm9zc09yaWdpbjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jcm9zc09yaWdpbj10LHRoaXN9LHNldFdpdGhDcmVkZW50aWFsczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy53aXRoQ3JlZGVudGlhbHM9dCx0aGlzfSxzZXRQYXRoOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnBhdGg9dCx0aGlzfSxzZXRSZXNvdXJjZVBhdGg6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucmVzb3VyY2VQYXRoPXQsdGhpc30sc2V0UmVxdWVzdEhlYWRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5yZXF1ZXN0SGVhZGVyPXQsdGhpc319KTtjb25zdCBwVXQ9e307ZnVuY3Rpb24gZlV0KHQpe2RVdC5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gbVV0KHQpe2RVdC5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gZ1V0KHQpe2RVdC5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gX1V0KHQpe2RVdC5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24geVV0KHQpe2RVdC5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gdlV0KHQpe2RVdC5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gYlV0KHQpe2RVdC5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24geFV0KCl7dGhpcy50eXBlPSJDdXJ2ZSIsdGhpcy5hcmNMZW5ndGhEaXZpc2lvbnM9MjAwfWZ1bmN0aW9uIHdVdCh0LGUsbixpLHIsbyxhLHMpe3hVdC5jYWxsKHRoaXMpLHRoaXMudHlwZT0iRWxsaXBzZUN1cnZlIix0aGlzLmFYPXR8fDAsdGhpcy5hWT1lfHwwLHRoaXMueFJhZGl1cz1ufHwxLHRoaXMueVJhZGl1cz1pfHwxLHRoaXMuYVN0YXJ0QW5nbGU9cnx8MCx0aGlzLmFFbmRBbmdsZT1vfHwyKk1hdGguUEksdGhpcy5hQ2xvY2t3aXNlPWF8fCExLHRoaXMuYVJvdGF0aW9uPXN8fDB9ZnVuY3Rpb24gU1V0KHQsZSxuLGkscixvKXt3VXQuY2FsbCh0aGlzLHQsZSxuLG4saSxyLG8pLHRoaXMudHlwZT0iQXJjQ3VydmUifWZ1bmN0aW9uIE1VdCgpe2xldCB0PTAsZT0wLG49MCxpPTA7ZnVuY3Rpb24gcihyLG8sYSxzKXt0PXIsZT1hLG49LTMqciszKm8tMiphLXMsaT0yKnItMipvK2Erc31yZXR1cm57aW5pdENhdG11bGxSb206ZnVuY3Rpb24odCxlLG4saSxvKXtyKGUsbixvKihuLXQpLG8qKGktZSkpfSxpbml0Tm9udW5pZm9ybUNhdG11bGxSb206ZnVuY3Rpb24odCxlLG4saSxvLGEscyl7bGV0IGw9KGUtdCkvby0obi10KS8obythKSsobi1lKS9hLGM9KG4tZSkvYS0oaS1lKS8oYStzKSsoaS1uKS9zO2wqPWEsYyo9YSxyKGUsbixsLGMpfSxjYWxjOmZ1bmN0aW9uKHIpe2NvbnN0IG89cipyO3JldHVybiB0K2UqcituKm8raSoobypyKX19fWZVdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKGRVdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpmVXQsbG9hZDpmdW5jdGlvbih0LGUsbixpKXt2b2lkIDA9PT10JiYodD0iIiksdm9pZCAwIT09dGhpcy5wYXRoJiYodD10aGlzLnBhdGgrdCksdD10aGlzLm1hbmFnZXIucmVzb2x2ZVVSTCh0KTtjb25zdCByPXRoaXMsbz1jVXQuZ2V0KHQpO2lmKHZvaWQgMCE9PW8pcmV0dXJuIHIubWFuYWdlci5pdGVtU3RhcnQodCksc2V0VGltZW91dCgoZnVuY3Rpb24oKXtlJiZlKG8pLHIubWFuYWdlci5pdGVtRW5kKHQpfSksMCksbztpZih2b2lkIDAhPT1wVXRbdF0pcmV0dXJuIHZvaWQgcFV0W3RdLnB1c2goe29uTG9hZDplLG9uUHJvZ3Jlc3M6bixvbkVycm9yOml9KTtjb25zdCBhPXQubWF0Y2goL15kYXRhOiguKj8pKDtiYXNlNjQpPywoLiopJC8pO2xldCBzO2lmKGEpe2NvbnN0IG49YVsxXSxvPSEhYVsyXTtsZXQgcz1hWzNdO3M9ZGVjb2RlVVJJQ29tcG9uZW50KHMpLG8mJihzPWF0b2IocykpO3RyeXtsZXQgaTtjb25zdCBvPSh0aGlzLnJlc3BvbnNlVHlwZXx8IiIpLnRvTG93ZXJDYXNlKCk7c3dpdGNoKG8pe2Nhc2UiYXJyYXlidWZmZXIiOmNhc2UiYmxvYiI6Y29uc3QgdD1uZXcgVWludDhBcnJheShzLmxlbmd0aCk7Zm9yKGxldCBlPTA7ZTxzLmxlbmd0aDtlKyspdFtlXT1zLmNoYXJDb2RlQXQoZSk7aT0iYmxvYiI9PT1vP25ldyBCbG9iKFt0LmJ1ZmZlcl0se3R5cGU6bn0pOnQuYnVmZmVyO2JyZWFrO2Nhc2UiZG9jdW1lbnQiOmNvbnN0IGU9bmV3IERPTVBhcnNlcjtpPWUucGFyc2VGcm9tU3RyaW5nKHMsbik7YnJlYWs7Y2FzZSJqc29uIjppPUpTT04ucGFyc2Uocyk7YnJlYWs7ZGVmYXVsdDppPXN9c2V0VGltZW91dCgoZnVuY3Rpb24oKXtlJiZlKGkpLHIubWFuYWdlci5pdGVtRW5kKHQpfSksMCl9Y2F0Y2goZSl7c2V0VGltZW91dCgoZnVuY3Rpb24oKXtpJiZpKGUpLHIubWFuYWdlci5pdGVtRXJyb3IodCksci5tYW5hZ2VyLml0ZW1FbmQodCl9KSwwKX19ZWxzZXtwVXRbdF09W10scFV0W3RdLnB1c2goe29uTG9hZDplLG9uUHJvZ3Jlc3M6bixvbkVycm9yOml9KSxzPW5ldyBYTUxIdHRwUmVxdWVzdCxzLm9wZW4oIkdFVCIsdCwhMCkscy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwoZnVuY3Rpb24oZSl7Y29uc3Qgbj10aGlzLnJlc3BvbnNlLGk9cFV0W3RdO2lmKGRlbGV0ZSBwVXRbdF0sMjAwPT09dGhpcy5zdGF0dXN8fDA9PT10aGlzLnN0YXR1cyl7MD09PXRoaXMuc3RhdHVzJiZjb25zb2xlLndhcm4oIlRIUkVFLkZpbGVMb2FkZXI6IEhUVFAgU3RhdHVzIDAgcmVjZWl2ZWQuIiksY1V0LmFkZCh0LG4pO2ZvcihsZXQgdD0wLGU9aS5sZW5ndGg7dDxlO3QrKyl7Y29uc3QgZT1pW3RdO2Uub25Mb2FkJiZlLm9uTG9hZChuKX1yLm1hbmFnZXIuaXRlbUVuZCh0KX1lbHNle2ZvcihsZXQgdD0wLG49aS5sZW5ndGg7dDxuO3QrKyl7Y29uc3Qgbj1pW3RdO24ub25FcnJvciYmbi5vbkVycm9yKGUpfXIubWFuYWdlci5pdGVtRXJyb3IodCksci5tYW5hZ2VyLml0ZW1FbmQodCl9fSksITEpLHMuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLChmdW5jdGlvbihlKXtjb25zdCBuPXBVdFt0XTtmb3IobGV0IHQ9MCxpPW4ubGVuZ3RoO3Q8aTt0Kyspe2NvbnN0IGk9blt0XTtpLm9uUHJvZ3Jlc3MmJmkub25Qcm9ncmVzcyhlKX19KSwhMSkscy5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsKGZ1bmN0aW9uKGUpe2NvbnN0IG49cFV0W3RdO2RlbGV0ZSBwVXRbdF07Zm9yKGxldCB0PTAsaT1uLmxlbmd0aDt0PGk7dCsrKXtjb25zdCBpPW5bdF07aS5vbkVycm9yJiZpLm9uRXJyb3IoZSl9ci5tYW5hZ2VyLml0ZW1FcnJvcih0KSxyLm1hbmFnZXIuaXRlbUVuZCh0KX0pLCExKSxzLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IiwoZnVuY3Rpb24oZSl7Y29uc3Qgbj1wVXRbdF07ZGVsZXRlIHBVdFt0XTtmb3IobGV0IHQ9MCxpPW4ubGVuZ3RoO3Q8aTt0Kyspe2NvbnN0IGk9blt0XTtpLm9uRXJyb3ImJmkub25FcnJvcihlKX1yLm1hbmFnZXIuaXRlbUVycm9yKHQpLHIubWFuYWdlci5pdGVtRW5kKHQpfSksITEpLHZvaWQgMCE9PXRoaXMucmVzcG9uc2VUeXBlJiYocy5yZXNwb25zZVR5cGU9dGhpcy5yZXNwb25zZVR5cGUpLHZvaWQgMCE9PXRoaXMud2l0aENyZWRlbnRpYWxzJiYocy53aXRoQ3JlZGVudGlhbHM9dGhpcy53aXRoQ3JlZGVudGlhbHMpLHMub3ZlcnJpZGVNaW1lVHlwZSYmcy5vdmVycmlkZU1pbWVUeXBlKHZvaWQgMCE9PXRoaXMubWltZVR5cGU/dGhpcy5taW1lVHlwZToidGV4dC9wbGFpbiIpO2Zvcihjb25zdCB0IGluIHRoaXMucmVxdWVzdEhlYWRlcilzLnNldFJlcXVlc3RIZWFkZXIodCx0aGlzLnJlcXVlc3RIZWFkZXJbdF0pO3Muc2VuZChudWxsKX1yZXR1cm4gci5tYW5hZ2VyLml0ZW1TdGFydCh0KSxzfSxzZXRSZXNwb25zZVR5cGU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucmVzcG9uc2VUeXBlPXQsdGhpc30sc2V0TWltZVR5cGU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubWltZVR5cGU9dCx0aGlzfX0pLG1VdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKGRVdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjptVXQsbG9hZDpmdW5jdGlvbih0LGUsbixpKXtjb25zdCByPXRoaXMsbz1uZXcgZlV0KHIubWFuYWdlcik7by5zZXRQYXRoKHIucGF0aCksby5zZXRSZXF1ZXN0SGVhZGVyKHIucmVxdWVzdEhlYWRlciksby5zZXRXaXRoQ3JlZGVudGlhbHMoci53aXRoQ3JlZGVudGlhbHMpLG8ubG9hZCh0LChmdW5jdGlvbihuKXt0cnl7ZShyLnBhcnNlKEpTT04ucGFyc2UobikpKX1jYXRjaChlKXtpP2koZSk6Y29uc29sZS5lcnJvcihlKSxyLm1hbmFnZXIuaXRlbUVycm9yKHQpfX0pLG4saSl9LHBhcnNlOmZ1bmN0aW9uKHQpe2NvbnN0IGU9W107Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspe2NvbnN0IGk9c1V0LnBhcnNlKHRbbl0pO2UucHVzaChpKX1yZXR1cm4gZX19KSxnVXQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShkVXQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6Z1V0LGxvYWQ6ZnVuY3Rpb24odCxlLG4saSl7Y29uc3Qgcj10aGlzLG89W10sYT1uZXcgUkZ0LHM9bmV3IGZVdCh0aGlzLm1hbmFnZXIpO3Muc2V0UGF0aCh0aGlzLnBhdGgpLHMuc2V0UmVzcG9uc2VUeXBlKCJhcnJheWJ1ZmZlciIpLHMuc2V0UmVxdWVzdEhlYWRlcih0aGlzLnJlcXVlc3RIZWFkZXIpLHMuc2V0V2l0aENyZWRlbnRpYWxzKHIud2l0aENyZWRlbnRpYWxzKTtsZXQgbD0wO2Z1bmN0aW9uIGMoYyl7cy5sb2FkKHRbY10sKGZ1bmN0aW9uKHQpe2NvbnN0IG49ci5wYXJzZSh0LCEwKTtvW2NdPXt3aWR0aDpuLndpZHRoLGhlaWdodDpuLmhlaWdodCxmb3JtYXQ6bi5mb3JtYXQsbWlwbWFwczpuLm1pcG1hcHN9LGwrPTEsNj09PWwmJigxPT09bi5taXBtYXBDb3VudCYmKGEubWluRmlsdGVyPUdJdCksYS5pbWFnZT1vLGEuZm9ybWF0PW4uZm9ybWF0LGEubmVlZHNVcGRhdGU9ITAsZSYmZShhKSl9KSxuLGkpfWlmKEFycmF5LmlzQXJyYXkodCkpZm9yKGxldCBlPTAsbj10Lmxlbmd0aDtlPG47KytlKWMoZSk7ZWxzZSBzLmxvYWQodCwoZnVuY3Rpb24odCl7Y29uc3Qgbj1yLnBhcnNlKHQsITApO2lmKG4uaXNDdWJlbWFwKXtjb25zdCB0PW4ubWlwbWFwcy5sZW5ndGgvbi5taXBtYXBDb3VudDtmb3IobGV0IGU9MDtlPHQ7ZSsrKXtvW2VdPXttaXBtYXBzOltdfTtmb3IobGV0IHQ9MDt0PG4ubWlwbWFwQ291bnQ7dCsrKW9bZV0ubWlwbWFwcy5wdXNoKG4ubWlwbWFwc1tlKm4ubWlwbWFwQ291bnQrdF0pLG9bZV0uZm9ybWF0PW4uZm9ybWF0LG9bZV0ud2lkdGg9bi53aWR0aCxvW2VdLmhlaWdodD1uLmhlaWdodH1hLmltYWdlPW99ZWxzZSBhLmltYWdlLndpZHRoPW4ud2lkdGgsYS5pbWFnZS5oZWlnaHQ9bi5oZWlnaHQsYS5taXBtYXBzPW4ubWlwbWFwczsxPT09bi5taXBtYXBDb3VudCYmKGEubWluRmlsdGVyPUdJdCksYS5mb3JtYXQ9bi5mb3JtYXQsYS5uZWVkc1VwZGF0ZT0hMCxlJiZlKGEpfSksbixpKTtyZXR1cm4gYX19KSxfVXQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShkVXQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6X1V0LGxvYWQ6ZnVuY3Rpb24odCxlLG4saSl7dm9pZCAwIT09dGhpcy5wYXRoJiYodD10aGlzLnBhdGgrdCksdD10aGlzLm1hbmFnZXIucmVzb2x2ZVVSTCh0KTtjb25zdCByPXRoaXMsbz1jVXQuZ2V0KHQpO2lmKHZvaWQgMCE9PW8pcmV0dXJuIHIubWFuYWdlci5pdGVtU3RhcnQodCksc2V0VGltZW91dCgoZnVuY3Rpb24oKXtlJiZlKG8pLHIubWFuYWdlci5pdGVtRW5kKHQpfSksMCksbztjb25zdCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsImltZyIpO2Z1bmN0aW9uIHMoKXthLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLHMsITEpLGEucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGwsITEpLGNVdC5hZGQodCx0aGlzKSxlJiZlKHRoaXMpLHIubWFuYWdlci5pdGVtRW5kKHQpfWZ1bmN0aW9uIGwoZSl7YS5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixzLCExKSxhLnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIixsLCExKSxpJiZpKGUpLHIubWFuYWdlci5pdGVtRXJyb3IodCksci5tYW5hZ2VyLml0ZW1FbmQodCl9cmV0dXJuIGEuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIscywhMSksYS5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsbCwhMSksImRhdGE6IiE9PXQuc3Vic3RyKDAsNSkmJnZvaWQgMCE9PXRoaXMuY3Jvc3NPcmlnaW4mJihhLmNyb3NzT3JpZ2luPXRoaXMuY3Jvc3NPcmlnaW4pLHIubWFuYWdlci5pdGVtU3RhcnQodCksYS5zcmM9dCxhfX0pLHlVdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKGRVdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3Rvcjp5VXQsbG9hZDpmdW5jdGlvbih0LGUsbixpKXtjb25zdCByPW5ldyBnRHQsbz1uZXcgX1V0KHRoaXMubWFuYWdlcik7by5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKSxvLnNldFBhdGgodGhpcy5wYXRoKTtsZXQgYT0wO2Z1bmN0aW9uIHMobil7by5sb2FkKHRbbl0sKGZ1bmN0aW9uKHQpe3IuaW1hZ2VzW25dPXQsYSsrLDY9PT1hJiYoci5uZWVkc1VwZGF0ZT0hMCxlJiZlKHIpKX0pLHZvaWQgMCxpKX1mb3IobGV0IGU9MDtlPHQubGVuZ3RoOysrZSlzKGUpO3JldHVybiByfX0pLHZVdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKGRVdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3Rvcjp2VXQsbG9hZDpmdW5jdGlvbih0LGUsbixpKXtjb25zdCByPXRoaXMsbz1uZXcgeUR0LGE9bmV3IGZVdCh0aGlzLm1hbmFnZXIpO3JldHVybiBhLnNldFJlc3BvbnNlVHlwZSgiYXJyYXlidWZmZXIiKSxhLnNldFJlcXVlc3RIZWFkZXIodGhpcy5yZXF1ZXN0SGVhZGVyKSxhLnNldFBhdGgodGhpcy5wYXRoKSxhLnNldFdpdGhDcmVkZW50aWFscyhyLndpdGhDcmVkZW50aWFscyksYS5sb2FkKHQsKGZ1bmN0aW9uKHQpe2NvbnN0IG49ci5wYXJzZSh0KTtuJiYodm9pZCAwIT09bi5pbWFnZT9vLmltYWdlPW4uaW1hZ2U6dm9pZCAwIT09bi5kYXRhJiYoby5pbWFnZS53aWR0aD1uLndpZHRoLG8uaW1hZ2UuaGVpZ2h0PW4uaGVpZ2h0LG8uaW1hZ2UuZGF0YT1uLmRhdGEpLG8ud3JhcFM9dm9pZCAwIT09bi53cmFwUz9uLndyYXBTOkhJdCxvLndyYXBUPXZvaWQgMCE9PW4ud3JhcFQ/bi53cmFwVDpISXQsby5tYWdGaWx0ZXI9dm9pZCAwIT09bi5tYWdGaWx0ZXI/bi5tYWdGaWx0ZXI6R0l0LG8ubWluRmlsdGVyPXZvaWQgMCE9PW4ubWluRmlsdGVyP24ubWluRmlsdGVyOkdJdCxvLmFuaXNvdHJvcHk9dm9pZCAwIT09bi5hbmlzb3Ryb3B5P24uYW5pc290cm9weToxLHZvaWQgMCE9PW4uZW5jb2RpbmcmJihvLmVuY29kaW5nPW4uZW5jb2RpbmcpLHZvaWQgMCE9PW4uZmxpcFkmJihvLmZsaXBZPW4uZmxpcFkpLHZvaWQgMCE9PW4uZm9ybWF0JiYoby5mb3JtYXQ9bi5mb3JtYXQpLHZvaWQgMCE9PW4udHlwZSYmKG8udHlwZT1uLnR5cGUpLHZvaWQgMCE9PW4ubWlwbWFwcyYmKG8ubWlwbWFwcz1uLm1pcG1hcHMsby5taW5GaWx0ZXI9cUl0KSwxPT09bi5taXBtYXBDb3VudCYmKG8ubWluRmlsdGVyPUdJdCksby5uZWVkc1VwZGF0ZT0hMCxlJiZlKG8sbikpfSksbixpKSxvfX0pLGJVdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKGRVdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpiVXQsbG9hZDpmdW5jdGlvbih0LGUsbixpKXtjb25zdCByPW5ldyBWT3Qsbz1uZXcgX1V0KHRoaXMubWFuYWdlcik7cmV0dXJuIG8uc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbiksby5zZXRQYXRoKHRoaXMucGF0aCksby5sb2FkKHQsKGZ1bmN0aW9uKG4pe3IuaW1hZ2U9bjtjb25zdCBpPXQuc2VhcmNoKC9cLmpwZT9nKCR8XD8pL2kpPjB8fDA9PT10LnNlYXJjaCgvXmRhdGFcOmltYWdlXC9qcGVnLyk7ci5mb3JtYXQ9aT9RSXQ6dE90LHIubmVlZHNVcGRhdGU9ITAsdm9pZCAwIT09ZSYmZShyKX0pLG4saSkscn19KSxPYmplY3QuYXNzaWduKHhVdC5wcm90b3R5cGUse2dldFBvaW50OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQ3VydmU6IC5nZXRQb2ludCgpIG5vdCBpbXBsZW1lbnRlZC4iKSxudWxsfSxnZXRQb2ludEF0OmZ1bmN0aW9uKHQsZSl7Y29uc3Qgbj10aGlzLmdldFV0b1RtYXBwaW5nKHQpO3JldHVybiB0aGlzLmdldFBvaW50KG4sZSl9LGdldFBvaW50czpmdW5jdGlvbih0PTUpe2NvbnN0IGU9W107Zm9yKGxldCBuPTA7bjw9dDtuKyspZS5wdXNoKHRoaXMuZ2V0UG9pbnQobi90KSk7cmV0dXJuIGV9LGdldFNwYWNlZFBvaW50czpmdW5jdGlvbih0PTUpe2NvbnN0IGU9W107Zm9yKGxldCBuPTA7bjw9dDtuKyspZS5wdXNoKHRoaXMuZ2V0UG9pbnRBdChuL3QpKTtyZXR1cm4gZX0sZ2V0TGVuZ3RoOmZ1bmN0aW9uKCl7Y29uc3QgdD10aGlzLmdldExlbmd0aHMoKTtyZXR1cm4gdFt0Lmxlbmd0aC0xXX0sZ2V0TGVuZ3RoczpmdW5jdGlvbih0KXtpZih2b2lkIDA9PT10JiYodD10aGlzLmFyY0xlbmd0aERpdmlzaW9ucyksdGhpcy5jYWNoZUFyY0xlbmd0aHMmJnRoaXMuY2FjaGVBcmNMZW5ndGhzLmxlbmd0aD09PXQrMSYmIXRoaXMubmVlZHNVcGRhdGUpcmV0dXJuIHRoaXMuY2FjaGVBcmNMZW5ndGhzO3RoaXMubmVlZHNVcGRhdGU9ITE7Y29uc3QgZT1bXTtsZXQgbixpPXRoaXMuZ2V0UG9pbnQoMCkscj0wO2UucHVzaCgwKTtmb3IobGV0IG89MTtvPD10O28rKyluPXRoaXMuZ2V0UG9pbnQoby90KSxyKz1uLmRpc3RhbmNlVG8oaSksZS5wdXNoKHIpLGk9bjtyZXR1cm4gdGhpcy5jYWNoZUFyY0xlbmd0aHM9ZSxlfSx1cGRhdGVBcmNMZW5ndGhzOmZ1bmN0aW9uKCl7dGhpcy5uZWVkc1VwZGF0ZT0hMCx0aGlzLmdldExlbmd0aHMoKX0sZ2V0VXRvVG1hcHBpbmc6ZnVuY3Rpb24odCxlKXtjb25zdCBuPXRoaXMuZ2V0TGVuZ3RocygpO2xldCBpPTA7Y29uc3Qgcj1uLmxlbmd0aDtsZXQgbztvPWV8fHQqbltyLTFdO2xldCBhLHM9MCxsPXItMTtmb3IoO3M8PWw7KWlmKGk9TWF0aC5mbG9vcihzKyhsLXMpLzIpLGE9bltpXS1vLGE8MClzPWkrMTtlbHNle2lmKCEoYT4wKSl7bD1pO2JyZWFrfWw9aS0xfWlmKGk9bCxuW2ldPT09bylyZXR1cm4gaS8oci0xKTtjb25zdCBjPW5baV07cmV0dXJuKGkrKG8tYykvKG5baSsxXS1jKSkvKHItMSl9LGdldFRhbmdlbnQ6ZnVuY3Rpb24odCxlKXtjb25zdCBuPTFlLTQ7bGV0IGk9dC1uLHI9dCtuO2k8MCYmKGk9MCkscj4xJiYocj0xKTtjb25zdCBvPXRoaXMuZ2V0UG9pbnQoaSksYT10aGlzLmdldFBvaW50KHIpLHM9ZXx8KG8uaXNWZWN0b3IyP25ldyB6T3Q6bmV3IHFPdCk7cmV0dXJuIHMuY29weShhKS5zdWIobykubm9ybWFsaXplKCksc30sZ2V0VGFuZ2VudEF0OmZ1bmN0aW9uKHQsZSl7Y29uc3Qgbj10aGlzLmdldFV0b1RtYXBwaW5nKHQpO3JldHVybiB0aGlzLmdldFRhbmdlbnQobixlKX0sY29tcHV0ZUZyZW5ldEZyYW1lczpmdW5jdGlvbih0LGUpe2NvbnN0IG49bmV3IHFPdCxpPVtdLHI9W10sbz1bXSxhPW5ldyBxT3Qscz1uZXcgYlJ0O2ZvcihsZXQgZT0wO2U8PXQ7ZSsrKWlbZV09dGhpcy5nZXRUYW5nZW50QXQoZS90LG5ldyBxT3QpLGlbZV0ubm9ybWFsaXplKCk7clswXT1uZXcgcU90LG9bMF09bmV3IHFPdDtsZXQgbD1OdW1iZXIuTUFYX1ZBTFVFO2NvbnN0IGM9TWF0aC5hYnMoaVswXS54KSx1PU1hdGguYWJzKGlbMF0ueSksaD1NYXRoLmFicyhpWzBdLnopO2M8PWwmJihsPWMsbi5zZXQoMSwwLDApKSx1PD1sJiYobD11LG4uc2V0KDAsMSwwKSksaDw9bCYmbi5zZXQoMCwwLDEpLGEuY3Jvc3NWZWN0b3JzKGlbMF0sbikubm9ybWFsaXplKCksclswXS5jcm9zc1ZlY3RvcnMoaVswXSxhKSxvWzBdLmNyb3NzVmVjdG9ycyhpWzBdLHJbMF0pO2ZvcihsZXQgZT0xO2U8PXQ7ZSsrKXtpZihyW2VdPXJbZS0xXS5jbG9uZSgpLG9bZV09b1tlLTFdLmNsb25lKCksYS5jcm9zc1ZlY3RvcnMoaVtlLTFdLGlbZV0pLGEubGVuZ3RoKCk+TnVtYmVyLkVQU0lMT04pe2Eubm9ybWFsaXplKCk7Y29uc3QgdD1NYXRoLmFjb3MoUk90LmNsYW1wKGlbZS0xXS5kb3QoaVtlXSksLTEsMSkpO3JbZV0uYXBwbHlNYXRyaXg0KHMubWFrZVJvdGF0aW9uQXhpcyhhLHQpKX1vW2VdLmNyb3NzVmVjdG9ycyhpW2VdLHJbZV0pfWlmKCEwPT09ZSl7bGV0IGU9TWF0aC5hY29zKFJPdC5jbGFtcChyWzBdLmRvdChyW3RdKSwtMSwxKSk7ZS89dCxpWzBdLmRvdChhLmNyb3NzVmVjdG9ycyhyWzBdLHJbdF0pKT4wJiYoZT0tZSk7Zm9yKGxldCBuPTE7bjw9dDtuKyspcltuXS5hcHBseU1hdHJpeDQocy5tYWtlUm90YXRpb25BeGlzKGlbbl0sZSpuKSksb1tuXS5jcm9zc1ZlY3RvcnMoaVtuXSxyW25dKX1yZXR1cm57dGFuZ2VudHM6aSxub3JtYWxzOnIsYmlub3JtYWxzOm99fSxjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX0sY29weTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hcmNMZW5ndGhEaXZpc2lvbnM9dC5hcmNMZW5ndGhEaXZpc2lvbnMsdGhpc30sdG9KU09OOmZ1bmN0aW9uKCl7Y29uc3QgdD17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6IkN1cnZlIixnZW5lcmF0b3I6IkN1cnZlLnRvSlNPTiJ9fTtyZXR1cm4gdC5hcmNMZW5ndGhEaXZpc2lvbnM9dGhpcy5hcmNMZW5ndGhEaXZpc2lvbnMsdC50eXBlPXRoaXMudHlwZSx0fSxmcm9tSlNPTjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hcmNMZW5ndGhEaXZpc2lvbnM9dC5hcmNMZW5ndGhEaXZpc2lvbnMsdGhpc319KSwod1V0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHhVdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj13VXQsd1V0LnByb3RvdHlwZS5pc0VsbGlwc2VDdXJ2ZT0hMCx3VXQucHJvdG90eXBlLmdldFBvaW50PWZ1bmN0aW9uKHQsZSl7Y29uc3Qgbj1lfHxuZXcgek90LGk9MipNYXRoLlBJO2xldCByPXRoaXMuYUVuZEFuZ2xlLXRoaXMuYVN0YXJ0QW5nbGU7Y29uc3Qgbz1NYXRoLmFicyhyKTxOdW1iZXIuRVBTSUxPTjtmb3IoO3I8MDspcis9aTtmb3IoO3I+aTspci09aTtyPE51bWJlci5FUFNJTE9OJiYocj1vPzA6aSksITAhPT10aGlzLmFDbG9ja3dpc2V8fG98fChyPT09aT9yPS1pOnItPWkpO2NvbnN0IGE9dGhpcy5hU3RhcnRBbmdsZSt0KnI7bGV0IHM9dGhpcy5hWCt0aGlzLnhSYWRpdXMqTWF0aC5jb3MoYSksbD10aGlzLmFZK3RoaXMueVJhZGl1cypNYXRoLnNpbihhKTtpZigwIT09dGhpcy5hUm90YXRpb24pe2NvbnN0IHQ9TWF0aC5jb3ModGhpcy5hUm90YXRpb24pLGU9TWF0aC5zaW4odGhpcy5hUm90YXRpb24pLG49cy10aGlzLmFYLGk9bC10aGlzLmFZO3M9bip0LWkqZSt0aGlzLmFYLGw9biplK2kqdCt0aGlzLmFZfXJldHVybiBuLnNldChzLGwpfSx3VXQucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24odCl7cmV0dXJuIHhVdC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy5hWD10LmFYLHRoaXMuYVk9dC5hWSx0aGlzLnhSYWRpdXM9dC54UmFkaXVzLHRoaXMueVJhZGl1cz10LnlSYWRpdXMsdGhpcy5hU3RhcnRBbmdsZT10LmFTdGFydEFuZ2xlLHRoaXMuYUVuZEFuZ2xlPXQuYUVuZEFuZ2xlLHRoaXMuYUNsb2Nrd2lzZT10LmFDbG9ja3dpc2UsdGhpcy5hUm90YXRpb249dC5hUm90YXRpb24sdGhpc30sd1V0LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtjb25zdCB0PXhVdC5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyk7cmV0dXJuIHQuYVg9dGhpcy5hWCx0LmFZPXRoaXMuYVksdC54UmFkaXVzPXRoaXMueFJhZGl1cyx0LnlSYWRpdXM9dGhpcy55UmFkaXVzLHQuYVN0YXJ0QW5nbGU9dGhpcy5hU3RhcnRBbmdsZSx0LmFFbmRBbmdsZT10aGlzLmFFbmRBbmdsZSx0LmFDbG9ja3dpc2U9dGhpcy5hQ2xvY2t3aXNlLHQuYVJvdGF0aW9uPXRoaXMuYVJvdGF0aW9uLHR9LHdVdC5wcm90b3R5cGUuZnJvbUpTT049ZnVuY3Rpb24odCl7cmV0dXJuIHhVdC5wcm90b3R5cGUuZnJvbUpTT04uY2FsbCh0aGlzLHQpLHRoaXMuYVg9dC5hWCx0aGlzLmFZPXQuYVksdGhpcy54UmFkaXVzPXQueFJhZGl1cyx0aGlzLnlSYWRpdXM9dC55UmFkaXVzLHRoaXMuYVN0YXJ0QW5nbGU9dC5hU3RhcnRBbmdsZSx0aGlzLmFFbmRBbmdsZT10LmFFbmRBbmdsZSx0aGlzLmFDbG9ja3dpc2U9dC5hQ2xvY2t3aXNlLHRoaXMuYVJvdGF0aW9uPXQuYVJvdGF0aW9uLHRoaXN9LChTVXQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUod1V0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPVNVdCxTVXQucHJvdG90eXBlLmlzQXJjQ3VydmU9ITA7Y29uc3QgRVV0PW5ldyBxT3QsVFV0PW5ldyBNVXQsQ1V0PW5ldyBNVXQsQVV0PW5ldyBNVXQ7ZnVuY3Rpb24ga1V0KHQ9W10sZT0hMSxuPSJjZW50cmlwZXRhbCIsaT0uNSl7eFV0LmNhbGwodGhpcyksdGhpcy50eXBlPSJDYXRtdWxsUm9tQ3VydmUzIix0aGlzLnBvaW50cz10LHRoaXMuY2xvc2VkPWUsdGhpcy5jdXJ2ZVR5cGU9bix0aGlzLnRlbnNpb249aX1mdW5jdGlvbiBMVXQodCxlLG4saSxyKXtjb25zdCBvPS41KihpLWUpLGE9LjUqKHItbikscz10KnQ7cmV0dXJuKDIqbi0yKmkrbythKSoodCpzKSsoLTMqbiszKmktMipvLWEpKnMrbyp0K259ZnVuY3Rpb24gUFV0KHQsZSxuLGkpe3JldHVybihmdW5jdGlvbiByKHQsZSl7Y29uc3Qgbj0xLXQ7cmV0dXJuIG4qbiplfSkodCxlKSsoZnVuY3Rpb24gbyh0LGUpe3JldHVybiAyKigxLXQpKnQqZX0pKHQsbikrKGZ1bmN0aW9uIGEodCxlKXtyZXR1cm4gdCp0KmV9KSh0LGkpfWZ1bmN0aW9uIE5VdCh0LGUsbixpLHIpe3JldHVybihmdW5jdGlvbiBvKHQsZSl7Y29uc3Qgbj0xLXQ7cmV0dXJuIG4qbipuKmV9KSh0LGUpKyhmdW5jdGlvbiBhKHQsZSl7Y29uc3Qgbj0xLXQ7cmV0dXJuIDMqbipuKnQqZX0pKHQsbikrKGZ1bmN0aW9uIHModCxlKXtyZXR1cm4gMyooMS10KSp0KnQqZX0pKHQsaSkrKGZ1bmN0aW9uIGwodCxlKXtyZXR1cm4gdCp0KnQqZX0pKHQscil9ZnVuY3Rpb24gSVV0KHQ9bmV3IHpPdCxlPW5ldyB6T3Qsbj1uZXcgek90LGk9bmV3IHpPdCl7eFV0LmNhbGwodGhpcyksdGhpcy50eXBlPSJDdWJpY0JlemllckN1cnZlIix0aGlzLnYwPXQsdGhpcy52MT1lLHRoaXMudjI9bix0aGlzLnYzPWl9ZnVuY3Rpb24gT1V0KHQ9bmV3IHFPdCxlPW5ldyBxT3Qsbj1uZXcgcU90LGk9bmV3IHFPdCl7eFV0LmNhbGwodGhpcyksdGhpcy50eXBlPSJDdWJpY0JlemllckN1cnZlMyIsdGhpcy52MD10LHRoaXMudjE9ZSx0aGlzLnYyPW4sdGhpcy52Mz1pfWZ1bmN0aW9uIFJVdCh0PW5ldyB6T3QsZT1uZXcgek90KXt4VXQuY2FsbCh0aGlzKSx0aGlzLnR5cGU9IkxpbmVDdXJ2ZSIsdGhpcy52MT10LHRoaXMudjI9ZX1mdW5jdGlvbiB6VXQodD1uZXcgcU90LGU9bmV3IHFPdCl7eFV0LmNhbGwodGhpcyksdGhpcy50eXBlPSJMaW5lQ3VydmUzIix0aGlzLnYxPXQsdGhpcy52Mj1lfWZ1bmN0aW9uIERVdCh0PW5ldyB6T3QsZT1uZXcgek90LG49bmV3IHpPdCl7eFV0LmNhbGwodGhpcyksdGhpcy50eXBlPSJRdWFkcmF0aWNCZXppZXJDdXJ2ZSIsdGhpcy52MD10LHRoaXMudjE9ZSx0aGlzLnYyPW59ZnVuY3Rpb24gQlV0KHQ9bmV3IHFPdCxlPW5ldyBxT3Qsbj1uZXcgcU90KXt4VXQuY2FsbCh0aGlzKSx0aGlzLnR5cGU9IlF1YWRyYXRpY0JlemllckN1cnZlMyIsdGhpcy52MD10LHRoaXMudjE9ZSx0aGlzLnYyPW59ZnVuY3Rpb24gSFV0KHQ9W10pe3hVdC5jYWxsKHRoaXMpLHRoaXMudHlwZT0iU3BsaW5lQ3VydmUiLHRoaXMucG9pbnRzPXR9KGtVdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh4VXQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9a1V0LGtVdC5wcm90b3R5cGUuaXNDYXRtdWxsUm9tQ3VydmUzPSEwLGtVdC5wcm90b3R5cGUuZ2V0UG9pbnQ9ZnVuY3Rpb24odCxlPW5ldyBxT3Qpe2NvbnN0IG49ZSxpPXRoaXMucG9pbnRzLHI9aS5sZW5ndGgsbz0oci0odGhpcy5jbG9zZWQ/MDoxKSkqdDtsZXQgYSxzLGw9TWF0aC5mbG9vcihvKSxjPW8tbDt0aGlzLmNsb3NlZD9sKz1sPjA/MDooTWF0aC5mbG9vcihNYXRoLmFicyhsKS9yKSsxKSpyOjA9PT1jJiZsPT09ci0xJiYobD1yLTIsYz0xKSx0aGlzLmNsb3NlZHx8bD4wP2E9aVsobC0xKSVyXTooRVV0LnN1YlZlY3RvcnMoaVswXSxpWzFdKS5hZGQoaVswXSksYT1FVXQpO2NvbnN0IHU9aVtsJXJdLGg9aVsobCsxKSVyXTtpZih0aGlzLmNsb3NlZHx8bCsyPHI/cz1pWyhsKzIpJXJdOihFVXQuc3ViVmVjdG9ycyhpW3ItMV0saVtyLTJdKS5hZGQoaVtyLTFdKSxzPUVVdCksImNlbnRyaXBldGFsIj09PXRoaXMuY3VydmVUeXBlfHwiY2hvcmRhbCI9PT10aGlzLmN1cnZlVHlwZSl7Y29uc3QgdD0iY2hvcmRhbCI9PT10aGlzLmN1cnZlVHlwZT8uNTouMjU7bGV0IGU9TWF0aC5wb3coYS5kaXN0YW5jZVRvU3F1YXJlZCh1KSx0KSxuPU1hdGgucG93KHUuZGlzdGFuY2VUb1NxdWFyZWQoaCksdCksaT1NYXRoLnBvdyhoLmRpc3RhbmNlVG9TcXVhcmVkKHMpLHQpO248MWUtNCYmKG49MSksZTwxZS00JiYoZT1uKSxpPDFlLTQmJihpPW4pLFRVdC5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20oYS54LHUueCxoLngscy54LGUsbixpKSxDVXQuaW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tKGEueSx1LnksaC55LHMueSxlLG4saSksQVV0LmluaXROb251bmlmb3JtQ2F0bXVsbFJvbShhLnosdS56LGgueixzLnosZSxuLGkpfWVsc2UiY2F0bXVsbHJvbSI9PT10aGlzLmN1cnZlVHlwZSYmKFRVdC5pbml0Q2F0bXVsbFJvbShhLngsdS54LGgueCxzLngsdGhpcy50ZW5zaW9uKSxDVXQuaW5pdENhdG11bGxSb20oYS55LHUueSxoLnkscy55LHRoaXMudGVuc2lvbiksQVV0LmluaXRDYXRtdWxsUm9tKGEueix1LnosaC56LHMueix0aGlzLnRlbnNpb24pKTtyZXR1cm4gbi5zZXQoVFV0LmNhbGMoYyksQ1V0LmNhbGMoYyksQVV0LmNhbGMoYykpLG59LGtVdC5wcm90b3R5cGUuY29weT1mdW5jdGlvbih0KXt4VXQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMucG9pbnRzPVtdO2ZvcihsZXQgZT0wLG49dC5wb2ludHMubGVuZ3RoO2U8bjtlKyspdGhpcy5wb2ludHMucHVzaCh0LnBvaW50c1tlXS5jbG9uZSgpKTtyZXR1cm4gdGhpcy5jbG9zZWQ9dC5jbG9zZWQsdGhpcy5jdXJ2ZVR5cGU9dC5jdXJ2ZVR5cGUsdGhpcy50ZW5zaW9uPXQudGVuc2lvbix0aGlzfSxrVXQucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe2NvbnN0IHQ9eFV0LnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzKTt0LnBvaW50cz1bXTtmb3IobGV0IGU9MCxuPXRoaXMucG9pbnRzLmxlbmd0aDtlPG47ZSsrKXQucG9pbnRzLnB1c2godGhpcy5wb2ludHNbZV0udG9BcnJheSgpKTtyZXR1cm4gdC5jbG9zZWQ9dGhpcy5jbG9zZWQsdC5jdXJ2ZVR5cGU9dGhpcy5jdXJ2ZVR5cGUsdC50ZW5zaW9uPXRoaXMudGVuc2lvbix0fSxrVXQucHJvdG90eXBlLmZyb21KU09OPWZ1bmN0aW9uKHQpe3hVdC5wcm90b3R5cGUuZnJvbUpTT04uY2FsbCh0aGlzLHQpLHRoaXMucG9pbnRzPVtdO2ZvcihsZXQgZT0wLG49dC5wb2ludHMubGVuZ3RoO2U8bjtlKyspe2NvbnN0IG49dC5wb2ludHNbZV07dGhpcy5wb2ludHMucHVzaCgobmV3IHFPdCkuZnJvbUFycmF5KG4pKX1yZXR1cm4gdGhpcy5jbG9zZWQ9dC5jbG9zZWQsdGhpcy5jdXJ2ZVR5cGU9dC5jdXJ2ZVR5cGUsdGhpcy50ZW5zaW9uPXQudGVuc2lvbix0aGlzfSwoSVV0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHhVdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1JVXQsSVV0LnByb3RvdHlwZS5pc0N1YmljQmV6aWVyQ3VydmU9ITAsSVV0LnByb3RvdHlwZS5nZXRQb2ludD1mdW5jdGlvbih0LGU9bmV3IHpPdCl7Y29uc3Qgbj1lLGk9dGhpcy52MCxyPXRoaXMudjEsbz10aGlzLnYyLGE9dGhpcy52MztyZXR1cm4gbi5zZXQoTlV0KHQsaS54LHIueCxvLngsYS54KSxOVXQodCxpLnksci55LG8ueSxhLnkpKSxufSxJVXQucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24odCl7cmV0dXJuIHhVdC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy52MC5jb3B5KHQudjApLHRoaXMudjEuY29weSh0LnYxKSx0aGlzLnYyLmNvcHkodC52MiksdGhpcy52My5jb3B5KHQudjMpLHRoaXN9LElVdC5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7Y29uc3QgdD14VXQucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMpO3JldHVybiB0LnYwPXRoaXMudjAudG9BcnJheSgpLHQudjE9dGhpcy52MS50b0FycmF5KCksdC52Mj10aGlzLnYyLnRvQXJyYXkoKSx0LnYzPXRoaXMudjMudG9BcnJheSgpLHR9LElVdC5wcm90b3R5cGUuZnJvbUpTT049ZnVuY3Rpb24odCl7cmV0dXJuIHhVdC5wcm90b3R5cGUuZnJvbUpTT04uY2FsbCh0aGlzLHQpLHRoaXMudjAuZnJvbUFycmF5KHQudjApLHRoaXMudjEuZnJvbUFycmF5KHQudjEpLHRoaXMudjIuZnJvbUFycmF5KHQudjIpLHRoaXMudjMuZnJvbUFycmF5KHQudjMpLHRoaXN9LChPVXQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeFV0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPU9VdCxPVXQucHJvdG90eXBlLmlzQ3ViaWNCZXppZXJDdXJ2ZTM9ITAsT1V0LnByb3RvdHlwZS5nZXRQb2ludD1mdW5jdGlvbih0LGU9bmV3IHFPdCl7Y29uc3Qgbj1lLGk9dGhpcy52MCxyPXRoaXMudjEsbz10aGlzLnYyLGE9dGhpcy52MztyZXR1cm4gbi5zZXQoTlV0KHQsaS54LHIueCxvLngsYS54KSxOVXQodCxpLnksci55LG8ueSxhLnkpLE5VdCh0LGkueixyLnosby56LGEueikpLG59LE9VdC5wcm90b3R5cGUuY29weT1mdW5jdGlvbih0KXtyZXR1cm4geFV0LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLnYwLmNvcHkodC52MCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzLnYzLmNvcHkodC52MyksdGhpc30sT1V0LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtjb25zdCB0PXhVdC5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyk7cmV0dXJuIHQudjA9dGhpcy52MC50b0FycmF5KCksdC52MT10aGlzLnYxLnRvQXJyYXkoKSx0LnYyPXRoaXMudjIudG9BcnJheSgpLHQudjM9dGhpcy52My50b0FycmF5KCksdH0sT1V0LnByb3RvdHlwZS5mcm9tSlNPTj1mdW5jdGlvbih0KXtyZXR1cm4geFV0LnByb3RvdHlwZS5mcm9tSlNPTi5jYWxsKHRoaXMsdCksdGhpcy52MC5mcm9tQXJyYXkodC52MCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpcy52My5mcm9tQXJyYXkodC52MyksdGhpc30sKFJVdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh4VXQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9UlV0LFJVdC5wcm90b3R5cGUuaXNMaW5lQ3VydmU9ITAsUlV0LnByb3RvdHlwZS5nZXRQb2ludD1mdW5jdGlvbih0LGU9bmV3IHpPdCl7Y29uc3Qgbj1lO3JldHVybiAxPT09dD9uLmNvcHkodGhpcy52Mik6KG4uY29weSh0aGlzLnYyKS5zdWIodGhpcy52MSksbi5tdWx0aXBseVNjYWxhcih0KS5hZGQodGhpcy52MSkpLG59LFJVdC5wcm90b3R5cGUuZ2V0UG9pbnRBdD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmdldFBvaW50KHQsZSl9LFJVdC5wcm90b3R5cGUuZ2V0VGFuZ2VudD1mdW5jdGlvbih0LGUpe2NvbnN0IG49ZXx8bmV3IHpPdDtyZXR1cm4gbi5jb3B5KHRoaXMudjIpLnN1Yih0aGlzLnYxKS5ub3JtYWxpemUoKSxufSxSVXQucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24odCl7cmV0dXJuIHhVdC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzfSxSVXQucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe2NvbnN0IHQ9eFV0LnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzKTtyZXR1cm4gdC52MT10aGlzLnYxLnRvQXJyYXkoKSx0LnYyPXRoaXMudjIudG9BcnJheSgpLHR9LFJVdC5wcm90b3R5cGUuZnJvbUpTT049ZnVuY3Rpb24odCl7cmV0dXJuIHhVdC5wcm90b3R5cGUuZnJvbUpTT04uY2FsbCh0aGlzLHQpLHRoaXMudjEuZnJvbUFycmF5KHQudjEpLHRoaXMudjIuZnJvbUFycmF5KHQudjIpLHRoaXN9LCh6VXQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeFV0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPXpVdCx6VXQucHJvdG90eXBlLmlzTGluZUN1cnZlMz0hMCx6VXQucHJvdG90eXBlLmdldFBvaW50PWZ1bmN0aW9uKHQsZT1uZXcgcU90KXtjb25zdCBuPWU7cmV0dXJuIDE9PT10P24uY29weSh0aGlzLnYyKToobi5jb3B5KHRoaXMudjIpLnN1Yih0aGlzLnYxKSxuLm11bHRpcGx5U2NhbGFyKHQpLmFkZCh0aGlzLnYxKSksbn0selV0LnByb3RvdHlwZS5nZXRQb2ludEF0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZ2V0UG9pbnQodCxlKX0selV0LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHQpe3JldHVybiB4VXQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMudjEuY29weSh0LnYxKSx0aGlzLnYyLmNvcHkodC52MiksdGhpc30selV0LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtjb25zdCB0PXhVdC5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyk7cmV0dXJuIHQudjE9dGhpcy52MS50b0FycmF5KCksdC52Mj10aGlzLnYyLnRvQXJyYXkoKSx0fSx6VXQucHJvdG90eXBlLmZyb21KU09OPWZ1bmN0aW9uKHQpe3JldHVybiB4VXQucHJvdG90eXBlLmZyb21KU09OLmNhbGwodGhpcyx0KSx0aGlzLnYxLmZyb21BcnJheSh0LnYxKSx0aGlzLnYyLmZyb21BcnJheSh0LnYyKSx0aGlzfSwoRFV0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHhVdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1EVXQsRFV0LnByb3RvdHlwZS5pc1F1YWRyYXRpY0JlemllckN1cnZlPSEwLERVdC5wcm90b3R5cGUuZ2V0UG9pbnQ9ZnVuY3Rpb24odCxlPW5ldyB6T3Qpe2NvbnN0IG49ZSxpPXRoaXMudjAscj10aGlzLnYxLG89dGhpcy52MjtyZXR1cm4gbi5zZXQoUFV0KHQsaS54LHIueCxvLngpLFBVdCh0LGkueSxyLnksby55KSksbn0sRFV0LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHQpe3JldHVybiB4VXQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMudjAuY29weSh0LnYwKSx0aGlzLnYxLmNvcHkodC52MSksdGhpcy52Mi5jb3B5KHQudjIpLHRoaXN9LERVdC5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7Y29uc3QgdD14VXQucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMpO3JldHVybiB0LnYwPXRoaXMudjAudG9BcnJheSgpLHQudjE9dGhpcy52MS50b0FycmF5KCksdC52Mj10aGlzLnYyLnRvQXJyYXkoKSx0fSxEVXQucHJvdG90eXBlLmZyb21KU09OPWZ1bmN0aW9uKHQpe3JldHVybiB4VXQucHJvdG90eXBlLmZyb21KU09OLmNhbGwodGhpcyx0KSx0aGlzLnYwLmZyb21BcnJheSh0LnYwKSx0aGlzLnYxLmZyb21BcnJheSh0LnYxKSx0aGlzLnYyLmZyb21BcnJheSh0LnYyKSx0aGlzfSwoQlV0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHhVdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1CVXQsQlV0LnByb3RvdHlwZS5pc1F1YWRyYXRpY0JlemllckN1cnZlMz0hMCxCVXQucHJvdG90eXBlLmdldFBvaW50PWZ1bmN0aW9uKHQsZT1uZXcgcU90KXtjb25zdCBuPWUsaT10aGlzLnYwLHI9dGhpcy52MSxvPXRoaXMudjI7cmV0dXJuIG4uc2V0KFBVdCh0LGkueCxyLngsby54KSxQVXQodCxpLnksci55LG8ueSksUFV0KHQsaS56LHIueixvLnopKSxufSxCVXQucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24odCl7cmV0dXJuIHhVdC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy52MC5jb3B5KHQudjApLHRoaXMudjEuY29weSh0LnYxKSx0aGlzLnYyLmNvcHkodC52MiksdGhpc30sQlV0LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtjb25zdCB0PXhVdC5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyk7cmV0dXJuIHQudjA9dGhpcy52MC50b0FycmF5KCksdC52MT10aGlzLnYxLnRvQXJyYXkoKSx0LnYyPXRoaXMudjIudG9BcnJheSgpLHR9LEJVdC5wcm90b3R5cGUuZnJvbUpTT049ZnVuY3Rpb24odCl7cmV0dXJuIHhVdC5wcm90b3R5cGUuZnJvbUpTT04uY2FsbCh0aGlzLHQpLHRoaXMudjAuZnJvbUFycmF5KHQudjApLHRoaXMudjEuZnJvbUFycmF5KHQudjEpLHRoaXMudjIuZnJvbUFycmF5KHQudjIpLHRoaXN9LChIVXQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeFV0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPUhVdCxIVXQucHJvdG90eXBlLmlzU3BsaW5lQ3VydmU9ITAsSFV0LnByb3RvdHlwZS5nZXRQb2ludD1mdW5jdGlvbih0LGU9bmV3IHpPdCl7Y29uc3Qgbj1lLGk9dGhpcy5wb2ludHMscj0oaS5sZW5ndGgtMSkqdCxvPU1hdGguZmxvb3IociksYT1yLW8scz1pWzA9PT1vP286by0xXSxsPWlbb10sYz1pW28+aS5sZW5ndGgtMj9pLmxlbmd0aC0xOm8rMV0sdT1pW28+aS5sZW5ndGgtMz9pLmxlbmd0aC0xOm8rMl07cmV0dXJuIG4uc2V0KExVdChhLHMueCxsLngsYy54LHUueCksTFV0KGEscy55LGwueSxjLnksdS55KSksbn0sSFV0LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHQpe3hVdC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy5wb2ludHM9W107Zm9yKGxldCBlPTAsbj10LnBvaW50cy5sZW5ndGg7ZTxuO2UrKyl0aGlzLnBvaW50cy5wdXNoKHQucG9pbnRzW2VdLmNsb25lKCkpO3JldHVybiB0aGlzfSxIVXQucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe2NvbnN0IHQ9eFV0LnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzKTt0LnBvaW50cz1bXTtmb3IobGV0IGU9MCxuPXRoaXMucG9pbnRzLmxlbmd0aDtlPG47ZSsrKXQucG9pbnRzLnB1c2godGhpcy5wb2ludHNbZV0udG9BcnJheSgpKTtyZXR1cm4gdH0sSFV0LnByb3RvdHlwZS5mcm9tSlNPTj1mdW5jdGlvbih0KXt4VXQucHJvdG90eXBlLmZyb21KU09OLmNhbGwodGhpcyx0KSx0aGlzLnBvaW50cz1bXTtmb3IobGV0IGU9MCxuPXQucG9pbnRzLmxlbmd0aDtlPG47ZSsrKXtjb25zdCBuPXQucG9pbnRzW2VdO3RoaXMucG9pbnRzLnB1c2goKG5ldyB6T3QpLmZyb21BcnJheShuKSl9cmV0dXJuIHRoaXN9O3ZhciBGVXQ9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsQXJjQ3VydmU6U1V0LENhdG11bGxSb21DdXJ2ZTM6a1V0LEN1YmljQmV6aWVyQ3VydmU6SVV0LEN1YmljQmV6aWVyQ3VydmUzOk9VdCxFbGxpcHNlQ3VydmU6d1V0LExpbmVDdXJ2ZTpSVXQsTGluZUN1cnZlMzp6VXQsUXVhZHJhdGljQmV6aWVyQ3VydmU6RFV0LFF1YWRyYXRpY0JlemllckN1cnZlMzpCVXQsU3BsaW5lQ3VydmU6SFV0fSk7ZnVuY3Rpb24gVlV0KCl7eFV0LmNhbGwodGhpcyksdGhpcy50eXBlPSJDdXJ2ZVBhdGgiLHRoaXMuY3VydmVzPVtdLHRoaXMuYXV0b0Nsb3NlPSExfWZ1bmN0aW9uIFVVdCh0KXtWVXQuY2FsbCh0aGlzKSx0aGlzLnR5cGU9IlBhdGgiLHRoaXMuY3VycmVudFBvaW50PW5ldyB6T3QsdCYmdGhpcy5zZXRGcm9tUG9pbnRzKHQpfWZ1bmN0aW9uIGpVdCh0KXtVVXQuY2FsbCh0aGlzLHQpLHRoaXMudXVpZD1ST3QuZ2VuZXJhdGVVVUlEKCksdGhpcy50eXBlPSJTaGFwZSIsdGhpcy5ob2xlcz1bXX1mdW5jdGlvbiBHVXQodCxlPTEpe1dSdC5jYWxsKHRoaXMpLHRoaXMudHlwZT0iTGlnaHQiLHRoaXMuY29sb3I9bmV3IHB6dCh0KSx0aGlzLmludGVuc2l0eT1lfWZ1bmN0aW9uIFdVdCh0LGUsbil7R1V0LmNhbGwodGhpcyx0LG4pLHRoaXMudHlwZT0iSGVtaXNwaGVyZUxpZ2h0Iix0aGlzLnBvc2l0aW9uLmNvcHkoV1J0LkRlZmF1bHRVcCksdGhpcy51cGRhdGVNYXRyaXgoKSx0aGlzLmdyb3VuZENvbG9yPW5ldyBwenQoZSl9ZnVuY3Rpb24gcVV0KHQpe3RoaXMuY2FtZXJhPXQsdGhpcy5iaWFzPTAsdGhpcy5ub3JtYWxCaWFzPTAsdGhpcy5yYWRpdXM9MSx0aGlzLm1hcFNpemU9bmV3IHpPdCg1MTIsNTEyKSx0aGlzLm1hcD1udWxsLHRoaXMubWFwUGFzcz1udWxsLHRoaXMubWF0cml4PW5ldyBiUnQsdGhpcy5hdXRvVXBkYXRlPSEwLHRoaXMubmVlZHNVcGRhdGU9ITEsdGhpcy5fZnJ1c3R1bT1uZXcgeER0LHRoaXMuX2ZyYW1lRXh0ZW50cz1uZXcgek90KDEsMSksdGhpcy5fdmlld3BvcnRDb3VudD0xLHRoaXMuX3ZpZXdwb3J0cz1bbmV3IGpPdCgwLDAsMSwxKV19ZnVuY3Rpb24gWVV0KCl7cVV0LmNhbGwodGhpcyxuZXcgcER0KDUwLDEsLjUsNTAwKSksdGhpcy5mb2N1cz0xfWZ1bmN0aW9uIFhVdCh0LGUsbixpLHIsbyl7R1V0LmNhbGwodGhpcyx0LGUpLHRoaXMudHlwZT0iU3BvdExpZ2h0Iix0aGlzLnBvc2l0aW9uLmNvcHkoV1J0LkRlZmF1bHRVcCksdGhpcy51cGRhdGVNYXRyaXgoKSx0aGlzLnRhcmdldD1uZXcgV1J0LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJwb3dlciIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmludGVuc2l0eSpNYXRoLlBJfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5pbnRlbnNpdHk9dC9NYXRoLlBJfX0pLHRoaXMuZGlzdGFuY2U9dm9pZCAwIT09bj9uOjAsdGhpcy5hbmdsZT12b2lkIDAhPT1pP2k6TWF0aC5QSS8zLHRoaXMucGVudW1icmE9dm9pZCAwIT09cj9yOjAsdGhpcy5kZWNheT12b2lkIDAhPT1vP286MSx0aGlzLnNoYWRvdz1uZXcgWVV0fWZ1bmN0aW9uICRVdCgpe3FVdC5jYWxsKHRoaXMsbmV3IHBEdCg5MCwxLC41LDUwMCkpLHRoaXMuX2ZyYW1lRXh0ZW50cz1uZXcgek90KDQsMiksdGhpcy5fdmlld3BvcnRDb3VudD02LHRoaXMuX3ZpZXdwb3J0cz1bbmV3IGpPdCgyLDEsMSwxKSxuZXcgak90KDAsMSwxLDEpLG5ldyBqT3QoMywxLDEsMSksbmV3IGpPdCgxLDEsMSwxKSxuZXcgak90KDMsMCwxLDEpLG5ldyBqT3QoMSwwLDEsMSldLHRoaXMuX2N1YmVEaXJlY3Rpb25zPVtuZXcgcU90KDEsMCwwKSxuZXcgcU90KC0xLDAsMCksbmV3IHFPdCgwLDAsMSksbmV3IHFPdCgwLDAsLTEpLG5ldyBxT3QoMCwxLDApLG5ldyBxT3QoMCwtMSwwKV0sdGhpcy5fY3ViZVVwcz1bbmV3IHFPdCgwLDEsMCksbmV3IHFPdCgwLDEsMCksbmV3IHFPdCgwLDEsMCksbmV3IHFPdCgwLDEsMCksbmV3IHFPdCgwLDAsMSksbmV3IHFPdCgwLDAsLTEpXX1mdW5jdGlvbiBLVXQodCxlLG4saSl7R1V0LmNhbGwodGhpcyx0LGUpLHRoaXMudHlwZT0iUG9pbnRMaWdodCIsT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsInBvd2VyIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDQqdGhpcy5pbnRlbnNpdHkqTWF0aC5QSX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuaW50ZW5zaXR5PXQvKDQqTWF0aC5QSSl9fSksdGhpcy5kaXN0YW5jZT12b2lkIDAhPT1uP246MCx0aGlzLmRlY2F5PXZvaWQgMCE9PWk/aToxLHRoaXMuc2hhZG93PW5ldyAkVXR9ZnVuY3Rpb24gWlV0KHQ9LTEsZT0xLG49MSxpPS0xLHI9LjEsbz0yZTMpe2REdC5jYWxsKHRoaXMpLHRoaXMudHlwZT0iT3J0aG9ncmFwaGljQ2FtZXJhIix0aGlzLnpvb209MSx0aGlzLnZpZXc9bnVsbCx0aGlzLmxlZnQ9dCx0aGlzLnJpZ2h0PWUsdGhpcy50b3A9bix0aGlzLmJvdHRvbT1pLHRoaXMubmVhcj1yLHRoaXMuZmFyPW8sdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9ZnVuY3Rpb24gSlV0KCl7cVV0LmNhbGwodGhpcyxuZXcgWlV0KC01LDUsNSwtNSwuNSw1MDApKX1mdW5jdGlvbiBRVXQodCxlKXtHVXQuY2FsbCh0aGlzLHQsZSksdGhpcy50eXBlPSJEaXJlY3Rpb25hbExpZ2h0Iix0aGlzLnBvc2l0aW9uLmNvcHkoV1J0LkRlZmF1bHRVcCksdGhpcy51cGRhdGVNYXRyaXgoKSx0aGlzLnRhcmdldD1uZXcgV1J0LHRoaXMuc2hhZG93PW5ldyBKVXR9ZnVuY3Rpb24gdGp0KHQsZSl7R1V0LmNhbGwodGhpcyx0LGUpLHRoaXMudHlwZT0iQW1iaWVudExpZ2h0In1mdW5jdGlvbiBlanQodCxlLG4saSl7R1V0LmNhbGwodGhpcyx0LGUpLHRoaXMudHlwZT0iUmVjdEFyZWFMaWdodCIsdGhpcy53aWR0aD12b2lkIDAhPT1uP246MTAsdGhpcy5oZWlnaHQ9dm9pZCAwIT09aT9pOjEwfVZVdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKHhVdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpWVXQsYWRkOmZ1bmN0aW9uKHQpe3RoaXMuY3VydmVzLnB1c2godCl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe2NvbnN0IHQ9dGhpcy5jdXJ2ZXNbMF0uZ2V0UG9pbnQoMCksZT10aGlzLmN1cnZlc1t0aGlzLmN1cnZlcy5sZW5ndGgtMV0uZ2V0UG9pbnQoMSk7dC5lcXVhbHMoZSl8fHRoaXMuY3VydmVzLnB1c2gobmV3IFJVdChlLHQpKX0sZ2V0UG9pbnQ6ZnVuY3Rpb24odCl7Y29uc3QgZT10KnRoaXMuZ2V0TGVuZ3RoKCksbj10aGlzLmdldEN1cnZlTGVuZ3RocygpO2xldCBpPTA7Zm9yKDtpPG4ubGVuZ3RoOyl7aWYobltpXT49ZSl7Y29uc3QgdD1uW2ldLWUscj10aGlzLmN1cnZlc1tpXSxvPXIuZ2V0TGVuZ3RoKCk7cmV0dXJuIHIuZ2V0UG9pbnRBdCgwPT09bz8wOjEtdC9vKX1pKyt9cmV0dXJuIG51bGx9LGdldExlbmd0aDpmdW5jdGlvbigpe2NvbnN0IHQ9dGhpcy5nZXRDdXJ2ZUxlbmd0aHMoKTtyZXR1cm4gdFt0Lmxlbmd0aC0xXX0sdXBkYXRlQXJjTGVuZ3RoczpmdW5jdGlvbigpe3RoaXMubmVlZHNVcGRhdGU9ITAsdGhpcy5jYWNoZUxlbmd0aHM9bnVsbCx0aGlzLmdldEN1cnZlTGVuZ3RocygpfSxnZXRDdXJ2ZUxlbmd0aHM6ZnVuY3Rpb24oKXtpZih0aGlzLmNhY2hlTGVuZ3RocyYmdGhpcy5jYWNoZUxlbmd0aHMubGVuZ3RoPT09dGhpcy5jdXJ2ZXMubGVuZ3RoKXJldHVybiB0aGlzLmNhY2hlTGVuZ3Rocztjb25zdCB0PVtdO2xldCBlPTA7Zm9yKGxldCBuPTAsaT10aGlzLmN1cnZlcy5sZW5ndGg7bjxpO24rKyllKz10aGlzLmN1cnZlc1tuXS5nZXRMZW5ndGgoKSx0LnB1c2goZSk7cmV0dXJuIHRoaXMuY2FjaGVMZW5ndGhzPXQsdH0sZ2V0U3BhY2VkUG9pbnRzOmZ1bmN0aW9uKHQ9NDApe2NvbnN0IGU9W107Zm9yKGxldCBuPTA7bjw9dDtuKyspZS5wdXNoKHRoaXMuZ2V0UG9pbnQobi90KSk7cmV0dXJuIHRoaXMuYXV0b0Nsb3NlJiZlLnB1c2goZVswXSksZX0sZ2V0UG9pbnRzOmZ1bmN0aW9uKHQ9MTIpe2NvbnN0IGU9W107bGV0IG47Zm9yKGxldCBpPTAscj10aGlzLmN1cnZlcztpPHIubGVuZ3RoO2krKyl7Y29uc3Qgbz1yW2ldLGE9by5nZXRQb2ludHMobyYmby5pc0VsbGlwc2VDdXJ2ZT8yKnQ6byYmKG8uaXNMaW5lQ3VydmV8fG8uaXNMaW5lQ3VydmUzKT8xOm8mJm8uaXNTcGxpbmVDdXJ2ZT90Km8ucG9pbnRzLmxlbmd0aDp0KTtmb3IobGV0IHQ9MDt0PGEubGVuZ3RoO3QrKyl7Y29uc3QgaT1hW3RdO24mJm4uZXF1YWxzKGkpfHwoZS5wdXNoKGkpLG49aSl9fXJldHVybiB0aGlzLmF1dG9DbG9zZSYmZS5sZW5ndGg+MSYmIWVbZS5sZW5ndGgtMV0uZXF1YWxzKGVbMF0pJiZlLnB1c2goZVswXSksZX0sY29weTpmdW5jdGlvbih0KXt4VXQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMuY3VydmVzPVtdO2ZvcihsZXQgZT0wLG49dC5jdXJ2ZXMubGVuZ3RoO2U8bjtlKyspdGhpcy5jdXJ2ZXMucHVzaCh0LmN1cnZlc1tlXS5jbG9uZSgpKTtyZXR1cm4gdGhpcy5hdXRvQ2xvc2U9dC5hdXRvQ2xvc2UsdGhpc30sdG9KU09OOmZ1bmN0aW9uKCl7Y29uc3QgdD14VXQucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMpO3QuYXV0b0Nsb3NlPXRoaXMuYXV0b0Nsb3NlLHQuY3VydmVzPVtdO2ZvcihsZXQgZT0wLG49dGhpcy5jdXJ2ZXMubGVuZ3RoO2U8bjtlKyspdC5jdXJ2ZXMucHVzaCh0aGlzLmN1cnZlc1tlXS50b0pTT04oKSk7cmV0dXJuIHR9LGZyb21KU09OOmZ1bmN0aW9uKHQpe3hVdC5wcm90b3R5cGUuZnJvbUpTT04uY2FsbCh0aGlzLHQpLHRoaXMuYXV0b0Nsb3NlPXQuYXV0b0Nsb3NlLHRoaXMuY3VydmVzPVtdO2ZvcihsZXQgZT0wLG49dC5jdXJ2ZXMubGVuZ3RoO2U8bjtlKyspe2NvbnN0IG49dC5jdXJ2ZXNbZV07dGhpcy5jdXJ2ZXMucHVzaCgobmV3IEZVdFtuLnR5cGVdKS5mcm9tSlNPTihuKSl9cmV0dXJuIHRoaXN9fSksVVV0LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoVlV0LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOlVVdCxzZXRGcm9tUG9pbnRzOmZ1bmN0aW9uKHQpe3RoaXMubW92ZVRvKHRbMF0ueCx0WzBdLnkpO2ZvcihsZXQgZT0xLG49dC5sZW5ndGg7ZTxuO2UrKyl0aGlzLmxpbmVUbyh0W2VdLngsdFtlXS55KTtyZXR1cm4gdGhpc30sbW92ZVRvOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuY3VycmVudFBvaW50LnNldCh0LGUpLHRoaXN9LGxpbmVUbzpmdW5jdGlvbih0LGUpe2NvbnN0IG49bmV3IFJVdCh0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpLG5ldyB6T3QodCxlKSk7cmV0dXJuIHRoaXMuY3VydmVzLnB1c2gobiksdGhpcy5jdXJyZW50UG9pbnQuc2V0KHQsZSksdGhpc30scXVhZHJhdGljQ3VydmVUbzpmdW5jdGlvbih0LGUsbixpKXtjb25zdCByPW5ldyBEVXQodGhpcy5jdXJyZW50UG9pbnQuY2xvbmUoKSxuZXcgek90KHQsZSksbmV3IHpPdChuLGkpKTtyZXR1cm4gdGhpcy5jdXJ2ZXMucHVzaChyKSx0aGlzLmN1cnJlbnRQb2ludC5zZXQobixpKSx0aGlzfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKHQsZSxuLGkscixvKXtjb25zdCBhPW5ldyBJVXQodGhpcy5jdXJyZW50UG9pbnQuY2xvbmUoKSxuZXcgek90KHQsZSksbmV3IHpPdChuLGkpLG5ldyB6T3QocixvKSk7cmV0dXJuIHRoaXMuY3VydmVzLnB1c2goYSksdGhpcy5jdXJyZW50UG9pbnQuc2V0KHIsbyksdGhpc30sc3BsaW5lVGhydTpmdW5jdGlvbih0KXtjb25zdCBlPW5ldyBIVXQoW3RoaXMuY3VycmVudFBvaW50LmNsb25lKCldLmNvbmNhdCh0KSk7cmV0dXJuIHRoaXMuY3VydmVzLnB1c2goZSksdGhpcy5jdXJyZW50UG9pbnQuY29weSh0W3QubGVuZ3RoLTFdKSx0aGlzfSxhcmM6ZnVuY3Rpb24odCxlLG4saSxyLG8pe3JldHVybiB0aGlzLmFic2FyYyh0K3RoaXMuY3VycmVudFBvaW50LngsZSt0aGlzLmN1cnJlbnRQb2ludC55LG4saSxyLG8pLHRoaXN9LGFic2FyYzpmdW5jdGlvbih0LGUsbixpLHIsbyl7cmV0dXJuIHRoaXMuYWJzZWxsaXBzZSh0LGUsbixuLGkscixvKSx0aGlzfSxlbGxpcHNlOmZ1bmN0aW9uKHQsZSxuLGkscixvLGEscyl7cmV0dXJuIHRoaXMuYWJzZWxsaXBzZSh0K3RoaXMuY3VycmVudFBvaW50LngsZSt0aGlzLmN1cnJlbnRQb2ludC55LG4saSxyLG8sYSxzKSx0aGlzfSxhYnNlbGxpcHNlOmZ1bmN0aW9uKHQsZSxuLGkscixvLGEscyl7Y29uc3QgbD1uZXcgd1V0KHQsZSxuLGkscixvLGEscyk7aWYodGhpcy5jdXJ2ZXMubGVuZ3RoPjApe2NvbnN0IHQ9bC5nZXRQb2ludCgwKTt0LmVxdWFscyh0aGlzLmN1cnJlbnRQb2ludCl8fHRoaXMubGluZVRvKHQueCx0LnkpfXRoaXMuY3VydmVzLnB1c2gobCk7Y29uc3QgYz1sLmdldFBvaW50KDEpO3JldHVybiB0aGlzLmN1cnJlbnRQb2ludC5jb3B5KGMpLHRoaXN9LGNvcHk6ZnVuY3Rpb24odCl7cmV0dXJuIFZVdC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy5jdXJyZW50UG9pbnQuY29weSh0LmN1cnJlbnRQb2ludCksdGhpc30sdG9KU09OOmZ1bmN0aW9uKCl7Y29uc3QgdD1WVXQucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMpO3JldHVybiB0LmN1cnJlbnRQb2ludD10aGlzLmN1cnJlbnRQb2ludC50b0FycmF5KCksdH0sZnJvbUpTT046ZnVuY3Rpb24odCl7cmV0dXJuIFZVdC5wcm90b3R5cGUuZnJvbUpTT04uY2FsbCh0aGlzLHQpLHRoaXMuY3VycmVudFBvaW50LmZyb21BcnJheSh0LmN1cnJlbnRQb2ludCksdGhpc319KSxqVXQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShVVXQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6alV0LGdldFBvaW50c0hvbGVzOmZ1bmN0aW9uKHQpe2NvbnN0IGU9W107Zm9yKGxldCBuPTAsaT10aGlzLmhvbGVzLmxlbmd0aDtuPGk7bisrKWVbbl09dGhpcy5ob2xlc1tuXS5nZXRQb2ludHModCk7cmV0dXJuIGV9LGV4dHJhY3RQb2ludHM6ZnVuY3Rpb24odCl7cmV0dXJue3NoYXBlOnRoaXMuZ2V0UG9pbnRzKHQpLGhvbGVzOnRoaXMuZ2V0UG9pbnRzSG9sZXModCl9fSxjb3B5OmZ1bmN0aW9uKHQpe1VVdC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy5ob2xlcz1bXTtmb3IobGV0IGU9MCxuPXQuaG9sZXMubGVuZ3RoO2U8bjtlKyspdGhpcy5ob2xlcy5wdXNoKHQuaG9sZXNbZV0uY2xvbmUoKSk7cmV0dXJuIHRoaXN9LHRvSlNPTjpmdW5jdGlvbigpe2NvbnN0IHQ9VVV0LnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzKTt0LnV1aWQ9dGhpcy51dWlkLHQuaG9sZXM9W107Zm9yKGxldCBlPTAsbj10aGlzLmhvbGVzLmxlbmd0aDtlPG47ZSsrKXQuaG9sZXMucHVzaCh0aGlzLmhvbGVzW2VdLnRvSlNPTigpKTtyZXR1cm4gdH0sZnJvbUpTT046ZnVuY3Rpb24odCl7VVV0LnByb3RvdHlwZS5mcm9tSlNPTi5jYWxsKHRoaXMsdCksdGhpcy51dWlkPXQudXVpZCx0aGlzLmhvbGVzPVtdO2ZvcihsZXQgZT0wLG49dC5ob2xlcy5sZW5ndGg7ZTxuO2UrKyl7Y29uc3Qgbj10LmhvbGVzW2VdO3RoaXMuaG9sZXMucHVzaCgobmV3IFVVdCkuZnJvbUpTT04obikpfXJldHVybiB0aGlzfX0pLEdVdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKFdSdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpHVXQsaXNMaWdodDohMCxjb3B5OmZ1bmN0aW9uKHQpe3JldHVybiBXUnQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLmludGVuc2l0eT10LmludGVuc2l0eSx0aGlzfSx0b0pTT046ZnVuY3Rpb24odCl7Y29uc3QgZT1XUnQucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMsdCk7cmV0dXJuIGUub2JqZWN0LmNvbG9yPXRoaXMuY29sb3IuZ2V0SGV4KCksZS5vYmplY3QuaW50ZW5zaXR5PXRoaXMuaW50ZW5zaXR5LHZvaWQgMCE9PXRoaXMuZ3JvdW5kQ29sb3ImJihlLm9iamVjdC5ncm91bmRDb2xvcj10aGlzLmdyb3VuZENvbG9yLmdldEhleCgpKSx2b2lkIDAhPT10aGlzLmRpc3RhbmNlJiYoZS5vYmplY3QuZGlzdGFuY2U9dGhpcy5kaXN0YW5jZSksdm9pZCAwIT09dGhpcy5hbmdsZSYmKGUub2JqZWN0LmFuZ2xlPXRoaXMuYW5nbGUpLHZvaWQgMCE9PXRoaXMuZGVjYXkmJihlLm9iamVjdC5kZWNheT10aGlzLmRlY2F5KSx2b2lkIDAhPT10aGlzLnBlbnVtYnJhJiYoZS5vYmplY3QucGVudW1icmE9dGhpcy5wZW51bWJyYSksdm9pZCAwIT09dGhpcy5zaGFkb3cmJihlLm9iamVjdC5zaGFkb3c9dGhpcy5zaGFkb3cudG9KU09OKCkpLGV9fSksV1V0LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoR1V0LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOldVdCxpc0hlbWlzcGhlcmVMaWdodDohMCxjb3B5OmZ1bmN0aW9uKHQpe3JldHVybiBHVXQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMuZ3JvdW5kQ29sb3IuY29weSh0Lmdyb3VuZENvbG9yKSx0aGlzfX0pLE9iamVjdC5hc3NpZ24ocVV0LnByb3RvdHlwZSx7X3Byb2pTY3JlZW5NYXRyaXg6bmV3IGJSdCxfbGlnaHRQb3NpdGlvbldvcmxkOm5ldyBxT3QsX2xvb2tUYXJnZXQ6bmV3IHFPdCxnZXRWaWV3cG9ydENvdW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ZpZXdwb3J0Q291bnR9LGdldEZydXN0dW06ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZnJ1c3R1bX0sdXBkYXRlTWF0cmljZXM6ZnVuY3Rpb24odCl7Y29uc3QgZT10aGlzLmNhbWVyYSxuPXRoaXMubWF0cml4LGk9dGhpcy5fcHJvalNjcmVlbk1hdHJpeCxyPXRoaXMuX2xvb2tUYXJnZXQsbz10aGlzLl9saWdodFBvc2l0aW9uV29ybGQ7by5zZXRGcm9tTWF0cml4UG9zaXRpb24odC5tYXRyaXhXb3JsZCksZS5wb3NpdGlvbi5jb3B5KG8pLHIuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHQudGFyZ2V0Lm1hdHJpeFdvcmxkKSxlLmxvb2tBdChyKSxlLnVwZGF0ZU1hdHJpeFdvcmxkKCksaS5tdWx0aXBseU1hdHJpY2VzKGUucHJvamVjdGlvbk1hdHJpeCxlLm1hdHJpeFdvcmxkSW52ZXJzZSksdGhpcy5fZnJ1c3R1bS5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeChpKSxuLnNldCguNSwwLDAsLjUsMCwuNSwwLC41LDAsMCwuNSwuNSwwLDAsMCwxKSxuLm11bHRpcGx5KGUucHJvamVjdGlvbk1hdHJpeCksbi5tdWx0aXBseShlLm1hdHJpeFdvcmxkSW52ZXJzZSl9LGdldFZpZXdwb3J0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92aWV3cG9ydHNbdF19LGdldEZyYW1lRXh0ZW50czpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9mcmFtZUV4dGVudHN9LGNvcHk6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2FtZXJhPXQuY2FtZXJhLmNsb25lKCksdGhpcy5iaWFzPXQuYmlhcyx0aGlzLnJhZGl1cz10LnJhZGl1cyx0aGlzLm1hcFNpemUuY29weSh0Lm1hcFNpemUpLHRoaXN9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfSx0b0pTT046ZnVuY3Rpb24oKXtjb25zdCB0PXt9O3JldHVybiAwIT09dGhpcy5iaWFzJiYodC5iaWFzPXRoaXMuYmlhcyksMCE9PXRoaXMubm9ybWFsQmlhcyYmKHQubm9ybWFsQmlhcz10aGlzLm5vcm1hbEJpYXMpLDEhPT10aGlzLnJhZGl1cyYmKHQucmFkaXVzPXRoaXMucmFkaXVzKSw1MTI9PT10aGlzLm1hcFNpemUueCYmNTEyPT09dGhpcy5tYXBTaXplLnl8fCh0Lm1hcFNpemU9dGhpcy5tYXBTaXplLnRvQXJyYXkoKSksdC5jYW1lcmE9dGhpcy5jYW1lcmEudG9KU09OKCExKS5vYmplY3QsZGVsZXRlIHQuY2FtZXJhLm1hdHJpeCx0fX0pLFlVdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKHFVdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpZVXQsaXNTcG90TGlnaHRTaGFkb3c6ITAsdXBkYXRlTWF0cmljZXM6ZnVuY3Rpb24odCl7Y29uc3QgZT10aGlzLmNhbWVyYSxuPTIqUk90LlJBRDJERUcqdC5hbmdsZSp0aGlzLmZvY3VzLGk9dGhpcy5tYXBTaXplLndpZHRoL3RoaXMubWFwU2l6ZS5oZWlnaHQscj10LmRpc3RhbmNlfHxlLmZhcjtuPT09ZS5mb3YmJmk9PT1lLmFzcGVjdCYmcj09PWUuZmFyfHwoZS5mb3Y9bixlLmFzcGVjdD1pLGUuZmFyPXIsZS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCkpLHFVdC5wcm90b3R5cGUudXBkYXRlTWF0cmljZXMuY2FsbCh0aGlzLHQpfX0pLFhVdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKEdVdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpYVXQsaXNTcG90TGlnaHQ6ITAsY29weTpmdW5jdGlvbih0KXtyZXR1cm4gR1V0LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLmRpc3RhbmNlPXQuZGlzdGFuY2UsdGhpcy5hbmdsZT10LmFuZ2xlLHRoaXMucGVudW1icmE9dC5wZW51bWJyYSx0aGlzLmRlY2F5PXQuZGVjYXksdGhpcy50YXJnZXQ9dC50YXJnZXQuY2xvbmUoKSx0aGlzLnNoYWRvdz10LnNoYWRvdy5jbG9uZSgpLHRoaXN9fSksJFV0LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUocVV0LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOiRVdCxpc1BvaW50TGlnaHRTaGFkb3c6ITAsdXBkYXRlTWF0cmljZXM6ZnVuY3Rpb24odCxlPTApe2NvbnN0IG49dGhpcy5jYW1lcmEsaT10aGlzLm1hdHJpeCxyPXRoaXMuX2xpZ2h0UG9zaXRpb25Xb3JsZCxvPXRoaXMuX2xvb2tUYXJnZXQsYT10aGlzLl9wcm9qU2NyZWVuTWF0cml4O3Iuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHQubWF0cml4V29ybGQpLG4ucG9zaXRpb24uY29weShyKSxvLmNvcHkobi5wb3NpdGlvbiksby5hZGQodGhpcy5fY3ViZURpcmVjdGlvbnNbZV0pLG4udXAuY29weSh0aGlzLl9jdWJlVXBzW2VdKSxuLmxvb2tBdChvKSxuLnVwZGF0ZU1hdHJpeFdvcmxkKCksaS5tYWtlVHJhbnNsYXRpb24oLXIueCwtci55LC1yLnopLGEubXVsdGlwbHlNYXRyaWNlcyhuLnByb2plY3Rpb25NYXRyaXgsbi5tYXRyaXhXb3JsZEludmVyc2UpLHRoaXMuX2ZydXN0dW0uc2V0RnJvbVByb2plY3Rpb25NYXRyaXgoYSl9fSksS1V0LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoR1V0LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOktVdCxpc1BvaW50TGlnaHQ6ITAsY29weTpmdW5jdGlvbih0KXtyZXR1cm4gR1V0LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLmRpc3RhbmNlPXQuZGlzdGFuY2UsdGhpcy5kZWNheT10LmRlY2F5LHRoaXMuc2hhZG93PXQuc2hhZG93LmNsb25lKCksdGhpc319KSxaVXQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShkRHQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6WlV0LGlzT3J0aG9ncmFwaGljQ2FtZXJhOiEwLGNvcHk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZER0LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0LGUpLHRoaXMubGVmdD10LmxlZnQsdGhpcy5yaWdodD10LnJpZ2h0LHRoaXMudG9wPXQudG9wLHRoaXMuYm90dG9tPXQuYm90dG9tLHRoaXMubmVhcj10Lm5lYXIsdGhpcy5mYXI9dC5mYXIsdGhpcy56b29tPXQuem9vbSx0aGlzLnZpZXc9bnVsbD09PXQudmlldz9udWxsOk9iamVjdC5hc3NpZ24oe30sdC52aWV3KSx0aGlzfSxzZXRWaWV3T2Zmc2V0OmZ1bmN0aW9uKHQsZSxuLGkscixvKXtudWxsPT09dGhpcy52aWV3JiYodGhpcy52aWV3PXtlbmFibGVkOiEwLGZ1bGxXaWR0aDoxLGZ1bGxIZWlnaHQ6MSxvZmZzZXRYOjAsb2Zmc2V0WTowLHdpZHRoOjEsaGVpZ2h0OjF9KSx0aGlzLnZpZXcuZW5hYmxlZD0hMCx0aGlzLnZpZXcuZnVsbFdpZHRoPXQsdGhpcy52aWV3LmZ1bGxIZWlnaHQ9ZSx0aGlzLnZpZXcub2Zmc2V0WD1uLHRoaXMudmlldy5vZmZzZXRZPWksdGhpcy52aWV3LndpZHRoPXIsdGhpcy52aWV3LmhlaWdodD1vLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfSxjbGVhclZpZXdPZmZzZXQ6ZnVuY3Rpb24oKXtudWxsIT09dGhpcy52aWV3JiYodGhpcy52aWV3LmVuYWJsZWQ9ITEpLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfSx1cGRhdGVQcm9qZWN0aW9uTWF0cml4OmZ1bmN0aW9uKCl7Y29uc3QgdD0odGhpcy5yaWdodC10aGlzLmxlZnQpLygyKnRoaXMuem9vbSksZT0odGhpcy50b3AtdGhpcy5ib3R0b20pLygyKnRoaXMuem9vbSksbj0odGhpcy5yaWdodCt0aGlzLmxlZnQpLzIsaT0odGhpcy50b3ArdGhpcy5ib3R0b20pLzI7bGV0IHI9bi10LG89bit0LGE9aStlLHM9aS1lO2lmKG51bGwhPT10aGlzLnZpZXcmJnRoaXMudmlldy5lbmFibGVkKXtjb25zdCB0PSh0aGlzLnJpZ2h0LXRoaXMubGVmdCkvdGhpcy52aWV3LmZ1bGxXaWR0aC90aGlzLnpvb20sZT0odGhpcy50b3AtdGhpcy5ib3R0b20pL3RoaXMudmlldy5mdWxsSGVpZ2h0L3RoaXMuem9vbTtyKz10KnRoaXMudmlldy5vZmZzZXRYLG89cit0KnRoaXMudmlldy53aWR0aCxhLT1lKnRoaXMudmlldy5vZmZzZXRZLHM9YS1lKnRoaXMudmlldy5oZWlnaHR9dGhpcy5wcm9qZWN0aW9uTWF0cml4Lm1ha2VPcnRob2dyYXBoaWMocixvLGEscyx0aGlzLm5lYXIsdGhpcy5mYXIpLHRoaXMucHJvamVjdGlvbk1hdHJpeEludmVyc2UuY29weSh0aGlzLnByb2plY3Rpb25NYXRyaXgpLmludmVydCgpfSx0b0pTT046ZnVuY3Rpb24odCl7Y29uc3QgZT1XUnQucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMsdCk7cmV0dXJuIGUub2JqZWN0Lnpvb209dGhpcy56b29tLGUub2JqZWN0LmxlZnQ9dGhpcy5sZWZ0LGUub2JqZWN0LnJpZ2h0PXRoaXMucmlnaHQsZS5vYmplY3QudG9wPXRoaXMudG9wLGUub2JqZWN0LmJvdHRvbT10aGlzLmJvdHRvbSxlLm9iamVjdC5uZWFyPXRoaXMubmVhcixlLm9iamVjdC5mYXI9dGhpcy5mYXIsbnVsbCE9PXRoaXMudmlldyYmKGUub2JqZWN0LnZpZXc9T2JqZWN0LmFzc2lnbih7fSx0aGlzLnZpZXcpKSxlfX0pLEpVdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKHFVdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpKVXQsaXNEaXJlY3Rpb25hbExpZ2h0U2hhZG93OiEwLHVwZGF0ZU1hdHJpY2VzOmZ1bmN0aW9uKHQpe3FVdC5wcm90b3R5cGUudXBkYXRlTWF0cmljZXMuY2FsbCh0aGlzLHQpfX0pLFFVdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKEdVdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpRVXQsaXNEaXJlY3Rpb25hbExpZ2h0OiEwLGNvcHk6ZnVuY3Rpb24odCl7cmV0dXJuIEdVdC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy50YXJnZXQ9dC50YXJnZXQuY2xvbmUoKSx0aGlzLnNoYWRvdz10LnNoYWRvdy5jbG9uZSgpLHRoaXN9fSksdGp0LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoR1V0LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOnRqdCxpc0FtYmllbnRMaWdodDohMH0pLGVqdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKEdVdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjplanQsaXNSZWN0QXJlYUxpZ2h0OiEwLGNvcHk6ZnVuY3Rpb24odCl7cmV0dXJuIEdVdC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy53aWR0aD10LndpZHRoLHRoaXMuaGVpZ2h0PXQuaGVpZ2h0LHRoaXN9LHRvSlNPTjpmdW5jdGlvbih0KXtjb25zdCBlPUdVdC5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyx0KTtyZXR1cm4gZS5vYmplY3Qud2lkdGg9dGhpcy53aWR0aCxlLm9iamVjdC5oZWlnaHQ9dGhpcy5oZWlnaHQsZX19KTtjbGFzcyBuanR7Y29uc3RydWN0b3IoKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaXNTcGhlcmljYWxIYXJtb25pY3MzIix7dmFsdWU6ITB9KSx0aGlzLmNvZWZmaWNpZW50cz1bXTtmb3IobGV0IHQ9MDt0PDk7dCsrKXRoaXMuY29lZmZpY2llbnRzLnB1c2gobmV3IHFPdCl9c2V0KHQpe2ZvcihsZXQgZT0wO2U8OTtlKyspdGhpcy5jb2VmZmljaWVudHNbZV0uY29weSh0W2VdKTtyZXR1cm4gdGhpc316ZXJvKCl7Zm9yKGxldCB0PTA7dDw5O3QrKyl0aGlzLmNvZWZmaWNpZW50c1t0XS5zZXQoMCwwLDApO3JldHVybiB0aGlzfWdldEF0KHQsZSl7Y29uc3Qgbj10LngsaT10Lnkscj10Lnosbz10aGlzLmNvZWZmaWNpZW50cztyZXR1cm4gZS5jb3B5KG9bMF0pLm11bHRpcGx5U2NhbGFyKC4yODIwOTUpLGUuYWRkU2NhbGVkVmVjdG9yKG9bMV0sLjQ4ODYwMyppKSxlLmFkZFNjYWxlZFZlY3RvcihvWzJdLC40ODg2MDMqciksZS5hZGRTY2FsZWRWZWN0b3Iob1szXSwuNDg4NjAzKm4pLGUuYWRkU2NhbGVkVmVjdG9yKG9bNF0sbippKjEuMDkyNTQ4KSxlLmFkZFNjYWxlZFZlY3RvcihvWzVdLGkqcioxLjA5MjU0OCksZS5hZGRTY2FsZWRWZWN0b3Iob1s2XSwuMzE1MzkyKigzKnIqci0xKSksZS5hZGRTY2FsZWRWZWN0b3Iob1s3XSxuKnIqMS4wOTI1NDgpLGUuYWRkU2NhbGVkVmVjdG9yKG9bOF0sLjU0NjI3NCoobipuLWkqaSkpLGV9Z2V0SXJyYWRpYW5jZUF0KHQsZSl7Y29uc3Qgbj10LngsaT10Lnkscj10Lnosbz10aGlzLmNvZWZmaWNpZW50cztyZXR1cm4gZS5jb3B5KG9bMF0pLm11bHRpcGx5U2NhbGFyKC44ODYyMjcpLGUuYWRkU2NhbGVkVmVjdG9yKG9bMV0sMS4wMjMzMjgqaSksZS5hZGRTY2FsZWRWZWN0b3Iob1syXSwxLjAyMzMyOCpyKSxlLmFkZFNjYWxlZFZlY3RvcihvWzNdLDEuMDIzMzI4Km4pLGUuYWRkU2NhbGVkVmVjdG9yKG9bNF0sLjg1ODA4NipuKmkpLGUuYWRkU2NhbGVkVmVjdG9yKG9bNV0sLjg1ODA4NippKnIpLGUuYWRkU2NhbGVkVmVjdG9yKG9bNl0sLjc0MzEyNSpyKnItLjI0NzcwOCksZS5hZGRTY2FsZWRWZWN0b3Iob1s3XSwuODU4MDg2Km4qciksZS5hZGRTY2FsZWRWZWN0b3Iob1s4XSwuNDI5MDQzKihuKm4taSppKSksZX1hZGQodCl7Zm9yKGxldCBlPTA7ZTw5O2UrKyl0aGlzLmNvZWZmaWNpZW50c1tlXS5hZGQodC5jb2VmZmljaWVudHNbZV0pO3JldHVybiB0aGlzfWFkZFNjYWxlZFNIKHQsZSl7Zm9yKGxldCBuPTA7bjw5O24rKyl0aGlzLmNvZWZmaWNpZW50c1tuXS5hZGRTY2FsZWRWZWN0b3IodC5jb2VmZmljaWVudHNbbl0sZSk7cmV0dXJuIHRoaXN9c2NhbGUodCl7Zm9yKGxldCBlPTA7ZTw5O2UrKyl0aGlzLmNvZWZmaWNpZW50c1tlXS5tdWx0aXBseVNjYWxhcih0KTtyZXR1cm4gdGhpc31sZXJwKHQsZSl7Zm9yKGxldCBuPTA7bjw5O24rKyl0aGlzLmNvZWZmaWNpZW50c1tuXS5sZXJwKHQuY29lZmZpY2llbnRzW25dLGUpO3JldHVybiB0aGlzfWVxdWFscyh0KXtmb3IobGV0IGU9MDtlPDk7ZSsrKWlmKCF0aGlzLmNvZWZmaWNpZW50c1tlXS5lcXVhbHModC5jb2VmZmljaWVudHNbZV0pKXJldHVybiExO3JldHVybiEwfWNvcHkodCl7cmV0dXJuIHRoaXMuc2V0KHQuY29lZmZpY2llbnRzKX1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX1mcm9tQXJyYXkodCxlPTApe2NvbnN0IG49dGhpcy5jb2VmZmljaWVudHM7Zm9yKGxldCBpPTA7aTw5O2krKyluW2ldLmZyb21BcnJheSh0LGUrMyppKTtyZXR1cm4gdGhpc310b0FycmF5KHQ9W10sZT0wKXtjb25zdCBuPXRoaXMuY29lZmZpY2llbnRzO2ZvcihsZXQgaT0wO2k8OTtpKyspbltpXS50b0FycmF5KHQsZSszKmkpO3JldHVybiB0fXN0YXRpYyBnZXRCYXNpc0F0KHQsZSl7Y29uc3Qgbj10LngsaT10Lnkscj10Lno7ZVswXT0uMjgyMDk1LGVbMV09LjQ4ODYwMyppLGVbMl09LjQ4ODYwMypyLGVbM109LjQ4ODYwMypuLGVbNF09MS4wOTI1NDgqbippLGVbNV09MS4wOTI1NDgqaSpyLGVbNl09LjMxNTM5MiooMypyKnItMSksZVs3XT0xLjA5MjU0OCpuKnIsZVs4XT0uNTQ2Mjc0KihuKm4taSppKX19ZnVuY3Rpb24gaWp0KHQsZSl7R1V0LmNhbGwodGhpcyx2b2lkIDAsZSksdGhpcy50eXBlPSJMaWdodFByb2JlIix0aGlzLnNoPXZvaWQgMCE9PXQ/dDpuZXcgbmp0fWZ1bmN0aW9uIHJqdCh0KXtkVXQuY2FsbCh0aGlzLHQpLHRoaXMudGV4dHVyZXM9e319aWp0LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoR1V0LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOmlqdCxpc0xpZ2h0UHJvYmU6ITAsY29weTpmdW5jdGlvbih0KXtyZXR1cm4gR1V0LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLnNoLmNvcHkodC5zaCksdGhpc30sZnJvbUpTT046ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5PXQuaW50ZW5zaXR5LHRoaXMuc2guZnJvbUFycmF5KHQuc2gpLHRoaXN9LHRvSlNPTjpmdW5jdGlvbih0KXtjb25zdCBlPUdVdC5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyx0KTtyZXR1cm4gZS5vYmplY3Quc2g9dGhpcy5zaC50b0FycmF5KCksZX19KSxyanQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShkVXQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6cmp0LGxvYWQ6ZnVuY3Rpb24odCxlLG4saSl7Y29uc3Qgcj10aGlzLG89bmV3IGZVdChyLm1hbmFnZXIpO28uc2V0UGF0aChyLnBhdGgpLG8uc2V0UmVxdWVzdEhlYWRlcihyLnJlcXVlc3RIZWFkZXIpLG8uc2V0V2l0aENyZWRlbnRpYWxzKHIud2l0aENyZWRlbnRpYWxzKSxvLmxvYWQodCwoZnVuY3Rpb24obil7dHJ5e2Uoci5wYXJzZShKU09OLnBhcnNlKG4pKSl9Y2F0Y2goZSl7aT9pKGUpOmNvbnNvbGUuZXJyb3IoZSksci5tYW5hZ2VyLml0ZW1FcnJvcih0KX19KSxuLGkpfSxwYXJzZTpmdW5jdGlvbih0KXtjb25zdCBlPXRoaXMudGV4dHVyZXM7ZnVuY3Rpb24gbih0KXtyZXR1cm4gdm9pZCAwPT09ZVt0XSYmY29uc29sZS53YXJuKCJUSFJFRS5NYXRlcmlhbExvYWRlcjogVW5kZWZpbmVkIHRleHR1cmUiLHQpLGVbdF19Y29uc3QgaT1uZXcgWVZ0W3QudHlwZV07aWYodm9pZCAwIT09dC51dWlkJiYoaS51dWlkPXQudXVpZCksdm9pZCAwIT09dC5uYW1lJiYoaS5uYW1lPXQubmFtZSksdm9pZCAwIT09dC5jb2xvciYmdm9pZCAwIT09aS5jb2xvciYmaS5jb2xvci5zZXRIZXgodC5jb2xvciksdm9pZCAwIT09dC5yb3VnaG5lc3MmJihpLnJvdWdobmVzcz10LnJvdWdobmVzcyksdm9pZCAwIT09dC5tZXRhbG5lc3MmJihpLm1ldGFsbmVzcz10Lm1ldGFsbmVzcyksdm9pZCAwIT09dC5zaGVlbiYmKGkuc2hlZW49KG5ldyBwenQpLnNldEhleCh0LnNoZWVuKSksdm9pZCAwIT09dC5lbWlzc2l2ZSYmdm9pZCAwIT09aS5lbWlzc2l2ZSYmaS5lbWlzc2l2ZS5zZXRIZXgodC5lbWlzc2l2ZSksdm9pZCAwIT09dC5zcGVjdWxhciYmdm9pZCAwIT09aS5zcGVjdWxhciYmaS5zcGVjdWxhci5zZXRIZXgodC5zcGVjdWxhciksdm9pZCAwIT09dC5zaGluaW5lc3MmJihpLnNoaW5pbmVzcz10LnNoaW5pbmVzcyksdm9pZCAwIT09dC5jbGVhcmNvYXQmJihpLmNsZWFyY29hdD10LmNsZWFyY29hdCksdm9pZCAwIT09dC5jbGVhcmNvYXRSb3VnaG5lc3MmJihpLmNsZWFyY29hdFJvdWdobmVzcz10LmNsZWFyY29hdFJvdWdobmVzcyksdm9pZCAwIT09dC5mb2cmJihpLmZvZz10LmZvZyksdm9pZCAwIT09dC5mbGF0U2hhZGluZyYmKGkuZmxhdFNoYWRpbmc9dC5mbGF0U2hhZGluZyksdm9pZCAwIT09dC5ibGVuZGluZyYmKGkuYmxlbmRpbmc9dC5ibGVuZGluZyksdm9pZCAwIT09dC5jb21iaW5lJiYoaS5jb21iaW5lPXQuY29tYmluZSksdm9pZCAwIT09dC5zaWRlJiYoaS5zaWRlPXQuc2lkZSksdm9pZCAwIT09dC5vcGFjaXR5JiYoaS5vcGFjaXR5PXQub3BhY2l0eSksdm9pZCAwIT09dC50cmFuc3BhcmVudCYmKGkudHJhbnNwYXJlbnQ9dC50cmFuc3BhcmVudCksdm9pZCAwIT09dC5hbHBoYVRlc3QmJihpLmFscGhhVGVzdD10LmFscGhhVGVzdCksdm9pZCAwIT09dC5kZXB0aFRlc3QmJihpLmRlcHRoVGVzdD10LmRlcHRoVGVzdCksdm9pZCAwIT09dC5kZXB0aFdyaXRlJiYoaS5kZXB0aFdyaXRlPXQuZGVwdGhXcml0ZSksdm9pZCAwIT09dC5jb2xvcldyaXRlJiYoaS5jb2xvcldyaXRlPXQuY29sb3JXcml0ZSksdm9pZCAwIT09dC5zdGVuY2lsV3JpdGUmJihpLnN0ZW5jaWxXcml0ZT10LnN0ZW5jaWxXcml0ZSksdm9pZCAwIT09dC5zdGVuY2lsV3JpdGVNYXNrJiYoaS5zdGVuY2lsV3JpdGVNYXNrPXQuc3RlbmNpbFdyaXRlTWFzayksdm9pZCAwIT09dC5zdGVuY2lsRnVuYyYmKGkuc3RlbmNpbEZ1bmM9dC5zdGVuY2lsRnVuYyksdm9pZCAwIT09dC5zdGVuY2lsUmVmJiYoaS5zdGVuY2lsUmVmPXQuc3RlbmNpbFJlZiksdm9pZCAwIT09dC5zdGVuY2lsRnVuY01hc2smJihpLnN0ZW5jaWxGdW5jTWFzaz10LnN0ZW5jaWxGdW5jTWFzayksdm9pZCAwIT09dC5zdGVuY2lsRmFpbCYmKGkuc3RlbmNpbEZhaWw9dC5zdGVuY2lsRmFpbCksdm9pZCAwIT09dC5zdGVuY2lsWkZhaWwmJihpLnN0ZW5jaWxaRmFpbD10LnN0ZW5jaWxaRmFpbCksdm9pZCAwIT09dC5zdGVuY2lsWlBhc3MmJihpLnN0ZW5jaWxaUGFzcz10LnN0ZW5jaWxaUGFzcyksdm9pZCAwIT09dC53aXJlZnJhbWUmJihpLndpcmVmcmFtZT10LndpcmVmcmFtZSksdm9pZCAwIT09dC53aXJlZnJhbWVMaW5ld2lkdGgmJihpLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCksdm9pZCAwIT09dC53aXJlZnJhbWVMaW5lY2FwJiYoaS53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCksdm9pZCAwIT09dC53aXJlZnJhbWVMaW5lam9pbiYmKGkud2lyZWZyYW1lTGluZWpvaW49dC53aXJlZnJhbWVMaW5lam9pbiksdm9pZCAwIT09dC5yb3RhdGlvbiYmKGkucm90YXRpb249dC5yb3RhdGlvbiksMSE9PXQubGluZXdpZHRoJiYoaS5saW5ld2lkdGg9dC5saW5ld2lkdGgpLHZvaWQgMCE9PXQuZGFzaFNpemUmJihpLmRhc2hTaXplPXQuZGFzaFNpemUpLHZvaWQgMCE9PXQuZ2FwU2l6ZSYmKGkuZ2FwU2l6ZT10LmdhcFNpemUpLHZvaWQgMCE9PXQuc2NhbGUmJihpLnNjYWxlPXQuc2NhbGUpLHZvaWQgMCE9PXQucG9seWdvbk9mZnNldCYmKGkucG9seWdvbk9mZnNldD10LnBvbHlnb25PZmZzZXQpLHZvaWQgMCE9PXQucG9seWdvbk9mZnNldEZhY3RvciYmKGkucG9seWdvbk9mZnNldEZhY3Rvcj10LnBvbHlnb25PZmZzZXRGYWN0b3IpLHZvaWQgMCE9PXQucG9seWdvbk9mZnNldFVuaXRzJiYoaS5wb2x5Z29uT2Zmc2V0VW5pdHM9dC5wb2x5Z29uT2Zmc2V0VW5pdHMpLHZvaWQgMCE9PXQuc2tpbm5pbmcmJihpLnNraW5uaW5nPXQuc2tpbm5pbmcpLHZvaWQgMCE9PXQubW9ycGhUYXJnZXRzJiYoaS5tb3JwaFRhcmdldHM9dC5tb3JwaFRhcmdldHMpLHZvaWQgMCE9PXQubW9ycGhOb3JtYWxzJiYoaS5tb3JwaE5vcm1hbHM9dC5tb3JwaE5vcm1hbHMpLHZvaWQgMCE9PXQuZGl0aGVyaW5nJiYoaS5kaXRoZXJpbmc9dC5kaXRoZXJpbmcpLHZvaWQgMCE9PXQudmVydGV4VGFuZ2VudHMmJihpLnZlcnRleFRhbmdlbnRzPXQudmVydGV4VGFuZ2VudHMpLHZvaWQgMCE9PXQudmlzaWJsZSYmKGkudmlzaWJsZT10LnZpc2libGUpLHZvaWQgMCE9PXQudG9uZU1hcHBlZCYmKGkudG9uZU1hcHBlZD10LnRvbmVNYXBwZWQpLHZvaWQgMCE9PXQudXNlckRhdGEmJihpLnVzZXJEYXRhPXQudXNlckRhdGEpLHZvaWQgMCE9PXQudmVydGV4Q29sb3JzJiYoaS52ZXJ0ZXhDb2xvcnM9Im51bWJlciI9PXR5cGVvZiB0LnZlcnRleENvbG9ycz90LnZlcnRleENvbG9ycz4wOnQudmVydGV4Q29sb3JzKSx2b2lkIDAhPT10LnVuaWZvcm1zKWZvcihjb25zdCBlIGluIHQudW5pZm9ybXMpe2NvbnN0IHI9dC51bmlmb3Jtc1tlXTtzd2l0Y2goaS51bmlmb3Jtc1tlXT17fSxyLnR5cGUpe2Nhc2UidCI6aS51bmlmb3Jtc1tlXS52YWx1ZT1uKHIudmFsdWUpO2JyZWFrO2Nhc2UiYyI6aS51bmlmb3Jtc1tlXS52YWx1ZT0obmV3IHB6dCkuc2V0SGV4KHIudmFsdWUpO2JyZWFrO2Nhc2UidjIiOmkudW5pZm9ybXNbZV0udmFsdWU9KG5ldyB6T3QpLmZyb21BcnJheShyLnZhbHVlKTticmVhaztjYXNlInYzIjppLnVuaWZvcm1zW2VdLnZhbHVlPShuZXcgcU90KS5mcm9tQXJyYXkoci52YWx1ZSk7YnJlYWs7Y2FzZSJ2NCI6aS51bmlmb3Jtc1tlXS52YWx1ZT0obmV3IGpPdCkuZnJvbUFycmF5KHIudmFsdWUpO2JyZWFrO2Nhc2UibTMiOmkudW5pZm9ybXNbZV0udmFsdWU9KG5ldyBET3QpLmZyb21BcnJheShyLnZhbHVlKTticmVhaztjYXNlIm00IjppLnVuaWZvcm1zW2VdLnZhbHVlPShuZXcgYlJ0KS5mcm9tQXJyYXkoci52YWx1ZSk7YnJlYWs7ZGVmYXVsdDppLnVuaWZvcm1zW2VdLnZhbHVlPXIudmFsdWV9fWlmKHZvaWQgMCE9PXQuZGVmaW5lcyYmKGkuZGVmaW5lcz10LmRlZmluZXMpLHZvaWQgMCE9PXQudmVydGV4U2hhZGVyJiYoaS52ZXJ0ZXhTaGFkZXI9dC52ZXJ0ZXhTaGFkZXIpLHZvaWQgMCE9PXQuZnJhZ21lbnRTaGFkZXImJihpLmZyYWdtZW50U2hhZGVyPXQuZnJhZ21lbnRTaGFkZXIpLHZvaWQgMCE9PXQuZXh0ZW5zaW9ucylmb3IoY29uc3QgZSBpbiB0LmV4dGVuc2lvbnMpaS5leHRlbnNpb25zW2VdPXQuZXh0ZW5zaW9uc1tlXTtpZih2b2lkIDAhPT10LnNoYWRpbmcmJihpLmZsYXRTaGFkaW5nPTE9PT10LnNoYWRpbmcpLHZvaWQgMCE9PXQuc2l6ZSYmKGkuc2l6ZT10LnNpemUpLHZvaWQgMCE9PXQuc2l6ZUF0dGVudWF0aW9uJiYoaS5zaXplQXR0ZW51YXRpb249dC5zaXplQXR0ZW51YXRpb24pLHZvaWQgMCE9PXQubWFwJiYoaS5tYXA9bih0Lm1hcCkpLHZvaWQgMCE9PXQubWF0Y2FwJiYoaS5tYXRjYXA9bih0Lm1hdGNhcCkpLHZvaWQgMCE9PXQuYWxwaGFNYXAmJihpLmFscGhhTWFwPW4odC5hbHBoYU1hcCkpLHZvaWQgMCE9PXQuYnVtcE1hcCYmKGkuYnVtcE1hcD1uKHQuYnVtcE1hcCkpLHZvaWQgMCE9PXQuYnVtcFNjYWxlJiYoaS5idW1wU2NhbGU9dC5idW1wU2NhbGUpLHZvaWQgMCE9PXQubm9ybWFsTWFwJiYoaS5ub3JtYWxNYXA9bih0Lm5vcm1hbE1hcCkpLHZvaWQgMCE9PXQubm9ybWFsTWFwVHlwZSYmKGkubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUpLHZvaWQgMCE9PXQubm9ybWFsU2NhbGUpe2xldCBlPXQubm9ybWFsU2NhbGU7ITE9PT1BcnJheS5pc0FycmF5KGUpJiYoZT1bZSxlXSksaS5ub3JtYWxTY2FsZT0obmV3IHpPdCkuZnJvbUFycmF5KGUpfXJldHVybiB2b2lkIDAhPT10LmRpc3BsYWNlbWVudE1hcCYmKGkuZGlzcGxhY2VtZW50TWFwPW4odC5kaXNwbGFjZW1lbnRNYXApKSx2b2lkIDAhPT10LmRpc3BsYWNlbWVudFNjYWxlJiYoaS5kaXNwbGFjZW1lbnRTY2FsZT10LmRpc3BsYWNlbWVudFNjYWxlKSx2b2lkIDAhPT10LmRpc3BsYWNlbWVudEJpYXMmJihpLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzKSx2b2lkIDAhPT10LnJvdWdobmVzc01hcCYmKGkucm91Z2huZXNzTWFwPW4odC5yb3VnaG5lc3NNYXApKSx2b2lkIDAhPT10Lm1ldGFsbmVzc01hcCYmKGkubWV0YWxuZXNzTWFwPW4odC5tZXRhbG5lc3NNYXApKSx2b2lkIDAhPT10LmVtaXNzaXZlTWFwJiYoaS5lbWlzc2l2ZU1hcD1uKHQuZW1pc3NpdmVNYXApKSx2b2lkIDAhPT10LmVtaXNzaXZlSW50ZW5zaXR5JiYoaS5lbWlzc2l2ZUludGVuc2l0eT10LmVtaXNzaXZlSW50ZW5zaXR5KSx2b2lkIDAhPT10LnNwZWN1bGFyTWFwJiYoaS5zcGVjdWxhck1hcD1uKHQuc3BlY3VsYXJNYXApKSx2b2lkIDAhPT10LmVudk1hcCYmKGkuZW52TWFwPW4odC5lbnZNYXApKSx2b2lkIDAhPT10LmVudk1hcEludGVuc2l0eSYmKGkuZW52TWFwSW50ZW5zaXR5PXQuZW52TWFwSW50ZW5zaXR5KSx2b2lkIDAhPT10LnJlZmxlY3Rpdml0eSYmKGkucmVmbGVjdGl2aXR5PXQucmVmbGVjdGl2aXR5KSx2b2lkIDAhPT10LnJlZnJhY3Rpb25SYXRpbyYmKGkucmVmcmFjdGlvblJhdGlvPXQucmVmcmFjdGlvblJhdGlvKSx2b2lkIDAhPT10LmxpZ2h0TWFwJiYoaS5saWdodE1hcD1uKHQubGlnaHRNYXApKSx2b2lkIDAhPT10LmxpZ2h0TWFwSW50ZW5zaXR5JiYoaS5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5KSx2b2lkIDAhPT10LmFvTWFwJiYoaS5hb01hcD1uKHQuYW9NYXApKSx2b2lkIDAhPT10LmFvTWFwSW50ZW5zaXR5JiYoaS5hb01hcEludGVuc2l0eT10LmFvTWFwSW50ZW5zaXR5KSx2b2lkIDAhPT10LmdyYWRpZW50TWFwJiYoaS5ncmFkaWVudE1hcD1uKHQuZ3JhZGllbnRNYXApKSx2b2lkIDAhPT10LmNsZWFyY29hdE1hcCYmKGkuY2xlYXJjb2F0TWFwPW4odC5jbGVhcmNvYXRNYXApKSx2b2lkIDAhPT10LmNsZWFyY29hdFJvdWdobmVzc01hcCYmKGkuY2xlYXJjb2F0Um91Z2huZXNzTWFwPW4odC5jbGVhcmNvYXRSb3VnaG5lc3NNYXApKSx2b2lkIDAhPT10LmNsZWFyY29hdE5vcm1hbE1hcCYmKGkuY2xlYXJjb2F0Tm9ybWFsTWFwPW4odC5jbGVhcmNvYXROb3JtYWxNYXApKSx2b2lkIDAhPT10LmNsZWFyY29hdE5vcm1hbFNjYWxlJiYoaS5jbGVhcmNvYXROb3JtYWxTY2FsZT0obmV3IHpPdCkuZnJvbUFycmF5KHQuY2xlYXJjb2F0Tm9ybWFsU2NhbGUpKSx2b2lkIDAhPT10LnRyYW5zbWlzc2lvbiYmKGkudHJhbnNtaXNzaW9uPXQudHJhbnNtaXNzaW9uKSx2b2lkIDAhPT10LnRyYW5zbWlzc2lvbk1hcCYmKGkudHJhbnNtaXNzaW9uTWFwPW4odC50cmFuc21pc3Npb25NYXApKSxpfSxzZXRUZXh0dXJlczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50ZXh0dXJlcz10LHRoaXN9fSk7Y29uc3Qgb2p0PXtkZWNvZGVUZXh0OmZ1bmN0aW9uKHQpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgVGV4dERlY29kZXIpcmV0dXJuKG5ldyBUZXh0RGVjb2RlcikuZGVjb2RlKHQpO2xldCBlPSIiO2ZvcihsZXQgbj0wLGk9dC5sZW5ndGg7bjxpO24rKyllKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHRbbl0pO3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZShlKSl9Y2F0Y2godCl7cmV0dXJuIGV9fSxleHRyYWN0VXJsQmFzZTpmdW5jdGlvbih0KXtjb25zdCBlPXQubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4tMT09PWU/Ii4vIjp0LnN1YnN0cigwLGUrMSl9fTtmdW5jdGlvbiBhanQoKXtWenQuY2FsbCh0aGlzKSx0aGlzLnR5cGU9Ikluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5Iix0aGlzLmluc3RhbmNlQ291bnQ9MS8wfWZ1bmN0aW9uIHNqdCh0LGUsbixpKXsibnVtYmVyIj09dHlwZW9mIG4mJihpPW4sbj0hMSxjb25zb2xlLmVycm9yKCJUSFJFRS5JbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGU6IFRoZSBjb25zdHJ1Y3RvciBub3cgZXhwZWN0cyBub3JtYWxpemVkIGFzIHRoZSB0aGlyZCBhcmd1bWVudC4iKSksYnp0LmNhbGwodGhpcyx0LGUsbiksdGhpcy5tZXNoUGVyQXR0cmlidXRlPWl8fDF9ZnVuY3Rpb24gbGp0KHQpe2RVdC5jYWxsKHRoaXMsdCl9YWp0LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoVnp0LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOmFqdCxpc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5OiEwLGNvcHk6ZnVuY3Rpb24odCl7cmV0dXJuIFZ6dC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy5pbnN0YW5jZUNvdW50PXQuaW5zdGFuY2VDb3VudCx0aGlzfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX0sdG9KU09OOmZ1bmN0aW9uKCl7Y29uc3QgdD1WenQucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMpO3JldHVybiB0Lmluc3RhbmNlQ291bnQ9dGhpcy5pbnN0YW5jZUNvdW50LHQuaXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeT0hMCx0fX0pLHNqdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKGJ6dC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpzanQsaXNJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGU6ITAsY29weTpmdW5jdGlvbih0KXtyZXR1cm4gYnp0LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLm1lc2hQZXJBdHRyaWJ1dGU9dC5tZXNoUGVyQXR0cmlidXRlLHRoaXN9LHRvSlNPTjpmdW5jdGlvbigpe2NvbnN0IHQ9Ynp0LnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzKTtyZXR1cm4gdC5tZXNoUGVyQXR0cmlidXRlPXRoaXMubWVzaFBlckF0dHJpYnV0ZSx0LmlzSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlPSEwLHR9fSksbGp0LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoZFV0LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOmxqdCxsb2FkOmZ1bmN0aW9uKHQsZSxuLGkpe2NvbnN0IHI9dGhpcyxvPW5ldyBmVXQoci5tYW5hZ2VyKTtvLnNldFBhdGgoci5wYXRoKSxvLnNldFJlcXVlc3RIZWFkZXIoci5yZXF1ZXN0SGVhZGVyKSxvLnNldFdpdGhDcmVkZW50aWFscyhyLndpdGhDcmVkZW50aWFscyksby5sb2FkKHQsKGZ1bmN0aW9uKG4pe3RyeXtlKHIucGFyc2UoSlNPTi5wYXJzZShuKSkpfWNhdGNoKGUpe2k/aShlKTpjb25zb2xlLmVycm9yKGUpLHIubWFuYWdlci5pdGVtRXJyb3IodCl9fSksbixpKX0scGFyc2U6ZnVuY3Rpb24odCl7Y29uc3QgZT17fSxuPXt9O2Z1bmN0aW9uIGkodCxpKXtpZih2b2lkIDAhPT1lW2ldKXJldHVybiBlW2ldO2NvbnN0IHI9dC5pbnRlcmxlYXZlZEJ1ZmZlcnNbaV0sbz0oZnVuY3Rpb24gYSh0LGUpe2lmKHZvaWQgMCE9PW5bZV0pcmV0dXJuIG5bZV07Y29uc3QgaT1uZXcgVWludDMyQXJyYXkodC5hcnJheUJ1ZmZlcnNbZV0pLmJ1ZmZlcjtyZXR1cm4gbltlXT1pLGl9KSh0LHIuYnVmZmVyKSxzPW5ldyBJSHQoSXp0KHIudHlwZSxvKSxyLnN0cmlkZSk7cmV0dXJuIHMudXVpZD1yLnV1aWQsZVtpXT1zLHN9Y29uc3Qgcj10LmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnk/bmV3IGFqdDpuZXcgVnp0LG89dC5kYXRhLmluZGV4O2lmKHZvaWQgMCE9PW8pe2NvbnN0IHQ9SXp0KG8udHlwZSxvLmFycmF5KTtyLnNldEluZGV4KG5ldyBienQodCwxKSl9Y29uc3QgYT10LmRhdGEuYXR0cmlidXRlcztmb3IoY29uc3QgZSBpbiBhKXtjb25zdCBuPWFbZV07bGV0IG87aWYobi5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlKW89bmV3IFJIdChpKHQuZGF0YSxuLmRhdGEpLG4uaXRlbVNpemUsbi5vZmZzZXQsbi5ub3JtYWxpemVkKTtlbHNle2NvbnN0IHQ9SXp0KG4udHlwZSxuLmFycmF5KTtvPW5ldyhuLmlzSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlP3NqdDpienQpKHQsbi5pdGVtU2l6ZSxuLm5vcm1hbGl6ZWQpfXZvaWQgMCE9PW4ubmFtZSYmKG8ubmFtZT1uLm5hbWUpLHIuc2V0QXR0cmlidXRlKGUsbyl9Y29uc3Qgcz10LmRhdGEubW9ycGhBdHRyaWJ1dGVzO2lmKHMpZm9yKGNvbnN0IGUgaW4gcyl7Y29uc3Qgbj1zW2VdLG89W107Zm9yKGxldCBlPTAscj1uLmxlbmd0aDtlPHI7ZSsrKXtjb25zdCByPW5bZV07bGV0IGE7YT1yLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU/bmV3IFJIdChpKHQuZGF0YSxyLmRhdGEpLHIuaXRlbVNpemUsci5vZmZzZXQsci5ub3JtYWxpemVkKTpuZXcgYnp0KEl6dChyLnR5cGUsci5hcnJheSksci5pdGVtU2l6ZSxyLm5vcm1hbGl6ZWQpLHZvaWQgMCE9PXIubmFtZSYmKGEubmFtZT1yLm5hbWUpLG8ucHVzaChhKX1yLm1vcnBoQXR0cmlidXRlc1tlXT1vfXQuZGF0YS5tb3JwaFRhcmdldHNSZWxhdGl2ZSYmKHIubW9ycGhUYXJnZXRzUmVsYXRpdmU9ITApO2NvbnN0IGw9dC5kYXRhLmdyb3Vwc3x8dC5kYXRhLmRyYXdjYWxsc3x8dC5kYXRhLm9mZnNldHM7aWYodm9pZCAwIT09bClmb3IobGV0IHQ9MCxlPWwubGVuZ3RoO3QhPT1lOysrdCl7Y29uc3QgZT1sW3RdO3IuYWRkR3JvdXAoZS5zdGFydCxlLmNvdW50LGUubWF0ZXJpYWxJbmRleCl9Y29uc3QgYz10LmRhdGEuYm91bmRpbmdTcGhlcmU7aWYodm9pZCAwIT09Yyl7Y29uc3QgdD1uZXcgcU90O3ZvaWQgMCE9PWMuY2VudGVyJiZ0LmZyb21BcnJheShjLmNlbnRlciksci5ib3VuZGluZ1NwaGVyZT1uZXcgaFJ0KHQsYy5yYWRpdXMpfXJldHVybiB0Lm5hbWUmJihyLm5hbWU9dC5uYW1lKSx0LnVzZXJEYXRhJiYoci51c2VyRGF0YT10LnVzZXJEYXRhKSxyfX0pO2NvbnN0IGNqdD17VVZNYXBwaW5nOlBJdCxDdWJlUmVmbGVjdGlvbk1hcHBpbmc6Tkl0LEN1YmVSZWZyYWN0aW9uTWFwcGluZzpJSXQsRXF1aXJlY3Rhbmd1bGFyUmVmbGVjdGlvbk1hcHBpbmc6T0l0LEVxdWlyZWN0YW5ndWxhclJlZnJhY3Rpb25NYXBwaW5nOlJJdCxDdWJlVVZSZWZsZWN0aW9uTWFwcGluZzp6SXQsQ3ViZVVWUmVmcmFjdGlvbk1hcHBpbmc6REl0fSx1anQ9e1JlcGVhdFdyYXBwaW5nOkJJdCxDbGFtcFRvRWRnZVdyYXBwaW5nOkhJdCxNaXJyb3JlZFJlcGVhdFdyYXBwaW5nOkZJdH0saGp0PXtOZWFyZXN0RmlsdGVyOlZJdCxOZWFyZXN0TWlwbWFwTmVhcmVzdEZpbHRlcjpVSXQsTmVhcmVzdE1pcG1hcExpbmVhckZpbHRlcjpqSXQsTGluZWFyRmlsdGVyOkdJdCxMaW5lYXJNaXBtYXBOZWFyZXN0RmlsdGVyOldJdCxMaW5lYXJNaXBtYXBMaW5lYXJGaWx0ZXI6cUl0fTtmdW5jdGlvbiBkanQodCl7InVuZGVmaW5lZCI9PXR5cGVvZiBjcmVhdGVJbWFnZUJpdG1hcCYmY29uc29sZS53YXJuKCJUSFJFRS5JbWFnZUJpdG1hcExvYWRlcjogY3JlYXRlSW1hZ2VCaXRtYXAoKSBub3Qgc3VwcG9ydGVkLiIpLCJ1bmRlZmluZWQiPT10eXBlb2YgZmV0Y2gmJmNvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VCaXRtYXBMb2FkZXI6IGZldGNoKCkgbm90IHN1cHBvcnRlZC4iKSxkVXQuY2FsbCh0aGlzLHQpLHRoaXMub3B0aW9ucz17cHJlbXVsdGlwbHlBbHBoYToibm9uZSJ9fWZ1bmN0aW9uIHBqdCgpe3RoaXMudHlwZT0iU2hhcGVQYXRoIix0aGlzLmNvbG9yPW5ldyBwenQsdGhpcy5zdWJQYXRocz1bXSx0aGlzLmN1cnJlbnRQYXRoPW51bGx9ZGp0LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoZFV0LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOmRqdCxpc0ltYWdlQml0bWFwTG9hZGVyOiEwLHNldE9wdGlvbnM6ZnVuY3Rpb24gdChlKXtyZXR1cm4gdGhpcy5vcHRpb25zPWUsdGhpc30sbG9hZDpmdW5jdGlvbih0LGUsbixpKXt2b2lkIDA9PT10JiYodD0iIiksdm9pZCAwIT09dGhpcy5wYXRoJiYodD10aGlzLnBhdGgrdCksdD10aGlzLm1hbmFnZXIucmVzb2x2ZVVSTCh0KTtjb25zdCByPXRoaXMsbz1jVXQuZ2V0KHQpO2lmKHZvaWQgMCE9PW8pcmV0dXJuIHIubWFuYWdlci5pdGVtU3RhcnQodCksc2V0VGltZW91dCgoZnVuY3Rpb24oKXtlJiZlKG8pLHIubWFuYWdlci5pdGVtRW5kKHQpfSksMCksbztjb25zdCBhPXt9O2EuY3JlZGVudGlhbHM9ImFub255bW91cyI9PT10aGlzLmNyb3NzT3JpZ2luPyJzYW1lLW9yaWdpbiI6ImluY2x1ZGUiLGZldGNoKHQsYSkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIHQuYmxvYigpfSkpLnRoZW4oKGZ1bmN0aW9uKHQpe3JldHVybiBjcmVhdGVJbWFnZUJpdG1hcCh0LHIub3B0aW9ucyl9KSkudGhlbigoZnVuY3Rpb24obil7Y1V0LmFkZCh0LG4pLGUmJmUobiksci5tYW5hZ2VyLml0ZW1FbmQodCl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe2kmJmkoZSksci5tYW5hZ2VyLml0ZW1FcnJvcih0KSxyLm1hbmFnZXIuaXRlbUVuZCh0KX0pKSxyLm1hbmFnZXIuaXRlbVN0YXJ0KHQpfX0pLE9iamVjdC5hc3NpZ24ocGp0LnByb3RvdHlwZSx7bW92ZVRvOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuY3VycmVudFBhdGg9bmV3IFVVdCx0aGlzLnN1YlBhdGhzLnB1c2godGhpcy5jdXJyZW50UGF0aCksdGhpcy5jdXJyZW50UGF0aC5tb3ZlVG8odCxlKSx0aGlzfSxsaW5lVG86ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5jdXJyZW50UGF0aC5saW5lVG8odCxlKSx0aGlzfSxxdWFkcmF0aWNDdXJ2ZVRvOmZ1bmN0aW9uKHQsZSxuLGkpe3JldHVybiB0aGlzLmN1cnJlbnRQYXRoLnF1YWRyYXRpY0N1cnZlVG8odCxlLG4saSksdGhpc30sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbih0LGUsbixpLHIsbyl7cmV0dXJuIHRoaXMuY3VycmVudFBhdGguYmV6aWVyQ3VydmVUbyh0LGUsbixpLHIsbyksdGhpc30sc3BsaW5lVGhydTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jdXJyZW50UGF0aC5zcGxpbmVUaHJ1KHQpLHRoaXN9LHRvU2hhcGVzOmZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gbih0KXtjb25zdCBlPVtdO2ZvcihsZXQgbj0wLGk9dC5sZW5ndGg7bjxpO24rKyl7Y29uc3QgaT10W25dLHI9bmV3IGpVdDtyLmN1cnZlcz1pLmN1cnZlcyxlLnB1c2gocil9cmV0dXJuIGV9ZnVuY3Rpb24gaSh0LGUpe2NvbnN0IG49ZS5sZW5ndGg7bGV0IGk9ITE7Zm9yKGxldCByPW4tMSxvPTA7bzxuO3I9bysrKXtsZXQgbj1lW3JdLGE9ZVtvXSxzPWEueC1uLngsbD1hLnktbi55O2lmKE1hdGguYWJzKGwpPk51bWJlci5FUFNJTE9OKXtpZihsPDAmJihuPWVbb10scz0tcyxhPWVbcl0sbD0tbCksdC55PG4ueXx8dC55PmEueSljb250aW51ZTtpZih0Lnk9PT1uLnkpe2lmKHQueD09PW4ueClyZXR1cm4hMH1lbHNle2NvbnN0IGU9bCoodC54LW4ueCktcyoodC55LW4ueSk7aWYoMD09PWUpcmV0dXJuITA7aWYoZTwwKWNvbnRpbnVlO2k9IWl9fWVsc2V7aWYodC55IT09bi55KWNvbnRpbnVlO2lmKGEueDw9dC54JiZ0Lng8PW4ueHx8bi54PD10LngmJnQueDw9YS54KXJldHVybiEwfX1yZXR1cm4gaX1jb25zdCByPXlWdC5pc0Nsb2NrV2lzZSxvPXRoaXMuc3ViUGF0aHM7aWYoMD09PW8ubGVuZ3RoKXJldHVybltdO2lmKCEwPT09ZSlyZXR1cm4gbihvKTtsZXQgYSxzLGw7Y29uc3QgYz1bXTtpZigxPT09by5sZW5ndGgpcmV0dXJuIHM9b1swXSxsPW5ldyBqVXQsbC5jdXJ2ZXM9cy5jdXJ2ZXMsYy5wdXNoKGwpLGM7bGV0IHU9IXIob1swXS5nZXRQb2ludHMoKSk7dT10PyF1OnU7Y29uc3QgaD1bXSxkPVtdO2xldCBwLGYsbT1bXSxnPTA7ZFtnXT12b2lkIDAsbVtnXT1bXTtmb3IobGV0IGU9MCxuPW8ubGVuZ3RoO2U8bjtlKyspcz1vW2VdLHA9cy5nZXRQb2ludHMoKSxhPXIocCksYT10PyFhOmEsYT8oIXUmJmRbZ10mJmcrKyxkW2ddPXtzOm5ldyBqVXQscDpwfSxkW2ddLnMuY3VydmVzPXMuY3VydmVzLHUmJmcrKyxtW2ddPVtdKTptW2ddLnB1c2goe2g6cyxwOnBbMF19KTtpZighZFswXSlyZXR1cm4gbihvKTtpZihkLmxlbmd0aD4xKXtsZXQgdD0hMTtjb25zdCBlPVtdO2ZvcihsZXQgdD0wLGU9ZC5sZW5ndGg7dDxlO3QrKyloW3RdPVtdO2ZvcihsZXQgbj0wLHI9ZC5sZW5ndGg7bjxyO24rKyl7Y29uc3Qgcj1tW25dO2ZvcihsZXQgbz0wO288ci5sZW5ndGg7bysrKXtjb25zdCBhPXJbb107bGV0IHM9ITA7Zm9yKGxldCByPTA7cjxkLmxlbmd0aDtyKyspaShhLnAsZFtyXS5wKSYmKG4hPT1yJiZlLnB1c2goe2Zyb21zOm4sdG9zOnIsaG9sZTpvfSkscz8ocz0hMSxoW3JdLnB1c2goYSkpOnQ9ITApO3MmJmhbbl0ucHVzaChhKX19ZS5sZW5ndGg+MCYmKHR8fChtPWgpKX1mb3IobGV0IHQ9MCxlPWQubGVuZ3RoO3Q8ZTt0Kyspe2w9ZFt0XS5zLGMucHVzaChsKSxmPW1bdF07Zm9yKGxldCB0PTAsZT1mLmxlbmd0aDt0PGU7dCsrKWwuaG9sZXMucHVzaChmW3RdLmgpfXJldHVybiBjfX0pO2NsYXNzIGZqdHtjb25zdHJ1Y3Rvcih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaXNGb250Iix7dmFsdWU6ITB9KSx0aGlzLnR5cGU9IkZvbnQiLHRoaXMuZGF0YT10fWdlbmVyYXRlU2hhcGVzKHQsZT0xMDApe2NvbnN0IG49W10saT0oZnVuY3Rpb24gcih0LGUsbil7Y29uc3QgaT1BcnJheS5mcm9tP0FycmF5LmZyb20odCk6U3RyaW5nKHQpLnNwbGl0KCIiKSxyPWUvbi5yZXNvbHV0aW9uLG89KG4uYm91bmRpbmdCb3gueU1heC1uLmJvdW5kaW5nQm94LnlNaW4rbi51bmRlcmxpbmVUaGlja25lc3MpKnIsYT1bXTtsZXQgcz0wLGw9MDtmb3IobGV0IHQ9MDt0PGkubGVuZ3RoO3QrKyl7Y29uc3QgZT1pW3RdO2lmKCJcbiI9PT1lKXM9MCxsLT1vO2Vsc2V7Y29uc3QgdD1tanQoZSxyLHMsbCxuKTtzKz10Lm9mZnNldFgsYS5wdXNoKHQucGF0aCl9fXJldHVybiBhfSkodCxlLHRoaXMuZGF0YSk7Zm9yKGxldCB0PTAsZT1pLmxlbmd0aDt0PGU7dCsrKUFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KG4saVt0XS50b1NoYXBlcygpKTtyZXR1cm4gbn19ZnVuY3Rpb24gbWp0KHQsZSxuLGkscil7Y29uc3Qgbz1yLmdseXBoc1t0XXx8ci5nbHlwaHNbIj8iXTtpZighbylyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCdUSFJFRS5Gb250OiBjaGFyYWN0ZXIgIicrdCsnIiBkb2VzIG5vdCBleGlzdHMgaW4gZm9udCBmYW1pbHkgJytyLmZhbWlseU5hbWUrIi4iKTtjb25zdCBhPW5ldyBwanQ7bGV0IHMsbCxjLHUsaCxkLHAsZjtpZihvLm8pe2NvbnN0IHQ9by5fY2FjaGVkT3V0bGluZXx8KG8uX2NhY2hlZE91dGxpbmU9by5vLnNwbGl0KCIgIikpO2ZvcihsZXQgcj0wLG89dC5sZW5ndGg7cjxvOylzd2l0Y2godFtyKytdKXtjYXNlIm0iOnM9dFtyKytdKmUrbixsPXRbcisrXSplK2ksYS5tb3ZlVG8ocyxsKTticmVhaztjYXNlImwiOnM9dFtyKytdKmUrbixsPXRbcisrXSplK2ksYS5saW5lVG8ocyxsKTticmVhaztjYXNlInEiOmM9dFtyKytdKmUrbix1PXRbcisrXSplK2ksaD10W3IrK10qZStuLGQ9dFtyKytdKmUraSxhLnF1YWRyYXRpY0N1cnZlVG8oaCxkLGMsdSk7YnJlYWs7Y2FzZSJiIjpjPXRbcisrXSplK24sdT10W3IrK10qZStpLGg9dFtyKytdKmUrbixkPXRbcisrXSplK2kscD10W3IrK10qZStuLGY9dFtyKytdKmUraSxhLmJlemllckN1cnZlVG8oaCxkLHAsZixjLHUpfX1yZXR1cm57b2Zmc2V0WDpvLmhhKmUscGF0aDphfX1mdW5jdGlvbiBnanQodCl7ZFV0LmNhbGwodGhpcyx0KX1sZXQgX2p0O2dqdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKGRVdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpnanQsbG9hZDpmdW5jdGlvbih0LGUsbixpKXtjb25zdCByPXRoaXMsbz1uZXcgZlV0KHRoaXMubWFuYWdlcik7by5zZXRQYXRoKHRoaXMucGF0aCksby5zZXRSZXF1ZXN0SGVhZGVyKHRoaXMucmVxdWVzdEhlYWRlciksby5zZXRXaXRoQ3JlZGVudGlhbHMoci53aXRoQ3JlZGVudGlhbHMpLG8ubG9hZCh0LChmdW5jdGlvbih0KXtsZXQgbjt0cnl7bj1KU09OLnBhcnNlKHQpfWNhdGNoKGUpe2NvbnNvbGUud2FybigiVEhSRUUuRm9udExvYWRlcjogdHlwZWZhY2UuanMgc3VwcG9ydCBpcyBiZWluZyBkZXByZWNhdGVkLiBVc2UgdHlwZWZhY2UuanNvbiBpbnN0ZWFkLiIpLG49SlNPTi5wYXJzZSh0LnN1YnN0cmluZyg2NSx0Lmxlbmd0aC0yKSl9Y29uc3QgaT1yLnBhcnNlKG4pO2UmJmUoaSl9KSxuLGkpfSxwYXJzZTpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGZqdCh0KX19KTtjb25zdCB5anQ9e2dldENvbnRleHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09X2p0JiYoX2p0PW5ldyh3aW5kb3cuQXVkaW9Db250ZXh0fHx3aW5kb3cud2Via2l0QXVkaW9Db250ZXh0KSksX2p0fSxzZXRDb250ZXh0OmZ1bmN0aW9uKHQpe19qdD10fX07ZnVuY3Rpb24gdmp0KHQpe2RVdC5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gYmp0KHQsZSxuKXtpanQuY2FsbCh0aGlzLHZvaWQgMCxuKTtjb25zdCBpPShuZXcgcHp0KS5zZXQodCkscj0obmV3IHB6dCkuc2V0KGUpLG89bmV3IHFPdChpLnIsaS5nLGkuYiksYT1uZXcgcU90KHIucixyLmcsci5iKSxzPU1hdGguc3FydChNYXRoLlBJKSxsPXMqTWF0aC5zcXJ0KC43NSk7dGhpcy5zaC5jb2VmZmljaWVudHNbMF0uY29weShvKS5hZGQoYSkubXVsdGlwbHlTY2FsYXIocyksdGhpcy5zaC5jb2VmZmljaWVudHNbMV0uY29weShvKS5zdWIoYSkubXVsdGlwbHlTY2FsYXIobCl9ZnVuY3Rpb24geGp0KHQsZSl7aWp0LmNhbGwodGhpcyx2b2lkIDAsZSk7Y29uc3Qgbj0obmV3IHB6dCkuc2V0KHQpO3RoaXMuc2guY29lZmZpY2llbnRzWzBdLnNldChuLnIsbi5nLG4uYikubXVsdGlwbHlTY2FsYXIoMipNYXRoLnNxcnQoTWF0aC5QSSkpfXZqdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKGRVdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3Rvcjp2anQsbG9hZDpmdW5jdGlvbih0LGUsbixpKXtjb25zdCByPXRoaXMsbz1uZXcgZlV0KHIubWFuYWdlcik7by5zZXRSZXNwb25zZVR5cGUoImFycmF5YnVmZmVyIiksby5zZXRQYXRoKHIucGF0aCksby5zZXRSZXF1ZXN0SGVhZGVyKHIucmVxdWVzdEhlYWRlciksby5zZXRXaXRoQ3JlZGVudGlhbHMoci53aXRoQ3JlZGVudGlhbHMpLG8ubG9hZCh0LChmdW5jdGlvbihuKXt0cnl7Y29uc3QgdD1uLnNsaWNlKDApO3lqdC5nZXRDb250ZXh0KCkuZGVjb2RlQXVkaW9EYXRhKHQsKGZ1bmN0aW9uKHQpe2UodCl9KSl9Y2F0Y2goZSl7aT9pKGUpOmNvbnNvbGUuZXJyb3IoZSksci5tYW5hZ2VyLml0ZW1FcnJvcih0KX19KSxuLGkpfX0pLGJqdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKGlqdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpianQsaXNIZW1pc3BoZXJlTGlnaHRQcm9iZTohMCxjb3B5OmZ1bmN0aW9uKHQpe3JldHVybiBpanQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXN9LHRvSlNPTjpmdW5jdGlvbih0KXtyZXR1cm4gaWp0LnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzLHQpfX0pLHhqdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKGlqdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3Rvcjp4anQsaXNBbWJpZW50TGlnaHRQcm9iZTohMCxjb3B5OmZ1bmN0aW9uKHQpe3JldHVybiBpanQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXN9LHRvSlNPTjpmdW5jdGlvbih0KXtyZXR1cm4gaWp0LnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzLHQpfX0pO2NvbnN0IHdqdD1uZXcgYlJ0LFNqdD1uZXcgYlJ0O2Z1bmN0aW9uIE1qdCgpe3RoaXMudHlwZT0iU3RlcmVvQ2FtZXJhIix0aGlzLmFzcGVjdD0xLHRoaXMuZXllU2VwPS4wNjQsdGhpcy5jYW1lcmFMPW5ldyBwRHQsdGhpcy5jYW1lcmFMLmxheWVycy5lbmFibGUoMSksdGhpcy5jYW1lcmFMLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5jYW1lcmFSPW5ldyBwRHQsdGhpcy5jYW1lcmFSLmxheWVycy5lbmFibGUoMiksdGhpcy5jYW1lcmFSLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5fY2FjaGU9e2ZvY3VzOm51bGwsZm92Om51bGwsYXNwZWN0Om51bGwsbmVhcjpudWxsLGZhcjpudWxsLHpvb206bnVsbCxleWVTZXA6bnVsbH19T2JqZWN0LmFzc2lnbihNanQucHJvdG90eXBlLHt1cGRhdGU6ZnVuY3Rpb24odCl7Y29uc3QgZT10aGlzLl9jYWNoZTtpZihlLmZvY3VzIT09dC5mb2N1c3x8ZS5mb3YhPT10LmZvdnx8ZS5hc3BlY3QhPT10LmFzcGVjdCp0aGlzLmFzcGVjdHx8ZS5uZWFyIT09dC5uZWFyfHxlLmZhciE9PXQuZmFyfHxlLnpvb20hPT10Lnpvb218fGUuZXllU2VwIT09dGhpcy5leWVTZXApe2UuZm9jdXM9dC5mb2N1cyxlLmZvdj10LmZvdixlLmFzcGVjdD10LmFzcGVjdCp0aGlzLmFzcGVjdCxlLm5lYXI9dC5uZWFyLGUuZmFyPXQuZmFyLGUuem9vbT10Lnpvb20sZS5leWVTZXA9dGhpcy5leWVTZXA7Y29uc3Qgbj10LnByb2plY3Rpb25NYXRyaXguY2xvbmUoKSxpPWUuZXllU2VwLzIscj1pKmUubmVhci9lLmZvY3VzLG89ZS5uZWFyKk1hdGgudGFuKFJPdC5ERUcyUkFEKmUuZm92Ki41KS9lLnpvb207bGV0IGEscztTanQuZWxlbWVudHNbMTJdPS1pLHdqdC5lbGVtZW50c1sxMl09aSxhPS1vKmUuYXNwZWN0K3Iscz1vKmUuYXNwZWN0K3Isbi5lbGVtZW50c1swXT0yKmUubmVhci8ocy1hKSxuLmVsZW1lbnRzWzhdPShzK2EpLyhzLWEpLHRoaXMuY2FtZXJhTC5wcm9qZWN0aW9uTWF0cml4LmNvcHkobiksYT0tbyplLmFzcGVjdC1yLHM9byplLmFzcGVjdC1yLG4uZWxlbWVudHNbMF09MiplLm5lYXIvKHMtYSksbi5lbGVtZW50c1s4XT0ocythKS8ocy1hKSx0aGlzLmNhbWVyYVIucHJvamVjdGlvbk1hdHJpeC5jb3B5KG4pfXRoaXMuY2FtZXJhTC5tYXRyaXhXb3JsZC5jb3B5KHQubWF0cml4V29ybGQpLm11bHRpcGx5KFNqdCksdGhpcy5jYW1lcmFSLm1hdHJpeFdvcmxkLmNvcHkodC5tYXRyaXhXb3JsZCkubXVsdGlwbHkod2p0KX19KTtjbGFzcyBFanR7Y29uc3RydWN0b3IodCl7dGhpcy5hdXRvU3RhcnQ9dm9pZCAwPT09dHx8dCx0aGlzLnN0YXJ0VGltZT0wLHRoaXMub2xkVGltZT0wLHRoaXMuZWxhcHNlZFRpbWU9MCx0aGlzLnJ1bm5pbmc9ITF9c3RhcnQoKXt0aGlzLnN0YXJ0VGltZT1UanQoKSx0aGlzLm9sZFRpbWU9dGhpcy5zdGFydFRpbWUsdGhpcy5lbGFwc2VkVGltZT0wLHRoaXMucnVubmluZz0hMH1zdG9wKCl7dGhpcy5nZXRFbGFwc2VkVGltZSgpLHRoaXMucnVubmluZz0hMSx0aGlzLmF1dG9TdGFydD0hMX1nZXRFbGFwc2VkVGltZSgpe3JldHVybiB0aGlzLmdldERlbHRhKCksdGhpcy5lbGFwc2VkVGltZX1nZXREZWx0YSgpe2xldCB0PTA7aWYodGhpcy5hdXRvU3RhcnQmJiF0aGlzLnJ1bm5pbmcpcmV0dXJuIHRoaXMuc3RhcnQoKSwwO2lmKHRoaXMucnVubmluZyl7Y29uc3QgZT1UanQoKTt0PShlLXRoaXMub2xkVGltZSkvMWUzLHRoaXMub2xkVGltZT1lLHRoaXMuZWxhcHNlZFRpbWUrPXR9cmV0dXJuIHR9fWZ1bmN0aW9uIFRqdCgpe3JldHVybigidW5kZWZpbmVkIj09dHlwZW9mIHBlcmZvcm1hbmNlP0RhdGU6cGVyZm9ybWFuY2UpLm5vdygpfWNvbnN0IENqdD1uZXcgcU90LEFqdD1uZXcgV090LGtqdD1uZXcgcU90LExqdD1uZXcgcU90O2NsYXNzIFBqdCBleHRlbmRzIFdSdHtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iQXVkaW8iLHRoaXMubGlzdGVuZXI9dCx0aGlzLmNvbnRleHQ9dC5jb250ZXh0LHRoaXMuZ2Fpbj10aGlzLmNvbnRleHQuY3JlYXRlR2FpbigpLHRoaXMuZ2Fpbi5jb25uZWN0KHQuZ2V0SW5wdXQoKSksdGhpcy5hdXRvcGxheT0hMSx0aGlzLmJ1ZmZlcj1udWxsLHRoaXMuZGV0dW5lPTAsdGhpcy5sb29wPSExLHRoaXMubG9vcFN0YXJ0PTAsdGhpcy5sb29wRW5kPTAsdGhpcy5vZmZzZXQ9MCx0aGlzLmR1cmF0aW9uPXZvaWQgMCx0aGlzLnBsYXliYWNrUmF0ZT0xLHRoaXMuaXNQbGF5aW5nPSExLHRoaXMuaGFzUGxheWJhY2tDb250cm9sPSEwLHRoaXMuc291cmNlPW51bGwsdGhpcy5zb3VyY2VUeXBlPSJlbXB0eSIsdGhpcy5fc3RhcnRlZEF0PTAsdGhpcy5fcHJvZ3Jlc3M9MCx0aGlzLl9jb25uZWN0ZWQ9ITEsdGhpcy5maWx0ZXJzPVtdfWdldE91dHB1dCgpe3JldHVybiB0aGlzLmdhaW59c2V0Tm9kZVNvdXJjZSh0KXtyZXR1cm4gdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9ITEsdGhpcy5zb3VyY2VUeXBlPSJhdWRpb05vZGUiLHRoaXMuc291cmNlPXQsdGhpcy5jb25uZWN0KCksdGhpc31zZXRNZWRpYUVsZW1lbnRTb3VyY2UodCl7cmV0dXJuIHRoaXMuaGFzUGxheWJhY2tDb250cm9sPSExLHRoaXMuc291cmNlVHlwZT0ibWVkaWFOb2RlIix0aGlzLnNvdXJjZT10aGlzLmNvbnRleHQuY3JlYXRlTWVkaWFFbGVtZW50U291cmNlKHQpLHRoaXMuY29ubmVjdCgpLHRoaXN9c2V0TWVkaWFTdHJlYW1Tb3VyY2UodCl7cmV0dXJuIHRoaXMuaGFzUGxheWJhY2tDb250cm9sPSExLHRoaXMuc291cmNlVHlwZT0ibWVkaWFTdHJlYW1Ob2RlIix0aGlzLnNvdXJjZT10aGlzLmNvbnRleHQuY3JlYXRlTWVkaWFTdHJlYW1Tb3VyY2UodCksdGhpcy5jb25uZWN0KCksdGhpc31zZXRCdWZmZXIodCl7cmV0dXJuIHRoaXMuYnVmZmVyPXQsdGhpcy5zb3VyY2VUeXBlPSJidWZmZXIiLHRoaXMuYXV0b3BsYXkmJnRoaXMucGxheSgpLHRoaXN9cGxheSh0PTApe2lmKCEwPT09dGhpcy5pc1BsYXlpbmcpcmV0dXJuIHZvaWQgY29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogQXVkaW8gaXMgYWxyZWFkeSBwbGF5aW5nLiIpO2lmKCExPT09dGhpcy5oYXNQbGF5YmFja0NvbnRyb2wpcmV0dXJuIHZvaWQgY29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKTt0aGlzLl9zdGFydGVkQXQ9dGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lK3Q7Y29uc3QgZT10aGlzLmNvbnRleHQuY3JlYXRlQnVmZmVyU291cmNlKCk7cmV0dXJuIGUuYnVmZmVyPXRoaXMuYnVmZmVyLGUubG9vcD10aGlzLmxvb3AsZS5sb29wU3RhcnQ9dGhpcy5sb29wU3RhcnQsZS5sb29wRW5kPXRoaXMubG9vcEVuZCxlLm9uZW5kZWQ9dGhpcy5vbkVuZGVkLmJpbmQodGhpcyksZS5zdGFydCh0aGlzLl9zdGFydGVkQXQsdGhpcy5fcHJvZ3Jlc3MrdGhpcy5vZmZzZXQsdGhpcy5kdXJhdGlvbiksdGhpcy5pc1BsYXlpbmc9ITAsdGhpcy5zb3VyY2U9ZSx0aGlzLnNldERldHVuZSh0aGlzLmRldHVuZSksdGhpcy5zZXRQbGF5YmFja1JhdGUodGhpcy5wbGF5YmFja1JhdGUpLHRoaXMuY29ubmVjdCgpfXBhdXNlKCl7aWYoITEhPT10aGlzLmhhc1BsYXliYWNrQ29udHJvbClyZXR1cm4hMD09PXRoaXMuaXNQbGF5aW5nJiYodGhpcy5fcHJvZ3Jlc3MrPU1hdGgubWF4KHRoaXMuY29udGV4dC5jdXJyZW50VGltZS10aGlzLl9zdGFydGVkQXQsMCkqdGhpcy5wbGF5YmFja1JhdGUsITA9PT10aGlzLmxvb3AmJih0aGlzLl9wcm9ncmVzcz10aGlzLl9wcm9ncmVzcyUodGhpcy5kdXJhdGlvbnx8dGhpcy5idWZmZXIuZHVyYXRpb24pKSx0aGlzLnNvdXJjZS5zdG9wKCksdGhpcy5zb3VyY2Uub25lbmRlZD1udWxsLHRoaXMuaXNQbGF5aW5nPSExKSx0aGlzO2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIil9c3RvcCgpe2lmKCExIT09dGhpcy5oYXNQbGF5YmFja0NvbnRyb2wpcmV0dXJuIHRoaXMuX3Byb2dyZXNzPTAsdGhpcy5zb3VyY2Uuc3RvcCgpLHRoaXMuc291cmNlLm9uZW5kZWQ9bnVsbCx0aGlzLmlzUGxheWluZz0hMSx0aGlzO2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIil9Y29ubmVjdCgpe2lmKHRoaXMuZmlsdGVycy5sZW5ndGg+MCl7dGhpcy5zb3VyY2UuY29ubmVjdCh0aGlzLmZpbHRlcnNbMF0pO2ZvcihsZXQgdD0xLGU9dGhpcy5maWx0ZXJzLmxlbmd0aDt0PGU7dCsrKXRoaXMuZmlsdGVyc1t0LTFdLmNvbm5lY3QodGhpcy5maWx0ZXJzW3RdKTt0aGlzLmZpbHRlcnNbdGhpcy5maWx0ZXJzLmxlbmd0aC0xXS5jb25uZWN0KHRoaXMuZ2V0T3V0cHV0KCkpfWVsc2UgdGhpcy5zb3VyY2UuY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKTtyZXR1cm4gdGhpcy5fY29ubmVjdGVkPSEwLHRoaXN9ZGlzY29ubmVjdCgpe2lmKHRoaXMuZmlsdGVycy5sZW5ndGg+MCl7dGhpcy5zb3VyY2UuZGlzY29ubmVjdCh0aGlzLmZpbHRlcnNbMF0pO2ZvcihsZXQgdD0xLGU9dGhpcy5maWx0ZXJzLmxlbmd0aDt0PGU7dCsrKXRoaXMuZmlsdGVyc1t0LTFdLmRpc2Nvbm5lY3QodGhpcy5maWx0ZXJzW3RdKTt0aGlzLmZpbHRlcnNbdGhpcy5maWx0ZXJzLmxlbmd0aC0xXS5kaXNjb25uZWN0KHRoaXMuZ2V0T3V0cHV0KCkpfWVsc2UgdGhpcy5zb3VyY2UuZGlzY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKTtyZXR1cm4gdGhpcy5fY29ubmVjdGVkPSExLHRoaXN9Z2V0RmlsdGVycygpe3JldHVybiB0aGlzLmZpbHRlcnN9c2V0RmlsdGVycyh0KXtyZXR1cm4gdHx8KHQ9W10pLCEwPT09dGhpcy5fY29ubmVjdGVkPyh0aGlzLmRpc2Nvbm5lY3QoKSx0aGlzLmZpbHRlcnM9dC5zbGljZSgpLHRoaXMuY29ubmVjdCgpKTp0aGlzLmZpbHRlcnM9dC5zbGljZSgpLHRoaXN9c2V0RGV0dW5lKHQpe2lmKHRoaXMuZGV0dW5lPXQsdm9pZCAwIT09dGhpcy5zb3VyY2UuZGV0dW5lKXJldHVybiEwPT09dGhpcy5pc1BsYXlpbmcmJnRoaXMuc291cmNlLmRldHVuZS5zZXRUYXJnZXRBdFRpbWUodGhpcy5kZXR1bmUsdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lLC4wMSksdGhpc31nZXREZXR1bmUoKXtyZXR1cm4gdGhpcy5kZXR1bmV9Z2V0RmlsdGVyKCl7cmV0dXJuIHRoaXMuZ2V0RmlsdGVycygpWzBdfXNldEZpbHRlcih0KXtyZXR1cm4gdGhpcy5zZXRGaWx0ZXJzKHQ/W3RdOltdKX1zZXRQbGF5YmFja1JhdGUodCl7aWYoITEhPT10aGlzLmhhc1BsYXliYWNrQ29udHJvbClyZXR1cm4gdGhpcy5wbGF5YmFja1JhdGU9dCwhMD09PXRoaXMuaXNQbGF5aW5nJiZ0aGlzLnNvdXJjZS5wbGF5YmFja1JhdGUuc2V0VGFyZ2V0QXRUaW1lKHRoaXMucGxheWJhY2tSYXRlLHRoaXMuY29udGV4dC5jdXJyZW50VGltZSwuMDEpLHRoaXM7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKX1nZXRQbGF5YmFja1JhdGUoKXtyZXR1cm4gdGhpcy5wbGF5YmFja1JhdGV9b25FbmRlZCgpe3RoaXMuaXNQbGF5aW5nPSExfWdldExvb3AoKXtyZXR1cm4hMT09PXRoaXMuaGFzUGxheWJhY2tDb250cm9sPyhjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpLCExKTp0aGlzLmxvb3B9c2V0TG9vcCh0KXtpZighMSE9PXRoaXMuaGFzUGxheWJhY2tDb250cm9sKXJldHVybiB0aGlzLmxvb3A9dCwhMD09PXRoaXMuaXNQbGF5aW5nJiYodGhpcy5zb3VyY2UubG9vcD10aGlzLmxvb3ApLHRoaXM7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKX1zZXRMb29wU3RhcnQodCl7cmV0dXJuIHRoaXMubG9vcFN0YXJ0PXQsdGhpc31zZXRMb29wRW5kKHQpe3JldHVybiB0aGlzLmxvb3BFbmQ9dCx0aGlzfWdldFZvbHVtZSgpe3JldHVybiB0aGlzLmdhaW4uZ2Fpbi52YWx1ZX1zZXRWb2x1bWUodCl7cmV0dXJuIHRoaXMuZ2Fpbi5nYWluLnNldFRhcmdldEF0VGltZSh0LHRoaXMuY29udGV4dC5jdXJyZW50VGltZSwuMDEpLHRoaXN9fWNvbnN0IE5qdD1uZXcgcU90LElqdD1uZXcgV090LE9qdD1uZXcgcU90LFJqdD1uZXcgcU90O2NsYXNzIHpqdHtjb25zdHJ1Y3Rvcih0LGU9MjA0OCl7dGhpcy5hbmFseXNlcj10LmNvbnRleHQuY3JlYXRlQW5hbHlzZXIoKSx0aGlzLmFuYWx5c2VyLmZmdFNpemU9ZSx0aGlzLmRhdGE9bmV3IFVpbnQ4QXJyYXkodGhpcy5hbmFseXNlci5mcmVxdWVuY3lCaW5Db3VudCksdC5nZXRPdXRwdXQoKS5jb25uZWN0KHRoaXMuYW5hbHlzZXIpfWdldEZyZXF1ZW5jeURhdGEoKXtyZXR1cm4gdGhpcy5hbmFseXNlci5nZXRCeXRlRnJlcXVlbmN5RGF0YSh0aGlzLmRhdGEpLHRoaXMuZGF0YX1nZXRBdmVyYWdlRnJlcXVlbmN5KCl7bGV0IHQ9MDtjb25zdCBlPXRoaXMuZ2V0RnJlcXVlbmN5RGF0YSgpO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXQrPWVbbl07cmV0dXJuIHQvZS5sZW5ndGh9fWZ1bmN0aW9uIERqdCh0LGUsbil7bGV0IGkscixvO3N3aXRjaCh0aGlzLmJpbmRpbmc9dCx0aGlzLnZhbHVlU2l6ZT1uLGUpe2Nhc2UicXVhdGVybmlvbiI6aT10aGlzLl9zbGVycCxyPXRoaXMuX3NsZXJwQWRkaXRpdmUsbz10aGlzLl9zZXRBZGRpdGl2ZUlkZW50aXR5UXVhdGVybmlvbix0aGlzLmJ1ZmZlcj1uZXcgRmxvYXQ2NEFycmF5KDYqbiksdGhpcy5fd29ya0luZGV4PTU7YnJlYWs7Y2FzZSJzdHJpbmciOmNhc2UiYm9vbCI6aT10aGlzLl9zZWxlY3Qscj10aGlzLl9zZWxlY3Qsbz10aGlzLl9zZXRBZGRpdGl2ZUlkZW50aXR5T3RoZXIsdGhpcy5idWZmZXI9bmV3IEFycmF5KDUqbik7YnJlYWs7ZGVmYXVsdDppPXRoaXMuX2xlcnAscj10aGlzLl9sZXJwQWRkaXRpdmUsbz10aGlzLl9zZXRBZGRpdGl2ZUlkZW50aXR5TnVtZXJpYyx0aGlzLmJ1ZmZlcj1uZXcgRmxvYXQ2NEFycmF5KDUqbil9dGhpcy5fbWl4QnVmZmVyUmVnaW9uPWksdGhpcy5fbWl4QnVmZmVyUmVnaW9uQWRkaXRpdmU9cix0aGlzLl9zZXRJZGVudGl0eT1vLHRoaXMuX29yaWdJbmRleD0zLHRoaXMuX2FkZEluZGV4PTQsdGhpcy5jdW11bGF0aXZlV2VpZ2h0PTAsdGhpcy5jdW11bGF0aXZlV2VpZ2h0QWRkaXRpdmU9MCx0aGlzLnVzZUNvdW50PTAsdGhpcy5yZWZlcmVuY2VDb3VudD0wfU9iamVjdC5hc3NpZ24oRGp0LnByb3RvdHlwZSx7YWNjdW11bGF0ZTpmdW5jdGlvbih0LGUpe2NvbnN0IG49dGhpcy5idWZmZXIsaT10aGlzLnZhbHVlU2l6ZSxyPXQqaStpO2xldCBvPXRoaXMuY3VtdWxhdGl2ZVdlaWdodDtpZigwPT09byl7Zm9yKGxldCB0PTA7dCE9PWk7Kyt0KW5bcit0XT1uW3RdO289ZX1lbHNlIG8rPWUsdGhpcy5fbWl4QnVmZmVyUmVnaW9uKG4sciwwLGUvbyxpKTt0aGlzLmN1bXVsYXRpdmVXZWlnaHQ9b30sYWNjdW11bGF0ZUFkZGl0aXZlOmZ1bmN0aW9uKHQpe2NvbnN0IGU9dGhpcy5idWZmZXIsbj10aGlzLnZhbHVlU2l6ZSxpPW4qdGhpcy5fYWRkSW5kZXg7MD09PXRoaXMuY3VtdWxhdGl2ZVdlaWdodEFkZGl0aXZlJiZ0aGlzLl9zZXRJZGVudGl0eSgpLHRoaXMuX21peEJ1ZmZlclJlZ2lvbkFkZGl0aXZlKGUsaSwwLHQsbiksdGhpcy5jdW11bGF0aXZlV2VpZ2h0QWRkaXRpdmUrPXR9LGFwcGx5OmZ1bmN0aW9uKHQpe2NvbnN0IGU9dGhpcy52YWx1ZVNpemUsbj10aGlzLmJ1ZmZlcixpPXQqZStlLHI9dGhpcy5jdW11bGF0aXZlV2VpZ2h0LG89dGhpcy5jdW11bGF0aXZlV2VpZ2h0QWRkaXRpdmUsYT10aGlzLmJpbmRpbmc7dGhpcy5jdW11bGF0aXZlV2VpZ2h0PTAsdGhpcy5jdW11bGF0aXZlV2VpZ2h0QWRkaXRpdmU9MCxyPDEmJnRoaXMuX21peEJ1ZmZlclJlZ2lvbihuLGksZSp0aGlzLl9vcmlnSW5kZXgsMS1yLGUpLG8+MCYmdGhpcy5fbWl4QnVmZmVyUmVnaW9uQWRkaXRpdmUobixpLHRoaXMuX2FkZEluZGV4KmUsMSxlKTtmb3IobGV0IHQ9ZSxyPWUrZTt0IT09cjsrK3QpaWYoblt0XSE9PW5bdCtlXSl7YS5zZXRWYWx1ZShuLGkpO2JyZWFrfX0sc2F2ZU9yaWdpbmFsU3RhdGU6ZnVuY3Rpb24oKXtjb25zdCB0PXRoaXMuYnVmZmVyLGU9dGhpcy52YWx1ZVNpemUsbj1lKnRoaXMuX29yaWdJbmRleDt0aGlzLmJpbmRpbmcuZ2V0VmFsdWUodCxuKTtmb3IobGV0IGk9ZSxyPW47aSE9PXI7KytpKXRbaV09dFtuK2klZV07dGhpcy5fc2V0SWRlbnRpdHkoKSx0aGlzLmN1bXVsYXRpdmVXZWlnaHQ9MCx0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZT0wfSxyZXN0b3JlT3JpZ2luYWxTdGF0ZTpmdW5jdGlvbigpe3RoaXMuYmluZGluZy5zZXRWYWx1ZSh0aGlzLmJ1ZmZlciwzKnRoaXMudmFsdWVTaXplKX0sX3NldEFkZGl0aXZlSWRlbnRpdHlOdW1lcmljOmZ1bmN0aW9uKCl7Y29uc3QgdD10aGlzLl9hZGRJbmRleCp0aGlzLnZhbHVlU2l6ZSxlPXQrdGhpcy52YWx1ZVNpemU7Zm9yKGxldCBuPXQ7bjxlO24rKyl0aGlzLmJ1ZmZlcltuXT0wfSxfc2V0QWRkaXRpdmVJZGVudGl0eVF1YXRlcm5pb246ZnVuY3Rpb24oKXt0aGlzLl9zZXRBZGRpdGl2ZUlkZW50aXR5TnVtZXJpYygpLHRoaXMuYnVmZmVyW3RoaXMuX2FkZEluZGV4KnRoaXMudmFsdWVTaXplKzNdPTF9LF9zZXRBZGRpdGl2ZUlkZW50aXR5T3RoZXI6ZnVuY3Rpb24oKXtjb25zdCB0PXRoaXMuX29yaWdJbmRleCp0aGlzLnZhbHVlU2l6ZSxlPXRoaXMuX2FkZEluZGV4KnRoaXMudmFsdWVTaXplO2ZvcihsZXQgbj0wO248dGhpcy52YWx1ZVNpemU7bisrKXRoaXMuYnVmZmVyW2Urbl09dGhpcy5idWZmZXJbdCtuXX0sX3NlbGVjdDpmdW5jdGlvbih0LGUsbixpLHIpe2lmKGk+PS41KWZvcihsZXQgaT0wO2khPT1yOysraSl0W2UraV09dFtuK2ldfSxfc2xlcnA6ZnVuY3Rpb24odCxlLG4saSl7V090LnNsZXJwRmxhdCh0LGUsdCxlLHQsbixpKX0sX3NsZXJwQWRkaXRpdmU6ZnVuY3Rpb24odCxlLG4saSxyKXtjb25zdCBvPXRoaXMuX3dvcmtJbmRleCpyO1dPdC5tdWx0aXBseVF1YXRlcm5pb25zRmxhdCh0LG8sdCxlLHQsbiksV090LnNsZXJwRmxhdCh0LGUsdCxlLHQsbyxpKX0sX2xlcnA6ZnVuY3Rpb24odCxlLG4saSxyKXtjb25zdCBvPTEtaTtmb3IobGV0IGE9MDthIT09cjsrK2Epe2NvbnN0IHI9ZSthO3Rbcl09dFtyXSpvK3RbbithXSppfX0sX2xlcnBBZGRpdGl2ZTpmdW5jdGlvbih0LGUsbixpLHIpe2ZvcihsZXQgbz0wO28hPT1yOysrbyl7Y29uc3Qgcj1lK287dFtyXT10W3JdK3RbbitvXSppfX19KTtjb25zdCBCanQ9bmV3IFJlZ0V4cCgiW1xcW1xcXVxcLjpcXC9dIiwiZyIpLEhqdD0iW15cXFtcXF1cXC46XFwvXSIsRmp0PSJbXiIrIlxcW1xcXVxcLjpcXC8iLnJlcGxhY2UoIlxcLiIsIiIpKyJdIixWanQ9LygoPzpXQytbXC86XSkqKS8uc291cmNlLnJlcGxhY2UoIldDIixIanQpLFVqdD0vKFdDT0QrKT8vLnNvdXJjZS5yZXBsYWNlKCJXQ09EIixGanQpLGpqdD0vKD86XC4oV0MrKSg/OlxbKC4rKVxdKT8pPy8uc291cmNlLnJlcGxhY2UoIldDIixIanQpLEdqdD0vXC4oV0MrKSg/OlxbKC4rKVxdKT8vLnNvdXJjZS5yZXBsYWNlKCJXQyIsSGp0KSxXanQ9bmV3IFJlZ0V4cCgiXiIrVmp0K1VqdCtqanQrR2p0KyIkIikscWp0PVsibWF0ZXJpYWwiLCJtYXRlcmlhbHMiLCJib25lcyJdO2Z1bmN0aW9uIFlqdCh0LGUsbil7Y29uc3QgaT1ufHxYanQucGFyc2VUcmFja05hbWUoZSk7dGhpcy5fdGFyZ2V0R3JvdXA9dCx0aGlzLl9iaW5kaW5ncz10LnN1YnNjcmliZV8oZSxpKX1mdW5jdGlvbiBYanQodCxlLG4pe3RoaXMucGF0aD1lLHRoaXMucGFyc2VkUGF0aD1ufHxYanQucGFyc2VUcmFja05hbWUoZSksdGhpcy5ub2RlPVhqdC5maW5kTm9kZSh0LHRoaXMucGFyc2VkUGF0aC5ub2RlTmFtZSl8fHQsdGhpcy5yb290Tm9kZT10fWZ1bmN0aW9uICRqdCgpe3RoaXMudXVpZD1ST3QuZ2VuZXJhdGVVVUlEKCksdGhpcy5fb2JqZWN0cz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpLHRoaXMubkNhY2hlZE9iamVjdHNfPTA7Y29uc3QgdD17fTt0aGlzLl9pbmRpY2VzQnlVVUlEPXQ7Zm9yKGxldCBlPTAsbj1hcmd1bWVudHMubGVuZ3RoO2UhPT1uOysrZSl0W2FyZ3VtZW50c1tlXS51dWlkXT1lO3RoaXMuX3BhdGhzPVtdLHRoaXMuX3BhcnNlZFBhdGhzPVtdLHRoaXMuX2JpbmRpbmdzPVtdLHRoaXMuX2JpbmRpbmdzSW5kaWNlc0J5UGF0aD17fTtjb25zdCBlPXRoaXM7dGhpcy5zdGF0cz17b2JqZWN0czp7Z2V0IHRvdGFsKCl7cmV0dXJuIGUuX29iamVjdHMubGVuZ3RofSxnZXQgaW5Vc2UoKXtyZXR1cm4gdGhpcy50b3RhbC1lLm5DYWNoZWRPYmplY3RzX319LGdldCBiaW5kaW5nc1Blck9iamVjdCgpe3JldHVybiBlLl9iaW5kaW5ncy5sZW5ndGh9fX1PYmplY3QuYXNzaWduKFlqdC5wcm90b3R5cGUse2dldFZhbHVlOmZ1bmN0aW9uKHQsZSl7dGhpcy5iaW5kKCk7Y29uc3Qgbj10aGlzLl9iaW5kaW5nc1t0aGlzLl90YXJnZXRHcm91cC5uQ2FjaGVkT2JqZWN0c19dO3ZvaWQgMCE9PW4mJm4uZ2V0VmFsdWUodCxlKX0sc2V0VmFsdWU6ZnVuY3Rpb24odCxlKXtjb25zdCBuPXRoaXMuX2JpbmRpbmdzO2ZvcihsZXQgaT10aGlzLl90YXJnZXRHcm91cC5uQ2FjaGVkT2JqZWN0c18scj1uLmxlbmd0aDtpIT09cjsrK2kpbltpXS5zZXRWYWx1ZSh0LGUpfSxiaW5kOmZ1bmN0aW9uKCl7Y29uc3QgdD10aGlzLl9iaW5kaW5ncztmb3IobGV0IGU9dGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfLG49dC5sZW5ndGg7ZSE9PW47KytlKXRbZV0uYmluZCgpfSx1bmJpbmQ6ZnVuY3Rpb24oKXtjb25zdCB0PXRoaXMuX2JpbmRpbmdzO2ZvcihsZXQgZT10aGlzLl90YXJnZXRHcm91cC5uQ2FjaGVkT2JqZWN0c18sbj10Lmxlbmd0aDtlIT09bjsrK2UpdFtlXS51bmJpbmQoKX19KSxPYmplY3QuYXNzaWduKFhqdCx7Q29tcG9zaXRlOllqdCxjcmVhdGU6ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0JiZ0LmlzQW5pbWF0aW9uT2JqZWN0R3JvdXA/bmV3IFhqdC5Db21wb3NpdGUodCxlLG4pOm5ldyBYanQodCxlLG4pfSxzYW5pdGl6ZU5vZGVOYW1lOmZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UoL1xzL2csIl8iKS5yZXBsYWNlKEJqdCwiIil9LHBhcnNlVHJhY2tOYW1lOmZ1bmN0aW9uKHQpe2NvbnN0IGU9V2p0LmV4ZWModCk7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCJQcm9wZXJ0eUJpbmRpbmc6IENhbm5vdCBwYXJzZSB0cmFja05hbWU6ICIrdCk7Y29uc3Qgbj17bm9kZU5hbWU6ZVsyXSxvYmplY3ROYW1lOmVbM10sb2JqZWN0SW5kZXg6ZVs0XSxwcm9wZXJ0eU5hbWU6ZVs1XSxwcm9wZXJ0eUluZGV4OmVbNl19LGk9bi5ub2RlTmFtZSYmbi5ub2RlTmFtZS5sYXN0SW5kZXhPZigiLiIpO2lmKHZvaWQgMCE9PWkmJi0xIT09aSl7Y29uc3QgdD1uLm5vZGVOYW1lLnN1YnN0cmluZyhpKzEpOy0xIT09cWp0LmluZGV4T2YodCkmJihuLm5vZGVOYW1lPW4ubm9kZU5hbWUuc3Vic3RyaW5nKDAsaSksbi5vYmplY3ROYW1lPXQpfWlmKG51bGw9PT1uLnByb3BlcnR5TmFtZXx8MD09PW4ucHJvcGVydHlOYW1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlByb3BlcnR5QmluZGluZzogY2FuIG5vdCBwYXJzZSBwcm9wZXJ0eU5hbWUgZnJvbSB0cmFja05hbWU6ICIrdCk7cmV0dXJuIG59LGZpbmROb2RlOmZ1bmN0aW9uKHQsZSl7aWYoIWV8fCIiPT09ZXx8Ii4iPT09ZXx8LTE9PT1lfHxlPT09dC5uYW1lfHxlPT09dC51dWlkKXJldHVybiB0O2lmKHQuc2tlbGV0b24pe2NvbnN0IG49dC5za2VsZXRvbi5nZXRCb25lQnlOYW1lKGUpO2lmKHZvaWQgMCE9PW4pcmV0dXJuIG59aWYodC5jaGlsZHJlbil7Y29uc3Qgbj1mdW5jdGlvbih0KXtmb3IobGV0IGk9MDtpPHQubGVuZ3RoO2krKyl7Y29uc3Qgcj10W2ldO2lmKHIubmFtZT09PWV8fHIudXVpZD09PWUpcmV0dXJuIHI7Y29uc3Qgbz1uKHIuY2hpbGRyZW4pO2lmKG8pcmV0dXJuIG99cmV0dXJuIG51bGx9LGk9bih0LmNoaWxkcmVuKTtpZihpKXJldHVybiBpfXJldHVybiBudWxsfX0pLE9iamVjdC5hc3NpZ24oWGp0LnByb3RvdHlwZSx7X2dldFZhbHVlX3VuYXZhaWxhYmxlOmZ1bmN0aW9uKCl7fSxfc2V0VmFsdWVfdW5hdmFpbGFibGU6ZnVuY3Rpb24oKXt9LEJpbmRpbmdUeXBlOntEaXJlY3Q6MCxFbnRpcmVBcnJheToxLEFycmF5RWxlbWVudDoyLEhhc0Zyb21Ub0FycmF5OjN9LFZlcnNpb25pbmc6e05vbmU6MCxOZWVkc1VwZGF0ZToxLE1hdHJpeFdvcmxkTmVlZHNVcGRhdGU6Mn0sR2V0dGVyQnlCaW5kaW5nVHlwZTpbZnVuY3Rpb24gdChlLG4pe2Vbbl09dGhpcy5ub2RlW3RoaXMucHJvcGVydHlOYW1lXX0sZnVuY3Rpb24gdChlLG4pe2NvbnN0IGk9dGhpcy5yZXNvbHZlZFByb3BlcnR5O2ZvcihsZXQgdD0wLHI9aS5sZW5ndGg7dCE9PXI7Kyt0KWVbbisrXT1pW3RdfSxmdW5jdGlvbiB0KGUsbil7ZVtuXT10aGlzLnJlc29sdmVkUHJvcGVydHlbdGhpcy5wcm9wZXJ0eUluZGV4XX0sZnVuY3Rpb24gdChlLG4pe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eS50b0FycmF5KGUsbil9XSxTZXR0ZXJCeUJpbmRpbmdUeXBlQW5kVmVyc2lvbmluZzpbW2Z1bmN0aW9uIHQoZSxuKXt0aGlzLnRhcmdldE9iamVjdFt0aGlzLnByb3BlcnR5TmFtZV09ZVtuXX0sZnVuY3Rpb24gdChlLG4pe3RoaXMudGFyZ2V0T2JqZWN0W3RoaXMucHJvcGVydHlOYW1lXT1lW25dLHRoaXMudGFyZ2V0T2JqZWN0Lm5lZWRzVXBkYXRlPSEwfSxmdW5jdGlvbiB0KGUsbil7dGhpcy50YXJnZXRPYmplY3RbdGhpcy5wcm9wZXJ0eU5hbWVdPWVbbl0sdGhpcy50YXJnZXRPYmplY3QubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH1dLFtmdW5jdGlvbiB0KGUsbil7Y29uc3QgaT10aGlzLnJlc29sdmVkUHJvcGVydHk7Zm9yKGxldCB0PTAscj1pLmxlbmd0aDt0IT09cjsrK3QpaVt0XT1lW24rK119LGZ1bmN0aW9uIHQoZSxuKXtjb25zdCBpPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eTtmb3IobGV0IHQ9MCxyPWkubGVuZ3RoO3QhPT1yOysrdClpW3RdPWVbbisrXTt0aGlzLnRhcmdldE9iamVjdC5uZWVkc1VwZGF0ZT0hMH0sZnVuY3Rpb24gdChlLG4pe2NvbnN0IGk9dGhpcy5yZXNvbHZlZFByb3BlcnR5O2ZvcihsZXQgdD0wLHI9aS5sZW5ndGg7dCE9PXI7Kyt0KWlbdF09ZVtuKytdO3RoaXMudGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9XSxbZnVuY3Rpb24gdChlLG4pe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eVt0aGlzLnByb3BlcnR5SW5kZXhdPWVbbl19LGZ1bmN0aW9uIHQoZSxuKXt0aGlzLnJlc29sdmVkUHJvcGVydHlbdGhpcy5wcm9wZXJ0eUluZGV4XT1lW25dLHRoaXMudGFyZ2V0T2JqZWN0Lm5lZWRzVXBkYXRlPSEwfSxmdW5jdGlvbiB0KGUsbil7dGhpcy5yZXNvbHZlZFByb3BlcnR5W3RoaXMucHJvcGVydHlJbmRleF09ZVtuXSx0aGlzLnRhcmdldE9iamVjdC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSEwfV0sW2Z1bmN0aW9uIHQoZSxuKXt0aGlzLnJlc29sdmVkUHJvcGVydHkuZnJvbUFycmF5KGUsbil9LGZ1bmN0aW9uIHQoZSxuKXt0aGlzLnJlc29sdmVkUHJvcGVydHkuZnJvbUFycmF5KGUsbiksdGhpcy50YXJnZXRPYmplY3QubmVlZHNVcGRhdGU9ITB9LGZ1bmN0aW9uIHQoZSxuKXt0aGlzLnJlc29sdmVkUHJvcGVydHkuZnJvbUFycmF5KGUsbiksdGhpcy50YXJnZXRPYmplY3QubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH1dXSxnZXRWYWx1ZTpmdW5jdGlvbiB0KGUsbil7dGhpcy5iaW5kKCksdGhpcy5nZXRWYWx1ZShlLG4pfSxzZXRWYWx1ZTpmdW5jdGlvbiB0KGUsbil7dGhpcy5iaW5kKCksdGhpcy5zZXRWYWx1ZShlLG4pfSxiaW5kOmZ1bmN0aW9uKCl7bGV0IHQ9dGhpcy5ub2RlO2NvbnN0IGU9dGhpcy5wYXJzZWRQYXRoLG49ZS5vYmplY3ROYW1lLGk9ZS5wcm9wZXJ0eU5hbWU7bGV0IHI9ZS5wcm9wZXJ0eUluZGV4O2lmKHR8fCh0PVhqdC5maW5kTm9kZSh0aGlzLnJvb3ROb2RlLGUubm9kZU5hbWUpfHx0aGlzLnJvb3ROb2RlLHRoaXMubm9kZT10KSx0aGlzLmdldFZhbHVlPXRoaXMuX2dldFZhbHVlX3VuYXZhaWxhYmxlLHRoaXMuc2V0VmFsdWU9dGhpcy5fc2V0VmFsdWVfdW5hdmFpbGFibGUsIXQpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBUcnlpbmcgdG8gdXBkYXRlIG5vZGUgZm9yIHRyYWNrOiAiK3RoaXMucGF0aCsiIGJ1dCBpdCB3YXNuJ3QgZm91bmQuIik7aWYobil7bGV0IGk9ZS5vYmplY3RJbmRleDtzd2l0Y2gobil7Y2FzZSJtYXRlcmlhbHMiOmlmKCF0Lm1hdGVyaWFsKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG1hdGVyaWFsIGFzIG5vZGUgZG9lcyBub3QgaGF2ZSBhIG1hdGVyaWFsLiIsdGhpcyk7aWYoIXQubWF0ZXJpYWwubWF0ZXJpYWxzKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG1hdGVyaWFsLm1hdGVyaWFscyBhcyBub2RlLm1hdGVyaWFsIGRvZXMgbm90IGhhdmUgYSBtYXRlcmlhbHMgYXJyYXkuIix0aGlzKTt0PXQubWF0ZXJpYWwubWF0ZXJpYWxzO2JyZWFrO2Nhc2UiYm9uZXMiOmlmKCF0LnNrZWxldG9uKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIGJvbmVzIGFzIG5vZGUgZG9lcyBub3QgaGF2ZSBhIHNrZWxldG9uLiIsdGhpcyk7dD10LnNrZWxldG9uLmJvbmVzO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKWlmKHRbZV0ubmFtZT09PWkpe2k9ZTticmVha31icmVhaztkZWZhdWx0OmlmKHZvaWQgMD09PXRbbl0pcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gb2JqZWN0TmFtZSBvZiBub2RlIHVuZGVmaW5lZC4iLHRoaXMpO3Q9dFtuXX1pZih2b2lkIDAhPT1pKXtpZih2b2lkIDA9PT10W2ldKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogVHJ5aW5nIHRvIGJpbmQgdG8gb2JqZWN0SW5kZXggb2Ygb2JqZWN0TmFtZSwgYnV0IGlzIHVuZGVmaW5lZC4iLHRoaXMsdCk7dD10W2ldfX1jb25zdCBvPXRbaV07aWYodm9pZCAwPT09bylyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IFRyeWluZyB0byB1cGRhdGUgcHJvcGVydHkgZm9yIHRyYWNrOiAiK2Uubm9kZU5hbWUrIi4iK2krIiBidXQgaXQgd2Fzbid0IGZvdW5kLiIsdCk7bGV0IGE9dGhpcy5WZXJzaW9uaW5nLk5vbmU7dGhpcy50YXJnZXRPYmplY3Q9dCx2b2lkIDAhPT10Lm5lZWRzVXBkYXRlP2E9dGhpcy5WZXJzaW9uaW5nLk5lZWRzVXBkYXRlOnZvaWQgMCE9PXQubWF0cml4V29ybGROZWVkc1VwZGF0ZSYmKGE9dGhpcy5WZXJzaW9uaW5nLk1hdHJpeFdvcmxkTmVlZHNVcGRhdGUpO2xldCBzPXRoaXMuQmluZGluZ1R5cGUuRGlyZWN0O2lmKHZvaWQgMCE9PXIpe2lmKCJtb3JwaFRhcmdldEluZmx1ZW5jZXMiPT09aSl7aWYoIXQuZ2VvbWV0cnkpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gbW9ycGhUYXJnZXRJbmZsdWVuY2VzIGJlY2F1c2Ugbm9kZSBkb2VzIG5vdCBoYXZlIGEgZ2VvbWV0cnkuIix0aGlzKTtpZighdC5nZW9tZXRyeS5pc0J1ZmZlckdlb21ldHJ5KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG1vcnBoVGFyZ2V0SW5mbHVlbmNlcyBvbiBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIix0aGlzKTtpZighdC5nZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gbW9ycGhUYXJnZXRJbmZsdWVuY2VzIGJlY2F1c2Ugbm9kZSBkb2VzIG5vdCBoYXZlIGEgZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLiIsdGhpcyk7dm9pZCAwIT09dC5tb3JwaFRhcmdldERpY3Rpb25hcnlbcl0mJihyPXQubW9ycGhUYXJnZXREaWN0aW9uYXJ5W3JdKX1zPXRoaXMuQmluZGluZ1R5cGUuQXJyYXlFbGVtZW50LHRoaXMucmVzb2x2ZWRQcm9wZXJ0eT1vLHRoaXMucHJvcGVydHlJbmRleD1yfWVsc2Ugdm9pZCAwIT09by5mcm9tQXJyYXkmJnZvaWQgMCE9PW8udG9BcnJheT8ocz10aGlzLkJpbmRpbmdUeXBlLkhhc0Zyb21Ub0FycmF5LHRoaXMucmVzb2x2ZWRQcm9wZXJ0eT1vKTpBcnJheS5pc0FycmF5KG8pPyhzPXRoaXMuQmluZGluZ1R5cGUuRW50aXJlQXJyYXksdGhpcy5yZXNvbHZlZFByb3BlcnR5PW8pOnRoaXMucHJvcGVydHlOYW1lPWk7dGhpcy5nZXRWYWx1ZT10aGlzLkdldHRlckJ5QmluZGluZ1R5cGVbc10sdGhpcy5zZXRWYWx1ZT10aGlzLlNldHRlckJ5QmluZGluZ1R5cGVBbmRWZXJzaW9uaW5nW3NdW2FdfSx1bmJpbmQ6ZnVuY3Rpb24oKXt0aGlzLm5vZGU9bnVsbCx0aGlzLmdldFZhbHVlPXRoaXMuX2dldFZhbHVlX3VuYm91bmQsdGhpcy5zZXRWYWx1ZT10aGlzLl9zZXRWYWx1ZV91bmJvdW5kfX0pLE9iamVjdC5hc3NpZ24oWGp0LnByb3RvdHlwZSx7X2dldFZhbHVlX3VuYm91bmQ6WGp0LnByb3RvdHlwZS5nZXRWYWx1ZSxfc2V0VmFsdWVfdW5ib3VuZDpYanQucHJvdG90eXBlLnNldFZhbHVlfSksT2JqZWN0LmFzc2lnbigkanQucHJvdG90eXBlLHtpc0FuaW1hdGlvbk9iamVjdEdyb3VwOiEwLGFkZDpmdW5jdGlvbigpe2NvbnN0IHQ9dGhpcy5fb2JqZWN0cyxlPXRoaXMuX2luZGljZXNCeVVVSUQsbj10aGlzLl9wYXRocyxpPXRoaXMuX3BhcnNlZFBhdGhzLHI9dGhpcy5fYmluZGluZ3Msbz1yLmxlbmd0aDtsZXQgYSxzPXQubGVuZ3RoLGw9dGhpcy5uQ2FjaGVkT2JqZWN0c187Zm9yKGxldCBjPTAsdT1hcmd1bWVudHMubGVuZ3RoO2MhPT11OysrYyl7Y29uc3QgdT1hcmd1bWVudHNbY10saD11LnV1aWQ7bGV0IGQ9ZVtoXTtpZih2b2lkIDA9PT1kKXtkPXMrKyxlW2hdPWQsdC5wdXNoKHUpO2ZvcihsZXQgdD0wLGU9bzt0IT09ZTsrK3Qpclt0XS5wdXNoKG5ldyBYanQodSxuW3RdLGlbdF0pKX1lbHNlIGlmKGQ8bCl7YT10W2RdO2NvbnN0IHM9LS1sLGM9dFtzXTtlW2MudXVpZF09ZCx0W2RdPWMsZVtoXT1zLHRbc109dTtmb3IobGV0IHQ9MCxlPW87dCE9PWU7Kyt0KXtjb25zdCBlPXJbdF07bGV0IG89ZVtkXTtlW2RdPWVbc10sdm9pZCAwPT09byYmKG89bmV3IFhqdCh1LG5bdF0saVt0XSkpLGVbc109b319ZWxzZSB0W2RdIT09YSYmY29uc29sZS5lcnJvcigiVEhSRUUuQW5pbWF0aW9uT2JqZWN0R3JvdXA6IERpZmZlcmVudCBvYmplY3RzIHdpdGggdGhlIHNhbWUgVVVJRCBkZXRlY3RlZC4gQ2xlYW4gdGhlIGNhY2hlcyBvciByZWNyZWF0ZSB5b3VyIGluZnJhc3RydWN0dXJlIHdoZW4gcmVsb2FkaW5nIHNjZW5lcy4iKX10aGlzLm5DYWNoZWRPYmplY3RzXz1sfSxyZW1vdmU6ZnVuY3Rpb24oKXtjb25zdCB0PXRoaXMuX29iamVjdHMsZT10aGlzLl9pbmRpY2VzQnlVVUlELG49dGhpcy5fYmluZGluZ3MsaT1uLmxlbmd0aDtsZXQgcj10aGlzLm5DYWNoZWRPYmplY3RzXztmb3IobGV0IG89MCxhPWFyZ3VtZW50cy5sZW5ndGg7byE9PWE7KytvKXtjb25zdCBhPWFyZ3VtZW50c1tvXSxzPWEudXVpZCxsPWVbc107aWYodm9pZCAwIT09bCYmbD49cil7Y29uc3Qgbz1yKyssYz10W29dO2VbYy51dWlkXT1sLHRbbF09YyxlW3NdPW8sdFtvXT1hO2ZvcihsZXQgdD0wLGU9aTt0IT09ZTsrK3Qpe2NvbnN0IGU9blt0XSxpPWVbbF07ZVtsXT1lW29dLGVbb109aX19fXRoaXMubkNhY2hlZE9iamVjdHNfPXJ9LHVuY2FjaGU6ZnVuY3Rpb24oKXtjb25zdCB0PXRoaXMuX29iamVjdHMsZT10aGlzLl9pbmRpY2VzQnlVVUlELG49dGhpcy5fYmluZGluZ3MsaT1uLmxlbmd0aDtsZXQgcj10aGlzLm5DYWNoZWRPYmplY3RzXyxvPXQubGVuZ3RoO2ZvcihsZXQgYT0wLHM9YXJndW1lbnRzLmxlbmd0aDthIT09czsrK2Epe2NvbnN0IHM9YXJndW1lbnRzW2FdLnV1aWQsbD1lW3NdO2lmKHZvaWQgMCE9PWwpaWYoZGVsZXRlIGVbc10sbDxyKXtjb25zdCBhPS0tcixzPXRbYV0sYz0tLW8sdT10W2NdO2Vbcy51dWlkXT1sLHRbbF09cyxlW3UudXVpZF09YSx0W2FdPXUsdC5wb3AoKTtmb3IobGV0IHQ9MCxlPWk7dCE9PWU7Kyt0KXtjb25zdCBlPW5bdF0saT1lW2NdO2VbbF09ZVthXSxlW2FdPWksZS5wb3AoKX19ZWxzZXtjb25zdCByPS0tbyxhPXRbcl07cj4wJiYoZVthLnV1aWRdPWwpLHRbbF09YSx0LnBvcCgpO2ZvcihsZXQgdD0wLGU9aTt0IT09ZTsrK3Qpe2NvbnN0IGU9blt0XTtlW2xdPWVbcl0sZS5wb3AoKX19fXRoaXMubkNhY2hlZE9iamVjdHNfPXJ9LHN1YnNjcmliZV86ZnVuY3Rpb24odCxlKXtjb25zdCBuPXRoaXMuX2JpbmRpbmdzSW5kaWNlc0J5UGF0aDtsZXQgaT1uW3RdO2NvbnN0IHI9dGhpcy5fYmluZGluZ3M7aWYodm9pZCAwIT09aSlyZXR1cm4gcltpXTtjb25zdCBvPXRoaXMuX3BhdGhzLGE9dGhpcy5fcGFyc2VkUGF0aHMscz10aGlzLl9vYmplY3RzLGw9dGhpcy5uQ2FjaGVkT2JqZWN0c18sYz1uZXcgQXJyYXkocy5sZW5ndGgpO2k9ci5sZW5ndGgsblt0XT1pLG8ucHVzaCh0KSxhLnB1c2goZSksci5wdXNoKGMpO2ZvcihsZXQgbj1sLGk9cy5sZW5ndGg7biE9PWk7KytuKWNbbl09bmV3IFhqdChzW25dLHQsZSk7cmV0dXJuIGN9LHVuc3Vic2NyaWJlXzpmdW5jdGlvbih0KXtjb25zdCBlPXRoaXMuX2JpbmRpbmdzSW5kaWNlc0J5UGF0aCxuPWVbdF07aWYodm9pZCAwIT09bil7Y29uc3QgaT10aGlzLl9wYXRocyxyPXRoaXMuX3BhcnNlZFBhdGhzLG89dGhpcy5fYmluZGluZ3MsYT1vLmxlbmd0aC0xLHM9b1thXTtlW3RbYV1dPW4sb1tuXT1zLG8ucG9wKCkscltuXT1yW2FdLHIucG9wKCksaVtuXT1pW2FdLGkucG9wKCl9fX0pO2NsYXNzIEtqdHtjb25zdHJ1Y3Rvcih0LGUsbj1udWxsLGk9ZS5ibGVuZE1vZGUpe3RoaXMuX21peGVyPXQsdGhpcy5fY2xpcD1lLHRoaXMuX2xvY2FsUm9vdD1uLHRoaXMuYmxlbmRNb2RlPWk7Y29uc3Qgcj1lLnRyYWNrcyxvPXIubGVuZ3RoLGE9bmV3IEFycmF5KG8pLHM9e2VuZGluZ1N0YXJ0OmdPdCxlbmRpbmdFbmQ6Z090fTtmb3IobGV0IHQ9MDt0IT09bzsrK3Qpe2NvbnN0IGU9clt0XS5jcmVhdGVJbnRlcnBvbGFudChudWxsKTthW3RdPWUsZS5zZXR0aW5ncz1zfXRoaXMuX2ludGVycG9sYW50U2V0dGluZ3M9cyx0aGlzLl9pbnRlcnBvbGFudHM9YSx0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzPW5ldyBBcnJheShvKSx0aGlzLl9jYWNoZUluZGV4PW51bGwsdGhpcy5fYnlDbGlwQ2FjaGVJbmRleD1udWxsLHRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50PW51bGwsdGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ9bnVsbCx0aGlzLmxvb3A9MjIwMSx0aGlzLl9sb29wQ291bnQ9LTEsdGhpcy5fc3RhcnRUaW1lPW51bGwsdGhpcy50aW1lPTAsdGhpcy50aW1lU2NhbGU9MSx0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGU9MSx0aGlzLndlaWdodD0xLHRoaXMuX2VmZmVjdGl2ZVdlaWdodD0xLHRoaXMucmVwZXRpdGlvbnM9MS8wLHRoaXMucGF1c2VkPSExLHRoaXMuZW5hYmxlZD0hMCx0aGlzLmNsYW1wV2hlbkZpbmlzaGVkPSExLHRoaXMuemVyb1Nsb3BlQXRTdGFydD0hMCx0aGlzLnplcm9TbG9wZUF0RW5kPSEwfXBsYXkoKXtyZXR1cm4gdGhpcy5fbWl4ZXIuX2FjdGl2YXRlQWN0aW9uKHRoaXMpLHRoaXN9c3RvcCgpe3JldHVybiB0aGlzLl9taXhlci5fZGVhY3RpdmF0ZUFjdGlvbih0aGlzKSx0aGlzLnJlc2V0KCl9cmVzZXQoKXtyZXR1cm4gdGhpcy5wYXVzZWQ9ITEsdGhpcy5lbmFibGVkPSEwLHRoaXMudGltZT0wLHRoaXMuX2xvb3BDb3VudD0tMSx0aGlzLl9zdGFydFRpbWU9bnVsbCx0aGlzLnN0b3BGYWRpbmcoKS5zdG9wV2FycGluZygpfWlzUnVubmluZygpe3JldHVybiB0aGlzLmVuYWJsZWQmJiF0aGlzLnBhdXNlZCYmMCE9PXRoaXMudGltZVNjYWxlJiZudWxsPT09dGhpcy5fc3RhcnRUaW1lJiZ0aGlzLl9taXhlci5faXNBY3RpdmVBY3Rpb24odGhpcyl9aXNTY2hlZHVsZWQoKXtyZXR1cm4gdGhpcy5fbWl4ZXIuX2lzQWN0aXZlQWN0aW9uKHRoaXMpfXN0YXJ0QXQodCl7cmV0dXJuIHRoaXMuX3N0YXJ0VGltZT10LHRoaXN9c2V0TG9vcCh0LGUpe3JldHVybiB0aGlzLmxvb3A9dCx0aGlzLnJlcGV0aXRpb25zPWUsdGhpc31zZXRFZmZlY3RpdmVXZWlnaHQodCl7cmV0dXJuIHRoaXMud2VpZ2h0PXQsdGhpcy5fZWZmZWN0aXZlV2VpZ2h0PXRoaXMuZW5hYmxlZD90OjAsdGhpcy5zdG9wRmFkaW5nKCl9Z2V0RWZmZWN0aXZlV2VpZ2h0KCl7cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVdlaWdodH1mYWRlSW4odCl7cmV0dXJuIHRoaXMuX3NjaGVkdWxlRmFkaW5nKHQsMCwxKX1mYWRlT3V0KHQpe3JldHVybiB0aGlzLl9zY2hlZHVsZUZhZGluZyh0LDEsMCl9Y3Jvc3NGYWRlRnJvbSh0LGUsbil7aWYodC5mYWRlT3V0KGUpLHRoaXMuZmFkZUluKGUpLG4pe2NvbnN0IG49dGhpcy5fY2xpcC5kdXJhdGlvbixpPXQuX2NsaXAuZHVyYXRpb24scj1uL2k7dC53YXJwKDEsaS9uLGUpLHRoaXMud2FycChyLDEsZSl9cmV0dXJuIHRoaXN9Y3Jvc3NGYWRlVG8odCxlLG4pe3JldHVybiB0LmNyb3NzRmFkZUZyb20odGhpcyxlLG4pfXN0b3BGYWRpbmcoKXtjb25zdCB0PXRoaXMuX3dlaWdodEludGVycG9sYW50O3JldHVybiBudWxsIT09dCYmKHRoaXMuX3dlaWdodEludGVycG9sYW50PW51bGwsdGhpcy5fbWl4ZXIuX3Rha2VCYWNrQ29udHJvbEludGVycG9sYW50KHQpKSx0aGlzfXNldEVmZmVjdGl2ZVRpbWVTY2FsZSh0KXtyZXR1cm4gdGhpcy50aW1lU2NhbGU9dCx0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGU9dGhpcy5wYXVzZWQ/MDp0LHRoaXMuc3RvcFdhcnBpbmcoKX1nZXRFZmZlY3RpdmVUaW1lU2NhbGUoKXtyZXR1cm4gdGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlfXNldER1cmF0aW9uKHQpe3JldHVybiB0aGlzLnRpbWVTY2FsZT10aGlzLl9jbGlwLmR1cmF0aW9uL3QsdGhpcy5zdG9wV2FycGluZygpfXN5bmNXaXRoKHQpe3JldHVybiB0aGlzLnRpbWU9dC50aW1lLHRoaXMudGltZVNjYWxlPXQudGltZVNjYWxlLHRoaXMuc3RvcFdhcnBpbmcoKX1oYWx0KHQpe3JldHVybiB0aGlzLndhcnAodGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlLDAsdCl9d2FycCh0LGUsbil7Y29uc3QgaT10aGlzLl9taXhlcixyPWkudGltZSxvPXRoaXMudGltZVNjYWxlO2xldCBhPXRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50O251bGw9PT1hJiYoYT1pLl9sZW5kQ29udHJvbEludGVycG9sYW50KCksdGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ9YSk7Y29uc3Qgcz1hLnBhcmFtZXRlclBvc2l0aW9ucyxsPWEuc2FtcGxlVmFsdWVzO3JldHVybiBzWzBdPXIsc1sxXT1yK24sbFswXT10L28sbFsxXT1lL28sdGhpc31zdG9wV2FycGluZygpe2NvbnN0IHQ9dGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ7cmV0dXJuIG51bGwhPT10JiYodGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ9bnVsbCx0aGlzLl9taXhlci5fdGFrZUJhY2tDb250cm9sSW50ZXJwb2xhbnQodCkpLHRoaXN9Z2V0TWl4ZXIoKXtyZXR1cm4gdGhpcy5fbWl4ZXJ9Z2V0Q2xpcCgpe3JldHVybiB0aGlzLl9jbGlwfWdldFJvb3QoKXtyZXR1cm4gdGhpcy5fbG9jYWxSb290fHx0aGlzLl9taXhlci5fcm9vdH1fdXBkYXRlKHQsZSxuLGkpe2lmKCF0aGlzLmVuYWJsZWQpcmV0dXJuIHZvaWQgdGhpcy5fdXBkYXRlV2VpZ2h0KHQpO2NvbnN0IHI9dGhpcy5fc3RhcnRUaW1lO2lmKG51bGwhPT1yKXtjb25zdCBpPSh0LXIpKm47aWYoaTwwfHwwPT09bilyZXR1cm47dGhpcy5fc3RhcnRUaW1lPW51bGwsZT1uKml9ZSo9dGhpcy5fdXBkYXRlVGltZVNjYWxlKHQpO2NvbnN0IG89dGhpcy5fdXBkYXRlVGltZShlKSxhPXRoaXMuX3VwZGF0ZVdlaWdodCh0KTtpZihhPjApe2NvbnN0IHQ9dGhpcy5faW50ZXJwb2xhbnRzLGU9dGhpcy5fcHJvcGVydHlCaW5kaW5ncztzd2l0Y2godGhpcy5ibGVuZE1vZGUpe2Nhc2UgYk90OmZvcihsZXQgbj0wLGk9dC5sZW5ndGg7biE9PWk7KytuKXRbbl0uZXZhbHVhdGUobyksZVtuXS5hY2N1bXVsYXRlQWRkaXRpdmUoYSk7YnJlYWs7Y2FzZSB2T3Q6ZGVmYXVsdDpmb3IobGV0IG49MCxyPXQubGVuZ3RoO24hPT1yOysrbil0W25dLmV2YWx1YXRlKG8pLGVbbl0uYWNjdW11bGF0ZShpLGEpfX19X3VwZGF0ZVdlaWdodCh0KXtsZXQgZT0wO2lmKHRoaXMuZW5hYmxlZCl7ZT10aGlzLndlaWdodDtjb25zdCBuPXRoaXMuX3dlaWdodEludGVycG9sYW50O2lmKG51bGwhPT1uKXtjb25zdCBpPW4uZXZhbHVhdGUodClbMF07ZSo9aSx0Pm4ucGFyYW1ldGVyUG9zaXRpb25zWzFdJiYodGhpcy5zdG9wRmFkaW5nKCksMD09PWkmJih0aGlzLmVuYWJsZWQ9ITEpKX19cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVdlaWdodD1lLGV9X3VwZGF0ZVRpbWVTY2FsZSh0KXtsZXQgZT0wO2lmKCF0aGlzLnBhdXNlZCl7ZT10aGlzLnRpbWVTY2FsZTtjb25zdCBuPXRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50O251bGwhPT1uJiYoZSo9bi5ldmFsdWF0ZSh0KVswXSx0Pm4ucGFyYW1ldGVyUG9zaXRpb25zWzFdJiYodGhpcy5zdG9wV2FycGluZygpLDA9PT1lP3RoaXMucGF1c2VkPSEwOnRoaXMudGltZVNjYWxlPWUpKX1yZXR1cm4gdGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlPWUsZX1fdXBkYXRlVGltZSh0KXtjb25zdCBlPXRoaXMuX2NsaXAuZHVyYXRpb24sbj10aGlzLmxvb3A7bGV0IGk9dGhpcy50aW1lK3Qscj10aGlzLl9sb29wQ291bnQ7Y29uc3Qgbz0yMjAyPT09bjtpZigwPT09dClyZXR1cm4tMT09PXI/aTpvJiYxPT0oMSZyKT9lLWk6aTtpZigyMjAwPT09bil7LTE9PT1yJiYodGhpcy5fbG9vcENvdW50PTAsdGhpcy5fc2V0RW5kaW5ncyghMCwhMCwhMSkpO3Q6e2lmKGk+PWUpaT1lO2Vsc2V7aWYoIShpPDApKXt0aGlzLnRpbWU9aTticmVhayB0fWk9MH10aGlzLmNsYW1wV2hlbkZpbmlzaGVkP3RoaXMucGF1c2VkPSEwOnRoaXMuZW5hYmxlZD0hMSx0aGlzLnRpbWU9aSx0aGlzLl9taXhlci5kaXNwYXRjaEV2ZW50KHt0eXBlOiJmaW5pc2hlZCIsYWN0aW9uOnRoaXMsZGlyZWN0aW9uOnQ8MD8tMToxfSl9fWVsc2V7aWYoLTE9PT1yJiYodD49MD8ocj0wLHRoaXMuX3NldEVuZGluZ3MoITAsMD09PXRoaXMucmVwZXRpdGlvbnMsbykpOnRoaXMuX3NldEVuZGluZ3MoMD09PXRoaXMucmVwZXRpdGlvbnMsITAsbykpLGk+PWV8fGk8MCl7Y29uc3Qgbj1NYXRoLmZsb29yKGkvZSk7aS09ZSpuLHIrPU1hdGguYWJzKG4pO2NvbnN0IGE9dGhpcy5yZXBldGl0aW9ucy1yO2lmKGE8PTApdGhpcy5jbGFtcFdoZW5GaW5pc2hlZD90aGlzLnBhdXNlZD0hMDp0aGlzLmVuYWJsZWQ9ITEsaT10PjA/ZTowLHRoaXMudGltZT1pLHRoaXMuX21peGVyLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImZpbmlzaGVkIixhY3Rpb246dGhpcyxkaXJlY3Rpb246dD4wPzE6LTF9KTtlbHNle2lmKDE9PT1hKXtjb25zdCBlPXQ8MDt0aGlzLl9zZXRFbmRpbmdzKGUsIWUsbyl9ZWxzZSB0aGlzLl9zZXRFbmRpbmdzKCExLCExLG8pO3RoaXMuX2xvb3BDb3VudD1yLHRoaXMudGltZT1pLHRoaXMuX21peGVyLmRpc3BhdGNoRXZlbnQoe3R5cGU6Imxvb3AiLGFjdGlvbjp0aGlzLGxvb3BEZWx0YTpufSl9fWVsc2UgdGhpcy50aW1lPWk7aWYobyYmMT09KDEmcikpcmV0dXJuIGUtaX1yZXR1cm4gaX1fc2V0RW5kaW5ncyh0LGUsbil7Y29uc3QgaT10aGlzLl9pbnRlcnBvbGFudFNldHRpbmdzO24/KGkuZW5kaW5nU3RhcnQ9X090LGkuZW5kaW5nRW5kPV9PdCk6KGkuZW5kaW5nU3RhcnQ9dD90aGlzLnplcm9TbG9wZUF0U3RhcnQ/X090OmdPdDp5T3QsaS5lbmRpbmdFbmQ9ZT90aGlzLnplcm9TbG9wZUF0RW5kP19PdDpnT3Q6eU90KX1fc2NoZWR1bGVGYWRpbmcodCxlLG4pe2NvbnN0IGk9dGhpcy5fbWl4ZXIscj1pLnRpbWU7bGV0IG89dGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ7bnVsbD09PW8mJihvPWkuX2xlbmRDb250cm9sSW50ZXJwb2xhbnQoKSx0aGlzLl93ZWlnaHRJbnRlcnBvbGFudD1vKTtjb25zdCBhPW8ucGFyYW1ldGVyUG9zaXRpb25zLHM9by5zYW1wbGVWYWx1ZXM7cmV0dXJuIGFbMF09cixzWzBdPWUsYVsxXT1yK3Qsc1sxXT1uLHRoaXN9fWZ1bmN0aW9uIFpqdCh0KXt0aGlzLl9yb290PXQsdGhpcy5faW5pdE1lbW9yeU1hbmFnZXIoKSx0aGlzLl9hY2N1SW5kZXg9MCx0aGlzLnRpbWU9MCx0aGlzLnRpbWVTY2FsZT0xfVpqdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKE5PdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpaanQsX2JpbmRBY3Rpb246ZnVuY3Rpb24odCxlKXtjb25zdCBuPXQuX2xvY2FsUm9vdHx8dGhpcy5fcm9vdCxpPXQuX2NsaXAudHJhY2tzLHI9aS5sZW5ndGgsbz10Ll9wcm9wZXJ0eUJpbmRpbmdzLGE9dC5faW50ZXJwb2xhbnRzLHM9bi51dWlkLGw9dGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lO2xldCBjPWxbc107dm9pZCAwPT09YyYmKGM9e30sbFtzXT1jKTtmb3IobGV0IHQ9MDt0IT09cjsrK3Qpe2NvbnN0IHI9aVt0XSxsPXIubmFtZTtsZXQgdT1jW2xdO2lmKHZvaWQgMCE9PXUpb1t0XT11O2Vsc2V7aWYodT1vW3RdLHZvaWQgMCE9PXUpe251bGw9PT11Ll9jYWNoZUluZGV4JiYoKyt1LnJlZmVyZW5jZUNvdW50LHRoaXMuX2FkZEluYWN0aXZlQmluZGluZyh1LHMsbCkpO2NvbnRpbnVlfXU9bmV3IERqdChYanQuY3JlYXRlKG4sbCxlJiZlLl9wcm9wZXJ0eUJpbmRpbmdzW3RdLmJpbmRpbmcucGFyc2VkUGF0aCksci5WYWx1ZVR5cGVOYW1lLHIuZ2V0VmFsdWVTaXplKCkpLCsrdS5yZWZlcmVuY2VDb3VudCx0aGlzLl9hZGRJbmFjdGl2ZUJpbmRpbmcodSxzLGwpLG9bdF09dX1hW3RdLnJlc3VsdEJ1ZmZlcj11LmJ1ZmZlcn19LF9hY3RpdmF0ZUFjdGlvbjpmdW5jdGlvbih0KXtpZighdGhpcy5faXNBY3RpdmVBY3Rpb24odCkpe2lmKG51bGw9PT10Ll9jYWNoZUluZGV4KXtjb25zdCBlPSh0Ll9sb2NhbFJvb3R8fHRoaXMuX3Jvb3QpLnV1aWQsbj10Ll9jbGlwLnV1aWQsaT10aGlzLl9hY3Rpb25zQnlDbGlwW25dO3RoaXMuX2JpbmRBY3Rpb24odCxpJiZpLmtub3duQWN0aW9uc1swXSksdGhpcy5fYWRkSW5hY3RpdmVBY3Rpb24odCxuLGUpfWNvbnN0IGU9dC5fcHJvcGVydHlCaW5kaW5ncztmb3IobGV0IHQ9MCxuPWUubGVuZ3RoO3QhPT1uOysrdCl7Y29uc3Qgbj1lW3RdOzA9PW4udXNlQ291bnQrKyYmKHRoaXMuX2xlbmRCaW5kaW5nKG4pLG4uc2F2ZU9yaWdpbmFsU3RhdGUoKSl9dGhpcy5fbGVuZEFjdGlvbih0KX19LF9kZWFjdGl2YXRlQWN0aW9uOmZ1bmN0aW9uKHQpe2lmKHRoaXMuX2lzQWN0aXZlQWN0aW9uKHQpKXtjb25zdCBlPXQuX3Byb3BlcnR5QmluZGluZ3M7Zm9yKGxldCB0PTAsbj1lLmxlbmd0aDt0IT09bjsrK3Qpe2NvbnN0IG49ZVt0XTswPT0tLW4udXNlQ291bnQmJihuLnJlc3RvcmVPcmlnaW5hbFN0YXRlKCksdGhpcy5fdGFrZUJhY2tCaW5kaW5nKG4pKX10aGlzLl90YWtlQmFja0FjdGlvbih0KX19LF9pbml0TWVtb3J5TWFuYWdlcjpmdW5jdGlvbigpe3RoaXMuX2FjdGlvbnM9W10sdGhpcy5fbkFjdGl2ZUFjdGlvbnM9MCx0aGlzLl9hY3Rpb25zQnlDbGlwPXt9LHRoaXMuX2JpbmRpbmdzPVtdLHRoaXMuX25BY3RpdmVCaW5kaW5ncz0wLHRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZT17fSx0aGlzLl9jb250cm9sSW50ZXJwb2xhbnRzPVtdLHRoaXMuX25BY3RpdmVDb250cm9sSW50ZXJwb2xhbnRzPTA7Y29uc3QgdD10aGlzO3RoaXMuc3RhdHM9e2FjdGlvbnM6e2dldCB0b3RhbCgpe3JldHVybiB0Ll9hY3Rpb25zLmxlbmd0aH0sZ2V0IGluVXNlKCl7cmV0dXJuIHQuX25BY3RpdmVBY3Rpb25zfX0sYmluZGluZ3M6e2dldCB0b3RhbCgpe3JldHVybiB0Ll9iaW5kaW5ncy5sZW5ndGh9LGdldCBpblVzZSgpe3JldHVybiB0Ll9uQWN0aXZlQmluZGluZ3N9fSxjb250cm9sSW50ZXJwb2xhbnRzOntnZXQgdG90YWwoKXtyZXR1cm4gdC5fY29udHJvbEludGVycG9sYW50cy5sZW5ndGh9LGdldCBpblVzZSgpe3JldHVybiB0Ll9uQWN0aXZlQ29udHJvbEludGVycG9sYW50c319fX0sX2lzQWN0aXZlQWN0aW9uOmZ1bmN0aW9uKHQpe2NvbnN0IGU9dC5fY2FjaGVJbmRleDtyZXR1cm4gbnVsbCE9PWUmJmU8dGhpcy5fbkFjdGl2ZUFjdGlvbnN9LF9hZGRJbmFjdGl2ZUFjdGlvbjpmdW5jdGlvbih0LGUsbil7Y29uc3QgaT10aGlzLl9hY3Rpb25zLHI9dGhpcy5fYWN0aW9uc0J5Q2xpcDtsZXQgbz1yW2VdO2lmKHZvaWQgMD09PW8pbz17a25vd25BY3Rpb25zOlt0XSxhY3Rpb25CeVJvb3Q6e319LHQuX2J5Q2xpcENhY2hlSW5kZXg9MCxyW2VdPW87ZWxzZXtjb25zdCBlPW8ua25vd25BY3Rpb25zO3QuX2J5Q2xpcENhY2hlSW5kZXg9ZS5sZW5ndGgsZS5wdXNoKHQpfXQuX2NhY2hlSW5kZXg9aS5sZW5ndGgsaS5wdXNoKHQpLG8uYWN0aW9uQnlSb290W25dPXR9LF9yZW1vdmVJbmFjdGl2ZUFjdGlvbjpmdW5jdGlvbih0KXtjb25zdCBlPXRoaXMuX2FjdGlvbnMsbj1lW2UubGVuZ3RoLTFdLGk9dC5fY2FjaGVJbmRleDtuLl9jYWNoZUluZGV4PWksZVtpXT1uLGUucG9wKCksdC5fY2FjaGVJbmRleD1udWxsO2NvbnN0IHI9dC5fY2xpcC51dWlkLG89dGhpcy5fYWN0aW9uc0J5Q2xpcCxhPW9bcl0scz1hLmtub3duQWN0aW9ucyxsPXNbcy5sZW5ndGgtMV0sYz10Ll9ieUNsaXBDYWNoZUluZGV4O2wuX2J5Q2xpcENhY2hlSW5kZXg9YyxzW2NdPWwscy5wb3AoKSx0Ll9ieUNsaXBDYWNoZUluZGV4PW51bGwsZGVsZXRlIGEuYWN0aW9uQnlSb290Wyh0Ll9sb2NhbFJvb3R8fHRoaXMuX3Jvb3QpLnV1aWRdLDA9PT1zLmxlbmd0aCYmZGVsZXRlIG9bcl0sdGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nc0ZvckFjdGlvbih0KX0sX3JlbW92ZUluYWN0aXZlQmluZGluZ3NGb3JBY3Rpb246ZnVuY3Rpb24odCl7Y29uc3QgZT10Ll9wcm9wZXJ0eUJpbmRpbmdzO2ZvcihsZXQgdD0wLG49ZS5sZW5ndGg7dCE9PW47Kyt0KXtjb25zdCBuPWVbdF07MD09LS1uLnJlZmVyZW5jZUNvdW50JiZ0aGlzLl9yZW1vdmVJbmFjdGl2ZUJpbmRpbmcobil9fSxfbGVuZEFjdGlvbjpmdW5jdGlvbih0KXtjb25zdCBlPXRoaXMuX2FjdGlvbnMsbj10Ll9jYWNoZUluZGV4LGk9dGhpcy5fbkFjdGl2ZUFjdGlvbnMrKyxyPWVbaV07dC5fY2FjaGVJbmRleD1pLGVbaV09dCxyLl9jYWNoZUluZGV4PW4sZVtuXT1yfSxfdGFrZUJhY2tBY3Rpb246ZnVuY3Rpb24odCl7Y29uc3QgZT10aGlzLl9hY3Rpb25zLG49dC5fY2FjaGVJbmRleCxpPS0tdGhpcy5fbkFjdGl2ZUFjdGlvbnMscj1lW2ldO3QuX2NhY2hlSW5kZXg9aSxlW2ldPXQsci5fY2FjaGVJbmRleD1uLGVbbl09cn0sX2FkZEluYWN0aXZlQmluZGluZzpmdW5jdGlvbih0LGUsbil7Y29uc3QgaT10aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWUscj10aGlzLl9iaW5kaW5ncztsZXQgbz1pW2VdO3ZvaWQgMD09PW8mJihvPXt9LGlbZV09byksb1tuXT10LHQuX2NhY2hlSW5kZXg9ci5sZW5ndGgsci5wdXNoKHQpfSxfcmVtb3ZlSW5hY3RpdmVCaW5kaW5nOmZ1bmN0aW9uKHQpe2NvbnN0IGU9dGhpcy5fYmluZGluZ3Msbj10LmJpbmRpbmcsaT1uLnJvb3ROb2RlLnV1aWQscj1uLnBhdGgsbz10aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWUsYT1vW2ldLHM9ZVtlLmxlbmd0aC0xXSxsPXQuX2NhY2hlSW5kZXg7cy5fY2FjaGVJbmRleD1sLGVbbF09cyxlLnBvcCgpLGRlbGV0ZSBhW3JdLDA9PT1PYmplY3Qua2V5cyhhKS5sZW5ndGgmJmRlbGV0ZSBvW2ldfSxfbGVuZEJpbmRpbmc6ZnVuY3Rpb24odCl7Y29uc3QgZT10aGlzLl9iaW5kaW5ncyxuPXQuX2NhY2hlSW5kZXgsaT10aGlzLl9uQWN0aXZlQmluZGluZ3MrKyxyPWVbaV07dC5fY2FjaGVJbmRleD1pLGVbaV09dCxyLl9jYWNoZUluZGV4PW4sZVtuXT1yfSxfdGFrZUJhY2tCaW5kaW5nOmZ1bmN0aW9uKHQpe2NvbnN0IGU9dGhpcy5fYmluZGluZ3Msbj10Ll9jYWNoZUluZGV4LGk9LS10aGlzLl9uQWN0aXZlQmluZGluZ3Mscj1lW2ldO3QuX2NhY2hlSW5kZXg9aSxlW2ldPXQsci5fY2FjaGVJbmRleD1uLGVbbl09cn0sX2xlbmRDb250cm9sSW50ZXJwb2xhbnQ6ZnVuY3Rpb24oKXtjb25zdCB0PXRoaXMuX2NvbnRyb2xJbnRlcnBvbGFudHMsZT10aGlzLl9uQWN0aXZlQ29udHJvbEludGVycG9sYW50cysrO2xldCBuPXRbZV07cmV0dXJuIHZvaWQgMD09PW4mJihuPW5ldyBaVnQobmV3IEZsb2F0MzJBcnJheSgyKSxuZXcgRmxvYXQzMkFycmF5KDIpLDEsdGhpcy5fY29udHJvbEludGVycG9sYW50c1Jlc3VsdEJ1ZmZlciksbi5fX2NhY2hlSW5kZXg9ZSx0W2VdPW4pLG59LF90YWtlQmFja0NvbnRyb2xJbnRlcnBvbGFudDpmdW5jdGlvbih0KXtjb25zdCBlPXRoaXMuX2NvbnRyb2xJbnRlcnBvbGFudHMsbj10Ll9fY2FjaGVJbmRleCxpPS0tdGhpcy5fbkFjdGl2ZUNvbnRyb2xJbnRlcnBvbGFudHMscj1lW2ldO3QuX19jYWNoZUluZGV4PWksZVtpXT10LHIuX19jYWNoZUluZGV4PW4sZVtuXT1yfSxfY29udHJvbEludGVycG9sYW50c1Jlc3VsdEJ1ZmZlcjpuZXcgRmxvYXQzMkFycmF5KDEpLGNsaXBBY3Rpb246ZnVuY3Rpb24odCxlLG4pe2NvbnN0IGk9ZXx8dGhpcy5fcm9vdCxyPWkudXVpZDtsZXQgbz0ic3RyaW5nIj09dHlwZW9mIHQ/c1V0LmZpbmRCeU5hbWUoaSx0KTp0O2NvbnN0IGE9bnVsbCE9PW8/by51dWlkOnQscz10aGlzLl9hY3Rpb25zQnlDbGlwW2FdO2xldCBsPW51bGw7aWYodm9pZCAwPT09biYmKG49bnVsbCE9PW8/by5ibGVuZE1vZGU6dk90KSx2b2lkIDAhPT1zKXtjb25zdCB0PXMuYWN0aW9uQnlSb290W3JdO2lmKHZvaWQgMCE9PXQmJnQuYmxlbmRNb2RlPT09bilyZXR1cm4gdDtsPXMua25vd25BY3Rpb25zWzBdLG51bGw9PT1vJiYobz1sLl9jbGlwKX1pZihudWxsPT09bylyZXR1cm4gbnVsbDtjb25zdCBjPW5ldyBLanQodGhpcyxvLGUsbik7cmV0dXJuIHRoaXMuX2JpbmRBY3Rpb24oYyxsKSx0aGlzLl9hZGRJbmFjdGl2ZUFjdGlvbihjLGEsciksY30sZXhpc3RpbmdBY3Rpb246ZnVuY3Rpb24odCxlKXtjb25zdCBuPWV8fHRoaXMuX3Jvb3QsaT1uLnV1aWQscj0ic3RyaW5nIj09dHlwZW9mIHQ/c1V0LmZpbmRCeU5hbWUobix0KTp0LG89dGhpcy5fYWN0aW9uc0J5Q2xpcFtyP3IudXVpZDp0XTtyZXR1cm4gdm9pZCAwIT09byYmby5hY3Rpb25CeVJvb3RbaV18fG51bGx9LHN0b3BBbGxBY3Rpb246ZnVuY3Rpb24oKXtjb25zdCB0PXRoaXMuX2FjdGlvbnM7Zm9yKGxldCBlPXRoaXMuX25BY3RpdmVBY3Rpb25zLTE7ZT49MDstLWUpdFtlXS5zdG9wKCk7cmV0dXJuIHRoaXN9LHVwZGF0ZTpmdW5jdGlvbih0KXtjb25zdCBlPXRoaXMuX2FjdGlvbnMsbj10aGlzLl9uQWN0aXZlQWN0aW9ucyxpPXRoaXMudGltZSs9dCo9dGhpcy50aW1lU2NhbGUscj1NYXRoLnNpZ24odCksbz10aGlzLl9hY2N1SW5kZXhePTE7Zm9yKGxldCBhPTA7YSE9PW47KythKWVbYV0uX3VwZGF0ZShpLHQscixvKTtjb25zdCBhPXRoaXMuX2JpbmRpbmdzLHM9dGhpcy5fbkFjdGl2ZUJpbmRpbmdzO2ZvcihsZXQgdD0wO3QhPT1zOysrdClhW3RdLmFwcGx5KG8pO3JldHVybiB0aGlzfSxzZXRUaW1lOmZ1bmN0aW9uKHQpe3RoaXMudGltZT0wO2ZvcihsZXQgdD0wO3Q8dGhpcy5fYWN0aW9ucy5sZW5ndGg7dCsrKXRoaXMuX2FjdGlvbnNbdF0udGltZT0wO3JldHVybiB0aGlzLnVwZGF0ZSh0KX0sZ2V0Um9vdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb290fSx1bmNhY2hlQ2xpcDpmdW5jdGlvbih0KXtjb25zdCBlPXRoaXMuX2FjdGlvbnMsbj10LnV1aWQsaT10aGlzLl9hY3Rpb25zQnlDbGlwLHI9aVtuXTtpZih2b2lkIDAhPT1yKXtjb25zdCB0PXIua25vd25BY3Rpb25zO2ZvcihsZXQgbj0wLGk9dC5sZW5ndGg7biE9PWk7KytuKXtjb25zdCBpPXRbbl07dGhpcy5fZGVhY3RpdmF0ZUFjdGlvbihpKTtjb25zdCByPWkuX2NhY2hlSW5kZXgsbz1lW2UubGVuZ3RoLTFdO2kuX2NhY2hlSW5kZXg9bnVsbCxpLl9ieUNsaXBDYWNoZUluZGV4PW51bGwsby5fY2FjaGVJbmRleD1yLGVbcl09byxlLnBvcCgpLHRoaXMuX3JlbW92ZUluYWN0aXZlQmluZGluZ3NGb3JBY3Rpb24oaSl9ZGVsZXRlIGlbbl19fSx1bmNhY2hlUm9vdDpmdW5jdGlvbih0KXtjb25zdCBlPXQudXVpZCxuPXRoaXMuX2FjdGlvbnNCeUNsaXA7Zm9yKGNvbnN0IHQgaW4gbil7Y29uc3QgaT1uW3RdLmFjdGlvbkJ5Um9vdFtlXTt2b2lkIDAhPT1pJiYodGhpcy5fZGVhY3RpdmF0ZUFjdGlvbihpKSx0aGlzLl9yZW1vdmVJbmFjdGl2ZUFjdGlvbihpKSl9Y29uc3QgaT10aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWVbZV07aWYodm9pZCAwIT09aSlmb3IoY29uc3QgdCBpbiBpKXtjb25zdCBlPWlbdF07ZS5yZXN0b3JlT3JpZ2luYWxTdGF0ZSgpLHRoaXMuX3JlbW92ZUluYWN0aXZlQmluZGluZyhlKX19LHVuY2FjaGVBY3Rpb246ZnVuY3Rpb24odCxlKXtjb25zdCBuPXRoaXMuZXhpc3RpbmdBY3Rpb24odCxlKTtudWxsIT09biYmKHRoaXMuX2RlYWN0aXZhdGVBY3Rpb24obiksdGhpcy5fcmVtb3ZlSW5hY3RpdmVBY3Rpb24obikpfX0pO2NsYXNzIEpqdHtjb25zdHJ1Y3Rvcih0KXsic3RyaW5nIj09dHlwZW9mIHQmJihjb25zb2xlLndhcm4oIlRIUkVFLlVuaWZvcm06IFR5cGUgcGFyYW1ldGVyIGlzIG5vIGxvbmdlciBuZWVkZWQuIiksdD1hcmd1bWVudHNbMV0pLHRoaXMudmFsdWU9dH1jbG9uZSgpe3JldHVybiBuZXcgSmp0KHZvaWQgMD09PXRoaXMudmFsdWUuY2xvbmU/dGhpcy52YWx1ZTp0aGlzLnZhbHVlLmNsb25lKCkpfX1mdW5jdGlvbiBRanQodCxlLG4pe0lIdC5jYWxsKHRoaXMsdCxlKSx0aGlzLm1lc2hQZXJBdHRyaWJ1dGU9bnx8MX1mdW5jdGlvbiB0R3QodCxlLG4saSxyKXt0aGlzLmJ1ZmZlcj10LHRoaXMudHlwZT1lLHRoaXMuaXRlbVNpemU9bix0aGlzLmVsZW1lbnRTaXplPWksdGhpcy5jb3VudD1yLHRoaXMudmVyc2lvbj0wfWZ1bmN0aW9uIGVHdCh0LGUsbixpKXt0aGlzLnJheT1uZXcgdlJ0KHQsZSksdGhpcy5uZWFyPW58fDAsdGhpcy5mYXI9aXx8MS8wLHRoaXMuY2FtZXJhPW51bGwsdGhpcy5sYXllcnM9bmV3IFBSdCx0aGlzLnBhcmFtcz17TWVzaDp7fSxMaW5lOnt0aHJlc2hvbGQ6MX0sTE9EOnt9LFBvaW50czp7dGhyZXNob2xkOjF9LFNwcml0ZTp7fX0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcy5wYXJhbXMse1BvaW50Q2xvdWQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlJheWNhc3RlcjogcGFyYW1zLlBvaW50Q2xvdWQgaGFzIGJlZW4gcmVuYW1lZCB0byBwYXJhbXMuUG9pbnRzLiIpLHRoaXMuUG9pbnRzfX19KX1mdW5jdGlvbiBuR3QodCxlKXtyZXR1cm4gdC5kaXN0YW5jZS1lLmRpc3RhbmNlfWZ1bmN0aW9uIGlHdCh0LGUsbixpKXtpZih0LmxheWVycy50ZXN0KGUubGF5ZXJzKSYmdC5yYXljYXN0KGUsbiksITA9PT1pKXtjb25zdCBpPXQuY2hpbGRyZW47Zm9yKGxldCB0PTAscj1pLmxlbmd0aDt0PHI7dCsrKWlHdChpW3RdLGUsbiwhMCl9fVFqdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKElIdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpRanQsaXNJbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlcjohMCxjb3B5OmZ1bmN0aW9uKHQpe3JldHVybiBJSHQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMubWVzaFBlckF0dHJpYnV0ZT10Lm1lc2hQZXJBdHRyaWJ1dGUsdGhpc30sY2xvbmU6ZnVuY3Rpb24odCl7Y29uc3QgZT1JSHQucHJvdG90eXBlLmNsb25lLmNhbGwodGhpcyx0KTtyZXR1cm4gZS5tZXNoUGVyQXR0cmlidXRlPXRoaXMubWVzaFBlckF0dHJpYnV0ZSxlfSx0b0pTT046ZnVuY3Rpb24odCl7Y29uc3QgZT1JSHQucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMsdCk7cmV0dXJuIGUuaXNJbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlcj0hMCxlLm1lc2hQZXJBdHRyaWJ1dGU9dGhpcy5tZXNoUGVyQXR0cmlidXRlLGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRHdC5wcm90b3R5cGUsIm5lZWRzVXBkYXRlIix7c2V0OmZ1bmN0aW9uKHQpeyEwPT09dCYmdGhpcy52ZXJzaW9uKyt9fSksT2JqZWN0LmFzc2lnbih0R3QucHJvdG90eXBlLHtpc0dMQnVmZmVyQXR0cmlidXRlOiEwLHNldEJ1ZmZlcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5idWZmZXI9dCx0aGlzfSxzZXRUeXBlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMudHlwZT10LHRoaXMuZWxlbWVudFNpemU9ZSx0aGlzfSxzZXRJdGVtU2l6ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pdGVtU2l6ZT10LHRoaXN9LHNldENvdW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNvdW50PXQsdGhpc319KSxPYmplY3QuYXNzaWduKGVHdC5wcm90b3R5cGUse3NldDpmdW5jdGlvbih0LGUpe3RoaXMucmF5LnNldCh0LGUpfSxzZXRGcm9tQ2FtZXJhOmZ1bmN0aW9uKHQsZSl7ZSYmZS5pc1BlcnNwZWN0aXZlQ2FtZXJhPyh0aGlzLnJheS5vcmlnaW4uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGUubWF0cml4V29ybGQpLHRoaXMucmF5LmRpcmVjdGlvbi5zZXQodC54LHQueSwuNSkudW5wcm9qZWN0KGUpLnN1Yih0aGlzLnJheS5vcmlnaW4pLm5vcm1hbGl6ZSgpLHRoaXMuY2FtZXJhPWUpOmUmJmUuaXNPcnRob2dyYXBoaWNDYW1lcmE/KHRoaXMucmF5Lm9yaWdpbi5zZXQodC54LHQueSwoZS5uZWFyK2UuZmFyKS8oZS5uZWFyLWUuZmFyKSkudW5wcm9qZWN0KGUpLHRoaXMucmF5LmRpcmVjdGlvbi5zZXQoMCwwLC0xKS50cmFuc2Zvcm1EaXJlY3Rpb24oZS5tYXRyaXhXb3JsZCksdGhpcy5jYW1lcmE9ZSk6Y29uc29sZS5lcnJvcigiVEhSRUUuUmF5Y2FzdGVyOiBVbnN1cHBvcnRlZCBjYW1lcmEgdHlwZTogIitlLnR5cGUpfSxpbnRlcnNlY3RPYmplY3Q6ZnVuY3Rpb24odCxlLG4pe2NvbnN0IGk9bnx8W107cmV0dXJuIGlHdCh0LHRoaXMsaSxlKSxpLnNvcnQobkd0KSxpfSxpbnRlcnNlY3RPYmplY3RzOmZ1bmN0aW9uKHQsZSxuKXtjb25zdCBpPW58fFtdO2lmKCExPT09QXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5SYXljYXN0ZXIuaW50ZXJzZWN0T2JqZWN0czogb2JqZWN0cyBpcyBub3QgYW4gQXJyYXkuIiksaTtmb3IobGV0IG49MCxyPXQubGVuZ3RoO248cjtuKyspaUd0KHRbbl0sdGhpcyxpLGUpO3JldHVybiBpLnNvcnQobkd0KSxpfX0pO2NsYXNzIHJHdHtjb25zdHJ1Y3Rvcih0PTEsZT0wLG49MCl7cmV0dXJuIHRoaXMucmFkaXVzPXQsdGhpcy5waGk9ZSx0aGlzLnRoZXRhPW4sdGhpc31zZXQodCxlLG4pe3JldHVybiB0aGlzLnJhZGl1cz10LHRoaXMucGhpPWUsdGhpcy50aGV0YT1uLHRoaXN9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9Y29weSh0KXtyZXR1cm4gdGhpcy5yYWRpdXM9dC5yYWRpdXMsdGhpcy5waGk9dC5waGksdGhpcy50aGV0YT10LnRoZXRhLHRoaXN9bWFrZVNhZmUoKXtjb25zdCB0PTFlLTY7cmV0dXJuIHRoaXMucGhpPU1hdGgubWF4KHQsTWF0aC5taW4oTWF0aC5QSS10LHRoaXMucGhpKSksdGhpc31zZXRGcm9tVmVjdG9yMyh0KXtyZXR1cm4gdGhpcy5zZXRGcm9tQ2FydGVzaWFuQ29vcmRzKHQueCx0LnksdC56KX1zZXRGcm9tQ2FydGVzaWFuQ29vcmRzKHQsZSxuKXtyZXR1cm4gdGhpcy5yYWRpdXM9TWF0aC5zcXJ0KHQqdCtlKmUrbipuKSwwPT09dGhpcy5yYWRpdXM/KHRoaXMudGhldGE9MCx0aGlzLnBoaT0wKToodGhpcy50aGV0YT1NYXRoLmF0YW4yKHQsbiksdGhpcy5waGk9TWF0aC5hY29zKFJPdC5jbGFtcChlL3RoaXMucmFkaXVzLC0xLDEpKSksdGhpc319Y29uc3Qgb0d0PW5ldyB6T3Q7Y2xhc3MgYUd0e2NvbnN0cnVjdG9yKHQsZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlzQm94MiIse3ZhbHVlOiEwfSksdGhpcy5taW49dm9pZCAwIT09dD90Om5ldyB6T3QoMS8wLDEvMCksdGhpcy5tYXg9dm9pZCAwIT09ZT9lOm5ldyB6T3QoLTEvMCwtMS8wKX1zZXQodCxlKXtyZXR1cm4gdGhpcy5taW4uY29weSh0KSx0aGlzLm1heC5jb3B5KGUpLHRoaXN9c2V0RnJvbVBvaW50cyh0KXt0aGlzLm1ha2VFbXB0eSgpO2ZvcihsZXQgZT0wLG49dC5sZW5ndGg7ZTxuO2UrKyl0aGlzLmV4cGFuZEJ5UG9pbnQodFtlXSk7cmV0dXJuIHRoaXN9c2V0RnJvbUNlbnRlckFuZFNpemUodCxlKXtjb25zdCBuPW9HdC5jb3B5KGUpLm11bHRpcGx5U2NhbGFyKC41KTtyZXR1cm4gdGhpcy5taW4uY29weSh0KS5zdWIobiksdGhpcy5tYXguY29weSh0KS5hZGQobiksdGhpc31jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLm1pbi5jb3B5KHQubWluKSx0aGlzLm1heC5jb3B5KHQubWF4KSx0aGlzfW1ha2VFbXB0eSgpe3JldHVybiB0aGlzLm1pbi54PXRoaXMubWluLnk9MS8wLHRoaXMubWF4Lng9dGhpcy5tYXgueT0tMS8wLHRoaXN9aXNFbXB0eSgpe3JldHVybiB0aGlzLm1heC54PHRoaXMubWluLnh8fHRoaXMubWF4Lnk8dGhpcy5taW4ueX1nZXRDZW50ZXIodCl7cmV0dXJuIHZvaWQgMD09PXQmJihjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5nZXRDZW50ZXIoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIiksdD1uZXcgek90KSx0aGlzLmlzRW1wdHkoKT90LnNldCgwLDApOnQuYWRkVmVjdG9ycyh0aGlzLm1pbix0aGlzLm1heCkubXVsdGlwbHlTY2FsYXIoLjUpfWdldFNpemUodCl7cmV0dXJuIHZvaWQgMD09PXQmJihjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5nZXRTaXplKCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLHQ9bmV3IHpPdCksdGhpcy5pc0VtcHR5KCk/dC5zZXQoMCwwKTp0LnN1YlZlY3RvcnModGhpcy5tYXgsdGhpcy5taW4pfWV4cGFuZEJ5UG9pbnQodCl7cmV0dXJuIHRoaXMubWluLm1pbih0KSx0aGlzLm1heC5tYXgodCksdGhpc31leHBhbmRCeVZlY3Rvcih0KXtyZXR1cm4gdGhpcy5taW4uc3ViKHQpLHRoaXMubWF4LmFkZCh0KSx0aGlzfWV4cGFuZEJ5U2NhbGFyKHQpe3JldHVybiB0aGlzLm1pbi5hZGRTY2FsYXIoLXQpLHRoaXMubWF4LmFkZFNjYWxhcih0KSx0aGlzfWNvbnRhaW5zUG9pbnQodCl7cmV0dXJuISh0Lng8dGhpcy5taW4ueHx8dC54PnRoaXMubWF4Lnh8fHQueTx0aGlzLm1pbi55fHx0Lnk+dGhpcy5tYXgueSl9Y29udGFpbnNCb3godCl7cmV0dXJuIHRoaXMubWluLng8PXQubWluLngmJnQubWF4Lng8PXRoaXMubWF4LngmJnRoaXMubWluLnk8PXQubWluLnkmJnQubWF4Lnk8PXRoaXMubWF4Lnl9Z2V0UGFyYW1ldGVyKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5nZXRQYXJhbWV0ZXIoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIiksZT1uZXcgek90KSxlLnNldCgodC54LXRoaXMubWluLngpLyh0aGlzLm1heC54LXRoaXMubWluLngpLCh0LnktdGhpcy5taW4ueSkvKHRoaXMubWF4LnktdGhpcy5taW4ueSkpfWludGVyc2VjdHNCb3godCl7cmV0dXJuISh0Lm1heC54PHRoaXMubWluLnh8fHQubWluLng+dGhpcy5tYXgueHx8dC5tYXgueTx0aGlzLm1pbi55fHx0Lm1pbi55PnRoaXMubWF4LnkpfWNsYW1wUG9pbnQodCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGNvbnNvbGUud2FybigiVEhSRUUuQm94MjogLmNsYW1wUG9pbnQoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIiksZT1uZXcgek90KSxlLmNvcHkodCkuY2xhbXAodGhpcy5taW4sdGhpcy5tYXgpfWRpc3RhbmNlVG9Qb2ludCh0KXtyZXR1cm4gb0d0LmNvcHkodCkuY2xhbXAodGhpcy5taW4sdGhpcy5tYXgpLnN1Yih0KS5sZW5ndGgoKX1pbnRlcnNlY3QodCl7cmV0dXJuIHRoaXMubWluLm1heCh0Lm1pbiksdGhpcy5tYXgubWluKHQubWF4KSx0aGlzfXVuaW9uKHQpe3JldHVybiB0aGlzLm1pbi5taW4odC5taW4pLHRoaXMubWF4Lm1heCh0Lm1heCksdGhpc310cmFuc2xhdGUodCl7cmV0dXJuIHRoaXMubWluLmFkZCh0KSx0aGlzLm1heC5hZGQodCksdGhpc31lcXVhbHModCl7cmV0dXJuIHQubWluLmVxdWFscyh0aGlzLm1pbikmJnQubWF4LmVxdWFscyh0aGlzLm1heCl9fWNvbnN0IHNHdD1uZXcgcU90LGxHdD1uZXcgcU90O2NsYXNzIGNHdHtjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuc3RhcnQ9dm9pZCAwIT09dD90Om5ldyBxT3QsdGhpcy5lbmQ9dm9pZCAwIT09ZT9lOm5ldyBxT3R9c2V0KHQsZSl7cmV0dXJuIHRoaXMuc3RhcnQuY29weSh0KSx0aGlzLmVuZC5jb3B5KGUpLHRoaXN9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9Y29weSh0KXtyZXR1cm4gdGhpcy5zdGFydC5jb3B5KHQuc3RhcnQpLHRoaXMuZW5kLmNvcHkodC5lbmQpLHRoaXN9Z2V0Q2VudGVyKHQpe3JldHVybiB2b2lkIDA9PT10JiYoY29uc29sZS53YXJuKCJUSFJFRS5MaW5lMzogLmdldENlbnRlcigpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSx0PW5ldyBxT3QpLHQuYWRkVmVjdG9ycyh0aGlzLnN0YXJ0LHRoaXMuZW5kKS5tdWx0aXBseVNjYWxhciguNSl9ZGVsdGEodCl7cmV0dXJuIHZvaWQgMD09PXQmJihjb25zb2xlLndhcm4oIlRIUkVFLkxpbmUzOiAuZGVsdGEoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIiksdD1uZXcgcU90KSx0LnN1YlZlY3RvcnModGhpcy5lbmQsdGhpcy5zdGFydCl9ZGlzdGFuY2VTcSgpe3JldHVybiB0aGlzLnN0YXJ0LmRpc3RhbmNlVG9TcXVhcmVkKHRoaXMuZW5kKX1kaXN0YW5jZSgpe3JldHVybiB0aGlzLnN0YXJ0LmRpc3RhbmNlVG8odGhpcy5lbmQpfWF0KHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihjb25zb2xlLndhcm4oIlRIUkVFLkxpbmUzOiAuYXQoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIiksZT1uZXcgcU90KSx0aGlzLmRlbHRhKGUpLm11bHRpcGx5U2NhbGFyKHQpLmFkZCh0aGlzLnN0YXJ0KX1jbG9zZXN0UG9pbnRUb1BvaW50UGFyYW1ldGVyKHQsZSl7c0d0LnN1YlZlY3RvcnModCx0aGlzLnN0YXJ0KSxsR3Quc3ViVmVjdG9ycyh0aGlzLmVuZCx0aGlzLnN0YXJ0KTtjb25zdCBuPWxHdC5kb3QobEd0KTtsZXQgaT1sR3QuZG90KHNHdCkvbjtyZXR1cm4gZSYmKGk9Uk90LmNsYW1wKGksMCwxKSksaX1jbG9zZXN0UG9pbnRUb1BvaW50KHQsZSxuKXtjb25zdCBpPXRoaXMuY2xvc2VzdFBvaW50VG9Qb2ludFBhcmFtZXRlcih0LGUpO3JldHVybiB2b2lkIDA9PT1uJiYoY29uc29sZS53YXJuKCJUSFJFRS5MaW5lMzogLmNsb3Nlc3RQb2ludFRvUG9pbnQoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIiksbj1uZXcgcU90KSx0aGlzLmRlbHRhKG4pLm11bHRpcGx5U2NhbGFyKGkpLmFkZCh0aGlzLnN0YXJ0KX1hcHBseU1hdHJpeDQodCl7cmV0dXJuIHRoaXMuc3RhcnQuYXBwbHlNYXRyaXg0KHQpLHRoaXMuZW5kLmFwcGx5TWF0cml4NCh0KSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5zdGFydC5lcXVhbHModGhpcy5zdGFydCkmJnQuZW5kLmVxdWFscyh0aGlzLmVuZCl9fWZ1bmN0aW9uIHVHdCh0KXtXUnQuY2FsbCh0aGlzKSx0aGlzLm1hdGVyaWFsPXQsdGhpcy5yZW5kZXI9ZnVuY3Rpb24oKXt9LHRoaXMuaGFzUG9zaXRpb25zPSExLHRoaXMuaGFzTm9ybWFscz0hMSx0aGlzLmhhc0NvbG9ycz0hMSx0aGlzLmhhc1V2cz0hMSx0aGlzLnBvc2l0aW9uQXJyYXk9bnVsbCx0aGlzLm5vcm1hbEFycmF5PW51bGwsdGhpcy5jb2xvckFycmF5PW51bGwsdGhpcy51dkFycmF5PW51bGwsdGhpcy5jb3VudD0wfSh1R3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoV1J0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPXVHdCx1R3QucHJvdG90eXBlLmlzSW1tZWRpYXRlUmVuZGVyT2JqZWN0PSEwO2NvbnN0IGhHdD1uZXcgcU90LGRHdD1uZXcgcU90LHBHdD1uZXcgYlJ0LGZHdD1uZXcgYlJ0O2NsYXNzIG1HdCBleHRlbmRzIEVGdHtjb25zdHJ1Y3Rvcih0KXtjb25zdCBlPWdHdCh0KSxuPW5ldyBWenQsaT1bXSxyPVtdLG89bmV3IHB6dCgwLDAsMSksYT1uZXcgcHp0KDAsMSwwKTtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyl7Y29uc3Qgbj1lW3RdO24ucGFyZW50JiZuLnBhcmVudC5pc0JvbmUmJihpLnB1c2goMCwwLDApLGkucHVzaCgwLDAsMCksci5wdXNoKG8ucixvLmcsby5iKSxyLnB1c2goYS5yLGEuZyxhLmIpKX1uLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBrenQoaSwzKSksbi5zZXRBdHRyaWJ1dGUoImNvbG9yIixuZXcga3p0KHIsMykpLHN1cGVyKG4sbmV3IGdGdCh7dmVydGV4Q29sb3JzOiEwLGRlcHRoVGVzdDohMSxkZXB0aFdyaXRlOiExLHRvbmVNYXBwZWQ6ITEsdHJhbnNwYXJlbnQ6ITB9KSksdGhpcy50eXBlPSJTa2VsZXRvbkhlbHBlciIsdGhpcy5pc1NrZWxldG9uSGVscGVyPSEwLHRoaXMucm9vdD10LHRoaXMuYm9uZXM9ZSx0aGlzLm1hdHJpeD10Lm1hdHJpeFdvcmxkLHRoaXMubWF0cml4QXV0b1VwZGF0ZT0hMX11cGRhdGVNYXRyaXhXb3JsZCh0KXtjb25zdCBlPXRoaXMuYm9uZXMsbj10aGlzLmdlb21ldHJ5LGk9bi5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIik7Zkd0LmNvcHkodGhpcy5yb290Lm1hdHJpeFdvcmxkKS5pbnZlcnQoKTtmb3IobGV0IHQ9MCxuPTA7dDxlLmxlbmd0aDt0Kyspe2NvbnN0IHI9ZVt0XTtyLnBhcmVudCYmci5wYXJlbnQuaXNCb25lJiYocEd0Lm11bHRpcGx5TWF0cmljZXMoZkd0LHIubWF0cml4V29ybGQpLGRHdC5zZXRGcm9tTWF0cml4UG9zaXRpb24ocEd0KSxpLnNldFhZWihuLGRHdC54LGRHdC55LGRHdC56KSxwR3QubXVsdGlwbHlNYXRyaWNlcyhmR3Qsci5wYXJlbnQubWF0cml4V29ybGQpLGRHdC5zZXRGcm9tTWF0cml4UG9zaXRpb24ocEd0KSxpLnNldFhZWihuKzEsZEd0LngsZEd0LnksZEd0LnopLG4rPTIpfW4uZ2V0QXR0cmlidXRlKCJwb3NpdGlvbiIpLm5lZWRzVXBkYXRlPSEwLHN1cGVyLnVwZGF0ZU1hdHJpeFdvcmxkKHQpfX1mdW5jdGlvbiBnR3QodCl7Y29uc3QgZT1bXTt0JiZ0LmlzQm9uZSYmZS5wdXNoKHQpO2ZvcihsZXQgbj0wO248dC5jaGlsZHJlbi5sZW5ndGg7bisrKWUucHVzaC5hcHBseShlLGdHdCh0LmNoaWxkcmVuW25dKSk7cmV0dXJuIGV9Y29uc3QgX0d0PW5ldyBxT3QseUd0PW5ldyBwenQsdkd0PW5ldyBwenQ7Y2xhc3MgYkd0IGV4dGVuZHMgRUZ0e2NvbnN0cnVjdG9yKHQ9MTAsZT0xMCxuPTQ0NzM5MjQsaT04OTQ3ODQ4KXtuPW5ldyBwenQobiksaT1uZXcgcHp0KGkpO2NvbnN0IHI9ZS8yLG89dC9lLGE9dC8yLHM9W10sbD1bXTtmb3IobGV0IHQ9MCxjPTAsdT0tYTt0PD1lO3QrKyx1Kz1vKXtzLnB1c2goLWEsMCx1LGEsMCx1KSxzLnB1c2godSwwLC1hLHUsMCxhKTtjb25zdCBlPXQ9PT1yP246aTtlLnRvQXJyYXkobCxjKSxjKz0zLGUudG9BcnJheShsLGMpLGMrPTMsZS50b0FycmF5KGwsYyksYys9MyxlLnRvQXJyYXkobCxjKSxjKz0zfWNvbnN0IGM9bmV3IFZ6dDtjLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBrenQocywzKSksYy5zZXRBdHRyaWJ1dGUoImNvbG9yIixuZXcga3p0KGwsMykpLHN1cGVyKGMsbmV3IGdGdCh7dmVydGV4Q29sb3JzOiEwLHRvbmVNYXBwZWQ6ITF9KSksdGhpcy50eXBlPSJHcmlkSGVscGVyIn19Y29uc3QgeEd0PW5ldyBxT3Qsd0d0PW5ldyBxT3QsU0d0PW5ldyBxT3QsTUd0PW5ldyBxT3QsRUd0PW5ldyBkRHQ7ZnVuY3Rpb24gVEd0KHQsZSxuLGkscixvLGEpe01HdC5zZXQocixvLGEpLnVucHJvamVjdChpKTtjb25zdCBzPWVbdF07aWYodm9pZCAwIT09cyl7Y29uc3QgdD1uLmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKTtmb3IobGV0IGU9MCxuPXMubGVuZ3RoO2U8bjtlKyspdC5zZXRYWVooc1tlXSxNR3QueCxNR3QueSxNR3Queil9fWNvbnN0IENHdD1uZXcgJE90O2NsYXNzIEFHdCBleHRlbmRzIEVGdHtjb25zdHJ1Y3Rvcih0LGU9MTY3NzY5NjApe2NvbnN0IG49bmV3IFVpbnQxNkFycmF5KFswLDEsMSwyLDIsMywzLDAsNCw1LDUsNiw2LDcsNyw0LDAsNCwxLDUsMiw2LDMsN10pLGk9bmV3IEZsb2F0MzJBcnJheSgyNCkscj1uZXcgVnp0O3Iuc2V0SW5kZXgobmV3IGJ6dChuLDEpKSxyLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBienQoaSwzKSksc3VwZXIocixuZXcgZ0Z0KHtjb2xvcjplLHRvbmVNYXBwZWQ6ITF9KSksdGhpcy5vYmplY3Q9dCx0aGlzLnR5cGU9IkJveEhlbHBlciIsdGhpcy5tYXRyaXhBdXRvVXBkYXRlPSExLHRoaXMudXBkYXRlKCl9dXBkYXRlKHQpe2lmKHZvaWQgMCE9PXQmJmNvbnNvbGUud2FybigiVEhSRUUuQm94SGVscGVyOiAudXBkYXRlKCkgaGFzIG5vIGxvbmdlciBhcmd1bWVudHMuIiksdm9pZCAwIT09dGhpcy5vYmplY3QmJkNHdC5zZXRGcm9tT2JqZWN0KHRoaXMub2JqZWN0KSxDR3QuaXNFbXB0eSgpKXJldHVybjtjb25zdCBlPUNHdC5taW4sbj1DR3QubWF4LGk9dGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLHI9aS5hcnJheTtyWzBdPW4ueCxyWzFdPW4ueSxyWzJdPW4ueixyWzNdPWUueCxyWzRdPW4ueSxyWzVdPW4ueixyWzZdPWUueCxyWzddPWUueSxyWzhdPW4ueixyWzldPW4ueCxyWzEwXT1lLnksclsxMV09bi56LHJbMTJdPW4ueCxyWzEzXT1uLnksclsxNF09ZS56LHJbMTVdPWUueCxyWzE2XT1uLnksclsxN109ZS56LHJbMThdPWUueCxyWzE5XT1lLnksclsyMF09ZS56LHJbMjFdPW4ueCxyWzIyXT1lLnksclsyM109ZS56LGkubmVlZHNVcGRhdGU9ITAsdGhpcy5nZW9tZXRyeS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKX1zZXRGcm9tT2JqZWN0KHQpe3JldHVybiB0aGlzLm9iamVjdD10LHRoaXMudXBkYXRlKCksdGhpc31jb3B5KHQpe3JldHVybiBFRnQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMub2JqZWN0PXQub2JqZWN0LHRoaXN9fWNvbnN0IGtHdD1uZXcgcU90O2xldCBMR3QsUEd0O2NsYXNzIE5HdCBleHRlbmRzIEVGdHtjb25zdHJ1Y3Rvcih0PTEpe2NvbnN0IGU9WzAsMCwwLHQsMCwwLDAsMCwwLDAsdCwwLDAsMCwwLDAsMCx0XSxuPW5ldyBWenQ7bi5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcga3p0KGUsMykpLG4uc2V0QXR0cmlidXRlKCJjb2xvciIsbmV3IGt6dChbMSwwLDAsMSwuNiwwLDAsMSwwLC42LDEsMCwwLDAsMSwwLC42LDFdLDMpKSxzdXBlcihuLG5ldyBnRnQoe3ZlcnRleENvbG9yczohMCx0b25lTWFwcGVkOiExfSkpLHRoaXMudHlwZT0iQXhlc0hlbHBlciJ9fWNvbnN0IElHdD1uZXcgRmxvYXQzMkFycmF5KDEpLE9HdD1uZXcgSW50MzJBcnJheShJR3QuYnVmZmVyKSxSR3Q9e3RvSGFsZkZsb2F0OmZ1bmN0aW9uKHQpe0lHdFswXT10O2NvbnN0IGU9T0d0WzBdO2xldCBuPWU+PjE2JjMyNzY4LGk9ZT4+MTImMjA0Nztjb25zdCByPWU+PjIzJjI1NTtyZXR1cm4gcjwxMDM/bjpyPjE0Mj8obnw9MzE3NDQsbnw9KDI1NT09cj8wOjEpJiY4Mzg4NjA3JmUsbik6cjwxMTM/KGl8PTIwNDgsbnw9KGk+PjExNC1yKSsoaT4+MTEzLXImMSksbik6KG58PXItMTEyPDwxMHxpPj4xLG4rPTEmaSxuKX19LHpHdD1NYXRoLnBvdygyLDgpLERHdD1bLjEyNSwuMjE1LC4zNSwuNDQ2LC41MjYsLjU4Ml0sQkd0PTUrREd0Lmxlbmd0aCxIR3Q9e1t4T3RdOjAsW3dPdF06MSxbTU90XToyLFtFT3RdOjMsW1RPdF06NCxbQ090XTo1LFtTT3RdOjZ9LEZHdD1uZXcgX3p0KHtzaWRlOjEsZGVwdGhXcml0ZTohMSxkZXB0aFRlc3Q6ITF9KSxWR3Q9bmV3IG9EdChuZXcgc0R0LEZHdCksVUd0PW5ldyBaVXQse19sb2RQbGFuZXM6akd0LF9zaXplTG9kczpHR3QsX3NpZ21hczpXR3R9PVFHdCgpLHFHdD1uZXcgcHp0O2xldCBZR3Q9bnVsbDtjb25zdCBYR3Q9KDErTWF0aC5zcXJ0KDUpKS8yLCRHdD0xL1hHdCxLR3Q9W25ldyBxT3QoMSwxLDEpLG5ldyBxT3QoLTEsMSwxKSxuZXcgcU90KDEsMSwtMSksbmV3IHFPdCgtMSwxLC0xKSxuZXcgcU90KDAsWEd0LCRHdCksbmV3IHFPdCgwLFhHdCwtJEd0KSxuZXcgcU90KCRHdCwwLFhHdCksbmV3IHFPdCgtJEd0LDAsWEd0KSxuZXcgcU90KFhHdCwkR3QsMCksbmV3IHFPdCgtWEd0LCRHdCwwKV07ZnVuY3Rpb24gWkd0KHQpe2NvbnN0IGU9TWF0aC5tYXgodC5yLHQuZyx0LmIpLG49TWF0aC5taW4oTWF0aC5tYXgoTWF0aC5jZWlsKE1hdGgubG9nMihlKSksLTEyOCksMTI3KTtyZXR1cm4gdC5tdWx0aXBseVNjYWxhcihNYXRoLnBvdygyLC1uKSksKG4rMTI4KS8yNTV9ZnVuY3Rpb24gSkd0KHQpe3JldHVybiB2b2lkIDAhPT10JiZ0LnR5cGU9PT1ZSXQmJih0LmVuY29kaW5nPT09eE90fHx0LmVuY29kaW5nPT09d090fHx0LmVuY29kaW5nPT09U090KX1mdW5jdGlvbiBRR3QoKXtjb25zdCB0PVtdLGU9W10sbj1bXTtsZXQgaT04O2ZvcihsZXQgcj0wO3I8Qkd0O3IrKyl7Y29uc3Qgbz1NYXRoLnBvdygyLGkpO2UucHVzaChvKTtsZXQgYT0xL287cj40P2E9REd0W3ItOCs0LTFdOjA9PXImJihhPTApLG4ucHVzaChhKTtjb25zdCBzPTEvKG8tMSksbD0tcy8yLGM9MStzLzIsdT1bbCxsLGMsbCxjLGMsbCxsLGMsYyxsLGNdLGg9NixkPTYscD0zLGY9MixtPTEsZz1uZXcgRmxvYXQzMkFycmF5KHAqZCpoKSxfPW5ldyBGbG9hdDMyQXJyYXkoZipkKmgpLHk9bmV3IEZsb2F0MzJBcnJheShtKmQqaCk7Zm9yKGxldCB0PTA7dDxoO3QrKyl7Y29uc3QgZT10JTMqMi8zLTEsbj10PjI/MDotMTtnLnNldChbZSxuLDAsZSsyLzMsbiwwLGUrMi8zLG4rMSwwLGUsbiwwLGUrMi8zLG4rMSwwLGUsbisxLDBdLHAqZCp0KSxfLnNldCh1LGYqZCp0KSx5LnNldChbdCx0LHQsdCx0LHRdLG0qZCp0KX1jb25zdCB2PW5ldyBWenQ7di5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgYnp0KGcscCkpLHYuc2V0QXR0cmlidXRlKCJ1diIsbmV3IGJ6dChfLGYpKSx2LnNldEF0dHJpYnV0ZSgiZmFjZUluZGV4IixuZXcgYnp0KHksbSkpLHQucHVzaCh2KSxpPjQmJmktLX1yZXR1cm57X2xvZFBsYW5lczp0LF9zaXplTG9kczplLF9zaWdtYXM6bn19ZnVuY3Rpb24gdFd0KHQpe2NvbnN0IGU9bmV3IEdPdCgzKnpHdCwzKnpHdCx0KTtyZXR1cm4gZS50ZXh0dXJlLm1hcHBpbmc9ekl0LGUudGV4dHVyZS5uYW1lPSJQTVJFTS5jdWJlVXYiLGUuc2Npc3NvclRlc3Q9ITAsZX1mdW5jdGlvbiBlV3QodCxlLG4saSxyKXt0LnZpZXdwb3J0LnNldChlLG4saSxyKSx0LnNjaXNzb3Iuc2V0KGUsbixpLHIpfWZ1bmN0aW9uIG5XdCgpe3JldHVybiBuZXcgQlZ0KHtuYW1lOiJFcXVpcmVjdGFuZ3VsYXJUb0N1YmVVViIsdW5pZm9ybXM6e2Vudk1hcDp7dmFsdWU6bnVsbH0sdGV4ZWxTaXplOnt2YWx1ZTpuZXcgek90KDEsMSl9LGlucHV0RW5jb2Rpbmc6e3ZhbHVlOkhHdFszZTNdfSxvdXRwdXRFbmNvZGluZzp7dmFsdWU6SEd0WzNlM119fSx2ZXJ0ZXhTaGFkZXI6IlxuXG5cdFx0cHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG5cdFx0cHJlY2lzaW9uIG1lZGl1bXAgaW50O1xuXG5cdFx0YXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG5cdFx0YXR0cmlidXRlIHZlYzIgdXY7XG5cdFx0YXR0cmlidXRlIGZsb2F0IGZhY2VJbmRleDtcblxuXHRcdHZhcnlpbmcgdmVjMyB2T3V0cHV0RGlyZWN0aW9uO1xuXG5cdFx0Ly8gUkggY29vcmRpbmF0ZSBzeXN0ZW07IFBNUkVNIGZhY2UtaW5kZXhpbmcgY29udmVudGlvblxuXHRcdHZlYzMgZ2V0RGlyZWN0aW9uKCB2ZWMyIHV2LCBmbG9hdCBmYWNlICkge1xuXG5cdFx0XHR1diA9IDIuMCAqIHV2IC0gMS4wO1xuXG5cdFx0XHR2ZWMzIGRpcmVjdGlvbiA9IHZlYzMoIHV2LCAxLjAgKTtcblxuXHRcdFx0aWYgKCBmYWNlID09IDAuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24gPSBkaXJlY3Rpb24uenl4OyAvLyAoIDEsIHYsIHUgKSBwb3MgeFxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDEuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24gPSBkaXJlY3Rpb24ueHp5O1xuXHRcdFx0XHRkaXJlY3Rpb24ueHogKj0gLTEuMDsgLy8gKCAtdSwgMSwgLXYgKSBwb3MgeVxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDIuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24ueCAqPSAtMS4wOyAvLyAoIC11LCB2LCAxICkgcG9zIHpcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSAzLjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uID0gZGlyZWN0aW9uLnp5eDtcblx0XHRcdFx0ZGlyZWN0aW9uLnh6ICo9IC0xLjA7IC8vICggLTEsIHYsIC11ICkgbmVnIHhcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSA0LjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uID0gZGlyZWN0aW9uLnh6eTtcblx0XHRcdFx0ZGlyZWN0aW9uLnh5ICo9IC0xLjA7IC8vICggLXUsIC0xLCB2ICkgbmVnIHlcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSA1LjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uLnogKj0gLTEuMDsgLy8gKCB1LCB2LCAtMSApIG5lZyB6XG5cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGRpcmVjdGlvbjtcblxuXHRcdH1cblxuXHRcdHZvaWQgbWFpbigpIHtcblxuXHRcdFx0dk91dHB1dERpcmVjdGlvbiA9IGdldERpcmVjdGlvbiggdXYsIGZhY2VJbmRleCApO1xuXHRcdFx0Z2xfUG9zaXRpb24gPSB2ZWM0KCBwb3NpdGlvbiwgMS4wICk7XG5cblx0XHR9XG5cdCIsZnJhZ21lbnRTaGFkZXI6IlxuXG5cdFx0XHRwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcblx0XHRcdHByZWNpc2lvbiBtZWRpdW1wIGludDtcblxuXHRcdFx0dmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247XG5cblx0XHRcdHVuaWZvcm0gc2FtcGxlcjJEIGVudk1hcDtcblx0XHRcdHVuaWZvcm0gdmVjMiB0ZXhlbFNpemU7XG5cblx0XHRcdFxuXG5cdFx0dW5pZm9ybSBpbnQgaW5wdXRFbmNvZGluZztcblx0XHR1bmlmb3JtIGludCBvdXRwdXRFbmNvZGluZztcblxuXHRcdCNpbmNsdWRlIDxlbmNvZGluZ3NfcGFyc19mcmFnbWVudD5cblxuXHRcdHZlYzQgaW5wdXRUZXhlbFRvTGluZWFyKCB2ZWM0IHZhbHVlICkge1xuXG5cdFx0XHRpZiAoIGlucHV0RW5jb2RpbmcgPT0gMCApIHtcblxuXHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cblx0XHRcdH0gZWxzZSBpZiAoIGlucHV0RW5jb2RpbmcgPT0gMSApIHtcblxuXHRcdFx0XHRyZXR1cm4gc1JHQlRvTGluZWFyKCB2YWx1ZSApO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBpbnB1dEVuY29kaW5nID09IDIgKSB7XG5cblx0XHRcdFx0cmV0dXJuIFJHQkVUb0xpbmVhciggdmFsdWUgKTtcblxuXHRcdFx0fSBlbHNlIGlmICggaW5wdXRFbmNvZGluZyA9PSAzICkge1xuXG5cdFx0XHRcdHJldHVybiBSR0JNVG9MaW5lYXIoIHZhbHVlLCA3LjAgKTtcblxuXHRcdFx0fSBlbHNlIGlmICggaW5wdXRFbmNvZGluZyA9PSA0ICkge1xuXG5cdFx0XHRcdHJldHVybiBSR0JNVG9MaW5lYXIoIHZhbHVlLCAxNi4wICk7XG5cblx0XHRcdH0gZWxzZSBpZiAoIGlucHV0RW5jb2RpbmcgPT0gNSApIHtcblxuXHRcdFx0XHRyZXR1cm4gUkdCRFRvTGluZWFyKCB2YWx1ZSwgMjU2LjAgKTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRyZXR1cm4gR2FtbWFUb0xpbmVhciggdmFsdWUsIDIuMiApO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHR2ZWM0IGxpbmVhclRvT3V0cHV0VGV4ZWwoIHZlYzQgdmFsdWUgKSB7XG5cblx0XHRcdGlmICggb3V0cHV0RW5jb2RpbmcgPT0gMCApIHtcblxuXHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cblx0XHRcdH0gZWxzZSBpZiAoIG91dHB1dEVuY29kaW5nID09IDEgKSB7XG5cblx0XHRcdFx0cmV0dXJuIExpbmVhclRvc1JHQiggdmFsdWUgKTtcblxuXHRcdFx0fSBlbHNlIGlmICggb3V0cHV0RW5jb2RpbmcgPT0gMiApIHtcblxuXHRcdFx0XHRyZXR1cm4gTGluZWFyVG9SR0JFKCB2YWx1ZSApO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBvdXRwdXRFbmNvZGluZyA9PSAzICkge1xuXG5cdFx0XHRcdHJldHVybiBMaW5lYXJUb1JHQk0oIHZhbHVlLCA3LjAgKTtcblxuXHRcdFx0fSBlbHNlIGlmICggb3V0cHV0RW5jb2RpbmcgPT0gNCApIHtcblxuXHRcdFx0XHRyZXR1cm4gTGluZWFyVG9SR0JNKCB2YWx1ZSwgMTYuMCApO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBvdXRwdXRFbmNvZGluZyA9PSA1ICkge1xuXG5cdFx0XHRcdHJldHVybiBMaW5lYXJUb1JHQkQoIHZhbHVlLCAyNTYuMCApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdHJldHVybiBMaW5lYXJUb0dhbW1hKCB2YWx1ZSwgMi4yICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdHZlYzQgZW52TWFwVGV4ZWxUb0xpbmVhciggdmVjNCBjb2xvciApIHtcblxuXHRcdFx0cmV0dXJuIGlucHV0VGV4ZWxUb0xpbmVhciggY29sb3IgKTtcblxuXHRcdH1cblx0XG5cblx0XHRcdCNpbmNsdWRlIDxjb21tb24+XG5cblx0XHRcdHZvaWQgbWFpbigpIHtcblxuXHRcdFx0XHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCAwLjAsIDAuMCwgMC4wLCAxLjAgKTtcblxuXHRcdFx0XHR2ZWMzIG91dHB1dERpcmVjdGlvbiA9IG5vcm1hbGl6ZSggdk91dHB1dERpcmVjdGlvbiApO1xuXHRcdFx0XHR2ZWMyIHV2ID0gZXF1aXJlY3RVdiggb3V0cHV0RGlyZWN0aW9uICk7XG5cblx0XHRcdFx0dmVjMiBmID0gZnJhY3QoIHV2IC8gdGV4ZWxTaXplIC0gMC41ICk7XG5cdFx0XHRcdHV2IC09IGYgKiB0ZXhlbFNpemU7XG5cdFx0XHRcdHZlYzMgdGwgPSBlbnZNYXBUZXhlbFRvTGluZWFyKCB0ZXh0dXJlMkQgKCBlbnZNYXAsIHV2ICkgKS5yZ2I7XG5cdFx0XHRcdHV2LnggKz0gdGV4ZWxTaXplLng7XG5cdFx0XHRcdHZlYzMgdHIgPSBlbnZNYXBUZXhlbFRvTGluZWFyKCB0ZXh0dXJlMkQgKCBlbnZNYXAsIHV2ICkgKS5yZ2I7XG5cdFx0XHRcdHV2LnkgKz0gdGV4ZWxTaXplLnk7XG5cdFx0XHRcdHZlYzMgYnIgPSBlbnZNYXBUZXhlbFRvTGluZWFyKCB0ZXh0dXJlMkQgKCBlbnZNYXAsIHV2ICkgKS5yZ2I7XG5cdFx0XHRcdHV2LnggLT0gdGV4ZWxTaXplLng7XG5cdFx0XHRcdHZlYzMgYmwgPSBlbnZNYXBUZXhlbFRvTGluZWFyKCB0ZXh0dXJlMkQgKCBlbnZNYXAsIHV2ICkgKS5yZ2I7XG5cblx0XHRcdFx0dmVjMyB0bSA9IG1peCggdGwsIHRyLCBmLnggKTtcblx0XHRcdFx0dmVjMyBibSA9IG1peCggYmwsIGJyLCBmLnggKTtcblx0XHRcdFx0Z2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggdG0sIGJtLCBmLnkgKTtcblxuXHRcdFx0XHRnbF9GcmFnQ29sb3IgPSBsaW5lYXJUb091dHB1dFRleGVsKCBnbF9GcmFnQ29sb3IgKTtcblxuXHRcdFx0fVxuXHRcdCIsYmxlbmRpbmc6MCxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMX0pfWZ1bmN0aW9uIGlXdCgpe3JldHVybiBuZXcgQlZ0KHtuYW1lOiJDdWJlbWFwVG9DdWJlVVYiLHVuaWZvcm1zOntlbnZNYXA6e3ZhbHVlOm51bGx9LGlucHV0RW5jb2Rpbmc6e3ZhbHVlOkhHdFszZTNdfSxvdXRwdXRFbmNvZGluZzp7dmFsdWU6SEd0WzNlM119fSx2ZXJ0ZXhTaGFkZXI6IlxuXG5cdFx0cHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG5cdFx0cHJlY2lzaW9uIG1lZGl1bXAgaW50O1xuXG5cdFx0YXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG5cdFx0YXR0cmlidXRlIHZlYzIgdXY7XG5cdFx0YXR0cmlidXRlIGZsb2F0IGZhY2VJbmRleDtcblxuXHRcdHZhcnlpbmcgdmVjMyB2T3V0cHV0RGlyZWN0aW9uO1xuXG5cdFx0Ly8gUkggY29vcmRpbmF0ZSBzeXN0ZW07IFBNUkVNIGZhY2UtaW5kZXhpbmcgY29udmVudGlvblxuXHRcdHZlYzMgZ2V0RGlyZWN0aW9uKCB2ZWMyIHV2LCBmbG9hdCBmYWNlICkge1xuXG5cdFx0XHR1diA9IDIuMCAqIHV2IC0gMS4wO1xuXG5cdFx0XHR2ZWMzIGRpcmVjdGlvbiA9IHZlYzMoIHV2LCAxLjAgKTtcblxuXHRcdFx0aWYgKCBmYWNlID09IDAuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24gPSBkaXJlY3Rpb24uenl4OyAvLyAoIDEsIHYsIHUgKSBwb3MgeFxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDEuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24gPSBkaXJlY3Rpb24ueHp5O1xuXHRcdFx0XHRkaXJlY3Rpb24ueHogKj0gLTEuMDsgLy8gKCAtdSwgMSwgLXYgKSBwb3MgeVxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDIuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24ueCAqPSAtMS4wOyAvLyAoIC11LCB2LCAxICkgcG9zIHpcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSAzLjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uID0gZGlyZWN0aW9uLnp5eDtcblx0XHRcdFx0ZGlyZWN0aW9uLnh6ICo9IC0xLjA7IC8vICggLTEsIHYsIC11ICkgbmVnIHhcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSA0LjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uID0gZGlyZWN0aW9uLnh6eTtcblx0XHRcdFx0ZGlyZWN0aW9uLnh5ICo9IC0xLjA7IC8vICggLXUsIC0xLCB2ICkgbmVnIHlcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSA1LjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uLnogKj0gLTEuMDsgLy8gKCB1LCB2LCAtMSApIG5lZyB6XG5cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGRpcmVjdGlvbjtcblxuXHRcdH1cblxuXHRcdHZvaWQgbWFpbigpIHtcblxuXHRcdFx0dk91dHB1dERpcmVjdGlvbiA9IGdldERpcmVjdGlvbiggdXYsIGZhY2VJbmRleCApO1xuXHRcdFx0Z2xfUG9zaXRpb24gPSB2ZWM0KCBwb3NpdGlvbiwgMS4wICk7XG5cblx0XHR9XG5cdCIsZnJhZ21lbnRTaGFkZXI6IlxuXG5cdFx0XHRwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcblx0XHRcdHByZWNpc2lvbiBtZWRpdW1wIGludDtcblxuXHRcdFx0dmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247XG5cblx0XHRcdHVuaWZvcm0gc2FtcGxlckN1YmUgZW52TWFwO1xuXG5cdFx0XHRcblxuXHRcdHVuaWZvcm0gaW50IGlucHV0RW5jb2Rpbmc7XG5cdFx0dW5pZm9ybSBpbnQgb3V0cHV0RW5jb2Rpbmc7XG5cblx0XHQjaW5jbHVkZSA8ZW5jb2RpbmdzX3BhcnNfZnJhZ21lbnQ+XG5cblx0XHR2ZWM0IGlucHV0VGV4ZWxUb0xpbmVhciggdmVjNCB2YWx1ZSApIHtcblxuXHRcdFx0aWYgKCBpbnB1dEVuY29kaW5nID09IDAgKSB7XG5cblx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBpbnB1dEVuY29kaW5nID09IDEgKSB7XG5cblx0XHRcdFx0cmV0dXJuIHNSR0JUb0xpbmVhciggdmFsdWUgKTtcblxuXHRcdFx0fSBlbHNlIGlmICggaW5wdXRFbmNvZGluZyA9PSAyICkge1xuXG5cdFx0XHRcdHJldHVybiBSR0JFVG9MaW5lYXIoIHZhbHVlICk7XG5cblx0XHRcdH0gZWxzZSBpZiAoIGlucHV0RW5jb2RpbmcgPT0gMyApIHtcblxuXHRcdFx0XHRyZXR1cm4gUkdCTVRvTGluZWFyKCB2YWx1ZSwgNy4wICk7XG5cblx0XHRcdH0gZWxzZSBpZiAoIGlucHV0RW5jb2RpbmcgPT0gNCApIHtcblxuXHRcdFx0XHRyZXR1cm4gUkdCTVRvTGluZWFyKCB2YWx1ZSwgMTYuMCApO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBpbnB1dEVuY29kaW5nID09IDUgKSB7XG5cblx0XHRcdFx0cmV0dXJuIFJHQkRUb0xpbmVhciggdmFsdWUsIDI1Ni4wICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0cmV0dXJuIEdhbW1hVG9MaW5lYXIoIHZhbHVlLCAyLjIgKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0dmVjNCBsaW5lYXJUb091dHB1dFRleGVsKCB2ZWM0IHZhbHVlICkge1xuXG5cdFx0XHRpZiAoIG91dHB1dEVuY29kaW5nID09IDAgKSB7XG5cblx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBvdXRwdXRFbmNvZGluZyA9PSAxICkge1xuXG5cdFx0XHRcdHJldHVybiBMaW5lYXJUb3NSR0IoIHZhbHVlICk7XG5cblx0XHRcdH0gZWxzZSBpZiAoIG91dHB1dEVuY29kaW5nID09IDIgKSB7XG5cblx0XHRcdFx0cmV0dXJuIExpbmVhclRvUkdCRSggdmFsdWUgKTtcblxuXHRcdFx0fSBlbHNlIGlmICggb3V0cHV0RW5jb2RpbmcgPT0gMyApIHtcblxuXHRcdFx0XHRyZXR1cm4gTGluZWFyVG9SR0JNKCB2YWx1ZSwgNy4wICk7XG5cblx0XHRcdH0gZWxzZSBpZiAoIG91dHB1dEVuY29kaW5nID09IDQgKSB7XG5cblx0XHRcdFx0cmV0dXJuIExpbmVhclRvUkdCTSggdmFsdWUsIDE2LjAgKTtcblxuXHRcdFx0fSBlbHNlIGlmICggb3V0cHV0RW5jb2RpbmcgPT0gNSApIHtcblxuXHRcdFx0XHRyZXR1cm4gTGluZWFyVG9SR0JEKCB2YWx1ZSwgMjU2LjAgKTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRyZXR1cm4gTGluZWFyVG9HYW1tYSggdmFsdWUsIDIuMiApO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHR2ZWM0IGVudk1hcFRleGVsVG9MaW5lYXIoIHZlYzQgY29sb3IgKSB7XG5cblx0XHRcdHJldHVybiBpbnB1dFRleGVsVG9MaW5lYXIoIGNvbG9yICk7XG5cblx0XHR9XG5cdFxuXG5cdFx0XHR2b2lkIG1haW4oKSB7XG5cblx0XHRcdFx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggMC4wLCAwLjAsIDAuMCwgMS4wICk7XG5cdFx0XHRcdGdsX0ZyYWdDb2xvci5yZ2IgPSBlbnZNYXBUZXhlbFRvTGluZWFyKCB0ZXh0dXJlQ3ViZSggZW52TWFwLCB2ZWMzKCAtIHZPdXRwdXREaXJlY3Rpb24ueCwgdk91dHB1dERpcmVjdGlvbi55eiApICkgKS5yZ2I7XG5cdFx0XHRcdGdsX0ZyYWdDb2xvciA9IGxpbmVhclRvT3V0cHV0VGV4ZWwoIGdsX0ZyYWdDb2xvciApO1xuXG5cdFx0XHR9XG5cdFx0IixibGVuZGluZzowLGRlcHRoVGVzdDohMSxkZXB0aFdyaXRlOiExfSl9ZnVuY3Rpb24gcld0KHQpe2NvbnNvbGUud2FybigiVEhSRUUuQ2xvc2VkU3BsaW5lQ3VydmUzIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSBUSFJFRS5DYXRtdWxsUm9tQ3VydmUzIGluc3RlYWQuIiksa1V0LmNhbGwodGhpcyx0KSx0aGlzLnR5cGU9ImNhdG11bGxyb20iLHRoaXMuY2xvc2VkPSEwfWZ1bmN0aW9uIG9XdCh0KXtjb25zb2xlLndhcm4oIlRIUkVFLlNwbGluZUN1cnZlMyBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuQ2F0bXVsbFJvbUN1cnZlMyBpbnN0ZWFkLiIpLGtVdC5jYWxsKHRoaXMsdCksdGhpcy50eXBlPSJjYXRtdWxscm9tIn1mdW5jdGlvbiBhV3QodCl7Y29uc29sZS53YXJuKCJUSFJFRS5TcGxpbmUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLkNhdG11bGxSb21DdXJ2ZTMgaW5zdGVhZC4iKSxrVXQuY2FsbCh0aGlzLHQpLHRoaXMudHlwZT0iY2F0bXVsbHJvbSJ9eFV0LmNyZWF0ZT1mdW5jdGlvbih0LGUpe3JldHVybiBjb25zb2xlLmxvZygiVEhSRUUuQ3VydmUuY3JlYXRlKCkgaGFzIGJlZW4gZGVwcmVjYXRlZCIpLHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeFV0LnByb3RvdHlwZSksdC5wcm90b3R5cGUuY29uc3RydWN0b3I9dCx0LnByb3RvdHlwZS5nZXRQb2ludD1lLHR9LE9iamVjdC5hc3NpZ24oVVV0LnByb3RvdHlwZSx7ZnJvbVBvaW50czpmdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5QYXRoOiAuZnJvbVBvaW50cygpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEZyb21Qb2ludHMoKS4iKSx0aGlzLnNldEZyb21Qb2ludHModCl9fSkscld0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGtVdC5wcm90b3R5cGUpLG9XdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShrVXQucHJvdG90eXBlKSxhV3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoa1V0LnByb3RvdHlwZSksT2JqZWN0LmFzc2lnbihhV3QucHJvdG90eXBlLHtpbml0RnJvbUFycmF5OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuU3BsaW5lOiAuaW5pdEZyb21BcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LGdldENvbnRyb2xQb2ludHNBcnJheTpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNwbGluZTogLmdldENvbnRyb2xQb2ludHNBcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LHJlcGFyYW1ldHJpemVCeUFyY0xlbmd0aDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNwbGluZTogLnJlcGFyYW1ldHJpemVCeUFyY0xlbmd0aCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9fSksYkd0LnByb3RvdHlwZS5zZXRDb2xvcnM9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5HcmlkSGVscGVyOiBzZXRDb2xvcnMoKSBoYXMgYmVlbiBkZXByZWNhdGVkLCBwYXNzIHRoZW0gaW4gdGhlIGNvbnN0cnVjdG9yIGluc3RlYWQuIil9LG1HdC5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuU2tlbGV0b25IZWxwZXI6IHVwZGF0ZSgpIG5vIGxvbmdlciBuZWVkcyB0byBiZSBjYWxsZWQuIil9LE9iamVjdC5hc3NpZ24oZFV0LnByb3RvdHlwZSx7ZXh0cmFjdFVybEJhc2U6ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTG9hZGVyOiAuZXh0cmFjdFVybEJhc2UoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuTG9hZGVyVXRpbHMuZXh0cmFjdFVybEJhc2UoKSBpbnN0ZWFkLiIpLG9qdC5leHRyYWN0VXJsQmFzZSh0KX19KSxkVXQuSGFuZGxlcnM9e2FkZDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkxvYWRlcjogSGFuZGxlcnMuYWRkKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIExvYWRpbmdNYW5hZ2VyLmFkZEhhbmRsZXIoKSBpbnN0ZWFkLiIpfSxnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Mb2FkZXI6IEhhbmRsZXJzLmdldCgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBMb2FkaW5nTWFuYWdlci5nZXRIYW5kbGVyKCkgaW5zdGVhZC4iKX19LE9iamVjdC5hc3NpZ24oYUd0LnByb3RvdHlwZSx7Y2VudGVyOmZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5jZW50ZXIoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRDZW50ZXIoKS4iKSx0aGlzLmdldENlbnRlcih0KX0sZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gyOiAuZW1wdHkoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pc0VtcHR5KCkuIiksdGhpcy5pc0VtcHR5KCl9LGlzSW50ZXJzZWN0aW9uQm94OmZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5pc0ludGVyc2VjdGlvbkJveCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNCb3goKS4iKSx0aGlzLmludGVyc2VjdHNCb3godCl9LHNpemU6ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MjogLnNpemUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRTaXplKCkuIiksdGhpcy5nZXRTaXplKHQpfX0pLE9iamVjdC5hc3NpZ24oJE90LnByb3RvdHlwZSx7Y2VudGVyOmZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5jZW50ZXIoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRDZW50ZXIoKS4iKSx0aGlzLmdldENlbnRlcih0KX0sZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuZW1wdHkoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pc0VtcHR5KCkuIiksdGhpcy5pc0VtcHR5KCl9LGlzSW50ZXJzZWN0aW9uQm94OmZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5pc0ludGVyc2VjdGlvbkJveCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNCb3goKS4iKSx0aGlzLmludGVyc2VjdHNCb3godCl9LGlzSW50ZXJzZWN0aW9uU3BoZXJlOmZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5pc0ludGVyc2VjdGlvblNwaGVyZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNTcGhlcmUoKS4iKSx0aGlzLmludGVyc2VjdHNTcGhlcmUodCl9LHNpemU6ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MzogLnNpemUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRTaXplKCkuIiksdGhpcy5nZXRTaXplKHQpfX0pLE9iamVjdC5hc3NpZ24oaFJ0LnByb3RvdHlwZSx7ZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5TcGhlcmU6IC5lbXB0eSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmlzRW1wdHkoKS4iKSx0aGlzLmlzRW1wdHkoKX19KSx4RHQucHJvdG90eXBlLnNldEZyb21NYXRyaXg9ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuRnJ1c3R1bTogLnNldEZyb21NYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeCgpLiIpLHRoaXMuc2V0RnJvbVByb2plY3Rpb25NYXRyaXgodCl9LGNHdC5wcm90b3R5cGUuY2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkxpbmUzOiAuY2VudGVyKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Q2VudGVyKCkuIiksdGhpcy5nZXRDZW50ZXIodCl9LE9iamVjdC5hc3NpZ24oUk90LHtyYW5kb20xNjpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdGg6IC5yYW5kb20xNigpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSBNYXRoLnJhbmRvbSgpIGluc3RlYWQuIiksTWF0aC5yYW5kb20oKX0sbmVhcmVzdFBvd2VyT2ZUd286ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0aDogLm5lYXJlc3RQb3dlck9mVHdvKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZmxvb3JQb3dlck9mVHdvKCkuIiksUk90LmZsb29yUG93ZXJPZlR3byh0KX0sbmV4dFBvd2VyT2ZUd286ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0aDogLm5leHRQb3dlck9mVHdvKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuY2VpbFBvd2VyT2ZUd28oKS4iKSxST3QuY2VpbFBvd2VyT2ZUd28odCl9fSksT2JqZWN0LmFzc2lnbihET3QucHJvdG90eXBlLHtmbGF0dGVuVG9BcnJheU9mZnNldDpmdW5jdGlvbih0LGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDM6IC5mbGF0dGVuVG9BcnJheU9mZnNldCgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudG9BcnJheSgpIGluc3RlYWQuIiksdGhpcy50b0FycmF5KHQsZSl9LG11bHRpcGx5VmVjdG9yMzpmdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXgzOiAubXVsdGlwbHlWZWN0b3IzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHZlY3Rvci5hcHBseU1hdHJpeDMoIG1hdHJpeCApIGluc3RlYWQuIiksdC5hcHBseU1hdHJpeDModGhpcyl9LG11bHRpcGx5VmVjdG9yM0FycmF5OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4MzogLm11bHRpcGx5VmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZTpmdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXgzOiAuYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBhdHRyaWJ1dGUuYXBwbHlNYXRyaXgzKCBtYXRyaXggKSBpbnN0ZWFkLiIpLHQuYXBwbHlNYXRyaXgzKHRoaXMpfSxhcHBseVRvVmVjdG9yM0FycmF5OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4MzogLmFwcGx5VG9WZWN0b3IzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxnZXRJbnZlcnNlOmZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDM6IC5nZXRJbnZlcnNlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG1hdHJpeEludi5jb3B5KCBtYXRyaXggKS5pbnZlcnQoKTsgaW5zdGVhZC4iKSx0aGlzLmNvcHkodCkuaW52ZXJ0KCl9fSksT2JqZWN0LmFzc2lnbihiUnQucHJvdG90eXBlLHtleHRyYWN0UG9zaXRpb246ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmV4dHJhY3RQb3NpdGlvbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmNvcHlQb3NpdGlvbigpLiIpLHRoaXMuY29weVBvc2l0aW9uKHQpfSxmbGF0dGVuVG9BcnJheU9mZnNldDpmdW5jdGlvbih0LGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5mbGF0dGVuVG9BcnJheU9mZnNldCgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudG9BcnJheSgpIGluc3RlYWQuIiksdGhpcy50b0FycmF5KHQsZSl9LGdldFBvc2l0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmdldFBvc2l0aW9uKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFZlY3RvcjMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCBtYXRyaXggKSBpbnN0ZWFkLiIpLChuZXcgcU90KS5zZXRGcm9tTWF0cml4Q29sdW1uKHRoaXMsMyl9LHNldFJvdGF0aW9uRnJvbVF1YXRlcm5pb246ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLnNldFJvdGF0aW9uRnJvbVF1YXRlcm5pb24oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbigpLiIpLHRoaXMubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24odCl9LG11bHRpcGx5VG9BcnJheTpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VG9BcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LG11bHRpcGx5VmVjdG9yMzpmdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHlWZWN0b3IzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHZlY3Rvci5hcHBseU1hdHJpeDQoIG1hdHJpeCApIGluc3RlYWQuIiksdC5hcHBseU1hdHJpeDQodGhpcyl9LG11bHRpcGx5VmVjdG9yNDpmdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHlWZWN0b3I0KCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHZlY3Rvci5hcHBseU1hdHJpeDQoIG1hdHJpeCApIGluc3RlYWQuIiksdC5hcHBseU1hdHJpeDQodGhpcyl9LG11bHRpcGx5VmVjdG9yM0FycmF5OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0scm90YXRlQXhpczpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVBeGlzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFZlY3RvcjMudHJhbnNmb3JtRGlyZWN0aW9uKCBtYXRyaXggKSBpbnN0ZWFkLiIpLHQudHJhbnNmb3JtRGlyZWN0aW9uKHRoaXMpfSxjcm9zc1ZlY3RvcjpmdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuY3Jvc3NWZWN0b3IoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4NCggbWF0cml4ICkgaW5zdGVhZC4iKSx0LmFwcGx5TWF0cml4NCh0aGlzKX0sdHJhbnNsYXRlOmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnRyYW5zbGF0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LHJvdGF0ZVg6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlWCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LHJvdGF0ZVk6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlWSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LHJvdGF0ZVo6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlWigpIGhhcyBiZWVuIHJlbW92ZWQuIil9LHJvdGF0ZUJ5QXhpczpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVCeUF4aXMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxhcHBseVRvQnVmZmVyQXR0cmlidXRlOmZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5hcHBseVRvQnVmZmVyQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGF0dHJpYnV0ZS5hcHBseU1hdHJpeDQoIG1hdHJpeCApIGluc3RlYWQuIiksdC5hcHBseU1hdHJpeDQodGhpcyl9LGFwcGx5VG9WZWN0b3IzQXJyYXk6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAuYXBwbHlUb1ZlY3RvcjNBcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LG1ha2VGcnVzdHVtOmZ1bmN0aW9uKHQsZSxuLGkscixvKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubWFrZUZydXN0dW0oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLm1ha2VQZXJzcGVjdGl2ZSggbGVmdCwgcmlnaHQsIHRvcCwgYm90dG9tLCBuZWFyLCBmYXIgKSBpbnN0ZWFkLiIpLHRoaXMubWFrZVBlcnNwZWN0aXZlKHQsZSxpLG4scixvKX0sZ2V0SW52ZXJzZTpmdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuZ2V0SW52ZXJzZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBtYXRyaXhJbnYuY29weSggbWF0cml4ICkuaW52ZXJ0KCk7IGluc3RlYWQuIiksdGhpcy5jb3B5KHQpLmludmVydCgpfX0pLCRSdC5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25MaW5lPWZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlBsYW5lOiAuaXNJbnRlcnNlY3Rpb25MaW5lKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c0xpbmUoKS4iKSx0aGlzLmludGVyc2VjdHNMaW5lKHQpfSxPYmplY3QuYXNzaWduKFdPdC5wcm90b3R5cGUse211bHRpcGx5VmVjdG9yMzpmdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiAubXVsdGlwbHlWZWN0b3IzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGlzIG5vdyB2ZWN0b3IuYXBwbHlRdWF0ZXJuaW9uKCBxdWF0ZXJuaW9uICkgaW5zdGVhZC4iKSx0LmFwcGx5UXVhdGVybmlvbih0aGlzKX0saW52ZXJzZTpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlF1YXRlcm5pb246IC5pbnZlcnNlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byBpbnZlcnQoKS4iKSx0aGlzLmludmVydCgpfX0pLE9iamVjdC5hc3NpZ24odlJ0LnByb3RvdHlwZSx7aXNJbnRlcnNlY3Rpb25Cb3g6ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUmF5OiAuaXNJbnRlcnNlY3Rpb25Cb3goKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzQm94KCkuIiksdGhpcy5pbnRlcnNlY3RzQm94KHQpfSxpc0ludGVyc2VjdGlvblBsYW5lOmZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlJheTogLmlzSW50ZXJzZWN0aW9uUGxhbmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzUGxhbmUoKS4iKSx0aGlzLmludGVyc2VjdHNQbGFuZSh0KX0saXNJbnRlcnNlY3Rpb25TcGhlcmU6ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUmF5OiAuaXNJbnRlcnNlY3Rpb25TcGhlcmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzU3BoZXJlKCkuIiksdGhpcy5pbnRlcnNlY3RzU3BoZXJlKHQpfX0pLE9iamVjdC5hc3NpZ24oYXp0LnByb3RvdHlwZSx7YXJlYTpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAuYXJlYSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldEFyZWEoKS4iKSx0aGlzLmdldEFyZWEoKX0sYmFyeWNvb3JkRnJvbVBvaW50OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5iYXJ5Y29vcmRGcm9tUG9pbnQoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRCYXJ5Y29vcmQoKS4iKSx0aGlzLmdldEJhcnljb29yZCh0LGUpfSxtaWRwb2ludDpmdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLm1pZHBvaW50KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0TWlkcG9pbnQoKS4iKSx0aGlzLmdldE1pZHBvaW50KHQpfSxub3JtYWw6ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5ub3JtYWwoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXROb3JtYWwoKS4iKSx0aGlzLmdldE5vcm1hbCh0KX0scGxhbmU6ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5wbGFuZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldFBsYW5lKCkuIiksdGhpcy5nZXRQbGFuZSh0KX19KSxPYmplY3QuYXNzaWduKGF6dCx7YmFyeWNvb3JkRnJvbVBvaW50OmZ1bmN0aW9uKHQsZSxuLGkscil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5iYXJ5Y29vcmRGcm9tUG9pbnQoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRCYXJ5Y29vcmQoKS4iKSxhenQuZ2V0QmFyeWNvb3JkKHQsZSxuLGkscil9LG5vcm1hbDpmdW5jdGlvbih0LGUsbixpKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLm5vcm1hbCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldE5vcm1hbCgpLiIpLGF6dC5nZXROb3JtYWwodCxlLG4saSl9fSksT2JqZWN0LmFzc2lnbihqVXQucHJvdG90eXBlLHtleHRyYWN0QWxsUG9pbnRzOmZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlNoYXBlOiAuZXh0cmFjdEFsbFBvaW50cygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuZXh0cmFjdFBvaW50cygpIGluc3RlYWQuIiksdGhpcy5leHRyYWN0UG9pbnRzKHQpfSxleHRydWRlOmZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlNoYXBlOiAuZXh0cnVkZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBFeHRydWRlR2VvbWV0cnkoKSBpbnN0ZWFkLiIpLG5ldyB4VnQodGhpcyx0KX0sbWFrZUdlb21ldHJ5OmZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlNoYXBlOiAubWFrZUdlb21ldHJ5KCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFNoYXBlR2VvbWV0cnkoKSBpbnN0ZWFkLiIpLG5ldyBBVnQodGhpcyx0KX19KSxPYmplY3QuYXNzaWduKHpPdC5wcm90b3R5cGUse2Zyb21BdHRyaWJ1dGU6ZnVuY3Rpb24odCxlLG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjI6IC5mcm9tQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUsbil9LGRpc3RhbmNlVG9NYW5oYXR0YW46ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLmRpc3RhbmNlVG9NYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5EaXN0YW5jZVRvKCkuIiksdGhpcy5tYW5oYXR0YW5EaXN0YW5jZVRvKHQpfSxsZW5ndGhNYW5oYXR0YW46ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiAubGVuZ3RoTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuTGVuZ3RoKCkuIiksdGhpcy5tYW5oYXR0YW5MZW5ndGgoKX19KSxPYmplY3QuYXNzaWduKHFPdC5wcm90b3R5cGUse3NldEV1bGVyRnJvbVJvdGF0aW9uTWF0cml4OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuVmVjdG9yMzogLnNldEV1bGVyRnJvbVJvdGF0aW9uTWF0cml4KCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEV1bGVyLnNldEZyb21Sb3RhdGlvbk1hdHJpeCgpIGluc3RlYWQuIil9LHNldEV1bGVyRnJvbVF1YXRlcm5pb246ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5WZWN0b3IzOiAuc2V0RXVsZXJGcm9tUXVhdGVybmlvbigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBFdWxlci5zZXRGcm9tUXVhdGVybmlvbigpIGluc3RlYWQuIil9LGdldFBvc2l0aW9uRnJvbU1hdHJpeDpmdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZ2V0UG9zaXRpb25Gcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCkuIiksdGhpcy5zZXRGcm9tTWF0cml4UG9zaXRpb24odCl9LGdldFNjYWxlRnJvbU1hdHJpeDpmdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZ2V0U2NhbGVGcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbU1hdHJpeFNjYWxlKCkuIiksdGhpcy5zZXRGcm9tTWF0cml4U2NhbGUodCl9LGdldENvbHVtbkZyb21NYXRyaXg6ZnVuY3Rpb24odCxlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZ2V0Q29sdW1uRnJvbU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEZyb21NYXRyaXhDb2x1bW4oKS4iKSx0aGlzLnNldEZyb21NYXRyaXhDb2x1bW4oZSx0KX0sYXBwbHlQcm9qZWN0aW9uOmZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5hcHBseVByb2plY3Rpb24oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLmFwcGx5TWF0cml4NCggbSApIGluc3RlYWQuIiksdGhpcy5hcHBseU1hdHJpeDQodCl9LGZyb21BdHRyaWJ1dGU6ZnVuY3Rpb24odCxlLG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5mcm9tQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUsbil9LGRpc3RhbmNlVG9NYW5oYXR0YW46ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmRpc3RhbmNlVG9NYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5EaXN0YW5jZVRvKCkuIiksdGhpcy5tYW5oYXR0YW5EaXN0YW5jZVRvKHQpfSxsZW5ndGhNYW5oYXR0YW46ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAubGVuZ3RoTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuTGVuZ3RoKCkuIiksdGhpcy5tYW5oYXR0YW5MZW5ndGgoKX19KSxPYmplY3QuYXNzaWduKGpPdC5wcm90b3R5cGUse2Zyb21BdHRyaWJ1dGU6ZnVuY3Rpb24odCxlLG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IC5mcm9tQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUsbil9LGxlbmd0aE1hbmhhdHRhbjpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IC5sZW5ndGhNYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5MZW5ndGgoKS4iKSx0aGlzLm1hbmhhdHRhbkxlbmd0aCgpfX0pLE9iamVjdC5hc3NpZ24oV1J0LnByb3RvdHlwZSx7Z2V0Q2hpbGRCeU5hbWU6ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5nZXRDaGlsZEJ5TmFtZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldE9iamVjdEJ5TmFtZSgpLiIpLHRoaXMuZ2V0T2JqZWN0QnlOYW1lKHQpfSxyZW5kZXJEZXB0aDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5yZW5kZXJEZXB0aCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnJlbmRlck9yZGVyLCBpbnN0ZWFkLiIpfSx0cmFuc2xhdGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLnRyYW5zbGF0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAudHJhbnNsYXRlT25BeGlzKCBheGlzLCBkaXN0YW5jZSApIGluc3RlYWQuIiksdGhpcy50cmFuc2xhdGVPbkF4aXMoZSx0KX0sZ2V0V29ybGRSb3RhdGlvbjpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk9iamVjdDNEOiAuZ2V0V29ybGRSb3RhdGlvbigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5PYmplY3QzRC5nZXRXb3JsZFF1YXRlcm5pb24oIHRhcmdldCApIGluc3RlYWQuIil9LGFwcGx5TWF0cml4OmZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAuYXBwbHlNYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5hcHBseU1hdHJpeDQoKS4iKSx0aGlzLmFwcGx5TWF0cml4NCh0KX19KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhXUnQucHJvdG90eXBlLHtldWxlck9yZGVyOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLmV1bGVyT3JkZXIgaXMgbm93IC5yb3RhdGlvbi5vcmRlci4iKSx0aGlzLnJvdGF0aW9uLm9yZGVyfSxzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLmV1bGVyT3JkZXIgaXMgbm93IC5yb3RhdGlvbi5vcmRlci4iKSx0aGlzLnJvdGF0aW9uLm9yZGVyPXR9fSx1c2VRdWF0ZXJuaW9uOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAudXNlUXVhdGVybmlvbiBoYXMgYmVlbiByZW1vdmVkLiBUaGUgbGlicmFyeSBub3cgdXNlcyBxdWF0ZXJuaW9ucyBieSBkZWZhdWx0LiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAudXNlUXVhdGVybmlvbiBoYXMgYmVlbiByZW1vdmVkLiBUaGUgbGlicmFyeSBub3cgdXNlcyBxdWF0ZXJuaW9ucyBieSBkZWZhdWx0LiIpfX19KSxPYmplY3QuYXNzaWduKG9EdC5wcm90b3R5cGUse3NldERyYXdNb2RlOmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWVzaDogLnNldERyYXdNb2RlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIHJlbmRlcmVyIG5vdyBhbHdheXMgYXNzdW1lcyBUSFJFRS5UcmlhbmdsZXNEcmF3TW9kZS4gVHJhbnNmb3JtIHlvdXIgZ2VvbWV0cnkgdmlhIEJ1ZmZlckdlb21ldHJ5VXRpbHMudG9UcmlhbmdsZXNEcmF3TW9kZSgpIGlmIG5lY2Vzc2FyeS4iKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhvRHQucHJvdG90eXBlLHtkcmF3TW9kZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUuZXJyb3IoIlRIUkVFLk1lc2g6IC5kcmF3TW9kZSBoYXMgYmVlbiByZW1vdmVkLiBUaGUgcmVuZGVyZXIgbm93IGFsd2F5cyBhc3N1bWVzIFRIUkVFLlRyaWFuZ2xlc0RyYXdNb2RlLiIpLDB9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1lc2g6IC5kcmF3TW9kZSBoYXMgYmVlbiByZW1vdmVkLiBUaGUgcmVuZGVyZXIgbm93IGFsd2F5cyBhc3N1bWVzIFRIUkVFLlRyaWFuZ2xlc0RyYXdNb2RlLiBUcmFuc2Zvcm0geW91ciBnZW9tZXRyeSB2aWEgQnVmZmVyR2VvbWV0cnlVdGlscy50b1RyaWFuZ2xlc0RyYXdNb2RlKCkgaWYgbmVjZXNzYXJ5LiIpfX19KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0RnQucHJvdG90eXBlLHtvYmplY3RzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5MT0Q6IC5vYmplY3RzIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmxldmVscy4iKSx0aGlzLmxldmVsc319fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHVGdC5wcm90b3R5cGUsInVzZVZlcnRleFRleHR1cmUiLHtnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLlNrZWxldG9uOiB1c2VWZXJ0ZXhUZXh0dXJlIGhhcyBiZWVuIHJlbW92ZWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuU2tlbGV0b246IHVzZVZlcnRleFRleHR1cmUgaGFzIGJlZW4gcmVtb3ZlZC4iKX19KSxhRnQucHJvdG90eXBlLmluaXRCb25lcz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNraW5uZWRNZXNoOiBpbml0Qm9uZXMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeFV0LnByb3RvdHlwZSwiX19hcmNMZW5ndGhEaXZpc2lvbnMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5DdXJ2ZTogLl9fYXJjTGVuZ3RoRGl2aXNpb25zIGlzIG5vdyAuYXJjTGVuZ3RoRGl2aXNpb25zLiIpLHRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zfSxzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5DdXJ2ZTogLl9fYXJjTGVuZ3RoRGl2aXNpb25zIGlzIG5vdyAuYXJjTGVuZ3RoRGl2aXNpb25zLiIpLHRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zPXR9fSkscER0LnByb3RvdHlwZS5zZXRMZW5zPWZ1bmN0aW9uKHQsZSl7Y29uc29sZS53YXJuKCJUSFJFRS5QZXJzcGVjdGl2ZUNhbWVyYS5zZXRMZW5zIGlzIGRlcHJlY2F0ZWQuIFVzZSAuc2V0Rm9jYWxMZW5ndGggYW5kIC5maWxtR2F1Z2UgZm9yIGEgcGhvdG9ncmFwaGljIHNldHVwLiIpLHZvaWQgMCE9PWUmJih0aGlzLmZpbG1HYXVnZT1lKSx0aGlzLnNldEZvY2FsTGVuZ3RoKHQpfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhHVXQucHJvdG90eXBlLHtvbmx5U2hhZG93OntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAub25seVNoYWRvdyBoYXMgYmVlbiByZW1vdmVkLiIpfX0sc2hhZG93Q2FtZXJhRm92OntzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYUZvdiBpcyBub3cgLnNoYWRvdy5jYW1lcmEuZm92LiIpLHRoaXMuc2hhZG93LmNhbWVyYS5mb3Y9dH19LHNoYWRvd0NhbWVyYUxlZnQ6e3NldDpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhTGVmdCBpcyBub3cgLnNoYWRvdy5jYW1lcmEubGVmdC4iKSx0aGlzLnNoYWRvdy5jYW1lcmEubGVmdD10fX0sc2hhZG93Q2FtZXJhUmlnaHQ6e3NldDpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhUmlnaHQgaXMgbm93IC5zaGFkb3cuY2FtZXJhLnJpZ2h0LiIpLHRoaXMuc2hhZG93LmNhbWVyYS5yaWdodD10fX0sc2hhZG93Q2FtZXJhVG9wOntzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYVRvcCBpcyBub3cgLnNoYWRvdy5jYW1lcmEudG9wLiIpLHRoaXMuc2hhZG93LmNhbWVyYS50b3A9dH19LHNoYWRvd0NhbWVyYUJvdHRvbTp7c2V0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFCb3R0b20gaXMgbm93IC5zaGFkb3cuY2FtZXJhLmJvdHRvbS4iKSx0aGlzLnNoYWRvdy5jYW1lcmEuYm90dG9tPXR9fSxzaGFkb3dDYW1lcmFOZWFyOntzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYU5lYXIgaXMgbm93IC5zaGFkb3cuY2FtZXJhLm5lYXIuIiksdGhpcy5zaGFkb3cuY2FtZXJhLm5lYXI9dH19LHNoYWRvd0NhbWVyYUZhcjp7c2V0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFGYXIgaXMgbm93IC5zaGFkb3cuY2FtZXJhLmZhci4iKSx0aGlzLnNoYWRvdy5jYW1lcmEuZmFyPXR9fSxzaGFkb3dDYW1lcmFWaXNpYmxlOntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhVmlzaWJsZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkNhbWVyYUhlbHBlciggbGlnaHQuc2hhZG93LmNhbWVyYSApIGluc3RlYWQuIil9fSxzaGFkb3dCaWFzOntzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0JpYXMgaXMgbm93IC5zaGFkb3cuYmlhcy4iKSx0aGlzLnNoYWRvdy5iaWFzPXR9fSxzaGFkb3dEYXJrbmVzczp7c2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0RhcmtuZXNzIGhhcyBiZWVuIHJlbW92ZWQuIil9fSxzaGFkb3dNYXBXaWR0aDp7c2V0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dNYXBXaWR0aCBpcyBub3cgLnNoYWRvdy5tYXBTaXplLndpZHRoLiIpLHRoaXMuc2hhZG93Lm1hcFNpemUud2lkdGg9dH19LHNoYWRvd01hcEhlaWdodDp7c2V0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dNYXBIZWlnaHQgaXMgbm93IC5zaGFkb3cubWFwU2l6ZS5oZWlnaHQuIiksdGhpcy5zaGFkb3cubWFwU2l6ZS5oZWlnaHQ9dH19fSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoYnp0LnByb3RvdHlwZSx7bGVuZ3RoOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5sZW5ndGggaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5jb3VudCBpbnN0ZWFkLiIpLHRoaXMuYXJyYXkubGVuZ3RofX0sZHluYW1pYzp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuZHluYW1pYyBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnVzYWdlIGluc3RlYWQuIiksdGhpcy51c2FnZT09PUxPdH0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5keW5hbWljIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudXNhZ2UgaW5zdGVhZC4iKSx0aGlzLnNldFVzYWdlKExPdCl9fX0pLE9iamVjdC5hc3NpZ24oYnp0LnByb3RvdHlwZSx7c2V0RHluYW1pYzpmdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5zZXREeW5hbWljKCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5zZXRVc2FnZSgpIGluc3RlYWQuIiksdGhpcy5zZXRVc2FnZSghMD09PXQ/TE90OmtPdCksdGhpc30sY29weUluZGljZXNBcnJheTpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLmNvcHlJbmRpY2VzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXRBcnJheTpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLnNldEFycmF5IGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBCdWZmZXJHZW9tZXRyeSAuc2V0QXR0cmlidXRlIHRvIHJlcGxhY2UvcmVzaXplIGF0dHJpYnV0ZSBidWZmZXJzIil9fSksT2JqZWN0LmFzc2lnbihWenQucHJvdG90eXBlLHthZGRJbmRleDpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkSW5kZXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRJbmRleCgpLiIpLHRoaXMuc2V0SW5kZXgodCl9LGFkZEF0dHJpYnV0ZTpmdW5jdGlvbih0LGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0QXR0cmlidXRlKCkuIiksZSYmZS5pc0J1ZmZlckF0dHJpYnV0ZXx8ZSYmZS5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlPyJpbmRleCI9PT10Pyhjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5LmFkZEF0dHJpYnV0ZTogVXNlIC5zZXRJbmRleCgpIGZvciBpbmRleCBhdHRyaWJ1dGUuIiksdGhpcy5zZXRJbmRleChlKSx0aGlzKTp0aGlzLnNldEF0dHJpYnV0ZSh0LGUpOihjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkQXR0cmlidXRlKCkgbm93IGV4cGVjdHMgKCBuYW1lLCBhdHRyaWJ1dGUgKS4iKSx0aGlzLnNldEF0dHJpYnV0ZSh0LG5ldyBienQoYXJndW1lbnRzWzFdLGFyZ3VtZW50c1syXSkpKX0sYWRkRHJhd0NhbGw6ZnVuY3Rpb24odCxlLG4pe3ZvaWQgMCE9PW4mJmNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGREcmF3Q2FsbCgpIG5vIGxvbmdlciBzdXBwb3J0cyBpbmRleE9mZnNldC4iKSxjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkRHJhd0NhbGwoKSBpcyBub3cgLmFkZEdyb3VwKCkuIiksdGhpcy5hZGRHcm91cCh0LGUpfSxjbGVhckRyYXdDYWxsczpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5jbGVhckRyYXdDYWxscygpIGlzIG5vdyAuY2xlYXJHcm91cHMoKS4iKSx0aGlzLmNsZWFyR3JvdXBzKCl9LGNvbXB1dGVPZmZzZXRzOmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmNvbXB1dGVPZmZzZXRzKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0scmVtb3ZlQXR0cmlidXRlOmZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAucmVtb3ZlQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZGVsZXRlQXR0cmlidXRlKCkuIiksdGhpcy5kZWxldGVBdHRyaWJ1dGUodCl9LGFwcGx5TWF0cml4OmZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYXBwbHlNYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5hcHBseU1hdHJpeDQoKS4iKSx0aGlzLmFwcGx5TWF0cml4NCh0KX19KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhWenQucHJvdG90eXBlLHtkcmF3Y2FsbHM6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLmVycm9yKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmRyYXdjYWxscyBoYXMgYmVlbiByZW5hbWVkIHRvIC5ncm91cHMuIiksdGhpcy5ncm91cHN9fSxvZmZzZXRzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLm9mZnNldHMgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ3JvdXBzLiIpLHRoaXMuZ3JvdXBzfX19KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhhanQucHJvdG90eXBlLHttYXhJbnN0YW5jZWRDb3VudDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnk6IC5tYXhJbnN0YW5jZWRDb3VudCBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnN0YW5jZUNvdW50LiIpLHRoaXMuaW5zdGFuY2VDb3VudH0sc2V0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnk6IC5tYXhJbnN0YW5jZWRDb3VudCBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnN0YW5jZUNvdW50LiIpLHRoaXMuaW5zdGFuY2VDb3VudD10fX19KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlR3QucHJvdG90eXBlLHtsaW5lUHJlY2lzaW9uOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5SYXljYXN0ZXI6IC5saW5lUHJlY2lzaW9uIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAucGFyYW1zLkxpbmUudGhyZXNob2xkIGluc3RlYWQuIiksdGhpcy5wYXJhbXMuTGluZS50aHJlc2hvbGR9LHNldDpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLlJheWNhc3RlcjogLmxpbmVQcmVjaXNpb24gaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5wYXJhbXMuTGluZS50aHJlc2hvbGQgaW5zdGVhZC4iKSx0aGlzLnBhcmFtcy5MaW5lLnRocmVzaG9sZD10fX19KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhJSHQucHJvdG90eXBlLHtkeW5hbWljOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5JbnRlcmxlYXZlZEJ1ZmZlcjogLmxlbmd0aCBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnVzYWdlIGluc3RlYWQuIiksdGhpcy51c2FnZT09PUxPdH0sc2V0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuSW50ZXJsZWF2ZWRCdWZmZXI6IC5sZW5ndGggaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC51c2FnZSBpbnN0ZWFkLiIpLHRoaXMuc2V0VXNhZ2UodCl9fX0pLE9iamVjdC5hc3NpZ24oSUh0LnByb3RvdHlwZSx7c2V0RHluYW1pYzpmdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5JbnRlcmxlYXZlZEJ1ZmZlcjogLnNldER5bmFtaWMoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnNldFVzYWdlKCkgaW5zdGVhZC4iKSx0aGlzLnNldFVzYWdlKCEwPT09dD9MT3Q6a090KSx0aGlzfSxzZXRBcnJheTpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkludGVybGVhdmVkQnVmZmVyOiAuc2V0QXJyYXkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEJ1ZmZlckdlb21ldHJ5IC5zZXRBdHRyaWJ1dGUgdG8gcmVwbGFjZS9yZXNpemUgYXR0cmlidXRlIGJ1ZmZlcnMiKX19KSxPYmplY3QuYXNzaWduKHhWdC5wcm90b3R5cGUse2dldEFycmF5czpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkV4dHJ1ZGVHZW9tZXRyeTogLmdldEFycmF5cygpIGhhcyBiZWVuIHJlbW92ZWQuIil9LGFkZFNoYXBlTGlzdDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkV4dHJ1ZGVHZW9tZXRyeTogLmFkZFNoYXBlTGlzdCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LGFkZFNoYXBlOmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuRXh0cnVkZUdlb21ldHJ5OiAuYWRkU2hhcGUoKSBoYXMgYmVlbiByZW1vdmVkLiIpfX0pLE9iamVjdC5hc3NpZ24oTkh0LnByb3RvdHlwZSx7ZGlzcG9zZTpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNjZW5lOiAuZGlzcG9zZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9fSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoSmp0LnByb3RvdHlwZSx7ZHluYW1pYzp7c2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5Vbmlmb3JtOiAuZHluYW1pYyBoYXMgYmVlbiByZW1vdmVkLiBVc2Ugb2JqZWN0Lm9uQmVmb3JlUmVuZGVyKCkgaW5zdGVhZC4iKX19LG9uVXBkYXRlOnt2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlVuaWZvcm06IC5vblVwZGF0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBvYmplY3Qub25CZWZvcmVSZW5kZXIoKSBpbnN0ZWFkLiIpLHRoaXN9fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGd6dC5wcm90b3R5cGUse3dyYXBBcm91bmQ6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC53cmFwQXJvdW5kIGhhcyBiZWVuIHJlbW92ZWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC53cmFwQXJvdW5kIGhhcyBiZWVuIHJlbW92ZWQuIil9fSxvdmVyZHJhdzp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRlcmlhbDogLm92ZXJkcmF3IGhhcyBiZWVuIHJlbW92ZWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC5vdmVyZHJhdyBoYXMgYmVlbiByZW1vdmVkLiIpfX0sd3JhcFJHQjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC53cmFwUkdCIGhhcyBiZWVuIHJlbW92ZWQuIiksbmV3IHB6dH19LHNoYWRpbmc6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zaGFkaW5nIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB0aGUgYm9vbGVhbiAuZmxhdFNoYWRpbmcgaW5zdGVhZC4iKX0sc2V0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnNoYWRpbmcgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHRoZSBib29sZWFuIC5mbGF0U2hhZGluZyBpbnN0ZWFkLiIpLHRoaXMuZmxhdFNoYWRpbmc9MT09PXR9fSxzdGVuY2lsTWFzazp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnN0ZW5jaWxNYXNrIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuc3RlbmNpbEZ1bmNNYXNrIGluc3RlYWQuIiksdGhpcy5zdGVuY2lsRnVuY01hc2t9LHNldDpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zdGVuY2lsTWFzayBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnN0ZW5jaWxGdW5jTWFzayBpbnN0ZWFkLiIpLHRoaXMuc3RlbmNpbEZ1bmNNYXNrPXR9fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFZWdC5wcm90b3R5cGUse21ldGFsOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NZXNoUGhvbmdNYXRlcmlhbDogLm1ldGFsIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5NZXNoU3RhbmRhcmRNYXRlcmlhbCBpbnN0ZWFkLiIpLCExfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1lc2hQaG9uZ01hdGVyaWFsOiAubWV0YWwgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLk1lc2hTdGFuZGFyZE1hdGVyaWFsIGluc3RlYWQiKX19fSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRlZ0LnByb3RvdHlwZSx7dHJhbnNwYXJlbmN5OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NZXNoUGh5c2ljYWxNYXRlcmlhbDogLnRyYW5zcGFyZW5jeSBoYXMgYmVlbiByZW5hbWVkIHRvIC50cmFuc21pc3Npb24uIiksdGhpcy50cmFuc21pc3Npb259LHNldDpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLk1lc2hQaHlzaWNhbE1hdGVyaWFsOiAudHJhbnNwYXJlbmN5IGhhcyBiZWVuIHJlbmFtZWQgdG8gLnRyYW5zbWlzc2lvbi4iKSx0aGlzLnRyYW5zbWlzc2lvbj10fX19KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhoRHQucHJvdG90eXBlLHtkZXJpdmF0aXZlczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuU2hhZGVyTWF0ZXJpYWw6IC5kZXJpdmF0aXZlcyBoYXMgYmVlbiBtb3ZlZCB0byAuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlcy4iKSx0aGlzLmV4dGVuc2lvbnMuZGVyaXZhdGl2ZXN9LHNldDpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLiBTaGFkZXJNYXRlcmlhbDogLmRlcml2YXRpdmVzIGhhcyBiZWVuIG1vdmVkIHRvIC5leHRlbnNpb25zLmRlcml2YXRpdmVzLiIpLHRoaXMuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlcz10fX19KSxPYmplY3QuYXNzaWduKEFIdC5wcm90b3R5cGUse2NsZWFyVGFyZ2V0OmZ1bmN0aW9uKHQsZSxuLGkpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmNsZWFyVGFyZ2V0KCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5zZXRSZW5kZXJUYXJnZXQoKSBhbmQgLmNsZWFyKCkgaW5zdGVhZC4iKSx0aGlzLnNldFJlbmRlclRhcmdldCh0KSx0aGlzLmNsZWFyKGUsbixpKX0sYW5pbWF0ZTpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5hbmltYXRlKCkgaXMgbm93IC5zZXRBbmltYXRpb25Mb29wKCkuIiksdGhpcy5zZXRBbmltYXRpb25Mb29wKHQpfSxnZXRDdXJyZW50UmVuZGVyVGFyZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdldEN1cnJlbnRSZW5kZXJUYXJnZXQoKSBpcyBub3cgLmdldFJlbmRlclRhcmdldCgpLiIpLHRoaXMuZ2V0UmVuZGVyVGFyZ2V0KCl9LGdldE1heEFuaXNvdHJvcHk6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2V0TWF4QW5pc290cm9weSgpIGlzIG5vdyAuY2FwYWJpbGl0aWVzLmdldE1heEFuaXNvdHJvcHkoKS4iKSx0aGlzLmNhcGFiaWxpdGllcy5nZXRNYXhBbmlzb3Ryb3B5KCl9LGdldFByZWNpc2lvbjpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRQcmVjaXNpb24oKSBpcyBub3cgLmNhcGFiaWxpdGllcy5wcmVjaXNpb24uIiksdGhpcy5jYXBhYmlsaXRpZXMucHJlY2lzaW9ufSxyZXNldEdMU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAucmVzZXRHTFN0YXRlKCkgaXMgbm93IC5zdGF0ZS5yZXNldCgpLiIpLHRoaXMuc3RhdGUucmVzZXQoKX0sc3VwcG9ydHNGbG9hdFRleHR1cmVzOmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzRmxvYXRUZXh0dXJlcygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdPRVNfdGV4dHVyZV9mbG9hdCcgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJPRVNfdGV4dHVyZV9mbG9hdCIpfSxzdXBwb3J0c0hhbGZGbG9hdFRleHR1cmVzOmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzSGFsZkZsb2F0VGV4dHVyZXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnT0VTX3RleHR1cmVfaGFsZl9mbG9hdCcgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0Iil9LHN1cHBvcnRzU3RhbmRhcmREZXJpdmF0aXZlczpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c1N0YW5kYXJkRGVyaXZhdGl2ZXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzJyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpfSxzdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlUzNUQzpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlUzNUQygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YycgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpfSxzdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlUFZSVEM6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZVBWUlRDKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YycgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKX0sc3VwcG9ydHNCbGVuZE1pbk1heDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0JsZW5kTWluTWF4KCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ0VYVF9ibGVuZF9taW5tYXgnICkuIiksdGhpcy5leHRlbnNpb25zLmdldCgiRVhUX2JsZW5kX21pbm1heCIpfSxzdXBwb3J0c1ZlcnRleFRleHR1cmVzOmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzVmVydGV4VGV4dHVyZXMoKSBpcyBub3cgLmNhcGFiaWxpdGllcy52ZXJ0ZXhUZXh0dXJlcy4iKSx0aGlzLmNhcGFiaWxpdGllcy52ZXJ0ZXhUZXh0dXJlc30sc3VwcG9ydHNJbnN0YW5jZWRBcnJheXM6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNJbnN0YW5jZWRBcnJheXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnQU5HTEVfaW5zdGFuY2VkX2FycmF5cycgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIil9LGVuYWJsZVNjaXNzb3JUZXN0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmVuYWJsZVNjaXNzb3JUZXN0KCkgaXMgbm93IC5zZXRTY2lzc29yVGVzdCgpLiIpLHRoaXMuc2V0U2Npc3NvclRlc3QodCl9LGluaXRNYXRlcmlhbDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmluaXRNYXRlcmlhbCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LGFkZFByZVBsdWdpbjpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmFkZFByZVBsdWdpbigpIGhhcyBiZWVuIHJlbW92ZWQuIil9LGFkZFBvc3RQbHVnaW46ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5hZGRQb3N0UGx1Z2luKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sdXBkYXRlU2hhZG93TWFwOmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAudXBkYXRlU2hhZG93TWFwKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sc2V0RmFjZUN1bGxpbmc6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRGYWNlQ3VsbGluZygpIGhhcyBiZWVuIHJlbW92ZWQuIil9LGFsbG9jVGV4dHVyZVVuaXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5hbGxvY1RleHR1cmVVbml0KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sc2V0VGV4dHVyZTpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNldFRleHR1cmUoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXRUZXh0dXJlMkQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRUZXh0dXJlMkQoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXRUZXh0dXJlQ3ViZTpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNldFRleHR1cmVDdWJlKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sZ2V0QWN0aXZlTWlwTWFwTGV2ZWw6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2V0QWN0aXZlTWlwTWFwTGV2ZWwoKSBpcyBub3cgLmdldEFjdGl2ZU1pcG1hcExldmVsKCkuIiksdGhpcy5nZXRBY3RpdmVNaXBtYXBMZXZlbCgpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEFIdC5wcm90b3R5cGUse3NoYWRvd01hcEVuYWJsZWQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNoYWRvd01hcC5lbmFibGVkfSxzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwRW5hYmxlZCBpcyBub3cgLnNoYWRvd01hcC5lbmFibGVkLiIpLHRoaXMuc2hhZG93TWFwLmVuYWJsZWQ9dH19LHNoYWRvd01hcFR5cGU6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNoYWRvd01hcC50eXBlfSxzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwVHlwZSBpcyBub3cgLnNoYWRvd01hcC50eXBlLiIpLHRoaXMuc2hhZG93TWFwLnR5cGU9dH19LHNoYWRvd01hcEN1bGxGYWNlOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBDdWxsRmFjZSBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBDdWxsRmFjZSBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfX0sY29udGV4dDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmNvbnRleHQgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5nZXRDb250ZXh0KCkgaW5zdGVhZC4iKSx0aGlzLmdldENvbnRleHQoKX19LHZyOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAudnIgaGFzIGJlZW4gcmVuYW1lZCB0byAueHIiKSx0aGlzLnhyfX0sZ2FtbWFJbnB1dDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hSW5wdXQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IHRoZSBlbmNvZGluZyBmb3IgdGV4dHVyZXMgdmlhIFRleHR1cmUuZW5jb2RpbmcgaW5zdGVhZC4iKSwhMX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFJbnB1dCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgdGhlIGVuY29kaW5nIGZvciB0ZXh0dXJlcyB2aWEgVGV4dHVyZS5lbmNvZGluZyBpbnN0ZWFkLiIpfX0sZ2FtbWFPdXRwdXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYU91dHB1dCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgV2ViR0xSZW5kZXJlci5vdXRwdXRFbmNvZGluZyBpbnN0ZWFkLiIpLCExfSxzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFPdXRwdXQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IFdlYkdMUmVuZGVyZXIub3V0cHV0RW5jb2RpbmcgaW5zdGVhZC4iKSx0aGlzLm91dHB1dEVuY29kaW5nPSEwPT09dD93T3Q6eE90fX0sdG9uZU1hcHBpbmdXaGl0ZVBvaW50OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAudG9uZU1hcHBpbmdXaGl0ZVBvaW50IGhhcyBiZWVuIHJlbW92ZWQuIiksMX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAudG9uZU1hcHBpbmdXaGl0ZVBvaW50IGhhcyBiZWVuIHJlbW92ZWQuIil9fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHZIdC5wcm90b3R5cGUse2N1bGxGYWNlOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAuY3VsbEZhY2UgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLmN1bGxGYWNlIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9fSxyZW5kZXJSZXZlcnNlU2lkZWQ6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5yZW5kZXJSZXZlcnNlU2lkZWQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLnJlbmRlclJldmVyc2VTaWRlZCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfX0scmVuZGVyU2luZ2xlU2lkZWQ6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5yZW5kZXJTaW5nbGVTaWRlZCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAucmVuZGVyU2luZ2xlU2lkZWQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX19fSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoR090LnByb3RvdHlwZSx7d3JhcFM6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFMgaXMgbm93IC50ZXh0dXJlLndyYXBTLiIpLHRoaXMudGV4dHVyZS53cmFwU30sc2V0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwUyBpcyBub3cgLnRleHR1cmUud3JhcFMuIiksdGhpcy50ZXh0dXJlLndyYXBTPXR9fSx3cmFwVDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwVCBpcyBub3cgLnRleHR1cmUud3JhcFQuIiksdGhpcy50ZXh0dXJlLndyYXBUfSxzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLndyYXBUIGlzIG5vdyAudGV4dHVyZS53cmFwVC4iKSx0aGlzLnRleHR1cmUud3JhcFQ9dH19LG1hZ0ZpbHRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5tYWdGaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1hZ0ZpbHRlci4iKSx0aGlzLnRleHR1cmUubWFnRmlsdGVyfSxzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm1hZ0ZpbHRlciBpcyBub3cgLnRleHR1cmUubWFnRmlsdGVyLiIpLHRoaXMudGV4dHVyZS5tYWdGaWx0ZXI9dH19LG1pbkZpbHRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5taW5GaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1pbkZpbHRlci4iKSx0aGlzLnRleHR1cmUubWluRmlsdGVyfSxzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm1pbkZpbHRlciBpcyBub3cgLnRleHR1cmUubWluRmlsdGVyLiIpLHRoaXMudGV4dHVyZS5taW5GaWx0ZXI9dH19LGFuaXNvdHJvcHk6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuYW5pc290cm9weSBpcyBub3cgLnRleHR1cmUuYW5pc290cm9weS4iKSx0aGlzLnRleHR1cmUuYW5pc290cm9weX0sc2V0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5hbmlzb3Ryb3B5IGlzIG5vdyAudGV4dHVyZS5hbmlzb3Ryb3B5LiIpLHRoaXMudGV4dHVyZS5hbmlzb3Ryb3B5PXR9fSxvZmZzZXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAub2Zmc2V0IGlzIG5vdyAudGV4dHVyZS5vZmZzZXQuIiksdGhpcy50ZXh0dXJlLm9mZnNldH0sc2V0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5vZmZzZXQgaXMgbm93IC50ZXh0dXJlLm9mZnNldC4iKSx0aGlzLnRleHR1cmUub2Zmc2V0PXR9fSxyZXBlYXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAucmVwZWF0IGlzIG5vdyAudGV4dHVyZS5yZXBlYXQuIiksdGhpcy50ZXh0dXJlLnJlcGVhdH0sc2V0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5yZXBlYXQgaXMgbm93IC50ZXh0dXJlLnJlcGVhdC4iKSx0aGlzLnRleHR1cmUucmVwZWF0PXR9fSxmb3JtYXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuZm9ybWF0IGlzIG5vdyAudGV4dHVyZS5mb3JtYXQuIiksdGhpcy50ZXh0dXJlLmZvcm1hdH0sc2V0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5mb3JtYXQgaXMgbm93IC50ZXh0dXJlLmZvcm1hdC4iKSx0aGlzLnRleHR1cmUuZm9ybWF0PXR9fSx0eXBlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnR5cGUgaXMgbm93IC50ZXh0dXJlLnR5cGUuIiksdGhpcy50ZXh0dXJlLnR5cGV9LHNldDpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAudHlwZSBpcyBub3cgLnRleHR1cmUudHlwZS4iKSx0aGlzLnRleHR1cmUudHlwZT10fX0sZ2VuZXJhdGVNaXBtYXBzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmdlbmVyYXRlTWlwbWFwcyBpcyBub3cgLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzLiIpLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHN9LHNldDpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuZ2VuZXJhdGVNaXBtYXBzIGlzIG5vdyAudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHMuIiksdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz10fX19KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhQanQucHJvdG90eXBlLHtsb2FkOnt2YWx1ZTpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiAubG9hZCBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuQXVkaW9Mb2FkZXIgaW5zdGVhZC4iKTtjb25zdCBlPXRoaXM7cmV0dXJuKG5ldyB2anQpLmxvYWQodCwoZnVuY3Rpb24odCl7ZS5zZXRCdWZmZXIodCl9KSksdGhpc319LHN0YXJ0VGltZTp7c2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogLnN0YXJ0VGltZSBpcyBub3cgLnBsYXkoIGRlbGF5ICkuIil9fX0pLHpqdC5wcm90b3R5cGUuZ2V0RGF0YT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvQW5hbHlzZXI6IC5nZXREYXRhKCkgaXMgbm93IC5nZXRGcmVxdWVuY3lEYXRhKCkuIiksdGhpcy5nZXRGcmVxdWVuY3lEYXRhKCl9LG1EdC5wcm90b3R5cGUudXBkYXRlQ3ViZU1hcD1mdW5jdGlvbih0LGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkN1YmVDYW1lcmE6IC51cGRhdGVDdWJlTWFwKCkgaXMgbm93IC51cGRhdGUoKS4iKSx0aGlzLnVwZGF0ZSh0LGUpfSxtRHQucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKHQsZSxuLGkpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkN1YmVDYW1lcmE6IC5jbGVhcigpIGlzIG5vdyAucmVuZGVyVGFyZ2V0LmNsZWFyKCkuIiksdGhpcy5yZW5kZXJUYXJnZXQuY2xlYXIodCxlLG4saSl9O2NvbnN0IHNXdD17bWVyZ2U6ZnVuY3Rpb24odCxlLG4pe2xldCBpO2NvbnNvbGUud2FybigiVEhSRUUuR2VvbWV0cnlVdGlsczogLm1lcmdlKCkgaGFzIGJlZW4gbW92ZWQgdG8gR2VvbWV0cnkuIFVzZSBnZW9tZXRyeS5tZXJnZSggZ2VvbWV0cnkyLCBtYXRyaXgsIG1hdGVyaWFsSW5kZXhPZmZzZXQgKSBpbnN0ZWFkLiIpLGUuaXNNZXNoJiYoZS5tYXRyaXhBdXRvVXBkYXRlJiZlLnVwZGF0ZU1hdHJpeCgpLGk9ZS5tYXRyaXgsZT1lLmdlb21ldHJ5KSx0Lm1lcmdlKGUsaSxuKX0sY2VudGVyOmZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkdlb21ldHJ5VXRpbHM6IC5jZW50ZXIoKSBoYXMgYmVlbiBtb3ZlZCB0byBHZW9tZXRyeS4gVXNlIGdlb21ldHJ5LmNlbnRlcigpIGluc3RlYWQuIiksdC5jZW50ZXIoKX19O0hPdC5jcm9zc09yaWdpbj12b2lkIDAsSE90LmxvYWRUZXh0dXJlPWZ1bmN0aW9uKHQsZSxuLGkpe2NvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5sb2FkVGV4dHVyZSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuVGV4dHVyZUxvYWRlcigpIGluc3RlYWQuIik7Y29uc3Qgcj1uZXcgYlV0O3Iuc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbik7Y29uc3Qgbz1yLmxvYWQodCxuLHZvaWQgMCxpKTtyZXR1cm4gZSYmKG8ubWFwcGluZz1lKSxvfSxIT3QubG9hZFRleHR1cmVDdWJlPWZ1bmN0aW9uKHQsZSxuLGkpe2NvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5sb2FkVGV4dHVyZUN1YmUgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLkN1YmVUZXh0dXJlTG9hZGVyKCkgaW5zdGVhZC4iKTtjb25zdCByPW5ldyB5VXQ7ci5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKTtjb25zdCBvPXIubG9hZCh0LG4sdm9pZCAwLGkpO3JldHVybiBlJiYoby5tYXBwaW5nPWUpLG99LEhPdC5sb2FkQ29tcHJlc3NlZFRleHR1cmU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRDb21wcmVzc2VkVGV4dHVyZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuRERTTG9hZGVyIGluc3RlYWQuIil9LEhPdC5sb2FkQ29tcHJlc3NlZFRleHR1cmVDdWJlPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuSW1hZ2VVdGlscy5sb2FkQ29tcHJlc3NlZFRleHR1cmVDdWJlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5ERFNMb2FkZXIgaW5zdGVhZC4iKX07Y29uc3QgbFd0PXtjcmVhdGVNdWx0aU1hdGVyaWFsT2JqZWN0OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuU2NlbmVVdGlscyBoYXMgYmVlbiBtb3ZlZCB0byAvZXhhbXBsZXMvanNtL3V0aWxzL1NjZW5lVXRpbHMuanMiKX0sZGV0YWNoOmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuU2NlbmVVdGlscyBoYXMgYmVlbiBtb3ZlZCB0byAvZXhhbXBsZXMvanNtL3V0aWxzL1NjZW5lVXRpbHMuanMiKX0sYXR0YWNoOmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuU2NlbmVVdGlscyBoYXMgYmVlbiBtb3ZlZCB0byAvZXhhbXBsZXMvanNtL3V0aWxzL1NjZW5lVXRpbHMuanMiKX19OyJ1bmRlZmluZWQiIT10eXBlb2YgX19USFJFRV9ERVZUT09MU19fJiZfX1RIUkVFX0RFVlRPT0xTX18uZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInJlZ2lzdGVyIix7ZGV0YWlsOntyZXZpc2lvbjpDSXR9fSkpLCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiYod2luZG93Ll9fVEhSRUVfXz9jb25zb2xlLndhcm4oIldBUk5JTkc6IE11bHRpcGxlIGluc3RhbmNlcyBvZiBUaHJlZS5qcyBiZWluZyBpbXBvcnRlZC4iKTp3aW5kb3cuX19USFJFRV9fPUNJdCk7dmFyIGNXdD1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxBQ0VTRmlsbWljVG9uZU1hcHBpbmc6NCxBZGRFcXVhdGlvbjpMSXQsQWRkT3BlcmF0aW9uOjIsQWRkaXRpdmVBbmltYXRpb25CbGVuZE1vZGU6Yk90LEFkZGl0aXZlQmxlbmRpbmc6MixBbHBoYUZvcm1hdDoxMDIxLEFsd2F5c0RlcHRoOjEsQWx3YXlzU3RlbmNpbEZ1bmM6NTE5LEFtYmllbnRMaWdodDp0anQsQW1iaWVudExpZ2h0UHJvYmU6eGp0LEFuaW1hdGlvbkNsaXA6c1V0LEFuaW1hdGlvbkxvYWRlcjptVXQsQW5pbWF0aW9uTWl4ZXI6Wmp0LEFuaW1hdGlvbk9iamVjdEdyb3VwOiRqdCxBbmltYXRpb25VdGlsczpYVnQsQXJjQ3VydmU6U1V0LEFycmF5Q2FtZXJhOlNIdCxBcnJvd0hlbHBlcjpjbGFzcyBleHRlbmRzIFdSdHtjb25zdHJ1Y3Rvcih0LGUsbixpLHIsbyl7c3VwZXIoKSx0aGlzLnR5cGU9IkFycm93SGVscGVyIix2b2lkIDA9PT10JiYodD1uZXcgcU90KDAsMCwxKSksdm9pZCAwPT09ZSYmKGU9bmV3IHFPdCgwLDAsMCkpLHZvaWQgMD09PW4mJihuPTEpLHZvaWQgMD09PWkmJihpPTE2Nzc2OTYwKSx2b2lkIDA9PT1yJiYocj0uMipuKSx2b2lkIDA9PT1vJiYobz0uMipyKSx2b2lkIDA9PT1MR3QmJihMR3Q9bmV3IFZ6dCxMR3Quc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGt6dChbMCwwLDAsMCwxLDBdLDMpKSxQR3Q9bmV3IEhGdCgwLC41LDEsNSwxKSxQR3QudHJhbnNsYXRlKDAsLS41LDApKSx0aGlzLnBvc2l0aW9uLmNvcHkoZSksdGhpcy5saW5lPW5ldyB3RnQoTEd0LG5ldyBnRnQoe2NvbG9yOmksdG9uZU1hcHBlZDohMX0pKSx0aGlzLmxpbmUubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLmFkZCh0aGlzLmxpbmUpLHRoaXMuY29uZT1uZXcgb0R0KFBHdCxuZXcgX3p0KHtjb2xvcjppLHRvbmVNYXBwZWQ6ITF9KSksdGhpcy5jb25lLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5hZGQodGhpcy5jb25lKSx0aGlzLnNldERpcmVjdGlvbih0KSx0aGlzLnNldExlbmd0aChuLHIsbyl9c2V0RGlyZWN0aW9uKHQpe2lmKHQueT4uOTk5OTkpdGhpcy5xdWF0ZXJuaW9uLnNldCgwLDAsMCwxKTtlbHNlIGlmKHQueTwtLjk5OTk5KXRoaXMucXVhdGVybmlvbi5zZXQoMSwwLDAsMCk7ZWxzZXtrR3Quc2V0KHQueiwwLC10LngpLm5vcm1hbGl6ZSgpO2NvbnN0IGU9TWF0aC5hY29zKHQueSk7dGhpcy5xdWF0ZXJuaW9uLnNldEZyb21BeGlzQW5nbGUoa0d0LGUpfX1zZXRMZW5ndGgodCxlLG4pe3ZvaWQgMD09PWUmJihlPS4yKnQpLHZvaWQgMD09PW4mJihuPS4yKmUpLHRoaXMubGluZS5zY2FsZS5zZXQoMSxNYXRoLm1heCgxZS00LHQtZSksMSksdGhpcy5saW5lLnVwZGF0ZU1hdHJpeCgpLHRoaXMuY29uZS5zY2FsZS5zZXQobixlLG4pLHRoaXMuY29uZS5wb3NpdGlvbi55PXQsdGhpcy5jb25lLnVwZGF0ZU1hdHJpeCgpfXNldENvbG9yKHQpe3RoaXMubGluZS5tYXRlcmlhbC5jb2xvci5zZXQodCksdGhpcy5jb25lLm1hdGVyaWFsLmNvbG9yLnNldCh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQsITEpLHRoaXMubGluZS5jb3B5KHQubGluZSksdGhpcy5jb25lLmNvcHkodC5jb25lKSx0aGlzfX0sQXVkaW86UGp0LEF1ZGlvQW5hbHlzZXI6emp0LEF1ZGlvQ29udGV4dDp5anQsQXVkaW9MaXN0ZW5lcjpjbGFzcyBleHRlbmRzIFdSdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy50eXBlPSJBdWRpb0xpc3RlbmVyIix0aGlzLmNvbnRleHQ9eWp0LmdldENvbnRleHQoKSx0aGlzLmdhaW49dGhpcy5jb250ZXh0LmNyZWF0ZUdhaW4oKSx0aGlzLmdhaW4uY29ubmVjdCh0aGlzLmNvbnRleHQuZGVzdGluYXRpb24pLHRoaXMuZmlsdGVyPW51bGwsdGhpcy50aW1lRGVsdGE9MCx0aGlzLl9jbG9jaz1uZXcgRWp0fWdldElucHV0KCl7cmV0dXJuIHRoaXMuZ2Fpbn1yZW1vdmVGaWx0ZXIoKXtyZXR1cm4gbnVsbCE9PXRoaXMuZmlsdGVyJiYodGhpcy5nYWluLmRpc2Nvbm5lY3QodGhpcy5maWx0ZXIpLHRoaXMuZmlsdGVyLmRpc2Nvbm5lY3QodGhpcy5jb250ZXh0LmRlc3RpbmF0aW9uKSx0aGlzLmdhaW4uY29ubmVjdCh0aGlzLmNvbnRleHQuZGVzdGluYXRpb24pLHRoaXMuZmlsdGVyPW51bGwpLHRoaXN9Z2V0RmlsdGVyKCl7cmV0dXJuIHRoaXMuZmlsdGVyfXNldEZpbHRlcih0KXtyZXR1cm4gbnVsbCE9PXRoaXMuZmlsdGVyPyh0aGlzLmdhaW4uZGlzY29ubmVjdCh0aGlzLmZpbHRlciksdGhpcy5maWx0ZXIuZGlzY29ubmVjdCh0aGlzLmNvbnRleHQuZGVzdGluYXRpb24pKTp0aGlzLmdhaW4uZGlzY29ubmVjdCh0aGlzLmNvbnRleHQuZGVzdGluYXRpb24pLHRoaXMuZmlsdGVyPXQsdGhpcy5nYWluLmNvbm5lY3QodGhpcy5maWx0ZXIpLHRoaXMuZmlsdGVyLmNvbm5lY3QodGhpcy5jb250ZXh0LmRlc3RpbmF0aW9uKSx0aGlzfWdldE1hc3RlclZvbHVtZSgpe3JldHVybiB0aGlzLmdhaW4uZ2Fpbi52YWx1ZX1zZXRNYXN0ZXJWb2x1bWUodCl7cmV0dXJuIHRoaXMuZ2Fpbi5nYWluLnNldFRhcmdldEF0VGltZSh0LHRoaXMuY29udGV4dC5jdXJyZW50VGltZSwuMDEpLHRoaXN9dXBkYXRlTWF0cml4V29ybGQodCl7c3VwZXIudXBkYXRlTWF0cml4V29ybGQodCk7Y29uc3QgZT10aGlzLmNvbnRleHQubGlzdGVuZXIsbj10aGlzLnVwO2lmKHRoaXMudGltZURlbHRhPXRoaXMuX2Nsb2NrLmdldERlbHRhKCksdGhpcy5tYXRyaXhXb3JsZC5kZWNvbXBvc2UoQ2p0LEFqdCxranQpLExqdC5zZXQoMCwwLC0xKS5hcHBseVF1YXRlcm5pb24oQWp0KSxlLnBvc2l0aW9uWCl7Y29uc3QgdD10aGlzLmNvbnRleHQuY3VycmVudFRpbWUrdGhpcy50aW1lRGVsdGE7ZS5wb3NpdGlvblgubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoQ2p0LngsdCksZS5wb3NpdGlvblkubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoQ2p0LnksdCksZS5wb3NpdGlvbloubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoQ2p0LnosdCksZS5mb3J3YXJkWC5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZShManQueCx0KSxlLmZvcndhcmRZLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKExqdC55LHQpLGUuZm9yd2FyZFoubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoTGp0LnosdCksZS51cFgubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUobi54LHQpLGUudXBZLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKG4ueSx0KSxlLnVwWi5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZShuLnosdCl9ZWxzZSBlLnNldFBvc2l0aW9uKENqdC54LENqdC55LENqdC56KSxlLnNldE9yaWVudGF0aW9uKExqdC54LExqdC55LExqdC56LG4ueCxuLnksbi56KX19LEF1ZGlvTG9hZGVyOnZqdCxBeGVzSGVscGVyOk5HdCxBeGlzSGVscGVyOmZ1bmN0aW9uIHVXdCh0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5BeGlzSGVscGVyIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuQXhlc0hlbHBlci4iKSxuZXcgTkd0KHQpfSxCYWNrU2lkZToxLEJhc2ljRGVwdGhQYWNraW5nOjMyMDAsQmFzaWNTaGFkb3dNYXA6MCxCaW5hcnlUZXh0dXJlTG9hZGVyOmZ1bmN0aW9uIGhXdCh0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CaW5hcnlUZXh0dXJlTG9hZGVyIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuRGF0YVRleHR1cmVMb2FkZXIuIiksbmV3IHZVdCh0KX0sQm9uZTpzRnQsQm9vbGVhbktleWZyYW1lVHJhY2s6dFV0LEJvdW5kaW5nQm94SGVscGVyOmZ1bmN0aW9uIGRXdCh0LGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJvdW5kaW5nQm94SGVscGVyIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIENyZWF0aW5nIGEgVEhSRUUuQm94SGVscGVyIGluc3RlYWQuIiksbmV3IEFHdCh0LGUpfSxCb3gyOmFHdCxCb3gzOiRPdCxCb3gzSGVscGVyOmNsYXNzIGV4dGVuZHMgRUZ0e2NvbnN0cnVjdG9yKHQsZT0xNjc3Njk2MCl7Y29uc3Qgbj1uZXcgVWludDE2QXJyYXkoWzAsMSwxLDIsMiwzLDMsMCw0LDUsNSw2LDYsNyw3LDQsMCw0LDEsNSwyLDYsMyw3XSksaT1uZXcgVnp0O2kuc2V0SW5kZXgobmV3IGJ6dChuLDEpKSxpLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBrenQoWzEsMSwxLC0xLDEsMSwtMSwtMSwxLDEsLTEsMSwxLDEsLTEsLTEsMSwtMSwtMSwtMSwtMSwxLC0xLC0xXSwzKSksc3VwZXIoaSxuZXcgZ0Z0KHtjb2xvcjplLHRvbmVNYXBwZWQ6ITF9KSksdGhpcy5ib3g9dCx0aGlzLnR5cGU9IkJveDNIZWxwZXIiLHRoaXMuZ2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCl9dXBkYXRlTWF0cml4V29ybGQodCl7Y29uc3QgZT10aGlzLmJveDtlLmlzRW1wdHkoKXx8KGUuZ2V0Q2VudGVyKHRoaXMucG9zaXRpb24pLGUuZ2V0U2l6ZSh0aGlzLnNjYWxlKSx0aGlzLnNjYWxlLm11bHRpcGx5U2NhbGFyKC41KSxzdXBlci51cGRhdGVNYXRyaXhXb3JsZCh0KSl9fSxCb3hCdWZmZXJHZW9tZXRyeTpzRHQsQm94R2VvbWV0cnk6c0R0LEJveEhlbHBlcjpBR3QsQnVmZmVyQXR0cmlidXRlOmJ6dCxCdWZmZXJHZW9tZXRyeTpWenQsQnVmZmVyR2VvbWV0cnlMb2FkZXI6bGp0LEJ5dGVUeXBlOjEwMTAsQ2FjaGU6Y1V0LENhbWVyYTpkRHQsQ2FtZXJhSGVscGVyOmNsYXNzIGV4dGVuZHMgRUZ0e2NvbnN0cnVjdG9yKHQpe2NvbnN0IGU9bmV3IFZ6dCxuPW5ldyBnRnQoe2NvbG9yOjE2Nzc3MjE1LHZlcnRleENvbG9yczohMCx0b25lTWFwcGVkOiExfSksaT1bXSxyPVtdLG89e30sYT1uZXcgcHp0KDE2NzU1MjAwKSxzPW5ldyBwenQoMTY3MTE2ODApLGw9bmV3IHB6dCg0Mzc3NSksYz1uZXcgcHp0KDE2Nzc3MjE1KSx1PW5ldyBwenQoMzM1NTQ0Myk7ZnVuY3Rpb24gaCh0LGUsbil7ZCh0LG4pLGQoZSxuKX1mdW5jdGlvbiBkKHQsZSl7aS5wdXNoKDAsMCwwKSxyLnB1c2goZS5yLGUuZyxlLmIpLHZvaWQgMD09PW9bdF0mJihvW3RdPVtdKSxvW3RdLnB1c2goaS5sZW5ndGgvMy0xKX1oKCJuMSIsIm4yIixhKSxoKCJuMiIsIm40IixhKSxoKCJuNCIsIm4zIixhKSxoKCJuMyIsIm4xIixhKSxoKCJmMSIsImYyIixhKSxoKCJmMiIsImY0IixhKSxoKCJmNCIsImYzIixhKSxoKCJmMyIsImYxIixhKSxoKCJuMSIsImYxIixhKSxoKCJuMiIsImYyIixhKSxoKCJuMyIsImYzIixhKSxoKCJuNCIsImY0IixhKSxoKCJwIiwibjEiLHMpLGgoInAiLCJuMiIscyksaCgicCIsIm4zIixzKSxoKCJwIiwibjQiLHMpLGgoInUxIiwidTIiLGwpLGgoInUyIiwidTMiLGwpLGgoInUzIiwidTEiLGwpLGgoImMiLCJ0IixjKSxoKCJwIiwiYyIsdSksaCgiY24xIiwiY24yIix1KSxoKCJjbjMiLCJjbjQiLHUpLGgoImNmMSIsImNmMiIsdSksaCgiY2YzIiwiY2Y0Iix1KSxlLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBrenQoaSwzKSksZS5zZXRBdHRyaWJ1dGUoImNvbG9yIixuZXcga3p0KHIsMykpLHN1cGVyKGUsbiksdGhpcy50eXBlPSJDYW1lcmFIZWxwZXIiLHRoaXMuY2FtZXJhPXQsdGhpcy5jYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCYmdGhpcy5jYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpLHRoaXMubWF0cml4PXQubWF0cml4V29ybGQsdGhpcy5tYXRyaXhBdXRvVXBkYXRlPSExLHRoaXMucG9pbnRNYXA9byx0aGlzLnVwZGF0ZSgpfXVwZGF0ZSgpe2NvbnN0IHQ9dGhpcy5nZW9tZXRyeSxlPXRoaXMucG9pbnRNYXA7RUd0LnByb2plY3Rpb25NYXRyaXhJbnZlcnNlLmNvcHkodGhpcy5jYW1lcmEucHJvamVjdGlvbk1hdHJpeEludmVyc2UpLFRHdCgiYyIsZSx0LEVHdCwwLDAsLTEpLFRHdCgidCIsZSx0LEVHdCwwLDAsMSksVEd0KCJuMSIsZSx0LEVHdCwtMSwtMSwtMSksVEd0KCJuMiIsZSx0LEVHdCwxLC0xLC0xKSxUR3QoIm4zIixlLHQsRUd0LC0xLDEsLTEpLFRHdCgibjQiLGUsdCxFR3QsMSwxLC0xKSxUR3QoImYxIixlLHQsRUd0LC0xLC0xLDEpLFRHdCgiZjIiLGUsdCxFR3QsMSwtMSwxKSxUR3QoImYzIixlLHQsRUd0LC0xLDEsMSksVEd0KCJmNCIsZSx0LEVHdCwxLDEsMSksVEd0KCJ1MSIsZSx0LEVHdCwuNywxLjEsLTEpLFRHdCgidTIiLGUsdCxFR3QsLS43LDEuMSwtMSksVEd0KCJ1MyIsZSx0LEVHdCwwLDIsLTEpLFRHdCgiY2YxIixlLHQsRUd0LC0xLDAsMSksVEd0KCJjZjIiLGUsdCxFR3QsMSwwLDEpLFRHdCgiY2YzIixlLHQsRUd0LDAsLTEsMSksVEd0KCJjZjQiLGUsdCxFR3QsMCwxLDEpLFRHdCgiY24xIixlLHQsRUd0LC0xLDAsLTEpLFRHdCgiY24yIixlLHQsRUd0LDEsMCwtMSksVEd0KCJjbjMiLGUsdCxFR3QsMCwtMSwtMSksVEd0KCJjbjQiLGUsdCxFR3QsMCwxLC0xKSx0LmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKS5uZWVkc1VwZGF0ZT0hMH19LENhbnZhc1JlbmRlcmVyOmZ1bmN0aW9uIHBXdCgpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkNhbnZhc1JlbmRlcmVyIGhhcyBiZWVuIHJlbW92ZWQiKX0sQ2FudmFzVGV4dHVyZTp6RnQsQ2F0bXVsbFJvbUN1cnZlMzprVXQsQ2luZW9uVG9uZU1hcHBpbmc6MyxDaXJjbGVCdWZmZXJHZW9tZXRyeTpCRnQsQ2lyY2xlR2VvbWV0cnk6QkZ0LENsYW1wVG9FZGdlV3JhcHBpbmc6SEl0LENsb2NrOkVqdCxDbG9zZWRTcGxpbmVDdXJ2ZTM6cld0LENvbG9yOnB6dCxDb2xvcktleWZyYW1lVHJhY2s6ZVV0LENvbXByZXNzZWRUZXh0dXJlOlJGdCxDb21wcmVzc2VkVGV4dHVyZUxvYWRlcjpnVXQsQ29uZUJ1ZmZlckdlb21ldHJ5OkZGdCxDb25lR2VvbWV0cnk6RkZ0LEN1YmVDYW1lcmE6bUR0LEN1YmVSZWZsZWN0aW9uTWFwcGluZzpOSXQsQ3ViZVJlZnJhY3Rpb25NYXBwaW5nOklJdCxDdWJlVGV4dHVyZTpnRHQsQ3ViZVRleHR1cmVMb2FkZXI6eVV0LEN1YmVVVlJlZmxlY3Rpb25NYXBwaW5nOnpJdCxDdWJlVVZSZWZyYWN0aW9uTWFwcGluZzpESXQsQ3ViaWNCZXppZXJDdXJ2ZTpJVXQsQ3ViaWNCZXppZXJDdXJ2ZTM6T1V0LEN1YmljSW50ZXJwb2xhbnQ6S1Z0LEN1bGxGYWNlQmFjazoxLEN1bGxGYWNlRnJvbnQ6MixDdWxsRmFjZUZyb250QmFjazozLEN1bGxGYWNlTm9uZTowLEN1cnZlOnhVdCxDdXJ2ZVBhdGg6VlV0LEN1c3RvbUJsZW5kaW5nOjUsQ3VzdG9tVG9uZU1hcHBpbmc6NSxDeWxpbmRlckJ1ZmZlckdlb21ldHJ5OkhGdCxDeWxpbmRlckdlb21ldHJ5OkhGdCxDeWxpbmRyaWNhbDpjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsbil7cmV0dXJuIHRoaXMucmFkaXVzPXZvaWQgMCE9PXQ/dDoxLHRoaXMudGhldGE9dm9pZCAwIT09ZT9lOjAsdGhpcy55PXZvaWQgMCE9PW4/bjowLHRoaXN9c2V0KHQsZSxuKXtyZXR1cm4gdGhpcy5yYWRpdXM9dCx0aGlzLnRoZXRhPWUsdGhpcy55PW4sdGhpc31jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLnJhZGl1cz10LnJhZGl1cyx0aGlzLnRoZXRhPXQudGhldGEsdGhpcy55PXQueSx0aGlzfXNldEZyb21WZWN0b3IzKHQpe3JldHVybiB0aGlzLnNldEZyb21DYXJ0ZXNpYW5Db29yZHModC54LHQueSx0LnopfXNldEZyb21DYXJ0ZXNpYW5Db29yZHModCxlLG4pe3JldHVybiB0aGlzLnJhZGl1cz1NYXRoLnNxcnQodCp0K24qbiksdGhpcy50aGV0YT1NYXRoLmF0YW4yKHQsbiksdGhpcy55PWUsdGhpc319LERhdGFUZXh0dXJlOnlEdCxEYXRhVGV4dHVyZTJEQXJyYXk6VUR0LERhdGFUZXh0dXJlM0Q6akR0LERhdGFUZXh0dXJlTG9hZGVyOnZVdCxEYXRhVXRpbHM6Ukd0LERlY3JlbWVudFN0ZW5jaWxPcDo3NjgzLERlY3JlbWVudFdyYXBTdGVuY2lsT3A6MzQwNTYsRGVmYXVsdExvYWRpbmdNYW5hZ2VyOmhVdCxEZXB0aEZvcm1hdDplT3QsRGVwdGhTdGVuY2lsRm9ybWF0Om5PdCxEZXB0aFRleHR1cmU6REZ0LERpcmVjdGlvbmFsTGlnaHQ6UVV0LERpcmVjdGlvbmFsTGlnaHRIZWxwZXI6Y2xhc3MgZXh0ZW5kcyBXUnR7Y29uc3RydWN0b3IodCxlLG4pe3N1cGVyKCksdGhpcy5saWdodD10LHRoaXMubGlnaHQudXBkYXRlTWF0cml4V29ybGQoKSx0aGlzLm1hdHJpeD10Lm1hdHJpeFdvcmxkLHRoaXMubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLmNvbG9yPW4sdm9pZCAwPT09ZSYmKGU9MSk7bGV0IGk9bmV3IFZ6dDtpLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBrenQoWy1lLGUsMCxlLGUsMCxlLC1lLDAsLWUsLWUsMCwtZSxlLDBdLDMpKTtjb25zdCByPW5ldyBnRnQoe2ZvZzohMSx0b25lTWFwcGVkOiExfSk7dGhpcy5saWdodFBsYW5lPW5ldyB3RnQoaSxyKSx0aGlzLmFkZCh0aGlzLmxpZ2h0UGxhbmUpLGk9bmV3IFZ6dCxpLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBrenQoWzAsMCwwLDAsMCwxXSwzKSksdGhpcy50YXJnZXRMaW5lPW5ldyB3RnQoaSxyKSx0aGlzLmFkZCh0aGlzLnRhcmdldExpbmUpLHRoaXMudXBkYXRlKCl9ZGlzcG9zZSgpe3RoaXMubGlnaHRQbGFuZS5nZW9tZXRyeS5kaXNwb3NlKCksdGhpcy5saWdodFBsYW5lLm1hdGVyaWFsLmRpc3Bvc2UoKSx0aGlzLnRhcmdldExpbmUuZ2VvbWV0cnkuZGlzcG9zZSgpLHRoaXMudGFyZ2V0TGluZS5tYXRlcmlhbC5kaXNwb3NlKCl9dXBkYXRlKCl7eEd0LnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLmxpZ2h0Lm1hdHJpeFdvcmxkKSx3R3Quc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubGlnaHQudGFyZ2V0Lm1hdHJpeFdvcmxkKSxTR3Quc3ViVmVjdG9ycyh3R3QseEd0KSx0aGlzLmxpZ2h0UGxhbmUubG9va0F0KHdHdCksdm9pZCAwIT09dGhpcy5jb2xvcj8odGhpcy5saWdodFBsYW5lLm1hdGVyaWFsLmNvbG9yLnNldCh0aGlzLmNvbG9yKSx0aGlzLnRhcmdldExpbmUubWF0ZXJpYWwuY29sb3Iuc2V0KHRoaXMuY29sb3IpKToodGhpcy5saWdodFBsYW5lLm1hdGVyaWFsLmNvbG9yLmNvcHkodGhpcy5saWdodC5jb2xvciksdGhpcy50YXJnZXRMaW5lLm1hdGVyaWFsLmNvbG9yLmNvcHkodGhpcy5saWdodC5jb2xvcikpLHRoaXMudGFyZ2V0TGluZS5sb29rQXQod0d0KSx0aGlzLnRhcmdldExpbmUuc2NhbGUuej1TR3QubGVuZ3RoKCl9fSxEaXNjcmV0ZUludGVycG9sYW50OkpWdCxEb2RlY2FoZWRyb25CdWZmZXJHZW9tZXRyeTpVRnQsRG9kZWNhaGVkcm9uR2VvbWV0cnk6VUZ0LERvdWJsZVNpZGU6MixEc3RBbHBoYUZhY3RvcjoyMDYsRHN0Q29sb3JGYWN0b3I6MjA4LER5bmFtaWNCdWZmZXJBdHRyaWJ1dGU6ZnVuY3Rpb24gZld0KHQsZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuRHluYW1pY0J1ZmZlckF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkJ1ZmZlckF0dHJpYnV0ZSgpLnNldFVzYWdlKCBUSFJFRS5EeW5hbWljRHJhd1VzYWdlICkgaW5zdGVhZC4iKSxuZXcgYnp0KHQsZSkuc2V0VXNhZ2UoTE90KX0sRHluYW1pY0NvcHlVc2FnZTozNTA1MCxEeW5hbWljRHJhd1VzYWdlOkxPdCxEeW5hbWljUmVhZFVzYWdlOjM1MDQ5LEVkZ2VzR2VvbWV0cnk6WUZ0LEVkZ2VzSGVscGVyOmZ1bmN0aW9uIG1XdCh0LGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkVkZ2VzSGVscGVyIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5FZGdlc0dlb21ldHJ5IGluc3RlYWQuIiksbmV3IEVGdChuZXcgWUZ0KHQuZ2VvbWV0cnkpLG5ldyBnRnQoe2NvbG9yOnZvaWQgMCE9PWU/ZToxNjc3NzIxNX0pKX0sRWxsaXBzZUN1cnZlOndVdCxFcXVhbERlcHRoOjQsRXF1YWxTdGVuY2lsRnVuYzo1MTQsRXF1aXJlY3Rhbmd1bGFyUmVmbGVjdGlvbk1hcHBpbmc6T0l0LEVxdWlyZWN0YW5ndWxhclJlZnJhY3Rpb25NYXBwaW5nOlJJdCxFdWxlcjpBUnQsRXZlbnREaXNwYXRjaGVyOk5PdCxFeHRydWRlQnVmZmVyR2VvbWV0cnk6eFZ0LEV4dHJ1ZGVHZW9tZXRyeTp4VnQsRmFjZTM6Znp0LEZhY2U0OmZ1bmN0aW9uIGdXdCh0LGUsbixpLHIsbyxhKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5GYWNlNCBoYXMgYmVlbiByZW1vdmVkLiBBIFRIUkVFLkZhY2UzIHdpbGwgYmUgY3JlYXRlZCBpbnN0ZWFkLiIpLG5ldyBmenQodCxlLG4scixvLGEpfSxGYWNlQ29sb3JzOjEsRmlsZUxvYWRlcjpmVXQsRmxhdFNoYWRpbmc6MSxGbG9hdDE2QnVmZmVyQXR0cmlidXRlOkF6dCxGbG9hdDMyQXR0cmlidXRlOmZ1bmN0aW9uIF9XdCh0LGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkZsb2F0MzJBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5GbG9hdDMyQnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4iKSxuZXcga3p0KHQsZSl9LEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGU6a3p0LEZsb2F0NjRBdHRyaWJ1dGU6ZnVuY3Rpb24geVd0KHQsZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuRmxvYXQ2NEF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkZsb2F0NjRCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLiIpLG5ldyBMenQodCxlKX0sRmxvYXQ2NEJ1ZmZlckF0dHJpYnV0ZTpMenQsRmxvYXRUeXBlOktJdCxGb2c6UEh0LEZvZ0V4cDI6TEh0LEZvbnQ6Zmp0LEZvbnRMb2FkZXI6Z2p0LEZyb250U2lkZTowLEZydXN0dW06eER0LEdMQnVmZmVyQXR0cmlidXRlOnRHdCxHTFNMMToiMTAwIixHTFNMMzpQT3QsR2FtbWFFbmNvZGluZzpTT3QsR2VvbWV0cnlVdGlsczpzV3QsR3JlYXRlckRlcHRoOjYsR3JlYXRlckVxdWFsRGVwdGg6NSxHcmVhdGVyRXF1YWxTdGVuY2lsRnVuYzo1MTgsR3JlYXRlclN0ZW5jaWxGdW5jOjUxNixHcmlkSGVscGVyOmJHdCxHcm91cDpNSHQsSGFsZkZsb2F0VHlwZTpaSXQsSGVtaXNwaGVyZUxpZ2h0OldVdCxIZW1pc3BoZXJlTGlnaHRIZWxwZXI6Y2xhc3MgZXh0ZW5kcyBXUnR7Y29uc3RydWN0b3IodCxlLG4pe3N1cGVyKCksdGhpcy5saWdodD10LHRoaXMubGlnaHQudXBkYXRlTWF0cml4V29ybGQoKSx0aGlzLm1hdHJpeD10Lm1hdHJpeFdvcmxkLHRoaXMubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLmNvbG9yPW47Y29uc3QgaT1uZXcgRVZ0KGUpO2kucm90YXRlWSguNSpNYXRoLlBJKSx0aGlzLm1hdGVyaWFsPW5ldyBfenQoe3dpcmVmcmFtZTohMCxmb2c6ITEsdG9uZU1hcHBlZDohMX0pLHZvaWQgMD09PXRoaXMuY29sb3ImJih0aGlzLm1hdGVyaWFsLnZlcnRleENvbG9ycz0hMCk7Y29uc3Qgcj1pLmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKSxvPW5ldyBGbG9hdDMyQXJyYXkoMypyLmNvdW50KTtpLnNldEF0dHJpYnV0ZSgiY29sb3IiLG5ldyBienQobywzKSksdGhpcy5hZGQobmV3IG9EdChpLHRoaXMubWF0ZXJpYWwpKSx0aGlzLnVwZGF0ZSgpfWRpc3Bvc2UoKXt0aGlzLmNoaWxkcmVuWzBdLmdlb21ldHJ5LmRpc3Bvc2UoKSx0aGlzLmNoaWxkcmVuWzBdLm1hdGVyaWFsLmRpc3Bvc2UoKX11cGRhdGUoKXtjb25zdCB0PXRoaXMuY2hpbGRyZW5bMF07aWYodm9pZCAwIT09dGhpcy5jb2xvcil0aGlzLm1hdGVyaWFsLmNvbG9yLnNldCh0aGlzLmNvbG9yKTtlbHNle2NvbnN0IGU9dC5nZW9tZXRyeS5nZXRBdHRyaWJ1dGUoImNvbG9yIik7eUd0LmNvcHkodGhpcy5saWdodC5jb2xvciksdkd0LmNvcHkodGhpcy5saWdodC5ncm91bmRDb2xvcik7Zm9yKGxldCB0PTAsbj1lLmNvdW50O3Q8bjt0Kyspe2NvbnN0IGk9dDxuLzI/eUd0OnZHdDtlLnNldFhZWih0LGkucixpLmcsaS5iKX1lLm5lZWRzVXBkYXRlPSEwfXQubG9va0F0KF9HdC5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5saWdodC5tYXRyaXhXb3JsZCkubmVnYXRlKCkpfX0sSGVtaXNwaGVyZUxpZ2h0UHJvYmU6Ymp0LEljb3NhaGVkcm9uQnVmZmVyR2VvbWV0cnk6U1Z0LEljb3NhaGVkcm9uR2VvbWV0cnk6U1Z0LEltYWdlQml0bWFwTG9hZGVyOmRqdCxJbWFnZUxvYWRlcjpfVXQsSW1hZ2VVdGlsczpIT3QsSW1tZWRpYXRlUmVuZGVyT2JqZWN0OnVHdCxJbmNyZW1lbnRTdGVuY2lsT3A6NzY4MixJbmNyZW1lbnRXcmFwU3RlbmNpbE9wOjM0MDU1LEluc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZTpzanQsSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnk6YWp0LEluc3RhbmNlZEludGVybGVhdmVkQnVmZmVyOlFqdCxJbnN0YW5jZWRNZXNoOm1GdCxJbnQxNkF0dHJpYnV0ZTpmdW5jdGlvbiB2V3QodCxlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5JbnQxNkF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkludDE2QnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4iKSxuZXcgTXp0KHQsZSl9LEludDE2QnVmZmVyQXR0cmlidXRlOk16dCxJbnQzMkF0dHJpYnV0ZTpmdW5jdGlvbiBiV3QodCxlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5JbnQzMkF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkludDMyQnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4iKSxuZXcgVHp0KHQsZSl9LEludDMyQnVmZmVyQXR0cmlidXRlOlR6dCxJbnQ4QXR0cmlidXRlOmZ1bmN0aW9uIHhXdCh0LGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkludDhBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5JbnQ4QnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4iKSxuZXcgeHp0KHQsZSl9LEludDhCdWZmZXJBdHRyaWJ1dGU6eHp0LEludFR5cGU6MTAxMyxJbnRlcmxlYXZlZEJ1ZmZlcjpJSHQsSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU6Ukh0LEludGVycG9sYW50OiRWdCxJbnRlcnBvbGF0ZURpc2NyZXRlOnBPdCxJbnRlcnBvbGF0ZUxpbmVhcjpmT3QsSW50ZXJwb2xhdGVTbW9vdGg6bU90LEludmVydFN0ZW5jaWxPcDo1Mzg2LEpTT05Mb2FkZXI6ZnVuY3Rpb24gd1d0KCl7Y29uc29sZS5lcnJvcigiVEhSRUUuSlNPTkxvYWRlciBoYXMgYmVlbiByZW1vdmVkLiIpfSxLZWVwU3RlbmNpbE9wOkFPdCxLZXlmcmFtZVRyYWNrOlFWdCxMT0Q6dEZ0LExhdGhlQnVmZmVyR2VvbWV0cnk6TVZ0LExhdGhlR2VvbWV0cnk6TVZ0LExheWVyczpQUnQsTGVuc0ZsYXJlOmZ1bmN0aW9uIFNXdCgpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkxlbnNGbGFyZSBoYXMgYmVlbiBtb3ZlZCB0byAvZXhhbXBsZXMvanNtL29iamVjdHMvTGVuc2ZsYXJlLmpzIil9LExlc3NEZXB0aDoyLExlc3NFcXVhbERlcHRoOjMsTGVzc0VxdWFsU3RlbmNpbEZ1bmM6NTE1LExlc3NTdGVuY2lsRnVuYzo1MTMsTGlnaHQ6R1V0LExpZ2h0UHJvYmU6aWp0LExpbmU6d0Z0LExpbmUzOmNHdCxMaW5lQmFzaWNNYXRlcmlhbDpnRnQsTGluZUN1cnZlOlJVdCxMaW5lQ3VydmUzOnpVdCxMaW5lRGFzaGVkTWF0ZXJpYWw6cVZ0LExpbmVMb29wOlRGdCxMaW5lUGllY2VzOjEsTGluZVNlZ21lbnRzOkVGdCxMaW5lU3RyaXA6MCxMaW5lYXJFbmNvZGluZzp4T3QsTGluZWFyRmlsdGVyOkdJdCxMaW5lYXJJbnRlcnBvbGFudDpaVnQsTGluZWFyTWlwTWFwTGluZWFyRmlsdGVyOjEwMDgsTGluZWFyTWlwTWFwTmVhcmVzdEZpbHRlcjoxMDA3LExpbmVhck1pcG1hcExpbmVhckZpbHRlcjpxSXQsTGluZWFyTWlwbWFwTmVhcmVzdEZpbHRlcjpXSXQsTGluZWFyVG9uZU1hcHBpbmc6MSxMb2FkZXI6ZFV0LExvYWRlclV0aWxzOm9qdCxMb2FkaW5nTWFuYWdlcjp1VXQsTG9nTHV2RW5jb2Rpbmc6MzAwMyxMb29wT25jZToyMjAwLExvb3BQaW5nUG9uZzoyMjAyLExvb3BSZXBlYXQ6MjIwMSxMdW1pbmFuY2VBbHBoYUZvcm1hdDoxMDI1LEx1bWluYW5jZUZvcm1hdDoxMDI0LE1PVVNFOkFJdCxNYXRlcmlhbDpnenQsTWF0ZXJpYWxMb2FkZXI6cmp0LE1hdGg6Uk90LE1hdGhVdGlsczpST3QsTWF0cml4MzpET3QsTWF0cml4NDpiUnQsTWF4RXF1YXRpb246MTA0LE1lc2g6b0R0LE1lc2hCYXNpY01hdGVyaWFsOl96dCxNZXNoRGVwdGhNYXRlcmlhbDpfSHQsTWVzaERpc3RhbmNlTWF0ZXJpYWw6eUh0LE1lc2hGYWNlTWF0ZXJpYWw6ZnVuY3Rpb24gTVd0KHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1lc2hGYWNlTWF0ZXJpYWwgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGFuIEFycmF5IGluc3RlYWQuIiksdH0sTWVzaExhbWJlcnRNYXRlcmlhbDpHVnQsTWVzaE1hdGNhcE1hdGVyaWFsOldWdCxNZXNoTm9ybWFsTWF0ZXJpYWw6alZ0LE1lc2hQaG9uZ01hdGVyaWFsOlZWdCxNZXNoUGh5c2ljYWxNYXRlcmlhbDpGVnQsTWVzaFN0YW5kYXJkTWF0ZXJpYWw6SFZ0LE1lc2hUb29uTWF0ZXJpYWw6VVZ0LE1pbkVxdWF0aW9uOjEwMyxNaXJyb3JlZFJlcGVhdFdyYXBwaW5nOkZJdCxNaXhPcGVyYXRpb246MSxNdWx0aU1hdGVyaWFsOmZ1bmN0aW9uIEVXdCh0PVtdKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NdWx0aU1hdGVyaWFsIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBhbiBBcnJheSBpbnN0ZWFkLiIpLHQuaXNNdWx0aU1hdGVyaWFsPSEwLHQubWF0ZXJpYWxzPXQsdC5jbG9uZT1mdW5jdGlvbigpe3JldHVybiB0LnNsaWNlKCl9LHR9LE11bHRpcGx5QmxlbmRpbmc6NCxNdWx0aXBseU9wZXJhdGlvbjowLE5lYXJlc3RGaWx0ZXI6Vkl0LE5lYXJlc3RNaXBNYXBMaW5lYXJGaWx0ZXI6MTAwNSxOZWFyZXN0TWlwTWFwTmVhcmVzdEZpbHRlcjoxMDA0LE5lYXJlc3RNaXBtYXBMaW5lYXJGaWx0ZXI6akl0LE5lYXJlc3RNaXBtYXBOZWFyZXN0RmlsdGVyOlVJdCxOZXZlckRlcHRoOjAsTmV2ZXJTdGVuY2lsRnVuYzo1MTIsTm9CbGVuZGluZzowLE5vQ29sb3JzOjAsTm9Ub25lTWFwcGluZzowLE5vcm1hbEFuaW1hdGlvbkJsZW5kTW9kZTp2T3QsTm9ybWFsQmxlbmRpbmc6MSxOb3RFcXVhbERlcHRoOjcsTm90RXF1YWxTdGVuY2lsRnVuYzo1MTcsTnVtYmVyS2V5ZnJhbWVUcmFjazpuVXQsT2JqZWN0M0Q6V1J0LE9iamVjdExvYWRlcjpjbGFzcyBleHRlbmRzIGRVdHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQsZSxuLGkpe2NvbnN0IHI9dGhpcyxvPSIiPT09dGhpcy5wYXRoP29qdC5leHRyYWN0VXJsQmFzZSh0KTp0aGlzLnBhdGg7dGhpcy5yZXNvdXJjZVBhdGg9dGhpcy5yZXNvdXJjZVBhdGh8fG87Y29uc3QgYT1uZXcgZlV0KHRoaXMubWFuYWdlcik7YS5zZXRQYXRoKHRoaXMucGF0aCksYS5zZXRSZXF1ZXN0SGVhZGVyKHRoaXMucmVxdWVzdEhlYWRlciksYS5zZXRXaXRoQ3JlZGVudGlhbHModGhpcy53aXRoQ3JlZGVudGlhbHMpLGEubG9hZCh0LChmdW5jdGlvbihuKXtsZXQgbz1udWxsO3RyeXtvPUpTT04ucGFyc2Uobil9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgMCE9PWkmJmkoZSksdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRTpPYmplY3RMb2FkZXI6IENhbid0IHBhcnNlICIrdCsiLiIsZS5tZXNzYWdlKX1jb25zdCBhPW8ubWV0YWRhdGE7dm9pZCAwIT09YSYmdm9pZCAwIT09YS50eXBlJiYiZ2VvbWV0cnkiIT09YS50eXBlLnRvTG93ZXJDYXNlKCk/ci5wYXJzZShvLGUpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLk9iamVjdExvYWRlcjogQ2FuJ3QgbG9hZCAiK3QpfSksbixpKX1wYXJzZSh0LGUpe2NvbnN0IG49dGhpcy5wYXJzZUFuaW1hdGlvbnModC5hbmltYXRpb25zKSxpPXRoaXMucGFyc2VTaGFwZXModC5zaGFwZXMpLHI9dGhpcy5wYXJzZUdlb21ldHJpZXModC5nZW9tZXRyaWVzLGkpLG89dGhpcy5wYXJzZUltYWdlcyh0LmltYWdlcywoZnVuY3Rpb24oKXt2b2lkIDAhPT1lJiZlKGwpfSkpLGE9dGhpcy5wYXJzZVRleHR1cmVzKHQudGV4dHVyZXMsbykscz10aGlzLnBhcnNlTWF0ZXJpYWxzKHQubWF0ZXJpYWxzLGEpLGw9dGhpcy5wYXJzZU9iamVjdCh0Lm9iamVjdCxyLHMsbiksYz10aGlzLnBhcnNlU2tlbGV0b25zKHQuc2tlbGV0b25zLGwpO2lmKHRoaXMuYmluZFNrZWxldG9ucyhsLGMpLHZvaWQgMCE9PWUpe2xldCB0PSExO2Zvcihjb25zdCBlIGluIG8paWYob1tlXWluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudCl7dD0hMDticmVha30hMT09PXQmJmUobCl9cmV0dXJuIGx9cGFyc2VTaGFwZXModCl7Y29uc3QgZT17fTtpZih2b2lkIDAhPT10KWZvcihsZXQgbj0wLGk9dC5sZW5ndGg7bjxpO24rKyl7Y29uc3QgaT0obmV3IGpVdCkuZnJvbUpTT04odFtuXSk7ZVtpLnV1aWRdPWl9cmV0dXJuIGV9cGFyc2VTa2VsZXRvbnModCxlKXtjb25zdCBuPXt9LGk9e307aWYoZS50cmF2ZXJzZSgoZnVuY3Rpb24odCl7dC5pc0JvbmUmJihpW3QudXVpZF09dCl9KSksdm9pZCAwIT09dClmb3IobGV0IGU9MCxyPXQubGVuZ3RoO2U8cjtlKyspe2NvbnN0IHI9KG5ldyB1RnQpLmZyb21KU09OKHRbZV0saSk7bltyLnV1aWRdPXJ9cmV0dXJuIG59cGFyc2VHZW9tZXRyaWVzKHQsZSl7Y29uc3Qgbj17fTtsZXQgaTtpZih2b2lkIDAhPT10KXtjb25zdCByPW5ldyBsanQ7Zm9yKGxldCBvPTAsYT10Lmxlbmd0aDtvPGE7bysrKXtsZXQgYTtjb25zdCBzPXRbb107c3dpdGNoKHMudHlwZSl7Y2FzZSJQbGFuZUdlb21ldHJ5IjpjYXNlIlBsYW5lQnVmZmVyR2VvbWV0cnkiOmE9bmV3IHpWdFtzLnR5cGVdKHMud2lkdGgscy5oZWlnaHQscy53aWR0aFNlZ21lbnRzLHMuaGVpZ2h0U2VnbWVudHMpO2JyZWFrO2Nhc2UiQm94R2VvbWV0cnkiOmNhc2UiQm94QnVmZmVyR2VvbWV0cnkiOmE9bmV3IHpWdFtzLnR5cGVdKHMud2lkdGgscy5oZWlnaHQscy5kZXB0aCxzLndpZHRoU2VnbWVudHMscy5oZWlnaHRTZWdtZW50cyxzLmRlcHRoU2VnbWVudHMpO2JyZWFrO2Nhc2UiQ2lyY2xlR2VvbWV0cnkiOmNhc2UiQ2lyY2xlQnVmZmVyR2VvbWV0cnkiOmE9bmV3IHpWdFtzLnR5cGVdKHMucmFkaXVzLHMuc2VnbWVudHMscy50aGV0YVN0YXJ0LHMudGhldGFMZW5ndGgpO2JyZWFrO2Nhc2UiQ3lsaW5kZXJHZW9tZXRyeSI6Y2FzZSJDeWxpbmRlckJ1ZmZlckdlb21ldHJ5IjphPW5ldyB6VnRbcy50eXBlXShzLnJhZGl1c1RvcCxzLnJhZGl1c0JvdHRvbSxzLmhlaWdodCxzLnJhZGlhbFNlZ21lbnRzLHMuaGVpZ2h0U2VnbWVudHMscy5vcGVuRW5kZWQscy50aGV0YVN0YXJ0LHMudGhldGFMZW5ndGgpO2JyZWFrO2Nhc2UiQ29uZUdlb21ldHJ5IjpjYXNlIkNvbmVCdWZmZXJHZW9tZXRyeSI6YT1uZXcgelZ0W3MudHlwZV0ocy5yYWRpdXMscy5oZWlnaHQscy5yYWRpYWxTZWdtZW50cyxzLmhlaWdodFNlZ21lbnRzLHMub3BlbkVuZGVkLHMudGhldGFTdGFydCxzLnRoZXRhTGVuZ3RoKTticmVhaztjYXNlIlNwaGVyZUdlb21ldHJ5IjpjYXNlIlNwaGVyZUJ1ZmZlckdlb21ldHJ5IjphPW5ldyB6VnRbcy50eXBlXShzLnJhZGl1cyxzLndpZHRoU2VnbWVudHMscy5oZWlnaHRTZWdtZW50cyxzLnBoaVN0YXJ0LHMucGhpTGVuZ3RoLHMudGhldGFTdGFydCxzLnRoZXRhTGVuZ3RoKTticmVhaztjYXNlIkRvZGVjYWhlZHJvbkdlb21ldHJ5IjpjYXNlIkRvZGVjYWhlZHJvbkJ1ZmZlckdlb21ldHJ5IjpjYXNlIkljb3NhaGVkcm9uR2VvbWV0cnkiOmNhc2UiSWNvc2FoZWRyb25CdWZmZXJHZW9tZXRyeSI6Y2FzZSJPY3RhaGVkcm9uR2VvbWV0cnkiOmNhc2UiT2N0YWhlZHJvbkJ1ZmZlckdlb21ldHJ5IjpjYXNlIlRldHJhaGVkcm9uR2VvbWV0cnkiOmNhc2UiVGV0cmFoZWRyb25CdWZmZXJHZW9tZXRyeSI6YT1uZXcgelZ0W3MudHlwZV0ocy5yYWRpdXMscy5kZXRhaWwpO2JyZWFrO2Nhc2UiUmluZ0dlb21ldHJ5IjpjYXNlIlJpbmdCdWZmZXJHZW9tZXRyeSI6YT1uZXcgelZ0W3MudHlwZV0ocy5pbm5lclJhZGl1cyxzLm91dGVyUmFkaXVzLHMudGhldGFTZWdtZW50cyxzLnBoaVNlZ21lbnRzLHMudGhldGFTdGFydCxzLnRoZXRhTGVuZ3RoKTticmVhaztjYXNlIlRvcnVzR2VvbWV0cnkiOmNhc2UiVG9ydXNCdWZmZXJHZW9tZXRyeSI6YT1uZXcgelZ0W3MudHlwZV0ocy5yYWRpdXMscy50dWJlLHMucmFkaWFsU2VnbWVudHMscy50dWJ1bGFyU2VnbWVudHMscy5hcmMpO2JyZWFrO2Nhc2UiVG9ydXNLbm90R2VvbWV0cnkiOmNhc2UiVG9ydXNLbm90QnVmZmVyR2VvbWV0cnkiOmE9bmV3IHpWdFtzLnR5cGVdKHMucmFkaXVzLHMudHViZSxzLnR1YnVsYXJTZWdtZW50cyxzLnJhZGlhbFNlZ21lbnRzLHMucCxzLnEpO2JyZWFrO2Nhc2UiVHViZUdlb21ldHJ5IjpjYXNlIlR1YmVCdWZmZXJHZW9tZXRyeSI6YT1uZXcgelZ0W3MudHlwZV0oKG5ldyBGVXRbcy5wYXRoLnR5cGVdKS5mcm9tSlNPTihzLnBhdGgpLHMudHVidWxhclNlZ21lbnRzLHMucmFkaXVzLHMucmFkaWFsU2VnbWVudHMscy5jbG9zZWQpO2JyZWFrO2Nhc2UiTGF0aGVHZW9tZXRyeSI6Y2FzZSJMYXRoZUJ1ZmZlckdlb21ldHJ5IjphPW5ldyB6VnRbcy50eXBlXShzLnBvaW50cyxzLnNlZ21lbnRzLHMucGhpU3RhcnQscy5waGlMZW5ndGgpO2JyZWFrO2Nhc2UiUG9seWhlZHJvbkdlb21ldHJ5IjpjYXNlIlBvbHloZWRyb25CdWZmZXJHZW9tZXRyeSI6YT1uZXcgelZ0W3MudHlwZV0ocy52ZXJ0aWNlcyxzLmluZGljZXMscy5yYWRpdXMscy5kZXRhaWxzKTticmVhaztjYXNlIlNoYXBlR2VvbWV0cnkiOmNhc2UiU2hhcGVCdWZmZXJHZW9tZXRyeSI6aT1bXTtmb3IobGV0IHQ9MCxuPXMuc2hhcGVzLmxlbmd0aDt0PG47dCsrKWkucHVzaChlW3Muc2hhcGVzW3RdXSk7YT1uZXcgelZ0W3MudHlwZV0oaSxzLmN1cnZlU2VnbWVudHMpO2JyZWFrO2Nhc2UiRXh0cnVkZUdlb21ldHJ5IjpjYXNlIkV4dHJ1ZGVCdWZmZXJHZW9tZXRyeSI6aT1bXTtmb3IobGV0IHQ9MCxuPXMuc2hhcGVzLmxlbmd0aDt0PG47dCsrKWkucHVzaChlW3Muc2hhcGVzW3RdXSk7Y29uc3QgdD1zLm9wdGlvbnMuZXh0cnVkZVBhdGg7dm9pZCAwIT09dCYmKHMub3B0aW9ucy5leHRydWRlUGF0aD0obmV3IEZVdFt0LnR5cGVdKS5mcm9tSlNPTih0KSksYT1uZXcgelZ0W3MudHlwZV0oaSxzLm9wdGlvbnMpO2JyZWFrO2Nhc2UiQnVmZmVyR2VvbWV0cnkiOmNhc2UiSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkiOmE9ci5wYXJzZShzKTticmVhaztjYXNlIkdlb21ldHJ5Ijpjb25zb2xlLmVycm9yKCdUSFJFRS5PYmplY3RMb2FkZXI6IExvYWRpbmcgIkdlb21ldHJ5IiBpcyBub3Qgc3VwcG9ydGVkIGFueW1vcmUuJyk7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLndhcm4oJ1RIUkVFLk9iamVjdExvYWRlcjogVW5zdXBwb3J0ZWQgZ2VvbWV0cnkgdHlwZSAiJytzLnR5cGUrJyInKTtjb250aW51ZX1hLnV1aWQ9cy51dWlkLHZvaWQgMCE9PXMubmFtZSYmKGEubmFtZT1zLm5hbWUpLCEwPT09YS5pc0J1ZmZlckdlb21ldHJ5JiZ2b2lkIDAhPT1zLnVzZXJEYXRhJiYoYS51c2VyRGF0YT1zLnVzZXJEYXRhKSxuW3MudXVpZF09YX19cmV0dXJuIG59cGFyc2VNYXRlcmlhbHModCxlKXtjb25zdCBuPXt9LGk9e307aWYodm9pZCAwIT09dCl7Y29uc3Qgcj1uZXcgcmp0O3Iuc2V0VGV4dHVyZXMoZSk7Zm9yKGxldCBlPTAsbz10Lmxlbmd0aDtlPG87ZSsrKXtjb25zdCBvPXRbZV07aWYoIk11bHRpTWF0ZXJpYWwiPT09by50eXBlKXtjb25zdCB0PVtdO2ZvcihsZXQgZT0wO2U8by5tYXRlcmlhbHMubGVuZ3RoO2UrKyl7Y29uc3QgaT1vLm1hdGVyaWFsc1tlXTt2b2lkIDA9PT1uW2kudXVpZF0mJihuW2kudXVpZF09ci5wYXJzZShpKSksdC5wdXNoKG5baS51dWlkXSl9aVtvLnV1aWRdPXR9ZWxzZSB2b2lkIDA9PT1uW28udXVpZF0mJihuW28udXVpZF09ci5wYXJzZShvKSksaVtvLnV1aWRdPW5bby51dWlkXX19cmV0dXJuIGl9cGFyc2VBbmltYXRpb25zKHQpe2NvbnN0IGU9e307aWYodm9pZCAwIT09dClmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKyl7Y29uc3QgaT1zVXQucGFyc2UodFtuXSk7ZVtpLnV1aWRdPWl9cmV0dXJuIGV9cGFyc2VJbWFnZXModCxlKXtjb25zdCBuPXRoaXMsaT17fTtsZXQgcjtmdW5jdGlvbiBvKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdCl7Y29uc3QgZT10O3JldHVybihmdW5jdGlvbiBlKHQpe3JldHVybiBuLm1hbmFnZXIuaXRlbVN0YXJ0KHQpLHIubG9hZCh0LChmdW5jdGlvbigpe24ubWFuYWdlci5pdGVtRW5kKHQpfSksdm9pZCAwLChmdW5jdGlvbigpe24ubWFuYWdlci5pdGVtRXJyb3IodCksbi5tYW5hZ2VyLml0ZW1FbmQodCl9KSl9KSgvXihcL1wvKXwoW2Etel0rOihcL1wvKT8pL2kudGVzdChlKT9lOm4ucmVzb3VyY2VQYXRoK2UpfXJldHVybiB0LmRhdGE/e2RhdGE6SXp0KHQudHlwZSx0LmRhdGEpLHdpZHRoOnQud2lkdGgsaGVpZ2h0OnQuaGVpZ2h0fTpudWxsfWlmKHZvaWQgMCE9PXQmJnQubGVuZ3RoPjApe2NvbnN0IG49bmV3IHVVdChlKTtyPW5ldyBfVXQobiksci5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKTtmb3IobGV0IGU9MCxuPXQubGVuZ3RoO2U8bjtlKyspe2NvbnN0IG49dFtlXSxyPW4udXJsO2lmKEFycmF5LmlzQXJyYXkocikpe2lbbi51dWlkXT1bXTtmb3IobGV0IHQ9MCxlPXIubGVuZ3RoO3Q8ZTt0Kyspe2NvbnN0IGU9byhyW3RdKTtudWxsIT09ZSYmKGUgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50P2lbbi51dWlkXS5wdXNoKGUpOmlbbi51dWlkXS5wdXNoKG5ldyB5RHQoZS5kYXRhLGUud2lkdGgsZS5oZWlnaHQpKSl9fWVsc2V7Y29uc3QgdD1vKG4udXJsKTtudWxsIT09dCYmKGlbbi51dWlkXT10KX19fXJldHVybiBpfXBhcnNlVGV4dHVyZXModCxlKXtmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0P3Q6KGNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0TG9hZGVyLnBhcnNlVGV4dHVyZTogQ29uc3RhbnQgc2hvdWxkIGJlIGluIG51bWVyaWMgZm9ybS4iLHQpLGVbdF0pfWNvbnN0IGk9e307aWYodm9pZCAwIT09dClmb3IobGV0IHI9MCxvPXQubGVuZ3RoO3I8bztyKyspe2NvbnN0IG89dFtyXTtsZXQgYTt2b2lkIDA9PT1vLmltYWdlJiZjb25zb2xlLndhcm4oJ1RIUkVFLk9iamVjdExvYWRlcjogTm8gImltYWdlIiBzcGVjaWZpZWQgZm9yJyxvLnV1aWQpLHZvaWQgMD09PWVbby5pbWFnZV0mJmNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0TG9hZGVyOiBVbmRlZmluZWQgaW1hZ2UiLG8uaW1hZ2UpO2NvbnN0IHM9ZVtvLmltYWdlXTtBcnJheS5pc0FycmF5KHMpPyhhPW5ldyBnRHQocyksNj09PXMubGVuZ3RoJiYoYS5uZWVkc1VwZGF0ZT0hMCkpOihhPXMmJnMuZGF0YT9uZXcgeUR0KHMuZGF0YSxzLndpZHRoLHMuaGVpZ2h0KTpuZXcgVk90KHMpLHMmJihhLm5lZWRzVXBkYXRlPSEwKSksYS51dWlkPW8udXVpZCx2b2lkIDAhPT1vLm5hbWUmJihhLm5hbWU9by5uYW1lKSx2b2lkIDAhPT1vLm1hcHBpbmcmJihhLm1hcHBpbmc9bihvLm1hcHBpbmcsY2p0KSksdm9pZCAwIT09by5vZmZzZXQmJmEub2Zmc2V0LmZyb21BcnJheShvLm9mZnNldCksdm9pZCAwIT09by5yZXBlYXQmJmEucmVwZWF0LmZyb21BcnJheShvLnJlcGVhdCksdm9pZCAwIT09by5jZW50ZXImJmEuY2VudGVyLmZyb21BcnJheShvLmNlbnRlciksdm9pZCAwIT09by5yb3RhdGlvbiYmKGEucm90YXRpb249by5yb3RhdGlvbiksdm9pZCAwIT09by53cmFwJiYoYS53cmFwUz1uKG8ud3JhcFswXSx1anQpLGEud3JhcFQ9bihvLndyYXBbMV0sdWp0KSksdm9pZCAwIT09by5mb3JtYXQmJihhLmZvcm1hdD1vLmZvcm1hdCksdm9pZCAwIT09by50eXBlJiYoYS50eXBlPW8udHlwZSksdm9pZCAwIT09by5lbmNvZGluZyYmKGEuZW5jb2Rpbmc9by5lbmNvZGluZyksdm9pZCAwIT09by5taW5GaWx0ZXImJihhLm1pbkZpbHRlcj1uKG8ubWluRmlsdGVyLGhqdCkpLHZvaWQgMCE9PW8ubWFnRmlsdGVyJiYoYS5tYWdGaWx0ZXI9bihvLm1hZ0ZpbHRlcixoanQpKSx2b2lkIDAhPT1vLmFuaXNvdHJvcHkmJihhLmFuaXNvdHJvcHk9by5hbmlzb3Ryb3B5KSx2b2lkIDAhPT1vLmZsaXBZJiYoYS5mbGlwWT1vLmZsaXBZKSx2b2lkIDAhPT1vLnByZW11bHRpcGx5QWxwaGEmJihhLnByZW11bHRpcGx5QWxwaGE9by5wcmVtdWx0aXBseUFscGhhKSx2b2lkIDAhPT1vLnVucGFja0FsaWdubWVudCYmKGEudW5wYWNrQWxpZ25tZW50PW8udW5wYWNrQWxpZ25tZW50KSxpW28udXVpZF09YX1yZXR1cm4gaX1wYXJzZU9iamVjdCh0LGUsbixpKXtsZXQgcixvLGE7ZnVuY3Rpb24gcyh0KXtyZXR1cm4gdm9pZCAwPT09ZVt0XSYmY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3RMb2FkZXI6IFVuZGVmaW5lZCBnZW9tZXRyeSIsdCksZVt0XX1mdW5jdGlvbiBsKHQpe2lmKHZvaWQgMCE9PXQpe2lmKEFycmF5LmlzQXJyYXkodCkpe2NvbnN0IGU9W107Zm9yKGxldCBpPTAscj10Lmxlbmd0aDtpPHI7aSsrKXtjb25zdCByPXRbaV07dm9pZCAwPT09bltyXSYmY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3RMb2FkZXI6IFVuZGVmaW5lZCBtYXRlcmlhbCIsciksZS5wdXNoKG5bcl0pfXJldHVybiBlfXJldHVybiB2b2lkIDA9PT1uW3RdJiZjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdExvYWRlcjogVW5kZWZpbmVkIG1hdGVyaWFsIix0KSxuW3RdfX1zd2l0Y2godC50eXBlKXtjYXNlIlNjZW5lIjpyPW5ldyBOSHQsdm9pZCAwIT09dC5iYWNrZ3JvdW5kJiZOdW1iZXIuaXNJbnRlZ2VyKHQuYmFja2dyb3VuZCkmJihyLmJhY2tncm91bmQ9bmV3IHB6dCh0LmJhY2tncm91bmQpKSx2b2lkIDAhPT10LmZvZyYmKCJGb2ciPT09dC5mb2cudHlwZT9yLmZvZz1uZXcgUEh0KHQuZm9nLmNvbG9yLHQuZm9nLm5lYXIsdC5mb2cuZmFyKToiRm9nRXhwMiI9PT10LmZvZy50eXBlJiYoci5mb2c9bmV3IExIdCh0LmZvZy5jb2xvcix0LmZvZy5kZW5zaXR5KSkpO2JyZWFrO2Nhc2UiUGVyc3BlY3RpdmVDYW1lcmEiOnI9bmV3IHBEdCh0LmZvdix0LmFzcGVjdCx0Lm5lYXIsdC5mYXIpLHZvaWQgMCE9PXQuZm9jdXMmJihyLmZvY3VzPXQuZm9jdXMpLHZvaWQgMCE9PXQuem9vbSYmKHIuem9vbT10Lnpvb20pLHZvaWQgMCE9PXQuZmlsbUdhdWdlJiYoci5maWxtR2F1Z2U9dC5maWxtR2F1Z2UpLHZvaWQgMCE9PXQuZmlsbU9mZnNldCYmKHIuZmlsbU9mZnNldD10LmZpbG1PZmZzZXQpLHZvaWQgMCE9PXQudmlldyYmKHIudmlldz1PYmplY3QuYXNzaWduKHt9LHQudmlldykpO2JyZWFrO2Nhc2UiT3J0aG9ncmFwaGljQ2FtZXJhIjpyPW5ldyBaVXQodC5sZWZ0LHQucmlnaHQsdC50b3AsdC5ib3R0b20sdC5uZWFyLHQuZmFyKSx2b2lkIDAhPT10Lnpvb20mJihyLnpvb209dC56b29tKSx2b2lkIDAhPT10LnZpZXcmJihyLnZpZXc9T2JqZWN0LmFzc2lnbih7fSx0LnZpZXcpKTticmVhaztjYXNlIkFtYmllbnRMaWdodCI6cj1uZXcgdGp0KHQuY29sb3IsdC5pbnRlbnNpdHkpO2JyZWFrO2Nhc2UiRGlyZWN0aW9uYWxMaWdodCI6cj1uZXcgUVV0KHQuY29sb3IsdC5pbnRlbnNpdHkpO2JyZWFrO2Nhc2UiUG9pbnRMaWdodCI6cj1uZXcgS1V0KHQuY29sb3IsdC5pbnRlbnNpdHksdC5kaXN0YW5jZSx0LmRlY2F5KTticmVhaztjYXNlIlJlY3RBcmVhTGlnaHQiOnI9bmV3IGVqdCh0LmNvbG9yLHQuaW50ZW5zaXR5LHQud2lkdGgsdC5oZWlnaHQpO2JyZWFrO2Nhc2UiU3BvdExpZ2h0IjpyPW5ldyBYVXQodC5jb2xvcix0LmludGVuc2l0eSx0LmRpc3RhbmNlLHQuYW5nbGUsdC5wZW51bWJyYSx0LmRlY2F5KTticmVhaztjYXNlIkhlbWlzcGhlcmVMaWdodCI6cj1uZXcgV1V0KHQuY29sb3IsdC5ncm91bmRDb2xvcix0LmludGVuc2l0eSk7YnJlYWs7Y2FzZSJMaWdodFByb2JlIjpyPShuZXcgaWp0KS5mcm9tSlNPTih0KTticmVhaztjYXNlIlNraW5uZWRNZXNoIjpvPXModC5nZW9tZXRyeSksYT1sKHQubWF0ZXJpYWwpLHI9bmV3IGFGdChvLGEpLHZvaWQgMCE9PXQuYmluZE1vZGUmJihyLmJpbmRNb2RlPXQuYmluZE1vZGUpLHZvaWQgMCE9PXQuYmluZE1hdHJpeCYmci5iaW5kTWF0cml4LmZyb21BcnJheSh0LmJpbmRNYXRyaXgpLHZvaWQgMCE9PXQuc2tlbGV0b24mJihyLnNrZWxldG9uPXQuc2tlbGV0b24pO2JyZWFrO2Nhc2UiTWVzaCI6bz1zKHQuZ2VvbWV0cnkpLGE9bCh0Lm1hdGVyaWFsKSxyPW5ldyBvRHQobyxhKTticmVhaztjYXNlIkluc3RhbmNlZE1lc2giOm89cyh0Lmdlb21ldHJ5KSxhPWwodC5tYXRlcmlhbCk7Y29uc3QgZT10Lmluc3RhbmNlTWF0cml4O3I9bmV3IG1GdChvLGEsdC5jb3VudCksci5pbnN0YW5jZU1hdHJpeD1uZXcgYnp0KG5ldyBGbG9hdDMyQXJyYXkoZS5hcnJheSksMTYpO2JyZWFrO2Nhc2UiTE9EIjpyPW5ldyB0RnQ7YnJlYWs7Y2FzZSJMaW5lIjpyPW5ldyB3RnQocyh0Lmdlb21ldHJ5KSxsKHQubWF0ZXJpYWwpKTticmVhaztjYXNlIkxpbmVMb29wIjpyPW5ldyBURnQocyh0Lmdlb21ldHJ5KSxsKHQubWF0ZXJpYWwpKTticmVhaztjYXNlIkxpbmVTZWdtZW50cyI6cj1uZXcgRUZ0KHModC5nZW9tZXRyeSksbCh0Lm1hdGVyaWFsKSk7YnJlYWs7Y2FzZSJQb2ludENsb3VkIjpjYXNlIlBvaW50cyI6cj1uZXcgTkZ0KHModC5nZW9tZXRyeSksbCh0Lm1hdGVyaWFsKSk7YnJlYWs7Y2FzZSJTcHJpdGUiOnI9bmV3IEtIdChsKHQubWF0ZXJpYWwpKTticmVhaztjYXNlIkdyb3VwIjpyPW5ldyBNSHQ7YnJlYWs7Y2FzZSJCb25lIjpyPW5ldyBzRnQ7YnJlYWs7ZGVmYXVsdDpyPW5ldyBXUnR9aWYoci51dWlkPXQudXVpZCx2b2lkIDAhPT10Lm5hbWUmJihyLm5hbWU9dC5uYW1lKSx2b2lkIDAhPT10Lm1hdHJpeD8oci5tYXRyaXguZnJvbUFycmF5KHQubWF0cml4KSx2b2lkIDAhPT10Lm1hdHJpeEF1dG9VcGRhdGUmJihyLm1hdHJpeEF1dG9VcGRhdGU9dC5tYXRyaXhBdXRvVXBkYXRlKSxyLm1hdHJpeEF1dG9VcGRhdGUmJnIubWF0cml4LmRlY29tcG9zZShyLnBvc2l0aW9uLHIucXVhdGVybmlvbixyLnNjYWxlKSk6KHZvaWQgMCE9PXQucG9zaXRpb24mJnIucG9zaXRpb24uZnJvbUFycmF5KHQucG9zaXRpb24pLHZvaWQgMCE9PXQucm90YXRpb24mJnIucm90YXRpb24uZnJvbUFycmF5KHQucm90YXRpb24pLHZvaWQgMCE9PXQucXVhdGVybmlvbiYmci5xdWF0ZXJuaW9uLmZyb21BcnJheSh0LnF1YXRlcm5pb24pLHZvaWQgMCE9PXQuc2NhbGUmJnIuc2NhbGUuZnJvbUFycmF5KHQuc2NhbGUpKSx2b2lkIDAhPT10LmNhc3RTaGFkb3cmJihyLmNhc3RTaGFkb3c9dC5jYXN0U2hhZG93KSx2b2lkIDAhPT10LnJlY2VpdmVTaGFkb3cmJihyLnJlY2VpdmVTaGFkb3c9dC5yZWNlaXZlU2hhZG93KSx0LnNoYWRvdyYmKHZvaWQgMCE9PXQuc2hhZG93LmJpYXMmJihyLnNoYWRvdy5iaWFzPXQuc2hhZG93LmJpYXMpLHZvaWQgMCE9PXQuc2hhZG93Lm5vcm1hbEJpYXMmJihyLnNoYWRvdy5ub3JtYWxCaWFzPXQuc2hhZG93Lm5vcm1hbEJpYXMpLHZvaWQgMCE9PXQuc2hhZG93LnJhZGl1cyYmKHIuc2hhZG93LnJhZGl1cz10LnNoYWRvdy5yYWRpdXMpLHZvaWQgMCE9PXQuc2hhZG93Lm1hcFNpemUmJnIuc2hhZG93Lm1hcFNpemUuZnJvbUFycmF5KHQuc2hhZG93Lm1hcFNpemUpLHZvaWQgMCE9PXQuc2hhZG93LmNhbWVyYSYmKHIuc2hhZG93LmNhbWVyYT10aGlzLnBhcnNlT2JqZWN0KHQuc2hhZG93LmNhbWVyYSkpKSx2b2lkIDAhPT10LnZpc2libGUmJihyLnZpc2libGU9dC52aXNpYmxlKSx2b2lkIDAhPT10LmZydXN0dW1DdWxsZWQmJihyLmZydXN0dW1DdWxsZWQ9dC5mcnVzdHVtQ3VsbGVkKSx2b2lkIDAhPT10LnJlbmRlck9yZGVyJiYoci5yZW5kZXJPcmRlcj10LnJlbmRlck9yZGVyKSx2b2lkIDAhPT10LnVzZXJEYXRhJiYoci51c2VyRGF0YT10LnVzZXJEYXRhKSx2b2lkIDAhPT10LmxheWVycyYmKHIubGF5ZXJzLm1hc2s9dC5sYXllcnMpLHZvaWQgMCE9PXQuY2hpbGRyZW4pe2NvbnN0IG89dC5jaGlsZHJlbjtmb3IobGV0IHQ9MDt0PG8ubGVuZ3RoO3QrKylyLmFkZCh0aGlzLnBhcnNlT2JqZWN0KG9bdF0sZSxuLGkpKX1pZih2b2lkIDAhPT10LmFuaW1hdGlvbnMpe2NvbnN0IGU9dC5hbmltYXRpb25zO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKXIuYW5pbWF0aW9ucy5wdXNoKGlbZVt0XV0pfWlmKCJMT0QiPT09dC50eXBlKXt2b2lkIDAhPT10LmF1dG9VcGRhdGUmJihyLmF1dG9VcGRhdGU9dC5hdXRvVXBkYXRlKTtjb25zdCBlPXQubGV2ZWxzO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKXtjb25zdCBuPWVbdF0saT1yLmdldE9iamVjdEJ5UHJvcGVydHkoInV1aWQiLG4ub2JqZWN0KTt2b2lkIDAhPT1pJiZyLmFkZExldmVsKGksbi5kaXN0YW5jZSl9fXJldHVybiByfWJpbmRTa2VsZXRvbnModCxlKXswIT09T2JqZWN0LmtleXMoZSkubGVuZ3RoJiZ0LnRyYXZlcnNlKChmdW5jdGlvbih0KXtpZighMD09PXQuaXNTa2lubmVkTWVzaCYmdm9pZCAwIT09dC5za2VsZXRvbil7Y29uc3Qgbj1lW3Quc2tlbGV0b25dO3ZvaWQgMD09PW4/Y29uc29sZS53YXJuKCJUSFJFRS5PYmplY3RMb2FkZXI6IE5vIHNrZWxldG9uIGZvdW5kIHdpdGggVVVJRDoiLHQuc2tlbGV0b24pOnQuYmluZChuLHQuYmluZE1hdHJpeCl9fSkpfXNldFRleHR1cmVQYXRoKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdExvYWRlcjogLnNldFRleHR1cmVQYXRoKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0UmVzb3VyY2VQYXRoKCkuIiksdGhpcy5zZXRSZXNvdXJjZVBhdGgodCl9fSxPYmplY3RTcGFjZU5vcm1hbE1hcDoxLE9jdGFoZWRyb25CdWZmZXJHZW9tZXRyeTpFVnQsT2N0YWhlZHJvbkdlb21ldHJ5OkVWdCxPbmVGYWN0b3I6MjAxLE9uZU1pbnVzRHN0QWxwaGFGYWN0b3I6MjA3LE9uZU1pbnVzRHN0Q29sb3JGYWN0b3I6MjA5LE9uZU1pbnVzU3JjQWxwaGFGYWN0b3I6MjA1LE9uZU1pbnVzU3JjQ29sb3JGYWN0b3I6MjAzLE9ydGhvZ3JhcGhpY0NhbWVyYTpaVXQsUENGU2hhZG93TWFwOjEsUENGU29mdFNoYWRvd01hcDoyLFBNUkVNR2VuZXJhdG9yOmNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuX3JlbmRlcmVyPXQsdGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQ9bnVsbCx0aGlzLl9ibHVyTWF0ZXJpYWw9KGZ1bmN0aW9uIGUodCl7cmV0dXJuIG5ldyBCVnQoe25hbWU6IlNwaGVyaWNhbEdhdXNzaWFuQmx1ciIsZGVmaW5lczp7bjp0fSx1bmlmb3Jtczp7ZW52TWFwOnt2YWx1ZTpudWxsfSxzYW1wbGVzOnt2YWx1ZToxfSx3ZWlnaHRzOnt2YWx1ZTpuZXcgRmxvYXQzMkFycmF5KHQpfSxsYXRpdHVkaW5hbDp7dmFsdWU6ITF9LGRUaGV0YTp7dmFsdWU6MH0sbWlwSW50Ont2YWx1ZTowfSxwb2xlQXhpczp7dmFsdWU6bmV3IHFPdCgwLDEsMCl9LGlucHV0RW5jb2Rpbmc6e3ZhbHVlOkhHdFszZTNdfSxvdXRwdXRFbmNvZGluZzp7dmFsdWU6SEd0WzNlM119fSx2ZXJ0ZXhTaGFkZXI6IlxuXG5cdFx0cHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG5cdFx0cHJlY2lzaW9uIG1lZGl1bXAgaW50O1xuXG5cdFx0YXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG5cdFx0YXR0cmlidXRlIHZlYzIgdXY7XG5cdFx0YXR0cmlidXRlIGZsb2F0IGZhY2VJbmRleDtcblxuXHRcdHZhcnlpbmcgdmVjMyB2T3V0cHV0RGlyZWN0aW9uO1xuXG5cdFx0Ly8gUkggY29vcmRpbmF0ZSBzeXN0ZW07IFBNUkVNIGZhY2UtaW5kZXhpbmcgY29udmVudGlvblxuXHRcdHZlYzMgZ2V0RGlyZWN0aW9uKCB2ZWMyIHV2LCBmbG9hdCBmYWNlICkge1xuXG5cdFx0XHR1diA9IDIuMCAqIHV2IC0gMS4wO1xuXG5cdFx0XHR2ZWMzIGRpcmVjdGlvbiA9IHZlYzMoIHV2LCAxLjAgKTtcblxuXHRcdFx0aWYgKCBmYWNlID09IDAuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24gPSBkaXJlY3Rpb24uenl4OyAvLyAoIDEsIHYsIHUgKSBwb3MgeFxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDEuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24gPSBkaXJlY3Rpb24ueHp5O1xuXHRcdFx0XHRkaXJlY3Rpb24ueHogKj0gLTEuMDsgLy8gKCAtdSwgMSwgLXYgKSBwb3MgeVxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDIuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24ueCAqPSAtMS4wOyAvLyAoIC11LCB2LCAxICkgcG9zIHpcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSAzLjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uID0gZGlyZWN0aW9uLnp5eDtcblx0XHRcdFx0ZGlyZWN0aW9uLnh6ICo9IC0xLjA7IC8vICggLTEsIHYsIC11ICkgbmVnIHhcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSA0LjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uID0gZGlyZWN0aW9uLnh6eTtcblx0XHRcdFx0ZGlyZWN0aW9uLnh5ICo9IC0xLjA7IC8vICggLXUsIC0xLCB2ICkgbmVnIHlcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSA1LjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uLnogKj0gLTEuMDsgLy8gKCB1LCB2LCAtMSApIG5lZyB6XG5cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGRpcmVjdGlvbjtcblxuXHRcdH1cblxuXHRcdHZvaWQgbWFpbigpIHtcblxuXHRcdFx0dk91dHB1dERpcmVjdGlvbiA9IGdldERpcmVjdGlvbiggdXYsIGZhY2VJbmRleCApO1xuXHRcdFx0Z2xfUG9zaXRpb24gPSB2ZWM0KCBwb3NpdGlvbiwgMS4wICk7XG5cblx0XHR9XG5cdCIsZnJhZ21lbnRTaGFkZXI6IlxuXG5cdFx0XHRwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcblx0XHRcdHByZWNpc2lvbiBtZWRpdW1wIGludDtcblxuXHRcdFx0dmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247XG5cblx0XHRcdHVuaWZvcm0gc2FtcGxlcjJEIGVudk1hcDtcblx0XHRcdHVuaWZvcm0gaW50IHNhbXBsZXM7XG5cdFx0XHR1bmlmb3JtIGZsb2F0IHdlaWdodHNbIG4gXTtcblx0XHRcdHVuaWZvcm0gYm9vbCBsYXRpdHVkaW5hbDtcblx0XHRcdHVuaWZvcm0gZmxvYXQgZFRoZXRhO1xuXHRcdFx0dW5pZm9ybSBmbG9hdCBtaXBJbnQ7XG5cdFx0XHR1bmlmb3JtIHZlYzMgcG9sZUF4aXM7XG5cblx0XHRcdFxuXG5cdFx0dW5pZm9ybSBpbnQgaW5wdXRFbmNvZGluZztcblx0XHR1bmlmb3JtIGludCBvdXRwdXRFbmNvZGluZztcblxuXHRcdCNpbmNsdWRlIDxlbmNvZGluZ3NfcGFyc19mcmFnbWVudD5cblxuXHRcdHZlYzQgaW5wdXRUZXhlbFRvTGluZWFyKCB2ZWM0IHZhbHVlICkge1xuXG5cdFx0XHRpZiAoIGlucHV0RW5jb2RpbmcgPT0gMCApIHtcblxuXHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cblx0XHRcdH0gZWxzZSBpZiAoIGlucHV0RW5jb2RpbmcgPT0gMSApIHtcblxuXHRcdFx0XHRyZXR1cm4gc1JHQlRvTGluZWFyKCB2YWx1ZSApO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBpbnB1dEVuY29kaW5nID09IDIgKSB7XG5cblx0XHRcdFx0cmV0dXJuIFJHQkVUb0xpbmVhciggdmFsdWUgKTtcblxuXHRcdFx0fSBlbHNlIGlmICggaW5wdXRFbmNvZGluZyA9PSAzICkge1xuXG5cdFx0XHRcdHJldHVybiBSR0JNVG9MaW5lYXIoIHZhbHVlLCA3LjAgKTtcblxuXHRcdFx0fSBlbHNlIGlmICggaW5wdXRFbmNvZGluZyA9PSA0ICkge1xuXG5cdFx0XHRcdHJldHVybiBSR0JNVG9MaW5lYXIoIHZhbHVlLCAxNi4wICk7XG5cblx0XHRcdH0gZWxzZSBpZiAoIGlucHV0RW5jb2RpbmcgPT0gNSApIHtcblxuXHRcdFx0XHRyZXR1cm4gUkdCRFRvTGluZWFyKCB2YWx1ZSwgMjU2LjAgKTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRyZXR1cm4gR2FtbWFUb0xpbmVhciggdmFsdWUsIDIuMiApO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHR2ZWM0IGxpbmVhclRvT3V0cHV0VGV4ZWwoIHZlYzQgdmFsdWUgKSB7XG5cblx0XHRcdGlmICggb3V0cHV0RW5jb2RpbmcgPT0gMCApIHtcblxuXHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cblx0XHRcdH0gZWxzZSBpZiAoIG91dHB1dEVuY29kaW5nID09IDEgKSB7XG5cblx0XHRcdFx0cmV0dXJuIExpbmVhclRvc1JHQiggdmFsdWUgKTtcblxuXHRcdFx0fSBlbHNlIGlmICggb3V0cHV0RW5jb2RpbmcgPT0gMiApIHtcblxuXHRcdFx0XHRyZXR1cm4gTGluZWFyVG9SR0JFKCB2YWx1ZSApO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBvdXRwdXRFbmNvZGluZyA9PSAzICkge1xuXG5cdFx0XHRcdHJldHVybiBMaW5lYXJUb1JHQk0oIHZhbHVlLCA3LjAgKTtcblxuXHRcdFx0fSBlbHNlIGlmICggb3V0cHV0RW5jb2RpbmcgPT0gNCApIHtcblxuXHRcdFx0XHRyZXR1cm4gTGluZWFyVG9SR0JNKCB2YWx1ZSwgMTYuMCApO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBvdXRwdXRFbmNvZGluZyA9PSA1ICkge1xuXG5cdFx0XHRcdHJldHVybiBMaW5lYXJUb1JHQkQoIHZhbHVlLCAyNTYuMCApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdHJldHVybiBMaW5lYXJUb0dhbW1hKCB2YWx1ZSwgMi4yICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdHZlYzQgZW52TWFwVGV4ZWxUb0xpbmVhciggdmVjNCBjb2xvciApIHtcblxuXHRcdFx0cmV0dXJuIGlucHV0VGV4ZWxUb0xpbmVhciggY29sb3IgKTtcblxuXHRcdH1cblx0XG5cblx0XHRcdCNkZWZpbmUgRU5WTUFQX1RZUEVfQ1VCRV9VVlxuXHRcdFx0I2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD5cblxuXHRcdFx0dmVjMyBnZXRTYW1wbGUoIGZsb2F0IHRoZXRhLCB2ZWMzIGF4aXMgKSB7XG5cblx0XHRcdFx0ZmxvYXQgY29zVGhldGEgPSBjb3MoIHRoZXRhICk7XG5cdFx0XHRcdC8vIFJvZHJpZ3VlcycgYXhpcy1hbmdsZSByb3RhdGlvblxuXHRcdFx0XHR2ZWMzIHNhbXBsZURpcmVjdGlvbiA9IHZPdXRwdXREaXJlY3Rpb24gKiBjb3NUaGV0YVxuXHRcdFx0XHRcdCsgY3Jvc3MoIGF4aXMsIHZPdXRwdXREaXJlY3Rpb24gKSAqIHNpbiggdGhldGEgKVxuXHRcdFx0XHRcdCsgYXhpcyAqIGRvdCggYXhpcywgdk91dHB1dERpcmVjdGlvbiApICogKCAxLjAgLSBjb3NUaGV0YSApO1xuXG5cdFx0XHRcdHJldHVybiBiaWxpbmVhckN1YmVVViggZW52TWFwLCBzYW1wbGVEaXJlY3Rpb24sIG1pcEludCApO1xuXG5cdFx0XHR9XG5cblx0XHRcdHZvaWQgbWFpbigpIHtcblxuXHRcdFx0XHR2ZWMzIGF4aXMgPSBsYXRpdHVkaW5hbCA/IHBvbGVBeGlzIDogY3Jvc3MoIHBvbGVBeGlzLCB2T3V0cHV0RGlyZWN0aW9uICk7XG5cblx0XHRcdFx0aWYgKCBhbGwoIGVxdWFsKCBheGlzLCB2ZWMzKCAwLjAgKSApICkgKSB7XG5cblx0XHRcdFx0XHRheGlzID0gdmVjMyggdk91dHB1dERpcmVjdGlvbi56LCAwLjAsIC0gdk91dHB1dERpcmVjdGlvbi54ICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGF4aXMgPSBub3JtYWxpemUoIGF4aXMgKTtcblxuXHRcdFx0XHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCAwLjAsIDAuMCwgMC4wLCAxLjAgKTtcblx0XHRcdFx0Z2xfRnJhZ0NvbG9yLnJnYiArPSB3ZWlnaHRzWyAwIF0gKiBnZXRTYW1wbGUoIDAuMCwgYXhpcyApO1xuXG5cdFx0XHRcdGZvciAoIGludCBpID0gMTsgaSA8IG47IGkrKyApIHtcblxuXHRcdFx0XHRcdGlmICggaSA+PSBzYW1wbGVzICkge1xuXG5cdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGZsb2F0IHRoZXRhID0gZFRoZXRhICogZmxvYXQoIGkgKTtcblx0XHRcdFx0XHRnbF9GcmFnQ29sb3IucmdiICs9IHdlaWdodHNbIGkgXSAqIGdldFNhbXBsZSggLTEuMCAqIHRoZXRhLCBheGlzICk7XG5cdFx0XHRcdFx0Z2xfRnJhZ0NvbG9yLnJnYiArPSB3ZWlnaHRzWyBpIF0gKiBnZXRTYW1wbGUoIHRoZXRhLCBheGlzICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGdsX0ZyYWdDb2xvciA9IGxpbmVhclRvT3V0cHV0VGV4ZWwoIGdsX0ZyYWdDb2xvciApO1xuXG5cdFx0XHR9XG5cdFx0IixibGVuZGluZzowLGRlcHRoVGVzdDohMSxkZXB0aFdyaXRlOiExfSl9KSgyMCksdGhpcy5fZXF1aXJlY3RTaGFkZXI9bnVsbCx0aGlzLl9jdWJlbWFwU2hhZGVyPW51bGwsdGhpcy5fY29tcGlsZU1hdGVyaWFsKHRoaXMuX2JsdXJNYXRlcmlhbCl9ZnJvbVNjZW5lKHQsZT0wLG49LjEsaT0xMDApe1lHdD10aGlzLl9yZW5kZXJlci5nZXRSZW5kZXJUYXJnZXQoKTtjb25zdCByPXRoaXMuX2FsbG9jYXRlVGFyZ2V0cygpO3JldHVybiB0aGlzLl9zY2VuZVRvQ3ViZVVWKHQsbixpLHIpLGU+MCYmdGhpcy5fYmx1cihyLDAsMCxlKSx0aGlzLl9hcHBseVBNUkVNKHIpLHRoaXMuX2NsZWFudXAocikscn1mcm9tRXF1aXJlY3Rhbmd1bGFyKHQpe3JldHVybiB0aGlzLl9mcm9tVGV4dHVyZSh0KX1mcm9tQ3ViZW1hcCh0KXtyZXR1cm4gdGhpcy5fZnJvbVRleHR1cmUodCl9Y29tcGlsZUN1YmVtYXBTaGFkZXIoKXtudWxsPT09dGhpcy5fY3ViZW1hcFNoYWRlciYmKHRoaXMuX2N1YmVtYXBTaGFkZXI9aVd0KCksdGhpcy5fY29tcGlsZU1hdGVyaWFsKHRoaXMuX2N1YmVtYXBTaGFkZXIpKX1jb21waWxlRXF1aXJlY3Rhbmd1bGFyU2hhZGVyKCl7bnVsbD09PXRoaXMuX2VxdWlyZWN0U2hhZGVyJiYodGhpcy5fZXF1aXJlY3RTaGFkZXI9bld0KCksdGhpcy5fY29tcGlsZU1hdGVyaWFsKHRoaXMuX2VxdWlyZWN0U2hhZGVyKSl9ZGlzcG9zZSgpe3RoaXMuX2JsdXJNYXRlcmlhbC5kaXNwb3NlKCksbnVsbCE9PXRoaXMuX2N1YmVtYXBTaGFkZXImJnRoaXMuX2N1YmVtYXBTaGFkZXIuZGlzcG9zZSgpLG51bGwhPT10aGlzLl9lcXVpcmVjdFNoYWRlciYmdGhpcy5fZXF1aXJlY3RTaGFkZXIuZGlzcG9zZSgpO2ZvcihsZXQgdD0wO3Q8akd0Lmxlbmd0aDt0Kyspakd0W3RdLmRpc3Bvc2UoKX1fY2xlYW51cCh0KXt0aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldC5kaXNwb3NlKCksdGhpcy5fcmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KFlHdCksdC5zY2lzc29yVGVzdD0hMSxlV3QodCwwLDAsdC53aWR0aCx0LmhlaWdodCl9X2Zyb21UZXh0dXJlKHQpe1lHdD10aGlzLl9yZW5kZXJlci5nZXRSZW5kZXJUYXJnZXQoKTtjb25zdCBlPXRoaXMuX2FsbG9jYXRlVGFyZ2V0cyh0KTtyZXR1cm4gdGhpcy5fdGV4dHVyZVRvQ3ViZVVWKHQsZSksdGhpcy5fYXBwbHlQTVJFTShlKSx0aGlzLl9jbGVhbnVwKGUpLGV9X2FsbG9jYXRlVGFyZ2V0cyh0KXtjb25zdCBlPXttYWdGaWx0ZXI6Vkl0LG1pbkZpbHRlcjpWSXQsZ2VuZXJhdGVNaXBtYXBzOiExLHR5cGU6WUl0LGZvcm1hdDoxMDIzLGVuY29kaW5nOkpHdCh0KT90LmVuY29kaW5nOk1PdCxkZXB0aEJ1ZmZlcjohMX0sbj10V3QoZSk7cmV0dXJuIG4uZGVwdGhCdWZmZXI9IXQsdGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQ9dFd0KGUpLG59X2NvbXBpbGVNYXRlcmlhbCh0KXtjb25zdCBlPW5ldyBvRHQoakd0WzBdLHQpO3RoaXMuX3JlbmRlcmVyLmNvbXBpbGUoZSxVR3QpfV9zY2VuZVRvQ3ViZVVWKHQsZSxuLGkpe2NvbnN0IHI9bmV3IHBEdCg5MCwxLGUsbiksbz1bMSwtMSwxLDEsMSwxXSxhPVsxLDEsMSwtMSwtMSwtMV0scz10aGlzLl9yZW5kZXJlcixsPXMuYXV0b0NsZWFyLGM9cy5vdXRwdXRFbmNvZGluZyx1PXMudG9uZU1hcHBpbmc7cy5nZXRDbGVhckNvbG9yKHFHdCkscy50b25lTWFwcGluZz0wLHMub3V0cHV0RW5jb2Rpbmc9eE90LHMuYXV0b0NsZWFyPSExO2xldCBoPSExO2NvbnN0IGQ9dC5iYWNrZ3JvdW5kO2lmKGQpe2lmKGQuaXNDb2xvcil7Rkd0LmNvbG9yLmNvcHkoZCkuY29udmVydFNSR0JUb0xpbmVhcigpLHQuYmFja2dyb3VuZD1udWxsO2NvbnN0IGU9Wkd0KEZHdC5jb2xvcik7Rkd0Lm9wYWNpdHk9ZSxoPSEwfX1lbHNle0ZHdC5jb2xvci5jb3B5KHFHdCkuY29udmVydFNSR0JUb0xpbmVhcigpO2NvbnN0IHQ9Wkd0KEZHdC5jb2xvcik7Rkd0Lm9wYWNpdHk9dCxoPSEwfWZvcihsZXQgZT0wO2U8NjtlKyspe2NvbnN0IG49ZSUzOzA9PW4/KHIudXAuc2V0KDAsb1tlXSwwKSxyLmxvb2tBdChhW2VdLDAsMCkpOjE9PW4/KHIudXAuc2V0KDAsMCxvW2VdKSxyLmxvb2tBdCgwLGFbZV0sMCkpOihyLnVwLnNldCgwLG9bZV0sMCksci5sb29rQXQoMCwwLGFbZV0pKSxlV3QoaSxuKnpHdCxlPjI/ekd0OjAsekd0LHpHdCkscy5zZXRSZW5kZXJUYXJnZXQoaSksaCYmcy5yZW5kZXIoVkd0LHIpLHMucmVuZGVyKHQscil9cy50b25lTWFwcGluZz11LHMub3V0cHV0RW5jb2Rpbmc9YyxzLmF1dG9DbGVhcj1sfV90ZXh0dXJlVG9DdWJlVVYodCxlKXtjb25zdCBuPXRoaXMuX3JlbmRlcmVyO3QuaXNDdWJlVGV4dHVyZT9udWxsPT10aGlzLl9jdWJlbWFwU2hhZGVyJiYodGhpcy5fY3ViZW1hcFNoYWRlcj1pV3QoKSk6bnVsbD09dGhpcy5fZXF1aXJlY3RTaGFkZXImJih0aGlzLl9lcXVpcmVjdFNoYWRlcj1uV3QoKSk7Y29uc3QgaT10LmlzQ3ViZVRleHR1cmU/dGhpcy5fY3ViZW1hcFNoYWRlcjp0aGlzLl9lcXVpcmVjdFNoYWRlcixyPW5ldyBvRHQoakd0WzBdLGkpLG89aS51bmlmb3JtcztvLmVudk1hcC52YWx1ZT10LHQuaXNDdWJlVGV4dHVyZXx8by50ZXhlbFNpemUudmFsdWUuc2V0KDEvdC5pbWFnZS53aWR0aCwxL3QuaW1hZ2UuaGVpZ2h0KSxvLmlucHV0RW5jb2RpbmcudmFsdWU9SEd0W3QuZW5jb2RpbmddLG8ub3V0cHV0RW5jb2RpbmcudmFsdWU9SEd0W2UudGV4dHVyZS5lbmNvZGluZ10sZVd0KGUsMCwwLDMqekd0LDIqekd0KSxuLnNldFJlbmRlclRhcmdldChlKSxuLnJlbmRlcihyLFVHdCl9X2FwcGx5UE1SRU0odCl7Y29uc3QgZT10aGlzLl9yZW5kZXJlcixuPWUuYXV0b0NsZWFyO2UuYXV0b0NsZWFyPSExO2ZvcihsZXQgZT0xO2U8Qkd0O2UrKyl7Y29uc3Qgbj1NYXRoLnNxcnQoV0d0W2VdKldHdFtlXS1XR3RbZS0xXSpXR3RbZS0xXSk7dGhpcy5fYmx1cih0LGUtMSxlLG4sS0d0WyhlLTEpJUtHdC5sZW5ndGhdKX1lLmF1dG9DbGVhcj1ufV9ibHVyKHQsZSxuLGkscil7Y29uc3Qgbz10aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldDt0aGlzLl9oYWxmQmx1cih0LG8sZSxuLGksImxhdGl0dWRpbmFsIixyKSx0aGlzLl9oYWxmQmx1cihvLHQsbixuLGksImxvbmdpdHVkaW5hbCIscil9X2hhbGZCbHVyKHQsZSxuLGkscixvLGEpe2NvbnN0IHM9dGhpcy5fcmVuZGVyZXIsbD10aGlzLl9ibHVyTWF0ZXJpYWw7ImxhdGl0dWRpbmFsIiE9PW8mJiJsb25naXR1ZGluYWwiIT09byYmY29uc29sZS5lcnJvcigiYmx1ciBkaXJlY3Rpb24gbXVzdCBiZSBlaXRoZXIgbGF0aXR1ZGluYWwgb3IgbG9uZ2l0dWRpbmFsISIpO2NvbnN0IGM9bmV3IG9EdChqR3RbaV0sbCksdT1sLnVuaWZvcm1zLGg9R0d0W25dLTEsZD1pc0Zpbml0ZShyKT9NYXRoLlBJLygyKmgpOjIqTWF0aC5QSS8zOSxwPXIvZCxmPWlzRmluaXRlKHIpPzErTWF0aC5mbG9vcigzKnApOjIwO2Y+MjAmJmNvbnNvbGUud2Fybihgc2lnbWFSYWRpYW5zLCAke3J9LCBpcyB0b28gbGFyZ2UgYW5kIHdpbGwgY2xpcCwgYXMgaXQgcmVxdWVzdGVkICR7Zn0gc2FtcGxlcyB3aGVuIHRoZSBtYXhpbXVtIGlzIHNldCB0byAyMGApO2NvbnN0IG09W107bGV0IGc9MDtmb3IobGV0IHQ9MDt0PDIwOysrdCl7Y29uc3QgZT10L3Asbj1NYXRoLmV4cCgtZSplLzIpO20ucHVzaChuKSwwPT10P2crPW46dDxmJiYoZys9MipuKX1mb3IobGV0IHQ9MDt0PG0ubGVuZ3RoO3QrKyltW3RdPW1bdF0vZzt1LmVudk1hcC52YWx1ZT10LnRleHR1cmUsdS5zYW1wbGVzLnZhbHVlPWYsdS53ZWlnaHRzLnZhbHVlPW0sdS5sYXRpdHVkaW5hbC52YWx1ZT0ibGF0aXR1ZGluYWwiPT09byxhJiYodS5wb2xlQXhpcy52YWx1ZT1hKSx1LmRUaGV0YS52YWx1ZT1kLHUubWlwSW50LnZhbHVlPTgtbix1LmlucHV0RW5jb2RpbmcudmFsdWU9SEd0W3QudGV4dHVyZS5lbmNvZGluZ10sdS5vdXRwdXRFbmNvZGluZy52YWx1ZT1IR3RbdC50ZXh0dXJlLmVuY29kaW5nXTtjb25zdCBfPUdHdFtpXTtlV3QoZSwzKk1hdGgubWF4KDAsekd0LTIqXyksKDA9PT1pPzA6Mip6R3QpKzIqXyooaT40P2ktOCs0OjApLDMqXywyKl8pLHMuc2V0UmVuZGVyVGFyZ2V0KGUpLHMucmVuZGVyKGMsVUd0KX19LFBhcmFtZXRyaWNCdWZmZXJHZW9tZXRyeTpUVnQsUGFyYW1ldHJpY0dlb21ldHJ5OlRWdCxQYXJ0aWNsZTpmdW5jdGlvbiBUV3QodCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUGFydGljbGUgaGFzIGJlZW4gcmVuYW1lZCB0byBUSFJFRS5TcHJpdGUuIiksbmV3IEtIdCh0KX0sUGFydGljbGVCYXNpY01hdGVyaWFsOmZ1bmN0aW9uIENXdCh0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5QYXJ0aWNsZUJhc2ljTWF0ZXJpYWwgaGFzIGJlZW4gcmVuYW1lZCB0byBUSFJFRS5Qb2ludHNNYXRlcmlhbC4iKSxuZXcgQ0Z0KHQpfSxQYXJ0aWNsZVN5c3RlbTpmdW5jdGlvbiBBV3QodCxlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5QYXJ0aWNsZVN5c3RlbSBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLlBvaW50cy4iKSxuZXcgTkZ0KHQsZSl9LFBhcnRpY2xlU3lzdGVtTWF0ZXJpYWw6ZnVuY3Rpb24ga1d0KHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlBhcnRpY2xlU3lzdGVtTWF0ZXJpYWwgaGFzIGJlZW4gcmVuYW1lZCB0byBUSFJFRS5Qb2ludHNNYXRlcmlhbC4iKSxuZXcgQ0Z0KHQpfSxQYXRoOlVVdCxQZXJzcGVjdGl2ZUNhbWVyYTpwRHQsUGxhbmU6JFJ0LFBsYW5lQnVmZmVyR2VvbWV0cnk6TUR0LFBsYW5lR2VvbWV0cnk6TUR0LFBsYW5lSGVscGVyOmNsYXNzIGV4dGVuZHMgd0Z0e2NvbnN0cnVjdG9yKHQsZT0xLG49MTY3NzY5NjApe2NvbnN0IGk9bixyPW5ldyBWenQ7ci5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcga3p0KFsxLC0xLDEsLTEsMSwxLC0xLC0xLDEsMSwxLDEsLTEsMSwxLC0xLC0xLDEsMSwtMSwxLDEsMSwxLDAsMCwxLDAsMCwwXSwzKSksci5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSxzdXBlcihyLG5ldyBnRnQoe2NvbG9yOmksdG9uZU1hcHBlZDohMX0pKSx0aGlzLnR5cGU9IlBsYW5lSGVscGVyIix0aGlzLnBsYW5lPXQsdGhpcy5zaXplPWU7Y29uc3Qgbz1uZXcgVnp0O28uc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGt6dChbMSwxLDEsLTEsMSwxLC0xLC0xLDEsMSwxLDEsLTEsLTEsMSwxLC0xLDFdLDMpKSxvLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLHRoaXMuYWRkKG5ldyBvRHQobyxuZXcgX3p0KHtjb2xvcjppLG9wYWNpdHk6LjIsdHJhbnNwYXJlbnQ6ITAsZGVwdGhXcml0ZTohMSx0b25lTWFwcGVkOiExfSkpKX11cGRhdGVNYXRyaXhXb3JsZCh0KXtsZXQgZT0tdGhpcy5wbGFuZS5jb25zdGFudDtNYXRoLmFicyhlKTwxZS04JiYoZT0xZS04KSx0aGlzLnNjYWxlLnNldCguNSp0aGlzLnNpemUsLjUqdGhpcy5zaXplLGUpLHRoaXMuY2hpbGRyZW5bMF0ubWF0ZXJpYWwuc2lkZT1lPDA/MTowLHRoaXMubG9va0F0KHRoaXMucGxhbmUubm9ybWFsKSxzdXBlci51cGRhdGVNYXRyaXhXb3JsZCh0KX19LFBvaW50Q2xvdWQ6ZnVuY3Rpb24gTFd0KHQsZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUG9pbnRDbG91ZCBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLlBvaW50cy4iKSxuZXcgTkZ0KHQsZSl9LFBvaW50Q2xvdWRNYXRlcmlhbDpmdW5jdGlvbiBQV3QodCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUG9pbnRDbG91ZE1hdGVyaWFsIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuUG9pbnRzTWF0ZXJpYWwuIiksbmV3IENGdCh0KX0sUG9pbnRMaWdodDpLVXQsUG9pbnRMaWdodEhlbHBlcjpjbGFzcyBleHRlbmRzIG9EdHtjb25zdHJ1Y3Rvcih0LGUsbil7c3VwZXIobmV3IGtWdChlLDQsMiksbmV3IF96dCh7d2lyZWZyYW1lOiEwLGZvZzohMSx0b25lTWFwcGVkOiExfSkpLHRoaXMubGlnaHQ9dCx0aGlzLmxpZ2h0LnVwZGF0ZU1hdHJpeFdvcmxkKCksdGhpcy5jb2xvcj1uLHRoaXMudHlwZT0iUG9pbnRMaWdodEhlbHBlciIsdGhpcy5tYXRyaXg9dGhpcy5saWdodC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy51cGRhdGUoKX1kaXNwb3NlKCl7dGhpcy5nZW9tZXRyeS5kaXNwb3NlKCksdGhpcy5tYXRlcmlhbC5kaXNwb3NlKCl9dXBkYXRlKCl7dm9pZCAwIT09dGhpcy5jb2xvcj90aGlzLm1hdGVyaWFsLmNvbG9yLnNldCh0aGlzLmNvbG9yKTp0aGlzLm1hdGVyaWFsLmNvbG9yLmNvcHkodGhpcy5saWdodC5jb2xvcil9fSxQb2ludHM6TkZ0LFBvaW50c01hdGVyaWFsOkNGdCxQb2xhckdyaWRIZWxwZXI6Y2xhc3MgZXh0ZW5kcyBFRnR7Y29uc3RydWN0b3IodD0xMCxlPTE2LG49OCxpPTY0LHI9NDQ3MzkyNCxvPTg5NDc4NDgpe3I9bmV3IHB6dChyKSxvPW5ldyBwenQobyk7Y29uc3QgYT1bXSxzPVtdO2ZvcihsZXQgbj0wO248PWU7bisrKXtjb25zdCBpPW4vZSooMipNYXRoLlBJKSxsPU1hdGguc2luKGkpKnQsYz1NYXRoLmNvcyhpKSp0O2EucHVzaCgwLDAsMCksYS5wdXNoKGwsMCxjKTtjb25zdCB1PTEmbj9yOm87cy5wdXNoKHUucix1LmcsdS5iKSxzLnB1c2godS5yLHUuZyx1LmIpfWZvcihsZXQgZT0wO2U8PW47ZSsrKXtjb25zdCBsPTEmZT9yOm8sYz10LXQvbiplO2ZvcihsZXQgdD0wO3Q8aTt0Kyspe2xldCBlPXQvaSooMipNYXRoLlBJKSxuPU1hdGguc2luKGUpKmMscj1NYXRoLmNvcyhlKSpjO2EucHVzaChuLDAscikscy5wdXNoKGwucixsLmcsbC5iKSxlPSh0KzEpL2kqKDIqTWF0aC5QSSksbj1NYXRoLnNpbihlKSpjLHI9TWF0aC5jb3MoZSkqYyxhLnB1c2gobiwwLHIpLHMucHVzaChsLnIsbC5nLGwuYil9fWNvbnN0IGw9bmV3IFZ6dDtsLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBrenQoYSwzKSksbC5zZXRBdHRyaWJ1dGUoImNvbG9yIixuZXcga3p0KHMsMykpLHN1cGVyKGwsbmV3IGdGdCh7dmVydGV4Q29sb3JzOiEwLHRvbmVNYXBwZWQ6ITF9KSksdGhpcy50eXBlPSJQb2xhckdyaWRIZWxwZXIifX0sUG9seWhlZHJvbkJ1ZmZlckdlb21ldHJ5OlZGdCxQb2x5aGVkcm9uR2VvbWV0cnk6VkZ0LFBvc2l0aW9uYWxBdWRpbzpjbGFzcyBleHRlbmRzIFBqdHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLnBhbm5lcj10aGlzLmNvbnRleHQuY3JlYXRlUGFubmVyKCksdGhpcy5wYW5uZXIucGFubmluZ01vZGVsPSJIUlRGIix0aGlzLnBhbm5lci5jb25uZWN0KHRoaXMuZ2Fpbil9Z2V0T3V0cHV0KCl7cmV0dXJuIHRoaXMucGFubmVyfWdldFJlZkRpc3RhbmNlKCl7cmV0dXJuIHRoaXMucGFubmVyLnJlZkRpc3RhbmNlfXNldFJlZkRpc3RhbmNlKHQpe3JldHVybiB0aGlzLnBhbm5lci5yZWZEaXN0YW5jZT10LHRoaXN9Z2V0Um9sbG9mZkZhY3Rvcigpe3JldHVybiB0aGlzLnBhbm5lci5yb2xsb2ZmRmFjdG9yfXNldFJvbGxvZmZGYWN0b3IodCl7cmV0dXJuIHRoaXMucGFubmVyLnJvbGxvZmZGYWN0b3I9dCx0aGlzfWdldERpc3RhbmNlTW9kZWwoKXtyZXR1cm4gdGhpcy5wYW5uZXIuZGlzdGFuY2VNb2RlbH1zZXREaXN0YW5jZU1vZGVsKHQpe3JldHVybiB0aGlzLnBhbm5lci5kaXN0YW5jZU1vZGVsPXQsdGhpc31nZXRNYXhEaXN0YW5jZSgpe3JldHVybiB0aGlzLnBhbm5lci5tYXhEaXN0YW5jZX1zZXRNYXhEaXN0YW5jZSh0KXtyZXR1cm4gdGhpcy5wYW5uZXIubWF4RGlzdGFuY2U9dCx0aGlzfXNldERpcmVjdGlvbmFsQ29uZSh0LGUsbil7cmV0dXJuIHRoaXMucGFubmVyLmNvbmVJbm5lckFuZ2xlPXQsdGhpcy5wYW5uZXIuY29uZU91dGVyQW5nbGU9ZSx0aGlzLnBhbm5lci5jb25lT3V0ZXJHYWluPW4sdGhpc311cGRhdGVNYXRyaXhXb3JsZCh0KXtpZihzdXBlci51cGRhdGVNYXRyaXhXb3JsZCh0KSwhMD09PXRoaXMuaGFzUGxheWJhY2tDb250cm9sJiYhMT09PXRoaXMuaXNQbGF5aW5nKXJldHVybjt0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZShOanQsSWp0LE9qdCksUmp0LnNldCgwLDAsMSkuYXBwbHlRdWF0ZXJuaW9uKElqdCk7Y29uc3QgZT10aGlzLnBhbm5lcjtpZihlLnBvc2l0aW9uWCl7Y29uc3QgdD10aGlzLmNvbnRleHQuY3VycmVudFRpbWUrdGhpcy5saXN0ZW5lci50aW1lRGVsdGE7ZS5wb3NpdGlvblgubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoTmp0LngsdCksZS5wb3NpdGlvblkubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoTmp0LnksdCksZS5wb3NpdGlvbloubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoTmp0LnosdCksZS5vcmllbnRhdGlvblgubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoUmp0LngsdCksZS5vcmllbnRhdGlvblkubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoUmp0LnksdCksZS5vcmllbnRhdGlvbloubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoUmp0LnosdCl9ZWxzZSBlLnNldFBvc2l0aW9uKE5qdC54LE5qdC55LE5qdC56KSxlLnNldE9yaWVudGF0aW9uKFJqdC54LFJqdC55LFJqdC56KX19LFByb3BlcnR5QmluZGluZzpYanQsUHJvcGVydHlNaXhlcjpEanQsUXVhZHJhdGljQmV6aWVyQ3VydmU6RFV0LFF1YWRyYXRpY0JlemllckN1cnZlMzpCVXQsUXVhdGVybmlvbjpXT3QsUXVhdGVybmlvbktleWZyYW1lVHJhY2s6clV0LFF1YXRlcm5pb25MaW5lYXJJbnRlcnBvbGFudDppVXQsUkVWSVNJT046Q0l0LFJHQkFEZXB0aFBhY2tpbmc6MzIwMSxSR0JBRm9ybWF0OnRPdCxSR0JBSW50ZWdlckZvcm1hdDoxMDMzLFJHQkFfQVNUQ18xMHgxMF9Gb3JtYXQ6Mzc4MTksUkdCQV9BU1RDXzEweDVfRm9ybWF0OjM3ODE2LFJHQkFfQVNUQ18xMHg2X0Zvcm1hdDozNzgxNyxSR0JBX0FTVENfMTB4OF9Gb3JtYXQ6Mzc4MTgsUkdCQV9BU1RDXzEyeDEwX0Zvcm1hdDozNzgyMCxSR0JBX0FTVENfMTJ4MTJfRm9ybWF0OjM3ODIxLFJHQkFfQVNUQ180eDRfRm9ybWF0OjM3ODA4LFJHQkFfQVNUQ181eDRfRm9ybWF0OjM3ODA5LFJHQkFfQVNUQ181eDVfRm9ybWF0OjM3ODEwLFJHQkFfQVNUQ182eDVfRm9ybWF0OjM3ODExLFJHQkFfQVNUQ182eDZfRm9ybWF0OjM3ODEyLFJHQkFfQVNUQ184eDVfRm9ybWF0OjM3ODEzLFJHQkFfQVNUQ184eDZfRm9ybWF0OjM3ODE0LFJHQkFfQVNUQ184eDhfRm9ybWF0OjM3ODE1LFJHQkFfQlBUQ19Gb3JtYXQ6MzY0OTIsUkdCQV9FVEMyX0VBQ19Gb3JtYXQ6ZE90LFJHQkFfUFZSVENfMkJQUFYxX0Zvcm1hdDp1T3QsUkdCQV9QVlJUQ180QlBQVjFfRm9ybWF0OmNPdCxSR0JBX1MzVENfRFhUMV9Gb3JtYXQ6ck90LFJHQkFfUzNUQ19EWFQzX0Zvcm1hdDpvT3QsUkdCQV9TM1RDX0RYVDVfRm9ybWF0OmFPdCxSR0JERW5jb2Rpbmc6Q090LFJHQkVFbmNvZGluZzpNT3QsUkdCRUZvcm1hdDoxMDIzLFJHQkZvcm1hdDpRSXQsUkdCSW50ZWdlckZvcm1hdDoxMDMyLFJHQk0xNkVuY29kaW5nOlRPdCxSR0JNN0VuY29kaW5nOkVPdCxSR0JfRVRDMV9Gb3JtYXQ6MzYxOTYsUkdCX0VUQzJfRm9ybWF0OmhPdCxSR0JfUFZSVENfMkJQUFYxX0Zvcm1hdDpsT3QsUkdCX1BWUlRDXzRCUFBWMV9Gb3JtYXQ6c090LFJHQl9TM1RDX0RYVDFfRm9ybWF0OmlPdCxSR0Zvcm1hdDoxMDMwLFJHSW50ZWdlckZvcm1hdDoxMDMxLFJhd1NoYWRlck1hdGVyaWFsOkJWdCxSYXk6dlJ0LFJheWNhc3RlcjplR3QsUmVjdEFyZWFMaWdodDplanQsUmVkRm9ybWF0OjEwMjgsUmVkSW50ZWdlckZvcm1hdDoxMDI5LFJlaW5oYXJkVG9uZU1hcHBpbmc6MixSZXBlYXRXcmFwcGluZzpCSXQsUmVwbGFjZVN0ZW5jaWxPcDo3NjgxLFJldmVyc2VTdWJ0cmFjdEVxdWF0aW9uOjEwMixSaW5nQnVmZmVyR2VvbWV0cnk6Q1Z0LFJpbmdHZW9tZXRyeTpDVnQsU1JHQjhfQUxQSEE4X0FTVENfMTB4MTBfRm9ybWF0OjM3ODUxLFNSR0I4X0FMUEhBOF9BU1RDXzEweDVfRm9ybWF0OjM3ODQ4LFNSR0I4X0FMUEhBOF9BU1RDXzEweDZfRm9ybWF0OjM3ODQ5LFNSR0I4X0FMUEhBOF9BU1RDXzEweDhfRm9ybWF0OjM3ODUwLFNSR0I4X0FMUEhBOF9BU1RDXzEyeDEwX0Zvcm1hdDozNzg1MixTUkdCOF9BTFBIQThfQVNUQ18xMngxMl9Gb3JtYXQ6Mzc4NTMsU1JHQjhfQUxQSEE4X0FTVENfNHg0X0Zvcm1hdDozNzg0MCxTUkdCOF9BTFBIQThfQVNUQ181eDRfRm9ybWF0OjM3ODQxLFNSR0I4X0FMUEhBOF9BU1RDXzV4NV9Gb3JtYXQ6Mzc4NDIsU1JHQjhfQUxQSEE4X0FTVENfNng1X0Zvcm1hdDozNzg0MyxTUkdCOF9BTFBIQThfQVNUQ182eDZfRm9ybWF0OjM3ODQ0LFNSR0I4X0FMUEhBOF9BU1RDXzh4NV9Gb3JtYXQ6Mzc4NDUsU1JHQjhfQUxQSEE4X0FTVENfOHg2X0Zvcm1hdDozNzg0NixTUkdCOF9BTFBIQThfQVNUQ184eDhfRm9ybWF0OjM3ODQ3LFNjZW5lOk5IdCxTY2VuZVV0aWxzOmxXdCxTaGFkZXJDaHVuazpFRHQsU2hhZGVyTGliOkNEdCxTaGFkZXJNYXRlcmlhbDpoRHQsU2hhZG93TWF0ZXJpYWw6RFZ0LFNoYXBlOmpVdCxTaGFwZUJ1ZmZlckdlb21ldHJ5OkFWdCxTaGFwZUdlb21ldHJ5OkFWdCxTaGFwZVBhdGg6cGp0LFNoYXBlVXRpbHM6eVZ0LFNob3J0VHlwZToxMDExLFNrZWxldG9uOnVGdCxTa2VsZXRvbkhlbHBlcjptR3QsU2tpbm5lZE1lc2g6YUZ0LFNtb290aFNoYWRpbmc6MixTcGhlcmU6aFJ0LFNwaGVyZUJ1ZmZlckdlb21ldHJ5OmtWdCxTcGhlcmVHZW9tZXRyeTprVnQsU3BoZXJpY2FsOnJHdCxTcGhlcmljYWxIYXJtb25pY3MzOm5qdCxTcGxpbmU6YVd0LFNwbGluZUN1cnZlOkhVdCxTcGxpbmVDdXJ2ZTM6b1d0LFNwb3RMaWdodDpYVXQsU3BvdExpZ2h0SGVscGVyOmNsYXNzIGV4dGVuZHMgV1J0e2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIoKSx0aGlzLmxpZ2h0PXQsdGhpcy5saWdodC51cGRhdGVNYXRyaXhXb3JsZCgpLHRoaXMubWF0cml4PXQubWF0cml4V29ybGQsdGhpcy5tYXRyaXhBdXRvVXBkYXRlPSExLHRoaXMuY29sb3I9ZTtjb25zdCBuPW5ldyBWenQsaT1bMCwwLDAsMCwwLDEsMCwwLDAsMSwwLDEsMCwwLDAsLTEsMCwxLDAsMCwwLDAsMSwxLDAsMCwwLDAsLTEsMV07Zm9yKGxldCB0PTAsZT0xLG49MzI7dDxuO3QrKyxlKyspe2NvbnN0IHI9dC9uKk1hdGguUEkqMixvPWUvbipNYXRoLlBJKjI7aS5wdXNoKE1hdGguY29zKHIpLE1hdGguc2luKHIpLDEsTWF0aC5jb3MobyksTWF0aC5zaW4obyksMSl9bi5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcga3p0KGksMykpO2NvbnN0IHI9bmV3IGdGdCh7Zm9nOiExLHRvbmVNYXBwZWQ6ITF9KTt0aGlzLmNvbmU9bmV3IEVGdChuLHIpLHRoaXMuYWRkKHRoaXMuY29uZSksdGhpcy51cGRhdGUoKX1kaXNwb3NlKCl7dGhpcy5jb25lLmdlb21ldHJ5LmRpc3Bvc2UoKSx0aGlzLmNvbmUubWF0ZXJpYWwuZGlzcG9zZSgpfXVwZGF0ZSgpe3RoaXMubGlnaHQudXBkYXRlTWF0cml4V29ybGQoKTtjb25zdCB0PXRoaXMubGlnaHQuZGlzdGFuY2U/dGhpcy5saWdodC5kaXN0YW5jZToxZTMsZT10Kk1hdGgudGFuKHRoaXMubGlnaHQuYW5nbGUpO3RoaXMuY29uZS5zY2FsZS5zZXQoZSxlLHQpLGhHdC5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5saWdodC50YXJnZXQubWF0cml4V29ybGQpLHRoaXMuY29uZS5sb29rQXQoaEd0KSx2b2lkIDAhPT10aGlzLmNvbG9yP3RoaXMuY29uZS5tYXRlcmlhbC5jb2xvci5zZXQodGhpcy5jb2xvcik6dGhpcy5jb25lLm1hdGVyaWFsLmNvbG9yLmNvcHkodGhpcy5saWdodC5jb2xvcil9fSxTcHJpdGU6S0h0LFNwcml0ZU1hdGVyaWFsOnpIdCxTcmNBbHBoYUZhY3RvcjoyMDQsU3JjQWxwaGFTYXR1cmF0ZUZhY3RvcjoyMTAsU3JjQ29sb3JGYWN0b3I6MjAyLFN0YXRpY0NvcHlVc2FnZTozNTA0NixTdGF0aWNEcmF3VXNhZ2U6a090LFN0YXRpY1JlYWRVc2FnZTozNTA0NSxTdGVyZW9DYW1lcmE6TWp0LFN0cmVhbUNvcHlVc2FnZTozNTA0MixTdHJlYW1EcmF3VXNhZ2U6MzUwNDAsU3RyZWFtUmVhZFVzYWdlOjM1MDQxLFN0cmluZ0tleWZyYW1lVHJhY2s6b1V0LFN1YnRyYWN0RXF1YXRpb246MTAxLFN1YnRyYWN0aXZlQmxlbmRpbmc6MyxUT1VDSDprSXQsVGFuZ2VudFNwYWNlTm9ybWFsTWFwOjAsVGV0cmFoZWRyb25CdWZmZXJHZW9tZXRyeTpMVnQsVGV0cmFoZWRyb25HZW9tZXRyeTpMVnQsVGV4dEJ1ZmZlckdlb21ldHJ5OlBWdCxUZXh0R2VvbWV0cnk6UFZ0LFRleHR1cmU6Vk90LFRleHR1cmVMb2FkZXI6YlV0LFRvcnVzQnVmZmVyR2VvbWV0cnk6TlZ0LFRvcnVzR2VvbWV0cnk6TlZ0LFRvcnVzS25vdEJ1ZmZlckdlb21ldHJ5OklWdCxUb3J1c0tub3RHZW9tZXRyeTpJVnQsVHJpYW5nbGU6YXp0LFRyaWFuZ2xlRmFuRHJhd01vZGU6MixUcmlhbmdsZVN0cmlwRHJhd01vZGU6MSxUcmlhbmdsZXNEcmF3TW9kZTowLFR1YmVCdWZmZXJHZW9tZXRyeTpPVnQsVHViZUdlb21ldHJ5Ok9WdCxVVk1hcHBpbmc6UEl0LFVpbnQxNkF0dHJpYnV0ZTpmdW5jdGlvbiBOV3QodCxlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5VaW50MTZBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5VaW50MTZCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLiIpLG5ldyBFenQodCxlKX0sVWludDE2QnVmZmVyQXR0cmlidXRlOkV6dCxVaW50MzJBdHRyaWJ1dGU6ZnVuY3Rpb24gSVd0KHQsZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVWludDMyQXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuVWludDMyQnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4iKSxuZXcgQ3p0KHQsZSl9LFVpbnQzMkJ1ZmZlckF0dHJpYnV0ZTpDenQsVWludDhBdHRyaWJ1dGU6ZnVuY3Rpb24gT1d0KHQsZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVWludDhBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5VaW50OEJ1ZmZlckF0dHJpYnV0ZSgpIGluc3RlYWQuIiksbmV3IHd6dCh0LGUpfSxVaW50OEJ1ZmZlckF0dHJpYnV0ZTp3enQsVWludDhDbGFtcGVkQXR0cmlidXRlOmZ1bmN0aW9uIFJXdCh0LGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlVpbnQ4Q2xhbXBlZEF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLlVpbnQ4Q2xhbXBlZEJ1ZmZlckF0dHJpYnV0ZSgpIGluc3RlYWQuIiksbmV3IFN6dCh0LGUpfSxVaW50OENsYW1wZWRCdWZmZXJBdHRyaWJ1dGU6U3p0LFVuaWZvcm06Smp0LFVuaWZvcm1zTGliOlREdCxVbmlmb3Jtc1V0aWxzOnVEdCxVbnNpZ25lZEJ5dGVUeXBlOllJdCxVbnNpZ25lZEludDI0OFR5cGU6Skl0LFVuc2lnbmVkSW50VHlwZTokSXQsVW5zaWduZWRTaG9ydDQ0NDRUeXBlOjEwMTcsVW5zaWduZWRTaG9ydDU1NTFUeXBlOjEwMTgsVW5zaWduZWRTaG9ydDU2NVR5cGU6MTAxOSxVbnNpZ25lZFNob3J0VHlwZTpYSXQsVlNNU2hhZG93TWFwOjMsVmVjdG9yMjp6T3QsVmVjdG9yMzpxT3QsVmVjdG9yNDpqT3QsVmVjdG9yS2V5ZnJhbWVUcmFjazphVXQsVmVydGV4OmZ1bmN0aW9uIHpXdCh0LGUsbil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVydGV4IGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5WZWN0b3IzIGluc3RlYWQuIiksbmV3IHFPdCh0LGUsbil9LFZlcnRleENvbG9yczoyLFZpZGVvVGV4dHVyZTpPRnQsV2ViR0wxUmVuZGVyZXI6a0h0LFdlYkdMQ3ViZVJlbmRlclRhcmdldDpfRHQsV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldDpjbGFzcyBleHRlbmRzIEdPdHtjb25zdHJ1Y3Rvcih0LGUsbil7c3VwZXIodCxlLG4pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpc1dlYkdMTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQiLHt2YWx1ZTohMH0pLHRoaXMuc2FtcGxlcz00fWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMuc2FtcGxlcz10LnNhbXBsZXMsdGhpc319LFdlYkdMUmVuZGVyVGFyZ2V0OkdPdCxXZWJHTFJlbmRlclRhcmdldEN1YmU6ZnVuY3Rpb24gRFd0KHQsZSxuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldEN1YmUoIHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMgKSBpcyBub3cgV2ViR0xDdWJlUmVuZGVyVGFyZ2V0KCBzaXplLCBvcHRpb25zICkuIiksbmV3IF9EdCh0LG4pfSxXZWJHTFJlbmRlcmVyOkFIdCxXZWJHTFV0aWxzOndIdCxXaXJlZnJhbWVHZW9tZXRyeTpSVnQsV2lyZWZyYW1lSGVscGVyOmZ1bmN0aW9uIEJXdCh0LGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldpcmVmcmFtZUhlbHBlciBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuV2lyZWZyYW1lR2VvbWV0cnkgaW5zdGVhZC4iKSxuZXcgRUZ0KG5ldyBSVnQodC5nZW9tZXRyeSksbmV3IGdGdCh7Y29sb3I6dm9pZCAwIT09ZT9lOjE2Nzc3MjE1fSkpfSxXcmFwQXJvdW5kRW5kaW5nOnlPdCxYSFJMb2FkZXI6ZnVuY3Rpb24gSFd0KHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlhIUkxvYWRlciBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLkZpbGVMb2FkZXIuIiksbmV3IGZVdCh0KX0sWmVyb0N1cnZhdHVyZUVuZGluZzpnT3QsWmVyb0ZhY3RvcjoyMDAsWmVyb1Nsb3BlRW5kaW5nOl9PdCxaZXJvU3RlbmNpbE9wOjAsc1JHQkVuY29kaW5nOndPdH0pLEZXdD1mdW5jdGlvbih0LGUpe3ZhciBuLGkscixvLGEsczt2b2lkIDA9PT1lJiZjb25zb2xlLndhcm4oJ1RIUkVFLk9yYml0Q29udHJvbHM6IFRoZSBzZWNvbmQgcGFyYW1ldGVyICJkb21FbGVtZW50IiBpcyBub3cgbWFuZGF0b3J5LicpLGU9PT1kb2N1bWVudCYmY29uc29sZS5lcnJvcignVEhSRUUuT3JiaXRDb250cm9sczogImRvY3VtZW50IiBzaG91bGQgbm90IGJlIHVzZWQgYXMgdGhlIHRhcmdldCAiZG9tRWxlbWVudCIuIFBsZWFzZSB1c2UgInJlbmRlcmVyLmRvbUVsZW1lbnQiIGluc3RlYWQuJyksdGhpcy5vYmplY3Q9dCx0aGlzLmRvbUVsZW1lbnQ9ZSx0aGlzLmVuYWJsZWQ9ITAsdGhpcy50YXJnZXQ9bmV3IHFPdCx0aGlzLm1pbkRpc3RhbmNlPTAsdGhpcy5tYXhEaXN0YW5jZT0xLzAsdGhpcy5taW5ab29tPTAsdGhpcy5tYXhab29tPTEvMCx0aGlzLm1pblBvbGFyQW5nbGU9MCx0aGlzLm1heFBvbGFyQW5nbGU9TWF0aC5QSSx0aGlzLm1pbkF6aW11dGhBbmdsZT0tMS8wLHRoaXMubWF4QXppbXV0aEFuZ2xlPTEvMCx0aGlzLmVuYWJsZURhbXBpbmc9ITEsdGhpcy5kYW1waW5nRmFjdG9yPS4wNSx0aGlzLmVuYWJsZVpvb209ITAsdGhpcy56b29tU3BlZWQ9MSx0aGlzLmVuYWJsZVJvdGF0ZT0hMCx0aGlzLnJvdGF0ZVNwZWVkPTEsdGhpcy5lbmFibGVQYW49ITAsdGhpcy5wYW5TcGVlZD0xLHRoaXMuc2NyZWVuU3BhY2VQYW5uaW5nPSEwLHRoaXMua2V5UGFuU3BlZWQ9Nyx0aGlzLmF1dG9Sb3RhdGU9ITEsdGhpcy5hdXRvUm90YXRlU3BlZWQ9Mix0aGlzLmtleXM9e0xFRlQ6MzcsVVA6MzgsUklHSFQ6MzksQk9UVE9NOjQwfSx0aGlzLm1vdXNlQnV0dG9ucz17TEVGVDpBSXQuUk9UQVRFLE1JRERMRTpBSXQuRE9MTFksUklHSFQ6QUl0LlBBTn0sdGhpcy50b3VjaGVzPXtPTkU6a0l0LlJPVEFURSxUV086a0l0LkRPTExZX1BBTn0sdGhpcy50YXJnZXQwPXRoaXMudGFyZ2V0LmNsb25lKCksdGhpcy5wb3NpdGlvbjA9dGhpcy5vYmplY3QucG9zaXRpb24uY2xvbmUoKSx0aGlzLnpvb20wPXRoaXMub2JqZWN0Lnpvb20sdGhpcy5fZG9tRWxlbWVudEtleUV2ZW50cz1udWxsLHRoaXMuZ2V0UG9sYXJBbmdsZT1mdW5jdGlvbigpe3JldHVybiBtLnBoaX0sdGhpcy5nZXRBemltdXRoYWxBbmdsZT1mdW5jdGlvbigpe3JldHVybiBtLnRoZXRhfSx0aGlzLmxpc3RlblRvS2V5RXZlbnRzPWZ1bmN0aW9uKHQpe3QuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsSyksdGhpcy5fZG9tRWxlbWVudEtleUV2ZW50cz10fSx0aGlzLnNhdmVTdGF0ZT1mdW5jdGlvbigpe2wudGFyZ2V0MC5jb3B5KGwudGFyZ2V0KSxsLnBvc2l0aW9uMC5jb3B5KGwub2JqZWN0LnBvc2l0aW9uKSxsLnpvb20wPWwub2JqZWN0Lnpvb219LHRoaXMucmVzZXQ9ZnVuY3Rpb24oKXtsLnRhcmdldC5jb3B5KGwudGFyZ2V0MCksbC5vYmplY3QucG9zaXRpb24uY29weShsLnBvc2l0aW9uMCksbC5vYmplY3Quem9vbT1sLnpvb20wLGwub2JqZWN0LnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKSxsLmRpc3BhdGNoRXZlbnQoYyksbC51cGRhdGUoKSxwPWQuTk9ORX0sdGhpcy51cGRhdGU9KG49bmV3IHFPdCxpPShuZXcgV090KS5zZXRGcm9tVW5pdFZlY3RvcnModC51cCxuZXcgcU90KDAsMSwwKSkscj1pLmNsb25lKCkuaW52ZXJ0KCksbz1uZXcgcU90LGE9bmV3IFdPdCxzPTIqTWF0aC5QSSxmdW5jdGlvbiB0KCl7dmFyIGU9bC5vYmplY3QucG9zaXRpb247bi5jb3B5KGUpLnN1YihsLnRhcmdldCksbi5hcHBseVF1YXRlcm5pb24oaSksbS5zZXRGcm9tVmVjdG9yMyhuKSxsLmF1dG9Sb3RhdGUmJnA9PT1kLk5PTkUmJkwoKGZ1bmN0aW9uIHUoKXtyZXR1cm4gMipNYXRoLlBJLzYwLzYwKmwuYXV0b1JvdGF0ZVNwZWVkfSkoKSksbC5lbmFibGVEYW1waW5nPyhtLnRoZXRhKz1nLnRoZXRhKmwuZGFtcGluZ0ZhY3RvcixtLnBoaSs9Zy5waGkqbC5kYW1waW5nRmFjdG9yKToobS50aGV0YSs9Zy50aGV0YSxtLnBoaSs9Zy5waGkpO3ZhciBoPWwubWluQXppbXV0aEFuZ2xlLGI9bC5tYXhBemltdXRoQW5nbGU7cmV0dXJuIGlzRmluaXRlKGgpJiZpc0Zpbml0ZShiKSYmKGg8LU1hdGguUEk/aCs9czpoPk1hdGguUEkmJihoLT1zKSxiPC1NYXRoLlBJP2IrPXM6Yj5NYXRoLlBJJiYoYi09cyksbS50aGV0YT1oPD1iP01hdGgubWF4KGgsTWF0aC5taW4oYixtLnRoZXRhKSk6bS50aGV0YT4oaCtiKS8yP01hdGgubWF4KGgsbS50aGV0YSk6TWF0aC5taW4oYixtLnRoZXRhKSksbS5waGk9TWF0aC5tYXgobC5taW5Qb2xhckFuZ2xlLE1hdGgubWluKGwubWF4UG9sYXJBbmdsZSxtLnBoaSkpLG0ubWFrZVNhZmUoKSxtLnJhZGl1cyo9XyxtLnJhZGl1cz1NYXRoLm1heChsLm1pbkRpc3RhbmNlLE1hdGgubWluKGwubWF4RGlzdGFuY2UsbS5yYWRpdXMpKSwhMD09PWwuZW5hYmxlRGFtcGluZz9sLnRhcmdldC5hZGRTY2FsZWRWZWN0b3IoeSxsLmRhbXBpbmdGYWN0b3IpOmwudGFyZ2V0LmFkZCh5KSxuLnNldEZyb21TcGhlcmljYWwobSksbi5hcHBseVF1YXRlcm5pb24ociksZS5jb3B5KGwudGFyZ2V0KS5hZGQobiksbC5vYmplY3QubG9va0F0KGwudGFyZ2V0KSwhMD09PWwuZW5hYmxlRGFtcGluZz8oZy50aGV0YSo9MS1sLmRhbXBpbmdGYWN0b3IsZy5waGkqPTEtbC5kYW1waW5nRmFjdG9yLHkubXVsdGlwbHlTY2FsYXIoMS1sLmRhbXBpbmdGYWN0b3IpKTooZy5zZXQoMCwwLDApLHkuc2V0KDAsMCwwKSksXz0xLCEhKHZ8fG8uZGlzdGFuY2VUb1NxdWFyZWQobC5vYmplY3QucG9zaXRpb24pPmZ8fDgqKDEtYS5kb3QobC5vYmplY3QucXVhdGVybmlvbikpPmYpJiYobC5kaXNwYXRjaEV2ZW50KGMpLG8uY29weShsLm9iamVjdC5wb3NpdGlvbiksYS5jb3B5KGwub2JqZWN0LnF1YXRlcm5pb24pLHY9ITEsITApfSksdGhpcy5kaXNwb3NlPWZ1bmN0aW9uKCl7bC5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51Iix0dCksbC5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIixxKSxsLmRvbUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2hlZWwiLCQpLGwuZG9tRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0IixaKSxsLmRvbUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLFEpLGwuZG9tRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLEopLGwuZG9tRWxlbWVudC5vd25lckRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIixZKSxsLmRvbUVsZW1lbnQub3duZXJEb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLFgpLG51bGwhPT1sLl9kb21FbGVtZW50S2V5RXZlbnRzJiZsLl9kb21FbGVtZW50S2V5RXZlbnRzLnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLEspfTt2YXIgbD10aGlzLGM9e3R5cGU6ImNoYW5nZSJ9LHU9e3R5cGU6InN0YXJ0In0saD17dHlwZToiZW5kIn0sZD17Tk9ORTotMSxST1RBVEU6MCxET0xMWToxLFBBTjoyLFRPVUNIX1JPVEFURTozLFRPVUNIX1BBTjo0LFRPVUNIX0RPTExZX1BBTjo1LFRPVUNIX0RPTExZX1JPVEFURTo2fSxwPWQuTk9ORSxmPTFlLTYsbT1uZXcgckd0LGc9bmV3IHJHdCxfPTEseT1uZXcgcU90LHY9ITEsYj1uZXcgek90LHg9bmV3IHpPdCx3PW5ldyB6T3QsUz1uZXcgek90LE09bmV3IHpPdCxFPW5ldyB6T3QsVD1uZXcgek90LEM9bmV3IHpPdCxBPW5ldyB6T3Q7ZnVuY3Rpb24gaygpe3JldHVybiBNYXRoLnBvdyguOTUsbC56b29tU3BlZWQpfWZ1bmN0aW9uIEwodCl7Zy50aGV0YS09dH1mdW5jdGlvbiBQKHQpe2cucGhpLT10fXZhciBOLEk9KE49bmV3IHFPdCxmdW5jdGlvbiB0KGUsbil7Ti5zZXRGcm9tTWF0cml4Q29sdW1uKG4sMCksTi5tdWx0aXBseVNjYWxhcigtZSkseS5hZGQoTil9KSxPPShmdW5jdGlvbigpe3ZhciB0PW5ldyBxT3Q7cmV0dXJuIGZ1bmN0aW9uIGUobixpKXshMD09PWwuc2NyZWVuU3BhY2VQYW5uaW5nP3Quc2V0RnJvbU1hdHJpeENvbHVtbihpLDEpOih0LnNldEZyb21NYXRyaXhDb2x1bW4oaSwwKSx0LmNyb3NzVmVjdG9ycyhsLm9iamVjdC51cCx0KSksdC5tdWx0aXBseVNjYWxhcihuKSx5LmFkZCh0KX19KSgpLFI9KGZ1bmN0aW9uKCl7dmFyIHQ9bmV3IHFPdDtyZXR1cm4gZnVuY3Rpb24gZShuLGkpe3ZhciByPWwuZG9tRWxlbWVudDtpZihsLm9iamVjdC5pc1BlcnNwZWN0aXZlQ2FtZXJhKXt0LmNvcHkobC5vYmplY3QucG9zaXRpb24pLnN1YihsLnRhcmdldCk7dmFyIG89dC5sZW5ndGgoKTtvKj1NYXRoLnRhbihsLm9iamVjdC5mb3YvMipNYXRoLlBJLzE4MCksSSgyKm4qby9yLmNsaWVudEhlaWdodCxsLm9iamVjdC5tYXRyaXgpLE8oMippKm8vci5jbGllbnRIZWlnaHQsbC5vYmplY3QubWF0cml4KX1lbHNlIGwub2JqZWN0LmlzT3J0aG9ncmFwaGljQ2FtZXJhPyhJKG4qKGwub2JqZWN0LnJpZ2h0LWwub2JqZWN0LmxlZnQpL2wub2JqZWN0Lnpvb20vci5jbGllbnRXaWR0aCxsLm9iamVjdC5tYXRyaXgpLE8oaSoobC5vYmplY3QudG9wLWwub2JqZWN0LmJvdHRvbSkvbC5vYmplY3Quem9vbS9yLmNsaWVudEhlaWdodCxsLm9iamVjdC5tYXRyaXgpKTooY29uc29sZS53YXJuKCJXQVJOSU5HOiBPcmJpdENvbnRyb2xzLmpzIGVuY291bnRlcmVkIGFuIHVua25vd24gY2FtZXJhIHR5cGUgLSBwYW4gZGlzYWJsZWQuIiksbC5lbmFibGVQYW49ITEpfX0pKCk7ZnVuY3Rpb24geih0KXtsLm9iamVjdC5pc1BlcnNwZWN0aXZlQ2FtZXJhP18vPXQ6bC5vYmplY3QuaXNPcnRob2dyYXBoaWNDYW1lcmE/KGwub2JqZWN0Lnpvb209TWF0aC5tYXgobC5taW5ab29tLE1hdGgubWluKGwubWF4Wm9vbSxsLm9iamVjdC56b29tKnQpKSxsLm9iamVjdC51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCksdj0hMCk6KGNvbnNvbGUud2FybigiV0FSTklORzogT3JiaXRDb250cm9scy5qcyBlbmNvdW50ZXJlZCBhbiB1bmtub3duIGNhbWVyYSB0eXBlIC0gZG9sbHkvem9vbSBkaXNhYmxlZC4iKSxsLmVuYWJsZVpvb209ITEpfWZ1bmN0aW9uIEQodCl7bC5vYmplY3QuaXNQZXJzcGVjdGl2ZUNhbWVyYT9fKj10Omwub2JqZWN0LmlzT3J0aG9ncmFwaGljQ2FtZXJhPyhsLm9iamVjdC56b29tPU1hdGgubWF4KGwubWluWm9vbSxNYXRoLm1pbihsLm1heFpvb20sbC5vYmplY3Quem9vbS90KSksbC5vYmplY3QudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpLHY9ITApOihjb25zb2xlLndhcm4oIldBUk5JTkc6IE9yYml0Q29udHJvbHMuanMgZW5jb3VudGVyZWQgYW4gdW5rbm93biBjYW1lcmEgdHlwZSAtIGRvbGx5L3pvb20gZGlzYWJsZWQuIiksbC5lbmFibGVab29tPSExKX1mdW5jdGlvbiBCKHQpe2Iuc2V0KHQuY2xpZW50WCx0LmNsaWVudFkpfWZ1bmN0aW9uIEgodCl7Uy5zZXQodC5jbGllbnRYLHQuY2xpZW50WSl9ZnVuY3Rpb24gRih0KXsxPT10LnRvdWNoZXMubGVuZ3RoP2Iuc2V0KHQudG91Y2hlc1swXS5wYWdlWCx0LnRvdWNoZXNbMF0ucGFnZVkpOmIuc2V0KC41Kih0LnRvdWNoZXNbMF0ucGFnZVgrdC50b3VjaGVzWzFdLnBhZ2VYKSwuNSoodC50b3VjaGVzWzBdLnBhZ2VZK3QudG91Y2hlc1sxXS5wYWdlWSkpfWZ1bmN0aW9uIFYodCl7MT09dC50b3VjaGVzLmxlbmd0aD9TLnNldCh0LnRvdWNoZXNbMF0ucGFnZVgsdC50b3VjaGVzWzBdLnBhZ2VZKTpTLnNldCguNSoodC50b3VjaGVzWzBdLnBhZ2VYK3QudG91Y2hlc1sxXS5wYWdlWCksLjUqKHQudG91Y2hlc1swXS5wYWdlWSt0LnRvdWNoZXNbMV0ucGFnZVkpKX1mdW5jdGlvbiBVKHQpe3ZhciBlPXQudG91Y2hlc1swXS5wYWdlWC10LnRvdWNoZXNbMV0ucGFnZVgsbj10LnRvdWNoZXNbMF0ucGFnZVktdC50b3VjaGVzWzFdLnBhZ2VZLGk9TWF0aC5zcXJ0KGUqZStuKm4pO1Quc2V0KDAsaSl9ZnVuY3Rpb24gaih0KXsxPT10LnRvdWNoZXMubGVuZ3RoP3guc2V0KHQudG91Y2hlc1swXS5wYWdlWCx0LnRvdWNoZXNbMF0ucGFnZVkpOnguc2V0KC41Kih0LnRvdWNoZXNbMF0ucGFnZVgrdC50b3VjaGVzWzFdLnBhZ2VYKSwuNSoodC50b3VjaGVzWzBdLnBhZ2VZK3QudG91Y2hlc1sxXS5wYWdlWSkpLHcuc3ViVmVjdG9ycyh4LGIpLm11bHRpcGx5U2NhbGFyKGwucm90YXRlU3BlZWQpO3ZhciBlPWwuZG9tRWxlbWVudDtMKDIqTWF0aC5QSSp3LngvZS5jbGllbnRIZWlnaHQpLFAoMipNYXRoLlBJKncueS9lLmNsaWVudEhlaWdodCksYi5jb3B5KHgpfWZ1bmN0aW9uIEcodCl7MT09dC50b3VjaGVzLmxlbmd0aD9NLnNldCh0LnRvdWNoZXNbMF0ucGFnZVgsdC50b3VjaGVzWzBdLnBhZ2VZKTpNLnNldCguNSoodC50b3VjaGVzWzBdLnBhZ2VYK3QudG91Y2hlc1sxXS5wYWdlWCksLjUqKHQudG91Y2hlc1swXS5wYWdlWSt0LnRvdWNoZXNbMV0ucGFnZVkpKSxFLnN1YlZlY3RvcnMoTSxTKS5tdWx0aXBseVNjYWxhcihsLnBhblNwZWVkKSxSKEUueCxFLnkpLFMuY29weShNKX1mdW5jdGlvbiBXKHQpe3ZhciBlPXQudG91Y2hlc1swXS5wYWdlWC10LnRvdWNoZXNbMV0ucGFnZVgsbj10LnRvdWNoZXNbMF0ucGFnZVktdC50b3VjaGVzWzFdLnBhZ2VZLGk9TWF0aC5zcXJ0KGUqZStuKm4pO0Muc2V0KDAsaSksQS5zZXQoMCxNYXRoLnBvdyhDLnkvVC55LGwuem9vbVNwZWVkKSkseihBLnkpLFQuY29weShDKX1mdW5jdGlvbiBxKHQpe2lmKCExIT09bC5lbmFibGVkKXN3aXRjaCh0LnBvaW50ZXJUeXBlKXtjYXNlIm1vdXNlIjpjYXNlInBlbiI6IShmdW5jdGlvbiBlKHQpe3ZhciBlO3N3aXRjaCh0LnByZXZlbnREZWZhdWx0KCksbC5kb21FbGVtZW50LmZvY3VzP2wuZG9tRWxlbWVudC5mb2N1cygpOndpbmRvdy5mb2N1cygpLHQuYnV0dG9uKXtjYXNlIDA6ZT1sLm1vdXNlQnV0dG9ucy5MRUZUO2JyZWFrO2Nhc2UgMTplPWwubW91c2VCdXR0b25zLk1JRERMRTticmVhaztjYXNlIDI6ZT1sLm1vdXNlQnV0dG9ucy5SSUdIVDticmVhaztkZWZhdWx0OmU9LTF9c3dpdGNoKGUpe2Nhc2UgQUl0LkRPTExZOmlmKCExPT09bC5lbmFibGVab29tKXJldHVybjshKGZ1bmN0aW9uIG4odCl7VC5zZXQodC5jbGllbnRYLHQuY2xpZW50WSl9KSh0KSxwPWQuRE9MTFk7YnJlYWs7Y2FzZSBBSXQuUk9UQVRFOmlmKHQuY3RybEtleXx8dC5tZXRhS2V5fHx0LnNoaWZ0S2V5KXtpZighMT09PWwuZW5hYmxlUGFuKXJldHVybjtIKHQpLHA9ZC5QQU59ZWxzZXtpZighMT09PWwuZW5hYmxlUm90YXRlKXJldHVybjtCKHQpLHA9ZC5ST1RBVEV9YnJlYWs7Y2FzZSBBSXQuUEFOOmlmKHQuY3RybEtleXx8dC5tZXRhS2V5fHx0LnNoaWZ0S2V5KXtpZighMT09PWwuZW5hYmxlUm90YXRlKXJldHVybjtCKHQpLHA9ZC5ST1RBVEV9ZWxzZXtpZighMT09PWwuZW5hYmxlUGFuKXJldHVybjtIKHQpLHA9ZC5QQU59YnJlYWs7ZGVmYXVsdDpwPWQuTk9ORX1wIT09ZC5OT05FJiYobC5kb21FbGVtZW50Lm93bmVyRG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLFkpLGwuZG9tRWxlbWVudC5vd25lckRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsWCksbC5kaXNwYXRjaEV2ZW50KHUpKX0pKHQpfX1mdW5jdGlvbiBZKHQpe2lmKCExIT09bC5lbmFibGVkKXN3aXRjaCh0LnBvaW50ZXJUeXBlKXtjYXNlIm1vdXNlIjpjYXNlInBlbiI6IShmdW5jdGlvbiBlKHQpe2lmKCExIT09bC5lbmFibGVkKXN3aXRjaCh0LnByZXZlbnREZWZhdWx0KCkscCl7Y2FzZSBkLlJPVEFURTppZighMT09PWwuZW5hYmxlUm90YXRlKXJldHVybjshKGZ1bmN0aW9uIGUodCl7eC5zZXQodC5jbGllbnRYLHQuY2xpZW50WSksdy5zdWJWZWN0b3JzKHgsYikubXVsdGlwbHlTY2FsYXIobC5yb3RhdGVTcGVlZCk7dmFyIGU9bC5kb21FbGVtZW50O0woMipNYXRoLlBJKncueC9lLmNsaWVudEhlaWdodCksUCgyKk1hdGguUEkqdy55L2UuY2xpZW50SGVpZ2h0KSxiLmNvcHkoeCksbC51cGRhdGUoKX0pKHQpO2JyZWFrO2Nhc2UgZC5ET0xMWTppZighMT09PWwuZW5hYmxlWm9vbSlyZXR1cm47IShmdW5jdGlvbiBuKHQpe0Muc2V0KHQuY2xpZW50WCx0LmNsaWVudFkpLEEuc3ViVmVjdG9ycyhDLFQpLEEueT4wP3ooaygpKTpBLnk8MCYmRChrKCkpLFQuY29weShDKSxsLnVwZGF0ZSgpfSkodCk7YnJlYWs7Y2FzZSBkLlBBTjppZighMT09PWwuZW5hYmxlUGFuKXJldHVybjshKGZ1bmN0aW9uIGkodCl7TS5zZXQodC5jbGllbnRYLHQuY2xpZW50WSksRS5zdWJWZWN0b3JzKE0sUykubXVsdGlwbHlTY2FsYXIobC5wYW5TcGVlZCksUihFLngsRS55KSxTLmNvcHkoTSksbC51cGRhdGUoKX0pKHQpfX0pKHQpfX1mdW5jdGlvbiBYKHQpe3N3aXRjaCh0LnBvaW50ZXJUeXBlKXtjYXNlIm1vdXNlIjpjYXNlInBlbiI6IShmdW5jdGlvbiBlKHQpe2wuZG9tRWxlbWVudC5vd25lckRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIixZKSxsLmRvbUVsZW1lbnQub3duZXJEb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLFgpLCExIT09bC5lbmFibGVkJiYobC5kaXNwYXRjaEV2ZW50KGgpLHA9ZC5OT05FKX0pKCl9fWZ1bmN0aW9uICQodCl7ITE9PT1sLmVuYWJsZWR8fCExPT09bC5lbmFibGVab29tfHxwIT09ZC5OT05FJiZwIT09ZC5ST1RBVEV8fCh0LnByZXZlbnREZWZhdWx0KCksdC5zdG9wUHJvcGFnYXRpb24oKSxsLmRpc3BhdGNoRXZlbnQodSksKGZ1bmN0aW9uIGUodCl7dC5kZWx0YVk8MD9EKGsoKSk6dC5kZWx0YVk+MCYmeihrKCkpLGwudXBkYXRlKCl9KSh0KSxsLmRpc3BhdGNoRXZlbnQoaCkpfWZ1bmN0aW9uIEsodCl7ITEhPT1sLmVuYWJsZWQmJiExIT09bC5lbmFibGVQYW4mJihmdW5jdGlvbiBlKHQpe3ZhciBlPSExO3N3aXRjaCh0LmtleUNvZGUpe2Nhc2UgbC5rZXlzLlVQOlIoMCxsLmtleVBhblNwZWVkKSxlPSEwO2JyZWFrO2Nhc2UgbC5rZXlzLkJPVFRPTTpSKDAsLWwua2V5UGFuU3BlZWQpLGU9ITA7YnJlYWs7Y2FzZSBsLmtleXMuTEVGVDpSKGwua2V5UGFuU3BlZWQsMCksZT0hMDticmVhaztjYXNlIGwua2V5cy5SSUdIVDpSKC1sLmtleVBhblNwZWVkLDApLGU9ITB9ZSYmKHQucHJldmVudERlZmF1bHQoKSxsLnVwZGF0ZSgpKX0pKHQpfWZ1bmN0aW9uIFoodCl7aWYoITEhPT1sLmVuYWJsZWQpe3N3aXRjaCh0LnByZXZlbnREZWZhdWx0KCksdC50b3VjaGVzLmxlbmd0aCl7Y2FzZSAxOnN3aXRjaChsLnRvdWNoZXMuT05FKXtjYXNlIGtJdC5ST1RBVEU6aWYoITE9PT1sLmVuYWJsZVJvdGF0ZSlyZXR1cm47Rih0KSxwPWQuVE9VQ0hfUk9UQVRFO2JyZWFrO2Nhc2Uga0l0LlBBTjppZighMT09PWwuZW5hYmxlUGFuKXJldHVybjtWKHQpLHA9ZC5UT1VDSF9QQU47YnJlYWs7ZGVmYXVsdDpwPWQuTk9ORX1icmVhaztjYXNlIDI6c3dpdGNoKGwudG91Y2hlcy5UV08pe2Nhc2Uga0l0LkRPTExZX1BBTjppZighMT09PWwuZW5hYmxlWm9vbSYmITE9PT1sLmVuYWJsZVBhbilyZXR1cm47IShmdW5jdGlvbiBlKHQpe2wuZW5hYmxlWm9vbSYmVSh0KSxsLmVuYWJsZVBhbiYmVih0KX0pKHQpLHA9ZC5UT1VDSF9ET0xMWV9QQU47YnJlYWs7Y2FzZSBrSXQuRE9MTFlfUk9UQVRFOmlmKCExPT09bC5lbmFibGVab29tJiYhMT09PWwuZW5hYmxlUm90YXRlKXJldHVybjshKGZ1bmN0aW9uIG4odCl7bC5lbmFibGVab29tJiZVKHQpLGwuZW5hYmxlUm90YXRlJiZGKHQpfSkodCkscD1kLlRPVUNIX0RPTExZX1JPVEFURTticmVhaztkZWZhdWx0OnA9ZC5OT05FfWJyZWFrO2RlZmF1bHQ6cD1kLk5PTkV9cCE9PWQuTk9ORSYmbC5kaXNwYXRjaEV2ZW50KHUpfX1mdW5jdGlvbiBKKHQpe2lmKCExIT09bC5lbmFibGVkKXN3aXRjaCh0LnByZXZlbnREZWZhdWx0KCksdC5zdG9wUHJvcGFnYXRpb24oKSxwKXtjYXNlIGQuVE9VQ0hfUk9UQVRFOmlmKCExPT09bC5lbmFibGVSb3RhdGUpcmV0dXJuO2oodCksbC51cGRhdGUoKTticmVhaztjYXNlIGQuVE9VQ0hfUEFOOmlmKCExPT09bC5lbmFibGVQYW4pcmV0dXJuO0codCksbC51cGRhdGUoKTticmVhaztjYXNlIGQuVE9VQ0hfRE9MTFlfUEFOOmlmKCExPT09bC5lbmFibGVab29tJiYhMT09PWwuZW5hYmxlUGFuKXJldHVybjshKGZ1bmN0aW9uIGUodCl7bC5lbmFibGVab29tJiZXKHQpLGwuZW5hYmxlUGFuJiZHKHQpfSkodCksbC51cGRhdGUoKTticmVhaztjYXNlIGQuVE9VQ0hfRE9MTFlfUk9UQVRFOmlmKCExPT09bC5lbmFibGVab29tJiYhMT09PWwuZW5hYmxlUm90YXRlKXJldHVybjshKGZ1bmN0aW9uIG4odCl7bC5lbmFibGVab29tJiZXKHQpLGwuZW5hYmxlUm90YXRlJiZqKHQpfSkodCksbC51cGRhdGUoKTticmVhaztkZWZhdWx0OnA9ZC5OT05FfX1mdW5jdGlvbiBRKHQpeyExIT09bC5lbmFibGVkJiYobC5kaXNwYXRjaEV2ZW50KGgpLHA9ZC5OT05FKX1mdW5jdGlvbiB0dCh0KXshMSE9PWwuZW5hYmxlZCYmdC5wcmV2ZW50RGVmYXVsdCgpfWwuZG9tRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsdHQpLGwuZG9tRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyZG93biIscSksbC5kb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIndoZWVsIiwkKSxsLmRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsWiksbC5kb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIixRKSxsLmRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIixKKSx0aGlzLnVwZGF0ZSgpfTsoRld0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE5PdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1GV3Q7dmFyIFZXdD1mdW5jdGlvbih0LGUpe0ZXdC5jYWxsKHRoaXMsdCxlKSx0aGlzLnNjcmVlblNwYWNlUGFubmluZz0hMSx0aGlzLm1vdXNlQnV0dG9ucy5MRUZUPUFJdC5QQU4sdGhpcy5tb3VzZUJ1dHRvbnMuUklHSFQ9QUl0LlJPVEFURSx0aGlzLnRvdWNoZXMuT05FPWtJdC5QQU4sdGhpcy50b3VjaGVzLlRXTz1rSXQuRE9MTFlfUk9UQVRFfTsoVld0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE5PdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1WV3Q7Y2xhc3MgVVd0IGV4dGVuZHMgTk90e2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5fbGFzdE1lc2g9bnVsbCx0aGlzLl9jbG9jaz1uZXcgRWp0LHRoaXMuX2NhbnZhc1NpemU9bnVsbCx0aGlzLl9sYXllcnNDb25maWc9bnVsbCx0aGlzLl9ydW5Db2xvcj10fV9pc09iamVjdCh0KXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHQmJm51bGwhPXQmJiFBcnJheS5pc0FycmF5KHQpfV9hcHBseURlZmF1bHRzKHQsZSl7bGV0IG49e307Y29uc3QgaT1bdCxlXTtmb3IobGV0IHQ9MDt0PGkubGVuZ3RoO3QrKyl7Y29uc3QgZT1pW3RdO2ZvcihsZXQgdCBpbiBlKXtjb25zdCBpPXQgaW4gbjt0aGlzLl9pc09iamVjdChlW3RdKT9uW3RdPXRoaXMuX2FwcGx5RGVmYXVsdHMoblt0XXx8e30sZVt0XSk6aXx8KG5bdF09ZVt0XSl9fXJldHVybiBufV9jcmVhdGVMYXllcnMoKXtpZih0aGlzLl9sYXllcnNDb25maWcmJnRoaXMuX3NjZW5lJiZ0aGlzLl9sYXN0TWVzaCl7aWYodGhpcy5fbGF5ZXJzQ29uZmlnLnNob3dCb3VuZGluZ0JveCl7dmFyIHQ9bmV3IEFHdCh0aGlzLl9sYXN0TWVzaCxuZXcgcHp0KCJyZ2IoMCwgMCwgMjU1KSIpKTt0aGlzLl9zY2VuZS5hZGQodCl9aWYodGhpcy5fbGF5ZXJzQ29uZmlnLnNob3dBeGVzKXt2YXIgZT1uZXcgTkd0KDUpO3RoaXMuX3NjZW5lLmFkZChlKX19fXNldExheWVyc0NvbmZpZyh0KXt0aGlzLl9sYXllcnNDb25maWc9dGhpcy5fYXBwbHlEZWZhdWx0cyh0LHRoaXMuX2xheWVyc0NvbmZpZ3x8e30pfV9jcmVhdGVXb3JsZCh0LGUpe2lmKHRoaXMuaXNSZWFkeSgpKXJldHVybjt0aGlzLl9zY2VuZT1uZXcgTkh0O3ZhciBuPW5ldyBjV3RbdC5jYW1lcmEuY2xzXSh0LmNhbWVyYS5mb3YsdGhpcy5fY2FudmFzU2l6ZS53aWR0aC90aGlzLl9jYW52YXNTaXplLmhlaWdodCx0LmNhbWVyYS5uZWFyLHQuY2FtZXJhLmZhcik7dGhpcy5fY2FtZXJhPW47dmFyIGk9bmV3IEZXdChuLGUpO2NvbnN0IHI9aTtyLmxvb2tTcGVlZD0uNCxyLm1vdmVtZW50U3BlZWQ9MjAsci5ub0ZseT0hMCxyLmxvb2tWZXJ0aWNhbD0hMCxyLmNvbnN0cmFpblZlcnRpY2FsPSEwLHIudmVydGljYWxNaW49MSxyLnZlcnRpY2FsTWF4PTIsci5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLHRoaXMuX29uQ2FtZXJhUG9zaXRpb25DaGFuZ2UuYmluZCh0aGlzKSksdGhpcy5fY2FtZXJhQ29udHJvbHM9aSx0aGlzLl9yZW5kZXJlcj1uZXcgQUh0KHthbnRpYWxpYXM6ITB9KSx0aGlzLl9yZW5kZXJlci5zZXRQaXhlbFJhdGlvKHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvKSx0aGlzLl9yZW5kZXJlci5zZXRTaXplKHRoaXMuX2NhbnZhc1NpemUud2lkdGgsdGhpcy5fY2FudmFzU2l6ZS5oZWlnaHQpLHRoaXMuX3JlbmRlcmVyLnNldENsZWFyQ29sb3IoMTY3NzcyMTUsMSl9X2NsZWFyU2NlbmUoKXtmb3IoO3RoaXMuX3NjZW5lLmNoaWxkcmVuLmxlbmd0aD4wOyl0aGlzLl9zY2VuZS5yZW1vdmUodGhpcy5fc2NlbmUuY2hpbGRyZW5bMF0pfWdldFJlbmRlcmVyKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyfWdldENhbWVyYUNvbnRyb2xzKCl7cmV0dXJuIHRoaXMuX2NhbWVyYUNvbnRyb2xzfWlzUmVhZHkoKXtyZXR1cm4hIXRoaXMuX2NhbWVyYSYmISF0aGlzLl9jYW1lcmFDb250cm9sc31nZXRDYW1lcmFQb3NpdGlvbigpe3JldHVybntmYXI6dGhpcy5fY2FtZXJhLmZhcixwb3NpdGlvbjp0aGlzLl9jYW1lcmEucG9zaXRpb24uY2xvbmUoKSx0YXJnZXQ6dGhpcy5fY2FtZXJhQ29udHJvbHMudGFyZ2V0LmNsb25lKCl9fXNldENhbnZhc1NpemUodCl7dGhpcy5fY2FudmFzU2l6ZT10fWRyYXcoKXt0aGlzLl9hbmltYXRpb25GcmFtZUluZGV4JiZjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9hbmltYXRpb25GcmFtZUluZGV4KSx0aGlzLl9jYW1lcmEuYXNwZWN0PXRoaXMuX2NhbnZhc1NpemUud2lkdGgvdGhpcy5fY2FudmFzU2l6ZS5oZWlnaHQsdGhpcy5fY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKSx0aGlzLl9yZW5kZXJlci5zZXRTaXplKHRoaXMuX2NhbnZhc1NpemUud2lkdGgsdGhpcy5fY2FudmFzU2l6ZS5oZWlnaHQpO2NvbnN0IHQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9jbG9jay5nZXREZWx0YSgpO3RoaXMuX2NhbWVyYUNvbnRyb2xzLnVwZGF0ZShlKSx0aGlzLl9hbmltYXRpb25GcmFtZUluZGV4PXJlcXVlc3RBbmltYXRpb25GcmFtZSh0KSx0aGlzLl9yZW5kZXJlci5yZW5kZXIodGhpcy5fc2NlbmUsdGhpcy5fY2FtZXJhKX0uYmluZCh0aGlzKTt0KCl9dXBkYXRlU2NlbmUodCxlKXtsZXQgbj17fTsiY29uZmlnImluIHQmJnQuY29uZmlnJiYobj1KU09OLnBhcnNlKHQuY29uZmlnKSksdGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJiZWZvcmVVcGRhdGVTY2VuZSJ9KSxuPXRoaXMuX2FwcGx5RGVmYXVsdHMobix7Y2FtZXJhOntjbHM6IlBlcnNwZWN0aXZlQ2FtZXJhIixmb3Y6NzUsbmVhcjouMSxmYXI6MWUzfSxsaWdodHM6W3tjbHM6IkFtYmllbnRMaWdodCIsY29sb3I6IiNmZmZmZmYiLGludGVuc2l0eTouNzV9LHtjbHM6IkRpcmVjdGlvbmFsTGlnaHQiLGNvbG9yOiIjZmZmZmZmIixpbnRlbnNpdHk6Ljc1LHBvc2l0aW9uOlswLC0xLDJdfV19KSx0aGlzLl9jcmVhdGVXb3JsZChuLGUpLHRoaXMuX2NsZWFyU2NlbmUoKSx0aGlzLl9jcmVhdGVMaWdodHModGhpcy5fc2NlbmUsbiksdGhpcy5fY3JlYXRlR2VvbWV0cnkodCxuKSx0aGlzLl9jcmVhdGVMYXllcnMoKSx0aGlzLmRyYXcoKX1yZXNldFZpZXcodCl7aWYoIXRoaXMuaXNSZWFkeSgpKXJldHVybjtsZXQgZTt0aGlzLl9jYW1lcmFDb250cm9scy5yZXNldCgpLCF0JiZ0aGlzLl9sYXN0TWVzaCYmKGU9dGhpcy5fbGFzdE1lc2gpLGUmJih0aGlzLl9maXRPYmplY3RUb1ZpZXdwb3J0KGUpLHRoaXMuX2xhc3RNZXNoPWUpLHRoaXMuX2NhbWVyYUNvbnRyb2xzLnVwZGF0ZSgpfV9jcmVhdGVHZW9tZXRyeSh0LGUpe2NvbnN0IG49dC5tZXNoO24udmVydGljZXMmJm4uZmFjZXMmJm4uZmFjZXMubGVuZ3RoP3RoaXMuX2NyZWF0ZU1lc2gobixlKTp0aGlzLl9jcmVhdGVQb2ludENsb3VkKG4sZSl9X2NyZWF0ZVBvaW50Q2xvdWQodCxlKXtjb25zdCBuPXQudmVydGljZXMsaT10LmNvbG9ycztsZXQgcj17bWF0ZXJpYWw6e2NsczoiUG9pbnRzTWF0ZXJpYWwiLHNpemU6LjAwNX19O2kmJmkubGVuZ3RoPT1uLmxlbmd0aD9yLm1hdGVyaWFsLnZlcnRleENvbG9ycz0hMDpyLm1hdGVyaWFsLmNvbG9yPXRoaXMuX3J1bkNvbG9yO2NvbnN0IG89dGhpcy5fYXBwbHlEZWZhdWx0cyhlLHIpLGE9bmV3IFZ6dCxzPW5ldyBGbG9hdDMyQXJyYXkobi5mbGF0KCkpO2lmKGEuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGJ6dChzLDMpKSxpJiZpLmxlbmd0aD09bi5sZW5ndGgpe2NvbnN0IHQ9bmV3IEZsb2F0MzJBcnJheShpLmZsYXQoKSk7Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXT10W2VdLzI1NTthLnNldEF0dHJpYnV0ZSgiY29sb3IiLG5ldyBienQodCwzKSl9dmFyIGw9bmV3IE5GdChhLG5ldyBjV3Rbby5tYXRlcmlhbC5jbHNdKG8ubWF0ZXJpYWwpKTt0aGlzLl9zY2VuZS5hZGQobCksdGhpcy5fbGFzdE1lc2g9bH1zZXRDYW1lcmFWaWV3cG9pbnQodCxlLG4pe3RoaXMuX3NpbGVudD0hMCx0aGlzLl9jYW1lcmEuZmFyPWUsdGhpcy5fY2FtZXJhLnBvc2l0aW9uLnNldCh0LngsdC55LHQueiksdGhpcy5fY2FtZXJhLmxvb2tBdChuLmNsb25lKCkpLHRoaXMuX2NhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCksdGhpcy5fY2FtZXJhQ29udHJvbHMudGFyZ2V0PW4uY2xvbmUoKSx0aGlzLl9jYW1lcmFDb250cm9scy51cGRhdGUoKSx0aGlzLl9zaWxlbnQ9ITF9X29uQ2FtZXJhUG9zaXRpb25DaGFuZ2UodCl7dGhpcy5fc2lsZW50fHx0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImNhbWVyYVBvc2l0aW9uQ2hhbmdlIixldmVudDp0fSl9X2ZpdE9iamVjdFRvVmlld3BvcnQodCl7Y29uc3QgZT1uZXcgJE90LG49bmV3IHFPdCxpPW5ldyBxT3Q7ZS5zZXRGcm9tT2JqZWN0KHQpLGUuZ2V0Q2VudGVyKG4pLGUuZ2V0U2l6ZShpKTtjb25zdCByPU1hdGgubWF4KGkueCxpLnksaS56KSxvPXRoaXMuX2NhbWVyYS5mb3YqKE1hdGguUEkvMTgwKTtsZXQgYT0xLjI1Kk1hdGguYWJzKHIvKDIqTWF0aC50YW4oby8yKSkpO2NvbnN0IHM9ZS5taW4uejt0aGlzLnNldENhbWVyYVZpZXdwb2ludCh7eDpuLngseTpuLnksejphfSwzKihzPDA/LXMrYTphLXMpLG4pfV9jcmVhdGVNZXNoKHQsZSl7Y29uc3Qgbj10LnZlcnRpY2VzLGk9dC5mYWNlcyxyPXQuY29sb3JzLG89dGhpcy5fYXBwbHlEZWZhdWx0cyhlLHttYXRlcmlhbDp7Y2xzOiJNZXNoU3RhbmRhcmRNYXRlcmlhbCIsY29sb3I6IiNhMGEwYTAiLHJvdWdobmVzczoxLG1ldGFsbmVzczowfX0pLGE9bmV3IFZ6dCxzPW5ldyBGbG9hdDMyQXJyYXkobi5mbGF0KCkpO2Euc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGJ6dChzLDMpKTtjb25zdCBsPW5ldyBVaW50MTZBcnJheShpLmZsYXQoKSk7aWYociYmci5sZW5ndGgpe2NvbnN0IHQ9ci5mbGF0KCk7Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXT10W2VdLzI1NTthLnNldEF0dHJpYnV0ZSgiY29sb3IiLG5ldyBienQobmV3IEZsb2F0MzJBcnJheSh0KSwzKSksby5tYXRlcmlhbD1vLm1hdGVyaWFsfHx7fSxvLm1hdGVyaWFsLnZlcnRleENvbG9ycz0hMH1hLmNlbnRlcigpLGEuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCksYS5zZXRJbmRleChuZXcgYnp0KGwsMSkpLGEuY29tcHV0ZVZlcnRleE5vcm1hbHMoKTtsZXQgYz1uZXcgb0R0KGEsbmV3IGNXdFtvLm1hdGVyaWFsLmNsc10oby5tYXRlcmlhbCkpO2MuY2FzdFNoYWRvdz0hMCxjLnJlY2VpdmVTaGFkb3c9ITAsdGhpcy5fc2NlbmUuYWRkKGMpLHRoaXMuX2xhc3RNZXNoPWN9X2NyZWF0ZUxpZ2h0cyh0LGUpe2ZvcihsZXQgbj0wO248ZS5saWdodHMubGVuZ3RoO24rKyl7Y29uc3QgaT1lLmxpZ2h0c1tuXTtsZXQgcj1uZXcgY1d0W2kuY2xzXShpLmNvbG9yLGkuaW50ZW5zaXR5KTtpLnBvc2l0aW9uJiZyLnBvc2l0aW9uLnNldChpLnBvc2l0aW9uWzBdLGkucG9zaXRpb25bMV0saS5wb3NpdGlvblsyXSksdC5hZGQocil9fX1sZXQgald0PWNsYXNzIGV4dGVuZHModHIoeWUpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5zZWxlY3RlZFZpZXc9ImFsbCIsdGhpcy5hY3RpdmU9ITEsdGhpcy5fY29sb3JTY2FsZUZ1bmN0aW9uPUFPLHRoaXMuX3N0ZXBzPVtdLHRoaXMuX21lc2hWaWV3ZXJBdHRhY2hlZD0hMSx0aGlzLl9jYW1lcmFQb3NpdGlvbkluaXRpYWxpemVkPSExLHRoaXMuX2lzTWVzaExvYWRpbmc9ITF9Z2V0IF9ydW5Db2xvcigpe3JldHVybiB0aGlzLl9jb2xvclNjYWxlRnVuY3Rpb24odGhpcy5ydW4pfWNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLl9kYXRhUHJvdmlkZXI9bmV3IFRJdCh0aGlzLnJlcXVlc3RNYW5hZ2VyKTtjb25zdCB0PW5ldyBVV3QodGhpcy5fcnVuQ29sb3IpO3QuYWRkRXZlbnRMaXN0ZW5lcigiYmVmb3JlVXBkYXRlU2NlbmUiLHRoaXMuX3VwZGF0ZUNhbnZhc1NpemUuYmluZCh0aGlzKSksdC5hZGRFdmVudExpc3RlbmVyKCJjYW1lcmFQb3NpdGlvbkNoYW5nZSIsdGhpcy5fb25DYW1lcmFQb3NpdGlvbkNoYW5nZS5iaW5kKHRoaXMpKSx0aGlzLl9tZXNoVmlld2VyPXR9cmVsb2FkKCl7dGhpcy5hY3RpdmUmJnRoaXMuX2RhdGFQcm92aWRlciYmKHRoaXMuX2lzTWVzaExvYWRpbmc9ITAsdGhpcy5fZGF0YVByb3ZpZGVyLnJlbG9hZCh0aGlzLnJ1bix0aGlzLnRhZyx0aGlzLnNhbXBsZSkudGhlbigodD0+e3QmJih0aGlzLl9zdGVwcz10LHRoaXMuX3N0ZXBJbmRleD10Lmxlbmd0aC0xKX0pKS5jYXRjaCgodD0+e2lmKCF0fHwhdC5jb2RlfHx0LmNvZGUhPVNJdC5DQU5DRUxMRUQpdGhyb3cgdD10fHwiUmVzcG9uc2UgcHJvY2Vzc2luZyBmYWlsZWQuIixuZXcgRXJyb3IodCl9KSkpfV91cGRhdGVTY2VuZSgpe2NvbnN0IHQ9dGhpcy5fY3VycmVudFN0ZXA7dCYmdC5tZXNoJiYodGhpcy5fbWVzaFZpZXdlci51cGRhdGVTY2VuZSh0LHRoaXMpLHRoaXMuX2NhbWVyYVBvc2l0aW9uSW5pdGlhbGl6ZWR8fCh0aGlzLl9tZXNoVmlld2VyLnJlc2V0VmlldygpLHRoaXMuX2NhbWVyYVBvc2l0aW9uSW5pdGlhbGl6ZWQ9ITApLHRoaXMuX21lc2hWaWV3ZXJBdHRhY2hlZHx8KHRoaXMuc2hhZG93Um9vdC5hcHBlbmRDaGlsZCh0aGlzLl9tZXNoVmlld2VyLmdldFJlbmRlcmVyKCkuZG9tRWxlbWVudCksdGhpcy5fbWVzaFZpZXdlckF0dGFjaGVkPSEwKSl9X2RlYm91bmNlZEZldGNoTWVzaCgpe3RoaXMuZGVib3VuY2UoImZldGNoTWVzaCIsKCgpPT50aGlzLl9tYXliZUZldGNoTWVzaCgpKSwxMDApfV9tYXliZUZldGNoTWVzaCgpe3JldHVybiBuKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD10aGlzLl9jdXJyZW50U3RlcDtpZih0JiYhdC5tZXNoJiYhdC5tZXNoRmV0Y2hpbmcpe3QubWVzaEZldGNoaW5nPSEwLHRoaXMuX2lzTWVzaExvYWRpbmc9ITA7dHJ5e2NvbnN0IGU9eWllbGQgdGhpcy5fZGF0YVByb3ZpZGVyLmZldGNoRGF0YSh0LHRoaXMucnVuLHRoaXMudGFnLHRoaXMuc2FtcGxlKTt0Lm1lc2g9ZVswXSx0aGlzLm5vdGlmeVBhdGgoIl9jdXJyZW50U3RlcC5tZXNoIil9Y2F0Y2godCl7aWYoIXR8fCF0LmNvZGV8fHQuY29kZSE9U0l0LkNBTkNFTExFRCl0aHJvdyB0PXR8fCJSZXNwb25zZSBwcm9jZXNzaW5nIGZhaWxlZC4iLG5ldyBFcnJvcih0KX1maW5hbGx5e3RoaXMuX2lzTWVzaExvYWRpbmc9ITEsdC5tZXNoRmV0Y2hpbmc9ITF9fX0pKX1fb25DYW1lcmFQb3NpdGlvbkNoYW5nZSgpe2lmKCF0aGlzLl9tZXNoVmlld2VyLmlzUmVhZHkoKSlyZXR1cm47Y29uc3QgdD1uZXcgQ3VzdG9tRXZlbnQoImNhbWVyYS1wb3NpdGlvbi1jaGFuZ2UiLHtkZXRhaWw6dGhpcy5fbWVzaFZpZXdlci5nZXRDYW1lcmFQb3NpdGlvbigpfSk7dGhpcy5kaXNwYXRjaEV2ZW50KHQpfXNldENhbWVyYVZpZXdwb2ludCh0LGUsbil7dGhpcy5fbWVzaFZpZXdlci5zZXRDYW1lcmFWaWV3cG9pbnQodCxlLG4pfV91cGRhdGVDYW52YXNTaXplKCl7Y29uc3QgdD10aGlzLm9mZnNldFdpZHRoLGU9dCxuPXRoaXMuJCQoIi50Zi1tZXNoLWxvYWRlci1oZWFkZXIiKS5vZmZzZXRIZWlnaHQ7dGhpcy5fbWVzaFZpZXdlci5zZXRDYW52YXNTaXplKHt3aWR0aDp0LGhlaWdodDplLW59KX1yZWRyYXcoKXt0aGlzLl91cGRhdGVDYW52YXNTaXplKCksdGhpcy5pc0Nvbm5lY3RlZCYmdGhpcy5fbWVzaFZpZXdlci5kcmF3KCl9X2hhc0F0TGVhc3RPbmVTdGVwKHQpe3JldHVybiEhdCYmdC5sZW5ndGg+MH1faGFzTXVsdGlwbGVTdGVwcyh0KXtyZXR1cm4hIXQmJnQubGVuZ3RoPjF9Z2V0IF9jdXJyZW50U3RlcCgpe3JldHVybiB0aGlzLl9zdGVwc1t0aGlzLl9zdGVwSW5kZXhdfHxudWxsfWdldCBfc3RlcFZhbHVlKCl7Y29uc3QgdD10aGlzLl9jdXJyZW50U3RlcDtyZXR1cm4gdD90LnN0ZXA6MH1nZXQgX2N1cnJlbnRXYWxsVGltZSgpe2NvbnN0IHQ9dGhpcy5fY3VycmVudFN0ZXA7cmV0dXJuIHQ/T08odC53YWxsX3RpbWUpOiIifV9nZXRNYXhTdGVwSW5kZXgodCl7cmV0dXJuIHQubGVuZ3RoLTF9X2dldFNhbXBsZVRleHQodCl7cmV0dXJuIFN0cmluZyh0KzEpfV9oYXNNdWx0aXBsZVNhbXBsZXModCl7cmV0dXJuIHQ+MX1fdXBkYXRlVmlldygpe3RoaXMuX21lc2hWaWV3ZXImJiJhbGwiPT10aGlzLnNlbGVjdGVkVmlldyYmdGhpcy5fbWVzaFZpZXdlci5yZXNldFZpZXcoKX10b0xvY2FsZVN0cmluZ18odCl7cmV0dXJuIHQudG9Mb2NhbGVTdHJpbmcoKX19O2pXdC50ZW1wbGF0ZT1fZWAKICAgIDx0Zi1jYXJkLWhlYWRpbmcgY29sb3I9IltbX3J1bkNvbG9yXV0iIGNsYXNzPSJ0Zi1tZXNoLWxvYWRlci1oZWFkZXIiPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc011bHRpcGxlU2FtcGxlcyhvZlNhbXBsZXMpXV0iPgogICAgICAgIDxkaXY+c2FtcGxlOiBbW19nZXRTYW1wbGVUZXh0KHNhbXBsZSldXSBvZiBbW29mU2FtcGxlc11dPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaGFzQXRMZWFzdE9uZVN0ZXAoX3N0ZXBzKV1dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLXJvdyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIj4KICAgICAgICAgICAgc3RlcAogICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQiCiAgICAgICAgICAgICAgPltbdG9Mb2NhbGVTdHJpbmdfKF9zdGVwVmFsdWUpXV08L3NwYW4KICAgICAgICAgICAgPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIGhlYWRpbmctcmlnaHQiPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2N1cnJlbnRXYWxsVGltZV1dIj4KICAgICAgICAgICAgICBbW19jdXJyZW50V2FsbFRpbWVdXQogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJsYWJlbCByaWdodCI+CiAgICAgICAgICAgIDxwYXBlci1zcGlubmVyLWxpdGUgYWN0aXZlIGhpZGRlbiQ9IltbIV9pc01lc2hMb2FkaW5nXV0iPgogICAgICAgICAgICA8L3BhcGVyLXNwaW5uZXItbGl0ZT4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc011bHRpcGxlU3RlcHMoX3N0ZXBzKV1dIj4KICAgICAgICA8ZGl2PgogICAgICAgICAgPHBhcGVyLXNsaWRlcgogICAgICAgICAgICBpZD0ic3RlcHMiCiAgICAgICAgICAgIGltbWVkaWF0ZS12YWx1ZT0ie3tfc3RlcEluZGV4fX0iCiAgICAgICAgICAgIG1heD0iW1tfZ2V0TWF4U3RlcEluZGV4KF9zdGVwcyldXSIKICAgICAgICAgICAgbWF4LW1hcmtlcnM9IltbX2dldE1heFN0ZXBJbmRleChfc3RlcHMpXV0iCiAgICAgICAgICAgIHNuYXBzCiAgICAgICAgICAgIHN0ZXA9IjEiCiAgICAgICAgICAgIHZhbHVlPSJ7e19zdGVwSW5kZXh9fSIKICAgICAgICAgID48L3BhcGVyLXNsaWRlcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvdGYtY2FyZC1oZWFkaW5nPgogICAgPHN0eWxlPgogICAgICBwYXBlci1zbGlkZXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIG1hcmdpbi1sZWZ0OiAxcHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxcHg7CiAgICAgIH0KICAgICAgLnRmLW1lc2gtbG9hZGVyLWhlYWRlciB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgaGVpZ2h0OiAxMDVweDsKICAgICAgfQogICAgICBbaGlkZGVuXSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLGpXdC5wcm90b3R5cGUsInJ1biIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxqV3QucHJvdG90eXBlLCJ0YWciLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXJ9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sald0LnByb3RvdHlwZSwic2FtcGxlIix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLGpXdC5wcm90b3R5cGUsIm9mU2FtcGxlcyIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxqV3QucHJvdG90eXBlLCJzZWxlY3RlZFZpZXciLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxqV3QucHJvdG90eXBlLCJhY3RpdmUiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsaHIpXSxqV3QucHJvdG90eXBlLCJyZXF1ZXN0TWFuYWdlciIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixVV3QpXSxqV3QucHJvdG90eXBlLCJfbWVzaFZpZXdlciIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixUSXQpXSxqV3QucHJvdG90eXBlLCJfZGF0YVByb3ZpZGVyIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLGpXdC5wcm90b3R5cGUsIl9jb2xvclNjYWxlRnVuY3Rpb24iLHZvaWQgMCksdChbbyh7dHlwZTpBcnJheSxub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSxqV3QucHJvdG90eXBlLCJfc3RlcHMiLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXIsbm90aWZ5OiEwfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLGpXdC5wcm90b3R5cGUsIl9zdGVwSW5kZXgiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxqV3QucHJvdG90eXBlLCJfbWVzaFZpZXdlckF0dGFjaGVkIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sald0LnByb3RvdHlwZSwiX2NhbWVyYVBvc2l0aW9uSW5pdGlhbGl6ZWQiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxqV3QucHJvdG90eXBlLCJfaXNNZXNoTG9hZGluZyIsdm9pZCAwKSx0KFtzKCJydW4iKSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxqV3QucHJvdG90eXBlLCJfcnVuQ29sb3IiLG51bGwpLHQoW2EoInJ1biIsInRhZyIsImFjdGl2ZSIsIl9kYXRhUHJvdmlkZXIiLCJfbWVzaFZpZXdlciIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sald0LnByb3RvdHlwZSwicmVsb2FkIixudWxsKSx0KFthKCJfY3VycmVudFN0ZXAuKiIsIl9tZXNoVmlld2VyIiksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pLGUoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxqV3QucHJvdG90eXBlLCJfdXBkYXRlU2NlbmUiLG51bGwpLHQoW2EoIl9jdXJyZW50U3RlcCIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sald0LnByb3RvdHlwZSwiX2RlYm91bmNlZEZldGNoTWVzaCIsbnVsbCksdChbcygiX3N0ZXBzIiwiX3N0ZXBJbmRleCIpLGUoImRlc2lnbjp0eXBlIixPYmplY3QpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGpXdC5wcm90b3R5cGUsIl9jdXJyZW50U3RlcCIsbnVsbCksdChbcygiX2N1cnJlbnRTdGVwIiksZSgiZGVzaWduOnR5cGUiLE51bWJlciksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sald0LnByb3RvdHlwZSwiX3N0ZXBWYWx1ZSIsbnVsbCksdChbcygiX2N1cnJlbnRTdGVwIiksZSgiZGVzaWduOnR5cGUiLFN0cmluZyksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sald0LnByb3RvdHlwZSwiX2N1cnJlbnRXYWxsVGltZSIsbnVsbCksdChbYSgic2VsZWN0ZWRWaWV3IiksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pLGUoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxqV3QucHJvdG90eXBlLCJfdXBkYXRlVmlldyIsbnVsbCksald0PXQoW2koInRmLW1lc2gtbG9hZGVyIildLGpXdCk7bGV0IEdXdD1jbGFzcyBleHRlbmRzIHlle2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnJlbG9hZE9uUmVhZHk9ITAsdGhpcy5fdGFnRmlsdGVyPSIuKiIsdGhpcy5fc2VsZWN0ZWRWaWV3PSJhbGwiLHRoaXMuX3JlcXVlc3RNYW5hZ2VyPW5ldyBocix3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIiwoKCk9Pnt0aGlzLl9oYW5kbGVXaW5kb3dSZXNpemUoKX0pLCExKSx0aGlzLnJlbG9hZE9uUmVhZHkmJnRoaXMucmVsb2FkKCl9X2dldEFsbENoaWxkcmVuKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoInRmLW1lc2gtbG9hZGVyIikpfV9vbkNhbWVyYVBvc2l0aW9uQ2hhbmdlZCh0KXsic2hhcmUiPT10aGlzLl9zZWxlY3RlZFZpZXcmJnRoaXMuX2dldEFsbENoaWxkcmVuKCkuZm9yRWFjaCgoZT0+e3QudGFyZ2V0IT1lJiZlLnNldENhbWVyYVZpZXdwb2ludCh0LmRldGFpbC5wb3NpdGlvbix0LmRldGFpbC5mYXIsdC5kZXRhaWwudGFyZ2V0KX0pKX1fc2hvdWxkT3Blbih0KXtyZXR1cm4gdDw9Mn1yZWxvYWQoKXt0aGlzLl9mZXRjaFRhZ3MoKS50aGVuKHRoaXMuX3JlbG9hZE1lc2hlcy5iaW5kKHRoaXMpKX1faGFuZGxlV2luZG93UmVzaXplKCl7dGhpcy5fZ2V0QWxsQ2hpbGRyZW4oKS5mb3JFYWNoKCh0PT57dC5yZWRyYXcoKX0pKX1fZmV0Y2hUYWdzKCl7Y29uc3QgdD1ncigpLnBsdWdpblJvdXRlKCJtZXNoIiwiL3RhZ3MiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKCh0PT57aWYod2UuaXNFcXVhbCh0LHRoaXMuX3J1blRvVGFnSW5mbykpcmV0dXJuO2NvbnN0IGU9b3Iod2UubWFwVmFsdWVzKHQsKHQ9Pk9iamVjdC5rZXlzKHQpKSkpO3RoaXMuX2RhdGFOb3RGb3VuZD0wPT09ZS5sZW5ndGgsdGhpcy5fcnVuVG9UYWdJbmZvPXR9KSl9X3JlbG9hZE1lc2hlcygpe3RoaXMuX2dldEFsbENoaWxkcmVuKCkuZm9yRWFjaCgodD0+e3QucmVsb2FkKCl9KSl9Z2V0IF9jYXRlZ29yaWVzKCl7dmFyIHQ9dGhpcy5fcnVuVG9UYWdJbmZvLGU9dGhpcy5fc2VsZWN0ZWRSdW5zLG49dGhpcy5fdGFnRmlsdGVyO2Z1bmN0aW9uIGkoZSl7Y29uc3Qgbj10W2UucnVuXVtlLnRhZ10uc2FtcGxlcztyZXR1cm4gd2UucmFuZ2UobikubWFwKCh0PT5PYmplY3QuYXNzaWduKHt9LGUse3NhbXBsZTp0LG9mU2FtcGxlczpufSkpKX1yZXR1cm4gU3Iod2UubWFwVmFsdWVzKHQsKHQ9Pk9iamVjdC5rZXlzKHQpKSksZSxuKS5tYXAoKHQ9Pk9iamVjdC5hc3NpZ24oe30sdCx7aXRlbXM6W10uY29uY2F0LmFwcGx5KFtdLHQuaXRlbXMubWFwKGkpKX0pKSl9fTtHV3QudGVtcGxhdGU9X2VgCiAgICA8dGYtZGFzaGJvYXJkLWxheW91dD4KICAgICAgPGRpdiBzbG90PSJzaWRlYmFyIiBjbGFzcz0iYWxsLWNvbnRyb2xzIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZXR0aW5ncyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24gdmlldy1jb250cm9sIj4KICAgICAgICAgICAgPGgzIGNsYXNzPSJ0aXRsZSI+UG9pbnQgb2YgdmlldzwvaDM+CiAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWdyb3VwCiAgICAgICAgICAgICAgICBpZD0idmlldy1yYWRpby1ncm91cCIKICAgICAgICAgICAgICAgIHNlbGVjdGVkPSJ7e19zZWxlY3RlZFZpZXd9fSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIGlkPSJhbGwtcmFkaW8tYnV0dG9uIiBuYW1lPSJhbGwiPgogICAgICAgICAgICAgICAgICBEaXNwbGF5IGFsbCBwb2ludHMKICAgICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgICAgICAgPHBhcGVyLXRvb2x0aXAKICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICBmb3I9ImFsbC1yYWRpby1idXR0b24iCiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uPSJyaWdodCIKICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICBab29tIGFuZCBjZW50ZXIgY2FtZXJhIHRvIGRpc3BsYXkgYWxsIHBvaW50cyBhdCBvbmNlLiBOb3RlLAogICAgICAgICAgICAgICAgICB0aGF0IHNvbWUgcG9pbnRzIGNvdWxkIGJlIHRvbyBmYXIgKGkuZS4gdG9vIHNtYWxsKSB0byBiZQogICAgICAgICAgICAgICAgICB2aXNpYmxlLgogICAgICAgICAgICAgICAgPC9wYXBlci10b29sdGlwPgogICAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBpZD0idXNlci1yYWRpby1idXR0b24iIG5hbWU9InVzZXIiPgogICAgICAgICAgICAgICAgICBDdXJyZW50IHZpZXcKICAgICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgICAgICAgPHBhcGVyLXRvb2x0aXAKICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICBmb3I9InVzZXItcmFkaW8tYnV0dG9uIgogICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgS2VlcCBjdXJyZW50IGNhbWVyYSBwb3NpdGlvbiBhbmQgem9vbSBsZXZlbC4KICAgICAgICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24gaWQ9InNoYXJlLXJhZGlvLWJ1dHRvbiIgbmFtZT0ic2hhcmUiPgogICAgICAgICAgICAgICAgICBTaGFyZSB2aWV3cG9pbnQKICAgICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgICAgICAgPHBhcGVyLXRvb2x0aXAKICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICBmb3I9InNoYXJlLXJhZGlvLWJ1dHRvbiIKICAgICAgICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIFNoYXJlIHZpZXdwb2ludCBhbW9uZyBhbGwgY2FtZXJhcy4KICAgICAgICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgICA8L3BhcGVyLXJhZGlvLWdyb3VwPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiBydW5zLXNlbGVjdG9yIj4KICAgICAgICAgIDx0Zi1ydW5zLXNlbGVjdG9yIHNlbGVjdGVkLXJ1bnM9Int7X3NlbGVjdGVkUnVuc319Ij4KICAgICAgICAgIDwvdGYtcnVucy1zZWxlY3Rvcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgc2xvdD0iY2VudGVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtd2FybmluZyI+CiAgICAgICAgICAgIDxoMz5ObyBwb2ludCBjbG91ZCBkYXRhIHdhcyBmb3VuZC48L2gzPgogICAgICAgICAgICA8cD5Qcm9iYWJsZSBjYXVzZXM6PC9wPgogICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgWW91IGhhdmVu4oCZdCB3cml0dGVuIGFueSBwb2ludCBjbG91ZCBkYXRhIHRvIHlvdXIgZXZlbnQgZmlsZXMuCiAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICA8bGk+VGVuc29yQm9hcmQgY2Fu4oCZdCBmaW5kIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgPC91bD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvCiAgICAgICAgICAgICAgYWRkIGRhdGEgYW5kIHNldCB1cCB5b3VyIGV2ZW50IGZpbGVzLCBjaGVjayBvdXQgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCIKICAgICAgICAgICAgICAgID5SRUFETUU8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiCiAgICAgICAgICAgICAgICA+VGVuc29yQm9hcmQgdHV0b3JpYWw8L2EKICAgICAgICAgICAgICA+LgogICAgICAgICAgICA8L3A+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3UgdGhpbmsgVGVuc29yQm9hcmQgaXMgY29uZmlndXJlZCBwcm9wZXJseSwgcGxlYXNlIHNlZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQjbXktdGVuc29yYm9hcmQtaXNudC1zaG93aW5nLWFueS1kYXRhLXdoYXRzLXdyb25nIgogICAgICAgICAgICAgICAgPnRoZSBzZWN0aW9uIG9mIHRoZSBSRUFETUUgZGV2b3RlZCB0byBtaXNzaW5nIGRhdGEgcHJvYmxlbXM8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuCiAgICAgICAgICAgIDwvcD4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPHRmLXRhZy1maWx0ZXJlciB0YWctZmlsdGVyPSJ7e190YWdGaWx0ZXJ9fSI+PC90Zi10YWctZmlsdGVyZXI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jYXRlZ29yaWVzXV0iIGFzPSJjYXRlZ29yeSI+CiAgICAgICAgICAgIDx0Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldwogICAgICAgICAgICAgIGNhdGVnb3J5PSJbW2NhdGVnb3J5XV0iCiAgICAgICAgICAgICAgaW5pdGlhbC1vcGVuZWQ9IltbX3Nob3VsZE9wZW4oaW5kZXgpXV0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGYtbWVzaC1sb2FkZXIKICAgICAgICAgICAgICAgICAgYWN0aXZlPSJbW2FjdGl2ZV1dIgogICAgICAgICAgICAgICAgICBzZWxlY3RlZC12aWV3PSJbW19zZWxlY3RlZFZpZXddXSIKICAgICAgICAgICAgICAgICAgcnVuPSJbW2l0ZW0ucnVuXV0iCiAgICAgICAgICAgICAgICAgIHRhZz0iW1tpdGVtLnRhZ11dIgogICAgICAgICAgICAgICAgICBzYW1wbGU9IltbaXRlbS5zYW1wbGVdXSIKICAgICAgICAgICAgICAgICAgb2Ytc2FtcGxlcz0iW1tpdGVtLm9mU2FtcGxlc11dIgogICAgICAgICAgICAgICAgICByZXF1ZXN0LW1hbmFnZXI9IltbX3JlcXVlc3RNYW5hZ2VyXV0iCiAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Zi1tZXNoLWxvYWRlci1jb250YWluZXIiCiAgICAgICAgICAgICAgICAgIG9uLWNhbWVyYS1wb3NpdGlvbi1jaGFuZ2U9Il9vbkNhbWVyYVBvc2l0aW9uQ2hhbmdlZCIKICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDwvdGYtbWVzaC1sb2FkZXI+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldz4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICA8L3RmLWRhc2hib2FyZC1sYXlvdXQ+CgogICAgPHN0eWxlIGluY2x1ZGU9ImRhc2hib2FyZC1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgLm5vLWRhdGEtd2FybmluZyB7CiAgICAgICAgbWF4LXdpZHRoOiA1NDBweDsKICAgICAgICBtYXJnaW46IDgwcHggYXV0byAwIGF1dG87CiAgICAgIH0KICAgICAgcGFwZXItcmFkaW8tYnV0dG9uIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwYWRkaW5nOiA1cHg7CiAgICAgIH0KICAgICAgLnNpZGViYXItc2VjdGlvbiBoMyB7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDVweDsKICAgICAgfQoKICAgICAgLnJ1bnMtc2VsZWN0b3IgewogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgfQoKICAgICAgdGYtcnVucy1zZWxlY3RvciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgfQoKICAgICAgLnZpZXctY29udHJvbCB7CiAgICAgICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgLnZpZXctY29udHJvbCBoMy50aXRsZSB7CiAgICAgICAgcGFkZGluZy10b3A6IDE2cHg7CiAgICAgICAgcGFkZGluZy1ib3R0b206IDE2cHg7CiAgICAgIH0KCiAgICAgIC5hbGxjb250cm9scyAudmlldy1jb250cm9sIHBhcGVyLXJhZGlvLWdyb3VwIHsKICAgICAgICBtYXJnaW4tdG9wOiA1cHg7CiAgICAgIH0KICAgICAgLyogTGF5b3V0IG11c3QgYmUgaG9yaXpvbnRhbCwgaS5lLiBpdGVtcyBhcnJhbmdlZCBpbiBhIHJvdy4gSWYgaXRlbXMgY2Fubm90IGZpdCBpbiBhIHJvdywKICAgICAgICogdGhleSBzaG91bGQgYmUgbW92ZWQgdG8gbmV4dCBsaW5lLiBBbGwgaXRlbXMgbXVzdCBiZSBzcXVhcmUgYXQgYWxsIHRpbWVzLiBNaW5pbXVtIHNpemUgb2YKICAgICAgICogdGhlIGl0ZW0gaXMgNDgwcHguIFRoaXMgbWVhbnMgdGhhdCBtYXhpbXVtIHNpemUgb2YgdGhlIGl0ZW0gbXVzdCBiZSA0ODBweCArIDQ3OXB4ID0gOTU5cHguCiAgICAgICAqICovCiAgICAgIC5ob3Jpem9udGFsIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICB9CiAgICAgIHRmLW1lc2gtbG9hZGVyIHsKICAgICAgICB3aWR0aDogNDgwcHg7CiAgICAgICAgZmxleC1iYXNpczogNDgwcHg7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICA8L3N0eWxlPgogIGAsdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxHV3QucHJvdG90eXBlLCJyZWxvYWRPblJlYWR5Iix2b2lkIDApLHQoW28oe3R5cGU6QXJyYXl9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSxHV3QucHJvdG90eXBlLCJfc2VsZWN0ZWRSdW5zIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLEdXdC5wcm90b3R5cGUsIl9ydW5Ub1RhZ0luZm8iLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxHV3QucHJvdG90eXBlLCJfZGF0YU5vdEZvdW5kIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLEdXdC5wcm90b3R5cGUsIl90YWdGaWx0ZXIiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLEdXdC5wcm90b3R5cGUsIl9zZWxlY3RlZFZpZXciLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sR1d0LnByb3RvdHlwZSwiX3JlcXVlc3RNYW5hZ2VyIix2b2lkIDApLHQoW3MoIl9ydW5Ub1RhZ0luZm8iLCJfc2VsZWN0ZWRSdW5zIiwiX3RhZ0ZpbHRlciIpLGUoImRlc2lnbjp0eXBlIixBcnJheSksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sR1d0LnByb3RvdHlwZSwiX2NhdGVnb3JpZXMiLG51bGwpLEdXdD10KFtpKCJtZXNoLWRhc2hib2FyZCIpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLEdXdCk7bGV0IFdXdD1jbGFzcyBleHRlbmRzIHlle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9leHBhbmRlZD0hMSx0aGlzLl9ydW5Ub1ByQ3VydmVFbnRyeT17fSx0aGlzLl9wcmV2aW91c1J1blRvUHJDdXJ2ZUVudHJ5PXt9LHRoaXMuX2NvbG9yU2NhbGVGdW5jdGlvbj17c2NhbGU6QU99LHRoaXMuX2NhbmNlbGxlcj1uZXcgTk8sdGhpcy5feENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZD0oKT0+e2NvbnN0IHQ9bmV3IG5fdC5TY2FsZXMuTGluZWFyO3JldHVybntzY2FsZTp0LGF4aXM6bmV3IG5fdC5BeGVzLk51bWVyaWModCwiYm90dG9tIiksYWNjZXNzb3I6dD0+dC5yZWNhbGx9fSx0aGlzLl95VmFsdWVBY2Nlc3Nvcj10PT50LnByZWNpc2lvbix0aGlzLl90b29sdGlwQ29sdW1ucz0oKCk9Pntjb25zdCB0PW9fdCg0KSxlPWU9PmlzTmFOKGUpPyJOYU4iOnQoZSk7cmV0dXJuW3t0aXRsZToiUnVuIixldmFsdWF0ZTp0PT50LmRhdGFzZXQubWV0YWRhdGEoKS5uYW1lfSx7dGl0bGU6IlRocmVzaG9sZCIsZXZhbHVhdGU6dD0+ZSh0LmRhdHVtLnRocmVzaG9sZHMpfSx7dGl0bGU6IlByZWNpc2lvbiIsZXZhbHVhdGU6dD0+ZSh0LmRhdHVtLnByZWNpc2lvbil9LHt0aXRsZToiUmVjYWxsIixldmFsdWF0ZTp0PT5lKHQuZGF0dW0ucmVjYWxsKX0se3RpdGxlOiJUUCIsZXZhbHVhdGU6dD0+dC5kYXR1bS50cnVlX3Bvc2l0aXZlc30se3RpdGxlOiJGUCIsZXZhbHVhdGU6dD0+dC5kYXR1bS5mYWxzZV9wb3NpdGl2ZXN9LHt0aXRsZToiVE4iLGV2YWx1YXRlOnQ9PnQuZGF0dW0udHJ1ZV9uZWdhdGl2ZXN9LHt0aXRsZToiRk4iLGV2YWx1YXRlOnQ9PnQuZGF0dW0uZmFsc2VfbmVnYXRpdmVzfV19KSgpLHRoaXMuX3Nlcmllc0RhdGFGaWVsZHM9WyJ0aHJlc2hvbGRzIiwicHJlY2lzaW9uIiwicmVjYWxsIiwidHJ1ZV9wb3NpdGl2ZXMiLCJmYWxzZV9wb3NpdGl2ZXMiLCJ0cnVlX25lZ2F0aXZlcyIsImZhbHNlX25lZ2F0aXZlcyJdLHRoaXMuX2RlZmF1bHRYUmFuZ2U9Wy0uMDUsMS4wNV0sdGhpcy5fZGVmYXVsdFlSYW5nZT1bLS4wNSwxLjA1XSx0aGlzLl9yZXF1ZXN0RGF0YT0odCxlLG4pPT57Y29uc3QgaT1ncigpLnBsdWdpblJvdXRlKCJwcl9jdXJ2ZXMiLCIvcHJfY3VydmVzIik7UHJvbWlzZS5hbGwodC5tYXAoKHQ9Pntjb25zdCBuPVZPKGkse3RhZzp0aGlzLnRhZyxydW46dH0pO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QobikudGhlbigobj0+e2Uoe2l0ZW06dCxkYXRhOm59KX0pKX0pKSkuZmluYWxseSgoKCk9PntuKCl9KSl9LHRoaXMuX3Ntb290aGluZ0VuYWJsZWQ9ITF9X2NyZWF0ZVByb2Nlc3NEYXRhRnVuY3Rpb24oKXtyZXR1cm4odCxlLG4pPT57dGhpcy5zZXQoIl9ydW5Ub0RhdGFPdmVyVGltZSIsT2JqZWN0LmFzc2lnbih7fSx0aGlzLl9ydW5Ub0RhdGFPdmVyVGltZSxuKSl9fV9jb21wdXRlUnVuQ29sb3IodCl7cmV0dXJuIEFPKHQpfWNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLl9hdHRhY2hlZD0hMCx0aGlzLnJlbG9hZCgpfV9nZXRDaGFydERhdGFMb2FkZXIoKXtyZXR1cm4gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoInRmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXIiKX1yZWxvYWQoKXt0aGlzLl9hdHRhY2hlZCYmKDAhPT10aGlzLnJ1bnMubGVuZ3RoP3RoaXMuX2dldENoYXJ0RGF0YUxvYWRlcigpLnJlbG9hZCgpOnRoaXMuc2V0KCJfcnVuVG9EYXRhT3ZlclRpbWUiLHt9KSl9X3NldENoYXJ0RGF0YSgpe3ZhciB0PXRoaXMuX3J1blRvUHJDdXJ2ZUVudHJ5LGU9dGhpcy5fcHJldmlvdXNSdW5Ub1ByQ3VydmVFbnRyeSxuPXRoaXMuX3NldE9mUmVsZXZhbnRSdW5zO3dlLmZvck93bih0LCgoaSxyKT0+e2NvbnN0IG89ZVtyXTtvJiZ0W3JdLnN0ZXA9PT1vLnN0ZXB8fChuW3JdP3RoaXMuX3VwZGF0ZVNlcmllc0RhdGFGb3JSdW4ocixpKTp0aGlzLl9jbGVhclNlcmllc0RhdGEocikpfSkpfV91cGRhdGVTZXJpZXNEYXRhRm9yUnVuKHQsZSl7Y29uc3Qgbj13ZS5yZWR1Y2UodGhpcy5fc2VyaWVzRGF0YUZpZWxkcywoKHQsbik9Pih0W25dPWVbbl0uc2xpY2UoKS5yZXZlcnNlKCksdCkpLHt9KSxpPW5ldyBBcnJheShuW3RoaXMuX3Nlcmllc0RhdGFGaWVsZHNbMF1dLmxlbmd0aCk7Zm9yKGxldCB0PTA7dDxpLmxlbmd0aDt0KyspaVt0XT13ZS5tYXBWYWx1ZXMobiwoZT0+ZVt0XSkpO2NvbnN0IHI9dGhpcy5fZ2V0Q2hhcnREYXRhTG9hZGVyKCk7ci5zZXRTZXJpZXNEYXRhKHQsaSksci5jb21taXRDaGFuZ2VzKCl9X2NsZWFyU2VyaWVzRGF0YSh0KXtjb25zdCBlPXRoaXMuX2dldENoYXJ0RGF0YUxvYWRlcigpO2Uuc2V0U2VyaWVzRGF0YSh0LFtdKSxlLmNvbW1pdENoYW5nZXMoKX1fdXBkYXRlUnVuVG9QckN1cnZlRW50cnkoKXt2YXIgdD10aGlzLnJ1blRvU3RlcENhcDtjb25zdCBlPXt9O3dlLmZvck93bih0aGlzLl9ydW5Ub0RhdGFPdmVyVGltZSwoKG4saSk9PntuJiZuLmxlbmd0aCYmKGVbaV09dGhpcy5fY29tcHV0ZUVudHJ5Q2xvc2VzdE9yRXF1YWxUb1N0ZXBDYXAodFtpXSxuKSl9KSksdGhpcy5zZXQoIl9wcmV2aW91c1J1blRvUHJDdXJ2ZUVudHJ5Iix0aGlzLl9ydW5Ub1ByQ3VydmVFbnRyeSksdGhpcy5zZXQoIl9ydW5Ub1ByQ3VydmVFbnRyeSIsZSl9X25vdGlmeURhdGFDaGFuZ2UoKXt0aGlzLm9uRGF0YUNoYW5nZSYmdGhpcy5vbkRhdGFDaGFuZ2UodGhpcy5fcnVuVG9EYXRhT3ZlclRpbWUpfV9jb21wdXRlRW50cnlDbG9zZXN0T3JFcXVhbFRvU3RlcENhcCh0LGUpe2NvbnN0IG49TWF0aC5taW4od2Uuc29ydGVkSW5kZXgoZS5tYXAoKHQ9PnQuc3RlcCkpLHQpLGUubGVuZ3RoLTEpO3JldHVybiBlW25dfWdldCBfcnVuc1dpdGhTdGVwQXZhaWxhYmxlKCl7dmFyIHQ9dGhpcy5fcnVuVG9QckN1cnZlRW50cnk7cmV0dXJuIHdlLmZpbHRlcih0aGlzLnJ1bnMsKGU9PnRbZV0pKS5zb3J0KCl9Z2V0IF9zZXRPZlJlbGV2YW50UnVucygpe2NvbnN0IHQ9e307cmV0dXJuIHdlLmZvckVhY2godGhpcy5fcnVuc1dpdGhTdGVwQXZhaWxhYmxlLChlPT57dFtlXT0hMH0pKSx0fV9jb21wdXRlQ3VycmVudFN0ZXBGb3JSdW4odCxlKXtjb25zdCBuPXRbZV07cmV0dXJuIG4/bi5zdGVwOm51bGx9X2NvbXB1dGVDdXJyZW50V2FsbFRpbWVGb3JSdW4odCxlKXtjb25zdCBuPXRbZV07cmV0dXJuIG4/bmV3IERhdGUoMWUzKm4ud2FsbF90aW1lKS50b1N0cmluZygpOm51bGx9X3RvZ2dsZUV4cGFuZGVkKHQpe3RoaXMuc2V0KCJfZXhwYW5kZWQiLCF0aGlzLl9leHBhbmRlZCksdGhpcy5yZWRyYXcoKX1fcmVzZXREb21haW4oKXt0aGlzLl9nZXRDaGFydERhdGFMb2FkZXIoKS5yZXNldERvbWFpbigpfXJlZHJhdygpe3RoaXMuX2dldENoYXJ0RGF0YUxvYWRlcigpLnJlZHJhdygpfX07V1d0LnRlbXBsYXRlPV9lYAogICAgPHRmLWNhcmQtaGVhZGluZwogICAgICB0YWc9IltbdGFnXV0iCiAgICAgIGRpc3BsYXktbmFtZT0iW1t0YWdNZXRhZGF0YS5kaXNwbGF5TmFtZV1dIgogICAgICBkZXNjcmlwdGlvbj0iW1t0YWdNZXRhZGF0YS5kZXNjcmlwdGlvbl1dIgogICAgPjwvdGYtY2FyZC1oZWFkaW5nPgoKICAgIDx0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyCiAgICAgIHgtY29tcG9uZW50cy1jcmVhdGlvbi1tZXRob2Q9IltbX3hDb21wb25lbnRzQ3JlYXRpb25NZXRob2RdXSIKICAgICAgeS12YWx1ZS1hY2Nlc3Nvcj0iW1tfeVZhbHVlQWNjZXNzb3JdXSIKICAgICAgdG9vbHRpcC1jb2x1bW5zPSJbW190b29sdGlwQ29sdW1uc11dIgogICAgICBjb2xvci1zY2FsZT0iW1tfY29sb3JTY2FsZUZ1bmN0aW9uXV0iCiAgICAgIGRlZmF1bHQteC1yYW5nZT0iW1tfZGVmYXVsdFhSYW5nZV1dIgogICAgICBkZWZhdWx0LXktcmFuZ2U9IltbX2RlZmF1bHRZUmFuZ2VdXSIKICAgICAgc21vb3RoaW5nLWVuYWJsZWQ9IltbX3Ntb290aGluZ0VuYWJsZWRdXSIKICAgICAgcmVxdWVzdC1tYW5hZ2VyPSJbW3JlcXVlc3RNYW5hZ2VyXV0iCiAgICAgIGRhdGEtdG8tbG9hZD0iW1tydW5zXV0iCiAgICAgIGRhdGEtc2VyaWVzPSJbW3J1bnNdXSIKICAgICAgbG9hZC1rZXk9IltbdGFnXV0iCiAgICAgIHJlcXVlc3QtZGF0YT0iW1tfcmVxdWVzdERhdGFdXSIKICAgICAgbG9hZC1kYXRhLWNhbGxiYWNrPSJbW19jcmVhdGVQcm9jZXNzRGF0YUZ1bmN0aW9uKCldXSIKICAgICAgYWN0aXZlPSJbW2FjdGl2ZV1dIgogICAgPjwvdGYtbGluZS1jaGFydC1kYXRhLWxvYWRlcj4KCiAgICA8ZGl2IGlkPSJidXR0b25zLXJvdyI+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIHNlbGVjdGVkJD0iW1tfZXhwYW5kZWRdXSIKICAgICAgICBpY29uPSJmdWxsc2NyZWVuIgogICAgICAgIG9uLXRhcD0iX3RvZ2dsZUV4cGFuZGVkIgogICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgaWNvbj0ic2V0dGluZ3Mtb3ZlcnNjYW4iCiAgICAgICAgb24tdGFwPSJfcmVzZXREb21haW4iCiAgICAgICAgdGl0bGU9IlJlc2V0IGF4ZXMgdG8gWzAsIDFdLiIKICAgICAgPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGlkPSJzdGVwLWxlZ2VuZCI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX3J1bnNXaXRoU3RlcEF2YWlsYWJsZV1dIiBhcz0icnVuIj4KICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtcm93Ij4KICAgICAgICAgIDxkaXYKICAgICAgICAgICAgY2xhc3M9ImNvbG9yLWJveCIKICAgICAgICAgICAgc3R5bGU9ImJhY2tncm91bmQ6IFtbX2NvbXB1dGVSdW5Db2xvcihydW4pXV07IgogICAgICAgICAgPjwvZGl2PgogICAgICAgICAgW1tydW5dXSBpcyBhdAogICAgICAgICAgPHNwYW4gY2xhc3M9InN0ZXAtbGFiZWwtdGV4dCI+CiAgICAgICAgICAgIHN0ZXAgW1tfY29tcHV0ZUN1cnJlbnRTdGVwRm9yUnVuKF9ydW5Ub1ByQ3VydmVFbnRyeSwgcnVuKV1dIDwvc3BhbgogICAgICAgICAgPjxiciAvPgogICAgICAgICAgPHNwYW4gY2xhc3M9IndhbGwtdGltZS1sYWJlbC10ZXh0Ij4KICAgICAgICAgICAgKFtbX2NvbXB1dGVDdXJyZW50V2FsbFRpbWVGb3JSdW4oX3J1blRvUHJDdXJ2ZUVudHJ5LCBydW4pXV0pCiAgICAgICAgICA8L3NwYW4+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L2Rpdj4KCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgd2lkdGg6IDUwMHB4OwogICAgICAgIG1hcmdpbi1yaWdodDogMTBweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyNXB4OwogICAgICB9CiAgICAgIDpob3N0KFtfZXhwYW5kZWRdKSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KICAgICAgdGYtbGluZS1jaGFydC1kYXRhLWxvYWRlciB7CiAgICAgICAgaGVpZ2h0OiAzMDBweDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KICAgICAgOmhvc3QoW19leHBhbmRlZF0pIHRmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXIgewogICAgICAgIGhlaWdodDogNjAwcHg7CiAgICAgIH0KICAgICAgI2J1dHRvbnMtcm93IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgIH0KICAgICAgI2J1dHRvbnMtcm93IHBhcGVyLWljb24tYnV0dG9uIHsKICAgICAgICBjb2xvcjogIzIxOTZmMzsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMDAlOwogICAgICAgIHdpZHRoOiAzMnB4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBwYWRkaW5nOiA0cHg7CiAgICAgIH0KICAgICAgI2J1dHRvbnMtcm93IHBhcGVyLWljb24tYnV0dG9uW3NlbGVjdGVkXSB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tdGItdWktbGlnaHQtYWNjZW50KTsKICAgICAgfQogICAgICAjc3RlcC1sZWdlbmQgewogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgZm9udC1zaXplOiAwLjhlbTsKICAgICAgICBtYXgtaGVpZ2h0OiAyMDBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIHBhZGRpbmc6IDAgMCAwIDEwcHg7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KICAgICAgLmxlZ2VuZC1yb3cgewogICAgICAgIG1hcmdpbjogNXB4IDAgNXB4IDA7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KICAgICAgLmNvbG9yLWJveCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDFweDsKICAgICAgICB3aWR0aDogMTBweDsKICAgICAgICBoZWlnaHQ6IDEwcHg7CiAgICAgIH0KICAgICAgLnN0ZXAtbGFiZWwtdGV4dCB7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgIH0KICAgICAgLndhbGwtdGltZS1sYWJlbC10ZXh0IHsKICAgICAgICBjb2xvcjogIzg4ODsKICAgICAgICBmb250LXNpemU6IDAuOGVtOwogICAgICB9CiAgICA8L3N0eWxlPgogIGAsdChbbyh7dHlwZTpBcnJheX0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLFdXdC5wcm90b3R5cGUsInJ1bnMiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sV1d0LnByb3RvdHlwZSwidGFnIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLFdXdC5wcm90b3R5cGUsInRhZ01ldGFkYXRhIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLFdXdC5wcm90b3R5cGUsInJ1blRvU3RlcENhcCIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixocildLFdXdC5wcm90b3R5cGUsInJlcXVlc3RNYW5hZ2VyIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sV1d0LnByb3RvdHlwZSwiYWN0aXZlIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFdXdC5wcm90b3R5cGUsIl9leHBhbmRlZCIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxXV3QucHJvdG90eXBlLCJfcnVuVG9QckN1cnZlRW50cnkiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sV1d0LnByb3RvdHlwZSwiX3ByZXZpb3VzUnVuVG9QckN1cnZlRW50cnkiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sV1d0LnByb3RvdHlwZSwiX3J1blRvRGF0YU92ZXJUaW1lIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sV1d0LnByb3RvdHlwZSwib25EYXRhQ2hhbmdlIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLFdXdC5wcm90b3R5cGUsIl9jb2xvclNjYWxlRnVuY3Rpb24iLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsTk8pXSxXV3QucHJvdG90eXBlLCJfY2FuY2VsbGVyIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sV1d0LnByb3RvdHlwZSwiX2F0dGFjaGVkIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLFdXdC5wcm90b3R5cGUsIl94Q29tcG9uZW50c0NyZWF0aW9uTWV0aG9kIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLFdXdC5wcm90b3R5cGUsIl95VmFsdWVBY2Nlc3NvciIsdm9pZCAwKSx0KFtvKHt0eXBlOkFycmF5fSksZSgiZGVzaWduOnR5cGUiLEFycmF5KV0sV1d0LnByb3RvdHlwZSwiX3Rvb2x0aXBDb2x1bW5zIix2b2lkIDApLHQoW28oe3R5cGU6QXJyYXl9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSxXV3QucHJvdG90eXBlLCJfc2VyaWVzRGF0YUZpZWxkcyIsdm9pZCAwKSx0KFtvKHt0eXBlOkFycmF5fSksZSgiZGVzaWduOnR5cGUiLEFycmF5KV0sV1d0LnByb3RvdHlwZSwiX2RlZmF1bHRYUmFuZ2UiLHZvaWQgMCksdChbbyh7dHlwZTpBcnJheX0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLFdXdC5wcm90b3R5cGUsIl9kZWZhdWx0WVJhbmdlIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sV1d0LnByb3RvdHlwZSwiX3JlcXVlc3REYXRhIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sV1d0LnByb3RvdHlwZSwiX3Ntb290aGluZ0VuYWJsZWQiLHZvaWQgMCksdChbYSgicnVucyIsInRhZyIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sV1d0LnByb3RvdHlwZSwicmVsb2FkIixudWxsKSx0KFthKCJfcnVuVG9QckN1cnZlRW50cnkiLCJfcHJldmlvdXNSdW5Ub1ByQ3VydmVFbnRyeSIsIl9zZXRPZlJlbGV2YW50UnVucyIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sV1d0LnByb3RvdHlwZSwiX3NldENoYXJ0RGF0YSIsbnVsbCksdChbYSgiX3J1blRvRGF0YU92ZXJUaW1lIiwicnVuVG9TdGVwQ2FwIiksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pLGUoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxXV3QucHJvdG90eXBlLCJfdXBkYXRlUnVuVG9QckN1cnZlRW50cnkiLG51bGwpLHQoW2EoIl9ydW5Ub0RhdGFPdmVyVGltZSIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sV1d0LnByb3RvdHlwZSwiX25vdGlmeURhdGFDaGFuZ2UiLG51bGwpLHQoW3MoInJ1bnMiLCJfcnVuVG9QckN1cnZlRW50cnkiKSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFdXdC5wcm90b3R5cGUsIl9ydW5zV2l0aFN0ZXBBdmFpbGFibGUiLG51bGwpLHQoW3MoIl9ydW5zV2l0aFN0ZXBBdmFpbGFibGUiKSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxXV3QucHJvdG90eXBlLCJfc2V0T2ZSZWxldmFudFJ1bnMiLG51bGwpLFdXdD10KFtpKCJ0Zi1wci1jdXJ2ZS1jYXJkIildLFdXdCk7bGV0IHFXdD1jbGFzcyBleHRlbmRzIHlle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9ydW5Ub1N0ZXBJbmRleD17fX1fY29tcHV0ZUNvbG9yRm9yUnVuKHQpe3JldHVybiBBTyh0KX1fY29tcHV0ZVRpbWVUZXh0Rm9yUnVuKHQsZSxuLGkpe2NvbnN0IHI9ZVtuXTtpZighd2UuaXNOdW1iZXIocikpcmV0dXJuIiI7Y29uc3Qgbz10W25dO2lmKCFvKXJldHVybiIiO2NvbnN0IGE9b1tyXVtpXTtpZigic3RlcCI9PT1pKXJldHVybmBzdGVwICR7YX1gO2lmKCJyZWxhdGl2ZSI9PT1pKXJldHVybiBhPDE/YCR7KDFlMyphKS50b0ZpeGVkKDIpfSBtc2A6YCR7YS50b0ZpeGVkKDIpfSBzYDtpZigid2FsbF90aW1lIj09PWkpcmV0dXJuIG5ldyBEYXRlKDFlMyphKS50b1N0cmluZygpO3Rocm93IG5ldyBFcnJvcihgVGhlIGRpc3BsYXkgdHlwZSBvZiAke2l9IGlzIG5vdCByZWNvZ25pemVkLmApfV9zbGlkZXJWYWx1ZUNoYW5nZWQodCl7Y29uc3QgZT10LnRhcmdldC5kYXRhc2V0LnJ1bixuPXQudGFyZ2V0LmltbWVkaWF0ZVZhbHVlLGk9T2JqZWN0LmFzc2lnbih7fSx0aGlzLl9ydW5Ub1N0ZXBJbmRleCk7aXNOYU4obik/ZGVsZXRlIGlbZV06aVtlXT10LnRhcmdldC5pbW1lZGlhdGVWYWx1ZSx0aGlzLl9ydW5Ub1N0ZXBJbmRleD1pfV9jb21wdXRlTWF4U3RlcEluZGV4Rm9yUnVuKHQsZSl7Y29uc3Qgbj10W2VdO3JldHVybiBuJiZuLmxlbmd0aD9uLmxlbmd0aC0xOjB9X3VwZGF0ZVN0ZXBzRm9yTmV3UnVucygpe3ZhciB0PXRoaXMucnVuVG9BdmFpbGFibGVUaW1lRW50cmllcztjb25zdCBlPU9iamVjdC5hc3NpZ24oe30sdGhpcy5fcnVuVG9TdGVwSW5kZXgpO3dlLmZvck93bih0LCgodCxuKT0+e3dlLmlzTnVtYmVyKGVbbl0pfHwoZVtuXT10Lmxlbmd0aC0xKX0pKSx0aGlzLl9ydW5Ub1N0ZXBJbmRleD1lfV9nZXRTdGVwKHQsZSl7cmV0dXJuIHRoaXMuX3J1blRvU3RlcEluZGV4P3RoaXMuX3J1blRvU3RlcEluZGV4W2VdOjB9X2NvbXB1dGVSdW5Ub1N0ZXAodCxlKXtjb25zdCBuPXt9O3JldHVybiB3ZS5mb3JPd24oZSwoKGUsaSk9Pntjb25zdCByPXRbaV07ciYmKG5baV09cltlXS5zdGVwKX0pKSxufWdldCBfcnVuc1dpdGhTbGlkZXJzKCl7dmFyIHQ9dGhpcy5ydW5Ub0F2YWlsYWJsZVRpbWVFbnRyaWVzO3JldHVybiB0aGlzLnJ1bnMuZmlsdGVyKChlPT50W2VdKSl9fTtxV3QudGVtcGxhdGU9X2VgCiAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19ydW5zV2l0aFNsaWRlcnNdXSIgYXM9InJ1biI+CiAgICAgIDxkaXYgY2xhc3M9InJ1bi13aWRnZXQiPgogICAgICAgIDxkaXYgY2xhc3M9InJ1bi1kaXNwbGF5LWNvbnRhaW5lciI+CiAgICAgICAgICA8ZGl2CiAgICAgICAgICAgIGNsYXNzPSJydW4tY29sb3ItYm94IgogICAgICAgICAgICBzdHlsZT0iYmFja2dyb3VuZDpbW19jb21wdXRlQ29sb3JGb3JSdW4ocnVuKV1dOyIKICAgICAgICAgID48L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InJ1bi10ZXh0Ij5bW3J1bl1dPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic3RlcC1kaXNwbGF5LWNvbnRhaW5lciI+CiAgICAgICAgICBbW19jb21wdXRlVGltZVRleHRGb3JSdW4ocnVuVG9BdmFpbGFibGVUaW1lRW50cmllcywgX3J1blRvU3RlcEluZGV4LAogICAgICAgICAgcnVuLCB0aW1lRGlzcGxheVR5cGUpXV0KICAgICAgICA8L2Rpdj4KICAgICAgICA8cGFwZXItc2xpZGVyCiAgICAgICAgICBkYXRhLXJ1biQ9IltbcnVuXV0iCiAgICAgICAgICBzdGVwPSIxIgogICAgICAgICAgdHlwZT0ibnVtYmVyIgogICAgICAgICAgbWluPSIwIgogICAgICAgICAgbWF4PSJbW19jb21wdXRlTWF4U3RlcEluZGV4Rm9yUnVuKHJ1blRvQXZhaWxhYmxlVGltZUVudHJpZXMsIHJ1bildXSIKICAgICAgICAgIHZhbHVlPSJbW19nZXRTdGVwKF9ydW5Ub1N0ZXBJbmRleCwgcnVuKV1dIgogICAgICAgICAgb24taW1tZWRpYXRlLXZhbHVlLWNoYW5nZWQ9Il9zbGlkZXJWYWx1ZUNoYW5nZWQiCiAgICAgICAgPjwvcGFwZXItc2xpZGVyPgogICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIC5ydW4td2lkZ2V0IHsKICAgICAgICBtYXJnaW46IDEwcHggMCAwIDA7CiAgICAgIH0KICAgICAgcGFwZXItc2xpZGVyIHsKICAgICAgICBtYXJnaW46IC04cHggMCAwIC0xNXB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICAgIC5zdGVwLWRpc3BsYXktY29udGFpbmVyIHsKICAgICAgICBmb250LXNpemU6IDAuOWVtOwogICAgICAgIG1hcmdpbjogMCAxNXB4IDAgMDsKICAgICAgfQogICAgICAucnVuLXRleHQgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgfQogICAgICAucnVuLWNvbG9yLWJveCB7CiAgICAgICAgd2lkdGg6IDEycHg7CiAgICAgICAgaGVpZ2h0OiAxMnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYCx0KFtvKHt0eXBlOkFycmF5fSksZSgiZGVzaWduOnR5cGUiLEFycmF5KV0scVd0LnByb3RvdHlwZSwicnVucyIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxxV3QucHJvdG90eXBlLCJydW5Ub0F2YWlsYWJsZVRpbWVFbnRyaWVzIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0LG5vdGlmeTohMCxjb21wdXRlZDoiX2NvbXB1dGVSdW5Ub1N0ZXAocnVuVG9BdmFpbGFibGVUaW1lRW50cmllcywgX3J1blRvU3RlcEluZGV4KSJ9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0scVd0LnByb3RvdHlwZSwicnVuVG9TdGVwIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLHFXdC5wcm90b3R5cGUsInRpbWVEaXNwbGF5VHlwZSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxxV3QucHJvdG90eXBlLCJfcnVuVG9TdGVwSW5kZXgiLHZvaWQgMCksdChbYSgicnVuVG9BdmFpbGFibGVUaW1lRW50cmllcyIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0scVd0LnByb3RvdHlwZSwiX3VwZGF0ZVN0ZXBzRm9yTmV3UnVucyIsbnVsbCksdChbcygicnVucyIsInJ1blRvQXZhaWxhYmxlVGltZUVudHJpZXMiKSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLHFXdC5wcm90b3R5cGUsIl9ydW5zV2l0aFNsaWRlcnMiLG51bGwpLHFXdD10KFtpKCJ0Zi1wci1jdXJ2ZS1zdGVwcy1zZWxlY3RvciIpXSxxV3QpO2xldCBZV3Q9Y2xhc3MgZXh0ZW5kcyh0cih5ZSkpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnJlbG9hZE9uUmVhZHk9ITAsdGhpcy5fdGltZURpc3BsYXlUeXBlPSJzdGVwIix0aGlzLl9zZWxlY3RlZFJ1bnM9W10sdGhpcy5fcnVuVG9UYWdJbmZvPXt9LHRoaXMuX3RhZ1RvUnVuVG9EYXRhPXt9LHRoaXMuX2dldENhdGVnb3J5SXRlbUtleT10PT50LnRhZyx0aGlzLl9yZXF1ZXN0TWFuYWdlcj1uZXcgaHIsdGhpcy5fc3RlcD0wfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLnJlbG9hZE9uUmVhZHkmJnRoaXMucmVsb2FkKCl9cmVsb2FkKCl7UHJvbWlzZS5hbGwoW3RoaXMuX2ZldGNoVGFncygpXSkudGhlbigoKCk9Pnt0aGlzLl9yZWxvYWRDYXJkcygpfSkpfV9zaG91bGRPcGVuKHQpe3JldHVybiB0PD0yfV9mZXRjaFRhZ3MoKXtjb25zdCB0PWdyKCkucGx1Z2luUm91dGUoInByX2N1cnZlcyIsIi90YWdzIik7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbigodD0+e2lmKHdlLmlzRXF1YWwodCx0aGlzLl9ydW5Ub1RhZ0luZm8pKXJldHVybjtjb25zdCBlPW9yKHdlLm1hcFZhbHVlcyh0LCh0PT53ZS5rZXlzKHQpKSkpO3RoaXMuc2V0KCJfZGF0YU5vdEZvdW5kIiwwPT09ZS5sZW5ndGgpLHRoaXMuc2V0KCJfcnVuVG9UYWdJbmZvIix0KSx0aGlzLmFzeW5jKCgoKT0+e3RoaXMuc2V0KCJfY2F0ZWdvcmllc0RvbVJlYWR5IiwhMCl9KSl9KSl9X3JlbG9hZENhcmRzKCl7d2UuZm9yRWFjaCh0aGlzLnJvb3QucXVlcnlTZWxlY3RvckFsbCgidGYtcHItY3VydmUtY2FyZCIpLCh0PT57dC5yZWxvYWQoKX0pKX1nZXQgX2NhdGVnb3JpZXMoKXt2YXIgdD10aGlzLl9zZWxlY3RlZFJ1bnMsZT10aGlzLl90YWdGaWx0ZXI7cmV0dXJuIHhyKHdlLm1hcFZhbHVlcyh0aGlzLl9ydW5Ub1RhZ0luZm8sKHQ9Pk9iamVjdC5rZXlzKHQpKSksdCxlKX1nZXQgX3JlbGV2YW50U2VsZWN0ZWRSdW5zKCl7dmFyIHQ9dGhpcy5fcnVuVG9UYWdJbmZvO3JldHVybiB0aGlzLl9zZWxlY3RlZFJ1bnMuZmlsdGVyKChlPT50W2VdKSl9X3RhZ01ldGFkYXRhKHQsZSxuKXtjb25zdCBpPXt9O2UuZm9yRWFjaCgoZT0+e2lbZV09dFtlXVtuXX0pKTtjb25zdCByPW4ucmVwbGFjZSgvXC9wcl9jdXJ2ZXMkLywiIik7cmV0dXJuIEhPKGkscil9X2NyZWF0ZURhdGFDaGFuZ2VDYWxsYmFjayh0KXtyZXR1cm4gZT0+e3RoaXMuc2V0KCJfdGFnVG9SdW5Ub0RhdGEiLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0aGlzLl90YWdUb1J1blRvRGF0YSkse1t0XTplfSkpfX1nZXQgX3J1blRvQXZhaWxhYmxlVGltZUVudHJpZXMoKXt2YXIgdD10aGlzLl90YWdUb1J1blRvRGF0YTtjb25zdCBlPXt9O2Zvcihjb25zdFtuLGldb2YgT2JqZWN0LmVudHJpZXModCkpZm9yKGNvbnN0W3Rdb2YgT2JqZWN0LmVudHJpZXMoaSkpKG51bGw9PWVbdF18fG48ZVt0XSkmJihlW3RdPW4pO2NvbnN0IG49e307Zm9yKGNvbnN0W2kscl1vZiBPYmplY3QuZW50cmllcyhlKSl7Y29uc3QgZT10W3JdW2ldO25baV09ZS5tYXAoKHQ9Pih7c3RlcDp0LnN0ZXAsd2FsbF90aW1lOnQud2FsbF90aW1lLHJlbGF0aXZlOnQud2FsbF90aW1lLWVbMF0ud2FsbF90aW1lfSkpKX1yZXR1cm4gbn19O1lXdC50ZW1wbGF0ZT1fZWAKICAgIDx0Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyIiBzbG90PSJzaWRlYmFyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZXR0aW5ncyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgICA8dGYtb3B0aW9uLXNlbGVjdG9yCiAgICAgICAgICAgICAgaWQ9InRpbWUtdHlwZS1zZWxlY3RvciIKICAgICAgICAgICAgICBuYW1lPSJUaW1lIERpc3BsYXkgVHlwZSIKICAgICAgICAgICAgICBzZWxlY3RlZC1pZD0ie3tfdGltZURpc3BsYXlUeXBlfX0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJzdGVwIj5zdGVwPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgICAgPCEtLQogICAgICAgICAgICAtLT4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJyZWxhdGl2ZSI+cmVsYXRpdmU8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICA8IS0tCiAgICAgICAgICAgIC0tPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9IndhbGxfdGltZSI+d2FsbDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICA8L3RmLW9wdGlvbi1zZWxlY3Rvcj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19ydW5Ub0F2YWlsYWJsZVRpbWVFbnRyaWVzXV0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iIGlkPSJzdGVwcy1zZWxlY3Rvci1jb250YWluZXIiPgogICAgICAgICAgICAgIDx0Zi1wci1jdXJ2ZS1zdGVwcy1zZWxlY3RvcgogICAgICAgICAgICAgICAgcnVucz0iW1tfcmVsZXZhbnRTZWxlY3RlZFJ1bnNdXSIKICAgICAgICAgICAgICAgIHJ1bi10by1zdGVwPSJ7e19ydW5Ub1N0ZXB9fSIKICAgICAgICAgICAgICAgIHJ1bi10by1hdmFpbGFibGUtdGltZS1lbnRyaWVzPSJbW19ydW5Ub0F2YWlsYWJsZVRpbWVFbnRyaWVzXV0iCiAgICAgICAgICAgICAgICB0aW1lLWRpc3BsYXktdHlwZT0iW1tfdGltZURpc3BsYXlUeXBlXV0iCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIDwvdGYtcHItY3VydmUtc3RlcHMtc2VsZWN0b3I+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24gcnVucy1zZWxlY3RvciI+CiAgICAgICAgICA8dGYtcnVucy1zZWxlY3RvciBzZWxlY3RlZC1ydW5zPSJ7e19zZWxlY3RlZFJ1bnN9fSI+CiAgICAgICAgICA8L3RmLXJ1bnMtc2VsZWN0b3I+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjZW50ZXIiIHNsb3Q9ImNlbnRlciI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLXdhcm5pbmciPgogICAgICAgICAgICA8aDM+Tm8gcHJlY2lzaW9u4oCTcmVjYWxsIGN1cnZlIGRhdGEgd2FzIGZvdW5kLjwvaDM+CiAgICAgICAgICAgIDxwPlByb2JhYmxlIGNhdXNlczo8L3A+CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICBZb3UgaGF2ZW7igJl0IHdyaXR0ZW4gYW55IHByZWNpc2lvbuKAk3JlY2FsbCBkYXRhIHRvIHlvdXIgZXZlbnQKICAgICAgICAgICAgICAgIGZpbGVzLgogICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgPGxpPlRlbnNvckJvYXJkIGNhbuKAmXQgZmluZCB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvCiAgICAgICAgICAgICAgYWRkIGRhdGEgYW5kIHNldCB1cCB5b3VyIGV2ZW50IGZpbGVzLCBjaGVjayBvdXQgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCIKICAgICAgICAgICAgICAgID5SRUFETUU8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiCiAgICAgICAgICAgICAgICA+VGVuc29yQm9hcmQgdHV0b3JpYWw8L2EKICAgICAgICAgICAgICA+LgogICAgICAgICAgICA8L3A+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3UgdGhpbmsgVGVuc29yQm9hcmQgaXMgY29uZmlndXJlZCBwcm9wZXJseSwgcGxlYXNlIHNlZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQjbXktdGVuc29yYm9hcmQtaXNudC1zaG93aW5nLWFueS1kYXRhLXdoYXRzLXdyb25nIgogICAgICAgICAgICAgICAgPnRoZSBzZWN0aW9uIG9mIHRoZSBSRUFETUUgZGV2b3RlZCB0byBtaXNzaW5nIGRhdGEgcHJvYmxlbXM8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuCiAgICAgICAgICAgIDwvcD4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPHRmLXRhZy1maWx0ZXJlciB0YWctZmlsdGVyPSJ7e190YWdGaWx0ZXJ9fSI+PC90Zi10YWctZmlsdGVyZXI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jYXRlZ29yaWVzXV0iIGFzPSJjYXRlZ29yeSI+CiAgICAgICAgICAgIDx0Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldwogICAgICAgICAgICAgIGNhdGVnb3J5PSJbW2NhdGVnb3J5XV0iCiAgICAgICAgICAgICAgaW5pdGlhbC1vcGVuZWQ9IltbX3Nob3VsZE9wZW4oaW5kZXgpXV0iCiAgICAgICAgICAgICAgZ2V0LWNhdGVnb3J5LWl0ZW0ta2V5PSJbW19nZXRDYXRlZ29yeUl0ZW1LZXldXSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0Zi1wci1jdXJ2ZS1jYXJkCiAgICAgICAgICAgICAgICAgIGFjdGl2ZT0iW1thY3RpdmVdXSIKICAgICAgICAgICAgICAgICAgcnVucz0iW1tpdGVtLnJ1bnNdXSIKICAgICAgICAgICAgICAgICAgdGFnPSJbW2l0ZW0udGFnXV0iCiAgICAgICAgICAgICAgICAgIHRhZy1tZXRhZGF0YT0iW1tfdGFnTWV0YWRhdGEoX3J1blRvVGFnSW5mbywgaXRlbS5ydW5zLCBpdGVtLnRhZyldXSIKICAgICAgICAgICAgICAgICAgcmVxdWVzdC1tYW5hZ2VyPSJbW19yZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgICAgICAgICAgICBydW4tdG8tc3RlcC1jYXA9IltbX3J1blRvU3RlcF1dIgogICAgICAgICAgICAgICAgICBvbi1kYXRhLWNoYW5nZT0iW1tfY3JlYXRlRGF0YUNoYW5nZUNhbGxiYWNrKGl0ZW0udGFnKV1dIgogICAgICAgICAgICAgICAgPjwvdGYtcHItY3VydmUtY2FyZD4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3RmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGYtZGFzaGJvYXJkLWxheW91dD4KCiAgICA8c3R5bGUgaW5jbHVkZT0iZGFzaGJvYXJkLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAubm8tZGF0YS13YXJuaW5nIHsKICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OwogICAgICAgIG1hcmdpbjogODBweCBhdXRvIDAgYXV0bzsKICAgICAgfQoKICAgICAgLyoqIERvIG5vdCBsZXQgdGhlIHN0ZXBzIHNlbGVjdG9yIG9jY2x1ZGUgdGhlIHJ1biBzZWxlY3Rvci4gKi8KICAgICAgI3N0ZXBzLXNlbGVjdG9yLWNvbnRhaW5lciB7CiAgICAgICAgbWF4LWhlaWdodDogNjAlOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYCx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFlXdC5wcm90b3R5cGUsInJlbG9hZE9uUmVhZHkiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sWVd0LnByb3RvdHlwZSwiX3RpbWVEaXNwbGF5VHlwZSIsdm9pZCAwKSx0KFtvKHt0eXBlOkFycmF5fSksZSgiZGVzaWduOnR5cGUiLEFycmF5KV0sWVd0LnByb3RvdHlwZSwiX3NlbGVjdGVkUnVucyIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxZV3QucHJvdG90eXBlLCJfcnVuVG9UYWdJbmZvIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLFlXdC5wcm90b3R5cGUsIl90YWdUb1J1blRvRGF0YSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdCxub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sWVd0LnByb3RvdHlwZSwiX3J1blRvU3RlcCIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFlXdC5wcm90b3R5cGUsIl9kYXRhTm90Rm91bmQiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sWVd0LnByb3RvdHlwZSwiX3RhZ0ZpbHRlciIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFlXdC5wcm90b3R5cGUsIl9jYXRlZ29yaWVzRG9tUmVhZHkiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sWVd0LnByb3RvdHlwZSwiX2dldENhdGVnb3J5SXRlbUtleSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixocildLFlXdC5wcm90b3R5cGUsIl9yZXF1ZXN0TWFuYWdlciIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcixub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sWVd0LnByb3RvdHlwZSwiX3N0ZXAiLHZvaWQgMCksdChbcygiX3J1blRvVGFnSW5mbyIsIl9zZWxlY3RlZFJ1bnMiLCJfdGFnRmlsdGVyIiwiX2NhdGVnb3JpZXNEb21SZWFkeSIpLGUoImRlc2lnbjp0eXBlIixBcnJheSksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sWVd0LnByb3RvdHlwZSwiX2NhdGVnb3JpZXMiLG51bGwpLHQoW3MoIl9zZWxlY3RlZFJ1bnMiLCJfcnVuVG9UYWdJbmZvIiksZSgiZGVzaWduOnR5cGUiLEFycmF5KSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxZV3QucHJvdG90eXBlLCJfcmVsZXZhbnRTZWxlY3RlZFJ1bnMiLG51bGwpLHQoW3MoIl90YWdUb1J1blRvRGF0YSIpLGUoImRlc2lnbjp0eXBlIixPYmplY3QpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFlXdC5wcm90b3R5cGUsIl9ydW5Ub0F2YWlsYWJsZVRpbWVFbnRyaWVzIixudWxsKSxZV3Q9dChbaSgidGYtcHItY3VydmUtZGFzaGJvYXJkIildLFlXdCk7bGV0IFhXdD1jbGFzcyBleHRlbmRzKHRyKHllKSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2luc3RhbGxDb21tYW5kPSJwaXAgaW5zdGFsbCAtVSB0ZW5zb3Jib2FyZC1wbHVnaW4tcHJvZmlsZSJ9X2NvcHlJbnN0YWxsQ29tbWFuZCgpe3JldHVybiBuKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD0oKT0+bih0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuJC5jb21tYW5kVGV4dGFyZWEuc2VsZWN0KCk7dHJ5e3lpZWxkIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRoaXMuX2luc3RhbGxDb21tYW5kKX1jYXRjaCh0KXtpZighZG9jdW1lbnQuZXhlY0NvbW1hbmQoImNvcHkiKSlyZXR1cm4gUHJvbWlzZS5yZWplY3QoKX19KSksZT10aGlzLiQuY29waWVkTWVzc2FnZTt0cnl7eWllbGQgdCgpLGUuaW5uZXJUZXh0PSJDb3BpZWQuIn1jYXRjaCh0KXtlLmlubmVyVGV4dD0iRmFpbGVkIHRvIGNvcHkgdG8gY2xpcGJvYXJkLiJ9fSkpfV9yZW1vdmVDb3BpZWRNZXNzYWdlKCl7dGhpcy4kLmNvcGllZE1lc3NhZ2UuaW5uZXJUZXh0PSIifX07WFd0LnRlbXBsYXRlPV9lYAogICAgPGRpdiBjbGFzcz0ibWVzc2FnZSI+CiAgICAgIDxoMz5UaGUgcHJvZmlsZSBwbHVnaW4gaGFzIG1vdmVkLjwvaDM+CiAgICAgIDxwPgogICAgICAgIFBsZWFzZSBpbnN0YWxsIHRoZSBuZXcgdmVyc2lvbiBvZiB0aGUgcHJvZmlsZSBwbHVnaW4gZnJvbSBQeVBJIGJ5CiAgICAgICAgcnVubmluZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQgZnJvbSB0aGUgbWFjaGluZSBydW5uaW5nIFRlbnNvckJvYXJkOgogICAgICA8L3A+CiAgICAgIDx0ZXh0YXJlYQogICAgICAgIGlkPSJjb21tYW5kVGV4dGFyZWEiCiAgICAgICAgcmVhZG9ubHk9IiIKICAgICAgICByb3dzPSIxIgogICAgICAgIG9uLWJsdXI9Il9yZW1vdmVDb3BpZWRNZXNzYWdlIgogICAgICA+CltbX2luc3RhbGxDb21tYW5kXV08L3RleHRhcmVhCiAgICAgID4KICAgICAgPGRpdiBpZD0iY29weUNvbnRhaW5lciI+CiAgICAgICAgPHNwYW4gaWQ9ImNvcGllZE1lc3NhZ2UiPjwvc3Bhbj4KICAgICAgICA8cGFwZXItYnV0dG9uIHJhaXNlZD0iIiBvbi10YXA9Il9jb3B5SW5zdGFsbENvbW1hbmQiCiAgICAgICAgICA+Q29weSB0byBjbGlwYm9hcmQ8L3BhcGVyLWJ1dHRvbgogICAgICAgID4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICB9CgogICAgICAubWVzc2FnZSB7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgIH0KICAgICAgI2NvbW1hbmRUZXh0YXJlYSB7CiAgICAgICAgbWFyZ2luLXRvcDogMWV4OwogICAgICAgIHBhZGRpbmc6IDFleCAxZW07CiAgICAgICAgcmVzaXplOiB2ZXJ0aWNhbDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQogICAgICAjY29weUNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgfQogICAgICAjY29waWVkTWVzc2FnZSB7CiAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyOwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgICAgcGFkZGluZy1yaWdodDogMWVtOwogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICB9CiAgICA8L3N0eWxlPgogIGAsdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sWFd0LnByb3RvdHlwZSwiX2luc3RhbGxDb21tYW5kIix2b2lkIDApLFhXdD10KFtpKCJ0Zi1wcm9maWxlLXJlZGlyZWN0LWRhc2hib2FyZCIpXSxYV3QpO2xldCAkV3Q9Y2xhc3MgZXh0ZW5kcyh0cih1bCkpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnJlbG9hZE9uUmVhZHk9ITAsdGhpcy5fc2hvd0Rvd25sb2FkTGlua3M9QnMoIl9zaG93RG93bmxvYWRMaW5rcyIse2RlZmF1bHRWYWx1ZTohMSx1c2VMb2NhbFN0b3JhZ2U6ITB9KS5jYWxsKHRoaXMpLHRoaXMuX3Ntb290aGluZ1dlaWdodD1qcygiX3Ntb290aGluZ1dlaWdodCIse2RlZmF1bHRWYWx1ZTouNn0pLmNhbGwodGhpcyksdGhpcy5faWdub3JlWU91dGxpZXJzPUJzKCJfaWdub3JlWU91dGxpZXJzIix7ZGVmYXVsdFZhbHVlOiEwLHVzZUxvY2FsU3RvcmFnZTohMH0pLmNhbGwodGhpcyksdGhpcy5feFR5cGU9cl90LlNURVAsdGhpcy5fc2VsZWN0ZWRSdW5zPVtdLHRoaXMuX3RhZ0ZpbHRlcj0iIix0aGlzLl9jYXRlZ29yaWVzPVtdLHRoaXMuX2dldENhdGVnb3J5SXRlbUtleT10PT50LnRhZyx0aGlzLl9yZXF1ZXN0TWFuYWdlcj1uZXcgaHIoNTApLHRoaXMuX3Nob3dEb3dubG9hZExpbmtzT2JzZXJ2ZXI9SHMoIl9zaG93RG93bmxvYWRMaW5rcyIse2RlZmF1bHRWYWx1ZTohMSx1c2VMb2NhbFN0b3JhZ2U6ITB9KSx0aGlzLl9zbW9vdGhpbmdXZWlnaHRPYnNlcnZlcj1HcygiX3Ntb290aGluZ1dlaWdodCIse2RlZmF1bHRWYWx1ZTouNn0pLHRoaXMuX2lnbm9yZVlPdXRsaWVyc09ic2VydmVyPUhzKCJfaWdub3JlWU91dGxpZXJzIix7ZGVmYXVsdFZhbHVlOiEwLHVzZUxvY2FsU3RvcmFnZTohMH0pfWdldCBfc21vb3RoaW5nRW5hYmxlZCgpe3JldHVybiB0aGlzLl9zbW9vdGhpbmdXZWlnaHQ+MH1fZ2V0Q2F0ZWdvcnlLZXkodCl7cmV0dXJuIHQubWV0YWRhdGEudHlwZT09dnIuU0VBUkNIX1JFU1VMVFM/IiI6dC5uYW1lfV9zaG91bGRPcGVuKHQpe3JldHVybiB0PD0yfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLnJlbG9hZE9uUmVhZHkmJnRoaXMucmVsb2FkKCl9cmVsb2FkKCl7dGhpcy5fZmV0Y2hUYWdzKCkudGhlbigoKCk9Pnt0aGlzLl9yZWxvYWRDaGFydHMoKX0pKX1fZmV0Y2hUYWdzKCl7Y29uc3QgdD1ncigpLnBsdWdpblJvdXRlKCJzY2FsYXJzIiwiL3RhZ3MiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKCh0PT57aWYod2UuaXNFcXVhbCh0LHRoaXMuX3J1blRvVGFnSW5mbykpcmV0dXJuO2NvbnN0IGU9b3Iod2UubWFwVmFsdWVzKHQsKHQ9Pk9iamVjdC5rZXlzKHQpKSkpO3RoaXMuc2V0KCJfZGF0YU5vdEZvdW5kIiwwPT09ZS5sZW5ndGgpLHRoaXMuc2V0KCJfcnVuVG9UYWdJbmZvIix0KSx0aGlzLmFzeW5jKCgoKT0+e3RoaXMuc2V0KCJfY2F0ZWdvcmllc0RvbVJlYWR5IiwhMCl9KSl9KSl9X3JlbG9hZENoYXJ0cygpe3RoaXMucm9vdC5xdWVyeVNlbGVjdG9yQWxsKCJ0Zi1zY2FsYXItY2FyZCIpLmZvckVhY2goKHQ9Pnt0LnJlbG9hZCgpfSkpfV91cGRhdGVDYXRlZ29yaWVzKCl7dmFyIHQ9dGhpcy5fc2VsZWN0ZWRSdW5zO2xldCBlLG49dGhpcy5fdGFnRmlsdGVyO2U9eHIod2UubWFwVmFsdWVzKHRoaXMuX3J1blRvVGFnSW5mbywodD0+T2JqZWN0LmtleXModCkpKSx0LG4pLGUuZm9yRWFjaCgodD0+e3QuaXRlbXM9dC5pdGVtcy5tYXAoKHQ9Pih7dGFnOnQudGFnLHNlcmllczp0LnJ1bnMubWFwKChlPT4oe3J1bjplLHRhZzp0LnRhZ30pKSl9KSkpfSkpLHRoaXMudXBkYXRlQXJyYXlQcm9wKCJfY2F0ZWdvcmllcyIsZSx0aGlzLl9nZXRDYXRlZ29yeUtleSl9X3RhZ01ldGFkYXRhKHQsZSxuKXtjb25zdCBpPXQubmFtZSxyPW4udGFnLG89e307bi5zZXJpZXMuZm9yRWFjaCgoKHtydW46dH0pPT57b1t0XT1lW3RdW3JdfSkpO2NvbnN0IGE9ci5yZXBsYWNlKC9cL3NjYWxhcl9zdW1tYXJ5JC8sIiIpO2xldHtkZXNjcmlwdGlvbjpzLGRpc3BsYXlOYW1lOmx9PUhPKG8sYSk7cmV0dXJuIHQubWV0YWRhdGEudHlwZT09dnIuUFJFRklYX0dST1VQJiZsLnN0YXJ0c1dpdGgoaSsiLyIpJiYobD1sLnNsaWNlKGkubGVuZ3RoKzEpKSx7ZGVzY3JpcHRpb246cyxkaXNwbGF5TmFtZTpsfX19OyRXdC50ZW1wbGF0ZT1fZWAKICAgIDx0Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyIiBzbG90PSJzaWRlYmFyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZXR0aW5ncyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJsaW5lLWl0ZW0iPgogICAgICAgICAgICAgIDxwYXBlci1jaGVja2JveAogICAgICAgICAgICAgICAgaWQ9InNob3ctZG93bmxvYWQtbGlua3MiCiAgICAgICAgICAgICAgICBjaGVja2VkPSJ7e19zaG93RG93bmxvYWRMaW5rc319IgogICAgICAgICAgICAgICAgPlNob3cgZGF0YSBkb3dubG9hZCBsaW5rczwvcGFwZXItY2hlY2tib3gKICAgICAgICAgICAgICA+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJsaW5lLWl0ZW0iPgogICAgICAgICAgICAgIDxwYXBlci1jaGVja2JveAogICAgICAgICAgICAgICAgaWQ9Imlnbm9yZS15LW91dGxpZXIiCiAgICAgICAgICAgICAgICBjaGVja2VkPSJ7e19pZ25vcmVZT3V0bGllcnN9fSIKICAgICAgICAgICAgICAgID5JZ25vcmUgb3V0bGllcnMgaW4gY2hhcnQgc2NhbGluZzwvcGFwZXItY2hlY2tib3gKICAgICAgICAgICAgICA+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGlkPSJ0b29sdGlwLXNvcnRpbmciPgogICAgICAgICAgICAgIDxkaXY+VG9vbHRpcCBzb3J0aW5nIG1ldGhvZDo8L2Rpdj4KICAgICAgICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudQogICAgICAgICAgICAgICAgbm8tbGFiZWwtZmxvYXQKICAgICAgICAgICAgICAgIHNlbGVjdGVkLWl0ZW0tbGFiZWw9Int7X3Rvb2x0aXBTb3J0aW5nTWV0aG9kfX0iCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPHBhcGVyLWxpc3Rib3gKICAgICAgICAgICAgICAgICAgY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiCiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkPSIwIgogICAgICAgICAgICAgICAgICBzbG90PSJkcm9wZG93bi1jb250ZW50IgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICA8cGFwZXItaXRlbT5kZWZhdWx0PC9wYXBlci1pdGVtPgogICAgICAgICAgICAgICAgICA8cGFwZXItaXRlbT5kZXNjZW5kaW5nPC9wYXBlci1pdGVtPgogICAgICAgICAgICAgICAgICA8cGFwZXItaXRlbT5hc2NlbmRpbmc8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPm5lYXJlc3Q8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgICAgICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgICAgPHRmLXNtb290aGluZy1pbnB1dAogICAgICAgICAgICAgIHdlaWdodD0ie3tfc21vb3RoaW5nV2VpZ2h0fX0iCiAgICAgICAgICAgICAgc3RlcD0iMC4wMDEiCiAgICAgICAgICAgICAgbWluPSIwIgogICAgICAgICAgICAgIG1heD0iMC45OTkiCiAgICAgICAgICAgID48L3RmLXNtb290aGluZy1pbnB1dD4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgICAgPHRmLW9wdGlvbi1zZWxlY3RvcgogICAgICAgICAgICAgIGlkPSJ4LXR5cGUtc2VsZWN0b3IiCiAgICAgICAgICAgICAgbmFtZT0iSG9yaXpvbnRhbCBBeGlzIgogICAgICAgICAgICAgIHNlbGVjdGVkLWlkPSJ7e194VHlwZX19IgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBpZD0ic3RlcCI+c3RlcDwvcGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgPjwhLS0KICAgICAgICAgICAgLS0+PHBhcGVyLWJ1dHRvbiBpZD0icmVsYXRpdmUiPnJlbGF0aXZlPC9wYXBlci1idXR0b24KICAgICAgICAgICAgICA+PCEtLQogICAgICAgICAgICAtLT48cGFwZXItYnV0dG9uIGlkPSJ3YWxsX3RpbWUiPndhbGw8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgPC90Zi1vcHRpb24tc2VsZWN0b3I+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24gcnVucy1zZWxlY3RvciI+CiAgICAgICAgICA8dGYtcnVucy1zZWxlY3RvciBzZWxlY3RlZC1ydW5zPSJ7e19zZWxlY3RlZFJ1bnN9fSI+CiAgICAgICAgICA8L3RmLXJ1bnMtc2VsZWN0b3I+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjZW50ZXIiIHNsb3Q9ImNlbnRlciI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLXdhcm5pbmciPgogICAgICAgICAgICA8aDM+Tm8gc2NhbGFyIGRhdGEgd2FzIGZvdW5kLjwvaDM+CiAgICAgICAgICAgIDxwPlByb2JhYmxlIGNhdXNlczo8L3A+CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICA8bGk+WW91IGhhdmVu4oCZdCB3cml0dGVuIGFueSBzY2FsYXIgZGF0YSB0byB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgICAgPGxpPlRlbnNvckJvYXJkIGNhbuKAmXQgZmluZCB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgIDwvdWw+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3XigJlyZSBuZXcgdG8gdXNpbmcgVGVuc29yQm9hcmQsIGFuZCB3YW50IHRvIGZpbmQgb3V0IGhvdyB0bwogICAgICAgICAgICAgIGFkZCBkYXRhIGFuZCBzZXQgdXAgeW91ciBldmVudCBmaWxlcywgY2hlY2sgb3V0IHRoZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQiCiAgICAgICAgICAgICAgICA+UkVBRE1FPC9hCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIGFuZCBwZXJoYXBzIHRoZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9nZXRfc3RhcnRlZC9zdW1tYXJpZXNfYW5kX3RlbnNvcmJvYXJkIgogICAgICAgICAgICAgICAgPlRlbnNvckJvYXJkIHR1dG9yaWFsPC9hCiAgICAgICAgICAgICAgPi4KICAgICAgICAgICAgPC9wPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW91IHRoaW5rIFRlbnNvckJvYXJkIGlzIGNvbmZpZ3VyZWQgcHJvcGVybHksIHBsZWFzZSBzZWUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI215LXRlbnNvcmJvYXJkLWlzbnQtc2hvd2luZy1hbnktZGF0YS13aGF0cy13cm9uZyIKICAgICAgICAgICAgICAgID50aGUgc2VjdGlvbiBvZiB0aGUgUkVBRE1FIGRldm90ZWQgdG8gbWlzc2luZyBkYXRhIHByb2JsZW1zPC9hCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIGFuZCBjb25zaWRlciBmaWxpbmcgYW4gaXNzdWUgb24gR2l0SHViLgogICAgICAgICAgICA8L3A+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDx0Zi10YWctZmlsdGVyZXIgdGFnLWZpbHRlcj0ie3tfdGFnRmlsdGVyfX0iPjwvdGYtdGFnLWZpbHRlcmVyPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfY2F0ZWdvcmllc11dIiBhcz0iY2F0ZWdvcnkiPgogICAgICAgICAgICA8dGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXcKICAgICAgICAgICAgICBjYXRlZ29yeT0iW1tjYXRlZ29yeV1dIgogICAgICAgICAgICAgIGluaXRpYWwtb3BlbmVkPSJbW19zaG91bGRPcGVuKGluZGV4KV1dIgogICAgICAgICAgICAgIGdldC1jYXRlZ29yeS1pdGVtLWtleT0iW1tfZ2V0Q2F0ZWdvcnlJdGVtS2V5XV0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGYtc2NhbGFyLWNhcmQKICAgICAgICAgICAgICAgICAgYWN0aXZlPSJbW2FjdGl2ZV1dIgogICAgICAgICAgICAgICAgICBkYXRhLXRvLWxvYWQ9IltbaXRlbS5zZXJpZXNdXSIKICAgICAgICAgICAgICAgICAgaWdub3JlLXktb3V0bGllcnM9IltbX2lnbm9yZVlPdXRsaWVyc11dIgogICAgICAgICAgICAgICAgICBtdWx0aS1leHBlcmltZW50cz0iW1tfZ2V0TXVsdGlFeHBlcmltZW50cyhkYXRhU2VsZWN0aW9uKV1dIgogICAgICAgICAgICAgICAgICByZXF1ZXN0LW1hbmFnZXI9IltbX3JlcXVlc3RNYW5hZ2VyXV0iCiAgICAgICAgICAgICAgICAgIHNob3ctZG93bmxvYWQtbGlua3M9IltbX3Nob3dEb3dubG9hZExpbmtzXV0iCiAgICAgICAgICAgICAgICAgIHNtb290aGluZy1lbmFibGVkPSJbW19zbW9vdGhpbmdFbmFibGVkXV0iCiAgICAgICAgICAgICAgICAgIHNtb290aGluZy13ZWlnaHQ9IltbX3Ntb290aGluZ1dlaWdodF1dIgogICAgICAgICAgICAgICAgICB0YWctbWV0YWRhdGE9IltbX3RhZ01ldGFkYXRhKGNhdGVnb3J5LCBfcnVuVG9UYWdJbmZvLCBpdGVtKV1dIgogICAgICAgICAgICAgICAgICB0YWc9IltbaXRlbS50YWddXSIKICAgICAgICAgICAgICAgICAgdG9vbHRpcC1zb3J0aW5nLW1ldGhvZD0iW1tfdG9vbHRpcFNvcnRpbmdNZXRob2RdXSIKICAgICAgICAgICAgICAgICAgeC10eXBlPSJbW194VHlwZV1dIgogICAgICAgICAgICAgICAgICBiYXRjaC1zaXplPSJbW2ZlYXR1cmVGbGFncy5zY2FsYXJzQmF0Y2hTaXplXV0iCiAgICAgICAgICAgICAgICAgIGluLWNvbGFiPSJbW2ZlYXR1cmVGbGFncy5pbkNvbGFiXV0iCiAgICAgICAgICAgICAgICA+PC90Zi1zY2FsYXItY2FyZD4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3RmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGYtZGFzaGJvYXJkLWxheW91dD4KCiAgICA8c3R5bGUgaW5jbHVkZT0iZGFzaGJvYXJkLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAjdG9vbHRpcC1zb3J0aW5nIHsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIG1hcmdpbi10b3A6IDE1cHg7CiAgICAgIH0KCiAgICAgICN0b29sdGlwLXNvcnRpbmcgcGFwZXItZHJvcGRvd24tbWVudSB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDEwcHg7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItZm9jdXMtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIHdpZHRoOiAxMDVweDsKICAgICAgfQoKICAgICAgLmxpbmUtaXRlbSB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcGFkZGluZy10b3A6IDVweDsKICAgICAgfQogICAgICAubm8tZGF0YS13YXJuaW5nIHsKICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OwogICAgICAgIG1hcmdpbjogODBweCBhdXRvIDAgYXV0bzsKICAgICAgfQogICAgICAuY2VudGVyIHsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYCx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLCRXdC5wcm90b3R5cGUsInJlbG9hZE9uUmVhZHkiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sJFd0LnByb3RvdHlwZSwiZmVhdHVyZUZsYWdzIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbixub3RpZnk6ITAsb2JzZXJ2ZXI6Il9zaG93RG93bmxvYWRMaW5rc09ic2VydmVyIn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sJFd0LnByb3RvdHlwZSwiX3Nob3dEb3dubG9hZExpbmtzIix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyLG5vdGlmeTohMCxvYnNlcnZlcjoiX3Ntb290aGluZ1dlaWdodE9ic2VydmVyIn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSwkV3QucHJvdG90eXBlLCJfc21vb3RoaW5nV2VpZ2h0Iix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbixvYnNlcnZlcjoiX2lnbm9yZVlPdXRsaWVyc09ic2VydmVyIn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sJFd0LnByb3RvdHlwZSwiX2lnbm9yZVlPdXRsaWVycyIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSwkV3QucHJvdG90eXBlLCJfeFR5cGUiLHZvaWQgMCksdChbbyh7dHlwZTpBcnJheX0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLCRXdC5wcm90b3R5cGUsIl9zZWxlY3RlZFJ1bnMiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sJFd0LnByb3RvdHlwZSwiX3J1blRvVGFnSW5mbyIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLCRXdC5wcm90b3R5cGUsIl9kYXRhTm90Rm91bmQiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sJFd0LnByb3RvdHlwZSwiX3RhZ0ZpbHRlciIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLCRXdC5wcm90b3R5cGUsIl9jYXRlZ29yaWVzRG9tUmVhZHkiLHZvaWQgMCksdChbbyh7dHlwZTpBcnJheX0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLCRXdC5wcm90b3R5cGUsIl9jYXRlZ29yaWVzIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLCRXdC5wcm90b3R5cGUsIl9nZXRDYXRlZ29yeUl0ZW1LZXkiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsaHIpXSwkV3QucHJvdG90eXBlLCJfcmVxdWVzdE1hbmFnZXIiLHZvaWQgMCksdChbcygiX3Ntb290aGluZ1dlaWdodCIpLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSwkV3QucHJvdG90eXBlLCJfc21vb3RoaW5nRW5hYmxlZCIsbnVsbCksdChbYSgiX3J1blRvVGFnSW5mbyIsIl9zZWxlY3RlZFJ1bnMiLCJfdGFnRmlsdGVyIiwiX2NhdGVnb3JpZXNEb21SZWFkeSIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sJFd0LnByb3RvdHlwZSwiX3VwZGF0ZUNhdGVnb3JpZXMiLG51bGwpLCRXdD10KFtpKCJ0Zi1zY2FsYXItZGFzaGJvYXJkIildLCRXdCk7bGV0IEtXdD1jbGFzcyBleHRlbmRzKHRyKHllKSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3RleHRzPVtdLHRoaXMuX2NhbmNlbGxlcj1uZXcgTk99Z2V0IF9ydW5Db2xvcigpe3JldHVybiBBTyh0aGlzLnJ1bil9X2NoYW5nZVJ1bkNvbG9yKCl7dGhpcy51cGRhdGVTdHlsZXMoeyItLXRiLXRleHQtbG9hZGVyLW91dGxpbmUiOnRoaXMuX3J1bkNvbG9yfSl9YXR0YWNoZWQoKXt0aGlzLnJlbG9hZCgpfXJlbG9hZCgpe2lmKCF0aGlzLmlzQXR0YWNoZWQpcmV0dXJuO3RoaXMuX2NhbmNlbGxlci5jYW5jZWxBbGwoKTtjb25zdCB0PVZPKGdyKCkucGx1Z2luUm91dGUoInRleHQiLCIvdGV4dCIpLHt0YWc6dGhpcy50YWcscnVuOnRoaXMucnVufSksZT10aGlzLl9jYW5jZWxsZXIuY2FuY2VsbGFibGUoKHQ9PntpZih0LmNhbmNlbGxlZClyZXR1cm47Y29uc3QgZT10LnZhbHVlLm1hcCgodD0+KHt3YWxsX3RpbWU6bmV3IERhdGUoMWUzKnQud2FsbF90aW1lKSxzdGVwOnQuc3RlcCx0ZXh0OnQudGV4dH0pKSk7dGhpcy5zZXQoIl90ZXh0cyIsZS5zbGljZSgpLnJldmVyc2UoKSl9KSk7dGhpcy5yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KHQpLnRoZW4oZSl9X2Zvcm1hdFN0ZXAodCl7cmV0dXJuIGZ5KCIsIikodCl9fTtLV3QudGVtcGxhdGU9X2VgCiAgICA8dGYtY2FyZC1oZWFkaW5nIHJ1bj0iW1tydW5dXSIgdGFnPSJbW3RhZ11dIiBjb2xvcj0iW1tfcnVuQ29sb3JdXSI+CiAgICA8L3RmLWNhcmQtaGVhZGluZz4KICAgIDxwYXBlci1tYXRlcmlhbAogICAgICBlbGV2YXRpb249IjEiCiAgICAgIGlkPSJzdGVwcy1jb250YWluZXIiCiAgICAgIGNsYXNzPSJjb250YWluZXIgc2Nyb2xsYmFyIgogICAgPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW190ZXh0c11dIj4KICAgICAgICA8cGFwZXItbWF0ZXJpYWwgZWxldmF0aW9uPSIxIiBjbGFzcz0ic3RlcC1jb250YWluZXIiPgogICAgICAgICAgc3RlcCA8c3BhbiBjbGFzcz0ic3RlcC12YWx1ZSI+W1tfZm9ybWF0U3RlcChpdGVtLnN0ZXApXV08L3NwYW4+CiAgICAgICAgPC9wYXBlci1tYXRlcmlhbD4KICAgICAgICA8cGFwZXItbWF0ZXJpYWwgZWxldmF0aW9uPSIxIiBjbGFzcz0idGV4dCI+CiAgICAgICAgICA8dGYtbWFya2Rvd24tdmlldyBodG1sPSJbW2l0ZW0udGV4dF1dIj48L3RmLW1hcmtkb3duLXZpZXc+CiAgICAgICAgPC9wYXBlci1tYXRlcmlhbD4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvcGFwZXItbWF0ZXJpYWw+CiAgICA8c3R5bGUgaW5jbHVkZT0ic2Nyb2xsYmFyLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogYXV0bzsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTVweDsKICAgICAgfQogICAgICAuc2Nyb2xsYmFyIHsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICB9CiAgICAgICNzdGVwcy1jb250YWluZXIgewogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgICBib3JkZXI6IDJweCBzb2xpZCAvKiBjb2xvciBjb21wdXRlZCBhbmQgc2V0IGFzIGlubGluZSBzdHlsZSAqLzsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBtYXgtaGVpZ2h0OiA1MDBweDsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgICBwYWRkaW5nOiAxMHB4OwogICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tdGItdGV4dC1sb2FkZXItb3V0bGluZSk7CiAgICAgIH0KICAgICAgLnRleHQgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IGluaGVyaXQ7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMCAzcHggM3B4IDNweDsKICAgICAgICBwYWRkaW5nOiA1cHg7CiAgICAgICAgd29yZC1icmVhazogYnJlYWstd29yZDsKICAgICAgfQogICAgICAuc3RlcC1jb250YWluZXIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXRiLXVpLWxpZ2h0LWFjY2VudCk7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogbm9uZTsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHggM3B4IDAgMDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS10Yi11aS1ib3JkZXIpOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC1zdHlsZTogaXRhbGljOwogICAgICAgIG1hcmdpbi1sZWZ0OiAtMXB4OyAvKiB0byBjb3JyZWN0IGZvciBib3JkZXIgKi8KICAgICAgICBwYWRkaW5nOiAzcHg7CiAgICAgIH0KICAgICAgLnN0ZXAtY29udGFpbmVyOm5vdCg6Zmlyc3QtY2hpbGQpIHsKICAgICAgICBtYXJnaW4tdG9wOiAxNXB4OwogICAgICB9CgogICAgICB0Zi1jYXJkLWhlYWRpbmcgewogICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYCx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxLV3QucHJvdG90eXBlLCJydW4iLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sS1d0LnByb3RvdHlwZSwidGFnIix2b2lkIDApLHQoW28oe3R5cGU6QXJyYXl9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSxLV3QucHJvdG90eXBlLCJfdGV4dHMiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsaHIpXSxLV3QucHJvdG90eXBlLCJyZXF1ZXN0TWFuYWdlciIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixOTyldLEtXdC5wcm90b3R5cGUsIl9jYW5jZWxsZXIiLHZvaWQgMCksdChbcygicnVuIiksZSgiZGVzaWduOnR5cGUiLFN0cmluZyksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sS1d0LnByb3RvdHlwZSwiX3J1bkNvbG9yIixudWxsKSx0KFthKCJfcnVuQ29sb3IiKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEtXdC5wcm90b3R5cGUsIl9jaGFuZ2VSdW5Db2xvciIsbnVsbCksS1d0PXQoW2koInRmLXRleHQtbG9hZGVyIildLEtXdCk7bGV0IFpXdD1jbGFzcyBleHRlbmRzKHRyKHllKSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMucmVsb2FkT25SZWFkeT0hMCx0aGlzLl9yZXF1ZXN0TWFuYWdlcj1uZXcgaHJ9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMucmVsb2FkT25SZWFkeSYmdGhpcy5yZWxvYWQoKX1yZWxvYWQoKXt0aGlzLl9mZXRjaFRhZ3MoKS50aGVuKCgoKT0+e3RoaXMuX3JlbG9hZFRleHRzKCl9KSl9X3Nob3VsZE9wZW4odCl7cmV0dXJuIHQ8PTJ9X2ZldGNoVGFncygpe2NvbnN0IHQ9Z3IoKS5wbHVnaW5Sb3V0ZSgidGV4dCIsIi90YWdzIik7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbigodD0+e2lmKHdlLmlzRXF1YWwodCx0aGlzLl9ydW5Ub1RhZykpcmV0dXJuO2NvbnN0IGU9b3IodCk7dGhpcy5zZXQoIl9kYXRhTm90Rm91bmQiLDA9PT1lLmxlbmd0aCksdGhpcy5zZXQoIl9ydW5Ub1RhZyIsdCksdGhpcy5hc3luYygoKCk9Pnt0aGlzLnNldCgiX2NhdGVnb3JpZXNEb21SZWFkeSIsITApfSkpfSkpfV9yZWxvYWRUZXh0cygpe3RoaXMucm9vdC5xdWVyeVNlbGVjdG9yQWxsKCJ0Zi10ZXh0LWxvYWRlciIpLmZvckVhY2goKHQ9Pnt0LnJlbG9hZCgpfSkpfWdldCBfY2F0ZWdvcmllcygpe3JldHVybiBTcih0aGlzLl9ydW5Ub1RhZyx0aGlzLl9zZWxlY3RlZFJ1bnMsdGhpcy5fdGFnRmlsdGVyKX19O1pXdC50ZW1wbGF0ZT1fZWAKICAgIDx0Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyIiBzbG90PSJzaWRlYmFyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24gcnVucy1zZWxlY3RvciI+CiAgICAgICAgICA8dGYtcnVucy1zZWxlY3RvciBzZWxlY3RlZC1ydW5zPSJ7e19zZWxlY3RlZFJ1bnN9fSI+CiAgICAgICAgICA8L3RmLXJ1bnMtc2VsZWN0b3I+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjZW50ZXIiIHNsb3Q9ImNlbnRlciI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLXdhcm5pbmciPgogICAgICAgICAgICA8aDM+Tm8gdGV4dCBkYXRhIHdhcyBmb3VuZC48L2gzPgogICAgICAgICAgICA8cD5Qcm9iYWJsZSBjYXVzZXM6PC9wPgogICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgPGxpPllvdSBoYXZlbuKAmXQgd3JpdHRlbiBhbnkgdGV4dCBkYXRhIHRvIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgICA8bGk+VGVuc29yQm9hcmQgY2Fu4oCZdCBmaW5kIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgPC91bD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvCiAgICAgICAgICAgICAgYWRkIGRhdGEgYW5kIHNldCB1cCB5b3VyIGV2ZW50IGZpbGVzLCBjaGVjayBvdXQgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCIKICAgICAgICAgICAgICAgID5SRUFETUU8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiCiAgICAgICAgICAgICAgICA+VGVuc29yQm9hcmQgdHV0b3JpYWw8L2EKICAgICAgICAgICAgICA+LgogICAgICAgICAgICA8L3A+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3UgdGhpbmsgVGVuc29yQm9hcmQgaXMgY29uZmlndXJlZCBwcm9wZXJseSwgcGxlYXNlIHNlZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQjbXktdGVuc29yYm9hcmQtaXNudC1zaG93aW5nLWFueS1kYXRhLXdoYXRzLXdyb25nIgogICAgICAgICAgICAgICAgPnRoZSBzZWN0aW9uIG9mIHRoZSBSRUFETUUgZGV2b3RlZCB0byBtaXNzaW5nIGRhdGEgcHJvYmxlbXM8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuCiAgICAgICAgICAgIDwvcD4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPHRmLXRhZy1maWx0ZXJlciB0YWctZmlsdGVyPSJ7e190YWdGaWx0ZXJ9fSI+PC90Zi10YWctZmlsdGVyZXI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jYXRlZ29yaWVzXV0iIGFzPSJjYXRlZ29yeSI+CiAgICAgICAgICAgIDx0Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldwogICAgICAgICAgICAgIGNhdGVnb3J5PSJbW2NhdGVnb3J5XV0iCiAgICAgICAgICAgICAgaW5pdGlhbC1vcGVuZWQ9IltbX3Nob3VsZE9wZW4oaW5kZXgpXV0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGYtdGV4dC1sb2FkZXIKICAgICAgICAgICAgICAgICAgYWN0aXZlPSJbW2FjdGl2ZV1dIgogICAgICAgICAgICAgICAgICB0YWc9IltbaXRlbS50YWddXSIKICAgICAgICAgICAgICAgICAgcnVuPSJbW2l0ZW0ucnVuXV0iCiAgICAgICAgICAgICAgICAgIHJlcXVlc3QtbWFuYWdlcj0iW1tfcmVxdWVzdE1hbmFnZXJdXSIKICAgICAgICAgICAgICAgID48L3RmLXRleHQtbG9hZGVyPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvdGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXc+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC90Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgPHN0eWxlIGluY2x1ZGU9ImRhc2hib2FyZC1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgLm5vLWRhdGEtd2FybmluZyB7CiAgICAgICAgbWF4LXdpZHRoOiA1NDBweDsKICAgICAgICBtYXJnaW46IDgwcHggYXV0byAwIGF1dG87CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYCx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFpXdC5wcm90b3R5cGUsInJlbG9hZE9uUmVhZHkiLHZvaWQgMCksdChbbyh7dHlwZTpBcnJheX0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLFpXdC5wcm90b3R5cGUsIl9zZWxlY3RlZFJ1bnMiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sWld0LnByb3RvdHlwZSwiX3J1blRvVGFnIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sWld0LnByb3RvdHlwZSwiX2RhdGFOb3RGb3VuZCIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxaV3QucHJvdG90eXBlLCJfdGFnRmlsdGVyIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sWld0LnByb3RvdHlwZSwiX2NhdGVnb3JpZXNEb21SZWFkeSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxaV3QucHJvdG90eXBlLCJfcmVxdWVzdE1hbmFnZXIiLHZvaWQgMCksdChbcygiX3J1blRvVGFnIiwiX3NlbGVjdGVkUnVucyIsIl90YWdGaWx0ZXIiLCJfY2F0ZWdvcmllc0RvbVJlYWR5IiksZSgiZGVzaWduOnR5cGUiLEFycmF5KSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxaV3QucHJvdG90eXBlLCJfY2F0ZWdvcmllcyIsbnVsbCksWld0PXQoW2koInRmLXRleHQtZGFzaGJvYXJkIildLFpXdCk7bGV0IEpXdD1jbGFzcyBleHRlbmRzIHlle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl90ZW1wbGF0ZT1udWxsLHRoaXMudGZfYmFja2VuZD1heXR9fTtKV3Q9dChbaSgidGYtYmFja2VuZCIpXSxKV3QpO2xldCBRV3Q9Y2xhc3MgZXh0ZW5kcyB5ZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fdGVtcGxhdGU9bnVsbCx0aGlzLnRmX2dsb2JhbHM9TXN9fTtRV3Q9dChbaSgidGYtZ2xvYmFscyIpXSxRV3QpO2xldCB0cXQ9Y2xhc3MgZXh0ZW5kcyB5ZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fdGVtcGxhdGU9bnVsbCx0aGlzLnRmX3N0b3JhZ2U9Z3l0fX07dHF0PXQoW2koInRmLXN0b3JhZ2UiKV0sdHF0KTt2YXIgZXF0PU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLGFkZExpbWl0TGlzdGVuZXI6c2wscmVtb3ZlTGltaXRMaXN0ZW5lcjpsbCxnZXRMaW1pdDpjbCxzZXRMaW1pdDpmdW5jdGlvbiBucXQodCl7aWYodCE9PU1hdGguZmxvb3IodCkpdGhyb3cgbmV3IEVycm9yKGBsaW1pdCBtdXN0IGJlIGFuIGludGVnZXIsIGJ1dCBnb3Q6ICR7dH1gKTtpZih0PD0wKXRocm93IG5ldyBFcnJvcihgbGltaXQgbXVzdCBiZSBwb3NpdGl2ZSwgYnV0IGdvdDogJHt0fWApO3QhPT1vbCYmKG9sPXQsVXMocmwsb2wse3VzZUxvY2FsU3RvcmFnZTohMH0pLGFsLmZvckVhY2goKHQ9Pnt0KCl9KSkpfSxUZkRvbVJlcGVhdDpobH0pO2xldCBpcXQ9Y2xhc3MgZXh0ZW5kcyB5ZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fdGVtcGxhdGU9bnVsbCx0aGlzLnRmX3BhZ2luYXRlZF92aWV3PWVxdH19O2lxdD10KFtpKCJ0Zi1wYWdpbmF0ZWQtdmlldy1zdG9yZSIpXSxpcXQpO2xldCBycXQ9Y2xhc3MgZXh0ZW5kcyB5ZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fdGVtcGxhdGU9bnVsbCx0aGlzLnJ1bnNDb2xvclNjYWxlPUFPfX07cnF0PXQoW2koInRmLWNvbG9yLXNjYWxlIildLHJxdCl9KSgpOwoKIShmdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHR9bGV0IGU9ITE7Y29uc3Qgbj17UHJvbWlzZTp2b2lkIDAsc2V0IHVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcodCl7aWYodCl7Y29uc3QgdD1uZXcgRXJyb3I7Y29uc29sZS53YXJuKCJERVBSRUNBVEVEISBSeEpTIHdhcyBzZXQgdG8gdXNlIGRlcHJlY2F0ZWQgc3luY2hyb25vdXMgZXJyb3IgaGFuZGxpbmcgYmVoYXZpb3IgYnkgY29kZSBhdDogXG4iK3Quc3RhY2spfWVsc2UgZSYmY29uc29sZS5sb2coIlJ4SlM6IEJhY2sgdG8gYSBiZXR0ZXIgZXJyb3IgYmVoYXZpb3IuIFRoYW5rIHlvdS4gPDMiKTtlPXR9LGdldCB1c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nKCl7cmV0dXJuIGV9fTtmdW5jdGlvbiBvKHQpe3NldFRpbWVvdXQoKCgpPT57dGhyb3cgdH0pLDApfWNvbnN0IGk9e2Nsb3NlZDohMCxuZXh0KHQpe30sZXJyb3IodCl7aWYobi51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nKXRocm93IHQ7byh0KX0sY29tcGxldGUoKXt9fSxhPUFycmF5LmlzQXJyYXl8fCh0PT50JiYibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RoKTtmdW5jdGlvbiByKHQpe3JldHVybiBudWxsIT09dCYmIm9iamVjdCI9PXR5cGVvZiB0fWNvbnN0IHM9KCgpPT57ZnVuY3Rpb24gdCh0KXtyZXR1cm4gRXJyb3IuY2FsbCh0aGlzKSx0aGlzLm1lc3NhZ2U9dD9gJHt0Lmxlbmd0aH0gZXJyb3JzIG9jY3VycmVkIGR1cmluZyB1bnN1YnNjcmlwdGlvbjpcbiR7dC5tYXAoKCh0LGUpPT5gJHtlKzF9KSAke3QudG9TdHJpbmcoKX1gKSkuam9pbigiXG4gICIpfWA6IiIsdGhpcy5uYW1lPSJVbnN1YnNjcmlwdGlvbkVycm9yIix0aGlzLmVycm9ycz10LHRoaXN9cmV0dXJuIHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKSx0fSkoKTtjbGFzcyBse2NvbnN0cnVjdG9yKHQpe3RoaXMuY2xvc2VkPSExLHRoaXMuX3BhcmVudE9yUGFyZW50cz1udWxsLHRoaXMuX3N1YnNjcmlwdGlvbnM9bnVsbCx0JiYodGhpcy5fdW5zdWJzY3JpYmU9dCl9dW5zdWJzY3JpYmUoKXtsZXQgZTtpZih0aGlzLmNsb3NlZClyZXR1cm47bGV0e19wYXJlbnRPclBhcmVudHM6bixfdW5zdWJzY3JpYmU6byxfc3Vic2NyaXB0aW9uczppfT10aGlzO2lmKHRoaXMuY2xvc2VkPSEwLHRoaXMuX3BhcmVudE9yUGFyZW50cz1udWxsLHRoaXMuX3N1YnNjcmlwdGlvbnM9bnVsbCxuIGluc3RhbmNlb2YgbCluLnJlbW92ZSh0aGlzKTtlbHNlIGlmKG51bGwhPT1uKWZvcihsZXQgdD0wO3Q8bi5sZW5ndGg7Kyt0KW5bdF0ucmVtb3ZlKHRoaXMpO2lmKHQobykpdHJ5e28uY2FsbCh0aGlzKX1jYXRjaCh0KXtlPXQgaW5zdGFuY2VvZiBzP2ModC5lcnJvcnMpOlt0XX1pZihhKGkpKXtsZXQgdD0tMSxuPWkubGVuZ3RoO2Zvcig7Kyt0PG47KXtjb25zdCBuPWlbdF07aWYocihuKSl0cnl7bi51bnN1YnNjcmliZSgpfWNhdGNoKHQpe2U9ZXx8W10sdCBpbnN0YW5jZW9mIHM/ZT1lLmNvbmNhdChjKHQuZXJyb3JzKSk6ZS5wdXNoKHQpfX19aWYoZSl0aHJvdyBuZXcgcyhlKX1hZGQodCl7bGV0IGU9dDtpZighdClyZXR1cm4gbC5FTVBUWTtzd2l0Y2godHlwZW9mIHQpe2Nhc2UiZnVuY3Rpb24iOmU9bmV3IGwodCk7Y2FzZSJvYmplY3QiOmlmKGU9PT10aGlzfHxlLmNsb3NlZHx8ImZ1bmN0aW9uIiE9dHlwZW9mIGUudW5zdWJzY3JpYmUpcmV0dXJuIGU7aWYodGhpcy5jbG9zZWQpcmV0dXJuIGUudW5zdWJzY3JpYmUoKSxlO2lmKCEoZSBpbnN0YW5jZW9mIGwpKXtjb25zdCB0PWU7ZT1uZXcgbCxlLl9zdWJzY3JpcHRpb25zPVt0XX1icmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkIHRlYXJkb3duICIrdCsiIGFkZGVkIHRvIFN1YnNjcmlwdGlvbi4iKX1sZXR7X3BhcmVudE9yUGFyZW50czpufT1lO2lmKG51bGw9PT1uKWUuX3BhcmVudE9yUGFyZW50cz10aGlzO2Vsc2UgaWYobiBpbnN0YW5jZW9mIGwpe2lmKG49PT10aGlzKXJldHVybiBlO2UuX3BhcmVudE9yUGFyZW50cz1bbix0aGlzXX1lbHNle2lmKC0xIT09bi5pbmRleE9mKHRoaXMpKXJldHVybiBlO24ucHVzaCh0aGlzKX1jb25zdCBvPXRoaXMuX3N1YnNjcmlwdGlvbnM7cmV0dXJuIG51bGw9PT1vP3RoaXMuX3N1YnNjcmlwdGlvbnM9W2VdOm8ucHVzaChlKSxlfXJlbW92ZSh0KXtjb25zdCBlPXRoaXMuX3N1YnNjcmlwdGlvbnM7aWYoZSl7Y29uc3Qgbj1lLmluZGV4T2YodCk7LTEhPT1uJiZlLnNwbGljZShuLDEpfX19ZnVuY3Rpb24gYyh0KXtyZXR1cm4gdC5yZWR1Y2UoKCh0LGUpPT50LmNvbmNhdChlIGluc3RhbmNlb2Ygcz9lLmVycm9yczplKSksW10pfWwuRU1QVFk9KGZ1bmN0aW9uKHQpe3JldHVybiB0LmNsb3NlZD0hMCx0fSkobmV3IGwpO2NvbnN0IGQ9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9TeW1ib2woInJ4U3Vic2NyaWJlciIpOiJAQHJ4U3Vic2NyaWJlcl8iK01hdGgucmFuZG9tKCk7Y2xhc3MgcCBleHRlbmRzIGx7Y29uc3RydWN0b3IodCxlLG4pe3N3aXRjaChzdXBlcigpLHRoaXMuc3luY0Vycm9yVmFsdWU9bnVsbCx0aGlzLnN5bmNFcnJvclRocm93bj0hMSx0aGlzLnN5bmNFcnJvclRocm93YWJsZT0hMSx0aGlzLmlzU3RvcHBlZD0hMSxhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6dGhpcy5kZXN0aW5hdGlvbj1pO2JyZWFrO2Nhc2UgMTppZighdCl7dGhpcy5kZXN0aW5hdGlvbj1pO2JyZWFrfWlmKCJvYmplY3QiPT10eXBlb2YgdCl7dCBpbnN0YW5jZW9mIHA/KHRoaXMuc3luY0Vycm9yVGhyb3dhYmxlPXQuc3luY0Vycm9yVGhyb3dhYmxlLHRoaXMuZGVzdGluYXRpb249dCx0LmFkZCh0aGlzKSk6KHRoaXMuc3luY0Vycm9yVGhyb3dhYmxlPSEwLHRoaXMuZGVzdGluYXRpb249bmV3IG0odGhpcyx0KSk7YnJlYWt9ZGVmYXVsdDp0aGlzLnN5bmNFcnJvclRocm93YWJsZT0hMCx0aGlzLmRlc3RpbmF0aW9uPW5ldyBtKHRoaXMsdCxlLG4pfX1bZF0oKXtyZXR1cm4gdGhpc31zdGF0aWMgY3JlYXRlKHQsZSxuKXtjb25zdCBvPW5ldyBwKHQsZSxuKTtyZXR1cm4gby5zeW5jRXJyb3JUaHJvd2FibGU9ITEsb31uZXh0KHQpe3RoaXMuaXNTdG9wcGVkfHx0aGlzLl9uZXh0KHQpfWVycm9yKHQpe3RoaXMuaXNTdG9wcGVkfHwodGhpcy5pc1N0b3BwZWQ9ITAsdGhpcy5fZXJyb3IodCkpfWNvbXBsZXRlKCl7dGhpcy5pc1N0b3BwZWR8fCh0aGlzLmlzU3RvcHBlZD0hMCx0aGlzLl9jb21wbGV0ZSgpKX11bnN1YnNjcmliZSgpe3RoaXMuY2xvc2VkfHwodGhpcy5pc1N0b3BwZWQ9ITAsc3VwZXIudW5zdWJzY3JpYmUoKSl9X25leHQodCl7dGhpcy5kZXN0aW5hdGlvbi5uZXh0KHQpfV9lcnJvcih0KXt0aGlzLmRlc3RpbmF0aW9uLmVycm9yKHQpLHRoaXMudW5zdWJzY3JpYmUoKX1fY29tcGxldGUoKXt0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCksdGhpcy51bnN1YnNjcmliZSgpfV91bnN1YnNjcmliZUFuZFJlY3ljbGUoKXtjb25zdHtfcGFyZW50T3JQYXJlbnRzOnR9PXRoaXM7cmV0dXJuIHRoaXMuX3BhcmVudE9yUGFyZW50cz1udWxsLHRoaXMudW5zdWJzY3JpYmUoKSx0aGlzLmNsb3NlZD0hMSx0aGlzLmlzU3RvcHBlZD0hMSx0aGlzLl9wYXJlbnRPclBhcmVudHM9dCx0aGlzfX1jbGFzcyBtIGV4dGVuZHMgcHtjb25zdHJ1Y3RvcihlLG4sbyxhKXtsZXQgcjtzdXBlcigpLHRoaXMuX3BhcmVudFN1YnNjcmliZXI9ZTtsZXQgcz10aGlzO3Qobik/cj1uOm4mJihyPW4ubmV4dCxvPW4uZXJyb3IsYT1uLmNvbXBsZXRlLG4hPT1pJiYocz1PYmplY3QuY3JlYXRlKG4pLHQocy51bnN1YnNjcmliZSkmJnRoaXMuYWRkKHMudW5zdWJzY3JpYmUuYmluZChzKSkscy51bnN1YnNjcmliZT10aGlzLnVuc3Vic2NyaWJlLmJpbmQodGhpcykpKSx0aGlzLl9jb250ZXh0PXMsdGhpcy5fbmV4dD1yLHRoaXMuX2Vycm9yPW8sdGhpcy5fY29tcGxldGU9YX1uZXh0KHQpe2lmKCF0aGlzLmlzU3RvcHBlZCYmdGhpcy5fbmV4dCl7Y29uc3R7X3BhcmVudFN1YnNjcmliZXI6ZX09dGhpcztuLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcmJmUuc3luY0Vycm9yVGhyb3dhYmxlP3RoaXMuX190cnlPclNldEVycm9yKGUsdGhpcy5fbmV4dCx0KSYmdGhpcy51bnN1YnNjcmliZSgpOnRoaXMuX190cnlPclVuc3ViKHRoaXMuX25leHQsdCl9fWVycm9yKHQpe2lmKCF0aGlzLmlzU3RvcHBlZCl7Y29uc3R7X3BhcmVudFN1YnNjcmliZXI6ZX09dGhpcyx7dXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZzppfT1uO2lmKHRoaXMuX2Vycm9yKWkmJmUuc3luY0Vycm9yVGhyb3dhYmxlPyh0aGlzLl9fdHJ5T3JTZXRFcnJvcihlLHRoaXMuX2Vycm9yLHQpLHRoaXMudW5zdWJzY3JpYmUoKSk6KHRoaXMuX190cnlPclVuc3ViKHRoaXMuX2Vycm9yLHQpLHRoaXMudW5zdWJzY3JpYmUoKSk7ZWxzZSBpZihlLnN5bmNFcnJvclRocm93YWJsZSlpPyhlLnN5bmNFcnJvclZhbHVlPXQsZS5zeW5jRXJyb3JUaHJvd249ITApOm8odCksdGhpcy51bnN1YnNjcmliZSgpO2Vsc2V7aWYodGhpcy51bnN1YnNjcmliZSgpLGkpdGhyb3cgdDtvKHQpfX19Y29tcGxldGUoKXtpZighdGhpcy5pc1N0b3BwZWQpe2NvbnN0e19wYXJlbnRTdWJzY3JpYmVyOnR9PXRoaXM7aWYodGhpcy5fY29tcGxldGUpe2NvbnN0IGU9KCk9PnRoaXMuX2NvbXBsZXRlLmNhbGwodGhpcy5fY29udGV4dCk7bi51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nJiZ0LnN5bmNFcnJvclRocm93YWJsZT8odGhpcy5fX3RyeU9yU2V0RXJyb3IodCxlKSx0aGlzLnVuc3Vic2NyaWJlKCkpOih0aGlzLl9fdHJ5T3JVbnN1YihlKSx0aGlzLnVuc3Vic2NyaWJlKCkpfWVsc2UgdGhpcy51bnN1YnNjcmliZSgpfX1fX3RyeU9yVW5zdWIodCxlKXt0cnl7dC5jYWxsKHRoaXMuX2NvbnRleHQsZSl9Y2F0Y2godCl7aWYodGhpcy51bnN1YnNjcmliZSgpLG4udXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyl0aHJvdyB0O28odCl9fV9fdHJ5T3JTZXRFcnJvcih0LGUsaSl7aWYoIW4udXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyl0aHJvdyBuZXcgRXJyb3IoImJhZCBjYWxsIik7dHJ5e2UuY2FsbCh0aGlzLl9jb250ZXh0LGkpfWNhdGNoKGUpe3JldHVybiBuLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmc/KHQuc3luY0Vycm9yVmFsdWU9ZSx0LnN5bmNFcnJvclRocm93bj0hMCwhMCk6KG8oZSksITApfXJldHVybiExfV91bnN1YnNjcmliZSgpe2NvbnN0e19wYXJlbnRTdWJzY3JpYmVyOnR9PXRoaXM7dGhpcy5fY29udGV4dD1udWxsLHRoaXMuX3BhcmVudFN1YnNjcmliZXI9bnVsbCx0LnVuc3Vic2NyaWJlKCl9fWNvbnN0IHU9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLm9ic2VydmFibGV8fCJAQG9ic2VydmFibGUiO2Z1bmN0aW9uIGYodCl7cmV0dXJuIHR9ZnVuY3Rpb24gZyh0KXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGc/KHRoaXMudj10LHRoaXMpOm5ldyBnKHQpfWZ1bmN0aW9uIGgodCxlLG4pe2lmKCFTeW1ib2wuYXN5bmNJdGVyYXRvcil0aHJvdyBuZXcgVHlwZUVycm9yKCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC4iKTt2YXIgbyxpPW4uYXBwbHkodCxlfHxbXSksYT1bXTtyZXR1cm4gbz17fSxyKCJuZXh0IikscigidGhyb3ciKSxyKCJyZXR1cm4iKSxvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxvO2Z1bmN0aW9uIHIodCl7aVt0XSYmKG9bdF09ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLG8pe2EucHVzaChbdCxlLG4sb10pPjF8fHModCxlKX0pKX0pfWZ1bmN0aW9uIHModCxlKXt0cnl7IShmdW5jdGlvbiBuKHQpe3QudmFsdWUgaW5zdGFuY2VvZiBnP1Byb21pc2UucmVzb2x2ZSh0LnZhbHVlLnYpLnRoZW4obCxjKTpkKGFbMF1bMl0sdCl9KShpW3RdKGUpKX1jYXRjaCh0KXtkKGFbMF1bM10sdCl9fWZ1bmN0aW9uIGwodCl7cygibmV4dCIsdCl9ZnVuY3Rpb24gYyh0KXtzKCJ0aHJvdyIsdCl9ZnVuY3Rpb24gZCh0LGUpe3QoZSksYS5zaGlmdCgpLGEubGVuZ3RoJiZzKGFbMF1bMF0sYVswXVsxXSl9fWNsYXNzIGJ7Y29uc3RydWN0b3IoKXt0aGlzLnJlc29sdmU9bnVsbCx0aGlzLnJlamVjdD1udWxsLHRoaXMucHJvbWlzZT1uZXcgUHJvbWlzZSgoKHQsZSk9Pnt0aGlzLnJlc29sdmU9dCx0aGlzLnJlamVjdD1lfSkpfX1jbGFzcyB5e2NvbnN0cnVjdG9yKHQpe3RoaXMuX2lzU2NhbGFyPSExLHQmJih0aGlzLl9zdWJzY3JpYmU9dCl9bGlmdCh0KXtjb25zdCBlPW5ldyB5O3JldHVybiBlLnNvdXJjZT10aGlzLGUub3BlcmF0b3I9dCxlfXN1YnNjcmliZSh0LGUsbyl7Y29uc3R7b3BlcmF0b3I6YX09dGhpcyxyPShmdW5jdGlvbiBzKHQsZSxuKXtpZih0KXtpZih0IGluc3RhbmNlb2YgcClyZXR1cm4gdDtpZih0W2RdKXJldHVybiB0W2RdKCl9cmV0dXJuIHR8fGV8fG4/bmV3IHAodCxlLG4pOm5ldyBwKGkpfSkodCxlLG8pO2lmKHIuYWRkKGE/YS5jYWxsKHIsdGhpcy5zb3VyY2UpOnRoaXMuc291cmNlfHxuLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcmJiFyLnN5bmNFcnJvclRocm93YWJsZT90aGlzLl9zdWJzY3JpYmUocik6dGhpcy5fdHJ5U3Vic2NyaWJlKHIpKSxuLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcmJnIuc3luY0Vycm9yVGhyb3dhYmxlJiYoci5zeW5jRXJyb3JUaHJvd2FibGU9ITEsci5zeW5jRXJyb3JUaHJvd24pKXRocm93IHIuc3luY0Vycm9yVmFsdWU7cmV0dXJuIHJ9X3RyeVN1YnNjcmliZSh0KXt0cnl7cmV0dXJuIHRoaXMuX3N1YnNjcmliZSh0KX1jYXRjaChlKXtuLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcmJih0LnN5bmNFcnJvclRocm93bj0hMCx0LnN5bmNFcnJvclZhbHVlPWUpLChmdW5jdGlvbiBlKHQpe2Zvcig7dDspe2NvbnN0e2Nsb3NlZDplLGRlc3RpbmF0aW9uOm4saXNTdG9wcGVkOm99PXQ7aWYoZXx8bylyZXR1cm4hMTt0PW4mJm4gaW5zdGFuY2VvZiBwP246bnVsbH1yZXR1cm4hMH0pKHQpP3QuZXJyb3IoZSk6Y29uc29sZS53YXJuKGUpfX1mb3JFYWNoKHQsZSl7cmV0dXJuIG5ldyhlPV8oZSkpKCgoZSxuKT0+e2xldCBvO289dGhpcy5zdWJzY3JpYmUoKGU9Pnt0cnl7dChlKX1jYXRjaCh0KXtuKHQpLG8mJm8udW5zdWJzY3JpYmUoKX19KSxuLGUpfSkpfV9zdWJzY3JpYmUodCl7Y29uc3R7c291cmNlOmV9PXRoaXM7cmV0dXJuIGUmJmUuc3Vic2NyaWJlKHQpfVt1XSgpe3JldHVybiB0aGlzfXBpcGUoLi4udCl7cmV0dXJuIDA9PT10Lmxlbmd0aD90aGlzOihmdW5jdGlvbiBlKHQpe3JldHVybiAwPT09dC5sZW5ndGg/ZjoxPT09dC5sZW5ndGg/dFswXTpmdW5jdGlvbiBlKG4pe3JldHVybiB0LnJlZHVjZSgoKHQsZSk9PmUodCkpLG4pfX0KLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4KCiAgICBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKICAgIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC4KCiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSAogICAgUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZCiAgICBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsCiAgICBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00KICAgIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SCiAgICBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SCiAgICBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgogICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8pKHQpKHRoaXMpfXRvUHJvbWlzZSh0KXtyZXR1cm4gbmV3KHQ9Xyh0KSkoKCh0LGUpPT57bGV0IG47dGhpcy5zdWJzY3JpYmUoKHQ9Pm49dCksKHQ9PmUodCkpLCgoKT0+dChuKSkpfSkpfX1mdW5jdGlvbiBfKHQpe2lmKHR8fCh0PVByb21pc2UpLCF0KXRocm93IG5ldyBFcnJvcigibm8gUHJvbWlzZSBpbXBsIGZvdW5kIik7cmV0dXJuIHR9eS5jcmVhdGU9dD0+bmV3IHkodCksU3ltYm9sJiZTeW1ib2wuYXN5bmNJdGVyYXRvciYmKHkucHJvdG90eXBlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybihmdW5jdGlvbiB0KGUpe3JldHVybihmdW5jdGlvbiBuKHQpe3JldHVybiBoKHRoaXMsYXJndW1lbnRzLChmdW5jdGlvbiplKCl7Y29uc3Qgbj1bXSxvPVtdO2xldCBpPSExLGE9bnVsbCxyPSExO2NvbnN0IHM9dC5zdWJzY3JpYmUoe25leHQ6dD0+e24ubGVuZ3RoPjA/bi5zaGlmdCgpLnJlc29sdmUoe3ZhbHVlOnQsZG9uZTohMX0pOm8ucHVzaCh0KX0sZXJyb3I6dD0+e2ZvcihpPSEwLGE9dDtuLmxlbmd0aD4wOyluLnNoaWZ0KCkucmVqZWN0KHQpfSxjb21wbGV0ZTooKT0+e2ZvcihyPSEwO24ubGVuZ3RoPjA7KW4uc2hpZnQoKS5yZXNvbHZlKHt2YWx1ZTp2b2lkIDAsZG9uZTohMH0pfX0pO3RyeXtmb3IoOzspaWYoby5sZW5ndGg+MCl5aWVsZCB5aWVsZCBnKG8uc2hpZnQoKSk7ZWxzZXtpZihyKXJldHVybiB5aWVsZCBnKHZvaWQgMCk7aWYoaSl0aHJvdyBhO3tjb25zdCB0PW5ldyBiO24ucHVzaCh0KTtjb25zdCBlPXlpZWxkIGcodC5wcm9taXNlKTtpZihlLmRvbmUpcmV0dXJuIHlpZWxkIGcodm9pZCAwKTt5aWVsZCB5aWVsZCBnKGUudmFsdWUpfX19Y2F0Y2godCl7dGhyb3cgdH1maW5hbGx5e3MudW5zdWJzY3JpYmUoKX19KSl9KShlKX0pKHRoaXMpfSk7Y29uc3QgQz0oKCk9PntmdW5jdGlvbiB0KCl7cmV0dXJuIEVycm9yLmNhbGwodGhpcyksdGhpcy5tZXNzYWdlPSJvYmplY3QgdW5zdWJzY3JpYmVkIix0aGlzLm5hbWU9Ik9iamVjdFVuc3Vic2NyaWJlZEVycm9yIix0aGlzfXJldHVybiB0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSksdH0pKCk7Y2xhc3MgTSBleHRlbmRzIGx7Y29uc3RydWN0b3IodCxlKXtzdXBlcigpLHRoaXMuc3ViamVjdD10LHRoaXMuc3Vic2NyaWJlcj1lLHRoaXMuY2xvc2VkPSExfXVuc3Vic2NyaWJlKCl7aWYodGhpcy5jbG9zZWQpcmV0dXJuO3RoaXMuY2xvc2VkPSEwO2NvbnN0IHQ9dGhpcy5zdWJqZWN0LGU9dC5vYnNlcnZlcnM7aWYodGhpcy5zdWJqZWN0PW51bGwsIWV8fDA9PT1lLmxlbmd0aHx8dC5pc1N0b3BwZWR8fHQuY2xvc2VkKXJldHVybjtjb25zdCBuPWUuaW5kZXhPZih0aGlzLnN1YnNjcmliZXIpOy0xIT09biYmZS5zcGxpY2UobiwxKX19Y2xhc3MgdiBleHRlbmRzIHB7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy5kZXN0aW5hdGlvbj10fX1jbGFzcyB4IGV4dGVuZHMgeXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5vYnNlcnZlcnM9W10sdGhpcy5jbG9zZWQ9ITEsdGhpcy5pc1N0b3BwZWQ9ITEsdGhpcy5oYXNFcnJvcj0hMSx0aGlzLnRocm93bkVycm9yPW51bGx9W2RdKCl7cmV0dXJuIG5ldyB2KHRoaXMpfWxpZnQodCl7Y29uc3QgZT1uZXcgTyh0aGlzLHRoaXMpO3JldHVybiBlLm9wZXJhdG9yPXQsZX1uZXh0KHQpe2lmKHRoaXMuY2xvc2VkKXRocm93IG5ldyBDO2lmKCF0aGlzLmlzU3RvcHBlZCl7Y29uc3R7b2JzZXJ2ZXJzOmV9PXRoaXMsbj1lLmxlbmd0aCxvPWUuc2xpY2UoKTtmb3IobGV0IGU9MDtlPG47ZSsrKW9bZV0ubmV4dCh0KX19ZXJyb3IodCl7aWYodGhpcy5jbG9zZWQpdGhyb3cgbmV3IEM7dGhpcy5oYXNFcnJvcj0hMCx0aGlzLnRocm93bkVycm9yPXQsdGhpcy5pc1N0b3BwZWQ9ITA7Y29uc3R7b2JzZXJ2ZXJzOmV9PXRoaXMsbj1lLmxlbmd0aCxvPWUuc2xpY2UoKTtmb3IobGV0IGU9MDtlPG47ZSsrKW9bZV0uZXJyb3IodCk7dGhpcy5vYnNlcnZlcnMubGVuZ3RoPTB9Y29tcGxldGUoKXtpZih0aGlzLmNsb3NlZCl0aHJvdyBuZXcgQzt0aGlzLmlzU3RvcHBlZD0hMDtjb25zdHtvYnNlcnZlcnM6dH09dGhpcyxlPXQubGVuZ3RoLG49dC5zbGljZSgpO2ZvcihsZXQgdD0wO3Q8ZTt0Kyspblt0XS5jb21wbGV0ZSgpO3RoaXMub2JzZXJ2ZXJzLmxlbmd0aD0wfXVuc3Vic2NyaWJlKCl7dGhpcy5pc1N0b3BwZWQ9ITAsdGhpcy5jbG9zZWQ9ITAsdGhpcy5vYnNlcnZlcnM9bnVsbH1fdHJ5U3Vic2NyaWJlKHQpe2lmKHRoaXMuY2xvc2VkKXRocm93IG5ldyBDO3JldHVybiBzdXBlci5fdHJ5U3Vic2NyaWJlKHQpfV9zdWJzY3JpYmUodCl7aWYodGhpcy5jbG9zZWQpdGhyb3cgbmV3IEM7cmV0dXJuIHRoaXMuaGFzRXJyb3I/KHQuZXJyb3IodGhpcy50aHJvd25FcnJvciksbC5FTVBUWSk6dGhpcy5pc1N0b3BwZWQ/KHQuY29tcGxldGUoKSxsLkVNUFRZKToodGhpcy5vYnNlcnZlcnMucHVzaCh0KSxuZXcgTSh0aGlzLHQpKX1hc09ic2VydmFibGUoKXtjb25zdCB0PW5ldyB5O3JldHVybiB0LnNvdXJjZT10aGlzLHR9fXguY3JlYXRlPSh0LGUpPT5uZXcgTyh0LGUpO2NsYXNzIE8gZXh0ZW5kcyB4e2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIoKSx0aGlzLmRlc3RpbmF0aW9uPXQsdGhpcy5zb3VyY2U9ZX1uZXh0KHQpe2NvbnN0e2Rlc3RpbmF0aW9uOmV9PXRoaXM7ZSYmZS5uZXh0JiZlLm5leHQodCl9ZXJyb3IodCl7Y29uc3R7ZGVzdGluYXRpb246ZX09dGhpcztlJiZlLmVycm9yJiZ0aGlzLmRlc3RpbmF0aW9uLmVycm9yKHQpfWNvbXBsZXRlKCl7Y29uc3R7ZGVzdGluYXRpb246dH09dGhpczt0JiZ0LmNvbXBsZXRlJiZ0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCl9X3N1YnNjcmliZSh0KXtjb25zdHtzb3VyY2U6ZX09dGhpcztyZXR1cm4gZT90aGlzLnNvdXJjZS5zdWJzY3JpYmUodCk6bC5FTVBUWX19ZnVuY3Rpb24gUCgpe3JldHVybiBmdW5jdGlvbiB0KGUpe3JldHVybiBlLmxpZnQobmV3IHcoZSkpfX1jbGFzcyB3e2NvbnN0cnVjdG9yKHQpe3RoaXMuY29ubmVjdGFibGU9dH1jYWxsKHQsZSl7Y29uc3R7Y29ubmVjdGFibGU6bn09dGhpcztuLl9yZWZDb3VudCsrO2NvbnN0IG89bmV3IGsodCxuKSxpPWUuc3Vic2NyaWJlKG8pO3JldHVybiBvLmNsb3NlZHx8KG8uY29ubmVjdGlvbj1uLmNvbm5lY3QoKSksaX19Y2xhc3MgayBleHRlbmRzIHB7Y29uc3RydWN0b3IodCxlKXtzdXBlcih0KSx0aGlzLmNvbm5lY3RhYmxlPWUsdGhpcy5jb25uZWN0aW9uPW51bGx9X3Vuc3Vic2NyaWJlKCl7Y29uc3R7Y29ubmVjdGFibGU6dH09dGhpcztpZighdClyZXR1cm4gdm9pZCh0aGlzLmNvbm5lY3Rpb249bnVsbCk7dGhpcy5jb25uZWN0YWJsZT1udWxsO2NvbnN0IGU9dC5fcmVmQ291bnQ7aWYoZTw9MClyZXR1cm4gdm9pZCh0aGlzLmNvbm5lY3Rpb249bnVsbCk7aWYodC5fcmVmQ291bnQ9ZS0xLGU+MSlyZXR1cm4gdm9pZCh0aGlzLmNvbm5lY3Rpb249bnVsbCk7Y29uc3R7Y29ubmVjdGlvbjpufT10aGlzLG89dC5fY29ubmVjdGlvbjt0aGlzLmNvbm5lY3Rpb249bnVsbCwhb3x8biYmbyE9PW58fG8udW5zdWJzY3JpYmUoKX19Y2xhc3MgUyBleHRlbmRzIHl7Y29uc3RydWN0b3IodCxlKXtzdXBlcigpLHRoaXMuc291cmNlPXQsdGhpcy5zdWJqZWN0RmFjdG9yeT1lLHRoaXMuX3JlZkNvdW50PTAsdGhpcy5faXNDb21wbGV0ZT0hMX1fc3Vic2NyaWJlKHQpe3JldHVybiB0aGlzLmdldFN1YmplY3QoKS5zdWJzY3JpYmUodCl9Z2V0U3ViamVjdCgpe2NvbnN0IHQ9dGhpcy5fc3ViamVjdDtyZXR1cm4gdCYmIXQuaXNTdG9wcGVkfHwodGhpcy5fc3ViamVjdD10aGlzLnN1YmplY3RGYWN0b3J5KCkpLHRoaXMuX3N1YmplY3R9Y29ubmVjdCgpe2xldCB0PXRoaXMuX2Nvbm5lY3Rpb247cmV0dXJuIHR8fCh0aGlzLl9pc0NvbXBsZXRlPSExLHQ9dGhpcy5fY29ubmVjdGlvbj1uZXcgbCx0LmFkZCh0aGlzLnNvdXJjZS5zdWJzY3JpYmUobmV3IEUodGhpcy5nZXRTdWJqZWN0KCksdGhpcykpKSx0LmNsb3NlZCYmKHRoaXMuX2Nvbm5lY3Rpb249bnVsbCx0PWwuRU1QVFkpKSx0fXJlZkNvdW50KCl7cmV0dXJuIFAoKSh0aGlzKX19Y29uc3QgRD0oKCk9Pntjb25zdCB0PVMucHJvdG90eXBlO3JldHVybntvcGVyYXRvcjp7dmFsdWU6bnVsbH0sX3JlZkNvdW50Ont2YWx1ZTowLHdyaXRhYmxlOiEwfSxfc3ViamVjdDp7dmFsdWU6bnVsbCx3cml0YWJsZTohMH0sX2Nvbm5lY3Rpb246e3ZhbHVlOm51bGwsd3JpdGFibGU6ITB9LF9zdWJzY3JpYmU6e3ZhbHVlOnQuX3N1YnNjcmliZX0sX2lzQ29tcGxldGU6e3ZhbHVlOnQuX2lzQ29tcGxldGUsd3JpdGFibGU6ITB9LGdldFN1YmplY3Q6e3ZhbHVlOnQuZ2V0U3ViamVjdH0sY29ubmVjdDp7dmFsdWU6dC5jb25uZWN0fSxyZWZDb3VudDp7dmFsdWU6dC5yZWZDb3VudH19fSkoKTtjbGFzcyBFIGV4dGVuZHMgdntjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQpLHRoaXMuY29ubmVjdGFibGU9ZX1fZXJyb3IodCl7dGhpcy5fdW5zdWJzY3JpYmUoKSxzdXBlci5fZXJyb3IodCl9X2NvbXBsZXRlKCl7dGhpcy5jb25uZWN0YWJsZS5faXNDb21wbGV0ZT0hMCx0aGlzLl91bnN1YnNjcmliZSgpLHN1cGVyLl9jb21wbGV0ZSgpfV91bnN1YnNjcmliZSgpe2NvbnN0IHQ9dGhpcy5jb25uZWN0YWJsZTtpZih0KXt0aGlzLmNvbm5lY3RhYmxlPW51bGw7Y29uc3QgZT10Ll9jb25uZWN0aW9uO3QuX3JlZkNvdW50PTAsdC5fc3ViamVjdD1udWxsLHQuX2Nvbm5lY3Rpb249bnVsbCxlJiZlLnVuc3Vic2NyaWJlKCl9fX1mdW5jdGlvbiBBKHQsZSxuLG8pe3JldHVybiBpPT5pLmxpZnQobmV3IFIodCxlLG4sbykpfWNsYXNzIFJ7Y29uc3RydWN0b3IodCxlLG4sbyl7dGhpcy5rZXlTZWxlY3Rvcj10LHRoaXMuZWxlbWVudFNlbGVjdG9yPWUsdGhpcy5kdXJhdGlvblNlbGVjdG9yPW4sdGhpcy5zdWJqZWN0U2VsZWN0b3I9b31jYWxsKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyBUKHQsdGhpcy5rZXlTZWxlY3Rvcix0aGlzLmVsZW1lbnRTZWxlY3Rvcix0aGlzLmR1cmF0aW9uU2VsZWN0b3IsdGhpcy5zdWJqZWN0U2VsZWN0b3IpKX19Y2xhc3MgVCBleHRlbmRzIHB7Y29uc3RydWN0b3IodCxlLG4sbyxpKXtzdXBlcih0KSx0aGlzLmtleVNlbGVjdG9yPWUsdGhpcy5lbGVtZW50U2VsZWN0b3I9bix0aGlzLmR1cmF0aW9uU2VsZWN0b3I9byx0aGlzLnN1YmplY3RTZWxlY3Rvcj1pLHRoaXMuZ3JvdXBzPW51bGwsdGhpcy5hdHRlbXB0ZWRUb1Vuc3Vic2NyaWJlPSExLHRoaXMuY291bnQ9MH1fbmV4dCh0KXtsZXQgZTt0cnl7ZT10aGlzLmtleVNlbGVjdG9yKHQpfWNhdGNoKHQpe3JldHVybiB2b2lkIHRoaXMuZXJyb3IodCl9dGhpcy5fZ3JvdXAodCxlKX1fZ3JvdXAodCxlKXtsZXQgbj10aGlzLmdyb3VwcztufHwobj10aGlzLmdyb3Vwcz1uZXcgTWFwKTtsZXQgbyxpPW4uZ2V0KGUpO2lmKHRoaXMuZWxlbWVudFNlbGVjdG9yKXRyeXtvPXRoaXMuZWxlbWVudFNlbGVjdG9yKHQpfWNhdGNoKHQpe3RoaXMuZXJyb3IodCl9ZWxzZSBvPXQ7aWYoIWkpe2k9dGhpcy5zdWJqZWN0U2VsZWN0b3I/dGhpcy5zdWJqZWN0U2VsZWN0b3IoKTpuZXcgeCxuLnNldChlLGkpO2NvbnN0IHQ9bmV3IEkoZSxpLHRoaXMpO2lmKHRoaXMuZGVzdGluYXRpb24ubmV4dCh0KSx0aGlzLmR1cmF0aW9uU2VsZWN0b3Ipe2xldCB0O3RyeXt0PXRoaXMuZHVyYXRpb25TZWxlY3RvcihuZXcgSShlLGkpKX1jYXRjaCh0KXtyZXR1cm4gdm9pZCB0aGlzLmVycm9yKHQpfXRoaXMuYWRkKHQuc3Vic2NyaWJlKG5ldyBOKGUsaSx0aGlzKSkpfX1pLmNsb3NlZHx8aS5uZXh0KG8pfV9lcnJvcih0KXtjb25zdCBlPXRoaXMuZ3JvdXBzO2UmJihlLmZvckVhY2goKChlLG4pPT57ZS5lcnJvcih0KX0pKSxlLmNsZWFyKCkpLHRoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9X2NvbXBsZXRlKCl7Y29uc3QgdD10aGlzLmdyb3Vwczt0JiYodC5mb3JFYWNoKCgodCxlKT0+e3QuY29tcGxldGUoKX0pKSx0LmNsZWFyKCkpLHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKX1yZW1vdmVHcm91cCh0KXt0aGlzLmdyb3Vwcy5kZWxldGUodCl9dW5zdWJzY3JpYmUoKXt0aGlzLmNsb3NlZHx8KHRoaXMuYXR0ZW1wdGVkVG9VbnN1YnNjcmliZT0hMCwwPT09dGhpcy5jb3VudCYmc3VwZXIudW5zdWJzY3JpYmUoKSl9fWNsYXNzIE4gZXh0ZW5kcyBwe2NvbnN0cnVjdG9yKHQsZSxuKXtzdXBlcihlKSx0aGlzLmtleT10LHRoaXMuZ3JvdXA9ZSx0aGlzLnBhcmVudD1ufV9uZXh0KHQpe3RoaXMuY29tcGxldGUoKX1fdW5zdWJzY3JpYmUoKXtjb25zdHtwYXJlbnQ6dCxrZXk6ZX09dGhpczt0aGlzLmtleT10aGlzLnBhcmVudD1udWxsLHQmJnQucmVtb3ZlR3JvdXAoZSl9fWNsYXNzIEkgZXh0ZW5kcyB5e2NvbnN0cnVjdG9yKHQsZSxuKXtzdXBlcigpLHRoaXMua2V5PXQsdGhpcy5ncm91cFN1YmplY3Q9ZSx0aGlzLnJlZkNvdW50U3Vic2NyaXB0aW9uPW59X3N1YnNjcmliZSh0KXtjb25zdCBlPW5ldyBsLHtyZWZDb3VudFN1YnNjcmlwdGlvbjpuLGdyb3VwU3ViamVjdDpvfT10aGlzO3JldHVybiBuJiYhbi5jbG9zZWQmJmUuYWRkKG5ldyB6KG4pKSxlLmFkZChvLnN1YnNjcmliZSh0KSksZX19Y2xhc3MgeiBleHRlbmRzIGx7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnBhcmVudD10LHQuY291bnQrK311bnN1YnNjcmliZSgpe2NvbnN0IHQ9dGhpcy5wYXJlbnQ7dC5jbG9zZWR8fHRoaXMuY2xvc2VkfHwoc3VwZXIudW5zdWJzY3JpYmUoKSx0LmNvdW50LT0xLDA9PT10LmNvdW50JiZ0LmF0dGVtcHRlZFRvVW5zdWJzY3JpYmUmJnQudW5zdWJzY3JpYmUoKSl9fWNsYXNzIEggZXh0ZW5kcyB4e2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5fdmFsdWU9dH1nZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5nZXRWYWx1ZSgpfV9zdWJzY3JpYmUodCl7Y29uc3QgZT1zdXBlci5fc3Vic2NyaWJlKHQpO3JldHVybiBlJiYhZS5jbG9zZWQmJnQubmV4dCh0aGlzLl92YWx1ZSksZX1nZXRWYWx1ZSgpe2lmKHRoaXMuaGFzRXJyb3IpdGhyb3cgdGhpcy50aHJvd25FcnJvcjtpZih0aGlzLmNsb3NlZCl0aHJvdyBuZXcgQztyZXR1cm4gdGhpcy5fdmFsdWV9bmV4dCh0KXtzdXBlci5uZXh0KHRoaXMuX3ZhbHVlPXQpfX1jbGFzcyBGIGV4dGVuZHMgbHtjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKCl9c2NoZWR1bGUodCxlPTApe3JldHVybiB0aGlzfX1jbGFzcyBMIGV4dGVuZHMgRntjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQsZSksdGhpcy5zY2hlZHVsZXI9dCx0aGlzLndvcms9ZSx0aGlzLnBlbmRpbmc9ITF9c2NoZWR1bGUodCxlPTApe2lmKHRoaXMuY2xvc2VkKXJldHVybiB0aGlzO3RoaXMuc3RhdGU9dDtjb25zdCBuPXRoaXMuaWQsbz10aGlzLnNjaGVkdWxlcjtyZXR1cm4gbnVsbCE9biYmKHRoaXMuaWQ9dGhpcy5yZWN5Y2xlQXN5bmNJZChvLG4sZSkpLHRoaXMucGVuZGluZz0hMCx0aGlzLmRlbGF5PWUsdGhpcy5pZD10aGlzLmlkfHx0aGlzLnJlcXVlc3RBc3luY0lkKG8sdGhpcy5pZCxlKSx0aGlzfXJlcXVlc3RBc3luY0lkKHQsZSxuPTApe3JldHVybiBzZXRJbnRlcnZhbCh0LmZsdXNoLmJpbmQodCx0aGlzKSxuKX1yZWN5Y2xlQXN5bmNJZCh0LGUsbj0wKXtpZihudWxsIT09biYmdGhpcy5kZWxheT09PW4mJiExPT09dGhpcy5wZW5kaW5nKXJldHVybiBlO2NsZWFySW50ZXJ2YWwoZSl9ZXhlY3V0ZSh0LGUpe2lmKHRoaXMuY2xvc2VkKXJldHVybiBuZXcgRXJyb3IoImV4ZWN1dGluZyBhIGNhbmNlbGxlZCBhY3Rpb24iKTt0aGlzLnBlbmRpbmc9ITE7Y29uc3Qgbj10aGlzLl9leGVjdXRlKHQsZSk7aWYobilyZXR1cm4gbjshMT09PXRoaXMucGVuZGluZyYmbnVsbCE9dGhpcy5pZCYmKHRoaXMuaWQ9dGhpcy5yZWN5Y2xlQXN5bmNJZCh0aGlzLnNjaGVkdWxlcix0aGlzLmlkLG51bGwpKX1fZXhlY3V0ZSh0LGUpe2xldCBuLG89ITE7dHJ5e3RoaXMud29yayh0KX1jYXRjaCh0KXtvPSEwLG49ISF0JiZ0fHxuZXcgRXJyb3IodCl9aWYobylyZXR1cm4gdGhpcy51bnN1YnNjcmliZSgpLG59X3Vuc3Vic2NyaWJlKCl7Y29uc3QgdD10aGlzLmlkLGU9dGhpcy5zY2hlZHVsZXIsbj1lLmFjdGlvbnMsbz1uLmluZGV4T2YodGhpcyk7dGhpcy53b3JrPW51bGwsdGhpcy5zdGF0ZT1udWxsLHRoaXMucGVuZGluZz0hMSx0aGlzLnNjaGVkdWxlcj1udWxsLC0xIT09byYmbi5zcGxpY2UobywxKSxudWxsIT10JiYodGhpcy5pZD10aGlzLnJlY3ljbGVBc3luY0lkKGUsdCxudWxsKSksdGhpcy5kZWxheT1udWxsfX1jbGFzcyBCe2NvbnN0cnVjdG9yKHQsZT1CLm5vdyl7dGhpcy5TY2hlZHVsZXJBY3Rpb249dCx0aGlzLm5vdz1lfXNjaGVkdWxlKHQsZT0wLG4pe3JldHVybiBuZXcgdGhpcy5TY2hlZHVsZXJBY3Rpb24odGhpcyx0KS5zY2hlZHVsZShuLGUpfX1CLm5vdz0oKT0+RGF0ZS5ub3coKTtjbGFzcyBWIGV4dGVuZHMgQntjb25zdHJ1Y3Rvcih0LGU9Qi5ub3cpe3N1cGVyKHQsKCgpPT5WLmRlbGVnYXRlJiZWLmRlbGVnYXRlIT09dGhpcz9WLmRlbGVnYXRlLm5vdygpOmUoKSkpLHRoaXMuYWN0aW9ucz1bXSx0aGlzLmFjdGl2ZT0hMSx0aGlzLnNjaGVkdWxlZD12b2lkIDB9c2NoZWR1bGUodCxlPTAsbil7cmV0dXJuIFYuZGVsZWdhdGUmJlYuZGVsZWdhdGUhPT10aGlzP1YuZGVsZWdhdGUuc2NoZWR1bGUodCxlLG4pOnN1cGVyLnNjaGVkdWxlKHQsZSxuKX1mbHVzaCh0KXtjb25zdHthY3Rpb25zOmV9PXRoaXM7aWYodGhpcy5hY3RpdmUpcmV0dXJuIHZvaWQgZS5wdXNoKHQpO2xldCBuO3RoaXMuYWN0aXZlPSEwO2Rve2lmKG49dC5leGVjdXRlKHQuc3RhdGUsdC5kZWxheSkpYnJlYWt9d2hpbGUodD1lLnNoaWZ0KCkpO2lmKHRoaXMuYWN0aXZlPSExLG4pe2Zvcig7dD1lLnNoaWZ0KCk7KXQudW5zdWJzY3JpYmUoKTt0aHJvdyBufX19Y29uc3Qgaj1uZXcgY2xhc3MgZXh0ZW5kcyBWe30oY2xhc3MgZXh0ZW5kcyBMe2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCxlKSx0aGlzLnNjaGVkdWxlcj10LHRoaXMud29yaz1lfXNjaGVkdWxlKHQsZT0wKXtyZXR1cm4gZT4wP3N1cGVyLnNjaGVkdWxlKHQsZSk6KHRoaXMuZGVsYXk9ZSx0aGlzLnN0YXRlPXQsdGhpcy5zY2hlZHVsZXIuZmx1c2godGhpcyksdGhpcyl9ZXhlY3V0ZSh0LGUpe3JldHVybiBlPjB8fHRoaXMuY2xvc2VkP3N1cGVyLmV4ZWN1dGUodCxlKTp0aGlzLl9leGVjdXRlKHQsZSl9cmVxdWVzdEFzeW5jSWQodCxlLG49MCl7cmV0dXJuIG51bGwhPT1uJiZuPjB8fG51bGw9PT1uJiZ0aGlzLmRlbGF5PjA/c3VwZXIucmVxdWVzdEFzeW5jSWQodCxlLG4pOnQuZmx1c2godGhpcyl9fSksVT1uZXcgeSgodD0+dC5jb21wbGV0ZSgpKSk7ZnVuY3Rpb24gVyh0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIHQuc2NoZWR1bGV9Y29uc3QgRz10PT5lPT57Zm9yKGxldCBuPTAsbz10Lmxlbmd0aDtuPG8mJiFlLmNsb3NlZDtuKyspZS5uZXh0KHRbbl0pO2UuY29tcGxldGUoKX07ZnVuY3Rpb24gWSh0LGUpe3JldHVybiBuZXcgeSgobj0+e2NvbnN0IG89bmV3IGw7bGV0IGk9MDtyZXR1cm4gby5hZGQoZS5zY2hlZHVsZSgoZnVuY3Rpb24oKXtpIT09dC5sZW5ndGg/KG4ubmV4dCh0W2krK10pLG4uY2xvc2VkfHxvLmFkZCh0aGlzLnNjaGVkdWxlKCkpKTpuLmNvbXBsZXRlKCl9KSkpLG99KSl9ZnVuY3Rpb24gcSh0LGUpe3JldHVybiBlP1kodCxlKTpuZXcgeShHKHQpKX1mdW5jdGlvbiBaKC4uLnQpe2xldCBlPXRbdC5sZW5ndGgtMV07cmV0dXJuIFcoZSk/KHQucG9wKCksWSh0LGUpKTpxKHQpfWZ1bmN0aW9uIFgodCxlKXtyZXR1cm4gbmV3IHkoZT9uPT5lLnNjaGVkdWxlKEssMCx7ZXJyb3I6dCxzdWJzY3JpYmVyOm59KTplPT5lLmVycm9yKHQpKX1mdW5jdGlvbiBLKHtlcnJvcjp0LHN1YnNjcmliZXI6ZX0pe2UuZXJyb3IodCl9dmFyIEo7IShmdW5jdGlvbih0KXt0Lk5FWFQ9Ik4iLHQuRVJST1I9IkUiLHQuQ09NUExFVEU9IkMifSkoSnx8KEo9e30pKTtjbGFzcyBRe2NvbnN0cnVjdG9yKHQsZSxuKXt0aGlzLmtpbmQ9dCx0aGlzLnZhbHVlPWUsdGhpcy5lcnJvcj1uLHRoaXMuaGFzVmFsdWU9Ik4iPT09dH1vYnNlcnZlKHQpe3N3aXRjaCh0aGlzLmtpbmQpe2Nhc2UiTiI6cmV0dXJuIHQubmV4dCYmdC5uZXh0KHRoaXMudmFsdWUpO2Nhc2UiRSI6cmV0dXJuIHQuZXJyb3ImJnQuZXJyb3IodGhpcy5lcnJvcik7Y2FzZSJDIjpyZXR1cm4gdC5jb21wbGV0ZSYmdC5jb21wbGV0ZSgpfX1kbyh0LGUsbil7c3dpdGNoKHRoaXMua2luZCl7Y2FzZSJOIjpyZXR1cm4gdCYmdCh0aGlzLnZhbHVlKTtjYXNlIkUiOnJldHVybiBlJiZlKHRoaXMuZXJyb3IpO2Nhc2UiQyI6cmV0dXJuIG4mJm4oKX19YWNjZXB0KHQsZSxuKXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIHQubmV4dD90aGlzLm9ic2VydmUodCk6dGhpcy5kbyh0LGUsbil9dG9PYnNlcnZhYmxlKCl7c3dpdGNoKHRoaXMua2luZCl7Y2FzZSJOIjpyZXR1cm4gWih0aGlzLnZhbHVlKTtjYXNlIkUiOnJldHVybiBYKHRoaXMuZXJyb3IpO2Nhc2UiQyI6cmV0dXJuIFV9dGhyb3cgbmV3IEVycm9yKCJ1bmV4cGVjdGVkIG5vdGlmaWNhdGlvbiBraW5kIHZhbHVlIil9c3RhdGljIGNyZWF0ZU5leHQodCl7cmV0dXJuIHZvaWQgMCE9PXQ/bmV3IFEoIk4iLHQpOlEudW5kZWZpbmVkVmFsdWVOb3RpZmljYXRpb259c3RhdGljIGNyZWF0ZUVycm9yKHQpe3JldHVybiBuZXcgUSgiRSIsdm9pZCAwLHQpfXN0YXRpYyBjcmVhdGVDb21wbGV0ZSgpe3JldHVybiBRLmNvbXBsZXRlTm90aWZpY2F0aW9ufX1RLmNvbXBsZXRlTm90aWZpY2F0aW9uPW5ldyBRKCJDIiksUS51bmRlZmluZWRWYWx1ZU5vdGlmaWNhdGlvbj1uZXcgUSgiTiIsdm9pZCAwKTtjbGFzcyAke2NvbnN0cnVjdG9yKHQsZT0wKXt0aGlzLnNjaGVkdWxlcj10LHRoaXMuZGVsYXk9ZX1jYWxsKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyB0dCh0LHRoaXMuc2NoZWR1bGVyLHRoaXMuZGVsYXkpKX19Y2xhc3MgdHQgZXh0ZW5kcyBwe2NvbnN0cnVjdG9yKHQsZSxuPTApe3N1cGVyKHQpLHRoaXMuc2NoZWR1bGVyPWUsdGhpcy5kZWxheT1ufXN0YXRpYyBkaXNwYXRjaCh0KXtjb25zdHtub3RpZmljYXRpb246ZSxkZXN0aW5hdGlvbjpufT10O2Uub2JzZXJ2ZShuKSx0aGlzLnVuc3Vic2NyaWJlKCl9c2NoZWR1bGVNZXNzYWdlKHQpe3RoaXMuZGVzdGluYXRpb24uYWRkKHRoaXMuc2NoZWR1bGVyLnNjaGVkdWxlKHR0LmRpc3BhdGNoLHRoaXMuZGVsYXksbmV3IGV0KHQsdGhpcy5kZXN0aW5hdGlvbikpKX1fbmV4dCh0KXt0aGlzLnNjaGVkdWxlTWVzc2FnZShRLmNyZWF0ZU5leHQodCkpfV9lcnJvcih0KXt0aGlzLnNjaGVkdWxlTWVzc2FnZShRLmNyZWF0ZUVycm9yKHQpKSx0aGlzLnVuc3Vic2NyaWJlKCl9X2NvbXBsZXRlKCl7dGhpcy5zY2hlZHVsZU1lc3NhZ2UoUS5jcmVhdGVDb21wbGV0ZSgpKSx0aGlzLnVuc3Vic2NyaWJlKCl9fWNsYXNzIGV0e2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5ub3RpZmljYXRpb249dCx0aGlzLmRlc3RpbmF0aW9uPWV9fWNsYXNzIG50IGV4dGVuZHMgeHtjb25zdHJ1Y3Rvcih0PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxlPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxuKXtzdXBlcigpLHRoaXMuc2NoZWR1bGVyPW4sdGhpcy5fZXZlbnRzPVtdLHRoaXMuX2luZmluaXRlVGltZVdpbmRvdz0hMSx0aGlzLl9idWZmZXJTaXplPXQ8MT8xOnQsdGhpcy5fd2luZG93VGltZT1lPDE/MTplLGU9PT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk/KHRoaXMuX2luZmluaXRlVGltZVdpbmRvdz0hMCx0aGlzLm5leHQ9dGhpcy5uZXh0SW5maW5pdGVUaW1lV2luZG93KTp0aGlzLm5leHQ9dGhpcy5uZXh0VGltZVdpbmRvd31uZXh0SW5maW5pdGVUaW1lV2luZG93KHQpe2NvbnN0IGU9dGhpcy5fZXZlbnRzO2UucHVzaCh0KSxlLmxlbmd0aD50aGlzLl9idWZmZXJTaXplJiZlLnNoaWZ0KCksc3VwZXIubmV4dCh0KX1uZXh0VGltZVdpbmRvdyh0KXt0aGlzLl9ldmVudHMucHVzaChuZXcgb3QodGhpcy5fZ2V0Tm93KCksdCkpLHRoaXMuX3RyaW1CdWZmZXJUaGVuR2V0RXZlbnRzKCksc3VwZXIubmV4dCh0KX1fc3Vic2NyaWJlKHQpe2NvbnN0IGU9dGhpcy5faW5maW5pdGVUaW1lV2luZG93LG49ZT90aGlzLl9ldmVudHM6dGhpcy5fdHJpbUJ1ZmZlclRoZW5HZXRFdmVudHMoKSxvPXRoaXMuc2NoZWR1bGVyLGk9bi5sZW5ndGg7bGV0IGE7aWYodGhpcy5jbG9zZWQpdGhyb3cgbmV3IEM7aWYodGhpcy5pc1N0b3BwZWR8fHRoaXMuaGFzRXJyb3I/YT1sLkVNUFRZOih0aGlzLm9ic2VydmVycy5wdXNoKHQpLGE9bmV3IE0odGhpcyx0KSksbyYmdC5hZGQodD1uZXcgdHQodCxvKSksZSlmb3IobGV0IGU9MDtlPGkmJiF0LmNsb3NlZDtlKyspdC5uZXh0KG5bZV0pO2Vsc2UgZm9yKGxldCBlPTA7ZTxpJiYhdC5jbG9zZWQ7ZSsrKXQubmV4dChuW2VdLnZhbHVlKTtyZXR1cm4gdGhpcy5oYXNFcnJvcj90LmVycm9yKHRoaXMudGhyb3duRXJyb3IpOnRoaXMuaXNTdG9wcGVkJiZ0LmNvbXBsZXRlKCksYX1fZ2V0Tm93KCl7cmV0dXJuKHRoaXMuc2NoZWR1bGVyfHxqKS5ub3coKX1fdHJpbUJ1ZmZlclRoZW5HZXRFdmVudHMoKXtjb25zdCB0PXRoaXMuX2dldE5vdygpLGU9dGhpcy5fYnVmZmVyU2l6ZSxuPXRoaXMuX3dpbmRvd1RpbWUsbz10aGlzLl9ldmVudHMsaT1vLmxlbmd0aDtsZXQgYT0wO2Zvcig7YTxpJiYhKHQtb1thXS50aW1lPG4pOylhKys7cmV0dXJuIGk+ZSYmKGE9TWF0aC5tYXgoYSxpLWUpKSxhPjAmJm8uc3BsaWNlKDAsYSksb319Y2xhc3Mgb3R7Y29uc3RydWN0b3IodCxlKXt0aGlzLnRpbWU9dCx0aGlzLnZhbHVlPWV9fWxldCBpdCxhdD0xO2NvbnN0IHJ0PXt9O2Z1bmN0aW9uIHN0KHQpe3JldHVybiB0IGluIHJ0JiYoZGVsZXRlIHJ0W3RdLCEwKX1jb25zdCBsdD17c2V0SW1tZWRpYXRlKHQpe2NvbnN0IGU9YXQrKztyZXR1cm4gcnRbZV09ITAsaXR8fChpdD1Qcm9taXNlLnJlc29sdmUoKSksaXQudGhlbigoKCk9PnN0KGUpJiZ0KCkpKSxlfSxjbGVhckltbWVkaWF0ZSh0KXtzdCh0KX19LGN0PW5ldyBjbGFzcyBleHRlbmRzIFZ7Zmx1c2godCl7dGhpcy5hY3RpdmU9ITAsdGhpcy5zY2hlZHVsZWQ9dm9pZCAwO2NvbnN0e2FjdGlvbnM6ZX09dGhpcztsZXQgbixvPS0xLGk9ZS5sZW5ndGg7dD10fHxlLnNoaWZ0KCk7ZG97aWYobj10LmV4ZWN1dGUodC5zdGF0ZSx0LmRlbGF5KSlicmVha313aGlsZSgrK288aSYmKHQ9ZS5zaGlmdCgpKSk7aWYodGhpcy5hY3RpdmU9ITEsbil7Zm9yKDsrK288aSYmKHQ9ZS5zaGlmdCgpKTspdC51bnN1YnNjcmliZSgpO3Rocm93IG59fX0oY2xhc3MgZXh0ZW5kcyBMe2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCxlKSx0aGlzLnNjaGVkdWxlcj10LHRoaXMud29yaz1lfXJlcXVlc3RBc3luY0lkKHQsZSxuPTApe3JldHVybiBudWxsIT09biYmbj4wP3N1cGVyLnJlcXVlc3RBc3luY0lkKHQsZSxuKToodC5hY3Rpb25zLnB1c2godGhpcyksdC5zY2hlZHVsZWR8fCh0LnNjaGVkdWxlZD1sdC5zZXRJbW1lZGlhdGUodC5mbHVzaC5iaW5kKHQsdm9pZCAwKSkpKX1yZWN5Y2xlQXN5bmNJZCh0LGUsbj0wKXtpZihudWxsIT09biYmbj4wfHxudWxsPT09biYmdGhpcy5kZWxheT4wKXJldHVybiBzdXBlci5yZWN5Y2xlQXN5bmNJZCh0LGUsbik7MD09PXQuYWN0aW9ucy5sZW5ndGgmJihsdC5jbGVhckltbWVkaWF0ZShlKSx0LnNjaGVkdWxlZD12b2lkIDApfX0pLGR0PW5ldyBWKEwpLHB0PW5ldyBjbGFzcyBleHRlbmRzIFZ7Zmx1c2godCl7dGhpcy5hY3RpdmU9ITAsdGhpcy5zY2hlZHVsZWQ9dm9pZCAwO2NvbnN0e2FjdGlvbnM6ZX09dGhpcztsZXQgbixvPS0xLGk9ZS5sZW5ndGg7dD10fHxlLnNoaWZ0KCk7ZG97aWYobj10LmV4ZWN1dGUodC5zdGF0ZSx0LmRlbGF5KSlicmVha313aGlsZSgrK288aSYmKHQ9ZS5zaGlmdCgpKSk7aWYodGhpcy5hY3RpdmU9ITEsbil7Zm9yKDsrK288aSYmKHQ9ZS5zaGlmdCgpKTspdC51bnN1YnNjcmliZSgpO3Rocm93IG59fX0oY2xhc3MgZXh0ZW5kcyBMe2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCxlKSx0aGlzLnNjaGVkdWxlcj10LHRoaXMud29yaz1lfXJlcXVlc3RBc3luY0lkKHQsZSxuPTApe3JldHVybiBudWxsIT09biYmbj4wP3N1cGVyLnJlcXVlc3RBc3luY0lkKHQsZSxuKToodC5hY3Rpb25zLnB1c2godGhpcyksdC5zY2hlZHVsZWR8fCh0LnNjaGVkdWxlZD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCgpPT50LmZsdXNoKHZvaWQgMCkpKSkpfXJlY3ljbGVBc3luY0lkKHQsZSxuPTApe2lmKG51bGwhPT1uJiZuPjB8fG51bGw9PT1uJiZ0aGlzLmRlbGF5PjApcmV0dXJuIHN1cGVyLnJlY3ljbGVBc3luY0lkKHQsZSxuKTswPT09dC5hY3Rpb25zLmxlbmd0aCYmKGNhbmNlbEFuaW1hdGlvbkZyYW1lKGUpLHQuc2NoZWR1bGVkPXZvaWQgMCl9fSk7ZnVuY3Rpb24gbXQoKXt9ZnVuY3Rpb24gdXQodCl7cmV0dXJuISF0JiYodCBpbnN0YW5jZW9mIHl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0LmxpZnQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LnN1YnNjcmliZSl9Y29uc3QgZnQ9KCgpPT57ZnVuY3Rpb24gdCgpe3JldHVybiBFcnJvci5jYWxsKHRoaXMpLHRoaXMubWVzc2FnZT0ibm8gZWxlbWVudHMgaW4gc2VxdWVuY2UiLHRoaXMubmFtZT0iRW1wdHlFcnJvciIsdGhpc31yZXR1cm4gdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpLHR9KSgpLGd0PSgoKT0+e2Z1bmN0aW9uIHQoKXtyZXR1cm4gRXJyb3IuY2FsbCh0aGlzKSx0aGlzLm1lc3NhZ2U9ImFyZ3VtZW50IG91dCBvZiByYW5nZSIsdGhpcy5uYW1lPSJBcmd1bWVudE91dE9mUmFuZ2VFcnJvciIsdGhpc31yZXR1cm4gdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpLHR9KSgpO2Z1bmN0aW9uIGh0KHQsZSl7cmV0dXJuIGZ1bmN0aW9uIG4obyl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXJndW1lbnQgaXMgbm90IGEgZnVuY3Rpb24uIEFyZSB5b3UgbG9va2luZyBmb3IgYG1hcFRvKClgPyIpO3JldHVybiBvLmxpZnQobmV3IGJ0KHQsZSkpfX1jbGFzcyBidHtjb25zdHJ1Y3Rvcih0LGUpe3RoaXMucHJvamVjdD10LHRoaXMudGhpc0FyZz1lfWNhbGwodCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IHl0KHQsdGhpcy5wcm9qZWN0LHRoaXMudGhpc0FyZykpfX1jbGFzcyB5dCBleHRlbmRzIHB7Y29uc3RydWN0b3IodCxlLG4pe3N1cGVyKHQpLHRoaXMucHJvamVjdD1lLHRoaXMuY291bnQ9MCx0aGlzLnRoaXNBcmc9bnx8dGhpc31fbmV4dCh0KXtsZXQgZTt0cnl7ZT10aGlzLnByb2plY3QuY2FsbCh0aGlzLnRoaXNBcmcsdCx0aGlzLmNvdW50KyspfWNhdGNoKHQpe3JldHVybiB2b2lkIHRoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9dGhpcy5kZXN0aW5hdGlvbi5uZXh0KGUpfX1jbGFzcyBfdCBleHRlbmRzIHB7bm90aWZ5TmV4dCh0LGUsbixvLGkpe3RoaXMuZGVzdGluYXRpb24ubmV4dChlKX1ub3RpZnlFcnJvcih0LGUpe3RoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9bm90aWZ5Q29tcGxldGUodCl7dGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpfX1jbGFzcyBDdCBleHRlbmRzIHB7Y29uc3RydWN0b3IodCxlLG4pe3N1cGVyKCksdGhpcy5wYXJlbnQ9dCx0aGlzLm91dGVyVmFsdWU9ZSx0aGlzLm91dGVySW5kZXg9bix0aGlzLmluZGV4PTB9X25leHQodCl7dGhpcy5wYXJlbnQubm90aWZ5TmV4dCh0aGlzLm91dGVyVmFsdWUsdCx0aGlzLm91dGVySW5kZXgsdGhpcy5pbmRleCsrLHRoaXMpfV9lcnJvcih0KXt0aGlzLnBhcmVudC5ub3RpZnlFcnJvcih0LHRoaXMpLHRoaXMudW5zdWJzY3JpYmUoKX1fY29tcGxldGUoKXt0aGlzLnBhcmVudC5ub3RpZnlDb21wbGV0ZSh0aGlzKSx0aGlzLnVuc3Vic2NyaWJlKCl9fWNvbnN0IE10PShmdW5jdGlvbiB2dCgpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvcj9TeW1ib2wuaXRlcmF0b3I6IkBAaXRlcmF0b3IifSkoKSx4dD10PT50JiYibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RoJiYiZnVuY3Rpb24iIT10eXBlb2YgdDtmdW5jdGlvbiBPdCh0KXtyZXR1cm4hIXQmJiJmdW5jdGlvbiIhPXR5cGVvZiB0LnN1YnNjcmliZSYmImZ1bmN0aW9uIj09dHlwZW9mIHQudGhlbn1mdW5jdGlvbiBQdCh0KXtyZXR1cm4gZT0+eyhmdW5jdGlvbiBuKHQsZSl7dmFyIG4sbyxpLGE7cmV0dXJuKGZ1bmN0aW9uIHIodCxlLG4sbyl7cmV0dXJuIG5ldyhufHwobj1Qcm9taXNlKSkoKGZ1bmN0aW9uKGksYSl7ZnVuY3Rpb24gcih0KXt0cnl7bChvLm5leHQodCkpfWNhdGNoKHQpe2EodCl9fWZ1bmN0aW9uIHModCl7dHJ5e2woby50aHJvdyh0KSl9Y2F0Y2godCl7YSh0KX19ZnVuY3Rpb24gbCh0KXt0LmRvbmU/aSh0LnZhbHVlKTooZnVuY3Rpb24gZSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIG4/dDpuZXcgbigoZnVuY3Rpb24oZSl7ZSh0KX0pKX0pKHQudmFsdWUpLnRoZW4ocixzKX1sKChvPW8uYXBwbHkodCxlfHxbXSkpLm5leHQoKSl9KSl9KSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RyeXtmb3Iobj0oZnVuY3Rpb24gcih0KXtpZighU3ltYm9sLmFzeW5jSXRlcmF0b3IpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIik7dmFyIGUsbj10W1N5bWJvbC5hc3luY0l0ZXJhdG9yXTtyZXR1cm4gbj9uLmNhbGwodCk6KHQ9KGZ1bmN0aW9uIG8odCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yLG49ZSYmdFtlXSxvPTA7aWYobilyZXR1cm4gbi5jYWxsKHQpO2lmKHQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgpcmV0dXJue25leHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdCYmbz49dC5sZW5ndGgmJih0PXZvaWQgMCkse3ZhbHVlOnQmJnRbbysrXSxkb25lOiF0fX19O3Rocm93IG5ldyBUeXBlRXJyb3IoZT8iT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS4iOiJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIil9KSh0KSxlPXt9LGkoIm5leHQiKSxpKCJ0aHJvdyIpLGkoInJldHVybiIpLGVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGUpO2Z1bmN0aW9uIGkobil7ZVtuXT10W25dJiZmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKG8saSl7IShmdW5jdGlvbiBhKHQsZSxuLG8pe1Byb21pc2UucmVzb2x2ZShvKS50aGVuKChmdW5jdGlvbihlKXt0KHt2YWx1ZTplLGRvbmU6bn0pfSksZSl9KShvLGksKGU9dFtuXShlKSkuZG9uZSxlLnZhbHVlKX0pKX19fSkodCk7IShvPXlpZWxkIG4ubmV4dCgpKS5kb25lOyllLm5leHQoby52YWx1ZSl9Y2F0Y2godCl7aT17ZXJyb3I6dH19ZmluYWxseXt0cnl7byYmIW8uZG9uZSYmKGE9bi5yZXR1cm4pJiYoeWllbGQgYS5jYWxsKG4pKX1maW5hbGx5e2lmKGkpdGhyb3cgaS5lcnJvcn19ZS5jb21wbGV0ZSgpfSkpfSkodCxlKS5jYXRjaCgodD0+ZS5lcnJvcih0KSkpfX1jb25zdCB3dD10PT57aWYodCYmImZ1bmN0aW9uIj09dHlwZW9mIHRbdV0pcmV0dXJuIG49dCx0PT57Y29uc3QgZT1uW3VdKCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUuc3Vic2NyaWJlKXRocm93IG5ldyBUeXBlRXJyb3IoIlByb3ZpZGVkIG9iamVjdCBkb2VzIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50IFN5bWJvbC5vYnNlcnZhYmxlIik7cmV0dXJuIGUuc3Vic2NyaWJlKHQpfTtpZih4dCh0KSlyZXR1cm4gRyh0KTtpZihPdCh0KSlyZXR1cm4odD0+ZT0+KHQudGhlbigodD0+e2UuY2xvc2VkfHwoZS5uZXh0KHQpLGUuY29tcGxldGUoKSl9KSwodD0+ZS5lcnJvcih0KSkpLnRoZW4obnVsbCxvKSxlKSkodCk7aWYodCYmImZ1bmN0aW9uIj09dHlwZW9mIHRbTXRdKXJldHVybiBlPXQsdD0+e2NvbnN0IG49ZVtNdF0oKTtmb3IoOzspe2NvbnN0IGU9bi5uZXh0KCk7aWYoZS5kb25lKXt0LmNvbXBsZXRlKCk7YnJlYWt9aWYodC5uZXh0KGUudmFsdWUpLHQuY2xvc2VkKWJyZWFrfXJldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBuLnJldHVybiYmdC5hZGQoKCgpPT57bi5yZXR1cm4mJm4ucmV0dXJuKCl9KSksdH07aWYoU3ltYm9sJiZTeW1ib2wuYXN5bmNJdGVyYXRvciYmdCYmImZ1bmN0aW9uIj09dHlwZW9mIHRbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKXJldHVybiBQdCh0KTt7Y29uc3QgZT1yKHQpPyJhbiBpbnZhbGlkIG9iamVjdCI6YCcke3R9J2A7dGhyb3cgbmV3IFR5cGVFcnJvcihgWW91IHByb3ZpZGVkICR7ZX0gd2hlcmUgYSBzdHJlYW0gd2FzIGV4cGVjdGVkLiBZb3UgY2FuIHByb3ZpZGUgYW4gT2JzZXJ2YWJsZSwgUHJvbWlzZSwgQXJyYXksIG9yIEl0ZXJhYmxlLmApfXZhciBlLG59O2Z1bmN0aW9uIGt0KHQsZSxuLG8saT1uZXcgQ3QodCxuLG8pKXtpZighaS5jbG9zZWQpcmV0dXJuIGUgaW5zdGFuY2VvZiB5P2Uuc3Vic2NyaWJlKGkpOnd0KGUpKGkpfWNvbnN0IFN0PXt9O2Z1bmN0aW9uIER0KC4uLnQpe2xldCBlLG47cmV0dXJuIFcodFt0Lmxlbmd0aC0xXSkmJihuPXQucG9wKCkpLCJmdW5jdGlvbiI9PXR5cGVvZiB0W3QubGVuZ3RoLTFdJiYoZT10LnBvcCgpKSwxPT09dC5sZW5ndGgmJmEodFswXSkmJih0PXRbMF0pLHEodCxuKS5saWZ0KG5ldyBFdChlKSl9Y2xhc3MgRXR7Y29uc3RydWN0b3IodCl7dGhpcy5yZXN1bHRTZWxlY3Rvcj10fWNhbGwodCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IEF0KHQsdGhpcy5yZXN1bHRTZWxlY3RvcikpfX1jbGFzcyBBdCBleHRlbmRzIF90e2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCksdGhpcy5yZXN1bHRTZWxlY3Rvcj1lLHRoaXMuYWN0aXZlPTAsdGhpcy52YWx1ZXM9W10sdGhpcy5vYnNlcnZhYmxlcz1bXX1fbmV4dCh0KXt0aGlzLnZhbHVlcy5wdXNoKFN0KSx0aGlzLm9ic2VydmFibGVzLnB1c2godCl9X2NvbXBsZXRlKCl7Y29uc3QgdD10aGlzLm9ic2VydmFibGVzLGU9dC5sZW5ndGg7aWYoMD09PWUpdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpO2Vsc2V7dGhpcy5hY3RpdmU9ZSx0aGlzLnRvUmVzcG9uZD1lO2ZvcihsZXQgbj0wO248ZTtuKyspe2NvbnN0IGU9dFtuXTt0aGlzLmFkZChrdCh0aGlzLGUsZSxuKSl9fX1ub3RpZnlDb21wbGV0ZSh0KXswPT0odGhpcy5hY3RpdmUtPTEpJiZ0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCl9bm90aWZ5TmV4dCh0LGUsbixvLGkpe2NvbnN0IGE9dGhpcy52YWx1ZXMscj10aGlzLnRvUmVzcG9uZD9hW25dPT09U3Q/LS10aGlzLnRvUmVzcG9uZDp0aGlzLnRvUmVzcG9uZDowO2Fbbl09ZSwwPT09ciYmKHRoaXMucmVzdWx0U2VsZWN0b3I/dGhpcy5fdHJ5UmVzdWx0U2VsZWN0b3IoYSk6dGhpcy5kZXN0aW5hdGlvbi5uZXh0KGEuc2xpY2UoKSkpfV90cnlSZXN1bHRTZWxlY3Rvcih0KXtsZXQgZTt0cnl7ZT10aGlzLnJlc3VsdFNlbGVjdG9yLmFwcGx5KHRoaXMsdCl9Y2F0Y2godCl7cmV0dXJuIHZvaWQgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX10aGlzLmRlc3RpbmF0aW9uLm5leHQoZSl9fWZ1bmN0aW9uIFJ0KHQsZSl7cmV0dXJuIGU/KGZ1bmN0aW9uIG4odCxlKXtpZihudWxsIT10KXtpZigoZnVuY3Rpb24gbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIHRbdV19KSh0KSlyZXR1cm4oZnVuY3Rpb24gbyh0LGUpe3JldHVybiBuZXcgeSgobj0+e2NvbnN0IG89bmV3IGw7cmV0dXJuIG8uYWRkKGUuc2NoZWR1bGUoKCgpPT57Y29uc3QgaT10W3VdKCk7by5hZGQoaS5zdWJzY3JpYmUoe25leHQodCl7by5hZGQoZS5zY2hlZHVsZSgoKCk9Pm4ubmV4dCh0KSkpKX0sZXJyb3IodCl7by5hZGQoZS5zY2hlZHVsZSgoKCk9Pm4uZXJyb3IodCkpKSl9LGNvbXBsZXRlKCl7by5hZGQoZS5zY2hlZHVsZSgoKCk9Pm4uY29tcGxldGUoKSkpKX19KSl9KSkpLG99KSl9KSh0LGUpO2lmKE90KHQpKXJldHVybihmdW5jdGlvbiBpKHQsZSl7cmV0dXJuIG5ldyB5KChuPT57Y29uc3Qgbz1uZXcgbDtyZXR1cm4gby5hZGQoZS5zY2hlZHVsZSgoKCk9PnQudGhlbigodD0+e28uYWRkKGUuc2NoZWR1bGUoKCgpPT57bi5uZXh0KHQpLG8uYWRkKGUuc2NoZWR1bGUoKCgpPT5uLmNvbXBsZXRlKCkpKSl9KSkpfSksKHQ9PntvLmFkZChlLnNjaGVkdWxlKCgoKT0+bi5lcnJvcih0KSkpKX0pKSkpKSxvfSkpfSkodCxlKTtpZih4dCh0KSlyZXR1cm4gWSh0LGUpO2lmKChmdW5jdGlvbiBhKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgdFtNdF19KSh0KXx8InN0cmluZyI9PXR5cGVvZiB0KXJldHVybihmdW5jdGlvbiByKHQsZSl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKCJJdGVyYWJsZSBjYW5ub3QgYmUgbnVsbCIpO3JldHVybiBuZXcgeSgobj0+e2NvbnN0IG89bmV3IGw7bGV0IGk7cmV0dXJuIG8uYWRkKCgoKT0+e2kmJiJmdW5jdGlvbiI9PXR5cGVvZiBpLnJldHVybiYmaS5yZXR1cm4oKX0pKSxvLmFkZChlLnNjaGVkdWxlKCgoKT0+e2k9dFtNdF0oKSxvLmFkZChlLnNjaGVkdWxlKChmdW5jdGlvbigpe2lmKG4uY2xvc2VkKXJldHVybjtsZXQgdCxlO3RyeXtjb25zdCBuPWkubmV4dCgpO3Q9bi52YWx1ZSxlPW4uZG9uZX1jYXRjaCh0KXtyZXR1cm4gdm9pZCBuLmVycm9yKHQpfWU/bi5jb21wbGV0ZSgpOihuLm5leHQodCksdGhpcy5zY2hlZHVsZSgpKX0pKSl9KSkpLG99KSl9KSh0LGUpO2lmKFN5bWJvbCYmU3ltYm9sLmFzeW5jSXRlcmF0b3ImJiJmdW5jdGlvbiI9PXR5cGVvZiB0W1N5bWJvbC5hc3luY0l0ZXJhdG9yXSlyZXR1cm4oZnVuY3Rpb24gcyh0LGUpe2lmKCF0KXRocm93IG5ldyBFcnJvcigiSXRlcmFibGUgY2Fubm90IGJlIG51bGwiKTtyZXR1cm4gbmV3IHkoKG49Pntjb25zdCBvPW5ldyBsO3JldHVybiBvLmFkZChlLnNjaGVkdWxlKCgoKT0+e2NvbnN0IGk9dFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKTtvLmFkZChlLnNjaGVkdWxlKChmdW5jdGlvbigpe2kubmV4dCgpLnRoZW4oKHQ9Pnt0LmRvbmU/bi5jb21wbGV0ZSgpOihuLm5leHQodC52YWx1ZSksdGhpcy5zY2hlZHVsZSgpKX0pKX0pKSl9KSkpLG99KSl9KSh0LGUpfXRocm93IG5ldyBUeXBlRXJyb3IoKG51bGwhPT10JiZ0eXBlb2YgdHx8dCkrIiBpcyBub3Qgb2JzZXJ2YWJsZSIpfSkodCxlKTp0IGluc3RhbmNlb2YgeT90Om5ldyB5KHd0KHQpKX1mdW5jdGlvbiBUdCh0LGUsbj1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlP289Pm8ucGlwZShUdCgoKG4sbyk9PlJ0KHQobixvKSkucGlwZShodCgoKHQsaSk9PmUobix0LG8saSkpKSkpLG4pKTooIm51bWJlciI9PXR5cGVvZiBlJiYobj1lKSxlPT5lLmxpZnQobmV3IE50KHQsbikpKX1jbGFzcyBOdHtjb25zdHJ1Y3Rvcih0LGU9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKXt0aGlzLnByb2plY3Q9dCx0aGlzLmNvbmN1cnJlbnQ9ZX1jYWxsKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyBJdCh0LHRoaXMucHJvamVjdCx0aGlzLmNvbmN1cnJlbnQpKX19Y2xhc3MgSXQgZXh0ZW5kcyBfdHtjb25zdHJ1Y3Rvcih0LGUsbj1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpe3N1cGVyKHQpLHRoaXMucHJvamVjdD1lLHRoaXMuY29uY3VycmVudD1uLHRoaXMuaGFzQ29tcGxldGVkPSExLHRoaXMuYnVmZmVyPVtdLHRoaXMuYWN0aXZlPTAsdGhpcy5pbmRleD0wfV9uZXh0KHQpe3RoaXMuYWN0aXZlPHRoaXMuY29uY3VycmVudD90aGlzLl90cnlOZXh0KHQpOnRoaXMuYnVmZmVyLnB1c2godCl9X3RyeU5leHQodCl7bGV0IGU7Y29uc3Qgbj10aGlzLmluZGV4Kys7dHJ5e2U9dGhpcy5wcm9qZWN0KHQsbil9Y2F0Y2godCl7cmV0dXJuIHZvaWQgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX10aGlzLmFjdGl2ZSsrLHRoaXMuX2lubmVyU3ViKGUsdCxuKX1faW5uZXJTdWIodCxlLG4pe2NvbnN0IG89bmV3IEN0KHRoaXMsZSxuKSxpPXRoaXMuZGVzdGluYXRpb247aS5hZGQobyk7Y29uc3QgYT1rdCh0aGlzLHQsdm9pZCAwLHZvaWQgMCxvKTthIT09byYmaS5hZGQoYSl9X2NvbXBsZXRlKCl7dGhpcy5oYXNDb21wbGV0ZWQ9ITAsMD09PXRoaXMuYWN0aXZlJiYwPT09dGhpcy5idWZmZXIubGVuZ3RoJiZ0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCksdGhpcy51bnN1YnNjcmliZSgpfW5vdGlmeU5leHQodCxlLG4sbyxpKXt0aGlzLmRlc3RpbmF0aW9uLm5leHQoZSl9bm90aWZ5Q29tcGxldGUodCl7Y29uc3QgZT10aGlzLmJ1ZmZlcjt0aGlzLnJlbW92ZSh0KSx0aGlzLmFjdGl2ZS0tLGUubGVuZ3RoPjA/dGhpcy5fbmV4dChlLnNoaWZ0KCkpOjA9PT10aGlzLmFjdGl2ZSYmdGhpcy5oYXNDb21wbGV0ZWQmJnRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKX19ZnVuY3Rpb24genQodD1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpe3JldHVybiBUdChmLHQpfWZ1bmN0aW9uIEh0KC4uLnQpe3JldHVybihmdW5jdGlvbiBlKCl7cmV0dXJuIHp0KDEpfSkoKShaKC4uLnQpKX1mdW5jdGlvbiBGdCh0KXtyZXR1cm4gbmV3IHkoKGU9PntsZXQgbjt0cnl7bj10KCl9Y2F0Y2godCl7cmV0dXJuIHZvaWQgZS5lcnJvcih0KX1yZXR1cm4obj9SdChuKTpVKS5zdWJzY3JpYmUoZSl9KSl9ZnVuY3Rpb24gTHQoLi4udCl7aWYoMT09PXQubGVuZ3RoKXtjb25zdCBlPXRbMF07aWYoYShlKSlyZXR1cm4gQnQoZSxudWxsKTtpZihyKGUpJiZPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk9PT1PYmplY3QucHJvdG90eXBlKXtjb25zdCB0PU9iamVjdC5rZXlzKGUpO3JldHVybiBCdCh0Lm1hcCgodD0+ZVt0XSkpLHQpfX1pZigiZnVuY3Rpb24iPT10eXBlb2YgdFt0Lmxlbmd0aC0xXSl7Y29uc3QgZT10LnBvcCgpO3JldHVybiBCdCh0PTE9PT10Lmxlbmd0aCYmYSh0WzBdKT90WzBdOnQsbnVsbCkucGlwZShodCgodD0+ZSguLi50KSkpKX1yZXR1cm4gQnQodCxudWxsKX1mdW5jdGlvbiBCdCh0LGUpe3JldHVybiBuZXcgeSgobj0+e2NvbnN0IG89dC5sZW5ndGg7aWYoMD09PW8pcmV0dXJuIHZvaWQgbi5jb21wbGV0ZSgpO2NvbnN0IGk9bmV3IEFycmF5KG8pO2xldCBhPTAscj0wO2ZvcihsZXQgcz0wO3M8bztzKyspe2NvbnN0IGw9UnQodFtzXSk7bGV0IGM9ITE7bi5hZGQobC5zdWJzY3JpYmUoe25leHQ6dD0+e2N8fChjPSEwLHIrKyksaVtzXT10fSxlcnJvcjp0PT5uLmVycm9yKHQpLGNvbXBsZXRlOigpPT57YSsrLGEhPT1vJiZjfHwocj09PW8mJm4ubmV4dChlP2UucmVkdWNlKCgodCxlLG4pPT4odFtlXT1pW25dLHQpKSx7fSk6aSksbi5jb21wbGV0ZSgpKX19KSl9fSkpfWZ1bmN0aW9uIFZ0KGUsbixvLGkpe3JldHVybiB0KG8pJiYoaT1vLG89dm9pZCAwKSxpP1Z0KGUsbixvKS5waXBlKGh0KCh0PT5hKHQpP2koLi4udCk6aSh0KSkpKTpuZXcgeSgodD0+e2p0KGUsbiwoZnVuY3Rpb24gaShlKXt0Lm5leHQoYXJndW1lbnRzLmxlbmd0aD4xP0FycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk6ZSl9KSx0LG8pfSkpfWZ1bmN0aW9uIGp0KHQsZSxuLG8saSl7bGV0IGE7aWYoKGZ1bmN0aW9uIHIodCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LmFkZEV2ZW50TGlzdGVuZXImJiJmdW5jdGlvbiI9PXR5cGVvZiB0LnJlbW92ZUV2ZW50TGlzdGVuZXJ9KSh0KSl7Y29uc3Qgbz10O3QuYWRkRXZlbnRMaXN0ZW5lcihlLG4saSksYT0oKT0+by5yZW1vdmVFdmVudExpc3RlbmVyKGUsbixpKX1lbHNlIGlmKChmdW5jdGlvbiBzKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgdC5vbiYmImZ1bmN0aW9uIj09dHlwZW9mIHQub2ZmfSkodCkpe2NvbnN0IG89dDt0Lm9uKGUsbiksYT0oKT0+by5vZmYoZSxuKX1lbHNlIGlmKChmdW5jdGlvbiBsKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgdC5hZGRMaXN0ZW5lciYmImZ1bmN0aW9uIj09dHlwZW9mIHQucmVtb3ZlTGlzdGVuZXJ9KSh0KSl7Y29uc3Qgbz10O3QuYWRkTGlzdGVuZXIoZSxuKSxhPSgpPT5vLnJlbW92ZUxpc3RlbmVyKGUsbil9ZWxzZXtpZighdHx8IXQubGVuZ3RoKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgZXZlbnQgdGFyZ2V0Iik7Zm9yKGxldCBhPTAscj10Lmxlbmd0aDthPHI7YSsrKWp0KHRbYV0sZSxuLG8saSl9by5hZGQoYSl9ZnVuY3Rpb24gVXQodCl7cmV0dXJuIWEodCkmJnQtcGFyc2VGbG9hdCh0KSsxPj0wfWZ1bmN0aW9uIFd0KC4uLnQpe2xldCBlLG49TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLG89dFt0Lmxlbmd0aC0xXTtyZXR1cm4gVyhvKT8oZT10LnBvcCgpLHQubGVuZ3RoPjEmJiJudW1iZXIiPT10eXBlb2YgdFt0Lmxlbmd0aC0xXSYmKG49dC5wb3AoKSkpOiJudW1iZXIiPT10eXBlb2YgbyYmKG49dC5wb3AoKSksIWUmJjE9PT10Lmxlbmd0aCYmdFswXWluc3RhbmNlb2YgeT90WzBdOnp0KG4pKHEodCxlKSl9ZnVuY3Rpb24gR3QodCxlKXtyZXR1cm4gZnVuY3Rpb24gbihvKXtyZXR1cm4gby5saWZ0KG5ldyBZdCh0LGUpKX19Y2xhc3MgWXR7Y29uc3RydWN0b3IodCxlKXt0aGlzLnByZWRpY2F0ZT10LHRoaXMudGhpc0FyZz1lfWNhbGwodCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IHF0KHQsdGhpcy5wcmVkaWNhdGUsdGhpcy50aGlzQXJnKSl9fWNsYXNzIHF0IGV4dGVuZHMgcHtjb25zdHJ1Y3Rvcih0LGUsbil7c3VwZXIodCksdGhpcy5wcmVkaWNhdGU9ZSx0aGlzLnRoaXNBcmc9bix0aGlzLmNvdW50PTB9X25leHQodCl7bGV0IGU7dHJ5e2U9dGhpcy5wcmVkaWNhdGUuY2FsbCh0aGlzLnRoaXNBcmcsdCx0aGlzLmNvdW50KyspfWNhdGNoKHQpe3JldHVybiB2b2lkIHRoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9ZSYmdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHQpfX1mdW5jdGlvbiBadCh0PTAsZSxuKXtsZXQgbz0tMTtyZXR1cm4gVXQoZSk/bz1OdW1iZXIoZSk8MT8xOk51bWJlcihlKTpXKGUpJiYobj1lKSxXKG4pfHwobj1kdCksbmV3IHkoKGU9Pntjb25zdCBpPVV0KHQpP3Q6K3Qtbi5ub3coKTtyZXR1cm4gbi5zY2hlZHVsZShYdCxpLHtpbmRleDowLHBlcmlvZDpvLHN1YnNjcmliZXI6ZX0pfSkpfWZ1bmN0aW9uIFh0KHQpe2NvbnN0e2luZGV4OmUscGVyaW9kOm4sc3Vic2NyaWJlcjpvfT10O2lmKG8ubmV4dChlKSwhby5jbG9zZWQpe2lmKC0xPT09bilyZXR1cm4gby5jb21wbGV0ZSgpO3QuaW5kZXg9ZSsxLHRoaXMuc2NoZWR1bGUodCxuKX19Y2xhc3MgS3R7Y29uc3RydWN0b3IodCl7dGhpcy5yZXN1bHRTZWxlY3Rvcj10fWNhbGwodCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IEp0KHQsdGhpcy5yZXN1bHRTZWxlY3RvcikpfX1jbGFzcyBKdCBleHRlbmRzIHB7Y29uc3RydWN0b3IodCxlLG49T2JqZWN0LmNyZWF0ZShudWxsKSl7c3VwZXIodCksdGhpcy5pdGVyYXRvcnM9W10sdGhpcy5hY3RpdmU9MCx0aGlzLnJlc3VsdFNlbGVjdG9yPWUsdGhpcy52YWx1ZXM9bn1fbmV4dCh0KXtjb25zdCBlPXRoaXMuaXRlcmF0b3JzO2EodCk/ZS5wdXNoKG5ldyAkdCh0KSk6ZS5wdXNoKCJmdW5jdGlvbiI9PXR5cGVvZiB0W010XT9uZXcgUXQodFtNdF0oKSk6bmV3IHRlKHRoaXMuZGVzdGluYXRpb24sdGhpcyx0KSl9X2NvbXBsZXRlKCl7Y29uc3QgdD10aGlzLml0ZXJhdG9ycyxlPXQubGVuZ3RoO2lmKHRoaXMudW5zdWJzY3JpYmUoKSwwIT09ZSl7dGhpcy5hY3RpdmU9ZTtmb3IobGV0IG49MDtuPGU7bisrKXtsZXQgZT10W25dO2Uuc3RpbGxVbnN1YnNjcmliZWQ/dGhpcy5kZXN0aW5hdGlvbi5hZGQoZS5zdWJzY3JpYmUoZSxuKSk6dGhpcy5hY3RpdmUtLX19ZWxzZSB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCl9bm90aWZ5SW5hY3RpdmUoKXt0aGlzLmFjdGl2ZS0tLDA9PT10aGlzLmFjdGl2ZSYmdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpfWNoZWNrSXRlcmF0b3JzKCl7Y29uc3QgdD10aGlzLml0ZXJhdG9ycyxlPXQubGVuZ3RoLG49dGhpcy5kZXN0aW5hdGlvbjtmb3IobGV0IG49MDtuPGU7bisrKXtsZXQgZT10W25dO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlLmhhc1ZhbHVlJiYhZS5oYXNWYWx1ZSgpKXJldHVybn1sZXQgbz0hMTtjb25zdCBpPVtdO2ZvcihsZXQgYT0wO2E8ZTthKyspe2xldCBlPXRbYV0scj1lLm5leHQoKTtpZihlLmhhc0NvbXBsZXRlZCgpJiYobz0hMCksci5kb25lKXJldHVybiB2b2lkIG4uY29tcGxldGUoKTtpLnB1c2goci52YWx1ZSl9dGhpcy5yZXN1bHRTZWxlY3Rvcj90aGlzLl90cnlyZXN1bHRTZWxlY3RvcihpKTpuLm5leHQoaSksbyYmbi5jb21wbGV0ZSgpfV90cnlyZXN1bHRTZWxlY3Rvcih0KXtsZXQgZTt0cnl7ZT10aGlzLnJlc3VsdFNlbGVjdG9yLmFwcGx5KHRoaXMsdCl9Y2F0Y2godCl7cmV0dXJuIHZvaWQgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX10aGlzLmRlc3RpbmF0aW9uLm5leHQoZSl9fWNsYXNzIFF0e2NvbnN0cnVjdG9yKHQpe3RoaXMuaXRlcmF0b3I9dCx0aGlzLm5leHRSZXN1bHQ9dC5uZXh0KCl9aGFzVmFsdWUoKXtyZXR1cm4hMH1uZXh0KCl7Y29uc3QgdD10aGlzLm5leHRSZXN1bHQ7cmV0dXJuIHRoaXMubmV4dFJlc3VsdD10aGlzLml0ZXJhdG9yLm5leHQoKSx0fWhhc0NvbXBsZXRlZCgpe2NvbnN0IHQ9dGhpcy5uZXh0UmVzdWx0O3JldHVybiB0JiYhIXQuZG9uZX19Y2xhc3MgJHR7Y29uc3RydWN0b3IodCl7dGhpcy5hcnJheT10LHRoaXMuaW5kZXg9MCx0aGlzLmxlbmd0aD0wLHRoaXMubGVuZ3RoPXQubGVuZ3RofVtNdF0oKXtyZXR1cm4gdGhpc31uZXh0KHQpe2NvbnN0IGU9dGhpcy5pbmRleCsrO3JldHVybiBlPHRoaXMubGVuZ3RoP3t2YWx1ZTp0aGlzLmFycmF5W2VdLGRvbmU6ITF9Ont2YWx1ZTpudWxsLGRvbmU6ITB9fWhhc1ZhbHVlKCl7cmV0dXJuIHRoaXMuYXJyYXkubGVuZ3RoPnRoaXMuaW5kZXh9aGFzQ29tcGxldGVkKCl7cmV0dXJuIHRoaXMuYXJyYXkubGVuZ3RoPT09dGhpcy5pbmRleH19Y2xhc3MgdGUgZXh0ZW5kcyBfdHtjb25zdHJ1Y3Rvcih0LGUsbil7c3VwZXIodCksdGhpcy5wYXJlbnQ9ZSx0aGlzLm9ic2VydmFibGU9bix0aGlzLnN0aWxsVW5zdWJzY3JpYmVkPSEwLHRoaXMuYnVmZmVyPVtdLHRoaXMuaXNDb21wbGV0ZT0hMX1bTXRdKCl7cmV0dXJuIHRoaXN9bmV4dCgpe2NvbnN0IHQ9dGhpcy5idWZmZXI7cmV0dXJuIDA9PT10Lmxlbmd0aCYmdGhpcy5pc0NvbXBsZXRlP3t2YWx1ZTpudWxsLGRvbmU6ITB9Ont2YWx1ZTp0LnNoaWZ0KCksZG9uZTohMX19aGFzVmFsdWUoKXtyZXR1cm4gdGhpcy5idWZmZXIubGVuZ3RoPjB9aGFzQ29tcGxldGVkKCl7cmV0dXJuIDA9PT10aGlzLmJ1ZmZlci5sZW5ndGgmJnRoaXMuaXNDb21wbGV0ZX1ub3RpZnlDb21wbGV0ZSgpe3RoaXMuYnVmZmVyLmxlbmd0aD4wPyh0aGlzLmlzQ29tcGxldGU9ITAsdGhpcy5wYXJlbnQubm90aWZ5SW5hY3RpdmUoKSk6dGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpfW5vdGlmeU5leHQodCxlLG4sbyxpKXt0aGlzLmJ1ZmZlci5wdXNoKGUpLHRoaXMucGFyZW50LmNoZWNrSXRlcmF0b3JzKCl9c3Vic2NyaWJlKHQsZSl7cmV0dXJuIGt0KHRoaXMsdGhpcy5vYnNlcnZhYmxlLHRoaXMsZSl9fWNsYXNzIGVle2NvbnN0cnVjdG9yKHQpe3RoaXMuZHVyYXRpb25TZWxlY3Rvcj10fWNhbGwodCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IG5lKHQsdGhpcy5kdXJhdGlvblNlbGVjdG9yKSl9fWNsYXNzIG5lIGV4dGVuZHMgX3R7Y29uc3RydWN0b3IodCxlKXtzdXBlcih0KSx0aGlzLmR1cmF0aW9uU2VsZWN0b3I9ZSx0aGlzLnZhbHVlPW51bGwsdGhpcy5oYXNWYWx1ZT0hMSx0aGlzLnRocm90dGxlZD1udWxsfV9uZXh0KHQpe2lmKHRoaXMudmFsdWU9dCx0aGlzLmhhc1ZhbHVlPSEwLCF0aGlzLnRocm90dGxlZCl7bGV0IGU7dHJ5e2NvbnN0e2R1cmF0aW9uU2VsZWN0b3I6bn09dGhpcztlPW4odCl9Y2F0Y2godCl7cmV0dXJuIHRoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9Y29uc3Qgbj1rdCh0aGlzLGUpOyFufHxuLmNsb3NlZD90aGlzLmNsZWFyVGhyb3R0bGUoKTp0aGlzLmFkZCh0aGlzLnRocm90dGxlZD1uKX19Y2xlYXJUaHJvdHRsZSgpe2NvbnN0e3ZhbHVlOnQsaGFzVmFsdWU6ZSx0aHJvdHRsZWQ6bn09dGhpcztuJiYodGhpcy5yZW1vdmUobiksdGhpcy50aHJvdHRsZWQ9bnVsbCxuLnVuc3Vic2NyaWJlKCkpLGUmJih0aGlzLnZhbHVlPW51bGwsdGhpcy5oYXNWYWx1ZT0hMSx0aGlzLmRlc3RpbmF0aW9uLm5leHQodCkpfW5vdGlmeU5leHQodCxlLG4sbyl7dGhpcy5jbGVhclRocm90dGxlKCl9bm90aWZ5Q29tcGxldGUoKXt0aGlzLmNsZWFyVGhyb3R0bGUoKX19ZnVuY3Rpb24gb2UodCxlPWR0KXtyZXR1cm4oZnVuY3Rpb24gbih0KXtyZXR1cm4gZnVuY3Rpb24gZShuKXtyZXR1cm4gbi5saWZ0KG5ldyBlZSh0KSl9fSkoKCgpPT5adCh0LGUpKSl9Y2xhc3MgaWV7Y29uc3RydWN0b3IodCl7dGhpcy5jbG9zaW5nTm90aWZpZXI9dH1jYWxsKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyBhZSh0LHRoaXMuY2xvc2luZ05vdGlmaWVyKSl9fWNsYXNzIGFlIGV4dGVuZHMgX3R7Y29uc3RydWN0b3IodCxlKXtzdXBlcih0KSx0aGlzLmJ1ZmZlcj1bXSx0aGlzLmFkZChrdCh0aGlzLGUpKX1fbmV4dCh0KXt0aGlzLmJ1ZmZlci5wdXNoKHQpfW5vdGlmeU5leHQodCxlLG4sbyxpKXtjb25zdCBhPXRoaXMuYnVmZmVyO3RoaXMuYnVmZmVyPVtdLHRoaXMuZGVzdGluYXRpb24ubmV4dChhKX19ZnVuY3Rpb24gcmUodCl7cmV0dXJuIGZ1bmN0aW9uIGUobil7Y29uc3Qgbz1uZXcgc2UodCksaT1uLmxpZnQobyk7cmV0dXJuIG8uY2F1Z2h0PWl9fWNsYXNzIHNle2NvbnN0cnVjdG9yKHQpe3RoaXMuc2VsZWN0b3I9dH1jYWxsKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyBsZSh0LHRoaXMuc2VsZWN0b3IsdGhpcy5jYXVnaHQpKX19Y2xhc3MgbGUgZXh0ZW5kcyBfdHtjb25zdHJ1Y3Rvcih0LGUsbil7c3VwZXIodCksdGhpcy5zZWxlY3Rvcj1lLHRoaXMuY2F1Z2h0PW59ZXJyb3IodCl7aWYoIXRoaXMuaXNTdG9wcGVkKXtsZXQgZTt0cnl7ZT10aGlzLnNlbGVjdG9yKHQsdGhpcy5jYXVnaHQpfWNhdGNoKHQpe3JldHVybiB2b2lkIHN1cGVyLmVycm9yKHQpfXRoaXMuX3Vuc3Vic2NyaWJlQW5kUmVjeWNsZSgpO2NvbnN0IG49bmV3IEN0KHRoaXMsdm9pZCAwLHZvaWQgMCk7dGhpcy5hZGQobik7Y29uc3Qgbz1rdCh0aGlzLGUsdm9pZCAwLHZvaWQgMCxuKTtvIT09biYmdGhpcy5hZGQobyl9fX1mdW5jdGlvbiBjZSguLi50KXtyZXR1cm4oZnVuY3Rpb24gZSguLi50KXtsZXQgZTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdFt0Lmxlbmd0aC0xXSYmKGU9dC5wb3AoKSksMT09PXQubGVuZ3RoJiZhKHRbMF0pJiYodD10WzBdLnNsaWNlKCkpLG49Pm4ubGlmdC5jYWxsKFJ0KFtuLC4uLnRdKSxuZXcgRXQoZSkpfSkoLi4udCl9ZnVuY3Rpb24gZGUodCxlPWR0KXtyZXR1cm4gbj0+bi5saWZ0KG5ldyBwZSh0LGUpKX1jbGFzcyBwZXtjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuZHVlVGltZT10LHRoaXMuc2NoZWR1bGVyPWV9Y2FsbCh0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgbWUodCx0aGlzLmR1ZVRpbWUsdGhpcy5zY2hlZHVsZXIpKX19Y2xhc3MgbWUgZXh0ZW5kcyBwe2NvbnN0cnVjdG9yKHQsZSxuKXtzdXBlcih0KSx0aGlzLmR1ZVRpbWU9ZSx0aGlzLnNjaGVkdWxlcj1uLHRoaXMuZGVib3VuY2VkU3Vic2NyaXB0aW9uPW51bGwsdGhpcy5sYXN0VmFsdWU9bnVsbCx0aGlzLmhhc1ZhbHVlPSExfV9uZXh0KHQpe3RoaXMuY2xlYXJEZWJvdW5jZSgpLHRoaXMubGFzdFZhbHVlPXQsdGhpcy5oYXNWYWx1ZT0hMCx0aGlzLmFkZCh0aGlzLmRlYm91bmNlZFN1YnNjcmlwdGlvbj10aGlzLnNjaGVkdWxlci5zY2hlZHVsZSh1ZSx0aGlzLmR1ZVRpbWUsdGhpcykpfV9jb21wbGV0ZSgpe3RoaXMuZGVib3VuY2VkTmV4dCgpLHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKX1kZWJvdW5jZWROZXh0KCl7aWYodGhpcy5jbGVhckRlYm91bmNlKCksdGhpcy5oYXNWYWx1ZSl7Y29uc3R7bGFzdFZhbHVlOnR9PXRoaXM7dGhpcy5sYXN0VmFsdWU9bnVsbCx0aGlzLmhhc1ZhbHVlPSExLHRoaXMuZGVzdGluYXRpb24ubmV4dCh0KX19Y2xlYXJEZWJvdW5jZSgpe2NvbnN0IHQ9dGhpcy5kZWJvdW5jZWRTdWJzY3JpcHRpb247bnVsbCE9PXQmJih0aGlzLnJlbW92ZSh0KSx0LnVuc3Vic2NyaWJlKCksdGhpcy5kZWJvdW5jZWRTdWJzY3JpcHRpb249bnVsbCl9fWZ1bmN0aW9uIHVlKHQpe3QuZGVib3VuY2VkTmV4dCgpfWZ1bmN0aW9uIGZlKHQ9bnVsbCl7cmV0dXJuIGU9PmUubGlmdChuZXcgZ2UodCkpfWNsYXNzIGdle2NvbnN0cnVjdG9yKHQpe3RoaXMuZGVmYXVsdFZhbHVlPXR9Y2FsbCh0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgaGUodCx0aGlzLmRlZmF1bHRWYWx1ZSkpfX1jbGFzcyBoZSBleHRlbmRzIHB7Y29uc3RydWN0b3IodCxlKXtzdXBlcih0KSx0aGlzLmRlZmF1bHRWYWx1ZT1lLHRoaXMuaXNFbXB0eT0hMH1fbmV4dCh0KXt0aGlzLmlzRW1wdHk9ITEsdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHQpfV9jb21wbGV0ZSgpe3RoaXMuaXNFbXB0eSYmdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHRoaXMuZGVmYXVsdFZhbHVlKSx0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCl9fWZ1bmN0aW9uIGJlKHQsZT1kdCl7Y29uc3Qgbj0oZnVuY3Rpb24gbyh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIERhdGUmJiFpc05hTigrdCl9KSh0KT8rdC1lLm5vdygpOk1hdGguYWJzKHQpO3JldHVybiB0PT50LmxpZnQobmV3IHllKG4sZSkpfWNsYXNzIHlle2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5kZWxheT10LHRoaXMuc2NoZWR1bGVyPWV9Y2FsbCh0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgX2UodCx0aGlzLmRlbGF5LHRoaXMuc2NoZWR1bGVyKSl9fWNsYXNzIF9lIGV4dGVuZHMgcHtjb25zdHJ1Y3Rvcih0LGUsbil7c3VwZXIodCksdGhpcy5kZWxheT1lLHRoaXMuc2NoZWR1bGVyPW4sdGhpcy5xdWV1ZT1bXSx0aGlzLmFjdGl2ZT0hMSx0aGlzLmVycm9yZWQ9ITF9c3RhdGljIGRpc3BhdGNoKHQpe2NvbnN0IGU9dC5zb3VyY2Usbj1lLnF1ZXVlLG89dC5zY2hlZHVsZXIsaT10LmRlc3RpbmF0aW9uO2Zvcig7bi5sZW5ndGg+MCYmblswXS50aW1lLW8ubm93KCk8PTA7KW4uc2hpZnQoKS5ub3RpZmljYXRpb24ub2JzZXJ2ZShpKTtpZihuLmxlbmd0aD4wKXtjb25zdCBlPU1hdGgubWF4KDAsblswXS50aW1lLW8ubm93KCkpO3RoaXMuc2NoZWR1bGUodCxlKX1lbHNlIGUuaXNTdG9wcGVkPyhlLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCksZS5hY3RpdmU9ITEpOih0aGlzLnVuc3Vic2NyaWJlKCksZS5hY3RpdmU9ITEpfV9zY2hlZHVsZSh0KXt0aGlzLmFjdGl2ZT0hMCx0aGlzLmRlc3RpbmF0aW9uLmFkZCh0LnNjaGVkdWxlKF9lLmRpc3BhdGNoLHRoaXMuZGVsYXkse3NvdXJjZTp0aGlzLGRlc3RpbmF0aW9uOnRoaXMuZGVzdGluYXRpb24sc2NoZWR1bGVyOnR9KSl9c2NoZWR1bGVOb3RpZmljYXRpb24odCl7aWYoITA9PT10aGlzLmVycm9yZWQpcmV0dXJuO2NvbnN0IGU9dGhpcy5zY2hlZHVsZXIsbj1uZXcgQ2UoZS5ub3coKSt0aGlzLmRlbGF5LHQpO3RoaXMucXVldWUucHVzaChuKSwhMT09PXRoaXMuYWN0aXZlJiZ0aGlzLl9zY2hlZHVsZShlKX1fbmV4dCh0KXt0aGlzLnNjaGVkdWxlTm90aWZpY2F0aW9uKFEuY3JlYXRlTmV4dCh0KSl9X2Vycm9yKHQpe3RoaXMuZXJyb3JlZD0hMCx0aGlzLnF1ZXVlPVtdLHRoaXMuZGVzdGluYXRpb24uZXJyb3IodCksdGhpcy51bnN1YnNjcmliZSgpfV9jb21wbGV0ZSgpezA9PT10aGlzLnF1ZXVlLmxlbmd0aCYmdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpLHRoaXMudW5zdWJzY3JpYmUoKX19Y2xhc3MgQ2V7Y29uc3RydWN0b3IodCxlKXt0aGlzLnRpbWU9dCx0aGlzLm5vdGlmaWNhdGlvbj1lfX1jbGFzcyBNZXtjb25zdHJ1Y3Rvcih0KXt0aGlzLmRlbGF5RHVyYXRpb25TZWxlY3Rvcj10fWNhbGwodCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IHZlKHQsdGhpcy5kZWxheUR1cmF0aW9uU2VsZWN0b3IpKX19Y2xhc3MgdmUgZXh0ZW5kcyBfdHtjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQpLHRoaXMuZGVsYXlEdXJhdGlvblNlbGVjdG9yPWUsdGhpcy5jb21wbGV0ZWQ9ITEsdGhpcy5kZWxheU5vdGlmaWVyU3Vic2NyaXB0aW9ucz1bXSx0aGlzLmluZGV4PTB9bm90aWZ5TmV4dCh0LGUsbixvLGkpe3RoaXMuZGVzdGluYXRpb24ubmV4dCh0KSx0aGlzLnJlbW92ZVN1YnNjcmlwdGlvbihpKSx0aGlzLnRyeUNvbXBsZXRlKCl9bm90aWZ5RXJyb3IodCxlKXt0aGlzLl9lcnJvcih0KX1ub3RpZnlDb21wbGV0ZSh0KXtjb25zdCBlPXRoaXMucmVtb3ZlU3Vic2NyaXB0aW9uKHQpO2UmJnRoaXMuZGVzdGluYXRpb24ubmV4dChlKSx0aGlzLnRyeUNvbXBsZXRlKCl9X25leHQodCl7Y29uc3QgZT10aGlzLmluZGV4Kys7dHJ5e2NvbnN0IG49dGhpcy5kZWxheUR1cmF0aW9uU2VsZWN0b3IodCxlKTtuJiZ0aGlzLnRyeURlbGF5KG4sdCl9Y2F0Y2godCl7dGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX19X2NvbXBsZXRlKCl7dGhpcy5jb21wbGV0ZWQ9ITAsdGhpcy50cnlDb21wbGV0ZSgpLHRoaXMudW5zdWJzY3JpYmUoKX1yZW1vdmVTdWJzY3JpcHRpb24odCl7dC51bnN1YnNjcmliZSgpO2NvbnN0IGU9dGhpcy5kZWxheU5vdGlmaWVyU3Vic2NyaXB0aW9ucy5pbmRleE9mKHQpO3JldHVybi0xIT09ZSYmdGhpcy5kZWxheU5vdGlmaWVyU3Vic2NyaXB0aW9ucy5zcGxpY2UoZSwxKSx0Lm91dGVyVmFsdWV9dHJ5RGVsYXkodCxlKXtjb25zdCBuPWt0KHRoaXMsdCxlKTtuJiYhbi5jbG9zZWQmJih0aGlzLmRlc3RpbmF0aW9uLmFkZChuKSx0aGlzLmRlbGF5Tm90aWZpZXJTdWJzY3JpcHRpb25zLnB1c2gobikpfXRyeUNvbXBsZXRlKCl7dGhpcy5jb21wbGV0ZWQmJjA9PT10aGlzLmRlbGF5Tm90aWZpZXJTdWJzY3JpcHRpb25zLmxlbmd0aCYmdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpfX1jbGFzcyB4ZSBleHRlbmRzIHl7Y29uc3RydWN0b3IodCxlKXtzdXBlcigpLHRoaXMuc291cmNlPXQsdGhpcy5zdWJzY3JpcHRpb25EZWxheT1lfV9zdWJzY3JpYmUodCl7dGhpcy5zdWJzY3JpcHRpb25EZWxheS5zdWJzY3JpYmUobmV3IE9lKHQsdGhpcy5zb3VyY2UpKX19Y2xhc3MgT2UgZXh0ZW5kcyBwe2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIoKSx0aGlzLnBhcmVudD10LHRoaXMuc291cmNlPWUsdGhpcy5zb3VyY2VTdWJzY3JpYmVkPSExfV9uZXh0KHQpe3RoaXMuc3Vic2NyaWJlVG9Tb3VyY2UoKX1fZXJyb3IodCl7dGhpcy51bnN1YnNjcmliZSgpLHRoaXMucGFyZW50LmVycm9yKHQpfV9jb21wbGV0ZSgpe3RoaXMudW5zdWJzY3JpYmUoKSx0aGlzLnN1YnNjcmliZVRvU291cmNlKCl9c3Vic2NyaWJlVG9Tb3VyY2UoKXt0aGlzLnNvdXJjZVN1YnNjcmliZWR8fCh0aGlzLnNvdXJjZVN1YnNjcmliZWQ9ITAsdGhpcy51bnN1YnNjcmliZSgpLHRoaXMuc291cmNlLnN1YnNjcmliZSh0aGlzLnBhcmVudCkpfX1jbGFzcyBQZXtjYWxsKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyB3ZSh0KSl9fWNsYXNzIHdlIGV4dGVuZHMgcHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1fbmV4dCh0KXt0Lm9ic2VydmUodGhpcy5kZXN0aW5hdGlvbil9fWZ1bmN0aW9uIGtlKHQsZSl7cmV0dXJuIG49Pm4ubGlmdChuZXcgU2UodCxlKSl9Y2xhc3MgU2V7Y29uc3RydWN0b3IodCxlKXt0aGlzLmNvbXBhcmU9dCx0aGlzLmtleVNlbGVjdG9yPWV9Y2FsbCh0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgRGUodCx0aGlzLmNvbXBhcmUsdGhpcy5rZXlTZWxlY3RvcikpfX1jbGFzcyBEZSBleHRlbmRzIHB7Y29uc3RydWN0b3IodCxlLG4pe3N1cGVyKHQpLHRoaXMua2V5U2VsZWN0b3I9bix0aGlzLmhhc0tleT0hMSwiZnVuY3Rpb24iPT10eXBlb2YgZSYmKHRoaXMuY29tcGFyZT1lKX1jb21wYXJlKHQsZSl7cmV0dXJuIHQ9PT1lfV9uZXh0KHQpe2xldCBlO3RyeXtjb25zdHtrZXlTZWxlY3RvcjpufT10aGlzO2U9bj9uKHQpOnR9Y2F0Y2godCl7cmV0dXJuIHRoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9bGV0IG49ITE7aWYodGhpcy5oYXNLZXkpdHJ5e2NvbnN0e2NvbXBhcmU6dH09dGhpcztuPXQodGhpcy5rZXksZSl9Y2F0Y2godCl7cmV0dXJuIHRoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9ZWxzZSB0aGlzLmhhc0tleT0hMDtufHwodGhpcy5rZXk9ZSx0aGlzLmRlc3RpbmF0aW9uLm5leHQodCkpfX1mdW5jdGlvbiBFZSh0PVRlKXtyZXR1cm4gZT0+ZS5saWZ0KG5ldyBBZSh0KSl9Y2xhc3MgQWV7Y29uc3RydWN0b3IodCl7dGhpcy5lcnJvckZhY3Rvcnk9dH1jYWxsKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyBSZSh0LHRoaXMuZXJyb3JGYWN0b3J5KSl9fWNsYXNzIFJlIGV4dGVuZHMgcHtjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQpLHRoaXMuZXJyb3JGYWN0b3J5PWUsdGhpcy5oYXNWYWx1ZT0hMX1fbmV4dCh0KXt0aGlzLmhhc1ZhbHVlPSEwLHRoaXMuZGVzdGluYXRpb24ubmV4dCh0KX1fY29tcGxldGUoKXtpZih0aGlzLmhhc1ZhbHVlKXJldHVybiB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7e2xldCB0O3RyeXt0PXRoaXMuZXJyb3JGYWN0b3J5KCl9Y2F0Y2goZSl7dD1lfXRoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9fX1mdW5jdGlvbiBUZSgpe3JldHVybiBuZXcgZnR9ZnVuY3Rpb24gTmUodCl7cmV0dXJuIGU9PjA9PT10P1U6ZS5saWZ0KG5ldyBJZSh0KSl9Y2xhc3MgSWV7Y29uc3RydWN0b3IodCl7aWYodGhpcy50b3RhbD10LHRoaXMudG90YWw8MCl0aHJvdyBuZXcgZ3R9Y2FsbCh0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgemUodCx0aGlzLnRvdGFsKSl9fWNsYXNzIHplIGV4dGVuZHMgcHtjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQpLHRoaXMudG90YWw9ZSx0aGlzLmNvdW50PTB9X25leHQodCl7Y29uc3QgZT10aGlzLnRvdGFsLG49Kyt0aGlzLmNvdW50O248PWUmJih0aGlzLmRlc3RpbmF0aW9uLm5leHQodCksbj09PWUmJih0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCksdGhpcy51bnN1YnNjcmliZSgpKSl9fWZ1bmN0aW9uIEhlKHQsZSl7cmV0dXJuIGU/bj0+bi5waXBlKEhlKCgobixvKT0+UnQodChuLG8pKS5waXBlKGh0KCgodCxpKT0+ZShuLHQsbyxpKSkpKSkpKTplPT5lLmxpZnQobmV3IEZlKHQpKX1jbGFzcyBGZXtjb25zdHJ1Y3Rvcih0KXt0aGlzLnByb2plY3Q9dH1jYWxsKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyBMZSh0LHRoaXMucHJvamVjdCkpfX1jbGFzcyBMZSBleHRlbmRzIF90e2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCksdGhpcy5wcm9qZWN0PWUsdGhpcy5oYXNTdWJzY3JpcHRpb249ITEsdGhpcy5oYXNDb21wbGV0ZWQ9ITEsdGhpcy5pbmRleD0wfV9uZXh0KHQpe3RoaXMuaGFzU3Vic2NyaXB0aW9ufHx0aGlzLnRyeU5leHQodCl9dHJ5TmV4dCh0KXtsZXQgZTtjb25zdCBuPXRoaXMuaW5kZXgrKzt0cnl7ZT10aGlzLnByb2plY3QodCxuKX1jYXRjaCh0KXtyZXR1cm4gdm9pZCB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKHQpfXRoaXMuaGFzU3Vic2NyaXB0aW9uPSEwLHRoaXMuX2lubmVyU3ViKGUsdCxuKX1faW5uZXJTdWIodCxlLG4pe2NvbnN0IG89bmV3IEN0KHRoaXMsZSxuKSxpPXRoaXMuZGVzdGluYXRpb247aS5hZGQobyk7Y29uc3QgYT1rdCh0aGlzLHQsdm9pZCAwLHZvaWQgMCxvKTthIT09byYmaS5hZGQoYSl9X2NvbXBsZXRlKCl7dGhpcy5oYXNDb21wbGV0ZWQ9ITAsdGhpcy5oYXNTdWJzY3JpcHRpb258fHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKSx0aGlzLnVuc3Vic2NyaWJlKCl9bm90aWZ5TmV4dCh0LGUsbixvLGkpe3RoaXMuZGVzdGluYXRpb24ubmV4dChlKX1ub3RpZnlFcnJvcih0KXt0aGlzLmRlc3RpbmF0aW9uLmVycm9yKHQpfW5vdGlmeUNvbXBsZXRlKHQpe3RoaXMuZGVzdGluYXRpb24ucmVtb3ZlKHQpLHRoaXMuaGFzU3Vic2NyaXB0aW9uPSExLHRoaXMuaGFzQ29tcGxldGVkJiZ0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCl9fWNsYXNzIEJle2NvbnN0cnVjdG9yKHQpe3RoaXMuY2FsbGJhY2s9dH1jYWxsKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyBWZSh0LHRoaXMuY2FsbGJhY2spKX19Y2xhc3MgVmUgZXh0ZW5kcyBwe2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCksdGhpcy5hZGQobmV3IGwoZSkpfX1jbGFzcyBqZXtjYWxsKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyBVZSh0KSl9fWNsYXNzIFVlIGV4dGVuZHMgcHtfbmV4dCh0KXt9fWZ1bmN0aW9uIFdlKHQpe3JldHVybiBmdW5jdGlvbiBlKG4pe3JldHVybiAwPT09dD9VOm4ubGlmdChuZXcgR2UodCkpfX1jbGFzcyBHZXtjb25zdHJ1Y3Rvcih0KXtpZih0aGlzLnRvdGFsPXQsdGhpcy50b3RhbDwwKXRocm93IG5ldyBndH1jYWxsKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyBZZSh0LHRoaXMudG90YWwpKX19Y2xhc3MgWWUgZXh0ZW5kcyBwe2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCksdGhpcy50b3RhbD1lLHRoaXMucmluZz1uZXcgQXJyYXksdGhpcy5jb3VudD0wfV9uZXh0KHQpe2NvbnN0IGU9dGhpcy5yaW5nLG49dGhpcy50b3RhbCxvPXRoaXMuY291bnQrKztlLmxlbmd0aDxuP2UucHVzaCh0KTplW28lbl09dH1fY29tcGxldGUoKXtjb25zdCB0PXRoaXMuZGVzdGluYXRpb247bGV0IGU9dGhpcy5jb3VudDtpZihlPjApe2NvbnN0IG49dGhpcy5jb3VudD49dGhpcy50b3RhbD90aGlzLnRvdGFsOnRoaXMuY291bnQsbz10aGlzLnJpbmc7Zm9yKGxldCBpPTA7aTxuO2krKyl7Y29uc3QgaT1lKyslbjt0Lm5leHQob1tpXSl9fXQuY29tcGxldGUoKX19Y2xhc3MgcWV7Y2FsbCh0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgWmUodCkpfX1jbGFzcyBaZSBleHRlbmRzIHB7Y29uc3RydWN0b3IodCl7c3VwZXIodCl9X25leHQodCl7dGhpcy5kZXN0aW5hdGlvbi5uZXh0KFEuY3JlYXRlTmV4dCh0KSl9X2Vycm9yKHQpe2NvbnN0IGU9dGhpcy5kZXN0aW5hdGlvbjtlLm5leHQoUS5jcmVhdGVFcnJvcih0KSksZS5jb21wbGV0ZSgpfV9jb21wbGV0ZSgpe2NvbnN0IHQ9dGhpcy5kZXN0aW5hdGlvbjt0Lm5leHQoUS5jcmVhdGVDb21wbGV0ZSgpKSx0LmNvbXBsZXRlKCl9fWNsYXNzIFhle2NvbnN0cnVjdG9yKHQsZSxuPSExKXt0aGlzLmFjY3VtdWxhdG9yPXQsdGhpcy5zZWVkPWUsdGhpcy5oYXNTZWVkPW59Y2FsbCh0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgS2UodCx0aGlzLmFjY3VtdWxhdG9yLHRoaXMuc2VlZCx0aGlzLmhhc1NlZWQpKX19Y2xhc3MgS2UgZXh0ZW5kcyBwe2NvbnN0cnVjdG9yKHQsZSxuLG8pe3N1cGVyKHQpLHRoaXMuYWNjdW11bGF0b3I9ZSx0aGlzLl9zdGF0ZT1uLHRoaXMuX2hhc1N0YXRlPW8sdGhpcy5pbmRleD0wfV9uZXh0KHQpe2NvbnN0e2Rlc3RpbmF0aW9uOmV9PXRoaXM7aWYodGhpcy5faGFzU3RhdGUpe2NvbnN0IG49dGhpcy5pbmRleCsrO2xldCBvO3RyeXtvPXRoaXMuYWNjdW11bGF0b3IodGhpcy5fc3RhdGUsdCxuKX1jYXRjaCh0KXtyZXR1cm4gdm9pZCBlLmVycm9yKHQpfXRoaXMuX3N0YXRlPW8sZS5uZXh0KG8pfWVsc2UgdGhpcy5fc3RhdGU9dCx0aGlzLl9oYXNTdGF0ZT0hMCxlLm5leHQodCl9fWNsYXNzIEple2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5zdWJqZWN0RmFjdG9yeT10LHRoaXMuc2VsZWN0b3I9ZX1jYWxsKHQsZSl7Y29uc3R7c2VsZWN0b3I6bn09dGhpcyxvPXRoaXMuc3ViamVjdEZhY3RvcnkoKSxpPW4obykuc3Vic2NyaWJlKHQpO3JldHVybiBpLmFkZChlLnN1YnNjcmliZShvKSksaX19Y2xhc3MgUWV7Y2FsbCh0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgJGUodCkpfX1jbGFzcyAkZSBleHRlbmRzIHB7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy5oYXNQcmV2PSExfV9uZXh0KHQpe2xldCBlO3RoaXMuaGFzUHJldj9lPVt0aGlzLnByZXYsdF06dGhpcy5oYXNQcmV2PSEwLHRoaXMucHJldj10LGUmJnRoaXMuZGVzdGluYXRpb24ubmV4dChlKX19Y2xhc3MgdG57Y29uc3RydWN0b3IodCl7dGhpcy5ub3RpZmllcj10fWNhbGwodCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IGVuKHQsdGhpcy5ub3RpZmllcixlKSl9fWNsYXNzIGVuIGV4dGVuZHMgX3R7Y29uc3RydWN0b3IodCxlLG4pe3N1cGVyKHQpLHRoaXMubm90aWZpZXI9ZSx0aGlzLnNvdXJjZT1uLHRoaXMubm90aWZpY2F0aW9ucz1udWxsLHRoaXMucmV0cmllcz1udWxsLHRoaXMucmV0cmllc1N1YnNjcmlwdGlvbj1udWxsLHRoaXMuc291cmNlSXNCZWluZ1N1YnNjcmliZWRUbz0hMH1ub3RpZnlOZXh0KHQsZSxuLG8saSl7dGhpcy5zb3VyY2VJc0JlaW5nU3Vic2NyaWJlZFRvPSEwLHRoaXMuc291cmNlLnN1YnNjcmliZSh0aGlzKX1ub3RpZnlDb21wbGV0ZSh0KXtpZighMT09PXRoaXMuc291cmNlSXNCZWluZ1N1YnNjcmliZWRUbylyZXR1cm4gc3VwZXIuY29tcGxldGUoKX1jb21wbGV0ZSgpe2lmKHRoaXMuc291cmNlSXNCZWluZ1N1YnNjcmliZWRUbz0hMSwhdGhpcy5pc1N0b3BwZWQpe2lmKHRoaXMucmV0cmllc3x8dGhpcy5zdWJzY3JpYmVUb1JldHJpZXMoKSwhdGhpcy5yZXRyaWVzU3Vic2NyaXB0aW9ufHx0aGlzLnJldHJpZXNTdWJzY3JpcHRpb24uY2xvc2VkKXJldHVybiBzdXBlci5jb21wbGV0ZSgpO3RoaXMuX3Vuc3Vic2NyaWJlQW5kUmVjeWNsZSgpLHRoaXMubm90aWZpY2F0aW9ucy5uZXh0KCl9fV91bnN1YnNjcmliZSgpe2NvbnN0e25vdGlmaWNhdGlvbnM6dCxyZXRyaWVzU3Vic2NyaXB0aW9uOmV9PXRoaXM7dCYmKHQudW5zdWJzY3JpYmUoKSx0aGlzLm5vdGlmaWNhdGlvbnM9bnVsbCksZSYmKGUudW5zdWJzY3JpYmUoKSx0aGlzLnJldHJpZXNTdWJzY3JpcHRpb249bnVsbCksdGhpcy5yZXRyaWVzPW51bGx9X3Vuc3Vic2NyaWJlQW5kUmVjeWNsZSgpe2NvbnN0e191bnN1YnNjcmliZTp0fT10aGlzO3JldHVybiB0aGlzLl91bnN1YnNjcmliZT1udWxsLHN1cGVyLl91bnN1YnNjcmliZUFuZFJlY3ljbGUoKSx0aGlzLl91bnN1YnNjcmliZT10LHRoaXN9c3Vic2NyaWJlVG9SZXRyaWVzKCl7bGV0IHQ7dGhpcy5ub3RpZmljYXRpb25zPW5ldyB4O3RyeXtjb25zdHtub3RpZmllcjplfT10aGlzO3Q9ZSh0aGlzLm5vdGlmaWNhdGlvbnMpfWNhdGNoKHQpe3JldHVybiBzdXBlci5jb21wbGV0ZSgpfXRoaXMucmV0cmllcz10LHRoaXMucmV0cmllc1N1YnNjcmlwdGlvbj1rdCh0aGlzLHQpfX1mdW5jdGlvbiBubigpe3JldHVybiBuZXcgeH1mdW5jdGlvbiBvbigpe3JldHVybiB0PT5QKCkoKGZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gZnVuY3Rpb24gZShvKXtsZXQgaTtpZihpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZnVuY3Rpb24gZSgpe3JldHVybiB0fSwiZnVuY3Rpb24iPT10eXBlb2YgbilyZXR1cm4gby5saWZ0KG5ldyBKZShpLG4pKTtjb25zdCBhPU9iamVjdC5jcmVhdGUobyxEKTtyZXR1cm4gYS5zb3VyY2U9byxhLnN1YmplY3RGYWN0b3J5PWksYX19KShubikodCkpfWZ1bmN0aW9uIGFuKHQsZSxuKXtsZXQgbztyZXR1cm4gbz10JiYib2JqZWN0Ij09dHlwZW9mIHQ/dDp7YnVmZmVyU2l6ZTp0LHdpbmRvd1RpbWU6ZSxyZWZDb3VudDohMSxzY2hlZHVsZXI6bn0sdD0+dC5saWZ0KChmdW5jdGlvbiBlKHtidWZmZXJTaXplOnQ9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLHdpbmRvd1RpbWU6bj1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkscmVmQ291bnQ6byxzY2hlZHVsZXI6aX0pe2xldCBhLHIscz0wLGw9ITEsYz0hMTtyZXR1cm4gZnVuY3Rpb24gZShkKXtzKyssYSYmIWx8fChsPSExLGE9bmV3IG50KHQsbixpKSxyPWQuc3Vic2NyaWJlKHtuZXh0KHQpe2EubmV4dCh0KX0sZXJyb3IodCl7bD0hMCxhLmVycm9yKHQpfSxjb21wbGV0ZSgpe2M9ITAscj12b2lkIDAsYS5jb21wbGV0ZSgpfX0pKTtjb25zdCBwPWEuc3Vic2NyaWJlKHRoaXMpO3RoaXMuYWRkKCgoKT0+e3MtLSxwLnVuc3Vic2NyaWJlKCksciYmIWMmJm8mJjA9PT1zJiYoci51bnN1YnNjcmliZSgpLHI9dm9pZCAwLGE9dm9pZCAwKX0pKX19KShvKSl9ZnVuY3Rpb24gcm4odCl7cmV0dXJuIGU9PmUubGlmdChuZXcgc24odCkpfWNsYXNzIHNue2NvbnN0cnVjdG9yKHQpe3RoaXMudG90YWw9dH1jYWxsKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyBsbih0LHRoaXMudG90YWwpKX19Y2xhc3MgbG4gZXh0ZW5kcyBwe2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCksdGhpcy50b3RhbD1lLHRoaXMuY291bnQ9MH1fbmV4dCh0KXsrK3RoaXMuY291bnQ+dGhpcy50b3RhbCYmdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHQpfX1mdW5jdGlvbiBjbiguLi50KXtjb25zdCBlPXRbdC5sZW5ndGgtMV07cmV0dXJuIFcoZSk/KHQucG9wKCksbj0+SHQodCxuLGUpKTplPT5IdCh0LGUpfWZ1bmN0aW9uIGRuKHQsZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGU/bj0+bi5waXBlKGRuKCgobixvKT0+UnQodChuLG8pKS5waXBlKGh0KCgodCxpKT0+ZShuLHQsbyxpKSkpKSkpKTplPT5lLmxpZnQobmV3IHBuKHQpKX1jbGFzcyBwbntjb25zdHJ1Y3Rvcih0KXt0aGlzLnByb2plY3Q9dH1jYWxsKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyBtbih0LHRoaXMucHJvamVjdCkpfX1jbGFzcyBtbiBleHRlbmRzIF90e2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCksdGhpcy5wcm9qZWN0PWUsdGhpcy5pbmRleD0wfV9uZXh0KHQpe2xldCBlO2NvbnN0IG49dGhpcy5pbmRleCsrO3RyeXtlPXRoaXMucHJvamVjdCh0LG4pfWNhdGNoKHQpe3JldHVybiB2b2lkIHRoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9dGhpcy5faW5uZXJTdWIoZSx0LG4pfV9pbm5lclN1Yih0LGUsbil7Y29uc3Qgbz10aGlzLmlubmVyU3Vic2NyaXB0aW9uO28mJm8udW5zdWJzY3JpYmUoKTtjb25zdCBpPW5ldyBDdCh0aGlzLGUsbiksYT10aGlzLmRlc3RpbmF0aW9uO2EuYWRkKGkpLHRoaXMuaW5uZXJTdWJzY3JpcHRpb249a3QodGhpcyx0LHZvaWQgMCx2b2lkIDAsaSksdGhpcy5pbm5lclN1YnNjcmlwdGlvbiE9PWkmJmEuYWRkKHRoaXMuaW5uZXJTdWJzY3JpcHRpb24pfV9jb21wbGV0ZSgpe2NvbnN0e2lubmVyU3Vic2NyaXB0aW9uOnR9PXRoaXM7dCYmIXQuY2xvc2VkfHxzdXBlci5fY29tcGxldGUoKSx0aGlzLnVuc3Vic2NyaWJlKCl9X3Vuc3Vic2NyaWJlKCl7dGhpcy5pbm5lclN1YnNjcmlwdGlvbj1udWxsfW5vdGlmeUNvbXBsZXRlKHQpe3RoaXMuZGVzdGluYXRpb24ucmVtb3ZlKHQpLHRoaXMuaW5uZXJTdWJzY3JpcHRpb249bnVsbCx0aGlzLmlzU3RvcHBlZCYmc3VwZXIuX2NvbXBsZXRlKCl9bm90aWZ5TmV4dCh0LGUsbixvLGkpe3RoaXMuZGVzdGluYXRpb24ubmV4dChlKX19ZnVuY3Rpb24gdW4odCl7cmV0dXJuIGU9PmUubGlmdChuZXcgZm4odCkpfWNsYXNzIGZue2NvbnN0cnVjdG9yKHQpe3RoaXMubm90aWZpZXI9dH1jYWxsKHQsZSl7Y29uc3Qgbj1uZXcgZ24odCksbz1rdChuLHRoaXMubm90aWZpZXIpO3JldHVybiBvJiYhbi5zZWVuVmFsdWU/KG4uYWRkKG8pLGUuc3Vic2NyaWJlKG4pKTpufX1jbGFzcyBnbiBleHRlbmRzIF90e2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpLHRoaXMuc2VlblZhbHVlPSExfW5vdGlmeU5leHQodCxlLG4sbyxpKXt0aGlzLnNlZW5WYWx1ZT0hMCx0aGlzLmNvbXBsZXRlKCl9bm90aWZ5Q29tcGxldGUoKXt9fWZ1bmN0aW9uIGhuKHQsZT0hMSl7cmV0dXJuIG49Pm4ubGlmdChuZXcgYm4odCxlKSl9Y2xhc3MgYm57Y29uc3RydWN0b3IodCxlKXt0aGlzLnByZWRpY2F0ZT10LHRoaXMuaW5jbHVzaXZlPWV9Y2FsbCh0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgeW4odCx0aGlzLnByZWRpY2F0ZSx0aGlzLmluY2x1c2l2ZSkpfX1jbGFzcyB5biBleHRlbmRzIHB7Y29uc3RydWN0b3IodCxlLG4pe3N1cGVyKHQpLHRoaXMucHJlZGljYXRlPWUsdGhpcy5pbmNsdXNpdmU9bix0aGlzLmluZGV4PTB9X25leHQodCl7Y29uc3QgZT10aGlzLmRlc3RpbmF0aW9uO2xldCBuO3RyeXtuPXRoaXMucHJlZGljYXRlKHQsdGhpcy5pbmRleCsrKX1jYXRjaCh0KXtyZXR1cm4gdm9pZCBlLmVycm9yKHQpfXRoaXMubmV4dE9yQ29tcGxldGUodCxuKX1uZXh0T3JDb21wbGV0ZSh0LGUpe2NvbnN0IG49dGhpcy5kZXN0aW5hdGlvbjtCb29sZWFuKGUpP24ubmV4dCh0KToodGhpcy5pbmNsdXNpdmUmJm4ubmV4dCh0KSxuLmNvbXBsZXRlKCkpfX1mdW5jdGlvbiBfbih0LGUsbil7cmV0dXJuIGZ1bmN0aW9uIG8oaSl7cmV0dXJuIGkubGlmdChuZXcgQ24odCxlLG4pKX19Y2xhc3MgQ257Y29uc3RydWN0b3IodCxlLG4pe3RoaXMubmV4dE9yT2JzZXJ2ZXI9dCx0aGlzLmVycm9yPWUsdGhpcy5jb21wbGV0ZT1ufWNhbGwodCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IE1uKHQsdGhpcy5uZXh0T3JPYnNlcnZlcix0aGlzLmVycm9yLHRoaXMuY29tcGxldGUpKX19Y2xhc3MgTW4gZXh0ZW5kcyBwe2NvbnN0cnVjdG9yKGUsbixvLGkpe3N1cGVyKGUpLHRoaXMuX3RhcE5leHQ9bXQsdGhpcy5fdGFwRXJyb3I9bXQsdGhpcy5fdGFwQ29tcGxldGU9bXQsdGhpcy5fdGFwRXJyb3I9b3x8bXQsdGhpcy5fdGFwQ29tcGxldGU9aXx8bXQsdChuKT8odGhpcy5fY29udGV4dD10aGlzLHRoaXMuX3RhcE5leHQ9bik6biYmKHRoaXMuX2NvbnRleHQ9bix0aGlzLl90YXBOZXh0PW4ubmV4dHx8bXQsdGhpcy5fdGFwRXJyb3I9bi5lcnJvcnx8bXQsdGhpcy5fdGFwQ29tcGxldGU9bi5jb21wbGV0ZXx8bXQpfV9uZXh0KHQpe3RyeXt0aGlzLl90YXBOZXh0LmNhbGwodGhpcy5fY29udGV4dCx0KX1jYXRjaCh0KXtyZXR1cm4gdm9pZCB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKHQpfXRoaXMuZGVzdGluYXRpb24ubmV4dCh0KX1fZXJyb3IodCl7dHJ5e3RoaXMuX3RhcEVycm9yLmNhbGwodGhpcy5fY29udGV4dCx0KX1jYXRjaCh0KXtyZXR1cm4gdm9pZCB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKHQpfXRoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9X2NvbXBsZXRlKCl7dHJ5e3RoaXMuX3RhcENvbXBsZXRlLmNhbGwodGhpcy5fY29udGV4dCl9Y2F0Y2godCl7cmV0dXJuIHZvaWQgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX1yZXR1cm4gdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpfX1jb25zdCB2bj17bGVhZGluZzohMCx0cmFpbGluZzohMX07ZnVuY3Rpb24geG4odCxlPWR0LG49dm4pe3JldHVybiBvPT5vLmxpZnQobmV3IE9uKHQsZSwhIW4ubGVhZGluZywhIW4udHJhaWxpbmcpKX1jbGFzcyBPbntjb25zdHJ1Y3Rvcih0LGUsbixvKXt0aGlzLmR1cmF0aW9uPXQsdGhpcy5zY2hlZHVsZXI9ZSx0aGlzLmxlYWRpbmc9bix0aGlzLnRyYWlsaW5nPW99Y2FsbCh0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgUG4odCx0aGlzLmR1cmF0aW9uLHRoaXMuc2NoZWR1bGVyLHRoaXMubGVhZGluZyx0aGlzLnRyYWlsaW5nKSl9fWNsYXNzIFBuIGV4dGVuZHMgcHtjb25zdHJ1Y3Rvcih0LGUsbixvLGkpe3N1cGVyKHQpLHRoaXMuZHVyYXRpb249ZSx0aGlzLnNjaGVkdWxlcj1uLHRoaXMubGVhZGluZz1vLHRoaXMudHJhaWxpbmc9aSx0aGlzLnRocm90dGxlZD1udWxsLHRoaXMuX2hhc1RyYWlsaW5nVmFsdWU9ITEsdGhpcy5fdHJhaWxpbmdWYWx1ZT1udWxsfV9uZXh0KHQpe3RoaXMudGhyb3R0bGVkP3RoaXMudHJhaWxpbmcmJih0aGlzLl90cmFpbGluZ1ZhbHVlPXQsdGhpcy5faGFzVHJhaWxpbmdWYWx1ZT0hMCk6KHRoaXMuYWRkKHRoaXMudGhyb3R0bGVkPXRoaXMuc2NoZWR1bGVyLnNjaGVkdWxlKHduLHRoaXMuZHVyYXRpb24se3N1YnNjcmliZXI6dGhpc30pKSx0aGlzLmxlYWRpbmc/dGhpcy5kZXN0aW5hdGlvbi5uZXh0KHQpOnRoaXMudHJhaWxpbmcmJih0aGlzLl90cmFpbGluZ1ZhbHVlPXQsdGhpcy5faGFzVHJhaWxpbmdWYWx1ZT0hMCkpfV9jb21wbGV0ZSgpe3RoaXMuX2hhc1RyYWlsaW5nVmFsdWU/KHRoaXMuZGVzdGluYXRpb24ubmV4dCh0aGlzLl90cmFpbGluZ1ZhbHVlKSx0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCkpOnRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKX1jbGVhclRocm90dGxlKCl7Y29uc3QgdD10aGlzLnRocm90dGxlZDt0JiYodGhpcy50cmFpbGluZyYmdGhpcy5faGFzVHJhaWxpbmdWYWx1ZSYmKHRoaXMuZGVzdGluYXRpb24ubmV4dCh0aGlzLl90cmFpbGluZ1ZhbHVlKSx0aGlzLl90cmFpbGluZ1ZhbHVlPW51bGwsdGhpcy5faGFzVHJhaWxpbmdWYWx1ZT0hMSksdC51bnN1YnNjcmliZSgpLHRoaXMucmVtb3ZlKHQpLHRoaXMudGhyb3R0bGVkPW51bGwpfX1mdW5jdGlvbiB3bih0KXtjb25zdHtzdWJzY3JpYmVyOmV9PXQ7ZS5jbGVhclRocm90dGxlKCl9ZnVuY3Rpb24ga24oLi4udCl7cmV0dXJuIGU9PntsZXQgbjtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdFt0Lmxlbmd0aC0xXSYmKG49dC5wb3AoKSksZS5saWZ0KG5ldyBTbih0LG4pKX19Y2xhc3MgU257Y29uc3RydWN0b3IodCxlKXt0aGlzLm9ic2VydmFibGVzPXQsdGhpcy5wcm9qZWN0PWV9Y2FsbCh0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgRG4odCx0aGlzLm9ic2VydmFibGVzLHRoaXMucHJvamVjdCkpfX1jbGFzcyBEbiBleHRlbmRzIF90e2NvbnN0cnVjdG9yKHQsZSxuKXtzdXBlcih0KSx0aGlzLm9ic2VydmFibGVzPWUsdGhpcy5wcm9qZWN0PW4sdGhpcy50b1Jlc3BvbmQ9W107Y29uc3Qgbz1lLmxlbmd0aDt0aGlzLnZhbHVlcz1uZXcgQXJyYXkobyk7Zm9yKGxldCB0PTA7dDxvO3QrKyl0aGlzLnRvUmVzcG9uZC5wdXNoKHQpO2ZvcihsZXQgdD0wO3Q8bzt0Kyspe2xldCBuPWVbdF07dGhpcy5hZGQoa3QodGhpcyxuLG4sdCkpfX1ub3RpZnlOZXh0KHQsZSxuLG8saSl7dGhpcy52YWx1ZXNbbl09ZTtjb25zdCBhPXRoaXMudG9SZXNwb25kO2lmKGEubGVuZ3RoPjApe2NvbnN0IHQ9YS5pbmRleE9mKG4pOy0xIT09dCYmYS5zcGxpY2UodCwxKX19bm90aWZ5Q29tcGxldGUoKXt9X25leHQodCl7aWYoMD09PXRoaXMudG9SZXNwb25kLmxlbmd0aCl7Y29uc3QgZT1bdCwuLi50aGlzLnZhbHVlc107dGhpcy5wcm9qZWN0P3RoaXMuX3RyeVByb2plY3QoZSk6dGhpcy5kZXN0aW5hdGlvbi5uZXh0KGUpfX1fdHJ5UHJvamVjdCh0KXtsZXQgZTt0cnl7ZT10aGlzLnByb2plY3QuYXBwbHkodGhpcyx0KX1jYXRjaCh0KXtyZXR1cm4gdm9pZCB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKHQpfXRoaXMuZGVzdGluYXRpb24ubmV4dChlKX19Ci8qKgogICAgICogQGxpY2Vuc2UgQW5ndWxhciB2MTEuMi4xNAogICAgICogKGMpIDIwMTAtMjAyMSBHb29nbGUgTExDLiBodHRwczovL2FuZ3VsYXIuaW8vCiAgICAgKiBMaWNlbnNlOiBNSVQKICAgICAqLwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiBFbih0KXtmb3IobGV0IGUgaW4gdClpZih0W2VdPT09RW4pcmV0dXJuIGU7dGhyb3cgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIHJlbmFtZWQgcHJvcGVydHkgb24gdGFyZ2V0IG9iamVjdC4iKX1mdW5jdGlvbiBBbih0LGUpe2Zvcihjb25zdCBuIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShuKSYmIXQuaGFzT3duUHJvcGVydHkobikmJih0W25dPWVbbl0pfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiBSbih0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIHQ7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4iWyIrdC5tYXAoUm4pLmpvaW4oIiwgIikrIl0iO2lmKG51bGw9PXQpcmV0dXJuIiIrdDtpZih0Lm92ZXJyaWRkZW5OYW1lKXJldHVybmAke3Qub3ZlcnJpZGRlbk5hbWV9YDtpZih0Lm5hbWUpcmV0dXJuYCR7dC5uYW1lfWA7Y29uc3QgZT10LnRvU3RyaW5nKCk7aWYobnVsbD09ZSlyZXR1cm4iIitlO2NvbnN0IG49ZS5pbmRleE9mKCJcbiIpO3JldHVybi0xPT09bj9lOmUuc3Vic3RyaW5nKDAsbil9ZnVuY3Rpb24gVG4odCxlKXtyZXR1cm4gbnVsbD09dHx8IiI9PT10P251bGw9PT1lPyIiOmU6bnVsbD09ZXx8IiI9PT1lP3Q6dCsiICIrZX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY29uc3QgTm49RW4oe19fZm9yd2FyZF9yZWZfXzpFbn0pO2Z1bmN0aW9uIEluKHQpe3JldHVybiB0Ll9fZm9yd2FyZF9yZWZfXz1Jbix0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIFJuKHRoaXMoKSl9LHR9ZnVuY3Rpb24gem4odCl7cmV0dXJuIEhuKHQpP3QoKTp0fWZ1bmN0aW9uIEhuKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0JiZ0Lmhhc093blByb3BlcnR5KE5uKSYmdC5fX2ZvcndhcmRfcmVmX189PT1Jbn0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY2xhc3MgRm4gZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKEJuKHQsZSkpLHRoaXMuY29kZT10fX1jb25zdCBMbj1uZXcgU2V0KFsiMTAwIiwiMjAwIiwiMjAxIiwiMzAwIiwiMzAxIiwiMzAyIl0pO2Z1bmN0aW9uIEJuKHQsZSl7bGV0IG49YCR7dD9gTkcwJHt0fTogYDoiIn0ke2V9YDtyZXR1cm4gbmdEZXZNb2RlJiZMbi5oYXModCkmJihuPWAke259LiBGaW5kIG1vcmUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2Vycm9ycy9ORzAke3R9YCksbn0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovZnVuY3Rpb24gVm4odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P3Q6bnVsbD09dD8iIjpTdHJpbmcodCl9ZnVuY3Rpb24gam4odCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/dC5uYW1lfHx0LnRvU3RyaW5nKCk6Im9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT10JiYiZnVuY3Rpb24iPT10eXBlb2YgdC50eXBlP3QudHlwZS5uYW1lfHx0LnR5cGUudG9TdHJpbmcoKTpWbih0KX1mdW5jdGlvbiBVbih0LGUpe2NvbnN0IG49ZT9gLiBEZXBlbmRlbmN5IHBhdGg6ICR7ZS5qb2luKCIgPiAiKX0gPiAke3R9YDoiIjt0aHJvdyBuZXcgRm4oIjIwMCIsYENpcmN1bGFyIGRlcGVuZGVuY3kgaW4gREkgZGV0ZWN0ZWQgZm9yICR7dH0ke259YCl9ZnVuY3Rpb24gV24oKXt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBtaXggbXVsdGkgcHJvdmlkZXJzIGFuZCByZWd1bGFyIHByb3ZpZGVycyIpfWZ1bmN0aW9uIEduKHQsZSl7Y29uc3Qgbj1lP2AgaW4gJHtlfWA6IiI7dGhyb3cgbmV3IEZuKCIyMDEiLGBObyBwcm92aWRlciBmb3IgJHtqbih0KX0gZm91bmQke259YCl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIFluKHQsZSl7Im51bWJlciIhPXR5cGVvZiB0JiZpbyhlLHR5cGVvZiB0LCJudW1iZXIiLCI9PT0iKX1mdW5jdGlvbiBxbih0LGUsbil7WW4odCwiRXhwZWN0ZWQgYSBudW1iZXIiKSx0byh0LG4sIkV4cGVjdGVkIG51bWJlciB0byBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8iKSxubyh0LGUsIkV4cGVjdGVkIG51bWJlciB0byBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8iKX1mdW5jdGlvbiBabih0LGUpeyJzdHJpbmciIT10eXBlb2YgdCYmaW8oZSxudWxsPT09dD8ibnVsbCI6dHlwZW9mIHQsInN0cmluZyIsIj09PSIpfWZ1bmN0aW9uIFhuKHQsZSxuKXt0IT1lJiZpbyhuLHQsZSwiPT0iKX1mdW5jdGlvbiBLbih0LGUsbil7dD09ZSYmaW8obix0LGUsIiE9Iil9ZnVuY3Rpb24gSm4odCxlLG4pe3QhPT1lJiZpbyhuLHQsZSwiPT09Iil9ZnVuY3Rpb24gUW4odCxlLG4pe3Q9PT1lJiZpbyhuLHQsZSwiIT09Iil9ZnVuY3Rpb24gJG4odCxlLG4pe3Q8ZXx8aW8obix0LGUsIjwiKX1mdW5jdGlvbiB0byh0LGUsbil7dDw9ZXx8aW8obix0LGUsIjw9Iil9ZnVuY3Rpb24gZW8odCxlLG4pe3Q+ZXx8aW8obix0LGUsIj4iKX1mdW5jdGlvbiBubyh0LGUsbil7dD49ZXx8aW8obix0LGUsIj49Iil9ZnVuY3Rpb24gb28odCxlKXtudWxsPT10JiZpbyhlLHQsbnVsbCwiIT0iKX1mdW5jdGlvbiBpbyh0LGUsbixvKXt0aHJvdyBuZXcgRXJyb3IoYEFTU0VSVElPTiBFUlJPUjogJHt0fWArKG51bGw9PW8/IiI6YCBbRXhwZWN0ZWQ9PiAke259ICR7b30gJHtlfSA8PUFjdHVhbF1gKSl9ZnVuY3Rpb24gYW8odCl7InVuZGVmaW5lZCIhPXR5cGVvZiBOb2RlJiZ0IGluc3RhbmNlb2YgTm9kZXx8Im9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT10JiYiV2ViV29ya2VyUmVuZGVyTm9kZSI9PT10LmNvbnN0cnVjdG9yLm5hbWV8fGlvKGBUaGUgcHJvdmlkZWQgdmFsdWUgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBhIERPTSBOb2RlIGJ1dCBnb3QgJHtSbih0KX1gKX1mdW5jdGlvbiBybyh0LGUpe29vKHQsIkFycmF5IG11c3QgYmUgZGVmaW5lZC4iKTtjb25zdCBuPXQubGVuZ3RoOyhlPDB8fGU+PW4pJiZpbyhgSW5kZXggZXhwZWN0ZWQgdG8gYmUgbGVzcyB0aGFuICR7bn0gYnV0IGdvdCAke2V9YCl9ZnVuY3Rpb24gc28odCwuLi5lKXtpZigtMSE9PWUuaW5kZXhPZih0KSlyZXR1cm4hMDtpbyhgRXhwZWN0ZWQgdmFsdWUgdG8gYmUgb25lIG9mICR7SlNPTi5zdHJpbmdpZnkoZSl9IGJ1dCB3YXMgJHtKU09OLnN0cmluZ2lmeSh0KX0uYCl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIGxvKHQpe3JldHVybnt0b2tlbjp0LnRva2VuLHByb3ZpZGVkSW46dC5wcm92aWRlZElufHxudWxsLGZhY3Rvcnk6dC5mYWN0b3J5LHZhbHVlOnZvaWQgMH19ZnVuY3Rpb24gY28odCl7cmV0dXJue3Byb3ZpZGVyczp0LnByb3ZpZGVyc3x8W10saW1wb3J0czp0LmltcG9ydHN8fFtdfX1mdW5jdGlvbiBwbyh0KXtyZXR1cm4gbW8odCxmbyl8fG1vKHQsaG8pfWZ1bmN0aW9uIG1vKHQsZSl7cmV0dXJuIHQuaGFzT3duUHJvcGVydHkoZSk/dFtlXTpudWxsfWZ1bmN0aW9uIHVvKHQpe3JldHVybiB0JiYodC5oYXNPd25Qcm9wZXJ0eShnbyl8fHQuaGFzT3duUHJvcGVydHkoYm8pKT90W2dvXTpudWxsfWNvbnN0IGZvPUVuKHsiybVwcm92IjpFbn0pLGdvPUVuKHsiybVpbmoiOkVufSksaG89RW4oe25nSW5qZWN0YWJsZURlZjpFbn0pLGJvPUVuKHtuZ0luamVjdG9yRGVmOkVufSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwp2YXIgeW87Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpsZXQgX287ZnVuY3Rpb24gQ28odCl7Y29uc3QgZT1fbztyZXR1cm4gX289dCxlfWZ1bmN0aW9uIE1vKHQsZSxuKXtjb25zdCBvPXBvKHQpO3JldHVybiBvJiYicm9vdCI9PW8ucHJvdmlkZWRJbj92b2lkIDA9PT1vLnZhbHVlP28udmFsdWU9by5mYWN0b3J5KCk6by52YWx1ZTpuJnlvLk9wdGlvbmFsP251bGw6dm9pZCAwIT09ZT9lOnZvaWQgR24oUm4odCksIkluamVjdG9yIil9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpmdW5jdGlvbiB2byh0KXtyZXR1cm57dG9TdHJpbmc6dH0udG9TdHJpbmcoKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovdmFyIHhvLE9vLFBvOyEoZnVuY3Rpb24odCl7dFt0LkRlZmF1bHQ9MF09IkRlZmF1bHQiLHRbdC5Ib3N0PTFdPSJIb3N0Iix0W3QuU2VsZj0yXT0iU2VsZiIsdFt0LlNraXBTZWxmPTRdPSJTa2lwU2VsZiIsdFt0Lk9wdGlvbmFsPThdPSJPcHRpb25hbCJ9KSh5b3x8KHlvPXt9KSksKGZ1bmN0aW9uKHQpe3RbdC5PblB1c2g9MF09Ik9uUHVzaCIsdFt0LkRlZmF1bHQ9MV09IkRlZmF1bHQifSkoeG98fCh4bz17fSkpLChmdW5jdGlvbih0KXt0W3QuQ2hlY2tPbmNlPTBdPSJDaGVja09uY2UiLHRbdC5DaGVja2VkPTFdPSJDaGVja2VkIix0W3QuQ2hlY2tBbHdheXM9Ml09IkNoZWNrQWx3YXlzIix0W3QuRGV0YWNoZWQ9M109IkRldGFjaGVkIix0W3QuRXJyb3JlZD00XT0iRXJyb3JlZCIsdFt0LkRlc3Ryb3llZD01XT0iRGVzdHJveWVkIn0pKE9vfHwoT289e30pKSwoZnVuY3Rpb24odCl7dFt0LkVtdWxhdGVkPTBdPSJFbXVsYXRlZCIsdFt0Lk5vbmU9Ml09Ik5vbmUiLHRbdC5TaGFkb3dEb209M109IlNoYWRvd0RvbSJ9KShQb3x8KFBvPXt9KSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCB3bz0idW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbFRoaXMmJmdsb2JhbFRoaXMsa289InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvdyxTbz0idW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYmJiJ1bmRlZmluZWQiIT10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSYmc2VsZixEbz0idW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbCYmZ2xvYmFsLEVvPXdvfHxEb3x8a298fFNvO2Z1bmN0aW9uIEFvKCl7cmV0dXJuISgidW5kZWZpbmVkIiE9dHlwZW9mIG5nRGV2TW9kZSYmIW5nRGV2TW9kZXx8KCJvYmplY3QiIT10eXBlb2YgbmdEZXZNb2RlJiYoCi8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpmdW5jdGlvbiB0KCl7Y29uc3QgdD0idW5kZWZpbmVkIiE9dHlwZW9mIGxvY2F0aW9uP2xvY2F0aW9uLnRvU3RyaW5nKCk6IiIsZT17bmFtZWRDb25zdHJ1Y3RvcnM6LTEhPXQuaW5kZXhPZigibmdEZXZNb2RlPW5hbWVkQ29uc3RydWN0b3JzIiksZmlyc3RDcmVhdGVQYXNzOjAsdE5vZGU6MCx0VmlldzowLHJlbmRlcmVyQ3JlYXRlVGV4dE5vZGU6MCxyZW5kZXJlclNldFRleHQ6MCxyZW5kZXJlckNyZWF0ZUVsZW1lbnQ6MCxyZW5kZXJlckFkZEV2ZW50TGlzdGVuZXI6MCxyZW5kZXJlclNldEF0dHJpYnV0ZTowLHJlbmRlcmVyUmVtb3ZlQXR0cmlidXRlOjAscmVuZGVyZXJTZXRQcm9wZXJ0eTowLHJlbmRlcmVyU2V0Q2xhc3NOYW1lOjAscmVuZGVyZXJBZGRDbGFzczowLHJlbmRlcmVyUmVtb3ZlQ2xhc3M6MCxyZW5kZXJlclNldFN0eWxlOjAscmVuZGVyZXJSZW1vdmVTdHlsZTowLHJlbmRlcmVyRGVzdHJveTowLHJlbmRlcmVyRGVzdHJveU5vZGU6MCxyZW5kZXJlck1vdmVOb2RlOjAscmVuZGVyZXJSZW1vdmVOb2RlOjAscmVuZGVyZXJBcHBlbmRDaGlsZDowLHJlbmRlcmVySW5zZXJ0QmVmb3JlOjAscmVuZGVyZXJDcmVhdGVDb21tZW50OjB9LG49LTE9PT10LmluZGV4T2YoIm5nRGV2TW9kZT1mYWxzZSIpO0VvLm5nRGV2TW9kZT1uJiZlfSkoKSwidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8IW5nRGV2TW9kZSkpfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jb25zdCBSbz17fSxUbz1bXTsoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJkFvKCkmJihPYmplY3QuZnJlZXplKFJvKSxPYmplY3QuZnJlZXplKFRvKSkKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovO2NvbnN0IE5vPVtdOygidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmQW8oKSYmT2JqZWN0LmZyZWV6ZShObykKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovO2NvbnN0IElvPUVuKHsiybVjbXAiOkVufSksem89RW4oeyLJtWRpciI6RW59KSxIbz1Fbih7Ism1cGlwZSI6RW59KSxGbz1Fbih7Ism1bW9kIjpFbn0pLExvPUVuKHsiybVsb2MiOkVufSksQm89RW4oeyLJtWZhYyI6RW59KSxWbz1Fbih7X19OR19FTEVNRU5UX0lEX186RW59KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmxldCBqbz0wO2Z1bmN0aW9uIFVvKHQpe3JldHVybiB2bygoKCk9PnsoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJkFvKCk7Y29uc3QgZT17fSxuPXt0eXBlOnQudHlwZSxwcm92aWRlcnNSZXNvbHZlcjpudWxsLGRlY2xzOnQuZGVjbHMsdmFyczp0LnZhcnMsZmFjdG9yeTpudWxsLHRlbXBsYXRlOnQudGVtcGxhdGV8fG51bGwsY29uc3RzOnQuY29uc3RzfHxudWxsLG5nQ29udGVudFNlbGVjdG9yczp0Lm5nQ29udGVudFNlbGVjdG9ycyxob3N0QmluZGluZ3M6dC5ob3N0QmluZGluZ3N8fG51bGwsaG9zdFZhcnM6dC5ob3N0VmFyc3x8MCxob3N0QXR0cnM6dC5ob3N0QXR0cnN8fG51bGwsY29udGVudFF1ZXJpZXM6dC5jb250ZW50UXVlcmllc3x8bnVsbCxkZWNsYXJlZElucHV0czplLGlucHV0czpudWxsLG91dHB1dHM6bnVsbCxleHBvcnRBczp0LmV4cG9ydEFzfHxudWxsLG9uUHVzaDp0LmNoYW5nZURldGVjdGlvbj09PXhvLk9uUHVzaCxkaXJlY3RpdmVEZWZzOm51bGwscGlwZURlZnM6bnVsbCxzZWxlY3RvcnM6dC5zZWxlY3RvcnN8fE5vLHZpZXdRdWVyeTp0LnZpZXdRdWVyeXx8bnVsbCxmZWF0dXJlczp0LmZlYXR1cmVzfHxudWxsLGRhdGE6dC5kYXRhfHx7fSxlbmNhcHN1bGF0aW9uOnQuZW5jYXBzdWxhdGlvbnx8UG8uRW11bGF0ZWQsaWQ6ImMiLHN0eWxlczp0LnN0eWxlc3x8Tm8sXzpudWxsLHNldElucHV0Om51bGwsc2NoZW1hczp0LnNjaGVtYXN8fG51bGwsdFZpZXc6bnVsbH0sbz10LmRpcmVjdGl2ZXMsaT10LmZlYXR1cmVzLGE9dC5waXBlcztyZXR1cm4gbi5pZCs9am8rKyxuLmlucHV0cz1Lbyh0LmlucHV0cyxlKSxuLm91dHB1dHM9S28odC5vdXRwdXRzKSxpJiZpLmZvckVhY2goKHQ9PnQobikpKSxuLmRpcmVjdGl2ZURlZnM9bz8oKT0+KCJmdW5jdGlvbiI9PXR5cGVvZiBvP28oKTpvKS5tYXAoR28pOm51bGwsbi5waXBlRGVmcz1hPygpPT4oImZ1bmN0aW9uIj09dHlwZW9mIGE/YSgpOmEpLm1hcChZbyk6bnVsbCxufSkpfWZ1bmN0aW9uIFdvKHQsZSxuKXtjb25zdCBvPXQuybVjbXA7by5kaXJlY3RpdmVEZWZzPSgpPT5lLm1hcChHbyksby5waXBlRGVmcz0oKT0+bi5tYXAoWW8pfWZ1bmN0aW9uIEdvKHQpe2NvbnN0IGU9JG8odCl8fHRpKHQpO2lmKG5nRGV2TW9kZSYmIWUpdGhyb3cgbmV3IEVycm9yKGAnJHt0Lm5hbWV9JyBpcyBuZWl0aGVyICdDb21wb25lbnRUeXBlJyBvciAnRGlyZWN0aXZlVHlwZScuYCk7cmV0dXJuIGV9ZnVuY3Rpb24gWW8odCl7Y29uc3QgZT1laSh0KTtpZihuZ0Rldk1vZGUmJiFlKXRocm93IG5ldyBFcnJvcihgJyR7dC5uYW1lfScgaXMgbm90IGEgJ1BpcGVUeXBlJy5gKTtyZXR1cm4gZX1jb25zdCBxbz17fTtmdW5jdGlvbiBabyh0KXtjb25zdCBlPXt0eXBlOnQudHlwZSxib290c3RyYXA6dC5ib290c3RyYXB8fE5vLGRlY2xhcmF0aW9uczp0LmRlY2xhcmF0aW9uc3x8Tm8saW1wb3J0czp0LmltcG9ydHN8fE5vLGV4cG9ydHM6dC5leHBvcnRzfHxObyx0cmFuc2l0aXZlQ29tcGlsZVNjb3BlczpudWxsLHNjaGVtYXM6dC5zY2hlbWFzfHxudWxsLGlkOnQuaWR8fG51bGx9O3JldHVybiBudWxsIT10LmlkJiZ2bygoKCk9Pntxb1t0LmlkXT10LnR5cGV9KSksZX1mdW5jdGlvbiBYbyh0LGUpe3JldHVybiB2bygoKCk9Pntjb25zdCBuPW5pKHQsITApO24uZGVjbGFyYXRpb25zPWUuZGVjbGFyYXRpb25zfHxObyxuLmltcG9ydHM9ZS5pbXBvcnRzfHxObyxuLmV4cG9ydHM9ZS5leHBvcnRzfHxOb30pKX1mdW5jdGlvbiBLbyh0LGUpe2lmKG51bGw9PXQpcmV0dXJuIFJvO2NvbnN0IG49e307Zm9yKGNvbnN0IG8gaW4gdClpZih0Lmhhc093blByb3BlcnR5KG8pKXtsZXQgaT10W29dLGE9aTtBcnJheS5pc0FycmF5KGkpJiYoYT1pWzFdLGk9aVswXSksbltpXT1vLGUmJihlW2ldPWEpfXJldHVybiBufWNvbnN0IEpvPVVvO2Z1bmN0aW9uIFFvKHQpe3JldHVybnt0eXBlOnQudHlwZSxuYW1lOnQubmFtZSxmYWN0b3J5Om51bGwscHVyZTohMSE9PXQucHVyZSxvbkRlc3Ryb3k6dC50eXBlLnByb3RvdHlwZS5uZ09uRGVzdHJveXx8bnVsbH19ZnVuY3Rpb24gJG8odCl7cmV0dXJuIHRbSW9dfHxudWxsfWZ1bmN0aW9uIHRpKHQpe3JldHVybiB0W3pvXXx8bnVsbH1mdW5jdGlvbiBlaSh0KXtyZXR1cm4gdFtIb118fG51bGx9ZnVuY3Rpb24gbmkodCxlKXtjb25zdCBuPXRbRm9dfHxudWxsO2lmKCFuJiYhMD09PWUpdGhyb3cgbmV3IEVycm9yKGBUeXBlICR7Um4odCl9IGRvZXMgbm90IGhhdmUgJ8m1bW9kJyBwcm9wZXJ0eS5gKTtyZXR1cm4gbn0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IG9pPTIwLGlpPVsiUm9vdCIsIkNvbXBvbmVudCIsIkVtYmVkZGVkIl0sYWk9MTA7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpmdW5jdGlvbiByaSh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KSYmIm9iamVjdCI9PXR5cGVvZiB0WzFdfWZ1bmN0aW9uIHNpKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpJiYhMD09PXRbMV19ZnVuY3Rpb24gbGkodCl7cmV0dXJuIDAhPSg4JnQuZmxhZ3MpfWZ1bmN0aW9uIGNpKHQpe3JldHVybiAyPT0oMiZ0LmZsYWdzKX1mdW5jdGlvbiBkaSh0KXtyZXR1cm4gMT09KDEmdC5mbGFncyl9ZnVuY3Rpb24gcGkodCl7cmV0dXJuIG51bGwhPT10LnRlbXBsYXRlfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KZnVuY3Rpb24gbWkodCxlKXt1aSh0LGVbMV0pfWZ1bmN0aW9uIHVpKHQsZSl7ZmkodCksdC5oYXNPd25Qcm9wZXJ0eSgidFZpZXdfIikmJlhuKHQudFZpZXdfLGUsIlRoaXMgVE5vZGUgZG9lcyBub3QgYmVsb25nIHRvIHRoaXMgVFZpZXcuIil9ZnVuY3Rpb24gZmkodCl7b28odCwiVE5vZGUgbXVzdCBiZSBkZWZpbmVkIiksdCYmIm9iamVjdCI9PXR5cGVvZiB0JiZ0Lmhhc093blByb3BlcnR5KCJkaXJlY3RpdmVTdHlsaW5nTGFzdCIpfHxpbygiTm90IG9mIHR5cGUgVE5vZGUsIGdvdDogIit0KX1mdW5jdGlvbiBnaSh0KXtvbyh0LCJFeHBlY3RlZCBUSWN1IHRvIGJlIGRlZmluZWQiKSwibnVtYmVyIiE9dHlwZW9mIHQuY3VycmVudENhc2VMVmlld0luZGV4JiZpbygiT2JqZWN0IGlzIG5vdCBvZiBUSWN1IHR5cGUuIil9ZnVuY3Rpb24gaGkodCl7b28odCwiY3VycmVudFROb2RlIHNob3VsZCBleGlzdCEiKSxvbyh0LnBhcmVudCwiY3VycmVudFROb2RlIHNob3VsZCBoYXZlIGEgcGFyZW50Iil9ZnVuY3Rpb24gYmkodCl7b28odCwiTENvbnRhaW5lciBtdXN0IGJlIGRlZmluZWQiKSxYbihzaSh0KSwhMCwiRXhwZWN0aW5nIExDb250YWluZXIiKX1mdW5jdGlvbiB5aSh0KXt0JiZYbihyaSh0KSwhMCwiRXhwZWN0aW5nIExWaWV3IG9yIHVuZGVmaW5lZCBvciBudWxsIil9ZnVuY3Rpb24gX2kodCl7b28odCwiTFZpZXcgbXVzdCBiZSBkZWZpbmVkIiksWG4ocmkodCksITAsIkV4cGVjdGluZyBMVmlldyIpfWZ1bmN0aW9uIENpKHQsZSl7WG4odC5maXJzdENyZWF0ZVBhc3MsITAsZXx8IlNob3VsZCBvbmx5IGJlIGNhbGxlZCBpbiBmaXJzdCBjcmVhdGUgcGFzcy4iKX1mdW5jdGlvbiBNaSh0LGUpe1huKHQuZmlyc3RVcGRhdGVQYXNzLCEwLGV8fCJTaG91bGQgb25seSBiZSBjYWxsZWQgaW4gZmlyc3QgdXBkYXRlIHBhc3MuIil9ZnVuY3Rpb24gdmkodCxlKXt4aSh0WzFdLmV4cGFuZG9TdGFydEluZGV4LHQubGVuZ3RoLGUpfWZ1bmN0aW9uIHhpKHQsZSxuKXt0PD1uJiZuPGV8fGlvKGBJbmRleCBvdXQgb2YgcmFuZ2UgKGV4cGVjdGluZyAke3R9IDw9ICR7bn0gPCAke2V9KWApfWZ1bmN0aW9uIE9pKHQsZSl7b28odCxlfHwiQ29tcG9uZW50IHZpZXdzIHNob3VsZCBhbHdheXMgaGF2ZSBhIHBhcmVudCB2aWV3IChjb21wb25lbnQncyBob3N0IHZpZXcpIil9ZnVuY3Rpb24gUGkodCxlKXt2aSh0LGUpLHZpKHQsZSs4KSxZbih0W2UrMF0sImluamVjdG9ySW5kZXggc2hvdWxkIHBvaW50IHRvIGEgYmxvb20gZmlsdGVyIiksWW4odFtlKzFdLCJpbmplY3RvckluZGV4IHNob3VsZCBwb2ludCB0byBhIGJsb29tIGZpbHRlciIpLFluKHRbZSsyXSwiaW5qZWN0b3JJbmRleCBzaG91bGQgcG9pbnQgdG8gYSBibG9vbSBmaWx0ZXIiKSxZbih0W2UrM10sImluamVjdG9ySW5kZXggc2hvdWxkIHBvaW50IHRvIGEgYmxvb20gZmlsdGVyIiksWW4odFtlKzRdLCJpbmplY3RvckluZGV4IHNob3VsZCBwb2ludCB0byBhIGJsb29tIGZpbHRlciIpLFluKHRbZSs1XSwiaW5qZWN0b3JJbmRleCBzaG91bGQgcG9pbnQgdG8gYSBibG9vbSBmaWx0ZXIiKSxZbih0W2UrNl0sImluamVjdG9ySW5kZXggc2hvdWxkIHBvaW50IHRvIGEgYmxvb20gZmlsdGVyIiksWW4odFtlKzddLCJpbmplY3RvckluZGV4IHNob3VsZCBwb2ludCB0byBhIGJsb29tIGZpbHRlciIpLFluKHRbZSs4XSwiaW5qZWN0b3JJbmRleCBzaG91bGQgcG9pbnQgdG8gcGFyZW50IGluamVjdG9yIil9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIHdpKHQsZSl7Y29uc3Qgbj10Lmhhc093blByb3BlcnR5KEJvKTtpZighbiYmITA9PT1lJiZuZ0Rldk1vZGUpdGhyb3cgbmV3IEVycm9yKGBUeXBlICR7Um4odCl9IGRvZXMgbm90IGhhdmUgJ8m1ZmFjJyBwcm9wZXJ0eS5gKTtyZXR1cm4gbj90W0JvXTpudWxsfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jbGFzcyBraXtjb25zdHJ1Y3Rvcih0LGUsbil7dGhpcy5wcmV2aW91c1ZhbHVlPXQsdGhpcy5jdXJyZW50VmFsdWU9ZSx0aGlzLmZpcnN0Q2hhbmdlPW59aXNGaXJzdENoYW5nZSgpe3JldHVybiB0aGlzLmZpcnN0Q2hhbmdlfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovZnVuY3Rpb24gU2koKXtyZXR1cm4gRGl9ZnVuY3Rpb24gRGkodCl7cmV0dXJuIHQudHlwZS5wcm90b3R5cGUubmdPbkNoYW5nZXMmJih0LnNldElucHV0PUFpKSxFaX1mdW5jdGlvbiBFaSgpe2NvbnN0IHQ9UmkodGhpcyksZT1udWxsPT10P3ZvaWQgMDp0LmN1cnJlbnQ7aWYoZSl7Y29uc3Qgbj10LnByZXZpb3VzO2lmKG49PT1Sbyl0LnByZXZpb3VzPWU7ZWxzZSBmb3IobGV0IHQgaW4gZSluW3RdPWVbdF07dC5jdXJyZW50PW51bGwsdGhpcy5uZ09uQ2hhbmdlcyhlKX19ZnVuY3Rpb24gQWkodCxlLG4sbyl7Y29uc3QgaT1SaSh0KXx8KGZ1bmN0aW9uIGEodCxlKXtyZXR1cm4gdC5fX25nU2ltcGxlQ2hhbmdlc19fPWV9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLykodCx7cHJldmlvdXM6Um8sY3VycmVudDpudWxsfSkscj1pLmN1cnJlbnR8fChpLmN1cnJlbnQ9e30pLHM9aS5wcmV2aW91cyxsPXRoaXMuZGVjbGFyZWRJbnB1dHNbbl0sYz1zW2xdO3JbbF09bmV3IGtpKGMmJmMuY3VycmVudFZhbHVlLGUscz09PVJvKSx0W29dPWV9ZnVuY3Rpb24gUmkodCl7cmV0dXJuIHQuX19uZ1NpbXBsZUNoYW5nZXNfX3x8bnVsbH1TaS5uZ0luaGVyaXQ9ITA7bGV0IFRpPW51bGw7Y29uc3QgTmk9dD0+e1RpPXR9LElpPWZ1bmN0aW9uKHQsZSxuKXtudWxsIT1UaSYmVGkodCxlLG4pfSx6aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLEhpPSJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGhNTC8iOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KbGV0IEZpO2Z1bmN0aW9uIExpKCl7cmV0dXJuIHZvaWQgMCE9PUZpP0ZpOiJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQ/ZG9jdW1lbnQ6dm9pZCAwfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi92YXIgQmk7ZnVuY3Rpb24gVmkodCl7cmV0dXJuISF0Lmxpc3Rlbn0hKGZ1bmN0aW9uKHQpe3RbdC5JbXBvcnRhbnQ9MV09IkltcG9ydGFudCIsdFt0LkRhc2hDYXNlPTJdPSJEYXNoQ2FzZSJ9KShCaXx8KEJpPXt9KSk7Y29uc3Qgamk9e2NyZWF0ZVJlbmRlcmVyOih0LGUpPT5MaSgpfTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmZ1bmN0aW9uIFVpKHQpe2Zvcig7QXJyYXkuaXNBcnJheSh0KTspdD10WzBdO3JldHVybiB0fWZ1bmN0aW9uIFdpKHQsZSl7cmV0dXJuIG5nRGV2TW9kZSYmcm8oZSx0KSxuZ0Rldk1vZGUmJm5vKHQsb2ksIkV4cGVjdGVkIHRvIGJlIHBhc3QgSEVBREVSX09GRlNFVCIpLFVpKGVbdF0pfWZ1bmN0aW9uIEdpKHQsZSl7bmdEZXZNb2RlJiZtaSh0LGUpLG5nRGV2TW9kZSYmcm8oZSx0LmluZGV4KTtjb25zdCBuPVVpKGVbdC5pbmRleF0pO3JldHVybiBuZ0Rldk1vZGUmJiFWaShlWzExXSkmJmFvKG4pLG59ZnVuY3Rpb24gWWkodCxlKXtuZ0Rldk1vZGUmJmVvKGUsLTEsIndyb25nIGluZGV4IGZvciBUTm9kZSIpLG5nRGV2TW9kZSYmJG4oZSx0LmRhdGEubGVuZ3RoLCJ3cm9uZyBpbmRleCBmb3IgVE5vZGUiKTtjb25zdCBuPXQuZGF0YVtlXTtyZXR1cm4gbmdEZXZNb2RlJiZudWxsIT09biYmZmkobiksbn1mdW5jdGlvbiBxaSh0LGUpe3JldHVybiBuZ0Rldk1vZGUmJnJvKHQsZSksdFtlXX1mdW5jdGlvbiBaaSh0LGUpe25nRGV2TW9kZSYmcm8oZSx0KTtjb25zdCBuPWVbdF07cmV0dXJuIHJpKG4pP246blswXX1mdW5jdGlvbiBYaSh0KXtyZXR1cm4gbmdEZXZNb2RlJiZvbyh0LCJUYXJnZXQgZXhwZWN0ZWQiKSx0Ll9fbmdDb250ZXh0X198fG51bGx9ZnVuY3Rpb24gS2kodCl7Y29uc3QgZT1YaSh0KTtyZXR1cm4gZT9BcnJheS5pc0FycmF5KGUpP2U6ZS5sVmlldzpudWxsfWZ1bmN0aW9uIEppKHQpe3JldHVybiA0PT0oNCZ0WzJdKX1mdW5jdGlvbiBRaSh0KXtyZXR1cm4gMTI4PT0oMTI4JnRbMl0pfWZ1bmN0aW9uICRpKHQsZSl7cmV0dXJuIG51bGw9PWU/bnVsbDoobmdEZXZNb2RlJiZybyh0LGUpLHRbZV0pfWZ1bmN0aW9uIHRhKHQpe3RbMThdPTB9ZnVuY3Rpb24gZWEodCxlKXt0WzVdKz1lO2xldCBuPXQsbz10WzNdO2Zvcig7bnVsbCE9PW8mJigxPT09ZSYmMT09PW5bNV18fC0xPT09ZSYmMD09PW5bNV0pOylvWzVdKz1lLG49byxvPW9bM119Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NvbnN0IG5hPXtsRnJhbWU6RWEobnVsbCksYmluZGluZ3NFbmFibGVkOiEwLGlzSW5DaGVja05vQ2hhbmdlc01vZGU6ITF9O2Z1bmN0aW9uIG9hKCl7cmV0dXJuIG5hLmJpbmRpbmdzRW5hYmxlZH1mdW5jdGlvbiBpYSgpe3JldHVybiBuYS5sRnJhbWUubFZpZXd9ZnVuY3Rpb24gYWEoKXtyZXR1cm4gbmEubEZyYW1lLnRWaWV3fWZ1bmN0aW9uIHJhKHQpe25hLmxGcmFtZS5jb250ZXh0TFZpZXc9dH1mdW5jdGlvbiBzYSgpe2xldCB0PWxhKCk7Zm9yKDtudWxsIT09dCYmNjQ9PT10LnR5cGU7KXQ9dC5wYXJlbnQ7cmV0dXJuIHR9ZnVuY3Rpb24gbGEoKXtyZXR1cm4gbmEubEZyYW1lLmN1cnJlbnRUTm9kZX1mdW5jdGlvbiBjYSgpe2NvbnN0IHQ9bmEubEZyYW1lLGU9dC5jdXJyZW50VE5vZGU7cmV0dXJuIHQuaXNQYXJlbnQ/ZTplLnBhcmVudH1mdW5jdGlvbiBkYSh0LGUpe25nRGV2TW9kZSYmdCYmdWkodCxuYS5sRnJhbWUudFZpZXcpO2NvbnN0IG49bmEubEZyYW1lO24uY3VycmVudFROb2RlPXQsbi5pc1BhcmVudD1lfWZ1bmN0aW9uIHBhKCl7cmV0dXJuIG5hLmxGcmFtZS5pc1BhcmVudH1mdW5jdGlvbiBtYSgpe25hLmxGcmFtZS5pc1BhcmVudD0hMX1mdW5jdGlvbiB1YSgpe3JldHVybiBuYS5pc0luQ2hlY2tOb0NoYW5nZXNNb2RlfWZ1bmN0aW9uIGZhKHQpe25hLmlzSW5DaGVja05vQ2hhbmdlc01vZGU9dH1mdW5jdGlvbiBnYSgpe2NvbnN0IHQ9bmEubEZyYW1lO2xldCBlPXQuYmluZGluZ1Jvb3RJbmRleDtyZXR1cm4tMT09PWUmJihlPXQuYmluZGluZ1Jvb3RJbmRleD10LnRWaWV3LmJpbmRpbmdTdGFydEluZGV4KSxlfWZ1bmN0aW9uIGhhKCl7cmV0dXJuIG5hLmxGcmFtZS5iaW5kaW5nSW5kZXh9ZnVuY3Rpb24gYmEodCl7cmV0dXJuIG5hLmxGcmFtZS5iaW5kaW5nSW5kZXg9dH1mdW5jdGlvbiB5YSgpe3JldHVybiBuYS5sRnJhbWUuYmluZGluZ0luZGV4Kyt9ZnVuY3Rpb24gX2EodCl7Y29uc3QgZT1uYS5sRnJhbWUsbj1lLmJpbmRpbmdJbmRleDtyZXR1cm4gZS5iaW5kaW5nSW5kZXg9ZS5iaW5kaW5nSW5kZXgrdCxufWZ1bmN0aW9uIENhKHQpe25hLmxGcmFtZS5pbkkxOG49dH1mdW5jdGlvbiBNYSh0LGUpe2NvbnN0IG49bmEubEZyYW1lO24uYmluZGluZ0luZGV4PW4uYmluZGluZ1Jvb3RJbmRleD10LHZhKGUpfWZ1bmN0aW9uIHZhKHQpe25hLmxGcmFtZS5jdXJyZW50RGlyZWN0aXZlSW5kZXg9dH1mdW5jdGlvbiB4YSh0KXtjb25zdCBlPW5hLmxGcmFtZS5jdXJyZW50RGlyZWN0aXZlSW5kZXg7cmV0dXJuLTE9PT1lP251bGw6dFtlXX1mdW5jdGlvbiBPYSgpe3JldHVybiBuYS5sRnJhbWUuY3VycmVudFF1ZXJ5SW5kZXh9ZnVuY3Rpb24gUGEodCl7bmEubEZyYW1lLmN1cnJlbnRRdWVyeUluZGV4PXR9ZnVuY3Rpb24gd2EodCl7Y29uc3QgZT10WzFdO3JldHVybiAyPT09ZS50eXBlPyhuZ0Rldk1vZGUmJm9vKGUuZGVjbFROb2RlLCJFbWJlZGRlZCBUTm9kZXMgc2hvdWxkIGhhdmUgZGVjbGFyYXRpb24gcGFyZW50cy4iKSxlLmRlY2xUTm9kZSk6MT09PWUudHlwZT90WzZdOm51bGx9ZnVuY3Rpb24ga2EodCxlLG4pe2lmKG5nRGV2TW9kZSYmeWkodCksbiZ5by5Ta2lwU2VsZil7bmdEZXZNb2RlJiZ1aShlLHRbMV0pO2xldCBvPWUsaT10O2Zvcig7bmdEZXZNb2RlJiZvbyhvLCJQYXJlbnQgVE5vZGUgc2hvdWxkIGJlIGRlZmluZWQiKSxvPW8ucGFyZW50LCEobnVsbCE9PW98fG4meW8uSG9zdHx8KG89d2EoaSksbnVsbD09PW8pfHwobmdEZXZNb2RlJiZvbyhpLCJQYXJlbnQgTFZpZXcgc2hvdWxkIGJlIGRlZmluZWQiKSxpPWlbMTVdLDEwJm8udHlwZSkpOyk7aWYobnVsbD09PW8pcmV0dXJuITE7ZT1vLHQ9aX1uZ0Rldk1vZGUmJm1pKGUsdCk7Y29uc3Qgbz1uYS5sRnJhbWU9RGEoKTtyZXR1cm4gby5jdXJyZW50VE5vZGU9ZSxvLmxWaWV3PXQsITB9ZnVuY3Rpb24gU2EodCl7bmdEZXZNb2RlJiZLbih0WzBdLHRbMV0sIj8/Pz8iKSxuZ0Rldk1vZGUmJnlpKHQpO2NvbnN0IGU9RGEoKTtuZ0Rldk1vZGUmJihYbihlLmlzUGFyZW50LCEwLCJFeHBlY3RlZCBjbGVhbiBMRnJhbWUiKSxYbihlLmxWaWV3LG51bGwsIkV4cGVjdGVkIGNsZWFuIExGcmFtZSIpLFhuKGUudFZpZXcsbnVsbCwiRXhwZWN0ZWQgY2xlYW4gTEZyYW1lIiksWG4oZS5zZWxlY3RlZEluZGV4LC0xLCJFeHBlY3RlZCBjbGVhbiBMRnJhbWUiKSxYbihlLmVsZW1lbnREZXB0aENvdW50LDAsIkV4cGVjdGVkIGNsZWFuIExGcmFtZSIpLFhuKGUuY3VycmVudERpcmVjdGl2ZUluZGV4LC0xLCJFeHBlY3RlZCBjbGVhbiBMRnJhbWUiKSxYbihlLmN1cnJlbnROYW1lc3BhY2UsbnVsbCwiRXhwZWN0ZWQgY2xlYW4gTEZyYW1lIiksWG4oZS5iaW5kaW5nUm9vdEluZGV4LC0xLCJFeHBlY3RlZCBjbGVhbiBMRnJhbWUiKSxYbihlLmN1cnJlbnRRdWVyeUluZGV4LDAsIkV4cGVjdGVkIGNsZWFuIExGcmFtZSIpKTtjb25zdCBuPXRbMV07bmEubEZyYW1lPWUsbmdEZXZNb2RlJiZuLmZpcnN0Q2hpbGQmJnVpKG4uZmlyc3RDaGlsZCxuKSxlLmN1cnJlbnRUTm9kZT1uLmZpcnN0Q2hpbGQsZS5sVmlldz10LGUudFZpZXc9bixlLmNvbnRleHRMVmlldz10LGUuYmluZGluZ0luZGV4PW4uYmluZGluZ1N0YXJ0SW5kZXgsZS5pbkkxOG49ITF9ZnVuY3Rpb24gRGEoKXtjb25zdCB0PW5hLmxGcmFtZSxlPW51bGw9PT10P251bGw6dC5jaGlsZDtyZXR1cm4gbnVsbD09PWU/RWEodCk6ZX1mdW5jdGlvbiBFYSh0KXtjb25zdCBlPXtjdXJyZW50VE5vZGU6bnVsbCxpc1BhcmVudDohMCxsVmlldzpudWxsLHRWaWV3Om51bGwsc2VsZWN0ZWRJbmRleDotMSxjb250ZXh0TFZpZXc6bnVsbCxlbGVtZW50RGVwdGhDb3VudDowLGN1cnJlbnROYW1lc3BhY2U6bnVsbCxjdXJyZW50RGlyZWN0aXZlSW5kZXg6LTEsYmluZGluZ1Jvb3RJbmRleDotMSxiaW5kaW5nSW5kZXg6LTEsY3VycmVudFF1ZXJ5SW5kZXg6MCxwYXJlbnQ6dCxjaGlsZDpudWxsLGluSTE4bjohMX07cmV0dXJuIG51bGwhPT10JiYodC5jaGlsZD1lKSxlfWZ1bmN0aW9uIEFhKCl7Y29uc3QgdD1uYS5sRnJhbWU7cmV0dXJuIG5hLmxGcmFtZT10LnBhcmVudCx0LmN1cnJlbnRUTm9kZT1udWxsLHQubFZpZXc9bnVsbCx0fWNvbnN0IFJhPUFhO2Z1bmN0aW9uIFRhKCl7Y29uc3QgdD1BYSgpO3QuaXNQYXJlbnQ9ITAsdC50Vmlldz1udWxsLHQuc2VsZWN0ZWRJbmRleD0tMSx0LmNvbnRleHRMVmlldz1udWxsLHQuZWxlbWVudERlcHRoQ291bnQ9MCx0LmN1cnJlbnREaXJlY3RpdmVJbmRleD0tMSx0LmN1cnJlbnROYW1lc3BhY2U9bnVsbCx0LmJpbmRpbmdSb290SW5kZXg9LTEsdC5iaW5kaW5nSW5kZXg9LTEsdC5jdXJyZW50UXVlcnlJbmRleD0wfWZ1bmN0aW9uIE5hKCl7cmV0dXJuIG5hLmxGcmFtZS5zZWxlY3RlZEluZGV4fWZ1bmN0aW9uIElhKHQpe25nRGV2TW9kZSYmLTEhPT10JiZubyh0LG9pLCJJbmRleCBtdXN0IGJlIHBhc3QgSEVBREVSX09GRlNFVCAob3IgLTEpLiIpLG5nRGV2TW9kZSYmJG4odCxuYS5sRnJhbWUubFZpZXcubGVuZ3RoLCJDYW4ndCBzZXQgaW5kZXggcGFzc2VkIGVuZCBvZiBMVmlldyIpLG5hLmxGcmFtZS5zZWxlY3RlZEluZGV4PXR9ZnVuY3Rpb24gemEoKXtjb25zdCB0PW5hLmxGcmFtZTtyZXR1cm4gWWkodC50Vmlldyx0LnNlbGVjdGVkSW5kZXgpfWZ1bmN0aW9uIEhhKCl7bmEubEZyYW1lLmN1cnJlbnROYW1lc3BhY2U9eml9ZnVuY3Rpb24gRmEoKXshKGZ1bmN0aW9uIHQoKXtuYS5sRnJhbWUuY3VycmVudE5hbWVzcGFjZT1udWxsfSkoKX1mdW5jdGlvbiBMYSh0LGUpe25nRGV2TW9kZSYmQ2kodCk7Zm9yKGxldCBuPWUuZGlyZWN0aXZlU3RhcnQsbz1lLmRpcmVjdGl2ZUVuZDtuPG87bisrKXtjb25zdCBlPXQuZGF0YVtuXTtuZ0Rldk1vZGUmJm9vKGUsIkV4cGVjdGluZyBEaXJlY3RpdmVEZWYiKTtjb25zdCBvPWUudHlwZS5wcm90b3R5cGUse25nQWZ0ZXJDb250ZW50SW5pdDppLG5nQWZ0ZXJDb250ZW50Q2hlY2tlZDphLG5nQWZ0ZXJWaWV3SW5pdDpyLG5nQWZ0ZXJWaWV3Q2hlY2tlZDpzLG5nT25EZXN0cm95Omx9PW87aSYmKHQuY29udGVudEhvb2tzfHwodC5jb250ZW50SG9va3M9W10pKS5wdXNoKC1uLGkpLGEmJigodC5jb250ZW50SG9va3N8fCh0LmNvbnRlbnRIb29rcz1bXSkpLnB1c2gobixhKSwodC5jb250ZW50Q2hlY2tIb29rc3x8KHQuY29udGVudENoZWNrSG9va3M9W10pKS5wdXNoKG4sYSkpLHImJih0LnZpZXdIb29rc3x8KHQudmlld0hvb2tzPVtdKSkucHVzaCgtbixyKSxzJiYoKHQudmlld0hvb2tzfHwodC52aWV3SG9va3M9W10pKS5wdXNoKG4scyksKHQudmlld0NoZWNrSG9va3N8fCh0LnZpZXdDaGVja0hvb2tzPVtdKSkucHVzaChuLHMpKSxudWxsIT1sJiYodC5kZXN0cm95SG9va3N8fCh0LmRlc3Ryb3lIb29rcz1bXSkpLnB1c2gobixsKX19ZnVuY3Rpb24gQmEodCxlLG4pe1VhKHQsZSwzLG4pfWZ1bmN0aW9uIFZhKHQsZSxuLG8pe25nRGV2TW9kZSYmS24obiwzLCJJbml0IHByZS1vcmRlciBob29rcyBzaG91bGQgbm90IGJlIGNhbGxlZCBtb3JlIHRoYW4gb25jZSIpLCgzJnRbMl0pPT09biYmVWEodCxlLG4sbyl9ZnVuY3Rpb24gamEodCxlKXtuZ0Rldk1vZGUmJktuKGUsMywiSW5pdCBob29rcyBwaGFzZSBzaG91bGQgbm90IGJlIGluY3JlbWVudGVkIGFmdGVyIGFsbCBpbml0IGhvb2tzIGhhdmUgYmVlbiBydW4uIik7bGV0IG49dFsyXTsoMyZuKT09PWUmJihuJj0yMDQ3LG4rPTEsdFsyXT1uKX1mdW5jdGlvbiBVYSh0LGUsbixvKXtuZ0Rldk1vZGUmJlhuKHVhKCksITEsIkhvb2tzIHNob3VsZCBuZXZlciBiZSBydW4gd2hlbiBpbiBjaGVjayBubyBjaGFuZ2VzIG1vZGUuIik7Y29uc3QgaT1udWxsIT1vP286LTEsYT1lLmxlbmd0aC0xO2xldCByPTA7Zm9yKGxldCBzPXZvaWQgMCE9PW8/NjU1MzUmdFsxOF06MDtzPGE7cysrKWlmKCJudW1iZXIiPT10eXBlb2YgZVtzKzFdKXtpZihyPWVbc10sbnVsbCE9byYmcj49bylicmVha31lbHNlIGVbc108MCYmKHRbMThdKz02NTUzNiksKHI8aXx8LTE9PWkpJiYoV2EodCxuLGUscyksdFsxOF09KDQyOTQ5MDE3NjAmdFsxOF0pK3MrMikscysrfWZ1bmN0aW9uIFdhKHQsZSxuLG8pe2NvbnN0IGk9bltvXTwwLGE9bltvKzFdLHI9dFtpPy1uW29dOm5bb11dO2lmKGkpe2lmKHRbMl0+PjExPHRbMThdPj4xNiYmKDMmdFsyXSk9PT1lKXt0WzJdKz0yMDQ4LElpKDQscixhKTt0cnl7YS5jYWxsKHIpfWZpbmFsbHl7SWkoNSxyLGEpfX19ZWxzZXtJaSg0LHIsYSk7dHJ5e2EuY2FsbChyKX1maW5hbGx5e0lpKDUscixhKX19fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jb25zdCBHYT0tMTtjbGFzcyBZYXtjb25zdHJ1Y3Rvcih0LGUsbil7dGhpcy5mYWN0b3J5PXQsdGhpcy5yZXNvbHZpbmc9ITEsbmdEZXZNb2RlJiZvbyh0LCJGYWN0b3J5IG5vdCBzcGVjaWZpZWQiKSxuZ0Rldk1vZGUmJlhuKHR5cGVvZiB0LCJmdW5jdGlvbiIsIkV4cGVjdGVkIGZhY3RvcnkgZnVuY3Rpb24uIiksdGhpcy5jYW5TZWVWaWV3UHJvdmlkZXJzPWUsdGhpcy5pbmplY3RJbXBsPW59fWZ1bmN0aW9uIHFhKHQpe2xldCBlPSIiO3JldHVybiAxJnQmJihlKz0ifFRleHQiKSwyJnQmJihlKz0ifEVsZW1lbnQiKSw0JnQmJihlKz0ifENvbnRhaW5lciIpLDgmdCYmKGUrPSJ8RWxlbWVudENvbnRhaW5lciIpLDE2JnQmJihlKz0ifFByb2plY3Rpb24iKSwzMiZ0JiYoZSs9InxJY3VDb250YWluZXIiKSw2NCZ0JiYoZSs9InxQbGFjZWhvbGRlciIpLGUubGVuZ3RoPjA/ZS5zdWJzdHJpbmcoMSk6ZX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmZ1bmN0aW9uIFphKHQsZSxuKXtvbyh0LCJzaG91bGQgYmUgY2FsbGVkIHdpdGggYSBUTm9kZSIpLDA9PSh0LnR5cGUmZSkmJmlvKG58fGBFeHBlY3RlZCBbJHtxYShlKX1dIGJ1dCBnb3QgJHtxYSh0LnR5cGUpfS5gKX1mdW5jdGlvbiBYYSh0LGUsbil7Y29uc3Qgbz1WaSh0KTtsZXQgaT0wO2Zvcig7aTxuLmxlbmd0aDspe2NvbnN0IGE9bltpXTtpZigibnVtYmVyIj09dHlwZW9mIGEpe2lmKDAhPT1hKWJyZWFrO2krKztjb25zdCByPW5baSsrXSxzPW5baSsrXSxsPW5baSsrXTtuZ0Rldk1vZGUmJm5nRGV2TW9kZS5yZW5kZXJlclNldEF0dHJpYnV0ZSsrLG8/dC5zZXRBdHRyaWJ1dGUoZSxzLGwscik6ZS5zZXRBdHRyaWJ1dGVOUyhyLHMsbCl9ZWxzZXtjb25zdCByPWEscz1uWysraV07bmdEZXZNb2RlJiZuZ0Rldk1vZGUucmVuZGVyZXJTZXRBdHRyaWJ1dGUrKyxKYShyKT9vJiZ0LnNldFByb3BlcnR5KGUscixzKTpvP3Quc2V0QXR0cmlidXRlKGUscixzKTplLnNldEF0dHJpYnV0ZShyLHMpLGkrK319cmV0dXJuIGl9ZnVuY3Rpb24gS2EodCl7cmV0dXJuIDM9PT10fHw0PT09dHx8Nj09PXR9ZnVuY3Rpb24gSmEodCl7cmV0dXJuIDY0PT09dC5jaGFyQ29kZUF0KDApfWZ1bmN0aW9uIFFhKHQsZSl7aWYobnVsbD09PWV8fDA9PT1lLmxlbmd0aCk7ZWxzZSBpZihudWxsPT09dHx8MD09PXQubGVuZ3RoKXQ9ZS5zbGljZSgpO2Vsc2V7bGV0IG49LTE7Zm9yKGxldCBvPTA7bzxlLmxlbmd0aDtvKyspe2NvbnN0IGk9ZVtvXTsibnVtYmVyIj09dHlwZW9mIGk/bj1pOjA9PT1ufHwkYSh0LG4saSxudWxsLC0xPT09bnx8Mj09PW4/ZVsrK29dOm51bGwpfX1yZXR1cm4gdH1mdW5jdGlvbiAkYSh0LGUsbixvLGkpe2xldCBhPTAscj10Lmxlbmd0aDtpZigtMT09PWUpcj0tMTtlbHNlIGZvcig7YTx0Lmxlbmd0aDspe2NvbnN0IG49dFthKytdO2lmKCJudW1iZXIiPT10eXBlb2Ygbil7aWYobj09PWUpe3I9LTE7YnJlYWt9aWYobj5lKXtyPWEtMTticmVha319fWZvcig7YTx0Lmxlbmd0aDspe2NvbnN0IGU9dFthXTtpZigibnVtYmVyIj09dHlwZW9mIGUpYnJlYWs7aWYoZT09PW4pe2lmKG51bGw9PT1vKXJldHVybiB2b2lkKG51bGwhPT1pJiYodFthKzFdPWkpKTtpZihvPT09dFthKzFdKXJldHVybiB2b2lkKHRbYSsyXT1pKX1hKyssbnVsbCE9PW8mJmErKyxudWxsIT09aSYmYSsrfS0xIT09ciYmKHQuc3BsaWNlKHIsMCxlKSxhPXIrMSksdC5zcGxpY2UoYSsrLDAsbiksbnVsbCE9PW8mJnQuc3BsaWNlKGErKywwLG8pLG51bGwhPT1pJiZ0LnNwbGljZShhKyssMCxpKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovZnVuY3Rpb24gdHIodCl7cmV0dXJuIHQhPT1HYX1mdW5jdGlvbiBlcih0KXtyZXR1cm4gbmdEZXZNb2RlJiZZbih0LCJOdW1iZXIgZXhwZWN0ZWQiKSxuZ0Rldk1vZGUmJktuKHQsLTEsIk5vdCBhIHZhbGlkIHN0YXRlLiIpLG5nRGV2TW9kZSYmZW8oMzI3NjcmdCxvaSwiUGFyZW50IGluamVjdG9yIG11c3QgYmUgcG9pbnRpbmcgcGFzdCBIRUFERVJfT0ZGU0VULiIpLDMyNzY3JnR9ZnVuY3Rpb24gbnIodCxlKXtsZXQgbj0oZnVuY3Rpb24gbyh0KXtyZXR1cm4gdD4+MTZ9KSh0KSxpPWU7Zm9yKDtuPjA7KWk9aVsxNV0sbi0tO3JldHVybiBpfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9sZXQgb3I9ITA7ZnVuY3Rpb24gaXIodCl7Y29uc3QgZT1vcjtyZXR1cm4gb3I9dCxlfWxldCBhcj0wO2Z1bmN0aW9uIHJyKHQsZSl7Y29uc3Qgbj1scih0LGUpO2lmKC0xIT09bilyZXR1cm4gbjtjb25zdCBvPWVbMV07by5maXJzdENyZWF0ZVBhc3MmJih0LmluamVjdG9ySW5kZXg9ZS5sZW5ndGgsc3Ioby5kYXRhLHQpLHNyKGUsbnVsbCksc3Ioby5ibHVlcHJpbnQsbnVsbCkpO2NvbnN0IGk9Y3IodCxlKSxhPXQuaW5qZWN0b3JJbmRleDtpZih0cihpKSl7Y29uc3QgdD1lcihpKSxuPW5yKGksZSksbz1uWzFdLmRhdGE7Zm9yKGxldCBpPTA7aTw4O2krKyllW2EraV09blt0K2ldfG9bdCtpXX1yZXR1cm4gZVthKzhdPWksYX1mdW5jdGlvbiBzcih0LGUpe3QucHVzaCgwLDAsMCwwLDAsMCwwLDAsZSl9ZnVuY3Rpb24gbHIodCxlKXtyZXR1cm4tMT09PXQuaW5qZWN0b3JJbmRleHx8dC5wYXJlbnQmJnQucGFyZW50LmluamVjdG9ySW5kZXg9PT10LmluamVjdG9ySW5kZXh8fG51bGw9PT1lW3QuaW5qZWN0b3JJbmRleCs4XT8tMToobmdEZXZNb2RlJiZybyhlLHQuaW5qZWN0b3JJbmRleCksdC5pbmplY3RvckluZGV4KX1mdW5jdGlvbiBjcih0LGUpe2lmKHQucGFyZW50JiYtMSE9PXQucGFyZW50LmluamVjdG9ySW5kZXgpcmV0dXJuIHQucGFyZW50LmluamVjdG9ySW5kZXg7bGV0IG49MCxvPW51bGwsaT1lO2Zvcig7bnVsbCE9PWk7KXtjb25zdCB0PWlbMV0sZT10LnR5cGU7aWYoMj09PWU/KG5nRGV2TW9kZSYmb28odC5kZWNsVE5vZGUsIkVtYmVkZGVkIFROb2RlcyBzaG91bGQgaGF2ZSBkZWNsYXJhdGlvbiBwYXJlbnRzLiIpLG89dC5kZWNsVE5vZGUpOjE9PT1lP289aVs2XToobmdEZXZNb2RlJiZYbih0LnR5cGUsMCwiUm9vdCB0eXBlIGV4cGVjdGVkIiksbz1udWxsKSxudWxsPT09bylyZXR1cm4gR2E7aWYobmdEZXZNb2RlJiZvJiZtaShvLGlbMTVdKSxuKyssaT1pWzE1XSwtMSE9PW8uaW5qZWN0b3JJbmRleClyZXR1cm4gby5pbmplY3RvckluZGV4fG48PDE2fXJldHVybiBHYX1mdW5jdGlvbiBkcih0LGUsbil7IShmdW5jdGlvbiBvKHQsZSxuKXtsZXQgbztuZ0Rldk1vZGUmJlhuKGUuZmlyc3RDcmVhdGVQYXNzLCEwLCJleHBlY3RlZCBmaXJzdENyZWF0ZVBhc3MgdG8gYmUgdHJ1ZSIpLCJzdHJpbmciPT10eXBlb2Ygbj9vPW4uY2hhckNvZGVBdCgwKXx8MDpuLmhhc093blByb3BlcnR5KFZvKSYmKG89bltWb10pLG51bGw9PW8mJihvPW5bVm9dPWFyKyspO2NvbnN0IGk9MjU1Jm87ZS5kYXRhW3QrKGk+PjUpXXw9MTw8aX0pKHQsZSxuKX1mdW5jdGlvbiBwcih0LGUsbil7aWYobiZ5by5PcHRpb25hbClyZXR1cm4gdDtHbihlLCJOb2RlSW5qZWN0b3IiKX1mdW5jdGlvbiBtcih0LGUsbixvKXtpZihuJnlvLk9wdGlvbmFsJiZ2b2lkIDA9PT1vJiYobz1udWxsKSwwPT0obiYoeW8uU2VsZnx5by5Ib3N0KSkpe2NvbnN0IGk9dFs5XSxhPUNvKHZvaWQgMCk7dHJ5e3JldHVybiBpP2kuZ2V0KGUsbyxuJnlvLk9wdGlvbmFsKTpNbyhlLG8sbiZ5by5PcHRpb25hbCl9ZmluYWxseXtDbyhhKX19cmV0dXJuIHByKG8sZSxuKX1mdW5jdGlvbiB1cih0LGUsbixvPXlvLkRlZmF1bHQsaSl7aWYobnVsbCE9PXQpe2NvbnN0IGE9KGZ1bmN0aW9uIGEodCl7aWYobmdEZXZNb2RlJiZvbyh0LCJ0b2tlbiBtdXN0IGJlIGRlZmluZWQiKSwic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIHQuY2hhckNvZGVBdCgwKXx8MDtjb25zdCBlPXQuaGFzT3duUHJvcGVydHkoVm8pP3RbVm9dOnZvaWQgMDtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGU/ZT49MD8yNTUmZToobmdEZXZNb2RlJiZYbihlLC0xLCJFeHBlY3RpbmcgdG8gZ2V0IFNwZWNpYWwgSW5qZWN0b3IgSWQiKSxncik6ZX0pKG4pO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBhKXtpZigha2EoZSx0LG8pKXJldHVybiBvJnlvLkhvc3Q/cHIoaSxuLG8pOm1yKGUsbixvLGkpO3RyeXtjb25zdCB0PWEoKTtpZihudWxsIT10fHxvJnlvLk9wdGlvbmFsKXJldHVybiB0O0duKG4pfWZpbmFsbHl7UmEoKX19ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIGEpe2xldCBpPW51bGwscj1scih0LGUpLHM9R2EsbD1vJnlvLkhvc3Q/ZVsxNl1bNl06bnVsbDtmb3IoKC0xPT09cnx8byZ5by5Ta2lwU2VsZikmJihzPS0xPT09cj9jcih0LGUpOmVbcis4XSxzIT09R2EmJkNyKG8sITEpPyhpPWVbMV0scj1lcihzKSxlPW5yKHMsZSkpOnI9LTEpOy0xIT09cjspe25nRGV2TW9kZSYmUGkoZSxyKTtjb25zdCB0PWVbMV07aWYobmdEZXZNb2RlJiZtaSh0LmRhdGFbcis4XSxlKSxfcihhLHIsdC5kYXRhKSl7Y29uc3QgdD1ocihyLGUsbixpLG8sbCk7aWYodCE9PWZyKXJldHVybiB0fXM9ZVtyKzhdLHMhPT1HYSYmQ3IobyxlWzFdLmRhdGFbcis4XT09PWwpJiZfcihhLHIsZSk/KGk9dCxyPWVyKHMpLGU9bnIocyxlKSk6cj0tMX19fXJldHVybiBtcihlLG4sbyxpKX1jb25zdCBmcj17fTtmdW5jdGlvbiBncigpe3JldHVybiBuZXcgTXIoc2EoKSxpYSgpKX1mdW5jdGlvbiBocih0LGUsbixvLGksYSl7Y29uc3Qgcj1lWzFdLHM9ci5kYXRhW3QrOF0sbD1icihzLHIsbixudWxsPT1vP2NpKHMpJiZvcjpvIT1yJiYwIT0oMyZzLnR5cGUpLGkmeW8uSG9zdCYmYT09PXMpO3JldHVybiBudWxsIT09bD95cihlLHIsbCxzKTpmcn1mdW5jdGlvbiBicih0LGUsbixvLGkpe2NvbnN0IGE9dC5wcm92aWRlckluZGV4ZXMscj1lLmRhdGEscz0xMDQ4NTc1JmEsbD10LmRpcmVjdGl2ZVN0YXJ0LGM9YT4+MjAsZD1pP3MrYzp0LmRpcmVjdGl2ZUVuZDtmb3IobGV0IHQ9bz9zOnMrYzt0PGQ7dCsrKXtjb25zdCBlPXJbdF07aWYodDxsJiZuPT09ZXx8dD49bCYmZS50eXBlPT09bilyZXR1cm4gdH1pZihpKXtjb25zdCB0PXJbbF07aWYodCYmcGkodCkmJnQudHlwZT09PW4pcmV0dXJuIGx9cmV0dXJuIG51bGx9ZnVuY3Rpb24geXIodCxlLG4sbyl7bGV0IGk9dFtuXTtjb25zdCBhPWUuZGF0YTtpZigoZnVuY3Rpb24gcih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIFlhfSkoaSkpe2NvbnN0IHI9aTtyLnJlc29sdmluZyYmVW4oam4oYVtuXSkpO2NvbnN0IHM9aXIoci5jYW5TZWVWaWV3UHJvdmlkZXJzKTtyLnJlc29sdmluZz0hMDtjb25zdCBsPXIuaW5qZWN0SW1wbD9DbyhyLmluamVjdEltcGwpOm51bGwsYz1rYSh0LG8seW8uRGVmYXVsdCk7bmdEZXZNb2RlJiZYbihjLCEwLCJCZWNhdXNlIGZsYWdzIGRvIG5vdCBjb250YWluIGBTa2lwU2VsZicgd2UgZXhwZWN0IHRoaXMgdG8gYWx3YXlzIHN1Y2NlZWQuIik7dHJ5e2k9dFtuXT1yLmZhY3Rvcnkodm9pZCAwLGEsdCxvKSxlLmZpcnN0Q3JlYXRlUGFzcyYmbj49by5kaXJlY3RpdmVTdGFydCYmKG5nRGV2TW9kZSYmKGZ1bmN0aW9uIHModCl7dm9pZCAwIT09dC50eXBlJiZudWxsIT10LnNlbGVjdG9ycyYmdm9pZCAwIT09dC5pbnB1dHN8fGlvKCJFeHBlY3RlZCBhIERpcmVjdGl2ZURlZi9Db21wb25lbnREZWYgYW5kIHRoaXMgb2JqZWN0IGRvZXMgbm90IHNlZW0gdG8gaGF2ZSB0aGUgZXhwZWN0ZWQgc2hhcGUuIil9KShhW25dKSwoCi8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpmdW5jdGlvbiBsKHQsZSxuKXtuZ0Rldk1vZGUmJkNpKG4pO2NvbnN0e25nT25DaGFuZ2VzOm8sbmdPbkluaXQ6aSxuZ0RvQ2hlY2s6YX09ZS50eXBlLnByb3RvdHlwZTtpZihvKXtjb25zdCBvPURpKGUpOyhuLnByZU9yZGVySG9va3N8fChuLnByZU9yZGVySG9va3M9W10pKS5wdXNoKHQsbyksKG4ucHJlT3JkZXJDaGVja0hvb2tzfHwobi5wcmVPcmRlckNoZWNrSG9va3M9W10pKS5wdXNoKHQsbyl9aSYmKG4ucHJlT3JkZXJIb29rc3x8KG4ucHJlT3JkZXJIb29rcz1bXSkpLnB1c2goMC10LGkpLGEmJigobi5wcmVPcmRlckhvb2tzfHwobi5wcmVPcmRlckhvb2tzPVtdKSkucHVzaCh0LGEpLChuLnByZU9yZGVyQ2hlY2tIb29rc3x8KG4ucHJlT3JkZXJDaGVja0hvb2tzPVtdKSkucHVzaCh0LGEpKX0pKG4sYVtuXSxlKSl9ZmluYWxseXtudWxsIT09bCYmQ28obCksaXIocyksci5yZXNvbHZpbmc9ITEsUmEoKX19cmV0dXJuIGl9ZnVuY3Rpb24gX3IodCxlLG4pe3JldHVybiEhKG5bZSsodD4+NSldJjE8PHQpfWZ1bmN0aW9uIENyKHQsZSl7cmV0dXJuISh0JnlvLlNlbGZ8fHQmeW8uSG9zdCYmZSl9Y2xhc3MgTXJ7Y29uc3RydWN0b3IodCxlKXt0aGlzLl90Tm9kZT10LHRoaXMuX2xWaWV3PWV9Z2V0KHQsZSl7cmV0dXJuIHVyKHRoaXMuX3ROb2RlLHRoaXMuX2xWaWV3LHQsdm9pZCAwLGUpfX1mdW5jdGlvbiB2cih0KXtyZXR1cm4gdm8oKCgpPT57Y29uc3QgZT10LnByb3RvdHlwZS5jb25zdHJ1Y3RvcixuPWVbQm9dfHx4cihlKSxvPU9iamVjdC5wcm90b3R5cGU7bGV0IGk9T2JqZWN0LmdldFByb3RvdHlwZU9mKHQucHJvdG90eXBlKS5jb25zdHJ1Y3Rvcjtmb3IoO2kmJmkhPT1vOyl7Y29uc3QgdD1pW0JvXXx8eHIoaSk7aWYodCYmdCE9PW4pcmV0dXJuIHQ7aT1PYmplY3QuZ2V0UHJvdG90eXBlT2YoaSl9cmV0dXJuIHQ9Pm5ldyB0fSkpfWZ1bmN0aW9uIHhyKHQpe3JldHVybiBIbih0KT8oKT0+e2NvbnN0IGU9eHIoem4odCkpO3JldHVybiBlJiZlKCl9OndpKHQpfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiBPcih0KXtyZXR1cm4oZnVuY3Rpb24gZSh0LG4pe2lmKG5nRGV2TW9kZSYmWmEodCwxNSksbmdEZXZNb2RlJiZvbyh0LCJleHBlY3RpbmcgdE5vZGUiKSwiY2xhc3MiPT09bilyZXR1cm4gdC5jbGFzc2VzO2lmKCJzdHlsZSI9PT1uKXJldHVybiB0LnN0eWxlcztjb25zdCBvPXQuYXR0cnM7aWYobyl7Y29uc3QgdD1vLmxlbmd0aDtsZXQgZT0wO2Zvcig7ZTx0Oyl7Y29uc3QgaT1vW2VdO2lmKEthKGkpKWJyZWFrO2lmKDA9PT1pKWUrPTI7ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIGkpZm9yKGUrKztlPHQmJiJzdHJpbmciPT10eXBlb2Ygb1tlXTspZSsrO2Vsc2V7aWYoaT09PW4pcmV0dXJuIG9bZSsxXTtlKz0yfX19cmV0dXJuIG51bGx9KShzYSgpLHQpfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jb25zdCBQcj0iX19hbm5vdGF0aW9uc19fIix3cj0iX19wYXJhbWV0ZXJzX18iLGtyPSJfX3Byb3BfX21ldGFkYXRhX18iO2Z1bmN0aW9uIFNyKHQsZSxuLG8saSl7cmV0dXJuIHZvKCgoKT0+e2NvbnN0IGE9RHIoZSk7ZnVuY3Rpb24gciguLi50KXtpZih0aGlzIGluc3RhbmNlb2YgcilyZXR1cm4gYS5jYWxsKHRoaXMsLi4udCksdGhpcztjb25zdCBlPW5ldyByKC4uLnQpO3JldHVybiBmdW5jdGlvbiBuKGEpe3JldHVybiBpJiZpKGEsLi4udCksKGEuaGFzT3duUHJvcGVydHkoUHIpP2FbUHJdOk9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLFByLHt2YWx1ZTpbXX0pW1ByXSkucHVzaChlKSxvJiZvKGEpLGF9fXJldHVybiBuJiYoci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuLnByb3RvdHlwZSkpLHIucHJvdG90eXBlLm5nTWV0YWRhdGFOYW1lPXQsci5hbm5vdGF0aW9uQ2xzPXIscn0pKX1mdW5jdGlvbiBEcih0KXtyZXR1cm4gZnVuY3Rpb24gZSguLi5uKXtpZih0KXtjb25zdCBlPXQoLi4ubik7Zm9yKGNvbnN0IHQgaW4gZSl0aGlzW3RdPWVbdF19fX1mdW5jdGlvbiBFcih0LGUsbil7cmV0dXJuIHZvKCgoKT0+e2NvbnN0IG89RHIoZSk7ZnVuY3Rpb24gaSguLi50KXtpZih0aGlzIGluc3RhbmNlb2YgaSlyZXR1cm4gby5hcHBseSh0aGlzLHQpLHRoaXM7Y29uc3QgZT1uZXcgaSguLi50KTtyZXR1cm4gbi5hbm5vdGF0aW9uPWUsbjtmdW5jdGlvbiBuKHQsbixvKXtjb25zdCBpPXQuaGFzT3duUHJvcGVydHkod3IpP3Rbd3JdOk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LHdyLHt2YWx1ZTpbXX0pW3dyXTtmb3IoO2kubGVuZ3RoPD1vOylpLnB1c2gobnVsbCk7cmV0dXJuKGlbb109aVtvXXx8W10pLnB1c2goZSksdH19cmV0dXJuIG4mJihpLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG4ucHJvdG90eXBlKSksaS5wcm90b3R5cGUubmdNZXRhZGF0YU5hbWU9dCxpLmFubm90YXRpb25DbHM9aSxpfSkpfWZ1bmN0aW9uIEFyKHQsZSxuLG8pe3JldHVybiB2bygoKCk9Pntjb25zdCBpPURyKGUpO2Z1bmN0aW9uIGEoLi4udCl7aWYodGhpcyBpbnN0YW5jZW9mIGEpcmV0dXJuIGkuYXBwbHkodGhpcyx0KSx0aGlzO2NvbnN0IGU9bmV3IGEoLi4udCk7cmV0dXJuIGZ1bmN0aW9uIG4oaSxhKXtjb25zdCByPWkuY29uc3RydWN0b3Iscz1yLmhhc093blByb3BlcnR5KGtyKT9yW2tyXTpPYmplY3QuZGVmaW5lUHJvcGVydHkocixrcix7dmFsdWU6e319KVtrcl07c1thXT1zLmhhc093blByb3BlcnR5KGEpJiZzW2FdfHxbXSxzW2FdLnVuc2hpZnQoZSksbyYmbyhpLGEsLi4udCl9fXJldHVybiBuJiYoYS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuLnByb3RvdHlwZSkpLGEucHJvdG90eXBlLm5nTWV0YWRhdGFOYW1lPXQsYS5hbm5vdGF0aW9uQ2xzPWEsYX0pKX1jb25zdCBScj0oZnVuY3Rpb24gVHIoKXtyZXR1cm4gRXIoIkF0dHJpYnV0ZSIsKHQ9Pih7YXR0cmlidXRlTmFtZTp0LF9fTkdfRUxFTUVOVF9JRF9fOigpPT5Pcih0KX0pKSl9KSgpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3MgTnJ7Y29uc3RydWN0b3IodCxlKXt0aGlzLl9kZXNjPXQsdGhpcy5uZ01ldGFkYXRhTmFtZT0iSW5qZWN0aW9uVG9rZW4iLHRoaXMuybVwcm92PXZvaWQgMCwibnVtYmVyIj09dHlwZW9mIGU/KCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmJG4oZSwwLCJPbmx5IG5lZ2F0aXZlIG51bWJlcnMgYXJlIHN1cHBvcnRlZCBoZXJlIiksdGhpcy5fX05HX0VMRU1FTlRfSURfXz1lKTp2b2lkIDAhPT1lJiYodGhpcy7JtXByb3Y9bG8oe3Rva2VuOnRoaXMscHJvdmlkZWRJbjplLnByb3ZpZGVkSW58fCJyb290IixmYWN0b3J5OmUuZmFjdG9yeX0pKX10b1N0cmluZygpe3JldHVybmBJbmplY3Rpb25Ub2tlbiAke3RoaXMuX2Rlc2N9YH19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL25ldyBOcigiQW5hbHl6ZUZvckVudHJ5Q29tcG9uZW50cyIpO2NsYXNzIElye31jb25zdCB6cj1BcigiQ29udGVudENoaWxkcmVuIiwoKHQsZT17fSk9Pk9iamVjdC5hc3NpZ24oe3NlbGVjdG9yOnQsZmlyc3Q6ITEsaXNWaWV3UXVlcnk6ITEsZGVzY2VuZGFudHM6ITEsZW1pdERpc3RpbmN0Q2hhbmdlc09ubHk6ITF9LGUpKSxJciksSHI9QXIoIkNvbnRlbnRDaGlsZCIsKCh0LGU9e30pPT5PYmplY3QuYXNzaWduKHtzZWxlY3Rvcjp0LGZpcnN0OiEwLGlzVmlld1F1ZXJ5OiExLGRlc2NlbmRhbnRzOiEwfSxlKSksSXIpO0FyKCJWaWV3Q2hpbGRyZW4iLCgodCxlPXt9KT0+T2JqZWN0LmFzc2lnbih7c2VsZWN0b3I6dCxmaXJzdDohMSxpc1ZpZXdRdWVyeTohMCxkZXNjZW5kYW50czohMCxlbWl0RGlzdGluY3RDaGFuZ2VzT25seTohMX0sZSkpLElyKTtjb25zdCBGcj1BcigiVmlld0NoaWxkIiwoKHQsZSk9Pk9iamVjdC5hc3NpZ24oe3NlbGVjdG9yOnQsZmlyc3Q6ITAsaXNWaWV3UXVlcnk6ITAsZGVzY2VuZGFudHM6ITB9LGUpKSxJcik7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwp2YXIgTHIsQnIsVnI7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpmdW5jdGlvbiBqcigpe2NvbnN0IHQ9RW8ubmc7aWYoIXR8fCF0Lsm1Y29tcGlsZXJGYWNhZGUpdGhyb3cgbmV3IEVycm9yKCJBbmd1bGFyIEpJVCBjb21waWxhdGlvbiBmYWlsZWQ6ICdAYW5ndWxhci9jb21waWxlcicgbm90IGxvYWRlZCFcbiAgLSBKSVQgY29tcGlsYXRpb24gaXMgZGlzY291cmFnZWQgZm9yIHByb2R1Y3Rpb24gdXNlLWNhc2VzISBDb25zaWRlciBBT1QgbW9kZSBpbnN0ZWFkLlxuICAtIERpZCB5b3UgYm9vdHN0cmFwIHVzaW5nICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyLWR5bmFtaWMnIG9yICdAYW5ndWxhci9wbGF0Zm9ybS1zZXJ2ZXInP1xuICAtIEFsdGVybmF0aXZlbHkgcHJvdmlkZSB0aGUgY29tcGlsZXIgd2l0aCAnaW1wb3J0IFwiQGFuZ3VsYXIvY29tcGlsZXJcIjsnIGJlZm9yZSBib290c3RyYXBwaW5nLiIpO3JldHVybiB0Lsm1Y29tcGlsZXJGYWNhZGV9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLyEoZnVuY3Rpb24odCl7dFt0LlRva2VuPTBdPSJUb2tlbiIsdFt0LkF0dHJpYnV0ZT0xXT0iQXR0cmlidXRlIix0W3QuQ2hhbmdlRGV0ZWN0b3JSZWY9Ml09IkNoYW5nZURldGVjdG9yUmVmIix0W3QuSW52YWxpZD0zXT0iSW52YWxpZCJ9KShMcnx8KExyPXt9KSksKGZ1bmN0aW9uKHQpe3RbdC5EaXJlY3RpdmU9MF09IkRpcmVjdGl2ZSIsdFt0LkNvbXBvbmVudD0xXT0iQ29tcG9uZW50Iix0W3QuSW5qZWN0YWJsZT0yXT0iSW5qZWN0YWJsZSIsdFt0LlBpcGU9M109IlBpcGUiLHRbdC5OZ01vZHVsZT00XT0iTmdNb2R1bGUifSkoQnJ8fChCcj17fSkpLChmdW5jdGlvbih0KXt0W3QuRW11bGF0ZWQ9MF09IkVtdWxhdGVkIix0W3QuTm9uZT0yXT0iTm9uZSIsdFt0LlNoYWRvd0RvbT0zXT0iU2hhZG93RG9tIn0pKFZyfHwoVnI9e30pKTtjb25zdCBVcj1GdW5jdGlvbjtmdW5jdGlvbiBXcih0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdH1mdW5jdGlvbiBHcih0LGUpe3ZvaWQgMD09PWUmJihlPXQpO2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKXtsZXQgbz10W25dO0FycmF5LmlzQXJyYXkobyk/KGU9PT10JiYoZT10LnNsaWNlKDAsbikpLEdyKG8sZSkpOmUhPT10JiZlLnB1c2gobyl9cmV0dXJuIGV9ZnVuY3Rpb24gWXIodCxlKXt0LmZvckVhY2goKHQ9PkFycmF5LmlzQXJyYXkodCk/WXIodCxlKTplKHQpKSl9ZnVuY3Rpb24gcXIodCxlLG4pe2U+PXQubGVuZ3RoP3QucHVzaChuKTp0LnNwbGljZShlLDAsbil9ZnVuY3Rpb24gWnIodCxlKXtyZXR1cm4gZT49dC5sZW5ndGgtMT90LnBvcCgpOnQuc3BsaWNlKGUsMSlbMF19ZnVuY3Rpb24gWHIodCxlKXtjb25zdCBuPVtdO2ZvcihsZXQgbz0wO288dDtvKyspbi5wdXNoKGUpO3JldHVybiBufWZ1bmN0aW9uIEtyKHQsZSxuKXtsZXQgbz1Rcih0LGUpO3JldHVybiBvPj0wP3RbMXxvXT1uOihvPX5vLChmdW5jdGlvbiBpKHQsZSxuLG8pe25nRGV2TW9kZSYmdG8oZSx0Lmxlbmd0aCwiQ2FuJ3QgaW5zZXJ0IHBhc3QgYXJyYXkgZW5kLiIpO2xldCBpPXQubGVuZ3RoO2lmKGk9PWUpdC5wdXNoKG4sbyk7ZWxzZSBpZigxPT09aSl0LnB1c2gobyx0WzBdKSx0WzBdPW47ZWxzZXtmb3IoaS0tLHQucHVzaCh0W2ktMV0sdFtpXSk7aT5lOyl0W2ldPXRbaS0yXSxpLS07dFtlXT1uLHRbZSsxXT1vfX0pKHQsbyxlLG4pKSxvfWZ1bmN0aW9uIEpyKHQsZSl7Y29uc3Qgbj1Rcih0LGUpO2lmKG4+PTApcmV0dXJuIHRbMXxuXX1mdW5jdGlvbiBRcih0LGUpe3JldHVybihmdW5jdGlvbiBuKHQsZSxvKXtuZ0Rldk1vZGUmJlhuKEFycmF5LmlzQXJyYXkodCksITAsIkV4cGVjdGluZyBhbiBhcnJheSIpO2xldCBpPTAsYT10Lmxlbmd0aD4+bztmb3IoO2EhPT1pOyl7Y29uc3Qgbj1pKyhhLWk+PjEpLHI9dFtuPDxvXTtpZihlPT09cilyZXR1cm4gbjw8bztyPmU/YT1uOmk9bisxfXJldHVybn4oYTw8byl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLykodCxlLDEpfWNvbnN0ICRyPS9eZnVuY3Rpb25ccytcUytcKFwpXHMqe1tcc1xTXStcLmFwcGx5XCh0aGlzLFxzKihhcmd1bWVudHN8W14oKV0rXChhcmd1bWVudHNcKSlcKS8sdHM9L15jbGFzc1xzK1tBLVphLXpcZCRfXSpccypleHRlbmRzXHMrW157XSt7Lyxlcz0vXmNsYXNzXHMrW0EtWmEtelxkJF9dKlxzKmV4dGVuZHNccytbXntdK3tbXHNcU10qY29uc3RydWN0b3JccypcKC8sbnM9L15jbGFzc1xzK1tBLVphLXpcZCRfXSpccypleHRlbmRzXHMrW157XSt7W1xzXFNdKmNvbnN0cnVjdG9yXHMqXChcKVxzKntccypzdXBlclwoXC5cLlwuYXJndW1lbnRzXCkvO2NsYXNzIG9ze2NvbnN0cnVjdG9yKHQpe3RoaXMuX3JlZmxlY3Q9dHx8RW8uUmVmbGVjdH1pc1JlZmxlY3Rpb25FbmFibGVkKCl7cmV0dXJuITB9ZmFjdG9yeSh0KXtyZXR1cm4oLi4uZSk9Pm5ldyB0KC4uLmUpfV96aXBUeXBlc0FuZEFubm90YXRpb25zKHQsZSl7bGV0IG47bj1Ycih2b2lkIDA9PT10P2UubGVuZ3RoOnQubGVuZ3RoKTtmb3IobGV0IG89MDtvPG4ubGVuZ3RoO28rKyluW29dPXZvaWQgMD09PXQ/W106dFtvXSYmdFtvXSE9T2JqZWN0P1t0W29dXTpbXSxlJiZudWxsIT1lW29dJiYobltvXT1uW29dLmNvbmNhdChlW29dKSk7cmV0dXJuIG59X293blBhcmFtZXRlcnModCxlKXtpZigoZnVuY3Rpb24gbih0KXtyZXR1cm4gJHIudGVzdCh0KXx8bnMudGVzdCh0KXx8dHMudGVzdCh0KSYmIWVzLnRlc3QodCl9KSh0LnRvU3RyaW5nKCkpKXJldHVybiBudWxsO2lmKHQucGFyYW1ldGVycyYmdC5wYXJhbWV0ZXJzIT09ZS5wYXJhbWV0ZXJzKXJldHVybiB0LnBhcmFtZXRlcnM7Y29uc3Qgbz10LmN0b3JQYXJhbWV0ZXJzO2lmKG8mJm8hPT1lLmN0b3JQYXJhbWV0ZXJzKXtjb25zdCB0PSJmdW5jdGlvbiI9PXR5cGVvZiBvP28oKTpvLGU9dC5tYXAoKHQ9PnQmJnQudHlwZSkpLG49dC5tYXAoKHQ9PnQmJmlzKHQuZGVjb3JhdG9ycykpKTtyZXR1cm4gdGhpcy5femlwVHlwZXNBbmRBbm5vdGF0aW9ucyhlLG4pfWNvbnN0IGk9dC5oYXNPd25Qcm9wZXJ0eSh3cikmJnRbd3JdLGE9dGhpcy5fcmVmbGVjdCYmdGhpcy5fcmVmbGVjdC5nZXRPd25NZXRhZGF0YSYmdGhpcy5fcmVmbGVjdC5nZXRPd25NZXRhZGF0YSgiZGVzaWduOnBhcmFtdHlwZXMiLHQpO3JldHVybiBhfHxpP3RoaXMuX3ppcFR5cGVzQW5kQW5ub3RhdGlvbnMoYSxpKTpYcih0Lmxlbmd0aCl9cGFyYW1ldGVycyh0KXtpZighV3IodCkpcmV0dXJuW107Y29uc3QgZT1hcyh0KTtsZXQgbj10aGlzLl9vd25QYXJhbWV0ZXJzKHQsZSk7cmV0dXJuIG58fGU9PT1PYmplY3R8fChuPXRoaXMucGFyYW1ldGVycyhlKSksbnx8W119X293bkFubm90YXRpb25zKHQsZSl7aWYodC5hbm5vdGF0aW9ucyYmdC5hbm5vdGF0aW9ucyE9PWUuYW5ub3RhdGlvbnMpe2xldCBlPXQuYW5ub3RhdGlvbnM7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGUmJmUuYW5ub3RhdGlvbnMmJihlPWUuYW5ub3RhdGlvbnMpLGV9cmV0dXJuIHQuZGVjb3JhdG9ycyYmdC5kZWNvcmF0b3JzIT09ZS5kZWNvcmF0b3JzP2lzKHQuZGVjb3JhdG9ycyk6dC5oYXNPd25Qcm9wZXJ0eShQcik/dFtQcl06bnVsbH1hbm5vdGF0aW9ucyh0KXtpZighV3IodCkpcmV0dXJuW107Y29uc3QgZT1hcyh0KSxuPXRoaXMuX293bkFubm90YXRpb25zKHQsZSl8fFtdO3JldHVybihlIT09T2JqZWN0P3RoaXMuYW5ub3RhdGlvbnMoZSk6W10pLmNvbmNhdChuKX1fb3duUHJvcE1ldGFkYXRhKHQsZSl7aWYodC5wcm9wTWV0YWRhdGEmJnQucHJvcE1ldGFkYXRhIT09ZS5wcm9wTWV0YWRhdGEpe2xldCBlPXQucHJvcE1ldGFkYXRhO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlJiZlLnByb3BNZXRhZGF0YSYmKGU9ZS5wcm9wTWV0YWRhdGEpLGV9aWYodC5wcm9wRGVjb3JhdG9ycyYmdC5wcm9wRGVjb3JhdG9ycyE9PWUucHJvcERlY29yYXRvcnMpe2NvbnN0IGU9dC5wcm9wRGVjb3JhdG9ycyxuPXt9O3JldHVybiBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKCh0PT57blt0XT1pcyhlW3RdKX0pKSxufXJldHVybiB0Lmhhc093blByb3BlcnR5KGtyKT90W2tyXTpudWxsfXByb3BNZXRhZGF0YSh0KXtpZighV3IodCkpcmV0dXJue307Y29uc3QgZT1hcyh0KSxuPXt9O2lmKGUhPT1PYmplY3Qpe2NvbnN0IHQ9dGhpcy5wcm9wTWV0YWRhdGEoZSk7T2JqZWN0LmtleXModCkuZm9yRWFjaCgoZT0+e25bZV09dFtlXX0pKX1jb25zdCBvPXRoaXMuX293blByb3BNZXRhZGF0YSh0LGUpO3JldHVybiBvJiZPYmplY3Qua2V5cyhvKS5mb3JFYWNoKCh0PT57Y29uc3QgZT1bXTtuLmhhc093blByb3BlcnR5KHQpJiZlLnB1c2goLi4ublt0XSksZS5wdXNoKC4uLm9bdF0pLG5bdF09ZX0pKSxufW93blByb3BNZXRhZGF0YSh0KXtyZXR1cm4gV3IodCkmJnRoaXMuX293blByb3BNZXRhZGF0YSh0LGFzKHQpKXx8e319aGFzTGlmZWN5Y2xlSG9vayh0LGUpe3JldHVybiB0IGluc3RhbmNlb2YgVXImJmUgaW4gdC5wcm90b3R5cGV9Z3VhcmRzKHQpe3JldHVybnt9fWdldHRlcih0KXtyZXR1cm4gbmV3IEZ1bmN0aW9uKCJvIiwicmV0dXJuIG8uIit0KyI7Iil9c2V0dGVyKHQpe3JldHVybiBuZXcgRnVuY3Rpb24oIm8iLCJ2IiwicmV0dXJuIG8uIit0KyIgPSB2OyIpfW1ldGhvZCh0KXtyZXR1cm4gbmV3IEZ1bmN0aW9uKCJvIiwiYXJncyIsYGlmICghby4ke3R9KSB0aHJvdyBuZXcgRXJyb3IoJyIke3R9IiBpcyB1bmRlZmluZWQnKTtcbiAgICAgICAgcmV0dXJuIG8uJHt0fS5hcHBseShvLCBhcmdzKTtgKX1pbXBvcnRVcmkodCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0JiZ0LmZpbGVQYXRoP3QuZmlsZVBhdGg6YC4vJHtSbih0KX1gfXJlc291cmNlVXJpKHQpe3JldHVybmAuLyR7Um4odCl9YH1yZXNvbHZlSWRlbnRpZmllcih0LGUsbixvKXtyZXR1cm4gb31yZXNvbHZlRW51bSh0LGUpe3JldHVybiB0W2VdfX1mdW5jdGlvbiBpcyh0KXtyZXR1cm4gdD90Lm1hcCgodD0+bmV3KDAsdC50eXBlLmFubm90YXRpb25DbHMpKC4uLnQuYXJncz90LmFyZ3M6W10pKSk6W119ZnVuY3Rpb24gYXModCl7Y29uc3QgZT10LnByb3RvdHlwZT9PYmplY3QuZ2V0UHJvdG90eXBlT2YodC5wcm90b3R5cGUpOm51bGw7cmV0dXJuKGU/ZS5jb25zdHJ1Y3RvcjpudWxsKXx8T2JqZWN0fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jb25zdCBycz17fSxzcz0vXG4vZ20sbHM9Il9fc291cmNlIixjcz1Fbih7cHJvdmlkZTpTdHJpbmcsdXNlVmFsdWU6RW59KTtsZXQgZHM7ZnVuY3Rpb24gcHModCl7Y29uc3QgZT1kcztyZXR1cm4gZHM9dCxlfWZ1bmN0aW9uIG1zKHQsZT15by5EZWZhdWx0KXtpZih2b2lkIDA9PT1kcyl0aHJvdyBuZXcgRXJyb3IoImluamVjdCgpIG11c3QgYmUgY2FsbGVkIGZyb20gYW4gaW5qZWN0aW9uIGNvbnRleHQiKTtyZXR1cm4gbnVsbD09PWRzP01vKHQsdm9pZCAwLGUpOmRzLmdldCh0LGUmeW8uT3B0aW9uYWw/bnVsbDp2b2lkIDAsZSl9ZnVuY3Rpb24gdXModCxlPXlvLkRlZmF1bHQpe3JldHVybigoZnVuY3Rpb24gbigpe3JldHVybiBfb30pKCl8fG1zKSh6bih0KSxlKX1mdW5jdGlvbiBmcyh0KXtjb25zdCBlPW5nRGV2TW9kZT9gVGhpcyBjb25zdHJ1Y3RvciBpcyBub3QgY29tcGF0aWJsZSB3aXRoIEFuZ3VsYXIgRGVwZW5kZW5jeSBJbmplY3Rpb24gYmVjYXVzZSBpdHMgZGVwZW5kZW5jeSBhdCBpbmRleCAke3R9IG9mIHRoZSBwYXJhbWV0ZXIgbGlzdCBpcyBpbnZhbGlkLlxuVGhpcyBjYW4gaGFwcGVuIGlmIHRoZSBkZXBlbmRlbmN5IHR5cGUgaXMgYSBwcmltaXRpdmUgbGlrZSBhIHN0cmluZyBvciBpZiBhbiBhbmNlc3RvciBvZiB0aGlzIGNsYXNzIGlzIG1pc3NpbmcgYW4gQW5ndWxhciBkZWNvcmF0b3IuXG5cblBsZWFzZSBjaGVjayB0aGF0IDEpIHRoZSB0eXBlIGZvciB0aGUgcGFyYW1ldGVyIGF0IGluZGV4ICR7dH0gaXMgY29ycmVjdCBhbmQgMikgdGhlIGNvcnJlY3QgQW5ndWxhciBkZWNvcmF0b3JzIGFyZSBkZWZpbmVkIGZvciB0aGlzIGNsYXNzIGFuZCBpdHMgYW5jZXN0b3JzLmA6ImludmFsaWQiO3Rocm93IG5ldyBFcnJvcihlKX1jb25zdCBncz11cztmdW5jdGlvbiBocyh0KXtjb25zdCBlPVtdO2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKXtjb25zdCBvPXpuKHRbbl0pO2lmKEFycmF5LmlzQXJyYXkobykpe2lmKDA9PT1vLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkFyZ3VtZW50cyBhcnJheSBtdXN0IGhhdmUgYXJndW1lbnRzLiIpO2xldCB0LG49eW8uRGVmYXVsdDtmb3IobGV0IGU9MDtlPG8ubGVuZ3RoO2UrKyl7Y29uc3QgaT1vW2VdLGE9aS5fX05HX0RJX0ZMQUdfXzsibnVtYmVyIj09dHlwZW9mIGE/LTE9PT1hP3Q9aS50b2tlbjpufD1hOnQ9aX1lLnB1c2godXModCxuKSl9ZWxzZSBlLnB1c2godXMobykpfXJldHVybiBlfWZ1bmN0aW9uIGJzKHQsZSl7cmV0dXJuIHQuX19OR19ESV9GTEFHX189ZSx0LnByb3RvdHlwZS5fX05HX0RJX0ZMQUdfXz1lLHR9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCB5cz1icyhFcigiSW5qZWN0IiwodD0+KHt0b2tlbjp0fSkpKSwtMSksX3M9YnMoRXIoIk9wdGlvbmFsIiksOCksQ3M9YnMoRXIoIlNlbGYiKSwyKSxNcz1icyhFcigiU2tpcFNlbGYiKSw0KSx2cz1icyhFcigiSG9zdCIpLDEpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KbGV0IHhzPW51bGw7ZnVuY3Rpb24gT3MoKXtyZXR1cm4geHM9eHN8fG5ldyBvc31mdW5jdGlvbiBQcyh0KXtyZXR1cm4gd3MoT3MoKS5wYXJhbWV0ZXJzKHQpKX1mdW5jdGlvbiB3cyh0KXtjb25zdCBlPWpyKCk7cmV0dXJuIHQubWFwKCh0PT4oZnVuY3Rpb24gbih0LGUpe2NvbnN0IG49e3Rva2VuOm51bGwsaG9zdDohMSxvcHRpb25hbDohMSxyZXNvbHZlZDp0LlIzUmVzb2x2ZWREZXBlbmRlbmN5VHlwZS5Ub2tlbixzZWxmOiExLHNraXBTZWxmOiExfTtmdW5jdGlvbiBvKGUpe24ucmVzb2x2ZWQ9dC5SM1Jlc29sdmVkRGVwZW5kZW5jeVR5cGUuVG9rZW4sbi50b2tlbj1lfWlmKEFycmF5LmlzQXJyYXkoZSkmJmUubGVuZ3RoPjApZm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKyspe2NvbnN0IGE9ZVtpXTtpZih2b2lkIDA9PT1hKWNvbnRpbnVlO2NvbnN0IHI9T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpO2lmKGEgaW5zdGFuY2VvZiBfc3x8Ik9wdGlvbmFsIj09PXIubmdNZXRhZGF0YU5hbWUpbi5vcHRpb25hbD0hMDtlbHNlIGlmKGEgaW5zdGFuY2VvZiBNc3x8IlNraXBTZWxmIj09PXIubmdNZXRhZGF0YU5hbWUpbi5za2lwU2VsZj0hMDtlbHNlIGlmKGEgaW5zdGFuY2VvZiBDc3x8IlNlbGYiPT09ci5uZ01ldGFkYXRhTmFtZSluLnNlbGY9ITA7ZWxzZSBpZihhIGluc3RhbmNlb2YgdnN8fCJIb3N0Ij09PXIubmdNZXRhZGF0YU5hbWUpbi5ob3N0PSEwO2Vsc2UgaWYoYSBpbnN0YW5jZW9mIHlzKW4udG9rZW49YS50b2tlbjtlbHNlIGlmKGEgaW5zdGFuY2VvZiBScil7aWYodm9pZCAwPT09YS5hdHRyaWJ1dGVOYW1lKXRocm93IG5ldyBFcnJvcigiQXR0cmlidXRlIG5hbWUgbXVzdCBiZSBkZWZpbmVkLiIpO24udG9rZW49YS5hdHRyaWJ1dGVOYW1lLG4ucmVzb2x2ZWQ9dC5SM1Jlc29sdmVkRGVwZW5kZW5jeVR5cGUuQXR0cmlidXRlfWVsc2UhMD09PWEuX19DaGFuZ2VEZXRlY3RvclJlZl9fPyhuLnRva2VuPWEsbi5yZXNvbHZlZD10LlIzUmVzb2x2ZWREZXBlbmRlbmN5VHlwZS5DaGFuZ2VEZXRlY3RvclJlZik6byhhKX1lbHNlIHZvaWQgMD09PWV8fEFycmF5LmlzQXJyYXkoZSkmJjA9PT1lLmxlbmd0aD8obi50b2tlbj12b2lkIDAsbi5yZXNvbHZlZD1Mci5JbnZhbGlkKTpvKGUpO3JldHVybiBufQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8pKGUsdCkpKX1sZXQga3M9bmV3IE1hcDtjb25zdCBTcz1uZXcgU2V0O2Z1bmN0aW9uIERzKHQpe3JldHVybiEhKHQudGVtcGxhdGVVcmwmJiF0Lmhhc093blByb3BlcnR5KCJ0ZW1wbGF0ZSIpfHx0LnN0eWxlVXJscyYmdC5zdHlsZVVybHMubGVuZ3RoKX1mdW5jdGlvbiBFcyh0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/dDp0LnRleHQoKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmxldCBBcyxScztmdW5jdGlvbiBUcygpe2lmKHZvaWQgMD09PUFzJiYoQXM9bnVsbCxFby50cnVzdGVkVHlwZXMpKXRyeXtBcz1Fby50cnVzdGVkVHlwZXMuY3JlYXRlUG9saWN5KCJhbmd1bGFyIix7Y3JlYXRlSFRNTDp0PT50LGNyZWF0ZVNjcmlwdDp0PT50LGNyZWF0ZVNjcmlwdFVSTDp0PT50fSl9Y2F0Y2godCl7fXJldHVybiBBc31mdW5jdGlvbiBOcyh0KXt2YXIgZTtyZXR1cm4obnVsbD09PShlPVRzKCkpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmNyZWF0ZUhUTUwodCkpfHx0fWZ1bmN0aW9uIElzKCl7aWYodm9pZCAwPT09UnMmJihScz1udWxsLEVvLnRydXN0ZWRUeXBlcykpdHJ5e1JzPUVvLnRydXN0ZWRUeXBlcy5jcmVhdGVQb2xpY3koImFuZ3VsYXIjdW5zYWZlLWJ5cGFzcyIse2NyZWF0ZUhUTUw6dD0+dCxjcmVhdGVTY3JpcHQ6dD0+dCxjcmVhdGVTY3JpcHRVUkw6dD0+dH0pfWNhdGNoKHQpe31yZXR1cm4gUnN9ZnVuY3Rpb24genModCl7dmFyIGU7cmV0dXJuKG51bGw9PT0oZT1JcygpKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5jcmVhdGVIVE1MKHQpKXx8dH1mdW5jdGlvbiBIcyh0KXt2YXIgZTtyZXR1cm4obnVsbD09PShlPUlzKCkpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmNyZWF0ZVNjcmlwdCh0KSl8fHR9ZnVuY3Rpb24gRnModCl7dmFyIGU7cmV0dXJuKG51bGw9PT0oZT1JcygpKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5jcmVhdGVTY3JpcHRVUkwodCkpfHx0fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jbGFzcyBMc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmNoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHk9dH10b1N0cmluZygpe3JldHVybmBTYWZlVmFsdWUgbXVzdCB1c2UgW3Byb3BlcnR5XT1iaW5kaW5nOiAke3RoaXMuY2hhbmdpbmdUaGlzQnJlYWtzQXBwbGljYXRpb25TZWN1cml0eX0gKHNlZSBodHRwczovL2cuY28vbmcvc2VjdXJpdHkjeHNzKWB9fWNsYXNzIEJzIGV4dGVuZHMgTHN7Z2V0VHlwZU5hbWUoKXtyZXR1cm4iSFRNTCJ9fWNsYXNzIFZzIGV4dGVuZHMgTHN7Z2V0VHlwZU5hbWUoKXtyZXR1cm4iU3R5bGUifX1jbGFzcyBqcyBleHRlbmRzIExze2dldFR5cGVOYW1lKCl7cmV0dXJuIlNjcmlwdCJ9fWNsYXNzIFVzIGV4dGVuZHMgTHN7Z2V0VHlwZU5hbWUoKXtyZXR1cm4iVVJMIn19Y2xhc3MgV3MgZXh0ZW5kcyBMc3tnZXRUeXBlTmFtZSgpe3JldHVybiJSZXNvdXJjZVVSTCJ9fWZ1bmN0aW9uIEdzKHQpe3JldHVybiB0IGluc3RhbmNlb2YgTHM/dC5jaGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlvblNlY3VyaXR5OnR9ZnVuY3Rpb24gWXModCxlKXtjb25zdCBuPXFzKHQpO2lmKG51bGwhPW4mJm4hPT1lKXtpZigiUmVzb3VyY2VVUkwiPT09biYmIlVSTCI9PT1lKXJldHVybiEwO3Rocm93IG5ldyBFcnJvcihgUmVxdWlyZWQgYSBzYWZlICR7ZX0sIGdvdCBhICR7bn0gKHNlZSBodHRwczovL2cuY28vbmcvc2VjdXJpdHkjeHNzKWApfXJldHVybiBuPT09ZX1mdW5jdGlvbiBxcyh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIExzJiZ0LmdldFR5cGVOYW1lKCl8fG51bGx9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpmdW5jdGlvbiBacyh0KXtjb25zdCBlPW5ldyBLcyh0KTtyZXR1cm4oZnVuY3Rpb24gbigpe3RyeXtyZXR1cm4hIShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKE5zKCIiKSwidGV4dC9odG1sIil9Y2F0Y2godCl7cmV0dXJuITF9fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8pKCk/bmV3IFhzKGUpOmV9Y2xhc3MgWHN7Y29uc3RydWN0b3IodCl7dGhpcy5pbmVydERvY3VtZW50SGVscGVyPXR9Z2V0SW5lcnRCb2R5RWxlbWVudCh0KXt0PSI8Ym9keT48cmVtb3ZlPjwvcmVtb3ZlPiIrdDt0cnl7Y29uc3QgZT0obmV3IHdpbmRvdy5ET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhOcyh0KSwidGV4dC9odG1sIikuYm9keTtyZXR1cm4gbnVsbD09PWU/dGhpcy5pbmVydERvY3VtZW50SGVscGVyLmdldEluZXJ0Qm9keUVsZW1lbnQodCk6KGUucmVtb3ZlQ2hpbGQoZS5maXJzdENoaWxkKSxlKX1jYXRjaCh0KXtyZXR1cm4gbnVsbH19fWNsYXNzIEtze2NvbnN0cnVjdG9yKHQpe2lmKHRoaXMuZGVmYXVsdERvYz10LHRoaXMuaW5lcnREb2N1bWVudD10aGlzLmRlZmF1bHREb2MuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCJzYW5pdGl6YXRpb24taW5lcnQiKSxudWxsPT10aGlzLmluZXJ0RG9jdW1lbnQuYm9keSl7Y29uc3QgdD10aGlzLmluZXJ0RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaHRtbCIpO3RoaXMuaW5lcnREb2N1bWVudC5hcHBlbmRDaGlsZCh0KTtjb25zdCBlPXRoaXMuaW5lcnREb2N1bWVudC5jcmVhdGVFbGVtZW50KCJib2R5Iik7dC5hcHBlbmRDaGlsZChlKX19Z2V0SW5lcnRCb2R5RWxlbWVudCh0KXtjb25zdCBlPXRoaXMuaW5lcnREb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO2lmKCJjb250ZW50ImluIGUpcmV0dXJuIGUuaW5uZXJIVE1MPU5zKHQpLGU7Y29uc3Qgbj10aGlzLmluZXJ0RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYm9keSIpO3JldHVybiBuLmlubmVySFRNTD1Ocyh0KSx0aGlzLmRlZmF1bHREb2MuZG9jdW1lbnRNb2RlJiZ0aGlzLnN0cmlwQ3VzdG9tTnNBdHRycyhuKSxufXN0cmlwQ3VzdG9tTnNBdHRycyh0KXtjb25zdCBlPXQuYXR0cmlidXRlcztmb3IobGV0IG49ZS5sZW5ndGgtMTswPG47bi0tKXtjb25zdCBvPWUuaXRlbShuKS5uYW1lOyJ4bWxuczpuczEiIT09byYmMCE9PW8uaW5kZXhPZigibnMxOiIpfHx0LnJlbW92ZUF0dHJpYnV0ZShvKX1sZXQgbj10LmZpcnN0Q2hpbGQ7Zm9yKDtuOyluLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJnRoaXMuc3RyaXBDdXN0b21Oc0F0dHJzKG4pLG49bi5uZXh0U2libGluZ319Y29uc3QgSnM9L14oPzooPzpodHRwcz98bWFpbHRvfGZ0cHx0ZWx8ZmlsZXxzbXMpOnxbXiY6Lz8jXSooPzpbLz8jXXwkKSkvZ2ksUXM9L15kYXRhOig/OmltYWdlXC8oPzpibXB8Z2lmfGpwZWd8anBnfHBuZ3x0aWZmfHdlYnApfHZpZGVvXC8oPzptcGVnfG1wNHxvZ2d8d2VibSl8YXVkaW9cLyg/Om1wM3xvZ2F8b2dnfG9wdXMpKTtiYXNlNjQsW2EtejAtOStcL10rPSokL2k7ZnVuY3Rpb24gJHModCl7cmV0dXJuKHQ9U3RyaW5nKHQpKS5tYXRjaChKcyl8fHQubWF0Y2goUXMpP3Q6KCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmY29uc29sZS53YXJuKGBXQVJOSU5HOiBzYW5pdGl6aW5nIHVuc2FmZSBVUkwgdmFsdWUgJHt0fSAoc2VlIGh0dHBzOi8vZy5jby9uZy9zZWN1cml0eSN4c3MpYCksInVuc2FmZToiK3QpfWZ1bmN0aW9uIHRsKHQpe3JldHVybih0PVN0cmluZyh0KSkuc3BsaXQoIiwiKS5tYXAoKHQ9PiRzKHQudHJpbSgpKSkpLmpvaW4oIiwgIil9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIGVsKHQpe2NvbnN0IGU9e307Zm9yKGNvbnN0IG4gb2YgdC5zcGxpdCgiLCIpKWVbbl09ITA7cmV0dXJuIGV9ZnVuY3Rpb24gbmwoLi4udCl7Y29uc3QgZT17fTtmb3IoY29uc3QgbiBvZiB0KWZvcihjb25zdCB0IGluIG4pbi5oYXNPd25Qcm9wZXJ0eSh0KSYmKGVbdF09ITApO3JldHVybiBlfWNvbnN0IG9sPWVsKCJhcmVhLGJyLGNvbCxocixpbWcsd2JyIiksaWw9ZWwoImNvbGdyb3VwLGRkLGR0LGxpLHAsdGJvZHksdGQsdGZvb3QsdGgsdGhlYWQsdHIiKSxhbD1lbCgicnAscnQiKSxybD1ubChhbCxpbCksc2w9bmwoaWwsZWwoImFkZHJlc3MsYXJ0aWNsZSxhc2lkZSxibG9ja3F1b3RlLGNhcHRpb24sY2VudGVyLGRlbCxkZXRhaWxzLGRpYWxvZyxkaXIsZGl2LGRsLGZpZ3VyZSxmaWdjYXB0aW9uLGZvb3RlcixoMSxoMixoMyxoNCxoNSxoNixoZWFkZXIsaGdyb3VwLGhyLGlucyxtYWluLG1hcCxtZW51LG5hdixvbCxwcmUsc2VjdGlvbixzdW1tYXJ5LHRhYmxlLHVsIikpLGxsPW5sKGFsLGVsKCJhLGFiYnIsYWNyb255bSxhdWRpbyxiLGJkaSxiZG8sYmlnLGJyLGNpdGUsY29kZSxkZWwsZGZuLGVtLGZvbnQsaSxpbWcsaW5zLGtiZCxsYWJlbCxtYXAsbWFyayxwaWN0dXJlLHEscnVieSxycCxydCxzLHNhbXAsc21hbGwsc291cmNlLHNwYW4sc3RyaWtlLHN0cm9uZyxzdWIsc3VwLHRpbWUsdHJhY2ssdHQsdSx2YXIsdmlkZW8iKSksY2w9bmwob2wsc2wsbGwscmwpLGRsPWVsKCJiYWNrZ3JvdW5kLGNpdGUsaHJlZixpdGVtdHlwZSxsb25nZGVzYyxwb3N0ZXIsc3JjLHhsaW5rOmhyZWYiKSxwbD1lbCgic3Jjc2V0IiksbWw9ZWwoImFiYnIsYWNjZXNza2V5LGFsaWduLGFsdCxhdXRvcGxheSxheGlzLGJnY29sb3IsYm9yZGVyLGNlbGxwYWRkaW5nLGNlbGxzcGFjaW5nLGNsYXNzLGNsZWFyLGNvbG9yLGNvbHMsY29sc3Bhbixjb21wYWN0LGNvbnRyb2xzLGNvb3JkcyxkYXRldGltZSxkZWZhdWx0LGRpcixkb3dubG9hZCxmYWNlLGhlYWRlcnMsaGVpZ2h0LGhpZGRlbixocmVmbGFuZyxoc3BhY2UsaXNtYXAsaXRlbXNjb3BlLGl0ZW1wcm9wLGtpbmQsbGFiZWwsbGFuZyxsYW5ndWFnZSxsb29wLG1lZGlhLG11dGVkLG5vaHJlZixub3dyYXAsb3BlbixwcmVsb2FkLHJlbCxyZXYscm9sZSxyb3dzLHJvd3NwYW4scnVsZXMsc2NvcGUsc2Nyb2xsaW5nLHNoYXBlLHNpemUsc2l6ZXMsc3BhbixzcmNsYW5nLHN0YXJ0LHN1bW1hcnksdGFiaW5kZXgsdGFyZ2V0LHRpdGxlLHRyYW5zbGF0ZSx0eXBlLHVzZW1hcCx2YWxpZ24sdmFsdWUsdnNwYWNlLHdpZHRoIiksdWw9ZWwoImFyaWEtYWN0aXZlZGVzY2VuZGFudCxhcmlhLWF0b21pYyxhcmlhLWF1dG9jb21wbGV0ZSxhcmlhLWJ1c3ksYXJpYS1jaGVja2VkLGFyaWEtY29sY291bnQsYXJpYS1jb2xpbmRleCxhcmlhLWNvbHNwYW4sYXJpYS1jb250cm9scyxhcmlhLWN1cnJlbnQsYXJpYS1kZXNjcmliZWRieSxhcmlhLWRldGFpbHMsYXJpYS1kaXNhYmxlZCxhcmlhLWRyb3BlZmZlY3QsYXJpYS1lcnJvcm1lc3NhZ2UsYXJpYS1leHBhbmRlZCxhcmlhLWZsb3d0byxhcmlhLWdyYWJiZWQsYXJpYS1oYXNwb3B1cCxhcmlhLWhpZGRlbixhcmlhLWludmFsaWQsYXJpYS1rZXlzaG9ydGN1dHMsYXJpYS1sYWJlbCxhcmlhLWxhYmVsbGVkYnksYXJpYS1sZXZlbCxhcmlhLWxpdmUsYXJpYS1tb2RhbCxhcmlhLW11bHRpbGluZSxhcmlhLW11bHRpc2VsZWN0YWJsZSxhcmlhLW9yaWVudGF0aW9uLGFyaWEtb3ducyxhcmlhLXBsYWNlaG9sZGVyLGFyaWEtcG9zaW5zZXQsYXJpYS1wcmVzc2VkLGFyaWEtcmVhZG9ubHksYXJpYS1yZWxldmFudCxhcmlhLXJlcXVpcmVkLGFyaWEtcm9sZWRlc2NyaXB0aW9uLGFyaWEtcm93Y291bnQsYXJpYS1yb3dpbmRleCxhcmlhLXJvd3NwYW4sYXJpYS1zZWxlY3RlZCxhcmlhLXNldHNpemUsYXJpYS1zb3J0LGFyaWEtdmFsdWVtYXgsYXJpYS12YWx1ZW1pbixhcmlhLXZhbHVlbm93LGFyaWEtdmFsdWV0ZXh0IiksZmw9bmwoZGwscGwsbWwsdWwpLGdsPWVsKCJzY3JpcHQsc3R5bGUsdGVtcGxhdGUiKTtjbGFzcyBobHtjb25zdHJ1Y3Rvcigpe3RoaXMuc2FuaXRpemVkU29tZXRoaW5nPSExLHRoaXMuYnVmPVtdfXNhbml0aXplQ2hpbGRyZW4odCl7bGV0IGU9dC5maXJzdENoaWxkLG49ITA7Zm9yKDtlOylpZihlLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREU/bj10aGlzLnN0YXJ0RWxlbWVudChlKTplLm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREU/dGhpcy5jaGFycyhlLm5vZGVWYWx1ZSk6dGhpcy5zYW5pdGl6ZWRTb21ldGhpbmc9ITAsbiYmZS5maXJzdENoaWxkKWU9ZS5maXJzdENoaWxkO2Vsc2UgZm9yKDtlOyl7ZS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFJiZ0aGlzLmVuZEVsZW1lbnQoZSk7bGV0IHQ9dGhpcy5jaGVja0Nsb2JiZXJlZEVsZW1lbnQoZSxlLm5leHRTaWJsaW5nKTtpZih0KXtlPXQ7YnJlYWt9ZT10aGlzLmNoZWNrQ2xvYmJlcmVkRWxlbWVudChlLGUucGFyZW50Tm9kZSl9cmV0dXJuIHRoaXMuYnVmLmpvaW4oIiIpfXN0YXJ0RWxlbWVudCh0KXtjb25zdCBlPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtpZighY2wuaGFzT3duUHJvcGVydHkoZSkpcmV0dXJuIHRoaXMuc2FuaXRpemVkU29tZXRoaW5nPSEwLCFnbC5oYXNPd25Qcm9wZXJ0eShlKTt0aGlzLmJ1Zi5wdXNoKCI8IiksdGhpcy5idWYucHVzaChlKTtjb25zdCBuPXQuYXR0cmlidXRlcztmb3IobGV0IHQ9MDt0PG4ubGVuZ3RoO3QrKyl7Y29uc3QgZT1uLml0ZW0odCksbz1lLm5hbWUsaT1vLnRvTG93ZXJDYXNlKCk7aWYoIWZsLmhhc093blByb3BlcnR5KGkpKXt0aGlzLnNhbml0aXplZFNvbWV0aGluZz0hMDtjb250aW51ZX1sZXQgYT1lLnZhbHVlO2RsW2ldJiYoYT0kcyhhKSkscGxbaV0mJihhPXRsKGEpKSx0aGlzLmJ1Zi5wdXNoKCIgIixvLCc9IicsX2woYSksJyInKX1yZXR1cm4gdGhpcy5idWYucHVzaCgiPiIpLCEwfWVuZEVsZW1lbnQodCl7Y29uc3QgZT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7Y2wuaGFzT3duUHJvcGVydHkoZSkmJiFvbC5oYXNPd25Qcm9wZXJ0eShlKSYmKHRoaXMuYnVmLnB1c2goIjwvIiksdGhpcy5idWYucHVzaChlKSx0aGlzLmJ1Zi5wdXNoKCI+IikpfWNoYXJzKHQpe3RoaXMuYnVmLnB1c2goX2wodCkpfWNoZWNrQ2xvYmJlcmVkRWxlbWVudCh0LGUpe2lmKGUmJih0LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGUpJk5vZGUuRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTkVEX0JZKT09PU5vZGUuRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTkVEX0JZKXRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHNhbml0aXplIGh0bWwgYmVjYXVzZSB0aGUgZWxlbWVudCBpcyBjbG9iYmVyZWQ6ICR7dC5vdXRlckhUTUx9YCk7cmV0dXJuIGV9fWNvbnN0IGJsPS9bXHVEODAwLVx1REJGRl1bXHVEQzAwLVx1REZGRl0vZyx5bD0vKFteXCMtfiB8IV0pL2c7ZnVuY3Rpb24gX2wodCl7cmV0dXJuIHQucmVwbGFjZSgvJi9nLCImYW1wOyIpLnJlcGxhY2UoYmwsKGZ1bmN0aW9uKHQpe3JldHVybiImIyIrKDEwMjQqKHQuY2hhckNvZGVBdCgwKS01NTI5NikrKHQuY2hhckNvZGVBdCgxKS01NjMyMCkrNjU1MzYpKyI7In0pKS5yZXBsYWNlKHlsLChmdW5jdGlvbih0KXtyZXR1cm4iJiMiK3QuY2hhckNvZGVBdCgwKSsiOyJ9KSkucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7Iil9bGV0IENsO2Z1bmN0aW9uIE1sKHQsZSl7bGV0IG49bnVsbDt0cnl7Q2w9Q2x8fFpzKHQpO2xldCBvPWU/U3RyaW5nKGUpOiIiO249Q2wuZ2V0SW5lcnRCb2R5RWxlbWVudChvKTtsZXQgaT01LGE9bztkb3tpZigwPT09aSl0aHJvdyBuZXcgRXJyb3IoIkZhaWxlZCB0byBzYW5pdGl6ZSBodG1sIGJlY2F1c2UgdGhlIGlucHV0IGlzIHVuc3RhYmxlIik7aS0tLG89YSxhPW4uaW5uZXJIVE1MLG49Q2wuZ2V0SW5lcnRCb2R5RWxlbWVudChvKX13aGlsZShvIT09YSk7Y29uc3Qgcj1uZXcgaGwscz1yLnNhbml0aXplQ2hpbGRyZW4odmwobil8fG4pO3JldHVybigidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmci5zYW5pdGl6ZWRTb21ldGhpbmcmJmNvbnNvbGUud2FybigiV0FSTklORzogc2FuaXRpemluZyBIVE1MIHN0cmlwcGVkIHNvbWUgY29udGVudCwgc2VlIGh0dHBzOi8vZy5jby9uZy9zZWN1cml0eSN4c3MiKSxOcyhzKX1maW5hbGx5e2lmKG4pe2NvbnN0IHQ9dmwobil8fG47Zm9yKDt0LmZpcnN0Q2hpbGQ7KXQucmVtb3ZlQ2hpbGQodC5maXJzdENoaWxkKX19fWZ1bmN0aW9uIHZsKHQpe3JldHVybiJjb250ZW50ImluIHQmJihmdW5jdGlvbiBlKHQpe3JldHVybiB0Lm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJiJURU1QTEFURSI9PT10Lm5vZGVOYW1lfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8pKHQpP3QuY29udGVudDpudWxsfXZhciB4bDtmdW5jdGlvbiBPbCh0KXtjb25zdCBlPXdsKCk7cmV0dXJuIGU/ZS5zYW5pdGl6ZSh4bC5VUkwsdCl8fCIiOllzKHQsIlVSTCIpP0dzKHQpOiRzKFZuKHQpKX1mdW5jdGlvbiBQbCh0KXtjb25zdCBlPXdsKCk7aWYoZSlyZXR1cm4gRnMoZS5zYW5pdGl6ZSh4bC5SRVNPVVJDRV9VUkwsdCl8fCIiKTtpZihZcyh0LCJSZXNvdXJjZVVSTCIpKXJldHVybiBGcyhHcyh0KSk7dGhyb3cgbmV3IEVycm9yKCJ1bnNhZmUgdmFsdWUgdXNlZCBpbiBhIHJlc291cmNlIFVSTCBjb250ZXh0IChzZWUgaHR0cHM6Ly9nLmNvL25nL3NlY3VyaXR5I3hzcykiKX1mdW5jdGlvbiB3bCgpe2NvbnN0IHQ9aWEoKTtyZXR1cm4gdCYmdFsxMl19ZnVuY3Rpb24ga2wodCl7cmV0dXJuIHQubmdEZWJ1Z0NvbnRleHR9ZnVuY3Rpb24gU2wodCl7cmV0dXJuIHQubmdPcmlnaW5hbEVycm9yfWZ1bmN0aW9uIERsKHQsLi4uZSl7dC5lcnJvciguLi5lKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovIShmdW5jdGlvbih0KXt0W3QuTk9ORT0wXT0iTk9ORSIsdFt0LkhUTUw9MV09IkhUTUwiLHRbdC5TVFlMRT0yXT0iU1RZTEUiLHRbdC5TQ1JJUFQ9M109IlNDUklQVCIsdFt0LlVSTD00XT0iVVJMIix0W3QuUkVTT1VSQ0VfVVJMPTVdPSJSRVNPVVJDRV9VUkwifSkoeGx8fCh4bD17fSkpO2NsYXNzIEVse2NvbnN0cnVjdG9yKCl7dGhpcy5fY29uc29sZT1jb25zb2xlfWhhbmRsZUVycm9yKHQpe2NvbnN0IGU9dGhpcy5fZmluZE9yaWdpbmFsRXJyb3IodCksbj10aGlzLl9maW5kQ29udGV4dCh0KSxvPShmdW5jdGlvbiBpKHQpe3JldHVybiB0Lm5nRXJyb3JMb2dnZXJ8fERsfSkodCk7byh0aGlzLl9jb25zb2xlLCJFUlJPUiIsdCksZSYmbyh0aGlzLl9jb25zb2xlLCJPUklHSU5BTCBFUlJPUiIsZSksbiYmbyh0aGlzLl9jb25zb2xlLCJFUlJPUiBDT05URVhUIixuKX1fZmluZENvbnRleHQodCl7cmV0dXJuIHQ/a2wodCk/a2wodCk6dGhpcy5fZmluZENvbnRleHQoU2wodCkpOm51bGx9X2ZpbmRPcmlnaW5hbEVycm9yKHQpe2xldCBlPVNsKHQpO2Zvcig7ZSYmU2woZSk7KWU9U2woZSk7cmV0dXJuIGV9fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jb25zdCBBbD17bmFtZToiY3VzdG9tLWVsZW1lbnRzIn0sUmw9e25hbWU6Im5vLWVycm9ycy1zY2hlbWEifSxUbD0vXj58Xi0+fDwhLS18LS0+fC0tIT58PCEtJC9nLE5sPS8oPHw+KS87ZnVuY3Rpb24gSWwodCl7cmV0dXJuIHQucmVwbGFjZShUbCwodD0+dC5yZXBsYWNlKE5sLCLigIskMeKAiyIpKSl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIHpsKHQpe2lmKCFuZ0Rldk1vZGUpdGhyb3cgbmV3IEVycm9yKCJMb29rcyBsaWtlIHdlIGFyZSBpbiAncHJvZCBtb2RlJywgYnV0IHdlIGFyZSBjcmVhdGluZyBhIG5hbWVkIEFycmF5IHR5cGUsIHdoaWNoIGlzIHdyb25nISBDaGVjayB5b3VyIGNvZGUiKTt0cnl7cmV0dXJuKGZ1bmN0aW9uIGUoLi4udCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGUpdGhyb3cgbmV3IEVycm9yKCJuZXdUcnVzdGVkRnVuY3Rpb25Gb3JEZXYgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCBpbiBwcm9kdWN0aW9uIik7aWYoIUVvLnRydXN0ZWRUeXBlcylyZXR1cm4gbmV3IEZ1bmN0aW9uKC4uLnQpO2NvbnN0IGU9YChmdW5jdGlvbiBhbm9ueW1vdXMoJHt0LnNsaWNlKDAsLTEpLmpvaW4oIiwiKX1cbikgeyAke3RbdC5sZW5ndGgtMV19XG59KWAsbj1Fby5ldmFsKChmdW5jdGlvbiBvKHQpe3ZhciBlO3JldHVybihudWxsPT09KGU9VHMoKSl8fHZvaWQgMD09PWU/dm9pZCAwOmUuY3JlYXRlU2NyaXB0KHQpKXx8dH0pKGUpKTtyZXR1cm4gdm9pZCAwPT09bi5iaW5kP25ldyBGdW5jdGlvbiguLi50KToobi50b1N0cmluZz0oKT0+ZSxuLmJpbmQoRW8pKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovKSgiQXJyYXkiLGByZXR1cm4gY2xhc3MgJHt0fSBleHRlbmRzIEFycmF5e31gKShBcnJheSl9Y2F0Y2godCl7cmV0dXJuIEFycmF5fX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY29uc3QgSGw9LyhbQS1aXSkvZzsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmZ1bmN0aW9uIEZsKHQpe2xldCBlPVhpKHQpO2lmKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpe2NvbnN0IG49ZTtsZXQgbyxpLGE7aWYoKGZ1bmN0aW9uIG4odCl7cmV0dXJuIHQmJnQuY29uc3RydWN0b3ImJnQuY29uc3RydWN0b3IuybVjbXB9KSh0KSl7aWYobz1XbChuLHQpLC0xPT1vKXRocm93IG5ldyBFcnJvcigiVGhlIHByb3ZpZGVkIGNvbXBvbmVudCB3YXMgbm90IGZvdW5kIGluIHRoZSBhcHBsaWNhdGlvbiIpO2k9dH1lbHNlIGlmKChmdW5jdGlvbiBvKHQpe3JldHVybiB0JiZ0LmNvbnN0cnVjdG9yJiZ0LmNvbnN0cnVjdG9yLsm1ZGlyfSkodCkpe2lmKG89KGZ1bmN0aW9uIGkodCxlKXtsZXQgbj10WzFdLmZpcnN0Q2hpbGQ7Zm9yKDtuOyl7Y29uc3Qgbz1uLmRpcmVjdGl2ZUVuZDtmb3IobGV0IGk9bi5kaXJlY3RpdmVTdGFydDtpPG87aSsrKWlmKHRbaV09PT1lKXJldHVybiBuLmluZGV4O249VWwobil9cmV0dXJuLTF9KShuLHQpLC0xPT1vKXRocm93IG5ldyBFcnJvcigiVGhlIHByb3ZpZGVkIGRpcmVjdGl2ZSB3YXMgbm90IGZvdW5kIGluIHRoZSBhcHBsaWNhdGlvbiIpO2E9R2wobyxuLCExKX1lbHNlIGlmKG89amwobix0KSwtMT09bylyZXR1cm4gbnVsbDtjb25zdCByPVVpKG5bb10pLHM9WGkociksbD1zJiYhQXJyYXkuaXNBcnJheShzKT9zOkxsKG4sbyxyKTtpZihpJiZ2b2lkIDA9PT1sLmNvbXBvbmVudCYmKGwuY29tcG9uZW50PWksVmwobC5jb21wb25lbnQsbCkpLGEmJnZvaWQgMD09PWwuZGlyZWN0aXZlcyl7bC5kaXJlY3RpdmVzPWE7Zm9yKGxldCB0PTA7dDxhLmxlbmd0aDt0KyspVmwoYVt0XSxsKX1WbChsLm5hdGl2ZSxsKSxlPWx9fWVsc2V7Y29uc3Qgbj10O25nRGV2TW9kZSYmYW8obik7bGV0IG89bjtmb3IoO289by5wYXJlbnROb2RlOyl7Y29uc3QgdD1YaShvKTtpZih0KXtsZXQgbztpZihvPUFycmF5LmlzQXJyYXkodCk/dDp0LmxWaWV3LCFvKXJldHVybiBudWxsO2NvbnN0IGk9amwobyxuKTtpZihpPj0wKXtjb25zdCB0PVVpKG9baV0pLG49TGwobyxpLHQpO1ZsKHQsbiksZT1uO2JyZWFrfX19fXJldHVybiBlfHxudWxsfWZ1bmN0aW9uIExsKHQsZSxuKXtyZXR1cm57bFZpZXc6dCxub2RlSW5kZXg6ZSxuYXRpdmU6bixjb21wb25lbnQ6dm9pZCAwLGRpcmVjdGl2ZXM6dm9pZCAwLGxvY2FsUmVmczp2b2lkIDB9fWZ1bmN0aW9uIEJsKHQpe2xldCBlLG49WGkodCk7aWYoQXJyYXkuaXNBcnJheShuKSl7Y29uc3Qgbz1XbChuLHQpO2U9WmkobyxuKTtjb25zdCBpPUxsKG4sbyxlWzBdKTtpLmNvbXBvbmVudD10LFZsKHQsaSksVmwoaS5uYXRpdmUsaSl9ZWxzZSBlPVppKG4ubm9kZUluZGV4LG4ubFZpZXcpO3JldHVybiBlfWZ1bmN0aW9uIFZsKHQsZSl7dC5fX25nQ29udGV4dF9fPWV9ZnVuY3Rpb24gamwodCxlKXtjb25zdCBuPXRbMV07Zm9yKGxldCBvPW9pO288bi5iaW5kaW5nU3RhcnRJbmRleDtvKyspaWYoVWkodFtvXSk9PT1lKXJldHVybiBvO3JldHVybi0xfWZ1bmN0aW9uIFVsKHQpe2lmKHQuY2hpbGQpcmV0dXJuIHQuY2hpbGQ7aWYodC5uZXh0KXJldHVybiB0Lm5leHQ7Zm9yKDt0LnBhcmVudCYmIXQucGFyZW50Lm5leHQ7KXQ9dC5wYXJlbnQ7cmV0dXJuIHQucGFyZW50JiZ0LnBhcmVudC5uZXh0fWZ1bmN0aW9uIFdsKHQsZSl7Y29uc3Qgbj10WzFdLmNvbXBvbmVudHM7aWYobilmb3IobGV0IG89MDtvPG4ubGVuZ3RoO28rKyl7Y29uc3QgaT1uW29dO2lmKFppKGksdClbOF09PT1lKXJldHVybiBpfWVsc2UgaWYoWmkob2ksdClbOF09PT1lKXJldHVybiBvaTtyZXR1cm4tMX1mdW5jdGlvbiBHbCh0LGUsbil7Y29uc3Qgbz1lWzFdLmRhdGFbdF07bGV0IGk9by5kaXJlY3RpdmVTdGFydDtyZXR1cm4gMD09aT9ObzooIW4mJjImby5mbGFncyYmaSsrLGUuc2xpY2UoaSxvLmRpcmVjdGl2ZUVuZCkpfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3QgWWw9KCJ1bmRlZmluZWQiIT10eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lJiZyZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHNldFRpbWVvdXQpLmJpbmQoRW8pO2Z1bmN0aW9uIHFsKHQpe3JldHVybntuYW1lOiJ3aW5kb3ciLHRhcmdldDp0Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd9fWZ1bmN0aW9uIFpsKHQpe3JldHVybntuYW1lOiJkb2N1bWVudCIsdGFyZ2V0OnQub3duZXJEb2N1bWVudH19ZnVuY3Rpb24gWGwodCl7cmV0dXJue25hbWU6ImJvZHkiLHRhcmdldDp0Lm93bmVyRG9jdW1lbnQuYm9keX19Y29uc3QgS2w9Iu+/vSI7ZnVuY3Rpb24gSmwodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBGdW5jdGlvbj90KCk6dH0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovZnVuY3Rpb24gUWwodCl7dGhyb3cgbmV3IEZuKCIzMDAiLGBNdWx0aXBsZSBjb21wb25lbnRzIG1hdGNoIG5vZGUgd2l0aCB0YWduYW1lICR7dC52YWx1ZX1gKX1mdW5jdGlvbiAkbCh0LGUsbixvLGkpe2NvbnN0W2EsciwuLi5zXT1vLnNwbGl0KEtsKTtsZXQgbD1yLGM9cjtmb3IobGV0IG89MDtvPHMubGVuZ3RoO28rKyl7Y29uc3QgYT1lK287bCs9YCR7dFthXX0ke3Nbb119YCxjKz1gJHthPT09bj9pOnRbYV19JHtzW29dfWB9cmV0dXJue3Byb3BOYW1lOmEsb2xkVmFsdWU6bCxuZXdWYWx1ZTpjfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCnZhciB0YzsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmxldCBlYztmdW5jdGlvbiBuYyh0LGUpe3JldHVybiBlYyh0LGUpfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KZnVuY3Rpb24gb2ModCl7bmdEZXZNb2RlJiZfaSh0KTtjb25zdCBlPXRbM107cmV0dXJuIHNpKGUpP2VbM106ZX1mdW5jdGlvbiBpYyh0KXtjb25zdCBlPShmdW5jdGlvbiBuKHQpe25nRGV2TW9kZSYmb28odCwiY29tcG9uZW50Iik7bGV0IGU9cmkodCk/dDpLaSh0KTtmb3IoO2UmJiEoNTEyJmVbMl0pOyllPW9jKGUpO3JldHVybiBuZ0Rldk1vZGUmJl9pKGUpLGV9KSh0KTtyZXR1cm4gbmdEZXZNb2RlJiZvbyhlWzhdLCJSb290VmlldyBoYXMgbm8gY29udGV4dC4gUGVyaGFwcyBpdCBpcyBkaXNjb25uZWN0ZWQ/IiksZVs4XX1mdW5jdGlvbiBhYyh0KXtyZXR1cm4gc2ModFsxM10pfWZ1bmN0aW9uIHJjKHQpe3JldHVybiBzYyh0WzRdKX1mdW5jdGlvbiBzYyh0KXtmb3IoO251bGwhPT10JiYhc2kodCk7KXQ9dFs0XTtyZXR1cm4gdH1mdW5jdGlvbiBsYyh0LGUsbixvLGkpe2lmKG51bGwhPW8pe2xldCBhLHI9ITE7c2kobyk/YT1vOnJpKG8pJiYocj0hMCxuZ0Rldk1vZGUmJm9vKG9bMF0sIkhPU1QgbXVzdCBiZSBkZWZpbmVkIGZvciBhIGNvbXBvbmVudCBMVmlldyIpLG89b1swXSk7Y29uc3Qgcz1VaShvKTtuZ0Rldk1vZGUmJiFWaShlKSYmYW8ocyksMD09PXQmJm51bGwhPT1uP251bGw9PWk/Q2MoZSxuLHMpOl9jKGUsbixzLGl8fG51bGwsITApOjE9PT10JiZudWxsIT09bj9fYyhlLG4scyxpfHxudWxsLCEwKToyPT09dD9SYyhlLHMscik6Mz09PXQmJihuZ0Rldk1vZGUmJm5nRGV2TW9kZS5yZW5kZXJlckRlc3Ryb3lOb2RlKyssZS5kZXN0cm95Tm9kZShzKSksbnVsbCE9YSYmKGZ1bmN0aW9uIGEodCxlLG4sbyxpKXtuZ0Rldk1vZGUmJmJpKG4pO2NvbnN0IGE9bls3XTthIT09VWkobikmJmxjKGUsdCxvLGEsaSk7Zm9yKGxldCBpPWFpO2k8bi5sZW5ndGg7aSsrKXtjb25zdCByPW5baV07TmMoclsxXSxyLHQsZSxvLGEpfX0pKGUsdCxhLG4saSl9fWZ1bmN0aW9uIGNjKHQsZSl7cmV0dXJuIG5nRGV2TW9kZSYmbmdEZXZNb2RlLnJlbmRlcmVyQ3JlYXRlVGV4dE5vZGUrKyxuZ0Rldk1vZGUmJm5nRGV2TW9kZS5yZW5kZXJlclNldFRleHQrKyxWaSh0KT90LmNyZWF0ZVRleHQoZSk6dC5jcmVhdGVUZXh0Tm9kZShlKX1mdW5jdGlvbiBkYyh0LGUsbil7bmdEZXZNb2RlJiZuZ0Rldk1vZGUucmVuZGVyZXJTZXRUZXh0KyssVmkodCk/dC5zZXRWYWx1ZShlLG4pOmUudGV4dENvbnRlbnQ9bn1mdW5jdGlvbiBwYyh0LGUpe3JldHVybiBuZ0Rldk1vZGUmJm5nRGV2TW9kZS5yZW5kZXJlckNyZWF0ZUNvbW1lbnQrKyx0LmNyZWF0ZUNvbW1lbnQoSWwoZSkpfWZ1bmN0aW9uIG1jKHQsZSxuKXtyZXR1cm4gbmdEZXZNb2RlJiZuZ0Rldk1vZGUucmVuZGVyZXJDcmVhdGVFbGVtZW50KyssVmkodCk/dC5jcmVhdGVFbGVtZW50KGUsbik6bnVsbD09PW4/dC5jcmVhdGVFbGVtZW50KGUpOnQuY3JlYXRlRWxlbWVudE5TKG4sZSl9ZnVuY3Rpb24gdWModCxlKXtuZ0Rldk1vZGUmJmJpKHQpLG5nRGV2TW9kZSYmb28odFs5XSwiQSBwcm9qZWN0ZWQgdmlldyBzaG91bGQgYmVsb25nIHRvIGEgbm9uLWVtcHR5IHByb2plY3RlZCB2aWV3cyBjb2xsZWN0aW9uIik7Y29uc3Qgbj10WzldLG89bi5pbmRleE9mKGUpLGk9ZVszXTtuZ0Rldk1vZGUmJmJpKGkpLDEwMjQmZVsyXSYmKGVbMl0mPS0xMDI1LGVhKGksLTEpKSxuLnNwbGljZShvLDEpfWZ1bmN0aW9uIGZjKHQsZSl7aWYodC5sZW5ndGg8PWFpKXJldHVybjtjb25zdCBuPWFpK2Usbz10W25dO2lmKG8pe2NvbnN0IGk9b1sxN107bnVsbCE9PWkmJmkhPT10JiZ1YyhpLG8pLGU+MCYmKHRbbi0xXVs0XT1vWzRdKTtjb25zdCBhPVpyKHQsYWkrZSk7IShmdW5jdGlvbiBpKHQsZSl7TmModCxlLGVbMTFdLDIsbnVsbCxudWxsKSxlWzBdPW51bGwsZVs2XT1udWxsfSkob1sxXSxvKTtjb25zdCByPWFbMTldO251bGwhPT1yJiZyLmRldGFjaFZpZXcoYVsxXSksb1szXT1udWxsLG9bNF09bnVsbCxvWzJdJj0tMTI5fXJldHVybiBvfWZ1bmN0aW9uIGdjKHQsZSl7aWYoISgyNTYmZVsyXSkpe2NvbnN0IG49ZVsxMV07VmkobikmJm4uZGVzdHJveU5vZGUmJk5jKHQsZSxuLDMsbnVsbCxudWxsKSwoZnVuY3Rpb24gbih0KXtsZXQgZT10WzEzXTtpZighZSlyZXR1cm4gaGModFsxXSx0KTtmb3IoO2U7KXtsZXQgbj1udWxsO2lmKHJpKGUpKW49ZVsxM107ZWxzZXtuZ0Rldk1vZGUmJmJpKGUpO2NvbnN0IHQ9ZVsxMF07dCYmKG49dCl9aWYoIW4pe2Zvcig7ZSYmIWVbNF0mJmUhPT10OylyaShlKSYmaGMoZVsxXSxlKSxlPWVbM107bnVsbD09PWUmJihlPXQpLHJpKGUpJiZoYyhlWzFdLGUpLG49ZSYmZVs0XX1lPW59fSkoZSl9fWZ1bmN0aW9uIGhjKHQsZSl7aWYoISgyNTYmZVsyXSkpe2VbMl0mPS0xMjksZVsyXXw9MjU2LChmdW5jdGlvbiBuKHQsZSl7bGV0IG47aWYobnVsbCE9dCYmbnVsbCE9KG49dC5kZXN0cm95SG9va3MpKWZvcihsZXQgdD0wO3Q8bi5sZW5ndGg7dCs9Mil7Y29uc3Qgbz1lW25bdF1dO2lmKCEobyBpbnN0YW5jZW9mIFlhKSl7Y29uc3QgZT1uW3QrMV07aWYoQXJyYXkuaXNBcnJheShlKSlmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrPTIpe2NvbnN0IG49b1tlW3RdXSxpPWVbdCsxXTtJaSg0LG4saSk7dHJ5e2kuY2FsbChuKX1maW5hbGx5e0lpKDUsbixpKX19ZWxzZXtJaSg0LG8sZSk7dHJ5e2UuY2FsbChvKX1maW5hbGx5e0lpKDUsbyxlKX19fX19KSh0LGUpLChmdW5jdGlvbiBvKHQsZSl7Y29uc3Qgbj10LmNsZWFudXAsbz1lWzddO2xldCBpPS0xO2lmKG51bGwhPT1uKWZvcihsZXQgdD0wO3Q8bi5sZW5ndGgtMTt0Kz0yKWlmKCJzdHJpbmciPT10eXBlb2Ygblt0XSl7Y29uc3QgYT1uW3QrMV0scj0iZnVuY3Rpb24iPT10eXBlb2YgYT9hKGUpOlVpKGVbYV0pLHM9b1tpPW5bdCsyXV0sbD1uW3QrM107ImJvb2xlYW4iPT10eXBlb2YgbD9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoblt0XSxzLGwpOmw+PTA/b1tpPWxdKCk6b1tpPS1sXS51bnN1YnNjcmliZSgpLHQrPTJ9ZWxzZXtjb25zdCBlPW9baT1uW3QrMV1dO25bdF0uY2FsbChlKX1pZihudWxsIT09byl7Zm9yKGxldCB0PWkrMTt0PG8ubGVuZ3RoO3QrKyl7Y29uc3QgZT1vW3RdO25nRGV2TW9kZSYmKCJFeHBlY3RpbmcgaW5zdGFuY2UgY2xlYW51cCBmdW5jdGlvbi4iLCJmdW5jdGlvbiIhPXR5cGVvZihhPWUpJiZpbygiRXhwZWN0aW5nIGluc3RhbmNlIGNsZWFudXAgZnVuY3Rpb24uIixudWxsPT09YT8ibnVsbCI6dHlwZW9mIGEsImZ1bmN0aW9uIiwiPT09IikpLGUoKX1lWzddPW51bGx9dmFyIGF9KSh0LGUpLDE9PT1lWzFdLnR5cGUmJlZpKGVbMTFdKSYmKG5nRGV2TW9kZSYmbmdEZXZNb2RlLnJlbmRlcmVyRGVzdHJveSsrLGVbMTFdLmRlc3Ryb3koKSk7Y29uc3Qgbj1lWzE3XTtpZihudWxsIT09biYmc2koZVszXSkpe24hPT1lWzNdJiZ1YyhuLGUpO2NvbnN0IG89ZVsxOV07bnVsbCE9PW8mJm8uZGV0YWNoVmlldyh0KX19fWZ1bmN0aW9uIGJjKHQsZSxuKXtyZXR1cm4geWModCxlLnBhcmVudCxuKX1mdW5jdGlvbiB5Yyh0LGUsbil7bGV0IG89ZTtmb3IoO251bGwhPT1vJiY0MCZvLnR5cGU7KW89KGU9bykucGFyZW50O2lmKG51bGw9PT1vKXJldHVybiBuWzBdO2lmKG5nRGV2TW9kZSYmWmEobyw3KSwyJm8uZmxhZ3Mpe25nRGV2TW9kZSYmbWkobyxuKTtjb25zdCBlPXQuZGF0YVtvLmRpcmVjdGl2ZVN0YXJ0XS5lbmNhcHN1bGF0aW9uO2lmKGU9PT1Qby5Ob25lfHxlPT09UG8uRW11bGF0ZWQpcmV0dXJuIG51bGx9cmV0dXJuIEdpKG8sbil9ZnVuY3Rpb24gX2ModCxlLG4sbyxpKXtuZ0Rldk1vZGUmJm5nRGV2TW9kZS5yZW5kZXJlckluc2VydEJlZm9yZSsrLFZpKHQpP3QuaW5zZXJ0QmVmb3JlKGUsbixvLGkpOmUuaW5zZXJ0QmVmb3JlKG4sbyxpKX1mdW5jdGlvbiBDYyh0LGUsbil7bmdEZXZNb2RlJiZuZ0Rldk1vZGUucmVuZGVyZXJBcHBlbmRDaGlsZCsrLG5nRGV2TW9kZSYmb28oZSwicGFyZW50IG5vZGUgbXVzdCBiZSBkZWZpbmVkIiksVmkodCk/dC5hcHBlbmRDaGlsZChlLG4pOmUuYXBwZW5kQ2hpbGQobil9ZnVuY3Rpb24gTWModCxlLG4sbyxpKXtudWxsIT09bz9fYyh0LGUsbixvLGkpOkNjKHQsZSxuKX1mdW5jdGlvbiB2Yyh0LGUpe3JldHVybiBWaSh0KT90LnBhcmVudE5vZGUoZSk6ZS5wYXJlbnROb2RlfWZ1bmN0aW9uIHhjKHQsZSxuKXtyZXR1cm4gd2ModCxlLG4pfWZ1bmN0aW9uIE9jKHQsZSxuKXtyZXR1cm4gNDAmdC50eXBlP0dpKHQsbik6bnVsbH0hKGZ1bmN0aW9uKHQpe3RbdC5JbXBvcnRhbnQ9MV09IkltcG9ydGFudCIsdFt0LkRhc2hDYXNlPTJdPSJEYXNoQ2FzZSJ9KSh0Y3x8KHRjPXt9KSk7bGV0IFBjLHdjPU9jO2Z1bmN0aW9uIGtjKHQsZSl7d2M9dCxQYz1lfWZ1bmN0aW9uIFNjKHQsZSxuLG8pe2NvbnN0IGk9YmModCxvLGUpLGE9ZVsxMV0scj14YyhvLnBhcmVudHx8ZVs2XSxvLGUpO2lmKG51bGwhPWkpaWYoQXJyYXkuaXNBcnJheShuKSlmb3IobGV0IHQ9MDt0PG4ubGVuZ3RoO3QrKylNYyhhLGksblt0XSxyLCExKTtlbHNlIE1jKGEsaSxuLHIsITEpO3ZvaWQgMCE9PVBjJiZQYyhhLG8sZSxuLGkpfWZ1bmN0aW9uIERjKHQsZSl7aWYobnVsbCE9PWUpe25nRGV2TW9kZSYmWmEoZSw2Myk7Y29uc3Qgbj1lLnR5cGU7aWYoMyZuKXJldHVybiBHaShlLHQpO2lmKDQmbilyZXR1cm4gQWMoLTEsdFtlLmluZGV4XSk7aWYoOCZuKXtjb25zdCBuPWUuY2hpbGQ7aWYobnVsbCE9PW4pcmV0dXJuIERjKHQsbik7e2NvbnN0IG49dFtlLmluZGV4XTtyZXR1cm4gc2kobik/QWMoLTEsbik6VWkobil9fWlmKDMyJm4pcmV0dXJuIG5jKGUsdCkoKXx8VWkodFtlLmluZGV4XSk7e2NvbnN0IG49RWModCxlKTtpZihudWxsIT09bil7aWYoQXJyYXkuaXNBcnJheShuKSlyZXR1cm4gblswXTtjb25zdCBlPW9jKHRbMTZdKTtyZXR1cm4gbmdEZXZNb2RlJiZPaShlKSxEYyhlLG4pfXJldHVybiBEYyh0LGUubmV4dCl9fXJldHVybiBudWxsfWZ1bmN0aW9uIEVjKHQsZSl7aWYobnVsbCE9PWUpe2NvbnN0IG49dFsxNl1bNl0sbz1lLnByb2plY3Rpb247cmV0dXJuIG5nRGV2TW9kZSYmKGZ1bmN0aW9uIG4odCxlKXtvbyh0WzE2XSwiQ29tcG9uZW50IHZpZXdzIHNob3VsZCBleGlzdC4iKSxvbyh0WzE2XVs2XS5wcm9qZWN0aW9uLGV8fCJDb21wb25lbnRzIHdpdGggcHJvamVjdGlvbiBub2RlcyAoPG5nLWNvbnRlbnQ+KSBtdXN0IGhhdmUgcHJvamVjdGlvbiBzbG90cyBkZWZpbmVkLiIpfSkodCksbi5wcm9qZWN0aW9uW29dfXJldHVybiBudWxsfWZ1bmN0aW9uIEFjKHQsZSl7Y29uc3Qgbj1haSt0KzE7aWYobjxlLmxlbmd0aCl7Y29uc3QgdD1lW25dLG89dFsxXS5maXJzdENoaWxkO2lmKG51bGwhPT1vKXJldHVybiBEYyh0LG8pfXJldHVybiBlWzddfWZ1bmN0aW9uIFJjKHQsZSxuKXtuZ0Rldk1vZGUmJm5nRGV2TW9kZS5yZW5kZXJlclJlbW92ZU5vZGUrKztjb25zdCBvPXZjKHQsZSk7byYmKGZ1bmN0aW9uIGkodCxlLG4sbyl7VmkodCk/dC5yZW1vdmVDaGlsZChlLG4sbyk6ZS5yZW1vdmVDaGlsZChuKX0pKHQsbyxlLG4pfWZ1bmN0aW9uIFRjKHQsZSxuLG8saSxhLHIpe2Zvcig7bnVsbCE9bjspe25nRGV2TW9kZSYmbWkobixvKSxuZ0Rldk1vZGUmJlphKG4sNjMpO2NvbnN0IHM9b1tuLmluZGV4XSxsPW4udHlwZTtpZihyJiYwPT09ZSYmKHMmJlZsKFVpKHMpLG8pLG4uZmxhZ3N8PTQpLDY0IT0oNjQmbi5mbGFncykpaWYoOCZsKVRjKHQsZSxuLmNoaWxkLG8saSxhLCExKSxsYyhlLHQsaSxzLGEpO2Vsc2UgaWYoMzImbCl7Y29uc3Qgcj1uYyhuLG8pO2xldCBsO2Zvcig7bD1yKCk7KWxjKGUsdCxpLGwsYSk7bGMoZSx0LGkscyxhKX1lbHNlIDE2Jmw/SWModCxlLG8sbixpLGEpOihuZ0Rldk1vZGUmJlphKG4sNyksbGMoZSx0LGkscyxhKSk7bj1yP24ucHJvamVjdGlvbk5leHQ6bi5uZXh0fX1mdW5jdGlvbiBOYyh0LGUsbixvLGksYSl7VGMobixvLHQuZmlyc3RDaGlsZCxlLGksYSwhMSl9ZnVuY3Rpb24gSWModCxlLG4sbyxpLGEpe2NvbnN0IHI9blsxNl0scz1yWzZdO25nRGV2TW9kZSYmWG4odHlwZW9mIG8ucHJvamVjdGlvbiwibnVtYmVyIiwiZXhwZWN0aW5nIHByb2plY3Rpb24gaW5kZXgiKTtjb25zdCBsPXMucHJvamVjdGlvbltvLnByb2plY3Rpb25dO2lmKEFycmF5LmlzQXJyYXkobCkpZm9yKGxldCBuPTA7bjxsLmxlbmd0aDtuKyspbGMoZSx0LGksbFtuXSxhKTtlbHNlIFRjKHQsZSxsLHJbM10saSxhLCEwKX1mdW5jdGlvbiB6Yyh0LGUsbil7bmdEZXZNb2RlJiZabihuLCInbmV3VmFsdWUnIHNob3VsZCBiZSBhIHN0cmluZyIpLFZpKHQpP3Quc2V0QXR0cmlidXRlKGUsInN0eWxlIixuKTplLnN0eWxlLmNzc1RleHQ9bixuZ0Rldk1vZGUmJm5nRGV2TW9kZS5yZW5kZXJlclNldFN0eWxlKyt9ZnVuY3Rpb24gSGModCxlLG4pe25nRGV2TW9kZSYmWm4obiwiJ25ld1ZhbHVlJyBzaG91bGQgYmUgYSBzdHJpbmciKSxWaSh0KT8iIj09PW4/dC5yZW1vdmVBdHRyaWJ1dGUoZSwiY2xhc3MiKTp0LnNldEF0dHJpYnV0ZShlLCJjbGFzcyIsbik6ZS5jbGFzc05hbWU9bixuZ0Rldk1vZGUmJm5nRGV2TW9kZS5yZW5kZXJlclNldENsYXNzTmFtZSsrfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiBGYyh0LGUsbil7bmdEZXZNb2RlJiZLbihlLCIiLCdjYW4gbm90IGxvb2sgZm9yICIiIHN0cmluZy4nKTtsZXQgbz10Lmxlbmd0aDtmb3IoOzspe2NvbnN0IGk9dC5pbmRleE9mKGUsbik7aWYoLTE9PT1pKXJldHVybiBpO2lmKDA9PT1pfHx0LmNoYXJDb2RlQXQoaS0xKTw9MzIpe2NvbnN0IG49ZS5sZW5ndGg7aWYoaStuPT09b3x8dC5jaGFyQ29kZUF0KGkrbik8PTMyKXJldHVybiBpfW49aSsxfX1jb25zdCBMYz0ibmctdGVtcGxhdGUiO2Z1bmN0aW9uIEJjKHQsZSxuKXtuZ0Rldk1vZGUmJlhuKGUsZS50b0xvd2VyQ2FzZSgpLCJDbGFzcyBuYW1lIGV4cGVjdGVkIHRvIGJlIGxvd2VyY2FzZS4iKTtsZXQgbz0wO2Zvcig7bzx0Lmxlbmd0aDspe2xldCBpPXRbbysrXTtpZihuJiYiY2xhc3MiPT09aSl7aWYoaT10W29dLC0xIT09RmMoaS50b0xvd2VyQ2FzZSgpLGUsMCkpcmV0dXJuITB9ZWxzZSBpZigxPT09aSl7Zm9yKDtvPHQubGVuZ3RoJiYic3RyaW5nIj09dHlwZW9mKGk9dFtvKytdKTspaWYoaS50b0xvd2VyQ2FzZSgpPT09ZSlyZXR1cm4hMDtyZXR1cm4hMX19cmV0dXJuITF9ZnVuY3Rpb24gVmModCl7cmV0dXJuIDQ9PT10LnR5cGUmJnQudmFsdWUhPT1MY31mdW5jdGlvbiBqYyh0LGUsbil7cmV0dXJuIGU9PT0oNCE9PXQudHlwZXx8bj90LnZhbHVlOkxjKX1mdW5jdGlvbiBVYyh0LGUsbil7bmdEZXZNb2RlJiZvbyhlWzBdLCJTZWxlY3RvciBzaG91bGQgaGF2ZSBhIHRhZyBuYW1lIik7bGV0IG89NDtjb25zdCBpPXQuYXR0cnN8fFtdLGE9KGZ1bmN0aW9uIHIodCl7Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspaWYoS2EodFtlXSkpcmV0dXJuIGU7cmV0dXJuIHQubGVuZ3RofSkoaSk7bGV0IHM9ITE7Zm9yKGxldCByPTA7cjxlLmxlbmd0aDtyKyspe2NvbnN0IGw9ZVtyXTtpZigibnVtYmVyIiE9dHlwZW9mIGwpe2lmKCFzKWlmKDQmbyl7aWYobz0yfDEmbywiIiE9PWwmJiFqYyh0LGwsbil8fCIiPT09bCYmMT09PWUubGVuZ3RoKXtpZihXYyhvKSlyZXR1cm4hMTtzPSEwfX1lbHNle2NvbnN0IGM9OCZvP2w6ZVsrK3JdO2lmKDgmbyYmbnVsbCE9PXQuYXR0cnMpe2lmKCFCYyh0LmF0dHJzLGMsbikpe2lmKFdjKG8pKXJldHVybiExO3M9ITB9Y29udGludWV9Y29uc3QgZD1HYyg4Jm8/ImNsYXNzIjpsLGksVmModCksbik7aWYoLTE9PT1kKXtpZihXYyhvKSlyZXR1cm4hMTtzPSEwO2NvbnRpbnVlfWlmKCIiIT09Yyl7bGV0IHQ7ZD5hP3Q9IiI6KG5nRGV2TW9kZSYmS24oaVtkXSwwLCJXZSBkbyBub3QgbWF0Y2ggZGlyZWN0aXZlcyBvbiBuYW1lc3BhY2VkIGF0dHJpYnV0ZXMiKSx0PWlbZCsxXS50b0xvd2VyQ2FzZSgpKTtjb25zdCBlPTgmbz90Om51bGw7aWYoZSYmLTEhPT1GYyhlLGMsMCl8fDImbyYmYyE9PXQpe2lmKFdjKG8pKXJldHVybiExO3M9ITB9fX19ZWxzZXtpZighcyYmIVdjKG8pJiYhV2MobCkpcmV0dXJuITE7aWYocyYmV2MobCkpY29udGludWU7cz0hMSxvPWx8MSZvfX1yZXR1cm4gV2Mobyl8fHN9ZnVuY3Rpb24gV2ModCl7cmV0dXJuIDA9PSgxJnQpfWZ1bmN0aW9uIEdjKHQsZSxuLG8pe2lmKG51bGw9PT1lKXJldHVybi0xO2xldCBpPTA7aWYob3x8IW4pe2xldCBuPSExO2Zvcig7aTxlLmxlbmd0aDspe2NvbnN0IG89ZVtpXTtpZihvPT09dClyZXR1cm4gaTtpZigzPT09b3x8Nj09PW8pbj0hMDtlbHNle2lmKDE9PT1vfHwyPT09byl7bGV0IHQ9ZVsrK2ldO2Zvcig7InN0cmluZyI9PXR5cGVvZiB0Oyl0PWVbKytpXTtjb250aW51ZX1pZig0PT09bylicmVhaztpZigwPT09byl7aSs9NDtjb250aW51ZX19aSs9bj8xOjJ9cmV0dXJuLTF9cmV0dXJuKGZ1bmN0aW9uIGEodCxlKXtsZXQgbj10LmluZGV4T2YoNCk7aWYobj4tMSlmb3IobisrO248dC5sZW5ndGg7KXtjb25zdCBvPXRbbl07aWYoIm51bWJlciI9PXR5cGVvZiBvKXJldHVybi0xO2lmKG89PT1lKXJldHVybiBuO24rK31yZXR1cm4tMX0pKGUsdCl9ZnVuY3Rpb24gWWModCxlLG49ITEpe2ZvcihsZXQgbz0wO288ZS5sZW5ndGg7bysrKWlmKFVjKHQsZVtvXSxuKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBxYyh0LGUpe3Q6Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspe2NvbnN0IG89ZVtuXTtpZih0Lmxlbmd0aD09PW8ubGVuZ3RoKXtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKylpZih0W2VdIT09b1tlXSljb250aW51ZSB0O3JldHVybiEwfX1yZXR1cm4hMX1mdW5jdGlvbiBaYyh0LGUpe3JldHVybiB0PyI6bm90KCIrZS50cmltKCkrIikiOmV9ZnVuY3Rpb24gWGModCl7bGV0IGU9dFswXSxuPTEsbz0yLGk9IiIsYT0hMTtmb3IoO248dC5sZW5ndGg7KXtsZXQgcj10W25dO2lmKCJzdHJpbmciPT10eXBlb2YgcilpZigyJm8pe2NvbnN0IGU9dFsrK25dO2krPSJbIityKyhlLmxlbmd0aD4wPyc9IicrZSsnIic6IiIpKyJdIn1lbHNlIDgmbz9pKz0iLiIrcjo0Jm8mJihpKz0iICIrcik7ZWxzZSIiPT09aXx8V2Mocil8fChlKz1aYyhhLGkpLGk9IiIpLG89cixhPWF8fCFXYyhvKTtuKyt9cmV0dXJuIiIhPT1pJiYoZSs9WmMoYSxpKSksZX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IEtjPSJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGU/e19fYnJhbmRfXzoiTk9fQ0hBTkdFIn06e307Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIEpjKHQpe25nRGV2TW9kZSYmZW8odCwwLCJDYW4gb25seSBhZHZhbmNlIGZvcndhcmQiKSxRYyhhYSgpLGlhKCksTmEoKSt0LHVhKCkpfWZ1bmN0aW9uIFFjKHQsZSxuLG8pe2lmKG5nRGV2TW9kZSYmKGZ1bmN0aW9uIGkodCxlKXt4aShvaSx0WzFdLmJpbmRpbmdTdGFydEluZGV4LGUpfSkoZSxuKSwhbylpZigzPT0oMyZlWzJdKSl7Y29uc3Qgbz10LnByZU9yZGVyQ2hlY2tIb29rcztudWxsIT09byYmQmEoZSxvLG4pfWVsc2V7Y29uc3Qgbz10LnByZU9yZGVySG9va3M7bnVsbCE9PW8mJlZhKGUsbywwLG4pfUlhKG4pfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiAkYyh0LGUpe3JldHVybiBuZ0Rldk1vZGUmJnFuKHQsMCwzMjc2NyksbmdEZXZNb2RlJiZxbihlLDAsMzI3NjcpLHQ8PDE3fGU8PDJ9ZnVuY3Rpb24gdGQodCl7cmV0dXJuIG5nRGV2TW9kZSYmWW4odCwiZXhwZWN0ZWQgbnVtYmVyIiksdD4+MTcmMzI3Njd9ZnVuY3Rpb24gZWQodCl7cmV0dXJuIG5nRGV2TW9kZSYmWW4odCwiZXhwZWN0ZWQgbnVtYmVyIiksMj09KDImdCl9ZnVuY3Rpb24gbmQodCl7cmV0dXJuIG5nRGV2TW9kZSYmWW4odCwiZXhwZWN0ZWQgbnVtYmVyIiksMnx0fWZ1bmN0aW9uIG9kKHQpe3JldHVybiBuZ0Rldk1vZGUmJlluKHQsImV4cGVjdGVkIG51bWJlciIpLCgxMzEwNjgmdCk+PjJ9ZnVuY3Rpb24gaWQodCxlKXtyZXR1cm4gbmdEZXZNb2RlJiZZbih0LCJleHBlY3RlZCBudW1iZXIiKSxuZ0Rldk1vZGUmJnFuKGUsMCwzMjc2NyksLTEzMTA2OSZ0fGU8PDJ9ZnVuY3Rpb24gYWQodCl7cmV0dXJuIG5nRGV2TW9kZSYmWW4odCwiZXhwZWN0ZWQgbnVtYmVyIiksMT09KDEmdCl9ZnVuY3Rpb24gcmQodCl7cmV0dXJuIG5nRGV2TW9kZSYmWW4odCwiZXhwZWN0ZWQgbnVtYmVyIiksMXx0fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiBzZCh0LGUpe2lmKCFuZ0Rldk1vZGUpdGhyb3cgbmV3IEVycm9yKCJUaGlzIG1ldGhvZCBzaG91bGQgYmUgZ3VhcmRlZCB3aXRoIGBuZ0Rldk1vZGVgIHNvIHRoYXQgaXQgY2FuIGJlIHRyZWUgc2hha2VuIGluIHByb2R1Y3Rpb24hIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImRlYnVnIix7dmFsdWU6ZSxlbnVtZXJhYmxlOiExfSl9ZnVuY3Rpb24gbGQodCxlKXtpZighbmdEZXZNb2RlKXRocm93IG5ldyBFcnJvcigiVGhpcyBtZXRob2Qgc2hvdWxkIGJlIGd1YXJkZWQgd2l0aCBgbmdEZXZNb2RlYCBzbyB0aGF0IGl0IGNhbiBiZSB0cmVlIHNoYWtlbiBpbiBwcm9kdWN0aW9uISIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJkZWJ1ZyIse2dldDplLGVudW1lcmFibGU6ITF9KX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY29uc3QgY2Q9KCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHwhIW5nRGV2TW9kZSkmJkFvKCk7bGV0IGRkLHBkLG1kO2Z1bmN0aW9uIHVkKHQpe2lmKG51bGw9PXQpcmV0dXJuIiI7Y29uc3QgZT10Lmxhc3RJbmRleE9mKCJfVGVtcGxhdGUiKTtyZXR1cm4iXyIrKC0xPT09ZT90OnQuc3Vic3RyKDAsZSkpfWZ1bmN0aW9uIGZkKHQsZSl7Y29uc3Qgbj10LnRWaWV3Xy5kYXRhLG89W10saT1lP3QuY2xhc3NCaW5kaW5nczp0LnN0eWxlQmluZGluZ3MsYT10ZChpKSxyPW9kKGkpO2xldCBzPTAhPT1yLGw9cz9yOmE7Zm9yKDswIT09bDspe2NvbnN0IHQ9bltsKzFdO28udW5zaGlmdCh7a2V5Om5bbF0saW5kZXg6bCxpc1RlbXBsYXRlOnMscHJldkR1cGxpY2F0ZTplZCh0KSxuZXh0RHVwbGljYXRlOmFkKHQpLG5leHRJbmRleDpvZCh0KSxwcmV2SW5kZXg6dGQodCl9KSxsPT09YSYmKHM9ITEpLGw9dGQodCl9cmV0dXJuIG8ucHVzaCgoZT90LnJlc2lkdWFsQ2xhc3Nlczp0LnJlc2lkdWFsU3R5bGVzKXx8bnVsbCksb31mdW5jdGlvbiBnZCh0LGUpe2Zvcig7dDspZS5wdXNoKHQudGVtcGxhdGVfKSx0PXQubmV4dH1jb25zdCBoZD1jZCYmemwoIlRWaWV3RGF0YSIpfHxudWxsO2xldCBiZDtjb25zdCB5ZD1jZCYmemwoIkxWaWV3Qmx1ZXByaW50Iil8fG51bGwsX2Q9Y2QmJnpsKCJNYXRjaGVzQXJyYXkiKXx8bnVsbCxDZD1jZCYmemwoIlRWaWV3Q29tcG9uZW50cyIpfHxudWxsLE1kPWNkJiZ6bCgiVE5vZGVMb2NhbE5hbWVzIil8fG51bGwsdmQ9Y2QmJnpsKCJUTm9kZUluaXRpYWxJbnB1dHMiKXx8bnVsbDtjZCYmemwoIlROb2RlSW5pdGlhbERhdGEiKTtjb25zdCB4ZD1jZCYmemwoIkxDbGVhbnVwIil8fG51bGwsT2Q9Y2QmJnpsKCJUQ2xlYW51cCIpfHxudWxsO2Z1bmN0aW9uIFBkKHQpe2lmKHQpe2NvbnN0IGU9dC5kZWJ1ZztyZXR1cm4gb28oZSwiT2JqZWN0IGRvZXMgbm90IGhhdmUgYSBkZWJ1ZyByZXByZXNlbnRhdGlvbi4iKSxlfXJldHVybiB0fWZ1bmN0aW9uIHdkKHQsZT0hMSl7Y29uc3Qgbj1VaSh0KTtpZihuKXN3aXRjaChuLm5vZGVUeXBlKXtjYXNlIE5vZGUuVEVYVF9OT0RFOnJldHVybiBuLnRleHRDb250ZW50O2Nhc2UgTm9kZS5DT01NRU5UX05PREU6cmV0dXJuYFx4M2MhLS0ke24udGV4dENvbnRlbnR9LS1ceDNlYDtjYXNlIE5vZGUuRUxFTUVOVF9OT0RFOmNvbnN0IHQ9bi5vdXRlckhUTUw7cmV0dXJuIGU/dDp0LnNwbGl0KCI+IituLmlubmVySFRNTCsiPCIpWzBdKyI+In1yZXR1cm4gbnVsbH1jbGFzcyBrZHtjb25zdHJ1Y3Rvcih0KXt0aGlzLl9yYXdfbFZpZXc9dH1nZXQgZmxhZ3MoKXtjb25zdCB0PXRoaXMuX3Jhd19sVmlld1syXTtyZXR1cm57X19yYXdfX2ZsYWdzX186dCxpbml0UGhhc2VTdGF0ZTozJnQsY3JlYXRpb25Nb2RlOiEhKDQmdCksZmlyc3RWaWV3UGFzczohISg4JnQpLGNoZWNrQWx3YXlzOiEhKDE2JnQpLGRpcnR5OiEhKDY0JnQpLGF0dGFjaGVkOiEhKDEyOCZ0KSxkZXN0cm95ZWQ6ISEoMjU2JnQpLGlzUm9vdDohISg1MTImdCksaW5kZXhXaXRoaW5Jbml0UGhhc2U6dD4+MTF9fWdldCBwYXJlbnQoKXtyZXR1cm4gUGQodGhpcy5fcmF3X2xWaWV3WzNdKX1nZXQgaG9zdEhUTUwoKXtyZXR1cm4gd2QodGhpcy5fcmF3X2xWaWV3WzBdLCEwKX1nZXQgaHRtbCgpe3JldHVybih0aGlzLm5vZGVzfHxbXSkubWFwKFNkKS5qb2luKCIiKX1nZXQgY29udGV4dCgpe3JldHVybiB0aGlzLl9yYXdfbFZpZXdbOF19Z2V0IG5vZGVzKCl7Y29uc3QgdD10aGlzLl9yYXdfbFZpZXc7cmV0dXJuIEVkKHRbMV0uZmlyc3RDaGlsZCx0KX1nZXQgdGVtcGxhdGUoKXtyZXR1cm4gdGhpcy50Vmlldy50ZW1wbGF0ZV99Z2V0IHRWaWV3KCl7cmV0dXJuIHRoaXMuX3Jhd19sVmlld1sxXX1nZXQgY2xlYW51cCgpe3JldHVybiB0aGlzLl9yYXdfbFZpZXdbN119Z2V0IGluamVjdG9yKCl7cmV0dXJuIHRoaXMuX3Jhd19sVmlld1s5XX1nZXQgcmVuZGVyZXJGYWN0b3J5KCl7cmV0dXJuIHRoaXMuX3Jhd19sVmlld1sxMF19Z2V0IHJlbmRlcmVyKCl7cmV0dXJuIHRoaXMuX3Jhd19sVmlld1sxMV19Z2V0IHNhbml0aXplcigpe3JldHVybiB0aGlzLl9yYXdfbFZpZXdbMTJdfWdldCBjaGlsZEhlYWQoKXtyZXR1cm4gUGQodGhpcy5fcmF3X2xWaWV3WzEzXSl9Z2V0IG5leHQoKXtyZXR1cm4gUGQodGhpcy5fcmF3X2xWaWV3WzRdKX1nZXQgY2hpbGRUYWlsKCl7cmV0dXJuIFBkKHRoaXMuX3Jhd19sVmlld1sxNF0pfWdldCBkZWNsYXJhdGlvblZpZXcoKXtyZXR1cm4gUGQodGhpcy5fcmF3X2xWaWV3WzE1XSl9Z2V0IHF1ZXJpZXMoKXtyZXR1cm4gdGhpcy5fcmF3X2xWaWV3WzE5XX1nZXQgdEhvc3QoKXtyZXR1cm4gdGhpcy5fcmF3X2xWaWV3WzZdfWdldCBkZWNscygpe3JldHVybiBEZCh0aGlzLnRWaWV3LHRoaXMuX3Jhd19sVmlldyxvaSx0aGlzLnRWaWV3LmJpbmRpbmdTdGFydEluZGV4KX1nZXQgdmFycygpe3JldHVybiBEZCh0aGlzLnRWaWV3LHRoaXMuX3Jhd19sVmlldyx0aGlzLnRWaWV3LmJpbmRpbmdTdGFydEluZGV4LHRoaXMudFZpZXcuZXhwYW5kb1N0YXJ0SW5kZXgpfWdldCBleHBhbmRvKCl7cmV0dXJuIERkKHRoaXMudFZpZXcsdGhpcy5fcmF3X2xWaWV3LHRoaXMudFZpZXcuZXhwYW5kb1N0YXJ0SW5kZXgsdGhpcy5fcmF3X2xWaWV3Lmxlbmd0aCl9Z2V0IGNoaWxkVmlld3MoKXtjb25zdCB0PVtdO2xldCBlPXRoaXMuY2hpbGRIZWFkO2Zvcig7ZTspdC5wdXNoKGUpLGU9ZS5uZXh0O3JldHVybiB0fX1mdW5jdGlvbiBTZCh0KXtpZigiRWxlbWVudENvbnRhaW5lciI9PT10LnR5cGUpcmV0dXJuKHQuY2hpbGRyZW58fFtdKS5tYXAoU2QpLmpvaW4oIiIpO2lmKCJJY3VDb250YWluZXIiPT09dC50eXBlKXRocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIik7cmV0dXJuIHdkKHQubmF0aXZlLCEwKXx8IiJ9ZnVuY3Rpb24gRGQodCxlLG4sbyl7bGV0IGk9W107Zm9yKGxldCBhPW47YTxvO2ErKylpLnB1c2goe2luZGV4OmEsdDp0LmRhdGFbYV0sbDplW2FdfSk7cmV0dXJue3N0YXJ0Om4sZW5kOm8sbGVuZ3RoOm8tbixjb250ZW50Oml9fWZ1bmN0aW9uIEVkKHQsZSl7aWYodCl7Y29uc3Qgbj1bXTtsZXQgbz10O2Zvcig7bzspbi5wdXNoKEFkKG8sZSkpLG89by5uZXh0O3JldHVybiBufXJldHVybltdfWZ1bmN0aW9uIEFkKHQsZSl7Y29uc3Qgbj1VaShlW3QuaW5kZXhdKSxvPVtdLGk9W10sYT1lWzFdO2ZvcihsZXQgbj10LmRpcmVjdGl2ZVN0YXJ0O248dC5kaXJlY3RpdmVFbmQ7bisrKW8ucHVzaChhLmRhdGFbbl0udHlwZSksaS5wdXNoKGVbbl0pO3JldHVybntodG1sOndkKG4pLHR5cGU6cWEodC50eXBlKSx0Tm9kZTp0LG5hdGl2ZTpuLGNoaWxkcmVuOkVkKHQuY2hpbGQsZSksZmFjdG9yaWVzOm8saW5zdGFuY2VzOmksaW5qZWN0b3I6UmQodCxhLGUpLGdldCBpbmplY3RvclJlc29sdXRpb25QYXRoKCl7cmV0dXJuIHQuZGVidWdOb2RlSW5qZWN0b3JQYXRoKGUpfX19ZnVuY3Rpb24gUmQodCxlLG4pe2NvbnN0IG89W107Zm9yKGxldCBuPXQucHJvdmlkZXJJbmRleFN0YXJ0XztuPHQucHJvdmlkZXJJbmRleEVuZF87bisrKW8ucHVzaChlLmRhdGFbbl0pO2NvbnN0IGk9W107Zm9yKGxldCBuPXQucHJvdmlkZXJJbmRleEVuZF87bjx0LmRpcmVjdGl2ZUVuZDtuKyspaS5wdXNoKGUuZGF0YVtuXSk7cmV0dXJue2Jsb29tOk5kKG4sdC5pbmplY3RvckluZGV4KSxjdW11bGF0aXZlQmxvb206TmQoZS5kYXRhLHQuaW5qZWN0b3JJbmRleCkscHJvdmlkZXJzOmksdmlld1Byb3ZpZGVyczpvLHBhcmVudEluamVjdG9ySW5kZXg6blt0LnByb3ZpZGVySW5kZXhTdGFydF8tMV19fWZ1bmN0aW9uIFRkKHQsZSl7Y29uc3Qgbj10W2VdO2lmKCJudW1iZXIiIT10eXBlb2YgbilyZXR1cm4iPz8/Pz8/Pz8iO2NvbnN0IG89IjAwMDAwMDAwIituLnRvU3RyaW5nKDIpO3JldHVybiBvLnN1YnN0cmluZyhvLmxlbmd0aC04KX1mdW5jdGlvbiBOZCh0LGUpe3JldHVybiBlPDA/Ik5PX05PREVfSU5KRUNUT1IiOmAke1RkKHQsZSs3KX1fJHtUZCh0LGUrNil9XyR7VGQodCxlKzUpfV8ke1RkKHQsZSs0KX1fJHtUZCh0LGUrMyl9XyR7VGQodCxlKzIpfV8ke1RkKHQsZSsxKX1fJHtUZCh0LGUrMCl9YH1jbGFzcyBJZHtjb25zdHJ1Y3Rvcih0KXt0aGlzLl9yYXdfbENvbnRhaW5lcj10fWdldCBoYXNUcmFuc3BsYW50ZWRWaWV3cygpe3JldHVybiB0aGlzLl9yYXdfbENvbnRhaW5lclsyXX1nZXQgdmlld3MoKXtyZXR1cm4gdGhpcy5fcmF3X2xDb250YWluZXIuc2xpY2UoYWkpLm1hcChQZCl9Z2V0IHBhcmVudCgpe3JldHVybiBQZCh0aGlzLl9yYXdfbENvbnRhaW5lclszXSl9Z2V0IG1vdmVkVmlld3MoKXtyZXR1cm4gdGhpcy5fcmF3X2xDb250YWluZXJbOV19Z2V0IGhvc3QoKXtyZXR1cm4gdGhpcy5fcmF3X2xDb250YWluZXJbMF19Z2V0IG5hdGl2ZSgpe3JldHVybiB0aGlzLl9yYXdfbENvbnRhaW5lcls3XX1nZXQgbmV4dCgpe3JldHVybiBQZCh0aGlzLl9yYXdfbENvbnRhaW5lcls0XSl9fWNvbnN0IHpkPVByb21pc2UucmVzb2x2ZShudWxsKTtmdW5jdGlvbiBIZCh0LGUpe2NvbnN0IG49dC5jb250ZW50UXVlcmllcztpZihudWxsIT09bilmb3IobGV0IG89MDtvPG4ubGVuZ3RoO28rPTIpe2NvbnN0IGk9bltvXSxhPW5bbysxXTtpZigtMSE9PWEpe2NvbnN0IG49dC5kYXRhW2FdO25nRGV2TW9kZSYmb28obiwiRGlyZWN0aXZlRGVmIG5vdCBmb3VuZC4iKSxuZ0Rldk1vZGUmJm9vKG4uY29udGVudFF1ZXJpZXMsImNvbnRlbnRRdWVyaWVzIGZ1bmN0aW9uIHNob3VsZCBiZSBkZWZpbmVkIiksUGEoaSksbi5jb250ZW50UXVlcmllcygyLGVbYV0sYSl9fX1mdW5jdGlvbiBGZCh0LGUsbixvLGksYSxyLHMsbCxjKXtjb25zdCBkPW5nRGV2TW9kZT8oZnVuY3Rpb24gcCh0KXtyZXR1cm4oZnVuY3Rpb24gZSh0LG4pe3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIHZvaWQgMD09PW1kJiYobWQ9bmV3KHpsKCJMUm9vdFZpZXciKSkpLG1kO2Nhc2UgMTp2b2lkIDA9PT1kZCYmKGRkPW5ldyBNYXApO2xldCB0PWRkLmdldChuKTtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9bmV3KHpsKCJMQ29tcG9uZW50VmlldyIrdWQobikpKSxkZC5zZXQobix0KSksdDtjYXNlIDI6dm9pZCAwPT09cGQmJihwZD1uZXcgTWFwKTtsZXQgZT1wZC5nZXQobik7cmV0dXJuIHZvaWQgMD09PWUmJihlPW5ldyh6bCgiTEVtYmVkZGVkVmlldyIrdWQobikpKSxwZC5zZXQobixlKSksZX19KSh0LnR5cGUsdC50ZW1wbGF0ZSYmdC50ZW1wbGF0ZS5uYW1lKS5jb25jYXQodC5ibHVlcHJpbnQpfSkoZSk6ZS5ibHVlcHJpbnQuc2xpY2UoKTtyZXR1cm4gZFswXT1pLGRbMl09MTQwfG8sdGEoZCksbmdEZXZNb2RlJiZlLmRlY2xUTm9kZSYmdCYmbWkoZS5kZWNsVE5vZGUsdCksZFszXT1kWzE1XT10LGRbOF09bixkWzEwXT1yfHx0JiZ0WzEwXSxuZ0Rldk1vZGUmJm9vKGRbMTBdLCJSZW5kZXJlckZhY3RvcnkgaXMgcmVxdWlyZWQiKSxkWzExXT1zfHx0JiZ0WzExXSxuZ0Rldk1vZGUmJm9vKGRbMTFdLCJSZW5kZXJlciBpcyByZXF1aXJlZCIpLGRbMTJdPWx8fHQmJnRbMTJdfHxudWxsLGRbOV09Y3x8dCYmdFs5XXx8bnVsbCxkWzZdPWEsbmdEZXZNb2RlJiZYbigyIT1lLnR5cGV8fG51bGwhPT10LCEwLCJFbWJlZGRlZCB2aWV3cyBtdXN0IGhhdmUgcGFyZW50TFZpZXciKSxkWzE2XT0yPT1lLnR5cGU/dFsxNl06ZCxuZ0Rldk1vZGUmJihmdW5jdGlvbiBtKHQpe3NkKHQsbmV3IGtkKHQpKX0pKGQpLGR9ZnVuY3Rpb24gTGQodCxlLG4sbyxpKXtuZ0Rldk1vZGUmJjAhPT1lJiZubyhlLG9pLCJUTm9kZXMgY2FuJ3QgYmUgaW4gdGhlIExWaWV3IGhlYWRlci4iKSxuZ0Rldk1vZGUmJihmdW5jdGlvbiBhKHQpezIhPT10JiYxIT09dCYmNCE9PXQmJjghPT10JiYzMiE9PXQmJjE2IT09dCYmNjQhPT10JiZpbyhgRXhwZWN0ZWQgVE5vZGVUeXBlIHRvIGhhdmUgb25seSBhIHNpbmdsZSB0eXBlIHNlbGVjdGVkLCBidXQgZ290ICR7cWEodCl9LmApfSkobik7bGV0IHI9dC5kYXRhW2VdO2lmKG51bGw9PT1yKXI9QmQodCxlLG4sbyxpKSwoZnVuY3Rpb24gcygpe3JldHVybiBuYS5sRnJhbWUuaW5JMThufSkoKSYmKHIuZmxhZ3N8PTY0KTtlbHNlIGlmKDY0JnIudHlwZSl7ci50eXBlPW4sci52YWx1ZT1vLHIuYXR0cnM9aTtjb25zdCBhPWNhKCk7ci5pbmplY3RvckluZGV4PW51bGw9PT1hPy0xOmEuaW5qZWN0b3JJbmRleCxuZ0Rldk1vZGUmJnVpKHIsdCksbmdEZXZNb2RlJiZYbihlLHIuaW5kZXgsIkV4cGVjdGluZyBzYW1lIGluZGV4Iil9cmV0dXJuIGRhKHIsITApLHJ9ZnVuY3Rpb24gQmQodCxlLG4sbyxpKXtjb25zdCBhPWxhKCkscj1wYSgpLHM9dC5kYXRhW2VdPShmdW5jdGlvbiBsKHQsZSxuLG8saSxhKXtuZ0Rldk1vZGUmJjAhPT1vJiZubyhvLG9pLCJUTm9kZXMgY2FuJ3QgYmUgaW4gdGhlIExWaWV3IGhlYWRlci4iKSxuZ0Rldk1vZGUmJlFuKGEsdm9pZCAwLCIndW5kZWZpbmVkJyBpcyBub3QgdmFsaWQgdmFsdWUgZm9yICdhdHRycyciKSxuZ0Rldk1vZGUmJm5nRGV2TW9kZS50Tm9kZSsrLG5nRGV2TW9kZSYmZSYmdWkoZSx0KTtsZXQgcj1lP2UuaW5qZWN0b3JJbmRleDotMTtjb25zdCBzPW5nRGV2TW9kZT9uZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlLG4sbyxpLGEscixzLGwsYyxkLHAsbSx1LGYsZyxoLGIseSxfLEMsTSx2LHgsTyxQLHcsayxTLEQsRSxBKXt0aGlzLnRWaWV3Xz10LHRoaXMudHlwZT1lLHRoaXMuaW5kZXg9bix0aGlzLmluc2VydEJlZm9yZUluZGV4PW8sdGhpcy5pbmplY3RvckluZGV4PWksdGhpcy5kaXJlY3RpdmVTdGFydD1hLHRoaXMuZGlyZWN0aXZlRW5kPXIsdGhpcy5kaXJlY3RpdmVTdHlsaW5nTGFzdD1zLHRoaXMucHJvcGVydHlCaW5kaW5ncz1sLHRoaXMuZmxhZ3M9Yyx0aGlzLnByb3ZpZGVySW5kZXhlcz1kLHRoaXMudmFsdWU9cCx0aGlzLmF0dHJzPW0sdGhpcy5tZXJnZWRBdHRycz11LHRoaXMubG9jYWxOYW1lcz1mLHRoaXMuaW5pdGlhbElucHV0cz1nLHRoaXMuaW5wdXRzPWgsdGhpcy5vdXRwdXRzPWIsdGhpcy50Vmlld3M9eSx0aGlzLm5leHQ9Xyx0aGlzLnByb2plY3Rpb25OZXh0PUMsdGhpcy5jaGlsZD1NLHRoaXMucGFyZW50PXYsdGhpcy5wcm9qZWN0aW9uPXgsdGhpcy5zdHlsZXM9Tyx0aGlzLnN0eWxlc1dpdGhvdXRIb3N0PVAsdGhpcy5yZXNpZHVhbFN0eWxlcz13LHRoaXMuY2xhc3Nlcz1rLHRoaXMuY2xhc3Nlc1dpdGhvdXRIb3N0PVMsdGhpcy5yZXNpZHVhbENsYXNzZXM9RCx0aGlzLmNsYXNzQmluZGluZ3M9RSx0aGlzLnN0eWxlQmluZGluZ3M9QX1kZWJ1Z05vZGVJbmplY3RvclBhdGgodCl7Y29uc3QgZT1bXTtsZXQgbj1scih0aGlzLHQpO2lmKC0xPT09bil7Y29uc3QgZT1jcih0aGlzLHQpO2UhPT1HYSYmKG49ZXIoZSksdD1ucihlLHQpKX1mb3IoOy0xIT09bjspe25nRGV2TW9kZSYmUGkodCxuKSxlLnB1c2goQWQodFsxXS5kYXRhW24rOF0sdCkpO2NvbnN0IG89dFtuKzhdO289PT1HYT9uPS0xOihuPWVyKG8pLHQ9bnIobyx0KSl9cmV0dXJuIGV9Z2V0IHR5cGVfKCl7cmV0dXJuIHFhKHRoaXMudHlwZSl8fGBUTm9kZVR5cGUuPyR7dGhpcy50eXBlfT9gfWdldCBmbGFnc18oKXtjb25zdCB0PVtdO3JldHVybiAxNiZ0aGlzLmZsYWdzJiZ0LnB1c2goIlROb2RlRmxhZ3MuaGFzQ2xhc3NJbnB1dCIpLDgmdGhpcy5mbGFncyYmdC5wdXNoKCJUTm9kZUZsYWdzLmhhc0NvbnRlbnRRdWVyeSIpLDMyJnRoaXMuZmxhZ3MmJnQucHVzaCgiVE5vZGVGbGFncy5oYXNTdHlsZUlucHV0IiksMTI4JnRoaXMuZmxhZ3MmJnQucHVzaCgiVE5vZGVGbGFncy5oYXNIb3N0QmluZGluZ3MiKSwyJnRoaXMuZmxhZ3MmJnQucHVzaCgiVE5vZGVGbGFncy5pc0NvbXBvbmVudEhvc3QiKSwxJnRoaXMuZmxhZ3MmJnQucHVzaCgiVE5vZGVGbGFncy5pc0RpcmVjdGl2ZUhvc3QiKSw2NCZ0aGlzLmZsYWdzJiZ0LnB1c2goIlROb2RlRmxhZ3MuaXNEZXRhY2hlZCIpLDQmdGhpcy5mbGFncyYmdC5wdXNoKCJUTm9kZUZsYWdzLmlzUHJvamVjdGVkIiksdC5qb2luKCJ8Iil9Z2V0IHRlbXBsYXRlXygpe2lmKDEmdGhpcy50eXBlKXJldHVybiB0aGlzLnZhbHVlO2NvbnN0IHQ9W10sZT0ic3RyaW5nIj09dHlwZW9mIHRoaXMudmFsdWUmJnRoaXMudmFsdWV8fHRoaXMudHlwZV87aWYodC5wdXNoKCI8IixlKSx0aGlzLmZsYWdzJiZ0LnB1c2goIiAiLHRoaXMuZmxhZ3NfKSx0aGlzLmF0dHJzKWZvcihsZXQgZT0wO2U8dGhpcy5hdHRycy5sZW5ndGg7KXtjb25zdCBuPXRoaXMuYXR0cnNbZSsrXTtpZigibnVtYmVyIj09dHlwZW9mIG4pYnJlYWs7Y29uc3Qgbz10aGlzLmF0dHJzW2UrK107dC5wdXNoKCIgIixuLCc9IicsbywnIicpfXJldHVybiB0LnB1c2goIj4iKSxnZCh0aGlzLmNoaWxkLHQpLHQucHVzaCgiPC8iLGUsIj4iKSx0LmpvaW4oIiIpfWdldCBzdHlsZUJpbmRpbmdzXygpe3JldHVybiBmZCh0aGlzLCExKX1nZXQgY2xhc3NCaW5kaW5nc18oKXtyZXR1cm4gZmQodGhpcywhMCl9Z2V0IHByb3ZpZGVySW5kZXhTdGFydF8oKXtyZXR1cm4gMTA0ODU3NSZ0aGlzLnByb3ZpZGVySW5kZXhlc31nZXQgcHJvdmlkZXJJbmRleEVuZF8oKXtyZXR1cm4gdGhpcy5wcm92aWRlckluZGV4U3RhcnRfKyh0aGlzLnByb3ZpZGVySW5kZXhlcz4+PjIwKX19KHQsbixvLG51bGwsciwtMSwtMSwtMSxudWxsLDAsMCxpLGEsbnVsbCxudWxsLHZvaWQgMCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxlLG51bGwsbnVsbCxudWxsLHZvaWQgMCxudWxsLG51bGwsdm9pZCAwLDAsMCk6e3R5cGU6bixpbmRleDpvLGluc2VydEJlZm9yZUluZGV4Om51bGwsaW5qZWN0b3JJbmRleDpyLGRpcmVjdGl2ZVN0YXJ0Oi0xLGRpcmVjdGl2ZUVuZDotMSxkaXJlY3RpdmVTdHlsaW5nTGFzdDotMSxwcm9wZXJ0eUJpbmRpbmdzOm51bGwsZmxhZ3M6MCxwcm92aWRlckluZGV4ZXM6MCx2YWx1ZTppLGF0dHJzOmEsbWVyZ2VkQXR0cnM6bnVsbCxsb2NhbE5hbWVzOm51bGwsaW5pdGlhbElucHV0czp2b2lkIDAsaW5wdXRzOm51bGwsb3V0cHV0czpudWxsLHRWaWV3czpudWxsLG5leHQ6bnVsbCxwcm9qZWN0aW9uTmV4dDpudWxsLGNoaWxkOm51bGwscGFyZW50OmUscHJvamVjdGlvbjpudWxsLHN0eWxlczpudWxsLHN0eWxlc1dpdGhvdXRIb3N0Om51bGwscmVzaWR1YWxTdHlsZXM6dm9pZCAwLGNsYXNzZXM6bnVsbCxjbGFzc2VzV2l0aG91dEhvc3Q6bnVsbCxyZXNpZHVhbENsYXNzZXM6dm9pZCAwLGNsYXNzQmluZGluZ3M6MCxzdHlsZUJpbmRpbmdzOjB9O3JldHVybiBuZ0Rldk1vZGUmJk9iamVjdC5zZWFsKHMpLHN9KSh0LHI/YTphJiZhLnBhcmVudCxuLGUsbyxpKTtyZXR1cm4gbnVsbD09PXQuZmlyc3RDaGlsZCYmKHQuZmlyc3RDaGlsZD1zKSxudWxsIT09YSYmKHI/bnVsbD09YS5jaGlsZCYmbnVsbCE9PXMucGFyZW50JiYoYS5jaGlsZD1zKTpudWxsPT09YS5uZXh0JiYoYS5uZXh0PXMpKSxzfWZ1bmN0aW9uIFZkKHQsZSxuLG8pe2lmKDA9PT1uKXJldHVybi0xO25nRGV2TW9kZSYmKENpKHQpLEpuKHQsZVsxXSwiYExWaWV3YCBtdXN0IGJlIGFzc29jaWF0ZWQgd2l0aCBgVFZpZXdgISIpLFhuKHQuZGF0YS5sZW5ndGgsZS5sZW5ndGgsIkV4cGVjdGluZyBMVmlldyB0byBiZSBzYW1lIHNpemUgYXMgVFZpZXciKSxYbih0LmRhdGEubGVuZ3RoLHQuYmx1ZXByaW50Lmxlbmd0aCwiRXhwZWN0aW5nIEJsdWVwcmludCB0byBiZSBzYW1lIHNpemUgYXMgVFZpZXciKSxNaSh0KSk7Y29uc3QgaT1lLmxlbmd0aDtmb3IobGV0IGk9MDtpPG47aSsrKWUucHVzaChvKSx0LmJsdWVwcmludC5wdXNoKG8pLHQuZGF0YS5wdXNoKG51bGwpO3JldHVybiBpfWZ1bmN0aW9uIGpkKHQsZSxuKXtuZ0Rldk1vZGUmJlhuKEppKGUpLCEwLCJTaG91bGQgYmUgcnVuIGluIGNyZWF0aW9uIG1vZGUiKSxTYShlKTt0cnl7Y29uc3Qgbz10LnZpZXdRdWVyeTtudWxsIT09byYmUHAoMSxvLG4pO2NvbnN0IGk9dC50ZW1wbGF0ZTtudWxsIT09aSYmR2QodCxlLGksMSxuKSx0LmZpcnN0Q3JlYXRlUGFzcyYmKHQuZmlyc3RDcmVhdGVQYXNzPSExKSx0LnN0YXRpY0NvbnRlbnRRdWVyaWVzJiZIZCh0LGUpLHQuc3RhdGljVmlld1F1ZXJpZXMmJlBwKDIsdC52aWV3UXVlcnksbik7Y29uc3QgYT10LmNvbXBvbmVudHM7bnVsbCE9PWEmJihmdW5jdGlvbiBvKHQsZSl7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspX3AodCxlW25dKX0pKGUsYSl9Y2F0Y2goZSl7dGhyb3cgdC5maXJzdENyZWF0ZVBhc3MmJih0LmluY29tcGxldGVGaXJzdFBhc3M9ITApLGV9ZmluYWxseXtlWzJdJj0tNSxUYSgpfX1mdW5jdGlvbiBVZCh0LGUsbixvKXtuZ0Rldk1vZGUmJlhuKEppKGUpLCExLCJTaG91bGQgYmUgcnVuIGluIHVwZGF0ZSBtb2RlIik7Y29uc3QgaT1lWzJdO2lmKDI1Nj09KDI1NiZpKSlyZXR1cm47U2EoZSk7Y29uc3QgYT11YSgpO3RyeXt0YShlKSxiYSh0LmJpbmRpbmdTdGFydEluZGV4KSxudWxsIT09biYmR2QodCxlLG4sMixvKTtjb25zdCByPTM9PSgzJmkpO2lmKCFhKWlmKHIpe2NvbnN0IG49dC5wcmVPcmRlckNoZWNrSG9va3M7bnVsbCE9PW4mJkJhKGUsbixudWxsKX1lbHNle2NvbnN0IG49dC5wcmVPcmRlckhvb2tzO251bGwhPT1uJiZWYShlLG4sMCxudWxsKSxqYShlLDApfWlmKChmdW5jdGlvbiByKHQpe2ZvcihsZXQgZT1hYyh0KTtudWxsIT09ZTtlPXJjKGUpKXtpZighZVsyXSljb250aW51ZTtjb25zdCB0PWVbOV07bmdEZXZNb2RlJiZvbyh0LCJUcmFuc3BsYW50ZWQgVmlldyBmbGFncyBzZXQgYnV0IG1pc3NpbmcgTU9WRURfVklFV1MiKTtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKyl7Y29uc3Qgbj10W2VdLG89blszXTtuZ0Rldk1vZGUmJmJpKG8pLDA9PSgxMDI0Jm5bMl0pJiZlYShvLDEpLG5bMl18PTEwMjR9fX0pKGUpLChmdW5jdGlvbiBzKHQpe2ZvcihsZXQgZT1hYyh0KTtudWxsIT09ZTtlPXJjKGUpKWZvcihsZXQgdD1haTt0PGUubGVuZ3RoO3QrKyl7Y29uc3Qgbj1lW3RdLG89blsxXTtuZ0Rldk1vZGUmJm9vKG8sIlRWaWV3IG11c3QgYmUgYWxsb2NhdGVkIiksUWkobikmJlVkKG8sbixvLnRlbXBsYXRlLG5bOF0pfX0pKGUpLG51bGwhPT10LmNvbnRlbnRRdWVyaWVzJiZIZCh0LGUpLCFhKWlmKHIpe2NvbnN0IG49dC5jb250ZW50Q2hlY2tIb29rcztudWxsIT09biYmQmEoZSxuKX1lbHNle2NvbnN0IG49dC5jb250ZW50SG9va3M7bnVsbCE9PW4mJlZhKGUsbiwxKSxqYShlLDEpfSEoZnVuY3Rpb24gbCh0LGUpe2NvbnN0IG49dC5ob3N0QmluZGluZ09wQ29kZXM7aWYobnVsbCE9PW4pdHJ5e2ZvcihsZXQgdD0wO3Q8bi5sZW5ndGg7dCsrKXtjb25zdCBvPW5bdF07aWYobzwwKUlhKH5vKTtlbHNle2NvbnN0IGk9byxhPW5bKyt0XSxyPW5bKyt0XTtNYShhLGkpLHIoMixlW2ldKX19fWZpbmFsbHl7SWEoLTEpfX0pKHQsZSk7Y29uc3Qgcz10LmNvbXBvbmVudHM7bnVsbCE9PXMmJihmdW5jdGlvbiBjKHQsZSl7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspYnAodCxlW25dKX0pKGUscyk7Y29uc3QgbD10LnZpZXdRdWVyeTtpZihudWxsIT09bCYmUHAoMixsLG8pLCFhKWlmKHIpe2NvbnN0IG49dC52aWV3Q2hlY2tIb29rcztudWxsIT09biYmQmEoZSxuKX1lbHNle2NvbnN0IG49dC52aWV3SG9va3M7bnVsbCE9PW4mJlZhKGUsbiwyKSxqYShlLDIpfSEwPT09dC5maXJzdFVwZGF0ZVBhc3MmJih0LmZpcnN0VXBkYXRlUGFzcz0hMSksYXx8KGVbMl0mPS03MyksMTAyNCZlWzJdJiYoZVsyXSY9LTEwMjUsZWEoZVszXSwtMSkpfWZpbmFsbHl7VGEoKX19ZnVuY3Rpb24gV2QodCxlLG4sbyl7Y29uc3QgaT1lWzEwXSxhPSF1YSgpLHI9SmkoZSk7dHJ5e2EmJiFyJiZpLmJlZ2luJiZpLmJlZ2luKCksciYmamQodCxlLG8pLFVkKHQsZSxuLG8pfWZpbmFsbHl7YSYmIXImJmkuZW5kJiZpLmVuZCgpfX1mdW5jdGlvbiBHZCh0LGUsbixvLGkpe2NvbnN0IGE9TmEoKSxyPTImbzt0cnl7SWEoLTEpLHImJmUubGVuZ3RoPm9pJiZRYyh0LGUsb2ksdWEoKSksSWkocj8yOjAsaSksbihvLGkpfWZpbmFsbHl7SWEoYSksSWkocj8zOjEsaSl9fWZ1bmN0aW9uIFlkKHQsZSxuKXtpZihsaShlKSl7Y29uc3Qgbz1lLmRpcmVjdGl2ZUVuZDtmb3IobGV0IGk9ZS5kaXJlY3RpdmVTdGFydDtpPG87aSsrKXtjb25zdCBlPXQuZGF0YVtpXTtlLmNvbnRlbnRRdWVyaWVzJiZlLmNvbnRlbnRRdWVyaWVzKDEsbltpXSxpKX19fWZ1bmN0aW9uIHFkKHQsZSxuKXtvYSgpJiYoKGZ1bmN0aW9uIG8odCxlLG4saSl7Y29uc3QgYT1uLmRpcmVjdGl2ZVN0YXJ0LHI9bi5kaXJlY3RpdmVFbmQ7dC5maXJzdENyZWF0ZVBhc3N8fHJyKG4sZSksVmwoaSxlKTtjb25zdCBzPW4uaW5pdGlhbElucHV0cztmb3IobGV0IG89YTtvPHI7bysrKXtjb25zdCBpPXQuZGF0YVtvXSxyPXBpKGkpO3ImJihuZ0Rldk1vZGUmJlphKG4sMyksZHAoZSxuLGkpKTtjb25zdCBsPXlyKGUsdCxvLG4pO1ZsKGwsZSksbnVsbCE9PXMmJnVwKGUsby1hLGwsaSxuLHMpLHImJihaaShuLmluZGV4LGUpWzhdPWwpfX0pKHQsZSxuLEdpKG4sZSkpLDEyOD09KDEyOCZuLmZsYWdzKSYmKGZ1bmN0aW9uIGkodCxlLG4pe2NvbnN0IG89bi5kaXJlY3RpdmVTdGFydCxpPW4uZGlyZWN0aXZlRW5kLGE9bi5pbmRleCxyPShmdW5jdGlvbiBzKCl7cmV0dXJuIG5hLmxGcmFtZS5jdXJyZW50RGlyZWN0aXZlSW5kZXh9KSgpO3RyeXtJYShhKTtmb3IobGV0IG49bztuPGk7bisrKXtjb25zdCBvPXQuZGF0YVtuXSxpPWVbbl07dmEobiksbnVsbD09PW8uaG9zdEJpbmRpbmdzJiYwPT09by5ob3N0VmFycyYmbnVsbD09PW8uaG9zdEF0dHJzfHxhcChvLGkpfX1maW5hbGx5e0lhKC0xKSx2YShyKX19KSh0LGUsbikpfWZ1bmN0aW9uIFpkKHQsZSxuPUdpKXtjb25zdCBvPWUubG9jYWxOYW1lcztpZihudWxsIT09byl7bGV0IGk9ZS5pbmRleCsxO2ZvcihsZXQgYT0wO2E8by5sZW5ndGg7YSs9Mil7Y29uc3Qgcj1vW2ErMV0scz0tMT09PXI/bihlLHQpOnRbcl07dFtpKytdPXN9fX1mdW5jdGlvbiBYZCh0KXtjb25zdCBlPXQudFZpZXc7cmV0dXJuIG51bGw9PT1lfHxlLmluY29tcGxldGVGaXJzdFBhc3M/dC50Vmlldz1LZCgxLG51bGwsdC50ZW1wbGF0ZSx0LmRlY2xzLHQudmFycyx0LmRpcmVjdGl2ZURlZnMsdC5waXBlRGVmcyx0LnZpZXdRdWVyeSx0LnNjaGVtYXMsdC5jb25zdHMpOmV9ZnVuY3Rpb24gS2QodCxlLG4sbyxpLGEscixzLGwsYyl7bmdEZXZNb2RlJiZuZ0Rldk1vZGUudFZpZXcrKztjb25zdCBkPW9pK28scD1kK2ksbT0oZnVuY3Rpb24gdSh0LGUpe2NvbnN0IG49bmdEZXZNb2RlP25ldyB5ZDpbXTtmb3IobGV0IG89MDtvPGU7bysrKW4ucHVzaChvPHQ/bnVsbDpLYyk7cmV0dXJuIG59KShkLHApLGY9ImZ1bmN0aW9uIj09dHlwZW9mIGM/YygpOmMsZz1tWzFdPW5nRGV2TW9kZT9uZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlLG4sbyxpLGEscixzLGwsYyxkLHAsbSx1LGYsZyxoLGIseSxfLEMsTSx2LHgsTyxQLHcsayxTLEQsRSxBKXt0aGlzLnR5cGU9dCx0aGlzLmJsdWVwcmludD1lLHRoaXMudGVtcGxhdGU9bix0aGlzLnF1ZXJpZXM9byx0aGlzLnZpZXdRdWVyeT1pLHRoaXMuZGVjbFROb2RlPWEsdGhpcy5kYXRhPXIsdGhpcy5iaW5kaW5nU3RhcnRJbmRleD1zLHRoaXMuZXhwYW5kb1N0YXJ0SW5kZXg9bCx0aGlzLmhvc3RCaW5kaW5nT3BDb2Rlcz1jLHRoaXMuZmlyc3RDcmVhdGVQYXNzPWQsdGhpcy5maXJzdFVwZGF0ZVBhc3M9cCx0aGlzLnN0YXRpY1ZpZXdRdWVyaWVzPW0sdGhpcy5zdGF0aWNDb250ZW50UXVlcmllcz11LHRoaXMucHJlT3JkZXJIb29rcz1mLHRoaXMucHJlT3JkZXJDaGVja0hvb2tzPWcsdGhpcy5jb250ZW50SG9va3M9aCx0aGlzLmNvbnRlbnRDaGVja0hvb2tzPWIsdGhpcy52aWV3SG9va3M9eSx0aGlzLnZpZXdDaGVja0hvb2tzPV8sdGhpcy5kZXN0cm95SG9va3M9Qyx0aGlzLmNsZWFudXA9TSx0aGlzLmNvbnRlbnRRdWVyaWVzPXYsdGhpcy5jb21wb25lbnRzPXgsdGhpcy5kaXJlY3RpdmVSZWdpc3RyeT1PLHRoaXMucGlwZVJlZ2lzdHJ5PVAsdGhpcy5maXJzdENoaWxkPXcsdGhpcy5zY2hlbWFzPWssdGhpcy5jb25zdHM9Uyx0aGlzLmluY29tcGxldGVGaXJzdFBhc3M9RCx0aGlzLl9kZWNscz1FLHRoaXMuX3ZhcnM9QX1nZXQgdGVtcGxhdGVfKCl7Y29uc3QgdD1bXTtyZXR1cm4gZ2QodGhpcy5maXJzdENoaWxkLHQpLHQuam9pbigiIil9Z2V0IHR5cGVfKCl7cmV0dXJuIGlpW3RoaXMudHlwZV18fGBUVmlld1R5cGUuPyR7dGhpcy50eXBlfT9gfX0odCxtLG4sbnVsbCxzLGUsKGZ1bmN0aW9uIGgodCl7cmV0dXJuIHZvaWQgMD09PWJkJiYoYmQ9bmV3IGhkKSxiZC5jb25jYXQodCl9KShtKS5maWxsKG51bGwsZCksZCxwLG51bGwsITAsITAsITEsITEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwiZnVuY3Rpb24iPT10eXBlb2YgYT9hKCk6YSwiZnVuY3Rpb24iPT10eXBlb2Ygcj9yKCk6cixudWxsLGwsZiwhMSxvLGkpOnt0eXBlOnQsYmx1ZXByaW50Om0sdGVtcGxhdGU6bixxdWVyaWVzOm51bGwsdmlld1F1ZXJ5OnMsZGVjbFROb2RlOmUsZGF0YTptLnNsaWNlKCkuZmlsbChudWxsLGQpLGJpbmRpbmdTdGFydEluZGV4OmQsZXhwYW5kb1N0YXJ0SW5kZXg6cCxob3N0QmluZGluZ09wQ29kZXM6bnVsbCxmaXJzdENyZWF0ZVBhc3M6ITAsZmlyc3RVcGRhdGVQYXNzOiEwLHN0YXRpY1ZpZXdRdWVyaWVzOiExLHN0YXRpY0NvbnRlbnRRdWVyaWVzOiExLHByZU9yZGVySG9va3M6bnVsbCxwcmVPcmRlckNoZWNrSG9va3M6bnVsbCxjb250ZW50SG9va3M6bnVsbCxjb250ZW50Q2hlY2tIb29rczpudWxsLHZpZXdIb29rczpudWxsLHZpZXdDaGVja0hvb2tzOm51bGwsZGVzdHJveUhvb2tzOm51bGwsY2xlYW51cDpudWxsLGNvbnRlbnRRdWVyaWVzOm51bGwsY29tcG9uZW50czpudWxsLGRpcmVjdGl2ZVJlZ2lzdHJ5OiJmdW5jdGlvbiI9PXR5cGVvZiBhP2EoKTphLHBpcGVSZWdpc3RyeToiZnVuY3Rpb24iPT10eXBlb2Ygcj9yKCk6cixmaXJzdENoaWxkOm51bGwsc2NoZW1hczpsLGNvbnN0czpmLGluY29tcGxldGVGaXJzdFBhc3M6ITF9O3JldHVybiBuZ0Rldk1vZGUmJk9iamVjdC5zZWFsKGcpLGd9ZnVuY3Rpb24gSmQodCxlLG4sbyl7Y29uc3QgaT1TcChlKTtudWxsPT09bj8obmdEZXZNb2RlJiZPYmplY3QuZnJlZXplKERwKHQpKSxpLnB1c2gobykpOihpLnB1c2gobiksdC5maXJzdENyZWF0ZVBhc3MmJkRwKHQpLnB1c2gobyxpLmxlbmd0aC0xKSl9ZnVuY3Rpb24gUWQodCxlLG4pe2ZvcihsZXQgbyBpbiB0KWlmKHQuaGFzT3duUHJvcGVydHkobykpe2NvbnN0IGk9dFtvXTsobj1udWxsPT09bj97fTpuKS5oYXNPd25Qcm9wZXJ0eShvKT9uW29dLnB1c2goZSxpKTpuW29dPVtlLGldfXJldHVybiBufWZ1bmN0aW9uICRkKHQsZSxuLG8saSxhLHIscyl7bmdEZXZNb2RlJiZRbihpLEtjLCJJbmNvbWluZyB2YWx1ZSBzaG91bGQgbmV2ZXIgYmUgTk9fQ0hBTkdFLiIpO2NvbnN0IGw9R2koZSxuKTtsZXQgYyxkPWUuaW5wdXRzO2lmKCFzJiZudWxsIT1kJiYoYz1kW29dKSlScCh0LG4sYyxvLGkpLGNpKGUpJiYoZnVuY3Rpb24gcCh0LGUpe25nRGV2TW9kZSYmX2kodCk7Y29uc3Qgbj1aaShlLHQpOzE2Jm5bMl18fChuWzJdfD02NCl9KShuLGUuaW5kZXgpLG5nRGV2TW9kZSYmKGZ1bmN0aW9uIG0odCxlLG4sbyxpKXtpZig3Jm4pZm9yKGxldCBhPTA7YTxvLmxlbmd0aDthKz0yKXRwKHQsZSxuLG9bYSsxXSxpKX0pKG4sbCxlLnR5cGUsYyxpKTtlbHNlIGlmKDMmZS50eXBlKXtpZihvPShmdW5jdGlvbiB1KHQpe3JldHVybiJjbGFzcyI9PT10PyJjbGFzc05hbWUiOiJmb3IiPT09dD8iaHRtbEZvciI6ImZvcm1hY3Rpb24iPT09dD8iZm9ybUFjdGlvbiI6ImlubmVySHRtbCI9PT10PyJpbm5lckhUTUwiOiJyZWFkb25seSI9PT10PyJyZWFkT25seSI6InRhYmluZGV4Ij09PXQ/InRhYkluZGV4Ijp0fSkobyksbmdEZXZNb2RlKXtpZigoZnVuY3Rpb24gZih0KXtpZih0LnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgib24iKSl7Y29uc3QgZT1gQmluZGluZyB0byBldmVudCBwcm9wZXJ0eSAnJHt0fScgaXMgZGlzYWxsb3dlZCBmb3Igc2VjdXJpdHkgcmVhc29ucywgcGxlYXNlIHVzZSAoJHt0LnNsaWNlKDIpfSk9Li4uXG5JZiAnJHt0fScgaXMgYSBkaXJlY3RpdmUgaW5wdXQsIG1ha2Ugc3VyZSB0aGUgZGlyZWN0aXZlIGlzIGltcG9ydGVkIGJ5IHRoZSBjdXJyZW50IG1vZHVsZS5gO3Rocm93IG5ldyBFcnJvcihlKX19KShvKSwhKGZ1bmN0aW9uIGcodCxlLG4sbyl7cmV0dXJuIShudWxsIT09dC5zY2hlbWFzJiYhKGVwKHQsby52YWx1ZSl8fG4gaW4gZXx8SmEobikpJiYidW5kZWZpbmVkIiE9dHlwZW9mIE5vZGUmJm51bGwhPT1Ob2RlJiZlIGluc3RhbmNlb2YgTm9kZSl9KSh0LGwsbyxlKSlyZXR1cm4gdm9pZCBucChvLGUpO25nRGV2TW9kZS5yZW5kZXJlclNldFByb3BlcnR5Kyt9aT1udWxsIT1yP3IoaSxlLnZhbHVlfHwiIixvKTppLFZpKGEpP2Euc2V0UHJvcGVydHkobCxvLGkpOkphKG8pfHwobC5zZXRQcm9wZXJ0eT9sLnNldFByb3BlcnR5KG8saSk6bFtvXT1pKX1lbHNlIDEyJmUudHlwZSYmbmdEZXZNb2RlJiYhZXAodCxlLnZhbHVlKSYmbnAobyxlKX1mdW5jdGlvbiB0cCh0LGUsbixvLGkpe2NvbnN0IGE9dFsxMV07bz0oZnVuY3Rpb24gcih0KXtyZXR1cm5gbmctcmVmbGVjdC0ke3Q9KGZ1bmN0aW9uIGUodCl7cmV0dXJuIHQucmVwbGFjZShIbCwoKC4uLnQpPT4iLSIrdFsxXS50b0xvd2VyQ2FzZSgpKSl9KSh0LnJlcGxhY2UoL1skQF0vZywiXyIpKX1gfSkobyk7Y29uc3Qgcz0oZnVuY3Rpb24gbCh0KXt0cnl7cmV0dXJuIG51bGwhPXQ/dC50b1N0cmluZygpLnNsaWNlKDAsMzApOnR9Y2F0Y2godCl7cmV0dXJuIltFUlJPUl0gRXhjZXB0aW9uIHdoaWxlIHRyeWluZyB0byBzZXJpYWxpemUgdGhlIHZhbHVlIn19KShpKTtpZigzJm4pbnVsbD09aT9WaShhKT9hLnJlbW92ZUF0dHJpYnV0ZShlLG8pOmUucmVtb3ZlQXR0cmlidXRlKG8pOlZpKGEpP2Euc2V0QXR0cmlidXRlKGUsbyxzKTplLnNldEF0dHJpYnV0ZShvLHMpO2Vsc2V7Y29uc3QgdD1JbChgYmluZGluZ3M9JHtKU09OLnN0cmluZ2lmeSh7W29dOnN9LG51bGwsMil9YCk7VmkoYSk/YS5zZXRWYWx1ZShlLHQpOmUudGV4dENvbnRlbnQ9dH19ZnVuY3Rpb24gZXAodCxlKXtjb25zdCBuPXQuc2NoZW1hcztpZihudWxsIT09bilmb3IobGV0IHQ9MDt0PG4ubGVuZ3RoO3QrKyl7Y29uc3Qgbz1uW3RdO2lmKG89PT1SbHx8bz09PUFsJiZlJiZlLmluZGV4T2YoIi0iKT4tMSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBucCh0LGUpe2NvbnNvbGUuZXJyb3IoQm4oIjMwMyIsYENhbid0IGJpbmQgdG8gJyR7dH0nIHNpbmNlIGl0IGlzbid0IGEga25vd24gcHJvcGVydHkgb2YgJyR7ZS52YWx1ZX0nLmApKX1mdW5jdGlvbiBvcCh0LGUsbixvKXtuZ0Rldk1vZGUmJkNpKHQpO2xldCBpPSExO2lmKG9hKCkpe2NvbnN0IGE9KGZ1bmN0aW9uIGEodCxlLG4pe25nRGV2TW9kZSYmQ2kodCksbmdEZXZNb2RlJiZaYShuLDE1KTtjb25zdCBvPXQuZGlyZWN0aXZlUmVnaXN0cnk7bGV0IGk9bnVsbDtpZihvKWZvcihsZXQgYT0wO2E8by5sZW5ndGg7YSsrKXtjb25zdCByPW9bYV07WWMobixyLnNlbGVjdG9ycywhMSkmJihpfHwoaT1uZ0Rldk1vZGU/bmV3IF9kOltdKSxkcihycihuLGUpLHQsci50eXBlKSxwaShyKT8obmdEZXZNb2RlJiYoWmEobiwyLGAiJHtuLnZhbHVlfSIgdGFncyBjYW5ub3QgYmUgdXNlZCBhcyBjb21wb25lbnQgaG9zdHMuIFBsZWFzZSB1c2UgYSBkaWZmZXJlbnQgdGFnIHRvIGFjdGl2YXRlIHRoZSAke1JuKHIudHlwZSl9IGNvbXBvbmVudC5gKSwyJm4uZmxhZ3MmJlFsKG4pKSxycCh0LG4pLGkudW5zaGlmdChyKSk6aS5wdXNoKHIpKX1yZXR1cm4gaX0pKHQsZSxuKSxyPW51bGw9PT1vP251bGw6eyIiOi0xfTtpZihudWxsIT09YSl7aT0hMCxscChuLHQuZGF0YS5sZW5ndGgsYS5sZW5ndGgpO2ZvcihsZXQgdD0wO3Q8YS5sZW5ndGg7dCsrKXtjb25zdCBlPWFbdF07ZS5wcm92aWRlcnNSZXNvbHZlciYmZS5wcm92aWRlcnNSZXNvbHZlcihlKX1sZXQgbz0hMSxzPSExLGw9VmQodCxlLGEubGVuZ3RoLG51bGwpO25nRGV2TW9kZSYmSm4obCxuLmRpcmVjdGl2ZVN0YXJ0LCJUTm9kZS5kaXJlY3RpdmVTdGFydCBzaG91bGQgcG9pbnQgdG8ganVzdCBhbGxvY2F0ZWQgc3BhY2UiKTtmb3IobGV0IGk9MDtpPGEubGVuZ3RoO2krKyl7Y29uc3QgYz1hW2ldO24ubWVyZ2VkQXR0cnM9UWEobi5tZXJnZWRBdHRycyxjLmhvc3RBdHRycyksY3AodCxuLGUsbCxjKSxzcChsLGMsciksbnVsbCE9PWMuY29udGVudFF1ZXJpZXMmJihuLmZsYWdzfD04KSxudWxsPT09Yy5ob3N0QmluZGluZ3MmJm51bGw9PT1jLmhvc3RBdHRycyYmMD09PWMuaG9zdFZhcnN8fChuLmZsYWdzfD0xMjgpO2NvbnN0IGQ9Yy50eXBlLnByb3RvdHlwZTshbyYmKGQubmdPbkNoYW5nZXN8fGQubmdPbkluaXR8fGQubmdEb0NoZWNrKSYmKCh0LnByZU9yZGVySG9va3N8fCh0LnByZU9yZGVySG9va3M9W10pKS5wdXNoKG4uaW5kZXgpLG89ITApLHN8fCFkLm5nT25DaGFuZ2VzJiYhZC5uZ0RvQ2hlY2t8fCgodC5wcmVPcmRlckNoZWNrSG9va3N8fCh0LnByZU9yZGVyQ2hlY2tIb29rcz1bXSkpLnB1c2gobi5pbmRleCkscz0hMCksbCsrfSEoZnVuY3Rpb24gcih0LGUpe25nRGV2TW9kZSYmQ2kodCk7Y29uc3Qgbj1lLmRpcmVjdGl2ZVN0YXJ0LG89ZS5kaXJlY3RpdmVFbmQsaT10LmRhdGEsYT1lLmF0dHJzLHI9bmdEZXZNb2RlP25ldyB2ZDpbXTtsZXQgcz1udWxsLGw9bnVsbDtmb3IobGV0IHQ9bjt0PG87dCsrKXtjb25zdCBuPWlbdF0sbz1uLmlucHV0cyxjPW51bGw9PT1hfHxWYyhlKT9udWxsOmZwKG8sYSk7ci5wdXNoKGMpLHM9UWQobyx0LHMpLGw9UWQobi5vdXRwdXRzLHQsbCl9bnVsbCE9PXMmJihzLmhhc093blByb3BlcnR5KCJjbGFzcyIpJiYoZS5mbGFnc3w9MTYpLHMuaGFzT3duUHJvcGVydHkoInN0eWxlIikmJihlLmZsYWdzfD0zMikpLGUuaW5pdGlhbElucHV0cz1yLGUuaW5wdXRzPXMsZS5vdXRwdXRzPWx9KSh0LG4pfXImJihmdW5jdGlvbiBzKHQsZSxuKXtpZihlKXtjb25zdCBvPXQubG9jYWxOYW1lcz1uZ0Rldk1vZGU/bmV3IE1kOltdO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCs9Mil7Y29uc3QgaT1uW2VbdCsxXV07aWYobnVsbD09aSl0aHJvdyBuZXcgRm4oIjMwMSIsYEV4cG9ydCBvZiBuYW1lICcke2VbdCsxXX0nIG5vdCBmb3VuZCFgKTtvLnB1c2goZVt0XSxpKX19fSkobixvLHIpfXJldHVybiBuLm1lcmdlZEF0dHJzPVFhKG4ubWVyZ2VkQXR0cnMsbi5hdHRycyksaX1mdW5jdGlvbiBpcCh0LGUsbixvLGksYSl7bmdEZXZNb2RlJiZDaSh0KTtjb25zdCByPWEuaG9zdEJpbmRpbmdzO2lmKHIpe2xldCBuPXQuaG9zdEJpbmRpbmdPcENvZGVzO251bGw9PT1uJiYobj10Lmhvc3RCaW5kaW5nT3BDb2Rlcz1bXSk7Y29uc3QgYT1+ZS5pbmRleDsoZnVuY3Rpb24gcyh0KXtsZXQgZT10Lmxlbmd0aDtmb3IoO2U+MDspe2NvbnN0IG49dFstLWVdO2lmKCJudW1iZXIiPT10eXBlb2YgbiYmbjwwKXJldHVybiBufXJldHVybiAwfSkobikhPWEmJm4ucHVzaChhKSxuLnB1c2gobyxpLHIpfX1mdW5jdGlvbiBhcCh0LGUpe251bGwhPT10Lmhvc3RCaW5kaW5ncyYmdC5ob3N0QmluZGluZ3MoMSxlKX1mdW5jdGlvbiBycCh0LGUpe25nRGV2TW9kZSYmQ2kodCksZS5mbGFnc3w9MiwodC5jb21wb25lbnRzfHwodC5jb21wb25lbnRzPW5nRGV2TW9kZT9uZXcgQ2Q6W10pKS5wdXNoKGUuaW5kZXgpfWZ1bmN0aW9uIHNwKHQsZSxuKXtpZihuKXtpZihlLmV4cG9ydEFzKWZvcihsZXQgbz0wO288ZS5leHBvcnRBcy5sZW5ndGg7bysrKW5bZS5leHBvcnRBc1tvXV09dDtwaShlKSYmKG5bIiJdPXQpfX1mdW5jdGlvbiBscCh0LGUsbil7bmdEZXZNb2RlJiZLbihuLHQuZGlyZWN0aXZlRW5kLXQuZGlyZWN0aXZlU3RhcnQsIlJlYWNoZWQgdGhlIG1heCBudW1iZXIgb2YgZGlyZWN0aXZlcyIpLHQuZmxhZ3N8PTEsdC5kaXJlY3RpdmVTdGFydD1lLHQuZGlyZWN0aXZlRW5kPWUrbix0LnByb3ZpZGVySW5kZXhlcz1lfWZ1bmN0aW9uIGNwKHQsZSxuLG8saSl7bmdEZXZNb2RlJiZubyhvLG9pLCJNdXN0IGJlIGluIEV4cGFuZG8gc2VjdGlvbiIpLHQuZGF0YVtvXT1pO2NvbnN0IGE9aS5mYWN0b3J5fHwoaS5mYWN0b3J5PXdpKGkudHlwZSwhMCkpLHI9bmV3IFlhKGEscGkoaSksbnVsbCk7dC5ibHVlcHJpbnRbb109cixuW29dPXIsaXAodCxlLDAsbyxWZCh0LG4saS5ob3N0VmFycyxLYyksaSl9ZnVuY3Rpb24gZHAodCxlLG4pe2NvbnN0IG89R2koZSx0KSxpPVhkKG4pLGE9dFsxMF0scj1DcCh0LEZkKHQsaSxudWxsLG4ub25QdXNoPzY0OjE2LG8sZSxhLGEuY3JlYXRlUmVuZGVyZXIobyxuKSxudWxsLG51bGwpKTt0W2UuaW5kZXhdPXJ9ZnVuY3Rpb24gcHAodCxlLG4sbyxpLGEpe25nRGV2TW9kZSYmKFFuKG8sS2MsIkluY29taW5nIHZhbHVlIHNob3VsZCBuZXZlciBiZSBOT19DSEFOR0UuIiksKGZ1bmN0aW9uIHIodCl7aWYodC50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoIm9uIikpe2NvbnN0IGU9YEJpbmRpbmcgdG8gZXZlbnQgYXR0cmlidXRlICcke3R9JyBpcyBkaXNhbGxvd2VkIGZvciBzZWN1cml0eSByZWFzb25zLCBwbGVhc2UgdXNlICgke3Quc2xpY2UoMil9KT0uLi5gO3Rocm93IG5ldyBFcnJvcihlKX19KShuKSxaYSh0LDIsYEF0dGVtcHRlZCB0byBzZXQgYXR0cmlidXRlIFxgJHtufVxgIG9uIGEgY29udGFpbmVyIG5vZGUuIEhvc3QgYmluZGluZ3MgYXJlIG5vdCB2YWxpZCBvbiBuZy1jb250YWluZXIgb3IgbmctdGVtcGxhdGUuYCkpO2NvbnN0IHM9R2kodCxlKTttcChlWzExXSxzLGEsdC52YWx1ZSxuLG8saSl9ZnVuY3Rpb24gbXAodCxlLG4sbyxpLGEscil7aWYobnVsbD09YSluZ0Rldk1vZGUmJm5nRGV2TW9kZS5yZW5kZXJlclJlbW92ZUF0dHJpYnV0ZSsrLFZpKHQpP3QucmVtb3ZlQXR0cmlidXRlKGUsaSxuKTplLnJlbW92ZUF0dHJpYnV0ZShpKTtlbHNle25nRGV2TW9kZSYmbmdEZXZNb2RlLnJlbmRlcmVyU2V0QXR0cmlidXRlKys7Y29uc3Qgcz1udWxsPT1yP1ZuKGEpOnIoYSxvfHwiIixpKTtWaSh0KT90LnNldEF0dHJpYnV0ZShlLGkscyxuKTpuP2Uuc2V0QXR0cmlidXRlTlMobixpLHMpOmUuc2V0QXR0cmlidXRlKGkscyl9fWZ1bmN0aW9uIHVwKHQsZSxuLG8saSxhKXtjb25zdCByPWFbZV07aWYobnVsbCE9PXIpe2NvbnN0IGU9by5zZXRJbnB1dDtmb3IobGV0IGE9MDthPHIubGVuZ3RoOyl7Y29uc3Qgcz1yW2ErK10sbD1yW2ErK10sYz1yW2ErK107bnVsbCE9PWU/by5zZXRJbnB1dChuLGMscyxsKTpuW2xdPWMsbmdEZXZNb2RlJiZ0cCh0LEdpKGksdCksaS50eXBlLGwsYyl9fX1mdW5jdGlvbiBmcCh0LGUpe2xldCBuPW51bGwsbz0wO2Zvcig7bzxlLmxlbmd0aDspe2NvbnN0IGk9ZVtvXTtpZigwIT09aSlpZig1IT09aSl7aWYoIm51bWJlciI9PXR5cGVvZiBpKWJyZWFrO3QuaGFzT3duUHJvcGVydHkoaSkmJihudWxsPT09biYmKG49W10pLG4ucHVzaChpLHRbaV0sZVtvKzFdKSksbys9Mn1lbHNlIG8rPTI7ZWxzZSBvKz00fXJldHVybiBufWNvbnN0IGdwPSgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmQW8oKSYmemwoIkxDb250YWluZXIiKTtmdW5jdGlvbiBocCh0LGUsbixvKXtuZ0Rldk1vZGUmJl9pKGUpLG5nRGV2TW9kZSYmIVZpKGVbMTFdKSYmYW8obik7Y29uc3QgaT1uZXcobmdEZXZNb2RlP2dwOkFycmF5KSh0LCEwLCExLGUsbnVsbCwwLG8sbixudWxsLG51bGwpO3JldHVybiBuZ0Rldk1vZGUmJlhuKGkubGVuZ3RoLGFpLCJTaG91bGQgYWxsb2NhdGUgY29ycmVjdCBudW1iZXIgb2Ygc2xvdHMgZm9yIExDb250YWluZXIgaGVhZGVyLiIpLG5nRGV2TW9kZSYmKGZ1bmN0aW9uIGEodCl7c2QodCxuZXcgSWQodCkpfSkoaSksaX1mdW5jdGlvbiBicCh0LGUpe25nRGV2TW9kZSYmWG4oSmkodCksITEsIlNob3VsZCBiZSBydW4gaW4gdXBkYXRlIG1vZGUiKTtjb25zdCBuPVppKGUsdCk7aWYoUWkobikpe2NvbnN0IHQ9blsxXTs4MCZuWzJdP1VkKHQsbix0LnRlbXBsYXRlLG5bOF0pOm5bNV0+MCYmeXAobil9fWZ1bmN0aW9uIHlwKHQpe2ZvcihsZXQgZT1hYyh0KTtudWxsIT09ZTtlPXJjKGUpKWZvcihsZXQgdD1haTt0PGUubGVuZ3RoO3QrKyl7Y29uc3Qgbj1lW3RdO2lmKDEwMjQmblsyXSl7Y29uc3QgdD1uWzFdO25nRGV2TW9kZSYmb28odCwiVFZpZXcgbXVzdCBiZSBhbGxvY2F0ZWQiKSxVZCh0LG4sdC50ZW1wbGF0ZSxuWzhdKX1lbHNlIG5bNV0+MCYmeXAobil9Y29uc3QgZT10WzFdLmNvbXBvbmVudHM7aWYobnVsbCE9PWUpZm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspe2NvbnN0IG89WmkoZVtuXSx0KTtRaShvKSYmb1s1XT4wJiZ5cChvKX19ZnVuY3Rpb24gX3AodCxlKXtuZ0Rldk1vZGUmJlhuKEppKHQpLCEwLCJTaG91bGQgYmUgcnVuIGluIGNyZWF0aW9uIG1vZGUiKTtjb25zdCBuPVppKGUsdCksbz1uWzFdOyEoZnVuY3Rpb24gaSh0LGUpe2ZvcihsZXQgbj1lLmxlbmd0aDtuPHQuYmx1ZXByaW50Lmxlbmd0aDtuKyspZS5wdXNoKHQuYmx1ZXByaW50W25dKX0pKG8sbiksamQobyxuLG5bOF0pfWZ1bmN0aW9uIENwKHQsZSl7cmV0dXJuIHRbMTNdP3RbMTRdWzRdPWU6dFsxM109ZSx0WzE0XT1lLGV9ZnVuY3Rpb24gTXAodCl7Zm9yKDt0Oyl7dFsyXXw9NjQ7Y29uc3QgZT1vYyh0KTtpZigwIT0oNTEyJnRbMl0pJiYhZSlyZXR1cm4gdDt0PWV9cmV0dXJuIG51bGx9ZnVuY3Rpb24gdnAodCl7Zm9yKGxldCBlPTA7ZTx0LmNvbXBvbmVudHMubGVuZ3RoO2UrKyl7Y29uc3Qgbj10LmNvbXBvbmVudHNbZV0sbz1LaShuKSxpPW9bMV07V2QoaSxvLGkudGVtcGxhdGUsbil9fWZ1bmN0aW9uIHhwKHQsZSxuKXtjb25zdCBvPWVbMTBdO28uYmVnaW4mJm8uYmVnaW4oKTt0cnl7VWQodCxlLHQudGVtcGxhdGUsbil9Y2F0Y2godCl7dGhyb3cgQXAoZSx0KSx0fWZpbmFsbHl7by5lbmQmJm8uZW5kKCl9fWZ1bmN0aW9uIE9wKHQpe3ZwKHRbOF0pfWZ1bmN0aW9uIFBwKHQsZSxuKXtuZ0Rldk1vZGUmJm9vKGUsIlZpZXcgcXVlcmllcyBmdW5jdGlvbiB0byBleGVjdXRlIG11c3QgYmUgZGVmaW5lZC4iKSxQYSgwKSxlKHQsbil9ZnVuY3Rpb24gd3AodCxlLG4sbywuLi5pKXtpZihudWxsPT09dFtvXSYmKG51bGw9PWUuaW5wdXRzfHwhZS5pbnB1dHNbbl0pKXsoZS5wcm9wZXJ0eUJpbmRpbmdzfHwoZS5wcm9wZXJ0eUJpbmRpbmdzPVtdKSkucHVzaChvKTtsZXQgYT1uO2kubGVuZ3RoPjAmJihhKz1LbCtpLmpvaW4oS2wpKSx0W29dPWF9fWNvbnN0IGtwPXpkO2Z1bmN0aW9uIFNwKHQpe3JldHVybiB0WzddfHwodFs3XT1uZ0Rldk1vZGU/bmV3IHhkOltdKX1mdW5jdGlvbiBEcCh0KXtyZXR1cm4gdC5jbGVhbnVwfHwodC5jbGVhbnVwPW5nRGV2TW9kZT9uZXcgT2Q6W10pfWZ1bmN0aW9uIEVwKHQsZSxuKXtyZXR1cm4obnVsbD09PXR8fHBpKHQpKSYmKG49KGZ1bmN0aW9uIG8odCl7Zm9yKDtBcnJheS5pc0FycmF5KHQpOyl7aWYoIm9iamVjdCI9PXR5cGVvZiB0WzFdKXJldHVybiB0O3Q9dFswXX1yZXR1cm4gbnVsbH0pKG5bZS5pbmRleF0pKSxuWzExXX1mdW5jdGlvbiBBcCh0LGUpe2NvbnN0IG49dFs5XSxvPW4/bi5nZXQoRWwsbnVsbCk6bnVsbDtvJiZvLmhhbmRsZUVycm9yKGUpfWZ1bmN0aW9uIFJwKHQsZSxuLG8saSl7Zm9yKGxldCBhPTA7YTxuLmxlbmd0aDspe2NvbnN0IHI9blthKytdLHM9blthKytdLGw9ZVtyXTtuZ0Rldk1vZGUmJnJvKGUscik7Y29uc3QgYz10LmRhdGFbcl07bnVsbCE9PWMuc2V0SW5wdXQ/Yy5zZXRJbnB1dChsLGksbyxzKTpsW3NdPWl9fWZ1bmN0aW9uIFRwKHQsZSxuKXtuZ0Rldk1vZGUmJlpuKG4sIlZhbHVlIHNob3VsZCBiZSBhIHN0cmluZyIpLG5nRGV2TW9kZSYmUW4obixLYywidmFsdWUgc2hvdWxkIG5vdCBiZSBOT19DSEFOR0UiKSxuZ0Rldk1vZGUmJnJvKHQsZSk7Y29uc3Qgbz1XaShlLHQpO25nRGV2TW9kZSYmb28obywibmF0aXZlIGVsZW1lbnQgc2hvdWxkIGV4aXN0IiksZGModFsxMV0sbyxuKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovZnVuY3Rpb24gTnAodCxlLG4pe25nRGV2TW9kZSYmQ2koYWEoKSwiRXhwZWN0aW5nIHRvIGJlIGNhbGxlZCBpbiBmaXJzdCB0ZW1wbGF0ZSBwYXNzIG9ubHkiKTtsZXQgbz1uP3Quc3R5bGVzOm51bGwsaT1uP3QuY2xhc3NlczpudWxsLGE9MDtpZihudWxsIT09ZSlmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyl7Y29uc3Qgbj1lW3RdOyJudW1iZXIiPT10eXBlb2Ygbj9hPW46MT09YT9pPVRuKGksbik6Mj09YSYmKG89VG4obyxuKyI6ICIrZVsrK3RdKyI7IikpfW4/dC5zdHlsZXM9bzp0LnN0eWxlc1dpdGhvdXRIb3N0PW8sbj90LmNsYXNzZXM9aTp0LmNsYXNzZXNXaXRob3V0SG9zdD1pfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IElwPW5ldyBOcigiSU5KRUNUT1IiLC0xKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY2xhc3MgenB7Z2V0KHQsZT1ycyl7aWYoZT09PXJzKXtjb25zdCBlPW5ldyBFcnJvcihgTnVsbEluamVjdG9yRXJyb3I6IE5vIHByb3ZpZGVyIGZvciAke1JuKHQpfSFgKTt0aHJvdyBlLm5hbWU9Ik51bGxJbmplY3RvckVycm9yIixlfXJldHVybiBlfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY29uc3QgSHA9bmV3IE5yKCJTZXQgSW5qZWN0b3Igc2NvcGUuIiksRnA9e30sTHA9e30sQnA9W107Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2xldCBWcDtmdW5jdGlvbiBqcCgpe3JldHVybiB2b2lkIDA9PT1WcCYmKFZwPW5ldyB6cCksVnB9ZnVuY3Rpb24gVXAodCxlPW51bGwsbj1udWxsLG8pe3JldHVybiBuZXcgV3AodCxuLGV8fGpwKCksbyl9Y2xhc3MgV3B7Y29uc3RydWN0b3IodCxlLG4sbz1udWxsKXt0aGlzLnBhcmVudD1uLHRoaXMucmVjb3Jkcz1uZXcgTWFwLHRoaXMuaW5qZWN0b3JEZWZUeXBlcz1uZXcgU2V0LHRoaXMub25EZXN0cm95PW5ldyBTZXQsdGhpcy5fZGVzdHJveWVkPSExO2NvbnN0IGk9W107ZSYmWXIoZSwobj0+dGhpcy5wcm9jZXNzUHJvdmlkZXIobix0LGUpKSksWXIoW3RdLCh0PT50aGlzLnByb2Nlc3NJbmplY3RvclR5cGUodCxbXSxpKSkpLHRoaXMucmVjb3Jkcy5zZXQoSXAscXAodm9pZCAwLHRoaXMpKTtjb25zdCBhPXRoaXMucmVjb3Jkcy5nZXQoSHApO3RoaXMuc2NvcGU9bnVsbCE9YT9hLnZhbHVlOm51bGwsdGhpcy5zb3VyY2U9b3x8KCJvYmplY3QiPT10eXBlb2YgdD9udWxsOlJuKHQpKX1nZXQgZGVzdHJveWVkKCl7cmV0dXJuIHRoaXMuX2Rlc3Ryb3llZH1kZXN0cm95KCl7dGhpcy5hc3NlcnROb3REZXN0cm95ZWQoKSx0aGlzLl9kZXN0cm95ZWQ9ITA7dHJ5e3RoaXMub25EZXN0cm95LmZvckVhY2goKHQ9PnQubmdPbkRlc3Ryb3koKSkpfWZpbmFsbHl7dGhpcy5yZWNvcmRzLmNsZWFyKCksdGhpcy5vbkRlc3Ryb3kuY2xlYXIoKSx0aGlzLmluamVjdG9yRGVmVHlwZXMuY2xlYXIoKX19Z2V0KHQsZT1ycyxuPXlvLkRlZmF1bHQpe3RoaXMuYXNzZXJ0Tm90RGVzdHJveWVkKCk7Y29uc3Qgbz1wcyh0aGlzKTt0cnl7aWYoIShuJnlvLlNraXBTZWxmKSl7bGV0IGU9dGhpcy5yZWNvcmRzLmdldCh0KTtpZih2b2lkIDA9PT1lKXtjb25zdCBuPShmdW5jdGlvbiBpKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0fHwib2JqZWN0Ij09dHlwZW9mIHQmJnQgaW5zdGFuY2VvZiBOcn0pKHQpJiZwbyh0KTtlPW4mJnRoaXMuaW5qZWN0YWJsZURlZkluU2NvcGUobik/cXAoR3AodCksRnApOm51bGwsdGhpcy5yZWNvcmRzLnNldCh0LGUpfWlmKG51bGwhPWUpcmV0dXJuIHRoaXMuaHlkcmF0ZSh0LGUpfXJldHVybihuJnlvLlNlbGY/anAoKTp0aGlzLnBhcmVudCkuZ2V0KHQsZT1uJnlvLk9wdGlvbmFsJiZlPT09cnM/bnVsbDplKX1jYXRjaChlKXtpZigiTnVsbEluamVjdG9yRXJyb3IiPT09ZS5uYW1lKXtpZigoZS5uZ1RlbXBUb2tlblBhdGg9ZS5uZ1RlbXBUb2tlblBhdGh8fFtdKS51bnNoaWZ0KFJuKHQpKSxvKXRocm93IGU7cmV0dXJuKGZ1bmN0aW9uIGEodCxlLG4sbyl7Y29uc3QgaT10Lm5nVGVtcFRva2VuUGF0aDt0aHJvdyBlW2xzXSYmaS51bnNoaWZ0KGVbbHNdKSx0Lm1lc3NhZ2U9KGZ1bmN0aW9uIGEodCxlLG4sbz1udWxsKXt0PXQmJiJcbiI9PT10LmNoYXJBdCgwKSYmIsm1Ij09dC5jaGFyQXQoMSk/dC5zdWJzdHIoMik6dDtsZXQgaT1SbihlKTtpZihBcnJheS5pc0FycmF5KGUpKWk9ZS5tYXAoUm4pLmpvaW4oIiAtPiAiKTtlbHNlIGlmKCJvYmplY3QiPT10eXBlb2YgZSl7bGV0IHQ9W107Zm9yKGxldCBuIGluIGUpaWYoZS5oYXNPd25Qcm9wZXJ0eShuKSl7bGV0IG89ZVtuXTt0LnB1c2gobisiOiIrKCJzdHJpbmciPT10eXBlb2Ygbz9KU09OLnN0cmluZ2lmeShvKTpSbihvKSkpfWk9YHske3Quam9pbigiLCAiKX19YH1yZXR1cm5gJHtufSR7bz8iKCIrbysiKSI6IiJ9WyR7aX1dOiAke3QucmVwbGFjZShzcywiXG4gICIpfWB9KSgiXG4iK3QubWVzc2FnZSxpLG4sbyksdC5uZ1Rva2VuUGF0aD1pLHQubmdUZW1wVG9rZW5QYXRoPW51bGwsdH0pKGUsdCwiUjNJbmplY3RvckVycm9yIix0aGlzLnNvdXJjZSl9dGhyb3cgZX1maW5hbGx5e3BzKG8pfX1fcmVzb2x2ZUluamVjdG9yRGVmVHlwZXMoKXt0aGlzLmluamVjdG9yRGVmVHlwZXMuZm9yRWFjaCgodD0+dGhpcy5nZXQodCkpKX10b1N0cmluZygpe2NvbnN0IHQ9W107cmV0dXJuIHRoaXMucmVjb3Jkcy5mb3JFYWNoKCgoZSxuKT0+dC5wdXNoKFJuKG4pKSkpLGBSM0luamVjdG9yWyR7dC5qb2luKCIsICIpfV1gfWFzc2VydE5vdERlc3Ryb3llZCgpe2lmKHRoaXMuX2Rlc3Ryb3llZCl0aHJvdyBuZXcgRXJyb3IoIkluamVjdG9yIGhhcyBhbHJlYWR5IGJlZW4gZGVzdHJveWVkLiIpfXByb2Nlc3NJbmplY3RvclR5cGUodCxlLG4pe2lmKCEodD16bih0KSkpcmV0dXJuITE7bGV0IG89dW8odCk7Y29uc3QgaT1udWxsPT1vJiZ0Lm5nTW9kdWxlfHx2b2lkIDAsYT12b2lkIDA9PT1pP3Q6aTtuZ0Rldk1vZGUmJi0xIT09ZS5pbmRleE9mKGEpJiZVbihSbihhKSxlLm1hcChSbikpO2NvbnN0IHI9LTEhPT1uLmluZGV4T2YoYSk7aWYodm9pZCAwIT09aSYmKG89dW8oaSkpLG51bGw9PW8pcmV0dXJuITE7aWYobnVsbCE9by5pbXBvcnRzJiYhcil7bGV0IHQ7bmdEZXZNb2RlJiZlLnB1c2goYSksbi5wdXNoKGEpO3RyeXtZcihvLmltcG9ydHMsKG89Pnt0aGlzLnByb2Nlc3NJbmplY3RvclR5cGUobyxlLG4pJiYodm9pZCAwPT09dCYmKHQ9W10pLHQucHVzaChvKSl9KSl9ZmluYWxseXtuZ0Rldk1vZGUmJmUucG9wKCl9aWYodm9pZCAwIT09dClmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKyl7Y29uc3R7bmdNb2R1bGU6bixwcm92aWRlcnM6b309dFtlXTtZcihvLCh0PT50aGlzLnByb2Nlc3NQcm92aWRlcih0LG4sb3x8QnApKSl9fXRoaXMuaW5qZWN0b3JEZWZUeXBlcy5hZGQoYSk7Y29uc3Qgcz13aShhKXx8KCgpPT5uZXcgYSk7dGhpcy5yZWNvcmRzLnNldChhLHFwKHMsRnApKTtjb25zdCBsPW8ucHJvdmlkZXJzO2lmKG51bGwhPWwmJiFyKXtjb25zdCBlPXQ7WXIobCwodD0+dGhpcy5wcm9jZXNzUHJvdmlkZXIodCxlLGwpKSl9cmV0dXJuIHZvaWQgMCE9PWkmJnZvaWQgMCE9PXQucHJvdmlkZXJzfXByb2Nlc3NQcm92aWRlcih0LGUsbil7bGV0IG89WHAodD16bih0KSk/dDp6bih0JiZ0LnByb3ZpZGUpO2NvbnN0IGk9KGZ1bmN0aW9uIGEodCxlLG4pe3JldHVybiBacCh0KT9xcCh2b2lkIDAsdC51c2VWYWx1ZSk6cXAoWXAodCxlLG4pLEZwKX0pKHQsZSxuKTtpZihYcCh0KXx8ITAhPT10Lm11bHRpKXtjb25zdCB0PXRoaXMucmVjb3Jkcy5nZXQobyk7bmdEZXZNb2RlJiZ0JiZ2b2lkIDAhPT10Lm11bHRpJiZXbigpfWVsc2V7bGV0IGU9dGhpcy5yZWNvcmRzLmdldChvKTtlP25nRGV2TW9kZSYmdm9pZCAwPT09ZS5tdWx0aSYmV24oKTooZT1xcCh2b2lkIDAsRnAsITApLGUuZmFjdG9yeT0oKT0+aHMoZS5tdWx0aSksdGhpcy5yZWNvcmRzLnNldChvLGUpKSxvPXQsZS5tdWx0aS5wdXNoKHQpfXRoaXMucmVjb3Jkcy5zZXQobyxpKX1oeWRyYXRlKHQsZSl7cmV0dXJuIG5nRGV2TW9kZSYmZS52YWx1ZT09PUxwP1VuKFJuKHQpKTplLnZhbHVlPT09RnAmJihlLnZhbHVlPUxwLGUudmFsdWU9ZS5mYWN0b3J5KCkpLCJvYmplY3QiPT10eXBlb2YgZS52YWx1ZSYmZS52YWx1ZSYmKGZ1bmN0aW9uIG4odCl7cmV0dXJuIG51bGwhPT10JiYib2JqZWN0Ij09dHlwZW9mIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0Lm5nT25EZXN0cm95fSkoZS52YWx1ZSkmJnRoaXMub25EZXN0cm95LmFkZChlLnZhbHVlKSxlLnZhbHVlfWluamVjdGFibGVEZWZJblNjb3BlKHQpe3JldHVybiEhdC5wcm92aWRlZEluJiYoInN0cmluZyI9PXR5cGVvZiB0LnByb3ZpZGVkSW4/ImFueSI9PT10LnByb3ZpZGVkSW58fHQucHJvdmlkZWRJbj09PXRoaXMuc2NvcGU6dGhpcy5pbmplY3RvckRlZlR5cGVzLmhhcyh0LnByb3ZpZGVkSW4pKX19ZnVuY3Rpb24gR3AodCl7Y29uc3QgZT1wbyh0KSxuPW51bGwhPT1lP2UuZmFjdG9yeTp3aSh0KTtpZihudWxsIT09bilyZXR1cm4gbjtpZih0IGluc3RhbmNlb2YgTnIpdGhyb3cgbmV3IEVycm9yKGBUb2tlbiAke1JuKHQpfSBpcyBtaXNzaW5nIGEgybVwcm92IGRlZmluaXRpb24uYCk7aWYodCBpbnN0YW5jZW9mIEZ1bmN0aW9uKXJldHVybihmdW5jdGlvbiBvKHQpe2NvbnN0IGU9dC5sZW5ndGg7aWYoZT4wKXtjb25zdCBuPVhyKGUsIj8iKTt0aHJvdyBuZXcgRXJyb3IoYENhbid0IHJlc29sdmUgYWxsIHBhcmFtZXRlcnMgZm9yICR7Um4odCl9OiAoJHtuLmpvaW4oIiwgIil9KS5gKX1jb25zdCBuPShmdW5jdGlvbiBvKHQpe2NvbnN0IGU9dCYmKHRbZm9dfHx0W2hvXSk7aWYoZSl7Y29uc3Qgbj0oZnVuY3Rpb24gbih0KXtpZih0Lmhhc093blByb3BlcnR5KCJuYW1lIikpcmV0dXJuIHQubmFtZTtjb25zdCBlPSgiIit0KS5tYXRjaCgvXmZ1bmN0aW9uXHMqKFteXHMoXSspLyk7cmV0dXJuIG51bGw9PT1lPyIiOmVbMV19KSh0KTtyZXR1cm4gY29uc29sZS53YXJuKGBERVBSRUNBVEVEOiBESSBpcyBpbnN0YW50aWF0aW5nIGEgdG9rZW4gIiR7bn0iIHRoYXQgaW5oZXJpdHMgaXRzIEBJbmplY3RhYmxlIGRlY29yYXRvciBidXQgZG9lcyBub3QgcHJvdmlkZSBvbmUgaXRzZWxmLlxuVGhpcyB3aWxsIGJlY29tZSBhbiBlcnJvciBpbiBhIGZ1dHVyZSB2ZXJzaW9uIG9mIEFuZ3VsYXIuIFBsZWFzZSBhZGQgQEluamVjdGFibGUoKSB0byB0aGUgIiR7bn0iIGNsYXNzLmApLGV9cmV0dXJuIG51bGx9KSh0KTtyZXR1cm4gbnVsbCE9PW4/KCk9Pm4uZmFjdG9yeSh0KTooKT0+bmV3IHR9KSh0KTt0aHJvdyBuZXcgRXJyb3IoInVucmVhY2hhYmxlIil9ZnVuY3Rpb24gWXAodCxlLG4pe2xldCBvO2lmKFhwKHQpKXtjb25zdCBlPXpuKHQpO3JldHVybiB3aShlKXx8R3AoZSl9aWYoWnAodCkpbz0oKT0+em4odC51c2VWYWx1ZSk7ZWxzZSBpZigoZnVuY3Rpb24gaSh0KXtyZXR1cm4hKCF0fHwhdC51c2VGYWN0b3J5KX0pKHQpKW89KCk9PnQudXNlRmFjdG9yeSguLi5ocyh0LmRlcHN8fFtdKSk7ZWxzZSBpZigoZnVuY3Rpb24gYSh0KXtyZXR1cm4hKCF0fHwhdC51c2VFeGlzdGluZyl9KSh0KSlvPSgpPT51cyh6bih0LnVzZUV4aXN0aW5nKSk7ZWxzZXtjb25zdCBpPXpuKHQmJih0LnVzZUNsYXNzfHx0LnByb3ZpZGUpKTtpZihuZ0Rldk1vZGUmJiFpJiYoZnVuY3Rpb24gcih0LGUsbil7bGV0IG89IiI7dGhyb3cgdCYmZSYmKG89YCAtIG9ubHkgaW5zdGFuY2VzIG9mIFByb3ZpZGVyIGFuZCBUeXBlIGFyZSBhbGxvd2VkLCBnb3Q6IFske2UubWFwKCh0PT50PT1uPyI/IituKyI/IjoiLi4uIikpLmpvaW4oIiwgIil9XWApLG5ldyBFcnJvcihgSW52YWxpZCBwcm92aWRlciBmb3IgdGhlIE5nTW9kdWxlICcke1JuKHQpfSdgK28pfSkoZSxuLHQpLCEoZnVuY3Rpb24gcyh0KXtyZXR1cm4hIXQuZGVwc30pKHQpKXJldHVybiB3aShpKXx8R3AoaSk7bz0oKT0+bmV3IGkoLi4uaHModC5kZXBzKSl9cmV0dXJuIG99ZnVuY3Rpb24gcXAodCxlLG49ITEpe3JldHVybntmYWN0b3J5OnQsdmFsdWU6ZSxtdWx0aTpuP1tdOnZvaWQgMH19ZnVuY3Rpb24gWnAodCl7cmV0dXJuIG51bGwhPT10JiYib2JqZWN0Ij09dHlwZW9mIHQmJmNzIGluIHR9ZnVuY3Rpb24gWHAodCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHR9Y29uc3QgS3A9ZnVuY3Rpb24gSnAodCxlLG4pe3JldHVybihmdW5jdGlvbiBvKHQsZT1udWxsLG49bnVsbCxpKXtjb25zdCBhPVVwKHQsZSxuLGkpO3JldHVybiBhLl9yZXNvbHZlSW5qZWN0b3JEZWZUeXBlcygpLGF9KSh7bmFtZTpufSxlLHQsbil9O2NsYXNzIFFwe3N0YXRpYyBjcmVhdGUodCxlKXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT9LcCh0LGUsIiIpOktwKHQucHJvdmlkZXJzLHQucGFyZW50LHQubmFtZXx8IiIpfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmZ1bmN0aW9uICRwKHQpe2NtKHQpO2NvbnN0IGU9YW0odCwhMSk7cmV0dXJuIG51bGw9PT1lP251bGw6KHZvaWQgMD09PWUuY29tcG9uZW50JiYoZS5jb21wb25lbnQ9KGZ1bmN0aW9uIG4odCxlKXtjb25zdCBuPWVbMV0uZGF0YVt0XTtyZXR1cm4gMiZuLmZsYWdzP2Vbbi5kaXJlY3RpdmVTdGFydF06bnVsbH0pKGUubm9kZUluZGV4LGUubFZpZXcpKSxlLmNvbXBvbmVudCl9ZnVuY3Rpb24gdG0odCl7Y20odCk7Y29uc3QgZT1hbSh0LCExKTtyZXR1cm4gbnVsbD09PWU/bnVsbDplLmxWaWV3WzhdfWZ1bmN0aW9uIGVtKHQpe2NvbnN0IGU9YW0odCwhMSk7aWYobnVsbD09PWUpcmV0dXJuIG51bGw7bGV0IG4sbz1lLmxWaWV3O2ZvcihuZ0Rldk1vZGUmJl9pKG8pOzI9PT1vWzFdLnR5cGUmJihuPW9jKG8pKTspbz1uO3JldHVybiA1MTImb1syXT9udWxsOm9bOF19ZnVuY3Rpb24gbm0odCl7cmV0dXJuWy4uLmljKHQpLmNvbXBvbmVudHNdfWZ1bmN0aW9uIG9tKHQpe2NvbnN0IGU9YW0odCwhMSk7cmV0dXJuIG51bGw9PT1lP1FwLk5VTEw6bmV3IE1yKGUubFZpZXdbMV0uZGF0YVtlLm5vZGVJbmRleF0sZS5sVmlldyl9ZnVuY3Rpb24gaW0odCl7Y29uc3QgZT1hbSh0KTtyZXR1cm4gdm9pZCAwPT09ZS5kaXJlY3RpdmVzJiYoZS5kaXJlY3RpdmVzPUdsKGUubm9kZUluZGV4LGUubFZpZXcsITEpKSxudWxsPT09ZS5kaXJlY3RpdmVzP1tdOlsuLi5lLmRpcmVjdGl2ZXNdfWZ1bmN0aW9uIGFtKHQsZT0hMCl7Y29uc3Qgbj1GbCh0KTtpZighbiYmZSl0aHJvdyBuZXcgRXJyb3IobmdEZXZNb2RlP2BVbmFibGUgdG8gZmluZCBjb250ZXh0IGFzc29jaWF0ZWQgd2l0aCAke2puKHQpfWA6IkludmFsaWQgbmcgdGFyZ2V0Iik7cmV0dXJuIG59ZnVuY3Rpb24gcm0odCl7cmV0dXJuIEZsKHQpLm5hdGl2ZX1mdW5jdGlvbiBzbSh0KXtjbSh0KTtjb25zdCBlPWFtKHQsITEpO2lmKG51bGw9PT1lKXJldHVybltdO2NvbnN0IG49ZS5sVmlldyxvPW5bN10saT1uWzFdLmNsZWFudXAsYT1bXTtpZihpJiZvKWZvcihsZXQgZT0wO2U8aS5sZW5ndGg7KXtjb25zdCByPWlbZSsrXSxzPWlbZSsrXTtpZigic3RyaW5nIj09dHlwZW9mIHIpe2NvbnN0IGw9cixjPVVpKG5bc10pLGQ9b1tpW2UrK11dLHA9aVtlKytdLG09ImJvb2xlYW4iPT10eXBlb2YgcHx8cD49MD8iZG9tIjoib3V0cHV0Iix1PSJib29sZWFuIj09dHlwZW9mIHAmJnA7dD09YyYmYS5wdXNoKHtlbGVtZW50OnQsbmFtZTpsLGNhbGxiYWNrOmQsdXNlQ2FwdHVyZTp1LHR5cGU6bX0pfX1yZXR1cm4gYS5zb3J0KGxtKSxhfWZ1bmN0aW9uIGxtKHQsZSl7cmV0dXJuIHQubmFtZT09ZS5uYW1lPzA6dC5uYW1lPGUubmFtZT8tMToxfWZ1bmN0aW9uIGNtKHQpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgRWxlbWVudCYmISh0IGluc3RhbmNlb2YgRWxlbWVudCkpdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RpbmcgaW5zdGFuY2Ugb2YgRE9NIEVsZW1lbnQiKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovZnVuY3Rpb24gZG0odCl7KGZ1bmN0aW9uIGUodCl7bmdEZXZNb2RlJiZvbyh0LCJjb21wb25lbnQiKTtjb25zdCBlPU1wKEJsKHQpKTtuZ0Rldk1vZGUmJm9vKGVbOF0sInJvb3RDb250ZXh0IHNob3VsZCBiZSBkZWZpbmVkIiksKGZ1bmN0aW9uIG4odCxlKXtpZigwPT09dC5mbGFncyYmdC5jbGVhbj09emQpe2xldCBuO3QuZmxhZ3N8PWUsdC5jbGVhbj1uZXcgUHJvbWlzZSgodD0+bj10KSksdC5zY2hlZHVsZXIoKCgpPT57aWYoMSZ0LmZsYWdzJiYodC5mbGFncyY9LTIsdnAodCkpLDImdC5mbGFncyl7dC5mbGFncyY9LTM7Y29uc3QgZT10LnBsYXllckhhbmRsZXI7ZSYmZS5mbHVzaFBsYXllcnMoKX10LmNsZWFuPXpkLG4obnVsbCl9KSl9fSkoZVs4XSwxKX0pKHQpLG5tKHQpLmZvckVhY2goKHQ9PihmdW5jdGlvbiBlKHQpe2NvbnN0IGU9QmwodCk7eHAoZVsxXSxlLHQpfSkodCkpKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovUXAuVEhST1dfSUZfTk9UX0ZPVU5EPXJzLFFwLk5VTEw9bmV3IHpwLFFwLsm1cHJvdj1sbyh7dG9rZW46UXAscHJvdmlkZWRJbjoiYW55IixmYWN0b3J5OigpPT51cyhJcCl9KSxRcC5fX05HX0VMRU1FTlRfSURfXz0tMTtsZXQgcG09ITE7ZnVuY3Rpb24gbW0odCxlKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIENPTVBJTEVEfHwhQ09NUElMRUQpe2NvbnN0IG49RW87aWYobmdEZXZNb2RlJiZvbyhlLCJmdW5jdGlvbiBub3QgZGVmaW5lZCIpLG4pe2xldCBvPW4ubmc7b3x8KG89bi5uZz17fSksb1t0XT1lfX19ZnVuY3Rpb24gdW0odCxlKXtjb25zdCBuPUtpKHQpO25nRGV2TW9kZSYmb28obiwiTFZpZXcgaXMgcmVxdWlyZWQiKTtjb25zdCBvPW5bMV0saT1zYSgpO25nRGV2TW9kZSYmb28oaSwiVE5vZGUgaXMgcmVxdWlyZWQiKSxMYShvLGkpfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiBmbSh0KXtyZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKHQucHJvdG90eXBlKS5jb25zdHJ1Y3Rvcn1mdW5jdGlvbiBnbSh0KXtsZXQgZT1mbSh0LnR5cGUpLG49ITA7Y29uc3Qgbz1bdF07Zm9yKDtlOyl7bGV0IGk7aWYocGkodCkpaT1lLsm1Y21wfHxlLsm1ZGlyO2Vsc2V7aWYoZS7JtWNtcCl0aHJvdyBuZXcgRXJyb3IoIkRpcmVjdGl2ZXMgY2Fubm90IGluaGVyaXQgQ29tcG9uZW50cyIpO2k9ZS7JtWRpcn1pZihpKXtpZihuKXtvLnB1c2goaSk7Y29uc3QgZT10O2UuaW5wdXRzPWhtKHQuaW5wdXRzKSxlLmRlY2xhcmVkSW5wdXRzPWhtKHQuZGVjbGFyZWRJbnB1dHMpLGUub3V0cHV0cz1obSh0Lm91dHB1dHMpO2NvbnN0IG49aS5ob3N0QmluZGluZ3M7biYmX20odCxuKTtjb25zdCBhPWkudmlld1F1ZXJ5LHI9aS5jb250ZW50UXVlcmllcztpZihhJiZibSh0LGEpLHImJnltKHQsciksQW4odC5pbnB1dHMsaS5pbnB1dHMpLEFuKHQuZGVjbGFyZWRJbnB1dHMsaS5kZWNsYXJlZElucHV0cyksQW4odC5vdXRwdXRzLGkub3V0cHV0cykscGkoaSkmJmkuZGF0YS5hbmltYXRpb24pe2NvbnN0IGU9dC5kYXRhO2UuYW5pbWF0aW9uPShlLmFuaW1hdGlvbnx8W10pLmNvbmNhdChpLmRhdGEuYW5pbWF0aW9uKX19Y29uc3QgZT1pLmZlYXR1cmVzO2lmKGUpZm9yKGxldCBvPTA7bzxlLmxlbmd0aDtvKyspe2NvbnN0IGk9ZVtvXTtpJiZpLm5nSW5oZXJpdCYmaSh0KSxpPT09Z20mJihuPSExKX19ZT1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9IShmdW5jdGlvbiBpKHQpe2xldCBlPTAsbj1udWxsO2ZvcihsZXQgbz10Lmxlbmd0aC0xO28+PTA7by0tKXtjb25zdCBpPXRbb107aS5ob3N0VmFycz1lKz1pLmhvc3RWYXJzLGkuaG9zdEF0dHJzPVFhKGkuaG9zdEF0dHJzLG49UWEobixpLmhvc3RBdHRycykpfX0pKG8pfWZ1bmN0aW9uIGhtKHQpe3JldHVybiB0PT09Um8/e306dD09PU5vP1tdOnR9ZnVuY3Rpb24gYm0odCxlKXtjb25zdCBuPXQudmlld1F1ZXJ5O3Qudmlld1F1ZXJ5PW4/KHQsbyk9PntlKHQsbyksbih0LG8pfTplfWZ1bmN0aW9uIHltKHQsZSl7Y29uc3Qgbj10LmNvbnRlbnRRdWVyaWVzO3QuY29udGVudFF1ZXJpZXM9bj8odCxvLGkpPT57ZSh0LG8saSksbih0LG8saSl9OmV9ZnVuY3Rpb24gX20odCxlKXtjb25zdCBuPXQuaG9zdEJpbmRpbmdzO3QuaG9zdEJpbmRpbmdzPW4/KHQsbyk9PntlKHQsbyksbih0LG8pfTplfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jb25zdCBDbT1bInByb3ZpZGVyc1Jlc29sdmVyIl0sTW09WyJ0ZW1wbGF0ZSIsImRlY2xzIiwiY29uc3RzIiwidmFycyIsIm9uUHVzaCIsIm5nQ29udGVudFNlbGVjdG9ycyIsInN0eWxlcyIsImVuY2Fwc3VsYXRpb24iLCJzY2hlbWFzIl07Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpsZXQgdm09bnVsbDtmdW5jdGlvbiB4bSgpe2lmKCF2bSl7Y29uc3QgdD1Fby5TeW1ib2w7aWYodCYmdC5pdGVyYXRvcil2bT10Lml0ZXJhdG9yO2Vsc2V7Y29uc3QgdD1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhNYXAucHJvdG90eXBlKTtmb3IobGV0IGU9MDtlPHQubGVuZ3RoOysrZSl7Y29uc3Qgbj10W2VdOyJlbnRyaWVzIiE9PW4mJiJzaXplIiE9PW4mJk1hcC5wcm90b3R5cGVbbl09PT1NYXAucHJvdG90eXBlLmVudHJpZXMmJih2bT1uKX19fXJldHVybiB2bX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovZnVuY3Rpb24gT20odCxlKXtjb25zdCBuPXdtKHQpLG89d20oZSk7aWYobiYmbylyZXR1cm4oZnVuY3Rpb24gaSh0LGUsbil7Y29uc3Qgbz10W3htKCldKCksaT1lW3htKCldKCk7Zm9yKDs7KXtjb25zdCB0PW8ubmV4dCgpLGU9aS5uZXh0KCk7aWYodC5kb25lJiZlLmRvbmUpcmV0dXJuITA7aWYodC5kb25lfHxlLmRvbmUpcmV0dXJuITE7aWYoIW4odC52YWx1ZSxlLnZhbHVlKSlyZXR1cm4hMX19KSh0LGUsT20pO3tjb25zdCBpPXQmJigib2JqZWN0Ij09dHlwZW9mIHR8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSxhPWUmJigib2JqZWN0Ij09dHlwZW9mIGV8fCJmdW5jdGlvbiI9PXR5cGVvZiBlKTtyZXR1cm4hKG58fCFpfHxvfHwhYSl8fE9iamVjdC5pcyh0LGUpfX1jbGFzcyBQbXtjb25zdHJ1Y3Rvcih0KXt0aGlzLndyYXBwZWQ9dH1zdGF0aWMgd3JhcCh0KXtyZXR1cm4gbmV3IFBtKHQpfXN0YXRpYyB1bndyYXAodCl7cmV0dXJuIFBtLmlzV3JhcHBlZCh0KT90LndyYXBwZWQ6dH1zdGF0aWMgaXNXcmFwcGVkKHQpe3JldHVybiB0IGluc3RhbmNlb2YgUG19fWZ1bmN0aW9uIHdtKHQpe3JldHVybiEha20odCkmJihBcnJheS5pc0FycmF5KHQpfHwhKHQgaW5zdGFuY2VvZiBNYXApJiZ4bSgpaW4gdCl9ZnVuY3Rpb24ga20odCl7cmV0dXJuIG51bGwhPT10JiYoImZ1bmN0aW9uIj09dHlwZW9mIHR8fCJvYmplY3QiPT10eXBlb2YgdCl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIFNtKHQsZSxuKXtyZXR1cm4gdFtlXT1ufWZ1bmN0aW9uIERtKHQsZSl7cmV0dXJuIG5nRGV2TW9kZSYmcm8odCxlKSxuZ0Rldk1vZGUmJlFuKHRbZV0sS2MsIlN0b3JlZCB2YWx1ZSBzaG91bGQgbmV2ZXIgYmUgTk9fQ0hBTkdFLiIpLHRbZV19ZnVuY3Rpb24gRW0odCxlLG4pe25nRGV2TW9kZSYmUW4obixLYywiSW5jb21pbmcgdmFsdWUgc2hvdWxkIG5ldmVyIGJlIE5PX0NIQU5HRS4iKSxuZ0Rldk1vZGUmJiRuKGUsdC5sZW5ndGgsIlNsb3Qgc2hvdWxkIGhhdmUgYmVlbiBpbml0aWFsaXplZCB0byBOT19DSEFOR0UiKTtjb25zdCBvPXRbZV07aWYoT2JqZWN0LmlzKG8sbikpcmV0dXJuITE7aWYobmdEZXZNb2RlJiZ1YSgpKXtjb25zdCBpPW8hPT1LYz9vOnZvaWQgMDtpZighT20oaSxuKSl7Y29uc3QgYT0oZnVuY3Rpb24gaSh0LGUsbixvKXtjb25zdCBpPXRbMV0uZGF0YSxhPWlbZV07aWYoInN0cmluZyI9PXR5cGVvZiBhKXJldHVybiBhLmluZGV4T2YoS2wpPi0xPyRsKHQsZSxlLGEsbyk6e3Byb3BOYW1lOmEsb2xkVmFsdWU6bixuZXdWYWx1ZTpvfTtpZihudWxsPT09YSl7bGV0IG49ZS0xO2Zvcig7InN0cmluZyIhPXR5cGVvZiBpW25dJiZudWxsPT09aVtuKzFdOyluLS07Y29uc3QgYT1pW25dO2lmKCJzdHJpbmciPT10eXBlb2YgYSl7Y29uc3QgaT1hLm1hdGNoKG5ldyBSZWdFeHAoS2wsImciKSk7aWYoaSYmaS5sZW5ndGgtMT5lLW4pcmV0dXJuICRsKHQsbixlLGEsbyl9fXJldHVybntwcm9wTmFtZTp2b2lkIDAsb2xkVmFsdWU6bixuZXdWYWx1ZTpvfX0pKHQsZSxpLG4pOyEoZnVuY3Rpb24gYSh0LGUsbixvKXtsZXQgaT1gRXhwcmVzc2lvbkNoYW5nZWRBZnRlckl0SGFzQmVlbkNoZWNrZWRFcnJvcjogRXhwcmVzc2lvbiBoYXMgY2hhbmdlZCBhZnRlciBpdCB3YXMgY2hlY2tlZC4gUHJldmlvdXMgdmFsdWUke28/YCBmb3IgJyR7b30nYDoiIn06ICcke2V9Jy4gQ3VycmVudCB2YWx1ZTogJyR7bn0nLmA7dGhyb3cgdCYmKGkrPSIgSXQgc2VlbXMgbGlrZSB0aGUgdmlldyBoYXMgYmVlbiBjcmVhdGVkIGFmdGVyIGl0cyBwYXJlbnQgYW5kIGl0cyBjaGlsZHJlbiBoYXZlIGJlZW4gZGlydHkgY2hlY2tlZC4gSGFzIGl0IGJlZW4gY3JlYXRlZCBpbiBhIGNoYW5nZSBkZXRlY3Rpb24gaG9vaz8iKSxuZXcgRm4oIjEwMCIsaSl9KShvPT09S2MsYS5vbGRWYWx1ZSxhLm5ld1ZhbHVlLGEucHJvcE5hbWUpfXJldHVybiExfXJldHVybiB0W2VdPW4sITB9ZnVuY3Rpb24gQW0odCxlLG4sbyl7Y29uc3QgaT1FbSh0LGUsbik7cmV0dXJuIEVtKHQsZSsxLG8pfHxpfWZ1bmN0aW9uIFJtKHQsZSxuLG8saSl7Y29uc3QgYT1BbSh0LGUsbixvKTtyZXR1cm4gRW0odCxlKzIsaSl8fGF9ZnVuY3Rpb24gVG0odCxlLG4sbyxpLGEpe2NvbnN0IHI9QW0odCxlLG4sbyk7cmV0dXJuIEFtKHQsZSsyLGksYSl8fHJ9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIE5tKHQsZSxuLG8pe2NvbnN0IGk9aWEoKSxhPXlhKCk7aWYoRW0oaSxhLGUpKXtjb25zdCByPWFhKCkscz16YSgpO3BwKHMsaSx0LGUsbixvKSxuZ0Rldk1vZGUmJndwKHIuZGF0YSxzLCJhdHRyLiIrdCxhKX1yZXR1cm4gTm19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIEltKHQsZSl7bmdEZXZNb2RlJiYkbigyLGUubGVuZ3RoLCJzaG91bGQgaGF2ZSBhdCBsZWFzdCAzIHZhbHVlcyIpLG5nRGV2TW9kZSYmWG4oZS5sZW5ndGglMiwxLCJzaG91bGQgaGF2ZSBhbiBvZGQgbnVtYmVyIG9mIHZhbHVlcyIpO2xldCBuPSExLG89aGEoKTtmb3IobGV0IGk9MTtpPGUubGVuZ3RoO2krPTIpbj1FbSh0LG8rKyxlW2ldKXx8bjtpZihiYShvKSwhbilyZXR1cm4gS2M7bGV0IGk9ZVswXTtmb3IobGV0IHQ9MTt0PGUubGVuZ3RoO3QrPTIpaSs9Vm4oZVt0XSkrZVt0KzFdO3JldHVybiBpfWZ1bmN0aW9uIHptKHQsZSxuLG8pe3JldHVybiBFbSh0LHlhKCksbik/ZStWbihuKStvOktjfWZ1bmN0aW9uIEhtKHQsZSxuLG8saSxhKXtjb25zdCByPUFtKHQsaGEoKSxuLGkpO3JldHVybiBfYSgyKSxyP2UrVm4obikrbytWbihpKSthOktjfWZ1bmN0aW9uIEZtKHQsZSxuLG8saSxhLHIscyl7Y29uc3QgbD1SbSh0LGhhKCksbixpLHIpO3JldHVybiBfYSgzKSxsP2UrVm4obikrbytWbihpKSthK1ZuKHIpK3M6S2N9ZnVuY3Rpb24gTG0odCxlLG4sbyxpLGEscixzLGwsYyl7Y29uc3QgZD1UbSh0LGhhKCksbixpLHIsbCk7cmV0dXJuIF9hKDQpLGQ/ZStWbihuKStvK1ZuKGkpK2ErVm4ocikrcytWbihsKStjOktjfWZ1bmN0aW9uIEJtKHQsZSxuLG8saSxhLHIscyxsLGMsZCxwKXtjb25zdCBtPWhhKCk7bGV0IHU9VG0odCxtLG4saSxyLGwpO3JldHVybiB1PUVtKHQsbSs0LGQpfHx1LF9hKDUpLHU/ZStWbihuKStvK1ZuKGkpK2ErVm4ocikrcytWbihsKStjK1ZuKGQpK3A6S2N9ZnVuY3Rpb24gVm0odCxlLG4sbyxpLGEscixzLGwsYyxkLHAsbSx1KXtjb25zdCBmPWhhKCk7bGV0IGc9VG0odCxmLG4saSxyLGwpO3JldHVybiBnPUFtKHQsZis0LGQsbSl8fGcsX2EoNiksZz9lK1ZuKG4pK28rVm4oaSkrYStWbihyKStzK1ZuKGwpK2MrVm4oZCkrcCtWbihtKSt1OktjfWZ1bmN0aW9uIGptKHQsZSxuLG8saSxhLHIscyxsLGMsZCxwLG0sdSxmLGcpe2NvbnN0IGg9aGEoKTtsZXQgYj1UbSh0LGgsbixpLHIsbCk7cmV0dXJuIGI9Um0odCxoKzQsZCxtLGYpfHxiLF9hKDcpLGI/ZStWbihuKStvK1ZuKGkpK2ErVm4ocikrcytWbihsKStjK1ZuKGQpK3ArVm4obSkrdStWbihmKStnOktjfWZ1bmN0aW9uIFVtKHQsZSxuLG8saSxhLHIscyxsLGMsZCxwLG0sdSxmLGcsaCxiKXtjb25zdCB5PWhhKCk7bGV0IF89VG0odCx5LG4saSxyLGwpO3JldHVybiBfPVRtKHQseSs0LGQsbSxmLGgpfHxfLF9hKDgpLF8/ZStWbihuKStvK1ZuKGkpK2ErVm4ocikrcytWbihsKStjK1ZuKGQpK3ArVm4obSkrdStWbihmKStnK1ZuKGgpK2I6S2N9ZnVuY3Rpb24gV20odCxlLG4sbyxpLGEscixzKXtjb25zdCBsPWlhKCksYz1hYSgpLGQ9dCtvaSxwPWMuZmlyc3RDcmVhdGVQYXNzPygKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmZ1bmN0aW9uIG0odCxlLG4sbyxpLGEscixzLGwpe25nRGV2TW9kZSYmQ2koZSksbmdEZXZNb2RlJiZuZ0Rldk1vZGUuZmlyc3RDcmVhdGVQYXNzKys7Y29uc3QgYz1lLmNvbnN0cyxkPUxkKGUsdCw0LHJ8fG51bGwsJGkoYyxzKSk7b3AoZSxuLGQsJGkoYyxsKSksTGEoZSxkKTtjb25zdCBwPWQudFZpZXdzPUtkKDIsZCxvLGksYSxlLmRpcmVjdGl2ZVJlZ2lzdHJ5LGUucGlwZVJlZ2lzdHJ5LG51bGwsZS5zY2hlbWFzLGMpO3JldHVybiBudWxsIT09ZS5xdWVyaWVzJiYoZS5xdWVyaWVzLnRlbXBsYXRlKGUsZCkscC5xdWVyaWVzPWUucXVlcmllcy5lbWJlZGRlZFRWaWV3KGQpKSxkfSkoZCxjLGwsZSxuLG8saSxhLHIpOmMuZGF0YVtkXTtkYShwLCExKTtjb25zdCB1PWxbMTFdLmNyZWF0ZUNvbW1lbnQobmdEZXZNb2RlPyJjb250YWluZXIiOiIiKTtTYyhjLGwsdSxwKSxWbCh1LGwpLENwKGwsbFtkXT1ocCh1LGwsdSxwKSksZGkocCkmJnFkKGMsbCxwKSxudWxsIT1yJiZaZChsLHAscyl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIEdtKHQpe3JldHVybiBxaSgoZnVuY3Rpb24gZSgpe3JldHVybiBuYS5sRnJhbWUuY29udGV4dExWaWV3fSkoKSxvaSt0KX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY29uc3QgWW09eyLJtcm1ZGVmaW5lSW5qZWN0YWJsZSI6bG8sIsm1ybVkZWZpbmVJbmplY3RvciI6Y28sIsm1ybVpbmplY3QiOnVzLCLJtcm1aW52YWxpZEZhY3RvcnlEZXAiOmZzfSxxbT1Fbih7cHJvdmlkZTpTdHJpbmcsdXNlVmFsdWU6RW59KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovZnVuY3Rpb24gWm0odCl7cmV0dXJuIHZvaWQgMCE9PXQudXNlQ2xhc3N9ZnVuY3Rpb24gWG0odCl7cmV0dXJuIHZvaWQgMCE9PXQudXNlRmFjdG9yeX1mdW5jdGlvbiBLbSh0LGUpe2NvbnN0IG49ZXx8e3Byb3ZpZGVkSW46bnVsbH0sbz17bmFtZTp0Lm5hbWUsdHlwZTp0LHR5cGVBcmd1bWVudENvdW50OjAscHJvdmlkZWRJbjpuLnByb3ZpZGVkSW4sdXNlckRlcHM6dm9pZCAwfTtyZXR1cm4oWm0obil8fFhtKG4pKSYmdm9pZCAwIT09bi5kZXBzJiYoby51c2VyRGVwcz13cyhuLmRlcHMpKSxabShuKT9vLnVzZUNsYXNzPXpuKG4udXNlQ2xhc3MpOihmdW5jdGlvbiBpKHQpe3JldHVybiBxbSBpbiB0fSkobik/by51c2VWYWx1ZT16bihuLnVzZVZhbHVlKTpYbShuKT9vLnVzZUZhY3Rvcnk9bi51c2VGYWN0b3J5OihmdW5jdGlvbiBhKHQpe3JldHVybiB2b2lkIDAhPT10LnVzZUV4aXN0aW5nfSkobikmJihvLnVzZUV4aXN0aW5nPXpuKG4udXNlRXhpc3RpbmcpKSxvfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9Fbih7cHJvdmlkZTpTdHJpbmcsdXNlVmFsdWU6RW59KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IEptPVNyKCJJbmplY3RhYmxlIix2b2lkIDAsdm9pZCAwLHZvaWQgMCwoKHQsZSk9PlFtKHQsZSkpKSxRbT1mdW5jdGlvbiAkbSh0LGUpe2xldCBuPW51bGwsbz1udWxsO3QuaGFzT3duUHJvcGVydHkoZm8pfHxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxmbyx7Z2V0OigpPT4obnVsbD09PW4mJihuPWpyKCkuY29tcGlsZUluamVjdGFibGUoWW0sYG5nOi8vLyR7dC5uYW1lfS/JtXByb3YuanNgLEttKHQsZSkpKSxuKX0pLHQuaGFzT3duUHJvcGVydHkoQm8pfHxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxCbyx7Z2V0OigpPT57aWYobnVsbD09PW8pe2NvbnN0IG49S20odCxlKSxpPWpyKCk7bz1pLmNvbXBpbGVGYWN0b3J5KFltLGBuZzovLy8ke3QubmFtZX0vybVmYWMuanNgLHtuYW1lOm4ubmFtZSx0eXBlOm4udHlwZSx0eXBlQXJndW1lbnRDb3VudDpuLnR5cGVBcmd1bWVudENvdW50LGRlcHM6UHModCksaW5qZWN0Rm46ImluamVjdCIsdGFyZ2V0OmkuUjNGYWN0b3J5VGFyZ2V0LkluamVjdGFibGV9KX1yZXR1cm4gb30sY29uZmlndXJhYmxlOiEwfSl9O2Z1bmN0aW9uIHR1KHQpe3JldHVybiB0Lmxlbmd0aD4xPyIgKCIrKAovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KZnVuY3Rpb24gZSh0KXtjb25zdCBlPVtdO2ZvcihsZXQgbj0wO248dC5sZW5ndGg7KytuKXtpZihlLmluZGV4T2YodFtuXSk+LTEpcmV0dXJuIGUucHVzaCh0W25dKSxlO2UucHVzaCh0W25dKX1yZXR1cm4gZX0pKHQuc2xpY2UoKS5yZXZlcnNlKCkpLm1hcCgodD0+Um4odC50b2tlbikpKS5qb2luKCIgLT4gIikrIikiOiIifWZ1bmN0aW9uIGV1KHQsZSxuLG8pe2NvbnN0IGk9W2VdLGE9bihpKSxyPW8/KGZ1bmN0aW9uIHModCxlKXtjb25zdCBuPWAke3R9IGNhdXNlZCBieTogJHtlIGluc3RhbmNlb2YgRXJyb3I/ZS5tZXNzYWdlOmV9YCxvPUVycm9yKG4pO3JldHVybiBvLm5nT3JpZ2luYWxFcnJvcj1lLG99KShhLG8pOkVycm9yKGEpO3JldHVybiByLmFkZEtleT1udSxyLmtleXM9aSxyLmluamVjdG9ycz1bdF0sci5jb25zdHJ1Y3RSZXNvbHZpbmdNZXNzYWdlPW4sci5uZ09yaWdpbmFsRXJyb3I9byxyfWZ1bmN0aW9uIG51KHQsZSl7dGhpcy5pbmplY3RvcnMucHVzaCh0KSx0aGlzLmtleXMucHVzaChlKSx0aGlzLm1lc3NhZ2U9dGhpcy5jb25zdHJ1Y3RSZXNvbHZpbmdNZXNzYWdlKHRoaXMua2V5cyl9ZnVuY3Rpb24gb3UodCxlKXtjb25zdCBuPVtdO2ZvcihsZXQgdD0wLG89ZS5sZW5ndGg7dDxvO3QrKyl7Y29uc3Qgbz1lW3RdO24ucHVzaChvJiYwIT1vLmxlbmd0aD9vLm1hcChSbikuam9pbigiICIpOiI/Iil9cmV0dXJuIEVycm9yKCJDYW5ub3QgcmVzb2x2ZSBhbGwgcGFyYW1ldGVycyBmb3IgJyIrUm4odCkrIicoIituLmpvaW4oIiwgIikrIikuIE1ha2Ugc3VyZSB0aGF0IGFsbCB0aGUgcGFyYW1ldGVycyBhcmUgZGVjb3JhdGVkIHdpdGggSW5qZWN0IG9yIGhhdmUgdmFsaWQgdHlwZSBhbm5vdGF0aW9ucyBhbmQgdGhhdCAnIitSbih0KSsiJyBpcyBkZWNvcmF0ZWQgd2l0aCBJbmplY3RhYmxlLiIpfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3MgaXV7Y29uc3RydWN0b3IodCxlKXtpZih0aGlzLnRva2VuPXQsdGhpcy5pZD1lLCF0KXRocm93IG5ldyBFcnJvcigiVG9rZW4gbXVzdCBiZSBkZWZpbmVkISIpO3RoaXMuZGlzcGxheU5hbWU9Um4odGhpcy50b2tlbil9c3RhdGljIGdldCh0KXtyZXR1cm4gYXUuZ2V0KHpuKHQpKX1zdGF0aWMgZ2V0IG51bWJlck9mS2V5cygpe3JldHVybiBhdS5udW1iZXJPZktleXN9fWNvbnN0IGF1PW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2FsbEtleXM9bmV3IE1hcH1nZXQodCl7aWYodCBpbnN0YW5jZW9mIGl1KXJldHVybiB0O2lmKHRoaXMuX2FsbEtleXMuaGFzKHQpKXJldHVybiB0aGlzLl9hbGxLZXlzLmdldCh0KTtjb25zdCBlPW5ldyBpdSh0LGl1Lm51bWJlck9mS2V5cyk7cmV0dXJuIHRoaXMuX2FsbEtleXMuc2V0KHQsZSksZX1nZXQgbnVtYmVyT2ZLZXlzKCl7cmV0dXJuIHRoaXMuX2FsbEtleXMuc2l6ZX19LHJ1PW5ldwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5yZWZsZWN0aW9uQ2FwYWJpbGl0aWVzPXR9dXBkYXRlQ2FwYWJpbGl0aWVzKHQpe3RoaXMucmVmbGVjdGlvbkNhcGFiaWxpdGllcz10fWZhY3RvcnkodCl7cmV0dXJuIHRoaXMucmVmbGVjdGlvbkNhcGFiaWxpdGllcy5mYWN0b3J5KHQpfXBhcmFtZXRlcnModCl7cmV0dXJuIHRoaXMucmVmbGVjdGlvbkNhcGFiaWxpdGllcy5wYXJhbWV0ZXJzKHQpfWFubm90YXRpb25zKHQpe3JldHVybiB0aGlzLnJlZmxlY3Rpb25DYXBhYmlsaXRpZXMuYW5ub3RhdGlvbnModCl9cHJvcE1ldGFkYXRhKHQpe3JldHVybiB0aGlzLnJlZmxlY3Rpb25DYXBhYmlsaXRpZXMucHJvcE1ldGFkYXRhKHQpfWhhc0xpZmVjeWNsZUhvb2sodCxlKXtyZXR1cm4gdGhpcy5yZWZsZWN0aW9uQ2FwYWJpbGl0aWVzLmhhc0xpZmVjeWNsZUhvb2sodCxlKX1nZXR0ZXIodCl7cmV0dXJuIHRoaXMucmVmbGVjdGlvbkNhcGFiaWxpdGllcy5nZXR0ZXIodCl9c2V0dGVyKHQpe3JldHVybiB0aGlzLnJlZmxlY3Rpb25DYXBhYmlsaXRpZXMuc2V0dGVyKHQpfW1ldGhvZCh0KXtyZXR1cm4gdGhpcy5yZWZsZWN0aW9uQ2FwYWJpbGl0aWVzLm1ldGhvZCh0KX1pbXBvcnRVcmkodCl7cmV0dXJuIHRoaXMucmVmbGVjdGlvbkNhcGFiaWxpdGllcy5pbXBvcnRVcmkodCl9cmVzb3VyY2VVcmkodCl7cmV0dXJuIHRoaXMucmVmbGVjdGlvbkNhcGFiaWxpdGllcy5yZXNvdXJjZVVyaSh0KX1yZXNvbHZlSWRlbnRpZmllcih0LGUsbixvKXtyZXR1cm4gdGhpcy5yZWZsZWN0aW9uQ2FwYWJpbGl0aWVzLnJlc29sdmVJZGVudGlmaWVyKHQsZSxuLG8pfXJlc29sdmVFbnVtKHQsZSl7cmV0dXJuIHRoaXMucmVmbGVjdGlvbkNhcGFiaWxpdGllcy5yZXNvbHZlRW51bSh0LGUpfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovKG5ldyBvcyk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyBzdXtjb25zdHJ1Y3Rvcih0LGUsbil7dGhpcy5rZXk9dCx0aGlzLm9wdGlvbmFsPWUsdGhpcy52aXNpYmlsaXR5PW59c3RhdGljIGZyb21LZXkodCl7cmV0dXJuIG5ldyBzdSh0LCExLG51bGwpfX1jb25zdCBsdT1bXTtjbGFzcyBjdXtjb25zdHJ1Y3Rvcih0LGUsbil7dGhpcy5rZXk9dCx0aGlzLnJlc29sdmVkRmFjdG9yaWVzPWUsdGhpcy5tdWx0aVByb3ZpZGVyPW4sdGhpcy5yZXNvbHZlZEZhY3Rvcnk9dGhpcy5yZXNvbHZlZEZhY3Rvcmllc1swXX19Y2xhc3MgZHV7Y29uc3RydWN0b3IodCxlKXt0aGlzLmZhY3Rvcnk9dCx0aGlzLmRlcGVuZGVuY2llcz1lfX1mdW5jdGlvbiBwdSh0KXtsZXQgZSxuO2lmKHQudXNlQ2xhc3Mpe2NvbnN0IG89em4odC51c2VDbGFzcyk7ZT1ydS5mYWN0b3J5KG8pLG49Z3Uobyl9ZWxzZSB0LnVzZUV4aXN0aW5nPyhlPXQ9PnQsbj1bc3UuZnJvbUtleShpdS5nZXQodC51c2VFeGlzdGluZykpXSk6dC51c2VGYWN0b3J5PyhlPXQudXNlRmFjdG9yeSxuPShmdW5jdGlvbiBvKHQsZSl7aWYoZSl7Y29uc3Qgbj1lLm1hcCgodD0+W3RdKSk7cmV0dXJuIGUubWFwKChlPT5odSh0LGUsbikpKX1yZXR1cm4gZ3UodCl9KSh0LnVzZUZhY3RvcnksdC5kZXBzKSk6KGU9KCk9PnQudXNlVmFsdWUsbj1sdSk7cmV0dXJuIG5ldyBkdShlLG4pfWZ1bmN0aW9uIG11KHQpe3JldHVybiBuZXcgY3UoaXUuZ2V0KHQucHJvdmlkZSksW3B1KHQpXSx0Lm11bHRpfHwhMSl9ZnVuY3Rpb24gdXUodCl7Y29uc3QgZT0oZnVuY3Rpb24gbih0LGUpe2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKXtjb25zdCBvPXRbbl0saT1lLmdldChvLmtleS5pZCk7aWYoaSl7aWYoby5tdWx0aVByb3ZpZGVyIT09aS5tdWx0aVByb3ZpZGVyKXRocm93IEVycm9yKGBDYW5ub3QgbWl4IG11bHRpIHByb3ZpZGVycyBhbmQgcmVndWxhciBwcm92aWRlcnMsIGdvdDogJHtpfSAke299YCk7aWYoby5tdWx0aVByb3ZpZGVyKWZvcihsZXQgdD0wO3Q8by5yZXNvbHZlZEZhY3Rvcmllcy5sZW5ndGg7dCsrKWkucmVzb2x2ZWRGYWN0b3JpZXMucHVzaChvLnJlc29sdmVkRmFjdG9yaWVzW3RdKTtlbHNlIGUuc2V0KG8ua2V5LmlkLG8pfWVsc2V7bGV0IHQ7dD1vLm11bHRpUHJvdmlkZXI/bmV3IGN1KG8ua2V5LG8ucmVzb2x2ZWRGYWN0b3JpZXMuc2xpY2UoKSxvLm11bHRpUHJvdmlkZXIpOm8sZS5zZXQoby5rZXkuaWQsdCl9fXJldHVybiBlfSkoZnUodCxbXSkubWFwKG11KSxuZXcgTWFwKTtyZXR1cm4gQXJyYXkuZnJvbShlLnZhbHVlcygpKX1mdW5jdGlvbiBmdSh0LGUpe3JldHVybiB0LmZvckVhY2goKHQ9PntpZih0IGluc3RhbmNlb2YgVXIpZS5wdXNoKHtwcm92aWRlOnQsdXNlQ2xhc3M6dH0pO2Vsc2UgaWYodCYmIm9iamVjdCI9PXR5cGVvZiB0JiZ2b2lkIDAhPT10LnByb3ZpZGUpZS5wdXNoKHQpO2Vsc2V7aWYoIUFycmF5LmlzQXJyYXkodCkpdGhyb3coZnVuY3Rpb24gbih0KXtyZXR1cm4gRXJyb3IoYEludmFsaWQgcHJvdmlkZXIgLSBvbmx5IGluc3RhbmNlcyBvZiBQcm92aWRlciBhbmQgVHlwZSBhcmUgYWxsb3dlZCwgZ290OiAke3R9YCl9KSh0KTtmdSh0LGUpfX0pKSxlfWZ1bmN0aW9uIGd1KHQpe2NvbnN0IGU9cnUucGFyYW1ldGVycyh0KTtpZighZSlyZXR1cm5bXTtpZihlLnNvbWUoKHQ9Pm51bGw9PXQpKSl0aHJvdyBvdSh0LGUpO3JldHVybiBlLm1hcCgobj0+aHUodCxuLGUpKSl9ZnVuY3Rpb24gaHUodCxlLG4pe2xldCBvPW51bGwsaT0hMTtpZighQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gYnUoZSBpbnN0YW5jZW9mIHlzP2UudG9rZW46ZSxpLG51bGwpO2xldCBhPW51bGw7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDsrK3Qpe2NvbnN0IG49ZVt0XTtuIGluc3RhbmNlb2YgVXI/bz1uOm4gaW5zdGFuY2VvZiB5cz9vPW4udG9rZW46biBpbnN0YW5jZW9mIF9zP2k9ITA6biBpbnN0YW5jZW9mIENzfHxuIGluc3RhbmNlb2YgTXM/YT1uOm4gaW5zdGFuY2VvZiBOciYmKG89bil9aWYobz16bihvKSxudWxsIT1vKXJldHVybiBidShvLGksYSk7dGhyb3cgb3UodCxuKX1mdW5jdGlvbiBidSh0LGUsbil7cmV0dXJuIG5ldyBzdShpdS5nZXQodCksZSxuKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY29uc3QgeXU9e307Y2xhc3MgX3V7c3RhdGljIHJlc29sdmUodCl7cmV0dXJuIHV1KHQpfXN0YXRpYyByZXNvbHZlQW5kQ3JlYXRlKHQsZSl7Y29uc3Qgbj1fdS5yZXNvbHZlKHQpO3JldHVybiBfdS5mcm9tUmVzb2x2ZWRQcm92aWRlcnMobixlKX1zdGF0aWMgZnJvbVJlc29sdmVkUHJvdmlkZXJzKHQsZSl7cmV0dXJuIG5ldyBDdSh0LGUpfX1jbGFzcyBDdXtjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuX2NvbnN0cnVjdGlvbkNvdW50ZXI9MCx0aGlzLl9wcm92aWRlcnM9dCx0aGlzLnBhcmVudD1lfHxudWxsO2NvbnN0IG49dC5sZW5ndGg7dGhpcy5rZXlJZHM9W10sdGhpcy5vYmpzPVtdO2ZvcihsZXQgZT0wO2U8bjtlKyspdGhpcy5rZXlJZHNbZV09dFtlXS5rZXkuaWQsdGhpcy5vYmpzW2VdPXl1fWdldCh0LGU9cnMpe3JldHVybiB0aGlzLl9nZXRCeUtleShpdS5nZXQodCksbnVsbCxlKX1yZXNvbHZlQW5kQ3JlYXRlQ2hpbGQodCl7Y29uc3QgZT1fdS5yZXNvbHZlKHQpO3JldHVybiB0aGlzLmNyZWF0ZUNoaWxkRnJvbVJlc29sdmVkKGUpfWNyZWF0ZUNoaWxkRnJvbVJlc29sdmVkKHQpe2NvbnN0IGU9bmV3IEN1KHQpO3JldHVybiBlLnBhcmVudD10aGlzLGV9cmVzb2x2ZUFuZEluc3RhbnRpYXRlKHQpe3JldHVybiB0aGlzLmluc3RhbnRpYXRlUmVzb2x2ZWQoX3UucmVzb2x2ZShbdF0pWzBdKX1pbnN0YW50aWF0ZVJlc29sdmVkKHQpe3JldHVybiB0aGlzLl9pbnN0YW50aWF0ZVByb3ZpZGVyKHQpfWdldFByb3ZpZGVyQXRJbmRleCh0KXtpZih0PDB8fHQ+PXRoaXMuX3Byb3ZpZGVycy5sZW5ndGgpdGhyb3coZnVuY3Rpb24gZSh0KXtyZXR1cm4gRXJyb3IoYEluZGV4ICR7dH0gaXMgb3V0LW9mLWJvdW5kcy5gKX0pKHQpO3JldHVybiB0aGlzLl9wcm92aWRlcnNbdF19X25ldyh0KXtpZih0aGlzLl9jb25zdHJ1Y3Rpb25Db3VudGVyKys+dGhpcy5fZ2V0TWF4TnVtYmVyT2ZPYmplY3RzKCkpdGhyb3coZnVuY3Rpb24gZSh0LG4pe3JldHVybiBldSh0LG4sKGZ1bmN0aW9uKHQpe3JldHVybmBDYW5ub3QgaW5zdGFudGlhdGUgY3ljbGljIGRlcGVuZGVuY3khJHt0dSh0KX1gfSkpfSkodGhpcyx0LmtleSk7cmV0dXJuIHRoaXMuX2luc3RhbnRpYXRlUHJvdmlkZXIodCl9X2dldE1heE51bWJlck9mT2JqZWN0cygpe3JldHVybiB0aGlzLm9ianMubGVuZ3RofV9pbnN0YW50aWF0ZVByb3ZpZGVyKHQpe2lmKHQubXVsdGlQcm92aWRlcil7Y29uc3QgZT1bXTtmb3IobGV0IG49MDtuPHQucmVzb2x2ZWRGYWN0b3JpZXMubGVuZ3RoOysrbillW25dPXRoaXMuX2luc3RhbnRpYXRlKHQsdC5yZXNvbHZlZEZhY3Rvcmllc1tuXSk7cmV0dXJuIGV9cmV0dXJuIHRoaXMuX2luc3RhbnRpYXRlKHQsdC5yZXNvbHZlZEZhY3Rvcmllc1swXSl9X2luc3RhbnRpYXRlKHQsZSl7Y29uc3Qgbj1lLmZhY3Rvcnk7bGV0IG8saTt0cnl7bz1lLmRlcGVuZGVuY2llcy5tYXAoKHQ9PnRoaXMuX2dldEJ5UmVmbGVjdGl2ZURlcGVuZGVuY3kodCkpKX1jYXRjaChlKXt0aHJvdyBlLmFkZEtleSYmZS5hZGRLZXkodGhpcyx0LmtleSksZX10cnl7aT1uKC4uLm8pfWNhdGNoKGUpe3Rocm93KGZ1bmN0aW9uIGEodCxlLG4sbyl7cmV0dXJuIGV1KHQsbywoZnVuY3Rpb24odCl7Y29uc3Qgbj1Sbih0WzBdLnRva2VuKTtyZXR1cm5gJHtlLm1lc3NhZ2V9OiBFcnJvciBkdXJpbmcgaW5zdGFudGlhdGlvbiBvZiAke259ISR7dHUodCl9LmB9KSxlKX0pKHRoaXMsZSwwLHQua2V5KX1yZXR1cm4gaX1fZ2V0QnlSZWZsZWN0aXZlRGVwZW5kZW5jeSh0KXtyZXR1cm4gdGhpcy5fZ2V0QnlLZXkodC5rZXksdC52aXNpYmlsaXR5LHQub3B0aW9uYWw/bnVsbDpycyl9X2dldEJ5S2V5KHQsZSxuKXtyZXR1cm4gdD09PUN1LklOSkVDVE9SX0tFWT90aGlzOmUgaW5zdGFuY2VvZiBDcz90aGlzLl9nZXRCeUtleVNlbGYodCxuKTp0aGlzLl9nZXRCeUtleURlZmF1bHQodCxuLGUpfV9nZXRPYmpCeUtleUlkKHQpe2ZvcihsZXQgZT0wO2U8dGhpcy5rZXlJZHMubGVuZ3RoO2UrKylpZih0aGlzLmtleUlkc1tlXT09PXQpcmV0dXJuIHRoaXMub2Jqc1tlXT09PXl1JiYodGhpcy5vYmpzW2VdPXRoaXMuX25ldyh0aGlzLl9wcm92aWRlcnNbZV0pKSx0aGlzLm9ianNbZV07cmV0dXJuIHl1fV90aHJvd09yTnVsbCh0LGUpe2lmKGUhPT1ycylyZXR1cm4gZTt0aHJvdyhmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIGV1KHQsZSwoZnVuY3Rpb24odCl7cmV0dXJuYE5vIHByb3ZpZGVyIGZvciAke1JuKHRbMF0udG9rZW4pfSEke3R1KHQpfWB9KSl9KSh0aGlzLHQpfV9nZXRCeUtleVNlbGYodCxlKXtjb25zdCBuPXRoaXMuX2dldE9iakJ5S2V5SWQodC5pZCk7cmV0dXJuIG4hPT15dT9uOnRoaXMuX3Rocm93T3JOdWxsKHQsZSl9X2dldEJ5S2V5RGVmYXVsdCh0LGUsbil7bGV0IG87Zm9yKG89biBpbnN0YW5jZW9mIE1zP3RoaXMucGFyZW50OnRoaXM7byBpbnN0YW5jZW9mIEN1Oyl7Y29uc3QgZT1vLG49ZS5fZ2V0T2JqQnlLZXlJZCh0LmlkKTtpZihuIT09eXUpcmV0dXJuIG47bz1lLnBhcmVudH1yZXR1cm4gbnVsbCE9PW8/by5nZXQodC50b2tlbixlKTp0aGlzLl90aHJvd09yTnVsbCh0LGUpfWdldCBkaXNwbGF5TmFtZSgpe3JldHVybmBSZWZsZWN0aXZlSW5qZWN0b3IocHJvdmlkZXJzOiBbJHsoZnVuY3Rpb24gdChlLG4pe2NvbnN0IG89W107Zm9yKGxldCB0PTA7dDxlLl9wcm92aWRlcnMubGVuZ3RoOysrdClvW3RdPW4oZS5nZXRQcm92aWRlckF0SW5kZXgodCkpO3JldHVybiBvfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCi8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLykodGhpcywodD0+JyAiJyt0LmtleS5kaXNwbGF5TmFtZSsnIiAnKSkuam9pbigiLCAiKX1dKWB9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5kaXNwbGF5TmFtZX19ZnVuY3Rpb24gTXUodCxlPXlvLkRlZmF1bHQpe2NvbnN0IG49aWEoKTtyZXR1cm4gbnVsbD09PW4/KG5nRGV2TW9kZSYmKGZ1bmN0aW9uIG8odCl7bmdEZXZNb2RlJiZLbihfbyx0LCJDYWxsaW5nIMm1ybVpbmplY3Qgd291bGQgY2F1c2UgaW5maW5pdGUgcmVjdXJzaW9uIil9KShNdSksdXModCxlKSk6dXIoc2EoKSxuLHpuKHQpLGUpfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KZnVuY3Rpb24gdnUodCxlLG4pe2NvbnN0IG89aWEoKSxpPXlhKCk7aWYoRW0obyxpLGUpKXtjb25zdCBhPWFhKCkscj16YSgpOyRkKGEscixvLHQsZSxvWzExXSxuLCExKSxuZ0Rldk1vZGUmJndwKGEuZGF0YSxyLHQsaSl9cmV0dXJuIHZ1fWZ1bmN0aW9uIHh1KHQsZSxuLG8saSl7Y29uc3QgYT1pPyJjbGFzcyI6InN0eWxlIjtScCh0LG4sZS5pbnB1dHNbYV0sYSxvKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovZnVuY3Rpb24gT3UodCxlLG4sbyl7Y29uc3QgaT1pYSgpLGE9YWEoKSxyPW9pK3Q7bmdEZXZNb2RlJiZYbihoYSgpLGEuYmluZGluZ1N0YXJ0SW5kZXgsImVsZW1lbnRzIHNob3VsZCBiZSBjcmVhdGVkIGJlZm9yZSBhbnkgYmluZGluZ3MiKSxuZ0Rldk1vZGUmJnJvKGkscik7Y29uc3Qgcz1pWzExXSxsPWlbcl09bWMocyxlLChmdW5jdGlvbiBjKCl7cmV0dXJuIG5hLmxGcmFtZS5jdXJyZW50TmFtZXNwYWNlfSkoKSksZD1hLmZpcnN0Q3JlYXRlUGFzcz8oZnVuY3Rpb24gcCh0LGUsbixvLGksYSxyKXtuZ0Rldk1vZGUmJkNpKGUpLG5nRGV2TW9kZSYmbmdEZXZNb2RlLmZpcnN0Q3JlYXRlUGFzcysrO2NvbnN0IHM9ZS5jb25zdHMsbD1MZChlLHQsMixpLCRpKHMsYSkpLGM9b3AoZSxuLGwsJGkocyxyKSk7cmV0dXJuIG5nRGV2TW9kZSYmKGZ1bmN0aW9uIGQodCxlLG4sbyl7aWYobnVsbD09PXQuc2NoZW1hcylyZXR1cm47Y29uc3QgaT1uLnZhbHVlO2lmKCFvJiZudWxsIT09aSYmKCJ1bmRlZmluZWQiIT10eXBlb2YgSFRNTFVua25vd25FbGVtZW50JiZIVE1MVW5rbm93bkVsZW1lbnQmJmUgaW5zdGFuY2VvZiBIVE1MVW5rbm93bkVsZW1lbnR8fCJ1bmRlZmluZWQiIT10eXBlb2YgY3VzdG9tRWxlbWVudHMmJmkuaW5kZXhPZigiLSIpPi0xJiYhY3VzdG9tRWxlbWVudHMuZ2V0KGkpKSYmIWVwKHQsaSkpe2xldCB0PWAnJHtpfScgaXMgbm90IGEga25vd24gZWxlbWVudDpcbmA7dCs9YDEuIElmICcke2l9JyBpcyBhbiBBbmd1bGFyIGNvbXBvbmVudCwgdGhlbiB2ZXJpZnkgdGhhdCBpdCBpcyBwYXJ0IG9mIHRoaXMgbW9kdWxlLlxuYCxpJiZpLmluZGV4T2YoIi0iKT4tMT90Kz1gMi4gSWYgJyR7aX0nIGlzIGEgV2ViIENvbXBvbmVudCB0aGVuIGFkZCAnQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQScgdG8gdGhlICdATmdNb2R1bGUuc2NoZW1hcycgb2YgdGhpcyBjb21wb25lbnQgdG8gc3VwcHJlc3MgdGhpcyBtZXNzYWdlLmA6dCs9IjIuIFRvIGFsbG93IGFueSBlbGVtZW50IGFkZCAnTk9fRVJST1JTX1NDSEVNQScgdG8gdGhlICdATmdNb2R1bGUuc2NoZW1hcycgb2YgdGhpcyBjb21wb25lbnQuIixjb25zb2xlLmVycm9yKEJuKCIzMDQiLHQpKX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLykoZSxvLGwsYyksbnVsbCE9PWwuYXR0cnMmJk5wKGwsbC5hdHRycywhMSksbnVsbCE9PWwubWVyZ2VkQXR0cnMmJk5wKGwsbC5tZXJnZWRBdHRycywhMCksbnVsbCE9PWUucXVlcmllcyYmZS5xdWVyaWVzLmVsZW1lbnRTdGFydChlLGwpLGx9KShyLGEsaSxsLGUsbixvKTphLmRhdGFbcl07ZGEoZCwhMCk7Y29uc3QgbT1kLm1lcmdlZEF0dHJzO251bGwhPT1tJiZYYShzLGwsbSk7Y29uc3QgdT1kLmNsYXNzZXM7bnVsbCE9PXUmJkhjKHMsbCx1KTtjb25zdCBmPWQuc3R5bGVzO251bGwhPT1mJiZ6YyhzLGwsZiksNjQhPSg2NCZkLmZsYWdzKSYmU2MoYSxpLGwsZCksMD09PShmdW5jdGlvbiBnKCl7cmV0dXJuIG5hLmxGcmFtZS5lbGVtZW50RGVwdGhDb3VudH0pKCkmJlZsKGwsaSksKGZ1bmN0aW9uIGgoKXtuYS5sRnJhbWUuZWxlbWVudERlcHRoQ291bnQrK30pKCksZGkoZCkmJihxZChhLGksZCksWWQoYSxkLGkpKSxudWxsIT09byYmWmQoaSxkKX1mdW5jdGlvbiBQdSgpe2xldCB0PXNhKCk7bmdEZXZNb2RlJiZvbyh0LCJObyBwYXJlbnQgbm9kZSB0byBjbG9zZS4iKSxwYSgpP21hKCk6KG5nRGV2TW9kZSYmaGkoc2EoKSksdD10LnBhcmVudCxkYSh0LCExKSk7Y29uc3QgZT10O25nRGV2TW9kZSYmWmEoZSwzKSwoZnVuY3Rpb24gbigpe25hLmxGcmFtZS5lbGVtZW50RGVwdGhDb3VudC0tfSkoKTtjb25zdCBvPWFhKCk7by5maXJzdENyZWF0ZVBhc3MmJihMYShvLHQpLGxpKHQpJiZvLnF1ZXJpZXMuZWxlbWVudEVuZCh0KSksbnVsbCE9ZS5jbGFzc2VzV2l0aG91dEhvc3QmJihmdW5jdGlvbiBpKHQpe3JldHVybiAwIT0oMTYmdC5mbGFncyl9KShlKSYmeHUobyxlLGlhKCksZS5jbGFzc2VzV2l0aG91dEhvc3QsITApLG51bGwhPWUuc3R5bGVzV2l0aG91dEhvc3QmJihmdW5jdGlvbiBhKHQpe3JldHVybiAwIT0oMzImdC5mbGFncyl9KShlKSYmeHUobyxlLGlhKCksZS5zdHlsZXNXaXRob3V0SG9zdCwhMSl9ZnVuY3Rpb24gd3UodCxlLG4sbyl7T3UodCxlLG4sbyksUHUoKX1mdW5jdGlvbiBrdSh0LGUsbil7Y29uc3Qgbz1pYSgpLGk9YWEoKSxhPXQrb2k7bmdEZXZNb2RlJiZybyhvLGEpLG5nRGV2TW9kZSYmWG4oaGEoKSxpLmJpbmRpbmdTdGFydEluZGV4LCJlbGVtZW50IGNvbnRhaW5lcnMgc2hvdWxkIGJlIGNyZWF0ZWQgYmVmb3JlIGFueSBiaW5kaW5ncyIpO2NvbnN0IHI9aS5maXJzdENyZWF0ZVBhc3M/KGZ1bmN0aW9uIHModCxlLG4sbyxpKXtuZ0Rldk1vZGUmJm5nRGV2TW9kZS5maXJzdENyZWF0ZVBhc3MrKztjb25zdCBhPWUuY29uc3RzLHI9JGkoYSxvKSxzPUxkKGUsdCw4LCJuZy1jb250YWluZXIiLHIpO3JldHVybiBudWxsIT09ciYmTnAocyxyLCEwKSxvcChlLG4scywkaShhLGkpKSxudWxsIT09ZS5xdWVyaWVzJiZlLnF1ZXJpZXMuZWxlbWVudFN0YXJ0KGUscyksc30pKGEsaSxvLGUsbik6aS5kYXRhW2FdO2RhKHIsITApLG5nRGV2TW9kZSYmbmdEZXZNb2RlLnJlbmRlcmVyQ3JlYXRlQ29tbWVudCsrO2NvbnN0IGw9b1thXT1vWzExXS5jcmVhdGVDb21tZW50KG5nRGV2TW9kZT8ibmctY29udGFpbmVyIjoiIik7U2MoaSxvLGwsciksVmwobCxvKSxkaShyKSYmKHFkKGksbyxyKSxZZChpLHIsbykpLG51bGwhPW4mJlpkKG8scil9ZnVuY3Rpb24gU3UoKXtsZXQgdD1zYSgpO2NvbnN0IGU9YWEoKTtwYSgpP21hKCk6KG5nRGV2TW9kZSYmaGkodCksdD10LnBhcmVudCxkYSh0LCExKSksbmdEZXZNb2RlJiZaYSh0LDgpLGUuZmlyc3RDcmVhdGVQYXNzJiYoTGEoZSx0KSxsaSh0KSYmZS5xdWVyaWVzLmVsZW1lbnRFbmQodCkpfWZ1bmN0aW9uIER1KHQsZSxuKXtrdSh0LGUsbiksU3UoKX1mdW5jdGlvbiBFdSgpe3JldHVybiBpYSgpfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiBBdSh0KXtyZXR1cm4hIXQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LnRoZW59ZnVuY3Rpb24gUnUodCl7cmV0dXJuISF0JiYiZnVuY3Rpb24iPT10eXBlb2YgdC5zdWJzY3JpYmV9Q3UuSU5KRUNUT1JfS0VZPWl1LmdldChRcCk7Y29uc3QgVHU9UnU7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIE51KHQsZSxuPSExLG8pe2NvbnN0IGk9aWEoKSxhPWFhKCkscj1zYSgpO3JldHVybiB6dShhLGksaVsxMV0scix0LGUsbixvKSxOdX1mdW5jdGlvbiBJdSh0LGUsbj0hMSxvKXtjb25zdCBpPXNhKCksYT1pYSgpLHI9YWEoKTtyZXR1cm4genUocixhLEVwKHhhKHIuZGF0YSksaSxhKSxpLHQsZSxuLG8pLEl1fWZ1bmN0aW9uIHp1KHQsZSxuLG8saSxhLHI9ITEscyl7Y29uc3QgbD1kaShvKSxjPXQuZmlyc3RDcmVhdGVQYXNzJiZEcCh0KSxkPWVbOF0scD1TcChlKTtuZ0Rldk1vZGUmJlphKG8sMTUpO2xldCBtPSEwO2lmKDMmby50eXBlKXtjb25zdCB1PUdpKG8sZSksZj1zP3ModSk6Um8sZz1mLnRhcmdldHx8dSxoPXAubGVuZ3RoLGI9cz90PT5zKFVpKHRbby5pbmRleF0pKS50YXJnZXQ6by5pbmRleDtpZihWaShuKSl7bGV0IHI9bnVsbDtpZighcyYmbCYmKHI9KGZ1bmN0aW9uIHUodCxlLG4sbyl7Y29uc3QgaT10LmNsZWFudXA7aWYobnVsbCE9aSlmb3IobGV0IHQ9MDt0PGkubGVuZ3RoLTE7dCs9Mil7Y29uc3QgYT1pW3RdO2lmKGE9PT1uJiZpW3QrMV09PT1vKXtjb25zdCBuPWVbN10sbz1pW3QrMl07cmV0dXJuIG4ubGVuZ3RoPm8/bltvXTpudWxsfSJzdHJpbmciPT10eXBlb2YgYSYmKHQrPTIpfXJldHVybiBudWxsfSkodCxlLGksby5pbmRleCkpLG51bGwhPT1yKShyLl9fbmdMYXN0TGlzdGVuZXJGbl9ffHxyKS5fX25nTmV4dExpc3RlbmVyRm5fXz1hLHIuX19uZ0xhc3RMaXN0ZW5lckZuX189YSxtPSExO2Vsc2V7YT1GdShvLGUsZCxhLCExKTtjb25zdCB0PW4ubGlzdGVuKGYubmFtZXx8ZyxpLGEpO25nRGV2TW9kZSYmbmdEZXZNb2RlLnJlbmRlcmVyQWRkRXZlbnRMaXN0ZW5lcisrLHAucHVzaChhLHQpLGMmJmMucHVzaChpLGIsaCxoKzEpfX1lbHNlIGE9RnUobyxlLGQsYSwhMCksZy5hZGRFdmVudExpc3RlbmVyKGksYSxyKSxuZ0Rldk1vZGUmJm5nRGV2TW9kZS5yZW5kZXJlckFkZEV2ZW50TGlzdGVuZXIrKyxwLnB1c2goYSksYyYmYy5wdXNoKGksYixoLHIpfWVsc2UgYT1GdShvLGUsZCxhLCExKTtjb25zdCBmPW8ub3V0cHV0cztsZXQgZztpZihtJiZudWxsIT09ZiYmKGc9ZltpXSkpe2NvbnN0IHQ9Zy5sZW5ndGg7aWYodClmb3IobGV0IG49MDtuPHQ7bis9Mil7Y29uc3QgdD1nW25dO25nRGV2TW9kZSYmcm8oZSx0KTtjb25zdCByPWdbbisxXSxzPWVbdF0sbD1zW3JdO2lmKG5nRGV2TW9kZSYmIVR1KGwpKXRocm93IG5ldyBFcnJvcihgQE91dHB1dCAke3J9IG5vdCBpbml0aWFsaXplZCBpbiAnJHtzLmNvbnN0cnVjdG9yLm5hbWV9Jy5gKTtjb25zdCBkPWwuc3Vic2NyaWJlKGEpLG09cC5sZW5ndGg7cC5wdXNoKGEsZCksYyYmYy5wdXNoKGksby5pbmRleCxtLC0obSsxKSl9fX1mdW5jdGlvbiBIdSh0LGUsbixvKXt0cnl7cmV0dXJuIElpKDYsZSxuKSwhMSE9PW4obyl9Y2F0Y2goZSl7cmV0dXJuIEFwKHQsZSksITF9ZmluYWxseXtJaSg3LGUsbil9fWZ1bmN0aW9uIEZ1KHQsZSxuLG8saSl7cmV0dXJuIGZ1bmN0aW9uIGEocil7aWYocj09PUZ1bmN0aW9uKXJldHVybiBvO2NvbnN0IHM9MiZ0LmZsYWdzP1ppKHQuaW5kZXgsZSk6ZTswPT0oMzImZVsyXSkmJk1wKHMpO2xldCBsPUh1KGUsbixvLHIpLGM9YS5fX25nTmV4dExpc3RlbmVyRm5fXztmb3IoO2M7KWw9SHUoZSxuLGMscikmJmwsYz1jLl9fbmdOZXh0TGlzdGVuZXJGbl9fO3JldHVybiBpJiYhMT09PWwmJihyLnByZXZlbnREZWZhdWx0KCksci5yZXR1cm5WYWx1ZT0hMSksbH19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiBMdSh0PTEpe3JldHVybihmdW5jdGlvbiBlKHQpe3JldHVybihuYS5sRnJhbWUuY29udGV4dExWaWV3PShmdW5jdGlvbiBlKHQsbil7Zm9yKDt0PjA7KW5nRGV2TW9kZSYmb28oblsxNV0sIkRlY2xhcmF0aW9uIHZpZXcgc2hvdWxkIGJlIGRlZmluZWQgaWYgbmVzdGluZyBsZXZlbCBpcyBncmVhdGVyIHRoYW4gMC4iKSxuPW5bMTVdLHQtLTtyZXR1cm4gbn0pKHQsbmEubEZyYW1lLmNvbnRleHRMVmlldykpWzhdfSkodCl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIEJ1KHQsZSl7bGV0IG49bnVsbDtjb25zdCBvPShmdW5jdGlvbiBpKHQpe2NvbnN0IGU9dC5hdHRycztpZihudWxsIT1lKXtjb25zdCB0PWUuaW5kZXhPZig1KTtpZigwPT0oMSZ0KSlyZXR1cm4gZVt0KzFdfXJldHVybiBudWxsfSkodCk7Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKyspe2NvbnN0IGE9ZVtpXTtpZigiKiIhPT1hKXtpZihudWxsPT09bz9ZYyh0LGEsITApOnFjKG8sYSkpcmV0dXJuIGl9ZWxzZSBuPWl9cmV0dXJuIG59ZnVuY3Rpb24gVnUodCl7Y29uc3QgZT1pYSgpWzE2XVs2XTtpZighZS5wcm9qZWN0aW9uKXtjb25zdCBuPWUucHJvamVjdGlvbj1Ycih0P3QubGVuZ3RoOjEsbnVsbCksbz1uLnNsaWNlKCk7bGV0IGk9ZS5jaGlsZDtmb3IoO251bGwhPT1pOyl7Y29uc3QgZT10P0J1KGksdCk6MDtudWxsIT09ZSYmKG9bZV0/b1tlXS5wcm9qZWN0aW9uTmV4dD1pOm5bZV09aSxvW2VdPWkpLGk9aS5uZXh0fX19ZnVuY3Rpb24ganUodCxlPTAsbil7Y29uc3Qgbz1pYSgpLGk9YWEoKSxhPUxkKGksb2krdCwxNixudWxsLG58fG51bGwpO251bGw9PT1hLnByb2plY3Rpb24mJihhLnByb2plY3Rpb249ZSksbWEoKSw2NCE9KDY0JmEuZmxhZ3MpJiYoZnVuY3Rpb24gcih0LGUsbil7SWMoZVsxMV0sMCxlLG4sYmModCxuLGUpLHhjKG4ucGFyZW50fHxlWzZdLG4sZSkpfSkoaSxvLGEpfWZ1bmN0aW9uIFV1KHQsZSxuKXtyZXR1cm4gV3UodCwiIixlLCIiLG4pLFV1fWZ1bmN0aW9uIFd1KHQsZSxuLG8saSl7Y29uc3QgYT1pYSgpLHI9em0oYSxlLG4sbyk7aWYociE9PUtjKXtjb25zdCBuPWFhKCkscz16YSgpOyRkKG4scyxhLHQscixhWzExXSxpLCExKSxuZ0Rldk1vZGUmJndwKG4uZGF0YSxzLHQsaGEoKS0xLGUsbyl9cmV0dXJuIFd1fWZ1bmN0aW9uIEd1KHQsZSxuLG8saSl7Y29uc3QgYT10W24rMV0scj1udWxsPT09ZTtsZXQgcz1vP3RkKGEpOm9kKGEpLGw9ITE7Zm9yKDswIT09cyYmKCExPT09bHx8cik7KXtuZ0Rldk1vZGUmJnJvKHQscyk7Y29uc3Qgbj10W3MrMV07WXUodFtzXSxlKSYmKGw9ITAsdFtzKzFdPW8/cmQobik6bmQobikpLHM9bz90ZChuKTpvZChuKX1sJiYodFtuKzFdPW8/bmQoYSk6cmQoYSkpfWZ1bmN0aW9uIFl1KHQsZSl7cmV0dXJuIG5nRGV2TW9kZSYmS24oQXJyYXkuaXNBcnJheShlKSwhMCwiRXhwZWN0ZWQgdGhhdCAndFN0eWxpbmdLZXknIGhhcyBiZWVuIHVud3JhcHBlZCIpLG51bGw9PT10fHxudWxsPT1lfHwoQXJyYXkuaXNBcnJheSh0KT90WzFdOnQpPT09ZXx8ISghQXJyYXkuaXNBcnJheSh0KXx8InN0cmluZyIhPXR5cGVvZiBlKSYmUXIodCxlKT49MH0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY29uc3QgcXU9e3RleHRFbmQ6MCxrZXk6MCxrZXlFbmQ6MCx2YWx1ZTowLHZhbHVlRW5kOjB9O2Z1bmN0aW9uIFp1KHQpe3JldHVybiB0LnN1YnN0cmluZyhxdS5rZXkscXUua2V5RW5kKX1mdW5jdGlvbiBYdSh0KXtyZXR1cm4gdC5zdWJzdHJpbmcocXUudmFsdWUscXUudmFsdWVFbmQpfWZ1bmN0aW9uIEt1KHQsZSl7Y29uc3Qgbj1xdS50ZXh0RW5kO3JldHVybiBuPT09ZT8tMTooZT1xdS5rZXlFbmQ9KGZ1bmN0aW9uIG8odCxlLG4pe2Zvcig7ZTxuJiZ0LmNoYXJDb2RlQXQoZSk+MzI7KWUrKztyZXR1cm4gZX0pKHQscXUua2V5PWUsbiksJHUodCxlLG4pKX1mdW5jdGlvbiBKdSh0LGUpe2NvbnN0IG49cXUudGV4dEVuZDtsZXQgbz1xdS5rZXk9JHUodCxlLG4pO3JldHVybiBuPT09bz8tMToobz1xdS5rZXlFbmQ9KGZ1bmN0aW9uIGkodCxlLG4pe2xldCBvO2Zvcig7ZTxuJiYoNDU9PT0obz10LmNoYXJDb2RlQXQoZSkpfHw5NT09PW98fCgtMzMmbyk+PTY1JiYoLTMzJm8pPD05MHx8bz49NDgmJm88PTU3KTspZSsrO3JldHVybiBlfSkodCxvLG4pLG89dGYodCxvLG4sNTgpLG89cXUudmFsdWU9JHUodCxvLG4pLG89cXUudmFsdWVFbmQ9KGZ1bmN0aW9uIGEodCxlLG4pe2xldCBvPS0xLGk9LTEsYT0tMSxyPWUscz1yO2Zvcig7cjxuOyl7Y29uc3QgbD10LmNoYXJDb2RlQXQocisrKTtpZig1OT09PWwpcmV0dXJuIHM7MzQ9PT1sfHwzOT09PWw/cz1yPWVmKHQsbCxyLG4pOmU9PT1yLTQmJjg1PT09YSYmODI9PT1pJiY3Nj09PW8mJjQwPT09bD9zPXI9ZWYodCw0MSxyLG4pOmw+MzImJihzPXIpLGE9aSxpPW8sbz0tMzMmbH1yZXR1cm4gc30pKHQsbyxuKSx0Zih0LG8sbiw1OSkpfWZ1bmN0aW9uIFF1KHQpe3F1LmtleT0wLHF1LmtleUVuZD0wLHF1LnZhbHVlPTAscXUudmFsdWVFbmQ9MCxxdS50ZXh0RW5kPXQubGVuZ3RofWZ1bmN0aW9uICR1KHQsZSxuKXtmb3IoO2U8biYmdC5jaGFyQ29kZUF0KGUpPD0zMjspZSsrO3JldHVybiBlfWZ1bmN0aW9uIHRmKHQsZSxuLG8pe3JldHVybihlPSR1KHQsZSxuKSk8biYmKG5nRGV2TW9kZSYmdC5jaGFyQ29kZUF0KGUpIT09byYmbmYodCxTdHJpbmcuZnJvbUNoYXJDb2RlKG8pLGUpLGUrKyksZX1mdW5jdGlvbiBlZih0LGUsbixvKXtsZXQgaT0tMSxhPW47Zm9yKDthPG87KXtjb25zdCBuPXQuY2hhckNvZGVBdChhKyspO2lmKG49PWUmJjkyIT09aSlyZXR1cm4gYTtpPTkyPT1uJiY5Mj09PWk/MDpufXRocm93IG5nRGV2TW9kZT9uZih0LFN0cmluZy5mcm9tQ2hhckNvZGUoZSksbyk6bmV3IEVycm9yfWZ1bmN0aW9uIG5mKHQsZSxuKXt0aHJvdyBuZ0Rldk1vZGUmJlhuKCJzdHJpbmciPT10eXBlb2YgdCwhMCwiU3RyaW5nIGV4cGVjdGVkIGhlcmUiKSxpbyhgTWFsZm9ybWVkIHN0eWxlIGF0IGxvY2F0aW9uICR7bn0gaW4gc3RyaW5nICdgK3Quc3Vic3RyaW5nKDAsbikrIls+PiIrdC5zdWJzdHJpbmcobixuKzEpKyI8PF0iK3Quc3Vic3RyKG4rMSkrYCcuIEV4cGVjdGluZyAnJHtlfScuYCl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIG9mKHQsZSxuKXtyZXR1cm4gZGYodCxlLG4sITEpLG9mfWZ1bmN0aW9uIGFmKHQsZSl7cmV0dXJuIGRmKHQsZSxudWxsLCEwKSxhZn1mdW5jdGlvbiByZih0KXtwZihoZixzZix0LCExKX1mdW5jdGlvbiBzZih0LGUpe2ZvcihsZXQgbj0oZnVuY3Rpb24gbih0KXtyZXR1cm4gUXUodCksSnUodCwkdSh0LDAscXUudGV4dEVuZCkpfSkoZSk7bj49MDtuPUp1KGUsbikpaGYodCxadShlKSxYdShlKSl9ZnVuY3Rpb24gbGYodCl7cGYoS3IsY2YsdCwhMCl9ZnVuY3Rpb24gY2YodCxlKXtmb3IobGV0IG49KGZ1bmN0aW9uIG4odCl7cmV0dXJuIFF1KHQpLEt1KHQsJHUodCwwLHF1LnRleHRFbmQpKX0pKGUpO24+PTA7bj1LdShlLG4pKUtyKHQsWnUoZSksITApfWZ1bmN0aW9uIGRmKHQsZSxuLG8pe2NvbnN0IGk9aWEoKSxhPWFhKCkscj1fYSgyKTthLmZpcnN0VXBkYXRlUGFzcyYmdWYoYSx0LHIsbyksZSE9PUtjJiZFbShpLHIsZSkmJmJmKGEsYS5kYXRhW05hKCldLGksaVsxMV0sdCxpW3IrMV09KGZ1bmN0aW9uIHModCxlKXtyZXR1cm4gbnVsbD09dHx8KCJzdHJpbmciPT10eXBlb2YgZT90Kz1lOiJvYmplY3QiPT10eXBlb2YgdCYmKHQ9Um4oR3ModCkpKSksdH0pKGUsbiksbyxyKX1mdW5jdGlvbiBwZih0LGUsbixvKXtjb25zdCBpPWFhKCksYT1fYSgyKTtpLmZpcnN0VXBkYXRlUGFzcyYmdWYoaSxudWxsLGEsbyk7Y29uc3Qgcj1pYSgpO2lmKG4hPT1LYyYmRW0ocixhLG4pKXtjb25zdCBzPWkuZGF0YVtOYSgpXTtpZihDZihzLG8pJiYhbWYoaSxhKSl7aWYobmdEZXZNb2RlKXtjb25zdCB0PWkuZGF0YVthXTtYbihBcnJheS5pc0FycmF5KHQpP3RbMV06dCwhMSwiU3R5bGluZyBsaW5rZWQgbGlzdCBzaGFkb3cgaW5wdXQgc2hvdWxkIGJlIG1hcmtlZCBhcyAnZmFsc2UnIil9bGV0IHQ9bz9zLmNsYXNzZXNXaXRob3V0SG9zdDpzLnN0eWxlc1dpdGhvdXRIb3N0O25nRGV2TW9kZSYmITE9PT1vJiZudWxsIT09dCYmWG4odC5lbmRzV2l0aCgiOyIpLCEwLCJFeHBlY3Rpbmcgc3RhdGljIHBvcnRpb24gdG8gZW5kIHdpdGggJzsnIiksbnVsbCE9PXQmJihuPVRuKHQsbnx8IiIpKSx4dShpLHMscixuLG8pfWVsc2UhKGZ1bmN0aW9uIGwodCxlLG4sbyxpLGEscixzKXtpPT09S2MmJihpPVRvKTtsZXQgbD0wLGM9MCxkPTA8aS5sZW5ndGg/aVswXTpudWxsLHA9MDxhLmxlbmd0aD9hWzBdOm51bGw7Zm9yKDtudWxsIT09ZHx8bnVsbCE9PXA7KXtuZ0Rldk1vZGUmJiRuKGwsOTk5LCJBcmUgd2Ugc3R1Y2sgaW4gaW5maW5pdGUgbG9vcD8iKSxuZ0Rldk1vZGUmJiRuKGMsOTk5LCJBcmUgd2Ugc3R1Y2sgaW4gaW5maW5pdGUgbG9vcD8iKTtjb25zdCBtPWw8aS5sZW5ndGg/aVtsKzFdOnZvaWQgMCx1PWM8YS5sZW5ndGg/YVtjKzFdOnZvaWQgMDtsZXQgZixnPW51bGw7ZD09PXA/KGwrPTIsYys9MixtIT09dSYmKGc9cCxmPXUpKTpudWxsPT09cHx8bnVsbCE9PWQmJmQ8cD8obCs9MixnPWQpOihuZ0Rldk1vZGUmJm9vKHAsIkV4cGVjdGluZyB0byBoYXZlIGEgdmFsaWQga2V5IiksYys9MixnPXAsZj11KSxudWxsIT09ZyYmYmYodCxlLG4sbyxnLGYscixzKSxkPWw8aS5sZW5ndGg/aVtsXTpudWxsLHA9YzxhLmxlbmd0aD9hW2NdOm51bGx9fSkoaSxzLHIsclsxMV0sclthKzFdLHJbYSsxXT0oZnVuY3Rpb24gcyh0LGUsbil7aWYobnVsbD09bnx8IiI9PT1uKXJldHVybiBUbztjb25zdCBvPVtdLGk9R3Mobik7aWYoQXJyYXkuaXNBcnJheShpKSlmb3IobGV0IGU9MDtlPGkubGVuZ3RoO2UrKyl0KG8saVtlXSwhMCk7ZWxzZSBpZigib2JqZWN0Ij09dHlwZW9mIGkpZm9yKGNvbnN0IGUgaW4gaSlpLmhhc093blByb3BlcnR5KGUpJiZ0KG8sZSxpW2VdKTtlbHNlInN0cmluZyI9PXR5cGVvZiBpP2UobyxpKTpuZ0Rldk1vZGUmJmlvKCJVbnN1cHBvcnRlZCBzdHlsaW5nIHR5cGUgIit0eXBlb2YgaSsiOiAiK2kpO3JldHVybiBvfSkodCxlLG4pLG8sYSl9fWZ1bmN0aW9uIG1mKHQsZSl7cmV0dXJuIGU+PXQuZXhwYW5kb1N0YXJ0SW5kZXh9ZnVuY3Rpb24gdWYodCxlLG4sbyl7bmdEZXZNb2RlJiZNaSh0KTtjb25zdCBpPXQuZGF0YTtpZihudWxsPT09aVtuKzFdKXtjb25zdCBhPWlbTmEoKV07bmdEZXZNb2RlJiZvbyhhLCJUTm9kZSBleHBlY3RlZCIpO2NvbnN0IHI9bWYodCxuKTtDZihhLG8pJiZudWxsPT09ZSYmIXImJihlPSExKSxlPShmdW5jdGlvbiBhKHQsZSxuLG8pe2NvbnN0IGk9eGEodCk7bGV0IGE9bz9lLnJlc2lkdWFsQ2xhc3NlczplLnJlc2lkdWFsU3R5bGVzO2lmKG51bGw9PT1pKTA9PT0obz9lLmNsYXNzQmluZGluZ3M6ZS5zdHlsZUJpbmRpbmdzKSYmKG49Z2Yobj1mZihudWxsLHQsZSxuLG8pLGUuYXR0cnMsbyksYT1udWxsKTtlbHNle2NvbnN0IHI9ZS5kaXJlY3RpdmVTdHlsaW5nTGFzdDtpZigtMT09PXJ8fHRbcl0hPT1pKWlmKG49ZmYoaSx0LGUsbixvKSxudWxsPT09YSl7bGV0IG49KGZ1bmN0aW9uIHIodCxlLG4pe2NvbnN0IG89bj9lLmNsYXNzQmluZGluZ3M6ZS5zdHlsZUJpbmRpbmdzO2lmKDAhPT1vZChvKSlyZXR1cm4gdFt0ZChvKV19KSh0LGUsbyk7dm9pZCAwIT09biYmQXJyYXkuaXNBcnJheShuKSYmKG49ZmYobnVsbCx0LGUsblsxXSxvKSxuPWdmKG4sZS5hdHRycyxvKSwoZnVuY3Rpb24gcyh0LGUsbixvKXtjb25zdCBpPW4/ZS5jbGFzc0JpbmRpbmdzOmUuc3R5bGVCaW5kaW5ncztuZ0Rldk1vZGUmJktuKG9kKGkpLDAsIkV4cGVjdGluZyB0byBoYXZlIGF0IGxlYXN0IG9uZSB0ZW1wbGF0ZSBzdHlsaW5nIGJpbmRpbmcuIiksdFt0ZChpKV09b30pKHQsZSxvLG4pKX1lbHNlIGE9KGZ1bmN0aW9uIGwodCxlLG4pe2xldCBvO2NvbnN0IGk9ZS5kaXJlY3RpdmVFbmQ7bmdEZXZNb2RlJiZLbihlLmRpcmVjdGl2ZVN0eWxpbmdMYXN0LC0xLCJCeSB0aGUgdGltZSB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGF0IGxlYXN0IG9uZSBob3N0QmluZGluZ3Mtbm9kZSBzdHlsaW5nIGluc3RydWN0aW9uIG11c3QgaGF2ZSBleGVjdXRlZC4iKTtmb3IobGV0IGE9MStlLmRpcmVjdGl2ZVN0eWxpbmdMYXN0O2E8aTthKyspbz1nZihvLHRbYV0uaG9zdEF0dHJzLG4pO3JldHVybiBnZihvLGUuYXR0cnMsbil9KSh0LGUsbyl9cmV0dXJuIHZvaWQgMCE9PWEmJihvP2UucmVzaWR1YWxDbGFzc2VzPWE6ZS5yZXNpZHVhbFN0eWxlcz1hKSxufSkoaSxhLGUsbyksKGZ1bmN0aW9uIHIodCxlLG4sbyxpLGEpe25nRGV2TW9kZSYmTWkoYWEoKSk7bGV0IHI9YT9lLmNsYXNzQmluZGluZ3M6ZS5zdHlsZUJpbmRpbmdzLHM9dGQociksbD1vZChyKTt0W29dPW47bGV0IGMsZD0hMTtpZihBcnJheS5pc0FycmF5KG4pKXtjb25zdCB0PW47Yz10WzFdLChudWxsPT09Y3x8UXIodCxjKT4wKSYmKGQ9ITApfWVsc2UgYz1uO2lmKGkpaWYoMCE9PWwpe2NvbnN0IGU9dGQodFtzKzFdKTt0W28rMV09JGMoZSxzKSwwIT09ZSYmKHRbZSsxXT1pZCh0W2UrMV0sbykpLHRbcysxXT0oZnVuY3Rpb24gcCh0LGUpe3JldHVybiBuZ0Rldk1vZGUmJlluKHQsImV4cGVjdGVkIG51bWJlciIpLG5nRGV2TW9kZSYmcW4oZSwwLDMyNzY3KSwxMzEwNzEmdHxlPDwxN30pKHRbcysxXSxvKX1lbHNlIHRbbysxXT0kYyhzLDApLDAhPT1zJiYodFtzKzFdPWlkKHRbcysxXSxvKSkscz1vO2Vsc2UgdFtvKzFdPSRjKGwsMCksbmdEZXZNb2RlJiZYbigwIT09cyYmMD09PWwsITEsIkFkZGluZyB0ZW1wbGF0ZSBiaW5kaW5ncyBhZnRlciBob3N0QmluZGluZ3MgaXMgbm90IGFsbG93ZWQuIiksMD09PXM/cz1vOnRbbCsxXT1pZCh0W2wrMV0sbyksbD1vO2QmJih0W28rMV09bmQodFtvKzFdKSksR3UodCxjLG8sITApLEd1KHQsYyxvLCExKSwoZnVuY3Rpb24gbSh0LGUsbixvLGkpe2NvbnN0IGE9aT90LnJlc2lkdWFsQ2xhc3Nlczp0LnJlc2lkdWFsU3R5bGVzO251bGwhPWEmJiJzdHJpbmciPT10eXBlb2YgZSYmUXIoYSxlKT49MCYmKG5bbysxXT1yZChuW28rMV0pKX0pKGUsYyx0LG8sYSkscj0kYyhzLGwpLGE/ZS5jbGFzc0JpbmRpbmdzPXI6ZS5zdHlsZUJpbmRpbmdzPXJ9KShpLGEsZSxuLHIsbyl9fWZ1bmN0aW9uIGZmKHQsZSxuLG8saSl7bGV0IGE9bnVsbDtjb25zdCByPW4uZGlyZWN0aXZlRW5kO2xldCBzPW4uZGlyZWN0aXZlU3R5bGluZ0xhc3Q7Zm9yKC0xPT09cz9zPW4uZGlyZWN0aXZlU3RhcnQ6cysrO3M8ciYmKGE9ZVtzXSxuZ0Rldk1vZGUmJm9vKGEsImV4cGVjdGVkIHRvIGJlIGRlZmluZWQiKSxvPWdmKG8sYS5ob3N0QXR0cnMsaSksYSE9PXQpOylzKys7cmV0dXJuIG51bGwhPT10JiYobi5kaXJlY3RpdmVTdHlsaW5nTGFzdD1zKSxvfWZ1bmN0aW9uIGdmKHQsZSxuKXtjb25zdCBvPW4/MToyO2xldCBpPS0xO2lmKG51bGwhPT1lKWZvcihsZXQgYT0wO2E8ZS5sZW5ndGg7YSsrKXtjb25zdCByPWVbYV07Im51bWJlciI9PXR5cGVvZiByP2k9cjppPT09byYmKEFycmF5LmlzQXJyYXkodCl8fCh0PXZvaWQgMD09PXQ/W106WyIiLHRdKSxLcih0LHIsISFufHxlWysrYV0pKX1yZXR1cm4gdm9pZCAwPT09dD9udWxsOnR9ZnVuY3Rpb24gaGYodCxlLG4pe0tyKHQsZSxHcyhuKSl9ZnVuY3Rpb24gYmYodCxlLG4sbyxpLGEscixzKXtpZighKDMmZS50eXBlKSlyZXR1cm47Y29uc3QgbD10LmRhdGEsYz1sW3MrMV07X2YoYWQoYyk/eWYobCxlLG4saSxvZChjKSxyKTp2b2lkIDApfHwoX2YoYSl8fGVkKGMpJiYoYT15ZihsLG51bGwsbixpLHMscikpLChmdW5jdGlvbiBkKHQsZSxuLG8saSl7Y29uc3QgYT1WaSh0KTtpZihlKWk/KG5nRGV2TW9kZSYmbmdEZXZNb2RlLnJlbmRlcmVyQWRkQ2xhc3MrKyxhP3QuYWRkQ2xhc3MobixvKToobmdEZXZNb2RlJiZvbyhuLmNsYXNzTGlzdCwiSFRNTEVsZW1lbnQgZXhwZWN0ZWQiKSxuLmNsYXNzTGlzdC5hZGQobykpKToobmdEZXZNb2RlJiZuZ0Rldk1vZGUucmVuZGVyZXJSZW1vdmVDbGFzcysrLGE/dC5yZW1vdmVDbGFzcyhuLG8pOm4uY2xhc3NMaXN0LnJlbW92ZShvKSk7ZWxzZXtsZXQgZT0tMT09PW8uaW5kZXhPZigiLSIpP3ZvaWQgMDp0Yy5EYXNoQ2FzZTtpZihudWxsPT1pKW5nRGV2TW9kZSYmbmdEZXZNb2RlLnJlbmRlcmVyUmVtb3ZlU3R5bGUrKyxhP3QucmVtb3ZlU3R5bGUobixvLGUpOm4uc3R5bGUucmVtb3ZlUHJvcGVydHkobyk7ZWxzZXtjb25zdCByPSJzdHJpbmciPT10eXBlb2YgaSYmaS5lbmRzV2l0aCgiIWltcG9ydGFudCIpO3ImJihpPWkuc2xpY2UoMCwtMTApLGV8PXRjLkltcG9ydGFudCksbmdEZXZNb2RlJiZuZ0Rldk1vZGUucmVuZGVyZXJTZXRTdHlsZSsrLGE/dC5zZXRTdHlsZShuLG8saSxlKToobmdEZXZNb2RlJiZvbyhuLnN0eWxlLCJIVE1MRWxlbWVudCBleHBlY3RlZCIpLG4uc3R5bGUuc2V0UHJvcGVydHkobyxpLHI/ImltcG9ydGFudCI6IiIpKX19fSkobyxyLFdpKE5hKCksbiksaSxhKSl9ZnVuY3Rpb24geWYodCxlLG4sbyxpLGEpe2NvbnN0IHI9bnVsbD09PWU7bGV0IHM7Zm9yKDtpPjA7KXtjb25zdCBlPXRbaV0sYT1BcnJheS5pc0FycmF5KGUpLGw9YT9lWzFdOmUsYz1udWxsPT09bDtsZXQgZD1uW2krMV07ZD09PUtjJiYoZD1jP1RvOnZvaWQgMCk7bGV0IHA9Yz9KcihkLG8pOmw9PT1vP2Q6dm9pZCAwO2lmKGEmJiFfZihwKSYmKHA9SnIoZSxvKSksX2YocCkmJihzPXAscikpcmV0dXJuIHM7Y29uc3QgbT10W2krMV07aT1yP3RkKG0pOm9kKG0pfWlmKG51bGwhPT1lKXtsZXQgdD1hP2UucmVzaWR1YWxDbGFzc2VzOmUucmVzaWR1YWxTdHlsZXM7bnVsbCE9dCYmKHM9SnIodCxvKSl9cmV0dXJuIHN9ZnVuY3Rpb24gX2YodCl7cmV0dXJuIHZvaWQgMCE9PXR9ZnVuY3Rpb24gQ2YodCxlKXtyZXR1cm4gMCE9KHQuZmxhZ3MmKGU/MTY6MzIpKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovZnVuY3Rpb24gTWYodCxlPSIiKXtjb25zdCBuPWlhKCksbz1hYSgpLGk9dCtvaTtuZ0Rldk1vZGUmJlhuKGhhKCksby5iaW5kaW5nU3RhcnRJbmRleCwidGV4dCBub2RlcyBzaG91bGQgYmUgY3JlYXRlZCBiZWZvcmUgYW55IGJpbmRpbmdzIiksbmdEZXZNb2RlJiZybyhuLGkpO2NvbnN0IGE9by5maXJzdENyZWF0ZVBhc3M/TGQobyxpLDEsZSxudWxsKTpvLmRhdGFbaV0scj1uW2ldPWNjKG5bMTFdLGUpO1NjKG8sbixyLGEpLGRhKGEsITEpfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiB2Zih0KXtyZXR1cm4geGYoIiIsdCwiIiksdmZ9ZnVuY3Rpb24geGYodCxlLG4pe2NvbnN0IG89aWEoKSxpPXptKG8sdCxlLG4pO3JldHVybiBpIT09S2MmJlRwKG8sTmEoKSxpKSx4Zn1mdW5jdGlvbiBPZih0LGUsbixvLGkpe2NvbnN0IGE9aWEoKSxyPUhtKGEsdCxlLG4sbyxpKTtyZXR1cm4gciE9PUtjJiZUcChhLE5hKCksciksT2Z9ZnVuY3Rpb24gUGYodCxlLG4sbyxpLGEscil7Y29uc3Qgcz1pYSgpLGw9Rm0ocyx0LGUsbixvLGksYSxyKTtyZXR1cm4gbCE9PUtjJiZUcChzLE5hKCksbCksUGZ9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpmdW5jdGlvbiB3Zih0LGUsbil7cGYoS3IsY2Ysem0oaWEoKSx0LGUsbiksITApfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KZnVuY3Rpb24ga2YodCxlLG4pe2NvbnN0IG89aWEoKSxpPXlhKCk7aWYoRW0obyxpLGUpKXtjb25zdCBhPWFhKCkscj16YSgpOyRkKGEscixvLHQsZSxvWzExXSxuLCEwKSxuZ0Rldk1vZGUmJndwKGEuZGF0YSxyLHQsaSl9cmV0dXJuIGtmfWZ1bmN0aW9uIFNmKHQsZSxuKXtjb25zdCBvPWlhKCksaT15YSgpO2lmKEVtKG8saSxlKSl7Y29uc3QgYT1hYSgpLHI9emEoKTskZChhLHIsbyx0LGUsRXAoeGEoYS5kYXRhKSxyLG8pLG4sITApLG5nRGV2TW9kZSYmd3AoYS5kYXRhLHIsdCxpKX1yZXR1cm4gU2Z9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLyJ1bmRlZmluZWQiPT10eXBlb2YgbmdJMThuQ2xvc3VyZU1vZGUmJihFby5uZ0kxOG5DbG9zdXJlTW9kZT0idW5kZWZpbmVkIiE9dHlwZW9mIGdvb2cmJiJmdW5jdGlvbiI9PXR5cGVvZiBnb29nLmdldE1zZyk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NvbnN0IERmPXZvaWQgMDt2YXIgRWY9WyJlbiIsW1siYSIsInAiXSxbIkFNIiwiUE0iXSxEZl0sW1siQU0iLCJQTSJdLERmLERmXSxbWyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0sWyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sWyJTdSIsIk1vIiwiVHUiLCJXZSIsIlRoIiwiRnIiLCJTYSJdXSxEZixbWyJKIiwiRiIsIk0iLCJBIiwiTSIsIkoiLCJKIiwiQSIsIlMiLCJPIiwiTiIsIkQiXSxbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLFsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXV0sRGYsW1siQiIsIkEiXSxbIkJDIiwiQUQiXSxbIkJlZm9yZSBDaHJpc3QiLCJBbm5vIERvbWluaSJdXSwwLFs2LDBdLFsiTS9kL3l5IiwiTU1NIGQsIHkiLCJNTU1NIGQsIHkiLCJFRUVFLCBNTU1NIGQsIHkiXSxbImg6bW0gYSIsImg6bW06c3MgYSIsImg6bW06c3MgYSB6IiwiaDptbTpzcyBhIHp6enoiXSxbInsxfSwgezB9IixEZiwiezF9ICdhdCcgezB9IixEZl0sWyIuIiwiLCIsIjsiLCIlIiwiKyIsIi0iLCJFIiwiw5ciLCLigLAiLCLiiJ4iLCJOYU4iLCI6Il0sWyIjLCMjMC4jIyMiLCIjLCMjMCUiLCLCpCMsIyMwLjAwIiwiI0UwIl0sIlVTRCIsIiQiLCJVUyBEb2xsYXIiLHt9LCJsdHIiLGZ1bmN0aW9uIEFmKHQpe2xldCBlPU1hdGguZmxvb3IoTWF0aC5hYnModCkpLG49dC50b1N0cmluZygpLnJlcGxhY2UoL15bXi5dKlwuPy8sIiIpLmxlbmd0aDtyZXR1cm4gMT09PWUmJjA9PT1uPzE6NX1dOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9sZXQgUmY9e307ZnVuY3Rpb24gVGYodCl7Y29uc3QgZT0oZnVuY3Rpb24gbih0KXtyZXR1cm4gdC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL18vZywiLSIpfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8pKHQpO2xldCBvPUlmKGUpO2lmKG8pcmV0dXJuIG87Y29uc3QgaT1lLnNwbGl0KCItIilbMF07aWYobz1JZihpKSxvKXJldHVybiBvO2lmKCJlbiI9PT1pKXJldHVybiBFZjt0aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgbG9jYWxlIGRhdGEgZm9yIHRoZSBsb2NhbGUgIiR7dH0iLmApfWZ1bmN0aW9uIE5mKHQpe3JldHVybiBUZih0KVt6Zi5QbHVyYWxDYXNlXX1mdW5jdGlvbiBJZih0KXtyZXR1cm4gdCBpbiBSZnx8KFJmW3RdPUVvLm5nJiZFby5uZy5jb21tb24mJkVvLm5nLmNvbW1vbi5sb2NhbGVzJiZFby5uZy5jb21tb24ubG9jYWxlc1t0XSksUmZbdF19dmFyIHpmOyEoZnVuY3Rpb24odCl7dFt0LkxvY2FsZUlkPTBdPSJMb2NhbGVJZCIsdFt0LkRheVBlcmlvZHNGb3JtYXQ9MV09IkRheVBlcmlvZHNGb3JtYXQiLHRbdC5EYXlQZXJpb2RzU3RhbmRhbG9uZT0yXT0iRGF5UGVyaW9kc1N0YW5kYWxvbmUiLHRbdC5EYXlzRm9ybWF0PTNdPSJEYXlzRm9ybWF0Iix0W3QuRGF5c1N0YW5kYWxvbmU9NF09IkRheXNTdGFuZGFsb25lIix0W3QuTW9udGhzRm9ybWF0PTVdPSJNb250aHNGb3JtYXQiLHRbdC5Nb250aHNTdGFuZGFsb25lPTZdPSJNb250aHNTdGFuZGFsb25lIix0W3QuRXJhcz03XT0iRXJhcyIsdFt0LkZpcnN0RGF5T2ZXZWVrPThdPSJGaXJzdERheU9mV2VlayIsdFt0LldlZWtlbmRSYW5nZT05XT0iV2Vla2VuZFJhbmdlIix0W3QuRGF0ZUZvcm1hdD0xMF09IkRhdGVGb3JtYXQiLHRbdC5UaW1lRm9ybWF0PTExXT0iVGltZUZvcm1hdCIsdFt0LkRhdGVUaW1lRm9ybWF0PTEyXT0iRGF0ZVRpbWVGb3JtYXQiLHRbdC5OdW1iZXJTeW1ib2xzPTEzXT0iTnVtYmVyU3ltYm9scyIsdFt0Lk51bWJlckZvcm1hdHM9MTRdPSJOdW1iZXJGb3JtYXRzIix0W3QuQ3VycmVuY3lDb2RlPTE1XT0iQ3VycmVuY3lDb2RlIix0W3QuQ3VycmVuY3lTeW1ib2w9MTZdPSJDdXJyZW5jeVN5bWJvbCIsdFt0LkN1cnJlbmN5TmFtZT0xN109IkN1cnJlbmN5TmFtZSIsdFt0LkN1cnJlbmNpZXM9MThdPSJDdXJyZW5jaWVzIix0W3QuRGlyZWN0aW9uYWxpdHk9MTldPSJEaXJlY3Rpb25hbGl0eSIsdFt0LlBsdXJhbENhc2U9MjBdPSJQbHVyYWxDYXNlIix0W3QuRXh0cmFEYXRhPTIxXT0iRXh0cmFEYXRhIn0pKHpmfHwoemY9e30pKTtjb25zdCBIZj1bInplcm8iLCJvbmUiLCJ0d28iLCJmZXciLCJtYW55Il0sRmY9ImVuLVVTIixMZj17bWFya2VyOiJlbGVtZW50In0sQmY9e21hcmtlcjoiSUNVIn07dmFyIFZmOyEoZnVuY3Rpb24odCl7dFt0LlNISUZUPTJdPSJTSElGVCIsdFt0LkFQUEVORF9FQUdFUkxZPTFdPSJBUFBFTkRfRUFHRVJMWSIsdFt0LkNPTU1FTlQ9Ml09IkNPTU1FTlQifSkoVmZ8fChWZj17fSkpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KbGV0IGpmPUZmO2Z1bmN0aW9uIFVmKHQpe29vKHQsIkV4cGVjdGVkIGxvY2FsZUlkIHRvIGJlIGRlZmluZWQiKSwic3RyaW5nIj09dHlwZW9mIHQmJihqZj10LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXy9nLCItIikpfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KZnVuY3Rpb24gV2YodCxlLG4pe2NvbnN0IG89ZS5pbnNlcnRCZWZvcmVJbmRleCxpPUFycmF5LmlzQXJyYXkobyk/b1swXTpvO3JldHVybiBudWxsPT09aT9PYyh0LDAsbik6KG5nRGV2TW9kZSYmcm8obixpKSxVaShuW2ldKSl9ZnVuY3Rpb24gR2YodCxlLG4sbyxpKXtjb25zdCBhPWUuaW5zZXJ0QmVmb3JlSW5kZXg7aWYoQXJyYXkuaXNBcnJheShhKSl7bmdEZXZNb2RlJiZhbyhvKTtsZXQgcj1vLHM9bnVsbDtpZigzJmUudHlwZXx8KHM9cixyPWkpLG51bGwhPT1yJiYwPT0oMiZlLmZsYWdzKSlmb3IobGV0IGU9MTtlPGEubGVuZ3RoO2UrKylfYyh0LHIsblthW2VdXSxzLCExKX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIFlmKHQsZSl7aWYobmdEZXZNb2RlJiZYbihlLmluc2VydEJlZm9yZUluZGV4LG51bGwsIldlIGV4cGVjdCB0aGF0IGluc2VydEJlZm9yZUluZGV4IGlzIG5vdCBzZXQiKSx0LnB1c2goZSksdC5sZW5ndGg+MSlmb3IobGV0IG49dC5sZW5ndGgtMjtuPj0wO24tLSl7Y29uc3Qgbz10W25dO3FmKG8pfHxaZihvLGUpJiZudWxsPT09WGYobykmJktmKG8sZS5pbmRleCl9fWZ1bmN0aW9uIHFmKHQpe3JldHVybiEoNjQmdC50eXBlKX1mdW5jdGlvbiBaZih0LGUpe3JldHVybiBxZihlKXx8dC5pbmRleD5lLmluZGV4fWZ1bmN0aW9uIFhmKHQpe2NvbnN0IGU9dC5pbnNlcnRCZWZvcmVJbmRleDtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9lWzBdOmV9ZnVuY3Rpb24gS2YodCxlKXtjb25zdCBuPXQuaW5zZXJ0QmVmb3JlSW5kZXg7QXJyYXkuaXNBcnJheShuKT9uWzBdPWU6KGtjKFdmLEdmKSx0Lmluc2VydEJlZm9yZUluZGV4PWUpfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiBKZih0LGUpe2NvbnN0IG49dC5kYXRhW2VdO2lmKG51bGw9PT1ufHwic3RyaW5nIj09dHlwZW9mIG4pcmV0dXJuIG51bGw7IW5nRGV2TW9kZXx8bi5oYXNPd25Qcm9wZXJ0eSgidFZpZXdzIil8fG4uaGFzT3duUHJvcGVydHkoImN1cnJlbnRDYXNlTFZpZXdJbmRleCIpfHxpbygiV2UgZXhwZWN0IHRvIGdldCAnbnVsbCd8J1RJY3UnfCdUSWN1Q29udGFpbmVyJywgYnV0IGdvdDogIituKTtjb25zdCBvPW4uaGFzT3duUHJvcGVydHkoImN1cnJlbnRDYXNlTFZpZXdJbmRleCIpP246bi52YWx1ZTtyZXR1cm4gbmdEZXZNb2RlJiZnaShvKSxvfWZ1bmN0aW9uIFFmKHQsZSxuKXtjb25zdCBvPUJkKHQsbiw2NCxudWxsLG51bGwpO3JldHVybiBZZihlLG8pLG99ZnVuY3Rpb24gJGYodCxlKXtjb25zdCBuPWVbdC5jdXJyZW50Q2FzZUxWaWV3SW5kZXhdO3JldHVybiBudWxsPT09bj9uOm48MD9+bjpufWZ1bmN0aW9uIHRnKHQpe3JldHVybiB0Pj4+MTd9ZnVuY3Rpb24gZWcodCl7cmV0dXJuKDEzMTA3MCZ0KT4+PjF9ZnVuY3Rpb24gbmcodCl7cmV0dXJuIDEmdH0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmxldCBvZz0wLGlnPTA7ZnVuY3Rpb24gYWcodCxlLG4sbyl7bmdEZXZNb2RlJiZhbyhvKTtjb25zdCBpPW5bMTFdO2xldCBhLHI9bnVsbDtmb3IobGV0IHM9MDtzPGUubGVuZ3RoO3MrKyl7Y29uc3QgbD1lW3NdO2lmKCJzdHJpbmciPT10eXBlb2YgbCl7Y29uc3QgdD1lWysrc107bnVsbD09PW5bdF0mJihuZ0Rldk1vZGUmJm5nRGV2TW9kZS5yZW5kZXJlckNyZWF0ZVRleHROb2RlKyssbmdEZXZNb2RlJiZybyhuLHQpLG5bdF09Y2MoaSxsKSl9ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIGwpc3dpdGNoKDEmbCl7Y2FzZSAwOmNvbnN0IGM9dGcobCk7bGV0IGQscDtpZihudWxsPT09ciYmKHI9YyxhPXZjKGksbykpLGM9PT1yPyhkPW8scD1hKTooZD1udWxsLHA9VWkobltjXSkpLG51bGwhPT1wKXtuZ0Rldk1vZGUmJmFvKHApO2NvbnN0IGU9ZWcobCk7bmdEZXZNb2RlJiZlbyhlLG9pLCJNaXNzaW5nIHJlZiIpO2NvbnN0IG89bltlXTtuZ0Rldk1vZGUmJmFvKG8pLF9jKGkscCxvLGQsITEpO2NvbnN0IGE9SmYodCxlKTtpZihudWxsIT09YSYmIm9iamVjdCI9PXR5cGVvZiBhKXtuZ0Rldk1vZGUmJmdpKGEpO2NvbnN0IGU9JGYoYSxuKTtudWxsIT09ZSYmYWcodCxhLmNyZWF0ZVtlXSxuLG5bYS5hbmNob3JJZHhdKX19YnJlYWs7Y2FzZSAxOmNvbnN0IG09ZVsrK3NdLHU9ZVsrK3NdO21wKGksV2kobD4+PjEsbiksbnVsbCxudWxsLG0sdSxudWxsKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGRldGVybWluZSB0aGUgdHlwZSBvZiBtdXRhdGUgb3BlcmF0aW9uIGZvciAiJHtsfSJgKX1lbHNlIHN3aXRjaChsKXtjYXNlIEJmOmNvbnN0IHQ9ZVsrK3NdLG89ZVsrK3NdO251bGw9PT1uW29dJiYobmdEZXZNb2RlJiZYbih0eXBlb2YgdCwic3RyaW5nIixgRXhwZWN0ZWQgIiR7dH0iIHRvIGJlIGEgY29tbWVudCBub2RlIHZhbHVlYCksbmdEZXZNb2RlJiZuZ0Rldk1vZGUucmVuZGVyZXJDcmVhdGVDb21tZW50KyssbmdEZXZNb2RlJiZ2aShuLG8pLFZsKG5bb109cGMoaSx0KSxuKSk7YnJlYWs7Y2FzZSBMZjpjb25zdCBhPWVbKytzXSxyPWVbKytzXTtudWxsPT09bltyXSYmKG5nRGV2TW9kZSYmWG4odHlwZW9mIGEsInN0cmluZyIsYEV4cGVjdGVkICIke2F9IiB0byBiZSBhbiBlbGVtZW50IG5vZGUgdGFnIG5hbWVgKSxuZ0Rldk1vZGUmJm5nRGV2TW9kZS5yZW5kZXJlckNyZWF0ZUVsZW1lbnQrKyxuZ0Rldk1vZGUmJnZpKG4sciksVmwobltyXT1tYyhpLGEsbnVsbCksbikpO2JyZWFrO2RlZmF1bHQ6bmdEZXZNb2RlJiZpbyhgVW5hYmxlIHRvIGRldGVybWluZSB0aGUgdHlwZSBvZiBtdXRhdGUgb3BlcmF0aW9uIGZvciAiJHtsfSJgKX19fWZ1bmN0aW9uIHJnKHQsZSxuLG8saSl7Zm9yKGxldCBhPTA7YTxuLmxlbmd0aDthKyspe2NvbnN0IHI9blthXSxzPW5bKythXTtpZihyJmkpe2xldCBpPSIiO2ZvcihsZXQgcj1hKzE7cjw9YStzO3IrKyl7Y29uc3QgYT1uW3JdO2lmKCJzdHJpbmciPT10eXBlb2YgYSlpKz1hO2Vsc2UgaWYoIm51bWJlciI9PXR5cGVvZiBhKWlmKGE8MClpKz1WbihlW28tYV0pO2Vsc2V7Y29uc3Qgcz1hPj4+Mjtzd2l0Y2goMyZhKXtjYXNlIDE6Y29uc3QgYT1uWysrcl0sbD1uWysrcl0sYz10LmRhdGFbc107bmdEZXZNb2RlJiZvbyhjLCJFeHBlcnRpbmcgVE5vZGUgb3Igc3RyaW5nIiksInN0cmluZyI9PXR5cGVvZiBjP21wKGVbMTFdLGVbc10sbnVsbCxjLGEsaSxsKTokZCh0LGMsZSxhLGksZVsxMV0sbCwhMSk7YnJlYWs7Y2FzZSAwOmNvbnN0IGQ9ZVtzXTtudWxsIT09ZCYmZGMoZVsxMV0sZCxpKTticmVhaztjYXNlIDI6bGcodCxKZih0LHMpLGUsaSk7YnJlYWs7Y2FzZSAzOnNnKHQsSmYodCxzKSxvLGUpfX19fWVsc2V7Y29uc3QgaT1uW2ErMV07aWYoaT4wJiYzPT0oMyZpKSl7Y29uc3Qgbj1KZih0LGk+Pj4yKTtlW24uY3VycmVudENhc2VMVmlld0luZGV4XTwwJiZzZyh0LG4sbyxlKX19YSs9c319ZnVuY3Rpb24gc2codCxlLG4sbyl7bmdEZXZNb2RlJiZybyhvLGUuY3VycmVudENhc2VMVmlld0luZGV4KTtsZXQgaT1vW2UuY3VycmVudENhc2VMVmlld0luZGV4XTtpZihudWxsIT09aSl7bGV0IGE9b2c7aTwwJiYoaT1vW2UuY3VycmVudENhc2VMVmlld0luZGV4XT1+aSxhPS0xKSxyZyh0LG8sZS51cGRhdGVbaV0sbixhKX19ZnVuY3Rpb24gbGcodCxlLG4sbyl7Y29uc3QgaT0oZnVuY3Rpb24gYSh0LGUpe2xldCBuPXQuY2FzZXMuaW5kZXhPZihlKTtpZigtMT09PW4pc3dpdGNoKHQudHlwZSl7Y2FzZSAxOntjb25zdCBvPShmdW5jdGlvbiBpKHQsZSl7Y29uc3Qgbj1OZihlKShwYXJzZUludCh0LDEwKSksbz1IZltuXTtyZXR1cm4gdm9pZCAwIT09bz9vOiJvdGhlciJ9KShlLChmdW5jdGlvbiBvKCl7cmV0dXJuIGpmfSkoKSk7bj10LmNhc2VzLmluZGV4T2YobyksLTE9PT1uJiYib3RoZXIiIT09byYmKG49dC5jYXNlcy5pbmRleE9mKCJvdGhlciIpKTticmVha31jYXNlIDA6bj10LmNhc2VzLmluZGV4T2YoIm90aGVyIil9cmV0dXJuLTE9PT1uP251bGw6bn0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovKShlLG8pO2lmKCRmKGUsbikhPT1pJiYoY2codCxlLG4pLG5bZS5jdXJyZW50Q2FzZUxWaWV3SW5kZXhdPW51bGw9PT1pP251bGw6fmksbnVsbCE9PWkpKXtjb25zdCBvPW5bZS5hbmNob3JJZHhdO28mJihuZ0Rldk1vZGUmJmFvKG8pLGFnKHQsZS5jcmVhdGVbaV0sbixvKSl9fWZ1bmN0aW9uIGNnKHQsZSxuKXtsZXQgbz0kZihlLG4pO2lmKG51bGwhPT1vKXtjb25zdCBpPWUucmVtb3ZlW29dO2ZvcihsZXQgZT0wO2U8aS5sZW5ndGg7ZSsrKXtjb25zdCBvPWlbZV07aWYobz4wKXtjb25zdCB0PVdpKG8sbik7bnVsbCE9PXQmJlJjKG5bMTFdLHQpfWVsc2UgY2codCxKZih0LH5vKSxuKX19fWZ1bmN0aW9uIGRnKCl7Y29uc3QgdD1bXTtsZXQgZSxuLG89LTE7ZnVuY3Rpb24gaSh0LGUpe289MDtjb25zdCBpPSRmKHQsZSk7bnVsbCE9PWk/KG5nRGV2TW9kZSYmcW4oaSwwLHQuY2FzZXMubGVuZ3RoLTEpLG49dC5yZW1vdmVbaV0pOm49Tm99ZnVuY3Rpb24gYSgpe2lmKG88bi5sZW5ndGgpe2NvbnN0IHI9bltvKytdO2lmKG5nRGV2TW9kZSYmWW4ociwiRXhwZWN0aW5nIE9wQ29kZSBudW1iZXIiKSxyPjApe2NvbnN0IHQ9ZVtyXTtyZXR1cm4gbmdEZXZNb2RlJiZhbyh0KSx0fXt0LnB1c2gobyxuKTtjb25zdCBzPWVbMV0uZGF0YVt+cl07cmV0dXJuIG5nRGV2TW9kZSYmZ2kocyksaShzLGUpLGEoKX19cmV0dXJuIDA9PT10Lmxlbmd0aD9udWxsOihuPXQucG9wKCksbz10LnBvcCgpLGEoKSl9cmV0dXJuIGZ1bmN0aW9uIHIobixvKXtmb3IoZT1vO3QubGVuZ3RoOyl0LnBvcCgpO3JldHVybiBuZ0Rldk1vZGUmJm1pKG4sbyksaShuLnZhbHVlLG8pLGF9fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiBwZyh0KXtjb25zdCBlPXR8fChBcnJheS5pc0FycmF5KHRoaXMpP3RoaXM6W10pO2xldCBuPVtdO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKXtjb25zdCBvPWVbdCsrXSxpPShvJlZmLkFQUEVORF9FQUdFUkxZKT09PVZmLkFQUEVORF9FQUdFUkxZLGE9bz4+PlZmLlNISUZUO24ucHVzaChgbFZpZXdbJHthfV0gPSBkb2N1bWVudC4keyhvJlZmLkNPTU1FTlQpPT09VmYuQ09NTUVOVD8iY3JlYXRlQ29tbWVudCI6ImNyZWF0ZVRleHQifSgke0pTT04uc3RyaW5naWZ5KGVbdF0pfSk7YCksaSYmbi5wdXNoKGBwYXJlbnQuYXBwZW5kQ2hpbGQobFZpZXdbJHthfV0pO2ApfXJldHVybiBufWZ1bmN0aW9uIG1nKHQpe2NvbnN0IGU9bmV3IGdnKHR8fChBcnJheS5pc0FycmF5KHRoaXMpP3RoaXM6W10pKTtsZXQgbj1bXTtmdW5jdGlvbiBvKHQpe2NvbnN0IG49dD4+PjI7c3dpdGNoKDMmdCl7Y2FzZSAwOnJldHVybmAobFZpZXdbJHtufV0gYXMgVGV4dCkudGV4dENvbnRlbnQgPSAkJCRgO2Nhc2UgMTpjb25zdCB0PWUuY29uc3VtZVN0cmluZygpLG89ZS5jb25zdW1lRnVuY3Rpb24oKTtyZXR1cm5gKGxWaWV3WyR7bn1dIGFzIEVsZW1lbnQpLnNldEF0dHJpYnV0ZSgnJHt0fScsICR7bz9gKCR7b30pKCQkJClgOiIkJCQifSlgO2Nhc2UgMjpyZXR1cm5gaWN1U3dpdGNoQ2FzZSgke259LCAkJCQpYDtjYXNlIDM6cmV0dXJuYGljdVVwZGF0ZUNhc2UoJHtufSlgfXRocm93IG5ldyBFcnJvcigidW5leHBlY3RlZCBPcENvZGUiKX1mb3IoO2UuaGFzTW9yZSgpOyl7bGV0IHQ9ZS5jb25zdW1lTnVtYmVyKCksaT1lLmNvbnN1bWVOdW1iZXIoKTtjb25zdCBhPWUuaStpLHI9W107bGV0IHM9IiI7Zm9yKDtlLmk8YTspe2xldCB0PWUuY29uc3VtZU51bWJlck9yU3RyaW5nKCk7aWYoInN0cmluZyI9PXR5cGVvZiB0KXMrPXQ7ZWxzZSBpZih0PDApcys9IiR7bFZpZXdbaSIrdCsiXX0iO2Vsc2V7Y29uc3QgZT1vKHQpO3IucHVzaChlLnJlcGxhY2UoIiQkJCIsImAiK3MrImAiKSsiOyIpLHM9IiJ9fW4ucHVzaChgaWYgKG1hc2sgJiAwYiR7dC50b1N0cmluZygyKX0pIHsgJHtyLmpvaW4oIiAiKX0gfWApfXJldHVybiBufWZ1bmN0aW9uIHVnKHQpe2NvbnN0IGU9bmV3IGdnKHR8fChBcnJheS5pc0FycmF5KHRoaXMpP3RoaXM6W10pKTtsZXQgbj1bXTtmdW5jdGlvbiBvKHQpe2NvbnN0IG49dGcodCksbz1lZyh0KTtzd2l0Y2gobmcodCkpe2Nhc2UgMDpyZXR1cm5gKGxWaWV3WyR7bn1dIGFzIEVsZW1lbnQpLmFwcGVuZENoaWxkKGxWaWV3WyR7aX1dKWA7Y2FzZSAxOnJldHVybmAobFZpZXdbJHtvfV0gYXMgRWxlbWVudCkuc2V0QXR0cmlidXRlKCIke2UuY29uc3VtZVN0cmluZygpfSIsICIke2UuY29uc3VtZVN0cmluZygpfSIpYH10aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgT3BDb2RlOiAiK25nKHQpKX1sZXQgaT0tMTtmb3IoO2UuaGFzTW9yZSgpOyl7bGV0IHQ9ZS5jb25zdW1lTnVtYmVyU3RyaW5nT3JNYXJrZXIoKTtpZih0PT09QmYpe2NvbnN0IHQ9ZS5jb25zdW1lU3RyaW5nKCk7aT1lLmNvbnN1bWVOdW1iZXIoKSxuLnB1c2goYGxWaWV3WyR7aX1dID0gZG9jdW1lbnQuY3JlYXRlQ29tbWVudCgiJHt0fSIpYCl9ZWxzZSBpZih0PT09TGYpe2NvbnN0IHQ9ZS5jb25zdW1lU3RyaW5nKCk7aT1lLmNvbnN1bWVOdW1iZXIoKSxuLnB1c2goYGxWaWV3WyR7aX1dID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiJHt0fSIpYCl9ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIHQpaT1lLmNvbnN1bWVOdW1iZXIoKSxuLnB1c2goYGxWaWV3WyR7aX1dID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiR7dH0iKWApO2Vsc2V7aWYoIm51bWJlciIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCB2YWx1ZSIpO3tjb25zdCBlPW8odCk7ZSYmbi5wdXNoKGUpfX19cmV0dXJuIG59ZnVuY3Rpb24gZmcodCl7Y29uc3QgZT10fHwoQXJyYXkuaXNBcnJheSh0aGlzKT90aGlzOltdKTtsZXQgbj1bXTtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyl7Y29uc3Qgbz1lW3RdO24ucHVzaChvPjA/YHJlbW92ZShsVmlld1ske299XSlgOmByZW1vdmVOZXN0ZWRJQ1UoJHt+b30pYCl9cmV0dXJuIG59Y2xhc3MgZ2d7Y29uc3RydWN0b3IodCl7dGhpcy5pPTAsdGhpcy5jb2Rlcz10fWhhc01vcmUoKXtyZXR1cm4gdGhpcy5pPHRoaXMuY29kZXMubGVuZ3RofWNvbnN1bWVOdW1iZXIoKXtsZXQgdD10aGlzLmNvZGVzW3RoaXMuaSsrXTtyZXR1cm4gWW4odCwiZXhwZWN0aW5nIG51bWJlciBpbiBPcENvZGUiKSx0fWNvbnN1bWVTdHJpbmcoKXtsZXQgdD10aGlzLmNvZGVzW3RoaXMuaSsrXTtyZXR1cm4gWm4odCwiZXhwZWN0aW5nIHN0cmluZyBpbiBPcENvZGUiKSx0fWNvbnN1bWVGdW5jdGlvbigpe2xldCB0PXRoaXMuY29kZXNbdGhpcy5pKytdO2lmKG51bGw9PT10fHwiZnVuY3Rpb24iPT10eXBlb2YgdClyZXR1cm4gdDt0aHJvdyBuZXcgRXJyb3IoImV4cGVjdGluZyBmdW5jdGlvbiBpbiBPcENvZGUiKX1jb25zdW1lTnVtYmVyT3JTdHJpbmcoKXtsZXQgdD10aGlzLmNvZGVzW3RoaXMuaSsrXTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHR8fFluKHQsImV4cGVjdGluZyBudW1iZXIgb3Igc3RyaW5nIGluIE9wQ29kZSIpLHR9Y29uc3VtZU51bWJlclN0cmluZ09yTWFya2VyKCl7bGV0IHQ9dGhpcy5jb2Rlc1t0aGlzLmkrK107cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0fHwibnVtYmVyIj09dHlwZW9mIHR8fHQ9PUJmfHx0PT1MZnx8WW4odCwiZXhwZWN0aW5nIG51bWJlciwgc3RyaW5nLCBJQ1VfTUFSS0VSIG9yIEVMRU1FTlRfTUFSS0VSIGluIE9wQ29kZSIpLHR9fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jb25zdCBoZz0v77+9KFxkKyk6P1xkKu+/vS9naSxiZz0vKHtccyrvv71cZCs6P1xkKu+/vVxzKixccypcU3s2fVxzKixbXHNcU10qfSkvZ2kseWc9L++/vShcZCsp77+9LyxfZz0vXlxzKijvv71cZCs6P1xkKu+/vSlccyosXHMqKHNlbGVjdHxwbHVyYWwpXHMqLC8sQ2c9L++/vVwvP1wqKFxkKzpcZCsp77+9L2dpLE1nPS/vv70oXC8/WyMqXVxkKyk6P1xkKu+/vS9naSx2Zz0vXHVFNTAwL2c7ZnVuY3Rpb24geGcodCxlLG4sbyxpLGEscil7Y29uc3Qgcz1WZCh0LG8sMSxudWxsKTtsZXQgbD1zPDxWZi5TSElGVCxjPWNhKCk7ZT09PWMmJihjPW51bGwpLG51bGw9PT1jJiYobHw9VmYuQVBQRU5EX0VBR0VSTFkpLHImJihsfD1WZi5DT01NRU5ULChmdW5jdGlvbiBkKHQpe3ZvaWQgMD09PWVjJiYoZWM9dCgpKX0pKGRnKSksaS5wdXNoKGwsbnVsbD09PWE/IiI6YSk7Y29uc3QgcD1CZCh0LHMscj8zMjoxLG51bGw9PT1hP25nRGV2TW9kZT8ie3s/fX0iOiIiOmEsbnVsbCk7WWYobixwKTtjb25zdCBtPXAuaW5kZXg7cmV0dXJuIGRhKHAsITEpLG51bGwhPT1jJiZlIT09YyYmKGZ1bmN0aW9uIHUodCxlKXtuZ0Rldk1vZGUmJmZpKHQpO2xldCBuPXQuaW5zZXJ0QmVmb3JlSW5kZXg7bnVsbD09PW4/KGtjKFdmLEdmKSxuPXQuaW5zZXJ0QmVmb3JlSW5kZXg9W251bGwsZV0pOihYbihBcnJheS5pc0FycmF5KG4pLCEwLCJFeHBlY3RpbmcgYXJyYXkgaGVyZSIpLG4ucHVzaChlKSl9KShjLG0pLHB9ZnVuY3Rpb24gT2codCxlLG4sbyxpLGEscil7Y29uc3Qgcz1yLm1hdGNoKGhnKSxsPXhnKHQsZSxuLGEsbyxzP251bGw6ciwhMSk7cyYmUGcoaSxyLGwuaW5kZXgsbnVsbCwwLG51bGwpfWZ1bmN0aW9uIFBnKHQsZSxuLG8saSxhKXtuZ0Rldk1vZGUmJm5vKG4sb2ksIkluZGV4IG11c3QgYmUgaW4gYWJzb2x1dGUgTFZpZXcgb2Zmc2V0Iik7Y29uc3Qgcj10Lmxlbmd0aCxzPXIrMTt0LnB1c2gobnVsbCxudWxsKTtjb25zdCBsPXIrMjtuZ0Rldk1vZGUmJmxkKHQsbWcpO2NvbnN0IGM9ZS5zcGxpdChoZyk7bGV0IGQ9MDtmb3IobGV0IGU9MDtlPGMubGVuZ3RoO2UrKyl7Y29uc3Qgbj1jW2VdO2lmKDEmZSl7Y29uc3QgZT1pK3BhcnNlSW50KG4sMTApO3QucHVzaCgtMS1lKSxkfD1rZyhlKX1lbHNlIiIhPT1uJiZ0LnB1c2gobil9cmV0dXJuIHQucHVzaChuPDwyfChvPzE6MCkpLG8mJnQucHVzaChvLGEpLHRbcl09ZCx0W3NdPXQubGVuZ3RoLWwsZH1mdW5jdGlvbiB3Zyh0KXtsZXQgZT0wO2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKXtjb25zdCBvPXRbbl07Im51bWJlciI9PXR5cGVvZiBvJiZvPDAmJmUrK31yZXR1cm4gZX1mdW5jdGlvbiBrZyh0KXtyZXR1cm4gMTw8TWF0aC5taW4odCwzMSl9ZnVuY3Rpb24gU2codCl7bGV0IGUsbixvPSIiLGk9MCxhPSExO2Zvcig7bnVsbCE9PShlPUNnLmV4ZWModCkpOylhP2VbMF09PT1g77+9Lyoke25977+9YCYmKGk9ZS5pbmRleCxhPSExKToobys9dC5zdWJzdHJpbmcoaSxlLmluZGV4K2VbMF0ubGVuZ3RoKSxuPWVbMV0sYT0hMCk7cmV0dXJuIG5nRGV2TW9kZSYmWG4oYSwhMSxgVGFnIG1pc21hdGNoOiB1bmFibGUgdG8gZmluZCB0aGUgZW5kIG9mIHRoZSBzdWItdGVtcGxhdGUgaW4gdGhlIHRyYW5zbGF0aW9uICIke3R9ImApLG8rPXQuc3Vic3RyKGkpLG99ZnVuY3Rpb24gRGcodCxlLG4sbyxpLGEpe25nRGV2TW9kZSYmb28oaSwiSUNVIGV4cHJlc3Npb24gbXVzdCBiZSBkZWZpbmVkIik7bGV0IHI9MDtjb25zdCBzPXt0eXBlOmkudHlwZSxjdXJyZW50Q2FzZUxWaWV3SW5kZXg6VmQodCxlLDEsbnVsbCksYW5jaG9ySWR4OmEsY2FzZXM6W10sY3JlYXRlOltdLHJlbW92ZTpbXSx1cGRhdGU6W119OyEoZnVuY3Rpb24gbCh0LGUsbil7dC5wdXNoKGtnKGUubWFpbkJpbmRpbmcpLDIsLTEtZS5tYWluQmluZGluZyxuPDwyfDIpfSkobixpLGEpLChmdW5jdGlvbiBjKHQsZSxuKXtjb25zdCBvPXQuZGF0YVtlXTtuZ0Rldk1vZGUmJlhuKG51bGw9PT1vfHxvLmhhc093blByb3BlcnR5KCJ0Vmlld3MiKSwhMCwiV2UgZXhwZWN0IHRvIGdldCAnbnVsbCd8J1RJY3VDb250YWluZXInIiksbnVsbD09PW8/dC5kYXRhW2VdPW46KG5nRGV2TW9kZSYmWmEobywzMiksby52YWx1ZT1uKX0pKHQsYSxzKTtjb25zdCBkPWkudmFsdWVzO2ZvcihsZXQgYT0wO2E8ZC5sZW5ndGg7YSsrKXtjb25zdCBsPWRbYV0sYz1bXTtmb3IobGV0IHQ9MDt0PGwubGVuZ3RoO3QrKyl7Y29uc3QgZT1sW3RdO2lmKCJzdHJpbmciIT10eXBlb2YgZSl7Y29uc3Qgbj1jLnB1c2goZSktMTtsW3RdPWBceDNjIS0t77+9JHtufe+/vS0tXHgzZWB9fXI9UmcodCxzLGUsbixvLGkuY2FzZXNbYV0sbC5qb2luKCIiKSxjKXxyfXImJihmdW5jdGlvbiBwKHQsZSxuKXt0LnB1c2goZSwxLG48PDJ8Myl9KShuLHIsYSl9ZnVuY3Rpb24gRWcodCl7Y29uc3QgZT1bXSxuPVtdO2xldCBvPTEsaT0wO2NvbnN0IGE9QWcodD10LnJlcGxhY2UoX2csKGZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gbz0ic2VsZWN0Ij09PW4/MDoxLGk9cGFyc2VJbnQoZS5zdWJzdHIoMSksMTApLCIifSkpKTtmb3IobGV0IHQ9MDt0PGEubGVuZ3RoOyl7bGV0IGk9YVt0KytdLnRyaW0oKTsxPT09byYmKGk9aS5yZXBsYWNlKC9ccyooPzo9KT8oXHcrKVxzKi8sIiQxIikpLGkubGVuZ3RoJiZlLnB1c2goaSk7Y29uc3Qgcj1BZyhhW3QrK10pO2UubGVuZ3RoPm4ubGVuZ3RoJiZuLnB1c2gocil9cmV0dXJue3R5cGU6byxtYWluQmluZGluZzppLGNhc2VzOmUsdmFsdWVzOm59fWZ1bmN0aW9uIEFnKHQpe2lmKCF0KXJldHVybltdO2xldCBlPTA7Y29uc3Qgbj1bXSxvPVtdLGk9L1t7fV0vZztsZXQgYTtmb3IoaS5sYXN0SW5kZXg9MDthPWkuZXhlYyh0KTspe2NvbnN0IGk9YS5pbmRleDtpZigifSI9PWFbMF0pe2lmKG4ucG9wKCksMD09bi5sZW5ndGgpe2NvbnN0IG49dC5zdWJzdHJpbmcoZSxpKTtfZy50ZXN0KG4pP28ucHVzaChFZyhuKSk6by5wdXNoKG4pLGU9aSsxfX1lbHNle2lmKDA9PW4ubGVuZ3RoKXtjb25zdCBuPXQuc3Vic3RyaW5nKGUsaSk7by5wdXNoKG4pLGU9aSsxfW4ucHVzaCgieyIpfX1jb25zdCByPXQuc3Vic3RyaW5nKGUpO3JldHVybiBvLnB1c2gociksb31mdW5jdGlvbiBSZyh0LGUsbixvLGksYSxyLHMpe2NvbnN0IGw9W10sYz1bXSxkPVtdO25nRGV2TW9kZSYmKGxkKGwsdWcpLGxkKGMsZmcpLGxkKGQsbWcpKSxlLmNhc2VzLnB1c2goYSksZS5jcmVhdGUucHVzaChsKSxlLnJlbW92ZS5wdXNoKGMpLGUudXBkYXRlLnB1c2goZCk7Y29uc3QgcD1acyhMaSgpKS5nZXRJbmVydEJvZHlFbGVtZW50KHIpO25nRGV2TW9kZSYmb28ocCwiVW5hYmxlIHRvIGdlbmVyYXRlIGluZXJ0IGJvZHkgZWxlbWVudCIpO2NvbnN0IG09dmwocCl8fHA7cmV0dXJuIG0/VGcodCxlLG4sbyxsLGMsZCxtLGkscywwKTowfWZ1bmN0aW9uIFRnKHQsZSxuLG8saSxhLHIscyxsLGMsZCl7bGV0IHA9MCxtPXMuZmlyc3RDaGlsZDtmb3IoO207KXtjb25zdCBzPVZkKHQsbiwxLG51bGwpO3N3aXRjaChtLm5vZGVUeXBlKXtjYXNlIE5vZGUuRUxFTUVOVF9OT0RFOmNvbnN0IHU9bSxmPXUudGFnTmFtZS50b0xvd2VyQ2FzZSgpO2lmKGNsLmhhc093blByb3BlcnR5KGYpKXt6ZyhpLExmLGYsbCxzKSx0LmRhdGFbc109Zjtjb25zdCBnPXUuYXR0cmlidXRlcztmb3IobGV0IHQ9MDt0PGcubGVuZ3RoO3QrKyl7Y29uc3QgZT1nLml0ZW0odCksbj1lLm5hbWUudG9Mb3dlckNhc2UoKTtlLnZhbHVlLm1hdGNoKGhnKT9mbC5oYXNPd25Qcm9wZXJ0eShuKT9QZyhyLGUudmFsdWUscyxlLm5hbWUsMCxkbFtuXT8kczpwbFtuXT90bDpudWxsKTpuZ0Rldk1vZGUmJmNvbnNvbGUud2FybihgV0FSTklORzogaWdub3JpbmcgdW5zYWZlIGF0dHJpYnV0ZSB2YWx1ZSAke259IG9uIGVsZW1lbnQgJHtmfSAoc2VlIGh0dHBzOi8vZy5jby9uZy9zZWN1cml0eSN4c3MpYCk6SGcoaSxzLGUpfXA9VGcodCxlLG4sbyxpLGEscixtLHMsYyxkKzEpfHAsTmcoYSxzLGQpfWJyZWFrO2Nhc2UgTm9kZS5URVhUX05PREU6Y29uc3QgZz1tLnRleHRDb250ZW50fHwiIixoPWcubWF0Y2goaGcpO3pnKGksbnVsbCxoPyIiOmcsbCxzKSxOZyhhLHMsZCksaCYmKHA9UGcocixnLHMsbnVsbCwwLG51bGwpfHApO2JyZWFrO2Nhc2UgTm9kZS5DT01NRU5UX05PREU6Y29uc3QgYj15Zy5leGVjKG0udGV4dENvbnRlbnR8fCIiKTtpZihiKXtjb25zdCBlPXBhcnNlSW50KGJbMV0sMTApLHI9Y1tlXTt6ZyhpLEJmLG5nRGV2TW9kZT9gbmVzdGVkIElDVSAke2V9YDoiIixsLHMpLERnKHQsbixvLGwscixzKSxJZyhhLHMsZCl9fW09bS5uZXh0U2libGluZ31yZXR1cm4gcH1mdW5jdGlvbiBOZyh0LGUsbil7MD09PW4mJnQucHVzaChlKX1mdW5jdGlvbiBJZyh0LGUsbil7MD09PW4mJih0LnB1c2gofmUpLHQucHVzaChlKSl9ZnVuY3Rpb24gemcodCxlLG4sbyxpKXtudWxsIT09ZSYmdC5wdXNoKGUpLHQucHVzaChuLGksKGZ1bmN0aW9uIGEodCxlLG4pe3JldHVybiBuZ0Rldk1vZGUmJm5vKGUsMCwiTWlzc2luZyBwYXJlbnQgaW5kZXgiKSxuZ0Rldk1vZGUmJmVvKG4sMCwiTWlzc2luZyByZWYgaW5kZXgiKSx0fGU8PDE3fG48PDF9KSgwLG8saSkpfWZ1bmN0aW9uIEhnKHQsZSxuKXt0LnB1c2goZTw8MXwxLG4ubmFtZSxuLnZhbHVlKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY29uc3QgRmc9L1xbKO+/vS4rP++/vT8pXF0vLExnPS9cWyjvv70uKz/vv70/KVxdfCjvv71cLz9cKlxkKzpcZCvvv70pL2csQmc9Lyh7XHMqKShWQVJfKFBMVVJBTHxTRUxFQ1QpKF9cZCspPykoXHMqLCkvZyxWZz0veyhbQS1aMC05X10rKX0vZyxqZz0v77+9STE4Tl9FWFBfKElDVShfXGQrKT8p77+9L2csVWc9L1wvXCovLFdnPS9cZCtcOihcZCspLzsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmZ1bmN0aW9uIEdnKHQsZSxuPS0xKXtjb25zdCBvPWFhKCksaT1pYSgpLGE9b2krdDtuZ0Rldk1vZGUmJm9vKG8sInRWaWV3IHNob3VsZCBiZSBkZWZpbmVkIik7Y29uc3Qgcj0kaShvLmNvbnN0cyxlKSxzPWNhKCk7by5maXJzdENyZWF0ZVBhc3MmJihmdW5jdGlvbiBsKHQsZSxuLG8saSxhKXtjb25zdCByPWNhKCkscz1bXSxsPVtdLGM9W1tdXTtuZ0Rldk1vZGUmJihsZChzLHBnKSxsZChsLG1nKSk7Y29uc3QgZD0oZnVuY3Rpb24gbSh0KXtyZXR1cm4gdC5yZXBsYWNlKHZnLCIgIil9KShpPShmdW5jdGlvbiBwKHQsZSl7aWYoKGZ1bmN0aW9uIG4odCl7cmV0dXJuLTE9PT10fSkoZSkpcmV0dXJuIFNnKHQpO3tjb25zdCBuPXQuaW5kZXhPZihgOiR7ZX3vv71gKSsyK2UudG9TdHJpbmcoKS5sZW5ndGgsbz10LnNlYXJjaChuZXcgUmVnRXhwKGDvv71cXC9cXCpcXGQrOiR7ZX3vv71gKSk7cmV0dXJuIFNnKHQuc3Vic3RyaW5nKG4sbykpfX0pKGksYSkpLnNwbGl0KE1nKTtmb3IobGV0IGE9MDthPGQubGVuZ3RoO2ErKyl7bGV0IHA9ZFthXTtpZigwPT0oMSZhKSl7Y29uc3QgYT1BZyhwKTtmb3IobGV0IGQ9MDtkPGEubGVuZ3RoO2QrKyl7bGV0IHA9YVtkXTtpZigwPT0oMSZkKSl7Y29uc3QgZT1wO25nRGV2TW9kZSYmWm4oZSwiUGFyc2VkIElDVSBwYXJ0IHNob3VsZCBiZSBzdHJpbmciKSwiIiE9PWUmJk9nKHQscixjWzBdLHMsbCxuLGUpfWVsc2V7Y29uc3QgYT1wO2lmKCJvYmplY3QiIT10eXBlb2YgYSl0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBwYXJzZSBJQ1UgZXhwcmVzc2lvbiBpbiAiJHtpfSIgbWVzc2FnZS5gKTtjb25zdCBkPXhnKHQscixjWzBdLG4scyxuZ0Rldk1vZGU/YElDVSAke299OiR7YS5tYWluQmluZGluZ31gOiIiLCEwKS5pbmRleDtuZ0Rldk1vZGUmJm5vKGQsb2ksIkluZGV4IG11c3QgYmUgaW4gYWJzb2x1dGUgTFZpZXcgb2Zmc2V0IiksRGcodCxuLGwsZSxhLGQpfX19ZWxzZXtjb25zdCBlPTQ3PT09cC5jaGFyQ29kZUF0KDApLG49cC5jaGFyQ29kZUF0KGU/MTowKTtuZ0Rldk1vZGUmJnNvKG4sNDIsMzUpO2NvbnN0IG89b2krTnVtYmVyLnBhcnNlSW50KHAuc3Vic3RyaW5nKGU/MjoxKSk7aWYoZSljLnNoaWZ0KCksZGEoY2EoKSwhMSk7ZWxzZXtjb25zdCBlPVFmKHQsY1swXSxvKTtjLnVuc2hpZnQoW10pLGRhKGUsITApfX19dC5kYXRhW29dPXtjcmVhdGU6cyx1cGRhdGU6bH19KShvLG51bGw9PT1zPzA6cy5pbmRleCxpLGEscixuKTtjb25zdCBjPW8uZGF0YVthXSxkPXljKG8scz09PWlbNl0/bnVsbDpzLGkpOyEoZnVuY3Rpb24gcCh0LGUsbixvKXtjb25zdCBpPXRbMTFdO2ZvcihsZXQgYT0wO2E8ZS5sZW5ndGg7YSsrKXtjb25zdCByPWVbYSsrXSxzPWVbYV0sbD0ociZWZi5DT01NRU5UKT09PVZmLkNPTU1FTlQsYz0ociZWZi5BUFBFTkRfRUFHRVJMWSk9PT1WZi5BUFBFTkRfRUFHRVJMWSxkPXI+Pj5WZi5TSElGVDtsZXQgcD10W2RdO251bGw9PT1wJiYocD10W2RdPWw/aS5jcmVhdGVDb21tZW50KHMpOmNjKGkscykpLGMmJm51bGwhPT1uJiZfYyhpLG4scCxvLCExKX19KShpLGMuY3JlYXRlLGQscyYmOCZzLnR5cGU/aVtzLmluZGV4XTpudWxsKSxDYSghMCl9ZnVuY3Rpb24gWWcoKXtDYSghMSl9ZnVuY3Rpb24gcWcodCxlLG4pe0dnKHQsZSxuKSxZZygpfWZ1bmN0aW9uIFpnKHQpe3JldHVybihmdW5jdGlvbiBlKHQpe3QmJihvZ3w9MTw8TWF0aC5taW4oaWcsMzEpKSxpZysrfSkoRW0oaWEoKSx5YSgpLHQpKSxaZ31mdW5jdGlvbiBYZyh0KXshKGZ1bmN0aW9uIGUodCxuLG8pe2lmKGlnPjApe25nRGV2TW9kZSYmb28odCwidFZpZXcgc2hvdWxkIGJlIGRlZmluZWQiKTtjb25zdCBlPXQuZGF0YVtvXTtyZyh0LG4sQXJyYXkuaXNBcnJheShlKT9lOmUudXBkYXRlLGhhKCktaWctMSxvZyl9b2c9MCxpZz0wfSkoYWEoKSxpYSgpLHQrb2kpfWZ1bmN0aW9uIEtnKHQsZT17fSl7cmV0dXJuKGZ1bmN0aW9uIG4odCxlPXt9KXtsZXQgbj10O2lmKEZnLnRlc3QodCkpe2NvbnN0IHQ9e30sZT1bMF07bj1uLnJlcGxhY2UoTGcsKChuLG8saSk9Pntjb25zdCBhPW98fGkscj10W2FdfHxbXTtpZihyLmxlbmd0aHx8KGEuc3BsaXQoInwiKS5mb3JFYWNoKCh0PT57Y29uc3QgZT10Lm1hdGNoKFdnKSxuPWU/cGFyc2VJbnQoZVsxXSwxMCk6MCxvPVVnLnRlc3QodCk7ci5wdXNoKFtuLG8sdF0pfSkpLHRbYV09ciksIXIubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgaTE4biBwb3N0cHJvY2VzczogdW5tYXRjaGVkIHBsYWNlaG9sZGVyIC0gJHthfWApO2NvbnN0IHM9ZVtlLmxlbmd0aC0xXTtsZXQgbD0wO2ZvcihsZXQgdD0wO3Q8ci5sZW5ndGg7dCsrKWlmKHJbdF1bMF09PT1zKXtsPXQ7YnJlYWt9Y29uc3RbYyxkLHBdPXJbbF07cmV0dXJuIGQ/ZS5wb3AoKTpzIT09YyYmZS5wdXNoKGMpLHIuc3BsaWNlKGwsMSkscH0pKX1yZXR1cm4gT2JqZWN0LmtleXMoZSkubGVuZ3RoPyhuPW4ucmVwbGFjZShCZywoKHQsbixvLGksYSxyKT0+ZS5oYXNPd25Qcm9wZXJ0eShvKT9gJHtufSR7ZVtvXX0ke3J9YDp0KSksbj1uLnJlcGxhY2UoVmcsKCh0LG4pPT5lLmhhc093blByb3BlcnR5KG4pP2Vbbl06dCkpLG49bi5yZXBsYWNlKGpnLCgodCxuKT0+e2lmKGUuaGFzT3duUHJvcGVydHkobikpe2NvbnN0IG89ZVtuXTtpZighby5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKGBpMThuIHBvc3Rwcm9jZXNzOiB1bm1hdGNoZWQgSUNVIC0gJHt0fSB3aXRoIGtleTogJHtufWApO3JldHVybiBvLnNoaWZ0KCl9cmV0dXJuIHR9KSksbik6bn0pKHQsZSl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiBKZyh0LGUsbixvLGkpe2lmKHQ9em4odCksQXJyYXkuaXNBcnJheSh0KSlmb3IobGV0IGE9MDthPHQubGVuZ3RoO2ErKylKZyh0W2FdLGUsbixvLGkpO2Vsc2V7Y29uc3QgYT1hYSgpLHI9aWEoKTtsZXQgcz1YcCh0KT90OnpuKHQucHJvdmlkZSksbD1ZcCh0KTtjb25zdCBjPXNhKCksZD0xMDQ4NTc1JmMucHJvdmlkZXJJbmRleGVzLHA9Yy5kaXJlY3RpdmVTdGFydCxtPWMucHJvdmlkZXJJbmRleGVzPj4yMDtpZihYcCh0KXx8IXQubXVsdGkpe2NvbnN0IG89bmV3IFlhKGwsaSxNdSksdT10aChzLGUsaT9kOmQrbSxwKTstMT09PXU/KGRyKHJyKGMsciksYSxzKSxRZyhhLHQsZS5sZW5ndGgpLGUucHVzaChzKSxjLmRpcmVjdGl2ZVN0YXJ0KyssYy5kaXJlY3RpdmVFbmQrKyxpJiYoYy5wcm92aWRlckluZGV4ZXMrPTEwNDg1NzYpLG4ucHVzaChvKSxyLnB1c2gobykpOihuW3VdPW8sclt1XT1vKX1lbHNle2NvbnN0IHU9dGgocyxlLGQrbSxwKSxmPXRoKHMsZSxkLGQrbSksZz11Pj0wJiZuW3VdLGg9Zj49MCYmbltmXTtpZihpJiYhaHx8IWkmJiFnKXtkcihycihjLHIpLGEscyk7Y29uc3QgZD0oZnVuY3Rpb24gYSh0LGUsbixvLGkpe2NvbnN0IGE9bmV3IFlhKHQsbixNdSk7cmV0dXJuIGEubXVsdGk9W10sYS5pbmRleD1lLGEuY29tcG9uZW50UHJvdmlkZXJzPTAsJGcoYSxpLG8mJiFuKSxhfSkoaT9uaDplaCxuLmxlbmd0aCxpLG8sbCk7IWkmJmgmJihuW2ZdLnByb3ZpZGVyRmFjdG9yeT1kKSxRZyhhLHQsZS5sZW5ndGgsMCksZS5wdXNoKHMpLGMuZGlyZWN0aXZlU3RhcnQrKyxjLmRpcmVjdGl2ZUVuZCsrLGkmJihjLnByb3ZpZGVySW5kZXhlcys9MTA0ODU3Niksbi5wdXNoKGQpLHIucHVzaChkKX1lbHNlIFFnKGEsdCx1Pi0xP3U6ZiwkZyhuW2k/Zjp1XSxsLCFpJiZvKSk7IWkmJm8mJmgmJm5bZl0uY29tcG9uZW50UHJvdmlkZXJzKyt9fX1mdW5jdGlvbiBRZyh0LGUsbixvKXtjb25zdCBpPVhwKGUpO2lmKGl8fChmdW5jdGlvbiBhKHQpe3JldHVybiEhdC51c2VDbGFzc30pKGUpKXtjb25zdCBhPShlLnVzZUNsYXNzfHxlKS5wcm90b3R5cGUubmdPbkRlc3Ryb3k7aWYoYSl7Y29uc3Qgcj10LmRlc3Ryb3lIb29rc3x8KHQuZGVzdHJveUhvb2tzPVtdKTtpZighaSYmZS5tdWx0aSl7bmdEZXZNb2RlJiZvbyhvLCJpbmRleEluRmFjdG9yeSB3aGVuIHJlZ2lzdGVyaW5nIG11bHRpIGZhY3RvcnkgZGVzdHJveSBob29rIik7Y29uc3QgdD1yLmluZGV4T2Yobik7LTE9PT10P3IucHVzaChuLFtvLGFdKTpyW3QrMV0ucHVzaChvLGEpfWVsc2Ugci5wdXNoKG4sYSl9fX1mdW5jdGlvbiAkZyh0LGUsbil7cmV0dXJuIG4mJnQuY29tcG9uZW50UHJvdmlkZXJzKyssdC5tdWx0aS5wdXNoKGUpLTF9ZnVuY3Rpb24gdGgodCxlLG4sbyl7Zm9yKGxldCBpPW47aTxvO2krKylpZihlW2ldPT09dClyZXR1cm4gaTtyZXR1cm4tMX1mdW5jdGlvbiBlaCh0LGUsbixvKXtyZXR1cm4gb2godGhpcy5tdWx0aSxbXSl9ZnVuY3Rpb24gbmgodCxlLG4sbyl7Y29uc3QgaT10aGlzLm11bHRpO2xldCBhO2lmKHRoaXMucHJvdmlkZXJGYWN0b3J5KXtjb25zdCB0PXRoaXMucHJvdmlkZXJGYWN0b3J5LmNvbXBvbmVudFByb3ZpZGVycyxlPXlyKG4sblsxXSx0aGlzLnByb3ZpZGVyRmFjdG9yeS5pbmRleCxvKTthPWUuc2xpY2UoMCx0KSxvaChpLGEpO2ZvcihsZXQgbj10O248ZS5sZW5ndGg7bisrKWEucHVzaChlW25dKX1lbHNlIGE9W10sb2goaSxhKTtyZXR1cm4gYX1mdW5jdGlvbiBvaCh0LGUpe2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKWUucHVzaCgoMCx0W25dKSgpKTtyZXR1cm4gZX1mdW5jdGlvbiBpaCh0LGU9W10pe3JldHVybiBuPT57bi5wcm92aWRlcnNSZXNvbHZlcj0obixvKT0+KGZ1bmN0aW9uIGkodCxlLG4pe2NvbnN0IG89YWEoKTtpZihvLmZpcnN0Q3JlYXRlUGFzcyl7Y29uc3QgaT1waSh0KTtKZyhuLG8uZGF0YSxvLmJsdWVwcmludCxpLCEwKSxKZyhlLG8uZGF0YSxvLmJsdWVwcmludCxpLCExKX19KShuLG8/byh0KTp0LGUpfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY2xhc3MgYWh7fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jbGFzcyByaHt9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpmdW5jdGlvbiBzaCguLi50KXt9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIGxoKHQsZSl7cmV0dXJuIG5ldyBjaChHaSh0LGUpKX1yaC5OVUxMPW5ldyBjbGFzc3tyZXNvbHZlQ29tcG9uZW50RmFjdG9yeSh0KXt0aHJvdyhmdW5jdGlvbiBlKHQpe2NvbnN0IGU9RXJyb3IoYE5vIGNvbXBvbmVudCBmYWN0b3J5IGZvdW5kIGZvciAke1JuKHQpfS4gRGlkIHlvdSBhZGQgaXQgdG8gQE5nTW9kdWxlLmVudHJ5Q29tcG9uZW50cz9gKTtyZXR1cm4gZS5uZ0NvbXBvbmVudD10LGV9KSh0KX19O2NsYXNzIGNoe2NvbnN0cnVjdG9yKHQpe3RoaXMubmF0aXZlRWxlbWVudD10fX1mdW5jdGlvbiBkaCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGNoP3QubmF0aXZlRWxlbWVudDp0fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jaC5fX05HX0VMRU1FTlRfSURfXz1mdW5jdGlvbiBwaCgpe3JldHVybiBsaChzYSgpLGlhKCkpfSxuZXcgTnIoIlJlbmRlcmVyMkludGVyY2VwdG9yIik7Y2xhc3MgbWh7fWNsYXNzIHVoe311aC5fX05HX0VMRU1FTlRfSURfXz0oKT0+ZmgoKTtjb25zdCBmaD1mdW5jdGlvbiBnaCgpe2NvbnN0IHQ9aWEoKSxlPVppKHNhKCkuaW5kZXgsdCk7cmV0dXJuKGZ1bmN0aW9uIG4odCl7Y29uc3QgZT10WzExXTtpZihuZ0Rldk1vZGUmJiFWaShlKSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBpbmplY3QgUmVuZGVyZXIyIHdoZW4gdGhlIGFwcGxpY2F0aW9uIHVzZXMgUmVuZGVyZXIzISIpO3JldHVybiBlfSkocmkoZSk/ZTp0KX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovO2NsYXNzIGhoe31oaC7JtXByb3Y9bG8oe3Rva2VuOmhoLHByb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9Pm51bGx9KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIGJoe2NvbnN0cnVjdG9yKHQpe3RoaXMuZnVsbD10LHRoaXMubWFqb3I9dC5zcGxpdCgiLiIpWzBdLHRoaXMubWlub3I9dC5zcGxpdCgiLiIpWzFdLHRoaXMucGF0Y2g9dC5zcGxpdCgiLiIpLnNsaWNlKDIpLmpvaW4oIi4iKX19Y29uc3QgeWg9bmV3IGJoKCIxMS4yLjE0Iik7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NsYXNzIF9oe2NvbnN0cnVjdG9yKCl7fXN1cHBvcnRzKHQpe3JldHVybiB3bSh0KX1jcmVhdGUodCl7cmV0dXJuIG5ldyBNaCh0KX19Y29uc3QgQ2g9KHQsZSk9PmU7Y2xhc3MgTWh7Y29uc3RydWN0b3IodCl7dGhpcy5sZW5ndGg9MCx0aGlzLl9saW5rZWRSZWNvcmRzPW51bGwsdGhpcy5fdW5saW5rZWRSZWNvcmRzPW51bGwsdGhpcy5fcHJldmlvdXNJdEhlYWQ9bnVsbCx0aGlzLl9pdEhlYWQ9bnVsbCx0aGlzLl9pdFRhaWw9bnVsbCx0aGlzLl9hZGRpdGlvbnNIZWFkPW51bGwsdGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLHRoaXMuX21vdmVzSGVhZD1udWxsLHRoaXMuX21vdmVzVGFpbD1udWxsLHRoaXMuX3JlbW92YWxzSGVhZD1udWxsLHRoaXMuX3JlbW92YWxzVGFpbD1udWxsLHRoaXMuX2lkZW50aXR5Q2hhbmdlc0hlYWQ9bnVsbCx0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsPW51bGwsdGhpcy5fdHJhY2tCeUZuPXR8fENofWZvckVhY2hJdGVtKHQpe2xldCBlO2ZvcihlPXRoaXMuX2l0SGVhZDtudWxsIT09ZTtlPWUuX25leHQpdChlKX1mb3JFYWNoT3BlcmF0aW9uKHQpe2xldCBlPXRoaXMuX2l0SGVhZCxuPXRoaXMuX3JlbW92YWxzSGVhZCxvPTAsaT1udWxsO2Zvcig7ZXx8bjspe2NvbnN0IGE9IW58fGUmJmUuY3VycmVudEluZGV4PFBoKG4sbyxpKT9lOm4scj1QaChhLG8saSkscz1hLmN1cnJlbnRJbmRleDtpZihhPT09bilvLS0sbj1uLl9uZXh0UmVtb3ZlZDtlbHNlIGlmKGU9ZS5fbmV4dCxudWxsPT1hLnByZXZpb3VzSW5kZXgpbysrO2Vsc2V7aXx8KGk9W10pO2NvbnN0IHQ9ci1vLGU9cy1vO2lmKHQhPWUpe2ZvcihsZXQgbj0wO248dDtuKyspe2NvbnN0IG89bjxpLmxlbmd0aD9pW25dOmlbbl09MCxhPW8rbjtlPD1hJiZhPHQmJihpW25dPW8rMSl9aVthLnByZXZpb3VzSW5kZXhdPWUtdH19ciE9PXMmJnQoYSxyLHMpfX1mb3JFYWNoUHJldmlvdXNJdGVtKHQpe2xldCBlO2ZvcihlPXRoaXMuX3ByZXZpb3VzSXRIZWFkO251bGwhPT1lO2U9ZS5fbmV4dFByZXZpb3VzKXQoZSl9Zm9yRWFjaEFkZGVkSXRlbSh0KXtsZXQgZTtmb3IoZT10aGlzLl9hZGRpdGlvbnNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dEFkZGVkKXQoZSl9Zm9yRWFjaE1vdmVkSXRlbSh0KXtsZXQgZTtmb3IoZT10aGlzLl9tb3Zlc0hlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0TW92ZWQpdChlKX1mb3JFYWNoUmVtb3ZlZEl0ZW0odCl7bGV0IGU7Zm9yKGU9dGhpcy5fcmVtb3ZhbHNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dFJlbW92ZWQpdChlKX1mb3JFYWNoSWRlbnRpdHlDaGFuZ2UodCl7bGV0IGU7Zm9yKGU9dGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZDtudWxsIT09ZTtlPWUuX25leHRJZGVudGl0eUNoYW5nZSl0KGUpfWRpZmYodCl7aWYobnVsbD09dCYmKHQ9W10pLCF3bSh0KSl0aHJvdyBuZXcgRXJyb3IoYEVycm9yIHRyeWluZyB0byBkaWZmICcke1JuKHQpfScuIE9ubHkgYXJyYXlzIGFuZCBpdGVyYWJsZXMgYXJlIGFsbG93ZWRgKTtyZXR1cm4gdGhpcy5jaGVjayh0KT90aGlzOm51bGx9b25EZXN0cm95KCl7fWNoZWNrKHQpe3RoaXMuX3Jlc2V0KCk7bGV0IGUsbixvLGk9dGhpcy5faXRIZWFkLGE9ITE7aWYoQXJyYXkuaXNBcnJheSh0KSl7dGhpcy5sZW5ndGg9dC5sZW5ndGg7Zm9yKGxldCBlPTA7ZTx0aGlzLmxlbmd0aDtlKyspbj10W2VdLG89dGhpcy5fdHJhY2tCeUZuKGUsbiksbnVsbCE9PWkmJk9iamVjdC5pcyhpLnRyYWNrQnlJZCxvKT8oYSYmKGk9dGhpcy5fdmVyaWZ5UmVpbnNlcnRpb24oaSxuLG8sZSkpLE9iamVjdC5pcyhpLml0ZW0sbil8fHRoaXMuX2FkZElkZW50aXR5Q2hhbmdlKGksbikpOihpPXRoaXMuX21pc21hdGNoKGksbixvLGUpLGE9ITApLGk9aS5fbmV4dH1lbHNlIGU9MCwoZnVuY3Rpb24gcih0LGUpe2lmKEFycmF5LmlzQXJyYXkodCkpZm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspZSh0W25dKTtlbHNle2NvbnN0IG49dFt4bSgpXSgpO2xldCBvO2Zvcig7IShvPW4ubmV4dCgpKS5kb25lOyllKG8udmFsdWUpfX0pKHQsKHQ9PntvPXRoaXMuX3RyYWNrQnlGbihlLHQpLG51bGwhPT1pJiZPYmplY3QuaXMoaS50cmFja0J5SWQsbyk/KGEmJihpPXRoaXMuX3ZlcmlmeVJlaW5zZXJ0aW9uKGksdCxvLGUpKSxPYmplY3QuaXMoaS5pdGVtLHQpfHx0aGlzLl9hZGRJZGVudGl0eUNoYW5nZShpLHQpKTooaT10aGlzLl9taXNtYXRjaChpLHQsbyxlKSxhPSEwKSxpPWkuX25leHQsZSsrfSkpLHRoaXMubGVuZ3RoPWU7cmV0dXJuIHRoaXMuX3RydW5jYXRlKGkpLHRoaXMuY29sbGVjdGlvbj10LHRoaXMuaXNEaXJ0eX1nZXQgaXNEaXJ0eSgpe3JldHVybiBudWxsIT09dGhpcy5fYWRkaXRpb25zSGVhZHx8bnVsbCE9PXRoaXMuX21vdmVzSGVhZHx8bnVsbCE9PXRoaXMuX3JlbW92YWxzSGVhZHx8bnVsbCE9PXRoaXMuX2lkZW50aXR5Q2hhbmdlc0hlYWR9X3Jlc2V0KCl7aWYodGhpcy5pc0RpcnR5KXtsZXQgdDtmb3IodD10aGlzLl9wcmV2aW91c0l0SGVhZD10aGlzLl9pdEhlYWQ7bnVsbCE9PXQ7dD10Ll9uZXh0KXQuX25leHRQcmV2aW91cz10Ll9uZXh0O2Zvcih0PXRoaXMuX2FkZGl0aW9uc0hlYWQ7bnVsbCE9PXQ7dD10Ll9uZXh0QWRkZWQpdC5wcmV2aW91c0luZGV4PXQuY3VycmVudEluZGV4O2Zvcih0aGlzLl9hZGRpdGlvbnNIZWFkPXRoaXMuX2FkZGl0aW9uc1RhaWw9bnVsbCx0PXRoaXMuX21vdmVzSGVhZDtudWxsIT09dDt0PXQuX25leHRNb3ZlZCl0LnByZXZpb3VzSW5kZXg9dC5jdXJyZW50SW5kZXg7dGhpcy5fbW92ZXNIZWFkPXRoaXMuX21vdmVzVGFpbD1udWxsLHRoaXMuX3JlbW92YWxzSGVhZD10aGlzLl9yZW1vdmFsc1RhaWw9bnVsbCx0aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkPXRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWw9bnVsbH19X21pc21hdGNoKHQsZSxuLG8pe2xldCBpO3JldHVybiBudWxsPT09dD9pPXRoaXMuX2l0VGFpbDooaT10Ll9wcmV2LHRoaXMuX3JlbW92ZSh0KSksbnVsbCE9PSh0PW51bGw9PT10aGlzLl91bmxpbmtlZFJlY29yZHM/bnVsbDp0aGlzLl91bmxpbmtlZFJlY29yZHMuZ2V0KG4sbnVsbCkpPyhPYmplY3QuaXModC5pdGVtLGUpfHx0aGlzLl9hZGRJZGVudGl0eUNoYW5nZSh0LGUpLHRoaXMuX3JlaW5zZXJ0QWZ0ZXIodCxpLG8pKTpudWxsIT09KHQ9bnVsbD09PXRoaXMuX2xpbmtlZFJlY29yZHM/bnVsbDp0aGlzLl9saW5rZWRSZWNvcmRzLmdldChuLG8pKT8oT2JqZWN0LmlzKHQuaXRlbSxlKXx8dGhpcy5fYWRkSWRlbnRpdHlDaGFuZ2UodCxlKSx0aGlzLl9tb3ZlQWZ0ZXIodCxpLG8pKTp0PXRoaXMuX2FkZEFmdGVyKG5ldyB2aChlLG4pLGksbyksdH1fdmVyaWZ5UmVpbnNlcnRpb24odCxlLG4sbyl7bGV0IGk9bnVsbD09PXRoaXMuX3VubGlua2VkUmVjb3Jkcz9udWxsOnRoaXMuX3VubGlua2VkUmVjb3Jkcy5nZXQobixudWxsKTtyZXR1cm4gbnVsbCE9PWk/dD10aGlzLl9yZWluc2VydEFmdGVyKGksdC5fcHJldixvKTp0LmN1cnJlbnRJbmRleCE9byYmKHQuY3VycmVudEluZGV4PW8sdGhpcy5fYWRkVG9Nb3Zlcyh0LG8pKSx0fV90cnVuY2F0ZSh0KXtmb3IoO251bGwhPT10Oyl7Y29uc3QgZT10Ll9uZXh0O3RoaXMuX2FkZFRvUmVtb3ZhbHModGhpcy5fdW5saW5rKHQpKSx0PWV9bnVsbCE9PXRoaXMuX3VubGlua2VkUmVjb3JkcyYmdGhpcy5fdW5saW5rZWRSZWNvcmRzLmNsZWFyKCksbnVsbCE9PXRoaXMuX2FkZGl0aW9uc1RhaWwmJih0aGlzLl9hZGRpdGlvbnNUYWlsLl9uZXh0QWRkZWQ9bnVsbCksbnVsbCE9PXRoaXMuX21vdmVzVGFpbCYmKHRoaXMuX21vdmVzVGFpbC5fbmV4dE1vdmVkPW51bGwpLG51bGwhPT10aGlzLl9pdFRhaWwmJih0aGlzLl9pdFRhaWwuX25leHQ9bnVsbCksbnVsbCE9PXRoaXMuX3JlbW92YWxzVGFpbCYmKHRoaXMuX3JlbW92YWxzVGFpbC5fbmV4dFJlbW92ZWQ9bnVsbCksbnVsbCE9PXRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWwmJih0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsLl9uZXh0SWRlbnRpdHlDaGFuZ2U9bnVsbCl9X3JlaW5zZXJ0QWZ0ZXIodCxlLG4pe251bGwhPT10aGlzLl91bmxpbmtlZFJlY29yZHMmJnRoaXMuX3VubGlua2VkUmVjb3Jkcy5yZW1vdmUodCk7Y29uc3Qgbz10Ll9wcmV2UmVtb3ZlZCxpPXQuX25leHRSZW1vdmVkO3JldHVybiBudWxsPT09bz90aGlzLl9yZW1vdmFsc0hlYWQ9aTpvLl9uZXh0UmVtb3ZlZD1pLG51bGw9PT1pP3RoaXMuX3JlbW92YWxzVGFpbD1vOmkuX3ByZXZSZW1vdmVkPW8sdGhpcy5faW5zZXJ0QWZ0ZXIodCxlLG4pLHRoaXMuX2FkZFRvTW92ZXModCxuKSx0fV9tb3ZlQWZ0ZXIodCxlLG4pe3JldHVybiB0aGlzLl91bmxpbmsodCksdGhpcy5faW5zZXJ0QWZ0ZXIodCxlLG4pLHRoaXMuX2FkZFRvTW92ZXModCxuKSx0fV9hZGRBZnRlcih0LGUsbil7cmV0dXJuIHRoaXMuX2luc2VydEFmdGVyKHQsZSxuKSx0aGlzLl9hZGRpdGlvbnNUYWlsPW51bGw9PT10aGlzLl9hZGRpdGlvbnNUYWlsP3RoaXMuX2FkZGl0aW9uc0hlYWQ9dDp0aGlzLl9hZGRpdGlvbnNUYWlsLl9uZXh0QWRkZWQ9dCx0fV9pbnNlcnRBZnRlcih0LGUsbil7Y29uc3Qgbz1udWxsPT09ZT90aGlzLl9pdEhlYWQ6ZS5fbmV4dDtyZXR1cm4gdC5fbmV4dD1vLHQuX3ByZXY9ZSxudWxsPT09bz90aGlzLl9pdFRhaWw9dDpvLl9wcmV2PXQsbnVsbD09PWU/dGhpcy5faXRIZWFkPXQ6ZS5fbmV4dD10LG51bGw9PT10aGlzLl9saW5rZWRSZWNvcmRzJiYodGhpcy5fbGlua2VkUmVjb3Jkcz1uZXcgT2gpLHRoaXMuX2xpbmtlZFJlY29yZHMucHV0KHQpLHQuY3VycmVudEluZGV4PW4sdH1fcmVtb3ZlKHQpe3JldHVybiB0aGlzLl9hZGRUb1JlbW92YWxzKHRoaXMuX3VubGluayh0KSl9X3VubGluayh0KXtudWxsIT09dGhpcy5fbGlua2VkUmVjb3JkcyYmdGhpcy5fbGlua2VkUmVjb3Jkcy5yZW1vdmUodCk7Y29uc3QgZT10Ll9wcmV2LG49dC5fbmV4dDtyZXR1cm4gbnVsbD09PWU/dGhpcy5faXRIZWFkPW46ZS5fbmV4dD1uLG51bGw9PT1uP3RoaXMuX2l0VGFpbD1lOm4uX3ByZXY9ZSx0fV9hZGRUb01vdmVzKHQsZSl7cmV0dXJuIHQucHJldmlvdXNJbmRleD09PWV8fCh0aGlzLl9tb3Zlc1RhaWw9bnVsbD09PXRoaXMuX21vdmVzVGFpbD90aGlzLl9tb3Zlc0hlYWQ9dDp0aGlzLl9tb3Zlc1RhaWwuX25leHRNb3ZlZD10KSx0fV9hZGRUb1JlbW92YWxzKHQpe3JldHVybiBudWxsPT09dGhpcy5fdW5saW5rZWRSZWNvcmRzJiYodGhpcy5fdW5saW5rZWRSZWNvcmRzPW5ldyBPaCksdGhpcy5fdW5saW5rZWRSZWNvcmRzLnB1dCh0KSx0LmN1cnJlbnRJbmRleD1udWxsLHQuX25leHRSZW1vdmVkPW51bGwsbnVsbD09PXRoaXMuX3JlbW92YWxzVGFpbD8odGhpcy5fcmVtb3ZhbHNUYWlsPXRoaXMuX3JlbW92YWxzSGVhZD10LHQuX3ByZXZSZW1vdmVkPW51bGwpOih0Ll9wcmV2UmVtb3ZlZD10aGlzLl9yZW1vdmFsc1RhaWwsdGhpcy5fcmVtb3ZhbHNUYWlsPXRoaXMuX3JlbW92YWxzVGFpbC5fbmV4dFJlbW92ZWQ9dCksdH1fYWRkSWRlbnRpdHlDaGFuZ2UodCxlKXtyZXR1cm4gdC5pdGVtPWUsdGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbD1udWxsPT09dGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbD90aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkPXQ6dGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbC5fbmV4dElkZW50aXR5Q2hhbmdlPXQsdH19Y2xhc3Mgdmh7Y29uc3RydWN0b3IodCxlKXt0aGlzLml0ZW09dCx0aGlzLnRyYWNrQnlJZD1lLHRoaXMuY3VycmVudEluZGV4PW51bGwsdGhpcy5wcmV2aW91c0luZGV4PW51bGwsdGhpcy5fbmV4dFByZXZpb3VzPW51bGwsdGhpcy5fcHJldj1udWxsLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wcmV2RHVwPW51bGwsdGhpcy5fbmV4dER1cD1udWxsLHRoaXMuX3ByZXZSZW1vdmVkPW51bGwsdGhpcy5fbmV4dFJlbW92ZWQ9bnVsbCx0aGlzLl9uZXh0QWRkZWQ9bnVsbCx0aGlzLl9uZXh0TW92ZWQ9bnVsbCx0aGlzLl9uZXh0SWRlbnRpdHlDaGFuZ2U9bnVsbH19Y2xhc3MgeGh7Y29uc3RydWN0b3IoKXt0aGlzLl9oZWFkPW51bGwsdGhpcy5fdGFpbD1udWxsfWFkZCh0KXtudWxsPT09dGhpcy5faGVhZD8odGhpcy5faGVhZD10aGlzLl90YWlsPXQsdC5fbmV4dER1cD1udWxsLHQuX3ByZXZEdXA9bnVsbCk6KHRoaXMuX3RhaWwuX25leHREdXA9dCx0Ll9wcmV2RHVwPXRoaXMuX3RhaWwsdC5fbmV4dER1cD1udWxsLHRoaXMuX3RhaWw9dCl9Z2V0KHQsZSl7bGV0IG47Zm9yKG49dGhpcy5faGVhZDtudWxsIT09bjtuPW4uX25leHREdXApaWYoKG51bGw9PT1lfHxlPD1uLmN1cnJlbnRJbmRleCkmJk9iamVjdC5pcyhuLnRyYWNrQnlJZCx0KSlyZXR1cm4gbjtyZXR1cm4gbnVsbH1yZW1vdmUodCl7Y29uc3QgZT10Ll9wcmV2RHVwLG49dC5fbmV4dER1cDtyZXR1cm4gbnVsbD09PWU/dGhpcy5faGVhZD1uOmUuX25leHREdXA9bixudWxsPT09bj90aGlzLl90YWlsPWU6bi5fcHJldkR1cD1lLG51bGw9PT10aGlzLl9oZWFkfX1jbGFzcyBPaHtjb25zdHJ1Y3Rvcigpe3RoaXMubWFwPW5ldyBNYXB9cHV0KHQpe2NvbnN0IGU9dC50cmFja0J5SWQ7bGV0IG49dGhpcy5tYXAuZ2V0KGUpO258fChuPW5ldyB4aCx0aGlzLm1hcC5zZXQoZSxuKSksbi5hZGQodCl9Z2V0KHQsZSl7Y29uc3Qgbj10aGlzLm1hcC5nZXQodCk7cmV0dXJuIG4/bi5nZXQodCxlKTpudWxsfXJlbW92ZSh0KXtjb25zdCBlPXQudHJhY2tCeUlkO3JldHVybiB0aGlzLm1hcC5nZXQoZSkucmVtb3ZlKHQpJiZ0aGlzLm1hcC5kZWxldGUoZSksdH1nZXQgaXNFbXB0eSgpe3JldHVybiAwPT09dGhpcy5tYXAuc2l6ZX1jbGVhcigpe3RoaXMubWFwLmNsZWFyKCl9fWZ1bmN0aW9uIFBoKHQsZSxuKXtjb25zdCBvPXQucHJldmlvdXNJbmRleDtpZihudWxsPT09bylyZXR1cm4gbztsZXQgaT0wO3JldHVybiBuJiZvPG4ubGVuZ3RoJiYoaT1uW29dKSxvK2UraX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY2xhc3Mgd2h7Y29uc3RydWN0b3IoKXt9c3VwcG9ydHModCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBNYXB8fGttKHQpfWNyZWF0ZSgpe3JldHVybiBuZXcga2h9fWNsYXNzIGtoe2NvbnN0cnVjdG9yKCl7dGhpcy5fcmVjb3Jkcz1uZXcgTWFwLHRoaXMuX21hcEhlYWQ9bnVsbCx0aGlzLl9hcHBlbmRBZnRlcj1udWxsLHRoaXMuX3ByZXZpb3VzTWFwSGVhZD1udWxsLHRoaXMuX2NoYW5nZXNIZWFkPW51bGwsdGhpcy5fY2hhbmdlc1RhaWw9bnVsbCx0aGlzLl9hZGRpdGlvbnNIZWFkPW51bGwsdGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLHRoaXMuX3JlbW92YWxzSGVhZD1udWxsLHRoaXMuX3JlbW92YWxzVGFpbD1udWxsfWdldCBpc0RpcnR5KCl7cmV0dXJuIG51bGwhPT10aGlzLl9hZGRpdGlvbnNIZWFkfHxudWxsIT09dGhpcy5fY2hhbmdlc0hlYWR8fG51bGwhPT10aGlzLl9yZW1vdmFsc0hlYWR9Zm9yRWFjaEl0ZW0odCl7bGV0IGU7Zm9yKGU9dGhpcy5fbWFwSGVhZDtudWxsIT09ZTtlPWUuX25leHQpdChlKX1mb3JFYWNoUHJldmlvdXNJdGVtKHQpe2xldCBlO2ZvcihlPXRoaXMuX3ByZXZpb3VzTWFwSGVhZDtudWxsIT09ZTtlPWUuX25leHRQcmV2aW91cyl0KGUpfWZvckVhY2hDaGFuZ2VkSXRlbSh0KXtsZXQgZTtmb3IoZT10aGlzLl9jaGFuZ2VzSGVhZDtudWxsIT09ZTtlPWUuX25leHRDaGFuZ2VkKXQoZSl9Zm9yRWFjaEFkZGVkSXRlbSh0KXtsZXQgZTtmb3IoZT10aGlzLl9hZGRpdGlvbnNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dEFkZGVkKXQoZSl9Zm9yRWFjaFJlbW92ZWRJdGVtKHQpe2xldCBlO2ZvcihlPXRoaXMuX3JlbW92YWxzSGVhZDtudWxsIT09ZTtlPWUuX25leHRSZW1vdmVkKXQoZSl9ZGlmZih0KXtpZih0KXtpZighKHQgaW5zdGFuY2VvZiBNYXB8fGttKHQpKSl0aHJvdyBuZXcgRXJyb3IoYEVycm9yIHRyeWluZyB0byBkaWZmICcke1JuKHQpfScuIE9ubHkgbWFwcyBhbmQgb2JqZWN0cyBhcmUgYWxsb3dlZGApfWVsc2UgdD1uZXcgTWFwO3JldHVybiB0aGlzLmNoZWNrKHQpP3RoaXM6bnVsbH1vbkRlc3Ryb3koKXt9Y2hlY2sodCl7dGhpcy5fcmVzZXQoKTtsZXQgZT10aGlzLl9tYXBIZWFkO2lmKHRoaXMuX2FwcGVuZEFmdGVyPW51bGwsdGhpcy5fZm9yRWFjaCh0LCgodCxuKT0+e2lmKGUmJmUua2V5PT09bil0aGlzLl9tYXliZUFkZFRvQ2hhbmdlcyhlLHQpLHRoaXMuX2FwcGVuZEFmdGVyPWUsZT1lLl9uZXh0O2Vsc2V7Y29uc3Qgbz10aGlzLl9nZXRPckNyZWF0ZVJlY29yZEZvcktleShuLHQpO2U9dGhpcy5faW5zZXJ0QmVmb3JlT3JBcHBlbmQoZSxvKX19KSksZSl7ZS5fcHJldiYmKGUuX3ByZXYuX25leHQ9bnVsbCksdGhpcy5fcmVtb3ZhbHNIZWFkPWU7Zm9yKGxldCB0PWU7bnVsbCE9PXQ7dD10Ll9uZXh0UmVtb3ZlZCl0PT09dGhpcy5fbWFwSGVhZCYmKHRoaXMuX21hcEhlYWQ9bnVsbCksdGhpcy5fcmVjb3Jkcy5kZWxldGUodC5rZXkpLHQuX25leHRSZW1vdmVkPXQuX25leHQsdC5wcmV2aW91c1ZhbHVlPXQuY3VycmVudFZhbHVlLHQuY3VycmVudFZhbHVlPW51bGwsdC5fcHJldj1udWxsLHQuX25leHQ9bnVsbH1yZXR1cm4gdGhpcy5fY2hhbmdlc1RhaWwmJih0aGlzLl9jaGFuZ2VzVGFpbC5fbmV4dENoYW5nZWQ9bnVsbCksdGhpcy5fYWRkaXRpb25zVGFpbCYmKHRoaXMuX2FkZGl0aW9uc1RhaWwuX25leHRBZGRlZD1udWxsKSx0aGlzLmlzRGlydHl9X2luc2VydEJlZm9yZU9yQXBwZW5kKHQsZSl7aWYodCl7Y29uc3Qgbj10Ll9wcmV2O3JldHVybiBlLl9uZXh0PXQsZS5fcHJldj1uLHQuX3ByZXY9ZSxuJiYobi5fbmV4dD1lKSx0PT09dGhpcy5fbWFwSGVhZCYmKHRoaXMuX21hcEhlYWQ9ZSksdGhpcy5fYXBwZW5kQWZ0ZXI9dCx0fXJldHVybiB0aGlzLl9hcHBlbmRBZnRlcj8odGhpcy5fYXBwZW5kQWZ0ZXIuX25leHQ9ZSxlLl9wcmV2PXRoaXMuX2FwcGVuZEFmdGVyKTp0aGlzLl9tYXBIZWFkPWUsdGhpcy5fYXBwZW5kQWZ0ZXI9ZSxudWxsfV9nZXRPckNyZWF0ZVJlY29yZEZvcktleSh0LGUpe2lmKHRoaXMuX3JlY29yZHMuaGFzKHQpKXtjb25zdCBuPXRoaXMuX3JlY29yZHMuZ2V0KHQpO3RoaXMuX21heWJlQWRkVG9DaGFuZ2VzKG4sZSk7Y29uc3Qgbz1uLl9wcmV2LGk9bi5fbmV4dDtyZXR1cm4gbyYmKG8uX25leHQ9aSksaSYmKGkuX3ByZXY9byksbi5fbmV4dD1udWxsLG4uX3ByZXY9bnVsbCxufWNvbnN0IG49bmV3IFNoKHQpO3JldHVybiB0aGlzLl9yZWNvcmRzLnNldCh0LG4pLG4uY3VycmVudFZhbHVlPWUsdGhpcy5fYWRkVG9BZGRpdGlvbnMobiksbn1fcmVzZXQoKXtpZih0aGlzLmlzRGlydHkpe2xldCB0O2Zvcih0aGlzLl9wcmV2aW91c01hcEhlYWQ9dGhpcy5fbWFwSGVhZCx0PXRoaXMuX3ByZXZpb3VzTWFwSGVhZDtudWxsIT09dDt0PXQuX25leHQpdC5fbmV4dFByZXZpb3VzPXQuX25leHQ7Zm9yKHQ9dGhpcy5fY2hhbmdlc0hlYWQ7bnVsbCE9PXQ7dD10Ll9uZXh0Q2hhbmdlZCl0LnByZXZpb3VzVmFsdWU9dC5jdXJyZW50VmFsdWU7Zm9yKHQ9dGhpcy5fYWRkaXRpb25zSGVhZDtudWxsIT10O3Q9dC5fbmV4dEFkZGVkKXQucHJldmlvdXNWYWx1ZT10LmN1cnJlbnRWYWx1ZTt0aGlzLl9jaGFuZ2VzSGVhZD10aGlzLl9jaGFuZ2VzVGFpbD1udWxsLHRoaXMuX2FkZGl0aW9uc0hlYWQ9dGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLHRoaXMuX3JlbW92YWxzSGVhZD1udWxsfX1fbWF5YmVBZGRUb0NoYW5nZXModCxlKXtPYmplY3QuaXMoZSx0LmN1cnJlbnRWYWx1ZSl8fCh0LnByZXZpb3VzVmFsdWU9dC5jdXJyZW50VmFsdWUsdC5jdXJyZW50VmFsdWU9ZSx0aGlzLl9hZGRUb0NoYW5nZXModCkpfV9hZGRUb0FkZGl0aW9ucyh0KXtudWxsPT09dGhpcy5fYWRkaXRpb25zSGVhZD90aGlzLl9hZGRpdGlvbnNIZWFkPXRoaXMuX2FkZGl0aW9uc1RhaWw9dDoodGhpcy5fYWRkaXRpb25zVGFpbC5fbmV4dEFkZGVkPXQsdGhpcy5fYWRkaXRpb25zVGFpbD10KX1fYWRkVG9DaGFuZ2VzKHQpe251bGw9PT10aGlzLl9jaGFuZ2VzSGVhZD90aGlzLl9jaGFuZ2VzSGVhZD10aGlzLl9jaGFuZ2VzVGFpbD10Oih0aGlzLl9jaGFuZ2VzVGFpbC5fbmV4dENoYW5nZWQ9dCx0aGlzLl9jaGFuZ2VzVGFpbD10KX1fZm9yRWFjaCh0LGUpe3QgaW5zdGFuY2VvZiBNYXA/dC5mb3JFYWNoKGUpOk9iamVjdC5rZXlzKHQpLmZvckVhY2goKG49PmUodFtuXSxuKSkpfX1jbGFzcyBTaHtjb25zdHJ1Y3Rvcih0KXt0aGlzLmtleT10LHRoaXMucHJldmlvdXNWYWx1ZT1udWxsLHRoaXMuY3VycmVudFZhbHVlPW51bGwsdGhpcy5fbmV4dFByZXZpb3VzPW51bGwsdGhpcy5fbmV4dD1udWxsLHRoaXMuX3ByZXY9bnVsbCx0aGlzLl9uZXh0QWRkZWQ9bnVsbCx0aGlzLl9uZXh0UmVtb3ZlZD1udWxsLHRoaXMuX25leHRDaGFuZ2VkPW51bGx9fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiBEaCgpe3JldHVybiBuZXcgRWgoW25ldyBfaF0pfWNsYXNzIEVoe2NvbnN0cnVjdG9yKHQpe3RoaXMuZmFjdG9yaWVzPXR9c3RhdGljIGNyZWF0ZSh0LGUpe2lmKG51bGwhPWUpe2NvbnN0IG49ZS5mYWN0b3JpZXMuc2xpY2UoKTt0PXQuY29uY2F0KG4pfXJldHVybiBuZXcgRWgodCl9c3RhdGljIGV4dGVuZCh0KXtyZXR1cm57cHJvdmlkZTpFaCx1c2VGYWN0b3J5OmU9PkVoLmNyZWF0ZSh0LGV8fERoKCkpLGRlcHM6W1tFaCxuZXcgTXMsbmV3IF9zXV19fWZpbmQodCl7Y29uc3QgZT10aGlzLmZhY3Rvcmllcy5maW5kKChlPT5lLnN1cHBvcnRzKHQpKSk7aWYobnVsbCE9ZSlyZXR1cm4gZTt0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBmaW5kIGEgZGlmZmVyIHN1cHBvcnRpbmcgb2JqZWN0ICcke3R9JyBvZiB0eXBlICckeyhmdW5jdGlvbiBuKHQpe3JldHVybiB0Lm5hbWV8fHR5cGVvZiB0fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8pKHQpfSdgKX19ZnVuY3Rpb24gQWgoKXtyZXR1cm4gbmV3IFJoKFtuZXcgd2hdKX1FaC7JtXByb3Y9bG8oe3Rva2VuOkVoLHByb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6RGh9KTtjbGFzcyBSaHtjb25zdHJ1Y3Rvcih0KXt0aGlzLmZhY3Rvcmllcz10fXN0YXRpYyBjcmVhdGUodCxlKXtpZihlKXtjb25zdCBuPWUuZmFjdG9yaWVzLnNsaWNlKCk7dD10LmNvbmNhdChuKX1yZXR1cm4gbmV3IFJoKHQpfXN0YXRpYyBleHRlbmQodCl7cmV0dXJue3Byb3ZpZGU6UmgsdXNlRmFjdG9yeTplPT5SaC5jcmVhdGUodCxlfHxBaCgpKSxkZXBzOltbUmgsbmV3IE1zLG5ldyBfc11dfX1maW5kKHQpe2NvbnN0IGU9dGhpcy5mYWN0b3JpZXMuZmluZCgoZT0+ZS5zdXBwb3J0cyh0KSkpO2lmKGUpcmV0dXJuIGU7dGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCBhIGRpZmZlciBzdXBwb3J0aW5nIG9iamVjdCAnJHt0fSdgKX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpmdW5jdGlvbiBUaCh0LGUsbixvLGk9ITEpe2Zvcig7bnVsbCE9PW47KXtuZ0Rldk1vZGUmJlphKG4sNjMpO2NvbnN0IGE9ZVtuLmluZGV4XTtpZihudWxsIT09YSYmby5wdXNoKFVpKGEpKSxzaShhKSlmb3IobGV0IHQ9YWk7dDxhLmxlbmd0aDt0Kyspe2NvbnN0IGU9YVt0XSxuPWVbMV0uZmlyc3RDaGlsZDtudWxsIT09biYmVGgoZVsxXSxlLG4sbyl9Y29uc3Qgcj1uLnR5cGU7aWYoOCZyKVRoKHQsZSxuLmNoaWxkLG8pO2Vsc2UgaWYoMzImcil7Y29uc3QgdD1uYyhuLGUpO2xldCBpO2Zvcig7aT10KCk7KW8ucHVzaChpKX1lbHNlIGlmKDE2JnIpe2NvbnN0IHQ9RWMoZSxuKTtpZihBcnJheS5pc0FycmF5KHQpKW8ucHVzaCguLi50KTtlbHNle2NvbnN0IG49b2MoZVsxNl0pO25nRGV2TW9kZSYmT2kobiksVGgoblsxXSxuLHQsbywhMCl9fW49aT9uLnByb2plY3Rpb25OZXh0Om4ubmV4dH1yZXR1cm4gb30KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovUmguybVwcm92PWxvKHt0b2tlbjpSaCxwcm92aWRlZEluOiJyb290IixmYWN0b3J5OkFofSk7Y2xhc3MgTmh7Y29uc3RydWN0b3IodCxlKXt0aGlzLl9sVmlldz10LHRoaXMuX2NkUmVmSW5qZWN0aW5nVmlldz1lLHRoaXMuX2FwcFJlZj1udWxsLHRoaXMuX2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyPSExfWdldCByb290Tm9kZXMoKXtjb25zdCB0PXRoaXMuX2xWaWV3LGU9dFsxXTtyZXR1cm4gVGgoZSx0LGUuZmlyc3RDaGlsZCxbXSl9Z2V0IGNvbnRleHQoKXtyZXR1cm4gdGhpcy5fbFZpZXdbOF19Z2V0IGRlc3Ryb3llZCgpe3JldHVybiAyNTY9PSgyNTYmdGhpcy5fbFZpZXdbMl0pfWRlc3Ryb3koKXtpZih0aGlzLl9hcHBSZWYpdGhpcy5fYXBwUmVmLmRldGFjaFZpZXcodGhpcyk7ZWxzZSBpZih0aGlzLl9hdHRhY2hlZFRvVmlld0NvbnRhaW5lcil7Y29uc3QgdD10aGlzLl9sVmlld1szXTtpZihzaSh0KSl7Y29uc3QgZT10WzhdLG49ZT9lLmluZGV4T2YodGhpcyk6LTE7bj4tMSYmKG5nRGV2TW9kZSYmWG4obix0LmluZGV4T2YodGhpcy5fbFZpZXcpLWFpLCJBbiBhdHRhY2hlZCB2aWV3IHNob3VsZCBiZSBpbiB0aGUgc2FtZSBwb3NpdGlvbiB3aXRoaW4gaXRzIGNvbnRhaW5lciBhcyBpdHMgVmlld1JlZiBpbiB0aGUgVklFV19SRUZTIGFycmF5LiIpLGZjKHQsbiksWnIoZSxuKSl9dGhpcy5fYXR0YWNoZWRUb1ZpZXdDb250YWluZXI9ITF9Z2ModGhpcy5fbFZpZXdbMV0sdGhpcy5fbFZpZXcpfW9uRGVzdHJveSh0KXtKZCh0aGlzLl9sVmlld1sxXSx0aGlzLl9sVmlldyxudWxsLHQpfW1hcmtGb3JDaGVjaygpe01wKHRoaXMuX2NkUmVmSW5qZWN0aW5nVmlld3x8dGhpcy5fbFZpZXcpfWRldGFjaCgpe3RoaXMuX2xWaWV3WzJdJj0tMTI5fXJlYXR0YWNoKCl7dGhpcy5fbFZpZXdbMl18PTEyOH1kZXRlY3RDaGFuZ2VzKCl7eHAodGhpcy5fbFZpZXdbMV0sdGhpcy5fbFZpZXcsdGhpcy5jb250ZXh0KX1jaGVja05vQ2hhbmdlcygpeyEoZnVuY3Rpb24gdChlLG4sbyl7ZmEoITApO3RyeXt4cChlLG4sbyl9ZmluYWxseXtmYSghMSl9fSkodGhpcy5fbFZpZXdbMV0sdGhpcy5fbFZpZXcsdGhpcy5jb250ZXh0KX1hdHRhY2hUb1ZpZXdDb250YWluZXJSZWYoKXtpZih0aGlzLl9hcHBSZWYpdGhyb3cgbmV3IEVycm9yKCJUaGlzIHZpZXcgaXMgYWxyZWFkeSBhdHRhY2hlZCBkaXJlY3RseSB0byB0aGUgQXBwbGljYXRpb25SZWYhIik7dGhpcy5fYXR0YWNoZWRUb1ZpZXdDb250YWluZXI9ITB9ZGV0YWNoRnJvbUFwcFJlZigpe3RoaXMuX2FwcFJlZj1udWxsLChmdW5jdGlvbiB0KGUsbil7TmMoZSxuLG5bMTFdLDIsbnVsbCxudWxsKX0pKHRoaXMuX2xWaWV3WzFdLHRoaXMuX2xWaWV3KX1hdHRhY2hUb0FwcFJlZih0KXtpZih0aGlzLl9hdHRhY2hlZFRvVmlld0NvbnRhaW5lcil0aHJvdyBuZXcgRXJyb3IoIlRoaXMgdmlldyBpcyBhbHJlYWR5IGF0dGFjaGVkIHRvIGEgVmlld0NvbnRhaW5lciEiKTt0aGlzLl9hcHBSZWY9dH19Y2xhc3MgSWggZXh0ZW5kcyBOaHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLl92aWV3PXR9ZGV0ZWN0Q2hhbmdlcygpe09wKHRoaXMuX3ZpZXcpfWNoZWNrTm9DaGFuZ2VzKCl7IShmdW5jdGlvbiB0KGUpe2ZhKCEwKTt0cnl7T3AoZSl9ZmluYWxseXtmYSghMSl9fSkodGhpcy5fdmlldyl9Z2V0IGNvbnRleHQoKXtyZXR1cm4gbnVsbH19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NvbnN0IHpoPUZoO2NsYXNzIEhoe31mdW5jdGlvbiBGaCh0PSExKXtyZXR1cm4oZnVuY3Rpb24gZSh0LG4sbyl7aWYoIW8mJmNpKHQpKXtjb25zdCBlPVppKHQuaW5kZXgsbik7cmV0dXJuIG5ldyBOaChlLGUpfXJldHVybiA0NyZ0LnR5cGU/bmV3IE5oKG5bMTZdLG4pOm51bGx9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLykoc2EoKSxpYSgpLHQpfUhoLl9fTkdfRUxFTUVOVF9JRF9fPXpoLEhoLl9fQ2hhbmdlRGV0ZWN0b3JSZWZfXz0hMDtjb25zdCBMaD1bbmV3IHdoXSxCaD1bbmV3IF9oXSxWaD1uZXcgRWgoQmgpLGpoPW5ldyBSaChMaCk7Y2xhc3MgVWh7fVVoLl9fTkdfRUxFTUVOVF9JRF9fPWZ1bmN0aW9uIFdoKCl7cmV0dXJuIHFoKHNhKCksaWEoKSl9O2NvbnN0IEdoPVVoLFloPWNsYXNzIGV4dGVuZHMgR2h7Y29uc3RydWN0b3IodCxlLG4pe3N1cGVyKCksdGhpcy5fZGVjbGFyYXRpb25MVmlldz10LHRoaXMuX2RlY2xhcmF0aW9uVENvbnRhaW5lcj1lLHRoaXMuZWxlbWVudFJlZj1ufWNyZWF0ZUVtYmVkZGVkVmlldyh0KXtjb25zdCBlPXRoaXMuX2RlY2xhcmF0aW9uVENvbnRhaW5lci50Vmlld3Msbj1GZCh0aGlzLl9kZWNsYXJhdGlvbkxWaWV3LGUsdCwxNixudWxsLGUuZGVjbFROb2RlLG51bGwsbnVsbCxudWxsLG51bGwpLG89dGhpcy5fZGVjbGFyYXRpb25MVmlld1t0aGlzLl9kZWNsYXJhdGlvblRDb250YWluZXIuaW5kZXhdO25nRGV2TW9kZSYmYmkobyksblsxN109bztjb25zdCBpPXRoaXMuX2RlY2xhcmF0aW9uTFZpZXdbMTldO3JldHVybiBudWxsIT09aSYmKG5bMTldPWkuY3JlYXRlRW1iZWRkZWRWaWV3KGUpKSxqZChlLG4sdCksbmV3IE5oKG4pfX07ZnVuY3Rpb24gcWgodCxlKXtyZXR1cm4gNCZ0LnR5cGU/KG5nRGV2TW9kZSYmb28odC50Vmlld3MsIlRWaWV3IG11c3QgYmUgYWxsb2NhdGVkIiksbmV3IFloKGUsdCxsaCh0LGUpKSk6bnVsbH0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY2xhc3MgWmh7fWNsYXNzIFhoe31YaC5fX05HX0VMRU1FTlRfSURfXz1mdW5jdGlvbiBLaCgpe3JldHVybiBlYihzYSgpLGlhKCkpfTtjb25zdCBKaD1YaCxRaD1jbGFzcyBleHRlbmRzIEpoe2NvbnN0cnVjdG9yKHQsZSxuKXtzdXBlcigpLHRoaXMuX2xDb250YWluZXI9dCx0aGlzLl9ob3N0VE5vZGU9ZSx0aGlzLl9ob3N0TFZpZXc9bn1nZXQgZWxlbWVudCgpe3JldHVybiBsaCh0aGlzLl9ob3N0VE5vZGUsdGhpcy5faG9zdExWaWV3KX1nZXQgaW5qZWN0b3IoKXtyZXR1cm4gbmV3IE1yKHRoaXMuX2hvc3RUTm9kZSx0aGlzLl9ob3N0TFZpZXcpfWdldCBwYXJlbnRJbmplY3Rvcigpe2NvbnN0IHQ9Y3IodGhpcy5faG9zdFROb2RlLHRoaXMuX2hvc3RMVmlldyk7aWYodHIodCkpe2NvbnN0IGU9bnIodCx0aGlzLl9ob3N0TFZpZXcpLG49ZXIodCk7cmV0dXJuIG5nRGV2TW9kZSYmUGkoZSxuKSxuZXcgTXIoZVsxXS5kYXRhW24rOF0sZSl9cmV0dXJuIG5ldyBNcihudWxsLHRoaXMuX2hvc3RMVmlldyl9Y2xlYXIoKXtmb3IoO3RoaXMubGVuZ3RoPjA7KXRoaXMucmVtb3ZlKHRoaXMubGVuZ3RoLTEpfWdldCh0KXtjb25zdCBlPSRoKHRoaXMuX2xDb250YWluZXIpO3JldHVybiBudWxsIT09ZSYmZVt0XXx8bnVsbH1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMuX2xDb250YWluZXIubGVuZ3RoLWFpfWNyZWF0ZUVtYmVkZGVkVmlldyh0LGUsbil7Y29uc3Qgbz10LmNyZWF0ZUVtYmVkZGVkVmlldyhlfHx7fSk7cmV0dXJuIHRoaXMuaW5zZXJ0KG8sbiksb31jcmVhdGVDb21wb25lbnQodCxlLG4sbyxpKXtjb25zdCBhPW58fHRoaXMucGFyZW50SW5qZWN0b3I7aWYoIWkmJm51bGw9PXQubmdNb2R1bGUmJmEpe2NvbnN0IHQ9YS5nZXQoWmgsbnVsbCk7dCYmKGk9dCl9Y29uc3Qgcj10LmNyZWF0ZShhLG8sdm9pZCAwLGkpO3JldHVybiB0aGlzLmluc2VydChyLmhvc3RWaWV3LGUpLHJ9aW5zZXJ0KHQsZSl7Y29uc3Qgbj10Ll9sVmlldyxvPW5bMV07aWYobmdEZXZNb2RlJiZ0LmRlc3Ryb3llZCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBpbnNlcnQgYSBkZXN0cm95ZWQgVmlldyBpbiBhIFZpZXdDb250YWluZXIhIik7aWYoKGZ1bmN0aW9uIGkodCl7cmV0dXJuIHNpKHRbM10pfSkobikpe2NvbnN0IGU9dGhpcy5pbmRleE9mKHQpO2lmKC0xIT09ZSl0aGlzLmRldGFjaChlKTtlbHNle2NvbnN0IGU9blszXTtuZ0Rldk1vZGUmJlhuKHNpKGUpLCEwLCJBbiBhdHRhY2hlZCB2aWV3IHNob3VsZCBoYXZlIGl0cyBQQVJFTlQgcG9pbnQgdG8gYSBjb250YWluZXIuIik7Y29uc3Qgbz1uZXcgUWgoZSxlWzZdLGVbM10pO28uZGV0YWNoKG8uaW5kZXhPZih0KSl9fWNvbnN0IGE9dGhpcy5fYWRqdXN0SW5kZXgoZSkscj10aGlzLl9sQ29udGFpbmVyOyEoZnVuY3Rpb24gcyh0LGUsbixvKXtuZ0Rldk1vZGUmJl9pKGUpLG5nRGV2TW9kZSYmYmkobik7Y29uc3QgaT1haStvLGE9bi5sZW5ndGg7bz4wJiYobltpLTFdWzRdPWUpLG88YS1haT8oZVs0XT1uW2ldLHFyKG4sYWkrbyxlKSk6KG4ucHVzaChlKSxlWzRdPW51bGwpLGVbM109bjtjb25zdCByPWVbMTddO251bGwhPT1yJiZuIT09ciYmKGZ1bmN0aW9uIHModCxlKXtuZ0Rldk1vZGUmJm9vKGUsIkxWaWV3IHJlcXVpcmVkIiksbmdEZXZNb2RlJiZiaSh0KTtjb25zdCBuPXRbOV0sbz1lWzNdO25nRGV2TW9kZSYmYmkobyk7Y29uc3QgaT1vWzNdWzE2XTtuZ0Rldk1vZGUmJm9vKGksIk1pc3NpbmcgaW5zZXJ0ZWRDb21wb25lbnRMVmlldyIpO2NvbnN0IGE9ZVsxNl07bmdEZXZNb2RlJiZvbyhhLCJNaXNzaW5nIGRlY2xhcmVkQ29tcG9uZW50TFZpZXciKSxhIT09aSYmKHRbMl09ITApLG51bGw9PT1uP3RbOV09W2VdOm4ucHVzaChlKX0pKHIsZSk7Y29uc3QgbD1lWzE5XTtudWxsIT09bCYmbC5pbnNlcnRWaWV3KHQpLGVbMl18PTEyOH0pKG8sbixyLGEpO2NvbnN0IGw9QWMoYSxyKSxjPW5bMTFdLGQ9dmMoYyxyWzddKTtyZXR1cm4gbnVsbCE9PWQmJihmdW5jdGlvbiBwKHQsZSxuLG8saSxhKXtvWzBdPWksb1s2XT1lLE5jKHQsbyxuLDEsaSxhKX0pKG8scls2XSxjLG4sZCxsKSx0LmF0dGFjaFRvVmlld0NvbnRhaW5lclJlZigpLHFyKHRiKHIpLGEsdCksdH1tb3ZlKHQsZSl7aWYobmdEZXZNb2RlJiZ0LmRlc3Ryb3llZCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBtb3ZlIGEgZGVzdHJveWVkIFZpZXcgaW4gYSBWaWV3Q29udGFpbmVyISIpO3JldHVybiB0aGlzLmluc2VydCh0LGUpfWluZGV4T2YodCl7Y29uc3QgZT0kaCh0aGlzLl9sQ29udGFpbmVyKTtyZXR1cm4gbnVsbCE9PWU/ZS5pbmRleE9mKHQpOi0xfXJlbW92ZSh0KXtjb25zdCBlPXRoaXMuX2FkanVzdEluZGV4KHQsLTEpLG49ZmModGhpcy5fbENvbnRhaW5lcixlKTtuJiYoWnIodGIodGhpcy5fbENvbnRhaW5lciksZSksZ2MoblsxXSxuKSl9ZGV0YWNoKHQpe2NvbnN0IGU9dGhpcy5fYWRqdXN0SW5kZXgodCwtMSksbj1mYyh0aGlzLl9sQ29udGFpbmVyLGUpO3JldHVybiBuJiZudWxsIT1acih0Yih0aGlzLl9sQ29udGFpbmVyKSxlKT9uZXcgTmgobik6bnVsbH1fYWRqdXN0SW5kZXgodCxlPTApe3JldHVybiBudWxsPT10P3RoaXMubGVuZ3RoK2U6KG5nRGV2TW9kZSYmKGVvKHQsLTEsYFZpZXdSZWYgaW5kZXggbXVzdCBiZSBwb3NpdGl2ZSwgZ290ICR7dH1gKSwkbih0LHRoaXMubGVuZ3RoKzErZSwiaW5kZXgiKSksdCl9fTtmdW5jdGlvbiAkaCh0KXtyZXR1cm4gdFs4XX1mdW5jdGlvbiB0Yih0KXtyZXR1cm4gdFs4XXx8KHRbOF09W10pfWZ1bmN0aW9uIGViKHQsZSl7bGV0IG47bmdEZXZNb2RlJiZaYSh0LDE1KTtjb25zdCBvPWVbdC5pbmRleF07aWYoc2kobykpbj1vO2Vsc2V7bGV0IGk7aWYoOCZ0LnR5cGUpaT1VaShvKTtlbHNle2NvbnN0IG49ZVsxMV07bmdEZXZNb2RlJiZuZ0Rldk1vZGUucmVuZGVyZXJDcmVhdGVDb21tZW50KyssaT1uLmNyZWF0ZUNvbW1lbnQobmdEZXZNb2RlPyJjb250YWluZXIiOiIiKTtjb25zdCBvPUdpKHQsZSk7X2Mobix2YyhuLG8pLGksKGZ1bmN0aW9uIGkodCxlKXtyZXR1cm4gVmkodCk/dC5uZXh0U2libGluZyhlKTplLm5leHRTaWJsaW5nfSkobixvKSwhMSl9ZVt0LmluZGV4XT1uPWhwKG8sZSxpLHQpLENwKGUsbil9cmV0dXJuIG5ldyBRaChuLHQsZSl9Y29uc3QgbmI9bmV3IE1hcDtmdW5jdGlvbiBvYih0KXtsZXQgZT1uYi5nZXQodCk7cmV0dXJuIGV8fChlPVJuKHQpKyJfIituYi5zaXplLG5iLnNldCh0LGUpKSxlfW9iKFFwKSxvYihJcCksb2IoWmgpLAovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8Kb2IodWgpLG9iKGNoKSxvYihYaCksb2IoVWgpLG9iKEhoKSxvYihRcCksb2IoSXApO2NvbnN0IGliPXt9OwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jbGFzcyBhYiBleHRlbmRzIHJoe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5uZ01vZHVsZT10fXJlc29sdmVDb21wb25lbnRGYWN0b3J5KHQpe25nRGV2TW9kZSYmKGZ1bmN0aW9uIGUodCxuPSJUeXBlIHBhc3NlZCBpbiBpcyBub3QgQ29tcG9uZW50VHlwZSwgaXQgZG9lcyBub3QgaGF2ZSAnybVjbXAnIHByb3BlcnR5LiIpeyRvKHQpfHxpbyhuKX0pKHQpO2NvbnN0IG49JG8odCk7cmV0dXJuIG5ldyBsYihuLHRoaXMubmdNb2R1bGUpfX1mdW5jdGlvbiByYih0KXtjb25zdCBlPVtdO2ZvcihsZXQgbiBpbiB0KXQuaGFzT3duUHJvcGVydHkobikmJmUucHVzaCh7cHJvcE5hbWU6dFtuXSx0ZW1wbGF0ZU5hbWU6bn0pO3JldHVybiBlfWNvbnN0IHNiPW5ldyBOcigiU0NIRURVTEVSX1RPS0VOIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+WWx9KTtjbGFzcyBsYiBleHRlbmRzIGFoe2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIoKSx0aGlzLmNvbXBvbmVudERlZj10LHRoaXMubmdNb2R1bGU9ZSx0aGlzLmNvbXBvbmVudFR5cGU9dC50eXBlLHRoaXMuc2VsZWN0b3I9KGZ1bmN0aW9uIG4odCl7cmV0dXJuIHQubWFwKFhjKS5qb2luKCIsIil9KSh0LnNlbGVjdG9ycyksdGhpcy5uZ0NvbnRlbnRTZWxlY3RvcnM9dC5uZ0NvbnRlbnRTZWxlY3RvcnM/dC5uZ0NvbnRlbnRTZWxlY3RvcnM6W10sdGhpcy5pc0JvdW5kVG9Nb2R1bGU9ISFlfWdldCBpbnB1dHMoKXtyZXR1cm4gcmIodGhpcy5jb21wb25lbnREZWYuaW5wdXRzKX1nZXQgb3V0cHV0cygpe3JldHVybiByYih0aGlzLmNvbXBvbmVudERlZi5vdXRwdXRzKX1jcmVhdGUodCxlLG4sbyl7Y29uc3QgaT0obz1vfHx0aGlzLm5nTW9kdWxlKT8oZnVuY3Rpb24gYSh0LGUpe3JldHVybntnZXQ6KG4sbyxpKT0+e2NvbnN0IGE9dC5nZXQobixpYixpKTtyZXR1cm4gYSE9PWlifHxvPT09aWI/YTplLmdldChuLG8saSl9fX0pKHQsby5pbmplY3Rvcik6dCxyPWkuZ2V0KG1oLGppKSxzPWkuZ2V0KGhoLG51bGwpLGw9ci5jcmVhdGVSZW5kZXJlcihudWxsLHRoaXMuY29tcG9uZW50RGVmKSxjPXRoaXMuY29tcG9uZW50RGVmLnNlbGVjdG9yc1swXVswXXx8ImRpdiIsZD1uPyhmdW5jdGlvbiBwKHQsZSxuKXtpZihWaSh0KSlyZXR1cm4gdC5zZWxlY3RSb290RWxlbWVudChlLG49PT1Qby5TaGFkb3dEb20pO2xldCBvPSJzdHJpbmciPT10eXBlb2YgZT90LnF1ZXJ5U2VsZWN0b3IoZSk6ZTtyZXR1cm4gbmdEZXZNb2RlJiYoZnVuY3Rpb24gaSh0LGUpe2lmKCF0KXRocm93KGZ1bmN0aW9uIG4odCxlKXtyZXR1cm4gbmV3IEVycm9yKGBSZW5kZXJlcjogJHt0fSBbJHtqbihlKX1dYCl9KSgic3RyaW5nIj09dHlwZW9mIGU/Ikhvc3Qgbm9kZSB3aXRoIHNlbGVjdG9yIG5vdCBmb3VuZDoiOiJIb3N0IG5vZGUgaXMgcmVxdWlyZWQ6IixlKX0pKG8sZSksby50ZXh0Q29udGVudD0iIixvfSkobCxuLHRoaXMuY29tcG9uZW50RGVmLmVuY2Fwc3VsYXRpb24pOm1jKHIuY3JlYXRlUmVuZGVyZXIobnVsbCx0aGlzLmNvbXBvbmVudERlZiksYywoZnVuY3Rpb24gbSh0KXtjb25zdCBlPXQudG9Mb3dlckNhc2UoKTtyZXR1cm4ic3ZnIj09PWU/emk6Im1hdGgiPT09ZT9IaTpudWxsfSkoYykpLHU9dGhpcy5jb21wb25lbnREZWYub25QdXNoPzU3Njo1MjgsZj0oZnVuY3Rpb24gZyh0LGUpe3JldHVybntjb21wb25lbnRzOltdLHNjaGVkdWxlcjp0fHxZbCxjbGVhbjprcCxwbGF5ZXJIYW5kbGVyOmV8fG51bGwsZmxhZ3M6MH19KSgpLGg9S2QoMCxudWxsLG51bGwsMSwwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCksYj1GZChudWxsLGgsZix1LG51bGwsbnVsbCxyLGwscyxpKTtsZXQgeSxfO1NhKGIpO3RyeXtjb25zdCB0PShmdW5jdGlvbiBDKHQsZSxuLG8saSxhKXtjb25zdCByPW5bMV07bmdEZXZNb2RlJiZybyhuLDIwKSxuWzIwXT10O2NvbnN0IHM9TGQociwyMCwyLCIjaG9zdCIsbnVsbCksbD1zLm1lcmdlZEF0dHJzPWUuaG9zdEF0dHJzO251bGwhPT1sJiYoTnAocyxsLCEwKSxudWxsIT09dCYmKFhhKGksdCxsKSxudWxsIT09cy5jbGFzc2VzJiZIYyhpLHQscy5jbGFzc2VzKSxudWxsIT09cy5zdHlsZXMmJnpjKGksdCxzLnN0eWxlcykpKTtjb25zdCBjPW8uY3JlYXRlUmVuZGVyZXIodCxlKSxkPUZkKG4sWGQoZSksbnVsbCxlLm9uUHVzaD82NDoxNixuWzIwXSxzLG8sYyxhfHxudWxsLG51bGwpO3JldHVybiByLmZpcnN0Q3JlYXRlUGFzcyYmKGRyKHJyKHMsbikscixlLnR5cGUpLHJwKHIscyksbHAocyxuLmxlbmd0aCwxKSksQ3AobixkKSxuWzIwXT1kfSkoZCx0aGlzLmNvbXBvbmVudERlZixiLHIsbCk7aWYoZClpZihuKVhhKGwsZCxbIm5nLXZlcnNpb24iLHloLmZ1bGxdKTtlbHNle2NvbnN0e2F0dHJzOnQsY2xhc3NlczplfT0oZnVuY3Rpb24gTSh0KXtjb25zdCBlPVtdLG49W107bGV0IG89MSxpPTI7Zm9yKDtvPHQubGVuZ3RoOyl7bGV0IGE9dFtvXTtpZigic3RyaW5nIj09dHlwZW9mIGEpMj09PWk/IiIhPT1hJiZlLnB1c2goYSx0Wysrb10pOjg9PT1pJiZuLnB1c2goYSk7ZWxzZXtpZighV2MoaSkpYnJlYWs7aT1hfW8rK31yZXR1cm57YXR0cnM6ZSxjbGFzc2VzOm59fSkodGhpcy5jb21wb25lbnREZWYuc2VsZWN0b3JzWzBdKTt0JiZYYShsLGQsdCksZSYmZS5sZW5ndGg+MCYmSGMobCxkLGUuam9pbigiICIpKX1pZihfPVlpKGgsb2kpLHZvaWQgMCE9PWUpe2NvbnN0IHQ9Xy5wcm9qZWN0aW9uPVtdO2ZvcihsZXQgbj0wO248dGhpcy5uZ0NvbnRlbnRTZWxlY3RvcnMubGVuZ3RoO24rKyl7Y29uc3Qgbz1lW25dO3QucHVzaChudWxsIT1vP0FycmF5LmZyb20obyk6bnVsbCl9fXk9KGZ1bmN0aW9uIHYodCxlLG4sbyxpKXtjb25zdCBhPW5bMV0scj0oZnVuY3Rpb24gcyh0LGUsbil7Y29uc3Qgbz1zYSgpO2lmKHQuZmlyc3RDcmVhdGVQYXNzKXtuLnByb3ZpZGVyc1Jlc29sdmVyJiZuLnByb3ZpZGVyc1Jlc29sdmVyKG4pO2NvbnN0IGk9VmQodCxlLDEsbnVsbCk7bmdEZXZNb2RlJiZYbihpLG8uZGlyZWN0aXZlU3RhcnQsIkJlY2F1c2UgdGhpcyBpcyBhIHJvb3QgY29tcG9uZW50IHRoZSBhbGxvY2F0ZWQgZXhwYW5kbyBzaG91bGQgbWF0Y2ggdGhlIFROb2RlIGNvbXBvbmVudC4iKSxjcCh0LG8sZSxpLG4pfWNvbnN0IGk9eXIoZSx0LG8uZGlyZWN0aXZlU3RhcnQsbyk7VmwoaSxlKTtjb25zdCBhPUdpKG8sZSk7cmV0dXJuIGEmJlZsKGEsZSksaX0pKGEsbixlKTtpZihvLmNvbXBvbmVudHMucHVzaChyKSx0WzhdPXIsaSYmaS5mb3JFYWNoKCh0PT50KHIsZSkpKSxlLmNvbnRlbnRRdWVyaWVzKXtjb25zdCB0PXNhKCk7bmdEZXZNb2RlJiZvbyh0LCJUTm9kZSBleHBlY3RlZCIpLGUuY29udGVudFF1ZXJpZXMoMSxyLHQuZGlyZWN0aXZlU3RhcnQpfWNvbnN0IGw9c2EoKTtyZXR1cm4gbmdEZXZNb2RlJiZvbyhsLCJ0Tm9kZSBzaG91bGQgaGF2ZSBiZWVuIGFscmVhZHkgY3JlYXRlZCIpLCFhLmZpcnN0Q3JlYXRlUGFzc3x8bnVsbD09PWUuaG9zdEJpbmRpbmdzJiZudWxsPT09ZS5ob3N0QXR0cnN8fChJYShsLmluZGV4KSxpcChuWzFdLGwsMCxsLmRpcmVjdGl2ZVN0YXJ0LGwuZGlyZWN0aXZlRW5kLGUpLGFwKGUscikpLHJ9KSh0LHRoaXMuY29tcG9uZW50RGVmLGIsZixbdW1dKSxqZChoLGIsbnVsbCl9ZmluYWxseXtUYSgpfXJldHVybiBuZXcgY2IodGhpcy5jb21wb25lbnRUeXBlLHksbGgoXyxiKSxiLF8pfX1uZXcgYWI7Y2xhc3MgY2IgZXh0ZW5kcyBjbGFzc3t9e2NvbnN0cnVjdG9yKHQsZSxuLG8saSl7c3VwZXIoKSx0aGlzLmxvY2F0aW9uPW4sdGhpcy5fcm9vdExWaWV3PW8sdGhpcy5fdE5vZGU9aSx0aGlzLmluc3RhbmNlPWUsdGhpcy5ob3N0Vmlldz10aGlzLmNoYW5nZURldGVjdG9yUmVmPW5ldyBJaChvKSx0aGlzLmNvbXBvbmVudFR5cGU9dH1nZXQgaW5qZWN0b3IoKXtyZXR1cm4gbmV3IE1yKHRoaXMuX3ROb2RlLHRoaXMuX3Jvb3RMVmlldyl9ZGVzdHJveSgpe3RoaXMuaG9zdFZpZXcuZGVzdHJveSgpfW9uRGVzdHJveSh0KXt0aGlzLmhvc3RWaWV3Lm9uRGVzdHJveSh0KX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIGRiKHQsZSxuLG8pe3JldHVybiB2bygoKCk9Pntjb25zdCBpPXQ7bnVsbCE9PWUmJihpLmhhc093blByb3BlcnR5KCJkZWNvcmF0b3JzIikmJnZvaWQgMCE9PWkuZGVjb3JhdG9ycz9pLmRlY29yYXRvcnMucHVzaCguLi5lKTppLmRlY29yYXRvcnM9ZSksbnVsbCE9PW4mJihpLmN0b3JQYXJhbWV0ZXJzPW4pLG51bGwhPT1vJiYoaS5wcm9wRGVjb3JhdG9ycz1pLmhhc093blByb3BlcnR5KCJwcm9wRGVjb3JhdG9ycyIpJiZ2b2lkIDAhPT1pLnByb3BEZWNvcmF0b3JzP09iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxpLnByb3BEZWNvcmF0b3JzKSxvKTpvKX0pKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY29uc3QgcGI9bmV3IE1hcDsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIG1iIGV4dGVuZHMgWmh7Y29uc3RydWN0b3IodCxlKXtzdXBlcigpLHRoaXMuX3BhcmVudD1lLHRoaXMuX2Jvb3RzdHJhcENvbXBvbmVudHM9W10sdGhpcy5pbmplY3Rvcj10aGlzLHRoaXMuZGVzdHJveUNicz1bXSx0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1uZXcgYWIodGhpcyk7Y29uc3Qgbj1uaSh0KTtuZ0Rldk1vZGUmJm9vKG4sYE5nTW9kdWxlICcke1JuKHQpfScgaXMgbm90IGEgc3VidHlwZSBvZiAnTmdNb2R1bGVUeXBlJy5gKTtjb25zdCBvPShmdW5jdGlvbiBpKHQpe3JldHVybiB0W0xvXXx8bnVsbH0pKHQpO28mJlVmKG8pLHRoaXMuX2Jvb3RzdHJhcENvbXBvbmVudHM9Smwobi5ib290c3RyYXApLHRoaXMuX3IzSW5qZWN0b3I9VXAodCxlLFt7cHJvdmlkZTpaaCx1c2VWYWx1ZTp0aGlzfSx7cHJvdmlkZTpyaCx1c2VWYWx1ZTp0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcn1dLFJuKHQpKSx0aGlzLl9yM0luamVjdG9yLl9yZXNvbHZlSW5qZWN0b3JEZWZUeXBlcygpLHRoaXMuaW5zdGFuY2U9dGhpcy5nZXQodCl9Z2V0KHQsZT1RcC5USFJPV19JRl9OT1RfRk9VTkQsbj15by5EZWZhdWx0KXtyZXR1cm4gdD09PVFwfHx0PT09Wmh8fHQ9PT1JcD90aGlzOnRoaXMuX3IzSW5qZWN0b3IuZ2V0KHQsZSxuKX1kZXN0cm95KCl7bmdEZXZNb2RlJiZvbyh0aGlzLmRlc3Ryb3lDYnMsIk5nTW9kdWxlIGFscmVhZHkgZGVzdHJveWVkIik7Y29uc3QgdD10aGlzLl9yM0luamVjdG9yOyF0LmRlc3Ryb3llZCYmdC5kZXN0cm95KCksdGhpcy5kZXN0cm95Q2JzLmZvckVhY2goKHQ9PnQoKSkpLHRoaXMuZGVzdHJveUNicz1udWxsfW9uRGVzdHJveSh0KXtuZ0Rldk1vZGUmJm9vKHRoaXMuZGVzdHJveUNicywiTmdNb2R1bGUgYWxyZWFkeSBkZXN0cm95ZWQiKSx0aGlzLmRlc3Ryb3lDYnMucHVzaCh0KX19Y2xhc3MgdWIgZXh0ZW5kcyBjbGFzc3t9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMubW9kdWxlVHlwZT10LG51bGwhPT1uaSh0KSYmKGZ1bmN0aW9uIGUodCl7Y29uc3QgZT1uZXcgU2V0OyEoZnVuY3Rpb24gdChuKXtjb25zdCBvPW5pKG4sITApLGk9by5pZDtudWxsIT09aSYmKChmdW5jdGlvbiBhKHQsZSxuKXtpZihlJiZlIT09bil0aHJvdyBuZXcgRXJyb3IoYER1cGxpY2F0ZSBtb2R1bGUgcmVnaXN0ZXJlZCBmb3IgJHt0fSAtICR7Um4oZSl9IHZzICR7Um4oZS5uYW1lKX1gKX0pKGkscGIuZ2V0KGkpLG4pLHBiLnNldChpLG4pKTtjb25zdCByPUpsKG8uaW1wb3J0cyk7Zm9yKGNvbnN0IG4gb2YgcillLmhhcyhuKXx8KGUuYWRkKG4pLHQobikpfSkodCl9KSh0KX1jcmVhdGUodCl7cmV0dXJuIG5ldyBtYih0aGlzLm1vZHVsZVR5cGUsdCl9fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiBmYih0LGUsbil7Y29uc3Qgbz1nYSgpK3QsaT1pYSgpO3JldHVybiBpW29dPT09S2M/U20oaSxvLG4/ZS5jYWxsKG4pOmUoKSk6RG0oaSxvKX1mdW5jdGlvbiBnYih0LGUsbixvKXtyZXR1cm4gX2IoaWEoKSxnYSgpLHQsZSxuLG8pfWZ1bmN0aW9uIGhiKHQsZSxuLG8saSl7cmV0dXJuIENiKGlhKCksZ2EoKSx0LGUsbixvLGkpfWZ1bmN0aW9uIGJiKHQsZSxuLG8saSxhKXtyZXR1cm4gTWIoaWEoKSxnYSgpLHQsZSxuLG8saSxhKX1mdW5jdGlvbiB5Yih0LGUpe25nRGV2TW9kZSYmcm8odCxlKTtjb25zdCBuPXRbZV07cmV0dXJuIG49PT1LYz92b2lkIDA6bn1mdW5jdGlvbiBfYih0LGUsbixvLGksYSl7Y29uc3Qgcj1lK247cmV0dXJuIEVtKHQscixpKT9TbSh0LHIrMSxhP28uY2FsbChhLGkpOm8oaSkpOnliKHQscisxKX1mdW5jdGlvbiBDYih0LGUsbixvLGksYSxyKXtjb25zdCBzPWUrbjtyZXR1cm4gQW0odCxzLGksYSk/U20odCxzKzIscj9vLmNhbGwocixpLGEpOm8oaSxhKSk6eWIodCxzKzIpfWZ1bmN0aW9uIE1iKHQsZSxuLG8saSxhLHIscyl7Y29uc3QgbD1lK247cmV0dXJuIFJtKHQsbCxpLGEscik/U20odCxsKzMscz9vLmNhbGwocyxpLGEscik6byhpLGEscikpOnliKHQsbCszKX1mdW5jdGlvbiB2Yih0LGUsbixvLGksYSxyLHMsbCl7Y29uc3QgYz1lK247cmV0dXJuIFRtKHQsYyxpLGEscixzKT9TbSh0LGMrNCxsP28uY2FsbChsLGksYSxyLHMpOm8oaSxhLHIscykpOnliKHQsYys0KX1mdW5jdGlvbiB4Yih0LGUsbixvLGksYSl7bGV0IHI9ZStuLHM9ITE7Zm9yKGxldCBlPTA7ZTxpLmxlbmd0aDtlKyspRW0odCxyKyssaVtlXSkmJihzPSEwKTtyZXR1cm4gcz9TbSh0LHIsby5hcHBseShhLGkpKTp5Yih0LHIpfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiBPYih0LGUpe2NvbnN0IG49YWEoKTtsZXQgbztjb25zdCBpPXQrb2k7bi5maXJzdENyZWF0ZVBhc3M/KG89KGZ1bmN0aW9uIGEodCxlKXtpZihlKWZvcihsZXQgbj1lLmxlbmd0aC0xO24+PTA7bi0tKXtjb25zdCBvPWVbbl07aWYodD09PW8ubmFtZSlyZXR1cm4gb310aHJvdyBuZXcgRm4oIjMwMiIsYFRoZSBwaXBlICcke3R9JyBjb3VsZCBub3QgYmUgZm91bmQhYCl9KShlLG4ucGlwZVJlZ2lzdHJ5KSxuLmRhdGFbaV09byxvLm9uRGVzdHJveSYmKG4uZGVzdHJveUhvb2tzfHwobi5kZXN0cm95SG9va3M9W10pKS5wdXNoKGksby5vbkRlc3Ryb3kpKTpvPW4uZGF0YVtpXTtjb25zdCByPW8uZmFjdG9yeXx8KG8uZmFjdG9yeT13aShvLnR5cGUsITApKSxzPUNvKE11KTt0cnl7Y29uc3QgdD1pcighMSksZT1yKCk7cmV0dXJuIGlyKHQpLChmdW5jdGlvbiBsKHQsZSxuLG8pe24+PXQuZGF0YS5sZW5ndGgmJih0LmRhdGFbbl09bnVsbCx0LmJsdWVwcmludFtuXT1udWxsKSxlW25dPW99KShuLGlhKCksaSxlKSxlfWZpbmFsbHl7Q28ocyl9fWZ1bmN0aW9uIFBiKHQsZSxuKXtjb25zdCBvPXQrb2ksaT1pYSgpLGE9cWkoaSxvKTtyZXR1cm4gRGIoaSxTYihpLG8pP19iKGksZ2EoKSxlLGEudHJhbnNmb3JtLG4sYSk6YS50cmFuc2Zvcm0obikpfWZ1bmN0aW9uIHdiKHQsZSxuLG8pe2NvbnN0IGk9dCtvaSxhPWlhKCkscj1xaShhLGkpO3JldHVybiBEYihhLFNiKGEsaSk/Q2IoYSxnYSgpLGUsci50cmFuc2Zvcm0sbixvLHIpOnIudHJhbnNmb3JtKG4sbykpfWZ1bmN0aW9uIGtiKHQsZSxuLG8saSl7Y29uc3QgYT10K29pLHI9aWEoKSxzPXFpKHIsYSk7cmV0dXJuIERiKHIsU2IocixhKT9NYihyLGdhKCksZSxzLnRyYW5zZm9ybSxuLG8saSxzKTpzLnRyYW5zZm9ybShuLG8saSkpfWZ1bmN0aW9uIFNiKHQsZSl7cmV0dXJuIHRbMV0uZGF0YVtlXS5wdXJlfWZ1bmN0aW9uIERiKHQsZSl7cmV0dXJuIFBtLmlzV3JhcHBlZChlKSYmKGU9UG0udW53cmFwKGUpLHRbaGEoKV09S2MpLGV9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIEViKHQpe3JldHVybiBlPT57c2V0VGltZW91dCh0LHZvaWQgMCxlKX19Y29uc3QgQWI9Y2xhc3MgZXh0ZW5kcyB4e2NvbnN0cnVjdG9yKHQ9ITEpe3N1cGVyKCksdGhpcy5fX2lzQXN5bmM9dH1lbWl0KHQpe3N1cGVyLm5leHQodCl9c3Vic2NyaWJlKHQsZSxuKXt2YXIgbyxpLGE7bGV0IHI9dCxzPWV8fCgoKT0+bnVsbCksYz1uO2lmKHQmJiJvYmplY3QiPT10eXBlb2YgdCl7Y29uc3QgZT10O3I9bnVsbD09PShvPWUubmV4dCl8fHZvaWQgMD09PW8/dm9pZCAwOm8uYmluZChlKSxzPW51bGw9PT0oaT1lLmVycm9yKXx8dm9pZCAwPT09aT92b2lkIDA6aS5iaW5kKGUpLGM9bnVsbD09PShhPWUuY29tcGxldGUpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmJpbmQoZSl9dGhpcy5fX2lzQXN5bmMmJihzPUViKHMpLHImJihyPUViKHIpKSxjJiYoYz1FYihjKSkpO2NvbnN0IGQ9c3VwZXIuc3Vic2NyaWJlKHtuZXh0OnIsZXJyb3I6cyxjb21wbGV0ZTpjfSk7cmV0dXJuIHQgaW5zdGFuY2VvZiBsJiZ0LmFkZChkKSxkfX07Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIFJiKCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHNbeG0oKV0oKX1jbGFzcyBUYntjb25zdHJ1Y3Rvcih0PSExKXt0aGlzLl9lbWl0RGlzdGluY3RDaGFuZ2VzT25seT10LHRoaXMuZGlydHk9ITAsdGhpcy5fcmVzdWx0cz1bXSx0aGlzLl9jaGFuZ2VzRGV0ZWN0ZWQ9ITEsdGhpcy5fY2hhbmdlcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5maXJzdD12b2lkIDAsdGhpcy5sYXN0PXZvaWQgMDtjb25zdCBlPXhtKCksbj1UYi5wcm90b3R5cGU7bltlXXx8KG5bZV09UmIpfWdldCBjaGFuZ2VzKCl7cmV0dXJuIHRoaXMuX2NoYW5nZXN8fCh0aGlzLl9jaGFuZ2VzPW5ldyBBYil9Z2V0KHQpe3JldHVybiB0aGlzLl9yZXN1bHRzW3RdfW1hcCh0KXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5tYXAodCl9ZmlsdGVyKHQpe3JldHVybiB0aGlzLl9yZXN1bHRzLmZpbHRlcih0KX1maW5kKHQpe3JldHVybiB0aGlzLl9yZXN1bHRzLmZpbmQodCl9cmVkdWNlKHQsZSl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMucmVkdWNlKHQsZSl9Zm9yRWFjaCh0KXt0aGlzLl9yZXN1bHRzLmZvckVhY2godCl9c29tZSh0KXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5zb21lKHQpfXRvQXJyYXkoKXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5zbGljZSgpfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMudG9TdHJpbmcoKX1yZXNldCh0LGUpe2NvbnN0IG49dGhpcztuLmRpcnR5PSExO2NvbnN0IG89R3IodCk7KHRoaXMuX2NoYW5nZXNEZXRlY3RlZD0hKGZ1bmN0aW9uIGkodCxlLG4pe2lmKHQubGVuZ3RoIT09ZS5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBvPTA7bzx0Lmxlbmd0aDtvKyspe2xldCBpPXRbb10sYT1lW29dO2lmKG4mJihpPW4oaSksYT1uKGEpKSxhIT09aSlyZXR1cm4hMX1yZXR1cm4hMH0pKG4uX3Jlc3VsdHMsbyxlKSkmJihuLl9yZXN1bHRzPW8sbi5sZW5ndGg9by5sZW5ndGgsbi5sYXN0PW9bdGhpcy5sZW5ndGgtMV0sbi5maXJzdD1vWzBdKX1ub3RpZnlPbkNoYW5nZXMoKXshdGhpcy5fY2hhbmdlc3x8IXRoaXMuX2NoYW5nZXNEZXRlY3RlZCYmdGhpcy5fZW1pdERpc3RpbmN0Q2hhbmdlc09ubHl8fHRoaXMuX2NoYW5nZXMuZW1pdCh0aGlzKX1zZXREaXJ0eSgpe3RoaXMuZGlydHk9ITB9ZGVzdHJveSgpe3RoaXMuY2hhbmdlcy5jb21wbGV0ZSgpLHRoaXMuY2hhbmdlcy51bnN1YnNjcmliZSgpfX1jbGFzcyBOYntjb25zdHJ1Y3Rvcih0KXt0aGlzLnF1ZXJ5TGlzdD10LHRoaXMubWF0Y2hlcz1udWxsfWNsb25lKCl7cmV0dXJuIG5ldyBOYih0aGlzLnF1ZXJ5TGlzdCl9c2V0RGlydHkoKXt0aGlzLnF1ZXJ5TGlzdC5zZXREaXJ0eSgpfX1jbGFzcyBJYntjb25zdHJ1Y3Rvcih0PVtdKXt0aGlzLnF1ZXJpZXM9dH1jcmVhdGVFbWJlZGRlZFZpZXcodCl7Y29uc3QgZT10LnF1ZXJpZXM7aWYobnVsbCE9PWUpe2NvbnN0IG49bnVsbCE9PXQuY29udGVudFF1ZXJpZXM/dC5jb250ZW50UXVlcmllc1swXTplLmxlbmd0aCxvPVtdO2ZvcihsZXQgdD0wO3Q8bjt0Kyspe2NvbnN0IG49ZS5nZXRCeUluZGV4KHQpO28ucHVzaCh0aGlzLnF1ZXJpZXNbbi5pbmRleEluRGVjbGFyYXRpb25WaWV3XS5jbG9uZSgpKX1yZXR1cm4gbmV3IEliKG8pfXJldHVybiBudWxsfWluc2VydFZpZXcodCl7dGhpcy5kaXJ0eVF1ZXJpZXNXaXRoTWF0Y2hlcyh0KX1kZXRhY2hWaWV3KHQpe3RoaXMuZGlydHlRdWVyaWVzV2l0aE1hdGNoZXModCl9ZGlydHlRdWVyaWVzV2l0aE1hdGNoZXModCl7Zm9yKGxldCBlPTA7ZTx0aGlzLnF1ZXJpZXMubGVuZ3RoO2UrKyludWxsIT09WGIodCxlKS5tYXRjaGVzJiZ0aGlzLnF1ZXJpZXNbZV0uc2V0RGlydHkoKX19Y2xhc3MgemJ7Y29uc3RydWN0b3IodCxlLG49bnVsbCl7dGhpcy5wcmVkaWNhdGU9dCx0aGlzLmZsYWdzPWUsdGhpcy5yZWFkPW59fWNsYXNzIEhie2NvbnN0cnVjdG9yKHQ9W10pe3RoaXMucXVlcmllcz10fWVsZW1lbnRTdGFydCh0LGUpe25nRGV2TW9kZSYmQ2kodCwiUXVlcmllcyBzaG91bGQgY29sbGVjdCByZXN1bHRzIG9uIHRoZSBmaXJzdCB0ZW1wbGF0ZSBwYXNzIG9ubHkiKTtmb3IobGV0IG49MDtuPHRoaXMucXVlcmllcy5sZW5ndGg7bisrKXRoaXMucXVlcmllc1tuXS5lbGVtZW50U3RhcnQodCxlKX1lbGVtZW50RW5kKHQpe2ZvcihsZXQgZT0wO2U8dGhpcy5xdWVyaWVzLmxlbmd0aDtlKyspdGhpcy5xdWVyaWVzW2VdLmVsZW1lbnRFbmQodCl9ZW1iZWRkZWRUVmlldyh0KXtsZXQgZT1udWxsO2ZvcihsZXQgbj0wO248dGhpcy5sZW5ndGg7bisrKXtjb25zdCBvPW51bGwhPT1lP2UubGVuZ3RoOjAsaT10aGlzLmdldEJ5SW5kZXgobikuZW1iZWRkZWRUVmlldyh0LG8pO2kmJihpLmluZGV4SW5EZWNsYXJhdGlvblZpZXc9bixudWxsIT09ZT9lLnB1c2goaSk6ZT1baV0pfXJldHVybiBudWxsIT09ZT9uZXcgSGIoZSk6bnVsbH10ZW1wbGF0ZSh0LGUpe25nRGV2TW9kZSYmQ2kodCwiUXVlcmllcyBzaG91bGQgY29sbGVjdCByZXN1bHRzIG9uIHRoZSBmaXJzdCB0ZW1wbGF0ZSBwYXNzIG9ubHkiKTtmb3IobGV0IG49MDtuPHRoaXMucXVlcmllcy5sZW5ndGg7bisrKXRoaXMucXVlcmllc1tuXS50ZW1wbGF0ZSh0LGUpfWdldEJ5SW5kZXgodCl7cmV0dXJuIG5nRGV2TW9kZSYmcm8odGhpcy5xdWVyaWVzLHQpLHRoaXMucXVlcmllc1t0XX1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMucXVlcmllcy5sZW5ndGh9dHJhY2sodCl7dGhpcy5xdWVyaWVzLnB1c2godCl9fWNsYXNzIEZie2NvbnN0cnVjdG9yKHQsZT0tMSl7dGhpcy5tZXRhZGF0YT10LHRoaXMubWF0Y2hlcz1udWxsLHRoaXMuaW5kZXhJbkRlY2xhcmF0aW9uVmlldz0tMSx0aGlzLmNyb3NzZXNOZ1RlbXBsYXRlPSExLHRoaXMuX2FwcGxpZXNUb05leHROb2RlPSEwLHRoaXMuX2RlY2xhcmF0aW9uTm9kZUluZGV4PWV9ZWxlbWVudFN0YXJ0KHQsZSl7dGhpcy5pc0FwcGx5aW5nVG9Ob2RlKGUpJiZ0aGlzLm1hdGNoVE5vZGUodCxlKX1lbGVtZW50RW5kKHQpe3RoaXMuX2RlY2xhcmF0aW9uTm9kZUluZGV4PT09dC5pbmRleCYmKHRoaXMuX2FwcGxpZXNUb05leHROb2RlPSExKX10ZW1wbGF0ZSh0LGUpe3RoaXMuZWxlbWVudFN0YXJ0KHQsZSl9ZW1iZWRkZWRUVmlldyh0LGUpe3JldHVybiB0aGlzLmlzQXBwbHlpbmdUb05vZGUodCk/KHRoaXMuY3Jvc3Nlc05nVGVtcGxhdGU9ITAsdGhpcy5hZGRNYXRjaCgtdC5pbmRleCxlKSxuZXcgRmIodGhpcy5tZXRhZGF0YSkpOm51bGx9aXNBcHBseWluZ1RvTm9kZSh0KXtpZih0aGlzLl9hcHBsaWVzVG9OZXh0Tm9kZSYmMSE9KDEmdGhpcy5tZXRhZGF0YS5mbGFncykpe2NvbnN0IGU9dGhpcy5fZGVjbGFyYXRpb25Ob2RlSW5kZXg7bGV0IG49dC5wYXJlbnQ7Zm9yKDtudWxsIT09biYmOCZuLnR5cGUmJm4uaW5kZXghPT1lOyluPW4ucGFyZW50O3JldHVybiBlPT09KG51bGwhPT1uP24uaW5kZXg6LTEpfXJldHVybiB0aGlzLl9hcHBsaWVzVG9OZXh0Tm9kZX1tYXRjaFROb2RlKHQsZSl7Y29uc3Qgbj10aGlzLm1ldGFkYXRhLnByZWRpY2F0ZTtpZihBcnJheS5pc0FycmF5KG4pKWZvcihsZXQgbz0wO288bi5sZW5ndGg7bysrKXtjb25zdCBpPW5bb107dGhpcy5tYXRjaFROb2RlV2l0aFJlYWRPcHRpb24odCxlLExiKGUsaSkpLHRoaXMubWF0Y2hUTm9kZVdpdGhSZWFkT3B0aW9uKHQsZSxicihlLHQsaSwhMSwhMSkpfWVsc2Ugbj09PVVoPzQmZS50eXBlJiZ0aGlzLm1hdGNoVE5vZGVXaXRoUmVhZE9wdGlvbih0LGUsLTEpOnRoaXMubWF0Y2hUTm9kZVdpdGhSZWFkT3B0aW9uKHQsZSxicihlLHQsbiwhMSwhMSkpfW1hdGNoVE5vZGVXaXRoUmVhZE9wdGlvbih0LGUsbil7aWYobnVsbCE9PW4pe2NvbnN0IG89dGhpcy5tZXRhZGF0YS5yZWFkO2lmKG51bGwhPT1vKWlmKG89PT1jaHx8bz09PVhofHxvPT09VWgmJjQmZS50eXBlKXRoaXMuYWRkTWF0Y2goZS5pbmRleCwtMik7ZWxzZXtjb25zdCBuPWJyKGUsdCxvLCExLCExKTtudWxsIT09biYmdGhpcy5hZGRNYXRjaChlLmluZGV4LG4pfWVsc2UgdGhpcy5hZGRNYXRjaChlLmluZGV4LG4pfX1hZGRNYXRjaCh0LGUpe251bGw9PT10aGlzLm1hdGNoZXM/dGhpcy5tYXRjaGVzPVt0LGVdOnRoaXMubWF0Y2hlcy5wdXNoKHQsZSl9fWZ1bmN0aW9uIExiKHQsZSl7Y29uc3Qgbj10LmxvY2FsTmFtZXM7aWYobnVsbCE9PW4pZm9yKGxldCB0PTA7dDxuLmxlbmd0aDt0Kz0yKWlmKG5bdF09PT1lKXJldHVybiBuW3QrMV07cmV0dXJuIG51bGx9ZnVuY3Rpb24gQmIodCxlLG4sbyl7cmV0dXJuLTE9PT1uPyhmdW5jdGlvbiBpKHQsZSl7cmV0dXJuIDExJnQudHlwZT9saCh0LGUpOjQmdC50eXBlP3FoKHQsZSk6bnVsbH0pKGUsdCk6LTI9PT1uPyhmdW5jdGlvbiBhKHQsZSxuKXtyZXR1cm4gbj09PWNoP2xoKGUsdCk6bj09PVVoP3FoKGUsdCk6bj09PVhoPyhuZ0Rldk1vZGUmJlphKGUsMTUpLGViKGUsdCkpOnZvaWQobmdEZXZNb2RlJiZpbyhgU3BlY2lhbCB0b2tlbiB0byByZWFkIHNob3VsZCBiZSBvbmUgb2YgRWxlbWVudFJlZiwgVGVtcGxhdGVSZWYgb3IgVmlld0NvbnRhaW5lclJlZiBidXQgZ290ICR7Um4obil9LmApKX0pKHQsZSxvKTp5cih0LHRbMV0sbixlKX1mdW5jdGlvbiBWYih0LGUsbixvKXtjb25zdCBpPWVbMTldLnF1ZXJpZXNbb107aWYobnVsbD09PWkubWF0Y2hlcyl7Y29uc3Qgbz10LmRhdGEsYT1uLm1hdGNoZXMscj1bXTtmb3IobGV0IHQ9MDt0PGEubGVuZ3RoO3QrPTIpe2NvbnN0IGk9YVt0XTtpPDA/ci5wdXNoKG51bGwpOihuZ0Rldk1vZGUmJnJvKG8saSksci5wdXNoKEJiKGUsb1tpXSxhW3QrMV0sbi5tZXRhZGF0YS5yZWFkKSkpfWkubWF0Y2hlcz1yfXJldHVybiBpLm1hdGNoZXN9ZnVuY3Rpb24gamIodCxlLG4sbyl7Y29uc3QgaT10LnF1ZXJpZXMuZ2V0QnlJbmRleChuKSxhPWkubWF0Y2hlcztpZihudWxsIT09YSl7Y29uc3Qgcj1WYih0LGUsaSxuKTtmb3IobGV0IHQ9MDt0PGEubGVuZ3RoO3QrPTIpe2NvbnN0IG49YVt0XTtpZihuPjApby5wdXNoKHJbdC8yXSk7ZWxzZXtjb25zdCBpPWFbdCsxXSxyPWVbLW5dO25nRGV2TW9kZSYmYmkocik7Zm9yKGxldCB0PWFpO3Q8ci5sZW5ndGg7dCsrKXtjb25zdCBlPXJbdF07ZVsxN109PT1lWzNdJiZqYihlWzFdLGUsaSxvKX1pZihudWxsIT09cls5XSl7Y29uc3QgdD1yWzldO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKXtjb25zdCBuPXRbZV07amIoblsxXSxuLGksbyl9fX19fXJldHVybiBvfWZ1bmN0aW9uIFViKHQpe2NvbnN0IGU9aWEoKSxuPWFhKCksbz1PYSgpO1BhKG8rMSk7Y29uc3QgaT1YYihuLG8pO2lmKHQuZGlydHkmJkppKGUpPT09KDI9PSgyJmkubWV0YWRhdGEuZmxhZ3MpKSl7aWYobnVsbD09PWkubWF0Y2hlcyl0LnJlc2V0KFtdKTtlbHNle2NvbnN0IGE9aS5jcm9zc2VzTmdUZW1wbGF0ZT9qYihuLGUsbyxbXSk6VmIobixlLGksbyk7dC5yZXNldChhLGRoKSx0Lm5vdGlmeU9uQ2hhbmdlcygpfXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIFdiKHQsZSxuKXtuZ0Rldk1vZGUmJlluKGUsIkV4cGVjdGluZyBmbGFncyIpO2NvbnN0IG89YWEoKTtvLmZpcnN0Q3JlYXRlUGFzcyYmKFpiKG8sbmV3IHpiKHQsZSxuKSwtMSksMj09KDImZSkmJihvLnN0YXRpY1ZpZXdRdWVyaWVzPSEwKSkscWIobyxpYSgpLGUpfWZ1bmN0aW9uIEdiKHQsZSxuLG8pe25nRGV2TW9kZSYmWW4obiwiRXhwZWN0aW5nIGZsYWdzIik7Y29uc3QgaT1hYSgpO2lmKGkuZmlyc3RDcmVhdGVQYXNzKXtjb25zdCBhPXNhKCk7WmIoaSxuZXcgemIoZSxuLG8pLGEuaW5kZXgpLChmdW5jdGlvbiBhKHQsZSl7Y29uc3Qgbj10LmNvbnRlbnRRdWVyaWVzfHwodC5jb250ZW50UXVlcmllcz1bXSk7ZSE9PShuLmxlbmd0aD9uW24ubGVuZ3RoLTFdOi0xKSYmbi5wdXNoKHQucXVlcmllcy5sZW5ndGgtMSxlKX0pKGksdCksMj09KDImbikmJihpLnN0YXRpY0NvbnRlbnRRdWVyaWVzPSEwKX1xYihpLGlhKCksbil9ZnVuY3Rpb24gWWIoKXtyZXR1cm4oZnVuY3Rpb24gdChlLG4pe3JldHVybiBuZ0Rldk1vZGUmJm9vKGVbMTldLCJMUXVlcmllcyBzaG91bGQgYmUgZGVmaW5lZCB3aGVuIHRyeWluZyB0byBsb2FkIGEgcXVlcnkiKSxuZ0Rldk1vZGUmJnJvKGVbMTldLnF1ZXJpZXMsbiksZVsxOV0ucXVlcmllc1tuXS5xdWVyeUxpc3R9KShpYSgpLE9hKCkpfWZ1bmN0aW9uIHFiKHQsZSxuKXtjb25zdCBvPW5ldyBUYig0PT0oNCZuKSk7SmQodCxlLG8sby5kZXN0cm95KSxudWxsPT09ZVsxOV0mJihlWzE5XT1uZXcgSWIpLGVbMTldLnF1ZXJpZXMucHVzaChuZXcgTmIobykpfWZ1bmN0aW9uIFpiKHQsZSxuKXtudWxsPT09dC5xdWVyaWVzJiYodC5xdWVyaWVzPW5ldyBIYiksdC5xdWVyaWVzLnRyYWNrKG5ldyBGYihlLG4pKX1mdW5jdGlvbiBYYih0LGUpe3JldHVybiBuZ0Rldk1vZGUmJm9vKHQucXVlcmllcywiVFF1ZXJpZXMgbXVzdCBiZSBkZWZpbmVkIHRvIHJldHJpZXZlIGEgVFF1ZXJ5IiksdC5xdWVyaWVzLmdldEJ5SW5kZXgoZSl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIEtiKHQsZSl7cmV0dXJuIHFoKHQsZSl9ZnVuY3Rpb24gSmIodD15by5EZWZhdWx0KXtjb25zdCBlPUZoKCEwKTtpZihudWxsIT1lfHx0JnlvLk9wdGlvbmFsKXJldHVybiBlO0duKCJDaGFuZ2VEZXRlY3RvclJlZiIpfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY29uc3QgUWI9eyLJtcm1YXR0cmlidXRlIjpObSwiybXJtWF0dHJpYnV0ZUludGVycG9sYXRlMSI6ZnVuY3Rpb24gdChlLG4sbyxpLGEscil7Y29uc3Qgcz1pYSgpLGw9em0ocyxuLG8saSk7aWYobCE9PUtjKXtjb25zdCB0PXphKCk7cHAodCxzLGUsbCxhLHIpLG5nRGV2TW9kZSYmd3AoYWEoKS5kYXRhLHQsImF0dHIuIitlLGhhKCktMSxuLGkpfXJldHVybiB0fSwiybXJtWF0dHJpYnV0ZUludGVycG9sYXRlMiI6ZnVuY3Rpb24gdChlLG4sbyxpLGEscixzLGwpe2NvbnN0IGM9aWEoKSxkPUhtKGMsbixvLGksYSxyKTtpZihkIT09S2Mpe2NvbnN0IHQ9emEoKTtwcCh0LGMsZSxkLHMsbCksbmdEZXZNb2RlJiZ3cChhYSgpLmRhdGEsdCwiYXR0ci4iK2UsaGEoKS0yLG4saSxyKX1yZXR1cm4gdH0sIsm1ybVhdHRyaWJ1dGVJbnRlcnBvbGF0ZTMiOmZ1bmN0aW9uIHQoZSxuLG8saSxhLHIscyxsLGMsZCl7Y29uc3QgcD1pYSgpLG09Rm0ocCxuLG8saSxhLHIscyxsKTtpZihtIT09S2Mpe2NvbnN0IHQ9emEoKTtwcCh0LHAsZSxtLGMsZCksbmdEZXZNb2RlJiZ3cChhYSgpLmRhdGEsdCwiYXR0ci4iK2UsaGEoKS0zLG4saSxyLGwpfXJldHVybiB0fSwiybXJtWF0dHJpYnV0ZUludGVycG9sYXRlNCI6ZnVuY3Rpb24gdChlLG4sbyxpLGEscixzLGwsYyxkLHAsbSl7Y29uc3QgdT1pYSgpLGY9TG0odSxuLG8saSxhLHIscyxsLGMsZCk7aWYoZiE9PUtjKXtjb25zdCB0PXphKCk7cHAodCx1LGUsZixwLG0pLG5nRGV2TW9kZSYmd3AoYWEoKS5kYXRhLHQsImF0dHIuIitlLGhhKCktNCxuLGkscixsLGQpfXJldHVybiB0fSwiybXJtWF0dHJpYnV0ZUludGVycG9sYXRlNSI6ZnVuY3Rpb24gdChlLG4sbyxpLGEscixzLGwsYyxkLHAsbSx1LGYpe2NvbnN0IGc9aWEoKSxoPUJtKGcsbixvLGksYSxyLHMsbCxjLGQscCxtKTtpZihoIT09S2Mpe2NvbnN0IHQ9emEoKTtwcCh0LGcsZSxoLHUsZiksbmdEZXZNb2RlJiZ3cChhYSgpLmRhdGEsdCwiYXR0ci4iK2UsaGEoKS01LG4saSxyLGwsZCxtKX1yZXR1cm4gdH0sIsm1ybVhdHRyaWJ1dGVJbnRlcnBvbGF0ZTYiOmZ1bmN0aW9uIHQoZSxuLG8saSxhLHIscyxsLGMsZCxwLG0sdSxmLGcsaCl7Y29uc3QgYj1pYSgpLHk9Vm0oYixuLG8saSxhLHIscyxsLGMsZCxwLG0sdSxmKTtpZih5IT09S2Mpe2NvbnN0IHQ9emEoKTtwcCh0LGIsZSx5LGcsaCksbmdEZXZNb2RlJiZ3cChhYSgpLmRhdGEsdCwiYXR0ci4iK2UsaGEoKS02LG4saSxyLGwsZCxtLGYpfXJldHVybiB0fSwiybXJtWF0dHJpYnV0ZUludGVycG9sYXRlNyI6ZnVuY3Rpb24gdChlLG4sbyxpLGEscixzLGwsYyxkLHAsbSx1LGYsZyxoLGIseSl7Y29uc3QgXz1pYSgpLEM9am0oXyxuLG8saSxhLHIscyxsLGMsZCxwLG0sdSxmLGcsaCk7aWYoQyE9PUtjKXtjb25zdCB0PXphKCk7cHAodCxfLGUsQyxiLHkpLG5nRGV2TW9kZSYmd3AoYWEoKS5kYXRhLHQsImF0dHIuIitlLGhhKCktNyxuLGkscixsLGQsbSxmLGgpfXJldHVybiB0fSwiybXJtWF0dHJpYnV0ZUludGVycG9sYXRlOCI6ZnVuY3Rpb24gdChlLG4sbyxpLGEscixzLGwsYyxkLHAsbSx1LGYsZyxoLGIseSxfLEMpe2NvbnN0IE09aWEoKSx2PVVtKE0sbixvLGksYSxyLHMsbCxjLGQscCxtLHUsZixnLGgsYix5KTtpZih2IT09S2Mpe2NvbnN0IHQ9emEoKTtwcCh0LE0sZSx2LF8sQyksbmdEZXZNb2RlJiZ3cChhYSgpLmRhdGEsdCwiYXR0ci4iK2UsaGEoKS04LG4saSxyLGwsZCxtLGYsaCx5KX1yZXR1cm4gdH0sIsm1ybVhdHRyaWJ1dGVJbnRlcnBvbGF0ZVYiOmZ1bmN0aW9uIHQoZSxuLG8saSl7Y29uc3QgYT1pYSgpLHI9SW0oYSxuKTtpZihyIT09S2Mpe2NvbnN0IHQ9emEoKTtpZihwcCh0LGEsZSxyLG8saSksbmdEZXZNb2RlKXtjb25zdCBvPVtuWzBdXTtmb3IobGV0IHQ9Mjt0PG4ubGVuZ3RoO3QrPTIpby5wdXNoKG5bdF0pO3dwKGFhKCkuZGF0YSx0LCJhdHRyLiIrZSxoYSgpLW8ubGVuZ3RoKzEsLi4ubyl9fXJldHVybiB0fSwiybXJtWRlZmluZUNvbXBvbmVudCI6VW8sIsm1ybVkZWZpbmVEaXJlY3RpdmUiOkpvLCLJtcm1ZGVmaW5lSW5qZWN0YWJsZSI6bG8sIsm1ybVkZWZpbmVJbmplY3RvciI6Y28sIsm1ybVkZWZpbmVOZ01vZHVsZSI6Wm8sIsm1ybVkZWZpbmVQaXBlIjpRbywiybXJtWRpcmVjdGl2ZUluamVjdCI6TXUsIsm1ybVnZXRJbmhlcml0ZWRGYWN0b3J5Ijp2ciwiybXJtWluamVjdCI6dXMsIsm1ybVpbmplY3RBdHRyaWJ1dGUiOk9yLCLJtcm1aW52YWxpZEZhY3RvcnkiOmZ1bmN0aW9uICRiKCl7Y29uc3QgdD1uZ0Rldk1vZGU/IlRoaXMgY29uc3RydWN0b3Igd2FzIG5vdCBjb21wYXRpYmxlIHdpdGggRGVwZW5kZW5jeSBJbmplY3Rpb24uIjoiaW52YWxpZCI7dGhyb3cgbmV3IEVycm9yKHQpfSwiybXJtWludmFsaWRGYWN0b3J5RGVwIjpmcywiybXJtWluamVjdFBpcGVDaGFuZ2VEZXRlY3RvclJlZiI6SmIsIsm1ybV0ZW1wbGF0ZVJlZkV4dHJhY3RvciI6S2IsIsm1ybVOZ09uQ2hhbmdlc0ZlYXR1cmUiOlNpLCLJtcm1UHJvdmlkZXJzRmVhdHVyZSI6aWgsIsm1ybVDb3B5RGVmaW5pdGlvbkZlYXR1cmUiOmZ1bmN0aW9uIHR5KHQpe2xldCBlLG49Zm0odC50eXBlKTtlPXBpKHQpP24uybVjbXA6bi7JtWRpcjtjb25zdCBvPXQ7Zm9yKGNvbnN0IHQgb2YgQ20pb1t0XT1lW3RdO2lmKHBpKGUpKWZvcihjb25zdCB0IG9mIE1tKW9bdF09ZVt0XX0sIsm1ybVJbmhlcml0RGVmaW5pdGlvbkZlYXR1cmUiOmdtLCLJtcm1bmV4dENvbnRleHQiOkx1LCLJtcm1bmFtZXNwYWNlSFRNTCI6RmEsIsm1ybVuYW1lc3BhY2VNYXRoTUwiOmZ1bmN0aW9uIGV5KCl7bmEubEZyYW1lLmN1cnJlbnROYW1lc3BhY2U9SGl9LCLJtcm1bmFtZXNwYWNlU1ZHIjpIYSwiybXJtWVuYWJsZUJpbmRpbmdzIjpmdW5jdGlvbiBueSgpe25hLmJpbmRpbmdzRW5hYmxlZD0hMH0sIsm1ybVkaXNhYmxlQmluZGluZ3MiOmZ1bmN0aW9uIG95KCl7bmEuYmluZGluZ3NFbmFibGVkPSExfSwiybXJtWVsZW1lbnRTdGFydCI6T3UsIsm1ybVlbGVtZW50RW5kIjpQdSwiybXJtWVsZW1lbnQiOnd1LCLJtcm1ZWxlbWVudENvbnRhaW5lclN0YXJ0IjprdSwiybXJtWVsZW1lbnRDb250YWluZXJFbmQiOlN1LCLJtcm1ZWxlbWVudENvbnRhaW5lciI6RHUsIsm1ybVwdXJlRnVuY3Rpb24wIjpmYiwiybXJtXB1cmVGdW5jdGlvbjEiOmdiLCLJtcm1cHVyZUZ1bmN0aW9uMiI6aGIsIsm1ybVwdXJlRnVuY3Rpb24zIjpiYiwiybXJtXB1cmVGdW5jdGlvbjQiOmZ1bmN0aW9uIGl5KHQsZSxuLG8saSxhLHIpe3JldHVybiB2YihpYSgpLGdhKCksdCxlLG4sbyxpLGEscil9LCLJtcm1cHVyZUZ1bmN0aW9uNSI6ZnVuY3Rpb24gYXkodCxlLG4sbyxpLGEscixzKXtjb25zdCBsPWdhKCkrdCxjPWlhKCksZD1UbShjLGwsbixvLGksYSk7cmV0dXJuIEVtKGMsbCs0LHIpfHxkP1NtKGMsbCs1LHM/ZS5jYWxsKHMsbixvLGksYSxyKTplKG4sbyxpLGEscikpOkRtKGMsbCs1KX0sIsm1ybVwdXJlRnVuY3Rpb242IjpmdW5jdGlvbiByeSh0LGUsbixvLGksYSxyLHMsbCl7Y29uc3QgYz1nYSgpK3QsZD1pYSgpLHA9VG0oZCxjLG4sbyxpLGEpO3JldHVybiBBbShkLGMrNCxyLHMpfHxwP1NtKGQsYys2LGw/ZS5jYWxsKGwsbixvLGksYSxyLHMpOmUobixvLGksYSxyLHMpKTpEbShkLGMrNil9LCLJtcm1cHVyZUZ1bmN0aW9uNyI6ZnVuY3Rpb24gc3kodCxlLG4sbyxpLGEscixzLGwsYyl7Y29uc3QgZD1nYSgpK3QscD1pYSgpO2xldCBtPVRtKHAsZCxuLG8saSxhKTtyZXR1cm4gUm0ocCxkKzQscixzLGwpfHxtP1NtKHAsZCs3LGM/ZS5jYWxsKGMsbixvLGksYSxyLHMsbCk6ZShuLG8saSxhLHIscyxsKSk6RG0ocCxkKzcpfSwiybXJtXB1cmVGdW5jdGlvbjgiOmZ1bmN0aW9uIGx5KHQsZSxuLG8saSxhLHIscyxsLGMsZCl7Y29uc3QgcD1nYSgpK3QsbT1pYSgpLHU9VG0obSxwLG4sbyxpLGEpO3JldHVybiBUbShtLHArNCxyLHMsbCxjKXx8dT9TbShtLHArOCxkP2UuY2FsbChkLG4sbyxpLGEscixzLGwsYyk6ZShuLG8saSxhLHIscyxsLGMpKTpEbShtLHArOCl9LCLJtcm1cHVyZUZ1bmN0aW9uViI6ZnVuY3Rpb24gY3kodCxlLG4sbyl7cmV0dXJuIHhiKGlhKCksZ2EoKSx0LGUsbixvKX0sIsm1ybVnZXRDdXJyZW50VmlldyI6RXUsIsm1ybVyZXN0b3JlVmlldyI6cmEsIsm1ybVsaXN0ZW5lciI6TnUsIsm1ybVwcm9qZWN0aW9uIjpqdSwiybXJtXN5bnRoZXRpY0hvc3RQcm9wZXJ0eSI6U2YsIsm1ybVzeW50aGV0aWNIb3N0TGlzdGVuZXIiOkl1LCLJtcm1cGlwZUJpbmQxIjpQYiwiybXJtXBpcGVCaW5kMiI6d2IsIsm1ybVwaXBlQmluZDMiOmtiLCLJtcm1cGlwZUJpbmQ0IjpmdW5jdGlvbiBkeSh0LGUsbixvLGksYSl7Y29uc3Qgcj10K29pLHM9aWEoKSxsPXFpKHMscik7cmV0dXJuIERiKHMsU2IocyxyKT92YihzLGdhKCksZSxsLnRyYW5zZm9ybSxuLG8saSxhLGwpOmwudHJhbnNmb3JtKG4sbyxpLGEpKX0sIsm1ybVwaXBlQmluZFYiOmZ1bmN0aW9uIHB5KHQsZSxuKXtjb25zdCBvPXQrb2ksaT1pYSgpLGE9cWkoaSxvKTtyZXR1cm4gRGIoaSxTYihpLG8pP3hiKGksZ2EoKSxlLGEudHJhbnNmb3JtLG4sYSk6YS50cmFuc2Zvcm0uYXBwbHkoYSxuKSl9LCLJtcm1cHJvamVjdGlvbkRlZiI6VnUsIsm1ybVob3N0UHJvcGVydHkiOmtmLCLJtcm1cHJvcGVydHkiOnZ1LCLJtcm1cHJvcGVydHlJbnRlcnBvbGF0ZSI6VXUsIsm1ybVwcm9wZXJ0eUludGVycG9sYXRlMSI6V3UsIsm1ybVwcm9wZXJ0eUludGVycG9sYXRlMiI6ZnVuY3Rpb24gdChlLG4sbyxpLGEscixzKXtjb25zdCBsPWlhKCksYz1IbShsLG4sbyxpLGEscik7aWYoYyE9PUtjKXtjb25zdCB0PWFhKCksbz16YSgpOyRkKHQsbyxsLGUsYyxsWzExXSxzLCExKSxuZ0Rldk1vZGUmJndwKHQuZGF0YSxvLGUsaGEoKS0yLG4saSxyKX1yZXR1cm4gdH0sIsm1ybVwcm9wZXJ0eUludGVycG9sYXRlMyI6ZnVuY3Rpb24gdChlLG4sbyxpLGEscixzLGwsYyl7Y29uc3QgZD1pYSgpLHA9Rm0oZCxuLG8saSxhLHIscyxsKTtpZihwIT09S2Mpe2NvbnN0IHQ9YWEoKSxvPXphKCk7JGQodCxvLGQsZSxwLGRbMTFdLGMsITEpLG5nRGV2TW9kZSYmd3AodC5kYXRhLG8sZSxoYSgpLTMsbixpLHIsbCl9cmV0dXJuIHR9LCLJtcm1cHJvcGVydHlJbnRlcnBvbGF0ZTQiOmZ1bmN0aW9uIHQoZSxuLG8saSxhLHIscyxsLGMsZCxwKXtjb25zdCBtPWlhKCksdT1MbShtLG4sbyxpLGEscixzLGwsYyxkKTtpZih1IT09S2Mpe2NvbnN0IHQ9YWEoKSxvPXphKCk7JGQodCxvLG0sZSx1LG1bMTFdLHAsITEpLG5nRGV2TW9kZSYmd3AodC5kYXRhLG8sZSxoYSgpLTQsbixpLHIsbCxkKX1yZXR1cm4gdH0sIsm1ybVwcm9wZXJ0eUludGVycG9sYXRlNSI6ZnVuY3Rpb24gdChlLG4sbyxpLGEscixzLGwsYyxkLHAsbSx1KXtjb25zdCBmPWlhKCksZz1CbShmLG4sbyxpLGEscixzLGwsYyxkLHAsbSk7aWYoZyE9PUtjKXtjb25zdCB0PWFhKCksbz16YSgpOyRkKHQsbyxmLGUsZyxmWzExXSx1LCExKSxuZ0Rldk1vZGUmJndwKHQuZGF0YSxvLGUsaGEoKS01LG4saSxyLGwsZCxtKX1yZXR1cm4gdH0sIsm1ybVwcm9wZXJ0eUludGVycG9sYXRlNiI6ZnVuY3Rpb24gdChlLG4sbyxpLGEscixzLGwsYyxkLHAsbSx1LGYsZyl7Y29uc3QgaD1pYSgpLGI9Vm0oaCxuLG8saSxhLHIscyxsLGMsZCxwLG0sdSxmKTtpZihiIT09S2Mpe2NvbnN0IHQ9YWEoKSxvPXphKCk7JGQodCxvLGgsZSxiLGhbMTFdLGcsITEpLG5nRGV2TW9kZSYmd3AodC5kYXRhLG8sZSxoYSgpLTYsbixpLHIsbCxkLG0sZil9cmV0dXJuIHR9LCLJtcm1cHJvcGVydHlJbnRlcnBvbGF0ZTciOmZ1bmN0aW9uIHQoZSxuLG8saSxhLHIscyxsLGMsZCxwLG0sdSxmLGcsaCxiKXtjb25zdCB5PWlhKCksXz1qbSh5LG4sbyxpLGEscixzLGwsYyxkLHAsbSx1LGYsZyxoKTtpZihfIT09S2Mpe2NvbnN0IHQ9YWEoKSxvPXphKCk7JGQodCxvLHksZSxfLHlbMTFdLGIsITEpLG5nRGV2TW9kZSYmd3AodC5kYXRhLG8sZSxoYSgpLTcsbixpLHIsbCxkLG0sZixoKX1yZXR1cm4gdH0sIsm1ybVwcm9wZXJ0eUludGVycG9sYXRlOCI6ZnVuY3Rpb24gdChlLG4sbyxpLGEscixzLGwsYyxkLHAsbSx1LGYsZyxoLGIseSxfKXtjb25zdCBDPWlhKCksTT1VbShDLG4sbyxpLGEscixzLGwsYyxkLHAsbSx1LGYsZyxoLGIseSk7aWYoTSE9PUtjKXtjb25zdCB0PWFhKCksbz16YSgpOyRkKHQsbyxDLGUsTSxDWzExXSxfLCExKSxuZ0Rldk1vZGUmJndwKHQuZGF0YSxvLGUsaGEoKS04LG4saSxyLGwsZCxtLGYsaCx5KX1yZXR1cm4gdH0sIsm1ybVwcm9wZXJ0eUludGVycG9sYXRlViI6ZnVuY3Rpb24gdChlLG4sbyl7Y29uc3QgaT1pYSgpLGE9SW0oaSxuKTtpZihhIT09S2Mpe2NvbnN0IHQ9YWEoKSxyPXphKCk7aWYoJGQodCxyLGksZSxhLGlbMTFdLG8sITEpLG5nRGV2TW9kZSl7Y29uc3Qgbz1bblswXV07Zm9yKGxldCB0PTI7dDxuLmxlbmd0aDt0Kz0yKW8ucHVzaChuW3RdKTt3cCh0LmRhdGEscixlLGhhKCktby5sZW5ndGgrMSwuLi5vKX19cmV0dXJuIHR9LCLJtcm1cGlwZSI6T2IsIsm1ybVxdWVyeVJlZnJlc2giOlViLCLJtcm1dmlld1F1ZXJ5IjpXYiwiybXJtWxvYWRRdWVyeSI6WWIsIsm1ybVjb250ZW50UXVlcnkiOkdiLCLJtcm1cmVmZXJlbmNlIjpHbSwiybXJtWNsYXNzTWFwIjpsZiwiybXJtWNsYXNzTWFwSW50ZXJwb2xhdGUxIjp3ZiwiybXJtWNsYXNzTWFwSW50ZXJwb2xhdGUyIjpmdW5jdGlvbiBteSh0LGUsbixvLGkpe3BmKEtyLGNmLEhtKGlhKCksdCxlLG4sbyxpKSwhMCl9LCLJtcm1Y2xhc3NNYXBJbnRlcnBvbGF0ZTMiOmZ1bmN0aW9uIHV5KHQsZSxuLG8saSxhLHIpe3BmKEtyLGNmLEZtKGlhKCksdCxlLG4sbyxpLGEsciksITApfSwiybXJtWNsYXNzTWFwSW50ZXJwb2xhdGU0IjpmdW5jdGlvbiBmeSh0LGUsbixvLGksYSxyLHMsbCl7cGYoS3IsY2YsTG0oaWEoKSx0LGUsbixvLGksYSxyLHMsbCksITApfSwiybXJtWNsYXNzTWFwSW50ZXJwb2xhdGU1IjpmdW5jdGlvbiBneSh0LGUsbixvLGksYSxyLHMsbCxjLGQpe3BmKEtyLGNmLEJtKGlhKCksdCxlLG4sbyxpLGEscixzLGwsYyxkKSwhMCl9LCLJtcm1Y2xhc3NNYXBJbnRlcnBvbGF0ZTYiOmZ1bmN0aW9uIGh5KHQsZSxuLG8saSxhLHIscyxsLGMsZCxwLG0pe3BmKEtyLGNmLFZtKGlhKCksdCxlLG4sbyxpLGEscixzLGwsYyxkLHAsbSksITApfSwiybXJtWNsYXNzTWFwSW50ZXJwb2xhdGU3IjpmdW5jdGlvbiBieSh0LGUsbixvLGksYSxyLHMsbCxjLGQscCxtLHUsZil7cGYoS3IsY2Ysam0oaWEoKSx0LGUsbixvLGksYSxyLHMsbCxjLGQscCxtLHUsZiksITApfSwiybXJtWNsYXNzTWFwSW50ZXJwb2xhdGU4IjpmdW5jdGlvbiB5eSh0LGUsbixvLGksYSxyLHMsbCxjLGQscCxtLHUsZixnLGgpe3BmKEtyLGNmLFVtKGlhKCksdCxlLG4sbyxpLGEscixzLGwsYyxkLHAsbSx1LGYsZyxoKSwhMCl9LCLJtcm1Y2xhc3NNYXBJbnRlcnBvbGF0ZVYiOmZ1bmN0aW9uIF95KHQpe3BmKEtyLGNmLEltKGlhKCksdCksITApfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8sIsm1ybVzdHlsZU1hcCI6cmYsIsm1ybVzdHlsZU1hcEludGVycG9sYXRlMSI6ZnVuY3Rpb24gQ3kodCxlLG4pe3JmKHptKGlhKCksdCxlLG4pKX0sIsm1ybVzdHlsZU1hcEludGVycG9sYXRlMiI6ZnVuY3Rpb24gTXkodCxlLG4sbyxpKXtyZihIbShpYSgpLHQsZSxuLG8saSkpfSwiybXJtXN0eWxlTWFwSW50ZXJwb2xhdGUzIjpmdW5jdGlvbiB2eSh0LGUsbixvLGksYSxyKXtyZihGbShpYSgpLHQsZSxuLG8saSxhLHIpKX0sIsm1ybVzdHlsZU1hcEludGVycG9sYXRlNCI6ZnVuY3Rpb24geHkodCxlLG4sbyxpLGEscixzLGwpe3JmKExtKGlhKCksdCxlLG4sbyxpLGEscixzLGwpKX0sIsm1ybVzdHlsZU1hcEludGVycG9sYXRlNSI6ZnVuY3Rpb24gT3kodCxlLG4sbyxpLGEscixzLGwsYyxkKXtyZihCbShpYSgpLHQsZSxuLG8saSxhLHIscyxsLGMsZCkpfSwiybXJtXN0eWxlTWFwSW50ZXJwb2xhdGU2IjpmdW5jdGlvbiBQeSh0LGUsbixvLGksYSxyLHMsbCxjLGQscCxtKXtyZihWbShpYSgpLHQsZSxuLG8saSxhLHIscyxsLGMsZCxwLG0pKX0sIsm1ybVzdHlsZU1hcEludGVycG9sYXRlNyI6ZnVuY3Rpb24gd3kodCxlLG4sbyxpLGEscixzLGwsYyxkLHAsbSx1LGYpe3JmKGptKGlhKCksdCxlLG4sbyxpLGEscixzLGwsYyxkLHAsbSx1LGYpKX0sIsm1ybVzdHlsZU1hcEludGVycG9sYXRlOCI6ZnVuY3Rpb24ga3kodCxlLG4sbyxpLGEscixzLGwsYyxkLHAsbSx1LGYsZyxoKXtyZihVbShpYSgpLHQsZSxuLG8saSxhLHIscyxsLGMsZCxwLG0sdSxmLGcsaCkpfSwiybXJtXN0eWxlTWFwSW50ZXJwb2xhdGVWIjpmdW5jdGlvbiBTeSh0KXtyZihJbShpYSgpLHQpKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovLCLJtcm1c3R5bGVQcm9wIjpvZiwiybXJtXN0eWxlUHJvcEludGVycG9sYXRlMSI6ZnVuY3Rpb24gdChlLG4sbyxpLGEpe3JldHVybiBkZihlLHptKGlhKCksbixvLGkpLGEsITEpLHR9LCLJtcm1c3R5bGVQcm9wSW50ZXJwb2xhdGUyIjpmdW5jdGlvbiB0KGUsbixvLGksYSxyLHMpe3JldHVybiBkZihlLEhtKGlhKCksbixvLGksYSxyKSxzLCExKSx0fSwiybXJtXN0eWxlUHJvcEludGVycG9sYXRlMyI6ZnVuY3Rpb24gdChlLG4sbyxpLGEscixzLGwsYyl7cmV0dXJuIGRmKGUsRm0oaWEoKSxuLG8saSxhLHIscyxsKSxjLCExKSx0fSwiybXJtXN0eWxlUHJvcEludGVycG9sYXRlNCI6ZnVuY3Rpb24gdChlLG4sbyxpLGEscixzLGwsYyxkLHApe3JldHVybiBkZihlLExtKGlhKCksbixvLGksYSxyLHMsbCxjLGQpLHAsITEpLHR9LCLJtcm1c3R5bGVQcm9wSW50ZXJwb2xhdGU1IjpmdW5jdGlvbiB0KGUsbixvLGksYSxyLHMsbCxjLGQscCxtLHUpe3JldHVybiBkZihlLEJtKGlhKCksbixvLGksYSxyLHMsbCxjLGQscCxtKSx1LCExKSx0fSwiybXJtXN0eWxlUHJvcEludGVycG9sYXRlNiI6ZnVuY3Rpb24gdChlLG4sbyxpLGEscixzLGwsYyxkLHAsbSx1LGYsZyl7cmV0dXJuIGRmKGUsVm0oaWEoKSxuLG8saSxhLHIscyxsLGMsZCxwLG0sdSxmKSxnLCExKSx0fSwiybXJtXN0eWxlUHJvcEludGVycG9sYXRlNyI6ZnVuY3Rpb24gdChlLG4sbyxpLGEscixzLGwsYyxkLHAsbSx1LGYsZyxoLGIpe3JldHVybiBkZihlLGptKGlhKCksbixvLGksYSxyLHMsbCxjLGQscCxtLHUsZixnLGgpLGIsITEpLHR9LCLJtcm1c3R5bGVQcm9wSW50ZXJwb2xhdGU4IjpmdW5jdGlvbiB0KGUsbixvLGksYSxyLHMsbCxjLGQscCxtLHUsZixnLGgsYix5LF8pe3JldHVybiBkZihlLFVtKGlhKCksbixvLGksYSxyLHMsbCxjLGQscCxtLHUsZixnLGgsYix5KSxfLCExKSx0fSwiybXJtXN0eWxlUHJvcEludGVycG9sYXRlViI6ZnVuY3Rpb24gdChlLG4sbyl7cmV0dXJuIGRmKGUsSW0oaWEoKSxuKSxvLCExKSx0fSwiybXJtWNsYXNzUHJvcCI6YWYsIsm1ybVhZHZhbmNlIjpKYywiybXJtXRlbXBsYXRlIjpXbSwiybXJtXRleHQiOk1mLCLJtcm1dGV4dEludGVycG9sYXRlIjp2ZiwiybXJtXRleHRJbnRlcnBvbGF0ZTEiOnhmLCLJtcm1dGV4dEludGVycG9sYXRlMiI6T2YsIsm1ybV0ZXh0SW50ZXJwb2xhdGUzIjpQZiwiybXJtXRleHRJbnRlcnBvbGF0ZTQiOmZ1bmN0aW9uIHQoZSxuLG8saSxhLHIscyxsLGMpe2NvbnN0IGQ9aWEoKSxwPUxtKGQsZSxuLG8saSxhLHIscyxsLGMpO3JldHVybiBwIT09S2MmJlRwKGQsTmEoKSxwKSx0fSwiybXJtXRleHRJbnRlcnBvbGF0ZTUiOmZ1bmN0aW9uIHQoZSxuLG8saSxhLHIscyxsLGMsZCxwKXtjb25zdCBtPWlhKCksdT1CbShtLGUsbixvLGksYSxyLHMsbCxjLGQscCk7cmV0dXJuIHUhPT1LYyYmVHAobSxOYSgpLHUpLHR9LCLJtcm1dGV4dEludGVycG9sYXRlNiI6ZnVuY3Rpb24gdChlLG4sbyxpLGEscixzLGwsYyxkLHAsbSx1KXtjb25zdCBmPWlhKCksZz1WbShmLGUsbixvLGksYSxyLHMsbCxjLGQscCxtLHUpO3JldHVybiBnIT09S2MmJlRwKGYsTmEoKSxnKSx0fSwiybXJtXRleHRJbnRlcnBvbGF0ZTciOmZ1bmN0aW9uIHQoZSxuLG8saSxhLHIscyxsLGMsZCxwLG0sdSxmLGcpe2NvbnN0IGg9aWEoKSxiPWptKGgsZSxuLG8saSxhLHIscyxsLGMsZCxwLG0sdSxmLGcpO3JldHVybiBiIT09S2MmJlRwKGgsTmEoKSxiKSx0fSwiybXJtXRleHRJbnRlcnBvbGF0ZTgiOmZ1bmN0aW9uIHQoZSxuLG8saSxhLHIscyxsLGMsZCxwLG0sdSxmLGcsaCxiKXtjb25zdCB5PWlhKCksXz1VbSh5LGUsbixvLGksYSxyLHMsbCxjLGQscCxtLHUsZixnLGgsYik7cmV0dXJuIF8hPT1LYyYmVHAoeSxOYSgpLF8pLHR9LCLJtcm1dGV4dEludGVycG9sYXRlViI6ZnVuY3Rpb24gdChlKXtjb25zdCBuPWlhKCksbz1JbShuLGUpO3JldHVybiBvIT09S2MmJlRwKG4sTmEoKSxvKSx0fSwiybXJtWkxOG4iOnFnLCLJtcm1aTE4bkF0dHJpYnV0ZXMiOmZ1bmN0aW9uIER5KHQsZSl7Y29uc3Qgbj1hYSgpO25nRGV2TW9kZSYmb28obiwidFZpZXcgc2hvdWxkIGJlIGRlZmluZWQiKTtjb25zdCBvPSRpKG4uY29uc3RzLGUpOyEoZnVuY3Rpb24gaSh0LGUsbil7Y29uc3Qgbz1zYSgpLmluZGV4LGk9W107aWYobmdEZXZNb2RlJiZsZChpLG1nKSx0LmZpcnN0Q3JlYXRlUGFzcyYmbnVsbD09PXQuZGF0YVtlXSl7Zm9yKGxldCB0PTA7dDxuLmxlbmd0aDt0Kz0yKXtjb25zdCBlPW5bdF0sYT1uW3QrMV07aWYoIiIhPT1hKXtpZihiZy50ZXN0KGEpKXRocm93IG5ldyBFcnJvcihgSUNVIGV4cHJlc3Npb25zIGFyZSBub3Qgc3VwcG9ydGVkIGluIGF0dHJpYnV0ZXMuIE1lc3NhZ2U6ICIke2F9Ii5gKTtQZyhpLGEsbyxlLHdnKGkpLG51bGwpfX10LmRhdGFbZV09aX19KShuLHQrb2ksbyl9LCLJtcm1aTE4bkV4cCI6WmcsIsm1ybVpMThuU3RhcnQiOkdnLCLJtcm1aTE4bkVuZCI6WWcsIsm1ybVpMThuQXBwbHkiOlhnLCLJtcm1aTE4blBvc3Rwcm9jZXNzIjpLZywiybXJtXJlc29sdmVXaW5kb3ciOnFsLCLJtcm1cmVzb2x2ZURvY3VtZW50IjpabCwiybXJtXJlc29sdmVCb2R5IjpYbCwiybXJtXNldENvbXBvbmVudFNjb3BlIjpXbywiybXJtXNldE5nTW9kdWxlU2NvcGUiOlhvLCLJtcm1c2FuaXRpemVIdG1sIjoKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmZ1bmN0aW9uIEV5KHQpe2NvbnN0IGU9d2woKTtyZXR1cm4gZT96cyhlLnNhbml0aXplKHhsLkhUTUwsdCl8fCIiKTpZcyh0LCJIVE1MIik/enMoR3ModCkpOk1sKExpKCksVm4odCkpfSwiybXJtXNhbml0aXplU3R5bGUiOmZ1bmN0aW9uIEF5KHQpe2NvbnN0IGU9d2woKTtyZXR1cm4gZT9lLnNhbml0aXplKHhsLlNUWUxFLHQpfHwiIjpZcyh0LCJTdHlsZSIpP0dzKHQpOlZuKHQpfSwiybXJtXNhbml0aXplUmVzb3VyY2VVcmwiOlBsLCLJtcm1c2FuaXRpemVTY3JpcHQiOmZ1bmN0aW9uIFJ5KHQpe2NvbnN0IGU9d2woKTtpZihlKXJldHVybiBIcyhlLnNhbml0aXplKHhsLlNDUklQVCx0KXx8IiIpO2lmKFlzKHQsIlNjcmlwdCIpKXJldHVybiBIcyhHcyh0KSk7dGhyb3cgbmV3IEVycm9yKCJ1bnNhZmUgdmFsdWUgdXNlZCBpbiBhIHNjcmlwdCBjb250ZXh0Iil9LCLJtcm1c2FuaXRpemVVcmwiOk9sLCLJtcm1c2FuaXRpemVVcmxPclJlc291cmNlVXJsIjpmdW5jdGlvbiBUeSh0LGUsbil7cmV0dXJuKGZ1bmN0aW9uIG8odCxlKXtyZXR1cm4ic3JjIj09PWUmJigiZW1iZWQiPT09dHx8ImZyYW1lIj09PXR8fCJpZnJhbWUiPT09dHx8Im1lZGlhIj09PXR8fCJzY3JpcHQiPT09dCl8fCJocmVmIj09PWUmJigiYmFzZSI9PT10fHwibGluayI9PT10KT9QbDpPbH0pKGUsbikodCl9LCLJtcm1dHJ1c3RDb25zdGFudEh0bWwiOmZ1bmN0aW9uIE55KHQpe2lmKG5nRGV2TW9kZSYmKCFBcnJheS5pc0FycmF5KHQpfHwhQXJyYXkuaXNBcnJheSh0LnJhdyl8fDEhPT10Lmxlbmd0aCkpdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIGludGVycG9sYXRpb24gaW4gdHJ1c3RlZCBIVE1MIGNvbnN0YW50OiAke3Quam9pbigiPyIpfWApO3JldHVybiBOcyh0WzBdKX0sIsm1ybV0cnVzdENvbnN0YW50UmVzb3VyY2VVcmwiOmZ1bmN0aW9uIEl5KHQpe2lmKG5nRGV2TW9kZSYmKCFBcnJheS5pc0FycmF5KHQpfHwhQXJyYXkuaXNBcnJheSh0LnJhdyl8fDEhPT10Lmxlbmd0aCkpdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIGludGVycG9sYXRpb24gaW4gdHJ1c3RlZCBVUkwgY29uc3RhbnQ6ICR7dC5qb2luKCI/Iil9YCk7cmV0dXJuKGZ1bmN0aW9uIGUodCl7dmFyIGU7cmV0dXJuKG51bGw9PT0oZT1UcygpKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5jcmVhdGVTY3JpcHRVUkwodCkpfHx0fSkodFswXSl9LGZvcndhcmRSZWY6SW4scmVzb2x2ZUZvcndhcmRSZWY6em59O2xldCB6eT1udWxsOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3QgSHk9W10sRnk9W107bGV0IEx5PSExO2Z1bmN0aW9uIEJ5KHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP3QuZXZlcnkoQnkpOiEhem4odCl9ZnVuY3Rpb24gVnkodCxlLG4pe2lmKEd5LmdldCh0KSlyZXR1cm47bGV0IG87aWYoR3kuc2V0KHQsITApLHQ9em4odCksbil7aWYobz1uaSh0KSwhbyl0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgdmFsdWUgJyR7dC5uYW1lfScgaW1wb3J0ZWQgYnkgdGhlIG1vZHVsZSAnJHtuLm5hbWV9Jy4gUGxlYXNlIGFkZCBhbiBATmdNb2R1bGUgYW5ub3RhdGlvbi5gKX1lbHNlIG89bmkodCwhMCk7Y29uc3QgaT1bXSxhPUpsKG8uZGVjbGFyYXRpb25zKSxyPUpsKG8uaW1wb3J0cyk7R3IocikubWFwKGp5KS5mb3JFYWNoKChlPT57aChlLHQpLFZ5KGUsITEsdCl9KSk7Y29uc3Qgcz1KbChvLmV4cG9ydHMpO2EuZm9yRWFjaCgoZnVuY3Rpb24gbChlKXskbyhlPXpuKGUpKXx8dGkoZSl8fGVpKGUpfHxpLnB1c2goYFVuZXhwZWN0ZWQgdmFsdWUgJyR7am4oZSl9JyBkZWNsYXJlZCBieSB0aGUgbW9kdWxlICcke2puKHQpfScuIFBsZWFzZSBhZGQgYSBAUGlwZS9ARGlyZWN0aXZlL0BDb21wb25lbnQgYW5ub3RhdGlvbi5gKX0pKSxhLmZvckVhY2goKGZ1bmN0aW9uIGModCl7Y29uc3QgZT10aSh0PXpuKHQpKTshJG8odCkmJmUmJjA9PWUuc2VsZWN0b3JzLmxlbmd0aCYmaS5wdXNoKGBEaXJlY3RpdmUgJHtqbih0KX0gaGFzIG5vIHNlbGVjdG9yLCBwbGVhc2UgYWRkIGl0IWApfSkpO2NvbnN0IGQ9Wy4uLmEubWFwKHpuKSwuLi5HcihyLm1hcChZeSkpLm1hcCh6bildO3MuZm9yRWFjaCgoZnVuY3Rpb24gcChlKXtjb25zdCBuPSgkbyhlPXpuKGUpKT8iY29tcG9uZW50Ijp0aShlKSYmImRpcmVjdGl2ZSIpfHxlaShlKSYmInBpcGUiO24mJi0xPT09ZC5sYXN0SW5kZXhPZihlKSYmaS5wdXNoKGBDYW4ndCBleHBvcnQgJHtufSAke2puKGUpfSBmcm9tICR7am4odCl9IGFzIGl0IHdhcyBuZWl0aGVyIGRlY2xhcmVkIG5vciBpbXBvcnRlZCFgKX0pKSxhLmZvckVhY2goKG49PihmdW5jdGlvbiBvKGUsbil7ZT16bihlKTtjb25zdCBvPVd5LmdldChlKTtpZihvJiZvIT09dCl7aWYoIW4pe2NvbnN0IG49W28sdF0ubWFwKGpuKS5zb3J0KCk7aS5wdXNoKGBUeXBlICR7am4oZSl9IGlzIHBhcnQgb2YgdGhlIGRlY2xhcmF0aW9ucyBvZiAyIG1vZHVsZXM6ICR7blswXX0gYW5kICR7blsxXX0hIFBsZWFzZSBjb25zaWRlciBtb3ZpbmcgJHtqbihlKX0gdG8gYSBoaWdoZXIgbW9kdWxlIHRoYXQgaW1wb3J0cyAke25bMF19IGFuZCAke25bMV19LiBZb3UgY2FuIGFsc28gY3JlYXRlIGEgbmV3IE5nTW9kdWxlIHRoYXQgZXhwb3J0cyBhbmQgaW5jbHVkZXMgJHtqbihlKX0gdGhlbiBpbXBvcnQgdGhhdCBOZ01vZHVsZSBpbiAke25bMF19IGFuZCAke25bMV19LmApfX1lbHNlIFd5LnNldChlLHQpfSkobixlKSkpLGEuZm9yRWFjaCgoZnVuY3Rpb24gbSh0KXtpZigkbyh0PXpuKHQpKSl7Y29uc3QgZT1VeSh0LCJDb21wb25lbnQiKTtlJiZlLmVudHJ5Q29tcG9uZW50cyYmWXIoZS5lbnRyeUNvbXBvbmVudHMsZyl9fSkpO2NvbnN0IHU9VXkodCwiTmdNb2R1bGUiKTtpZih1JiYodS5pbXBvcnRzJiZHcih1LmltcG9ydHMpLm1hcChqeSkuZm9yRWFjaCgoZT0+e2goZSx0KSxWeShlLCExLHQpfSkpLHUuYm9vdHN0cmFwJiZZcih1LmJvb3RzdHJhcCwoZnVuY3Rpb24gZih0KXskbyh0PXpuKHQpKXx8aS5wdXNoKGAke2puKHQpfSBjYW5ub3QgYmUgdXNlZCBhcyBhbiBlbnRyeSBjb21wb25lbnQuYCl9KSksdS5ib290c3RyYXAmJllyKHUuYm9vdHN0cmFwLGcpLHUuZW50cnlDb21wb25lbnRzJiZZcih1LmVudHJ5Q29tcG9uZW50cyxnKSksaS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKGkuam9pbigiXG4iKSk7ZnVuY3Rpb24gZyh0KXt0PXpuKHQpLFd5LmdldCh0KXx8aS5wdXNoKGBDb21wb25lbnQgJHtqbih0KX0gaXMgbm90IHBhcnQgb2YgYW55IE5nTW9kdWxlIG9yIHRoZSBtb2R1bGUgaGFzIG5vdCBiZWVuIGltcG9ydGVkIGludG8geW91ciBtb2R1bGUuYCl9ZnVuY3Rpb24gaCh0LGUpe2lmKCRvKHQ9em4odCkpfHx0aSh0KSl0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgZGlyZWN0aXZlICcke3QubmFtZX0nIGltcG9ydGVkIGJ5IHRoZSBtb2R1bGUgJyR7ZS5uYW1lfScuIFBsZWFzZSBhZGQgYW4gQE5nTW9kdWxlIGFubm90YXRpb24uYCk7aWYoZWkodCkpdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIHBpcGUgJyR7dC5uYW1lfScgaW1wb3J0ZWQgYnkgdGhlIG1vZHVsZSAnJHtlLm5hbWV9Jy4gUGxlYXNlIGFkZCBhbiBATmdNb2R1bGUgYW5ub3RhdGlvbi5gKX19ZnVuY3Rpb24gankodCl7cmV0dXJuKHQ9em4odCkpLm5nTW9kdWxlfHx0fWZ1bmN0aW9uIFV5KHQsZSl7bGV0IG49bnVsbDtyZXR1cm4gbyh0Ll9fYW5ub3RhdGlvbnNfXyksbyh0LmRlY29yYXRvcnMpLG47ZnVuY3Rpb24gbyh0KXt0JiZ0LmZvckVhY2goaSl9ZnVuY3Rpb24gaSh0KXtufHwoT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpLm5nTWV0YWRhdGFOYW1lPT1lP249dDp0LnR5cGUmJk9iamVjdC5nZXRQcm90b3R5cGVPZih0LnR5cGUpLm5nTWV0YWRhdGFOYW1lPT1lJiYobj10LmFyZ3NbMF0pKX19bGV0IFd5PW5ldyBXZWFrTWFwLEd5PW5ldyBXZWFrTWFwO2Z1bmN0aW9uIFl5KHQpe3JldHVyblsuLi5HcihKbChuaSh0PXpuKHQpLCEwKS5leHBvcnRzKS5tYXAoKHQ9Pm5pKHQpPyhWeSh0LCExKSxZeSh0KSk6dCkpKV19ZnVuY3Rpb24gcXkodCxlKXtjb25zdCBuPUdyKGUuZGVjbGFyYXRpb25zfHxIeSksbz1YeSh0KTtuLmZvckVhY2goKGU9PntlLmhhc093blByb3BlcnR5KElvKT9aeSgkbyhlKSxvKTplLmhhc093blByb3BlcnR5KHpvKXx8ZS5oYXNPd25Qcm9wZXJ0eShIbyl8fChlLm5nU2VsZWN0b3JTY29wZT10KX0pKX1mdW5jdGlvbiBaeSh0LGUpe3QuZGlyZWN0aXZlRGVmcz0oKT0+QXJyYXkuZnJvbShlLmNvbXBpbGF0aW9uLmRpcmVjdGl2ZXMpLm1hcCgodD0+dC5oYXNPd25Qcm9wZXJ0eShJbyk/JG8odCk6dGkodCkpKS5maWx0ZXIoKHQ9PiEhdCkpLHQucGlwZURlZnM9KCk9PkFycmF5LmZyb20oZS5jb21waWxhdGlvbi5waXBlcykubWFwKCh0PT5laSh0KSkpLHQuc2NoZW1hcz1lLnNjaGVtYXMsdC50Vmlldz1udWxsfWZ1bmN0aW9uIFh5KHQpe2lmKCFKeSh0KSl0aHJvdyBuZXcgRXJyb3IoYCR7dC5uYW1lfSBkb2VzIG5vdCBoYXZlIGEgbW9kdWxlIGRlZiAoybVtb2QgcHJvcGVydHkpYCk7Y29uc3QgZT1uaSh0KTtpZihudWxsIT09ZS50cmFuc2l0aXZlQ29tcGlsZVNjb3BlcylyZXR1cm4gZS50cmFuc2l0aXZlQ29tcGlsZVNjb3Blcztjb25zdCBuPXtzY2hlbWFzOmUuc2NoZW1hc3x8bnVsbCxjb21waWxhdGlvbjp7ZGlyZWN0aXZlczpuZXcgU2V0LHBpcGVzOm5ldyBTZXR9LGV4cG9ydGVkOntkaXJlY3RpdmVzOm5ldyBTZXQscGlwZXM6bmV3IFNldH19O3JldHVybiBKbChlLmltcG9ydHMpLmZvckVhY2goKHQ9Pntjb25zdCBlPXQ7aWYoIUp5KGUpKXRocm93IG5ldyBFcnJvcihgSW1wb3J0aW5nICR7ZS5uYW1lfSB3aGljaCBkb2VzIG5vdCBoYXZlIGEgybVtb2QgcHJvcGVydHlgKTtjb25zdCBvPVh5KGUpO28uZXhwb3J0ZWQuZGlyZWN0aXZlcy5mb3JFYWNoKCh0PT5uLmNvbXBpbGF0aW9uLmRpcmVjdGl2ZXMuYWRkKHQpKSksby5leHBvcnRlZC5waXBlcy5mb3JFYWNoKCh0PT5uLmNvbXBpbGF0aW9uLnBpcGVzLmFkZCh0KSkpfSkpLEpsKGUuZGVjbGFyYXRpb25zKS5mb3JFYWNoKCh0PT57ZWkodCk/bi5jb21waWxhdGlvbi5waXBlcy5hZGQodCk6bi5jb21waWxhdGlvbi5kaXJlY3RpdmVzLmFkZCh0KX0pKSxKbChlLmV4cG9ydHMpLmZvckVhY2goKHQ9Pntjb25zdCBlPXQ7aWYoSnkoZSkpe2NvbnN0IHQ9WHkoZSk7dC5leHBvcnRlZC5kaXJlY3RpdmVzLmZvckVhY2goKHQ9PntuLmNvbXBpbGF0aW9uLmRpcmVjdGl2ZXMuYWRkKHQpLG4uZXhwb3J0ZWQuZGlyZWN0aXZlcy5hZGQodCl9KSksdC5leHBvcnRlZC5waXBlcy5mb3JFYWNoKCh0PT57bi5jb21waWxhdGlvbi5waXBlcy5hZGQodCksbi5leHBvcnRlZC5waXBlcy5hZGQodCl9KSl9ZWxzZSBlaShlKT9uLmV4cG9ydGVkLnBpcGVzLmFkZChlKTpuLmV4cG9ydGVkLmRpcmVjdGl2ZXMuYWRkKGUpfSkpLGUudHJhbnNpdGl2ZUNvbXBpbGVTY29wZXM9bixufWZ1bmN0aW9uIEt5KHQpe3JldHVybihmdW5jdGlvbiBlKHQpe3JldHVybiB2b2lkIDAhPT10Lm5nTW9kdWxlfSkodCk/dC5uZ01vZHVsZTp0fWZ1bmN0aW9uIEp5KHQpe3JldHVybiEhbmkodCl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2xldCBReT0wO2Z1bmN0aW9uICR5KHQsZSl7bGV0IG49bnVsbDtlXyh0LGV8fHt9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCx6byx7Z2V0OigpPT57aWYobnVsbD09PW4pe2NvbnN0IG89dF8odCxlfHx7fSk7bj1qcigpLmNvbXBpbGVEaXJlY3RpdmUoUWIsby5zb3VyY2VNYXBVcmwsby5tZXRhZGF0YSl9cmV0dXJuIG59LGNvbmZpZ3VyYWJsZTohIW5nRGV2TW9kZX0pfWZ1bmN0aW9uIHRfKHQsZSl7Y29uc3Qgbj10JiZ0Lm5hbWUsbz1gbmc6Ly8vJHtufS/JtWRpci5qc2AsaT1qcigpLGE9b18odCxlKTtyZXR1cm4gYS50eXBlU291cmNlU3Bhbj1pLmNyZWF0ZVBhcnNlU291cmNlU3BhbigiRGlyZWN0aXZlIixuLG8pLGEudXNlc0luaGVyaXRhbmNlJiZpXyh0KSx7bWV0YWRhdGE6YSxzb3VyY2VNYXBVcmw6b319ZnVuY3Rpb24gZV8odCxlKXtsZXQgbj1udWxsO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LEJvLHtnZXQ6KCk9PntpZihudWxsPT09bil7Y29uc3Qgbz10Xyh0LGUpLGk9anIoKTtuPWkuY29tcGlsZUZhY3RvcnkoUWIsYG5nOi8vLyR7dC5uYW1lfS/JtWZhYy5qc2AsT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LG8ubWV0YWRhdGEpLHtpbmplY3RGbjoiZGlyZWN0aXZlSW5qZWN0Iix0YXJnZXQ6aS5SM0ZhY3RvcnlUYXJnZXQuRGlyZWN0aXZlfSkpfXJldHVybiBufSxjb25maWd1cmFibGU6ISFuZ0Rldk1vZGV9KX1mdW5jdGlvbiBuXyh0KXtyZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKHQucHJvdG90eXBlKT09PU9iamVjdC5wcm90b3R5cGV9ZnVuY3Rpb24gb18odCxlKXtjb25zdCBuPU9zKCksbz1uLm93blByb3BNZXRhZGF0YSh0KTtyZXR1cm57bmFtZTp0Lm5hbWUsdHlwZTp0LHR5cGVBcmd1bWVudENvdW50OjAsc2VsZWN0b3I6dm9pZCAwIT09ZS5zZWxlY3Rvcj9lLnNlbGVjdG9yOm51bGwsZGVwczpQcyh0KSxob3N0OmUuaG9zdHx8Um8scHJvcE1ldGFkYXRhOm8saW5wdXRzOmUuaW5wdXRzfHxObyxvdXRwdXRzOmUub3V0cHV0c3x8Tm8scXVlcmllczpzXyh0LG8sbF8pLGxpZmVjeWNsZTp7dXNlc09uQ2hhbmdlczpuLmhhc0xpZmVjeWNsZUhvb2sodCwibmdPbkNoYW5nZXMiKX0sdHlwZVNvdXJjZVNwYW46bnVsbCx1c2VzSW5oZXJpdGFuY2U6IW5fKHQpLGV4cG9ydEFzOihpPWUuZXhwb3J0QXMsdm9pZCAwPT09aT9udWxsOnBfKGkpKSxwcm92aWRlcnM6ZS5wcm92aWRlcnN8fG51bGwsdmlld1F1ZXJpZXM6c18odCxvLGNfKX07dmFyIGl9ZnVuY3Rpb24gaV8odCl7Y29uc3QgZT1PYmplY3QucHJvdG90eXBlO2xldCBuPU9iamVjdC5nZXRQcm90b3R5cGVPZih0LnByb3RvdHlwZSkuY29uc3RydWN0b3I7Zm9yKDtuJiZuIT09ZTspdGkobil8fCRvKG4pfHwhdV8obil8fCR5KG4sbnVsbCksbj1PYmplY3QuZ2V0UHJvdG90eXBlT2Yobil9ZnVuY3Rpb24gYV8odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P3BfKHQpOnpuKHQpfWZ1bmN0aW9uIHJfKHQsZSl7cmV0dXJue3Byb3BlcnR5TmFtZTp0LHByZWRpY2F0ZTphXyhlLnNlbGVjdG9yKSxkZXNjZW5kYW50czplLmRlc2NlbmRhbnRzLGZpcnN0OmUuZmlyc3QscmVhZDplLnJlYWQ/ZS5yZWFkOm51bGwsc3RhdGljOiEhZS5zdGF0aWMsZW1pdERpc3RpbmN0Q2hhbmdlc09ubHk6ISFlLmVtaXREaXN0aW5jdENoYW5nZXNPbmx5fX1mdW5jdGlvbiBzXyh0LGUsbil7Y29uc3Qgbz1bXTtmb3IoY29uc3QgaSBpbiBlKWlmKGUuaGFzT3duUHJvcGVydHkoaSkpe2NvbnN0IGE9ZVtpXTthLmZvckVhY2goKGU9PntpZihuKGUpKXtpZighZS5zZWxlY3Rvcil0aHJvdyBuZXcgRXJyb3IoYENhbid0IGNvbnN0cnVjdCBhIHF1ZXJ5IGZvciB0aGUgcHJvcGVydHkgIiR7aX0iIG9mICIke2puKHQpfSIgc2luY2UgdGhlIHF1ZXJ5IHNlbGVjdG9yIHdhc24ndCBkZWZpbmVkLmApO2lmKGEuc29tZShkXykpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY29tYmluZSBASW5wdXQgZGVjb3JhdG9ycyB3aXRoIHF1ZXJ5IGRlY29yYXRvcnMiKTtvLnB1c2gocl8oaSxlKSl9fSkpfXJldHVybiBvfWZ1bmN0aW9uIGxfKHQpe2NvbnN0IGU9dC5uZ01ldGFkYXRhTmFtZTtyZXR1cm4iQ29udGVudENoaWxkIj09PWV8fCJDb250ZW50Q2hpbGRyZW4iPT09ZX1mdW5jdGlvbiBjXyh0KXtjb25zdCBlPXQubmdNZXRhZGF0YU5hbWU7cmV0dXJuIlZpZXdDaGlsZCI9PT1lfHwiVmlld0NoaWxkcmVuIj09PWV9ZnVuY3Rpb24gZF8odCl7cmV0dXJuIklucHV0Ij09PXQubmdNZXRhZGF0YU5hbWV9ZnVuY3Rpb24gcF8odCl7cmV0dXJuIHQuc3BsaXQoIiwiKS5tYXAoKHQ9PnQudHJpbSgpKSl9Y29uc3QgbV89WyJuZ09uQ2hhbmdlcyIsIm5nT25Jbml0IiwibmdPbkRlc3Ryb3kiLCJuZ0RvQ2hlY2siLCJuZ0FmdGVyVmlld0luaXQiLCJuZ0FmdGVyVmlld0NoZWNrZWQiLCJuZ0FmdGVyQ29udGVudEluaXQiLCJuZ0FmdGVyQ29udGVudENoZWNrZWQiXTtmdW5jdGlvbiB1Xyh0KXtjb25zdCBlPU9zKCk7aWYobV8uc29tZSgobj0+ZS5oYXNMaWZlY3ljbGVIb29rKHQsbikpKSlyZXR1cm4hMDtjb25zdCBuPWUucHJvcE1ldGFkYXRhKHQpO2Zvcihjb25zdCB0IGluIG4pe2NvbnN0IGU9blt0XTtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyl7Y29uc3Qgbj1lW3RdLG89bi5uZ01ldGFkYXRhTmFtZTtpZihkXyhuKXx8bF8obil8fGNfKG4pfHwiT3V0cHV0Ij09PW98fCJIb3N0QmluZGluZyI9PT1vfHwiSG9zdExpc3RlbmVyIj09PW8pcmV0dXJuITB9fXJldHVybiExfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiBmXyh0LGUpe3JldHVybnt0eXBlOnQsdHlwZUFyZ3VtZW50Q291bnQ6MCxuYW1lOnQubmFtZSxkZXBzOlBzKHQpLHBpcGVOYW1lOmUubmFtZSxwdXJlOnZvaWQgMD09PWUucHVyZXx8ZS5wdXJlfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY29uc3QgZ189U3IoIkRpcmVjdGl2ZSIsKCh0PXt9KT0+dCksdm9pZCAwLHZvaWQgMCwoKHQsZSk9Pk9fKHQsZSkpKSxoXz1TcigiQ29tcG9uZW50IiwoKHQ9e30pPT5PYmplY3QuYXNzaWduKHtjaGFuZ2VEZXRlY3Rpb246eG8uRGVmYXVsdH0sdCkpLGdfLHZvaWQgMCwoKHQsZSk9PnZfKHQsZSkpKSxiXz1TcigiUGlwZSIsKHQ9Pk9iamVjdC5hc3NpZ24oe3B1cmU6ITB9LHQpKSx2b2lkIDAsdm9pZCAwLCgodCxlKT0+UF8odCxlKSkpLHlfPUFyKCJJbnB1dCIsKHQ9Pih7YmluZGluZ1Byb3BlcnR5TmFtZTp0fSkpKSxfXz1BcigiT3V0cHV0IiwodD0+KHtiaW5kaW5nUHJvcGVydHlOYW1lOnR9KSkpLENfPUFyKCJIb3N0QmluZGluZyIsKHQ9Pih7aG9zdFByb3BlcnR5TmFtZTp0fSkpKSxNXz1BcigiSG9zdExpc3RlbmVyIiwoKHQsZSk9Pih7ZXZlbnROYW1lOnQsYXJnczplfSkpKSx2Xz1mdW5jdGlvbiB4Xyh0LGUpeygidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmQW8oKTtsZXQgbj1udWxsOyEoZnVuY3Rpb24gbyh0LGUpe0RzKGUpJiYoa3Muc2V0KHQsZSksU3MuYWRkKHQpKX0pKHQsZSksZV8odCxlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxJbyx7Z2V0OigpPT57aWYobnVsbD09PW4pe2NvbnN0IG89anIoKTtpZihEcyhlKSl7Y29uc3Qgbj1bYENvbXBvbmVudCAnJHt0Lm5hbWV9JyBpcyBub3QgcmVzb2x2ZWQ6YF07dGhyb3cgZS50ZW1wbGF0ZVVybCYmbi5wdXNoKGAgLSB0ZW1wbGF0ZVVybDogJHtlLnRlbXBsYXRlVXJsfWApLGUuc3R5bGVVcmxzJiZlLnN0eWxlVXJscy5sZW5ndGgmJm4ucHVzaChgIC0gc3R5bGVVcmxzOiAke0pTT04uc3RyaW5naWZ5KGUuc3R5bGVVcmxzKX1gKSxuLnB1c2goIkRpZCB5b3UgcnVuIGFuZCB3YWl0IGZvciAncmVzb2x2ZUNvbXBvbmVudFJlc291cmNlcygpJz8iKSxuZXcgRXJyb3Iobi5qb2luKCJcbiIpKX1jb25zdCBpPShmdW5jdGlvbiBvKCl7cmV0dXJuIHp5fSkoKTtsZXQgYT1lLnByZXNlcnZlV2hpdGVzcGFjZXM7dm9pZCAwPT09YSYmKGE9bnVsbCE9PWkmJnZvaWQgMCE9PWkucHJlc2VydmVXaGl0ZXNwYWNlcyYmaS5wcmVzZXJ2ZVdoaXRlc3BhY2VzKTtsZXQgcj1lLmVuY2Fwc3VsYXRpb247dm9pZCAwPT09ciYmKHI9bnVsbCE9PWkmJnZvaWQgMCE9PWkuZGVmYXVsdEVuY2Fwc3VsYXRpb24/aS5kZWZhdWx0RW5jYXBzdWxhdGlvbjpQby5FbXVsYXRlZCk7Y29uc3Qgcz1lLnRlbXBsYXRlVXJsfHxgbmc6Ly8vJHt0Lm5hbWV9L3RlbXBsYXRlLmh0bWxgLGw9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LG9fKHQsZSkpLHt0eXBlU291cmNlU3BhbjpvLmNyZWF0ZVBhcnNlU291cmNlU3BhbigiQ29tcG9uZW50Iix0Lm5hbWUscyksdGVtcGxhdGU6ZS50ZW1wbGF0ZXx8IiIscHJlc2VydmVXaGl0ZXNwYWNlczphLHN0eWxlczplLnN0eWxlc3x8Tm8sYW5pbWF0aW9uczplLmFuaW1hdGlvbnMsZGlyZWN0aXZlczpbXSxjaGFuZ2VEZXRlY3Rpb246ZS5jaGFuZ2VEZXRlY3Rpb24scGlwZXM6bmV3IE1hcCxlbmNhcHN1bGF0aW9uOnIsaW50ZXJwb2xhdGlvbjplLmludGVycG9sYXRpb24sdmlld1Byb3ZpZGVyczplLnZpZXdQcm92aWRlcnN8fG51bGx9KTtReSsrO3RyeXtsLnVzZXNJbmhlcml0YW5jZSYmaV8odCksbj1vLmNvbXBpbGVDb21wb25lbnQoUWIscyxsKX1maW5hbGx5e1F5LS19aWYoMD09PVF5JiYoZnVuY3Rpb24gaSgpe2lmKCFMeSl7THk9ITA7dHJ5e2ZvcihsZXQgdD1GeS5sZW5ndGgtMTt0Pj0wO3QtLSl7Y29uc3R7bW9kdWxlVHlwZTplLG5nTW9kdWxlOm59PUZ5W3RdO24uZGVjbGFyYXRpb25zJiZuLmRlY2xhcmF0aW9ucy5ldmVyeShCeSkmJihGeS5zcGxpY2UodCwxKSxxeShlLG4pKX19ZmluYWxseXtMeT0hMX19fSkoKSwoZnVuY3Rpb24gYSh0KXtyZXR1cm4gdm9pZCAwIT09dC5uZ1NlbGVjdG9yU2NvcGV9KSh0KSl7Y29uc3QgZT1YeSh0Lm5nU2VsZWN0b3JTY29wZSk7WnkobixlKX19cmV0dXJuIG59LGNvbmZpZ3VyYWJsZTohIW5nRGV2TW9kZX0pfSxPXz0keSxQXz1mdW5jdGlvbiB3Xyh0LGUpe2xldCBuPW51bGwsbz1udWxsO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LEJvLHtnZXQ6KCk9PntpZihudWxsPT09byl7Y29uc3Qgbj1mXyh0LGUpLGk9anIoKTtvPWkuY29tcGlsZUZhY3RvcnkoUWIsYG5nOi8vLyR7bi5uYW1lfS/JtWZhYy5qc2AsT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LG4pLHtpbmplY3RGbjoiZGlyZWN0aXZlSW5qZWN0Iix0YXJnZXQ6aS5SM0ZhY3RvcnlUYXJnZXQuUGlwZX0pKX1yZXR1cm4gb30sY29uZmlndXJhYmxlOiEhbmdEZXZNb2RlfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsSG8se2dldDooKT0+e2lmKG51bGw9PT1uKXtjb25zdCBvPWZfKHQsZSk7bj1qcigpLmNvbXBpbGVQaXBlKFFiLGBuZzovLy8ke28ubmFtZX0vybVwaXBlLmpzYCxvKX1yZXR1cm4gbn0sY29uZmlndXJhYmxlOiEhbmdEZXZNb2RlfSl9LGtfPVNyKCJOZ01vZHVsZSIsKHQ9PnQpLHZvaWQgMCx2b2lkIDAsKCh0LGUpPT5TXyh0LGUpKSksU189ZnVuY3Rpb24gRF8odCxlPXt9KXshKGZ1bmN0aW9uIG4odCxlLG89ITEpe25nRGV2TW9kZSYmb28odCwiUmVxdWlyZWQgdmFsdWUgbW9kdWxlVHlwZSIpLG5nRGV2TW9kZSYmb28oZSwiUmVxdWlyZWQgdmFsdWUgbmdNb2R1bGUiKTtjb25zdCBpPUdyKGUuZGVjbGFyYXRpb25zfHxIeSk7bGV0IGE9bnVsbDtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxGbyx7Y29uZmlndXJhYmxlOiEwLGdldDooKT0+e2lmKG51bGw9PT1hKXtpZihuZ0Rldk1vZGUmJmUuaW1wb3J0cyYmZS5pbXBvcnRzLmluZGV4T2YodCk+LTEpdGhyb3cgbmV3IEVycm9yKGAnJHtqbih0KX0nIG1vZHVsZSBjYW4ndCBpbXBvcnQgaXRzZWxmYCk7YT1qcigpLmNvbXBpbGVOZ01vZHVsZShRYixgbmc6Ly8vJHt0Lm5hbWV9L8m1bW9kLmpzYCx7dHlwZTp0LGJvb3RzdHJhcDpHcihlLmJvb3RzdHJhcHx8SHkpLm1hcCh6biksZGVjbGFyYXRpb25zOmkubWFwKHpuKSxpbXBvcnRzOkdyKGUuaW1wb3J0c3x8SHkpLm1hcCh6bikubWFwKEt5KSxleHBvcnRzOkdyKGUuZXhwb3J0c3x8SHkpLm1hcCh6bikubWFwKEt5KSxzY2hlbWFzOmUuc2NoZW1hcz9HcihlLnNjaGVtYXMpOm51bGwsaWQ6ZS5pZHx8bnVsbH0pLGEuc2NoZW1hc3x8KGEuc2NoZW1hcz1bXSl9cmV0dXJuIGF9fSk7bGV0IHI9bnVsbDtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxCbyx7Z2V0OigpPT57aWYobnVsbD09PXIpe2NvbnN0IGU9anIoKTtyPWUuY29tcGlsZUZhY3RvcnkoUWIsYG5nOi8vLyR7dC5uYW1lfS/JtWZhYy5qc2Ase25hbWU6dC5uYW1lLHR5cGU6dCxkZXBzOlBzKHQpLGluamVjdEZuOiJpbmplY3QiLHRhcmdldDplLlIzRmFjdG9yeVRhcmdldC5OZ01vZHVsZSx0eXBlQXJndW1lbnRDb3VudDowfSl9cmV0dXJuIHJ9LGNvbmZpZ3VyYWJsZTohIW5nRGV2TW9kZX0pO2xldCBzPW51bGw7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZ28se2dldDooKT0+e2lmKG51bGw9PT1zKXtuZ0Rldk1vZGUmJlZ5KHQsbyk7Y29uc3Qgbj17bmFtZTp0Lm5hbWUsdHlwZTp0LHByb3ZpZGVyczplLnByb3ZpZGVyc3x8SHksaW1wb3J0czpbKGUuaW1wb3J0c3x8SHkpLm1hcCh6biksKGUuZXhwb3J0c3x8SHkpLm1hcCh6bildfTtzPWpyKCkuY29tcGlsZUluamVjdG9yKFFiLGBuZzovLy8ke3QubmFtZX0vybVpbmouanNgLG4pfXJldHVybiBzfSxjb25maWd1cmFibGU6ISFuZ0Rldk1vZGV9KX0pKHQsZSksKGZ1bmN0aW9uIG8odCxlKXtGeS5wdXNoKHttb2R1bGVUeXBlOnQsbmdNb2R1bGU6ZX0pfSkodCxlKX0sRV89bmV3IE5yKCJBcHBsaWNhdGlvbiBJbml0aWFsaXplciIpO2NsYXNzIEFfe2NvbnN0cnVjdG9yKHQpe3RoaXMuYXBwSW5pdHM9dCx0aGlzLnJlc29sdmU9c2gsdGhpcy5yZWplY3Q9c2gsdGhpcy5pbml0aWFsaXplZD0hMSx0aGlzLmRvbmU9ITEsdGhpcy5kb25lUHJvbWlzZT1uZXcgUHJvbWlzZSgoKHQsZSk9Pnt0aGlzLnJlc29sdmU9dCx0aGlzLnJlamVjdD1lfSkpfXJ1bkluaXRpYWxpemVycygpe2lmKHRoaXMuaW5pdGlhbGl6ZWQpcmV0dXJuO2NvbnN0IHQ9W10sZT0oKT0+e3RoaXMuZG9uZT0hMCx0aGlzLnJlc29sdmUoKX07aWYodGhpcy5hcHBJbml0cylmb3IobGV0IGU9MDtlPHRoaXMuYXBwSW5pdHMubGVuZ3RoO2UrKyl7Y29uc3Qgbj10aGlzLmFwcEluaXRzW2VdKCk7QXUobikmJnQucHVzaChuKX1Qcm9taXNlLmFsbCh0KS50aGVuKCgoKT0+e2UoKX0pKS5jYXRjaCgodD0+e3RoaXMucmVqZWN0KHQpfSkpLDA9PT10Lmxlbmd0aCYmZSgpLHRoaXMuaW5pdGlhbGl6ZWQ9ITB9fUFfLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxBXykodXMoRV8sOCkpfSxBXy7JtXByb3Y9bG8oe3Rva2VuOkFfLGZhY3Rvcnk6QV8uybVmYWN9KSxBXy5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOkFycmF5LGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W0VfXX0se3R5cGU6X3N9XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoQV8sW3t0eXBlOkptfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkFycmF5LGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W0VfXX0se3R5cGU6X3N9XX1dfSksbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCBSXz1uZXcgTnIoIkFwcElkIiksVF89e3Byb3ZpZGU6Ul8sdXNlRmFjdG9yeTpmdW5jdGlvbiBOXygpe3JldHVybmAke0lfKCl9JHtJXygpfSR7SV8oKX1gfSxkZXBzOltdfTtmdW5jdGlvbiBJXygpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKDk3K01hdGguZmxvb3IoMjUqTWF0aC5yYW5kb20oKSkpfWNvbnN0IHpfPW5ldyBOcigiUGxhdGZvcm0gSW5pdGlhbGl6ZXIiKSxIXz1uZXcgTnIoIlBsYXRmb3JtIElEIiksRl89bmV3IE5yKCJhcHBCb290c3RyYXBMaXN0ZW5lciIpO25ldyBOcigiQXBwbGljYXRpb24gUGFja2FnZXMgUm9vdCBVUkwiKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIExfe2xvZyh0KXtjb25zb2xlLmxvZyh0KX13YXJuKHQpe2NvbnNvbGUud2Fybih0KX19TF8uybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fExfKX0sTF8uybVwcm92PWxvKHt0b2tlbjpMXyxmYWN0b3J5OkxfLsm1ZmFjfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihMXyxbe3R5cGU6Sm19XSxudWxsLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3QgQl89bmV3IE5yKCJMb2NhbGVJZCIpLFZfPW5ldyBOcigiRGVmYXVsdEN1cnJlbmN5Q29kZSIpO3ZhciBqXztuZXcgTnIoIlRyYW5zbGF0aW9ucyIpLG5ldyBOcigiVHJhbnNsYXRpb25zRm9ybWF0IiksKGZ1bmN0aW9uKHQpe3RbdC5FcnJvcj0wXT0iRXJyb3IiLHRbdC5XYXJuaW5nPTFdPSJXYXJuaW5nIix0W3QuSWdub3JlPTJdPSJJZ25vcmUifSkoal98fChqXz17fSkpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3MgVV97Y29uc3RydWN0b3IodCxlKXt0aGlzLm5nTW9kdWxlRmFjdG9yeT10LHRoaXMuY29tcG9uZW50RmFjdG9yaWVzPWV9fWNvbnN0IFdfPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgdWIodCl9LEdfPVdfLFlfPWZ1bmN0aW9uKHQpe3JldHVybiBQcm9taXNlLnJlc29sdmUoV18odCkpfSxxXz1mdW5jdGlvbih0KXtjb25zdCBlPVdfKHQpLG49SmwobmkodCkuZGVjbGFyYXRpb25zKS5yZWR1Y2UoKCh0LGUpPT57Y29uc3Qgbj0kbyhlKTtyZXR1cm4gbiYmdC5wdXNoKG5ldyBsYihuKSksdH0pLFtdKTtyZXR1cm4gbmV3IFVfKGUsbil9LFpfPXFfLFhfPWZ1bmN0aW9uKHQpe3JldHVybiBQcm9taXNlLnJlc29sdmUocV8odCkpfTtjbGFzcyBLX3tjb25zdHJ1Y3Rvcigpe3RoaXMuY29tcGlsZU1vZHVsZVN5bmM9R18sdGhpcy5jb21waWxlTW9kdWxlQXN5bmM9WV8sdGhpcy5jb21waWxlTW9kdWxlQW5kQWxsQ29tcG9uZW50c1N5bmM9Wl8sdGhpcy5jb21waWxlTW9kdWxlQW5kQWxsQ29tcG9uZW50c0FzeW5jPVhffWNsZWFyQ2FjaGUoKXt9Y2xlYXJDYWNoZUZvcih0KXt9Z2V0TW9kdWxlSWQodCl7fX1LXy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8S18pfSxLXy7JtXByb3Y9bG8oe3Rva2VuOktfLGZhY3Rvcnk6S18uybVmYWN9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEtfLFt7dHlwZTpKbX1dLChmdW5jdGlvbigpe3JldHVybltdfSksbnVsbCk7Y29uc3QgSl89bmV3IE5yKCJjb21waWxlck9wdGlvbnMiKSxRXz1Qcm9taXNlLnJlc29sdmUoMCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uICRfKHQpeyJ1bmRlZmluZWQiPT10eXBlb2YgWm9uZT9RXy50aGVuKCgoKT0+e3QmJnQuYXBwbHkobnVsbCxudWxsKX0pKTpab25lLmN1cnJlbnQuc2NoZWR1bGVNaWNyb1Rhc2soInNjaGVkdWxlTWljcm90YXNrIix0KX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCi8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyB0Q3tjb25zdHJ1Y3Rvcih7ZW5hYmxlTG9uZ1N0YWNrVHJhY2U6dD0hMSxzaG91bGRDb2FsZXNjZUV2ZW50Q2hhbmdlRGV0ZWN0aW9uOmU9ITEsc2hvdWxkQ29hbGVzY2VSdW5DaGFuZ2VEZXRlY3Rpb246bj0hMX0pe2lmKHRoaXMuaGFzUGVuZGluZ01hY3JvdGFza3M9ITEsdGhpcy5oYXNQZW5kaW5nTWljcm90YXNrcz0hMSx0aGlzLmlzU3RhYmxlPSEwLHRoaXMub25VbnN0YWJsZT1uZXcgQWIoITEpLHRoaXMub25NaWNyb3Rhc2tFbXB0eT1uZXcgQWIoITEpLHRoaXMub25TdGFibGU9bmV3IEFiKCExKSx0aGlzLm9uRXJyb3I9bmV3IEFiKCExKSwidW5kZWZpbmVkIj09dHlwZW9mIFpvbmUpdGhyb3cgbmV3IEVycm9yKCJJbiB0aGlzIGNvbmZpZ3VyYXRpb24gQW5ndWxhciByZXF1aXJlcyBab25lLmpzIik7Wm9uZS5hc3NlcnRab25lUGF0Y2hlZCgpO2NvbnN0IG89dGhpcztvLl9uZXN0aW5nPTAsby5fb3V0ZXI9by5faW5uZXI9Wm9uZS5jdXJyZW50LFpvbmUuVGFza1RyYWNraW5nWm9uZVNwZWMmJihvLl9pbm5lcj1vLl9pbm5lci5mb3JrKG5ldyBab25lLlRhc2tUcmFja2luZ1pvbmVTcGVjKSksdCYmWm9uZS5sb25nU3RhY2tUcmFjZVpvbmVTcGVjJiYoby5faW5uZXI9by5faW5uZXIuZm9yayhab25lLmxvbmdTdGFja1RyYWNlWm9uZVNwZWMpKSxvLnNob3VsZENvYWxlc2NlRXZlbnRDaGFuZ2VEZXRlY3Rpb249IW4mJmUsby5zaG91bGRDb2FsZXNjZVJ1bkNoYW5nZURldGVjdGlvbj1uLG8ubGFzdFJlcXVlc3RBbmltYXRpb25GcmFtZUlkPS0xLG8ubmF0aXZlUmVxdWVzdEFuaW1hdGlvbkZyYW1lPShmdW5jdGlvbiBpKCl7bGV0IHQ9RW8ucmVxdWVzdEFuaW1hdGlvbkZyYW1lLGU9RW8uY2FuY2VsQW5pbWF0aW9uRnJhbWU7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBab25lJiZ0JiZlKXtjb25zdCBuPXRbWm9uZS5fX3N5bWJvbF9fKCJPcmlnaW5hbERlbGVnYXRlIildO24mJih0PW4pO2NvbnN0IG89ZVtab25lLl9fc3ltYm9sX18oIk9yaWdpbmFsRGVsZWdhdGUiKV07byYmKGU9byl9cmV0dXJue25hdGl2ZVJlcXVlc3RBbmltYXRpb25GcmFtZTp0LG5hdGl2ZUNhbmNlbEFuaW1hdGlvbkZyYW1lOmV9fSkoKS5uYXRpdmVSZXF1ZXN0QW5pbWF0aW9uRnJhbWUsKGZ1bmN0aW9uIGEodCl7Y29uc3QgZT0oKT0+eyEoZnVuY3Rpb24gZSh0KXstMT09PXQubGFzdFJlcXVlc3RBbmltYXRpb25GcmFtZUlkJiYodC5sYXN0UmVxdWVzdEFuaW1hdGlvbkZyYW1lSWQ9dC5uYXRpdmVSZXF1ZXN0QW5pbWF0aW9uRnJhbWUuY2FsbChFbywoKCk9Pnt0LmZha2VUb3BFdmVudFRhc2t8fCh0LmZha2VUb3BFdmVudFRhc2s9Wm9uZS5yb290LnNjaGVkdWxlRXZlbnRUYXNrKCJmYWtlVG9wRXZlbnRUYXNrIiwoKCk9Pnt0Lmxhc3RSZXF1ZXN0QW5pbWF0aW9uRnJhbWVJZD0tMSxvQyh0KSxuQyh0KX0pLHZvaWQgMCwoKCk9Pnt9KSwoKCk9Pnt9KSkpLHQuZmFrZVRvcEV2ZW50VGFzay5pbnZva2UoKX0pKSxvQyh0KSl9KSh0KX07dC5faW5uZXI9dC5faW5uZXIuZm9yayh7bmFtZToiYW5ndWxhciIscHJvcGVydGllczp7aXNBbmd1bGFyWm9uZTohMH0sb25JbnZva2VUYXNrOihuLG8saSxhLHIscyk9Pnt0cnl7cmV0dXJuIGlDKHQpLG4uaW52b2tlVGFzayhpLGEscixzKX1maW5hbGx5eyh0LnNob3VsZENvYWxlc2NlRXZlbnRDaGFuZ2VEZXRlY3Rpb24mJiJldmVudFRhc2siPT09YS50eXBlfHx0LnNob3VsZENvYWxlc2NlUnVuQ2hhbmdlRGV0ZWN0aW9uKSYmZSgpLGFDKHQpfX0sb25JbnZva2U6KG4sbyxpLGEscixzLGwpPT57dHJ5e3JldHVybiBpQyh0KSxuLmludm9rZShpLGEscixzLGwpfWZpbmFsbHl7dC5zaG91bGRDb2FsZXNjZVJ1bkNoYW5nZURldGVjdGlvbiYmZSgpLGFDKHQpfX0sb25IYXNUYXNrOihlLG4sbyxpKT0+e2UuaGFzVGFzayhvLGkpLG49PT1vJiYoIm1pY3JvVGFzayI9PWkuY2hhbmdlPyh0Ll9oYXNQZW5kaW5nTWljcm90YXNrcz1pLm1pY3JvVGFzayxvQyh0KSxuQyh0KSk6Im1hY3JvVGFzayI9PWkuY2hhbmdlJiYodC5oYXNQZW5kaW5nTWFjcm90YXNrcz1pLm1hY3JvVGFzaykpfSxvbkhhbmRsZUVycm9yOihlLG4sbyxpKT0+KGUuaGFuZGxlRXJyb3IobyxpKSx0LnJ1bk91dHNpZGVBbmd1bGFyKCgoKT0+dC5vbkVycm9yLmVtaXQoaSkpKSwhMSl9KX0pKG8pfXN0YXRpYyBpc0luQW5ndWxhclpvbmUoKXtyZXR1cm4hMD09PVpvbmUuY3VycmVudC5nZXQoImlzQW5ndWxhclpvbmUiKX1zdGF0aWMgYXNzZXJ0SW5Bbmd1bGFyWm9uZSgpe2lmKCF0Qy5pc0luQW5ndWxhclpvbmUoKSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIHRvIGJlIGluIEFuZ3VsYXIgWm9uZSwgYnV0IGl0IGlzIG5vdCEiKX1zdGF0aWMgYXNzZXJ0Tm90SW5Bbmd1bGFyWm9uZSgpe2lmKHRDLmlzSW5Bbmd1bGFyWm9uZSgpKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgdG8gbm90IGJlIGluIEFuZ3VsYXIgWm9uZSwgYnV0IGl0IGlzISIpfXJ1bih0LGUsbil7cmV0dXJuIHRoaXMuX2lubmVyLnJ1bih0LGUsbil9cnVuVGFzayh0LGUsbixvKXtjb25zdCBpPXRoaXMuX2lubmVyLGE9aS5zY2hlZHVsZUV2ZW50VGFzaygiTmdab25lRXZlbnQ6ICIrbyx0LGVDLHNoLHNoKTt0cnl7cmV0dXJuIGkucnVuVGFzayhhLGUsbil9ZmluYWxseXtpLmNhbmNlbFRhc2soYSl9fXJ1bkd1YXJkZWQodCxlLG4pe3JldHVybiB0aGlzLl9pbm5lci5ydW5HdWFyZGVkKHQsZSxuKX1ydW5PdXRzaWRlQW5ndWxhcih0KXtyZXR1cm4gdGhpcy5fb3V0ZXIucnVuKHQpfX1jb25zdCBlQz17fTtmdW5jdGlvbiBuQyh0KXtpZigwPT10Ll9uZXN0aW5nJiYhdC5oYXNQZW5kaW5nTWljcm90YXNrcyYmIXQuaXNTdGFibGUpdHJ5e3QuX25lc3RpbmcrKyx0Lm9uTWljcm90YXNrRW1wdHkuZW1pdChudWxsKX1maW5hbGx5e2lmKHQuX25lc3RpbmctLSwhdC5oYXNQZW5kaW5nTWljcm90YXNrcyl0cnl7dC5ydW5PdXRzaWRlQW5ndWxhcigoKCk9PnQub25TdGFibGUuZW1pdChudWxsKSkpfWZpbmFsbHl7dC5pc1N0YWJsZT0hMH19fWZ1bmN0aW9uIG9DKHQpe3QuaGFzUGVuZGluZ01pY3JvdGFza3M9ISEodC5faGFzUGVuZGluZ01pY3JvdGFza3N8fCh0LnNob3VsZENvYWxlc2NlRXZlbnRDaGFuZ2VEZXRlY3Rpb258fHQuc2hvdWxkQ29hbGVzY2VSdW5DaGFuZ2VEZXRlY3Rpb24pJiYtMSE9PXQubGFzdFJlcXVlc3RBbmltYXRpb25GcmFtZUlkKX1mdW5jdGlvbiBpQyh0KXt0Ll9uZXN0aW5nKyssdC5pc1N0YWJsZSYmKHQuaXNTdGFibGU9ITEsdC5vblVuc3RhYmxlLmVtaXQobnVsbCkpfWZ1bmN0aW9uIGFDKHQpe3QuX25lc3RpbmctLSxuQyh0KX1jbGFzcyByQ3tjb25zdHJ1Y3Rvcigpe3RoaXMuaGFzUGVuZGluZ01pY3JvdGFza3M9ITEsdGhpcy5oYXNQZW5kaW5nTWFjcm90YXNrcz0hMSx0aGlzLmlzU3RhYmxlPSEwLHRoaXMub25VbnN0YWJsZT1uZXcgQWIsdGhpcy5vbk1pY3JvdGFza0VtcHR5PW5ldyBBYix0aGlzLm9uU3RhYmxlPW5ldyBBYix0aGlzLm9uRXJyb3I9bmV3IEFifXJ1bih0LGUsbil7cmV0dXJuIHQuYXBwbHkoZSxuKX1ydW5HdWFyZGVkKHQsZSxuKXtyZXR1cm4gdC5hcHBseShlLG4pfXJ1bk91dHNpZGVBbmd1bGFyKHQpe3JldHVybiB0KCl9cnVuVGFzayh0LGUsbixvKXtyZXR1cm4gdC5hcHBseShlLG4pfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY2xhc3Mgc0N7Y29uc3RydWN0b3IodCl7dGhpcy5fbmdab25lPXQsdGhpcy5fcGVuZGluZ0NvdW50PTAsdGhpcy5faXNab25lU3RhYmxlPSEwLHRoaXMuX2RpZFdvcms9ITEsdGhpcy5fY2FsbGJhY2tzPVtdLHRoaXMudGFza1RyYWNraW5nWm9uZT1udWxsLHRoaXMuX3dhdGNoQW5ndWxhckV2ZW50cygpLHQucnVuKCgoKT0+e3RoaXMudGFza1RyYWNraW5nWm9uZT0idW5kZWZpbmVkIj09dHlwZW9mIFpvbmU/bnVsbDpab25lLmN1cnJlbnQuZ2V0KCJUYXNrVHJhY2tpbmdab25lIil9KSl9X3dhdGNoQW5ndWxhckV2ZW50cygpe3RoaXMuX25nWm9uZS5vblVuc3RhYmxlLnN1YnNjcmliZSh7bmV4dDooKT0+e3RoaXMuX2RpZFdvcms9ITAsdGhpcy5faXNab25lU3RhYmxlPSExfX0pLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKCk9Pnt0aGlzLl9uZ1pvbmUub25TdGFibGUuc3Vic2NyaWJlKHtuZXh0OigpPT57dEMuYXNzZXJ0Tm90SW5Bbmd1bGFyWm9uZSgpLCRfKCgoKT0+e3RoaXMuX2lzWm9uZVN0YWJsZT0hMCx0aGlzLl9ydW5DYWxsYmFja3NJZlJlYWR5KCl9KSl9fSl9KSl9aW5jcmVhc2VQZW5kaW5nUmVxdWVzdENvdW50KCl7cmV0dXJuIHRoaXMuX3BlbmRpbmdDb3VudCs9MSx0aGlzLl9kaWRXb3JrPSEwLHRoaXMuX3BlbmRpbmdDb3VudH1kZWNyZWFzZVBlbmRpbmdSZXF1ZXN0Q291bnQoKXtpZih0aGlzLl9wZW5kaW5nQ291bnQtPTEsdGhpcy5fcGVuZGluZ0NvdW50PDApdGhyb3cgbmV3IEVycm9yKCJwZW5kaW5nIGFzeW5jIHJlcXVlc3RzIGJlbG93IHplcm8iKTtyZXR1cm4gdGhpcy5fcnVuQ2FsbGJhY2tzSWZSZWFkeSgpLHRoaXMuX3BlbmRpbmdDb3VudH1pc1N0YWJsZSgpe3JldHVybiB0aGlzLl9pc1pvbmVTdGFibGUmJjA9PT10aGlzLl9wZW5kaW5nQ291bnQmJiF0aGlzLl9uZ1pvbmUuaGFzUGVuZGluZ01hY3JvdGFza3N9X3J1bkNhbGxiYWNrc0lmUmVhZHkoKXtpZih0aGlzLmlzU3RhYmxlKCkpJF8oKCgpPT57Zm9yKDswIT09dGhpcy5fY2FsbGJhY2tzLmxlbmd0aDspe2xldCB0PXRoaXMuX2NhbGxiYWNrcy5wb3AoKTtjbGVhclRpbWVvdXQodC50aW1lb3V0SWQpLHQuZG9uZUNiKHRoaXMuX2RpZFdvcmspfXRoaXMuX2RpZFdvcms9ITF9KSk7ZWxzZXtsZXQgdD10aGlzLmdldFBlbmRpbmdUYXNrcygpO3RoaXMuX2NhbGxiYWNrcz10aGlzLl9jYWxsYmFja3MuZmlsdGVyKChlPT4hZS51cGRhdGVDYnx8IWUudXBkYXRlQ2IodCl8fChjbGVhclRpbWVvdXQoZS50aW1lb3V0SWQpLCExKSkpLHRoaXMuX2RpZFdvcms9ITB9fWdldFBlbmRpbmdUYXNrcygpe3JldHVybiB0aGlzLnRhc2tUcmFja2luZ1pvbmU/dGhpcy50YXNrVHJhY2tpbmdab25lLm1hY3JvVGFza3MubWFwKCh0PT4oe3NvdXJjZTp0LnNvdXJjZSxjcmVhdGlvbkxvY2F0aW9uOnQuY3JlYXRpb25Mb2NhdGlvbixkYXRhOnQuZGF0YX0pKSk6W119YWRkQ2FsbGJhY2sodCxlLG4pe2xldCBvPS0xO2UmJmU+MCYmKG89c2V0VGltZW91dCgoKCk9Pnt0aGlzLl9jYWxsYmFja3M9dGhpcy5fY2FsbGJhY2tzLmZpbHRlcigodD0+dC50aW1lb3V0SWQhPT1vKSksdCh0aGlzLl9kaWRXb3JrLHRoaXMuZ2V0UGVuZGluZ1Rhc2tzKCkpfSksZSkpLHRoaXMuX2NhbGxiYWNrcy5wdXNoKHtkb25lQ2I6dCx0aW1lb3V0SWQ6byx1cGRhdGVDYjpufSl9d2hlblN0YWJsZSh0LGUsbil7aWYobiYmIXRoaXMudGFza1RyYWNraW5nWm9uZSl0aHJvdyBuZXcgRXJyb3IoJ1Rhc2sgdHJhY2tpbmcgem9uZSBpcyByZXF1aXJlZCB3aGVuIHBhc3NpbmcgYW4gdXBkYXRlIGNhbGxiYWNrIHRvIHdoZW5TdGFibGUoKS4gSXMgInpvbmUuanMvZGlzdC90YXNrLXRyYWNraW5nLmpzIiBsb2FkZWQ/Jyk7dGhpcy5hZGRDYWxsYmFjayh0LGUsbiksdGhpcy5fcnVuQ2FsbGJhY2tzSWZSZWFkeSgpfWdldFBlbmRpbmdSZXF1ZXN0Q291bnQoKXtyZXR1cm4gdGhpcy5fcGVuZGluZ0NvdW50fWZpbmRQcm92aWRlcnModCxlLG4pe3JldHVybltdfX1zQy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8c0MpKHVzKHRDKSl9LHNDLsm1cHJvdj1sbyh7dG9rZW46c0MsZmFjdG9yeTpzQy7JtWZhY30pLHNDLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6dEN9XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHNDLFt7dHlwZTpKbX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTp0Q31dfSksbnVsbCk7Y2xhc3MgbEN7Y29uc3RydWN0b3IoKXt0aGlzLl9hcHBsaWNhdGlvbnM9bmV3IE1hcCxkQy5hZGRUb1dpbmRvdyh0aGlzKX1yZWdpc3RlckFwcGxpY2F0aW9uKHQsZSl7dGhpcy5fYXBwbGljYXRpb25zLnNldCh0LGUpfXVucmVnaXN0ZXJBcHBsaWNhdGlvbih0KXt0aGlzLl9hcHBsaWNhdGlvbnMuZGVsZXRlKHQpfXVucmVnaXN0ZXJBbGxBcHBsaWNhdGlvbnMoKXt0aGlzLl9hcHBsaWNhdGlvbnMuY2xlYXIoKX1nZXRUZXN0YWJpbGl0eSh0KXtyZXR1cm4gdGhpcy5fYXBwbGljYXRpb25zLmdldCh0KXx8bnVsbH1nZXRBbGxUZXN0YWJpbGl0aWVzKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5fYXBwbGljYXRpb25zLnZhbHVlcygpKX1nZXRBbGxSb290RWxlbWVudHMoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9hcHBsaWNhdGlvbnMua2V5cygpKX1maW5kVGVzdGFiaWxpdHlJblRyZWUodCxlPSEwKXtyZXR1cm4gZEMuZmluZFRlc3RhYmlsaXR5SW5UcmVlKHRoaXMsdCxlKX19bEMuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGxDKX0sbEMuybVwcm92PWxvKHt0b2tlbjpsQyxmYWN0b3J5OmxDLsm1ZmFjfSksbEMuY3RvclBhcmFtZXRlcnM9KCk9PltdLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIobEMsW3t0eXBlOkptfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW119KSxudWxsKTtsZXQgY0MsZEM9bmV3IGNsYXNze2FkZFRvV2luZG93KHQpe31maW5kVGVzdGFiaWxpdHlJblRyZWUodCxlLG4pe3JldHVybiBudWxsfX0scEM9ITAsbUM9ITE7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIHVDKCl7cmV0dXJuIG1DPSEwLHBDfWNvbnN0IGZDPW5ldyBOcigiQWxsb3dNdWx0aXBsZVRva2VuIik7ZnVuY3Rpb24gZ0ModCxlLG49W10pe2NvbnN0IG89YFBsYXRmb3JtOiAke2V9YCxpPW5ldyBOcihvKTtyZXR1cm4oZT1bXSk9PntsZXQgYT1oQygpO2lmKCFhfHxhLmluamVjdG9yLmdldChmQywhMSkpaWYodCl0KG4uY29uY2F0KGUpLmNvbmNhdCh7cHJvdmlkZTppLHVzZVZhbHVlOiEwfSkpO2Vsc2V7Y29uc3QgdD1uLmNvbmNhdChlKS5jb25jYXQoe3Byb3ZpZGU6aSx1c2VWYWx1ZTohMH0se3Byb3ZpZGU6SHAsdXNlVmFsdWU6InBsYXRmb3JtIn0pOyEoZnVuY3Rpb24gcih0KXtpZihjQyYmIWNDLmRlc3Ryb3llZCYmIWNDLmluamVjdG9yLmdldChmQywhMSkpdGhyb3cgbmV3IEVycm9yKCJUaGVyZSBjYW4gYmUgb25seSBvbmUgcGxhdGZvcm0uIERlc3Ryb3kgdGhlIHByZXZpb3VzIG9uZSB0byBjcmVhdGUgYSBuZXcgb25lLiIpOyhmdW5jdGlvbiBlKCl7bmdEZXZNb2RlJiYoZnVuY3Rpb24gdCgpe3BtfHwocG09ITAsbW0oIsm1c2V0UHJvZmlsZXIiLE5pKSxtbSgiZ2V0Q29tcG9uZW50IiwkcCksbW0oImdldENvbnRleHQiLHRtKSxtbSgiZ2V0TGlzdGVuZXJzIixzbSksbW0oImdldE93bmluZ0NvbXBvbmVudCIsZW0pLG1tKCJnZXRIb3N0RWxlbWVudCIscm0pLG1tKCJnZXRJbmplY3RvciIsb20pLG1tKCJnZXRSb290Q29tcG9uZW50cyIsbm0pLG1tKCJnZXREaXJlY3RpdmVzIixpbSksbW0oImFwcGx5Q2hhbmdlcyIsZG0pKX0pKCl9KSgpLGNDPXQuZ2V0KGJDKTtjb25zdCBuPXQuZ2V0KHpfLG51bGwpO24mJm4uZm9yRWFjaCgodD0+dCgpKSl9KShRcC5jcmVhdGUoe3Byb3ZpZGVyczp0LG5hbWU6b30pKX1yZXR1cm4oZnVuY3Rpb24gcyh0KXtjb25zdCBlPWhDKCk7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCJObyBwbGF0Zm9ybSBleGlzdHMhIik7aWYoIWUuaW5qZWN0b3IuZ2V0KHQsbnVsbCkpdGhyb3cgbmV3IEVycm9yKCJBIHBsYXRmb3JtIHdpdGggYSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbiBoYXMgYmVlbiBjcmVhdGVkLiBQbGVhc2UgZGVzdHJveSBpdCBmaXJzdC4iKTtyZXR1cm4gZX0pKGkpfX1mdW5jdGlvbiBoQygpe3JldHVybiBjQyYmIWNDLmRlc3Ryb3llZD9jQzpudWxsfWNsYXNzIGJDe2NvbnN0cnVjdG9yKHQpe3RoaXMuX2luamVjdG9yPXQsdGhpcy5fbW9kdWxlcz1bXSx0aGlzLl9kZXN0cm95TGlzdGVuZXJzPVtdLHRoaXMuX2Rlc3Ryb3llZD0hMX1ib290c3RyYXBNb2R1bGVGYWN0b3J5KHQsZSl7Y29uc3Qgbj0oZnVuY3Rpb24gbyh0LGUpe2xldCBuO3JldHVybiBuPSJub29wIj09PXQ/bmV3IHJDOigiem9uZS5qcyI9PT10P3ZvaWQgMDp0KXx8bmV3IHRDKHtlbmFibGVMb25nU3RhY2tUcmFjZTp1QygpLHNob3VsZENvYWxlc2NlRXZlbnRDaGFuZ2VEZXRlY3Rpb246ISEobnVsbD09ZT92b2lkIDA6ZS5uZ1pvbmVFdmVudENvYWxlc2NpbmcpLHNob3VsZENvYWxlc2NlUnVuQ2hhbmdlRGV0ZWN0aW9uOiEhKG51bGw9PWU/dm9pZCAwOmUubmdab25lUnVuQ29hbGVzY2luZyl9KSxufSkoZT9lLm5nWm9uZTp2b2lkIDAse25nWm9uZUV2ZW50Q29hbGVzY2luZzplJiZlLm5nWm9uZUV2ZW50Q29hbGVzY2luZ3x8ITEsbmdab25lUnVuQ29hbGVzY2luZzplJiZlLm5nWm9uZVJ1bkNvYWxlc2Npbmd8fCExfSksaT1be3Byb3ZpZGU6dEMsdXNlVmFsdWU6bn1dO3JldHVybiBuLnJ1bigoKCk9Pntjb25zdCBlPVFwLmNyZWF0ZSh7cHJvdmlkZXJzOmkscGFyZW50OnRoaXMuaW5qZWN0b3IsbmFtZTp0Lm1vZHVsZVR5cGUubmFtZX0pLG89dC5jcmVhdGUoZSksYT1vLmluamVjdG9yLmdldChFbCxudWxsKTtpZighYSl0aHJvdyBuZXcgRXJyb3IoIk5vIEVycm9ySGFuZGxlci4gSXMgcGxhdGZvcm0gbW9kdWxlIChCcm93c2VyTW9kdWxlKSBpbmNsdWRlZD8iKTtyZXR1cm4gbi5ydW5PdXRzaWRlQW5ndWxhcigoKCk9Pntjb25zdCB0PW4ub25FcnJvci5zdWJzY3JpYmUoe25leHQ6dD0+e2EuaGFuZGxlRXJyb3IodCl9fSk7by5vbkRlc3Ryb3koKCgpPT57Q0ModGhpcy5fbW9kdWxlcyxvKSx0LnVuc3Vic2NyaWJlKCl9KSl9KSksKGZ1bmN0aW9uIHIodCxlLG4pe3RyeXtjb25zdCBvPW4oKTtyZXR1cm4gQXUobyk/by5jYXRjaCgobj0+e3Rocm93IGUucnVuT3V0c2lkZUFuZ3VsYXIoKCgpPT50LmhhbmRsZUVycm9yKG4pKSksbn0pKTpvfWNhdGNoKG4pe3Rocm93IGUucnVuT3V0c2lkZUFuZ3VsYXIoKCgpPT50LmhhbmRsZUVycm9yKG4pKSksbn19KShhLG4sKCgpPT57Y29uc3QgdD1vLmluamVjdG9yLmdldChBXyk7cmV0dXJuIHQucnVuSW5pdGlhbGl6ZXJzKCksdC5kb25lUHJvbWlzZS50aGVuKCgoKT0+KFVmKG8uaW5qZWN0b3IuZ2V0KEJfLEZmKXx8RmYpLHRoaXMuX21vZHVsZURvQm9vdHN0cmFwKG8pLG8pKSl9KSl9KSl9Ym9vdHN0cmFwTW9kdWxlKHQsZT1bXSl7Y29uc3Qgbj15Qyh7fSxlKTtyZXR1cm4oZnVuY3Rpb24gbyh0LGUsbil7bmdEZXZNb2RlJiYoZnVuY3Rpb24gbyh0LGU9IlR5cGUgcGFzc2VkIGluIGlzIG5vdCBOZ01vZHVsZVR5cGUsIGl0IGRvZXMgbm90IGhhdmUgJ8m1bW9kJyBwcm9wZXJ0eS4iKXtuaSh0KXx8aW8oZSl9KShuKTtjb25zdCBpPW5ldyB1YihuKTtpZigidW5kZWZpbmVkIiE9dHlwZW9mIG5nSml0TW9kZSYmIW5nSml0TW9kZSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGkpO2NvbnN0IGE9dC5nZXQoSl8sW10pLmNvbmNhdChlKTtpZigoZnVuY3Rpb24gcih0KXtpZihudWxsIT09enkpe2lmKHQuZGVmYXVsdEVuY2Fwc3VsYXRpb24hPT16eS5kZWZhdWx0RW5jYXBzdWxhdGlvbilyZXR1cm4gdm9pZChuZ0Rldk1vZGUmJmNvbnNvbGUuZXJyb3IoIlByb3ZpZGVkIHZhbHVlIGZvciBgZGVmYXVsdEVuY2Fwc3VsYXRpb25gIGNhbiBub3QgYmUgY2hhbmdlZCBvbmNlIGl0IGhhcyBiZWVuIHNldC4iKSk7aWYodC5wcmVzZXJ2ZVdoaXRlc3BhY2VzIT09enkucHJlc2VydmVXaGl0ZXNwYWNlcylyZXR1cm4gdm9pZChuZ0Rldk1vZGUmJmNvbnNvbGUuZXJyb3IoIlByb3ZpZGVkIHZhbHVlIGZvciBgcHJlc2VydmVXaGl0ZXNwYWNlc2AgY2FuIG5vdCBiZSBjaGFuZ2VkIG9uY2UgaXQgaGFzIGJlZW4gc2V0LiIpKX16eT10fSkoe2RlZmF1bHRFbmNhcHN1bGF0aW9uOk1DKGEubWFwKCh0PT50LmRlZmF1bHRFbmNhcHN1bGF0aW9uKSkpLHByZXNlcnZlV2hpdGVzcGFjZXM6TUMoYS5tYXAoKHQ9PnQucHJlc2VydmVXaGl0ZXNwYWNlcykpKX0pLChmdW5jdGlvbiBzKCl7cmV0dXJuIDA9PT1rcy5zaXplfSkoKSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGkpO2NvbnN0IGw9KGZ1bmN0aW9uIGModCl7Y29uc3QgZT1bXTtyZXR1cm4gdC5mb3JFYWNoKCh0PT50JiZlLnB1c2goLi4udCkpKSxlfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8pKGEubWFwKCh0PT50LnByb3ZpZGVycykpKTtpZigwPT09bC5sZW5ndGgpcmV0dXJuIFByb21pc2UucmVzb2x2ZShpKTtjb25zdCBkPWpyKCkscD1RcC5jcmVhdGUoe3Byb3ZpZGVyczpsfSkuZ2V0KGQuUmVzb3VyY2VMb2FkZXIpO3JldHVybihmdW5jdGlvbiBtKHQpe2NvbnN0IGU9W10sbj1uZXcgTWFwO2Z1bmN0aW9uIG8oZSl7bGV0IG89bi5nZXQoZSk7aWYoIW8pe2NvbnN0IGk9dChlKTtuLnNldChlLG89aS50aGVuKEVzKSl9cmV0dXJuIG99cmV0dXJuIGtzLmZvckVhY2goKCh0LG4pPT57Y29uc3QgaT1bXTt0LnRlbXBsYXRlVXJsJiZpLnB1c2gobyh0LnRlbXBsYXRlVXJsKS50aGVuKChlPT57dC50ZW1wbGF0ZT1lfSkpKTtjb25zdCBhPXQuc3R5bGVVcmxzLHI9dC5zdHlsZXN8fCh0LnN0eWxlcz1bXSkscz10LnN0eWxlcy5sZW5ndGg7YSYmYS5mb3JFYWNoKCgoZSxuKT0+e3IucHVzaCgiIiksaS5wdXNoKG8oZSkudGhlbigobz0+e3JbcytuXT1vLGEuc3BsaWNlKGEuaW5kZXhPZihlKSwxKSwwPT1hLmxlbmd0aCYmKHQuc3R5bGVVcmxzPXZvaWQgMCl9KSkpfSkpO2NvbnN0IGw9UHJvbWlzZS5hbGwoaSkudGhlbigoKCk9PihmdW5jdGlvbiB0KGUpe1NzLmRlbGV0ZShlKX0pKG4pKSk7ZS5wdXNoKGwpfSkpLChmdW5jdGlvbiBpKCl7a3M9bmV3IE1hcH0pKCksUHJvbWlzZS5hbGwoZSkudGhlbigoKCk9Pnt9KSl9KSgodD0+UHJvbWlzZS5yZXNvbHZlKHAuZ2V0KHQpKSkpLnRoZW4oKCgpPT5pKSl9KSh0aGlzLmluamVjdG9yLG4sdCkudGhlbigodD0+dGhpcy5ib290c3RyYXBNb2R1bGVGYWN0b3J5KHQsbikpKX1fbW9kdWxlRG9Cb290c3RyYXAodCl7Y29uc3QgZT10LmluamVjdG9yLmdldChfQyk7aWYodC5fYm9vdHN0cmFwQ29tcG9uZW50cy5sZW5ndGg+MCl0Ll9ib290c3RyYXBDb21wb25lbnRzLmZvckVhY2goKHQ9PmUuYm9vdHN0cmFwKHQpKSk7ZWxzZXtpZighdC5pbnN0YW5jZS5uZ0RvQm9vdHN0cmFwKXRocm93IG5ldyBFcnJvcihgVGhlIG1vZHVsZSAke1JuKHQuaW5zdGFuY2UuY29uc3RydWN0b3IpfSB3YXMgYm9vdHN0cmFwcGVkLCBidXQgaXQgZG9lcyBub3QgZGVjbGFyZSAiQE5nTW9kdWxlLmJvb3RzdHJhcCIgY29tcG9uZW50cyBub3IgYSAibmdEb0Jvb3RzdHJhcCIgbWV0aG9kLiBQbGVhc2UgZGVmaW5lIG9uZSBvZiB0aGVzZS5gKTt0Lmluc3RhbmNlLm5nRG9Cb290c3RyYXAoZSl9dGhpcy5fbW9kdWxlcy5wdXNoKHQpfW9uRGVzdHJveSh0KXt0aGlzLl9kZXN0cm95TGlzdGVuZXJzLnB1c2godCl9Z2V0IGluamVjdG9yKCl7cmV0dXJuIHRoaXMuX2luamVjdG9yfWRlc3Ryb3koKXtpZih0aGlzLl9kZXN0cm95ZWQpdGhyb3cgbmV3IEVycm9yKCJUaGUgcGxhdGZvcm0gaGFzIGFscmVhZHkgYmVlbiBkZXN0cm95ZWQhIik7dGhpcy5fbW9kdWxlcy5zbGljZSgpLmZvckVhY2goKHQ9PnQuZGVzdHJveSgpKSksdGhpcy5fZGVzdHJveUxpc3RlbmVycy5mb3JFYWNoKCh0PT50KCkpKSx0aGlzLl9kZXN0cm95ZWQ9ITB9Z2V0IGRlc3Ryb3llZCgpe3JldHVybiB0aGlzLl9kZXN0cm95ZWR9fWZ1bmN0aW9uIHlDKHQsZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZS5yZWR1Y2UoeUMsdCk6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLGUpfWJDLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxiQykodXMoUXApKX0sYkMuybVwcm92PWxvKHt0b2tlbjpiQyxmYWN0b3J5OmJDLsm1ZmFjfSksYkMuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpRcH1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoYkMsW3t0eXBlOkptfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOlFwfV19KSxudWxsKTtjbGFzcyBfQ3tjb25zdHJ1Y3Rvcih0LGUsbixvLGkpe3RoaXMuX3pvbmU9dCx0aGlzLl9pbmplY3Rvcj1lLHRoaXMuX2V4Y2VwdGlvbkhhbmRsZXI9bix0aGlzLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9byx0aGlzLl9pbml0U3RhdHVzPWksdGhpcy5fYm9vdHN0cmFwTGlzdGVuZXJzPVtdLHRoaXMuX3ZpZXdzPVtdLHRoaXMuX3J1bm5pbmdUaWNrPSExLHRoaXMuX3N0YWJsZT0hMCx0aGlzLmNvbXBvbmVudFR5cGVzPVtdLHRoaXMuY29tcG9uZW50cz1bXSx0aGlzLl9vbk1pY3JvdGFza0VtcHR5U3Vic2NyaXB0aW9uPXRoaXMuX3pvbmUub25NaWNyb3Rhc2tFbXB0eS5zdWJzY3JpYmUoe25leHQ6KCk9Pnt0aGlzLl96b25lLnJ1bigoKCk9Pnt0aGlzLnRpY2soKX0pKX19KTtjb25zdCBhPW5ldyB5KCh0PT57dGhpcy5fc3RhYmxlPXRoaXMuX3pvbmUuaXNTdGFibGUmJiF0aGlzLl96b25lLmhhc1BlbmRpbmdNYWNyb3Rhc2tzJiYhdGhpcy5fem9uZS5oYXNQZW5kaW5nTWljcm90YXNrcyx0aGlzLl96b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgoKT0+e3QubmV4dCh0aGlzLl9zdGFibGUpLHQuY29tcGxldGUoKX0pKX0pKSxyPW5ldyB5KCh0PT57bGV0IGU7dGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKCk9PntlPXRoaXMuX3pvbmUub25TdGFibGUuc3Vic2NyaWJlKCgoKT0+e3RDLmFzc2VydE5vdEluQW5ndWxhclpvbmUoKSwkXygoKCk9Pnt0aGlzLl9zdGFibGV8fHRoaXMuX3pvbmUuaGFzUGVuZGluZ01hY3JvdGFza3N8fHRoaXMuX3pvbmUuaGFzUGVuZGluZ01pY3JvdGFza3N8fCh0aGlzLl9zdGFibGU9ITAsdC5uZXh0KCEwKSl9KSl9KSl9KSk7Y29uc3Qgbj10aGlzLl96b25lLm9uVW5zdGFibGUuc3Vic2NyaWJlKCgoKT0+e3RDLmFzc2VydEluQW5ndWxhclpvbmUoKSx0aGlzLl9zdGFibGUmJih0aGlzLl9zdGFibGU9ITEsdGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKCk9Pnt0Lm5leHQoITEpfSkpKX0pKTtyZXR1cm4oKT0+e2UudW5zdWJzY3JpYmUoKSxuLnVuc3Vic2NyaWJlKCl9fSkpO3RoaXMuaXNTdGFibGU9V3QoYSxyLnBpcGUob24oKSkpfWJvb3RzdHJhcCh0LGUpe2lmKCF0aGlzLl9pbml0U3RhdHVzLmRvbmUpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgYm9vdHN0cmFwIGFzIHRoZXJlIGFyZSBzdGlsbCBhc3luY2hyb25vdXMgaW5pdGlhbGl6ZXJzIHJ1bm5pbmcuIEJvb3RzdHJhcCBjb21wb25lbnRzIGluIHRoZSBgbmdEb0Jvb3RzdHJhcGAgbWV0aG9kIG9mIHRoZSByb290IG1vZHVsZS4iKTtsZXQgbjtuPXQgaW5zdGFuY2VvZiBhaD90OnRoaXMuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeSh0KSx0aGlzLmNvbXBvbmVudFR5cGVzLnB1c2gobi5jb21wb25lbnRUeXBlKTtjb25zdCBvPShmdW5jdGlvbiBpKHQpe3JldHVybiB0LmlzQm91bmRUb01vZHVsZX0pKG4pP3ZvaWQgMDp0aGlzLl9pbmplY3Rvci5nZXQoWmgpLGE9bi5jcmVhdGUoUXAuTlVMTCxbXSxlfHxuLnNlbGVjdG9yLG8pLHI9YS5sb2NhdGlvbi5uYXRpdmVFbGVtZW50LHM9YS5pbmplY3Rvci5nZXQoc0MsbnVsbCksbD1zJiZhLmluamVjdG9yLmdldChsQyk7cmV0dXJuIHMmJmwmJmwucmVnaXN0ZXJBcHBsaWNhdGlvbihyLHMpLGEub25EZXN0cm95KCgoKT0+e3RoaXMuZGV0YWNoVmlldyhhLmhvc3RWaWV3KSxDQyh0aGlzLmNvbXBvbmVudHMsYSksbCYmbC51bnJlZ2lzdGVyQXBwbGljYXRpb24ocil9KSksdGhpcy5fbG9hZENvbXBvbmVudChhKSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJnVDKCkmJnRoaXMuX2luamVjdG9yLmdldChMXykubG9nKCJBbmd1bGFyIGlzIHJ1bm5pbmcgaW4gZGV2ZWxvcG1lbnQgbW9kZS4gQ2FsbCBlbmFibGVQcm9kTW9kZSgpIHRvIGVuYWJsZSBwcm9kdWN0aW9uIG1vZGUuIiksYX10aWNrKCl7aWYodGhpcy5fcnVubmluZ1RpY2spdGhyb3cgbmV3IEVycm9yKCJBcHBsaWNhdGlvblJlZi50aWNrIGlzIGNhbGxlZCByZWN1cnNpdmVseSIpO3RyeXt0aGlzLl9ydW5uaW5nVGljaz0hMDtmb3IobGV0IHQgb2YgdGhpcy5fdmlld3MpdC5kZXRlY3RDaGFuZ2VzKCk7aWYoKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZ1QygpKWZvcihsZXQgdCBvZiB0aGlzLl92aWV3cyl0LmNoZWNrTm9DaGFuZ2VzKCl9Y2F0Y2godCl7dGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKCk9PnRoaXMuX2V4Y2VwdGlvbkhhbmRsZXIuaGFuZGxlRXJyb3IodCkpKX1maW5hbGx5e3RoaXMuX3J1bm5pbmdUaWNrPSExfX1hdHRhY2hWaWV3KHQpe2NvbnN0IGU9dDt0aGlzLl92aWV3cy5wdXNoKGUpLGUuYXR0YWNoVG9BcHBSZWYodGhpcyl9ZGV0YWNoVmlldyh0KXtjb25zdCBlPXQ7Q0ModGhpcy5fdmlld3MsZSksZS5kZXRhY2hGcm9tQXBwUmVmKCl9X2xvYWRDb21wb25lbnQodCl7dGhpcy5hdHRhY2hWaWV3KHQuaG9zdFZpZXcpLHRoaXMudGljaygpLHRoaXMuY29tcG9uZW50cy5wdXNoKHQpLHRoaXMuX2luamVjdG9yLmdldChGXyxbXSkuY29uY2F0KHRoaXMuX2Jvb3RzdHJhcExpc3RlbmVycykuZm9yRWFjaCgoZT0+ZSh0KSkpfW5nT25EZXN0cm95KCl7dGhpcy5fdmlld3Muc2xpY2UoKS5mb3JFYWNoKCh0PT50LmRlc3Ryb3koKSkpLHRoaXMuX29uTWljcm90YXNrRW1wdHlTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1nZXQgdmlld0NvdW50KCl7cmV0dXJuIHRoaXMuX3ZpZXdzLmxlbmd0aH19ZnVuY3Rpb24gQ0ModCxlKXtjb25zdCBuPXQuaW5kZXhPZihlKTtuPi0xJiZ0LnNwbGljZShuLDEpfWZ1bmN0aW9uIE1DKHQpe2ZvcihsZXQgZT10Lmxlbmd0aC0xO2U+PTA7ZS0tKWlmKHZvaWQgMCE9PXRbZV0pcmV0dXJuIHRbZV19X0MuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fF9DKSh1cyh0QyksdXMoUXApLHVzKEVsKSx1cyhyaCksdXMoQV8pKX0sX0MuybVwcm92PWxvKHt0b2tlbjpfQyxmYWN0b3J5Ol9DLsm1ZmFjfSksX0MuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTp0Q30se3R5cGU6UXB9LHt0eXBlOkVsfSx7dHlwZTpyaH0se3R5cGU6QV99XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKF9DLFt7dHlwZTpKbX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTp0Q30se3R5cGU6UXB9LHt0eXBlOkVsfSx7dHlwZTpyaH0se3R5cGU6QV99XX0pLG51bGwpO2NsYXNzIHZDe31jb25zdCB4Qz17ZmFjdG9yeVBhdGhQcmVmaXg6IiIsZmFjdG9yeVBhdGhTdWZmaXg6Ii5uZ2ZhY3RvcnkifTtjbGFzcyBPQ3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuX2NvbXBpbGVyPXQsdGhpcy5fY29uZmlnPWV8fHhDfWxvYWQodCl7cmV0dXJuIHRoaXMubG9hZEFuZENvbXBpbGUodCl9bG9hZEFuZENvbXBpbGUodCl7bGV0W2Usbl09dC5zcGxpdCgiIyIpO3JldHVybiB2b2lkIDA9PT1uJiYobj0iZGVmYXVsdCIpLFN5c3RlbS5pbXBvcnQoZSkudGhlbigodD0+dFtuXSkpLnRoZW4oKHQ9PlBDKHQsZSxuKSkpLnRoZW4oKHQ9PnRoaXMuX2NvbXBpbGVyLmNvbXBpbGVNb2R1bGVBc3luYyh0KSkpfWxvYWRGYWN0b3J5KHQpe2xldFtlLG5dPXQuc3BsaXQoIiMiKSxvPSJOZ0ZhY3RvcnkiO3JldHVybiB2b2lkIDA9PT1uJiYobj0iZGVmYXVsdCIsbz0iIiksU3lzdGVtLmltcG9ydCh0aGlzLl9jb25maWcuZmFjdG9yeVBhdGhQcmVmaXgrZSt0aGlzLl9jb25maWcuZmFjdG9yeVBhdGhTdWZmaXgpLnRoZW4oKHQ9PnRbbitvXSkpLnRoZW4oKHQ9PlBDKHQsZSxuKSkpfX1mdW5jdGlvbiBQQyh0LGUsbil7aWYoIXQpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCAnJHtufScgaW4gJyR7ZX0nYCk7cmV0dXJuIHR9T0MuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fE9DKSh1cyhLXyksdXModkMsOCkpfSxPQy7JtXByb3Y9bG8oe3Rva2VuOk9DLGZhY3Rvcnk6T0MuybVmYWN9KSxPQy5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOktffSx7dHlwZTp2QyxkZWNvcmF0b3JzOlt7dHlwZTpfc31dfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihPQyxbe3R5cGU6Sm19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6S199LHt0eXBlOnZDLGRlY29yYXRvcnM6W3t0eXBlOl9zfV19XX0pLG51bGwpO2NvbnN0IHdDPWdDKG51bGwsImNvcmUiLFt7cHJvdmlkZTpIXyx1c2VWYWx1ZToidW5rbm93biJ9LHtwcm92aWRlOmJDLGRlcHM6W1FwXX0se3Byb3ZpZGU6bEMsZGVwczpbXX0se3Byb3ZpZGU6TF8sZGVwczpbXX1dKSxrQz1be3Byb3ZpZGU6X0MsdXNlQ2xhc3M6X0MsZGVwczpbdEMsUXAsRWwscmgsQV9dfSx7cHJvdmlkZTpzYixkZXBzOlt0Q10sdXNlRmFjdG9yeTpmdW5jdGlvbiBTQyh0KXtsZXQgZT1bXTtyZXR1cm4gdC5vblN0YWJsZS5zdWJzY3JpYmUoKCgpPT57Zm9yKDtlLmxlbmd0aDspZS5wb3AoKSgpfSkpLGZ1bmN0aW9uKHQpe2UucHVzaCh0KX19fSx7cHJvdmlkZTpBXyx1c2VDbGFzczpBXyxkZXBzOltbbmV3IF9zLEVfXV19LHtwcm92aWRlOktfLHVzZUNsYXNzOktfLGRlcHM6W119LFRfLHtwcm92aWRlOkVoLHVzZUZhY3Rvcnk6Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpmdW5jdGlvbiBEQygpe3JldHVybiBWaH0sZGVwczpbXX0se3Byb3ZpZGU6UmgsdXNlRmFjdG9yeTpmdW5jdGlvbiBFQygpe3JldHVybiBqaH0sZGVwczpbXX0se3Byb3ZpZGU6Ql8sdXNlRmFjdG9yeTpmdW5jdGlvbiBBQyh0KXtyZXR1cm4gVWYodD10fHwoZnVuY3Rpb24gZSgpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgbmdJMThuQ2xvc3VyZU1vZGUmJm5nSTE4bkNsb3N1cmVNb2RlJiYidW5kZWZpbmVkIiE9dHlwZW9mIGdvb2cmJiJlbiIhPT1nb29nLkxPQ0FMRT9nb29nLkxPQ0FMRToidW5kZWZpbmVkIiE9dHlwZW9mICRsb2NhbGl6ZSYmJGxvY2FsaXplLmxvY2FsZXx8RmZ9KSgpKSx0fSxkZXBzOltbbmV3IHlzKEJfKSxuZXcgX3MsbmV3IE1zXV19LHtwcm92aWRlOlZfLHVzZVZhbHVlOiJVU0QifV07Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jbGFzcyBSQ3tjb25zdHJ1Y3Rvcih0KXt9fXZhciBUQyxOQztSQy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8UkMpKHVzKF9DKSl9LFJDLsm1bW9kPVpvKHt0eXBlOlJDfSksUkMuybVpbmo9Y28oe3Byb3ZpZGVyczprQ30pLFJDLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6X0N9XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFJDLFt7dHlwZTprXyxhcmdzOlt7cHJvdmlkZXJzOmtDfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6X0N9XX0pLG51bGwpLChmdW5jdGlvbih0KXt0W3QuQ3JlYXRlVmlld05vZGVzPTBdPSJDcmVhdGVWaWV3Tm9kZXMiLHRbdC5DaGVja05vQ2hhbmdlcz0xXT0iQ2hlY2tOb0NoYW5nZXMiLHRbdC5DaGVja05vQ2hhbmdlc1Byb2plY3RlZFZpZXdzPTJdPSJDaGVja05vQ2hhbmdlc1Byb2plY3RlZFZpZXdzIix0W3QuQ2hlY2tBbmRVcGRhdGU9M109IkNoZWNrQW5kVXBkYXRlIix0W3QuQ2hlY2tBbmRVcGRhdGVQcm9qZWN0ZWRWaWV3cz00XT0iQ2hlY2tBbmRVcGRhdGVQcm9qZWN0ZWRWaWV3cyIsdFt0LkRlc3Ryb3k9NV09IkRlc3Ryb3kifSkoVEN8fChUQz17fSkpLChmdW5jdGlvbih0KXt0W3QuY3JlYXRlPTBdPSJjcmVhdGUiLHRbdC5kZXRlY3RDaGFuZ2VzPTFdPSJkZXRlY3RDaGFuZ2VzIix0W3QuY2hlY2tOb0NoYW5nZXM9Ml09ImNoZWNrTm9DaGFuZ2VzIix0W3QuZGVzdHJveT0zXT0iZGVzdHJveSIsdFt0LmhhbmRsZUV2ZW50PTRdPSJoYW5kbGVFdmVudCJ9KShOQ3x8KE5DPXt9KSksCi8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCiJ1bmRlZmluZWQiIT10eXBlb2YgbmdEZXZNb2RlJiZuZ0Rldk1vZGUmJihFby4kbG9jYWxpemU9RW8uJGxvY2FsaXplfHxmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiSXQgbG9va3MgbGlrZSB5b3VyIGFwcGxpY2F0aW9uIG9yIG9uZSBvZiBpdHMgZGVwZW5kZW5jaWVzIGlzIHVzaW5nIGkxOG4uXG5Bbmd1bGFyIDkgaW50cm9kdWNlZCBhIGdsb2JhbCBgJGxvY2FsaXplKClgIGZ1bmN0aW9uIHRoYXQgbmVlZHMgdG8gYmUgbG9hZGVkLlxuUGxlYXNlIHJ1biBgbmcgYWRkIEBhbmd1bGFyL2xvY2FsaXplYCBmcm9tIHRoZSBBbmd1bGFyIENMSS5cbihGb3Igbm9uLUNMSSBwcm9qZWN0cywgYWRkIGBpbXBvcnQgJ0Bhbmd1bGFyL2xvY2FsaXplL2luaXQnO2AgdG8geW91ciBgcG9seWZpbGxzLnRzYCBmaWxlLlxuRm9yIHNlcnZlci1zaWRlIHJlbmRlcmluZyBhcHBsaWNhdGlvbnMgYWRkIHRoZSBpbXBvcnQgdG8geW91ciBgbWFpbi5zZXJ2ZXIudHNgIGZpbGUuKSIpfSkKLyoqCiAgICAgKiBAbGljZW5zZSBBbmd1bGFyIHYxMS4yLjE0CiAgICAgKiAoYykgMjAxMC0yMDIxIEdvb2dsZSBMTEMuIGh0dHBzOi8vYW5ndWxhci5pby8KICAgICAqIExpY2Vuc2U6IE1JVAogICAgICovCi8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLztjb25zdCBJQz0idW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbFRoaXMmJmdsb2JhbFRoaXMsekM9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvdyxIQz0idW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYmJiJ1bmRlZmluZWQiIT10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSYmc2VsZixGQz0idW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbCYmZ2xvYmFsLExDPWZ1bmN0aW9uKHQsLi4uZSl7aWYoTEMudHJhbnNsYXRlKXtjb25zdCBuPUxDLnRyYW5zbGF0ZSh0LGUpO3Q9blswXSxlPW5bMV19bGV0IG49QkModFswXSx0LnJhd1swXSk7Zm9yKGxldCBvPTE7bzx0Lmxlbmd0aDtvKyspbis9ZVtvLTFdK0JDKHRbb10sdC5yYXdbb10pO3JldHVybiBufTtmdW5jdGlvbiBCQyh0LGUpe3JldHVybiI6Ij09PWUuY2hhckF0KDApP3Quc3Vic3RyaW5nKChmdW5jdGlvbiBuKHQsZSl7Zm9yKGxldCBuPTEsbz0xO248dC5sZW5ndGg7bisrLG8rKylpZigiXFwiPT09ZVtvXSlvKys7ZWxzZSBpZigiOiI9PT10W25dKXJldHVybiBuO3Rocm93IG5ldyBFcnJvcihgVW50ZXJtaW5hdGVkICRsb2NhbGl6ZSBtZXRhZGF0YSBibG9jayBpbiAiJHtlfSIuYCl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8pKHQsZSkrMSk6dH0oSUN8fEZDfHx6Q3x8SEMpLiRsb2NhbGl6ZT1MQzsKLyoqCiAgICAgKiBAbGljZW5zZSBBbmd1bGFyIHYxMS4yLjE0CiAgICAgKiAoYykgMjAxMC0yMDIxIEdvb2dsZSBMTEMuIGh0dHBzOi8vYW5ndWxhci5pby8KICAgICAqIExpY2Vuc2U6IE1JVAogICAgICovCmxldCBWQz1udWxsO2Z1bmN0aW9uIGpDKCl7cmV0dXJuIFZDfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3QgVUM9bmV3IE5yKCJEb2N1bWVudFRva2VuIik7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NsYXNzIFdDe31mdW5jdGlvbiBHQygpe3JldHVybiB1cyhZQyl9V0MuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFdDKX0sV0MuybVwcm92PWxvKHtmYWN0b3J5OkdDLHRva2VuOldDLHByb3ZpZGVkSW46InBsYXRmb3JtIn0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoV0MsW3t0eXBlOkptLGFyZ3M6W3twcm92aWRlZEluOiJwbGF0Zm9ybSIsdXNlRmFjdG9yeTpHQ31dfV0sbnVsbCxudWxsKSxuZXcgTnIoIkxvY2F0aW9uIEluaXRpYWxpemVkIik7Y2xhc3MgWUMgZXh0ZW5kcyBXQ3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuX2RvYz10LHRoaXMuX2luaXQoKX1faW5pdCgpe3RoaXMubG9jYXRpb249akMoKS5nZXRMb2NhdGlvbigpLHRoaXMuX2hpc3Rvcnk9akMoKS5nZXRIaXN0b3J5KCl9Z2V0QmFzZUhyZWZGcm9tRE9NKCl7cmV0dXJuIGpDKCkuZ2V0QmFzZUhyZWYodGhpcy5fZG9jKX1vblBvcFN0YXRlKHQpe2pDKCkuZ2V0R2xvYmFsRXZlbnRUYXJnZXQodGhpcy5fZG9jLCJ3aW5kb3ciKS5hZGRFdmVudExpc3RlbmVyKCJwb3BzdGF0ZSIsdCwhMSl9b25IYXNoQ2hhbmdlKHQpe2pDKCkuZ2V0R2xvYmFsRXZlbnRUYXJnZXQodGhpcy5fZG9jLCJ3aW5kb3ciKS5hZGRFdmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIix0LCExKX1nZXQgaHJlZigpe3JldHVybiB0aGlzLmxvY2F0aW9uLmhyZWZ9Z2V0IHByb3RvY29sKCl7cmV0dXJuIHRoaXMubG9jYXRpb24ucHJvdG9jb2x9Z2V0IGhvc3RuYW1lKCl7cmV0dXJuIHRoaXMubG9jYXRpb24uaG9zdG5hbWV9Z2V0IHBvcnQoKXtyZXR1cm4gdGhpcy5sb2NhdGlvbi5wb3J0fWdldCBwYXRobmFtZSgpe3JldHVybiB0aGlzLmxvY2F0aW9uLnBhdGhuYW1lfWdldCBzZWFyY2goKXtyZXR1cm4gdGhpcy5sb2NhdGlvbi5zZWFyY2h9Z2V0IGhhc2goKXtyZXR1cm4gdGhpcy5sb2NhdGlvbi5oYXNofXNldCBwYXRobmFtZSh0KXt0aGlzLmxvY2F0aW9uLnBhdGhuYW1lPXR9cHVzaFN0YXRlKHQsZSxuKXtxQygpP3RoaXMuX2hpc3RvcnkucHVzaFN0YXRlKHQsZSxuKTp0aGlzLmxvY2F0aW9uLmhhc2g9bn1yZXBsYWNlU3RhdGUodCxlLG4pe3FDKCk/dGhpcy5faGlzdG9yeS5yZXBsYWNlU3RhdGUodCxlLG4pOnRoaXMubG9jYXRpb24uaGFzaD1ufWZvcndhcmQoKXt0aGlzLl9oaXN0b3J5LmZvcndhcmQoKX1iYWNrKCl7dGhpcy5faGlzdG9yeS5iYWNrKCl9Z2V0U3RhdGUoKXtyZXR1cm4gdGhpcy5faGlzdG9yeS5zdGF0ZX19ZnVuY3Rpb24gcUMoKXtyZXR1cm4hIXdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZX1mdW5jdGlvbiBaQygpe3JldHVybiBuZXcgWUModXMoVUMpKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCi8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIFhDKHQsZSl7aWYoMD09dC5sZW5ndGgpcmV0dXJuIGU7aWYoMD09ZS5sZW5ndGgpcmV0dXJuIHQ7bGV0IG49MDtyZXR1cm4gdC5lbmRzV2l0aCgiLyIpJiZuKyssZS5zdGFydHNXaXRoKCIvIikmJm4rKywyPT1uP3QrZS5zdWJzdHJpbmcoMSk6MT09bj90K2U6dCsiLyIrZX1mdW5jdGlvbiBLQyh0KXtjb25zdCBlPXQubWF0Y2goLyN8XD98JC8pLG49ZSYmZS5pbmRleHx8dC5sZW5ndGg7cmV0dXJuIHQuc2xpY2UoMCxuLSgiLyI9PT10W24tMV0/MTowKSkrdC5zbGljZShuKX1mdW5jdGlvbiBKQyh0KXtyZXR1cm4gdCYmIj8iIT09dFswXT8iPyIrdDp0fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9ZQy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8WUMpKHVzKFVDKSl9LFlDLsm1cHJvdj1sbyh7ZmFjdG9yeTpaQyx0b2tlbjpZQyxwcm92aWRlZEluOiJwbGF0Zm9ybSJ9KSxZQy5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltVQ119XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoWUMsW3t0eXBlOkptLGFyZ3M6W3twcm92aWRlZEluOiJwbGF0Zm9ybSIsdXNlRmFjdG9yeTpaQ31dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltVQ119XX1dfSksbnVsbCk7Y2xhc3MgUUN7fWZ1bmN0aW9uICRDKHQpe2NvbnN0IGU9dXMoVUMpLmxvY2F0aW9uO3JldHVybiBuZXcgZU0odXMoV0MpLGUmJmUub3JpZ2lufHwiIil9UUMuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFFDKX0sUUMuybVwcm92PWxvKHtmYWN0b3J5OiRDLHRva2VuOlFDLHByb3ZpZGVkSW46InJvb3QifSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihRQyxbe3R5cGU6Sm0sYXJnczpbe3Byb3ZpZGVkSW46InJvb3QiLHVzZUZhY3Rvcnk6JEN9XX1dLG51bGwsbnVsbCk7Y29uc3QgdE09bmV3IE5yKCJhcHBCYXNlSHJlZiIpO2NsYXNzIGVNIGV4dGVuZHMgUUN7Y29uc3RydWN0b3IodCxlKXtpZihzdXBlcigpLHRoaXMuX3BsYXRmb3JtTG9jYXRpb249dCxudWxsPT1lJiYoZT10aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmdldEJhc2VIcmVmRnJvbURPTSgpKSxudWxsPT1lKXRocm93IG5ldyBFcnJvcigiTm8gYmFzZSBocmVmIHNldC4gUGxlYXNlIHByb3ZpZGUgYSB2YWx1ZSBmb3IgdGhlIEFQUF9CQVNFX0hSRUYgdG9rZW4gb3IgYWRkIGEgYmFzZSBlbGVtZW50IHRvIHRoZSBkb2N1bWVudC4iKTt0aGlzLl9iYXNlSHJlZj1lfW9uUG9wU3RhdGUodCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5vblBvcFN0YXRlKHQpLHRoaXMuX3BsYXRmb3JtTG9jYXRpb24ub25IYXNoQ2hhbmdlKHQpfWdldEJhc2VIcmVmKCl7cmV0dXJuIHRoaXMuX2Jhc2VIcmVmfXByZXBhcmVFeHRlcm5hbFVybCh0KXtyZXR1cm4gWEModGhpcy5fYmFzZUhyZWYsdCl9cGF0aCh0PSExKXtjb25zdCBlPXRoaXMuX3BsYXRmb3JtTG9jYXRpb24ucGF0aG5hbWUrSkModGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5zZWFyY2gpLG49dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5oYXNoO3JldHVybiBuJiZ0P2Ake2V9JHtufWA6ZX1wdXNoU3RhdGUodCxlLG4sbyl7Y29uc3QgaT10aGlzLnByZXBhcmVFeHRlcm5hbFVybChuK0pDKG8pKTt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnB1c2hTdGF0ZSh0LGUsaSl9cmVwbGFjZVN0YXRlKHQsZSxuLG8pe2NvbnN0IGk9dGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwobitKQyhvKSk7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5yZXBsYWNlU3RhdGUodCxlLGkpfWZvcndhcmQoKXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmZvcndhcmQoKX1iYWNrKCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5iYWNrKCl9fWVNLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxlTSkodXMoV0MpLHVzKHRNLDgpKX0sZU0uybVwcm92PWxvKHt0b2tlbjplTSxmYWN0b3J5OmVNLsm1ZmFjfSksZU0uY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpXQ30se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOlt0TV19XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoZU0sW3t0eXBlOkptfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOldDfSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W3RNXX1dfV19KSxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIG5NIGV4dGVuZHMgUUN7Y29uc3RydWN0b3IodCxlKXtzdXBlcigpLHRoaXMuX3BsYXRmb3JtTG9jYXRpb249dCx0aGlzLl9iYXNlSHJlZj0iIixudWxsIT1lJiYodGhpcy5fYmFzZUhyZWY9ZSl9b25Qb3BTdGF0ZSh0KXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLm9uUG9wU3RhdGUodCksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5vbkhhc2hDaGFuZ2UodCl9Z2V0QmFzZUhyZWYoKXtyZXR1cm4gdGhpcy5fYmFzZUhyZWZ9cGF0aCh0PSExKXtsZXQgZT10aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmhhc2g7cmV0dXJuIG51bGw9PWUmJihlPSIjIiksZS5sZW5ndGg+MD9lLnN1YnN0cmluZygxKTplfXByZXBhcmVFeHRlcm5hbFVybCh0KXtjb25zdCBlPVhDKHRoaXMuX2Jhc2VIcmVmLHQpO3JldHVybiBlLmxlbmd0aD4wPyIjIitlOmV9cHVzaFN0YXRlKHQsZSxuLG8pe2xldCBpPXRoaXMucHJlcGFyZUV4dGVybmFsVXJsKG4rSkMobykpOzA9PWkubGVuZ3RoJiYoaT10aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnBhdGhuYW1lKSx0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnB1c2hTdGF0ZSh0LGUsaSl9cmVwbGFjZVN0YXRlKHQsZSxuLG8pe2xldCBpPXRoaXMucHJlcGFyZUV4dGVybmFsVXJsKG4rSkMobykpOzA9PWkubGVuZ3RoJiYoaT10aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnBhdGhuYW1lKSx0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnJlcGxhY2VTdGF0ZSh0LGUsaSl9Zm9yd2FyZCgpe3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uZm9yd2FyZCgpfWJhY2soKXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmJhY2soKX19bk0uybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fG5NKSh1cyhXQyksdXModE0sOCkpfSxuTS7JtXByb3Y9bG8oe3Rva2VuOm5NLGZhY3Rvcnk6bk0uybVmYWN9KSxuTS5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOldDfSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W3RNXX1dfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihuTSxbe3R5cGU6Sm19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6V0N9LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbdE1dfV19XX0pLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3Mgb017Y29uc3RydWN0b3IodCxlKXt0aGlzLl9zdWJqZWN0PW5ldyBBYix0aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnM9W10sdGhpcy5fcGxhdGZvcm1TdHJhdGVneT10O2NvbnN0IG49dGhpcy5fcGxhdGZvcm1TdHJhdGVneS5nZXRCYXNlSHJlZigpO3RoaXMuX3BsYXRmb3JtTG9jYXRpb249ZSx0aGlzLl9iYXNlSHJlZj1LQyhhTShuKSksdGhpcy5fcGxhdGZvcm1TdHJhdGVneS5vblBvcFN0YXRlKCh0PT57dGhpcy5fc3ViamVjdC5lbWl0KHt1cmw6dGhpcy5wYXRoKCEwKSxwb3A6ITAsc3RhdGU6dC5zdGF0ZSx0eXBlOnQudHlwZX0pfSkpfXBhdGgodD0hMSl7cmV0dXJuIHRoaXMubm9ybWFsaXplKHRoaXMuX3BsYXRmb3JtU3RyYXRlZ3kucGF0aCh0KSl9Z2V0U3RhdGUoKXtyZXR1cm4gdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5nZXRTdGF0ZSgpfWlzQ3VycmVudFBhdGhFcXVhbFRvKHQsZT0iIil7cmV0dXJuIHRoaXMucGF0aCgpPT10aGlzLm5vcm1hbGl6ZSh0K0pDKGUpKX1ub3JtYWxpemUodCl7cmV0dXJuIG9NLnN0cmlwVHJhaWxpbmdTbGFzaCgoZnVuY3Rpb24gZSh0LG4pe3JldHVybiB0JiZuLnN0YXJ0c1dpdGgodCk/bi5zdWJzdHJpbmcodC5sZW5ndGgpOm59KSh0aGlzLl9iYXNlSHJlZixhTSh0KSkpfXByZXBhcmVFeHRlcm5hbFVybCh0KXtyZXR1cm4gdCYmIi8iIT09dFswXSYmKHQ9Ii8iK3QpLHRoaXMuX3BsYXRmb3JtU3RyYXRlZ3kucHJlcGFyZUV4dGVybmFsVXJsKHQpfWdvKHQsZT0iIixuPW51bGwpe3RoaXMuX3BsYXRmb3JtU3RyYXRlZ3kucHVzaFN0YXRlKG4sIiIsdCxlKSx0aGlzLl9ub3RpZnlVcmxDaGFuZ2VMaXN0ZW5lcnModGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwodCtKQyhlKSksbil9cmVwbGFjZVN0YXRlKHQsZT0iIixuPW51bGwpe3RoaXMuX3BsYXRmb3JtU3RyYXRlZ3kucmVwbGFjZVN0YXRlKG4sIiIsdCxlKSx0aGlzLl9ub3RpZnlVcmxDaGFuZ2VMaXN0ZW5lcnModGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwodCtKQyhlKSksbil9Zm9yd2FyZCgpe3RoaXMuX3BsYXRmb3JtU3RyYXRlZ3kuZm9yd2FyZCgpfWJhY2soKXt0aGlzLl9wbGF0Zm9ybVN0cmF0ZWd5LmJhY2soKX1vblVybENoYW5nZSh0KXt0aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnMucHVzaCh0KSx0aGlzLl91cmxDaGFuZ2VTdWJzY3JpcHRpb258fCh0aGlzLl91cmxDaGFuZ2VTdWJzY3JpcHRpb249dGhpcy5zdWJzY3JpYmUoKHQ9Pnt0aGlzLl9ub3RpZnlVcmxDaGFuZ2VMaXN0ZW5lcnModC51cmwsdC5zdGF0ZSl9KSkpfV9ub3RpZnlVcmxDaGFuZ2VMaXN0ZW5lcnModD0iIixlKXt0aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnMuZm9yRWFjaCgobj0+bih0LGUpKSl9c3Vic2NyaWJlKHQsZSxuKXtyZXR1cm4gdGhpcy5fc3ViamVjdC5zdWJzY3JpYmUoe25leHQ6dCxlcnJvcjplLGNvbXBsZXRlOm59KX19ZnVuY3Rpb24gaU0oKXtyZXR1cm4gbmV3IG9NKHVzKFFDKSx1cyhXQykpfWZ1bmN0aW9uIGFNKHQpe3JldHVybiB0LnJlcGxhY2UoL1wvaW5kZXguaHRtbCQvLCIiKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCi8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL29NLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxvTSkodXMoUUMpLHVzKFdDKSl9LG9NLm5vcm1hbGl6ZVF1ZXJ5UGFyYW1zPUpDLG9NLmpvaW5XaXRoU2xhc2g9WEMsb00uc3RyaXBUcmFpbGluZ1NsYXNoPUtDLG9NLsm1cHJvdj1sbyh7ZmFjdG9yeTppTSx0b2tlbjpvTSxwcm92aWRlZEluOiJyb290In0pLG9NLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6UUN9LHt0eXBlOldDfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihvTSxbe3R5cGU6Sm0sYXJnczpbe3Byb3ZpZGVkSW46InJvb3QiLHVzZUZhY3Rvcnk6aU19XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpRQ30se3R5cGU6V0N9XX0pLG51bGwpO2NvbnN0IHJNPXtBRFA6W3ZvaWQgMCx2b2lkIDAsMF0sQUZOOlt2b2lkIDAsdm9pZCAwLDBdLEFMTDpbdm9pZCAwLHZvaWQgMCwwXSxBTUQ6W3ZvaWQgMCx2b2lkIDAsMl0sQU9BOlt2b2lkIDAsIkt6Il0sQVJTOlt2b2lkIDAsIiQiXSxBVUQ6WyJBJCIsIiQiXSxCQU06W3ZvaWQgMCwiS00iXSxCQkQ6W3ZvaWQgMCwiJCJdLEJEVDpbdm9pZCAwLCLgp7MiXSxCSEQ6W3ZvaWQgMCx2b2lkIDAsM10sQklGOlt2b2lkIDAsdm9pZCAwLDBdLEJNRDpbdm9pZCAwLCIkIl0sQk5EOlt2b2lkIDAsIiQiXSxCT0I6W3ZvaWQgMCwiQnMiXSxCUkw6WyJSJCJdLEJTRDpbdm9pZCAwLCIkIl0sQldQOlt2b2lkIDAsIlAiXSxCWU46W3ZvaWQgMCwi0YAuIiwyXSxCWVI6W3ZvaWQgMCx2b2lkIDAsMF0sQlpEOlt2b2lkIDAsIiQiXSxDQUQ6WyJDQSQiLCIkIiwyXSxDSEY6W3ZvaWQgMCx2b2lkIDAsMl0sQ0xGOlt2b2lkIDAsdm9pZCAwLDRdLENMUDpbdm9pZCAwLCIkIiwwXSxDTlk6WyJDTsKlIiwiwqUiXSxDT1A6W3ZvaWQgMCwiJCIsMl0sQ1JDOlt2b2lkIDAsIuKCoSIsMl0sQ1VDOlt2b2lkIDAsIiQiXSxDVVA6W3ZvaWQgMCwiJCJdLENaSzpbdm9pZCAwLCJLxI0iLDJdLERKRjpbdm9pZCAwLHZvaWQgMCwwXSxES0s6W3ZvaWQgMCwia3IiLDJdLERPUDpbdm9pZCAwLCIkIl0sRUdQOlt2b2lkIDAsIkXCoyJdLEVTUDpbdm9pZCAwLCLigqciLDBdLEVVUjpbIuKCrCJdLEZKRDpbdm9pZCAwLCIkIl0sRktQOlt2b2lkIDAsIsKjIl0sR0JQOlsiwqMiXSxHRUw6W3ZvaWQgMCwi4oK+Il0sR0lQOlt2b2lkIDAsIsKjIl0sR05GOlt2b2lkIDAsIkZHIiwwXSxHVFE6W3ZvaWQgMCwiUSJdLEdZRDpbdm9pZCAwLCIkIiwyXSxIS0Q6WyJISyQiLCIkIl0sSE5MOlt2b2lkIDAsIkwiXSxIUks6W3ZvaWQgMCwia24iXSxIVUY6W3ZvaWQgMCwiRnQiLDJdLElEUjpbdm9pZCAwLCJScCIsMl0sSUxTOlsi4oKqIl0sSU5SOlsi4oK5Il0sSVFEOlt2b2lkIDAsdm9pZCAwLDBdLElSUjpbdm9pZCAwLHZvaWQgMCwwXSxJU0s6W3ZvaWQgMCwia3IiLDBdLElUTDpbdm9pZCAwLHZvaWQgMCwwXSxKTUQ6W3ZvaWQgMCwiJCJdLEpPRDpbdm9pZCAwLHZvaWQgMCwzXSxKUFk6WyLCpSIsdm9pZCAwLDBdLEtIUjpbdm9pZCAwLCLhn5siXSxLTUY6W3ZvaWQgMCwiQ0YiLDBdLEtQVzpbdm9pZCAwLCLigqkiLDBdLEtSVzpbIuKCqSIsdm9pZCAwLDBdLEtXRDpbdm9pZCAwLHZvaWQgMCwzXSxLWUQ6W3ZvaWQgMCwiJCJdLEtaVDpbdm9pZCAwLCLigrgiXSxMQUs6W3ZvaWQgMCwi4oKtIiwwXSxMQlA6W3ZvaWQgMCwiTMKjIiwwXSxMS1I6W3ZvaWQgMCwiUnMiXSxMUkQ6W3ZvaWQgMCwiJCJdLExUTDpbdm9pZCAwLCJMdCJdLExVRjpbdm9pZCAwLHZvaWQgMCwwXSxMVkw6W3ZvaWQgMCwiTHMiXSxMWUQ6W3ZvaWQgMCx2b2lkIDAsM10sTUdBOlt2b2lkIDAsIkFyIiwwXSxNR0Y6W3ZvaWQgMCx2b2lkIDAsMF0sTU1LOlt2b2lkIDAsIksiLDBdLE1OVDpbdm9pZCAwLCLigq4iLDJdLE1STzpbdm9pZCAwLHZvaWQgMCwwXSxNVVI6W3ZvaWQgMCwiUnMiLDJdLE1YTjpbIk1YJCIsIiQiXSxNWVI6W3ZvaWQgMCwiUk0iXSxOQUQ6W3ZvaWQgMCwiJCJdLE5HTjpbdm9pZCAwLCLigqYiXSxOSU86W3ZvaWQgMCwiQyQiXSxOT0s6W3ZvaWQgMCwia3IiLDJdLE5QUjpbdm9pZCAwLCJScyJdLE5aRDpbIk5aJCIsIiQiXSxPTVI6W3ZvaWQgMCx2b2lkIDAsM10sUEhQOlt2b2lkIDAsIuKCsSJdLFBLUjpbdm9pZCAwLCJScyIsMl0sUExOOlt2b2lkIDAsInrFgiJdLFBZRzpbdm9pZCAwLCLigrIiLDBdLFJPTjpbdm9pZCAwLCJsZWkiXSxSU0Q6W3ZvaWQgMCx2b2lkIDAsMF0sUlVCOlt2b2lkIDAsIuKCvSJdLFJVUjpbdm9pZCAwLCLRgC4iXSxSV0Y6W3ZvaWQgMCwiUkYiLDBdLFNCRDpbdm9pZCAwLCIkIl0sU0VLOlt2b2lkIDAsImtyIiwyXSxTR0Q6W3ZvaWQgMCwiJCJdLFNIUDpbdm9pZCAwLCLCoyJdLFNMTDpbdm9pZCAwLHZvaWQgMCwwXSxTT1M6W3ZvaWQgMCx2b2lkIDAsMF0sU1JEOlt2b2lkIDAsIiQiXSxTU1A6W3ZvaWQgMCwiwqMiXSxTVEQ6W3ZvaWQgMCx2b2lkIDAsMF0sU1ROOlt2b2lkIDAsIkRiIl0sU1lQOlt2b2lkIDAsIsKjIiwwXSxUSEI6W3ZvaWQgMCwi4Li/Il0sVE1NOlt2b2lkIDAsdm9pZCAwLDBdLFRORDpbdm9pZCAwLHZvaWQgMCwzXSxUT1A6W3ZvaWQgMCwiVCQiXSxUUkw6W3ZvaWQgMCx2b2lkIDAsMF0sVFJZOlt2b2lkIDAsIuKCuiJdLFRURDpbdm9pZCAwLCIkIl0sVFdEOlsiTlQkIiwiJCIsMl0sVFpTOlt2b2lkIDAsdm9pZCAwLDJdLFVBSDpbdm9pZCAwLCLigrQiXSxVR1g6W3ZvaWQgMCx2b2lkIDAsMF0sVVNEOlsiJCJdLFVZSTpbdm9pZCAwLHZvaWQgMCwwXSxVWVU6W3ZvaWQgMCwiJCJdLFVZVzpbdm9pZCAwLHZvaWQgMCw0XSxVWlM6W3ZvaWQgMCx2b2lkIDAsMl0sVkVGOlt2b2lkIDAsIkJzIiwyXSxWTkQ6WyLigqsiLHZvaWQgMCwwXSxWVVY6W3ZvaWQgMCx2b2lkIDAsMF0sWEFGOlsiRkNGQSIsdm9pZCAwLDBdLFhDRDpbIkVDJCIsIiQiXSxYT0Y6WyJDRkEiLHZvaWQgMCwwXSxYUEY6WyJDRlBGIix2b2lkIDAsMF0sWFhYOlsiwqQiXSxZRVI6W3ZvaWQgMCx2b2lkIDAsMF0sWkFSOlt2b2lkIDAsIlIiXSxaTUs6W3ZvaWQgMCx2b2lkIDAsMF0sWk1XOlt2b2lkIDAsIlpLIl0sWldEOlt2b2lkIDAsdm9pZCAwLDBdfTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovdmFyIHNNLGxNLGNNLGRNLHBNLG1NLHVNO2Z1bmN0aW9uIGZNKHQsZSl7cmV0dXJuIE1NKFRmKHQpW3pmLkRhdGVGb3JtYXRdLGUpfWZ1bmN0aW9uIGdNKHQsZSl7cmV0dXJuIE1NKFRmKHQpW3pmLlRpbWVGb3JtYXRdLGUpfWZ1bmN0aW9uIGhNKHQsZSl7cmV0dXJuIE1NKFRmKHQpW3pmLkRhdGVUaW1lRm9ybWF0XSxlKX1mdW5jdGlvbiBiTSh0LGUpe2NvbnN0IG49VGYodCksbz1uW3pmLk51bWJlclN5bWJvbHNdW2VdO2lmKHZvaWQgMD09PW8pe2lmKGU9PT1tTS5DdXJyZW5jeURlY2ltYWwpcmV0dXJuIG5bemYuTnVtYmVyU3ltYm9sc11bbU0uRGVjaW1hbF07aWYoZT09PW1NLkN1cnJlbmN5R3JvdXApcmV0dXJuIG5bemYuTnVtYmVyU3ltYm9sc11bbU0uR3JvdXBdfXJldHVybiBvfWZ1bmN0aW9uIHlNKHQsZSl7cmV0dXJuIFRmKHQpW3pmLk51bWJlckZvcm1hdHNdW2VdfSEoZnVuY3Rpb24odCl7dFt0LkRlY2ltYWw9MF09IkRlY2ltYWwiLHRbdC5QZXJjZW50PTFdPSJQZXJjZW50Iix0W3QuQ3VycmVuY3k9Ml09IkN1cnJlbmN5Iix0W3QuU2NpZW50aWZpYz0zXT0iU2NpZW50aWZpYyJ9KShzTXx8KHNNPXt9KSksKGZ1bmN0aW9uKHQpe3RbdC5aZXJvPTBdPSJaZXJvIix0W3QuT25lPTFdPSJPbmUiLHRbdC5Ud289Ml09IlR3byIsdFt0LkZldz0zXT0iRmV3Iix0W3QuTWFueT00XT0iTWFueSIsdFt0Lk90aGVyPTVdPSJPdGhlciJ9KShsTXx8KGxNPXt9KSksKGZ1bmN0aW9uKHQpe3RbdC5Gb3JtYXQ9MF09IkZvcm1hdCIsdFt0LlN0YW5kYWxvbmU9MV09IlN0YW5kYWxvbmUifSkoY018fChjTT17fSkpLChmdW5jdGlvbih0KXt0W3QuTmFycm93PTBdPSJOYXJyb3ciLHRbdC5BYmJyZXZpYXRlZD0xXT0iQWJicmV2aWF0ZWQiLHRbdC5XaWRlPTJdPSJXaWRlIix0W3QuU2hvcnQ9M109IlNob3J0In0pKGRNfHwoZE09e30pKSwoZnVuY3Rpb24odCl7dFt0LlNob3J0PTBdPSJTaG9ydCIsdFt0Lk1lZGl1bT0xXT0iTWVkaXVtIix0W3QuTG9uZz0yXT0iTG9uZyIsdFt0LkZ1bGw9M109IkZ1bGwifSkocE18fChwTT17fSkpLChmdW5jdGlvbih0KXt0W3QuRGVjaW1hbD0wXT0iRGVjaW1hbCIsdFt0Lkdyb3VwPTFdPSJHcm91cCIsdFt0Lkxpc3Q9Ml09Ikxpc3QiLHRbdC5QZXJjZW50U2lnbj0zXT0iUGVyY2VudFNpZ24iLHRbdC5QbHVzU2lnbj00XT0iUGx1c1NpZ24iLHRbdC5NaW51c1NpZ249NV09Ik1pbnVzU2lnbiIsdFt0LkV4cG9uZW50aWFsPTZdPSJFeHBvbmVudGlhbCIsdFt0LlN1cGVyc2NyaXB0aW5nRXhwb25lbnQ9N109IlN1cGVyc2NyaXB0aW5nRXhwb25lbnQiLHRbdC5QZXJNaWxsZT04XT0iUGVyTWlsbGUiLHRbdFsxLzBdPTldPSJJbmZpbml0eSIsdFt0Lk5hTj0xMF09Ik5hTiIsdFt0LlRpbWVTZXBhcmF0b3I9MTFdPSJUaW1lU2VwYXJhdG9yIix0W3QuQ3VycmVuY3lEZWNpbWFsPTEyXT0iQ3VycmVuY3lEZWNpbWFsIix0W3QuQ3VycmVuY3lHcm91cD0xM109IkN1cnJlbmN5R3JvdXAifSkobU18fChtTT17fSkpLChmdW5jdGlvbih0KXt0W3QuU3VuZGF5PTBdPSJTdW5kYXkiLHRbdC5Nb25kYXk9MV09Ik1vbmRheSIsdFt0LlR1ZXNkYXk9Ml09IlR1ZXNkYXkiLHRbdC5XZWRuZXNkYXk9M109IldlZG5lc2RheSIsdFt0LlRodXJzZGF5PTRdPSJUaHVyc2RheSIsdFt0LkZyaWRheT01XT0iRnJpZGF5Iix0W3QuU2F0dXJkYXk9Nl09IlNhdHVyZGF5In0pKHVNfHwodU09e30pKTtjb25zdCBfTT1OZjtmdW5jdGlvbiBDTSh0KXtpZighdFt6Zi5FeHRyYURhdGFdKXRocm93IG5ldyBFcnJvcihgTWlzc2luZyBleHRyYSBsb2NhbGUgZGF0YSBmb3IgdGhlIGxvY2FsZSAiJHt0W3pmLkxvY2FsZUlkXX0iLiBVc2UgInJlZ2lzdGVyTG9jYWxlRGF0YSIgdG8gbG9hZCBuZXcgZGF0YS4gU2VlIHRoZSAiSTE4biBndWlkZSIgb24gYW5ndWxhci5pbyB0byBrbm93IG1vcmUuYCl9ZnVuY3Rpb24gTU0odCxlKXtmb3IobGV0IG49ZTtuPi0xO24tLSlpZih2b2lkIDAhPT10W25dKXJldHVybiB0W25dO3Rocm93IG5ldyBFcnJvcigiTG9jYWxlIGRhdGEgQVBJOiBsb2NhbGUgZGF0YSB1bmRlZmluZWQiKX1mdW5jdGlvbiB2TSh0KXtjb25zdFtlLG5dPXQuc3BsaXQoIjoiKTtyZXR1cm57aG91cnM6K2UsbWludXRlczorbn19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCB4TT0vXihcZHs0fSktPyhcZFxkKS0/KFxkXGQpKD86VChcZFxkKSg/Ojo/KFxkXGQpKD86Oj8oXGRcZCkoPzpcLihcZCspKT8pPyk/KFp8KFsrLV0pKFxkXGQpOj8oXGRcZCkpPyk/JC8sT009e30sUE09LygoPzpbXkd5WU1Md1dkRWFiQmhIbXNTelpPJ10rKXwoPzonKD86W14nXXwnJykqJyl8KD86R3sxLDV9fHl7MSw0fXxZezEsNH18TXsxLDV9fEx7MSw1fXx3ezEsMn18V3sxfXxkezEsMn18RXsxLDZ9fGF7MSw1fXxiezEsNX18QnsxLDV9fGh7MSwyfXxIezEsMn18bXsxLDJ9fHN7MSwyfXxTezEsM318ensxLDR9fFp7MSw1fXxPezEsNH0pKShbXHNcU10qKS87dmFyIHdNLGtNLFNNO2Z1bmN0aW9uIERNKHQsZSxuLG8pe2xldCBpPShmdW5jdGlvbiBhKHQpe2lmKGpNKHQpKXJldHVybiB0O2lmKCJudW1iZXIiPT10eXBlb2YgdCYmIWlzTmFOKHQpKXJldHVybiBuZXcgRGF0ZSh0KTtpZigic3RyaW5nIj09dHlwZW9mIHQpe2lmKHQ9dC50cmltKCksL14oXGR7NH0oLVxkezEsMn0oLVxkezEsMn0pPyk/KSQvLnRlc3QodCkpe2NvbnN0W2Usbj0xLG89MV09dC5zcGxpdCgiLSIpLm1hcCgodD0+K3QpKTtyZXR1cm4gRU0oZSxuLTEsbyl9Y29uc3QgZT1wYXJzZUZsb2F0KHQpO2lmKCFpc05hTih0LWUpKXJldHVybiBuZXcgRGF0ZShlKTtsZXQgbjtpZihuPXQubWF0Y2goeE0pKXJldHVybihmdW5jdGlvbiBlKHQpe2NvbnN0IGU9bmV3IERhdGUoMCk7bGV0IG49MCxvPTA7Y29uc3QgaT10WzhdP2Uuc2V0VVRDRnVsbFllYXI6ZS5zZXRGdWxsWWVhcixhPXRbOF0/ZS5zZXRVVENIb3VyczplLnNldEhvdXJzO3RbOV0mJihuPU51bWJlcih0WzldK3RbMTBdKSxvPU51bWJlcih0WzldK3RbMTFdKSksaS5jYWxsKGUsTnVtYmVyKHRbMV0pLE51bWJlcih0WzJdKS0xLE51bWJlcih0WzNdKSk7Y29uc3Qgcj1OdW1iZXIodFs0XXx8MCktbixzPU51bWJlcih0WzVdfHwwKS1vLGw9TnVtYmVyKHRbNl18fDApLGM9TWF0aC5mbG9vcigxZTMqcGFyc2VGbG9hdCgiMC4iKyh0WzddfHwwKSkpO3JldHVybiBhLmNhbGwoZSxyLHMsbCxjKSxlfSkobil9Y29uc3Qgbj1uZXcgRGF0ZSh0KTtpZighak0obikpdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gY29udmVydCAiJHt0fSIgaW50byBhIGRhdGVgKTtyZXR1cm4gbn0pKHQpO2U9QU0obixlKXx8ZTtsZXQgcixzPVtdO2Zvcig7ZTspe2lmKHI9UE0uZXhlYyhlKSwhcil7cy5wdXNoKGUpO2JyZWFrfXtzPXMuY29uY2F0KHIuc2xpY2UoMSkpO2NvbnN0IHQ9cy5wb3AoKTtpZighdClicmVhaztlPXR9fWxldCBsPWkuZ2V0VGltZXpvbmVPZmZzZXQoKTtvJiYobD1WTShvLGwpLGk9KGZ1bmN0aW9uIGModCxlLG4pe2NvbnN0IG89bj8tMToxLGk9dC5nZXRUaW1lem9uZU9mZnNldCgpO3JldHVybihmdW5jdGlvbiBhKHQsZSl7cmV0dXJuKHQ9bmV3IERhdGUodC5nZXRUaW1lKCkpKS5zZXRNaW51dGVzKHQuZ2V0TWludXRlcygpK2UpLHR9KSh0LG8qKFZNKGUsaSktaSkpfSkoaSxvLCEwKSk7bGV0IGQ9IiI7cmV0dXJuIHMuZm9yRWFjaCgodD0+e2NvbnN0IGU9KGZ1bmN0aW9uIG8odCl7aWYoQk1bdF0pcmV0dXJuIEJNW3RdO2xldCBlO3N3aXRjaCh0KXtjYXNlIkciOmNhc2UiR0ciOmNhc2UiR0dHIjplPUlNKFNNLkVyYXMsZE0uQWJicmV2aWF0ZWQpO2JyZWFrO2Nhc2UiR0dHRyI6ZT1JTShTTS5FcmFzLGRNLldpZGUpO2JyZWFrO2Nhc2UiR0dHR0ciOmU9SU0oU00uRXJhcyxkTS5OYXJyb3cpO2JyZWFrO2Nhc2UieSI6ZT1OTShrTS5GdWxsWWVhciwxLDAsITEsITApO2JyZWFrO2Nhc2UieXkiOmU9Tk0oa00uRnVsbFllYXIsMiwwLCEwLCEwKTticmVhaztjYXNlInl5eSI6ZT1OTShrTS5GdWxsWWVhciwzLDAsITEsITApO2JyZWFrO2Nhc2UieXl5eSI6ZT1OTShrTS5GdWxsWWVhciw0LDAsITEsITApO2JyZWFrO2Nhc2UiWSI6ZT1MTSgxKTticmVhaztjYXNlIllZIjplPUxNKDIsITApO2JyZWFrO2Nhc2UiWVlZIjplPUxNKDMpO2JyZWFrO2Nhc2UiWVlZWSI6ZT1MTSg0KTticmVhaztjYXNlIk0iOmNhc2UiTCI6ZT1OTShrTS5Nb250aCwxLDEpO2JyZWFrO2Nhc2UiTU0iOmNhc2UiTEwiOmU9Tk0oa00uTW9udGgsMiwxKTticmVhaztjYXNlIk1NTSI6ZT1JTShTTS5Nb250aHMsZE0uQWJicmV2aWF0ZWQpO2JyZWFrO2Nhc2UiTU1NTSI6ZT1JTShTTS5Nb250aHMsZE0uV2lkZSk7YnJlYWs7Y2FzZSJNTU1NTSI6ZT1JTShTTS5Nb250aHMsZE0uTmFycm93KTticmVhaztjYXNlIkxMTCI6ZT1JTShTTS5Nb250aHMsZE0uQWJicmV2aWF0ZWQsY00uU3RhbmRhbG9uZSk7YnJlYWs7Y2FzZSJMTExMIjplPUlNKFNNLk1vbnRocyxkTS5XaWRlLGNNLlN0YW5kYWxvbmUpO2JyZWFrO2Nhc2UiTExMTEwiOmU9SU0oU00uTW9udGhzLGRNLk5hcnJvdyxjTS5TdGFuZGFsb25lKTticmVhaztjYXNlInciOmU9Rk0oMSk7YnJlYWs7Y2FzZSJ3dyI6ZT1GTSgyKTticmVhaztjYXNlIlciOmU9Rk0oMSwhMCk7YnJlYWs7Y2FzZSJkIjplPU5NKGtNLkRhdGUsMSk7YnJlYWs7Y2FzZSJkZCI6ZT1OTShrTS5EYXRlLDIpO2JyZWFrO2Nhc2UiRSI6Y2FzZSJFRSI6Y2FzZSJFRUUiOmU9SU0oU00uRGF5cyxkTS5BYmJyZXZpYXRlZCk7YnJlYWs7Y2FzZSJFRUVFIjplPUlNKFNNLkRheXMsZE0uV2lkZSk7YnJlYWs7Y2FzZSJFRUVFRSI6ZT1JTShTTS5EYXlzLGRNLk5hcnJvdyk7YnJlYWs7Y2FzZSJFRUVFRUUiOmU9SU0oU00uRGF5cyxkTS5TaG9ydCk7YnJlYWs7Y2FzZSJhIjpjYXNlImFhIjpjYXNlImFhYSI6ZT1JTShTTS5EYXlQZXJpb2RzLGRNLkFiYnJldmlhdGVkKTticmVhaztjYXNlImFhYWEiOmU9SU0oU00uRGF5UGVyaW9kcyxkTS5XaWRlKTticmVhaztjYXNlImFhYWFhIjplPUlNKFNNLkRheVBlcmlvZHMsZE0uTmFycm93KTticmVhaztjYXNlImIiOmNhc2UiYmIiOmNhc2UiYmJiIjplPUlNKFNNLkRheVBlcmlvZHMsZE0uQWJicmV2aWF0ZWQsY00uU3RhbmRhbG9uZSwhMCk7YnJlYWs7Y2FzZSJiYmJiIjplPUlNKFNNLkRheVBlcmlvZHMsZE0uV2lkZSxjTS5TdGFuZGFsb25lLCEwKTticmVhaztjYXNlImJiYmJiIjplPUlNKFNNLkRheVBlcmlvZHMsZE0uTmFycm93LGNNLlN0YW5kYWxvbmUsITApO2JyZWFrO2Nhc2UiQiI6Y2FzZSJCQiI6Y2FzZSJCQkIiOmU9SU0oU00uRGF5UGVyaW9kcyxkTS5BYmJyZXZpYXRlZCxjTS5Gb3JtYXQsITApO2JyZWFrO2Nhc2UiQkJCQiI6ZT1JTShTTS5EYXlQZXJpb2RzLGRNLldpZGUsY00uRm9ybWF0LCEwKTticmVhaztjYXNlIkJCQkJCIjplPUlNKFNNLkRheVBlcmlvZHMsZE0uTmFycm93LGNNLkZvcm1hdCwhMCk7YnJlYWs7Y2FzZSJoIjplPU5NKGtNLkhvdXJzLDEsLTEyKTticmVhaztjYXNlImhoIjplPU5NKGtNLkhvdXJzLDIsLTEyKTticmVhaztjYXNlIkgiOmU9Tk0oa00uSG91cnMsMSk7YnJlYWs7Y2FzZSJISCI6ZT1OTShrTS5Ib3VycywyKTticmVhaztjYXNlIm0iOmU9Tk0oa00uTWludXRlcywxKTticmVhaztjYXNlIm1tIjplPU5NKGtNLk1pbnV0ZXMsMik7YnJlYWs7Y2FzZSJzIjplPU5NKGtNLlNlY29uZHMsMSk7YnJlYWs7Y2FzZSJzcyI6ZT1OTShrTS5TZWNvbmRzLDIpO2JyZWFrO2Nhc2UiUyI6ZT1OTShrTS5GcmFjdGlvbmFsU2Vjb25kcywxKTticmVhaztjYXNlIlNTIjplPU5NKGtNLkZyYWN0aW9uYWxTZWNvbmRzLDIpO2JyZWFrO2Nhc2UiU1NTIjplPU5NKGtNLkZyYWN0aW9uYWxTZWNvbmRzLDMpO2JyZWFrO2Nhc2UiWiI6Y2FzZSJaWiI6Y2FzZSJaWloiOmU9ek0od00uU2hvcnQpO2JyZWFrO2Nhc2UiWlpaWloiOmU9ek0od00uRXh0ZW5kZWQpO2JyZWFrO2Nhc2UiTyI6Y2FzZSJPTyI6Y2FzZSJPT08iOmNhc2UieiI6Y2FzZSJ6eiI6Y2FzZSJ6enoiOmU9ek0od00uU2hvcnRHTVQpO2JyZWFrO2Nhc2UiT09PTyI6Y2FzZSJaWlpaIjpjYXNlInp6enoiOmU9ek0od00uTG9uZyk7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gbnVsbH1yZXR1cm4gQk1bdF09ZSxlfSkodCk7ZCs9ZT9lKGksbixsKToiJyciPT09dD8iJyI6dC5yZXBsYWNlKC8oXid8JyQpL2csIiIpLnJlcGxhY2UoLycnL2csIiciKX0pKSxkfWZ1bmN0aW9uIEVNKHQsZSxuKXtjb25zdCBvPW5ldyBEYXRlKDApO3JldHVybiBvLnNldEZ1bGxZZWFyKHQsZSxuKSxvLnNldEhvdXJzKDAsMCwwKSxvfWZ1bmN0aW9uIEFNKHQsZSl7Y29uc3Qgbj0oZnVuY3Rpb24gbyh0KXtyZXR1cm4gVGYodClbemYuTG9jYWxlSWRdfSkodCk7aWYoT01bbl09T01bbl18fHt9LE9NW25dW2VdKXJldHVybiBPTVtuXVtlXTtsZXQgaT0iIjtzd2l0Y2goZSl7Y2FzZSJzaG9ydERhdGUiOmk9Zk0odCxwTS5TaG9ydCk7YnJlYWs7Y2FzZSJtZWRpdW1EYXRlIjppPWZNKHQscE0uTWVkaXVtKTticmVhaztjYXNlImxvbmdEYXRlIjppPWZNKHQscE0uTG9uZyk7YnJlYWs7Y2FzZSJmdWxsRGF0ZSI6aT1mTSh0LHBNLkZ1bGwpO2JyZWFrO2Nhc2Uic2hvcnRUaW1lIjppPWdNKHQscE0uU2hvcnQpO2JyZWFrO2Nhc2UibWVkaXVtVGltZSI6aT1nTSh0LHBNLk1lZGl1bSk7YnJlYWs7Y2FzZSJsb25nVGltZSI6aT1nTSh0LHBNLkxvbmcpO2JyZWFrO2Nhc2UiZnVsbFRpbWUiOmk9Z00odCxwTS5GdWxsKTticmVhaztjYXNlInNob3J0Ijpjb25zdCBlPUFNKHQsInNob3J0VGltZSIpLG49QU0odCwic2hvcnREYXRlIik7aT1STShoTSh0LHBNLlNob3J0KSxbZSxuXSk7YnJlYWs7Y2FzZSJtZWRpdW0iOmNvbnN0IG89QU0odCwibWVkaXVtVGltZSIpLGE9QU0odCwibWVkaXVtRGF0ZSIpO2k9Uk0oaE0odCxwTS5NZWRpdW0pLFtvLGFdKTticmVhaztjYXNlImxvbmciOmNvbnN0IHI9QU0odCwibG9uZ1RpbWUiKSxzPUFNKHQsImxvbmdEYXRlIik7aT1STShoTSh0LHBNLkxvbmcpLFtyLHNdKTticmVhaztjYXNlImZ1bGwiOmNvbnN0IGw9QU0odCwiZnVsbFRpbWUiKSxjPUFNKHQsImZ1bGxEYXRlIik7aT1STShoTSh0LHBNLkZ1bGwpLFtsLGNdKX1yZXR1cm4gaSYmKE9NW25dW2VdPWkpLGl9ZnVuY3Rpb24gUk0odCxlKXtyZXR1cm4gZSYmKHQ9dC5yZXBsYWNlKC9ceyhbXn1dKyl9L2csKGZ1bmN0aW9uKHQsbil7cmV0dXJuIG51bGwhPWUmJm4gaW4gZT9lW25dOnR9KSkpLHR9ZnVuY3Rpb24gVE0odCxlLG49Ii0iLG8saSl7bGV0IGE9IiI7KHQ8MHx8aSYmdDw9MCkmJihpP3Q9MS10Oih0PS10LGE9bikpO2xldCByPVN0cmluZyh0KTtmb3IoO3IubGVuZ3RoPGU7KXI9IjAiK3I7cmV0dXJuIG8mJihyPXIuc3Vic3RyKHIubGVuZ3RoLWUpKSxhK3J9ZnVuY3Rpb24gTk0odCxlLG49MCxvPSExLGk9ITEpe3JldHVybiBmdW5jdGlvbihhLHIpe2xldCBzPShmdW5jdGlvbiBsKHQsZSl7c3dpdGNoKHQpe2Nhc2Uga00uRnVsbFllYXI6cmV0dXJuIGUuZ2V0RnVsbFllYXIoKTtjYXNlIGtNLk1vbnRoOnJldHVybiBlLmdldE1vbnRoKCk7Y2FzZSBrTS5EYXRlOnJldHVybiBlLmdldERhdGUoKTtjYXNlIGtNLkhvdXJzOnJldHVybiBlLmdldEhvdXJzKCk7Y2FzZSBrTS5NaW51dGVzOnJldHVybiBlLmdldE1pbnV0ZXMoKTtjYXNlIGtNLlNlY29uZHM6cmV0dXJuIGUuZ2V0U2Vjb25kcygpO2Nhc2Uga00uRnJhY3Rpb25hbFNlY29uZHM6cmV0dXJuIGUuZ2V0TWlsbGlzZWNvbmRzKCk7Y2FzZSBrTS5EYXk6cmV0dXJuIGUuZ2V0RGF5KCk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gRGF0ZVR5cGUgdmFsdWUgIiR7dH0iLmApfX0pKHQsYSk7aWYoKG4+MHx8cz4tbikmJihzKz1uKSx0PT09a00uSG91cnMpMD09PXMmJi0xMj09PW4mJihzPTEyKTtlbHNlIGlmKHQ9PT1rTS5GcmFjdGlvbmFsU2Vjb25kcylyZXR1cm4oZnVuY3Rpb24gYyh0LGUpe3JldHVybiBUTSh0LDMpLnN1YnN0cigwLGUpfSkocyxlKTtjb25zdCBkPWJNKHIsbU0uTWludXNTaWduKTtyZXR1cm4gVE0ocyxlLGQsbyxpKX19ZnVuY3Rpb24gSU0odCxlLG49Y00uRm9ybWF0LG89ITEpe3JldHVybiBmdW5jdGlvbihpLGEpe3JldHVybihmdW5jdGlvbiByKHQsZSxuLG8saSxhKXtzd2l0Y2gobil7Y2FzZSBTTS5Nb250aHM6cmV0dXJuKGZ1bmN0aW9uIHIodCxlLG4pe2NvbnN0IG89VGYodCksaT1NTShbb1t6Zi5Nb250aHNGb3JtYXRdLG9bemYuTW9udGhzU3RhbmRhbG9uZV1dLGUpO3JldHVybiBNTShpLG4pfSkoZSxpLG8pW3QuZ2V0TW9udGgoKV07Y2FzZSBTTS5EYXlzOnJldHVybihmdW5jdGlvbiBzKHQsZSxuKXtjb25zdCBvPVRmKHQpLGk9TU0oW29bemYuRGF5c0Zvcm1hdF0sb1t6Zi5EYXlzU3RhbmRhbG9uZV1dLGUpO3JldHVybiBNTShpLG4pfSkoZSxpLG8pW3QuZ2V0RGF5KCldO2Nhc2UgU00uRGF5UGVyaW9kczpjb25zdCByPXQuZ2V0SG91cnMoKSxzPXQuZ2V0TWludXRlcygpO2lmKGEpe2NvbnN0IHQ9KGZ1bmN0aW9uIGwodCl7Y29uc3QgZT1UZih0KTtyZXR1cm4gQ00oZSksKGVbemYuRXh0cmFEYXRhXVsyXXx8W10pLm1hcCgodD0+InN0cmluZyI9PXR5cGVvZiB0P3ZNKHQpOlt2TSh0WzBdKSx2TSh0WzFdKV0pKX0pKGUpLG49KGZ1bmN0aW9uIGModCxlLG4pe2NvbnN0IG89VGYodCk7Q00obyk7Y29uc3QgaT1NTShbb1t6Zi5FeHRyYURhdGFdWzBdLG9bemYuRXh0cmFEYXRhXVsxXV0sZSl8fFtdO3JldHVybiBNTShpLG4pfHxbXX0pKGUsaSxvKSxhPXQuZmluZEluZGV4KCh0PT57aWYoQXJyYXkuaXNBcnJheSh0KSl7Y29uc3RbZSxuXT10LG89cj49ZS5ob3VycyYmcz49ZS5taW51dGVzLGk9cjxuLmhvdXJzfHxyPT09bi5ob3VycyYmczxuLm1pbnV0ZXM7aWYoZS5ob3VyczxuLmhvdXJzKXtpZihvJiZpKXJldHVybiEwfWVsc2UgaWYob3x8aSlyZXR1cm4hMH1lbHNlIGlmKHQuaG91cnM9PT1yJiZ0Lm1pbnV0ZXM9PT1zKXJldHVybiEwO3JldHVybiExfSkpO2lmKC0xIT09YSlyZXR1cm4gblthXX1yZXR1cm4oZnVuY3Rpb24gZCh0LGUsbil7Y29uc3Qgbz1UZih0KSxpPU1NKFtvW3pmLkRheVBlcmlvZHNGb3JtYXRdLG9bemYuRGF5UGVyaW9kc1N0YW5kYWxvbmVdXSxlKTtyZXR1cm4gTU0oaSxuKX0pKGUsaSxvKVtyPDEyPzA6MV07Y2FzZSBTTS5FcmFzOnJldHVybihmdW5jdGlvbiBwKHQsZSl7cmV0dXJuIE1NKFRmKHQpW3pmLkVyYXNdLGUpfSkoZSxvKVt0LmdldEZ1bGxZZWFyKCk8PTA/MDoxXTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgdW5leHBlY3RlZCB0cmFuc2xhdGlvbiB0eXBlICR7bn1gKX19KShpLGEsdCxlLG4sbyl9fWZ1bmN0aW9uIHpNKHQpe3JldHVybiBmdW5jdGlvbihlLG4sbyl7Y29uc3QgaT0tMSpvLGE9Yk0obixtTS5NaW51c1NpZ24pLHI9aT4wP01hdGguZmxvb3IoaS82MCk6TWF0aC5jZWlsKGkvNjApO3N3aXRjaCh0KXtjYXNlIHdNLlNob3J0OnJldHVybihpPj0wPyIrIjoiIikrVE0ociwyLGEpK1RNKE1hdGguYWJzKGklNjApLDIsYSk7Y2FzZSB3TS5TaG9ydEdNVDpyZXR1cm4iR01UIisoaT49MD8iKyI6IiIpK1RNKHIsMSxhKTtjYXNlIHdNLkxvbmc6cmV0dXJuIkdNVCIrKGk+PTA/IisiOiIiKStUTShyLDIsYSkrIjoiK1RNKE1hdGguYWJzKGklNjApLDIsYSk7Y2FzZSB3TS5FeHRlbmRlZDpyZXR1cm4gMD09PW8/IloiOihpPj0wPyIrIjoiIikrVE0ociwyLGEpKyI6IitUTShNYXRoLmFicyhpJTYwKSwyLGEpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHpvbmUgd2lkdGggIiR7dH0iYCl9fX1mdW5jdGlvbiBITSh0KXtyZXR1cm4gRU0odC5nZXRGdWxsWWVhcigpLHQuZ2V0TW9udGgoKSx0LmdldERhdGUoKSsoNC10LmdldERheSgpKSl9ZnVuY3Rpb24gRk0odCxlPSExKXtyZXR1cm4gZnVuY3Rpb24obixvKXtsZXQgaTtpZihlKXtjb25zdCB0PW5ldyBEYXRlKG4uZ2V0RnVsbFllYXIoKSxuLmdldE1vbnRoKCksMSkuZ2V0RGF5KCktMSxlPW4uZ2V0RGF0ZSgpO2k9MStNYXRoLmZsb29yKChlK3QpLzcpfWVsc2V7Y29uc3QgdD1ITShuKSxlPShmdW5jdGlvbiBhKHQpe2NvbnN0IGU9RU0odCwwLDEpLmdldERheSgpO3JldHVybiBFTSh0LDAsMSsoZTw9ND80OjExKS1lKX0pKHQuZ2V0RnVsbFllYXIoKSksbz10LmdldFRpbWUoKS1lLmdldFRpbWUoKTtpPTErTWF0aC5yb3VuZChvLzYwNDhlNSl9cmV0dXJuIFRNKGksdCxiTShvLG1NLk1pbnVzU2lnbikpfX1mdW5jdGlvbiBMTSh0LGU9ITEpe3JldHVybiBmdW5jdGlvbihuLG8pe3JldHVybiBUTShITShuKS5nZXRGdWxsWWVhcigpLHQsYk0obyxtTS5NaW51c1NpZ24pLGUpfX0hKGZ1bmN0aW9uKHQpe3RbdC5TaG9ydD0wXT0iU2hvcnQiLHRbdC5TaG9ydEdNVD0xXT0iU2hvcnRHTVQiLHRbdC5Mb25nPTJdPSJMb25nIix0W3QuRXh0ZW5kZWQ9M109IkV4dGVuZGVkIn0pKHdNfHwod009e30pKSwoZnVuY3Rpb24odCl7dFt0LkZ1bGxZZWFyPTBdPSJGdWxsWWVhciIsdFt0Lk1vbnRoPTFdPSJNb250aCIsdFt0LkRhdGU9Ml09IkRhdGUiLHRbdC5Ib3Vycz0zXT0iSG91cnMiLHRbdC5NaW51dGVzPTRdPSJNaW51dGVzIix0W3QuU2Vjb25kcz01XT0iU2Vjb25kcyIsdFt0LkZyYWN0aW9uYWxTZWNvbmRzPTZdPSJGcmFjdGlvbmFsU2Vjb25kcyIsdFt0LkRheT03XT0iRGF5In0pKGtNfHwoa009e30pKSwoZnVuY3Rpb24odCl7dFt0LkRheVBlcmlvZHM9MF09IkRheVBlcmlvZHMiLHRbdC5EYXlzPTFdPSJEYXlzIix0W3QuTW9udGhzPTJdPSJNb250aHMiLHRbdC5FcmFzPTNdPSJFcmFzIn0pKFNNfHwoU009e30pKTtjb25zdCBCTT17fTtmdW5jdGlvbiBWTSh0LGUpe3Q9dC5yZXBsYWNlKC86L2csIiIpO2NvbnN0IG49RGF0ZS5wYXJzZSgiSmFuIDAxLCAxOTcwIDAwOjAwOjAwICIrdCkvNmU0O3JldHVybiBpc05hTihuKT9lOm59ZnVuY3Rpb24gak0odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBEYXRlJiYhaXNOYU4odC52YWx1ZU9mKCkpfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jb25zdCBVTT0vXihcZCspP1wuKChcZCspKC0oXGQrKSk/KT8kLyxXTT0iLiIsR009IjAiO2Z1bmN0aW9uIFlNKHQsZSxuLG8saSxhLHI9ITEpe2xldCBzPSIiLGw9ITE7aWYoaXNGaW5pdGUodCkpe2xldCBjPShmdW5jdGlvbiBjKHQpe2xldCBlLG4sbyxpLGEscj1NYXRoLmFicyh0KSsiIixzPTA7Zm9yKChuPXIuaW5kZXhPZihXTSkpPi0xJiYocj1yLnJlcGxhY2UoV00sIiIpKSwobz1yLnNlYXJjaCgvZS9pKSk+MD8objwwJiYobj1vKSxuKz0rci5zbGljZShvKzEpLHI9ci5zdWJzdHJpbmcoMCxvKSk6bjwwJiYobj1yLmxlbmd0aCksbz0wO3IuY2hhckF0KG8pPT09R007bysrKTtpZihvPT09KGE9ci5sZW5ndGgpKWU9WzBdLG49MTtlbHNle2ZvcihhLS07ci5jaGFyQXQoYSk9PT1HTTspYS0tO2ZvcihuLT1vLGU9W10saT0wO288PWE7bysrLGkrKyllW2ldPU51bWJlcihyLmNoYXJBdChvKSl9cmV0dXJuIG4+MjImJihlPWUuc3BsaWNlKDAsMjEpLHM9bi0xLG49MSkse2RpZ2l0czplLGV4cG9uZW50OnMsaW50ZWdlckxlbjpufX0pKHQpO3ImJihjPShmdW5jdGlvbiBkKHQpe2lmKDA9PT10LmRpZ2l0c1swXSlyZXR1cm4gdDtjb25zdCBlPXQuZGlnaXRzLmxlbmd0aC10LmludGVnZXJMZW47cmV0dXJuIHQuZXhwb25lbnQ/dC5leHBvbmVudCs9MjooMD09PWU/dC5kaWdpdHMucHVzaCgwLDApOjE9PT1lJiZ0LmRpZ2l0cy5wdXNoKDApLHQuaW50ZWdlckxlbis9MiksdH0pKGMpKTtsZXQgZD1lLm1pbkludCxwPWUubWluRnJhYyxtPWUubWF4RnJhYztpZihhKXtjb25zdCB0PWEubWF0Y2goVU0pO2lmKG51bGw9PT10KXRocm93IG5ldyBFcnJvcihgJHthfSBpcyBub3QgYSB2YWxpZCBkaWdpdCBpbmZvYCk7Y29uc3QgZT10WzFdLG49dFszXSxvPXRbNV07bnVsbCE9ZSYmKGQ9WE0oZSkpLG51bGwhPW4mJihwPVhNKG4pKSxudWxsIT1vP209WE0obyk6bnVsbCE9biYmcD5tJiYobT1wKX0hKGZ1bmN0aW9uIHAodCxlLG4pe2lmKGU+bil0aHJvdyBuZXcgRXJyb3IoYFRoZSBtaW5pbXVtIG51bWJlciBvZiBkaWdpdHMgYWZ0ZXIgZnJhY3Rpb24gKCR7ZX0pIGlzIGhpZ2hlciB0aGFuIHRoZSBtYXhpbXVtICgke259KS5gKTtsZXQgbz10LmRpZ2l0cyxpPW8ubGVuZ3RoLXQuaW50ZWdlckxlbjtjb25zdCBhPU1hdGgubWluKE1hdGgubWF4KGUsaSksbik7bGV0IHI9YSt0LmludGVnZXJMZW4scz1vW3JdO2lmKHI+MCl7by5zcGxpY2UoTWF0aC5tYXgodC5pbnRlZ2VyTGVuLHIpKTtmb3IobGV0IHQ9cjt0PG8ubGVuZ3RoO3QrKylvW3RdPTB9ZWxzZXtpPU1hdGgubWF4KDAsaSksdC5pbnRlZ2VyTGVuPTEsby5sZW5ndGg9TWF0aC5tYXgoMSxyPWErMSksb1swXT0wO2ZvcihsZXQgdD0xO3Q8cjt0Kyspb1t0XT0wfWlmKHM+PTUpaWYoci0xPDApe2ZvcihsZXQgZT0wO2U+cjtlLS0pby51bnNoaWZ0KDApLHQuaW50ZWdlckxlbisrO28udW5zaGlmdCgxKSx0LmludGVnZXJMZW4rK31lbHNlIG9bci0xXSsrO2Zvcig7aTxNYXRoLm1heCgwLGEpO2krKylvLnB1c2goMCk7bGV0IGw9MCE9PWE7Y29uc3QgYz1lK3QuaW50ZWdlckxlbixkPW8ucmVkdWNlUmlnaHQoKGZ1bmN0aW9uKHQsZSxuLG8pe3JldHVybiBvW25dPShlKz10KTwxMD9lOmUtMTAsbCYmKDA9PT1vW25dJiZuPj1jP28ucG9wKCk6bD0hMSksZT49MTA/MTowfSksMCk7ZCYmKG8udW5zaGlmdChkKSx0LmludGVnZXJMZW4rKyl9KShjLHAsbSk7bGV0IHU9Yy5kaWdpdHMsZj1jLmludGVnZXJMZW47Y29uc3QgZz1jLmV4cG9uZW50O2xldCBoPVtdO2ZvcihsPXUuZXZlcnkoKHQ9PiF0KSk7ZjxkO2YrKyl1LnVuc2hpZnQoMCk7Zm9yKDtmPDA7ZisrKXUudW5zaGlmdCgwKTtmPjA/aD11LnNwbGljZShmLHUubGVuZ3RoKTooaD11LHU9WzBdKTtjb25zdCBiPVtdO2Zvcih1Lmxlbmd0aD49ZS5sZ1NpemUmJmIudW5zaGlmdCh1LnNwbGljZSgtZS5sZ1NpemUsdS5sZW5ndGgpLmpvaW4oIiIpKTt1Lmxlbmd0aD5lLmdTaXplOyliLnVuc2hpZnQodS5zcGxpY2UoLWUuZ1NpemUsdS5sZW5ndGgpLmpvaW4oIiIpKTt1Lmxlbmd0aCYmYi51bnNoaWZ0KHUuam9pbigiIikpLHM9Yi5qb2luKGJNKG4sbykpLGgubGVuZ3RoJiYocys9Yk0obixpKStoLmpvaW4oIiIpKSxnJiYocys9Yk0obixtTS5FeHBvbmVudGlhbCkrIisiK2cpfWVsc2Ugcz1iTShuLG1NLkluZmluaXR5KTtyZXR1cm4gcz10PDAmJiFsP2UubmVnUHJlK3MrZS5uZWdTdWY6ZS5wb3NQcmUrcytlLnBvc1N1ZixzfWZ1bmN0aW9uIHFNKHQsZSxuKXtyZXR1cm4gWU0odCxaTSh5TShlLHNNLkRlY2ltYWwpLGJNKGUsbU0uTWludXNTaWduKSksZSxtTS5Hcm91cCxtTS5EZWNpbWFsLG4pfWZ1bmN0aW9uIFpNKHQsZT0iLSIpe2NvbnN0IG49e21pbkludDoxLG1pbkZyYWM6MCxtYXhGcmFjOjAscG9zUHJlOiIiLHBvc1N1ZjoiIixuZWdQcmU6IiIsbmVnU3VmOiIiLGdTaXplOjAsbGdTaXplOjB9LG89dC5zcGxpdCgiOyIpLGk9b1swXSxhPW9bMV0scj0tMSE9PWkuaW5kZXhPZihXTSk/aS5zcGxpdChXTSk6W2kuc3Vic3RyaW5nKDAsaS5sYXN0SW5kZXhPZihHTSkrMSksaS5zdWJzdHJpbmcoaS5sYXN0SW5kZXhPZihHTSkrMSldLHM9clswXSxsPXJbMV18fCIiO24ucG9zUHJlPXMuc3Vic3RyKDAscy5pbmRleE9mKCIjIikpO2ZvcihsZXQgdD0wO3Q8bC5sZW5ndGg7dCsrKXtjb25zdCBlPWwuY2hhckF0KHQpO2U9PT1HTT9uLm1pbkZyYWM9bi5tYXhGcmFjPXQrMToiIyI9PT1lP24ubWF4RnJhYz10KzE6bi5wb3NTdWYrPWV9Y29uc3QgYz1zLnNwbGl0KCIsIik7aWYobi5nU2l6ZT1jWzFdP2NbMV0ubGVuZ3RoOjAsbi5sZ1NpemU9Y1syXXx8Y1sxXT8oY1syXXx8Y1sxXSkubGVuZ3RoOjAsYSl7Y29uc3QgdD1pLmxlbmd0aC1uLnBvc1ByZS5sZW5ndGgtbi5wb3NTdWYubGVuZ3RoLGU9YS5pbmRleE9mKCIjIik7bi5uZWdQcmU9YS5zdWJzdHIoMCxlKS5yZXBsYWNlKC8nL2csIiIpLG4ubmVnU3VmPWEuc3Vic3RyKGUrdCkucmVwbGFjZSgvJy9nLCIiKX1lbHNlIG4ubmVnUHJlPWUrbi5wb3NQcmUsbi5uZWdTdWY9bi5wb3NTdWY7cmV0dXJuIG59ZnVuY3Rpb24gWE0odCl7Y29uc3QgZT1wYXJzZUludCh0KTtpZihpc05hTihlKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaW50ZWdlciBsaXRlcmFsIHdoZW4gcGFyc2luZyAiK3QpO3JldHVybiBlfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jbGFzcyBLTXt9ZnVuY3Rpb24gSk0odCxlLG4sbyl7bGV0IGk9YD0ke3R9YDtpZihlLmluZGV4T2YoaSk+LTEpcmV0dXJuIGk7aWYoaT1uLmdldFBsdXJhbENhdGVnb3J5KHQsbyksZS5pbmRleE9mKGkpPi0xKXJldHVybiBpO2lmKGUuaW5kZXhPZigib3RoZXIiKT4tMSlyZXR1cm4ib3RoZXIiO3Rocm93IG5ldyBFcnJvcihgTm8gcGx1cmFsIG1lc3NhZ2UgZm91bmQgZm9yIHZhbHVlICIke3R9ImApfWNsYXNzIFFNIGV4dGVuZHMgS017Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLmxvY2FsZT10fWdldFBsdXJhbENhdGVnb3J5KHQsZSl7c3dpdGNoKF9NKGV8fHRoaXMubG9jYWxlKSh0KSl7Y2FzZSBsTS5aZXJvOnJldHVybiJ6ZXJvIjtjYXNlIGxNLk9uZTpyZXR1cm4ib25lIjtjYXNlIGxNLlR3bzpyZXR1cm4idHdvIjtjYXNlIGxNLkZldzpyZXR1cm4iZmV3IjtjYXNlIGxNLk1hbnk6cmV0dXJuIm1hbnkiO2RlZmF1bHQ6cmV0dXJuIm90aGVyIn19fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KZnVuY3Rpb24gJE0odCxlKXtlPWVuY29kZVVSSUNvbXBvbmVudChlKTtmb3IoY29uc3QgbiBvZiB0LnNwbGl0KCI7Iikpe2NvbnN0IHQ9bi5pbmRleE9mKCI9IiksW28saV09LTE9PXQ/W24sIiJdOltuLnNsaWNlKDAsdCksbi5zbGljZSh0KzEpXTtpZihvLnRyaW0oKT09PWUpcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChpKX1yZXR1cm4gbnVsbH0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovUU0uybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFFNKSh1cyhCXykpfSxRTS7JtXByb3Y9bG8oe3Rva2VuOlFNLGZhY3Rvcnk6UU0uybVmYWN9KSxRTS5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltCX119XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoUU0sW3t0eXBlOkptfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltCX119XX1dfSksbnVsbCk7Y2xhc3MgdHZ7Y29uc3RydWN0b3IodCxlLG4sbyl7dGhpcy5faXRlcmFibGVEaWZmZXJzPXQsdGhpcy5fa2V5VmFsdWVEaWZmZXJzPWUsdGhpcy5fbmdFbD1uLHRoaXMuX3JlbmRlcmVyPW8sdGhpcy5faXRlcmFibGVEaWZmZXI9bnVsbCx0aGlzLl9rZXlWYWx1ZURpZmZlcj1udWxsLHRoaXMuX2luaXRpYWxDbGFzc2VzPVtdLHRoaXMuX3Jhd0NsYXNzPW51bGx9c2V0IGtsYXNzKHQpe3RoaXMuX3JlbW92ZUNsYXNzZXModGhpcy5faW5pdGlhbENsYXNzZXMpLHRoaXMuX2luaXRpYWxDbGFzc2VzPSJzdHJpbmciPT10eXBlb2YgdD90LnNwbGl0KC9ccysvKTpbXSx0aGlzLl9hcHBseUNsYXNzZXModGhpcy5faW5pdGlhbENsYXNzZXMpLHRoaXMuX2FwcGx5Q2xhc3Nlcyh0aGlzLl9yYXdDbGFzcyl9c2V0IG5nQ2xhc3ModCl7dGhpcy5fcmVtb3ZlQ2xhc3Nlcyh0aGlzLl9yYXdDbGFzcyksdGhpcy5fYXBwbHlDbGFzc2VzKHRoaXMuX2luaXRpYWxDbGFzc2VzKSx0aGlzLl9pdGVyYWJsZURpZmZlcj1udWxsLHRoaXMuX2tleVZhbHVlRGlmZmVyPW51bGwsdGhpcy5fcmF3Q2xhc3M9InN0cmluZyI9PXR5cGVvZiB0P3Quc3BsaXQoL1xzKy8pOnQsdGhpcy5fcmF3Q2xhc3MmJih3bSh0aGlzLl9yYXdDbGFzcyk/dGhpcy5faXRlcmFibGVEaWZmZXI9dGhpcy5faXRlcmFibGVEaWZmZXJzLmZpbmQodGhpcy5fcmF3Q2xhc3MpLmNyZWF0ZSgpOnRoaXMuX2tleVZhbHVlRGlmZmVyPXRoaXMuX2tleVZhbHVlRGlmZmVycy5maW5kKHRoaXMuX3Jhd0NsYXNzKS5jcmVhdGUoKSl9bmdEb0NoZWNrKCl7aWYodGhpcy5faXRlcmFibGVEaWZmZXIpe2NvbnN0IHQ9dGhpcy5faXRlcmFibGVEaWZmZXIuZGlmZih0aGlzLl9yYXdDbGFzcyk7dCYmdGhpcy5fYXBwbHlJdGVyYWJsZUNoYW5nZXModCl9ZWxzZSBpZih0aGlzLl9rZXlWYWx1ZURpZmZlcil7Y29uc3QgdD10aGlzLl9rZXlWYWx1ZURpZmZlci5kaWZmKHRoaXMuX3Jhd0NsYXNzKTt0JiZ0aGlzLl9hcHBseUtleVZhbHVlQ2hhbmdlcyh0KX19X2FwcGx5S2V5VmFsdWVDaGFuZ2VzKHQpe3QuZm9yRWFjaEFkZGVkSXRlbSgodD0+dGhpcy5fdG9nZ2xlQ2xhc3ModC5rZXksdC5jdXJyZW50VmFsdWUpKSksdC5mb3JFYWNoQ2hhbmdlZEl0ZW0oKHQ9PnRoaXMuX3RvZ2dsZUNsYXNzKHQua2V5LHQuY3VycmVudFZhbHVlKSkpLHQuZm9yRWFjaFJlbW92ZWRJdGVtKCh0PT57dC5wcmV2aW91c1ZhbHVlJiZ0aGlzLl90b2dnbGVDbGFzcyh0LmtleSwhMSl9KSl9X2FwcGx5SXRlcmFibGVDaGFuZ2VzKHQpe3QuZm9yRWFjaEFkZGVkSXRlbSgodD0+e2lmKCJzdHJpbmciIT10eXBlb2YgdC5pdGVtKXRocm93IG5ldyBFcnJvcihgTmdDbGFzcyBjYW4gb25seSB0b2dnbGUgQ1NTIGNsYXNzZXMgZXhwcmVzc2VkIGFzIHN0cmluZ3MsIGdvdCAke1JuKHQuaXRlbSl9YCk7dGhpcy5fdG9nZ2xlQ2xhc3ModC5pdGVtLCEwKX0pKSx0LmZvckVhY2hSZW1vdmVkSXRlbSgodD0+dGhpcy5fdG9nZ2xlQ2xhc3ModC5pdGVtLCExKSkpfV9hcHBseUNsYXNzZXModCl7dCYmKEFycmF5LmlzQXJyYXkodCl8fHQgaW5zdGFuY2VvZiBTZXQ/dC5mb3JFYWNoKCh0PT50aGlzLl90b2dnbGVDbGFzcyh0LCEwKSkpOk9iamVjdC5rZXlzKHQpLmZvckVhY2goKGU9PnRoaXMuX3RvZ2dsZUNsYXNzKGUsISF0W2VdKSkpKX1fcmVtb3ZlQ2xhc3Nlcyh0KXt0JiYoQXJyYXkuaXNBcnJheSh0KXx8dCBpbnN0YW5jZW9mIFNldD90LmZvckVhY2goKHQ9PnRoaXMuX3RvZ2dsZUNsYXNzKHQsITEpKSk6T2JqZWN0LmtleXModCkuZm9yRWFjaCgodD0+dGhpcy5fdG9nZ2xlQ2xhc3ModCwhMSkpKSl9X3RvZ2dsZUNsYXNzKHQsZSl7KHQ9dC50cmltKCkpJiZ0LnNwbGl0KC9ccysvZykuZm9yRWFjaCgodD0+e2U/dGhpcy5fcmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LHQpOnRoaXMuX3JlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuX25nRWwubmF0aXZlRWxlbWVudCx0KX0pKX19dHYuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHR2KShNdShFaCksTXUoUmgpLE11KGNoKSxNdSh1aCkpfSx0di7JtWRpcj1Kbyh7dHlwZTp0dixzZWxlY3RvcnM6W1siIiwibmdDbGFzcyIsIiJdXSxpbnB1dHM6e2tsYXNzOlsiY2xhc3MiLCJrbGFzcyJdLG5nQ2xhc3M6Im5nQ2xhc3MifX0pLHR2LmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6RWh9LHt0eXBlOlJofSx7dHlwZTpjaH0se3R5cGU6dWh9XSx0di5wcm9wRGVjb3JhdG9ycz17a2xhc3M6W3t0eXBlOnlfLGFyZ3M6WyJjbGFzcyJdfV0sbmdDbGFzczpbe3R5cGU6eV8sYXJnczpbIm5nQ2xhc3MiXX1dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHR2LFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6IltuZ0NsYXNzXSJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpFaH0se3R5cGU6Umh9LHt0eXBlOmNofSx7dHlwZTp1aH1dfSkse2tsYXNzOlt7dHlwZTp5XyxhcmdzOlsiY2xhc3MiXX1dLG5nQ2xhc3M6W3t0eXBlOnlfLGFyZ3M6WyJuZ0NsYXNzIl19XX0pOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3MgZXZ7Y29uc3RydWN0b3IodCl7dGhpcy5fdmlld0NvbnRhaW5lclJlZj10LHRoaXMuX2NvbXBvbmVudFJlZj1udWxsLHRoaXMuX21vZHVsZVJlZj1udWxsfW5nT25DaGFuZ2VzKHQpe2lmKHRoaXMuX3ZpZXdDb250YWluZXJSZWYuY2xlYXIoKSx0aGlzLl9jb21wb25lbnRSZWY9bnVsbCx0aGlzLm5nQ29tcG9uZW50T3V0bGV0KXtjb25zdCBlPXRoaXMubmdDb21wb25lbnRPdXRsZXRJbmplY3Rvcnx8dGhpcy5fdmlld0NvbnRhaW5lclJlZi5wYXJlbnRJbmplY3RvcjtpZih0Lm5nQ29tcG9uZW50T3V0bGV0TmdNb2R1bGVGYWN0b3J5KWlmKHRoaXMuX21vZHVsZVJlZiYmdGhpcy5fbW9kdWxlUmVmLmRlc3Ryb3koKSx0aGlzLm5nQ29tcG9uZW50T3V0bGV0TmdNb2R1bGVGYWN0b3J5KXtjb25zdCB0PWUuZ2V0KFpoKTt0aGlzLl9tb2R1bGVSZWY9dGhpcy5uZ0NvbXBvbmVudE91dGxldE5nTW9kdWxlRmFjdG9yeS5jcmVhdGUodC5pbmplY3Rvcil9ZWxzZSB0aGlzLl9tb2R1bGVSZWY9bnVsbDtjb25zdCBuPSh0aGlzLl9tb2R1bGVSZWY/dGhpcy5fbW9kdWxlUmVmLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjplLmdldChyaCkpLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KHRoaXMubmdDb21wb25lbnRPdXRsZXQpO3RoaXMuX2NvbXBvbmVudFJlZj10aGlzLl92aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChuLHRoaXMuX3ZpZXdDb250YWluZXJSZWYubGVuZ3RoLGUsdGhpcy5uZ0NvbXBvbmVudE91dGxldENvbnRlbnQpfX1uZ09uRGVzdHJveSgpe3RoaXMuX21vZHVsZVJlZiYmdGhpcy5fbW9kdWxlUmVmLmRlc3Ryb3koKX19ZXYuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGV2KShNdShYaCkpfSxldi7JtWRpcj1Kbyh7dHlwZTpldixzZWxlY3RvcnM6W1siIiwibmdDb21wb25lbnRPdXRsZXQiLCIiXV0saW5wdXRzOntuZ0NvbXBvbmVudE91dGxldDoibmdDb21wb25lbnRPdXRsZXQiLG5nQ29tcG9uZW50T3V0bGV0SW5qZWN0b3I6Im5nQ29tcG9uZW50T3V0bGV0SW5qZWN0b3IiLG5nQ29tcG9uZW50T3V0bGV0Q29udGVudDoibmdDb21wb25lbnRPdXRsZXRDb250ZW50IixuZ0NvbXBvbmVudE91dGxldE5nTW9kdWxlRmFjdG9yeToibmdDb21wb25lbnRPdXRsZXROZ01vZHVsZUZhY3RvcnkifSxmZWF0dXJlczpbU2ldfSksZXYuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpYaH1dLGV2LnByb3BEZWNvcmF0b3JzPXtuZ0NvbXBvbmVudE91dGxldDpbe3R5cGU6eV99XSxuZ0NvbXBvbmVudE91dGxldEluamVjdG9yOlt7dHlwZTp5X31dLG5nQ29tcG9uZW50T3V0bGV0Q29udGVudDpbe3R5cGU6eV99XSxuZ0NvbXBvbmVudE91dGxldE5nTW9kdWxlRmFjdG9yeTpbe3R5cGU6eV99XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihldixbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJbbmdDb21wb25lbnRPdXRsZXRdIn1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOlhofV19KSx7bmdDb21wb25lbnRPdXRsZXQ6W3t0eXBlOnlffV0sbmdDb21wb25lbnRPdXRsZXRJbmplY3Rvcjpbe3R5cGU6eV99XSxuZ0NvbXBvbmVudE91dGxldENvbnRlbnQ6W3t0eXBlOnlffV0sbmdDb21wb25lbnRPdXRsZXROZ01vZHVsZUZhY3Rvcnk6W3t0eXBlOnlffV19KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIG52e2NvbnN0cnVjdG9yKHQsZSxuLG8pe3RoaXMuJGltcGxpY2l0PXQsdGhpcy5uZ0Zvck9mPWUsdGhpcy5pbmRleD1uLHRoaXMuY291bnQ9b31nZXQgZmlyc3QoKXtyZXR1cm4gMD09PXRoaXMuaW5kZXh9Z2V0IGxhc3QoKXtyZXR1cm4gdGhpcy5pbmRleD09PXRoaXMuY291bnQtMX1nZXQgZXZlbigpe3JldHVybiB0aGlzLmluZGV4JTI9PTB9Z2V0IG9kZCgpe3JldHVybiF0aGlzLmV2ZW59fWNsYXNzIG92e2NvbnN0cnVjdG9yKHQsZSxuKXt0aGlzLl92aWV3Q29udGFpbmVyPXQsdGhpcy5fdGVtcGxhdGU9ZSx0aGlzLl9kaWZmZXJzPW4sdGhpcy5fbmdGb3JPZj1udWxsLHRoaXMuX25nRm9yT2ZEaXJ0eT0hMCx0aGlzLl9kaWZmZXI9bnVsbH1zZXQgbmdGb3JPZih0KXt0aGlzLl9uZ0Zvck9mPXQsdGhpcy5fbmdGb3JPZkRpcnR5PSEwfXNldCBuZ0ZvclRyYWNrQnkodCl7InVuZGVmaW5lZCIhPXR5cGVvZiBuZ0Rldk1vZGUmJiFuZ0Rldk1vZGV8fG51bGw9PXR8fCJmdW5jdGlvbiI9PXR5cGVvZiB0fHxjb25zb2xlJiZjb25zb2xlLndhcm4mJmNvbnNvbGUud2FybihgdHJhY2tCeSBtdXN0IGJlIGEgZnVuY3Rpb24sIGJ1dCByZWNlaXZlZCAke0pTT04uc3RyaW5naWZ5KHQpfS4gU2VlIGh0dHBzOi8vYW5ndWxhci5pby9hcGkvY29tbW9uL05nRm9yT2YjY2hhbmdlLXByb3BhZ2F0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLmApLHRoaXMuX3RyYWNrQnlGbj10fWdldCBuZ0ZvclRyYWNrQnkoKXtyZXR1cm4gdGhpcy5fdHJhY2tCeUZufXNldCBuZ0ZvclRlbXBsYXRlKHQpe3QmJih0aGlzLl90ZW1wbGF0ZT10KX1uZ0RvQ2hlY2soKXtpZih0aGlzLl9uZ0Zvck9mRGlydHkpe3RoaXMuX25nRm9yT2ZEaXJ0eT0hMTtjb25zdCB0PXRoaXMuX25nRm9yT2Y7aWYoIXRoaXMuX2RpZmZlciYmdCl0cnl7dGhpcy5fZGlmZmVyPXRoaXMuX2RpZmZlcnMuZmluZCh0KS5jcmVhdGUodGhpcy5uZ0ZvclRyYWNrQnkpfWNhdGNoKGUpe3Rocm93IG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgYSBkaWZmZXIgc3VwcG9ydGluZyBvYmplY3QgJyR7dH0nIG9mIHR5cGUgJyR7KGZ1bmN0aW9uIHQoZSl7cmV0dXJuIGUubmFtZXx8dHlwZW9mIGV9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLykodCl9Jy4gTmdGb3Igb25seSBzdXBwb3J0cyBiaW5kaW5nIHRvIEl0ZXJhYmxlcyBzdWNoIGFzIEFycmF5cy5gKX19aWYodGhpcy5fZGlmZmVyKXtjb25zdCB0PXRoaXMuX2RpZmZlci5kaWZmKHRoaXMuX25nRm9yT2YpO3QmJnRoaXMuX2FwcGx5Q2hhbmdlcyh0KX19X2FwcGx5Q2hhbmdlcyh0KXtjb25zdCBlPVtdO3QuZm9yRWFjaE9wZXJhdGlvbigoKHQsbixvKT0+e2lmKG51bGw9PXQucHJldmlvdXNJbmRleCl7Y29uc3Qgbj10aGlzLl92aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl90ZW1wbGF0ZSxuZXcgbnYobnVsbCx0aGlzLl9uZ0Zvck9mLC0xLC0xKSxudWxsPT09bz92b2lkIDA6byksaT1uZXcgaXYodCxuKTtlLnB1c2goaSl9ZWxzZSBpZihudWxsPT1vKXRoaXMuX3ZpZXdDb250YWluZXIucmVtb3ZlKG51bGw9PT1uP3ZvaWQgMDpuKTtlbHNlIGlmKG51bGwhPT1uKXtjb25zdCBpPXRoaXMuX3ZpZXdDb250YWluZXIuZ2V0KG4pO3RoaXMuX3ZpZXdDb250YWluZXIubW92ZShpLG8pO2NvbnN0IGE9bmV3IGl2KHQsaSk7ZS5wdXNoKGEpfX0pKTtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyl0aGlzLl9wZXJWaWV3Q2hhbmdlKGVbdF0udmlldyxlW3RdLnJlY29yZCk7Zm9yKGxldCB0PTAsZT10aGlzLl92aWV3Q29udGFpbmVyLmxlbmd0aDt0PGU7dCsrKXtjb25zdCBuPXRoaXMuX3ZpZXdDb250YWluZXIuZ2V0KHQpO24uY29udGV4dC5pbmRleD10LG4uY29udGV4dC5jb3VudD1lLG4uY29udGV4dC5uZ0Zvck9mPXRoaXMuX25nRm9yT2Z9dC5mb3JFYWNoSWRlbnRpdHlDaGFuZ2UoKHQ9Pnt0aGlzLl92aWV3Q29udGFpbmVyLmdldCh0LmN1cnJlbnRJbmRleCkuY29udGV4dC4kaW1wbGljaXQ9dC5pdGVtfSkpfV9wZXJWaWV3Q2hhbmdlKHQsZSl7dC5jb250ZXh0LiRpbXBsaWNpdD1lLml0ZW19c3RhdGljIG5nVGVtcGxhdGVDb250ZXh0R3VhcmQodCxlKXtyZXR1cm4hMH19b3YuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fG92KShNdShYaCksTXUoVWgpLE11KEVoKSl9LG92Lsm1ZGlyPUpvKHt0eXBlOm92LHNlbGVjdG9yczpbWyIiLCJuZ0ZvciIsIiIsIm5nRm9yT2YiLCIiXV0saW5wdXRzOntuZ0Zvck9mOiJuZ0Zvck9mIixuZ0ZvclRyYWNrQnk6Im5nRm9yVHJhY2tCeSIsbmdGb3JUZW1wbGF0ZToibmdGb3JUZW1wbGF0ZSJ9fSksb3YuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpYaH0se3R5cGU6VWh9LHt0eXBlOkVofV0sb3YucHJvcERlY29yYXRvcnM9e25nRm9yT2Y6W3t0eXBlOnlffV0sbmdGb3JUcmFja0J5Olt7dHlwZTp5X31dLG5nRm9yVGVtcGxhdGU6W3t0eXBlOnlffV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIob3YsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoiW25nRm9yXVtuZ0Zvck9mXSJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpYaH0se3R5cGU6VWh9LHt0eXBlOkVofV19KSx7bmdGb3JPZjpbe3R5cGU6eV99XSxuZ0ZvclRyYWNrQnk6W3t0eXBlOnlffV0sbmdGb3JUZW1wbGF0ZTpbe3R5cGU6eV99XX0pO2NsYXNzIGl2e2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5yZWNvcmQ9dCx0aGlzLnZpZXc9ZX19Y2xhc3MgYXZ7Y29uc3RydWN0b3IodCxlKXt0aGlzLl92aWV3Q29udGFpbmVyPXQsdGhpcy5fY29udGV4dD1uZXcgcnYsdGhpcy5fdGhlblRlbXBsYXRlUmVmPW51bGwsdGhpcy5fZWxzZVRlbXBsYXRlUmVmPW51bGwsdGhpcy5fdGhlblZpZXdSZWY9bnVsbCx0aGlzLl9lbHNlVmlld1JlZj1udWxsLHRoaXMuX3RoZW5UZW1wbGF0ZVJlZj1lfXNldCBuZ0lmKHQpe3RoaXMuX2NvbnRleHQuJGltcGxpY2l0PXRoaXMuX2NvbnRleHQubmdJZj10LHRoaXMuX3VwZGF0ZVZpZXcoKX1zZXQgbmdJZlRoZW4odCl7c3YoIm5nSWZUaGVuIix0KSx0aGlzLl90aGVuVGVtcGxhdGVSZWY9dCx0aGlzLl90aGVuVmlld1JlZj1udWxsLHRoaXMuX3VwZGF0ZVZpZXcoKX1zZXQgbmdJZkVsc2UodCl7c3YoIm5nSWZFbHNlIix0KSx0aGlzLl9lbHNlVGVtcGxhdGVSZWY9dCx0aGlzLl9lbHNlVmlld1JlZj1udWxsLHRoaXMuX3VwZGF0ZVZpZXcoKX1fdXBkYXRlVmlldygpe3RoaXMuX2NvbnRleHQuJGltcGxpY2l0P3RoaXMuX3RoZW5WaWV3UmVmfHwodGhpcy5fdmlld0NvbnRhaW5lci5jbGVhcigpLHRoaXMuX2Vsc2VWaWV3UmVmPW51bGwsdGhpcy5fdGhlblRlbXBsYXRlUmVmJiYodGhpcy5fdGhlblZpZXdSZWY9dGhpcy5fdmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fdGhlblRlbXBsYXRlUmVmLHRoaXMuX2NvbnRleHQpKSk6dGhpcy5fZWxzZVZpZXdSZWZ8fCh0aGlzLl92aWV3Q29udGFpbmVyLmNsZWFyKCksdGhpcy5fdGhlblZpZXdSZWY9bnVsbCx0aGlzLl9lbHNlVGVtcGxhdGVSZWYmJih0aGlzLl9lbHNlVmlld1JlZj10aGlzLl92aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl9lbHNlVGVtcGxhdGVSZWYsdGhpcy5fY29udGV4dCkpKX1zdGF0aWMgbmdUZW1wbGF0ZUNvbnRleHRHdWFyZCh0LGUpe3JldHVybiEwfX1hdi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8YXYpKE11KFhoKSxNdShVaCkpfSxhdi7JtWRpcj1Kbyh7dHlwZTphdixzZWxlY3RvcnM6W1siIiwibmdJZiIsIiJdXSxpbnB1dHM6e25nSWY6Im5nSWYiLG5nSWZUaGVuOiJuZ0lmVGhlbiIsbmdJZkVsc2U6Im5nSWZFbHNlIn19KSxhdi5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOlhofSx7dHlwZTpVaH1dLGF2LnByb3BEZWNvcmF0b3JzPXtuZ0lmOlt7dHlwZTp5X31dLG5nSWZUaGVuOlt7dHlwZTp5X31dLG5nSWZFbHNlOlt7dHlwZTp5X31dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGF2LFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6IltuZ0lmXSJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpYaH0se3R5cGU6VWh9XX0pLHtuZ0lmOlt7dHlwZTp5X31dLG5nSWZUaGVuOlt7dHlwZTp5X31dLG5nSWZFbHNlOlt7dHlwZTp5X31dfSk7Y2xhc3MgcnZ7Y29uc3RydWN0b3IoKXt0aGlzLiRpbXBsaWNpdD1udWxsLHRoaXMubmdJZj1udWxsfX1mdW5jdGlvbiBzdih0LGUpe2lmKGUmJiFlLmNyZWF0ZUVtYmVkZGVkVmlldyl0aHJvdyBuZXcgRXJyb3IoYCR7dH0gbXVzdCBiZSBhIFRlbXBsYXRlUmVmLCBidXQgcmVjZWl2ZWQgJyR7Um4oZSl9Jy5gKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY2xhc3MgbHZ7Y29uc3RydWN0b3IodCxlKXt0aGlzLl92aWV3Q29udGFpbmVyUmVmPXQsdGhpcy5fdGVtcGxhdGVSZWY9ZSx0aGlzLl9jcmVhdGVkPSExfWNyZWF0ZSgpe3RoaXMuX2NyZWF0ZWQ9ITAsdGhpcy5fdmlld0NvbnRhaW5lclJlZi5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fdGVtcGxhdGVSZWYpfWRlc3Ryb3koKXt0aGlzLl9jcmVhdGVkPSExLHRoaXMuX3ZpZXdDb250YWluZXJSZWYuY2xlYXIoKX1lbmZvcmNlU3RhdGUodCl7dCYmIXRoaXMuX2NyZWF0ZWQ/dGhpcy5jcmVhdGUoKTohdCYmdGhpcy5fY3JlYXRlZCYmdGhpcy5kZXN0cm95KCl9fWNsYXNzIGN2e2NvbnN0cnVjdG9yKCl7dGhpcy5fZGVmYXVsdFVzZWQ9ITEsdGhpcy5fY2FzZUNvdW50PTAsdGhpcy5fbGFzdENhc2VDaGVja0luZGV4PTAsdGhpcy5fbGFzdENhc2VzTWF0Y2hlZD0hMX1zZXQgbmdTd2l0Y2godCl7dGhpcy5fbmdTd2l0Y2g9dCwwPT09dGhpcy5fY2FzZUNvdW50JiZ0aGlzLl91cGRhdGVEZWZhdWx0Q2FzZXMoITApfV9hZGRDYXNlKCl7cmV0dXJuIHRoaXMuX2Nhc2VDb3VudCsrfV9hZGREZWZhdWx0KHQpe3RoaXMuX2RlZmF1bHRWaWV3c3x8KHRoaXMuX2RlZmF1bHRWaWV3cz1bXSksdGhpcy5fZGVmYXVsdFZpZXdzLnB1c2godCl9X21hdGNoQ2FzZSh0KXtjb25zdCBlPXQ9PXRoaXMuX25nU3dpdGNoO3JldHVybiB0aGlzLl9sYXN0Q2FzZXNNYXRjaGVkPXRoaXMuX2xhc3RDYXNlc01hdGNoZWR8fGUsdGhpcy5fbGFzdENhc2VDaGVja0luZGV4KyssdGhpcy5fbGFzdENhc2VDaGVja0luZGV4PT09dGhpcy5fY2FzZUNvdW50JiYodGhpcy5fdXBkYXRlRGVmYXVsdENhc2VzKCF0aGlzLl9sYXN0Q2FzZXNNYXRjaGVkKSx0aGlzLl9sYXN0Q2FzZUNoZWNrSW5kZXg9MCx0aGlzLl9sYXN0Q2FzZXNNYXRjaGVkPSExKSxlfV91cGRhdGVEZWZhdWx0Q2FzZXModCl7aWYodGhpcy5fZGVmYXVsdFZpZXdzJiZ0IT09dGhpcy5fZGVmYXVsdFVzZWQpe3RoaXMuX2RlZmF1bHRVc2VkPXQ7Zm9yKGxldCBlPTA7ZTx0aGlzLl9kZWZhdWx0Vmlld3MubGVuZ3RoO2UrKyl0aGlzLl9kZWZhdWx0Vmlld3NbZV0uZW5mb3JjZVN0YXRlKHQpfX19Y3YuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGN2KX0sY3YuybVkaXI9Sm8oe3R5cGU6Y3Ysc2VsZWN0b3JzOltbIiIsIm5nU3dpdGNoIiwiIl1dLGlucHV0czp7bmdTd2l0Y2g6Im5nU3dpdGNoIn19KSxjdi5wcm9wRGVjb3JhdG9ycz17bmdTd2l0Y2g6W3t0eXBlOnlffV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoY3YsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoiW25nU3dpdGNoXSJ9XX1dLChmdW5jdGlvbigpe3JldHVybltdfSkse25nU3dpdGNoOlt7dHlwZTp5X31dfSk7Y2xhc3MgZHZ7Y29uc3RydWN0b3IodCxlLG4pe3RoaXMubmdTd2l0Y2g9biwidW5kZWZpbmVkIiE9dHlwZW9mIG5nRGV2TW9kZSYmIW5nRGV2TW9kZXx8bnx8bXYoIm5nU3dpdGNoQ2FzZSIsIk5nU3dpdGNoQ2FzZSIpLG4uX2FkZENhc2UoKSx0aGlzLl92aWV3PW5ldyBsdih0LGUpfW5nRG9DaGVjaygpe3RoaXMuX3ZpZXcuZW5mb3JjZVN0YXRlKHRoaXMubmdTd2l0Y2guX21hdGNoQ2FzZSh0aGlzLm5nU3dpdGNoQ2FzZSkpfX1kdi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8ZHYpKE11KFhoKSxNdShVaCksTXUoY3YsOSkpfSxkdi7JtWRpcj1Kbyh7dHlwZTpkdixzZWxlY3RvcnM6W1siIiwibmdTd2l0Y2hDYXNlIiwiIl1dLGlucHV0czp7bmdTd2l0Y2hDYXNlOiJuZ1N3aXRjaENhc2UifX0pLGR2LmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6WGh9LHt0eXBlOlVofSx7dHlwZTpjdixkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6dnN9XX1dLGR2LnByb3BEZWNvcmF0b3JzPXtuZ1N3aXRjaENhc2U6W3t0eXBlOnlffV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoZHYsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoiW25nU3dpdGNoQ2FzZV0ifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6WGh9LHt0eXBlOlVofSx7dHlwZTpjdixkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6dnN9XX1dfSkse25nU3dpdGNoQ2FzZTpbe3R5cGU6eV99XX0pO2NsYXNzIHB2e2NvbnN0cnVjdG9yKHQsZSxuKXsidW5kZWZpbmVkIiE9dHlwZW9mIG5nRGV2TW9kZSYmIW5nRGV2TW9kZXx8bnx8bXYoIm5nU3dpdGNoRGVmYXVsdCIsIk5nU3dpdGNoRGVmYXVsdCIpLG4uX2FkZERlZmF1bHQobmV3IGx2KHQsZSkpfX1mdW5jdGlvbiBtdih0LGUpe3Rocm93IG5ldyBGbigiMzA1IixgQW4gZWxlbWVudCB3aXRoIHRoZSAiJHt0fSIgYXR0cmlidXRlIChtYXRjaGluZyB0aGUgIiR7ZX0iIGRpcmVjdGl2ZSkgbXVzdCBiZSBsb2NhdGVkIGluc2lkZSBhbiBlbGVtZW50IHdpdGggdGhlICJuZ1N3aXRjaCIgYXR0cmlidXRlIChtYXRjaGluZyAiTmdTd2l0Y2giIGRpcmVjdGl2ZSlgKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovcHYuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHB2KShNdShYaCksTXUoVWgpLE11KGN2LDkpKX0scHYuybVkaXI9Sm8oe3R5cGU6cHYsc2VsZWN0b3JzOltbIiIsIm5nU3dpdGNoRGVmYXVsdCIsIiJdXX0pLHB2LmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6WGh9LHt0eXBlOlVofSx7dHlwZTpjdixkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6dnN9XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIocHYsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoiW25nU3dpdGNoRGVmYXVsdF0ifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6WGh9LHt0eXBlOlVofSx7dHlwZTpjdixkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6dnN9XX1dfSksbnVsbCk7Y2xhc3MgdXZ7Y29uc3RydWN0b3IodCl7dGhpcy5fbG9jYWxpemF0aW9uPXQsdGhpcy5fY2FzZVZpZXdzPXt9fXNldCBuZ1BsdXJhbCh0KXt0aGlzLl9zd2l0Y2hWYWx1ZT10LHRoaXMuX3VwZGF0ZVZpZXcoKX1hZGRDYXNlKHQsZSl7dGhpcy5fY2FzZVZpZXdzW3RdPWV9X3VwZGF0ZVZpZXcoKXt0aGlzLl9jbGVhclZpZXdzKCk7Y29uc3QgdD1PYmplY3Qua2V5cyh0aGlzLl9jYXNlVmlld3MpLGU9Sk0odGhpcy5fc3dpdGNoVmFsdWUsdCx0aGlzLl9sb2NhbGl6YXRpb24pO3RoaXMuX2FjdGl2YXRlVmlldyh0aGlzLl9jYXNlVmlld3NbZV0pfV9jbGVhclZpZXdzKCl7dGhpcy5fYWN0aXZlVmlldyYmdGhpcy5fYWN0aXZlVmlldy5kZXN0cm95KCl9X2FjdGl2YXRlVmlldyh0KXt0JiYodGhpcy5fYWN0aXZlVmlldz10LHRoaXMuX2FjdGl2ZVZpZXcuY3JlYXRlKCkpfX11di7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8dXYpKE11KEtNKSl9LHV2Lsm1ZGlyPUpvKHt0eXBlOnV2LHNlbGVjdG9yczpbWyIiLCJuZ1BsdXJhbCIsIiJdXSxpbnB1dHM6e25nUGx1cmFsOiJuZ1BsdXJhbCJ9fSksdXYuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpLTX1dLHV2LnByb3BEZWNvcmF0b3JzPXtuZ1BsdXJhbDpbe3R5cGU6eV99XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYih1dixbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJbbmdQbHVyYWxdIn1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOktNfV19KSx7bmdQbHVyYWw6W3t0eXBlOnlffV19KTtjbGFzcyBmdntjb25zdHJ1Y3Rvcih0LGUsbixvKXt0aGlzLnZhbHVlPXQ7Y29uc3QgaT0haXNOYU4oTnVtYmVyKHQpKTtvLmFkZENhc2UoaT9gPSR7dH1gOnQsbmV3IGx2KG4sZSkpfX1mdi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8ZnYpKE9yKCJuZ1BsdXJhbENhc2UiKSxNdShVaCksTXUoWGgpLE11KHV2LDEpKX0sZnYuybVkaXI9Sm8oe3R5cGU6ZnYsc2VsZWN0b3JzOltbIiIsIm5nUGx1cmFsQ2FzZSIsIiJdXX0pLGZ2LmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOlJyLGFyZ3M6WyJuZ1BsdXJhbENhc2UiXX1dfSx7dHlwZTpVaH0se3R5cGU6WGh9LHt0eXBlOnV2LGRlY29yYXRvcnM6W3t0eXBlOnZzfV19XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGZ2LFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6IltuZ1BsdXJhbENhc2VdIn1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpScixhcmdzOlsibmdQbHVyYWxDYXNlIl19XX0se3R5cGU6VWh9LHt0eXBlOlhofSx7dHlwZTp1dixkZWNvcmF0b3JzOlt7dHlwZTp2c31dfV19KSxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIGd2e2NvbnN0cnVjdG9yKHQsZSxuKXt0aGlzLl9uZ0VsPXQsdGhpcy5fZGlmZmVycz1lLHRoaXMuX3JlbmRlcmVyPW4sdGhpcy5fbmdTdHlsZT1udWxsLHRoaXMuX2RpZmZlcj1udWxsfXNldCBuZ1N0eWxlKHQpe3RoaXMuX25nU3R5bGU9dCwhdGhpcy5fZGlmZmVyJiZ0JiYodGhpcy5fZGlmZmVyPXRoaXMuX2RpZmZlcnMuZmluZCh0KS5jcmVhdGUoKSl9bmdEb0NoZWNrKCl7aWYodGhpcy5fZGlmZmVyKXtjb25zdCB0PXRoaXMuX2RpZmZlci5kaWZmKHRoaXMuX25nU3R5bGUpO3QmJnRoaXMuX2FwcGx5Q2hhbmdlcyh0KX19X3NldFN0eWxlKHQsZSl7Y29uc3RbbixvXT10LnNwbGl0KCIuIik7bnVsbCE9KGU9bnVsbCE9ZSYmbz9gJHtlfSR7b31gOmUpP3RoaXMuX3JlbmRlcmVyLnNldFN0eWxlKHRoaXMuX25nRWwubmF0aXZlRWxlbWVudCxuLGUpOnRoaXMuX3JlbmRlcmVyLnJlbW92ZVN0eWxlKHRoaXMuX25nRWwubmF0aXZlRWxlbWVudCxuKX1fYXBwbHlDaGFuZ2VzKHQpe3QuZm9yRWFjaFJlbW92ZWRJdGVtKCh0PT50aGlzLl9zZXRTdHlsZSh0LmtleSxudWxsKSkpLHQuZm9yRWFjaEFkZGVkSXRlbSgodD0+dGhpcy5fc2V0U3R5bGUodC5rZXksdC5jdXJyZW50VmFsdWUpKSksdC5mb3JFYWNoQ2hhbmdlZEl0ZW0oKHQ9PnRoaXMuX3NldFN0eWxlKHQua2V5LHQuY3VycmVudFZhbHVlKSkpfX1ndi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8Z3YpKE11KGNoKSxNdShSaCksTXUodWgpKX0sZ3YuybVkaXI9Sm8oe3R5cGU6Z3Ysc2VsZWN0b3JzOltbIiIsIm5nU3R5bGUiLCIiXV0saW5wdXRzOntuZ1N0eWxlOiJuZ1N0eWxlIn19KSxndi5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmNofSx7dHlwZTpSaH0se3R5cGU6dWh9XSxndi5wcm9wRGVjb3JhdG9ycz17bmdTdHlsZTpbe3R5cGU6eV8sYXJnczpbIm5nU3R5bGUiXX1dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGd2LFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6IltuZ1N0eWxlXSJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpjaH0se3R5cGU6Umh9LHt0eXBlOnVofV19KSx7bmdTdHlsZTpbe3R5cGU6eV8sYXJnczpbIm5nU3R5bGUiXX1dfSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyBodntjb25zdHJ1Y3Rvcih0KXt0aGlzLl92aWV3Q29udGFpbmVyUmVmPXQsdGhpcy5fdmlld1JlZj1udWxsLHRoaXMubmdUZW1wbGF0ZU91dGxldENvbnRleHQ9bnVsbCx0aGlzLm5nVGVtcGxhdGVPdXRsZXQ9bnVsbH1uZ09uQ2hhbmdlcyh0KXtpZih0aGlzLl9zaG91bGRSZWNyZWF0ZVZpZXcodCkpe2NvbnN0IHQ9dGhpcy5fdmlld0NvbnRhaW5lclJlZjt0aGlzLl92aWV3UmVmJiZ0LnJlbW92ZSh0LmluZGV4T2YodGhpcy5fdmlld1JlZikpLHRoaXMuX3ZpZXdSZWY9dGhpcy5uZ1RlbXBsYXRlT3V0bGV0P3QuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMubmdUZW1wbGF0ZU91dGxldCx0aGlzLm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0KTpudWxsfWVsc2UgdGhpcy5fdmlld1JlZiYmdGhpcy5uZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCYmdGhpcy5fdXBkYXRlRXhpc3RpbmdDb250ZXh0KHRoaXMubmdUZW1wbGF0ZU91dGxldENvbnRleHQpfV9zaG91bGRSZWNyZWF0ZVZpZXcodCl7Y29uc3QgZT10Lm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0O3JldHVybiEhdC5uZ1RlbXBsYXRlT3V0bGV0fHxlJiZ0aGlzLl9oYXNDb250ZXh0U2hhcGVDaGFuZ2VkKGUpfV9oYXNDb250ZXh0U2hhcGVDaGFuZ2VkKHQpe2NvbnN0IGU9T2JqZWN0LmtleXModC5wcmV2aW91c1ZhbHVlfHx7fSksbj1PYmplY3Qua2V5cyh0LmN1cnJlbnRWYWx1ZXx8e30pO2lmKGUubGVuZ3RoPT09bi5sZW5ndGgpe2ZvcihsZXQgdCBvZiBuKWlmKC0xPT09ZS5pbmRleE9mKHQpKXJldHVybiEwO3JldHVybiExfXJldHVybiEwfV91cGRhdGVFeGlzdGluZ0NvbnRleHQodCl7Zm9yKGxldCBlIG9mIE9iamVjdC5rZXlzKHQpKXRoaXMuX3ZpZXdSZWYuY29udGV4dFtlXT10aGlzLm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0W2VdfX1odi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8aHYpKE11KFhoKSl9LGh2Lsm1ZGlyPUpvKHt0eXBlOmh2LHNlbGVjdG9yczpbWyIiLCJuZ1RlbXBsYXRlT3V0bGV0IiwiIl1dLGlucHV0czp7bmdUZW1wbGF0ZU91dGxldENvbnRleHQ6Im5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixuZ1RlbXBsYXRlT3V0bGV0OiJuZ1RlbXBsYXRlT3V0bGV0In0sZmVhdHVyZXM6W1NpXX0pLGh2LmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6WGh9XSxodi5wcm9wRGVjb3JhdG9ycz17bmdUZW1wbGF0ZU91dGxldENvbnRleHQ6W3t0eXBlOnlffV0sbmdUZW1wbGF0ZU91dGxldDpbe3R5cGU6eV99XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihodixbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJbbmdUZW1wbGF0ZU91dGxldF0ifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6WGh9XX0pLHtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dDpbe3R5cGU6eV99XSxuZ1RlbXBsYXRlT3V0bGV0Olt7dHlwZTp5X31dfSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCBidj1bdHYsZXYsb3YsYXYsaHYsZ3YsY3YsZHYscHYsdXYsZnZdOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiB5dih0LGUpe3JldHVybiBFcnJvcihgSW52YWxpZFBpcGVBcmd1bWVudDogJyR7ZX0nIGZvciBwaXBlICcke1JuKHQpfSdgKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY29uc3QgX3Y9bmV3IGNsYXNze2NyZWF0ZVN1YnNjcmlwdGlvbih0LGUpe3JldHVybiB0LnRoZW4oZSwodD0+e3Rocm93IHR9KSl9ZGlzcG9zZSh0KXt9b25EZXN0cm95KHQpe319LEN2PW5ldyBjbGFzc3tjcmVhdGVTdWJzY3JpcHRpb24odCxlKXtyZXR1cm4gdC5zdWJzY3JpYmUoe25leHQ6ZSxlcnJvcjp0PT57dGhyb3cgdH19KX1kaXNwb3NlKHQpe3QudW5zdWJzY3JpYmUoKX1vbkRlc3Ryb3kodCl7dC51bnN1YnNjcmliZSgpfX07Y2xhc3MgTXZ7Y29uc3RydWN0b3IodCl7dGhpcy5fcmVmPXQsdGhpcy5fbGF0ZXN0VmFsdWU9bnVsbCx0aGlzLl9zdWJzY3JpcHRpb249bnVsbCx0aGlzLl9vYmo9bnVsbCx0aGlzLl9zdHJhdGVneT1udWxsfW5nT25EZXN0cm95KCl7dGhpcy5fc3Vic2NyaXB0aW9uJiZ0aGlzLl9kaXNwb3NlKCl9dHJhbnNmb3JtKHQpe3JldHVybiB0aGlzLl9vYmo/dCE9PXRoaXMuX29iaj8odGhpcy5fZGlzcG9zZSgpLHRoaXMudHJhbnNmb3JtKHQpKTp0aGlzLl9sYXRlc3RWYWx1ZToodCYmdGhpcy5fc3Vic2NyaWJlKHQpLHRoaXMuX2xhdGVzdFZhbHVlKX1fc3Vic2NyaWJlKHQpe3RoaXMuX29iaj10LHRoaXMuX3N0cmF0ZWd5PXRoaXMuX3NlbGVjdFN0cmF0ZWd5KHQpLHRoaXMuX3N1YnNjcmlwdGlvbj10aGlzLl9zdHJhdGVneS5jcmVhdGVTdWJzY3JpcHRpb24odCwoZT0+dGhpcy5fdXBkYXRlTGF0ZXN0VmFsdWUodCxlKSkpfV9zZWxlY3RTdHJhdGVneSh0KXtpZihBdSh0KSlyZXR1cm4gX3Y7aWYoUnUodCkpcmV0dXJuIEN2O3Rocm93IHl2KE12LHQpfV9kaXNwb3NlKCl7dGhpcy5fc3RyYXRlZ3kuZGlzcG9zZSh0aGlzLl9zdWJzY3JpcHRpb24pLHRoaXMuX2xhdGVzdFZhbHVlPW51bGwsdGhpcy5fc3Vic2NyaXB0aW9uPW51bGwsdGhpcy5fb2JqPW51bGx9X3VwZGF0ZUxhdGVzdFZhbHVlKHQsZSl7dD09PXRoaXMuX29iaiYmKHRoaXMuX2xhdGVzdFZhbHVlPWUsdGhpcy5fcmVmLm1hcmtGb3JDaGVjaygpKX19TXYuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fE12KShKYigpKX0sTXYuybVwaXBlPVFvKHtuYW1lOiJhc3luYyIsdHlwZTpNdixwdXJlOiExfSksTXYuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpIaH1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoTXYsW3t0eXBlOmJfLGFyZ3M6W3tuYW1lOiJhc3luYyIscHVyZTohMX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkhofV19KSxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIHZ2e3RyYW5zZm9ybSh0KXtpZihudWxsPT10KXJldHVybiBudWxsO2lmKCJzdHJpbmciIT10eXBlb2YgdCl0aHJvdyB5dih2dix0KTtyZXR1cm4gdC50b0xvd2VyQ2FzZSgpfX12di7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8dnYpfSx2di7JtXBpcGU9UW8oe25hbWU6Imxvd2VyY2FzZSIsdHlwZTp2dixwdXJlOiEwfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYih2dixbe3R5cGU6Yl8sYXJnczpbe25hbWU6Imxvd2VyY2FzZSJ9XX1dLG51bGwsbnVsbCk7Y29uc3QgeHY9Lyg/OltBLVphLXpceEFBXHhCNVx4QkFceEMwLVx4RDZceEQ4LVx4RjZceEY4LVx1MDJDMVx1MDJDNi1cdTAyRDFcdTAyRTAtXHUwMkU0XHUwMkVDXHUwMkVFXHUwMzcwLVx1MDM3NFx1MDM3Nlx1MDM3N1x1MDM3QS1cdTAzN0RcdTAzN0ZcdTAzODZcdTAzODgtXHUwMzhBXHUwMzhDXHUwMzhFLVx1MDNBMVx1MDNBMy1cdTAzRjVcdTAzRjctXHUwNDgxXHUwNDhBLVx1MDUyRlx1MDUzMS1cdTA1NTZcdTA1NTlcdTA1NjEtXHUwNTg3XHUwNUQwLVx1MDVFQVx1MDVGMC1cdTA1RjJcdTA2MjAtXHUwNjRBXHUwNjZFXHUwNjZGXHUwNjcxLVx1MDZEM1x1MDZENVx1MDZFNVx1MDZFNlx1MDZFRVx1MDZFRlx1MDZGQS1cdTA2RkNcdTA2RkZcdTA3MTBcdTA3MTItXHUwNzJGXHUwNzRELVx1MDdBNVx1MDdCMVx1MDdDQS1cdTA3RUFcdTA3RjRcdTA3RjVcdTA3RkFcdTA4MDAtXHUwODE1XHUwODFBXHUwODI0XHUwODI4XHUwODQwLVx1MDg1OFx1MDg2MC1cdTA4NkFcdTA4QTAtXHUwOEI0XHUwOEI2LVx1MDhCRFx1MDkwNC1cdTA5MzlcdTA5M0RcdTA5NTBcdTA5NTgtXHUwOTYxXHUwOTcxLVx1MDk4MFx1MDk4NS1cdTA5OENcdTA5OEZcdTA5OTBcdTA5OTMtXHUwOUE4XHUwOUFBLVx1MDlCMFx1MDlCMlx1MDlCNi1cdTA5QjlcdTA5QkRcdTA5Q0VcdTA5RENcdTA5RERcdTA5REYtXHUwOUUxXHUwOUYwXHUwOUYxXHUwOUZDXHUwQTA1LVx1MEEwQVx1MEEwRlx1MEExMFx1MEExMy1cdTBBMjhcdTBBMkEtXHUwQTMwXHUwQTMyXHUwQTMzXHUwQTM1XHUwQTM2XHUwQTM4XHUwQTM5XHUwQTU5LVx1MEE1Q1x1MEE1RVx1MEE3Mi1cdTBBNzRcdTBBODUtXHUwQThEXHUwQThGLVx1MEE5MVx1MEE5My1cdTBBQThcdTBBQUEtXHUwQUIwXHUwQUIyXHUwQUIzXHUwQUI1LVx1MEFCOVx1MEFCRFx1MEFEMFx1MEFFMFx1MEFFMVx1MEFGOVx1MEIwNS1cdTBCMENcdTBCMEZcdTBCMTBcdTBCMTMtXHUwQjI4XHUwQjJBLVx1MEIzMFx1MEIzMlx1MEIzM1x1MEIzNS1cdTBCMzlcdTBCM0RcdTBCNUNcdTBCNURcdTBCNUYtXHUwQjYxXHUwQjcxXHUwQjgzXHUwQjg1LVx1MEI4QVx1MEI4RS1cdTBCOTBcdTBCOTItXHUwQjk1XHUwQjk5XHUwQjlBXHUwQjlDXHUwQjlFXHUwQjlGXHUwQkEzXHUwQkE0XHUwQkE4LVx1MEJBQVx1MEJBRS1cdTBCQjlcdTBCRDBcdTBDMDUtXHUwQzBDXHUwQzBFLVx1MEMxMFx1MEMxMi1cdTBDMjhcdTBDMkEtXHUwQzM5XHUwQzNEXHUwQzU4LVx1MEM1QVx1MEM2MFx1MEM2MVx1MEM4MFx1MEM4NS1cdTBDOENcdTBDOEUtXHUwQzkwXHUwQzkyLVx1MENBOFx1MENBQS1cdTBDQjNcdTBDQjUtXHUwQ0I5XHUwQ0JEXHUwQ0RFXHUwQ0UwXHUwQ0UxXHUwQ0YxXHUwQ0YyXHUwRDA1LVx1MEQwQ1x1MEQwRS1cdTBEMTBcdTBEMTItXHUwRDNBXHUwRDNEXHUwRDRFXHUwRDU0LVx1MEQ1Nlx1MEQ1Ri1cdTBENjFcdTBEN0EtXHUwRDdGXHUwRDg1LVx1MEQ5Nlx1MEQ5QS1cdTBEQjFcdTBEQjMtXHUwREJCXHUwREJEXHUwREMwLVx1MERDNlx1MEUwMS1cdTBFMzBcdTBFMzJcdTBFMzNcdTBFNDAtXHUwRTQ2XHUwRTgxXHUwRTgyXHUwRTg0XHUwRTg3XHUwRTg4XHUwRThBXHUwRThEXHUwRTk0LVx1MEU5N1x1MEU5OS1cdTBFOUZcdTBFQTEtXHUwRUEzXHUwRUE1XHUwRUE3XHUwRUFBXHUwRUFCXHUwRUFELVx1MEVCMFx1MEVCMlx1MEVCM1x1MEVCRFx1MEVDMC1cdTBFQzRcdTBFQzZcdTBFREMtXHUwRURGXHUwRjAwXHUwRjQwLVx1MEY0N1x1MEY0OS1cdTBGNkNcdTBGODgtXHUwRjhDXHUxMDAwLVx1MTAyQVx1MTAzRlx1MTA1MC1cdTEwNTVcdTEwNUEtXHUxMDVEXHUxMDYxXHUxMDY1XHUxMDY2XHUxMDZFLVx1MTA3MFx1MTA3NS1cdTEwODFcdTEwOEVcdTEwQTAtXHUxMEM1XHUxMEM3XHUxMENEXHUxMEQwLVx1MTBGQVx1MTBGQy1cdTEyNDhcdTEyNEEtXHUxMjREXHUxMjUwLVx1MTI1Nlx1MTI1OFx1MTI1QS1cdTEyNURcdTEyNjAtXHUxMjg4XHUxMjhBLVx1MTI4RFx1MTI5MC1cdTEyQjBcdTEyQjItXHUxMkI1XHUxMkI4LVx1MTJCRVx1MTJDMFx1MTJDMi1cdTEyQzVcdTEyQzgtXHUxMkQ2XHUxMkQ4LVx1MTMxMFx1MTMxMi1cdTEzMTVcdTEzMTgtXHUxMzVBXHUxMzgwLVx1MTM4Rlx1MTNBMC1cdTEzRjVcdTEzRjgtXHUxM0ZEXHUxNDAxLVx1MTY2Q1x1MTY2Ri1cdTE2N0ZcdTE2ODEtXHUxNjlBXHUxNkEwLVx1MTZFQVx1MTZGMS1cdTE2RjhcdTE3MDAtXHUxNzBDXHUxNzBFLVx1MTcxMVx1MTcyMC1cdTE3MzFcdTE3NDAtXHUxNzUxXHUxNzYwLVx1MTc2Q1x1MTc2RS1cdTE3NzBcdTE3ODAtXHUxN0IzXHUxN0Q3XHUxN0RDXHUxODIwLVx1MTg3N1x1MTg4MC1cdTE4ODRcdTE4ODctXHUxOEE4XHUxOEFBXHUxOEIwLVx1MThGNVx1MTkwMC1cdTE5MUVcdTE5NTAtXHUxOTZEXHUxOTcwLVx1MTk3NFx1MTk4MC1cdTE5QUJcdTE5QjAtXHUxOUM5XHUxQTAwLVx1MUExNlx1MUEyMC1cdTFBNTRcdTFBQTdcdTFCMDUtXHUxQjMzXHUxQjQ1LVx1MUI0Qlx1MUI4My1cdTFCQTBcdTFCQUVcdTFCQUZcdTFCQkEtXHUxQkU1XHUxQzAwLVx1MUMyM1x1MUM0RC1cdTFDNEZcdTFDNUEtXHUxQzdEXHUxQzgwLVx1MUM4OFx1MUNFOS1cdTFDRUNcdTFDRUUtXHUxQ0YxXHUxQ0Y1XHUxQ0Y2XHUxRDAwLVx1MURCRlx1MUUwMC1cdTFGMTVcdTFGMTgtXHUxRjFEXHUxRjIwLVx1MUY0NVx1MUY0OC1cdTFGNERcdTFGNTAtXHUxRjU3XHUxRjU5XHUxRjVCXHUxRjVEXHUxRjVGLVx1MUY3RFx1MUY4MC1cdTFGQjRcdTFGQjYtXHUxRkJDXHUxRkJFXHUxRkMyLVx1MUZDNFx1MUZDNi1cdTFGQ0NcdTFGRDAtXHUxRkQzXHUxRkQ2LVx1MUZEQlx1MUZFMC1cdTFGRUNcdTFGRjItXHUxRkY0XHUxRkY2LVx1MUZGQ1x1MjA3MVx1MjA3Rlx1MjA5MC1cdTIwOUNcdTIxMDJcdTIxMDdcdTIxMEEtXHUyMTEzXHUyMTE1XHUyMTE5LVx1MjExRFx1MjEyNFx1MjEyNlx1MjEyOFx1MjEyQS1cdTIxMkRcdTIxMkYtXHUyMTM5XHUyMTNDLVx1MjEzRlx1MjE0NS1cdTIxNDlcdTIxNEVcdTIxODNcdTIxODRcdTJDMDAtXHUyQzJFXHUyQzMwLVx1MkM1RVx1MkM2MC1cdTJDRTRcdTJDRUItXHUyQ0VFXHUyQ0YyXHUyQ0YzXHUyRDAwLVx1MkQyNVx1MkQyN1x1MkQyRFx1MkQzMC1cdTJENjdcdTJENkZcdTJEODAtXHUyRDk2XHUyREEwLVx1MkRBNlx1MkRBOC1cdTJEQUVcdTJEQjAtXHUyREI2XHUyREI4LVx1MkRCRVx1MkRDMC1cdTJEQzZcdTJEQzgtXHUyRENFXHUyREQwLVx1MkRENlx1MkREOC1cdTJEREVcdTJFMkZcdTMwMDVcdTMwMDZcdTMwMzEtXHUzMDM1XHUzMDNCXHUzMDNDXHUzMDQxLVx1MzA5Nlx1MzA5RC1cdTMwOUZcdTMwQTEtXHUzMEZBXHUzMEZDLVx1MzBGRlx1MzEwNS1cdTMxMkVcdTMxMzEtXHUzMThFXHUzMUEwLVx1MzFCQVx1MzFGMC1cdTMxRkZcdTM0MDAtXHU0REI1XHU0RTAwLVx1OUZFQVx1QTAwMC1cdUE0OENcdUE0RDAtXHVBNEZEXHVBNTAwLVx1QTYwQ1x1QTYxMC1cdUE2MUZcdUE2MkFcdUE2MkJcdUE2NDAtXHVBNjZFXHVBNjdGLVx1QTY5RFx1QTZBMC1cdUE2RTVcdUE3MTctXHVBNzFGXHVBNzIyLVx1QTc4OFx1QTc4Qi1cdUE3QUVcdUE3QjAtXHVBN0I3XHVBN0Y3LVx1QTgwMVx1QTgwMy1cdUE4MDVcdUE4MDctXHVBODBBXHVBODBDLVx1QTgyMlx1QTg0MC1cdUE4NzNcdUE4ODItXHVBOEIzXHVBOEYyLVx1QThGN1x1QThGQlx1QThGRFx1QTkwQS1cdUE5MjVcdUE5MzAtXHVBOTQ2XHVBOTYwLVx1QTk3Q1x1QTk4NC1cdUE5QjJcdUE5Q0ZcdUE5RTAtXHVBOUU0XHVBOUU2LVx1QTlFRlx1QTlGQS1cdUE5RkVcdUFBMDAtXHVBQTI4XHVBQTQwLVx1QUE0Mlx1QUE0NC1cdUFBNEJcdUFBNjAtXHVBQTc2XHVBQTdBXHVBQTdFLVx1QUFBRlx1QUFCMVx1QUFCNVx1QUFCNlx1QUFCOS1cdUFBQkRcdUFBQzBcdUFBQzJcdUFBREItXHVBQUREXHVBQUUwLVx1QUFFQVx1QUFGMi1cdUFBRjRcdUFCMDEtXHVBQjA2XHVBQjA5LVx1QUIwRVx1QUIxMS1cdUFCMTZcdUFCMjAtXHVBQjI2XHVBQjI4LVx1QUIyRVx1QUIzMC1cdUFCNUFcdUFCNUMtXHVBQjY1XHVBQjcwLVx1QUJFMlx1QUMwMC1cdUQ3QTNcdUQ3QjAtXHVEN0M2XHVEN0NCLVx1RDdGQlx1RjkwMC1cdUZBNkRcdUZBNzAtXHVGQUQ5XHVGQjAwLVx1RkIwNlx1RkIxMy1cdUZCMTdcdUZCMURcdUZCMUYtXHVGQjI4XHVGQjJBLVx1RkIzNlx1RkIzOC1cdUZCM0NcdUZCM0VcdUZCNDBcdUZCNDFcdUZCNDNcdUZCNDRcdUZCNDYtXHVGQkIxXHVGQkQzLVx1RkQzRFx1RkQ1MC1cdUZEOEZcdUZEOTItXHVGREM3XHVGREYwLVx1RkRGQlx1RkU3MC1cdUZFNzRcdUZFNzYtXHVGRUZDXHVGRjIxLVx1RkYzQVx1RkY0MS1cdUZGNUFcdUZGNjYtXHVGRkJFXHVGRkMyLVx1RkZDN1x1RkZDQS1cdUZGQ0ZcdUZGRDItXHVGRkQ3XHVGRkRBLVx1RkZEQ118XHVEODAwW1x1REMwMC1cdURDMEJcdURDMEQtXHVEQzI2XHVEQzI4LVx1REMzQVx1REMzQ1x1REMzRFx1REMzRi1cdURDNERcdURDNTAtXHVEQzVEXHVEQzgwLVx1RENGQVx1REU4MC1cdURFOUNcdURFQTAtXHVERUQwXHVERjAwLVx1REYxRlx1REYyRC1cdURGNDBcdURGNDItXHVERjQ5XHVERjUwLVx1REY3NVx1REY4MC1cdURGOURcdURGQTAtXHVERkMzXHVERkM4LVx1REZDRl18XHVEODAxW1x1REMwMC1cdURDOURcdURDQjAtXHVEQ0QzXHVEQ0Q4LVx1RENGQlx1REQwMC1cdUREMjdcdUREMzAtXHVERDYzXHVERTAwLVx1REYzNlx1REY0MC1cdURGNTVcdURGNjAtXHVERjY3XXxcdUQ4MDJbXHVEQzAwLVx1REMwNVx1REMwOFx1REMwQS1cdURDMzVcdURDMzdcdURDMzhcdURDM0NcdURDM0YtXHVEQzU1XHVEQzYwLVx1REM3Nlx1REM4MC1cdURDOUVcdURDRTAtXHVEQ0YyXHVEQ0Y0XHVEQ0Y1XHVERDAwLVx1REQxNVx1REQyMC1cdUREMzlcdUREODAtXHVEREI3XHVEREJFXHVEREJGXHVERTAwXHVERTEwLVx1REUxM1x1REUxNS1cdURFMTdcdURFMTktXHVERTMzXHVERTYwLVx1REU3Q1x1REU4MC1cdURFOUNcdURFQzAtXHVERUM3XHVERUM5LVx1REVFNFx1REYwMC1cdURGMzVcdURGNDAtXHVERjU1XHVERjYwLVx1REY3Mlx1REY4MC1cdURGOTFdfFx1RDgwM1tcdURDMDAtXHVEQzQ4XHVEQzgwLVx1RENCMlx1RENDMC1cdURDRjJdfFx1RDgwNFtcdURDMDMtXHVEQzM3XHVEQzgzLVx1RENBRlx1RENEMC1cdURDRThcdUREMDMtXHVERDI2XHVERDUwLVx1REQ3Mlx1REQ3Nlx1REQ4My1cdUREQjJcdUREQzEtXHVEREM0XHVERERBXHVERERDXHVERTAwLVx1REUxMVx1REUxMy1cdURFMkJcdURFODAtXHVERTg2XHVERTg4XHVERThBLVx1REU4RFx1REU4Ri1cdURFOURcdURFOUYtXHVERUE4XHVERUIwLVx1REVERVx1REYwNS1cdURGMENcdURGMEZcdURGMTBcdURGMTMtXHVERjI4XHVERjJBLVx1REYzMFx1REYzMlx1REYzM1x1REYzNS1cdURGMzlcdURGM0RcdURGNTBcdURGNUQtXHVERjYxXXxcdUQ4MDVbXHVEQzAwLVx1REMzNFx1REM0Ny1cdURDNEFcdURDODAtXHVEQ0FGXHVEQ0M0XHVEQ0M1XHVEQ0M3XHVERDgwLVx1RERBRVx1REREOC1cdUREREJcdURFMDAtXHVERTJGXHVERTQ0XHVERTgwLVx1REVBQVx1REYwMC1cdURGMTldfFx1RDgwNltcdURDQTAtXHVEQ0RGXHVEQ0ZGXHVERTAwXHVERTBCLVx1REUzMlx1REUzQVx1REU1MFx1REU1Qy1cdURFODNcdURFODYtXHVERTg5XHVERUMwLVx1REVGOF18XHVEODA3W1x1REMwMC1cdURDMDhcdURDMEEtXHVEQzJFXHVEQzQwXHVEQzcyLVx1REM4Rlx1REQwMC1cdUREMDZcdUREMDhcdUREMDlcdUREMEItXHVERDMwXHVERDQ2XXxcdUQ4MDhbXHVEQzAwLVx1REY5OV18XHVEODA5W1x1REM4MC1cdURENDNdfFtcdUQ4MENcdUQ4MUMtXHVEODIwXHVEODQwLVx1RDg2OFx1RDg2QS1cdUQ4NkNcdUQ4NkYtXHVEODcyXHVEODc0LVx1RDg3OV1bXHVEQzAwLVx1REZGRl18XHVEODBEW1x1REMwMC1cdURDMkVdfFx1RDgxMVtcdURDMDAtXHVERTQ2XXxcdUQ4MUFbXHVEQzAwLVx1REUzOFx1REU0MC1cdURFNUVcdURFRDAtXHVERUVEXHVERjAwLVx1REYyRlx1REY0MC1cdURGNDNcdURGNjMtXHVERjc3XHVERjdELVx1REY4Rl18XHVEODFCW1x1REYwMC1cdURGNDRcdURGNTBcdURGOTMtXHVERjlGXHVERkUwXHVERkUxXXxcdUQ4MjFbXHVEQzAwLVx1REZFQ118XHVEODIyW1x1REMwMC1cdURFRjJdfFx1RDgyQ1tcdURDMDAtXHVERDFFXHVERDcwLVx1REVGQl18XHVEODJGW1x1REMwMC1cdURDNkFcdURDNzAtXHVEQzdDXHVEQzgwLVx1REM4OFx1REM5MC1cdURDOTldfFx1RDgzNVtcdURDMDAtXHVEQzU0XHVEQzU2LVx1REM5Q1x1REM5RVx1REM5Rlx1RENBMlx1RENBNVx1RENBNlx1RENBOS1cdURDQUNcdURDQUUtXHVEQ0I5XHVEQ0JCXHVEQ0JELVx1RENDM1x1RENDNS1cdUREMDVcdUREMDctXHVERDBBXHVERDBELVx1REQxNFx1REQxNi1cdUREMUNcdUREMUUtXHVERDM5XHVERDNCLVx1REQzRVx1REQ0MC1cdURENDRcdURENDZcdURENEEtXHVERDUwXHVERDUyLVx1REVBNVx1REVBOC1cdURFQzBcdURFQzItXHVERURBXHVERURDLVx1REVGQVx1REVGQy1cdURGMTRcdURGMTYtXHVERjM0XHVERjM2LVx1REY0RVx1REY1MC1cdURGNkVcdURGNzAtXHVERjg4XHVERjhBLVx1REZBOFx1REZBQS1cdURGQzJcdURGQzQtXHVERkNCXXxcdUQ4M0FbXHVEQzAwLVx1RENDNFx1REQwMC1cdURENDNdfFx1RDgzQltcdURFMDAtXHVERTAzXHVERTA1LVx1REUxRlx1REUyMVx1REUyMlx1REUyNFx1REUyN1x1REUyOS1cdURFMzJcdURFMzQtXHVERTM3XHVERTM5XHVERTNCXHVERTQyXHVERTQ3XHVERTQ5XHVERTRCXHVERTRELVx1REU0Rlx1REU1MVx1REU1Mlx1REU1NFx1REU1N1x1REU1OVx1REU1Qlx1REU1RFx1REU1Rlx1REU2MVx1REU2Mlx1REU2NFx1REU2Ny1cdURFNkFcdURFNkMtXHVERTcyXHVERTc0LVx1REU3N1x1REU3OS1cdURFN0NcdURFN0VcdURFODAtXHVERTg5XHVERThCLVx1REU5Qlx1REVBMS1cdURFQTNcdURFQTUtXHVERUE5XHVERUFCLVx1REVCQl18XHVEODY5W1x1REMwMC1cdURFRDZcdURGMDAtXHVERkZGXXxcdUQ4NkRbXHVEQzAwLVx1REYzNFx1REY0MC1cdURGRkZdfFx1RDg2RVtcdURDMDAtXHVEQzFEXHVEQzIwLVx1REZGRl18XHVEODczW1x1REMwMC1cdURFQTFcdURFQjAtXHVERkZGXXxcdUQ4N0FbXHVEQzAwLVx1REZFMF18XHVEODdFW1x1REMwMC1cdURFMURdKVxTKi9nO2NsYXNzIE92e3RyYW5zZm9ybSh0KXtpZihudWxsPT10KXJldHVybiBudWxsO2lmKCJzdHJpbmciIT10eXBlb2YgdCl0aHJvdyB5dihPdix0KTtyZXR1cm4gdC5yZXBsYWNlKHh2LCh0PT50WzBdLnRvVXBwZXJDYXNlKCkrdC5zdWJzdHIoMSkudG9Mb3dlckNhc2UoKSkpfX1Pdi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8T3YpfSxPdi7JtXBpcGU9UW8oe25hbWU6InRpdGxlY2FzZSIsdHlwZTpPdixwdXJlOiEwfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihPdixbe3R5cGU6Yl8sYXJnczpbe25hbWU6InRpdGxlY2FzZSJ9XX1dLG51bGwsbnVsbCk7Y2xhc3MgUHZ7dHJhbnNmb3JtKHQpe2lmKG51bGw9PXQpcmV0dXJuIG51bGw7aWYoInN0cmluZyIhPXR5cGVvZiB0KXRocm93IHl2KFB2LHQpO3JldHVybiB0LnRvVXBwZXJDYXNlKCl9fVB2Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxQdil9LFB2Lsm1cGlwZT1Rbyh7bmFtZToidXBwZXJjYXNlIix0eXBlOlB2LHB1cmU6ITB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFB2LFt7dHlwZTpiXyxhcmdzOlt7bmFtZToidXBwZXJjYXNlIn1dfV0sbnVsbCxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIHd2e2NvbnN0cnVjdG9yKHQpe3RoaXMubG9jYWxlPXR9dHJhbnNmb3JtKHQsZT0ibWVkaXVtRGF0ZSIsbixvKXtpZihudWxsPT10fHwiIj09PXR8fHQhPXQpcmV0dXJuIG51bGw7dHJ5e3JldHVybiBETSh0LGUsb3x8dGhpcy5sb2NhbGUsbil9Y2F0Y2godCl7dGhyb3cgeXYod3YsdC5tZXNzYWdlKX19fXd2Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHx3dikoTXUoQl8pKX0sd3YuybVwaXBlPVFvKHtuYW1lOiJkYXRlIix0eXBlOnd2LHB1cmU6ITB9KSx3di5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltCX119XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIod3YsW3t0eXBlOmJfLGFyZ3M6W3tuYW1lOiJkYXRlIixwdXJlOiEwfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W0JfXX1dfV19KSxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IGt2PS8jL2c7Y2xhc3MgU3Z7Y29uc3RydWN0b3IodCl7dGhpcy5fbG9jYWxpemF0aW9uPXR9dHJhbnNmb3JtKHQsZSxuKXtpZihudWxsPT10KXJldHVybiIiO2lmKCJvYmplY3QiIT10eXBlb2YgZXx8bnVsbD09PWUpdGhyb3cgeXYoU3YsZSk7cmV0dXJuIGVbSk0odCxPYmplY3Qua2V5cyhlKSx0aGlzLl9sb2NhbGl6YXRpb24sbildLnJlcGxhY2Uoa3YsdC50b1N0cmluZygpKX19U3YuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFN2KShNdShLTSkpfSxTdi7JtXBpcGU9UW8oe25hbWU6ImkxOG5QbHVyYWwiLHR5cGU6U3YscHVyZTohMH0pLFN2LmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6S019XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFN2LFt7dHlwZTpiXyxhcmdzOlt7bmFtZToiaTE4blBsdXJhbCIscHVyZTohMH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOktNfV19KSxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIER2e3RyYW5zZm9ybSh0LGUpe2lmKG51bGw9PXQpcmV0dXJuIiI7aWYoIm9iamVjdCIhPXR5cGVvZiBlfHwic3RyaW5nIiE9dHlwZW9mIHQpdGhyb3cgeXYoRHYsZSk7cmV0dXJuIGUuaGFzT3duUHJvcGVydHkodCk/ZVt0XTplLmhhc093blByb3BlcnR5KCJvdGhlciIpP2Uub3RoZXI6IiJ9fUR2Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxEdil9LER2Lsm1cGlwZT1Rbyh7bmFtZToiaTE4blNlbGVjdCIsdHlwZTpEdixwdXJlOiEwfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihEdixbe3R5cGU6Yl8sYXJnczpbe25hbWU6ImkxOG5TZWxlY3QiLHB1cmU6ITB9XX1dLG51bGwsbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyBFdnt0cmFuc2Zvcm0odCl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHQsbnVsbCwyKX19RXYuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEV2KX0sRXYuybVwaXBlPVFvKHtuYW1lOiJqc29uIix0eXBlOkV2LHB1cmU6ITF9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEV2LFt7dHlwZTpiXyxhcmdzOlt7bmFtZToianNvbiIscHVyZTohMX1dfV0sbnVsbCxudWxsKTtjbGFzcyBBdntjb25zdHJ1Y3Rvcih0KXt0aGlzLmRpZmZlcnM9dCx0aGlzLmtleVZhbHVlcz1bXX10cmFuc2Zvcm0odCxlPVJ2KXtpZighdHx8ISh0IGluc3RhbmNlb2YgTWFwKSYmIm9iamVjdCIhPXR5cGVvZiB0KXJldHVybiBudWxsO3RoaXMuZGlmZmVyfHwodGhpcy5kaWZmZXI9dGhpcy5kaWZmZXJzLmZpbmQodCkuY3JlYXRlKCkpO2NvbnN0IG49dGhpcy5kaWZmZXIuZGlmZih0KTtyZXR1cm4gbiYmKHRoaXMua2V5VmFsdWVzPVtdLG4uZm9yRWFjaEl0ZW0oKHQ9Pnt0aGlzLmtleVZhbHVlcy5wdXNoKCgKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmZ1bmN0aW9uIGUodCxuKXtyZXR1cm57a2V5OnQsdmFsdWU6bn19KSh0LmtleSx0LmN1cnJlbnRWYWx1ZSkpfSkpLHRoaXMua2V5VmFsdWVzLnNvcnQoZSkpLHRoaXMua2V5VmFsdWVzfX1mdW5jdGlvbiBSdih0LGUpe2NvbnN0IG49dC5rZXksbz1lLmtleTtpZihuPT09bylyZXR1cm4gMDtpZih2b2lkIDA9PT1uKXJldHVybiAxO2lmKHZvaWQgMD09PW8pcmV0dXJuLTE7aWYobnVsbD09PW4pcmV0dXJuIDE7aWYobnVsbD09PW8pcmV0dXJuLTE7aWYoInN0cmluZyI9PXR5cGVvZiBuJiYic3RyaW5nIj09dHlwZW9mIG8pcmV0dXJuIG48bz8tMToxO2lmKCJudW1iZXIiPT10eXBlb2YgbiYmIm51bWJlciI9PXR5cGVvZiBvKXJldHVybiBuLW87aWYoImJvb2xlYW4iPT10eXBlb2YgbiYmImJvb2xlYW4iPT10eXBlb2YgbylyZXR1cm4gbjxvPy0xOjE7Y29uc3QgaT1TdHJpbmcobiksYT1TdHJpbmcobyk7cmV0dXJuIGk9PWE/MDppPGE/LTE6MX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovQXYuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEF2KShNdShSaCkpfSxBdi7JtXBpcGU9UW8oe25hbWU6ImtleXZhbHVlIix0eXBlOkF2LHB1cmU6ITF9KSxBdi5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOlJofV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihBdixbe3R5cGU6Yl8sYXJnczpbe25hbWU6ImtleXZhbHVlIixwdXJlOiExfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Umh9XX0pLG51bGwpO2NsYXNzIFR2e2NvbnN0cnVjdG9yKHQpe3RoaXMuX2xvY2FsZT10fXRyYW5zZm9ybSh0LGUsbil7aWYoIXp2KHQpKXJldHVybiBudWxsO249bnx8dGhpcy5fbG9jYWxlO3RyeXtyZXR1cm4gcU0oSHYodCksbixlKX1jYXRjaCh0KXt0aHJvdyB5dihUdix0Lm1lc3NhZ2UpfX19VHYuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFR2KShNdShCXykpfSxUdi7JtXBpcGU9UW8oe25hbWU6Im51bWJlciIsdHlwZTpUdixwdXJlOiEwfSksVHYuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbQl9dfV19XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFR2LFt7dHlwZTpiXyxhcmdzOlt7bmFtZToibnVtYmVyIn1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltCX119XX1dfSksbnVsbCk7Y2xhc3MgTnZ7Y29uc3RydWN0b3IodCl7dGhpcy5fbG9jYWxlPXR9dHJhbnNmb3JtKHQsZSxuKXtpZighenYodCkpcmV0dXJuIG51bGw7bj1ufHx0aGlzLl9sb2NhbGU7dHJ5e3JldHVybihmdW5jdGlvbiBvKHQsZSxuKXtyZXR1cm4gWU0odCxaTSh5TShlLHNNLlBlcmNlbnQpLGJNKGUsbU0uTWludXNTaWduKSksZSxtTS5Hcm91cCxtTS5EZWNpbWFsLG4sITApLnJlcGxhY2UobmV3IFJlZ0V4cCgiJSIsImciKSxiTShlLG1NLlBlcmNlbnRTaWduKSl9KShIdih0KSxuLGUpfWNhdGNoKHQpe3Rocm93IHl2KE52LHQubWVzc2FnZSl9fX1Odi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8TnYpKE11KEJfKSl9LE52Lsm1cGlwZT1Rbyh7bmFtZToicGVyY2VudCIsdHlwZTpOdixwdXJlOiEwfSksTnYuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbQl9dfV19XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKE52LFt7dHlwZTpiXyxhcmdzOlt7bmFtZToicGVyY2VudCJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbQl9dfV19XX0pLG51bGwpO2NsYXNzIEl2e2NvbnN0cnVjdG9yKHQsZT0iVVNEIil7dGhpcy5fbG9jYWxlPXQsdGhpcy5fZGVmYXVsdEN1cnJlbmN5Q29kZT1lfXRyYW5zZm9ybSh0LGUsbj0ic3ltYm9sIixvLGkpe2lmKCF6dih0KSlyZXR1cm4gbnVsbDtpPWl8fHRoaXMuX2xvY2FsZSwiYm9vbGVhbiI9PXR5cGVvZiBuJiYoKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZjb25zb2xlJiZjb25zb2xlLndhcm4mJmNvbnNvbGUud2FybignV2FybmluZzogdGhlIGN1cnJlbmN5IHBpcGUgaGFzIGJlZW4gY2hhbmdlZCBpbiBBbmd1bGFyIHY1LiBUaGUgc3ltYm9sRGlzcGxheSBvcHRpb24gKHRoaXJkIHBhcmFtZXRlcikgaXMgbm93IGEgc3RyaW5nIGluc3RlYWQgb2YgYSBib29sZWFuLiBUaGUgYWNjZXB0ZWQgdmFsdWVzIGFyZSAiY29kZSIsICJzeW1ib2wiIG9yICJzeW1ib2wtbmFycm93Ii4nKSxuPW4/InN5bWJvbCI6ImNvZGUiKTtsZXQgYT1lfHx0aGlzLl9kZWZhdWx0Q3VycmVuY3lDb2RlOyJjb2RlIiE9PW4mJihhPSJzeW1ib2wiPT09bnx8InN5bWJvbC1uYXJyb3ciPT09bj8oZnVuY3Rpb24gcih0LGUsbj0iZW4iKXtjb25zdCBvPShmdW5jdGlvbiBpKHQpe3JldHVybiBUZih0KVt6Zi5DdXJyZW5jaWVzXX0pKG4pW3RdfHxyTVt0XXx8W10sYT1vWzFdO3JldHVybiJuYXJyb3ciPT09ZSYmInN0cmluZyI9PXR5cGVvZiBhP2E6b1swXXx8dH0pKGEsInN5bWJvbCI9PT1uPyJ3aWRlIjoibmFycm93IixpKTpuKTt0cnl7cmV0dXJuKGZ1bmN0aW9uIHModCxlLG4sbyxpKXtjb25zdCBhPVpNKHlNKGUsc00uQ3VycmVuY3kpLGJNKGUsbU0uTWludXNTaWduKSk7cmV0dXJuIGEubWluRnJhYz0oZnVuY3Rpb24gcih0KXtsZXQgZTtjb25zdCBuPXJNW3RdO3JldHVybiBuJiYoZT1uWzJdKSwibnVtYmVyIj09dHlwZW9mIGU/ZToyfSkobyksYS5tYXhGcmFjPWEubWluRnJhYyxZTSh0LGEsZSxtTS5DdXJyZW5jeUdyb3VwLG1NLkN1cnJlbmN5RGVjaW1hbCxpKS5yZXBsYWNlKCLCpCIsbikucmVwbGFjZSgiwqQiLCIiKS50cmltKCl9KShIdih0KSxpLGEsZSxvKX1jYXRjaCh0KXt0aHJvdyB5dihJdix0Lm1lc3NhZ2UpfX19ZnVuY3Rpb24genYodCl7cmV0dXJuIShudWxsPT10fHwiIj09PXR8fHQhPXQpfWZ1bmN0aW9uIEh2KHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdCYmIWlzTmFOKE51bWJlcih0KS1wYXJzZUZsb2F0KHQpKSlyZXR1cm4gTnVtYmVyKHQpO2lmKCJudW1iZXIiIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3IoYCR7dH0gaXMgbm90IGEgbnVtYmVyYCk7cmV0dXJuIHR9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL0l2Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxJdikoTXUoQl8pLE11KFZfKSl9LEl2Lsm1cGlwZT1Rbyh7bmFtZToiY3VycmVuY3kiLHR5cGU6SXYscHVyZTohMH0pLEl2LmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W0JfXX1dfSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbVl9dfV19XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEl2LFt7dHlwZTpiXyxhcmdzOlt7bmFtZToiY3VycmVuY3kifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W0JfXX1dfSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbVl9dfV19XX0pLG51bGwpO2NsYXNzIEZ2e3RyYW5zZm9ybSh0LGUsbil7aWYobnVsbD09dClyZXR1cm4gbnVsbDtpZighdGhpcy5zdXBwb3J0cyh0KSl0aHJvdyB5dihGdix0KTtyZXR1cm4gdC5zbGljZShlLG4pfXN1cHBvcnRzKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdHx8QXJyYXkuaXNBcnJheSh0KX19RnYuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEZ2KX0sRnYuybVwaXBlPVFvKHtuYW1lOiJzbGljZSIsdHlwZTpGdixwdXJlOiExfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihGdixbe3R5cGU6Yl8sYXJnczpbe25hbWU6InNsaWNlIixwdXJlOiExfV19XSxudWxsLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3QgTHY9W012LFB2LHZ2LEV2LEZ2LFR2LE52LE92LEl2LHd2LFN2LER2LEF2XTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY2xhc3MgQnZ7fUJ2Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxCdil9LEJ2Lsm1bW9kPVpvKHt0eXBlOkJ2fSksQnYuybVpbmo9Y28oe3Byb3ZpZGVyczpbe3Byb3ZpZGU6S00sdXNlQ2xhc3M6UU19XX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oQnYse2RlY2xhcmF0aW9uczpbdHYsZXYsb3YsYXYsaHYsZ3YsY3YsZHYscHYsdXYsZnYsTXYsUHYsdnYsRXYsRnYsVHYsTnYsT3YsSXYsd3YsU3YsRHYsQXZdLGV4cG9ydHM6W3R2LGV2LG92LGF2LGh2LGd2LGN2LGR2LHB2LHV2LGZ2LE12LFB2LHZ2LEV2LEZ2LFR2LE52LE92LEl2LHd2LFN2LER2LEF2XX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoQnYsW3t0eXBlOmtfLGFyZ3M6W3tkZWNsYXJhdGlvbnM6W2J2LEx2XSxleHBvcnRzOltidixMdl0scHJvdmlkZXJzOlt7cHJvdmlkZTpLTSx1c2VDbGFzczpRTX1dfV19XSxudWxsLG51bGwpLAovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KbmV3IGJoKCIxMS4yLjE0Iik7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyBWdnt9VnYuybVwcm92PWxvKHt0b2tlbjpWdixwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5uZXcganYodXMoVUMpLHdpbmRvdyl9KTtjbGFzcyBqdntjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuZG9jdW1lbnQ9dCx0aGlzLndpbmRvdz1lLHRoaXMub2Zmc2V0PSgpPT5bMCwwXX1zZXRPZmZzZXQodCl7dGhpcy5vZmZzZXQ9QXJyYXkuaXNBcnJheSh0KT8oKT0+dDp0fWdldFNjcm9sbFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuc3VwcG9ydHNTY3JvbGxpbmcoKT9bdGhpcy53aW5kb3cucGFnZVhPZmZzZXQsdGhpcy53aW5kb3cucGFnZVlPZmZzZXRdOlswLDBdfXNjcm9sbFRvUG9zaXRpb24odCl7dGhpcy5zdXBwb3J0c1Njcm9sbGluZygpJiZ0aGlzLndpbmRvdy5zY3JvbGxUbyh0WzBdLHRbMV0pfXNjcm9sbFRvQW5jaG9yKHQpe2lmKCF0aGlzLnN1cHBvcnRzU2Nyb2xsaW5nKCkpcmV0dXJuO2NvbnN0IGU9KGZ1bmN0aW9uIG4odCxlKXtjb25zdCBuPXQuZ2V0RWxlbWVudEJ5SWQoZSl8fHQuZ2V0RWxlbWVudHNCeU5hbWUoZSlbMF07aWYobilyZXR1cm4gbjtpZigiZnVuY3Rpb24iPT10eXBlb2YgdC5jcmVhdGVUcmVlV2Fsa2VyJiZ0LmJvZHkmJih0LmJvZHkuY3JlYXRlU2hhZG93Um9vdHx8dC5ib2R5LmF0dGFjaFNoYWRvdykpe2NvbnN0IG49dC5jcmVhdGVUcmVlV2Fsa2VyKHQuYm9keSxOb2RlRmlsdGVyLlNIT1dfRUxFTUVOVCk7bGV0IG89bi5jdXJyZW50Tm9kZTtmb3IoO287KXtjb25zdCB0PW8uc2hhZG93Um9vdDtpZih0KXtjb25zdCBuPXQuZ2V0RWxlbWVudEJ5SWQoZSl8fHQucXVlcnlTZWxlY3RvcihgW25hbWU9IiR7ZX0iXWApO2lmKG4pcmV0dXJuIG59bz1uLm5leHROb2RlKCl9fXJldHVybiBudWxsfQovKioKICAgICAqIEBsaWNlbnNlIEFuZ3VsYXIgdjExLjIuMTQKICAgICAqIChjKSAyMDEwLTIwMjEgR29vZ2xlIExMQy4gaHR0cHM6Ly9hbmd1bGFyLmlvLwogICAgICogTGljZW5zZTogTUlUCiAgICAgKi8KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovKSh0aGlzLmRvY3VtZW50LHQpO2UmJih0aGlzLnNjcm9sbFRvRWxlbWVudChlKSx0aGlzLmF0dGVtcHRGb2N1cyhlKSl9c2V0SGlzdG9yeVNjcm9sbFJlc3RvcmF0aW9uKHQpe2lmKHRoaXMuc3VwcG9ydFNjcm9sbFJlc3RvcmF0aW9uKCkpe2NvbnN0IGU9dGhpcy53aW5kb3cuaGlzdG9yeTtlJiZlLnNjcm9sbFJlc3RvcmF0aW9uJiYoZS5zY3JvbGxSZXN0b3JhdGlvbj10KX19c2Nyb2xsVG9FbGVtZW50KHQpe2NvbnN0IGU9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPWUubGVmdCt0aGlzLndpbmRvdy5wYWdlWE9mZnNldCxvPWUudG9wK3RoaXMud2luZG93LnBhZ2VZT2Zmc2V0LGk9dGhpcy5vZmZzZXQoKTt0aGlzLndpbmRvdy5zY3JvbGxUbyhuLWlbMF0sby1pWzFdKX1hdHRlbXB0Rm9jdXModCl7cmV0dXJuIHQuZm9jdXMoKSx0aGlzLmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT10fXN1cHBvcnRTY3JvbGxSZXN0b3JhdGlvbigpe3RyeXtpZighdGhpcy5zdXBwb3J0c1Njcm9sbGluZygpKXJldHVybiExO2NvbnN0IHQ9VXYodGhpcy53aW5kb3cuaGlzdG9yeSl8fFV2KE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzLndpbmRvdy5oaXN0b3J5KSk7cmV0dXJuISghdHx8IXQud3JpdGFibGUmJiF0LnNldCl9Y2F0Y2godCl7cmV0dXJuITF9fXN1cHBvcnRzU2Nyb2xsaW5nKCl7dHJ5e3JldHVybiEhdGhpcy53aW5kb3cmJiEhdGhpcy53aW5kb3cuc2Nyb2xsVG8mJiJwYWdlWE9mZnNldCJpbiB0aGlzLndpbmRvd31jYXRjaCh0KXtyZXR1cm4hMX19fWZ1bmN0aW9uIFV2KHQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsInNjcm9sbFJlc3RvcmF0aW9uIil9Y2xhc3MgV3YgZXh0ZW5kcyBjbGFzcyBleHRlbmRzIGNsYXNze317Y29uc3RydWN0b3IoKXtzdXBlcigpfXN1cHBvcnRzRE9NRXZlbnRzKCl7cmV0dXJuITB9fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi97c3RhdGljIG1ha2VDdXJyZW50KCl7IShmdW5jdGlvbiB0KGUpe1ZDfHwoVkM9ZSl9KShuZXcgV3YpfWdldFByb3BlcnR5KHQsZSl7cmV0dXJuIHRbZV19bG9nKHQpe3dpbmRvdy5jb25zb2xlJiZ3aW5kb3cuY29uc29sZS5sb2cmJndpbmRvdy5jb25zb2xlLmxvZyh0KX1sb2dHcm91cCh0KXt3aW5kb3cuY29uc29sZSYmd2luZG93LmNvbnNvbGUuZ3JvdXAmJndpbmRvdy5jb25zb2xlLmdyb3VwKHQpfWxvZ0dyb3VwRW5kKCl7d2luZG93LmNvbnNvbGUmJndpbmRvdy5jb25zb2xlLmdyb3VwRW5kJiZ3aW5kb3cuY29uc29sZS5ncm91cEVuZCgpfW9uQW5kQ2FuY2VsKHQsZSxuKXtyZXR1cm4gdC5hZGRFdmVudExpc3RlbmVyKGUsbiwhMSksKCk9Pnt0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZSxuLCExKX19ZGlzcGF0Y2hFdmVudCh0LGUpe3QuZGlzcGF0Y2hFdmVudChlKX1yZW1vdmUodCl7cmV0dXJuIHQucGFyZW50Tm9kZSYmdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpLHR9Z2V0VmFsdWUodCl7cmV0dXJuIHQudmFsdWV9Y3JlYXRlRWxlbWVudCh0LGUpe3JldHVybihlPWV8fHRoaXMuZ2V0RGVmYXVsdERvY3VtZW50KCkpLmNyZWF0ZUVsZW1lbnQodCl9Y3JlYXRlSHRtbERvY3VtZW50KCl7cmV0dXJuIGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgiZmFrZVRpdGxlIil9Z2V0RGVmYXVsdERvY3VtZW50KCl7cmV0dXJuIGRvY3VtZW50fWlzRWxlbWVudE5vZGUodCl7cmV0dXJuIHQubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERX1pc1NoYWRvd1Jvb3QodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50fWdldEdsb2JhbEV2ZW50VGFyZ2V0KHQsZSl7cmV0dXJuIndpbmRvdyI9PT1lP3dpbmRvdzoiZG9jdW1lbnQiPT09ZT90OiJib2R5Ij09PWU/dC5ib2R5Om51bGx9Z2V0SGlzdG9yeSgpe3JldHVybiB3aW5kb3cuaGlzdG9yeX1nZXRMb2NhdGlvbigpe3JldHVybiB3aW5kb3cubG9jYXRpb259Z2V0QmFzZUhyZWYodCl7Y29uc3QgZT0oZnVuY3Rpb24gbigpe3JldHVybiBZdnx8KFl2PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImJhc2UiKSxZdik/WXYuZ2V0QXR0cmlidXRlKCJocmVmIik6bnVsbH0pKCk7cmV0dXJuIG51bGw9PWU/bnVsbDooZnVuY3Rpb24gbyh0KXtyZXR1cm4gR3Z8fChHdj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIikpLEd2LnNldEF0dHJpYnV0ZSgiaHJlZiIsdCksIi8iPT09R3YucGF0aG5hbWUuY2hhckF0KDApP0d2LnBhdGhuYW1lOiIvIitHdi5wYXRobmFtZX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovKShlKX1yZXNldEJhc2VFbGVtZW50KCl7WXY9bnVsbH1nZXRVc2VyQWdlbnQoKXtyZXR1cm4gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnR9cGVyZm9ybWFuY2VOb3coKXtyZXR1cm4gd2luZG93LnBlcmZvcm1hbmNlJiZ3aW5kb3cucGVyZm9ybWFuY2Uubm93P3dpbmRvdy5wZXJmb3JtYW5jZS5ub3coKToobmV3IERhdGUpLmdldFRpbWUoKX1zdXBwb3J0c0Nvb2tpZXMoKXtyZXR1cm4hMH1nZXRDb29raWUodCl7cmV0dXJuICRNKGRvY3VtZW50LmNvb2tpZSx0KX19bGV0IEd2LFl2PW51bGw7Y29uc3QgcXY9bmV3IE5yKCJUUkFOU0lUSU9OX0lEIiksWnY9W3twcm92aWRlOkVfLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gWHYodCxlLG4pe3JldHVybigpPT57bi5nZXQoQV8pLmRvbmVQcm9taXNlLnRoZW4oKCgpPT57Y29uc3Qgbj1qQygpO0FycmF5LnByb3RvdHlwZS5zbGljZS5hcHBseShlLnF1ZXJ5U2VsZWN0b3JBbGwoInN0eWxlW25nLXRyYW5zaXRpb25dIikpLmZpbHRlcigoZT0+ZS5nZXRBdHRyaWJ1dGUoIm5nLXRyYW5zaXRpb24iKT09PXQpKS5mb3JFYWNoKCh0PT5uLnJlbW92ZSh0KSkpfSkpfX0sZGVwczpbcXYsVUMsUXBdLG11bHRpOiEwfV07Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyBLdntzdGF0aWMgaW5pdCgpeyEoZnVuY3Rpb24gdChlKXtkQz1lfSkobmV3IEt2KX1hZGRUb1dpbmRvdyh0KXtFby5nZXRBbmd1bGFyVGVzdGFiaWxpdHk9KGUsbj0hMCk9Pntjb25zdCBvPXQuZmluZFRlc3RhYmlsaXR5SW5UcmVlKGUsbik7aWYobnVsbD09byl0aHJvdyBuZXcgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIHRlc3RhYmlsaXR5IGZvciBlbGVtZW50LiIpO3JldHVybiBvfSxFby5nZXRBbGxBbmd1bGFyVGVzdGFiaWxpdGllcz0oKT0+dC5nZXRBbGxUZXN0YWJpbGl0aWVzKCksRW8uZ2V0QWxsQW5ndWxhclJvb3RFbGVtZW50cz0oKT0+dC5nZXRBbGxSb290RWxlbWVudHMoKSxFby5mcmFtZXdvcmtTdGFiaWxpemVyc3x8KEVvLmZyYW1ld29ya1N0YWJpbGl6ZXJzPVtdKSxFby5mcmFtZXdvcmtTdGFiaWxpemVycy5wdXNoKCh0PT57Y29uc3QgZT1Fby5nZXRBbGxBbmd1bGFyVGVzdGFiaWxpdGllcygpO2xldCBuPWUubGVuZ3RoLG89ITE7Y29uc3QgaT1mdW5jdGlvbihlKXtvPW98fGUsbi0tLDA9PW4mJnQobyl9O2UuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC53aGVuU3RhYmxlKGkpfSkpfSkpfWZpbmRUZXN0YWJpbGl0eUluVHJlZSh0LGUsbil7aWYobnVsbD09ZSlyZXR1cm4gbnVsbDtjb25zdCBvPXQuZ2V0VGVzdGFiaWxpdHkoZSk7cmV0dXJuIG51bGwhPW8/bzpuP2pDKCkuaXNTaGFkb3dSb290KGUpP3RoaXMuZmluZFRlc3RhYmlsaXR5SW5UcmVlKHQsZS5ob3N0LCEwKTp0aGlzLmZpbmRUZXN0YWJpbGl0eUluVHJlZSh0LGUucGFyZW50RWxlbWVudCwhMCk6bnVsbH19bmV3IF9zO2NvbnN0IEp2PW5ldyBOcigiRXZlbnRNYW5hZ2VyUGx1Z2lucyIpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jbGFzcyBRdntjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuX3pvbmU9ZSx0aGlzLl9ldmVudE5hbWVUb1BsdWdpbj1uZXcgTWFwLHQuZm9yRWFjaCgodD0+dC5tYW5hZ2VyPXRoaXMpKSx0aGlzLl9wbHVnaW5zPXQuc2xpY2UoKS5yZXZlcnNlKCl9YWRkRXZlbnRMaXN0ZW5lcih0LGUsbil7cmV0dXJuIHRoaXMuX2ZpbmRQbHVnaW5Gb3IoZSkuYWRkRXZlbnRMaXN0ZW5lcih0LGUsbil9YWRkR2xvYmFsRXZlbnRMaXN0ZW5lcih0LGUsbil7cmV0dXJuIHRoaXMuX2ZpbmRQbHVnaW5Gb3IoZSkuYWRkR2xvYmFsRXZlbnRMaXN0ZW5lcih0LGUsbil9Z2V0Wm9uZSgpe3JldHVybiB0aGlzLl96b25lfV9maW5kUGx1Z2luRm9yKHQpe2NvbnN0IGU9dGhpcy5fZXZlbnROYW1lVG9QbHVnaW4uZ2V0KHQpO2lmKGUpcmV0dXJuIGU7Y29uc3Qgbj10aGlzLl9wbHVnaW5zO2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKXtjb25zdCBvPW5bZV07aWYoby5zdXBwb3J0cyh0KSlyZXR1cm4gdGhpcy5fZXZlbnROYW1lVG9QbHVnaW4uc2V0KHQsbyksb310aHJvdyBuZXcgRXJyb3IoYE5vIGV2ZW50IG1hbmFnZXIgcGx1Z2luIGZvdW5kIGZvciBldmVudCAke3R9YCl9fVF2Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxRdikodXMoSnYpLHVzKHRDKSl9LFF2Lsm1cHJvdj1sbyh7dG9rZW46UXYsZmFjdG9yeTpRdi7JtWZhY30pLFF2LmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6QXJyYXksZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbSnZdfV19LHt0eXBlOnRDfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihRdixbe3R5cGU6Sm19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6QXJyYXksZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbSnZdfV19LHt0eXBlOnRDfV19KSxudWxsKTtjbGFzcyAkdntjb25zdHJ1Y3Rvcih0KXt0aGlzLl9kb2M9dH1hZGRHbG9iYWxFdmVudExpc3RlbmVyKHQsZSxuKXtjb25zdCBvPWpDKCkuZ2V0R2xvYmFsRXZlbnRUYXJnZXQodGhpcy5fZG9jLHQpO2lmKCFvKXRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgZXZlbnQgdGFyZ2V0ICR7b30gZm9yIGV2ZW50ICR7ZX1gKTtyZXR1cm4gdGhpcy5hZGRFdmVudExpc3RlbmVyKG8sZSxuKX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NsYXNzIHR4e2NvbnN0cnVjdG9yKCl7dGhpcy5fc3R5bGVzU2V0PW5ldyBTZXR9YWRkU3R5bGVzKHQpe2NvbnN0IGU9bmV3IFNldDt0LmZvckVhY2goKHQ9Pnt0aGlzLl9zdHlsZXNTZXQuaGFzKHQpfHwodGhpcy5fc3R5bGVzU2V0LmFkZCh0KSxlLmFkZCh0KSl9KSksdGhpcy5vblN0eWxlc0FkZGVkKGUpfW9uU3R5bGVzQWRkZWQodCl7fWdldEFsbFN0eWxlcygpe3JldHVybiBBcnJheS5mcm9tKHRoaXMuX3N0eWxlc1NldCl9fXR4Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHx0eCl9LHR4Lsm1cHJvdj1sbyh7dG9rZW46dHgsZmFjdG9yeTp0eC7JtWZhY30pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIodHgsW3t0eXBlOkptfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW119KSxudWxsKTtjbGFzcyBleCBleHRlbmRzIHR4e2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5fZG9jPXQsdGhpcy5faG9zdE5vZGVzPW5ldyBNYXAsdGhpcy5faG9zdE5vZGVzLnNldCh0LmhlYWQsW10pfV9hZGRTdHlsZXNUb0hvc3QodCxlLG4pe3QuZm9yRWFjaCgodD0+e2NvbnN0IG89dGhpcy5fZG9jLmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7by50ZXh0Q29udGVudD10LG4ucHVzaChlLmFwcGVuZENoaWxkKG8pKX0pKX1hZGRIb3N0KHQpe2NvbnN0IGU9W107dGhpcy5fYWRkU3R5bGVzVG9Ib3N0KHRoaXMuX3N0eWxlc1NldCx0LGUpLHRoaXMuX2hvc3ROb2Rlcy5zZXQodCxlKX1yZW1vdmVIb3N0KHQpe2NvbnN0IGU9dGhpcy5faG9zdE5vZGVzLmdldCh0KTtlJiZlLmZvckVhY2gobngpLHRoaXMuX2hvc3ROb2Rlcy5kZWxldGUodCl9b25TdHlsZXNBZGRlZCh0KXt0aGlzLl9ob3N0Tm9kZXMuZm9yRWFjaCgoKGUsbik9Pnt0aGlzLl9hZGRTdHlsZXNUb0hvc3QodCxuLGUpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5faG9zdE5vZGVzLmZvckVhY2goKHQ9PnQuZm9yRWFjaChueCkpKX19ZnVuY3Rpb24gbngodCl7akMoKS5yZW1vdmUodCl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2V4Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxleCkodXMoVUMpKX0sZXguybVwcm92PWxvKHt0b2tlbjpleCxmYWN0b3J5OmV4Lsm1ZmFjfSksZXguY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbVUNdfV19XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGV4LFt7dHlwZTpKbX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbVUNdfV19XX0pLG51bGwpO2NvbnN0IG94PXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifSxpeD0vJUNPTVAlL2csYXg9InVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fCEhbmdEZXZNb2RlO2Z1bmN0aW9uIHJ4KHQsZSxuKXtmb3IobGV0IG89MDtvPGUubGVuZ3RoO28rKyl7bGV0IGk9ZVtvXTtBcnJheS5pc0FycmF5KGkpP3J4KHQsaSxuKTooaT1pLnJlcGxhY2UoaXgsdCksbi5wdXNoKGkpKX1yZXR1cm4gbn1mdW5jdGlvbiBzeCh0KXtyZXR1cm4gZT0+e2lmKCJfX25nVW53cmFwX18iPT09ZSlyZXR1cm4gdDshMT09PXQoZSkmJihlLnByZXZlbnREZWZhdWx0KCksZS5yZXR1cm5WYWx1ZT0hMSl9fWxldCBseD0hMTtjbGFzcyBjeHtjb25zdHJ1Y3Rvcih0LGUsbil7dGhpcy5ldmVudE1hbmFnZXI9dCx0aGlzLnNoYXJlZFN0eWxlc0hvc3Q9ZSx0aGlzLmFwcElkPW4sdGhpcy5yZW5kZXJlckJ5Q29tcElkPW5ldyBNYXAsdGhpcy5kZWZhdWx0UmVuZGVyZXI9bmV3IGR4KHQpfWNyZWF0ZVJlbmRlcmVyKHQsZSl7aWYoIXR8fCFlKXJldHVybiB0aGlzLmRlZmF1bHRSZW5kZXJlcjtzd2l0Y2goZS5lbmNhcHN1bGF0aW9uKXtjYXNlIFBvLkVtdWxhdGVkOntsZXQgbj10aGlzLnJlbmRlcmVyQnlDb21wSWQuZ2V0KGUuaWQpO3JldHVybiBufHwobj1uZXcgdXgodGhpcy5ldmVudE1hbmFnZXIsdGhpcy5zaGFyZWRTdHlsZXNIb3N0LGUsdGhpcy5hcHBJZCksdGhpcy5yZW5kZXJlckJ5Q29tcElkLnNldChlLmlkLG4pKSxuLmFwcGx5VG9Ib3N0KHQpLG59Y2FzZSAxOmNhc2UgUG8uU2hhZG93RG9tOnJldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgbmdEZXZNb2RlJiYhbmdEZXZNb2RlfHxseHx8MSE9PWUuZW5jYXBzdWxhdGlvbnx8KGx4PSEwLGNvbnNvbGUud2FybigiVmlld0VuY2Fwc3VsYXRpb24uTmF0aXZlIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuIEZhbGxpbmcgYmFjayB0byBWaWV3RW5jYXBzdWxhdGlvbi5TaGFkb3dEb20uIFRoZSBmYWxsYmFjayB3aWxsIGJlIHJlbW92ZWQgaW4gdjEyLiIpKSxuZXcgZngodGhpcy5ldmVudE1hbmFnZXIsdGhpcy5zaGFyZWRTdHlsZXNIb3N0LHQsZSk7ZGVmYXVsdDppZighdGhpcy5yZW5kZXJlckJ5Q29tcElkLmhhcyhlLmlkKSl7Y29uc3QgdD1yeChlLmlkLGUuc3R5bGVzLFtdKTt0aGlzLnNoYXJlZFN0eWxlc0hvc3QuYWRkU3R5bGVzKHQpLHRoaXMucmVuZGVyZXJCeUNvbXBJZC5zZXQoZS5pZCx0aGlzLmRlZmF1bHRSZW5kZXJlcil9cmV0dXJuIHRoaXMuZGVmYXVsdFJlbmRlcmVyfX1iZWdpbigpe31lbmQoKXt9fWN4Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxjeCkodXMoUXYpLHVzKGV4KSx1cyhSXykpfSxjeC7JtXByb3Y9bG8oe3Rva2VuOmN4LGZhY3Rvcnk6Y3guybVmYWN9KSxjeC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOlF2fSx7dHlwZTpleH0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W1JfXX1dfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihjeCxbe3R5cGU6Sm19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6UXZ9LHt0eXBlOmV4fSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbUl9dfV19XX0pLG51bGwpO2NsYXNzIGR4e2NvbnN0cnVjdG9yKHQpe3RoaXMuZXZlbnRNYW5hZ2VyPXQsdGhpcy5kYXRhPU9iamVjdC5jcmVhdGUobnVsbCl9ZGVzdHJveSgpe31jcmVhdGVFbGVtZW50KHQsZSl7cmV0dXJuIGU/ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG94W2VdfHxlLHQpOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodCl9Y3JlYXRlQ29tbWVudCh0KXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlQ29tbWVudCh0KX1jcmVhdGVUZXh0KHQpe3JldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0KX1hcHBlbmRDaGlsZCh0LGUpe3QuYXBwZW5kQ2hpbGQoZSl9aW5zZXJ0QmVmb3JlKHQsZSxuKXt0JiZ0Lmluc2VydEJlZm9yZShlLG4pfXJlbW92ZUNoaWxkKHQsZSl7dCYmdC5yZW1vdmVDaGlsZChlKX1zZWxlY3RSb290RWxlbWVudCh0LGUpe2xldCBuPSJzdHJpbmciPT10eXBlb2YgdD9kb2N1bWVudC5xdWVyeVNlbGVjdG9yKHQpOnQ7aWYoIW4pdGhyb3cgbmV3IEVycm9yKGBUaGUgc2VsZWN0b3IgIiR7dH0iIGRpZCBub3QgbWF0Y2ggYW55IGVsZW1lbnRzYCk7cmV0dXJuIGV8fChuLnRleHRDb250ZW50PSIiKSxufXBhcmVudE5vZGUodCl7cmV0dXJuIHQucGFyZW50Tm9kZX1uZXh0U2libGluZyh0KXtyZXR1cm4gdC5uZXh0U2libGluZ31zZXRBdHRyaWJ1dGUodCxlLG4sbyl7aWYobyl7ZT1vKyI6IitlO2NvbnN0IGk9b3hbb107aT90LnNldEF0dHJpYnV0ZU5TKGksZSxuKTp0LnNldEF0dHJpYnV0ZShlLG4pfWVsc2UgdC5zZXRBdHRyaWJ1dGUoZSxuKX1yZW1vdmVBdHRyaWJ1dGUodCxlLG4pe2lmKG4pe2NvbnN0IG89b3hbbl07bz90LnJlbW92ZUF0dHJpYnV0ZU5TKG8sZSk6dC5yZW1vdmVBdHRyaWJ1dGUoYCR7bn06JHtlfWApfWVsc2UgdC5yZW1vdmVBdHRyaWJ1dGUoZSl9YWRkQ2xhc3ModCxlKXt0LmNsYXNzTGlzdC5hZGQoZSl9cmVtb3ZlQ2xhc3ModCxlKXt0LmNsYXNzTGlzdC5yZW1vdmUoZSl9c2V0U3R5bGUodCxlLG4sbyl7byYodGMuRGFzaENhc2V8dGMuSW1wb3J0YW50KT90LnN0eWxlLnNldFByb3BlcnR5KGUsbixvJnRjLkltcG9ydGFudD8iaW1wb3J0YW50IjoiIik6dC5zdHlsZVtlXT1ufXJlbW92ZVN0eWxlKHQsZSxuKXtuJnRjLkRhc2hDYXNlP3Quc3R5bGUucmVtb3ZlUHJvcGVydHkoZSk6dC5zdHlsZVtlXT0iIn1zZXRQcm9wZXJ0eSh0LGUsbil7YXgmJm14KGUsInByb3BlcnR5IiksdFtlXT1ufXNldFZhbHVlKHQsZSl7dC5ub2RlVmFsdWU9ZX1saXN0ZW4odCxlLG4pe3JldHVybiBheCYmbXgoZSwibGlzdGVuZXIiKSwic3RyaW5nIj09dHlwZW9mIHQ/dGhpcy5ldmVudE1hbmFnZXIuYWRkR2xvYmFsRXZlbnRMaXN0ZW5lcih0LGUsc3gobikpOnRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodCxlLHN4KG4pKX19Y29uc3QgcHg9IkAiLmNoYXJDb2RlQXQoMCk7ZnVuY3Rpb24gbXgodCxlKXtpZih0LmNoYXJDb2RlQXQoMCk9PT1weCl0aHJvdyBuZXcgRXJyb3IoYEZvdW5kIHRoZSBzeW50aGV0aWMgJHtlfSAke3R9LiBQbGVhc2UgaW5jbHVkZSBlaXRoZXIgIkJyb3dzZXJBbmltYXRpb25zTW9kdWxlIiBvciAiTm9vcEFuaW1hdGlvbnNNb2R1bGUiIGluIHlvdXIgYXBwbGljYXRpb24uYCl9Y2xhc3MgdXggZXh0ZW5kcyBkeHtjb25zdHJ1Y3Rvcih0LGUsbixvKXtzdXBlcih0KSx0aGlzLmNvbXBvbmVudD1uO2NvbnN0IGk9cngobysiLSIrbi5pZCxuLnN0eWxlcyxbXSk7ZS5hZGRTdHlsZXMoaSksdGhpcy5jb250ZW50QXR0cj0oZnVuY3Rpb24gYSh0KXtyZXR1cm4iX25nY29udGVudC0lQ09NUCUiLnJlcGxhY2UoaXgsdCl9KShvKyItIituLmlkKSx0aGlzLmhvc3RBdHRyPShmdW5jdGlvbiByKHQpe3JldHVybiJfbmdob3N0LSVDT01QJSIucmVwbGFjZShpeCx0KX0pKG8rIi0iK24uaWQpfWFwcGx5VG9Ib3N0KHQpe3N1cGVyLnNldEF0dHJpYnV0ZSh0LHRoaXMuaG9zdEF0dHIsIiIpfWNyZWF0ZUVsZW1lbnQodCxlKXtjb25zdCBuPXN1cGVyLmNyZWF0ZUVsZW1lbnQodCxlKTtyZXR1cm4gc3VwZXIuc2V0QXR0cmlidXRlKG4sdGhpcy5jb250ZW50QXR0ciwiIiksbn19Y2xhc3MgZnggZXh0ZW5kcyBkeHtjb25zdHJ1Y3Rvcih0LGUsbixvKXtzdXBlcih0KSx0aGlzLnNoYXJlZFN0eWxlc0hvc3Q9ZSx0aGlzLmhvc3RFbD1uLHRoaXMuc2hhZG93Um9vdD1uLmF0dGFjaFNoYWRvdyh7bW9kZToib3BlbiJ9KSx0aGlzLnNoYXJlZFN0eWxlc0hvc3QuYWRkSG9zdCh0aGlzLnNoYWRvd1Jvb3QpO2NvbnN0IGk9cngoby5pZCxvLnN0eWxlcyxbXSk7Zm9yKGxldCB0PTA7dDxpLmxlbmd0aDt0Kyspe2NvbnN0IGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtlLnRleHRDb250ZW50PWlbdF0sdGhpcy5zaGFkb3dSb290LmFwcGVuZENoaWxkKGUpfX1ub2RlT3JTaGFkb3dSb290KHQpe3JldHVybiB0PT09dGhpcy5ob3N0RWw/dGhpcy5zaGFkb3dSb290OnR9ZGVzdHJveSgpe3RoaXMuc2hhcmVkU3R5bGVzSG9zdC5yZW1vdmVIb3N0KHRoaXMuc2hhZG93Um9vdCl9YXBwZW5kQ2hpbGQodCxlKXtyZXR1cm4gc3VwZXIuYXBwZW5kQ2hpbGQodGhpcy5ub2RlT3JTaGFkb3dSb290KHQpLGUpfWluc2VydEJlZm9yZSh0LGUsbil7cmV0dXJuIHN1cGVyLmluc2VydEJlZm9yZSh0aGlzLm5vZGVPclNoYWRvd1Jvb3QodCksZSxuKX1yZW1vdmVDaGlsZCh0LGUpe3JldHVybiBzdXBlci5yZW1vdmVDaGlsZCh0aGlzLm5vZGVPclNoYWRvd1Jvb3QodCksZSl9cGFyZW50Tm9kZSh0KXtyZXR1cm4gdGhpcy5ub2RlT3JTaGFkb3dSb290KHN1cGVyLnBhcmVudE5vZGUodGhpcy5ub2RlT3JTaGFkb3dSb290KHQpKSl9fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jbGFzcyBneCBleHRlbmRzICR2e2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfXN1cHBvcnRzKHQpe3JldHVybiEwfWFkZEV2ZW50TGlzdGVuZXIodCxlLG4pe3JldHVybiB0LmFkZEV2ZW50TGlzdGVuZXIoZSxuLCExKSwoKT0+dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKHQsZSxuKX1yZW1vdmVFdmVudExpc3RlbmVyKHQsZSxuKXtyZXR1cm4gdC5yZW1vdmVFdmVudExpc3RlbmVyKGUsbil9fWd4Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxneCkodXMoVUMpKX0sZ3guybVwcm92PWxvKHt0b2tlbjpneCxmYWN0b3J5Omd4Lsm1ZmFjfSksZ3guY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbVUNdfV19XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGd4LFt7dHlwZTpKbX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbVUNdfV19XX0pLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3QgaHg9e3BhbjohMCxwYW5zdGFydDohMCxwYW5tb3ZlOiEwLHBhbmVuZDohMCxwYW5jYW5jZWw6ITAscGFubGVmdDohMCxwYW5yaWdodDohMCxwYW51cDohMCxwYW5kb3duOiEwLHBpbmNoOiEwLHBpbmNoc3RhcnQ6ITAscGluY2htb3ZlOiEwLHBpbmNoZW5kOiEwLHBpbmNoY2FuY2VsOiEwLHBpbmNoaW46ITAscGluY2hvdXQ6ITAscHJlc3M6ITAscHJlc3N1cDohMCxyb3RhdGU6ITAscm90YXRlc3RhcnQ6ITAscm90YXRlbW92ZTohMCxyb3RhdGVlbmQ6ITAscm90YXRlY2FuY2VsOiEwLHN3aXBlOiEwLHN3aXBlbGVmdDohMCxzd2lwZXJpZ2h0OiEwLHN3aXBldXA6ITAsc3dpcGVkb3duOiEwLHRhcDohMCxkb3VibGV0YXA6ITB9LGJ4PW5ldyBOcigiSGFtbWVyR2VzdHVyZUNvbmZpZyIpLHl4PW5ldyBOcigiSGFtbWVyTG9hZGVyIik7Y2xhc3MgX3h7Y29uc3RydWN0b3IoKXt0aGlzLmV2ZW50cz1bXSx0aGlzLm92ZXJyaWRlcz17fX1idWlsZEhhbW1lcih0KXtjb25zdCBlPW5ldyBIYW1tZXIodCx0aGlzLm9wdGlvbnMpO2UuZ2V0KCJwaW5jaCIpLnNldCh7ZW5hYmxlOiEwfSksZS5nZXQoInJvdGF0ZSIpLnNldCh7ZW5hYmxlOiEwfSk7Zm9yKGNvbnN0IHQgaW4gdGhpcy5vdmVycmlkZXMpZS5nZXQodCkuc2V0KHRoaXMub3ZlcnJpZGVzW3RdKTtyZXR1cm4gZX19X3guybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fF94KX0sX3guybVwcm92PWxvKHt0b2tlbjpfeCxmYWN0b3J5Ol94Lsm1ZmFjfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihfeCxbe3R5cGU6Sm19XSwoZnVuY3Rpb24oKXtyZXR1cm5bXX0pLG51bGwpO2NsYXNzIEN4IGV4dGVuZHMgJHZ7Y29uc3RydWN0b3IodCxlLG4sbyl7c3VwZXIodCksdGhpcy5fY29uZmlnPWUsdGhpcy5jb25zb2xlPW4sdGhpcy5sb2FkZXI9byx0aGlzLl9sb2FkZXJQcm9taXNlPW51bGx9c3VwcG9ydHModCl7cmV0dXJuISghaHguaGFzT3duUHJvcGVydHkodC50b0xvd2VyQ2FzZSgpKSYmIXRoaXMuaXNDdXN0b21FdmVudCh0KXx8IXdpbmRvdy5IYW1tZXImJiF0aGlzLmxvYWRlciYmKCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmdGhpcy5jb25zb2xlLndhcm4oYFRoZSAiJHt0fSIgZXZlbnQgY2Fubm90IGJlIGJvdW5kIGJlY2F1c2UgSGFtbWVyLkpTIGlzIG5vdCBsb2FkZWQgYW5kIG5vIGN1c3RvbSBsb2FkZXIgaGFzIGJlZW4gc3BlY2lmaWVkLmApLDEpKX1hZGRFdmVudExpc3RlbmVyKHQsZSxuKXtjb25zdCBvPXRoaXMubWFuYWdlci5nZXRab25lKCk7aWYoZT1lLnRvTG93ZXJDYXNlKCksIXdpbmRvdy5IYW1tZXImJnRoaXMubG9hZGVyKXt0aGlzLl9sb2FkZXJQcm9taXNlPXRoaXMuX2xvYWRlclByb21pc2V8fHRoaXMubG9hZGVyKCk7bGV0IG89ITEsaT0oKT0+e289ITB9O3JldHVybiB0aGlzLl9sb2FkZXJQcm9taXNlLnRoZW4oKCgpPT57aWYoIXdpbmRvdy5IYW1tZXIpcmV0dXJuKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZ0aGlzLmNvbnNvbGUud2FybigiVGhlIGN1c3RvbSBIQU1NRVJfTE9BREVSIGNvbXBsZXRlZCwgYnV0IEhhbW1lci5KUyBpcyBub3QgcHJlc2VudC4iKSx2b2lkKGk9KCk9Pnt9KTtvfHwoaT10aGlzLmFkZEV2ZW50TGlzdGVuZXIodCxlLG4pKX0pKS5jYXRjaCgoKCk9PnsoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJnRoaXMuY29uc29sZS53YXJuKGBUaGUgIiR7ZX0iIGV2ZW50IGNhbm5vdCBiZSBib3VuZCBiZWNhdXNlIHRoZSBjdXN0b20gSGFtbWVyLkpTIGxvYWRlciBmYWlsZWQuYCksaT0oKT0+e319KSksKCk9PntpKCl9fXJldHVybiBvLnJ1bk91dHNpZGVBbmd1bGFyKCgoKT0+e2NvbnN0IGk9dGhpcy5fY29uZmlnLmJ1aWxkSGFtbWVyKHQpLGE9ZnVuY3Rpb24odCl7by5ydW5HdWFyZGVkKChmdW5jdGlvbigpe24odCl9KSl9O3JldHVybiBpLm9uKGUsYSksKCk9PntpLm9mZihlLGEpLCJmdW5jdGlvbiI9PXR5cGVvZiBpLmRlc3Ryb3kmJmkuZGVzdHJveSgpfX0pKX1pc0N1c3RvbUV2ZW50KHQpe3JldHVybiB0aGlzLl9jb25maWcuZXZlbnRzLmluZGV4T2YodCk+LTF9fUN4Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxDeCkodXMoVUMpLHVzKGJ4KSx1cyhMXyksdXMoeXgsOCkpfSxDeC7JtXByb3Y9bG8oe3Rva2VuOkN4LGZhY3Rvcnk6Q3guybVmYWN9KSxDeC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltVQ119XX0se3R5cGU6X3gsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbYnhdfV19LHt0eXBlOkxffSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W3l4XX1dfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihDeCxbe3R5cGU6Sm19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W1VDXX1dfSx7dHlwZTpfeCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltieF19XX0se3R5cGU6TF99LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbeXhdfV19XX0pLG51bGwpO2NvbnN0IE14PVt7cHJvdmlkZTpKdix1c2VDbGFzczpDeCxtdWx0aTohMCxkZXBzOltVQyxieCxMXyxbbmV3IF9zLHl4XV19LHtwcm92aWRlOmJ4LHVzZUNsYXNzOl94LGRlcHM6W119XTtjbGFzcyB2eHt9dnguybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHZ4KX0sdnguybVtb2Q9Wm8oe3R5cGU6dnh9KSx2eC7JtWluaj1jbyh7cHJvdmlkZXJzOk14fSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYih2eCxbe3R5cGU6a18sYXJnczpbe3Byb3ZpZGVyczpNeH1dfV0sbnVsbCxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IHh4PVsiYWx0IiwiY29udHJvbCIsIm1ldGEiLCJzaGlmdCJdLE94PXsiXGIiOiJCYWNrc3BhY2UiLCJcdCI6IlRhYiIsIn8iOiJEZWxldGUiLCIbIjoiRXNjYXBlIixEZWw6IkRlbGV0ZSIsRXNjOiJFc2NhcGUiLExlZnQ6IkFycm93TGVmdCIsUmlnaHQ6IkFycm93UmlnaHQiLFVwOiJBcnJvd1VwIixEb3duOiJBcnJvd0Rvd24iLE1lbnU6IkNvbnRleHRNZW51IixTY3JvbGw6IlNjcm9sbExvY2siLFdpbjoiT1MifSxQeD17QToiMSIsQjoiMiIsQzoiMyIsRDoiNCIsRToiNSIsRjoiNiIsRzoiNyIsSDoiOCIsSToiOSIsSjoiKiIsSzoiKyIsTToiLSIsTjoiLiIsTzoiLyIsImAiOiIwIiwiwpAiOiJOdW1Mb2NrIn0sd3g9e2FsdDp0PT50LmFsdEtleSxjb250cm9sOnQ9PnQuY3RybEtleSxtZXRhOnQ9PnQubWV0YUtleSxzaGlmdDp0PT50LnNoaWZ0S2V5fTtjbGFzcyBreCBleHRlbmRzICR2e2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfXN1cHBvcnRzKHQpe3JldHVybiBudWxsIT1reC5wYXJzZUV2ZW50TmFtZSh0KX1hZGRFdmVudExpc3RlbmVyKHQsZSxuKXtjb25zdCBvPWt4LnBhcnNlRXZlbnROYW1lKGUpLGk9a3guZXZlbnRDYWxsYmFjayhvLmZ1bGxLZXksbix0aGlzLm1hbmFnZXIuZ2V0Wm9uZSgpKTtyZXR1cm4gdGhpcy5tYW5hZ2VyLmdldFpvbmUoKS5ydW5PdXRzaWRlQW5ndWxhcigoKCk9PmpDKCkub25BbmRDYW5jZWwodCxvLmRvbUV2ZW50TmFtZSxpKSkpfXN0YXRpYyBwYXJzZUV2ZW50TmFtZSh0KXtjb25zdCBlPXQudG9Mb3dlckNhc2UoKS5zcGxpdCgiLiIpLG49ZS5zaGlmdCgpO2lmKDA9PT1lLmxlbmd0aHx8ImtleWRvd24iIT09biYmImtleXVwIiE9PW4pcmV0dXJuIG51bGw7Y29uc3Qgbz1reC5fbm9ybWFsaXplS2V5KGUucG9wKCkpO2xldCBpPSIiO2lmKHh4LmZvckVhY2goKHQ9Pntjb25zdCBuPWUuaW5kZXhPZih0KTtuPi0xJiYoZS5zcGxpY2UobiwxKSxpKz10KyIuIil9KSksaSs9bywwIT1lLmxlbmd0aHx8MD09PW8ubGVuZ3RoKXJldHVybiBudWxsO2NvbnN0IGE9e307cmV0dXJuIGEuZG9tRXZlbnROYW1lPW4sYS5mdWxsS2V5PWksYX1zdGF0aWMgZ2V0RXZlbnRGdWxsS2V5KHQpe2xldCBlPSIiLG49KGZ1bmN0aW9uIG8odCl7bGV0IGU9dC5rZXk7aWYobnVsbD09ZSl7aWYoZT10LmtleUlkZW50aWZpZXIsbnVsbD09ZSlyZXR1cm4iVW5pZGVudGlmaWVkIjtlLnN0YXJ0c1dpdGgoIlUrIikmJihlPVN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoZS5zdWJzdHJpbmcoMiksMTYpKSwzPT09dC5sb2NhdGlvbiYmUHguaGFzT3duUHJvcGVydHkoZSkmJihlPVB4W2VdKSl9cmV0dXJuIE94W2VdfHxlfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8pKHQpO3JldHVybiBuPW4udG9Mb3dlckNhc2UoKSwiICI9PT1uP249InNwYWNlIjoiLiI9PT1uJiYobj0iZG90IikseHguZm9yRWFjaCgobz0+e28hPW4mJigwLHd4W29dKSh0KSYmKGUrPW8rIi4iKX0pKSxlKz1uLGV9c3RhdGljIGV2ZW50Q2FsbGJhY2sodCxlLG4pe3JldHVybiBvPT57a3guZ2V0RXZlbnRGdWxsS2V5KG8pPT09dCYmbi5ydW5HdWFyZGVkKCgoKT0+ZShvKSkpfX1zdGF0aWMgX25vcm1hbGl6ZUtleSh0KXtzd2l0Y2godCl7Y2FzZSJlc2MiOnJldHVybiJlc2NhcGUiO2RlZmF1bHQ6cmV0dXJuIHR9fX1reC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8a3gpKHVzKFVDKSl9LGt4Lsm1cHJvdj1sbyh7dG9rZW46a3gsZmFjdG9yeTpreC7JtWZhY30pLGt4LmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W1VDXX1dfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihreCxbe3R5cGU6Sm19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W1VDXX1dfV19KSxudWxsKTtjbGFzcyBTeHt9ZnVuY3Rpb24gRHgodCl7cmV0dXJuIG5ldyBFeCh0LmdldChVQykpfVN4Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxTeCl9LFN4Lsm1cHJvdj1sbyh7ZmFjdG9yeTpmdW5jdGlvbiB0KCl7cmV0dXJuIHVzKEV4KX0sdG9rZW46U3gscHJvdmlkZWRJbjoicm9vdCJ9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFN4LFt7dHlwZTpKbSxhcmdzOlt7cHJvdmlkZWRJbjoicm9vdCIsdXNlRXhpc3Rpbmc6SW4oKCgpPT5FeCkpfV19XSxudWxsLG51bGwpO2NsYXNzIEV4IGV4dGVuZHMgU3h7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLl9kb2M9dH1zYW5pdGl6ZSh0LGUpe2lmKG51bGw9PWUpcmV0dXJuIG51bGw7c3dpdGNoKHQpe2Nhc2UgeGwuTk9ORTpyZXR1cm4gZTtjYXNlIHhsLkhUTUw6cmV0dXJuIFlzKGUsIkhUTUwiKT9HcyhlKTpNbCh0aGlzLl9kb2MsU3RyaW5nKGUpKS50b1N0cmluZygpO2Nhc2UgeGwuU1RZTEU6cmV0dXJuIFlzKGUsIlN0eWxlIik/R3MoZSk6ZTtjYXNlIHhsLlNDUklQVDppZihZcyhlLCJTY3JpcHQiKSlyZXR1cm4gR3MoZSk7dGhyb3cgbmV3IEVycm9yKCJ1bnNhZmUgdmFsdWUgdXNlZCBpbiBhIHNjcmlwdCBjb250ZXh0Iik7Y2FzZSB4bC5VUkw6cmV0dXJuIHFzKGUpLFlzKGUsIlVSTCIpP0dzKGUpOiRzKFN0cmluZyhlKSk7Y2FzZSB4bC5SRVNPVVJDRV9VUkw6aWYoWXMoZSwiUmVzb3VyY2VVUkwiKSlyZXR1cm4gR3MoZSk7dGhyb3cgbmV3IEVycm9yKCJ1bnNhZmUgdmFsdWUgdXNlZCBpbiBhIHJlc291cmNlIFVSTCBjb250ZXh0IChzZWUgaHR0cHM6Ly9nLmNvL25nL3NlY3VyaXR5I3hzcykiKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCBTZWN1cml0eUNvbnRleHQgJHt0fSAoc2VlIGh0dHBzOi8vZy5jby9uZy9zZWN1cml0eSN4c3MpYCl9fWJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKHQpe3JldHVybihmdW5jdGlvbiBlKHQpe3JldHVybiBuZXcgQnModCl9KSh0KX1ieXBhc3NTZWN1cml0eVRydXN0U3R5bGUodCl7cmV0dXJuKGZ1bmN0aW9uIGUodCl7cmV0dXJuIG5ldyBWcyh0KX0pKHQpfWJ5cGFzc1NlY3VyaXR5VHJ1c3RTY3JpcHQodCl7cmV0dXJuKGZ1bmN0aW9uIGUodCl7cmV0dXJuIG5ldyBqcyh0KX0pKHQpfWJ5cGFzc1NlY3VyaXR5VHJ1c3RVcmwodCl7cmV0dXJuKGZ1bmN0aW9uIGUodCl7cmV0dXJuIG5ldyBVcyh0KX0pKHQpfWJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybCh0KXtyZXR1cm4oZnVuY3Rpb24gZSh0KXtyZXR1cm4gbmV3IFdzKHQpfSkodCl9fUV4Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxFeCkodXMoVUMpKX0sRXguybVwcm92PWxvKHtmYWN0b3J5OmZ1bmN0aW9uIHQoKXtyZXR1cm4gRHgodXMoSXApKX0sdG9rZW46RXgscHJvdmlkZWRJbjoicm9vdCJ9KSxFeC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltVQ119XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoRXgsW3t0eXBlOkptLGFyZ3M6W3twcm92aWRlZEluOiJyb290Iix1c2VGYWN0b3J5OkR4LGRlcHM6W1FwXX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltVQ119XX1dfSksbnVsbCk7Y29uc3QgQXg9Z0Mod0MsImJyb3dzZXIiLFt7cHJvdmlkZTpIXyx1c2VWYWx1ZToiYnJvd3NlciJ9LHtwcm92aWRlOnpfLHVzZVZhbHVlOgovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KZnVuY3Rpb24gUngoKXtXdi5tYWtlQ3VycmVudCgpLEt2LmluaXQoKX0sbXVsdGk6ITB9LHtwcm92aWRlOlVDLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gVHgoKXtyZXR1cm4oZnVuY3Rpb24gdChlKXtGaT1lfSkoZG9jdW1lbnQpLGRvY3VtZW50fSxkZXBzOltdfV0pLE54PVtbXSx7cHJvdmlkZTpIcCx1c2VWYWx1ZToicm9vdCJ9LHtwcm92aWRlOkVsLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gSXgoKXtyZXR1cm4gbmV3IEVsfSxkZXBzOltdfSx7cHJvdmlkZTpKdix1c2VDbGFzczpneCxtdWx0aTohMCxkZXBzOltVQyx0QyxIX119LHtwcm92aWRlOkp2LHVzZUNsYXNzOmt4LG11bHRpOiEwLGRlcHM6W1VDXX0sW10se3Byb3ZpZGU6Y3gsdXNlQ2xhc3M6Y3gsZGVwczpbUXYsZXgsUl9dfSx7cHJvdmlkZTptaCx1c2VFeGlzdGluZzpjeH0se3Byb3ZpZGU6dHgsdXNlRXhpc3Rpbmc6ZXh9LHtwcm92aWRlOmV4LHVzZUNsYXNzOmV4LGRlcHM6W1VDXX0se3Byb3ZpZGU6c0MsdXNlQ2xhc3M6c0MsZGVwczpbdENdfSx7cHJvdmlkZTpRdix1c2VDbGFzczpRdixkZXBzOltKdix0Q119LFtdXTtjbGFzcyB6eHtjb25zdHJ1Y3Rvcih0KXtpZih0KXRocm93IG5ldyBFcnJvcigiQnJvd3Nlck1vZHVsZSBoYXMgYWxyZWFkeSBiZWVuIGxvYWRlZC4gSWYgeW91IG5lZWQgYWNjZXNzIHRvIGNvbW1vbiBkaXJlY3RpdmVzIHN1Y2ggYXMgTmdJZiBhbmQgTmdGb3IgZnJvbSBhIGxhenkgbG9hZGVkIG1vZHVsZSwgaW1wb3J0IENvbW1vbk1vZHVsZSBpbnN0ZWFkLiIpfXN0YXRpYyB3aXRoU2VydmVyVHJhbnNpdGlvbih0KXtyZXR1cm57bmdNb2R1bGU6engscHJvdmlkZXJzOlt7cHJvdmlkZTpSXyx1c2VWYWx1ZTp0LmFwcElkfSx7cHJvdmlkZTpxdix1c2VFeGlzdGluZzpSX30sWnZdfX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpmdW5jdGlvbiBIeCgpe3JldHVybiBuZXcgRngodXMoVUMpKX16eC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8engpKHVzKHp4LDEyKSl9LHp4Lsm1bW9kPVpvKHt0eXBlOnp4fSksenguybVpbmo9Y28oe3Byb3ZpZGVyczpOeCxpbXBvcnRzOltCdixSQ119KSx6eC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOnp4LGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTpNc30se3R5cGU6eXMsYXJnczpbenhdfV19XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKHp4LHtleHBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW0J2LFJDXX19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHp4LFt7dHlwZTprXyxhcmdzOlt7cHJvdmlkZXJzOk54LGV4cG9ydHM6W0J2LFJDXX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOnp4LGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTpNc30se3R5cGU6eXMsYXJnczpbenhdfV19XX0pLG51bGwpO2NsYXNzIEZ4e2NvbnN0cnVjdG9yKHQpe3RoaXMuX2RvYz10LHRoaXMuX2RvbT1qQygpfWFkZFRhZyh0LGU9ITEpe3JldHVybiB0P3RoaXMuX2dldE9yQ3JlYXRlRWxlbWVudCh0LGUpOm51bGx9YWRkVGFncyh0LGU9ITEpe3JldHVybiB0P3QucmVkdWNlKCgodCxuKT0+KG4mJnQucHVzaCh0aGlzLl9nZXRPckNyZWF0ZUVsZW1lbnQobixlKSksdCkpLFtdKTpbXX1nZXRUYWcodCl7cmV0dXJuIHQmJnRoaXMuX2RvYy5xdWVyeVNlbGVjdG9yKGBtZXRhWyR7dH1dYCl8fG51bGx9Z2V0VGFncyh0KXtpZighdClyZXR1cm5bXTtjb25zdCBlPXRoaXMuX2RvYy5xdWVyeVNlbGVjdG9yQWxsKGBtZXRhWyR7dH1dYCk7cmV0dXJuIGU/W10uc2xpY2UuY2FsbChlKTpbXX11cGRhdGVUYWcodCxlKXtpZighdClyZXR1cm4gbnVsbDtlPWV8fHRoaXMuX3BhcnNlU2VsZWN0b3IodCk7Y29uc3Qgbj10aGlzLmdldFRhZyhlKTtyZXR1cm4gbj90aGlzLl9zZXRNZXRhRWxlbWVudEF0dHJpYnV0ZXModCxuKTp0aGlzLl9nZXRPckNyZWF0ZUVsZW1lbnQodCwhMCl9cmVtb3ZlVGFnKHQpe3RoaXMucmVtb3ZlVGFnRWxlbWVudCh0aGlzLmdldFRhZyh0KSl9cmVtb3ZlVGFnRWxlbWVudCh0KXt0JiZ0aGlzLl9kb20ucmVtb3ZlKHQpfV9nZXRPckNyZWF0ZUVsZW1lbnQodCxlPSExKXtpZighZSl7Y29uc3QgZT10aGlzLl9wYXJzZVNlbGVjdG9yKHQpLG49dGhpcy5nZXRUYWcoZSk7aWYobiYmdGhpcy5fY29udGFpbnNBdHRyaWJ1dGVzKHQsbikpcmV0dXJuIG59Y29uc3Qgbj10aGlzLl9kb20uY3JlYXRlRWxlbWVudCgibWV0YSIpO3JldHVybiB0aGlzLl9zZXRNZXRhRWxlbWVudEF0dHJpYnV0ZXModCxuKSx0aGlzLl9kb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXS5hcHBlbmRDaGlsZChuKSxufV9zZXRNZXRhRWxlbWVudEF0dHJpYnV0ZXModCxlKXtyZXR1cm4gT2JqZWN0LmtleXModCkuZm9yRWFjaCgobj0+ZS5zZXRBdHRyaWJ1dGUodGhpcy5fZ2V0TWV0YUtleU1hcChuKSx0W25dKSkpLGV9X3BhcnNlU2VsZWN0b3IodCl7Y29uc3QgZT10Lm5hbWU/Im5hbWUiOiJwcm9wZXJ0eSI7cmV0dXJuYCR7ZX09IiR7dFtlXX0iYH1fY29udGFpbnNBdHRyaWJ1dGVzKHQsZSl7cmV0dXJuIE9iamVjdC5rZXlzKHQpLmV2ZXJ5KChuPT5lLmdldEF0dHJpYnV0ZSh0aGlzLl9nZXRNZXRhS2V5TWFwKG4pKT09PXRbbl0pKX1fZ2V0TWV0YUtleU1hcCh0KXtyZXR1cm4gTHhbdF18fHR9fUZ4Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxGeCkodXMoVUMpKX0sRnguybVwcm92PWxvKHtmYWN0b3J5Okh4LHRva2VuOkZ4LHByb3ZpZGVkSW46InJvb3QifSksRnguY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbVUNdfV19XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEZ4LFt7dHlwZTpKbSxhcmdzOlt7cHJvdmlkZWRJbjoicm9vdCIsdXNlRmFjdG9yeTpIeCxkZXBzOltdfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W1VDXX1dfV19KSxudWxsKTtjb25zdCBMeD17aHR0cEVxdWl2OiJodHRwLWVxdWl2In07Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIEJ4KCl7cmV0dXJuIG5ldyBWeCh1cyhVQykpfWNsYXNzIFZ4e2NvbnN0cnVjdG9yKHQpe3RoaXMuX2RvYz10fWdldFRpdGxlKCl7cmV0dXJuIHRoaXMuX2RvYy50aXRsZX1zZXRUaXRsZSh0KXt0aGlzLl9kb2MudGl0bGU9dHx8IiJ9fVZ4Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxWeCkodXMoVUMpKX0sVnguybVwcm92PWxvKHtmYWN0b3J5OkJ4LHRva2VuOlZ4LHByb3ZpZGVkSW46InJvb3QifSksVnguY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbVUNdfV19XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFZ4LFt7dHlwZTpKbSxhcmdzOlt7cHJvdmlkZWRJbjoicm9vdCIsdXNlRmFjdG9yeTpCeCxkZXBzOltdfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W1VDXX1dfV19KSxudWxsKTtjbGFzcyBqeHtjb25zdHJ1Y3Rvcigpe3RoaXMuc3RvcmU9e30sdGhpcy5vblNlcmlhbGl6ZUNhbGxiYWNrcz17fX1zdGF0aWMgaW5pdCh0KXtjb25zdCBlPW5ldyBqeDtyZXR1cm4gZS5zdG9yZT10LGV9Z2V0KHQsZSl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuc3RvcmVbdF0/dGhpcy5zdG9yZVt0XTplfXNldCh0LGUpe3RoaXMuc3RvcmVbdF09ZX1yZW1vdmUodCl7ZGVsZXRlIHRoaXMuc3RvcmVbdF19aGFzS2V5KHQpe3JldHVybiB0aGlzLnN0b3JlLmhhc093blByb3BlcnR5KHQpfW9uU2VyaWFsaXplKHQsZSl7dGhpcy5vblNlcmlhbGl6ZUNhbGxiYWNrc1t0XT1lfXRvSnNvbigpe2Zvcihjb25zdCB0IGluIHRoaXMub25TZXJpYWxpemVDYWxsYmFja3MpaWYodGhpcy5vblNlcmlhbGl6ZUNhbGxiYWNrcy5oYXNPd25Qcm9wZXJ0eSh0KSl0cnl7dGhpcy5zdG9yZVt0XT10aGlzLm9uU2VyaWFsaXplQ2FsbGJhY2tzW3RdKCl9Y2F0Y2godCl7Y29uc29sZS53YXJuKCJFeGNlcHRpb24gaW4gb25TZXJpYWxpemUgY2FsbGJhY2s6ICIsdCl9cmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMuc3RvcmUpfX1mdW5jdGlvbiBVeCh0LGUpe2NvbnN0IG49dC5nZXRFbGVtZW50QnlJZChlKyItc3RhdGUiKTtsZXQgbz17fTtpZihuJiZuLnRleHRDb250ZW50KXRyeXtvPUpTT04ucGFyc2UoKGZ1bmN0aW9uIGkodCl7Y29uc3QgZT17IiZhOyI6IiYiLCImcTsiOiciJywiJnM7IjoiJyIsIiZsOyI6IjwiLCImZzsiOiI+In07cmV0dXJuIHQucmVwbGFjZSgvJlteO10rOy9nLCh0PT5lW3RdKSl9KShuLnRleHRDb250ZW50KSl9Y2F0Y2godCl7Y29uc29sZS53YXJuKCJFeGNlcHRpb24gd2hpbGUgcmVzdG9yaW5nIFRyYW5zZmVyU3RhdGUgZm9yIGFwcCAiK2UsdCl9cmV0dXJuIGp4LmluaXQobyl9anguybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGp4KX0sanguybVwcm92PWxvKHt0b2tlbjpqeCxmYWN0b3J5Omp4Lsm1ZmFjfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihqeCxbe3R5cGU6Sm19XSwoZnVuY3Rpb24oKXtyZXR1cm5bXX0pLG51bGwpO2NsYXNzIFd4e31XeC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8V3gpfSxXeC7JtW1vZD1abyh7dHlwZTpXeH0pLFd4Lsm1aW5qPWNvKHtwcm92aWRlcnM6W3twcm92aWRlOmp4LHVzZUZhY3Rvcnk6VXgsZGVwczpbVUMsUl9dfV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFd4LFt7dHlwZTprXyxhcmdzOlt7cHJvdmlkZXJzOlt7cHJvdmlkZTpqeCx1c2VGYWN0b3J5OlV4LGRlcHM6W1VDLFJfXX1dfV19XSxudWxsLG51bGwpLAovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCm5ldyBiaCgiMTEuMi4xNCIpO3ZhciBHeD0idW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOnt9O2Z1bmN0aW9uIFl4KHQsZSxuKXtyZXR1cm4gdChuPXtwYXRoOmUsZXhwb3J0czp7fSxyZXF1aXJlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuKGZ1bmN0aW9uIG4oKXt0aHJvdyBuZXcgRXJyb3IoIkR5bmFtaWMgcmVxdWlyZXMgYXJlIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkIGJ5IEByb2xsdXAvcGx1Z2luLWNvbW1vbmpzIil9Ci8qKgogICAgKiBAbGljZW5zZSBBbmd1bGFyIHY5LjEuMC1uZXh0LjQrNjEuc2hhLWU1NTI1OTEud2l0aC1sb2NhbC1jaGFuZ2VzCiAgICAqIChjKSAyMDEwLTIwMjAgR29vZ2xlIExMQy4gaHR0cHM6Ly9hbmd1bGFyLmlvLwogICAgKiBMaWNlbnNlOiBNSVQKICAgICovKSgpfX0sbi5leHBvcnRzKSxuLmV4cG9ydHN9ZnVuY3Rpb24gcXgodCl7aWYodC5fX2VzTW9kdWxlKXJldHVybiB0O3ZhciBlPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7cmV0dXJuIE9iamVjdC5rZXlzKHQpLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLG8uZ2V0P286e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSl9KSksZX0hKGZ1bmN0aW9uKCl7Ci8qKgogICAgICAgICAqIEBsaWNlbnNlCiAgICAgICAgICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgICAgICoKICAgICAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAgICAgKi8KKGZ1bmN0aW9uKHQpe3ZhciBlPXQucGVyZm9ybWFuY2U7ZnVuY3Rpb24gbih0KXtlJiZlLm1hcmsmJmUubWFyayh0KX1mdW5jdGlvbiBvKHQsbil7ZSYmZS5tZWFzdXJlJiZlLm1lYXN1cmUodCxuKX1uKCJab25lIik7dmFyIGk9dC5fX1pvbmVfc3ltYm9sX3ByZWZpeHx8Il9fem9uZV9zeW1ib2xfXyI7ZnVuY3Rpb24gYSh0KXtyZXR1cm4gaSt0fXZhciByPSEwPT09dFthKCJmb3JjZUR1cGxpY2F0ZVpvbmVDaGVjayIpXTtpZih0LlpvbmUpe2lmKHJ8fCJmdW5jdGlvbiIhPXR5cGVvZiB0LlpvbmUuX19zeW1ib2xfXyl0aHJvdyBuZXcgRXJyb3IoIlpvbmUgYWxyZWFkeSBsb2FkZWQuIik7cmV0dXJuIHQuWm9uZX12YXIgcz0oZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQsZSl7dGhpcy5fcGFyZW50PXQsdGhpcy5fbmFtZT1lP2UubmFtZXx8InVubmFtZWQiOiI8cm9vdD4iLHRoaXMuX3Byb3BlcnRpZXM9ZSYmZS5wcm9wZXJ0aWVzfHx7fSx0aGlzLl96b25lRGVsZWdhdGU9bmV3IGQodGhpcyx0aGlzLl9wYXJlbnQmJnRoaXMuX3BhcmVudC5fem9uZURlbGVnYXRlLGUpfXJldHVybiBlLmFzc2VydFpvbmVQYXRjaGVkPWZ1bmN0aW9uKCl7aWYodC5Qcm9taXNlIT09RC5ab25lQXdhcmVQcm9taXNlKXRocm93IG5ldyBFcnJvcigiWm9uZS5qcyBoYXMgZGV0ZWN0ZWQgdGhhdCBab25lQXdhcmVQcm9taXNlIGAod2luZG93fGdsb2JhbCkuUHJvbWlzZWAgaGFzIGJlZW4gb3ZlcndyaXR0ZW4uXG5Nb3N0IGxpa2VseSBjYXVzZSBpcyB0aGF0IGEgUHJvbWlzZSBwb2x5ZmlsbCBoYXMgYmVlbiBsb2FkZWQgYWZ0ZXIgWm9uZS5qcyAoUG9seWZpbGxpbmcgUHJvbWlzZSBhcGkgaXMgbm90IG5lY2Vzc2FyeSB3aGVuIHpvbmUuanMgaXMgbG9hZGVkLiBJZiB5b3UgbXVzdCBsb2FkIG9uZSwgZG8gc28gYmVmb3JlIGxvYWRpbmcgem9uZS5qcy4pIil9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJyb290Iix7Z2V0OmZ1bmN0aW9uKCl7Zm9yKHZhciB0PWUuY3VycmVudDt0LnBhcmVudDspdD10LnBhcmVudDtyZXR1cm4gdH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiY3VycmVudCIse2dldDpmdW5jdGlvbigpe3JldHVybiBBLnpvbmV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImN1cnJlbnRUYXNrIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFJ9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5fX2xvYWRfcGF0Y2g9ZnVuY3Rpb24oaSxhKXtpZihELmhhc093blByb3BlcnR5KGkpKXtpZihyKXRocm93IEVycm9yKCJBbHJlYWR5IGxvYWRlZCBwYXRjaDogIitpKX1lbHNlIGlmKCF0WyJfX1pvbmVfZGlzYWJsZV8iK2ldKXt2YXIgcz0iWm9uZToiK2k7bihzKSxEW2ldPWEodCxlLEUpLG8ocyxzKX19LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwicGFyZW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhcmVudH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsIm5hbWUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbmFtZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nZXRab25lV2l0aCh0KTtpZihlKXJldHVybiBlLl9wcm9wZXJ0aWVzW3RdfSxlLnByb3RvdHlwZS5nZXRab25lV2l0aD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcztlOyl7aWYoZS5fcHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eSh0KSlyZXR1cm4gZTtlPWUuX3BhcmVudH1yZXR1cm4gbnVsbH0sZS5wcm90b3R5cGUuZm9yaz1mdW5jdGlvbih0KXtpZighdCl0aHJvdyBuZXcgRXJyb3IoIlpvbmVTcGVjIHJlcXVpcmVkISIpO3JldHVybiB0aGlzLl96b25lRGVsZWdhdGUuZm9yayh0aGlzLHQpfSxlLnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKHQsZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RpbmcgZnVuY3Rpb24gZ290OiAiK3QpO3ZhciBuPXRoaXMuX3pvbmVEZWxlZ2F0ZS5pbnRlcmNlcHQodGhpcyx0LGUpLG89dGhpcztyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gby5ydW5HdWFyZGVkKG4sdGhpcyxhcmd1bWVudHMsZSl9fSxlLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24odCxlLG4sbyl7QT17cGFyZW50OkEsem9uZTp0aGlzfTt0cnl7cmV0dXJuIHRoaXMuX3pvbmVEZWxlZ2F0ZS5pbnZva2UodGhpcyx0LGUsbixvKX1maW5hbGx5e0E9QS5wYXJlbnR9fSxlLnByb3RvdHlwZS5ydW5HdWFyZGVkPWZ1bmN0aW9uKHQsZSxuLG8pe3ZvaWQgMD09PWUmJihlPW51bGwpLEE9e3BhcmVudDpBLHpvbmU6dGhpc307dHJ5e3RyeXtyZXR1cm4gdGhpcy5fem9uZURlbGVnYXRlLmludm9rZSh0aGlzLHQsZSxuLG8pfWNhdGNoKHQpe2lmKHRoaXMuX3pvbmVEZWxlZ2F0ZS5oYW5kbGVFcnJvcih0aGlzLHQpKXRocm93IHR9fWZpbmFsbHl7QT1BLnBhcmVudH19LGUucHJvdG90eXBlLnJ1blRhc2s9ZnVuY3Rpb24odCxlLG4pe2lmKHQuem9uZSE9dGhpcyl0aHJvdyBuZXcgRXJyb3IoIkEgdGFzayBjYW4gb25seSBiZSBydW4gaW4gdGhlIHpvbmUgb2YgY3JlYXRpb24hIChDcmVhdGlvbjogIisodC56b25lfHxfKS5uYW1lKyI7IEV4ZWN1dGlvbjogIit0aGlzLm5hbWUrIikiKTtpZih0LnN0YXRlIT09Q3x8dC50eXBlIT09UyYmdC50eXBlIT09ayl7dmFyIG89dC5zdGF0ZSE9eDtvJiZ0Ll90cmFuc2l0aW9uVG8oeCx2KSx0LnJ1bkNvdW50Kys7dmFyIGk9UjtSPXQsQT17cGFyZW50OkEsem9uZTp0aGlzfTt0cnl7dC50eXBlPT1rJiZ0LmRhdGEmJiF0LmRhdGEuaXNQZXJpb2RpYyYmKHQuY2FuY2VsRm49dm9pZCAwKTt0cnl7cmV0dXJuIHRoaXMuX3pvbmVEZWxlZ2F0ZS5pbnZva2VUYXNrKHRoaXMsdCxlLG4pfWNhdGNoKHQpe2lmKHRoaXMuX3pvbmVEZWxlZ2F0ZS5oYW5kbGVFcnJvcih0aGlzLHQpKXRocm93IHR9fWZpbmFsbHl7dC5zdGF0ZSE9PUMmJnQuc3RhdGUhPT1QJiYodC50eXBlPT1TfHx0LmRhdGEmJnQuZGF0YS5pc1BlcmlvZGljP28mJnQuX3RyYW5zaXRpb25Ubyh2LHgpOih0LnJ1bkNvdW50PTAsdGhpcy5fdXBkYXRlVGFza0NvdW50KHQsLTEpLG8mJnQuX3RyYW5zaXRpb25UbyhDLHgsQykpKSxBPUEucGFyZW50LFI9aX19fSxlLnByb3RvdHlwZS5zY2hlZHVsZVRhc2s9ZnVuY3Rpb24odCl7aWYodC56b25lJiZ0LnpvbmUhPT10aGlzKWZvcih2YXIgZT10aGlzO2U7KXtpZihlPT09dC56b25lKXRocm93IEVycm9yKCJjYW4gbm90IHJlc2NoZWR1bGUgdGFzayB0byAiK3RoaXMubmFtZSsiIHdoaWNoIGlzIGRlc2NlbmRhbnRzIG9mIHRoZSBvcmlnaW5hbCB6b25lICIrdC56b25lLm5hbWUpO2U9ZS5wYXJlbnR9dC5fdHJhbnNpdGlvblRvKE0sQyk7dmFyIG49W107dC5fem9uZURlbGVnYXRlcz1uLHQuX3pvbmU9dGhpczt0cnl7dD10aGlzLl96b25lRGVsZWdhdGUuc2NoZWR1bGVUYXNrKHRoaXMsdCl9Y2F0Y2goZSl7dGhyb3cgdC5fdHJhbnNpdGlvblRvKFAsTSxDKSx0aGlzLl96b25lRGVsZWdhdGUuaGFuZGxlRXJyb3IodGhpcyxlKSxlfXJldHVybiB0Ll96b25lRGVsZWdhdGVzPT09biYmdGhpcy5fdXBkYXRlVGFza0NvdW50KHQsMSksdC5zdGF0ZT09TSYmdC5fdHJhbnNpdGlvblRvKHYsTSksdH0sZS5wcm90b3R5cGUuc2NoZWR1bGVNaWNyb1Rhc2s9ZnVuY3Rpb24odCxlLG4sbyl7cmV0dXJuIHRoaXMuc2NoZWR1bGVUYXNrKG5ldyBwKHcsdCxlLG4sbyx2b2lkIDApKX0sZS5wcm90b3R5cGUuc2NoZWR1bGVNYWNyb1Rhc2s9ZnVuY3Rpb24odCxlLG4sbyxpKXtyZXR1cm4gdGhpcy5zY2hlZHVsZVRhc2sobmV3IHAoayx0LGUsbixvLGkpKX0sZS5wcm90b3R5cGUuc2NoZWR1bGVFdmVudFRhc2s9ZnVuY3Rpb24odCxlLG4sbyxpKXtyZXR1cm4gdGhpcy5zY2hlZHVsZVRhc2sobmV3IHAoUyx0LGUsbixvLGkpKX0sZS5wcm90b3R5cGUuY2FuY2VsVGFzaz1mdW5jdGlvbih0KXtpZih0LnpvbmUhPXRoaXMpdGhyb3cgbmV3IEVycm9yKCJBIHRhc2sgY2FuIG9ubHkgYmUgY2FuY2VsbGVkIGluIHRoZSB6b25lIG9mIGNyZWF0aW9uISAoQ3JlYXRpb246ICIrKHQuem9uZXx8XykubmFtZSsiOyBFeGVjdXRpb246ICIrdGhpcy5uYW1lKyIpIik7dC5fdHJhbnNpdGlvblRvKE8sdix4KTt0cnl7dGhpcy5fem9uZURlbGVnYXRlLmNhbmNlbFRhc2sodGhpcyx0KX1jYXRjaChlKXt0aHJvdyB0Ll90cmFuc2l0aW9uVG8oUCxPKSx0aGlzLl96b25lRGVsZWdhdGUuaGFuZGxlRXJyb3IodGhpcyxlKSxlfXJldHVybiB0aGlzLl91cGRhdGVUYXNrQ291bnQodCwtMSksdC5fdHJhbnNpdGlvblRvKEMsTyksdC5ydW5Db3VudD0wLHR9LGUucHJvdG90eXBlLl91cGRhdGVUYXNrQ291bnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10Ll96b25lRGVsZWdhdGVzOy0xPT1lJiYodC5fem9uZURlbGVnYXRlcz1udWxsKTtmb3IodmFyIG89MDtvPG4ubGVuZ3RoO28rKyluW29dLl91cGRhdGVUYXNrQ291bnQodC50eXBlLGUpfSxlfSkoKTtzLl9fc3ltYm9sX189YTt2YXIgbCxjPXtuYW1lOiIiLG9uSGFzVGFzazpmdW5jdGlvbih0LGUsbixvKXtyZXR1cm4gdC5oYXNUYXNrKG4sbyl9LG9uU2NoZWR1bGVUYXNrOmZ1bmN0aW9uKHQsZSxuLG8pe3JldHVybiB0LnNjaGVkdWxlVGFzayhuLG8pfSxvbkludm9rZVRhc2s6ZnVuY3Rpb24odCxlLG4sbyxpLGEpe3JldHVybiB0Lmludm9rZVRhc2sobixvLGksYSl9LG9uQ2FuY2VsVGFzazpmdW5jdGlvbih0LGUsbixvKXtyZXR1cm4gdC5jYW5jZWxUYXNrKG4sbyl9fSxkPShmdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuX3Rhc2tDb3VudHM9e21pY3JvVGFzazowLG1hY3JvVGFzazowLGV2ZW50VGFzazowfSx0aGlzLnpvbmU9dCx0aGlzLl9wYXJlbnREZWxlZ2F0ZT1lLHRoaXMuX2ZvcmtaUz1uJiYobiYmbi5vbkZvcms/bjplLl9mb3JrWlMpLHRoaXMuX2ZvcmtEbGd0PW4mJihuLm9uRm9yaz9lOmUuX2ZvcmtEbGd0KSx0aGlzLl9mb3JrQ3VyclpvbmU9biYmKG4ub25Gb3JrP3RoaXMuem9uZTplLl9mb3JrQ3VyclpvbmUpLHRoaXMuX2ludGVyY2VwdFpTPW4mJihuLm9uSW50ZXJjZXB0P246ZS5faW50ZXJjZXB0WlMpLHRoaXMuX2ludGVyY2VwdERsZ3Q9biYmKG4ub25JbnRlcmNlcHQ/ZTplLl9pbnRlcmNlcHREbGd0KSx0aGlzLl9pbnRlcmNlcHRDdXJyWm9uZT1uJiYobi5vbkludGVyY2VwdD90aGlzLnpvbmU6ZS5faW50ZXJjZXB0Q3VyclpvbmUpLHRoaXMuX2ludm9rZVpTPW4mJihuLm9uSW52b2tlP246ZS5faW52b2tlWlMpLHRoaXMuX2ludm9rZURsZ3Q9biYmKG4ub25JbnZva2U/ZTplLl9pbnZva2VEbGd0KSx0aGlzLl9pbnZva2VDdXJyWm9uZT1uJiYobi5vbkludm9rZT90aGlzLnpvbmU6ZS5faW52b2tlQ3VyclpvbmUpLHRoaXMuX2hhbmRsZUVycm9yWlM9biYmKG4ub25IYW5kbGVFcnJvcj9uOmUuX2hhbmRsZUVycm9yWlMpLHRoaXMuX2hhbmRsZUVycm9yRGxndD1uJiYobi5vbkhhbmRsZUVycm9yP2U6ZS5faGFuZGxlRXJyb3JEbGd0KSx0aGlzLl9oYW5kbGVFcnJvckN1cnJab25lPW4mJihuLm9uSGFuZGxlRXJyb3I/dGhpcy56b25lOmUuX2hhbmRsZUVycm9yQ3VyclpvbmUpLHRoaXMuX3NjaGVkdWxlVGFza1pTPW4mJihuLm9uU2NoZWR1bGVUYXNrP246ZS5fc2NoZWR1bGVUYXNrWlMpLHRoaXMuX3NjaGVkdWxlVGFza0RsZ3Q9biYmKG4ub25TY2hlZHVsZVRhc2s/ZTplLl9zY2hlZHVsZVRhc2tEbGd0KSx0aGlzLl9zY2hlZHVsZVRhc2tDdXJyWm9uZT1uJiYobi5vblNjaGVkdWxlVGFzaz90aGlzLnpvbmU6ZS5fc2NoZWR1bGVUYXNrQ3VyclpvbmUpLHRoaXMuX2ludm9rZVRhc2taUz1uJiYobi5vbkludm9rZVRhc2s/bjplLl9pbnZva2VUYXNrWlMpLHRoaXMuX2ludm9rZVRhc2tEbGd0PW4mJihuLm9uSW52b2tlVGFzaz9lOmUuX2ludm9rZVRhc2tEbGd0KSx0aGlzLl9pbnZva2VUYXNrQ3VyclpvbmU9biYmKG4ub25JbnZva2VUYXNrP3RoaXMuem9uZTplLl9pbnZva2VUYXNrQ3VyclpvbmUpLHRoaXMuX2NhbmNlbFRhc2taUz1uJiYobi5vbkNhbmNlbFRhc2s/bjplLl9jYW5jZWxUYXNrWlMpLHRoaXMuX2NhbmNlbFRhc2tEbGd0PW4mJihuLm9uQ2FuY2VsVGFzaz9lOmUuX2NhbmNlbFRhc2tEbGd0KSx0aGlzLl9jYW5jZWxUYXNrQ3VyclpvbmU9biYmKG4ub25DYW5jZWxUYXNrP3RoaXMuem9uZTplLl9jYW5jZWxUYXNrQ3VyclpvbmUpLHRoaXMuX2hhc1Rhc2taUz1udWxsLHRoaXMuX2hhc1Rhc2tEbGd0PW51bGwsdGhpcy5faGFzVGFza0RsZ3RPd25lcj1udWxsLHRoaXMuX2hhc1Rhc2tDdXJyWm9uZT1udWxsO3ZhciBvPW4mJm4ub25IYXNUYXNrOyhvfHxlJiZlLl9oYXNUYXNrWlMpJiYodGhpcy5faGFzVGFza1pTPW8/bjpjLHRoaXMuX2hhc1Rhc2tEbGd0PWUsdGhpcy5faGFzVGFza0RsZ3RPd25lcj10aGlzLHRoaXMuX2hhc1Rhc2tDdXJyWm9uZT10LG4ub25TY2hlZHVsZVRhc2t8fCh0aGlzLl9zY2hlZHVsZVRhc2taUz1jLHRoaXMuX3NjaGVkdWxlVGFza0RsZ3Q9ZSx0aGlzLl9zY2hlZHVsZVRhc2tDdXJyWm9uZT10aGlzLnpvbmUpLG4ub25JbnZva2VUYXNrfHwodGhpcy5faW52b2tlVGFza1pTPWMsdGhpcy5faW52b2tlVGFza0RsZ3Q9ZSx0aGlzLl9pbnZva2VUYXNrQ3VyclpvbmU9dGhpcy56b25lKSxuLm9uQ2FuY2VsVGFza3x8KHRoaXMuX2NhbmNlbFRhc2taUz1jLHRoaXMuX2NhbmNlbFRhc2tEbGd0PWUsdGhpcy5fY2FuY2VsVGFza0N1cnJab25lPXRoaXMuem9uZSkpfXJldHVybiB0LnByb3RvdHlwZS5mb3JrPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2ZvcmtaUz90aGlzLl9mb3JrWlMub25Gb3JrKHRoaXMuX2ZvcmtEbGd0LHRoaXMuem9uZSx0LGUpOm5ldyBzKHQsZSl9LHQucHJvdG90eXBlLmludGVyY2VwdD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHRoaXMuX2ludGVyY2VwdFpTP3RoaXMuX2ludGVyY2VwdFpTLm9uSW50ZXJjZXB0KHRoaXMuX2ludGVyY2VwdERsZ3QsdGhpcy5faW50ZXJjZXB0Q3VyclpvbmUsdCxlLG4pOmV9LHQucHJvdG90eXBlLmludm9rZT1mdW5jdGlvbih0LGUsbixvLGkpe3JldHVybiB0aGlzLl9pbnZva2VaUz90aGlzLl9pbnZva2VaUy5vbkludm9rZSh0aGlzLl9pbnZva2VEbGd0LHRoaXMuX2ludm9rZUN1cnJab25lLHQsZSxuLG8saSk6ZS5hcHBseShuLG8pfSx0LnByb3RvdHlwZS5oYW5kbGVFcnJvcj1mdW5jdGlvbih0LGUpe3JldHVybiF0aGlzLl9oYW5kbGVFcnJvclpTfHx0aGlzLl9oYW5kbGVFcnJvclpTLm9uSGFuZGxlRXJyb3IodGhpcy5faGFuZGxlRXJyb3JEbGd0LHRoaXMuX2hhbmRsZUVycm9yQ3VyclpvbmUsdCxlKX0sdC5wcm90b3R5cGUuc2NoZWR1bGVUYXNrPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZTtpZih0aGlzLl9zY2hlZHVsZVRhc2taUyl0aGlzLl9oYXNUYXNrWlMmJm4uX3pvbmVEZWxlZ2F0ZXMucHVzaCh0aGlzLl9oYXNUYXNrRGxndE93bmVyKSwobj10aGlzLl9zY2hlZHVsZVRhc2taUy5vblNjaGVkdWxlVGFzayh0aGlzLl9zY2hlZHVsZVRhc2tEbGd0LHRoaXMuX3NjaGVkdWxlVGFza0N1cnJab25lLHQsZSkpfHwobj1lKTtlbHNlIGlmKGUuc2NoZWR1bGVGbillLnNjaGVkdWxlRm4oZSk7ZWxzZXtpZihlLnR5cGUhPXcpdGhyb3cgbmV3IEVycm9yKCJUYXNrIGlzIG1pc3Npbmcgc2NoZWR1bGVGbi4iKTtiKGUpfXJldHVybiBufSx0LnByb3RvdHlwZS5pbnZva2VUYXNrPWZ1bmN0aW9uKHQsZSxuLG8pe3JldHVybiB0aGlzLl9pbnZva2VUYXNrWlM/dGhpcy5faW52b2tlVGFza1pTLm9uSW52b2tlVGFzayh0aGlzLl9pbnZva2VUYXNrRGxndCx0aGlzLl9pbnZva2VUYXNrQ3VyclpvbmUsdCxlLG4sbyk6ZS5jYWxsYmFjay5hcHBseShuLG8pfSx0LnByb3RvdHlwZS5jYW5jZWxUYXNrPWZ1bmN0aW9uKHQsZSl7dmFyIG47aWYodGhpcy5fY2FuY2VsVGFza1pTKW49dGhpcy5fY2FuY2VsVGFza1pTLm9uQ2FuY2VsVGFzayh0aGlzLl9jYW5jZWxUYXNrRGxndCx0aGlzLl9jYW5jZWxUYXNrQ3VyclpvbmUsdCxlKTtlbHNle2lmKCFlLmNhbmNlbEZuKXRocm93IEVycm9yKCJUYXNrIGlzIG5vdCBjYW5jZWxhYmxlIik7bj1lLmNhbmNlbEZuKGUpfXJldHVybiBufSx0LnByb3RvdHlwZS5oYXNUYXNrPWZ1bmN0aW9uKHQsZSl7dHJ5e3RoaXMuX2hhc1Rhc2taUyYmdGhpcy5faGFzVGFza1pTLm9uSGFzVGFzayh0aGlzLl9oYXNUYXNrRGxndCx0aGlzLl9oYXNUYXNrQ3VyclpvbmUsdCxlKX1jYXRjaChlKXt0aGlzLmhhbmRsZUVycm9yKHQsZSl9fSx0LnByb3RvdHlwZS5fdXBkYXRlVGFza0NvdW50PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fdGFza0NvdW50cyxvPW5bdF0saT1uW3RdPW8rZTtpZihpPDApdGhyb3cgbmV3IEVycm9yKCJNb3JlIHRhc2tzIGV4ZWN1dGVkIHRoZW4gd2VyZSBzY2hlZHVsZWQuIik7MCE9byYmMCE9aXx8dGhpcy5oYXNUYXNrKHRoaXMuem9uZSx7bWljcm9UYXNrOm4ubWljcm9UYXNrPjAsbWFjcm9UYXNrOm4ubWFjcm9UYXNrPjAsZXZlbnRUYXNrOm4uZXZlbnRUYXNrPjAsY2hhbmdlOnR9KX0sdH0pKCkscD0oZnVuY3Rpb24oKXtmdW5jdGlvbiBlKG4sbyxpLGEscixzKXtpZih0aGlzLl96b25lPW51bGwsdGhpcy5ydW5Db3VudD0wLHRoaXMuX3pvbmVEZWxlZ2F0ZXM9bnVsbCx0aGlzLl9zdGF0ZT0ibm90U2NoZWR1bGVkIix0aGlzLnR5cGU9bix0aGlzLnNvdXJjZT1vLHRoaXMuZGF0YT1hLHRoaXMuc2NoZWR1bGVGbj1yLHRoaXMuY2FuY2VsRm49cywhaSl0aHJvdyBuZXcgRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBkZWZpbmVkIik7dGhpcy5jYWxsYmFjaz1pO3ZhciBsPXRoaXM7dGhpcy5pbnZva2U9bj09PVMmJmEmJmEudXNlRz9lLmludm9rZVRhc2s6ZnVuY3Rpb24oKXtyZXR1cm4gZS5pbnZva2VUYXNrLmNhbGwodCxsLHRoaXMsYXJndW1lbnRzKX19cmV0dXJuIGUuaW52b2tlVGFzaz1mdW5jdGlvbih0LGUsbil7dHx8KHQ9dGhpcyksVCsrO3RyeXtyZXR1cm4gdC5ydW5Db3VudCsrLHQuem9uZS5ydW5UYXNrKHQsZSxuKX1maW5hbGx5ezE9PVQmJnkoKSxULS19fSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInpvbmUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fem9uZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInN0YXRlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YXRlfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLmNhbmNlbFNjaGVkdWxlUmVxdWVzdD1mdW5jdGlvbigpe3RoaXMuX3RyYW5zaXRpb25UbyhDLE0pfSxlLnByb3RvdHlwZS5fdHJhbnNpdGlvblRvPWZ1bmN0aW9uKHQsZSxuKXtpZih0aGlzLl9zdGF0ZSE9PWUmJnRoaXMuX3N0YXRlIT09bil0aHJvdyBuZXcgRXJyb3IodGhpcy50eXBlKyIgJyIrdGhpcy5zb3VyY2UrIic6IGNhbiBub3QgdHJhbnNpdGlvbiB0byAnIit0KyInLCBleHBlY3Rpbmcgc3RhdGUgJyIrZSsiJyIrKG4/IiBvciAnIituKyInIjoiIikrIiwgd2FzICciK3RoaXMuX3N0YXRlKyInLiIpO3RoaXMuX3N0YXRlPXQsdD09QyYmKHRoaXMuX3pvbmVEZWxlZ2F0ZXM9bnVsbCl9LGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YSYmdm9pZCAwIT09dGhpcy5kYXRhLmhhbmRsZUlkP3RoaXMuZGF0YS5oYW5kbGVJZC50b1N0cmluZygpOk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0aGlzKX0sZS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6dGhpcy50eXBlLHN0YXRlOnRoaXMuc3RhdGUsc291cmNlOnRoaXMuc291cmNlLHpvbmU6dGhpcy56b25lLm5hbWUscnVuQ291bnQ6dGhpcy5ydW5Db3VudH19LGV9KSgpLG09YSgic2V0VGltZW91dCIpLHU9YSgiUHJvbWlzZSIpLGY9YSgidGhlbiIpLGc9W10saD0hMTtmdW5jdGlvbiBiKGUpe2lmKDA9PT1UJiYwPT09Zy5sZW5ndGgpaWYobHx8dFt1XSYmKGw9dFt1XS5yZXNvbHZlKDApKSxsKXt2YXIgbj1sW2ZdO258fChuPWwudGhlbiksbi5jYWxsKGwseSl9ZWxzZSB0W21dKHksMCk7ZSYmZy5wdXNoKGUpfWZ1bmN0aW9uIHkoKXtpZighaCl7Zm9yKGg9ITA7Zy5sZW5ndGg7KXt2YXIgdD1nO2c9W107Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspe3ZhciBuPXRbZV07dHJ5e24uem9uZS5ydW5UYXNrKG4sbnVsbCxudWxsKX1jYXRjaCh0KXtFLm9uVW5oYW5kbGVkRXJyb3IodCl9fX1FLm1pY3JvdGFza0RyYWluRG9uZSgpLGg9ITF9fXZhciBfPXtuYW1lOiJOTyBaT05FIn0sQz0ibm90U2NoZWR1bGVkIixNPSJzY2hlZHVsaW5nIix2PSJzY2hlZHVsZWQiLHg9InJ1bm5pbmciLE89ImNhbmNlbGluZyIsUD0idW5rbm93biIsdz0ibWljcm9UYXNrIixrPSJtYWNyb1Rhc2siLFM9ImV2ZW50VGFzayIsRD17fSxFPXtzeW1ib2w6YSxjdXJyZW50Wm9uZUZyYW1lOmZ1bmN0aW9uKCl7cmV0dXJuIEF9LG9uVW5oYW5kbGVkRXJyb3I6TixtaWNyb3Rhc2tEcmFpbkRvbmU6TixzY2hlZHVsZU1pY3JvVGFzazpiLHNob3dVbmNhdWdodEVycm9yOmZ1bmN0aW9uKCl7cmV0dXJuIXNbYSgiaWdub3JlQ29uc29sZUVycm9yVW5jYXVnaHRFcnJvciIpXX0scGF0Y2hFdmVudFRhcmdldDpmdW5jdGlvbigpe3JldHVybltdfSxwYXRjaE9uUHJvcGVydGllczpOLHBhdGNoTWV0aG9kOmZ1bmN0aW9uKCl7cmV0dXJuIE59LGJpbmRBcmd1bWVudHM6ZnVuY3Rpb24oKXtyZXR1cm5bXX0scGF0Y2hUaGVuOmZ1bmN0aW9uKCl7cmV0dXJuIE59LHBhdGNoTWFjcm9UYXNrOmZ1bmN0aW9uKCl7cmV0dXJuIE59LHNldE5hdGl2ZVByb21pc2U6ZnVuY3Rpb24odCl7dCYmImZ1bmN0aW9uIj09dHlwZW9mIHQucmVzb2x2ZSYmKGw9dC5yZXNvbHZlKDApKX0scGF0Y2hFdmVudFByb3RvdHlwZTpmdW5jdGlvbigpe3JldHVybiBOfSxpc0lFT3JFZGdlOmZ1bmN0aW9uKCl7cmV0dXJuITF9LGdldEdsb2JhbE9iamVjdHM6ZnVuY3Rpb24oKXt9LE9iamVjdERlZmluZVByb3BlcnR5OmZ1bmN0aW9uKCl7cmV0dXJuIE59LE9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcjpmdW5jdGlvbigpe30sT2JqZWN0Q3JlYXRlOmZ1bmN0aW9uKCl7fSxBcnJheVNsaWNlOmZ1bmN0aW9uKCl7cmV0dXJuW119LHBhdGNoQ2xhc3M6ZnVuY3Rpb24oKXtyZXR1cm4gTn0sd3JhcFdpdGhDdXJyZW50Wm9uZTpmdW5jdGlvbigpe3JldHVybiBOfSxmaWx0ZXJQcm9wZXJ0aWVzOmZ1bmN0aW9uKCl7cmV0dXJuW119LGF0dGFjaE9yaWdpblRvUGF0Y2hlZDpmdW5jdGlvbigpe3JldHVybiBOfSxfcmVkZWZpbmVQcm9wZXJ0eTpmdW5jdGlvbigpe3JldHVybiBOfSxwYXRjaENhbGxiYWNrczpmdW5jdGlvbigpe3JldHVybiBOfX0sQT17cGFyZW50Om51bGwsem9uZTpuZXcgcyhudWxsLG51bGwpfSxSPW51bGwsVD0wO2Z1bmN0aW9uIE4oKXt9bygiWm9uZSIsIlpvbmUiKSx0LlpvbmU9c30pKCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3d8fCJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZiYmc2VsZnx8R3gpLAovKioKICAgICAgICAgKiBAbGljZW5zZQogICAgICAgICAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICAgICAqCiAgICAgICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgICAgICovClpvbmUuX19sb2FkX3BhdGNoKCJab25lQXdhcmVQcm9taXNlIiwoZnVuY3Rpb24odCxlLG4pe3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsaT1PYmplY3QuZGVmaW5lUHJvcGVydHksYT1uLnN5bWJvbCxyPVtdLHM9ITA9PT10W2EoIkRJU0FCTEVfV1JBUFBJTkdfVU5DQVVHSFRfUFJPTUlTRV9SRUpFQ1RJT04iKV0sbD1hKCJQcm9taXNlIiksYz1hKCJ0aGVuIik7bi5vblVuaGFuZGxlZEVycm9yPWZ1bmN0aW9uKHQpe2lmKG4uc2hvd1VuY2F1Z2h0RXJyb3IoKSl7dmFyIGU9dCYmdC5yZWplY3Rpb247ZT9jb25zb2xlLmVycm9yKCJVbmhhbmRsZWQgUHJvbWlzZSByZWplY3Rpb246IixlIGluc3RhbmNlb2YgRXJyb3I/ZS5tZXNzYWdlOmUsIjsgWm9uZToiLHQuem9uZS5uYW1lLCI7IFRhc2s6Iix0LnRhc2smJnQudGFzay5zb3VyY2UsIjsgVmFsdWU6IixlLGUgaW5zdGFuY2VvZiBFcnJvcj9lLnN0YWNrOnZvaWQgMCk6Y29uc29sZS5lcnJvcih0KX19LG4ubWljcm90YXNrRHJhaW5Eb25lPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PWZ1bmN0aW9uKCl7dmFyIHQ9ci5zaGlmdCgpO3RyeXt0LnpvbmUucnVuR3VhcmRlZCgoZnVuY3Rpb24oKXt0aHJvdyB0fSkpfWNhdGNoKHQpeyEoZnVuY3Rpb24gbyh0KXtuLm9uVW5oYW5kbGVkRXJyb3IodCk7dHJ5e3ZhciBvPWVbZF07ImZ1bmN0aW9uIj09dHlwZW9mIG8mJm8uY2FsbCh0aGlzLHQpfWNhdGNoKHQpe319KSh0KX19O3IubGVuZ3RoOyl0KCl9O3ZhciBkPWEoInVuaGFuZGxlZFByb21pc2VSZWplY3Rpb25IYW5kbGVyIik7ZnVuY3Rpb24gcCh0KXtyZXR1cm4gdCYmdC50aGVufWZ1bmN0aW9uIG0odCl7cmV0dXJuIHR9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gRC5yZWplY3QodCl9dmFyIGY9YSgic3RhdGUiKSxnPWEoInZhbHVlIiksaD1hKCJmaW5hbGx5IiksYj1hKCJwYXJlbnRQcm9taXNlVmFsdWUiKSx5PWEoInBhcmVudFByb21pc2VTdGF0ZSIpLF89bnVsbCxDPSEwLE09ITE7ZnVuY3Rpb24gdih0LGUpe3JldHVybiBmdW5jdGlvbihuKXt0cnl7Tyh0LGUsbil9Y2F0Y2goZSl7Tyh0LCExLGUpfX19dmFyIHg9YSgiY3VycmVudFRhc2tUcmFjZSIpO2Z1bmN0aW9uIE8odCxvLGEpe3ZhciBsLGM9KGw9ITEsZnVuY3Rpb24gdChlKXtyZXR1cm4gZnVuY3Rpb24oKXtsfHwobD0hMCxlLmFwcGx5KG51bGwsYXJndW1lbnRzKSl9fSk7aWYodD09PWEpdGhyb3cgbmV3IFR5cGVFcnJvcigiUHJvbWlzZSByZXNvbHZlZCB3aXRoIGl0c2VsZiIpO2lmKHRbZl09PT1fKXt2YXIgZD1udWxsO3RyeXsib2JqZWN0IiE9dHlwZW9mIGEmJiJmdW5jdGlvbiIhPXR5cGVvZiBhfHwoZD1hJiZhLnRoZW4pfWNhdGNoKGUpe3JldHVybiBjKChmdW5jdGlvbigpe08odCwhMSxlKX0pKSgpLHR9aWYobyE9PU0mJmEgaW5zdGFuY2VvZiBEJiZhLmhhc093blByb3BlcnR5KGYpJiZhLmhhc093blByb3BlcnR5KGcpJiZhW2ZdIT09Xyl3KGEpLE8odCxhW2ZdLGFbZ10pO2Vsc2UgaWYobyE9PU0mJiJmdW5jdGlvbiI9PXR5cGVvZiBkKXRyeXtkLmNhbGwoYSxjKHYodCxvKSksYyh2KHQsITEpKSl9Y2F0Y2goZSl7YygoZnVuY3Rpb24oKXtPKHQsITEsZSl9KSkoKX1lbHNle3RbZl09bzt2YXIgcD10W2ddO2lmKHRbZ109YSx0W2hdPT09aCYmbz09PUMmJih0W2ZdPXRbeV0sdFtnXT10W2JdKSxvPT09TSYmYSBpbnN0YW5jZW9mIEVycm9yKXt2YXIgbT1lLmN1cnJlbnRUYXNrJiZlLmN1cnJlbnRUYXNrLmRhdGEmJmUuY3VycmVudFRhc2suZGF0YS5fX2NyZWF0aW9uVHJhY2VfXzttJiZpKGEseCx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsdmFsdWU6bX0pfWZvcih2YXIgdT0wO3U8cC5sZW5ndGg7KWsodCxwW3UrK10scFt1KytdLHBbdSsrXSxwW3UrK10pO2lmKDA9PXAubGVuZ3RoJiZvPT1NKXt0W2ZdPTA7dmFyIFA9YTtpZighcyl0cnl7dGhyb3cgbmV3IEVycm9yKCJVbmNhdWdodCAoaW4gcHJvbWlzZSk6ICIrKGZ1bmN0aW9uIFModCl7cmV0dXJuIHQmJnQudG9TdHJpbmc9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nPyh0LmNvbnN0cnVjdG9yJiZ0LmNvbnN0cnVjdG9yLm5hbWV8fCIiKSsiOiAiK0pTT04uc3RyaW5naWZ5KHQpOnQ/dC50b1N0cmluZygpOk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX0pKGEpKyhhJiZhLnN0YWNrPyJcbiIrYS5zdGFjazoiIikpfWNhdGNoKHQpe1A9dH1QLnJlamVjdGlvbj1hLFAucHJvbWlzZT10LFAuem9uZT1lLmN1cnJlbnQsUC50YXNrPWUuY3VycmVudFRhc2ssci5wdXNoKFApLG4uc2NoZWR1bGVNaWNyb1Rhc2soKX19fXJldHVybiB0fXZhciBQPWEoInJlamVjdGlvbkhhbmRsZWRIYW5kbGVyIik7ZnVuY3Rpb24gdyh0KXtpZigwPT09dFtmXSl7dHJ5e3ZhciBuPWVbUF07biYmImZ1bmN0aW9uIj09dHlwZW9mIG4mJm4uY2FsbCh0aGlzLHtyZWplY3Rpb246dFtnXSxwcm9taXNlOnR9KX1jYXRjaCh0KXt9dFtmXT1NO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXQ9PT1yW29dLnByb21pc2UmJnIuc3BsaWNlKG8sMSl9fWZ1bmN0aW9uIGsodCxlLG4sbyxpKXt3KHQpO3ZhciBhPXRbZl0scj1hPyJmdW5jdGlvbiI9PXR5cGVvZiBvP286bToiZnVuY3Rpb24iPT10eXBlb2YgaT9pOnU7ZS5zY2hlZHVsZU1pY3JvVGFzaygiUHJvbWlzZS50aGVuIiwoZnVuY3Rpb24oKXt0cnl7dmFyIG89dFtnXSxpPSEhbiYmaD09PW5baF07aSYmKG5bYl09byxuW3ldPWEpO3ZhciBzPWUucnVuKHIsdm9pZCAwLGkmJnIhPT11JiZyIT09bT9bXTpbb10pO08obiwhMCxzKX1jYXRjaCh0KXtPKG4sITEsdCl9fSksbil9dmFyIFM9ZnVuY3Rpb24oKXt9LEQ9KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXt2YXIgbj10aGlzO2lmKCEobiBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBFcnJvcigiTXVzdCBiZSBhbiBpbnN0YW5jZW9mIFByb21pc2UuIik7bltmXT1fLG5bZ109W107dHJ5e2UmJmUodihuLEMpLHYobixNKSl9Y2F0Y2godCl7TyhuLCExLHQpfX1yZXR1cm4gdC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJmdW5jdGlvbiBab25lQXdhcmVQcm9taXNlKCkgeyBbbmF0aXZlIGNvZGVdIH0ifSx0LnJlc29sdmU9ZnVuY3Rpb24odCl7cmV0dXJuIE8obmV3IHRoaXMobnVsbCksQyx0KX0sdC5yZWplY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIE8obmV3IHRoaXMobnVsbCksTSx0KX0sdC5yYWNlPWZ1bmN0aW9uKHQpe3ZhciBlLG4sbz1uZXcgdGhpcygoZnVuY3Rpb24odCxvKXtlPXQsbj1vfSkpO2Z1bmN0aW9uIGkodCl7ZSh0KX1mdW5jdGlvbiBhKHQpe24odCl9Zm9yKHZhciByPTAscz10O3I8cy5sZW5ndGg7cisrKXt2YXIgbD1zW3JdO3AobCl8fChsPXRoaXMucmVzb2x2ZShsKSksbC50aGVuKGksYSl9cmV0dXJuIG99LHQuYWxsPWZ1bmN0aW9uKGUpe3JldHVybiB0LmFsbFdpdGhDYWxsYmFjayhlKX0sdC5hbGxTZXR0bGVkPWZ1bmN0aW9uKGUpe3JldHVybih0aGlzJiZ0aGlzLnByb3RvdHlwZSBpbnN0YW5jZW9mIHQ/dGhpczp0KS5hbGxXaXRoQ2FsbGJhY2soZSx7dGhlbkNhbGxiYWNrOmZ1bmN0aW9uKHQpe3JldHVybntzdGF0dXM6ImZ1bGZpbGxlZCIsdmFsdWU6dH19LGVycm9yQ2FsbGJhY2s6ZnVuY3Rpb24odCl7cmV0dXJue3N0YXR1czoicmVqZWN0ZWQiLHJlYXNvbjp0fX19KX0sdC5hbGxXaXRoQ2FsbGJhY2s9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG4sbyxpPW5ldyB0aGlzKChmdW5jdGlvbih0LGUpe249dCxvPWV9KSksYT0yLHI9MCxzPVtdLGw9ZnVuY3Rpb24odCl7cCh0KXx8KHQ9Yy5yZXNvbHZlKHQpKTt2YXIgaT1yO3RyeXt0LnRoZW4oKGZ1bmN0aW9uKHQpe3NbaV09ZT9lLnRoZW5DYWxsYmFjayh0KTp0LDA9PS0tYSYmbihzKX0pLChmdW5jdGlvbih0KXtlPyhzW2ldPWUuZXJyb3JDYWxsYmFjayh0KSwwPT0tLWEmJm4ocykpOm8odCl9KSl9Y2F0Y2godCl7byh0KX1hKysscisrfSxjPXRoaXMsZD0wLG09dDtkPG0ubGVuZ3RoO2QrKylsKG1bZF0pO3JldHVybiAwPT0oYS09MikmJm4ocyksaX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLFN5bWJvbC50b1N0cmluZ1RhZyx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIlByb21pc2UifSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSxTeW1ib2wuc3BlY2llcyx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUudGhlbj1mdW5jdGlvbihuLG8pe3ZhciBpPXRoaXMuY29uc3RydWN0b3JbU3ltYm9sLnNwZWNpZXNdO2kmJiJmdW5jdGlvbiI9PXR5cGVvZiBpfHwoaT10aGlzLmNvbnN0cnVjdG9yfHx0KTt2YXIgYT1uZXcgaShTKSxyPWUuY3VycmVudDtyZXR1cm4gdGhpc1tmXT09Xz90aGlzW2ddLnB1c2gocixhLG4sbyk6ayh0aGlzLHIsYSxuLG8pLGF9LHQucHJvdG90eXBlLmNhdGNoPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRoZW4obnVsbCx0KX0sdC5wcm90b3R5cGUuZmluYWxseT1mdW5jdGlvbihuKXt2YXIgbz10aGlzLmNvbnN0cnVjdG9yW1N5bWJvbC5zcGVjaWVzXTtvJiYiZnVuY3Rpb24iPT10eXBlb2Ygb3x8KG89dCk7dmFyIGk9bmV3IG8oUyk7aVtoXT1oO3ZhciBhPWUuY3VycmVudDtyZXR1cm4gdGhpc1tmXT09Xz90aGlzW2ddLnB1c2goYSxpLG4sbik6ayh0aGlzLGEsaSxuLG4pLGl9LHR9KSgpO0QucmVzb2x2ZT1ELnJlc29sdmUsRC5yZWplY3Q9RC5yZWplY3QsRC5yYWNlPUQucmFjZSxELmFsbD1ELmFsbDt2YXIgRT10W2xdPXQuUHJvbWlzZSxBPWUuX19zeW1ib2xfXygiWm9uZUF3YXJlUHJvbWlzZSIpLFI9byh0LCJQcm9taXNlIik7UiYmIVIuY29uZmlndXJhYmxlfHwoUiYmZGVsZXRlIFIud3JpdGFibGUsUiYmZGVsZXRlIFIudmFsdWUsUnx8KFI9e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwfSksUi5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdFtBXT90W0FdOnRbbF19LFIuc2V0PWZ1bmN0aW9uKGUpe2U9PT1EP3RbQV09ZToodFtsXT1lLGUucHJvdG90eXBlW2NdfHxOKGUpLG4uc2V0TmF0aXZlUHJvbWlzZShlKSl9LGkodCwiUHJvbWlzZSIsUikpLHQuUHJvbWlzZT1EO3ZhciBUPWEoInRoZW5QYXRjaGVkIik7ZnVuY3Rpb24gTih0KXt2YXIgZT10LnByb3RvdHlwZSxuPW8oZSwidGhlbiIpO2lmKCFufHwhMSE9PW4ud3JpdGFibGUmJm4uY29uZmlndXJhYmxlKXt2YXIgaT1lLnRoZW47ZVtjXT1pLHQucHJvdG90eXBlLnRoZW49ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3JldHVybiBuZXcgRCgoZnVuY3Rpb24odCxlKXtpLmNhbGwobix0LGUpfSkpLnRoZW4odCxlKX0sdFtUXT0hMH19aWYobi5wYXRjaFRoZW49TixFKXtOKEUpO3ZhciBJPXQuZmV0Y2g7ImZ1bmN0aW9uIj09dHlwZW9mIEkmJih0W24uc3ltYm9sKCJmZXRjaCIpXT1JLHQuZmV0Y2g9KGZ1bmN0aW9uIHoodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYoZSBpbnN0YW5jZW9mIEQpcmV0dXJuIGU7dmFyIG49ZS5jb25zdHJ1Y3RvcjtyZXR1cm4gbltUXXx8TihuKSxlfX0pKEkpKX1yZXR1cm4gUHJvbWlzZVtlLl9fc3ltYm9sX18oInVuY2F1Z2h0UHJvbWlzZUVycm9ycyIpXT1yLER9KSk7Ci8qKgogICAgICAgICAqIEBsaWNlbnNlCiAgICAgICAgICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgICAgICoKICAgICAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAgICAgKi8KdmFyIHQ9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixlPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxuPU9iamVjdC5nZXRQcm90b3R5cGVPZixvPU9iamVjdC5jcmVhdGUsaT1BcnJheS5wcm90b3R5cGUuc2xpY2UsYT0iYWRkRXZlbnRMaXN0ZW5lciIscj0icmVtb3ZlRXZlbnRMaXN0ZW5lciIscz1ab25lLl9fc3ltYm9sX18oYSksbD1ab25lLl9fc3ltYm9sX18ociksYz0idHJ1ZSIsZD0iZmFsc2UiLHA9Wm9uZS5fX3N5bWJvbF9fKCIiKTtmdW5jdGlvbiBtKHQsZSl7cmV0dXJuIFpvbmUuY3VycmVudC53cmFwKHQsZSl9ZnVuY3Rpb24gdSh0LGUsbixvLGkpe3JldHVybiBab25lLmN1cnJlbnQuc2NoZWR1bGVNYWNyb1Rhc2sodCxlLG4sbyxpKX12YXIgZj1ab25lLl9fc3ltYm9sX18sZz0idW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyxoPWc/d2luZG93OnZvaWQgMCxiPWcmJmh8fCJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZnx8R3gseT1bbnVsbF07ZnVuY3Rpb24gXyh0LGUpe2Zvcih2YXIgbj10Lmxlbmd0aC0xO24+PTA7bi0tKSJmdW5jdGlvbiI9PXR5cGVvZiB0W25dJiYodFtuXT1tKHRbbl0sZSsiXyIrbikpO3JldHVybiB0fWZ1bmN0aW9uIEModCl7cmV0dXJuIXR8fCExIT09dC53cml0YWJsZSYmISgiZnVuY3Rpb24iPT10eXBlb2YgdC5nZXQmJnZvaWQgMD09PXQuc2V0KX12YXIgTT0idW5kZWZpbmVkIiE9dHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUsdj0hKCJudyJpbiBiKSYmdm9pZCAwIT09Yi5wcm9jZXNzJiYiW29iamVjdCBwcm9jZXNzXSI9PT17fS50b1N0cmluZy5jYWxsKGIucHJvY2VzcykseD0hdiYmIU0mJiEoIWd8fCFoLkhUTUxFbGVtZW50KSxPPXZvaWQgMCE9PWIucHJvY2VzcyYmIltvYmplY3QgcHJvY2Vzc10iPT09e30udG9TdHJpbmcuY2FsbChiLnByb2Nlc3MpJiYhTSYmISghZ3x8IWguSFRNTEVsZW1lbnQpLFA9e30sdz1mdW5jdGlvbih0KXtpZih0PXR8fGIuZXZlbnQpe3ZhciBlPVBbdC50eXBlXTtlfHwoZT1QW3QudHlwZV09ZigiT05fUFJPUEVSVFkiK3QudHlwZSkpO3ZhciBuLG89dGhpc3x8dC50YXJnZXR8fGIsaT1vW2VdO3JldHVybiB4JiZvPT09aCYmImVycm9yIj09PXQudHlwZT8hMD09PShuPWkmJmkuY2FsbCh0aGlzLHQubWVzc2FnZSx0LmZpbGVuYW1lLHQubGluZW5vLHQuY29sbm8sdC5lcnJvcikpJiZ0LnByZXZlbnREZWZhdWx0KCk6bnVsbD09KG49aSYmaS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfHxufHx0LnByZXZlbnREZWZhdWx0KCksbn19O2Z1bmN0aW9uIGsobixvLGkpe3ZhciBhPXQobixvKTtpZighYSYmaSYmdChpLG8pJiYoYT17ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxhJiZhLmNvbmZpZ3VyYWJsZSl7dmFyIHI9Zigib24iK28rInBhdGNoZWQiKTtpZighbi5oYXNPd25Qcm9wZXJ0eShyKXx8IW5bcl0pe2RlbGV0ZSBhLndyaXRhYmxlLGRlbGV0ZSBhLnZhbHVlO3ZhciBzPWEuZ2V0LGw9YS5zZXQsYz1vLnN1YnN0cigyKSxkPVBbY107ZHx8KGQ9UFtjXT1mKCJPTl9QUk9QRVJUWSIrYykpLGEuc2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7ZXx8biE9PWJ8fChlPWIpLGUmJihlW2RdJiZlLnJlbW92ZUV2ZW50TGlzdGVuZXIoYyx3KSxsJiZsLmFwcGx5KGUseSksImZ1bmN0aW9uIj09dHlwZW9mIHQ/KGVbZF09dCxlLmFkZEV2ZW50TGlzdGVuZXIoYyx3LCExKSk6ZVtkXT1udWxsKX0sYS5nZXQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKHR8fG4hPT1ifHwodD1iKSwhdClyZXR1cm4gbnVsbDt2YXIgZT10W2RdO2lmKGUpcmV0dXJuIGU7aWYocyl7dmFyIGk9cyYmcy5jYWxsKHRoaXMpO2lmKGkpcmV0dXJuIGEuc2V0LmNhbGwodGhpcyxpKSwiZnVuY3Rpb24iPT10eXBlb2YgdC5yZW1vdmVBdHRyaWJ1dGUmJnQucmVtb3ZlQXR0cmlidXRlKG8pLGl9cmV0dXJuIG51bGx9LGUobixvLGEpLG5bcl09ITB9fX1mdW5jdGlvbiBTKHQsZSxuKXtpZihlKWZvcih2YXIgbz0wO288ZS5sZW5ndGg7bysrKWsodCwib24iK2Vbb10sbik7ZWxzZXt2YXIgaT1bXTtmb3IodmFyIGEgaW4gdCkib24iPT1hLnN1YnN0cigwLDIpJiZpLnB1c2goYSk7Zm9yKHZhciByPTA7cjxpLmxlbmd0aDtyKyspayh0LGlbcl0sbil9fXZhciBEPWYoIm9yaWdpbmFsSW5zdGFuY2UiKTtmdW5jdGlvbiBFKHQpe3ZhciBuPWJbdF07aWYobil7YltmKHQpXT1uLGJbdF09ZnVuY3Rpb24oKXt2YXIgZT1fKGFyZ3VtZW50cyx0KTtzd2l0Y2goZS5sZW5ndGgpe2Nhc2UgMDp0aGlzW0RdPW5ldyBuO2JyZWFrO2Nhc2UgMTp0aGlzW0RdPW5ldyBuKGVbMF0pO2JyZWFrO2Nhc2UgMjp0aGlzW0RdPW5ldyBuKGVbMF0sZVsxXSk7YnJlYWs7Y2FzZSAzOnRoaXNbRF09bmV3IG4oZVswXSxlWzFdLGVbMl0pO2JyZWFrO2Nhc2UgNDp0aGlzW0RdPW5ldyBuKGVbMF0sZVsxXSxlWzJdLGVbM10pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJBcmcgbGlzdCB0b28gbG9uZy4iKX19LFQoYlt0XSxuKTt2YXIgbyxpPW5ldyBuKChmdW5jdGlvbigpe30pKTtmb3IobyBpbiBpKSJYTUxIdHRwUmVxdWVzdCI9PT10JiYicmVzcG9uc2VCbG9iIj09PW98fChmdW5jdGlvbihuKXsiZnVuY3Rpb24iPT10eXBlb2YgaVtuXT9iW3RdLnByb3RvdHlwZVtuXT1mdW5jdGlvbigpe3JldHVybiB0aGlzW0RdW25dLmFwcGx5KHRoaXNbRF0sYXJndW1lbnRzKX06ZShiW3RdLnByb3RvdHlwZSxuLHtzZXQ6ZnVuY3Rpb24oZSl7ImZ1bmN0aW9uIj09dHlwZW9mIGU/KHRoaXNbRF1bbl09bShlLHQrIi4iK24pLFQodGhpc1tEXVtuXSxlKSk6dGhpc1tEXVtuXT1lfSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tEXVtuXX19KX0pKG8pO2ZvcihvIGluIG4pInByb3RvdHlwZSIhPT1vJiZuLmhhc093blByb3BlcnR5KG8pJiYoYlt0XVtvXT1uW29dKX19ZnVuY3Rpb24gQShlLG8saSl7Zm9yKHZhciBhPWU7YSYmIWEuaGFzT3duUHJvcGVydHkobyk7KWE9bihhKTshYSYmZVtvXSYmKGE9ZSk7dmFyIHI9ZihvKSxzPW51bGw7aWYoYSYmIShzPWFbcl0pJiYocz1hW3JdPWFbb10sQyhhJiZ0KGEsbykpKSl7dmFyIGw9aShzLHIsbyk7YVtvXT1mdW5jdGlvbigpe3JldHVybiBsKHRoaXMsYXJndW1lbnRzKX0sVChhW29dLHMpfXJldHVybiBzfWZ1bmN0aW9uIFIodCxlLG4pe3ZhciBvPW51bGw7ZnVuY3Rpb24gaSh0KXt2YXIgZT10LmRhdGE7cmV0dXJuIGUuYXJnc1tlLmNiSWR4XT1mdW5jdGlvbigpe3QuaW52b2tlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sby5hcHBseShlLnRhcmdldCxlLmFyZ3MpLHR9bz1BKHQsZSwoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbyl7dmFyIGE9bihlLG8pO3JldHVybiBhLmNiSWR4Pj0wJiYiZnVuY3Rpb24iPT10eXBlb2Ygb1thLmNiSWR4XT91KGEubmFtZSxvW2EuY2JJZHhdLGEsaSk6dC5hcHBseShlLG8pfX0pKX1mdW5jdGlvbiBUKHQsZSl7dFtmKCJPcmlnaW5hbERlbGVnYXRlIildPWV9dmFyIE49ITEsST0hMTtmdW5jdGlvbiB6KCl7dHJ5e3ZhciB0PWgubmF2aWdhdG9yLnVzZXJBZ2VudDtpZigtMSE9PXQuaW5kZXhPZigiTVNJRSAiKXx8LTEhPT10LmluZGV4T2YoIlRyaWRlbnQvIikpcmV0dXJuITB9Y2F0Y2godCl7fXJldHVybiExfWZ1bmN0aW9uIEgoKXtpZihOKXJldHVybiBJO049ITA7dHJ5e3ZhciB0PWgubmF2aWdhdG9yLnVzZXJBZ2VudDstMT09PXQuaW5kZXhPZigiTVNJRSAiKSYmLTE9PT10LmluZGV4T2YoIlRyaWRlbnQvIikmJi0xPT09dC5pbmRleE9mKCJFZGdlLyIpfHwoST0hMCl9Y2F0Y2godCl7fXJldHVybiBJfQovKioKICAgICAgICAgKiBAbGljZW5zZQogICAgICAgICAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICAgICAqCiAgICAgICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgICAgICovWm9uZS5fX2xvYWRfcGF0Y2goInRvU3RyaW5nIiwoZnVuY3Rpb24odCl7dmFyIGU9RnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nLG49ZigiT3JpZ2luYWxEZWxlZ2F0ZSIpLG89ZigiUHJvbWlzZSIpLGk9ZigiRXJyb3IiKSxhPWZ1bmN0aW9uIGEoKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgdGhpcyl7dmFyIHI9dGhpc1tuXTtpZihyKXJldHVybiJmdW5jdGlvbiI9PXR5cGVvZiByP2UuY2FsbChyKTpPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocik7aWYodGhpcz09PVByb21pc2Upe3ZhciBzPXRbb107aWYocylyZXR1cm4gZS5jYWxsKHMpfWlmKHRoaXM9PT1FcnJvcil7dmFyIGw9dFtpXTtpZihsKXJldHVybiBlLmNhbGwobCl9fXJldHVybiBlLmNhbGwodGhpcyl9O2Fbbl09ZSxGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc9YTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO09iamVjdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIFByb21pc2U/IltvYmplY3QgUHJvbWlzZV0iOnIuY2FsbCh0aGlzKX19KSk7Ci8qKgogICAgICAgICAqIEBsaWNlbnNlCiAgICAgICAgICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgICAgICoKICAgICAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAgICAgKi8KdmFyIEY9ITE7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cpdHJ5e3ZhciBMPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwicGFzc2l2ZSIse2dldDpmdW5jdGlvbigpe0Y9ITB9fSk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInRlc3QiLEwsTCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRlc3QiLEwsTCl9Y2F0Y2godCl7Rj0hMX12YXIgQj17dXNlRzohMH0sVj17fSxqPXt9LFU9bmV3IFJlZ0V4cCgiXiIrcCsiKFxcdyspKHRydWV8ZmFsc2UpJCIpLFc9ZigicHJvcGFnYXRpb25TdG9wcGVkIik7ZnVuY3Rpb24gRyh0LGUpe3ZhciBuPShlP2UodCk6dCkrZCxvPShlP2UodCk6dCkrYyxpPXArbixhPXArbztWW3RdPXt9LFZbdF0uZmFsc2U9aSxWW3RdLnRydWU9YX1mdW5jdGlvbiBZKHQsZSxvKXt2YXIgaT1vJiZvLmFkZHx8YSxzPW8mJm8ucm18fHIsbD1vJiZvLmxpc3RlbmVyc3x8ImV2ZW50TGlzdGVuZXJzIixtPW8mJm8ucm1BbGx8fCJyZW1vdmVBbGxMaXN0ZW5lcnMiLHU9ZihpKSxnPSIuIitpKyI6IixoPWZ1bmN0aW9uKHQsZSxuKXtpZighdC5pc1JlbW92ZWQpe3ZhciBvPXQuY2FsbGJhY2s7Im9iamVjdCI9PXR5cGVvZiBvJiZvLmhhbmRsZUV2ZW50JiYodC5jYWxsYmFjaz1mdW5jdGlvbih0KXtyZXR1cm4gby5oYW5kbGVFdmVudCh0KX0sdC5vcmlnaW5hbERlbGVnYXRlPW8pLHQuaW52b2tlKHQsZSxbbl0pO3ZhciBpPXQub3B0aW9ucztpJiYib2JqZWN0Ij09dHlwZW9mIGkmJmkub25jZSYmZVtzXS5jYWxsKGUsbi50eXBlLHQub3JpZ2luYWxEZWxlZ2F0ZT90Lm9yaWdpbmFsRGVsZWdhdGU6dC5jYWxsYmFjayxpKX19LGI9ZnVuY3Rpb24oZSl7aWYoZT1lfHx0LmV2ZW50KXt2YXIgbj10aGlzfHxlLnRhcmdldHx8dCxvPW5bVltlLnR5cGVdLmZhbHNlXTtpZihvKWlmKDE9PT1vLmxlbmd0aCloKG9bMF0sbixlKTtlbHNlIGZvcih2YXIgaT1vLnNsaWNlKCksYT0wO2E8aS5sZW5ndGgmJighZXx8ITAhPT1lW1ddKTthKyspaChpW2FdLG4sZSl9fSx5PWZ1bmN0aW9uKGUpe2lmKGU9ZXx8dC5ldmVudCl7dmFyIG49dGhpc3x8ZS50YXJnZXR8fHQsbz1uW1ZbZS50eXBlXS50cnVlXTtpZihvKWlmKDE9PT1vLmxlbmd0aCloKG9bMF0sbixlKTtlbHNlIGZvcih2YXIgaT1vLnNsaWNlKCksYT0wO2E8aS5sZW5ndGgmJighZXx8ITAhPT1lW1ddKTthKyspaChpW2FdLG4sZSl9fTtmdW5jdGlvbiBfKGUsbyl7aWYoIWUpcmV0dXJuITE7dmFyIGE9ITA7byYmdm9pZCAwIT09by51c2VHJiYoYT1vLnVzZUcpO3ZhciByPW8mJm8udmgsaD0hMDtvJiZ2b2lkIDAhPT1vLmNoa0R1cCYmKGg9by5jaGtEdXApO3ZhciBfPSExO28mJnZvaWQgMCE9PW8ucnQmJihfPW8ucnQpO2Zvcih2YXIgQz1lO0MmJiFDLmhhc093blByb3BlcnR5KGkpOylDPW4oQyk7aWYoIUMmJmVbaV0mJihDPWUpLCFDKXJldHVybiExO2lmKENbdV0pcmV0dXJuITE7dmFyIE0seD1vJiZvLmV2ZW50TmFtZVRvU3RyaW5nLE89e30sUD1DW3VdPUNbaV0sdz1DW2YocyldPUNbc10saz1DW2YobCldPUNbbF0sUz1DW2YobSldPUNbbV07ZnVuY3Rpb24gRCh0LGUpe3JldHVybiFGJiYib2JqZWN0Ij09dHlwZW9mIHQmJnQ/ISF0LmNhcHR1cmU6RiYmZT8iYm9vbGVhbiI9PXR5cGVvZiB0P3tjYXB0dXJlOnQscGFzc2l2ZTohMH06dD8ib2JqZWN0Ij09dHlwZW9mIHQmJiExIT09dC5wYXNzaXZlP09iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7cGFzc2l2ZTohMH0pOnQ6e3Bhc3NpdmU6ITB9OnR9byYmby5wcmVwZW5kJiYoTT1DW2Yoby5wcmVwZW5kKV09Q1tvLnByZXBlbmRdKTt2YXIgRT1hP2Z1bmN0aW9uKHQpe2lmKCFPLmlzRXhpc3RpbmcpcmV0dXJuIFAuY2FsbChPLnRhcmdldCxPLmV2ZW50TmFtZSxPLmNhcHR1cmU/eTpiLE8ub3B0aW9ucyl9OmZ1bmN0aW9uKHQpe3JldHVybiBQLmNhbGwoTy50YXJnZXQsTy5ldmVudE5hbWUsdC5pbnZva2UsTy5vcHRpb25zKX0sQT1hP2Z1bmN0aW9uKHQpe2lmKCF0LmlzUmVtb3ZlZCl7dmFyIGU9Vlt0LmV2ZW50TmFtZV0sbj12b2lkIDA7ZSYmKG49ZVt0LmNhcHR1cmU/YzpkXSk7dmFyIG89biYmdC50YXJnZXRbbl07aWYobylmb3IodmFyIGk9MDtpPG8ubGVuZ3RoO2krKylpZihvW2ldPT09dCl7by5zcGxpY2UoaSwxKSx0LmlzUmVtb3ZlZD0hMCwwPT09by5sZW5ndGgmJih0LmFsbFJlbW92ZWQ9ITAsdC50YXJnZXRbbl09bnVsbCk7YnJlYWt9fWlmKHQuYWxsUmVtb3ZlZClyZXR1cm4gdy5jYWxsKHQudGFyZ2V0LHQuZXZlbnROYW1lLHQuY2FwdHVyZT95OmIsdC5vcHRpb25zKX06ZnVuY3Rpb24odCl7cmV0dXJuIHcuY2FsbCh0LnRhcmdldCx0LmV2ZW50TmFtZSx0Lmludm9rZSx0Lm9wdGlvbnMpfSxSPW8mJm8uZGlmZj9vLmRpZmY6ZnVuY3Rpb24odCxlKXt2YXIgbj10eXBlb2YgZTtyZXR1cm4iZnVuY3Rpb24iPT09biYmdC5jYWxsYmFjaz09PWV8fCJvYmplY3QiPT09biYmdC5vcmlnaW5hbERlbGVnYXRlPT09ZX0sTj1ab25lW2YoIkJMQUNLX0xJU1RFRF9FVkVOVFMiKV0sST10W2YoIlBBU1NJVkVfRVZFTlRTIildLHo9ZnVuY3Rpb24oZSxuLGkscyxsLHApe3JldHVybiB2b2lkIDA9PT1sJiYobD0hMSksdm9pZCAwPT09cCYmKHA9ITEpLGZ1bmN0aW9uKCl7dmFyIG09dGhpc3x8dCx1PWFyZ3VtZW50c1swXTtvJiZvLnRyYW5zZmVyRXZlbnROYW1lJiYodT1vLnRyYW5zZmVyRXZlbnROYW1lKHUpKTt2YXIgZj1hcmd1bWVudHNbMV07aWYoIWYpcmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKHYmJiJ1bmNhdWdodEV4Y2VwdGlvbiI9PT11KXJldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt2YXIgZz0hMTtpZigiZnVuY3Rpb24iIT10eXBlb2YgZil7aWYoIWYuaGFuZGxlRXZlbnQpcmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpO2c9ITB9aWYoIXJ8fHIoZSxmLG0sYXJndW1lbnRzKSl7dmFyIGI9RiYmISFJJiYtMSE9PUkuaW5kZXhPZih1KSx5PUQoYXJndW1lbnRzWzJdLGIpO2lmKE4pZm9yKHZhciBfPTA7XzxOLmxlbmd0aDtfKyspaWYodT09PU5bX10pcmV0dXJuIGI/ZS5jYWxsKG0sdSxmLHkpOmUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3ZhciBDPSEheSYmKCJib29sZWFuIj09dHlwZW9mIHl8fHkuY2FwdHVyZSksTT0hKCF5fHwib2JqZWN0IiE9dHlwZW9mIHkpJiZ5Lm9uY2UsUD1ab25lLmN1cnJlbnQsdz1WW3VdO3d8fChHKHUseCksdz1WW3VdKTt2YXIgayxTPXdbQz9jOmRdLEU9bVtTXSxBPSExO2lmKEUpe2lmKEE9ITAsaClmb3IoXz0wO188RS5sZW5ndGg7XysrKWlmKFIoRVtfXSxmKSlyZXR1cm59ZWxzZSBFPW1bU109W107dmFyIFQ9bS5jb25zdHJ1Y3Rvci5uYW1lLHo9altUXTt6JiYoaz16W3VdKSxrfHwoaz1UK24rKHg/eCh1KTp1KSksTy5vcHRpb25zPXksTSYmKE8ub3B0aW9ucy5vbmNlPSExKSxPLnRhcmdldD1tLE8uY2FwdHVyZT1DLE8uZXZlbnROYW1lPXUsTy5pc0V4aXN0aW5nPUE7dmFyIEg9YT9COnZvaWQgMDtIJiYoSC50YXNrRGF0YT1PKTt2YXIgTD1QLnNjaGVkdWxlRXZlbnRUYXNrKGssZixILGkscyk7cmV0dXJuIE8udGFyZ2V0PW51bGwsSCYmKEgudGFza0RhdGE9bnVsbCksTSYmKHkub25jZT0hMCksKEZ8fCJib29sZWFuIiE9dHlwZW9mIEwub3B0aW9ucykmJihMLm9wdGlvbnM9eSksTC50YXJnZXQ9bSxMLmNhcHR1cmU9QyxMLmV2ZW50TmFtZT11LGcmJihMLm9yaWdpbmFsRGVsZWdhdGU9ZikscD9FLnVuc2hpZnQoTCk6RS5wdXNoKEwpLGw/bTp2b2lkIDB9fX07cmV0dXJuIENbaV09eihQLGcsRSxBLF8pLE0mJihDLnByZXBlbmRMaXN0ZW5lcj16KE0sIi5wcmVwZW5kTGlzdGVuZXI6IiwoZnVuY3Rpb24odCl7cmV0dXJuIE0uY2FsbChPLnRhcmdldCxPLmV2ZW50TmFtZSx0Lmludm9rZSxPLm9wdGlvbnMpfSksQSxfLCEwKSksQ1tzXT1mdW5jdGlvbigpe3ZhciBlPXRoaXN8fHQsbj1hcmd1bWVudHNbMF07byYmby50cmFuc2ZlckV2ZW50TmFtZSYmKG49by50cmFuc2ZlckV2ZW50TmFtZShuKSk7dmFyIGk9YXJndW1lbnRzWzJdLGE9ISFpJiYoImJvb2xlYW4iPT10eXBlb2YgaXx8aS5jYXB0dXJlKSxzPWFyZ3VtZW50c1sxXTtpZighcylyZXR1cm4gdy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYoIXJ8fHIodyxzLGUsYXJndW1lbnRzKSl7dmFyIGwsbT1WW25dO20mJihsPW1bYT9jOmRdKTt2YXIgdT1sJiZlW2xdO2lmKHUpZm9yKHZhciBmPTA7Zjx1Lmxlbmd0aDtmKyspe3ZhciBnPXVbZl07aWYoUihnLHMpKXJldHVybiB1LnNwbGljZShmLDEpLGcuaXNSZW1vdmVkPSEwLDA9PT11Lmxlbmd0aCYmKGcuYWxsUmVtb3ZlZD0hMCxlW2xdPW51bGwsInN0cmluZyI9PXR5cGVvZiBuJiYoZVtwKyJPTl9QUk9QRVJUWSIrbl09bnVsbCkpLGcuem9uZS5jYW5jZWxUYXNrKGcpLF8/ZTp2b2lkIDB9cmV0dXJuIHcuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0sQ1tsXT1mdW5jdGlvbigpe3ZhciBlPXRoaXN8fHQsbj1hcmd1bWVudHNbMF07byYmby50cmFuc2ZlckV2ZW50TmFtZSYmKG49by50cmFuc2ZlckV2ZW50TmFtZShuKSk7Zm9yKHZhciBpPVtdLGE9cShlLHg/eChuKTpuKSxyPTA7cjxhLmxlbmd0aDtyKyspe3ZhciBzPWFbcl07aS5wdXNoKHMub3JpZ2luYWxEZWxlZ2F0ZT9zLm9yaWdpbmFsRGVsZWdhdGU6cy5jYWxsYmFjayl9cmV0dXJuIGl9LENbbV09ZnVuY3Rpb24oKXt2YXIgZT10aGlzfHx0LG49YXJndW1lbnRzWzBdO2lmKG4pe28mJm8udHJhbnNmZXJFdmVudE5hbWUmJihuPW8udHJhbnNmZXJFdmVudE5hbWUobikpO3ZhciBpPVZbbl07aWYoaSl7dmFyIGE9ZVtpLmZhbHNlXSxyPWVbaS50cnVlXTtpZihhKXt2YXIgbD1hLnNsaWNlKCk7Zm9yKHA9MDtwPGwubGVuZ3RoO3ArKyl0aGlzW3NdLmNhbGwodGhpcyxuLChjPWxbcF0pLm9yaWdpbmFsRGVsZWdhdGU/Yy5vcmlnaW5hbERlbGVnYXRlOmMuY2FsbGJhY2ssYy5vcHRpb25zKX1pZihyKWZvcihsPXIuc2xpY2UoKSxwPTA7cDxsLmxlbmd0aDtwKyspe3ZhciBjO3RoaXNbc10uY2FsbCh0aGlzLG4sKGM9bFtwXSkub3JpZ2luYWxEZWxlZ2F0ZT9jLm9yaWdpbmFsRGVsZWdhdGU6Yy5jYWxsYmFjayxjLm9wdGlvbnMpfX19ZWxzZXtmb3IodmFyIGQ9T2JqZWN0LmtleXMoZSkscD0wO3A8ZC5sZW5ndGg7cCsrKXt2YXIgdT1VLmV4ZWMoZFtwXSksZj11JiZ1WzFdO2YmJiJyZW1vdmVMaXN0ZW5lciIhPT1mJiZ0aGlzW21dLmNhbGwodGhpcyxmKX10aGlzW21dLmNhbGwodGhpcywicmVtb3ZlTGlzdGVuZXIiKX1pZihfKXJldHVybiB0aGlzfSxUKENbaV0sUCksVChDW3NdLHcpLFMmJlQoQ1ttXSxTKSxrJiZUKENbbF0sayksITB9Zm9yKHZhciBDPVtdLE09MDtNPGUubGVuZ3RoO00rKylDW01dPV8oZVtNXSxvKTtyZXR1cm4gQ31mdW5jdGlvbiBxKHQsZSl7aWYoIWUpe3ZhciBuPVtdO2Zvcih2YXIgbyBpbiB0KXt2YXIgaT1VLmV4ZWMobyksYT1pJiZpWzFdO2lmKGEmJighZXx8YT09PWUpKXt2YXIgcj10W29dO2lmKHIpZm9yKHZhciBzPTA7czxyLmxlbmd0aDtzKyspbi5wdXNoKHJbc10pfX1yZXR1cm4gbn12YXIgbD1WW2VdO2x8fChHKGUpLGw9VltlXSk7dmFyIGM9dFtsLmZhbHNlXSxkPXRbbC50cnVlXTtyZXR1cm4gYz9kP2MuY29uY2F0KGQpOmMuc2xpY2UoKTpkP2Quc2xpY2UoKTpbXX1mdW5jdGlvbiBaKHQsZSl7dmFyIG49dC5FdmVudDtuJiZuLnByb3RvdHlwZSYmZS5wYXRjaE1ldGhvZChuLnByb3RvdHlwZSwic3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uIiwoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7ZVtXXT0hMCx0JiZ0LmFwcGx5KGUsbil9fSkpfQovKioKICAgICAgICAgKiBAbGljZW5zZQogICAgICAgICAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICAgICAqCiAgICAgICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgICAgICovZnVuY3Rpb24gWCh0LGUsbixvLGkpe3ZhciBhPVpvbmUuX19zeW1ib2xfXyhvKTtpZighZVthXSl7dmFyIHI9ZVthXT1lW29dO2Vbb109ZnVuY3Rpb24oYSxzLGwpe3JldHVybiBzJiZzLnByb3RvdHlwZSYmaS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgaT1uKyIuIitvKyI6OiIrZSxhPXMucHJvdG90eXBlO2lmKGEuaGFzT3duUHJvcGVydHkoZSkpe3ZhciByPXQuT2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGEsZSk7ciYmci52YWx1ZT8oci52YWx1ZT10LndyYXBXaXRoQ3VycmVudFpvbmUoci52YWx1ZSxpKSx0Ll9yZWRlZmluZVByb3BlcnR5KHMucHJvdG90eXBlLGUscikpOmFbZV0mJihhW2VdPXQud3JhcFdpdGhDdXJyZW50Wm9uZShhW2VdLGkpKX1lbHNlIGFbZV0mJihhW2VdPXQud3JhcFdpdGhDdXJyZW50Wm9uZShhW2VdLGkpKX0pKSxyLmNhbGwoZSxhLHMsbCl9LHQuYXR0YWNoT3JpZ2luVG9QYXRjaGVkKGVbb10scil9fQovKioKICAgICAgICAgKiBAbGljZW5zZQogICAgICAgICAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICAgICAqCiAgICAgICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgICAgICovdmFyIEssSixRLCQsdHQsZXQ9WyJhYnNvbHV0ZWRldmljZW9yaWVudGF0aW9uIiwiYWZ0ZXJpbnB1dCIsImFmdGVycHJpbnQiLCJhcHBpbnN0YWxsZWQiLCJiZWZvcmVpbnN0YWxscHJvbXB0IiwiYmVmb3JlcHJpbnQiLCJiZWZvcmV1bmxvYWQiLCJkZXZpY2VsaWdodCIsImRldmljZW1vdGlvbiIsImRldmljZW9yaWVudGF0aW9uIiwiZGV2aWNlb3JpZW50YXRpb25hYnNvbHV0ZSIsImRldmljZXByb3hpbWl0eSIsImhhc2hjaGFuZ2UiLCJsYW5ndWFnZWNoYW5nZSIsIm1lc3NhZ2UiLCJtb3piZWZvcmVwYWludCIsIm9mZmxpbmUiLCJvbmxpbmUiLCJwYWludCIsInBhZ2VzaG93IiwicGFnZWhpZGUiLCJwb3BzdGF0ZSIsInJlamVjdGlvbmhhbmRsZWQiLCJzdG9yYWdlIiwidW5oYW5kbGVkcmVqZWN0aW9uIiwidW5sb2FkIiwidXNlcnByb3hpbWl0eSIsInZyZGlzcGxheWNvbm5lY3RlZCIsInZyZGlzcGxheWRpc2Nvbm5lY3RlZCIsInZyZGlzcGxheXByZXNlbnRjaGFuZ2UiXSxudD1bImVuY3J5cHRlZCIsIndhaXRpbmdmb3JrZXkiLCJtc25lZWRrZXkiLCJtb3ppbnRlcnJ1cHRiZWdpbiIsIm1vemludGVycnVwdGVuZCJdLG90PVsibG9hZCJdLGl0PVsiYmx1ciIsImVycm9yIiwiZm9jdXMiLCJsb2FkIiwicmVzaXplIiwic2Nyb2xsIiwibWVzc2FnZWVycm9yIl0sYXQ9WyJib3VuY2UiLCJmaW5pc2giLCJzdGFydCJdLHJ0PVsibG9hZHN0YXJ0IiwicHJvZ3Jlc3MiLCJhYm9ydCIsImVycm9yIiwibG9hZCIsInByb2dyZXNzIiwidGltZW91dCIsImxvYWRlbmQiLCJyZWFkeXN0YXRlY2hhbmdlIl0sc3Q9WyJ1cGdyYWRlbmVlZGVkIiwiY29tcGxldGUiLCJhYm9ydCIsInN1Y2Nlc3MiLCJlcnJvciIsImJsb2NrZWQiLCJ2ZXJzaW9uY2hhbmdlIiwiY2xvc2UiXSxsdD1bImNsb3NlIiwiZXJyb3IiLCJvcGVuIiwibWVzc2FnZSJdLGN0PVsiZXJyb3IiLCJtZXNzYWdlIl0sZHQ9WyJhYm9ydCIsImFuaW1hdGlvbmNhbmNlbCIsImFuaW1hdGlvbmVuZCIsImFuaW1hdGlvbml0ZXJhdGlvbiIsImF1eGNsaWNrIiwiYmVmb3JlaW5wdXQiLCJibHVyIiwiY2FuY2VsIiwiY2FucGxheSIsImNhbnBsYXl0aHJvdWdoIiwiY2hhbmdlIiwiY29tcG9zaXRpb25zdGFydCIsImNvbXBvc2l0aW9udXBkYXRlIiwiY29tcG9zaXRpb25lbmQiLCJjdWVjaGFuZ2UiLCJjbGljayIsImNsb3NlIiwiY29udGV4dG1lbnUiLCJjdXJlY2hhbmdlIiwiZGJsY2xpY2siLCJkcmFnIiwiZHJhZ2VuZCIsImRyYWdlbnRlciIsImRyYWdleGl0IiwiZHJhZ2xlYXZlIiwiZHJhZ292ZXIiLCJkcm9wIiwiZHVyYXRpb25jaGFuZ2UiLCJlbXB0aWVkIiwiZW5kZWQiLCJlcnJvciIsImZvY3VzIiwiZm9jdXNpbiIsImZvY3Vzb3V0IiwiZ290cG9pbnRlcmNhcHR1cmUiLCJpbnB1dCIsImludmFsaWQiLCJrZXlkb3duIiwia2V5cHJlc3MiLCJrZXl1cCIsImxvYWQiLCJsb2Fkc3RhcnQiLCJsb2FkZWRkYXRhIiwibG9hZGVkbWV0YWRhdGEiLCJsb3N0cG9pbnRlcmNhcHR1cmUiLCJtb3VzZWRvd24iLCJtb3VzZWVudGVyIiwibW91c2VsZWF2ZSIsIm1vdXNlbW92ZSIsIm1vdXNlb3V0IiwibW91c2VvdmVyIiwibW91c2V1cCIsIm1vdXNld2hlZWwiLCJvcmllbnRhdGlvbmNoYW5nZSIsInBhdXNlIiwicGxheSIsInBsYXlpbmciLCJwb2ludGVyY2FuY2VsIiwicG9pbnRlcmRvd24iLCJwb2ludGVyZW50ZXIiLCJwb2ludGVybGVhdmUiLCJwb2ludGVybG9ja2NoYW5nZSIsIm1venBvaW50ZXJsb2NrY2hhbmdlIiwid2Via2l0cG9pbnRlcmxvY2tlcmNoYW5nZSIsInBvaW50ZXJsb2NrZXJyb3IiLCJtb3pwb2ludGVybG9ja2Vycm9yIiwid2Via2l0cG9pbnRlcmxvY2tlcnJvciIsInBvaW50ZXJtb3ZlIiwicG9pbnRvdXQiLCJwb2ludGVyb3ZlciIsInBvaW50ZXJ1cCIsInByb2dyZXNzIiwicmF0ZWNoYW5nZSIsInJlc2V0IiwicmVzaXplIiwic2Nyb2xsIiwic2Vla2VkIiwic2Vla2luZyIsInNlbGVjdCIsInNlbGVjdGlvbmNoYW5nZSIsInNlbGVjdHN0YXJ0Iiwic2hvdyIsInNvcnQiLCJzdGFsbGVkIiwic3VibWl0Iiwic3VzcGVuZCIsInRpbWV1cGRhdGUiLCJ2b2x1bWVjaGFuZ2UiLCJ0b3VjaGNhbmNlbCIsInRvdWNobW92ZSIsInRvdWNoc3RhcnQiLCJ0b3VjaGVuZCIsInRyYW5zaXRpb25jYW5jZWwiLCJ0cmFuc2l0aW9uZW5kIiwid2FpdGluZyIsIndoZWVsIl0uY29uY2F0KFsid2ViZ2xjb250ZXh0cmVzdG9yZWQiLCJ3ZWJnbGNvbnRleHRsb3N0Iiwid2ViZ2xjb250ZXh0Y3JlYXRpb25lcnJvciJdLFsiYXV0b2NvbXBsZXRlIiwiYXV0b2NvbXBsZXRlZXJyb3IiXSxbInRvZ2dsZSJdLFsiYWZ0ZXJzY3JpcHRleGVjdXRlIiwiYmVmb3Jlc2NyaXB0ZXhlY3V0ZSIsIkRPTUNvbnRlbnRMb2FkZWQiLCJmcmVlemUiLCJmdWxsc2NyZWVuY2hhbmdlIiwibW96ZnVsbHNjcmVlbmNoYW5nZSIsIndlYmtpdGZ1bGxzY3JlZW5jaGFuZ2UiLCJtc2Z1bGxzY3JlZW5jaGFuZ2UiLCJmdWxsc2NyZWVuZXJyb3IiLCJtb3pmdWxsc2NyZWVuZXJyb3IiLCJ3ZWJraXRmdWxsc2NyZWVuZXJyb3IiLCJtc2Z1bGxzY3JlZW5lcnJvciIsInJlYWR5c3RhdGVjaGFuZ2UiLCJ2aXNpYmlsaXR5Y2hhbmdlIiwicmVzdW1lIl0sZXQsWyJiZWZvcmVjb3B5IiwiYmVmb3JlY3V0IiwiYmVmb3JlcGFzdGUiLCJjb3B5IiwiY3V0IiwicGFzdGUiLCJkcmFnc3RhcnQiLCJsb2FkZW5kIiwiYW5pbWF0aW9uc3RhcnQiLCJzZWFyY2giLCJ0cmFuc2l0aW9ucnVuIiwidHJhbnNpdGlvbnN0YXJ0Iiwid2Via2l0YW5pbWF0aW9uZW5kIiwid2Via2l0YW5pbWF0aW9uaXRlcmF0aW9uIiwid2Via2l0YW5pbWF0aW9uc3RhcnQiLCJ3ZWJraXR0cmFuc2l0aW9uZW5kIl0sWyJhY3RpdmF0ZSIsImFmdGVydXBkYXRlIiwiYXJpYXJlcXVlc3QiLCJiZWZvcmVhY3RpdmF0ZSIsImJlZm9yZWRlYWN0aXZhdGUiLCJiZWZvcmVlZGl0Zm9jdXMiLCJiZWZvcmV1cGRhdGUiLCJjZWxsY2hhbmdlIiwiY29udHJvbHNlbGVjdCIsImRhdGFhdmFpbGFibGUiLCJkYXRhc2V0Y2hhbmdlZCIsImRhdGFzZXRjb21wbGV0ZSIsImVycm9ydXBkYXRlIiwiZmlsdGVyY2hhbmdlIiwibGF5b3V0Y29tcGxldGUiLCJsb3NlY2FwdHVyZSIsIm1vdmUiLCJtb3ZlZW5kIiwibW92ZXN0YXJ0IiwicHJvcGVydHljaGFuZ2UiLCJyZXNpemVlbmQiLCJyZXNpemVzdGFydCIsInJvd2VudGVyIiwicm93ZXhpdCIsInJvd3NkZWxldGUiLCJyb3dzaW5zZXJ0ZWQiLCJjb21tYW5kIiwiY29tcGFzc25lZWRzY2FsaWJyYXRpb24iLCJkZWFjdGl2YXRlIiwiaGVscCIsIm1zY29udGVudHpvb20iLCJtc21hbmlwdWxhdGlvbnN0YXRlY2hhbmdlZCIsIm1zZ2VzdHVyZWNoYW5nZSIsIm1zZ2VzdHVyZWRvdWJsZXRhcCIsIm1zZ2VzdHVyZWVuZCIsIm1zZ2VzdHVyZWhvbGQiLCJtc2dlc3R1cmVzdGFydCIsIm1zZ2VzdHVyZXRhcCIsIm1zZ290cG9pbnRlcmNhcHR1cmUiLCJtc2luZXJ0aWFzdGFydCIsIm1zbG9zdHBvaW50ZXJjYXB0dXJlIiwibXNwb2ludGVyY2FuY2VsIiwibXNwb2ludGVyZG93biIsIm1zcG9pbnRlcmVudGVyIiwibXNwb2ludGVyaG92ZXIiLCJtc3BvaW50ZXJsZWF2ZSIsIm1zcG9pbnRlcm1vdmUiLCJtc3BvaW50ZXJvdXQiLCJtc3BvaW50ZXJvdmVyIiwibXNwb2ludGVydXAiLCJwb2ludGVyb3V0IiwibXNzaXRlbW9kZWp1bXBsaXN0aXRlbXJlbW92ZWQiLCJtc3RodW1ibmFpbGNsaWNrIiwic3RvcCIsInN0b3JhZ2Vjb21taXQiXSk7ZnVuY3Rpb24gcHQodCxlLG4pe2lmKCFufHwwPT09bi5sZW5ndGgpcmV0dXJuIGU7dmFyIG89bi5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnRhcmdldD09PXR9KSk7aWYoIW98fDA9PT1vLmxlbmd0aClyZXR1cm4gZTt2YXIgaT1vWzBdLmlnbm9yZVByb3BlcnRpZXM7cmV0dXJuIGUuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4tMT09PWkuaW5kZXhPZih0KX0pKX1mdW5jdGlvbiBtdCh0LGUsbixvKXt0JiZTKHQscHQodCxlLG4pLG8pfWZ1bmN0aW9uIHV0KHQsZSl7aWYoKCF2fHxPKSYmIVpvbmVbdC5zeW1ib2woInBhdGNoRXZlbnRzIildKXt2YXIgbz0idW5kZWZpbmVkIiE9dHlwZW9mIFdlYlNvY2tldCxpPWUuX19ab25lX2lnbm9yZV9vbl9wcm9wZXJ0aWVzO2lmKHgpe3ZhciBhPXdpbmRvdyxyPXo/W3t0YXJnZXQ6YSxpZ25vcmVQcm9wZXJ0aWVzOlsiZXJyb3IiXX1dOltdO210KGEsZHQuY29uY2F0KFsibWVzc2FnZWVycm9yIl0pLGk/aS5jb25jYXQocik6aSxuKGEpKSxtdChEb2N1bWVudC5wcm90b3R5cGUsZHQsaSksdm9pZCAwIT09YS5TVkdFbGVtZW50JiZtdChhLlNWR0VsZW1lbnQucHJvdG90eXBlLGR0LGkpLG10KEVsZW1lbnQucHJvdG90eXBlLGR0LGkpLG10KEhUTUxFbGVtZW50LnByb3RvdHlwZSxkdCxpKSxtdChIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZSxudCxpKSxtdChIVE1MRnJhbWVTZXRFbGVtZW50LnByb3RvdHlwZSxldC5jb25jYXQoaXQpLGkpLG10KEhUTUxCb2R5RWxlbWVudC5wcm90b3R5cGUsZXQuY29uY2F0KGl0KSxpKSxtdChIVE1MRnJhbWVFbGVtZW50LnByb3RvdHlwZSxvdCxpKSxtdChIVE1MSUZyYW1lRWxlbWVudC5wcm90b3R5cGUsb3QsaSk7dmFyIHM9YS5IVE1MTWFycXVlZUVsZW1lbnQ7cyYmbXQocy5wcm90b3R5cGUsYXQsaSk7dmFyIGw9YS5Xb3JrZXI7bCYmbXQobC5wcm90b3R5cGUsY3QsaSl9dmFyIGM9ZS5YTUxIdHRwUmVxdWVzdDtjJiZtdChjLnByb3RvdHlwZSxydCxpKTt2YXIgZD1lLlhNTEh0dHBSZXF1ZXN0RXZlbnRUYXJnZXQ7ZCYmbXQoZCYmZC5wcm90b3R5cGUscnQsaSksInVuZGVmaW5lZCIhPXR5cGVvZiBJREJJbmRleCYmKG10KElEQkluZGV4LnByb3RvdHlwZSxzdCxpKSxtdChJREJSZXF1ZXN0LnByb3RvdHlwZSxzdCxpKSxtdChJREJPcGVuREJSZXF1ZXN0LnByb3RvdHlwZSxzdCxpKSxtdChJREJEYXRhYmFzZS5wcm90b3R5cGUsc3QsaSksbXQoSURCVHJhbnNhY3Rpb24ucHJvdG90eXBlLHN0LGkpLG10KElEQkN1cnNvci5wcm90b3R5cGUsc3QsaSkpLG8mJm10KFdlYlNvY2tldC5wcm90b3R5cGUsbHQsaSl9fQovKioKICAgICAgICAgKiBAbGljZW5zZQogICAgICAgICAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICAgICAqCiAgICAgICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgICAgICovZnVuY3Rpb24gZnQoKXtLPVpvbmUuX19zeW1ib2xfXyxKPU9iamVjdFtLKCJkZWZpbmVQcm9wZXJ0eSIpXT1PYmplY3QuZGVmaW5lUHJvcGVydHksUT1PYmplY3RbSygiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIildPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsJD1PYmplY3QuY3JlYXRlLHR0PUsoInVuY29uZmlndXJhYmxlcyIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eT1mdW5jdGlvbih0LGUsbil7aWYoaHQodCxlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYXNzaWduIHRvIHJlYWQgb25seSBwcm9wZXJ0eSAnIitlKyInIG9mICIrdCk7dmFyIG89bi5jb25maWd1cmFibGU7cmV0dXJuInByb3RvdHlwZSIhPT1lJiYobj1idCh0LGUsbikpLHl0KHQsZSxuLG8pfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcz1mdW5jdGlvbih0LGUpe3JldHVybiBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChmdW5jdGlvbihuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLGVbbl0pfSkpLHR9LE9iamVjdC5jcmVhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4ib2JqZWN0IiE9dHlwZW9mIGV8fE9iamVjdC5pc0Zyb3plbihlKXx8T2JqZWN0LmtleXMoZSkuZm9yRWFjaCgoZnVuY3Rpb24obil7ZVtuXT1idCh0LG4sZVtuXSl9KSksJCh0LGUpfSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yPWZ1bmN0aW9uKHQsZSl7dmFyIG49USh0LGUpO3JldHVybiBuJiZodCh0LGUpJiYobi5jb25maWd1cmFibGU9ITEpLG59fWZ1bmN0aW9uIGd0KHQsZSxuKXt2YXIgbz1uLmNvbmZpZ3VyYWJsZTtyZXR1cm4geXQodCxlLG49YnQodCxlLG4pLG8pfWZ1bmN0aW9uIGh0KHQsZSl7cmV0dXJuIHQmJnRbdHRdJiZ0W3R0XVtlXX1mdW5jdGlvbiBidCh0LGUsbil7cmV0dXJuIE9iamVjdC5pc0Zyb3plbihuKXx8KG4uY29uZmlndXJhYmxlPSEwKSxuLmNvbmZpZ3VyYWJsZXx8KHRbdHRdfHxPYmplY3QuaXNGcm96ZW4odCl8fEoodCx0dCx7d3JpdGFibGU6ITAsdmFsdWU6e319KSx0W3R0XSYmKHRbdHRdW2VdPSEwKSksbn1mdW5jdGlvbiB5dCh0LGUsbixvKXt0cnl7cmV0dXJuIEoodCxlLG4pfWNhdGNoKGEpe2lmKCFuLmNvbmZpZ3VyYWJsZSl0aHJvdyBhO3ZvaWQgMD09PW8/ZGVsZXRlIG4uY29uZmlndXJhYmxlOm4uY29uZmlndXJhYmxlPW87dHJ5e3JldHVybiBKKHQsZSxuKX1jYXRjaChvKXt2YXIgaT1udWxsO3RyeXtpPUpTT04uc3RyaW5naWZ5KG4pfWNhdGNoKHQpe2k9bi50b1N0cmluZygpfWNvbnNvbGUubG9nKCJBdHRlbXB0aW5nIHRvIGNvbmZpZ3VyZSAnIitlKyInIHdpdGggZGVzY3JpcHRvciAnIitpKyInIG9uIG9iamVjdCAnIit0KyInIGFuZCBnb3QgZXJyb3IsIGdpdmluZyB1cDogIitvKX19fQovKioKICAgICAgICAgKiBAbGljZW5zZQogICAgICAgICAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICAgICAqCiAgICAgICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgICAgICovZnVuY3Rpb24gX3QodCxlKXt2YXIgbj1lLmdldEdsb2JhbE9iamVjdHMoKSxvPW4uZXZlbnROYW1lcyxpPW4uZ2xvYmFsU291cmNlcyxhPW4uem9uZVN5bWJvbEV2ZW50TmFtZXMscj1uLlRSVUVfU1RSLHM9bi5GQUxTRV9TVFIsbD1uLlpPTkVfU1lNQk9MX1BSRUZJWCxjPSJBcHBsaWNhdGlvbkNhY2hlLEV2ZW50U291cmNlLEZpbGVSZWFkZXIsSW5wdXRNZXRob2RDb250ZXh0LE1lZGlhQ29udHJvbGxlcixNZXNzYWdlUG9ydCxOb2RlLFBlcmZvcm1hbmNlLFNWR0VsZW1lbnRJbnN0YW5jZSxTaGFyZWRXb3JrZXIsVGV4dFRyYWNrLFRleHRUcmFja0N1ZSxUZXh0VHJhY2tMaXN0LFdlYktpdE5hbWVkRmxvdyxXaW5kb3csV29ya2VyLFdvcmtlckdsb2JhbFNjb3BlLFhNTEh0dHBSZXF1ZXN0LFhNTEh0dHBSZXF1ZXN0RXZlbnRUYXJnZXQsWE1MSHR0cFJlcXVlc3RVcGxvYWQsSURCUmVxdWVzdCxJREJPcGVuREJSZXF1ZXN0LElEQkRhdGFiYXNlLElEQlRyYW5zYWN0aW9uLElEQkN1cnNvcixEQkluZGV4LFdlYlNvY2tldCIuc3BsaXQoIiwiKSxkPVtdLHA9dC53dGYsbT0iQW5jaG9yLEFyZWEsQXVkaW8sQlIsQmFzZSxCYXNlRm9udCxCb2R5LEJ1dHRvbixDYW52YXMsQ29udGVudCxETGlzdCxEaXJlY3RvcnksRGl2LEVtYmVkLEZpZWxkU2V0LEZvbnQsRm9ybSxGcmFtZSxGcmFtZVNldCxIUixIZWFkLEhlYWRpbmcsSHRtbCxJRnJhbWUsSW1hZ2UsSW5wdXQsS2V5Z2VuLExJLExhYmVsLExlZ2VuZCxMaW5rLE1hcCxNYXJxdWVlLE1lZGlhLE1lbnUsTWV0YSxNZXRlcixNb2QsT0xpc3QsT2JqZWN0LE9wdEdyb3VwLE9wdGlvbixPdXRwdXQsUGFyYWdyYXBoLFByZSxQcm9ncmVzcyxRdW90ZSxTY3JpcHQsU2VsZWN0LFNvdXJjZSxTcGFuLFN0eWxlLFRhYmxlQ2FwdGlvbixUYWJsZUNlbGwsVGFibGVDb2wsVGFibGUsVGFibGVSb3csVGFibGVTZWN0aW9uLFRleHRBcmVhLFRpdGxlLFRyYWNrLFVMaXN0LFVua25vd24sVmlkZW8iLnNwbGl0KCIsIik7cD9kPW0ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4iSFRNTCIrdCsiRWxlbWVudCJ9KSkuY29uY2F0KGMpOnQuRXZlbnRUYXJnZXQ/ZC5wdXNoKCJFdmVudFRhcmdldCIpOmQ9Yztmb3IodmFyIHU9dC5fX1pvbmVfZGlzYWJsZV9JRV9jaGVja3x8ITEsZj10Ll9fWm9uZV9lbmFibGVfY3Jvc3NfY29udGV4dF9jaGVja3x8ITEsZz1lLmlzSUVPckVkZ2UoKSxoPSJbb2JqZWN0IEZ1bmN0aW9uV3JhcHBlcl0iLGI9ImZ1bmN0aW9uIF9fQlJPV1NFUlRPT0xTX0NPTlNPTEVfU0FGRUZVTkMoKSB7IFtuYXRpdmUgY29kZV0gfSIseT17TVNQb2ludGVyQ2FuY2VsOiJwb2ludGVyY2FuY2VsIixNU1BvaW50ZXJEb3duOiJwb2ludGVyZG93biIsTVNQb2ludGVyRW50ZXI6InBvaW50ZXJlbnRlciIsTVNQb2ludGVySG92ZXI6InBvaW50ZXJob3ZlciIsTVNQb2ludGVyTGVhdmU6InBvaW50ZXJsZWF2ZSIsTVNQb2ludGVyTW92ZToicG9pbnRlcm1vdmUiLE1TUG9pbnRlck91dDoicG9pbnRlcm91dCIsTVNQb2ludGVyT3ZlcjoicG9pbnRlcm92ZXIiLE1TUG9pbnRlclVwOiJwb2ludGVydXAifSxfPTA7XzxvLmxlbmd0aDtfKyspe3ZhciBDPWwrKChQPW9bX10pK3MpLE09bCsoUCtyKTthW1BdPXt9LGFbUF1bc109QyxhW1BdW3JdPU19Zm9yKF89MDtfPG0ubGVuZ3RoO18rKylmb3IodmFyIHY9bVtfXSx4PWlbdl09e30sTz0wO088by5sZW5ndGg7TysrKXt2YXIgUDt4W1A9b1tPXV09disiLmFkZEV2ZW50TGlzdGVuZXI6IitQfXZhciB3PVtdO2ZvcihfPTA7XzxkLmxlbmd0aDtfKyspe3ZhciBrPXRbZFtfXV07dy5wdXNoKGsmJmsucHJvdG90eXBlKX1yZXR1cm4gZS5wYXRjaEV2ZW50VGFyZ2V0KHQsdyx7dmg6ZnVuY3Rpb24odCxlLG4sbyl7aWYoIXUmJmcpe2lmKGYpdHJ5e3ZhciBpO2lmKChpPWUudG9TdHJpbmcoKSk9PT1ofHxpPT1iKXJldHVybiB0LmFwcGx5KG4sbyksITF9Y2F0Y2goZSl7cmV0dXJuIHQuYXBwbHkobixvKSwhMX1lbHNlIGlmKChpPWUudG9TdHJpbmcoKSk9PT1ofHxpPT1iKXJldHVybiB0LmFwcGx5KG4sbyksITF9ZWxzZSBpZihmKXRyeXtlLnRvU3RyaW5nKCl9Y2F0Y2goZSl7cmV0dXJuIHQuYXBwbHkobixvKSwhMX1yZXR1cm4hMH0sdHJhbnNmZXJFdmVudE5hbWU6ZnVuY3Rpb24odCl7cmV0dXJuIHlbdF18fHR9fSksWm9uZVtlLnN5bWJvbCgicGF0Y2hFdmVudFRhcmdldCIpXT0hIXQuRXZlbnRUYXJnZXQsITB9Ci8qKgogICAgICAgICAqIEBsaWNlbnNlCiAgICAgICAgICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgICAgICoKICAgICAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAgICAgKi8KLyoqCiAgICAgICAgICogQGxpY2Vuc2UKICAgICAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAgICAgKgogICAgICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICAgICAqLwpmdW5jdGlvbiBDdCh0LGUpe3ZhciBuPXQuZ2V0R2xvYmFsT2JqZWN0cygpO2lmKCghbi5pc05vZGV8fG4uaXNNaXgpJiYhKGZ1bmN0aW9uIG8odCxlKXt2YXIgbj10LmdldEdsb2JhbE9iamVjdHMoKTtpZigobi5pc0Jyb3dzZXJ8fG4uaXNNaXgpJiYhdC5PYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSFRNTEVsZW1lbnQucHJvdG90eXBlLCJvbmNsaWNrIikmJiJ1bmRlZmluZWQiIT10eXBlb2YgRWxlbWVudCl7dmFyIG89dC5PYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRWxlbWVudC5wcm90b3R5cGUsIm9uY2xpY2siKTtpZihvJiYhby5jb25maWd1cmFibGUpcmV0dXJuITE7aWYobyl7dC5PYmplY3REZWZpbmVQcm9wZXJ0eShFbGVtZW50LnByb3RvdHlwZSwib25jbGljayIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiEwfX0pO3ZhciBpPSEhZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iikub25jbGljaztyZXR1cm4gdC5PYmplY3REZWZpbmVQcm9wZXJ0eShFbGVtZW50LnByb3RvdHlwZSwib25jbGljayIsbyksaX19dmFyIGE9ZS5YTUxIdHRwUmVxdWVzdDtpZighYSlyZXR1cm4hMTt2YXIgcj0ib25yZWFkeXN0YXRlY2hhbmdlIixzPWEucHJvdG90eXBlLGw9dC5PYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocyxyKTtpZihsKXJldHVybiB0Lk9iamVjdERlZmluZVByb3BlcnR5KHMscix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuITB9fSksaT0hIShkPW5ldyBhKS5vbnJlYWR5c3RhdGVjaGFuZ2UsdC5PYmplY3REZWZpbmVQcm9wZXJ0eShzLHIsbHx8e30pLGk7dmFyIGM9dC5zeW1ib2woImZha2UiKTt0Lk9iamVjdERlZmluZVByb3BlcnR5KHMscix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbY119LHNldDpmdW5jdGlvbih0KXt0aGlzW2NdPXR9fSk7dmFyIGQscD1mdW5jdGlvbigpe307cmV0dXJuKGQ9bmV3IGEpLm9ucmVhZHlzdGF0ZWNoYW5nZT1wLGk9ZFtjXT09PXAsZC5vbnJlYWR5c3RhdGVjaGFuZ2U9bnVsbCxpfSkodCxlKSl7dmFyIGk9InVuZGVmaW5lZCIhPXR5cGVvZiBXZWJTb2NrZXQ7KGZ1bmN0aW9uIGEodCl7Zm9yKHZhciBlPXQuZ2V0R2xvYmFsT2JqZWN0cygpLmV2ZW50TmFtZXMsbj10LnN5bWJvbCgidW5ib3VuZCIpLG89ZnVuY3Rpb24obyl7dmFyIGk9ZVtvXSxhPSJvbiIraTtzZWxmLmFkZEV2ZW50TGlzdGVuZXIoaSwoZnVuY3Rpb24oZSl7dmFyIG8saSxyPWUudGFyZ2V0O2ZvcihpPXI/ci5jb25zdHJ1Y3Rvci5uYW1lKyIuIithOiJ1bmtub3duLiIrYTtyOylyW2FdJiYhclthXVtuXSYmKChvPXQud3JhcFdpdGhDdXJyZW50Wm9uZShyW2FdLGkpKVtuXT1yW2FdLHJbYV09bykscj1yLnBhcmVudEVsZW1lbnR9KSwhMCl9LGk9MDtpPGUubGVuZ3RoO2krKylvKGkpfQovKioKICAgICAgICAgKiBAbGljZW5zZQogICAgICAgICAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICAgICAqCiAgICAgICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgICAgICovKSh0KSx0LnBhdGNoQ2xhc3MoIlhNTEh0dHBSZXF1ZXN0IiksaSYmKGZ1bmN0aW9uIHIodCxlKXt2YXIgbj10LmdldEdsb2JhbE9iamVjdHMoKSxvPW4uQUREX0VWRU5UX0xJU1RFTkVSX1NUUixpPW4uUkVNT1ZFX0VWRU5UX0xJU1RFTkVSX1NUUixhPWUuV2ViU29ja2V0O2UuRXZlbnRUYXJnZXR8fHQucGF0Y2hFdmVudFRhcmdldChlLFthLnByb3RvdHlwZV0pLGUuV2ViU29ja2V0PWZ1bmN0aW9uKGUsbil7dmFyIHIscyxsPWFyZ3VtZW50cy5sZW5ndGg+MT9uZXcgYShlLG4pOm5ldyBhKGUpLGM9dC5PYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobCwib25tZXNzYWdlIik7cmV0dXJuIGMmJiExPT09Yy5jb25maWd1cmFibGU/KHI9dC5PYmplY3RDcmVhdGUobCkscz1sLFtvLGksInNlbmQiLCJjbG9zZSJdLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JbZV09ZnVuY3Rpb24oKXt2YXIgbj10LkFycmF5U2xpY2UuY2FsbChhcmd1bWVudHMpO2lmKGU9PT1vfHxlPT09aSl7dmFyIGE9bi5sZW5ndGg+MD9uWzBdOnZvaWQgMDtpZihhKXt2YXIgcz1ab25lLl9fc3ltYm9sX18oIk9OX1BST1BFUlRZIithKTtsW3NdPXJbc119fXJldHVybiBsW2VdLmFwcGx5KGwsbil9fSkpKTpyPWwsdC5wYXRjaE9uUHJvcGVydGllcyhyLFsiY2xvc2UiLCJlcnJvciIsIm1lc3NhZ2UiLCJvcGVuIl0scykscn07dmFyIHI9ZS5XZWJTb2NrZXQ7Zm9yKHZhciBzIGluIGEpcltzXT1hW3NdfSkodCxlKSxab25lW3Quc3ltYm9sKCJwYXRjaEV2ZW50cyIpXT0hMH19Wm9uZS5fX2xvYWRfcGF0Y2goInV0aWwiLChmdW5jdGlvbihuLHMsbCl7bC5wYXRjaE9uUHJvcGVydGllcz1TLGwucGF0Y2hNZXRob2Q9QSxsLmJpbmRBcmd1bWVudHM9XyxsLnBhdGNoTWFjcm9UYXNrPVI7dmFyIHU9cy5fX3N5bWJvbF9fKCJCTEFDS19MSVNURURfRVZFTlRTIiksZj1zLl9fc3ltYm9sX18oIlVOUEFUQ0hFRF9FVkVOVFMiKTtuW2ZdJiYoblt1XT1uW2ZdKSxuW3VdJiYoc1t1XT1zW2ZdPW5bdV0pLGwucGF0Y2hFdmVudFByb3RvdHlwZT1aLGwucGF0Y2hFdmVudFRhcmdldD1ZLGwuaXNJRU9yRWRnZT1ILGwuT2JqZWN0RGVmaW5lUHJvcGVydHk9ZSxsLk9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcj10LGwuT2JqZWN0Q3JlYXRlPW8sbC5BcnJheVNsaWNlPWksbC5wYXRjaENsYXNzPUUsbC53cmFwV2l0aEN1cnJlbnRab25lPW0sbC5maWx0ZXJQcm9wZXJ0aWVzPXB0LGwuYXR0YWNoT3JpZ2luVG9QYXRjaGVkPVQsbC5fcmVkZWZpbmVQcm9wZXJ0eT1PYmplY3QuZGVmaW5lUHJvcGVydHksbC5wYXRjaENhbGxiYWNrcz1YLGwuZ2V0R2xvYmFsT2JqZWN0cz1mdW5jdGlvbigpe3JldHVybntnbG9iYWxTb3VyY2VzOmosem9uZVN5bWJvbEV2ZW50TmFtZXM6VixldmVudE5hbWVzOmR0LGlzQnJvd3Nlcjp4LGlzTWl4Ok8saXNOb2RlOnYsVFJVRV9TVFI6YyxGQUxTRV9TVFI6ZCxaT05FX1NZTUJPTF9QUkVGSVg6cCxBRERfRVZFTlRfTElTVEVORVJfU1RSOmEsUkVNT1ZFX0VWRU5UX0xJU1RFTkVSX1NUUjpyfX19KSksCi8qKgogICAgICAgICAqIEBsaWNlbnNlCiAgICAgICAgICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgICAgICoKICAgICAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAgICAgKi8KKGZ1bmN0aW9uKHQpe3ZhciBlPXQuX19ab25lX3N5bWJvbF9wcmVmaXh8fCJfX3pvbmVfc3ltYm9sX18iO3RbKGZ1bmN0aW9uIG4odCl7cmV0dXJuIGUrdH0pKCJsZWdhY3lQYXRjaCIpXT1mdW5jdGlvbigpe3ZhciBlPXQuWm9uZTtlLl9fbG9hZF9wYXRjaCgiZGVmaW5lUHJvcGVydHkiLChmdW5jdGlvbih0LGUsbil7bi5fcmVkZWZpbmVQcm9wZXJ0eT1ndCxmdCgpfSkpLGUuX19sb2FkX3BhdGNoKCJyZWdpc3RlckVsZW1lbnQiLChmdW5jdGlvbih0LGUsbil7IShmdW5jdGlvbiBvKHQsZSl7dmFyIG49ZS5nZXRHbG9iYWxPYmplY3RzKCk7KG4uaXNCcm93c2VyfHxuLmlzTWl4KSYmInJlZ2lzdGVyRWxlbWVudCJpbiB0LmRvY3VtZW50JiZlLnBhdGNoQ2FsbGJhY2tzKGUsZG9jdW1lbnQsIkRvY3VtZW50IiwicmVnaXN0ZXJFbGVtZW50IixbImNyZWF0ZWRDYWxsYmFjayIsImF0dGFjaGVkQ2FsbGJhY2siLCJkZXRhY2hlZENhbGxiYWNrIiwiYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrIl0pfSkodCxuKX0pKSxlLl9fbG9hZF9wYXRjaCgiRXZlbnRUYXJnZXRMZWdhY3kiLChmdW5jdGlvbih0LGUsbil7X3QodCxuKSxDdChuLHQpfSkpfX0pKCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp2b2lkIDAhPT1HeD9HeDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjp7fSk7Ci8qKgogICAgICAgICAqIEBsaWNlbnNlCiAgICAgICAgICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgICAgICoKICAgICAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAgICAgKi8KdmFyIE10PWYoInpvbmVUYXNrIik7ZnVuY3Rpb24gdnQodCxlLG4sbyl7dmFyIGk9bnVsbCxhPW51bGw7bis9bzt2YXIgcj17fTtmdW5jdGlvbiBzKGUpe3ZhciBuPWUuZGF0YTtyZXR1cm4gbi5hcmdzWzBdPWZ1bmN0aW9uIG8oKXt0cnl7ZS5pbnZva2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZpbmFsbHl7ZS5kYXRhJiZlLmRhdGEuaXNQZXJpb2RpY3x8KCJudW1iZXIiPT10eXBlb2Ygbi5oYW5kbGVJZD9kZWxldGUgcltuLmhhbmRsZUlkXTpuLmhhbmRsZUlkJiYobi5oYW5kbGVJZFtNdF09bnVsbCkpfX0sbi5oYW5kbGVJZD1pLmFwcGx5KHQsbi5hcmdzKSxlfWZ1bmN0aW9uIGwodCl7cmV0dXJuIGEodC5kYXRhLmhhbmRsZUlkKX1pPUEodCxlKz1vLChmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24oaSxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYVswXSl7dmFyIGM9dShlLGFbMF0se2lzUGVyaW9kaWM6IkludGVydmFsIj09PW8sZGVsYXk6IlRpbWVvdXQiPT09b3x8IkludGVydmFsIj09PW8/YVsxXXx8MDp2b2lkIDAsYXJnczphfSxzLGwpO2lmKCFjKXJldHVybiBjO3ZhciBkPWMuZGF0YS5oYW5kbGVJZDtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGQ/cltkXT1jOmQmJihkW010XT1jKSxkJiZkLnJlZiYmZC51bnJlZiYmImZ1bmN0aW9uIj09dHlwZW9mIGQucmVmJiYiZnVuY3Rpb24iPT10eXBlb2YgZC51bnJlZiYmKGMucmVmPWQucmVmLmJpbmQoZCksYy51bnJlZj1kLnVucmVmLmJpbmQoZCkpLCJudW1iZXIiPT10eXBlb2YgZHx8ZD9kOmN9cmV0dXJuIG4uYXBwbHkodCxhKX19KSksYT1BKHQsbiwoZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKG4sbyl7dmFyIGksYT1vWzBdOyJudW1iZXIiPT10eXBlb2YgYT9pPXJbYV06KGk9YSYmYVtNdF0pfHwoaT1hKSxpJiYic3RyaW5nIj09dHlwZW9mIGkudHlwZT8ibm90U2NoZWR1bGVkIiE9PWkuc3RhdGUmJihpLmNhbmNlbEZuJiZpLmRhdGEuaXNQZXJpb2RpY3x8MD09PWkucnVuQ291bnQpJiYoIm51bWJlciI9PXR5cGVvZiBhP2RlbGV0ZSByW2FdOmEmJihhW010XT1udWxsKSxpLnpvbmUuY2FuY2VsVGFzayhpKSk6ZS5hcHBseSh0LG8pfX0pKX0KLyoqCiAgICAgICAgICogQGxpY2Vuc2UKICAgICAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAgICAgKgogICAgICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICAgICAqLwovKioKICAgICAgICAgKiBAbGljZW5zZQogICAgICAgICAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICAgICAqCiAgICAgICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgICAgICovCmZ1bmN0aW9uIHh0KHQsZSl7aWYoIVpvbmVbZS5zeW1ib2woInBhdGNoRXZlbnRUYXJnZXQiKV0pe2Zvcih2YXIgbj1lLmdldEdsb2JhbE9iamVjdHMoKSxvPW4uZXZlbnROYW1lcyxpPW4uem9uZVN5bWJvbEV2ZW50TmFtZXMsYT1uLlRSVUVfU1RSLHI9bi5GQUxTRV9TVFIscz1uLlpPTkVfU1lNQk9MX1BSRUZJWCxsPTA7bDxvLmxlbmd0aDtsKyspe3ZhciBjPW9bbF0sZD1zKyhjK3IpLHA9cysoYythKTtpW2NdPXt9LGlbY11bcl09ZCxpW2NdW2FdPXB9dmFyIG09dC5FdmVudFRhcmdldDtpZihtJiZtLnByb3RvdHlwZSlyZXR1cm4gZS5wYXRjaEV2ZW50VGFyZ2V0KHQsW20mJm0ucHJvdG90eXBlXSksITB9fQovKioKICAgICAgICAgKiBAbGljZW5zZQogICAgICAgICAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICAgICAqCiAgICAgICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgICAgICovClpvbmUuX19sb2FkX3BhdGNoKCJsZWdhY3kiLChmdW5jdGlvbih0KXt2YXIgZT10W1pvbmUuX19zeW1ib2xfXygibGVnYWN5UGF0Y2giKV07ZSYmZSgpfSkpLFpvbmUuX19sb2FkX3BhdGNoKCJ0aW1lcnMiLChmdW5jdGlvbih0KXt2YXIgZT0ic2V0IixuPSJjbGVhciI7dnQodCxlLG4sIlRpbWVvdXQiKSx2dCh0LGUsbiwiSW50ZXJ2YWwiKSx2dCh0LGUsbiwiSW1tZWRpYXRlIil9KSksWm9uZS5fX2xvYWRfcGF0Y2goInJlcXVlc3RBbmltYXRpb25GcmFtZSIsKGZ1bmN0aW9uKHQpe3Z0KHQsInJlcXVlc3QiLCJjYW5jZWwiLCJBbmltYXRpb25GcmFtZSIpLHZ0KHQsIm1velJlcXVlc3QiLCJtb3pDYW5jZWwiLCJBbmltYXRpb25GcmFtZSIpLHZ0KHQsIndlYmtpdFJlcXVlc3QiLCJ3ZWJraXRDYW5jZWwiLCJBbmltYXRpb25GcmFtZSIpfSkpLFpvbmUuX19sb2FkX3BhdGNoKCJibG9ja2luZyIsKGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPVsiYWxlcnQiLCJwcm9tcHQiLCJjb25maXJtIl0sbz0wO288bi5sZW5ndGg7bysrKUEodCxuW29dLChmdW5jdGlvbihuLG8saSl7cmV0dXJuIGZ1bmN0aW9uKG8sYSl7cmV0dXJuIGUuY3VycmVudC5ydW4obix0LGEsaSl9fSkpfSkpLFpvbmUuX19sb2FkX3BhdGNoKCJFdmVudFRhcmdldCIsKGZ1bmN0aW9uKHQsZSxuKXsoZnVuY3Rpb24gbyh0LGUpe2UucGF0Y2hFdmVudFByb3RvdHlwZSh0LGUpfSkodCxuKSx4dCh0LG4pO3ZhciBpPXQuWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldDtpJiZpLnByb3RvdHlwZSYmbi5wYXRjaEV2ZW50VGFyZ2V0KHQsW2kucHJvdG90eXBlXSksRSgiTXV0YXRpb25PYnNlcnZlciIpLEUoIldlYktpdE11dGF0aW9uT2JzZXJ2ZXIiKSxFKCJJbnRlcnNlY3Rpb25PYnNlcnZlciIpLEUoIkZpbGVSZWFkZXIiKX0pKSxab25lLl9fbG9hZF9wYXRjaCgib25fcHJvcGVydHkiLChmdW5jdGlvbih0LGUsbil7dXQobix0KX0pKSxab25lLl9fbG9hZF9wYXRjaCgiY3VzdG9tRWxlbWVudHMiLChmdW5jdGlvbih0LGUsbil7IShmdW5jdGlvbiBvKHQsZSl7dmFyIG49ZS5nZXRHbG9iYWxPYmplY3RzKCk7KG4uaXNCcm93c2VyfHxuLmlzTWl4KSYmdC5jdXN0b21FbGVtZW50cyYmImN1c3RvbUVsZW1lbnRzImluIHQmJmUucGF0Y2hDYWxsYmFja3MoZSx0LmN1c3RvbUVsZW1lbnRzLCJjdXN0b21FbGVtZW50cyIsImRlZmluZSIsWyJjb25uZWN0ZWRDYWxsYmFjayIsImRpc2Nvbm5lY3RlZENhbGxiYWNrIiwiYWRvcHRlZENhbGxiYWNrIiwiYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrIl0pfSkodCxuKX0pKSxab25lLl9fbG9hZF9wYXRjaCgiWEhSIiwoZnVuY3Rpb24odCxlKXshKGZ1bmN0aW9uIG4odCl7dmFyIG49dC5YTUxIdHRwUmVxdWVzdDtpZihuKXt2YXIgcD1uLnByb3RvdHlwZSxtPXBbc10sZz1wW2xdO2lmKCFtKXt2YXIgaD10LlhNTEh0dHBSZXF1ZXN0RXZlbnRUYXJnZXQ7aWYoaCl7dmFyIGI9aC5wcm90b3R5cGU7bT1iW3NdLGc9YltsXX19dmFyIHk9InJlYWR5c3RhdGVjaGFuZ2UiLF89InNjaGVkdWxlZCIsQz1BKHAsIm9wZW4iLChmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0LGUpe3JldHVybiB0W2ldPTA9PWVbMl0sdFtjXT1lWzFdLEMuYXBwbHkodCxlKX19KSksTT1mKCJmZXRjaFRhc2tBYm9ydGluZyIpLHY9ZigiZmV0Y2hUYXNrU2NoZWR1bGluZyIpLHg9QShwLCJzZW5kIiwoZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCxuKXtpZighMD09PWUuY3VycmVudFt2XSlyZXR1cm4geC5hcHBseSh0LG4pO2lmKHRbaV0pcmV0dXJuIHguYXBwbHkodCxuKTt2YXIgbz17dGFyZ2V0OnQsdXJsOnRbY10saXNQZXJpb2RpYzohMSxhcmdzOm4sYWJvcnRlZDohMX0sYT11KCJYTUxIdHRwUmVxdWVzdC5zZW5kIix3LG8sUCxrKTt0JiYhMD09PXRbZF0mJiFvLmFib3J0ZWQmJmEuc3RhdGU9PT1fJiZhLmludm9rZSgpfX0pKSxPPUEocCwiYWJvcnQiLChmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0LG4pe3ZhciBpPShmdW5jdGlvbiBhKHQpe3JldHVybiB0W29dfSkodCk7aWYoaSYmInN0cmluZyI9PXR5cGVvZiBpLnR5cGUpe2lmKG51bGw9PWkuY2FuY2VsRm58fGkuZGF0YSYmaS5kYXRhLmFib3J0ZWQpcmV0dXJuO2kuem9uZS5jYW5jZWxUYXNrKGkpfWVsc2UgaWYoITA9PT1lLmN1cnJlbnRbTV0pcmV0dXJuIE8uYXBwbHkodCxuKX19KSl9ZnVuY3Rpb24gUCh0KXt2YXIgbj10LmRhdGEsaT1uLnRhcmdldDtpW3JdPSExLGlbZF09ITE7dmFyIGM9aVthXTttfHwobT1pW3NdLGc9aVtsXSksYyYmZy5jYWxsKGkseSxjKTt2YXIgcD1pW2FdPWZ1bmN0aW9uKCl7aWYoaS5yZWFkeVN0YXRlPT09aS5ET05FKWlmKCFuLmFib3J0ZWQmJmlbcl0mJnQuc3RhdGU9PT1fKXt2YXIgbz1pW2UuX19zeW1ib2xfXygibG9hZGZhbHNlIildO2lmKG8mJm8ubGVuZ3RoPjApe3ZhciBhPXQuaW52b2tlO3QuaW52b2tlPWZ1bmN0aW9uKCl7Zm9yKHZhciBvPWlbZS5fX3N5bWJvbF9fKCJsb2FkZmFsc2UiKV0scj0wO3I8by5sZW5ndGg7cisrKW9bcl09PT10JiZvLnNwbGljZShyLDEpO24uYWJvcnRlZHx8dC5zdGF0ZSE9PV98fGEuY2FsbCh0KX0sby5wdXNoKHQpfWVsc2UgdC5pbnZva2UoKX1lbHNlIG4uYWJvcnRlZHx8ITEhPT1pW3JdfHwoaVtkXT0hMCl9O3JldHVybiBtLmNhbGwoaSx5LHApLGlbb118fChpW29dPXQpLHguYXBwbHkoaSxuLmFyZ3MpLGlbcl09ITAsdH1mdW5jdGlvbiB3KCl7fWZ1bmN0aW9uIGsodCl7dmFyIGU9dC5kYXRhO3JldHVybiBlLmFib3J0ZWQ9ITAsTy5hcHBseShlLnRhcmdldCxlLmFyZ3MpfX0pKHQpO3ZhciBvPWYoInhoclRhc2siKSxpPWYoInhoclN5bmMiKSxhPWYoInhockxpc3RlbmVyIikscj1mKCJ4aHJTY2hlZHVsZWQiKSxjPWYoInhoclVSTCIpLGQ9ZigieGhyRXJyb3JCZWZvcmVTY2hlZHVsZWQiKX0pKSxab25lLl9fbG9hZF9wYXRjaCgiZ2VvbG9jYXRpb24iLChmdW5jdGlvbihlKXtlLm5hdmlnYXRvciYmZS5uYXZpZ2F0b3IuZ2VvbG9jYXRpb24mJihmdW5jdGlvbiBuKGUsbyl7Zm9yKHZhciBpPWUuY29uc3RydWN0b3IubmFtZSxhPWZ1bmN0aW9uKG4pe3ZhciBhPW9bbl0scj1lW2FdO2lmKHIpe2lmKCFDKHQoZSxhKSkpcmV0dXJuImNvbnRpbnVlIjtlW2FdPShmdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbigpe3JldHVybiB0LmFwcGx5KHRoaXMsXyhhcmd1bWVudHMsaSsiLiIrYSkpfTtyZXR1cm4gVChlLHQpLGV9KShyKX19LHI9MDtyPG8ubGVuZ3RoO3IrKylhKHIpfSkoZS5uYXZpZ2F0b3IuZ2VvbG9jYXRpb24sWyJnZXRDdXJyZW50UG9zaXRpb24iLCJ3YXRjaFBvc2l0aW9uIl0pfSkpLFpvbmUuX19sb2FkX3BhdGNoKCJQcm9taXNlUmVqZWN0aW9uRXZlbnQiLChmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3EodCxlKS5mb3JFYWNoKChmdW5jdGlvbihvKXt2YXIgaT10LlByb21pc2VSZWplY3Rpb25FdmVudDtpZihpKXt2YXIgYT1uZXcgaShlLHtwcm9taXNlOm4ucHJvbWlzZSxyZWFzb246bi5yZWplY3Rpb259KTtvLmludm9rZShhKX19KSl9fXQuUHJvbWlzZVJlamVjdGlvbkV2ZW50JiYoZVtmKCJ1bmhhbmRsZWRQcm9taXNlUmVqZWN0aW9uSGFuZGxlciIpXT1uKCJ1bmhhbmRsZWRyZWplY3Rpb24iKSxlW2YoInJlamVjdGlvbkhhbmRsZWRIYW5kbGVyIildPW4oInJlamVjdGlvbmhhbmRsZWQiKSl9KSl9KSgpOwovKioKICAgICAqIEBsaWNlbnNlIEFuZ3VsYXIgdjExLjIuMTQKICAgICAqIChjKSAyMDEwLTIwMjEgR29vZ2xlIExMQy4gaHR0cHM6Ly9hbmd1bGFyLmlvLwogICAgICogTGljZW5zZTogTUlUCiAgICAgKi8KY2xhc3MgWnh7fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3QgWHg9IioiO2Z1bmN0aW9uIEt4KHQsZSl7cmV0dXJue3R5cGU6NyxuYW1lOnQsZGVmaW5pdGlvbnM6ZSxvcHRpb25zOnt9fX1mdW5jdGlvbiBKeCh0LGU9bnVsbCl7cmV0dXJue3R5cGU6NCxzdHlsZXM6ZSx0aW1pbmdzOnR9fWZ1bmN0aW9uIFF4KHQsZT1udWxsKXtyZXR1cm57dHlwZToyLHN0ZXBzOnQsb3B0aW9uczplfX1mdW5jdGlvbiAkeCh0KXtyZXR1cm57dHlwZTo2LHN0eWxlczp0LG9mZnNldDpudWxsfX1mdW5jdGlvbiB0Tyh0LGUsbil7cmV0dXJue3R5cGU6MCxuYW1lOnQsc3R5bGVzOmUsb3B0aW9uczpufX1mdW5jdGlvbiBlTyh0KXtyZXR1cm57dHlwZTo1LHN0ZXBzOnR9fWZ1bmN0aW9uIG5PKHQsZSxuPW51bGwpe3JldHVybnt0eXBlOjEsZXhwcjp0LGFuaW1hdGlvbjplLG9wdGlvbnM6bn19ZnVuY3Rpb24gb08odD1udWxsKXtyZXR1cm57dHlwZTo5LG9wdGlvbnM6dH19ZnVuY3Rpb24gaU8odCxlLG49bnVsbCl7cmV0dXJue3R5cGU6MTEsc2VsZWN0b3I6dCxhbmltYXRpb246ZSxvcHRpb25zOm59fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiBhTyh0KXtQcm9taXNlLnJlc29sdmUobnVsbCkudGhlbih0KX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY2xhc3Mgck97Y29uc3RydWN0b3IodD0wLGU9MCl7dGhpcy5fb25Eb25lRm5zPVtdLHRoaXMuX29uU3RhcnRGbnM9W10sdGhpcy5fb25EZXN0cm95Rm5zPVtdLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX3Bvc2l0aW9uPTAsdGhpcy5wYXJlbnRQbGF5ZXI9bnVsbCx0aGlzLnRvdGFsVGltZT10K2V9X29uRmluaXNoKCl7dGhpcy5fZmluaXNoZWR8fCh0aGlzLl9maW5pc2hlZD0hMCx0aGlzLl9vbkRvbmVGbnMuZm9yRWFjaCgodD0+dCgpKSksdGhpcy5fb25Eb25lRm5zPVtdKX1vblN0YXJ0KHQpe3RoaXMuX29uU3RhcnRGbnMucHVzaCh0KX1vbkRvbmUodCl7dGhpcy5fb25Eb25lRm5zLnB1c2godCl9b25EZXN0cm95KHQpe3RoaXMuX29uRGVzdHJveUZucy5wdXNoKHQpfWhhc1N0YXJ0ZWQoKXtyZXR1cm4gdGhpcy5fc3RhcnRlZH1pbml0KCl7fXBsYXkoKXt0aGlzLmhhc1N0YXJ0ZWQoKXx8KHRoaXMuX29uU3RhcnQoKSx0aGlzLnRyaWdnZXJNaWNyb3Rhc2soKSksdGhpcy5fc3RhcnRlZD0hMH10cmlnZ2VyTWljcm90YXNrKCl7YU8oKCgpPT50aGlzLl9vbkZpbmlzaCgpKSl9X29uU3RhcnQoKXt0aGlzLl9vblN0YXJ0Rm5zLmZvckVhY2goKHQ9PnQoKSkpLHRoaXMuX29uU3RhcnRGbnM9W119cGF1c2UoKXt9cmVzdGFydCgpe31maW5pc2goKXt0aGlzLl9vbkZpbmlzaCgpfWRlc3Ryb3koKXt0aGlzLl9kZXN0cm95ZWR8fCh0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy5oYXNTdGFydGVkKCl8fHRoaXMuX29uU3RhcnQoKSx0aGlzLmZpbmlzaCgpLHRoaXMuX29uRGVzdHJveUZucy5mb3JFYWNoKCh0PT50KCkpKSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10pfXJlc2V0KCl7fXNldFBvc2l0aW9uKHQpe3RoaXMuX3Bvc2l0aW9uPXRoaXMudG90YWxUaW1lP3QqdGhpcy50b3RhbFRpbWU6MX1nZXRQb3NpdGlvbigpe3JldHVybiB0aGlzLnRvdGFsVGltZT90aGlzLl9wb3NpdGlvbi90aGlzLnRvdGFsVGltZToxfXRyaWdnZXJDYWxsYmFjayh0KXtjb25zdCBlPSJzdGFydCI9PXQ/dGhpcy5fb25TdGFydEZuczp0aGlzLl9vbkRvbmVGbnM7ZS5mb3JFYWNoKCh0PT50KCkpKSxlLmxlbmd0aD0wfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY2xhc3Mgc097Y29uc3RydWN0b3IodCl7dGhpcy5fb25Eb25lRm5zPVtdLHRoaXMuX29uU3RhcnRGbnM9W10sdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fb25EZXN0cm95Rm5zPVtdLHRoaXMucGFyZW50UGxheWVyPW51bGwsdGhpcy50b3RhbFRpbWU9MCx0aGlzLnBsYXllcnM9dDtsZXQgZT0wLG49MCxvPTA7Y29uc3QgaT10aGlzLnBsYXllcnMubGVuZ3RoOzA9PWk/YU8oKCgpPT50aGlzLl9vbkZpbmlzaCgpKSk6dGhpcy5wbGF5ZXJzLmZvckVhY2goKHQ9Pnt0Lm9uRG9uZSgoKCk9PnsrK2U9PWkmJnRoaXMuX29uRmluaXNoKCl9KSksdC5vbkRlc3Ryb3koKCgpPT57KytuPT1pJiZ0aGlzLl9vbkRlc3Ryb3koKX0pKSx0Lm9uU3RhcnQoKCgpPT57KytvPT1pJiZ0aGlzLl9vblN0YXJ0KCl9KSl9KSksdGhpcy50b3RhbFRpbWU9dGhpcy5wbGF5ZXJzLnJlZHVjZSgoKHQsZSk9Pk1hdGgubWF4KHQsZS50b3RhbFRpbWUpKSwwKX1fb25GaW5pc2goKXt0aGlzLl9maW5pc2hlZHx8KHRoaXMuX2ZpbmlzaGVkPSEwLHRoaXMuX29uRG9uZUZucy5mb3JFYWNoKCh0PT50KCkpKSx0aGlzLl9vbkRvbmVGbnM9W10pfWluaXQoKXt0aGlzLnBsYXllcnMuZm9yRWFjaCgodD0+dC5pbml0KCkpKX1vblN0YXJ0KHQpe3RoaXMuX29uU3RhcnRGbnMucHVzaCh0KX1fb25TdGFydCgpe3RoaXMuaGFzU3RhcnRlZCgpfHwodGhpcy5fc3RhcnRlZD0hMCx0aGlzLl9vblN0YXJ0Rm5zLmZvckVhY2goKHQ9PnQoKSkpLHRoaXMuX29uU3RhcnRGbnM9W10pfW9uRG9uZSh0KXt0aGlzLl9vbkRvbmVGbnMucHVzaCh0KX1vbkRlc3Ryb3kodCl7dGhpcy5fb25EZXN0cm95Rm5zLnB1c2godCl9aGFzU3RhcnRlZCgpe3JldHVybiB0aGlzLl9zdGFydGVkfXBsYXkoKXt0aGlzLnBhcmVudFBsYXllcnx8dGhpcy5pbml0KCksdGhpcy5fb25TdGFydCgpLHRoaXMucGxheWVycy5mb3JFYWNoKCh0PT50LnBsYXkoKSkpfXBhdXNlKCl7dGhpcy5wbGF5ZXJzLmZvckVhY2goKHQ9PnQucGF1c2UoKSkpfXJlc3RhcnQoKXt0aGlzLnBsYXllcnMuZm9yRWFjaCgodD0+dC5yZXN0YXJ0KCkpKX1maW5pc2goKXt0aGlzLl9vbkZpbmlzaCgpLHRoaXMucGxheWVycy5mb3JFYWNoKCh0PT50LmZpbmlzaCgpKSl9ZGVzdHJveSgpe3RoaXMuX29uRGVzdHJveSgpfV9vbkRlc3Ryb3koKXt0aGlzLl9kZXN0cm95ZWR8fCh0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy5fb25GaW5pc2goKSx0aGlzLnBsYXllcnMuZm9yRWFjaCgodD0+dC5kZXN0cm95KCkpKSx0aGlzLl9vbkRlc3Ryb3lGbnMuZm9yRWFjaCgodD0+dCgpKSksdGhpcy5fb25EZXN0cm95Rm5zPVtdKX1yZXNldCgpe3RoaXMucGxheWVycy5mb3JFYWNoKCh0PT50LnJlc2V0KCkpKSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMX1zZXRQb3NpdGlvbih0KXtjb25zdCBlPXQqdGhpcy50b3RhbFRpbWU7dGhpcy5wbGF5ZXJzLmZvckVhY2goKHQ9Pntjb25zdCBuPXQudG90YWxUaW1lP01hdGgubWluKDEsZS90LnRvdGFsVGltZSk6MTt0LnNldFBvc2l0aW9uKG4pfSkpfWdldFBvc2l0aW9uKCl7Y29uc3QgdD10aGlzLnBsYXllcnMucmVkdWNlKCgodCxlKT0+bnVsbD09PXR8fGUudG90YWxUaW1lPnQudG90YWxUaW1lP2U6dCksbnVsbCk7cmV0dXJuIG51bGwhPXQ/dC5nZXRQb3NpdGlvbigpOjB9YmVmb3JlRGVzdHJveSgpe3RoaXMucGxheWVycy5mb3JFYWNoKCh0PT57dC5iZWZvcmVEZXN0cm95JiZ0LmJlZm9yZURlc3Ryb3koKX0pKX10cmlnZ2VyQ2FsbGJhY2sodCl7Y29uc3QgZT0ic3RhcnQiPT10P3RoaXMuX29uU3RhcnRGbnM6dGhpcy5fb25Eb25lRm5zO2UuZm9yRWFjaCgodD0+dCgpKSksZS5sZW5ndGg9MH19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIGxPKCl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBwcm9jZXNzJiYiW29iamVjdCBwcm9jZXNzXSI9PT17fS50b1N0cmluZy5jYWxsKHByb2Nlc3MpfWZ1bmN0aW9uIGNPKHQpe3N3aXRjaCh0Lmxlbmd0aCl7Y2FzZSAwOnJldHVybiBuZXcgck87Y2FzZSAxOnJldHVybiB0WzBdO2RlZmF1bHQ6cmV0dXJuIG5ldyBzTyh0KX19ZnVuY3Rpb24gZE8odCxlLG4sbyxpPXt9LGE9e30pe2NvbnN0IHI9W10scz1bXTtsZXQgbD0tMSxjPW51bGw7aWYoby5mb3JFYWNoKCh0PT57Y29uc3Qgbj10Lm9mZnNldCxvPW49PWwsZD1vJiZjfHx7fTtPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChuPT57bGV0IG89bixzPXRbbl07aWYoIm9mZnNldCIhPT1uKXN3aXRjaChvPWUubm9ybWFsaXplUHJvcGVydHlOYW1lKG8scikscyl7Y2FzZSIhIjpzPWlbbl07YnJlYWs7Y2FzZSBYeDpzPWFbbl07YnJlYWs7ZGVmYXVsdDpzPWUubm9ybWFsaXplU3R5bGVWYWx1ZShuLG8scyxyKX1kW29dPXN9KSksb3x8cy5wdXNoKGQpLGM9ZCxsPW59KSksci5sZW5ndGgpe2NvbnN0IHQ9IlxuIC0gIjt0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBhbmltYXRlIGR1ZSB0byB0aGUgZm9sbG93aW5nIGVycm9yczoke3R9JHtyLmpvaW4odCl9YCl9cmV0dXJuIHN9ZnVuY3Rpb24gcE8odCxlLG4sbyl7c3dpdGNoKGUpe2Nhc2Uic3RhcnQiOnQub25TdGFydCgoKCk9Pm8obiYmbU8obiwic3RhcnQiLHQpKSkpO2JyZWFrO2Nhc2UiZG9uZSI6dC5vbkRvbmUoKCgpPT5vKG4mJm1PKG4sImRvbmUiLHQpKSkpO2JyZWFrO2Nhc2UiZGVzdHJveSI6dC5vbkRlc3Ryb3koKCgpPT5vKG4mJm1PKG4sImRlc3Ryb3kiLHQpKSkpfX1mdW5jdGlvbiBtTyh0LGUsbil7Y29uc3Qgbz1uLnRvdGFsVGltZSxpPXVPKHQuZWxlbWVudCx0LnRyaWdnZXJOYW1lLHQuZnJvbVN0YXRlLHQudG9TdGF0ZSxlfHx0LnBoYXNlTmFtZSxudWxsPT1vP3QudG90YWxUaW1lOm8sISFuLmRpc2FibGVkKSxhPXQuX2RhdGE7cmV0dXJuIG51bGwhPWEmJihpLl9kYXRhPWEpLGl9ZnVuY3Rpb24gdU8odCxlLG4sbyxpPSIiLGE9MCxyKXtyZXR1cm57ZWxlbWVudDp0LHRyaWdnZXJOYW1lOmUsZnJvbVN0YXRlOm4sdG9TdGF0ZTpvLHBoYXNlTmFtZTppLHRvdGFsVGltZTphLGRpc2FibGVkOiEhcn19ZnVuY3Rpb24gZk8odCxlLG4pe2xldCBvO3JldHVybiB0IGluc3RhbmNlb2YgTWFwPyhvPXQuZ2V0KGUpLG98fHQuc2V0KGUsbz1uKSk6KG89dFtlXSxvfHwobz10W2VdPW4pKSxvfWZ1bmN0aW9uIGdPKHQpe2NvbnN0IGU9dC5pbmRleE9mKCI6Iik7cmV0dXJuW3Quc3Vic3RyaW5nKDEsZSksdC5zdWJzdHIoZSsxKV19bGV0IGhPPSh0LGUpPT4hMSxiTz0odCxlKT0+ITEseU89KHQsZSxuKT0+W107Y29uc3QgX089bE8oKTsoX098fCJ1bmRlZmluZWQiIT10eXBlb2YgRWxlbWVudCkmJihoTz0odCxlKT0+dC5jb250YWlucyhlKSxiTz0oKCk9PntpZihfT3x8RWxlbWVudC5wcm90b3R5cGUubWF0Y2hlcylyZXR1cm4odCxlKT0+dC5tYXRjaGVzKGUpO3tjb25zdCB0PUVsZW1lbnQucHJvdG90eXBlLGU9dC5tYXRjaGVzU2VsZWN0b3J8fHQubW96TWF0Y2hlc1NlbGVjdG9yfHx0Lm1zTWF0Y2hlc1NlbGVjdG9yfHx0Lm9NYXRjaGVzU2VsZWN0b3J8fHQud2Via2l0TWF0Y2hlc1NlbGVjdG9yO3JldHVybiBlPyh0LG4pPT5lLmFwcGx5KHQsW25dKTpiT319KSgpLHlPPSh0LGUsbik9PntsZXQgbz1bXTtpZihuKXtjb25zdCBuPXQucXVlcnlTZWxlY3RvckFsbChlKTtmb3IobGV0IHQ9MDt0PG4ubGVuZ3RoO3QrKylvLnB1c2goblt0XSl9ZWxzZXtjb25zdCBuPXQucXVlcnlTZWxlY3RvcihlKTtuJiZvLnB1c2gobil9cmV0dXJuIG99KTtsZXQgQ089bnVsbCxNTz0hMTtmdW5jdGlvbiB2Tyh0KXtDT3x8KENPPShmdW5jdGlvbiBlKCl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudD9kb2N1bWVudC5ib2R5Om51bGx9KSgpfHx7fSxNTz0hIUNPLnN0eWxlJiYiV2Via2l0QXBwZWFyYW5jZSJpbiBDTy5zdHlsZSk7bGV0IG49ITA7cmV0dXJuIENPLnN0eWxlJiYhKGZ1bmN0aW9uIG8odCl7cmV0dXJuImVia2l0Ij09dC5zdWJzdHJpbmcoMSw2KX0pKHQpJiYobj10IGluIENPLnN0eWxlLCFuJiZNTykmJihuPSJXZWJraXQiK3QuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrdC5zdWJzdHIoMSlpbiBDTy5zdHlsZSksbn1jb25zdCB4Tz1iTyxPTz1oTyxQTz15TztmdW5jdGlvbiB3Tyh0KXtjb25zdCBlPXt9O3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChuPT57Y29uc3Qgbz1uLnJlcGxhY2UoLyhbYS16XSkoW0EtWl0pL2csIiQxLSQyIik7ZVtvXT10W25dfSkpLGV9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NsYXNzIGtPe3ZhbGlkYXRlU3R5bGVQcm9wZXJ0eSh0KXtyZXR1cm4gdk8odCl9bWF0Y2hlc0VsZW1lbnQodCxlKXtyZXR1cm4geE8odCxlKX1jb250YWluc0VsZW1lbnQodCxlKXtyZXR1cm4gT08odCxlKX1xdWVyeSh0LGUsbil7cmV0dXJuIFBPKHQsZSxuKX1jb21wdXRlU3R5bGUodCxlLG4pe3JldHVybiBufHwiIn1hbmltYXRlKHQsZSxuLG8saSxhPVtdLHIpe3JldHVybiBuZXcgck8obixvKX19a08uybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGtPKX0sa08uybVwcm92PWxvKHt0b2tlbjprTyxmYWN0b3J5OmtPLsm1ZmFjfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihrTyxbe3R5cGU6Sm19XSxudWxsLG51bGwpO2NsYXNzIFNPe31TTy5OT09QPW5ldyBrTzsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IERPPSJuZy1lbnRlciIsRU89Im5nLWxlYXZlIixBTz0ibmctdHJpZ2dlciIsUk89Ii5uZy10cmlnZ2VyIixUTz0ibmctYW5pbWF0aW5nIixOTz0iLm5nLWFuaW1hdGluZyI7ZnVuY3Rpb24gSU8odCl7aWYoIm51bWJlciI9PXR5cGVvZiB0KXJldHVybiB0O2NvbnN0IGU9dC5tYXRjaCgvXigtP1tcLlxkXSspKG0/cykvKTtyZXR1cm4hZXx8ZS5sZW5ndGg8Mj8wOnpPKHBhcnNlRmxvYXQoZVsxXSksZVsyXSl9ZnVuY3Rpb24gek8odCxlKXtzd2l0Y2goZSl7Y2FzZSJzIjpyZXR1cm4gMWUzKnQ7ZGVmYXVsdDpyZXR1cm4gdH19ZnVuY3Rpb24gSE8odCxlLG4pe3JldHVybiB0Lmhhc093blByb3BlcnR5KCJkdXJhdGlvbiIpP3Q6KGZ1bmN0aW9uIG8odCxlLG4pe2xldCBvLGk9MCxhPSIiO2lmKCJzdHJpbmciPT10eXBlb2YgdCl7Y29uc3Qgbj10Lm1hdGNoKC9eKC0/W1wuXGRdKykobT9zKSg/OlxzKygtP1tcLlxkXSspKG0/cykpPyg/OlxzKyhbLWEtel0rKD86XCguKz9cKSk/KSk/JC9pKTtpZihudWxsPT09bilyZXR1cm4gZS5wdXNoKGBUaGUgcHJvdmlkZWQgdGltaW5nIHZhbHVlICIke3R9IiBpcyBpbnZhbGlkLmApLHtkdXJhdGlvbjowLGRlbGF5OjAsZWFzaW5nOiIifTtvPXpPKHBhcnNlRmxvYXQoblsxXSksblsyXSk7Y29uc3Qgcj1uWzNdO251bGwhPXImJihpPXpPKHBhcnNlRmxvYXQociksbls0XSkpO2NvbnN0IHM9bls1XTtzJiYoYT1zKX1lbHNlIG89dDtpZighbil7bGV0IG49ITEsYT1lLmxlbmd0aDtvPDAmJihlLnB1c2goIkR1cmF0aW9uIHZhbHVlcyBiZWxvdyAwIGFyZSBub3QgYWxsb3dlZCBmb3IgdGhpcyBhbmltYXRpb24gc3RlcC4iKSxuPSEwKSxpPDAmJihlLnB1c2goIkRlbGF5IHZhbHVlcyBiZWxvdyAwIGFyZSBub3QgYWxsb3dlZCBmb3IgdGhpcyBhbmltYXRpb24gc3RlcC4iKSxuPSEwKSxuJiZlLnNwbGljZShhLDAsYFRoZSBwcm92aWRlZCB0aW1pbmcgdmFsdWUgIiR7dH0iIGlzIGludmFsaWQuYCl9cmV0dXJue2R1cmF0aW9uOm8sZGVsYXk6aSxlYXNpbmc6YX19KSh0LGUsbil9ZnVuY3Rpb24gRk8odCxlPXt9KXtyZXR1cm4gT2JqZWN0LmtleXModCkuZm9yRWFjaCgobj0+e2Vbbl09dFtuXX0pKSxlfWZ1bmN0aW9uIExPKHQsZSxuPXt9KXtpZihlKWZvcihsZXQgZSBpbiB0KW5bZV09dFtlXTtlbHNlIEZPKHQsbik7cmV0dXJuIG59ZnVuY3Rpb24gQk8odCxlLG4pe3JldHVybiBuP2UrIjoiK24rIjsiOiIifWZ1bmN0aW9uIFZPKHQpe2xldCBlPSIiO2ZvcihsZXQgbj0wO248dC5zdHlsZS5sZW5ndGg7bisrKXtjb25zdCBvPXQuc3R5bGUuaXRlbShuKTtlKz1CTygwLG8sdC5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKG8pKX1mb3IoY29uc3QgbiBpbiB0LnN0eWxlKXQuc3R5bGUuaGFzT3duUHJvcGVydHkobikmJiFuLnN0YXJ0c1dpdGgoIl8iKSYmKGUrPUJPKDAsbi5yZXBsYWNlKC8oW2Etel0pKFtBLVpdKS9nLCIkMS0kMiIpLnRvTG93ZXJDYXNlKCksdC5zdHlsZVtuXSkpO3Quc2V0QXR0cmlidXRlKCJzdHlsZSIsZSl9ZnVuY3Rpb24gak8odCxlLG4pe3Quc3R5bGUmJihPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChvPT57Y29uc3QgaT1LTyhvKTtuJiYhbi5oYXNPd25Qcm9wZXJ0eShvKSYmKG5bb109dC5zdHlsZVtpXSksdC5zdHlsZVtpXT1lW29dfSkpLGxPKCkmJlZPKHQpKX1mdW5jdGlvbiBVTyh0LGUpe3Quc3R5bGUmJihPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChlPT57Y29uc3Qgbj1LTyhlKTt0LnN0eWxlW25dPSIifSkpLGxPKCkmJlZPKHQpKX1mdW5jdGlvbiBXTyh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT8xPT10Lmxlbmd0aD90WzBdOlF4KHQpOnR9Y29uc3QgR089bmV3IFJlZ0V4cCgie3tcXHMqKC4rPylcXHMqfX0iLCJnIik7ZnVuY3Rpb24gWU8odCl7bGV0IGU9W107aWYoInN0cmluZyI9PXR5cGVvZiB0KXtsZXQgbjtmb3IoO249R08uZXhlYyh0KTspZS5wdXNoKG5bMV0pO0dPLmxhc3RJbmRleD0wfXJldHVybiBlfWZ1bmN0aW9uIHFPKHQsZSxuKXtjb25zdCBvPXQudG9TdHJpbmcoKSxpPW8ucmVwbGFjZShHTywoKHQsbyk9PntsZXQgaT1lW29dO3JldHVybiBlLmhhc093blByb3BlcnR5KG8pfHwobi5wdXNoKGBQbGVhc2UgcHJvdmlkZSBhIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIHBhcmFtICR7b31gKSxpPSIiKSxpLnRvU3RyaW5nKCl9KSk7cmV0dXJuIGk9PW8/dDppfWZ1bmN0aW9uIFpPKHQpe2NvbnN0IGU9W107bGV0IG49dC5uZXh0KCk7Zm9yKDshbi5kb25lOyllLnB1c2gobi52YWx1ZSksbj10Lm5leHQoKTtyZXR1cm4gZX1jb25zdCBYTz0vLSsoW2EtejAtOV0pL2c7ZnVuY3Rpb24gS08odCl7cmV0dXJuIHQucmVwbGFjZShYTywoKC4uLnQpPT50WzFdLnRvVXBwZXJDYXNlKCkpKX1mdW5jdGlvbiBKTyh0LGUpe3JldHVybiAwPT09dHx8MD09PWV9ZnVuY3Rpb24gUU8odCxlLG4pe2NvbnN0IG89T2JqZWN0LmtleXMobik7aWYoby5sZW5ndGgmJmUubGVuZ3RoKXtsZXQgYT1lWzBdLHI9W107aWYoby5mb3JFYWNoKCh0PT57YS5oYXNPd25Qcm9wZXJ0eSh0KXx8ci5wdXNoKHQpLGFbdF09blt0XX0pKSxyLmxlbmd0aClmb3IodmFyIGk9MTtpPGUubGVuZ3RoO2krKyl7bGV0IG49ZVtpXTtyLmZvckVhY2goKGZ1bmN0aW9uKGUpe25bZV09dFAodCxlKX0pKX19cmV0dXJuIGV9ZnVuY3Rpb24gJE8odCxlLG4pe3N3aXRjaChlLnR5cGUpe2Nhc2UgNzpyZXR1cm4gdC52aXNpdFRyaWdnZXIoZSxuKTtjYXNlIDA6cmV0dXJuIHQudmlzaXRTdGF0ZShlLG4pO2Nhc2UgMTpyZXR1cm4gdC52aXNpdFRyYW5zaXRpb24oZSxuKTtjYXNlIDI6cmV0dXJuIHQudmlzaXRTZXF1ZW5jZShlLG4pO2Nhc2UgMzpyZXR1cm4gdC52aXNpdEdyb3VwKGUsbik7Y2FzZSA0OnJldHVybiB0LnZpc2l0QW5pbWF0ZShlLG4pO2Nhc2UgNTpyZXR1cm4gdC52aXNpdEtleWZyYW1lcyhlLG4pO2Nhc2UgNjpyZXR1cm4gdC52aXNpdFN0eWxlKGUsbik7Y2FzZSA4OnJldHVybiB0LnZpc2l0UmVmZXJlbmNlKGUsbik7Y2FzZSA5OnJldHVybiB0LnZpc2l0QW5pbWF0ZUNoaWxkKGUsbik7Y2FzZSAxMDpyZXR1cm4gdC52aXNpdEFuaW1hdGVSZWYoZSxuKTtjYXNlIDExOnJldHVybiB0LnZpc2l0UXVlcnkoZSxuKTtjYXNlIDEyOnJldHVybiB0LnZpc2l0U3RhZ2dlcihlLG4pO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gcmVzb2x2ZSBhbmltYXRpb24gbWV0YWRhdGEgbm9kZSAjJHtlLnR5cGV9YCl9fWZ1bmN0aW9uIHRQKHQsZSl7cmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQpW2VdfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jb25zdCBlUD0iKiI7ZnVuY3Rpb24gblAodCxlKXtjb25zdCBuPVtdO3JldHVybiJzdHJpbmciPT10eXBlb2YgdD90LnNwbGl0KC9ccyosXHMqLykuZm9yRWFjaCgodD0+KGZ1bmN0aW9uIG8odCxlLG4pe2lmKCI6Ij09dFswXSl7Y29uc3Qgbz0oZnVuY3Rpb24gbyh0LGUpe3N3aXRjaCh0KXtjYXNlIjplbnRlciI6cmV0dXJuInZvaWQgPT4gKiI7Y2FzZSI6bGVhdmUiOnJldHVybiIqID0+IHZvaWQiO2Nhc2UiOmluY3JlbWVudCI6cmV0dXJuKHQsZSk9PnBhcnNlRmxvYXQoZSk+cGFyc2VGbG9hdCh0KTtjYXNlIjpkZWNyZW1lbnQiOnJldHVybih0LGUpPT5wYXJzZUZsb2F0KGUpPHBhcnNlRmxvYXQodCk7ZGVmYXVsdDpyZXR1cm4gZS5wdXNoKGBUaGUgdHJhbnNpdGlvbiBhbGlhcyB2YWx1ZSAiJHt0fSIgaXMgbm90IHN1cHBvcnRlZGApLCIqID0+ICoifX0pKHQsbik7aWYoImZ1bmN0aW9uIj09dHlwZW9mIG8pcmV0dXJuIHZvaWQgZS5wdXNoKG8pO3Q9b31jb25zdCBpPXQubWF0Y2goL14oXCp8Wy1cd10rKVxzKig8P1s9LV0+KVxzKihcKnxbLVx3XSspJC8pO2lmKG51bGw9PWl8fGkubGVuZ3RoPDQpcmV0dXJuIG4ucHVzaChgVGhlIHByb3ZpZGVkIHRyYW5zaXRpb24gZXhwcmVzc2lvbiAiJHt0fSIgaXMgbm90IHN1cHBvcnRlZGApLGU7Y29uc3QgYT1pWzFdLHI9aVsyXSxzPWlbM107ZS5wdXNoKGFQKGEscykpLCI8IiE9clswXXx8YT09ZVAmJnM9PWVQfHxlLnB1c2goYVAocyxhKSl9KSh0LG4sZSkpKTpuLnB1c2godCksbn1jb25zdCBvUD1uZXcgU2V0KFsidHJ1ZSIsIjEiXSksaVA9bmV3IFNldChbImZhbHNlIiwiMCJdKTtmdW5jdGlvbiBhUCh0LGUpe2NvbnN0IG49b1AuaGFzKHQpfHxpUC5oYXModCksbz1vUC5oYXMoZSl8fGlQLmhhcyhlKTtyZXR1cm4oaSxhKT0+e2xldCByPXQ9PWVQfHx0PT1pLHM9ZT09ZVB8fGU9PWE7cmV0dXJuIXImJm4mJiJib29sZWFuIj09dHlwZW9mIGkmJihyPWk/b1AuaGFzKHQpOmlQLmhhcyh0KSksIXMmJm8mJiJib29sZWFuIj09dHlwZW9mIGEmJihzPWE/b1AuaGFzKGUpOmlQLmhhcyhlKSksciYmc319Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NvbnN0IHJQPW5ldyBSZWdFeHAoInMqOnNlbGZzKiw/IiwiZyIpO2Z1bmN0aW9uIHNQKHQsZSxuKXtyZXR1cm4gbmV3IGxQKHQpLmJ1aWxkKGUsbil9Y2xhc3MgbFB7Y29uc3RydWN0b3IodCl7dGhpcy5fZHJpdmVyPXR9YnVpbGQodCxlKXtjb25zdCBuPW5ldyBjUChlKTtyZXR1cm4gdGhpcy5fcmVzZXRDb250ZXh0U3R5bGVUaW1pbmdTdGF0ZShuKSwkTyh0aGlzLFdPKHQpLG4pfV9yZXNldENvbnRleHRTdHlsZVRpbWluZ1N0YXRlKHQpe3QuY3VycmVudFF1ZXJ5U2VsZWN0b3I9IiIsdC5jb2xsZWN0ZWRTdHlsZXM9e30sdC5jb2xsZWN0ZWRTdHlsZXNbIiJdPXt9LHQuY3VycmVudFRpbWU9MH12aXNpdFRyaWdnZXIodCxlKXtsZXQgbj1lLnF1ZXJ5Q291bnQ9MCxvPWUuZGVwQ291bnQ9MDtjb25zdCBpPVtdLGE9W107cmV0dXJuIkAiPT10Lm5hbWUuY2hhckF0KDApJiZlLmVycm9ycy5wdXNoKCJhbmltYXRpb24gdHJpZ2dlcnMgY2Fubm90IGJlIHByZWZpeGVkIHdpdGggYW4gYEBgIHNpZ24gKGUuZy4gdHJpZ2dlcignQGZvbycsIFsuLi5dKSkiKSx0LmRlZmluaXRpb25zLmZvckVhY2goKHQ9PntpZih0aGlzLl9yZXNldENvbnRleHRTdHlsZVRpbWluZ1N0YXRlKGUpLDA9PXQudHlwZSl7Y29uc3Qgbj10LG89bi5uYW1lO28udG9TdHJpbmcoKS5zcGxpdCgvXHMqLFxzKi8pLmZvckVhY2goKHQ9PntuLm5hbWU9dCxpLnB1c2godGhpcy52aXNpdFN0YXRlKG4sZSkpfSkpLG4ubmFtZT1vfWVsc2UgaWYoMT09dC50eXBlKXtjb25zdCBpPXRoaXMudmlzaXRUcmFuc2l0aW9uKHQsZSk7bis9aS5xdWVyeUNvdW50LG8rPWkuZGVwQ291bnQsYS5wdXNoKGkpfWVsc2UgZS5lcnJvcnMucHVzaCgib25seSBzdGF0ZSgpIGFuZCB0cmFuc2l0aW9uKCkgZGVmaW5pdGlvbnMgY2FuIHNpdCBpbnNpZGUgb2YgYSB0cmlnZ2VyKCkiKX0pKSx7dHlwZTo3LG5hbWU6dC5uYW1lLHN0YXRlczppLHRyYW5zaXRpb25zOmEscXVlcnlDb3VudDpuLGRlcENvdW50Om8sb3B0aW9uczpudWxsfX12aXNpdFN0YXRlKHQsZSl7Y29uc3Qgbj10aGlzLnZpc2l0U3R5bGUodC5zdHlsZXMsZSksbz10Lm9wdGlvbnMmJnQub3B0aW9ucy5wYXJhbXN8fG51bGw7aWYobi5jb250YWluc0R5bmFtaWNTdHlsZXMpe2NvbnN0IGk9bmV3IFNldCxhPW98fHt9O2lmKG4uc3R5bGVzLmZvckVhY2goKHQ9PntpZihkUCh0KSl7Y29uc3QgZT10O09iamVjdC5rZXlzKGUpLmZvckVhY2goKHQ9PntZTyhlW3RdKS5mb3JFYWNoKCh0PT57YS5oYXNPd25Qcm9wZXJ0eSh0KXx8aS5hZGQodCl9KSl9KSl9fSkpLGkuc2l6ZSl7Y29uc3Qgbj1aTyhpLnZhbHVlcygpKTtlLmVycm9ycy5wdXNoKGBzdGF0ZSgiJHt0Lm5hbWV9IiwgLi4uKSBtdXN0IGRlZmluZSBkZWZhdWx0IHZhbHVlcyBmb3IgYWxsIHRoZSBmb2xsb3dpbmcgc3R5bGUgc3Vic3RpdHV0aW9uczogJHtuLmpvaW4oIiwgIil9YCl9fXJldHVybnt0eXBlOjAsbmFtZTp0Lm5hbWUsc3R5bGU6bixvcHRpb25zOm8/e3BhcmFtczpvfTpudWxsfX12aXNpdFRyYW5zaXRpb24odCxlKXtlLnF1ZXJ5Q291bnQ9MCxlLmRlcENvdW50PTA7Y29uc3Qgbj0kTyh0aGlzLFdPKHQuYW5pbWF0aW9uKSxlKTtyZXR1cm57dHlwZToxLG1hdGNoZXJzOm5QKHQuZXhwcixlLmVycm9ycyksYW5pbWF0aW9uOm4scXVlcnlDb3VudDplLnF1ZXJ5Q291bnQsZGVwQ291bnQ6ZS5kZXBDb3VudCxvcHRpb25zOnBQKHQub3B0aW9ucyl9fXZpc2l0U2VxdWVuY2UodCxlKXtyZXR1cm57dHlwZToyLHN0ZXBzOnQuc3RlcHMubWFwKCh0PT4kTyh0aGlzLHQsZSkpKSxvcHRpb25zOnBQKHQub3B0aW9ucyl9fXZpc2l0R3JvdXAodCxlKXtjb25zdCBuPWUuY3VycmVudFRpbWU7bGV0IG89MDtjb25zdCBpPXQuc3RlcHMubWFwKCh0PT57ZS5jdXJyZW50VGltZT1uO2NvbnN0IGk9JE8odGhpcyx0LGUpO3JldHVybiBvPU1hdGgubWF4KG8sZS5jdXJyZW50VGltZSksaX0pKTtyZXR1cm4gZS5jdXJyZW50VGltZT1vLHt0eXBlOjMsc3RlcHM6aSxvcHRpb25zOnBQKHQub3B0aW9ucyl9fXZpc2l0QW5pbWF0ZSh0LGUpe2NvbnN0IG49KGZ1bmN0aW9uIG8odCxlKXtsZXQgbj1udWxsO2lmKHQuaGFzT3duUHJvcGVydHkoImR1cmF0aW9uIikpbj10O2Vsc2UgaWYoIm51bWJlciI9PXR5cGVvZiB0KXJldHVybiBtUChITyh0LGUpLmR1cmF0aW9uLDAsIiIpO2NvbnN0IG89dDtpZihvLnNwbGl0KC9ccysvKS5zb21lKCh0PT4ieyI9PXQuY2hhckF0KDApJiYieyI9PXQuY2hhckF0KDEpKSkpe2NvbnN0IHQ9bVAoMCwwLCIiKTtyZXR1cm4gdC5keW5hbWljPSEwLHQuc3RyVmFsdWU9byx0fXJldHVybiBuPW58fEhPKG8sZSksbVAobi5kdXJhdGlvbixuLmRlbGF5LG4uZWFzaW5nKX0pKHQudGltaW5ncyxlLmVycm9ycyk7bGV0IGk7ZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bjtsZXQgYT10LnN0eWxlcz90LnN0eWxlczokeCh7fSk7aWYoNT09YS50eXBlKWk9dGhpcy52aXNpdEtleWZyYW1lcyhhLGUpO2Vsc2V7bGV0IG89dC5zdHlsZXMsYT0hMTtpZighbyl7YT0hMDtjb25zdCB0PXt9O24uZWFzaW5nJiYodC5lYXNpbmc9bi5lYXNpbmcpLG89JHgodCl9ZS5jdXJyZW50VGltZSs9bi5kdXJhdGlvbituLmRlbGF5O2NvbnN0IHI9dGhpcy52aXNpdFN0eWxlKG8sZSk7ci5pc0VtcHR5U3RlcD1hLGk9cn1yZXR1cm4gZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bnVsbCx7dHlwZTo0LHRpbWluZ3M6bixzdHlsZTppLG9wdGlvbnM6bnVsbH19dmlzaXRTdHlsZSh0LGUpe2NvbnN0IG49dGhpcy5fbWFrZVN0eWxlQXN0KHQsZSk7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlU3R5bGVBc3QobixlKSxufV9tYWtlU3R5bGVBc3QodCxlKXtjb25zdCBuPVtdO0FycmF5LmlzQXJyYXkodC5zdHlsZXMpP3Quc3R5bGVzLmZvckVhY2goKHQ9Pnsic3RyaW5nIj09dHlwZW9mIHQ/dD09WHg/bi5wdXNoKHQpOmUuZXJyb3JzLnB1c2goYFRoZSBwcm92aWRlZCBzdHlsZSBzdHJpbmcgdmFsdWUgJHt0fSBpcyBub3QgYWxsb3dlZC5gKTpuLnB1c2godCl9KSk6bi5wdXNoKHQuc3R5bGVzKTtsZXQgbz0hMSxpPW51bGw7cmV0dXJuIG4uZm9yRWFjaCgodD0+e2lmKGRQKHQpKXtjb25zdCBlPXQsbj1lLmVhc2luZztpZihuJiYoaT1uLGRlbGV0ZSBlLmVhc2luZyksIW8pZm9yKGxldCB0IGluIGUpaWYoZVt0XS50b1N0cmluZygpLmluZGV4T2YoInt7Iik+PTApe289ITA7YnJlYWt9fX0pKSx7dHlwZTo2LHN0eWxlczpuLGVhc2luZzppLG9mZnNldDp0Lm9mZnNldCxjb250YWluc0R5bmFtaWNTdHlsZXM6byxvcHRpb25zOm51bGx9fV92YWxpZGF0ZVN0eWxlQXN0KHQsZSl7Y29uc3Qgbj1lLmN1cnJlbnRBbmltYXRlVGltaW5ncztsZXQgbz1lLmN1cnJlbnRUaW1lLGk9ZS5jdXJyZW50VGltZTtuJiZpPjAmJihpLT1uLmR1cmF0aW9uK24uZGVsYXkpLHQuc3R5bGVzLmZvckVhY2goKHQ9Pnsic3RyaW5nIiE9dHlwZW9mIHQmJk9iamVjdC5rZXlzKHQpLmZvckVhY2goKG49PntpZighdGhpcy5fZHJpdmVyLnZhbGlkYXRlU3R5bGVQcm9wZXJ0eShuKSlyZXR1cm4gdm9pZCBlLmVycm9ycy5wdXNoKGBUaGUgcHJvdmlkZWQgYW5pbWF0aW9uIHByb3BlcnR5ICIke259IiBpcyBub3QgYSBzdXBwb3J0ZWQgQ1NTIHByb3BlcnR5IGZvciBhbmltYXRpb25zYCk7Y29uc3QgYT1lLmNvbGxlY3RlZFN0eWxlc1tlLmN1cnJlbnRRdWVyeVNlbGVjdG9yXSxyPWFbbl07bGV0IHM9ITA7ciYmKGkhPW8mJmk+PXIuc3RhcnRUaW1lJiZvPD1yLmVuZFRpbWUmJihlLmVycm9ycy5wdXNoKGBUaGUgQ1NTIHByb3BlcnR5ICIke259IiB0aGF0IGV4aXN0cyBiZXR3ZWVuIHRoZSB0aW1lcyBvZiAiJHtyLnN0YXJ0VGltZX1tcyIgYW5kICIke3IuZW5kVGltZX1tcyIgaXMgYWxzbyBiZWluZyBhbmltYXRlZCBpbiBhIHBhcmFsbGVsIGFuaW1hdGlvbiBiZXR3ZWVuIHRoZSB0aW1lcyBvZiAiJHtpfW1zIiBhbmQgIiR7b31tcyJgKSxzPSExKSxpPXIuc3RhcnRUaW1lKSxzJiYoYVtuXT17c3RhcnRUaW1lOmksZW5kVGltZTpvfSksZS5vcHRpb25zJiYoZnVuY3Rpb24gbCh0LGUsbil7Y29uc3Qgbz1lLnBhcmFtc3x8e30saT1ZTyh0KTtpLmxlbmd0aCYmaS5mb3JFYWNoKCh0PT57by5oYXNPd25Qcm9wZXJ0eSh0KXx8bi5wdXNoKGBVbmFibGUgdG8gcmVzb2x2ZSB0aGUgbG9jYWwgYW5pbWF0aW9uIHBhcmFtICR7dH0gaW4gdGhlIGdpdmVuIGxpc3Qgb2YgdmFsdWVzYCl9KSl9KSh0W25dLGUub3B0aW9ucyxlLmVycm9ycyl9KSl9KSl9dmlzaXRLZXlmcmFtZXModCxlKXtjb25zdCBuPXt0eXBlOjUsc3R5bGVzOltdLG9wdGlvbnM6bnVsbH07aWYoIWUuY3VycmVudEFuaW1hdGVUaW1pbmdzKXJldHVybiBlLmVycm9ycy5wdXNoKCJrZXlmcmFtZXMoKSBtdXN0IGJlIHBsYWNlZCBpbnNpZGUgb2YgYSBjYWxsIHRvIGFuaW1hdGUoKSIpLG47bGV0IG89MDtjb25zdCBpPVtdO2xldCBhPSExLHI9ITEscz0wO2NvbnN0IGw9dC5zdGVwcy5tYXAoKHQ9Pntjb25zdCBuPXRoaXMuX21ha2VTdHlsZUFzdCh0LGUpO2xldCBsPW51bGwhPW4ub2Zmc2V0P24ub2Zmc2V0OihmdW5jdGlvbiBjKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gbnVsbDtsZXQgZT1udWxsO2lmKEFycmF5LmlzQXJyYXkodCkpdC5mb3JFYWNoKCh0PT57aWYoZFAodCkmJnQuaGFzT3duUHJvcGVydHkoIm9mZnNldCIpKXtjb25zdCBuPXQ7ZT1wYXJzZUZsb2F0KG4ub2Zmc2V0KSxkZWxldGUgbi5vZmZzZXR9fSkpO2Vsc2UgaWYoZFAodCkmJnQuaGFzT3duUHJvcGVydHkoIm9mZnNldCIpKXtjb25zdCBuPXQ7ZT1wYXJzZUZsb2F0KG4ub2Zmc2V0KSxkZWxldGUgbi5vZmZzZXR9cmV0dXJuIGV9KShuLnN0eWxlcyksZD0wO3JldHVybiBudWxsIT1sJiYobysrLGQ9bi5vZmZzZXQ9bCkscj1yfHxkPDB8fGQ+MSxhPWF8fGQ8cyxzPWQsaS5wdXNoKGQpLG59KSk7ciYmZS5lcnJvcnMucHVzaCgiUGxlYXNlIGVuc3VyZSB0aGF0IGFsbCBrZXlmcmFtZSBvZmZzZXRzIGFyZSBiZXR3ZWVuIDAgYW5kIDEiKSxhJiZlLmVycm9ycy5wdXNoKCJQbGVhc2UgZW5zdXJlIHRoYXQgYWxsIGtleWZyYW1lIG9mZnNldHMgYXJlIGluIG9yZGVyIik7Y29uc3QgYz10LnN0ZXBzLmxlbmd0aDtsZXQgZD0wO28+MCYmbzxjP2UuZXJyb3JzLnB1c2goIk5vdCBhbGwgc3R5bGUoKSBzdGVwcyB3aXRoaW4gdGhlIGRlY2xhcmVkIGtleWZyYW1lcygpIGNvbnRhaW4gb2Zmc2V0cyIpOjA9PW8mJihkPTEvKGMtMSkpO2NvbnN0IHA9Yy0xLG09ZS5jdXJyZW50VGltZSx1PWUuY3VycmVudEFuaW1hdGVUaW1pbmdzLGY9dS5kdXJhdGlvbjtyZXR1cm4gbC5mb3JFYWNoKCgodCxvKT0+e2NvbnN0IGE9ZD4wP289PXA/MTpkKm86aVtvXSxyPWEqZjtlLmN1cnJlbnRUaW1lPW0rdS5kZWxheStyLHUuZHVyYXRpb249cix0aGlzLl92YWxpZGF0ZVN0eWxlQXN0KHQsZSksdC5vZmZzZXQ9YSxuLnN0eWxlcy5wdXNoKHQpfSkpLG59dmlzaXRSZWZlcmVuY2UodCxlKXtyZXR1cm57dHlwZTo4LGFuaW1hdGlvbjokTyh0aGlzLFdPKHQuYW5pbWF0aW9uKSxlKSxvcHRpb25zOnBQKHQub3B0aW9ucyl9fXZpc2l0QW5pbWF0ZUNoaWxkKHQsZSl7cmV0dXJuIGUuZGVwQ291bnQrKyx7dHlwZTo5LG9wdGlvbnM6cFAodC5vcHRpb25zKX19dmlzaXRBbmltYXRlUmVmKHQsZSl7cmV0dXJue3R5cGU6MTAsYW5pbWF0aW9uOnRoaXMudmlzaXRSZWZlcmVuY2UodC5hbmltYXRpb24sZSksb3B0aW9uczpwUCh0Lm9wdGlvbnMpfX12aXNpdFF1ZXJ5KHQsZSl7Y29uc3Qgbj1lLmN1cnJlbnRRdWVyeVNlbGVjdG9yLG89dC5vcHRpb25zfHx7fTtlLnF1ZXJ5Q291bnQrKyxlLmN1cnJlbnRRdWVyeT10O2NvbnN0W2ksYV09KGZ1bmN0aW9uIHIodCl7Y29uc3QgZT0hIXQuc3BsaXQoL1xzKixccyovKS5maW5kKCh0PT4iOnNlbGYiPT10KSk7cmV0dXJuIGUmJih0PXQucmVwbGFjZShyUCwiIikpLFt0PXQucmVwbGFjZSgvQFwqL2csUk8pLnJlcGxhY2UoL0BcdysvZywodD0+Ii5uZy10cmlnZ2VyLSIrdC5zdWJzdHIoMSkpKS5yZXBsYWNlKC86YW5pbWF0aW5nL2csTk8pLGVdfSkodC5zZWxlY3Rvcik7ZS5jdXJyZW50UXVlcnlTZWxlY3Rvcj1uLmxlbmd0aD9uKyIgIitpOmksZk8oZS5jb2xsZWN0ZWRTdHlsZXMsZS5jdXJyZW50UXVlcnlTZWxlY3Rvcix7fSk7Y29uc3Qgcz0kTyh0aGlzLFdPKHQuYW5pbWF0aW9uKSxlKTtyZXR1cm4gZS5jdXJyZW50UXVlcnk9bnVsbCxlLmN1cnJlbnRRdWVyeVNlbGVjdG9yPW4se3R5cGU6MTEsc2VsZWN0b3I6aSxsaW1pdDpvLmxpbWl0fHwwLG9wdGlvbmFsOiEhby5vcHRpb25hbCxpbmNsdWRlU2VsZjphLGFuaW1hdGlvbjpzLG9yaWdpbmFsU2VsZWN0b3I6dC5zZWxlY3RvcixvcHRpb25zOnBQKHQub3B0aW9ucyl9fXZpc2l0U3RhZ2dlcih0LGUpe2UuY3VycmVudFF1ZXJ5fHxlLmVycm9ycy5wdXNoKCJzdGFnZ2VyKCkgY2FuIG9ubHkgYmUgdXNlZCBpbnNpZGUgb2YgcXVlcnkoKSIpO2NvbnN0IG49ImZ1bGwiPT09dC50aW1pbmdzP3tkdXJhdGlvbjowLGRlbGF5OjAsZWFzaW5nOiJmdWxsIn06SE8odC50aW1pbmdzLGUuZXJyb3JzLCEwKTtyZXR1cm57dHlwZToxMixhbmltYXRpb246JE8odGhpcyxXTyh0LmFuaW1hdGlvbiksZSksdGltaW5nczpuLG9wdGlvbnM6bnVsbH19fWNsYXNzIGNQe2NvbnN0cnVjdG9yKHQpe3RoaXMuZXJyb3JzPXQsdGhpcy5xdWVyeUNvdW50PTAsdGhpcy5kZXBDb3VudD0wLHRoaXMuY3VycmVudFRyYW5zaXRpb249bnVsbCx0aGlzLmN1cnJlbnRRdWVyeT1udWxsLHRoaXMuY3VycmVudFF1ZXJ5U2VsZWN0b3I9bnVsbCx0aGlzLmN1cnJlbnRBbmltYXRlVGltaW5ncz1udWxsLHRoaXMuY3VycmVudFRpbWU9MCx0aGlzLmNvbGxlY3RlZFN0eWxlcz17fSx0aGlzLm9wdGlvbnM9bnVsbH19ZnVuY3Rpb24gZFAodCl7cmV0dXJuIUFycmF5LmlzQXJyYXkodCkmJiJvYmplY3QiPT10eXBlb2YgdH1mdW5jdGlvbiBwUCh0KXtyZXR1cm4gdD8odD1GTyh0KSkucGFyYW1zJiYodC5wYXJhbXM9KGZ1bmN0aW9uIGUodCl7cmV0dXJuIHQ/Rk8odCk6bnVsbH0pKHQucGFyYW1zKSk6dD17fSx0fWZ1bmN0aW9uIG1QKHQsZSxuKXtyZXR1cm57ZHVyYXRpb246dCxkZWxheTplLGVhc2luZzpufX1mdW5jdGlvbiB1UCh0LGUsbixvLGksYSxyPW51bGwscz0hMSl7cmV0dXJue3R5cGU6MSxlbGVtZW50OnQsa2V5ZnJhbWVzOmUscHJlU3R5bGVQcm9wczpuLHBvc3RTdHlsZVByb3BzOm8sZHVyYXRpb246aSxkZWxheTphLHRvdGFsVGltZTppK2EsZWFzaW5nOnIsc3ViVGltZWxpbmU6c319Y2xhc3MgZlB7Y29uc3RydWN0b3IoKXt0aGlzLl9tYXA9bmV3IE1hcH1jb25zdW1lKHQpe2xldCBlPXRoaXMuX21hcC5nZXQodCk7cmV0dXJuIGU/dGhpcy5fbWFwLmRlbGV0ZSh0KTplPVtdLGV9YXBwZW5kKHQsZSl7bGV0IG49dGhpcy5fbWFwLmdldCh0KTtufHx0aGlzLl9tYXAuc2V0KHQsbj1bXSksbi5wdXNoKC4uLmUpfWhhcyh0KXtyZXR1cm4gdGhpcy5fbWFwLmhhcyh0KX1jbGVhcigpe3RoaXMuX21hcC5jbGVhcigpfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY29uc3QgZ1A9bmV3IFJlZ0V4cCgiOmVudGVyIiwiZyIpLGhQPW5ldyBSZWdFeHAoIjpsZWF2ZSIsImciKTtmdW5jdGlvbiBiUCh0LGUsbixvLGksYT17fSxyPXt9LHMsbCxjPVtdKXtyZXR1cm4obmV3IHlQKS5idWlsZEtleWZyYW1lcyh0LGUsbixvLGksYSxyLHMsbCxjKX1jbGFzcyB5UHtidWlsZEtleWZyYW1lcyh0LGUsbixvLGksYSxyLHMsbCxjPVtdKXtsPWx8fG5ldyBmUDtjb25zdCBkPW5ldyBDUCh0LGUsbCxvLGksYyxbXSk7ZC5vcHRpb25zPXMsZC5jdXJyZW50VGltZWxpbmUuc2V0U3R5bGVzKFthXSxudWxsLGQuZXJyb3JzLHMpLCRPKHRoaXMsbixkKTtjb25zdCBwPWQudGltZWxpbmVzLmZpbHRlcigodD0+dC5jb250YWluc0FuaW1hdGlvbigpKSk7aWYocC5sZW5ndGgmJk9iamVjdC5rZXlzKHIpLmxlbmd0aCl7Y29uc3QgdD1wW3AubGVuZ3RoLTFdO3QuYWxsb3dPbmx5VGltZWxpbmVTdHlsZXMoKXx8dC5zZXRTdHlsZXMoW3JdLG51bGwsZC5lcnJvcnMscyl9cmV0dXJuIHAubGVuZ3RoP3AubWFwKCh0PT50LmJ1aWxkS2V5ZnJhbWVzKCkpKTpbdVAoZSxbXSxbXSxbXSwwLDAsIiIsITEpXX12aXNpdFRyaWdnZXIodCxlKXt9dmlzaXRTdGF0ZSh0LGUpe312aXNpdFRyYW5zaXRpb24odCxlKXt9dmlzaXRBbmltYXRlQ2hpbGQodCxlKXtjb25zdCBuPWUuc3ViSW5zdHJ1Y3Rpb25zLmNvbnN1bWUoZS5lbGVtZW50KTtpZihuKXtjb25zdCBvPWUuY3JlYXRlU3ViQ29udGV4dCh0Lm9wdGlvbnMpLGk9ZS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUsYT10aGlzLl92aXNpdFN1Ykluc3RydWN0aW9ucyhuLG8sby5vcHRpb25zKTtpIT1hJiZlLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZShhKX1lLnByZXZpb3VzTm9kZT10fXZpc2l0QW5pbWF0ZVJlZih0LGUpe2NvbnN0IG49ZS5jcmVhdGVTdWJDb250ZXh0KHQub3B0aW9ucyk7bi50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoKSx0aGlzLnZpc2l0UmVmZXJlbmNlKHQuYW5pbWF0aW9uLG4pLGUudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKG4uY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lKSxlLnByZXZpb3VzTm9kZT10fV92aXNpdFN1Ykluc3RydWN0aW9ucyh0LGUsbil7bGV0IG89ZS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWU7Y29uc3QgaT1udWxsIT1uLmR1cmF0aW9uP0lPKG4uZHVyYXRpb24pOm51bGwsYT1udWxsIT1uLmRlbGF5P0lPKG4uZGVsYXkpOm51bGw7cmV0dXJuIDAhPT1pJiZ0LmZvckVhY2goKHQ9Pntjb25zdCBuPWUuYXBwZW5kSW5zdHJ1Y3Rpb25Ub1RpbWVsaW5lKHQsaSxhKTtvPU1hdGgubWF4KG8sbi5kdXJhdGlvbituLmRlbGF5KX0pKSxvfXZpc2l0UmVmZXJlbmNlKHQsZSl7ZS51cGRhdGVPcHRpb25zKHQub3B0aW9ucywhMCksJE8odGhpcyx0LmFuaW1hdGlvbixlKSxlLnByZXZpb3VzTm9kZT10fXZpc2l0U2VxdWVuY2UodCxlKXtjb25zdCBuPWUuc3ViQ29udGV4dENvdW50O2xldCBvPWU7Y29uc3QgaT10Lm9wdGlvbnM7aWYoaSYmKGkucGFyYW1zfHxpLmRlbGF5KSYmKG89ZS5jcmVhdGVTdWJDb250ZXh0KGkpLG8udHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKCksbnVsbCE9aS5kZWxheSkpezY9PW8ucHJldmlvdXNOb2RlLnR5cGUmJihvLmN1cnJlbnRUaW1lbGluZS5zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKSxvLnByZXZpb3VzTm9kZT1fUCk7Y29uc3QgdD1JTyhpLmRlbGF5KTtvLmRlbGF5TmV4dFN0ZXAodCl9dC5zdGVwcy5sZW5ndGgmJih0LnN0ZXBzLmZvckVhY2goKHQ9PiRPKHRoaXMsdCxvKSkpLG8uY3VycmVudFRpbWVsaW5lLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpLG8uc3ViQ29udGV4dENvdW50Pm4mJm8udHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKCkpLGUucHJldmlvdXNOb2RlPXR9dmlzaXRHcm91cCh0LGUpe2NvbnN0IG49W107bGV0IG89ZS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWU7Y29uc3QgaT10Lm9wdGlvbnMmJnQub3B0aW9ucy5kZWxheT9JTyh0Lm9wdGlvbnMuZGVsYXkpOjA7dC5zdGVwcy5mb3JFYWNoKChhPT57Y29uc3Qgcj1lLmNyZWF0ZVN1YkNvbnRleHQodC5vcHRpb25zKTtpJiZyLmRlbGF5TmV4dFN0ZXAoaSksJE8odGhpcyxhLHIpLG89TWF0aC5tYXgobyxyLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSksbi5wdXNoKHIuY3VycmVudFRpbWVsaW5lKX0pKSxuLmZvckVhY2goKHQ9PmUuY3VycmVudFRpbWVsaW5lLm1lcmdlVGltZWxpbmVDb2xsZWN0ZWRTdHlsZXModCkpKSxlLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZShvKSxlLnByZXZpb3VzTm9kZT10fV92aXNpdFRpbWluZyh0LGUpe2lmKHQuZHluYW1pYyl7Y29uc3Qgbj10LnN0clZhbHVlO3JldHVybiBITyhlLnBhcmFtcz9xTyhuLGUucGFyYW1zLGUuZXJyb3JzKTpuLGUuZXJyb3JzKX1yZXR1cm57ZHVyYXRpb246dC5kdXJhdGlvbixkZWxheTp0LmRlbGF5LGVhc2luZzp0LmVhc2luZ319dmlzaXRBbmltYXRlKHQsZSl7Y29uc3Qgbj1lLmN1cnJlbnRBbmltYXRlVGltaW5ncz10aGlzLl92aXNpdFRpbWluZyh0LnRpbWluZ3MsZSksbz1lLmN1cnJlbnRUaW1lbGluZTtuLmRlbGF5JiYoZS5pbmNyZW1lbnRUaW1lKG4uZGVsYXkpLG8uc25hcHNob3RDdXJyZW50U3R5bGVzKCkpO2NvbnN0IGk9dC5zdHlsZTs1PT1pLnR5cGU/dGhpcy52aXNpdEtleWZyYW1lcyhpLGUpOihlLmluY3JlbWVudFRpbWUobi5kdXJhdGlvbiksdGhpcy52aXNpdFN0eWxlKGksZSksby5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSksZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bnVsbCxlLnByZXZpb3VzTm9kZT10fXZpc2l0U3R5bGUodCxlKXtjb25zdCBuPWUuY3VycmVudFRpbWVsaW5lLG89ZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M7IW8mJm4uZ2V0Q3VycmVudFN0eWxlUHJvcGVydGllcygpLmxlbmd0aCYmbi5mb3J3YXJkRnJhbWUoKTtjb25zdCBpPW8mJm8uZWFzaW5nfHx0LmVhc2luZzt0LmlzRW1wdHlTdGVwP24uYXBwbHlFbXB0eVN0ZXAoaSk6bi5zZXRTdHlsZXModC5zdHlsZXMsaSxlLmVycm9ycyxlLm9wdGlvbnMpLGUucHJldmlvdXNOb2RlPXR9dmlzaXRLZXlmcmFtZXModCxlKXtjb25zdCBuPWUuY3VycmVudEFuaW1hdGVUaW1pbmdzLG89ZS5jdXJyZW50VGltZWxpbmUuZHVyYXRpb24saT1uLmR1cmF0aW9uLGE9ZS5jcmVhdGVTdWJDb250ZXh0KCkuY3VycmVudFRpbWVsaW5lO2EuZWFzaW5nPW4uZWFzaW5nLHQuc3R5bGVzLmZvckVhY2goKHQ9PnthLmZvcndhcmRUaW1lKCh0Lm9mZnNldHx8MCkqaSksYS5zZXRTdHlsZXModC5zdHlsZXMsdC5lYXNpbmcsZS5lcnJvcnMsZS5vcHRpb25zKSxhLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpfSkpLGUuY3VycmVudFRpbWVsaW5lLm1lcmdlVGltZWxpbmVDb2xsZWN0ZWRTdHlsZXMoYSksZS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUobytpKSxlLnByZXZpb3VzTm9kZT10fXZpc2l0UXVlcnkodCxlKXtjb25zdCBuPWUuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lLG89dC5vcHRpb25zfHx7fSxpPW8uZGVsYXk/SU8oby5kZWxheSk6MDtpJiYoNj09PWUucHJldmlvdXNOb2RlLnR5cGV8fDA9PW4mJmUuY3VycmVudFRpbWVsaW5lLmdldEN1cnJlbnRTdHlsZVByb3BlcnRpZXMoKS5sZW5ndGgpJiYoZS5jdXJyZW50VGltZWxpbmUuc25hcHNob3RDdXJyZW50U3R5bGVzKCksZS5wcmV2aW91c05vZGU9X1ApO2xldCBhPW47Y29uc3Qgcj1lLmludm9rZVF1ZXJ5KHQuc2VsZWN0b3IsdC5vcmlnaW5hbFNlbGVjdG9yLHQubGltaXQsdC5pbmNsdWRlU2VsZiwhIW8ub3B0aW9uYWwsZS5lcnJvcnMpO2UuY3VycmVudFF1ZXJ5VG90YWw9ci5sZW5ndGg7bGV0IHM9bnVsbDtyLmZvckVhY2goKChuLG8pPT57ZS5jdXJyZW50UXVlcnlJbmRleD1vO2NvbnN0IHI9ZS5jcmVhdGVTdWJDb250ZXh0KHQub3B0aW9ucyxuKTtpJiZyLmRlbGF5TmV4dFN0ZXAoaSksbj09PWUuZWxlbWVudCYmKHM9ci5jdXJyZW50VGltZWxpbmUpLCRPKHRoaXMsdC5hbmltYXRpb24sciksci5jdXJyZW50VGltZWxpbmUuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCksYT1NYXRoLm1heChhLHIuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lKX0pKSxlLmN1cnJlbnRRdWVyeUluZGV4PTAsZS5jdXJyZW50UXVlcnlUb3RhbD0wLGUudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKGEpLHMmJihlLmN1cnJlbnRUaW1lbGluZS5tZXJnZVRpbWVsaW5lQ29sbGVjdGVkU3R5bGVzKHMpLGUuY3VycmVudFRpbWVsaW5lLnNuYXBzaG90Q3VycmVudFN0eWxlcygpKSxlLnByZXZpb3VzTm9kZT10fXZpc2l0U3RhZ2dlcih0LGUpe2NvbnN0IG49ZS5wYXJlbnRDb250ZXh0LG89ZS5jdXJyZW50VGltZWxpbmUsaT10LnRpbWluZ3MsYT1NYXRoLmFicyhpLmR1cmF0aW9uKSxyPWEqKGUuY3VycmVudFF1ZXJ5VG90YWwtMSk7bGV0IHM9YSplLmN1cnJlbnRRdWVyeUluZGV4O3N3aXRjaChpLmR1cmF0aW9uPDA/InJldmVyc2UiOmkuZWFzaW5nKXtjYXNlInJldmVyc2UiOnM9ci1zO2JyZWFrO2Nhc2UiZnVsbCI6cz1uLmN1cnJlbnRTdGFnZ2VyVGltZX1jb25zdCBsPWUuY3VycmVudFRpbWVsaW5lO3MmJmwuZGVsYXlOZXh0U3RlcChzKTtjb25zdCBjPWwuY3VycmVudFRpbWU7JE8odGhpcyx0LmFuaW1hdGlvbixlKSxlLnByZXZpb3VzTm9kZT10LG4uY3VycmVudFN0YWdnZXJUaW1lPW8uY3VycmVudFRpbWUtYysoby5zdGFydFRpbWUtbi5jdXJyZW50VGltZWxpbmUuc3RhcnRUaW1lKX19Y29uc3QgX1A9e307Y2xhc3MgQ1B7Y29uc3RydWN0b3IodCxlLG4sbyxpLGEscixzKXt0aGlzLl9kcml2ZXI9dCx0aGlzLmVsZW1lbnQ9ZSx0aGlzLnN1Ykluc3RydWN0aW9ucz1uLHRoaXMuX2VudGVyQ2xhc3NOYW1lPW8sdGhpcy5fbGVhdmVDbGFzc05hbWU9aSx0aGlzLmVycm9ycz1hLHRoaXMudGltZWxpbmVzPXIsdGhpcy5wYXJlbnRDb250ZXh0PW51bGwsdGhpcy5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bnVsbCx0aGlzLnByZXZpb3VzTm9kZT1fUCx0aGlzLnN1YkNvbnRleHRDb3VudD0wLHRoaXMub3B0aW9ucz17fSx0aGlzLmN1cnJlbnRRdWVyeUluZGV4PTAsdGhpcy5jdXJyZW50UXVlcnlUb3RhbD0wLHRoaXMuY3VycmVudFN0YWdnZXJUaW1lPTAsdGhpcy5jdXJyZW50VGltZWxpbmU9c3x8bmV3IE1QKHRoaXMuX2RyaXZlcixlLDApLHIucHVzaCh0aGlzLmN1cnJlbnRUaW1lbGluZSl9Z2V0IHBhcmFtcygpe3JldHVybiB0aGlzLm9wdGlvbnMucGFyYW1zfXVwZGF0ZU9wdGlvbnModCxlKXtpZighdClyZXR1cm47Y29uc3Qgbj10O2xldCBvPXRoaXMub3B0aW9ucztudWxsIT1uLmR1cmF0aW9uJiYoby5kdXJhdGlvbj1JTyhuLmR1cmF0aW9uKSksbnVsbCE9bi5kZWxheSYmKG8uZGVsYXk9SU8obi5kZWxheSkpO2NvbnN0IGk9bi5wYXJhbXM7aWYoaSl7bGV0IHQ9by5wYXJhbXM7dHx8KHQ9dGhpcy5vcHRpb25zLnBhcmFtcz17fSksT2JqZWN0LmtleXMoaSkuZm9yRWFjaCgobj0+e2UmJnQuaGFzT3duUHJvcGVydHkobil8fCh0W25dPXFPKGlbbl0sdCx0aGlzLmVycm9ycykpfSkpfX1fY29weU9wdGlvbnMoKXtjb25zdCB0PXt9O2lmKHRoaXMub3B0aW9ucyl7Y29uc3QgZT10aGlzLm9wdGlvbnMucGFyYW1zO2lmKGUpe2NvbnN0IG49dC5wYXJhbXM9e307T2JqZWN0LmtleXMoZSkuZm9yRWFjaCgodD0+e25bdF09ZVt0XX0pKX19cmV0dXJuIHR9Y3JlYXRlU3ViQ29udGV4dCh0PW51bGwsZSxuKXtjb25zdCBvPWV8fHRoaXMuZWxlbWVudCxpPW5ldyBDUCh0aGlzLl9kcml2ZXIsbyx0aGlzLnN1Ykluc3RydWN0aW9ucyx0aGlzLl9lbnRlckNsYXNzTmFtZSx0aGlzLl9sZWF2ZUNsYXNzTmFtZSx0aGlzLmVycm9ycyx0aGlzLnRpbWVsaW5lcyx0aGlzLmN1cnJlbnRUaW1lbGluZS5mb3JrKG8sbnx8MCkpO3JldHVybiBpLnByZXZpb3VzTm9kZT10aGlzLnByZXZpb3VzTm9kZSxpLmN1cnJlbnRBbmltYXRlVGltaW5ncz10aGlzLmN1cnJlbnRBbmltYXRlVGltaW5ncyxpLm9wdGlvbnM9dGhpcy5fY29weU9wdGlvbnMoKSxpLnVwZGF0ZU9wdGlvbnModCksaS5jdXJyZW50UXVlcnlJbmRleD10aGlzLmN1cnJlbnRRdWVyeUluZGV4LGkuY3VycmVudFF1ZXJ5VG90YWw9dGhpcy5jdXJyZW50UXVlcnlUb3RhbCxpLnBhcmVudENvbnRleHQ9dGhpcyx0aGlzLnN1YkNvbnRleHRDb3VudCsrLGl9dHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKHQpe3JldHVybiB0aGlzLnByZXZpb3VzTm9kZT1fUCx0aGlzLmN1cnJlbnRUaW1lbGluZT10aGlzLmN1cnJlbnRUaW1lbGluZS5mb3JrKHRoaXMuZWxlbWVudCx0KSx0aGlzLnRpbWVsaW5lcy5wdXNoKHRoaXMuY3VycmVudFRpbWVsaW5lKSx0aGlzLmN1cnJlbnRUaW1lbGluZX1hcHBlbmRJbnN0cnVjdGlvblRvVGltZWxpbmUodCxlLG4pe2NvbnN0IG89e2R1cmF0aW9uOm51bGwhPWU/ZTp0LmR1cmF0aW9uLGRlbGF5OnRoaXMuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lKyhudWxsIT1uP246MCkrdC5kZWxheSxlYXNpbmc6IiJ9LGk9bmV3IHZQKHRoaXMuX2RyaXZlcix0LmVsZW1lbnQsdC5rZXlmcmFtZXMsdC5wcmVTdHlsZVByb3BzLHQucG9zdFN0eWxlUHJvcHMsbyx0LnN0cmV0Y2hTdGFydGluZ0tleWZyYW1lKTtyZXR1cm4gdGhpcy50aW1lbGluZXMucHVzaChpKSxvfWluY3JlbWVudFRpbWUodCl7dGhpcy5jdXJyZW50VGltZWxpbmUuZm9yd2FyZFRpbWUodGhpcy5jdXJyZW50VGltZWxpbmUuZHVyYXRpb24rdCl9ZGVsYXlOZXh0U3RlcCh0KXt0PjAmJnRoaXMuY3VycmVudFRpbWVsaW5lLmRlbGF5TmV4dFN0ZXAodCl9aW52b2tlUXVlcnkodCxlLG4sbyxpLGEpe2xldCByPVtdO2lmKG8mJnIucHVzaCh0aGlzLmVsZW1lbnQpLHQubGVuZ3RoPjApe3Q9KHQ9dC5yZXBsYWNlKGdQLCIuIit0aGlzLl9lbnRlckNsYXNzTmFtZSkpLnJlcGxhY2UoaFAsIi4iK3RoaXMuX2xlYXZlQ2xhc3NOYW1lKTtsZXQgZT10aGlzLl9kcml2ZXIucXVlcnkodGhpcy5lbGVtZW50LHQsMSE9bik7MCE9PW4mJihlPW48MD9lLnNsaWNlKGUubGVuZ3RoK24sZS5sZW5ndGgpOmUuc2xpY2UoMCxuKSksci5wdXNoKC4uLmUpfXJldHVybiBpfHwwIT1yLmxlbmd0aHx8YS5wdXNoKGBcYHF1ZXJ5KCIke2V9IilcYCByZXR1cm5lZCB6ZXJvIGVsZW1lbnRzLiAoVXNlIFxgcXVlcnkoIiR7ZX0iLCB7IG9wdGlvbmFsOiB0cnVlIH0pXGAgaWYgeW91IHdpc2ggdG8gYWxsb3cgdGhpcy4pYCkscn19Y2xhc3MgTVB7Y29uc3RydWN0b3IodCxlLG4sbyl7dGhpcy5fZHJpdmVyPXQsdGhpcy5lbGVtZW50PWUsdGhpcy5zdGFydFRpbWU9bix0aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXA9byx0aGlzLmR1cmF0aW9uPTAsdGhpcy5fcHJldmlvdXNLZXlmcmFtZT17fSx0aGlzLl9jdXJyZW50S2V5ZnJhbWU9e30sdGhpcy5fa2V5ZnJhbWVzPW5ldyBNYXAsdGhpcy5fc3R5bGVTdW1tYXJ5PXt9LHRoaXMuX3BlbmRpbmdTdHlsZXM9e30sdGhpcy5fYmFja0ZpbGw9e30sdGhpcy5fY3VycmVudEVtcHR5U3RlcEtleWZyYW1lPW51bGwsdGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwfHwodGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwPW5ldyBNYXApLHRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXM9T2JqZWN0LmNyZWF0ZSh0aGlzLl9iYWNrRmlsbCx7fSksdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXM9dGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwLmdldChlKSx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlc3x8KHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzPXRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMsdGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwLnNldChlLHRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMpKSx0aGlzLl9sb2FkS2V5ZnJhbWUoKX1jb250YWluc0FuaW1hdGlvbigpe3N3aXRjaCh0aGlzLl9rZXlmcmFtZXMuc2l6ZSl7Y2FzZSAwOnJldHVybiExO2Nhc2UgMTpyZXR1cm4gdGhpcy5nZXRDdXJyZW50U3R5bGVQcm9wZXJ0aWVzKCkubGVuZ3RoPjA7ZGVmYXVsdDpyZXR1cm4hMH19Z2V0Q3VycmVudFN0eWxlUHJvcGVydGllcygpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLl9jdXJyZW50S2V5ZnJhbWUpfWdldCBjdXJyZW50VGltZSgpe3JldHVybiB0aGlzLnN0YXJ0VGltZSt0aGlzLmR1cmF0aW9ufWRlbGF5TmV4dFN0ZXAodCl7Y29uc3QgZT0xPT10aGlzLl9rZXlmcmFtZXMuc2l6ZSYmT2JqZWN0LmtleXModGhpcy5fcGVuZGluZ1N0eWxlcykubGVuZ3RoO3RoaXMuZHVyYXRpb258fGU/KHRoaXMuZm9yd2FyZFRpbWUodGhpcy5jdXJyZW50VGltZSt0KSxlJiZ0aGlzLnNuYXBzaG90Q3VycmVudFN0eWxlcygpKTp0aGlzLnN0YXJ0VGltZSs9dH1mb3JrKHQsZSl7cmV0dXJuIHRoaXMuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCksbmV3IE1QKHRoaXMuX2RyaXZlcix0LGV8fHRoaXMuY3VycmVudFRpbWUsdGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwKX1fbG9hZEtleWZyYW1lKCl7dGhpcy5fY3VycmVudEtleWZyYW1lJiYodGhpcy5fcHJldmlvdXNLZXlmcmFtZT10aGlzLl9jdXJyZW50S2V5ZnJhbWUpLHRoaXMuX2N1cnJlbnRLZXlmcmFtZT10aGlzLl9rZXlmcmFtZXMuZ2V0KHRoaXMuZHVyYXRpb24pLHRoaXMuX2N1cnJlbnRLZXlmcmFtZXx8KHRoaXMuX2N1cnJlbnRLZXlmcmFtZT1PYmplY3QuY3JlYXRlKHRoaXMuX2JhY2tGaWxsLHt9KSx0aGlzLl9rZXlmcmFtZXMuc2V0KHRoaXMuZHVyYXRpb24sdGhpcy5fY3VycmVudEtleWZyYW1lKSl9Zm9yd2FyZEZyYW1lKCl7dGhpcy5kdXJhdGlvbis9MSx0aGlzLl9sb2FkS2V5ZnJhbWUoKX1mb3J3YXJkVGltZSh0KXt0aGlzLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpLHRoaXMuZHVyYXRpb249dCx0aGlzLl9sb2FkS2V5ZnJhbWUoKX1fdXBkYXRlU3R5bGUodCxlKXt0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzW3RdPWUsdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXNbdF09ZSx0aGlzLl9zdHlsZVN1bW1hcnlbdF09e3RpbWU6dGhpcy5jdXJyZW50VGltZSx2YWx1ZTplfX1hbGxvd09ubHlUaW1lbGluZVN0eWxlcygpe3JldHVybiB0aGlzLl9jdXJyZW50RW1wdHlTdGVwS2V5ZnJhbWUhPT10aGlzLl9jdXJyZW50S2V5ZnJhbWV9YXBwbHlFbXB0eVN0ZXAodCl7dCYmKHRoaXMuX3ByZXZpb3VzS2V5ZnJhbWUuZWFzaW5nPXQpLE9iamVjdC5rZXlzKHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzKS5mb3JFYWNoKCh0PT57dGhpcy5fYmFja0ZpbGxbdF09dGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXNbdF18fFh4LHRoaXMuX2N1cnJlbnRLZXlmcmFtZVt0XT1YeH0pKSx0aGlzLl9jdXJyZW50RW1wdHlTdGVwS2V5ZnJhbWU9dGhpcy5fY3VycmVudEtleWZyYW1lfXNldFN0eWxlcyh0LGUsbixvKXtlJiYodGhpcy5fcHJldmlvdXNLZXlmcmFtZS5lYXNpbmc9ZSk7Y29uc3QgaT1vJiZvLnBhcmFtc3x8e30sYT0oZnVuY3Rpb24gcih0LGUpe2NvbnN0IG49e307bGV0IG87cmV0dXJuIHQuZm9yRWFjaCgodD0+eyIqIj09PXQ/KG89b3x8T2JqZWN0LmtleXMoZSksby5mb3JFYWNoKCh0PT57blt0XT1YeH0pKSk6TE8odCwhMSxuKX0pKSxufQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8pKHQsdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXMpO09iamVjdC5rZXlzKGEpLmZvckVhY2goKHQ9Pntjb25zdCBlPXFPKGFbdF0saSxuKTt0aGlzLl9wZW5kaW5nU3R5bGVzW3RdPWUsdGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcy5oYXNPd25Qcm9wZXJ0eSh0KXx8KHRoaXMuX2JhY2tGaWxsW3RdPXRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzLmhhc093blByb3BlcnR5KHQpP3RoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzW3RdOlh4KSx0aGlzLl91cGRhdGVTdHlsZSh0LGUpfSkpfWFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpe2NvbnN0IHQ9dGhpcy5fcGVuZGluZ1N0eWxlcyxlPU9iamVjdC5rZXlzKHQpOzAhPWUubGVuZ3RoJiYodGhpcy5fcGVuZGluZ1N0eWxlcz17fSxlLmZvckVhY2goKGU9Pnt0aGlzLl9jdXJyZW50S2V5ZnJhbWVbZV09dFtlXX0pKSxPYmplY3Qua2V5cyh0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzKS5mb3JFYWNoKCh0PT57dGhpcy5fY3VycmVudEtleWZyYW1lLmhhc093blByb3BlcnR5KHQpfHwodGhpcy5fY3VycmVudEtleWZyYW1lW3RdPXRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXNbdF0pfSkpKX1zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKXtPYmplY3Qua2V5cyh0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzKS5mb3JFYWNoKCh0PT57Y29uc3QgZT10aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzW3RdO3RoaXMuX3BlbmRpbmdTdHlsZXNbdF09ZSx0aGlzLl91cGRhdGVTdHlsZSh0LGUpfSkpfWdldEZpbmFsS2V5ZnJhbWUoKXtyZXR1cm4gdGhpcy5fa2V5ZnJhbWVzLmdldCh0aGlzLmR1cmF0aW9uKX1nZXQgcHJvcGVydGllcygpe2NvbnN0IHQ9W107Zm9yKGxldCBlIGluIHRoaXMuX2N1cnJlbnRLZXlmcmFtZSl0LnB1c2goZSk7cmV0dXJuIHR9bWVyZ2VUaW1lbGluZUNvbGxlY3RlZFN0eWxlcyh0KXtPYmplY3Qua2V5cyh0Ll9zdHlsZVN1bW1hcnkpLmZvckVhY2goKGU9Pntjb25zdCBuPXRoaXMuX3N0eWxlU3VtbWFyeVtlXSxvPXQuX3N0eWxlU3VtbWFyeVtlXTsoIW58fG8udGltZT5uLnRpbWUpJiZ0aGlzLl91cGRhdGVTdHlsZShlLG8udmFsdWUpfSkpfWJ1aWxkS2V5ZnJhbWVzKCl7dGhpcy5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKTtjb25zdCB0PW5ldyBTZXQsZT1uZXcgU2V0LG49MT09PXRoaXMuX2tleWZyYW1lcy5zaXplJiYwPT09dGhpcy5kdXJhdGlvbjtsZXQgbz1bXTt0aGlzLl9rZXlmcmFtZXMuZm9yRWFjaCgoKGksYSk9Pntjb25zdCByPUxPKGksITApO09iamVjdC5rZXlzKHIpLmZvckVhY2goKG49Pntjb25zdCBvPXJbbl07IiEiPT1vP3QuYWRkKG4pOm89PVh4JiZlLmFkZChuKX0pKSxufHwoci5vZmZzZXQ9YS90aGlzLmR1cmF0aW9uKSxvLnB1c2gocil9KSk7Y29uc3QgaT10LnNpemU/Wk8odC52YWx1ZXMoKSk6W10sYT1lLnNpemU/Wk8oZS52YWx1ZXMoKSk6W107aWYobil7Y29uc3QgdD1vWzBdLGU9Rk8odCk7dC5vZmZzZXQ9MCxlLm9mZnNldD0xLG89W3QsZV19cmV0dXJuIHVQKHRoaXMuZWxlbWVudCxvLGksYSx0aGlzLmR1cmF0aW9uLHRoaXMuc3RhcnRUaW1lLHRoaXMuZWFzaW5nLCExKX19Y2xhc3MgdlAgZXh0ZW5kcyBNUHtjb25zdHJ1Y3Rvcih0LGUsbixvLGksYSxyPSExKXtzdXBlcih0LGUsYS5kZWxheSksdGhpcy5lbGVtZW50PWUsdGhpcy5rZXlmcmFtZXM9bix0aGlzLnByZVN0eWxlUHJvcHM9byx0aGlzLnBvc3RTdHlsZVByb3BzPWksdGhpcy5fc3RyZXRjaFN0YXJ0aW5nS2V5ZnJhbWU9cix0aGlzLnRpbWluZ3M9e2R1cmF0aW9uOmEuZHVyYXRpb24sZGVsYXk6YS5kZWxheSxlYXNpbmc6YS5lYXNpbmd9fWNvbnRhaW5zQW5pbWF0aW9uKCl7cmV0dXJuIHRoaXMua2V5ZnJhbWVzLmxlbmd0aD4xfWJ1aWxkS2V5ZnJhbWVzKCl7bGV0IHQ9dGhpcy5rZXlmcmFtZXMse2RlbGF5OmUsZHVyYXRpb246bixlYXNpbmc6b309dGhpcy50aW1pbmdzO2lmKHRoaXMuX3N0cmV0Y2hTdGFydGluZ0tleWZyYW1lJiZlKXtjb25zdCBpPVtdLGE9bitlLHI9ZS9hLHM9TE8odFswXSwhMSk7cy5vZmZzZXQ9MCxpLnB1c2gocyk7Y29uc3QgbD1MTyh0WzBdLCExKTtsLm9mZnNldD14UChyKSxpLnB1c2gobCk7Y29uc3QgYz10Lmxlbmd0aC0xO2ZvcihsZXQgbz0xO288PWM7bysrKXtsZXQgcj1MTyh0W29dLCExKTtyLm9mZnNldD14UCgoZStyLm9mZnNldCpuKS9hKSxpLnB1c2gocil9bj1hLGU9MCxvPSIiLHQ9aX1yZXR1cm4gdVAodGhpcy5lbGVtZW50LHQsdGhpcy5wcmVTdHlsZVByb3BzLHRoaXMucG9zdFN0eWxlUHJvcHMsbixlLG8sITApfX1mdW5jdGlvbiB4UCh0LGU9Myl7Y29uc3Qgbj1NYXRoLnBvdygxMCxlLTEpO3JldHVybiBNYXRoLnJvdW5kKHQqbikvbn1jbGFzcyBPUHt9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NsYXNzIFBQIGV4dGVuZHMgT1B7bm9ybWFsaXplUHJvcGVydHlOYW1lKHQsZSl7cmV0dXJuIEtPKHQpfW5vcm1hbGl6ZVN0eWxlVmFsdWUodCxlLG4sbyl7bGV0IGk9IiI7Y29uc3QgYT1uLnRvU3RyaW5nKCkudHJpbSgpO2lmKHdQW2VdJiYwIT09biYmIjAiIT09bilpZigibnVtYmVyIj09dHlwZW9mIG4paT0icHgiO2Vsc2V7Y29uc3QgZT1uLm1hdGNoKC9eWystXT9bXGRcLl0rKFthLXpdKikkLyk7ZSYmMD09ZVsxXS5sZW5ndGgmJm8ucHVzaChgUGxlYXNlIHByb3ZpZGUgYSBDU1MgdW5pdCB2YWx1ZSBmb3IgJHt0fToke259YCl9cmV0dXJuIGEraX19Y29uc3Qgd1A9KGZ1bmN0aW9uIGtQKHQpe2NvbnN0IGU9e307cmV0dXJuIHQuZm9yRWFjaCgodD0+ZVt0XT0hMCkpLGV9KSgid2lkdGgsaGVpZ2h0LG1pbldpZHRoLG1pbkhlaWdodCxtYXhXaWR0aCxtYXhIZWlnaHQsbGVmdCx0b3AsYm90dG9tLHJpZ2h0LGZvbnRTaXplLG91dGxpbmVXaWR0aCxvdXRsaW5lT2Zmc2V0LHBhZGRpbmdUb3AscGFkZGluZ0xlZnQscGFkZGluZ0JvdHRvbSxwYWRkaW5nUmlnaHQsbWFyZ2luVG9wLG1hcmdpbkxlZnQsbWFyZ2luQm90dG9tLG1hcmdpblJpZ2h0LGJvcmRlclJhZGl1cyxib3JkZXJXaWR0aCxib3JkZXJUb3BXaWR0aCxib3JkZXJMZWZ0V2lkdGgsYm9yZGVyUmlnaHRXaWR0aCxib3JkZXJCb3R0b21XaWR0aCx0ZXh0SW5kZW50LHBlcnNwZWN0aXZlIi5zcGxpdCgiLCIpKTtmdW5jdGlvbiBTUCh0LGUsbixvLGksYSxyLHMsbCxjLGQscCxtKXtyZXR1cm57dHlwZTowLGVsZW1lbnQ6dCx0cmlnZ2VyTmFtZTplLGlzUmVtb3ZhbFRyYW5zaXRpb246aSxmcm9tU3RhdGU6bixmcm9tU3R5bGVzOmEsdG9TdGF0ZTpvLHRvU3R5bGVzOnIsdGltZWxpbmVzOnMscXVlcmllZEVsZW1lbnRzOmwscHJlU3R5bGVQcm9wczpjLHBvc3RTdHlsZVByb3BzOmQsdG90YWxUaW1lOnAsZXJyb3JzOm19fWNvbnN0IERQPXt9O2NsYXNzIEVQe2NvbnN0cnVjdG9yKHQsZSxuKXt0aGlzLl90cmlnZ2VyTmFtZT10LHRoaXMuYXN0PWUsdGhpcy5fc3RhdGVTdHlsZXM9bn1tYXRjaCh0LGUsbixvKXtyZXR1cm4oZnVuY3Rpb24gaSh0LGUsbixvLGEpe3JldHVybiB0LnNvbWUoKHQ9PnQoZSxuLG8sYSkpKX0pKHRoaXMuYXN0Lm1hdGNoZXJzLHQsZSxuLG8pfWJ1aWxkU3R5bGVzKHQsZSxuKXtjb25zdCBvPXRoaXMuX3N0YXRlU3R5bGVzWyIqIl0saT10aGlzLl9zdGF0ZVN0eWxlc1t0XSxhPW8/by5idWlsZFN0eWxlcyhlLG4pOnt9O3JldHVybiBpP2kuYnVpbGRTdHlsZXMoZSxuKTphfWJ1aWxkKHQsZSxuLG8saSxhLHIscyxsLGMpe2NvbnN0IGQ9W10scD10aGlzLmFzdC5vcHRpb25zJiZ0aGlzLmFzdC5vcHRpb25zLnBhcmFtc3x8RFAsbT10aGlzLmJ1aWxkU3R5bGVzKG4sciYmci5wYXJhbXN8fERQLGQpLHU9cyYmcy5wYXJhbXN8fERQLGY9dGhpcy5idWlsZFN0eWxlcyhvLHUsZCksZz1uZXcgU2V0LGg9bmV3IE1hcCxiPW5ldyBNYXAseT0idm9pZCI9PT1vLF89e3BhcmFtczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30scCksdSl9LEM9Yz9bXTpiUCh0LGUsdGhpcy5hc3QuYW5pbWF0aW9uLGksYSxtLGYsXyxsLGQpO2xldCBNPTA7aWYoQy5mb3JFYWNoKCh0PT57TT1NYXRoLm1heCh0LmR1cmF0aW9uK3QuZGVsYXksTSl9KSksZC5sZW5ndGgpcmV0dXJuIFNQKGUsdGhpcy5fdHJpZ2dlck5hbWUsbixvLHksbSxmLFtdLFtdLGgsYixNLGQpO0MuZm9yRWFjaCgodD0+e2NvbnN0IG49dC5lbGVtZW50LG89Zk8oaCxuLHt9KTt0LnByZVN0eWxlUHJvcHMuZm9yRWFjaCgodD0+b1t0XT0hMCkpO2NvbnN0IGk9Zk8oYixuLHt9KTt0LnBvc3RTdHlsZVByb3BzLmZvckVhY2goKHQ9PmlbdF09ITApKSxuIT09ZSYmZy5hZGQobil9KSk7Y29uc3Qgdj1aTyhnLnZhbHVlcygpKTtyZXR1cm4gU1AoZSx0aGlzLl90cmlnZ2VyTmFtZSxuLG8seSxtLGYsQyx2LGgsYixNKX19Y2xhc3MgQVB7Y29uc3RydWN0b3IodCxlKXt0aGlzLnN0eWxlcz10LHRoaXMuZGVmYXVsdFBhcmFtcz1lfWJ1aWxkU3R5bGVzKHQsZSl7Y29uc3Qgbj17fSxvPUZPKHRoaXMuZGVmYXVsdFBhcmFtcyk7cmV0dXJuIE9iamVjdC5rZXlzKHQpLmZvckVhY2goKGU9Pntjb25zdCBuPXRbZV07bnVsbCE9biYmKG9bZV09bil9KSksdGhpcy5zdHlsZXMuc3R5bGVzLmZvckVhY2goKHQ9PntpZigic3RyaW5nIiE9dHlwZW9mIHQpe2NvbnN0IGk9dDtPYmplY3Qua2V5cyhpKS5mb3JFYWNoKCh0PT57bGV0IGE9aVt0XTthLmxlbmd0aD4xJiYoYT1xTyhhLG8sZSkpLG5bdF09YX0pKX19KSksbn19Y2xhc3MgUlB7Y29uc3RydWN0b3IodCxlKXt0aGlzLm5hbWU9dCx0aGlzLmFzdD1lLHRoaXMudHJhbnNpdGlvbkZhY3Rvcmllcz1bXSx0aGlzLnN0YXRlcz17fSxlLnN0YXRlcy5mb3JFYWNoKCh0PT57dGhpcy5zdGF0ZXNbdC5uYW1lXT1uZXcgQVAodC5zdHlsZSx0Lm9wdGlvbnMmJnQub3B0aW9ucy5wYXJhbXN8fHt9KX0pKSxUUCh0aGlzLnN0YXRlcywidHJ1ZSIsIjEiKSxUUCh0aGlzLnN0YXRlcywiZmFsc2UiLCIwIiksZS50cmFuc2l0aW9ucy5mb3JFYWNoKChlPT57dGhpcy50cmFuc2l0aW9uRmFjdG9yaWVzLnB1c2gobmV3IEVQKHQsZSx0aGlzLnN0YXRlcykpfSkpLHRoaXMuZmFsbGJhY2tUcmFuc2l0aW9uPShmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIG5ldyBFUCh0LHt0eXBlOjEsYW5pbWF0aW9uOnt0eXBlOjIsc3RlcHM6W10sb3B0aW9uczpudWxsfSxtYXRjaGVyczpbKHQsZSk9PiEwXSxvcHRpb25zOm51bGwscXVlcnlDb3VudDowLGRlcENvdW50OjB9LGUpfSkodCx0aGlzLnN0YXRlcyl9Z2V0IGNvbnRhaW5zUXVlcmllcygpe3JldHVybiB0aGlzLmFzdC5xdWVyeUNvdW50PjB9bWF0Y2hUcmFuc2l0aW9uKHQsZSxuLG8pe3JldHVybiB0aGlzLnRyYW5zaXRpb25GYWN0b3JpZXMuZmluZCgoaT0+aS5tYXRjaCh0LGUsbixvKSkpfHxudWxsfW1hdGNoU3R5bGVzKHQsZSxuKXtyZXR1cm4gdGhpcy5mYWxsYmFja1RyYW5zaXRpb24uYnVpbGRTdHlsZXModCxlLG4pfX1mdW5jdGlvbiBUUCh0LGUsbil7dC5oYXNPd25Qcm9wZXJ0eShlKT90Lmhhc093blByb3BlcnR5KG4pfHwodFtuXT10W2VdKTp0Lmhhc093blByb3BlcnR5KG4pJiYodFtlXT10W25dKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY29uc3QgTlA9bmV3IGZQO2NsYXNzIElQe2NvbnN0cnVjdG9yKHQsZSxuKXt0aGlzLmJvZHlOb2RlPXQsdGhpcy5fZHJpdmVyPWUsdGhpcy5fbm9ybWFsaXplcj1uLHRoaXMuX2FuaW1hdGlvbnM9e30sdGhpcy5fcGxheWVyc0J5SWQ9e30sdGhpcy5wbGF5ZXJzPVtdfXJlZ2lzdGVyKHQsZSl7Y29uc3Qgbj1bXSxvPXNQKHRoaXMuX2RyaXZlcixlLG4pO2lmKG4ubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGJ1aWxkIHRoZSBhbmltYXRpb24gZHVlIHRvIHRoZSBmb2xsb3dpbmcgZXJyb3JzOiAke24uam9pbigiXG4iKX1gKTt0aGlzLl9hbmltYXRpb25zW3RdPW99X2J1aWxkUGxheWVyKHQsZSxuKXtjb25zdCBvPXQuZWxlbWVudCxpPWRPKDAsdGhpcy5fbm9ybWFsaXplciwwLHQua2V5ZnJhbWVzLGUsbik7cmV0dXJuIHRoaXMuX2RyaXZlci5hbmltYXRlKG8saSx0LmR1cmF0aW9uLHQuZGVsYXksdC5lYXNpbmcsW10sITApfWNyZWF0ZSh0LGUsbj17fSl7Y29uc3Qgbz1bXSxpPXRoaXMuX2FuaW1hdGlvbnNbdF07bGV0IGE7Y29uc3Qgcj1uZXcgTWFwO2lmKGk/KGE9YlAodGhpcy5fZHJpdmVyLGUsaSxETyxFTyx7fSx7fSxuLE5QLG8pLGEuZm9yRWFjaCgodD0+e2NvbnN0IGU9Zk8ocix0LmVsZW1lbnQse30pO3QucG9zdFN0eWxlUHJvcHMuZm9yRWFjaCgodD0+ZVt0XT1udWxsKSl9KSkpOihvLnB1c2goIlRoZSByZXF1ZXN0ZWQgYW5pbWF0aW9uIGRvZXNuJ3QgZXhpc3Qgb3IgaGFzIGFscmVhZHkgYmVlbiBkZXN0cm95ZWQiKSxhPVtdKSxvLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBjcmVhdGUgdGhlIGFuaW1hdGlvbiBkdWUgdG8gdGhlIGZvbGxvd2luZyBlcnJvcnM6ICR7by5qb2luKCJcbiIpfWApO3IuZm9yRWFjaCgoKHQsZSk9PntPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChuPT57dFtuXT10aGlzLl9kcml2ZXIuY29tcHV0ZVN0eWxlKGUsbixYeCl9KSl9KSk7Y29uc3Qgcz1jTyhhLm1hcCgodD0+e2NvbnN0IGU9ci5nZXQodC5lbGVtZW50KTtyZXR1cm4gdGhpcy5fYnVpbGRQbGF5ZXIodCx7fSxlKX0pKSk7cmV0dXJuIHRoaXMuX3BsYXllcnNCeUlkW3RdPXMscy5vbkRlc3Ryb3koKCgpPT50aGlzLmRlc3Ryb3kodCkpKSx0aGlzLnBsYXllcnMucHVzaChzKSxzfWRlc3Ryb3kodCl7Y29uc3QgZT10aGlzLl9nZXRQbGF5ZXIodCk7ZS5kZXN0cm95KCksZGVsZXRlIHRoaXMuX3BsYXllcnNCeUlkW3RdO2NvbnN0IG49dGhpcy5wbGF5ZXJzLmluZGV4T2YoZSk7bj49MCYmdGhpcy5wbGF5ZXJzLnNwbGljZShuLDEpfV9nZXRQbGF5ZXIodCl7Y29uc3QgZT10aGlzLl9wbGF5ZXJzQnlJZFt0XTtpZighZSl0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBmaW5kIHRoZSB0aW1lbGluZSBwbGF5ZXIgcmVmZXJlbmNlZCBieSAke3R9YCk7cmV0dXJuIGV9bGlzdGVuKHQsZSxuLG8pe2NvbnN0IGk9dU8oZSwiIiwiIiwiIik7cmV0dXJuIHBPKHRoaXMuX2dldFBsYXllcih0KSxuLGksbyksKCk9Pnt9fWNvbW1hbmQodCxlLG4sbyl7aWYoInJlZ2lzdGVyIj09bilyZXR1cm4gdm9pZCB0aGlzLnJlZ2lzdGVyKHQsb1swXSk7aWYoImNyZWF0ZSI9PW4pcmV0dXJuIHZvaWQgdGhpcy5jcmVhdGUodCxlLG9bMF18fHt9KTtjb25zdCBpPXRoaXMuX2dldFBsYXllcih0KTtzd2l0Y2gobil7Y2FzZSJwbGF5IjppLnBsYXkoKTticmVhaztjYXNlInBhdXNlIjppLnBhdXNlKCk7YnJlYWs7Y2FzZSJyZXNldCI6aS5yZXNldCgpO2JyZWFrO2Nhc2UicmVzdGFydCI6aS5yZXN0YXJ0KCk7YnJlYWs7Y2FzZSJmaW5pc2giOmkuZmluaXNoKCk7YnJlYWs7Y2FzZSJpbml0IjppLmluaXQoKTticmVhaztjYXNlInNldFBvc2l0aW9uIjppLnNldFBvc2l0aW9uKHBhcnNlRmxvYXQob1swXSkpO2JyZWFrO2Nhc2UiZGVzdHJveSI6dGhpcy5kZXN0cm95KHQpfX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NvbnN0IHpQPSJuZy1hbmltYXRlLXF1ZXVlZCIsSFA9Im5nLWFuaW1hdGUtZGlzYWJsZWQiLEZQPSIubmctYW5pbWF0ZS1kaXNhYmxlZCIsTFA9W10sQlA9e25hbWVzcGFjZUlkOiIiLHNldEZvclJlbW92YWw6ITEsc2V0Rm9yTW92ZTohMSxoYXNBbmltYXRpb246ITEscmVtb3ZlZEJlZm9yZVF1ZXJpZWQ6ITF9LFZQPXtuYW1lc3BhY2VJZDoiIixzZXRGb3JNb3ZlOiExLHNldEZvclJlbW92YWw6ITEsaGFzQW5pbWF0aW9uOiExLHJlbW92ZWRCZWZvcmVRdWVyaWVkOiEwfTtjbGFzcyBqUHtjb25zdHJ1Y3Rvcih0LGU9IiIpe3RoaXMubmFtZXNwYWNlSWQ9ZTtjb25zdCBuPXQmJnQuaGFzT3duUHJvcGVydHkoInZhbHVlIik7aWYodGhpcy52YWx1ZT0oZnVuY3Rpb24gbyh0KXtyZXR1cm4gbnVsbCE9dD90Om51bGx9KShuP3QudmFsdWU6dCksbil7Y29uc3QgZT1GTyh0KTtkZWxldGUgZS52YWx1ZSx0aGlzLm9wdGlvbnM9ZX1lbHNlIHRoaXMub3B0aW9ucz17fTt0aGlzLm9wdGlvbnMucGFyYW1zfHwodGhpcy5vcHRpb25zLnBhcmFtcz17fSl9Z2V0IHBhcmFtcygpe3JldHVybiB0aGlzLm9wdGlvbnMucGFyYW1zfWFic29yYk9wdGlvbnModCl7Y29uc3QgZT10LnBhcmFtcztpZihlKXtjb25zdCB0PXRoaXMub3B0aW9ucy5wYXJhbXM7T2JqZWN0LmtleXMoZSkuZm9yRWFjaCgobj0+e251bGw9PXRbbl0mJih0W25dPWVbbl0pfSkpfX19Y29uc3QgVVA9InZvaWQiLFdQPW5ldyBqUChVUCk7Y2xhc3MgR1B7Y29uc3RydWN0b3IodCxlLG4pe3RoaXMuaWQ9dCx0aGlzLmhvc3RFbGVtZW50PWUsdGhpcy5fZW5naW5lPW4sdGhpcy5wbGF5ZXJzPVtdLHRoaXMuX3RyaWdnZXJzPXt9LHRoaXMuX3F1ZXVlPVtdLHRoaXMuX2VsZW1lbnRMaXN0ZW5lcnM9bmV3IE1hcCx0aGlzLl9ob3N0Q2xhc3NOYW1lPSJuZy10bnMtIit0LFFQKGUsdGhpcy5faG9zdENsYXNzTmFtZSl9bGlzdGVuKHQsZSxuLG8pe2lmKCF0aGlzLl90cmlnZ2Vycy5oYXNPd25Qcm9wZXJ0eShlKSl0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBsaXN0ZW4gb24gdGhlIGFuaW1hdGlvbiB0cmlnZ2VyIGV2ZW50ICIke259IiBiZWNhdXNlIHRoZSBhbmltYXRpb24gdHJpZ2dlciAiJHtlfSIgZG9lc24ndCBleGlzdCFgKTtpZihudWxsPT1ufHwwPT1uLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBsaXN0ZW4gb24gdGhlIGFuaW1hdGlvbiB0cmlnZ2VyICIke2V9IiBiZWNhdXNlIHRoZSBwcm92aWRlZCBldmVudCBpcyB1bmRlZmluZWQhYCk7aWYoIShmdW5jdGlvbiBpKHQpe3JldHVybiJzdGFydCI9PXR8fCJkb25lIj09dH0pKG4pKXRocm93IG5ldyBFcnJvcihgVGhlIHByb3ZpZGVkIGFuaW1hdGlvbiB0cmlnZ2VyIGV2ZW50ICIke259IiBmb3IgdGhlIGFuaW1hdGlvbiB0cmlnZ2VyICIke2V9IiBpcyBub3Qgc3VwcG9ydGVkIWApO2NvbnN0IGE9Zk8odGhpcy5fZWxlbWVudExpc3RlbmVycyx0LFtdKSxyPXtuYW1lOmUscGhhc2U6bixjYWxsYmFjazpvfTthLnB1c2gocik7Y29uc3Qgcz1mTyh0aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LHQse30pO3JldHVybiBzLmhhc093blByb3BlcnR5KGUpfHwoUVAodCxBTyksUVAodCwibmctdHJpZ2dlci0iK2UpLHNbZV09V1ApLCgpPT57dGhpcy5fZW5naW5lLmFmdGVyRmx1c2goKCgpPT57Y29uc3QgdD1hLmluZGV4T2Yocik7dD49MCYmYS5zcGxpY2UodCwxKSx0aGlzLl90cmlnZ2Vyc1tlXXx8ZGVsZXRlIHNbZV19KSl9fXJlZ2lzdGVyKHQsZSl7cmV0dXJuIXRoaXMuX3RyaWdnZXJzW3RdJiYodGhpcy5fdHJpZ2dlcnNbdF09ZSwhMCl9X2dldFRyaWdnZXIodCl7Y29uc3QgZT10aGlzLl90cmlnZ2Vyc1t0XTtpZighZSl0aHJvdyBuZXcgRXJyb3IoYFRoZSBwcm92aWRlZCBhbmltYXRpb24gdHJpZ2dlciAiJHt0fSIgaGFzIG5vdCBiZWVuIHJlZ2lzdGVyZWQhYCk7cmV0dXJuIGV9dHJpZ2dlcih0LGUsbixvPSEwKXtjb25zdCBpPXRoaXMuX2dldFRyaWdnZXIoZSksYT1uZXcgcVAodGhpcy5pZCxlLHQpO2xldCByPXRoaXMuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQuZ2V0KHQpO3J8fChRUCh0LEFPKSxRUCh0LCJuZy10cmlnZ2VyLSIrZSksdGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5zZXQodCxyPXt9KSk7bGV0IHM9cltlXTtjb25zdCBsPW5ldyBqUChuLHRoaXMuaWQpO2lmKCEobiYmbi5oYXNPd25Qcm9wZXJ0eSgidmFsdWUiKSkmJnMmJmwuYWJzb3JiT3B0aW9ucyhzLm9wdGlvbnMpLHJbZV09bCxzfHwocz1XUCksbC52YWx1ZSE9PVVQJiZzLnZhbHVlPT09bC52YWx1ZSl7aWYoIShmdW5jdGlvbiBjKHQsZSl7Y29uc3Qgbj1PYmplY3Qua2V5cyh0KSxvPU9iamVjdC5rZXlzKGUpO2lmKG4ubGVuZ3RoIT1vLmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IG89MDtvPG4ubGVuZ3RoO28rKyl7Y29uc3QgaT1uW29dO2lmKCFlLmhhc093blByb3BlcnR5KGkpfHx0W2ldIT09ZVtpXSlyZXR1cm4hMX1yZXR1cm4hMH0pKHMucGFyYW1zLGwucGFyYW1zKSl7Y29uc3QgZT1bXSxuPWkubWF0Y2hTdHlsZXMocy52YWx1ZSxzLnBhcmFtcyxlKSxvPWkubWF0Y2hTdHlsZXMobC52YWx1ZSxsLnBhcmFtcyxlKTtlLmxlbmd0aD90aGlzLl9lbmdpbmUucmVwb3J0RXJyb3IoZSk6dGhpcy5fZW5naW5lLmFmdGVyRmx1c2goKCgpPT57VU8odCxuKSxqTyh0LG8pfSkpfXJldHVybn1jb25zdCBkPWZPKHRoaXMuX2VuZ2luZS5wbGF5ZXJzQnlFbGVtZW50LHQsW10pO2QuZm9yRWFjaCgodD0+e3QubmFtZXNwYWNlSWQ9PXRoaXMuaWQmJnQudHJpZ2dlck5hbWU9PWUmJnQucXVldWVkJiZ0LmRlc3Ryb3koKX0pKTtsZXQgcD1pLm1hdGNoVHJhbnNpdGlvbihzLnZhbHVlLGwudmFsdWUsdCxsLnBhcmFtcyksbT0hMTtpZighcCl7aWYoIW8pcmV0dXJuO3A9aS5mYWxsYmFja1RyYW5zaXRpb24sbT0hMH1yZXR1cm4gdGhpcy5fZW5naW5lLnRvdGFsUXVldWVkUGxheWVycysrLHRoaXMuX3F1ZXVlLnB1c2goe2VsZW1lbnQ6dCx0cmlnZ2VyTmFtZTplLHRyYW5zaXRpb246cCxmcm9tU3RhdGU6cyx0b1N0YXRlOmwscGxheWVyOmEsaXNGYWxsYmFja1RyYW5zaXRpb246bX0pLG18fChRUCh0LHpQKSxhLm9uU3RhcnQoKCgpPT57JFAodCx6UCl9KSkpLGEub25Eb25lKCgoKT0+e2xldCBlPXRoaXMucGxheWVycy5pbmRleE9mKGEpO2U+PTAmJnRoaXMucGxheWVycy5zcGxpY2UoZSwxKTtjb25zdCBuPXRoaXMuX2VuZ2luZS5wbGF5ZXJzQnlFbGVtZW50LmdldCh0KTtpZihuKXtsZXQgdD1uLmluZGV4T2YoYSk7dD49MCYmbi5zcGxpY2UodCwxKX19KSksdGhpcy5wbGF5ZXJzLnB1c2goYSksZC5wdXNoKGEpLGF9ZGVyZWdpc3Rlcih0KXtkZWxldGUgdGhpcy5fdHJpZ2dlcnNbdF0sdGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5mb3JFYWNoKCgoZSxuKT0+e2RlbGV0ZSBlW3RdfSkpLHRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuZm9yRWFjaCgoKGUsbik9Pnt0aGlzLl9lbGVtZW50TGlzdGVuZXJzLnNldChuLGUuZmlsdGVyKChlPT5lLm5hbWUhPXQpKSl9KSl9Y2xlYXJFbGVtZW50Q2FjaGUodCl7dGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5kZWxldGUodCksdGhpcy5fZWxlbWVudExpc3RlbmVycy5kZWxldGUodCk7Y29uc3QgZT10aGlzLl9lbmdpbmUucGxheWVyc0J5RWxlbWVudC5nZXQodCk7ZSYmKGUuZm9yRWFjaCgodD0+dC5kZXN0cm95KCkpKSx0aGlzLl9lbmdpbmUucGxheWVyc0J5RWxlbWVudC5kZWxldGUodCkpfV9zaWduYWxSZW1vdmFsRm9ySW5uZXJUcmlnZ2Vycyh0LGUpe2NvbnN0IG49dGhpcy5fZW5naW5lLmRyaXZlci5xdWVyeSh0LFJPLCEwKTtuLmZvckVhY2goKHQ9PntpZih0Ll9fbmdfcmVtb3ZlZClyZXR1cm47Y29uc3Qgbj10aGlzLl9lbmdpbmUuZmV0Y2hOYW1lc3BhY2VzQnlFbGVtZW50KHQpO24uc2l6ZT9uLmZvckVhY2goKG49Pm4udHJpZ2dlckxlYXZlQW5pbWF0aW9uKHQsZSwhMSwhMCkpKTp0aGlzLmNsZWFyRWxlbWVudENhY2hlKHQpfSkpLHRoaXMuX2VuZ2luZS5hZnRlckZsdXNoQW5pbWF0aW9uc0RvbmUoKCgpPT5uLmZvckVhY2goKHQ9PnRoaXMuY2xlYXJFbGVtZW50Q2FjaGUodCkpKSkpfXRyaWdnZXJMZWF2ZUFuaW1hdGlvbih0LGUsbixvKXtjb25zdCBpPXRoaXMuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQuZ2V0KHQpO2lmKGkpe2NvbnN0IGE9W107aWYoT2JqZWN0LmtleXMoaSkuZm9yRWFjaCgoZT0+e2lmKHRoaXMuX3RyaWdnZXJzW2VdKXtjb25zdCBuPXRoaXMudHJpZ2dlcih0LGUsVVAsbyk7biYmYS5wdXNoKG4pfX0pKSxhLmxlbmd0aClyZXR1cm4gdGhpcy5fZW5naW5lLm1hcmtFbGVtZW50QXNSZW1vdmVkKHRoaXMuaWQsdCwhMCxlKSxuJiZjTyhhKS5vbkRvbmUoKCgpPT50aGlzLl9lbmdpbmUucHJvY2Vzc0xlYXZlTm9kZSh0KSkpLCEwfXJldHVybiExfXByZXBhcmVMZWF2ZUFuaW1hdGlvbkxpc3RlbmVycyh0KXtjb25zdCBlPXRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuZ2V0KHQpLG49dGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5nZXQodCk7aWYoZSYmbil7Y29uc3Qgbz1uZXcgU2V0O2UuZm9yRWFjaCgoZT0+e2NvbnN0IGk9ZS5uYW1lO2lmKG8uaGFzKGkpKXJldHVybjtvLmFkZChpKTtjb25zdCBhPXRoaXMuX3RyaWdnZXJzW2ldLmZhbGxiYWNrVHJhbnNpdGlvbixyPW5baV18fFdQLHM9bmV3IGpQKFVQKSxsPW5ldyBxUCh0aGlzLmlkLGksdCk7dGhpcy5fZW5naW5lLnRvdGFsUXVldWVkUGxheWVycysrLHRoaXMuX3F1ZXVlLnB1c2goe2VsZW1lbnQ6dCx0cmlnZ2VyTmFtZTppLHRyYW5zaXRpb246YSxmcm9tU3RhdGU6cix0b1N0YXRlOnMscGxheWVyOmwsaXNGYWxsYmFja1RyYW5zaXRpb246ITB9KX0pKX19cmVtb3ZlTm9kZSh0LGUpe2NvbnN0IG49dGhpcy5fZW5naW5lO2lmKHQuY2hpbGRFbGVtZW50Q291bnQmJnRoaXMuX3NpZ25hbFJlbW92YWxGb3JJbm5lclRyaWdnZXJzKHQsZSksdGhpcy50cmlnZ2VyTGVhdmVBbmltYXRpb24odCxlLCEwKSlyZXR1cm47bGV0IG89ITE7aWYobi50b3RhbEFuaW1hdGlvbnMpe2NvbnN0IGU9bi5wbGF5ZXJzLmxlbmd0aD9uLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LmdldCh0KTpbXTtpZihlJiZlLmxlbmd0aClvPSEwO2Vsc2V7bGV0IGU9dDtmb3IoO2U9ZS5wYXJlbnROb2RlOylpZihuLnN0YXRlc0J5RWxlbWVudC5nZXQoZSkpe289ITA7YnJlYWt9fX1pZih0aGlzLnByZXBhcmVMZWF2ZUFuaW1hdGlvbkxpc3RlbmVycyh0KSxvKW4ubWFya0VsZW1lbnRBc1JlbW92ZWQodGhpcy5pZCx0LCExLGUpO2Vsc2V7Y29uc3Qgbz10Ll9fbmdfcmVtb3ZlZDtvJiZvIT09QlB8fChuLmFmdGVyRmx1c2goKCgpPT50aGlzLmNsZWFyRWxlbWVudENhY2hlKHQpKSksbi5kZXN0cm95SW5uZXJBbmltYXRpb25zKHQpLG4uX29uUmVtb3ZhbENvbXBsZXRlKHQsZSkpfX1pbnNlcnROb2RlKHQsZSl7UVAodCx0aGlzLl9ob3N0Q2xhc3NOYW1lKX1kcmFpblF1ZXVlZFRyYW5zaXRpb25zKHQpe2NvbnN0IGU9W107cmV0dXJuIHRoaXMuX3F1ZXVlLmZvckVhY2goKG49Pntjb25zdCBvPW4ucGxheWVyO2lmKG8uZGVzdHJveWVkKXJldHVybjtjb25zdCBpPW4uZWxlbWVudCxhPXRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuZ2V0KGkpO2EmJmEuZm9yRWFjaCgoZT0+e2lmKGUubmFtZT09bi50cmlnZ2VyTmFtZSl7Y29uc3Qgbz11TyhpLG4udHJpZ2dlck5hbWUsbi5mcm9tU3RhdGUudmFsdWUsbi50b1N0YXRlLnZhbHVlKTtvLl9kYXRhPXQscE8obi5wbGF5ZXIsZS5waGFzZSxvLGUuY2FsbGJhY2spfX0pKSxvLm1hcmtlZEZvckRlc3Ryb3k/dGhpcy5fZW5naW5lLmFmdGVyRmx1c2goKCgpPT57by5kZXN0cm95KCl9KSk6ZS5wdXNoKG4pfSkpLHRoaXMuX3F1ZXVlPVtdLGUuc29ydCgoKHQsZSk9Pntjb25zdCBuPXQudHJhbnNpdGlvbi5hc3QuZGVwQ291bnQsbz1lLnRyYW5zaXRpb24uYXN0LmRlcENvdW50O3JldHVybiAwPT1ufHwwPT1vP24tbzp0aGlzLl9lbmdpbmUuZHJpdmVyLmNvbnRhaW5zRWxlbWVudCh0LmVsZW1lbnQsZS5lbGVtZW50KT8xOi0xfSkpfWRlc3Ryb3kodCl7dGhpcy5wbGF5ZXJzLmZvckVhY2goKHQ9PnQuZGVzdHJveSgpKSksdGhpcy5fc2lnbmFsUmVtb3ZhbEZvcklubmVyVHJpZ2dlcnModGhpcy5ob3N0RWxlbWVudCx0KX1lbGVtZW50Q29udGFpbnNEYXRhKHQpe2xldCBlPSExO3JldHVybiB0aGlzLl9lbGVtZW50TGlzdGVuZXJzLmhhcyh0KSYmKGU9ITApLGU9ISF0aGlzLl9xdWV1ZS5maW5kKChlPT5lLmVsZW1lbnQ9PT10KSl8fGUsZX19Y2xhc3MgWVB7Y29uc3RydWN0b3IodCxlLG4pe3RoaXMuYm9keU5vZGU9dCx0aGlzLmRyaXZlcj1lLHRoaXMuX25vcm1hbGl6ZXI9bix0aGlzLnBsYXllcnM9W10sdGhpcy5uZXdIb3N0RWxlbWVudHM9bmV3IE1hcCx0aGlzLnBsYXllcnNCeUVsZW1lbnQ9bmV3IE1hcCx0aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50PW5ldyBNYXAsdGhpcy5zdGF0ZXNCeUVsZW1lbnQ9bmV3IE1hcCx0aGlzLmRpc2FibGVkTm9kZXM9bmV3IFNldCx0aGlzLnRvdGFsQW5pbWF0aW9ucz0wLHRoaXMudG90YWxRdWV1ZWRQbGF5ZXJzPTAsdGhpcy5fbmFtZXNwYWNlTG9va3VwPXt9LHRoaXMuX25hbWVzcGFjZUxpc3Q9W10sdGhpcy5fZmx1c2hGbnM9W10sdGhpcy5fd2hlblF1aWV0Rm5zPVtdLHRoaXMubmFtZXNwYWNlc0J5SG9zdEVsZW1lbnQ9bmV3IE1hcCx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHM9W10sdGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzPVtdLHRoaXMub25SZW1vdmFsQ29tcGxldGU9KHQsZSk9Pnt9fV9vblJlbW92YWxDb21wbGV0ZSh0LGUpe3RoaXMub25SZW1vdmFsQ29tcGxldGUodCxlKX1nZXQgcXVldWVkUGxheWVycygpe2NvbnN0IHQ9W107cmV0dXJuIHRoaXMuX25hbWVzcGFjZUxpc3QuZm9yRWFjaCgoZT0+e2UucGxheWVycy5mb3JFYWNoKChlPT57ZS5xdWV1ZWQmJnQucHVzaChlKX0pKX0pKSx0fWNyZWF0ZU5hbWVzcGFjZSh0LGUpe2NvbnN0IG49bmV3IEdQKHQsZSx0aGlzKTtyZXR1cm4gdGhpcy5ib2R5Tm9kZSYmdGhpcy5kcml2ZXIuY29udGFpbnNFbGVtZW50KHRoaXMuYm9keU5vZGUsZSk/dGhpcy5fYmFsYW5jZU5hbWVzcGFjZUxpc3QobixlKToodGhpcy5uZXdIb3N0RWxlbWVudHMuc2V0KGUsbiksdGhpcy5jb2xsZWN0RW50ZXJFbGVtZW50KGUpKSx0aGlzLl9uYW1lc3BhY2VMb29rdXBbdF09bn1fYmFsYW5jZU5hbWVzcGFjZUxpc3QodCxlKXtjb25zdCBuPXRoaXMuX25hbWVzcGFjZUxpc3QubGVuZ3RoLTE7aWYobj49MCl7bGV0IG89ITE7Zm9yKGxldCBpPW47aT49MDtpLS0paWYodGhpcy5kcml2ZXIuY29udGFpbnNFbGVtZW50KHRoaXMuX25hbWVzcGFjZUxpc3RbaV0uaG9zdEVsZW1lbnQsZSkpe3RoaXMuX25hbWVzcGFjZUxpc3Quc3BsaWNlKGkrMSwwLHQpLG89ITA7YnJlYWt9b3x8dGhpcy5fbmFtZXNwYWNlTGlzdC5zcGxpY2UoMCwwLHQpfWVsc2UgdGhpcy5fbmFtZXNwYWNlTGlzdC5wdXNoKHQpO3JldHVybiB0aGlzLm5hbWVzcGFjZXNCeUhvc3RFbGVtZW50LnNldChlLHQpLHR9cmVnaXN0ZXIodCxlKXtsZXQgbj10aGlzLl9uYW1lc3BhY2VMb29rdXBbdF07cmV0dXJuIG58fChuPXRoaXMuY3JlYXRlTmFtZXNwYWNlKHQsZSkpLG59cmVnaXN0ZXJUcmlnZ2VyKHQsZSxuKXtsZXQgbz10aGlzLl9uYW1lc3BhY2VMb29rdXBbdF07byYmby5yZWdpc3RlcihlLG4pJiZ0aGlzLnRvdGFsQW5pbWF0aW9ucysrfWRlc3Ryb3kodCxlKXtpZighdClyZXR1cm47Y29uc3Qgbj10aGlzLl9mZXRjaE5hbWVzcGFjZSh0KTt0aGlzLmFmdGVyRmx1c2goKCgpPT57dGhpcy5uYW1lc3BhY2VzQnlIb3N0RWxlbWVudC5kZWxldGUobi5ob3N0RWxlbWVudCksZGVsZXRlIHRoaXMuX25hbWVzcGFjZUxvb2t1cFt0XTtjb25zdCBlPXRoaXMuX25hbWVzcGFjZUxpc3QuaW5kZXhPZihuKTtlPj0wJiZ0aGlzLl9uYW1lc3BhY2VMaXN0LnNwbGljZShlLDEpfSkpLHRoaXMuYWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25lKCgoKT0+bi5kZXN0cm95KGUpKSl9X2ZldGNoTmFtZXNwYWNlKHQpe3JldHVybiB0aGlzLl9uYW1lc3BhY2VMb29rdXBbdF19ZmV0Y2hOYW1lc3BhY2VzQnlFbGVtZW50KHQpe2NvbnN0IGU9bmV3IFNldCxuPXRoaXMuc3RhdGVzQnlFbGVtZW50LmdldCh0KTtpZihuKXtjb25zdCB0PU9iamVjdC5rZXlzKG4pO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKXtjb25zdCBpPW5bdFtvXV0ubmFtZXNwYWNlSWQ7aWYoaSl7Y29uc3QgdD10aGlzLl9mZXRjaE5hbWVzcGFjZShpKTt0JiZlLmFkZCh0KX19fXJldHVybiBlfXRyaWdnZXIodCxlLG4sbyl7aWYoWlAoZSkpe2NvbnN0IGk9dGhpcy5fZmV0Y2hOYW1lc3BhY2UodCk7aWYoaSlyZXR1cm4gaS50cmlnZ2VyKGUsbixvKSwhMH1yZXR1cm4hMX1pbnNlcnROb2RlKHQsZSxuLG8pe2lmKCFaUChlKSlyZXR1cm47Y29uc3QgaT1lLl9fbmdfcmVtb3ZlZDtpZihpJiZpLnNldEZvclJlbW92YWwpe2kuc2V0Rm9yUmVtb3ZhbD0hMSxpLnNldEZvck1vdmU9ITA7Y29uc3QgdD10aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMuaW5kZXhPZihlKTt0Pj0wJiZ0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMuc3BsaWNlKHQsMSl9aWYodCl7Y29uc3Qgbz10aGlzLl9mZXRjaE5hbWVzcGFjZSh0KTtvJiZvLmluc2VydE5vZGUoZSxuKX1vJiZ0aGlzLmNvbGxlY3RFbnRlckVsZW1lbnQoZSl9Y29sbGVjdEVudGVyRWxlbWVudCh0KXt0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMucHVzaCh0KX1tYXJrRWxlbWVudEFzRGlzYWJsZWQodCxlKXtlP3RoaXMuZGlzYWJsZWROb2Rlcy5oYXModCl8fCh0aGlzLmRpc2FibGVkTm9kZXMuYWRkKHQpLFFQKHQsSFApKTp0aGlzLmRpc2FibGVkTm9kZXMuaGFzKHQpJiYodGhpcy5kaXNhYmxlZE5vZGVzLmRlbGV0ZSh0KSwkUCh0LEhQKSl9cmVtb3ZlTm9kZSh0LGUsbixvKXtpZihaUChlKSl7Y29uc3QgaT10P3RoaXMuX2ZldGNoTmFtZXNwYWNlKHQpOm51bGw7aWYoaT9pLnJlbW92ZU5vZGUoZSxvKTp0aGlzLm1hcmtFbGVtZW50QXNSZW1vdmVkKHQsZSwhMSxvKSxuKXtjb25zdCBuPXRoaXMubmFtZXNwYWNlc0J5SG9zdEVsZW1lbnQuZ2V0KGUpO24mJm4uaWQhPT10JiZuLnJlbW92ZU5vZGUoZSxvKX19ZWxzZSB0aGlzLl9vblJlbW92YWxDb21wbGV0ZShlLG8pfW1hcmtFbGVtZW50QXNSZW1vdmVkKHQsZSxuLG8pe3RoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5wdXNoKGUpLGUuX19uZ19yZW1vdmVkPXtuYW1lc3BhY2VJZDp0LHNldEZvclJlbW92YWw6byxoYXNBbmltYXRpb246bixyZW1vdmVkQmVmb3JlUXVlcmllZDohMX19bGlzdGVuKHQsZSxuLG8saSl7cmV0dXJuIFpQKGUpP3RoaXMuX2ZldGNoTmFtZXNwYWNlKHQpLmxpc3RlbihlLG4sbyxpKTooKT0+e319X2J1aWxkSW5zdHJ1Y3Rpb24odCxlLG4sbyxpKXtyZXR1cm4gdC50cmFuc2l0aW9uLmJ1aWxkKHRoaXMuZHJpdmVyLHQuZWxlbWVudCx0LmZyb21TdGF0ZS52YWx1ZSx0LnRvU3RhdGUudmFsdWUsbixvLHQuZnJvbVN0YXRlLm9wdGlvbnMsdC50b1N0YXRlLm9wdGlvbnMsZSxpKX1kZXN0cm95SW5uZXJBbmltYXRpb25zKHQpe2xldCBlPXRoaXMuZHJpdmVyLnF1ZXJ5KHQsUk8sITApO2UuZm9yRWFjaCgodD0+dGhpcy5kZXN0cm95QWN0aXZlQW5pbWF0aW9uc0ZvckVsZW1lbnQodCkpKSwwIT10aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LnNpemUmJihlPXRoaXMuZHJpdmVyLnF1ZXJ5KHQsTk8sITApLGUuZm9yRWFjaCgodD0+dGhpcy5maW5pc2hBY3RpdmVRdWVyaWVkQW5pbWF0aW9uT25FbGVtZW50KHQpKSkpfWRlc3Ryb3lBY3RpdmVBbmltYXRpb25zRm9yRWxlbWVudCh0KXtjb25zdCBlPXRoaXMucGxheWVyc0J5RWxlbWVudC5nZXQodCk7ZSYmZS5mb3JFYWNoKCh0PT57dC5xdWV1ZWQ/dC5tYXJrZWRGb3JEZXN0cm95PSEwOnQuZGVzdHJveSgpfSkpfWZpbmlzaEFjdGl2ZVF1ZXJpZWRBbmltYXRpb25PbkVsZW1lbnQodCl7Y29uc3QgZT10aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LmdldCh0KTtlJiZlLmZvckVhY2goKHQ9PnQuZmluaXNoKCkpKX13aGVuUmVuZGVyaW5nRG9uZSgpe3JldHVybiBuZXcgUHJvbWlzZSgodD0+e2lmKHRoaXMucGxheWVycy5sZW5ndGgpcmV0dXJuIGNPKHRoaXMucGxheWVycykub25Eb25lKCgoKT0+dCgpKSk7dCgpfSkpfXByb2Nlc3NMZWF2ZU5vZGUodCl7Y29uc3QgZT10Ll9fbmdfcmVtb3ZlZDtpZihlJiZlLnNldEZvclJlbW92YWwpe2lmKHQuX19uZ19yZW1vdmVkPUJQLGUubmFtZXNwYWNlSWQpe3RoaXMuZGVzdHJveUlubmVyQW5pbWF0aW9ucyh0KTtjb25zdCBuPXRoaXMuX2ZldGNoTmFtZXNwYWNlKGUubmFtZXNwYWNlSWQpO24mJm4uY2xlYXJFbGVtZW50Q2FjaGUodCl9dGhpcy5fb25SZW1vdmFsQ29tcGxldGUodCxlLnNldEZvclJlbW92YWwpfXRoaXMuZHJpdmVyLm1hdGNoZXNFbGVtZW50KHQsRlApJiZ0aGlzLm1hcmtFbGVtZW50QXNEaXNhYmxlZCh0LCExKSx0aGlzLmRyaXZlci5xdWVyeSh0LEZQLCEwKS5mb3JFYWNoKCh0PT57dGhpcy5tYXJrRWxlbWVudEFzRGlzYWJsZWQodCwhMSl9KSl9Zmx1c2godD0tMSl7bGV0IGU9W107aWYodGhpcy5uZXdIb3N0RWxlbWVudHMuc2l6ZSYmKHRoaXMubmV3SG9zdEVsZW1lbnRzLmZvckVhY2goKCh0LGUpPT50aGlzLl9iYWxhbmNlTmFtZXNwYWNlTGlzdCh0LGUpKSksdGhpcy5uZXdIb3N0RWxlbWVudHMuY2xlYXIoKSksdGhpcy50b3RhbEFuaW1hdGlvbnMmJnRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5sZW5ndGgpZm9yKGxldCB0PTA7dDx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMubGVuZ3RoO3QrKylRUCh0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHNbdF0sIm5nLXN0YXItaW5zZXJ0ZWQiKTtpZih0aGlzLl9uYW1lc3BhY2VMaXN0Lmxlbmd0aCYmKHRoaXMudG90YWxRdWV1ZWRQbGF5ZXJzfHx0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMubGVuZ3RoKSl7Y29uc3Qgbj1bXTt0cnl7ZT10aGlzLl9mbHVzaEFuaW1hdGlvbnMobix0KX1maW5hbGx5e2ZvcihsZXQgdD0wO3Q8bi5sZW5ndGg7dCsrKW5bdF0oKX19ZWxzZSBmb3IobGV0IHQ9MDt0PHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5sZW5ndGg7dCsrKXRoaXMucHJvY2Vzc0xlYXZlTm9kZSh0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHNbdF0pO2lmKHRoaXMudG90YWxRdWV1ZWRQbGF5ZXJzPTAsdGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzLmxlbmd0aD0wLHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5sZW5ndGg9MCx0aGlzLl9mbHVzaEZucy5mb3JFYWNoKCh0PT50KCkpKSx0aGlzLl9mbHVzaEZucz1bXSx0aGlzLl93aGVuUXVpZXRGbnMubGVuZ3RoKXtjb25zdCB0PXRoaXMuX3doZW5RdWlldEZuczt0aGlzLl93aGVuUXVpZXRGbnM9W10sZS5sZW5ndGg/Y08oZSkub25Eb25lKCgoKT0+e3QuZm9yRWFjaCgodD0+dCgpKSl9KSk6dC5mb3JFYWNoKCh0PT50KCkpKX19cmVwb3J0RXJyb3IodCl7dGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gcHJvY2VzcyBhbmltYXRpb25zIGR1ZSB0byB0aGUgZm9sbG93aW5nIGZhaWxlZCB0cmlnZ2VyIHRyYW5zaXRpb25zXG4gJHt0LmpvaW4oIlxuIil9YCl9X2ZsdXNoQW5pbWF0aW9ucyh0LGUpe2NvbnN0IG49bmV3IGZQLG89W10saT1uZXcgTWFwLGE9W10scj1uZXcgTWFwLHM9bmV3IE1hcCxsPW5ldyBNYXAsYz1uZXcgU2V0O3RoaXMuZGlzYWJsZWROb2Rlcy5mb3JFYWNoKCh0PT57Yy5hZGQodCk7Y29uc3QgZT10aGlzLmRyaXZlci5xdWVyeSh0LCIubmctYW5pbWF0ZS1xdWV1ZWQiLCEwKTtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyljLmFkZChlW3RdKX0pKTtjb25zdCBkPXRoaXMuYm9keU5vZGUscD1BcnJheS5mcm9tKHRoaXMuc3RhdGVzQnlFbGVtZW50LmtleXMoKSksbT1KUChwLHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cyksdT1uZXcgTWFwO2xldCBmPTA7bS5mb3JFYWNoKCgodCxlKT0+e2NvbnN0IG49RE8rZisrO3Uuc2V0KGUsbiksdC5mb3JFYWNoKCh0PT5RUCh0LG4pKSl9KSk7Y29uc3QgZz1bXSxoPW5ldyBTZXQsYj1uZXcgU2V0O2ZvcihsZXQgdD0wO3Q8dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmxlbmd0aDt0Kyspe2NvbnN0IGU9dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzW3RdLG49ZS5fX25nX3JlbW92ZWQ7biYmbi5zZXRGb3JSZW1vdmFsJiYoZy5wdXNoKGUpLGguYWRkKGUpLG4uaGFzQW5pbWF0aW9uP3RoaXMuZHJpdmVyLnF1ZXJ5KGUsIi5uZy1zdGFyLWluc2VydGVkIiwhMCkuZm9yRWFjaCgodD0+aC5hZGQodCkpKTpiLmFkZChlKSl9Y29uc3QgeT1uZXcgTWFwLF89SlAocCxBcnJheS5mcm9tKGgpKTtfLmZvckVhY2goKCh0LGUpPT57Y29uc3Qgbj1FTytmKys7eS5zZXQoZSxuKSx0LmZvckVhY2goKHQ9PlFQKHQsbikpKX0pKSx0LnB1c2goKCgpPT57bS5mb3JFYWNoKCgodCxlKT0+e2NvbnN0IG49dS5nZXQoZSk7dC5mb3JFYWNoKCh0PT4kUCh0LG4pKSl9KSksXy5mb3JFYWNoKCgodCxlKT0+e2NvbnN0IG49eS5nZXQoZSk7dC5mb3JFYWNoKCh0PT4kUCh0LG4pKSl9KSksZy5mb3JFYWNoKCh0PT57dGhpcy5wcm9jZXNzTGVhdmVOb2RlKHQpfSkpfSkpO2NvbnN0IEM9W10sTT1bXTtmb3IobGV0IHQ9dGhpcy5fbmFtZXNwYWNlTGlzdC5sZW5ndGgtMTt0Pj0wO3QtLSl0aGlzLl9uYW1lc3BhY2VMaXN0W3RdLmRyYWluUXVldWVkVHJhbnNpdGlvbnMoZSkuZm9yRWFjaCgodD0+e2NvbnN0IGU9dC5wbGF5ZXIsaT10LmVsZW1lbnQ7aWYoQy5wdXNoKGUpLHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5sZW5ndGgpe2NvbnN0IHQ9aS5fX25nX3JlbW92ZWQ7aWYodCYmdC5zZXRGb3JNb3ZlKXJldHVybiB2b2lkIGUuZGVzdHJveSgpfWNvbnN0IGM9IWR8fCF0aGlzLmRyaXZlci5jb250YWluc0VsZW1lbnQoZCxpKSxwPXkuZ2V0KGkpLG09dS5nZXQoaSksZj10aGlzLl9idWlsZEluc3RydWN0aW9uKHQsbixtLHAsYyk7aWYoZi5lcnJvcnMmJmYuZXJyb3JzLmxlbmd0aClNLnB1c2goZik7ZWxzZXtpZihjKXJldHVybiBlLm9uU3RhcnQoKCgpPT5VTyhpLGYuZnJvbVN0eWxlcykpKSxlLm9uRGVzdHJveSgoKCk9PmpPKGksZi50b1N0eWxlcykpKSx2b2lkIG8ucHVzaChlKTtpZih0LmlzRmFsbGJhY2tUcmFuc2l0aW9uKXJldHVybiBlLm9uU3RhcnQoKCgpPT5VTyhpLGYuZnJvbVN0eWxlcykpKSxlLm9uRGVzdHJveSgoKCk9PmpPKGksZi50b1N0eWxlcykpKSx2b2lkIG8ucHVzaChlKTtmLnRpbWVsaW5lcy5mb3JFYWNoKCh0PT50LnN0cmV0Y2hTdGFydGluZ0tleWZyYW1lPSEwKSksbi5hcHBlbmQoaSxmLnRpbWVsaW5lcyksYS5wdXNoKHtpbnN0cnVjdGlvbjpmLHBsYXllcjplLGVsZW1lbnQ6aX0pLGYucXVlcmllZEVsZW1lbnRzLmZvckVhY2goKHQ9PmZPKHIsdCxbXSkucHVzaChlKSkpLGYucHJlU3R5bGVQcm9wcy5mb3JFYWNoKCgodCxlKT0+e2NvbnN0IG49T2JqZWN0LmtleXModCk7aWYobi5sZW5ndGgpe2xldCB0PXMuZ2V0KGUpO3R8fHMuc2V0KGUsdD1uZXcgU2V0KSxuLmZvckVhY2goKGU9PnQuYWRkKGUpKSl9fSkpLGYucG9zdFN0eWxlUHJvcHMuZm9yRWFjaCgoKHQsZSk9Pntjb25zdCBuPU9iamVjdC5rZXlzKHQpO2xldCBvPWwuZ2V0KGUpO298fGwuc2V0KGUsbz1uZXcgU2V0KSxuLmZvckVhY2goKHQ9Pm8uYWRkKHQpKSl9KSl9fSkpO2lmKE0ubGVuZ3RoKXtjb25zdCB0PVtdO00uZm9yRWFjaCgoZT0+e3QucHVzaChgQCR7ZS50cmlnZ2VyTmFtZX0gaGFzIGZhaWxlZCBkdWUgdG86XG5gKSxlLmVycm9ycy5mb3JFYWNoKChlPT50LnB1c2goYC0gJHtlfVxuYCkpKX0pKSxDLmZvckVhY2goKHQ9PnQuZGVzdHJveSgpKSksdGhpcy5yZXBvcnRFcnJvcih0KX1jb25zdCB2PW5ldyBNYXAseD1uZXcgTWFwO2EuZm9yRWFjaCgodD0+e2NvbnN0IGU9dC5lbGVtZW50O24uaGFzKGUpJiYoeC5zZXQoZSxlKSx0aGlzLl9iZWZvcmVBbmltYXRpb25CdWlsZCh0LnBsYXllci5uYW1lc3BhY2VJZCx0Lmluc3RydWN0aW9uLHYpKX0pKSxvLmZvckVhY2goKHQ9Pntjb25zdCBlPXQuZWxlbWVudDt0aGlzLl9nZXRQcmV2aW91c1BsYXllcnMoZSwhMSx0Lm5hbWVzcGFjZUlkLHQudHJpZ2dlck5hbWUsbnVsbCkuZm9yRWFjaCgodD0+e2ZPKHYsZSxbXSkucHVzaCh0KSx0LmRlc3Ryb3koKX0pKX0pKTtjb25zdCBPPWcuZmlsdGVyKCh0PT5udyh0LHMsbCkpKSxQPW5ldyBNYXA7S1AoUCx0aGlzLmRyaXZlcixiLGwsWHgpLmZvckVhY2goKHQ9Pntudyh0LHMsbCkmJk8ucHVzaCh0KX0pKTtjb25zdCB3PW5ldyBNYXA7bS5mb3JFYWNoKCgodCxlKT0+e0tQKHcsdGhpcy5kcml2ZXIsbmV3IFNldCh0KSxzLCIhIil9KSksTy5mb3JFYWNoKCh0PT57Y29uc3QgZT1QLmdldCh0KSxuPXcuZ2V0KHQpO1Auc2V0KHQsT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLG4pKX0pKTtjb25zdCBrPVtdLFM9W10sRD17fTthLmZvckVhY2goKHQ9Pntjb25zdHtlbGVtZW50OmUscGxheWVyOmEsaW5zdHJ1Y3Rpb246cn09dDtpZihuLmhhcyhlKSl7aWYoYy5oYXMoZSkpcmV0dXJuIGEub25EZXN0cm95KCgoKT0+ak8oZSxyLnRvU3R5bGVzKSkpLGEuZGlzYWJsZWQ9ITAsYS5vdmVycmlkZVRvdGFsVGltZShyLnRvdGFsVGltZSksdm9pZCBvLnB1c2goYSk7bGV0IHQ9RDtpZih4LnNpemU+MSl7bGV0IG49ZTtjb25zdCBvPVtdO2Zvcig7bj1uLnBhcmVudE5vZGU7KXtjb25zdCBlPXguZ2V0KG4pO2lmKGUpe3Q9ZTticmVha31vLnB1c2gobil9by5mb3JFYWNoKChlPT54LnNldChlLHQpKSl9Y29uc3Qgbj10aGlzLl9idWlsZEFuaW1hdGlvbihhLm5hbWVzcGFjZUlkLHIsdixpLHcsUCk7aWYoYS5zZXRSZWFsUGxheWVyKG4pLHQ9PT1EKWsucHVzaChhKTtlbHNle2NvbnN0IGU9dGhpcy5wbGF5ZXJzQnlFbGVtZW50LmdldCh0KTtlJiZlLmxlbmd0aCYmKGEucGFyZW50UGxheWVyPWNPKGUpKSxvLnB1c2goYSl9fWVsc2UgVU8oZSxyLmZyb21TdHlsZXMpLGEub25EZXN0cm95KCgoKT0+ak8oZSxyLnRvU3R5bGVzKSkpLFMucHVzaChhKSxjLmhhcyhlKSYmby5wdXNoKGEpfSkpLFMuZm9yRWFjaCgodD0+e2NvbnN0IGU9aS5nZXQodC5lbGVtZW50KTtpZihlJiZlLmxlbmd0aCl7Y29uc3Qgbj1jTyhlKTt0LnNldFJlYWxQbGF5ZXIobil9fSkpLG8uZm9yRWFjaCgodD0+e3QucGFyZW50UGxheWVyP3Quc3luY1BsYXllckV2ZW50cyh0LnBhcmVudFBsYXllcik6dC5kZXN0cm95KCl9KSk7Zm9yKGxldCB0PTA7dDxnLmxlbmd0aDt0Kyspe2NvbnN0IGU9Z1t0XSxuPWUuX19uZ19yZW1vdmVkO2lmKCRQKGUsRU8pLG4mJm4uaGFzQW5pbWF0aW9uKWNvbnRpbnVlO2xldCBvPVtdO2lmKHIuc2l6ZSl7bGV0IHQ9ci5nZXQoZSk7dCYmdC5sZW5ndGgmJm8ucHVzaCguLi50KTtsZXQgbj10aGlzLmRyaXZlci5xdWVyeShlLE5PLCEwKTtmb3IobGV0IHQ9MDt0PG4ubGVuZ3RoO3QrKyl7bGV0IGU9ci5nZXQoblt0XSk7ZSYmZS5sZW5ndGgmJm8ucHVzaCguLi5lKX19Y29uc3QgaT1vLmZpbHRlcigodD0+IXQuZGVzdHJveWVkKSk7aS5sZW5ndGg/dHcodGhpcyxlLGkpOnRoaXMucHJvY2Vzc0xlYXZlTm9kZShlKX1yZXR1cm4gZy5sZW5ndGg9MCxrLmZvckVhY2goKHQ9Pnt0aGlzLnBsYXllcnMucHVzaCh0KSx0Lm9uRG9uZSgoKCk9Pnt0LmRlc3Ryb3koKTtjb25zdCBlPXRoaXMucGxheWVycy5pbmRleE9mKHQpO3RoaXMucGxheWVycy5zcGxpY2UoZSwxKX0pKSx0LnBsYXkoKX0pKSxrfWVsZW1lbnRDb250YWluc0RhdGEodCxlKXtsZXQgbj0hMTtjb25zdCBvPWUuX19uZ19yZW1vdmVkO3JldHVybiBvJiZvLnNldEZvclJlbW92YWwmJihuPSEwKSx0aGlzLnBsYXllcnNCeUVsZW1lbnQuaGFzKGUpJiYobj0hMCksdGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudC5oYXMoZSkmJihuPSEwKSx0aGlzLnN0YXRlc0J5RWxlbWVudC5oYXMoZSkmJihuPSEwKSx0aGlzLl9mZXRjaE5hbWVzcGFjZSh0KS5lbGVtZW50Q29udGFpbnNEYXRhKGUpfHxufWFmdGVyRmx1c2godCl7dGhpcy5fZmx1c2hGbnMucHVzaCh0KX1hZnRlckZsdXNoQW5pbWF0aW9uc0RvbmUodCl7dGhpcy5fd2hlblF1aWV0Rm5zLnB1c2godCl9X2dldFByZXZpb3VzUGxheWVycyh0LGUsbixvLGkpe2xldCBhPVtdO2lmKGUpe2NvbnN0IGU9dGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudC5nZXQodCk7ZSYmKGE9ZSl9ZWxzZXtjb25zdCBlPXRoaXMucGxheWVyc0J5RWxlbWVudC5nZXQodCk7aWYoZSl7Y29uc3QgdD0haXx8aT09VVA7ZS5mb3JFYWNoKChlPT57ZS5xdWV1ZWR8fCh0fHxlLnRyaWdnZXJOYW1lPT1vKSYmYS5wdXNoKGUpfSkpfX1yZXR1cm4obnx8bykmJihhPWEuZmlsdGVyKCh0PT4hKG4mJm4hPXQubmFtZXNwYWNlSWR8fG8mJm8hPXQudHJpZ2dlck5hbWUpKSkpLGF9X2JlZm9yZUFuaW1hdGlvbkJ1aWxkKHQsZSxuKXtjb25zdCBvPWUuZWxlbWVudCxpPWUuaXNSZW1vdmFsVHJhbnNpdGlvbj92b2lkIDA6dCxhPWUuaXNSZW1vdmFsVHJhbnNpdGlvbj92b2lkIDA6ZS50cmlnZ2VyTmFtZTtmb3IoY29uc3QgdCBvZiBlLnRpbWVsaW5lcyl7Y29uc3Qgcj10LmVsZW1lbnQscz1yIT09byxsPWZPKG4scixbXSk7dGhpcy5fZ2V0UHJldmlvdXNQbGF5ZXJzKHIscyxpLGEsZS50b1N0YXRlKS5mb3JFYWNoKCh0PT57Y29uc3QgZT10LmdldFJlYWxQbGF5ZXIoKTtlLmJlZm9yZURlc3Ryb3kmJmUuYmVmb3JlRGVzdHJveSgpLHQuZGVzdHJveSgpLGwucHVzaCh0KX0pKX1VTyhvLGUuZnJvbVN0eWxlcyl9X2J1aWxkQW5pbWF0aW9uKHQsZSxuLG8saSxhKXtjb25zdCByPWUudHJpZ2dlck5hbWUscz1lLmVsZW1lbnQsbD1bXSxjPW5ldyBTZXQsZD1uZXcgU2V0LHA9ZS50aW1lbGluZXMubWFwKChlPT57Y29uc3QgcD1lLmVsZW1lbnQ7Yy5hZGQocCk7Y29uc3QgbT1wLl9fbmdfcmVtb3ZlZDtpZihtJiZtLnJlbW92ZWRCZWZvcmVRdWVyaWVkKXJldHVybiBuZXcgck8oZS5kdXJhdGlvbixlLmRlbGF5KTtjb25zdCB1PXAhPT1zLGY9KGZ1bmN0aW9uIGcodCl7Y29uc3QgZT1bXTtyZXR1cm4gZXcodCxlKSxlfSkoKG4uZ2V0KHApfHxMUCkubWFwKCh0PT50LmdldFJlYWxQbGF5ZXIoKSkpKS5maWx0ZXIoKHQ9PiEhdC5lbGVtZW50JiZ0LmVsZW1lbnQ9PT1wKSksaD1pLmdldChwKSxiPWEuZ2V0KHApLHk9ZE8oMCx0aGlzLl9ub3JtYWxpemVyLDAsZS5rZXlmcmFtZXMsaCxiKSxfPXRoaXMuX2J1aWxkUGxheWVyKGUseSxmKTtpZihlLnN1YlRpbWVsaW5lJiZvJiZkLmFkZChwKSx1KXtjb25zdCBlPW5ldyBxUCh0LHIscCk7ZS5zZXRSZWFsUGxheWVyKF8pLGwucHVzaChlKX1yZXR1cm4gX30pKTtsLmZvckVhY2goKHQ9PntmTyh0aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LHQuZWxlbWVudCxbXSkucHVzaCh0KSx0Lm9uRG9uZSgoKCk9PihmdW5jdGlvbiBlKHQsbixvKXtsZXQgaTtpZih0IGluc3RhbmNlb2YgTWFwKXtpZihpPXQuZ2V0KG4pLGkpe2lmKGkubGVuZ3RoKXtjb25zdCB0PWkuaW5kZXhPZihvKTtpLnNwbGljZSh0LDEpfTA9PWkubGVuZ3RoJiZ0LmRlbGV0ZShuKX19ZWxzZSBpZihpPXRbbl0saSl7aWYoaS5sZW5ndGgpe2NvbnN0IHQ9aS5pbmRleE9mKG8pO2kuc3BsaWNlKHQsMSl9MD09aS5sZW5ndGgmJmRlbGV0ZSB0W25dfXJldHVybiBpfSkodGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudCx0LmVsZW1lbnQsdCkpKX0pKSxjLmZvckVhY2goKHQ9PlFQKHQsVE8pKSk7Y29uc3QgbT1jTyhwKTtyZXR1cm4gbS5vbkRlc3Ryb3koKCgpPT57Yy5mb3JFYWNoKCh0PT4kUCh0LFRPKSkpLGpPKHMsZS50b1N0eWxlcyl9KSksZC5mb3JFYWNoKCh0PT57Zk8obyx0LFtdKS5wdXNoKG0pfSkpLG19X2J1aWxkUGxheWVyKHQsZSxuKXtyZXR1cm4gZS5sZW5ndGg+MD90aGlzLmRyaXZlci5hbmltYXRlKHQuZWxlbWVudCxlLHQuZHVyYXRpb24sdC5kZWxheSx0LmVhc2luZyxuKTpuZXcgck8odC5kdXJhdGlvbix0LmRlbGF5KX19Y2xhc3MgcVB7Y29uc3RydWN0b3IodCxlLG4pe3RoaXMubmFtZXNwYWNlSWQ9dCx0aGlzLnRyaWdnZXJOYW1lPWUsdGhpcy5lbGVtZW50PW4sdGhpcy5fcGxheWVyPW5ldyByTyx0aGlzLl9jb250YWluc1JlYWxQbGF5ZXI9ITEsdGhpcy5fcXVldWVkQ2FsbGJhY2tzPXt9LHRoaXMuZGVzdHJveWVkPSExLHRoaXMubWFya2VkRm9yRGVzdHJveT0hMSx0aGlzLmRpc2FibGVkPSExLHRoaXMucXVldWVkPSEwLHRoaXMudG90YWxUaW1lPTB9c2V0UmVhbFBsYXllcih0KXt0aGlzLl9jb250YWluc1JlYWxQbGF5ZXJ8fCh0aGlzLl9wbGF5ZXI9dCxPYmplY3Qua2V5cyh0aGlzLl9xdWV1ZWRDYWxsYmFja3MpLmZvckVhY2goKGU9Pnt0aGlzLl9xdWV1ZWRDYWxsYmFja3NbZV0uZm9yRWFjaCgobj0+cE8odCxlLHZvaWQgMCxuKSkpfSkpLHRoaXMuX3F1ZXVlZENhbGxiYWNrcz17fSx0aGlzLl9jb250YWluc1JlYWxQbGF5ZXI9ITAsdGhpcy5vdmVycmlkZVRvdGFsVGltZSh0LnRvdGFsVGltZSksdGhpcy5xdWV1ZWQ9ITEpfWdldFJlYWxQbGF5ZXIoKXtyZXR1cm4gdGhpcy5fcGxheWVyfW92ZXJyaWRlVG90YWxUaW1lKHQpe3RoaXMudG90YWxUaW1lPXR9c3luY1BsYXllckV2ZW50cyh0KXtjb25zdCBlPXRoaXMuX3BsYXllcjtlLnRyaWdnZXJDYWxsYmFjayYmdC5vblN0YXJ0KCgoKT0+ZS50cmlnZ2VyQ2FsbGJhY2soInN0YXJ0IikpKSx0Lm9uRG9uZSgoKCk9PnRoaXMuZmluaXNoKCkpKSx0Lm9uRGVzdHJveSgoKCk9PnRoaXMuZGVzdHJveSgpKSl9X3F1ZXVlRXZlbnQodCxlKXtmTyh0aGlzLl9xdWV1ZWRDYWxsYmFja3MsdCxbXSkucHVzaChlKX1vbkRvbmUodCl7dGhpcy5xdWV1ZWQmJnRoaXMuX3F1ZXVlRXZlbnQoImRvbmUiLHQpLHRoaXMuX3BsYXllci5vbkRvbmUodCl9b25TdGFydCh0KXt0aGlzLnF1ZXVlZCYmdGhpcy5fcXVldWVFdmVudCgic3RhcnQiLHQpLHRoaXMuX3BsYXllci5vblN0YXJ0KHQpfW9uRGVzdHJveSh0KXt0aGlzLnF1ZXVlZCYmdGhpcy5fcXVldWVFdmVudCgiZGVzdHJveSIsdCksdGhpcy5fcGxheWVyLm9uRGVzdHJveSh0KX1pbml0KCl7dGhpcy5fcGxheWVyLmluaXQoKX1oYXNTdGFydGVkKCl7cmV0dXJuIXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIuaGFzU3RhcnRlZCgpfXBsYXkoKXshdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5wbGF5KCl9cGF1c2UoKXshdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5wYXVzZSgpfXJlc3RhcnQoKXshdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5yZXN0YXJ0KCl9ZmluaXNoKCl7dGhpcy5fcGxheWVyLmZpbmlzaCgpfWRlc3Ryb3koKXt0aGlzLmRlc3Ryb3llZD0hMCx0aGlzLl9wbGF5ZXIuZGVzdHJveSgpfXJlc2V0KCl7IXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIucmVzZXQoKX1zZXRQb3NpdGlvbih0KXt0aGlzLnF1ZXVlZHx8dGhpcy5fcGxheWVyLnNldFBvc2l0aW9uKHQpfWdldFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMucXVldWVkPzA6dGhpcy5fcGxheWVyLmdldFBvc2l0aW9uKCl9dHJpZ2dlckNhbGxiYWNrKHQpe2NvbnN0IGU9dGhpcy5fcGxheWVyO2UudHJpZ2dlckNhbGxiYWNrJiZlLnRyaWdnZXJDYWxsYmFjayh0KX19ZnVuY3Rpb24gWlAodCl7cmV0dXJuIHQmJjE9PT10Lm5vZGVUeXBlfWZ1bmN0aW9uIFhQKHQsZSl7Y29uc3Qgbj10LnN0eWxlLmRpc3BsYXk7cmV0dXJuIHQuc3R5bGUuZGlzcGxheT1udWxsIT1lP2U6Im5vbmUiLG59ZnVuY3Rpb24gS1AodCxlLG4sbyxpKXtjb25zdCBhPVtdO24uZm9yRWFjaCgodD0+YS5wdXNoKFhQKHQpKSkpO2NvbnN0IHI9W107by5mb3JFYWNoKCgobixvKT0+e2NvbnN0IGE9e307bi5mb3JFYWNoKCh0PT57Y29uc3Qgbj1hW3RdPWUuY29tcHV0ZVN0eWxlKG8sdCxpKTtuJiYwIT1uLmxlbmd0aHx8KG8uX19uZ19yZW1vdmVkPVZQLHIucHVzaChvKSl9KSksdC5zZXQobyxhKX0pKTtsZXQgcz0wO3JldHVybiBuLmZvckVhY2goKHQ9PlhQKHQsYVtzKytdKSkpLHJ9ZnVuY3Rpb24gSlAodCxlKXtjb25zdCBuPW5ldyBNYXA7aWYodC5mb3JFYWNoKCh0PT5uLnNldCh0LFtdKSkpLDA9PWUubGVuZ3RoKXJldHVybiBuO2NvbnN0IG89bmV3IFNldChlKSxpPW5ldyBNYXA7ZnVuY3Rpb24gYSh0KXtpZighdClyZXR1cm4gMTtsZXQgZT1pLmdldCh0KTtpZihlKXJldHVybiBlO2NvbnN0IHI9dC5wYXJlbnROb2RlO3JldHVybiBlPW4uaGFzKHIpP3I6by5oYXMocik/MTphKHIpLGkuc2V0KHQsZSksZX1yZXR1cm4gZS5mb3JFYWNoKCh0PT57Y29uc3QgZT1hKHQpOzEhPT1lJiZuLmdldChlKS5wdXNoKHQpfSkpLG59ZnVuY3Rpb24gUVAodCxlKXtpZih0LmNsYXNzTGlzdCl0LmNsYXNzTGlzdC5hZGQoZSk7ZWxzZXtsZXQgbj10LiQkY2xhc3NlcztufHwobj10LiQkY2xhc3Nlcz17fSksbltlXT0hMH19ZnVuY3Rpb24gJFAodCxlKXtpZih0LmNsYXNzTGlzdCl0LmNsYXNzTGlzdC5yZW1vdmUoZSk7ZWxzZXtsZXQgbj10LiQkY2xhc3NlcztuJiZkZWxldGUgbltlXX19ZnVuY3Rpb24gdHcodCxlLG4pe2NPKG4pLm9uRG9uZSgoKCk9PnQucHJvY2Vzc0xlYXZlTm9kZShlKSkpfWZ1bmN0aW9uIGV3KHQsZSl7Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspe2NvbnN0IG89dFtuXTtvIGluc3RhbmNlb2Ygc08/ZXcoby5wbGF5ZXJzLGUpOmUucHVzaChvKX19ZnVuY3Rpb24gbncodCxlLG4pe2NvbnN0IG89bi5nZXQodCk7aWYoIW8pcmV0dXJuITE7bGV0IGk9ZS5nZXQodCk7cmV0dXJuIGk/by5mb3JFYWNoKCh0PT5pLmFkZCh0KSkpOmUuc2V0KHQsbyksbi5kZWxldGUodCksITB9Y2xhc3Mgb3d7Y29uc3RydWN0b3IodCxlLG4pe3RoaXMuYm9keU5vZGU9dCx0aGlzLl9kcml2ZXI9ZSx0aGlzLl90cmlnZ2VyQ2FjaGU9e30sdGhpcy5vblJlbW92YWxDb21wbGV0ZT0odCxlKT0+e30sdGhpcy5fdHJhbnNpdGlvbkVuZ2luZT1uZXcgWVAodCxlLG4pLHRoaXMuX3RpbWVsaW5lRW5naW5lPW5ldyBJUCh0LGUsbiksdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5vblJlbW92YWxDb21wbGV0ZT0odCxlKT0+dGhpcy5vblJlbW92YWxDb21wbGV0ZSh0LGUpfXJlZ2lzdGVyVHJpZ2dlcih0LGUsbixvLGkpe2NvbnN0IGE9dCsiLSIrbztsZXQgcj10aGlzLl90cmlnZ2VyQ2FjaGVbYV07aWYoIXIpe2NvbnN0IHQ9W10sZT1zUCh0aGlzLl9kcml2ZXIsaSx0KTtpZih0Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoYFRoZSBhbmltYXRpb24gdHJpZ2dlciAiJHtvfSIgaGFzIGZhaWxlZCB0byBidWlsZCBkdWUgdG8gdGhlIGZvbGxvd2luZyBlcnJvcnM6XG4gLSAke3Quam9pbigiXG4gLSAiKX1gKTtyPShmdW5jdGlvbiBzKHQsZSl7cmV0dXJuIG5ldyBSUCh0LGUpfSkobyxlKSx0aGlzLl90cmlnZ2VyQ2FjaGVbYV09cn10aGlzLl90cmFuc2l0aW9uRW5naW5lLnJlZ2lzdGVyVHJpZ2dlcihlLG8scil9cmVnaXN0ZXIodCxlKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLnJlZ2lzdGVyKHQsZSl9ZGVzdHJveSh0LGUpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUuZGVzdHJveSh0LGUpfW9uSW5zZXJ0KHQsZSxuLG8pe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUuaW5zZXJ0Tm9kZSh0LGUsbixvKX1vblJlbW92ZSh0LGUsbixvKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLnJlbW92ZU5vZGUodCxlLG98fCExLG4pfWRpc2FibGVBbmltYXRpb25zKHQsZSl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5tYXJrRWxlbWVudEFzRGlzYWJsZWQodCxlKX1wcm9jZXNzKHQsZSxuLG8pe2lmKCJAIj09bi5jaGFyQXQoMCkpe2NvbnN0W3QsaV09Z08obik7dGhpcy5fdGltZWxpbmVFbmdpbmUuY29tbWFuZCh0LGUsaSxvKX1lbHNlIHRoaXMuX3RyYW5zaXRpb25FbmdpbmUudHJpZ2dlcih0LGUsbixvKX1saXN0ZW4odCxlLG4sbyxpKXtpZigiQCI9PW4uY2hhckF0KDApKXtjb25zdFt0LG9dPWdPKG4pO3JldHVybiB0aGlzLl90aW1lbGluZUVuZ2luZS5saXN0ZW4odCxlLG8saSl9cmV0dXJuIHRoaXMuX3RyYW5zaXRpb25FbmdpbmUubGlzdGVuKHQsZSxuLG8saSl9Zmx1c2godD0tMSl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5mbHVzaCh0KX1nZXQgcGxheWVycygpe3JldHVybiB0aGlzLl90cmFuc2l0aW9uRW5naW5lLnBsYXllcnMuY29uY2F0KHRoaXMuX3RpbWVsaW5lRW5naW5lLnBsYXllcnMpfXdoZW5SZW5kZXJpbmdEb25lKCl7cmV0dXJuIHRoaXMuX3RyYW5zaXRpb25FbmdpbmUud2hlblJlbmRlcmluZ0RvbmUoKX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIGl3KHQsZSl7bGV0IG49bnVsbCxvPW51bGw7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSkmJmUubGVuZ3RoPyhuPXJ3KGVbMF0pLGUubGVuZ3RoPjEmJihvPXJ3KGVbZS5sZW5ndGgtMV0pKSk6ZSYmKG49cncoZSkpLG58fG8/bmV3IGF3KHQsbixvKTpudWxsfWNsYXNzIGF3e2NvbnN0cnVjdG9yKHQsZSxuKXt0aGlzLl9lbGVtZW50PXQsdGhpcy5fc3RhcnRTdHlsZXM9ZSx0aGlzLl9lbmRTdHlsZXM9bix0aGlzLl9zdGF0ZT0wO2xldCBvPWF3LmluaXRpYWxTdHlsZXNCeUVsZW1lbnQuZ2V0KHQpO298fGF3LmluaXRpYWxTdHlsZXNCeUVsZW1lbnQuc2V0KHQsbz17fSksdGhpcy5faW5pdGlhbFN0eWxlcz1vfXN0YXJ0KCl7dGhpcy5fc3RhdGU8MSYmKHRoaXMuX3N0YXJ0U3R5bGVzJiZqTyh0aGlzLl9lbGVtZW50LHRoaXMuX3N0YXJ0U3R5bGVzLHRoaXMuX2luaXRpYWxTdHlsZXMpLHRoaXMuX3N0YXRlPTEpfWZpbmlzaCgpe3RoaXMuc3RhcnQoKSx0aGlzLl9zdGF0ZTwyJiYoak8odGhpcy5fZWxlbWVudCx0aGlzLl9pbml0aWFsU3R5bGVzKSx0aGlzLl9lbmRTdHlsZXMmJihqTyh0aGlzLl9lbGVtZW50LHRoaXMuX2VuZFN0eWxlcyksdGhpcy5fZW5kU3R5bGVzPW51bGwpLHRoaXMuX3N0YXRlPTEpfWRlc3Ryb3koKXt0aGlzLmZpbmlzaCgpLHRoaXMuX3N0YXRlPDMmJihhdy5pbml0aWFsU3R5bGVzQnlFbGVtZW50LmRlbGV0ZSh0aGlzLl9lbGVtZW50KSx0aGlzLl9zdGFydFN0eWxlcyYmKFVPKHRoaXMuX2VsZW1lbnQsdGhpcy5fc3RhcnRTdHlsZXMpLHRoaXMuX2VuZFN0eWxlcz1udWxsKSx0aGlzLl9lbmRTdHlsZXMmJihVTyh0aGlzLl9lbGVtZW50LHRoaXMuX2VuZFN0eWxlcyksdGhpcy5fZW5kU3R5bGVzPW51bGwpLGpPKHRoaXMuX2VsZW1lbnQsdGhpcy5faW5pdGlhbFN0eWxlcyksdGhpcy5fc3RhdGU9Myl9fWZ1bmN0aW9uIHJ3KHQpe2xldCBlPW51bGw7Y29uc3Qgbj1PYmplY3Qua2V5cyh0KTtmb3IobGV0IG89MDtvPG4ubGVuZ3RoO28rKyl7Y29uc3QgaT1uW29dO3N3KGkpJiYoZT1lfHx7fSxlW2ldPXRbaV0pfXJldHVybiBlfWZ1bmN0aW9uIHN3KHQpe3JldHVybiJkaXNwbGF5Ij09PXR8fCJwb3NpdGlvbiI9PT10fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9hdy5pbml0aWFsU3R5bGVzQnlFbGVtZW50PW5ldyBXZWFrTWFwO2NvbnN0IGx3PSJhbmltYXRpb24iLGN3PSJhbmltYXRpb25lbmQiO2NsYXNzIGR3e2NvbnN0cnVjdG9yKHQsZSxuLG8saSxhLHIpe3RoaXMuX2VsZW1lbnQ9dCx0aGlzLl9uYW1lPWUsdGhpcy5fZHVyYXRpb249bix0aGlzLl9kZWxheT1vLHRoaXMuX2Vhc2luZz1pLHRoaXMuX2ZpbGxNb2RlPWEsdGhpcy5fb25Eb25lRm49cix0aGlzLl9maW5pc2hlZD0hMSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fc3RhcnRUaW1lPTAsdGhpcy5fcG9zaXRpb249MCx0aGlzLl9ldmVudEZuPXQ9PnRoaXMuX2hhbmRsZUNhbGxiYWNrKHQpfWFwcGx5KCl7IShmdW5jdGlvbiB0KGUsbil7Y29uc3Qgbz1odyhlLCIiKS50cmltKCk7bGV0IGk9MDtvLmxlbmd0aCYmKChmdW5jdGlvbiBhKHQsZSl7bGV0IG49MDtmb3IobGV0IG89MDtvPHQubGVuZ3RoO28rKyl0LmNoYXJBdChvKT09PWUmJm4rKztyZXR1cm4gbn0pKG8sIiwiKSsxLG49YCR7b30sICR7bn1gKSxndyhlLCIiLG4pfSkodGhpcy5fZWxlbWVudCxgJHt0aGlzLl9kdXJhdGlvbn1tcyAke3RoaXMuX2Vhc2luZ30gJHt0aGlzLl9kZWxheX1tcyAxIG5vcm1hbCAke3RoaXMuX2ZpbGxNb2RlfSAke3RoaXMuX25hbWV9YCksZncodGhpcy5fZWxlbWVudCx0aGlzLl9ldmVudEZuLCExKSx0aGlzLl9zdGFydFRpbWU9RGF0ZS5ub3coKX1wYXVzZSgpe3B3KHRoaXMuX2VsZW1lbnQsdGhpcy5fbmFtZSwicGF1c2VkIil9cmVzdW1lKCl7cHcodGhpcy5fZWxlbWVudCx0aGlzLl9uYW1lLCJydW5uaW5nIil9c2V0UG9zaXRpb24odCl7Y29uc3QgZT1tdyh0aGlzLl9lbGVtZW50LHRoaXMuX25hbWUpO3RoaXMuX3Bvc2l0aW9uPXQqdGhpcy5fZHVyYXRpb24sZ3codGhpcy5fZWxlbWVudCwiRGVsYXkiLGAtJHt0aGlzLl9wb3NpdGlvbn1tc2AsZSl9Z2V0UG9zaXRpb24oKXtyZXR1cm4gdGhpcy5fcG9zaXRpb259X2hhbmRsZUNhbGxiYWNrKHQpe2NvbnN0IGU9dC5fbmdUZXN0TWFudWFsVGltZXN0YW1wfHxEYXRlLm5vdygpLG49MWUzKnBhcnNlRmxvYXQodC5lbGFwc2VkVGltZS50b0ZpeGVkKDMpKTt0LmFuaW1hdGlvbk5hbWU9PXRoaXMuX25hbWUmJk1hdGgubWF4KGUtdGhpcy5fc3RhcnRUaW1lLDApPj10aGlzLl9kZWxheSYmbj49dGhpcy5fZHVyYXRpb24mJnRoaXMuZmluaXNoKCl9ZmluaXNoKCl7dGhpcy5fZmluaXNoZWR8fCh0aGlzLl9maW5pc2hlZD0hMCx0aGlzLl9vbkRvbmVGbigpLGZ3KHRoaXMuX2VsZW1lbnQsdGhpcy5fZXZlbnRGbiwhMCkpfWRlc3Ryb3koKXt0aGlzLl9kZXN0cm95ZWR8fCh0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy5maW5pc2goKSwoZnVuY3Rpb24gdChlLG4pe2NvbnN0IG89aHcoZSwiIikuc3BsaXQoIiwiKSxpPXV3KG8sbik7aT49MCYmKG8uc3BsaWNlKGksMSksZ3coZSwiIixvLmpvaW4oIiwiKSkpfSkodGhpcy5fZWxlbWVudCx0aGlzLl9uYW1lKSl9fWZ1bmN0aW9uIHB3KHQsZSxuKXtndyh0LCJQbGF5U3RhdGUiLG4sbXcodCxlKSl9ZnVuY3Rpb24gbXcodCxlKXtjb25zdCBuPWh3KHQsIiIpO3JldHVybiBuLmluZGV4T2YoIiwiKT4wP3V3KG4uc3BsaXQoIiwiKSxlKTp1dyhbbl0sZSl9ZnVuY3Rpb24gdXcodCxlKXtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKylpZih0W25dLmluZGV4T2YoZSk+PTApcmV0dXJuIG47cmV0dXJuLTF9ZnVuY3Rpb24gZncodCxlLG4pe24/dC5yZW1vdmVFdmVudExpc3RlbmVyKGN3LGUpOnQuYWRkRXZlbnRMaXN0ZW5lcihjdyxlKX1mdW5jdGlvbiBndyh0LGUsbixvKXtjb25zdCBpPWx3K2U7aWYobnVsbCE9byl7Y29uc3QgZT10LnN0eWxlW2ldO2lmKGUubGVuZ3RoKXtjb25zdCB0PWUuc3BsaXQoIiwiKTt0W29dPW4sbj10LmpvaW4oIiwiKX19dC5zdHlsZVtpXT1ufWZ1bmN0aW9uIGh3KHQsZSl7cmV0dXJuIHQuc3R5bGVbbHcrZV18fCIifWNsYXNzIGJ3e2NvbnN0cnVjdG9yKHQsZSxuLG8saSxhLHIscyl7dGhpcy5lbGVtZW50PXQsdGhpcy5rZXlmcmFtZXM9ZSx0aGlzLmFuaW1hdGlvbk5hbWU9bix0aGlzLl9kdXJhdGlvbj1vLHRoaXMuX2RlbGF5PWksdGhpcy5fZmluYWxTdHlsZXM9cix0aGlzLl9zcGVjaWFsU3R5bGVzPXMsdGhpcy5fb25Eb25lRm5zPVtdLHRoaXMuX29uU3RhcnRGbnM9W10sdGhpcy5fb25EZXN0cm95Rm5zPVtdLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5jdXJyZW50U25hcHNob3Q9e30sdGhpcy5fc3RhdGU9MCx0aGlzLmVhc2luZz1hfHwibGluZWFyIix0aGlzLnRvdGFsVGltZT1vK2ksdGhpcy5fYnVpbGRTdHlsZXIoKX1vblN0YXJ0KHQpe3RoaXMuX29uU3RhcnRGbnMucHVzaCh0KX1vbkRvbmUodCl7dGhpcy5fb25Eb25lRm5zLnB1c2godCl9b25EZXN0cm95KHQpe3RoaXMuX29uRGVzdHJveUZucy5wdXNoKHQpfWRlc3Ryb3koKXt0aGlzLmluaXQoKSx0aGlzLl9zdGF0ZT49NHx8KHRoaXMuX3N0YXRlPTQsdGhpcy5fc3R5bGVyLmRlc3Ryb3koKSx0aGlzLl9mbHVzaFN0YXJ0Rm5zKCksdGhpcy5fZmx1c2hEb25lRm5zKCksdGhpcy5fc3BlY2lhbFN0eWxlcyYmdGhpcy5fc3BlY2lhbFN0eWxlcy5kZXN0cm95KCksdGhpcy5fb25EZXN0cm95Rm5zLmZvckVhY2goKHQ9PnQoKSkpLHRoaXMuX29uRGVzdHJveUZucz1bXSl9X2ZsdXNoRG9uZUZucygpe3RoaXMuX29uRG9uZUZucy5mb3JFYWNoKCh0PT50KCkpKSx0aGlzLl9vbkRvbmVGbnM9W119X2ZsdXNoU3RhcnRGbnMoKXt0aGlzLl9vblN0YXJ0Rm5zLmZvckVhY2goKHQ9PnQoKSkpLHRoaXMuX29uU3RhcnRGbnM9W119ZmluaXNoKCl7dGhpcy5pbml0KCksdGhpcy5fc3RhdGU+PTN8fCh0aGlzLl9zdGF0ZT0zLHRoaXMuX3N0eWxlci5maW5pc2goKSx0aGlzLl9mbHVzaFN0YXJ0Rm5zKCksdGhpcy5fc3BlY2lhbFN0eWxlcyYmdGhpcy5fc3BlY2lhbFN0eWxlcy5maW5pc2goKSx0aGlzLl9mbHVzaERvbmVGbnMoKSl9c2V0UG9zaXRpb24odCl7dGhpcy5fc3R5bGVyLnNldFBvc2l0aW9uKHQpfWdldFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX3N0eWxlci5nZXRQb3NpdGlvbigpfWhhc1N0YXJ0ZWQoKXtyZXR1cm4gdGhpcy5fc3RhdGU+PTJ9aW5pdCgpe3RoaXMuX3N0YXRlPj0xfHwodGhpcy5fc3RhdGU9MSx0aGlzLl9zdHlsZXIuYXBwbHkoKSx0aGlzLl9kZWxheSYmdGhpcy5fc3R5bGVyLnBhdXNlKCkpfXBsYXkoKXt0aGlzLmluaXQoKSx0aGlzLmhhc1N0YXJ0ZWQoKXx8KHRoaXMuX2ZsdXNoU3RhcnRGbnMoKSx0aGlzLl9zdGF0ZT0yLHRoaXMuX3NwZWNpYWxTdHlsZXMmJnRoaXMuX3NwZWNpYWxTdHlsZXMuc3RhcnQoKSksdGhpcy5fc3R5bGVyLnJlc3VtZSgpfXBhdXNlKCl7dGhpcy5pbml0KCksdGhpcy5fc3R5bGVyLnBhdXNlKCl9cmVzdGFydCgpe3RoaXMucmVzZXQoKSx0aGlzLnBsYXkoKX1yZXNldCgpe3RoaXMuX3N0eWxlci5kZXN0cm95KCksdGhpcy5fYnVpbGRTdHlsZXIoKSx0aGlzLl9zdHlsZXIuYXBwbHkoKX1fYnVpbGRTdHlsZXIoKXt0aGlzLl9zdHlsZXI9bmV3IGR3KHRoaXMuZWxlbWVudCx0aGlzLmFuaW1hdGlvbk5hbWUsdGhpcy5fZHVyYXRpb24sdGhpcy5fZGVsYXksdGhpcy5lYXNpbmcsImZvcndhcmRzIiwoKCk9PnRoaXMuZmluaXNoKCkpKX10cmlnZ2VyQ2FsbGJhY2sodCl7Y29uc3QgZT0ic3RhcnQiPT10P3RoaXMuX29uU3RhcnRGbnM6dGhpcy5fb25Eb25lRm5zO2UuZm9yRWFjaCgodD0+dCgpKSksZS5sZW5ndGg9MH1iZWZvcmVEZXN0cm95KCl7dGhpcy5pbml0KCk7Y29uc3QgdD17fTtpZih0aGlzLmhhc1N0YXJ0ZWQoKSl7Y29uc3QgZT10aGlzLl9zdGF0ZT49MztPYmplY3Qua2V5cyh0aGlzLl9maW5hbFN0eWxlcykuZm9yRWFjaCgobj0+eyJvZmZzZXQiIT1uJiYodFtuXT1lP3RoaXMuX2ZpbmFsU3R5bGVzW25dOnRQKHRoaXMuZWxlbWVudCxuKSl9KSl9dGhpcy5jdXJyZW50U25hcHNob3Q9dH19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NsYXNzIHl3IGV4dGVuZHMgck97Y29uc3RydWN0b3IodCxlKXtzdXBlcigpLHRoaXMuZWxlbWVudD10LHRoaXMuX3N0YXJ0aW5nU3R5bGVzPXt9LHRoaXMuX19pbml0aWFsaXplZD0hMSx0aGlzLl9zdHlsZXM9d08oZSl9aW5pdCgpeyF0aGlzLl9faW5pdGlhbGl6ZWQmJnRoaXMuX3N0YXJ0aW5nU3R5bGVzJiYodGhpcy5fX2luaXRpYWxpemVkPSEwLE9iamVjdC5rZXlzKHRoaXMuX3N0eWxlcykuZm9yRWFjaCgodD0+e3RoaXMuX3N0YXJ0aW5nU3R5bGVzW3RdPXRoaXMuZWxlbWVudC5zdHlsZVt0XX0pKSxzdXBlci5pbml0KCkpfXBsYXkoKXt0aGlzLl9zdGFydGluZ1N0eWxlcyYmKHRoaXMuaW5pdCgpLE9iamVjdC5rZXlzKHRoaXMuX3N0eWxlcykuZm9yRWFjaCgodD0+dGhpcy5lbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KHQsdGhpcy5fc3R5bGVzW3RdKSkpLHN1cGVyLnBsYXkoKSl9ZGVzdHJveSgpe3RoaXMuX3N0YXJ0aW5nU3R5bGVzJiYoT2JqZWN0LmtleXModGhpcy5fc3RhcnRpbmdTdHlsZXMpLmZvckVhY2goKHQ9Pntjb25zdCBlPXRoaXMuX3N0YXJ0aW5nU3R5bGVzW3RdO2U/dGhpcy5lbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KHQsZSk6dGhpcy5lbGVtZW50LnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpfSkpLHRoaXMuX3N0YXJ0aW5nU3R5bGVzPW51bGwsc3VwZXIuZGVzdHJveSgpKX19Y2xhc3MgX3d7Y29uc3RydWN0b3IoKXt0aGlzLl9jb3VudD0wLHRoaXMuX2hlYWQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiaGVhZCIpfXZhbGlkYXRlU3R5bGVQcm9wZXJ0eSh0KXtyZXR1cm4gdk8odCl9bWF0Y2hlc0VsZW1lbnQodCxlKXtyZXR1cm4geE8odCxlKX1jb250YWluc0VsZW1lbnQodCxlKXtyZXR1cm4gT08odCxlKX1xdWVyeSh0LGUsbil7cmV0dXJuIFBPKHQsZSxuKX1jb21wdXRlU3R5bGUodCxlLG4pe3JldHVybiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KVtlXX1idWlsZEtleWZyYW1lRWxlbWVudCh0LGUsbil7bj1uLm1hcCgodD0+d08odCkpKTtsZXQgbz1gQGtleWZyYW1lcyAke2V9IHtcbmAsaT0iIjtuLmZvckVhY2goKHQ9PntpPSIgIjtjb25zdCBlPXBhcnNlRmxvYXQodC5vZmZzZXQpO28rPWAke2l9JHsxMDAqZX0lIHtcbmAsaSs9IiAiLE9iamVjdC5rZXlzKHQpLmZvckVhY2goKGU9Pntjb25zdCBuPXRbZV07c3dpdGNoKGUpe2Nhc2Uib2Zmc2V0IjpyZXR1cm47Y2FzZSJlYXNpbmciOnJldHVybiB2b2lkKG4mJihvKz1gJHtpfWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246ICR7bn07XG5gKSk7ZGVmYXVsdDpyZXR1cm4gdm9pZChvKz1gJHtpfSR7ZX06ICR7bn07XG5gKX19KSksbys9YCR7aX19XG5gfSkpLG8rPSJ9XG4iO2NvbnN0IGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtyZXR1cm4gYS50ZXh0Q29udGVudD1vLGF9YW5pbWF0ZSh0LGUsbixvLGksYT1bXSxyKXsoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJnImJihmdW5jdGlvbiBzKCl7Q3d8fChjb25zb2xlLndhcm4oIkBhbmd1bGFyL2FuaW1hdGlvbnM6IHBsZWFzZSBsb2FkIHRoZSB3ZWItYW5pbWF0aW9ucy5qcyBwb2x5ZmlsbCB0byBhbGxvdyBwcm9ncmFtbWF0aWMgYWNjZXNzLi4uXG4iLCIgIHZpc2l0IGh0dHBzOi8vYml0Lmx5L0lXdWthbSB0byBsZWFybiBtb3JlIGFib3V0IHVzaW5nIHRoZSB3ZWItYW5pbWF0aW9uLWpzIHBvbHlmaWxsLiIpLEN3PSEwKX0pKCk7Y29uc3QgbD1hLmZpbHRlcigodD0+dCBpbnN0YW5jZW9mIGJ3KSksYz17fTtKTyhuLG8pJiZsLmZvckVhY2goKHQ9PntsZXQgZT10LmN1cnJlbnRTbmFwc2hvdDtPYmplY3Qua2V5cyhlKS5mb3JFYWNoKCh0PT5jW3RdPWVbdF0pKX0pKTtjb25zdCBkPShmdW5jdGlvbiBwKHQpe2xldCBlPXt9O3JldHVybiB0JiYoQXJyYXkuaXNBcnJheSh0KT90Olt0XSkuZm9yRWFjaCgodD0+e09iamVjdC5rZXlzKHQpLmZvckVhY2goKG49Pnsib2Zmc2V0IiE9biYmImVhc2luZyIhPW4mJihlW25dPXRbbl0pfSkpfSkpLGV9KShlPVFPKHQsZSxjKSk7aWYoMD09bilyZXR1cm4gbmV3IHl3KHQsZCk7Y29uc3QgbT0iZ2VuX2Nzc19rZl8iK3RoaXMuX2NvdW50KyssdT10aGlzLmJ1aWxkS2V5ZnJhbWVFbGVtZW50KHQsbSxlKTtkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJoZWFkIikuYXBwZW5kQ2hpbGQodSk7Y29uc3QgZj1pdyh0LGUpLGc9bmV3IGJ3KHQsZSxtLG4sbyxpLGQsZik7cmV0dXJuIGcub25EZXN0cm95KCgoKT0+KGZ1bmN0aW9uIHQoZSl7ZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGUpfSkodSkpKSxnfX1sZXQgQ3c9ITE7Y2xhc3MgTXd7Y29uc3RydWN0b3IodCxlLG4sbyl7dGhpcy5lbGVtZW50PXQsdGhpcy5rZXlmcmFtZXM9ZSx0aGlzLm9wdGlvbnM9bix0aGlzLl9zcGVjaWFsU3R5bGVzPW8sdGhpcy5fb25Eb25lRm5zPVtdLHRoaXMuX29uU3RhcnRGbnM9W10sdGhpcy5fb25EZXN0cm95Rm5zPVtdLHRoaXMuX2luaXRpYWxpemVkPSExLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMudGltZT0wLHRoaXMucGFyZW50UGxheWVyPW51bGwsdGhpcy5jdXJyZW50U25hcHNob3Q9e30sdGhpcy5fZHVyYXRpb249bi5kdXJhdGlvbix0aGlzLl9kZWxheT1uLmRlbGF5fHwwLHRoaXMudGltZT10aGlzLl9kdXJhdGlvbit0aGlzLl9kZWxheX1fb25GaW5pc2goKXt0aGlzLl9maW5pc2hlZHx8KHRoaXMuX2ZpbmlzaGVkPSEwLHRoaXMuX29uRG9uZUZucy5mb3JFYWNoKCh0PT50KCkpKSx0aGlzLl9vbkRvbmVGbnM9W10pfWluaXQoKXt0aGlzLl9idWlsZFBsYXllcigpLHRoaXMuX3ByZXBhcmVQbGF5ZXJCZWZvcmVTdGFydCgpfV9idWlsZFBsYXllcigpe2lmKHRoaXMuX2luaXRpYWxpemVkKXJldHVybjt0aGlzLl9pbml0aWFsaXplZD0hMDtjb25zdCB0PXRoaXMua2V5ZnJhbWVzO3RoaXMuZG9tUGxheWVyPXRoaXMuX3RyaWdnZXJXZWJBbmltYXRpb24odGhpcy5lbGVtZW50LHQsdGhpcy5vcHRpb25zKSx0aGlzLl9maW5hbEtleWZyYW1lPXQubGVuZ3RoP3RbdC5sZW5ndGgtMV06e30sdGhpcy5kb21QbGF5ZXIuYWRkRXZlbnRMaXN0ZW5lcigiZmluaXNoIiwoKCk9PnRoaXMuX29uRmluaXNoKCkpKX1fcHJlcGFyZVBsYXllckJlZm9yZVN0YXJ0KCl7dGhpcy5fZGVsYXk/dGhpcy5fcmVzZXREb21QbGF5ZXJTdGF0ZSgpOnRoaXMuZG9tUGxheWVyLnBhdXNlKCl9X3RyaWdnZXJXZWJBbmltYXRpb24odCxlLG4pe3JldHVybiB0LmFuaW1hdGUoZSxuKX1vblN0YXJ0KHQpe3RoaXMuX29uU3RhcnRGbnMucHVzaCh0KX1vbkRvbmUodCl7dGhpcy5fb25Eb25lRm5zLnB1c2godCl9b25EZXN0cm95KHQpe3RoaXMuX29uRGVzdHJveUZucy5wdXNoKHQpfXBsYXkoKXt0aGlzLl9idWlsZFBsYXllcigpLHRoaXMuaGFzU3RhcnRlZCgpfHwodGhpcy5fb25TdGFydEZucy5mb3JFYWNoKCh0PT50KCkpKSx0aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX3N0YXJ0ZWQ9ITAsdGhpcy5fc3BlY2lhbFN0eWxlcyYmdGhpcy5fc3BlY2lhbFN0eWxlcy5zdGFydCgpKSx0aGlzLmRvbVBsYXllci5wbGF5KCl9cGF1c2UoKXt0aGlzLmluaXQoKSx0aGlzLmRvbVBsYXllci5wYXVzZSgpfWZpbmlzaCgpe3RoaXMuaW5pdCgpLHRoaXMuX3NwZWNpYWxTdHlsZXMmJnRoaXMuX3NwZWNpYWxTdHlsZXMuZmluaXNoKCksdGhpcy5fb25GaW5pc2goKSx0aGlzLmRvbVBsYXllci5maW5pc2goKX1yZXNldCgpe3RoaXMuX3Jlc2V0RG9tUGxheWVyU3RhdGUoKSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMX1fcmVzZXREb21QbGF5ZXJTdGF0ZSgpe3RoaXMuZG9tUGxheWVyJiZ0aGlzLmRvbVBsYXllci5jYW5jZWwoKX1yZXN0YXJ0KCl7dGhpcy5yZXNldCgpLHRoaXMucGxheSgpfWhhc1N0YXJ0ZWQoKXtyZXR1cm4gdGhpcy5fc3RhcnRlZH1kZXN0cm95KCl7dGhpcy5fZGVzdHJveWVkfHwodGhpcy5fZGVzdHJveWVkPSEwLHRoaXMuX3Jlc2V0RG9tUGxheWVyU3RhdGUoKSx0aGlzLl9vbkZpbmlzaCgpLHRoaXMuX3NwZWNpYWxTdHlsZXMmJnRoaXMuX3NwZWNpYWxTdHlsZXMuZGVzdHJveSgpLHRoaXMuX29uRGVzdHJveUZucy5mb3JFYWNoKCh0PT50KCkpKSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10pfXNldFBvc2l0aW9uKHQpe3ZvaWQgMD09PXRoaXMuZG9tUGxheWVyJiZ0aGlzLmluaXQoKSx0aGlzLmRvbVBsYXllci5jdXJyZW50VGltZT10KnRoaXMudGltZX1nZXRQb3NpdGlvbigpe3JldHVybiB0aGlzLmRvbVBsYXllci5jdXJyZW50VGltZS90aGlzLnRpbWV9Z2V0IHRvdGFsVGltZSgpe3JldHVybiB0aGlzLl9kZWxheSt0aGlzLl9kdXJhdGlvbn1iZWZvcmVEZXN0cm95KCl7Y29uc3QgdD17fTt0aGlzLmhhc1N0YXJ0ZWQoKSYmT2JqZWN0LmtleXModGhpcy5fZmluYWxLZXlmcmFtZSkuZm9yRWFjaCgoZT0+eyJvZmZzZXQiIT1lJiYodFtlXT10aGlzLl9maW5pc2hlZD90aGlzLl9maW5hbEtleWZyYW1lW2VdOnRQKHRoaXMuZWxlbWVudCxlKSl9KSksdGhpcy5jdXJyZW50U25hcHNob3Q9dH10cmlnZ2VyQ2FsbGJhY2sodCl7Y29uc3QgZT0ic3RhcnQiPT10P3RoaXMuX29uU3RhcnRGbnM6dGhpcy5fb25Eb25lRm5zO2UuZm9yRWFjaCgodD0+dCgpKSksZS5sZW5ndGg9MH19Y2xhc3Mgdnd7Y29uc3RydWN0b3IoKXt0aGlzLl9pc05hdGl2ZUltcGw9L1x7XHMqXFtuYXRpdmVccytjb2RlXF1ccypcfS8udGVzdCh4dygpLnRvU3RyaW5nKCkpLHRoaXMuX2Nzc0tleWZyYW1lc0RyaXZlcj1uZXcgX3d9dmFsaWRhdGVTdHlsZVByb3BlcnR5KHQpe3JldHVybiB2Tyh0KX1tYXRjaGVzRWxlbWVudCh0LGUpe3JldHVybiB4Tyh0LGUpfWNvbnRhaW5zRWxlbWVudCh0LGUpe3JldHVybiBPTyh0LGUpfXF1ZXJ5KHQsZSxuKXtyZXR1cm4gUE8odCxlLG4pfWNvbXB1dGVTdHlsZSh0LGUsbil7cmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQpW2VdfW92ZXJyaWRlV2ViQW5pbWF0aW9uc1N1cHBvcnQodCl7dGhpcy5faXNOYXRpdmVJbXBsPXR9YW5pbWF0ZSh0LGUsbixvLGksYT1bXSxyKXtpZighciYmIXRoaXMuX2lzTmF0aXZlSW1wbClyZXR1cm4gdGhpcy5fY3NzS2V5ZnJhbWVzRHJpdmVyLmFuaW1hdGUodCxlLG4sbyxpLGEpO2NvbnN0IHM9e2R1cmF0aW9uOm4sZGVsYXk6byxmaWxsOjA9PW8/ImJvdGgiOiJmb3J3YXJkcyJ9O2kmJihzLmVhc2luZz1pKTtjb25zdCBsPXt9LGM9YS5maWx0ZXIoKHQ9PnQgaW5zdGFuY2VvZiBNdykpO0pPKG4sbykmJmMuZm9yRWFjaCgodD0+e2xldCBlPXQuY3VycmVudFNuYXBzaG90O09iamVjdC5rZXlzKGUpLmZvckVhY2goKHQ9PmxbdF09ZVt0XSkpfSkpO2NvbnN0IGQ9aXcodCxlPVFPKHQsZT1lLm1hcCgodD0+TE8odCwhMSkpKSxsKSk7cmV0dXJuIG5ldyBNdyh0LGUscyxkKX19ZnVuY3Rpb24geHcoKXsKLyoqCiAgICAgKiBAbGljZW5zZSBBbmd1bGFyIHYxMS4yLjE0CiAgICAgKiAoYykgMjAxMC0yMDIxIEdvb2dsZSBMTEMuIGh0dHBzOi8vYW5ndWxhci5pby8KICAgICAqIExpY2Vuc2U6IE1JVAogICAgICovCnJldHVybihmdW5jdGlvbiB0KCl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJnZvaWQgMCE9PXdpbmRvdy5kb2N1bWVudH0pKCkmJkVsZW1lbnQucHJvdG90eXBlLmFuaW1hdGV8fHt9fQovKioKICAgICAqIEBsaWNlbnNlIEFuZ3VsYXIgdjExLjIuMTQKICAgICAqIChjKSAyMDEwLTIwMjEgR29vZ2xlIExMQy4gaHR0cHM6Ly9hbmd1bGFyLmlvLwogICAgICogTGljZW5zZTogTUlUCiAgICAgKi9jbGFzcyBPdyBleHRlbmRzIFp4e2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIoKSx0aGlzLl9uZXh0QW5pbWF0aW9uSWQ9MCx0aGlzLl9yZW5kZXJlcj10LmNyZWF0ZVJlbmRlcmVyKGUuYm9keSx7aWQ6IjAiLGVuY2Fwc3VsYXRpb246UG8uTm9uZSxzdHlsZXM6W10sZGF0YTp7YW5pbWF0aW9uOltdfX0pfWJ1aWxkKHQpe2NvbnN0IGU9dGhpcy5fbmV4dEFuaW1hdGlvbklkLnRvU3RyaW5nKCk7dGhpcy5fbmV4dEFuaW1hdGlvbklkKys7Y29uc3Qgbj1BcnJheS5pc0FycmF5KHQpP1F4KHQpOnQ7cmV0dXJuIGt3KHRoaXMuX3JlbmRlcmVyLG51bGwsZSwicmVnaXN0ZXIiLFtuXSksbmV3IFB3KGUsdGhpcy5fcmVuZGVyZXIpfX1Pdy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8T3cpKHVzKG1oKSx1cyhVQykpfSxPdy7JtXByb3Y9bG8oe3Rva2VuOk93LGZhY3Rvcnk6T3cuybVmYWN9KSxPdy5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOm1ofSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbVUNdfV19XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKE93LFt7dHlwZTpKbX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTptaH0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W1VDXX1dfV19KSxudWxsKTtjbGFzcyBQdyBleHRlbmRzIGNsYXNze317Y29uc3RydWN0b3IodCxlKXtzdXBlcigpLHRoaXMuX2lkPXQsdGhpcy5fcmVuZGVyZXI9ZX1jcmVhdGUodCxlKXtyZXR1cm4gbmV3IHd3KHRoaXMuX2lkLHQsZXx8e30sdGhpcy5fcmVuZGVyZXIpfX1jbGFzcyB3d3tjb25zdHJ1Y3Rvcih0LGUsbixvKXt0aGlzLmlkPXQsdGhpcy5lbGVtZW50PWUsdGhpcy5fcmVuZGVyZXI9byx0aGlzLnBhcmVudFBsYXllcj1udWxsLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy50b3RhbFRpbWU9MCx0aGlzLl9jb21tYW5kKCJjcmVhdGUiLG4pfV9saXN0ZW4odCxlKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXIubGlzdGVuKHRoaXMuZWxlbWVudCxgQEAke3RoaXMuaWR9OiR7dH1gLGUpfV9jb21tYW5kKHQsLi4uZSl7cmV0dXJuIGt3KHRoaXMuX3JlbmRlcmVyLHRoaXMuZWxlbWVudCx0aGlzLmlkLHQsZSl9b25Eb25lKHQpe3RoaXMuX2xpc3RlbigiZG9uZSIsdCl9b25TdGFydCh0KXt0aGlzLl9saXN0ZW4oInN0YXJ0Iix0KX1vbkRlc3Ryb3kodCl7dGhpcy5fbGlzdGVuKCJkZXN0cm95Iix0KX1pbml0KCl7dGhpcy5fY29tbWFuZCgiaW5pdCIpfWhhc1N0YXJ0ZWQoKXtyZXR1cm4gdGhpcy5fc3RhcnRlZH1wbGF5KCl7dGhpcy5fY29tbWFuZCgicGxheSIpLHRoaXMuX3N0YXJ0ZWQ9ITB9cGF1c2UoKXt0aGlzLl9jb21tYW5kKCJwYXVzZSIpfXJlc3RhcnQoKXt0aGlzLl9jb21tYW5kKCJyZXN0YXJ0Iil9ZmluaXNoKCl7dGhpcy5fY29tbWFuZCgiZmluaXNoIil9ZGVzdHJveSgpe3RoaXMuX2NvbW1hbmQoImRlc3Ryb3kiKX1yZXNldCgpe3RoaXMuX2NvbW1hbmQoInJlc2V0Iil9c2V0UG9zaXRpb24odCl7dGhpcy5fY29tbWFuZCgic2V0UG9zaXRpb24iLHQpfWdldFBvc2l0aW9uKCl7dmFyIHQsZTtyZXR1cm4gbnVsbCE9PShlPW51bGw9PT0odD10aGlzLl9yZW5kZXJlci5lbmdpbmUucGxheWVyc1srdGhpcy5pZF0pfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmdldFBvc2l0aW9uKCkpJiZ2b2lkIDAhPT1lP2U6MH19ZnVuY3Rpb24ga3codCxlLG4sbyxpKXtyZXR1cm4gdC5zZXRQcm9wZXJ0eShlLGBAQCR7bn06JHtvfWAsaSl9Y29uc3QgU3c9IkAiLER3PSJALmRpc2FibGVkIjtjbGFzcyBFd3tjb25zdHJ1Y3Rvcih0LGUsbil7dGhpcy5kZWxlZ2F0ZT10LHRoaXMuZW5naW5lPWUsdGhpcy5fem9uZT1uLHRoaXMuX2N1cnJlbnRJZD0wLHRoaXMuX21pY3JvdGFza0lkPTEsdGhpcy5fYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyPVtdLHRoaXMuX3JlbmRlcmVyQ2FjaGU9bmV3IE1hcCx0aGlzLl9jZFJlY3VyRGVwdGg9MCx0aGlzLnByb21pc2U9UHJvbWlzZS5yZXNvbHZlKDApLGUub25SZW1vdmFsQ29tcGxldGU9KHQsZSk9PntlJiZlLnBhcmVudE5vZGUodCkmJmUucmVtb3ZlQ2hpbGQodC5wYXJlbnROb2RlLHQpfX1jcmVhdGVSZW5kZXJlcih0LGUpe2NvbnN0IG49dGhpcy5kZWxlZ2F0ZS5jcmVhdGVSZW5kZXJlcih0LGUpO2lmKCEodCYmZSYmZS5kYXRhJiZlLmRhdGEuYW5pbWF0aW9uKSl7bGV0IHQ9dGhpcy5fcmVuZGVyZXJDYWNoZS5nZXQobik7cmV0dXJuIHR8fCh0PW5ldyBBdygiIixuLHRoaXMuZW5naW5lKSx0aGlzLl9yZW5kZXJlckNhY2hlLnNldChuLHQpKSx0fWNvbnN0IG89ZS5pZCxpPWUuaWQrIi0iK3RoaXMuX2N1cnJlbnRJZDt0aGlzLl9jdXJyZW50SWQrKyx0aGlzLmVuZ2luZS5yZWdpc3RlcihpLHQpO2NvbnN0IGE9ZT0+e0FycmF5LmlzQXJyYXkoZSk/ZS5mb3JFYWNoKGEpOnRoaXMuZW5naW5lLnJlZ2lzdGVyVHJpZ2dlcihvLGksdCxlLm5hbWUsZSl9O3JldHVybiBlLmRhdGEuYW5pbWF0aW9uLmZvckVhY2goYSksbmV3IFJ3KHRoaXMsaSxuLHRoaXMuZW5naW5lKX1iZWdpbigpe3RoaXMuX2NkUmVjdXJEZXB0aCsrLHRoaXMuZGVsZWdhdGUuYmVnaW4mJnRoaXMuZGVsZWdhdGUuYmVnaW4oKX1fc2NoZWR1bGVDb3VudFRhc2soKXt0aGlzLnByb21pc2UudGhlbigoKCk9Pnt0aGlzLl9taWNyb3Rhc2tJZCsrfSkpfXNjaGVkdWxlTGlzdGVuZXJDYWxsYmFjayh0LGUsbil7dD49MCYmdDx0aGlzLl9taWNyb3Rhc2tJZD90aGlzLl96b25lLnJ1bigoKCk9PmUobikpKTooMD09dGhpcy5fYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyLmxlbmd0aCYmUHJvbWlzZS5yZXNvbHZlKG51bGwpLnRoZW4oKCgpPT57dGhpcy5fem9uZS5ydW4oKCgpPT57dGhpcy5fYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyLmZvckVhY2goKHQ9Pntjb25zdFtlLG5dPXQ7ZShuKX0pKSx0aGlzLl9hbmltYXRpb25DYWxsYmFja3NCdWZmZXI9W119KSl9KSksdGhpcy5fYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyLnB1c2goW2Usbl0pKX1lbmQoKXt0aGlzLl9jZFJlY3VyRGVwdGgtLSwwPT10aGlzLl9jZFJlY3VyRGVwdGgmJnRoaXMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCgpPT57dGhpcy5fc2NoZWR1bGVDb3VudFRhc2soKSx0aGlzLmVuZ2luZS5mbHVzaCh0aGlzLl9taWNyb3Rhc2tJZCl9KSksdGhpcy5kZWxlZ2F0ZS5lbmQmJnRoaXMuZGVsZWdhdGUuZW5kKCl9d2hlblJlbmRlcmluZ0RvbmUoKXtyZXR1cm4gdGhpcy5lbmdpbmUud2hlblJlbmRlcmluZ0RvbmUoKX19RXcuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEV3KSh1cyhtaCksdXMob3cpLHVzKHRDKSl9LEV3Lsm1cHJvdj1sbyh7dG9rZW46RXcsZmFjdG9yeTpFdy7JtWZhY30pLEV3LmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6bWh9LHt0eXBlOm93fSx7dHlwZTp0Q31dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoRXcsW3t0eXBlOkptfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOm1ofSx7dHlwZTpvd30se3R5cGU6dEN9XX0pLG51bGwpO2NsYXNzIEF3e2NvbnN0cnVjdG9yKHQsZSxuKXt0aGlzLm5hbWVzcGFjZUlkPXQsdGhpcy5kZWxlZ2F0ZT1lLHRoaXMuZW5naW5lPW4sdGhpcy5kZXN0cm95Tm9kZT10aGlzLmRlbGVnYXRlLmRlc3Ryb3lOb2RlP3Q9PmUuZGVzdHJveU5vZGUodCk6bnVsbH1nZXQgZGF0YSgpe3JldHVybiB0aGlzLmRlbGVnYXRlLmRhdGF9ZGVzdHJveSgpe3RoaXMuZW5naW5lLmRlc3Ryb3kodGhpcy5uYW1lc3BhY2VJZCx0aGlzLmRlbGVnYXRlKSx0aGlzLmRlbGVnYXRlLmRlc3Ryb3koKX1jcmVhdGVFbGVtZW50KHQsZSl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuY3JlYXRlRWxlbWVudCh0LGUpfWNyZWF0ZUNvbW1lbnQodCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuY3JlYXRlQ29tbWVudCh0KX1jcmVhdGVUZXh0KHQpe3JldHVybiB0aGlzLmRlbGVnYXRlLmNyZWF0ZVRleHQodCl9YXBwZW5kQ2hpbGQodCxlKXt0aGlzLmRlbGVnYXRlLmFwcGVuZENoaWxkKHQsZSksdGhpcy5lbmdpbmUub25JbnNlcnQodGhpcy5uYW1lc3BhY2VJZCxlLHQsITEpfWluc2VydEJlZm9yZSh0LGUsbixvPSEwKXt0aGlzLmRlbGVnYXRlLmluc2VydEJlZm9yZSh0LGUsbiksdGhpcy5lbmdpbmUub25JbnNlcnQodGhpcy5uYW1lc3BhY2VJZCxlLHQsbyl9cmVtb3ZlQ2hpbGQodCxlLG4pe3RoaXMuZW5naW5lLm9uUmVtb3ZlKHRoaXMubmFtZXNwYWNlSWQsZSx0aGlzLmRlbGVnYXRlLG4pfXNlbGVjdFJvb3RFbGVtZW50KHQsZSl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuc2VsZWN0Um9vdEVsZW1lbnQodCxlKX1wYXJlbnROb2RlKHQpe3JldHVybiB0aGlzLmRlbGVnYXRlLnBhcmVudE5vZGUodCl9bmV4dFNpYmxpbmcodCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUubmV4dFNpYmxpbmcodCl9c2V0QXR0cmlidXRlKHQsZSxuLG8pe3RoaXMuZGVsZWdhdGUuc2V0QXR0cmlidXRlKHQsZSxuLG8pfXJlbW92ZUF0dHJpYnV0ZSh0LGUsbil7dGhpcy5kZWxlZ2F0ZS5yZW1vdmVBdHRyaWJ1dGUodCxlLG4pfWFkZENsYXNzKHQsZSl7dGhpcy5kZWxlZ2F0ZS5hZGRDbGFzcyh0LGUpfXJlbW92ZUNsYXNzKHQsZSl7dGhpcy5kZWxlZ2F0ZS5yZW1vdmVDbGFzcyh0LGUpfXNldFN0eWxlKHQsZSxuLG8pe3RoaXMuZGVsZWdhdGUuc2V0U3R5bGUodCxlLG4sbyl9cmVtb3ZlU3R5bGUodCxlLG4pe3RoaXMuZGVsZWdhdGUucmVtb3ZlU3R5bGUodCxlLG4pfXNldFByb3BlcnR5KHQsZSxuKXtlLmNoYXJBdCgwKT09U3cmJmU9PUR3P3RoaXMuZGlzYWJsZUFuaW1hdGlvbnModCwhIW4pOnRoaXMuZGVsZWdhdGUuc2V0UHJvcGVydHkodCxlLG4pfXNldFZhbHVlKHQsZSl7dGhpcy5kZWxlZ2F0ZS5zZXRWYWx1ZSh0LGUpfWxpc3Rlbih0LGUsbil7cmV0dXJuIHRoaXMuZGVsZWdhdGUubGlzdGVuKHQsZSxuKX1kaXNhYmxlQW5pbWF0aW9ucyh0LGUpe3RoaXMuZW5naW5lLmRpc2FibGVBbmltYXRpb25zKHQsZSl9fWNsYXNzIFJ3IGV4dGVuZHMgQXd7Y29uc3RydWN0b3IodCxlLG4sbyl7c3VwZXIoZSxuLG8pLHRoaXMuZmFjdG9yeT10LHRoaXMubmFtZXNwYWNlSWQ9ZX1zZXRQcm9wZXJ0eSh0LGUsbil7ZS5jaGFyQXQoMCk9PVN3PyIuIj09ZS5jaGFyQXQoMSkmJmU9PUR3P3RoaXMuZGlzYWJsZUFuaW1hdGlvbnModCxuPXZvaWQgMD09PW58fCEhbik6dGhpcy5lbmdpbmUucHJvY2Vzcyh0aGlzLm5hbWVzcGFjZUlkLHQsZS5zdWJzdHIoMSksbik6dGhpcy5kZWxlZ2F0ZS5zZXRQcm9wZXJ0eSh0LGUsbil9bGlzdGVuKHQsZSxuKXtpZihlLmNoYXJBdCgwKT09U3cpe2NvbnN0IG89KGZ1bmN0aW9uIG8odCl7c3dpdGNoKHQpe2Nhc2UiYm9keSI6cmV0dXJuIGRvY3VtZW50LmJvZHk7Y2FzZSJkb2N1bWVudCI6cmV0dXJuIGRvY3VtZW50O2Nhc2Uid2luZG93IjpyZXR1cm4gd2luZG93O2RlZmF1bHQ6cmV0dXJuIHR9fSkodCk7bGV0IGk9ZS5zdWJzdHIoMSksYT0iIjtyZXR1cm4gaS5jaGFyQXQoMCkhPVN3JiYoW2ksYV09KGZ1bmN0aW9uIGkodCl7Y29uc3QgZT10LmluZGV4T2YoIi4iKTtyZXR1cm5bdC5zdWJzdHJpbmcoMCxlKSx0LnN1YnN0cihlKzEpXX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovKShpKSksdGhpcy5lbmdpbmUubGlzdGVuKHRoaXMubmFtZXNwYWNlSWQsbyxpLGEsKHQ9Pnt0aGlzLmZhY3Rvcnkuc2NoZWR1bGVMaXN0ZW5lckNhbGxiYWNrKHQuX2RhdGF8fC0xLG4sdCl9KSl9cmV0dXJuIHRoaXMuZGVsZWdhdGUubGlzdGVuKHQsZSxuKX19Y2xhc3MgVHcgZXh0ZW5kcyBvd3tjb25zdHJ1Y3Rvcih0LGUsbil7c3VwZXIodC5ib2R5LGUsbil9fVR3Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxUdykodXMoVUMpLHVzKFNPKSx1cyhPUCkpfSxUdy7JtXByb3Y9bG8oe3Rva2VuOlR3LGZhY3Rvcnk6VHcuybVmYWN9KSxUdy5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltVQ119XX0se3R5cGU6U099LHt0eXBlOk9QfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihUdyxbe3R5cGU6Sm19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W1VDXX1dfSx7dHlwZTpTT30se3R5cGU6T1B9XX0pLG51bGwpO2NvbnN0IE53PW5ldyBOcigiQW5pbWF0aW9uTW9kdWxlVHlwZSIpLEl3PVt7cHJvdmlkZTpaeCx1c2VDbGFzczpPd30se3Byb3ZpZGU6T1AsdXNlRmFjdG9yeTpmdW5jdGlvbiB6dygpe3JldHVybiBuZXcgUFB9fSx7cHJvdmlkZTpvdyx1c2VDbGFzczpUd30se3Byb3ZpZGU6bWgsdXNlRmFjdG9yeTpmdW5jdGlvbiBIdyh0LGUsbil7cmV0dXJuIG5ldyBFdyh0LGUsbil9LGRlcHM6W2N4LG93LHRDXX1dLEZ3PVt7cHJvdmlkZTpTTyx1c2VGYWN0b3J5OmZ1bmN0aW9uIEx3KCl7cmV0dXJuKGZ1bmN0aW9uIHQoKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgeHcoKX0pKCk/bmV3IHZ3Om5ldyBfd319LHtwcm92aWRlOk53LHVzZVZhbHVlOiJCcm93c2VyQW5pbWF0aW9ucyJ9LC4uLkl3XSxCdz1be3Byb3ZpZGU6U08sdXNlQ2xhc3M6a099LHtwcm92aWRlOk53LHVzZVZhbHVlOiJOb29wQW5pbWF0aW9ucyJ9LC4uLkl3XTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIFZ3e31Wdy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8VncpfSxWdy7JtW1vZD1abyh7dHlwZTpWd30pLFZ3Lsm1aW5qPWNvKHtwcm92aWRlcnM6RncsaW1wb3J0czpbenhdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhWdyx7ZXhwb3J0czpmdW5jdGlvbigpe3JldHVyblt6eF19fSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihWdyxbe3R5cGU6a18sYXJnczpbe2V4cG9ydHM6W3p4XSxwcm92aWRlcnM6Rnd9XX1dLG51bGwsbnVsbCk7Y2xhc3Mgand7fWp3Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxqdyl9LGp3Lsm1bW9kPVpvKHt0eXBlOmp3fSksancuybVpbmo9Y28oe3Byb3ZpZGVyczpCdyxpbXBvcnRzOlt6eF19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKGp3LHtleHBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW3p4XX19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGp3LFt7dHlwZTprXyxhcmdzOlt7ZXhwb3J0czpbenhdLHByb3ZpZGVyczpCd31dfV0sbnVsbCxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZSBOZ1J4IDkuMi4xCiAgICAgKiAoYykgMjAxNS0yMDE4IEJyYW5kb24gUm9iZXJ0cywgTWlrZSBSeWFuLCBSb2IgV29ybWFsZCwgVmljdG9yIFNhdmtpbgogICAgICogTGljZW5zZTogTUlUCiAgICAgKi8KbGV0IFV3PXt9O2Z1bmN0aW9uIFd3KHQsZSl7aWYoVXdbdF09KFV3W3RdfHwwKSsxLCJmdW5jdGlvbiI9PXR5cGVvZiBlKXJldHVybiBHdyh0LCgoLi4ubik9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKC4uLm4pKSx7dHlwZTp0fSkpKTtzd2l0Y2goZT9lLl9hczoiZW1wdHkiKXtjYXNlImVtcHR5IjpyZXR1cm4gR3codCwoKCk9Pih7dHlwZTp0fSkpKTtjYXNlInByb3BzIjpyZXR1cm4gR3codCwoZT0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHt0eXBlOnR9KSkpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIGNvbmZpZy4iKX19ZnVuY3Rpb24gR3codCxlKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInR5cGUiLHt2YWx1ZTp0LHdyaXRhYmxlOiExfSl9Y29uc3QgWXc9IkBuZ3J4L3N0b3JlL2luaXQiO2NsYXNzIHF3IGV4dGVuZHMgSHtjb25zdHJ1Y3Rvcigpe3N1cGVyKHt0eXBlOll3fSl9bmV4dCh0KXtpZigiZnVuY3Rpb24iPT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJcbiAgICAgICAgRGlzcGF0Y2ggZXhwZWN0ZWQgYW4gb2JqZWN0LCBpbnN0ZWFkIGl0IHJlY2VpdmVkIGEgZnVuY3Rpb24uXG4gICAgICAgIElmIHlvdSdyZSB1c2luZyB0aGUgY3JlYXRlQWN0aW9uIGZ1bmN0aW9uLCBtYWtlIHN1cmUgdG8gaW52b2tlIHRoZSBmdW5jdGlvblxuICAgICAgICBiZWZvcmUgZGlzcGF0Y2hpbmcgdGhlIGFjdGlvbi4gRm9yIGV4YW1wbGUsIHNvbWVBY3Rpb24gc2hvdWxkIGJlIHNvbWVBY3Rpb24oKS4iKTtpZih2b2lkIDA9PT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkFjdGlvbnMgbXVzdCBiZSBvYmplY3RzIik7aWYodm9pZCAwPT09dC50eXBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkFjdGlvbnMgbXVzdCBoYXZlIGEgdHlwZSBwcm9wZXJ0eSIpO3N1cGVyLm5leHQodCl9Y29tcGxldGUoKXt9bmdPbkRlc3Ryb3koKXtzdXBlci5jb21wbGV0ZSgpfX1xdy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8cXcpfSxxdy7JtXByb3Y9bG8oe3Rva2VuOnF3LGZhY3Rvcnk6cXcuybVmYWN9KSxxdy5jdG9yUGFyYW1ldGVycz0oKT0+W10sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihxdyxbe3R5cGU6Sm19XSwoZnVuY3Rpb24oKXtyZXR1cm5bXX0pLG51bGwpO2NvbnN0IFp3PVtxd10sWHc9bmV3IE5yKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBSb290IEd1YXJkIiksS3c9bmV3IE5yKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBJbml0aWFsIFN0YXRlIiksSnc9bmV3IE5yKCJAbmdyeC9zdG9yZSBJbml0aWFsIFN0YXRlIiksUXc9bmV3IE5yKCJAbmdyeC9zdG9yZSBSZWR1Y2VyIEZhY3RvcnkiKSwkdz1uZXcgTnIoIkBuZ3J4L3N0b3JlIEludGVybmFsIFJlZHVjZXIgRmFjdG9yeSBQcm92aWRlciIpLHRrPW5ldyBOcigiQG5ncngvc3RvcmUgSW5pdGlhbCBSZWR1Y2VycyIpLGVrPW5ldyBOcigiQG5ncngvc3RvcmUgSW50ZXJuYWwgSW5pdGlhbCBSZWR1Y2VycyIpLG5rPW5ldyBOcigiQG5ncngvc3RvcmUgU3RvcmUgRmVhdHVyZXMiKSxvaz1uZXcgTnIoIkBuZ3J4L3N0b3JlIEludGVybmFsIFN0b3JlIFJlZHVjZXJzIiksaWs9bmV3IE5yKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBGZWF0dXJlIFJlZHVjZXJzIiksYWs9bmV3IE5yKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBGZWF0dXJlIENvbmZpZ3MiKSxyaz1uZXcgTnIoIkBuZ3J4L3N0b3JlIEludGVybmFsIFN0b3JlIEZlYXR1cmVzIiksc2s9bmV3IE5yKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBGZWF0dXJlIFJlZHVjZXJzIFRva2VuIiksbGs9bmV3IE5yKCJAbmdyeC9zdG9yZSBGZWF0dXJlIFJlZHVjZXJzIiksY2s9bmV3IE5yKCJAbmdyeC9zdG9yZSBVc2VyIFByb3ZpZGVkIE1ldGEgUmVkdWNlcnMiKSxkaz1uZXcgTnIoIkBuZ3J4L3N0b3JlIE1ldGEgUmVkdWNlcnMiKSxwaz1uZXcgTnIoIkBuZ3J4L3N0b3JlIEludGVybmFsIFJlc29sdmVkIE1ldGEgUmVkdWNlcnMiKSxtaz1uZXcgTnIoIkBuZ3J4L3N0b3JlIFVzZXIgUnVudGltZSBDaGVja3MgQ29uZmlnIiksdWs9bmV3IE5yKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBVc2VyIFJ1bnRpbWUgQ2hlY2tzIENvbmZpZyIpLGZrPW5ldyBOcigiQG5ncngvc3RvcmUgSW50ZXJuYWwgUnVudGltZSBDaGVja3MiKSxnaz1uZXcgTnIoIkBuZ3J4L3N0b3JlIENoZWNrIGlmIEFjdGlvbiB0eXBlcyBhcmUgdW5pcXVlIik7ZnVuY3Rpb24gaGsodCxlPXt9KXtjb25zdCBuPU9iamVjdC5rZXlzKHQpLG89e307Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspe2NvbnN0IGk9bltlXTsiZnVuY3Rpb24iPT10eXBlb2YgdFtpXSYmKG9baV09dFtpXSl9Y29uc3QgaT1PYmplY3Qua2V5cyhvKTtyZXR1cm4gZnVuY3Rpb24gdChuLGEpe249dm9pZCAwPT09bj9lOm47bGV0IHI9ITE7Y29uc3Qgcz17fTtmb3IobGV0IHQ9MDt0PGkubGVuZ3RoO3QrKyl7Y29uc3QgZT1pW3RdLGw9bltlXSxjPSgwLG9bZV0pKGwsYSk7c1tlXT1jLHI9cnx8YyE9PWx9cmV0dXJuIHI/czpufX1mdW5jdGlvbiBiayguLi50KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoMD09PXQubGVuZ3RoKXJldHVybiBlO2NvbnN0IG49dFt0Lmxlbmd0aC0xXTtyZXR1cm4gdC5zbGljZSgwLC0xKS5yZWR1Y2VSaWdodCgoKHQsZSk9PmUodCkpLG4oZSkpfX1mdW5jdGlvbiB5ayh0LGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpJiZlLmxlbmd0aD4wJiYodD1iay5hcHBseShudWxsLFsuLi5lLHRdKSksKGUsbik9Pntjb25zdCBvPXQoZSk7cmV0dXJuKHQsZSk9Pm8odD12b2lkIDA9PT10P246dCxlKX19Y2xhc3MgX2sgZXh0ZW5kcyB5e31jbGFzcyBDayBleHRlbmRzIHF3e31jbGFzcyBNayBleHRlbmRzIEh7Y29uc3RydWN0b3IodCxlLG4sbyl7c3VwZXIobyhuLGUpKSx0aGlzLmRpc3BhdGNoZXI9dCx0aGlzLmluaXRpYWxTdGF0ZT1lLHRoaXMucmVkdWNlcnM9bix0aGlzLnJlZHVjZXJGYWN0b3J5PW99YWRkRmVhdHVyZSh0KXt0aGlzLmFkZEZlYXR1cmVzKFt0XSl9YWRkRmVhdHVyZXModCl7Y29uc3QgZT10LnJlZHVjZSgoKHQse3JlZHVjZXJzOmUscmVkdWNlckZhY3Rvcnk6bixtZXRhUmVkdWNlcnM6byxpbml0aWFsU3RhdGU6aSxrZXk6YX0pPT57Y29uc3Qgcj0iZnVuY3Rpb24iPT10eXBlb2YgZT8oZnVuY3Rpb24gcyh0KXtjb25zdCBlPUFycmF5LmlzQXJyYXkodCkmJnQubGVuZ3RoPjA/YmsoLi4udCk6dD0+dDtyZXR1cm4odCxuKT0+KHQ9ZSh0KSwoZSxvKT0+dChlPXZvaWQgMD09PWU/bjplLG8pKX0pKG8pKGUsaSk6eWsobixvKShlLGkpO3JldHVybiB0W2FdPXIsdH0pLHt9KTt0aGlzLmFkZFJlZHVjZXJzKGUpfXJlbW92ZUZlYXR1cmUodCl7dGhpcy5yZW1vdmVGZWF0dXJlcyhbdF0pfXJlbW92ZUZlYXR1cmVzKHQpe3RoaXMucmVtb3ZlUmVkdWNlcnModC5tYXAoKHQ9PnQua2V5KSkpfWFkZFJlZHVjZXIodCxlKXt0aGlzLmFkZFJlZHVjZXJzKHtbdF06ZX0pfWFkZFJlZHVjZXJzKHQpe3RoaXMucmVkdWNlcnM9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHRoaXMucmVkdWNlcnMpLHQpLHRoaXMudXBkYXRlUmVkdWNlcnMoT2JqZWN0LmtleXModCkpfXJlbW92ZVJlZHVjZXIodCl7dGhpcy5yZW1vdmVSZWR1Y2VycyhbdF0pfXJlbW92ZVJlZHVjZXJzKHQpe3QuZm9yRWFjaCgodD0+e3RoaXMucmVkdWNlcnM9KGZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gT2JqZWN0LmtleXModCkuZmlsdGVyKCh0PT50IT09bikpLnJlZHVjZSgoKGUsbik9Pk9iamVjdC5hc3NpZ24oZSx7W25dOnRbbl19KSkse30pfSkodGhpcy5yZWR1Y2Vycyx0KX0pKSx0aGlzLnVwZGF0ZVJlZHVjZXJzKHQpfXVwZGF0ZVJlZHVjZXJzKHQpe3RoaXMubmV4dCh0aGlzLnJlZHVjZXJGYWN0b3J5KHRoaXMucmVkdWNlcnMsdGhpcy5pbml0aWFsU3RhdGUpKSx0aGlzLmRpc3BhdGNoZXIubmV4dCh7dHlwZToiQG5ncngvc3RvcmUvdXBkYXRlLXJlZHVjZXJzIixmZWF0dXJlczp0fSl9bmdPbkRlc3Ryb3koKXt0aGlzLmNvbXBsZXRlKCl9fU1rLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxNaykodXMoQ2spLHVzKEp3KSx1cyh0ayksdXMoUXcpKX0sTWsuybVwcm92PWxvKHt0b2tlbjpNayxmYWN0b3J5Ok1rLsm1ZmFjfSksTWsuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpDa30se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W0p3XX1dfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbdGtdfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltRd119XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoTWssW3t0eXBlOkptfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkNrfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbSnddfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOlt0a119XX0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W1F3XX1dfV19KSxudWxsKTtjb25zdCB2az1bTWsse3Byb3ZpZGU6X2ssdXNlRXhpc3Rpbmc6TWt9LHtwcm92aWRlOkNrLHVzZUV4aXN0aW5nOnF3fV07Y2xhc3MgeGsgZXh0ZW5kcyB4e25nT25EZXN0cm95KCl7dGhpcy5jb21wbGV0ZSgpfX14ay7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBPayhlfHx4ayl9LHhrLsm1cHJvdj1sbyh7dG9rZW46eGssZmFjdG9yeTp4ay7JtWZhY30pO2NvbnN0IE9rPXZyKHhrKTsoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHhrLFt7dHlwZTpKbX1dLG51bGwsbnVsbCk7Y29uc3QgUGs9W3hrXTtjbGFzcyB3ayBleHRlbmRzIHl7fWNsYXNzIGtrIGV4dGVuZHMgSHtjb25zdHJ1Y3Rvcih0LGUsbixvKXtzdXBlcihvKTtjb25zdCBpPXQucGlwZSgoZnVuY3Rpb24gcih0LGU9MCl7cmV0dXJuIGZ1bmN0aW9uIG4obyl7cmV0dXJuIG8ubGlmdChuZXcgJCh0LGUpKX19KShqKSkucGlwZShrbihlKSkucGlwZSgoZnVuY3Rpb24gYSh0LGUpe2xldCBuPSExO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPj0yJiYobj0hMCksZnVuY3Rpb24gbyhpKXtyZXR1cm4gaS5saWZ0KG5ldyBYZSh0LGUsbikpfX0pKFNrLHtzdGF0ZTpvfSkpO3RoaXMuc3RhdGVTdWJzY3JpcHRpb249aS5zdWJzY3JpYmUoKCh7c3RhdGU6dCxhY3Rpb246ZX0pPT57dGhpcy5uZXh0KHQpLG4ubmV4dChlKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuc3RhdGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLmNvbXBsZXRlKCl9fWZ1bmN0aW9uIFNrKHQ9e3N0YXRlOnZvaWQgMH0sW2Usbl0pe2NvbnN0e3N0YXRlOm99PXQ7cmV0dXJue3N0YXRlOm4obyxlKSxhY3Rpb246ZX19a2suybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGtrKSh1cyhxdyksdXMoX2spLHVzKHhrKSx1cyhKdykpfSxray7JtXByb3Y9bG8oe3Rva2VuOmtrLGZhY3Rvcnk6a2suybVmYWN9KSxray5JTklUPVl3LGtrLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6cXd9LHt0eXBlOl9rfSx7dHlwZTp4a30se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W0p3XX1dfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihrayxbe3R5cGU6Sm19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6cXd9LHt0eXBlOl9rfSx7dHlwZTp4a30se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W0p3XX1dfV19KSxudWxsKTtjb25zdCBEaz1ba2sse3Byb3ZpZGU6d2ssdXNlRXhpc3Rpbmc6a2t9XTtjbGFzcyBFayBleHRlbmRzIHl7Y29uc3RydWN0b3IodCxlLG4pe3N1cGVyKCksdGhpcy5hY3Rpb25zT2JzZXJ2ZXI9ZSx0aGlzLnJlZHVjZXJNYW5hZ2VyPW4sdGhpcy5zb3VyY2U9dH1zZWxlY3QodCwuLi5lKXtyZXR1cm4gUmsuY2FsbChudWxsLHQsLi4uZSkodGhpcyl9bGlmdCh0KXtjb25zdCBlPW5ldyBFayh0aGlzLHRoaXMuYWN0aW9uc09ic2VydmVyLHRoaXMucmVkdWNlck1hbmFnZXIpO3JldHVybiBlLm9wZXJhdG9yPXQsZX1kaXNwYXRjaCh0KXt0aGlzLmFjdGlvbnNPYnNlcnZlci5uZXh0KHQpfW5leHQodCl7dGhpcy5hY3Rpb25zT2JzZXJ2ZXIubmV4dCh0KX1lcnJvcih0KXt0aGlzLmFjdGlvbnNPYnNlcnZlci5lcnJvcih0KX1jb21wbGV0ZSgpe3RoaXMuYWN0aW9uc09ic2VydmVyLmNvbXBsZXRlKCl9YWRkUmVkdWNlcih0LGUpe3RoaXMucmVkdWNlck1hbmFnZXIuYWRkUmVkdWNlcih0LGUpfXJlbW92ZVJlZHVjZXIodCl7dGhpcy5yZWR1Y2VyTWFuYWdlci5yZW1vdmVSZWR1Y2VyKHQpfX1Fay7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8RWspKHVzKHdrKSx1cyhxdyksdXMoTWspKX0sRWsuybVwcm92PWxvKHt0b2tlbjpFayxmYWN0b3J5OkVrLsm1ZmFjfSksRWsuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTp3a30se3R5cGU6cXd9LHt0eXBlOk1rfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihFayxbe3R5cGU6Sm19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6d2t9LHt0eXBlOnF3fSx7dHlwZTpNa31dfSksbnVsbCk7Y29uc3QgQWs9W0VrXTtmdW5jdGlvbiBSayh0LGUsLi4ubil7cmV0dXJuIGZ1bmN0aW9uIG8oaSl7bGV0IGE7aWYoInN0cmluZyI9PXR5cGVvZiB0KXtjb25zdCBvPVtlLC4uLm5dLmZpbHRlcihCb29sZWFuKTthPWkucGlwZSgoZnVuY3Rpb24gciguLi50KXtjb25zdCBlPXQubGVuZ3RoO2lmKDA9PT1lKXRocm93IG5ldyBFcnJvcigibGlzdCBvZiBwcm9wZXJ0aWVzIGNhbm5vdCBiZSBlbXB0eS4iKTtyZXR1cm4gaHQoKG49PntsZXQgbz1uO2ZvcihsZXQgbj0wO248ZTtuKyspe2NvbnN0IGU9b1t0W25dXTtpZih2b2lkIDA9PT1lKXJldHVybjtvPWV9cmV0dXJuIG99KSl9KSh0LC4uLm8pKX1lbHNle2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoYFVuZXhwZWN0ZWQgdHlwZSAnJHt0eXBlb2YgdH0nIGluIHNlbGVjdCBvcGVyYXRvciwgZXhwZWN0ZWQgJ3N0cmluZycgb3IgJ2Z1bmN0aW9uJ2ApO2E9aS5waXBlKGh0KChuPT50KG4sZSkpKSl9cmV0dXJuIGEucGlwZShrZSgpKX19ZnVuY3Rpb24gVGsodCxlKXtyZXR1cm4gdD09PWV9ZnVuY3Rpb24gTmsodCxlLG4pe2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKWlmKCFuKHRbb10sZVtvXSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gSWsodCxlPVRrLG49VGspe2xldCBvLGk9bnVsbCxhPW51bGw7cmV0dXJue21lbW9pemVkOmZ1bmN0aW9uIHIoKXtpZih2b2lkIDAhPT1vKXJldHVybiBvLnJlc3VsdDtpZighaSlyZXR1cm4gYT10LmFwcGx5KG51bGwsYXJndW1lbnRzKSxpPWFyZ3VtZW50cyxhO2lmKCFOayhhcmd1bWVudHMsaSxlKSlyZXR1cm4gYTtjb25zdCByPXQuYXBwbHkobnVsbCxhcmd1bWVudHMpO3JldHVybiBpPWFyZ3VtZW50cyxuKGEscik/YTooYT1yLHIpfSxyZXNldDpmdW5jdGlvbiBzKCl7aT1udWxsLGE9bnVsbH0sc2V0UmVzdWx0OmZ1bmN0aW9uIGwodCl7bz17cmVzdWx0OnR9fSxjbGVhclJlc3VsdDpmdW5jdGlvbiBjKCl7bz12b2lkIDB9fX1mdW5jdGlvbiB6ayguLi50KXtyZXR1cm4oZnVuY3Rpb24gZSh0LG49e3N0YXRlRm46SGt9KXtyZXR1cm4gZnVuY3Rpb24oLi4uZSl7bGV0IG89ZTtpZihBcnJheS5pc0FycmF5KG9bMF0pKXtjb25zdFt0LC4uLmVdPW87bz1bLi4udCwuLi5lXX1jb25zdCBpPW8uc2xpY2UoMCxvLmxlbmd0aC0xKSxhPW9bby5sZW5ndGgtMV0scj1pLmZpbHRlcigodD0+dC5yZWxlYXNlJiYiZnVuY3Rpb24iPT10eXBlb2YgdC5yZWxlYXNlKSkscz10KChmdW5jdGlvbiguLi50KXtyZXR1cm4gYS5hcHBseShudWxsLHQpfSkpLGw9SWsoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4uc3RhdGVGbi5hcHBseShudWxsLFt0LGksZSxzXSl9KSk7cmV0dXJuIE9iamVjdC5hc3NpZ24obC5tZW1vaXplZCx7cmVsZWFzZTpmdW5jdGlvbiBjKCl7bC5yZXNldCgpLHMucmVzZXQoKSxyLmZvckVhY2goKHQ9PnQucmVsZWFzZSgpKSl9LHByb2plY3RvcjpzLm1lbW9pemVkLHNldFJlc3VsdDpsLnNldFJlc3VsdCxjbGVhclJlc3VsdDpsLmNsZWFyUmVzdWx0fSl9fSkoSWspKC4uLnQpfWZ1bmN0aW9uIEhrKHQsZSxuLG8pe2lmKHZvaWQgMD09PW4pe2NvbnN0IG49ZS5tYXAoKGU9PmUodCkpKTtyZXR1cm4gby5tZW1vaXplZC5hcHBseShudWxsLG4pfWNvbnN0IGk9ZS5tYXAoKGU9PmUodCxuKSkpO3JldHVybiBvLm1lbW9pemVkLmFwcGx5KG51bGwsWy4uLmksbl0pfWZ1bmN0aW9uIEZrKHQpe3JldHVybiB6aygoZT0+e2NvbnN0IG49ZVt0XTtyZXR1cm4gdUMoKSYmISh0IGluIGUpJiZjb25zb2xlLndhcm4oYEBuZ3J4L3N0b3JlOiBUaGUgZmVhdHVyZSBuYW1lICIke3R9IiBkb2VzIG5vdCBleGlzdCBpbiB0aGUgc3RhdGUsIHRoZXJlZm9yZSBjcmVhdGVGZWF0dXJlU2VsZWN0b3IgY2Fubm90IGFjY2VzcyBpdC4gIEJlIHN1cmUgaXQgaXMgaW1wb3J0ZWQgaW4gYSBsb2FkZWQgbW9kdWxlIHVzaW5nIFN0b3JlTW9kdWxlLmZvclJvb3QoJyR7dH0nLCAuLi4pIG9yIFN0b3JlTW9kdWxlLmZvckZlYXR1cmUoJyR7dH0nLCAuLi4pLiAgSWYgdGhlIGRlZmF1bHQgc3RhdGUgaXMgaW50ZW5kZWQgdG8gYmUgdW5kZWZpbmVkLCBhcyBpcyB0aGUgY2FzZSB3aXRoIHJvdXRlciBzdGF0ZSwgdGhpcyBkZXZlbG9wbWVudC1vbmx5IHdhcm5pbmcgbWVzc2FnZSBjYW4gYmUgaWdub3JlZC5gKSxufSksKHQ9PnQpKX1jb25zdCBMaz0iaHR0cHM6Ly9uZ3J4LmlvL2d1aWRlL3N0b3JlL2NvbmZpZ3VyYXRpb24vcnVudGltZS1jaGVja3MiO2Z1bmN0aW9uIEJrKHQpe3JldHVybiB2b2lkIDA9PT10fWZ1bmN0aW9uIFZrKHQpe3JldHVybiBudWxsPT09dH1mdW5jdGlvbiBqayh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KX1mdW5jdGlvbiBVayh0KXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHQmJm51bGwhPT10fWZ1bmN0aW9uIFdrKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0fWZ1bmN0aW9uIEdrKHQpe09iamVjdC5mcmVlemUodCk7Y29uc3QgZT1Xayh0KTtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModCkuZm9yRWFjaCgobj0+e2lmKCFuLnN0YXJ0c1dpdGgoIsm1IikmJihmdW5jdGlvbiBvKHQsZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGUpfSkodCxuKSYmKCFlfHwiY2FsbGVyIiE9PW4mJiJjYWxsZWUiIT09biYmImFyZ3VtZW50cyIhPT1uKSl7Y29uc3QgZT10W25dOyFVayhlKSYmIVdrKGUpfHxPYmplY3QuaXNGcm96ZW4oZSl8fEdrKGUpfX0pKSx0fWZ1bmN0aW9uIFlrKHQsZT1bXSl7cmV0dXJuKEJrKHQpfHxWayh0KSkmJjA9PT1lLmxlbmd0aD97cGF0aDpbInJvb3QiXSx2YWx1ZTp0fTpPYmplY3Qua2V5cyh0KS5yZWR1Y2UoKChuLG8pPT57aWYobilyZXR1cm4gbjtjb25zdCBpPXRbb107cmV0dXJuKGZ1bmN0aW9uIGEodCl7cmV0dXJuIFdrKHQpJiZ0Lmhhc093blByb3BlcnR5KCLJtWNtcCIpfSkoaSk/bjohKEJrKGkpfHxWayhpKXx8KGZ1bmN0aW9uIHIodCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0fSkoaSl8fChmdW5jdGlvbiBzKHQpe3JldHVybiJib29sZWFuIj09dHlwZW9mIHR9KShpKXx8KGZ1bmN0aW9uIGwodCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0fSkoaSl8fGprKGkpKSYmKChmdW5jdGlvbiBjKHQpe2lmKCEoZnVuY3Rpb24gZSh0KXtyZXR1cm4gVWsodCkmJiFqayh0KX0pKHQpKXJldHVybiExO2NvbnN0IG49T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpO3JldHVybiBuPT09T2JqZWN0LnByb3RvdHlwZXx8bnVsbD09PW59KShpKT9ZayhpLFsuLi5lLG9dKTp7cGF0aDpbLi4uZSxvXSx2YWx1ZTppfSl9KSwhMSl9ZnVuY3Rpb24gcWsodCxlKXtpZighMT09PXQpcmV0dXJuO2NvbnN0IG49dC5wYXRoLmpvaW4oIi4iKSxvPW5ldyBFcnJvcihgRGV0ZWN0ZWQgdW5zZXJpYWxpemFibGUgJHtlfSBhdCAiJHtufSIuICR7TGt9I3N0cmljdCR7ZX1zZXJpYWxpemFiaWxpdHlgKTt0aHJvdyBvLnZhbHVlPXQudmFsdWUsby51bnNlcmlhbGl6YWJsZVBhdGg9bixvfWZ1bmN0aW9uIFprKHQpe3JldHVybiB1QygpP09iamVjdC5hc3NpZ24oe3N0cmljdFN0YXRlU2VyaWFsaXphYmlsaXR5OiExLHN0cmljdEFjdGlvblNlcmlhbGl6YWJpbGl0eTohMSxzdHJpY3RTdGF0ZUltbXV0YWJpbGl0eTohMCxzdHJpY3RBY3Rpb25JbW11dGFiaWxpdHk6ITAsc3RyaWN0QWN0aW9uV2l0aGluTmdab25lOiExLHN0cmljdEFjdGlvblR5cGVVbmlxdWVuZXNzOiExfSx0KTp7c3RyaWN0U3RhdGVTZXJpYWxpemFiaWxpdHk6ITEsc3RyaWN0QWN0aW9uU2VyaWFsaXphYmlsaXR5OiExLHN0cmljdFN0YXRlSW1tdXRhYmlsaXR5OiExLHN0cmljdEFjdGlvbkltbXV0YWJpbGl0eTohMSxzdHJpY3RBY3Rpb25XaXRoaW5OZ1pvbmU6ITEsc3RyaWN0QWN0aW9uVHlwZVVuaXF1ZW5lc3M6ITF9fWZ1bmN0aW9uIFhrKHtzdHJpY3RBY3Rpb25TZXJpYWxpemFiaWxpdHk6dCxzdHJpY3RTdGF0ZVNlcmlhbGl6YWJpbGl0eTplfSl7cmV0dXJuIG49PnR8fGU/KGZ1bmN0aW9uIG8odCxlKXtyZXR1cm4gZnVuY3Rpb24obixvKXtlLmFjdGlvbihvKSYmcWsoWWsobyksImFjdGlvbiIpO2NvbnN0IGk9dChuLG8pO3JldHVybiBlLnN0YXRlKCkmJnFrKFlrKGkpLCJzdGF0ZSIpLGl9fSkobix7YWN0aW9uOmU9PnQmJiFKayhlKSxzdGF0ZTooKT0+ZX0pOm59ZnVuY3Rpb24gS2soe3N0cmljdEFjdGlvbkltbXV0YWJpbGl0eTp0LHN0cmljdFN0YXRlSW1tdXRhYmlsaXR5OmV9KXtyZXR1cm4gbj0+dHx8ZT8oZnVuY3Rpb24gbyh0LGUpe3JldHVybiBmdW5jdGlvbihuLG8pe2NvbnN0IGk9ZS5hY3Rpb24obyk/R2sobyk6byxhPXQobixpKTtyZXR1cm4gZS5zdGF0ZSgpP0drKGEpOmF9fSkobix7YWN0aW9uOmU9PnQmJiFKayhlKSxzdGF0ZTooKT0+ZX0pOm59ZnVuY3Rpb24gSmsodCl7cmV0dXJuIHQudHlwZS5zdGFydHNXaXRoKCJAbmdyeCIpfWZ1bmN0aW9uIFFrKHtzdHJpY3RBY3Rpb25XaXRoaW5OZ1pvbmU6dH0pe3JldHVybiBlPT50PyhmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4sbyl7aWYoZS5hY3Rpb24obykmJiF0Qy5pc0luQW5ndWxhclpvbmUoKSl0aHJvdyBuZXcgRXJyb3IoYEFjdGlvbiAnJHtvLnR5cGV9JyBydW5uaW5nIG91dHNpZGUgTmdab25lLiAke0xrfSNzdHJpY3RhY3Rpb253aXRoaW5uZ3pvbmVgKTtyZXR1cm4gdChuLG8pfX0pKGUse2FjdGlvbjplPT50JiYhSmsoZSl9KTplfWZ1bmN0aW9uICRrKCl7cmV0dXJuW3twcm92aWRlOmdrLG11bHRpOiEwLGRlcHM6W2ZrXSx1c2VGYWN0b3J5OmVTfV19ZnVuY3Rpb24gdFModCl7cmV0dXJuIHR9ZnVuY3Rpb24gZVModCl7aWYoIXQuc3RyaWN0QWN0aW9uVHlwZVVuaXF1ZW5lc3MpcmV0dXJuO2NvbnN0IGU9T2JqZWN0LmVudHJpZXMoVXcpLmZpbHRlcigoKFssdF0pPT50PjEpKS5tYXAoKChbdF0pPT50KSk7aWYoZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKGBBY3Rpb24gdHlwZXMgYXJlIHJlZ2lzdGVyZWQgbW9yZSB0aGFuIG9uY2UsICR7ZS5tYXAoKHQ9PmAiJHt0fSJgKSkuam9pbigiLCAiKX0uICR7TGt9I3N0cmljdGFjdGlvbnR5cGV1bmlxdWVuZXNzYCl9Y2xhc3MgblN7Y29uc3RydWN0b3IodCxlLG4sbyxpLGEpe319blMuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fG5TKSh1cyhxdyksdXMoX2spLHVzKHhrKSx1cyhFayksdXMoWHcsOCksdXMoZ2ssOCkpfSxuUy7JtW1vZD1abyh7dHlwZTpuU30pLG5TLsm1aW5qPWNvKHt9KSxuUy5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOnF3fSx7dHlwZTpfa30se3R5cGU6eGt9LHt0eXBlOkVrfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W1h3XX1dfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W2drXX1dfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihuUyxbe3R5cGU6a18sYXJnczpbe31dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOnF3fSx7dHlwZTpfa30se3R5cGU6eGt9LHt0eXBlOkVrfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W1h3XX1dfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W2drXX1dfV19KSxudWxsKTtjbGFzcyBvU3tjb25zdHJ1Y3Rvcih0LGUsbixvLGkpe3RoaXMuZmVhdHVyZXM9dCx0aGlzLmZlYXR1cmVSZWR1Y2Vycz1lLHRoaXMucmVkdWNlck1hbmFnZXI9bjtjb25zdCBhPXQubWFwKCgodCxuKT0+e2NvbnN0IG89ZS5zaGlmdCgpW25dO3JldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3JlZHVjZXJzOm8saW5pdGlhbFN0YXRlOmxTKHQuaW5pdGlhbFN0YXRlKX0pfSkpO24uYWRkRmVhdHVyZXMoYSl9bmdPbkRlc3Ryb3koKXt0aGlzLnJlZHVjZXJNYW5hZ2VyLnJlbW92ZUZlYXR1cmVzKHRoaXMuZmVhdHVyZXMpfX1vUy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8b1MpKHVzKHJrKSx1cyhsayksdXMoTWspLHVzKG5TKSx1cyhnayw4KSl9LG9TLsm1bW9kPVpvKHt0eXBlOm9TfSksb1MuybVpbmo9Y28oe30pLG9TLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6QXJyYXksZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbcmtdfV19LHt0eXBlOkFycmF5LGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W2xrXX1dfSx7dHlwZTpNa30se3R5cGU6blN9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbZ2tdfV19XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKG9TLFt7dHlwZTprXyxhcmdzOlt7fV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6QXJyYXksZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbcmtdfV19LHt0eXBlOkFycmF5LGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W2xrXX1dfSx7dHlwZTpNa30se3R5cGU6blN9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbZ2tdfV19XX0pLG51bGwpO2NsYXNzIGlTe3N0YXRpYyBmb3JSb290KHQsZT17fSl7cmV0dXJue25nTW9kdWxlOm5TLHByb3ZpZGVyczpbe3Byb3ZpZGU6WHcsdXNlRmFjdG9yeTpkUyxkZXBzOltbRWssbmV3IF9zLG5ldyBNc11dfSx7cHJvdmlkZTpLdyx1c2VWYWx1ZTplLmluaXRpYWxTdGF0ZX0se3Byb3ZpZGU6SncsdXNlRmFjdG9yeTpsUyxkZXBzOltLd119LHtwcm92aWRlOmVrLHVzZVZhbHVlOnR9LHtwcm92aWRlOm9rLHVzZUV4aXN0aW5nOnQgaW5zdGFuY2VvZiBOcj90OmVrfSx7cHJvdmlkZTp0ayxkZXBzOltRcCxlayxbbmV3IHlzKG9rKV1dLHVzZUZhY3Rvcnk6YVN9LHtwcm92aWRlOmNrLHVzZVZhbHVlOmUubWV0YVJlZHVjZXJzP2UubWV0YVJlZHVjZXJzOltdfSx7cHJvdmlkZTpwayxkZXBzOltkayxja10sdXNlRmFjdG9yeTpjU30se3Byb3ZpZGU6JHcsdXNlVmFsdWU6ZS5yZWR1Y2VyRmFjdG9yeT9lLnJlZHVjZXJGYWN0b3J5OmhrfSx7cHJvdmlkZTpRdyxkZXBzOlskdyxwa10sdXNlRmFjdG9yeTp5a30sWncsdmssUGssRGssQWssKG49ZS5ydW50aW1lQ2hlY2tzLFt7cHJvdmlkZTp1ayx1c2VWYWx1ZTpufSx7cHJvdmlkZTptayx1c2VGYWN0b3J5OnRTLGRlcHM6W3VrXX0se3Byb3ZpZGU6ZmssZGVwczpbbWtdLHVzZUZhY3Rvcnk6Wmt9LHtwcm92aWRlOmRrLG11bHRpOiEwLGRlcHM6W2ZrXSx1c2VGYWN0b3J5OktrfSx7cHJvdmlkZTpkayxtdWx0aTohMCxkZXBzOltma10sdXNlRmFjdG9yeTpYa30se3Byb3ZpZGU6ZGssbXVsdGk6ITAsZGVwczpbZmtdLHVzZUZhY3Rvcnk6UWt9XSksJGsoKV19O3ZhciBufXN0YXRpYyBmb3JGZWF0dXJlKHQsZSxuPXt9KXtyZXR1cm57bmdNb2R1bGU6b1MscHJvdmlkZXJzOlt7cHJvdmlkZTphayxtdWx0aTohMCx1c2VWYWx1ZTpufSx7cHJvdmlkZTpuayxtdWx0aTohMCx1c2VWYWx1ZTp7a2V5OnQscmVkdWNlckZhY3Rvcnk6biBpbnN0YW5jZW9mIE5yfHwhbi5yZWR1Y2VyRmFjdG9yeT9oazpuLnJlZHVjZXJGYWN0b3J5LG1ldGFSZWR1Y2VyczpuIGluc3RhbmNlb2YgTnJ8fCFuLm1ldGFSZWR1Y2Vycz9bXTpuLm1ldGFSZWR1Y2Vycyxpbml0aWFsU3RhdGU6biBpbnN0YW5jZW9mIE5yfHwhbi5pbml0aWFsU3RhdGU/dm9pZCAwOm4uaW5pdGlhbFN0YXRlfX0se3Byb3ZpZGU6cmssZGVwczpbUXAsYWssbmtdLHVzZUZhY3Rvcnk6clN9LHtwcm92aWRlOmlrLG11bHRpOiEwLHVzZVZhbHVlOmV9LHtwcm92aWRlOnNrLG11bHRpOiEwLHVzZUV4aXN0aW5nOmUgaW5zdGFuY2VvZiBOcj9lOmlrfSx7cHJvdmlkZTpsayxtdWx0aTohMCxkZXBzOltRcCxpayxbbmV3IHlzKHNrKV1dLHVzZUZhY3Rvcnk6c1N9LCRrKCldfX19ZnVuY3Rpb24gYVModCxlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIE5yP3QuZ2V0KGUpOmV9ZnVuY3Rpb24gclModCxlLG4pe3JldHVybiBuLm1hcCgoKG4sbyk9PntpZihlW29daW5zdGFuY2VvZiBOcil7Y29uc3QgaT10LmdldChlW29dKTtyZXR1cm57a2V5Om4ua2V5LHJlZHVjZXJGYWN0b3J5OmkucmVkdWNlckZhY3Rvcnk/aS5yZWR1Y2VyRmFjdG9yeTpoayxtZXRhUmVkdWNlcnM6aS5tZXRhUmVkdWNlcnM/aS5tZXRhUmVkdWNlcnM6W10saW5pdGlhbFN0YXRlOmkuaW5pdGlhbFN0YXRlfX1yZXR1cm4gbn0pKX1mdW5jdGlvbiBzUyh0LGUpe3JldHVybiBlLm1hcCgoZT0+ZSBpbnN0YW5jZW9mIE5yP3QuZ2V0KGUpOmUpKX1mdW5jdGlvbiBsUyh0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD90KCk6dH1mdW5jdGlvbiBjUyh0LGUpe3JldHVybiB0LmNvbmNhdChlKX1mdW5jdGlvbiBkUyh0KXtpZih0KXRocm93IG5ldyBUeXBlRXJyb3IoIlN0b3JlTW9kdWxlLmZvclJvb3QoKSBjYWxsZWQgdHdpY2UuIEZlYXR1cmUgbW9kdWxlcyBzaG91bGQgdXNlIFN0b3JlTW9kdWxlLmZvckZlYXR1cmUoKSBpbnN0ZWFkLiIpO3JldHVybiJndWFyZGVkIn1mdW5jdGlvbiBwUyguLi50KXtyZXR1cm57cmVkdWNlcjp0LnBvcCgpLHR5cGVzOnQucmVkdWNlKCgodCxlKT0+Wy4uLnQsZS50eXBlXSksW10pfX1mdW5jdGlvbiBtUyh0LC4uLmUpe2NvbnN0IG49bmV3IE1hcDtmb3IobGV0IHQgb2YgZSlmb3IobGV0IGUgb2YgdC50eXBlcylpZihuLmhhcyhlKSl7Y29uc3Qgbz1uLmdldChlKTtuLnNldChlLCgoZSxuKT0+dC5yZWR1Y2VyKG8oZSxuKSxuKSkpfWVsc2Ugbi5zZXQoZSx0LnJlZHVjZXIpO3JldHVybiBmdW5jdGlvbihlPXQsbyl7Y29uc3QgaT1uLmdldChvLnR5cGUpO3JldHVybiBpP2koZSxvKTplfX0KLyoqCiAgICAgKiBAbGljZW5zZSBOZ1J4IDkuMi4xCiAgICAgKiAoYykgMjAxNS0yMDE4IEJyYW5kb24gUm9iZXJ0cywgTWlrZSBSeWFuLCBSb2IgV29ybWFsZCwgVmljdG9yIFNhdmtpbgogICAgICogTGljZW5zZTogTUlUCiAgICAgKi9pUy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8aVMpfSxpUy7JtW1vZD1abyh7dHlwZTppU30pLGlTLsm1aW5qPWNvKHt9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGlTLFt7dHlwZTprXyxhcmdzOlt7fV19XSxudWxsLG51bGwpO2NvbnN0IHVTPXtkaXNwYXRjaDohMCx1c2VFZmZlY3RzRXJyb3JIYW5kbGVyOiEwfSxmUz0iX19AbmdyeC9lZmZlY3RzX2NyZWF0ZV9fIjtmdW5jdGlvbiBnUyh0LGUpe2NvbnN0IG49dCgpLG89T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHVTKSxlKTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sZlMse3ZhbHVlOm99KSxufWZ1bmN0aW9uIGhTKHQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0KS5maWx0ZXIoKGU9PnRbZV0mJnRbZV0uaGFzT3duUHJvcGVydHkoZlMpKSkubWFwKChlPT5PYmplY3QuYXNzaWduKHtwcm9wZXJ0eU5hbWU6ZX0sdFtlXVtmU10pKSl9ZnVuY3Rpb24gYlModCl7cmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZih0KX1jb25zdCB5Uz0iX19AbmdyeC9lZmZlY3RzX18iO2Z1bmN0aW9uIF9TKHQpe3JldHVybiBiayhDUyxiUykodCl9ZnVuY3Rpb24gQ1ModCl7cmV0dXJuKGZ1bmN0aW9uIGUodCl7cmV0dXJuIHQuY29uc3RydWN0b3IuaGFzT3duUHJvcGVydHkoeVMpfSkodCk/dC5jb25zdHJ1Y3Rvclt5U106W119ZnVuY3Rpb24gTVModCxlLG49MTApe3JldHVybiB0LnBpcGUocmUoKG89PihlJiZlLmhhbmRsZUVycm9yKG8pLG48PTE/dDpNUyh0LGUsbi0xKSkpKSl9Y2xhc3MgdlMgZXh0ZW5kcyB5e2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdCYmKHRoaXMuc291cmNlPXQpfWxpZnQodCl7Y29uc3QgZT1uZXcgdlM7cmV0dXJuIGUuc291cmNlPXRoaXMsZS5vcGVyYXRvcj10LGV9fWZ1bmN0aW9uIHhTKC4uLnQpe3JldHVybiBHdCgoZT0+dC5zb21lKCh0PT4ic3RyaW5nIj09dHlwZW9mIHQ/dD09PWUudHlwZTp0LnR5cGU9PT1lLnR5cGUpKSkpfWZ1bmN0aW9uIE9TKHQpe3JldHVybiBQUyh0LCJuZ3J4T25Jbml0RWZmZWN0cyIpfWZ1bmN0aW9uIFBTKHQsZSl7cmV0dXJuIHQmJmUgaW4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIHRbZV19dlMuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHZTKSh1cyh4aykpfSx2Uy7JtXByb3Y9bG8oe3Rva2VuOnZTLGZhY3Rvcnk6dlMuybVmYWN9KSx2Uy5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOnksZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbeGtdfV19XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHZTLFt7dHlwZTpKbX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTp5LGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W3hrXX1dfV19KSxudWxsKTtjb25zdCB3Uz1uZXcgTnIoIkBuZ3J4L2VmZmVjdHMgSW50ZXJuYWwgUm9vdCBHdWFyZCIpO25ldyBOcigibmdyeC9lZmZlY3RzOiBJbW1lZGlhdGUgRWZmZWN0cyIpO2NvbnN0IGtTPW5ldyBOcigibmdyeC9lZmZlY3RzOiBVc2VyIFByb3ZpZGVkIEVmZmVjdHMiKSxTUz1uZXcgTnIoIm5ncngvZWZmZWN0czogSW50ZXJuYWwgUm9vdCBFZmZlY3RzIiksRFM9bmV3IE5yKCJuZ3J4L2VmZmVjdHM6IFJvb3QgRWZmZWN0cyIpLEVTPW5ldyBOcigibmdyeC9lZmZlY3RzOiBJbnRlcm5hbCBGZWF0dXJlIEVmZmVjdHMiKSxBUz1uZXcgTnIoIm5ncngvZWZmZWN0czogRmVhdHVyZSBFZmZlY3RzIiksUlM9bmV3IE5yKCJuZ3J4L2VmZmVjdHM6IEVmZmVjdHMgRXJyb3IgSGFuZGxlciIpO2NsYXNzIFRTIGV4dGVuZHMgeHtjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKCksdGhpcy5lcnJvckhhbmRsZXI9dCx0aGlzLmVmZmVjdHNFcnJvckhhbmRsZXI9ZX1hZGRFZmZlY3RzKHQpe3RoaXMubmV4dCh0KX10b0FjdGlvbnMoKXtyZXR1cm4gdGhpcy5waXBlKEEoYlMpLFR0KCh0PT50LnBpcGUoQShOUykpKSksVHQoKHQ9Pld0KHQucGlwZShIZSgodD0+KGZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gZT0+e2NvbnN0IG89KGZ1bmN0aW9uIGkodCxlLG4pe2NvbnN0IG89YlModCkuY29uc3RydWN0b3IubmFtZTtyZXR1cm4gV3QoLi4uKGZ1bmN0aW9uIGkodCl7cmV0dXJuW19TLGhTXS5yZWR1Y2UoKChlLG4pPT5lLmNvbmNhdChuKHQpKSksW10pfSkodCkubWFwKCgoe3Byb3BlcnR5TmFtZTppLGRpc3BhdGNoOmEsdXNlRWZmZWN0c0Vycm9ySGFuZGxlcjpyfSk9Pntjb25zdCBzPSJmdW5jdGlvbiI9PXR5cGVvZiB0W2ldP3RbaV0oKTp0W2ldLGw9cj9uKHMsZSk6cztyZXR1cm4hMT09PWE/bC5waXBlKChmdW5jdGlvbiBjKCl7cmV0dXJuIGZ1bmN0aW9uIHQoZSl7cmV0dXJuIGUubGlmdChuZXcgamUpfX0pKCkpOmwucGlwZSgoZnVuY3Rpb24gZCgpe3JldHVybiBmdW5jdGlvbiB0KGUpe3JldHVybiBlLmxpZnQobmV3IHFlKX19KSgpKS5waXBlKGh0KChlPT4oe2VmZmVjdDp0W2ldLG5vdGlmaWNhdGlvbjplLHByb3BlcnR5TmFtZTppLHNvdXJjZU5hbWU6byxzb3VyY2VJbnN0YW5jZTp0fSkpKSl9KSkpfSkoZSx0LG4pO3JldHVybihmdW5jdGlvbiBhKHQpe3JldHVybiBQUyh0LCJuZ3J4T25SdW5FZmZlY3RzIil9KShlKT9lLm5ncnhPblJ1bkVmZmVjdHMobyk6b319KSh0aGlzLmVycm9ySGFuZGxlcix0aGlzLmVmZmVjdHNFcnJvckhhbmRsZXIpKHQpKSksaHQoKHQ9PigoZnVuY3Rpb24gZSh0LG4pe2lmKCJOIj09PXQubm90aWZpY2F0aW9uLmtpbmQpe2NvbnN0IGU9dC5ub3RpZmljYXRpb24udmFsdWU7IShmdW5jdGlvbiBvKHQpe3JldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiZ0JiZ0LnR5cGUmJiJzdHJpbmciPT10eXBlb2YgdC50eXBlfSkoZSkmJm4uaGFuZGxlRXJyb3IobmV3IEVycm9yKGBFZmZlY3QgJHsoZnVuY3Rpb24gaSh7cHJvcGVydHlOYW1lOnQsc291cmNlSW5zdGFuY2U6ZSxzb3VyY2VOYW1lOm59KXtjb25zdCBvPSJmdW5jdGlvbiI9PXR5cGVvZiBlW3RdO3JldHVybmAiJHtufS4ke1N0cmluZyh0KX0ke28/IigpIjoiIn0iYH0pKHQpfSBkaXNwYXRjaGVkIGFuIGludmFsaWQgYWN0aW9uOiAkeyhmdW5jdGlvbiBhKHQpe3RyeXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodCl9Y2F0Y2goZSl7cmV0dXJuIHR9fSkoZSl9YCkpfX0pKHQsdGhpcy5lcnJvckhhbmRsZXIpLHQubm90aWZpY2F0aW9uKSkpLEd0KCh0PT4iTiI9PT10LmtpbmQpKSwoZnVuY3Rpb24gZSgpe3JldHVybiBmdW5jdGlvbiB0KGUpe3JldHVybiBlLmxpZnQobmV3IFBlKX19KSgpKSx0LnBpcGUoTmUoMSksR3QoT1MpLGh0KCh0PT50Lm5ncnhPbkluaXRFZmZlY3RzKCkpKSkpKSkpfX1mdW5jdGlvbiBOUyh0KXtyZXR1cm4oZnVuY3Rpb24gZSh0KXtyZXR1cm4gUFModCwibmdyeE9uSWRlbnRpZnlFZmZlY3RzIil9KSh0KT90Lm5ncnhPbklkZW50aWZ5RWZmZWN0cygpOiIifVRTLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxUUykodXMoRWwpLHVzKFJTKSl9LFRTLsm1cHJvdj1sbyh7dG9rZW46VFMsZmFjdG9yeTpUUy7JtWZhY30pLFRTLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6RWx9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltSU119XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoVFMsW3t0eXBlOkptfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkVsfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbUlNdfV19XX0pLG51bGwpO2NsYXNzIElTe2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5lZmZlY3RTb3VyY2VzPXQsdGhpcy5zdG9yZT1lLHRoaXMuZWZmZWN0c1N1YnNjcmlwdGlvbj1udWxsfXN0YXJ0KCl7dGhpcy5lZmZlY3RzU3Vic2NyaXB0aW9ufHwodGhpcy5lZmZlY3RzU3Vic2NyaXB0aW9uPXRoaXMuZWZmZWN0U291cmNlcy50b0FjdGlvbnMoKS5zdWJzY3JpYmUodGhpcy5zdG9yZSkpfW5nT25EZXN0cm95KCl7dGhpcy5lZmZlY3RzU3Vic2NyaXB0aW9uJiYodGhpcy5lZmZlY3RzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5lZmZlY3RzU3Vic2NyaXB0aW9uPW51bGwpfX1JUy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8SVMpKHVzKFRTKSx1cyhFaykpfSxJUy7JtXByb3Y9bG8oe3Rva2VuOklTLGZhY3Rvcnk6SVMuybVmYWN9KSxJUy5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOlRTfSx7dHlwZTpFa31dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoSVMsW3t0eXBlOkptfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOlRTfSx7dHlwZTpFa31dfSksbnVsbCk7Y29uc3QgelM9IkBuZ3J4L2VmZmVjdHMvaW5pdCI7V3coelMpO2NsYXNzIEhTe2NvbnN0cnVjdG9yKHQsZSxuLG8saSxhLHIpe3RoaXMuc291cmNlcz10LGUuc3RhcnQoKSxvLmZvckVhY2goKGU9PnQuYWRkRWZmZWN0cyhlKSkpLG4uZGlzcGF0Y2goe3R5cGU6elN9KX1hZGRFZmZlY3RzKHQpe3RoaXMuc291cmNlcy5hZGRFZmZlY3RzKHQpfX1IUy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8SFMpKHVzKFRTKSx1cyhJUyksdXMoRWspLHVzKERTKSx1cyhuUyw4KSx1cyhvUyw4KSx1cyh3Uyw4KSl9LEhTLsm1bW9kPVpvKHt0eXBlOkhTfSksSFMuybVpbmo9Y28oe30pLEhTLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6VFN9LHt0eXBlOklTfSx7dHlwZTpFa30se3R5cGU6QXJyYXksZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbRFNdfV19LHt0eXBlOm5TLGRlY29yYXRvcnM6W3t0eXBlOl9zfV19LHt0eXBlOm9TLGRlY29yYXRvcnM6W3t0eXBlOl9zfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbd1NdfV19XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEhTLFt7dHlwZTprXyxhcmdzOlt7fV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6VFN9LHt0eXBlOklTfSx7dHlwZTpFa30se3R5cGU6QXJyYXksZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbRFNdfV19LHt0eXBlOm5TLGRlY29yYXRvcnM6W3t0eXBlOl9zfV19LHt0eXBlOm9TLGRlY29yYXRvcnM6W3t0eXBlOl9zfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbd1NdfV19XX0pLG51bGwpO2NsYXNzIEZTe2NvbnN0cnVjdG9yKHQsZSxuLG8pe2UuZm9yRWFjaCgoZT0+ZS5mb3JFYWNoKChlPT50LmFkZEVmZmVjdHMoZSkpKSkpfX1GUy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8RlMpKHVzKEhTKSx1cyhBUyksdXMoblMsOCksdXMob1MsOCkpfSxGUy7JtW1vZD1abyh7dHlwZTpGU30pLEZTLsm1aW5qPWNvKHt9KSxGUy5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOkhTfSx7dHlwZTpBcnJheSxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltBU119XX0se3R5cGU6blMsZGVjb3JhdG9yczpbe3R5cGU6X3N9XX0se3R5cGU6b1MsZGVjb3JhdG9yczpbe3R5cGU6X3N9XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoRlMsW3t0eXBlOmtfLGFyZ3M6W3t9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpIU30se3R5cGU6QXJyYXksZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbQVNdfV19LHt0eXBlOm5TLGRlY29yYXRvcnM6W3t0eXBlOl9zfV19LHt0eXBlOm9TLGRlY29yYXRvcnM6W3t0eXBlOl9zfV19XX0pLG51bGwpO2NsYXNzIExTe3N0YXRpYyBmb3JGZWF0dXJlKHQ9W10pe3JldHVybntuZ01vZHVsZTpGUyxwcm92aWRlcnM6W3Qse3Byb3ZpZGU6RVMsbXVsdGk6ITAsdXNlVmFsdWU6dH0se3Byb3ZpZGU6a1MsbXVsdGk6ITAsdXNlVmFsdWU6W119LHtwcm92aWRlOkFTLG11bHRpOiEwLHVzZUZhY3Rvcnk6QlMsZGVwczpbUXAsRVMsa1NdfV19fXN0YXRpYyBmb3JSb290KHQ9W10pe3JldHVybntuZ01vZHVsZTpIUyxwcm92aWRlcnM6W3twcm92aWRlOndTLHVzZUZhY3Rvcnk6VlMsZGVwczpbW0lTLG5ldyBfcyxuZXcgTXNdXX0se3Byb3ZpZGU6UlMsdXNlVmFsdWU6TVN9LElTLFRTLHZTLHQse3Byb3ZpZGU6U1MsdXNlVmFsdWU6W3RdfSx7cHJvdmlkZTprUyxtdWx0aTohMCx1c2VWYWx1ZTpbXX0se3Byb3ZpZGU6RFMsdXNlRmFjdG9yeTpCUyxkZXBzOltRcCxTUyxrU119XX19fWZ1bmN0aW9uIEJTKHQsZSxuKXtjb25zdCBvPVtdO2ZvcihsZXQgdCBvZiBlKW8ucHVzaCguLi50KTtmb3IobGV0IHQgb2YgbilvLnB1c2goLi4udCk7cmV0dXJuKGZ1bmN0aW9uIGkodCxlKXtyZXR1cm4gZS5tYXAoKGU9PnQuZ2V0KGUpKSl9KSh0LG8pfWZ1bmN0aW9uIFZTKHQpe2lmKHQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRWZmZWN0c01vZHVsZS5mb3JSb290KCkgY2FsbGVkIHR3aWNlLiBGZWF0dXJlIG1vZHVsZXMgc2hvdWxkIHVzZSBFZmZlY3RzTW9kdWxlLmZvckZlYXR1cmUoKSBpbnN0ZWFkLiIpO3JldHVybiJndWFyZGVkIn12YXIgalM7TFMuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fExTKX0sTFMuybVtb2Q9Wm8oe3R5cGU6TFN9KSxMUy7JtWluaj1jbyh7fSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihMUyxbe3R5cGU6a18sYXJnczpbe31dfV0sbnVsbCxudWxsKSwoZnVuY3Rpb24odCl7dFt0LlVOS05PV049MF09IlVOS05PV04iLHRbdC5FWFBFUklNRU5UUz0xXT0iRVhQRVJJTUVOVFMiLHRbdC5FWFBFUklNRU5UPTJdPSJFWFBFUklNRU5UIix0W3QuQ09NUEFSRV9FWFBFUklNRU5UPTNdPSJDT01QQVJFX0VYUEVSSU1FTlQiLHRbdC5OT1RfU0VUPTRdPSJOT1RfU0VUIn0pKGpTfHwoalM9e30pKTtjb25zdCBVUz0iZGVmYXVsdEV4cGVyaW1lbnRJZCI7ZnVuY3Rpb24gV1ModCl7cmV0dXJuIHQuc3BsaXQoIiwiKS5tYXAoKHQ9Pntjb25zdCBlPXQuaW5kZXhPZigiOiIpO2lmKGU8MCl0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdCBjb2xvbiBkZWxpbWl0aW5nIG5hbWUgYW5kIElEOiAke3R9YCk7Y29uc3Qgbj10LnNsaWNlKDAsZSksbz10LnNsaWNlKGUrMSk7aWYoIW4pdGhyb3cgbmV3IEVycm9yKGBFeHBlY3QgbmFtZSB0byBiZSBub24tZmFsc3k6ICR7dH1gKTtpZighbyl0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdCBpZCB0byBiZSBub24tZmFsc3k6ICR7dH1gKTtyZXR1cm57bmFtZTpuLGlkOm99fSkpfWZ1bmN0aW9uIEdTKHQsZSl7c3dpdGNoKHQpe2Nhc2UgalMuRVhQRVJJTUVOVDpyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsImV4cGVyaW1lbnRJZCIpP1tlLmV4cGVyaW1lbnRJZF06W1VTXTtjYXNlIGpTLkNPTVBBUkVfRVhQRVJJTUVOVDpyZXR1cm4gV1MoZS5leHBlcmltZW50SWRzKS5tYXAoKCh7aWQ6dH0pPT50KSk7Y2FzZSBqUy5FWFBFUklNRU5UUzpkZWZhdWx0OnJldHVybiBudWxsfX1mdW5jdGlvbiBZUyh0LGUpe3ZhciBuO3N3aXRjaCh0KXtjYXNlIGpTLkNPTVBBUkVfRVhQRVJJTUVOVDpjYXNlIGpTLkVYUEVSSU1FTlQ6e2NvbnN0IG89bnVsbCE9PShuPUdTKHQsZSkpJiZ2b2lkIDAhPT1uP246W107cmV0dXJuIG8uc29ydCgpLGAke3R9LyR7by5qb2luKCIsIil9YH1jYXNlIGpTLkVYUEVSSU1FTlRTOnJldHVybiBTdHJpbmcodCk7Y2FzZSBqUy5OT1RfU0VUOnJldHVybiJfX25vdF9zZXQiO2RlZmF1bHQ6cmV0dXJuIiJ9fWNvbnN0IHFTPSgpPT53aW5kb3cubG9jYXRpb24uaHJlZjtjbGFzcyBaU3tnZXRIcmVmKCl7cmV0dXJuIHFTKCl9Z2V0U2VhcmNoKCl7Y29uc3QgdD1uZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLGU9W107cmV0dXJuIHQuZm9yRWFjaCgoKHQsbik9PntlLnB1c2goe2tleTpuLHZhbHVlOnR9KX0pKSxlfWdldEhhc2goKXtyZXR1cm4gd2luZG93LmxvY2F0aW9uLmhhc2h9Z2V0UGF0aCgpe3JldHVybiB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWV9cmVwbGFjZVN0YXRlKHQpe3dpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZShudWxsLCIiLHQpfXB1c2hTdGF0ZSh0KXt3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUobnVsbCwiIix0KX1vblBvcFN0YXRlKCl7cmV0dXJuIFZ0KHdpbmRvdywicG9wc3RhdGUiKS5waXBlKGh0KCgoKT0+KHtwYXRobmFtZTp0aGlzLmdldFBhdGgoKSxxdWVyeVBhcmFtczp0aGlzLmdldFNlYXJjaCgpfSkpKSl9Z2V0UmVzb2x2ZWRQYXRoKHQpe3JldHVybiBuZXcgVVJMKHQscVMoKSkucGF0aG5hbWV9Z2V0RnVsbFBhdGhGcm9tUm91dGVPck5hdih0LGUpe2NvbnN0IG49dGhpcy5nZXRSZXNvbHZlZFBhdGgodC5wYXRobmFtZSk7bGV0IG89IiI7cmV0dXJuIShmdW5jdGlvbiBpKHQpe3JldHVybiB0Lmhhc093blByb3BlcnR5KCJwYXRobmFtZSIpJiYhdC5oYXNPd25Qcm9wZXJ0eSgicXVlcnlQYXJhbXMiKX0pKHQpJiZ0LnF1ZXJ5UGFyYW1zLmxlbmd0aCYmKG89Ij8iKyhmdW5jdGlvbiBhKHQpe2NvbnN0IGU9bmV3IFVSTFNlYXJjaFBhcmFtcztmb3IoY29uc3R7a2V5Om4sdmFsdWU6b31vZiB0KWUuYXBwZW5kKG4sbyk7cmV0dXJuIGV9KSh0LnF1ZXJ5UGFyYW1zKS50b1N0cmluZygpKSxgJHtufSR7b30ke2U/dGhpcy5nZXRIYXNoKCk6IiJ9YH19WlMuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFpTKX0sWlMuybVwcm92PWxvKHt0b2tlbjpaUyxmYWN0b3J5OlpTLsm1ZmFjfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihaUyxbe3R5cGU6Sm19XSxudWxsLG51bGwpO2NsYXNzIFhTe2NvbnN0cnVjdG9yKHQpe3RoaXMuYXBwUm9vdD10aGlzLmdldEFwcFJvb3RGcm9tTWV0YUVsZW1lbnQodCl9Z2V0QXBwUm9vdEZyb21NZXRhRWxlbWVudCh0KXtjb25zdCBlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2hlYWQgbWV0YVtuYW1lPSJ0Yi1yZWxhdGl2ZS1yb290Il0nKTtpZighZSlyZXR1cm4iLyI7Y29uc3R7cGF0aG5hbWU6bn09bmV3IFVSTChlLmNvbnRlbnQsdC5nZXRIcmVmKCkpO3JldHVybiBuLnJlcGxhY2UoL1wvKiQvLCIvIil9Z2V0QWJzUGF0aG5hbWVXaXRoQXBwUm9vdCh0KXtyZXR1cm4gdGhpcy5hcHBSb290LnNsaWNlKDAsLTEpK3R9Z2V0QXBwUm9vdGxlc3NQYXRobmFtZSh0KXtyZXR1cm4gdC5zdGFydHNXaXRoKHRoaXMuYXBwUm9vdCk/Ii8iK3Quc2xpY2UodGhpcy5hcHBSb290Lmxlbmd0aCk6dH19WFMuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFhTKSh1cyhaUykpfSxYUy7JtXByb3Y9bG8oe3Rva2VuOlhTLGZhY3Rvcnk6WFMuybVmYWN9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFhTLFt7dHlwZTpKbX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpaU31dfSksbnVsbCk7Y2xhc3MgS1MgZXh0ZW5kcyBYU3tnZXRBcHBSb290KCl7cmV0dXJuIHRoaXMuYXBwUm9vdH1zZXRBcHBSb290KHQpe3RoaXMuYXBwUm9vdD10fX1LUy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBKUyhlfHxLUyl9LEtTLsm1cHJvdj1sbyh7dG9rZW46S1MsZmFjdG9yeTpLUy7JtWZhY30pO2NvbnN0IEpTPXZyKEtTKTsoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEtTLFt7dHlwZTpKbX1dLG51bGwsbnVsbCk7Y2xhc3MgUVN7fVFTLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxRUyl9LFFTLsm1bW9kPVpvKHt0eXBlOlFTfSksUVMuybVpbmo9Y28oe3Byb3ZpZGVyczpbWlNdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihRUyxbe3R5cGU6a18sYXJnczpbe3Byb3ZpZGVyczpbWlNdfV19XSxudWxsLG51bGwpO2NsYXNzICRTe30kUy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8JFMpfSwkUy7JtW1vZD1abyh7dHlwZTokU30pLCRTLsm1aW5qPWNvKHtwcm92aWRlcnM6W1hTXSxpbXBvcnRzOltbUVNdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oJFMse2ltcG9ydHM6W1FTXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoJFMsW3t0eXBlOmtfLGFyZ3M6W3tpbXBvcnRzOltRU10scHJvdmlkZXJzOltYU119XX1dLG51bGwsbnVsbCk7Y29uc3QgdEQ9V3coIltBcHAgUm91dGluZ10gU3RhdGUgUmVoeWRyYXRlZCBGcm9tIFVybCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGVEPVd3KCJbQXBwIFJvdXRpbmddIEluIEFwcCBOYXZpZ2F0aW9uIFJlcXVlc3RlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLG5EPVd3KCJbQXBwIFJvdXRpbmddIEluIEFwcCBOYXZpZ2F0aW5nIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksb0Q9V3coIltBcHAgUm91dGluZ10gSW4gQXBwIE5hdmlnYXRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGlEPW5ldyBOcigiW0FwcCBSb3V0aW5nXSBQcm9ncmFtbWF0aWNhbCBOYXZpZ2F0aW9uIFByb3ZpZGVyIik7Y2xhc3MgYUR7Y29uc3RydWN0b3IodCl7dGhpcy5wcm92aWRlcnM9bmV3IE1hcDtmb3IoY29uc3QgZSBvZiB0fHxbXSl7aWYodGhpcy5wcm92aWRlcnMuaGFzKGUuYWN0aW9uQ3JlYXRvci50eXBlKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgIiR7ZS5hY3Rpb25DcmVhdG9yLnR5cGV9IiBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQgZm9yIG5hdi4gTXVsdGlwbGUgbmF2aWdhdGlvbnMgb24gc2FtZSBraWNrIGlzIG5vdCBhbGxvd2VkLmApO3RoaXMucHJvdmlkZXJzLnNldChlLmFjdGlvbkNyZWF0b3IudHlwZSxlLmxhbWJkYSl9fWdldE5hdmlnYXRpb24odCl7Y29uc3QgZT10aGlzLnByb3ZpZGVycy5nZXQodC50eXBlKTtyZXR1cm4gZT9lKHQpOm51bGx9c3RhdGljIHJlZ2lzdGVyUHJvZ3JhbW1hdGljYWxOYXZpZ2F0aW9uKHQpe3JldHVybntuZ01vZHVsZTphRCxwcm92aWRlcnM6W3twcm92aWRlOmlELG11bHRpOiEwLHVzZUZhY3Rvcnk6dH1dfX19ZnVuY3Rpb24gckQodCl7cmV0dXJuIG51bGwhPXQucm91dGVLaW5kfWZ1bmN0aW9uIHNEKHQpe3JldHVybiB1RCh0KS5tYXAoKHQ9Pntjb25zdCBlPXQuc3RhcnRzV2l0aCgiOiIpO3JldHVybiBlP3twYXRoUGFydDp0LGlzUGFyYW06ITAscGFyYW1OYW1lOnQuc2xpY2UoMSl9OntwYXRoUGFydDp0LGlzUGFyYW06ZX19KSl9YUQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGFEKSh1cyhpRCw4KSl9LGFELsm1bW9kPVpvKHt0eXBlOmFEfSksYUQuybVpbmo9Y28oe30pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoYUQsW3t0eXBlOmtfLGFyZ3M6W3t9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W2lEXX1dfV19KSxudWxsKTtjbGFzcyBsRHtjb25zdHJ1Y3Rvcih0KXt0aGlzLnZhbGlkYXRlQ29uZmlnKHQpLHRoaXMucGF0aEZyYWdtZW50cz1zRCh0LnBhdGgpLHRoaXMucGF0aE1hdGNoZXJzPXRoaXMuZ2V0UGF0aE1hdGNoZXJzKHRoaXMucGF0aEZyYWdtZW50cyl9c3RhdGljIGdldE1hdGNoZXIodCl7cmV0dXJuIHJEKHQpP25ldyBjRCh0KTooZnVuY3Rpb24gZSh0KXtyZXR1cm4gdm9pZCAwIT09dC5yZWRpcmVjdGlvblBhdGh9KSh0KT9uZXcgZEQodCk6bmV3IHBEKHQpfXZhbGlkYXRlQ29uZmlnKHtwYXRoOnR9KXtpZighdC5zdGFydHNXaXRoKCIvIikpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYGNvbmZpZy5wYXRoIHNob3VsZCBzdGFydCB3aXRoICcvJy4gJHt0fWApO2xldCBlPTA7Zm9yKDsoZT10LmluZGV4T2YoIjoiLGUrMSkpPj0wOyl7aWYoIi8iIT09dFtlLTFdKXRocm93IG5ldyBSYW5nZUVycm9yKGBjb25maWcucGF0aCBwYXJhbWV0ZXIgc2hvdWxkIGNvbWUgYWZ0ZXIgJy8nLiAke3R9YCk7aWYodm9pZCAwPT09dFtlKzFdfHwiLyI9PT10W2UrMV0pdGhyb3cgbmV3IFJhbmdlRXJyb3IoYGNvbmZpZy5wYXRoIHBhcmFtZXRlciBzaG91bGQgaGF2ZSBub24tZW1wdHkgbmFtZS4gJHt0fWApfX1nZXRQYXRoTWF0Y2hlcnModCl7cmV0dXJuIHQubWFwKCh0PT57Y29uc3R7cGF0aFBhcnQ6ZX09dDtyZXR1cm4gdC5pc1BhcmFtP2U9Pih7aXNQYXJhbVBhdGhQYXJ0OiEwLHBhcnRNYXRjaGVkOiEwLHBhcmFtTmFtZTp0LnBhcmFtTmFtZSxwYXJhbVZhbHVlOmV9KTp0PT4oe2lzUGFyYW1QYXRoUGFydDohMSxwYXJ0TWF0Y2hlZDp0PT09ZX0pfSkpfW1hdGNoKHQpe2xldCBlPXt9O2lmKHRoaXMucGF0aE1hdGNoZXJzLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVybntyZXN1bHQ6ITF9O2xldCBuPTA7Zm9yKGNvbnN0IG8gb2YgdGhpcy5wYXRoTWF0Y2hlcnMpe2NvbnN0IGk9byh0W24rK10pO2lmKCFpLnBhcnRNYXRjaGVkKXJldHVybntyZXN1bHQ6ITF9O2kuaXNQYXJhbVBhdGhQYXJ0JiYoZT1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZSkse1tpLnBhcmFtTmFtZV06aS5wYXJhbVZhbHVlfSkpfXJldHVybntyZXN1bHQ6ITAscGFyYW1zOmUscGF0aFBhcnRzOnQsaXNSZWRpcmVjdGlvbjohMX19bWF0Y2hCeVBhcmFtcyh0KXtyZXR1cm57cmVzdWx0OiEwLHBhcmFtczp0LHBhdGhQYXJ0czp0aGlzLnJlcHJvamVjdFBhdGhCeVBhcmFtcyh0aGlzLnBhdGhGcmFnbWVudHMsdCksaXNSZWRpcmVjdGlvbjohMX19cmVwcm9qZWN0UGF0aEJ5UGFyYW1zKHQsZSl7Y29uc3Qgbj1bXTtmb3IoY29uc3QgbyBvZiB0KWlmKG8uaXNQYXJhbSl7Y29uc3R7cGFyYW1OYW1lOnR9PW87aWYoIWUuaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEZhaWxlZCB0byByZXByb2plY3QgcGFyYW1ldGVyLiAiJHt0fSIgcGFyYW1ldGVyIHNob3VsZCBiZSBwcmVzZW50LmApO24ucHVzaChlW3RdKX1lbHNlIG4ucHVzaChvLnBhdGhQYXJ0KTtyZXR1cm4gbn19Y2xhc3MgY0QgZXh0ZW5kcyBsRHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLmRlZmluaXRpb249dH19Y2xhc3MgZEQgZXh0ZW5kcyBsRHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLmRlZmluaXRpb249dCx0aGlzLnJlZGlyZWN0aW9uRnJhZ21lbnRzPXNEKHQucmVkaXJlY3Rpb25QYXRoKX1tYXRjaCh0KXtjb25zdCBlPXN1cGVyLm1hdGNoKHQpO2lmKCFlLnJlc3VsdClyZXR1cm4gZTtjb25zdCBuPXRoaXMucmVwcm9qZWN0UGF0aEJ5UGFyYW1zKHRoaXMucmVkaXJlY3Rpb25GcmFnbWVudHMsZS5wYXJhbXMpO3JldHVybntyZXN1bHQ6ITAscGFyYW1zOmUucGFyYW1zLHBhdGhQYXJ0czpuLGlzUmVkaXJlY3Rpb246ITB9fX1jbGFzcyBwRCBleHRlbmRzIGxEe2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpLHRoaXMuZGVmaW5pdGlvbj10fW1hdGNoKHQpe2NvbnN0IGU9c3VwZXIubWF0Y2godCk7aWYoIWUucmVzdWx0KXJldHVybiBlO2NvbnN0e3BhdGhQYXJ0czpuLHF1ZXJ5UGFyYW1zOm99PXRoaXMuZGVmaW5pdGlvbi5yZWRpcmVjdG9yKHQpO3JldHVybntyZXN1bHQ6ITAscGFyYW1zOmUucGFyYW1zLHBhdGhQYXJ0czpuLGlzUmVkaXJlY3Rpb246ITAscmVkaXJlY3Rpb25RdWVyeVBhcmFtczpvfX19Y2xhc3MgbUR7Y29uc3RydWN0b3IodCxlPTMpe2lmKHRoaXMubWF4UmVkaXJlY3Rpb249ZSxlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm1heFJlZGlyZWN0aW9uIGhhcyB0byBiZSBub24tbmVnYXRpdmUgbnVtYmVyIik7dGhpcy52YWxpZGF0ZVJvdXRlQ29uZmlncyh0KSx0aGlzLmRlZmF1bHRSb3V0ZUNvbmZpZz1udWxsLHRoaXMucm91dGVLaW5kVG9Db25jcmV0ZUNvbmZpZ01hdGNoZXJzPW5ldyBNYXAsdGhpcy5jb25maWdNYXRjaGVycz1bXTtmb3IoY29uc3QgZSBvZiB0KXtjb25zdCB0PWxELmdldE1hdGNoZXIoZSk7dGhpcy5jb25maWdNYXRjaGVycy5wdXNoKHQpLHQgaW5zdGFuY2VvZiBjRCYmKHRoaXMucm91dGVLaW5kVG9Db25jcmV0ZUNvbmZpZ01hdGNoZXJzLnNldCh0LmRlZmluaXRpb24ucm91dGVLaW5kLHQpLHQuZGVmaW5pdGlvbi5kZWZhdWx0Um91dGUmJih0aGlzLmRlZmF1bHRSb3V0ZUNvbmZpZz10KSl9fXZhbGlkYXRlUm91dGVDb25maWdzKHQpe2NvbnN0IGU9dC5maWx0ZXIockQpLG49ZS5maWx0ZXIoKHQ9PnQuZGVmYXVsdFJvdXRlKSk7aWYobi5sZW5ndGg+MSl7Y29uc3QgdD1uLm1hcCgoKHtwYXRoOnR9KT0+dCkpLmpvaW4oIiwgIik7dGhyb3cgbmV3IFJhbmdlRXJyb3IoYFRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIGRlZmF1bHRSb3V0ZXMuICR7dH1gKX1pZigxPT09bi5sZW5ndGgpe2NvbnN0e3BhdGg6dH09blswXTtpZihCb29sZWFuKHNEKHQpLmZpbmQoKCh7aXNQYXJhbTp0fSk9PnQpKSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEEgZGVmYXVsdFJvdXRlIGNhbm5vdCBoYXZlIGFueSBwYXJhbXMuICR7dH1gKX1jb25zdCBvPW5ldyBTZXQ7Zm9yKGNvbnN0e3JvdXRlS2luZDp0fW9mIGUpe2lmKG8uaGFzKHQpKXRocm93IG5ldyBSYW5nZUVycm9yKGBNdWx0aXBsZSByb3V0ZSBjb25maWd1cmF0aW9uIGZvciBraW5kOiAke3R9LiBDb25maWd1cmF0aW9ucyBzaG91bGQgaGF2ZSB1bmlxdWUgcm91dGVLaW5kc2ApO28uYWRkKHQpfX1tYXRjaCh0KXt2YXIgZTtpZighdC5wYXRobmFtZS5zdGFydHNXaXRoKCIvIikpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ05hdmlnYXRpb24gaGFzIHRvIG1hZGUgd2l0aCBwYXRobmFtZSB0aGF0IHN0YXJ0cyB3aXRoICIvIicpO2xldCBuLG89dUQodC5wYXRobmFtZSksaT0wLGE9ITE7Zm9yKDs7KXtsZXQgdD0hMTtmb3IoY29uc3QgZSBvZiB0aGlzLmNvbmZpZ01hdGNoZXJzKXtjb25zdCBpPWUubWF0Y2gobyk7aWYoaS5yZXN1bHQpe3Q9ITA7Y29uc3R7cGFyYW1zOnIscGF0aFBhcnRzOnMsaXNSZWRpcmVjdGlvbjpsfT1pO2lmKGwpe289cyxhPSEwLG49aS5yZWRpcmVjdGlvblF1ZXJ5UGFyYW1zO2JyZWFrfWlmKCEoZSBpbnN0YW5jZW9mIGNEKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiTm8gY29uY3JldGUgcm91dGUgZGVmaW5pdGlvbiBgbWF0Y2hgIHJldHVybiByZWRpcmVjdGlvbiIpO2NvbnN0e2RlZmluaXRpb246Y309ZSxkPXtyb3V0ZUtpbmQ6Yy5yb3V0ZUtpbmQscGFyYW1zOnIscGF0aG5hbWU6ZkQocyksZGVlcExpbmtQcm92aWRlcjpjLmRlZXBMaW5rUHJvdmlkZXJ8fG51bGx9O3JldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZCksYT97b3JpZ2luYXRlRnJvbVJlZGlyZWN0aW9uOiEwLHJlZGlyZWN0aW9uT25seVF1ZXJ5UGFyYW1zOm59OntvcmlnaW5hdGVGcm9tUmVkaXJlY3Rpb246ITF9KX19aWYoYSYmaSsrLCF0fHxpPnRoaXMubWF4UmVkaXJlY3Rpb24pYnJlYWt9aWYoaT50aGlzLm1heFJlZGlyZWN0aW9uKXRocm93IG5ldyBFcnJvcihgUG90ZW50aWFsIHJlZGlyZWN0aW9uIGxvb3AgKHJlZGlyZWN0aW5nIG1vcmUgdGhhbiAke3RoaXMubWF4UmVkaXJlY3Rpb259IHRpbWVzLiBQbGVhc2UgZG8gbm90IGhhdmUgY3ljbGVzIGluIHRoZSByb3V0ZXMuYCk7aWYodGhpcy5kZWZhdWx0Um91dGVDb25maWcpe2NvbnN0e2RlZmluaXRpb246dH09dGhpcy5kZWZhdWx0Um91dGVDb25maWc7cmV0dXJue3JvdXRlS2luZDp0LnJvdXRlS2luZCxkZWVwTGlua1Byb3ZpZGVyOm51bGwhPT0oZT10LmRlZXBMaW5rUHJvdmlkZXIpJiZ2b2lkIDAhPT1lP2U6bnVsbCxwYXRobmFtZTp0LnBhdGgscGFyYW1zOnt9LG9yaWdpbmF0ZUZyb21SZWRpcmVjdGlvbjphfX1yZXR1cm4gbnVsbH1tYXRjaEJ5Um91dGVLaW5kKHQsZSl7Y29uc3Qgbj10aGlzLnJvdXRlS2luZFRvQ29uY3JldGVDb25maWdNYXRjaGVycy5nZXQodCk7aWYoIW4pdGhyb3cgbmV3IFJhbmdlRXJyb3IoYFJlcXVpcmVzIGNvbmZpZ3VyYXRpb24gZm9yIHJvdXRlS2luZDogJHt0fWApO3JldHVybntyb3V0ZUtpbmQ6dCxwYXJhbXM6ZSxwYXRobmFtZTpmRChuLm1hdGNoQnlQYXJhbXMoZSkucGF0aFBhcnRzKSxkZWVwTGlua1Byb3ZpZGVyOm4uZGVmaW5pdGlvbi5kZWVwTGlua1Byb3ZpZGVyfHxudWxsLG9yaWdpbmF0ZUZyb21SZWRpcmVjdGlvbjohMX19fWZ1bmN0aW9uIHVEKHQpe3JldHVybiB0LnNwbGl0KCIvIikuc2xpY2UoMSl9ZnVuY3Rpb24gZkQodCl7cmV0dXJuIi8iK3Quam9pbigiLyIpfWNvbnN0IGdEPW5ldyBOcigiW0FwcCBSb3V0aW5nXSBSb3V0ZSBDb25maWciKTtjbGFzcyBoRHtjb25zdHJ1Y3Rvcih0KXtpZih0aGlzLnJvdXRlQ29uZmlncz1udWxsLHRoaXMucm91dGVLaW5kVG9OZ0NvbXBvbmVudD1uZXcgTWFwLCF0KXJldHVybjtjb25zdCBlPVtdO2Zvcihjb25zdCBuIG9mIHQpZm9yKGNvbnN0IHQgb2YgbillLnB1c2godCk7dGhpcy5yb3V0ZUNvbmZpZ3M9bmV3IG1EKGUpLGUuZm9yRWFjaCgodD0+e3JEKHQpJiZ0aGlzLnJvdXRlS2luZFRvTmdDb21wb25lbnQuc2V0KHQucm91dGVLaW5kLHQubmdDb21wb25lbnQpfSkpfWdldFJvdXRlQ29uZmlncygpe3JldHVybiB0aGlzLnJvdXRlQ29uZmlnc31nZXROZ0NvbXBvbmVudEJ5Um91dGVLaW5kKHQpe3JldHVybiB0aGlzLnJvdXRlS2luZFRvTmdDb21wb25lbnQuZ2V0KHQpfHxudWxsfXN0YXRpYyByZWdpc3RlclJvdXRlcyh0KXtyZXR1cm57bmdNb2R1bGU6aEQscHJvdmlkZXJzOlt7cHJvdmlkZTpnRCxtdWx0aTohMCx1c2VGYWN0b3J5OnR9XX19fWhELsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxoRCkodXMoZ0QsOCkpfSxoRC7JtW1vZD1abyh7dHlwZTpoRH0pLGhELsm1aW5qPWNvKHt9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGhELFt7dHlwZTprXyxhcmdzOlt7fV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltnRF19XX1dfSksbnVsbCk7Y29uc3QgYkQ9ImFwcF9yb3V0aW5nIix5RD1GayhiRCksX0Q9emsoeUQsKHQ9PnQuYWN0aXZlUm91dGUpKSxDRD16ayh5RCwodD0+dC5uZXh0Um91dGUpKSxNRD16ayhfRCwodD0+dD90LnJvdXRlS2luZDpqUy5OT1RfU0VUKSksdkQ9emsoX0QsKHQ9PnQ/dC5wYXJhbXM6e30pKSx4RD16ayhNRCx2RCwoKHQsZSk9PkdTKHQsZSkpKSxPRD16ayhNRCx2RCwoKHQsZSk9PllTKHQsZSkpKSxQRD16ayhNRCx2RCwoKHQsZSk9PntpZih0IT09alMuQ09NUEFSRV9FWFBFUklNRU5UKXJldHVybnt9O2NvbnN0IG49KGZ1bmN0aW9uIG8odCl7Y29uc3QgZT1uZXcgTWFwLG49V1ModC5leHBlcmltZW50SWRzKTtmb3IoY29uc3R7aWQ6dCxuYW1lOm99b2YgbillLnNldCh0LG8pO3JldHVybiBlfSkoZSk7cmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhuLmVudHJpZXMoKSl9KSksd0Q9V3coIltBcHAgUm91dGluZ10gRWZmZWN0cyBJbml0Iik7Y2xhc3Mga0R7Y29uc3RydWN0b3IodCxlLG4sbyxpLGEpe3RoaXMuYWN0aW9ucyQ9dCx0aGlzLnN0b3JlPWUsdGhpcy5sb2NhdGlvbj1uLHRoaXMucHJvZ3JhbW1hdGljYWxOYXZNb2R1bGU9aSx0aGlzLmFwcFJvb3RQcm92aWRlcj1hLHRoaXMub25OYXZpZ2F0aW9uUmVxdWVzdGVkJD10aGlzLmFjdGlvbnMkLnBpcGUoeFMoZUQpLGh0KCh0PT57Y29uc3QgZT10LnBhdGhuYW1lLnN0YXJ0c1dpdGgoIi8iKT90aGlzLmFwcFJvb3RQcm92aWRlci5nZXRBYnNQYXRobmFtZVdpdGhBcHBSb290KHQucGF0aG5hbWUpOnRoaXMubG9jYXRpb24uZ2V0UmVzb2x2ZWRQYXRoKHQucGF0aG5hbWUpO3JldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3BhdGhuYW1lOmV9KX0pKSksdGhpcy5vbkluaXQkPXRoaXMuYWN0aW9ucyQucGlwZSh4Uyh3RCkpLnBpcGUoYmUoMCksaHQoKCgpPT4oe3BhdGhuYW1lOnRoaXMubG9jYXRpb24uZ2V0UGF0aCgpLHF1ZXJ5UGFyYW1zOnRoaXMubG9jYXRpb24uZ2V0U2VhcmNoKCkscmVwbGFjZVN0YXRlOiEwLGJyb3dzZXJJbml0aWF0ZWQ6ITB9KSkpKSx0aGlzLnVzZXJJbml0TmF2Um91dGUkPVd0KHRoaXMub25OYXZpZ2F0aW9uUmVxdWVzdGVkJCx0aGlzLm9uSW5pdCQsdGhpcy5sb2NhdGlvbi5vblBvcFN0YXRlKCkucGlwZShodCgodD0+KHtwYXRobmFtZTp0LnBhdGhuYW1lLHJlcGxhY2VTdGF0ZTp0LnJlcGxhY2VTdGF0ZSxicm93c2VySW5pdGlhdGVkOiEwfSkpKSkpLnBpcGUoaHQoKHQ9PntpZighdC5wYXRobmFtZS5zdGFydHNXaXRoKCIvIikpdGhyb3cgbmV3IEVycm9yKGBbQXBwIHJvdXRpbmddIHBhdGhuYW1lIG11c3Qgc3RhcnQgd2l0aCAnLycuIEdvdDogJHt0LnBhdGhuYW1lfWApO3JldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3BhdGhuYW1lOnRoaXMuYXBwUm9vdFByb3ZpZGVyLmdldEFwcFJvb3RsZXNzUGF0aG5hbWUodC5wYXRobmFtZSl9KX0pKSxodCgodD0+KHtyb3V0ZU1hdGNoOnRoaXMucm91dGVDb25maWdzP3RoaXMucm91dGVDb25maWdzLm1hdGNoKHQpOm51bGwsb3B0aW9uczp7cmVwbGFjZVN0YXRlOnQucmVwbGFjZVN0YXRlLGJyb3dzZXJJbml0aWF0ZWQ6dC5icm93c2VySW5pdGlhdGVkfX0pKSkpLHRoaXMucHJvZ3JhbW10aWNhbE5hdlJvdXRlJD10aGlzLmFjdGlvbnMkLnBpcGUoaHQoKHQ9PnRoaXMucHJvZ3JhbW1hdGljYWxOYXZNb2R1bGUuZ2V0TmF2aWdhdGlvbih0KSkpLEd0KCh0PT5udWxsIT09dCkpLGh0KCh0PT57Y29uc3QgZT10LG49ZS5yb3V0ZUtpbmQ7bGV0IG87c3dpdGNoKGUucm91dGVLaW5kKXtjYXNlIGpTLkNPTVBBUkVfRVhQRVJJTUVOVDpvPXtleHBlcmltZW50SWRzOihpPWUucm91dGVQYXJhbXMuYWxpYXNBbmRFeHBlcmltZW50SWRzLGkubWFwKCgoe2FsaWFzOnQsaWQ6ZX0pPT5gJHt0fToke2V9YCkpLmpvaW4oIiwiKSl9O2JyZWFrO2RlZmF1bHQ6bz1lLnJvdXRlUGFyYW1zfXZhciBpO3JldHVybntyb3V0ZUtpbmQ6bixyb3V0ZVBhcmFtczpvfX0pKSxodCgoKHtyb3V0ZUtpbmQ6dCxyb3V0ZVBhcmFtczplfSk9Pih7cm91dGVNYXRjaDp0aGlzLnJvdXRlQ29uZmlncz90aGlzLnJvdXRlQ29uZmlncy5tYXRjaEJ5Um91dGVLaW5kKHQsZSk6bnVsbCxvcHRpb25zOntyZXBsYWNlU3RhdGU6ITEsYnJvd3NlckluaXRpYXRlZDohMX19KSkpKSx0aGlzLnZhbGlkYXRlZFJvdXRlJD1XdCh0aGlzLnVzZXJJbml0TmF2Um91dGUkLHRoaXMucHJvZ3JhbW10aWNhbE5hdlJvdXRlJCkucGlwZShHdCgoKHtyb3V0ZU1hdGNoOnR9KT0+Qm9vbGVhbih0KSkpLGh0KCh0PT4oe3JvdXRlTWF0Y2g6dC5yb3V0ZU1hdGNoLG9wdGlvbnM6dC5vcHRpb25zfSkpKSksdGhpcy5uYXZpZ2F0ZSQ9Z1MoKCgpPT50aGlzLnZhbGlkYXRlZFJvdXRlJC5waXBlKF9uKCgoe3JvdXRlTWF0Y2g6dCxvcHRpb25zOmV9KT0+e2lmKGUuYnJvd3NlckluaXRpYXRlZCYmdC5kZWVwTGlua1Byb3ZpZGVyKXtjb25zdCBlPXQub3JpZ2luYXRlRnJvbVJlZGlyZWN0aW9uJiZ0LnJlZGlyZWN0aW9uT25seVF1ZXJ5UGFyYW1zP3QucmVkaXJlY3Rpb25Pbmx5UXVlcnlQYXJhbXM6dGhpcy5sb2NhdGlvbi5nZXRTZWFyY2goKSxuPXQuZGVlcExpbmtQcm92aWRlci5kZXNlcmlhbGl6ZVF1ZXJ5UGFyYW1zKGUpO3RoaXMuc3RvcmUuZGlzcGF0Y2godEQoe3JvdXRlS2luZDp0LnJvdXRlS2luZCxwYXJ0aWFsU3RhdGU6bn0pKX19KSksZG4oKCh7cm91dGVNYXRjaDp0LG9wdGlvbnM6ZX0pPT57dmFyIG47Y29uc3Qgbz17cmVwbGFjZVN0YXRlOm51bGwhPT0obj1lLnJlcGxhY2VTdGF0ZSkmJnZvaWQgMCE9PW4mJm59LGk9Wih7cm91dGVLaW5kOnQucm91dGVLaW5kLHBhcmFtczp0LnBhcmFtcyxwYXRobmFtZTp0LnBhdGhuYW1lLHF1ZXJ5UGFyYW1zOltdLG5hdmlnYXRpb25PcHRpb25zOm99KTtyZXR1cm4gbnVsbD09PXQuZGVlcExpbmtQcm92aWRlcj9pOnQuZGVlcExpbmtQcm92aWRlci5zZXJpYWxpemVTdGF0ZVRvUXVlcnlQYXJhbXModGhpcy5zdG9yZSkucGlwZShodCgoKGUsbik9Pih7cm91dGVLaW5kOnQucm91dGVLaW5kLHBhcmFtczp0LnBhcmFtcyxwYXRobmFtZTp0LnBhdGhuYW1lLHF1ZXJ5UGFyYW1zOmUsbmF2aWdhdGlvbk9wdGlvbnM6MD09PW4/bzpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sbykse3JlcGxhY2VTdGF0ZTohMH0pfSkpKSl9KSksX24oKHQ9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKG5EKHthZnRlcjp0fSkpfSkpLGRlKDApKS5waXBlKGtuKHRoaXMuc3RvcmUuc2VsZWN0KF9EKSksaHQoKChbdCxlXSk9Pih7cHJlc2VydmVIYXNoOm51bGw9PT1lfHxudWxsPT09dHx8WVMoZS5yb3V0ZUtpbmQsZS5wYXJhbXMpPT09WVModC5yb3V0ZUtpbmQsdC5wYXJhbXMpLHJvdXRlOnR9KSkpLF9uKCgoe3ByZXNlcnZlSGFzaDp0LHJvdXRlOmV9KT0+eyEoZnVuY3Rpb24gbih0LGUpe3JldHVybiB0LnBhdGhuYW1lPT09ZS5wYXRobmFtZSYmdC5xdWVyeVBhcmFtcy5sZW5ndGg9PT1lLnF1ZXJ5UGFyYW1zLmxlbmd0aCYmdC5xdWVyeVBhcmFtcy5ldmVyeSgoKHQsbik9Pntjb25zdCBvPWUucXVlcnlQYXJhbXNbbl07cmV0dXJuIHQua2V5PT09by5rZXkmJnQudmFsdWU9PT1vLnZhbHVlfSkpfSkoZSx7cGF0aG5hbWU6dGhpcy5hcHBSb290UHJvdmlkZXIuZ2V0QXBwUm9vdGxlc3NQYXRobmFtZSh0aGlzLmxvY2F0aW9uLmdldFBhdGgoKSkscXVlcnlQYXJhbXM6dGhpcy5sb2NhdGlvbi5nZXRTZWFyY2goKX0pJiYoZS5uYXZpZ2F0aW9uT3B0aW9ucy5yZXBsYWNlU3RhdGU/dGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUodGhpcy5hcHBSb290UHJvdmlkZXIuZ2V0QWJzUGF0aG5hbWVXaXRoQXBwUm9vdCh0aGlzLmxvY2F0aW9uLmdldEZ1bGxQYXRoRnJvbVJvdXRlT3JOYXYoZSx0KSkpOnRoaXMubG9jYXRpb24ucHVzaFN0YXRlKHRoaXMuYXBwUm9vdFByb3ZpZGVyLmdldEFic1BhdGhuYW1lV2l0aEFwcFJvb3QodGhpcy5sb2NhdGlvbi5nZXRGdWxsUGF0aEZyb21Sb3V0ZU9yTmF2KGUsdCkpKSl9KSkpLnBpcGUoa24odGhpcy5zdG9yZS5zZWxlY3QoX0QpKSxodCgoKFt7cm91dGU6dH0sZV0pPT5vRCh7YmVmb3JlOmUsYWZ0ZXI6dH0pKSkpKSksdGhpcy5yb3V0ZUNvbmZpZ3M9by5nZXRSb3V0ZUNvbmZpZ3MoKX1uZ3J4T25Jbml0RWZmZWN0cygpe3JldHVybiB3RCgpfX1rRC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8a0QpKHVzKHZTKSx1cyhFayksdXMoWlMpLHVzKGhEKSx1cyhhRCksdXMoWFMpKX0sa0QuybVwcm92PWxvKHt0b2tlbjprRCxmYWN0b3J5OmtELsm1ZmFjfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihrRCxbe3R5cGU6Sm19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6dlN9LHt0eXBlOkVrfSx7dHlwZTpaU30se3R5cGU6aER9LHt0eXBlOmFEfSx7dHlwZTpYU31dfSksbnVsbCk7Y29uc3QgU0Q9bVMoe2FjdGl2ZVJvdXRlOm51bGwsbmV4dFJvdXRlOm51bGx9LHBTKG5ELCgodCx7YWZ0ZXI6ZX0pPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse25leHRSb3V0ZTplfSkpKSxwUyhvRCwoKHQse2FmdGVyOmV9KT0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHthY3RpdmVSb3V0ZTplLG5leHRSb3V0ZTpudWxsfSkpKSk7ZnVuY3Rpb24gREQodCxlKXtyZXR1cm4gU0QodCxlKX1jbGFzcyBFRHt9RUQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEVEKX0sRUQuybVtb2Q9Wm8oe3R5cGU6RUR9KSxFRC7JtWluaj1jbyh7cHJvdmlkZXJzOlthRF0saW1wb3J0czpbW2hELGlTLmZvckZlYXR1cmUoYkQsREQpLExTLmZvckZlYXR1cmUoW2tEXSksJFMsUVNdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oRUQse2ltcG9ydHM6W2hELG9TLEZTLCRTLFFTXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoRUQsW3t0eXBlOmtfLGFyZ3M6W3tpbXBvcnRzOltoRCxpUy5mb3JGZWF0dXJlKGJELEREKSxMUy5mb3JGZWF0dXJlKFtrRF0pLCRTLFFTXSxwcm92aWRlcnM6W2FEXX1dfV0sbnVsbCxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZSBBbmd1bGFyIHYxMS4yLjE0CiAgICAgKiAoYykgMjAxMC0yMDIxIEdvb2dsZSBMTEMuIGh0dHBzOi8vYW5ndWxhci5pby8KICAgICAqIExpY2Vuc2U6IE1JVAogICAgICovCmNsYXNzIEFEe31jbGFzcyBSRHt9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NsYXNzIFREe2NvbnN0cnVjdG9yKHQpe3RoaXMubm9ybWFsaXplZE5hbWVzPW5ldyBNYXAsdGhpcy5sYXp5VXBkYXRlPW51bGwsdD90aGlzLmxhenlJbml0PSJzdHJpbmciPT10eXBlb2YgdD8oKT0+e3RoaXMuaGVhZGVycz1uZXcgTWFwLHQuc3BsaXQoIlxuIikuZm9yRWFjaCgodD0+e2NvbnN0IGU9dC5pbmRleE9mKCI6Iik7aWYoZT4wKXtjb25zdCBuPXQuc2xpY2UoMCxlKSxvPW4udG9Mb3dlckNhc2UoKSxpPXQuc2xpY2UoZSsxKS50cmltKCk7dGhpcy5tYXliZVNldE5vcm1hbGl6ZWROYW1lKG4sbyksdGhpcy5oZWFkZXJzLmhhcyhvKT90aGlzLmhlYWRlcnMuZ2V0KG8pLnB1c2goaSk6dGhpcy5oZWFkZXJzLnNldChvLFtpXSl9fSkpfTooKT0+e3RoaXMuaGVhZGVycz1uZXcgTWFwLE9iamVjdC5rZXlzKHQpLmZvckVhY2goKGU9PntsZXQgbj10W2VdO2NvbnN0IG89ZS50b0xvd2VyQ2FzZSgpOyJzdHJpbmciPT10eXBlb2YgbiYmKG49W25dKSxuLmxlbmd0aD4wJiYodGhpcy5oZWFkZXJzLnNldChvLG4pLHRoaXMubWF5YmVTZXROb3JtYWxpemVkTmFtZShlLG8pKX0pKX06dGhpcy5oZWFkZXJzPW5ldyBNYXB9aGFzKHQpe3JldHVybiB0aGlzLmluaXQoKSx0aGlzLmhlYWRlcnMuaGFzKHQudG9Mb3dlckNhc2UoKSl9Z2V0KHQpe3RoaXMuaW5pdCgpO2NvbnN0IGU9dGhpcy5oZWFkZXJzLmdldCh0LnRvTG93ZXJDYXNlKCkpO3JldHVybiBlJiZlLmxlbmd0aD4wP2VbMF06bnVsbH1rZXlzKCl7cmV0dXJuIHRoaXMuaW5pdCgpLEFycmF5LmZyb20odGhpcy5ub3JtYWxpemVkTmFtZXMudmFsdWVzKCkpfWdldEFsbCh0KXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5oZWFkZXJzLmdldCh0LnRvTG93ZXJDYXNlKCkpfHxudWxsfWFwcGVuZCh0LGUpe3JldHVybiB0aGlzLmNsb25lKHtuYW1lOnQsdmFsdWU6ZSxvcDoiYSJ9KX1zZXQodCxlKXtyZXR1cm4gdGhpcy5jbG9uZSh7bmFtZTp0LHZhbHVlOmUsb3A6InMifSl9ZGVsZXRlKHQsZSl7cmV0dXJuIHRoaXMuY2xvbmUoe25hbWU6dCx2YWx1ZTplLG9wOiJkIn0pfW1heWJlU2V0Tm9ybWFsaXplZE5hbWUodCxlKXt0aGlzLm5vcm1hbGl6ZWROYW1lcy5oYXMoZSl8fHRoaXMubm9ybWFsaXplZE5hbWVzLnNldChlLHQpfWluaXQoKXt0aGlzLmxhenlJbml0JiYodGhpcy5sYXp5SW5pdCBpbnN0YW5jZW9mIFREP3RoaXMuY29weUZyb20odGhpcy5sYXp5SW5pdCk6dGhpcy5sYXp5SW5pdCgpLHRoaXMubGF6eUluaXQ9bnVsbCx0aGlzLmxhenlVcGRhdGUmJih0aGlzLmxhenlVcGRhdGUuZm9yRWFjaCgodD0+dGhpcy5hcHBseVVwZGF0ZSh0KSkpLHRoaXMubGF6eVVwZGF0ZT1udWxsKSl9Y29weUZyb20odCl7dC5pbml0KCksQXJyYXkuZnJvbSh0LmhlYWRlcnMua2V5cygpKS5mb3JFYWNoKChlPT57dGhpcy5oZWFkZXJzLnNldChlLHQuaGVhZGVycy5nZXQoZSkpLHRoaXMubm9ybWFsaXplZE5hbWVzLnNldChlLHQubm9ybWFsaXplZE5hbWVzLmdldChlKSl9KSl9Y2xvbmUodCl7Y29uc3QgZT1uZXcgVEQ7cmV0dXJuIGUubGF6eUluaXQ9dGhpcy5sYXp5SW5pdCYmdGhpcy5sYXp5SW5pdCBpbnN0YW5jZW9mIFREP3RoaXMubGF6eUluaXQ6dGhpcyxlLmxhenlVcGRhdGU9KHRoaXMubGF6eVVwZGF0ZXx8W10pLmNvbmNhdChbdF0pLGV9YXBwbHlVcGRhdGUodCl7Y29uc3QgZT10Lm5hbWUudG9Mb3dlckNhc2UoKTtzd2l0Y2godC5vcCl7Y2FzZSJhIjpjYXNlInMiOmxldCBuPXQudmFsdWU7aWYoInN0cmluZyI9PXR5cGVvZiBuJiYobj1bbl0pLDA9PT1uLmxlbmd0aClyZXR1cm47dGhpcy5tYXliZVNldE5vcm1hbGl6ZWROYW1lKHQubmFtZSxlKTtjb25zdCBvPSgiYSI9PT10Lm9wP3RoaXMuaGVhZGVycy5nZXQoZSk6dm9pZCAwKXx8W107by5wdXNoKC4uLm4pLHRoaXMuaGVhZGVycy5zZXQoZSxvKTticmVhaztjYXNlImQiOmNvbnN0IGk9dC52YWx1ZTtpZihpKXtsZXQgdD10aGlzLmhlYWRlcnMuZ2V0KGUpO2lmKCF0KXJldHVybjt0PXQuZmlsdGVyKCh0PT4tMT09PWkuaW5kZXhPZih0KSkpLDA9PT10Lmxlbmd0aD8odGhpcy5oZWFkZXJzLmRlbGV0ZShlKSx0aGlzLm5vcm1hbGl6ZWROYW1lcy5kZWxldGUoZSkpOnRoaXMuaGVhZGVycy5zZXQoZSx0KX1lbHNlIHRoaXMuaGVhZGVycy5kZWxldGUoZSksdGhpcy5ub3JtYWxpemVkTmFtZXMuZGVsZXRlKGUpfX1mb3JFYWNoKHQpe3RoaXMuaW5pdCgpLEFycmF5LmZyb20odGhpcy5ub3JtYWxpemVkTmFtZXMua2V5cygpKS5mb3JFYWNoKChlPT50KHRoaXMubm9ybWFsaXplZE5hbWVzLmdldChlKSx0aGlzLmhlYWRlcnMuZ2V0KGUpKSkpfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY2xhc3MgTkR7ZW5jb2RlS2V5KHQpe3JldHVybiBJRCh0KX1lbmNvZGVWYWx1ZSh0KXtyZXR1cm4gSUQodCl9ZGVjb2RlS2V5KHQpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQodCl9ZGVjb2RlVmFsdWUodCl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudCh0KX19ZnVuY3Rpb24gSUQodCl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh0KS5yZXBsYWNlKC8lNDAvZ2ksIkAiKS5yZXBsYWNlKC8lM0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjQvZ2ksIiQiKS5yZXBsYWNlKC8lMkMvZ2ksIiwiKS5yZXBsYWNlKC8lM0IvZ2ksIjsiKS5yZXBsYWNlKC8lMkIvZ2ksIisiKS5yZXBsYWNlKC8lM0QvZ2ksIj0iKS5yZXBsYWNlKC8lM0YvZ2ksIj8iKS5yZXBsYWNlKC8lMkYvZ2ksIi8iKX1jbGFzcyB6RHtjb25zdHJ1Y3Rvcih0PXt9KXtpZih0aGlzLnVwZGF0ZXM9bnVsbCx0aGlzLmNsb25lRnJvbT1udWxsLHRoaXMuZW5jb2Rlcj10LmVuY29kZXJ8fG5ldyBORCx0LmZyb21TdHJpbmcpe2lmKHQuZnJvbU9iamVjdCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzcGVjaWZ5IGJvdGggZnJvbVN0cmluZyBhbmQgZnJvbU9iamVjdC4iKTt0aGlzLm1hcD0oZnVuY3Rpb24gZSh0LG4pe2NvbnN0IG89bmV3IE1hcDtyZXR1cm4gdC5sZW5ndGg+MCYmdC5yZXBsYWNlKC9eXD8vLCIiKS5zcGxpdCgiJiIpLmZvckVhY2goKHQ9Pntjb25zdCBlPXQuaW5kZXhPZigiPSIpLFtpLGFdPS0xPT1lP1tuLmRlY29kZUtleSh0KSwiIl06W24uZGVjb2RlS2V5KHQuc2xpY2UoMCxlKSksbi5kZWNvZGVWYWx1ZSh0LnNsaWNlKGUrMSkpXSxyPW8uZ2V0KGkpfHxbXTtyLnB1c2goYSksby5zZXQoaSxyKX0pKSxvfSkodC5mcm9tU3RyaW5nLHRoaXMuZW5jb2Rlcil9ZWxzZSB0LmZyb21PYmplY3Q/KHRoaXMubWFwPW5ldyBNYXAsT2JqZWN0LmtleXModC5mcm9tT2JqZWN0KS5mb3JFYWNoKChlPT57Y29uc3Qgbj10LmZyb21PYmplY3RbZV07dGhpcy5tYXAuc2V0KGUsQXJyYXkuaXNBcnJheShuKT9uOltuXSl9KSkpOnRoaXMubWFwPW51bGx9aGFzKHQpe3JldHVybiB0aGlzLmluaXQoKSx0aGlzLm1hcC5oYXModCl9Z2V0KHQpe3RoaXMuaW5pdCgpO2NvbnN0IGU9dGhpcy5tYXAuZ2V0KHQpO3JldHVybiBlP2VbMF06bnVsbH1nZXRBbGwodCl7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXMubWFwLmdldCh0KXx8bnVsbH1rZXlzKCl7cmV0dXJuIHRoaXMuaW5pdCgpLEFycmF5LmZyb20odGhpcy5tYXAua2V5cygpKX1hcHBlbmQodCxlKXtyZXR1cm4gdGhpcy5jbG9uZSh7cGFyYW06dCx2YWx1ZTplLG9wOiJhIn0pfWFwcGVuZEFsbCh0KXtjb25zdCBlPVtdO3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChuPT57Y29uc3Qgbz10W25dO0FycmF5LmlzQXJyYXkobyk/by5mb3JFYWNoKCh0PT57ZS5wdXNoKHtwYXJhbTpuLHZhbHVlOnQsb3A6ImEifSl9KSk6ZS5wdXNoKHtwYXJhbTpuLHZhbHVlOm8sb3A6ImEifSl9KSksdGhpcy5jbG9uZShlKX1zZXQodCxlKXtyZXR1cm4gdGhpcy5jbG9uZSh7cGFyYW06dCx2YWx1ZTplLG9wOiJzIn0pfWRlbGV0ZSh0LGUpe3JldHVybiB0aGlzLmNsb25lKHtwYXJhbTp0LHZhbHVlOmUsb3A6ImQifSl9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5rZXlzKCkubWFwKCh0PT57Y29uc3QgZT10aGlzLmVuY29kZXIuZW5jb2RlS2V5KHQpO3JldHVybiB0aGlzLm1hcC5nZXQodCkubWFwKCh0PT5lKyI9Iit0aGlzLmVuY29kZXIuZW5jb2RlVmFsdWUodCkpKS5qb2luKCImIil9KSkuZmlsdGVyKCh0PT4iIiE9PXQpKS5qb2luKCImIil9Y2xvbmUodCl7Y29uc3QgZT1uZXcgekQoe2VuY29kZXI6dGhpcy5lbmNvZGVyfSk7cmV0dXJuIGUuY2xvbmVGcm9tPXRoaXMuY2xvbmVGcm9tfHx0aGlzLGUudXBkYXRlcz0odGhpcy51cGRhdGVzfHxbXSkuY29uY2F0KHQpLGV9aW5pdCgpe251bGw9PT10aGlzLm1hcCYmKHRoaXMubWFwPW5ldyBNYXApLG51bGwhPT10aGlzLmNsb25lRnJvbSYmKHRoaXMuY2xvbmVGcm9tLmluaXQoKSx0aGlzLmNsb25lRnJvbS5rZXlzKCkuZm9yRWFjaCgodD0+dGhpcy5tYXAuc2V0KHQsdGhpcy5jbG9uZUZyb20ubWFwLmdldCh0KSkpKSx0aGlzLnVwZGF0ZXMuZm9yRWFjaCgodD0+e3N3aXRjaCh0Lm9wKXtjYXNlImEiOmNhc2UicyI6Y29uc3QgZT0oImEiPT09dC5vcD90aGlzLm1hcC5nZXQodC5wYXJhbSk6dm9pZCAwKXx8W107ZS5wdXNoKHQudmFsdWUpLHRoaXMubWFwLnNldCh0LnBhcmFtLGUpO2JyZWFrO2Nhc2UiZCI6aWYodm9pZCAwPT09dC52YWx1ZSl7dGhpcy5tYXAuZGVsZXRlKHQucGFyYW0pO2JyZWFrfXtsZXQgZT10aGlzLm1hcC5nZXQodC5wYXJhbSl8fFtdO2NvbnN0IG49ZS5pbmRleE9mKHQudmFsdWUpOy0xIT09biYmZS5zcGxpY2UobiwxKSxlLmxlbmd0aD4wP3RoaXMubWFwLnNldCh0LnBhcmFtLGUpOnRoaXMubWFwLmRlbGV0ZSh0LnBhcmFtKX19fSkpLHRoaXMuY2xvbmVGcm9tPXRoaXMudXBkYXRlcz1udWxsKX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIEhEKHQpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJnQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcn1mdW5jdGlvbiBGRCh0KXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIEJsb2ImJnQgaW5zdGFuY2VvZiBCbG9ifWZ1bmN0aW9uIExEKHQpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgRm9ybURhdGEmJnQgaW5zdGFuY2VvZiBGb3JtRGF0YX1jbGFzcyBCRHtjb25zdHJ1Y3Rvcih0LGUsbixvKXtsZXQgaTtpZih0aGlzLnVybD1lLHRoaXMuYm9keT1udWxsLHRoaXMucmVwb3J0UHJvZ3Jlc3M9ITEsdGhpcy53aXRoQ3JlZGVudGlhbHM9ITEsdGhpcy5yZXNwb25zZVR5cGU9Impzb24iLHRoaXMubWV0aG9kPXQudG9VcHBlckNhc2UoKSwoZnVuY3Rpb24gYSh0KXtzd2l0Y2godCl7Y2FzZSJERUxFVEUiOmNhc2UiR0VUIjpjYXNlIkhFQUQiOmNhc2UiT1BUSU9OUyI6Y2FzZSJKU09OUCI6cmV0dXJuITE7ZGVmYXVsdDpyZXR1cm4hMH19KSh0aGlzLm1ldGhvZCl8fG8/KHRoaXMuYm9keT12b2lkIDAhPT1uP246bnVsbCxpPW8pOmk9bixpJiYodGhpcy5yZXBvcnRQcm9ncmVzcz0hIWkucmVwb3J0UHJvZ3Jlc3MsdGhpcy53aXRoQ3JlZGVudGlhbHM9ISFpLndpdGhDcmVkZW50aWFscyxpLnJlc3BvbnNlVHlwZSYmKHRoaXMucmVzcG9uc2VUeXBlPWkucmVzcG9uc2VUeXBlKSxpLmhlYWRlcnMmJih0aGlzLmhlYWRlcnM9aS5oZWFkZXJzKSxpLnBhcmFtcyYmKHRoaXMucGFyYW1zPWkucGFyYW1zKSksdGhpcy5oZWFkZXJzfHwodGhpcy5oZWFkZXJzPW5ldyBURCksdGhpcy5wYXJhbXMpe2NvbnN0IHQ9dGhpcy5wYXJhbXMudG9TdHJpbmcoKTtpZigwPT09dC5sZW5ndGgpdGhpcy51cmxXaXRoUGFyYW1zPWU7ZWxzZXtjb25zdCBuPWUuaW5kZXhPZigiPyIpO3RoaXMudXJsV2l0aFBhcmFtcz1lKygtMT09PW4/Ij8iOm48ZS5sZW5ndGgtMT8iJiI6IiIpK3R9fWVsc2UgdGhpcy5wYXJhbXM9bmV3IHpELHRoaXMudXJsV2l0aFBhcmFtcz1lfXNlcmlhbGl6ZUJvZHkoKXtyZXR1cm4gbnVsbD09PXRoaXMuYm9keT9udWxsOkhEKHRoaXMuYm9keSl8fEZEKHRoaXMuYm9keSl8fExEKHRoaXMuYm9keSl8fCJzdHJpbmciPT10eXBlb2YgdGhpcy5ib2R5P3RoaXMuYm9keTp0aGlzLmJvZHkgaW5zdGFuY2VvZiB6RD90aGlzLmJvZHkudG9TdHJpbmcoKToib2JqZWN0Ij09dHlwZW9mIHRoaXMuYm9keXx8ImJvb2xlYW4iPT10eXBlb2YgdGhpcy5ib2R5fHxBcnJheS5pc0FycmF5KHRoaXMuYm9keSk/SlNPTi5zdHJpbmdpZnkodGhpcy5ib2R5KTp0aGlzLmJvZHkudG9TdHJpbmcoKX1kZXRlY3RDb250ZW50VHlwZUhlYWRlcigpe3JldHVybiBudWxsPT09dGhpcy5ib2R5fHxMRCh0aGlzLmJvZHkpP251bGw6RkQodGhpcy5ib2R5KT90aGlzLmJvZHkudHlwZXx8bnVsbDpIRCh0aGlzLmJvZHkpP251bGw6InN0cmluZyI9PXR5cGVvZiB0aGlzLmJvZHk/InRleHQvcGxhaW4iOnRoaXMuYm9keSBpbnN0YW5jZW9mIHpEPyJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCI6Im9iamVjdCI9PXR5cGVvZiB0aGlzLmJvZHl8fCJudW1iZXIiPT10eXBlb2YgdGhpcy5ib2R5fHwiYm9vbGVhbiI9PXR5cGVvZiB0aGlzLmJvZHk/ImFwcGxpY2F0aW9uL2pzb24iOm51bGx9Y2xvbmUodD17fSl7Y29uc3QgZT10Lm1ldGhvZHx8dGhpcy5tZXRob2Qsbj10LnVybHx8dGhpcy51cmwsbz10LnJlc3BvbnNlVHlwZXx8dGhpcy5yZXNwb25zZVR5cGUsaT12b2lkIDAhPT10LmJvZHk/dC5ib2R5OnRoaXMuYm9keSxhPXZvaWQgMCE9PXQud2l0aENyZWRlbnRpYWxzP3Qud2l0aENyZWRlbnRpYWxzOnRoaXMud2l0aENyZWRlbnRpYWxzLHI9dm9pZCAwIT09dC5yZXBvcnRQcm9ncmVzcz90LnJlcG9ydFByb2dyZXNzOnRoaXMucmVwb3J0UHJvZ3Jlc3M7bGV0IHM9dC5oZWFkZXJzfHx0aGlzLmhlYWRlcnMsbD10LnBhcmFtc3x8dGhpcy5wYXJhbXM7cmV0dXJuIHZvaWQgMCE9PXQuc2V0SGVhZGVycyYmKHM9T2JqZWN0LmtleXModC5zZXRIZWFkZXJzKS5yZWR1Y2UoKChlLG4pPT5lLnNldChuLHQuc2V0SGVhZGVyc1tuXSkpLHMpKSx0LnNldFBhcmFtcyYmKGw9T2JqZWN0LmtleXModC5zZXRQYXJhbXMpLnJlZHVjZSgoKGUsbik9PmUuc2V0KG4sdC5zZXRQYXJhbXNbbl0pKSxsKSksbmV3IEJEKGUsbixpLHtwYXJhbXM6bCxoZWFkZXJzOnMscmVwb3J0UHJvZ3Jlc3M6cixyZXNwb25zZVR5cGU6byx3aXRoQ3JlZGVudGlhbHM6YX0pfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovdmFyIFZEOyEoZnVuY3Rpb24odCl7dFt0LlNlbnQ9MF09IlNlbnQiLHRbdC5VcGxvYWRQcm9ncmVzcz0xXT0iVXBsb2FkUHJvZ3Jlc3MiLHRbdC5SZXNwb25zZUhlYWRlcj0yXT0iUmVzcG9uc2VIZWFkZXIiLHRbdC5Eb3dubG9hZFByb2dyZXNzPTNdPSJEb3dubG9hZFByb2dyZXNzIix0W3QuUmVzcG9uc2U9NF09IlJlc3BvbnNlIix0W3QuVXNlcj01XT0iVXNlciJ9KShWRHx8KFZEPXt9KSk7Y2xhc3MgakR7Y29uc3RydWN0b3IodCxlPTIwMCxuPSJPSyIpe3RoaXMuaGVhZGVycz10LmhlYWRlcnN8fG5ldyBURCx0aGlzLnN0YXR1cz12b2lkIDAhPT10LnN0YXR1cz90LnN0YXR1czplLHRoaXMuc3RhdHVzVGV4dD10LnN0YXR1c1RleHR8fG4sdGhpcy51cmw9dC51cmx8fG51bGwsdGhpcy5vaz10aGlzLnN0YXR1cz49MjAwJiZ0aGlzLnN0YXR1czwzMDB9fWNsYXNzIFVEIGV4dGVuZHMgakR7Y29uc3RydWN0b3IodD17fSl7c3VwZXIodCksdGhpcy50eXBlPVZELlJlc3BvbnNlSGVhZGVyfWNsb25lKHQ9e30pe3JldHVybiBuZXcgVUQoe2hlYWRlcnM6dC5oZWFkZXJzfHx0aGlzLmhlYWRlcnMsc3RhdHVzOnZvaWQgMCE9PXQuc3RhdHVzP3Quc3RhdHVzOnRoaXMuc3RhdHVzLHN0YXR1c1RleHQ6dC5zdGF0dXNUZXh0fHx0aGlzLnN0YXR1c1RleHQsdXJsOnQudXJsfHx0aGlzLnVybHx8dm9pZCAwfSl9fWNsYXNzIFdEIGV4dGVuZHMgakR7Y29uc3RydWN0b3IodD17fSl7c3VwZXIodCksdGhpcy50eXBlPVZELlJlc3BvbnNlLHRoaXMuYm9keT12b2lkIDAhPT10LmJvZHk/dC5ib2R5Om51bGx9Y2xvbmUodD17fSl7cmV0dXJuIG5ldyBXRCh7Ym9keTp2b2lkIDAhPT10LmJvZHk/dC5ib2R5OnRoaXMuYm9keSxoZWFkZXJzOnQuaGVhZGVyc3x8dGhpcy5oZWFkZXJzLHN0YXR1czp2b2lkIDAhPT10LnN0YXR1cz90LnN0YXR1czp0aGlzLnN0YXR1cyxzdGF0dXNUZXh0OnQuc3RhdHVzVGV4dHx8dGhpcy5zdGF0dXNUZXh0LHVybDp0LnVybHx8dGhpcy51cmx8fHZvaWQgMH0pfX1jbGFzcyBHRCBleHRlbmRzIGpEe2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQsMCwiVW5rbm93biBFcnJvciIpLHRoaXMubmFtZT0iSHR0cEVycm9yUmVzcG9uc2UiLHRoaXMub2s9ITEsdGhpcy5tZXNzYWdlPXRoaXMuc3RhdHVzPj0yMDAmJnRoaXMuc3RhdHVzPDMwMD9gSHR0cCBmYWlsdXJlIGR1cmluZyBwYXJzaW5nIGZvciAke3QudXJsfHwiKHVua25vd24gdXJsKSJ9YDpgSHR0cCBmYWlsdXJlIHJlc3BvbnNlIGZvciAke3QudXJsfHwiKHVua25vd24gdXJsKSJ9OiAke3Quc3RhdHVzfSAke3Quc3RhdHVzVGV4dH1gLHRoaXMuZXJyb3I9dC5lcnJvcnx8bnVsbH19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIFlEKHQsZSl7cmV0dXJue2JvZHk6ZSxoZWFkZXJzOnQuaGVhZGVycyxvYnNlcnZlOnQub2JzZXJ2ZSxwYXJhbXM6dC5wYXJhbXMscmVwb3J0UHJvZ3Jlc3M6dC5yZXBvcnRQcm9ncmVzcyxyZXNwb25zZVR5cGU6dC5yZXNwb25zZVR5cGUsd2l0aENyZWRlbnRpYWxzOnQud2l0aENyZWRlbnRpYWxzfX1jbGFzcyBxRHtjb25zdHJ1Y3Rvcih0KXt0aGlzLmhhbmRsZXI9dH1yZXF1ZXN0KHQsZSxuPXt9KXtsZXQgbztpZih0IGluc3RhbmNlb2YgQkQpbz10O2Vsc2V7bGV0IGksYTtpPW4uaGVhZGVycyBpbnN0YW5jZW9mIFREP24uaGVhZGVyczpuZXcgVEQobi5oZWFkZXJzKSxuLnBhcmFtcyYmKGE9bi5wYXJhbXMgaW5zdGFuY2VvZiB6RD9uLnBhcmFtczpuZXcgekQoe2Zyb21PYmplY3Q6bi5wYXJhbXN9KSksbz1uZXcgQkQodCxlLHZvaWQgMCE9PW4uYm9keT9uLmJvZHk6bnVsbCx7aGVhZGVyczppLHBhcmFtczphLHJlcG9ydFByb2dyZXNzOm4ucmVwb3J0UHJvZ3Jlc3MscmVzcG9uc2VUeXBlOm4ucmVzcG9uc2VUeXBlfHwianNvbiIsd2l0aENyZWRlbnRpYWxzOm4ud2l0aENyZWRlbnRpYWxzfSl9Y29uc3QgaT1aKG8pLnBpcGUoKGZ1bmN0aW9uIGEodCxlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZT9UdCh0LGUsMSk6VHQodCwxKX0pKCh0PT50aGlzLmhhbmRsZXIuaGFuZGxlKHQpKSkpO2lmKHQgaW5zdGFuY2VvZiBCRHx8ImV2ZW50cyI9PT1uLm9ic2VydmUpcmV0dXJuIGk7Y29uc3Qgcj1pLnBpcGUoR3QoKHQ9PnQgaW5zdGFuY2VvZiBXRCkpKTtzd2l0Y2gobi5vYnNlcnZlfHwiYm9keSIpe2Nhc2UiYm9keSI6c3dpdGNoKG8ucmVzcG9uc2VUeXBlKXtjYXNlImFycmF5YnVmZmVyIjpyZXR1cm4gci5waXBlKGh0KCh0PT57aWYobnVsbCE9PXQuYm9keSYmISh0LmJvZHkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpdGhyb3cgbmV3IEVycm9yKCJSZXNwb25zZSBpcyBub3QgYW4gQXJyYXlCdWZmZXIuIik7cmV0dXJuIHQuYm9keX0pKSk7Y2FzZSJibG9iIjpyZXR1cm4gci5waXBlKGh0KCh0PT57aWYobnVsbCE9PXQuYm9keSYmISh0LmJvZHkgaW5zdGFuY2VvZiBCbG9iKSl0aHJvdyBuZXcgRXJyb3IoIlJlc3BvbnNlIGlzIG5vdCBhIEJsb2IuIik7cmV0dXJuIHQuYm9keX0pKSk7Y2FzZSJ0ZXh0IjpyZXR1cm4gci5waXBlKGh0KCh0PT57aWYobnVsbCE9PXQuYm9keSYmInN0cmluZyIhPXR5cGVvZiB0LmJvZHkpdGhyb3cgbmV3IEVycm9yKCJSZXNwb25zZSBpcyBub3QgYSBzdHJpbmcuIik7cmV0dXJuIHQuYm9keX0pKSk7Y2FzZSJqc29uIjpkZWZhdWx0OnJldHVybiByLnBpcGUoaHQoKHQ9PnQuYm9keSkpKX1jYXNlInJlc3BvbnNlIjpyZXR1cm4gcjtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5yZWFjaGFibGU6IHVuaGFuZGxlZCBvYnNlcnZlIHR5cGUgJHtuLm9ic2VydmV9fWApfX1kZWxldGUodCxlPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJERUxFVEUiLHQsZSl9Z2V0KHQsZT17fSl7cmV0dXJuIHRoaXMucmVxdWVzdCgiR0VUIix0LGUpfWhlYWQodCxlPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJIRUFEIix0LGUpfWpzb25wKHQsZSl7cmV0dXJuIHRoaXMucmVxdWVzdCgiSlNPTlAiLHQse3BhcmFtczoobmV3IHpEKS5hcHBlbmQoZSwiSlNPTlBfQ0FMTEJBQ0siKSxvYnNlcnZlOiJib2R5IixyZXNwb25zZVR5cGU6Impzb24ifSl9b3B0aW9ucyh0LGU9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIk9QVElPTlMiLHQsZSl9cGF0Y2godCxlLG49e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIlBBVENIIix0LFlEKG4sZSkpfXBvc3QodCxlLG49e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIlBPU1QiLHQsWUQobixlKSl9cHV0KHQsZSxuPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJQVVQiLHQsWUQobixlKSl9fXFELsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxxRCkodXMoQUQpKX0scUQuybVwcm92PWxvKHt0b2tlbjpxRCxmYWN0b3J5OnFELsm1ZmFjfSkscUQuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpBRH1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIocUQsW3t0eXBlOkptfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkFEfV19KSxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIFpEe2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5uZXh0PXQsdGhpcy5pbnRlcmNlcHRvcj1lfWhhbmRsZSh0KXtyZXR1cm4gdGhpcy5pbnRlcmNlcHRvci5pbnRlcmNlcHQodCx0aGlzLm5leHQpfX1jb25zdCBYRD1uZXcgTnIoIkhUVFBfSU5URVJDRVBUT1JTIik7Y2xhc3MgS0R7aW50ZXJjZXB0KHQsZSl7cmV0dXJuIGUuaGFuZGxlKHQpfX1LRC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8S0QpfSxLRC7JtXByb3Y9bG8oe3Rva2VuOktELGZhY3Rvcnk6S0QuybVmYWN9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEtELFt7dHlwZTpKbX1dLG51bGwsbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpsZXQgSkQ9MDtjbGFzcyBRRHt9Y2xhc3MgJER7Y29uc3RydWN0b3IodCxlKXt0aGlzLmNhbGxiYWNrTWFwPXQsdGhpcy5kb2N1bWVudD1lLHRoaXMucmVzb2x2ZWRQcm9taXNlPVByb21pc2UucmVzb2x2ZSgpfW5leHRDYWxsYmFjaygpe3JldHVybiJuZ19qc29ucF9jYWxsYmFja18iK0pEKyt9aGFuZGxlKHQpe2lmKCJKU09OUCIhPT10Lm1ldGhvZCl0aHJvdyBuZXcgRXJyb3IoIkpTT05QIHJlcXVlc3RzIG11c3QgdXNlIEpTT05QIHJlcXVlc3QgbWV0aG9kLiIpO2lmKCJqc29uIiE9PXQucmVzcG9uc2VUeXBlKXRocm93IG5ldyBFcnJvcigiSlNPTlAgcmVxdWVzdHMgbXVzdCB1c2UgSnNvbiByZXNwb25zZSB0eXBlLiIpO3JldHVybiBuZXcgeSgoZT0+e2NvbnN0IG49dGhpcy5uZXh0Q2FsbGJhY2soKSxvPXQudXJsV2l0aFBhcmFtcy5yZXBsYWNlKC89SlNPTlBfQ0FMTEJBQ0soJnwkKS8sYD0ke259JDFgKSxpPXRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7aS5zcmM9bztsZXQgYT1udWxsLHI9ITEscz0hMTt0aGlzLmNhbGxiYWNrTWFwW25dPXQ9PntkZWxldGUgdGhpcy5jYWxsYmFja01hcFtuXSxzfHwoYT10LHI9ITApfTtjb25zdCBsPSgpPT57aS5wYXJlbnROb2RlJiZpLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoaSksZGVsZXRlIHRoaXMuY2FsbGJhY2tNYXBbbl19LGM9dD0+e3N8fHRoaXMucmVzb2x2ZWRQcm9taXNlLnRoZW4oKCgpPT57bCgpLHI/KGUubmV4dChuZXcgV0Qoe2JvZHk6YSxzdGF0dXM6MjAwLHN0YXR1c1RleHQ6Ik9LIix1cmw6b30pKSxlLmNvbXBsZXRlKCkpOmUuZXJyb3IobmV3IEdEKHt1cmw6byxzdGF0dXM6MCxzdGF0dXNUZXh0OiJKU09OUCBFcnJvciIsZXJyb3I6bmV3IEVycm9yKCJKU09OUCBpbmplY3RlZCBzY3JpcHQgZGlkIG5vdCBpbnZva2UgY2FsbGJhY2suIil9KSl9KSl9LGQ9dD0+e3N8fChsKCksZS5lcnJvcihuZXcgR0Qoe2Vycm9yOnQsc3RhdHVzOjAsc3RhdHVzVGV4dDoiSlNPTlAgRXJyb3IiLHVybDpvfSkpKX07cmV0dXJuIGkuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsYyksaS5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsZCksdGhpcy5kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGkpLGUubmV4dCh7dHlwZTpWRC5TZW50fSksKCk9PntzPSEwLGkucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIsYyksaS5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsZCksbCgpfX0pKX19JEQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fCREKSh1cyhRRCksdXMoVUMpKX0sJEQuybVwcm92PWxvKHt0b2tlbjokRCxmYWN0b3J5OiRELsm1ZmFjfSksJEQuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpRRH0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W1VDXX1dfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYigkRCxbe3R5cGU6Sm19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6UUR9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltVQ119XX1dfSksbnVsbCk7Y2xhc3MgdEV7Y29uc3RydWN0b3IodCl7dGhpcy5qc29ucD10fWludGVyY2VwdCh0LGUpe3JldHVybiJKU09OUCI9PT10Lm1ldGhvZD90aGlzLmpzb25wLmhhbmRsZSh0KTplLmhhbmRsZSh0KX19dEUuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHRFKSh1cygkRCkpfSx0RS7JtXByb3Y9bG8oe3Rva2VuOnRFLGZhY3Rvcnk6dEUuybVmYWN9KSx0RS5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOiREfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYih0RSxbe3R5cGU6Sm19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6JER9XX0pLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3QgZUU9L15cKVxdXH0nLD9cbi87Y2xhc3MgbkV7fWNsYXNzIG9Fe2NvbnN0cnVjdG9yKCl7fWJ1aWxkKCl7cmV0dXJuIG5ldyBYTUxIdHRwUmVxdWVzdH19b0UuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fG9FKX0sb0UuybVwcm92PWxvKHt0b2tlbjpvRSxmYWN0b3J5Om9FLsm1ZmFjfSksb0UuY3RvclBhcmFtZXRlcnM9KCk9PltdLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIob0UsW3t0eXBlOkptfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW119KSxudWxsKTtjbGFzcyBpRXtjb25zdHJ1Y3Rvcih0KXt0aGlzLnhockZhY3Rvcnk9dH1oYW5kbGUodCl7aWYoIkpTT05QIj09PXQubWV0aG9kKXRocm93IG5ldyBFcnJvcigiQXR0ZW1wdGVkIHRvIGNvbnN0cnVjdCBKc29ucCByZXF1ZXN0IHdpdGhvdXQgSHR0cENsaWVudEpzb25wTW9kdWxlIGluc3RhbGxlZC4iKTtyZXR1cm4gbmV3IHkoKGU9Pntjb25zdCBuPXRoaXMueGhyRmFjdG9yeS5idWlsZCgpO2lmKG4ub3Blbih0Lm1ldGhvZCx0LnVybFdpdGhQYXJhbXMpLHQud2l0aENyZWRlbnRpYWxzJiYobi53aXRoQ3JlZGVudGlhbHM9ITApLHQuaGVhZGVycy5mb3JFYWNoKCgodCxlKT0+bi5zZXRSZXF1ZXN0SGVhZGVyKHQsZS5qb2luKCIsIikpKSksdC5oZWFkZXJzLmhhcygiQWNjZXB0Iil8fG4uc2V0UmVxdWVzdEhlYWRlcigiQWNjZXB0IiwiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qIiksIXQuaGVhZGVycy5oYXMoIkNvbnRlbnQtVHlwZSIpKXtjb25zdCBlPXQuZGV0ZWN0Q29udGVudFR5cGVIZWFkZXIoKTtudWxsIT09ZSYmbi5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLGUpfWlmKHQucmVzcG9uc2VUeXBlKXtjb25zdCBlPXQucmVzcG9uc2VUeXBlLnRvTG93ZXJDYXNlKCk7bi5yZXNwb25zZVR5cGU9Impzb24iIT09ZT9lOiJ0ZXh0In1jb25zdCBvPXQuc2VyaWFsaXplQm9keSgpO2xldCBpPW51bGw7Y29uc3QgYT0oKT0+e2lmKG51bGwhPT1pKXJldHVybiBpO2NvbnN0IGU9MTIyMz09PW4uc3RhdHVzPzIwNDpuLnN0YXR1cyxvPW4uc3RhdHVzVGV4dHx8Ik9LIixhPW5ldyBURChuLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSxyPShmdW5jdGlvbiBzKHQpe3JldHVybiJyZXNwb25zZVVSTCJpbiB0JiZ0LnJlc3BvbnNlVVJMP3QucmVzcG9uc2VVUkw6L15YLVJlcXVlc3QtVVJMOi9tLnRlc3QodC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSk/dC5nZXRSZXNwb25zZUhlYWRlcigiWC1SZXF1ZXN0LVVSTCIpOm51bGx9KShuKXx8dC51cmw7cmV0dXJuIGk9bmV3IFVEKHtoZWFkZXJzOmEsc3RhdHVzOmUsc3RhdHVzVGV4dDpvLHVybDpyfSksaX0scj0oKT0+e2xldHtoZWFkZXJzOm8sc3RhdHVzOmksc3RhdHVzVGV4dDpyLHVybDpzfT1hKCksbD1udWxsOzIwNCE9PWkmJihsPXZvaWQgMD09PW4ucmVzcG9uc2U/bi5yZXNwb25zZVRleHQ6bi5yZXNwb25zZSksMD09PWkmJihpPWw/MjAwOjApO2xldCBjPWk+PTIwMCYmaTwzMDA7aWYoImpzb24iPT09dC5yZXNwb25zZVR5cGUmJiJzdHJpbmciPT10eXBlb2YgbCl7Y29uc3QgdD1sO2w9bC5yZXBsYWNlKGVFLCIiKTt0cnl7bD0iIiE9PWw/SlNPTi5wYXJzZShsKTpudWxsfWNhdGNoKGUpe2w9dCxjJiYoYz0hMSxsPXtlcnJvcjplLHRleHQ6bH0pfX1jPyhlLm5leHQobmV3IFdEKHtib2R5OmwsaGVhZGVyczpvLHN0YXR1czppLHN0YXR1c1RleHQ6cix1cmw6c3x8dm9pZCAwfSkpLGUuY29tcGxldGUoKSk6ZS5lcnJvcihuZXcgR0Qoe2Vycm9yOmwsaGVhZGVyczpvLHN0YXR1czppLHN0YXR1c1RleHQ6cix1cmw6c3x8dm9pZCAwfSkpfSxzPXQ9Pntjb25zdHt1cmw6b309YSgpLGk9bmV3IEdEKHtlcnJvcjp0LHN0YXR1czpuLnN0YXR1c3x8MCxzdGF0dXNUZXh0Om4uc3RhdHVzVGV4dHx8IlVua25vd24gRXJyb3IiLHVybDpvfHx2b2lkIDB9KTtlLmVycm9yKGkpfTtsZXQgbD0hMTtjb25zdCBjPW89PntsfHwoZS5uZXh0KGEoKSksbD0hMCk7bGV0IGk9e3R5cGU6VkQuRG93bmxvYWRQcm9ncmVzcyxsb2FkZWQ6by5sb2FkZWR9O28ubGVuZ3RoQ29tcHV0YWJsZSYmKGkudG90YWw9by50b3RhbCksInRleHQiPT09dC5yZXNwb25zZVR5cGUmJm4ucmVzcG9uc2VUZXh0JiYoaS5wYXJ0aWFsVGV4dD1uLnJlc3BvbnNlVGV4dCksZS5uZXh0KGkpfSxkPXQ9PntsZXQgbj17dHlwZTpWRC5VcGxvYWRQcm9ncmVzcyxsb2FkZWQ6dC5sb2FkZWR9O3QubGVuZ3RoQ29tcHV0YWJsZSYmKG4udG90YWw9dC50b3RhbCksZS5uZXh0KG4pfTtyZXR1cm4gbi5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixyKSxuLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixzKSxuLmFkZEV2ZW50TGlzdGVuZXIoInRpbWVvdXQiLHMpLG4uYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHMpLHQucmVwb3J0UHJvZ3Jlc3MmJihuLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixjKSxudWxsIT09byYmbi51cGxvYWQmJm4udXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixkKSksbi5zZW5kKG8pLGUubmV4dCh7dHlwZTpWRC5TZW50fSksKCk9PntuLnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIixzKSxuLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixzKSxuLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLHIpLG4ucmVtb3ZlRXZlbnRMaXN0ZW5lcigidGltZW91dCIscyksdC5yZXBvcnRQcm9ncmVzcyYmKG4ucmVtb3ZlRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGMpLG51bGwhPT1vJiZuLnVwbG9hZCYmbi51cGxvYWQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGQpKSxuLnJlYWR5U3RhdGUhPT1uLkRPTkUmJm4uYWJvcnQoKX19KSl9fWlFLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxpRSkodXMobkUpKX0saUUuybVwcm92PWxvKHt0b2tlbjppRSxmYWN0b3J5OmlFLsm1ZmFjfSksaUUuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpuRX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoaUUsW3t0eXBlOkptfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOm5FfV19KSxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IGFFPW5ldyBOcigiWFNSRl9DT09LSUVfTkFNRSIpLHJFPW5ldyBOcigiWFNSRl9IRUFERVJfTkFNRSIpO2NsYXNzIHNFe31jbGFzcyBsRXtjb25zdHJ1Y3Rvcih0LGUsbil7dGhpcy5kb2M9dCx0aGlzLnBsYXRmb3JtPWUsdGhpcy5jb29raWVOYW1lPW4sdGhpcy5sYXN0Q29va2llU3RyaW5nPSIiLHRoaXMubGFzdFRva2VuPW51bGwsdGhpcy5wYXJzZUNvdW50PTB9Z2V0VG9rZW4oKXtpZigic2VydmVyIj09PXRoaXMucGxhdGZvcm0pcmV0dXJuIG51bGw7Y29uc3QgdD10aGlzLmRvYy5jb29raWV8fCIiO3JldHVybiB0IT09dGhpcy5sYXN0Q29va2llU3RyaW5nJiYodGhpcy5wYXJzZUNvdW50KyssdGhpcy5sYXN0VG9rZW49JE0odCx0aGlzLmNvb2tpZU5hbWUpLHRoaXMubGFzdENvb2tpZVN0cmluZz10KSx0aGlzLmxhc3RUb2tlbn19bEUuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGxFKSh1cyhVQyksdXMoSF8pLHVzKGFFKSl9LGxFLsm1cHJvdj1sbyh7dG9rZW46bEUsZmFjdG9yeTpsRS7JtWZhY30pLGxFLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W1VDXX1dfSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbSF9dfV19LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOlthRV19XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIobEUsW3t0eXBlOkptfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltVQ119XX0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W0hfXX1dfSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbYUVdfV19XX0pLG51bGwpO2NsYXNzIGNFe2NvbnN0cnVjdG9yKHQsZSl7dGhpcy50b2tlblNlcnZpY2U9dCx0aGlzLmhlYWRlck5hbWU9ZX1pbnRlcmNlcHQodCxlKXtjb25zdCBuPXQudXJsLnRvTG93ZXJDYXNlKCk7aWYoIkdFVCI9PT10Lm1ldGhvZHx8IkhFQUQiPT09dC5tZXRob2R8fG4uc3RhcnRzV2l0aCgiaHR0cDovLyIpfHxuLnN0YXJ0c1dpdGgoImh0dHBzOi8vIikpcmV0dXJuIGUuaGFuZGxlKHQpO2NvbnN0IG89dGhpcy50b2tlblNlcnZpY2UuZ2V0VG9rZW4oKTtyZXR1cm4gbnVsbD09PW98fHQuaGVhZGVycy5oYXModGhpcy5oZWFkZXJOYW1lKXx8KHQ9dC5jbG9uZSh7aGVhZGVyczp0LmhlYWRlcnMuc2V0KHRoaXMuaGVhZGVyTmFtZSxvKX0pKSxlLmhhbmRsZSh0KX19Y0UuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGNFKSh1cyhzRSksdXMockUpKX0sY0UuybVwcm92PWxvKHt0b2tlbjpjRSxmYWN0b3J5OmNFLsm1ZmFjfSksY0UuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpzRX0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W3JFXX1dfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihjRSxbe3R5cGU6Sm19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6c0V9LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltyRV19XX1dfSksbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyBkRXtjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuYmFja2VuZD10LHRoaXMuaW5qZWN0b3I9ZSx0aGlzLmNoYWluPW51bGx9aGFuZGxlKHQpe2lmKG51bGw9PT10aGlzLmNoYWluKXtjb25zdCB0PXRoaXMuaW5qZWN0b3IuZ2V0KFhELFtdKTt0aGlzLmNoYWluPXQucmVkdWNlUmlnaHQoKCh0LGUpPT5uZXcgWkQodCxlKSksdGhpcy5iYWNrZW5kKX1yZXR1cm4gdGhpcy5jaGFpbi5oYW5kbGUodCl9fWZ1bmN0aW9uIHBFKCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB3aW5kb3c/d2luZG93Ont9fWRFLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxkRSkodXMoUkQpLHVzKFFwKSl9LGRFLsm1cHJvdj1sbyh7dG9rZW46ZEUsZmFjdG9yeTpkRS7JtWZhY30pLGRFLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6UkR9LHt0eXBlOlFwfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihkRSxbe3R5cGU6Sm19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6UkR9LHt0eXBlOlFwfV19KSxudWxsKTtjbGFzcyBtRXtzdGF0aWMgZGlzYWJsZSgpe3JldHVybntuZ01vZHVsZTptRSxwcm92aWRlcnM6W3twcm92aWRlOmNFLHVzZUNsYXNzOktEfV19fXN0YXRpYyB3aXRoT3B0aW9ucyh0PXt9KXtyZXR1cm57bmdNb2R1bGU6bUUscHJvdmlkZXJzOlt0LmNvb2tpZU5hbWU/e3Byb3ZpZGU6YUUsdXNlVmFsdWU6dC5jb29raWVOYW1lfTpbXSx0LmhlYWRlck5hbWU/e3Byb3ZpZGU6ckUsdXNlVmFsdWU6dC5oZWFkZXJOYW1lfTpbXV19fX1tRS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8bUUpfSxtRS7JtW1vZD1abyh7dHlwZTptRX0pLG1FLsm1aW5qPWNvKHtwcm92aWRlcnM6W2NFLHtwcm92aWRlOlhELHVzZUV4aXN0aW5nOmNFLG11bHRpOiEwfSx7cHJvdmlkZTpzRSx1c2VDbGFzczpsRX0se3Byb3ZpZGU6YUUsdXNlVmFsdWU6IlhTUkYtVE9LRU4ifSx7cHJvdmlkZTpyRSx1c2VWYWx1ZToiWC1YU1JGLVRPS0VOIn1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihtRSxbe3R5cGU6a18sYXJnczpbe3Byb3ZpZGVyczpbY0Use3Byb3ZpZGU6WEQsdXNlRXhpc3Rpbmc6Y0UsbXVsdGk6ITB9LHtwcm92aWRlOnNFLHVzZUNsYXNzOmxFfSx7cHJvdmlkZTphRSx1c2VWYWx1ZToiWFNSRi1UT0tFTiJ9LHtwcm92aWRlOnJFLHVzZVZhbHVlOiJYLVhTUkYtVE9LRU4ifV19XX1dLG51bGwsbnVsbCk7Y2xhc3MgdUV7fXVFLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHx1RSl9LHVFLsm1bW9kPVpvKHt0eXBlOnVFfSksdUUuybVpbmo9Y28oe3Byb3ZpZGVyczpbcUQse3Byb3ZpZGU6QUQsdXNlQ2xhc3M6ZEV9LGlFLHtwcm92aWRlOlJELHVzZUV4aXN0aW5nOmlFfSxvRSx7cHJvdmlkZTpuRSx1c2VFeGlzdGluZzpvRX1dLGltcG9ydHM6W1ttRS53aXRoT3B0aW9ucyh7Y29va2llTmFtZToiWFNSRi1UT0tFTiIsaGVhZGVyTmFtZToiWC1YU1JGLVRPS0VOIn0pXV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKHVFLHtpbXBvcnRzOlttRV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHVFLFt7dHlwZTprXyxhcmdzOlt7aW1wb3J0czpbbUUud2l0aE9wdGlvbnMoe2Nvb2tpZU5hbWU6IlhTUkYtVE9LRU4iLGhlYWRlck5hbWU6IlgtWFNSRi1UT0tFTiJ9KV0scHJvdmlkZXJzOltxRCx7cHJvdmlkZTpBRCx1c2VDbGFzczpkRX0saUUse3Byb3ZpZGU6UkQsdXNlRXhpc3Rpbmc6aUV9LG9FLHtwcm92aWRlOm5FLHVzZUV4aXN0aW5nOm9FfV19XX1dLG51bGwsbnVsbCk7Y2xhc3MgZkV7fWZFLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxmRSl9LGZFLsm1bW9kPVpvKHt0eXBlOmZFfSksZkUuybVpbmo9Y28oe3Byb3ZpZGVyczpbJEQse3Byb3ZpZGU6UUQsdXNlRmFjdG9yeTpwRX0se3Byb3ZpZGU6WEQsdXNlQ2xhc3M6dEUsbXVsdGk6ITB9XX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoZkUsW3t0eXBlOmtfLGFyZ3M6W3twcm92aWRlcnM6WyRELHtwcm92aWRlOlFELHVzZUZhY3Rvcnk6cEV9LHtwcm92aWRlOlhELHVzZUNsYXNzOnRFLG11bHRpOiEwfV19XX1dLG51bGwsbnVsbCk7Y29uc3QgZ0U9ImZlYXR1cmUiLGhFPUZrKGdFKSxiRT16ayhoRSwodD0+dC5pc0ZlYXR1cmVGbGFnc0xvYWRlZCkpLHlFPXprKGhFLCh0PT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5kZWZhdWx0RmxhZ3MpLHQuZmxhZ092ZXJyaWRlcykpKSxfRT16ayhoRSwodD0+dC5mbGFnT3ZlcnJpZGVzfHx7fSkpLENFPXprKHlFLCh0PT50LmlzQXV0b0RhcmtNb2RlQWxsb3dlZCkpLE1FPXprKHlFLCh0PT5udWxsIT09dC5lbmFibGVEYXJrTW9kZU92ZXJyaWRlP3QuZW5hYmxlRGFya01vZGVPdmVycmlkZTp0LmRlZmF1bHRFbmFibGVEYXJrTW9kZSkpLHZFPXprKHlFLCh0PT50LmVuYWJsZURhcmtNb2RlT3ZlcnJpZGUpKSx4RT16ayh5RSwodD0+dC5lbmFibGVkRXhwZXJpbWVudGFsUGx1Z2lucykpLE9FPXprKHlFLCh0PT50LmluQ29sYWIpKSxQRT16ayh5RSwodD0+dC5lbmFibGVkQ29sb3JHcm91cCkpLHdFPXprKHlFLCh0PT50LmVuYWJsZWRDb2xvckdyb3VwQnlSZWdleCkpLGtFPXprKHlFLCh0PT50Lm1ldHJpY3NJbWFnZVN1cHBvcnRFbmFibGVkKSk7ZnVuY3Rpb24gU0UodCl7Y29uc3QgZT17fTtmb3IoY29uc3RbbixvXW9mIHQuZW50cmllcygpKWVbbl09bztyZXR1cm4gZX1mdW5jdGlvbiBERSh0KXtsZXQgZT10LmhlYWRlcnN8fG5ldyBURDtyZXR1cm4gZT1lLmFwcGVuZCgiWC1YU1JGLVByb3RlY3RlZCIsIjEiKSxPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2hlYWRlcnM6ZX0pfXprKHlFLCh0PT50LmVuYWJsZWRMaW5rZWRUaW1lKSk7Y2xhc3MgRUV7Y29uc3RydWN0b3IodCxlLG4pe3RoaXMuYXBwUm9vdFByb3ZpZGVyPXQsdGhpcy5odHRwPWUsdGhpcy5zdG9yZT1ufXJlc29sdmVBcHBSb290KHQpe3JldHVybiB0LnN0YXJ0c1dpdGgoIi8iKT90aGlzLmFwcFJvb3RQcm92aWRlci5nZXRBYnNQYXRobmFtZVdpdGhBcHBSb290KHQpOnR9Z2V0KHQsZT17fSl7cmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5yZXNvbHZlQXBwUm9vdCh0KSxlKX1wb3N0KHQsZSxuPXt9KXtyZXR1cm4gbj1ERShuKSx0aGlzLnN0b3JlLnNlbGVjdChiRSkucGlwZShHdCgodD0+Qm9vbGVhbih0KSkpLE5lKDEpLGtuKHRoaXMuc3RvcmUuc2VsZWN0KE9FKSksVHQoKChbLG9dKT0+e2NvbnN0IGk9dGhpcy5yZXNvbHZlQXBwUm9vdCh0KTtyZXR1cm4gbz90aGlzLmh0dHAuZ2V0KGkse2hlYWRlcnM6bi5oZWFkZXJzLHBhcmFtczpTRShlKX0pOnRoaXMuaHR0cC5wb3N0KGksZSxuKX0pKSl9cHV0KHQsZSxuPXt9KXtyZXR1cm4gdGhpcy5odHRwLnB1dCh0aGlzLnJlc29sdmVBcHBSb290KHQpLGUsREUobikpfWRlbGV0ZSh0LGU9e30pe3JldHVybiB0aGlzLmh0dHAuZGVsZXRlKHRoaXMucmVzb2x2ZUFwcFJvb3QodCksREUoZSkpfX1FRS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8RUUpKHVzKFhTKSx1cyhxRCksdXMoRWspKX0sRUUuybVwcm92PWxvKHt0b2tlbjpFRSxmYWN0b3J5OkVFLsm1ZmFjfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihFRSxbe3R5cGU6Sm19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6WFN9LHt0eXBlOnFEfSx7dHlwZTpFa31dfSksbnVsbCk7Y2xhc3MgQUV7fXZhciBSRSxURSxORTtBRS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8QUUpfSxBRS7JtW1vZD1abyh7dHlwZTpBRX0pLEFFLsm1aW5qPWNvKHtwcm92aWRlcnM6W0VFXSxpbXBvcnRzOltbdUUsJFNdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oQUUse2ltcG9ydHM6W3VFLCRTXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoQUUsW3t0eXBlOmtfLGFyZ3M6W3tpbXBvcnRzOlt1RSwkU10scHJvdmlkZXJzOltFRV19XX1dLG51bGwsbnVsbCksKGZ1bmN0aW9uKHQpe3QuU1RFUD0ic3RlcCIsdC5XQUxMX1RJTUU9IndhbGxfdGltZSIsdC5SRUxBVElWRT0icmVsYXRpdmUifSkoUkV8fChSRT17fSkpLChmdW5jdGlvbih0KXt0Lk9GRlNFVD0ib2Zmc2V0Iix0Lk9WRVJMQVk9Im92ZXJsYXkifSkoVEV8fChURT17fSkpLChmdW5jdGlvbih0KXt0LlVOS05PV049IlVOS05PV04iLHQuTk9UX0ZPVU5EPSJOT1RfRk9VTkQifSkoTkV8fChORT17fSkpO2NvbnN0IElFPW5ldyBOcigiVGVuc29yQm9hcmQgYnJhbmQgbmFtZSIpO2Z1bmN0aW9uIHpFKHQpe2xldCBlPU5FLlVOS05PV047cmV0dXJuIHQgaW5zdGFuY2VvZiBHRCYmNDA0PT09dC5zdGF0dXMmJihlPU5FLk5PVF9GT1VORCksWChuZXcgSEUoZSkpfWNsYXNzIEhFe2NvbnN0cnVjdG9yKHQpe3RoaXMuZmFpbHVyZUNvZGU9dH19Y2xhc3MgRkV7Y29uc3RydWN0b3IodCl7dGhpcy5odHRwPXQsdGhpcy50ZkJhY2tlbmQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGYtYmFja2VuZCIpLnRmX2JhY2tlbmR9ZmV0Y2hQbHVnaW5zTGlzdGluZyh0KXtjb25zdCBlPShmdW5jdGlvbiBuKHQpe2lmKCF0Lmxlbmd0aClyZXR1cm4gbnVsbDtjb25zdCBlPW5ldyBVUkxTZWFyY2hQYXJhbXM7Zm9yKGNvbnN0IG4gb2YgdCllLmFwcGVuZCgiZXhwZXJpbWVudGFsUGx1Z2luIixuKTtyZXR1cm4gZX0pKHQpLG89ZT9gZGF0YS9wbHVnaW5zX2xpc3Rpbmc/JHtlLnRvU3RyaW5nKCl9YDoiZGF0YS9wbHVnaW5zX2xpc3RpbmciO3JldHVybiB0aGlzLmh0dHAuZ2V0KG8pLnBpcGUocmUoekUpKX1mZXRjaEVudmlyb25tZW50KCl7cmV0dXJuIEx0KFt0aGlzLmh0dHAuZ2V0KCJkYXRhL2Vudmlyb25tZW50IiksUnQodGhpcy50ZkJhY2tlbmQuZW52aXJvbm1lbnRTdG9yZS5yZWZyZXNoKCkpXSkucGlwZShodCgoKFt0XSk9PnQpKSxyZSh6RSkpfX1GRS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8RkUpKHVzKEVFKSl9LEZFLsm1cHJvdj1sbyh7dG9rZW46RkUsZmFjdG9yeTpGRS7JtWZhY30pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoRkUsW3t0eXBlOkptfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkVFfV19KSxudWxsKTtjbGFzcyBMRXt9dmFyIEJFO0xFLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxMRSl9LExFLsm1bW9kPVpvKHt0eXBlOkxFfSksTEUuybVpbmo9Y28oe3Byb3ZpZGVyczpbRkVdLGltcG9ydHM6W1tBRV1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhMRSx7aW1wb3J0czpbQUVdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihMRSxbe3R5cGU6a18sYXJnczpbe2ltcG9ydHM6W0FFXSxwcm92aWRlcnM6W0ZFXX1dfV0sbnVsbCxudWxsKSwoZnVuY3Rpb24odCl7dFt0Lk5PVF9MT0FERUQ9MF09Ik5PVF9MT0FERUQiLHRbdC5MT0FERUQ9MV09IkxPQURFRCIsdFt0LkxPQURJTkc9Ml09IkxPQURJTkciLHRbdC5GQUlMRUQ9M109IkZBSUxFRCJ9KShCRXx8KEJFPXt9KSk7Y29uc3QgVkU9V3coIltDb3JlXSBQbHVnaW4gQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGpFPVd3KCJbQ29yZV0gUGx1Z2luIFVybCBIYXNoIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxVRT1XdygiW0NvcmVdIExvYWRlZCIpLFdFPVd3KCJbQ29yZV0gVXNlciBUcmlnZ2VyZWQgUmVsb2FkIiksR0U9V3coIltDb3JlXSBBdXRvIFJlbG9hZCIpLFlFPVd3KCJbQ29yZV0gUGx1Z2luTGlzdGluZyBGZXRjaCBSZXF1ZXN0ZWQiKSxxRT1XdygiW0NvcmVdIFBsdWdpbkxpc3RpbmcgRmV0Y2ggU3VjY2Vzc2Z1bCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFpFPVd3KCJbQ29yZV0gUGx1Z2luTGlzdGluZyBGZXRjaCBGYWlsZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxYRT1XdygiW0NvcmVdIFBvbHltZXIgQ29tcG9uZW50IFJ1bnMgRmV0Y2ggUmVxdWVzdGVkIiksS0U9V3coIltDb3JlXSBQb2x5bWVyIENvbXBvbmVudCBSdW5zIEZldGNoIFN1Y2Nlc3NmdWwiKSxKRT1XdygiW0NvcmVdIFBvbHltZXIgQ29tcG9uZW50IFJ1bnMgRmV0Y2ggRmFpbGVkIiksUUU9V3coIltDb3JlXSBFbnZpcm9ubWVudCBGZXRjaCBTdWNjZXNzZnVsIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksJEU9V3coIltDb3JlXSBSdW4gU2VsZWN0aW9uIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSx0QT1XdygiW0NvcmVdIFJ1biBGZXRjaCBTdWNjZXNzZnVsIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksZUE9ImNvcmUiLG5BPXthY3RpdmVQbHVnaW46bnVsbCxwbHVnaW5zOnt9LGNvcmVEYXRhTG9hZFN0YXRlOntzdGF0ZTpCRS5OT1RfTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpudWxsfSxwbHVnaW5zTGlzdExvYWRlZDp7c3RhdGU6QkUuTk9UX0xPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6bnVsbCxmYWlsdXJlQ29kZTpudWxsfSxlbnZpcm9ubWVudDp7ZGF0YV9sb2NhdGlvbjoiIix3aW5kb3dfdGl0bGU6IiJ9LHBvbHltZXJSdW5zTG9hZFN0YXRlOntzdGF0ZTpCRS5OT1RfTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpudWxsfSxwb2x5bWVySW50ZXJvcFJ1bnM6W10scG9seW1lckludGVyb3BSdW5TZWxlY3Rpb246bmV3IFNldH0sb0E9bVMobkEscFMoVkUsakUsKCh0LHtwbHVnaW46ZX0pPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2FjdGl2ZVBsdWdpbjplfSkpKSxwUyhZRSwodD0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtjb3JlRGF0YUxvYWRTdGF0ZTpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5jb3JlRGF0YUxvYWRTdGF0ZSkse3N0YXRlOkJFLkxPQURJTkd9KSxwbHVnaW5zTGlzdExvYWRlZDpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5wbHVnaW5zTGlzdExvYWRlZCkse3N0YXRlOkJFLkxPQURJTkd9KX0pKSkscFMoWkUsKCh0LHtmYWlsdXJlQ29kZTplfSk9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7Y29yZURhdGFMb2FkU3RhdGU6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuY29yZURhdGFMb2FkU3RhdGUpLHtzdGF0ZTpCRS5GQUlMRUR9KSxwbHVnaW5zTGlzdExvYWRlZDpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5wbHVnaW5zTGlzdExvYWRlZCkse3N0YXRlOkJFLkZBSUxFRCxmYWlsdXJlQ29kZTplfSl9KSkpLHBTKHFFLCgodCx7cGx1Z2luczplfSk9Pntjb25zdCBuPU9iamVjdC5rZXlzKGUpLmZpbmQoKHQ9PmVbdF0uZW5hYmxlZCkpfHxudWxsLG89dC5hY3RpdmVQbHVnaW58fG4saT1EYXRlLm5vdygpO2xldCBhPXQuY29yZURhdGFMb2FkU3RhdGU7cmV0dXJuIHQucG9seW1lclJ1bnNMb2FkU3RhdGUuc3RhdGU9PT1CRS5MT0FERUQmJihhPXtzdGF0ZTpCRS5MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOml9KSxPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2FjdGl2ZVBsdWdpbjpvLGNvcmVEYXRhTG9hZFN0YXRlOmEscGx1Z2luczplLHBsdWdpbnNMaXN0TG9hZGVkOntzdGF0ZTpCRS5MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOmksZmFpbHVyZUNvZGU6bnVsbH19KX0pKSxwUyhYRSwodD0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtjb3JlRGF0YUxvYWRTdGF0ZTpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5jb3JlRGF0YUxvYWRTdGF0ZSkse3N0YXRlOkJFLkxPQURJTkd9KSxwb2x5bWVyUnVuc0xvYWRTdGF0ZTpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5wb2x5bWVyUnVuc0xvYWRTdGF0ZSkse3N0YXRlOkJFLkxPQURJTkd9KX0pKSkscFMoS0UsKHQ9Pntjb25zdCBlPURhdGUubm93KCk7bGV0IG49dC5jb3JlRGF0YUxvYWRTdGF0ZTtyZXR1cm4gdC5wbHVnaW5zTGlzdExvYWRlZC5zdGF0ZT09PUJFLkxPQURFRCYmKG49e3N0YXRlOkJFLkxPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6ZX0pLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7Y29yZURhdGFMb2FkU3RhdGU6bixwb2x5bWVyUnVuc0xvYWRTdGF0ZTpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5wb2x5bWVyUnVuc0xvYWRTdGF0ZSkse3N0YXRlOkJFLkxPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6ZX0pfSl9KSkscFMoSkUsKHQ9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7Y29yZURhdGFMb2FkU3RhdGU6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuY29yZURhdGFMb2FkU3RhdGUpLHtzdGF0ZTpCRS5GQUlMRUR9KSxwb2x5bWVyUnVuc0xvYWRTdGF0ZTpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5wb2x5bWVyUnVuc0xvYWRTdGF0ZSkse3N0YXRlOkJFLkZBSUxFRH0pfSkpKSxwUyhRRSwoKHQse2Vudmlyb25tZW50OmV9KT0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtlbnZpcm9ubWVudDplfSkpKSxwUyh0QSwoKHQse3J1bnM6ZX0pPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3BvbHltZXJJbnRlcm9wUnVuczplfSkpKSxwUygkRSwoKHQse25leHRTZWxlY3Rpb246ZX0pPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3BvbHltZXJJbnRlcm9wUnVuU2VsZWN0aW9uOm5ldyBTZXQoZSl9KSkpKTtmdW5jdGlvbiBpQSh0LGUpe3JldHVybiBvQSh0LGUpfWNvbnN0IGFBPUZrKGVBKSxyQT16ayhhQSwodD0+dC5wbHVnaW5zTGlzdExvYWRlZCkpLHNBPXprKGFBLCh0PT50LnBvbHltZXJSdW5zTG9hZFN0YXRlKSksbEE9emsoYUEsKHQ9PnQuY29yZURhdGFMb2FkU3RhdGUuc3RhdGUpKSxjQT16ayhhQSwodD0+dC5jb3JlRGF0YUxvYWRTdGF0ZS5sYXN0TG9hZGVkVGltZUluTXMpKSxkQT16ayhhQSwodD0+dC5hY3RpdmVQbHVnaW4pKSxwQT16ayhhQSwodD0+dC5wbHVnaW5zKSksbUE9emsoYUEsKHQ9PnQuZW52aXJvbm1lbnQpKSx1QT1uZXcgU2V0KFtqUy5DT01QQVJFX0VYUEVSSU1FTlQsalMuRVhQRVJJTUVOVCxqUy5OT1RfU0VUXSk7Y2xhc3MgZkF7Y29uc3RydWN0b3IodCxlLG4pe3RoaXMuYWN0aW9ucyQ9dCx0aGlzLnN0b3JlPWUsdGhpcy53ZWJhcHBEYXRhU291cmNlPW4sdGhpcy50ZkJhY2tlbmQ9e3JlZjpkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0Zi1iYWNrZW5kIikudGZfYmFja2VuZH0sdGhpcy5vbkRhc2hib2FyZExvYWQkPVd0KHRoaXMuYWN0aW9ucyQucGlwZSh4UyhVRSxvRCksa24odGhpcy5zdG9yZS5zZWxlY3QoT0QpKSxrZSgoKFssdF0sWyxlXSk9PnQ9PT1lKSkpLHRoaXMuYWN0aW9ucyQucGlwZSh4UyhHRSxXRSkpKS5waXBlKGtuKHRoaXMuc3RvcmUuc2VsZWN0KE1EKSksR3QoKChbLHRdKT0+dUEuaGFzKHQpKSkseG4oMSx2b2lkIDAse2xlYWRpbmc6ITB9KSksdGhpcy5mZXRjaFdlYkFwcERhdGEkPWdTKCgoKT0+V3QodGhpcy5vbkRhc2hib2FyZExvYWQkLnBpcGUoa24odGhpcy5zdG9yZS5zZWxlY3QockEpLHRoaXMuc3RvcmUuc2VsZWN0KHhFKSksR3QoKChbLHtzdGF0ZTp0fV0pPT50IT09QkUuTE9BRElORykpLF9uKCgoKT0+dGhpcy5zdG9yZS5kaXNwYXRjaChZRSgpKSkpLFR0KCgoWywsdF0pPT4oZnVuY3Rpb24gZSguLi50KXtsZXQgZTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdFt0Lmxlbmd0aC0xXSYmKGU9dC5wb3AoKSkscSh0LHZvaWQgMCkubGlmdChuZXcgS3QoZSkpfSkodGhpcy53ZWJhcHBEYXRhU291cmNlLmZldGNoUGx1Z2luc0xpc3RpbmcodCksdGhpcy5mZXRjaEVudmlyb25tZW50KCkpLnBpcGUoaHQoKChbdF0pPT57dGhpcy5zdG9yZS5kaXNwYXRjaChxRSh7cGx1Z2luczp0fSkpfSkpLHJlKCh0PT4odGhpcy5zdG9yZS5kaXNwYXRjaChaRSh0IGluc3RhbmNlb2YgSEU/e2ZhaWx1cmVDb2RlOnQuZmFpbHVyZUNvZGV9OntmYWlsdXJlQ29kZTpORS5VTktOT1dOfSkpLFUpKSkpKSkpLHRoaXMub25EYXNoYm9hcmRMb2FkJC5waXBlKGh0KCgoWyx0XSk9PnQpKSxkbigodD0+dCE9PWpTLkNPTVBBUkVfRVhQRVJJTUVOVD9aKFtdKTp0aGlzLnN0b3JlLnNlbGVjdChQRCkucGlwZShrZSgoKHQsZSk9Pntjb25zdCBuPU9iamVjdC5lbnRyaWVzKHQpLG89bmV3IE1hcChPYmplY3QuZW50cmllcyhlKSk7aWYobi5sZW5ndGghPT1vLnNpemUpcmV0dXJuITE7Zm9yKGNvbnN0W3QsZV1vZiBuKWlmKG8uZ2V0KHQpIT09ZSlyZXR1cm4hMTtyZXR1cm4hMH0pKSxiZSgwKSx4big1MDAsdm9pZCAwLHtsZWFkaW5nOiEwLHRyYWlsaW5nOiEwfSkpKSksa24odGhpcy5zdG9yZS5zZWxlY3QoTUQpLHRoaXMuc3RvcmUuc2VsZWN0KHNBKSksR3QoKChbLHQsZV0pPT51QS5oYXModCkmJmUuc3RhdGUhPT1CRS5MT0FESU5HKSksX24oKCgpPT57dGhpcy5zdG9yZS5kaXNwYXRjaChYRSgpKX0pKSxkbigoKCk9PnRoaXMucmVmcmVzaFBvbHltZXJSdW5zKCkpKSxfbigoKCk9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKEtFKCkpfSkpLHJlKCgoKT0+KHRoaXMuc3RvcmUuZGlzcGF0Y2goSkUoKSksVSkpKSkpKSx7ZGlzcGF0Y2g6ITF9KSx0aGlzLmRpc3BhdGNoQ2hhbmdlUGx1Z2luJD1nUygoKCk9Pld0KHRoaXMub25EYXNoYm9hcmRMb2FkJCx0aGlzLmFjdGlvbnMkLnBpcGUoeFMocUUpKSkucGlwZShrbih0aGlzLnN0b3JlLnNlbGVjdChkQSkpLGh0KCgoWyx0XSk9PnQpKSxrZSgpLEd0KCh0PT5udWxsIT09dCkpLE5lKDEpLF9uKCh0PT57dGhpcy5zdG9yZS5kaXNwYXRjaChWRSh7cGx1Z2luOnR9KSl9KSkpKSx7ZGlzcGF0Y2g6ITF9KX1yZWZyZXNoUG9seW1lclJ1bnMoKXtyZXR1cm4gUnQodGhpcy50ZkJhY2tlbmQucmVmLnJ1bnNTdG9yZS5yZWZyZXNoKCkpfWZldGNoRW52aXJvbm1lbnQoKXtyZXR1cm4gdGhpcy53ZWJhcHBEYXRhU291cmNlLmZldGNoRW52aXJvbm1lbnQoKS5waXBlKF9uKCh0PT57dGhpcy5zdG9yZS5kaXNwYXRjaChRRSh7ZW52aXJvbm1lbnQ6dH0pKX0pKSl9fWZBLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxmQSkodXModlMpLHVzKEVrKSx1cyhGRSkpfSxmQS7JtXByb3Y9bG8oe3Rva2VuOmZBLGZhY3Rvcnk6ZkEuybVmYWN9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGZBLFt7dHlwZTpKbX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTp2U30se3R5cGU6RWt9LHt0eXBlOkZFfV19KSxudWxsKTtjb25zdCBnQT1uZXcgTnIoIkNvcmUgRmVhdHVyZSBDb25maWciKTtmdW5jdGlvbiBoQSh0KXtyZXR1cm57aW5pdGlhbFN0YXRlOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxuQSkse2FjdGl2ZVBsdWdpbjp0LmdldFBsdWdpbklkKCl8fG51bGx9KX19Y2xhc3MgYkF7fWNvbnN0IHlBPSJfX3RhYl9fIjtjbGFzcyBfQXtjb25zdHJ1Y3Rvcigpe3RoaXMudGZTdG9yYWdlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRmLXN0b3JhZ2UiKSxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0Zi1nbG9iYWxzIikudGZfZ2xvYmFscy5zZXRVc2VIYXNoKCEwKSx0aGlzLnRmU3RvcmFnZS50Zl9zdG9yYWdlLm1pZ3JhdGVMZWdhY3lVUkxTY2hlbWUoKX1nZXRTdHJpbmcodCl7cmV0dXJuIHRoaXMudGZTdG9yYWdlLnRmX3N0b3JhZ2UuZ2V0U3RyaW5nKHQpfXNldFN0cmluZyh0LGUsbil7dGhpcy50ZlN0b3JhZ2UudGZfc3RvcmFnZS5zZXRTdHJpbmcodCxlLG4pfWdldFBsdWdpbklkKCl7cmV0dXJuIHRoaXMuZ2V0U3RyaW5nKHlBKX1zZXRQbHVnaW5JZCh0LGUpe3RoaXMuc2V0U3RyaW5nKHlBLHQsZSl9fV9BLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxfQSl9LF9BLsm1cHJvdj1sbyh7dG9rZW46X0EsZmFjdG9yeTpfQS7JtWZhY30pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoX0EsW3t0eXBlOkptfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW119KSxudWxsKTtjbGFzcyBDQXt9Q0EuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fENBKX0sQ0EuybVtb2Q9Wm8oe3R5cGU6Q0F9KSxDQS7JtWluaj1jbyh7cHJvdmlkZXJzOlt7cHJvdmlkZTpnQSxkZXBzOltiQV0sdXNlRmFjdG9yeTpoQX1dLGltcG9ydHM6W1tMUy5mb3JGZWF0dXJlKFtmQV0pLGlTLmZvckZlYXR1cmUoZUEsaUEsZ0EpLExFXV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKENBLHtpbXBvcnRzOltGUyxvUyxMRV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKENBLFt7dHlwZTprXyxhcmdzOlt7aW1wb3J0czpbTFMuZm9yRmVhdHVyZShbZkFdKSxpUy5mb3JGZWF0dXJlKGVBLGlBLGdBKSxMRV0scHJvdmlkZXJzOlt7cHJvdmlkZTpnQSxkZXBzOltiQV0sdXNlRmFjdG9yeTpoQX1dfV19XSxudWxsLG51bGwpO2NvbnN0IE1BPW5ldyBOcigiW0FsZXJ0XSBBY3Rpb24tVG8tQWxlcnQgUHJvdmlkZXIiKTtjbGFzcyB2QXtjb25zdHJ1Y3Rvcih0KXt0aGlzLnByb3ZpZGVycz1uZXcgTWFwO2Zvcihjb25zdCBlIG9mIHR8fFtdKWZvcihjb25zdCB0IG9mIGUpe2lmKHRoaXMucHJvdmlkZXJzLmhhcyh0LmFjdGlvbkNyZWF0b3IudHlwZSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYCIke3QuYWN0aW9uQ3JlYXRvci50eXBlfSIgaXMgYWxyZWFkeSByZWdpc3RlcmVkIGZvciBhbGVydHMuIE11bHRpcGxlIGFsZXJ0cyBmb3IgdGhlIHNhbWUgYWN0aW9uIGlzIG5vdCBhbGxvd2VkLmApO3RoaXMucHJvdmlkZXJzLnNldCh0LmFjdGlvbkNyZWF0b3IudHlwZSx0LmFsZXJ0RnJvbUFjdGlvbil9fWdldEFsZXJ0RnJvbUFjdGlvbih0KXtjb25zdCBlPXRoaXMucHJvdmlkZXJzLmdldCh0LnR5cGUpO3JldHVybiBlP2UodCk6bnVsbH1zdGF0aWMgcmVnaXN0ZXJBbGVydEFjdGlvbnModCl7cmV0dXJue25nTW9kdWxlOnZBLHByb3ZpZGVyczpbe3Byb3ZpZGU6TUEsbXVsdGk6ITAsdXNlRmFjdG9yeTp0fV19fX12QS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8dkEpKHVzKE1BLDgpKX0sdkEuybVtb2Q9Wm8oe3R5cGU6dkF9KSx2QS7JtWluaj1jbyh7fSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYih2QSxbe3R5cGU6a18sYXJnczpbe31dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbTUFdfV19XX0pLG51bGwpO2NvbnN0IHhBPSJocGFyYW1zIixPQT1XdygiW1J1bnNdIEZldGNoIFJ1bnMgUmVxdWVzdGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksUEE9V3coIltSdW5zXSBGZXRjaCBSdW5zIFN1Y2NlZWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHdBPVd3KCJbUnVuc10gRmV0Y2ggUnVucyBGYWlsZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxrQT1XdygiW1J1bnNdIFJ1biBTZWxlY3Rpb24gVG9nZ2xlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFNBPVd3KCJbUnVuc10gUnVuIFBhZ2UgU2VsZWN0aW9uIFRvZ2dsZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxEQT1XdygiW1J1bnNdIFJ1bnMgU2VsZWN0IEFsbCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLEVBPVd3KCJbUnVuc10gUnVuIFNlbGVjdG9yIFBhZ2luYXRpb24gT3B0aW9uIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxBQT1XdygiW1J1bnNdIFJ1biBTZWxlY3RvciBTb3J0IENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxSQT1XdygiW1J1bnNdIFJ1biBTZWxlY3RvciBSZWdleCBGaWx0ZXIgQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFRBPVd3KCJbUnVuc10gUnVuIENvbG9yIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxOQT1XdygiW1J1bnNdIFJ1biBUYWJsZSBTaG93biIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLElBPVd3KCJbUnVuc10gUnVuIEdyb3VwIEJ5IENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KTt2YXIgekEsSEEsRkEsTEE7IShmdW5jdGlvbih0KXt0LkRBVEFTRVRfVU5LTk9XTj0iREFUQVNFVF9VTktOT1dOIix0LkRBVEFTRVRfVFJBSU5JTkc9IkRBVEFTRVRfVFJBSU5JTkciLHQuREFUQVNFVF9WQUxJREFUSU9OPSJEQVRBU0VUX1ZBTElEQVRJT04ifSkoekF8fCh6QT17fSkpLChmdW5jdGlvbih0KXt0LlNUQVRVU19VTktOT1dOPSJTVEFUVVNfVU5LTk9XTiIsdC5TVEFUVVNfU1VDQ0VTUz0iU1RBVFVTX1NVQ0NFU1MiLHQuU1RBVFVTX0ZBSUxVUkU9IlNUQVRVU19GQUlMVVJFIix0LlNUQVRVU19SVU5OSU5HPSJTVEFUVVNfUlVOTklORyJ9KShIQXx8KEhBPXt9KSksKGZ1bmN0aW9uKHQpe3QuREFUQV9UWVBFX1VOU0VUPSJEQVRBX1RZUEVfVU5TRVQiLHQuREFUQV9UWVBFX1NUUklORz0iREFUQV9UWVBFX1NUUklORyIsdC5EQVRBX1RZUEVfQk9PTD0iREFUQV9UWVBFX0JPT0wiLHQuREFUQV9UWVBFX0ZMT0FUNjQ9IkRBVEFfVFlQRV9GTE9BVDY0In0pKEZBfHwoRkE9e30pKSwoZnVuY3Rpb24odCl7dFt0LkRJU0NSRVRFPTBdPSJESVNDUkVURSIsdFt0LklOVEVSVkFMPTFdPSJJTlRFUlZBTCJ9KShMQXx8KExBPXt9KSk7Y2xhc3MgQkF7fUJBLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxCQSl9LEJBLsm1cHJvdj1sbyh7dG9rZW46QkEsZmFjdG9yeTpCQS7JtWZhYyxwcm92aWRlZEluOiJyb290In0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoQkEsW3t0eXBlOkptLGFyZ3M6W3twcm92aWRlZEluOiJyb290In1dfV0sbnVsbCxudWxsKTtjb25zdCBWQT1XdygiW0hwYXJhbXNdIEhwYXJhbXMgRGlzY3JldGUgSHBhcmFtIEZpbHRlciBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksakE9V3coIltIcGFyYW1zXSBIcGFyYW1zIEludGVydmFsIEhwYXJhbSBGaWx0ZXIgQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFVBPVd3KCJbSHBhcmFtc10gSHBhcmFtcyBNZXRyaWMgRmlsdGVyIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KTtmdW5jdGlvbiBXQSh0KXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoWy4uLnRdLnNvcnQoKSl9ZnVuY3Rpb24gR0EodCl7dmFyIGUsbixvLGk7Y29uc3QgYT1uZXcgTWFwLHI9bmV3IE1hcCxzPW5ldyBNYXA7Zm9yKGNvbnN0IGEgb2YgdClmb3IoY29uc3RbdCxsXW9mIGEpaWYobC50eXBlPT09TEEuRElTQ1JFVEUpe2NvbnN0e3Bvc3NpYmxlVmFsdWVzOmUsdmFsdWVzOm59PXIuZ2V0KHQpfHx7cG9zc2libGVWYWx1ZXM6bmV3IFNldCx2YWx1ZXM6bmV3IFNldH07Zm9yKGNvbnN0IHQgb2YgbC5maWx0ZXJWYWx1ZXMpbi5hZGQodCk7Zm9yKGNvbnN0IHQgb2YgbC5wb3NzaWJsZVZhbHVlcyllLmFkZCh0KTtyLnNldCh0LHtwb3NzaWJsZVZhbHVlczplLHZhbHVlczpufSl9ZWxzZXtjb25zdCBhPXMuZ2V0KHQpO3Muc2V0KHQse2ZpbHRlckxvd2VyVmFsdWU6TWF0aC5taW4obC5maWx0ZXJMb3dlclZhbHVlLG51bGwhPT0oZT1udWxsPT1hP3ZvaWQgMDphLmZpbHRlckxvd2VyVmFsdWUpJiZ2b2lkIDAhPT1lP2U6MS8wKSxmaWx0ZXJVcHBlclZhbHVlOk1hdGgubWF4KGwuZmlsdGVyVXBwZXJWYWx1ZSxudWxsIT09KG49bnVsbD09YT92b2lkIDA6YS5maWx0ZXJVcHBlclZhbHVlKSYmdm9pZCAwIT09bj9uOi0xLzApLG1pblZhbHVlOk1hdGgubWluKGwubWluVmFsdWUsbnVsbCE9PShvPW51bGw9PWE/dm9pZCAwOmEubWluVmFsdWUpJiZ2b2lkIDAhPT1vP286MS8wKSxtYXhWYWx1ZTpNYXRoLm1heChsLm1heFZhbHVlLG51bGwhPT0oaT1udWxsPT1hP3ZvaWQgMDphLm1heFZhbHVlKSYmdm9pZCAwIT09aT9pOi0xLzApfSl9Zm9yKGNvbnN0W3Qse3ZhbHVlczplLHBvc3NpYmxlVmFsdWVzOm59XW9mIHIpYS5zZXQodCx7dHlwZTpMQS5ESVNDUkVURSxpbmNsdWRlVW5kZWZpbmVkOiEwLHBvc3NpYmxlVmFsdWVzOlsuLi5uXSxmaWx0ZXJWYWx1ZXM6Wy4uLmVdfSk7Zm9yKGNvbnN0W3Qse21pblZhbHVlOmUsbWF4VmFsdWU6bixmaWx0ZXJMb3dlclZhbHVlOm8sZmlsdGVyVXBwZXJWYWx1ZTppfV1vZiBzKXtpZihhLmhhcyh0KSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgQ2Fubm90IGNvbWJpbmUgaHBhcmFtLCAke3R9LCBhcyBpdCBpcyBvZiBtaXhlZCB0eXBlcy5gKTthLnNldCh0LHt0eXBlOkxBLklOVEVSVkFMLGluY2x1ZGVVbmRlZmluZWQ6ITAsbWluVmFsdWU6ZSxtYXhWYWx1ZTpuLGZpbHRlckxvd2VyVmFsdWU6byxmaWx0ZXJVcHBlclZhbHVlOml9KX1yZXR1cm4gYX1mdW5jdGlvbiBZQSh0KXt2YXIgZSxuLG8saTtjb25zdCBhPW5ldyBNYXA7Zm9yKGNvbnN0IHIgb2YgdClmb3IoY29uc3RbdCxzXW9mIHIpe2NvbnN0IHI9YS5nZXQodCk7YS5zZXQodCxPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe3R5cGU6TEEuSU5URVJWQUwsaW5jbHVkZVVuZGVmaW5lZDohMH0scikse21pblZhbHVlOk1hdGgubWluKHMubWluVmFsdWUsbnVsbCE9PShlPW51bGw9PXI/dm9pZCAwOnIubWluVmFsdWUpJiZ2b2lkIDAhPT1lP2U6MS8wKSxtYXhWYWx1ZTpNYXRoLm1heChzLm1heFZhbHVlLG51bGwhPT0obj1udWxsPT1yP3ZvaWQgMDpyLm1heFZhbHVlKSYmdm9pZCAwIT09bj9uOi0xLzApLGZpbHRlckxvd2VyVmFsdWU6TWF0aC5taW4ocy5maWx0ZXJMb3dlclZhbHVlLG51bGwhPT0obz1udWxsPT1yP3ZvaWQgMDpyLmZpbHRlckxvd2VyVmFsdWUpJiZ2b2lkIDAhPT1vP286MS8wKSxmaWx0ZXJVcHBlclZhbHVlOk1hdGgubWF4KHMuZmlsdGVyVXBwZXJWYWx1ZSxudWxsIT09KGk9bnVsbD09cj92b2lkIDA6ci5maWx0ZXJVcHBlclZhbHVlKSYmdm9pZCAwIT09aT9pOi0xLzApfSkpfXJldHVybiBhfWNvbnN0IHFBPW1TKHtzcGVjczp7fSxmaWx0ZXJzOnt9fSxwUyhWQSwoKHQsZSk9Pnt2YXIgbjtjb25zdHtleHBlcmltZW50SWRzOm8saHBhcmFtTmFtZTppLGZpbHRlclZhbHVlczphLGluY2x1ZGVVbmRlZmluZWQ6cn09ZSxzPVdBKG8pLGw9bnVsbCE9PShuPXQuZmlsdGVyc1tzXSkmJnZvaWQgMCE9PW4/bjp7aHBhcmFtczpuZXcgTWFwfSxjPWwuaHBhcmFtcy5nZXQoaSk7aWYoYyYmYy50eXBlIT09TEEuRElTQ1JFVEUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYE5ldyBkaXNjcmV0ZSBmaWx0ZXIgb2YgJHtpfSBjb25mbGljdHMgZXhpc3RpbmcgZmlsdGVyIG9mIGArTEFbYy50eXBlXSk7Y29uc3QgZD1HQShvLmZpbHRlcigoZT0+Qm9vbGVhbih0LnNwZWNzW2VdKSkpLm1hcCgoZT0+dC5zcGVjc1tlXS5ocGFyYW0uZGVmYXVsdEZpbHRlcnMpKSkuZ2V0KGkpO2lmKCFkKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IHNldCBocGFyYW0sICR7aX0sIHdoZW4gaXQgaXMgbm90IGtub3duIGZvciBleHBlcmltZW50SWRzOiAke28uam9pbigiLCAiKX1gKTtpZihkLnR5cGUhPT1MQS5ESVNDUkVURSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBzZXQgJHtpfSB3aGVuIGRlZmF1bHQgZmlsdGVyIGlzIG5vdCBvZiBkaXNjcmV0ZSB0eXBlLmApO2NvbnN0IHA9bmV3IFNldChkLnBvc3NpYmxlVmFsdWVzKSxtPVsuLi5hXS5maWx0ZXIoKHQ9PiFwLmhhcyh0KSkpO2lmKG0ubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgTmV3IGZpbHRlciBmb3IgJHtpfSBoYXMgbW9yZSB0aGFuIG9uZSB2YWx1ZSB0aGF0IGlzIG5vdCBwcmVzZW50IGluIHRoZSBzcGVjLiBCYWQgdmFsdWVzOiAke20uam9pbigiLCAiKX1gKTtjb25zdCB1PW5ldyBNYXAobC5ocGFyYW1zKTtyZXR1cm4gdS5zZXQoaSxPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sYykse3R5cGU6TEEuRElTQ1JFVEUsaW5jbHVkZVVuZGVmaW5lZDpyLHBvc3NpYmxlVmFsdWVzOlsuLi5wXSxmaWx0ZXJWYWx1ZXM6YX0pKSxPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2ZpbHRlcnM6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuZmlsdGVycykse1tzXTpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sbCkse2hwYXJhbXM6dX0pfSl9KX0pKSxwUyhqQSwoKHQsZSk9Pnt2YXIgbjtjb25zdHtleHBlcmltZW50SWRzOm8saHBhcmFtTmFtZTppLGZpbHRlckxvd2VyVmFsdWU6YSxmaWx0ZXJVcHBlclZhbHVlOnIsaW5jbHVkZVVuZGVmaW5lZDpzfT1lLGw9V0EobyksYz1udWxsIT09KG49dC5maWx0ZXJzW2xdKSYmdm9pZCAwIT09bj9uOnttZXRyaWNzOm5ldyBNYXAsaHBhcmFtczpuZXcgTWFwfSxkPWMuaHBhcmFtcy5nZXQoaSk7aWYoZCYmZC50eXBlIT09TEEuSU5URVJWQUwpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYE5ldyBpbnRlcnZhbCBmaWx0ZXIgb2YgJHtpfSBjb25mbGljdHMgZXhpc3RpbmcgZmlsdGVyIG9mIGArTEFbZC50eXBlXSk7Y29uc3QgcD1HQShvLmZpbHRlcigoZT0+Qm9vbGVhbih0LnNwZWNzW2VdKSkpLm1hcCgoZT0+dC5zcGVjc1tlXS5ocGFyYW0uZGVmYXVsdEZpbHRlcnMpKSkuZ2V0KGkpO2lmKCFwKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IHNldCBocGFyYSwgJHtpfSwgd2hlbiBpdCBpcyBub3Qga25vd24gZm9yIGV4cGVyaW1lbnRJZHM6ICR7by5qb2luKCIsICIpfWApO2lmKHAudHlwZSE9PUxBLklOVEVSVkFMKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IHNldCAke2l9IHdoZW4gZGVmYXVsdCBmaWx0ZXIgaXMgbm90IG9mIGludGVydmFsIHR5cGUuYCk7Y29uc3QgbT1uZXcgTWFwKGMuaHBhcmFtcyk7cmV0dXJuIG0uc2V0KGksT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGQpLHt0eXBlOkxBLklOVEVSVkFMLGluY2x1ZGVVbmRlZmluZWQ6cyxtaW5WYWx1ZTpwLm1pblZhbHVlLG1heFZhbHVlOnAubWF4VmFsdWUsZmlsdGVyTG93ZXJWYWx1ZTphLGZpbHRlclVwcGVyVmFsdWU6cn0pKSxPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2ZpbHRlcnM6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuZmlsdGVycykse1tsXTpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sYykse2hwYXJhbXM6bX0pfSl9KX0pKSxwUyhVQSwoKHQsZSk9Pnt2YXIgbjtjb25zdHtleHBlcmltZW50SWRzOm8sbWV0cmljVGFnOmksZmlsdGVyTG93ZXJWYWx1ZTphLGZpbHRlclVwcGVyVmFsdWU6cixpbmNsdWRlVW5kZWZpbmVkOnN9PWUsbD1XQShvKSxjPW51bGwhPT0obj10LmZpbHRlcnNbbF0pJiZ2b2lkIDAhPT1uP246e21ldHJpY3M6bmV3IE1hcCxocGFyYW1zOm5ldyBNYXB9LGQ9WUEoby5maWx0ZXIoKGU9PkJvb2xlYW4odC5zcGVjc1tlXSkpKS5tYXAoKGU9PnQuc3BlY3NbZV0ubWV0cmljLmRlZmF1bHRGaWx0ZXJzKSkpLmdldChpKTtpZighZCl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBzZXQgbWV0cmljLCAke2l9LCB3aGVuIGl0IGlzIG5vdCBrbm93biBmb3IgZXhwZXJpbWVudElkczogJHtvLmpvaW4oIiwgIil9YCk7Y29uc3QgcD1jLm1ldHJpY3MuZ2V0KGkpLG09bmV3IE1hcChjLm1ldHJpY3MpO3JldHVybiBtLnNldChpLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxwKSx7dHlwZTpMQS5JTlRFUlZBTCxpbmNsdWRlVW5kZWZpbmVkOnMsbWluVmFsdWU6ZC5taW5WYWx1ZSxtYXhWYWx1ZTpkLm1heFZhbHVlLGZpbHRlckxvd2VyVmFsdWU6YSxmaWx0ZXJVcHBlclZhbHVlOnJ9KSksT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtmaWx0ZXJzOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LmZpbHRlcnMpLHtbbF06T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGMpLHttZXRyaWNzOm19KX0pfSl9KSkscFMoUEEsKCh0LGUpPT57dmFyIG4sbyxpLGE7aWYoMD09PU9iamVjdC5rZXlzKGUubmV3UnVuc0FuZE1ldGFkYXRhKS5sZW5ndGgpcmV0dXJuIHQ7Y29uc3Qgcj1PYmplY3QuYXNzaWduKHt9LHQuc3BlY3MpLHM9bmV3IE1hcCxsPW5ldyBTZXQ7Zm9yKGNvbnN0IHQgb2YgT2JqZWN0LmtleXMoZS5uZXdSdW5zQW5kTWV0YWRhdGEpKXtjb25zdCBjPW5ldyBNYXAsZD1uZXcgTWFwLHA9bmV3IE1hcCxtPW5ldyBNYXAse3J1bnM6dSxtZXRhZGF0YTpmfT1lLm5ld1J1bnNBbmRNZXRhZGF0YVt0XTtmb3IoY29uc3QgdCBvZiB1KXtjb25zdCBlPWYucnVuVG9IcGFyYW1zQW5kTWV0cmljc1t0LmlkXTtpZihlKWZvcihjb25zdCB0IG9mIGUubWV0cmljcyl7Y29uc3QgZT1zLmdldCh0LnRhZyk7cy5zZXQodC50YWcse21pbjplP01hdGgubWluKGUubWluLHQudmFsdWUpOnQudmFsdWUsbWF4OmU/TWF0aC5tYXgoZS5tYXgsdC52YWx1ZSk6dC52YWx1ZX0pfX1mb3IoY29uc3R7bmFtZTp0LGRvbWFpbjplfW9mIGYuaHBhcmFtU3BlY3MpaWYoZS50eXBlPT09TEEuRElTQ1JFVEUpe2NvbnN0IG49cC5nZXQodCl8fG5ldyBTZXQ7Zm9yKGNvbnN0IHQgb2YgZS52YWx1ZXMpbi5hZGQodCk7cC5zZXQodCxuKX1lbHNle2NvbnN0IG49bS5nZXQodCk7bS5zZXQodCx7bWluVmFsdWU6bj9NYXRoLm1pbihlLm1pblZhbHVlLG4ubWluVmFsdWUpOmUubWluVmFsdWUsbWF4VmFsdWU6bj9NYXRoLm1heChlLm1heFZhbHVlLG4ubWF4VmFsdWUpOmUubWF4VmFsdWV9KX1mb3IoY29uc3QgdCBvZiBmLm1ldHJpY1NwZWNzKWwuYWRkKHQudGFnKTtmb3IoY29uc3RbdCxlXW9mIHApYy5zZXQodCx7dHlwZTpMQS5ESVNDUkVURSxpbmNsdWRlVW5kZWZpbmVkOiEwLHBvc3NpYmxlVmFsdWVzOlsuLi5lXSxmaWx0ZXJWYWx1ZXM6Wy4uLmVdfSk7Zm9yKGNvbnN0W3Qse21pblZhbHVlOmUsbWF4VmFsdWU6bn1db2YgbSljLnNldCh0LHt0eXBlOkxBLklOVEVSVkFMLGluY2x1ZGVVbmRlZmluZWQ6ITAsbWluVmFsdWU6ZSxtYXhWYWx1ZTpuLGZpbHRlckxvd2VyVmFsdWU6ZSxmaWx0ZXJVcHBlclZhbHVlOm59KTtmb3IoY29uc3QgdCBvZiBsKXtjb25zdCBlPXMuZ2V0KHQpLGk9bnVsbCE9PShuPW51bGw9PWU/dm9pZCAwOmUubWluKSYmdm9pZCAwIT09bj9uOjAsYT1udWxsIT09KG89bnVsbD09ZT92b2lkIDA6ZS5tYXgpJiZ2b2lkIDAhPT1vP286MDtkLnNldCh0LHt0eXBlOkxBLklOVEVSVkFMLGluY2x1ZGVVbmRlZmluZWQ6ITAsbWluVmFsdWU6aSxtYXhWYWx1ZTphLGZpbHRlckxvd2VyVmFsdWU6aSxmaWx0ZXJVcHBlclZhbHVlOmF9KX1yW3RdPXtocGFyYW06T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LG51bGw9PT0oaT1yW3RdKXx8dm9pZCAwPT09aT92b2lkIDA6aS5ocGFyYW0pLHtzcGVjczpmLmhwYXJhbVNwZWNzLGRlZmF1bHRGaWx0ZXJzOmN9KSxtZXRyaWM6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LG51bGw9PT0oYT1yW3RdKXx8dm9pZCAwPT09YT92b2lkIDA6YS5tZXRyaWMpLHtzcGVjczpmLm1ldHJpY1NwZWNzLGRlZmF1bHRGaWx0ZXJzOmR9KX19cmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7c3BlY3M6cn0pfSkpKTtmdW5jdGlvbiBaQSh0LGUpe3JldHVybiBxQSh0LGUpfWNsYXNzIFhBe31YQS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8WEEpfSxYQS7JtW1vZD1abyh7dHlwZTpYQX0pLFhBLsm1aW5qPWNvKHtpbXBvcnRzOltbaVMuZm9yRmVhdHVyZSh4QSxaQSldXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oWEEse2ltcG9ydHM6W29TXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoWEEsW3t0eXBlOmtfLGFyZ3M6W3tpbXBvcnRzOltpUy5mb3JGZWF0dXJlKHhBLFpBKV19XX1dLG51bGwsbnVsbCk7Y2xhc3MgS0F7fWZ1bmN0aW9uIEpBKHQsZSl7cmV0dXJuYCR7ZX0vJHt0fWB9S0EuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEtBKX0sS0EuybVtb2Q9Wm8oe3R5cGU6S0F9KSxLQS7JtWluaj1jbyh7aW1wb3J0czpbW1hBXV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKEtBLHtpbXBvcnRzOltYQV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEtBLFt7dHlwZTprXyxhcmdzOlt7aW1wb3J0czpbWEFdfV19XSxudWxsLG51bGwpO2NsYXNzIFFBe2NvbnN0cnVjdG9yKHQpe3RoaXMuaHR0cD10fWZldGNoUnVucyh0KXtyZXR1cm4gdGhpcy5odHRwLmdldCgiZGF0YS9ydW5zIikucGlwZShodCgoZT0+ZS5tYXAoKGU9Pih7aWQ6SkEoZSx0KSxuYW1lOmUsc3RhcnRUaW1lOjB9KSkpKSkpfWZldGNoSHBhcmFtc01ldGFkYXRhKHQpe3JldHVybiBaKHtocGFyYW1TcGVjczpbXSxtZXRyaWNTcGVjczpbXSxydW5Ub0hwYXJhbXNBbmRNZXRyaWNzOnt9fSl9fVFBLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxRQSkodXMoRUUpKX0sUUEuybVwcm92PWxvKHt0b2tlbjpRQSxmYWN0b3J5OlFBLsm1ZmFjfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihRQSxbe3R5cGU6Sm19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6RUV9XX0pLG51bGwpO2NsYXNzICRBe30kQS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8JEEpfSwkQS7JtW1vZD1abyh7dHlwZTokQX0pLCRBLsm1aW5qPWNvKHtwcm92aWRlcnM6W3twcm92aWRlOkJBLHVzZUNsYXNzOlFBfV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKCRBLFt7dHlwZTprXyxhcmdzOlt7cHJvdmlkZXJzOlt7cHJvdmlkZTpCQSx1c2VDbGFzczpRQX1dfV19XSxudWxsLG51bGwpO2NvbnN0IHRSPSJhbGVydHMiLGVSPXprKEZrKHRSKSwodD0+dC5sYXRlc3RBbGVydCkpLG5SPSJleHBlcmltZW50cyIsb1I9emsoRmsoblIpLCh0PT50LmRhdGEpKSxpUj16ayhvUiwoKHQsZSk9Pntjb25zdHtleHBlcmltZW50SWQ6bn09ZTtyZXR1cm4gdC5leHBlcmltZW50TWFwW25dfHxudWxsfSkpOwovKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLgoKICAgIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQogICAgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLgoKICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRICiAgICBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkKICAgIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCwKICAgIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTQogICAgTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IKICAgIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IKICAgIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCiAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwpmdW5jdGlvbiBhUih0LGUpe3ZhciBuPXt9O2Zvcih2YXIgbyBpbiB0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG8pJiZlLmluZGV4T2Yobyk8MCYmKG5bb109dFtvXSk7aWYobnVsbCE9dCYmImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBpPTA7Zm9yKG89T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KTtpPG8ubGVuZ3RoO2krKyllLmluZGV4T2Yob1tpXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHQsb1tpXSkmJihuW29baV1dPXRbb1tpXV0pfXJldHVybiBufWZ1bmN0aW9uIHJSKHQsZSxuLG8pe3JldHVybiBuZXcobnx8KG49UHJvbWlzZSkpKChmdW5jdGlvbihpLGEpe2Z1bmN0aW9uIHIodCl7dHJ5e2woby5uZXh0KHQpKX1jYXRjaCh0KXthKHQpfX1mdW5jdGlvbiBzKHQpe3RyeXtsKG8udGhyb3codCkpfWNhdGNoKHQpe2EodCl9fWZ1bmN0aW9uIGwodCl7dC5kb25lP2kodC52YWx1ZSk6KGZ1bmN0aW9uIGUodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBuP3Q6bmV3IG4oKGZ1bmN0aW9uKGUpe2UodCl9KSl9KSh0LnZhbHVlKS50aGVuKHIscyl9bCgobz1vLmFwcGx5KHQsZXx8W10pKS5uZXh0KCkpfSkpfXZhciBzUixsUixjUjshKGZ1bmN0aW9uKHQpe3QuU0NBTEFSUz0ic2NhbGFycyIsdC5ISVNUT0dSQU1TPSJoaXN0b2dyYW1zIix0LklNQUdFUz0iaW1hZ2VzIn0pKHNSfHwoc1I9e30pKSwoZnVuY3Rpb24odCl7dC5ERUZBVUxUPSJkZWZhdWx0Iix0LkFTQ0VORElORz0iYXNjZW5kaW5nIix0LkRFU0NFTkRJTkc9ImRlc2NlbmRpbmciLHQuTkVBUkVTVD0ibmVhcmVzdCJ9KShsUnx8KGxSPXt9KSksKGZ1bmN0aW9uKHQpe3RbdC5TVEVQPTBdPSJTVEVQIix0W3QuUkVMQVRJVkU9MV09IlJFTEFUSVZFIix0W3QuV0FMTF9USU1FPTJdPSJXQUxMX1RJTUUifSkoY1J8fChjUj17fSkpO2NvbnN0IGRSPSJ0aW1lc2VyaWVzIixwUj1bc1IuSU1BR0VTXTtmdW5jdGlvbiBtUih0KXtyZXR1cm4gcFIuaW5jbHVkZXModCl9Y29uc3QgdVI9W3NSLkhJU1RPR1JBTVMsc1IuSU1BR0VTXTtmdW5jdGlvbiBmUih0KXtyZXR1cm4gdVIuaW5jbHVkZXModCl9ZnVuY3Rpb24gZ1IodCl7cmV0dXJuIGZSKHQucGx1Z2luKX1jbGFzcyBoUnt9ZnVuY3Rpb24gYlIodCl7cmV0dXJuIHQuaGFzT3duUHJvcGVydHkoImVycm9yIil9Y29uc3QgeVI9ImRhdGEvcGx1Z2luL3RpbWVzZXJpZXMiO2Z1bmN0aW9uIF9SKHQpe2NvbnN0IGU9dC5pbmRleE9mKCIvIik7cmV0dXJue3J1bjp0LnN1YnN0cmluZyhlKzEpLGV4cGVyaW1lbnRJZDp0LnN1YnN0cmluZygwLGUpfX1mdW5jdGlvbiBDUih0LGUpe3JldHVybmAke2V9LyR7dH1gfWZ1bmN0aW9uIE1SKHQsZSl7Y29uc3R7cnVuVG9TZXJpZXM6bixydW46b309dCxpPWFSKHQsWyJydW5Ub1NlcmllcyIsInJ1biJdKSxhPU9iamVjdC5hc3NpZ24oe30saSk7cmV0dXJuIG4mJihhLnJ1blRvU2VyaWVzPXZSKG4sZSkpLG8mJihhLnJ1bklkPUNSKG8sZSkpLGF9ZnVuY3Rpb24gdlIodCxlKXtjb25zdCBuPXt9O2Zvcihjb25zdCBvIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShvKSYmKG5bQ1IobyxlKV09dFtvXSk7cmV0dXJuIG59Y2xhc3MgeFJ7Y29uc3RydWN0b3IodCxlKXt0aGlzLmh0dHA9dCx0aGlzLnN0b3JlPWV9ZmV0Y2hUYWdNZXRhZGF0YSh0KXtjb25zdCBlPXQubWFwKCh0PT50aGlzLmh0dHAuZ2V0KGAvZXhwZXJpbWVudC8ke3R9LyR7eVJ9L3RhZ3NgKS5waXBlKGh0KChlPT4oZnVuY3Rpb24gbih0LGUpe2NvbnN0IG49e307Zm9yKGNvbnN0IG8gb2YgT2JqZWN0LmtleXModCkpe2NvbnN0IGk9bztpZihtUihpKSl7Y29uc3Qgbz10W2ldLHt0YWdSdW5TYW1wbGVkSW5mbzphfT1vLHI9YVIobyxbInRhZ1J1blNhbXBsZWRJbmZvIl0pLHM9e307Zm9yKGNvbnN0IHQgaW4gYSlhLmhhc093blByb3BlcnR5KHQpJiYoc1t0XT12UihhW3RdLGUpKTtuW2ldPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxyKSx7dGFnUnVuU2FtcGxlZEluZm86c30pfWVsc2V7Y29uc3Qgbz10W2ldLHtydW5UYWdJbmZvOmF9PW8scj1hUihvLFsicnVuVGFnSW5mbyJdKTtuW2ldPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxyKSx7cnVuVGFnSW5mbzp2UihhLGUpfSl9fXJldHVybiBufSkoZSx0KSkpKSkpLG49dGhpcy5zdG9yZS5zZWxlY3QoYkUpLnBpcGUoR3QoQm9vbGVhbiksTmUoMSksa24odGhpcy5zdG9yZS5zZWxlY3Qoa0UpKSxodCgoKFssdF0pPT50KSkpO3JldHVybiBMdChlKS5waXBlKGtuKG4pLGh0KCgoW3QsZV0pPT57Y29uc3Qgbj0oZnVuY3Rpb24gbyh0KXtjb25zdCBlPXt9O2Zvcihjb25zdCBuIG9mIHQpZm9yKGNvbnN0IHQgb2YgT2JqZWN0LnZhbHVlcyhzUikpaWYobVIodCkpe2VbdF09ZVt0XXx8e3RhZ0Rlc2NyaXB0aW9uczp7fSx0YWdSdW5TYW1wbGVkSW5mbzp7fX07Y29uc3R7dGFnRGVzY3JpcHRpb25zOm8sdGFnUnVuU2FtcGxlZEluZm86aX09blt0XTtlW3RdLnRhZ0Rlc2NyaXB0aW9ucz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZVt0XS50YWdEZXNjcmlwdGlvbnMpLG8pO2NvbnN0IGE9ZVt0XS50YWdSdW5TYW1wbGVkSW5mbztmb3IoY29uc3QgdCBvZiBPYmplY3Qua2V5cyhpKSl7YVt0XT1hW3RdfHx7fTtmb3IoY29uc3QgZSBvZiBPYmplY3Qua2V5cyhpW3RdKSlhW3RdW2VdPWlbdF1bZV19fWVsc2V7ZVt0XT1lW3RdfHx7dGFnRGVzY3JpcHRpb25zOnt9LHJ1blRhZ0luZm86e319O2NvbnN0e3RhZ0Rlc2NyaXB0aW9uczpvLHJ1blRhZ0luZm86aX09blt0XTtlW3RdLnRhZ0Rlc2NyaXB0aW9ucz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZVt0XS50YWdEZXNjcmlwdGlvbnMpLG8pLGVbdF0ucnVuVGFnSW5mbz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZVt0XS5ydW5UYWdJbmZvKSxpKX1yZXR1cm4gZX0pKHQpO3JldHVybiBlfHwobltzUi5JTUFHRVNdPXt0YWdEZXNjcmlwdGlvbnM6e30sdGFnUnVuU2FtcGxlZEluZm86e319KSxufSkpKX1mZXRjaFRpbWVTZXJpZXModCl7Y29uc3QgZT10Lm1hcCgodD0+e2lmKGZSKHQucGx1Z2luKSl7Y29uc3QgZT10LHtydW5JZDpufT1lLG89YVIoZSxbInJ1bklkIl0pLHtydW46aSxleHBlcmltZW50SWQ6YX09X1Iobikscj1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sbykse3J1bjppfSk7cmV0dXJuIHRoaXMuZmV0Y2hUaW1lU2VyaWVzQmFja2VuZFJlcXVlc3QocixhKS5waXBlKGh0KCgoe3Jlc3BvbnNlOnQsZXhwZXJpbWVudElkOmV9KT0+TVIodCxlKSkpKX1jb25zdCBlPXQse2V4cGVyaW1lbnRJZHM6bn09ZSxvPWFSKGUsWyJleHBlcmltZW50SWRzIl0pO3JldHVybiBMdChuLm1hcCgodD0+dGhpcy5mZXRjaFRpbWVTZXJpZXNCYWNrZW5kUmVxdWVzdChvLHQpKSkpLnBpcGUoaHQoKHQ9Pntjb25zdCBlPWFSKHRbMF0ucmVzcG9uc2UsWyJydW5Ub1NlcmllcyIsImVycm9yIl0pO2Zvcihjb25zdHtyZXNwb25zZTpuLGV4cGVyaW1lbnRJZDpvfW9mIHQpe2NvbnN0IHQ9TVIobixvKTtpZihlLmVycm9yKWNvbnRpbnVlO2NvbnN0e3J1blRvU2VyaWVzOmksZXJyb3I6YX09dDtpZihhKWUuZXJyb3I9YSxlLnJ1blRvU2VyaWVzPXZvaWQgMDtlbHNle2UucnVuVG9TZXJpZXM9ZS5ydW5Ub1Nlcmllc3x8e307Zm9yKGNvbnN0IHQgb2YgT2JqZWN0LmtleXMoaSkpZS5ydW5Ub1Nlcmllc1t0XT1pW3RdfX1yZXR1cm4gZX0pKSl9KSk7cmV0dXJuIEx0KGUpfWZldGNoVGltZVNlcmllc0JhY2tlbmRSZXF1ZXN0KHQsZSl7Y29uc3Qgbj1uZXcgRm9ybURhdGE7cmV0dXJuIG4uYXBwZW5kKCJyZXF1ZXN0cyIsSlNPTi5zdHJpbmdpZnkoW3RdKSksdGhpcy5odHRwLnBvc3QoYC9leHBlcmltZW50LyR7ZX0vJHt5Un0vdGltZVNlcmllc2AsbikucGlwZShodCgodD0+KHtyZXNwb25zZTp0WzBdLGV4cGVyaW1lbnRJZDplfSkpKSl9aW1hZ2VVcmwodCl7cmV0dXJuYCR7eVJ9L2ltYWdlRGF0YT9pbWFnZUlkPSR7dH1gfWRvd25sb2FkVXJsKHQsZSxuLG8pe2NvbnN0e3J1bjppLGV4cGVyaW1lbnRJZDphfT1fUihuKTtsZXQgcjtzd2l0Y2godCl7Y2FzZSBzUi5TQ0FMQVJTOnI9InNjYWxhcnMvc2NhbGFycyI7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYE5vdCBpbXBsZW1lbnRlZDogZG93bmxvYWRVcmwgZm9yICR7dH0gaXMgbm90IGltcGxlbWVudGVkIHlldGApfWlmKCFhKXRocm93IG5ldyBFcnJvcigiZXhwZXJpbWVudElkIGlzIGVtcHR5OyBpdCBpcyByZXF1aXJlZCB0byBmb3JtIGRvd25sb2FkVXJsLiIpO3JldHVybmAvZXhwZXJpbWVudC8ke2F9L2RhdGEvcGx1Z2luLyR7cn0/JHtuZXcgVVJMU2VhcmNoUGFyYW1zKHt0YWc6ZSxydW46aSxmb3JtYXQ6b30pfWB9fXZhciBPUjt4Ui7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8eFIpKHVzKEVFKSx1cyhFaykpfSx4Ui7JtXByb3Y9bG8oe3Rva2VuOnhSLGZhY3Rvcnk6eFIuybVmYWN9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHhSLFt7dHlwZTpKbX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpFRX0se3R5cGU6RWt9XX0pLG51bGwpLChmdW5jdGlvbih0KXt0LkJST1dTRVJfREVGQVVMVD0iYnJvd3Nlcl9kZWZhdWx0Iix0LkxJR0hUPSJsaWdodCIsdC5EQVJLPSJkYXJrIn0pKE9SfHwoT1I9e30pKTtjb25zdCBQUj1XdygiW1BlcnNpc3RlbnQgU2V0dGluZ3NdIEdsb2JhbCBTZXR0aW5ncyBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSx3Uj1uZXcgTnIoIltQZXJzaXN0ZW50IFNldHRpbmdzXSBHbG9iYWwgU2V0dGluZ3MiKTtjbGFzcyBrUntjb25zdHJ1Y3Rvcih0KXt0aGlzLmdsb2JhbFNldHRpbmdTZWxlY3RvcnM9W10sdCYmKHRoaXMuZ2xvYmFsU2V0dGluZ1NlbGVjdG9ycz10Lm1hcCgodD0+dCgpKSkpfWdldEdsb2JhbFNldHRpbmdTZWxlY3RvcnMoKXt2YXIgdDtyZXR1cm4gbnVsbCE9PSh0PXRoaXMuZ2xvYmFsU2V0dGluZ1NlbGVjdG9ycykmJnZvaWQgMCE9PXQ/dDpbXX1zdGF0aWMgZGVmaW5lR2xvYmFsU2V0dGluZyh0KXtyZXR1cm57bmdNb2R1bGU6a1IscHJvdmlkZXJzOlt7cHJvdmlkZTp3UixtdWx0aTohMCx1c2VWYWx1ZTp0fV19fX1rUi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8a1IpKHVzKHdSLDgpKX0sa1IuybVtb2Q9Wm8oe3R5cGU6a1J9KSxrUi7JtWluaj1jbyh7fSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihrUixbe3R5cGU6a199XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6QXJyYXksZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W3dSXX1dfV19KSxudWxsKTtjbGFzcyBTUntzZXRJdGVtKHQsZSl7bG9jYWxTdG9yYWdlLnNldEl0ZW0odCxlKX1nZXRJdGVtKHQpe3JldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0KX1yZW1vdmVJdGVtKHQpe2xvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHQpfX1TUi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8U1IpfSxTUi7JtXByb3Y9bG8oe3Rva2VuOlNSLGZhY3Rvcnk6U1IuybVmYWN9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFNSLFt7dHlwZTpKbX1dLG51bGwsbnVsbCk7Y2xhc3MgRFJ7fURSLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxEUil9LERSLsm1bW9kPVpvKHt0eXBlOkRSfSksRFIuybVpbmo9Y28oe3Byb3ZpZGVyczpbU1JdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihEUixbe3R5cGU6a18sYXJnczpbe3Byb3ZpZGVyczpbU1JdfV19XSxudWxsLG51bGwpO2NvbnN0IEVSPSJfdGJfZ2xvYmFsX3NldHRpbmdzLnRpbWVzZXJpZXMiLEFSPSJfdGJfZ2xvYmFsX3NldHRpbmdzIixSUj0ibm90aWZpY2F0aW9uTGFzdFJlYWRUaW1lc3RhbXAiO2NsYXNzIFRSe31UUi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8VFIpfSxUUi7JtXByb3Y9bG8oe3Rva2VuOlRSLGZhY3Rvcnk6VFIuybVmYWN9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFRSLFt7dHlwZTpKbX1dLG51bGwsbnVsbCk7Y2xhc3MgTlJ7fU5SLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxOUil9LE5SLsm1cHJvdj1sbyh7dG9rZW46TlIsZmFjdG9yeTpOUi7JtWZhY30pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoTlIsW3t0eXBlOkptfV0sbnVsbCxudWxsKTtjbGFzcyBJUiBleHRlbmRzIE5Se3VpVG9CYWNrZW5kKHQpe3JldHVybntpZ25vcmVPdXRsaWVyczp0Lmlnbm9yZU91dGxpZXJzLHNjYWxhclNtb290aGluZzp0LnNjYWxhclNtb290aGluZyx0b29sdGlwU29ydDp0LnRvb2x0aXBTb3J0U3RyaW5nLGF1dG9SZWxvYWQ6dC5hdXRvUmVsb2FkLGF1dG9SZWxvYWRQZXJpb2RJbk1zOnQuYXV0b1JlbG9hZFBlcmlvZEluTXMscGFnaW5hdGlvblNpemU6dC5wYWdlU2l6ZSx0aGVtZTp0LnRoZW1lT3ZlcnJpZGUsbm90aWZpY2F0aW9uTGFzdFJlYWRUaW1lSW5Nczp0Lm5vdGlmaWNhdGlvbkxhc3RSZWFkVGltZUluTXN9fWJhY2tlbmRUb1VpKHQpe2NvbnN0IGU9e307cmV0dXJuIHQuaGFzT3duUHJvcGVydHkoInNjYWxhclNtb290aGluZyIpJiYibnVtYmVyIj09dHlwZW9mIHQuc2NhbGFyU21vb3RoaW5nJiYoZS5zY2FsYXJTbW9vdGhpbmc9dC5zY2FsYXJTbW9vdGhpbmcpLHQuaGFzT3duUHJvcGVydHkoImlnbm9yZU91dGxpZXJzIikmJiJib29sZWFuIj09dHlwZW9mIHQuaWdub3JlT3V0bGllcnMmJihlLmlnbm9yZU91dGxpZXJzPXQuaWdub3JlT3V0bGllcnMpLHQuaGFzT3duUHJvcGVydHkoInRvb2x0aXBTb3J0IikmJiJzdHJpbmciPT10eXBlb2YgdC50b29sdGlwU29ydCYmKGUudG9vbHRpcFNvcnRTdHJpbmc9dC50b29sdGlwU29ydCksdC5oYXNPd25Qcm9wZXJ0eSgiYXV0b1JlbG9hZCIpJiYiYm9vbGVhbiI9PXR5cGVvZiB0LmF1dG9SZWxvYWQmJihlLmF1dG9SZWxvYWQ9dC5hdXRvUmVsb2FkKSx0Lmhhc093blByb3BlcnR5KCJhdXRvUmVsb2FkUGVyaW9kSW5NcyIpJiYibnVtYmVyIj09dHlwZW9mIHQuYXV0b1JlbG9hZFBlcmlvZEluTXMmJihlLmF1dG9SZWxvYWRQZXJpb2RJbk1zPXQuYXV0b1JlbG9hZFBlcmlvZEluTXMpLHQuaGFzT3duUHJvcGVydHkoInBhZ2luYXRpb25TaXplIikmJiJudW1iZXIiPT10eXBlb2YgdC5wYWdpbmF0aW9uU2l6ZSYmKGUucGFnZVNpemU9dC5wYWdpbmF0aW9uU2l6ZSksdC5oYXNPd25Qcm9wZXJ0eSgidGhlbWUiKSYmInN0cmluZyI9PXR5cGVvZiB0LnRoZW1lJiZuZXcgU2V0KE9iamVjdC52YWx1ZXMoT1IpKS5oYXModC50aGVtZSkmJihlLnRoZW1lT3ZlcnJpZGU9dC50aGVtZSksdC5oYXNPd25Qcm9wZXJ0eSgibm90aWZpY2F0aW9uTGFzdFJlYWRUaW1lSW5NcyIpJiYibnVtYmVyIj09dHlwZW9mIHQubm90aWZpY2F0aW9uTGFzdFJlYWRUaW1lSW5NcyYmKGUubm90aWZpY2F0aW9uTGFzdFJlYWRUaW1lSW5Ncz10Lm5vdGlmaWNhdGlvbkxhc3RSZWFkVGltZUluTXMpLGV9fUlSLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIHpSKGV8fElSKX0sSVIuybVwcm92PWxvKHt0b2tlbjpJUixmYWN0b3J5OklSLsm1ZmFjfSk7Y29uc3QgelI9dnIoSVIpOygidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoSVIsW3t0eXBlOkptfV0sbnVsbCxudWxsKTtjbGFzcyBIUntjb25zdHJ1Y3Rvcih0LGUpe3RoaXMubG9jYWxTdG9yYWdlPXQsdGhpcy5jb252ZXJ0ZXI9ZX1zZXRTZXR0aW5ncyh0KXtyZXR1cm4gT2JqZWN0LmtleXModCk/dGhpcy5nZXRTZXR0aW5ncygpLnBpcGUoX24oKGU9Pnt0aGlzLmxvY2FsU3RvcmFnZS5zZXRJdGVtKEFSLEpTT04uc3RyaW5naWZ5KHRoaXMuY29udmVydGVyLnVpVG9CYWNrZW5kKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSx0KSkpKSx0aGlzLmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKEVSKSx0aGlzLmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFJSKX0pKSxodCgoKCk9Pnt9KSkpOlV9ZGVzZXJpYWxpemUodCl7dHJ5e3JldHVybiBKU09OLnBhcnNlKHQpfWNhdGNoKHQpe3JldHVybnt9fX1nZXRTZXR0aW5ncygpe3ZhciB0LGU7Y29uc3Qgbj10aGlzLmxvY2FsU3RvcmFnZS5nZXRJdGVtKFJSKSxvPXRoaXMuY29udmVydGVyLmJhY2tlbmRUb1VpKHRoaXMuZGVzZXJpYWxpemUobj9KU09OLnN0cmluZ2lmeSh7bm90aWZpY2F0aW9uTGFzdFJlYWRUaW1lSW5NczpOdW1iZXIobil9KToie30iKSksaT10aGlzLmNvbnZlcnRlci5iYWNrZW5kVG9VaSh0aGlzLmRlc2VyaWFsaXplKG51bGwhPT0odD10aGlzLmxvY2FsU3RvcmFnZS5nZXRJdGVtKEVSKSkmJnZvaWQgMCE9PXQ/dDoie30iKSksYT10aGlzLmNvbnZlcnRlci5iYWNrZW5kVG9VaSh0aGlzLmRlc2VyaWFsaXplKG51bGwhPT0oZT10aGlzLmxvY2FsU3RvcmFnZS5nZXRJdGVtKEFSKSkmJnZvaWQgMCE9PWU/ZToie30iKSk7cmV0dXJuIFooT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sbyksaSksYSkpfX1IUi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8SFIpKHVzKFNSKSx1cyhOUikpfSxIUi7JtXByb3Y9bG8oe3Rva2VuOkhSLGZhY3Rvcnk6SFIuybVmYWN9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEhSLFt7dHlwZTpKbX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpTUn0se3R5cGU6TlJ9XX0pLG51bGwpO2NsYXNzIEZSe31GUi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8RlIpfSxGUi7JtW1vZD1abyh7dHlwZTpGUn0pLEZSLsm1aW5qPWNvKHtwcm92aWRlcnM6W3twcm92aWRlOlRSLHVzZUNsYXNzOkhSfSx7cHJvdmlkZTpOUix1c2VDbGFzczpJUn1dLGltcG9ydHM6W1tEUl1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhGUix7aW1wb3J0czpbRFJdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihGUixbe3R5cGU6a18sYXJnczpbe2ltcG9ydHM6W0RSXSxwcm92aWRlcnM6W3twcm92aWRlOlRSLHVzZUNsYXNzOkhSfSx7cHJvdmlkZTpOUix1c2VDbGFzczpJUn1dfV19XSxudWxsLG51bGwpO2NvbnN0IExSPVd3KCJbUGVyc2lzdGVudCBTZXR0aW5nc10gRWZmZWN0cyBJbml0Iik7Y2xhc3MgQlJ7Y29uc3RydWN0b3IodCxlLG4sbyl7dGhpcy5hY3Rpb25zJD10LHRoaXMuc3RvcmU9ZSx0aGlzLmNvbmZpZ01vZHVsZT1uLHRoaXMuZGF0YVNvdXJjZT1vLHRoaXMuaW5pdGlhbGl6ZUFuZFVwZGF0ZVNldHRpbmdzJD1nUygoKCk9Pntjb25zdCB0PXRoaXMuYWN0aW9ucyQucGlwZSh4UyhMUiksVHQoKCgpPT50aGlzLmRhdGFTb3VyY2UuZ2V0U2V0dGluZ3MoKSkpLF9uKCh0PT57dGhpcy5zdG9yZS5kaXNwYXRjaChQUih7cGFydGlhbFNldHRpbmdzOnR9KSl9KSksYmUoMCksVHQoKCgpPT5XdCguLi50aGlzLmNvbmZpZ01vZHVsZS5nZXRHbG9iYWxTZXR0aW5nU2VsZWN0b3JzKCkubWFwKCh0PT50aGlzLnN0b3JlLnNlbGVjdCh0KS5waXBlKGtlKCgodCxlKT0+e2NvbnN0IG49T2JqZWN0LnZhbHVlcyh0KSxvPU9iamVjdC52YWx1ZXMoZSk7cmV0dXJuIG4ubGVuZ3RoPT09by5sZW5ndGgmJm4uZXZlcnkoKCh0LGUpPT50PT09b1tlXSkpfSkpLHJuKDEpKSkpKSkpLG9uKCkpO3JldHVybiB0LnBpcGUoKGZ1bmN0aW9uIGUodCl7cmV0dXJuIGZ1bmN0aW9uIGUobil7cmV0dXJuIG4ubGlmdChuZXcgaWUodCkpfX0pKHQucGlwZShkZSg1MDApKSksVHQoKHQ9Pntjb25zdCBlPXt9O2Zvcihjb25zdCBuIG9mIHQpT2JqZWN0LmFzc2lnbihlLG4pO3JldHVybiB0aGlzLmRhdGFTb3VyY2Uuc2V0U2V0dGluZ3MoZSl9KSkpfSkse2Rpc3BhdGNoOiExfSl9bmdyeE9uSW5pdEVmZmVjdHMoKXtyZXR1cm4gTFIoKX19QlIuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEJSKSh1cyh2UyksdXMoRWspLHVzKGtSKSx1cyhUUikpfSxCUi7JtXByb3Y9bG8oe3Rva2VuOkJSLGZhY3Rvcnk6QlIuybVmYWN9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEJSLFt7dHlwZTpKbX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTp2U30se3R5cGU6RWt9LHt0eXBlOmtSfSx7dHlwZTpUUn1dfSksbnVsbCk7Y2xhc3MgVlJ7fVZSLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxWUil9LFZSLsm1bW9kPVpvKHt0eXBlOlZSfSksVlIuybVpbmo9Y28oe3Byb3ZpZGVyczpba1JdLGltcG9ydHM6W1tMUy5mb3JGZWF0dXJlKFtCUl0pLEZSXV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKFZSLHtpbXBvcnRzOltGUyxGUl19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFZSLFt7dHlwZTprXyxhcmdzOlt7aW1wb3J0czpbTFMuZm9yRmVhdHVyZShbQlJdKSxGUl0scHJvdmlkZXJzOltrUl19XX1dLG51bGwsbnVsbCk7Y2xhc3MgalJ7fWpSLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxqUil9LGpSLsm1cHJvdj1sbyh7dG9rZW46alIsZmFjdG9yeTpqUi7JtWZhY30pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoalIsW3t0eXBlOkptfV0sbnVsbCxudWxsKTtjb25zdCBVUj0iZXhwZXJpbWVudGFsUGx1Z2luIixXUj0ic2NhbGFyc0JhdGNoU2l6ZSIsR1I9ImVuYWJsZUNvbG9yR3JvdXAiLFlSPSJlbmFibGVDb2xvckdyb3VwQnlSZWdleCIscVI9ImRhcmtNb2RlIixaUj0iZW5hYmxlTGlua1RpbWUiLFhSPW5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7Y2xhc3MgS1J7Z2V0UGFyYW1zKCl7cmV0dXJuIFhSfX1LUi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8S1IpfSxLUi7JtXByb3Y9bG8oe3Rva2VuOktSLGZhY3Rvcnk6S1IuybVmYWN9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEtSLFt7dHlwZTpKbX1dLG51bGwsbnVsbCk7Y2xhc3MgSlJ7Y29uc3RydWN0b3IodCl7dGhpcy5xdWVyeVBhcmFtcz10fWdldEZlYXR1cmVzKHQ9ITEpe2NvbnN0IGU9dGhpcy5xdWVyeVBhcmFtcy5nZXRQYXJhbXMoKSxuPXQ/dGhpcy5nZXRQYXJ0aWFsRmVhdHVyZXNGcm9tTWVkaWFRdWVyeSgpOnt9O3JldHVybiBlLmhhcyhVUikmJihuLmVuYWJsZWRFeHBlcmltZW50YWxQbHVnaW5zPWUuZ2V0QWxsKFVSKSksZS5oYXMoInRlbnNvcmJvYXJkQ29sYWIiKSYmKG4uaW5Db2xhYj0idHJ1ZSI9PT1lLmdldCgidGVuc29yYm9hcmRDb2xhYiIpKSxlLmhhcyhXUikmJihuLnNjYWxhcnNCYXRjaFNpemU9TnVtYmVyKGUuZ2V0KFdSKSkpLGUuaGFzKEdSKSYmKG4uZW5hYmxlZENvbG9yR3JvdXA9ImZhbHNlIiE9PWUuZ2V0KEdSKSksZS5oYXMoWVIpJiYobi5lbmFibGVkQ29sb3JHcm91cEJ5UmVnZXg9ImZhbHNlIiE9PWUuZ2V0KFlSKSksZS5oYXMocVIpJiYobi5kZWZhdWx0RW5hYmxlRGFya01vZGU9ImZhbHNlIiE9PWUuZ2V0KHFSKSksZS5oYXMoWlIpJiYobi5lbmFibGVkTGlua2VkVGltZT0iZmFsc2UiIT09ZS5nZXQoWlIpKSxufWdldFBhcnRpYWxGZWF0dXJlc0Zyb21NZWRpYVF1ZXJ5KCl7Y29uc3QgdD17fTtyZXR1cm4gd2luZG93Lm1hdGNoTWVkaWEoIihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykiKS5tYXRjaGVzJiYodC5kZWZhdWx0RW5hYmxlRGFya01vZGU9ITApLHR9fUpSLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxKUikodXMoS1IpKX0sSlIuybVwcm92PWxvKHt0b2tlbjpKUixmYWN0b3J5OkpSLsm1ZmFjfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihKUixbe3R5cGU6Sm19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6S1J9XX0pLG51bGwpO2NsYXNzIFFSe31RUi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8UVIpfSxRUi7JtW1vZD1abyh7dHlwZTpRUn0pLFFSLsm1aW5qPWNvKHtwcm92aWRlcnM6W0pSLEtSLHtwcm92aWRlOmpSLHVzZUNsYXNzOkpSfV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFFSLFt7dHlwZTprXyxhcmdzOlt7cHJvdmlkZXJzOltKUixLUix7cHJvdmlkZTpqUix1c2VDbGFzczpKUn1dfV19XSxudWxsLG51bGwpO2NvbnN0ICRSPVd3KCJbRkVBVFVSRSBGTEFHXSBQYXJ0aWFsIEZlYXR1cmUgRmxhZ3MgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksdFQ9V3coIltGRUFUVVJFIEZMQUddIEVuYWJsZSBEYXJrIE1vZGUgT3ZlcnJpZGUgQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGVUPVd3KCJbRkVBVFVSRSBGTEFHXSBFZmZlY3RzIEluaXQiKTtjbGFzcyBuVHtjb25zdHJ1Y3Rvcih0LGUsbil7dGhpcy5hY3Rpb25zJD10LHRoaXMuc3RvcmU9ZSx0aGlzLmRhdGFTb3VyY2U9bix0aGlzLmdldEZlYXR1cmVGbGFncyQ9Z1MoKCgpPT50aGlzLmFjdGlvbnMkLnBpcGUoeFMoZVQpLGNlKHRoaXMuc3RvcmUuc2VsZWN0KENFKSksaHQoKChbLHRdKT0+e2NvbnN0IGU9dGhpcy5kYXRhU291cmNlLmdldEZlYXR1cmVzKHQpO3JldHVybiAkUih7ZmVhdHVyZXM6ZX0pfSkpKSkpfW5ncnhPbkluaXRFZmZlY3RzKCl7cmV0dXJuIGVUKCl9fW5ULsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxuVCkodXModlMpLHVzKEVrKSx1cyhqUikpfSxuVC7JtXByb3Y9bG8oe3Rva2VuOm5ULGZhY3Rvcnk6blQuybVmYWN9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKG5ULFt7dHlwZTpKbX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTp2U30se3R5cGU6RWt9LHt0eXBlOmpSfV19KSxudWxsKTtjb25zdCBvVD17aXNGZWF0dXJlRmxhZ3NMb2FkZWQ6ITEsZGVmYXVsdEZsYWdzOntpc0F1dG9EYXJrTW9kZUFsbG93ZWQ6ITAsZGVmYXVsdEVuYWJsZURhcmtNb2RlOiExLGVuYWJsZURhcmtNb2RlT3ZlcnJpZGU6bnVsbCxlbmFibGVkQ29sb3JHcm91cDohMSxlbmFibGVkQ29sb3JHcm91cEJ5UmVnZXg6ITEsZW5hYmxlZEV4cGVyaW1lbnRhbFBsdWdpbnM6W10saW5Db2xhYjohMSxzY2FsYXJzQmF0Y2hTaXplOnZvaWQgMCxtZXRyaWNzSW1hZ2VTdXBwb3J0RW5hYmxlZDohMCxlbmFibGVkTGlua2VkVGltZTohMX0sZmxhZ092ZXJyaWRlczp7fX0saVQ9bmV3IE5yKCJbRmVhdHVyZSBGbGFnXSBTdG9yZSBDb25maWciKTtmdW5jdGlvbiBhVCgpe3JldHVybntpbml0aWFsU3RhdGU6b1R9fWNvbnN0IHJUPW1TKG9ULHBTKCRSLCgodCx7ZmVhdHVyZXM6ZX0pPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2lzRmVhdHVyZUZsYWdzTG9hZGVkOiEwLGZsYWdPdmVycmlkZXM6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuZmxhZ092ZXJyaWRlcyksZSl9KSkpLHBTKHRULCgodCx7ZW5hYmxlRGFya01vZGU6ZX0pPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2ZsYWdPdmVycmlkZXM6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuZmxhZ092ZXJyaWRlcykse2VuYWJsZURhcmtNb2RlT3ZlcnJpZGU6ZX0pfSkpKSxwUyhQUiwoKHQse3BhcnRpYWxTZXR0aW5nczplfSk9PntpZighZS50aGVtZU92ZXJyaWRlKXJldHVybiB0O2xldCBuO3N3aXRjaChlLnRoZW1lT3ZlcnJpZGUpe2Nhc2UgT1IuQlJPV1NFUl9ERUZBVUxUOm49bnVsbDticmVhaztjYXNlIE9SLkRBUks6bj0hMDticmVhaztjYXNlIE9SLkxJR0hUOm49ITF9cmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7ZmxhZ092ZXJyaWRlczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5mbGFnT3ZlcnJpZGVzKSx7ZW5hYmxlRGFya01vZGVPdmVycmlkZTpufSl9KX0pKSk7ZnVuY3Rpb24gc1QodCxlKXtyZXR1cm4gclQodCxlKX1mdW5jdGlvbiBsVCgpe3JldHVybiB6ayh2RSwodD0+bnVsbD09PXQ/e3RoZW1lT3ZlcnJpZGU6T1IuQlJPV1NFUl9ERUZBVUxUfTp7dGhlbWVPdmVycmlkZTp0P09SLkRBUks6T1IuTElHSFR9KSl9Y2xhc3MgY1R7fWNULsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxjVCl9LGNULsm1bW9kPVpvKHt0eXBlOmNUfSksY1QuybVpbmo9Y28oe3Byb3ZpZGVyczpbe3Byb3ZpZGU6aVQsdXNlRmFjdG9yeTphVH1dLGltcG9ydHM6W1tRUixpUy5mb3JGZWF0dXJlKGdFLHNULGlUKSxMUy5mb3JGZWF0dXJlKFtuVF0pLGtSLmRlZmluZUdsb2JhbFNldHRpbmcobFQpXV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKGNULHtpbXBvcnRzOltRUixvUyxGUyxrUl19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGNULFt7dHlwZTprXyxhcmdzOlt7aW1wb3J0czpbUVIsaVMuZm9yRmVhdHVyZShnRSxzVCxpVCksTFMuZm9yRmVhdHVyZShbblRdKSxrUi5kZWZpbmVHbG9iYWxTZXR0aW5nKGxUKV0scHJvdmlkZXJzOlt7cHJvdmlkZTppVCx1c2VGYWN0b3J5OmFUfV19XX1dLG51bGwsbnVsbCk7Y2xhc3MgZFR7fWZ1bmN0aW9uIHBUKHQsZSxuLG8pe3JldHVybiB0W2VdLmhhc093blByb3BlcnR5KG4pP21SKGUpP3RbZV1bbl0uaGFzT3duUHJvcGVydHkobyk/dFtlXVtuXVtvXTpudWxsOnRbZV1bbl06bnVsbH1mdW5jdGlvbiBtVCh0LGUsbixvKXtpZihtUihlKSl7Y29uc3QgaT1PYmplY3QuYXNzaWduKHt9LHRbZV0pLGE9KGZ1bmN0aW9uIGkodCxlLG4pe2NvbnN0IG89dC5oYXNPd25Qcm9wZXJ0eShlKT9PYmplY3QuYXNzaWduKHt9LHRbZV0pOnt9LGk9by5oYXNPd25Qcm9wZXJ0eShuKTtyZXR1cm4gb1tuXT1pP09iamVjdC5hc3NpZ24oe30sb1tuXSk6e3J1blRvU2VyaWVzOnt9LHJ1blRvTG9hZFN0YXRlOnt9fSxvfSkoaSxuLG8pO3JldHVybiBpW25dPWEsaX1jb25zdCBhPU9iamVjdC5hc3NpZ24oe30sdFtlXSkscj1hLmhhc093blByb3BlcnR5KG4pO3JldHVybiBhW25dPXI/T2JqZWN0LmFzc2lnbih7fSxhW25dKTp7cnVuVG9TZXJpZXM6e30scnVuVG9Mb2FkU3RhdGU6e319LGF9ZnVuY3Rpb24gdVQodCl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHQpfWZ1bmN0aW9uIGZUKHQsZSxuKXtjb25zdCBvPU9iamVjdC5hc3NpZ24oe30sbik7Zm9yKGNvbnN0IG4gb2YgZSlvW25dPXQ7cmV0dXJuIG99ZnVuY3Rpb24gZ1QodCxlLG4sbyl7aWYobVIoZSkpe2NvbnN0IGk9dFtlXS50YWdSdW5TYW1wbGVkSW5mbztyZXR1cm4gaS5oYXNPd25Qcm9wZXJ0eShuKT9PYmplY3Qua2V5cyhpW25dKS5maWx0ZXIoKHQ9Pm88aVtuXVt0XS5tYXhTYW1wbGVzUGVyU3RlcCkpOltdfWNvbnN0IGk9dFtlXS50YWdUb1J1bnM7cmV0dXJuIGkuaGFzT3duUHJvcGVydHkobik/aVtuXTpbXX1mdW5jdGlvbiBoVCh0LGUsbixvLGksYSl7Y29uc3Qgcj1uZXcgU2V0KHQpLHM9W107Zm9yKGNvbnN0IG8gb2YgdClmb3IoY29uc3QgdCBvZiBlKWlmKChsPW5bdF0pLnBsdWdpbj09PShjPW8pLnBsdWdpbiYmbC50YWc9PT1jLnRhZyYmbC5zYW1wbGU9PT1jLnNhbXBsZSYmKGwucnVuSWQ9PT1jLnJ1bklkfHwhbC5ydW5JZCYmIWMucnVuSWQpKXtzLnB1c2godCksci5kZWxldGUobyk7YnJlYWt9dmFyIGwsYztpZighcy5sZW5ndGgpcmV0dXJue3VucmVzb2x2ZWRJbXBvcnRlZFBpbm5lZENhcmRzOnQsY2FyZE1ldGFkYXRhTWFwOm4sY2FyZFRvUGlubmVkQ29weTpvLHBpbm5lZENhcmRUb09yaWdpbmFsOmksY2FyZFN0ZXBJbmRleDphfTtsZXQgZD17Y2FyZFRvUGlubmVkQ29weTpvLHBpbm5lZENhcmRUb09yaWdpbmFsOmksY2FyZFN0ZXBJbmRleDphLGNhcmRNZXRhZGF0YU1hcDpufTtmb3IoY29uc3QgdCBvZiBzKWQ9YlQodCxkLmNhcmRUb1Bpbm5lZENvcHksZC5waW5uZWRDYXJkVG9PcmlnaW5hbCxkLmNhcmRTdGVwSW5kZXgsZC5jYXJkTWV0YWRhdGFNYXApO3JldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZCkse3VucmVzb2x2ZWRJbXBvcnRlZFBpbm5lZENhcmRzOlsuLi5yXX0pfWZ1bmN0aW9uIGJUKHQsZSxuLG8saSl7aWYoZS5oYXModCkpcmV0dXJue2NhcmRUb1Bpbm5lZENvcHk6ZSxwaW5uZWRDYXJkVG9PcmlnaW5hbDpuLGNhcmRTdGVwSW5kZXg6byxjYXJkTWV0YWRhdGFNYXA6aX07Y29uc3QgYT1uZXcgTWFwKGUpLHI9bmV3IE1hcChuKSxzPU9iamVjdC5hc3NpZ24oe30sbyksbD1PYmplY3QuYXNzaWduKHt9LGkpLGM9KGZ1bmN0aW9uIGQodCl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHtiYXNlQ2FyZElkOnR9KX0pKHQpO2Euc2V0KHQsYyksci5zZXQoYyx0KSxvLmhhc093blByb3BlcnR5KHQpJiYoc1tjXT1vW3RdKTtjb25zdCBwPWlbdF07aWYoIXApdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcGluIGEgY2FyZCB3aXRob3V0IG1ldGFkYXRhIik7cmV0dXJuIGxbY109cCx7Y2FyZFRvUGlubmVkQ29weTphLHBpbm5lZENhcmRUb09yaWdpbmFsOnIsY2FyZFN0ZXBJbmRleDpzLGNhcmRNZXRhZGF0YU1hcDpsfX1mdW5jdGlvbiB5VCh0KXtyZXR1cm4gdC5waW5uZWRDYXJkVG9PcmlnaW5hbC5zaXplK3QudW5yZXNvbHZlZEltcG9ydGVkUGlubmVkQ2FyZHMubGVuZ3RoPDEwfWRULsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxkVCl9LGRULsm1bW9kPVpvKHt0eXBlOmRUfSksZFQuybVpbmo9Y28oe3Byb3ZpZGVyczpbe3Byb3ZpZGU6aFIsdXNlQ2xhc3M6eFJ9XSxpbXBvcnRzOltbY1QsQUVdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oZFQse2ltcG9ydHM6W2NULEFFXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoZFQsW3t0eXBlOmtfLGFyZ3M6W3tpbXBvcnRzOltjVCxBRV0scHJvdmlkZXJzOlt7cHJvdmlkZTpoUix1c2VDbGFzczp4Un1dfV19XSxudWxsLG51bGwpO2NvbnN0IF9UPSJtZXRyaWNzIixDVD17dG9vbHRpcFNvcnQ6bFIuREVGQVVMVCxpZ25vcmVPdXRsaWVyczohMCx4QXhpc1R5cGU6Y1IuU1RFUCxzY2FsYXJTbW9vdGhpbmc6LjYsc2NhbGFyUGFydGl0aW9uTm9uTW9ub3RvbmljWDohMSxpbWFnZUJyaWdodG5lc3NJbk1pbGxpOjFlMyxpbWFnZUNvbnRyYXN0SW5NaWxsaToxZTMsaW1hZ2VTaG93QWN0dWFsU2l6ZTohMSxoaXN0b2dyYW1Nb2RlOlRFLk9GRlNFVH0sTVQ9RmsoX1QpLHZUPXprKE1ULCh0PT50LnRhZ01ldGFkYXRhTG9hZGVkKSk7emsoTVQsKHQ9PnQudGFnTWV0YWRhdGEpKTtjb25zdCB4VD16ayhNVCwodD0+dC5jYXJkTGlzdCkpLE9UPXprKE1ULCgodCxlKT0+e2lmKCF0LmNhcmRNZXRhZGF0YU1hcC5oYXNPd25Qcm9wZXJ0eShlKSlyZXR1cm4gQkUuTk9UX0xPQURFRDtjb25zdHtwbHVnaW46bix0YWc6byxydW5JZDppLHNhbXBsZTphfT10LmNhcmRNZXRhZGF0YU1hcFtlXSxyPXBUKHQudGltZVNlcmllc0RhdGEsbixvLGEpO2lmKCFyKXJldHVybiBCRS5OT1RfTE9BREVEO2NvbnN0IHM9ci5ydW5Ub0xvYWRTdGF0ZTtpZihpKXJldHVybiBzLmhhc093blByb3BlcnR5KGkpP3NbaV06QkUuTk9UX0xPQURFRDtjb25zdCBsPWdUKHQudGFnTWV0YWRhdGEsbixvLGEpO2lmKCFsLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBsb2FkIGEgY2FyZCB3aG9zZSB0YWcgaGFzIG5vIHJ1bnMiKTtyZXR1cm4gbC5ldmVyeSgodD0+c1t0XT09PUJFLkxPQURFRCkpP0JFLkxPQURFRDpsLnNvbWUoKHQ9PnNbdF09PT1CRS5MT0FESU5HKSk/QkUuTE9BRElORzpCRS5OT1RfTE9BREVEfSkpLFBUPXprKE1ULCgodCxlKT0+e2lmKCF0LmNhcmRNZXRhZGF0YU1hcC5oYXNPd25Qcm9wZXJ0eShlKSlyZXR1cm4gbnVsbDtjb25zdHtwbHVnaW46bix0YWc6byxzYW1wbGU6aX09dC5jYXJkTWV0YWRhdGFNYXBbZV0sYT1wVCh0LnRpbWVTZXJpZXNEYXRhLG4sbyxpKTtyZXR1cm4gYT9hLnJ1blRvU2VyaWVzOm51bGx9KSksd1Q9emsoTVQsKHQ9PnQuY2FyZE1ldGFkYXRhTWFwKSksa1Q9emsod1QsKCh0LGUpPT50Lmhhc093blByb3BlcnR5KGUpP3RbZV06bnVsbCkpLFNUPXprKE1ULCh0PT50LnZpc2libGVDYXJkcykpLERUPXprKFNULCh0PT50KSksRVQ9emsoeFQsd1QsKCh0LGUpPT50LmZpbHRlcigodD0+ZS5oYXNPd25Qcm9wZXJ0eSh0KSkpLm1hcCgodD0+T2JqZWN0LmFzc2lnbih7Y2FyZElkOnR9LGVbdF0pKSkpKSxBVD16ayhNVCwoKHQsZSk9PnQuY2FyZFN0ZXBJbmRleC5oYXNPd25Qcm9wZXJ0eShlKT90LmNhcmRTdGVwSW5kZXhbZV06bnVsbCkpLFJUPXprKE1ULCh0PT50LmNhcmRUb1Bpbm5lZENvcHkpKSxUVD16ayhNVCwodD0+dC5waW5uZWRDYXJkVG9PcmlnaW5hbCkpLE5UPXprKFJULHdULCgodCxlKT0+Wy4uLnQudmFsdWVzKCldLmZpbHRlcigodD0+ZS5oYXNPd25Qcm9wZXJ0eSh0KSkpLm1hcCgodD0+T2JqZWN0LmFzc2lnbih7Y2FyZElkOnR9LGVbdF0pKSkpKSxJVD16ayhSVCxUVCwoKHQsZSxuKT0+dC5oYXMobil8fGUuaGFzKG4pKSkselQ9emsoTVQsKHQ9PnQudW5yZXNvbHZlZEltcG9ydGVkUGlubmVkQ2FyZHMpKSxIVD16ayhNVCwodD0+eVQodCkpKSxGVD16ayhNVCwodD0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuc2V0dGluZ3MpLHQuc2V0dGluZ092ZXJyaWRlcykpKSxMVD16ayhNVCwodD0+dC5zZXR0aW5nT3ZlcnJpZGVzKSksQlQ9emsoRlQsKHQ9PnQudG9vbHRpcFNvcnQpKSxWVD16ayhGVCwodD0+dC5pZ25vcmVPdXRsaWVycykpLGpUPXprKEZULCh0PT50LnhBeGlzVHlwZSkpLFVUPXprKEZULCh0PT50Lmhpc3RvZ3JhbU1vZGUpKSxXVD16ayhGVCwodD0+dC5zY2FsYXJTbW9vdGhpbmcpKSxHVD16ayhGVCwodD0+dC5zY2FsYXJQYXJ0aXRpb25Ob25Nb25vdG9uaWNYKSksWVQ9emsoRlQsKHQ9PnQuaW1hZ2VCcmlnaHRuZXNzSW5NaWxsaSkpLHFUPXprKEZULCh0PT50LmltYWdlQ29udHJhc3RJbk1pbGxpKSksWlQ9emsoRlQsKHQ9PnQuaW1hZ2VTaG93QWN0dWFsU2l6ZSkpLFhUPXprKE1ULCh0PT50LnRhZ0ZpbHRlcikpLEtUPXprKE1ULCgodCxlKT0+Qm9vbGVhbih0LnRhZ0dyb3VwRXhwYW5kZWQuZ2V0KGUpKSkpO3ZhciBKVDt6ayhNVCwodD0+dC5zZWxlY3RlZFRpbWUpKSwoZnVuY3Rpb24odCl7dFt0Lk5PTkU9MF09Ik5PTkUiLHRbdC5XSEFUU19ORVc9MV09IldIQVRTX05FVyJ9KShKVHx8KEpUPXt9KSk7Y29uc3QgUVQ9RmsoIm5vdGlmaWNhdGlvbiIpO3prKFFULCh0PT50Lm5vdGlmaWNhdGlvbnMpKSx6ayhRVCwodD0+e3ZhciBlO3JldHVybiBudWxsIT09KGU9dC5sYXN0UmVhZFRpbWVzdGFtcEluTXMpJiZ2b2lkIDAhPT1lP2U6LTF9KSk7Y29uc3QgJFQ9InJ1bnMiO3ZhciB0TixlTjtmdW5jdGlvbiBuTih0KXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodC5zbGljZSgpLnNvcnQoKSl9ZnVuY3Rpb24gb04odCxlLG4pe2NvbnN0IG89e30saT1bXSxhPXttYXRjaGVzOm8sbm9uTWF0Y2hlczppfTtzd2l0Y2godC5rZXkpe2Nhc2UgZU4uUlVOOmZvcihjb25zdCB0IG9mIGUpb1t0LmlkXT1bdF07YnJlYWs7Y2FzZSBlTi5FWFBFUklNRU5UOmZvcihjb25zdCB0IG9mIGUpe2NvbnN0IGU9blt0LmlkXSxpPW9bZV18fFtdO2kucHVzaCh0KSxvW2VdPWl9YnJlYWs7Y2FzZSBlTi5SRUdFWDppZighdC5yZWdleFN0cmluZylicmVhaztsZXQgYTt0cnl7YT1uZXcgUmVnRXhwKHQucmVnZXhTdHJpbmcpfWNhdGNoKHQpe2JyZWFrfWZvcihjb25zdCB0IG9mIGUpe2NvbnN0IGU9dC5uYW1lLm1hdGNoKGEpO2lmKGUpe2NvbnN0IG49ZS5sZW5ndGg+MT9KU09OLnN0cmluZ2lmeShlLnNsaWNlKDEpKToicHNldWRvX2dyb3VwIixpPW9bbl18fFtdO2kucHVzaCh0KSxvW25dPWl9ZWxzZSBpLnB1c2godCl9fXJldHVybiBhfWZ1bmN0aW9uIGlOKHQsZSl7c3dpdGNoKHQpe2Nhc2UgZU4uUkVHRVg6cmV0dXJue2tleTp0LHJlZ2V4U3RyaW5nOm51bGwhPWU/ZToiIn07Y2FzZSBlTi5SVU46Y2FzZSBlTi5FWFBFUklNRU5UOmRlZmF1bHQ6cmV0dXJue2tleTp0fX19IShmdW5jdGlvbih0KXt0W3QuRVhQRVJJTUVOVF9OQU1FPTBdPSJFWFBFUklNRU5UX05BTUUiLHRbdC5IUEFSQU09MV09IkhQQVJBTSIsdFt0Lk1FVFJJQz0yXT0iTUVUUklDIix0W3QuUlVOX05BTUU9M109IlJVTl9OQU1FIn0pKHROfHwodE49e30pKSwoZnVuY3Rpb24odCl7dFt0LlJVTj0wXT0iUlVOIix0W3QuRVhQRVJJTUVOVD0xXT0iRVhQRVJJTUVOVCIsdFt0LlJFR0VYPTJdPSJSRUdFWCJ9KShlTnx8KGVOPXt9KSk7Y29uc3QgYU49RmsoJFQpLHJOPXprKGFOLCh0PT50LmRhdGEpKSxzTj16ayhyTiwoKHQsZSk9Pnt2YXIgbjtyZXR1cm4gbnVsbCE9PShuPXQucnVuSWRUb0V4cElkW2UucnVuSWRdKSYmdm9pZCAwIT09bj9uOm51bGx9KSksbE49emsock4sKCh0LGUpPT57dmFyIG47cmV0dXJuIG51bGwhPT0obj10LnJ1bk1ldGFkYXRhW2UucnVuSWRdKSYmdm9pZCAwIT09bj9uOm51bGx9KSksY049emsock4sKCh0LGUpPT4odC5ydW5JZHNbZS5leHBlcmltZW50SWRdfHxbXSkuZmlsdGVyKChlPT5Cb29sZWFuKHQucnVuTWV0YWRhdGFbZV0pKSkubWFwKChlPT50LnJ1bk1ldGFkYXRhW2VdKSkpKSxkTj16ayhyTiwoKHQsZSk9Pnt2YXIgbjtyZXR1cm4gbnVsbCE9PShuPXQucnVuSWRzW2UuZXhwZXJpbWVudElkXSkmJnZvaWQgMCE9PW4/bjpbXX0pKSxwTj16ayhyTiwodD0+bmV3IE1hcChPYmplY3QuZW50cmllcyh0LnJ1bk1ldGFkYXRhKSkpKSxtTj16ayhyTiwoKHQsZSk9PnQucnVuc0xvYWRTdGF0ZVtlLmV4cGVyaW1lbnRJZF18fHtsYXN0TG9hZGVkVGltZUluTXM6bnVsbCxzdGF0ZTpCRS5OT1RfTE9BREVEfSkpLHVOPXprKHJOLCgodCxlKT0+e2NvbnN0IG49bk4oZS5leHBlcmltZW50SWRzKTtyZXR1cm4gdC5zZWxlY3Rpb25TdGF0ZS5nZXQobil8fG5ldyBNYXB9KSksZk49emsock4sKHQ9Pm51bGwhPT10LnVzZXJTZXRHcm91cEJ5S2V5P2lOKHQudXNlclNldEdyb3VwQnlLZXksdC5jb2xvckdyb3VwUmVnZXhTdHJpbmcpOm51bGwpKSxnTj16ayhmTixyTiwoKHQsZSk9Pm51bGwhPXQ/dDplLmluaXRpYWxHcm91cEJ5KSksaE49emsock4sKHQ9PnQucmVnZXhGaWx0ZXIpKSxiTj16ayhhTiwodD0+dC51aSkpLHlOPXprKGJOLCh0PT50LnBhZ2luYXRpb25PcHRpb24pKSxfTj16ayhiTiwodD0+dC5zb3J0KSksQ049emsock4sKHQ9Pntjb25zdCBlPW5ldyBNYXAoWy4uLnQuZGVmYXVsdFJ1bkNvbG9yRm9yR3JvdXBCeSwuLi50LnJ1bkNvbG9yT3ZlcnJpZGVGb3JHcm91cEJ5XSksbj17fTtyZXR1cm4gZS5mb3JFYWNoKCgodCxlKT0+e25bZV09dH0pKSxufSkpLE1OPXprKHJOLCh0PT50LmNvbG9yR3JvdXBSZWdleFN0cmluZykpLHZOPXprKCh0PT57Y29uc3QgZT14RCh0KTtyZXR1cm4gbnVsbD09PWU/bnVsbDp1Tih0LHtleHBlcmltZW50SWRzOmV9KX0pLCh0PT50KSk7Y2xhc3MgeE57Y29uc3RydWN0b3IodCxlLG4pe3RoaXMuYWN0aW9ucyQ9dCx0aGlzLnN0b3JlPWUsdGhpcy5ydW5zRGF0YVNvdXJjZT1uLHRoaXMubG9hZFJ1bnNPblJ1blRhYmxlU2hvd24kPWdTKCgoKT0+dGhpcy5hY3Rpb25zJC5waXBlKHhTKE5BKSxUdCgoKHtleHBlcmltZW50SWRzOnR9KT0+dGhpcy5nZXRFeHBlcmltZW50c1dpdGhMb2FkU3RhdGUodCwodD0+dD09PUJFLkZBSUxFRHx8dD09PUJFLk5PVF9MT0FERUQpKS5waXBlKEd0KCh0PT4hIXQubGVuZ3RoKSksVHQoKGU9PnRoaXMuZmV0Y2hBbGxSdW5zTGlzdCh0LGUpKSkpKSkpKSx7ZGlzcGF0Y2g6ITF9KSx0aGlzLmV4cGVyaW1lbnRzV2l0aFN0YWxlUnVuc09uUm91dGVDaGFuZ2UkPXRoaXMuYWN0aW9ucyQucGlwZSh4UyhvRCksa24odGhpcy5zdG9yZS5zZWxlY3QoT0QpKSxrZSgoKFssdF0sWyxlXSk9PnQ9PT1lKSksa24odGhpcy5zdG9yZS5zZWxlY3QoeEQpKSxHdCgoKFssdF0pPT4hIXQpKSxodCgoKFssdF0pPT50KSksVHQoKHQ9PnRoaXMuZ2V0RXhwZXJpbWVudHNXaXRoTG9hZFN0YXRlKHQsKHQ9PnQ9PT1CRS5GQUlMRUR8fHQ9PT1CRS5OT1RfTE9BREVEKSkucGlwZShodCgoZT0+KHtleHBlcmltZW50SWRzOnQsZXhwZXJpbWVudElkc1RvQmVGZXRjaGVkOmV9KSkpKSkpKSx0aGlzLmV4cGVyaW1lbnRzV2l0aFN0YWxlUnVuc09uUmVsb2FkJD10aGlzLmFjdGlvbnMkLnBpcGUoeFMoR0UsV0UpLGtuKHRoaXMuc3RvcmUuc2VsZWN0KHhEKSksR3QoKChbLHRdKT0+ISF0KSksaHQoKChbLHRdKT0+dCkpLFR0KCh0PT50aGlzLmdldEV4cGVyaW1lbnRzV2l0aExvYWRTdGF0ZSh0LCh0PT50IT09QkUuTE9BRElORykpLnBpcGUoaHQoKGU9Pih7ZXhwZXJpbWVudElkczp0LGV4cGVyaW1lbnRJZHNUb0JlRmV0Y2hlZDplfSkpKSkpKSksdGhpcy5sb2FkUnVuc09uTmF2aWdhdGlvbk9yUmVsb2FkJD1nUygoKCk9Pld0KHRoaXMuZXhwZXJpbWVudHNXaXRoU3RhbGVSdW5zT25Sb3V0ZUNoYW5nZSQsdGhpcy5leHBlcmltZW50c1dpdGhTdGFsZVJ1bnNPblJlbG9hZCQpLnBpcGUoVHQoKCh7ZXhwZXJpbWVudElkczp0LGV4cGVyaW1lbnRJZHNUb0JlRmV0Y2hlZDplfSk9PnRoaXMuZmV0Y2hBbGxSdW5zTGlzdCh0LGUpKSkpKSx7ZGlzcGF0Y2g6ITF9KX1nZXRSdW5zTGlzdExvYWRTdGF0ZSh0KXtyZXR1cm4gdGhpcy5zdG9yZS5zZWxlY3QobU4se2V4cGVyaW1lbnRJZDp0fSkucGlwZShOZSgxKSl9Z2V0RXhwZXJpbWVudHNXaXRoTG9hZFN0YXRlKHQsZSl7cmV0dXJuIEx0KHQubWFwKCh0PT50aGlzLmdldFJ1bnNMaXN0TG9hZFN0YXRlKHQpKSkpLnBpcGUoaHQoKG49PnQuZmlsdGVyKCgodCxvKT0+ZShuW29dLnN0YXRlKSkpKSkpfWZldGNoQWxsUnVuc0xpc3QodCxlKXtyZXR1cm4gWih7ZXhwZXJpbWVudElkczp0LGV4cGVyaW1lbnRJZHNUb0JlRmV0Y2hlZDplfSkucGlwZShfbigoKCk9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKE9BKHtleHBlcmltZW50SWRzOnQscmVxdWVzdGVkRXhwZXJpbWVudElkczplfSkpfSkpLFR0KCgoKT0+e2NvbnN0IG49bmV3IFNldChlKTtyZXR1cm4gTHQodC5tYXAoKHQ9Pm4uaGFzKHQpP3RoaXMuZmV0Y2hSdW5zRm9yRXhwZXJpbWVudCh0KTp0aGlzLm1heWJlV2FpdEZvclJ1bnNBbmRHZXRSdW5zKHQpKSkpfSkpLGh0KCh0PT57Y29uc3QgZT17fSxuPVtdO2Zvcihjb25zdCBvIG9mIHQpbi5wdXNoKC4uLm8ucnVucyksby5mcm9tUmVtb3RlJiYoZVtvLmV4cGVyaW1lbnRJZF09e3J1bnM6by5ydW5zLG1ldGFkYXRhOm8ubWV0YWRhdGF9KTtyZXR1cm57bmV3UnVuc0FuZE1ldGFkYXRhOmUscnVuc0ZvckFsbEV4cGVyaW1lbnRzOm59fSkpLF9uKCgoe25ld1J1bnNBbmRNZXRhZGF0YTplLHJ1bnNGb3JBbGxFeHBlcmltZW50czpufSk9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKFBBKHtleHBlcmltZW50SWRzOnQsbmV3UnVuc0FuZE1ldGFkYXRhOmUscnVuc0ZvckFsbEV4cGVyaW1lbnRzOm59KSl9KSkscmUoKG49Pih0aGlzLnN0b3JlLmRpc3BhdGNoKHdBKHtleHBlcmltZW50SWRzOnQscmVxdWVzdGVkRXhwZXJpbWVudElkczplfSkpLFoobnVsbCkpKSksaHQoKCgpPT5udWxsKSkpfW1heWJlV2FpdEZvclJ1bnNBbmRHZXRSdW5zKHQpe3JldHVybiB0aGlzLnN0b3JlLnNlbGVjdChtTix7ZXhwZXJpbWVudElkOnR9KS5waXBlKEd0KCh0PT50LnN0YXRlIT09QkUuTE9BRElORykpLE5lKDEpLFR0KCh0PT50LnN0YXRlPT09QkUuRkFJTEVEP1gobmV3IEVycm9yKCJQZW5kaW5nIHJlcXVlc3QgZmFpbGVkIikpOloodCkpKSxrbih0aGlzLnN0b3JlLnNlbGVjdChjTix7ZXhwZXJpbWVudElkOnR9KSksaHQoKChbLGVdKT0+KHtmcm9tUmVtb3RlOiExLGV4cGVyaW1lbnRJZDp0LHJ1bnM6ZX0pKSkpfWZldGNoUnVuc0ZvckV4cGVyaW1lbnQodCl7cmV0dXJuIEx0KFt0aGlzLnJ1bnNEYXRhU291cmNlLmZldGNoUnVucyh0KSx0aGlzLnJ1bnNEYXRhU291cmNlLmZldGNoSHBhcmFtc01ldGFkYXRhKHQpXSkucGlwZShodCgoKFtlLG5dKT0+KHtmcm9tUmVtb3RlOiEwLGV4cGVyaW1lbnRJZDp0LHJ1bnM6ZSxtZXRhZGF0YTpufSkpKSl9fWZ1bmN0aW9uIE9OKHQsZSxuKXtjb25zdCBvPU9iamVjdC5rZXlzKHQpLGk9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCksZSkse3ByaXZhdGVSb3V0ZUNvbnRleHRlZFN0YXRlOnt9fSk7cmV0dXJue2luaXRpYWxTdGF0ZTppLHJlZHVjZXJzOm1TKGkscFMob0QsKChlLHtiZWZvcmU6aSxhZnRlcjphfSk9Pntjb25zdCByPVlTKGEucm91dGVLaW5kLGEucGFyYW1zKSxzPWk/WVMoaS5yb3V0ZUtpbmQsaS5wYXJhbXMpOm51bGw7aWYocz09PXIpcmV0dXJuIGU7bGV0IGw9T2JqZWN0LmFzc2lnbih7fSxlLnByaXZhdGVSb3V0ZUNvbnRleHRlZFN0YXRlKTtpZihzKXtjb25zdCB0PXt9O2Zvcihjb25zdCBuIG9mIG8pdFtuXT1lW25dO2w9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGwpLHtbc106dH0pfWxldCBjPWUucHJpdmF0ZVJvdXRlQ29udGV4dGVkU3RhdGUmJmUucHJpdmF0ZVJvdXRlQ29udGV4dGVkU3RhdGVbcl0/ZS5wcml2YXRlUm91dGVDb250ZXh0ZWRTdGF0ZVtyXTpudWxsO3MmJm51bGw9PT1jJiYoYz10KTtsZXQgZD1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSxjKSx7cHJpdmF0ZVJvdXRlQ29udGV4dGVkU3RhdGU6bH0pO3JldHVybiBuP24oZCxhKTpkfSkpKX19dmFyIFBOLHdOO3hOLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHx4TikodXModlMpLHVzKEVrKSx1cyhCQSkpfSx4Ti7JtXByb3Y9bG8oe3Rva2VuOnhOLGZhY3Rvcnk6eE4uybVmYWN9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHhOLFt7dHlwZTpKbX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTp2U30se3R5cGU6RWt9LHt0eXBlOkJBfV19KSxudWxsKSwoZnVuY3Rpb24odCl7dC5BU0M9ImFzYyIsdC5ERVNDPSJkZXNjIix0LlVOU0VUPSIifSkoUE58fChQTj17fSkpLChmdW5jdGlvbih0KXt0LlVTRVI9InVzZXIiLHQuQkVGT1JFPSJiZWZvcmUiLHQuQUZURVI9ImFmdGVyIix0LlJFR0VYPSJyZWdleCJ9KSh3Tnx8KHdOPXt9KSk7Y29uc3Qga049WyIjNDI1MDY2IiwiIzEyYjVjYiIsIiNlNTI1OTIiLCIjZjlhYjAwIiwiIzkzMzRlNiIsIiM3Y2IzNDIiLCIjZTg3MTBhIl07ZnVuY3Rpb24gU04oLi4udCl7cmV0dXJuKGUsbik9PntsZXQgbz1lO2Zvcihjb25zdCBlIG9mIHQpbz1lKG8sbik7cmV0dXJuIG99fWNvbnN0e2luaXRpYWxTdGF0ZTpETixyZWR1Y2VyczpFTn09T04oe3J1bkNvbG9yT3ZlcnJpZGVGb3JHcm91cEJ5Om5ldyBNYXAsZGVmYXVsdFJ1bkNvbG9yRm9yR3JvdXBCeTpuZXcgTWFwLGdyb3VwS2V5VG9Db2xvclN0cmluZzpuZXcgTWFwLGluaXRpYWxHcm91cEJ5OntrZXk6ZU4uUlVOfSx1c2VyU2V0R3JvdXBCeUtleTpudWxsLGNvbG9yR3JvdXBSZWdleFN0cmluZzoiIixyZWdleEZpbHRlcjoiIn0se3J1bklkczp7fSxydW5JZFRvRXhwSWQ6e30scnVuTWV0YWRhdGE6e30scnVuc0xvYWRTdGF0ZTp7fSxzZWxlY3Rpb25TdGF0ZTpuZXcgTWFwfSwoKHQsZSk9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7aW5pdGlhbEdyb3VwQnk6e2tleTplLnJvdXRlS2luZD09PWpTLkNPTVBBUkVfRVhQRVJJTUVOVD9lTi5FWFBFUklNRU5UOmVOLlJVTn19KSkpLEFOPVNOKG1TKEROLHBTKHRELCgodCx7cm91dGVLaW5kOmUscGFydGlhbFN0YXRlOm59KT0+e3ZhciBvO2lmKGUhPT1qUy5DT01QQVJFX0VYUEVSSU1FTlQmJmUhPT1qUy5FWFBFUklNRU5UKXJldHVybiB0O2NvbnN0IGk9bi5ydW5zLmdyb3VwQnk7aWYoIWkpcmV0dXJuIHQ7Y29uc3QgYT1pLmtleT09PWVOLlJFR0VYP2kucmVnZXhTdHJpbmc6dC5jb2xvckdyb3VwUmVnZXhTdHJpbmc7cmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7Y29sb3JHcm91cFJlZ2V4U3RyaW5nOmEsdXNlclNldEdyb3VwQnlLZXk6bnVsbCE9PShvPWkua2V5KSYmdm9pZCAwIT09bz9vOm51bGx9KX0pKSxwUyhPQSwoKHQsZSk9Pntjb25zdCBuPU9iamVjdC5hc3NpZ24oe30sdC5ydW5zTG9hZFN0YXRlKTtmb3IoY29uc3QgdCBvZiBlLnJlcXVlc3RlZEV4cGVyaW1lbnRJZHMpblt0XT1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe2xhc3RMb2FkZWRUaW1lSW5NczpudWxsfSxuW3RdKSx7c3RhdGU6QkUuTE9BRElOR30pO3JldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3J1bnNMb2FkU3RhdGU6bn0pfSkpLHBTKFBBLCgodCxlKT0+e3ZhciBuO2NvbnN0IG89T2JqZWN0LmFzc2lnbih7fSx0LnJ1bklkcyksaT1PYmplY3QuYXNzaWduKHt9LHQucnVuTWV0YWRhdGEpLGE9T2JqZWN0LmFzc2lnbih7fSx0LnJ1bklkVG9FeHBJZCkscj1PYmplY3QuYXNzaWduKHt9LHQucnVuc0xvYWRTdGF0ZSkscz1uZXcgTWFwKHQuc2VsZWN0aW9uU3RhdGUpO2Zvcihjb25zdCB0IG9mIE9iamVjdC5rZXlzKGUubmV3UnVuc0FuZE1ldGFkYXRhKSl7Y29uc3R7cnVuczpuLG1ldGFkYXRhOnN9PWUubmV3UnVuc0FuZE1ldGFkYXRhW3RdO29bdF09bi5tYXAoKCh7aWQ6dH0pPT50KSksclt0XT1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sclt0XSkse2xhc3RMb2FkZWRUaW1lSW5NczpEYXRlLm5vdygpLHN0YXRlOkJFLkxPQURFRH0pO2Zvcihjb25zdCBlIG9mIG4pe2NvbnN0IG49cy5ydW5Ub0hwYXJhbXNBbmRNZXRyaWNzW2UuaWRdO2lbZS5pZF09T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHtocGFyYW1zOm4/bi5ocGFyYW1zOm51bGwsbWV0cmljczpuP24ubWV0cmljczpudWxsfSksYVtlLmlkXT10fX1jb25zdCBsPW5OKGUuZXhwZXJpbWVudElkcyksYz1uZXcgTWFwKG51bGwhPT0obj1zLmdldChsKSkmJnZvaWQgMCE9PW4/bjpbXSksZD1lLnJ1bnNGb3JBbGxFeHBlcmltZW50cy5sZW5ndGg8PTUwMDtmb3IoY29uc3QgdCBvZiBlLnJ1bnNGb3JBbGxFeHBlcmltZW50cyljLmhhcyh0LmlkKXx8Yy5zZXQodC5pZCxkKTtyZXR1cm4gcy5zZXQobCxjKSxPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3J1bklkczpvLHJ1bklkVG9FeHBJZDphLHJ1bk1ldGFkYXRhOmkscnVuc0xvYWRTdGF0ZTpyLHNlbGVjdGlvblN0YXRlOnN9KX0pKSxwUyh3QSwoKHQsZSk9Pntjb25zdCBuPU9iamVjdC5hc3NpZ24oe30sdC5ydW5zTG9hZFN0YXRlKTtmb3IoY29uc3QgdCBvZiBlLnJlcXVlc3RlZEV4cGVyaW1lbnRJZHMpblt0XT1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe2xhc3RMb2FkZWRUaW1lSW5NczpudWxsfSxuW3RdKSx7c3RhdGU6QkUuRkFJTEVEfSk7cmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7cnVuc0xvYWRTdGF0ZTpufSl9KSkscFMoa0EsKCh0LHtleHBlcmltZW50SWRzOmUscnVuSWQ6bn0pPT57dmFyIG87Y29uc3QgaT1uTihlKSxhPW5ldyBNYXAodC5zZWxlY3Rpb25TdGF0ZSkscj1uZXcgTWFwKG51bGwhPT0obz1hLmdldChpKSkmJnZvaWQgMCE9PW8/bzpbXSk7cmV0dXJuIHIuc2V0KG4sIUJvb2xlYW4oci5nZXQobikpKSxhLnNldChpLHIpLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7c2VsZWN0aW9uU3RhdGU6YX0pfSkpLHBTKFNBLCgodCx7ZXhwZXJpbWVudElkczplLHJ1bklkczpufSk9Pnt2YXIgbztjb25zdCBpPW5OKGUpLGE9bmV3IE1hcCh0LnNlbGVjdGlvblN0YXRlKSxyPW5ldyBNYXAobnVsbCE9PShvPWEuZ2V0KGkpKSYmdm9pZCAwIT09bz9vOltdKSxzPSFuLmV2ZXJ5KCh0PT5Cb29sZWFuKHIuZ2V0KHQpKSkpO2Zvcihjb25zdCB0IG9mIG4pci5zZXQodCxzKTtyZXR1cm4gYS5zZXQoaSxyKSxPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3NlbGVjdGlvblN0YXRlOmF9KX0pKSxwUyhEQSwoKHQse2V4cGVyaW1lbnRJZHM6ZX0pPT57dmFyIG47Y29uc3Qgbz1uTihlKSxpPW5ldyBNYXAodC5zZWxlY3Rpb25TdGF0ZSksYT1uZXcgTWFwKG51bGwhPT0obj1pLmdldChvKSkmJnZvaWQgMCE9PW4/bjpbXSk7Zm9yKGNvbnN0IG4gb2YgZSlmb3IoY29uc3QgZSBvZiB0LnJ1bklkc1tuXSlhLnNldChlLCEwKTtyZXR1cm4gaS5zZXQobyxhKSxPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3NlbGVjdGlvblN0YXRlOml9KX0pKSxwUyhQQSwoKHQse3J1bnNGb3JBbGxFeHBlcmltZW50czplfSk9Pntjb25zdCBuPW5ldyBNYXAodC5ncm91cEtleVRvQ29sb3JTdHJpbmcpLG89bmV3IE1hcCh0LmRlZmF1bHRSdW5Db2xvckZvckdyb3VwQnkpO2xldCBpPXQuaW5pdGlhbEdyb3VwQnk7bnVsbCE9PXQudXNlclNldEdyb3VwQnlLZXkmJihpPWlOKHQudXNlclNldEdyb3VwQnlLZXksdC5jb2xvckdyb3VwUmVnZXhTdHJpbmcpKTtjb25zdCBhPW9OKGksZSx0LnJ1bklkVG9FeHBJZCk7T2JqZWN0LmVudHJpZXMoYS5tYXRjaGVzKS5mb3JFYWNoKCgoW3QsZV0pPT57dmFyIGk7Y29uc3QgYT1udWxsIT09KGk9bi5nZXQodCkpJiZ2b2lkIDAhPT1pP2k6a05bbi5zaXplJWtOLmxlbmd0aF07bi5zZXQodCxhKTtmb3IoY29uc3QgdCBvZiBlKW8uc2V0KHQuaWQsYSl9KSk7Zm9yKGNvbnN0IHQgb2YgYS5ub25NYXRjaGVzKW8uZGVsZXRlKHQuaWQpO3JldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2RlZmF1bHRSdW5Db2xvckZvckdyb3VwQnk6byxncm91cEtleVRvQ29sb3JTdHJpbmc6bn0pfSkpLHBTKElBLCgodCx7ZXhwZXJpbWVudElkczplLGdyb3VwQnk6bn0pPT57Y29uc3Qgbz1uZXcgTWFwLGk9bmV3IE1hcCh0LmRlZmF1bHRSdW5Db2xvckZvckdyb3VwQnkpLGE9b04obixlLmZsYXRNYXAoKGU9PnQucnVuSWRzW2VdKSkubWFwKChlPT50LnJ1bk1ldGFkYXRhW2VdKSksdC5ydW5JZFRvRXhwSWQpO09iamVjdC5lbnRyaWVzKGEubWF0Y2hlcykuZm9yRWFjaCgoKFt0LGVdKT0+e3ZhciBuO2NvbnN0IGE9bnVsbCE9PShuPW8uZ2V0KHQpKSYmdm9pZCAwIT09bj9uOmtOW28uc2l6ZSVrTi5sZW5ndGhdO28uc2V0KHQsYSk7Zm9yKGNvbnN0IHQgb2YgZSlpLnNldCh0LmlkLGEpfSkpO2Zvcihjb25zdCB0IG9mIGEubm9uTWF0Y2hlcylpLmRlbGV0ZSh0LmlkKTtjb25zdCByPW4ua2V5PT09ZU4uUkVHRVg/bi5yZWdleFN0cmluZzp0LmNvbG9yR3JvdXBSZWdleFN0cmluZztyZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtjb2xvckdyb3VwUmVnZXhTdHJpbmc6cix1c2VyU2V0R3JvdXBCeUtleTpuLmtleSxkZWZhdWx0UnVuQ29sb3JGb3JHcm91cEJ5OmksZ3JvdXBLZXlUb0NvbG9yU3RyaW5nOm8scnVuQ29sb3JPdmVycmlkZUZvckdyb3VwQnk6bmV3IE1hcH0pfSkpLHBTKFRBLCgodCx7cnVuSWQ6ZSxuZXdDb2xvcjpufSk9Pntjb25zdCBvPW5ldyBNYXAodC5ydW5Db2xvck92ZXJyaWRlRm9yR3JvdXBCeSk7cmV0dXJuIG8uc2V0KGUsbiksT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtydW5Db2xvck92ZXJyaWRlRm9yR3JvdXBCeTpvfSl9KSkscFMoUkEsKCh0LGUpPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3JlZ2V4RmlsdGVyOmUucmVnZXhTdHJpbmd9KSkpKSxFTiksUk49e2tleTpudWxsLGRpcmVjdGlvbjpQTi5VTlNFVH0se2luaXRpYWxTdGF0ZTpUTixyZWR1Y2VyczpOTn09T04oe3BhZ2luYXRpb25PcHRpb246e3BhZ2VJbmRleDowLHBhZ2VTaXplOjEwfSxzb3J0OlJOfSx7fSksSU49U04obVMoVE4scFMoRUEsKCh0LHtwYWdlU2l6ZTplLHBhZ2VJbmRleDpufSk9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7cGFnaW5hdGlvbk9wdGlvbjp7cGFnZVNpemU6ZSxwYWdlSW5kZXg6bn19KSkpLHBTKFJBLCgodCxlKT0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtwYWdpbmF0aW9uT3B0aW9uOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LnBhZ2luYXRpb25PcHRpb24pLHtwYWdlSW5kZXg6MH0pfSkpKSxwUyhBQSwoKHQsZSk9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7c29ydDp7a2V5OmUua2V5LGRpcmVjdGlvbjplLmRpcmVjdGlvbn19KSkpKSxOTik7ZnVuY3Rpb24gek4odCxlKXtyZXR1cm4gaGsoe2RhdGE6QU4sdWk6SU59KSh0LGUpfWZ1bmN0aW9uIEhOKCl7cmV0dXJuW3thY3Rpb25DcmVhdG9yOndBLGFsZXJ0RnJvbUFjdGlvbjooKT0+KHtsb2NhbGl6ZWRNZXNzYWdlOiJGYWlsZWQgdG8gZmV0Y2ggcnVucyJ9KX1dfWNsYXNzIEZOe312YXIgTE47Rk4uybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEZOKX0sRk4uybVtb2Q9Wm8oe3R5cGU6Rk59KSxGTi7JtWluaj1jbyh7aW1wb3J0czpbW2lTLmZvckZlYXR1cmUoJFQsek4pLExTLmZvckZlYXR1cmUoW3hOXSksJEEsdkEucmVnaXN0ZXJBbGVydEFjdGlvbnMoSE4pLEtBXV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKEZOLHtpbXBvcnRzOltvUyxGUywkQSx2QSxLQV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEZOLFt7dHlwZTprXyxhcmdzOlt7aW1wb3J0czpbaVMuZm9yRmVhdHVyZSgkVCx6TiksTFMuZm9yRmVhdHVyZShbeE5dKSwkQSx2QS5yZWdpc3RlckFsZXJ0QWN0aW9ucyhITiksS0FdfV19XSxudWxsLG51bGwpLChmdW5jdGlvbih0KXt0LlJVTlNfQ0hBTkdFRD0iZXhwZXJpbWVudGFsLlJ1bnNDaGFuZ2VkIix0LkdFVF9SVU5TPSJleHBlcmltZW50YWwuR2V0UnVucyIsdC5HRVRfVVJMX0RBVEE9ImV4cGVyaW1lbnRhbC5HZXRVUkxQbHVnaW5EYXRhIix0LkRBVEFfUkVMT0FERUQ9ImV4cGVyaW1lbnRhbC5EYXRhUmVsb2FkZWQifSkoTE58fChMTj17fSkpO2NsYXNzIEJOe2NvbnN0cnVjdG9yKHQpe3RoaXMucG9ydD10LHRoaXMuaWQ9MCx0aGlzLnJlc3BvbnNlV2FpdHM9bmV3IE1hcCx0aGlzLmxpc3RlbmVycz1uZXcgTWFwLHRoaXMucG9ydC5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwodD0+dGhpcy5vbk1lc3NhZ2UodCkpKX1saXN0ZW4odCxlKXt0aGlzLmxpc3RlbmVycy5zZXQodCxlKX11bmxpc3Rlbih0KXt0aGlzLmxpc3RlbmVycy5kZWxldGUodCl9b25NZXNzYWdlKHQpe3JldHVybiByUih0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9SlNPTi5wYXJzZSh0LmRhdGEpLG49ZS50eXBlLG89ZS5pZCxpPWUucGF5bG9hZCxhPWUuZXJyb3I7aWYoZS5pc1JlcGx5KXtpZighdGhpcy5yZXNwb25zZVdhaXRzLmhhcyhvKSlyZXR1cm47Y29uc3R7cmVzb2x2ZTp0LHJlamVjdDplfT10aGlzLnJlc3BvbnNlV2FpdHMuZ2V0KG8pO3JldHVybiB0aGlzLnJlc3BvbnNlV2FpdHMuZGVsZXRlKG8pLHZvaWQoYT9lKG5ldyBFcnJvcihhKSk6dChpKSl9bGV0IHI9bnVsbCxzPW51bGw7aWYodGhpcy5saXN0ZW5lcnMuaGFzKG4pKXtjb25zdCB0PXRoaXMubGlzdGVuZXJzLmdldChuKTt0cnl7cj15aWVsZCB0KGkpfWNhdGNoKHQpe3M9dH19dGhpcy5wb3N0TWVzc2FnZSh7dHlwZTpuLGlkOm8scGF5bG9hZDpyLGVycm9yOnMsaXNSZXBseTohMH0pfSkpfXBvc3RNZXNzYWdlKHQpe3RoaXMucG9ydC5wb3N0TWVzc2FnZShKU09OLnN0cmluZ2lmeSh0KSl9c2VuZE1lc3NhZ2UodCxlKXtjb25zdCBuPXRoaXMuaWQrKztyZXR1cm4gdGhpcy5wb3N0TWVzc2FnZSh7dHlwZTp0LGlkOm4scGF5bG9hZDplLGVycm9yOm51bGwsaXNSZXBseTohMX0pLG5ldyBQcm9taXNlKCgodCxlKT0+e3RoaXMucmVzcG9uc2VXYWl0cy5zZXQobix7cmVzb2x2ZTp0LHJlamVjdDplfSl9KSl9fWNvbnN0IFZOPW5ldyBXZWFrTWFwLGpOPW5ldyBTZXQsVU49bmV3IE1hcCxXTj1uZXcgTWFwO2Z1bmN0aW9uIEdOKHQsZSl7cmV0dXJuIG49Pntjb25zdCBvPVdOLmdldChlKSxpPVZOLmdldChvKXx8bnVsbDtyZXR1cm4gdChpLG4pfX13aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsKHQ9PntpZigiZXhwZXJpbWVudGFsLmJvb3RzdHJhcCIhPT10LmRhdGEpcmV0dXJuO2NvbnN0IGU9dC5wb3J0c1swXTtpZighZSlyZXR1cm47Y29uc3Qgbj10LnNvdXJjZT90LnNvdXJjZS5mcmFtZUVsZW1lbnQ6bnVsbDtuJiYoZnVuY3Rpb24gbyh0LGUpe2NvbnN0IG49bmV3IEJOKHQpO2pOLmFkZChuKSxXTi5zZXQobixlKSx0LnN0YXJ0KCk7Zm9yKGNvbnN0W3QsZV1vZiBVTil7Y29uc3Qgbz1HTihlLG4pO24ubGlzdGVuKHQsbyl9fSkoZSxuKX0pKTtjbGFzcyBZTnticm9hZGNhc3QodCxlKXtyZXR1cm4oZnVuY3Rpb24gbih0LGUpe2Zvcihjb25zdCB0IG9mIGpOKVdOLmdldCh0KS5pc0Nvbm5lY3RlZHx8KGpOLmRlbGV0ZSh0KSxXTi5kZWxldGUodCkpO2NvbnN0IG49Wy4uLmpOXS5tYXAoKG49Pm4uc2VuZE1lc3NhZ2UodCxlKSkpO3JldHVybiBQcm9taXNlLmFsbChuKX0pKHQsZSl9bGlzdGVuKHQsZSl7IShmdW5jdGlvbiBuKHQsZSl7VU4uc2V0KHQsZSk7Zm9yKGNvbnN0IG4gb2Ygak4pe2NvbnN0IG89R04oZSxuKTtuLmxpc3Rlbih0LG8pfX0pKHQsZSl9dW5saXN0ZW4odCl7IShmdW5jdGlvbiBlKHQpe1VOLmRlbGV0ZSh0KTtmb3IoY29uc3QgZSBvZiBqTillLnVubGlzdGVuKHQpfSkodCl9fVlOLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxZTil9LFlOLsm1cHJvdj1sbyh7dG9rZW46WU4sZmFjdG9yeTpZTi7JtWZhY30pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoWU4sW3t0eXBlOkptfV0sbnVsbCxudWxsKTtjbGFzcyBxTntjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuaXBjPXQsdGhpcy5zdG9yZT1lfWluaXQoKXtjb25zdCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRmLXN0b3JhZ2UiKTt0aGlzLmlwYy5saXN0ZW4oTE4uR0VUX1VSTF9EQVRBLChlPT57aWYoIWUpcmV0dXJuO2NvbnN0IG49YHAuJHtlLnBsdWdpbk5hbWV9LmAsbz17fSxpPXQudGZfc3RvcmFnZS5nZXRVcmxIYXNoRGljdCgpO2ZvcihsZXQgdCBpbiBpKXQuc3RhcnRzV2l0aChuKSYmKG9bdC5zdWJzdHJpbmcobi5sZW5ndGgpXT1pW3RdKTtyZXR1cm4gb30pKSx0aGlzLnN0b3JlLnNlbGVjdChjQSkucGlwZShHdCgodD0+bnVsbCE9PXQpKSxrZSgpKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5pcGMuYnJvYWRjYXN0KExOLkRBVEFfUkVMT0FERUQsdm9pZCAwKX0pKX19cU4uybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHFOKSh1cyhZTiksdXMoRWspKX0scU4uybVwcm92PWxvKHt0b2tlbjpxTixmYWN0b3J5OnFOLsm1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihxTixbe3R5cGU6Sm0sYXJnczpbe3Byb3ZpZGVkSW46InJvb3QifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6WU59LHt0eXBlOkVrfV19KSxudWxsKTtjbGFzcyBaTntjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuaXBjPXQsdGhpcy5zdG9yZT1lfWluaXQoKXtjb25zdCB0PXRoaXMuc3RvcmUuc2VsZWN0KHhEKS5waXBlKFR0KCh0PT50P0R0KHQubWFwKCh0PT50aGlzLnN0b3JlLnNlbGVjdChjTix7ZXhwZXJpbWVudElkOnR9KSkpKS5waXBlKGh0KCh0PT50LmZsYXQoKSkpLGtlKCgodCxlKT0+dC5sZW5ndGg9PT1lLmxlbmd0aCYmdC5ldmVyeSgoKHQsbik9PmVbbl0uaWQ9PT10LmlkKSkpKSxodCgodD0+dC5tYXAoKCh7bmFtZTp0fSk9PnQpKSkpKTpaKFtdKSkpKTt0LnN1YnNjcmliZSgodD0+e3RoaXMuaXBjLmJyb2FkY2FzdChMTi5SVU5TX0NIQU5HRUQsdCl9KSksdGhpcy5pcGMubGlzdGVuKExOLkdFVF9SVU5TLCgoKT0+dC5waXBlKE5lKDEpKS50b1Byb21pc2UoKSkpfX1aTi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8Wk4pKHVzKFlOKSx1cyhFaykpfSxaTi7JtXByb3Y9bG8oe3Rva2VuOlpOLGZhY3Rvcnk6Wk4uybVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFpOLFt7dHlwZTpKbSxhcmdzOlt7cHJvdmlkZWRJbjoicm9vdCJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpZTn0se3R5cGU6RWt9XX0pLG51bGwpO2NsYXNzIFhOe2NvbnN0cnVjdG9yKHQsZSl7ZS5pbml0KCksdC5pbml0KCl9cmVnaXN0ZXJQbHVnaW5JZnJhbWUodCxlKXshKGZ1bmN0aW9uIG4odCxlKXtWTi5zZXQodCx7cGx1Z2luTmFtZTplfSl9KSh0LGUpfX1YTi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8WE4pKHVzKFpOKSx1cyhxTikpfSxYTi7JtW1vZD1abyh7dHlwZTpYTn0pLFhOLsm1aW5qPWNvKHtwcm92aWRlcnM6W1lOLHFOLFpOXSxpbXBvcnRzOltbRUQsQ0EsRk5dXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oWE4se2ltcG9ydHM6W0VELENBLEZOXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoWE4sW3t0eXBlOmtfLGFyZ3M6W3twcm92aWRlcnM6W1lOLHFOLFpOXSxpbXBvcnRzOltFRCxDQSxGTl19XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpaTn0se3R5cGU6cU59XX0pLG51bGwpO2NvbnN0IEtOPVd3KCJbQWxlcnRdIEFsZXJ0IFJlcG9ydGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSk7Y2xhc3MgSk57Y29uc3RydWN0b3IodCxlLG4pe3RoaXMuYWN0aW9ucyQ9dCx0aGlzLnN0b3JlPWUsdGhpcy5hbGVydEFjdGlvbk1vZHVsZT1uLHRoaXMucmVwb3J0UmVnaXN0ZXJlZEFjdGlvbkFsZXJ0cyQ9Z1MoKCgpPT50aGlzLmFjdGlvbnMkLnBpcGUoX24oKHQ9Pntjb25zdCBlPXRoaXMuYWxlcnRBY3Rpb25Nb2R1bGUuZ2V0QWxlcnRGcm9tQWN0aW9uKHQpO2UmJnRoaXMuc3RvcmUuZGlzcGF0Y2goS04oZSkpfSkpKSkse2Rpc3BhdGNoOiExfSl9fUpOLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxKTikodXModlMpLHVzKEVrKSx1cyh2QSkpfSxKTi7JtXByb3Y9bG8oe3Rva2VuOkpOLGZhY3Rvcnk6Sk4uybVmYWN9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEpOLFt7dHlwZTpKbX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTp2U30se3R5cGU6RWt9LHt0eXBlOnZBfV19KSxudWxsKTtjb25zdCBRTj1tUyh7bGF0ZXN0QWxlcnQ6bnVsbH0scFMoS04sKCh0LHtsb2NhbGl6ZWRNZXNzYWdlOmUsZm9sbG93dXBBY3Rpb246bn0pPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2xhdGVzdEFsZXJ0Ontsb2NhbGl6ZWRNZXNzYWdlOmUsZm9sbG93dXBBY3Rpb246bixjcmVhdGVkOkRhdGUubm93KCl9fSkpKSk7ZnVuY3Rpb24gJE4odCxlKXtyZXR1cm4gUU4odCxlKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY29uc3QgdEk9MTMsZUk9Mjcsbkk9MzIsb0k9MzgsaUk9NDA7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpmdW5jdGlvbiBhSSh0LC4uLmUpe3JldHVybiBlLmxlbmd0aD9lLnNvbWUoKGU9PnRbZV0pKTp0LmFsdEtleXx8dC5zaGlmdEtleXx8dC5jdHJsS2V5fHx0Lm1ldGFLZXl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIHJJKHQpe3JldHVybiBudWxsIT10JiYiZmFsc2UiIT1gJHt0fWB9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIHNJKHQsZT0wKXtyZXR1cm4gbEkodCk/TnVtYmVyKHQpOmV9ZnVuY3Rpb24gbEkodCl7cmV0dXJuIWlzTmFOKHBhcnNlRmxvYXQodCkpJiYhaXNOYU4oTnVtYmVyKHQpKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovZnVuY3Rpb24gY0kodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/dDpbdF19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIGRJKHQpe3JldHVybiBudWxsPT10PyIiOiJzdHJpbmciPT10eXBlb2YgdD90OmAke3R9cHhgfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiBwSSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGNoP3QubmF0aXZlRWxlbWVudDp0fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9sZXQgbUksdUk7dHJ5e21JPSJ1bmRlZmluZWQiIT10eXBlb2YgSW50bCYmSW50bC52OEJyZWFrSXRlcmF0b3J9Y2F0Y2godCl7bUk9ITF9Y2xhc3MgZkl7Y29uc3RydWN0b3IodCl7dGhpcy5fcGxhdGZvcm1JZD10LHRoaXMuaXNCcm93c2VyPXRoaXMuX3BsYXRmb3JtSWQ/KGZ1bmN0aW9uIGUodCl7cmV0dXJuImJyb3dzZXIiPT09dH0pKHRoaXMuX3BsYXRmb3JtSWQpOiJvYmplY3QiPT10eXBlb2YgZG9jdW1lbnQmJiEhZG9jdW1lbnQsdGhpcy5FREdFPXRoaXMuaXNCcm93c2VyJiYvKGVkZ2UpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0aGlzLlRSSURFTlQ9dGhpcy5pc0Jyb3dzZXImJi8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksdGhpcy5CTElOSz10aGlzLmlzQnJvd3NlciYmISghd2luZG93LmNocm9tZSYmIW1JKSYmInVuZGVmaW5lZCIhPXR5cGVvZiBDU1MmJiF0aGlzLkVER0UmJiF0aGlzLlRSSURFTlQsdGhpcy5XRUJLSVQ9dGhpcy5pc0Jyb3dzZXImJi9BcHBsZVdlYktpdC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJiF0aGlzLkJMSU5LJiYhdGhpcy5FREdFJiYhdGhpcy5UUklERU5ULHRoaXMuSU9TPXRoaXMuaXNCcm93c2VyJiYvaVBhZHxpUGhvbmV8aVBvZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmISgiTVNTdHJlYW0iaW4gd2luZG93KSx0aGlzLkZJUkVGT1g9dGhpcy5pc0Jyb3dzZXImJi8oZmlyZWZveHxtaW5lZmllbGQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0aGlzLkFORFJPSUQ9dGhpcy5pc0Jyb3dzZXImJi9hbmRyb2lkL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmIXRoaXMuVFJJREVOVCx0aGlzLlNBRkFSST10aGlzLmlzQnJvd3NlciYmL3NhZmFyaS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJnRoaXMuV0VCS0lUfX1mSS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8ZkkpKHVzKEhfKSl9LGZJLsm1cHJvdj1sbyh7ZmFjdG9yeTpmdW5jdGlvbiB0KCl7cmV0dXJuIG5ldyBmSSh1cyhIXykpfSx0b2tlbjpmSSxwcm92aWRlZEluOiJyb290In0pLGZJLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6T2JqZWN0LGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W0hfXX1dfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihmSSxbe3R5cGU6Sm0sYXJnczpbe3Byb3ZpZGVkSW46InJvb3QifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6T2JqZWN0LGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W0hfXX1dfV19KSxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIGdJe31nSS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8Z0kpfSxnSS7JtW1vZD1abyh7dHlwZTpnSX0pLGdJLsm1aW5qPWNvKHt9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGdJLFt7dHlwZTprXyxhcmdzOlt7fV19XSxudWxsLG51bGwpO2NvbnN0IGhJPVsiY29sb3IiLCJidXR0b24iLCJjaGVja2JveCIsImRhdGUiLCJkYXRldGltZS1sb2NhbCIsImVtYWlsIiwiZmlsZSIsImhpZGRlbiIsImltYWdlIiwibW9udGgiLCJudW1iZXIiLCJwYXNzd29yZCIsInJhZGlvIiwicmFuZ2UiLCJyZXNldCIsInNlYXJjaCIsInN1Ym1pdCIsInRlbCIsInRleHQiLCJ0aW1lIiwidXJsIiwid2VlayJdO2Z1bmN0aW9uIGJJKCl7aWYodUkpcmV0dXJuIHVJO2lmKCJvYmplY3QiIT10eXBlb2YgZG9jdW1lbnR8fCFkb2N1bWVudClyZXR1cm4gdUk9bmV3IFNldChoSSksdUk7bGV0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTtyZXR1cm4gdUk9bmV3IFNldChoSS5maWx0ZXIoKGU9Pih0LnNldEF0dHJpYnV0ZSgidHlwZSIsZSksdC50eXBlPT09ZSkpKSksdUl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2xldCB5SSxfSSxDSSxNSTtmdW5jdGlvbiB2SSh0KXtyZXR1cm4oZnVuY3Rpb24gZSgpe2lmKG51bGw9PXlJJiYidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyl0cnl7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInRlc3QiLG51bGwsT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJwYXNzaXZlIix7Z2V0OigpPT55ST0hMH0pKX1maW5hbGx5e3lJPXlJfHwhMX1yZXR1cm4geUl9KSgpP3Q6ISF0LmNhcHR1cmV9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIHhJKCl7aWYobnVsbD09Q0kpe2lmKCJvYmplY3QiIT10eXBlb2YgZG9jdW1lbnR8fCFkb2N1bWVudHx8ImZ1bmN0aW9uIiE9dHlwZW9mIEVsZW1lbnR8fCFFbGVtZW50KXJldHVybiBDST0hMSxDSTtpZigic2Nyb2xsQmVoYXZpb3IiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlKUNJPSEwO2Vsc2V7Y29uc3QgdD1FbGVtZW50LnByb3RvdHlwZS5zY3JvbGxUbztDST0hIXQmJiEvXHtccypcW25hdGl2ZSBjb2RlXF1ccypcfS8udGVzdCh0LnRvU3RyaW5nKCkpfX1yZXR1cm4gQ0l9ZnVuY3Rpb24gT0koKXtpZigib2JqZWN0IiE9dHlwZW9mIGRvY3VtZW50fHwhZG9jdW1lbnQpcmV0dXJuIDA7aWYobnVsbD09X0kpe2NvbnN0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksZT10LnN0eWxlO3QuZGlyPSJydGwiLGUud2lkdGg9IjFweCIsZS5vdmVyZmxvdz0iYXV0byIsZS52aXNpYmlsaXR5PSJoaWRkZW4iLGUucG9pbnRlckV2ZW50cz0ibm9uZSIsZS5wb3NpdGlvbj0iYWJzb2x1dGUiO2NvbnN0IG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iiksbz1uLnN0eWxlO28ud2lkdGg9IjJweCIsby5oZWlnaHQ9IjFweCIsdC5hcHBlbmRDaGlsZChuKSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHQpLF9JPTAsMD09PXQuc2Nyb2xsTGVmdCYmKHQuc2Nyb2xsTGVmdD0xLF9JPTA9PT10LnNjcm9sbExlZnQ/MToyKSx0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCl9cmV0dXJuIF9JfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiBQSSh0KXtpZigoZnVuY3Rpb24gZSgpe2lmKG51bGw9PU1JKXtjb25zdCB0PSJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQ/ZG9jdW1lbnQuaGVhZDpudWxsO01JPSEoIXR8fCF0LmNyZWF0ZVNoYWRvd1Jvb3QmJiF0LmF0dGFjaFNoYWRvdyl9cmV0dXJuIE1JfSkoKSl7Y29uc3QgZT10LmdldFJvb3ROb2RlP3QuZ2V0Um9vdE5vZGUoKTpudWxsO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgU2hhZG93Um9vdCYmU2hhZG93Um9vdCYmZSBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpcmV0dXJuIGV9cmV0dXJuIG51bGx9Y2xhc3Mgd0l7Y3JlYXRlKHQpe3JldHVybiJ1bmRlZmluZWQiPT10eXBlb2YgTXV0YXRpb25PYnNlcnZlcj9udWxsOm5ldyBNdXRhdGlvbk9ic2VydmVyKHQpfX13SS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8d0kpfSx3SS7JtXByb3Y9bG8oe2ZhY3Rvcnk6ZnVuY3Rpb24gdCgpe3JldHVybiBuZXcgd0l9LHRva2VuOndJLHByb3ZpZGVkSW46InJvb3QifSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYih3SSxbe3R5cGU6Sm0sYXJnczpbe3Byb3ZpZGVkSW46InJvb3QifV19XSxudWxsLG51bGwpO2NsYXNzIGtJe2NvbnN0cnVjdG9yKHQpe3RoaXMuX211dGF0aW9uT2JzZXJ2ZXJGYWN0b3J5PXQsdGhpcy5fb2JzZXJ2ZWRFbGVtZW50cz1uZXcgTWFwfW5nT25EZXN0cm95KCl7dGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5mb3JFYWNoKCgodCxlKT0+dGhpcy5fY2xlYW51cE9ic2VydmVyKGUpKSl9b2JzZXJ2ZSh0KXtjb25zdCBlPXBJKHQpO3JldHVybiBuZXcgeSgodD0+e2NvbnN0IG49dGhpcy5fb2JzZXJ2ZUVsZW1lbnQoZSkuc3Vic2NyaWJlKHQpO3JldHVybigpPT57bi51bnN1YnNjcmliZSgpLHRoaXMuX3Vub2JzZXJ2ZUVsZW1lbnQoZSl9fSkpfV9vYnNlcnZlRWxlbWVudCh0KXtpZih0aGlzLl9vYnNlcnZlZEVsZW1lbnRzLmhhcyh0KSl0aGlzLl9vYnNlcnZlZEVsZW1lbnRzLmdldCh0KS5jb3VudCsrO2Vsc2V7Y29uc3QgZT1uZXcgeCxuPXRoaXMuX211dGF0aW9uT2JzZXJ2ZXJGYWN0b3J5LmNyZWF0ZSgodD0+ZS5uZXh0KHQpKSk7biYmbi5vYnNlcnZlKHQse2NoYXJhY3RlckRhdGE6ITAsY2hpbGRMaXN0OiEwLHN1YnRyZWU6ITB9KSx0aGlzLl9vYnNlcnZlZEVsZW1lbnRzLnNldCh0LHtvYnNlcnZlcjpuLHN0cmVhbTplLGNvdW50OjF9KX1yZXR1cm4gdGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5nZXQodCkuc3RyZWFtfV91bm9ic2VydmVFbGVtZW50KHQpe3RoaXMuX29ic2VydmVkRWxlbWVudHMuaGFzKHQpJiYodGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5nZXQodCkuY291bnQtLSx0aGlzLl9vYnNlcnZlZEVsZW1lbnRzLmdldCh0KS5jb3VudHx8dGhpcy5fY2xlYW51cE9ic2VydmVyKHQpKX1fY2xlYW51cE9ic2VydmVyKHQpe2lmKHRoaXMuX29ic2VydmVkRWxlbWVudHMuaGFzKHQpKXtjb25zdHtvYnNlcnZlcjplLHN0cmVhbTpufT10aGlzLl9vYnNlcnZlZEVsZW1lbnRzLmdldCh0KTtlJiZlLmRpc2Nvbm5lY3QoKSxuLmNvbXBsZXRlKCksdGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5kZWxldGUodCl9fX1rSS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8a0kpKHVzKHdJKSl9LGtJLsm1cHJvdj1sbyh7ZmFjdG9yeTpmdW5jdGlvbiB0KCl7cmV0dXJuIG5ldyBrSSh1cyh3SSkpfSx0b2tlbjprSSxwcm92aWRlZEluOiJyb290In0pLGtJLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6d0l9XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGtJLFt7dHlwZTpKbSxhcmdzOlt7cHJvdmlkZWRJbjoicm9vdCJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTp3SX1dfSksbnVsbCk7Y2xhc3MgU0l7Y29uc3RydWN0b3IodCxlLG4pe3RoaXMuX2NvbnRlbnRPYnNlcnZlcj10LHRoaXMuX2VsZW1lbnRSZWY9ZSx0aGlzLl9uZ1pvbmU9bix0aGlzLmV2ZW50PW5ldyBBYix0aGlzLl9kaXNhYmxlZD0hMSx0aGlzLl9jdXJyZW50U3Vic2NyaXB0aW9uPW51bGx9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfXNldCBkaXNhYmxlZCh0KXt0aGlzLl9kaXNhYmxlZD1ySSh0KSx0aGlzLl9kaXNhYmxlZD90aGlzLl91bnN1YnNjcmliZSgpOnRoaXMuX3N1YnNjcmliZSgpfWdldCBkZWJvdW5jZSgpe3JldHVybiB0aGlzLl9kZWJvdW5jZX1zZXQgZGVib3VuY2UodCl7dGhpcy5fZGVib3VuY2U9c0kodCksdGhpcy5fc3Vic2NyaWJlKCl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5fY3VycmVudFN1YnNjcmlwdGlvbnx8dGhpcy5kaXNhYmxlZHx8dGhpcy5fc3Vic2NyaWJlKCl9bmdPbkRlc3Ryb3koKXt0aGlzLl91bnN1YnNjcmliZSgpfV9zdWJzY3JpYmUoKXt0aGlzLl91bnN1YnNjcmliZSgpO2NvbnN0IHQ9dGhpcy5fY29udGVudE9ic2VydmVyLm9ic2VydmUodGhpcy5fZWxlbWVudFJlZik7dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgoKT0+e3RoaXMuX2N1cnJlbnRTdWJzY3JpcHRpb249KHRoaXMuZGVib3VuY2U/dC5waXBlKGRlKHRoaXMuZGVib3VuY2UpKTp0KS5zdWJzY3JpYmUodGhpcy5ldmVudCl9KSl9X3Vuc3Vic2NyaWJlKCl7dmFyIHQ7bnVsbD09PSh0PXRoaXMuX2N1cnJlbnRTdWJzY3JpcHRpb24pfHx2b2lkIDA9PT10fHx0LnVuc3Vic2NyaWJlKCl9fVNJLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxTSSkoTXUoa0kpLE11KGNoKSxNdSh0QykpfSxTSS7JtWRpcj1Kbyh7dHlwZTpTSSxzZWxlY3RvcnM6W1siIiwiY2RrT2JzZXJ2ZUNvbnRlbnQiLCIiXV0saW5wdXRzOntkaXNhYmxlZDpbImNka09ic2VydmVDb250ZW50RGlzYWJsZWQiLCJkaXNhYmxlZCJdLGRlYm91bmNlOiJkZWJvdW5jZSJ9LG91dHB1dHM6e2V2ZW50OiJjZGtPYnNlcnZlQ29udGVudCJ9LGV4cG9ydEFzOlsiY2RrT2JzZXJ2ZUNvbnRlbnQiXX0pLFNJLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6a0l9LHt0eXBlOmNofSx7dHlwZTp0Q31dLFNJLnByb3BEZWNvcmF0b3JzPXtldmVudDpbe3R5cGU6X18sYXJnczpbImNka09ic2VydmVDb250ZW50Il19XSxkaXNhYmxlZDpbe3R5cGU6eV8sYXJnczpbImNka09ic2VydmVDb250ZW50RGlzYWJsZWQiXX1dLGRlYm91bmNlOlt7dHlwZTp5X31dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFNJLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6IltjZGtPYnNlcnZlQ29udGVudF0iLGV4cG9ydEFzOiJjZGtPYnNlcnZlQ29udGVudCJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTprSX0se3R5cGU6Y2h9LHt0eXBlOnRDfV19KSx7ZXZlbnQ6W3t0eXBlOl9fLGFyZ3M6WyJjZGtPYnNlcnZlQ29udGVudCJdfV0sZGlzYWJsZWQ6W3t0eXBlOnlfLGFyZ3M6WyJjZGtPYnNlcnZlQ29udGVudERpc2FibGVkIl19XSxkZWJvdW5jZTpbe3R5cGU6eV99XX0pO2NsYXNzIERJe31mdW5jdGlvbiBFSSh0LGUpe3JldHVybih0LmdldEF0dHJpYnV0ZShlKXx8IiIpLm1hdGNoKC9cUysvZyl8fFtdfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9ESS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8REkpfSxESS7JtW1vZD1abyh7dHlwZTpESX0pLERJLsm1aW5qPWNvKHtwcm92aWRlcnM6W3dJXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oREkse2RlY2xhcmF0aW9uczpbU0ldLGV4cG9ydHM6W1NJXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoREksW3t0eXBlOmtfLGFyZ3M6W3tleHBvcnRzOltTSV0sZGVjbGFyYXRpb25zOltTSV0scHJvdmlkZXJzOlt3SV19XX1dLG51bGwsbnVsbCk7Y29uc3QgQUk9ImNkay1kZXNjcmliZWRieS1tZXNzYWdlLWNvbnRhaW5lciIsUkk9ImNkay1kZXNjcmliZWRieS1ob3N0IjtsZXQgVEk9MDtjb25zdCBOST1uZXcgTWFwO2xldCBJST1udWxsO2NsYXNzIHpJe2NvbnN0cnVjdG9yKHQpe3RoaXMuX2RvY3VtZW50PXR9ZGVzY3JpYmUodCxlLG4pe2lmKCF0aGlzLl9jYW5CZURlc2NyaWJlZCh0LGUpKXJldHVybjtjb25zdCBvPUhJKGUsbik7InN0cmluZyIhPXR5cGVvZiBlPyhGSShlKSxOSS5zZXQobyx7bWVzc2FnZUVsZW1lbnQ6ZSxyZWZlcmVuY2VDb3VudDowfSkpOk5JLmhhcyhvKXx8dGhpcy5fY3JlYXRlTWVzc2FnZUVsZW1lbnQoZSxuKSx0aGlzLl9pc0VsZW1lbnREZXNjcmliZWRCeU1lc3NhZ2UodCxvKXx8dGhpcy5fYWRkTWVzc2FnZVJlZmVyZW5jZSh0LG8pfXJlbW92ZURlc2NyaXB0aW9uKHQsZSxuKXtpZighZXx8IXRoaXMuX2lzRWxlbWVudE5vZGUodCkpcmV0dXJuO2NvbnN0IG89SEkoZSxuKTtpZih0aGlzLl9pc0VsZW1lbnREZXNjcmliZWRCeU1lc3NhZ2UodCxvKSYmdGhpcy5fcmVtb3ZlTWVzc2FnZVJlZmVyZW5jZSh0LG8pLCJzdHJpbmciPT10eXBlb2YgZSl7Y29uc3QgdD1OSS5nZXQobyk7dCYmMD09PXQucmVmZXJlbmNlQ291bnQmJnRoaXMuX2RlbGV0ZU1lc3NhZ2VFbGVtZW50KG8pfUlJJiYwPT09SUkuY2hpbGROb2Rlcy5sZW5ndGgmJnRoaXMuX2RlbGV0ZU1lc3NhZ2VzQ29udGFpbmVyKCl9bmdPbkRlc3Ryb3koKXtjb25zdCB0PXRoaXMuX2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIltjZGstZGVzY3JpYmVkYnktaG9zdF0iKTtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKyl0aGlzLl9yZW1vdmVDZGtEZXNjcmliZWRCeVJlZmVyZW5jZUlkcyh0W2VdKSx0W2VdLnJlbW92ZUF0dHJpYnV0ZShSSSk7SUkmJnRoaXMuX2RlbGV0ZU1lc3NhZ2VzQ29udGFpbmVyKCksTkkuY2xlYXIoKX1fY3JlYXRlTWVzc2FnZUVsZW1lbnQodCxlKXtjb25zdCBuPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO0ZJKG4pLG4udGV4dENvbnRlbnQ9dCxlJiZuLnNldEF0dHJpYnV0ZSgicm9sZSIsZSksdGhpcy5fY3JlYXRlTWVzc2FnZXNDb250YWluZXIoKSxJSS5hcHBlbmRDaGlsZChuKSxOSS5zZXQoSEkodCxlKSx7bWVzc2FnZUVsZW1lbnQ6bixyZWZlcmVuY2VDb3VudDowfSl9X2RlbGV0ZU1lc3NhZ2VFbGVtZW50KHQpe2NvbnN0IGU9TkkuZ2V0KHQpLG49ZSYmZS5tZXNzYWdlRWxlbWVudDtJSSYmbiYmSUkucmVtb3ZlQ2hpbGQobiksTkkuZGVsZXRlKHQpfV9jcmVhdGVNZXNzYWdlc0NvbnRhaW5lcigpe2lmKCFJSSl7Y29uc3QgdD10aGlzLl9kb2N1bWVudC5nZXRFbGVtZW50QnlJZChBSSk7dCYmdC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCksSUk9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksSUkuaWQ9QUksSUkuc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIixJSS5jbGFzc0xpc3QuYWRkKCJjZGstdmlzdWFsbHktaGlkZGVuIiksdGhpcy5fZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChJSSl9fV9kZWxldGVNZXNzYWdlc0NvbnRhaW5lcigpe0lJJiZJSS5wYXJlbnROb2RlJiYoSUkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChJSSksSUk9bnVsbCl9X3JlbW92ZUNka0Rlc2NyaWJlZEJ5UmVmZXJlbmNlSWRzKHQpe2NvbnN0IGU9RUkodCwiYXJpYS1kZXNjcmliZWRieSIpLmZpbHRlcigodD0+MCE9dC5pbmRleE9mKCJjZGstZGVzY3JpYmVkYnktbWVzc2FnZSIpKSk7dC5zZXRBdHRyaWJ1dGUoImFyaWEtZGVzY3JpYmVkYnkiLGUuam9pbigiICIpKX1fYWRkTWVzc2FnZVJlZmVyZW5jZSh0LGUpe2NvbnN0IG49TkkuZ2V0KGUpOyEoZnVuY3Rpb24gbyh0LGUsbil7Y29uc3Qgbz1FSSh0LGUpO28uc29tZSgodD0+dC50cmltKCk9PW4udHJpbSgpKSl8fChvLnB1c2gobi50cmltKCkpLHQuc2V0QXR0cmlidXRlKGUsby5qb2luKCIgIikpKX0pKHQsImFyaWEtZGVzY3JpYmVkYnkiLG4ubWVzc2FnZUVsZW1lbnQuaWQpLHQuc2V0QXR0cmlidXRlKFJJLCIiKSxuLnJlZmVyZW5jZUNvdW50Kyt9X3JlbW92ZU1lc3NhZ2VSZWZlcmVuY2UodCxlKXtjb25zdCBuPU5JLmdldChlKTtuLnJlZmVyZW5jZUNvdW50LS0sKGZ1bmN0aW9uIG8odCxlLG4pe2NvbnN0IG89RUkodCxlKS5maWx0ZXIoKHQ9PnQhPW4udHJpbSgpKSk7by5sZW5ndGg/dC5zZXRBdHRyaWJ1dGUoZSxvLmpvaW4oIiAiKSk6dC5yZW1vdmVBdHRyaWJ1dGUoZSl9KSh0LCJhcmlhLWRlc2NyaWJlZGJ5IixuLm1lc3NhZ2VFbGVtZW50LmlkKSx0LnJlbW92ZUF0dHJpYnV0ZShSSSl9X2lzRWxlbWVudERlc2NyaWJlZEJ5TWVzc2FnZSh0LGUpe2NvbnN0IG49RUkodCwiYXJpYS1kZXNjcmliZWRieSIpLG89TkkuZ2V0KGUpLGk9byYmby5tZXNzYWdlRWxlbWVudC5pZDtyZXR1cm4hIWkmJi0xIT1uLmluZGV4T2YoaSl9X2NhbkJlRGVzY3JpYmVkKHQsZSl7aWYoIXRoaXMuX2lzRWxlbWVudE5vZGUodCkpcmV0dXJuITE7aWYoZSYmIm9iamVjdCI9PXR5cGVvZiBlKXJldHVybiEwO2NvbnN0IG49bnVsbD09ZT8iIjpgJHtlfWAudHJpbSgpLG89dC5nZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiKTtyZXR1cm4hKCFufHxvJiZvLnRyaW0oKT09PW4pfV9pc0VsZW1lbnROb2RlKHQpe3JldHVybiB0Lm5vZGVUeXBlPT09dGhpcy5fZG9jdW1lbnQuRUxFTUVOVF9OT0RFfX1mdW5jdGlvbiBISSh0LGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD9gJHtlfHwiIn0vJHt0fWA6dH1mdW5jdGlvbiBGSSh0KXt0LmlkfHwodC5pZD0iY2RrLWRlc2NyaWJlZGJ5LW1lc3NhZ2UtIitUSSsrKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovekkuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHpJKSh1cyhVQykpfSx6SS7JtXByb3Y9bG8oe2ZhY3Rvcnk6ZnVuY3Rpb24gdCgpe3JldHVybiBuZXcgekkodXMoVUMpKX0sdG9rZW46ekkscHJvdmlkZWRJbjoicm9vdCJ9KSx6SS5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltVQ119XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoekksW3t0eXBlOkptLGFyZ3M6W3twcm92aWRlZEluOiJyb290In1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltVQ119XX1dfSksbnVsbCk7Y2xhc3MgTEl7Y29uc3RydWN0b3IodCl7dGhpcy5faXRlbXM9dCx0aGlzLl9hY3RpdmVJdGVtSW5kZXg9LTEsdGhpcy5fYWN0aXZlSXRlbT1udWxsLHRoaXMuX3dyYXA9ITEsdGhpcy5fbGV0dGVyS2V5U3RyZWFtPW5ldyB4LHRoaXMuX3R5cGVhaGVhZFN1YnNjcmlwdGlvbj1sLkVNUFRZLHRoaXMuX3ZlcnRpY2FsPSEwLHRoaXMuX2FsbG93ZWRNb2RpZmllcktleXM9W10sdGhpcy5faG9tZUFuZEVuZD0hMSx0aGlzLl9za2lwUHJlZGljYXRlRm49dD0+dC5kaXNhYmxlZCx0aGlzLl9wcmVzc2VkTGV0dGVycz1bXSx0aGlzLnRhYk91dD1uZXcgeCx0aGlzLmNoYW5nZT1uZXcgeCx0IGluc3RhbmNlb2YgVGImJnQuY2hhbmdlcy5zdWJzY3JpYmUoKHQ9PntpZih0aGlzLl9hY3RpdmVJdGVtKXtjb25zdCBlPXQudG9BcnJheSgpLmluZGV4T2YodGhpcy5fYWN0aXZlSXRlbSk7ZT4tMSYmZSE9PXRoaXMuX2FjdGl2ZUl0ZW1JbmRleCYmKHRoaXMuX2FjdGl2ZUl0ZW1JbmRleD1lKX19KSl9c2tpcFByZWRpY2F0ZSh0KXtyZXR1cm4gdGhpcy5fc2tpcFByZWRpY2F0ZUZuPXQsdGhpc313aXRoV3JhcCh0PSEwKXtyZXR1cm4gdGhpcy5fd3JhcD10LHRoaXN9d2l0aFZlcnRpY2FsT3JpZW50YXRpb24odD0hMCl7cmV0dXJuIHRoaXMuX3ZlcnRpY2FsPXQsdGhpc313aXRoSG9yaXpvbnRhbE9yaWVudGF0aW9uKHQpe3JldHVybiB0aGlzLl9ob3Jpem9udGFsPXQsdGhpc313aXRoQWxsb3dlZE1vZGlmaWVyS2V5cyh0KXtyZXR1cm4gdGhpcy5fYWxsb3dlZE1vZGlmaWVyS2V5cz10LHRoaXN9d2l0aFR5cGVBaGVhZCh0PTIwMCl7aWYoKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZ0aGlzLl9pdGVtcy5sZW5ndGgmJnRoaXMuX2l0ZW1zLnNvbWUoKHQ9PiJmdW5jdGlvbiIhPXR5cGVvZiB0LmdldExhYmVsKSkpdGhyb3cgRXJyb3IoIkxpc3RLZXlNYW5hZ2VyIGl0ZW1zIGluIHR5cGVhaGVhZCBtb2RlIG11c3QgaW1wbGVtZW50IHRoZSBgZ2V0TGFiZWxgIG1ldGhvZC4iKTtyZXR1cm4gdGhpcy5fdHlwZWFoZWFkU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fdHlwZWFoZWFkU3Vic2NyaXB0aW9uPXRoaXMuX2xldHRlcktleVN0cmVhbS5waXBlKF9uKCh0PT50aGlzLl9wcmVzc2VkTGV0dGVycy5wdXNoKHQpKSksZGUodCksR3QoKCgpPT50aGlzLl9wcmVzc2VkTGV0dGVycy5sZW5ndGg+MCkpLGh0KCgoKT0+dGhpcy5fcHJlc3NlZExldHRlcnMuam9pbigiIikpKSkuc3Vic2NyaWJlKCh0PT57Y29uc3QgZT10aGlzLl9nZXRJdGVtc0FycmF5KCk7Zm9yKGxldCBuPTE7bjxlLmxlbmd0aCsxO24rKyl7Y29uc3Qgbz0odGhpcy5fYWN0aXZlSXRlbUluZGV4K24pJWUubGVuZ3RoLGk9ZVtvXTtpZighdGhpcy5fc2tpcFByZWRpY2F0ZUZuKGkpJiYwPT09aS5nZXRMYWJlbCgpLnRvVXBwZXJDYXNlKCkudHJpbSgpLmluZGV4T2YodCkpe3RoaXMuc2V0QWN0aXZlSXRlbShvKTticmVha319dGhpcy5fcHJlc3NlZExldHRlcnM9W119KSksdGhpc313aXRoSG9tZUFuZEVuZCh0PSEwKXtyZXR1cm4gdGhpcy5faG9tZUFuZEVuZD10LHRoaXN9c2V0QWN0aXZlSXRlbSh0KXtjb25zdCBlPXRoaXMuX2FjdGl2ZUl0ZW07dGhpcy51cGRhdGVBY3RpdmVJdGVtKHQpLHRoaXMuX2FjdGl2ZUl0ZW0hPT1lJiZ0aGlzLmNoYW5nZS5uZXh0KHRoaXMuX2FjdGl2ZUl0ZW1JbmRleCl9b25LZXlkb3duKHQpe2NvbnN0IGU9dC5rZXlDb2RlLG49WyJhbHRLZXkiLCJjdHJsS2V5IiwibWV0YUtleSIsInNoaWZ0S2V5Il0uZXZlcnkoKGU9PiF0W2VdfHx0aGlzLl9hbGxvd2VkTW9kaWZpZXJLZXlzLmluZGV4T2YoZSk+LTEpKTtzd2l0Y2goZSl7Y2FzZSA5OnJldHVybiB2b2lkIHRoaXMudGFiT3V0Lm5leHQoKTtjYXNlIGlJOmlmKHRoaXMuX3ZlcnRpY2FsJiZuKXt0aGlzLnNldE5leHRJdGVtQWN0aXZlKCk7YnJlYWt9cmV0dXJuO2Nhc2Ugb0k6aWYodGhpcy5fdmVydGljYWwmJm4pe3RoaXMuc2V0UHJldmlvdXNJdGVtQWN0aXZlKCk7YnJlYWt9cmV0dXJuO2Nhc2UgMzk6aWYodGhpcy5faG9yaXpvbnRhbCYmbil7InJ0bCI9PT10aGlzLl9ob3Jpem9udGFsP3RoaXMuc2V0UHJldmlvdXNJdGVtQWN0aXZlKCk6dGhpcy5zZXROZXh0SXRlbUFjdGl2ZSgpO2JyZWFrfXJldHVybjtjYXNlIDM3OmlmKHRoaXMuX2hvcml6b250YWwmJm4peyJydGwiPT09dGhpcy5faG9yaXpvbnRhbD90aGlzLnNldE5leHRJdGVtQWN0aXZlKCk6dGhpcy5zZXRQcmV2aW91c0l0ZW1BY3RpdmUoKTticmVha31yZXR1cm47Y2FzZSAzNjppZih0aGlzLl9ob21lQW5kRW5kJiZuKXt0aGlzLnNldEZpcnN0SXRlbUFjdGl2ZSgpO2JyZWFrfXJldHVybjtjYXNlIDM1OmlmKHRoaXMuX2hvbWVBbmRFbmQmJm4pe3RoaXMuc2V0TGFzdEl0ZW1BY3RpdmUoKTticmVha31yZXR1cm47ZGVmYXVsdDpyZXR1cm4gdm9pZCgobnx8YUkodCwic2hpZnRLZXkiKSkmJih0LmtleSYmMT09PXQua2V5Lmxlbmd0aD90aGlzLl9sZXR0ZXJLZXlTdHJlYW0ubmV4dCh0LmtleS50b0xvY2FsZVVwcGVyQ2FzZSgpKTooZT49NjUmJmU8PTkwfHxlPj00OCYmZTw9NTcpJiZ0aGlzLl9sZXR0ZXJLZXlTdHJlYW0ubmV4dChTdHJpbmcuZnJvbUNoYXJDb2RlKGUpKSkpfXRoaXMuX3ByZXNzZWRMZXR0ZXJzPVtdLHQucHJldmVudERlZmF1bHQoKX1nZXQgYWN0aXZlSXRlbUluZGV4KCl7cmV0dXJuIHRoaXMuX2FjdGl2ZUl0ZW1JbmRleH1nZXQgYWN0aXZlSXRlbSgpe3JldHVybiB0aGlzLl9hY3RpdmVJdGVtfWlzVHlwaW5nKCl7cmV0dXJuIHRoaXMuX3ByZXNzZWRMZXR0ZXJzLmxlbmd0aD4wfXNldEZpcnN0SXRlbUFjdGl2ZSgpe3RoaXMuX3NldEFjdGl2ZUl0ZW1CeUluZGV4KDAsMSl9c2V0TGFzdEl0ZW1BY3RpdmUoKXt0aGlzLl9zZXRBY3RpdmVJdGVtQnlJbmRleCh0aGlzLl9pdGVtcy5sZW5ndGgtMSwtMSl9c2V0TmV4dEl0ZW1BY3RpdmUoKXt0aGlzLl9hY3RpdmVJdGVtSW5kZXg8MD90aGlzLnNldEZpcnN0SXRlbUFjdGl2ZSgpOnRoaXMuX3NldEFjdGl2ZUl0ZW1CeURlbHRhKDEpfXNldFByZXZpb3VzSXRlbUFjdGl2ZSgpe3RoaXMuX2FjdGl2ZUl0ZW1JbmRleDwwJiZ0aGlzLl93cmFwP3RoaXMuc2V0TGFzdEl0ZW1BY3RpdmUoKTp0aGlzLl9zZXRBY3RpdmVJdGVtQnlEZWx0YSgtMSl9dXBkYXRlQWN0aXZlSXRlbSh0KXtjb25zdCBlPXRoaXMuX2dldEl0ZW1zQXJyYXkoKSxuPSJudW1iZXIiPT10eXBlb2YgdD90OmUuaW5kZXhPZih0KSxvPWVbbl07dGhpcy5fYWN0aXZlSXRlbT1udWxsPT1vP251bGw6byx0aGlzLl9hY3RpdmVJdGVtSW5kZXg9bn1fc2V0QWN0aXZlSXRlbUJ5RGVsdGEodCl7dGhpcy5fd3JhcD90aGlzLl9zZXRBY3RpdmVJbldyYXBNb2RlKHQpOnRoaXMuX3NldEFjdGl2ZUluRGVmYXVsdE1vZGUodCl9X3NldEFjdGl2ZUluV3JhcE1vZGUodCl7Y29uc3QgZT10aGlzLl9nZXRJdGVtc0FycmF5KCk7Zm9yKGxldCBuPTE7bjw9ZS5sZW5ndGg7bisrKXtjb25zdCBvPSh0aGlzLl9hY3RpdmVJdGVtSW5kZXgrdCpuK2UubGVuZ3RoKSVlLmxlbmd0aDtpZighdGhpcy5fc2tpcFByZWRpY2F0ZUZuKGVbb10pKXJldHVybiB2b2lkIHRoaXMuc2V0QWN0aXZlSXRlbShvKX19X3NldEFjdGl2ZUluRGVmYXVsdE1vZGUodCl7dGhpcy5fc2V0QWN0aXZlSXRlbUJ5SW5kZXgodGhpcy5fYWN0aXZlSXRlbUluZGV4K3QsdCl9X3NldEFjdGl2ZUl0ZW1CeUluZGV4KHQsZSl7Y29uc3Qgbj10aGlzLl9nZXRJdGVtc0FycmF5KCk7aWYoblt0XSl7Zm9yKDt0aGlzLl9za2lwUHJlZGljYXRlRm4oblt0XSk7KWlmKCFuW3QrPWVdKXJldHVybjt0aGlzLnNldEFjdGl2ZUl0ZW0odCl9fV9nZXRJdGVtc0FycmF5KCl7cmV0dXJuIHRoaXMuX2l0ZW1zIGluc3RhbmNlb2YgVGI/dGhpcy5faXRlbXMudG9BcnJheSgpOnRoaXMuX2l0ZW1zfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY2xhc3MgQkkgZXh0ZW5kcyBMSXtzZXRBY3RpdmVJdGVtKHQpe3RoaXMuYWN0aXZlSXRlbSYmdGhpcy5hY3RpdmVJdGVtLnNldEluYWN0aXZlU3R5bGVzKCksc3VwZXIuc2V0QWN0aXZlSXRlbSh0KSx0aGlzLmFjdGl2ZUl0ZW0mJnRoaXMuYWN0aXZlSXRlbS5zZXRBY3RpdmVTdHlsZXMoKX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NsYXNzIFZJIGV4dGVuZHMgTEl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX29yaWdpbj0icHJvZ3JhbSJ9c2V0Rm9jdXNPcmlnaW4odCl7cmV0dXJuIHRoaXMuX29yaWdpbj10LHRoaXN9c2V0QWN0aXZlSXRlbSh0KXtzdXBlci5zZXRBY3RpdmVJdGVtKHQpLHRoaXMuYWN0aXZlSXRlbSYmdGhpcy5hY3RpdmVJdGVtLmZvY3VzKHRoaXMuX29yaWdpbil9fWNsYXNzIGpJe2NvbnN0cnVjdG9yKHQpe3RoaXMuX3BsYXRmb3JtPXR9aXNEaXNhYmxlZCh0KXtyZXR1cm4gdC5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIil9aXNWaXNpYmxlKHQpe3JldHVybihmdW5jdGlvbiBlKHQpe3JldHVybiEhKHQub2Zmc2V0V2lkdGh8fHQub2Zmc2V0SGVpZ2h0fHwiZnVuY3Rpb24iPT10eXBlb2YgdC5nZXRDbGllbnRSZWN0cyYmdC5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCl9KSh0KSYmInZpc2libGUiPT09Z2V0Q29tcHV0ZWRTdHlsZSh0KS52aXNpYmlsaXR5fWlzVGFiYmFibGUodCl7aWYoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm4hMTtjb25zdCBlPShmdW5jdGlvbiBvKHQpe3RyeXtyZXR1cm4gdC5mcmFtZUVsZW1lbnR9Y2F0Y2godCl7cmV0dXJuIG51bGx9fSkoKGZ1bmN0aW9uIG4odCl7cmV0dXJuIHQub3duZXJEb2N1bWVudCYmdC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHx3aW5kb3d9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLykodCkpO2lmKGUpe2lmKC0xPT09V0koZSkpcmV0dXJuITE7aWYoIXRoaXMuaXNWaXNpYmxlKGUpKXJldHVybiExfWxldCBpPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxhPVdJKHQpO3JldHVybiB0Lmhhc0F0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIik/LTEhPT1hOiJpZnJhbWUiIT09aSYmIm9iamVjdCIhPT1pJiYhKHRoaXMuX3BsYXRmb3JtLldFQktJVCYmdGhpcy5fcGxhdGZvcm0uSU9TJiYhKGZ1bmN0aW9uIHIodCl7bGV0IGU9dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLG49ImlucHV0Ij09PWUmJnQudHlwZTtyZXR1cm4idGV4dCI9PT1ufHwicGFzc3dvcmQiPT09bnx8InNlbGVjdCI9PT1lfHwidGV4dGFyZWEiPT09ZX0pKHQpKSYmKCJhdWRpbyI9PT1pPyEhdC5oYXNBdHRyaWJ1dGUoImNvbnRyb2xzIikmJi0xIT09YToidmlkZW8iPT09aT8tMSE9PWEmJihudWxsIT09YXx8dGhpcy5fcGxhdGZvcm0uRklSRUZPWHx8dC5oYXNBdHRyaWJ1dGUoImNvbnRyb2xzIikpOnQudGFiSW5kZXg+PTApfWlzRm9jdXNhYmxlKHQsZSl7cmV0dXJuKGZ1bmN0aW9uIG4odCl7cmV0dXJuIShmdW5jdGlvbiBlKHQpe3JldHVybihmdW5jdGlvbiBlKHQpe3JldHVybiJpbnB1dCI9PXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0pKHQpJiYiaGlkZGVuIj09dC50eXBlfSkodCkmJigoZnVuY3Rpb24gbih0KXtsZXQgZT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PWV8fCJzZWxlY3QiPT09ZXx8ImJ1dHRvbiI9PT1lfHwidGV4dGFyZWEiPT09ZX0pKHQpfHwoZnVuY3Rpb24gbyh0KXtyZXR1cm4oZnVuY3Rpb24gZSh0KXtyZXR1cm4iYSI9PXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0pKHQpJiZ0Lmhhc0F0dHJpYnV0ZSgiaHJlZiIpfSkodCl8fHQuaGFzQXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiKXx8VUkodCkpfSkodCkmJiF0aGlzLmlzRGlzYWJsZWQodCkmJigobnVsbD09ZT92b2lkIDA6ZS5pZ25vcmVWaXNpYmlsaXR5KXx8dGhpcy5pc1Zpc2libGUodCkpfX1mdW5jdGlvbiBVSSh0KXtpZighdC5oYXNBdHRyaWJ1dGUoInRhYmluZGV4Iil8fHZvaWQgMD09PXQudGFiSW5kZXgpcmV0dXJuITE7bGV0IGU9dC5nZXRBdHRyaWJ1dGUoInRhYmluZGV4Iik7cmV0dXJuIi0zMjc2OCIhPWUmJiEoIWV8fGlzTmFOKHBhcnNlSW50KGUsMTApKSl9ZnVuY3Rpb24gV0kodCl7aWYoIVVJKHQpKXJldHVybiBudWxsO2NvbnN0IGU9cGFyc2VJbnQodC5nZXRBdHRyaWJ1dGUoInRhYmluZGV4Iil8fCIiLDEwKTtyZXR1cm4gaXNOYU4oZSk/LTE6ZX1qSS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8akkpKHVzKGZJKSl9LGpJLsm1cHJvdj1sbyh7ZmFjdG9yeTpmdW5jdGlvbiB0KCl7cmV0dXJuIG5ldyBqSSh1cyhmSSkpfSx0b2tlbjpqSSxwcm92aWRlZEluOiJyb290In0pLGpJLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6Zkl9XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGpJLFt7dHlwZTpKbSxhcmdzOlt7cHJvdmlkZWRJbjoicm9vdCJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpmSX1dfSksbnVsbCk7Y2xhc3MgR0l7Y29uc3RydWN0b3IodCxlLG4sbyxpPSExKXt0aGlzLl9lbGVtZW50PXQsdGhpcy5fY2hlY2tlcj1lLHRoaXMuX25nWm9uZT1uLHRoaXMuX2RvY3VtZW50PW8sdGhpcy5faGFzQXR0YWNoZWQ9ITEsdGhpcy5zdGFydEFuY2hvckxpc3RlbmVyPSgpPT50aGlzLmZvY3VzTGFzdFRhYmJhYmxlRWxlbWVudCgpLHRoaXMuZW5kQW5jaG9yTGlzdGVuZXI9KCk9PnRoaXMuZm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudCgpLHRoaXMuX2VuYWJsZWQ9ITAsaXx8dGhpcy5hdHRhY2hBbmNob3JzKCl9Z2V0IGVuYWJsZWQoKXtyZXR1cm4gdGhpcy5fZW5hYmxlZH1zZXQgZW5hYmxlZCh0KXt0aGlzLl9lbmFibGVkPXQsdGhpcy5fc3RhcnRBbmNob3ImJnRoaXMuX2VuZEFuY2hvciYmKHRoaXMuX3RvZ2dsZUFuY2hvclRhYkluZGV4KHQsdGhpcy5fc3RhcnRBbmNob3IpLHRoaXMuX3RvZ2dsZUFuY2hvclRhYkluZGV4KHQsdGhpcy5fZW5kQW5jaG9yKSl9ZGVzdHJveSgpe2NvbnN0IHQ9dGhpcy5fc3RhcnRBbmNob3IsZT10aGlzLl9lbmRBbmNob3I7dCYmKHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuc3RhcnRBbmNob3JMaXN0ZW5lciksdC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCkpLGUmJihlLnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLmVuZEFuY2hvckxpc3RlbmVyKSxlLnBhcmVudE5vZGUmJmUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlKSksdGhpcy5fc3RhcnRBbmNob3I9dGhpcy5fZW5kQW5jaG9yPW51bGwsdGhpcy5faGFzQXR0YWNoZWQ9ITF9YXR0YWNoQW5jaG9ycygpe3JldHVybiEhdGhpcy5faGFzQXR0YWNoZWR8fCh0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCgpPT57dGhpcy5fc3RhcnRBbmNob3J8fCh0aGlzLl9zdGFydEFuY2hvcj10aGlzLl9jcmVhdGVBbmNob3IoKSx0aGlzLl9zdGFydEFuY2hvci5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5zdGFydEFuY2hvckxpc3RlbmVyKSksdGhpcy5fZW5kQW5jaG9yfHwodGhpcy5fZW5kQW5jaG9yPXRoaXMuX2NyZWF0ZUFuY2hvcigpLHRoaXMuX2VuZEFuY2hvci5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5lbmRBbmNob3JMaXN0ZW5lcikpfSkpLHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZSYmKHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5fc3RhcnRBbmNob3IsdGhpcy5fZWxlbWVudCksdGhpcy5fZWxlbWVudC5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLl9lbmRBbmNob3IsdGhpcy5fZWxlbWVudC5uZXh0U2libGluZyksdGhpcy5faGFzQXR0YWNoZWQ9ITApLHRoaXMuX2hhc0F0dGFjaGVkKX1mb2N1c0luaXRpYWxFbGVtZW50V2hlblJlYWR5KCl7cmV0dXJuIG5ldyBQcm9taXNlKCh0PT57dGhpcy5fZXhlY3V0ZU9uU3RhYmxlKCgoKT0+dCh0aGlzLmZvY3VzSW5pdGlhbEVsZW1lbnQoKSkpKX0pKX1mb2N1c0ZpcnN0VGFiYmFibGVFbGVtZW50V2hlblJlYWR5KCl7cmV0dXJuIG5ldyBQcm9taXNlKCh0PT57dGhpcy5fZXhlY3V0ZU9uU3RhYmxlKCgoKT0+dCh0aGlzLmZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnQoKSkpKX0pKX1mb2N1c0xhc3RUYWJiYWJsZUVsZW1lbnRXaGVuUmVhZHkoKXtyZXR1cm4gbmV3IFByb21pc2UoKHQ9Pnt0aGlzLl9leGVjdXRlT25TdGFibGUoKCgpPT50KHRoaXMuZm9jdXNMYXN0VGFiYmFibGVFbGVtZW50KCkpKSl9KSl9X2dldFJlZ2lvbkJvdW5kYXJ5KHQpe2xldCBlPXRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvckFsbChgW2Nkay1mb2N1cy1yZWdpb24tJHt0fV0sIFtjZGtGb2N1c1JlZ2lvbiR7dH1dLCBbY2RrLWZvY3VzLSR7dH1dYCk7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspZVtuXS5oYXNBdHRyaWJ1dGUoYGNkay1mb2N1cy0ke3R9YCk/Y29uc29sZS53YXJuKGBGb3VuZCB1c2Ugb2YgZGVwcmVjYXRlZCBhdHRyaWJ1dGUgJ2Nkay1mb2N1cy0ke3R9JywgdXNlICdjZGtGb2N1c1JlZ2lvbiR7dH0nIGluc3RlYWQuIFRoZSBkZXByZWNhdGVkIGF0dHJpYnV0ZSB3aWxsIGJlIHJlbW92ZWQgaW4gOC4wLjAuYCxlW25dKTplW25dLmhhc0F0dHJpYnV0ZShgY2RrLWZvY3VzLXJlZ2lvbi0ke3R9YCkmJmNvbnNvbGUud2FybihgRm91bmQgdXNlIG9mIGRlcHJlY2F0ZWQgYXR0cmlidXRlICdjZGstZm9jdXMtcmVnaW9uLSR7dH0nLCB1c2UgJ2Nka0ZvY3VzUmVnaW9uJHt0fScgaW5zdGVhZC4gVGhlIGRlcHJlY2F0ZWQgYXR0cmlidXRlIHdpbGwgYmUgcmVtb3ZlZCBpbiA4LjAuMC5gLGVbbl0pO3JldHVybiJzdGFydCI9PXQ/ZS5sZW5ndGg/ZVswXTp0aGlzLl9nZXRGaXJzdFRhYmJhYmxlRWxlbWVudCh0aGlzLl9lbGVtZW50KTplLmxlbmd0aD9lW2UubGVuZ3RoLTFdOnRoaXMuX2dldExhc3RUYWJiYWJsZUVsZW1lbnQodGhpcy5fZWxlbWVudCl9Zm9jdXNJbml0aWFsRWxlbWVudCgpe2NvbnN0IHQ9dGhpcy5fZWxlbWVudC5xdWVyeVNlbGVjdG9yKCJbY2RrLWZvY3VzLWluaXRpYWxdLCBbY2RrRm9jdXNJbml0aWFsXSIpO2lmKHQpe2lmKHQuaGFzQXR0cmlidXRlKCJjZGstZm9jdXMtaW5pdGlhbCIpJiZjb25zb2xlLndhcm4oIkZvdW5kIHVzZSBvZiBkZXByZWNhdGVkIGF0dHJpYnV0ZSAnY2RrLWZvY3VzLWluaXRpYWwnLCB1c2UgJ2Nka0ZvY3VzSW5pdGlhbCcgaW5zdGVhZC4gVGhlIGRlcHJlY2F0ZWQgYXR0cmlidXRlIHdpbGwgYmUgcmVtb3ZlZCBpbiA4LjAuMCIsdCksInVuZGVmaW5lZCIhPXR5cGVvZiBuZ0Rldk1vZGUmJiFuZ0Rldk1vZGV8fHRoaXMuX2NoZWNrZXIuaXNGb2N1c2FibGUodCl8fGNvbnNvbGUud2FybigiRWxlbWVudCBtYXRjaGluZyAnW2Nka0ZvY3VzSW5pdGlhbF0nIGlzIG5vdCBmb2N1c2FibGUuIix0KSwhdGhpcy5fY2hlY2tlci5pc0ZvY3VzYWJsZSh0KSl7Y29uc3QgZT10aGlzLl9nZXRGaXJzdFRhYmJhYmxlRWxlbWVudCh0KTtyZXR1cm4gbnVsbD09ZXx8ZS5mb2N1cygpLCEhZX1yZXR1cm4gdC5mb2N1cygpLCEwfXJldHVybiB0aGlzLmZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnQoKX1mb2N1c0ZpcnN0VGFiYmFibGVFbGVtZW50KCl7Y29uc3QgdD10aGlzLl9nZXRSZWdpb25Cb3VuZGFyeSgic3RhcnQiKTtyZXR1cm4gdCYmdC5mb2N1cygpLCEhdH1mb2N1c0xhc3RUYWJiYWJsZUVsZW1lbnQoKXtjb25zdCB0PXRoaXMuX2dldFJlZ2lvbkJvdW5kYXJ5KCJlbmQiKTtyZXR1cm4gdCYmdC5mb2N1cygpLCEhdH1oYXNBdHRhY2hlZCgpe3JldHVybiB0aGlzLl9oYXNBdHRhY2hlZH1fZ2V0Rmlyc3RUYWJiYWJsZUVsZW1lbnQodCl7aWYodGhpcy5fY2hlY2tlci5pc0ZvY3VzYWJsZSh0KSYmdGhpcy5fY2hlY2tlci5pc1RhYmJhYmxlKHQpKXJldHVybiB0O2xldCBlPXQuY2hpbGRyZW58fHQuY2hpbGROb2Rlcztmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyl7bGV0IG49ZVt0XS5ub2RlVHlwZT09PXRoaXMuX2RvY3VtZW50LkVMRU1FTlRfTk9ERT90aGlzLl9nZXRGaXJzdFRhYmJhYmxlRWxlbWVudChlW3RdKTpudWxsO2lmKG4pcmV0dXJuIG59cmV0dXJuIG51bGx9X2dldExhc3RUYWJiYWJsZUVsZW1lbnQodCl7aWYodGhpcy5fY2hlY2tlci5pc0ZvY3VzYWJsZSh0KSYmdGhpcy5fY2hlY2tlci5pc1RhYmJhYmxlKHQpKXJldHVybiB0O2xldCBlPXQuY2hpbGRyZW58fHQuY2hpbGROb2Rlcztmb3IobGV0IHQ9ZS5sZW5ndGgtMTt0Pj0wO3QtLSl7bGV0IG49ZVt0XS5ub2RlVHlwZT09PXRoaXMuX2RvY3VtZW50LkVMRU1FTlRfTk9ERT90aGlzLl9nZXRMYXN0VGFiYmFibGVFbGVtZW50KGVbdF0pOm51bGw7aWYobilyZXR1cm4gbn1yZXR1cm4gbnVsbH1fY3JlYXRlQW5jaG9yKCl7Y29uc3QgdD10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gdGhpcy5fdG9nZ2xlQW5jaG9yVGFiSW5kZXgodGhpcy5fZW5hYmxlZCx0KSx0LmNsYXNzTGlzdC5hZGQoImNkay12aXN1YWxseS1oaWRkZW4iKSx0LmNsYXNzTGlzdC5hZGQoImNkay1mb2N1cy10cmFwLWFuY2hvciIpLHQuc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsInRydWUiKSx0fV90b2dnbGVBbmNob3JUYWJJbmRleCh0LGUpe3Q/ZS5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiMCIpOmUucmVtb3ZlQXR0cmlidXRlKCJ0YWJpbmRleCIpfXRvZ2dsZUFuY2hvcnModCl7dGhpcy5fc3RhcnRBbmNob3ImJnRoaXMuX2VuZEFuY2hvciYmKHRoaXMuX3RvZ2dsZUFuY2hvclRhYkluZGV4KHQsdGhpcy5fc3RhcnRBbmNob3IpLHRoaXMuX3RvZ2dsZUFuY2hvclRhYkluZGV4KHQsdGhpcy5fZW5kQW5jaG9yKSl9X2V4ZWN1dGVPblN0YWJsZSh0KXt0aGlzLl9uZ1pvbmUuaXNTdGFibGU/dCgpOnRoaXMuX25nWm9uZS5vblN0YWJsZS5waXBlKE5lKDEpKS5zdWJzY3JpYmUodCl9fWNsYXNzIFlJe2NvbnN0cnVjdG9yKHQsZSxuKXt0aGlzLl9jaGVja2VyPXQsdGhpcy5fbmdab25lPWUsdGhpcy5fZG9jdW1lbnQ9bn1jcmVhdGUodCxlPSExKXtyZXR1cm4gbmV3IEdJKHQsdGhpcy5fY2hlY2tlcix0aGlzLl9uZ1pvbmUsdGhpcy5fZG9jdW1lbnQsZSl9fVlJLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxZSSkodXMoakkpLHVzKHRDKSx1cyhVQykpfSxZSS7JtXByb3Y9bG8oe2ZhY3Rvcnk6ZnVuY3Rpb24gdCgpe3JldHVybiBuZXcgWUkodXMoakkpLHVzKHRDKSx1cyhVQykpfSx0b2tlbjpZSSxwcm92aWRlZEluOiJyb290In0pLFlJLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6akl9LHt0eXBlOnRDfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbVUNdfV19XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFlJLFt7dHlwZTpKbSxhcmdzOlt7cHJvdmlkZWRJbjoicm9vdCJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpqSX0se3R5cGU6dEN9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltVQ119XX1dfSksbnVsbCk7Y2xhc3MgcUl7Y29uc3RydWN0b3IodCxlLG4pe3RoaXMuX2VsZW1lbnRSZWY9dCx0aGlzLl9mb2N1c1RyYXBGYWN0b3J5PWUsdGhpcy5fcHJldmlvdXNseUZvY3VzZWRFbGVtZW50PW51bGwsdGhpcy5fZG9jdW1lbnQ9bix0aGlzLmZvY3VzVHJhcD10aGlzLl9mb2N1c1RyYXBGYWN0b3J5LmNyZWF0ZSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsITApfWdldCBlbmFibGVkKCl7cmV0dXJuIHRoaXMuZm9jdXNUcmFwLmVuYWJsZWR9c2V0IGVuYWJsZWQodCl7dGhpcy5mb2N1c1RyYXAuZW5hYmxlZD1ySSh0KX1nZXQgYXV0b0NhcHR1cmUoKXtyZXR1cm4gdGhpcy5fYXV0b0NhcHR1cmV9c2V0IGF1dG9DYXB0dXJlKHQpe3RoaXMuX2F1dG9DYXB0dXJlPXJJKHQpfW5nT25EZXN0cm95KCl7dGhpcy5mb2N1c1RyYXAuZGVzdHJveSgpLHRoaXMuX3ByZXZpb3VzbHlGb2N1c2VkRWxlbWVudCYmKHRoaXMuX3ByZXZpb3VzbHlGb2N1c2VkRWxlbWVudC5mb2N1cygpLHRoaXMuX3ByZXZpb3VzbHlGb2N1c2VkRWxlbWVudD1udWxsKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLmZvY3VzVHJhcC5hdHRhY2hBbmNob3JzKCksdGhpcy5hdXRvQ2FwdHVyZSYmdGhpcy5fY2FwdHVyZUZvY3VzKCl9bmdEb0NoZWNrKCl7dGhpcy5mb2N1c1RyYXAuaGFzQXR0YWNoZWQoKXx8dGhpcy5mb2N1c1RyYXAuYXR0YWNoQW5jaG9ycygpfW5nT25DaGFuZ2VzKHQpe2NvbnN0IGU9dC5hdXRvQ2FwdHVyZTtlJiYhZS5maXJzdENoYW5nZSYmdGhpcy5hdXRvQ2FwdHVyZSYmdGhpcy5mb2N1c1RyYXAuaGFzQXR0YWNoZWQoKSYmdGhpcy5fY2FwdHVyZUZvY3VzKCl9X2NhcHR1cmVGb2N1cygpe3RoaXMuX3ByZXZpb3VzbHlGb2N1c2VkRWxlbWVudD10aGlzLl9kb2N1bWVudC5hY3RpdmVFbGVtZW50LHRoaXMuZm9jdXNUcmFwLmZvY3VzSW5pdGlhbEVsZW1lbnRXaGVuUmVhZHkoKX19cUkuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHFJKShNdShjaCksTXUoWUkpLE11KFVDKSl9LHFJLsm1ZGlyPUpvKHt0eXBlOnFJLHNlbGVjdG9yczpbWyIiLCJjZGtUcmFwRm9jdXMiLCIiXV0saW5wdXRzOntlbmFibGVkOlsiY2RrVHJhcEZvY3VzIiwiZW5hYmxlZCJdLGF1dG9DYXB0dXJlOlsiY2RrVHJhcEZvY3VzQXV0b0NhcHR1cmUiLCJhdXRvQ2FwdHVyZSJdfSxleHBvcnRBczpbImNka1RyYXBGb2N1cyJdLGZlYXR1cmVzOltTaV19KSxxSS5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmNofSx7dHlwZTpZSX0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W1VDXX1dfV0scUkucHJvcERlY29yYXRvcnM9e2VuYWJsZWQ6W3t0eXBlOnlfLGFyZ3M6WyJjZGtUcmFwRm9jdXMiXX1dLGF1dG9DYXB0dXJlOlt7dHlwZTp5XyxhcmdzOlsiY2RrVHJhcEZvY3VzQXV0b0NhcHR1cmUiXX1dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHFJLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6IltjZGtUcmFwRm9jdXNdIixleHBvcnRBczoiY2RrVHJhcEZvY3VzIn1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmNofSx7dHlwZTpZSX0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W1VDXX1dfV19KSx7ZW5hYmxlZDpbe3R5cGU6eV8sYXJnczpbImNka1RyYXBGb2N1cyJdfV0sYXV0b0NhcHR1cmU6W3t0eXBlOnlfLGFyZ3M6WyJjZGtUcmFwRm9jdXNBdXRvQ2FwdHVyZSJdfV19KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIFpJIGV4dGVuZHMgR0l7Y29uc3RydWN0b3IodCxlLG4sbyxpLGEscil7c3VwZXIodCxlLG4sbyxyLmRlZmVyKSx0aGlzLl9mb2N1c1RyYXBNYW5hZ2VyPWksdGhpcy5faW5lcnRTdHJhdGVneT1hLHRoaXMuX2ZvY3VzVHJhcE1hbmFnZXIucmVnaXN0ZXIodGhpcyl9Z2V0IGVuYWJsZWQoKXtyZXR1cm4gdGhpcy5fZW5hYmxlZH1zZXQgZW5hYmxlZCh0KXt0aGlzLl9lbmFibGVkPXQsdGhpcy5fZW5hYmxlZD90aGlzLl9mb2N1c1RyYXBNYW5hZ2VyLnJlZ2lzdGVyKHRoaXMpOnRoaXMuX2ZvY3VzVHJhcE1hbmFnZXIuZGVyZWdpc3Rlcih0aGlzKX1kZXN0cm95KCl7dGhpcy5fZm9jdXNUcmFwTWFuYWdlci5kZXJlZ2lzdGVyKHRoaXMpLHN1cGVyLmRlc3Ryb3koKX1fZW5hYmxlKCl7dGhpcy5faW5lcnRTdHJhdGVneS5wcmV2ZW50Rm9jdXModGhpcyksdGhpcy50b2dnbGVBbmNob3JzKCEwKX1fZGlzYWJsZSgpe3RoaXMuX2luZXJ0U3RyYXRlZ3kuYWxsb3dGb2N1cyh0aGlzKSx0aGlzLnRvZ2dsZUFuY2hvcnMoITEpfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY29uc3QgWEk9InVuZGVmaW5lZCIhPXR5cGVvZiBFbGVtZW50JiYhIUVsZW1lbnQucHJvdG90eXBlLmNsb3Nlc3Q7ZnVuY3Rpb24gS0kodCxlKXtyZXR1cm4gdC5tYXRjaGVzP3QubWF0Y2hlcyhlKTp0Lm1zTWF0Y2hlc1NlbGVjdG9yKGUpfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jbGFzcyBKSXtjb25zdHJ1Y3Rvcigpe3RoaXMuX2xpc3RlbmVyPW51bGx9cHJldmVudEZvY3VzKHQpe3RoaXMuX2xpc3RlbmVyJiZ0Ll9kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5fbGlzdGVuZXIsITApLHRoaXMuX2xpc3RlbmVyPWU9PnRoaXMuX3RyYXBGb2N1cyh0LGUpLHQuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKCk9Pnt0Ll9kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5fbGlzdGVuZXIsITApfSkpfWFsbG93Rm9jdXModCl7dGhpcy5fbGlzdGVuZXImJih0Ll9kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5fbGlzdGVuZXIsITApLHRoaXMuX2xpc3RlbmVyPW51bGwpfV90cmFwRm9jdXModCxlKXtjb25zdCBuPWUudGFyZ2V0LG89dC5fZWxlbWVudDtvLmNvbnRhaW5zKG4pfHxudWxsIT09KGZ1bmN0aW9uIGkodCxlKXtpZighKHQgaW5zdGFuY2VvZiBOb2RlKSlyZXR1cm4gbnVsbDtsZXQgbj10O2Zvcig7bnVsbCE9biYmIShuIGluc3RhbmNlb2YgRWxlbWVudCk7KW49bi5wYXJlbnROb2RlO3JldHVybiBuJiYoWEk/bi5jbG9zZXN0KGUpOihmdW5jdGlvbiBvKHQsZSl7bGV0IG49dDtmb3IoO251bGwhPW4mJiEobiBpbnN0YW5jZW9mIEVsZW1lbnQmJktJKG4sZSkpOyluPW4ucGFyZW50Tm9kZTtyZXR1cm4gbnx8bnVsbH0pKG4sZSkpfSkobiwiZGl2LmNkay1vdmVybGF5LXBhbmUiKXx8c2V0VGltZW91dCgoKCk9Pnt0LmVuYWJsZWQmJiFvLmNvbnRhaW5zKHQuX2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQpJiZ0LmZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnQoKX0pKX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NsYXNzIFFJe2NvbnN0cnVjdG9yKCl7dGhpcy5kZWZlcj0hMX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NvbnN0ICRJPW5ldyBOcigiRk9DVVNfVFJBUF9JTkVSVF9TVFJBVEVHWSIpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jbGFzcyB0entjb25zdHJ1Y3Rvcigpe3RoaXMuX2ZvY3VzVHJhcFN0YWNrPVtdfXJlZ2lzdGVyKHQpe3RoaXMuX2ZvY3VzVHJhcFN0YWNrPXRoaXMuX2ZvY3VzVHJhcFN0YWNrLmZpbHRlcigoZT0+ZSE9PXQpKTtsZXQgZT10aGlzLl9mb2N1c1RyYXBTdGFjaztlLmxlbmd0aCYmZVtlLmxlbmd0aC0xXS5fZGlzYWJsZSgpLGUucHVzaCh0KSx0Ll9lbmFibGUoKX1kZXJlZ2lzdGVyKHQpe3QuX2Rpc2FibGUoKTtjb25zdCBlPXRoaXMuX2ZvY3VzVHJhcFN0YWNrLG49ZS5pbmRleE9mKHQpOy0xIT09biYmKGUuc3BsaWNlKG4sMSksZS5sZW5ndGgmJmVbZS5sZW5ndGgtMV0uX2VuYWJsZSgpKX19dHouybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHR6KX0sdHouybVwcm92PWxvKHtmYWN0b3J5OmZ1bmN0aW9uIHQoKXtyZXR1cm4gbmV3IHR6fSx0b2tlbjp0eixwcm92aWRlZEluOiJyb290In0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIodHosW3t0eXBlOkptLGFyZ3M6W3twcm92aWRlZEluOiJyb290In1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW119KSxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIGV6e2NvbnN0cnVjdG9yKHQsZSxuLG8saSl7dGhpcy5fY2hlY2tlcj10LHRoaXMuX25nWm9uZT1lLHRoaXMuX2ZvY3VzVHJhcE1hbmFnZXI9bix0aGlzLl9kb2N1bWVudD1vLHRoaXMuX2luZXJ0U3RyYXRlZ3k9aXx8bmV3IEpJfWNyZWF0ZSh0LGU9bmV3IFFJKXtsZXQgbjtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBlPyhuPW5ldyBRSSxuLmRlZmVyPWUpOm49ZSxuZXcgWkkodCx0aGlzLl9jaGVja2VyLHRoaXMuX25nWm9uZSx0aGlzLl9kb2N1bWVudCx0aGlzLl9mb2N1c1RyYXBNYW5hZ2VyLHRoaXMuX2luZXJ0U3RyYXRlZ3ksbil9fWV6Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxleikodXMoakkpLHVzKHRDKSx1cyh0eiksdXMoVUMpLHVzKCRJLDgpKX0sZXouybVwcm92PWxvKHtmYWN0b3J5OmZ1bmN0aW9uIHQoKXtyZXR1cm4gbmV3IGV6KHVzKGpJKSx1cyh0QyksdXModHopLHVzKFVDKSx1cygkSSw4KSl9LHRva2VuOmV6LHByb3ZpZGVkSW46InJvb3QifSksZXouY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpqSX0se3R5cGU6dEN9LHt0eXBlOnR6fSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbVUNdfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbJEldfV19XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGV6LFt7dHlwZTpKbSxhcmdzOlt7cHJvdmlkZWRJbjoicm9vdCJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpqSX0se3R5cGU6dEN9LHt0eXBlOnR6fSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbVUNdfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbJEldfV19XX0pLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3Qgbno9bmV3IE5yKCJsaXZlQW5ub3VuY2VyRWxlbWVudCIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24gb3ooKXtyZXR1cm4gbnVsbH19KSxpej1uZXcgTnIoIkxJVkVfQU5OT1VOQ0VSX0RFRkFVTFRfT1BUSU9OUyIpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3MgYXp7Y29uc3RydWN0b3IodCxlLG4sbyl7dGhpcy5fbmdab25lPWUsdGhpcy5fZGVmYXVsdE9wdGlvbnM9byx0aGlzLl9kb2N1bWVudD1uLHRoaXMuX2xpdmVFbGVtZW50PXR8fHRoaXMuX2NyZWF0ZUxpdmVFbGVtZW50KCl9YW5ub3VuY2UodCwuLi5lKXtjb25zdCBuPXRoaXMuX2RlZmF1bHRPcHRpb25zO2xldCBvLGk7cmV0dXJuIDE9PT1lLmxlbmd0aCYmIm51bWJlciI9PXR5cGVvZiBlWzBdP2k9ZVswXTpbbyxpXT1lLHRoaXMuY2xlYXIoKSxjbGVhclRpbWVvdXQodGhpcy5fcHJldmlvdXNUaW1lb3V0KSxvfHwobz1uJiZuLnBvbGl0ZW5lc3M/bi5wb2xpdGVuZXNzOiJwb2xpdGUiKSxudWxsPT1pJiZuJiYoaT1uLmR1cmF0aW9uKSx0aGlzLl9saXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoImFyaWEtbGl2ZSIsbyksdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgoKT0+bmV3IFByb21pc2UoKGU9PntjbGVhclRpbWVvdXQodGhpcy5fcHJldmlvdXNUaW1lb3V0KSx0aGlzLl9wcmV2aW91c1RpbWVvdXQ9c2V0VGltZW91dCgoKCk9Pnt0aGlzLl9saXZlRWxlbWVudC50ZXh0Q29udGVudD10LGUoKSwibnVtYmVyIj09dHlwZW9mIGkmJih0aGlzLl9wcmV2aW91c1RpbWVvdXQ9c2V0VGltZW91dCgoKCk9PnRoaXMuY2xlYXIoKSksaSkpfSksMTAwKX0pKSkpfWNsZWFyKCl7dGhpcy5fbGl2ZUVsZW1lbnQmJih0aGlzLl9saXZlRWxlbWVudC50ZXh0Q29udGVudD0iIil9bmdPbkRlc3Ryb3koKXtjbGVhclRpbWVvdXQodGhpcy5fcHJldmlvdXNUaW1lb3V0KSx0aGlzLl9saXZlRWxlbWVudCYmdGhpcy5fbGl2ZUVsZW1lbnQucGFyZW50Tm9kZSYmKHRoaXMuX2xpdmVFbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5fbGl2ZUVsZW1lbnQpLHRoaXMuX2xpdmVFbGVtZW50PW51bGwpfV9jcmVhdGVMaXZlRWxlbWVudCgpe2NvbnN0IHQ9ImNkay1saXZlLWFubm91bmNlci1lbGVtZW50IixlPXRoaXMuX2RvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUodCksbj10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyllW3RdLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZVt0XSk7cmV0dXJuIG4uY2xhc3NMaXN0LmFkZCh0KSxuLmNsYXNzTGlzdC5hZGQoImNkay12aXN1YWxseS1oaWRkZW4iKSxuLnNldEF0dHJpYnV0ZSgiYXJpYS1hdG9taWMiLCJ0cnVlIiksbi5zZXRBdHRyaWJ1dGUoImFyaWEtbGl2ZSIsInBvbGl0ZSIpLHRoaXMuX2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobiksbn19YXouybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGF6KSh1cyhueiw4KSx1cyh0QyksdXMoVUMpLHVzKGl6LDgpKX0sYXouybVwcm92PWxvKHtmYWN0b3J5OmZ1bmN0aW9uIHQoKXtyZXR1cm4gbmV3IGF6KHVzKG56LDgpLHVzKHRDKSx1cyhVQyksdXMoaXosOCkpfSx0b2tlbjpheixwcm92aWRlZEluOiJyb290In0pLGF6LmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltuel19XX0se3R5cGU6dEN9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltVQ119XX0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltpel19XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoYXosW3t0eXBlOkptLGFyZ3M6W3twcm92aWRlZEluOiJyb290In1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbbnpdfV19LHt0eXBlOnRDfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbVUNdfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbaXpdfV19XX0pLG51bGwpO2NsYXNzIHJ6e2NvbnN0cnVjdG9yKHQsZSxuLG8pe3RoaXMuX2VsZW1lbnRSZWY9dCx0aGlzLl9saXZlQW5ub3VuY2VyPWUsdGhpcy5fY29udGVudE9ic2VydmVyPW4sdGhpcy5fbmdab25lPW8sdGhpcy5fcG9saXRlbmVzcz0icG9saXRlIn1nZXQgcG9saXRlbmVzcygpe3JldHVybiB0aGlzLl9wb2xpdGVuZXNzfXNldCBwb2xpdGVuZXNzKHQpe3RoaXMuX3BvbGl0ZW5lc3M9Im9mZiI9PT10fHwiYXNzZXJ0aXZlIj09PXQ/dDoicG9saXRlIiwib2ZmIj09PXRoaXMuX3BvbGl0ZW5lc3M/dGhpcy5fc3Vic2NyaXB0aW9uJiYodGhpcy5fc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fc3Vic2NyaXB0aW9uPW51bGwpOnRoaXMuX3N1YnNjcmlwdGlvbnx8KHRoaXMuX3N1YnNjcmlwdGlvbj10aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCgpPT50aGlzLl9jb250ZW50T2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLl9lbGVtZW50UmVmKS5zdWJzY3JpYmUoKCgpPT57Y29uc3QgdD10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudGV4dENvbnRlbnQ7dCE9PXRoaXMuX3ByZXZpb3VzQW5ub3VuY2VkVGV4dCYmKHRoaXMuX2xpdmVBbm5vdW5jZXIuYW5ub3VuY2UodCx0aGlzLl9wb2xpdGVuZXNzKSx0aGlzLl9wcmV2aW91c0Fubm91bmNlZFRleHQ9dCl9KSkpKSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9zdWJzY3JpcHRpb24mJnRoaXMuX3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmZ1bmN0aW9uIHN6KHQpe3JldHVybiAwPT09dC5idXR0b25zfWZ1bmN0aW9uIGx6KHQpe2NvbnN0IGU9dC50b3VjaGVzJiZ0LnRvdWNoZXNbMF18fHQuY2hhbmdlZFRvdWNoZXMmJnQuY2hhbmdlZFRvdWNoZXNbMF07cmV0dXJuISghZXx8LTEhPT1lLmlkZW50aWZpZXJ8fG51bGwhPWUucmFkaXVzWCYmMSE9PWUucmFkaXVzWHx8bnVsbCE9ZS5yYWRpdXNZJiYxIT09ZS5yYWRpdXNZKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovcnouybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHJ6KShNdShjaCksTXUoYXopLE11KGtJKSxNdSh0QykpfSxyei7JtWRpcj1Kbyh7dHlwZTpyeixzZWxlY3RvcnM6W1siIiwiY2RrQXJpYUxpdmUiLCIiXV0saW5wdXRzOntwb2xpdGVuZXNzOlsiY2RrQXJpYUxpdmUiLCJwb2xpdGVuZXNzIl19LGV4cG9ydEFzOlsiY2RrQXJpYUxpdmUiXX0pLHJ6LmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6Y2h9LHt0eXBlOmF6fSx7dHlwZTprSX0se3R5cGU6dEN9XSxyei5wcm9wRGVjb3JhdG9ycz17cG9saXRlbmVzczpbe3R5cGU6eV8sYXJnczpbImNka0FyaWFMaXZlIl19XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihyeixbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJbY2RrQXJpYUxpdmVdIixleHBvcnRBczoiY2RrQXJpYUxpdmUifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Y2h9LHt0eXBlOmF6fSx7dHlwZTprSX0se3R5cGU6dEN9XX0pLHtwb2xpdGVuZXNzOlt7dHlwZTp5XyxhcmdzOlsiY2RrQXJpYUxpdmUiXX1dfSk7Y29uc3QgY3o9bmV3IE5yKCJjZGstZm9jdXMtbW9uaXRvci1kZWZhdWx0LW9wdGlvbnMiKSxkej12SSh7cGFzc2l2ZTohMCxjYXB0dXJlOiEwfSk7Y2xhc3MgcHp7Y29uc3RydWN0b3IodCxlLG4sbyl7dGhpcy5fbmdab25lPXQsdGhpcy5fcGxhdGZvcm09ZSx0aGlzLl9vcmlnaW49bnVsbCx0aGlzLl93aW5kb3dGb2N1c2VkPSExLHRoaXMuX2VsZW1lbnRJbmZvPW5ldyBNYXAsdGhpcy5fbW9uaXRvcmVkRWxlbWVudENvdW50PTAsdGhpcy5fcm9vdE5vZGVGb2N1c0xpc3RlbmVyQ291bnQ9bmV3IE1hcCx0aGlzLl9kb2N1bWVudEtleWRvd25MaXN0ZW5lcj0oKT0+e3RoaXMuX2xhc3RUb3VjaFRhcmdldD1udWxsLHRoaXMuX3NldE9yaWdpbkZvckN1cnJlbnRFdmVudFF1ZXVlKCJrZXlib2FyZCIpfSx0aGlzLl9kb2N1bWVudE1vdXNlZG93bkxpc3RlbmVyPXQ9PntpZighdGhpcy5fbGFzdFRvdWNoVGFyZ2V0KXtjb25zdCBlPXN6KHQpPyJrZXlib2FyZCI6Im1vdXNlIjt0aGlzLl9zZXRPcmlnaW5Gb3JDdXJyZW50RXZlbnRRdWV1ZShlKX19LHRoaXMuX2RvY3VtZW50VG91Y2hzdGFydExpc3RlbmVyPXQ9Pntseih0KT90aGlzLl9sYXN0VG91Y2hUYXJnZXR8fHRoaXMuX3NldE9yaWdpbkZvckN1cnJlbnRFdmVudFF1ZXVlKCJrZXlib2FyZCIpOihudWxsIT10aGlzLl90b3VjaFRpbWVvdXRJZCYmY2xlYXJUaW1lb3V0KHRoaXMuX3RvdWNoVGltZW91dElkKSx0aGlzLl9sYXN0VG91Y2hUYXJnZXQ9bXoodCksdGhpcy5fdG91Y2hUaW1lb3V0SWQ9c2V0VGltZW91dCgoKCk9PnRoaXMuX2xhc3RUb3VjaFRhcmdldD1udWxsKSw2NTApKX0sdGhpcy5fd2luZG93Rm9jdXNMaXN0ZW5lcj0oKT0+e3RoaXMuX3dpbmRvd0ZvY3VzZWQ9ITAsdGhpcy5fd2luZG93Rm9jdXNUaW1lb3V0SWQ9c2V0VGltZW91dCgoKCk9PnRoaXMuX3dpbmRvd0ZvY3VzZWQ9ITEpKX0sdGhpcy5fcm9vdE5vZGVGb2N1c0FuZEJsdXJMaXN0ZW5lcj10PT57Y29uc3QgZT1teih0KSxuPSJmb2N1cyI9PT10LnR5cGU/dGhpcy5fb25Gb2N1czp0aGlzLl9vbkJsdXI7Zm9yKGxldCBvPWU7bztvPW8ucGFyZW50RWxlbWVudCluLmNhbGwodGhpcyx0LG8pfSx0aGlzLl9kb2N1bWVudD1uLHRoaXMuX2RldGVjdGlvbk1vZGU9KG51bGw9PW8/dm9pZCAwOm8uZGV0ZWN0aW9uTW9kZSl8fDB9bW9uaXRvcih0LGU9ITEpe2NvbnN0IG49cEkodCk7aWYoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcnx8MSE9PW4ubm9kZVR5cGUpcmV0dXJuIFoobnVsbCk7Y29uc3Qgbz1QSShuKXx8dGhpcy5fZ2V0RG9jdW1lbnQoKSxpPXRoaXMuX2VsZW1lbnRJbmZvLmdldChuKTtpZihpKXJldHVybiBlJiYoaS5jaGVja0NoaWxkcmVuPSEwKSxpLnN1YmplY3Q7Y29uc3QgYT17Y2hlY2tDaGlsZHJlbjplLHN1YmplY3Q6bmV3IHgscm9vdE5vZGU6b307cmV0dXJuIHRoaXMuX2VsZW1lbnRJbmZvLnNldChuLGEpLHRoaXMuX3JlZ2lzdGVyR2xvYmFsTGlzdGVuZXJzKGEpLGEuc3ViamVjdH1zdG9wTW9uaXRvcmluZyh0KXtjb25zdCBlPXBJKHQpLG49dGhpcy5fZWxlbWVudEluZm8uZ2V0KGUpO24mJihuLnN1YmplY3QuY29tcGxldGUoKSx0aGlzLl9zZXRDbGFzc2VzKGUpLHRoaXMuX2VsZW1lbnRJbmZvLmRlbGV0ZShlKSx0aGlzLl9yZW1vdmVHbG9iYWxMaXN0ZW5lcnMobikpfWZvY3VzVmlhKHQsZSxuKXtjb25zdCBvPXBJKHQpO289PT10aGlzLl9nZXREb2N1bWVudCgpLmFjdGl2ZUVsZW1lbnQ/dGhpcy5fZ2V0Q2xvc2VzdEVsZW1lbnRzSW5mbyhvKS5mb3JFYWNoKCgoW3Qsbl0pPT50aGlzLl9vcmlnaW5DaGFuZ2VkKHQsZSxuKSkpOih0aGlzLl9zZXRPcmlnaW5Gb3JDdXJyZW50RXZlbnRRdWV1ZShlKSwiZnVuY3Rpb24iPT10eXBlb2Ygby5mb2N1cyYmby5mb2N1cyhuKSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9lbGVtZW50SW5mby5mb3JFYWNoKCgodCxlKT0+dGhpcy5zdG9wTW9uaXRvcmluZyhlKSkpfV9nZXREb2N1bWVudCgpe3JldHVybiB0aGlzLl9kb2N1bWVudHx8ZG9jdW1lbnR9X2dldFdpbmRvdygpe3JldHVybiB0aGlzLl9nZXREb2N1bWVudCgpLmRlZmF1bHRWaWV3fHx3aW5kb3d9X3RvZ2dsZUNsYXNzKHQsZSxuKXtuP3QuY2xhc3NMaXN0LmFkZChlKTp0LmNsYXNzTGlzdC5yZW1vdmUoZSl9X2dldEZvY3VzT3JpZ2luKHQpe3JldHVybiB0aGlzLl9vcmlnaW4/dGhpcy5fb3JpZ2luOnRoaXMuX3dpbmRvd0ZvY3VzZWQmJnRoaXMuX2xhc3RGb2N1c09yaWdpbj90aGlzLl9sYXN0Rm9jdXNPcmlnaW46dGhpcy5fd2FzQ2F1c2VkQnlUb3VjaCh0KT8idG91Y2giOiJwcm9ncmFtIn1fc2V0Q2xhc3Nlcyh0LGUpe3RoaXMuX3RvZ2dsZUNsYXNzKHQsImNkay1mb2N1c2VkIiwhIWUpLHRoaXMuX3RvZ2dsZUNsYXNzKHQsImNkay10b3VjaC1mb2N1c2VkIiwidG91Y2giPT09ZSksdGhpcy5fdG9nZ2xlQ2xhc3ModCwiY2RrLWtleWJvYXJkLWZvY3VzZWQiLCJrZXlib2FyZCI9PT1lKSx0aGlzLl90b2dnbGVDbGFzcyh0LCJjZGstbW91c2UtZm9jdXNlZCIsIm1vdXNlIj09PWUpLHRoaXMuX3RvZ2dsZUNsYXNzKHQsImNkay1wcm9ncmFtLWZvY3VzZWQiLCJwcm9ncmFtIj09PWUpfV9zZXRPcmlnaW5Gb3JDdXJyZW50RXZlbnRRdWV1ZSh0KXt0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCgpPT57dGhpcy5fb3JpZ2luPXQsMD09PXRoaXMuX2RldGVjdGlvbk1vZGUmJih0aGlzLl9vcmlnaW5UaW1lb3V0SWQ9c2V0VGltZW91dCgoKCk9PnRoaXMuX29yaWdpbj1udWxsKSwxKSl9KSl9X3dhc0NhdXNlZEJ5VG91Y2godCl7Y29uc3QgZT1teih0KTtyZXR1cm4gdGhpcy5fbGFzdFRvdWNoVGFyZ2V0IGluc3RhbmNlb2YgTm9kZSYmZSBpbnN0YW5jZW9mIE5vZGUmJihlPT09dGhpcy5fbGFzdFRvdWNoVGFyZ2V0fHxlLmNvbnRhaW5zKHRoaXMuX2xhc3RUb3VjaFRhcmdldCkpfV9vbkZvY3VzKHQsZSl7Y29uc3Qgbj10aGlzLl9lbGVtZW50SW5mby5nZXQoZSk7biYmKG4uY2hlY2tDaGlsZHJlbnx8ZT09PW16KHQpKSYmdGhpcy5fb3JpZ2luQ2hhbmdlZChlLHRoaXMuX2dldEZvY3VzT3JpZ2luKHQpLG4pfV9vbkJsdXIodCxlKXtjb25zdCBuPXRoaXMuX2VsZW1lbnRJbmZvLmdldChlKTshbnx8bi5jaGVja0NoaWxkcmVuJiZ0LnJlbGF0ZWRUYXJnZXQgaW5zdGFuY2VvZiBOb2RlJiZlLmNvbnRhaW5zKHQucmVsYXRlZFRhcmdldCl8fCh0aGlzLl9zZXRDbGFzc2VzKGUpLHRoaXMuX2VtaXRPcmlnaW4obi5zdWJqZWN0LG51bGwpKX1fZW1pdE9yaWdpbih0LGUpe3RoaXMuX25nWm9uZS5ydW4oKCgpPT50Lm5leHQoZSkpKX1fcmVnaXN0ZXJHbG9iYWxMaXN0ZW5lcnModCl7aWYoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm47Y29uc3QgZT10LnJvb3ROb2RlLG49dGhpcy5fcm9vdE5vZGVGb2N1c0xpc3RlbmVyQ291bnQuZ2V0KGUpfHwwO258fHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKCk9PntlLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLl9yb290Tm9kZUZvY3VzQW5kQmx1ckxpc3RlbmVyLGR6KSxlLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLHRoaXMuX3Jvb3ROb2RlRm9jdXNBbmRCbHVyTGlzdGVuZXIsZHopfSkpLHRoaXMuX3Jvb3ROb2RlRm9jdXNMaXN0ZW5lckNvdW50LnNldChlLG4rMSksMT09Kyt0aGlzLl9tb25pdG9yZWRFbGVtZW50Q291bnQmJnRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKCk9Pntjb25zdCB0PXRoaXMuX2dldERvY3VtZW50KCksZT10aGlzLl9nZXRXaW5kb3coKTt0LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLHRoaXMuX2RvY3VtZW50S2V5ZG93bkxpc3RlbmVyLGR6KSx0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsdGhpcy5fZG9jdW1lbnRNb3VzZWRvd25MaXN0ZW5lcixkeiksdC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0Iix0aGlzLl9kb2N1bWVudFRvdWNoc3RhcnRMaXN0ZW5lcixkeiksZS5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5fd2luZG93Rm9jdXNMaXN0ZW5lcil9KSl9X3JlbW92ZUdsb2JhbExpc3RlbmVycyh0KXtjb25zdCBlPXQucm9vdE5vZGU7aWYodGhpcy5fcm9vdE5vZGVGb2N1c0xpc3RlbmVyQ291bnQuaGFzKGUpKXtjb25zdCB0PXRoaXMuX3Jvb3ROb2RlRm9jdXNMaXN0ZW5lckNvdW50LmdldChlKTt0PjE/dGhpcy5fcm9vdE5vZGVGb2N1c0xpc3RlbmVyQ291bnQuc2V0KGUsdC0xKTooZS5yZW1vdmVFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5fcm9vdE5vZGVGb2N1c0FuZEJsdXJMaXN0ZW5lcixkeiksZS5yZW1vdmVFdmVudExpc3RlbmVyKCJibHVyIix0aGlzLl9yb290Tm9kZUZvY3VzQW5kQmx1ckxpc3RlbmVyLGR6KSx0aGlzLl9yb290Tm9kZUZvY3VzTGlzdGVuZXJDb3VudC5kZWxldGUoZSkpfWlmKCEtLXRoaXMuX21vbml0b3JlZEVsZW1lbnRDb3VudCl7Y29uc3QgdD10aGlzLl9nZXREb2N1bWVudCgpLGU9dGhpcy5fZ2V0V2luZG93KCk7dC5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLl9kb2N1bWVudEtleWRvd25MaXN0ZW5lcixkeiksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHRoaXMuX2RvY3VtZW50TW91c2Vkb3duTGlzdGVuZXIsZHopLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdGhpcy5fZG9jdW1lbnRUb3VjaHN0YXJ0TGlzdGVuZXIsZHopLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuX3dpbmRvd0ZvY3VzTGlzdGVuZXIpLGNsZWFyVGltZW91dCh0aGlzLl93aW5kb3dGb2N1c1RpbWVvdXRJZCksY2xlYXJUaW1lb3V0KHRoaXMuX3RvdWNoVGltZW91dElkKSxjbGVhclRpbWVvdXQodGhpcy5fb3JpZ2luVGltZW91dElkKX19X29yaWdpbkNoYW5nZWQodCxlLG4pe3RoaXMuX3NldENsYXNzZXModCxlKSx0aGlzLl9lbWl0T3JpZ2luKG4uc3ViamVjdCxlKSx0aGlzLl9sYXN0Rm9jdXNPcmlnaW49ZX1fZ2V0Q2xvc2VzdEVsZW1lbnRzSW5mbyh0KXtjb25zdCBlPVtdO3JldHVybiB0aGlzLl9lbGVtZW50SW5mby5mb3JFYWNoKCgobixvKT0+eyhvPT09dHx8bi5jaGVja0NoaWxkcmVuJiZvLmNvbnRhaW5zKHQpKSYmZS5wdXNoKFtvLG5dKX0pKSxlfX1mdW5jdGlvbiBteih0KXtyZXR1cm4gdC5jb21wb3NlZFBhdGg/dC5jb21wb3NlZFBhdGgoKVswXTp0LnRhcmdldH1wei7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8cHopKHVzKHRDKSx1cyhmSSksdXMoVUMsOCksdXMoY3osOCkpfSxwei7JtXByb3Y9bG8oe2ZhY3Rvcnk6ZnVuY3Rpb24gdCgpe3JldHVybiBuZXcgcHoodXModEMpLHVzKGZJKSx1cyhVQyw4KSx1cyhjeiw4KSl9LHRva2VuOnB6LHByb3ZpZGVkSW46InJvb3QifSkscHouY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTp0Q30se3R5cGU6Zkl9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbVUNdfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbY3pdfV19XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHB6LFt7dHlwZTpKbSxhcmdzOlt7cHJvdmlkZWRJbjoicm9vdCJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTp0Q30se3R5cGU6Zkl9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbVUNdfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbY3pdfV19XX0pLG51bGwpO2NsYXNzIHV6e2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5fZWxlbWVudFJlZj10LHRoaXMuX2ZvY3VzTW9uaXRvcj1lLHRoaXMuY2RrRm9jdXNDaGFuZ2U9bmV3IEFifW5nQWZ0ZXJWaWV3SW5pdCgpe2NvbnN0IHQ9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O3RoaXMuX21vbml0b3JTdWJzY3JpcHRpb249dGhpcy5fZm9jdXNNb25pdG9yLm1vbml0b3IodCwxPT09dC5ub2RlVHlwZSYmdC5oYXNBdHRyaWJ1dGUoImNka01vbml0b3JTdWJ0cmVlRm9jdXMiKSkuc3Vic2NyaWJlKCh0PT50aGlzLmNka0ZvY3VzQ2hhbmdlLmVtaXQodCkpKX1uZ09uRGVzdHJveSgpe3RoaXMuX2ZvY3VzTW9uaXRvci5zdG9wTW9uaXRvcmluZyh0aGlzLl9lbGVtZW50UmVmKSx0aGlzLl9tb25pdG9yU3Vic2NyaXB0aW9uJiZ0aGlzLl9tb25pdG9yU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9fXV6Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHx1eikoTXUoY2gpLE11KHB6KSl9LHV6Lsm1ZGlyPUpvKHt0eXBlOnV6LHNlbGVjdG9yczpbWyIiLCJjZGtNb25pdG9yRWxlbWVudEZvY3VzIiwiIl0sWyIiLCJjZGtNb25pdG9yU3VidHJlZUZvY3VzIiwiIl1dLG91dHB1dHM6e2Nka0ZvY3VzQ2hhbmdlOiJjZGtGb2N1c0NoYW5nZSJ9fSksdXouY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpjaH0se3R5cGU6cHp9XSx1ei5wcm9wRGVjb3JhdG9ycz17Y2RrRm9jdXNDaGFuZ2U6W3t0eXBlOl9ffV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIodXosW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoiW2Nka01vbml0b3JFbGVtZW50Rm9jdXNdLCBbY2RrTW9uaXRvclN1YnRyZWVGb2N1c10ifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Y2h9LHt0eXBlOnB6fV19KSx7Y2RrRm9jdXNDaGFuZ2U6W3t0eXBlOl9ffV19KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IGZ6PSJjZGstaGlnaC1jb250cmFzdC1ibGFjay1vbi13aGl0ZSIsZ3o9ImNkay1oaWdoLWNvbnRyYXN0LXdoaXRlLW9uLWJsYWNrIixoej0iY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIjtjbGFzcyBientjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuX3BsYXRmb3JtPXQsdGhpcy5fZG9jdW1lbnQ9ZX1nZXRIaWdoQ29udHJhc3RNb2RlKCl7aWYoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm4gMDtjb25zdCB0PXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3Quc3R5bGUuYmFja2dyb3VuZENvbG9yPSJyZ2IoMSwyLDMpIix0LnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsdGhpcy5fZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0KTtjb25zdCBlPXRoaXMuX2RvY3VtZW50LmRlZmF1bHRWaWV3fHx3aW5kb3csbj1lJiZlLmdldENvbXB1dGVkU3R5bGU/ZS5nZXRDb21wdXRlZFN0eWxlKHQpOm51bGwsbz0obiYmbi5iYWNrZ3JvdW5kQ29sb3J8fCIiKS5yZXBsYWNlKC8gL2csIiIpO3N3aXRjaCh0aGlzLl9kb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHQpLG8pe2Nhc2UicmdiKDAsMCwwKSI6cmV0dXJuIDI7Y2FzZSJyZ2IoMjU1LDI1NSwyNTUpIjpyZXR1cm4gMX1yZXR1cm4gMH1fYXBwbHlCb2R5SGlnaENvbnRyYXN0TW9kZUNzc0NsYXNzZXMoKXtpZih0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXImJnRoaXMuX2RvY3VtZW50LmJvZHkpe2NvbnN0IHQ9dGhpcy5fZG9jdW1lbnQuYm9keS5jbGFzc0xpc3Q7dC5yZW1vdmUoaHopLHQucmVtb3ZlKGZ6KSx0LnJlbW92ZShneik7Y29uc3QgZT10aGlzLmdldEhpZ2hDb250cmFzdE1vZGUoKTsxPT09ZT8odC5hZGQoaHopLHQuYWRkKGZ6KSk6Mj09PWUmJih0LmFkZChoeiksdC5hZGQoZ3opKX19fWJ6Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxieikodXMoZkkpLHVzKFVDKSl9LGJ6Lsm1cHJvdj1sbyh7ZmFjdG9yeTpmdW5jdGlvbiB0KCl7cmV0dXJuIG5ldyBieih1cyhmSSksdXMoVUMpKX0sdG9rZW46YnoscHJvdmlkZWRJbjoicm9vdCJ9KSxiei5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmZJfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbVUNdfV19XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGJ6LFt7dHlwZTpKbSxhcmdzOlt7cHJvdmlkZWRJbjoicm9vdCJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpmSX0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W1VDXX1dfV19KSxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIHl6e2NvbnN0cnVjdG9yKHQpe3QuX2FwcGx5Qm9keUhpZ2hDb250cmFzdE1vZGVDc3NDbGFzc2VzKCl9fXl6Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHx5eikodXMoYnopKX0seXouybVtb2Q9Wm8oe3R5cGU6eXp9KSx5ei7JtWluaj1jbyh7aW1wb3J0czpbW2dJLERJXV19KSx5ei5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmJ6fV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyh5eix7ZGVjbGFyYXRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuW3J6LHFJLHV6XX0saW1wb3J0czpmdW5jdGlvbigpe3JldHVybltnSSxESV19LGV4cG9ydHM6ZnVuY3Rpb24oKXtyZXR1cm5bcnoscUksdXpdfX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoeXosW3t0eXBlOmtfLGFyZ3M6W3tpbXBvcnRzOltnSSxESV0sZGVjbGFyYXRpb25zOltyeixxSSx1el0sZXhwb3J0czpbcnoscUksdXpdfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Ynp9XX0pLG51bGwpO2NvbnN0IF96PW5ldyBOcigiY2RrLWRpci1kb2MiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uIEN6KCl7cmV0dXJuIGdzKFVDKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovfSk7Y2xhc3MgTXp7Y29uc3RydWN0b3IodCl7aWYodGhpcy52YWx1ZT0ibHRyIix0aGlzLmNoYW5nZT1uZXcgQWIsdCl7Y29uc3QgZT10LmRvY3VtZW50RWxlbWVudD90LmRvY3VtZW50RWxlbWVudC5kaXI6bnVsbCxuPSh0LmJvZHk/dC5ib2R5LmRpcjpudWxsKXx8ZTt0aGlzLnZhbHVlPSJsdHIiPT09bnx8InJ0bCI9PT1uP246Imx0ciJ9fW5nT25EZXN0cm95KCl7dGhpcy5jaGFuZ2UuY29tcGxldGUoKX19TXouybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fE16KSh1cyhfeiw4KSl9LE16Lsm1cHJvdj1sbyh7ZmFjdG9yeTpmdW5jdGlvbiB0KCl7cmV0dXJuIG5ldyBNeih1cyhfeiw4KSl9LHRva2VuOk16LHByb3ZpZGVkSW46InJvb3QifSksTXouY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W196XX1dfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihNeixbe3R5cGU6Sm0sYXJnczpbe3Byb3ZpZGVkSW46InJvb3QifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltfel19XX1dfSksbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyB2entjb25zdHJ1Y3Rvcigpe3RoaXMuX2Rpcj0ibHRyIix0aGlzLl9pc0luaXRpYWxpemVkPSExLHRoaXMuY2hhbmdlPW5ldyBBYn1nZXQgZGlyKCl7cmV0dXJuIHRoaXMuX2Rpcn1zZXQgZGlyKHQpe2NvbnN0IGU9dGhpcy5fZGlyLG49dD90LnRvTG93ZXJDYXNlKCk6dDt0aGlzLl9yYXdEaXI9dCx0aGlzLl9kaXI9Imx0ciI9PT1ufHwicnRsIj09PW4/bjoibHRyIixlIT09dGhpcy5fZGlyJiZ0aGlzLl9pc0luaXRpYWxpemVkJiZ0aGlzLmNoYW5nZS5lbWl0KHRoaXMuX2Rpcil9Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMuZGlyfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuX2lzSW5pdGlhbGl6ZWQ9ITB9bmdPbkRlc3Ryb3koKXt0aGlzLmNoYW5nZS5jb21wbGV0ZSgpfX12ei7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8dnopfSx2ei7JtWRpcj1Kbyh7dHlwZTp2eixzZWxlY3RvcnM6W1siIiwiZGlyIiwiIl1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsyJmUmJk5tKCJkaXIiLG4uX3Jhd0Rpcil9LGlucHV0czp7ZGlyOiJkaXIifSxvdXRwdXRzOntjaGFuZ2U6ImRpckNoYW5nZSJ9LGV4cG9ydEFzOlsiZGlyIl0sZmVhdHVyZXM6W2loKFt7cHJvdmlkZTpNeix1c2VFeGlzdGluZzp2en1dKV19KSx2ei5wcm9wRGVjb3JhdG9ycz17Y2hhbmdlOlt7dHlwZTpfXyxhcmdzOlsiZGlyQ2hhbmdlIl19XSxkaXI6W3t0eXBlOnlffV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIodnosW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoiW2Rpcl0iLHByb3ZpZGVyczpbe3Byb3ZpZGU6TXosdXNlRXhpc3Rpbmc6dnp9XSxob3N0OnsiW2F0dHIuZGlyXSI6Il9yYXdEaXIifSxleHBvcnRBczoiZGlyIn1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW119KSx7Y2hhbmdlOlt7dHlwZTpfXyxhcmdzOlsiZGlyQ2hhbmdlIl19XSxkaXI6W3t0eXBlOnlffV19KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIHh6e314ei7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8eHopfSx4ei7JtW1vZD1abyh7dHlwZTp4en0pLHh6Lsm1aW5qPWNvKHt9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKHh6LHtkZWNsYXJhdGlvbnM6W3Z6XSxleHBvcnRzOlt2el19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHh6LFt7dHlwZTprXyxhcmdzOlt7ZXhwb3J0czpbdnpdLGRlY2xhcmF0aW9uczpbdnpdfV19XSxudWxsLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3QgT3o9bmV3IGJoKCIxMS4yLjEyIiksUHo9WyIqIixbWyJtYXQtb3B0aW9uIl0sWyJuZy1jb250YWluZXIiXV1dO2Z1bmN0aW9uIHd6KHQsZSl7aWYoMSZ0JiZ3dSgwLCJtYXQtcHNldWRvLWNoZWNrYm94Iiw0KSwyJnQpe2NvbnN0IHQ9THUoKTt2dSgic3RhdGUiLHQuc2VsZWN0ZWQ/ImNoZWNrZWQiOiJ1bmNoZWNrZWQiKSgiZGlzYWJsZWQiLHQuZGlzYWJsZWQpfX1mdW5jdGlvbiBreih0LGUpe2lmKDEmdCYmKE91KDAsInNwYW4iLDUpLE1mKDEpLFB1KCkpLDImdCl7Y29uc3QgdD1MdSgpO0pjKDEpLHhmKCIoIix0Lmdyb3VwLmxhYmVsLCIpIil9fW5ldyBiaCgiMTEuMi4xMiIpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3MgU3p7fVN6LlNUQU5EQVJEX0NVUlZFPSJjdWJpYy1iZXppZXIoMC40LDAuMCwwLjIsMSkiLFN6LkRFQ0VMRVJBVElPTl9DVVJWRT0iY3ViaWMtYmV6aWVyKDAuMCwwLjAsMC4yLDEpIixTei5BQ0NFTEVSQVRJT05fQ1VSVkU9ImN1YmljLWJlemllcigwLjQsMC4wLDEsMSkiLFN6LlNIQVJQX0NVUlZFPSJjdWJpYy1iZXppZXIoMC40LDAuMCwwLjYsMSkiO2NsYXNzIER6e31Eei5DT01QTEVYPSIzNzVtcyIsRHouRU5URVJJTkc9IjIyNW1zIixEei5FWElUSU5HPSIxOTVtcyI7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCBFej1uZXcgYmgoIjExLjIuMTIiKSxBej1uZXcgTnIoIm1hdC1zYW5pdHktY2hlY2tzIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbiBSeigpe3JldHVybiEwfX0pO2NsYXNzIFR6e2NvbnN0cnVjdG9yKHQsZSxuKXt0aGlzLl9oYXNEb25lR2xvYmFsQ2hlY2tzPSExLHRoaXMuX2RvY3VtZW50PW4sdC5fYXBwbHlCb2R5SGlnaENvbnRyYXN0TW9kZUNzc0NsYXNzZXMoKSx0aGlzLl9zYW5pdHlDaGVja3M9ZSx0aGlzLl9oYXNEb25lR2xvYmFsQ2hlY2tzfHwodGhpcy5fY2hlY2tEb2N0eXBlSXNEZWZpbmVkKCksdGhpcy5fY2hlY2tUaGVtZUlzUHJlc2VudCgpLHRoaXMuX2NoZWNrQ2RrVmVyc2lvbk1hdGNoKCksdGhpcy5faGFzRG9uZUdsb2JhbENoZWNrcz0hMCl9X2dldFdpbmRvdygpe2NvbnN0IHQ9dGhpcy5fZG9jdW1lbnQuZGVmYXVsdFZpZXd8fHdpbmRvdztyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHQmJnQ/dDpudWxsfV9jaGVja3NBcmVFbmFibGVkKCl7cmV0dXJuIHVDKCkmJiF0aGlzLl9pc1Rlc3RFbnYoKX1faXNUZXN0RW52KCl7Y29uc3QgdD10aGlzLl9nZXRXaW5kb3coKTtyZXR1cm4gdCYmKHQuX19rYXJtYV9ffHx0Lmphc21pbmUpfV9jaGVja0RvY3R5cGVJc0RlZmluZWQoKXt0aGlzLl9jaGVja3NBcmVFbmFibGVkKCkmJighMD09PXRoaXMuX3Nhbml0eUNoZWNrc3x8dGhpcy5fc2FuaXR5Q2hlY2tzLmRvY3R5cGUpJiYhdGhpcy5fZG9jdW1lbnQuZG9jdHlwZSYmY29uc29sZS53YXJuKCJDdXJyZW50IGRvY3VtZW50IGRvZXMgbm90IGhhdmUgYSBkb2N0eXBlLiBUaGlzIG1heSBjYXVzZSBzb21lIEFuZ3VsYXIgTWF0ZXJpYWwgY29tcG9uZW50cyBub3QgdG8gYmVoYXZlIGFzIGV4cGVjdGVkLiIpfV9jaGVja1RoZW1lSXNQcmVzZW50KCl7aWYoIXRoaXMuX2NoZWNrc0FyZUVuYWJsZWQoKXx8ITE9PT10aGlzLl9zYW5pdHlDaGVja3N8fCF0aGlzLl9zYW5pdHlDaGVja3MudGhlbWV8fCF0aGlzLl9kb2N1bWVudC5ib2R5fHwiZnVuY3Rpb24iIT10eXBlb2YgZ2V0Q29tcHV0ZWRTdHlsZSlyZXR1cm47Y29uc3QgdD10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0LmNsYXNzTGlzdC5hZGQoIm1hdC10aGVtZS1sb2FkZWQtbWFya2VyIiksdGhpcy5fZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0KTtjb25zdCBlPWdldENvbXB1dGVkU3R5bGUodCk7ZSYmIm5vbmUiIT09ZS5kaXNwbGF5JiZjb25zb2xlLndhcm4oIkNvdWxkIG5vdCBmaW5kIEFuZ3VsYXIgTWF0ZXJpYWwgY29yZSB0aGVtZS4gTW9zdCBNYXRlcmlhbCBjb21wb25lbnRzIG1heSBub3Qgd29yayBhcyBleHBlY3RlZC4gRm9yIG1vcmUgaW5mbyByZWZlciB0byB0aGUgdGhlbWluZyBndWlkZTogaHR0cHM6Ly9tYXRlcmlhbC5hbmd1bGFyLmlvL2d1aWRlL3RoZW1pbmciKSx0aGlzLl9kb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHQpfV9jaGVja0Nka1ZlcnNpb25NYXRjaCgpe3RoaXMuX2NoZWNrc0FyZUVuYWJsZWQoKSYmKCEwPT09dGhpcy5fc2FuaXR5Q2hlY2tzfHx0aGlzLl9zYW5pdHlDaGVja3MudmVyc2lvbikmJkV6LmZ1bGwhPT1Pei5mdWxsJiZjb25zb2xlLndhcm4oIlRoZSBBbmd1bGFyIE1hdGVyaWFsIHZlcnNpb24gKCIrRXouZnVsbCsiKSBkb2VzIG5vdCBtYXRjaCB0aGUgQW5ndWxhciBDREsgdmVyc2lvbiAoIitPei5mdWxsKyIpLlxuUGxlYXNlIGVuc3VyZSB0aGUgdmVyc2lvbnMgb2YgdGhlc2UgdHdvIHBhY2thZ2VzIGV4YWN0bHkgbWF0Y2guIil9fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KZnVuY3Rpb24gTnoodCl7cmV0dXJuIGNsYXNzIGV4dGVuZHMgdHtjb25zdHJ1Y3RvciguLi50KXtzdXBlciguLi50KSx0aGlzLl9kaXNhYmxlZD0hMX1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR9c2V0IGRpc2FibGVkKHQpe3RoaXMuX2Rpc2FibGVkPXJJKHQpfX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIEl6KHQsZSl7cmV0dXJuIGNsYXNzIGV4dGVuZHMgdHtjb25zdHJ1Y3RvciguLi50KXtzdXBlciguLi50KSx0aGlzLmRlZmF1bHRDb2xvcj1lLHRoaXMuY29sb3I9ZX1nZXQgY29sb3IoKXtyZXR1cm4gdGhpcy5fY29sb3J9c2V0IGNvbG9yKHQpe2NvbnN0IGU9dHx8dGhpcy5kZWZhdWx0Q29sb3I7ZSE9PXRoaXMuX2NvbG9yJiYodGhpcy5fY29sb3ImJnRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKGBtYXQtJHt0aGlzLl9jb2xvcn1gKSxlJiZ0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZChgbWF0LSR7ZX1gKSx0aGlzLl9jb2xvcj1lKX19fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiB6eih0KXtyZXR1cm4gY2xhc3MgZXh0ZW5kcyB0e2NvbnN0cnVjdG9yKC4uLnQpe3N1cGVyKC4uLnQpLHRoaXMuX2Rpc2FibGVSaXBwbGU9ITF9Z2V0IGRpc2FibGVSaXBwbGUoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZVJpcHBsZX1zZXQgZGlzYWJsZVJpcHBsZSh0KXt0aGlzLl9kaXNhYmxlUmlwcGxlPXJJKHQpfX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIEh6KHQsZT0wKXtyZXR1cm4gY2xhc3MgZXh0ZW5kcyB0e2NvbnN0cnVjdG9yKC4uLnQpe3N1cGVyKC4uLnQpLHRoaXMuX3RhYkluZGV4PWUsdGhpcy5kZWZhdWx0VGFiSW5kZXg9ZX1nZXQgdGFiSW5kZXgoKXtyZXR1cm4gdGhpcy5kaXNhYmxlZD8tMTp0aGlzLl90YWJJbmRleH1zZXQgdGFiSW5kZXgodCl7dGhpcy5fdGFiSW5kZXg9bnVsbCE9dD9zSSh0KTp0aGlzLmRlZmF1bHRUYWJJbmRleH19fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiBGeih0KXtyZXR1cm4gY2xhc3MgZXh0ZW5kcyB0e2NvbnN0cnVjdG9yKC4uLnQpe3N1cGVyKC4uLnQpLHRoaXMuZXJyb3JTdGF0ZT0hMSx0aGlzLnN0YXRlQ2hhbmdlcz1uZXcgeH11cGRhdGVFcnJvclN0YXRlKCl7Y29uc3QgdD10aGlzLmVycm9yU3RhdGUsZT0odGhpcy5lcnJvclN0YXRlTWF0Y2hlcnx8dGhpcy5fZGVmYXVsdEVycm9yU3RhdGVNYXRjaGVyKS5pc0Vycm9yU3RhdGUodGhpcy5uZ0NvbnRyb2w/dGhpcy5uZ0NvbnRyb2wuY29udHJvbDpudWxsLHRoaXMuX3BhcmVudEZvcm1Hcm91cHx8dGhpcy5fcGFyZW50Rm9ybSk7ZSE9PXQmJih0aGlzLmVycm9yU3RhdGU9ZSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCkpfX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIEx6KHQpe3JldHVybiBjbGFzcyBleHRlbmRzIHR7Y29uc3RydWN0b3IoLi4udCl7c3VwZXIoLi4udCksdGhpcy5faXNJbml0aWFsaXplZD0hMSx0aGlzLl9wZW5kaW5nU3Vic2NyaWJlcnM9W10sdGhpcy5pbml0aWFsaXplZD1uZXcgeSgodD0+e3RoaXMuX2lzSW5pdGlhbGl6ZWQ/dGhpcy5fbm90aWZ5U3Vic2NyaWJlcih0KTp0aGlzLl9wZW5kaW5nU3Vic2NyaWJlcnMucHVzaCh0KX0pKX1fbWFya0luaXRpYWxpemVkKCl7aWYodGhpcy5faXNJbml0aWFsaXplZCYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpKXRocm93IEVycm9yKCJUaGlzIGRpcmVjdGl2ZSBoYXMgYWxyZWFkeSBiZWVuIG1hcmtlZCBhcyBpbml0aWFsaXplZCBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgdHdpY2UuIik7dGhpcy5faXNJbml0aWFsaXplZD0hMCx0aGlzLl9wZW5kaW5nU3Vic2NyaWJlcnMuZm9yRWFjaCh0aGlzLl9ub3RpZnlTdWJzY3JpYmVyKSx0aGlzLl9wZW5kaW5nU3Vic2NyaWJlcnM9bnVsbH1fbm90aWZ5U3Vic2NyaWJlcih0KXt0Lm5leHQoKSx0LmNvbXBsZXRlKCl9fX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCi8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL1R6Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxUeikodXMoYnopLHVzKEF6LDgpLHVzKFVDKSl9LFR6Lsm1bW9kPVpvKHt0eXBlOlR6fSksVHouybVpbmo9Y28oe2ltcG9ydHM6W1t4el0seHpdfSksVHouY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpien0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltBel19XX0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W1VDXX1dfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhUeix7aW1wb3J0czpmdW5jdGlvbigpe3JldHVyblt4el19LGV4cG9ydHM6ZnVuY3Rpb24oKXtyZXR1cm5beHpdfX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoVHosW3t0eXBlOmtfLGFyZ3M6W3tpbXBvcnRzOlt4el0sZXhwb3J0czpbeHpdfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Ynp9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbQXpdfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltVQ119XX1dfSksbnVsbCk7Y29uc3QgQno9bmV3IE5yKCJNQVRfREFURV9MT0NBTEUiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uIFZ6KCl7cmV0dXJuIGdzKEJfKX19KTtjbGFzcyBqentjb25zdHJ1Y3Rvcigpe3RoaXMuX2xvY2FsZUNoYW5nZXM9bmV3IHgsdGhpcy5sb2NhbGVDaGFuZ2VzPXRoaXMuX2xvY2FsZUNoYW5nZXN9Z2V0VmFsaWREYXRlT3JOdWxsKHQpe3JldHVybiB0aGlzLmlzRGF0ZUluc3RhbmNlKHQpJiZ0aGlzLmlzVmFsaWQodCk/dDpudWxsfWRlc2VyaWFsaXplKHQpe3JldHVybiBudWxsPT10fHx0aGlzLmlzRGF0ZUluc3RhbmNlKHQpJiZ0aGlzLmlzVmFsaWQodCk/dDp0aGlzLmludmFsaWQoKX1zZXRMb2NhbGUodCl7dGhpcy5sb2NhbGU9dCx0aGlzLl9sb2NhbGVDaGFuZ2VzLm5leHQoKX1jb21wYXJlRGF0ZSh0LGUpe3JldHVybiB0aGlzLmdldFllYXIodCktdGhpcy5nZXRZZWFyKGUpfHx0aGlzLmdldE1vbnRoKHQpLXRoaXMuZ2V0TW9udGgoZSl8fHRoaXMuZ2V0RGF0ZSh0KS10aGlzLmdldERhdGUoZSl9c2FtZURhdGUodCxlKXtpZih0JiZlKXtsZXQgbj10aGlzLmlzVmFsaWQodCksbz10aGlzLmlzVmFsaWQoZSk7cmV0dXJuIG4mJm8/IXRoaXMuY29tcGFyZURhdGUodCxlKTpuPT1vfXJldHVybiB0PT1lfWNsYW1wRGF0ZSh0LGUsbil7cmV0dXJuIGUmJnRoaXMuY29tcGFyZURhdGUodCxlKTwwP2U6biYmdGhpcy5jb21wYXJlRGF0ZSh0LG4pPjA/bjp0fX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY29uc3QgVXo9bmV3IE5yKCJtYXQtZGF0ZS1mb3JtYXRzIik7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2xldCBXejt0cnl7V3o9InVuZGVmaW5lZCIhPXR5cGVvZiBJbnRsfWNhdGNoKHQpe1d6PSExfWNvbnN0IEd6PXtsb25nOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxzaG9ydDpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLG5hcnJvdzpbIkoiLCJGIiwiTSIsIkEiLCJNIiwiSiIsIkoiLCJBIiwiUyIsIk8iLCJOIiwiRCJdfSxZej1YeigzMSwodD0+U3RyaW5nKHQrMSkpKSxxej17bG9uZzpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sc2hvcnQ6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxuYXJyb3c6WyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl19LFp6PS9eXGR7NH0tXGR7Mn0tXGR7Mn0oPzpUXGR7Mn06XGR7Mn06XGR7Mn0oPzpcLlxkKyk/KD86WnwoPzooPzpcK3wtKVxkezJ9OlxkezJ9KSk/KT8kLztmdW5jdGlvbiBYeih0LGUpe2NvbnN0IG49QXJyYXkodCk7Zm9yKGxldCBvPTA7bzx0O28rKyluW29dPWUobyk7cmV0dXJuIG59Y2xhc3MgS3ogZXh0ZW5kcyBqentjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKCksdGhpcy51c2VVdGNGb3JEaXNwbGF5PSEwLHN1cGVyLnNldExvY2FsZSh0KSx0aGlzLnVzZVV0Y0ZvckRpc3BsYXk9IWUuVFJJREVOVCx0aGlzLl9jbGFtcERhdGU9ZS5UUklERU5UfHxlLkVER0V9Z2V0WWVhcih0KXtyZXR1cm4gdC5nZXRGdWxsWWVhcigpfWdldE1vbnRoKHQpe3JldHVybiB0LmdldE1vbnRoKCl9Z2V0RGF0ZSh0KXtyZXR1cm4gdC5nZXREYXRlKCl9Z2V0RGF5T2ZXZWVrKHQpe3JldHVybiB0LmdldERheSgpfWdldE1vbnRoTmFtZXModCl7aWYoV3ope2NvbnN0IGU9bmV3IEludGwuRGF0ZVRpbWVGb3JtYXQodGhpcy5sb2NhbGUse21vbnRoOnQsdGltZVpvbmU6InV0YyJ9KTtyZXR1cm4gWHooMTIsKHQ9PnRoaXMuX3N0cmlwRGlyZWN0aW9uYWxpdHlDaGFyYWN0ZXJzKHRoaXMuX2Zvcm1hdChlLG5ldyBEYXRlKDIwMTcsdCwxKSkpKSl9cmV0dXJuIEd6W3RdfWdldERhdGVOYW1lcygpe2lmKFd6KXtjb25zdCB0PW5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KHRoaXMubG9jYWxlLHtkYXk6Im51bWVyaWMiLHRpbWVab25lOiJ1dGMifSk7cmV0dXJuIFh6KDMxLChlPT50aGlzLl9zdHJpcERpcmVjdGlvbmFsaXR5Q2hhcmFjdGVycyh0aGlzLl9mb3JtYXQodCxuZXcgRGF0ZSgyMDE3LDAsZSsxKSkpKSl9cmV0dXJuIFl6fWdldERheU9mV2Vla05hbWVzKHQpe2lmKFd6KXtjb25zdCBlPW5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KHRoaXMubG9jYWxlLHt3ZWVrZGF5OnQsdGltZVpvbmU6InV0YyJ9KTtyZXR1cm4gWHooNywodD0+dGhpcy5fc3RyaXBEaXJlY3Rpb25hbGl0eUNoYXJhY3RlcnModGhpcy5fZm9ybWF0KGUsbmV3IERhdGUoMjAxNywwLHQrMSkpKSkpfXJldHVybiBxelt0XX1nZXRZZWFyTmFtZSh0KXtpZihXeil7Y29uc3QgZT1uZXcgSW50bC5EYXRlVGltZUZvcm1hdCh0aGlzLmxvY2FsZSx7eWVhcjoibnVtZXJpYyIsdGltZVpvbmU6InV0YyJ9KTtyZXR1cm4gdGhpcy5fc3RyaXBEaXJlY3Rpb25hbGl0eUNoYXJhY3RlcnModGhpcy5fZm9ybWF0KGUsdCkpfXJldHVybiBTdHJpbmcodGhpcy5nZXRZZWFyKHQpKX1nZXRGaXJzdERheU9mV2Vlaygpe3JldHVybiAwfWdldE51bURheXNJbk1vbnRoKHQpe3JldHVybiB0aGlzLmdldERhdGUodGhpcy5fY3JlYXRlRGF0ZVdpdGhPdmVyZmxvdyh0aGlzLmdldFllYXIodCksdGhpcy5nZXRNb250aCh0KSsxLDApKX1jbG9uZSh0KXtyZXR1cm4gbmV3IERhdGUodC5nZXRUaW1lKCkpfWNyZWF0ZURhdGUodCxlLG4pe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpe2lmKGU8MHx8ZT4xMSl0aHJvdyBFcnJvcihgSW52YWxpZCBtb250aCBpbmRleCAiJHtlfSIuIE1vbnRoIGluZGV4IGhhcyB0byBiZSBiZXR3ZWVuIDAgYW5kIDExLmApO2lmKG48MSl0aHJvdyBFcnJvcihgSW52YWxpZCBkYXRlICIke259Ii4gRGF0ZSBoYXMgdG8gYmUgZ3JlYXRlciB0aGFuIDAuYCl9bGV0IG89dGhpcy5fY3JlYXRlRGF0ZVdpdGhPdmVyZmxvdyh0LGUsbik7aWYoby5nZXRNb250aCgpIT1lJiYoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkpdGhyb3cgRXJyb3IoYEludmFsaWQgZGF0ZSAiJHtufSIgZm9yIG1vbnRoIHdpdGggaW5kZXggIiR7ZX0iLmApO3JldHVybiBvfXRvZGF5KCl7cmV0dXJuIG5ldyBEYXRlfXBhcnNlKHQpe3JldHVybiJudW1iZXIiPT10eXBlb2YgdD9uZXcgRGF0ZSh0KTp0P25ldyBEYXRlKERhdGUucGFyc2UodCkpOm51bGx9Zm9ybWF0KHQsZSl7aWYoIXRoaXMuaXNWYWxpZCh0KSl0aHJvdyBFcnJvcigiTmF0aXZlRGF0ZUFkYXB0ZXI6IENhbm5vdCBmb3JtYXQgaW52YWxpZCBkYXRlLiIpO2lmKFd6KXt0aGlzLl9jbGFtcERhdGUmJih0LmdldEZ1bGxZZWFyKCk8MXx8dC5nZXRGdWxsWWVhcigpPjk5OTkpJiYodD10aGlzLmNsb25lKHQpKS5zZXRGdWxsWWVhcihNYXRoLm1heCgxLE1hdGgubWluKDk5OTksdC5nZXRGdWxsWWVhcigpKSkpLGU9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHt0aW1lWm9uZToidXRjIn0pO2NvbnN0IG49bmV3IEludGwuRGF0ZVRpbWVGb3JtYXQodGhpcy5sb2NhbGUsZSk7cmV0dXJuIHRoaXMuX3N0cmlwRGlyZWN0aW9uYWxpdHlDaGFyYWN0ZXJzKHRoaXMuX2Zvcm1hdChuLHQpKX1yZXR1cm4gdGhpcy5fc3RyaXBEaXJlY3Rpb25hbGl0eUNoYXJhY3RlcnModC50b0RhdGVTdHJpbmcoKSl9YWRkQ2FsZW5kYXJZZWFycyh0LGUpe3JldHVybiB0aGlzLmFkZENhbGVuZGFyTW9udGhzKHQsMTIqZSl9YWRkQ2FsZW5kYXJNb250aHModCxlKXtsZXQgbj10aGlzLl9jcmVhdGVEYXRlV2l0aE92ZXJmbG93KHRoaXMuZ2V0WWVhcih0KSx0aGlzLmdldE1vbnRoKHQpK2UsdGhpcy5nZXREYXRlKHQpKTtyZXR1cm4gdGhpcy5nZXRNb250aChuKSE9KCh0aGlzLmdldE1vbnRoKHQpK2UpJTEyKzEyKSUxMiYmKG49dGhpcy5fY3JlYXRlRGF0ZVdpdGhPdmVyZmxvdyh0aGlzLmdldFllYXIobiksdGhpcy5nZXRNb250aChuKSwwKSksbn1hZGRDYWxlbmRhckRheXModCxlKXtyZXR1cm4gdGhpcy5fY3JlYXRlRGF0ZVdpdGhPdmVyZmxvdyh0aGlzLmdldFllYXIodCksdGhpcy5nZXRNb250aCh0KSx0aGlzLmdldERhdGUodCkrZSl9dG9Jc284NjAxKHQpe3JldHVyblt0LmdldFVUQ0Z1bGxZZWFyKCksdGhpcy5fMmRpZ2l0KHQuZ2V0VVRDTW9udGgoKSsxKSx0aGlzLl8yZGlnaXQodC5nZXRVVENEYXRlKCkpXS5qb2luKCItIil9ZGVzZXJpYWxpemUodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXtpZighdClyZXR1cm4gbnVsbDtpZihaei50ZXN0KHQpKXtsZXQgZT1uZXcgRGF0ZSh0KTtpZih0aGlzLmlzVmFsaWQoZSkpcmV0dXJuIGV9fXJldHVybiBzdXBlci5kZXNlcmlhbGl6ZSh0KX1pc0RhdGVJbnN0YW5jZSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIERhdGV9aXNWYWxpZCh0KXtyZXR1cm4haXNOYU4odC5nZXRUaW1lKCkpfWludmFsaWQoKXtyZXR1cm4gbmV3IERhdGUoTmFOKX1fY3JlYXRlRGF0ZVdpdGhPdmVyZmxvdyh0LGUsbil7Y29uc3Qgbz1uZXcgRGF0ZTtyZXR1cm4gby5zZXRGdWxsWWVhcih0LGUsbiksby5zZXRIb3VycygwLDAsMCwwKSxvfV8yZGlnaXQodCl7cmV0dXJuKCIwMCIrdCkuc2xpY2UoLTIpfV9zdHJpcERpcmVjdGlvbmFsaXR5Q2hhcmFjdGVycyh0KXtyZXR1cm4gdC5yZXBsYWNlKC9bXHUyMDBlXHUyMDBmXS9nLCIiKX1fZm9ybWF0KHQsZSl7Y29uc3Qgbj1uZXcgRGF0ZTtyZXR1cm4gbi5zZXRVVENGdWxsWWVhcihlLmdldEZ1bGxZZWFyKCksZS5nZXRNb250aCgpLGUuZ2V0RGF0ZSgpKSxuLnNldFVUQ0hvdXJzKGUuZ2V0SG91cnMoKSxlLmdldE1pbnV0ZXMoKSxlLmdldFNlY29uZHMoKSxlLmdldE1pbGxpc2Vjb25kcygpKSx0LmZvcm1hdChuKX19S3ouybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEt6KSh1cyhCeiw4KSx1cyhmSSkpfSxLei7JtXByb3Y9bG8oe3Rva2VuOkt6LGZhY3Rvcnk6S3ouybVmYWN9KSxLei5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbQnpdfV19LHt0eXBlOmZJfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihLeixbe3R5cGU6Sm19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltCel19XX0se3R5cGU6Zkl9XX0pLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3MgSnp7fUp6Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxKeil9LEp6Lsm1bW9kPVpvKHt0eXBlOkp6fSksSnouybVpbmo9Y28oe3Byb3ZpZGVyczpbe3Byb3ZpZGU6anosdXNlQ2xhc3M6S3p9XSxpbXBvcnRzOltbZ0ldXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oSnose2ltcG9ydHM6ZnVuY3Rpb24oKXtyZXR1cm5bZ0ldfX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoSnosW3t0eXBlOmtfLGFyZ3M6W3tpbXBvcnRzOltnSV0scHJvdmlkZXJzOlt7cHJvdmlkZTpqeix1c2VDbGFzczpLen1dfV19XSxudWxsLG51bGwpO2NvbnN0IFF6PXtwYXJzZTp7ZGF0ZUlucHV0Om51bGx9LGRpc3BsYXk6e2RhdGVJbnB1dDp7eWVhcjoibnVtZXJpYyIsbW9udGg6Im51bWVyaWMiLGRheToibnVtZXJpYyJ9LG1vbnRoWWVhckxhYmVsOnt5ZWFyOiJudW1lcmljIixtb250aDoic2hvcnQifSxkYXRlQTExeUxhYmVsOnt5ZWFyOiJudW1lcmljIixtb250aDoibG9uZyIsZGF5OiJudW1lcmljIn0sbW9udGhZZWFyQTExeUxhYmVsOnt5ZWFyOiJudW1lcmljIixtb250aDoibG9uZyJ9fX07Y2xhc3MgJHp7fSR6Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHwkeil9LCR6Lsm1bW9kPVpvKHt0eXBlOiR6fSksJHouybVpbmo9Y28oe3Byb3ZpZGVyczpbe3Byb3ZpZGU6VXosdXNlVmFsdWU6UXp9XSxpbXBvcnRzOltbSnpdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oJHose2ltcG9ydHM6W0p6XX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoJHosW3t0eXBlOmtfLGFyZ3M6W3tpbXBvcnRzOltKel0scHJvdmlkZXJzOlt7cHJvdmlkZTpVeix1c2VWYWx1ZTpRen1dfV19XSxudWxsLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3MgdEh7aXNFcnJvclN0YXRlKHQsZSl7cmV0dXJuISEodCYmdC5pbnZhbGlkJiYodC5kaXJ0eXx8ZSYmZS5zdWJtaXR0ZWQpKX19dEguybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHRIKX0sdEguybVwcm92PWxvKHt0b2tlbjp0SCxmYWN0b3J5OnRILsm1ZmFjfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYih0SCxbe3R5cGU6Sm19XSxudWxsLG51bGwpO2NsYXNzIGVIe2lzRXJyb3JTdGF0ZSh0LGUpe3JldHVybiEhKHQmJnQuaW52YWxpZCYmKHQudG91Y2hlZHx8ZSYmZS5zdWJtaXR0ZWQpKX19ZUguybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGVIKX0sZUguybVwcm92PWxvKHtmYWN0b3J5OmZ1bmN0aW9uIHQoKXtyZXR1cm4gbmV3IGVIfSx0b2tlbjplSCxwcm92aWRlZEluOiJyb290In0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoZUgsW3t0eXBlOkptLGFyZ3M6W3twcm92aWRlZEluOiJyb290In1dfV0sbnVsbCxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIG5Ie31uSC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8bkgpfSxuSC7JtWRpcj1Kbyh7dHlwZTpuSCxzZWxlY3RvcnM6W1siIiwibWF0LWxpbmUiLCIiXSxbIiIsIm1hdExpbmUiLCIiXV0saG9zdEF0dHJzOlsxLCJtYXQtbGluZSJdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihuSCxbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJbbWF0LWxpbmVdLCBbbWF0TGluZV0iLGhvc3Q6e2NsYXNzOiJtYXQtbGluZSJ9fV19XSxudWxsLG51bGwpO2NsYXNzIG9Ie31vSC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8b0gpfSxvSC7JtW1vZD1abyh7dHlwZTpvSH0pLG9ILsm1aW5qPWNvKHtpbXBvcnRzOltbVHpdLFR6XX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8ob0gse2RlY2xhcmF0aW9uczpbbkhdLGltcG9ydHM6W1R6XSxleHBvcnRzOltuSCxUel19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKG9ILFt7dHlwZTprXyxhcmdzOlt7aW1wb3J0czpbVHpdLGV4cG9ydHM6W25ILFR6XSxkZWNsYXJhdGlvbnM6W25IXX1dfV0sbnVsbCxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIGlIe2NvbnN0cnVjdG9yKHQsZSxuKXt0aGlzLl9yZW5kZXJlcj10LHRoaXMuZWxlbWVudD1lLHRoaXMuY29uZmlnPW4sdGhpcy5zdGF0ZT0zfWZhZGVPdXQoKXt0aGlzLl9yZW5kZXJlci5mYWRlT3V0UmlwcGxlKHRoaXMpfX1jb25zdCBhSD17ZW50ZXJEdXJhdGlvbjo0NTAsZXhpdER1cmF0aW9uOjQwMH0sckg9dkkoe3Bhc3NpdmU6ITB9KSxzSD1bIm1vdXNlZG93biIsInRvdWNoc3RhcnQiXSxsSD1bIm1vdXNldXAiLCJtb3VzZWxlYXZlIiwidG91Y2hlbmQiLCJ0b3VjaGNhbmNlbCJdO2NsYXNzIGNIe2NvbnN0cnVjdG9yKHQsZSxuLG8pe3RoaXMuX3RhcmdldD10LHRoaXMuX25nWm9uZT1lLHRoaXMuX2lzUG9pbnRlckRvd249ITEsdGhpcy5fYWN0aXZlUmlwcGxlcz1uZXcgU2V0LHRoaXMuX3BvaW50ZXJVcEV2ZW50c1JlZ2lzdGVyZWQ9ITEsby5pc0Jyb3dzZXImJih0aGlzLl9jb250YWluZXJFbGVtZW50PXBJKG4pKX1mYWRlSW5SaXBwbGUodCxlLG49e30pe2NvbnN0IG89dGhpcy5fY29udGFpbmVyUmVjdD10aGlzLl9jb250YWluZXJSZWN0fHx0aGlzLl9jb250YWluZXJFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGk9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGFIKSxuLmFuaW1hdGlvbik7bi5jZW50ZXJlZCYmKHQ9by5sZWZ0K28ud2lkdGgvMixlPW8udG9wK28uaGVpZ2h0LzIpO2NvbnN0IGE9bi5yYWRpdXN8fChmdW5jdGlvbiByKHQsZSxuKXtjb25zdCBvPU1hdGgubWF4KE1hdGguYWJzKHQtbi5sZWZ0KSxNYXRoLmFicyh0LW4ucmlnaHQpKSxpPU1hdGgubWF4KE1hdGguYWJzKGUtbi50b3ApLE1hdGguYWJzKGUtbi5ib3R0b20pKTtyZXR1cm4gTWF0aC5zcXJ0KG8qbytpKmkpfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8pKHQsZSxvKSxzPXQtby5sZWZ0LGw9ZS1vLnRvcCxjPWkuZW50ZXJEdXJhdGlvbixkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2QuY2xhc3NMaXN0LmFkZCgibWF0LXJpcHBsZS1lbGVtZW50IiksZC5zdHlsZS5sZWZ0PXMtYSsicHgiLGQuc3R5bGUudG9wPWwtYSsicHgiLGQuc3R5bGUuaGVpZ2h0PTIqYSsicHgiLGQuc3R5bGUud2lkdGg9MiphKyJweCIsbnVsbCE9bi5jb2xvciYmKGQuc3R5bGUuYmFja2dyb3VuZENvbG9yPW4uY29sb3IpLGQuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uPWAke2N9bXNgLHRoaXMuX2NvbnRhaW5lckVsZW1lbnQuYXBwZW5kQ2hpbGQoZCksKGZ1bmN0aW9uIHAodCl7d2luZG93LmdldENvbXB1dGVkU3R5bGUodCkuZ2V0UHJvcGVydHlWYWx1ZSgib3BhY2l0eSIpfSkoZCksZC5zdHlsZS50cmFuc2Zvcm09InNjYWxlKDEpIjtjb25zdCBtPW5ldyBpSCh0aGlzLGQsbik7cmV0dXJuIG0uc3RhdGU9MCx0aGlzLl9hY3RpdmVSaXBwbGVzLmFkZChtKSxuLnBlcnNpc3RlbnR8fCh0aGlzLl9tb3N0UmVjZW50VHJhbnNpZW50UmlwcGxlPW0pLHRoaXMuX3J1blRpbWVvdXRPdXRzaWRlWm9uZSgoKCk9Pntjb25zdCB0PW09PT10aGlzLl9tb3N0UmVjZW50VHJhbnNpZW50UmlwcGxlO20uc3RhdGU9MSxuLnBlcnNpc3RlbnR8fHQmJnRoaXMuX2lzUG9pbnRlckRvd258fG0uZmFkZU91dCgpfSksYyksbX1mYWRlT3V0UmlwcGxlKHQpe2NvbnN0IGU9dGhpcy5fYWN0aXZlUmlwcGxlcy5kZWxldGUodCk7aWYodD09PXRoaXMuX21vc3RSZWNlbnRUcmFuc2llbnRSaXBwbGUmJih0aGlzLl9tb3N0UmVjZW50VHJhbnNpZW50UmlwcGxlPW51bGwpLHRoaXMuX2FjdGl2ZVJpcHBsZXMuc2l6ZXx8KHRoaXMuX2NvbnRhaW5lclJlY3Q9bnVsbCksIWUpcmV0dXJuO2NvbnN0IG49dC5lbGVtZW50LG89T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGFIKSx0LmNvbmZpZy5hbmltYXRpb24pO24uc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uPWAke28uZXhpdER1cmF0aW9ufW1zYCxuLnN0eWxlLm9wYWNpdHk9IjAiLHQuc3RhdGU9Mix0aGlzLl9ydW5UaW1lb3V0T3V0c2lkZVpvbmUoKCgpPT57dC5zdGF0ZT0zLG4ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChuKX0pLG8uZXhpdER1cmF0aW9uKX1mYWRlT3V0QWxsKCl7dGhpcy5fYWN0aXZlUmlwcGxlcy5mb3JFYWNoKCh0PT50LmZhZGVPdXQoKSkpfWZhZGVPdXRBbGxOb25QZXJzaXN0ZW50KCl7dGhpcy5fYWN0aXZlUmlwcGxlcy5mb3JFYWNoKCh0PT57dC5jb25maWcucGVyc2lzdGVudHx8dC5mYWRlT3V0KCl9KSl9c2V0dXBUcmlnZ2VyRXZlbnRzKHQpe2NvbnN0IGU9cEkodCk7ZSYmZSE9PXRoaXMuX3RyaWdnZXJFbGVtZW50JiYodGhpcy5fcmVtb3ZlVHJpZ2dlckV2ZW50cygpLHRoaXMuX3RyaWdnZXJFbGVtZW50PWUsdGhpcy5fcmVnaXN0ZXJFdmVudHMoc0gpKX1oYW5kbGVFdmVudCh0KXsibW91c2Vkb3duIj09PXQudHlwZT90aGlzLl9vbk1vdXNlZG93bih0KToidG91Y2hzdGFydCI9PT10LnR5cGU/dGhpcy5fb25Ub3VjaFN0YXJ0KHQpOnRoaXMuX29uUG9pbnRlclVwKCksdGhpcy5fcG9pbnRlclVwRXZlbnRzUmVnaXN0ZXJlZHx8KHRoaXMuX3JlZ2lzdGVyRXZlbnRzKGxIKSx0aGlzLl9wb2ludGVyVXBFdmVudHNSZWdpc3RlcmVkPSEwKX1fb25Nb3VzZWRvd24odCl7Y29uc3QgZT1zeih0KSxuPXRoaXMuX2xhc3RUb3VjaFN0YXJ0RXZlbnQmJkRhdGUubm93KCk8dGhpcy5fbGFzdFRvdWNoU3RhcnRFdmVudCs4MDA7dGhpcy5fdGFyZ2V0LnJpcHBsZURpc2FibGVkfHxlfHxufHwodGhpcy5faXNQb2ludGVyRG93bj0hMCx0aGlzLmZhZGVJblJpcHBsZSh0LmNsaWVudFgsdC5jbGllbnRZLHRoaXMuX3RhcmdldC5yaXBwbGVDb25maWcpKX1fb25Ub3VjaFN0YXJ0KHQpe2lmKCF0aGlzLl90YXJnZXQucmlwcGxlRGlzYWJsZWQmJiFseih0KSl7dGhpcy5fbGFzdFRvdWNoU3RhcnRFdmVudD1EYXRlLm5vdygpLHRoaXMuX2lzUG9pbnRlckRvd249ITA7Y29uc3QgZT10LmNoYW5nZWRUb3VjaGVzO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKXRoaXMuZmFkZUluUmlwcGxlKGVbdF0uY2xpZW50WCxlW3RdLmNsaWVudFksdGhpcy5fdGFyZ2V0LnJpcHBsZUNvbmZpZyl9fV9vblBvaW50ZXJVcCgpe3RoaXMuX2lzUG9pbnRlckRvd24mJih0aGlzLl9pc1BvaW50ZXJEb3duPSExLHRoaXMuX2FjdGl2ZVJpcHBsZXMuZm9yRWFjaCgodD0+eyF0LmNvbmZpZy5wZXJzaXN0ZW50JiYoMT09PXQuc3RhdGV8fHQuY29uZmlnLnRlcm1pbmF0ZU9uUG9pbnRlclVwJiYwPT09dC5zdGF0ZSkmJnQuZmFkZU91dCgpfSkpKX1fcnVuVGltZW91dE91dHNpZGVab25lKHQsZT0wKXt0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCgpPT5zZXRUaW1lb3V0KHQsZSkpKX1fcmVnaXN0ZXJFdmVudHModCl7dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgoKT0+e3QuZm9yRWFjaCgodD0+e3RoaXMuX3RyaWdnZXJFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIodCx0aGlzLHJIKX0pKX0pKX1fcmVtb3ZlVHJpZ2dlckV2ZW50cygpe3RoaXMuX3RyaWdnZXJFbGVtZW50JiYoc0guZm9yRWFjaCgodD0+e3RoaXMuX3RyaWdnZXJFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodCx0aGlzLHJIKX0pKSx0aGlzLl9wb2ludGVyVXBFdmVudHNSZWdpc3RlcmVkJiZsSC5mb3JFYWNoKCh0PT57dGhpcy5fdHJpZ2dlckVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LHRoaXMsckgpfSkpKX19Y29uc3QgZEg9bmV3IE5yKCJtYXQtcmlwcGxlLWdsb2JhbC1vcHRpb25zIik7Y2xhc3MgcEh7Y29uc3RydWN0b3IodCxlLG4sbyxpKXt0aGlzLl9lbGVtZW50UmVmPXQsdGhpcy5fYW5pbWF0aW9uTW9kZT1pLHRoaXMucmFkaXVzPTAsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5faXNJbml0aWFsaXplZD0hMSx0aGlzLl9nbG9iYWxPcHRpb25zPW98fHt9LHRoaXMuX3JpcHBsZVJlbmRlcmVyPW5ldyBjSCh0aGlzLGUsdCxuKX1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR9c2V0IGRpc2FibGVkKHQpe3QmJnRoaXMuZmFkZU91dEFsbE5vblBlcnNpc3RlbnQoKSx0aGlzLl9kaXNhYmxlZD10LHRoaXMuX3NldHVwVHJpZ2dlckV2ZW50c0lmRW5hYmxlZCgpfWdldCB0cmlnZ2VyKCl7cmV0dXJuIHRoaXMuX3RyaWdnZXJ8fHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudH1zZXQgdHJpZ2dlcih0KXt0aGlzLl90cmlnZ2VyPXQsdGhpcy5fc2V0dXBUcmlnZ2VyRXZlbnRzSWZFbmFibGVkKCl9bmdPbkluaXQoKXt0aGlzLl9pc0luaXRpYWxpemVkPSEwLHRoaXMuX3NldHVwVHJpZ2dlckV2ZW50c0lmRW5hYmxlZCgpfW5nT25EZXN0cm95KCl7dGhpcy5fcmlwcGxlUmVuZGVyZXIuX3JlbW92ZVRyaWdnZXJFdmVudHMoKX1mYWRlT3V0QWxsKCl7dGhpcy5fcmlwcGxlUmVuZGVyZXIuZmFkZU91dEFsbCgpfWZhZGVPdXRBbGxOb25QZXJzaXN0ZW50KCl7dGhpcy5fcmlwcGxlUmVuZGVyZXIuZmFkZU91dEFsbE5vblBlcnNpc3RlbnQoKX1nZXQgcmlwcGxlQ29uZmlnKCl7cmV0dXJue2NlbnRlcmVkOnRoaXMuY2VudGVyZWQscmFkaXVzOnRoaXMucmFkaXVzLGNvbG9yOnRoaXMuY29sb3IsYW5pbWF0aW9uOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHRoaXMuX2dsb2JhbE9wdGlvbnMuYW5pbWF0aW9uKSwiTm9vcEFuaW1hdGlvbnMiPT09dGhpcy5fYW5pbWF0aW9uTW9kZT97ZW50ZXJEdXJhdGlvbjowLGV4aXREdXJhdGlvbjowfTp7fSksdGhpcy5hbmltYXRpb24pLHRlcm1pbmF0ZU9uUG9pbnRlclVwOnRoaXMuX2dsb2JhbE9wdGlvbnMudGVybWluYXRlT25Qb2ludGVyVXB9fWdldCByaXBwbGVEaXNhYmxlZCgpe3JldHVybiB0aGlzLmRpc2FibGVkfHwhIXRoaXMuX2dsb2JhbE9wdGlvbnMuZGlzYWJsZWR9X3NldHVwVHJpZ2dlckV2ZW50c0lmRW5hYmxlZCgpeyF0aGlzLmRpc2FibGVkJiZ0aGlzLl9pc0luaXRpYWxpemVkJiZ0aGlzLl9yaXBwbGVSZW5kZXJlci5zZXR1cFRyaWdnZXJFdmVudHModGhpcy50cmlnZ2VyKX1sYXVuY2godCxlPTAsbil7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0P3RoaXMuX3JpcHBsZVJlbmRlcmVyLmZhZGVJblJpcHBsZSh0LGUsT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHRoaXMucmlwcGxlQ29uZmlnKSxuKSk6dGhpcy5fcmlwcGxlUmVuZGVyZXIuZmFkZUluUmlwcGxlKDAsMCxPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdGhpcy5yaXBwbGVDb25maWcpLHQpKX19cEguybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHBIKShNdShjaCksTXUodEMpLE11KGZJKSxNdShkSCw4KSxNdShOdyw4KSl9LHBILsm1ZGlyPUpvKHt0eXBlOnBILHNlbGVjdG9yczpbWyIiLCJtYXQtcmlwcGxlIiwiIl0sWyIiLCJtYXRSaXBwbGUiLCIiXV0saG9zdEF0dHJzOlsxLCJtYXQtcmlwcGxlIl0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezImZSYmYWYoIm1hdC1yaXBwbGUtdW5ib3VuZGVkIixuLnVuYm91bmRlZCl9LGlucHV0czp7cmFkaXVzOlsibWF0UmlwcGxlUmFkaXVzIiwicmFkaXVzIl0sZGlzYWJsZWQ6WyJtYXRSaXBwbGVEaXNhYmxlZCIsImRpc2FibGVkIl0sdHJpZ2dlcjpbIm1hdFJpcHBsZVRyaWdnZXIiLCJ0cmlnZ2VyIl0sY29sb3I6WyJtYXRSaXBwbGVDb2xvciIsImNvbG9yIl0sdW5ib3VuZGVkOlsibWF0UmlwcGxlVW5ib3VuZGVkIiwidW5ib3VuZGVkIl0sY2VudGVyZWQ6WyJtYXRSaXBwbGVDZW50ZXJlZCIsImNlbnRlcmVkIl0sYW5pbWF0aW9uOlsibWF0UmlwcGxlQW5pbWF0aW9uIiwiYW5pbWF0aW9uIl19LGV4cG9ydEFzOlsibWF0UmlwcGxlIl19KSxwSC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmNofSx7dHlwZTp0Q30se3R5cGU6Zkl9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbZEhdfV19LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbTnddfV19XSxwSC5wcm9wRGVjb3JhdG9ycz17Y29sb3I6W3t0eXBlOnlfLGFyZ3M6WyJtYXRSaXBwbGVDb2xvciJdfV0sdW5ib3VuZGVkOlt7dHlwZTp5XyxhcmdzOlsibWF0UmlwcGxlVW5ib3VuZGVkIl19XSxjZW50ZXJlZDpbe3R5cGU6eV8sYXJnczpbIm1hdFJpcHBsZUNlbnRlcmVkIl19XSxyYWRpdXM6W3t0eXBlOnlfLGFyZ3M6WyJtYXRSaXBwbGVSYWRpdXMiXX1dLGFuaW1hdGlvbjpbe3R5cGU6eV8sYXJnczpbIm1hdFJpcHBsZUFuaW1hdGlvbiJdfV0sZGlzYWJsZWQ6W3t0eXBlOnlfLGFyZ3M6WyJtYXRSaXBwbGVEaXNhYmxlZCJdfV0sdHJpZ2dlcjpbe3R5cGU6eV8sYXJnczpbIm1hdFJpcHBsZVRyaWdnZXIiXX1dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHBILFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6IlttYXQtcmlwcGxlXSwgW21hdFJpcHBsZV0iLGV4cG9ydEFzOiJtYXRSaXBwbGUiLGhvc3Q6e2NsYXNzOiJtYXQtcmlwcGxlIiwiW2NsYXNzLm1hdC1yaXBwbGUtdW5ib3VuZGVkXSI6InVuYm91bmRlZCJ9fV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Y2h9LHt0eXBlOnRDfSx7dHlwZTpmSX0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltkSF19XX0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltOd119XX1dfSkse3JhZGl1czpbe3R5cGU6eV8sYXJnczpbIm1hdFJpcHBsZVJhZGl1cyJdfV0sZGlzYWJsZWQ6W3t0eXBlOnlfLGFyZ3M6WyJtYXRSaXBwbGVEaXNhYmxlZCJdfV0sdHJpZ2dlcjpbe3R5cGU6eV8sYXJnczpbIm1hdFJpcHBsZVRyaWdnZXIiXX1dLGNvbG9yOlt7dHlwZTp5XyxhcmdzOlsibWF0UmlwcGxlQ29sb3IiXX1dLHVuYm91bmRlZDpbe3R5cGU6eV8sYXJnczpbIm1hdFJpcHBsZVVuYm91bmRlZCJdfV0sY2VudGVyZWQ6W3t0eXBlOnlfLGFyZ3M6WyJtYXRSaXBwbGVDZW50ZXJlZCJdfV0sYW5pbWF0aW9uOlt7dHlwZTp5XyxhcmdzOlsibWF0UmlwcGxlQW5pbWF0aW9uIl19XX0pOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3MgbUh7fW1ILsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxtSCl9LG1ILsm1bW9kPVpvKHt0eXBlOm1IfSksbUguybVpbmo9Y28oe2ltcG9ydHM6W1tUeixnSV0sVHpdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhtSCx7ZGVjbGFyYXRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuW3BIXX0saW1wb3J0czpmdW5jdGlvbigpe3JldHVybltUeixnSV19LGV4cG9ydHM6ZnVuY3Rpb24oKXtyZXR1cm5bcEgsVHpdfX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIobUgsW3t0eXBlOmtfLGFyZ3M6W3tpbXBvcnRzOltUeixnSV0sZXhwb3J0czpbcEgsVHpdLGRlY2xhcmF0aW9uczpbcEhdfV19XSxudWxsLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3MgdUh7Y29uc3RydWN0b3IodCl7dGhpcy5fYW5pbWF0aW9uTW9kZT10LHRoaXMuc3RhdGU9InVuY2hlY2tlZCIsdGhpcy5kaXNhYmxlZD0hMX19dUguybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHVIKShNdShOdyw4KSl9LHVILsm1Y21wPVVvKHt0eXBlOnVILHNlbGVjdG9yczpbWyJtYXQtcHNldWRvLWNoZWNrYm94Il1dLGhvc3RBdHRyczpbMSwibWF0LXBzZXVkby1jaGVja2JveCJdLGhvc3RWYXJzOjgsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsyJmUmJmFmKCJtYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUiLCJpbmRldGVybWluYXRlIj09PW4uc3RhdGUpKCJtYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQiLCJjaGVja2VkIj09PW4uc3RhdGUpKCJtYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVkIixuLmRpc2FibGVkKSgiX21hdC1hbmltYXRpb24tbm9vcGFibGUiLCJOb29wQW5pbWF0aW9ucyI9PT1uLl9hbmltYXRpb25Nb2RlKX0saW5wdXRzOntzdGF0ZToic3RhdGUiLGRpc2FibGVkOiJkaXNhYmxlZCJ9LGRlY2xzOjAsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXt9LHN0eWxlczpbJy5tYXQtcHNldWRvLWNoZWNrYm94e3dpZHRoOjE2cHg7aGVpZ2h0OjE2cHg7Ym9yZGVyOjJweCBzb2xpZDtib3JkZXItcmFkaXVzOjJweDtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlO2ZsZXgtc2hyaW5rOjA7dHJhbnNpdGlvbjpib3JkZXItY29sb3IgOTBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAwLjEpLGJhY2tncm91bmQtY29sb3IgOTBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAwLjEpfS5tYXQtcHNldWRvLWNoZWNrYm94OjphZnRlcntwb3NpdGlvbjphYnNvbHV0ZTtvcGFjaXR5OjA7Y29udGVudDoiIjtib3JkZXItYm90dG9tOjJweCBzb2xpZCBjdXJyZW50Q29sb3I7dHJhbnNpdGlvbjpvcGFjaXR5IDkwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMC4xKX0ubWF0LXBzZXVkby1jaGVja2JveC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQsLm1hdC1wc2V1ZG8tY2hlY2tib3gubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRle2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudH0uX21hdC1hbmltYXRpb24tbm9vcGFibGUubWF0LXBzZXVkby1jaGVja2JveHt0cmFuc2l0aW9uOm5vbmU7YW5pbWF0aW9uOm5vbmV9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlLm1hdC1wc2V1ZG8tY2hlY2tib3g6OmFmdGVye3RyYW5zaXRpb246bm9uZX0ubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdH0ubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlOjphZnRlcnt0b3A6NXB4O2xlZnQ6MXB4O3dpZHRoOjEwcHg7b3BhY2l0eToxO2JvcmRlci1yYWRpdXM6MnB4fS5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQ6OmFmdGVye3RvcDoyLjRweDtsZWZ0OjFweDt3aWR0aDo4cHg7aGVpZ2h0OjNweDtib3JkZXItbGVmdDoycHggc29saWQgY3VycmVudENvbG9yO3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKTtvcGFjaXR5OjE7Ym94LXNpemluZzpjb250ZW50LWJveH1cbiddLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLHVILmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltOd119XX1dLHVILnByb3BEZWNvcmF0b3JzPXtzdGF0ZTpbe3R5cGU6eV99XSxkaXNhYmxlZDpbe3R5cGU6eV99XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYih1SCxbe3R5cGU6aF8sYXJnczpbe2VuY2Fwc3VsYXRpb246UG8uTm9uZSxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNoLHNlbGVjdG9yOiJtYXQtcHNldWRvLWNoZWNrYm94Iix0ZW1wbGF0ZToiIixob3N0OntjbGFzczoibWF0LXBzZXVkby1jaGVja2JveCIsIltjbGFzcy5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGVdIjonc3RhdGUgPT09ICJpbmRldGVybWluYXRlIicsIltjbGFzcy5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWRdIjonc3RhdGUgPT09ICJjaGVja2VkIicsIltjbGFzcy5tYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVkXSI6ImRpc2FibGVkIiwiW2NsYXNzLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlXSI6J19hbmltYXRpb25Nb2RlID09PSAiTm9vcEFuaW1hdGlvbnMiJ30sc3R5bGVzOlsnLm1hdC1wc2V1ZG8tY2hlY2tib3h7d2lkdGg6MTZweDtoZWlnaHQ6MTZweDtib3JkZXI6MnB4IHNvbGlkO2JvcmRlci1yYWRpdXM6MnB4O2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7ZmxleC1zaHJpbms6MDt0cmFuc2l0aW9uOmJvcmRlci1jb2xvciA5MG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDAuMSksYmFja2dyb3VuZC1jb2xvciA5MG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDAuMSl9Lm1hdC1wc2V1ZG8tY2hlY2tib3g6OmFmdGVye3Bvc2l0aW9uOmFic29sdXRlO29wYWNpdHk6MDtjb250ZW50OiIiO2JvcmRlci1ib3R0b206MnB4IHNvbGlkIGN1cnJlbnRDb2xvcjt0cmFuc2l0aW9uOm9wYWNpdHkgOTBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAwLjEpfS5tYXQtcHNldWRvLWNoZWNrYm94Lm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCwubWF0LXBzZXVkby1jaGVja2JveC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGV7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50fS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZS5tYXQtcHNldWRvLWNoZWNrYm94e3RyYW5zaXRpb246bm9uZTthbmltYXRpb246bm9uZX0uX21hdC1hbmltYXRpb24tbm9vcGFibGUubWF0LXBzZXVkby1jaGVja2JveDo6YWZ0ZXJ7dHJhbnNpdGlvbjpub25lfS5tYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGU6OmFmdGVye3RvcDo1cHg7bGVmdDoxcHg7d2lkdGg6MTBweDtvcGFjaXR5OjE7Ym9yZGVyLXJhZGl1czoycHh9Lm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZDo6YWZ0ZXJ7dG9wOjIuNHB4O2xlZnQ6MXB4O3dpZHRoOjhweDtoZWlnaHQ6M3B4O2JvcmRlci1sZWZ0OjJweCBzb2xpZCBjdXJyZW50Q29sb3I7dHJhbnNmb3JtOnJvdGF0ZSgtNDVkZWcpO29wYWNpdHk6MTtib3gtc2l6aW5nOmNvbnRlbnQtYm94fVxuJ119XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W053XX1dfV19KSx7c3RhdGU6W3t0eXBlOnlffV0sZGlzYWJsZWQ6W3t0eXBlOnlffV19KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIGZIe31mSC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8ZkgpfSxmSC7JtW1vZD1abyh7dHlwZTpmSH0pLGZILsm1aW5qPWNvKHtpbXBvcnRzOltbVHpdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oZkgse2RlY2xhcmF0aW9uczpbdUhdLGltcG9ydHM6W1R6XSxleHBvcnRzOlt1SF19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGZILFt7dHlwZTprXyxhcmdzOlt7aW1wb3J0czpbVHpdLGV4cG9ydHM6W3VIXSxkZWNsYXJhdGlvbnM6W3VIXX1dfV0sbnVsbCxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IGdIPW5ldyBOcigiTUFUX09QVElPTl9QQVJFTlRfQ09NUE9ORU5UIiksaEg9TnooCi8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzc3t9KTtsZXQgYkg9MDtjbGFzcyB5SCBleHRlbmRzIGhIe2NvbnN0cnVjdG9yKHQpe3ZhciBlO3N1cGVyKCksdGhpcy5fbGFiZWxJZD0ibWF0LW9wdGdyb3VwLWxhYmVsLSIrYkgrKyx0aGlzLl9pbmVydD1udWxsIT09KGU9bnVsbD09dD92b2lkIDA6dC5pbmVydEdyb3VwcykmJnZvaWQgMCE9PWUmJmV9fXlILsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHx5SCkoTXUoZ0gsOCkpfSx5SC7JtWRpcj1Kbyh7dHlwZTp5SCxpbnB1dHM6e2xhYmVsOiJsYWJlbCJ9LGZlYXR1cmVzOltnbV19KSx5SC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltnSF19LHt0eXBlOl9zfV19XSx5SC5wcm9wRGVjb3JhdG9ycz17bGFiZWw6W3t0eXBlOnlffV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoeUgsW3t0eXBlOmdffV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltnSF19LHt0eXBlOl9zfV19XX0pLHtsYWJlbDpbe3R5cGU6eV99XX0pO2NvbnN0IF9IPW5ldyBOcigiTWF0T3B0Z3JvdXAiKTtjbGFzcyBDSCBleHRlbmRzIHlIe31DSC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBNSChlfHxDSCl9LENILsm1Y21wPVVvKHt0eXBlOkNILHNlbGVjdG9yczpbWyJtYXQtb3B0Z3JvdXAiXV0saG9zdEF0dHJzOlsxLCJtYXQtb3B0Z3JvdXAiXSxob3N0VmFyczo1LGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MiZlJiYoTm0oInJvbGUiLG4uX2luZXJ0P251bGw6Imdyb3VwIikoImFyaWEtZGlzYWJsZWQiLG4uX2luZXJ0P251bGw6bi5kaXNhYmxlZC50b1N0cmluZygpKSgiYXJpYS1sYWJlbGxlZGJ5IixuLl9pbmVydD9udWxsOm4uX2xhYmVsSWQpLGFmKCJtYXQtb3B0Z3JvdXAtZGlzYWJsZWQiLG4uZGlzYWJsZWQpKX0saW5wdXRzOntkaXNhYmxlZDoiZGlzYWJsZWQifSxleHBvcnRBczpbIm1hdE9wdGdyb3VwIl0sZmVhdHVyZXM6W2loKFt7cHJvdmlkZTpfSCx1c2VFeGlzdGluZzpDSH1dKSxnbV0sbmdDb250ZW50U2VsZWN0b3JzOlsiKiIsIm1hdC1vcHRpb24sIG5nLWNvbnRhaW5lciJdLGRlY2xzOjQsdmFyczoyLGNvbnN0czpbWyJhcmlhLWhpZGRlbiIsInRydWUiLDEsIm1hdC1vcHRncm91cC1sYWJlbCIsMywiaWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKFZ1KFB6KSxPdSgwLCJzcGFuIiwwKSxNZigxKSxqdSgyKSxQdSgpLGp1KDMsMSkpLDImZSYmKHZ1KCJpZCIsbi5fbGFiZWxJZCksSmMoMSkseGYoIiIsbi5sYWJlbCwiICIpKX0sc3R5bGVzOlsiLm1hdC1vcHRncm91cC1sYWJlbHt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztsaW5lLWhlaWdodDo0OHB4O2hlaWdodDo0OHB4O3BhZGRpbmc6MCAxNnB4O3RleHQtYWxpZ246bGVmdDt0ZXh0LWRlY29yYXRpb246bm9uZTttYXgtd2lkdGg6MTAwJTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1vcHRncm91cC1sYWJlbFtkaXNhYmxlZF17Y3Vyc29yOmRlZmF1bHR9W2Rpcj1ydGxdIC5tYXQtb3B0Z3JvdXAtbGFiZWx7dGV4dC1hbGlnbjpyaWdodH0ubWF0LW9wdGdyb3VwLWxhYmVsIC5tYXQtaWNvbnttYXJnaW4tcmlnaHQ6MTZweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Lm1hdC1vcHRncm91cC1sYWJlbCAubWF0LWljb24gc3Zne3ZlcnRpY2FsLWFsaWduOnRvcH1bZGlyPXJ0bF0gLm1hdC1vcHRncm91cC1sYWJlbCAubWF0LWljb257bWFyZ2luLWxlZnQ6MTZweDttYXJnaW4tcmlnaHQ6MH1cbiJdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pO2NvbnN0IE1IPXZyKENIKTsoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKENILFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6Im1hdC1vcHRncm91cCIsZXhwb3J0QXM6Im1hdE9wdGdyb3VwIix0ZW1wbGF0ZTonPHNwYW4gY2xhc3M9Im1hdC1vcHRncm91cC1sYWJlbCIgYXJpYS1oaWRkZW49InRydWUiIFtpZF09Il9sYWJlbElkIj57eyBsYWJlbCB9fSA8bmctY29udGVudD48L25nLWNvbnRlbnQ+PC9zcGFuPlxuPG5nLWNvbnRlbnQgc2VsZWN0PSJtYXQtb3B0aW9uLCBuZy1jb250YWluZXIiPjwvbmctY29udGVudD5cbicsZW5jYXBzdWxhdGlvbjpQby5Ob25lLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2gsaW5wdXRzOlsiZGlzYWJsZWQiXSxob3N0OntjbGFzczoibWF0LW9wdGdyb3VwIiwiW2F0dHIucm9sZV0iOidfaW5lcnQgPyBudWxsIDogImdyb3VwIicsIlthdHRyLmFyaWEtZGlzYWJsZWRdIjoiX2luZXJ0ID8gbnVsbCA6IGRpc2FibGVkLnRvU3RyaW5nKCkiLCJbYXR0ci5hcmlhLWxhYmVsbGVkYnldIjoiX2luZXJ0ID8gbnVsbCA6IF9sYWJlbElkIiwiW2NsYXNzLm1hdC1vcHRncm91cC1kaXNhYmxlZF0iOiJkaXNhYmxlZCJ9LHByb3ZpZGVyczpbe3Byb3ZpZGU6X0gsdXNlRXhpc3Rpbmc6Q0h9XSxzdHlsZXM6WyIubWF0LW9wdGdyb3VwLWxhYmVse3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2xpbmUtaGVpZ2h0OjQ4cHg7aGVpZ2h0OjQ4cHg7cGFkZGluZzowIDE2cHg7dGV4dC1hbGlnbjpsZWZ0O3RleHQtZGVjb3JhdGlvbjpub25lO21heC13aWR0aDoxMDAlOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6ZGVmYXVsdH0ubWF0LW9wdGdyb3VwLWxhYmVsW2Rpc2FibGVkXXtjdXJzb3I6ZGVmYXVsdH1bZGlyPXJ0bF0gLm1hdC1vcHRncm91cC1sYWJlbHt0ZXh0LWFsaWduOnJpZ2h0fS5tYXQtb3B0Z3JvdXAtbGFiZWwgLm1hdC1pY29ue21hcmdpbi1yaWdodDoxNnB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0ubWF0LW9wdGdyb3VwLWxhYmVsIC5tYXQtaWNvbiBzdmd7dmVydGljYWwtYWxpZ246dG9wfVtkaXI9cnRsXSAubWF0LW9wdGdyb3VwLWxhYmVsIC5tYXQtaWNvbnttYXJnaW4tbGVmdDoxNnB4O21hcmdpbi1yaWdodDowfVxuIl19XX1dLG51bGwsbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpsZXQgdkg9MDtjbGFzcyB4SHtjb25zdHJ1Y3Rvcih0LGU9ITEpe3RoaXMuc291cmNlPXQsdGhpcy5pc1VzZXJJbnB1dD1lfX1jbGFzcyBPSHtjb25zdHJ1Y3Rvcih0LGUsbixvKXt0aGlzLl9lbGVtZW50PXQsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9ZSx0aGlzLl9wYXJlbnQ9bix0aGlzLmdyb3VwPW8sdGhpcy5fc2VsZWN0ZWQ9ITEsdGhpcy5fYWN0aXZlPSExLHRoaXMuX2Rpc2FibGVkPSExLHRoaXMuX21vc3RSZWNlbnRWaWV3VmFsdWU9IiIsdGhpcy5pZD0ibWF0LW9wdGlvbi0iK3ZIKyssdGhpcy5vblNlbGVjdGlvbkNoYW5nZT1uZXcgQWIsdGhpcy5fc3RhdGVDaGFuZ2VzPW5ldyB4fWdldCBtdWx0aXBsZSgpe3JldHVybiB0aGlzLl9wYXJlbnQmJnRoaXMuX3BhcmVudC5tdWx0aXBsZX1nZXQgc2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5fc2VsZWN0ZWR9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuZ3JvdXAmJnRoaXMuZ3JvdXAuZGlzYWJsZWR8fHRoaXMuX2Rpc2FibGVkfXNldCBkaXNhYmxlZCh0KXt0aGlzLl9kaXNhYmxlZD1ySSh0KX1nZXQgZGlzYWJsZVJpcHBsZSgpe3JldHVybiB0aGlzLl9wYXJlbnQmJnRoaXMuX3BhcmVudC5kaXNhYmxlUmlwcGxlfWdldCBhY3RpdmUoKXtyZXR1cm4gdGhpcy5fYWN0aXZlfWdldCB2aWV3VmFsdWUoKXtyZXR1cm4odGhpcy5fZ2V0SG9zdEVsZW1lbnQoKS50ZXh0Q29udGVudHx8IiIpLnRyaW0oKX1zZWxlY3QoKXt0aGlzLl9zZWxlY3RlZHx8KHRoaXMuX3NlbGVjdGVkPSEwLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRoaXMuX2VtaXRTZWxlY3Rpb25DaGFuZ2VFdmVudCgpKX1kZXNlbGVjdCgpe3RoaXMuX3NlbGVjdGVkJiYodGhpcy5fc2VsZWN0ZWQ9ITEsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCksdGhpcy5fZW1pdFNlbGVjdGlvbkNoYW5nZUV2ZW50KCkpfWZvY3VzKHQsZSl7Y29uc3Qgbj10aGlzLl9nZXRIb3N0RWxlbWVudCgpOyJmdW5jdGlvbiI9PXR5cGVvZiBuLmZvY3VzJiZuLmZvY3VzKGUpfXNldEFjdGl2ZVN0eWxlcygpe3RoaXMuX2FjdGl2ZXx8KHRoaXMuX2FjdGl2ZT0hMCx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9c2V0SW5hY3RpdmVTdHlsZXMoKXt0aGlzLl9hY3RpdmUmJih0aGlzLl9hY3RpdmU9ITEsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfWdldExhYmVsKCl7cmV0dXJuIHRoaXMudmlld1ZhbHVlfV9oYW5kbGVLZXlkb3duKHQpe3Qua2V5Q29kZSE9PXRJJiZ0LmtleUNvZGUhPT1uSXx8YUkodCl8fCh0aGlzLl9zZWxlY3RWaWFJbnRlcmFjdGlvbigpLHQucHJldmVudERlZmF1bHQoKSl9X3NlbGVjdFZpYUludGVyYWN0aW9uKCl7dGhpcy5kaXNhYmxlZHx8KHRoaXMuX3NlbGVjdGVkPSF0aGlzLm11bHRpcGxlfHwhdGhpcy5fc2VsZWN0ZWQsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCksdGhpcy5fZW1pdFNlbGVjdGlvbkNoYW5nZUV2ZW50KCEwKSl9X2dldEFyaWFTZWxlY3RlZCgpe3JldHVybiB0aGlzLnNlbGVjdGVkfHwhdGhpcy5tdWx0aXBsZSYmbnVsbH1fZ2V0VGFiSW5kZXgoKXtyZXR1cm4gdGhpcy5kaXNhYmxlZD8iLTEiOiIwIn1fZ2V0SG9zdEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50fW5nQWZ0ZXJWaWV3Q2hlY2tlZCgpe2lmKHRoaXMuX3NlbGVjdGVkKXtjb25zdCB0PXRoaXMudmlld1ZhbHVlO3QhPT10aGlzLl9tb3N0UmVjZW50Vmlld1ZhbHVlJiYodGhpcy5fbW9zdFJlY2VudFZpZXdWYWx1ZT10LHRoaXMuX3N0YXRlQ2hhbmdlcy5uZXh0KCkpfX1uZ09uRGVzdHJveSgpe3RoaXMuX3N0YXRlQ2hhbmdlcy5jb21wbGV0ZSgpfV9lbWl0U2VsZWN0aW9uQ2hhbmdlRXZlbnQodD0hMSl7dGhpcy5vblNlbGVjdGlvbkNoYW5nZS5lbWl0KG5ldyB4SCh0aGlzLHQpKX19T0guybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fE9IKShNdShjaCksTXUoSGgpLE11KHZvaWQgMCksTXUoeUgpKX0sT0guybVkaXI9Sm8oe3R5cGU6T0gsaW5wdXRzOntpZDoiaWQiLGRpc2FibGVkOiJkaXNhYmxlZCIsdmFsdWU6InZhbHVlIn0sb3V0cHV0czp7b25TZWxlY3Rpb25DaGFuZ2U6Im9uU2VsZWN0aW9uQ2hhbmdlIn19KSxPSC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmNofSx7dHlwZTpIaH0se3R5cGU6dm9pZCAwfSx7dHlwZTp5SH1dLE9ILnByb3BEZWNvcmF0b3JzPXt2YWx1ZTpbe3R5cGU6eV99XSxpZDpbe3R5cGU6eV99XSxkaXNhYmxlZDpbe3R5cGU6eV99XSxvblNlbGVjdGlvbkNoYW5nZTpbe3R5cGU6X199XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihPSCxbe3R5cGU6Z199XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Y2h9LHt0eXBlOkhofSx7dHlwZTp2b2lkIDB9LHt0eXBlOnlIfV19KSx7aWQ6W3t0eXBlOnlffV0sb25TZWxlY3Rpb25DaGFuZ2U6W3t0eXBlOl9ffV0sZGlzYWJsZWQ6W3t0eXBlOnlffV0sdmFsdWU6W3t0eXBlOnlffV19KTtjbGFzcyBQSCBleHRlbmRzIE9Ie2NvbnN0cnVjdG9yKHQsZSxuLG8pe3N1cGVyKHQsZSxuLG8pfX1mdW5jdGlvbiB3SCh0LGUsbil7aWYobi5sZW5ndGgpe2xldCBvPWUudG9BcnJheSgpLGk9bi50b0FycmF5KCksYT0wO2ZvcihsZXQgZT0wO2U8dCsxO2UrKylvW2VdLmdyb3VwJiZvW2VdLmdyb3VwPT09aVthXSYmYSsrO3JldHVybiBhfXJldHVybiAwfWZ1bmN0aW9uIGtIKHQsZSxuLG8pe3JldHVybiB0PG4/dDp0K2U+bitvP01hdGgubWF4KDAsdC1vK2UpOm59Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL1BILsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxQSCkoTXUoY2gpLE11KEhoKSxNdShnSCw4KSxNdShfSCw4KSl9LFBILsm1Y21wPVVvKHt0eXBlOlBILHNlbGVjdG9yczpbWyJtYXQtb3B0aW9uIl1dLGhvc3RBdHRyczpbInJvbGUiLCJvcHRpb24iLDEsIm1hdC1vcHRpb24iLCJtYXQtZm9jdXMtaW5kaWNhdG9yIl0saG9zdFZhcnM6MTIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJk51KCJjbGljayIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5fc2VsZWN0VmlhSW50ZXJhY3Rpb24oKX0pKSgia2V5ZG93biIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4uX2hhbmRsZUtleWRvd24oZSl9KSksMiZlJiYoa2YoImlkIixuLmlkKSxObSgidGFiaW5kZXgiLG4uX2dldFRhYkluZGV4KCkpKCJhcmlhLXNlbGVjdGVkIixuLl9nZXRBcmlhU2VsZWN0ZWQoKSkoImFyaWEtZGlzYWJsZWQiLG4uZGlzYWJsZWQudG9TdHJpbmcoKSksYWYoIm1hdC1zZWxlY3RlZCIsbi5zZWxlY3RlZCkoIm1hdC1vcHRpb24tbXVsdGlwbGUiLG4ubXVsdGlwbGUpKCJtYXQtYWN0aXZlIixuLmFjdGl2ZSkoIm1hdC1vcHRpb24tZGlzYWJsZWQiLG4uZGlzYWJsZWQpKX0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXSxmZWF0dXJlczpbZ21dLG5nQ29udGVudFNlbGVjdG9yczpbIioiXSxkZWNsczo1LHZhcnM6NCxjb25zdHM6W1siY2xhc3MiLCJtYXQtb3B0aW9uLXBzZXVkby1jaGVja2JveCIsMywic3RhdGUiLCJkaXNhYmxlZCIsNCwibmdJZiJdLFsxLCJtYXQtb3B0aW9uLXRleHQiXSxbImNsYXNzIiwiY2RrLXZpc3VhbGx5LWhpZGRlbiIsNCwibmdJZiJdLFsibWF0LXJpcHBsZSIsIiIsMSwibWF0LW9wdGlvbi1yaXBwbGUiLDMsIm1hdFJpcHBsZVRyaWdnZXIiLCJtYXRSaXBwbGVEaXNhYmxlZCJdLFsxLCJtYXQtb3B0aW9uLXBzZXVkby1jaGVja2JveCIsMywic3RhdGUiLCJkaXNhYmxlZCJdLFsxLCJjZGstdmlzdWFsbHktaGlkZGVuIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihWdSgpLFdtKDAsd3osMSwyLCJtYXQtcHNldWRvLWNoZWNrYm94IiwwKSxPdSgxLCJzcGFuIiwxKSxqdSgyKSxQdSgpLFdtKDMsa3osMiwxLCJzcGFuIiwyKSx3dSg0LCJkaXYiLDMpKSwyJmUmJih2dSgibmdJZiIsbi5tdWx0aXBsZSksSmMoMyksdnUoIm5nSWYiLG4uZ3JvdXAmJm4uZ3JvdXAuX2luZXJ0KSxKYygxKSx2dSgibWF0UmlwcGxlVHJpZ2dlciIsbi5fZ2V0SG9zdEVsZW1lbnQoKSkoIm1hdFJpcHBsZURpc2FibGVkIixuLmRpc2FibGVkfHxuLmRpc2FibGVSaXBwbGUpKX0sZGlyZWN0aXZlczpbYXYscEgsdUhdLHN0eWxlczpbIi5tYXQtb3B0aW9ue3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2xpbmUtaGVpZ2h0OjQ4cHg7aGVpZ2h0OjQ4cHg7cGFkZGluZzowIDE2cHg7dGV4dC1hbGlnbjpsZWZ0O3RleHQtZGVjb3JhdGlvbjpub25lO21heC13aWR0aDoxMDAlO3Bvc2l0aW9uOnJlbGF0aXZlO2N1cnNvcjpwb2ludGVyO291dGxpbmU6bm9uZTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O21heC13aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDthbGlnbi1pdGVtczpjZW50ZXI7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50fS5tYXQtb3B0aW9uW2Rpc2FibGVkXXtjdXJzb3I6ZGVmYXVsdH1bZGlyPXJ0bF0gLm1hdC1vcHRpb257dGV4dC1hbGlnbjpyaWdodH0ubWF0LW9wdGlvbiAubWF0LWljb257bWFyZ2luLXJpZ2h0OjE2cHg7dmVydGljYWwtYWxpZ246bWlkZGxlfS5tYXQtb3B0aW9uIC5tYXQtaWNvbiBzdmd7dmVydGljYWwtYWxpZ246dG9wfVtkaXI9cnRsXSAubWF0LW9wdGlvbiAubWF0LWljb257bWFyZ2luLWxlZnQ6MTZweDttYXJnaW4tcmlnaHQ6MH0ubWF0LW9wdGlvblthcmlhLWRpc2FibGVkPXRydWVdey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6ZGVmYXVsdH0ubWF0LW9wdGdyb3VwIC5tYXQtb3B0aW9uOm5vdCgubWF0LW9wdGlvbi1tdWx0aXBsZSl7cGFkZGluZy1sZWZ0OjMycHh9W2Rpcj1ydGxdIC5tYXQtb3B0Z3JvdXAgLm1hdC1vcHRpb246bm90KC5tYXQtb3B0aW9uLW11bHRpcGxlKXtwYWRkaW5nLWxlZnQ6MTZweDtwYWRkaW5nLXJpZ2h0OjMycHh9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LW9wdGlvbnttYXJnaW46MCAxcHh9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LW9wdGlvbi5tYXQtYWN0aXZle2JvcmRlcjpzb2xpZCAxcHggY3VycmVudENvbG9yO21hcmdpbjowfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1vcHRpb25bYXJpYS1kaXNhYmxlZD10cnVlXXtvcGFjaXR5Oi41fS5tYXQtb3B0aW9uLXRleHR7ZGlzcGxheTppbmxpbmUtYmxvY2s7ZmxleC1ncm93OjE7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9Lm1hdC1vcHRpb24gLm1hdC1vcHRpb24tcmlwcGxle3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmV9Lm1hdC1vcHRpb24tcHNldWRvLWNoZWNrYm94e21hcmdpbi1yaWdodDo4cHh9W2Rpcj1ydGxdIC5tYXQtb3B0aW9uLXBzZXVkby1jaGVja2JveHttYXJnaW4tbGVmdDo4cHg7bWFyZ2luLXJpZ2h0OjB9XG4iXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxQSC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmNofSx7dHlwZTpIaH0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltnSF19XX0se3R5cGU6Q0gsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W19IXX1dfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihQSCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJtYXQtb3B0aW9uIixleHBvcnRBczoibWF0T3B0aW9uIixob3N0Ontyb2xlOiJvcHRpb24iLCJbYXR0ci50YWJpbmRleF0iOiJfZ2V0VGFiSW5kZXgoKSIsIltjbGFzcy5tYXQtc2VsZWN0ZWRdIjoic2VsZWN0ZWQiLCJbY2xhc3MubWF0LW9wdGlvbi1tdWx0aXBsZV0iOiJtdWx0aXBsZSIsIltjbGFzcy5tYXQtYWN0aXZlXSI6ImFjdGl2ZSIsIltpZF0iOiJpZCIsIlthdHRyLmFyaWEtc2VsZWN0ZWRdIjoiX2dldEFyaWFTZWxlY3RlZCgpIiwiW2F0dHIuYXJpYS1kaXNhYmxlZF0iOiJkaXNhYmxlZC50b1N0cmluZygpIiwiW2NsYXNzLm1hdC1vcHRpb24tZGlzYWJsZWRdIjoiZGlzYWJsZWQiLCIoY2xpY2spIjoiX3NlbGVjdFZpYUludGVyYWN0aW9uKCkiLCIoa2V5ZG93bikiOiJfaGFuZGxlS2V5ZG93bigkZXZlbnQpIixjbGFzczoibWF0LW9wdGlvbiBtYXQtZm9jdXMtaW5kaWNhdG9yIn0sdGVtcGxhdGU6JzxtYXQtcHNldWRvLWNoZWNrYm94ICpuZ0lmPSJtdWx0aXBsZSIgY2xhc3M9Im1hdC1vcHRpb24tcHNldWRvLWNoZWNrYm94IlxuICAgIFtzdGF0ZV09InNlbGVjdGVkID8gXCdjaGVja2VkXCcgOiBcJ3VuY2hlY2tlZFwnIiBbZGlzYWJsZWRdPSJkaXNhYmxlZCI+PC9tYXQtcHNldWRvLWNoZWNrYm94PlxuXG48c3BhbiBjbGFzcz0ibWF0LW9wdGlvbi10ZXh0Ij48bmctY29udGVudD48L25nLWNvbnRlbnQ+PC9zcGFuPlxuXG5ceDNjIS0tIFNlZSBhMTF5IG5vdGVzIGluc2lkZSBvcHRncm91cC50cyBmb3IgY29udGV4dCBiZWhpbmQgdGhpcyBlbGVtZW50LiAtLVx4M2VcbjxzcGFuIGNsYXNzPSJjZGstdmlzdWFsbHktaGlkZGVuIiAqbmdJZj0iZ3JvdXAgJiYgZ3JvdXAuX2luZXJ0Ij4oe3sgZ3JvdXAubGFiZWwgfX0pPC9zcGFuPlxuXG48ZGl2IGNsYXNzPSJtYXQtb3B0aW9uLXJpcHBsZSIgbWF0LXJpcHBsZVxuICAgICBbbWF0UmlwcGxlVHJpZ2dlcl09Il9nZXRIb3N0RWxlbWVudCgpIlxuICAgICBbbWF0UmlwcGxlRGlzYWJsZWRdPSJkaXNhYmxlZCB8fCBkaXNhYmxlUmlwcGxlIj5cbjwvZGl2PlxuJyxlbmNhcHN1bGF0aW9uOlBvLk5vbmUsY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaCxzdHlsZXM6WyIubWF0LW9wdGlvbnt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztsaW5lLWhlaWdodDo0OHB4O2hlaWdodDo0OHB4O3BhZGRpbmc6MCAxNnB4O3RleHQtYWxpZ246bGVmdDt0ZXh0LWRlY29yYXRpb246bm9uZTttYXgtd2lkdGg6MTAwJTtwb3NpdGlvbjpyZWxhdGl2ZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOm5vbmU7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdzttYXgtd2lkdGg6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3g7YWxpZ24taXRlbXM6Y2VudGVyOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudH0ubWF0LW9wdGlvbltkaXNhYmxlZF17Y3Vyc29yOmRlZmF1bHR9W2Rpcj1ydGxdIC5tYXQtb3B0aW9ue3RleHQtYWxpZ246cmlnaHR9Lm1hdC1vcHRpb24gLm1hdC1pY29ue21hcmdpbi1yaWdodDoxNnB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0ubWF0LW9wdGlvbiAubWF0LWljb24gc3Zne3ZlcnRpY2FsLWFsaWduOnRvcH1bZGlyPXJ0bF0gLm1hdC1vcHRpb24gLm1hdC1pY29ue21hcmdpbi1sZWZ0OjE2cHg7bWFyZ2luLXJpZ2h0OjB9Lm1hdC1vcHRpb25bYXJpYS1kaXNhYmxlZD10cnVlXXstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1vcHRncm91cCAubWF0LW9wdGlvbjpub3QoLm1hdC1vcHRpb24tbXVsdGlwbGUpe3BhZGRpbmctbGVmdDozMnB4fVtkaXI9cnRsXSAubWF0LW9wdGdyb3VwIC5tYXQtb3B0aW9uOm5vdCgubWF0LW9wdGlvbi1tdWx0aXBsZSl7cGFkZGluZy1sZWZ0OjE2cHg7cGFkZGluZy1yaWdodDozMnB4fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1vcHRpb257bWFyZ2luOjAgMXB4fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1vcHRpb24ubWF0LWFjdGl2ZXtib3JkZXI6c29saWQgMXB4IGN1cnJlbnRDb2xvcjttYXJnaW46MH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtb3B0aW9uW2FyaWEtZGlzYWJsZWQ9dHJ1ZV17b3BhY2l0eTouNX0ubWF0LW9wdGlvbi10ZXh0e2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZsZXgtZ3JvdzoxO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS5tYXQtb3B0aW9uIC5tYXQtb3B0aW9uLXJpcHBsZXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czpub25lfS5tYXQtb3B0aW9uLXBzZXVkby1jaGVja2JveHttYXJnaW4tcmlnaHQ6OHB4fVtkaXI9cnRsXSAubWF0LW9wdGlvbi1wc2V1ZG8tY2hlY2tib3h7bWFyZ2luLWxlZnQ6OHB4O21hcmdpbi1yaWdodDowfVxuIl19XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpjaH0se3R5cGU6SGh9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbZ0hdfV19LHt0eXBlOkNILGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltfSF19XX1dfSksbnVsbCk7Y2xhc3MgU0h7fVNILsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxTSCl9LFNILsm1bW9kPVpvKHt0eXBlOlNIfSksU0guybVpbmo9Y28oe2ltcG9ydHM6W1ttSCxCdixUeixmSF1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhTSCx7ZGVjbGFyYXRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuW1BILENIXX0saW1wb3J0czpmdW5jdGlvbigpe3JldHVyblttSCxCdixUeixmSF19LGV4cG9ydHM6ZnVuY3Rpb24oKXtyZXR1cm5bUEgsQ0hdfX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoU0gsW3t0eXBlOmtfLGFyZ3M6W3tpbXBvcnRzOlttSCxCdixUeixmSF0sZXhwb3J0czpbUEgsQ0hdLGRlY2xhcmF0aW9uczpbUEgsQ0hdfV19XSxudWxsLG51bGwpO2NvbnN0IERIPVsibWF0LWJ1dHRvbiIsIiJdLEVIPVsiKiJdLEFIPSIubWF0LWJ1dHRvbiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5OjB9Lm1hdC1idXR0b246aG92ZXI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b246aG92ZXI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6LjA0fUBtZWRpYShob3Zlcjogbm9uZSl7Lm1hdC1idXR0b246aG92ZXI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b246aG92ZXI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6MH19Lm1hdC1idXR0b24sLm1hdC1pY29uLWJ1dHRvbiwubWF0LXN0cm9rZWQtYnV0dG9uLC5tYXQtZmxhdC1idXR0b257Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MDttaW4td2lkdGg6NjRweDtsaW5lLWhlaWdodDozNnB4O3BhZGRpbmc6MCAxNnB4O2JvcmRlci1yYWRpdXM6NHB4O292ZXJmbG93OnZpc2libGV9Lm1hdC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1pY29uLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LXN0cm9rZWQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtZmxhdC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWljb24tYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmxhdC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdH0ubWF0LWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWljb24tYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtZmxhdC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWZsYXQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi4xMn0ubWF0LWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LWljb24tYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtc3Ryb2tlZC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1mbGF0LWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LXJhaXNlZC1idXR0b257Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MDttaW4td2lkdGg6NjRweDtsaW5lLWhlaWdodDozNnB4O3BhZGRpbmc6MCAxNnB4O2JvcmRlci1yYWRpdXM6NHB4O292ZXJmbG93OnZpc2libGU7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsIDAsIDApO3RyYW5zaXRpb246YmFja2dyb3VuZCA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxib3gtc2hhZG93IDI4MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSl9Lm1hdC1yYWlzZWQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5tYXQtcmFpc2VkLWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtcmFpc2VkLWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouMTJ9Lm1hdC1yYWlzZWQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZS5tYXQtcmFpc2VkLWJ1dHRvbnt0cmFuc2l0aW9uOm5vbmU7YW5pbWF0aW9uOm5vbmV9Lm1hdC1zdHJva2VkLWJ1dHRvbntib3JkZXI6MXB4IHNvbGlkIGN1cnJlbnRDb2xvcjtwYWRkaW5nOjAgMTVweDtsaW5lLWhlaWdodDozNHB4fS5tYXQtc3Ryb2tlZC1idXR0b24gLm1hdC1idXR0b24tcmlwcGxlLm1hdC1yaXBwbGUsLm1hdC1zdHJva2VkLWJ1dHRvbiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e3RvcDotMXB4O2xlZnQ6LTFweDtyaWdodDotMXB4O2JvdHRvbTotMXB4fS5tYXQtZmFie2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb3NpdGlvbjpyZWxhdGl2ZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7Y3Vyc29yOnBvaW50ZXI7b3V0bGluZTpub25lO2JvcmRlcjpub25lOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDtkaXNwbGF5OmlubGluZS1ibG9jazt3aGl0ZS1zcGFjZTpub3dyYXA7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7dGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luOjA7bWluLXdpZHRoOjY0cHg7bGluZS1oZWlnaHQ6MzZweDtwYWRkaW5nOjAgMTZweDtib3JkZXItcmFkaXVzOjRweDtvdmVyZmxvdzp2aXNpYmxlO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLCAwLCAwKTt0cmFuc2l0aW9uOmJhY2tncm91bmQgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSksYm94LXNoYWRvdyAyODBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpO21pbi13aWR0aDowO2JvcmRlci1yYWRpdXM6NTAlO3dpZHRoOjU2cHg7aGVpZ2h0OjU2cHg7cGFkZGluZzowO2ZsZXgtc2hyaW5rOjB9Lm1hdC1mYWI6Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1mYWIubWF0LWJ1dHRvbi1kaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdH0ubWF0LWZhYi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtZmFiLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi4xMn0ubWF0LWZhYjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0uX21hdC1hbmltYXRpb24tbm9vcGFibGUubWF0LWZhYnt0cmFuc2l0aW9uOm5vbmU7YW5pbWF0aW9uOm5vbmV9Lm1hdC1mYWIgLm1hdC1idXR0b24td3JhcHBlcntwYWRkaW5nOjE2cHggMDtkaXNwbGF5OmlubGluZS1ibG9jaztsaW5lLWhlaWdodDoyNHB4fS5tYXQtbWluaS1mYWJ7Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MDttaW4td2lkdGg6NjRweDtsaW5lLWhlaWdodDozNnB4O3BhZGRpbmc6MCAxNnB4O2JvcmRlci1yYWRpdXM6NHB4O292ZXJmbG93OnZpc2libGU7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsIDAsIDApO3RyYW5zaXRpb246YmFja2dyb3VuZCA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxib3gtc2hhZG93IDI4MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7bWluLXdpZHRoOjA7Ym9yZGVyLXJhZGl1czo1MCU7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDtwYWRkaW5nOjA7ZmxleC1zaHJpbms6MH0ubWF0LW1pbmktZmFiOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtbWluaS1mYWIubWF0LWJ1dHRvbi1kaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdH0ubWF0LW1pbmktZmFiLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1taW5pLWZhYi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouMTJ9Lm1hdC1taW5pLWZhYjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0uX21hdC1hbmltYXRpb24tbm9vcGFibGUubWF0LW1pbmktZmFie3RyYW5zaXRpb246bm9uZTthbmltYXRpb246bm9uZX0ubWF0LW1pbmktZmFiIC5tYXQtYnV0dG9uLXdyYXBwZXJ7cGFkZGluZzo4cHggMDtkaXNwbGF5OmlubGluZS1ibG9jaztsaW5lLWhlaWdodDoyNHB4fS5tYXQtaWNvbi1idXR0b257cGFkZGluZzowO21pbi13aWR0aDowO3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7ZmxleC1zaHJpbms6MDtsaW5lLWhlaWdodDo0MHB4O2JvcmRlci1yYWRpdXM6NTAlfS5tYXQtaWNvbi1idXR0b24gaSwubWF0LWljb24tYnV0dG9uIC5tYXQtaWNvbntsaW5lLWhlaWdodDoyNHB4fS5tYXQtYnV0dG9uLXJpcHBsZS5tYXQtcmlwcGxlLC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6bm9uZTtib3JkZXItcmFkaXVzOmluaGVyaXR9Lm1hdC1idXR0b24tcmlwcGxlLm1hdC1yaXBwbGU6bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5OjA7dHJhbnNpdGlvbjpvcGFjaXR5IDIwMG1zIGN1YmljLWJlemllcigwLjM1LCAwLCAwLjI1LCAxKSxiYWNrZ3JvdW5kLWNvbG9yIDIwMG1zIGN1YmljLWJlemllcigwLjM1LCAwLCAwLjI1LCAxKX0uX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1idXR0b24tcmlwcGxlLXJvdW5ke2JvcmRlci1yYWRpdXM6NTAlO3otaW5kZXg6MX0ubWF0LWJ1dHRvbiAubWF0LWJ1dHRvbi13cmFwcGVyPiosLm1hdC1mbGF0LWJ1dHRvbiAubWF0LWJ1dHRvbi13cmFwcGVyPiosLm1hdC1zdHJva2VkLWJ1dHRvbiAubWF0LWJ1dHRvbi13cmFwcGVyPiosLm1hdC1yYWlzZWQtYnV0dG9uIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LWljb24tYnV0dG9uIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LWZhYiAubWF0LWJ1dHRvbi13cmFwcGVyPiosLm1hdC1taW5pLWZhYiAubWF0LWJ1dHRvbi13cmFwcGVyPip7dmVydGljYWwtYWxpZ246bWlkZGxlfS5tYXQtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5KSAubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbi1idXR0b24sLm1hdC1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kpIC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29uLWJ1dHRvbntkaXNwbGF5OmlubGluZS1mbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2ZvbnQtc2l6ZTppbmhlcml0O3dpZHRoOjIuNWVtO2hlaWdodDoyLjVlbX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYnV0dG9uLC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mbGF0LWJ1dHRvbiwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtcmFpc2VkLWJ1dHRvbiwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtaWNvbi1idXR0b24sLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZhYiwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtbWluaS1mYWJ7b3V0bGluZTpzb2xpZCAxcHh9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWJ1dHRvbi1iYXNlLmNkay1rZXlib2FyZC1mb2N1c2VkLC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1idXR0b24tYmFzZS5jZGstcHJvZ3JhbS1mb2N1c2Vke291dGxpbmU6c29saWQgM3B4fVxuIixSSD1bIm1hdC1idXR0b24iLCJtYXQtZmxhdC1idXR0b24iLCJtYXQtaWNvbi1idXR0b24iLCJtYXQtcmFpc2VkLWJ1dHRvbiIsIm1hdC1zdHJva2VkLWJ1dHRvbiIsIm1hdC1taW5pLWZhYiIsIm1hdC1mYWIiXSxUSD1JeihOeih6eihjbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLl9lbGVtZW50UmVmPXR9fSkpKTtjbGFzcyBOSCBleHRlbmRzIFRIe2NvbnN0cnVjdG9yKHQsZSxuKXtzdXBlcih0KSx0aGlzLl9mb2N1c01vbml0b3I9ZSx0aGlzLl9hbmltYXRpb25Nb2RlPW4sdGhpcy5pc1JvdW5kQnV0dG9uPXRoaXMuX2hhc0hvc3RBdHRyaWJ1dGVzKCJtYXQtZmFiIiwibWF0LW1pbmktZmFiIiksdGhpcy5pc0ljb25CdXR0b249dGhpcy5faGFzSG9zdEF0dHJpYnV0ZXMoIm1hdC1pY29uLWJ1dHRvbiIpO2Zvcihjb25zdCB0IG9mIFJIKXRoaXMuX2hhc0hvc3RBdHRyaWJ1dGVzKHQpJiZ0aGlzLl9nZXRIb3N0RWxlbWVudCgpLmNsYXNzTGlzdC5hZGQodCk7dC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoIm1hdC1idXR0b24tYmFzZSIpLHRoaXMuaXNSb3VuZEJ1dHRvbiYmKHRoaXMuY29sb3I9ImFjY2VudCIpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX2ZvY3VzTW9uaXRvci5tb25pdG9yKHRoaXMuX2VsZW1lbnRSZWYsITApfW5nT25EZXN0cm95KCl7dGhpcy5fZm9jdXNNb25pdG9yLnN0b3BNb25pdG9yaW5nKHRoaXMuX2VsZW1lbnRSZWYpfWZvY3VzKHQsZSl7dD90aGlzLl9mb2N1c01vbml0b3IuZm9jdXNWaWEodGhpcy5fZ2V0SG9zdEVsZW1lbnQoKSx0LGUpOnRoaXMuX2dldEhvc3RFbGVtZW50KCkuZm9jdXMoZSl9X2dldEhvc3RFbGVtZW50KCl7cmV0dXJuIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudH1faXNSaXBwbGVEaXNhYmxlZCgpe3JldHVybiB0aGlzLmRpc2FibGVSaXBwbGV8fHRoaXMuZGlzYWJsZWR9X2hhc0hvc3RBdHRyaWJ1dGVzKC4uLnQpe3JldHVybiB0LnNvbWUoKHQ9PnRoaXMuX2dldEhvc3RFbGVtZW50KCkuaGFzQXR0cmlidXRlKHQpKSl9fU5ILsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxOSCkoTXUoY2gpLE11KHB6KSxNdShOdyw4KSl9LE5ILsm1Y21wPVVvKHt0eXBlOk5ILHNlbGVjdG9yczpbWyJidXR0b24iLCJtYXQtYnV0dG9uIiwiIl0sWyJidXR0b24iLCJtYXQtcmFpc2VkLWJ1dHRvbiIsIiJdLFsiYnV0dG9uIiwibWF0LWljb24tYnV0dG9uIiwiIl0sWyJidXR0b24iLCJtYXQtZmFiIiwiIl0sWyJidXR0b24iLCJtYXQtbWluaS1mYWIiLCIiXSxbImJ1dHRvbiIsIm1hdC1zdHJva2VkLWJ1dHRvbiIsIiJdLFsiYnV0dG9uIiwibWF0LWZsYXQtYnV0dG9uIiwiIl1dLHZpZXdRdWVyeTpmdW5jdGlvbiB0KGUsbil7aWYoMSZlJiZXYihwSCwxKSwyJmUpe2xldCB0O1ViKHQ9WWIoKSkmJihuLnJpcHBsZT10LmZpcnN0KX19LGhvc3RBdHRyczpbMSwibWF0LWZvY3VzLWluZGljYXRvciJdLGhvc3RWYXJzOjUsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsyJmUmJihObSgiZGlzYWJsZWQiLG4uZGlzYWJsZWR8fG51bGwpLGFmKCJfbWF0LWFuaW1hdGlvbi1ub29wYWJsZSIsIk5vb3BBbmltYXRpb25zIj09PW4uX2FuaW1hdGlvbk1vZGUpKCJtYXQtYnV0dG9uLWRpc2FibGVkIixuLmRpc2FibGVkKSl9LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIixkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIixjb2xvcjoiY29sb3IifSxleHBvcnRBczpbIm1hdEJ1dHRvbiJdLGZlYXR1cmVzOltnbV0sYXR0cnM6REgsbmdDb250ZW50U2VsZWN0b3JzOkVILGRlY2xzOjQsdmFyczo1LGNvbnN0czpbWzEsIm1hdC1idXR0b24td3JhcHBlciJdLFsibWF0UmlwcGxlIiwiIiwxLCJtYXQtYnV0dG9uLXJpcHBsZSIsMywibWF0UmlwcGxlRGlzYWJsZWQiLCJtYXRSaXBwbGVDZW50ZXJlZCIsIm1hdFJpcHBsZVRyaWdnZXIiXSxbMSwibWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5Il1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihWdSgpLE91KDAsInNwYW4iLDApLGp1KDEpLFB1KCksd3UoMiwic3BhbiIsMSksd3UoMywic3BhbiIsMikpLDImZSYmKEpjKDIpLGFmKCJtYXQtYnV0dG9uLXJpcHBsZS1yb3VuZCIsbi5pc1JvdW5kQnV0dG9ufHxuLmlzSWNvbkJ1dHRvbiksdnUoIm1hdFJpcHBsZURpc2FibGVkIixuLl9pc1JpcHBsZURpc2FibGVkKCkpKCJtYXRSaXBwbGVDZW50ZXJlZCIsbi5pc0ljb25CdXR0b24pKCJtYXRSaXBwbGVUcmlnZ2VyIixuLl9nZXRIb3N0RWxlbWVudCgpKSl9LGRpcmVjdGl2ZXM6W3BIXSxzdHlsZXM6W0FIXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxOSC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmNofSx7dHlwZTpwen0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltOd119XX1dLE5ILnByb3BEZWNvcmF0b3JzPXtyaXBwbGU6W3t0eXBlOkZyLGFyZ3M6W3BIXX1dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKE5ILFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6ImJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1pY29uLWJ1dHRvbl0sXG4gICAgICAgICAgICAgYnV0dG9uW21hdC1mYWJdLCBidXR0b25bbWF0LW1pbmktZmFiXSwgYnV0dG9uW21hdC1zdHJva2VkLWJ1dHRvbl0sXG4gICAgICAgICAgICAgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0iLGV4cG9ydEFzOiJtYXRCdXR0b24iLGhvc3Q6eyJbYXR0ci5kaXNhYmxlZF0iOiJkaXNhYmxlZCB8fCBudWxsIiwiW2NsYXNzLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlXSI6J19hbmltYXRpb25Nb2RlID09PSAiTm9vcEFuaW1hdGlvbnMiJywiW2NsYXNzLm1hdC1idXR0b24tZGlzYWJsZWRdIjoiZGlzYWJsZWQiLGNsYXNzOiJtYXQtZm9jdXMtaW5kaWNhdG9yIn0sdGVtcGxhdGU6JzxzcGFuIGNsYXNzPSJtYXQtYnV0dG9uLXdyYXBwZXIiPjxuZy1jb250ZW50PjwvbmctY29udGVudD48L3NwYW4+XG48c3BhbiBtYXRSaXBwbGUgY2xhc3M9Im1hdC1idXR0b24tcmlwcGxlIlxuICAgICAgW2NsYXNzLm1hdC1idXR0b24tcmlwcGxlLXJvdW5kXT0iaXNSb3VuZEJ1dHRvbiB8fCBpc0ljb25CdXR0b24iXG4gICAgICBbbWF0UmlwcGxlRGlzYWJsZWRdPSJfaXNSaXBwbGVEaXNhYmxlZCgpIlxuICAgICAgW21hdFJpcHBsZUNlbnRlcmVkXT0iaXNJY29uQnV0dG9uIlxuICAgICAgW21hdFJpcHBsZVRyaWdnZXJdPSJfZ2V0SG9zdEVsZW1lbnQoKSI+PC9zcGFuPlxuPHNwYW4gY2xhc3M9Im1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSI+PC9zcGFuPlxuJyxpbnB1dHM6WyJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJjb2xvciJdLGVuY2Fwc3VsYXRpb246UG8uTm9uZSxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNoLHN0eWxlczpbIi5tYXQtYnV0dG9uIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6MH0ubWF0LWJ1dHRvbjpob3Zlcjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbjpob3Zlcjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouMDR9QG1lZGlhKGhvdmVyOiBub25lKXsubWF0LWJ1dHRvbjpob3Zlcjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbjpob3Zlcjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTowfX0ubWF0LWJ1dHRvbiwubWF0LWljb24tYnV0dG9uLC5tYXQtc3Ryb2tlZC1idXR0b24sLm1hdC1mbGF0LWJ1dHRvbntib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpwb2ludGVyO291dGxpbmU6bm9uZTtib3JkZXI6bm9uZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjowO21pbi13aWR0aDo2NHB4O2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7Ym9yZGVyLXJhZGl1czo0cHg7b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LWljb24tYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtc3Ryb2tlZC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1mbGF0LWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtaWNvbi1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5tYXQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWljb24tYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXN0cm9rZWQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1mbGF0LWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtZmxhdC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6LjEyfS5tYXQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtaWNvbi1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1zdHJva2VkLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LWZsYXQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtcmFpc2VkLWJ1dHRvbntib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpwb2ludGVyO291dGxpbmU6bm9uZTtib3JkZXI6bm9uZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjowO21pbi13aWR0aDo2NHB4O2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7Ym9yZGVyLXJhZGl1czo0cHg7b3ZlcmZsb3c6dmlzaWJsZTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJveC1zaGFkb3cgMjgwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKX0ubWF0LXJhaXNlZC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1yYWlzZWQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1yYWlzZWQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi4xMn0ubWF0LXJhaXNlZC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlLm1hdC1yYWlzZWQtYnV0dG9ue3RyYW5zaXRpb246bm9uZTthbmltYXRpb246bm9uZX0ubWF0LXN0cm9rZWQtYnV0dG9ue2JvcmRlcjoxcHggc29saWQgY3VycmVudENvbG9yO3BhZGRpbmc6MCAxNXB4O2xpbmUtaGVpZ2h0OjM0cHh9Lm1hdC1zdHJva2VkLWJ1dHRvbiAubWF0LWJ1dHRvbi1yaXBwbGUubWF0LXJpcHBsZSwubWF0LXN0cm9rZWQtYnV0dG9uIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7dG9wOi0xcHg7bGVmdDotMXB4O3JpZ2h0Oi0xcHg7Ym90dG9tOi0xcHh9Lm1hdC1mYWJ7Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MDttaW4td2lkdGg6NjRweDtsaW5lLWhlaWdodDozNnB4O3BhZGRpbmc6MCAxNnB4O2JvcmRlci1yYWRpdXM6NHB4O292ZXJmbG93OnZpc2libGU7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsIDAsIDApO3RyYW5zaXRpb246YmFja2dyb3VuZCA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxib3gtc2hhZG93IDI4MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7bWluLXdpZHRoOjA7Ym9yZGVyLXJhZGl1czo1MCU7d2lkdGg6NTZweDtoZWlnaHQ6NTZweDtwYWRkaW5nOjA7ZmxleC1zaHJpbms6MH0ubWF0LWZhYjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LWZhYi5tYXQtYnV0dG9uLWRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5tYXQtZmFiLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1mYWIuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6LjEyfS5tYXQtZmFiOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZS5tYXQtZmFie3RyYW5zaXRpb246bm9uZTthbmltYXRpb246bm9uZX0ubWF0LWZhYiAubWF0LWJ1dHRvbi13cmFwcGVye3BhZGRpbmc6MTZweCAwO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1taW5pLWZhYntib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpwb2ludGVyO291dGxpbmU6bm9uZTtib3JkZXI6bm9uZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjowO21pbi13aWR0aDo2NHB4O2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7Ym9yZGVyLXJhZGl1czo0cHg7b3ZlcmZsb3c6dmlzaWJsZTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJveC1zaGFkb3cgMjgwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTttaW4td2lkdGg6MDtib3JkZXItcmFkaXVzOjUwJTt3aWR0aDo0MHB4O2hlaWdodDo0MHB4O3BhZGRpbmc6MDtmbGV4LXNocmluazowfS5tYXQtbWluaS1mYWI6Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1taW5pLWZhYi5tYXQtYnV0dG9uLWRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5tYXQtbWluaS1mYWIuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LW1pbmktZmFiLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi4xMn0ubWF0LW1pbmktZmFiOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZS5tYXQtbWluaS1mYWJ7dHJhbnNpdGlvbjpub25lO2FuaW1hdGlvbjpub25lfS5tYXQtbWluaS1mYWIgLm1hdC1idXR0b24td3JhcHBlcntwYWRkaW5nOjhweCAwO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1pY29uLWJ1dHRvbntwYWRkaW5nOjA7bWluLXdpZHRoOjA7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDtmbGV4LXNocmluazowO2xpbmUtaGVpZ2h0OjQwcHg7Ym9yZGVyLXJhZGl1czo1MCV9Lm1hdC1pY29uLWJ1dHRvbiBpLC5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29ue2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1idXR0b24tcmlwcGxlLm1hdC1yaXBwbGUsLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czpub25lO2JvcmRlci1yYWRpdXM6aW5oZXJpdH0ubWF0LWJ1dHRvbi1yaXBwbGUubWF0LXJpcHBsZTpub3QoOmVtcHR5KXt0cmFuc2Zvcm06dHJhbnNsYXRlWigwKX0ubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgMjAwbXMgY3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuMjUsIDEpLGJhY2tncm91bmQtY29sb3IgMjAwbXMgY3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuMjUsIDEpfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e3RyYW5zaXRpb246bm9uZX0ubWF0LWJ1dHRvbi1yaXBwbGUtcm91bmR7Ym9yZGVyLXJhZGl1czo1MCU7ei1pbmRleDoxfS5tYXQtYnV0dG9uIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LWZsYXQtYnV0dG9uIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LXN0cm9rZWQtYnV0dG9uIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LXJhaXNlZC1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtaWNvbi1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtZmFiIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LW1pbmktZmFiIC5tYXQtYnV0dG9uLXdyYXBwZXI+Knt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Lm1hdC1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kpIC5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLWJ1dHRvbiwubWF0LWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSkgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb24tYnV0dG9ue2Rpc3BsYXk6aW5saW5lLWZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7Zm9udC1zaXplOmluaGVyaXQ7d2lkdGg6Mi41ZW07aGVpZ2h0OjIuNWVtfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1idXR0b24sLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZsYXQtYnV0dG9uLC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1yYWlzZWQtYnV0dG9uLC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1pY29uLWJ1dHRvbiwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtZmFiLC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1taW5pLWZhYntvdXRsaW5lOnNvbGlkIDFweH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYnV0dG9uLWJhc2UuY2RrLWtleWJvYXJkLWZvY3VzZWQsLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWJ1dHRvbi1iYXNlLmNkay1wcm9ncmFtLWZvY3VzZWR7b3V0bGluZTpzb2xpZCAzcHh9XG4iXX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmNofSx7dHlwZTpwen0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltOd119XX1dfSkse3JpcHBsZTpbe3R5cGU6RnIsYXJnczpbcEhdfV19KTtjbGFzcyBJSCBleHRlbmRzIE5Ie2NvbnN0cnVjdG9yKHQsZSxuKXtzdXBlcihlLHQsbil9X2hhbHREaXNhYmxlZEV2ZW50cyh0KXt0aGlzLmRpc2FibGVkJiYodC5wcmV2ZW50RGVmYXVsdCgpLHQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCkpfX1JSC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8SUgpKE11KHB6KSxNdShjaCksTXUoTncsOCkpfSxJSC7JtWNtcD1Vbyh7dHlwZTpJSCxzZWxlY3RvcnM6W1siYSIsIm1hdC1idXR0b24iLCIiXSxbImEiLCJtYXQtcmFpc2VkLWJ1dHRvbiIsIiJdLFsiYSIsIm1hdC1pY29uLWJ1dHRvbiIsIiJdLFsiYSIsIm1hdC1mYWIiLCIiXSxbImEiLCJtYXQtbWluaS1mYWIiLCIiXSxbImEiLCJtYXQtc3Ryb2tlZC1idXR0b24iLCIiXSxbImEiLCJtYXQtZmxhdC1idXR0b24iLCIiXV0saG9zdEF0dHJzOlsxLCJtYXQtZm9jdXMtaW5kaWNhdG9yIl0saG9zdFZhcnM6Nyxob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezEmZSYmTnUoImNsaWNrIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5faGFsdERpc2FibGVkRXZlbnRzKGUpfSkpLDImZSYmKE5tKCJ0YWJpbmRleCIsbi5kaXNhYmxlZD8tMTpuLnRhYkluZGV4fHwwKSgiZGlzYWJsZWQiLG4uZGlzYWJsZWR8fG51bGwpKCJhcmlhLWRpc2FibGVkIixuLmRpc2FibGVkLnRvU3RyaW5nKCkpLGFmKCJfbWF0LWFuaW1hdGlvbi1ub29wYWJsZSIsIk5vb3BBbmltYXRpb25zIj09PW4uX2FuaW1hdGlvbk1vZGUpKCJtYXQtYnV0dG9uLWRpc2FibGVkIixuLmRpc2FibGVkKSl9LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIixkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIixjb2xvcjoiY29sb3IiLHRhYkluZGV4OiJ0YWJJbmRleCJ9LGV4cG9ydEFzOlsibWF0QnV0dG9uIiwibWF0QW5jaG9yIl0sZmVhdHVyZXM6W2dtXSxhdHRyczpESCxuZ0NvbnRlbnRTZWxlY3RvcnM6RUgsZGVjbHM6NCx2YXJzOjUsY29uc3RzOltbMSwibWF0LWJ1dHRvbi13cmFwcGVyIl0sWyJtYXRSaXBwbGUiLCIiLDEsIm1hdC1idXR0b24tcmlwcGxlIiwzLCJtYXRSaXBwbGVEaXNhYmxlZCIsIm1hdFJpcHBsZUNlbnRlcmVkIiwibWF0UmlwcGxlVHJpZ2dlciJdLFsxLCJtYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXkiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKFZ1KCksT3UoMCwic3BhbiIsMCksanUoMSksUHUoKSx3dSgyLCJzcGFuIiwxKSx3dSgzLCJzcGFuIiwyKSksMiZlJiYoSmMoMiksYWYoIm1hdC1idXR0b24tcmlwcGxlLXJvdW5kIixuLmlzUm91bmRCdXR0b258fG4uaXNJY29uQnV0dG9uKSx2dSgibWF0UmlwcGxlRGlzYWJsZWQiLG4uX2lzUmlwcGxlRGlzYWJsZWQoKSkoIm1hdFJpcHBsZUNlbnRlcmVkIixuLmlzSWNvbkJ1dHRvbikoIm1hdFJpcHBsZVRyaWdnZXIiLG4uX2dldEhvc3RFbGVtZW50KCkpKX0sZGlyZWN0aXZlczpbcEhdLHN0eWxlczpbQUhdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLElILmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6cHp9LHt0eXBlOmNofSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W053XX1dfV0sSUgucHJvcERlY29yYXRvcnM9e3RhYkluZGV4Olt7dHlwZTp5X31dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKElILFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6ImFbbWF0LWJ1dHRvbl0sIGFbbWF0LXJhaXNlZC1idXR0b25dLCBhW21hdC1pY29uLWJ1dHRvbl0sIGFbbWF0LWZhYl0sXG4gICAgICAgICAgICAgYVttYXQtbWluaS1mYWJdLCBhW21hdC1zdHJva2VkLWJ1dHRvbl0sIGFbbWF0LWZsYXQtYnV0dG9uXSIsZXhwb3J0QXM6Im1hdEJ1dHRvbiwgbWF0QW5jaG9yIixob3N0OnsiW2F0dHIudGFiaW5kZXhdIjoiZGlzYWJsZWQgPyAtMSA6ICh0YWJJbmRleCB8fCAwKSIsIlthdHRyLmRpc2FibGVkXSI6ImRpc2FibGVkIHx8IG51bGwiLCJbYXR0ci5hcmlhLWRpc2FibGVkXSI6ImRpc2FibGVkLnRvU3RyaW5nKCkiLCIoY2xpY2spIjoiX2hhbHREaXNhYmxlZEV2ZW50cygkZXZlbnQpIiwiW2NsYXNzLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlXSI6J19hbmltYXRpb25Nb2RlID09PSAiTm9vcEFuaW1hdGlvbnMiJywiW2NsYXNzLm1hdC1idXR0b24tZGlzYWJsZWRdIjoiZGlzYWJsZWQiLGNsYXNzOiJtYXQtZm9jdXMtaW5kaWNhdG9yIn0saW5wdXRzOlsiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwiY29sb3IiXSx0ZW1wbGF0ZTonPHNwYW4gY2xhc3M9Im1hdC1idXR0b24td3JhcHBlciI+PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50Pjwvc3Bhbj5cbjxzcGFuIG1hdFJpcHBsZSBjbGFzcz0ibWF0LWJ1dHRvbi1yaXBwbGUiXG4gICAgICBbY2xhc3MubWF0LWJ1dHRvbi1yaXBwbGUtcm91bmRdPSJpc1JvdW5kQnV0dG9uIHx8IGlzSWNvbkJ1dHRvbiJcbiAgICAgIFttYXRSaXBwbGVEaXNhYmxlZF09Il9pc1JpcHBsZURpc2FibGVkKCkiXG4gICAgICBbbWF0UmlwcGxlQ2VudGVyZWRdPSJpc0ljb25CdXR0b24iXG4gICAgICBbbWF0UmlwcGxlVHJpZ2dlcl09Il9nZXRIb3N0RWxlbWVudCgpIj48L3NwYW4+XG48c3BhbiBjbGFzcz0ibWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5Ij48L3NwYW4+XG4nLGVuY2Fwc3VsYXRpb246UG8uTm9uZSxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNoLHN0eWxlczpbIi5tYXQtYnV0dG9uIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6MH0ubWF0LWJ1dHRvbjpob3Zlcjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbjpob3Zlcjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouMDR9QG1lZGlhKGhvdmVyOiBub25lKXsubWF0LWJ1dHRvbjpob3Zlcjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbjpob3Zlcjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTowfX0ubWF0LWJ1dHRvbiwubWF0LWljb24tYnV0dG9uLC5tYXQtc3Ryb2tlZC1idXR0b24sLm1hdC1mbGF0LWJ1dHRvbntib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpwb2ludGVyO291dGxpbmU6bm9uZTtib3JkZXI6bm9uZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjowO21pbi13aWR0aDo2NHB4O2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7Ym9yZGVyLXJhZGl1czo0cHg7b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LWljb24tYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtc3Ryb2tlZC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1mbGF0LWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtaWNvbi1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5tYXQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWljb24tYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXN0cm9rZWQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1mbGF0LWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtZmxhdC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6LjEyfS5tYXQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtaWNvbi1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1zdHJva2VkLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LWZsYXQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtcmFpc2VkLWJ1dHRvbntib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpwb2ludGVyO291dGxpbmU6bm9uZTtib3JkZXI6bm9uZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjowO21pbi13aWR0aDo2NHB4O2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7Ym9yZGVyLXJhZGl1czo0cHg7b3ZlcmZsb3c6dmlzaWJsZTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJveC1zaGFkb3cgMjgwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKX0ubWF0LXJhaXNlZC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1yYWlzZWQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1yYWlzZWQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi4xMn0ubWF0LXJhaXNlZC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlLm1hdC1yYWlzZWQtYnV0dG9ue3RyYW5zaXRpb246bm9uZTthbmltYXRpb246bm9uZX0ubWF0LXN0cm9rZWQtYnV0dG9ue2JvcmRlcjoxcHggc29saWQgY3VycmVudENvbG9yO3BhZGRpbmc6MCAxNXB4O2xpbmUtaGVpZ2h0OjM0cHh9Lm1hdC1zdHJva2VkLWJ1dHRvbiAubWF0LWJ1dHRvbi1yaXBwbGUubWF0LXJpcHBsZSwubWF0LXN0cm9rZWQtYnV0dG9uIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7dG9wOi0xcHg7bGVmdDotMXB4O3JpZ2h0Oi0xcHg7Ym90dG9tOi0xcHh9Lm1hdC1mYWJ7Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MDttaW4td2lkdGg6NjRweDtsaW5lLWhlaWdodDozNnB4O3BhZGRpbmc6MCAxNnB4O2JvcmRlci1yYWRpdXM6NHB4O292ZXJmbG93OnZpc2libGU7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsIDAsIDApO3RyYW5zaXRpb246YmFja2dyb3VuZCA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxib3gtc2hhZG93IDI4MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7bWluLXdpZHRoOjA7Ym9yZGVyLXJhZGl1czo1MCU7d2lkdGg6NTZweDtoZWlnaHQ6NTZweDtwYWRkaW5nOjA7ZmxleC1zaHJpbms6MH0ubWF0LWZhYjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LWZhYi5tYXQtYnV0dG9uLWRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5tYXQtZmFiLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1mYWIuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6LjEyfS5tYXQtZmFiOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZS5tYXQtZmFie3RyYW5zaXRpb246bm9uZTthbmltYXRpb246bm9uZX0ubWF0LWZhYiAubWF0LWJ1dHRvbi13cmFwcGVye3BhZGRpbmc6MTZweCAwO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1taW5pLWZhYntib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpwb2ludGVyO291dGxpbmU6bm9uZTtib3JkZXI6bm9uZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjowO21pbi13aWR0aDo2NHB4O2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7Ym9yZGVyLXJhZGl1czo0cHg7b3ZlcmZsb3c6dmlzaWJsZTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJveC1zaGFkb3cgMjgwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTttaW4td2lkdGg6MDtib3JkZXItcmFkaXVzOjUwJTt3aWR0aDo0MHB4O2hlaWdodDo0MHB4O3BhZGRpbmc6MDtmbGV4LXNocmluazowfS5tYXQtbWluaS1mYWI6Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1taW5pLWZhYi5tYXQtYnV0dG9uLWRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5tYXQtbWluaS1mYWIuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LW1pbmktZmFiLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi4xMn0ubWF0LW1pbmktZmFiOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZS5tYXQtbWluaS1mYWJ7dHJhbnNpdGlvbjpub25lO2FuaW1hdGlvbjpub25lfS5tYXQtbWluaS1mYWIgLm1hdC1idXR0b24td3JhcHBlcntwYWRkaW5nOjhweCAwO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1pY29uLWJ1dHRvbntwYWRkaW5nOjA7bWluLXdpZHRoOjA7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDtmbGV4LXNocmluazowO2xpbmUtaGVpZ2h0OjQwcHg7Ym9yZGVyLXJhZGl1czo1MCV9Lm1hdC1pY29uLWJ1dHRvbiBpLC5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29ue2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1idXR0b24tcmlwcGxlLm1hdC1yaXBwbGUsLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czpub25lO2JvcmRlci1yYWRpdXM6aW5oZXJpdH0ubWF0LWJ1dHRvbi1yaXBwbGUubWF0LXJpcHBsZTpub3QoOmVtcHR5KXt0cmFuc2Zvcm06dHJhbnNsYXRlWigwKX0ubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgMjAwbXMgY3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuMjUsIDEpLGJhY2tncm91bmQtY29sb3IgMjAwbXMgY3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuMjUsIDEpfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e3RyYW5zaXRpb246bm9uZX0ubWF0LWJ1dHRvbi1yaXBwbGUtcm91bmR7Ym9yZGVyLXJhZGl1czo1MCU7ei1pbmRleDoxfS5tYXQtYnV0dG9uIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LWZsYXQtYnV0dG9uIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LXN0cm9rZWQtYnV0dG9uIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LXJhaXNlZC1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtaWNvbi1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtZmFiIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LW1pbmktZmFiIC5tYXQtYnV0dG9uLXdyYXBwZXI+Knt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Lm1hdC1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kpIC5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLWJ1dHRvbiwubWF0LWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSkgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb24tYnV0dG9ue2Rpc3BsYXk6aW5saW5lLWZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7Zm9udC1zaXplOmluaGVyaXQ7d2lkdGg6Mi41ZW07aGVpZ2h0OjIuNWVtfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1idXR0b24sLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZsYXQtYnV0dG9uLC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1yYWlzZWQtYnV0dG9uLC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1pY29uLWJ1dHRvbiwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtZmFiLC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1taW5pLWZhYntvdXRsaW5lOnNvbGlkIDFweH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYnV0dG9uLWJhc2UuY2RrLWtleWJvYXJkLWZvY3VzZWQsLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWJ1dHRvbi1iYXNlLmNkay1wcm9ncmFtLWZvY3VzZWR7b3V0bGluZTpzb2xpZCAzcHh9XG4iXX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOnB6fSx7dHlwZTpjaH0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltOd119XX1dfSkse3RhYkluZGV4Olt7dHlwZTp5X31dfSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyB6SHt9ekguybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHpIKX0sekguybVtb2Q9Wm8oe3R5cGU6ekh9KSx6SC7JtWluaj1jbyh7aW1wb3J0czpbW21ILFR6XSxUel19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKHpILHtkZWNsYXJhdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm5bTkgsSUhdfSxpbXBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW21ILFR6XX0sZXhwb3J0czpmdW5jdGlvbigpe3JldHVybltOSCxJSCxUel19fSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYih6SCxbe3R5cGU6a18sYXJnczpbe2ltcG9ydHM6W21ILFR6XSxleHBvcnRzOltOSCxJSCxUel0sZGVjbGFyYXRpb25zOltOSCxJSF19XX1dLG51bGwsbnVsbCk7Y2xhc3MgSEh7fWZ1bmN0aW9uIEZIKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgdC5jb25uZWN0fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jbGFzcyBMSCBleHRlbmRzIEhIe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5fZGF0YT10fWNvbm5lY3QoKXtyZXR1cm4gdXQodGhpcy5fZGF0YSk/dGhpcy5fZGF0YTpaKHRoaXMuX2RhdGEpfWRpc2Nvbm5lY3QoKXt9fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY2xhc3MgQkh7YXBwbHlDaGFuZ2VzKHQsZSxuLG8saSl7dC5mb3JFYWNoT3BlcmF0aW9uKCgodCxvLGEpPT57bGV0IHIscztpZihudWxsPT10LnByZXZpb3VzSW5kZXgpe2NvbnN0IGk9bih0LG8sYSk7cj1lLmNyZWF0ZUVtYmVkZGVkVmlldyhpLnRlbXBsYXRlUmVmLGkuY29udGV4dCxpLmluZGV4KSxzPTF9ZWxzZSBudWxsPT1hPyhlLnJlbW92ZShvKSxzPTMpOihyPWUuZ2V0KG8pLGUubW92ZShyLGEpLHM9Mik7aSYmaSh7Y29udGV4dDpudWxsPT1yP3ZvaWQgMDpyLmNvbnRleHQsb3BlcmF0aW9uOnMscmVjb3JkOnR9KX0pKX1kZXRhY2goKXt9fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jbGFzcyBWSHtjb25zdHJ1Y3Rvcigpe3RoaXMudmlld0NhY2hlU2l6ZT0yMCx0aGlzLl92aWV3Q2FjaGU9W119YXBwbHlDaGFuZ2VzKHQsZSxuLG8saSl7dC5mb3JFYWNoT3BlcmF0aW9uKCgodCxhLHIpPT57bGV0IHMsbDtudWxsPT10LnByZXZpb3VzSW5kZXg/KHM9dGhpcy5faW5zZXJ0VmlldygoKCk9Pm4odCxhLHIpKSxyLGUsbyh0KSksbD1zPzE6MCk6bnVsbD09cj8odGhpcy5fZGV0YWNoQW5kQ2FjaGVWaWV3KGEsZSksbD0zKToocz10aGlzLl9tb3ZlVmlldyhhLHIsZSxvKHQpKSxsPTIpLGkmJmkoe2NvbnRleHQ6bnVsbD09cz92b2lkIDA6cy5jb250ZXh0LG9wZXJhdGlvbjpsLHJlY29yZDp0fSl9KSl9ZGV0YWNoKCl7Zm9yKGNvbnN0IHQgb2YgdGhpcy5fdmlld0NhY2hlKXQuZGVzdHJveSgpO3RoaXMuX3ZpZXdDYWNoZT1bXX1faW5zZXJ0Vmlldyh0LGUsbixvKXtjb25zdCBpPXRoaXMuX2luc2VydFZpZXdGcm9tQ2FjaGUoZSxuKTtpZihpKXJldHVybiB2b2lkKGkuY29udGV4dC4kaW1wbGljaXQ9byk7Y29uc3QgYT10KCk7cmV0dXJuIG4uY3JlYXRlRW1iZWRkZWRWaWV3KGEudGVtcGxhdGVSZWYsYS5jb250ZXh0LGEuaW5kZXgpfV9kZXRhY2hBbmRDYWNoZVZpZXcodCxlKXtjb25zdCBuPWUuZGV0YWNoKHQpO3RoaXMuX21heWJlQ2FjaGVWaWV3KG4sZSl9X21vdmVWaWV3KHQsZSxuLG8pe2NvbnN0IGk9bi5nZXQodCk7cmV0dXJuIG4ubW92ZShpLGUpLGkuY29udGV4dC4kaW1wbGljaXQ9byxpfV9tYXliZUNhY2hlVmlldyh0LGUpe2lmKHRoaXMuX3ZpZXdDYWNoZS5sZW5ndGg8dGhpcy52aWV3Q2FjaGVTaXplKXRoaXMuX3ZpZXdDYWNoZS5wdXNoKHQpO2Vsc2V7Y29uc3Qgbj1lLmluZGV4T2YodCk7LTE9PT1uP3QuZGVzdHJveSgpOmUucmVtb3ZlKG4pfX1faW5zZXJ0Vmlld0Zyb21DYWNoZSh0LGUpe2NvbnN0IG49dGhpcy5fdmlld0NhY2hlLnBvcCgpO3JldHVybiBuJiZlLmluc2VydChuLHQpLG58fG51bGx9fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jbGFzcyBqSHtjb25zdHJ1Y3Rvcih0PSExLGUsbj0hMCl7dGhpcy5fbXVsdGlwbGU9dCx0aGlzLl9lbWl0Q2hhbmdlcz1uLHRoaXMuX3NlbGVjdGlvbj1uZXcgU2V0LHRoaXMuX2Rlc2VsZWN0ZWRUb0VtaXQ9W10sdGhpcy5fc2VsZWN0ZWRUb0VtaXQ9W10sdGhpcy5jaGFuZ2VkPW5ldyB4LGUmJmUubGVuZ3RoJiYodD9lLmZvckVhY2goKHQ9PnRoaXMuX21hcmtTZWxlY3RlZCh0KSkpOnRoaXMuX21hcmtTZWxlY3RlZChlWzBdKSx0aGlzLl9zZWxlY3RlZFRvRW1pdC5sZW5ndGg9MCl9Z2V0IHNlbGVjdGVkKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGVkfHwodGhpcy5fc2VsZWN0ZWQ9QXJyYXkuZnJvbSh0aGlzLl9zZWxlY3Rpb24udmFsdWVzKCkpKSx0aGlzLl9zZWxlY3RlZH1zZWxlY3QoLi4udCl7dGhpcy5fdmVyaWZ5VmFsdWVBc3NpZ25tZW50KHQpLHQuZm9yRWFjaCgodD0+dGhpcy5fbWFya1NlbGVjdGVkKHQpKSksdGhpcy5fZW1pdENoYW5nZUV2ZW50KCl9ZGVzZWxlY3QoLi4udCl7dGhpcy5fdmVyaWZ5VmFsdWVBc3NpZ25tZW50KHQpLHQuZm9yRWFjaCgodD0+dGhpcy5fdW5tYXJrU2VsZWN0ZWQodCkpKSx0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoKX10b2dnbGUodCl7dGhpcy5pc1NlbGVjdGVkKHQpP3RoaXMuZGVzZWxlY3QodCk6dGhpcy5zZWxlY3QodCl9Y2xlYXIoKXt0aGlzLl91bm1hcmtBbGwoKSx0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoKX1pc1NlbGVjdGVkKHQpe3JldHVybiB0aGlzLl9zZWxlY3Rpb24uaGFzKHQpfWlzRW1wdHkoKXtyZXR1cm4gMD09PXRoaXMuX3NlbGVjdGlvbi5zaXplfWhhc1ZhbHVlKCl7cmV0dXJuIXRoaXMuaXNFbXB0eSgpfXNvcnQodCl7dGhpcy5fbXVsdGlwbGUmJnRoaXMuc2VsZWN0ZWQmJnRoaXMuX3NlbGVjdGVkLnNvcnQodCl9aXNNdWx0aXBsZVNlbGVjdGlvbigpe3JldHVybiB0aGlzLl9tdWx0aXBsZX1fZW1pdENoYW5nZUV2ZW50KCl7dGhpcy5fc2VsZWN0ZWQ9bnVsbCwodGhpcy5fc2VsZWN0ZWRUb0VtaXQubGVuZ3RofHx0aGlzLl9kZXNlbGVjdGVkVG9FbWl0Lmxlbmd0aCkmJih0aGlzLmNoYW5nZWQubmV4dCh7c291cmNlOnRoaXMsYWRkZWQ6dGhpcy5fc2VsZWN0ZWRUb0VtaXQscmVtb3ZlZDp0aGlzLl9kZXNlbGVjdGVkVG9FbWl0fSksdGhpcy5fZGVzZWxlY3RlZFRvRW1pdD1bXSx0aGlzLl9zZWxlY3RlZFRvRW1pdD1bXSl9X21hcmtTZWxlY3RlZCh0KXt0aGlzLmlzU2VsZWN0ZWQodCl8fCh0aGlzLl9tdWx0aXBsZXx8dGhpcy5fdW5tYXJrQWxsKCksdGhpcy5fc2VsZWN0aW9uLmFkZCh0KSx0aGlzLl9lbWl0Q2hhbmdlcyYmdGhpcy5fc2VsZWN0ZWRUb0VtaXQucHVzaCh0KSl9X3VubWFya1NlbGVjdGVkKHQpe3RoaXMuaXNTZWxlY3RlZCh0KSYmKHRoaXMuX3NlbGVjdGlvbi5kZWxldGUodCksdGhpcy5fZW1pdENoYW5nZXMmJnRoaXMuX2Rlc2VsZWN0ZWRUb0VtaXQucHVzaCh0KSl9X3VubWFya0FsbCgpe3RoaXMuaXNFbXB0eSgpfHx0aGlzLl9zZWxlY3Rpb24uZm9yRWFjaCgodD0+dGhpcy5fdW5tYXJrU2VsZWN0ZWQodCkpKX1fdmVyaWZ5VmFsdWVBc3NpZ25tZW50KHQpe2lmKHQubGVuZ3RoPjEmJiF0aGlzLl9tdWx0aXBsZSYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpKXRocm93KGZ1bmN0aW9uIGUoKXtyZXR1cm4gRXJyb3IoIkNhbm5vdCBwYXNzIG11bHRpcGxlIHZhbHVlcyBpbnRvIFNlbGVjdGlvbk1vZGVsIHdpdGggc2luZ2xlLXZhbHVlIG1vZGUuIil9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLykoKX19Y2xhc3MgVUh7Y29uc3RydWN0b3IoKXt0aGlzLl9saXN0ZW5lcnM9W119bm90aWZ5KHQsZSl7Zm9yKGxldCBuIG9mIHRoaXMuX2xpc3RlbmVycyluKHQsZSl9bGlzdGVuKHQpe3JldHVybiB0aGlzLl9saXN0ZW5lcnMucHVzaCh0KSwoKT0+e3RoaXMuX2xpc3RlbmVycz10aGlzLl9saXN0ZW5lcnMuZmlsdGVyKChlPT50IT09ZSkpfX1uZ09uRGVzdHJveSgpe3RoaXMuX2xpc3RlbmVycz1bXX19VUguybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFVIKX0sVUguybVwcm92PWxvKHtmYWN0b3J5OmZ1bmN0aW9uIHQoKXtyZXR1cm4gbmV3IFVIfSx0b2tlbjpVSCxwcm92aWRlZEluOiJyb290In0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoVUgsW3t0eXBlOkptLGFyZ3M6W3twcm92aWRlZEluOiJyb290In1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW119KSxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCi8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCBXSD1uZXcgTnIoIl9WaWV3UmVwZWF0ZXIiKSxHSD1bImNvbnRlbnRXcmFwcGVyIl0sWUg9bmV3IE5yKCJWSVJUVUFMX1NDUk9MTF9TVFJBVEVHWSIpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3MgcUh7Y29uc3RydWN0b3IodCxlLG4pe3RoaXMuX3Njcm9sbGVkSW5kZXhDaGFuZ2U9bmV3IHgsdGhpcy5zY3JvbGxlZEluZGV4Q2hhbmdlPXRoaXMuX3Njcm9sbGVkSW5kZXhDaGFuZ2UucGlwZShrZSgpKSx0aGlzLl92aWV3cG9ydD1udWxsLHRoaXMuX2l0ZW1TaXplPXQsdGhpcy5fbWluQnVmZmVyUHg9ZSx0aGlzLl9tYXhCdWZmZXJQeD1ufWF0dGFjaCh0KXt0aGlzLl92aWV3cG9ydD10LHRoaXMuX3VwZGF0ZVRvdGFsQ29udGVudFNpemUoKSx0aGlzLl91cGRhdGVSZW5kZXJlZFJhbmdlKCl9ZGV0YWNoKCl7dGhpcy5fc2Nyb2xsZWRJbmRleENoYW5nZS5jb21wbGV0ZSgpLHRoaXMuX3ZpZXdwb3J0PW51bGx9dXBkYXRlSXRlbUFuZEJ1ZmZlclNpemUodCxlLG4pe2lmKG48ZSYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpKXRocm93IEVycm9yKCJDREsgdmlydHVhbCBzY3JvbGw6IG1heEJ1ZmZlclB4IG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIG1pbkJ1ZmZlclB4Iik7dGhpcy5faXRlbVNpemU9dCx0aGlzLl9taW5CdWZmZXJQeD1lLHRoaXMuX21heEJ1ZmZlclB4PW4sdGhpcy5fdXBkYXRlVG90YWxDb250ZW50U2l6ZSgpLHRoaXMuX3VwZGF0ZVJlbmRlcmVkUmFuZ2UoKX1vbkNvbnRlbnRTY3JvbGxlZCgpe3RoaXMuX3VwZGF0ZVJlbmRlcmVkUmFuZ2UoKX1vbkRhdGFMZW5ndGhDaGFuZ2VkKCl7dGhpcy5fdXBkYXRlVG90YWxDb250ZW50U2l6ZSgpLHRoaXMuX3VwZGF0ZVJlbmRlcmVkUmFuZ2UoKX1vbkNvbnRlbnRSZW5kZXJlZCgpe31vblJlbmRlcmVkT2Zmc2V0Q2hhbmdlZCgpe31zY3JvbGxUb0luZGV4KHQsZSl7dGhpcy5fdmlld3BvcnQmJnRoaXMuX3ZpZXdwb3J0LnNjcm9sbFRvT2Zmc2V0KHQqdGhpcy5faXRlbVNpemUsZSl9X3VwZGF0ZVRvdGFsQ29udGVudFNpemUoKXt0aGlzLl92aWV3cG9ydCYmdGhpcy5fdmlld3BvcnQuc2V0VG90YWxDb250ZW50U2l6ZSh0aGlzLl92aWV3cG9ydC5nZXREYXRhTGVuZ3RoKCkqdGhpcy5faXRlbVNpemUpfV91cGRhdGVSZW5kZXJlZFJhbmdlKCl7aWYoIXRoaXMuX3ZpZXdwb3J0KXJldHVybjtjb25zdCB0PXRoaXMuX3ZpZXdwb3J0LmdldFJlbmRlcmVkUmFuZ2UoKSxlPXtzdGFydDp0LnN0YXJ0LGVuZDp0LmVuZH0sbj10aGlzLl92aWV3cG9ydC5nZXRWaWV3cG9ydFNpemUoKSxvPXRoaXMuX3ZpZXdwb3J0LmdldERhdGFMZW5ndGgoKTtsZXQgaT10aGlzLl92aWV3cG9ydC5tZWFzdXJlU2Nyb2xsT2Zmc2V0KCksYT10aGlzLl9pdGVtU2l6ZT4wP2kvdGhpcy5faXRlbVNpemU6MDtpZihlLmVuZD5vKXtjb25zdCB0PU1hdGguY2VpbChuL3RoaXMuX2l0ZW1TaXplKSxyPU1hdGgubWF4KDAsTWF0aC5taW4oYSxvLXQpKTthIT1yJiYoYT1yLGk9cip0aGlzLl9pdGVtU2l6ZSxlLnN0YXJ0PU1hdGguZmxvb3IoYSkpLGUuZW5kPU1hdGgubWF4KDAsTWF0aC5taW4obyxlLnN0YXJ0K3QpKX1jb25zdCByPWktZS5zdGFydCp0aGlzLl9pdGVtU2l6ZTtpZihyPHRoaXMuX21pbkJ1ZmZlclB4JiYwIT1lLnN0YXJ0KXtjb25zdCB0PU1hdGguY2VpbCgodGhpcy5fbWF4QnVmZmVyUHgtcikvdGhpcy5faXRlbVNpemUpO2Uuc3RhcnQ9TWF0aC5tYXgoMCxlLnN0YXJ0LXQpLGUuZW5kPU1hdGgubWluKG8sTWF0aC5jZWlsKGErKG4rdGhpcy5fbWluQnVmZmVyUHgpL3RoaXMuX2l0ZW1TaXplKSl9ZWxzZXtjb25zdCB0PWUuZW5kKnRoaXMuX2l0ZW1TaXplLShpK24pO2lmKHQ8dGhpcy5fbWluQnVmZmVyUHgmJmUuZW5kIT1vKXtjb25zdCBuPU1hdGguY2VpbCgodGhpcy5fbWF4QnVmZmVyUHgtdCkvdGhpcy5faXRlbVNpemUpO24+MCYmKGUuZW5kPU1hdGgubWluKG8sZS5lbmQrbiksZS5zdGFydD1NYXRoLm1heCgwLE1hdGguZmxvb3IoYS10aGlzLl9taW5CdWZmZXJQeC90aGlzLl9pdGVtU2l6ZSkpKX19dGhpcy5fdmlld3BvcnQuc2V0UmVuZGVyZWRSYW5nZShlKSx0aGlzLl92aWV3cG9ydC5zZXRSZW5kZXJlZENvbnRlbnRPZmZzZXQodGhpcy5faXRlbVNpemUqZS5zdGFydCksdGhpcy5fc2Nyb2xsZWRJbmRleENoYW5nZS5uZXh0KE1hdGguZmxvb3IoYSkpfX1mdW5jdGlvbiBaSCh0KXtyZXR1cm4gdC5fc2Nyb2xsU3RyYXRlZ3l9Y2xhc3MgWEh7Y29uc3RydWN0b3IoKXt0aGlzLl9pdGVtU2l6ZT0yMCx0aGlzLl9taW5CdWZmZXJQeD0xMDAsdGhpcy5fbWF4QnVmZmVyUHg9MjAwLHRoaXMuX3Njcm9sbFN0cmF0ZWd5PW5ldyBxSCh0aGlzLml0ZW1TaXplLHRoaXMubWluQnVmZmVyUHgsdGhpcy5tYXhCdWZmZXJQeCl9Z2V0IGl0ZW1TaXplKCl7cmV0dXJuIHRoaXMuX2l0ZW1TaXplfXNldCBpdGVtU2l6ZSh0KXt0aGlzLl9pdGVtU2l6ZT1zSSh0KX1nZXQgbWluQnVmZmVyUHgoKXtyZXR1cm4gdGhpcy5fbWluQnVmZmVyUHh9c2V0IG1pbkJ1ZmZlclB4KHQpe3RoaXMuX21pbkJ1ZmZlclB4PXNJKHQpfWdldCBtYXhCdWZmZXJQeCgpe3JldHVybiB0aGlzLl9tYXhCdWZmZXJQeH1zZXQgbWF4QnVmZmVyUHgodCl7dGhpcy5fbWF4QnVmZmVyUHg9c0kodCl9bmdPbkNoYW5nZXMoKXt0aGlzLl9zY3JvbGxTdHJhdGVneS51cGRhdGVJdGVtQW5kQnVmZmVyU2l6ZSh0aGlzLml0ZW1TaXplLHRoaXMubWluQnVmZmVyUHgsdGhpcy5tYXhCdWZmZXJQeCl9fVhILsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxYSCl9LFhILsm1ZGlyPUpvKHt0eXBlOlhILHNlbGVjdG9yczpbWyJjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQiLCJpdGVtU2l6ZSIsIiJdXSxpbnB1dHM6e2l0ZW1TaXplOiJpdGVtU2l6ZSIsbWluQnVmZmVyUHg6Im1pbkJ1ZmZlclB4IixtYXhCdWZmZXJQeDoibWF4QnVmZmVyUHgifSxmZWF0dXJlczpbaWgoW3twcm92aWRlOllILHVzZUZhY3Rvcnk6WkgsZGVwczpbSW4oKCgpPT5YSCkpXX1dKSxTaV19KSxYSC5wcm9wRGVjb3JhdG9ycz17aXRlbVNpemU6W3t0eXBlOnlffV0sbWluQnVmZmVyUHg6W3t0eXBlOnlffV0sbWF4QnVmZmVyUHg6W3t0eXBlOnlffV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoWEgsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoiY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0W2l0ZW1TaXplXSIscHJvdmlkZXJzOlt7cHJvdmlkZTpZSCx1c2VGYWN0b3J5OlpILGRlcHM6W0luKCgoKT0+WEgpKV19XX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW119KSx7aXRlbVNpemU6W3t0eXBlOnlffV0sbWluQnVmZmVyUHg6W3t0eXBlOnlffV0sbWF4QnVmZmVyUHg6W3t0eXBlOnlffV19KTtjbGFzcyBLSHtjb25zdHJ1Y3Rvcih0LGUsbil7dGhpcy5fbmdab25lPXQsdGhpcy5fcGxhdGZvcm09ZSx0aGlzLl9zY3JvbGxlZD1uZXcgeCx0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb249bnVsbCx0aGlzLl9zY3JvbGxlZENvdW50PTAsdGhpcy5zY3JvbGxDb250YWluZXJzPW5ldyBNYXAsdGhpcy5fZG9jdW1lbnQ9bn1yZWdpc3Rlcih0KXt0aGlzLnNjcm9sbENvbnRhaW5lcnMuaGFzKHQpfHx0aGlzLnNjcm9sbENvbnRhaW5lcnMuc2V0KHQsdC5lbGVtZW50U2Nyb2xsZWQoKS5zdWJzY3JpYmUoKCgpPT50aGlzLl9zY3JvbGxlZC5uZXh0KHQpKSkpfWRlcmVnaXN0ZXIodCl7Y29uc3QgZT10aGlzLnNjcm9sbENvbnRhaW5lcnMuZ2V0KHQpO2UmJihlLnVuc3Vic2NyaWJlKCksdGhpcy5zY3JvbGxDb250YWluZXJzLmRlbGV0ZSh0KSl9c2Nyb2xsZWQodD0yMCl7cmV0dXJuIHRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcj9uZXcgeSgoZT0+e3RoaXMuX2dsb2JhbFN1YnNjcmlwdGlvbnx8dGhpcy5fYWRkR2xvYmFsTGlzdGVuZXIoKTtjb25zdCBuPXQ+MD90aGlzLl9zY3JvbGxlZC5waXBlKG9lKHQpKS5zdWJzY3JpYmUoZSk6dGhpcy5fc2Nyb2xsZWQuc3Vic2NyaWJlKGUpO3JldHVybiB0aGlzLl9zY3JvbGxlZENvdW50KyssKCk9PntuLnVuc3Vic2NyaWJlKCksdGhpcy5fc2Nyb2xsZWRDb3VudC0tLHRoaXMuX3Njcm9sbGVkQ291bnR8fHRoaXMuX3JlbW92ZUdsb2JhbExpc3RlbmVyKCl9fSkpOlooKX1uZ09uRGVzdHJveSgpe3RoaXMuX3JlbW92ZUdsb2JhbExpc3RlbmVyKCksdGhpcy5zY3JvbGxDb250YWluZXJzLmZvckVhY2goKCh0LGUpPT50aGlzLmRlcmVnaXN0ZXIoZSkpKSx0aGlzLl9zY3JvbGxlZC5jb21wbGV0ZSgpfWFuY2VzdG9yU2Nyb2xsZWQodCxlKXtjb25zdCBuPXRoaXMuZ2V0QW5jZXN0b3JTY3JvbGxDb250YWluZXJzKHQpO3JldHVybiB0aGlzLnNjcm9sbGVkKGUpLnBpcGUoR3QoKHQ9PiF0fHxuLmluZGV4T2YodCk+LTEpKSl9Z2V0QW5jZXN0b3JTY3JvbGxDb250YWluZXJzKHQpe2NvbnN0IGU9W107cmV0dXJuIHRoaXMuc2Nyb2xsQ29udGFpbmVycy5mb3JFYWNoKCgobixvKT0+e3RoaXMuX3Njcm9sbGFibGVDb250YWluc0VsZW1lbnQobyx0KSYmZS5wdXNoKG8pfSkpLGV9X2dldFdpbmRvdygpe3JldHVybiB0aGlzLl9kb2N1bWVudC5kZWZhdWx0Vmlld3x8d2luZG93fV9zY3JvbGxhYmxlQ29udGFpbnNFbGVtZW50KHQsZSl7bGV0IG49cEkoZSksbz10LmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50O2Rve2lmKG49PW8pcmV0dXJuITB9d2hpbGUobj1uLnBhcmVudEVsZW1lbnQpO3JldHVybiExfV9hZGRHbG9iYWxMaXN0ZW5lcigpe3RoaXMuX2dsb2JhbFN1YnNjcmlwdGlvbj10aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCgpPT5WdCh0aGlzLl9nZXRXaW5kb3coKS5kb2N1bWVudCwic2Nyb2xsIikuc3Vic2NyaWJlKCgoKT0+dGhpcy5fc2Nyb2xsZWQubmV4dCgpKSkpKX1fcmVtb3ZlR2xvYmFsTGlzdGVuZXIoKXt0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb24mJih0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb249bnVsbCl9fUtILsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxLSCkodXModEMpLHVzKGZJKSx1cyhVQyw4KSl9LEtILsm1cHJvdj1sbyh7ZmFjdG9yeTpmdW5jdGlvbiB0KCl7cmV0dXJuIG5ldyBLSCh1cyh0QyksdXMoZkkpLHVzKFVDLDgpKX0sdG9rZW46S0gscHJvdmlkZWRJbjoicm9vdCJ9KSxLSC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOnRDfSx7dHlwZTpmSX0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltVQ119XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoS0gsW3t0eXBlOkptLGFyZ3M6W3twcm92aWRlZEluOiJyb290In1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOnRDfSx7dHlwZTpmSX0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltVQ119XX1dfSksbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyBKSHtjb25zdHJ1Y3Rvcih0LGUsbixvKXt0aGlzLmVsZW1lbnRSZWY9dCx0aGlzLnNjcm9sbERpc3BhdGNoZXI9ZSx0aGlzLm5nWm9uZT1uLHRoaXMuZGlyPW8sdGhpcy5fZGVzdHJveWVkPW5ldyB4LHRoaXMuX2VsZW1lbnRTY3JvbGxlZD1uZXcgeSgodD0+dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCgpPT5WdCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwic2Nyb2xsIikucGlwZSh1bih0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUodCkpKSkpfW5nT25Jbml0KCl7dGhpcy5zY3JvbGxEaXNwYXRjaGVyLnJlZ2lzdGVyKHRoaXMpfW5nT25EZXN0cm95KCl7dGhpcy5zY3JvbGxEaXNwYXRjaGVyLmRlcmVnaXN0ZXIodGhpcyksdGhpcy5fZGVzdHJveWVkLm5leHQoKSx0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKX1lbGVtZW50U2Nyb2xsZWQoKXtyZXR1cm4gdGhpcy5fZWxlbWVudFNjcm9sbGVkfWdldEVsZW1lbnRSZWYoKXtyZXR1cm4gdGhpcy5lbGVtZW50UmVmfXNjcm9sbFRvKHQpe2NvbnN0IGU9dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsbj10aGlzLmRpciYmInJ0bCI9PXRoaXMuZGlyLnZhbHVlO251bGw9PXQubGVmdCYmKHQubGVmdD1uP3QuZW5kOnQuc3RhcnQpLG51bGw9PXQucmlnaHQmJih0LnJpZ2h0PW4/dC5zdGFydDp0LmVuZCksbnVsbCE9dC5ib3R0b20mJih0LnRvcD1lLnNjcm9sbEhlaWdodC1lLmNsaWVudEhlaWdodC10LmJvdHRvbSksbiYmMCE9T0koKT8obnVsbCE9dC5sZWZ0JiYodC5yaWdodD1lLnNjcm9sbFdpZHRoLWUuY2xpZW50V2lkdGgtdC5sZWZ0KSwyPT1PSSgpP3QubGVmdD10LnJpZ2h0OjE9PU9JKCkmJih0LmxlZnQ9dC5yaWdodD8tdC5yaWdodDp0LnJpZ2h0KSk6bnVsbCE9dC5yaWdodCYmKHQubGVmdD1lLnNjcm9sbFdpZHRoLWUuY2xpZW50V2lkdGgtdC5yaWdodCksdGhpcy5fYXBwbHlTY3JvbGxUb09wdGlvbnModCl9X2FwcGx5U2Nyb2xsVG9PcHRpb25zKHQpe2NvbnN0IGU9dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7eEkoKT9lLnNjcm9sbFRvKHQpOihudWxsIT10LnRvcCYmKGUuc2Nyb2xsVG9wPXQudG9wKSxudWxsIT10LmxlZnQmJihlLnNjcm9sbExlZnQ9dC5sZWZ0KSl9bWVhc3VyZVNjcm9sbE9mZnNldCh0KXtjb25zdCBlPSJsZWZ0IixuPSJyaWdodCIsbz10aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtpZigidG9wIj09dClyZXR1cm4gby5zY3JvbGxUb3A7aWYoImJvdHRvbSI9PXQpcmV0dXJuIG8uc2Nyb2xsSGVpZ2h0LW8uY2xpZW50SGVpZ2h0LW8uc2Nyb2xsVG9wO2NvbnN0IGk9dGhpcy5kaXImJiJydGwiPT10aGlzLmRpci52YWx1ZTtyZXR1cm4ic3RhcnQiPT10P3Q9aT9uOmU6ImVuZCI9PXQmJih0PWk/ZTpuKSxpJiYyPT1PSSgpP3Q9PWU/by5zY3JvbGxXaWR0aC1vLmNsaWVudFdpZHRoLW8uc2Nyb2xsTGVmdDpvLnNjcm9sbExlZnQ6aSYmMT09T0koKT90PT1lP28uc2Nyb2xsTGVmdCtvLnNjcm9sbFdpZHRoLW8uY2xpZW50V2lkdGg6LW8uc2Nyb2xsTGVmdDp0PT1lP28uc2Nyb2xsTGVmdDpvLnNjcm9sbFdpZHRoLW8uY2xpZW50V2lkdGgtby5zY3JvbGxMZWZ0fX1KSC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8SkgpKE11KGNoKSxNdShLSCksTXUodEMpLE11KE16LDgpKX0sSkguybVkaXI9Sm8oe3R5cGU6Skgsc2VsZWN0b3JzOltbIiIsImNkay1zY3JvbGxhYmxlIiwiIl0sWyIiLCJjZGtTY3JvbGxhYmxlIiwiIl1dfSksSkguY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpjaH0se3R5cGU6S0h9LHt0eXBlOnRDfSx7dHlwZTpNeixkZWNvcmF0b3JzOlt7dHlwZTpfc31dfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihKSCxbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJbY2RrLXNjcm9sbGFibGVdLCBbY2RrU2Nyb2xsYWJsZV0ifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Y2h9LHt0eXBlOktIfSx7dHlwZTp0Q30se3R5cGU6TXosZGVjb3JhdG9yczpbe3R5cGU6X3N9XX1dfSksbnVsbCk7Y2xhc3MgUUh7Y29uc3RydWN0b3IodCxlLG4pe3RoaXMuX3BsYXRmb3JtPXQsdGhpcy5fY2hhbmdlPW5ldyB4LHRoaXMuX2NoYW5nZUxpc3RlbmVyPXQ9Pnt0aGlzLl9jaGFuZ2UubmV4dCh0KX0sdGhpcy5fZG9jdW1lbnQ9bixlLnJ1bk91dHNpZGVBbmd1bGFyKCgoKT0+e2lmKHQuaXNCcm93c2VyKXtjb25zdCB0PXRoaXMuX2dldFdpbmRvdygpO3QuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLl9jaGFuZ2VMaXN0ZW5lciksdC5hZGRFdmVudExpc3RlbmVyKCJvcmllbnRhdGlvbmNoYW5nZSIsdGhpcy5fY2hhbmdlTGlzdGVuZXIpfXRoaXMuY2hhbmdlKCkuc3Vic2NyaWJlKCgoKT0+dGhpcy5fdXBkYXRlVmlld3BvcnRTaXplKCkpKX0pKX1uZ09uRGVzdHJveSgpe2lmKHRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcil7Y29uc3QgdD10aGlzLl9nZXRXaW5kb3coKTt0LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdGhpcy5fY2hhbmdlTGlzdGVuZXIpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigib3JpZW50YXRpb25jaGFuZ2UiLHRoaXMuX2NoYW5nZUxpc3RlbmVyKX10aGlzLl9jaGFuZ2UuY29tcGxldGUoKX1nZXRWaWV3cG9ydFNpemUoKXt0aGlzLl92aWV3cG9ydFNpemV8fHRoaXMuX3VwZGF0ZVZpZXdwb3J0U2l6ZSgpO2NvbnN0IHQ9e3dpZHRoOnRoaXMuX3ZpZXdwb3J0U2l6ZS53aWR0aCxoZWlnaHQ6dGhpcy5fdmlld3BvcnRTaXplLmhlaWdodH07cmV0dXJuIHRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcnx8KHRoaXMuX3ZpZXdwb3J0U2l6ZT1udWxsKSx0fWdldFZpZXdwb3J0UmVjdCgpe2NvbnN0IHQ9dGhpcy5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCkse3dpZHRoOmUsaGVpZ2h0Om59PXRoaXMuZ2V0Vmlld3BvcnRTaXplKCk7cmV0dXJue3RvcDp0LnRvcCxsZWZ0OnQubGVmdCxib3R0b206dC50b3ArbixyaWdodDp0LmxlZnQrZSxoZWlnaHQ6bix3aWR0aDplfX1nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCl7aWYoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm57dG9wOjAsbGVmdDowfTtjb25zdCB0PXRoaXMuX2RvY3VtZW50LGU9dGhpcy5fZ2V0V2luZG93KCksbj10LmRvY3VtZW50RWxlbWVudCxvPW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJue3RvcDotby50b3B8fHQuYm9keS5zY3JvbGxUb3B8fGUuc2Nyb2xsWXx8bi5zY3JvbGxUb3B8fDAsbGVmdDotby5sZWZ0fHx0LmJvZHkuc2Nyb2xsTGVmdHx8ZS5zY3JvbGxYfHxuLnNjcm9sbExlZnR8fDB9fWNoYW5nZSh0PTIwKXtyZXR1cm4gdD4wP3RoaXMuX2NoYW5nZS5waXBlKG9lKHQpKTp0aGlzLl9jaGFuZ2V9X2dldFdpbmRvdygpe3JldHVybiB0aGlzLl9kb2N1bWVudC5kZWZhdWx0Vmlld3x8d2luZG93fV91cGRhdGVWaWV3cG9ydFNpemUoKXtjb25zdCB0PXRoaXMuX2dldFdpbmRvdygpO3RoaXMuX3ZpZXdwb3J0U2l6ZT10aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXI/e3dpZHRoOnQuaW5uZXJXaWR0aCxoZWlnaHQ6dC5pbm5lckhlaWdodH06e3dpZHRoOjAsaGVpZ2h0OjB9fX1RSC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8UUgpKHVzKGZJKSx1cyh0QyksdXMoVUMsOCkpfSxRSC7JtXByb3Y9bG8oe2ZhY3Rvcnk6ZnVuY3Rpb24gdCgpe3JldHVybiBuZXcgUUgodXMoZkkpLHVzKHRDKSx1cyhVQyw4KSl9LHRva2VuOlFILHByb3ZpZGVkSW46InJvb3QifSksUUguY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpmSX0se3R5cGU6dEN9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbVUNdfV19XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFFILFt7dHlwZTpKbSxhcmdzOlt7cHJvdmlkZWRJbjoicm9vdCJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpmSX0se3R5cGU6dEN9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbVUNdfV19XX0pLG51bGwpO2NvbnN0ICRIPSJ1bmRlZmluZWQiIT10eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lP3B0OmN0O2NsYXNzIHRGIGV4dGVuZHMgSkh7Y29uc3RydWN0b3IodCxlLG4sbyxpLGEscil7aWYoc3VwZXIodCxhLG4saSksdGhpcy5lbGVtZW50UmVmPXQsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9ZSx0aGlzLl9zY3JvbGxTdHJhdGVneT1vLHRoaXMuX2RldGFjaGVkU3ViamVjdD1uZXcgeCx0aGlzLl9yZW5kZXJlZFJhbmdlU3ViamVjdD1uZXcgeCx0aGlzLl9vcmllbnRhdGlvbj0idmVydGljYWwiLHRoaXMuc2Nyb2xsZWRJbmRleENoYW5nZT1uZXcgeSgodD0+dGhpcy5fc2Nyb2xsU3RyYXRlZ3kuc2Nyb2xsZWRJbmRleENoYW5nZS5zdWJzY3JpYmUoKGU9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCgpPT50aGlzLm5nWm9uZS5ydW4oKCgpPT50Lm5leHQoZSkpKSkpKSkpKSx0aGlzLnJlbmRlcmVkUmFuZ2VTdHJlYW09dGhpcy5fcmVuZGVyZWRSYW5nZVN1YmplY3QsdGhpcy5fdG90YWxDb250ZW50U2l6ZT0wLHRoaXMuX3RvdGFsQ29udGVudFdpZHRoPSIiLHRoaXMuX3RvdGFsQ29udGVudEhlaWdodD0iIix0aGlzLl9yZW5kZXJlZFJhbmdlPXtzdGFydDowLGVuZDowfSx0aGlzLl9kYXRhTGVuZ3RoPTAsdGhpcy5fdmlld3BvcnRTaXplPTAsdGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0PTAsdGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0TmVlZHNSZXdyaXRlPSExLHRoaXMuX2lzQ2hhbmdlRGV0ZWN0aW9uUGVuZGluZz0hMSx0aGlzLl9ydW5BZnRlckNoYW5nZURldGVjdGlvbj1bXSx0aGlzLl92aWV3cG9ydENoYW5nZXM9bC5FTVBUWSwhbyYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpKXRocm93IEVycm9yKCdFcnJvcjogY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0IHJlcXVpcmVzIHRoZSAiaXRlbVNpemUiIHByb3BlcnR5IHRvIGJlIHNldC4nKTt0aGlzLl92aWV3cG9ydENoYW5nZXM9ci5jaGFuZ2UoKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5jaGVja1ZpZXdwb3J0U2l6ZSgpfSkpfWdldCBvcmllbnRhdGlvbigpe3JldHVybiB0aGlzLl9vcmllbnRhdGlvbn1zZXQgb3JpZW50YXRpb24odCl7dGhpcy5fb3JpZW50YXRpb24hPT10JiYodGhpcy5fb3JpZW50YXRpb249dCx0aGlzLl9jYWxjdWxhdGVTcGFjZXJTaXplKCkpfW5nT25Jbml0KCl7c3VwZXIubmdPbkluaXQoKSx0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCgpPT57dGhpcy5fbWVhc3VyZVZpZXdwb3J0U2l6ZSgpLHRoaXMuX3Njcm9sbFN0cmF0ZWd5LmF0dGFjaCh0aGlzKSx0aGlzLmVsZW1lbnRTY3JvbGxlZCgpLnBpcGUoY24obnVsbCksb2UoMCwkSCkpLnN1YnNjcmliZSgoKCk9PnRoaXMuX3Njcm9sbFN0cmF0ZWd5Lm9uQ29udGVudFNjcm9sbGVkKCkpKSx0aGlzLl9tYXJrQ2hhbmdlRGV0ZWN0aW9uTmVlZGVkKCl9KSkpKX1uZ09uRGVzdHJveSgpe3RoaXMuZGV0YWNoKCksdGhpcy5fc2Nyb2xsU3RyYXRlZ3kuZGV0YWNoKCksdGhpcy5fcmVuZGVyZWRSYW5nZVN1YmplY3QuY29tcGxldGUoKSx0aGlzLl9kZXRhY2hlZFN1YmplY3QuY29tcGxldGUoKSx0aGlzLl92aWV3cG9ydENoYW5nZXMudW5zdWJzY3JpYmUoKSxzdXBlci5uZ09uRGVzdHJveSgpfWF0dGFjaCh0KXtpZih0aGlzLl9mb3JPZiYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpKXRocm93IEVycm9yKCJDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQgaXMgYWxyZWFkeSBhdHRhY2hlZC4iKTt0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKCk9Pnt0aGlzLl9mb3JPZj10LHRoaXMuX2Zvck9mLmRhdGFTdHJlYW0ucGlwZSh1bih0aGlzLl9kZXRhY2hlZFN1YmplY3QpKS5zdWJzY3JpYmUoKHQ9Pntjb25zdCBlPXQubGVuZ3RoO2UhPT10aGlzLl9kYXRhTGVuZ3RoJiYodGhpcy5fZGF0YUxlbmd0aD1lLHRoaXMuX3Njcm9sbFN0cmF0ZWd5Lm9uRGF0YUxlbmd0aENoYW5nZWQoKSksdGhpcy5fZG9DaGFuZ2VEZXRlY3Rpb24oKX0pKX0pKX1kZXRhY2goKXt0aGlzLl9mb3JPZj1udWxsLHRoaXMuX2RldGFjaGVkU3ViamVjdC5uZXh0KCl9Z2V0RGF0YUxlbmd0aCgpe3JldHVybiB0aGlzLl9kYXRhTGVuZ3RofWdldFZpZXdwb3J0U2l6ZSgpe3JldHVybiB0aGlzLl92aWV3cG9ydFNpemV9Z2V0UmVuZGVyZWRSYW5nZSgpe3JldHVybiB0aGlzLl9yZW5kZXJlZFJhbmdlfXNldFRvdGFsQ29udGVudFNpemUodCl7dGhpcy5fdG90YWxDb250ZW50U2l6ZSE9PXQmJih0aGlzLl90b3RhbENvbnRlbnRTaXplPXQsdGhpcy5fY2FsY3VsYXRlU3BhY2VyU2l6ZSgpLHRoaXMuX21hcmtDaGFuZ2VEZXRlY3Rpb25OZWVkZWQoKSl9c2V0UmVuZGVyZWRSYW5nZSh0KXsoCi8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpmdW5jdGlvbiBlKHQsbil7cmV0dXJuIHQuc3RhcnQ9PW4uc3RhcnQmJnQuZW5kPT1uLmVuZH0pKHRoaXMuX3JlbmRlcmVkUmFuZ2UsdCl8fCh0aGlzLl9yZW5kZXJlZFJhbmdlU3ViamVjdC5uZXh0KHRoaXMuX3JlbmRlcmVkUmFuZ2U9dCksdGhpcy5fbWFya0NoYW5nZURldGVjdGlvbk5lZWRlZCgoKCk9PnRoaXMuX3Njcm9sbFN0cmF0ZWd5Lm9uQ29udGVudFJlbmRlcmVkKCkpKSl9Z2V0T2Zmc2V0VG9SZW5kZXJlZENvbnRlbnRTdGFydCgpe3JldHVybiB0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXROZWVkc1Jld3JpdGU/bnVsbDp0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXR9c2V0UmVuZGVyZWRDb250ZW50T2Zmc2V0KHQsZT0idG8tc3RhcnQiKXtjb25zdCBuPSJob3Jpem9udGFsIj09dGhpcy5vcmllbnRhdGlvbixvPW4/IlgiOiJZIjtsZXQgaT1gdHJhbnNsYXRlJHtvfSgke051bWJlcigobiYmdGhpcy5kaXImJiJydGwiPT10aGlzLmRpci52YWx1ZT8tMToxKSp0KX1weClgO3RoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldD10LCJ0by1lbmQiPT09ZSYmKGkrPWAgdHJhbnNsYXRlJHtvfSgtMTAwJSlgLHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldE5lZWRzUmV3cml0ZT0hMCksdGhpcy5fcmVuZGVyZWRDb250ZW50VHJhbnNmb3JtIT1pJiYodGhpcy5fcmVuZGVyZWRDb250ZW50VHJhbnNmb3JtPWksdGhpcy5fbWFya0NoYW5nZURldGVjdGlvbk5lZWRlZCgoKCk9Pnt0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXROZWVkc1Jld3JpdGU/KHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldC09dGhpcy5tZWFzdXJlUmVuZGVyZWRDb250ZW50U2l6ZSgpLHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldE5lZWRzUmV3cml0ZT0hMSx0aGlzLnNldFJlbmRlcmVkQ29udGVudE9mZnNldCh0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXQpKTp0aGlzLl9zY3JvbGxTdHJhdGVneS5vblJlbmRlcmVkT2Zmc2V0Q2hhbmdlZCgpfSkpKX1zY3JvbGxUb09mZnNldCh0LGU9ImF1dG8iKXtjb25zdCBuPXtiZWhhdmlvcjplfTsiaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uP24uc3RhcnQ9dDpuLnRvcD10LHRoaXMuc2Nyb2xsVG8obil9c2Nyb2xsVG9JbmRleCh0LGU9ImF1dG8iKXt0aGlzLl9zY3JvbGxTdHJhdGVneS5zY3JvbGxUb0luZGV4KHQsZSl9bWVhc3VyZVNjcm9sbE9mZnNldCh0KXtyZXR1cm4gc3VwZXIubWVhc3VyZVNjcm9sbE9mZnNldCh0fHwoImhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbj8ic3RhcnQiOiJ0b3AiKSl9bWVhc3VyZVJlbmRlcmVkQ29udGVudFNpemUoKXtjb25zdCB0PXRoaXMuX2NvbnRlbnRXcmFwcGVyLm5hdGl2ZUVsZW1lbnQ7cmV0dXJuImhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbj90Lm9mZnNldFdpZHRoOnQub2Zmc2V0SGVpZ2h0fW1lYXN1cmVSYW5nZVNpemUodCl7cmV0dXJuIHRoaXMuX2Zvck9mP3RoaXMuX2Zvck9mLm1lYXN1cmVSYW5nZVNpemUodCx0aGlzLm9yaWVudGF0aW9uKTowfWNoZWNrVmlld3BvcnRTaXplKCl7dGhpcy5fbWVhc3VyZVZpZXdwb3J0U2l6ZSgpLHRoaXMuX3Njcm9sbFN0cmF0ZWd5Lm9uRGF0YUxlbmd0aENoYW5nZWQoKX1fbWVhc3VyZVZpZXdwb3J0U2l6ZSgpe2NvbnN0IHQ9dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7dGhpcy5fdmlld3BvcnRTaXplPSJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb24/dC5jbGllbnRXaWR0aDp0LmNsaWVudEhlaWdodH1fbWFya0NoYW5nZURldGVjdGlvbk5lZWRlZCh0KXt0JiZ0aGlzLl9ydW5BZnRlckNoYW5nZURldGVjdGlvbi5wdXNoKHQpLHRoaXMuX2lzQ2hhbmdlRGV0ZWN0aW9uUGVuZGluZ3x8KHRoaXMuX2lzQ2hhbmdlRGV0ZWN0aW9uUGVuZGluZz0hMCx0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCgpPT57dGhpcy5fZG9DaGFuZ2VEZXRlY3Rpb24oKX0pKSkpKX1fZG9DaGFuZ2VEZXRlY3Rpb24oKXt0aGlzLl9pc0NoYW5nZURldGVjdGlvblBlbmRpbmc9ITEsdGhpcy5fY29udGVudFdyYXBwZXIubmF0aXZlRWxlbWVudC5zdHlsZS50cmFuc2Zvcm09dGhpcy5fcmVuZGVyZWRDb250ZW50VHJhbnNmb3JtLHRoaXMubmdab25lLnJ1bigoKCk9PnRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKSk7Y29uc3QgdD10aGlzLl9ydW5BZnRlckNoYW5nZURldGVjdGlvbjt0aGlzLl9ydW5BZnRlckNoYW5nZURldGVjdGlvbj1bXTtmb3IoY29uc3QgZSBvZiB0KWUoKX1fY2FsY3VsYXRlU3BhY2VyU2l6ZSgpe3RoaXMuX3RvdGFsQ29udGVudEhlaWdodD0iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uPyIiOmAke3RoaXMuX3RvdGFsQ29udGVudFNpemV9cHhgLHRoaXMuX3RvdGFsQ29udGVudFdpZHRoPSJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb24/YCR7dGhpcy5fdG90YWxDb250ZW50U2l6ZX1weGA6IiJ9fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KZnVuY3Rpb24gZUYodCxlLG4pe2lmKCFuLmdldEJvdW5kaW5nQ2xpZW50UmVjdClyZXR1cm4gMDtjb25zdCBvPW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuImhvcml6b250YWwiPT09dD8ic3RhcnQiPT09ZT9vLmxlZnQ6by5yaWdodDoic3RhcnQiPT09ZT9vLnRvcDpvLmJvdHRvbX10Ri7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8dEYpKE11KGNoKSxNdShIaCksTXUodEMpLE11KFlILDgpLE11KE16LDgpLE11KEtIKSxNdShRSCkpfSx0Ri7JtWNtcD1Vbyh7dHlwZTp0RixzZWxlY3RvcnM6W1siY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0Il1dLHZpZXdRdWVyeTpmdW5jdGlvbiB0KGUsbil7aWYoMSZlJiZXYihHSCwzKSwyJmUpe2xldCB0O1ViKHQ9WWIoKSkmJihuLl9jb250ZW50V3JhcHBlcj10LmZpcnN0KX19LGhvc3RBdHRyczpbMSwiY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0Il0saG9zdFZhcnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezImZSYmYWYoImNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIiwiaG9yaXpvbnRhbCI9PT1uLm9yaWVudGF0aW9uKSgiY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLXZlcnRpY2FsIiwiaG9yaXpvbnRhbCIhPT1uLm9yaWVudGF0aW9uKX0saW5wdXRzOntvcmllbnRhdGlvbjoib3JpZW50YXRpb24ifSxvdXRwdXRzOntzY3JvbGxlZEluZGV4Q2hhbmdlOiJzY3JvbGxlZEluZGV4Q2hhbmdlIn0sZmVhdHVyZXM6W2loKFt7cHJvdmlkZTpKSCx1c2VFeGlzdGluZzp0Rn1dKSxnbV0sbmdDb250ZW50U2VsZWN0b3JzOlsiKiJdLGRlY2xzOjQsdmFyczo0LGNvbnN0czpbWzEsImNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXIiXSxbImNvbnRlbnRXcmFwcGVyIiwiIl0sWzEsImNkay12aXJ0dWFsLXNjcm9sbC1zcGFjZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKFZ1KCksT3UoMCwiZGl2IiwwLDEpLGp1KDIpLFB1KCksd3UoMywiZGl2IiwyKSksMiZlJiYoSmMoMyksb2YoIndpZHRoIixuLl90b3RhbENvbnRlbnRXaWR0aCkoImhlaWdodCIsbi5fdG90YWxDb250ZW50SGVpZ2h0KSl9LHN0eWxlczpbImNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydHtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmF1dG87Y29udGFpbjpzdHJpY3Q7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCk7d2lsbC1jaGFuZ2U6c2Nyb2xsLXBvc2l0aW9uOy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNofS5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVye3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDtjb250YWluOmNvbnRlbnR9W2Rpcj1ydGxdIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVye3JpZ2h0OjA7bGVmdDphdXRvfS5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24taG9yaXpvbnRhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcnttaW4taGVpZ2h0OjEwMCV9LmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPmRsOm5vdChbY2RrVmlydHVhbEZvcl0pLC5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24taG9yaXpvbnRhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj5vbDpub3QoW2Nka1ZpcnR1YWxGb3JdKSwuY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLWhvcml6b250YWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+dGFibGU6bm90KFtjZGtWaXJ0dWFsRm9yXSksLmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPnVsOm5vdChbY2RrVmlydHVhbEZvcl0pe3BhZGRpbmctbGVmdDowO3BhZGRpbmctcmlnaHQ6MDttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowO2JvcmRlci1sZWZ0LXdpZHRoOjA7Ym9yZGVyLXJpZ2h0LXdpZHRoOjA7b3V0bGluZTpub25lfS5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24tdmVydGljYWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXJ7bWluLXdpZHRoOjEwMCV9LmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi12ZXJ0aWNhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj5kbDpub3QoW2Nka1ZpcnR1YWxGb3JdKSwuY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLXZlcnRpY2FsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPm9sOm5vdChbY2RrVmlydHVhbEZvcl0pLC5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24tdmVydGljYWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+dGFibGU6bm90KFtjZGtWaXJ0dWFsRm9yXSksLmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi12ZXJ0aWNhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj51bDpub3QoW2Nka1ZpcnR1YWxGb3JdKXtwYWRkaW5nLXRvcDowO3BhZGRpbmctYm90dG9tOjA7bWFyZ2luLXRvcDowO21hcmdpbi1ib3R0b206MDtib3JkZXItdG9wLXdpZHRoOjA7Ym9yZGVyLWJvdHRvbS13aWR0aDowO291dGxpbmU6bm9uZX0uY2RrLXZpcnR1YWwtc2Nyb2xsLXNwYWNlcntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjFweDt3aWR0aDoxcHg7dHJhbnNmb3JtLW9yaWdpbjowIDB9W2Rpcj1ydGxdIC5jZGstdmlydHVhbC1zY3JvbGwtc3BhY2Vye3JpZ2h0OjA7bGVmdDphdXRvO3RyYW5zZm9ybS1vcmlnaW46MTAwJSAwfVxuIl0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksdEYuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpjaH0se3R5cGU6SGh9LHt0eXBlOnRDfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W1lIXX1dfSx7dHlwZTpNeixkZWNvcmF0b3JzOlt7dHlwZTpfc31dfSx7dHlwZTpLSH0se3R5cGU6UUh9XSx0Ri5wcm9wRGVjb3JhdG9ycz17b3JpZW50YXRpb246W3t0eXBlOnlffV0sc2Nyb2xsZWRJbmRleENoYW5nZTpbe3R5cGU6X199XSxfY29udGVudFdyYXBwZXI6W3t0eXBlOkZyLGFyZ3M6WyJjb250ZW50V3JhcHBlciIse3N0YXRpYzohMH1dfV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIodEYsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoiY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0Iix0ZW1wbGF0ZTonXHgzYyEtLVxuICBXcmFwIHRoZSByZW5kZXJlZCBjb250ZW50IGluIGFuIGVsZW1lbnQgdGhhdCB3aWxsIGJlIHVzZWQgdG8gb2Zmc2V0IGl0IGJhc2VkIG9uIHRoZSBzY3JvbGxcbiAgcG9zaXRpb24uXG4tLVx4M2VcbjxkaXYgI2NvbnRlbnRXcmFwcGVyIGNsYXNzPSJjZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyIj5cbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9kaXY+XG5ceDNjIS0tXG4gIFNwYWNlciB1c2VkIHRvIGZvcmNlIHRoZSBzY3JvbGxpbmcgY29udGFpbmVyIHRvIHRoZSBjb3JyZWN0IHNpemUgZm9yIHRoZSAqdG90YWwqIG51bWJlciBvZiBpdGVtc1xuICBzbyB0aGF0IHRoZSBzY3JvbGxiYXIgY2FwdHVyZXMgdGhlIHNpemUgb2YgdGhlIGVudGlyZSBkYXRhIHNldC5cbi0tXHgzZVxuPGRpdiBjbGFzcz0iY2RrLXZpcnR1YWwtc2Nyb2xsLXNwYWNlciJcbiAgICAgW3N0eWxlLndpZHRoXT0iX3RvdGFsQ29udGVudFdpZHRoIiBbc3R5bGUuaGVpZ2h0XT0iX3RvdGFsQ29udGVudEhlaWdodCI+PC9kaXY+XG4nLGhvc3Q6e2NsYXNzOiJjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQiLCJbY2xhc3MuY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLWhvcml6b250YWxdIjonb3JpZW50YXRpb24gPT09ICJob3Jpem9udGFsIicsIltjbGFzcy5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24tdmVydGljYWxdIjonb3JpZW50YXRpb24gIT09ICJob3Jpem9udGFsIid9LGVuY2Fwc3VsYXRpb246UG8uTm9uZSxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNoLHByb3ZpZGVyczpbe3Byb3ZpZGU6SkgsdXNlRXhpc3Rpbmc6dEZ9XSxzdHlsZXM6WyJjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnR7ZGlzcGxheTpibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzphdXRvO2NvbnRhaW46c3RyaWN0O3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApO3dpbGwtY2hhbmdlOnNjcm9sbC1wb3NpdGlvbjstd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzp0b3VjaH0uY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7Y29udGFpbjpjb250ZW50fVtkaXI9cnRsXSAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcntyaWdodDowO2xlZnQ6YXV0b30uY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLWhvcml6b250YWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXJ7bWluLWhlaWdodDoxMDAlfS5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24taG9yaXpvbnRhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj5kbDpub3QoW2Nka1ZpcnR1YWxGb3JdKSwuY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLWhvcml6b250YWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+b2w6bm90KFtjZGtWaXJ0dWFsRm9yXSksLmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPnRhYmxlOm5vdChbY2RrVmlydHVhbEZvcl0pLC5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24taG9yaXpvbnRhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj51bDpub3QoW2Nka1ZpcnR1YWxGb3JdKXtwYWRkaW5nLWxlZnQ6MDtwYWRkaW5nLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MDtib3JkZXItbGVmdC13aWR0aDowO2JvcmRlci1yaWdodC13aWR0aDowO291dGxpbmU6bm9uZX0uY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLXZlcnRpY2FsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVye21pbi13aWR0aDoxMDAlfS5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24tdmVydGljYWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+ZGw6bm90KFtjZGtWaXJ0dWFsRm9yXSksLmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi12ZXJ0aWNhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj5vbDpub3QoW2Nka1ZpcnR1YWxGb3JdKSwuY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLXZlcnRpY2FsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPnRhYmxlOm5vdChbY2RrVmlydHVhbEZvcl0pLC5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24tdmVydGljYWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+dWw6bm90KFtjZGtWaXJ0dWFsRm9yXSl7cGFkZGluZy10b3A6MDtwYWRkaW5nLWJvdHRvbTowO21hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOjA7Ym9yZGVyLXRvcC13aWR0aDowO2JvcmRlci1ib3R0b20td2lkdGg6MDtvdXRsaW5lOm5vbmV9LmNkay12aXJ0dWFsLXNjcm9sbC1zcGFjZXJ7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO2hlaWdodDoxcHg7d2lkdGg6MXB4O3RyYW5zZm9ybS1vcmlnaW46MCAwfVtkaXI9cnRsXSAuY2RrLXZpcnR1YWwtc2Nyb2xsLXNwYWNlcntyaWdodDowO2xlZnQ6YXV0bzt0cmFuc2Zvcm0tb3JpZ2luOjEwMCUgMH1cbiJdfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Y2h9LHt0eXBlOkhofSx7dHlwZTp0Q30se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltZSF19XX0se3R5cGU6TXosZGVjb3JhdG9yczpbe3R5cGU6X3N9XX0se3R5cGU6S0h9LHt0eXBlOlFIfV19KSx7c2Nyb2xsZWRJbmRleENoYW5nZTpbe3R5cGU6X199XSxvcmllbnRhdGlvbjpbe3R5cGU6eV99XSxfY29udGVudFdyYXBwZXI6W3t0eXBlOkZyLGFyZ3M6WyJjb250ZW50V3JhcHBlciIse3N0YXRpYzohMH1dfV19KTtjbGFzcyBuRntjb25zdHJ1Y3Rvcih0LGUsbixvLGksYSl7dGhpcy5fdmlld0NvbnRhaW5lclJlZj10LHRoaXMuX3RlbXBsYXRlPWUsdGhpcy5fZGlmZmVycz1uLHRoaXMuX3ZpZXdSZXBlYXRlcj1vLHRoaXMuX3ZpZXdwb3J0PWksdGhpcy52aWV3Q2hhbmdlPW5ldyB4LHRoaXMuX2RhdGFTb3VyY2VDaGFuZ2VzPW5ldyB4LHRoaXMuZGF0YVN0cmVhbT10aGlzLl9kYXRhU291cmNlQ2hhbmdlcy5waXBlKGNuKG51bGwpLChmdW5jdGlvbiByKCl7cmV0dXJuIHQ9PnQubGlmdChuZXcgUWUpfSkoKSxkbigoKFt0LGVdKT0+dGhpcy5fY2hhbmdlRGF0YVNvdXJjZSh0LGUpKSksYW4oMSkpLHRoaXMuX2RpZmZlcj1udWxsLHRoaXMuX25lZWRzVXBkYXRlPSExLHRoaXMuX2Rlc3Ryb3llZD1uZXcgeCx0aGlzLmRhdGFTdHJlYW0uc3Vic2NyaWJlKCh0PT57dGhpcy5fZGF0YT10LHRoaXMuX29uUmVuZGVyZWREYXRhQ2hhbmdlKCl9KSksdGhpcy5fdmlld3BvcnQucmVuZGVyZWRSYW5nZVN0cmVhbS5waXBlKHVuKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgodD0+e3RoaXMuX3JlbmRlcmVkUmFuZ2U9dCxhLnJ1bigoKCk9PnRoaXMudmlld0NoYW5nZS5uZXh0KHRoaXMuX3JlbmRlcmVkUmFuZ2UpKSksdGhpcy5fb25SZW5kZXJlZERhdGFDaGFuZ2UoKX0pKSx0aGlzLl92aWV3cG9ydC5hdHRhY2godGhpcyl9Z2V0IGNka1ZpcnR1YWxGb3JPZigpe3JldHVybiB0aGlzLl9jZGtWaXJ0dWFsRm9yT2Z9c2V0IGNka1ZpcnR1YWxGb3JPZih0KXt0aGlzLl9jZGtWaXJ0dWFsRm9yT2Y9dCxGSCh0KT90aGlzLl9kYXRhU291cmNlQ2hhbmdlcy5uZXh0KHQpOnRoaXMuX2RhdGFTb3VyY2VDaGFuZ2VzLm5leHQobmV3IExIKHV0KHQpP3Q6QXJyYXkuZnJvbSh0fHxbXSkpKX1nZXQgY2RrVmlydHVhbEZvclRyYWNrQnkoKXtyZXR1cm4gdGhpcy5fY2RrVmlydHVhbEZvclRyYWNrQnl9c2V0IGNka1ZpcnR1YWxGb3JUcmFja0J5KHQpe3RoaXMuX25lZWRzVXBkYXRlPSEwLHRoaXMuX2Nka1ZpcnR1YWxGb3JUcmFja0J5PXQ/KGUsbik9PnQoZSsodGhpcy5fcmVuZGVyZWRSYW5nZT90aGlzLl9yZW5kZXJlZFJhbmdlLnN0YXJ0OjApLG4pOnZvaWQgMH1zZXQgY2RrVmlydHVhbEZvclRlbXBsYXRlKHQpe3QmJih0aGlzLl9uZWVkc1VwZGF0ZT0hMCx0aGlzLl90ZW1wbGF0ZT10KX1nZXQgY2RrVmlydHVhbEZvclRlbXBsYXRlQ2FjaGVTaXplKCl7cmV0dXJuIHRoaXMuX3ZpZXdSZXBlYXRlci52aWV3Q2FjaGVTaXplfXNldCBjZGtWaXJ0dWFsRm9yVGVtcGxhdGVDYWNoZVNpemUodCl7dGhpcy5fdmlld1JlcGVhdGVyLnZpZXdDYWNoZVNpemU9c0kodCl9bWVhc3VyZVJhbmdlU2l6ZSh0LGUpe2lmKHQuc3RhcnQ+PXQuZW5kKXJldHVybiAwO2lmKCh0LnN0YXJ0PHRoaXMuX3JlbmRlcmVkUmFuZ2Uuc3RhcnR8fHQuZW5kPnRoaXMuX3JlbmRlcmVkUmFuZ2UuZW5kKSYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpKXRocm93IEVycm9yKCJFcnJvcjogYXR0ZW1wdGVkIHRvIG1lYXN1cmUgYW4gaXRlbSB0aGF0IGlzbid0IHJlbmRlcmVkLiIpO2NvbnN0IG49dC5zdGFydC10aGlzLl9yZW5kZXJlZFJhbmdlLnN0YXJ0LG89dC5lbmQtdC5zdGFydDtsZXQgaSxhO2ZvcihsZXQgdD0wO3Q8bzt0Kyspe2NvbnN0IGU9dGhpcy5fdmlld0NvbnRhaW5lclJlZi5nZXQodCtuKTtpZihlJiZlLnJvb3ROb2Rlcy5sZW5ndGgpe2k9YT1lLnJvb3ROb2Rlc1swXTticmVha319Zm9yKGxldCB0PW8tMTt0Pi0xO3QtLSl7Y29uc3QgZT10aGlzLl92aWV3Q29udGFpbmVyUmVmLmdldCh0K24pO2lmKGUmJmUucm9vdE5vZGVzLmxlbmd0aCl7YT1lLnJvb3ROb2Rlc1tlLnJvb3ROb2Rlcy5sZW5ndGgtMV07YnJlYWt9fXJldHVybiBpJiZhP2VGKGUsImVuZCIsYSktZUYoZSwic3RhcnQiLGkpOjB9bmdEb0NoZWNrKCl7aWYodGhpcy5fZGlmZmVyJiZ0aGlzLl9uZWVkc1VwZGF0ZSl7Y29uc3QgdD10aGlzLl9kaWZmZXIuZGlmZih0aGlzLl9yZW5kZXJlZEl0ZW1zKTt0P3RoaXMuX2FwcGx5Q2hhbmdlcyh0KTp0aGlzLl91cGRhdGVDb250ZXh0KCksdGhpcy5fbmVlZHNVcGRhdGU9ITF9fW5nT25EZXN0cm95KCl7dGhpcy5fdmlld3BvcnQuZGV0YWNoKCksdGhpcy5fZGF0YVNvdXJjZUNoYW5nZXMubmV4dCh2b2lkIDApLHRoaXMuX2RhdGFTb3VyY2VDaGFuZ2VzLmNvbXBsZXRlKCksdGhpcy52aWV3Q2hhbmdlLmNvbXBsZXRlKCksdGhpcy5fZGVzdHJveWVkLm5leHQoKSx0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKSx0aGlzLl92aWV3UmVwZWF0ZXIuZGV0YWNoKCl9X29uUmVuZGVyZWREYXRhQ2hhbmdlKCl7dGhpcy5fcmVuZGVyZWRSYW5nZSYmKHRoaXMuX3JlbmRlcmVkSXRlbXM9dGhpcy5fZGF0YS5zbGljZSh0aGlzLl9yZW5kZXJlZFJhbmdlLnN0YXJ0LHRoaXMuX3JlbmRlcmVkUmFuZ2UuZW5kKSx0aGlzLl9kaWZmZXJ8fCh0aGlzLl9kaWZmZXI9dGhpcy5fZGlmZmVycy5maW5kKHRoaXMuX3JlbmRlcmVkSXRlbXMpLmNyZWF0ZSgoKHQsZSk9PnRoaXMuY2RrVmlydHVhbEZvclRyYWNrQnk/dGhpcy5jZGtWaXJ0dWFsRm9yVHJhY2tCeSh0LGUpOmUpKSksdGhpcy5fbmVlZHNVcGRhdGU9ITApfV9jaGFuZ2VEYXRhU291cmNlKHQsZSl7cmV0dXJuIHQmJnQuZGlzY29ubmVjdCh0aGlzKSx0aGlzLl9uZWVkc1VwZGF0ZT0hMCxlP2UuY29ubmVjdCh0aGlzKTpaKCl9X3VwZGF0ZUNvbnRleHQoKXtjb25zdCB0PXRoaXMuX2RhdGEubGVuZ3RoO2xldCBlPXRoaXMuX3ZpZXdDb250YWluZXJSZWYubGVuZ3RoO2Zvcig7ZS0tOyl7Y29uc3Qgbj10aGlzLl92aWV3Q29udGFpbmVyUmVmLmdldChlKTtuLmNvbnRleHQuaW5kZXg9dGhpcy5fcmVuZGVyZWRSYW5nZS5zdGFydCtlLG4uY29udGV4dC5jb3VudD10LHRoaXMuX3VwZGF0ZUNvbXB1dGVkQ29udGV4dFByb3BlcnRpZXMobi5jb250ZXh0KSxuLmRldGVjdENoYW5nZXMoKX19X2FwcGx5Q2hhbmdlcyh0KXt0aGlzLl92aWV3UmVwZWF0ZXIuYXBwbHlDaGFuZ2VzKHQsdGhpcy5fdmlld0NvbnRhaW5lclJlZiwoKHQsZSxuKT0+dGhpcy5fZ2V0RW1iZWRkZWRWaWV3QXJncyh0LG4pKSwodD0+dC5pdGVtKSksdC5mb3JFYWNoSWRlbnRpdHlDaGFuZ2UoKHQ9Pnt0aGlzLl92aWV3Q29udGFpbmVyUmVmLmdldCh0LmN1cnJlbnRJbmRleCkuY29udGV4dC4kaW1wbGljaXQ9dC5pdGVtfSkpO2NvbnN0IGU9dGhpcy5fZGF0YS5sZW5ndGg7bGV0IG49dGhpcy5fdmlld0NvbnRhaW5lclJlZi5sZW5ndGg7Zm9yKDtuLS07KXtjb25zdCB0PXRoaXMuX3ZpZXdDb250YWluZXJSZWYuZ2V0KG4pO3QuY29udGV4dC5pbmRleD10aGlzLl9yZW5kZXJlZFJhbmdlLnN0YXJ0K24sdC5jb250ZXh0LmNvdW50PWUsdGhpcy5fdXBkYXRlQ29tcHV0ZWRDb250ZXh0UHJvcGVydGllcyh0LmNvbnRleHQpfX1fdXBkYXRlQ29tcHV0ZWRDb250ZXh0UHJvcGVydGllcyh0KXt0LmZpcnN0PTA9PT10LmluZGV4LHQubGFzdD10LmluZGV4PT09dC5jb3VudC0xLHQuZXZlbj10LmluZGV4JTI9PTAsdC5vZGQ9IXQuZXZlbn1fZ2V0RW1iZWRkZWRWaWV3QXJncyh0LGUpe3JldHVybnt0ZW1wbGF0ZVJlZjp0aGlzLl90ZW1wbGF0ZSxjb250ZXh0OnskaW1wbGljaXQ6dC5pdGVtLGNka1ZpcnR1YWxGb3JPZjp0aGlzLl9jZGtWaXJ0dWFsRm9yT2YsaW5kZXg6LTEsY291bnQ6LTEsZmlyc3Q6ITEsbGFzdDohMSxvZGQ6ITEsZXZlbjohMX0saW5kZXg6ZX19fW5GLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxuRikoTXUoWGgpLE11KFVoKSxNdShFaCksTXUoV0gpLE11KHRGLDQpLE11KHRDKSl9LG5GLsm1ZGlyPUpvKHt0eXBlOm5GLHNlbGVjdG9yczpbWyIiLCJjZGtWaXJ0dWFsRm9yIiwiIiwiY2RrVmlydHVhbEZvck9mIiwiIl1dLGlucHV0czp7Y2RrVmlydHVhbEZvck9mOiJjZGtWaXJ0dWFsRm9yT2YiLGNka1ZpcnR1YWxGb3JUcmFja0J5OiJjZGtWaXJ0dWFsRm9yVHJhY2tCeSIsY2RrVmlydHVhbEZvclRlbXBsYXRlOiJjZGtWaXJ0dWFsRm9yVGVtcGxhdGUiLGNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZToiY2RrVmlydHVhbEZvclRlbXBsYXRlQ2FjaGVTaXplIn0sZmVhdHVyZXM6W2loKFt7cHJvdmlkZTpXSCx1c2VDbGFzczpWSH1dKV19KSxuRi5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOlhofSx7dHlwZTpVaH0se3R5cGU6RWh9LHt0eXBlOlZILGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W1dIXX1dfSx7dHlwZTp0RixkZWNvcmF0b3JzOlt7dHlwZTpNc31dfSx7dHlwZTp0Q31dLG5GLnByb3BEZWNvcmF0b3JzPXtjZGtWaXJ0dWFsRm9yT2Y6W3t0eXBlOnlffV0sY2RrVmlydHVhbEZvclRyYWNrQnk6W3t0eXBlOnlffV0sY2RrVmlydHVhbEZvclRlbXBsYXRlOlt7dHlwZTp5X31dLGNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZTpbe3R5cGU6eV99XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihuRixbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJbY2RrVmlydHVhbEZvcl1bY2RrVmlydHVhbEZvck9mXSIscHJvdmlkZXJzOlt7cHJvdmlkZTpXSCx1c2VDbGFzczpWSH1dfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6WGh9LHt0eXBlOlVofSx7dHlwZTpFaH0se3R5cGU6VkgsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbV0hdfV19LHt0eXBlOnRGLGRlY29yYXRvcnM6W3t0eXBlOk1zfV19LHt0eXBlOnRDfV19KSx7Y2RrVmlydHVhbEZvck9mOlt7dHlwZTp5X31dLGNka1ZpcnR1YWxGb3JUcmFja0J5Olt7dHlwZTp5X31dLGNka1ZpcnR1YWxGb3JUZW1wbGF0ZTpbe3R5cGU6eV99XSxjZGtWaXJ0dWFsRm9yVGVtcGxhdGVDYWNoZVNpemU6W3t0eXBlOnlffV19KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIG9Ge31vRi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8b0YpfSxvRi7JtW1vZD1abyh7dHlwZTpvRn0pLG9GLsm1aW5qPWNvKHt9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKG9GLHtkZWNsYXJhdGlvbnM6W0pIXSxleHBvcnRzOltKSF19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKG9GLFt7dHlwZTprXyxhcmdzOlt7ZXhwb3J0czpbSkhdLGRlY2xhcmF0aW9uczpbSkhdfV19XSxudWxsLG51bGwpO2NsYXNzIGlGe31mdW5jdGlvbiBhRigpe3Rocm93IEVycm9yKCJIb3N0IGFscmVhZHkgaGFzIGEgcG9ydGFsIGF0dGFjaGVkIil9aUYuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGlGKX0saUYuybVtb2Q9Wm8oe3R5cGU6aUZ9KSxpRi7JtWluaj1jbyh7aW1wb3J0czpbW3h6LGdJLG9GXSx4eixvRl19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKGlGLHtkZWNsYXJhdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm5bWEgsbkYsdEZdfSxpbXBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW3h6LGdJLG9GXX0sZXhwb3J0czpmdW5jdGlvbigpe3JldHVyblt4eixvRixYSCxuRix0Rl19fSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihpRixbe3R5cGU6a18sYXJnczpbe2ltcG9ydHM6W3h6LGdJLG9GXSxleHBvcnRzOlt4eixvRixYSCxuRix0Rl0sZGVjbGFyYXRpb25zOltYSCxuRix0Rl19XX1dLG51bGwsbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyByRnthdHRhY2godCl7cmV0dXJuKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiYobnVsbD09dCYmKGZ1bmN0aW9uIGUoKXt0aHJvdyBFcnJvcigiQXR0ZW1wdGluZyB0byBhdHRhY2ggYSBwb3J0YWwgdG8gYSBudWxsIFBvcnRhbE91dGxldCIpfSkoKSx0Lmhhc0F0dGFjaGVkKCkmJmFGKCkpLHRoaXMuX2F0dGFjaGVkSG9zdD10LHQuYXR0YWNoKHRoaXMpfWRldGFjaCgpe2xldCB0PXRoaXMuX2F0dGFjaGVkSG9zdDtudWxsIT10Pyh0aGlzLl9hdHRhY2hlZEhvc3Q9bnVsbCx0LmRldGFjaCgpKTooInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJihmdW5jdGlvbiBlKCl7dGhyb3cgRXJyb3IoIkF0dGVtcHRpbmcgdG8gZGV0YWNoIGEgcG9ydGFsIHRoYXQgaXMgbm90IGF0dGFjaGVkIHRvIGEgaG9zdCIpfSkoKX1nZXQgaXNBdHRhY2hlZCgpe3JldHVybiBudWxsIT10aGlzLl9hdHRhY2hlZEhvc3R9c2V0QXR0YWNoZWRIb3N0KHQpe3RoaXMuX2F0dGFjaGVkSG9zdD10fX1jbGFzcyBzRiBleHRlbmRzIHJGe2NvbnN0cnVjdG9yKHQsZSxuLG8pe3N1cGVyKCksdGhpcy5jb21wb25lbnQ9dCx0aGlzLnZpZXdDb250YWluZXJSZWY9ZSx0aGlzLmluamVjdG9yPW4sdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9b319Y2xhc3MgbEYgZXh0ZW5kcyByRntjb25zdHJ1Y3Rvcih0LGUsbil7c3VwZXIoKSx0aGlzLnRlbXBsYXRlUmVmPXQsdGhpcy52aWV3Q29udGFpbmVyUmVmPWUsdGhpcy5jb250ZXh0PW59Z2V0IG9yaWdpbigpe3JldHVybiB0aGlzLnRlbXBsYXRlUmVmLmVsZW1lbnRSZWZ9YXR0YWNoKHQsZT10aGlzLmNvbnRleHQpe3JldHVybiB0aGlzLmNvbnRleHQ9ZSxzdXBlci5hdHRhY2godCl9ZGV0YWNoKCl7cmV0dXJuIHRoaXMuY29udGV4dD12b2lkIDAsc3VwZXIuZGV0YWNoKCl9fWNsYXNzIGNGIGV4dGVuZHMgckZ7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLmVsZW1lbnQ9dCBpbnN0YW5jZW9mIGNoP3QubmF0aXZlRWxlbWVudDp0fX1jbGFzcyBkRntjb25zdHJ1Y3Rvcigpe3RoaXMuX2lzRGlzcG9zZWQ9ITEsdGhpcy5hdHRhY2hEb21Qb3J0YWw9bnVsbH1oYXNBdHRhY2hlZCgpe3JldHVybiEhdGhpcy5fYXR0YWNoZWRQb3J0YWx9YXR0YWNoKHQpe3JldHVybigidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmKHR8fChmdW5jdGlvbiBlKCl7dGhyb3cgRXJyb3IoIk11c3QgcHJvdmlkZSBhIHBvcnRhbCB0byBhdHRhY2giKX0pKCksdGhpcy5oYXNBdHRhY2hlZCgpJiZhRigpLHRoaXMuX2lzRGlzcG9zZWQmJihmdW5jdGlvbiBuKCl7dGhyb3cgRXJyb3IoIlRoaXMgUG9ydGFsT3V0bGV0IGhhcyBhbHJlYWR5IGJlZW4gZGlzcG9zZWQiKX0pKCkpLHQgaW5zdGFuY2VvZiBzRj8odGhpcy5fYXR0YWNoZWRQb3J0YWw9dCx0aGlzLmF0dGFjaENvbXBvbmVudFBvcnRhbCh0KSk6dCBpbnN0YW5jZW9mIGxGPyh0aGlzLl9hdHRhY2hlZFBvcnRhbD10LHRoaXMuYXR0YWNoVGVtcGxhdGVQb3J0YWwodCkpOnRoaXMuYXR0YWNoRG9tUG9ydGFsJiZ0IGluc3RhbmNlb2YgY0Y/KHRoaXMuX2F0dGFjaGVkUG9ydGFsPXQsdGhpcy5hdHRhY2hEb21Qb3J0YWwodCkpOnZvaWQoKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiYoZnVuY3Rpb24gbygpe3Rocm93IEVycm9yKCJBdHRlbXB0aW5nIHRvIGF0dGFjaCBhbiB1bmtub3duIFBvcnRhbCB0eXBlLiBCYXNlUG9ydGFsT3V0bGV0IGFjY2VwdHMgZWl0aGVyIGEgQ29tcG9uZW50UG9ydGFsIG9yIGEgVGVtcGxhdGVQb3J0YWwuIil9KSgpKX1kZXRhY2goKXt0aGlzLl9hdHRhY2hlZFBvcnRhbCYmKHRoaXMuX2F0dGFjaGVkUG9ydGFsLnNldEF0dGFjaGVkSG9zdChudWxsKSx0aGlzLl9hdHRhY2hlZFBvcnRhbD1udWxsKSx0aGlzLl9pbnZva2VEaXNwb3NlRm4oKX1kaXNwb3NlKCl7dGhpcy5oYXNBdHRhY2hlZCgpJiZ0aGlzLmRldGFjaCgpLHRoaXMuX2ludm9rZURpc3Bvc2VGbigpLHRoaXMuX2lzRGlzcG9zZWQ9ITB9c2V0RGlzcG9zZUZuKHQpe3RoaXMuX2Rpc3Bvc2VGbj10fV9pbnZva2VEaXNwb3NlRm4oKXt0aGlzLl9kaXNwb3NlRm4mJih0aGlzLl9kaXNwb3NlRm4oKSx0aGlzLl9kaXNwb3NlRm49bnVsbCl9fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jbGFzcyBwRiBleHRlbmRzIGRGe2NvbnN0cnVjdG9yKHQsZSxuLG8saSl7c3VwZXIoKSx0aGlzLm91dGxldEVsZW1lbnQ9dCx0aGlzLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9ZSx0aGlzLl9hcHBSZWY9bix0aGlzLl9kZWZhdWx0SW5qZWN0b3I9byx0aGlzLmF0dGFjaERvbVBvcnRhbD10PT57aWYoIXRoaXMuX2RvY3VtZW50JiYoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkpdGhyb3cgRXJyb3IoIkNhbm5vdCBhdHRhY2ggRE9NIHBvcnRhbCB3aXRob3V0IF9kb2N1bWVudCBjb25zdHJ1Y3RvciBwYXJhbWV0ZXIiKTtjb25zdCBlPXQuZWxlbWVudDtpZighZS5wYXJlbnROb2RlJiYoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkpdGhyb3cgRXJyb3IoIkRPTSBwb3J0YWwgY29udGVudCBtdXN0IGJlIGF0dGFjaGVkIHRvIGEgcGFyZW50IG5vZGUuIik7Y29uc3Qgbj10aGlzLl9kb2N1bWVudC5jcmVhdGVDb21tZW50KCJkb20tcG9ydGFsIik7ZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShuLGUpLHRoaXMub3V0bGV0RWxlbWVudC5hcHBlbmRDaGlsZChlKSx0aGlzLl9hdHRhY2hlZFBvcnRhbD10LHN1cGVyLnNldERpc3Bvc2VGbigoKCk9PntuLnBhcmVudE5vZGUmJm4ucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoZSxuKX0pKX0sdGhpcy5fZG9jdW1lbnQ9aX1hdHRhY2hDb21wb25lbnRQb3J0YWwodCl7Y29uc3QgZT0odC5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJ8fHRoaXMuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcikucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkodC5jb21wb25lbnQpO2xldCBuO3JldHVybiB0LnZpZXdDb250YWluZXJSZWY/KG49dC52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChlLHQudmlld0NvbnRhaW5lclJlZi5sZW5ndGgsdC5pbmplY3Rvcnx8dC52aWV3Q29udGFpbmVyUmVmLmluamVjdG9yKSx0aGlzLnNldERpc3Bvc2VGbigoKCk9Pm4uZGVzdHJveSgpKSkpOihuPWUuY3JlYXRlKHQuaW5qZWN0b3J8fHRoaXMuX2RlZmF1bHRJbmplY3RvciksdGhpcy5fYXBwUmVmLmF0dGFjaFZpZXcobi5ob3N0VmlldyksdGhpcy5zZXREaXNwb3NlRm4oKCgpPT57dGhpcy5fYXBwUmVmLmRldGFjaFZpZXcobi5ob3N0Vmlldyksbi5kZXN0cm95KCl9KSkpLHRoaXMub3V0bGV0RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9nZXRDb21wb25lbnRSb290Tm9kZShuKSksdGhpcy5fYXR0YWNoZWRQb3J0YWw9dCxufWF0dGFjaFRlbXBsYXRlUG9ydGFsKHQpe2xldCBlPXQudmlld0NvbnRhaW5lclJlZixuPWUuY3JlYXRlRW1iZWRkZWRWaWV3KHQudGVtcGxhdGVSZWYsdC5jb250ZXh0KTtyZXR1cm4gbi5yb290Tm9kZXMuZm9yRWFjaCgodD0+dGhpcy5vdXRsZXRFbGVtZW50LmFwcGVuZENoaWxkKHQpKSksbi5kZXRlY3RDaGFuZ2VzKCksdGhpcy5zZXREaXNwb3NlRm4oKCgpPT57bGV0IHQ9ZS5pbmRleE9mKG4pOy0xIT09dCYmZS5yZW1vdmUodCl9KSksdGhpcy5fYXR0YWNoZWRQb3J0YWw9dCxufWRpc3Bvc2UoKXtzdXBlci5kaXNwb3NlKCksbnVsbCE9dGhpcy5vdXRsZXRFbGVtZW50LnBhcmVudE5vZGUmJnRoaXMub3V0bGV0RWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMub3V0bGV0RWxlbWVudCl9X2dldENvbXBvbmVudFJvb3ROb2RlKHQpe3JldHVybiB0Lmhvc3RWaWV3LnJvb3ROb2Rlc1swXX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NsYXNzIG1GIGV4dGVuZHMgbEZ7Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpfX1tRi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8bUYpKE11KFVoKSxNdShYaCkpfSxtRi7JtWRpcj1Kbyh7dHlwZTptRixzZWxlY3RvcnM6W1siIiwiY2RrUG9ydGFsIiwiIl1dLGV4cG9ydEFzOlsiY2RrUG9ydGFsIl0sZmVhdHVyZXM6W2dtXX0pLG1GLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6VWh9LHt0eXBlOlhofV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihtRixbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJbY2RrUG9ydGFsXSIsZXhwb3J0QXM6ImNka1BvcnRhbCJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpVaH0se3R5cGU6WGh9XX0pLG51bGwpO2NsYXNzIHVGIGV4dGVuZHMgbUZ7fXVGLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIGZGKGV8fHVGKX0sdUYuybVkaXI9Sm8oe3R5cGU6dUYsc2VsZWN0b3JzOltbIiIsImNkay1wb3J0YWwiLCIiXSxbIiIsInBvcnRhbCIsIiJdXSxleHBvcnRBczpbImNka1BvcnRhbCJdLGZlYXR1cmVzOltpaChbe3Byb3ZpZGU6bUYsdXNlRXhpc3Rpbmc6dUZ9XSksZ21dfSk7Y29uc3QgZkY9dnIodUYpOygidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIodUYsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoiW2Nkay1wb3J0YWxdLCBbcG9ydGFsXSIsZXhwb3J0QXM6ImNka1BvcnRhbCIscHJvdmlkZXJzOlt7cHJvdmlkZTptRix1c2VFeGlzdGluZzp1Rn1dfV19XSxudWxsLG51bGwpO2NsYXNzIGdGIGV4dGVuZHMgZEZ7Y29uc3RydWN0b3IodCxlLG4pe3N1cGVyKCksdGhpcy5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyPXQsdGhpcy5fdmlld0NvbnRhaW5lclJlZj1lLHRoaXMuX2lzSW5pdGlhbGl6ZWQ9ITEsdGhpcy5hdHRhY2hlZD1uZXcgQWIsdGhpcy5hdHRhY2hEb21Qb3J0YWw9dD0+e2lmKCF0aGlzLl9kb2N1bWVudCYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpKXRocm93IEVycm9yKCJDYW5ub3QgYXR0YWNoIERPTSBwb3J0YWwgd2l0aG91dCBfZG9jdW1lbnQgY29uc3RydWN0b3IgcGFyYW1ldGVyIik7Y29uc3QgZT10LmVsZW1lbnQ7aWYoIWUucGFyZW50Tm9kZSYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpKXRocm93IEVycm9yKCJET00gcG9ydGFsIGNvbnRlbnQgbXVzdCBiZSBhdHRhY2hlZCB0byBhIHBhcmVudCBub2RlLiIpO2NvbnN0IG49dGhpcy5fZG9jdW1lbnQuY3JlYXRlQ29tbWVudCgiZG9tLXBvcnRhbCIpO3Quc2V0QXR0YWNoZWRIb3N0KHRoaXMpLGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobixlKSx0aGlzLl9nZXRSb290Tm9kZSgpLmFwcGVuZENoaWxkKGUpLHRoaXMuX2F0dGFjaGVkUG9ydGFsPXQsc3VwZXIuc2V0RGlzcG9zZUZuKCgoKT0+e24ucGFyZW50Tm9kZSYmbi5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChlLG4pfSkpfSx0aGlzLl9kb2N1bWVudD1ufWdldCBwb3J0YWwoKXtyZXR1cm4gdGhpcy5fYXR0YWNoZWRQb3J0YWx9c2V0IHBvcnRhbCh0KXsoIXRoaXMuaGFzQXR0YWNoZWQoKXx8dHx8dGhpcy5faXNJbml0aWFsaXplZCkmJih0aGlzLmhhc0F0dGFjaGVkKCkmJnN1cGVyLmRldGFjaCgpLHQmJnN1cGVyLmF0dGFjaCh0KSx0aGlzLl9hdHRhY2hlZFBvcnRhbD10KX1nZXQgYXR0YWNoZWRSZWYoKXtyZXR1cm4gdGhpcy5fYXR0YWNoZWRSZWZ9bmdPbkluaXQoKXt0aGlzLl9pc0luaXRpYWxpemVkPSEwfW5nT25EZXN0cm95KCl7c3VwZXIuZGlzcG9zZSgpLHRoaXMuX2F0dGFjaGVkUG9ydGFsPW51bGwsdGhpcy5fYXR0YWNoZWRSZWY9bnVsbH1hdHRhY2hDb21wb25lbnRQb3J0YWwodCl7dC5zZXRBdHRhY2hlZEhvc3QodGhpcyk7Y29uc3QgZT1udWxsIT10LnZpZXdDb250YWluZXJSZWY/dC52aWV3Q29udGFpbmVyUmVmOnRoaXMuX3ZpZXdDb250YWluZXJSZWYsbj0odC5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJ8fHRoaXMuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcikucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkodC5jb21wb25lbnQpLG89ZS5jcmVhdGVDb21wb25lbnQobixlLmxlbmd0aCx0LmluamVjdG9yfHxlLmluamVjdG9yKTtyZXR1cm4gZSE9PXRoaXMuX3ZpZXdDb250YWluZXJSZWYmJnRoaXMuX2dldFJvb3ROb2RlKCkuYXBwZW5kQ2hpbGQoby5ob3N0Vmlldy5yb290Tm9kZXNbMF0pLHN1cGVyLnNldERpc3Bvc2VGbigoKCk9Pm8uZGVzdHJveSgpKSksdGhpcy5fYXR0YWNoZWRQb3J0YWw9dCx0aGlzLl9hdHRhY2hlZFJlZj1vLHRoaXMuYXR0YWNoZWQuZW1pdChvKSxvfWF0dGFjaFRlbXBsYXRlUG9ydGFsKHQpe3Quc2V0QXR0YWNoZWRIb3N0KHRoaXMpO2NvbnN0IGU9dGhpcy5fdmlld0NvbnRhaW5lclJlZi5jcmVhdGVFbWJlZGRlZFZpZXcodC50ZW1wbGF0ZVJlZix0LmNvbnRleHQpO3JldHVybiBzdXBlci5zZXREaXNwb3NlRm4oKCgpPT50aGlzLl92aWV3Q29udGFpbmVyUmVmLmNsZWFyKCkpKSx0aGlzLl9hdHRhY2hlZFBvcnRhbD10LHRoaXMuX2F0dGFjaGVkUmVmPWUsdGhpcy5hdHRhY2hlZC5lbWl0KGUpLGV9X2dldFJvb3ROb2RlKCl7Y29uc3QgdD10aGlzLl92aWV3Q29udGFpbmVyUmVmLmVsZW1lbnQubmF0aXZlRWxlbWVudDtyZXR1cm4gdC5ub2RlVHlwZT09PXQuRUxFTUVOVF9OT0RFP3Q6dC5wYXJlbnROb2RlfX1nRi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8Z0YpKE11KHJoKSxNdShYaCksTXUoVUMpKX0sZ0YuybVkaXI9Sm8oe3R5cGU6Z0Ysc2VsZWN0b3JzOltbIiIsImNka1BvcnRhbE91dGxldCIsIiJdXSxpbnB1dHM6e3BvcnRhbDpbImNka1BvcnRhbE91dGxldCIsInBvcnRhbCJdfSxvdXRwdXRzOnthdHRhY2hlZDoiYXR0YWNoZWQifSxleHBvcnRBczpbImNka1BvcnRhbE91dGxldCJdLGZlYXR1cmVzOltnbV19KSxnRi5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOnJofSx7dHlwZTpYaH0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W1VDXX1dfV0sZ0YucHJvcERlY29yYXRvcnM9e2F0dGFjaGVkOlt7dHlwZTpfX31dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGdGLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6IltjZGtQb3J0YWxPdXRsZXRdIixleHBvcnRBczoiY2RrUG9ydGFsT3V0bGV0IixpbnB1dHM6WyJwb3J0YWw6IGNka1BvcnRhbE91dGxldCJdfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6cmh9LHt0eXBlOlhofSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbVUNdfV19XX0pLHthdHRhY2hlZDpbe3R5cGU6X199XX0pO2NsYXNzIGhGIGV4dGVuZHMgZ0Z7fWhGLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIGJGKGV8fGhGKX0saEYuybVkaXI9Sm8oe3R5cGU6aEYsc2VsZWN0b3JzOltbIiIsImNka1BvcnRhbEhvc3QiLCIiXSxbIiIsInBvcnRhbEhvc3QiLCIiXV0saW5wdXRzOntwb3J0YWw6WyJjZGtQb3J0YWxIb3N0IiwicG9ydGFsIl19LGV4cG9ydEFzOlsiY2RrUG9ydGFsSG9zdCJdLGZlYXR1cmVzOltpaChbe3Byb3ZpZGU6Z0YsdXNlRXhpc3Rpbmc6aEZ9XSksZ21dfSk7Y29uc3QgYkY9dnIoaEYpOygidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoaEYsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoiW2Nka1BvcnRhbEhvc3RdLCBbcG9ydGFsSG9zdF0iLGV4cG9ydEFzOiJjZGtQb3J0YWxIb3N0IixpbnB1dHM6WyJwb3J0YWw6IGNka1BvcnRhbEhvc3QiXSxwcm92aWRlcnM6W3twcm92aWRlOmdGLHVzZUV4aXN0aW5nOmhGfV19XX1dLG51bGwsbnVsbCk7Y2xhc3MgeUZ7fXlGLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHx5Ril9LHlGLsm1bW9kPVpvKHt0eXBlOnlGfSkseUYuybVpbmo9Y28oe30pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oeUYse2RlY2xhcmF0aW9uczpbbUYsZ0YsdUYsaEZdLGV4cG9ydHM6W21GLGdGLHVGLGhGXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoeUYsW3t0eXBlOmtfLGFyZ3M6W3tleHBvcnRzOlttRixnRix1RixoRl0sZGVjbGFyYXRpb25zOlttRixnRix1RixoRl19XX1dLG51bGwsbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCBfRj14SSgpO2NsYXNzIENGe2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5fdmlld3BvcnRSdWxlcj10LHRoaXMuX3ByZXZpb3VzSFRNTFN0eWxlcz17dG9wOiIiLGxlZnQ6IiJ9LHRoaXMuX2lzRW5hYmxlZD0hMSx0aGlzLl9kb2N1bWVudD1lfWF0dGFjaCgpe31lbmFibGUoKXtpZih0aGlzLl9jYW5CZUVuYWJsZWQoKSl7Y29uc3QgdD10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7dGhpcy5fcHJldmlvdXNTY3JvbGxQb3NpdGlvbj10aGlzLl92aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKSx0aGlzLl9wcmV2aW91c0hUTUxTdHlsZXMubGVmdD10LnN0eWxlLmxlZnR8fCIiLHRoaXMuX3ByZXZpb3VzSFRNTFN0eWxlcy50b3A9dC5zdHlsZS50b3B8fCIiLHQuc3R5bGUubGVmdD1kSSgtdGhpcy5fcHJldmlvdXNTY3JvbGxQb3NpdGlvbi5sZWZ0KSx0LnN0eWxlLnRvcD1kSSgtdGhpcy5fcHJldmlvdXNTY3JvbGxQb3NpdGlvbi50b3ApLHQuY2xhc3NMaXN0LmFkZCgiY2RrLWdsb2JhbC1zY3JvbGxibG9jayIpLHRoaXMuX2lzRW5hYmxlZD0hMH19ZGlzYWJsZSgpe2lmKHRoaXMuX2lzRW5hYmxlZCl7Y29uc3QgdD10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsZT10LnN0eWxlLG49dGhpcy5fZG9jdW1lbnQuYm9keS5zdHlsZSxvPWUuc2Nyb2xsQmVoYXZpb3J8fCIiLGk9bi5zY3JvbGxCZWhhdmlvcnx8IiI7dGhpcy5faXNFbmFibGVkPSExLGUubGVmdD10aGlzLl9wcmV2aW91c0hUTUxTdHlsZXMubGVmdCxlLnRvcD10aGlzLl9wcmV2aW91c0hUTUxTdHlsZXMudG9wLHQuY2xhc3NMaXN0LnJlbW92ZSgiY2RrLWdsb2JhbC1zY3JvbGxibG9jayIpLF9GJiYoZS5zY3JvbGxCZWhhdmlvcj1uLnNjcm9sbEJlaGF2aW9yPSJhdXRvIiksd2luZG93LnNjcm9sbCh0aGlzLl9wcmV2aW91c1Njcm9sbFBvc2l0aW9uLmxlZnQsdGhpcy5fcHJldmlvdXNTY3JvbGxQb3NpdGlvbi50b3ApLF9GJiYoZS5zY3JvbGxCZWhhdmlvcj1vLG4uc2Nyb2xsQmVoYXZpb3I9aSl9fV9jYW5CZUVuYWJsZWQoKXtpZih0aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCJjZGstZ2xvYmFsLXNjcm9sbGJsb2NrIil8fHRoaXMuX2lzRW5hYmxlZClyZXR1cm4hMTtjb25zdCB0PXRoaXMuX2RvY3VtZW50LmJvZHksZT10aGlzLl92aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2l6ZSgpO3JldHVybiB0LnNjcm9sbEhlaWdodD5lLmhlaWdodHx8dC5zY3JvbGxXaWR0aD5lLndpZHRofX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovZnVuY3Rpb24gTUYoKXtyZXR1cm4gRXJyb3IoIlNjcm9sbCBzdHJhdGVneSBoYXMgYWxyZWFkeSBiZWVuIGF0dGFjaGVkLiIpfWNsYXNzIHZGe2NvbnN0cnVjdG9yKHQsZSxuLG8pe3RoaXMuX3Njcm9sbERpc3BhdGNoZXI9dCx0aGlzLl9uZ1pvbmU9ZSx0aGlzLl92aWV3cG9ydFJ1bGVyPW4sdGhpcy5fY29uZmlnPW8sdGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uPW51bGwsdGhpcy5fZGV0YWNoPSgpPT57dGhpcy5kaXNhYmxlKCksdGhpcy5fb3ZlcmxheVJlZi5oYXNBdHRhY2hlZCgpJiZ0aGlzLl9uZ1pvbmUucnVuKCgoKT0+dGhpcy5fb3ZlcmxheVJlZi5kZXRhY2goKSkpfX1hdHRhY2godCl7aWYodGhpcy5fb3ZlcmxheVJlZiYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpKXRocm93IE1GKCk7dGhpcy5fb3ZlcmxheVJlZj10fWVuYWJsZSgpe2lmKHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbilyZXR1cm47Y29uc3QgdD10aGlzLl9zY3JvbGxEaXNwYXRjaGVyLnNjcm9sbGVkKDApO3RoaXMuX2NvbmZpZyYmdGhpcy5fY29uZmlnLnRocmVzaG9sZCYmdGhpcy5fY29uZmlnLnRocmVzaG9sZD4xPyh0aGlzLl9pbml0aWFsU2Nyb2xsUG9zaXRpb249dGhpcy5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCkudG9wLHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj10LnN1YnNjcmliZSgoKCk9Pntjb25zdCB0PXRoaXMuX3ZpZXdwb3J0UnVsZXIuZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpLnRvcDtNYXRoLmFicyh0LXRoaXMuX2luaXRpYWxTY3JvbGxQb3NpdGlvbik+dGhpcy5fY29uZmlnLnRocmVzaG9sZD90aGlzLl9kZXRhY2goKTp0aGlzLl9vdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKCl9KSkpOnRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj10LnN1YnNjcmliZSh0aGlzLl9kZXRhY2gpfWRpc2FibGUoKXt0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb24mJih0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb249bnVsbCl9ZGV0YWNoKCl7dGhpcy5kaXNhYmxlKCksdGhpcy5fb3ZlcmxheVJlZj1udWxsfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY2xhc3MgeEZ7ZW5hYmxlKCl7fWRpc2FibGUoKXt9YXR0YWNoKCl7fX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovZnVuY3Rpb24gT0YodCxlKXtyZXR1cm4gZS5zb21lKChlPT50LmJvdHRvbTxlLnRvcHx8dC50b3A+ZS5ib3R0b218fHQucmlnaHQ8ZS5sZWZ0fHx0LmxlZnQ+ZS5yaWdodCkpfWZ1bmN0aW9uIFBGKHQsZSl7cmV0dXJuIGUuc29tZSgoZT0+dC50b3A8ZS50b3B8fHQuYm90dG9tPmUuYm90dG9tfHx0LmxlZnQ8ZS5sZWZ0fHx0LnJpZ2h0PmUucmlnaHQpKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY2xhc3Mgd0Z7Y29uc3RydWN0b3IodCxlLG4sbyl7dGhpcy5fc2Nyb2xsRGlzcGF0Y2hlcj10LHRoaXMuX3ZpZXdwb3J0UnVsZXI9ZSx0aGlzLl9uZ1pvbmU9bix0aGlzLl9jb25maWc9byx0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb249bnVsbH1hdHRhY2godCl7aWYodGhpcy5fb3ZlcmxheVJlZiYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpKXRocm93IE1GKCk7dGhpcy5fb3ZlcmxheVJlZj10fWVuYWJsZSgpe3RoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbnx8KHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj10aGlzLl9zY3JvbGxEaXNwYXRjaGVyLnNjcm9sbGVkKHRoaXMuX2NvbmZpZz90aGlzLl9jb25maWcuc2Nyb2xsVGhyb3R0bGU6MCkuc3Vic2NyaWJlKCgoKT0+e2lmKHRoaXMuX292ZXJsYXlSZWYudXBkYXRlUG9zaXRpb24oKSx0aGlzLl9jb25maWcmJnRoaXMuX2NvbmZpZy5hdXRvQ2xvc2Upe2NvbnN0IHQ9dGhpcy5fb3ZlcmxheVJlZi5vdmVybGF5RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx7d2lkdGg6ZSxoZWlnaHQ6bn09dGhpcy5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNpemUoKTtPRih0LFt7d2lkdGg6ZSxoZWlnaHQ6bixib3R0b206bixyaWdodDplLHRvcDowLGxlZnQ6MH1dKSYmKHRoaXMuZGlzYWJsZSgpLHRoaXMuX25nWm9uZS5ydW4oKCgpPT50aGlzLl9vdmVybGF5UmVmLmRldGFjaCgpKSkpfX0pKSl9ZGlzYWJsZSgpe3RoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbiYmKHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj1udWxsKX1kZXRhY2goKXt0aGlzLmRpc2FibGUoKSx0aGlzLl9vdmVybGF5UmVmPW51bGx9fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jbGFzcyBrRntjb25zdHJ1Y3Rvcih0LGUsbixvKXt0aGlzLl9zY3JvbGxEaXNwYXRjaGVyPXQsdGhpcy5fdmlld3BvcnRSdWxlcj1lLHRoaXMuX25nWm9uZT1uLHRoaXMubm9vcD0oKT0+bmV3IHhGLHRoaXMuY2xvc2U9dD0+bmV3IHZGKHRoaXMuX3Njcm9sbERpc3BhdGNoZXIsdGhpcy5fbmdab25lLHRoaXMuX3ZpZXdwb3J0UnVsZXIsdCksdGhpcy5ibG9jaz0oKT0+bmV3IENGKHRoaXMuX3ZpZXdwb3J0UnVsZXIsdGhpcy5fZG9jdW1lbnQpLHRoaXMucmVwb3NpdGlvbj10PT5uZXcgd0YodGhpcy5fc2Nyb2xsRGlzcGF0Y2hlcix0aGlzLl92aWV3cG9ydFJ1bGVyLHRoaXMuX25nWm9uZSx0KSx0aGlzLl9kb2N1bWVudD1vfX1rRi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8a0YpKHVzKEtIKSx1cyhRSCksdXModEMpLHVzKFVDKSl9LGtGLsm1cHJvdj1sbyh7ZmFjdG9yeTpmdW5jdGlvbiB0KCl7cmV0dXJuIG5ldyBrRih1cyhLSCksdXMoUUgpLHVzKHRDKSx1cyhVQykpfSx0b2tlbjprRixwcm92aWRlZEluOiJyb290In0pLGtGLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6S0h9LHt0eXBlOlFIfSx7dHlwZTp0Q30se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W1VDXX1dfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihrRixbe3R5cGU6Sm0sYXJnczpbe3Byb3ZpZGVkSW46InJvb3QifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6S0h9LHt0eXBlOlFIfSx7dHlwZTp0Q30se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W1VDXX1dfV19KSxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCi8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyBTRntjb25zdHJ1Y3Rvcih0KXtpZih0aGlzLnNjcm9sbFN0cmF0ZWd5PW5ldyB4Rix0aGlzLnBhbmVsQ2xhc3M9IiIsdGhpcy5oYXNCYWNrZHJvcD0hMSx0aGlzLmJhY2tkcm9wQ2xhc3M9ImNkay1vdmVybGF5LWRhcmstYmFja2Ryb3AiLHRoaXMuZGlzcG9zZU9uTmF2aWdhdGlvbj0hMSx0KXtjb25zdCBlPU9iamVjdC5rZXlzKHQpO2Zvcihjb25zdCBuIG9mIGUpdm9pZCAwIT09dFtuXSYmKHRoaXNbbl09dFtuXSl9fX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY2xhc3MgREZ7Y29uc3RydWN0b3IodCxlLG4sbyxpKXt0aGlzLm9mZnNldFg9bix0aGlzLm9mZnNldFk9byx0aGlzLnBhbmVsQ2xhc3M9aSx0aGlzLm9yaWdpblg9dC5vcmlnaW5YLHRoaXMub3JpZ2luWT10Lm9yaWdpblksdGhpcy5vdmVybGF5WD1lLm92ZXJsYXlYLHRoaXMub3ZlcmxheVk9ZS5vdmVybGF5WX19Y2xhc3MgRUZ7fWNsYXNzIEFGe2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5jb25uZWN0aW9uUGFpcj10LHRoaXMuc2Nyb2xsYWJsZVZpZXdQcm9wZXJ0aWVzPWV9fWZ1bmN0aW9uIFJGKHQsZSl7aWYoInRvcCIhPT1lJiYiYm90dG9tIiE9PWUmJiJjZW50ZXIiIT09ZSl0aHJvdyBFcnJvcihgQ29ubmVjdGVkUG9zaXRpb246IEludmFsaWQgJHt0fSAiJHtlfSIuIEV4cGVjdGVkICJ0b3AiLCAiYm90dG9tIiBvciAiY2VudGVyIi5gKX1mdW5jdGlvbiBURih0LGUpe2lmKCJzdGFydCIhPT1lJiYiZW5kIiE9PWUmJiJjZW50ZXIiIT09ZSl0aHJvdyBFcnJvcihgQ29ubmVjdGVkUG9zaXRpb246IEludmFsaWQgJHt0fSAiJHtlfSIuIEV4cGVjdGVkICJzdGFydCIsICJlbmQiIG9yICJjZW50ZXIiLmApfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9BRi5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOkRGfSx7dHlwZTpFRixkZWNvcmF0b3JzOlt7dHlwZTpfc31dfV07Y2xhc3MgTkZ7Y29uc3RydWN0b3IodCl7dGhpcy5fYXR0YWNoZWRPdmVybGF5cz1bXSx0aGlzLl9kb2N1bWVudD10fW5nT25EZXN0cm95KCl7dGhpcy5kZXRhY2goKX1hZGQodCl7dGhpcy5yZW1vdmUodCksdGhpcy5fYXR0YWNoZWRPdmVybGF5cy5wdXNoKHQpfXJlbW92ZSh0KXtjb25zdCBlPXRoaXMuX2F0dGFjaGVkT3ZlcmxheXMuaW5kZXhPZih0KTtlPi0xJiZ0aGlzLl9hdHRhY2hlZE92ZXJsYXlzLnNwbGljZShlLDEpLDA9PT10aGlzLl9hdHRhY2hlZE92ZXJsYXlzLmxlbmd0aCYmdGhpcy5kZXRhY2goKX19TkYuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fE5GKSh1cyhVQykpfSxORi7JtXByb3Y9bG8oe2ZhY3Rvcnk6ZnVuY3Rpb24gdCgpe3JldHVybiBuZXcgTkYodXMoVUMpKX0sdG9rZW46TkYscHJvdmlkZWRJbjoicm9vdCJ9KSxORi5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltVQ119XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoTkYsW3t0eXBlOkptLGFyZ3M6W3twcm92aWRlZEluOiJyb290In1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltVQ119XX1dfSksbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyBJRiBleHRlbmRzIE5Ge2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpLHRoaXMuX2tleWRvd25MaXN0ZW5lcj10PT57Y29uc3QgZT10aGlzLl9hdHRhY2hlZE92ZXJsYXlzO2ZvcihsZXQgbj1lLmxlbmd0aC0xO24+LTE7bi0tKWlmKGVbbl0uX2tleWRvd25FdmVudHMub2JzZXJ2ZXJzLmxlbmd0aD4wKXtlW25dLl9rZXlkb3duRXZlbnRzLm5leHQodCk7YnJlYWt9fX1hZGQodCl7c3VwZXIuYWRkKHQpLHRoaXMuX2lzQXR0YWNoZWR8fCh0aGlzLl9kb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLHRoaXMuX2tleWRvd25MaXN0ZW5lciksdGhpcy5faXNBdHRhY2hlZD0hMCl9ZGV0YWNoKCl7dGhpcy5faXNBdHRhY2hlZCYmKHRoaXMuX2RvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy5fa2V5ZG93bkxpc3RlbmVyKSx0aGlzLl9pc0F0dGFjaGVkPSExKX19SUYuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fElGKSh1cyhVQykpfSxJRi7JtXByb3Y9bG8oe2ZhY3Rvcnk6ZnVuY3Rpb24gdCgpe3JldHVybiBuZXcgSUYodXMoVUMpKX0sdG9rZW46SUYscHJvdmlkZWRJbjoicm9vdCJ9KSxJRi5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltVQ119XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoSUYsW3t0eXBlOkptLGFyZ3M6W3twcm92aWRlZEluOiJyb290In1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltVQ119XX1dfSksbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyB6RiBleHRlbmRzIE5Ge2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCksdGhpcy5fcGxhdGZvcm09ZSx0aGlzLl9jdXJzb3JTdHlsZUlzU2V0PSExLHRoaXMuX2NsaWNrTGlzdGVuZXI9dD0+e2NvbnN0IGU9dC5jb21wb3NlZFBhdGg/dC5jb21wb3NlZFBhdGgoKVswXTp0LnRhcmdldCxuPXRoaXMuX2F0dGFjaGVkT3ZlcmxheXMuc2xpY2UoKTtmb3IobGV0IG89bi5sZW5ndGgtMTtvPi0xO28tLSl7Y29uc3QgaT1uW29dO2lmKCEoaS5fb3V0c2lkZVBvaW50ZXJFdmVudHMub2JzZXJ2ZXJzLmxlbmd0aDwxKSYmaS5oYXNBdHRhY2hlZCgpKXtpZihpLm92ZXJsYXlFbGVtZW50LmNvbnRhaW5zKGUpKWJyZWFrO2kuX291dHNpZGVQb2ludGVyRXZlbnRzLm5leHQodCl9fX19YWRkKHQpe3N1cGVyLmFkZCh0KSx0aGlzLl9pc0F0dGFjaGVkfHwodGhpcy5fZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5fY2xpY2tMaXN0ZW5lciwhMCksdGhpcy5fZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsdGhpcy5fY2xpY2tMaXN0ZW5lciwhMCksdGhpcy5fcGxhdGZvcm0uSU9TJiYhdGhpcy5fY3Vyc29yU3R5bGVJc1NldCYmKHRoaXMuX2N1cnNvck9yaWdpbmFsVmFsdWU9dGhpcy5fZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IsdGhpcy5fZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3I9InBvaW50ZXIiLHRoaXMuX2N1cnNvclN0eWxlSXNTZXQ9ITApLHRoaXMuX2lzQXR0YWNoZWQ9ITApfWRldGFjaCgpe3RoaXMuX2lzQXR0YWNoZWQmJih0aGlzLl9kb2N1bWVudC5ib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLl9jbGlja0xpc3RlbmVyLCEwKSx0aGlzLl9kb2N1bWVudC5ib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51Iix0aGlzLl9jbGlja0xpc3RlbmVyLCEwKSx0aGlzLl9wbGF0Zm9ybS5JT1MmJnRoaXMuX2N1cnNvclN0eWxlSXNTZXQmJih0aGlzLl9kb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvcj10aGlzLl9jdXJzb3JPcmlnaW5hbFZhbHVlLHRoaXMuX2N1cnNvclN0eWxlSXNTZXQ9ITEpLHRoaXMuX2lzQXR0YWNoZWQ9ITEpfX16Ri7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8ekYpKHVzKFVDKSx1cyhmSSkpfSx6Ri7JtXByb3Y9bG8oe2ZhY3Rvcnk6ZnVuY3Rpb24gdCgpe3JldHVybiBuZXcgekYodXMoVUMpLHVzKGZJKSl9LHRva2VuOnpGLHByb3ZpZGVkSW46InJvb3QifSksekYuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbVUNdfV19LHt0eXBlOmZJfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYih6Rixbe3R5cGU6Sm0sYXJnczpbe3Byb3ZpZGVkSW46InJvb3QifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W1VDXX1dfSx7dHlwZTpmSX1dfSksbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCBIRj0hKCJ1bmRlZmluZWQiPT10eXBlb2Ygd2luZG93fHwhd2luZG93fHwhd2luZG93Ll9fa2FybWFfXyYmIXdpbmRvdy5qYXNtaW5lKTtjbGFzcyBGRntjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuX3BsYXRmb3JtPWUsdGhpcy5fZG9jdW1lbnQ9dH1uZ09uRGVzdHJveSgpe2NvbnN0IHQ9dGhpcy5fY29udGFpbmVyRWxlbWVudDt0JiZ0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KX1nZXRDb250YWluZXJFbGVtZW50KCl7cmV0dXJuIHRoaXMuX2NvbnRhaW5lckVsZW1lbnR8fHRoaXMuX2NyZWF0ZUNvbnRhaW5lcigpLHRoaXMuX2NvbnRhaW5lckVsZW1lbnR9X2NyZWF0ZUNvbnRhaW5lcigpe2NvbnN0IHQ9ImNkay1vdmVybGF5LWNvbnRhaW5lciI7aWYodGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyfHxIRil7Y29uc3QgZT10aGlzLl9kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAuJHt0fVtwbGF0Zm9ybT0ic2VydmVyIl0sIC4ke3R9W3BsYXRmb3JtPSJ0ZXN0Il1gKTtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyllW3RdLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZVt0XSl9Y29uc3QgZT10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtlLmNsYXNzTGlzdC5hZGQodCksSEY/ZS5zZXRBdHRyaWJ1dGUoInBsYXRmb3JtIiwidGVzdCIpOnRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcnx8ZS5zZXRBdHRyaWJ1dGUoInBsYXRmb3JtIiwic2VydmVyIiksdGhpcy5fZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlKSx0aGlzLl9jb250YWluZXJFbGVtZW50PWV9fUZGLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxGRikodXMoVUMpLHVzKGZJKSl9LEZGLsm1cHJvdj1sbyh7ZmFjdG9yeTpmdW5jdGlvbiB0KCl7cmV0dXJuIG5ldyBGRih1cyhVQyksdXMoZkkpKX0sdG9rZW46RkYscHJvdmlkZWRJbjoicm9vdCJ9KSxGRi5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltVQ119XX0se3R5cGU6Zkl9XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEZGLFt7dHlwZTpKbSxhcmdzOlt7cHJvdmlkZWRJbjoicm9vdCJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbVUNdfV19LHt0eXBlOmZJfV19KSxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIExGe2NvbnN0cnVjdG9yKHQsZSxuLG8saSxhLHIscyxjKXt0aGlzLl9wb3J0YWxPdXRsZXQ9dCx0aGlzLl9ob3N0PWUsdGhpcy5fcGFuZT1uLHRoaXMuX2NvbmZpZz1vLHRoaXMuX25nWm9uZT1pLHRoaXMuX2tleWJvYXJkRGlzcGF0Y2hlcj1hLHRoaXMuX2RvY3VtZW50PXIsdGhpcy5fbG9jYXRpb249cyx0aGlzLl9vdXRzaWRlQ2xpY2tEaXNwYXRjaGVyPWMsdGhpcy5fYmFja2Ryb3BFbGVtZW50PW51bGwsdGhpcy5fYmFja2Ryb3BDbGljaz1uZXcgeCx0aGlzLl9hdHRhY2htZW50cz1uZXcgeCx0aGlzLl9kZXRhY2htZW50cz1uZXcgeCx0aGlzLl9sb2NhdGlvbkNoYW5nZXM9bC5FTVBUWSx0aGlzLl9iYWNrZHJvcENsaWNrSGFuZGxlcj10PT50aGlzLl9iYWNrZHJvcENsaWNrLm5leHQodCksdGhpcy5fa2V5ZG93bkV2ZW50cz1uZXcgeCx0aGlzLl9vdXRzaWRlUG9pbnRlckV2ZW50cz1uZXcgeCxvLnNjcm9sbFN0cmF0ZWd5JiYodGhpcy5fc2Nyb2xsU3RyYXRlZ3k9by5zY3JvbGxTdHJhdGVneSx0aGlzLl9zY3JvbGxTdHJhdGVneS5hdHRhY2godGhpcykpLHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3k9by5wb3NpdGlvblN0cmF0ZWd5fWdldCBvdmVybGF5RWxlbWVudCgpe3JldHVybiB0aGlzLl9wYW5lfWdldCBiYWNrZHJvcEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fYmFja2Ryb3BFbGVtZW50fWdldCBob3N0RWxlbWVudCgpe3JldHVybiB0aGlzLl9ob3N0fWF0dGFjaCh0KXtsZXQgZT10aGlzLl9wb3J0YWxPdXRsZXQuYXR0YWNoKHQpO3JldHVybiF0aGlzLl9ob3N0LnBhcmVudEVsZW1lbnQmJnRoaXMuX3ByZXZpb3VzSG9zdFBhcmVudCYmdGhpcy5fcHJldmlvdXNIb3N0UGFyZW50LmFwcGVuZENoaWxkKHRoaXMuX2hvc3QpLHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kmJnRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kuYXR0YWNoKHRoaXMpLHRoaXMuX3VwZGF0ZVN0YWNraW5nT3JkZXIoKSx0aGlzLl91cGRhdGVFbGVtZW50U2l6ZSgpLHRoaXMuX3VwZGF0ZUVsZW1lbnREaXJlY3Rpb24oKSx0aGlzLl9zY3JvbGxTdHJhdGVneSYmdGhpcy5fc2Nyb2xsU3RyYXRlZ3kuZW5hYmxlKCksdGhpcy5fbmdab25lLm9uU3RhYmxlLnBpcGUoTmUoMSkpLnN1YnNjcmliZSgoKCk9Pnt0aGlzLmhhc0F0dGFjaGVkKCkmJnRoaXMudXBkYXRlUG9zaXRpb24oKX0pKSx0aGlzLl90b2dnbGVQb2ludGVyRXZlbnRzKCEwKSx0aGlzLl9jb25maWcuaGFzQmFja2Ryb3AmJnRoaXMuX2F0dGFjaEJhY2tkcm9wKCksdGhpcy5fY29uZmlnLnBhbmVsQ2xhc3MmJnRoaXMuX3RvZ2dsZUNsYXNzZXModGhpcy5fcGFuZSx0aGlzLl9jb25maWcucGFuZWxDbGFzcywhMCksdGhpcy5fYXR0YWNobWVudHMubmV4dCgpLHRoaXMuX2tleWJvYXJkRGlzcGF0Y2hlci5hZGQodGhpcyksdGhpcy5fY29uZmlnLmRpc3Bvc2VPbk5hdmlnYXRpb24mJih0aGlzLl9sb2NhdGlvbkNoYW5nZXM9dGhpcy5fbG9jYXRpb24uc3Vic2NyaWJlKCgoKT0+dGhpcy5kaXNwb3NlKCkpKSksdGhpcy5fb3V0c2lkZUNsaWNrRGlzcGF0Y2hlci5hZGQodGhpcyksZX1kZXRhY2goKXtpZighdGhpcy5oYXNBdHRhY2hlZCgpKXJldHVybjt0aGlzLmRldGFjaEJhY2tkcm9wKCksdGhpcy5fdG9nZ2xlUG9pbnRlckV2ZW50cyghMSksdGhpcy5fcG9zaXRpb25TdHJhdGVneSYmdGhpcy5fcG9zaXRpb25TdHJhdGVneS5kZXRhY2gmJnRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kuZGV0YWNoKCksdGhpcy5fc2Nyb2xsU3RyYXRlZ3kmJnRoaXMuX3Njcm9sbFN0cmF0ZWd5LmRpc2FibGUoKTtjb25zdCB0PXRoaXMuX3BvcnRhbE91dGxldC5kZXRhY2goKTtyZXR1cm4gdGhpcy5fZGV0YWNobWVudHMubmV4dCgpLHRoaXMuX2tleWJvYXJkRGlzcGF0Y2hlci5yZW1vdmUodGhpcyksdGhpcy5fZGV0YWNoQ29udGVudFdoZW5TdGFibGUoKSx0aGlzLl9sb2NhdGlvbkNoYW5nZXMudW5zdWJzY3JpYmUoKSx0aGlzLl9vdXRzaWRlQ2xpY2tEaXNwYXRjaGVyLnJlbW92ZSh0aGlzKSx0fWRpc3Bvc2UoKXtjb25zdCB0PXRoaXMuaGFzQXR0YWNoZWQoKTt0aGlzLl9wb3NpdGlvblN0cmF0ZWd5JiZ0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LmRpc3Bvc2UoKSx0aGlzLl9kaXNwb3NlU2Nyb2xsU3RyYXRlZ3koKSx0aGlzLmRldGFjaEJhY2tkcm9wKCksdGhpcy5fbG9jYXRpb25DaGFuZ2VzLnVuc3Vic2NyaWJlKCksdGhpcy5fa2V5Ym9hcmREaXNwYXRjaGVyLnJlbW92ZSh0aGlzKSx0aGlzLl9wb3J0YWxPdXRsZXQuZGlzcG9zZSgpLHRoaXMuX2F0dGFjaG1lbnRzLmNvbXBsZXRlKCksdGhpcy5fYmFja2Ryb3BDbGljay5jb21wbGV0ZSgpLHRoaXMuX2tleWRvd25FdmVudHMuY29tcGxldGUoKSx0aGlzLl9vdXRzaWRlUG9pbnRlckV2ZW50cy5jb21wbGV0ZSgpLHRoaXMuX291dHNpZGVDbGlja0Rpc3BhdGNoZXIucmVtb3ZlKHRoaXMpLHRoaXMuX2hvc3QmJnRoaXMuX2hvc3QucGFyZW50Tm9kZSYmKHRoaXMuX2hvc3QucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9ob3N0KSx0aGlzLl9ob3N0PW51bGwpLHRoaXMuX3ByZXZpb3VzSG9zdFBhcmVudD10aGlzLl9wYW5lPW51bGwsdCYmdGhpcy5fZGV0YWNobWVudHMubmV4dCgpLHRoaXMuX2RldGFjaG1lbnRzLmNvbXBsZXRlKCl9aGFzQXR0YWNoZWQoKXtyZXR1cm4gdGhpcy5fcG9ydGFsT3V0bGV0Lmhhc0F0dGFjaGVkKCl9YmFja2Ryb3BDbGljaygpe3JldHVybiB0aGlzLl9iYWNrZHJvcENsaWNrfWF0dGFjaG1lbnRzKCl7cmV0dXJuIHRoaXMuX2F0dGFjaG1lbnRzfWRldGFjaG1lbnRzKCl7cmV0dXJuIHRoaXMuX2RldGFjaG1lbnRzfWtleWRvd25FdmVudHMoKXtyZXR1cm4gdGhpcy5fa2V5ZG93bkV2ZW50c31vdXRzaWRlUG9pbnRlckV2ZW50cygpe3JldHVybiB0aGlzLl9vdXRzaWRlUG9pbnRlckV2ZW50c31nZXRDb25maWcoKXtyZXR1cm4gdGhpcy5fY29uZmlnfXVwZGF0ZVBvc2l0aW9uKCl7dGhpcy5fcG9zaXRpb25TdHJhdGVneSYmdGhpcy5fcG9zaXRpb25TdHJhdGVneS5hcHBseSgpfXVwZGF0ZVBvc2l0aW9uU3RyYXRlZ3kodCl7dCE9PXRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kmJih0aGlzLl9wb3NpdGlvblN0cmF0ZWd5JiZ0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LmRpc3Bvc2UoKSx0aGlzLl9wb3NpdGlvblN0cmF0ZWd5PXQsdGhpcy5oYXNBdHRhY2hlZCgpJiYodC5hdHRhY2godGhpcyksdGhpcy51cGRhdGVQb3NpdGlvbigpKSl9dXBkYXRlU2l6ZSh0KXt0aGlzLl9jb25maWc9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHRoaXMuX2NvbmZpZyksdCksdGhpcy5fdXBkYXRlRWxlbWVudFNpemUoKX1zZXREaXJlY3Rpb24odCl7dGhpcy5fY29uZmlnPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0aGlzLl9jb25maWcpLHtkaXJlY3Rpb246dH0pLHRoaXMuX3VwZGF0ZUVsZW1lbnREaXJlY3Rpb24oKX1hZGRQYW5lbENsYXNzKHQpe3RoaXMuX3BhbmUmJnRoaXMuX3RvZ2dsZUNsYXNzZXModGhpcy5fcGFuZSx0LCEwKX1yZW1vdmVQYW5lbENsYXNzKHQpe3RoaXMuX3BhbmUmJnRoaXMuX3RvZ2dsZUNsYXNzZXModGhpcy5fcGFuZSx0LCExKX1nZXREaXJlY3Rpb24oKXtjb25zdCB0PXRoaXMuX2NvbmZpZy5kaXJlY3Rpb247cmV0dXJuIHQ/InN0cmluZyI9PXR5cGVvZiB0P3Q6dC52YWx1ZToibHRyIn11cGRhdGVTY3JvbGxTdHJhdGVneSh0KXt0IT09dGhpcy5fc2Nyb2xsU3RyYXRlZ3kmJih0aGlzLl9kaXNwb3NlU2Nyb2xsU3RyYXRlZ3koKSx0aGlzLl9zY3JvbGxTdHJhdGVneT10LHRoaXMuaGFzQXR0YWNoZWQoKSYmKHQuYXR0YWNoKHRoaXMpLHQuZW5hYmxlKCkpKX1fdXBkYXRlRWxlbWVudERpcmVjdGlvbigpe3RoaXMuX2hvc3Quc2V0QXR0cmlidXRlKCJkaXIiLHRoaXMuZ2V0RGlyZWN0aW9uKCkpfV91cGRhdGVFbGVtZW50U2l6ZSgpe2lmKCF0aGlzLl9wYW5lKXJldHVybjtjb25zdCB0PXRoaXMuX3BhbmUuc3R5bGU7dC53aWR0aD1kSSh0aGlzLl9jb25maWcud2lkdGgpLHQuaGVpZ2h0PWRJKHRoaXMuX2NvbmZpZy5oZWlnaHQpLHQubWluV2lkdGg9ZEkodGhpcy5fY29uZmlnLm1pbldpZHRoKSx0Lm1pbkhlaWdodD1kSSh0aGlzLl9jb25maWcubWluSGVpZ2h0KSx0Lm1heFdpZHRoPWRJKHRoaXMuX2NvbmZpZy5tYXhXaWR0aCksdC5tYXhIZWlnaHQ9ZEkodGhpcy5fY29uZmlnLm1heEhlaWdodCl9X3RvZ2dsZVBvaW50ZXJFdmVudHModCl7dGhpcy5fcGFuZS5zdHlsZS5wb2ludGVyRXZlbnRzPXQ/IiI6Im5vbmUifV9hdHRhY2hCYWNrZHJvcCgpe2NvbnN0IHQ9ImNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmciO3RoaXMuX2JhY2tkcm9wRWxlbWVudD10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLl9iYWNrZHJvcEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiY2RrLW92ZXJsYXktYmFja2Ryb3AiKSx0aGlzLl9jb25maWcuYmFja2Ryb3BDbGFzcyYmdGhpcy5fdG9nZ2xlQ2xhc3Nlcyh0aGlzLl9iYWNrZHJvcEVsZW1lbnQsdGhpcy5fY29uZmlnLmJhY2tkcm9wQ2xhc3MsITApLHRoaXMuX2hvc3QucGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUodGhpcy5fYmFja2Ryb3BFbGVtZW50LHRoaXMuX2hvc3QpLHRoaXMuX2JhY2tkcm9wRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5fYmFja2Ryb3BDbGlja0hhbmRsZXIpLCJ1bmRlZmluZWQiIT10eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lP3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKCk9PntyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCgpPT57dGhpcy5fYmFja2Ryb3BFbGVtZW50JiZ0aGlzLl9iYWNrZHJvcEVsZW1lbnQuY2xhc3NMaXN0LmFkZCh0KX0pKX0pKTp0aGlzLl9iYWNrZHJvcEVsZW1lbnQuY2xhc3NMaXN0LmFkZCh0KX1fdXBkYXRlU3RhY2tpbmdPcmRlcigpe3RoaXMuX2hvc3QubmV4dFNpYmxpbmcmJnRoaXMuX2hvc3QucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzLl9ob3N0KX1kZXRhY2hCYWNrZHJvcCgpe2xldCB0LGU9dGhpcy5fYmFja2Ryb3BFbGVtZW50O2lmKCFlKXJldHVybjtsZXQgbj0oKT0+e2UmJihlLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLl9iYWNrZHJvcENsaWNrSGFuZGxlciksZS5yZW1vdmVFdmVudExpc3RlbmVyKCJ0cmFuc2l0aW9uZW5kIixuKSxlLnBhcmVudE5vZGUmJmUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlKSksdGhpcy5fYmFja2Ryb3BFbGVtZW50PT1lJiYodGhpcy5fYmFja2Ryb3BFbGVtZW50PW51bGwpLHRoaXMuX2NvbmZpZy5iYWNrZHJvcENsYXNzJiZ0aGlzLl90b2dnbGVDbGFzc2VzKGUsdGhpcy5fY29uZmlnLmJhY2tkcm9wQ2xhc3MsITEpLGNsZWFyVGltZW91dCh0KX07ZS5jbGFzc0xpc3QucmVtb3ZlKCJjZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nIiksdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgoKT0+e2UuYWRkRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmVuZCIsbil9KSksZS5zdHlsZS5wb2ludGVyRXZlbnRzPSJub25lIix0PXRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKCk9PnNldFRpbWVvdXQobiw1MDApKSl9X3RvZ2dsZUNsYXNzZXModCxlLG4pe2NvbnN0IG89dC5jbGFzc0xpc3Q7Y0koZSkuZm9yRWFjaCgodD0+e3QmJihuP28uYWRkKHQpOm8ucmVtb3ZlKHQpKX0pKX1fZGV0YWNoQ29udGVudFdoZW5TdGFibGUoKXt0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCgpPT57Y29uc3QgdD10aGlzLl9uZ1pvbmUub25TdGFibGUucGlwZSh1bihXdCh0aGlzLl9hdHRhY2htZW50cyx0aGlzLl9kZXRhY2htZW50cykpKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5fcGFuZSYmdGhpcy5faG9zdCYmMCE9PXRoaXMuX3BhbmUuY2hpbGRyZW4ubGVuZ3RofHwodGhpcy5fcGFuZSYmdGhpcy5fY29uZmlnLnBhbmVsQ2xhc3MmJnRoaXMuX3RvZ2dsZUNsYXNzZXModGhpcy5fcGFuZSx0aGlzLl9jb25maWcucGFuZWxDbGFzcywhMSksdGhpcy5faG9zdCYmdGhpcy5faG9zdC5wYXJlbnRFbGVtZW50JiYodGhpcy5fcHJldmlvdXNIb3N0UGFyZW50PXRoaXMuX2hvc3QucGFyZW50RWxlbWVudCx0aGlzLl9wcmV2aW91c0hvc3RQYXJlbnQucmVtb3ZlQ2hpbGQodGhpcy5faG9zdCkpLHQudW5zdWJzY3JpYmUoKSl9KSl9KSl9X2Rpc3Bvc2VTY3JvbGxTdHJhdGVneSgpe2NvbnN0IHQ9dGhpcy5fc2Nyb2xsU3RyYXRlZ3k7dCYmKHQuZGlzYWJsZSgpLHQuZGV0YWNoJiZ0LmRldGFjaCgpKX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NvbnN0IEJGPSJjZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94IixWRj0vKFtBLVphLXolXSspJC87Y2xhc3MgakZ7Y29uc3RydWN0b3IodCxlLG4sbyxpKXt0aGlzLl92aWV3cG9ydFJ1bGVyPWUsdGhpcy5fZG9jdW1lbnQ9bix0aGlzLl9wbGF0Zm9ybT1vLHRoaXMuX292ZXJsYXlDb250YWluZXI9aSx0aGlzLl9sYXN0Qm91bmRpbmdCb3hTaXplPXt3aWR0aDowLGhlaWdodDowfSx0aGlzLl9pc1B1c2hlZD0hMSx0aGlzLl9jYW5QdXNoPSEwLHRoaXMuX2dyb3dBZnRlck9wZW49ITEsdGhpcy5faGFzRmxleGlibGVEaW1lbnNpb25zPSEwLHRoaXMuX3Bvc2l0aW9uTG9ja2VkPSExLHRoaXMuX3ZpZXdwb3J0TWFyZ2luPTAsdGhpcy5fc2Nyb2xsYWJsZXM9W10sdGhpcy5fcHJlZmVycmVkUG9zaXRpb25zPVtdLHRoaXMuX3Bvc2l0aW9uQ2hhbmdlcz1uZXcgeCx0aGlzLl9yZXNpemVTdWJzY3JpcHRpb249bC5FTVBUWSx0aGlzLl9vZmZzZXRYPTAsdGhpcy5fb2Zmc2V0WT0wLHRoaXMuX2FwcGxpZWRQYW5lbENsYXNzZXM9W10sdGhpcy5wb3NpdGlvbkNoYW5nZXM9dGhpcy5fcG9zaXRpb25DaGFuZ2VzLHRoaXMuc2V0T3JpZ2luKHQpfWdldCBwb3NpdGlvbnMoKXtyZXR1cm4gdGhpcy5fcHJlZmVycmVkUG9zaXRpb25zfWF0dGFjaCh0KXtpZih0aGlzLl9vdmVybGF5UmVmJiZ0IT09dGhpcy5fb3ZlcmxheVJlZiYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpKXRocm93IEVycm9yKCJUaGlzIHBvc2l0aW9uIHN0cmF0ZWd5IGlzIGFscmVhZHkgYXR0YWNoZWQgdG8gYW4gb3ZlcmxheSIpO3RoaXMuX3ZhbGlkYXRlUG9zaXRpb25zKCksdC5ob3N0RWxlbWVudC5jbGFzc0xpc3QuYWRkKEJGKSx0aGlzLl9vdmVybGF5UmVmPXQsdGhpcy5fYm91bmRpbmdCb3g9dC5ob3N0RWxlbWVudCx0aGlzLl9wYW5lPXQub3ZlcmxheUVsZW1lbnQsdGhpcy5faXNEaXNwb3NlZD0hMSx0aGlzLl9pc0luaXRpYWxSZW5kZXI9ITAsdGhpcy5fbGFzdFBvc2l0aW9uPW51bGwsdGhpcy5fcmVzaXplU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fcmVzaXplU3Vic2NyaXB0aW9uPXRoaXMuX3ZpZXdwb3J0UnVsZXIuY2hhbmdlKCkuc3Vic2NyaWJlKCgoKT0+e3RoaXMuX2lzSW5pdGlhbFJlbmRlcj0hMCx0aGlzLmFwcGx5KCl9KSl9YXBwbHkoKXtpZih0aGlzLl9pc0Rpc3Bvc2VkfHwhdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKXJldHVybjtpZighdGhpcy5faXNJbml0aWFsUmVuZGVyJiZ0aGlzLl9wb3NpdGlvbkxvY2tlZCYmdGhpcy5fbGFzdFBvc2l0aW9uKXJldHVybiB2b2lkIHRoaXMucmVhcHBseUxhc3RQb3NpdGlvbigpO3RoaXMuX2NsZWFyUGFuZWxDbGFzc2VzKCksdGhpcy5fcmVzZXRPdmVybGF5RWxlbWVudFN0eWxlcygpLHRoaXMuX3Jlc2V0Qm91bmRpbmdCb3hTdHlsZXMoKSx0aGlzLl92aWV3cG9ydFJlY3Q9dGhpcy5fZ2V0TmFycm93ZWRWaWV3cG9ydFJlY3QoKSx0aGlzLl9vcmlnaW5SZWN0PXRoaXMuX2dldE9yaWdpblJlY3QoKSx0aGlzLl9vdmVybGF5UmVjdD10aGlzLl9wYW5lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2NvbnN0IHQ9dGhpcy5fb3JpZ2luUmVjdCxlPXRoaXMuX292ZXJsYXlSZWN0LG49dGhpcy5fdmlld3BvcnRSZWN0LG89W107bGV0IGk7Zm9yKGxldCBhIG9mIHRoaXMuX3ByZWZlcnJlZFBvc2l0aW9ucyl7bGV0IHI9dGhpcy5fZ2V0T3JpZ2luUG9pbnQodCxhKSxzPXRoaXMuX2dldE92ZXJsYXlQb2ludChyLGUsYSksbD10aGlzLl9nZXRPdmVybGF5Rml0KHMsZSxuLGEpO2lmKGwuaXNDb21wbGV0ZWx5V2l0aGluVmlld3BvcnQpcmV0dXJuIHRoaXMuX2lzUHVzaGVkPSExLHZvaWQgdGhpcy5fYXBwbHlQb3NpdGlvbihhLHIpO3RoaXMuX2NhbkZpdFdpdGhGbGV4aWJsZURpbWVuc2lvbnMobCxzLG4pP28ucHVzaCh7cG9zaXRpb246YSxvcmlnaW46cixvdmVybGF5UmVjdDplLGJvdW5kaW5nQm94UmVjdDp0aGlzLl9jYWxjdWxhdGVCb3VuZGluZ0JveFJlY3QocixhKX0pOighaXx8aS5vdmVybGF5Rml0LnZpc2libGVBcmVhPGwudmlzaWJsZUFyZWEpJiYoaT17b3ZlcmxheUZpdDpsLG92ZXJsYXlQb2ludDpzLG9yaWdpblBvaW50OnIscG9zaXRpb246YSxvdmVybGF5UmVjdDplfSl9aWYoby5sZW5ndGgpe2xldCB0PW51bGwsZT0tMTtmb3IoY29uc3QgbiBvZiBvKXtjb25zdCBvPW4uYm91bmRpbmdCb3hSZWN0LndpZHRoKm4uYm91bmRpbmdCb3hSZWN0LmhlaWdodCoobi5wb3NpdGlvbi53ZWlnaHR8fDEpO28+ZSYmKGU9byx0PW4pfXJldHVybiB0aGlzLl9pc1B1c2hlZD0hMSx2b2lkIHRoaXMuX2FwcGx5UG9zaXRpb24odC5wb3NpdGlvbix0Lm9yaWdpbil9aWYodGhpcy5fY2FuUHVzaClyZXR1cm4gdGhpcy5faXNQdXNoZWQ9ITAsdm9pZCB0aGlzLl9hcHBseVBvc2l0aW9uKGkucG9zaXRpb24saS5vcmlnaW5Qb2ludCk7dGhpcy5fYXBwbHlQb3NpdGlvbihpLnBvc2l0aW9uLGkub3JpZ2luUG9pbnQpfWRldGFjaCgpe3RoaXMuX2NsZWFyUGFuZWxDbGFzc2VzKCksdGhpcy5fbGFzdFBvc2l0aW9uPW51bGwsdGhpcy5fcHJldmlvdXNQdXNoQW1vdW50PW51bGwsdGhpcy5fcmVzaXplU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9ZGlzcG9zZSgpe3RoaXMuX2lzRGlzcG9zZWR8fCh0aGlzLl9ib3VuZGluZ0JveCYmVUYodGhpcy5fYm91bmRpbmdCb3guc3R5bGUse3RvcDoiIixsZWZ0OiIiLHJpZ2h0OiIiLGJvdHRvbToiIixoZWlnaHQ6IiIsd2lkdGg6IiIsYWxpZ25JdGVtczoiIixqdXN0aWZ5Q29udGVudDoiIn0pLHRoaXMuX3BhbmUmJnRoaXMuX3Jlc2V0T3ZlcmxheUVsZW1lbnRTdHlsZXMoKSx0aGlzLl9vdmVybGF5UmVmJiZ0aGlzLl9vdmVybGF5UmVmLmhvc3RFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQkYpLHRoaXMuZGV0YWNoKCksdGhpcy5fcG9zaXRpb25DaGFuZ2VzLmNvbXBsZXRlKCksdGhpcy5fb3ZlcmxheVJlZj10aGlzLl9ib3VuZGluZ0JveD1udWxsLHRoaXMuX2lzRGlzcG9zZWQ9ITApfXJlYXBwbHlMYXN0UG9zaXRpb24oKXtpZighdGhpcy5faXNEaXNwb3NlZCYmKCF0aGlzLl9wbGF0Zm9ybXx8dGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKSl7dGhpcy5fb3JpZ2luUmVjdD10aGlzLl9nZXRPcmlnaW5SZWN0KCksdGhpcy5fb3ZlcmxheVJlY3Q9dGhpcy5fcGFuZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLl92aWV3cG9ydFJlY3Q9dGhpcy5fZ2V0TmFycm93ZWRWaWV3cG9ydFJlY3QoKTtjb25zdCB0PXRoaXMuX2xhc3RQb3NpdGlvbnx8dGhpcy5fcHJlZmVycmVkUG9zaXRpb25zWzBdLGU9dGhpcy5fZ2V0T3JpZ2luUG9pbnQodGhpcy5fb3JpZ2luUmVjdCx0KTt0aGlzLl9hcHBseVBvc2l0aW9uKHQsZSl9fXdpdGhTY3JvbGxhYmxlQ29udGFpbmVycyh0KXtyZXR1cm4gdGhpcy5fc2Nyb2xsYWJsZXM9dCx0aGlzfXdpdGhQb3NpdGlvbnModCl7cmV0dXJuIHRoaXMuX3ByZWZlcnJlZFBvc2l0aW9ucz10LC0xPT09dC5pbmRleE9mKHRoaXMuX2xhc3RQb3NpdGlvbikmJih0aGlzLl9sYXN0UG9zaXRpb249bnVsbCksdGhpcy5fdmFsaWRhdGVQb3NpdGlvbnMoKSx0aGlzfXdpdGhWaWV3cG9ydE1hcmdpbih0KXtyZXR1cm4gdGhpcy5fdmlld3BvcnRNYXJnaW49dCx0aGlzfXdpdGhGbGV4aWJsZURpbWVuc2lvbnModD0hMCl7cmV0dXJuIHRoaXMuX2hhc0ZsZXhpYmxlRGltZW5zaW9ucz10LHRoaXN9d2l0aEdyb3dBZnRlck9wZW4odD0hMCl7cmV0dXJuIHRoaXMuX2dyb3dBZnRlck9wZW49dCx0aGlzfXdpdGhQdXNoKHQ9ITApe3JldHVybiB0aGlzLl9jYW5QdXNoPXQsdGhpc313aXRoTG9ja2VkUG9zaXRpb24odD0hMCl7cmV0dXJuIHRoaXMuX3Bvc2l0aW9uTG9ja2VkPXQsdGhpc31zZXRPcmlnaW4odCl7cmV0dXJuIHRoaXMuX29yaWdpbj10LHRoaXN9d2l0aERlZmF1bHRPZmZzZXRYKHQpe3JldHVybiB0aGlzLl9vZmZzZXRYPXQsdGhpc313aXRoRGVmYXVsdE9mZnNldFkodCl7cmV0dXJuIHRoaXMuX29mZnNldFk9dCx0aGlzfXdpdGhUcmFuc2Zvcm1PcmlnaW5Pbih0KXtyZXR1cm4gdGhpcy5fdHJhbnNmb3JtT3JpZ2luU2VsZWN0b3I9dCx0aGlzfV9nZXRPcmlnaW5Qb2ludCh0LGUpe2xldCBuLG87aWYoImNlbnRlciI9PWUub3JpZ2luWCluPXQubGVmdCt0LndpZHRoLzI7ZWxzZXtjb25zdCBvPXRoaXMuX2lzUnRsKCk/dC5yaWdodDp0LmxlZnQsaT10aGlzLl9pc1J0bCgpP3QubGVmdDp0LnJpZ2h0O249InN0YXJ0Ij09ZS5vcmlnaW5YP286aX1yZXR1cm4gbz0iY2VudGVyIj09ZS5vcmlnaW5ZP3QudG9wK3QuaGVpZ2h0LzI6InRvcCI9PWUub3JpZ2luWT90LnRvcDp0LmJvdHRvbSx7eDpuLHk6b319X2dldE92ZXJsYXlQb2ludCh0LGUsbil7bGV0IG8saTtyZXR1cm4gbz0iY2VudGVyIj09bi5vdmVybGF5WD8tZS53aWR0aC8yOiJzdGFydCI9PT1uLm92ZXJsYXlYP3RoaXMuX2lzUnRsKCk/LWUud2lkdGg6MDp0aGlzLl9pc1J0bCgpPzA6LWUud2lkdGgsaT0iY2VudGVyIj09bi5vdmVybGF5WT8tZS5oZWlnaHQvMjoidG9wIj09bi5vdmVybGF5WT8wOi1lLmhlaWdodCx7eDp0Lngrbyx5OnQueStpfX1fZ2V0T3ZlcmxheUZpdCh0LGUsbixvKXtjb25zdCBpPUdGKGUpO2xldHt4OmEseTpyfT10LHM9dGhpcy5fZ2V0T2Zmc2V0KG8sIngiKSxsPXRoaXMuX2dldE9mZnNldChvLCJ5Iik7cyYmKGErPXMpLGwmJihyKz1sKTtsZXQgYz0wLXIsZD1yK2kuaGVpZ2h0LW4uaGVpZ2h0LHA9dGhpcy5fc3VidHJhY3RPdmVyZmxvd3MoaS53aWR0aCwwLWEsYStpLndpZHRoLW4ud2lkdGgpLG09dGhpcy5fc3VidHJhY3RPdmVyZmxvd3MoaS5oZWlnaHQsYyxkKSx1PXAqbTtyZXR1cm57dmlzaWJsZUFyZWE6dSxpc0NvbXBsZXRlbHlXaXRoaW5WaWV3cG9ydDppLndpZHRoKmkuaGVpZ2h0PT09dSxmaXRzSW5WaWV3cG9ydFZlcnRpY2FsbHk6bT09PWkuaGVpZ2h0LGZpdHNJblZpZXdwb3J0SG9yaXpvbnRhbGx5OnA9PWkud2lkdGh9fV9jYW5GaXRXaXRoRmxleGlibGVEaW1lbnNpb25zKHQsZSxuKXtpZih0aGlzLl9oYXNGbGV4aWJsZURpbWVuc2lvbnMpe2NvbnN0IG89bi5ib3R0b20tZS55LGk9bi5yaWdodC1lLngsYT1XRih0aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpLm1pbkhlaWdodCkscj1XRih0aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpLm1pbldpZHRoKSxzPXQuZml0c0luVmlld3BvcnRIb3Jpem9udGFsbHl8fG51bGwhPXImJnI8PWk7cmV0dXJuKHQuZml0c0luVmlld3BvcnRWZXJ0aWNhbGx5fHxudWxsIT1hJiZhPD1vKSYmc31yZXR1cm4hMX1fcHVzaE92ZXJsYXlPblNjcmVlbih0LGUsbil7aWYodGhpcy5fcHJldmlvdXNQdXNoQW1vdW50JiZ0aGlzLl9wb3NpdGlvbkxvY2tlZClyZXR1cm57eDp0LngrdGhpcy5fcHJldmlvdXNQdXNoQW1vdW50LngseTp0LnkrdGhpcy5fcHJldmlvdXNQdXNoQW1vdW50Lnl9O2NvbnN0IG89R0YoZSksaT10aGlzLl92aWV3cG9ydFJlY3QsYT1NYXRoLm1heCh0Lngrby53aWR0aC1pLndpZHRoLDApLHI9TWF0aC5tYXgodC55K28uaGVpZ2h0LWkuaGVpZ2h0LDApLHM9TWF0aC5tYXgoaS50b3Atbi50b3AtdC55LDApLGw9TWF0aC5tYXgoaS5sZWZ0LW4ubGVmdC10LngsMCk7bGV0IGM9MCxkPTA7cmV0dXJuIGM9by53aWR0aDw9aS53aWR0aD9sfHwtYTp0Lng8dGhpcy5fdmlld3BvcnRNYXJnaW4/aS5sZWZ0LW4ubGVmdC10Lng6MCxkPW8uaGVpZ2h0PD1pLmhlaWdodD9zfHwtcjp0Lnk8dGhpcy5fdmlld3BvcnRNYXJnaW4/aS50b3Atbi50b3AtdC55OjAsdGhpcy5fcHJldmlvdXNQdXNoQW1vdW50PXt4OmMseTpkfSx7eDp0LngrYyx5OnQueStkfX1fYXBwbHlQb3NpdGlvbih0LGUpe2lmKHRoaXMuX3NldFRyYW5zZm9ybU9yaWdpbih0KSx0aGlzLl9zZXRPdmVybGF5RWxlbWVudFN0eWxlcyhlLHQpLHRoaXMuX3NldEJvdW5kaW5nQm94U3R5bGVzKGUsdCksdC5wYW5lbENsYXNzJiZ0aGlzLl9hZGRQYW5lbENsYXNzZXModC5wYW5lbENsYXNzKSx0aGlzLl9sYXN0UG9zaXRpb249dCx0aGlzLl9wb3NpdGlvbkNoYW5nZXMub2JzZXJ2ZXJzLmxlbmd0aCl7Y29uc3QgZT10aGlzLl9nZXRTY3JvbGxWaXNpYmlsaXR5KCksbj1uZXcgQUYodCxlKTt0aGlzLl9wb3NpdGlvbkNoYW5nZXMubmV4dChuKX10aGlzLl9pc0luaXRpYWxSZW5kZXI9ITF9X3NldFRyYW5zZm9ybU9yaWdpbih0KXtpZighdGhpcy5fdHJhbnNmb3JtT3JpZ2luU2VsZWN0b3IpcmV0dXJuO2NvbnN0IGU9dGhpcy5fYm91bmRpbmdCb3gucXVlcnlTZWxlY3RvckFsbCh0aGlzLl90cmFuc2Zvcm1PcmlnaW5TZWxlY3Rvcik7bGV0IG4sbz10Lm92ZXJsYXlZO249ImNlbnRlciI9PT10Lm92ZXJsYXlYPyJjZW50ZXIiOnRoaXMuX2lzUnRsKCk/InN0YXJ0Ij09PXQub3ZlcmxheVg/InJpZ2h0IjoibGVmdCI6InN0YXJ0Ij09PXQub3ZlcmxheVg/ImxlZnQiOiJyaWdodCI7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0KyspZVt0XS5zdHlsZS50cmFuc2Zvcm1PcmlnaW49YCR7bn0gJHtvfWB9X2NhbGN1bGF0ZUJvdW5kaW5nQm94UmVjdCh0LGUpe2NvbnN0IG49dGhpcy5fdmlld3BvcnRSZWN0LG89dGhpcy5faXNSdGwoKTtsZXQgaSxhLHIscyxsLGM7aWYoInRvcCI9PT1lLm92ZXJsYXlZKWE9dC55LGk9bi5oZWlnaHQtYSt0aGlzLl92aWV3cG9ydE1hcmdpbjtlbHNlIGlmKCJib3R0b20iPT09ZS5vdmVybGF5WSlyPW4uaGVpZ2h0LXQueSsyKnRoaXMuX3ZpZXdwb3J0TWFyZ2luLGk9bi5oZWlnaHQtcit0aGlzLl92aWV3cG9ydE1hcmdpbjtlbHNle2NvbnN0IGU9TWF0aC5taW4obi5ib3R0b20tdC55K24udG9wLHQueSksbz10aGlzLl9sYXN0Qm91bmRpbmdCb3hTaXplLmhlaWdodDtpPTIqZSxhPXQueS1lLGk+byYmIXRoaXMuX2lzSW5pdGlhbFJlbmRlciYmIXRoaXMuX2dyb3dBZnRlck9wZW4mJihhPXQueS1vLzIpfWlmKCJlbmQiPT09ZS5vdmVybGF5WCYmIW98fCJzdGFydCI9PT1lLm92ZXJsYXlYJiZvKWM9bi53aWR0aC10LngrdGhpcy5fdmlld3BvcnRNYXJnaW4scz10LngtdGhpcy5fdmlld3BvcnRNYXJnaW47ZWxzZSBpZigic3RhcnQiPT09ZS5vdmVybGF5WCYmIW98fCJlbmQiPT09ZS5vdmVybGF5WCYmbylsPXQueCxzPW4ucmlnaHQtdC54O2Vsc2V7Y29uc3QgZT1NYXRoLm1pbihuLnJpZ2h0LXQueCtuLmxlZnQsdC54KSxvPXRoaXMuX2xhc3RCb3VuZGluZ0JveFNpemUud2lkdGg7cz0yKmUsbD10LngtZSxzPm8mJiF0aGlzLl9pc0luaXRpYWxSZW5kZXImJiF0aGlzLl9ncm93QWZ0ZXJPcGVuJiYobD10Lngtby8yKX1yZXR1cm57dG9wOmEsbGVmdDpsLGJvdHRvbTpyLHJpZ2h0OmMsd2lkdGg6cyxoZWlnaHQ6aX19X3NldEJvdW5kaW5nQm94U3R5bGVzKHQsZSl7Y29uc3Qgbj10aGlzLl9jYWxjdWxhdGVCb3VuZGluZ0JveFJlY3QodCxlKTt0aGlzLl9pc0luaXRpYWxSZW5kZXJ8fHRoaXMuX2dyb3dBZnRlck9wZW58fChuLmhlaWdodD1NYXRoLm1pbihuLmhlaWdodCx0aGlzLl9sYXN0Qm91bmRpbmdCb3hTaXplLmhlaWdodCksbi53aWR0aD1NYXRoLm1pbihuLndpZHRoLHRoaXMuX2xhc3RCb3VuZGluZ0JveFNpemUud2lkdGgpKTtjb25zdCBvPXt9O2lmKHRoaXMuX2hhc0V4YWN0UG9zaXRpb24oKSlvLnRvcD1vLmxlZnQ9IjAiLG8uYm90dG9tPW8ucmlnaHQ9by5tYXhIZWlnaHQ9by5tYXhXaWR0aD0iIixvLndpZHRoPW8uaGVpZ2h0PSIxMDAlIjtlbHNle2NvbnN0IHQ9dGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKS5tYXhIZWlnaHQsaT10aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpLm1heFdpZHRoO28uaGVpZ2h0PWRJKG4uaGVpZ2h0KSxvLnRvcD1kSShuLnRvcCksby5ib3R0b209ZEkobi5ib3R0b20pLG8ud2lkdGg9ZEkobi53aWR0aCksby5sZWZ0PWRJKG4ubGVmdCksby5yaWdodD1kSShuLnJpZ2h0KSxvLmFsaWduSXRlbXM9ImNlbnRlciI9PT1lLm92ZXJsYXlYPyJjZW50ZXIiOiJlbmQiPT09ZS5vdmVybGF5WD8iZmxleC1lbmQiOiJmbGV4LXN0YXJ0IixvLmp1c3RpZnlDb250ZW50PSJjZW50ZXIiPT09ZS5vdmVybGF5WT8iY2VudGVyIjoiYm90dG9tIj09PWUub3ZlcmxheVk/ImZsZXgtZW5kIjoiZmxleC1zdGFydCIsdCYmKG8ubWF4SGVpZ2h0PWRJKHQpKSxpJiYoby5tYXhXaWR0aD1kSShpKSl9dGhpcy5fbGFzdEJvdW5kaW5nQm94U2l6ZT1uLFVGKHRoaXMuX2JvdW5kaW5nQm94LnN0eWxlLG8pfV9yZXNldEJvdW5kaW5nQm94U3R5bGVzKCl7VUYodGhpcy5fYm91bmRpbmdCb3guc3R5bGUse3RvcDoiMCIsbGVmdDoiMCIscmlnaHQ6IjAiLGJvdHRvbToiMCIsaGVpZ2h0OiIiLHdpZHRoOiIiLGFsaWduSXRlbXM6IiIsanVzdGlmeUNvbnRlbnQ6IiJ9KX1fcmVzZXRPdmVybGF5RWxlbWVudFN0eWxlcygpe1VGKHRoaXMuX3BhbmUuc3R5bGUse3RvcDoiIixsZWZ0OiIiLGJvdHRvbToiIixyaWdodDoiIixwb3NpdGlvbjoiIix0cmFuc2Zvcm06IiJ9KX1fc2V0T3ZlcmxheUVsZW1lbnRTdHlsZXModCxlKXtjb25zdCBuPXt9LG89dGhpcy5faGFzRXhhY3RQb3NpdGlvbigpLGk9dGhpcy5faGFzRmxleGlibGVEaW1lbnNpb25zLGE9dGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKTtpZihvKXtjb25zdCBvPXRoaXMuX3ZpZXdwb3J0UnVsZXIuZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpO1VGKG4sdGhpcy5fZ2V0RXhhY3RPdmVybGF5WShlLHQsbykpLFVGKG4sdGhpcy5fZ2V0RXhhY3RPdmVybGF5WChlLHQsbykpfWVsc2Ugbi5wb3NpdGlvbj0ic3RhdGljIjtsZXQgcj0iIixzPXRoaXMuX2dldE9mZnNldChlLCJ4IiksbD10aGlzLl9nZXRPZmZzZXQoZSwieSIpO3MmJihyKz1gdHJhbnNsYXRlWCgke3N9cHgpIGApLGwmJihyKz1gdHJhbnNsYXRlWSgke2x9cHgpYCksbi50cmFuc2Zvcm09ci50cmltKCksYS5tYXhIZWlnaHQmJihvP24ubWF4SGVpZ2h0PWRJKGEubWF4SGVpZ2h0KTppJiYobi5tYXhIZWlnaHQ9IiIpKSxhLm1heFdpZHRoJiYobz9uLm1heFdpZHRoPWRJKGEubWF4V2lkdGgpOmkmJihuLm1heFdpZHRoPSIiKSksVUYodGhpcy5fcGFuZS5zdHlsZSxuKX1fZ2V0RXhhY3RPdmVybGF5WSh0LGUsbil7bGV0IG89e3RvcDoiIixib3R0b206IiJ9LGk9dGhpcy5fZ2V0T3ZlcmxheVBvaW50KGUsdGhpcy5fb3ZlcmxheVJlY3QsdCk7dGhpcy5faXNQdXNoZWQmJihpPXRoaXMuX3B1c2hPdmVybGF5T25TY3JlZW4oaSx0aGlzLl9vdmVybGF5UmVjdCxuKSk7bGV0IGE9dGhpcy5fb3ZlcmxheUNvbnRhaW5lci5nZXRDb250YWluZXJFbGVtZW50KCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO3JldHVybiBpLnktPWEsImJvdHRvbSI9PT10Lm92ZXJsYXlZP28uYm90dG9tPXRoaXMuX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQtKGkueSt0aGlzLl9vdmVybGF5UmVjdC5oZWlnaHQpKyJweCI6by50b3A9ZEkoaS55KSxvfV9nZXRFeGFjdE92ZXJsYXlYKHQsZSxuKXtsZXQgbyxpPXtsZWZ0OiIiLHJpZ2h0OiIifSxhPXRoaXMuX2dldE92ZXJsYXlQb2ludChlLHRoaXMuX292ZXJsYXlSZWN0LHQpO3JldHVybiB0aGlzLl9pc1B1c2hlZCYmKGE9dGhpcy5fcHVzaE92ZXJsYXlPblNjcmVlbihhLHRoaXMuX292ZXJsYXlSZWN0LG4pKSxvPXRoaXMuX2lzUnRsKCk/ImVuZCI9PT10Lm92ZXJsYXlYPyJsZWZ0IjoicmlnaHQiOiJlbmQiPT09dC5vdmVybGF5WD8icmlnaHQiOiJsZWZ0IiwicmlnaHQiPT09bz9pLnJpZ2h0PXRoaXMuX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aC0oYS54K3RoaXMuX292ZXJsYXlSZWN0LndpZHRoKSsicHgiOmkubGVmdD1kSShhLngpLGl9X2dldFNjcm9sbFZpc2liaWxpdHkoKXtjb25zdCB0PXRoaXMuX2dldE9yaWdpblJlY3QoKSxlPXRoaXMuX3BhbmUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj10aGlzLl9zY3JvbGxhYmxlcy5tYXAoKHQ9PnQuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpKTtyZXR1cm57aXNPcmlnaW5DbGlwcGVkOlBGKHQsbiksaXNPcmlnaW5PdXRzaWRlVmlldzpPRih0LG4pLGlzT3ZlcmxheUNsaXBwZWQ6UEYoZSxuKSxpc092ZXJsYXlPdXRzaWRlVmlldzpPRihlLG4pfX1fc3VidHJhY3RPdmVyZmxvd3ModCwuLi5lKXtyZXR1cm4gZS5yZWR1Y2UoKCh0LGUpPT50LU1hdGgubWF4KGUsMCkpLHQpfV9nZXROYXJyb3dlZFZpZXdwb3J0UmVjdCgpe2NvbnN0IHQ9dGhpcy5fZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoLGU9dGhpcy5fZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCxuPXRoaXMuX3ZpZXdwb3J0UnVsZXIuZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpO3JldHVybnt0b3A6bi50b3ArdGhpcy5fdmlld3BvcnRNYXJnaW4sbGVmdDpuLmxlZnQrdGhpcy5fdmlld3BvcnRNYXJnaW4scmlnaHQ6bi5sZWZ0K3QtdGhpcy5fdmlld3BvcnRNYXJnaW4sYm90dG9tOm4udG9wK2UtdGhpcy5fdmlld3BvcnRNYXJnaW4sd2lkdGg6dC0yKnRoaXMuX3ZpZXdwb3J0TWFyZ2luLGhlaWdodDplLTIqdGhpcy5fdmlld3BvcnRNYXJnaW59fV9pc1J0bCgpe3JldHVybiJydGwiPT09dGhpcy5fb3ZlcmxheVJlZi5nZXREaXJlY3Rpb24oKX1faGFzRXhhY3RQb3NpdGlvbigpe3JldHVybiF0aGlzLl9oYXNGbGV4aWJsZURpbWVuc2lvbnN8fHRoaXMuX2lzUHVzaGVkfV9nZXRPZmZzZXQodCxlKXtyZXR1cm4ieCI9PT1lP251bGw9PXQub2Zmc2V0WD90aGlzLl9vZmZzZXRYOnQub2Zmc2V0WDpudWxsPT10Lm9mZnNldFk/dGhpcy5fb2Zmc2V0WTp0Lm9mZnNldFl9X3ZhbGlkYXRlUG9zaXRpb25zKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSl7aWYoIXRoaXMuX3ByZWZlcnJlZFBvc2l0aW9ucy5sZW5ndGgpdGhyb3cgRXJyb3IoIkZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneTogQXQgbGVhc3Qgb25lIHBvc2l0aW9uIGlzIHJlcXVpcmVkLiIpO3RoaXMuX3ByZWZlcnJlZFBvc2l0aW9ucy5mb3JFYWNoKCh0PT57VEYoIm9yaWdpblgiLHQub3JpZ2luWCksUkYoIm9yaWdpblkiLHQub3JpZ2luWSksVEYoIm92ZXJsYXlYIix0Lm92ZXJsYXlYKSxSRigib3ZlcmxheVkiLHQub3ZlcmxheVkpfSkpfX1fYWRkUGFuZWxDbGFzc2VzKHQpe3RoaXMuX3BhbmUmJmNJKHQpLmZvckVhY2goKHQ9PnsiIiE9PXQmJi0xPT09dGhpcy5fYXBwbGllZFBhbmVsQ2xhc3Nlcy5pbmRleE9mKHQpJiYodGhpcy5fYXBwbGllZFBhbmVsQ2xhc3Nlcy5wdXNoKHQpLHRoaXMuX3BhbmUuY2xhc3NMaXN0LmFkZCh0KSl9KSl9X2NsZWFyUGFuZWxDbGFzc2VzKCl7dGhpcy5fcGFuZSYmKHRoaXMuX2FwcGxpZWRQYW5lbENsYXNzZXMuZm9yRWFjaCgodD0+e3RoaXMuX3BhbmUuY2xhc3NMaXN0LnJlbW92ZSh0KX0pKSx0aGlzLl9hcHBsaWVkUGFuZWxDbGFzc2VzPVtdKX1fZ2V0T3JpZ2luUmVjdCgpe2NvbnN0IHQ9dGhpcy5fb3JpZ2luO2lmKHQgaW5zdGFuY2VvZiBjaClyZXR1cm4gdC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKHQgaW5zdGFuY2VvZiBFbGVtZW50KXJldHVybiB0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2NvbnN0IGU9dC53aWR0aHx8MCxuPXQuaGVpZ2h0fHwwO3JldHVybnt0b3A6dC55LGJvdHRvbTp0LnkrbixsZWZ0OnQueCxyaWdodDp0LngrZSxoZWlnaHQ6bix3aWR0aDplfX19ZnVuY3Rpb24gVUYodCxlKXtmb3IobGV0IG4gaW4gZSllLmhhc093blByb3BlcnR5KG4pJiYodFtuXT1lW25dKTtyZXR1cm4gdH1mdW5jdGlvbiBXRih0KXtpZigibnVtYmVyIiE9dHlwZW9mIHQmJm51bGwhPXQpe2NvbnN0W2Usbl09dC5zcGxpdChWRik7cmV0dXJuIG4mJiJweCIhPT1uP251bGw6cGFyc2VGbG9hdChlKX1yZXR1cm4gdHx8bnVsbH1mdW5jdGlvbiBHRih0KXtyZXR1cm57dG9wOk1hdGguZmxvb3IodC50b3ApLHJpZ2h0Ok1hdGguZmxvb3IodC5yaWdodCksYm90dG9tOk1hdGguZmxvb3IodC5ib3R0b20pLGxlZnQ6TWF0aC5mbG9vcih0LmxlZnQpLHdpZHRoOk1hdGguZmxvb3IodC53aWR0aCksaGVpZ2h0Ok1hdGguZmxvb3IodC5oZWlnaHQpfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY2xhc3MgWUZ7Y29uc3RydWN0b3IodCxlLG4sbyxpLGEscil7dGhpcy5fcHJlZmVycmVkUG9zaXRpb25zPVtdLHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3k9bmV3IGpGKG4sbyxpLGEscikud2l0aEZsZXhpYmxlRGltZW5zaW9ucyghMSkud2l0aFB1c2goITEpLndpdGhWaWV3cG9ydE1hcmdpbigwKSx0aGlzLndpdGhGYWxsYmFja1Bvc2l0aW9uKHQsZSksdGhpcy5vblBvc2l0aW9uQ2hhbmdlPXRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kucG9zaXRpb25DaGFuZ2VzfWdldCBwb3NpdGlvbnMoKXtyZXR1cm4gdGhpcy5fcHJlZmVycmVkUG9zaXRpb25zfWF0dGFjaCh0KXt0aGlzLl9vdmVybGF5UmVmPXQsdGhpcy5fcG9zaXRpb25TdHJhdGVneS5hdHRhY2godCksdGhpcy5fZGlyZWN0aW9uJiYodC5zZXREaXJlY3Rpb24odGhpcy5fZGlyZWN0aW9uKSx0aGlzLl9kaXJlY3Rpb249bnVsbCl9ZGlzcG9zZSgpe3RoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kuZGlzcG9zZSgpfWRldGFjaCgpe3RoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kuZGV0YWNoKCl9YXBwbHkoKXt0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LmFwcGx5KCl9cmVjYWxjdWxhdGVMYXN0UG9zaXRpb24oKXt0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LnJlYXBwbHlMYXN0UG9zaXRpb24oKX13aXRoU2Nyb2xsYWJsZUNvbnRhaW5lcnModCl7dGhpcy5fcG9zaXRpb25TdHJhdGVneS53aXRoU2Nyb2xsYWJsZUNvbnRhaW5lcnModCl9d2l0aEZhbGxiYWNrUG9zaXRpb24odCxlLG4sbyl7Y29uc3QgaT1uZXcgREYodCxlLG4sbyk7cmV0dXJuIHRoaXMuX3ByZWZlcnJlZFBvc2l0aW9ucy5wdXNoKGkpLHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kud2l0aFBvc2l0aW9ucyh0aGlzLl9wcmVmZXJyZWRQb3NpdGlvbnMpLHRoaXN9d2l0aERpcmVjdGlvbih0KXtyZXR1cm4gdGhpcy5fb3ZlcmxheVJlZj90aGlzLl9vdmVybGF5UmVmLnNldERpcmVjdGlvbih0KTp0aGlzLl9kaXJlY3Rpb249dCx0aGlzfXdpdGhPZmZzZXRYKHQpe3JldHVybiB0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LndpdGhEZWZhdWx0T2Zmc2V0WCh0KSx0aGlzfXdpdGhPZmZzZXRZKHQpe3JldHVybiB0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LndpdGhEZWZhdWx0T2Zmc2V0WSh0KSx0aGlzfXdpdGhMb2NrZWRQb3NpdGlvbih0KXtyZXR1cm4gdGhpcy5fcG9zaXRpb25TdHJhdGVneS53aXRoTG9ja2VkUG9zaXRpb24odCksdGhpc313aXRoUG9zaXRpb25zKHQpe3JldHVybiB0aGlzLl9wcmVmZXJyZWRQb3NpdGlvbnM9dC5zbGljZSgpLHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kud2l0aFBvc2l0aW9ucyh0aGlzLl9wcmVmZXJyZWRQb3NpdGlvbnMpLHRoaXN9c2V0T3JpZ2luKHQpe3JldHVybiB0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LnNldE9yaWdpbih0KSx0aGlzfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY29uc3QgcUY9ImNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyIjtjbGFzcyBaRntjb25zdHJ1Y3Rvcigpe3RoaXMuX2Nzc1Bvc2l0aW9uPSJzdGF0aWMiLHRoaXMuX3RvcE9mZnNldD0iIix0aGlzLl9ib3R0b21PZmZzZXQ9IiIsdGhpcy5fbGVmdE9mZnNldD0iIix0aGlzLl9yaWdodE9mZnNldD0iIix0aGlzLl9hbGlnbkl0ZW1zPSIiLHRoaXMuX2p1c3RpZnlDb250ZW50PSIiLHRoaXMuX3dpZHRoPSIiLHRoaXMuX2hlaWdodD0iIn1hdHRhY2godCl7Y29uc3QgZT10LmdldENvbmZpZygpO3RoaXMuX292ZXJsYXlSZWY9dCx0aGlzLl93aWR0aCYmIWUud2lkdGgmJnQudXBkYXRlU2l6ZSh7d2lkdGg6dGhpcy5fd2lkdGh9KSx0aGlzLl9oZWlnaHQmJiFlLmhlaWdodCYmdC51cGRhdGVTaXplKHtoZWlnaHQ6dGhpcy5faGVpZ2h0fSksdC5ob3N0RWxlbWVudC5jbGFzc0xpc3QuYWRkKHFGKSx0aGlzLl9pc0Rpc3Bvc2VkPSExfXRvcCh0PSIiKXtyZXR1cm4gdGhpcy5fYm90dG9tT2Zmc2V0PSIiLHRoaXMuX3RvcE9mZnNldD10LHRoaXMuX2FsaWduSXRlbXM9ImZsZXgtc3RhcnQiLHRoaXN9bGVmdCh0PSIiKXtyZXR1cm4gdGhpcy5fcmlnaHRPZmZzZXQ9IiIsdGhpcy5fbGVmdE9mZnNldD10LHRoaXMuX2p1c3RpZnlDb250ZW50PSJmbGV4LXN0YXJ0Iix0aGlzfWJvdHRvbSh0PSIiKXtyZXR1cm4gdGhpcy5fdG9wT2Zmc2V0PSIiLHRoaXMuX2JvdHRvbU9mZnNldD10LHRoaXMuX2FsaWduSXRlbXM9ImZsZXgtZW5kIix0aGlzfXJpZ2h0KHQ9IiIpe3JldHVybiB0aGlzLl9sZWZ0T2Zmc2V0PSIiLHRoaXMuX3JpZ2h0T2Zmc2V0PXQsdGhpcy5fanVzdGlmeUNvbnRlbnQ9ImZsZXgtZW5kIix0aGlzfXdpZHRoKHQ9IiIpe3JldHVybiB0aGlzLl9vdmVybGF5UmVmP3RoaXMuX292ZXJsYXlSZWYudXBkYXRlU2l6ZSh7d2lkdGg6dH0pOnRoaXMuX3dpZHRoPXQsdGhpc31oZWlnaHQodD0iIil7cmV0dXJuIHRoaXMuX292ZXJsYXlSZWY/dGhpcy5fb3ZlcmxheVJlZi51cGRhdGVTaXplKHtoZWlnaHQ6dH0pOnRoaXMuX2hlaWdodD10LHRoaXN9Y2VudGVySG9yaXpvbnRhbGx5KHQ9IiIpe3JldHVybiB0aGlzLmxlZnQodCksdGhpcy5fanVzdGlmeUNvbnRlbnQ9ImNlbnRlciIsdGhpc31jZW50ZXJWZXJ0aWNhbGx5KHQ9IiIpe3JldHVybiB0aGlzLnRvcCh0KSx0aGlzLl9hbGlnbkl0ZW1zPSJjZW50ZXIiLHRoaXN9YXBwbHkoKXtpZighdGhpcy5fb3ZlcmxheVJlZnx8IXRoaXMuX292ZXJsYXlSZWYuaGFzQXR0YWNoZWQoKSlyZXR1cm47Y29uc3QgdD10aGlzLl9vdmVybGF5UmVmLm92ZXJsYXlFbGVtZW50LnN0eWxlLGU9dGhpcy5fb3ZlcmxheVJlZi5ob3N0RWxlbWVudC5zdHlsZSxuPXRoaXMuX292ZXJsYXlSZWYuZ2V0Q29uZmlnKCkse3dpZHRoOm8saGVpZ2h0OmksbWF4V2lkdGg6YSxtYXhIZWlnaHQ6cn09bixzPSEoIjEwMCUiIT09byYmIjEwMHZ3IiE9PW98fGEmJiIxMDAlIiE9PWEmJiIxMDB2dyIhPT1hKSxsPSEoIjEwMCUiIT09aSYmIjEwMHZoIiE9PWl8fHImJiIxMDAlIiE9PXImJiIxMDB2aCIhPT1yKTt0LnBvc2l0aW9uPXRoaXMuX2Nzc1Bvc2l0aW9uLHQubWFyZ2luTGVmdD1zPyIwIjp0aGlzLl9sZWZ0T2Zmc2V0LHQubWFyZ2luVG9wPWw/IjAiOnRoaXMuX3RvcE9mZnNldCx0Lm1hcmdpbkJvdHRvbT10aGlzLl9ib3R0b21PZmZzZXQsdC5tYXJnaW5SaWdodD10aGlzLl9yaWdodE9mZnNldCxzP2UuanVzdGlmeUNvbnRlbnQ9ImZsZXgtc3RhcnQiOiJjZW50ZXIiPT09dGhpcy5fanVzdGlmeUNvbnRlbnQ/ZS5qdXN0aWZ5Q29udGVudD0iY2VudGVyIjoicnRsIj09PXRoaXMuX292ZXJsYXlSZWYuZ2V0Q29uZmlnKCkuZGlyZWN0aW9uPyJmbGV4LXN0YXJ0Ij09PXRoaXMuX2p1c3RpZnlDb250ZW50P2UuanVzdGlmeUNvbnRlbnQ9ImZsZXgtZW5kIjoiZmxleC1lbmQiPT09dGhpcy5fanVzdGlmeUNvbnRlbnQmJihlLmp1c3RpZnlDb250ZW50PSJmbGV4LXN0YXJ0Iik6ZS5qdXN0aWZ5Q29udGVudD10aGlzLl9qdXN0aWZ5Q29udGVudCxlLmFsaWduSXRlbXM9bD8iZmxleC1zdGFydCI6dGhpcy5fYWxpZ25JdGVtc31kaXNwb3NlKCl7aWYodGhpcy5faXNEaXNwb3NlZHx8IXRoaXMuX292ZXJsYXlSZWYpcmV0dXJuO2NvbnN0IHQ9dGhpcy5fb3ZlcmxheVJlZi5vdmVybGF5RWxlbWVudC5zdHlsZSxlPXRoaXMuX292ZXJsYXlSZWYuaG9zdEVsZW1lbnQsbj1lLnN0eWxlO2UuY2xhc3NMaXN0LnJlbW92ZShxRiksbi5qdXN0aWZ5Q29udGVudD1uLmFsaWduSXRlbXM9dC5tYXJnaW5Ub3A9dC5tYXJnaW5Cb3R0b209dC5tYXJnaW5MZWZ0PXQubWFyZ2luUmlnaHQ9dC5wb3NpdGlvbj0iIix0aGlzLl9vdmVybGF5UmVmPW51bGwsdGhpcy5faXNEaXNwb3NlZD0hMH19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NsYXNzIFhGe2NvbnN0cnVjdG9yKHQsZSxuLG8pe3RoaXMuX3ZpZXdwb3J0UnVsZXI9dCx0aGlzLl9kb2N1bWVudD1lLHRoaXMuX3BsYXRmb3JtPW4sdGhpcy5fb3ZlcmxheUNvbnRhaW5lcj1vfWdsb2JhbCgpe3JldHVybiBuZXcgWkZ9Y29ubmVjdGVkVG8odCxlLG4pe3JldHVybiBuZXcgWUYoZSxuLHQsdGhpcy5fdmlld3BvcnRSdWxlcix0aGlzLl9kb2N1bWVudCx0aGlzLl9wbGF0Zm9ybSx0aGlzLl9vdmVybGF5Q29udGFpbmVyKX1mbGV4aWJsZUNvbm5lY3RlZFRvKHQpe3JldHVybiBuZXcgakYodCx0aGlzLl92aWV3cG9ydFJ1bGVyLHRoaXMuX2RvY3VtZW50LHRoaXMuX3BsYXRmb3JtLHRoaXMuX292ZXJsYXlDb250YWluZXIpfX1YRi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8WEYpKHVzKFFIKSx1cyhVQyksdXMoZkkpLHVzKEZGKSl9LFhGLsm1cHJvdj1sbyh7ZmFjdG9yeTpmdW5jdGlvbiB0KCl7cmV0dXJuIG5ldyBYRih1cyhRSCksdXMoVUMpLHVzKGZJKSx1cyhGRikpfSx0b2tlbjpYRixwcm92aWRlZEluOiJyb290In0pLFhGLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6UUh9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltVQ119XX0se3R5cGU6Zkl9LHt0eXBlOkZGfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihYRixbe3R5cGU6Sm0sYXJnczpbe3Byb3ZpZGVkSW46InJvb3QifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6UUh9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltVQ119XX0se3R5cGU6Zkl9LHt0eXBlOkZGfV19KSxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmxldCBLRj0wO2NsYXNzIEpGe2NvbnN0cnVjdG9yKHQsZSxuLG8saSxhLHIscyxsLGMsZCl7dGhpcy5zY3JvbGxTdHJhdGVnaWVzPXQsdGhpcy5fb3ZlcmxheUNvbnRhaW5lcj1lLHRoaXMuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1uLHRoaXMuX3Bvc2l0aW9uQnVpbGRlcj1vLHRoaXMuX2tleWJvYXJkRGlzcGF0Y2hlcj1pLHRoaXMuX2luamVjdG9yPWEsdGhpcy5fbmdab25lPXIsdGhpcy5fZG9jdW1lbnQ9cyx0aGlzLl9kaXJlY3Rpb25hbGl0eT1sLHRoaXMuX2xvY2F0aW9uPWMsdGhpcy5fb3V0c2lkZUNsaWNrRGlzcGF0Y2hlcj1kfWNyZWF0ZSh0KXtjb25zdCBlPXRoaXMuX2NyZWF0ZUhvc3RFbGVtZW50KCksbj10aGlzLl9jcmVhdGVQYW5lRWxlbWVudChlKSxvPXRoaXMuX2NyZWF0ZVBvcnRhbE91dGxldChuKSxpPW5ldyBTRih0KTtyZXR1cm4gaS5kaXJlY3Rpb249aS5kaXJlY3Rpb258fHRoaXMuX2RpcmVjdGlvbmFsaXR5LnZhbHVlLG5ldyBMRihvLGUsbixpLHRoaXMuX25nWm9uZSx0aGlzLl9rZXlib2FyZERpc3BhdGNoZXIsdGhpcy5fZG9jdW1lbnQsdGhpcy5fbG9jYXRpb24sdGhpcy5fb3V0c2lkZUNsaWNrRGlzcGF0Y2hlcil9cG9zaXRpb24oKXtyZXR1cm4gdGhpcy5fcG9zaXRpb25CdWlsZGVyfV9jcmVhdGVQYW5lRWxlbWVudCh0KXtjb25zdCBlPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBlLmlkPSJjZGstb3ZlcmxheS0iK0tGKyssZS5jbGFzc0xpc3QuYWRkKCJjZGstb3ZlcmxheS1wYW5lIiksdC5hcHBlbmRDaGlsZChlKSxlfV9jcmVhdGVIb3N0RWxlbWVudCgpe2NvbnN0IHQ9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIHRoaXMuX292ZXJsYXlDb250YWluZXIuZ2V0Q29udGFpbmVyRWxlbWVudCgpLmFwcGVuZENoaWxkKHQpLHR9X2NyZWF0ZVBvcnRhbE91dGxldCh0KXtyZXR1cm4gdGhpcy5fYXBwUmVmfHwodGhpcy5fYXBwUmVmPXRoaXMuX2luamVjdG9yLmdldChfQykpLG5ldyBwRih0LHRoaXMuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcix0aGlzLl9hcHBSZWYsdGhpcy5faW5qZWN0b3IsdGhpcy5fZG9jdW1lbnQpfX1KRi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8SkYpKHVzKGtGKSx1cyhGRiksdXMocmgpLHVzKFhGKSx1cyhJRiksdXMoUXApLHVzKHRDKSx1cyhVQyksdXMoTXopLHVzKG9NKSx1cyh6RikpfSxKRi7JtXByb3Y9bG8oe3Rva2VuOkpGLGZhY3Rvcnk6SkYuybVmYWN9KSxKRi5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmtGfSx7dHlwZTpGRn0se3R5cGU6cmh9LHt0eXBlOlhGfSx7dHlwZTpJRn0se3R5cGU6UXB9LHt0eXBlOnRDfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbVUNdfV19LHt0eXBlOk16fSx7dHlwZTpvTX0se3R5cGU6ekZ9XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEpGLFt7dHlwZTpKbX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTprRn0se3R5cGU6RkZ9LHt0eXBlOnJofSx7dHlwZTpYRn0se3R5cGU6SUZ9LHt0eXBlOlFwfSx7dHlwZTp0Q30se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W1VDXX1dfSx7dHlwZTpNen0se3R5cGU6b019LHt0eXBlOnpGfV19KSxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IFFGPVt7b3JpZ2luWDoic3RhcnQiLG9yaWdpblk6ImJvdHRvbSIsb3ZlcmxheVg6InN0YXJ0IixvdmVybGF5WToidG9wIn0se29yaWdpblg6InN0YXJ0IixvcmlnaW5ZOiJ0b3AiLG92ZXJsYXlYOiJzdGFydCIsb3ZlcmxheVk6ImJvdHRvbSJ9LHtvcmlnaW5YOiJlbmQiLG9yaWdpblk6InRvcCIsb3ZlcmxheVg6ImVuZCIsb3ZlcmxheVk6ImJvdHRvbSJ9LHtvcmlnaW5YOiJlbmQiLG9yaWdpblk6ImJvdHRvbSIsb3ZlcmxheVg6ImVuZCIsb3ZlcmxheVk6InRvcCJ9XSwkRj1uZXcgTnIoImNkay1jb25uZWN0ZWQtb3ZlcmxheS1zY3JvbGwtc3RyYXRlZ3kiKTtjbGFzcyB0THtjb25zdHJ1Y3Rvcih0KXt0aGlzLmVsZW1lbnRSZWY9dH19dEwuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHRMKShNdShjaCkpfSx0TC7JtWRpcj1Kbyh7dHlwZTp0TCxzZWxlY3RvcnM6W1siIiwiY2RrLW92ZXJsYXktb3JpZ2luIiwiIl0sWyIiLCJvdmVybGF5LW9yaWdpbiIsIiJdLFsiIiwiY2RrT3ZlcmxheU9yaWdpbiIsIiJdXSxleHBvcnRBczpbImNka092ZXJsYXlPcmlnaW4iXX0pLHRMLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6Y2h9XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHRMLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6IltjZGstb3ZlcmxheS1vcmlnaW5dLCBbb3ZlcmxheS1vcmlnaW5dLCBbY2RrT3ZlcmxheU9yaWdpbl0iLGV4cG9ydEFzOiJjZGtPdmVybGF5T3JpZ2luIn1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmNofV19KSxudWxsKTtjbGFzcyBlTHtjb25zdHJ1Y3Rvcih0LGUsbixvLGkpe3RoaXMuX292ZXJsYXk9dCx0aGlzLl9kaXI9aSx0aGlzLl9oYXNCYWNrZHJvcD0hMSx0aGlzLl9sb2NrUG9zaXRpb249ITEsdGhpcy5fZ3Jvd0FmdGVyT3Blbj0hMSx0aGlzLl9mbGV4aWJsZURpbWVuc2lvbnM9ITEsdGhpcy5fcHVzaD0hMSx0aGlzLl9iYWNrZHJvcFN1YnNjcmlwdGlvbj1sLkVNUFRZLHRoaXMuX2F0dGFjaFN1YnNjcmlwdGlvbj1sLkVNUFRZLHRoaXMuX2RldGFjaFN1YnNjcmlwdGlvbj1sLkVNUFRZLHRoaXMuX3Bvc2l0aW9uU3Vic2NyaXB0aW9uPWwuRU1QVFksdGhpcy52aWV3cG9ydE1hcmdpbj0wLHRoaXMub3Blbj0hMSx0aGlzLmRpc2FibGVDbG9zZT0hMSx0aGlzLmJhY2tkcm9wQ2xpY2s9bmV3IEFiLHRoaXMucG9zaXRpb25DaGFuZ2U9bmV3IEFiLHRoaXMuYXR0YWNoPW5ldyBBYix0aGlzLmRldGFjaD1uZXcgQWIsdGhpcy5vdmVybGF5S2V5ZG93bj1uZXcgQWIsdGhpcy5vdmVybGF5T3V0c2lkZUNsaWNrPW5ldyBBYix0aGlzLl90ZW1wbGF0ZVBvcnRhbD1uZXcgbEYoZSxuKSx0aGlzLl9zY3JvbGxTdHJhdGVneUZhY3Rvcnk9byx0aGlzLnNjcm9sbFN0cmF0ZWd5PXRoaXMuX3Njcm9sbFN0cmF0ZWd5RmFjdG9yeSgpfWdldCBvZmZzZXRYKCl7cmV0dXJuIHRoaXMuX29mZnNldFh9c2V0IG9mZnNldFgodCl7dGhpcy5fb2Zmc2V0WD10LHRoaXMuX3Bvc2l0aW9uJiZ0aGlzLl91cGRhdGVQb3NpdGlvblN0cmF0ZWd5KHRoaXMuX3Bvc2l0aW9uKX1nZXQgb2Zmc2V0WSgpe3JldHVybiB0aGlzLl9vZmZzZXRZfXNldCBvZmZzZXRZKHQpe3RoaXMuX29mZnNldFk9dCx0aGlzLl9wb3NpdGlvbiYmdGhpcy5fdXBkYXRlUG9zaXRpb25TdHJhdGVneSh0aGlzLl9wb3NpdGlvbil9Z2V0IGhhc0JhY2tkcm9wKCl7cmV0dXJuIHRoaXMuX2hhc0JhY2tkcm9wfXNldCBoYXNCYWNrZHJvcCh0KXt0aGlzLl9oYXNCYWNrZHJvcD1ySSh0KX1nZXQgbG9ja1Bvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX2xvY2tQb3NpdGlvbn1zZXQgbG9ja1Bvc2l0aW9uKHQpe3RoaXMuX2xvY2tQb3NpdGlvbj1ySSh0KX1nZXQgZmxleGlibGVEaW1lbnNpb25zKCl7cmV0dXJuIHRoaXMuX2ZsZXhpYmxlRGltZW5zaW9uc31zZXQgZmxleGlibGVEaW1lbnNpb25zKHQpe3RoaXMuX2ZsZXhpYmxlRGltZW5zaW9ucz1ySSh0KX1nZXQgZ3Jvd0FmdGVyT3Blbigpe3JldHVybiB0aGlzLl9ncm93QWZ0ZXJPcGVufXNldCBncm93QWZ0ZXJPcGVuKHQpe3RoaXMuX2dyb3dBZnRlck9wZW49ckkodCl9Z2V0IHB1c2goKXtyZXR1cm4gdGhpcy5fcHVzaH1zZXQgcHVzaCh0KXt0aGlzLl9wdXNoPXJJKHQpfWdldCBvdmVybGF5UmVmKCl7cmV0dXJuIHRoaXMuX292ZXJsYXlSZWZ9Z2V0IGRpcigpe3JldHVybiB0aGlzLl9kaXI/dGhpcy5fZGlyLnZhbHVlOiJsdHIifW5nT25EZXN0cm95KCl7dGhpcy5fYXR0YWNoU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fZGV0YWNoU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fYmFja2Ryb3BTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9wb3NpdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX292ZXJsYXlSZWYmJnRoaXMuX292ZXJsYXlSZWYuZGlzcG9zZSgpfW5nT25DaGFuZ2VzKHQpe3RoaXMuX3Bvc2l0aW9uJiYodGhpcy5fdXBkYXRlUG9zaXRpb25TdHJhdGVneSh0aGlzLl9wb3NpdGlvbiksdGhpcy5fb3ZlcmxheVJlZi51cGRhdGVTaXplKHt3aWR0aDp0aGlzLndpZHRoLG1pbldpZHRoOnRoaXMubWluV2lkdGgsaGVpZ2h0OnRoaXMuaGVpZ2h0LG1pbkhlaWdodDp0aGlzLm1pbkhlaWdodH0pLHQub3JpZ2luJiZ0aGlzLm9wZW4mJnRoaXMuX3Bvc2l0aW9uLmFwcGx5KCkpLHQub3BlbiYmKHRoaXMub3Blbj90aGlzLl9hdHRhY2hPdmVybGF5KCk6dGhpcy5fZGV0YWNoT3ZlcmxheSgpKX1fY3JlYXRlT3ZlcmxheSgpe3RoaXMucG9zaXRpb25zJiZ0aGlzLnBvc2l0aW9ucy5sZW5ndGh8fCh0aGlzLnBvc2l0aW9ucz1RRik7Y29uc3QgdD10aGlzLl9vdmVybGF5UmVmPXRoaXMuX292ZXJsYXkuY3JlYXRlKHRoaXMuX2J1aWxkQ29uZmlnKCkpO3RoaXMuX2F0dGFjaFN1YnNjcmlwdGlvbj10LmF0dGFjaG1lbnRzKCkuc3Vic2NyaWJlKCgoKT0+dGhpcy5hdHRhY2guZW1pdCgpKSksdGhpcy5fZGV0YWNoU3Vic2NyaXB0aW9uPXQuZGV0YWNobWVudHMoKS5zdWJzY3JpYmUoKCgpPT50aGlzLmRldGFjaC5lbWl0KCkpKSx0LmtleWRvd25FdmVudHMoKS5zdWJzY3JpYmUoKHQ9Pnt0aGlzLm92ZXJsYXlLZXlkb3duLm5leHQodCksdC5rZXlDb2RlIT09ZUl8fHRoaXMuZGlzYWJsZUNsb3NlfHxhSSh0KXx8KHQucHJldmVudERlZmF1bHQoKSx0aGlzLl9kZXRhY2hPdmVybGF5KCkpfSkpLHRoaXMuX292ZXJsYXlSZWYub3V0c2lkZVBvaW50ZXJFdmVudHMoKS5zdWJzY3JpYmUoKHQ9Pnt0aGlzLm92ZXJsYXlPdXRzaWRlQ2xpY2submV4dCh0KX0pKX1fYnVpbGRDb25maWcoKXtjb25zdCB0PXRoaXMuX3Bvc2l0aW9uPXRoaXMucG9zaXRpb25TdHJhdGVneXx8dGhpcy5fY3JlYXRlUG9zaXRpb25TdHJhdGVneSgpLGU9bmV3IFNGKHtkaXJlY3Rpb246dGhpcy5fZGlyLHBvc2l0aW9uU3RyYXRlZ3k6dCxzY3JvbGxTdHJhdGVneTp0aGlzLnNjcm9sbFN0cmF0ZWd5LGhhc0JhY2tkcm9wOnRoaXMuaGFzQmFja2Ryb3B9KTtyZXR1cm4odGhpcy53aWR0aHx8MD09PXRoaXMud2lkdGgpJiYoZS53aWR0aD10aGlzLndpZHRoKSwodGhpcy5oZWlnaHR8fDA9PT10aGlzLmhlaWdodCkmJihlLmhlaWdodD10aGlzLmhlaWdodCksKHRoaXMubWluV2lkdGh8fDA9PT10aGlzLm1pbldpZHRoKSYmKGUubWluV2lkdGg9dGhpcy5taW5XaWR0aCksKHRoaXMubWluSGVpZ2h0fHwwPT09dGhpcy5taW5IZWlnaHQpJiYoZS5taW5IZWlnaHQ9dGhpcy5taW5IZWlnaHQpLHRoaXMuYmFja2Ryb3BDbGFzcyYmKGUuYmFja2Ryb3BDbGFzcz10aGlzLmJhY2tkcm9wQ2xhc3MpLHRoaXMucGFuZWxDbGFzcyYmKGUucGFuZWxDbGFzcz10aGlzLnBhbmVsQ2xhc3MpLGV9X3VwZGF0ZVBvc2l0aW9uU3RyYXRlZ3kodCl7Y29uc3QgZT10aGlzLnBvc2l0aW9ucy5tYXAoKHQ9Pih7b3JpZ2luWDp0Lm9yaWdpblgsb3JpZ2luWTp0Lm9yaWdpblksb3ZlcmxheVg6dC5vdmVybGF5WCxvdmVybGF5WTp0Lm92ZXJsYXlZLG9mZnNldFg6dC5vZmZzZXRYfHx0aGlzLm9mZnNldFgsb2Zmc2V0WTp0Lm9mZnNldFl8fHRoaXMub2Zmc2V0WSxwYW5lbENsYXNzOnQucGFuZWxDbGFzc3x8dm9pZCAwfSkpKTtyZXR1cm4gdC5zZXRPcmlnaW4odGhpcy5vcmlnaW4uZWxlbWVudFJlZikud2l0aFBvc2l0aW9ucyhlKS53aXRoRmxleGlibGVEaW1lbnNpb25zKHRoaXMuZmxleGlibGVEaW1lbnNpb25zKS53aXRoUHVzaCh0aGlzLnB1c2gpLndpdGhHcm93QWZ0ZXJPcGVuKHRoaXMuZ3Jvd0FmdGVyT3Blbikud2l0aFZpZXdwb3J0TWFyZ2luKHRoaXMudmlld3BvcnRNYXJnaW4pLndpdGhMb2NrZWRQb3NpdGlvbih0aGlzLmxvY2tQb3NpdGlvbikud2l0aFRyYW5zZm9ybU9yaWdpbk9uKHRoaXMudHJhbnNmb3JtT3JpZ2luU2VsZWN0b3IpfV9jcmVhdGVQb3NpdGlvblN0cmF0ZWd5KCl7Y29uc3QgdD10aGlzLl9vdmVybGF5LnBvc2l0aW9uKCkuZmxleGlibGVDb25uZWN0ZWRUbyh0aGlzLm9yaWdpbi5lbGVtZW50UmVmKTtyZXR1cm4gdGhpcy5fdXBkYXRlUG9zaXRpb25TdHJhdGVneSh0KSx0fV9hdHRhY2hPdmVybGF5KCl7dGhpcy5fb3ZlcmxheVJlZj90aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpLmhhc0JhY2tkcm9wPXRoaXMuaGFzQmFja2Ryb3A6dGhpcy5fY3JlYXRlT3ZlcmxheSgpLHRoaXMuX292ZXJsYXlSZWYuaGFzQXR0YWNoZWQoKXx8dGhpcy5fb3ZlcmxheVJlZi5hdHRhY2godGhpcy5fdGVtcGxhdGVQb3J0YWwpLHRoaXMuaGFzQmFja2Ryb3A/dGhpcy5fYmFja2Ryb3BTdWJzY3JpcHRpb249dGhpcy5fb3ZlcmxheVJlZi5iYWNrZHJvcENsaWNrKCkuc3Vic2NyaWJlKCh0PT57dGhpcy5iYWNrZHJvcENsaWNrLmVtaXQodCl9KSk6dGhpcy5fYmFja2Ryb3BTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9wb3NpdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMucG9zaXRpb25DaGFuZ2Uub2JzZXJ2ZXJzLmxlbmd0aD4wJiYodGhpcy5fcG9zaXRpb25TdWJzY3JpcHRpb249dGhpcy5fcG9zaXRpb24ucG9zaXRpb25DaGFuZ2VzLnBpcGUoaG4oKCgpPT50aGlzLnBvc2l0aW9uQ2hhbmdlLm9ic2VydmVycy5sZW5ndGg+MCkpKS5zdWJzY3JpYmUoKHQ9Pnt0aGlzLnBvc2l0aW9uQ2hhbmdlLmVtaXQodCksMD09PXRoaXMucG9zaXRpb25DaGFuZ2Uub2JzZXJ2ZXJzLmxlbmd0aCYmdGhpcy5fcG9zaXRpb25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX0pKSl9X2RldGFjaE92ZXJsYXkoKXt0aGlzLl9vdmVybGF5UmVmJiZ0aGlzLl9vdmVybGF5UmVmLmRldGFjaCgpLHRoaXMuX2JhY2tkcm9wU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fcG9zaXRpb25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX19ZUwuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGVMKShNdShKRiksTXUoVWgpLE11KFhoKSxNdSgkRiksTXUoTXosOCkpfSxlTC7JtWRpcj1Kbyh7dHlwZTplTCxzZWxlY3RvcnM6W1siIiwiY2RrLWNvbm5lY3RlZC1vdmVybGF5IiwiIl0sWyIiLCJjb25uZWN0ZWQtb3ZlcmxheSIsIiJdLFsiIiwiY2RrQ29ubmVjdGVkT3ZlcmxheSIsIiJdXSxpbnB1dHM6e3ZpZXdwb3J0TWFyZ2luOlsiY2RrQ29ubmVjdGVkT3ZlcmxheVZpZXdwb3J0TWFyZ2luIiwidmlld3BvcnRNYXJnaW4iXSxvcGVuOlsiY2RrQ29ubmVjdGVkT3ZlcmxheU9wZW4iLCJvcGVuIl0sZGlzYWJsZUNsb3NlOlsiY2RrQ29ubmVjdGVkT3ZlcmxheURpc2FibGVDbG9zZSIsImRpc2FibGVDbG9zZSJdLHNjcm9sbFN0cmF0ZWd5OlsiY2RrQ29ubmVjdGVkT3ZlcmxheVNjcm9sbFN0cmF0ZWd5Iiwic2Nyb2xsU3RyYXRlZ3kiXSxvZmZzZXRYOlsiY2RrQ29ubmVjdGVkT3ZlcmxheU9mZnNldFgiLCJvZmZzZXRYIl0sb2Zmc2V0WTpbImNka0Nvbm5lY3RlZE92ZXJsYXlPZmZzZXRZIiwib2Zmc2V0WSJdLGhhc0JhY2tkcm9wOlsiY2RrQ29ubmVjdGVkT3ZlcmxheUhhc0JhY2tkcm9wIiwiaGFzQmFja2Ryb3AiXSxsb2NrUG9zaXRpb246WyJjZGtDb25uZWN0ZWRPdmVybGF5TG9ja1Bvc2l0aW9uIiwibG9ja1Bvc2l0aW9uIl0sZmxleGlibGVEaW1lbnNpb25zOlsiY2RrQ29ubmVjdGVkT3ZlcmxheUZsZXhpYmxlRGltZW5zaW9ucyIsImZsZXhpYmxlRGltZW5zaW9ucyJdLGdyb3dBZnRlck9wZW46WyJjZGtDb25uZWN0ZWRPdmVybGF5R3Jvd0FmdGVyT3BlbiIsImdyb3dBZnRlck9wZW4iXSxwdXNoOlsiY2RrQ29ubmVjdGVkT3ZlcmxheVB1c2giLCJwdXNoIl0scG9zaXRpb25zOlsiY2RrQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9ucyIsInBvc2l0aW9ucyJdLG9yaWdpbjpbImNka0Nvbm5lY3RlZE92ZXJsYXlPcmlnaW4iLCJvcmlnaW4iXSxwb3NpdGlvblN0cmF0ZWd5OlsiY2RrQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9uU3RyYXRlZ3kiLCJwb3NpdGlvblN0cmF0ZWd5Il0sd2lkdGg6WyJjZGtDb25uZWN0ZWRPdmVybGF5V2lkdGgiLCJ3aWR0aCJdLGhlaWdodDpbImNka0Nvbm5lY3RlZE92ZXJsYXlIZWlnaHQiLCJoZWlnaHQiXSxtaW5XaWR0aDpbImNka0Nvbm5lY3RlZE92ZXJsYXlNaW5XaWR0aCIsIm1pbldpZHRoIl0sbWluSGVpZ2h0OlsiY2RrQ29ubmVjdGVkT3ZlcmxheU1pbkhlaWdodCIsIm1pbkhlaWdodCJdLGJhY2tkcm9wQ2xhc3M6WyJjZGtDb25uZWN0ZWRPdmVybGF5QmFja2Ryb3BDbGFzcyIsImJhY2tkcm9wQ2xhc3MiXSxwYW5lbENsYXNzOlsiY2RrQ29ubmVjdGVkT3ZlcmxheVBhbmVsQ2xhc3MiLCJwYW5lbENsYXNzIl0sdHJhbnNmb3JtT3JpZ2luU2VsZWN0b3I6WyJjZGtDb25uZWN0ZWRPdmVybGF5VHJhbnNmb3JtT3JpZ2luT24iLCJ0cmFuc2Zvcm1PcmlnaW5TZWxlY3RvciJdfSxvdXRwdXRzOntiYWNrZHJvcENsaWNrOiJiYWNrZHJvcENsaWNrIixwb3NpdGlvbkNoYW5nZToicG9zaXRpb25DaGFuZ2UiLGF0dGFjaDoiYXR0YWNoIixkZXRhY2g6ImRldGFjaCIsb3ZlcmxheUtleWRvd246Im92ZXJsYXlLZXlkb3duIixvdmVybGF5T3V0c2lkZUNsaWNrOiJvdmVybGF5T3V0c2lkZUNsaWNrIn0sZXhwb3J0QXM6WyJjZGtDb25uZWN0ZWRPdmVybGF5Il0sZmVhdHVyZXM6W1NpXX0pLGVMLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6SkZ9LHt0eXBlOlVofSx7dHlwZTpYaH0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6WyRGXX1dfSx7dHlwZTpNeixkZWNvcmF0b3JzOlt7dHlwZTpfc31dfV0sZUwucHJvcERlY29yYXRvcnM9e29yaWdpbjpbe3R5cGU6eV8sYXJnczpbImNka0Nvbm5lY3RlZE92ZXJsYXlPcmlnaW4iXX1dLHBvc2l0aW9uczpbe3R5cGU6eV8sYXJnczpbImNka0Nvbm5lY3RlZE92ZXJsYXlQb3NpdGlvbnMiXX1dLHBvc2l0aW9uU3RyYXRlZ3k6W3t0eXBlOnlfLGFyZ3M6WyJjZGtDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25TdHJhdGVneSJdfV0sb2Zmc2V0WDpbe3R5cGU6eV8sYXJnczpbImNka0Nvbm5lY3RlZE92ZXJsYXlPZmZzZXRYIl19XSxvZmZzZXRZOlt7dHlwZTp5XyxhcmdzOlsiY2RrQ29ubmVjdGVkT3ZlcmxheU9mZnNldFkiXX1dLHdpZHRoOlt7dHlwZTp5XyxhcmdzOlsiY2RrQ29ubmVjdGVkT3ZlcmxheVdpZHRoIl19XSxoZWlnaHQ6W3t0eXBlOnlfLGFyZ3M6WyJjZGtDb25uZWN0ZWRPdmVybGF5SGVpZ2h0Il19XSxtaW5XaWR0aDpbe3R5cGU6eV8sYXJnczpbImNka0Nvbm5lY3RlZE92ZXJsYXlNaW5XaWR0aCJdfV0sbWluSGVpZ2h0Olt7dHlwZTp5XyxhcmdzOlsiY2RrQ29ubmVjdGVkT3ZlcmxheU1pbkhlaWdodCJdfV0sYmFja2Ryb3BDbGFzczpbe3R5cGU6eV8sYXJnczpbImNka0Nvbm5lY3RlZE92ZXJsYXlCYWNrZHJvcENsYXNzIl19XSxwYW5lbENsYXNzOlt7dHlwZTp5XyxhcmdzOlsiY2RrQ29ubmVjdGVkT3ZlcmxheVBhbmVsQ2xhc3MiXX1dLHZpZXdwb3J0TWFyZ2luOlt7dHlwZTp5XyxhcmdzOlsiY2RrQ29ubmVjdGVkT3ZlcmxheVZpZXdwb3J0TWFyZ2luIl19XSxzY3JvbGxTdHJhdGVneTpbe3R5cGU6eV8sYXJnczpbImNka0Nvbm5lY3RlZE92ZXJsYXlTY3JvbGxTdHJhdGVneSJdfV0sb3Blbjpbe3R5cGU6eV8sYXJnczpbImNka0Nvbm5lY3RlZE92ZXJsYXlPcGVuIl19XSxkaXNhYmxlQ2xvc2U6W3t0eXBlOnlfLGFyZ3M6WyJjZGtDb25uZWN0ZWRPdmVybGF5RGlzYWJsZUNsb3NlIl19XSx0cmFuc2Zvcm1PcmlnaW5TZWxlY3Rvcjpbe3R5cGU6eV8sYXJnczpbImNka0Nvbm5lY3RlZE92ZXJsYXlUcmFuc2Zvcm1PcmlnaW5PbiJdfV0saGFzQmFja2Ryb3A6W3t0eXBlOnlfLGFyZ3M6WyJjZGtDb25uZWN0ZWRPdmVybGF5SGFzQmFja2Ryb3AiXX1dLGxvY2tQb3NpdGlvbjpbe3R5cGU6eV8sYXJnczpbImNka0Nvbm5lY3RlZE92ZXJsYXlMb2NrUG9zaXRpb24iXX1dLGZsZXhpYmxlRGltZW5zaW9uczpbe3R5cGU6eV8sYXJnczpbImNka0Nvbm5lY3RlZE92ZXJsYXlGbGV4aWJsZURpbWVuc2lvbnMiXX1dLGdyb3dBZnRlck9wZW46W3t0eXBlOnlfLGFyZ3M6WyJjZGtDb25uZWN0ZWRPdmVybGF5R3Jvd0FmdGVyT3BlbiJdfV0scHVzaDpbe3R5cGU6eV8sYXJnczpbImNka0Nvbm5lY3RlZE92ZXJsYXlQdXNoIl19XSxiYWNrZHJvcENsaWNrOlt7dHlwZTpfX31dLHBvc2l0aW9uQ2hhbmdlOlt7dHlwZTpfX31dLGF0dGFjaDpbe3R5cGU6X199XSxkZXRhY2g6W3t0eXBlOl9ffV0sb3ZlcmxheUtleWRvd246W3t0eXBlOl9ffV0sb3ZlcmxheU91dHNpZGVDbGljazpbe3R5cGU6X199XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihlTCxbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJbY2RrLWNvbm5lY3RlZC1vdmVybGF5XSwgW2Nvbm5lY3RlZC1vdmVybGF5XSwgW2Nka0Nvbm5lY3RlZE92ZXJsYXldIixleHBvcnRBczoiY2RrQ29ubmVjdGVkT3ZlcmxheSJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpKRn0se3R5cGU6VWh9LHt0eXBlOlhofSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbJEZdfV19LHt0eXBlOk16LGRlY29yYXRvcnM6W3t0eXBlOl9zfV19XX0pLHt2aWV3cG9ydE1hcmdpbjpbe3R5cGU6eV8sYXJnczpbImNka0Nvbm5lY3RlZE92ZXJsYXlWaWV3cG9ydE1hcmdpbiJdfV0sb3Blbjpbe3R5cGU6eV8sYXJnczpbImNka0Nvbm5lY3RlZE92ZXJsYXlPcGVuIl19XSxkaXNhYmxlQ2xvc2U6W3t0eXBlOnlfLGFyZ3M6WyJjZGtDb25uZWN0ZWRPdmVybGF5RGlzYWJsZUNsb3NlIl19XSxiYWNrZHJvcENsaWNrOlt7dHlwZTpfX31dLHBvc2l0aW9uQ2hhbmdlOlt7dHlwZTpfX31dLGF0dGFjaDpbe3R5cGU6X199XSxkZXRhY2g6W3t0eXBlOl9ffV0sb3ZlcmxheUtleWRvd246W3t0eXBlOl9ffV0sb3ZlcmxheU91dHNpZGVDbGljazpbe3R5cGU6X199XSxzY3JvbGxTdHJhdGVneTpbe3R5cGU6eV8sYXJnczpbImNka0Nvbm5lY3RlZE92ZXJsYXlTY3JvbGxTdHJhdGVneSJdfV0sb2Zmc2V0WDpbe3R5cGU6eV8sYXJnczpbImNka0Nvbm5lY3RlZE92ZXJsYXlPZmZzZXRYIl19XSxvZmZzZXRZOlt7dHlwZTp5XyxhcmdzOlsiY2RrQ29ubmVjdGVkT3ZlcmxheU9mZnNldFkiXX1dLGhhc0JhY2tkcm9wOlt7dHlwZTp5XyxhcmdzOlsiY2RrQ29ubmVjdGVkT3ZlcmxheUhhc0JhY2tkcm9wIl19XSxsb2NrUG9zaXRpb246W3t0eXBlOnlfLGFyZ3M6WyJjZGtDb25uZWN0ZWRPdmVybGF5TG9ja1Bvc2l0aW9uIl19XSxmbGV4aWJsZURpbWVuc2lvbnM6W3t0eXBlOnlfLGFyZ3M6WyJjZGtDb25uZWN0ZWRPdmVybGF5RmxleGlibGVEaW1lbnNpb25zIl19XSxncm93QWZ0ZXJPcGVuOlt7dHlwZTp5XyxhcmdzOlsiY2RrQ29ubmVjdGVkT3ZlcmxheUdyb3dBZnRlck9wZW4iXX1dLHB1c2g6W3t0eXBlOnlfLGFyZ3M6WyJjZGtDb25uZWN0ZWRPdmVybGF5UHVzaCJdfV0scG9zaXRpb25zOlt7dHlwZTp5XyxhcmdzOlsiY2RrQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9ucyJdfV0sb3JpZ2luOlt7dHlwZTp5XyxhcmdzOlsiY2RrQ29ubmVjdGVkT3ZlcmxheU9yaWdpbiJdfV0scG9zaXRpb25TdHJhdGVneTpbe3R5cGU6eV8sYXJnczpbImNka0Nvbm5lY3RlZE92ZXJsYXlQb3NpdGlvblN0cmF0ZWd5Il19XSx3aWR0aDpbe3R5cGU6eV8sYXJnczpbImNka0Nvbm5lY3RlZE92ZXJsYXlXaWR0aCJdfV0saGVpZ2h0Olt7dHlwZTp5XyxhcmdzOlsiY2RrQ29ubmVjdGVkT3ZlcmxheUhlaWdodCJdfV0sbWluV2lkdGg6W3t0eXBlOnlfLGFyZ3M6WyJjZGtDb25uZWN0ZWRPdmVybGF5TWluV2lkdGgiXX1dLG1pbkhlaWdodDpbe3R5cGU6eV8sYXJnczpbImNka0Nvbm5lY3RlZE92ZXJsYXlNaW5IZWlnaHQiXX1dLGJhY2tkcm9wQ2xhc3M6W3t0eXBlOnlfLGFyZ3M6WyJjZGtDb25uZWN0ZWRPdmVybGF5QmFja2Ryb3BDbGFzcyJdfV0scGFuZWxDbGFzczpbe3R5cGU6eV8sYXJnczpbImNka0Nvbm5lY3RlZE92ZXJsYXlQYW5lbENsYXNzIl19XSx0cmFuc2Zvcm1PcmlnaW5TZWxlY3Rvcjpbe3R5cGU6eV8sYXJnczpbImNka0Nvbm5lY3RlZE92ZXJsYXlUcmFuc2Zvcm1PcmlnaW5PbiJdfV19KTtjb25zdCBuTD17cHJvdmlkZTokRixkZXBzOltKRl0sdXNlRmFjdG9yeTpmdW5jdGlvbiBvTCh0KXtyZXR1cm4oKT0+dC5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oKX19OwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jbGFzcyBpTHt9aUwuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGlMKX0saUwuybVtb2Q9Wm8oe3R5cGU6aUx9KSxpTC7JtWluaj1jbyh7cHJvdmlkZXJzOltKRixuTF0saW1wb3J0czpbW3h6LHlGLGlGXSxpRl19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKGlMLHtkZWNsYXJhdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm5bZUwsdExdfSxpbXBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW3h6LHlGLGlGXX0sZXhwb3J0czpmdW5jdGlvbigpe3JldHVybltlTCx0TCxpRl19fSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihpTCxbe3R5cGU6a18sYXJnczpbe2ltcG9ydHM6W3h6LHlGLGlGXSxleHBvcnRzOltlTCx0TCxpRl0sZGVjbGFyYXRpb25zOltlTCx0TF0scHJvdmlkZXJzOltKRixuTF19XX1dLG51bGwsbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3MgYUwgZXh0ZW5kcyBGRntjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQsZSl9bmdPbkRlc3Ryb3koKXtzdXBlci5uZ09uRGVzdHJveSgpLHRoaXMuX2Z1bGxTY3JlZW5FdmVudE5hbWUmJnRoaXMuX2Z1bGxTY3JlZW5MaXN0ZW5lciYmdGhpcy5fZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLl9mdWxsU2NyZWVuRXZlbnROYW1lLHRoaXMuX2Z1bGxTY3JlZW5MaXN0ZW5lcil9X2NyZWF0ZUNvbnRhaW5lcigpe3N1cGVyLl9jcmVhdGVDb250YWluZXIoKSx0aGlzLl9hZGp1c3RQYXJlbnRGb3JGdWxsc2NyZWVuQ2hhbmdlKCksdGhpcy5fYWRkRnVsbHNjcmVlbkNoYW5nZUxpc3RlbmVyKCgoKT0+dGhpcy5fYWRqdXN0UGFyZW50Rm9yRnVsbHNjcmVlbkNoYW5nZSgpKSl9X2FkanVzdFBhcmVudEZvckZ1bGxzY3JlZW5DaGFuZ2UoKXt0aGlzLl9jb250YWluZXJFbGVtZW50JiYodGhpcy5nZXRGdWxsc2NyZWVuRWxlbWVudCgpfHx0aGlzLl9kb2N1bWVudC5ib2R5KS5hcHBlbmRDaGlsZCh0aGlzLl9jb250YWluZXJFbGVtZW50KX1fYWRkRnVsbHNjcmVlbkNoYW5nZUxpc3RlbmVyKHQpe2NvbnN0IGU9dGhpcy5fZ2V0RXZlbnROYW1lKCk7ZSYmKHRoaXMuX2Z1bGxTY3JlZW5MaXN0ZW5lciYmdGhpcy5fZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLHRoaXMuX2Z1bGxTY3JlZW5MaXN0ZW5lciksdGhpcy5fZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihlLHQpLHRoaXMuX2Z1bGxTY3JlZW5MaXN0ZW5lcj10KX1fZ2V0RXZlbnROYW1lKCl7aWYoIXRoaXMuX2Z1bGxTY3JlZW5FdmVudE5hbWUpe2NvbnN0IHQ9dGhpcy5fZG9jdW1lbnQ7dC5mdWxsc2NyZWVuRW5hYmxlZD90aGlzLl9mdWxsU2NyZWVuRXZlbnROYW1lPSJmdWxsc2NyZWVuY2hhbmdlIjp0LndlYmtpdEZ1bGxzY3JlZW5FbmFibGVkP3RoaXMuX2Z1bGxTY3JlZW5FdmVudE5hbWU9IndlYmtpdGZ1bGxzY3JlZW5jaGFuZ2UiOnQubW96RnVsbFNjcmVlbkVuYWJsZWQ/dGhpcy5fZnVsbFNjcmVlbkV2ZW50TmFtZT0ibW96ZnVsbHNjcmVlbmNoYW5nZSI6dC5tc0Z1bGxzY3JlZW5FbmFibGVkJiYodGhpcy5fZnVsbFNjcmVlbkV2ZW50TmFtZT0iTVNGdWxsc2NyZWVuQ2hhbmdlIil9cmV0dXJuIHRoaXMuX2Z1bGxTY3JlZW5FdmVudE5hbWV9Z2V0RnVsbHNjcmVlbkVsZW1lbnQoKXtjb25zdCB0PXRoaXMuX2RvY3VtZW50O3JldHVybiB0LmZ1bGxzY3JlZW5FbGVtZW50fHx0LndlYmtpdEZ1bGxzY3JlZW5FbGVtZW50fHx0Lm1vekZ1bGxTY3JlZW5FbGVtZW50fHx0Lm1zRnVsbHNjcmVlbkVsZW1lbnR8fG51bGx9fWFMLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxhTCkodXMoVUMpLHVzKGZJKSl9LGFMLsm1cHJvdj1sbyh7ZmFjdG9yeTpmdW5jdGlvbiB0KCl7cmV0dXJuIG5ldyBhTCh1cyhVQyksdXMoZkkpKX0sdG9rZW46YUwscHJvdmlkZWRJbjoicm9vdCJ9KSxhTC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltVQ119XX0se3R5cGU6Zkl9XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGFMLFt7dHlwZTpKbSxhcmdzOlt7cHJvdmlkZWRJbjoicm9vdCJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbVUNdfV19LHt0eXBlOmZJfV19KSxudWxsKTtjbGFzcyByTHt9ckwuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHJMKX0sckwuybVtb2Q9Wm8oe3R5cGU6ckx9KSxyTC7JtWluaj1jbyh7fSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihyTCxbe3R5cGU6a18sYXJnczpbe31dfV0sbnVsbCxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IHNMPW5ldyBTZXQ7bGV0IGxMO2NsYXNzIGNMe2NvbnN0cnVjdG9yKHQpe3RoaXMuX3BsYXRmb3JtPXQsdGhpcy5fbWF0Y2hNZWRpYT10aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXImJndpbmRvdy5tYXRjaE1lZGlhP3dpbmRvdy5tYXRjaE1lZGlhLmJpbmQod2luZG93KTpkTH1tYXRjaE1lZGlhKHQpe3JldHVybiB0aGlzLl9wbGF0Zm9ybS5XRUJLSVQmJihmdW5jdGlvbiBlKHQpe2lmKCFzTC5oYXModCkpdHJ5e2xMfHwobEw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKSxsTC5zZXRBdHRyaWJ1dGUoInR5cGUiLCJ0ZXh0L2NzcyIpLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobEwpKSxsTC5zaGVldCYmKGxMLnNoZWV0Lmluc2VydFJ1bGUoYEBtZWRpYSAke3R9IHsuZngtcXVlcnktdGVzdHsgfX1gLDApLHNMLmFkZCh0KSl9Y2F0Y2godCl7Y29uc29sZS5lcnJvcih0KX19KSh0KSx0aGlzLl9tYXRjaE1lZGlhKHQpfX1mdW5jdGlvbiBkTCh0KXtyZXR1cm57bWF0Y2hlczoiYWxsIj09PXR8fCIiPT09dCxtZWRpYTp0LGFkZExpc3RlbmVyOigpPT57fSxyZW1vdmVMaXN0ZW5lcjooKT0+e319fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jTC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8Y0wpKHVzKGZJKSl9LGNMLsm1cHJvdj1sbyh7ZmFjdG9yeTpmdW5jdGlvbiB0KCl7cmV0dXJuIG5ldyBjTCh1cyhmSSkpfSx0b2tlbjpjTCxwcm92aWRlZEluOiJyb290In0pLGNMLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6Zkl9XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGNMLFt7dHlwZTpKbSxhcmdzOlt7cHJvdmlkZWRJbjoicm9vdCJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpmSX1dfSksbnVsbCk7Y2xhc3MgcEx7Y29uc3RydWN0b3IodCxlKXt0aGlzLl9tZWRpYU1hdGNoZXI9dCx0aGlzLl96b25lPWUsdGhpcy5fcXVlcmllcz1uZXcgTWFwLHRoaXMuX2Rlc3Ryb3lTdWJqZWN0PW5ldyB4fW5nT25EZXN0cm95KCl7dGhpcy5fZGVzdHJveVN1YmplY3QubmV4dCgpLHRoaXMuX2Rlc3Ryb3lTdWJqZWN0LmNvbXBsZXRlKCl9aXNNYXRjaGVkKHQpe3JldHVybiBtTChjSSh0KSkuc29tZSgodD0+dGhpcy5fcmVnaXN0ZXJRdWVyeSh0KS5tcWwubWF0Y2hlcykpfW9ic2VydmUodCl7bGV0IGU9RHQobUwoY0kodCkpLm1hcCgodD0+dGhpcy5fcmVnaXN0ZXJRdWVyeSh0KS5vYnNlcnZhYmxlKSkpO3JldHVybiBlPUh0KGUucGlwZShOZSgxKSksZS5waXBlKHJuKDEpLGRlKDApKSksZS5waXBlKGh0KCh0PT57Y29uc3QgZT17bWF0Y2hlczohMSxicmVha3BvaW50czp7fX07cmV0dXJuIHQuZm9yRWFjaCgoKHttYXRjaGVzOnQscXVlcnk6bn0pPT57ZS5tYXRjaGVzPWUubWF0Y2hlc3x8dCxlLmJyZWFrcG9pbnRzW25dPXR9KSksZX0pKSl9X3JlZ2lzdGVyUXVlcnkodCl7aWYodGhpcy5fcXVlcmllcy5oYXModCkpcmV0dXJuIHRoaXMuX3F1ZXJpZXMuZ2V0KHQpO2NvbnN0IGU9dGhpcy5fbWVkaWFNYXRjaGVyLm1hdGNoTWVkaWEodCksbj17b2JzZXJ2YWJsZTpuZXcgeSgodD0+e2NvbnN0IG49ZT0+dGhpcy5fem9uZS5ydW4oKCgpPT50Lm5leHQoZSkpKTtyZXR1cm4gZS5hZGRMaXN0ZW5lcihuKSwoKT0+e2UucmVtb3ZlTGlzdGVuZXIobil9fSkpLnBpcGUoY24oZSksaHQoKCh7bWF0Y2hlczplfSk9Pih7cXVlcnk6dCxtYXRjaGVzOmV9KSkpLHVuKHRoaXMuX2Rlc3Ryb3lTdWJqZWN0KSksbXFsOmV9O3JldHVybiB0aGlzLl9xdWVyaWVzLnNldCh0LG4pLG59fWZ1bmN0aW9uIG1MKHQpe3JldHVybiB0Lm1hcCgodD0+dC5zcGxpdCgiLCIpKSkucmVkdWNlKCgodCxlKT0+dC5jb25jYXQoZSkpKS5tYXAoKHQ9PnQudHJpbSgpKSl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIHVMKHQsZSl7aWYoMSZ0KXtjb25zdCB0PUV1KCk7T3UoMCwiZGl2IiwxKSxPdSgxLCJidXR0b24iLDIpLE51KCJjbGljayIsKGZ1bmN0aW9uIGUoKXtyZXR1cm4gcmEodCksTHUoKS5hY3Rpb24oKX0pKSxNZigyKSxQdSgpLFB1KCl9aWYoMiZ0KXtjb25zdCB0PUx1KCk7SmMoMiksdmYodC5kYXRhLmFjdGlvbil9fWZ1bmN0aW9uIGZMKHQsZSl7fXBMLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxwTCkodXMoY0wpLHVzKHRDKSl9LHBMLsm1cHJvdj1sbyh7ZmFjdG9yeTpmdW5jdGlvbiB0KCl7cmV0dXJuIG5ldyBwTCh1cyhjTCksdXModEMpKX0sdG9rZW46cEwscHJvdmlkZWRJbjoicm9vdCJ9KSxwTC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmNMfSx7dHlwZTp0Q31dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIocEwsW3t0eXBlOkptLGFyZ3M6W3twcm92aWRlZEluOiJyb290In1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmNMfSx7dHlwZTp0Q31dfSksbnVsbCk7Y29uc3QgZ0w9bmV3IE5yKCJNYXRTbmFja0JhckRhdGEiKTtjbGFzcyBoTHtjb25zdHJ1Y3Rvcigpe3RoaXMucG9saXRlbmVzcz0iYXNzZXJ0aXZlIix0aGlzLmFubm91bmNlbWVudE1lc3NhZ2U9IiIsdGhpcy5kdXJhdGlvbj0wLHRoaXMuZGF0YT1udWxsLHRoaXMuaG9yaXpvbnRhbFBvc2l0aW9uPSJjZW50ZXIiLHRoaXMudmVydGljYWxQb3NpdGlvbj0iYm90dG9tIn19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NvbnN0IGJMPU1hdGgucG93KDIsMzEpLTE7Y2xhc3MgeUx7Y29uc3RydWN0b3IodCxlKXt0aGlzLl9vdmVybGF5UmVmPWUsdGhpcy5fYWZ0ZXJEaXNtaXNzZWQ9bmV3IHgsdGhpcy5fYWZ0ZXJPcGVuZWQ9bmV3IHgsdGhpcy5fb25BY3Rpb249bmV3IHgsdGhpcy5fZGlzbWlzc2VkQnlBY3Rpb249ITEsdGhpcy5jb250YWluZXJJbnN0YW5jZT10LHRoaXMub25BY3Rpb24oKS5zdWJzY3JpYmUoKCgpPT50aGlzLmRpc21pc3MoKSkpLHQuX29uRXhpdC5zdWJzY3JpYmUoKCgpPT50aGlzLl9maW5pc2hEaXNtaXNzKCkpKX1kaXNtaXNzKCl7dGhpcy5fYWZ0ZXJEaXNtaXNzZWQuY2xvc2VkfHx0aGlzLmNvbnRhaW5lckluc3RhbmNlLmV4aXQoKSxjbGVhclRpbWVvdXQodGhpcy5fZHVyYXRpb25UaW1lb3V0SWQpfWRpc21pc3NXaXRoQWN0aW9uKCl7dGhpcy5fb25BY3Rpb24uY2xvc2VkfHwodGhpcy5fZGlzbWlzc2VkQnlBY3Rpb249ITAsdGhpcy5fb25BY3Rpb24ubmV4dCgpLHRoaXMuX29uQWN0aW9uLmNvbXBsZXRlKCkpLGNsZWFyVGltZW91dCh0aGlzLl9kdXJhdGlvblRpbWVvdXRJZCl9Y2xvc2VXaXRoQWN0aW9uKCl7dGhpcy5kaXNtaXNzV2l0aEFjdGlvbigpfV9kaXNtaXNzQWZ0ZXIodCl7dGhpcy5fZHVyYXRpb25UaW1lb3V0SWQ9c2V0VGltZW91dCgoKCk9PnRoaXMuZGlzbWlzcygpKSxNYXRoLm1pbih0LGJMKSl9X29wZW4oKXt0aGlzLl9hZnRlck9wZW5lZC5jbG9zZWR8fCh0aGlzLl9hZnRlck9wZW5lZC5uZXh0KCksdGhpcy5fYWZ0ZXJPcGVuZWQuY29tcGxldGUoKSl9X2ZpbmlzaERpc21pc3MoKXt0aGlzLl9vdmVybGF5UmVmLmRpc3Bvc2UoKSx0aGlzLl9vbkFjdGlvbi5jbG9zZWR8fHRoaXMuX29uQWN0aW9uLmNvbXBsZXRlKCksdGhpcy5fYWZ0ZXJEaXNtaXNzZWQubmV4dCh7ZGlzbWlzc2VkQnlBY3Rpb246dGhpcy5fZGlzbWlzc2VkQnlBY3Rpb259KSx0aGlzLl9hZnRlckRpc21pc3NlZC5jb21wbGV0ZSgpLHRoaXMuX2Rpc21pc3NlZEJ5QWN0aW9uPSExfWFmdGVyRGlzbWlzc2VkKCl7cmV0dXJuIHRoaXMuX2FmdGVyRGlzbWlzc2VkfWFmdGVyT3BlbmVkKCl7cmV0dXJuIHRoaXMuY29udGFpbmVySW5zdGFuY2UuX29uRW50ZXJ9b25BY3Rpb24oKXtyZXR1cm4gdGhpcy5fb25BY3Rpb259fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jbGFzcyBfTHtjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuc25hY2tCYXJSZWY9dCx0aGlzLmRhdGE9ZX1hY3Rpb24oKXt0aGlzLnNuYWNrQmFyUmVmLmRpc21pc3NXaXRoQWN0aW9uKCl9Z2V0IGhhc0FjdGlvbigpe3JldHVybiEhdGhpcy5kYXRhLmFjdGlvbn19X0wuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fF9MKShNdSh5TCksTXUoZ0wpKX0sX0wuybVjbXA9VW8oe3R5cGU6X0wsc2VsZWN0b3JzOltbInNpbXBsZS1zbmFjay1iYXIiXV0saG9zdEF0dHJzOlsxLCJtYXQtc2ltcGxlLXNuYWNrYmFyIl0sZGVjbHM6Myx2YXJzOjIsY29uc3RzOltbImNsYXNzIiwibWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb24iLDQsIm5nSWYiXSxbMSwibWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb24iXSxbIm1hdC1idXR0b24iLCIiLDMsImNsaWNrIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihPdSgwLCJzcGFuIiksTWYoMSksUHUoKSxXbSgyLHVMLDMsMSwiZGl2IiwwKSksMiZlJiYoSmMoMSksdmYobi5kYXRhLm1lc3NhZ2UpLEpjKDEpLHZ1KCJuZ0lmIixuLmhhc0FjdGlvbikpfSxkaXJlY3RpdmVzOlthdixOSF0sc3R5bGVzOlsiLm1hdC1zaW1wbGUtc25hY2tiYXJ7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOmNlbnRlcjtsaW5lLWhlaWdodDoyMHB4O29wYWNpdHk6MX0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb257ZmxleC1zaHJpbms6MDttYXJnaW46LThweCAtOHB4IC04cHggOHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbiBidXR0b257bWF4LWhlaWdodDozNnB4O21pbi13aWR0aDowfVtkaXI9cnRsXSAubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb257bWFyZ2luLWxlZnQ6LThweDttYXJnaW4tcmlnaHQ6OHB4fVxuIl0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksX0wuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTp5TH0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W2dMXX1dfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihfTCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJzaW1wbGUtc25hY2stYmFyIix0ZW1wbGF0ZTonPHNwYW4+e3tkYXRhLm1lc3NhZ2V9fTwvc3Bhbj5cbjxkaXYgY2xhc3M9Im1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uIiAgKm5nSWY9Imhhc0FjdGlvbiI+XG4gIDxidXR0b24gbWF0LWJ1dHRvbiAoY2xpY2spPSJhY3Rpb24oKSI+e3tkYXRhLmFjdGlvbn19PC9idXR0b24+XG48L2Rpdj5cbicsZW5jYXBzdWxhdGlvbjpQby5Ob25lLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2gsaG9zdDp7Y2xhc3M6Im1hdC1zaW1wbGUtc25hY2tiYXIifSxzdHlsZXM6WyIubWF0LXNpbXBsZS1zbmFja2JhcntkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6Y2VudGVyO2xpbmUtaGVpZ2h0OjIwcHg7b3BhY2l0eToxfS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbntmbGV4LXNocmluazowO21hcmdpbjotOHB4IC04cHggLThweCA4cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uIGJ1dHRvbnttYXgtaGVpZ2h0OjM2cHg7bWluLXdpZHRoOjB9W2Rpcj1ydGxdIC5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbnttYXJnaW4tbGVmdDotOHB4O21hcmdpbi1yaWdodDo4cHh9XG4iXX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOnlMfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbZ0xdfV19XX0pLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3QgQ0w9e3NuYWNrQmFyU3RhdGU6S3goInN0YXRlIixbdE8oInZvaWQsIGhpZGRlbiIsJHgoe3RyYW5zZm9ybToic2NhbGUoMC44KSIsb3BhY2l0eTowfSkpLHRPKCJ2aXNpYmxlIiwkeCh7dHJhbnNmb3JtOiJzY2FsZSgxKSIsb3BhY2l0eToxfSkpLG5PKCIqID0+IHZpc2libGUiLEp4KCIxNTBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKSIpKSxuTygiKiA9PiB2b2lkLCAqID0+IGhpZGRlbiIsSngoIjc1bXMgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAxLCAxKSIsJHgoe29wYWNpdHk6MH0pKSldKX07Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NsYXNzIE1MIGV4dGVuZHMgZEZ7Y29uc3RydWN0b3IodCxlLG4sbyxpKXtzdXBlcigpLHRoaXMuX25nWm9uZT10LHRoaXMuX2VsZW1lbnRSZWY9ZSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1uLHRoaXMuX3BsYXRmb3JtPW8sdGhpcy5zbmFja0JhckNvbmZpZz1pLHRoaXMuX2Fubm91bmNlRGVsYXk9MTUwLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9vbkFubm91bmNlPW5ldyB4LHRoaXMuX29uRXhpdD1uZXcgeCx0aGlzLl9vbkVudGVyPW5ldyB4LHRoaXMuX2FuaW1hdGlvblN0YXRlPSJ2b2lkIix0aGlzLmF0dGFjaERvbVBvcnRhbD10PT4odGhpcy5fYXNzZXJ0Tm90QXR0YWNoZWQoKSx0aGlzLl9hcHBseVNuYWNrQmFyQ2xhc3NlcygpLHRoaXMuX3BvcnRhbE91dGxldC5hdHRhY2hEb21Qb3J0YWwodCkpLHRoaXMuX2xpdmU9ImFzc2VydGl2ZSIhPT1pLnBvbGl0ZW5lc3N8fGkuYW5ub3VuY2VtZW50TWVzc2FnZT8ib2ZmIj09PWkucG9saXRlbmVzcz8ib2ZmIjoicG9saXRlIjoiYXNzZXJ0aXZlIix0aGlzLl9wbGF0Zm9ybS5GSVJFRk9YJiYoInBvbGl0ZSI9PT10aGlzLl9saXZlJiYodGhpcy5fcm9sZT0ic3RhdHVzIiksImFzc2VydGl2ZSI9PT10aGlzLl9saXZlJiYodGhpcy5fcm9sZT0iYWxlcnQiKSl9YXR0YWNoQ29tcG9uZW50UG9ydGFsKHQpe3JldHVybiB0aGlzLl9hc3NlcnROb3RBdHRhY2hlZCgpLHRoaXMuX2FwcGx5U25hY2tCYXJDbGFzc2VzKCksdGhpcy5fcG9ydGFsT3V0bGV0LmF0dGFjaENvbXBvbmVudFBvcnRhbCh0KX1hdHRhY2hUZW1wbGF0ZVBvcnRhbCh0KXtyZXR1cm4gdGhpcy5fYXNzZXJ0Tm90QXR0YWNoZWQoKSx0aGlzLl9hcHBseVNuYWNrQmFyQ2xhc3NlcygpLHRoaXMuX3BvcnRhbE91dGxldC5hdHRhY2hUZW1wbGF0ZVBvcnRhbCh0KX1vbkFuaW1hdGlvbkVuZCh0KXtjb25zdHtmcm9tU3RhdGU6ZSx0b1N0YXRlOm59PXQ7aWYoKCJ2b2lkIj09PW4mJiJ2b2lkIiE9PWV8fCJoaWRkZW4iPT09bikmJnRoaXMuX2NvbXBsZXRlRXhpdCgpLCJ2aXNpYmxlIj09PW4pe2NvbnN0IHQ9dGhpcy5fb25FbnRlcjt0aGlzLl9uZ1pvbmUucnVuKCgoKT0+e3QubmV4dCgpLHQuY29tcGxldGUoKX0pKX19ZW50ZXIoKXt0aGlzLl9kZXN0cm95ZWR8fCh0aGlzLl9hbmltYXRpb25TdGF0ZT0idmlzaWJsZSIsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpLHRoaXMuX3NjcmVlblJlYWRlckFubm91bmNlKCkpfWV4aXQoKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9uU3RhdGU9ImhpZGRlbiIsdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgibWF0LWV4aXQiLCIiKSxjbGVhclRpbWVvdXQodGhpcy5fYW5ub3VuY2VUaW1lb3V0SWQpLHRoaXMuX29uRXhpdH1uZ09uRGVzdHJveSgpe3RoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLl9jb21wbGV0ZUV4aXQoKX1fY29tcGxldGVFeGl0KCl7dGhpcy5fbmdab25lLm9uTWljcm90YXNrRW1wdHkucGlwZShOZSgxKSkuc3Vic2NyaWJlKCgoKT0+e3RoaXMuX29uRXhpdC5uZXh0KCksdGhpcy5fb25FeGl0LmNvbXBsZXRlKCl9KSl9X2FwcGx5U25hY2tCYXJDbGFzc2VzKCl7Y29uc3QgdD10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsZT10aGlzLnNuYWNrQmFyQ29uZmlnLnBhbmVsQ2xhc3M7ZSYmKEFycmF5LmlzQXJyYXkoZSk/ZS5mb3JFYWNoKChlPT50LmNsYXNzTGlzdC5hZGQoZSkpKTp0LmNsYXNzTGlzdC5hZGQoZSkpLCJjZW50ZXIiPT09dGhpcy5zbmFja0JhckNvbmZpZy5ob3Jpem9udGFsUG9zaXRpb24mJnQuY2xhc3NMaXN0LmFkZCgibWF0LXNuYWNrLWJhci1jZW50ZXIiKSwidG9wIj09PXRoaXMuc25hY2tCYXJDb25maWcudmVydGljYWxQb3NpdGlvbiYmdC5jbGFzc0xpc3QuYWRkKCJtYXQtc25hY2stYmFyLXRvcCIpfV9hc3NlcnROb3RBdHRhY2hlZCgpe2lmKHRoaXMuX3BvcnRhbE91dGxldC5oYXNBdHRhY2hlZCgpJiYoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkpdGhyb3cgRXJyb3IoIkF0dGVtcHRpbmcgdG8gYXR0YWNoIHNuYWNrIGJhciBjb250ZW50IGFmdGVyIGNvbnRlbnQgaXMgYWxyZWFkeSBhdHRhY2hlZCIpfV9zY3JlZW5SZWFkZXJBbm5vdW5jZSgpe3RoaXMuX2Fubm91bmNlVGltZW91dElkfHx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCgpPT57dGhpcy5fYW5ub3VuY2VUaW1lb3V0SWQ9c2V0VGltZW91dCgoKCk9Pntjb25zdCB0PXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCJbYXJpYS1oaWRkZW5dIiksZT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcigiW2FyaWEtbGl2ZV0iKTtpZih0JiZlKXtsZXQgbj1udWxsO3RoaXMuX3BsYXRmb3JtLmlzQnJvd3NlciYmZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50JiZ0LmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpJiYobj1kb2N1bWVudC5hY3RpdmVFbGVtZW50KSx0LnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iKSxlLmFwcGVuZENoaWxkKHQpLG51bGw9PW58fG4uZm9jdXMoKSx0aGlzLl9vbkFubm91bmNlLm5leHQoKSx0aGlzLl9vbkFubm91bmNlLmNvbXBsZXRlKCl9fSksdGhpcy5fYW5ub3VuY2VEZWxheSl9KSl9fU1MLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxNTCkoTXUodEMpLE11KGNoKSxNdShIaCksTXUoZkkpLE11KGhMKSl9LE1MLsm1Y21wPVVvKHt0eXBlOk1MLHNlbGVjdG9yczpbWyJzbmFjay1iYXItY29udGFpbmVyIl1dLHZpZXdRdWVyeTpmdW5jdGlvbiB0KGUsbil7aWYoMSZlJiZXYihnRiwzKSwyJmUpe2xldCB0O1ViKHQ9WWIoKSkmJihuLl9wb3J0YWxPdXRsZXQ9dC5maXJzdCl9fSxob3N0QXR0cnM6WzEsIm1hdC1zbmFjay1iYXItY29udGFpbmVyIl0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezEmZSYmSXUoIkBzdGF0ZS5kb25lIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vbkFuaW1hdGlvbkVuZChlKX0pKSwyJmUmJlNmKCJAc3RhdGUiLG4uX2FuaW1hdGlvblN0YXRlKX0sZmVhdHVyZXM6W2dtXSxkZWNsczozLHZhcnM6Mixjb25zdHM6W1siYXJpYS1oaWRkZW4iLCJ0cnVlIl0sWyJjZGtQb3J0YWxPdXRsZXQiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKE91KDAsImRpdiIsMCksV20oMSxmTCwwLDAsIm5nLXRlbXBsYXRlIiwxKSxQdSgpLHd1KDIsImRpdiIpKSwyJmUmJihKYygyKSxObSgiYXJpYS1saXZlIixuLl9saXZlKSgicm9sZSIsbi5fcm9sZSkpfSxkaXJlY3RpdmVzOltnRl0sc3R5bGVzOlsiLm1hdC1zbmFjay1iYXItY29udGFpbmVye2JvcmRlci1yYWRpdXM6NHB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmJsb2NrO21hcmdpbjoyNHB4O21heC13aWR0aDozM3Z3O21pbi13aWR0aDozNDRweDtwYWRkaW5nOjE0cHggMTZweDttaW4taGVpZ2h0OjQ4cHg7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXJ9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXNuYWNrLWJhci1jb250YWluZXJ7Ym9yZGVyOnNvbGlkIDFweH0ubWF0LXNuYWNrLWJhci1oYW5kc2V0e3dpZHRoOjEwMCV9Lm1hdC1zbmFjay1iYXItaGFuZHNldCAubWF0LXNuYWNrLWJhci1jb250YWluZXJ7bWFyZ2luOjhweDttYXgtd2lkdGg6MTAwJTttaW4td2lkdGg6MDt3aWR0aDoxMDAlfVxuIl0sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbQ0wuc25hY2tCYXJTdGF0ZV19fSksTUwuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTp0Q30se3R5cGU6Y2h9LHt0eXBlOkhofSx7dHlwZTpmSX0se3R5cGU6aEx9XSxNTC5wcm9wRGVjb3JhdG9ycz17X3BvcnRhbE91dGxldDpbe3R5cGU6RnIsYXJnczpbZ0Yse3N0YXRpYzohMH1dfV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoTUwsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3Rvcjoic25hY2stYmFyLWNvbnRhaW5lciIsdGVtcGxhdGU6J1x4M2MhLS0gSW5pdGlhbGx5IGhvbGRzIHRoZSBzbmFjayBiYXIgY29udGVudCwgd2lsbCBiZSBlbXB0eSBhZnRlciBhbm5vdW5jaW5nIHRvIHNjcmVlbiByZWFkZXJzLiAtLVx4M2VcbjxkaXYgYXJpYS1oaWRkZW49InRydWUiPlxuICA8bmctdGVtcGxhdGUgY2RrUG9ydGFsT3V0bGV0PjwvbmctdGVtcGxhdGU+XG48L2Rpdj5cblxuXHgzYyEtLSBXaWxsIHJlY2VpdmUgdGhlIHNuYWNrIGJhciBjb250ZW50IGZyb20gdGhlIG5vbi1saXZlIGRpdiwgbW92ZSB3aWxsIGhhcHBlbiBhIHNob3J0IGRlbGF5IGFmdGVyIG9wZW5pbmcgLS1ceDNlXG48ZGl2IFthdHRyLmFyaWEtbGl2ZV09Il9saXZlIiBbYXR0ci5yb2xlXT0iX3JvbGUiPjwvZGl2PlxuJyxjaGFuZ2VEZXRlY3Rpb246eG8uRGVmYXVsdCxlbmNhcHN1bGF0aW9uOlBvLk5vbmUsYW5pbWF0aW9uczpbQ0wuc25hY2tCYXJTdGF0ZV0saG9zdDp7Y2xhc3M6Im1hdC1zbmFjay1iYXItY29udGFpbmVyIiwiW0BzdGF0ZV0iOiJfYW5pbWF0aW9uU3RhdGUiLCIoQHN0YXRlLmRvbmUpIjoib25BbmltYXRpb25FbmQoJGV2ZW50KSJ9LHN0eWxlczpbIi5tYXQtc25hY2stYmFyLWNvbnRhaW5lcntib3JkZXItcmFkaXVzOjRweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpibG9jazttYXJnaW46MjRweDttYXgtd2lkdGg6MzN2dzttaW4td2lkdGg6MzQ0cHg7cGFkZGluZzoxNHB4IDE2cHg7bWluLWhlaWdodDo0OHB4O3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zbmFjay1iYXItY29udGFpbmVye2JvcmRlcjpzb2xpZCAxcHh9Lm1hdC1zbmFjay1iYXItaGFuZHNldHt3aWR0aDoxMDAlfS5tYXQtc25hY2stYmFyLWhhbmRzZXQgLm1hdC1zbmFjay1iYXItY29udGFpbmVye21hcmdpbjo4cHg7bWF4LXdpZHRoOjEwMCU7bWluLXdpZHRoOjA7d2lkdGg6MTAwJX1cbiJdfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6dEN9LHt0eXBlOmNofSx7dHlwZTpIaH0se3R5cGU6Zkl9LHt0eXBlOmhMfV19KSx7X3BvcnRhbE91dGxldDpbe3R5cGU6RnIsYXJnczpbZ0Yse3N0YXRpYzohMH1dfV19KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIHZMe312TC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8dkwpfSx2TC7JtW1vZD1abyh7dHlwZTp2TH0pLHZMLsm1aW5qPWNvKHtpbXBvcnRzOltbaUwseUYsQnYsekgsVHpdLFR6XX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8odkwse2RlY2xhcmF0aW9uczpmdW5jdGlvbigpe3JldHVybltNTCxfTF19LGltcG9ydHM6ZnVuY3Rpb24oKXtyZXR1cm5baUwseUYsQnYsekgsVHpdfSxleHBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW01MLFR6XX19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHZMLFt7dHlwZTprXyxhcmdzOlt7aW1wb3J0czpbaUwseUYsQnYsekgsVHpdLGV4cG9ydHM6W01MLFR6XSxkZWNsYXJhdGlvbnM6W01MLF9MXSxlbnRyeUNvbXBvbmVudHM6W01MLF9MXX1dfV0sbnVsbCxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IHhMPW5ldyBOcigibWF0LXNuYWNrLWJhci1kZWZhdWx0LW9wdGlvbnMiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uIE9MKCl7cmV0dXJuIG5ldyBoTH19KTtjbGFzcyBQTHtjb25zdHJ1Y3Rvcih0LGUsbixvLGksYSl7dGhpcy5fb3ZlcmxheT10LHRoaXMuX2xpdmU9ZSx0aGlzLl9pbmplY3Rvcj1uLHRoaXMuX2JyZWFrcG9pbnRPYnNlcnZlcj1vLHRoaXMuX3BhcmVudFNuYWNrQmFyPWksdGhpcy5fZGVmYXVsdENvbmZpZz1hLHRoaXMuX3NuYWNrQmFyUmVmQXRUaGlzTGV2ZWw9bnVsbCx0aGlzLnNpbXBsZVNuYWNrQmFyQ29tcG9uZW50PV9MLHRoaXMuc25hY2tCYXJDb250YWluZXJDb21wb25lbnQ9TUwsdGhpcy5oYW5kc2V0Q3NzQ2xhc3M9Im1hdC1zbmFjay1iYXItaGFuZHNldCJ9Z2V0IF9vcGVuZWRTbmFja0JhclJlZigpe2NvbnN0IHQ9dGhpcy5fcGFyZW50U25hY2tCYXI7cmV0dXJuIHQ/dC5fb3BlbmVkU25hY2tCYXJSZWY6dGhpcy5fc25hY2tCYXJSZWZBdFRoaXNMZXZlbH1zZXQgX29wZW5lZFNuYWNrQmFyUmVmKHQpe3RoaXMuX3BhcmVudFNuYWNrQmFyP3RoaXMuX3BhcmVudFNuYWNrQmFyLl9vcGVuZWRTbmFja0JhclJlZj10OnRoaXMuX3NuYWNrQmFyUmVmQXRUaGlzTGV2ZWw9dH1vcGVuRnJvbUNvbXBvbmVudCh0LGUpe3JldHVybiB0aGlzLl9hdHRhY2godCxlKX1vcGVuRnJvbVRlbXBsYXRlKHQsZSl7cmV0dXJuIHRoaXMuX2F0dGFjaCh0LGUpfW9wZW4odCxlPSIiLG4pe2NvbnN0IG89T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHRoaXMuX2RlZmF1bHRDb25maWcpLG4pO3JldHVybiBvLmRhdGE9e21lc3NhZ2U6dCxhY3Rpb246ZX0sby5hbm5vdW5jZW1lbnRNZXNzYWdlPT09dCYmKG8uYW5ub3VuY2VtZW50TWVzc2FnZT12b2lkIDApLHRoaXMub3BlbkZyb21Db21wb25lbnQodGhpcy5zaW1wbGVTbmFja0JhckNvbXBvbmVudCxvKX1kaXNtaXNzKCl7dGhpcy5fb3BlbmVkU25hY2tCYXJSZWYmJnRoaXMuX29wZW5lZFNuYWNrQmFyUmVmLmRpc21pc3MoKX1uZ09uRGVzdHJveSgpe3RoaXMuX3NuYWNrQmFyUmVmQXRUaGlzTGV2ZWwmJnRoaXMuX3NuYWNrQmFyUmVmQXRUaGlzTGV2ZWwuZGlzbWlzcygpfV9hdHRhY2hTbmFja0JhckNvbnRhaW5lcih0LGUpe2NvbnN0IG49UXAuY3JlYXRlKHtwYXJlbnQ6ZSYmZS52aWV3Q29udGFpbmVyUmVmJiZlLnZpZXdDb250YWluZXJSZWYuaW5qZWN0b3J8fHRoaXMuX2luamVjdG9yLHByb3ZpZGVyczpbe3Byb3ZpZGU6aEwsdXNlVmFsdWU6ZX1dfSksbz1uZXcgc0YodGhpcy5zbmFja0JhckNvbnRhaW5lckNvbXBvbmVudCxlLnZpZXdDb250YWluZXJSZWYsbiksaT10LmF0dGFjaChvKTtyZXR1cm4gaS5pbnN0YW5jZS5zbmFja0JhckNvbmZpZz1lLGkuaW5zdGFuY2V9X2F0dGFjaCh0LGUpe2NvbnN0IG49T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sbmV3IGhMKSx0aGlzLl9kZWZhdWx0Q29uZmlnKSxlKSxvPXRoaXMuX2NyZWF0ZU92ZXJsYXkobiksaT10aGlzLl9hdHRhY2hTbmFja0JhckNvbnRhaW5lcihvLG4pLGE9bmV3IHlMKGksbyk7aWYodCBpbnN0YW5jZW9mIFVoKXtjb25zdCBlPW5ldyBsRih0LG51bGwseyRpbXBsaWNpdDpuLmRhdGEsc25hY2tCYXJSZWY6YX0pO2EuaW5zdGFuY2U9aS5hdHRhY2hUZW1wbGF0ZVBvcnRhbChlKX1lbHNle2NvbnN0IGU9dGhpcy5fY3JlYXRlSW5qZWN0b3IobixhKSxvPW5ldyBzRih0LHZvaWQgMCxlKSxyPWkuYXR0YWNoQ29tcG9uZW50UG9ydGFsKG8pO2EuaW5zdGFuY2U9ci5pbnN0YW5jZX1yZXR1cm4gdGhpcy5fYnJlYWtwb2ludE9ic2VydmVyLm9ic2VydmUoIihtYXgtd2lkdGg6IDU5OS45OHB4KSBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkiKS5waXBlKHVuKG8uZGV0YWNobWVudHMoKSkpLnN1YnNjcmliZSgodD0+e2NvbnN0IGU9by5vdmVybGF5RWxlbWVudC5jbGFzc0xpc3Q7dC5tYXRjaGVzP2UuYWRkKHRoaXMuaGFuZHNldENzc0NsYXNzKTplLnJlbW92ZSh0aGlzLmhhbmRzZXRDc3NDbGFzcyl9KSksbi5hbm5vdW5jZW1lbnRNZXNzYWdlJiZpLl9vbkFubm91bmNlLnN1YnNjcmliZSgoKCk9Pnt0aGlzLl9saXZlLmFubm91bmNlKG4uYW5ub3VuY2VtZW50TWVzc2FnZSxuLnBvbGl0ZW5lc3MpfSkpLHRoaXMuX2FuaW1hdGVTbmFja0JhcihhLG4pLHRoaXMuX29wZW5lZFNuYWNrQmFyUmVmPWEsdGhpcy5fb3BlbmVkU25hY2tCYXJSZWZ9X2FuaW1hdGVTbmFja0Jhcih0LGUpe3QuYWZ0ZXJEaXNtaXNzZWQoKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5fb3BlbmVkU25hY2tCYXJSZWY9PXQmJih0aGlzLl9vcGVuZWRTbmFja0JhclJlZj1udWxsKSxlLmFubm91bmNlbWVudE1lc3NhZ2UmJnRoaXMuX2xpdmUuY2xlYXIoKX0pKSx0aGlzLl9vcGVuZWRTbmFja0JhclJlZj8odGhpcy5fb3BlbmVkU25hY2tCYXJSZWYuYWZ0ZXJEaXNtaXNzZWQoKS5zdWJzY3JpYmUoKCgpPT57dC5jb250YWluZXJJbnN0YW5jZS5lbnRlcigpfSkpLHRoaXMuX29wZW5lZFNuYWNrQmFyUmVmLmRpc21pc3MoKSk6dC5jb250YWluZXJJbnN0YW5jZS5lbnRlcigpLGUuZHVyYXRpb24mJmUuZHVyYXRpb24+MCYmdC5hZnRlck9wZW5lZCgpLnN1YnNjcmliZSgoKCk9PnQuX2Rpc21pc3NBZnRlcihlLmR1cmF0aW9uKSkpfV9jcmVhdGVPdmVybGF5KHQpe2NvbnN0IGU9bmV3IFNGO2UuZGlyZWN0aW9uPXQuZGlyZWN0aW9uO2xldCBuPXRoaXMuX292ZXJsYXkucG9zaXRpb24oKS5nbG9iYWwoKTtjb25zdCBvPSJydGwiPT09dC5kaXJlY3Rpb24saT0ibGVmdCI9PT10Lmhvcml6b250YWxQb3NpdGlvbnx8InN0YXJ0Ij09PXQuaG9yaXpvbnRhbFBvc2l0aW9uJiYhb3x8ImVuZCI9PT10Lmhvcml6b250YWxQb3NpdGlvbiYmbyxhPSFpJiYiY2VudGVyIiE9PXQuaG9yaXpvbnRhbFBvc2l0aW9uO3JldHVybiBpP24ubGVmdCgiMCIpOmE/bi5yaWdodCgiMCIpOm4uY2VudGVySG9yaXpvbnRhbGx5KCksInRvcCI9PT10LnZlcnRpY2FsUG9zaXRpb24/bi50b3AoIjAiKTpuLmJvdHRvbSgiMCIpLGUucG9zaXRpb25TdHJhdGVneT1uLHRoaXMuX292ZXJsYXkuY3JlYXRlKGUpfV9jcmVhdGVJbmplY3Rvcih0LGUpe3JldHVybiBRcC5jcmVhdGUoe3BhcmVudDp0JiZ0LnZpZXdDb250YWluZXJSZWYmJnQudmlld0NvbnRhaW5lclJlZi5pbmplY3Rvcnx8dGhpcy5faW5qZWN0b3IscHJvdmlkZXJzOlt7cHJvdmlkZTp5TCx1c2VWYWx1ZTplfSx7cHJvdmlkZTpnTCx1c2VWYWx1ZTp0LmRhdGF9XX0pfX1QTC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8UEwpKHVzKEpGKSx1cyhheiksdXMoUXApLHVzKHBMKSx1cyhQTCwxMiksdXMoeEwpKX0sUEwuybVwcm92PWxvKHtmYWN0b3J5OmZ1bmN0aW9uIHQoKXtyZXR1cm4gbmV3IFBMKHVzKEpGKSx1cyhheiksdXMoSXApLHVzKHBMKSx1cyhQTCwxMiksdXMoeEwpKX0sdG9rZW46UEwscHJvdmlkZWRJbjp2TH0pLFBMLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6SkZ9LHt0eXBlOmF6fSx7dHlwZTpRcH0se3R5cGU6cEx9LHt0eXBlOlBMLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTpNc31dfSx7dHlwZTpoTCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOlt4TF19XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoUEwsW3t0eXBlOkptLGFyZ3M6W3twcm92aWRlZEluOnZMfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6SkZ9LHt0eXBlOmF6fSx7dHlwZTpRcH0se3R5cGU6cEx9LHt0eXBlOlBMLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTpNc31dfSx7dHlwZTpoTCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOlt4TF19XX1dfSksbnVsbCk7Y29uc3Qgd0w9L1tcXF4kLiorPygpW1xde318XS9nLGtMPSJcXHUwMDAwLVxcdTAwMjBcXHUwMDdmLVxcdTAwOWYiLFNMPW5ldyBSZWdFeHAoIig/OlthLXpBLVpdW2EtekEtWjAtOSsuLV17Mix9OlxcL1xcL3xkYXRhOnx3d3dcXC4pW15cXHMiK2tMKyciXXsyLH1bXlxccycra0wrIlwiJyl9XFxdLDo7LiE/XSIsImd1Iik7ZnVuY3Rpb24gREwodCl7cmV0dXJuKGZ1bmN0aW9uIGUodCxuKXtuLmZsYWdzLmluY2x1ZGVzKCJnIil8fChuPW5ldyBSZWdFeHAobixuLmZsYWdzKyJnIikpO2NvbnN0IG89W107bGV0IGk9MDtmb3IoY29uc3QgZSBvZiB0Lm1hdGNoQWxsKG4pKXtjb25zdCBuPWUuaW5kZXgsYT1lWzBdO24+aSYmby5wdXNoKHtpbmRleDppLHRleHQ6dC5zdWJzdHJpbmcoaSxuKSxtYXRjaGVzUmVnZXg6ITF9KSxvLnB1c2goe2luZGV4Om4sdGV4dDphLG1hdGNoZXNSZWdleDohMH0pLGk9bithLmxlbmd0aH1yZXR1cm4gdC5sZW5ndGg+aSYmby5wdXNoKHtpbmRleDppLHRleHQ6dC5zdWJzdHJpbmcoaSx0Lmxlbmd0aCksbWF0Y2hlc1JlZ2V4OiExfSksb30pKHQsU0wpLm1hcCgoKHttYXRjaGVzUmVnZXg6dCx0ZXh0OmV9KT0+KHtpc1VSTDp0LHRleHQ6ZX0pKSl9ZnVuY3Rpb24gRUwodCxlKXtpZigxJnQmJihrdSgwKSxNZigxKSxTdSgpKSwyJnQpe2NvbnN0IHQ9THUoKS4kaW1wbGljaXQ7SmMoMSkseGYoIiAiLHQudGV4dCwiICIpfX1mdW5jdGlvbiBBTCh0LGUpe2lmKDEmdCYmKE91KDAsImEiLDcpLE1mKDEpLFB1KCkpLDImdCl7Y29uc3QgdD1MdSgpLiRpbXBsaWNpdDtVdSgiaHJlZiIsdC50ZXh0LE9sKSxKYygxKSx2Zih0LnRleHQpfX1mdW5jdGlvbiBSTCh0LGUpe2lmKDEmdCYmKGt1KDApLFdtKDEsRUwsMiwxLCJuZy1jb250YWluZXIiLDUpLFdtKDIsQUwsMiwyLCJuZy10ZW1wbGF0ZSIsbnVsbCw2LEtiKSxTdSgpKSwyJnQpe2NvbnN0IHQ9ZS4kaW1wbGljaXQsbj1HbSgzKTtKYygxKSx2dSgibmdJZiIsIXQuaXNVUkwpKCJuZ0lmRWxzZSIsbil9fWZ1bmN0aW9uIFRMKHQsZSl7aWYoMSZ0KXtjb25zdCB0PUV1KCk7T3UoMCwiYnV0dG9uIiw4KSxOdSgiY2xpY2siLChmdW5jdGlvbiBlKCl7cmV0dXJuIHJhKHQpLEx1KCkub25BY3Rpb25CdXR0b25DbGlja2VkKCl9KSksTWYoMSksUHUoKX1pZigyJnQpe2NvbnN0IHQ9THUoKTtKYygxKSx4ZigiICIsdC5hbGVydC5mb2xsb3d1cEFjdGlvbi5sb2NhbGl6ZWRMYWJlbCwiICIpfX1jbGFzcyBOTHtjb25zdHJ1Y3Rvcih0LGUsbil7dGhpcy5zbmFja0JhclJlZj10LHRoaXMudW5rbm93bkRhdGE9ZSx0aGlzLnN0b3JlPW4sdGhpcy5zcGxpdEJ5VVJMPURMLHRoaXMuYWxlcnQ9ZX1vbkFjdGlvbkJ1dHRvbkNsaWNrZWQoKXtyZXR1cm4gclIodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt0aGlzLnNuYWNrQmFyUmVmLmRpc21pc3MoKTtjb25zdCB0PXlpZWxkIHRoaXMuYWxlcnQuZm9sbG93dXBBY3Rpb24uZ2V0Rm9sbG93dXBBY3Rpb24odGhpcy5zdG9yZSk7dGhpcy5zdG9yZS5kaXNwYXRjaCh0KX0pKX1vbkNsb3NlQnV0dG9uQ2xpY2tlZCgpe3RoaXMuc25hY2tCYXJSZWYuZGlzbWlzcygpfX1OTC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8TkwpKE11KHlMKSxNdShnTCksTXUoRWspKX0sTkwuybVjbXA9VW8oe3R5cGU6Tkwsc2VsZWN0b3JzOltbImFsZXJ0LWRpc3BsYXktc25hY2tiYXIiXV0sZGVjbHM6Nix2YXJzOjIsY29uc3RzOmZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIHQ9InVuZGVmaW5lZCIhPXR5cGVvZiBuZ0kxOG5DbG9zdXJlTW9kZSYmbmdJMThuQ2xvc3VyZU1vZGU/Z29vZy5nZXRNc2coIkRpc21pc3MiKTokbG9jYWxpemVgOkEgYnV0dG9uIHRvIGNsb3NlIHRoZSBzbmFja2JhciBtZXNzYWdl4pCfZWE0ZDlmZTYxNDIwYTNmY2U4MWNmNTRjNGM2MTVlM2MxOWM2NDZhNuKQnzE1MzYwODc1MTk3NDM3MDczNjI6RGlzbWlzc2AsW1sxLCJtZXNzYWdlIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjb250cm9scyJdLFsibWF0LWJ1dHRvbiIsIiIsImNsYXNzIiwiZm9sbG93dXAtYnV0dG9uIiwzLCJjbGljayIsNCwibmdJZiJdLFsibWF0LWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLHQsMSwiZGlzbWlzcy1idXR0b24iLDMsImNsaWNrIl0sWzQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsibGlua1BpZWNlIiwiIl0sWyJyZWwiLCJub3JlZmVycmVyIG5vb3BlbmVyIiwidGFyZ2V0IiwiX2JsYW5rIiwzLCJocmVmIl0sWyJtYXQtYnV0dG9uIiwiIiwxLCJmb2xsb3d1cC1idXR0b24iLDMsImNsaWNrIl1dfSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoT3UoMCwiZGl2IiwwKSxXbSgxLFJMLDQsMiwibmctY29udGFpbmVyIiwxKSxQdSgpLE91KDIsImRpdiIsMiksV20oMyxUTCwyLDEsImJ1dHRvbiIsMyksT3UoNCwiYnV0dG9uIiw0KSxOdSgiY2xpY2siLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub25DbG9zZUJ1dHRvbkNsaWNrZWQoKX0pKSxNZig1LCIgRGlzbWlzcyAiKSxQdSgpLFB1KCkpLDImZSYmKEpjKDEpLHZ1KCJuZ0Zvck9mIixuLnNwbGl0QnlVUkwobi5hbGVydC5sb2NhbGl6ZWRNZXNzYWdlKSksSmMoMiksdnUoIm5nSWYiLG4uYWxlcnQuZm9sbG93dXBBY3Rpb24pKX0sZGlyZWN0aXZlczpbb3YsYXYsTkhdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwfS5tZXNzYWdlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDthbGlnbi1zZWxmOmNlbnRlcjttYXJnaW46NXB4IDA7d29yZC1icmVhazpicmVhay13b3JkfS5tZXNzYWdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGFbX25nY29udGVudC0lQ09NUCVde2NvbG9yOmluaGVyaXR9LmNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7bWFyZ2luLWxlZnQ6YXV0b31idXR0b25bX25nY29udGVudC0lQ09NUCVde3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoTkwsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoiYWxlcnQtZGlzcGxheS1zbmFja2JhciIsdGVtcGxhdGVVcmw6Ii4vYWxlcnRfZGlzcGxheV9zbmFja2Jhcl9jb250YWluZXIubmcuaHRtbCIsc3R5bGVVcmxzOlsiLi9hbGVydF9kaXNwbGF5X3NuYWNrYmFyX2NvbnRhaW5lci5jc3MiXSxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6eUx9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltnTF19XX0se3R5cGU6RWt9XX0pLG51bGwpO2NsYXNzIElMe2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5zdG9yZT10LHRoaXMuc25hY2tCYXI9ZSx0aGlzLm5nVW5zdWJzY3JpYmU9bmV3IHh9bmdPbkluaXQoKXt0aGlzLnN0b3JlLnNlbGVjdChlUikucGlwZSh1bih0aGlzLm5nVW5zdWJzY3JpYmUpLEd0KCh0PT5Cb29sZWFuKHQpKSkpLnN1YnNjcmliZSgodD0+e3RoaXMuc2hvd0FsZXJ0KHQpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKSx0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKX1zaG93QWxlcnQodCl7dGhpcy5zbmFja0Jhci5vcGVuRnJvbUNvbXBvbmVudChOTCx7ZHVyYXRpb246NWUzLGhvcml6b250YWxQb3NpdGlvbjoic3RhcnQiLHZlcnRpY2FsUG9zaXRpb246ImJvdHRvbSIsZGF0YTp0fSl9fUlMLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxJTCkoTXUoRWspLE11KFBMKSl9LElMLsm1Y21wPVVvKHt0eXBlOklMLHNlbGVjdG9yczpbWyJhbGVydC1zbmFja2JhciJdXSxkZWNsczowLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7fSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKElMLFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6ImFsZXJ0LXNuYWNrYmFyIix0ZW1wbGF0ZToiIixjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6RWt9LHt0eXBlOlBMfV19KSxudWxsKTtjbGFzcyB6THt9ekwuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHpMKX0sekwuybVtb2Q9Wm8oe3R5cGU6ekx9KSx6TC7JtWluaj1jbyh7aW1wb3J0czpbW0J2LHpILHZMXV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKHpMLHtkZWNsYXJhdGlvbnM6W0lMLE5MXSxpbXBvcnRzOltCdix6SCx2TF0sZXhwb3J0czpbSUxdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYih6TCxbe3R5cGU6a18sYXJnczpbe2RlY2xhcmF0aW9uczpbSUwsTkxdLGV4cG9ydHM6W0lMXSxpbXBvcnRzOltCdix6SCx2TF0sZW50cnlDb21wb25lbnRzOltOTF19XX1dLG51bGwsbnVsbCk7Y2xhc3MgSEx7fUhMLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxITCl9LEhMLsm1bW9kPVpvKHt0eXBlOkhMfSksSEwuybVpbmo9Y28oe2ltcG9ydHM6W1t2QSx6TCxpUy5mb3JGZWF0dXJlKHRSLCROKSxMUy5mb3JGZWF0dXJlKFtKTl0pXV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKEhMLHtpbXBvcnRzOlt2QSx6TCxvUyxGU119KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEhMLFt7dHlwZTprXyxhcmdzOlt7aW1wb3J0czpbdkEsekwsaVMuZm9yRmVhdHVyZSh0UiwkTiksTFMuZm9yRmVhdHVyZShbSk5dKV19XX1dLG51bGwsbnVsbCk7Y29uc3QgRkw9WyIqIixbWyJtYXQtdG9vbGJhci1yb3ciXV1dLExMPUl6KGNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuX2VsZW1lbnRSZWY9dH19KTtjbGFzcyBCTHt9QkwuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEJMKX0sQkwuybVkaXI9Sm8oe3R5cGU6Qkwsc2VsZWN0b3JzOltbIm1hdC10b29sYmFyLXJvdyJdXSxob3N0QXR0cnM6WzEsIm1hdC10b29sYmFyLXJvdyJdLGV4cG9ydEFzOlsibWF0VG9vbGJhclJvdyJdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihCTCxbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJtYXQtdG9vbGJhci1yb3ciLGV4cG9ydEFzOiJtYXRUb29sYmFyUm93Iixob3N0OntjbGFzczoibWF0LXRvb2xiYXItcm93In19XX1dLG51bGwsbnVsbCk7Y2xhc3MgVkwgZXh0ZW5kcyBMTHtjb25zdHJ1Y3Rvcih0LGUsbil7c3VwZXIodCksdGhpcy5fcGxhdGZvcm09ZSx0aGlzLl9kb2N1bWVudD1ufW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX3BsYXRmb3JtLmlzQnJvd3NlciYmKHRoaXMuX2NoZWNrVG9vbGJhck1peGVkTW9kZXMoKSx0aGlzLl90b29sYmFyUm93cy5jaGFuZ2VzLnN1YnNjcmliZSgoKCk9PnRoaXMuX2NoZWNrVG9vbGJhck1peGVkTW9kZXMoKSkpKX1fY2hlY2tUb29sYmFyTWl4ZWRNb2Rlcygpe3RoaXMuX3Rvb2xiYXJSb3dzLmxlbmd0aCYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZBcnJheS5mcm9tKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jaGlsZE5vZGVzKS5maWx0ZXIoKHQ9PiEodC5jbGFzc0xpc3QmJnQuY2xhc3NMaXN0LmNvbnRhaW5zKCJtYXQtdG9vbGJhci1yb3ciKSkpKS5maWx0ZXIoKHQ9PnQubm9kZVR5cGUhPT0odGhpcy5fZG9jdW1lbnQ/dGhpcy5fZG9jdW1lbnQuQ09NTUVOVF9OT0RFOjgpKSkuc29tZSgodD0+ISghdC50ZXh0Q29udGVudHx8IXQudGV4dENvbnRlbnQudHJpbSgpKSkpJiYoZnVuY3Rpb24gdCgpe3Rocm93IEVycm9yKCJNYXRUb29sYmFyOiBBdHRlbXB0aW5nIHRvIGNvbWJpbmUgZGlmZmVyZW50IHRvb2xiYXIgbW9kZXMuIEVpdGhlciBzcGVjaWZ5IG11bHRpcGxlIGA8bWF0LXRvb2xiYXItcm93PmAgZWxlbWVudHMgZXhwbGljaXRseSBvciBqdXN0IHBsYWNlIGNvbnRlbnQgaW5zaWRlIG9mIGEgYDxtYXQtdG9vbGJhcj5gIGZvciBhIHNpbmdsZSByb3cuIil9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLykoKX19VkwuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFZMKShNdShjaCksTXUoZkkpLE11KFVDKSl9LFZMLsm1Y21wPVVvKHt0eXBlOlZMLHNlbGVjdG9yczpbWyJtYXQtdG9vbGJhciJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbiB0KGUsbixvKXtpZigxJmUmJkdiKG8sQkwsMSksMiZlKXtsZXQgdDtVYih0PVliKCkpJiYobi5fdG9vbGJhclJvd3M9dCl9fSxob3N0QXR0cnM6WzEsIm1hdC10b29sYmFyIl0saG9zdFZhcnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezImZSYmYWYoIm1hdC10b29sYmFyLW11bHRpcGxlLXJvd3MiLG4uX3Rvb2xiYXJSb3dzLmxlbmd0aD4wKSgibWF0LXRvb2xiYXItc2luZ2xlLXJvdyIsMD09PW4uX3Rvb2xiYXJSb3dzLmxlbmd0aCl9LGlucHV0czp7Y29sb3I6ImNvbG9yIn0sZXhwb3J0QXM6WyJtYXRUb29sYmFyIl0sZmVhdHVyZXM6W2dtXSxuZ0NvbnRlbnRTZWxlY3RvcnM6WyIqIiwibWF0LXRvb2xiYXItcm93Il0sZGVjbHM6Mix2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKFZ1KEZMKSxqdSgwKSxqdSgxLDEpKX0sc3R5bGVzOlsiLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXRvb2xiYXJ7b3V0bGluZTpzb2xpZCAxcHh9Lm1hdC10b29sYmFyLXJvdywubWF0LXRvb2xiYXItc2luZ2xlLXJvd3tkaXNwbGF5OmZsZXg7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6MCAxNnB4O3dpZHRoOjEwMCU7ZmxleC1kaXJlY3Rpb246cm93O2FsaWduLWl0ZW1zOmNlbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1hdC10b29sYmFyLW11bHRpcGxlLXJvd3N7ZGlzcGxheTpmbGV4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47d2lkdGg6MTAwJX1cbiJdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLFZMLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6Y2h9LHt0eXBlOmZJfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbVUNdfV19XSxWTC5wcm9wRGVjb3JhdG9ycz17X3Rvb2xiYXJSb3dzOlt7dHlwZTp6cixhcmdzOltCTCx7ZGVzY2VuZGFudHM6ITB9XX1dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFZMLFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6Im1hdC10b29sYmFyIixleHBvcnRBczoibWF0VG9vbGJhciIsdGVtcGxhdGU6JzxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjxuZy1jb250ZW50IHNlbGVjdD0ibWF0LXRvb2xiYXItcm93Ij48L25nLWNvbnRlbnQ+XG4nLGlucHV0czpbImNvbG9yIl0saG9zdDp7Y2xhc3M6Im1hdC10b29sYmFyIiwiW2NsYXNzLm1hdC10b29sYmFyLW11bHRpcGxlLXJvd3NdIjoiX3Rvb2xiYXJSb3dzLmxlbmd0aCA+IDAiLCJbY2xhc3MubWF0LXRvb2xiYXItc2luZ2xlLXJvd10iOiJfdG9vbGJhclJvd3MubGVuZ3RoID09PSAwIn0sY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaCxlbmNhcHN1bGF0aW9uOlBvLk5vbmUsc3R5bGVzOlsiLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXRvb2xiYXJ7b3V0bGluZTpzb2xpZCAxcHh9Lm1hdC10b29sYmFyLXJvdywubWF0LXRvb2xiYXItc2luZ2xlLXJvd3tkaXNwbGF5OmZsZXg7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6MCAxNnB4O3dpZHRoOjEwMCU7ZmxleC1kaXJlY3Rpb246cm93O2FsaWduLWl0ZW1zOmNlbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1hdC10b29sYmFyLW11bHRpcGxlLXJvd3N7ZGlzcGxheTpmbGV4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47d2lkdGg6MTAwJX1cbiJdfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Y2h9LHt0eXBlOmZJfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbVUNdfV19XX0pLHtfdG9vbGJhclJvd3M6W3t0eXBlOnpyLGFyZ3M6W0JMLHtkZXNjZW5kYW50czohMH1dfV19KTtjbGFzcyBqTHt9ZnVuY3Rpb24gVUwodCxlKXsxJnQmJmp1KDApfWpMLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxqTCl9LGpMLsm1bW9kPVpvKHt0eXBlOmpMfSksakwuybVpbmo9Y28oe2ltcG9ydHM6W1tUel0sVHpdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhqTCx7ZGVjbGFyYXRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuW1ZMLEJMXX0saW1wb3J0czpmdW5jdGlvbigpe3JldHVybltUel19LGV4cG9ydHM6ZnVuY3Rpb24oKXtyZXR1cm5bVkwsQkwsVHpdfX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoakwsW3t0eXBlOmtfLGFyZ3M6W3tpbXBvcnRzOltUel0sZXhwb3J0czpbVkwsQkwsVHpdLGRlY2xhcmF0aW9uczpbVkwsQkxdfV19XSxudWxsLG51bGwpO2NvbnN0IFdMPVsiKiJdO2Z1bmN0aW9uIEdMKHQsZSl7fWNvbnN0IFlMPWZ1bmN0aW9uKHQpe3JldHVybnthbmltYXRpb25EdXJhdGlvbjp0fX0scUw9ZnVuY3Rpb24odCxlKXtyZXR1cm57dmFsdWU6dCxwYXJhbXM6ZX19LFpMPVsidGFiQm9keVdyYXBwZXIiXSxYTD1bInRhYkhlYWRlciJdO2Z1bmN0aW9uIEtMKHQsZSl7fWZ1bmN0aW9uIEpMKHQsZSl7MSZ0JiZXbSgwLEtMLDAsMCwibmctdGVtcGxhdGUiLDkpLDImdCYmdnUoImNka1BvcnRhbE91dGxldCIsTHUoKS4kaW1wbGljaXQudGVtcGxhdGVMYWJlbCl9ZnVuY3Rpb24gUUwodCxlKXsxJnQmJk1mKDApLDImdCYmdmYoTHUoKS4kaW1wbGljaXQudGV4dExhYmVsKX1mdW5jdGlvbiAkTCh0LGUpe2lmKDEmdCl7Y29uc3QgdD1FdSgpO091KDAsImRpdiIsNiksTnUoImNsaWNrIiwoZnVuY3Rpb24gbigpe3JhKHQpO2NvbnN0IG89ZS4kaW1wbGljaXQsaT1lLmluZGV4LGE9THUoKSxyPUdtKDEpO3JldHVybiBhLl9oYW5kbGVDbGljayhvLHIsaSl9KSkoImNka0ZvY3VzQ2hhbmdlIiwoZnVuY3Rpb24gbihvKXtyYSh0KTtjb25zdCBpPWUuaW5kZXg7cmV0dXJuIEx1KCkuX3RhYkZvY3VzQ2hhbmdlZChvLGkpfSkpLE91KDEsImRpdiIsNyksV20oMixKTCwxLDEsIm5nLXRlbXBsYXRlIiw4KSxXbSgzLFFMLDEsMSwibmctdGVtcGxhdGUiLDgpLFB1KCksUHUoKX1pZigyJnQpe2NvbnN0IHQ9ZS4kaW1wbGljaXQsbj1lLmluZGV4LG89THUoKTthZigibWF0LXRhYi1sYWJlbC1hY3RpdmUiLG8uc2VsZWN0ZWRJbmRleD09biksdnUoImlkIixvLl9nZXRUYWJMYWJlbElkKG4pKSgiZGlzYWJsZWQiLHQuZGlzYWJsZWQpKCJtYXRSaXBwbGVEaXNhYmxlZCIsdC5kaXNhYmxlZHx8by5kaXNhYmxlUmlwcGxlKSxObSgidGFiSW5kZXgiLG8uX2dldFRhYkluZGV4KHQsbikpKCJhcmlhLXBvc2luc2V0IixuKzEpKCJhcmlhLXNldHNpemUiLG8uX3RhYnMubGVuZ3RoKSgiYXJpYS1jb250cm9scyIsby5fZ2V0VGFiQ29udGVudElkKG4pKSgiYXJpYS1zZWxlY3RlZCIsby5zZWxlY3RlZEluZGV4PT1uKSgiYXJpYS1sYWJlbCIsdC5hcmlhTGFiZWx8fG51bGwpKCJhcmlhLWxhYmVsbGVkYnkiLCF0LmFyaWFMYWJlbCYmdC5hcmlhTGFiZWxsZWRieT90LmFyaWFMYWJlbGxlZGJ5Om51bGwpLEpjKDIpLHZ1KCJuZ0lmIix0LnRlbXBsYXRlTGFiZWwpLEpjKDEpLHZ1KCJuZ0lmIiwhdC50ZW1wbGF0ZUxhYmVsKX19ZnVuY3Rpb24gdEIodCxlKXtpZigxJnQpe2NvbnN0IHQ9RXUoKTtPdSgwLCJtYXQtdGFiLWJvZHkiLDEwKSxOdSgiX29uQ2VudGVyZWQiLChmdW5jdGlvbiBlKCl7cmV0dXJuIHJhKHQpLEx1KCkuX3JlbW92ZVRhYkJvZHlXcmFwcGVySGVpZ2h0KCl9KSkoIl9vbkNlbnRlcmluZyIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIHJhKHQpLEx1KCkuX3NldFRhYkJvZHlXcmFwcGVySGVpZ2h0KG4pfSkpLFB1KCl9aWYoMiZ0KXtjb25zdCB0PWUuJGltcGxpY2l0LG49ZS5pbmRleCxvPUx1KCk7YWYoIm1hdC10YWItYm9keS1hY3RpdmUiLG8uc2VsZWN0ZWRJbmRleD09biksdnUoImlkIixvLl9nZXRUYWJDb250ZW50SWQobikpKCJjb250ZW50Iix0LmNvbnRlbnQpKCJwb3NpdGlvbiIsdC5wb3NpdGlvbikoIm9yaWdpbiIsdC5vcmlnaW4pKCJhbmltYXRpb25EdXJhdGlvbiIsby5hbmltYXRpb25EdXJhdGlvbiksTm0oImFyaWEtbGFiZWxsZWRieSIsby5fZ2V0VGFiTGFiZWxJZChuKSl9fWNvbnN0IGVCPVsidGFiTGlzdENvbnRhaW5lciJdLG5CPVsidGFiTGlzdCJdLG9CPVsibmV4dFBhZ2luYXRvciJdLGlCPVsicHJldmlvdXNQYWdpbmF0b3IiXSxhQj1uZXcgTnIoIk1hdElua0JhclBvc2l0aW9uZXIiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uIHJCKCl7cmV0dXJuIHQ9Pih7bGVmdDp0Pyh0Lm9mZnNldExlZnR8fDApKyJweCI6IjAiLHdpZHRoOnQ/KHQub2Zmc2V0V2lkdGh8fDApKyJweCI6IjAifSl9fSk7Y2xhc3Mgc0J7Y29uc3RydWN0b3IodCxlLG4sbyl7dGhpcy5fZWxlbWVudFJlZj10LHRoaXMuX25nWm9uZT1lLHRoaXMuX2lua0JhclBvc2l0aW9uZXI9bix0aGlzLl9hbmltYXRpb25Nb2RlPW99YWxpZ25Ub0VsZW1lbnQodCl7dGhpcy5zaG93KCksInVuZGVmaW5lZCIhPXR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWU/dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgoKT0+e3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKCk9PnRoaXMuX3NldFN0eWxlcyh0KSkpfSkpOnRoaXMuX3NldFN0eWxlcyh0KX1zaG93KCl7dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLnZpc2liaWxpdHk9InZpc2libGUifWhpZGUoKXt0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIn1fc2V0U3R5bGVzKHQpe2NvbnN0IGU9dGhpcy5faW5rQmFyUG9zaXRpb25lcih0KSxuPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtuLnN0eWxlLmxlZnQ9ZS5sZWZ0LG4uc3R5bGUud2lkdGg9ZS53aWR0aH19c0IuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHNCKShNdShjaCksTXUodEMpLE11KGFCKSxNdShOdyw4KSl9LHNCLsm1ZGlyPUpvKHt0eXBlOnNCLHNlbGVjdG9yczpbWyJtYXQtaW5rLWJhciJdXSxob3N0QXR0cnM6WzEsIm1hdC1pbmstYmFyIl0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezImZSYmYWYoIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIiwiTm9vcEFuaW1hdGlvbnMiPT09bi5fYW5pbWF0aW9uTW9kZSl9fSksc0IuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpjaH0se3R5cGU6dEN9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOlthQl19XX0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltOd119XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoc0IsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoibWF0LWluay1iYXIiLGhvc3Q6e2NsYXNzOiJtYXQtaW5rLWJhciIsIltjbGFzcy5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZV0iOiJfYW5pbWF0aW9uTW9kZSA9PT0gJ05vb3BBbmltYXRpb25zJyJ9fV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Y2h9LHt0eXBlOnRDfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbYUJdfV19LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbTnddfV19XX0pLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3QgbEI9bmV3IE5yKCJNYXRUYWJDb250ZW50Iik7Y2xhc3MgY0J7Y29uc3RydWN0b3IodCl7dGhpcy50ZW1wbGF0ZT10fX1jQi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8Y0IpKE11KFVoKSl9LGNCLsm1ZGlyPUpvKHt0eXBlOmNCLHNlbGVjdG9yczpbWyIiLCJtYXRUYWJDb250ZW50IiwiIl1dLGZlYXR1cmVzOltpaChbe3Byb3ZpZGU6bEIsdXNlRXhpc3Rpbmc6Y0J9XSldfSksY0IuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpVaH1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoY0IsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoiW21hdFRhYkNvbnRlbnRdIixwcm92aWRlcnM6W3twcm92aWRlOmxCLHVzZUV4aXN0aW5nOmNCfV19XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpVaH1dfSksbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCBkQj1uZXcgTnIoIk1hdFRhYkxhYmVsIik7Y2xhc3MgcEIgZXh0ZW5kcyBtRnt9cEIuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbUIoZXx8cEIpfSxwQi7JtWRpcj1Kbyh7dHlwZTpwQixzZWxlY3RvcnM6W1siIiwibWF0LXRhYi1sYWJlbCIsIiJdLFsiIiwibWF0VGFiTGFiZWwiLCIiXV0sZmVhdHVyZXM6W2loKFt7cHJvdmlkZTpkQix1c2VFeGlzdGluZzpwQn1dKSxnbV19KTtjb25zdCBtQj12cihwQik7KCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihwQixbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJbbWF0LXRhYi1sYWJlbF0sIFttYXRUYWJMYWJlbF0iLHByb3ZpZGVyczpbe3Byb3ZpZGU6ZEIsdXNlRXhpc3Rpbmc6cEJ9XX1dfV0sbnVsbCxudWxsKTtjb25zdCB1Qj1OeigKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNze30pLGZCPW5ldyBOcigiTUFUX1RBQl9HUk9VUCIpO2NsYXNzIGdCIGV4dGVuZHMgdUJ7Y29uc3RydWN0b3IodCxlKXtzdXBlcigpLHRoaXMuX3ZpZXdDb250YWluZXJSZWY9dCx0aGlzLl9jbG9zZXN0VGFiR3JvdXA9ZSx0aGlzLnRleHRMYWJlbD0iIix0aGlzLl9jb250ZW50UG9ydGFsPW51bGwsdGhpcy5fc3RhdGVDaGFuZ2VzPW5ldyB4LHRoaXMucG9zaXRpb249bnVsbCx0aGlzLm9yaWdpbj1udWxsLHRoaXMuaXNBY3RpdmU9ITF9Z2V0IHRlbXBsYXRlTGFiZWwoKXtyZXR1cm4gdGhpcy5fdGVtcGxhdGVMYWJlbH1zZXQgdGVtcGxhdGVMYWJlbCh0KXt0aGlzLl9zZXRUZW1wbGF0ZUxhYmVsSW5wdXQodCl9Z2V0IGNvbnRlbnQoKXtyZXR1cm4gdGhpcy5fY29udGVudFBvcnRhbH1uZ09uQ2hhbmdlcyh0KXsodC5oYXNPd25Qcm9wZXJ0eSgidGV4dExhYmVsIil8fHQuaGFzT3duUHJvcGVydHkoImRpc2FibGVkIikpJiZ0aGlzLl9zdGF0ZUNoYW5nZXMubmV4dCgpfW5nT25EZXN0cm95KCl7dGhpcy5fc3RhdGVDaGFuZ2VzLmNvbXBsZXRlKCl9bmdPbkluaXQoKXt0aGlzLl9jb250ZW50UG9ydGFsPW5ldyBsRih0aGlzLl9leHBsaWNpdENvbnRlbnR8fHRoaXMuX2ltcGxpY2l0Q29udGVudCx0aGlzLl92aWV3Q29udGFpbmVyUmVmKX1fc2V0VGVtcGxhdGVMYWJlbElucHV0KHQpe3QmJih0aGlzLl90ZW1wbGF0ZUxhYmVsPXQpfX1nQi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8Z0IpKE11KFhoKSxNdShmQikpfSxnQi7JtWNtcD1Vbyh7dHlwZTpnQixzZWxlY3RvcnM6W1sibWF0LXRhYiJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbiB0KGUsbixvKXtpZigxJmUmJihHYihvLGRCLDEpLEdiKG8sbEIsMyxVaCkpLDImZSl7bGV0IHQ7VWIodD1ZYigpKSYmKG4udGVtcGxhdGVMYWJlbD10LmZpcnN0KSxVYih0PVliKCkpJiYobi5fZXhwbGljaXRDb250ZW50PXQuZmlyc3QpfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJldiKFVoLDMpLDImZSl7bGV0IHQ7VWIodD1ZYigpKSYmKG4uX2ltcGxpY2l0Q29udGVudD10LmZpcnN0KX19LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIix0ZXh0TGFiZWw6WyJsYWJlbCIsInRleHRMYWJlbCJdLGFyaWFMYWJlbDpbImFyaWEtbGFiZWwiLCJhcmlhTGFiZWwiXSxhcmlhTGFiZWxsZWRieTpbImFyaWEtbGFiZWxsZWRieSIsImFyaWFMYWJlbGxlZGJ5Il19LGV4cG9ydEFzOlsibWF0VGFiIl0sZmVhdHVyZXM6W2dtLFNpXSxuZ0NvbnRlbnRTZWxlY3RvcnM6V0wsZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKFZ1KCksV20oMCxVTCwxLDAsIm5nLXRlbXBsYXRlIikpfSxlbmNhcHN1bGF0aW9uOjJ9KSxnQi5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOlhofSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbZkJdfV19XSxnQi5wcm9wRGVjb3JhdG9ycz17dGVtcGxhdGVMYWJlbDpbe3R5cGU6SHIsYXJnczpbZEJdfV0sX2V4cGxpY2l0Q29udGVudDpbe3R5cGU6SHIsYXJnczpbbEIse3JlYWQ6VWgsc3RhdGljOiEwfV19XSxfaW1wbGljaXRDb250ZW50Olt7dHlwZTpGcixhcmdzOltVaCx7c3RhdGljOiEwfV19XSx0ZXh0TGFiZWw6W3t0eXBlOnlfLGFyZ3M6WyJsYWJlbCJdfV0sYXJpYUxhYmVsOlt7dHlwZTp5XyxhcmdzOlsiYXJpYS1sYWJlbCJdfV0sYXJpYUxhYmVsbGVkYnk6W3t0eXBlOnlfLGFyZ3M6WyJhcmlhLWxhYmVsbGVkYnkiXX1dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGdCLFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6Im1hdC10YWIiLHRlbXBsYXRlOiJceDNjIS0tIENyZWF0ZSBhIHRlbXBsYXRlIGZvciB0aGUgY29udGVudCBvZiB0aGUgPG1hdC10YWI+IHNvIHRoYXQgd2UgY2FuIGdyYWIgYSByZWZlcmVuY2UgdG8gdGhpc1xuICAgIFRlbXBsYXRlUmVmIGFuZCB1c2UgaXQgaW4gYSBQb3J0YWwgdG8gcmVuZGVyIHRoZSB0YWIgY29udGVudCBpbiB0aGUgYXBwcm9wcmlhdGUgcGxhY2UgaW4gdGhlXG4gICAgdGFiLWdyb3VwLiAtLVx4M2VcbjxuZy10ZW1wbGF0ZT48bmctY29udGVudD48L25nLWNvbnRlbnQ+PC9uZy10ZW1wbGF0ZT5cbiIsaW5wdXRzOlsiZGlzYWJsZWQiXSxjaGFuZ2VEZXRlY3Rpb246eG8uRGVmYXVsdCxlbmNhcHN1bGF0aW9uOlBvLk5vbmUsZXhwb3J0QXM6Im1hdFRhYiJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpYaH0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W2ZCXX1dfV19KSx7dGV4dExhYmVsOlt7dHlwZTp5XyxhcmdzOlsibGFiZWwiXX1dLHRlbXBsYXRlTGFiZWw6W3t0eXBlOkhyLGFyZ3M6W2RCXX1dLF9leHBsaWNpdENvbnRlbnQ6W3t0eXBlOkhyLGFyZ3M6W2xCLHtyZWFkOlVoLHN0YXRpYzohMH1dfV0sX2ltcGxpY2l0Q29udGVudDpbe3R5cGU6RnIsYXJnczpbVWgse3N0YXRpYzohMH1dfV0sYXJpYUxhYmVsOlt7dHlwZTp5XyxhcmdzOlsiYXJpYS1sYWJlbCJdfV0sYXJpYUxhYmVsbGVkYnk6W3t0eXBlOnlfLGFyZ3M6WyJhcmlhLWxhYmVsbGVkYnkiXX1dfSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCBoQj17dHJhbnNsYXRlVGFiOkt4KCJ0cmFuc2xhdGVUYWIiLFt0TygiY2VudGVyLCB2b2lkLCBsZWZ0LW9yaWdpbi1jZW50ZXIsIHJpZ2h0LW9yaWdpbi1jZW50ZXIiLCR4KHt0cmFuc2Zvcm06Im5vbmUifSkpLHRPKCJsZWZ0IiwkeCh7dHJhbnNmb3JtOiJ0cmFuc2xhdGUzZCgtMTAwJSwgMCwgMCkiLG1pbkhlaWdodDoiMXB4In0pKSx0TygicmlnaHQiLCR4KHt0cmFuc2Zvcm06InRyYW5zbGF0ZTNkKDEwMCUsIDAsIDApIixtaW5IZWlnaHQ6IjFweCJ9KSksbk8oIiogPT4gbGVmdCwgKiA9PiByaWdodCwgbGVmdCA9PiBjZW50ZXIsIHJpZ2h0ID0+IGNlbnRlciIsSngoInt7YW5pbWF0aW9uRHVyYXRpb259fSBjdWJpYy1iZXppZXIoMC4zNSwgMCwgMC4yNSwgMSkiKSksbk8oInZvaWQgPT4gbGVmdC1vcmlnaW4tY2VudGVyIixbJHgoe3RyYW5zZm9ybToidHJhbnNsYXRlM2QoLTEwMCUsIDAsIDApIn0pLEp4KCJ7e2FuaW1hdGlvbkR1cmF0aW9ufX0gY3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuMjUsIDEpIildKSxuTygidm9pZCA9PiByaWdodC1vcmlnaW4tY2VudGVyIixbJHgoe3RyYW5zZm9ybToidHJhbnNsYXRlM2QoMTAwJSwgMCwgMCkifSksSngoInt7YW5pbWF0aW9uRHVyYXRpb259fSBjdWJpYy1iZXppZXIoMC4zNSwgMCwgMC4yNSwgMSkiKV0pXSl9OwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jbGFzcyBiQiBleHRlbmRzIGdGe2NvbnN0cnVjdG9yKHQsZSxuLG8pe3N1cGVyKHQsZSxvKSx0aGlzLl9ob3N0PW4sdGhpcy5fY2VudGVyaW5nU3ViPWwuRU1QVFksdGhpcy5fbGVhdmluZ1N1Yj1sLkVNUFRZfW5nT25Jbml0KCl7c3VwZXIubmdPbkluaXQoKSx0aGlzLl9jZW50ZXJpbmdTdWI9dGhpcy5faG9zdC5fYmVmb3JlQ2VudGVyaW5nLnBpcGUoY24odGhpcy5faG9zdC5faXNDZW50ZXJQb3NpdGlvbih0aGlzLl9ob3N0Ll9wb3NpdGlvbikpKS5zdWJzY3JpYmUoKHQ9Pnt0JiYhdGhpcy5oYXNBdHRhY2hlZCgpJiZ0aGlzLmF0dGFjaCh0aGlzLl9ob3N0Ll9jb250ZW50KX0pKSx0aGlzLl9sZWF2aW5nU3ViPXRoaXMuX2hvc3QuX2FmdGVyTGVhdmluZ0NlbnRlci5zdWJzY3JpYmUoKCgpPT57dGhpcy5kZXRhY2goKX0pKX1uZ09uRGVzdHJveSgpe3N1cGVyLm5nT25EZXN0cm95KCksdGhpcy5fY2VudGVyaW5nU3ViLnVuc3Vic2NyaWJlKCksdGhpcy5fbGVhdmluZ1N1Yi51bnN1YnNjcmliZSgpfX1iQi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8YkIpKE11KHJoKSxNdShYaCksTXUoSW4oKCgpPT5fQikpKSxNdShVQykpfSxiQi7JtWRpcj1Kbyh7dHlwZTpiQixzZWxlY3RvcnM6W1siIiwibWF0VGFiQm9keUhvc3QiLCIiXV0sZmVhdHVyZXM6W2dtXX0pLGJCLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6cmh9LHt0eXBlOlhofSx7dHlwZTpfQixkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltJbigoKCk9Pl9CKSldfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltVQ119XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoYkIsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoiW21hdFRhYkJvZHlIb3N0XSJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpyaH0se3R5cGU6WGh9LHt0eXBlOl9CLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W0luKCgoKT0+X0IpKV19XX0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W1VDXX1dfV19KSxudWxsKTtjbGFzcyB5Qntjb25zdHJ1Y3Rvcih0LGUsbil7dGhpcy5fZWxlbWVudFJlZj10LHRoaXMuX2Rpcj1lLHRoaXMuX2RpckNoYW5nZVN1YnNjcmlwdGlvbj1sLkVNUFRZLHRoaXMuX3RyYW5zbGF0ZVRhYkNvbXBsZXRlPW5ldyB4LHRoaXMuX29uQ2VudGVyaW5nPW5ldyBBYix0aGlzLl9iZWZvcmVDZW50ZXJpbmc9bmV3IEFiLHRoaXMuX2FmdGVyTGVhdmluZ0NlbnRlcj1uZXcgQWIsdGhpcy5fb25DZW50ZXJlZD1uZXcgQWIoITApLHRoaXMuYW5pbWF0aW9uRHVyYXRpb249IjUwMG1zIixlJiYodGhpcy5fZGlyQ2hhbmdlU3Vic2NyaXB0aW9uPWUuY2hhbmdlLnN1YnNjcmliZSgodD0+e3RoaXMuX2NvbXB1dGVQb3NpdGlvbkFuaW1hdGlvblN0YXRlKHQpLG4ubWFya0ZvckNoZWNrKCl9KSkpLHRoaXMuX3RyYW5zbGF0ZVRhYkNvbXBsZXRlLnBpcGUoa2UoKCh0LGUpPT50LmZyb21TdGF0ZT09PWUuZnJvbVN0YXRlJiZ0LnRvU3RhdGU9PT1lLnRvU3RhdGUpKSkuc3Vic2NyaWJlKCh0PT57dGhpcy5faXNDZW50ZXJQb3NpdGlvbih0LnRvU3RhdGUpJiZ0aGlzLl9pc0NlbnRlclBvc2l0aW9uKHRoaXMuX3Bvc2l0aW9uKSYmdGhpcy5fb25DZW50ZXJlZC5lbWl0KCksdGhpcy5faXNDZW50ZXJQb3NpdGlvbih0LmZyb21TdGF0ZSkmJiF0aGlzLl9pc0NlbnRlclBvc2l0aW9uKHRoaXMuX3Bvc2l0aW9uKSYmdGhpcy5fYWZ0ZXJMZWF2aW5nQ2VudGVyLmVtaXQoKX0pKX1zZXQgcG9zaXRpb24odCl7dGhpcy5fcG9zaXRpb25JbmRleD10LHRoaXMuX2NvbXB1dGVQb3NpdGlvbkFuaW1hdGlvblN0YXRlKCl9bmdPbkluaXQoKXsiY2VudGVyIj09dGhpcy5fcG9zaXRpb24mJm51bGwhPXRoaXMub3JpZ2luJiYodGhpcy5fcG9zaXRpb249dGhpcy5fY29tcHV0ZVBvc2l0aW9uRnJvbU9yaWdpbih0aGlzLm9yaWdpbikpfW5nT25EZXN0cm95KCl7dGhpcy5fZGlyQ2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fdHJhbnNsYXRlVGFiQ29tcGxldGUuY29tcGxldGUoKX1fb25UcmFuc2xhdGVUYWJTdGFydGVkKHQpe2NvbnN0IGU9dGhpcy5faXNDZW50ZXJQb3NpdGlvbih0LnRvU3RhdGUpO3RoaXMuX2JlZm9yZUNlbnRlcmluZy5lbWl0KGUpLGUmJnRoaXMuX29uQ2VudGVyaW5nLmVtaXQodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodCl9X2dldExheW91dERpcmVjdGlvbigpe3JldHVybiB0aGlzLl9kaXImJiJydGwiPT09dGhpcy5fZGlyLnZhbHVlPyJydGwiOiJsdHIifV9pc0NlbnRlclBvc2l0aW9uKHQpe3JldHVybiJjZW50ZXIiPT10fHwibGVmdC1vcmlnaW4tY2VudGVyIj09dHx8InJpZ2h0LW9yaWdpbi1jZW50ZXIiPT10fV9jb21wdXRlUG9zaXRpb25BbmltYXRpb25TdGF0ZSh0PXRoaXMuX2dldExheW91dERpcmVjdGlvbigpKXt0aGlzLl9wb3NpdGlvbj10aGlzLl9wb3NpdGlvbkluZGV4PDA/Imx0ciI9PXQ/ImxlZnQiOiJyaWdodCI6dGhpcy5fcG9zaXRpb25JbmRleD4wPyJsdHIiPT10PyJyaWdodCI6ImxlZnQiOiJjZW50ZXIifV9jb21wdXRlUG9zaXRpb25Gcm9tT3JpZ2luKHQpe2NvbnN0IGU9dGhpcy5fZ2V0TGF5b3V0RGlyZWN0aW9uKCk7cmV0dXJuImx0ciI9PWUmJnQ8PTB8fCJydGwiPT1lJiZ0PjA/ImxlZnQtb3JpZ2luLWNlbnRlciI6InJpZ2h0LW9yaWdpbi1jZW50ZXIifX15Qi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8eUIpKE11KGNoKSxNdShNeiw4KSxNdShIaCkpfSx5Qi7JtWRpcj1Kbyh7dHlwZTp5QixpbnB1dHM6e2FuaW1hdGlvbkR1cmF0aW9uOiJhbmltYXRpb25EdXJhdGlvbiIscG9zaXRpb246InBvc2l0aW9uIixfY29udGVudDpbImNvbnRlbnQiLCJfY29udGVudCJdLG9yaWdpbjoib3JpZ2luIn0sb3V0cHV0czp7X29uQ2VudGVyaW5nOiJfb25DZW50ZXJpbmciLF9iZWZvcmVDZW50ZXJpbmc6Il9iZWZvcmVDZW50ZXJpbmciLF9hZnRlckxlYXZpbmdDZW50ZXI6Il9hZnRlckxlYXZpbmdDZW50ZXIiLF9vbkNlbnRlcmVkOiJfb25DZW50ZXJlZCJ9fSkseUIuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpjaH0se3R5cGU6TXosZGVjb3JhdG9yczpbe3R5cGU6X3N9XX0se3R5cGU6SGh9XSx5Qi5wcm9wRGVjb3JhdG9ycz17X29uQ2VudGVyaW5nOlt7dHlwZTpfX31dLF9iZWZvcmVDZW50ZXJpbmc6W3t0eXBlOl9ffV0sX2FmdGVyTGVhdmluZ0NlbnRlcjpbe3R5cGU6X199XSxfb25DZW50ZXJlZDpbe3R5cGU6X199XSxfY29udGVudDpbe3R5cGU6eV8sYXJnczpbImNvbnRlbnQiXX1dLG9yaWdpbjpbe3R5cGU6eV99XSxhbmltYXRpb25EdXJhdGlvbjpbe3R5cGU6eV99XSxwb3NpdGlvbjpbe3R5cGU6eV99XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYih5Qixbe3R5cGU6Z199XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Y2h9LHt0eXBlOk16LGRlY29yYXRvcnM6W3t0eXBlOl9zfV19LHt0eXBlOkhofV19KSx7X29uQ2VudGVyaW5nOlt7dHlwZTpfX31dLF9iZWZvcmVDZW50ZXJpbmc6W3t0eXBlOl9ffV0sX2FmdGVyTGVhdmluZ0NlbnRlcjpbe3R5cGU6X199XSxfb25DZW50ZXJlZDpbe3R5cGU6X199XSxhbmltYXRpb25EdXJhdGlvbjpbe3R5cGU6eV99XSxwb3NpdGlvbjpbe3R5cGU6eV99XSxfY29udGVudDpbe3R5cGU6eV8sYXJnczpbImNvbnRlbnQiXX1dLG9yaWdpbjpbe3R5cGU6eV99XX0pO2NsYXNzIF9CIGV4dGVuZHMgeUJ7Y29uc3RydWN0b3IodCxlLG4pe3N1cGVyKHQsZSxuKX19X0IuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fF9CKShNdShjaCksTXUoTXosOCksTXUoSGgpKX0sX0IuybVjbXA9VW8oe3R5cGU6X0Isc2VsZWN0b3JzOltbIm1hdC10YWItYm9keSJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24gdChlLG4pe2lmKDEmZSYmV2IoZ0YsMSksMiZlKXtsZXQgdDtVYih0PVliKCkpJiYobi5fcG9ydGFsSG9zdD10LmZpcnN0KX19LGhvc3RBdHRyczpbMSwibWF0LXRhYi1ib2R5Il0sZmVhdHVyZXM6W2dtXSxkZWNsczozLHZhcnM6Nixjb25zdHM6W1siY2RrU2Nyb2xsYWJsZSIsIiIsMSwibWF0LXRhYi1ib2R5LWNvbnRlbnQiXSxbImNvbnRlbnQiLCIiXSxbIm1hdFRhYkJvZHlIb3N0IiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihPdSgwLCJkaXYiLDAsMSksTnUoIkB0cmFuc2xhdGVUYWIuc3RhcnQiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLl9vblRyYW5zbGF0ZVRhYlN0YXJ0ZWQoZSl9KSkoIkB0cmFuc2xhdGVUYWIuZG9uZSIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4uX3RyYW5zbGF0ZVRhYkNvbXBsZXRlLm5leHQoZSl9KSksV20oMixHTCwwLDAsIm5nLXRlbXBsYXRlIiwyKSxQdSgpKSwyJmUmJnZ1KCJAdHJhbnNsYXRlVGFiIixoYigzLHFMLG4uX3Bvc2l0aW9uLGdiKDEsWUwsbi5hbmltYXRpb25EdXJhdGlvbikpKX0sZGlyZWN0aXZlczpbYkJdLHN0eWxlczpbIi5tYXQtdGFiLWJvZHktY29udGVudHtoZWlnaHQ6MTAwJTtvdmVyZmxvdzphdXRvfS5tYXQtdGFiLWdyb3VwLWR5bmFtaWMtaGVpZ2h0IC5tYXQtdGFiLWJvZHktY29udGVudHtvdmVyZmxvdzpoaWRkZW59XG4iXSxlbmNhcHN1bGF0aW9uOjIsZGF0YTp7YW5pbWF0aW9uOltoQi50cmFuc2xhdGVUYWJdfX0pLF9CLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6Y2h9LHt0eXBlOk16LGRlY29yYXRvcnM6W3t0eXBlOl9zfV19LHt0eXBlOkhofV0sX0IucHJvcERlY29yYXRvcnM9e19wb3J0YWxIb3N0Olt7dHlwZTpGcixhcmdzOltnRl19XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihfQixbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJtYXQtdGFiLWJvZHkiLHRlbXBsYXRlOic8ZGl2IGNsYXNzPSJtYXQtdGFiLWJvZHktY29udGVudCIgI2NvbnRlbnRcbiAgICAgW0B0cmFuc2xhdGVUYWJdPSJ7XG4gICAgICAgIHZhbHVlOiBfcG9zaXRpb24sXG4gICAgICAgIHBhcmFtczoge2FuaW1hdGlvbkR1cmF0aW9uOiBhbmltYXRpb25EdXJhdGlvbn1cbiAgICAgfSJcbiAgICAgKEB0cmFuc2xhdGVUYWIuc3RhcnQpPSJfb25UcmFuc2xhdGVUYWJTdGFydGVkKCRldmVudCkiXG4gICAgIChAdHJhbnNsYXRlVGFiLmRvbmUpPSJfdHJhbnNsYXRlVGFiQ29tcGxldGUubmV4dCgkZXZlbnQpIlxuICAgICBjZGtTY3JvbGxhYmxlPlxuICA8bmctdGVtcGxhdGUgbWF0VGFiQm9keUhvc3Q+PC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxuJyxlbmNhcHN1bGF0aW9uOlBvLk5vbmUsY2hhbmdlRGV0ZWN0aW9uOnhvLkRlZmF1bHQsYW5pbWF0aW9uczpbaEIudHJhbnNsYXRlVGFiXSxob3N0OntjbGFzczoibWF0LXRhYi1ib2R5In0sc3R5bGVzOlsiLm1hdC10YWItYm9keS1jb250ZW50e2hlaWdodDoxMDAlO292ZXJmbG93OmF1dG99Lm1hdC10YWItZ3JvdXAtZHluYW1pYy1oZWlnaHQgLm1hdC10YWItYm9keS1jb250ZW50e292ZXJmbG93OmhpZGRlbn1cbiJdfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Y2h9LHt0eXBlOk16LGRlY29yYXRvcnM6W3t0eXBlOl9zfV19LHt0eXBlOkhofV19KSx7X3BvcnRhbEhvc3Q6W3t0eXBlOkZyLGFyZ3M6W2dGXX1dfSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCBDQj1uZXcgTnIoIk1BVF9UQUJTX0NPTkZJRyIpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9sZXQgTUI9MDtjbGFzcyB2Qnt9Y29uc3QgeEI9SXooenooY2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5fZWxlbWVudFJlZj10fX0pLCJwcmltYXJ5Iik7Y2xhc3MgT0IgZXh0ZW5kcyB4Qntjb25zdHJ1Y3Rvcih0LGUsbixvKXtzdXBlcih0KSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1lLHRoaXMuX2FuaW1hdGlvbk1vZGU9byx0aGlzLl90YWJzPW5ldyBUYix0aGlzLl9pbmRleFRvU2VsZWN0PTAsdGhpcy5fdGFiQm9keVdyYXBwZXJIZWlnaHQ9MCx0aGlzLl90YWJzU3Vic2NyaXB0aW9uPWwuRU1QVFksdGhpcy5fdGFiTGFiZWxTdWJzY3JpcHRpb249bC5FTVBUWSx0aGlzLl9zZWxlY3RlZEluZGV4PW51bGwsdGhpcy5oZWFkZXJQb3NpdGlvbj0iYWJvdmUiLHRoaXMuc2VsZWN0ZWRJbmRleENoYW5nZT1uZXcgQWIsdGhpcy5mb2N1c0NoYW5nZT1uZXcgQWIsdGhpcy5hbmltYXRpb25Eb25lPW5ldyBBYix0aGlzLnNlbGVjdGVkVGFiQ2hhbmdlPW5ldyBBYighMCksdGhpcy5fZ3JvdXBJZD1NQisrLHRoaXMuYW5pbWF0aW9uRHVyYXRpb249biYmbi5hbmltYXRpb25EdXJhdGlvbj9uLmFuaW1hdGlvbkR1cmF0aW9uOiI1MDBtcyIsdGhpcy5kaXNhYmxlUGFnaW5hdGlvbj0hKCFufHxudWxsPT1uLmRpc2FibGVQYWdpbmF0aW9uKSYmbi5kaXNhYmxlUGFnaW5hdGlvbix0aGlzLmR5bmFtaWNIZWlnaHQ9ISghbnx8bnVsbD09bi5keW5hbWljSGVpZ2h0KSYmbi5keW5hbWljSGVpZ2h0fWdldCBkeW5hbWljSGVpZ2h0KCl7cmV0dXJuIHRoaXMuX2R5bmFtaWNIZWlnaHR9c2V0IGR5bmFtaWNIZWlnaHQodCl7dGhpcy5fZHluYW1pY0hlaWdodD1ySSh0KX1nZXQgc2VsZWN0ZWRJbmRleCgpe3JldHVybiB0aGlzLl9zZWxlY3RlZEluZGV4fXNldCBzZWxlY3RlZEluZGV4KHQpe3RoaXMuX2luZGV4VG9TZWxlY3Q9c0kodCxudWxsKX1nZXQgYW5pbWF0aW9uRHVyYXRpb24oKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9uRHVyYXRpb259c2V0IGFuaW1hdGlvbkR1cmF0aW9uKHQpe3RoaXMuX2FuaW1hdGlvbkR1cmF0aW9uPS9eXGQrJC8udGVzdCh0KT90KyJtcyI6dH1nZXQgYmFja2dyb3VuZENvbG9yKCl7cmV0dXJuIHRoaXMuX2JhY2tncm91bmRDb2xvcn1zZXQgYmFja2dyb3VuZENvbG9yKHQpe2NvbnN0IGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O2UuY2xhc3NMaXN0LnJlbW92ZShgbWF0LWJhY2tncm91bmQtJHt0aGlzLmJhY2tncm91bmRDb2xvcn1gKSx0JiZlLmNsYXNzTGlzdC5hZGQoYG1hdC1iYWNrZ3JvdW5kLSR7dH1gKSx0aGlzLl9iYWNrZ3JvdW5kQ29sb3I9dH1uZ0FmdGVyQ29udGVudENoZWNrZWQoKXtjb25zdCB0PXRoaXMuX2luZGV4VG9TZWxlY3Q9dGhpcy5fY2xhbXBUYWJJbmRleCh0aGlzLl9pbmRleFRvU2VsZWN0KTtpZih0aGlzLl9zZWxlY3RlZEluZGV4IT10KXtjb25zdCBlPW51bGw9PXRoaXMuX3NlbGVjdGVkSW5kZXg7aWYoIWUpe3RoaXMuc2VsZWN0ZWRUYWJDaGFuZ2UuZW1pdCh0aGlzLl9jcmVhdGVDaGFuZ2VFdmVudCh0KSk7Y29uc3QgZT10aGlzLl90YWJCb2R5V3JhcHBlci5uYXRpdmVFbGVtZW50O2Uuc3R5bGUubWluSGVpZ2h0PWUuY2xpZW50SGVpZ2h0KyJweCJ9UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKCk9Pnt0aGlzLl90YWJzLmZvckVhY2goKChlLG4pPT5lLmlzQWN0aXZlPW49PT10KSksZXx8KHRoaXMuc2VsZWN0ZWRJbmRleENoYW5nZS5lbWl0KHQpLHRoaXMuX3RhYkJvZHlXcmFwcGVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUubWluSGVpZ2h0PSIiKX0pKX10aGlzLl90YWJzLmZvckVhY2goKChlLG4pPT57ZS5wb3NpdGlvbj1uLXQsbnVsbD09dGhpcy5fc2VsZWN0ZWRJbmRleHx8MCE9ZS5wb3NpdGlvbnx8ZS5vcmlnaW58fChlLm9yaWdpbj10LXRoaXMuX3NlbGVjdGVkSW5kZXgpfSkpLHRoaXMuX3NlbGVjdGVkSW5kZXghPT10JiYodGhpcy5fc2VsZWN0ZWRJbmRleD10LHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLl9zdWJzY3JpYmVUb0FsbFRhYkNoYW5nZXMoKSx0aGlzLl9zdWJzY3JpYmVUb1RhYkxhYmVscygpLHRoaXMuX3RhYnNTdWJzY3JpcHRpb249dGhpcy5fdGFicy5jaGFuZ2VzLnN1YnNjcmliZSgoKCk9PntpZih0aGlzLl9jbGFtcFRhYkluZGV4KHRoaXMuX2luZGV4VG9TZWxlY3QpPT09dGhpcy5fc2VsZWN0ZWRJbmRleCl7Y29uc3QgdD10aGlzLl90YWJzLnRvQXJyYXkoKTtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKylpZih0W2VdLmlzQWN0aXZlKXt0aGlzLl9pbmRleFRvU2VsZWN0PXRoaXMuX3NlbGVjdGVkSW5kZXg9ZTticmVha319dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KSl9X3N1YnNjcmliZVRvQWxsVGFiQ2hhbmdlcygpe3RoaXMuX2FsbFRhYnMuY2hhbmdlcy5waXBlKGNuKHRoaXMuX2FsbFRhYnMpKS5zdWJzY3JpYmUoKHQ9Pnt0aGlzLl90YWJzLnJlc2V0KHQuZmlsdGVyKCh0PT50Ll9jbG9zZXN0VGFiR3JvdXA9PT10aGlzKSkpLHRoaXMuX3RhYnMubm90aWZ5T25DaGFuZ2VzKCl9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLl90YWJzLmRlc3Ryb3koKSx0aGlzLl90YWJzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fdGFiTGFiZWxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1yZWFsaWduSW5rQmFyKCl7dGhpcy5fdGFiSGVhZGVyJiZ0aGlzLl90YWJIZWFkZXIuX2FsaWduSW5rQmFyVG9TZWxlY3RlZFRhYigpfV9mb2N1c0NoYW5nZWQodCl7dGhpcy5mb2N1c0NoYW5nZS5lbWl0KHRoaXMuX2NyZWF0ZUNoYW5nZUV2ZW50KHQpKX1fY3JlYXRlQ2hhbmdlRXZlbnQodCl7Y29uc3QgZT1uZXcgdkI7cmV0dXJuIGUuaW5kZXg9dCx0aGlzLl90YWJzJiZ0aGlzLl90YWJzLmxlbmd0aCYmKGUudGFiPXRoaXMuX3RhYnMudG9BcnJheSgpW3RdKSxlfV9zdWJzY3JpYmVUb1RhYkxhYmVscygpe3RoaXMuX3RhYkxhYmVsU3Vic2NyaXB0aW9uJiZ0aGlzLl90YWJMYWJlbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3RhYkxhYmVsU3Vic2NyaXB0aW9uPVd0KC4uLnRoaXMuX3RhYnMubWFwKCh0PT50Ll9zdGF0ZUNoYW5nZXMpKSkuc3Vic2NyaWJlKCgoKT0+dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpKX1fY2xhbXBUYWJJbmRleCh0KXtyZXR1cm4gTWF0aC5taW4odGhpcy5fdGFicy5sZW5ndGgtMSxNYXRoLm1heCh0fHwwLDApKX1fZ2V0VGFiTGFiZWxJZCh0KXtyZXR1cm5gbWF0LXRhYi1sYWJlbC0ke3RoaXMuX2dyb3VwSWR9LSR7dH1gfV9nZXRUYWJDb250ZW50SWQodCl7cmV0dXJuYG1hdC10YWItY29udGVudC0ke3RoaXMuX2dyb3VwSWR9LSR7dH1gfV9zZXRUYWJCb2R5V3JhcHBlckhlaWdodCh0KXtpZighdGhpcy5fZHluYW1pY0hlaWdodHx8IXRoaXMuX3RhYkJvZHlXcmFwcGVySGVpZ2h0KXJldHVybjtjb25zdCBlPXRoaXMuX3RhYkJvZHlXcmFwcGVyLm5hdGl2ZUVsZW1lbnQ7ZS5zdHlsZS5oZWlnaHQ9dGhpcy5fdGFiQm9keVdyYXBwZXJIZWlnaHQrInB4Iix0aGlzLl90YWJCb2R5V3JhcHBlci5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCYmKGUuc3R5bGUuaGVpZ2h0PXQrInB4Iil9X3JlbW92ZVRhYkJvZHlXcmFwcGVySGVpZ2h0KCl7Y29uc3QgdD10aGlzLl90YWJCb2R5V3JhcHBlci5uYXRpdmVFbGVtZW50O3RoaXMuX3RhYkJvZHlXcmFwcGVySGVpZ2h0PXQuY2xpZW50SGVpZ2h0LHQuc3R5bGUuaGVpZ2h0PSIiLHRoaXMuYW5pbWF0aW9uRG9uZS5lbWl0KCl9X2hhbmRsZUNsaWNrKHQsZSxuKXt0LmRpc2FibGVkfHwodGhpcy5zZWxlY3RlZEluZGV4PWUuZm9jdXNJbmRleD1uKX1fZ2V0VGFiSW5kZXgodCxlKXtyZXR1cm4gdC5kaXNhYmxlZD9udWxsOnRoaXMuc2VsZWN0ZWRJbmRleD09PWU/MDotMX1fdGFiRm9jdXNDaGFuZ2VkKHQsZSl7dCYmKHRoaXMuX3RhYkhlYWRlci5mb2N1c0luZGV4PWUpfX1PQi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8T0IpKE11KGNoKSxNdShIaCksTXUoQ0IsOCksTXUoTncsOCkpfSxPQi7JtWRpcj1Kbyh7dHlwZTpPQixpbnB1dHM6e2hlYWRlclBvc2l0aW9uOiJoZWFkZXJQb3NpdGlvbiIsYW5pbWF0aW9uRHVyYXRpb246ImFuaW1hdGlvbkR1cmF0aW9uIixkaXNhYmxlUGFnaW5hdGlvbjoiZGlzYWJsZVBhZ2luYXRpb24iLGR5bmFtaWNIZWlnaHQ6ImR5bmFtaWNIZWlnaHQiLHNlbGVjdGVkSW5kZXg6InNlbGVjdGVkSW5kZXgiLGJhY2tncm91bmRDb2xvcjoiYmFja2dyb3VuZENvbG9yIn0sb3V0cHV0czp7c2VsZWN0ZWRJbmRleENoYW5nZToic2VsZWN0ZWRJbmRleENoYW5nZSIsZm9jdXNDaGFuZ2U6ImZvY3VzQ2hhbmdlIixhbmltYXRpb25Eb25lOiJhbmltYXRpb25Eb25lIixzZWxlY3RlZFRhYkNoYW5nZToic2VsZWN0ZWRUYWJDaGFuZ2UifSxmZWF0dXJlczpbZ21dfSksT0IuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpjaH0se3R5cGU6SGh9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltDQl19LHt0eXBlOl9zfV19LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbTnddfV19XSxPQi5wcm9wRGVjb3JhdG9ycz17ZHluYW1pY0hlaWdodDpbe3R5cGU6eV99XSxzZWxlY3RlZEluZGV4Olt7dHlwZTp5X31dLGhlYWRlclBvc2l0aW9uOlt7dHlwZTp5X31dLGFuaW1hdGlvbkR1cmF0aW9uOlt7dHlwZTp5X31dLGRpc2FibGVQYWdpbmF0aW9uOlt7dHlwZTp5X31dLGJhY2tncm91bmRDb2xvcjpbe3R5cGU6eV99XSxzZWxlY3RlZEluZGV4Q2hhbmdlOlt7dHlwZTpfX31dLGZvY3VzQ2hhbmdlOlt7dHlwZTpfX31dLGFuaW1hdGlvbkRvbmU6W3t0eXBlOl9ffV0sc2VsZWN0ZWRUYWJDaGFuZ2U6W3t0eXBlOl9ffV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoT0IsW3t0eXBlOmdffV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmNofSx7dHlwZTpIaH0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W0NCXX0se3R5cGU6X3N9XX0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltOd119XX1dfSkse2hlYWRlclBvc2l0aW9uOlt7dHlwZTp5X31dLHNlbGVjdGVkSW5kZXhDaGFuZ2U6W3t0eXBlOl9ffV0sZm9jdXNDaGFuZ2U6W3t0eXBlOl9ffV0sYW5pbWF0aW9uRG9uZTpbe3R5cGU6X199XSxzZWxlY3RlZFRhYkNoYW5nZTpbe3R5cGU6X199XSxhbmltYXRpb25EdXJhdGlvbjpbe3R5cGU6eV99XSxkaXNhYmxlUGFnaW5hdGlvbjpbe3R5cGU6eV99XSxkeW5hbWljSGVpZ2h0Olt7dHlwZTp5X31dLHNlbGVjdGVkSW5kZXg6W3t0eXBlOnlffV0sYmFja2dyb3VuZENvbG9yOlt7dHlwZTp5X31dfSk7Y2xhc3MgUEIgZXh0ZW5kcyBPQntjb25zdHJ1Y3Rvcih0LGUsbixvKXtzdXBlcih0LGUsbixvKX19UEIuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFBCKShNdShjaCksTXUoSGgpLE11KENCLDgpLE11KE53LDgpKX0sUEIuybVjbXA9VW8oe3R5cGU6UEIsc2VsZWN0b3JzOltbIm1hdC10YWItZ3JvdXAiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24gdChlLG4sbyl7aWYoMSZlJiZHYihvLGdCLDEpLDImZSl7bGV0IHQ7VWIodD1ZYigpKSYmKG4uX2FsbFRhYnM9dCl9fSx2aWV3UXVlcnk6ZnVuY3Rpb24gdChlLG4pe2lmKDEmZSYmKFdiKFpMLDEpLFdiKFhMLDEpKSwyJmUpe2xldCB0O1ViKHQ9WWIoKSkmJihuLl90YWJCb2R5V3JhcHBlcj10LmZpcnN0KSxVYih0PVliKCkpJiYobi5fdGFiSGVhZGVyPXQuZmlyc3QpfX0saG9zdEF0dHJzOlsxLCJtYXQtdGFiLWdyb3VwIl0saG9zdFZhcnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezImZSYmYWYoIm1hdC10YWItZ3JvdXAtZHluYW1pYy1oZWlnaHQiLG4uZHluYW1pY0hlaWdodCkoIm1hdC10YWItZ3JvdXAtaW52ZXJ0ZWQtaGVhZGVyIiwiYmVsb3ciPT09bi5oZWFkZXJQb3NpdGlvbil9LGlucHV0czp7Y29sb3I6ImNvbG9yIixkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIn0sZXhwb3J0QXM6WyJtYXRUYWJHcm91cCJdLGZlYXR1cmVzOltpaChbe3Byb3ZpZGU6ZkIsdXNlRXhpc3Rpbmc6UEJ9XSksZ21dLGRlY2xzOjYsdmFyczo3LGNvbnN0czpbWzMsInNlbGVjdGVkSW5kZXgiLCJkaXNhYmxlUmlwcGxlIiwiZGlzYWJsZVBhZ2luYXRpb24iLCJpbmRleEZvY3VzZWQiLCJzZWxlY3RGb2N1c2VkSW5kZXgiXSxbInRhYkhlYWRlciIsIiJdLFsiY2xhc3MiLCJtYXQtdGFiLWxhYmVsIG1hdC1mb2N1cy1pbmRpY2F0b3IiLCJyb2xlIiwidGFiIiwibWF0VGFiTGFiZWxXcmFwcGVyIiwiIiwibWF0LXJpcHBsZSIsIiIsImNka01vbml0b3JFbGVtZW50Rm9jdXMiLCIiLDMsImlkIiwibWF0LXRhYi1sYWJlbC1hY3RpdmUiLCJkaXNhYmxlZCIsIm1hdFJpcHBsZURpc2FibGVkIiwiY2xpY2siLCJjZGtGb2N1c0NoYW5nZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsIm1hdC10YWItYm9keS13cmFwcGVyIl0sWyJ0YWJCb2R5V3JhcHBlciIsIiJdLFsicm9sZSIsInRhYnBhbmVsIiwzLCJpZCIsIm1hdC10YWItYm9keS1hY3RpdmUiLCJjb250ZW50IiwicG9zaXRpb24iLCJvcmlnaW4iLCJhbmltYXRpb25EdXJhdGlvbiIsIl9vbkNlbnRlcmVkIiwiX29uQ2VudGVyaW5nIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbInJvbGUiLCJ0YWIiLCJtYXRUYWJMYWJlbFdyYXBwZXIiLCIiLCJtYXQtcmlwcGxlIiwiIiwiY2RrTW9uaXRvckVsZW1lbnRGb2N1cyIsIiIsMSwibWF0LXRhYi1sYWJlbCIsIm1hdC1mb2N1cy1pbmRpY2F0b3IiLDMsImlkIiwiZGlzYWJsZWQiLCJtYXRSaXBwbGVEaXNhYmxlZCIsImNsaWNrIiwiY2RrRm9jdXNDaGFuZ2UiXSxbMSwibWF0LXRhYi1sYWJlbC1jb250ZW50Il0sWzMsIm5nSWYiXSxbMywiY2RrUG9ydGFsT3V0bGV0Il0sWyJyb2xlIiwidGFicGFuZWwiLDMsImlkIiwiY29udGVudCIsInBvc2l0aW9uIiwib3JpZ2luIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJfb25DZW50ZXJlZCIsIl9vbkNlbnRlcmluZyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoT3UoMCwibWF0LXRhYi1oZWFkZXIiLDAsMSksTnUoImluZGV4Rm9jdXNlZCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4uX2ZvY3VzQ2hhbmdlZChlKX0pKSgic2VsZWN0Rm9jdXNlZEluZGV4IiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5zZWxlY3RlZEluZGV4PWV9KSksV20oMiwkTCw0LDE0LCJkaXYiLDIpLFB1KCksT3UoMywiZGl2IiwzLDQpLFdtKDUsdEIsMSw4LCJtYXQtdGFiLWJvZHkiLDUpLFB1KCkpLDImZSYmKHZ1KCJzZWxlY3RlZEluZGV4IixuLnNlbGVjdGVkSW5kZXh8fDApKCJkaXNhYmxlUmlwcGxlIixuLmRpc2FibGVSaXBwbGUpKCJkaXNhYmxlUGFnaW5hdGlvbiIsbi5kaXNhYmxlUGFnaW5hdGlvbiksSmMoMiksdnUoIm5nRm9yT2YiLG4uX3RhYnMpLEpjKDEpLGFmKCJfbWF0LWFuaW1hdGlvbi1ub29wYWJsZSIsIk5vb3BBbmltYXRpb25zIj09PW4uX2FuaW1hdGlvbk1vZGUpLEpjKDIpLHZ1KCJuZ0Zvck9mIixuLl90YWJzKSl9LGRpcmVjdGl2ZXM6ZnVuY3Rpb24oKXtyZXR1cm5bQUIsb3Ysa0IscEgsdXosYXYsZ0YsX0JdfSxzdHlsZXM6WyIubWF0LXRhYi1ncm91cHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5tYXQtdGFiLWdyb3VwLm1hdC10YWItZ3JvdXAtaW52ZXJ0ZWQtaGVhZGVye2ZsZXgtZGlyZWN0aW9uOmNvbHVtbi1yZXZlcnNlfS5tYXQtdGFiLWxhYmVse2hlaWdodDo0OHB4O3BhZGRpbmc6MCAyNHB4O2N1cnNvcjpwb2ludGVyO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvcGFjaXR5Oi42O21pbi13aWR0aDoxNjBweDt0ZXh0LWFsaWduOmNlbnRlcjtkaXNwbGF5OmlubGluZS1mbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO3doaXRlLXNwYWNlOm5vd3JhcDtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXRhYi1sYWJlbDpmb2N1c3tvdXRsaW5lOm5vbmV9Lm1hdC10YWItbGFiZWw6Zm9jdXM6bm90KC5tYXQtdGFiLWRpc2FibGVkKXtvcGFjaXR5OjF9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXRhYi1sYWJlbDpmb2N1c3tvdXRsaW5lOmRvdHRlZCAycHg7b3V0bGluZS1vZmZzZXQ6LTJweH0ubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZHtvcGFjaXR5Oi41fS5tYXQtdGFiLWxhYmVsIC5tYXQtdGFiLWxhYmVsLWNvbnRlbnR7ZGlzcGxheTppbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXB9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXRhYi1sYWJlbHtvcGFjaXR5OjF9QG1lZGlhKG1heC13aWR0aDogNTk5cHgpey5tYXQtdGFiLWxhYmVse3BhZGRpbmc6MCAxMnB4fX1AbWVkaWEobWF4LXdpZHRoOiA5NTlweCl7Lm1hdC10YWItbGFiZWx7cGFkZGluZzowIDEycHh9fS5tYXQtdGFiLWdyb3VwW21hdC1zdHJldGNoLXRhYnNdPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbHtmbGV4LWJhc2lzOjA7ZmxleC1ncm93OjF9Lm1hdC10YWItYm9keS13cmFwcGVye3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbjtkaXNwbGF5OmZsZXg7dHJhbnNpdGlvbjpoZWlnaHQgNTAwbXMgY3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuMjUsIDEpfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZS5tYXQtdGFiLWJvZHktd3JhcHBlcnt0cmFuc2l0aW9uOm5vbmU7YW5pbWF0aW9uOm5vbmV9Lm1hdC10YWItYm9keXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmJsb2NrO292ZXJmbG93OmhpZGRlbjtmbGV4LWJhc2lzOjEwMCV9Lm1hdC10YWItYm9keS5tYXQtdGFiLWJvZHktYWN0aXZle3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93LXg6aGlkZGVuO292ZXJmbG93LXk6YXV0bzt6LWluZGV4OjE7ZmxleC1ncm93OjF9Lm1hdC10YWItZ3JvdXAubWF0LXRhYi1ncm91cC1keW5hbWljLWhlaWdodCAubWF0LXRhYi1ib2R5Lm1hdC10YWItYm9keS1hY3RpdmV7b3ZlcmZsb3cteTpoaWRkZW59XG4iXSxlbmNhcHN1bGF0aW9uOjJ9KSxQQi5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmNofSx7dHlwZTpIaH0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W0NCXX0se3R5cGU6X3N9XX0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltOd119XX1dLFBCLnByb3BEZWNvcmF0b3JzPXtfYWxsVGFiczpbe3R5cGU6enIsYXJnczpbZ0Ise2Rlc2NlbmRhbnRzOiEwfV19XSxfdGFiQm9keVdyYXBwZXI6W3t0eXBlOkZyLGFyZ3M6WyJ0YWJCb2R5V3JhcHBlciJdfV0sX3RhYkhlYWRlcjpbe3R5cGU6RnIsYXJnczpbInRhYkhlYWRlciJdfV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoUEIsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoibWF0LXRhYi1ncm91cCIsZXhwb3J0QXM6Im1hdFRhYkdyb3VwIix0ZW1wbGF0ZTonPG1hdC10YWItaGVhZGVyICN0YWJIZWFkZXJcbiAgICAgICAgICAgICAgIFtzZWxlY3RlZEluZGV4XT0ic2VsZWN0ZWRJbmRleCB8fCAwIlxuICAgICAgICAgICAgICAgW2Rpc2FibGVSaXBwbGVdPSJkaXNhYmxlUmlwcGxlIlxuICAgICAgICAgICAgICAgW2Rpc2FibGVQYWdpbmF0aW9uXT0iZGlzYWJsZVBhZ2luYXRpb24iXG4gICAgICAgICAgICAgICAoaW5kZXhGb2N1c2VkKT0iX2ZvY3VzQ2hhbmdlZCgkZXZlbnQpIlxuICAgICAgICAgICAgICAgKHNlbGVjdEZvY3VzZWRJbmRleCk9InNlbGVjdGVkSW5kZXggPSAkZXZlbnQiPlxuICA8ZGl2IGNsYXNzPSJtYXQtdGFiLWxhYmVsIG1hdC1mb2N1cy1pbmRpY2F0b3IiIHJvbGU9InRhYiIgbWF0VGFiTGFiZWxXcmFwcGVyIG1hdC1yaXBwbGUgY2RrTW9uaXRvckVsZW1lbnRGb2N1c1xuICAgICAgICpuZ0Zvcj0ibGV0IHRhYiBvZiBfdGFiczsgbGV0IGkgPSBpbmRleCJcbiAgICAgICBbaWRdPSJfZ2V0VGFiTGFiZWxJZChpKSJcbiAgICAgICBbYXR0ci50YWJJbmRleF09Il9nZXRUYWJJbmRleCh0YWIsIGkpIlxuICAgICAgIFthdHRyLmFyaWEtcG9zaW5zZXRdPSJpICsgMSJcbiAgICAgICBbYXR0ci5hcmlhLXNldHNpemVdPSJfdGFicy5sZW5ndGgiXG4gICAgICAgW2F0dHIuYXJpYS1jb250cm9sc109Il9nZXRUYWJDb250ZW50SWQoaSkiXG4gICAgICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09InNlbGVjdGVkSW5kZXggPT0gaSJcbiAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT0idGFiLmFyaWFMYWJlbCB8fCBudWxsIlxuICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09IighdGFiLmFyaWFMYWJlbCAmJiB0YWIuYXJpYUxhYmVsbGVkYnkpID8gdGFiLmFyaWFMYWJlbGxlZGJ5IDogbnVsbCJcbiAgICAgICBbY2xhc3MubWF0LXRhYi1sYWJlbC1hY3RpdmVdPSJzZWxlY3RlZEluZGV4ID09IGkiXG4gICAgICAgW2Rpc2FibGVkXT0idGFiLmRpc2FibGVkIlxuICAgICAgIFttYXRSaXBwbGVEaXNhYmxlZF09InRhYi5kaXNhYmxlZCB8fCBkaXNhYmxlUmlwcGxlIlxuICAgICAgIChjbGljayk9Il9oYW5kbGVDbGljayh0YWIsIHRhYkhlYWRlciwgaSkiXG4gICAgICAgKGNka0ZvY3VzQ2hhbmdlKT0iX3RhYkZvY3VzQ2hhbmdlZCgkZXZlbnQsIGkpIj5cblxuXG4gICAgPGRpdiBjbGFzcz0ibWF0LXRhYi1sYWJlbC1jb250ZW50Ij5cbiAgICAgIFx4M2MhLS0gSWYgdGhlcmUgaXMgYSBsYWJlbCB0ZW1wbGF0ZSwgdXNlIGl0LiAtLVx4M2VcbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09InRhYi50ZW1wbGF0ZUxhYmVsIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtjZGtQb3J0YWxPdXRsZXRdPSJ0YWIudGVtcGxhdGVMYWJlbCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgIFx4M2MhLS0gSWYgdGhlcmUgaXMgbm90IGEgbGFiZWwgdGVtcGxhdGUsIGZhbGwgYmFjayB0byB0aGUgdGV4dCBsYWJlbC4gLS1ceDNlXG4gICAgICA8bmctdGVtcGxhdGUgW25nSWZdPSIhdGFiLnRlbXBsYXRlTGFiZWwiPnt7dGFiLnRleHRMYWJlbH19PC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L21hdC10YWItaGVhZGVyPlxuXG48ZGl2XG4gIGNsYXNzPSJtYXQtdGFiLWJvZHktd3JhcHBlciJcbiAgW2NsYXNzLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlXT0iX2FuaW1hdGlvbk1vZGUgPT09IFwnTm9vcEFuaW1hdGlvbnNcJyJcbiAgI3RhYkJvZHlXcmFwcGVyPlxuICA8bWF0LXRhYi1ib2R5IHJvbGU9InRhYnBhbmVsIlxuICAgICAgICAgICAgICAgKm5nRm9yPSJsZXQgdGFiIG9mIF90YWJzOyBsZXQgaSA9IGluZGV4IlxuICAgICAgICAgICAgICAgW2lkXT0iX2dldFRhYkNvbnRlbnRJZChpKSJcbiAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09Il9nZXRUYWJMYWJlbElkKGkpIlxuICAgICAgICAgICAgICAgW2NsYXNzLm1hdC10YWItYm9keS1hY3RpdmVdPSJzZWxlY3RlZEluZGV4ID09IGkiXG4gICAgICAgICAgICAgICBbY29udGVudF09InRhYi5jb250ZW50ISJcbiAgICAgICAgICAgICAgIFtwb3NpdGlvbl09InRhYi5wb3NpdGlvbiEiXG4gICAgICAgICAgICAgICBbb3JpZ2luXT0idGFiLm9yaWdpbiJcbiAgICAgICAgICAgICAgIFthbmltYXRpb25EdXJhdGlvbl09ImFuaW1hdGlvbkR1cmF0aW9uIlxuICAgICAgICAgICAgICAgKF9vbkNlbnRlcmVkKT0iX3JlbW92ZVRhYkJvZHlXcmFwcGVySGVpZ2h0KCkiXG4gICAgICAgICAgICAgICAoX29uQ2VudGVyaW5nKT0iX3NldFRhYkJvZHlXcmFwcGVySGVpZ2h0KCRldmVudCkiPlxuICA8L21hdC10YWItYm9keT5cbjwvZGl2PlxuJyxlbmNhcHN1bGF0aW9uOlBvLk5vbmUsY2hhbmdlRGV0ZWN0aW9uOnhvLkRlZmF1bHQsaW5wdXRzOlsiY29sb3IiLCJkaXNhYmxlUmlwcGxlIl0scHJvdmlkZXJzOlt7cHJvdmlkZTpmQix1c2VFeGlzdGluZzpQQn1dLGhvc3Q6e2NsYXNzOiJtYXQtdGFiLWdyb3VwIiwiW2NsYXNzLm1hdC10YWItZ3JvdXAtZHluYW1pYy1oZWlnaHRdIjoiZHluYW1pY0hlaWdodCIsIltjbGFzcy5tYXQtdGFiLWdyb3VwLWludmVydGVkLWhlYWRlcl0iOidoZWFkZXJQb3NpdGlvbiA9PT0gImJlbG93Iid9LHN0eWxlczpbIi5tYXQtdGFiLWdyb3Vwe2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59Lm1hdC10YWItZ3JvdXAubWF0LXRhYi1ncm91cC1pbnZlcnRlZC1oZWFkZXJ7ZmxleC1kaXJlY3Rpb246Y29sdW1uLXJldmVyc2V9Lm1hdC10YWItbGFiZWx7aGVpZ2h0OjQ4cHg7cGFkZGluZzowIDI0cHg7Y3Vyc29yOnBvaW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O29wYWNpdHk6LjY7bWluLXdpZHRoOjE2MHB4O3RleHQtYWxpZ246Y2VudGVyO2Rpc3BsYXk6aW5saW5lLWZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7d2hpdGUtc3BhY2U6bm93cmFwO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtdGFiLWxhYmVsOmZvY3Vze291dGxpbmU6bm9uZX0ubWF0LXRhYi1sYWJlbDpmb2N1czpub3QoLm1hdC10YWItZGlzYWJsZWQpe29wYWNpdHk6MX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtdGFiLWxhYmVsOmZvY3Vze291dGxpbmU6ZG90dGVkIDJweDtvdXRsaW5lLW9mZnNldDotMnB4fS5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHR9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVke29wYWNpdHk6LjV9Lm1hdC10YWItbGFiZWwgLm1hdC10YWItbGFiZWwtY29udGVudHtkaXNwbGF5OmlubGluZS1mbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO3doaXRlLXNwYWNlOm5vd3JhcH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtdGFiLWxhYmVse29wYWNpdHk6MX1AbWVkaWEobWF4LXdpZHRoOiA1OTlweCl7Lm1hdC10YWItbGFiZWx7cGFkZGluZzowIDEycHh9fUBtZWRpYShtYXgtd2lkdGg6IDk1OXB4KXsubWF0LXRhYi1sYWJlbHtwYWRkaW5nOjAgMTJweH19Lm1hdC10YWItZ3JvdXBbbWF0LXN0cmV0Y2gtdGFic10+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVse2ZsZXgtYmFzaXM6MDtmbGV4LWdyb3c6MX0ubWF0LXRhYi1ib2R5LXdyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6aGlkZGVuO2Rpc3BsYXk6ZmxleDt0cmFuc2l0aW9uOmhlaWdodCA1MDBtcyBjdWJpYy1iZXppZXIoMC4zNSwgMCwgMC4yNSwgMSl9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlLm1hdC10YWItYm9keS13cmFwcGVye3RyYW5zaXRpb246bm9uZTthbmltYXRpb246bm9uZX0ubWF0LXRhYi1ib2R5e3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO2Rpc3BsYXk6YmxvY2s7b3ZlcmZsb3c6aGlkZGVuO2ZsZXgtYmFzaXM6MTAwJX0ubWF0LXRhYi1ib2R5Lm1hdC10YWItYm9keS1hY3RpdmV7cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3cteDpoaWRkZW47b3ZlcmZsb3cteTphdXRvO3otaW5kZXg6MTtmbGV4LWdyb3c6MX0ubWF0LXRhYi1ncm91cC5tYXQtdGFiLWdyb3VwLWR5bmFtaWMtaGVpZ2h0IC5tYXQtdGFiLWJvZHkubWF0LXRhYi1ib2R5LWFjdGl2ZXtvdmVyZmxvdy15OmhpZGRlbn1cbiJdfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Y2h9LHt0eXBlOkhofSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbQ0JdfSx7dHlwZTpfc31dfSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W053XX1dfV19KSx7X2FsbFRhYnM6W3t0eXBlOnpyLGFyZ3M6W2dCLHtkZXNjZW5kYW50czohMH1dfV0sX3RhYkJvZHlXcmFwcGVyOlt7dHlwZTpGcixhcmdzOlsidGFiQm9keVdyYXBwZXIiXX1dLF90YWJIZWFkZXI6W3t0eXBlOkZyLGFyZ3M6WyJ0YWJIZWFkZXIiXX1dfSk7Y29uc3Qgd0I9TnooCi8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzc3t9KTtjbGFzcyBrQiBleHRlbmRzIHdCe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5lbGVtZW50UmVmPXR9Zm9jdXMoKXt0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpfWdldE9mZnNldExlZnQoKXtyZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0TGVmdH1nZXRPZmZzZXRXaWR0aCgpe3JldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aH19a0IuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGtCKShNdShjaCkpfSxrQi7JtWRpcj1Kbyh7dHlwZTprQixzZWxlY3RvcnM6W1siIiwibWF0VGFiTGFiZWxXcmFwcGVyIiwiIl1dLGhvc3RWYXJzOjMsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsyJmUmJihObSgiYXJpYS1kaXNhYmxlZCIsISFuLmRpc2FibGVkKSxhZigibWF0LXRhYi1kaXNhYmxlZCIsbi5kaXNhYmxlZCkpfSxpbnB1dHM6e2Rpc2FibGVkOiJkaXNhYmxlZCJ9LGZlYXR1cmVzOltnbV19KSxrQi5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmNofV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihrQixbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJbbWF0VGFiTGFiZWxXcmFwcGVyXSIsaW5wdXRzOlsiZGlzYWJsZWQiXSxob3N0OnsiW2NsYXNzLm1hdC10YWItZGlzYWJsZWRdIjoiZGlzYWJsZWQiLCJbYXR0ci5hcmlhLWRpc2FibGVkXSI6IiEhZGlzYWJsZWQifX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmNofV19KSxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IFNCPXZJKHtwYXNzaXZlOiEwfSk7Y2xhc3MgREJ7Y29uc3RydWN0b3IodCxlLG4sbyxpLGEscil7dGhpcy5fZWxlbWVudFJlZj10LHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPWUsdGhpcy5fdmlld3BvcnRSdWxlcj1uLHRoaXMuX2Rpcj1vLHRoaXMuX25nWm9uZT1pLHRoaXMuX3BsYXRmb3JtPWEsdGhpcy5fYW5pbWF0aW9uTW9kZT1yLHRoaXMuX3Njcm9sbERpc3RhbmNlPTAsdGhpcy5fc2VsZWN0ZWRJbmRleENoYW5nZWQ9ITEsdGhpcy5fZGVzdHJveWVkPW5ldyB4LHRoaXMuX3Nob3dQYWdpbmF0aW9uQ29udHJvbHM9ITEsdGhpcy5fZGlzYWJsZVNjcm9sbEFmdGVyPSEwLHRoaXMuX2Rpc2FibGVTY3JvbGxCZWZvcmU9ITAsdGhpcy5fc3RvcFNjcm9sbGluZz1uZXcgeCx0aGlzLmRpc2FibGVQYWdpbmF0aW9uPSExLHRoaXMuX3NlbGVjdGVkSW5kZXg9MCx0aGlzLnNlbGVjdEZvY3VzZWRJbmRleD1uZXcgQWIsdGhpcy5pbmRleEZvY3VzZWQ9bmV3IEFiLGkucnVuT3V0c2lkZUFuZ3VsYXIoKCgpPT57VnQodC5uYXRpdmVFbGVtZW50LCJtb3VzZWxlYXZlIikucGlwZSh1bih0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5fc3RvcEludGVydmFsKCl9KSl9KSl9Z2V0IHNlbGVjdGVkSW5kZXgoKXtyZXR1cm4gdGhpcy5fc2VsZWN0ZWRJbmRleH1zZXQgc2VsZWN0ZWRJbmRleCh0KXt0PXNJKHQpLHRoaXMuX3NlbGVjdGVkSW5kZXghPXQmJih0aGlzLl9zZWxlY3RlZEluZGV4Q2hhbmdlZD0hMCx0aGlzLl9zZWxlY3RlZEluZGV4PXQsdGhpcy5fa2V5TWFuYWdlciYmdGhpcy5fa2V5TWFuYWdlci51cGRhdGVBY3RpdmVJdGVtKHQpKX1uZ0FmdGVyVmlld0luaXQoKXtWdCh0aGlzLl9wcmV2aW91c1BhZ2luYXRvci5uYXRpdmVFbGVtZW50LCJ0b3VjaHN0YXJ0IixTQikucGlwZSh1bih0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5faGFuZGxlUGFnaW5hdG9yUHJlc3MoImJlZm9yZSIpfSkpLFZ0KHRoaXMuX25leHRQYWdpbmF0b3IubmF0aXZlRWxlbWVudCwidG91Y2hzdGFydCIsU0IpLnBpcGUodW4odGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgoKT0+e3RoaXMuX2hhbmRsZVBhZ2luYXRvclByZXNzKCJhZnRlciIpfSkpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe2NvbnN0IHQ9dGhpcy5fZGlyP3RoaXMuX2Rpci5jaGFuZ2U6WihudWxsKSxlPXRoaXMuX3ZpZXdwb3J0UnVsZXIuY2hhbmdlKDE1MCksbj0oKT0+e3RoaXMudXBkYXRlUGFnaW5hdGlvbigpLHRoaXMuX2FsaWduSW5rQmFyVG9TZWxlY3RlZFRhYigpfTt0aGlzLl9rZXlNYW5hZ2VyPW5ldyBWSSh0aGlzLl9pdGVtcykud2l0aEhvcml6b250YWxPcmllbnRhdGlvbih0aGlzLl9nZXRMYXlvdXREaXJlY3Rpb24oKSkud2l0aEhvbWVBbmRFbmQoKS53aXRoV3JhcCgpLHRoaXMuX2tleU1hbmFnZXIudXBkYXRlQWN0aXZlSXRlbSh0aGlzLl9zZWxlY3RlZEluZGV4KSwidW5kZWZpbmVkIiE9dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZT9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUobik6bigpLFd0KHQsZSx0aGlzLl9pdGVtcy5jaGFuZ2VzKS5waXBlKHVuKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKCk9Pnt0aGlzLl9uZ1pvbmUucnVuKCgoKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbihuKSkpLHRoaXMuX2tleU1hbmFnZXIud2l0aEhvcml6b250YWxPcmllbnRhdGlvbih0aGlzLl9nZXRMYXlvdXREaXJlY3Rpb24oKSl9KSksdGhpcy5fa2V5TWFuYWdlci5jaGFuZ2UucGlwZSh1bih0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKHQ9Pnt0aGlzLmluZGV4Rm9jdXNlZC5lbWl0KHQpLHRoaXMuX3NldFRhYkZvY3VzKHQpfSkpfW5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpe3RoaXMuX3RhYkxhYmVsQ291bnQhPXRoaXMuX2l0ZW1zLmxlbmd0aCYmKHRoaXMudXBkYXRlUGFnaW5hdGlvbigpLHRoaXMuX3RhYkxhYmVsQ291bnQ9dGhpcy5faXRlbXMubGVuZ3RoLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKSx0aGlzLl9zZWxlY3RlZEluZGV4Q2hhbmdlZCYmKHRoaXMuX3Njcm9sbFRvTGFiZWwodGhpcy5fc2VsZWN0ZWRJbmRleCksdGhpcy5fY2hlY2tTY3JvbGxpbmdDb250cm9scygpLHRoaXMuX2FsaWduSW5rQmFyVG9TZWxlY3RlZFRhYigpLHRoaXMuX3NlbGVjdGVkSW5kZXhDaGFuZ2VkPSExLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKSx0aGlzLl9zY3JvbGxEaXN0YW5jZUNoYW5nZWQmJih0aGlzLl91cGRhdGVUYWJTY3JvbGxQb3NpdGlvbigpLHRoaXMuX3Njcm9sbERpc3RhbmNlQ2hhbmdlZD0hMSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9kZXN0cm95ZWQubmV4dCgpLHRoaXMuX2Rlc3Ryb3llZC5jb21wbGV0ZSgpLHRoaXMuX3N0b3BTY3JvbGxpbmcuY29tcGxldGUoKX1faGFuZGxlS2V5ZG93bih0KXtpZighYUkodCkpc3dpdGNoKHQua2V5Q29kZSl7Y2FzZSB0STpjYXNlIG5JOnRoaXMuZm9jdXNJbmRleCE9PXRoaXMuc2VsZWN0ZWRJbmRleCYmKHRoaXMuc2VsZWN0Rm9jdXNlZEluZGV4LmVtaXQodGhpcy5mb2N1c0luZGV4KSx0aGlzLl9pdGVtU2VsZWN0ZWQodCkpO2JyZWFrO2RlZmF1bHQ6dGhpcy5fa2V5TWFuYWdlci5vbktleWRvd24odCl9fV9vbkNvbnRlbnRDaGFuZ2VzKCl7Y29uc3QgdD10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudGV4dENvbnRlbnQ7dCE9PXRoaXMuX2N1cnJlbnRUZXh0Q29udGVudCYmKHRoaXMuX2N1cnJlbnRUZXh0Q29udGVudD10fHwiIix0aGlzLl9uZ1pvbmUucnVuKCgoKT0+e3RoaXMudXBkYXRlUGFnaW5hdGlvbigpLHRoaXMuX2FsaWduSW5rQmFyVG9TZWxlY3RlZFRhYigpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSkpKX11cGRhdGVQYWdpbmF0aW9uKCl7dGhpcy5fY2hlY2tQYWdpbmF0aW9uRW5hYmxlZCgpLHRoaXMuX2NoZWNrU2Nyb2xsaW5nQ29udHJvbHMoKSx0aGlzLl91cGRhdGVUYWJTY3JvbGxQb3NpdGlvbigpfWdldCBmb2N1c0luZGV4KCl7cmV0dXJuIHRoaXMuX2tleU1hbmFnZXI/dGhpcy5fa2V5TWFuYWdlci5hY3RpdmVJdGVtSW5kZXg6MH1zZXQgZm9jdXNJbmRleCh0KXt0aGlzLl9pc1ZhbGlkSW5kZXgodCkmJnRoaXMuZm9jdXNJbmRleCE9PXQmJnRoaXMuX2tleU1hbmFnZXImJnRoaXMuX2tleU1hbmFnZXIuc2V0QWN0aXZlSXRlbSh0KX1faXNWYWxpZEluZGV4KHQpe2lmKCF0aGlzLl9pdGVtcylyZXR1cm4hMDtjb25zdCBlPXRoaXMuX2l0ZW1zP3RoaXMuX2l0ZW1zLnRvQXJyYXkoKVt0XTpudWxsO3JldHVybiEhZSYmIWUuZGlzYWJsZWR9X3NldFRhYkZvY3VzKHQpe2lmKHRoaXMuX3Nob3dQYWdpbmF0aW9uQ29udHJvbHMmJnRoaXMuX3Njcm9sbFRvTGFiZWwodCksdGhpcy5faXRlbXMmJnRoaXMuX2l0ZW1zLmxlbmd0aCl7dGhpcy5faXRlbXMudG9BcnJheSgpW3RdLmZvY3VzKCk7Y29uc3QgZT10aGlzLl90YWJMaXN0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsbj10aGlzLl9nZXRMYXlvdXREaXJlY3Rpb24oKTtlLnNjcm9sbExlZnQ9Imx0ciI9PW4/MDplLnNjcm9sbFdpZHRoLWUub2Zmc2V0V2lkdGh9fV9nZXRMYXlvdXREaXJlY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGlyJiYicnRsIj09PXRoaXMuX2Rpci52YWx1ZT8icnRsIjoibHRyIn1fdXBkYXRlVGFiU2Nyb2xsUG9zaXRpb24oKXtpZih0aGlzLmRpc2FibGVQYWdpbmF0aW9uKXJldHVybjtjb25zdCB0PXRoaXMuc2Nyb2xsRGlzdGFuY2UsZT0ibHRyIj09PXRoaXMuX2dldExheW91dERpcmVjdGlvbigpPy10OnQ7dGhpcy5fdGFiTGlzdC5uYXRpdmVFbGVtZW50LnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlWCgke01hdGgucm91bmQoZSl9cHgpYCwodGhpcy5fcGxhdGZvcm0uVFJJREVOVHx8dGhpcy5fcGxhdGZvcm0uRURHRSkmJih0aGlzLl90YWJMaXN0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdD0wKX1nZXQgc2Nyb2xsRGlzdGFuY2UoKXtyZXR1cm4gdGhpcy5fc2Nyb2xsRGlzdGFuY2V9c2V0IHNjcm9sbERpc3RhbmNlKHQpe3RoaXMuX3Njcm9sbFRvKHQpfV9zY3JvbGxIZWFkZXIodCl7cmV0dXJuIHRoaXMuX3Njcm9sbFRvKHRoaXMuX3Njcm9sbERpc3RhbmNlKygiYmVmb3JlIj09dD8tMToxKSp0aGlzLl90YWJMaXN0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGgvMyl9X2hhbmRsZVBhZ2luYXRvckNsaWNrKHQpe3RoaXMuX3N0b3BJbnRlcnZhbCgpLHRoaXMuX3Njcm9sbEhlYWRlcih0KX1fc2Nyb2xsVG9MYWJlbCh0KXtpZih0aGlzLmRpc2FibGVQYWdpbmF0aW9uKXJldHVybjtjb25zdCBlPXRoaXMuX2l0ZW1zP3RoaXMuX2l0ZW1zLnRvQXJyYXkoKVt0XTpudWxsO2lmKCFlKXJldHVybjtjb25zdCBuPXRoaXMuX3RhYkxpc3RDb250YWluZXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCx7b2Zmc2V0TGVmdDpvLG9mZnNldFdpZHRoOml9PWUuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O2xldCBhLHI7Imx0ciI9PXRoaXMuX2dldExheW91dERpcmVjdGlvbigpPyhhPW8scj1hK2kpOihyPXRoaXMuX3RhYkxpc3QubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aC1vLGE9ci1pKTtjb25zdCBzPXRoaXMuc2Nyb2xsRGlzdGFuY2UsbD10aGlzLnNjcm9sbERpc3RhbmNlK247YTxzP3RoaXMuc2Nyb2xsRGlzdGFuY2UtPXMtYSs2MDpyPmwmJih0aGlzLnNjcm9sbERpc3RhbmNlKz1yLWwrNjApfV9jaGVja1BhZ2luYXRpb25FbmFibGVkKCl7aWYodGhpcy5kaXNhYmxlUGFnaW5hdGlvbil0aGlzLl9zaG93UGFnaW5hdGlvbkNvbnRyb2xzPSExO2Vsc2V7Y29uc3QgdD10aGlzLl90YWJMaXN0Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsV2lkdGg+dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO3R8fCh0aGlzLnNjcm9sbERpc3RhbmNlPTApLHQhPT10aGlzLl9zaG93UGFnaW5hdGlvbkNvbnRyb2xzJiZ0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSx0aGlzLl9zaG93UGFnaW5hdGlvbkNvbnRyb2xzPXR9fV9jaGVja1Njcm9sbGluZ0NvbnRyb2xzKCl7dGhpcy5kaXNhYmxlUGFnaW5hdGlvbj90aGlzLl9kaXNhYmxlU2Nyb2xsQWZ0ZXI9dGhpcy5fZGlzYWJsZVNjcm9sbEJlZm9yZT0hMDoodGhpcy5fZGlzYWJsZVNjcm9sbEJlZm9yZT0wPT10aGlzLnNjcm9sbERpc3RhbmNlLHRoaXMuX2Rpc2FibGVTY3JvbGxBZnRlcj10aGlzLnNjcm9sbERpc3RhbmNlPT10aGlzLl9nZXRNYXhTY3JvbGxEaXN0YW5jZSgpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX1fZ2V0TWF4U2Nyb2xsRGlzdGFuY2UoKXtyZXR1cm4gdGhpcy5fdGFiTGlzdC5uYXRpdmVFbGVtZW50LnNjcm9sbFdpZHRoLXRoaXMuX3RhYkxpc3RDb250YWluZXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aHx8MH1fYWxpZ25JbmtCYXJUb1NlbGVjdGVkVGFiKCl7Y29uc3QgdD10aGlzLl9pdGVtcyYmdGhpcy5faXRlbXMubGVuZ3RoP3RoaXMuX2l0ZW1zLnRvQXJyYXkoKVt0aGlzLnNlbGVjdGVkSW5kZXhdOm51bGwsZT10P3QuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Om51bGw7ZT90aGlzLl9pbmtCYXIuYWxpZ25Ub0VsZW1lbnQoZSk6dGhpcy5faW5rQmFyLmhpZGUoKX1fc3RvcEludGVydmFsKCl7dGhpcy5fc3RvcFNjcm9sbGluZy5uZXh0KCl9X2hhbmRsZVBhZ2luYXRvclByZXNzKHQsZSl7ZSYmbnVsbCE9ZS5idXR0b24mJjAhPT1lLmJ1dHRvbnx8KHRoaXMuX3N0b3BJbnRlcnZhbCgpLFp0KDY1MCwxMDApLnBpcGUodW4oV3QodGhpcy5fc3RvcFNjcm9sbGluZyx0aGlzLl9kZXN0cm95ZWQpKSkuc3Vic2NyaWJlKCgoKT0+e2NvbnN0e21heFNjcm9sbERpc3RhbmNlOmUsZGlzdGFuY2U6bn09dGhpcy5fc2Nyb2xsSGVhZGVyKHQpOygwPT09bnx8bj49ZSkmJnRoaXMuX3N0b3BJbnRlcnZhbCgpfSkpKX1fc2Nyb2xsVG8odCl7aWYodGhpcy5kaXNhYmxlUGFnaW5hdGlvbilyZXR1cm57bWF4U2Nyb2xsRGlzdGFuY2U6MCxkaXN0YW5jZTowfTtjb25zdCBlPXRoaXMuX2dldE1heFNjcm9sbERpc3RhbmNlKCk7cmV0dXJuIHRoaXMuX3Njcm9sbERpc3RhbmNlPU1hdGgubWF4KDAsTWF0aC5taW4oZSx0KSksdGhpcy5fc2Nyb2xsRGlzdGFuY2VDaGFuZ2VkPSEwLHRoaXMuX2NoZWNrU2Nyb2xsaW5nQ29udHJvbHMoKSx7bWF4U2Nyb2xsRGlzdGFuY2U6ZSxkaXN0YW5jZTp0aGlzLl9zY3JvbGxEaXN0YW5jZX19fURCLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxEQikoTXUoY2gpLE11KEhoKSxNdShRSCksTXUoTXosOCksTXUodEMpLE11KGZJKSxNdShOdyw4KSl9LERCLsm1ZGlyPUpvKHt0eXBlOkRCLGlucHV0czp7ZGlzYWJsZVBhZ2luYXRpb246ImRpc2FibGVQYWdpbmF0aW9uIn19KSxEQi5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmNofSx7dHlwZTpIaH0se3R5cGU6UUh9LHt0eXBlOk16LGRlY29yYXRvcnM6W3t0eXBlOl9zfV19LHt0eXBlOnRDfSx7dHlwZTpmSX0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltOd119XX1dLERCLnByb3BEZWNvcmF0b3JzPXtkaXNhYmxlUGFnaW5hdGlvbjpbe3R5cGU6eV99XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihEQixbe3R5cGU6Z199XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Y2h9LHt0eXBlOkhofSx7dHlwZTpRSH0se3R5cGU6TXosZGVjb3JhdG9yczpbe3R5cGU6X3N9XX0se3R5cGU6dEN9LHt0eXBlOmZJfSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W053XX1dfV19KSx7ZGlzYWJsZVBhZ2luYXRpb246W3t0eXBlOnlffV19KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIEVCIGV4dGVuZHMgREJ7Y29uc3RydWN0b3IodCxlLG4sbyxpLGEscil7c3VwZXIodCxlLG4sbyxpLGEsciksdGhpcy5fZGlzYWJsZVJpcHBsZT0hMX1nZXQgZGlzYWJsZVJpcHBsZSgpe3JldHVybiB0aGlzLl9kaXNhYmxlUmlwcGxlfXNldCBkaXNhYmxlUmlwcGxlKHQpe3RoaXMuX2Rpc2FibGVSaXBwbGU9ckkodCl9X2l0ZW1TZWxlY3RlZCh0KXt0LnByZXZlbnREZWZhdWx0KCl9fUVCLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxFQikoTXUoY2gpLE11KEhoKSxNdShRSCksTXUoTXosOCksTXUodEMpLE11KGZJKSxNdShOdyw4KSl9LEVCLsm1ZGlyPUpvKHt0eXBlOkVCLGlucHV0czp7ZGlzYWJsZVJpcHBsZToiZGlzYWJsZVJpcHBsZSJ9LGZlYXR1cmVzOltnbV19KSxFQi5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmNofSx7dHlwZTpIaH0se3R5cGU6UUh9LHt0eXBlOk16LGRlY29yYXRvcnM6W3t0eXBlOl9zfV19LHt0eXBlOnRDfSx7dHlwZTpmSX0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltOd119XX1dLEVCLnByb3BEZWNvcmF0b3JzPXtkaXNhYmxlUmlwcGxlOlt7dHlwZTp5X31dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEVCLFt7dHlwZTpnX31dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpjaH0se3R5cGU6SGh9LHt0eXBlOlFIfSx7dHlwZTpNeixkZWNvcmF0b3JzOlt7dHlwZTpfc31dfSx7dHlwZTp0Q30se3R5cGU6Zkl9LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbTnddfV19XX0pLHtkaXNhYmxlUmlwcGxlOlt7dHlwZTp5X31dfSk7Y2xhc3MgQUIgZXh0ZW5kcyBFQntjb25zdHJ1Y3Rvcih0LGUsbixvLGksYSxyKXtzdXBlcih0LGUsbixvLGksYSxyKX19QUIuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEFCKShNdShjaCksTXUoSGgpLE11KFFIKSxNdShNeiw4KSxNdSh0QyksTXUoZkkpLE11KE53LDgpKX0sQUIuybVjbXA9VW8oe3R5cGU6QUIsc2VsZWN0b3JzOltbIm1hdC10YWItaGVhZGVyIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uIHQoZSxuLG8pe2lmKDEmZSYmR2IobyxrQiwwKSwyJmUpe2xldCB0O1ViKHQ9WWIoKSkmJihuLl9pdGVtcz10KX19LHZpZXdRdWVyeTpmdW5jdGlvbiB0KGUsbil7aWYoMSZlJiYoV2Ioc0IsMyksV2IoZUIsMyksV2IobkIsMyksV2Iob0IsMSksV2IoaUIsMSkpLDImZSl7bGV0IHQ7VWIodD1ZYigpKSYmKG4uX2lua0Jhcj10LmZpcnN0KSxVYih0PVliKCkpJiYobi5fdGFiTGlzdENvbnRhaW5lcj10LmZpcnN0KSxVYih0PVliKCkpJiYobi5fdGFiTGlzdD10LmZpcnN0KSxVYih0PVliKCkpJiYobi5fbmV4dFBhZ2luYXRvcj10LmZpcnN0KSxVYih0PVliKCkpJiYobi5fcHJldmlvdXNQYWdpbmF0b3I9dC5maXJzdCl9fSxob3N0QXR0cnM6WzEsIm1hdC10YWItaGVhZGVyIl0saG9zdFZhcnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezImZSYmYWYoIm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY29udHJvbHMtZW5hYmxlZCIsbi5fc2hvd1BhZ2luYXRpb25Db250cm9scykoIm1hdC10YWItaGVhZGVyLXJ0bCIsInJ0bCI9PW4uX2dldExheW91dERpcmVjdGlvbigpKX0saW5wdXRzOntzZWxlY3RlZEluZGV4OiJzZWxlY3RlZEluZGV4In0sb3V0cHV0czp7c2VsZWN0Rm9jdXNlZEluZGV4OiJzZWxlY3RGb2N1c2VkSW5kZXgiLGluZGV4Rm9jdXNlZDoiaW5kZXhGb2N1c2VkIn0sZmVhdHVyZXM6W2dtXSxuZ0NvbnRlbnRTZWxlY3RvcnM6V0wsZGVjbHM6MTMsdmFyczo4LGNvbnN0czpbWyJhcmlhLWhpZGRlbiIsInRydWUiLCJtYXQtcmlwcGxlIiwiIiwxLCJtYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIiwibWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1iZWZvcmUiLCJtYXQtZWxldmF0aW9uLXo0IiwzLCJtYXRSaXBwbGVEaXNhYmxlZCIsImNsaWNrIiwibW91c2Vkb3duIiwidG91Y2hlbmQiXSxbInByZXZpb3VzUGFnaW5hdG9yIiwiIl0sWzEsIm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiJdLFsxLCJtYXQtdGFiLWxhYmVsLWNvbnRhaW5lciIsMywia2V5ZG93biJdLFsidGFiTGlzdENvbnRhaW5lciIsIiJdLFsicm9sZSIsInRhYmxpc3QiLDEsIm1hdC10YWItbGlzdCIsMywiY2RrT2JzZXJ2ZUNvbnRlbnQiXSxbInRhYkxpc3QiLCIiXSxbMSwibWF0LXRhYi1sYWJlbHMiXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsIm1hdC1yaXBwbGUiLCIiLDEsIm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24iLCJtYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWFmdGVyIiwibWF0LWVsZXZhdGlvbi16NCIsMywibWF0UmlwcGxlRGlzYWJsZWQiLCJtb3VzZWRvd24iLCJjbGljayIsInRvdWNoZW5kIl0sWyJuZXh0UGFnaW5hdG9yIiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihWdSgpLE91KDAsImRpdiIsMCwxKSxOdSgiY2xpY2siLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uX2hhbmRsZVBhZ2luYXRvckNsaWNrKCJiZWZvcmUiKX0pKSgibW91c2Vkb3duIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5faGFuZGxlUGFnaW5hdG9yUHJlc3MoImJlZm9yZSIsZSl9KSkoInRvdWNoZW5kIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLl9zdG9wSW50ZXJ2YWwoKX0pKSx3dSgyLCJkaXYiLDIpLFB1KCksT3UoMywiZGl2IiwzLDQpLE51KCJrZXlkb3duIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5faGFuZGxlS2V5ZG93bihlKX0pKSxPdSg1LCJkaXYiLDUsNiksTnUoImNka09ic2VydmVDb250ZW50IiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLl9vbkNvbnRlbnRDaGFuZ2VzKCl9KSksT3UoNywiZGl2Iiw3KSxqdSg4KSxQdSgpLHd1KDksIm1hdC1pbmstYmFyIiksUHUoKSxQdSgpLE91KDEwLCJkaXYiLDgsOSksTnUoIm1vdXNlZG93biIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4uX2hhbmRsZVBhZ2luYXRvclByZXNzKCJhZnRlciIsZSl9KSkoImNsaWNrIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLl9oYW5kbGVQYWdpbmF0b3JDbGljaygiYWZ0ZXIiKX0pKSgidG91Y2hlbmQiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uX3N0b3BJbnRlcnZhbCgpfSkpLHd1KDEyLCJkaXYiLDIpLFB1KCkpLDImZSYmKGFmKCJtYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIixuLl9kaXNhYmxlU2Nyb2xsQmVmb3JlKSx2dSgibWF0UmlwcGxlRGlzYWJsZWQiLG4uX2Rpc2FibGVTY3JvbGxCZWZvcmV8fG4uZGlzYWJsZVJpcHBsZSksSmMoNSksYWYoIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIiwiTm9vcEFuaW1hdGlvbnMiPT09bi5fYW5pbWF0aW9uTW9kZSksSmMoNSksYWYoIm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQiLG4uX2Rpc2FibGVTY3JvbGxBZnRlciksdnUoIm1hdFJpcHBsZURpc2FibGVkIixuLl9kaXNhYmxlU2Nyb2xsQWZ0ZXJ8fG4uZGlzYWJsZVJpcHBsZSkpfSxkaXJlY3RpdmVzOltwSCxTSSxzQl0sc3R5bGVzOlsnLm1hdC10YWItaGVhZGVye2Rpc3BsYXk6ZmxleDtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmU7ZmxleC1zaHJpbms6MH0ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbnstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpub25lO2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO21pbi13aWR0aDozMnB4O2N1cnNvcjpwb2ludGVyO3otaW5kZXg6Mjstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dG91Y2gtYWN0aW9uOm5vbmV9Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY29udHJvbHMtZW5hYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbntkaXNwbGF5OmZsZXh9Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tYmVmb3JlLC5tYXQtdGFiLWhlYWRlci1ydGwgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tYWZ0ZXJ7cGFkZGluZy1sZWZ0OjRweH0ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1iZWZvcmUgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1oZWFkZXItcnRsIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWFmdGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257dHJhbnNmb3JtOnJvdGF0ZSgtMTM1ZGVnKX0ubWF0LXRhYi1oZWFkZXItcnRsIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWJlZm9yZSwubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1hZnRlcntwYWRkaW5nLXJpZ2h0OjRweH0ubWF0LXRhYi1oZWFkZXItcnRsIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWJlZm9yZSAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWFmdGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyl9Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjJweCAycHggMCAwO2NvbnRlbnQ6IiI7aGVpZ2h0OjhweDt3aWR0aDo4cHh9Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWR7Ym94LXNoYWRvdzpub25lO2N1cnNvcjpkZWZhdWx0fS5tYXQtdGFiLWxpc3R7ZmxleC1ncm93OjE7cG9zaXRpb246cmVsYXRpdmU7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gNTAwbXMgY3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuMjUsIDEpfS5tYXQtaW5rLWJhcntwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206MDtoZWlnaHQ6MnB4O3RyYW5zaXRpb246NTAwbXMgY3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuMjUsIDEpfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZS5tYXQtaW5rLWJhcnt0cmFuc2l0aW9uOm5vbmU7YW5pbWF0aW9uOm5vbmV9Lm1hdC10YWItZ3JvdXAtaW52ZXJ0ZWQtaGVhZGVyIC5tYXQtaW5rLWJhcntib3R0b206YXV0bzt0b3A6MH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtaW5rLWJhcntvdXRsaW5lOnNvbGlkIDJweDtoZWlnaHQ6MH0ubWF0LXRhYi1sYWJlbHN7ZGlzcGxheTpmbGV4fVttYXQtYWxpZ24tdGFicz1jZW50ZXJdPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbHN7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bbWF0LWFsaWduLXRhYnM9ZW5kXT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWxze2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0ubWF0LXRhYi1sYWJlbC1jb250YWluZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZ3JvdzoxO292ZXJmbG93OmhpZGRlbjt6LWluZGV4OjF9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlLm1hdC10YWItbGlzdHt0cmFuc2l0aW9uOm5vbmU7YW5pbWF0aW9uOm5vbmV9Lm1hdC10YWItbGFiZWx7aGVpZ2h0OjQ4cHg7cGFkZGluZzowIDI0cHg7Y3Vyc29yOnBvaW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O29wYWNpdHk6LjY7bWluLXdpZHRoOjE2MHB4O3RleHQtYWxpZ246Y2VudGVyO2Rpc3BsYXk6aW5saW5lLWZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7d2hpdGUtc3BhY2U6bm93cmFwO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtdGFiLWxhYmVsOmZvY3Vze291dGxpbmU6bm9uZX0ubWF0LXRhYi1sYWJlbDpmb2N1czpub3QoLm1hdC10YWItZGlzYWJsZWQpe29wYWNpdHk6MX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtdGFiLWxhYmVsOmZvY3Vze291dGxpbmU6ZG90dGVkIDJweDtvdXRsaW5lLW9mZnNldDotMnB4fS5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHR9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVke29wYWNpdHk6LjV9Lm1hdC10YWItbGFiZWwgLm1hdC10YWItbGFiZWwtY29udGVudHtkaXNwbGF5OmlubGluZS1mbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO3doaXRlLXNwYWNlOm5vd3JhcH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtdGFiLWxhYmVse29wYWNpdHk6MX1AbWVkaWEobWF4LXdpZHRoOiA1OTlweCl7Lm1hdC10YWItbGFiZWx7bWluLXdpZHRoOjcycHh9fVxuJ10sZW5jYXBzdWxhdGlvbjoyfSksQUIuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpjaH0se3R5cGU6SGh9LHt0eXBlOlFIfSx7dHlwZTpNeixkZWNvcmF0b3JzOlt7dHlwZTpfc31dfSx7dHlwZTp0Q30se3R5cGU6Zkl9LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbTnddfV19XSxBQi5wcm9wRGVjb3JhdG9ycz17X2l0ZW1zOlt7dHlwZTp6cixhcmdzOltrQix7ZGVzY2VuZGFudHM6ITF9XX1dLF9pbmtCYXI6W3t0eXBlOkZyLGFyZ3M6W3NCLHtzdGF0aWM6ITB9XX1dLF90YWJMaXN0Q29udGFpbmVyOlt7dHlwZTpGcixhcmdzOlsidGFiTGlzdENvbnRhaW5lciIse3N0YXRpYzohMH1dfV0sX3RhYkxpc3Q6W3t0eXBlOkZyLGFyZ3M6WyJ0YWJMaXN0Iix7c3RhdGljOiEwfV19XSxfbmV4dFBhZ2luYXRvcjpbe3R5cGU6RnIsYXJnczpbIm5leHRQYWdpbmF0b3IiXX1dLF9wcmV2aW91c1BhZ2luYXRvcjpbe3R5cGU6RnIsYXJnczpbInByZXZpb3VzUGFnaW5hdG9yIl19XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihBQixbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJtYXQtdGFiLWhlYWRlciIsdGVtcGxhdGU6JzxkaXYgY2xhc3M9Im1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gbWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1iZWZvcmUgbWF0LWVsZXZhdGlvbi16NCJcbiAgICAgI3ByZXZpb3VzUGFnaW5hdG9yXG4gICAgIGFyaWEtaGlkZGVuPSJ0cnVlIlxuICAgICBtYXQtcmlwcGxlIFttYXRSaXBwbGVEaXNhYmxlZF09Il9kaXNhYmxlU2Nyb2xsQmVmb3JlIHx8IGRpc2FibGVSaXBwbGUiXG4gICAgIFtjbGFzcy5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkXT0iX2Rpc2FibGVTY3JvbGxCZWZvcmUiXG4gICAgIChjbGljayk9Il9oYW5kbGVQYWdpbmF0b3JDbGljayhcJ2JlZm9yZVwnKSJcbiAgICAgKG1vdXNlZG93bik9Il9oYW5kbGVQYWdpbmF0b3JQcmVzcyhcJ2JlZm9yZVwnLCAkZXZlbnQpIlxuICAgICAodG91Y2hlbmQpPSJfc3RvcEludGVydmFsKCkiPlxuICA8ZGl2IGNsYXNzPSJtYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24iPjwvZGl2PlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9Im1hdC10YWItbGFiZWwtY29udGFpbmVyIiAjdGFiTGlzdENvbnRhaW5lciAoa2V5ZG93bik9Il9oYW5kbGVLZXlkb3duKCRldmVudCkiPlxuICA8ZGl2XG4gICAgI3RhYkxpc3RcbiAgICBjbGFzcz0ibWF0LXRhYi1saXN0IlxuICAgIFtjbGFzcy5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZV09Il9hbmltYXRpb25Nb2RlID09PSBcJ05vb3BBbmltYXRpb25zXCciXG4gICAgcm9sZT0idGFibGlzdCJcbiAgICAoY2RrT2JzZXJ2ZUNvbnRlbnQpPSJfb25Db250ZW50Q2hhbmdlcygpIj5cbiAgICA8ZGl2IGNsYXNzPSJtYXQtdGFiLWxhYmVscyI+XG4gICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG4gICAgPG1hdC1pbmstYmFyPjwvbWF0LWluay1iYXI+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9Im1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gbWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1hZnRlciBtYXQtZWxldmF0aW9uLXo0IlxuICAgICAjbmV4dFBhZ2luYXRvclxuICAgICBhcmlhLWhpZGRlbj0idHJ1ZSJcbiAgICAgbWF0LXJpcHBsZSBbbWF0UmlwcGxlRGlzYWJsZWRdPSJfZGlzYWJsZVNjcm9sbEFmdGVyIHx8IGRpc2FibGVSaXBwbGUiXG4gICAgIFtjbGFzcy5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkXT0iX2Rpc2FibGVTY3JvbGxBZnRlciJcbiAgICAgKG1vdXNlZG93bik9Il9oYW5kbGVQYWdpbmF0b3JQcmVzcyhcJ2FmdGVyXCcsICRldmVudCkiXG4gICAgIChjbGljayk9Il9oYW5kbGVQYWdpbmF0b3JDbGljayhcJ2FmdGVyXCcpIlxuICAgICAodG91Y2hlbmQpPSJfc3RvcEludGVydmFsKCkiPlxuICA8ZGl2IGNsYXNzPSJtYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24iPjwvZGl2PlxuPC9kaXY+XG4nLGlucHV0czpbInNlbGVjdGVkSW5kZXgiXSxvdXRwdXRzOlsic2VsZWN0Rm9jdXNlZEluZGV4IiwiaW5kZXhGb2N1c2VkIl0sZW5jYXBzdWxhdGlvbjpQby5Ob25lLGNoYW5nZURldGVjdGlvbjp4by5EZWZhdWx0LGhvc3Q6e2NsYXNzOiJtYXQtdGFiLWhlYWRlciIsIltjbGFzcy5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNvbnRyb2xzLWVuYWJsZWRdIjoiX3Nob3dQYWdpbmF0aW9uQ29udHJvbHMiLCJbY2xhc3MubWF0LXRhYi1oZWFkZXItcnRsXSI6Il9nZXRMYXlvdXREaXJlY3Rpb24oKSA9PSAncnRsJyJ9LHN0eWxlczpbJy5tYXQtdGFiLWhlYWRlcntkaXNwbGF5OmZsZXg7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlO2ZsZXgtc2hyaW5rOjB9Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb257LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6bm9uZTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjttaW4td2lkdGg6MzJweDtjdXJzb3I6cG9pbnRlcjt6LWluZGV4OjI7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O3RvdWNoLWFjdGlvbjpub25lfS5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNvbnRyb2xzLWVuYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb257ZGlzcGxheTpmbGV4fS5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWJlZm9yZSwubWF0LXRhYi1oZWFkZXItcnRsIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWFmdGVye3BhZGRpbmctbGVmdDo0cHh9Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tYmVmb3JlIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItaGVhZGVyLXJ0bCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1hZnRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue3RyYW5zZm9ybTpyb3RhdGUoLTEzNWRlZyl9Lm1hdC10YWItaGVhZGVyLXJ0bCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1iZWZvcmUsLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tYWZ0ZXJ7cGFkZGluZy1yaWdodDo0cHh9Lm1hdC10YWItaGVhZGVyLXJ0bCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1iZWZvcmUgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1hZnRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpfS5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDoycHggMnB4IDAgMDtjb250ZW50OiIiO2hlaWdodDo4cHg7d2lkdGg6OHB4fS5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVke2JveC1zaGFkb3c6bm9uZTtjdXJzb3I6ZGVmYXVsdH0ubWF0LXRhYi1saXN0e2ZsZXgtZ3JvdzoxO3Bvc2l0aW9uOnJlbGF0aXZlO3RyYW5zaXRpb246dHJhbnNmb3JtIDUwMG1zIGN1YmljLWJlemllcigwLjM1LCAwLCAwLjI1LCAxKX0ubWF0LWluay1iYXJ7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjA7aGVpZ2h0OjJweDt0cmFuc2l0aW9uOjUwMG1zIGN1YmljLWJlemllcigwLjM1LCAwLCAwLjI1LCAxKX0uX21hdC1hbmltYXRpb24tbm9vcGFibGUubWF0LWluay1iYXJ7dHJhbnNpdGlvbjpub25lO2FuaW1hdGlvbjpub25lfS5tYXQtdGFiLWdyb3VwLWludmVydGVkLWhlYWRlciAubWF0LWluay1iYXJ7Ym90dG9tOmF1dG87dG9wOjB9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWluay1iYXJ7b3V0bGluZTpzb2xpZCAycHg7aGVpZ2h0OjB9Lm1hdC10YWItbGFiZWxze2Rpc3BsYXk6ZmxleH1bbWF0LWFsaWduLXRhYnM9Y2VudGVyXT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWxze2p1c3RpZnktY29udGVudDpjZW50ZXJ9W21hdC1hbGlnbi10YWJzPWVuZF0+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsc3tqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9Lm1hdC10YWItbGFiZWwtY29udGFpbmVye2Rpc3BsYXk6ZmxleDtmbGV4LWdyb3c6MTtvdmVyZmxvdzpoaWRkZW47ei1pbmRleDoxfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZS5tYXQtdGFiLWxpc3R7dHJhbnNpdGlvbjpub25lO2FuaW1hdGlvbjpub25lfS5tYXQtdGFiLWxhYmVse2hlaWdodDo0OHB4O3BhZGRpbmc6MCAyNHB4O2N1cnNvcjpwb2ludGVyO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvcGFjaXR5Oi42O21pbi13aWR0aDoxNjBweDt0ZXh0LWFsaWduOmNlbnRlcjtkaXNwbGF5OmlubGluZS1mbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO3doaXRlLXNwYWNlOm5vd3JhcDtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXRhYi1sYWJlbDpmb2N1c3tvdXRsaW5lOm5vbmV9Lm1hdC10YWItbGFiZWw6Zm9jdXM6bm90KC5tYXQtdGFiLWRpc2FibGVkKXtvcGFjaXR5OjF9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXRhYi1sYWJlbDpmb2N1c3tvdXRsaW5lOmRvdHRlZCAycHg7b3V0bGluZS1vZmZzZXQ6LTJweH0ubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZHtvcGFjaXR5Oi41fS5tYXQtdGFiLWxhYmVsIC5tYXQtdGFiLWxhYmVsLWNvbnRlbnR7ZGlzcGxheTppbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXB9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXRhYi1sYWJlbHtvcGFjaXR5OjF9QG1lZGlhKG1heC13aWR0aDogNTk5cHgpey5tYXQtdGFiLWxhYmVse21pbi13aWR0aDo3MnB4fX1cbiddfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Y2h9LHt0eXBlOkhofSx7dHlwZTpRSH0se3R5cGU6TXosZGVjb3JhdG9yczpbe3R5cGU6X3N9XX0se3R5cGU6dEN9LHt0eXBlOmZJfSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W053XX1dfV19KSx7X2l0ZW1zOlt7dHlwZTp6cixhcmdzOltrQix7ZGVzY2VuZGFudHM6ITF9XX1dLF9pbmtCYXI6W3t0eXBlOkZyLGFyZ3M6W3NCLHtzdGF0aWM6ITB9XX1dLF90YWJMaXN0Q29udGFpbmVyOlt7dHlwZTpGcixhcmdzOlsidGFiTGlzdENvbnRhaW5lciIse3N0YXRpYzohMH1dfV0sX3RhYkxpc3Q6W3t0eXBlOkZyLGFyZ3M6WyJ0YWJMaXN0Iix7c3RhdGljOiEwfV19XSxfbmV4dFBhZ2luYXRvcjpbe3R5cGU6RnIsYXJnczpbIm5leHRQYWdpbmF0b3IiXX1dLF9wcmV2aW91c1BhZ2luYXRvcjpbe3R5cGU6RnIsYXJnczpbInByZXZpb3VzUGFnaW5hdG9yIl19XX0pOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3MgUkIgZXh0ZW5kcyBEQntjb25zdHJ1Y3Rvcih0LGUsbixvLGksYSxyKXtzdXBlcih0LG8saSxlLG4sYSxyKSx0aGlzLl9kaXNhYmxlUmlwcGxlPSExLHRoaXMuY29sb3I9InByaW1hcnkifWdldCBiYWNrZ3JvdW5kQ29sb3IoKXtyZXR1cm4gdGhpcy5fYmFja2dyb3VuZENvbG9yfXNldCBiYWNrZ3JvdW5kQ29sb3IodCl7Y29uc3QgZT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0O2UucmVtb3ZlKGBtYXQtYmFja2dyb3VuZC0ke3RoaXMuYmFja2dyb3VuZENvbG9yfWApLHQmJmUuYWRkKGBtYXQtYmFja2dyb3VuZC0ke3R9YCksdGhpcy5fYmFja2dyb3VuZENvbG9yPXR9Z2V0IGRpc2FibGVSaXBwbGUoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZVJpcHBsZX1zZXQgZGlzYWJsZVJpcHBsZSh0KXt0aGlzLl9kaXNhYmxlUmlwcGxlPXJJKHQpfV9pdGVtU2VsZWN0ZWQoKXt9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5faXRlbXMuY2hhbmdlcy5waXBlKGNuKG51bGwpLHVuKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKCk9Pnt0aGlzLnVwZGF0ZUFjdGl2ZUxpbmsoKX0pKSxzdXBlci5uZ0FmdGVyQ29udGVudEluaXQoKX11cGRhdGVBY3RpdmVMaW5rKCl7aWYoIXRoaXMuX2l0ZW1zKXJldHVybjtjb25zdCB0PXRoaXMuX2l0ZW1zLnRvQXJyYXkoKTtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKylpZih0W2VdLmFjdGl2ZSlyZXR1cm4gdGhpcy5zZWxlY3RlZEluZGV4PWUsdm9pZCB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTt0aGlzLnNlbGVjdGVkSW5kZXg9LTEsdGhpcy5faW5rQmFyLmhpZGUoKX19UkIuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFJCKShNdShjaCksTXUoTXosOCksTXUodEMpLE11KEhoKSxNdShRSCksTXUoZkkpLE11KE53LDgpKX0sUkIuybVkaXI9Sm8oe3R5cGU6UkIsaW5wdXRzOntjb2xvcjoiY29sb3IiLGJhY2tncm91bmRDb2xvcjoiYmFja2dyb3VuZENvbG9yIixkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIn0sZmVhdHVyZXM6W2dtXX0pLFJCLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6Y2h9LHt0eXBlOk16LGRlY29yYXRvcnM6W3t0eXBlOl9zfV19LHt0eXBlOnRDfSx7dHlwZTpIaH0se3R5cGU6UUh9LHt0eXBlOmZJfSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W053XX1dfV0sUkIucHJvcERlY29yYXRvcnM9e2JhY2tncm91bmRDb2xvcjpbe3R5cGU6eV99XSxkaXNhYmxlUmlwcGxlOlt7dHlwZTp5X31dLGNvbG9yOlt7dHlwZTp5X31dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFJCLFt7dHlwZTpnX31dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpjaH0se3R5cGU6TXosZGVjb3JhdG9yczpbe3R5cGU6X3N9XX0se3R5cGU6dEN9LHt0eXBlOkhofSx7dHlwZTpRSH0se3R5cGU6Zkl9LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbTnddfV19XX0pLHtjb2xvcjpbe3R5cGU6eV99XSxiYWNrZ3JvdW5kQ29sb3I6W3t0eXBlOnlffV0sZGlzYWJsZVJpcHBsZTpbe3R5cGU6eV99XX0pO2NsYXNzIFRCIGV4dGVuZHMgUkJ7Y29uc3RydWN0b3IodCxlLG4sbyxpLGEscil7c3VwZXIodCxlLG4sbyxpLGEscil9fVRCLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxUQikoTXUoY2gpLE11KE16LDgpLE11KHRDKSxNdShIaCksTXUoUUgpLE11KGZJKSxNdShOdyw4KSl9LFRCLsm1Y21wPVVvKHt0eXBlOlRCLHNlbGVjdG9yczpbWyIiLCJtYXQtdGFiLW5hdi1iYXIiLCIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24gdChlLG4sbyl7aWYoMSZlJiZHYihvLHpCLDEpLDImZSl7bGV0IHQ7VWIodD1ZYigpKSYmKG4uX2l0ZW1zPXQpfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJihXYihzQiwzKSxXYihlQiwzKSxXYihuQiwzKSxXYihvQiwxKSxXYihpQiwxKSksMiZlKXtsZXQgdDtVYih0PVliKCkpJiYobi5faW5rQmFyPXQuZmlyc3QpLFViKHQ9WWIoKSkmJihuLl90YWJMaXN0Q29udGFpbmVyPXQuZmlyc3QpLFViKHQ9WWIoKSkmJihuLl90YWJMaXN0PXQuZmlyc3QpLFViKHQ9WWIoKSkmJihuLl9uZXh0UGFnaW5hdG9yPXQuZmlyc3QpLFViKHQ9WWIoKSkmJihuLl9wcmV2aW91c1BhZ2luYXRvcj10LmZpcnN0KX19LGhvc3RBdHRyczpbMSwibWF0LXRhYi1uYXYtYmFyIiwibWF0LXRhYi1oZWFkZXIiXSxob3N0VmFyczoxMCxob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezImZSYmYWYoIm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY29udHJvbHMtZW5hYmxlZCIsbi5fc2hvd1BhZ2luYXRpb25Db250cm9scykoIm1hdC10YWItaGVhZGVyLXJ0bCIsInJ0bCI9PW4uX2dldExheW91dERpcmVjdGlvbigpKSgibWF0LXByaW1hcnkiLCJ3YXJuIiE9PW4uY29sb3ImJiJhY2NlbnQiIT09bi5jb2xvcikoIm1hdC1hY2NlbnQiLCJhY2NlbnQiPT09bi5jb2xvcikoIm1hdC13YXJuIiwid2FybiI9PT1uLmNvbG9yKX0saW5wdXRzOntjb2xvcjoiY29sb3IifSxleHBvcnRBczpbIm1hdFRhYk5hdkJhciIsIm1hdFRhYk5hdiJdLGZlYXR1cmVzOltnbV0sYXR0cnM6WyJtYXQtdGFiLW5hdi1iYXIiLCIiXSxuZ0NvbnRlbnRTZWxlY3RvcnM6V0wsZGVjbHM6MTMsdmFyczo4LGNvbnN0czpbWyJhcmlhLWhpZGRlbiIsInRydWUiLCJtYXQtcmlwcGxlIiwiIiwxLCJtYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIiwibWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1iZWZvcmUiLCJtYXQtZWxldmF0aW9uLXo0IiwzLCJtYXRSaXBwbGVEaXNhYmxlZCIsImNsaWNrIiwibW91c2Vkb3duIiwidG91Y2hlbmQiXSxbInByZXZpb3VzUGFnaW5hdG9yIiwiIl0sWzEsIm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiJdLFsxLCJtYXQtdGFiLWxpbmstY29udGFpbmVyIiwzLCJrZXlkb3duIl0sWyJ0YWJMaXN0Q29udGFpbmVyIiwiIl0sWzEsIm1hdC10YWItbGlzdCIsMywiY2RrT2JzZXJ2ZUNvbnRlbnQiXSxbInRhYkxpc3QiLCIiXSxbMSwibWF0LXRhYi1saW5rcyJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwibWF0LXJpcHBsZSIsIiIsMSwibWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiIsIm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tYWZ0ZXIiLCJtYXQtZWxldmF0aW9uLXo0IiwzLCJtYXRSaXBwbGVEaXNhYmxlZCIsIm1vdXNlZG93biIsImNsaWNrIiwidG91Y2hlbmQiXSxbIm5leHRQYWdpbmF0b3IiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKFZ1KCksT3UoMCwiZGl2IiwwLDEpLE51KCJjbGljayIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5faGFuZGxlUGFnaW5hdG9yQ2xpY2soImJlZm9yZSIpfSkpKCJtb3VzZWRvd24iLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLl9oYW5kbGVQYWdpbmF0b3JQcmVzcygiYmVmb3JlIixlKX0pKSgidG91Y2hlbmQiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uX3N0b3BJbnRlcnZhbCgpfSkpLHd1KDIsImRpdiIsMiksUHUoKSxPdSgzLCJkaXYiLDMsNCksTnUoImtleWRvd24iLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLl9oYW5kbGVLZXlkb3duKGUpfSkpLE91KDUsImRpdiIsNSw2KSxOdSgiY2RrT2JzZXJ2ZUNvbnRlbnQiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uX29uQ29udGVudENoYW5nZXMoKX0pKSxPdSg3LCJkaXYiLDcpLGp1KDgpLFB1KCksd3UoOSwibWF0LWluay1iYXIiKSxQdSgpLFB1KCksT3UoMTAsImRpdiIsOCw5KSxOdSgibW91c2Vkb3duIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5faGFuZGxlUGFnaW5hdG9yUHJlc3MoImFmdGVyIixlKX0pKSgiY2xpY2siLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uX2hhbmRsZVBhZ2luYXRvckNsaWNrKCJhZnRlciIpfSkpKCJ0b3VjaGVuZCIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5fc3RvcEludGVydmFsKCl9KSksd3UoMTIsImRpdiIsMiksUHUoKSksMiZlJiYoYWYoIm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQiLG4uX2Rpc2FibGVTY3JvbGxCZWZvcmUpLHZ1KCJtYXRSaXBwbGVEaXNhYmxlZCIsbi5fZGlzYWJsZVNjcm9sbEJlZm9yZXx8bi5kaXNhYmxlUmlwcGxlKSxKYyg1KSxhZigiX21hdC1hbmltYXRpb24tbm9vcGFibGUiLCJOb29wQW5pbWF0aW9ucyI9PT1uLl9hbmltYXRpb25Nb2RlKSxKYyg1KSxhZigibWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCIsbi5fZGlzYWJsZVNjcm9sbEFmdGVyKSx2dSgibWF0UmlwcGxlRGlzYWJsZWQiLG4uX2Rpc2FibGVTY3JvbGxBZnRlcnx8bi5kaXNhYmxlUmlwcGxlKSl9LGRpcmVjdGl2ZXM6W3BILFNJLHNCXSxzdHlsZXM6WycubWF0LXRhYi1oZWFkZXJ7ZGlzcGxheTpmbGV4O292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZTtmbGV4LXNocmluazowfS5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5Om5vbmU7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7bWluLXdpZHRoOjMycHg7Y3Vyc29yOnBvaW50ZXI7ei1pbmRleDoyOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDt0b3VjaC1hY3Rpb246bm9uZX0ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jb250cm9scy1lbmFibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9ue2Rpc3BsYXk6ZmxleH0ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1iZWZvcmUsLm1hdC10YWItaGVhZGVyLXJ0bCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1hZnRlcntwYWRkaW5nLWxlZnQ6NHB4fS5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWJlZm9yZSAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLWhlYWRlci1ydGwgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tYWZ0ZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbnt0cmFuc2Zvcm06cm90YXRlKC0xMzVkZWcpfS5tYXQtdGFiLWhlYWRlci1ydGwgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tYmVmb3JlLC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWFmdGVye3BhZGRpbmctcmlnaHQ6NHB4fS5tYXQtdGFiLWhlYWRlci1ydGwgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tYmVmb3JlIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tYWZ0ZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbnt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKX0ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6MnB4IDJweCAwIDA7Y29udGVudDoiIjtoZWlnaHQ6OHB4O3dpZHRoOjhweH0ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZHtib3gtc2hhZG93Om5vbmU7Y3Vyc29yOmRlZmF1bHR9Lm1hdC10YWItbGlzdHtmbGV4LWdyb3c6MTtwb3NpdGlvbjpyZWxhdGl2ZTt0cmFuc2l0aW9uOnRyYW5zZm9ybSA1MDBtcyBjdWJpYy1iZXppZXIoMC4zNSwgMCwgMC4yNSwgMSl9Lm1hdC10YWItbGlua3N7ZGlzcGxheTpmbGV4fVttYXQtYWxpZ24tdGFicz1jZW50ZXJdPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmtze2p1c3RpZnktY29udGVudDpjZW50ZXJ9W21hdC1hbGlnbi10YWJzPWVuZF0+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGlua3N7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5tYXQtaW5rLWJhcntwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206MDtoZWlnaHQ6MnB4O3RyYW5zaXRpb246NTAwbXMgY3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuMjUsIDEpfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZS5tYXQtaW5rLWJhcnt0cmFuc2l0aW9uOm5vbmU7YW5pbWF0aW9uOm5vbmV9Lm1hdC10YWItZ3JvdXAtaW52ZXJ0ZWQtaGVhZGVyIC5tYXQtaW5rLWJhcntib3R0b206YXV0bzt0b3A6MH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtaW5rLWJhcntvdXRsaW5lOnNvbGlkIDJweDtoZWlnaHQ6MH0ubWF0LXRhYi1saW5rLWNvbnRhaW5lcntkaXNwbGF5OmZsZXg7ZmxleC1ncm93OjE7b3ZlcmZsb3c6aGlkZGVuO3otaW5kZXg6MX0ubWF0LXRhYi1saW5re2hlaWdodDo0OHB4O3BhZGRpbmc6MCAyNHB4O2N1cnNvcjpwb2ludGVyO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvcGFjaXR5Oi42O21pbi13aWR0aDoxNjBweDt0ZXh0LWFsaWduOmNlbnRlcjtkaXNwbGF5OmlubGluZS1mbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO3doaXRlLXNwYWNlOm5vd3JhcDt2ZXJ0aWNhbC1hbGlnbjp0b3A7dGV4dC1kZWNvcmF0aW9uOm5vbmU7cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6aGlkZGVuOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudH0ubWF0LXRhYi1saW5rOmZvY3Vze291dGxpbmU6bm9uZX0ubWF0LXRhYi1saW5rOmZvY3VzOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC10YWItbGluazpmb2N1c3tvdXRsaW5lOmRvdHRlZCAycHg7b3V0bGluZS1vZmZzZXQ6LTJweH0ubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHR9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7b3BhY2l0eTouNX0ubWF0LXRhYi1saW5rIC5tYXQtdGFiLWxhYmVsLWNvbnRlbnR7ZGlzcGxheTppbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXB9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXRhYi1saW5re29wYWNpdHk6MX1bbWF0LXN0cmV0Y2gtdGFic10gLm1hdC10YWItbGlua3tmbGV4LWJhc2lzOjA7ZmxleC1ncm93OjF9Lm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVke3BvaW50ZXItZXZlbnRzOm5vbmV9QG1lZGlhKG1heC13aWR0aDogNTk5cHgpey5tYXQtdGFiLWxpbmt7bWluLXdpZHRoOjcycHh9fVxuJ10sZW5jYXBzdWxhdGlvbjoyfSksVEIuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpjaH0se3R5cGU6TXosZGVjb3JhdG9yczpbe3R5cGU6X3N9XX0se3R5cGU6dEN9LHt0eXBlOkhofSx7dHlwZTpRSH0se3R5cGU6Zkl9LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbTnddfV19XSxUQi5wcm9wRGVjb3JhdG9ycz17X2l0ZW1zOlt7dHlwZTp6cixhcmdzOltJbigoKCk9PnpCKSkse2Rlc2NlbmRhbnRzOiEwfV19XSxfaW5rQmFyOlt7dHlwZTpGcixhcmdzOltzQix7c3RhdGljOiEwfV19XSxfdGFiTGlzdENvbnRhaW5lcjpbe3R5cGU6RnIsYXJnczpbInRhYkxpc3RDb250YWluZXIiLHtzdGF0aWM6ITB9XX1dLF90YWJMaXN0Olt7dHlwZTpGcixhcmdzOlsidGFiTGlzdCIse3N0YXRpYzohMH1dfV0sX25leHRQYWdpbmF0b3I6W3t0eXBlOkZyLGFyZ3M6WyJuZXh0UGFnaW5hdG9yIl19XSxfcHJldmlvdXNQYWdpbmF0b3I6W3t0eXBlOkZyLGFyZ3M6WyJwcmV2aW91c1BhZ2luYXRvciJdfV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoVEIsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoiW21hdC10YWItbmF2LWJhcl0iLGV4cG9ydEFzOiJtYXRUYWJOYXZCYXIsIG1hdFRhYk5hdiIsaW5wdXRzOlsiY29sb3IiXSx0ZW1wbGF0ZTonPGRpdiBjbGFzcz0ibWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiBtYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWJlZm9yZSBtYXQtZWxldmF0aW9uLXo0IlxuICAgICAjcHJldmlvdXNQYWdpbmF0b3JcbiAgICAgYXJpYS1oaWRkZW49InRydWUiXG4gICAgIG1hdC1yaXBwbGUgW21hdFJpcHBsZURpc2FibGVkXT0iX2Rpc2FibGVTY3JvbGxCZWZvcmUgfHwgZGlzYWJsZVJpcHBsZSJcbiAgICAgW2NsYXNzLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWRdPSJfZGlzYWJsZVNjcm9sbEJlZm9yZSJcbiAgICAgKGNsaWNrKT0iX2hhbmRsZVBhZ2luYXRvckNsaWNrKFwnYmVmb3JlXCcpIlxuICAgICAobW91c2Vkb3duKT0iX2hhbmRsZVBhZ2luYXRvclByZXNzKFwnYmVmb3JlXCcsICRldmVudCkiXG4gICAgICh0b3VjaGVuZCk9Il9zdG9wSW50ZXJ2YWwoKSI+XG4gIDxkaXYgY2xhc3M9Im1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiI+PC9kaXY+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz0ibWF0LXRhYi1saW5rLWNvbnRhaW5lciIgI3RhYkxpc3RDb250YWluZXIgKGtleWRvd24pPSJfaGFuZGxlS2V5ZG93bigkZXZlbnQpIj5cbiAgPGRpdlxuICAgIGNsYXNzPSJtYXQtdGFiLWxpc3QiXG4gICAgW2NsYXNzLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlXT0iX2FuaW1hdGlvbk1vZGUgPT09IFwnTm9vcEFuaW1hdGlvbnNcJyJcbiAgICAjdGFiTGlzdFxuICAgIChjZGtPYnNlcnZlQ29udGVudCk9Il9vbkNvbnRlbnRDaGFuZ2VzKCkiPlxuICAgIDxkaXYgY2xhc3M9Im1hdC10YWItbGlua3MiPlxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICAgIDxtYXQtaW5rLWJhcj48L21hdC1pbmstYmFyPlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPSJtYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIG1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tYWZ0ZXIgbWF0LWVsZXZhdGlvbi16NCJcbiAgICAgI25leHRQYWdpbmF0b3JcbiAgICAgYXJpYS1oaWRkZW49InRydWUiXG4gICAgIG1hdC1yaXBwbGUgW21hdFJpcHBsZURpc2FibGVkXT0iX2Rpc2FibGVTY3JvbGxBZnRlciB8fCBkaXNhYmxlUmlwcGxlIlxuICAgICBbY2xhc3MubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZF09Il9kaXNhYmxlU2Nyb2xsQWZ0ZXIiXG4gICAgIChtb3VzZWRvd24pPSJfaGFuZGxlUGFnaW5hdG9yUHJlc3MoXCdhZnRlclwnLCAkZXZlbnQpIlxuICAgICAoY2xpY2spPSJfaGFuZGxlUGFnaW5hdG9yQ2xpY2soXCdhZnRlclwnKSJcbiAgICAgKHRvdWNoZW5kKT0iX3N0b3BJbnRlcnZhbCgpIj5cbiAgPGRpdiBjbGFzcz0ibWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uIj48L2Rpdj5cbjwvZGl2PlxuJyxob3N0OntjbGFzczoibWF0LXRhYi1uYXYtYmFyIG1hdC10YWItaGVhZGVyIiwiW2NsYXNzLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY29udHJvbHMtZW5hYmxlZF0iOiJfc2hvd1BhZ2luYXRpb25Db250cm9scyIsIltjbGFzcy5tYXQtdGFiLWhlYWRlci1ydGxdIjoiX2dldExheW91dERpcmVjdGlvbigpID09ICdydGwnIiwiW2NsYXNzLm1hdC1wcmltYXJ5XSI6J2NvbG9yICE9PSAid2FybiIgJiYgY29sb3IgIT09ICJhY2NlbnQiJywiW2NsYXNzLm1hdC1hY2NlbnRdIjonY29sb3IgPT09ICJhY2NlbnQiJywiW2NsYXNzLm1hdC13YXJuXSI6J2NvbG9yID09PSAid2FybiInfSxlbmNhcHN1bGF0aW9uOlBvLk5vbmUsY2hhbmdlRGV0ZWN0aW9uOnhvLkRlZmF1bHQsc3R5bGVzOlsnLm1hdC10YWItaGVhZGVye2Rpc3BsYXk6ZmxleDtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmU7ZmxleC1zaHJpbms6MH0ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbnstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpub25lO2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO21pbi13aWR0aDozMnB4O2N1cnNvcjpwb2ludGVyO3otaW5kZXg6Mjstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dG91Y2gtYWN0aW9uOm5vbmV9Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY29udHJvbHMtZW5hYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbntkaXNwbGF5OmZsZXh9Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tYmVmb3JlLC5tYXQtdGFiLWhlYWRlci1ydGwgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tYWZ0ZXJ7cGFkZGluZy1sZWZ0OjRweH0ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1iZWZvcmUgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1oZWFkZXItcnRsIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWFmdGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257dHJhbnNmb3JtOnJvdGF0ZSgtMTM1ZGVnKX0ubWF0LXRhYi1oZWFkZXItcnRsIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWJlZm9yZSwubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1hZnRlcntwYWRkaW5nLXJpZ2h0OjRweH0ubWF0LXRhYi1oZWFkZXItcnRsIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWJlZm9yZSAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWFmdGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyl9Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjJweCAycHggMCAwO2NvbnRlbnQ6IiI7aGVpZ2h0OjhweDt3aWR0aDo4cHh9Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWR7Ym94LXNoYWRvdzpub25lO2N1cnNvcjpkZWZhdWx0fS5tYXQtdGFiLWxpc3R7ZmxleC1ncm93OjE7cG9zaXRpb246cmVsYXRpdmU7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gNTAwbXMgY3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuMjUsIDEpfS5tYXQtdGFiLWxpbmtze2Rpc3BsYXk6ZmxleH1bbWF0LWFsaWduLXRhYnM9Y2VudGVyXT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rc3tqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVttYXQtYWxpZ24tdGFicz1lbmRdPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmtze2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0ubWF0LWluay1iYXJ7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjA7aGVpZ2h0OjJweDt0cmFuc2l0aW9uOjUwMG1zIGN1YmljLWJlemllcigwLjM1LCAwLCAwLjI1LCAxKX0uX21hdC1hbmltYXRpb24tbm9vcGFibGUubWF0LWluay1iYXJ7dHJhbnNpdGlvbjpub25lO2FuaW1hdGlvbjpub25lfS5tYXQtdGFiLWdyb3VwLWludmVydGVkLWhlYWRlciAubWF0LWluay1iYXJ7Ym90dG9tOmF1dG87dG9wOjB9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWluay1iYXJ7b3V0bGluZTpzb2xpZCAycHg7aGVpZ2h0OjB9Lm1hdC10YWItbGluay1jb250YWluZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZ3JvdzoxO292ZXJmbG93OmhpZGRlbjt6LWluZGV4OjF9Lm1hdC10YWItbGlua3toZWlnaHQ6NDhweDtwYWRkaW5nOjAgMjRweDtjdXJzb3I6cG9pbnRlcjtib3gtc2l6aW5nOmJvcmRlci1ib3g7b3BhY2l0eTouNjttaW4td2lkdGg6MTYwcHg7dGV4dC1hbGlnbjpjZW50ZXI7ZGlzcGxheTppbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXA7dmVydGljYWwtYWxpZ246dG9wO3RleHQtZGVjb3JhdGlvbjpub25lO3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbjstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnR9Lm1hdC10YWItbGluazpmb2N1c3tvdXRsaW5lOm5vbmV9Lm1hdC10YWItbGluazpmb2N1czpub3QoLm1hdC10YWItZGlzYWJsZWQpe29wYWNpdHk6MX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtdGFiLWxpbms6Zm9jdXN7b3V0bGluZTpkb3R0ZWQgMnB4O291dGxpbmUtb2Zmc2V0Oi0ycHh9Lm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVke29wYWNpdHk6LjV9Lm1hdC10YWItbGluayAubWF0LXRhYi1sYWJlbC1jb250ZW50e2Rpc3BsYXk6aW5saW5lLWZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7d2hpdGUtc3BhY2U6bm93cmFwfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC10YWItbGlua3tvcGFjaXR5OjF9W21hdC1zdHJldGNoLXRhYnNdIC5tYXQtdGFiLWxpbmt7ZmxleC1iYXNpczowO2ZsZXgtZ3JvdzoxfS5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZHtwb2ludGVyLWV2ZW50czpub25lfUBtZWRpYShtYXgtd2lkdGg6IDU5OXB4KXsubWF0LXRhYi1saW5re21pbi13aWR0aDo3MnB4fX1cbiddfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Y2h9LHt0eXBlOk16LGRlY29yYXRvcnM6W3t0eXBlOl9zfV19LHt0eXBlOnRDfSx7dHlwZTpIaH0se3R5cGU6UUh9LHt0eXBlOmZJfSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W053XX1dfV19KSx7X2l0ZW1zOlt7dHlwZTp6cixhcmdzOltJbigoKCk9PnpCKSkse2Rlc2NlbmRhbnRzOiEwfV19XSxfaW5rQmFyOlt7dHlwZTpGcixhcmdzOltzQix7c3RhdGljOiEwfV19XSxfdGFiTGlzdENvbnRhaW5lcjpbe3R5cGU6RnIsYXJnczpbInRhYkxpc3RDb250YWluZXIiLHtzdGF0aWM6ITB9XX1dLF90YWJMaXN0Olt7dHlwZTpGcixhcmdzOlsidGFiTGlzdCIse3N0YXRpYzohMH1dfV0sX25leHRQYWdpbmF0b3I6W3t0eXBlOkZyLGFyZ3M6WyJuZXh0UGFnaW5hdG9yIl19XSxfcHJldmlvdXNQYWdpbmF0b3I6W3t0eXBlOkZyLGFyZ3M6WyJwcmV2aW91c1BhZ2luYXRvciJdfV19KTtjb25zdCBOQj1Ieih6eihOeihjbGFzc3t9KSkpO2NsYXNzIElCIGV4dGVuZHMgTkJ7Y29uc3RydWN0b3IodCxlLG4sbyxpLGEpe3N1cGVyKCksdGhpcy5fdGFiTmF2QmFyPXQsdGhpcy5lbGVtZW50UmVmPWUsdGhpcy5fZm9jdXNNb25pdG9yPWksdGhpcy5faXNBY3RpdmU9ITEsdGhpcy5yaXBwbGVDb25maWc9bnx8e30sdGhpcy50YWJJbmRleD1wYXJzZUludChvKXx8MCwiTm9vcEFuaW1hdGlvbnMiPT09YSYmKHRoaXMucmlwcGxlQ29uZmlnLmFuaW1hdGlvbj17ZW50ZXJEdXJhdGlvbjowLGV4aXREdXJhdGlvbjowfSl9Z2V0IGFjdGl2ZSgpe3JldHVybiB0aGlzLl9pc0FjdGl2ZX1zZXQgYWN0aXZlKHQpe3JJKHQpIT09dGhpcy5faXNBY3RpdmUmJih0aGlzLl9pc0FjdGl2ZT10LHRoaXMuX3RhYk5hdkJhci51cGRhdGVBY3RpdmVMaW5rKCkpfWdldCByaXBwbGVEaXNhYmxlZCgpe3JldHVybiB0aGlzLmRpc2FibGVkfHx0aGlzLmRpc2FibGVSaXBwbGV8fHRoaXMuX3RhYk5hdkJhci5kaXNhYmxlUmlwcGxlfHwhIXRoaXMucmlwcGxlQ29uZmlnLmRpc2FibGVkfWZvY3VzKCl7dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9mb2N1c01vbml0b3IubW9uaXRvcih0aGlzLmVsZW1lbnRSZWYpfW5nT25EZXN0cm95KCl7dGhpcy5fZm9jdXNNb25pdG9yLnN0b3BNb25pdG9yaW5nKHRoaXMuZWxlbWVudFJlZil9fUlCLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxJQikoTXUoUkIpLE11KGNoKSxNdShkSCw4KSxPcigidGFiaW5kZXgiKSxNdShweiksTXUoTncsOCkpfSxJQi7JtWRpcj1Kbyh7dHlwZTpJQixpbnB1dHM6e2FjdGl2ZToiYWN0aXZlIn0sZmVhdHVyZXM6W2dtXX0pLElCLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6UkJ9LHt0eXBlOmNofSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W2RIXX1dfSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6UnIsYXJnczpbInRhYmluZGV4Il19XX0se3R5cGU6cHp9LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbTnddfV19XSxJQi5wcm9wRGVjb3JhdG9ycz17YWN0aXZlOlt7dHlwZTp5X31dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKElCLFt7dHlwZTpnX31dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpSQn0se3R5cGU6Y2h9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbZEhdfV19LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpScixhcmdzOlsidGFiaW5kZXgiXX1dfSx7dHlwZTpwen0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltOd119XX1dfSkse2FjdGl2ZTpbe3R5cGU6eV99XX0pO2NsYXNzIHpCIGV4dGVuZHMgSUJ7Y29uc3RydWN0b3IodCxlLG4sbyxpLGEscixzKXtzdXBlcih0LGUsaSxhLHIscyksdGhpcy5fdGFiTGlua1JpcHBsZT1uZXcgY0godGhpcyxuLGUsbyksdGhpcy5fdGFiTGlua1JpcHBsZS5zZXR1cFRyaWdnZXJFdmVudHMoZS5uYXRpdmVFbGVtZW50KX1uZ09uRGVzdHJveSgpe3N1cGVyLm5nT25EZXN0cm95KCksdGhpcy5fdGFiTGlua1JpcHBsZS5fcmVtb3ZlVHJpZ2dlckV2ZW50cygpfX16Qi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8ekIpKE11KFRCKSxNdShjaCksTXUodEMpLE11KGZJKSxNdShkSCw4KSxPcigidGFiaW5kZXgiKSxNdShweiksTXUoTncsOCkpfSx6Qi7JtWRpcj1Kbyh7dHlwZTp6QixzZWxlY3RvcnM6W1siIiwibWF0LXRhYi1saW5rIiwiIl0sWyIiLCJtYXRUYWJMaW5rIiwiIl1dLGhvc3RBdHRyczpbMSwibWF0LXRhYi1saW5rIiwibWF0LWZvY3VzLWluZGljYXRvciJdLGhvc3RWYXJzOjcsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsyJmUmJihObSgiYXJpYS1jdXJyZW50IixuLmFjdGl2ZT8icGFnZSI6bnVsbCkoImFyaWEtZGlzYWJsZWQiLG4uZGlzYWJsZWQpKCJ0YWJJbmRleCIsbi50YWJJbmRleCksYWYoIm1hdC10YWItZGlzYWJsZWQiLG4uZGlzYWJsZWQpKCJtYXQtdGFiLWxhYmVsLWFjdGl2ZSIsbi5hY3RpdmUpKX0saW5wdXRzOntkaXNhYmxlZDoiZGlzYWJsZWQiLGRpc2FibGVSaXBwbGU6ImRpc2FibGVSaXBwbGUiLHRhYkluZGV4OiJ0YWJJbmRleCJ9LGV4cG9ydEFzOlsibWF0VGFiTGluayJdLGZlYXR1cmVzOltnbV19KSx6Qi5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOlRCfSx7dHlwZTpjaH0se3R5cGU6dEN9LHt0eXBlOmZJfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W2RIXX1dfSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6UnIsYXJnczpbInRhYmluZGV4Il19XX0se3R5cGU6cHp9LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbTnddfV19XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHpCLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6IlttYXQtdGFiLWxpbmtdLCBbbWF0VGFiTGlua10iLGV4cG9ydEFzOiJtYXRUYWJMaW5rIixpbnB1dHM6WyJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCJdLGhvc3Q6e2NsYXNzOiJtYXQtdGFiLWxpbmsgbWF0LWZvY3VzLWluZGljYXRvciIsIlthdHRyLmFyaWEtY3VycmVudF0iOidhY3RpdmUgPyAicGFnZSIgOiBudWxsJywiW2F0dHIuYXJpYS1kaXNhYmxlZF0iOiJkaXNhYmxlZCIsIlthdHRyLnRhYkluZGV4XSI6InRhYkluZGV4IiwiW2NsYXNzLm1hdC10YWItZGlzYWJsZWRdIjoiZGlzYWJsZWQiLCJbY2xhc3MubWF0LXRhYi1sYWJlbC1hY3RpdmVdIjoiYWN0aXZlIn19XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpUQn0se3R5cGU6Y2h9LHt0eXBlOnRDfSx7dHlwZTpmSX0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltkSF19XX0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOlJyLGFyZ3M6WyJ0YWJpbmRleCJdfV19LHt0eXBlOnB6fSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W053XX1dfV19KSxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIEhCe31IQi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8SEIpfSxIQi7JtW1vZD1abyh7dHlwZTpIQn0pLEhCLsm1aW5qPWNvKHtpbXBvcnRzOltbQnYsVHoseUYsbUgsREkseXpdLFR6XX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oSEIse2RlY2xhcmF0aW9uczpmdW5jdGlvbigpe3JldHVybltQQixwQixnQixzQixrQixUQix6QixfQixiQixBQixjQl19LGltcG9ydHM6ZnVuY3Rpb24oKXtyZXR1cm5bQnYsVHoseUYsbUgsREkseXpdfSxleHBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW1R6LFBCLHBCLGdCLFRCLHpCLGNCXX19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEhCLFt7dHlwZTprXyxhcmdzOlt7aW1wb3J0czpbQnYsVHoseUYsbUgsREkseXpdLGV4cG9ydHM6W1R6LFBCLHBCLGdCLFRCLHpCLGNCXSxkZWNsYXJhdGlvbnM6W1BCLHBCLGdCLHNCLGtCLFRCLHpCLF9CLGJCLEFCLGNCXX1dfV0sbnVsbCxudWxsKTtjb25zdCBGQj1bInVuZGVybGluZSJdLExCPVsiY29ubmVjdGlvbkNvbnRhaW5lciJdLEJCPVsiaW5wdXRDb250YWluZXIiXSxWQj1bImxhYmVsIl07ZnVuY3Rpb24gakIodCxlKXsxJnQmJihrdSgwKSxPdSgxLCJkaXYiLDE0KSx3dSgyLCJkaXYiLDE1KSx3dSgzLCJkaXYiLDE2KSx3dSg0LCJkaXYiLDE3KSxQdSgpLE91KDUsImRpdiIsMTgpLHd1KDYsImRpdiIsMTUpLHd1KDcsImRpdiIsMTYpLHd1KDgsImRpdiIsMTcpLFB1KCksU3UoKSl9ZnVuY3Rpb24gVUIodCxlKXsxJnQmJihPdSgwLCJkaXYiLDE5KSxqdSgxLDEpLFB1KCkpfWZ1bmN0aW9uIFdCKHQsZSl7aWYoMSZ0JiYoa3UoMCksanUoMSwyKSxPdSgyLCJzcGFuIiksTWYoMyksUHUoKSxTdSgpKSwyJnQpe2NvbnN0IHQ9THUoMik7SmMoMyksdmYodC5fY29udHJvbC5wbGFjZWhvbGRlcil9fWZ1bmN0aW9uIEdCKHQsZSl7MSZ0JiZqdSgwLDMsWyIqbmdTd2l0Y2hDYXNlIiwidHJ1ZSJdKX1mdW5jdGlvbiBZQih0LGUpezEmdCYmKE91KDAsInNwYW4iLDIzKSxNZigxLCIgKiIpLFB1KCkpfWZ1bmN0aW9uIHFCKHQsZSl7aWYoMSZ0KXtjb25zdCB0PUV1KCk7T3UoMCwibGFiZWwiLDIwLDIxKSxOdSgiY2RrT2JzZXJ2ZUNvbnRlbnQiLChmdW5jdGlvbiBlKCl7cmV0dXJuIHJhKHQpLEx1KCkudXBkYXRlT3V0bGluZUdhcCgpfSkpLFdtKDIsV0IsNCwxLCJuZy1jb250YWluZXIiLDEyKSxXbSgzLEdCLDEsMCwibmctY29udGVudCIsMTIpLFdtKDQsWUIsMiwwLCJzcGFuIiwyMiksUHUoKX1pZigyJnQpe2NvbnN0IHQ9THUoKTthZigibWF0LWVtcHR5Iix0Ll9jb250cm9sLmVtcHR5JiYhdC5fc2hvdWxkQWx3YXlzRmxvYXQoKSkoIm1hdC1mb3JtLWZpZWxkLWVtcHR5Iix0Ll9jb250cm9sLmVtcHR5JiYhdC5fc2hvdWxkQWx3YXlzRmxvYXQoKSkoIm1hdC1hY2NlbnQiLCJhY2NlbnQiPT10LmNvbG9yKSgibWF0LXdhcm4iLCJ3YXJuIj09dC5jb2xvciksdnUoImNka09ic2VydmVDb250ZW50RGlzYWJsZWQiLCJvdXRsaW5lIiE9dC5hcHBlYXJhbmNlKSgiaWQiLHQuX2xhYmVsSWQpKCJuZ1N3aXRjaCIsdC5faGFzTGFiZWwoKSksTm0oImZvciIsdC5fY29udHJvbC5pZCkoImFyaWEtb3ducyIsdC5fY29udHJvbC5pZCksSmMoMiksdnUoIm5nU3dpdGNoQ2FzZSIsITEpLEpjKDEpLHZ1KCJuZ1N3aXRjaENhc2UiLCEwKSxKYygxKSx2dSgibmdJZiIsIXQuaGlkZVJlcXVpcmVkTWFya2VyJiZ0Ll9jb250cm9sLnJlcXVpcmVkJiYhdC5fY29udHJvbC5kaXNhYmxlZCl9fWZ1bmN0aW9uIFpCKHQsZSl7MSZ0JiYoT3UoMCwiZGl2IiwyNCksanUoMSw0KSxQdSgpKX1mdW5jdGlvbiBYQih0LGUpe2lmKDEmdCYmKE91KDAsImRpdiIsMjUsMjYpLHd1KDIsInNwYW4iLDI3KSxQdSgpKSwyJnQpe2NvbnN0IHQ9THUoKTtKYygyKSxhZigibWF0LWFjY2VudCIsImFjY2VudCI9PXQuY29sb3IpKCJtYXQtd2FybiIsIndhcm4iPT10LmNvbG9yKX19ZnVuY3Rpb24gS0IodCxlKXsxJnQmJihPdSgwLCJkaXYiKSxqdSgxLDUpLFB1KCkpLDImdCYmdnUoIkB0cmFuc2l0aW9uTWVzc2FnZXMiLEx1KCkuX3N1YnNjcmlwdEFuaW1hdGlvblN0YXRlKX1mdW5jdGlvbiBKQih0LGUpe2lmKDEmdCYmKE91KDAsImRpdiIsMzEpLE1mKDEpLFB1KCkpLDImdCl7Y29uc3QgdD1MdSgyKTt2dSgiaWQiLHQuX2hpbnRMYWJlbElkKSxKYygxKSx2Zih0LmhpbnRMYWJlbCl9fWZ1bmN0aW9uIFFCKHQsZSl7aWYoMSZ0JiYoT3UoMCwiZGl2IiwyOCksV20oMSxKQiwyLDIsImRpdiIsMjkpLGp1KDIsNiksd3UoMywiZGl2IiwzMCksanUoNCw3KSxQdSgpKSwyJnQpe2NvbnN0IHQ9THUoKTt2dSgiQHRyYW5zaXRpb25NZXNzYWdlcyIsdC5fc3Vic2NyaXB0QW5pbWF0aW9uU3RhdGUpLEpjKDEpLHZ1KCJuZ0lmIix0LmhpbnRMYWJlbCl9fWNvbnN0ICRCPVsiKiIsW1siIiwibWF0UHJlZml4IiwiIl1dLFtbIm1hdC1wbGFjZWhvbGRlciJdXSxbWyJtYXQtbGFiZWwiXV0sW1siIiwibWF0U3VmZml4IiwiIl1dLFtbIm1hdC1lcnJvciJdXSxbWyJtYXQtaGludCIsMywiYWxpZ24iLCJlbmQiXV0sW1sibWF0LWhpbnQiLCJhbGlnbiIsImVuZCJdXV07bGV0IHRWPTA7Y29uc3QgZVY9bmV3IE5yKCJNYXRFcnJvciIpO2NsYXNzIG5We2NvbnN0cnVjdG9yKCl7dGhpcy5pZD0ibWF0LWVycm9yLSIrdFYrK319blYuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fG5WKX0sblYuybVkaXI9Sm8oe3R5cGU6blYsc2VsZWN0b3JzOltbIm1hdC1lcnJvciJdXSxob3N0QXR0cnM6WyJyb2xlIiwiYWxlcnQiLDEsIm1hdC1lcnJvciJdLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsyJmUmJk5tKCJpZCIsbi5pZCl9LGlucHV0czp7aWQ6ImlkIn0sZmVhdHVyZXM6W2loKFt7cHJvdmlkZTplVix1c2VFeGlzdGluZzpuVn1dKV19KSxuVi5wcm9wRGVjb3JhdG9ycz17aWQ6W3t0eXBlOnlffV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoblYsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoibWF0LWVycm9yIixob3N0OntjbGFzczoibWF0LWVycm9yIixyb2xlOiJhbGVydCIsIlthdHRyLmlkXSI6ImlkIn0scHJvdmlkZXJzOlt7cHJvdmlkZTplVix1c2VFeGlzdGluZzpuVn1dfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5bXX0pLHtpZDpbe3R5cGU6eV99XX0pOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3Qgb1Y9e3RyYW5zaXRpb25NZXNzYWdlczpLeCgidHJhbnNpdGlvbk1lc3NhZ2VzIixbdE8oImVudGVyIiwkeCh7b3BhY2l0eToxLHRyYW5zZm9ybToidHJhbnNsYXRlWSgwJSkifSkpLG5PKCJ2b2lkID0+IGVudGVyIixbJHgoe29wYWNpdHk6MCx0cmFuc2Zvcm06InRyYW5zbGF0ZVkoLTVweCkifSksSngoIjMwMG1zIGN1YmljLWJlemllcigwLjU1LCAwLCAwLjU1LCAwLjIpIildKV0pfTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY2xhc3MgaVZ7fWZ1bmN0aW9uIGFWKHQpe3JldHVybiBFcnJvcihgQSBoaW50IHdhcyBhbHJlYWR5IGRlY2xhcmVkIGZvciAnYWxpZ249IiR7dH0iJy5gKX1pVi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8aVYpfSxpVi7JtWRpcj1Kbyh7dHlwZTppVn0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoaVYsW3t0eXBlOmdffV0sbnVsbCxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmxldCByVj0wO2NvbnN0IHNWPW5ldyBOcigiTWF0SGludCIpO2NsYXNzIGxWe2NvbnN0cnVjdG9yKCl7dGhpcy5hbGlnbj0ic3RhcnQiLHRoaXMuaWQ9Im1hdC1oaW50LSIrclYrK319bFYuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGxWKX0sbFYuybVkaXI9Sm8oe3R5cGU6bFYsc2VsZWN0b3JzOltbIm1hdC1oaW50Il1dLGhvc3RBdHRyczpbMSwibWF0LWhpbnQiXSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MiZlJiYoTm0oImlkIixuLmlkKSgiYWxpZ24iLG51bGwpLGFmKCJtYXQtZm9ybS1maWVsZC1oaW50LWVuZCIsImVuZCI9PT1uLmFsaWduKSl9LGlucHV0czp7YWxpZ246ImFsaWduIixpZDoiaWQifSxmZWF0dXJlczpbaWgoW3twcm92aWRlOnNWLHVzZUV4aXN0aW5nOmxWfV0pXX0pLGxWLnByb3BEZWNvcmF0b3JzPXthbGlnbjpbe3R5cGU6eV99XSxpZDpbe3R5cGU6eV99XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihsVixbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJtYXQtaGludCIsaG9zdDp7Y2xhc3M6Im1hdC1oaW50IiwiW2NsYXNzLm1hdC1mb3JtLWZpZWxkLWhpbnQtZW5kXSI6J2FsaWduID09PSAiZW5kIicsIlthdHRyLmlkXSI6ImlkIiwiW2F0dHIuYWxpZ25dIjoibnVsbCJ9LHByb3ZpZGVyczpbe3Byb3ZpZGU6c1YsdXNlRXhpc3Rpbmc6bFZ9XX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW119KSx7YWxpZ246W3t0eXBlOnlffV0saWQ6W3t0eXBlOnlffV19KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIGNWe31jVi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8Y1YpfSxjVi7JtWRpcj1Kbyh7dHlwZTpjVixzZWxlY3RvcnM6W1sibWF0LWxhYmVsIl1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihjVixbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJtYXQtbGFiZWwifV19XSxudWxsLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3MgZFZ7fWRWLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxkVil9LGRWLsm1ZGlyPUpvKHt0eXBlOmRWLHNlbGVjdG9yczpbWyJtYXQtcGxhY2Vob2xkZXIiXV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGRWLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6Im1hdC1wbGFjZWhvbGRlciJ9XX1dLG51bGwsbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCBwVj1uZXcgTnIoIk1hdFByZWZpeCIpO2NsYXNzIG1We31tVi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8bVYpfSxtVi7JtWRpcj1Kbyh7dHlwZTptVixzZWxlY3RvcnM6W1siIiwibWF0UHJlZml4IiwiIl1dLGZlYXR1cmVzOltpaChbe3Byb3ZpZGU6cFYsdXNlRXhpc3Rpbmc6bVZ9XSldfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihtVixbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJbbWF0UHJlZml4XSIscHJvdmlkZXJzOlt7cHJvdmlkZTpwVix1c2VFeGlzdGluZzptVn1dfV19XSxudWxsLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3QgdVY9bmV3IE5yKCJNYXRTdWZmaXgiKTtjbGFzcyBmVnt9ZlYuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGZWKX0sZlYuybVkaXI9Sm8oe3R5cGU6ZlYsc2VsZWN0b3JzOltbIiIsIm1hdFN1ZmZpeCIsIiJdXSxmZWF0dXJlczpbaWgoW3twcm92aWRlOnVWLHVzZUV4aXN0aW5nOmZWfV0pXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoZlYsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoiW21hdFN1ZmZpeF0iLHByb3ZpZGVyczpbe3Byb3ZpZGU6dVYsdXNlRXhpc3Rpbmc6ZlZ9XX1dfV0sbnVsbCxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmxldCBnVj0wO2NvbnN0IGhWPUl6KGNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuX2VsZW1lbnRSZWY9dH19LCJwcmltYXJ5IiksYlY9bmV3IE5yKCJNQVRfRk9STV9GSUVMRF9ERUZBVUxUX09QVElPTlMiKSx5Vj1uZXcgTnIoIk1hdEZvcm1GaWVsZCIpO2NsYXNzIF9WIGV4dGVuZHMgaFZ7Y29uc3RydWN0b3IodCxlLG4sbyxpLGEscixzKXtzdXBlcih0KSx0aGlzLl9lbGVtZW50UmVmPXQsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9ZSx0aGlzLl9kaXI9byx0aGlzLl9kZWZhdWx0cz1pLHRoaXMuX3BsYXRmb3JtPWEsdGhpcy5fbmdab25lPXIsdGhpcy5fb3V0bGluZUdhcENhbGN1bGF0aW9uTmVlZGVkSW1tZWRpYXRlbHk9ITEsdGhpcy5fb3V0bGluZUdhcENhbGN1bGF0aW9uTmVlZGVkT25TdGFibGU9ITEsdGhpcy5fZGVzdHJveWVkPW5ldyB4LHRoaXMuX3Nob3dBbHdheXNBbmltYXRlPSExLHRoaXMuX3N1YnNjcmlwdEFuaW1hdGlvblN0YXRlPSIiLHRoaXMuX2hpbnRMYWJlbD0iIix0aGlzLl9oaW50TGFiZWxJZD0ibWF0LWhpbnQtIitnVisrLHRoaXMuX2xhYmVsSWQ9Im1hdC1mb3JtLWZpZWxkLWxhYmVsLSIrZ1YrKyx0aGlzLmZsb2F0TGFiZWw9dGhpcy5fZ2V0RGVmYXVsdEZsb2F0TGFiZWxTdGF0ZSgpLHRoaXMuX2FuaW1hdGlvbnNFbmFibGVkPSJOb29wQW5pbWF0aW9ucyIhPT1zLHRoaXMuYXBwZWFyYW5jZT1pJiZpLmFwcGVhcmFuY2U/aS5hcHBlYXJhbmNlOiJsZWdhY3kiLHRoaXMuX2hpZGVSZXF1aXJlZE1hcmtlcj0hKCFpfHxudWxsPT1pLmhpZGVSZXF1aXJlZE1hcmtlcikmJmkuaGlkZVJlcXVpcmVkTWFya2VyfWdldCBhcHBlYXJhbmNlKCl7cmV0dXJuIHRoaXMuX2FwcGVhcmFuY2V9c2V0IGFwcGVhcmFuY2UodCl7Y29uc3QgZT10aGlzLl9hcHBlYXJhbmNlO3RoaXMuX2FwcGVhcmFuY2U9dHx8dGhpcy5fZGVmYXVsdHMmJnRoaXMuX2RlZmF1bHRzLmFwcGVhcmFuY2V8fCJsZWdhY3kiLCJvdXRsaW5lIj09PXRoaXMuX2FwcGVhcmFuY2UmJmUhPT10JiYodGhpcy5fb3V0bGluZUdhcENhbGN1bGF0aW9uTmVlZGVkT25TdGFibGU9ITApfWdldCBoaWRlUmVxdWlyZWRNYXJrZXIoKXtyZXR1cm4gdGhpcy5faGlkZVJlcXVpcmVkTWFya2VyfXNldCBoaWRlUmVxdWlyZWRNYXJrZXIodCl7dGhpcy5faGlkZVJlcXVpcmVkTWFya2VyPXJJKHQpfV9zaG91bGRBbHdheXNGbG9hdCgpe3JldHVybiJhbHdheXMiPT09dGhpcy5mbG9hdExhYmVsJiYhdGhpcy5fc2hvd0Fsd2F5c0FuaW1hdGV9X2NhbkxhYmVsRmxvYXQoKXtyZXR1cm4ibmV2ZXIiIT09dGhpcy5mbG9hdExhYmVsfWdldCBoaW50TGFiZWwoKXtyZXR1cm4gdGhpcy5faGludExhYmVsfXNldCBoaW50TGFiZWwodCl7dGhpcy5faGludExhYmVsPXQsdGhpcy5fcHJvY2Vzc0hpbnRzKCl9Z2V0IGZsb2F0TGFiZWwoKXtyZXR1cm4ibGVnYWN5IiE9PXRoaXMuYXBwZWFyYW5jZSYmIm5ldmVyIj09PXRoaXMuX2Zsb2F0TGFiZWw/ImF1dG8iOnRoaXMuX2Zsb2F0TGFiZWx9c2V0IGZsb2F0TGFiZWwodCl7dCE9PXRoaXMuX2Zsb2F0TGFiZWwmJih0aGlzLl9mbG9hdExhYmVsPXR8fHRoaXMuX2dldERlZmF1bHRGbG9hdExhYmVsU3RhdGUoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9Z2V0IF9jb250cm9sKCl7cmV0dXJuIHRoaXMuX2V4cGxpY2l0Rm9ybUZpZWxkQ29udHJvbHx8dGhpcy5fY29udHJvbE5vblN0YXRpY3x8dGhpcy5fY29udHJvbFN0YXRpY31zZXQgX2NvbnRyb2wodCl7dGhpcy5fZXhwbGljaXRGb3JtRmllbGRDb250cm9sPXR9Z2V0TGFiZWxJZCgpe3JldHVybiB0aGlzLl9oYXNGbG9hdGluZ0xhYmVsKCk/dGhpcy5fbGFiZWxJZDpudWxsfWdldENvbm5lY3RlZE92ZXJsYXlPcmlnaW4oKXtyZXR1cm4gdGhpcy5fY29ubmVjdGlvbkNvbnRhaW5lclJlZnx8dGhpcy5fZWxlbWVudFJlZn1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLl92YWxpZGF0ZUNvbnRyb2xDaGlsZCgpO2NvbnN0IHQ9dGhpcy5fY29udHJvbDt0LmNvbnRyb2xUeXBlJiZ0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZChgbWF0LWZvcm0tZmllbGQtdHlwZS0ke3QuY29udHJvbFR5cGV9YCksdC5zdGF0ZUNoYW5nZXMucGlwZShjbihudWxsKSkuc3Vic2NyaWJlKCgoKT0+e3RoaXMuX3ZhbGlkYXRlUGxhY2Vob2xkZXJzKCksdGhpcy5fc3luY0Rlc2NyaWJlZEJ5SWRzKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KSksdC5uZ0NvbnRyb2wmJnQubmdDb250cm9sLnZhbHVlQ2hhbmdlcyYmdC5uZ0NvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUodW4odGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgoKT0+dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpKSx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCgpPT57dGhpcy5fbmdab25lLm9uU3RhYmxlLnBpcGUodW4odGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgoKT0+e3RoaXMuX291dGxpbmVHYXBDYWxjdWxhdGlvbk5lZWRlZE9uU3RhYmxlJiZ0aGlzLnVwZGF0ZU91dGxpbmVHYXAoKX0pKX0pKSxXdCh0aGlzLl9wcmVmaXhDaGlsZHJlbi5jaGFuZ2VzLHRoaXMuX3N1ZmZpeENoaWxkcmVuLmNoYW5nZXMpLnN1YnNjcmliZSgoKCk9Pnt0aGlzLl9vdXRsaW5lR2FwQ2FsY3VsYXRpb25OZWVkZWRPblN0YWJsZT0hMCx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pKSx0aGlzLl9oaW50Q2hpbGRyZW4uY2hhbmdlcy5waXBlKGNuKG51bGwpKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5fcHJvY2Vzc0hpbnRzKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KSksdGhpcy5fZXJyb3JDaGlsZHJlbi5jaGFuZ2VzLnBpcGUoY24obnVsbCkpLnN1YnNjcmliZSgoKCk9Pnt0aGlzLl9zeW5jRGVzY3JpYmVkQnlJZHMoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pKSx0aGlzLl9kaXImJnRoaXMuX2Rpci5jaGFuZ2UucGlwZSh1bih0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCgpPT57ImZ1bmN0aW9uIj09dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZT90aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCgpPT57cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgoKT0+dGhpcy51cGRhdGVPdXRsaW5lR2FwKCkpKX0pKTp0aGlzLnVwZGF0ZU91dGxpbmVHYXAoKX0pKX1uZ0FmdGVyQ29udGVudENoZWNrZWQoKXt0aGlzLl92YWxpZGF0ZUNvbnRyb2xDaGlsZCgpLHRoaXMuX291dGxpbmVHYXBDYWxjdWxhdGlvbk5lZWRlZEltbWVkaWF0ZWx5JiZ0aGlzLnVwZGF0ZU91dGxpbmVHYXAoKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9zdWJzY3JpcHRBbmltYXRpb25TdGF0ZT0iZW50ZXIiLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKX1uZ09uRGVzdHJveSgpe3RoaXMuX2Rlc3Ryb3llZC5uZXh0KCksdGhpcy5fZGVzdHJveWVkLmNvbXBsZXRlKCl9X3Nob3VsZEZvcndhcmQodCl7Y29uc3QgZT10aGlzLl9jb250cm9sP3RoaXMuX2NvbnRyb2wubmdDb250cm9sOm51bGw7cmV0dXJuIGUmJmVbdF19X2hhc1BsYWNlaG9sZGVyKCl7cmV0dXJuISEodGhpcy5fY29udHJvbCYmdGhpcy5fY29udHJvbC5wbGFjZWhvbGRlcnx8dGhpcy5fcGxhY2Vob2xkZXJDaGlsZCl9X2hhc0xhYmVsKCl7cmV0dXJuISghdGhpcy5fbGFiZWxDaGlsZE5vblN0YXRpYyYmIXRoaXMuX2xhYmVsQ2hpbGRTdGF0aWMpfV9zaG91bGRMYWJlbEZsb2F0KCl7cmV0dXJuIHRoaXMuX2NhbkxhYmVsRmxvYXQoKSYmKHRoaXMuX2NvbnRyb2wmJnRoaXMuX2NvbnRyb2wuc2hvdWxkTGFiZWxGbG9hdHx8dGhpcy5fc2hvdWxkQWx3YXlzRmxvYXQoKSl9X2hpZGVDb250cm9sUGxhY2Vob2xkZXIoKXtyZXR1cm4ibGVnYWN5Ij09PXRoaXMuYXBwZWFyYW5jZSYmIXRoaXMuX2hhc0xhYmVsKCl8fHRoaXMuX2hhc0xhYmVsKCkmJiF0aGlzLl9zaG91bGRMYWJlbEZsb2F0KCl9X2hhc0Zsb2F0aW5nTGFiZWwoKXtyZXR1cm4gdGhpcy5faGFzTGFiZWwoKXx8ImxlZ2FjeSI9PT10aGlzLmFwcGVhcmFuY2UmJnRoaXMuX2hhc1BsYWNlaG9sZGVyKCl9X2dldERpc3BsYXllZE1lc3NhZ2VzKCl7cmV0dXJuIHRoaXMuX2Vycm9yQ2hpbGRyZW4mJnRoaXMuX2Vycm9yQ2hpbGRyZW4ubGVuZ3RoPjAmJnRoaXMuX2NvbnRyb2wuZXJyb3JTdGF0ZT8iZXJyb3IiOiJoaW50In1fYW5pbWF0ZUFuZExvY2tMYWJlbCgpe3RoaXMuX2hhc0Zsb2F0aW5nTGFiZWwoKSYmdGhpcy5fY2FuTGFiZWxGbG9hdCgpJiYodGhpcy5fYW5pbWF0aW9uc0VuYWJsZWQmJnRoaXMuX2xhYmVsJiYodGhpcy5fc2hvd0Fsd2F5c0FuaW1hdGU9ITAsVnQodGhpcy5fbGFiZWwubmF0aXZlRWxlbWVudCwidHJhbnNpdGlvbmVuZCIpLnBpcGUoTmUoMSkpLnN1YnNjcmliZSgoKCk9Pnt0aGlzLl9zaG93QWx3YXlzQW5pbWF0ZT0hMX0pKSksdGhpcy5mbG9hdExhYmVsPSJhbHdheXMiLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX1fdmFsaWRhdGVQbGFjZWhvbGRlcnMoKXtpZih0aGlzLl9jb250cm9sLnBsYWNlaG9sZGVyJiZ0aGlzLl9wbGFjZWhvbGRlckNoaWxkJiYoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkpCi8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwp0aHJvdyhmdW5jdGlvbiB0KCl7cmV0dXJuIEVycm9yKCJQbGFjZWhvbGRlciBhdHRyaWJ1dGUgYW5kIGNoaWxkIGVsZW1lbnQgd2VyZSBib3RoIHNwZWNpZmllZC4iKX0pKCl9X3Byb2Nlc3NIaW50cygpe3RoaXMuX3ZhbGlkYXRlSGludHMoKSx0aGlzLl9zeW5jRGVzY3JpYmVkQnlJZHMoKX1fdmFsaWRhdGVIaW50cygpe2lmKHRoaXMuX2hpbnRDaGlsZHJlbiYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpKXtsZXQgdCxlO3RoaXMuX2hpbnRDaGlsZHJlbi5mb3JFYWNoKChuPT57aWYoInN0YXJ0Ij09PW4uYWxpZ24pe2lmKHR8fHRoaXMuaGludExhYmVsKXRocm93IGFWKCJzdGFydCIpO3Q9bn1lbHNlIGlmKCJlbmQiPT09bi5hbGlnbil7aWYoZSl0aHJvdyBhVigiZW5kIik7ZT1ufX0pKX19X2dldERlZmF1bHRGbG9hdExhYmVsU3RhdGUoKXtyZXR1cm4gdGhpcy5fZGVmYXVsdHMmJnRoaXMuX2RlZmF1bHRzLmZsb2F0TGFiZWx8fCJhdXRvIn1fc3luY0Rlc2NyaWJlZEJ5SWRzKCl7aWYodGhpcy5fY29udHJvbCl7bGV0IHQ9W107aWYodGhpcy5fY29udHJvbC51c2VyQXJpYURlc2NyaWJlZEJ5JiYic3RyaW5nIj09dHlwZW9mIHRoaXMuX2NvbnRyb2wudXNlckFyaWFEZXNjcmliZWRCeSYmdC5wdXNoKC4uLnRoaXMuX2NvbnRyb2wudXNlckFyaWFEZXNjcmliZWRCeS5zcGxpdCgiICIpKSwiaGludCI9PT10aGlzLl9nZXREaXNwbGF5ZWRNZXNzYWdlcygpKXtjb25zdCBlPXRoaXMuX2hpbnRDaGlsZHJlbj90aGlzLl9oaW50Q2hpbGRyZW4uZmluZCgodD0+InN0YXJ0Ij09PXQuYWxpZ24pKTpudWxsLG49dGhpcy5faGludENoaWxkcmVuP3RoaXMuX2hpbnRDaGlsZHJlbi5maW5kKCh0PT4iZW5kIj09PXQuYWxpZ24pKTpudWxsO2U/dC5wdXNoKGUuaWQpOnRoaXMuX2hpbnRMYWJlbCYmdC5wdXNoKHRoaXMuX2hpbnRMYWJlbElkKSxuJiZ0LnB1c2gobi5pZCl9ZWxzZSB0aGlzLl9lcnJvckNoaWxkcmVuJiZ0LnB1c2goLi4udGhpcy5fZXJyb3JDaGlsZHJlbi5tYXAoKHQ9PnQuaWQpKSk7dGhpcy5fY29udHJvbC5zZXREZXNjcmliZWRCeUlkcyh0KX19X3ZhbGlkYXRlQ29udHJvbENoaWxkKCl7aWYoIXRoaXMuX2NvbnRyb2wmJigidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSl0aHJvdyhmdW5jdGlvbiB0KCl7cmV0dXJuIEVycm9yKCJtYXQtZm9ybS1maWVsZCBtdXN0IGNvbnRhaW4gYSBNYXRGb3JtRmllbGRDb250cm9sLiIpfSkoKX11cGRhdGVPdXRsaW5lR2FwKCl7Y29uc3QgdD10aGlzLl9sYWJlbD90aGlzLl9sYWJlbC5uYXRpdmVFbGVtZW50Om51bGw7aWYoIm91dGxpbmUiIT09dGhpcy5hcHBlYXJhbmNlfHwhdHx8IXQuY2hpbGRyZW4ubGVuZ3RofHwhdC50ZXh0Q29udGVudC50cmltKCkpcmV0dXJuO2lmKCF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpcmV0dXJuO2lmKCF0aGlzLl9pc0F0dGFjaGVkVG9ET00oKSlyZXR1cm4gdm9pZCh0aGlzLl9vdXRsaW5lR2FwQ2FsY3VsYXRpb25OZWVkZWRJbW1lZGlhdGVseT0hMCk7bGV0IGU9MCxuPTA7Y29uc3Qgbz10aGlzLl9jb25uZWN0aW9uQ29udGFpbmVyUmVmLm5hdGl2ZUVsZW1lbnQsaT1vLnF1ZXJ5U2VsZWN0b3JBbGwoIi5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0IiksYT1vLnF1ZXJ5U2VsZWN0b3JBbGwoIi5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcCIpO2lmKHRoaXMuX2xhYmVsJiZ0aGlzLl9sYWJlbC5uYXRpdmVFbGVtZW50LmNoaWxkcmVuLmxlbmd0aCl7Y29uc3QgaT1vLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKDA9PT1pLndpZHRoJiYwPT09aS5oZWlnaHQpcmV0dXJuIHRoaXMuX291dGxpbmVHYXBDYWxjdWxhdGlvbk5lZWRlZE9uU3RhYmxlPSEwLHZvaWQodGhpcy5fb3V0bGluZUdhcENhbGN1bGF0aW9uTmVlZGVkSW1tZWRpYXRlbHk9ITEpO2NvbnN0IGE9dGhpcy5fZ2V0U3RhcnRFbmQoaSkscj10LmNoaWxkcmVuLHM9dGhpcy5fZ2V0U3RhcnRFbmQoclswXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSk7bGV0IGw9MDtmb3IobGV0IHQ9MDt0PHIubGVuZ3RoO3QrKylsKz1yW3RdLm9mZnNldFdpZHRoO2U9TWF0aC5hYnMocy1hKS01LG49bD4wPy43NSpsKzEwOjB9Zm9yKGxldCB0PTA7dDxpLmxlbmd0aDt0KyspaVt0XS5zdHlsZS53aWR0aD1gJHtlfXB4YDtmb3IobGV0IHQ9MDt0PGEubGVuZ3RoO3QrKylhW3RdLnN0eWxlLndpZHRoPWAke259cHhgO3RoaXMuX291dGxpbmVHYXBDYWxjdWxhdGlvbk5lZWRlZE9uU3RhYmxlPXRoaXMuX291dGxpbmVHYXBDYWxjdWxhdGlvbk5lZWRlZEltbWVkaWF0ZWx5PSExfV9nZXRTdGFydEVuZCh0KXtyZXR1cm4gdGhpcy5fZGlyJiYicnRsIj09PXRoaXMuX2Rpci52YWx1ZT90LnJpZ2h0OnQubGVmdH1faXNBdHRhY2hlZFRvRE9NKCl7Y29uc3QgdD10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7aWYodC5nZXRSb290Tm9kZSl7Y29uc3QgZT10LmdldFJvb3ROb2RlKCk7cmV0dXJuIGUmJmUhPT10fXJldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY29udGFpbnModCl9fV9WLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxfVikoTXUoY2gpLE11KEhoKSxNdShjaCksTXUoTXosOCksTXUoYlYsOCksTXUoZkkpLE11KHRDKSxNdShOdyw4KSl9LF9WLsm1Y21wPVVvKHt0eXBlOl9WLHNlbGVjdG9yczpbWyJtYXQtZm9ybS1maWVsZCJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbiB0KGUsbixvKXtpZigxJmUmJihHYihvLGlWLDEpLEdiKG8saVYsMyksR2IobyxjViwxKSxHYihvLGNWLDMpLEdiKG8sZFYsMSksR2IobyxlViwxKSxHYihvLHNWLDEpLEdiKG8scFYsMSksR2Iobyx1ViwxKSksMiZlKXtsZXQgdDtVYih0PVliKCkpJiYobi5fY29udHJvbE5vblN0YXRpYz10LmZpcnN0KSxVYih0PVliKCkpJiYobi5fY29udHJvbFN0YXRpYz10LmZpcnN0KSxVYih0PVliKCkpJiYobi5fbGFiZWxDaGlsZE5vblN0YXRpYz10LmZpcnN0KSxVYih0PVliKCkpJiYobi5fbGFiZWxDaGlsZFN0YXRpYz10LmZpcnN0KSxVYih0PVliKCkpJiYobi5fcGxhY2Vob2xkZXJDaGlsZD10LmZpcnN0KSxVYih0PVliKCkpJiYobi5fZXJyb3JDaGlsZHJlbj10KSxVYih0PVliKCkpJiYobi5faGludENoaWxkcmVuPXQpLFViKHQ9WWIoKSkmJihuLl9wcmVmaXhDaGlsZHJlbj10KSxVYih0PVliKCkpJiYobi5fc3VmZml4Q2hpbGRyZW49dCl9fSx2aWV3UXVlcnk6ZnVuY3Rpb24gdChlLG4pe2lmKDEmZSYmKFdiKEZCLDEpLFdiKExCLDMpLFdiKEJCLDEpLFdiKFZCLDEpKSwyJmUpe2xldCB0O1ViKHQ9WWIoKSkmJihuLnVuZGVybGluZVJlZj10LmZpcnN0KSxVYih0PVliKCkpJiYobi5fY29ubmVjdGlvbkNvbnRhaW5lclJlZj10LmZpcnN0KSxVYih0PVliKCkpJiYobi5faW5wdXRDb250YWluZXJSZWY9dC5maXJzdCksVWIodD1ZYigpKSYmKG4uX2xhYmVsPXQuZmlyc3QpfX0saG9zdEF0dHJzOlsxLCJtYXQtZm9ybS1maWVsZCJdLGhvc3RWYXJzOjQwLGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MiZlJiZhZigibWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZCIsInN0YW5kYXJkIj09bi5hcHBlYXJhbmNlKSgibWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIiwiZmlsbCI9PW4uYXBwZWFyYW5jZSkoIm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSIsIm91dGxpbmUiPT1uLmFwcGVhcmFuY2UpKCJtYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSIsImxlZ2FjeSI9PW4uYXBwZWFyYW5jZSkoIm1hdC1mb3JtLWZpZWxkLWludmFsaWQiLG4uX2NvbnRyb2wuZXJyb3JTdGF0ZSkoIm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCIsbi5fY2FuTGFiZWxGbG9hdCgpKSgibWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IixuLl9zaG91bGRMYWJlbEZsb2F0KCkpKCJtYXQtZm9ybS1maWVsZC1oYXMtbGFiZWwiLG4uX2hhc0Zsb2F0aW5nTGFiZWwoKSkoIm1hdC1mb3JtLWZpZWxkLWhpZGUtcGxhY2Vob2xkZXIiLG4uX2hpZGVDb250cm9sUGxhY2Vob2xkZXIoKSkoIm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIixuLl9jb250cm9sLmRpc2FibGVkKSgibWF0LWZvcm0tZmllbGQtYXV0b2ZpbGxlZCIsbi5fY29udHJvbC5hdXRvZmlsbGVkKSgibWF0LWZvY3VzZWQiLG4uX2NvbnRyb2wuZm9jdXNlZCkoIm5nLXVudG91Y2hlZCIsbi5fc2hvdWxkRm9yd2FyZCgidW50b3VjaGVkIikpKCJuZy10b3VjaGVkIixuLl9zaG91bGRGb3J3YXJkKCJ0b3VjaGVkIikpKCJuZy1wcmlzdGluZSIsbi5fc2hvdWxkRm9yd2FyZCgicHJpc3RpbmUiKSkoIm5nLWRpcnR5IixuLl9zaG91bGRGb3J3YXJkKCJkaXJ0eSIpKSgibmctdmFsaWQiLG4uX3Nob3VsZEZvcndhcmQoInZhbGlkIikpKCJuZy1pbnZhbGlkIixuLl9zaG91bGRGb3J3YXJkKCJpbnZhbGlkIikpKCJuZy1wZW5kaW5nIixuLl9zaG91bGRGb3J3YXJkKCJwZW5kaW5nIikpKCJfbWF0LWFuaW1hdGlvbi1ub29wYWJsZSIsIW4uX2FuaW1hdGlvbnNFbmFibGVkKX0saW5wdXRzOntjb2xvcjoiY29sb3IiLGZsb2F0TGFiZWw6ImZsb2F0TGFiZWwiLGFwcGVhcmFuY2U6ImFwcGVhcmFuY2UiLGhpZGVSZXF1aXJlZE1hcmtlcjoiaGlkZVJlcXVpcmVkTWFya2VyIixoaW50TGFiZWw6ImhpbnRMYWJlbCJ9LGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl0sZmVhdHVyZXM6W2loKFt7cHJvdmlkZTp5Vix1c2VFeGlzdGluZzpfVn1dKSxnbV0sbmdDb250ZW50U2VsZWN0b3JzOlsiKiIsIlttYXRQcmVmaXhdIiwibWF0LXBsYWNlaG9sZGVyIiwibWF0LWxhYmVsIiwiW21hdFN1ZmZpeF0iLCJtYXQtZXJyb3IiLCJtYXQtaGludDpub3QoW2FsaWduPSdlbmQnXSkiLCJtYXQtaGludFthbGlnbj0nZW5kJ10iXSxkZWNsczoxNSx2YXJzOjgsY29uc3RzOltbMSwibWF0LWZvcm0tZmllbGQtd3JhcHBlciJdLFsxLCJtYXQtZm9ybS1maWVsZC1mbGV4IiwzLCJjbGljayJdLFsiY29ubmVjdGlvbkNvbnRhaW5lciIsIiJdLFs0LCJuZ0lmIl0sWyJjbGFzcyIsIm1hdC1mb3JtLWZpZWxkLXByZWZpeCIsNCwibmdJZiJdLFsxLCJtYXQtZm9ybS1maWVsZC1pbmZpeCJdLFsiaW5wdXRDb250YWluZXIiLCIiXSxbMSwibWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciJdLFsiY2xhc3MiLCJtYXQtZm9ybS1maWVsZC1sYWJlbCIsMywiY2RrT2JzZXJ2ZUNvbnRlbnREaXNhYmxlZCIsImlkIiwibWF0LWVtcHR5IiwibWF0LWZvcm0tZmllbGQtZW1wdHkiLCJtYXQtYWNjZW50IiwibWF0LXdhcm4iLCJuZ1N3aXRjaCIsImNka09ic2VydmVDb250ZW50Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCIsNCwibmdJZiJdLFsiY2xhc3MiLCJtYXQtZm9ybS1maWVsZC11bmRlcmxpbmUiLDQsIm5nSWYiXSxbMSwibWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXIiLDMsIm5nU3dpdGNoIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFsiY2xhc3MiLCJtYXQtZm9ybS1maWVsZC1oaW50LXdyYXBwZXIiLDQsIm5nU3dpdGNoQ2FzZSJdLFsxLCJtYXQtZm9ybS1maWVsZC1vdXRsaW5lIl0sWzEsIm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQiXSxbMSwibWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAiXSxbMSwibWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQiXSxbMSwibWF0LWZvcm0tZmllbGQtb3V0bGluZSIsIm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2siXSxbMSwibWF0LWZvcm0tZmllbGQtcHJlZml4Il0sWzEsIm1hdC1mb3JtLWZpZWxkLWxhYmVsIiwzLCJjZGtPYnNlcnZlQ29udGVudERpc2FibGVkIiwiaWQiLCJuZ1N3aXRjaCIsImNka09ic2VydmVDb250ZW50Il0sWyJsYWJlbCIsIiJdLFsiY2xhc3MiLCJtYXQtcGxhY2Vob2xkZXItcmVxdWlyZWQgbWF0LWZvcm0tZmllbGQtcmVxdWlyZWQtbWFya2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLDEsIm1hdC1wbGFjZWhvbGRlci1yZXF1aXJlZCIsIm1hdC1mb3JtLWZpZWxkLXJlcXVpcmVkLW1hcmtlciJdLFsxLCJtYXQtZm9ybS1maWVsZC1zdWZmaXgiXSxbMSwibWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lIl0sWyJ1bmRlcmxpbmUiLCIiXSxbMSwibWF0LWZvcm0tZmllbGQtcmlwcGxlIl0sWzEsIm1hdC1mb3JtLWZpZWxkLWhpbnQtd3JhcHBlciJdLFsiY2xhc3MiLCJtYXQtaGludCIsMywiaWQiLDQsIm5nSWYiXSxbMSwibWF0LWZvcm0tZmllbGQtaGludC1zcGFjZXIiXSxbMSwibWF0LWhpbnQiLDMsImlkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihWdSgkQiksT3UoMCwiZGl2IiwwKSxPdSgxLCJkaXYiLDEsMiksTnUoImNsaWNrIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5fY29udHJvbC5vbkNvbnRhaW5lckNsaWNrJiZuLl9jb250cm9sLm9uQ29udGFpbmVyQ2xpY2soZSl9KSksV20oMyxqQiw5LDAsIm5nLWNvbnRhaW5lciIsMyksV20oNCxVQiwyLDAsImRpdiIsNCksT3UoNSwiZGl2Iiw1LDYpLGp1KDcpLE91KDgsInNwYW4iLDcpLFdtKDkscUIsNSwxNiwibGFiZWwiLDgpLFB1KCksUHUoKSxXbSgxMCxaQiwyLDAsImRpdiIsOSksUHUoKSxXbSgxMSxYQiwzLDQsImRpdiIsMTApLE91KDEyLCJkaXYiLDExKSxXbSgxMyxLQiwyLDEsImRpdiIsMTIpLFdtKDE0LFFCLDUsMiwiZGl2IiwxMyksUHUoKSxQdSgpKSwyJmUmJihKYygzKSx2dSgibmdJZiIsIm91dGxpbmUiPT1uLmFwcGVhcmFuY2UpLEpjKDEpLHZ1KCJuZ0lmIixuLl9wcmVmaXhDaGlsZHJlbi5sZW5ndGgpLEpjKDUpLHZ1KCJuZ0lmIixuLl9oYXNGbG9hdGluZ0xhYmVsKCkpLEpjKDEpLHZ1KCJuZ0lmIixuLl9zdWZmaXhDaGlsZHJlbi5sZW5ndGgpLEpjKDEpLHZ1KCJuZ0lmIiwib3V0bGluZSIhPW4uYXBwZWFyYW5jZSksSmMoMSksdnUoIm5nU3dpdGNoIixuLl9nZXREaXNwbGF5ZWRNZXNzYWdlcygpKSxKYygxKSx2dSgibmdTd2l0Y2hDYXNlIiwiZXJyb3IiKSxKYygxKSx2dSgibmdTd2l0Y2hDYXNlIiwiaGludCIpKX0sZGlyZWN0aXZlczpbYXYsY3YsZHYsU0ldLHN0eWxlczpbIi5tYXQtZm9ybS1maWVsZHtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmxlZnR9W2Rpcj1ydGxdIC5tYXQtZm9ybS1maWVsZHt0ZXh0LWFsaWduOnJpZ2h0fS5tYXQtZm9ybS1maWVsZC13cmFwcGVye3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtZm9ybS1maWVsZC1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6YmFzZWxpbmU7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjEwMCV9Lm1hdC1mb3JtLWZpZWxkLXByZWZpeCwubWF0LWZvcm0tZmllbGQtc3VmZml4e3doaXRlLXNwYWNlOm5vd3JhcDtmbGV4Om5vbmU7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1mb3JtLWZpZWxkLWluZml4e2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246cmVsYXRpdmU7ZmxleDphdXRvO21pbi13aWR0aDowO3dpZHRoOjE4MHB4fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWluZml4e2JvcmRlci1pbWFnZTpsaW5lYXItZ3JhZGllbnQodHJhbnNwYXJlbnQsIHRyYW5zcGFyZW50KX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcntwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7Ym94LXNpemluZzpjb250ZW50LWJveDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO292ZXJmbG93OmhpZGRlbjtwb2ludGVyLWV2ZW50czpub25lfVtkaXI9cnRsXSAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcntsZWZ0OmF1dG87cmlnaHQ6MH0ubWF0LWZvcm0tZmllbGQtbGFiZWx7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO2ZvbnQ6aW5oZXJpdDtwb2ludGVyLWV2ZW50czpub25lO3dpZHRoOjEwMCU7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7b3ZlcmZsb3c6aGlkZGVuO3RyYW5zZm9ybS1vcmlnaW46MCAwO3RyYW5zaXRpb246dHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGNvbG9yIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLHdpZHRoIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO2Rpc3BsYXk6bm9uZX1bZGlyPXJ0bF0gLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybS1vcmlnaW46MTAwJSAwO2xlZnQ6YXV0bztyaWdodDowfS5tYXQtZm9ybS1maWVsZC1lbXB0eS5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWx7ZGlzcGxheTpibG9ja30ubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbDotd2Via2l0LWF1dG9maWxsKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtkaXNwbGF5Om5vbmV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbDotd2Via2l0LWF1dG9maWxsKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtkaXNwbGF5OmJsb2NrO3RyYW5zaXRpb246bm9uZX0ubWF0LWlucHV0LXNlcnZlcjpmb2N1cysubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1pbnB1dC1zZXJ2ZXJbcGxhY2Vob2xkZXJdOm5vdCg6cGxhY2Vob2xkZXItc2hvd24pKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtkaXNwbGF5Om5vbmV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcjpmb2N1cysubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcltwbGFjZWhvbGRlcl06bm90KDpwbGFjZWhvbGRlci1zaG93bikrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2Rpc3BsYXk6YmxvY2t9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsOm5vdCgubWF0LWZvcm0tZmllbGQtZW1wdHkpe3RyYW5zaXRpb246bm9uZX0ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjEwMCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2Zvcm06c2NhbGUzZCgxLCAxLjAwMDEsIDEpfS5tYXQtZm9ybS1maWVsZC1yaXBwbGV7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3dpZHRoOjEwMCU7dHJhbnNmb3JtLW9yaWdpbjo1MCU7dHJhbnNmb3JtOnNjYWxlWCgwLjUpO29wYWNpdHk6MDt0cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgMzAwbXMgY3ViaWMtYmV6aWVyKDAuNTUsIDAsIDAuNTUsIDAuMil9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUsLm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtvcGFjaXR5OjE7dHJhbnNmb3JtOm5vbmU7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gMzAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSksb3BhY2l0eSAxMDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxiYWNrZ3JvdW5kLWNvbG9yIDMwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcntwb3NpdGlvbjphYnNvbHV0ZTtib3gtc2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6MTAwJTtvdmVyZmxvdzpoaWRkZW59Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyIC5tYXQtaWNvbiwubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWljb257d2lkdGg6MWVtO2hlaWdodDoxZW07Zm9udC1zaXplOmluaGVyaXQ7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9Lm1hdC1mb3JtLWZpZWxkLWhpbnQtd3JhcHBlcntkaXNwbGF5OmZsZXh9Lm1hdC1mb3JtLWZpZWxkLWhpbnQtc3BhY2Vye2ZsZXg6MSAwIDFlbX0ubWF0LWVycm9ye2Rpc3BsYXk6YmxvY2t9Lm1hdC1mb3JtLWZpZWxkLWNvbnRyb2wtd3JhcHBlcntwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LWZvcm0tZmllbGQtaGludC1lbmR7b3JkZXI6MX0ubWF0LWZvcm0tZmllbGQuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWZvcm0tZmllbGQtcmlwcGxle3RyYW5zaXRpb246bm9uZX1cbiIsJy5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLWZsZXh7Ym9yZGVyLXJhZGl1czo0cHggNHB4IDAgMDtwYWRkaW5nOi43NWVtIC43NWVtIDAgLjc1ZW19LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1mbGV4e291dGxpbmU6c29saWQgMXB4fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZTo6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206MDtoZWlnaHQ6MXB4O3dpZHRoOjEwMCV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtcmlwcGxle2JvdHRvbTowO2hlaWdodDoycHh9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7aGVpZ2h0OjA7Ym9yZGVyLXRvcDpzb2xpZCAycHh9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbDpub3QoLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkKSAubWF0LWZvcm0tZmllbGQtZmxleDpob3Zlcn4ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7b3BhY2l0eToxO3RyYW5zZm9ybTpub25lO3RyYW5zaXRpb246b3BhY2l0eSA2MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlOm5vdCgubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQpIC5tYXQtZm9ybS1maWVsZC1mbGV4OmhvdmVyfi5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmUgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJ7cGFkZGluZzowIDFlbX1cbicsJy5tYXQtaW5wdXQtZWxlbWVudHtmb250OmluaGVyaXQ7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtjb2xvcjpjdXJyZW50Q29sb3I7Ym9yZGVyOm5vbmU7b3V0bGluZTpub25lO3BhZGRpbmc6MDttYXJnaW46MDt3aWR0aDoxMDAlO21heC13aWR0aDoxMDAlO3ZlcnRpY2FsLWFsaWduOmJvdHRvbTt0ZXh0LWFsaWduOmluaGVyaXQ7Ym94LXNpemluZzpjb250ZW50LWJveH0ubWF0LWlucHV0LWVsZW1lbnQ6LW1vei11aS1pbnZhbGlke2JveC1zaGFkb3c6bm9uZX0ubWF0LWlucHV0LWVsZW1lbnQ6Oi1tcy1jbGVhciwubWF0LWlucHV0LWVsZW1lbnQ6Oi1tcy1yZXZlYWx7ZGlzcGxheTpub25lfS5tYXQtaW5wdXQtZWxlbWVudCwubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtc2VhcmNoLWNhbmNlbC1idXR0b24sLm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uLC5tYXQtaW5wdXQtZWxlbWVudDo6LXdlYmtpdC1zZWFyY2gtcmVzdWx0cy1idXR0b24sLm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LXNlYXJjaC1yZXN1bHRzLWRlY29yYXRpb257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9Lm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LWNvbnRhY3RzLWF1dG8tZmlsbC1idXR0b24sLm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LWNhcHMtbG9jay1pbmRpY2F0b3IsLm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LWNyZWRlbnRpYWxzLWF1dG8tZmlsbC1idXR0b257dmlzaWJpbGl0eTpoaWRkZW59Lm1hdC1pbnB1dC1lbGVtZW50W3R5cGU9ZGF0ZV0sLm1hdC1pbnB1dC1lbGVtZW50W3R5cGU9ZGF0ZXRpbWVdLC5tYXQtaW5wdXQtZWxlbWVudFt0eXBlPWRhdGV0aW1lLWxvY2FsXSwubWF0LWlucHV0LWVsZW1lbnRbdHlwZT1tb250aF0sLm1hdC1pbnB1dC1lbGVtZW50W3R5cGU9d2Vla10sLm1hdC1pbnB1dC1lbGVtZW50W3R5cGU9dGltZV17bGluZS1oZWlnaHQ6MX0ubWF0LWlucHV0LWVsZW1lbnRbdHlwZT1kYXRlXTo6YWZ0ZXIsLm1hdC1pbnB1dC1lbGVtZW50W3R5cGU9ZGF0ZXRpbWVdOjphZnRlciwubWF0LWlucHV0LWVsZW1lbnRbdHlwZT1kYXRldGltZS1sb2NhbF06OmFmdGVyLC5tYXQtaW5wdXQtZWxlbWVudFt0eXBlPW1vbnRoXTo6YWZ0ZXIsLm1hdC1pbnB1dC1lbGVtZW50W3R5cGU9d2Vla106OmFmdGVyLC5tYXQtaW5wdXQtZWxlbWVudFt0eXBlPXRpbWVdOjphZnRlcntjb250ZW50OiIgIjt3aGl0ZS1zcGFjZTpwcmU7d2lkdGg6MXB4fS5tYXQtaW5wdXQtZWxlbWVudDo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbiwubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtY2FsZW5kYXItcGlja2VyLWluZGljYXRvciwubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtY2xlYXItYnV0dG9ue2ZvbnQtc2l6ZTouNzVlbX0ubWF0LWlucHV0LWVsZW1lbnQ6OnBsYWNlaG9sZGVyey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt0cmFuc2l0aW9uOmNvbG9yIDQwMG1zIDEzMy4zMzMzMzMzMzMzbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1pbnB1dC1lbGVtZW50OjpwbGFjZWhvbGRlcjotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7LW1zLXVzZXItc2VsZWN0OnRleHR9Lm1hdC1pbnB1dC1lbGVtZW50OjotbW96LXBsYWNlaG9sZGVyey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt0cmFuc2l0aW9uOmNvbG9yIDQwMG1zIDEzMy4zMzMzMzMzMzMzbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1pbnB1dC1lbGVtZW50OjotbW96LXBsYWNlaG9sZGVyOi1tcy1pbnB1dC1wbGFjZWhvbGRlcnstbXMtdXNlci1zZWxlY3Q6dGV4dH0ubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3RyYW5zaXRpb246Y29sb3IgNDAwbXMgMTMzLjMzMzMzMzMzMzNtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXI6LW1zLWlucHV0LXBsYWNlaG9sZGVyey1tcy11c2VyLXNlbGVjdDp0ZXh0fS5tYXQtaW5wdXQtZWxlbWVudDotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3RyYW5zaXRpb246Y29sb3IgNDAwbXMgMTMzLjMzMzMzMzMzMzNtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LWlucHV0LWVsZW1lbnQ6LW1zLWlucHV0LXBsYWNlaG9sZGVyOi1tcy1pbnB1dC1wbGFjZWhvbGRlcnstbXMtdXNlci1zZWxlY3Q6dGV4dH0ubWF0LWZvcm0tZmllbGQtaGlkZS1wbGFjZWhvbGRlciAubWF0LWlucHV0LWVsZW1lbnQ6OnBsYWNlaG9sZGVye2NvbG9yOnRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpub25lfS5tYXQtZm9ybS1maWVsZC1oaWRlLXBsYWNlaG9sZGVyIC5tYXQtaW5wdXQtZWxlbWVudDo6LW1vei1wbGFjZWhvbGRlcntjb2xvcjp0cmFuc3BhcmVudCAhaW1wb3J0YW50Oy13ZWJraXQtdGV4dC1maWxsLWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246bm9uZX0ubWF0LWZvcm0tZmllbGQtaGlkZS1wbGFjZWhvbGRlciAubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6dHJhbnNwYXJlbnQgIWltcG9ydGFudDstd2Via2l0LXRleHQtZmlsbC1jb2xvcjp0cmFuc3BhcmVudDt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1mb3JtLWZpZWxkLWhpZGUtcGxhY2Vob2xkZXIgLm1hdC1pbnB1dC1lbGVtZW50Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjp0cmFuc3BhcmVudCAhaW1wb3J0YW50Oy13ZWJraXQtdGV4dC1maWxsLWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246bm9uZX10ZXh0YXJlYS5tYXQtaW5wdXQtZWxlbWVudHtyZXNpemU6dmVydGljYWw7b3ZlcmZsb3c6YXV0b310ZXh0YXJlYS5tYXQtaW5wdXQtZWxlbWVudC5jZGstdGV4dGFyZWEtYXV0b3NpemV7cmVzaXplOm5vbmV9dGV4dGFyZWEubWF0LWlucHV0LWVsZW1lbnR7cGFkZGluZzoycHggMDttYXJnaW46LTJweCAwfXNlbGVjdC5tYXQtaW5wdXQtZWxlbWVudHstbW96LWFwcGVhcmFuY2U6bm9uZTstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTtwb3NpdGlvbjpyZWxhdGl2ZTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2Rpc3BsYXk6aW5saW5lLWZsZXg7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmctdG9wOjFlbTt0b3A6LTFlbTttYXJnaW4tYm90dG9tOi0xZW19c2VsZWN0Lm1hdC1pbnB1dC1lbGVtZW50OjotbXMtZXhwYW5ke2Rpc3BsYXk6bm9uZX1zZWxlY3QubWF0LWlucHV0LWVsZW1lbnQ6Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9c2VsZWN0Lm1hdC1pbnB1dC1lbGVtZW50Om5vdCg6ZGlzYWJsZWQpe2N1cnNvcjpwb2ludGVyfXNlbGVjdC5tYXQtaW5wdXQtZWxlbWVudDo6LW1zLXZhbHVle2NvbG9yOmluaGVyaXQ7YmFja2dyb3VuZDpub25lfS5tYXQtZm9jdXNlZCAuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIHNlbGVjdC5tYXQtaW5wdXQtZWxlbWVudDo6LW1zLXZhbHVle2NvbG9yOmluaGVyaXR9Lm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb250ZW50OiIiO3dpZHRoOjA7aGVpZ2h0OjA7Ym9yZGVyLWxlZnQ6NXB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yaWdodDo1cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXRvcDo1cHggc29saWQ7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtyaWdodDowO21hcmdpbi10b3A6LTIuNXB4O3BvaW50ZXItZXZlbnRzOm5vbmV9W2Rpcj1ydGxdIC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0IC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7cmlnaHQ6YXV0bztsZWZ0OjB9Lm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QgLm1hdC1pbnB1dC1lbGVtZW50e3BhZGRpbmctcmlnaHQ6MTVweH1bZGlyPXJ0bF0gLm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QgLm1hdC1pbnB1dC1lbGVtZW50e3BhZGRpbmctcmlnaHQ6MDtwYWRkaW5nLWxlZnQ6MTVweH0ubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdCAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcnttYXgtd2lkdGg6Y2FsYygxMDAlIC0gMTBweCl9Lm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7bWFyZ2luLXRvcDotNXB4fS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVye21hcmdpbi10b3A6LTEwcHh9XG4nLCIubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTpwZXJzcGVjdGl2ZSgxMDBweCk7LW1zLXRyYW5zZm9ybTpub25lfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbiwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb257d2lkdGg6MWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbi1idXR0b24sLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29uLWJ1dHRvbntmb250OmluaGVyaXQ7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLWJ1dHRvbiAubWF0LWljb24sLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29uLWJ1dHRvbiAubWF0LWljb257Zm9udC1zaXplOmluaGVyaXR9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7aGVpZ2h0OjFweH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2hlaWdodDowO2JvcmRlci10b3A6c29saWQgMXB4fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtcmlwcGxle3RvcDowO2hlaWdodDoycHg7b3ZlcmZsb3c6aGlkZGVufS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7aGVpZ2h0OjA7Ym9yZGVyLXRvcDpzb2xpZCAycHh9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1wb3NpdGlvbjowO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtib3JkZXItdG9wLXN0eWxlOmRvdHRlZDtib3JkZXItdG9wLXdpZHRoOjJweH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtaW52YWxpZDpub3QoLm1hdC1mb2N1c2VkKSAubWF0LWZvcm0tZmllbGQtcmlwcGxle2hlaWdodDoxcHh9XG4iLCIubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC13cmFwcGVye21hcmdpbjouMjVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLWZsZXh7cGFkZGluZzowIC43NWVtIDAgLjc1ZW07bWFyZ2luLXRvcDotMC4yNWVtO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLXByZWZpeCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1zdWZmaXh7dG9wOi4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmV7ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3RvcDouMjVlbTtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb2ludGVyLWV2ZW50czpub25lfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmR7Ym9yZGVyOjFweCBzb2xpZCBjdXJyZW50Q29sb3I7bWluLXdpZHRoOjVweH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0e2JvcmRlci1yYWRpdXM6NXB4IDAgMCA1cHg7Ym9yZGVyLXJpZ2h0LXN0eWxlOm5vbmV9W2Rpcj1ydGxdIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnR7Ym9yZGVyLXJpZ2h0LXN0eWxlOnNvbGlkO2JvcmRlci1sZWZ0LXN0eWxlOm5vbmU7Ym9yZGVyLXJhZGl1czowIDVweCA1cHggMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZHtib3JkZXItcmFkaXVzOjAgNXB4IDVweCAwO2JvcmRlci1sZWZ0LXN0eWxlOm5vbmU7ZmxleC1ncm93OjF9W2Rpcj1ydGxdIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5ke2JvcmRlci1sZWZ0LXN0eWxlOnNvbGlkO2JvcmRlci1yaWdodC1zdHlsZTpub25lO2JvcmRlci1yYWRpdXM6NXB4IDAgMCA1cHh9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXB7Ym9yZGVyLXJhZGl1czouMDAwMDAxcHg7Ym9yZGVyOjFweCBzb2xpZCBjdXJyZW50Q29sb3I7Ym9yZGVyLWxlZnQtc3R5bGU6bm9uZTtib3JkZXItcmlnaHQtc3R5bGU6bm9uZX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2Fwe2JvcmRlci10b3AtY29sb3I6dHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tvcGFjaXR5OjB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljayAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcHtib3JkZXItd2lkdGg6MnB4fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgMTAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljaywubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2t7b3BhY2l0eToxfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmU6bm90KC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCkgLm1hdC1mb3JtLWZpZWxkLWZsZXg6aG92ZXIgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmV7b3BhY2l0eTowO3RyYW5zaXRpb246b3BhY2l0eSA2MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lOm5vdCgubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQpIC5tYXQtZm9ybS1maWVsZC1mbGV4OmhvdmVyIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre29wYWNpdHk6MX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcntwYWRkaW5nOjAgMWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUuX21hdC1hbmltYXRpb24tbm9vcGFibGU6bm90KC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCkgLm1hdC1mb3JtLWZpZWxkLWZsZXg6aG92ZXJ+Lm1hdC1mb3JtLWZpZWxkLW91dGxpbmUsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZSwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0LC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5kLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2Fwe3RyYW5zaXRpb246bm9uZX1cbiIsIi5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtZm9ybS1maWVsZC1mbGV4e3BhZGRpbmctdG9wOi43NWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7aGVpZ2h0OjFweH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7aGVpZ2h0OjA7Ym9yZGVyLXRvcDpzb2xpZCAxcHh9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtib3R0b206MDtoZWlnaHQ6MnB4fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtoZWlnaHQ6MDtib3JkZXItdG9wOnNvbGlkIDJweH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JhY2tncm91bmQtcG9zaXRpb246MDtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtib3JkZXItdG9wLXN0eWxlOmRvdHRlZDtib3JkZXItdG9wLXdpZHRoOjJweH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZDpub3QoLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkKSAubWF0LWZvcm0tZmllbGQtZmxleDpob3Zlcn4ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7b3BhY2l0eToxO3RyYW5zZm9ybTpub25lO3RyYW5zaXRpb246b3BhY2l0eSA2MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZC5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZTpub3QoLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkKSAubWF0LWZvcm0tZmllbGQtZmxleDpob3Zlcn4ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7dHJhbnNpdGlvbjpub25lfVxuIl0sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbb1YudHJhbnNpdGlvbk1lc3NhZ2VzXX0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxfVi5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmNofSx7dHlwZTpIaH0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W2NoXX1dfSx7dHlwZTpNeixkZWNvcmF0b3JzOlt7dHlwZTpfc31dfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W2JWXX1dfSx7dHlwZTpmSX0se3R5cGU6dEN9LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbTnddfV19XSxfVi5wcm9wRGVjb3JhdG9ycz17YXBwZWFyYW5jZTpbe3R5cGU6eV99XSxoaWRlUmVxdWlyZWRNYXJrZXI6W3t0eXBlOnlffV0saGludExhYmVsOlt7dHlwZTp5X31dLGZsb2F0TGFiZWw6W3t0eXBlOnlffV0sdW5kZXJsaW5lUmVmOlt7dHlwZTpGcixhcmdzOlsidW5kZXJsaW5lIl19XSxfY29ubmVjdGlvbkNvbnRhaW5lclJlZjpbe3R5cGU6RnIsYXJnczpbImNvbm5lY3Rpb25Db250YWluZXIiLHtzdGF0aWM6ITB9XX1dLF9pbnB1dENvbnRhaW5lclJlZjpbe3R5cGU6RnIsYXJnczpbImlucHV0Q29udGFpbmVyIl19XSxfbGFiZWw6W3t0eXBlOkZyLGFyZ3M6WyJsYWJlbCJdfV0sX2NvbnRyb2xOb25TdGF0aWM6W3t0eXBlOkhyLGFyZ3M6W2lWXX1dLF9jb250cm9sU3RhdGljOlt7dHlwZTpIcixhcmdzOltpVix7c3RhdGljOiEwfV19XSxfbGFiZWxDaGlsZE5vblN0YXRpYzpbe3R5cGU6SHIsYXJnczpbY1ZdfV0sX2xhYmVsQ2hpbGRTdGF0aWM6W3t0eXBlOkhyLGFyZ3M6W2NWLHtzdGF0aWM6ITB9XX1dLF9wbGFjZWhvbGRlckNoaWxkOlt7dHlwZTpIcixhcmdzOltkVl19XSxfZXJyb3JDaGlsZHJlbjpbe3R5cGU6enIsYXJnczpbZVYse2Rlc2NlbmRhbnRzOiEwfV19XSxfaGludENoaWxkcmVuOlt7dHlwZTp6cixhcmdzOltzVix7ZGVzY2VuZGFudHM6ITB9XX1dLF9wcmVmaXhDaGlsZHJlbjpbe3R5cGU6enIsYXJnczpbcFYse2Rlc2NlbmRhbnRzOiEwfV19XSxfc3VmZml4Q2hpbGRyZW46W3t0eXBlOnpyLGFyZ3M6W3VWLHtkZXNjZW5kYW50czohMH1dfV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoX1YsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGV4cG9ydEFzOiJtYXRGb3JtRmllbGQiLHRlbXBsYXRlOic8ZGl2IGNsYXNzPSJtYXQtZm9ybS1maWVsZC13cmFwcGVyIj5cbiAgPGRpdiBjbGFzcz0ibWF0LWZvcm0tZmllbGQtZmxleCIgI2Nvbm5lY3Rpb25Db250YWluZXJcbiAgICAgICAoY2xpY2spPSJfY29udHJvbC5vbkNvbnRhaW5lckNsaWNrICYmIF9jb250cm9sLm9uQ29udGFpbmVyQ2xpY2soJGV2ZW50KSI+XG5cbiAgICBceDNjIS0tIE91dGxpbmUgdXNlZCBmb3Igb3V0bGluZSBhcHBlYXJhbmNlLiAtLVx4M2VcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPSJhcHBlYXJhbmNlID09IFwnb3V0bGluZVwnIj5cbiAgICAgIDxkaXYgY2xhc3M9Im1hdC1mb3JtLWZpZWxkLW91dGxpbmUiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJtYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0Ij48L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0ibWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAiPjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJtYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZCI+PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9Im1hdC1mb3JtLWZpZWxkLW91dGxpbmUgbWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljayI+XG4gICAgICAgIDxkaXYgY2xhc3M9Im1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQiPjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJtYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcCI+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9Im1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5kIj48L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPGRpdiBjbGFzcz0ibWF0LWZvcm0tZmllbGQtcHJlZml4IiAqbmdJZj0iX3ByZWZpeENoaWxkcmVuLmxlbmd0aCI+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9IlttYXRQcmVmaXhdIj48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPSJtYXQtZm9ybS1maWVsZC1pbmZpeCIgI2lucHV0Q29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuXG4gICAgICA8c3BhbiBjbGFzcz0ibWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciI+XG4gICAgICAgIFx4M2MhLS0gV2UgYWRkIGFyaWEtb3ducyBhcyBhIHdvcmthcm91bmQgZm9yIGFuIGlzc3VlIGluIEpBV1MgJiBOVkRBIHdoZXJlIHRoZSBsYWJlbCBpc25cJ3RcbiAgICAgICAgICAgICByZWFkIGlmIGl0IGNvbWVzIGJlZm9yZSB0aGUgY29udHJvbCBpbiB0aGUgRE9NLiAtLVx4M2VcbiAgICAgICAgPGxhYmVsIGNsYXNzPSJtYXQtZm9ybS1maWVsZC1sYWJlbCJcbiAgICAgICAgICAgICAgIChjZGtPYnNlcnZlQ29udGVudCk9InVwZGF0ZU91dGxpbmVHYXAoKSJcbiAgICAgICAgICAgICAgIFtjZGtPYnNlcnZlQ29udGVudERpc2FibGVkXT0iYXBwZWFyYW5jZSAhPSBcJ291dGxpbmVcJyJcbiAgICAgICAgICAgICAgIFtpZF09Il9sYWJlbElkIlxuICAgICAgICAgICAgICAgW2F0dHIuZm9yXT0iX2NvbnRyb2wuaWQiXG4gICAgICAgICAgICAgICBbYXR0ci5hcmlhLW93bnNdPSJfY29udHJvbC5pZCJcbiAgICAgICAgICAgICAgIFtjbGFzcy5tYXQtZW1wdHldPSJfY29udHJvbC5lbXB0eSAmJiAhX3Nob3VsZEFsd2F5c0Zsb2F0KCkiXG4gICAgICAgICAgICAgICBbY2xhc3MubWF0LWZvcm0tZmllbGQtZW1wdHldPSJfY29udHJvbC5lbXB0eSAmJiAhX3Nob3VsZEFsd2F5c0Zsb2F0KCkiXG4gICAgICAgICAgICAgICBbY2xhc3MubWF0LWFjY2VudF09ImNvbG9yID09IFwnYWNjZW50XCciXG4gICAgICAgICAgICAgICBbY2xhc3MubWF0LXdhcm5dPSJjb2xvciA9PSBcJ3dhcm5cJyJcbiAgICAgICAgICAgICAgICNsYWJlbFxuICAgICAgICAgICAgICAgKm5nSWY9Il9oYXNGbG9hdGluZ0xhYmVsKCkiXG4gICAgICAgICAgICAgICBbbmdTd2l0Y2hdPSJfaGFzTGFiZWwoKSI+XG5cbiAgICAgICAgICBceDNjIS0tIEBicmVha2luZy1jaGFuZ2UgOC4wLjAgcmVtb3ZlIGluIGZhdm9yIG9mIG1hdC1sYWJlbCBlbGVtZW50IGFuIHBsYWNlaG9sZGVyIGF0dHIuIC0tXHgzZVxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT0iZmFsc2UiPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PSJtYXQtcGxhY2Vob2xkZXIiPjwvbmctY29udGVudD5cbiAgICAgICAgICAgIDxzcGFuPnt7X2NvbnRyb2wucGxhY2Vob2xkZXJ9fTwvc3Bhbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD0ibWF0LWxhYmVsIiAqbmdTd2l0Y2hDYXNlPSJ0cnVlIj48L25nLWNvbnRlbnQ+XG5cbiAgICAgICAgICBceDNjIS0tIEBicmVha2luZy1jaGFuZ2UgOC4wLjAgcmVtb3ZlIGBtYXQtcGxhY2Vob2xkZXItcmVxdWlyZWRgIGNsYXNzIC0tXHgzZVxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBjbGFzcz0ibWF0LXBsYWNlaG9sZGVyLXJlcXVpcmVkIG1hdC1mb3JtLWZpZWxkLXJlcXVpcmVkLW1hcmtlciJcbiAgICAgICAgICAgIGFyaWEtaGlkZGVuPSJ0cnVlIlxuICAgICAgICAgICAgKm5nSWY9IiFoaWRlUmVxdWlyZWRNYXJrZXIgJiYgX2NvbnRyb2wucmVxdWlyZWQgJiYgIV9jb250cm9sLmRpc2FibGVkIj4mIzMyOyo8L3NwYW4+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPSJtYXQtZm9ybS1maWVsZC1zdWZmaXgiICpuZ0lmPSJfc3VmZml4Q2hpbGRyZW4ubGVuZ3RoIj5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD0iW21hdFN1ZmZpeF0iPjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgXHgzYyEtLSBVbmRlcmxpbmUgdXNlZCBmb3IgbGVnYWN5LCBzdGFuZGFyZCwgYW5kIGJveCBhcHBlYXJhbmNlcy4gLS1ceDNlXG4gIDxkaXYgY2xhc3M9Im1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSIgI3VuZGVybGluZVxuICAgICAgICpuZ0lmPSJhcHBlYXJhbmNlICE9IFwnb3V0bGluZVwnIj5cbiAgICA8c3BhbiBjbGFzcz0ibWF0LWZvcm0tZmllbGQtcmlwcGxlIlxuICAgICAgICAgIFtjbGFzcy5tYXQtYWNjZW50XT0iY29sb3IgPT0gXCdhY2NlbnRcJyJcbiAgICAgICAgICBbY2xhc3MubWF0LXdhcm5dPSJjb2xvciA9PSBcJ3dhcm5cJyI+PC9zcGFuPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPSJtYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlciJcbiAgICAgICBbbmdTd2l0Y2hdPSJfZ2V0RGlzcGxheWVkTWVzc2FnZXMoKSI+XG4gICAgPGRpdiAqbmdTd2l0Y2hDYXNlPSJcJ2Vycm9yXCciIFtAdHJhbnNpdGlvbk1lc3NhZ2VzXT0iX3N1YnNjcmlwdEFuaW1hdGlvblN0YXRlIj5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD0ibWF0LWVycm9yIj48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPSJtYXQtZm9ybS1maWVsZC1oaW50LXdyYXBwZXIiICpuZ1N3aXRjaENhc2U9IlwnaGludFwnIlxuICAgICAgW0B0cmFuc2l0aW9uTWVzc2FnZXNdPSJfc3Vic2NyaXB0QW5pbWF0aW9uU3RhdGUiPlxuICAgICAgXHgzYyEtLSBUT0RPKG1tYWxlcmJhKTogdXNlIGFuIGFjdHVhbCA8bWF0LWhpbnQ+IG9uY2UgYWxsIHNlbGVjdG9ycyBhcmUgc3dpdGNoZWQgdG8gbWF0LSogLS1ceDNlXG4gICAgICA8ZGl2ICpuZ0lmPSJoaW50TGFiZWwiIFtpZF09Il9oaW50TGFiZWxJZCIgY2xhc3M9Im1hdC1oaW50Ij57e2hpbnRMYWJlbH19PC9kaXY+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9Im1hdC1oaW50Om5vdChbYWxpZ249XCdlbmRcJ10pIj48L25nLWNvbnRlbnQ+XG4gICAgICA8ZGl2IGNsYXNzPSJtYXQtZm9ybS1maWVsZC1oaW50LXNwYWNlciI+PC9kaXY+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9Im1hdC1oaW50W2FsaWduPVwnZW5kXCddIj48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLGFuaW1hdGlvbnM6W29WLnRyYW5zaXRpb25NZXNzYWdlc10saG9zdDp7Y2xhc3M6Im1hdC1mb3JtLWZpZWxkIiwiW2NsYXNzLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmRdIjonYXBwZWFyYW5jZSA9PSAic3RhbmRhcmQiJywiW2NsYXNzLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbF0iOidhcHBlYXJhbmNlID09ICJmaWxsIicsIltjbGFzcy5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVdIjonYXBwZWFyYW5jZSA9PSAib3V0bGluZSInLCJbY2xhc3MubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3ldIjonYXBwZWFyYW5jZSA9PSAibGVnYWN5IicsIltjbGFzcy5tYXQtZm9ybS1maWVsZC1pbnZhbGlkXSI6Il9jb250cm9sLmVycm9yU3RhdGUiLCJbY2xhc3MubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0XSI6Il9jYW5MYWJlbEZsb2F0KCkiLCJbY2xhc3MubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0XSI6Il9zaG91bGRMYWJlbEZsb2F0KCkiLCJbY2xhc3MubWF0LWZvcm0tZmllbGQtaGFzLWxhYmVsXSI6Il9oYXNGbG9hdGluZ0xhYmVsKCkiLCJbY2xhc3MubWF0LWZvcm0tZmllbGQtaGlkZS1wbGFjZWhvbGRlcl0iOiJfaGlkZUNvbnRyb2xQbGFjZWhvbGRlcigpIiwiW2NsYXNzLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkXSI6Il9jb250cm9sLmRpc2FibGVkIiwiW2NsYXNzLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsZWRdIjoiX2NvbnRyb2wuYXV0b2ZpbGxlZCIsIltjbGFzcy5tYXQtZm9jdXNlZF0iOiJfY29udHJvbC5mb2N1c2VkIiwiW2NsYXNzLm5nLXVudG91Y2hlZF0iOidfc2hvdWxkRm9yd2FyZCgidW50b3VjaGVkIiknLCJbY2xhc3MubmctdG91Y2hlZF0iOidfc2hvdWxkRm9yd2FyZCgidG91Y2hlZCIpJywiW2NsYXNzLm5nLXByaXN0aW5lXSI6J19zaG91bGRGb3J3YXJkKCJwcmlzdGluZSIpJywiW2NsYXNzLm5nLWRpcnR5XSI6J19zaG91bGRGb3J3YXJkKCJkaXJ0eSIpJywiW2NsYXNzLm5nLXZhbGlkXSI6J19zaG91bGRGb3J3YXJkKCJ2YWxpZCIpJywiW2NsYXNzLm5nLWludmFsaWRdIjonX3Nob3VsZEZvcndhcmQoImludmFsaWQiKScsIltjbGFzcy5uZy1wZW5kaW5nXSI6J19zaG91bGRGb3J3YXJkKCJwZW5kaW5nIiknLCJbY2xhc3MuX21hdC1hbmltYXRpb24tbm9vcGFibGVdIjoiIV9hbmltYXRpb25zRW5hYmxlZCJ9LGlucHV0czpbImNvbG9yIl0sZW5jYXBzdWxhdGlvbjpQby5Ob25lLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2gscHJvdmlkZXJzOlt7cHJvdmlkZTp5Vix1c2VFeGlzdGluZzpfVn1dLHN0eWxlczpbIi5tYXQtZm9ybS1maWVsZHtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmxlZnR9W2Rpcj1ydGxdIC5tYXQtZm9ybS1maWVsZHt0ZXh0LWFsaWduOnJpZ2h0fS5tYXQtZm9ybS1maWVsZC13cmFwcGVye3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtZm9ybS1maWVsZC1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6YmFzZWxpbmU7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjEwMCV9Lm1hdC1mb3JtLWZpZWxkLXByZWZpeCwubWF0LWZvcm0tZmllbGQtc3VmZml4e3doaXRlLXNwYWNlOm5vd3JhcDtmbGV4Om5vbmU7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1mb3JtLWZpZWxkLWluZml4e2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246cmVsYXRpdmU7ZmxleDphdXRvO21pbi13aWR0aDowO3dpZHRoOjE4MHB4fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWluZml4e2JvcmRlci1pbWFnZTpsaW5lYXItZ3JhZGllbnQodHJhbnNwYXJlbnQsIHRyYW5zcGFyZW50KX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcntwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7Ym94LXNpemluZzpjb250ZW50LWJveDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO292ZXJmbG93OmhpZGRlbjtwb2ludGVyLWV2ZW50czpub25lfVtkaXI9cnRsXSAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcntsZWZ0OmF1dG87cmlnaHQ6MH0ubWF0LWZvcm0tZmllbGQtbGFiZWx7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO2ZvbnQ6aW5oZXJpdDtwb2ludGVyLWV2ZW50czpub25lO3dpZHRoOjEwMCU7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7b3ZlcmZsb3c6aGlkZGVuO3RyYW5zZm9ybS1vcmlnaW46MCAwO3RyYW5zaXRpb246dHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGNvbG9yIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLHdpZHRoIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO2Rpc3BsYXk6bm9uZX1bZGlyPXJ0bF0gLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybS1vcmlnaW46MTAwJSAwO2xlZnQ6YXV0bztyaWdodDowfS5tYXQtZm9ybS1maWVsZC1lbXB0eS5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWx7ZGlzcGxheTpibG9ja30ubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbDotd2Via2l0LWF1dG9maWxsKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtkaXNwbGF5Om5vbmV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbDotd2Via2l0LWF1dG9maWxsKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtkaXNwbGF5OmJsb2NrO3RyYW5zaXRpb246bm9uZX0ubWF0LWlucHV0LXNlcnZlcjpmb2N1cysubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1pbnB1dC1zZXJ2ZXJbcGxhY2Vob2xkZXJdOm5vdCg6cGxhY2Vob2xkZXItc2hvd24pKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtkaXNwbGF5Om5vbmV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcjpmb2N1cysubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcltwbGFjZWhvbGRlcl06bm90KDpwbGFjZWhvbGRlci1zaG93bikrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2Rpc3BsYXk6YmxvY2t9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsOm5vdCgubWF0LWZvcm0tZmllbGQtZW1wdHkpe3RyYW5zaXRpb246bm9uZX0ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjEwMCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2Zvcm06c2NhbGUzZCgxLCAxLjAwMDEsIDEpfS5tYXQtZm9ybS1maWVsZC1yaXBwbGV7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3dpZHRoOjEwMCU7dHJhbnNmb3JtLW9yaWdpbjo1MCU7dHJhbnNmb3JtOnNjYWxlWCgwLjUpO29wYWNpdHk6MDt0cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgMzAwbXMgY3ViaWMtYmV6aWVyKDAuNTUsIDAsIDAuNTUsIDAuMil9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUsLm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtvcGFjaXR5OjE7dHJhbnNmb3JtOm5vbmU7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gMzAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSksb3BhY2l0eSAxMDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxiYWNrZ3JvdW5kLWNvbG9yIDMwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcntwb3NpdGlvbjphYnNvbHV0ZTtib3gtc2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6MTAwJTtvdmVyZmxvdzpoaWRkZW59Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyIC5tYXQtaWNvbiwubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWljb257d2lkdGg6MWVtO2hlaWdodDoxZW07Zm9udC1zaXplOmluaGVyaXQ7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9Lm1hdC1mb3JtLWZpZWxkLWhpbnQtd3JhcHBlcntkaXNwbGF5OmZsZXh9Lm1hdC1mb3JtLWZpZWxkLWhpbnQtc3BhY2Vye2ZsZXg6MSAwIDFlbX0ubWF0LWVycm9ye2Rpc3BsYXk6YmxvY2t9Lm1hdC1mb3JtLWZpZWxkLWNvbnRyb2wtd3JhcHBlcntwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LWZvcm0tZmllbGQtaGludC1lbmR7b3JkZXI6MX0ubWF0LWZvcm0tZmllbGQuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWZvcm0tZmllbGQtcmlwcGxle3RyYW5zaXRpb246bm9uZX1cbiIsJy5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLWZsZXh7Ym9yZGVyLXJhZGl1czo0cHggNHB4IDAgMDtwYWRkaW5nOi43NWVtIC43NWVtIDAgLjc1ZW19LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1mbGV4e291dGxpbmU6c29saWQgMXB4fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZTo6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206MDtoZWlnaHQ6MXB4O3dpZHRoOjEwMCV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtcmlwcGxle2JvdHRvbTowO2hlaWdodDoycHh9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7aGVpZ2h0OjA7Ym9yZGVyLXRvcDpzb2xpZCAycHh9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbDpub3QoLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkKSAubWF0LWZvcm0tZmllbGQtZmxleDpob3Zlcn4ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7b3BhY2l0eToxO3RyYW5zZm9ybTpub25lO3RyYW5zaXRpb246b3BhY2l0eSA2MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlOm5vdCgubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQpIC5tYXQtZm9ybS1maWVsZC1mbGV4OmhvdmVyfi5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmUgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJ7cGFkZGluZzowIDFlbX1cbicsJy5tYXQtaW5wdXQtZWxlbWVudHtmb250OmluaGVyaXQ7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtjb2xvcjpjdXJyZW50Q29sb3I7Ym9yZGVyOm5vbmU7b3V0bGluZTpub25lO3BhZGRpbmc6MDttYXJnaW46MDt3aWR0aDoxMDAlO21heC13aWR0aDoxMDAlO3ZlcnRpY2FsLWFsaWduOmJvdHRvbTt0ZXh0LWFsaWduOmluaGVyaXQ7Ym94LXNpemluZzpjb250ZW50LWJveH0ubWF0LWlucHV0LWVsZW1lbnQ6LW1vei11aS1pbnZhbGlke2JveC1zaGFkb3c6bm9uZX0ubWF0LWlucHV0LWVsZW1lbnQ6Oi1tcy1jbGVhciwubWF0LWlucHV0LWVsZW1lbnQ6Oi1tcy1yZXZlYWx7ZGlzcGxheTpub25lfS5tYXQtaW5wdXQtZWxlbWVudCwubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtc2VhcmNoLWNhbmNlbC1idXR0b24sLm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uLC5tYXQtaW5wdXQtZWxlbWVudDo6LXdlYmtpdC1zZWFyY2gtcmVzdWx0cy1idXR0b24sLm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LXNlYXJjaC1yZXN1bHRzLWRlY29yYXRpb257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9Lm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LWNvbnRhY3RzLWF1dG8tZmlsbC1idXR0b24sLm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LWNhcHMtbG9jay1pbmRpY2F0b3IsLm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LWNyZWRlbnRpYWxzLWF1dG8tZmlsbC1idXR0b257dmlzaWJpbGl0eTpoaWRkZW59Lm1hdC1pbnB1dC1lbGVtZW50W3R5cGU9ZGF0ZV0sLm1hdC1pbnB1dC1lbGVtZW50W3R5cGU9ZGF0ZXRpbWVdLC5tYXQtaW5wdXQtZWxlbWVudFt0eXBlPWRhdGV0aW1lLWxvY2FsXSwubWF0LWlucHV0LWVsZW1lbnRbdHlwZT1tb250aF0sLm1hdC1pbnB1dC1lbGVtZW50W3R5cGU9d2Vla10sLm1hdC1pbnB1dC1lbGVtZW50W3R5cGU9dGltZV17bGluZS1oZWlnaHQ6MX0ubWF0LWlucHV0LWVsZW1lbnRbdHlwZT1kYXRlXTo6YWZ0ZXIsLm1hdC1pbnB1dC1lbGVtZW50W3R5cGU9ZGF0ZXRpbWVdOjphZnRlciwubWF0LWlucHV0LWVsZW1lbnRbdHlwZT1kYXRldGltZS1sb2NhbF06OmFmdGVyLC5tYXQtaW5wdXQtZWxlbWVudFt0eXBlPW1vbnRoXTo6YWZ0ZXIsLm1hdC1pbnB1dC1lbGVtZW50W3R5cGU9d2Vla106OmFmdGVyLC5tYXQtaW5wdXQtZWxlbWVudFt0eXBlPXRpbWVdOjphZnRlcntjb250ZW50OiIgIjt3aGl0ZS1zcGFjZTpwcmU7d2lkdGg6MXB4fS5tYXQtaW5wdXQtZWxlbWVudDo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbiwubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtY2FsZW5kYXItcGlja2VyLWluZGljYXRvciwubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtY2xlYXItYnV0dG9ue2ZvbnQtc2l6ZTouNzVlbX0ubWF0LWlucHV0LWVsZW1lbnQ6OnBsYWNlaG9sZGVyey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt0cmFuc2l0aW9uOmNvbG9yIDQwMG1zIDEzMy4zMzMzMzMzMzMzbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1pbnB1dC1lbGVtZW50OjpwbGFjZWhvbGRlcjotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7LW1zLXVzZXItc2VsZWN0OnRleHR9Lm1hdC1pbnB1dC1lbGVtZW50OjotbW96LXBsYWNlaG9sZGVyey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt0cmFuc2l0aW9uOmNvbG9yIDQwMG1zIDEzMy4zMzMzMzMzMzMzbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1pbnB1dC1lbGVtZW50OjotbW96LXBsYWNlaG9sZGVyOi1tcy1pbnB1dC1wbGFjZWhvbGRlcnstbXMtdXNlci1zZWxlY3Q6dGV4dH0ubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3RyYW5zaXRpb246Y29sb3IgNDAwbXMgMTMzLjMzMzMzMzMzMzNtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXI6LW1zLWlucHV0LXBsYWNlaG9sZGVyey1tcy11c2VyLXNlbGVjdDp0ZXh0fS5tYXQtaW5wdXQtZWxlbWVudDotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3RyYW5zaXRpb246Y29sb3IgNDAwbXMgMTMzLjMzMzMzMzMzMzNtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LWlucHV0LWVsZW1lbnQ6LW1zLWlucHV0LXBsYWNlaG9sZGVyOi1tcy1pbnB1dC1wbGFjZWhvbGRlcnstbXMtdXNlci1zZWxlY3Q6dGV4dH0ubWF0LWZvcm0tZmllbGQtaGlkZS1wbGFjZWhvbGRlciAubWF0LWlucHV0LWVsZW1lbnQ6OnBsYWNlaG9sZGVye2NvbG9yOnRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpub25lfS5tYXQtZm9ybS1maWVsZC1oaWRlLXBsYWNlaG9sZGVyIC5tYXQtaW5wdXQtZWxlbWVudDo6LW1vei1wbGFjZWhvbGRlcntjb2xvcjp0cmFuc3BhcmVudCAhaW1wb3J0YW50Oy13ZWJraXQtdGV4dC1maWxsLWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246bm9uZX0ubWF0LWZvcm0tZmllbGQtaGlkZS1wbGFjZWhvbGRlciAubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6dHJhbnNwYXJlbnQgIWltcG9ydGFudDstd2Via2l0LXRleHQtZmlsbC1jb2xvcjp0cmFuc3BhcmVudDt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1mb3JtLWZpZWxkLWhpZGUtcGxhY2Vob2xkZXIgLm1hdC1pbnB1dC1lbGVtZW50Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjp0cmFuc3BhcmVudCAhaW1wb3J0YW50Oy13ZWJraXQtdGV4dC1maWxsLWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246bm9uZX10ZXh0YXJlYS5tYXQtaW5wdXQtZWxlbWVudHtyZXNpemU6dmVydGljYWw7b3ZlcmZsb3c6YXV0b310ZXh0YXJlYS5tYXQtaW5wdXQtZWxlbWVudC5jZGstdGV4dGFyZWEtYXV0b3NpemV7cmVzaXplOm5vbmV9dGV4dGFyZWEubWF0LWlucHV0LWVsZW1lbnR7cGFkZGluZzoycHggMDttYXJnaW46LTJweCAwfXNlbGVjdC5tYXQtaW5wdXQtZWxlbWVudHstbW96LWFwcGVhcmFuY2U6bm9uZTstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTtwb3NpdGlvbjpyZWxhdGl2ZTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2Rpc3BsYXk6aW5saW5lLWZsZXg7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmctdG9wOjFlbTt0b3A6LTFlbTttYXJnaW4tYm90dG9tOi0xZW19c2VsZWN0Lm1hdC1pbnB1dC1lbGVtZW50OjotbXMtZXhwYW5ke2Rpc3BsYXk6bm9uZX1zZWxlY3QubWF0LWlucHV0LWVsZW1lbnQ6Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9c2VsZWN0Lm1hdC1pbnB1dC1lbGVtZW50Om5vdCg6ZGlzYWJsZWQpe2N1cnNvcjpwb2ludGVyfXNlbGVjdC5tYXQtaW5wdXQtZWxlbWVudDo6LW1zLXZhbHVle2NvbG9yOmluaGVyaXQ7YmFja2dyb3VuZDpub25lfS5tYXQtZm9jdXNlZCAuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIHNlbGVjdC5tYXQtaW5wdXQtZWxlbWVudDo6LW1zLXZhbHVle2NvbG9yOmluaGVyaXR9Lm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb250ZW50OiIiO3dpZHRoOjA7aGVpZ2h0OjA7Ym9yZGVyLWxlZnQ6NXB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yaWdodDo1cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXRvcDo1cHggc29saWQ7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtyaWdodDowO21hcmdpbi10b3A6LTIuNXB4O3BvaW50ZXItZXZlbnRzOm5vbmV9W2Rpcj1ydGxdIC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0IC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7cmlnaHQ6YXV0bztsZWZ0OjB9Lm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QgLm1hdC1pbnB1dC1lbGVtZW50e3BhZGRpbmctcmlnaHQ6MTVweH1bZGlyPXJ0bF0gLm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QgLm1hdC1pbnB1dC1lbGVtZW50e3BhZGRpbmctcmlnaHQ6MDtwYWRkaW5nLWxlZnQ6MTVweH0ubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdCAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcnttYXgtd2lkdGg6Y2FsYygxMDAlIC0gMTBweCl9Lm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7bWFyZ2luLXRvcDotNXB4fS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVye21hcmdpbi10b3A6LTEwcHh9XG4nLCIubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTpwZXJzcGVjdGl2ZSgxMDBweCk7LW1zLXRyYW5zZm9ybTpub25lfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbiwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb257d2lkdGg6MWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbi1idXR0b24sLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29uLWJ1dHRvbntmb250OmluaGVyaXQ7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLWJ1dHRvbiAubWF0LWljb24sLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29uLWJ1dHRvbiAubWF0LWljb257Zm9udC1zaXplOmluaGVyaXR9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7aGVpZ2h0OjFweH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2hlaWdodDowO2JvcmRlci10b3A6c29saWQgMXB4fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtcmlwcGxle3RvcDowO2hlaWdodDoycHg7b3ZlcmZsb3c6aGlkZGVufS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7aGVpZ2h0OjA7Ym9yZGVyLXRvcDpzb2xpZCAycHh9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1wb3NpdGlvbjowO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtib3JkZXItdG9wLXN0eWxlOmRvdHRlZDtib3JkZXItdG9wLXdpZHRoOjJweH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtaW52YWxpZDpub3QoLm1hdC1mb2N1c2VkKSAubWF0LWZvcm0tZmllbGQtcmlwcGxle2hlaWdodDoxcHh9XG4iLCIubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC13cmFwcGVye21hcmdpbjouMjVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLWZsZXh7cGFkZGluZzowIC43NWVtIDAgLjc1ZW07bWFyZ2luLXRvcDotMC4yNWVtO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLXByZWZpeCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1zdWZmaXh7dG9wOi4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmV7ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3RvcDouMjVlbTtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb2ludGVyLWV2ZW50czpub25lfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmR7Ym9yZGVyOjFweCBzb2xpZCBjdXJyZW50Q29sb3I7bWluLXdpZHRoOjVweH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0e2JvcmRlci1yYWRpdXM6NXB4IDAgMCA1cHg7Ym9yZGVyLXJpZ2h0LXN0eWxlOm5vbmV9W2Rpcj1ydGxdIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnR7Ym9yZGVyLXJpZ2h0LXN0eWxlOnNvbGlkO2JvcmRlci1sZWZ0LXN0eWxlOm5vbmU7Ym9yZGVyLXJhZGl1czowIDVweCA1cHggMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZHtib3JkZXItcmFkaXVzOjAgNXB4IDVweCAwO2JvcmRlci1sZWZ0LXN0eWxlOm5vbmU7ZmxleC1ncm93OjF9W2Rpcj1ydGxdIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5ke2JvcmRlci1sZWZ0LXN0eWxlOnNvbGlkO2JvcmRlci1yaWdodC1zdHlsZTpub25lO2JvcmRlci1yYWRpdXM6NXB4IDAgMCA1cHh9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXB7Ym9yZGVyLXJhZGl1czouMDAwMDAxcHg7Ym9yZGVyOjFweCBzb2xpZCBjdXJyZW50Q29sb3I7Ym9yZGVyLWxlZnQtc3R5bGU6bm9uZTtib3JkZXItcmlnaHQtc3R5bGU6bm9uZX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2Fwe2JvcmRlci10b3AtY29sb3I6dHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tvcGFjaXR5OjB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljayAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcHtib3JkZXItd2lkdGg6MnB4fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgMTAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljaywubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2t7b3BhY2l0eToxfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmU6bm90KC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCkgLm1hdC1mb3JtLWZpZWxkLWZsZXg6aG92ZXIgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmV7b3BhY2l0eTowO3RyYW5zaXRpb246b3BhY2l0eSA2MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lOm5vdCgubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQpIC5tYXQtZm9ybS1maWVsZC1mbGV4OmhvdmVyIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre29wYWNpdHk6MX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcntwYWRkaW5nOjAgMWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUuX21hdC1hbmltYXRpb24tbm9vcGFibGU6bm90KC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCkgLm1hdC1mb3JtLWZpZWxkLWZsZXg6aG92ZXJ+Lm1hdC1mb3JtLWZpZWxkLW91dGxpbmUsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZSwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0LC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5kLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2Fwe3RyYW5zaXRpb246bm9uZX1cbiIsIi5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtZm9ybS1maWVsZC1mbGV4e3BhZGRpbmctdG9wOi43NWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7aGVpZ2h0OjFweH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7aGVpZ2h0OjA7Ym9yZGVyLXRvcDpzb2xpZCAxcHh9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtib3R0b206MDtoZWlnaHQ6MnB4fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtoZWlnaHQ6MDtib3JkZXItdG9wOnNvbGlkIDJweH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JhY2tncm91bmQtcG9zaXRpb246MDtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtib3JkZXItdG9wLXN0eWxlOmRvdHRlZDtib3JkZXItdG9wLXdpZHRoOjJweH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZDpub3QoLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkKSAubWF0LWZvcm0tZmllbGQtZmxleDpob3Zlcn4ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7b3BhY2l0eToxO3RyYW5zZm9ybTpub25lO3RyYW5zaXRpb246b3BhY2l0eSA2MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZC5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZTpub3QoLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkKSAubWF0LWZvcm0tZmllbGQtZmxleDpob3Zlcn4ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7dHJhbnNpdGlvbjpub25lfVxuIl19XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpjaH0se3R5cGU6SGh9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltjaF19XX0se3R5cGU6TXosZGVjb3JhdG9yczpbe3R5cGU6X3N9XX0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltiVl19XX0se3R5cGU6Zkl9LHt0eXBlOnRDfSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W053XX1dfV19KSx7ZmxvYXRMYWJlbDpbe3R5cGU6eV99XSxhcHBlYXJhbmNlOlt7dHlwZTp5X31dLGhpZGVSZXF1aXJlZE1hcmtlcjpbe3R5cGU6eV99XSxoaW50TGFiZWw6W3t0eXBlOnlffV0sdW5kZXJsaW5lUmVmOlt7dHlwZTpGcixhcmdzOlsidW5kZXJsaW5lIl19XSxfY29ubmVjdGlvbkNvbnRhaW5lclJlZjpbe3R5cGU6RnIsYXJnczpbImNvbm5lY3Rpb25Db250YWluZXIiLHtzdGF0aWM6ITB9XX1dLF9pbnB1dENvbnRhaW5lclJlZjpbe3R5cGU6RnIsYXJnczpbImlucHV0Q29udGFpbmVyIl19XSxfbGFiZWw6W3t0eXBlOkZyLGFyZ3M6WyJsYWJlbCJdfV0sX2NvbnRyb2xOb25TdGF0aWM6W3t0eXBlOkhyLGFyZ3M6W2lWXX1dLF9jb250cm9sU3RhdGljOlt7dHlwZTpIcixhcmdzOltpVix7c3RhdGljOiEwfV19XSxfbGFiZWxDaGlsZE5vblN0YXRpYzpbe3R5cGU6SHIsYXJnczpbY1ZdfV0sX2xhYmVsQ2hpbGRTdGF0aWM6W3t0eXBlOkhyLGFyZ3M6W2NWLHtzdGF0aWM6ITB9XX1dLF9wbGFjZWhvbGRlckNoaWxkOlt7dHlwZTpIcixhcmdzOltkVl19XSxfZXJyb3JDaGlsZHJlbjpbe3R5cGU6enIsYXJnczpbZVYse2Rlc2NlbmRhbnRzOiEwfV19XSxfaGludENoaWxkcmVuOlt7dHlwZTp6cixhcmdzOltzVix7ZGVzY2VuZGFudHM6ITB9XX1dLF9wcmVmaXhDaGlsZHJlbjpbe3R5cGU6enIsYXJnczpbcFYse2Rlc2NlbmRhbnRzOiEwfV19XSxfc3VmZml4Q2hpbGRyZW46W3t0eXBlOnpyLGFyZ3M6W3VWLHtkZXNjZW5kYW50czohMH1dfV19KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIENWe31DVi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8Q1YpfSxDVi7JtW1vZD1abyh7dHlwZTpDVn0pLENWLsm1aW5qPWNvKHtpbXBvcnRzOltbQnYsVHosREldLFR6XX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oQ1Yse2RlY2xhcmF0aW9uczpmdW5jdGlvbigpe3JldHVybltuVixfVixsVixjVixkVixtVixmVl19LGltcG9ydHM6ZnVuY3Rpb24oKXtyZXR1cm5bQnYsVHosREldfSxleHBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW1R6LG5WLF9WLGxWLGNWLGRWLG1WLGZWXX19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKENWLFt7dHlwZTprXyxhcmdzOlt7ZGVjbGFyYXRpb25zOltuVixfVixsVixjVixkVixtVixmVl0saW1wb3J0czpbQnYsVHosREldLGV4cG9ydHM6W1R6LG5WLF9WLGxWLGNWLGRWLG1WLGZWXX1dfV0sbnVsbCxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZSBBbmd1bGFyIHYxMS4yLjE0CiAgICAgKiAoYykgMjAxMC0yMDIxIEdvb2dsZSBMTEMuIGh0dHBzOi8vYW5ndWxhci5pby8KICAgICAqIExpY2Vuc2U6IE1JVAogICAgICovCmNsYXNzIE1We31jb25zdCB2Vj1uZXcgTnIoIk5nVmFsdWVBY2Nlc3NvciIpLHhWPXtwcm92aWRlOnZWLHVzZUV4aXN0aW5nOkluKCgoKT0+T1YpKSxtdWx0aTohMH07Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NsYXNzIE9WIGV4dGVuZHMgTVZ7Y29uc3RydWN0b3IodCxlKXtzdXBlcigpLHRoaXMuX3JlbmRlcmVyPXQsdGhpcy5fZWxlbWVudFJlZj1lLHRoaXMub25DaGFuZ2U9dD0+e30sdGhpcy5vblRvdWNoZWQ9KCk9Pnt9fXdyaXRlVmFsdWUodCl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCJjaGVja2VkIix0KX1yZWdpc3Rlck9uQ2hhbmdlKHQpe3RoaXMub25DaGFuZ2U9dH1yZWdpc3Rlck9uVG91Y2hlZCh0KXt0aGlzLm9uVG91Y2hlZD10fXNldERpc2FibGVkU3RhdGUodCl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCJkaXNhYmxlZCIsdCl9fU9WLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxPVikoTXUodWgpLE11KGNoKSl9LE9WLsm1ZGlyPUpvKHt0eXBlOk9WLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJjaGVja2JveCIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwiY2hlY2tib3giLCJmb3JtQ29udHJvbCIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwiY2hlY2tib3giLCJuZ01vZGVsIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MSZlJiZOdSgiY2hhbmdlIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vbkNoYW5nZShlLnRhcmdldC5jaGVja2VkKX0pKSgiYmx1ciIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vblRvdWNoZWQoKX0pKX0sZmVhdHVyZXM6W2loKFt4Vl0pLGdtXX0pLE9WLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6dWh9LHt0eXBlOmNofV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihPVixbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJpbnB1dFt0eXBlPWNoZWNrYm94XVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9Y2hlY2tib3hdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPWNoZWNrYm94XVtuZ01vZGVsXSIsaG9zdDp7IihjaGFuZ2UpIjoib25DaGFuZ2UoJGV2ZW50LnRhcmdldC5jaGVja2VkKSIsIihibHVyKSI6Im9uVG91Y2hlZCgpIn0scHJvdmlkZXJzOlt4Vl19XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTp1aH0se3R5cGU6Y2h9XX0pLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3QgUFY9e3Byb3ZpZGU6dlYsdXNlRXhpc3Rpbmc6SW4oKCgpPT5rVikpLG11bHRpOiEwfSx3Vj1uZXcgTnIoIkNvbXBvc2l0aW9uRXZlbnRNb2RlIik7Y2xhc3Mga1Z7Y29uc3RydWN0b3IodCxlLG4pe3RoaXMuX3JlbmRlcmVyPXQsdGhpcy5fZWxlbWVudFJlZj1lLHRoaXMuX2NvbXBvc2l0aW9uTW9kZT1uLHRoaXMub25DaGFuZ2U9dD0+e30sdGhpcy5vblRvdWNoZWQ9KCk9Pnt9LHRoaXMuX2NvbXBvc2luZz0hMSxudWxsPT10aGlzLl9jb21wb3NpdGlvbk1vZGUmJih0aGlzLl9jb21wb3NpdGlvbk1vZGU9IShmdW5jdGlvbiBvKCl7Y29uc3QgdD1qQygpP2pDKCkuZ2V0VXNlckFnZW50KCk6IiI7cmV0dXJuL2FuZHJvaWQgKFxkKykvLnRlc3QodC50b0xvd2VyQ2FzZSgpKX0pKCkpfXdyaXRlVmFsdWUodCl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCJ2YWx1ZSIsbnVsbD09dD8iIjp0KX1yZWdpc3Rlck9uQ2hhbmdlKHQpe3RoaXMub25DaGFuZ2U9dH1yZWdpc3Rlck9uVG91Y2hlZCh0KXt0aGlzLm9uVG91Y2hlZD10fXNldERpc2FibGVkU3RhdGUodCl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCJkaXNhYmxlZCIsdCl9X2hhbmRsZUlucHV0KHQpeyghdGhpcy5fY29tcG9zaXRpb25Nb2RlfHx0aGlzLl9jb21wb3NpdGlvbk1vZGUmJiF0aGlzLl9jb21wb3NpbmcpJiZ0aGlzLm9uQ2hhbmdlKHQpfV9jb21wb3NpdGlvblN0YXJ0KCl7dGhpcy5fY29tcG9zaW5nPSEwfV9jb21wb3NpdGlvbkVuZCh0KXt0aGlzLl9jb21wb3Npbmc9ITEsdGhpcy5fY29tcG9zaXRpb25Nb2RlJiZ0aGlzLm9uQ2hhbmdlKHQpfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmZ1bmN0aW9uIFNWKHQpe3JldHVybiBudWxsPT10fHwwPT09dC5sZW5ndGh9ZnVuY3Rpb24gRFYodCl7cmV0dXJuIG51bGwhPXQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGh9a1YuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGtWKShNdSh1aCksTXUoY2gpLE11KHdWLDgpKX0sa1YuybVkaXI9Sm8oe3R5cGU6a1Ysc2VsZWN0b3JzOltbImlucHV0IiwiZm9ybUNvbnRyb2xOYW1lIiwiIiwzLCJ0eXBlIiwiY2hlY2tib3giXSxbInRleHRhcmVhIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyJpbnB1dCIsImZvcm1Db250cm9sIiwiIiwzLCJ0eXBlIiwiY2hlY2tib3giXSxbInRleHRhcmVhIiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwibmdNb2RlbCIsIiIsMywidHlwZSIsImNoZWNrYm94Il0sWyJ0ZXh0YXJlYSIsIm5nTW9kZWwiLCIiXSxbIiIsIm5nRGVmYXVsdENvbnRyb2wiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJk51KCJpbnB1dCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4uX2hhbmRsZUlucHV0KGUudGFyZ2V0LnZhbHVlKX0pKSgiYmx1ciIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vblRvdWNoZWQoKX0pKSgiY29tcG9zaXRpb25zdGFydCIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5fY29tcG9zaXRpb25TdGFydCgpfSkpKCJjb21wb3NpdGlvbmVuZCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4uX2NvbXBvc2l0aW9uRW5kKGUudGFyZ2V0LnZhbHVlKX0pKX0sZmVhdHVyZXM6W2loKFtQVl0pXX0pLGtWLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6dWh9LHt0eXBlOmNofSx7dHlwZTpCb29sZWFuLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOlt3Vl19XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoa1YsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIixob3N0OnsiKGlucHV0KSI6IiRhbnkodGhpcykuX2hhbmRsZUlucHV0KCRldmVudC50YXJnZXQudmFsdWUpIiwiKGJsdXIpIjoib25Ub3VjaGVkKCkiLCIoY29tcG9zaXRpb25zdGFydCkiOiIkYW55KHRoaXMpLl9jb21wb3NpdGlvblN0YXJ0KCkiLCIoY29tcG9zaXRpb25lbmQpIjoiJGFueSh0aGlzKS5fY29tcG9zaXRpb25FbmQoJGV2ZW50LnRhcmdldC52YWx1ZSkifSxwcm92aWRlcnM6W1BWXX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOnVofSx7dHlwZTpjaH0se3R5cGU6Qm9vbGVhbixkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbd1ZdfV19XX0pLG51bGwpO2NvbnN0IEVWPW5ldyBOcigiTmdWYWxpZGF0b3JzIiksQVY9bmV3IE5yKCJOZ0FzeW5jVmFsaWRhdG9ycyIpLFJWPS9eKD89LnsxLDI1NH0kKSg/PS57MSw2NH1AKVthLXpBLVowLTkhIyQlJicqKy89P15fYHt8fX4tXSsoPzpcLlthLXpBLVowLTkhIyQlJicqKy89P15fYHt8fX4tXSspKkBbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8oPzpcLlthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPykqJC87Y2xhc3MgVFZ7c3RhdGljIG1pbih0KXtyZXR1cm4oZnVuY3Rpb24gZSh0KXtyZXR1cm4gZT0+e2lmKFNWKGUudmFsdWUpfHxTVih0KSlyZXR1cm4gbnVsbDtjb25zdCBuPXBhcnNlRmxvYXQoZS52YWx1ZSk7cmV0dXJuIWlzTmFOKG4pJiZuPHQ/e21pbjp7bWluOnQsYWN0dWFsOmUudmFsdWV9fTpudWxsfX0pKHQpfXN0YXRpYyBtYXgodCl7cmV0dXJuKGZ1bmN0aW9uIGUodCl7cmV0dXJuIGU9PntpZihTVihlLnZhbHVlKXx8U1YodCkpcmV0dXJuIG51bGw7Y29uc3Qgbj1wYXJzZUZsb2F0KGUudmFsdWUpO3JldHVybiFpc05hTihuKSYmbj50P3ttYXg6e21heDp0LGFjdHVhbDplLnZhbHVlfX06bnVsbH19KSh0KX1zdGF0aWMgcmVxdWlyZWQodCl7cmV0dXJuIE5WKHQpfXN0YXRpYyByZXF1aXJlZFRydWUodCl7cmV0dXJuIElWKHQpfXN0YXRpYyBlbWFpbCh0KXtyZXR1cm4gelYodCl9c3RhdGljIG1pbkxlbmd0aCh0KXtyZXR1cm4gSFYodCl9c3RhdGljIG1heExlbmd0aCh0KXtyZXR1cm4gRlYodCl9c3RhdGljIHBhdHRlcm4odCl7cmV0dXJuIExWKHQpfXN0YXRpYyBudWxsVmFsaWRhdG9yKHQpe3JldHVybiBudWxsfXN0YXRpYyBjb21wb3NlKHQpe3JldHVybiBZVih0KX1zdGF0aWMgY29tcG9zZUFzeW5jKHQpe3JldHVybiBaVih0KX19ZnVuY3Rpb24gTlYodCl7cmV0dXJuIFNWKHQudmFsdWUpP3tyZXF1aXJlZDohMH06bnVsbH1mdW5jdGlvbiBJVih0KXtyZXR1cm4hMD09PXQudmFsdWU/bnVsbDp7cmVxdWlyZWQ6ITB9fWZ1bmN0aW9uIHpWKHQpe3JldHVybiBTVih0LnZhbHVlKXx8UlYudGVzdCh0LnZhbHVlKT9udWxsOntlbWFpbDohMH19ZnVuY3Rpb24gSFYodCl7cmV0dXJuIGU9PlNWKGUudmFsdWUpfHwhRFYoZS52YWx1ZSk/bnVsbDplLnZhbHVlLmxlbmd0aDx0P3ttaW5sZW5ndGg6e3JlcXVpcmVkTGVuZ3RoOnQsYWN0dWFsTGVuZ3RoOmUudmFsdWUubGVuZ3RofX06bnVsbH1mdW5jdGlvbiBGVih0KXtyZXR1cm4gZT0+RFYoZS52YWx1ZSkmJmUudmFsdWUubGVuZ3RoPnQ/e21heGxlbmd0aDp7cmVxdWlyZWRMZW5ndGg6dCxhY3R1YWxMZW5ndGg6ZS52YWx1ZS5sZW5ndGh9fTpudWxsfWZ1bmN0aW9uIExWKHQpe2lmKCF0KXJldHVybiBCVjtsZXQgZSxuO3JldHVybiJzdHJpbmciPT10eXBlb2YgdD8obj0iIiwiXiIhPT10LmNoYXJBdCgwKSYmKG4rPSJeIiksbis9dCwiJCIhPT10LmNoYXJBdCh0Lmxlbmd0aC0xKSYmKG4rPSIkIiksZT1uZXcgUmVnRXhwKG4pKToobj10LnRvU3RyaW5nKCksZT10KSx0PT57aWYoU1YodC52YWx1ZSkpcmV0dXJuIG51bGw7Y29uc3Qgbz10LnZhbHVlO3JldHVybiBlLnRlc3Qobyk/bnVsbDp7cGF0dGVybjp7cmVxdWlyZWRQYXR0ZXJuOm4sYWN0dWFsVmFsdWU6b319fX1mdW5jdGlvbiBCVih0KXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBWVih0KXtyZXR1cm4gbnVsbCE9dH1mdW5jdGlvbiBqVih0KXtjb25zdCBlPUF1KHQpP1J0KHQpOnQ7aWYoIVR1KGUpJiYoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkpdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCB2YWxpZGF0b3IgdG8gcmV0dXJuIFByb21pc2Ugb3IgT2JzZXJ2YWJsZS4iKTtyZXR1cm4gZX1mdW5jdGlvbiBVVih0KXtsZXQgZT17fTtyZXR1cm4gdC5mb3JFYWNoKCh0PT57ZT1udWxsIT10P09iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSx0KTplfSkpLDA9PT1PYmplY3Qua2V5cyhlKS5sZW5ndGg/bnVsbDplfWZ1bmN0aW9uIFdWKHQsZSl7cmV0dXJuIGUubWFwKChlPT5lKHQpKSl9ZnVuY3Rpb24gR1YodCl7cmV0dXJuIHQubWFwKCh0PT4oZnVuY3Rpb24gZSh0KXtyZXR1cm4hdC52YWxpZGF0ZX0pKHQpP3Q6ZT0+dC52YWxpZGF0ZShlKSkpfWZ1bmN0aW9uIFlWKHQpe2lmKCF0KXJldHVybiBudWxsO2NvbnN0IGU9dC5maWx0ZXIoVlYpO3JldHVybiAwPT1lLmxlbmd0aD9udWxsOmZ1bmN0aW9uKHQpe3JldHVybiBVVihXVih0LGUpKX19ZnVuY3Rpb24gcVYodCl7cmV0dXJuIG51bGwhPXQ/WVYoR1YodCkpOm51bGx9ZnVuY3Rpb24gWlYodCl7aWYoIXQpcmV0dXJuIG51bGw7Y29uc3QgZT10LmZpbHRlcihWVik7cmV0dXJuIDA9PWUubGVuZ3RoP251bGw6ZnVuY3Rpb24odCl7cmV0dXJuIEx0KFdWKHQsZSkubWFwKGpWKSkucGlwZShodChVVikpfX1mdW5jdGlvbiBYVih0KXtyZXR1cm4gbnVsbCE9dD9aVihHVih0KSk6bnVsbH1mdW5jdGlvbiBLVih0LGUpe3JldHVybiBudWxsPT09dD9bZV06QXJyYXkuaXNBcnJheSh0KT9bLi4udCxlXTpbdCxlXX1mdW5jdGlvbiBKVih0KXtyZXR1cm4gdC5fcmF3VmFsaWRhdG9yc31mdW5jdGlvbiBRVih0KXtyZXR1cm4gdC5fcmF3QXN5bmNWYWxpZGF0b3JzfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jbGFzcyAkVntjb25zdHJ1Y3Rvcigpe3RoaXMuX3Jhd1ZhbGlkYXRvcnM9W10sdGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzPVtdLHRoaXMuX29uRGVzdHJveUNhbGxiYWNrcz1bXX1nZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC52YWx1ZTpudWxsfWdldCB2YWxpZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnZhbGlkOm51bGx9Z2V0IGludmFsaWQoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5pbnZhbGlkOm51bGx9Z2V0IHBlbmRpbmcoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5wZW5kaW5nOm51bGx9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuZGlzYWJsZWQ6bnVsbH1nZXQgZW5hYmxlZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmVuYWJsZWQ6bnVsbH1nZXQgZXJyb3JzKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuZXJyb3JzOm51bGx9Z2V0IHByaXN0aW5lKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wucHJpc3RpbmU6bnVsbH1nZXQgZGlydHkoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5kaXJ0eTpudWxsfWdldCB0b3VjaGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wudG91Y2hlZDpudWxsfWdldCBzdGF0dXMoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5zdGF0dXM6bnVsbH1nZXQgdW50b3VjaGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wudW50b3VjaGVkOm51bGx9Z2V0IHN0YXR1c0NoYW5nZXMoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5zdGF0dXNDaGFuZ2VzOm51bGx9Z2V0IHZhbHVlQ2hhbmdlcygpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnZhbHVlQ2hhbmdlczpudWxsfWdldCBwYXRoKCl7cmV0dXJuIG51bGx9X3NldFZhbGlkYXRvcnModCl7dGhpcy5fcmF3VmFsaWRhdG9ycz10fHxbXSx0aGlzLl9jb21wb3NlZFZhbGlkYXRvckZuPXFWKHRoaXMuX3Jhd1ZhbGlkYXRvcnMpfV9zZXRBc3luY1ZhbGlkYXRvcnModCl7dGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzPXR8fFtdLHRoaXMuX2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbj1YVih0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMpfWdldCB2YWxpZGF0b3IoKXtyZXR1cm4gdGhpcy5fY29tcG9zZWRWYWxpZGF0b3JGbnx8bnVsbH1nZXQgYXN5bmNWYWxpZGF0b3IoKXtyZXR1cm4gdGhpcy5fY29tcG9zZWRBc3luY1ZhbGlkYXRvckZufHxudWxsfV9yZWdpc3Rlck9uRGVzdHJveSh0KXt0aGlzLl9vbkRlc3Ryb3lDYWxsYmFja3MucHVzaCh0KX1faW52b2tlT25EZXN0cm95Q2FsbGJhY2tzKCl7dGhpcy5fb25EZXN0cm95Q2FsbGJhY2tzLmZvckVhY2goKHQ9PnQoKSkpLHRoaXMuX29uRGVzdHJveUNhbGxiYWNrcz1bXX1yZXNldCh0KXt0aGlzLmNvbnRyb2wmJnRoaXMuY29udHJvbC5yZXNldCh0KX1oYXNFcnJvcih0LGUpe3JldHVybiEhdGhpcy5jb250cm9sJiZ0aGlzLmNvbnRyb2wuaGFzRXJyb3IodCxlKX1nZXRFcnJvcih0LGUpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmdldEVycm9yKHQsZSk6bnVsbH19JFYuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fCRWKX0sJFYuybVkaXI9Sm8oe3R5cGU6JFZ9KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIHRqIGV4dGVuZHMgJFZ7Z2V0IGZvcm1EaXJlY3RpdmUoKXtyZXR1cm4gbnVsbH1nZXQgcGF0aCgpe3JldHVybiBudWxsfX10ai7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBlaihlfHx0ail9LHRqLsm1ZGlyPUpvKHt0eXBlOnRqLGZlYXR1cmVzOltnbV19KTtjb25zdCBlaj12cih0aik7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NsYXNzIG5qIGV4dGVuZHMgJFZ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3BhcmVudD1udWxsLHRoaXMubmFtZT1udWxsLHRoaXMudmFsdWVBY2Nlc3Nvcj1udWxsfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY2xhc3Mgb2p7Y29uc3RydWN0b3IodCl7dGhpcy5fY2Q9dH1pcyh0KXt2YXIgZSxuO3JldHVybiEhKG51bGw9PT0obj1udWxsPT09KGU9dGhpcy5fY2QpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmNvbnRyb2wpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuW3RdKX19Y29uc3QgaWo9eyJbY2xhc3MubmctdW50b3VjaGVkXSI6J2lzKCJ1bnRvdWNoZWQiKScsIltjbGFzcy5uZy10b3VjaGVkXSI6J2lzKCJ0b3VjaGVkIiknLCJbY2xhc3MubmctcHJpc3RpbmVdIjonaXMoInByaXN0aW5lIiknLCJbY2xhc3MubmctZGlydHldIjonaXMoImRpcnR5IiknLCJbY2xhc3MubmctdmFsaWRdIjonaXMoInZhbGlkIiknLCJbY2xhc3MubmctaW52YWxpZF0iOidpcygiaW52YWxpZCIpJywiW2NsYXNzLm5nLXBlbmRpbmddIjonaXMoInBlbmRpbmciKSd9O2NsYXNzIGFqIGV4dGVuZHMgb2p7Y29uc3RydWN0b3IodCl7c3VwZXIodCl9fWFqLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxhaikoTXUobmosMikpfSxhai7JtWRpcj1Kbyh7dHlwZTphaixzZWxlY3RvcnM6W1siIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyIiLCJuZ01vZGVsIiwiIl0sWyIiLCJmb3JtQ29udHJvbCIsIiJdXSxob3N0VmFyczoxNCxob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezImZSYmYWYoIm5nLXVudG91Y2hlZCIsbi5pcygidW50b3VjaGVkIikpKCJuZy10b3VjaGVkIixuLmlzKCJ0b3VjaGVkIikpKCJuZy1wcmlzdGluZSIsbi5pcygicHJpc3RpbmUiKSkoIm5nLWRpcnR5IixuLmlzKCJkaXJ0eSIpKSgibmctdmFsaWQiLG4uaXMoInZhbGlkIikpKCJuZy1pbnZhbGlkIixuLmlzKCJpbnZhbGlkIikpKCJuZy1wZW5kaW5nIixuLmlzKCJwZW5kaW5nIikpfSxmZWF0dXJlczpbZ21dfSksYWouY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpuaixkZWNvcmF0b3JzOlt7dHlwZTpDc31dfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihhaixbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSIsaG9zdDppan1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOm5qLGRlY29yYXRvcnM6W3t0eXBlOkNzfV19XX0pLG51bGwpO2NsYXNzIHJqIGV4dGVuZHMgb2p7Y29uc3RydWN0b3IodCl7c3VwZXIodCl9fXJqLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxyaikoTXUodGosMTApKX0scmouybVkaXI9Sm8oe3R5cGU6cmosc2VsZWN0b3JzOltbIiIsImZvcm1Hcm91cE5hbWUiLCIiXSxbIiIsImZvcm1BcnJheU5hbWUiLCIiXSxbIiIsIm5nTW9kZWxHcm91cCIsIiJdLFsiIiwiZm9ybUdyb3VwIiwiIl0sWyJmb3JtIiwzLCJuZ05vRm9ybSIsIiJdLFsiIiwibmdGb3JtIiwiIl1dLGhvc3RWYXJzOjE0LGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MiZlJiZhZigibmctdW50b3VjaGVkIixuLmlzKCJ1bnRvdWNoZWQiKSkoIm5nLXRvdWNoZWQiLG4uaXMoInRvdWNoZWQiKSkoIm5nLXByaXN0aW5lIixuLmlzKCJwcmlzdGluZSIpKSgibmctZGlydHkiLG4uaXMoImRpcnR5IikpKCJuZy12YWxpZCIsbi5pcygidmFsaWQiKSkoIm5nLWludmFsaWQiLG4uaXMoImludmFsaWQiKSkoIm5nLXBlbmRpbmciLG4uaXMoInBlbmRpbmciKSl9LGZlYXR1cmVzOltnbV19KSxyai5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOnRqLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTpDc31dfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihyaixbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIixob3N0OmlqfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6dGosZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOkNzfV19XX0pLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3Qgc2o9J1xuICAgIDxkaXYgW2Zvcm1Hcm91cF09Im15R3JvdXAiPlxuICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT0iZmlyc3ROYW1lIj5cbiAgICA8L2Rpdj5cblxuICAgIEluIHlvdXIgY2xhc3M6XG5cbiAgICB0aGlzLm15R3JvdXAgPSBuZXcgRm9ybUdyb3VwKHtcbiAgICAgICBmaXJzdE5hbWU6IG5ldyBGb3JtQ29udHJvbCgpXG4gICAgfSk7Jyxsaj0nXG4gICAgPGRpdiBbZm9ybUdyb3VwXT0ibXlHcm91cCI+XG4gICAgICAgPGRpdiBmb3JtR3JvdXBOYW1lPSJwZXJzb24iPlxuICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9ImZpcnN0TmFtZSI+XG4gICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICBJbiB5b3VyIGNsYXNzOlxuXG4gICAgdGhpcy5teUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgICAgcGVyc29uOiBuZXcgRm9ybUdyb3VwKHsgZmlyc3ROYW1lOiBuZXcgRm9ybUNvbnRyb2woKSB9KVxuICAgIH0pOycsY2o9J1xuICAgIDxmb3JtPlxuICAgICAgIDxkaXYgbmdNb2RlbEdyb3VwPSJwZXJzb24iPlxuICAgICAgICAgIDxpbnB1dCBbKG5nTW9kZWwpXT0icGVyc29uLm5hbWUiIG5hbWU9ImZpcnN0TmFtZSI+XG4gICAgICAgPC9kaXY+XG4gICAgPC9mb3JtPic7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NsYXNzIGRqe3N0YXRpYyBjb250cm9sUGFyZW50RXhjZXB0aW9uKCl7dGhyb3cgbmV3IEVycm9yKGBmb3JtQ29udHJvbE5hbWUgbXVzdCBiZSB1c2VkIHdpdGggYSBwYXJlbnQgZm9ybUdyb3VwIGRpcmVjdGl2ZS4gIFlvdSdsbCB3YW50IHRvIGFkZCBhIGZvcm1Hcm91cFxuICAgICAgIGRpcmVjdGl2ZSBhbmQgcGFzcyBpdCBhbiBleGlzdGluZyBGb3JtR3JvdXAgaW5zdGFuY2UgKHlvdSBjYW4gY3JlYXRlIG9uZSBpbiB5b3VyIGNsYXNzKS5cblxuICAgICAgRXhhbXBsZTpcblxuICAgICAgJHtzan1gKX1zdGF0aWMgbmdNb2RlbEdyb3VwRXhjZXB0aW9uKCl7dGhyb3cgbmV3IEVycm9yKGBmb3JtQ29udHJvbE5hbWUgY2Fubm90IGJlIHVzZWQgd2l0aCBhbiBuZ01vZGVsR3JvdXAgcGFyZW50LiBJdCBpcyBvbmx5IGNvbXBhdGlibGUgd2l0aCBwYXJlbnRzXG4gICAgICAgdGhhdCBhbHNvIGhhdmUgYSAiZm9ybSIgcHJlZml4OiBmb3JtR3JvdXBOYW1lLCBmb3JtQXJyYXlOYW1lLCBvciBmb3JtR3JvdXAuXG5cbiAgICAgICBPcHRpb24gMTogIFVwZGF0ZSB0aGUgcGFyZW50IHRvIGJlIGZvcm1Hcm91cE5hbWUgKHJlYWN0aXZlIGZvcm0gc3RyYXRlZ3kpXG5cbiAgICAgICAgJHtsan1cblxuICAgICAgICBPcHRpb24gMjogVXNlIG5nTW9kZWwgaW5zdGVhZCBvZiBmb3JtQ29udHJvbE5hbWUgKHRlbXBsYXRlLWRyaXZlbiBzdHJhdGVneSlcblxuICAgICAgICAke2NqfWApfXN0YXRpYyBtaXNzaW5nRm9ybUV4Y2VwdGlvbigpe3Rocm93IG5ldyBFcnJvcihgZm9ybUdyb3VwIGV4cGVjdHMgYSBGb3JtR3JvdXAgaW5zdGFuY2UuIFBsZWFzZSBwYXNzIG9uZSBpbi5cblxuICAgICAgIEV4YW1wbGU6XG5cbiAgICAgICAke3NqfWApfXN0YXRpYyBncm91cFBhcmVudEV4Y2VwdGlvbigpe3Rocm93IG5ldyBFcnJvcihgZm9ybUdyb3VwTmFtZSBtdXN0IGJlIHVzZWQgd2l0aCBhIHBhcmVudCBmb3JtR3JvdXAgZGlyZWN0aXZlLiAgWW91J2xsIHdhbnQgdG8gYWRkIGEgZm9ybUdyb3VwXG4gICAgICBkaXJlY3RpdmUgYW5kIHBhc3MgaXQgYW4gZXhpc3RpbmcgRm9ybUdyb3VwIGluc3RhbmNlICh5b3UgY2FuIGNyZWF0ZSBvbmUgaW4geW91ciBjbGFzcykuXG5cbiAgICAgIEV4YW1wbGU6XG5cbiAgICAgICR7bGp9YCl9c3RhdGljIGFycmF5UGFyZW50RXhjZXB0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCdmb3JtQXJyYXlOYW1lIG11c3QgYmUgdXNlZCB3aXRoIGEgcGFyZW50IGZvcm1Hcm91cCBkaXJlY3RpdmUuICBZb3VcJ2xsIHdhbnQgdG8gYWRkIGEgZm9ybUdyb3VwXG4gICAgICAgZGlyZWN0aXZlIGFuZCBwYXNzIGl0IGFuIGV4aXN0aW5nIEZvcm1Hcm91cCBpbnN0YW5jZSAoeW91IGNhbiBjcmVhdGUgb25lIGluIHlvdXIgY2xhc3MpLlxuXG4gICAgICAgIEV4YW1wbGU6XG5cbiAgICAgICAgXG4gICAgPGRpdiBbZm9ybUdyb3VwXT0ibXlHcm91cCI+XG4gICAgICA8ZGl2IGZvcm1BcnJheU5hbWU9ImNpdGllcyI+XG4gICAgICAgIDxkaXYgKm5nRm9yPSJsZXQgY2l0eSBvZiBjaXR5QXJyYXkuY29udHJvbHM7IGluZGV4IGFzIGkiPlxuICAgICAgICAgIDxpbnB1dCBbZm9ybUNvbnRyb2xOYW1lXT0iaSI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICBJbiB5b3VyIGNsYXNzOlxuXG4gICAgdGhpcy5jaXR5QXJyYXkgPSBuZXcgRm9ybUFycmF5KFtuZXcgRm9ybUNvbnRyb2woXCdTRlwnKV0pO1xuICAgIHRoaXMubXlHcm91cCA9IG5ldyBGb3JtR3JvdXAoe1xuICAgICAgY2l0aWVzOiB0aGlzLmNpdHlBcnJheVxuICAgIH0pOycpfXN0YXRpYyBkaXNhYmxlZEF0dHJXYXJuaW5nKCl7Y29uc29sZS53YXJuKCJcbiAgICAgIEl0IGxvb2tzIGxpa2UgeW91J3JlIHVzaW5nIHRoZSBkaXNhYmxlZCBhdHRyaWJ1dGUgd2l0aCBhIHJlYWN0aXZlIGZvcm0gZGlyZWN0aXZlLiBJZiB5b3Ugc2V0IGRpc2FibGVkIHRvIHRydWVcbiAgICAgIHdoZW4geW91IHNldCB1cCB0aGlzIGNvbnRyb2wgaW4geW91ciBjb21wb25lbnQgY2xhc3MsIHRoZSBkaXNhYmxlZCBhdHRyaWJ1dGUgd2lsbCBhY3R1YWxseSBiZSBzZXQgaW4gdGhlIERPTSBmb3JcbiAgICAgIHlvdS4gV2UgcmVjb21tZW5kIHVzaW5nIHRoaXMgYXBwcm9hY2ggdG8gYXZvaWQgJ2NoYW5nZWQgYWZ0ZXIgY2hlY2tlZCcgZXJyb3JzLlxuXG4gICAgICBFeGFtcGxlOlxuICAgICAgZm9ybSA9IG5ldyBGb3JtR3JvdXAoe1xuICAgICAgICBmaXJzdDogbmV3IEZvcm1Db250cm9sKHt2YWx1ZTogJ05hbmN5JywgZGlzYWJsZWQ6IHRydWV9LCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAgICAgICAgbGFzdDogbmV3IEZvcm1Db250cm9sKCdEcmV3JywgVmFsaWRhdG9ycy5yZXF1aXJlZClcbiAgICAgIH0pO1xuICAgICIpfXN0YXRpYyBuZ01vZGVsV2FybmluZyh0KXtjb25zb2xlLndhcm4oYFxuICAgIEl0IGxvb2tzIGxpa2UgeW91J3JlIHVzaW5nIG5nTW9kZWwgb24gdGhlIHNhbWUgZm9ybSBmaWVsZCBhcyAke3R9LlxuICAgIFN1cHBvcnQgZm9yIHVzaW5nIHRoZSBuZ01vZGVsIGlucHV0IHByb3BlcnR5IGFuZCBuZ01vZGVsQ2hhbmdlIGV2ZW50IHdpdGhcbiAgICByZWFjdGl2ZSBmb3JtIGRpcmVjdGl2ZXMgaGFzIGJlZW4gZGVwcmVjYXRlZCBpbiBBbmd1bGFyIHY2IGFuZCB3aWxsIGJlIHJlbW92ZWRcbiAgICBpbiBhIGZ1dHVyZSB2ZXJzaW9uIG9mIEFuZ3VsYXIuXG5cbiAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzLCBzZWUgb3VyIEFQSSBkb2NzIGhlcmU6XG4gICAgaHR0cHM6Ly9hbmd1bGFyLmlvL2FwaS9mb3Jtcy8keyJmb3JtQ29udHJvbCI9PT10PyJGb3JtQ29udHJvbERpcmVjdGl2ZSI6IkZvcm1Db250cm9sTmFtZSJ9I3VzZS13aXRoLW5nbW9kZWxcbiAgICBgKX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIHBqKHQsZSl7cmV0dXJuWy4uLmUucGF0aCx0XX1mdW5jdGlvbiBtaih0LGUpeygidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmKHR8fF9qKGUsIkNhbm5vdCBmaW5kIGNvbnRyb2wgd2l0aCIpLGUudmFsdWVBY2Nlc3Nvcnx8X2ooZSwiTm8gdmFsdWUgYWNjZXNzb3IgZm9yIGZvcm0gY29udHJvbCB3aXRoIikpLGdqKHQsZSwhMCksZS52YWx1ZUFjY2Vzc29yLndyaXRlVmFsdWUodC52YWx1ZSksKGZ1bmN0aW9uIG4odCxlKXtlLnZhbHVlQWNjZXNzb3IucmVnaXN0ZXJPbkNoYW5nZSgobj0+e3QuX3BlbmRpbmdWYWx1ZT1uLHQuX3BlbmRpbmdDaGFuZ2U9ITAsdC5fcGVuZGluZ0RpcnR5PSEwLCJjaGFuZ2UiPT09dC51cGRhdGVPbiYmYmoodCxlKX0pKX0pKHQsZSksKGZ1bmN0aW9uIG8odCxlKXtjb25zdCBuPSh0LG4pPT57ZS52YWx1ZUFjY2Vzc29yLndyaXRlVmFsdWUodCksbiYmZS52aWV3VG9Nb2RlbFVwZGF0ZSh0KX07dC5yZWdpc3Rlck9uQ2hhbmdlKG4pLGUuX3JlZ2lzdGVyT25EZXN0cm95KCgoKT0+e3QuX3VucmVnaXN0ZXJPbkNoYW5nZShuKX0pKX0pKHQsZSksKGZ1bmN0aW9uIGkodCxlKXtlLnZhbHVlQWNjZXNzb3IucmVnaXN0ZXJPblRvdWNoZWQoKCgpPT57dC5fcGVuZGluZ1RvdWNoZWQ9ITAsImJsdXIiPT09dC51cGRhdGVPbiYmdC5fcGVuZGluZ0NoYW5nZSYmYmoodCxlKSwic3VibWl0IiE9PXQudXBkYXRlT24mJnQubWFya0FzVG91Y2hlZCgpfSkpfSkodCxlKSwoZnVuY3Rpb24gYSh0LGUpe2lmKGUudmFsdWVBY2Nlc3Nvci5zZXREaXNhYmxlZFN0YXRlKXtjb25zdCBuPXQ9PntlLnZhbHVlQWNjZXNzb3Iuc2V0RGlzYWJsZWRTdGF0ZSh0KX07dC5yZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2UobiksZS5fcmVnaXN0ZXJPbkRlc3Ryb3koKCgpPT57dC5fdW5yZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2Uobil9KSl9fSkodCxlKX1mdW5jdGlvbiB1aih0LGUsbj0hMCl7Y29uc3Qgbz0oKT0+e24mJigidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmKGZ1bmN0aW9uIHQoZSl7X2ooZSwiVGhlcmUgaXMgbm8gRm9ybUNvbnRyb2wgaW5zdGFuY2UgYXR0YWNoZWQgdG8gZm9ybSBjb250cm9sIGVsZW1lbnQgd2l0aCIpfSkoZSl9O2UudmFsdWVBY2Nlc3NvciYmKGUudmFsdWVBY2Nlc3Nvci5yZWdpc3Rlck9uQ2hhbmdlKG8pLGUudmFsdWVBY2Nlc3Nvci5yZWdpc3Rlck9uVG91Y2hlZChvKSksaGoodCxlLCEwKSx0JiYoZS5faW52b2tlT25EZXN0cm95Q2FsbGJhY2tzKCksdC5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UoKCgpPT57fSkpKX1mdW5jdGlvbiBmaih0LGUpe3QuZm9yRWFjaCgodD0+e3QucmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZSYmdC5yZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKGUpfSkpfWZ1bmN0aW9uIGdqKHQsZSxuKXtjb25zdCBvPUpWKHQpO251bGwhPT1lLnZhbGlkYXRvcj90LnNldFZhbGlkYXRvcnMoS1YobyxlLnZhbGlkYXRvcikpOiJmdW5jdGlvbiI9PXR5cGVvZiBvJiZ0LnNldFZhbGlkYXRvcnMoW29dKTtjb25zdCBpPVFWKHQpO2lmKG51bGwhPT1lLmFzeW5jVmFsaWRhdG9yP3Quc2V0QXN5bmNWYWxpZGF0b3JzKEtWKGksZS5hc3luY1ZhbGlkYXRvcikpOiJmdW5jdGlvbiI9PXR5cGVvZiBpJiZ0LnNldEFzeW5jVmFsaWRhdG9ycyhbaV0pLG4pe2NvbnN0IG49KCk9PnQudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO2ZqKGUuX3Jhd1ZhbGlkYXRvcnMsbiksZmooZS5fcmF3QXN5bmNWYWxpZGF0b3JzLG4pfX1mdW5jdGlvbiBoaih0LGUsbil7bGV0IG89ITE7aWYobnVsbCE9PXQpe2lmKG51bGwhPT1lLnZhbGlkYXRvcil7Y29uc3Qgbj1KVih0KTtpZihBcnJheS5pc0FycmF5KG4pJiZuLmxlbmd0aD4wKXtjb25zdCBpPW4uZmlsdGVyKCh0PT50IT09ZS52YWxpZGF0b3IpKTtpLmxlbmd0aCE9PW4ubGVuZ3RoJiYobz0hMCx0LnNldFZhbGlkYXRvcnMoaSkpfX1pZihudWxsIT09ZS5hc3luY1ZhbGlkYXRvcil7Y29uc3Qgbj1RVih0KTtpZihBcnJheS5pc0FycmF5KG4pJiZuLmxlbmd0aD4wKXtjb25zdCBpPW4uZmlsdGVyKCh0PT50IT09ZS5hc3luY1ZhbGlkYXRvcikpO2kubGVuZ3RoIT09bi5sZW5ndGgmJihvPSEwLHQuc2V0QXN5bmNWYWxpZGF0b3JzKGkpKX19fWlmKG4pe2NvbnN0IHQ9KCk9Pnt9O2ZqKGUuX3Jhd1ZhbGlkYXRvcnMsdCksZmooZS5fcmF3QXN5bmNWYWxpZGF0b3JzLHQpfXJldHVybiBvfWZ1bmN0aW9uIGJqKHQsZSl7dC5fcGVuZGluZ0RpcnR5JiZ0Lm1hcmtBc0RpcnR5KCksdC5zZXRWYWx1ZSh0Ll9wZW5kaW5nVmFsdWUse2VtaXRNb2RlbFRvVmlld0NoYW5nZTohMX0pLGUudmlld1RvTW9kZWxVcGRhdGUodC5fcGVuZGluZ1ZhbHVlKSx0Ll9wZW5kaW5nQ2hhbmdlPSExfWZ1bmN0aW9uIHlqKHQsZSl7bnVsbCE9dHx8InVuZGVmaW5lZCIhPXR5cGVvZiBuZ0Rldk1vZGUmJiFuZ0Rldk1vZGV8fF9qKGUsIkNhbm5vdCBmaW5kIGNvbnRyb2wgd2l0aCIpLGdqKHQsZSwhMSl9ZnVuY3Rpb24gX2oodCxlKXtsZXQgbjt0aHJvdyBuPXQucGF0aC5sZW5ndGg+MT9gcGF0aDogJyR7dC5wYXRoLmpvaW4oIiAtPiAiKX0nYDp0LnBhdGhbMF0/YG5hbWU6ICcke3QucGF0aH0nYDoidW5zcGVjaWZpZWQgbmFtZSBhdHRyaWJ1dGUiLG5ldyBFcnJvcihgJHtlfSAke259YCl9ZnVuY3Rpb24gQ2oodCxlKXtpZighdC5oYXNPd25Qcm9wZXJ0eSgibW9kZWwiKSlyZXR1cm4hMTtjb25zdCBuPXQubW9kZWw7cmV0dXJuISFuLmlzRmlyc3RDaGFuZ2UoKXx8IU9iamVjdC5pcyhlLG4uY3VycmVudFZhbHVlKX1mdW5jdGlvbiBNaih0LGUpe3QuX3N5bmNQZW5kaW5nQ29udHJvbHMoKSxlLmZvckVhY2goKHQ9Pntjb25zdCBlPXQuY29udHJvbDsic3VibWl0Ij09PWUudXBkYXRlT24mJmUuX3BlbmRpbmdDaGFuZ2UmJih0LnZpZXdUb01vZGVsVXBkYXRlKGUuX3BlbmRpbmdWYWx1ZSksZS5fcGVuZGluZ0NoYW5nZT0hMSl9KSl9ZnVuY3Rpb24gdmoodCxlKXtpZighZSlyZXR1cm4gbnVsbDtsZXQgbixvLGk7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSl8fCJ1bmRlZmluZWQiIT10eXBlb2YgbmdEZXZNb2RlJiYhbmdEZXZNb2RlfHxfaih0LCJWYWx1ZSBhY2Nlc3NvciB3YXMgbm90IHByb3ZpZGVkIGFzIGFuIGFycmF5IGZvciBmb3JtIGNvbnRyb2wgd2l0aCIpLGUuZm9yRWFjaCgoZT0+e2UuY29uc3RydWN0b3I9PT1rVj9uPWU6KGZ1bmN0aW9uIGEodCl7cmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZih0LmNvbnN0cnVjdG9yKT09PU1WfSkoZSk/KG8mJigidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmX2oodCwiTW9yZSB0aGFuIG9uZSBidWlsdC1pbiB2YWx1ZSBhY2Nlc3NvciBtYXRjaGVzIGZvcm0gY29udHJvbCB3aXRoIiksbz1lKTooaSYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZfaih0LCJNb3JlIHRoYW4gb25lIGN1c3RvbSB2YWx1ZSBhY2Nlc3NvciBtYXRjaGVzIGZvcm0gY29udHJvbCB3aXRoIiksaT1lKX0pKSxpfHxvfHxufHwoKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZfaih0LCJObyB2YWxpZCB2YWx1ZSBhY2Nlc3NvciBmb3IgZm9ybSBjb250cm9sIHdpdGgiKSxudWxsKX1mdW5jdGlvbiB4aih0LGUpe2NvbnN0IG49dC5pbmRleE9mKGUpO24+LTEmJnQuc3BsaWNlKG4sMSl9ZnVuY3Rpb24gT2oodCxlLG4sbyl7Im5ldmVyIiE9PW8mJigobnVsbCE9PW8mJiJvbmNlIiE9PW98fGUuX25nTW9kZWxXYXJuaW5nU2VudE9uY2UpJiYoImFsd2F5cyIhPT1vfHxuLl9uZ01vZGVsV2FybmluZ1NlbnQpfHwoZGoubmdNb2RlbFdhcm5pbmcodCksZS5fbmdNb2RlbFdhcm5pbmdTZW50T25jZT0hMCxuLl9uZ01vZGVsV2FybmluZ1NlbnQ9ITApKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY29uc3QgUGo9IlZBTElEIix3aj0iSU5WQUxJRCIsa2o9IlBFTkRJTkciLFNqPSJESVNBQkxFRCI7ZnVuY3Rpb24gRGoodCl7cmV0dXJuKFRqKHQpP3QudmFsaWRhdG9yczp0KXx8bnVsbH1mdW5jdGlvbiBFaih0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT9xVih0KTp0fHxudWxsfWZ1bmN0aW9uIEFqKHQsZSl7cmV0dXJuKFRqKGUpP2UuYXN5bmNWYWxpZGF0b3JzOnQpfHxudWxsfWZ1bmN0aW9uIFJqKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP1hWKHQpOnR8fG51bGx9ZnVuY3Rpb24gVGoodCl7cmV0dXJuIG51bGwhPXQmJiFBcnJheS5pc0FycmF5KHQpJiYib2JqZWN0Ij09dHlwZW9mIHR9Y2xhc3MgTmp7Y29uc3RydWN0b3IodCxlKXt0aGlzLl9oYXNPd25QZW5kaW5nQXN5bmNWYWxpZGF0b3I9ITEsdGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlPSgpPT57fSx0aGlzLl9wYXJlbnQ9bnVsbCx0aGlzLnByaXN0aW5lPSEwLHRoaXMudG91Y2hlZD0hMSx0aGlzLl9vbkRpc2FibGVkQ2hhbmdlPVtdLHRoaXMuX3Jhd1ZhbGlkYXRvcnM9dCx0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnM9ZSx0aGlzLl9jb21wb3NlZFZhbGlkYXRvckZuPUVqKHRoaXMuX3Jhd1ZhbGlkYXRvcnMpLHRoaXMuX2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbj1Saih0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMpfWdldCB2YWxpZGF0b3IoKXtyZXR1cm4gdGhpcy5fY29tcG9zZWRWYWxpZGF0b3JGbn1zZXQgdmFsaWRhdG9yKHQpe3RoaXMuX3Jhd1ZhbGlkYXRvcnM9dGhpcy5fY29tcG9zZWRWYWxpZGF0b3JGbj10fWdldCBhc3luY1ZhbGlkYXRvcigpe3JldHVybiB0aGlzLl9jb21wb3NlZEFzeW5jVmFsaWRhdG9yRm59c2V0IGFzeW5jVmFsaWRhdG9yKHQpe3RoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycz10aGlzLl9jb21wb3NlZEFzeW5jVmFsaWRhdG9yRm49dH1nZXQgcGFyZW50KCl7cmV0dXJuIHRoaXMuX3BhcmVudH1nZXQgdmFsaWQoKXtyZXR1cm4gdGhpcy5zdGF0dXM9PT1Qan1nZXQgaW52YWxpZCgpe3JldHVybiB0aGlzLnN0YXR1cz09PXdqfWdldCBwZW5kaW5nKCl7cmV0dXJuIHRoaXMuc3RhdHVzPT1ran1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5zdGF0dXM9PT1Tan1nZXQgZW5hYmxlZCgpe3JldHVybiB0aGlzLnN0YXR1cyE9PVNqfWdldCBkaXJ0eSgpe3JldHVybiF0aGlzLnByaXN0aW5lfWdldCB1bnRvdWNoZWQoKXtyZXR1cm4hdGhpcy50b3VjaGVkfWdldCB1cGRhdGVPbigpe3JldHVybiB0aGlzLl91cGRhdGVPbj90aGlzLl91cGRhdGVPbjp0aGlzLnBhcmVudD90aGlzLnBhcmVudC51cGRhdGVPbjoiY2hhbmdlIn1zZXRWYWxpZGF0b3JzKHQpe3RoaXMuX3Jhd1ZhbGlkYXRvcnM9dCx0aGlzLl9jb21wb3NlZFZhbGlkYXRvckZuPUVqKHQpfXNldEFzeW5jVmFsaWRhdG9ycyh0KXt0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnM9dCx0aGlzLl9jb21wb3NlZEFzeW5jVmFsaWRhdG9yRm49UmoodCl9Y2xlYXJWYWxpZGF0b3JzKCl7dGhpcy52YWxpZGF0b3I9bnVsbH1jbGVhckFzeW5jVmFsaWRhdG9ycygpe3RoaXMuYXN5bmNWYWxpZGF0b3I9bnVsbH1tYXJrQXNUb3VjaGVkKHQ9e30pe3RoaXMudG91Y2hlZD0hMCx0aGlzLl9wYXJlbnQmJiF0Lm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQubWFya0FzVG91Y2hlZCh0KX1tYXJrQWxsQXNUb3VjaGVkKCl7dGhpcy5tYXJrQXNUb3VjaGVkKHtvbmx5U2VsZjohMH0pLHRoaXMuX2ZvckVhY2hDaGlsZCgodD0+dC5tYXJrQWxsQXNUb3VjaGVkKCkpKX1tYXJrQXNVbnRvdWNoZWQodD17fSl7dGhpcy50b3VjaGVkPSExLHRoaXMuX3BlbmRpbmdUb3VjaGVkPSExLHRoaXMuX2ZvckVhY2hDaGlsZCgodD0+e3QubWFya0FzVW50b3VjaGVkKHtvbmx5U2VsZjohMH0pfSkpLHRoaXMuX3BhcmVudCYmIXQub25seVNlbGYmJnRoaXMuX3BhcmVudC5fdXBkYXRlVG91Y2hlZCh0KX1tYXJrQXNEaXJ0eSh0PXt9KXt0aGlzLnByaXN0aW5lPSExLHRoaXMuX3BhcmVudCYmIXQub25seVNlbGYmJnRoaXMuX3BhcmVudC5tYXJrQXNEaXJ0eSh0KX1tYXJrQXNQcmlzdGluZSh0PXt9KXt0aGlzLnByaXN0aW5lPSEwLHRoaXMuX3BlbmRpbmdEaXJ0eT0hMSx0aGlzLl9mb3JFYWNoQ2hpbGQoKHQ9Pnt0Lm1hcmtBc1ByaXN0aW5lKHtvbmx5U2VsZjohMH0pfSkpLHRoaXMuX3BhcmVudCYmIXQub25seVNlbGYmJnRoaXMuX3BhcmVudC5fdXBkYXRlUHJpc3RpbmUodCl9bWFya0FzUGVuZGluZyh0PXt9KXt0aGlzLnN0YXR1cz1raiwhMSE9PXQuZW1pdEV2ZW50JiZ0aGlzLnN0YXR1c0NoYW5nZXMuZW1pdCh0aGlzLnN0YXR1cyksdGhpcy5fcGFyZW50JiYhdC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Lm1hcmtBc1BlbmRpbmcodCl9ZGlzYWJsZSh0PXt9KXtjb25zdCBlPXRoaXMuX3BhcmVudE1hcmtlZERpcnR5KHQub25seVNlbGYpO3RoaXMuc3RhdHVzPVNqLHRoaXMuZXJyb3JzPW51bGwsdGhpcy5fZm9yRWFjaENoaWxkKChlPT57ZS5kaXNhYmxlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7b25seVNlbGY6ITB9KSl9KSksdGhpcy5fdXBkYXRlVmFsdWUoKSwhMSE9PXQuZW1pdEV2ZW50JiYodGhpcy52YWx1ZUNoYW5nZXMuZW1pdCh0aGlzLnZhbHVlKSx0aGlzLnN0YXR1c0NoYW5nZXMuZW1pdCh0aGlzLnN0YXR1cykpLHRoaXMuX3VwZGF0ZUFuY2VzdG9ycyhPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3NraXBQcmlzdGluZUNoZWNrOmV9KSksdGhpcy5fb25EaXNhYmxlZENoYW5nZS5mb3JFYWNoKCh0PT50KCEwKSkpfWVuYWJsZSh0PXt9KXtjb25zdCBlPXRoaXMuX3BhcmVudE1hcmtlZERpcnR5KHQub25seVNlbGYpO3RoaXMuc3RhdHVzPVBqLHRoaXMuX2ZvckVhY2hDaGlsZCgoZT0+e2UuZW5hYmxlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7b25seVNlbGY6ITB9KSl9KSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6dC5lbWl0RXZlbnR9KSx0aGlzLl91cGRhdGVBbmNlc3RvcnMoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtza2lwUHJpc3RpbmVDaGVjazplfSkpLHRoaXMuX29uRGlzYWJsZWRDaGFuZ2UuZm9yRWFjaCgodD0+dCghMSkpKX1fdXBkYXRlQW5jZXN0b3JzKHQpe3RoaXMuX3BhcmVudCYmIXQub25seVNlbGYmJih0aGlzLl9wYXJlbnQudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh0KSx0LnNraXBQcmlzdGluZUNoZWNrfHx0aGlzLl9wYXJlbnQuX3VwZGF0ZVByaXN0aW5lKCksdGhpcy5fcGFyZW50Ll91cGRhdGVUb3VjaGVkKCkpfXNldFBhcmVudCh0KXt0aGlzLl9wYXJlbnQ9dH11cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHQ9e30pe3RoaXMuX3NldEluaXRpYWxTdGF0dXMoKSx0aGlzLl91cGRhdGVWYWx1ZSgpLHRoaXMuZW5hYmxlZCYmKHRoaXMuX2NhbmNlbEV4aXN0aW5nU3Vic2NyaXB0aW9uKCksdGhpcy5lcnJvcnM9dGhpcy5fcnVuVmFsaWRhdG9yKCksdGhpcy5zdGF0dXM9dGhpcy5fY2FsY3VsYXRlU3RhdHVzKCksdGhpcy5zdGF0dXMhPT1QaiYmdGhpcy5zdGF0dXMhPT1ranx8dGhpcy5fcnVuQXN5bmNWYWxpZGF0b3IodC5lbWl0RXZlbnQpKSwhMSE9PXQuZW1pdEV2ZW50JiYodGhpcy52YWx1ZUNoYW5nZXMuZW1pdCh0aGlzLnZhbHVlKSx0aGlzLnN0YXR1c0NoYW5nZXMuZW1pdCh0aGlzLnN0YXR1cykpLHRoaXMuX3BhcmVudCYmIXQub25seVNlbGYmJnRoaXMuX3BhcmVudC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHQpfV91cGRhdGVUcmVlVmFsaWRpdHkodD17ZW1pdEV2ZW50OiEwfSl7dGhpcy5fZm9yRWFjaENoaWxkKChlPT5lLl91cGRhdGVUcmVlVmFsaWRpdHkodCkpKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe29ubHlTZWxmOiEwLGVtaXRFdmVudDp0LmVtaXRFdmVudH0pfV9zZXRJbml0aWFsU3RhdHVzKCl7dGhpcy5zdGF0dXM9dGhpcy5fYWxsQ29udHJvbHNEaXNhYmxlZCgpP1NqOlBqfV9ydW5WYWxpZGF0b3IoKXtyZXR1cm4gdGhpcy52YWxpZGF0b3I/dGhpcy52YWxpZGF0b3IodGhpcyk6bnVsbH1fcnVuQXN5bmNWYWxpZGF0b3IodCl7aWYodGhpcy5hc3luY1ZhbGlkYXRvcil7dGhpcy5zdGF0dXM9a2osdGhpcy5faGFzT3duUGVuZGluZ0FzeW5jVmFsaWRhdG9yPSEwO2NvbnN0IGU9alYodGhpcy5hc3luY1ZhbGlkYXRvcih0aGlzKSk7dGhpcy5fYXN5bmNWYWxpZGF0aW9uU3Vic2NyaXB0aW9uPWUuc3Vic2NyaWJlKChlPT57dGhpcy5faGFzT3duUGVuZGluZ0FzeW5jVmFsaWRhdG9yPSExLHRoaXMuc2V0RXJyb3JzKGUse2VtaXRFdmVudDp0fSl9KSl9fV9jYW5jZWxFeGlzdGluZ1N1YnNjcmlwdGlvbigpe3RoaXMuX2FzeW5jVmFsaWRhdGlvblN1YnNjcmlwdGlvbiYmKHRoaXMuX2FzeW5jVmFsaWRhdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcj0hMSl9c2V0RXJyb3JzKHQsZT17fSl7dGhpcy5lcnJvcnM9dCx0aGlzLl91cGRhdGVDb250cm9sc0Vycm9ycyghMSE9PWUuZW1pdEV2ZW50KX1nZXQodCl7cmV0dXJuKGZ1bmN0aW9uIGUodCxuLG8pe2lmKG51bGw9PW4pcmV0dXJuIG51bGw7aWYoQXJyYXkuaXNBcnJheShuKXx8KG49bi5zcGxpdChvKSksQXJyYXkuaXNBcnJheShuKSYmMD09PW4ubGVuZ3RoKXJldHVybiBudWxsO2xldCBpPXQ7cmV0dXJuIG4uZm9yRWFjaCgodD0+e2k9aSBpbnN0YW5jZW9mIHpqP2kuY29udHJvbHMuaGFzT3duUHJvcGVydHkodCk/aS5jb250cm9sc1t0XTpudWxsOmkgaW5zdGFuY2VvZiBIaiYmaS5hdCh0KXx8bnVsbH0pKSxpfSkodGhpcyx0LCIuIil9Z2V0RXJyb3IodCxlKXtjb25zdCBuPWU/dGhpcy5nZXQoZSk6dGhpcztyZXR1cm4gbiYmbi5lcnJvcnM/bi5lcnJvcnNbdF06bnVsbH1oYXNFcnJvcih0LGUpe3JldHVybiEhdGhpcy5nZXRFcnJvcih0LGUpfWdldCByb290KCl7bGV0IHQ9dGhpcztmb3IoO3QuX3BhcmVudDspdD10Ll9wYXJlbnQ7cmV0dXJuIHR9X3VwZGF0ZUNvbnRyb2xzRXJyb3JzKHQpe3RoaXMuc3RhdHVzPXRoaXMuX2NhbGN1bGF0ZVN0YXR1cygpLHQmJnRoaXMuc3RhdHVzQ2hhbmdlcy5lbWl0KHRoaXMuc3RhdHVzKSx0aGlzLl9wYXJlbnQmJnRoaXMuX3BhcmVudC5fdXBkYXRlQ29udHJvbHNFcnJvcnModCl9X2luaXRPYnNlcnZhYmxlcygpe3RoaXMudmFsdWVDaGFuZ2VzPW5ldyBBYix0aGlzLnN0YXR1c0NoYW5nZXM9bmV3IEFifV9jYWxjdWxhdGVTdGF0dXMoKXtyZXR1cm4gdGhpcy5fYWxsQ29udHJvbHNEaXNhYmxlZCgpP1NqOnRoaXMuZXJyb3JzP3dqOnRoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcnx8dGhpcy5fYW55Q29udHJvbHNIYXZlU3RhdHVzKGtqKT9rajp0aGlzLl9hbnlDb250cm9sc0hhdmVTdGF0dXMod2opP3dqOlBqfV9hbnlDb250cm9sc0hhdmVTdGF0dXModCl7cmV0dXJuIHRoaXMuX2FueUNvbnRyb2xzKChlPT5lLnN0YXR1cz09PXQpKX1fYW55Q29udHJvbHNEaXJ0eSgpe3JldHVybiB0aGlzLl9hbnlDb250cm9scygodD0+dC5kaXJ0eSkpfV9hbnlDb250cm9sc1RvdWNoZWQoKXtyZXR1cm4gdGhpcy5fYW55Q29udHJvbHMoKHQ9PnQudG91Y2hlZCkpfV91cGRhdGVQcmlzdGluZSh0PXt9KXt0aGlzLnByaXN0aW5lPSF0aGlzLl9hbnlDb250cm9sc0RpcnR5KCksdGhpcy5fcGFyZW50JiYhdC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Ll91cGRhdGVQcmlzdGluZSh0KX1fdXBkYXRlVG91Y2hlZCh0PXt9KXt0aGlzLnRvdWNoZWQ9dGhpcy5fYW55Q29udHJvbHNUb3VjaGVkKCksdGhpcy5fcGFyZW50JiYhdC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Ll91cGRhdGVUb3VjaGVkKHQpfV9pc0JveGVkVmFsdWUodCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT09dCYmMj09PU9iamVjdC5rZXlzKHQpLmxlbmd0aCYmInZhbHVlImluIHQmJiJkaXNhYmxlZCJpbiB0fV9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSh0KXt0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2U9dH1fc2V0VXBkYXRlU3RyYXRlZ3kodCl7VGoodCkmJm51bGwhPXQudXBkYXRlT24mJih0aGlzLl91cGRhdGVPbj10LnVwZGF0ZU9uKX1fcGFyZW50TWFya2VkRGlydHkodCl7cmV0dXJuIXQmJiEoIXRoaXMuX3BhcmVudHx8IXRoaXMuX3BhcmVudC5kaXJ0eSkmJiF0aGlzLl9wYXJlbnQuX2FueUNvbnRyb2xzRGlydHkoKX19Y2xhc3MgSWogZXh0ZW5kcyBOantjb25zdHJ1Y3Rvcih0PW51bGwsZSxuKXtzdXBlcihEaihlKSxBaihuLGUpKSx0aGlzLl9vbkNoYW5nZT1bXSx0aGlzLl9hcHBseUZvcm1TdGF0ZSh0KSx0aGlzLl9zZXRVcGRhdGVTdHJhdGVneShlKSx0aGlzLl9pbml0T2JzZXJ2YWJsZXMoKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe29ubHlTZWxmOiEwLGVtaXRFdmVudDohIW59KX1zZXRWYWx1ZSh0LGU9e30pe3RoaXMudmFsdWU9dGhpcy5fcGVuZGluZ1ZhbHVlPXQsdGhpcy5fb25DaGFuZ2UubGVuZ3RoJiYhMSE9PWUuZW1pdE1vZGVsVG9WaWV3Q2hhbmdlJiZ0aGlzLl9vbkNoYW5nZS5mb3JFYWNoKCh0PT50KHRoaXMudmFsdWUsITEhPT1lLmVtaXRWaWV3VG9Nb2RlbENoYW5nZSkpKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoZSl9cGF0Y2hWYWx1ZSh0LGU9e30pe3RoaXMuc2V0VmFsdWUodCxlKX1yZXNldCh0PW51bGwsZT17fSl7dGhpcy5fYXBwbHlGb3JtU3RhdGUodCksdGhpcy5tYXJrQXNQcmlzdGluZShlKSx0aGlzLm1hcmtBc1VudG91Y2hlZChlKSx0aGlzLnNldFZhbHVlKHRoaXMudmFsdWUsZSksdGhpcy5fcGVuZGluZ0NoYW5nZT0hMX1fdXBkYXRlVmFsdWUoKXt9X2FueUNvbnRyb2xzKHQpe3JldHVybiExfV9hbGxDb250cm9sc0Rpc2FibGVkKCl7cmV0dXJuIHRoaXMuZGlzYWJsZWR9cmVnaXN0ZXJPbkNoYW5nZSh0KXt0aGlzLl9vbkNoYW5nZS5wdXNoKHQpfV91bnJlZ2lzdGVyT25DaGFuZ2UodCl7eGoodGhpcy5fb25DaGFuZ2UsdCl9cmVnaXN0ZXJPbkRpc2FibGVkQ2hhbmdlKHQpe3RoaXMuX29uRGlzYWJsZWRDaGFuZ2UucHVzaCh0KX1fdW5yZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2UodCl7eGoodGhpcy5fb25EaXNhYmxlZENoYW5nZSx0KX1fZm9yRWFjaENoaWxkKHQpe31fc3luY1BlbmRpbmdDb250cm9scygpe3JldHVybiEoInN1Ym1pdCIhPT10aGlzLnVwZGF0ZU9ufHwodGhpcy5fcGVuZGluZ0RpcnR5JiZ0aGlzLm1hcmtBc0RpcnR5KCksdGhpcy5fcGVuZGluZ1RvdWNoZWQmJnRoaXMubWFya0FzVG91Y2hlZCgpLCF0aGlzLl9wZW5kaW5nQ2hhbmdlKXx8KHRoaXMuc2V0VmFsdWUodGhpcy5fcGVuZGluZ1ZhbHVlLHtvbmx5U2VsZjohMCxlbWl0TW9kZWxUb1ZpZXdDaGFuZ2U6ITF9KSwwKSl9X2FwcGx5Rm9ybVN0YXRlKHQpe3RoaXMuX2lzQm94ZWRWYWx1ZSh0KT8odGhpcy52YWx1ZT10aGlzLl9wZW5kaW5nVmFsdWU9dC52YWx1ZSx0LmRpc2FibGVkP3RoaXMuZGlzYWJsZSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OiExfSk6dGhpcy5lbmFibGUoe29ubHlTZWxmOiEwLGVtaXRFdmVudDohMX0pKTp0aGlzLnZhbHVlPXRoaXMuX3BlbmRpbmdWYWx1ZT10fX1jbGFzcyB6aiBleHRlbmRzIE5qe2NvbnN0cnVjdG9yKHQsZSxuKXtzdXBlcihEaihlKSxBaihuLGUpKSx0aGlzLmNvbnRyb2xzPXQsdGhpcy5faW5pdE9ic2VydmFibGVzKCksdGhpcy5fc2V0VXBkYXRlU3RyYXRlZ3koZSksdGhpcy5fc2V0VXBDb250cm9scygpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OiEhbn0pfXJlZ2lzdGVyQ29udHJvbCh0LGUpe3JldHVybiB0aGlzLmNvbnRyb2xzW3RdP3RoaXMuY29udHJvbHNbdF06KHRoaXMuY29udHJvbHNbdF09ZSxlLnNldFBhcmVudCh0aGlzKSxlLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSh0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UpLGUpfWFkZENvbnRyb2wodCxlKXt0aGlzLnJlZ2lzdGVyQ29udHJvbCh0LGUpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpLHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSgpfXJlbW92ZUNvbnRyb2wodCl7dGhpcy5jb250cm9sc1t0XSYmdGhpcy5jb250cm9sc1t0XS5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UoKCgpPT57fSkpLGRlbGV0ZSB0aGlzLmNvbnRyb2xzW3RdLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpLHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSgpfXNldENvbnRyb2wodCxlKXt0aGlzLmNvbnRyb2xzW3RdJiZ0aGlzLmNvbnRyb2xzW3RdLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSgoKCk9Pnt9KSksZGVsZXRlIHRoaXMuY29udHJvbHNbdF0sZSYmdGhpcy5yZWdpc3RlckNvbnRyb2wodCxlKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UoKX1jb250YWlucyh0KXtyZXR1cm4gdGhpcy5jb250cm9scy5oYXNPd25Qcm9wZXJ0eSh0KSYmdGhpcy5jb250cm9sc1t0XS5lbmFibGVkfXNldFZhbHVlKHQsZT17fSl7dGhpcy5fY2hlY2tBbGxWYWx1ZXNQcmVzZW50KHQpLE9iamVjdC5rZXlzKHQpLmZvckVhY2goKG49Pnt0aGlzLl90aHJvd0lmQ29udHJvbE1pc3NpbmcobiksdGhpcy5jb250cm9sc1tuXS5zZXRWYWx1ZSh0W25dLHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ZS5lbWl0RXZlbnR9KX0pKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoZSl9cGF0Y2hWYWx1ZSh0LGU9e30pe251bGwhPXQmJihPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChuPT57dGhpcy5jb250cm9sc1tuXSYmdGhpcy5jb250cm9sc1tuXS5wYXRjaFZhbHVlKHRbbl0se29ubHlTZWxmOiEwLGVtaXRFdmVudDplLmVtaXRFdmVudH0pfSkpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShlKSl9cmVzZXQodD17fSxlPXt9KXt0aGlzLl9mb3JFYWNoQ2hpbGQoKChuLG8pPT57bi5yZXNldCh0W29dLHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ZS5lbWl0RXZlbnR9KX0pKSx0aGlzLl91cGRhdGVQcmlzdGluZShlKSx0aGlzLl91cGRhdGVUb3VjaGVkKGUpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShlKX1nZXRSYXdWYWx1ZSgpe3JldHVybiB0aGlzLl9yZWR1Y2VDaGlsZHJlbih7fSwoKHQsZSxuKT0+KHRbbl09ZSBpbnN0YW5jZW9mIElqP2UudmFsdWU6ZS5nZXRSYXdWYWx1ZSgpLHQpKSl9X3N5bmNQZW5kaW5nQ29udHJvbHMoKXtsZXQgdD10aGlzLl9yZWR1Y2VDaGlsZHJlbighMSwoKHQsZSk9PiEhZS5fc3luY1BlbmRpbmdDb250cm9scygpfHx0KSk7cmV0dXJuIHQmJnRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITB9KSx0fV90aHJvd0lmQ29udHJvbE1pc3NpbmcodCl7aWYoIU9iamVjdC5rZXlzKHRoaXMuY29udHJvbHMpLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlxuICAgICAgICBUaGVyZSBhcmUgbm8gZm9ybSBjb250cm9scyByZWdpc3RlcmVkIHdpdGggdGhpcyBncm91cCB5ZXQuIElmIHlvdSdyZSB1c2luZyBuZ01vZGVsLFxuICAgICAgICB5b3UgbWF5IHdhbnQgdG8gY2hlY2sgbmV4dCB0aWNrIChlLmcuIHVzZSBzZXRUaW1lb3V0KS5cbiAgICAgICIpO2lmKCF0aGlzLmNvbnRyb2xzW3RdKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgZm9ybSBjb250cm9sIHdpdGggbmFtZTogJHt0fS5gKX1fZm9yRWFjaENoaWxkKHQpe09iamVjdC5rZXlzKHRoaXMuY29udHJvbHMpLmZvckVhY2goKGU9Pntjb25zdCBuPXRoaXMuY29udHJvbHNbZV07biYmdChuLGUpfSkpfV9zZXRVcENvbnRyb2xzKCl7dGhpcy5fZm9yRWFjaENoaWxkKCh0PT57dC5zZXRQYXJlbnQodGhpcyksdC5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UodGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKX0pKX1fdXBkYXRlVmFsdWUoKXt0aGlzLnZhbHVlPXRoaXMuX3JlZHVjZVZhbHVlKCl9X2FueUNvbnRyb2xzKHQpe2Zvcihjb25zdCBlIG9mIE9iamVjdC5rZXlzKHRoaXMuY29udHJvbHMpKXtjb25zdCBuPXRoaXMuY29udHJvbHNbZV07aWYodGhpcy5jb250YWlucyhlKSYmdChuKSlyZXR1cm4hMH1yZXR1cm4hMX1fcmVkdWNlVmFsdWUoKXtyZXR1cm4gdGhpcy5fcmVkdWNlQ2hpbGRyZW4oe30sKCh0LGUsbik9PigoZS5lbmFibGVkfHx0aGlzLmRpc2FibGVkKSYmKHRbbl09ZS52YWx1ZSksdCkpKX1fcmVkdWNlQ2hpbGRyZW4odCxlKXtsZXQgbj10O3JldHVybiB0aGlzLl9mb3JFYWNoQ2hpbGQoKCh0LG8pPT57bj1lKG4sdCxvKX0pKSxufV9hbGxDb250cm9sc0Rpc2FibGVkKCl7Zm9yKGNvbnN0IHQgb2YgT2JqZWN0LmtleXModGhpcy5jb250cm9scykpaWYodGhpcy5jb250cm9sc1t0XS5lbmFibGVkKXJldHVybiExO3JldHVybiBPYmplY3Qua2V5cyh0aGlzLmNvbnRyb2xzKS5sZW5ndGg+MHx8dGhpcy5kaXNhYmxlZH1fY2hlY2tBbGxWYWx1ZXNQcmVzZW50KHQpe3RoaXMuX2ZvckVhY2hDaGlsZCgoKGUsbik9PntpZih2b2lkIDA9PT10W25dKXRocm93IG5ldyBFcnJvcihgTXVzdCBzdXBwbHkgYSB2YWx1ZSBmb3IgZm9ybSBjb250cm9sIHdpdGggbmFtZTogJyR7bn0nLmApfSkpfX1jbGFzcyBIaiBleHRlbmRzIE5qe2NvbnN0cnVjdG9yKHQsZSxuKXtzdXBlcihEaihlKSxBaihuLGUpKSx0aGlzLmNvbnRyb2xzPXQsdGhpcy5faW5pdE9ic2VydmFibGVzKCksdGhpcy5fc2V0VXBkYXRlU3RyYXRlZ3koZSksdGhpcy5fc2V0VXBDb250cm9scygpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OiEhbn0pfWF0KHQpe3JldHVybiB0aGlzLmNvbnRyb2xzW3RdfXB1c2godCl7dGhpcy5jb250cm9scy5wdXNoKHQpLHRoaXMuX3JlZ2lzdGVyQ29udHJvbCh0KSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UoKX1pbnNlcnQodCxlKXt0aGlzLmNvbnRyb2xzLnNwbGljZSh0LDAsZSksdGhpcy5fcmVnaXN0ZXJDb250cm9sKGUpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpfXJlbW92ZUF0KHQpe3RoaXMuY29udHJvbHNbdF0mJnRoaXMuY29udHJvbHNbdF0uX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKCgoKT0+e30pKSx0aGlzLmNvbnRyb2xzLnNwbGljZSh0LDEpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpfXNldENvbnRyb2wodCxlKXt0aGlzLmNvbnRyb2xzW3RdJiZ0aGlzLmNvbnRyb2xzW3RdLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSgoKCk9Pnt9KSksdGhpcy5jb250cm9scy5zcGxpY2UodCwxKSxlJiYodGhpcy5jb250cm9scy5zcGxpY2UodCwwLGUpLHRoaXMuX3JlZ2lzdGVyQ29udHJvbChlKSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCksdGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKCl9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLmNvbnRyb2xzLmxlbmd0aH1zZXRWYWx1ZSh0LGU9e30pe3RoaXMuX2NoZWNrQWxsVmFsdWVzUHJlc2VudCh0KSx0LmZvckVhY2goKCh0LG4pPT57dGhpcy5fdGhyb3dJZkNvbnRyb2xNaXNzaW5nKG4pLHRoaXMuYXQobikuc2V0VmFsdWUodCx7b25seVNlbGY6ITAsZW1pdEV2ZW50OmUuZW1pdEV2ZW50fSl9KSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KGUpfXBhdGNoVmFsdWUodCxlPXt9KXtudWxsIT10JiYodC5mb3JFYWNoKCgodCxuKT0+e3RoaXMuYXQobikmJnRoaXMuYXQobikucGF0Y2hWYWx1ZSh0LHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ZS5lbWl0RXZlbnR9KX0pKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoZSkpfXJlc2V0KHQ9W10sZT17fSl7dGhpcy5fZm9yRWFjaENoaWxkKCgobixvKT0+e24ucmVzZXQodFtvXSx7b25seVNlbGY6ITAsZW1pdEV2ZW50OmUuZW1pdEV2ZW50fSl9KSksdGhpcy5fdXBkYXRlUHJpc3RpbmUoZSksdGhpcy5fdXBkYXRlVG91Y2hlZChlKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoZSl9Z2V0UmF3VmFsdWUoKXtyZXR1cm4gdGhpcy5jb250cm9scy5tYXAoKHQ9PnQgaW5zdGFuY2VvZiBJaj90LnZhbHVlOnQuZ2V0UmF3VmFsdWUoKSkpfWNsZWFyKCl7dGhpcy5jb250cm9scy5sZW5ndGg8MXx8KHRoaXMuX2ZvckVhY2hDaGlsZCgodD0+dC5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UoKCgpPT57fSkpKSksdGhpcy5jb250cm9scy5zcGxpY2UoMCksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCkpfV9zeW5jUGVuZGluZ0NvbnRyb2xzKCl7bGV0IHQ9dGhpcy5jb250cm9scy5yZWR1Y2UoKCh0LGUpPT4hIWUuX3N5bmNQZW5kaW5nQ29udHJvbHMoKXx8dCksITEpO3JldHVybiB0JiZ0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe29ubHlTZWxmOiEwfSksdH1fdGhyb3dJZkNvbnRyb2xNaXNzaW5nKHQpe2lmKCF0aGlzLmNvbnRyb2xzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlxuICAgICAgICBUaGVyZSBhcmUgbm8gZm9ybSBjb250cm9scyByZWdpc3RlcmVkIHdpdGggdGhpcyBhcnJheSB5ZXQuIElmIHlvdSdyZSB1c2luZyBuZ01vZGVsLFxuICAgICAgICB5b3UgbWF5IHdhbnQgdG8gY2hlY2sgbmV4dCB0aWNrIChlLmcuIHVzZSBzZXRUaW1lb3V0KS5cbiAgICAgICIpO2lmKCF0aGlzLmF0KHQpKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgZm9ybSBjb250cm9sIGF0IGluZGV4ICR7dH1gKX1fZm9yRWFjaENoaWxkKHQpe3RoaXMuY29udHJvbHMuZm9yRWFjaCgoKGUsbik9Pnt0KGUsbil9KSl9X3VwZGF0ZVZhbHVlKCl7dGhpcy52YWx1ZT10aGlzLmNvbnRyb2xzLmZpbHRlcigodD0+dC5lbmFibGVkfHx0aGlzLmRpc2FibGVkKSkubWFwKCh0PT50LnZhbHVlKSl9X2FueUNvbnRyb2xzKHQpe3JldHVybiB0aGlzLmNvbnRyb2xzLnNvbWUoKGU9PmUuZW5hYmxlZCYmdChlKSkpfV9zZXRVcENvbnRyb2xzKCl7dGhpcy5fZm9yRWFjaENoaWxkKCh0PT50aGlzLl9yZWdpc3RlckNvbnRyb2wodCkpKX1fY2hlY2tBbGxWYWx1ZXNQcmVzZW50KHQpe3RoaXMuX2ZvckVhY2hDaGlsZCgoKGUsbik9PntpZih2b2lkIDA9PT10W25dKXRocm93IG5ldyBFcnJvcihgTXVzdCBzdXBwbHkgYSB2YWx1ZSBmb3IgZm9ybSBjb250cm9sIGF0IGluZGV4OiAke259LmApfSkpfV9hbGxDb250cm9sc0Rpc2FibGVkKCl7Zm9yKGNvbnN0IHQgb2YgdGhpcy5jb250cm9scylpZih0LmVuYWJsZWQpcmV0dXJuITE7cmV0dXJuIHRoaXMuY29udHJvbHMubGVuZ3RoPjB8fHRoaXMuZGlzYWJsZWR9X3JlZ2lzdGVyQ29udHJvbCh0KXt0LnNldFBhcmVudCh0aGlzKSx0Ll9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSh0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UpfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY29uc3QgRmo9e3Byb3ZpZGU6dGosdXNlRXhpc3Rpbmc6SW4oKCgpPT5CaikpfSxMaj1Qcm9taXNlLnJlc29sdmUobnVsbCk7Y2xhc3MgQmogZXh0ZW5kcyB0antjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKCksdGhpcy5zdWJtaXR0ZWQ9ITEsdGhpcy5fZGlyZWN0aXZlcz1bXSx0aGlzLm5nU3VibWl0PW5ldyBBYix0aGlzLmZvcm09bmV3IHpqKHt9LHFWKHQpLFhWKGUpKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9zZXRVcGRhdGVTdHJhdGVneSgpfWdldCBmb3JtRGlyZWN0aXZlKCl7cmV0dXJuIHRoaXN9Z2V0IGNvbnRyb2woKXtyZXR1cm4gdGhpcy5mb3JtfWdldCBwYXRoKCl7cmV0dXJuW119Z2V0IGNvbnRyb2xzKCl7cmV0dXJuIHRoaXMuZm9ybS5jb250cm9sc31hZGRDb250cm9sKHQpe0xqLnRoZW4oKCgpPT57Y29uc3QgZT10aGlzLl9maW5kQ29udGFpbmVyKHQucGF0aCk7dC5jb250cm9sPWUucmVnaXN0ZXJDb250cm9sKHQubmFtZSx0LmNvbnRyb2wpLG1qKHQuY29udHJvbCx0KSx0LmNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSksdGhpcy5fZGlyZWN0aXZlcy5wdXNoKHQpfSkpfWdldENvbnRyb2wodCl7cmV0dXJuIHRoaXMuZm9ybS5nZXQodC5wYXRoKX1yZW1vdmVDb250cm9sKHQpe0xqLnRoZW4oKCgpPT57Y29uc3QgZT10aGlzLl9maW5kQ29udGFpbmVyKHQucGF0aCk7ZSYmZS5yZW1vdmVDb250cm9sKHQubmFtZSkseGoodGhpcy5fZGlyZWN0aXZlcyx0KX0pKX1hZGRGb3JtR3JvdXAodCl7TGoudGhlbigoKCk9Pntjb25zdCBlPXRoaXMuX2ZpbmRDb250YWluZXIodC5wYXRoKSxuPW5ldyB6aih7fSk7eWoobix0KSxlLnJlZ2lzdGVyQ29udHJvbCh0Lm5hbWUsbiksbi51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KX0pKX1yZW1vdmVGb3JtR3JvdXAodCl7TGoudGhlbigoKCk9Pntjb25zdCBlPXRoaXMuX2ZpbmRDb250YWluZXIodC5wYXRoKTtlJiZlLnJlbW92ZUNvbnRyb2wodC5uYW1lKX0pKX1nZXRGb3JtR3JvdXAodCl7cmV0dXJuIHRoaXMuZm9ybS5nZXQodC5wYXRoKX11cGRhdGVNb2RlbCh0LGUpe0xqLnRoZW4oKCgpPT57dGhpcy5mb3JtLmdldCh0LnBhdGgpLnNldFZhbHVlKGUpfSkpfXNldFZhbHVlKHQpe3RoaXMuY29udHJvbC5zZXRWYWx1ZSh0KX1vblN1Ym1pdCh0KXtyZXR1cm4gdGhpcy5zdWJtaXR0ZWQ9ITAsTWoodGhpcy5mb3JtLHRoaXMuX2RpcmVjdGl2ZXMpLHRoaXMubmdTdWJtaXQuZW1pdCh0KSwhMX1vblJlc2V0KCl7dGhpcy5yZXNldEZvcm0oKX1yZXNldEZvcm0odCl7dGhpcy5mb3JtLnJlc2V0KHQpLHRoaXMuc3VibWl0dGVkPSExfV9zZXRVcGRhdGVTdHJhdGVneSgpe3RoaXMub3B0aW9ucyYmbnVsbCE9dGhpcy5vcHRpb25zLnVwZGF0ZU9uJiYodGhpcy5mb3JtLl91cGRhdGVPbj10aGlzLm9wdGlvbnMudXBkYXRlT24pfV9maW5kQ29udGFpbmVyKHQpe3JldHVybiB0LnBvcCgpLHQubGVuZ3RoP3RoaXMuZm9ybS5nZXQodCk6dGhpcy5mb3JtfX1Cai7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8QmopKE11KEVWLDEwKSxNdShBViwxMCkpfSxCai7JtWRpcj1Kbyh7dHlwZTpCaixzZWxlY3RvcnM6W1siZm9ybSIsMywibmdOb0Zvcm0iLCIiLDMsImZvcm1Hcm91cCIsIiJdLFsibmctZm9ybSJdLFsiIiwibmdGb3JtIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MSZlJiZOdSgic3VibWl0IiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vblN1Ym1pdChlKX0pKSgicmVzZXQiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub25SZXNldCgpfSkpfSxpbnB1dHM6e29wdGlvbnM6WyJuZ0Zvcm1PcHRpb25zIiwib3B0aW9ucyJdfSxvdXRwdXRzOntuZ1N1Ym1pdDoibmdTdWJtaXQifSxleHBvcnRBczpbIm5nRm9ybSJdLGZlYXR1cmVzOltpaChbRmpdKSxnbV19KSxCai5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOkFycmF5LGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTpDc30se3R5cGU6eXMsYXJnczpbRVZdfV19LHt0eXBlOkFycmF5LGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTpDc30se3R5cGU6eXMsYXJnczpbQVZdfV19XSxCai5wcm9wRGVjb3JhdG9ycz17b3B0aW9uczpbe3R5cGU6eV8sYXJnczpbIm5nRm9ybU9wdGlvbnMiXX1dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEJqLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6ImZvcm06bm90KFtuZ05vRm9ybV0pOm5vdChbZm9ybUdyb3VwXSksbmctZm9ybSxbbmdGb3JtXSIscHJvdmlkZXJzOltGal0saG9zdDp7IihzdWJtaXQpIjoib25TdWJtaXQoJGV2ZW50KSIsIihyZXNldCkiOiJvblJlc2V0KCkifSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczoibmdGb3JtIn1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkFycmF5LGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTpDc30se3R5cGU6eXMsYXJnczpbRVZdfV19LHt0eXBlOkFycmF5LGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTpDc30se3R5cGU6eXMsYXJnczpbQVZdfV19XX0pLHtvcHRpb25zOlt7dHlwZTp5XyxhcmdzOlsibmdGb3JtT3B0aW9ucyJdfV19KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIFZqIGV4dGVuZHMgdGp7bmdPbkluaXQoKXt0aGlzLl9jaGVja1BhcmVudFR5cGUoKSx0aGlzLmZvcm1EaXJlY3RpdmUuYWRkRm9ybUdyb3VwKHRoaXMpfW5nT25EZXN0cm95KCl7dGhpcy5mb3JtRGlyZWN0aXZlJiZ0aGlzLmZvcm1EaXJlY3RpdmUucmVtb3ZlRm9ybUdyb3VwKHRoaXMpfWdldCBjb250cm9sKCl7cmV0dXJuIHRoaXMuZm9ybURpcmVjdGl2ZS5nZXRGb3JtR3JvdXAodGhpcyl9Z2V0IHBhdGgoKXtyZXR1cm4gcGoobnVsbD09dGhpcy5uYW1lP3RoaXMubmFtZTp0aGlzLm5hbWUudG9TdHJpbmcoKSx0aGlzLl9wYXJlbnQpfWdldCBmb3JtRGlyZWN0aXZlKCl7cmV0dXJuIHRoaXMuX3BhcmVudD90aGlzLl9wYXJlbnQuZm9ybURpcmVjdGl2ZTpudWxsfV9jaGVja1BhcmVudFR5cGUoKXt9fVZqLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIGpqKGV8fFZqKX0sVmouybVkaXI9Sm8oe3R5cGU6VmosZmVhdHVyZXM6W2dtXX0pO2NvbnN0IGpqPXZyKFZqKTsoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFZqLFt7dHlwZTpnX31dLG51bGwsbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyBVantzdGF0aWMgbW9kZWxQYXJlbnRFeGNlcHRpb24oKXt0aHJvdyBuZXcgRXJyb3IoYFxuICAgICAgbmdNb2RlbCBjYW5ub3QgYmUgdXNlZCB0byByZWdpc3RlciBmb3JtIGNvbnRyb2xzIHdpdGggYSBwYXJlbnQgZm9ybUdyb3VwIGRpcmVjdGl2ZS4gIFRyeSB1c2luZ1xuICAgICAgZm9ybUdyb3VwJ3MgcGFydG5lciBkaXJlY3RpdmUgImZvcm1Db250cm9sTmFtZSIgaW5zdGVhZC4gIEV4YW1wbGU6XG5cbiAgICAgICR7c2p9XG5cbiAgICAgIE9yLCBpZiB5b3UnZCBsaWtlIHRvIGF2b2lkIHJlZ2lzdGVyaW5nIHRoaXMgZm9ybSBjb250cm9sLCBpbmRpY2F0ZSB0aGF0IGl0J3Mgc3RhbmRhbG9uZSBpbiBuZ01vZGVsT3B0aW9uczpcblxuICAgICAgRXhhbXBsZTpcblxuICAgICAgXG4gICAgPGRpdiBbZm9ybUdyb3VwXT0ibXlHcm91cCI+XG4gICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT0iZmlyc3ROYW1lIj5cbiAgICAgICA8aW5wdXQgWyhuZ01vZGVsKV09InNob3dNb3JlQ29udHJvbHMiIFtuZ01vZGVsT3B0aW9uc109IntzdGFuZGFsb25lOiB0cnVlfSI+XG4gICAgPC9kaXY+XG4gIGApfXN0YXRpYyBmb3JtR3JvdXBOYW1lRXhjZXB0aW9uKCl7dGhyb3cgbmV3IEVycm9yKGBcbiAgICAgIG5nTW9kZWwgY2Fubm90IGJlIHVzZWQgdG8gcmVnaXN0ZXIgZm9ybSBjb250cm9scyB3aXRoIGEgcGFyZW50IGZvcm1Hcm91cE5hbWUgb3IgZm9ybUFycmF5TmFtZSBkaXJlY3RpdmUuXG5cbiAgICAgIE9wdGlvbiAxOiBVc2UgZm9ybUNvbnRyb2xOYW1lIGluc3RlYWQgb2YgbmdNb2RlbCAocmVhY3RpdmUgc3RyYXRlZ3kpOlxuXG4gICAgICAke2xqfVxuXG4gICAgICBPcHRpb24gMjogIFVwZGF0ZSBuZ01vZGVsJ3MgcGFyZW50IGJlIG5nTW9kZWxHcm91cCAodGVtcGxhdGUtZHJpdmVuIHN0cmF0ZWd5KTpcblxuICAgICAgJHtjan1gKX1zdGF0aWMgbWlzc2luZ05hbWVFeGNlcHRpb24oKXt0aHJvdyBuZXcgRXJyb3IoJ0lmIG5nTW9kZWwgaXMgdXNlZCB3aXRoaW4gYSBmb3JtIHRhZywgZWl0aGVyIHRoZSBuYW1lIGF0dHJpYnV0ZSBtdXN0IGJlIHNldCBvciB0aGUgZm9ybVxuICAgICAgY29udHJvbCBtdXN0IGJlIGRlZmluZWQgYXMgXCdzdGFuZGFsb25lXCcgaW4gbmdNb2RlbE9wdGlvbnMuXG5cbiAgICAgIEV4YW1wbGUgMTogPGlucHV0IFsobmdNb2RlbCldPSJwZXJzb24uZmlyc3ROYW1lIiBuYW1lPSJmaXJzdCI+XG4gICAgICBFeGFtcGxlIDI6IDxpbnB1dCBbKG5nTW9kZWwpXT0icGVyc29uLmZpcnN0TmFtZSIgW25nTW9kZWxPcHRpb25zXT0ie3N0YW5kYWxvbmU6IHRydWV9Ij4nKX1zdGF0aWMgbW9kZWxHcm91cFBhcmVudEV4Y2VwdGlvbigpe3Rocm93IG5ldyBFcnJvcihgXG4gICAgICBuZ01vZGVsR3JvdXAgY2Fubm90IGJlIHVzZWQgd2l0aCBhIHBhcmVudCBmb3JtR3JvdXAgZGlyZWN0aXZlLlxuXG4gICAgICBPcHRpb24gMTogVXNlIGZvcm1Hcm91cE5hbWUgaW5zdGVhZCBvZiBuZ01vZGVsR3JvdXAgKHJlYWN0aXZlIHN0cmF0ZWd5KTpcblxuICAgICAgJHtsan1cblxuICAgICAgT3B0aW9uIDI6ICBVc2UgYSByZWd1bGFyIGZvcm0gdGFnIGluc3RlYWQgb2YgdGhlIGZvcm1Hcm91cCBkaXJlY3RpdmUgKHRlbXBsYXRlLWRyaXZlbiBzdHJhdGVneSk6XG5cbiAgICAgICR7Y2p9YCl9fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jb25zdCBXaj17cHJvdmlkZTp0aix1c2VFeGlzdGluZzpJbigoKCk9PkdqKSl9O2NsYXNzIEdqIGV4dGVuZHMgVmp7Y29uc3RydWN0b3IodCxlLG4pe3N1cGVyKCksdGhpcy5fcGFyZW50PXQsdGhpcy5fc2V0VmFsaWRhdG9ycyhlKSx0aGlzLl9zZXRBc3luY1ZhbGlkYXRvcnMobil9X2NoZWNrUGFyZW50VHlwZSgpe3RoaXMuX3BhcmVudCBpbnN0YW5jZW9mIEdqfHx0aGlzLl9wYXJlbnQgaW5zdGFuY2VvZiBCanx8InVuZGVmaW5lZCIhPXR5cGVvZiBuZ0Rldk1vZGUmJiFuZ0Rldk1vZGV8fFVqLm1vZGVsR3JvdXBQYXJlbnRFeGNlcHRpb24oKX19R2ouybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEdqKShNdSh0aiw1KSxNdShFViwxMCksTXUoQVYsMTApKX0sR2ouybVkaXI9Sm8oe3R5cGU6R2osc2VsZWN0b3JzOltbIiIsIm5nTW9kZWxHcm91cCIsIiJdXSxpbnB1dHM6e25hbWU6WyJuZ01vZGVsR3JvdXAiLCJuYW1lIl19LGV4cG9ydEFzOlsibmdNb2RlbEdyb3VwIl0sZmVhdHVyZXM6W2loKFtXal0pLGdtXX0pLEdqLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6dGosZGVjb3JhdG9yczpbe3R5cGU6dnN9LHt0eXBlOk1zfV19LHt0eXBlOkFycmF5LGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTpDc30se3R5cGU6eXMsYXJnczpbRVZdfV19LHt0eXBlOkFycmF5LGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTpDc30se3R5cGU6eXMsYXJnczpbQVZdfV19XSxHai5wcm9wRGVjb3JhdG9ycz17bmFtZTpbe3R5cGU6eV8sYXJnczpbIm5nTW9kZWxHcm91cCJdfV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoR2osW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoiW25nTW9kZWxHcm91cF0iLHByb3ZpZGVyczpbV2pdLGV4cG9ydEFzOiJuZ01vZGVsR3JvdXAifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6dGosZGVjb3JhdG9yczpbe3R5cGU6dnN9LHt0eXBlOk1zfV19LHt0eXBlOkFycmF5LGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTpDc30se3R5cGU6eXMsYXJnczpbRVZdfV19LHt0eXBlOkFycmF5LGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTpDc30se3R5cGU6eXMsYXJnczpbQVZdfV19XX0pLHtuYW1lOlt7dHlwZTp5XyxhcmdzOlsibmdNb2RlbEdyb3VwIl19XX0pOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3QgWWo9e3Byb3ZpZGU6bmosdXNlRXhpc3Rpbmc6SW4oKCgpPT5aaikpfSxxaj1Qcm9taXNlLnJlc29sdmUobnVsbCk7Y2xhc3MgWmogZXh0ZW5kcyBuantjb25zdHJ1Y3Rvcih0LGUsbixvKXtzdXBlcigpLHRoaXMuY29udHJvbD1uZXcgSWosdGhpcy5fcmVnaXN0ZXJlZD0hMSx0aGlzLnVwZGF0ZT1uZXcgQWIsdGhpcy5fcGFyZW50PXQsdGhpcy5fc2V0VmFsaWRhdG9ycyhlKSx0aGlzLl9zZXRBc3luY1ZhbGlkYXRvcnMobiksdGhpcy52YWx1ZUFjY2Vzc29yPXZqKHRoaXMsbyl9bmdPbkNoYW5nZXModCl7dGhpcy5fY2hlY2tGb3JFcnJvcnMoKSx0aGlzLl9yZWdpc3RlcmVkfHx0aGlzLl9zZXRVcENvbnRyb2woKSwiaXNEaXNhYmxlZCJpbiB0JiZ0aGlzLl91cGRhdGVEaXNhYmxlZCh0KSxDaih0LHRoaXMudmlld01vZGVsKSYmKHRoaXMuX3VwZGF0ZVZhbHVlKHRoaXMubW9kZWwpLHRoaXMudmlld01vZGVsPXRoaXMubW9kZWwpfW5nT25EZXN0cm95KCl7dGhpcy5mb3JtRGlyZWN0aXZlJiZ0aGlzLmZvcm1EaXJlY3RpdmUucmVtb3ZlQ29udHJvbCh0aGlzKX1nZXQgcGF0aCgpe3JldHVybiB0aGlzLl9wYXJlbnQ/cGoodGhpcy5uYW1lLHRoaXMuX3BhcmVudCk6W3RoaXMubmFtZV19Z2V0IGZvcm1EaXJlY3RpdmUoKXtyZXR1cm4gdGhpcy5fcGFyZW50P3RoaXMuX3BhcmVudC5mb3JtRGlyZWN0aXZlOm51bGx9dmlld1RvTW9kZWxVcGRhdGUodCl7dGhpcy52aWV3TW9kZWw9dCx0aGlzLnVwZGF0ZS5lbWl0KHQpfV9zZXRVcENvbnRyb2woKXt0aGlzLl9zZXRVcGRhdGVTdHJhdGVneSgpLHRoaXMuX2lzU3RhbmRhbG9uZSgpP3RoaXMuX3NldFVwU3RhbmRhbG9uZSgpOnRoaXMuZm9ybURpcmVjdGl2ZS5hZGRDb250cm9sKHRoaXMpLHRoaXMuX3JlZ2lzdGVyZWQ9ITB9X3NldFVwZGF0ZVN0cmF0ZWd5KCl7dGhpcy5vcHRpb25zJiZudWxsIT10aGlzLm9wdGlvbnMudXBkYXRlT24mJih0aGlzLmNvbnRyb2wuX3VwZGF0ZU9uPXRoaXMub3B0aW9ucy51cGRhdGVPbil9X2lzU3RhbmRhbG9uZSgpe3JldHVybiF0aGlzLl9wYXJlbnR8fCEoIXRoaXMub3B0aW9uc3x8IXRoaXMub3B0aW9ucy5zdGFuZGFsb25lKX1fc2V0VXBTdGFuZGFsb25lKCl7bWoodGhpcy5jb250cm9sLHRoaXMpLHRoaXMuY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KX1fY2hlY2tGb3JFcnJvcnMoKXt0aGlzLl9pc1N0YW5kYWxvbmUoKXx8dGhpcy5fY2hlY2tQYXJlbnRUeXBlKCksdGhpcy5fY2hlY2tOYW1lKCl9X2NoZWNrUGFyZW50VHlwZSgpeygidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmKCEodGhpcy5fcGFyZW50IGluc3RhbmNlb2YgR2opJiZ0aGlzLl9wYXJlbnQgaW5zdGFuY2VvZiBWaj9Vai5mb3JtR3JvdXBOYW1lRXhjZXB0aW9uKCk6dGhpcy5fcGFyZW50IGluc3RhbmNlb2YgR2p8fHRoaXMuX3BhcmVudCBpbnN0YW5jZW9mIEJqfHxVai5tb2RlbFBhcmVudEV4Y2VwdGlvbigpKX1fY2hlY2tOYW1lKCl7dGhpcy5vcHRpb25zJiZ0aGlzLm9wdGlvbnMubmFtZSYmKHRoaXMubmFtZT10aGlzLm9wdGlvbnMubmFtZSksdGhpcy5faXNTdGFuZGFsb25lKCl8fHRoaXMubmFtZXx8InVuZGVmaW5lZCIhPXR5cGVvZiBuZ0Rldk1vZGUmJiFuZ0Rldk1vZGV8fFVqLm1pc3NpbmdOYW1lRXhjZXB0aW9uKCl9X3VwZGF0ZVZhbHVlKHQpe3FqLnRoZW4oKCgpPT57dGhpcy5jb250cm9sLnNldFZhbHVlKHQse2VtaXRWaWV3VG9Nb2RlbENoYW5nZTohMX0pfSkpfV91cGRhdGVEaXNhYmxlZCh0KXtjb25zdCBlPXQuaXNEaXNhYmxlZC5jdXJyZW50VmFsdWUsbj0iIj09PWV8fGUmJiJmYWxzZSIhPT1lO3FqLnRoZW4oKCgpPT57biYmIXRoaXMuY29udHJvbC5kaXNhYmxlZD90aGlzLmNvbnRyb2wuZGlzYWJsZSgpOiFuJiZ0aGlzLmNvbnRyb2wuZGlzYWJsZWQmJnRoaXMuY29udHJvbC5lbmFibGUoKX0pKX19WmouybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFpqKShNdSh0aiw5KSxNdShFViwxMCksTXUoQVYsMTApLE11KHZWLDEwKSl9LFpqLsm1ZGlyPUpvKHt0eXBlOlpqLHNlbGVjdG9yczpbWyIiLCJuZ01vZGVsIiwiIiwzLCJmb3JtQ29udHJvbE5hbWUiLCIiLDMsImZvcm1Db250cm9sIiwiIl1dLGlucHV0czp7bmFtZToibmFtZSIsaXNEaXNhYmxlZDpbImRpc2FibGVkIiwiaXNEaXNhYmxlZCJdLG1vZGVsOlsibmdNb2RlbCIsIm1vZGVsIl0sb3B0aW9uczpbIm5nTW9kZWxPcHRpb25zIiwib3B0aW9ucyJdfSxvdXRwdXRzOnt1cGRhdGU6Im5nTW9kZWxDaGFuZ2UifSxleHBvcnRBczpbIm5nTW9kZWwiXSxmZWF0dXJlczpbaWgoW1lqXSksZ20sU2ldfSksWmouY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTp0aixkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6dnN9XX0se3R5cGU6QXJyYXksZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOkNzfSx7dHlwZTp5cyxhcmdzOltFVl19XX0se3R5cGU6QXJyYXksZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOkNzfSx7dHlwZTp5cyxhcmdzOltBVl19XX0se3R5cGU6QXJyYXksZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOkNzfSx7dHlwZTp5cyxhcmdzOlt2Vl19XX1dLFpqLnByb3BEZWNvcmF0b3JzPXtuYW1lOlt7dHlwZTp5X31dLGlzRGlzYWJsZWQ6W3t0eXBlOnlfLGFyZ3M6WyJkaXNhYmxlZCJdfV0sbW9kZWw6W3t0eXBlOnlfLGFyZ3M6WyJuZ01vZGVsIl19XSxvcHRpb25zOlt7dHlwZTp5XyxhcmdzOlsibmdNb2RlbE9wdGlvbnMiXX1dLHVwZGF0ZTpbe3R5cGU6X18sYXJnczpbIm5nTW9kZWxDaGFuZ2UiXX1dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFpqLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6IltuZ01vZGVsXTpub3QoW2Zvcm1Db250cm9sTmFtZV0pOm5vdChbZm9ybUNvbnRyb2xdKSIscHJvdmlkZXJzOltZal0sZXhwb3J0QXM6Im5nTW9kZWwifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6dGosZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnZzfV19LHt0eXBlOkFycmF5LGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTpDc30se3R5cGU6eXMsYXJnczpbRVZdfV19LHt0eXBlOkFycmF5LGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTpDc30se3R5cGU6eXMsYXJnczpbQVZdfV19LHt0eXBlOkFycmF5LGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTpDc30se3R5cGU6eXMsYXJnczpbdlZdfV19XX0pLHt1cGRhdGU6W3t0eXBlOl9fLGFyZ3M6WyJuZ01vZGVsQ2hhbmdlIl19XSxuYW1lOlt7dHlwZTp5X31dLGlzRGlzYWJsZWQ6W3t0eXBlOnlfLGFyZ3M6WyJkaXNhYmxlZCJdfV0sbW9kZWw6W3t0eXBlOnlfLGFyZ3M6WyJuZ01vZGVsIl19XSxvcHRpb25zOlt7dHlwZTp5XyxhcmdzOlsibmdNb2RlbE9wdGlvbnMiXX1dfSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyBYant9WGouybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFhqKX0sWGouybVkaXI9Sm8oe3R5cGU6WGosc2VsZWN0b3JzOltbImZvcm0iLDMsIm5nTm9Gb3JtIiwiIiwzLCJuZ05hdGl2ZVZhbGlkYXRlIiwiIl1dLGhvc3RBdHRyczpbIm5vdmFsaWRhdGUiLCIiXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoWGosW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoiZm9ybTpub3QoW25nTm9Gb3JtXSk6bm90KFtuZ05hdGl2ZVZhbGlkYXRlXSkiLGhvc3Q6e25vdmFsaWRhdGU6IiJ9fV19XSxudWxsLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3QgS2o9e3Byb3ZpZGU6dlYsdXNlRXhpc3Rpbmc6SW4oKCgpPT5KaikpLG11bHRpOiEwfTtjbGFzcyBKaiBleHRlbmRzIE1We2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIoKSx0aGlzLl9yZW5kZXJlcj10LHRoaXMuX2VsZW1lbnRSZWY9ZSx0aGlzLm9uQ2hhbmdlPXQ9Pnt9LHRoaXMub25Ub3VjaGVkPSgpPT57fX13cml0ZVZhbHVlKHQpe3RoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwidmFsdWUiLG51bGw9PXQ/IiI6dCl9cmVnaXN0ZXJPbkNoYW5nZSh0KXt0aGlzLm9uQ2hhbmdlPWU9Pnt0KCIiPT1lP251bGw6cGFyc2VGbG9hdChlKSl9fXJlZ2lzdGVyT25Ub3VjaGVkKHQpe3RoaXMub25Ub3VjaGVkPXR9c2V0RGlzYWJsZWRTdGF0ZSh0KXt0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsImRpc2FibGVkIix0KX19SmouybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEpqKShNdSh1aCksTXUoY2gpKX0sSmouybVkaXI9Sm8oe3R5cGU6Smosc2VsZWN0b3JzOltbImlucHV0IiwidHlwZSIsIm51bWJlciIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwibnVtYmVyIiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwidHlwZSIsIm51bWJlciIsIm5nTW9kZWwiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJk51KCJpbnB1dCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25DaGFuZ2UoZS50YXJnZXQudmFsdWUpfSkpKCJibHVyIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uVG91Y2hlZCgpfSkpfSxmZWF0dXJlczpbaWgoW0tqXSksZ21dfSksSmouY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTp1aH0se3R5cGU6Y2h9XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEpqLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIixob3N0OnsiKGlucHV0KSI6Im9uQ2hhbmdlKCRldmVudC50YXJnZXQudmFsdWUpIiwiKGJsdXIpIjoib25Ub3VjaGVkKCkifSxwcm92aWRlcnM6W0tqXX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOnVofSx7dHlwZTpjaH1dfSksbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCBRaj17cHJvdmlkZTp2Vix1c2VFeGlzdGluZzpJbigoKCk9PmVVKSksbXVsdGk6ITB9O2NsYXNzICRqe30kai7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8JGopfSwkai7JtW1vZD1abyh7dHlwZTokan0pLCRqLsm1aW5qPWNvKHt9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKCRqLFt7dHlwZTprX31dLG51bGwsbnVsbCk7Y2xhc3MgdFV7Y29uc3RydWN0b3IoKXt0aGlzLl9hY2Nlc3NvcnM9W119YWRkKHQsZSl7dGhpcy5fYWNjZXNzb3JzLnB1c2goW3QsZV0pfXJlbW92ZSh0KXtmb3IobGV0IGU9dGhpcy5fYWNjZXNzb3JzLmxlbmd0aC0xO2U+PTA7LS1lKWlmKHRoaXMuX2FjY2Vzc29yc1tlXVsxXT09PXQpcmV0dXJuIHZvaWQgdGhpcy5fYWNjZXNzb3JzLnNwbGljZShlLDEpfXNlbGVjdCh0KXt0aGlzLl9hY2Nlc3NvcnMuZm9yRWFjaCgoZT0+e3RoaXMuX2lzU2FtZUdyb3VwKGUsdCkmJmVbMV0hPT10JiZlWzFdLmZpcmVVbmNoZWNrKHQudmFsdWUpfSkpfV9pc1NhbWVHcm91cCh0LGUpe3JldHVybiEhdFswXS5jb250cm9sJiZ0WzBdLl9wYXJlbnQ9PT1lLl9jb250cm9sLl9wYXJlbnQmJnRbMV0ubmFtZT09PWUubmFtZX19dFUuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHRVKX0sdFUuybVwcm92PWxvKHtmYWN0b3J5OmZ1bmN0aW9uIHQoKXtyZXR1cm4gbmV3IHRVfSx0b2tlbjp0VSxwcm92aWRlZEluOiRqfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYih0VSxbe3R5cGU6Sm0sYXJnczpbe3Byb3ZpZGVkSW46JGp9XX1dLChmdW5jdGlvbigpe3JldHVybltdfSksbnVsbCk7Y2xhc3MgZVUgZXh0ZW5kcyBNVntjb25zdHJ1Y3Rvcih0LGUsbixvKXtzdXBlcigpLHRoaXMuX3JlbmRlcmVyPXQsdGhpcy5fZWxlbWVudFJlZj1lLHRoaXMuX3JlZ2lzdHJ5PW4sdGhpcy5faW5qZWN0b3I9byx0aGlzLm9uQ2hhbmdlPSgpPT57fSx0aGlzLm9uVG91Y2hlZD0oKT0+e319bmdPbkluaXQoKXt0aGlzLl9jb250cm9sPXRoaXMuX2luamVjdG9yLmdldChuaiksdGhpcy5fY2hlY2tOYW1lKCksdGhpcy5fcmVnaXN0cnkuYWRkKHRoaXMuX2NvbnRyb2wsdGhpcyl9bmdPbkRlc3Ryb3koKXt0aGlzLl9yZWdpc3RyeS5yZW1vdmUodGhpcyl9d3JpdGVWYWx1ZSh0KXt0aGlzLl9zdGF0ZT10PT09dGhpcy52YWx1ZSx0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsImNoZWNrZWQiLHRoaXMuX3N0YXRlKX1yZWdpc3Rlck9uQ2hhbmdlKHQpe3RoaXMuX2ZuPXQsdGhpcy5vbkNoYW5nZT0oKT0+e3QodGhpcy52YWx1ZSksdGhpcy5fcmVnaXN0cnkuc2VsZWN0KHRoaXMpfX1maXJlVW5jaGVjayh0KXt0aGlzLndyaXRlVmFsdWUodCl9cmVnaXN0ZXJPblRvdWNoZWQodCl7dGhpcy5vblRvdWNoZWQ9dH1zZXREaXNhYmxlZFN0YXRlKHQpe3RoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwiZGlzYWJsZWQiLHQpfV9jaGVja05hbWUoKXt0aGlzLm5hbWUmJnRoaXMuZm9ybUNvbnRyb2xOYW1lJiZ0aGlzLm5hbWUhPT10aGlzLmZvcm1Db250cm9sTmFtZSYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiYoZnVuY3Rpb24gdCgpe3Rocm93IG5ldyBFcnJvcignXG4gICAgICBJZiB5b3UgZGVmaW5lIGJvdGggYSBuYW1lIGFuZCBhIGZvcm1Db250cm9sTmFtZSBhdHRyaWJ1dGUgb24geW91ciByYWRpbyBidXR0b24sIHRoZWlyIHZhbHVlc1xuICAgICAgbXVzdCBtYXRjaC4gRXg6IDxpbnB1dCB0eXBlPSJyYWRpbyIgZm9ybUNvbnRyb2xOYW1lPSJmb29kIiBuYW1lPSJmb29kIj5cbiAgICAnKX0pKCksIXRoaXMubmFtZSYmdGhpcy5mb3JtQ29udHJvbE5hbWUmJih0aGlzLm5hbWU9dGhpcy5mb3JtQ29udHJvbE5hbWUpfX1lVS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8ZVUpKE11KHVoKSxNdShjaCksTXUodFUpLE11KFFwKSl9LGVVLsm1ZGlyPUpvKHt0eXBlOmVVLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJyYWRpbyIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwicmFkaW8iLCJmb3JtQ29udHJvbCIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwicmFkaW8iLCJuZ01vZGVsIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MSZlJiZOdSgiY2hhbmdlIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uQ2hhbmdlKCl9KSkoImJsdXIiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub25Ub3VjaGVkKCl9KSl9LGlucHV0czp7bmFtZToibmFtZSIsZm9ybUNvbnRyb2xOYW1lOiJmb3JtQ29udHJvbE5hbWUiLHZhbHVlOiJ2YWx1ZSJ9LGZlYXR1cmVzOltpaChbUWpdKSxnbV19KSxlVS5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOnVofSx7dHlwZTpjaH0se3R5cGU6dFV9LHt0eXBlOlFwfV0sZVUucHJvcERlY29yYXRvcnM9e25hbWU6W3t0eXBlOnlffV0sZm9ybUNvbnRyb2xOYW1lOlt7dHlwZTp5X31dLHZhbHVlOlt7dHlwZTp5X31dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGVVLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6ImlucHV0W3R5cGU9cmFkaW9dW2Zvcm1Db250cm9sTmFtZV0saW5wdXRbdHlwZT1yYWRpb11bZm9ybUNvbnRyb2xdLGlucHV0W3R5cGU9cmFkaW9dW25nTW9kZWxdIixob3N0OnsiKGNoYW5nZSkiOiJvbkNoYW5nZSgpIiwiKGJsdXIpIjoib25Ub3VjaGVkKCkifSxwcm92aWRlcnM6W1FqXX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOnVofSx7dHlwZTpjaH0se3R5cGU6dFV9LHt0eXBlOlFwfV19KSx7bmFtZTpbe3R5cGU6eV99XSxmb3JtQ29udHJvbE5hbWU6W3t0eXBlOnlffV0sdmFsdWU6W3t0eXBlOnlffV19KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IG5VPXtwcm92aWRlOnZWLHVzZUV4aXN0aW5nOkluKCgoKT0+b1UpKSxtdWx0aTohMH07Y2xhc3Mgb1UgZXh0ZW5kcyBNVntjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKCksdGhpcy5fcmVuZGVyZXI9dCx0aGlzLl9lbGVtZW50UmVmPWUsdGhpcy5vbkNoYW5nZT10PT57fSx0aGlzLm9uVG91Y2hlZD0oKT0+e319d3JpdGVWYWx1ZSh0KXt0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsInZhbHVlIixwYXJzZUZsb2F0KHQpKX1yZWdpc3Rlck9uQ2hhbmdlKHQpe3RoaXMub25DaGFuZ2U9ZT0+e3QoIiI9PWU/bnVsbDpwYXJzZUZsb2F0KGUpKX19cmVnaXN0ZXJPblRvdWNoZWQodCl7dGhpcy5vblRvdWNoZWQ9dH1zZXREaXNhYmxlZFN0YXRlKHQpe3RoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwiZGlzYWJsZWQiLHQpfX1vVS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8b1UpKE11KHVoKSxNdShjaCkpfSxvVS7JtWRpcj1Kbyh7dHlwZTpvVSxzZWxlY3RvcnM6W1siaW5wdXQiLCJ0eXBlIiwicmFuZ2UiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwidHlwZSIsInJhbmdlIiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwidHlwZSIsInJhbmdlIiwibmdNb2RlbCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezEmZSYmTnUoImNoYW5nZSIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25DaGFuZ2UoZS50YXJnZXQudmFsdWUpfSkpKCJpbnB1dCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25DaGFuZ2UoZS50YXJnZXQudmFsdWUpfSkpKCJibHVyIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uVG91Y2hlZCgpfSkpfSxmZWF0dXJlczpbaWgoW25VXSksZ21dfSksb1UuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTp1aH0se3R5cGU6Y2h9XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKG9VLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6ImlucHV0W3R5cGU9cmFuZ2VdW2Zvcm1Db250cm9sTmFtZV0saW5wdXRbdHlwZT1yYW5nZV1bZm9ybUNvbnRyb2xdLGlucHV0W3R5cGU9cmFuZ2VdW25nTW9kZWxdIixob3N0OnsiKGNoYW5nZSkiOiJvbkNoYW5nZSgkZXZlbnQudGFyZ2V0LnZhbHVlKSIsIihpbnB1dCkiOiJvbkNoYW5nZSgkZXZlbnQudGFyZ2V0LnZhbHVlKSIsIihibHVyKSI6Im9uVG91Y2hlZCgpIn0scHJvdmlkZXJzOltuVV19XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTp1aH0se3R5cGU6Y2h9XX0pLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3QgaVU9bmV3IE5yKCJOZ01vZGVsV2l0aEZvcm1Db250cm9sV2FybmluZyIpLGFVPXtwcm92aWRlOm5qLHVzZUV4aXN0aW5nOkluKCgoKT0+clUpKX07Y2xhc3MgclUgZXh0ZW5kcyBuantjb25zdHJ1Y3Rvcih0LGUsbixvKXtzdXBlcigpLHRoaXMuX25nTW9kZWxXYXJuaW5nQ29uZmlnPW8sdGhpcy51cGRhdGU9bmV3IEFiLHRoaXMuX25nTW9kZWxXYXJuaW5nU2VudD0hMSx0aGlzLl9zZXRWYWxpZGF0b3JzKHQpLHRoaXMuX3NldEFzeW5jVmFsaWRhdG9ycyhlKSx0aGlzLnZhbHVlQWNjZXNzb3I9dmoodGhpcyxuKX1zZXQgaXNEaXNhYmxlZCh0KXsoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRqLmRpc2FibGVkQXR0cldhcm5pbmcoKX1uZ09uQ2hhbmdlcyh0KXtpZih0aGlzLl9pc0NvbnRyb2xDaGFuZ2VkKHQpKXtjb25zdCBlPXQuZm9ybS5wcmV2aW91c1ZhbHVlO2UmJnVqKGUsdGhpcywhMSksbWoodGhpcy5mb3JtLHRoaXMpLHRoaXMuY29udHJvbC5kaXNhYmxlZCYmdGhpcy52YWx1ZUFjY2Vzc29yLnNldERpc2FibGVkU3RhdGUmJnRoaXMudmFsdWVBY2Nlc3Nvci5zZXREaXNhYmxlZFN0YXRlKCEwKSx0aGlzLmZvcm0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSl9Q2oodCx0aGlzLnZpZXdNb2RlbCkmJigoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJk9qKCJmb3JtQ29udHJvbCIsclUsdGhpcyx0aGlzLl9uZ01vZGVsV2FybmluZ0NvbmZpZyksdGhpcy5mb3JtLnNldFZhbHVlKHRoaXMubW9kZWwpLHRoaXMudmlld01vZGVsPXRoaXMubW9kZWwpfW5nT25EZXN0cm95KCl7dGhpcy5mb3JtJiZ1aih0aGlzLmZvcm0sdGhpcywhMSl9Z2V0IHBhdGgoKXtyZXR1cm5bXX1nZXQgY29udHJvbCgpe3JldHVybiB0aGlzLmZvcm19dmlld1RvTW9kZWxVcGRhdGUodCl7dGhpcy52aWV3TW9kZWw9dCx0aGlzLnVwZGF0ZS5lbWl0KHQpfV9pc0NvbnRyb2xDaGFuZ2VkKHQpe3JldHVybiB0Lmhhc093blByb3BlcnR5KCJmb3JtIil9fXJVLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxyVSkoTXUoRVYsMTApLE11KEFWLDEwKSxNdSh2ViwxMCksTXUoaVUsOCkpfSxyVS7JtWRpcj1Kbyh7dHlwZTpyVSxzZWxlY3RvcnM6W1siIiwiZm9ybUNvbnRyb2wiLCIiXV0saW5wdXRzOntpc0Rpc2FibGVkOlsiZGlzYWJsZWQiLCJpc0Rpc2FibGVkIl0sZm9ybTpbImZvcm1Db250cm9sIiwiZm9ybSJdLG1vZGVsOlsibmdNb2RlbCIsIm1vZGVsIl19LG91dHB1dHM6e3VwZGF0ZToibmdNb2RlbENoYW5nZSJ9LGV4cG9ydEFzOlsibmdGb3JtIl0sZmVhdHVyZXM6W2loKFthVV0pLGdtLFNpXX0pLHJVLl9uZ01vZGVsV2FybmluZ1NlbnRPbmNlPSExLHJVLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6QXJyYXksZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOkNzfSx7dHlwZTp5cyxhcmdzOltFVl19XX0se3R5cGU6QXJyYXksZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOkNzfSx7dHlwZTp5cyxhcmdzOltBVl19XX0se3R5cGU6QXJyYXksZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOkNzfSx7dHlwZTp5cyxhcmdzOlt2Vl19XX0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltpVV19XX1dLHJVLnByb3BEZWNvcmF0b3JzPXtmb3JtOlt7dHlwZTp5XyxhcmdzOlsiZm9ybUNvbnRyb2wiXX1dLGlzRGlzYWJsZWQ6W3t0eXBlOnlfLGFyZ3M6WyJkaXNhYmxlZCJdfV0sbW9kZWw6W3t0eXBlOnlfLGFyZ3M6WyJuZ01vZGVsIl19XSx1cGRhdGU6W3t0eXBlOl9fLGFyZ3M6WyJuZ01vZGVsQ2hhbmdlIl19XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihyVSxbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJbZm9ybUNvbnRyb2xdIixwcm92aWRlcnM6W2FVXSxleHBvcnRBczoibmdGb3JtIn1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkFycmF5LGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTpDc30se3R5cGU6eXMsYXJnczpbRVZdfV19LHt0eXBlOkFycmF5LGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTpDc30se3R5cGU6eXMsYXJnczpbQVZdfV19LHt0eXBlOkFycmF5LGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTpDc30se3R5cGU6eXMsYXJnczpbdlZdfV19LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbaVVdfV19XX0pLHt1cGRhdGU6W3t0eXBlOl9fLGFyZ3M6WyJuZ01vZGVsQ2hhbmdlIl19XSxpc0Rpc2FibGVkOlt7dHlwZTp5XyxhcmdzOlsiZGlzYWJsZWQiXX1dLGZvcm06W3t0eXBlOnlfLGFyZ3M6WyJmb3JtQ29udHJvbCJdfV0sbW9kZWw6W3t0eXBlOnlfLGFyZ3M6WyJuZ01vZGVsIl19XX0pOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3Qgc1U9e3Byb3ZpZGU6dGosdXNlRXhpc3Rpbmc6SW4oKCgpPT5sVSkpfTtjbGFzcyBsVSBleHRlbmRzIHRqe2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIoKSx0aGlzLnZhbGlkYXRvcnM9dCx0aGlzLmFzeW5jVmFsaWRhdG9ycz1lLHRoaXMuc3VibWl0dGVkPSExLHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZT0oKT0+dGhpcy5fdXBkYXRlRG9tVmFsdWUoKSx0aGlzLmRpcmVjdGl2ZXM9W10sdGhpcy5mb3JtPW51bGwsdGhpcy5uZ1N1Ym1pdD1uZXcgQWIsdGhpcy5fc2V0VmFsaWRhdG9ycyh0KSx0aGlzLl9zZXRBc3luY1ZhbGlkYXRvcnMoZSl9bmdPbkNoYW5nZXModCl7dGhpcy5fY2hlY2tGb3JtUHJlc2VudCgpLHQuaGFzT3duUHJvcGVydHkoImZvcm0iKSYmKHRoaXMuX3VwZGF0ZVZhbGlkYXRvcnMoKSx0aGlzLl91cGRhdGVEb21WYWx1ZSgpLHRoaXMuX3VwZGF0ZVJlZ2lzdHJhdGlvbnMoKSx0aGlzLl9vbGRGb3JtPXRoaXMuZm9ybSl9bmdPbkRlc3Ryb3koKXt0aGlzLmZvcm0mJihoaih0aGlzLmZvcm0sdGhpcywhMSksdGhpcy5mb3JtLl9vbkNvbGxlY3Rpb25DaGFuZ2U9PT10aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UmJnRoaXMuZm9ybS5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UoKCgpPT57fSkpKX1nZXQgZm9ybURpcmVjdGl2ZSgpe3JldHVybiB0aGlzfWdldCBjb250cm9sKCl7cmV0dXJuIHRoaXMuZm9ybX1nZXQgcGF0aCgpe3JldHVybltdfWFkZENvbnRyb2wodCl7Y29uc3QgZT10aGlzLmZvcm0uZ2V0KHQucGF0aCk7cmV0dXJuIG1qKGUsdCksZS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KSx0aGlzLmRpcmVjdGl2ZXMucHVzaCh0KSxlfWdldENvbnRyb2wodCl7cmV0dXJuIHRoaXMuZm9ybS5nZXQodC5wYXRoKX1yZW1vdmVDb250cm9sKHQpe3VqKHQuY29udHJvbHx8bnVsbCx0LCExKSx4aih0aGlzLmRpcmVjdGl2ZXMsdCl9YWRkRm9ybUdyb3VwKHQpe3RoaXMuX3NldFVwRm9ybUNvbnRhaW5lcih0KX1yZW1vdmVGb3JtR3JvdXAodCl7dGhpcy5fY2xlYW5VcEZvcm1Db250YWluZXIodCl9Z2V0Rm9ybUdyb3VwKHQpe3JldHVybiB0aGlzLmZvcm0uZ2V0KHQucGF0aCl9YWRkRm9ybUFycmF5KHQpe3RoaXMuX3NldFVwRm9ybUNvbnRhaW5lcih0KX1yZW1vdmVGb3JtQXJyYXkodCl7dGhpcy5fY2xlYW5VcEZvcm1Db250YWluZXIodCl9Z2V0Rm9ybUFycmF5KHQpe3JldHVybiB0aGlzLmZvcm0uZ2V0KHQucGF0aCl9dXBkYXRlTW9kZWwodCxlKXt0aGlzLmZvcm0uZ2V0KHQucGF0aCkuc2V0VmFsdWUoZSl9b25TdWJtaXQodCl7cmV0dXJuIHRoaXMuc3VibWl0dGVkPSEwLE1qKHRoaXMuZm9ybSx0aGlzLmRpcmVjdGl2ZXMpLHRoaXMubmdTdWJtaXQuZW1pdCh0KSwhMX1vblJlc2V0KCl7dGhpcy5yZXNldEZvcm0oKX1yZXNldEZvcm0odCl7dGhpcy5mb3JtLnJlc2V0KHQpLHRoaXMuc3VibWl0dGVkPSExfV91cGRhdGVEb21WYWx1ZSgpe3RoaXMuZGlyZWN0aXZlcy5mb3JFYWNoKCh0PT57Y29uc3QgZT10LmNvbnRyb2wsbj10aGlzLmZvcm0uZ2V0KHQucGF0aCk7ZSE9PW4mJih1aihlfHxudWxsLHQpLG4gaW5zdGFuY2VvZiBJaiYmKG1qKG4sdCksdC5jb250cm9sPW4pKX0pKSx0aGlzLmZvcm0uX3VwZGF0ZVRyZWVWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSl9X3NldFVwRm9ybUNvbnRhaW5lcih0KXtjb25zdCBlPXRoaXMuZm9ybS5nZXQodC5wYXRoKTt5aihlLHQpLGUudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSl9X2NsZWFuVXBGb3JtQ29udGFpbmVyKHQpe2lmKHRoaXMuZm9ybSl7Y29uc3QgZT10aGlzLmZvcm0uZ2V0KHQucGF0aCk7ZSYmKGZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gaGoodCxuLCExKX0pKGUsdCkmJmUudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSl9fV91cGRhdGVSZWdpc3RyYXRpb25zKCl7dGhpcy5mb3JtLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSh0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UpLHRoaXMuX29sZEZvcm0mJnRoaXMuX29sZEZvcm0uX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKCgoKT0+e30pKX1fdXBkYXRlVmFsaWRhdG9ycygpe2dqKHRoaXMuZm9ybSx0aGlzLCExKSx0aGlzLl9vbGRGb3JtJiZoaih0aGlzLl9vbGRGb3JtLHRoaXMsITEpfV9jaGVja0Zvcm1QcmVzZW50KCl7dGhpcy5mb3JtfHwidW5kZWZpbmVkIiE9dHlwZW9mIG5nRGV2TW9kZSYmIW5nRGV2TW9kZXx8ZGoubWlzc2luZ0Zvcm1FeGNlcHRpb24oKX19bFUuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGxVKShNdShFViwxMCksTXUoQVYsMTApKX0sbFUuybVkaXI9Sm8oe3R5cGU6bFUsc2VsZWN0b3JzOltbIiIsImZvcm1Hcm91cCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezEmZSYmTnUoInN1Ym1pdCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25TdWJtaXQoZSl9KSkoInJlc2V0IiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uUmVzZXQoKX0pKX0saW5wdXRzOntmb3JtOlsiZm9ybUdyb3VwIiwiZm9ybSJdfSxvdXRwdXRzOntuZ1N1Ym1pdDoibmdTdWJtaXQifSxleHBvcnRBczpbIm5nRm9ybSJdLGZlYXR1cmVzOltpaChbc1VdKSxnbSxTaV19KSxsVS5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOkFycmF5LGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTpDc30se3R5cGU6eXMsYXJnczpbRVZdfV19LHt0eXBlOkFycmF5LGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTpDc30se3R5cGU6eXMsYXJnczpbQVZdfV19XSxsVS5wcm9wRGVjb3JhdG9ycz17Zm9ybTpbe3R5cGU6eV8sYXJnczpbImZvcm1Hcm91cCJdfV0sbmdTdWJtaXQ6W3t0eXBlOl9ffV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIobFUsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLHByb3ZpZGVyczpbc1VdLGhvc3Q6eyIoc3VibWl0KSI6Im9uU3VibWl0KCRldmVudCkiLCIocmVzZXQpIjoib25SZXNldCgpIn0sZXhwb3J0QXM6Im5nRm9ybSJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpBcnJheSxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6Q3N9LHt0eXBlOnlzLGFyZ3M6W0VWXX1dfSx7dHlwZTpBcnJheSxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6Q3N9LHt0eXBlOnlzLGFyZ3M6W0FWXX1dfV19KSx7Zm9ybTpbe3R5cGU6eV8sYXJnczpbImZvcm1Hcm91cCJdfV0sbmdTdWJtaXQ6W3t0eXBlOl9ffV19KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IGNVPXtwcm92aWRlOnRqLHVzZUV4aXN0aW5nOkluKCgoKT0+ZFUpKX07Y2xhc3MgZFUgZXh0ZW5kcyBWantjb25zdHJ1Y3Rvcih0LGUsbil7c3VwZXIoKSx0aGlzLl9wYXJlbnQ9dCx0aGlzLl9zZXRWYWxpZGF0b3JzKGUpLHRoaXMuX3NldEFzeW5jVmFsaWRhdG9ycyhuKX1fY2hlY2tQYXJlbnRUeXBlKCl7dVUodGhpcy5fcGFyZW50KSYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkai5ncm91cFBhcmVudEV4Y2VwdGlvbigpfX1kVS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8ZFUpKE11KHRqLDEzKSxNdShFViwxMCksTXUoQVYsMTApKX0sZFUuybVkaXI9Sm8oe3R5cGU6ZFUsc2VsZWN0b3JzOltbIiIsImZvcm1Hcm91cE5hbWUiLCIiXV0saW5wdXRzOntuYW1lOlsiZm9ybUdyb3VwTmFtZSIsIm5hbWUiXX0sZmVhdHVyZXM6W2loKFtjVV0pLGdtXX0pLGRVLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6dGosZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnZzfSx7dHlwZTpNc31dfSx7dHlwZTpBcnJheSxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6Q3N9LHt0eXBlOnlzLGFyZ3M6W0VWXX1dfSx7dHlwZTpBcnJheSxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6Q3N9LHt0eXBlOnlzLGFyZ3M6W0FWXX1dfV0sZFUucHJvcERlY29yYXRvcnM9e25hbWU6W3t0eXBlOnlfLGFyZ3M6WyJmb3JtR3JvdXBOYW1lIl19XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihkVSxbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0iLHByb3ZpZGVyczpbY1VdfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6dGosZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnZzfSx7dHlwZTpNc31dfSx7dHlwZTpBcnJheSxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6Q3N9LHt0eXBlOnlzLGFyZ3M6W0VWXX1dfSx7dHlwZTpBcnJheSxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6Q3N9LHt0eXBlOnlzLGFyZ3M6W0FWXX1dfV19KSx7bmFtZTpbe3R5cGU6eV8sYXJnczpbImZvcm1Hcm91cE5hbWUiXX1dfSk7Y29uc3QgcFU9e3Byb3ZpZGU6dGosdXNlRXhpc3Rpbmc6SW4oKCgpPT5tVSkpfTtjbGFzcyBtVSBleHRlbmRzIHRqe2NvbnN0cnVjdG9yKHQsZSxuKXtzdXBlcigpLHRoaXMuX3BhcmVudD10LHRoaXMuX3NldFZhbGlkYXRvcnMoZSksdGhpcy5fc2V0QXN5bmNWYWxpZGF0b3JzKG4pfW5nT25Jbml0KCl7dGhpcy5fY2hlY2tQYXJlbnRUeXBlKCksdGhpcy5mb3JtRGlyZWN0aXZlLmFkZEZvcm1BcnJheSh0aGlzKX1uZ09uRGVzdHJveSgpe3RoaXMuZm9ybURpcmVjdGl2ZSYmdGhpcy5mb3JtRGlyZWN0aXZlLnJlbW92ZUZvcm1BcnJheSh0aGlzKX1nZXQgY29udHJvbCgpe3JldHVybiB0aGlzLmZvcm1EaXJlY3RpdmUuZ2V0Rm9ybUFycmF5KHRoaXMpfWdldCBmb3JtRGlyZWN0aXZlKCl7cmV0dXJuIHRoaXMuX3BhcmVudD90aGlzLl9wYXJlbnQuZm9ybURpcmVjdGl2ZTpudWxsfWdldCBwYXRoKCl7cmV0dXJuIHBqKG51bGw9PXRoaXMubmFtZT90aGlzLm5hbWU6dGhpcy5uYW1lLnRvU3RyaW5nKCksdGhpcy5fcGFyZW50KX1fY2hlY2tQYXJlbnRUeXBlKCl7dVUodGhpcy5fcGFyZW50KSYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkai5hcnJheVBhcmVudEV4Y2VwdGlvbigpfX1mdW5jdGlvbiB1VSh0KXtyZXR1cm4hKHQgaW5zdGFuY2VvZiBkVXx8dCBpbnN0YW5jZW9mIGxVfHx0IGluc3RhbmNlb2YgbVUpfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9tVS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8bVUpKE11KHRqLDEzKSxNdShFViwxMCksTXUoQVYsMTApKX0sbVUuybVkaXI9Sm8oe3R5cGU6bVUsc2VsZWN0b3JzOltbIiIsImZvcm1BcnJheU5hbWUiLCIiXV0saW5wdXRzOntuYW1lOlsiZm9ybUFycmF5TmFtZSIsIm5hbWUiXX0sZmVhdHVyZXM6W2loKFtwVV0pLGdtXX0pLG1VLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6dGosZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnZzfSx7dHlwZTpNc31dfSx7dHlwZTpBcnJheSxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6Q3N9LHt0eXBlOnlzLGFyZ3M6W0VWXX1dfSx7dHlwZTpBcnJheSxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6Q3N9LHt0eXBlOnlzLGFyZ3M6W0FWXX1dfV0sbVUucHJvcERlY29yYXRvcnM9e25hbWU6W3t0eXBlOnlfLGFyZ3M6WyJmb3JtQXJyYXlOYW1lIl19XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihtVSxbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJbZm9ybUFycmF5TmFtZV0iLHByb3ZpZGVyczpbcFVdfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6dGosZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnZzfSx7dHlwZTpNc31dfSx7dHlwZTpBcnJheSxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6Q3N9LHt0eXBlOnlzLGFyZ3M6W0VWXX1dfSx7dHlwZTpBcnJheSxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6Q3N9LHt0eXBlOnlzLGFyZ3M6W0FWXX1dfV19KSx7bmFtZTpbe3R5cGU6eV8sYXJnczpbImZvcm1BcnJheU5hbWUiXX1dfSk7Y29uc3QgZlU9e3Byb3ZpZGU6bmosdXNlRXhpc3Rpbmc6SW4oKCgpPT5nVSkpfTtjbGFzcyBnVSBleHRlbmRzIG5qe2NvbnN0cnVjdG9yKHQsZSxuLG8saSl7c3VwZXIoKSx0aGlzLl9uZ01vZGVsV2FybmluZ0NvbmZpZz1pLHRoaXMuX2FkZGVkPSExLHRoaXMudXBkYXRlPW5ldyBBYix0aGlzLl9uZ01vZGVsV2FybmluZ1NlbnQ9ITEsdGhpcy5fcGFyZW50PXQsdGhpcy5fc2V0VmFsaWRhdG9ycyhlKSx0aGlzLl9zZXRBc3luY1ZhbGlkYXRvcnMobiksdGhpcy52YWx1ZUFjY2Vzc29yPXZqKHRoaXMsbyl9c2V0IGlzRGlzYWJsZWQodCl7KCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkai5kaXNhYmxlZEF0dHJXYXJuaW5nKCl9bmdPbkNoYW5nZXModCl7dGhpcy5fYWRkZWR8fHRoaXMuX3NldFVwQ29udHJvbCgpLENqKHQsdGhpcy52aWV3TW9kZWwpJiYoKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZPaigiZm9ybUNvbnRyb2xOYW1lIixnVSx0aGlzLHRoaXMuX25nTW9kZWxXYXJuaW5nQ29uZmlnKSx0aGlzLnZpZXdNb2RlbD10aGlzLm1vZGVsLHRoaXMuZm9ybURpcmVjdGl2ZS51cGRhdGVNb2RlbCh0aGlzLHRoaXMubW9kZWwpKX1uZ09uRGVzdHJveSgpe3RoaXMuZm9ybURpcmVjdGl2ZSYmdGhpcy5mb3JtRGlyZWN0aXZlLnJlbW92ZUNvbnRyb2wodGhpcyl9dmlld1RvTW9kZWxVcGRhdGUodCl7dGhpcy52aWV3TW9kZWw9dCx0aGlzLnVwZGF0ZS5lbWl0KHQpfWdldCBwYXRoKCl7cmV0dXJuIHBqKG51bGw9PXRoaXMubmFtZT90aGlzLm5hbWU6dGhpcy5uYW1lLnRvU3RyaW5nKCksdGhpcy5fcGFyZW50KX1nZXQgZm9ybURpcmVjdGl2ZSgpe3JldHVybiB0aGlzLl9wYXJlbnQ/dGhpcy5fcGFyZW50LmZvcm1EaXJlY3RpdmU6bnVsbH1fY2hlY2tQYXJlbnRUeXBlKCl7KCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiYoISh0aGlzLl9wYXJlbnQgaW5zdGFuY2VvZiBkVSkmJnRoaXMuX3BhcmVudCBpbnN0YW5jZW9mIFZqP2RqLm5nTW9kZWxHcm91cEV4Y2VwdGlvbigpOnRoaXMuX3BhcmVudCBpbnN0YW5jZW9mIGRVfHx0aGlzLl9wYXJlbnQgaW5zdGFuY2VvZiBsVXx8dGhpcy5fcGFyZW50IGluc3RhbmNlb2YgbVV8fGRqLmNvbnRyb2xQYXJlbnRFeGNlcHRpb24oKSl9X3NldFVwQ29udHJvbCgpe3RoaXMuX2NoZWNrUGFyZW50VHlwZSgpLHRoaXMuY29udHJvbD10aGlzLmZvcm1EaXJlY3RpdmUuYWRkQ29udHJvbCh0aGlzKSx0aGlzLmNvbnRyb2wuZGlzYWJsZWQmJnRoaXMudmFsdWVBY2Nlc3Nvci5zZXREaXNhYmxlZFN0YXRlJiZ0aGlzLnZhbHVlQWNjZXNzb3Iuc2V0RGlzYWJsZWRTdGF0ZSghMCksdGhpcy5fYWRkZWQ9ITB9fWdVLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxnVSkoTXUodGosMTMpLE11KEVWLDEwKSxNdShBViwxMCksTXUodlYsMTApLE11KGlVLDgpKX0sZ1UuybVkaXI9Sm8oe3R5cGU6Z1Usc2VsZWN0b3JzOltbIiIsImZvcm1Db250cm9sTmFtZSIsIiJdXSxpbnB1dHM6e2lzRGlzYWJsZWQ6WyJkaXNhYmxlZCIsImlzRGlzYWJsZWQiXSxuYW1lOlsiZm9ybUNvbnRyb2xOYW1lIiwibmFtZSJdLG1vZGVsOlsibmdNb2RlbCIsIm1vZGVsIl19LG91dHB1dHM6e3VwZGF0ZToibmdNb2RlbENoYW5nZSJ9LGZlYXR1cmVzOltpaChbZlVdKSxnbSxTaV19KSxnVS5fbmdNb2RlbFdhcm5pbmdTZW50T25jZT0hMSxnVS5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOnRqLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp2c30se3R5cGU6TXN9XX0se3R5cGU6QXJyYXksZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOkNzfSx7dHlwZTp5cyxhcmdzOltFVl19XX0se3R5cGU6QXJyYXksZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOkNzfSx7dHlwZTp5cyxhcmdzOltBVl19XX0se3R5cGU6QXJyYXksZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOkNzfSx7dHlwZTp5cyxhcmdzOlt2Vl19XX0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltpVV19XX1dLGdVLnByb3BEZWNvcmF0b3JzPXtuYW1lOlt7dHlwZTp5XyxhcmdzOlsiZm9ybUNvbnRyb2xOYW1lIl19XSxpc0Rpc2FibGVkOlt7dHlwZTp5XyxhcmdzOlsiZGlzYWJsZWQiXX1dLG1vZGVsOlt7dHlwZTp5XyxhcmdzOlsibmdNb2RlbCJdfV0sdXBkYXRlOlt7dHlwZTpfXyxhcmdzOlsibmdNb2RlbENoYW5nZSJdfV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoZ1UsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLHByb3ZpZGVyczpbZlVdfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6dGosZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnZzfSx7dHlwZTpNc31dfSx7dHlwZTpBcnJheSxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6Q3N9LHt0eXBlOnlzLGFyZ3M6W0VWXX1dfSx7dHlwZTpBcnJheSxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6Q3N9LHt0eXBlOnlzLGFyZ3M6W0FWXX1dfSx7dHlwZTpBcnJheSxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6Q3N9LHt0eXBlOnlzLGFyZ3M6W3ZWXX1dfSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W2lVXX1dfV19KSx7dXBkYXRlOlt7dHlwZTpfXyxhcmdzOlsibmdNb2RlbENoYW5nZSJdfV0saXNEaXNhYmxlZDpbe3R5cGU6eV8sYXJnczpbImRpc2FibGVkIl19XSxuYW1lOlt7dHlwZTp5XyxhcmdzOlsiZm9ybUNvbnRyb2xOYW1lIl19XSxtb2RlbDpbe3R5cGU6eV8sYXJnczpbIm5nTW9kZWwiXX1dfSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCBoVT17cHJvdmlkZTp2Vix1c2VFeGlzdGluZzpJbigoKCk9PnlVKSksbXVsdGk6ITB9O2Z1bmN0aW9uIGJVKHQsZSl7cmV0dXJuIG51bGw9PXQ/YCR7ZX1gOihlJiYib2JqZWN0Ij09dHlwZW9mIGUmJihlPSJPYmplY3QiKSxgJHt0fTogJHtlfWAuc2xpY2UoMCw1MCkpfWNsYXNzIHlVIGV4dGVuZHMgTVZ7Y29uc3RydWN0b3IodCxlKXtzdXBlcigpLHRoaXMuX3JlbmRlcmVyPXQsdGhpcy5fZWxlbWVudFJlZj1lLHRoaXMuX29wdGlvbk1hcD1uZXcgTWFwLHRoaXMuX2lkQ291bnRlcj0wLHRoaXMub25DaGFuZ2U9dD0+e30sdGhpcy5vblRvdWNoZWQ9KCk9Pnt9LHRoaXMuX2NvbXBhcmVXaXRoPU9iamVjdC5pc31zZXQgY29tcGFyZVdpdGgodCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJigidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSl0aHJvdyBuZXcgRXJyb3IoYGNvbXBhcmVXaXRoIG11c3QgYmUgYSBmdW5jdGlvbiwgYnV0IHJlY2VpdmVkICR7SlNPTi5zdHJpbmdpZnkodCl9YCk7dGhpcy5fY29tcGFyZVdpdGg9dH13cml0ZVZhbHVlKHQpe3RoaXMudmFsdWU9dDtjb25zdCBlPXRoaXMuX2dldE9wdGlvbklkKHQpO251bGw9PWUmJnRoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwic2VsZWN0ZWRJbmRleCIsLTEpO2NvbnN0IG49YlUoZSx0KTt0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsInZhbHVlIixuKX1yZWdpc3Rlck9uQ2hhbmdlKHQpe3RoaXMub25DaGFuZ2U9ZT0+e3RoaXMudmFsdWU9dGhpcy5fZ2V0T3B0aW9uVmFsdWUoZSksdCh0aGlzLnZhbHVlKX19cmVnaXN0ZXJPblRvdWNoZWQodCl7dGhpcy5vblRvdWNoZWQ9dH1zZXREaXNhYmxlZFN0YXRlKHQpe3RoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwiZGlzYWJsZWQiLHQpfV9yZWdpc3Rlck9wdGlvbigpe3JldHVybih0aGlzLl9pZENvdW50ZXIrKykudG9TdHJpbmcoKX1fZ2V0T3B0aW9uSWQodCl7Zm9yKGNvbnN0IGUgb2YgQXJyYXkuZnJvbSh0aGlzLl9vcHRpb25NYXAua2V5cygpKSlpZih0aGlzLl9jb21wYXJlV2l0aCh0aGlzLl9vcHRpb25NYXAuZ2V0KGUpLHQpKXJldHVybiBlO3JldHVybiBudWxsfV9nZXRPcHRpb25WYWx1ZSh0KXtjb25zdCBlPShmdW5jdGlvbiBuKHQpe3JldHVybiB0LnNwbGl0KCI6IilbMF19KSh0KTtyZXR1cm4gdGhpcy5fb3B0aW9uTWFwLmhhcyhlKT90aGlzLl9vcHRpb25NYXAuZ2V0KGUpOnR9fXlVLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHx5VSkoTXUodWgpLE11KGNoKSl9LHlVLsm1ZGlyPUpvKHt0eXBlOnlVLHNlbGVjdG9yczpbWyJzZWxlY3QiLCJmb3JtQ29udHJvbE5hbWUiLCIiLDMsIm11bHRpcGxlIiwiIl0sWyJzZWxlY3QiLCJmb3JtQ29udHJvbCIsIiIsMywibXVsdGlwbGUiLCIiXSxbInNlbGVjdCIsIm5nTW9kZWwiLCIiLDMsIm11bHRpcGxlIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MSZlJiZOdSgiY2hhbmdlIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vbkNoYW5nZShlLnRhcmdldC52YWx1ZSl9KSkoImJsdXIiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub25Ub3VjaGVkKCl9KSl9LGlucHV0czp7Y29tcGFyZVdpdGg6ImNvbXBhcmVXaXRoIn0sZmVhdHVyZXM6W2loKFtoVV0pLGdtXX0pLHlVLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6dWh9LHt0eXBlOmNofV0seVUucHJvcERlY29yYXRvcnM9e2NvbXBhcmVXaXRoOlt7dHlwZTp5X31dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHlVLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6InNlbGVjdDpub3QoW211bHRpcGxlXSlbZm9ybUNvbnRyb2xOYW1lXSxzZWxlY3Q6bm90KFttdWx0aXBsZV0pW2Zvcm1Db250cm9sXSxzZWxlY3Q6bm90KFttdWx0aXBsZV0pW25nTW9kZWxdIixob3N0OnsiKGNoYW5nZSkiOiJvbkNoYW5nZSgkZXZlbnQudGFyZ2V0LnZhbHVlKSIsIihibHVyKSI6Im9uVG91Y2hlZCgpIn0scHJvdmlkZXJzOltoVV19XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTp1aH0se3R5cGU6Y2h9XX0pLHtjb21wYXJlV2l0aDpbe3R5cGU6eV99XX0pO2NsYXNzIF9Ve2NvbnN0cnVjdG9yKHQsZSxuKXt0aGlzLl9lbGVtZW50PXQsdGhpcy5fcmVuZGVyZXI9ZSx0aGlzLl9zZWxlY3Q9bix0aGlzLl9zZWxlY3QmJih0aGlzLmlkPXRoaXMuX3NlbGVjdC5fcmVnaXN0ZXJPcHRpb24oKSl9c2V0IG5nVmFsdWUodCl7bnVsbCE9dGhpcy5fc2VsZWN0JiYodGhpcy5fc2VsZWN0Ll9vcHRpb25NYXAuc2V0KHRoaXMuaWQsdCksdGhpcy5fc2V0RWxlbWVudFZhbHVlKGJVKHRoaXMuaWQsdCkpLHRoaXMuX3NlbGVjdC53cml0ZVZhbHVlKHRoaXMuX3NlbGVjdC52YWx1ZSkpfXNldCB2YWx1ZSh0KXt0aGlzLl9zZXRFbGVtZW50VmFsdWUodCksdGhpcy5fc2VsZWN0JiZ0aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpfV9zZXRFbGVtZW50VmFsdWUodCl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LCJ2YWx1ZSIsdCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9zZWxlY3QmJih0aGlzLl9zZWxlY3QuX29wdGlvbk1hcC5kZWxldGUodGhpcy5pZCksdGhpcy5fc2VsZWN0LndyaXRlVmFsdWUodGhpcy5fc2VsZWN0LnZhbHVlKSl9fV9VLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxfVSkoTXUoY2gpLE11KHVoKSxNdSh5VSw5KSl9LF9VLsm1ZGlyPUpvKHt0eXBlOl9VLHNlbGVjdG9yczpbWyJvcHRpb24iXV0saW5wdXRzOntuZ1ZhbHVlOiJuZ1ZhbHVlIix2YWx1ZToidmFsdWUifX0pLF9VLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6Y2h9LHt0eXBlOnVofSx7dHlwZTp5VSxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6dnN9XX1dLF9VLnByb3BEZWNvcmF0b3JzPXtuZ1ZhbHVlOlt7dHlwZTp5XyxhcmdzOlsibmdWYWx1ZSJdfV0sdmFsdWU6W3t0eXBlOnlfLGFyZ3M6WyJ2YWx1ZSJdfV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoX1UsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3Rvcjoib3B0aW9uIn1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmNofSx7dHlwZTp1aH0se3R5cGU6eVUsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnZzfV19XX0pLHtuZ1ZhbHVlOlt7dHlwZTp5XyxhcmdzOlsibmdWYWx1ZSJdfV0sdmFsdWU6W3t0eXBlOnlfLGFyZ3M6WyJ2YWx1ZSJdfV19KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IENVPXtwcm92aWRlOnZWLHVzZUV4aXN0aW5nOkluKCgoKT0+dlUpKSxtdWx0aTohMH07ZnVuY3Rpb24gTVUodCxlKXtyZXR1cm4gbnVsbD09dD9gJHtlfWA6KCJzdHJpbmciPT10eXBlb2YgZSYmKGU9YCcke2V9J2ApLGUmJiJvYmplY3QiPT10eXBlb2YgZSYmKGU9Ik9iamVjdCIpLGAke3R9OiAke2V9YC5zbGljZSgwLDUwKSl9Y2xhc3MgdlUgZXh0ZW5kcyBNVntjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKCksdGhpcy5fcmVuZGVyZXI9dCx0aGlzLl9lbGVtZW50UmVmPWUsdGhpcy5fb3B0aW9uTWFwPW5ldyBNYXAsdGhpcy5faWRDb3VudGVyPTAsdGhpcy5vbkNoYW5nZT10PT57fSx0aGlzLm9uVG91Y2hlZD0oKT0+e30sdGhpcy5fY29tcGFyZVdpdGg9T2JqZWN0LmlzfXNldCBjb21wYXJlV2l0aCh0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpKXRocm93IG5ldyBFcnJvcihgY29tcGFyZVdpdGggbXVzdCBiZSBhIGZ1bmN0aW9uLCBidXQgcmVjZWl2ZWQgJHtKU09OLnN0cmluZ2lmeSh0KX1gKTt0aGlzLl9jb21wYXJlV2l0aD10fXdyaXRlVmFsdWUodCl7bGV0IGU7aWYodGhpcy52YWx1ZT10LEFycmF5LmlzQXJyYXkodCkpe2NvbnN0IG49dC5tYXAoKHQ9PnRoaXMuX2dldE9wdGlvbklkKHQpKSk7ZT0odCxlKT0+e3QuX3NldFNlbGVjdGVkKG4uaW5kZXhPZihlLnRvU3RyaW5nKCkpPi0xKX19ZWxzZSBlPSh0LGUpPT57dC5fc2V0U2VsZWN0ZWQoITEpfTt0aGlzLl9vcHRpb25NYXAuZm9yRWFjaChlKX1yZWdpc3Rlck9uQ2hhbmdlKHQpe3RoaXMub25DaGFuZ2U9ZT0+e2NvbnN0IG49W107aWYodm9pZCAwIT09ZS5zZWxlY3RlZE9wdGlvbnMpe2NvbnN0IHQ9ZS5zZWxlY3RlZE9wdGlvbnM7Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspe2NvbnN0IG89dC5pdGVtKGUpLGk9dGhpcy5fZ2V0T3B0aW9uVmFsdWUoby52YWx1ZSk7bi5wdXNoKGkpfX1lbHNle2NvbnN0IHQ9ZS5vcHRpb25zO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKXtjb25zdCBvPXQuaXRlbShlKTtpZihvLnNlbGVjdGVkKXtjb25zdCB0PXRoaXMuX2dldE9wdGlvblZhbHVlKG8udmFsdWUpO24ucHVzaCh0KX19fXRoaXMudmFsdWU9bix0KG4pfX1yZWdpc3Rlck9uVG91Y2hlZCh0KXt0aGlzLm9uVG91Y2hlZD10fXNldERpc2FibGVkU3RhdGUodCl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCJkaXNhYmxlZCIsdCl9X3JlZ2lzdGVyT3B0aW9uKHQpe2NvbnN0IGU9KHRoaXMuX2lkQ291bnRlcisrKS50b1N0cmluZygpO3JldHVybiB0aGlzLl9vcHRpb25NYXAuc2V0KGUsdCksZX1fZ2V0T3B0aW9uSWQodCl7Zm9yKGNvbnN0IGUgb2YgQXJyYXkuZnJvbSh0aGlzLl9vcHRpb25NYXAua2V5cygpKSlpZih0aGlzLl9jb21wYXJlV2l0aCh0aGlzLl9vcHRpb25NYXAuZ2V0KGUpLl92YWx1ZSx0KSlyZXR1cm4gZTtyZXR1cm4gbnVsbH1fZ2V0T3B0aW9uVmFsdWUodCl7Y29uc3QgZT0oZnVuY3Rpb24gbih0KXtyZXR1cm4gdC5zcGxpdCgiOiIpWzBdfSkodCk7cmV0dXJuIHRoaXMuX29wdGlvbk1hcC5oYXMoZSk/dGhpcy5fb3B0aW9uTWFwLmdldChlKS5fdmFsdWU6dH19dlUuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHZVKShNdSh1aCksTXUoY2gpKX0sdlUuybVkaXI9Sm8oe3R5cGU6dlUsc2VsZWN0b3JzOltbInNlbGVjdCIsIm11bHRpcGxlIiwiIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyJzZWxlY3QiLCJtdWx0aXBsZSIsIiIsImZvcm1Db250cm9sIiwiIl0sWyJzZWxlY3QiLCJtdWx0aXBsZSIsIiIsIm5nTW9kZWwiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJk51KCJjaGFuZ2UiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLm9uQ2hhbmdlKGUudGFyZ2V0KX0pKSgiYmx1ciIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vblRvdWNoZWQoKX0pKX0saW5wdXRzOntjb21wYXJlV2l0aDoiY29tcGFyZVdpdGgifSxmZWF0dXJlczpbaWgoW0NVXSksZ21dfSksdlUuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTp1aH0se3R5cGU6Y2h9XSx2VS5wcm9wRGVjb3JhdG9ycz17Y29tcGFyZVdpdGg6W3t0eXBlOnlffV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIodlUsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3Rvcjoic2VsZWN0W211bHRpcGxlXVtmb3JtQ29udHJvbE5hbWVdLHNlbGVjdFttdWx0aXBsZV1bZm9ybUNvbnRyb2xdLHNlbGVjdFttdWx0aXBsZV1bbmdNb2RlbF0iLGhvc3Q6eyIoY2hhbmdlKSI6Im9uQ2hhbmdlKCRldmVudC50YXJnZXQpIiwiKGJsdXIpIjoib25Ub3VjaGVkKCkifSxwcm92aWRlcnM6W0NVXX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOnVofSx7dHlwZTpjaH1dfSkse2NvbXBhcmVXaXRoOlt7dHlwZTp5X31dfSk7Y2xhc3MgeFV7Y29uc3RydWN0b3IodCxlLG4pe3RoaXMuX2VsZW1lbnQ9dCx0aGlzLl9yZW5kZXJlcj1lLHRoaXMuX3NlbGVjdD1uLHRoaXMuX3NlbGVjdCYmKHRoaXMuaWQ9dGhpcy5fc2VsZWN0Ll9yZWdpc3Rlck9wdGlvbih0aGlzKSl9c2V0IG5nVmFsdWUodCl7bnVsbCE9dGhpcy5fc2VsZWN0JiYodGhpcy5fdmFsdWU9dCx0aGlzLl9zZXRFbGVtZW50VmFsdWUoTVUodGhpcy5pZCx0KSksdGhpcy5fc2VsZWN0LndyaXRlVmFsdWUodGhpcy5fc2VsZWN0LnZhbHVlKSl9c2V0IHZhbHVlKHQpe3RoaXMuX3NlbGVjdD8odGhpcy5fdmFsdWU9dCx0aGlzLl9zZXRFbGVtZW50VmFsdWUoTVUodGhpcy5pZCx0KSksdGhpcy5fc2VsZWN0LndyaXRlVmFsdWUodGhpcy5fc2VsZWN0LnZhbHVlKSk6dGhpcy5fc2V0RWxlbWVudFZhbHVlKHQpfV9zZXRFbGVtZW50VmFsdWUodCl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LCJ2YWx1ZSIsdCl9X3NldFNlbGVjdGVkKHQpe3RoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCwic2VsZWN0ZWQiLHQpfW5nT25EZXN0cm95KCl7dGhpcy5fc2VsZWN0JiYodGhpcy5fc2VsZWN0Ll9vcHRpb25NYXAuZGVsZXRlKHRoaXMuaWQpLHRoaXMuX3NlbGVjdC53cml0ZVZhbHVlKHRoaXMuX3NlbGVjdC52YWx1ZSkpfX14VS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8eFUpKE11KGNoKSxNdSh1aCksTXUodlUsOSkpfSx4VS7JtWRpcj1Kbyh7dHlwZTp4VSxzZWxlY3RvcnM6W1sib3B0aW9uIl1dLGlucHV0czp7bmdWYWx1ZToibmdWYWx1ZSIsdmFsdWU6InZhbHVlIn19KSx4VS5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmNofSx7dHlwZTp1aH0se3R5cGU6dlUsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnZzfV19XSx4VS5wcm9wRGVjb3JhdG9ycz17bmdWYWx1ZTpbe3R5cGU6eV8sYXJnczpbIm5nVmFsdWUiXX1dLHZhbHVlOlt7dHlwZTp5XyxhcmdzOlsidmFsdWUiXX1dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHhVLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6Im9wdGlvbiJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpjaH0se3R5cGU6dWh9LHt0eXBlOnZVLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp2c31dfV19KSx7bmdWYWx1ZTpbe3R5cGU6eV8sYXJnczpbIm5nVmFsdWUiXX1dLHZhbHVlOlt7dHlwZTp5XyxhcmdzOlsidmFsdWUiXX1dfSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCBPVT17cHJvdmlkZTpFVix1c2VFeGlzdGluZzpJbigoKCk9PndVKSksbXVsdGk6ITB9LFBVPXtwcm92aWRlOkVWLHVzZUV4aXN0aW5nOkluKCgoKT0+a1UpKSxtdWx0aTohMH07Y2xhc3Mgd1V7Y29uc3RydWN0b3IoKXt0aGlzLl9yZXF1aXJlZD0hMX1nZXQgcmVxdWlyZWQoKXtyZXR1cm4gdGhpcy5fcmVxdWlyZWR9c2V0IHJlcXVpcmVkKHQpe3RoaXMuX3JlcXVpcmVkPW51bGwhPXQmJiExIT09dCYmImZhbHNlIiE9YCR7dH1gLHRoaXMuX29uQ2hhbmdlJiZ0aGlzLl9vbkNoYW5nZSgpfXZhbGlkYXRlKHQpe3JldHVybiB0aGlzLnJlcXVpcmVkP05WKHQpOm51bGx9cmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZSh0KXt0aGlzLl9vbkNoYW5nZT10fX13VS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8d1UpfSx3VS7JtWRpcj1Kbyh7dHlwZTp3VSxzZWxlY3RvcnM6W1siIiwicmVxdWlyZWQiLCIiLCJmb3JtQ29udHJvbE5hbWUiLCIiLDMsInR5cGUiLCJjaGVja2JveCJdLFsiIiwicmVxdWlyZWQiLCIiLCJmb3JtQ29udHJvbCIsIiIsMywidHlwZSIsImNoZWNrYm94Il0sWyIiLCJyZXF1aXJlZCIsIiIsIm5nTW9kZWwiLCIiLDMsInR5cGUiLCJjaGVja2JveCJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MiZlJiZObSgicmVxdWlyZWQiLG4ucmVxdWlyZWQ/IiI6bnVsbCl9LGlucHV0czp7cmVxdWlyZWQ6InJlcXVpcmVkIn0sZmVhdHVyZXM6W2loKFtPVV0pXX0pLHdVLnByb3BEZWNvcmF0b3JzPXtyZXF1aXJlZDpbe3R5cGU6eV99XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYih3VSxbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiI6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sTmFtZV0sOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtmb3JtQ29udHJvbF0sOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtuZ01vZGVsXSIscHJvdmlkZXJzOltPVV0saG9zdDp7IlthdHRyLnJlcXVpcmVkXSI6J3JlcXVpcmVkID8gIiIgOiBudWxsJ319XX1dLChmdW5jdGlvbigpe3JldHVybltdfSkse3JlcXVpcmVkOlt7dHlwZTp5X31dfSk7Y2xhc3Mga1UgZXh0ZW5kcyB3VXt2YWxpZGF0ZSh0KXtyZXR1cm4gdGhpcy5yZXF1aXJlZD9JVih0KTpudWxsfX1rVS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBTVShlfHxrVSl9LGtVLsm1ZGlyPUpvKHt0eXBlOmtVLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJjaGVja2JveCIsInJlcXVpcmVkIiwiIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJjaGVja2JveCIsInJlcXVpcmVkIiwiIiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwidHlwZSIsImNoZWNrYm94IiwicmVxdWlyZWQiLCIiLCJuZ01vZGVsIiwiIl1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsyJmUmJk5tKCJyZXF1aXJlZCIsbi5yZXF1aXJlZD8iIjpudWxsKX0sZmVhdHVyZXM6W2loKFtQVV0pLGdtXX0pO2NvbnN0IFNVPXZyKGtVKTsoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGtVLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6ImlucHV0W3R5cGU9Y2hlY2tib3hdW3JlcXVpcmVkXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9Y2hlY2tib3hdW3JlcXVpcmVkXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1jaGVja2JveF1bcmVxdWlyZWRdW25nTW9kZWxdIixwcm92aWRlcnM6W1BVXSxob3N0OnsiW2F0dHIucmVxdWlyZWRdIjoncmVxdWlyZWQgPyAiIiA6IG51bGwnfX1dfV0sbnVsbCxudWxsKTtjb25zdCBEVT17cHJvdmlkZTpFVix1c2VFeGlzdGluZzpJbigoKCk9PkVVKSksbXVsdGk6ITB9O2NsYXNzIEVVe2NvbnN0cnVjdG9yKCl7dGhpcy5fZW5hYmxlZD0hMX1zZXQgZW1haWwodCl7dGhpcy5fZW5hYmxlZD0iIj09PXR8fCEwPT09dHx8InRydWUiPT09dCx0aGlzLl9vbkNoYW5nZSYmdGhpcy5fb25DaGFuZ2UoKX12YWxpZGF0ZSh0KXtyZXR1cm4gdGhpcy5fZW5hYmxlZD96Vih0KTpudWxsfXJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UodCl7dGhpcy5fb25DaGFuZ2U9dH19RVUuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEVVKX0sRVUuybVkaXI9Sm8oe3R5cGU6RVUsc2VsZWN0b3JzOltbIiIsImVtYWlsIiwiIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyIiLCJlbWFpbCIsIiIsImZvcm1Db250cm9sIiwiIl0sWyIiLCJlbWFpbCIsIiIsIm5nTW9kZWwiLCIiXV0saW5wdXRzOntlbWFpbDoiZW1haWwifSxmZWF0dXJlczpbaWgoW0RVXSldfSksRVUucHJvcERlY29yYXRvcnM9e2VtYWlsOlt7dHlwZTp5X31dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEVVLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6IltlbWFpbF1bZm9ybUNvbnRyb2xOYW1lXSxbZW1haWxdW2Zvcm1Db250cm9sXSxbZW1haWxdW25nTW9kZWxdIixwcm92aWRlcnM6W0RVXX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW119KSx7ZW1haWw6W3t0eXBlOnlffV19KTtjb25zdCBBVT17cHJvdmlkZTpFVix1c2VFeGlzdGluZzpJbigoKCk9PlJVKSksbXVsdGk6ITB9O2NsYXNzIFJVe2NvbnN0cnVjdG9yKCl7dGhpcy5fdmFsaWRhdG9yPUJWfW5nT25DaGFuZ2VzKHQpeyJtaW5sZW5ndGgiaW4gdCYmKHRoaXMuX2NyZWF0ZVZhbGlkYXRvcigpLHRoaXMuX29uQ2hhbmdlJiZ0aGlzLl9vbkNoYW5nZSgpKX12YWxpZGF0ZSh0KXtyZXR1cm4gbnVsbD09dGhpcy5taW5sZW5ndGg/bnVsbDp0aGlzLl92YWxpZGF0b3IodCl9cmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZSh0KXt0aGlzLl9vbkNoYW5nZT10fV9jcmVhdGVWYWxpZGF0b3IoKXt0aGlzLl92YWxpZGF0b3I9SFYoIm51bWJlciI9PXR5cGVvZiB0aGlzLm1pbmxlbmd0aD90aGlzLm1pbmxlbmd0aDpwYXJzZUludCh0aGlzLm1pbmxlbmd0aCwxMCkpfX1SVS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8UlUpfSxSVS7JtWRpcj1Kbyh7dHlwZTpSVSxzZWxlY3RvcnM6W1siIiwibWlubGVuZ3RoIiwiIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyIiLCJtaW5sZW5ndGgiLCIiLCJmb3JtQ29udHJvbCIsIiJdLFsiIiwibWlubGVuZ3RoIiwiIiwibmdNb2RlbCIsIiJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MiZlJiZObSgibWlubGVuZ3RoIixuLm1pbmxlbmd0aD9uLm1pbmxlbmd0aDpudWxsKX0saW5wdXRzOnttaW5sZW5ndGg6Im1pbmxlbmd0aCJ9LGZlYXR1cmVzOltpaChbQVVdKSxTaV19KSxSVS5wcm9wRGVjb3JhdG9ycz17bWlubGVuZ3RoOlt7dHlwZTp5X31dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFJVLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6IlttaW5sZW5ndGhdW2Zvcm1Db250cm9sTmFtZV0sW21pbmxlbmd0aF1bZm9ybUNvbnRyb2xdLFttaW5sZW5ndGhdW25nTW9kZWxdIixwcm92aWRlcnM6W0FVXSxob3N0OnsiW2F0dHIubWlubGVuZ3RoXSI6Im1pbmxlbmd0aCA/IG1pbmxlbmd0aCA6IG51bGwifX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW119KSx7bWlubGVuZ3RoOlt7dHlwZTp5X31dfSk7Y29uc3QgVFU9e3Byb3ZpZGU6RVYsdXNlRXhpc3Rpbmc6SW4oKCgpPT5OVSkpLG11bHRpOiEwfTtjbGFzcyBOVXtjb25zdHJ1Y3Rvcigpe3RoaXMuX3ZhbGlkYXRvcj1CVn1uZ09uQ2hhbmdlcyh0KXsibWF4bGVuZ3RoImluIHQmJih0aGlzLl9jcmVhdGVWYWxpZGF0b3IoKSx0aGlzLl9vbkNoYW5nZSYmdGhpcy5fb25DaGFuZ2UoKSl9dmFsaWRhdGUodCl7cmV0dXJuIG51bGwhPXRoaXMubWF4bGVuZ3RoP3RoaXMuX3ZhbGlkYXRvcih0KTpudWxsfXJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UodCl7dGhpcy5fb25DaGFuZ2U9dH1fY3JlYXRlVmFsaWRhdG9yKCl7dGhpcy5fdmFsaWRhdG9yPUZWKCJudW1iZXIiPT10eXBlb2YgdGhpcy5tYXhsZW5ndGg/dGhpcy5tYXhsZW5ndGg6cGFyc2VJbnQodGhpcy5tYXhsZW5ndGgsMTApKX19TlUuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fE5VKX0sTlUuybVkaXI9Sm8oe3R5cGU6TlUsc2VsZWN0b3JzOltbIiIsIm1heGxlbmd0aCIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiIiwibWF4bGVuZ3RoIiwiIiwiZm9ybUNvbnRyb2wiLCIiXSxbIiIsIm1heGxlbmd0aCIsIiIsIm5nTW9kZWwiLCIiXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezImZSYmTm0oIm1heGxlbmd0aCIsbi5tYXhsZW5ndGg/bi5tYXhsZW5ndGg6bnVsbCl9LGlucHV0czp7bWF4bGVuZ3RoOiJtYXhsZW5ndGgifSxmZWF0dXJlczpbaWgoW1RVXSksU2ldfSksTlUucHJvcERlY29yYXRvcnM9e21heGxlbmd0aDpbe3R5cGU6eV99XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihOVSxbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJbbWF4bGVuZ3RoXVtmb3JtQ29udHJvbE5hbWVdLFttYXhsZW5ndGhdW2Zvcm1Db250cm9sXSxbbWF4bGVuZ3RoXVtuZ01vZGVsXSIscHJvdmlkZXJzOltUVV0saG9zdDp7IlthdHRyLm1heGxlbmd0aF0iOiJtYXhsZW5ndGggPyBtYXhsZW5ndGggOiBudWxsIn19XX1dLChmdW5jdGlvbigpe3JldHVybltdfSkse21heGxlbmd0aDpbe3R5cGU6eV99XX0pO2NvbnN0IElVPXtwcm92aWRlOkVWLHVzZUV4aXN0aW5nOkluKCgoKT0+elUpKSxtdWx0aTohMH07Y2xhc3MgelV7Y29uc3RydWN0b3IoKXt0aGlzLl92YWxpZGF0b3I9QlZ9bmdPbkNoYW5nZXModCl7InBhdHRlcm4iaW4gdCYmKHRoaXMuX2NyZWF0ZVZhbGlkYXRvcigpLHRoaXMuX29uQ2hhbmdlJiZ0aGlzLl9vbkNoYW5nZSgpKX12YWxpZGF0ZSh0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdG9yKHQpfXJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UodCl7dGhpcy5fb25DaGFuZ2U9dH1fY3JlYXRlVmFsaWRhdG9yKCl7dGhpcy5fdmFsaWRhdG9yPUxWKHRoaXMucGF0dGVybil9fXpVLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHx6VSl9LHpVLsm1ZGlyPUpvKHt0eXBlOnpVLHNlbGVjdG9yczpbWyIiLCJwYXR0ZXJuIiwiIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyIiLCJwYXR0ZXJuIiwiIiwiZm9ybUNvbnRyb2wiLCIiXSxbIiIsInBhdHRlcm4iLCIiLCJuZ01vZGVsIiwiIl1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsyJmUmJk5tKCJwYXR0ZXJuIixuLnBhdHRlcm4/bi5wYXR0ZXJuOm51bGwpfSxpbnB1dHM6e3BhdHRlcm46InBhdHRlcm4ifSxmZWF0dXJlczpbaWgoW0lVXSksU2ldfSkselUucHJvcERlY29yYXRvcnM9e3BhdHRlcm46W3t0eXBlOnlffV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoelUsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoiW3BhdHRlcm5dW2Zvcm1Db250cm9sTmFtZV0sW3BhdHRlcm5dW2Zvcm1Db250cm9sXSxbcGF0dGVybl1bbmdNb2RlbF0iLHByb3ZpZGVyczpbSVVdLGhvc3Q6eyJbYXR0ci5wYXR0ZXJuXSI6InBhdHRlcm4gPyBwYXR0ZXJuIDogbnVsbCJ9fV19XSwoZnVuY3Rpb24oKXtyZXR1cm5bXX0pLHtwYXR0ZXJuOlt7dHlwZTp5X31dfSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCBIVT1bWGosX1UseFUsa1YsSmosb1UsT1YseVUsdlUsZVUsYWoscmosd1UsUlUsTlUselUsa1UsRVVdLEZVPVtaaixHaixCal0sTFU9W3JVLGxVLGdVLGRVLG1VXTtjbGFzcyBCVXt9QlUuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEJVKX0sQlUuybVtb2Q9Wm8oe3R5cGU6QlV9KSxCVS7JtWluaj1jbyh7aW1wb3J0czpbWyRqXV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKEJVLHtkZWNsYXJhdGlvbnM6W1hqLF9VLHhVLGtWLEpqLG9VLE9WLHlVLHZVLGVVLGFqLHJqLHdVLFJVLE5VLHpVLGtVLEVVXSxpbXBvcnRzOlskal0sZXhwb3J0czpbWGosX1UseFUsa1YsSmosb1UsT1YseVUsdlUsZVUsYWoscmosd1UsUlUsTlUselUsa1UsRVVdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihCVSxbe3R5cGU6a18sYXJnczpbe2RlY2xhcmF0aW9uczpIVSxpbXBvcnRzOlskal0sZXhwb3J0czpIVX1dfV0sbnVsbCxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIFZVe31WVS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8VlUpfSxWVS7JtW1vZD1abyh7dHlwZTpWVX0pLFZVLsm1aW5qPWNvKHtpbXBvcnRzOltCVV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKFZVLHtkZWNsYXJhdGlvbnM6W1pqLEdqLEJqXSxleHBvcnRzOltCVSxaaixHaixCal19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFZVLFt7dHlwZTprXyxhcmdzOlt7ZGVjbGFyYXRpb25zOkZVLGV4cG9ydHM6W0JVLEZVXX1dfV0sbnVsbCxudWxsKTtjbGFzcyBqVXtzdGF0aWMgd2l0aENvbmZpZyh0KXtyZXR1cm57bmdNb2R1bGU6alUscHJvdmlkZXJzOlt7cHJvdmlkZTppVSx1c2VWYWx1ZTp0Lndhcm5Pbk5nTW9kZWxXaXRoRm9ybUNvbnRyb2x9XX19fWpVLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxqVSl9LGpVLsm1bW9kPVpvKHt0eXBlOmpVfSksalUuybVpbmo9Y28oe2ltcG9ydHM6W0JVXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oalUse2RlY2xhcmF0aW9uczpbclUsbFUsZ1UsZFUsbVVdLGV4cG9ydHM6W0JVLHJVLGxVLGdVLGRVLG1VXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoalUsW3t0eXBlOmtfLGFyZ3M6W3tkZWNsYXJhdGlvbnM6W0xVXSxleHBvcnRzOltCVSxMVV19XX1dLG51bGwsbnVsbCk7Y2xhc3MgVVV7Z3JvdXAodCxlPW51bGwpe2NvbnN0IG49dGhpcy5fcmVkdWNlQ29udHJvbHModCk7bGV0IG8saT1udWxsLGE9bnVsbDtyZXR1cm4gbnVsbCE9ZSYmKCgKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmZ1bmN0aW9uIHIodCl7cmV0dXJuIHZvaWQgMCE9PXQuYXN5bmNWYWxpZGF0b3JzfHx2b2lkIDAhPT10LnZhbGlkYXRvcnN8fHZvaWQgMCE9PXQudXBkYXRlT259KShlKT8oaT1udWxsIT1lLnZhbGlkYXRvcnM/ZS52YWxpZGF0b3JzOm51bGwsYT1udWxsIT1lLmFzeW5jVmFsaWRhdG9ycz9lLmFzeW5jVmFsaWRhdG9yczpudWxsLG89bnVsbCE9ZS51cGRhdGVPbj9lLnVwZGF0ZU9uOnZvaWQgMCk6KGk9bnVsbCE9ZS52YWxpZGF0b3I/ZS52YWxpZGF0b3I6bnVsbCxhPW51bGwhPWUuYXN5bmNWYWxpZGF0b3I/ZS5hc3luY1ZhbGlkYXRvcjpudWxsKSksbmV3IHpqKG4se2FzeW5jVmFsaWRhdG9yczphLHVwZGF0ZU9uOm8sdmFsaWRhdG9yczppfSl9Y29udHJvbCh0LGUsbil7cmV0dXJuIG5ldyBJaih0LGUsbil9YXJyYXkodCxlLG4pe2NvbnN0IG89dC5tYXAoKHQ9PnRoaXMuX2NyZWF0ZUNvbnRyb2wodCkpKTtyZXR1cm4gbmV3IEhqKG8sZSxuKX1fcmVkdWNlQ29udHJvbHModCl7Y29uc3QgZT17fTtyZXR1cm4gT2JqZWN0LmtleXModCkuZm9yRWFjaCgobj0+e2Vbbl09dGhpcy5fY3JlYXRlQ29udHJvbCh0W25dKX0pKSxlfV9jcmVhdGVDb250cm9sKHQpe3JldHVybiB0IGluc3RhbmNlb2YgSWp8fHQgaW5zdGFuY2VvZiB6anx8dCBpbnN0YW5jZW9mIEhqP3Q6QXJyYXkuaXNBcnJheSh0KT90aGlzLmNvbnRyb2wodFswXSx0Lmxlbmd0aD4xP3RbMV06bnVsbCx0Lmxlbmd0aD4yP3RbMl06bnVsbCk6dGhpcy5jb250cm9sKHQpfX1VVS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8VVUpfSxVVS7JtXByb3Y9bG8oe2ZhY3Rvcnk6ZnVuY3Rpb24gdCgpe3JldHVybiBuZXcgVVV9LHRva2VuOlVVLHByb3ZpZGVkSW46alV9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFVVLFt7dHlwZTpKbSxhcmdzOlt7cHJvdmlkZWRJbjpqVX1dfV0sbnVsbCxudWxsKSwKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCm5ldyBiaCgiMTEuMi4xNCIpO2NvbnN0IFdVPVsidHJpZ2dlciJdLEdVPVsicGFuZWwiXTtmdW5jdGlvbiBZVSh0LGUpe2lmKDEmdCYmKE91KDAsInNwYW4iLDgpLE1mKDEpLFB1KCkpLDImdCl7Y29uc3QgdD1MdSgpO0pjKDEpLHZmKHQucGxhY2Vob2xkZXIpfX1mdW5jdGlvbiBxVSh0LGUpe2lmKDEmdCYmKE91KDAsInNwYW4iLDEyKSxNZigxKSxQdSgpKSwyJnQpe2NvbnN0IHQ9THUoMik7SmMoMSksdmYodC50cmlnZ2VyVmFsdWUpfX1mdW5jdGlvbiBaVSh0LGUpezEmdCYmanUoMCwwLFsiKm5nU3dpdGNoQ2FzZSIsInRydWUiXSl9ZnVuY3Rpb24gWFUodCxlKXsxJnQmJihPdSgwLCJzcGFuIiw5KSxXbSgxLHFVLDIsMSwic3BhbiIsMTApLFdtKDIsWlUsMSwwLCJuZy1jb250ZW50IiwxMSksUHUoKSksMiZ0JiYodnUoIm5nU3dpdGNoIiwhIUx1KCkuY3VzdG9tVHJpZ2dlciksSmMoMiksdnUoIm5nU3dpdGNoQ2FzZSIsITApKX1mdW5jdGlvbiBLVSh0LGUpe2lmKDEmdCl7Y29uc3QgdD1FdSgpO091KDAsImRpdiIsMTMpLE91KDEsImRpdiIsMTQsMTUpLE51KCJAdHJhbnNmb3JtUGFuZWwuZG9uZSIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIHJhKHQpLEx1KCkuX3BhbmVsRG9uZUFuaW1hdGluZ1N0cmVhbS5uZXh0KG4udG9TdGF0ZSl9KSkoImtleWRvd24iLChmdW5jdGlvbiBlKG4pe3JldHVybiByYSh0KSxMdSgpLl9oYW5kbGVLZXlkb3duKG4pfSkpLGp1KDMsMSksUHUoKSxQdSgpfWlmKDImdCl7Y29uc3QgdD1MdSgpO3Z1KCJAdHJhbnNmb3JtUGFuZWxXcmFwIix2b2lkIDApLEpjKDEpLHdmKCJtYXQtc2VsZWN0LXBhbmVsICIsdC5fZ2V0UGFuZWxUaGVtZSgpLCIiKSxvZigidHJhbnNmb3JtLW9yaWdpbiIsdC5fdHJhbnNmb3JtT3JpZ2luKSgiZm9udC1zaXplIix0Ll90cmlnZ2VyRm9udFNpemUsInB4IiksdnUoIm5nQ2xhc3MiLHQucGFuZWxDbGFzcykoIkB0cmFuc2Zvcm1QYW5lbCIsdC5tdWx0aXBsZT8ic2hvd2luZy1tdWx0aXBsZSI6InNob3dpbmciKSxObSgiaWQiLHQuaWQrIi1wYW5lbCIpKCJhcmlhLW11bHRpc2VsZWN0YWJsZSIsdC5tdWx0aXBsZSkoImFyaWEtbGFiZWwiLHQuYXJpYUxhYmVsfHxudWxsKSgiYXJpYS1sYWJlbGxlZGJ5Iix0Ll9nZXRQYW5lbEFyaWFMYWJlbGxlZGJ5KCkpfX1jb25zdCBKVT1bW1sibWF0LXNlbGVjdC10cmlnZ2VyIl1dLCIqIl0sUVU9e3RyYW5zZm9ybVBhbmVsV3JhcDpLeCgidHJhbnNmb3JtUGFuZWxXcmFwIixbbk8oIiogPT4gdm9pZCIsaU8oIkB0cmFuc2Zvcm1QYW5lbCIsW29PKCldLHtvcHRpb25hbDohMH0pKV0pLHRyYW5zZm9ybVBhbmVsOkt4KCJ0cmFuc2Zvcm1QYW5lbCIsW3RPKCJ2b2lkIiwkeCh7dHJhbnNmb3JtOiJzY2FsZVkoMC44KSIsbWluV2lkdGg6IjEwMCUiLG9wYWNpdHk6MH0pKSx0Tygic2hvd2luZyIsJHgoe29wYWNpdHk6MSxtaW5XaWR0aDoiY2FsYygxMDAlICsgMzJweCkiLHRyYW5zZm9ybToic2NhbGVZKDEpIn0pKSx0Tygic2hvd2luZy1tdWx0aXBsZSIsJHgoe29wYWNpdHk6MSxtaW5XaWR0aDoiY2FsYygxMDAlICsgNjRweCkiLHRyYW5zZm9ybToic2NhbGVZKDEpIn0pKSxuTygidm9pZCA9PiAqIixKeCgiMTIwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSkiKSksbk8oIiogPT4gdm9pZCIsSngoIjEwMG1zIDI1bXMgbGluZWFyIiwkeCh7b3BhY2l0eTowfSkpKV0pfTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmxldCAkVT0wO2NvbnN0IHRXPTI1NixlVz1uZXcgTnIoIm1hdC1zZWxlY3Qtc2Nyb2xsLXN0cmF0ZWd5Iiksblc9bmV3IE5yKCJNQVRfU0VMRUNUX0NPTkZJRyIpLG9XPXtwcm92aWRlOmVXLGRlcHM6W0pGXSx1c2VGYWN0b3J5OmZ1bmN0aW9uIGlXKHQpe3JldHVybigpPT50LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpfX07Y2xhc3MgYVd7Y29uc3RydWN0b3IodCxlKXt0aGlzLnNvdXJjZT10LHRoaXMudmFsdWU9ZX19Y29uc3Qgclc9enooSHooTnooRnooY2xhc3N7Y29uc3RydWN0b3IodCxlLG4sbyxpKXt0aGlzLl9lbGVtZW50UmVmPXQsdGhpcy5fZGVmYXVsdEVycm9yU3RhdGVNYXRjaGVyPWUsdGhpcy5fcGFyZW50Rm9ybT1uLHRoaXMuX3BhcmVudEZvcm1Hcm91cD1vLHRoaXMubmdDb250cm9sPWl9fSkpKSksc1c9bmV3IE5yKCJNYXRTZWxlY3RUcmlnZ2VyIik7Y2xhc3MgbFd7fWxXLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxsVyl9LGxXLsm1ZGlyPUpvKHt0eXBlOmxXLHNlbGVjdG9yczpbWyJtYXQtc2VsZWN0LXRyaWdnZXIiXV0sZmVhdHVyZXM6W2loKFt7cHJvdmlkZTpzVyx1c2VFeGlzdGluZzpsV31dKV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGxXLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6Im1hdC1zZWxlY3QtdHJpZ2dlciIscHJvdmlkZXJzOlt7cHJvdmlkZTpzVyx1c2VFeGlzdGluZzpsV31dfV19XSxudWxsLG51bGwpO2NsYXNzIGNXIGV4dGVuZHMgcld7Y29uc3RydWN0b3IodCxlLG4sbyxpLGEscixzLGwsYyxkLHAsbSx1KXt2YXIgZixnLGg7c3VwZXIoaSxvLHIscyxjKSx0aGlzLl92aWV3cG9ydFJ1bGVyPXQsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9ZSx0aGlzLl9uZ1pvbmU9bix0aGlzLl9kaXI9YSx0aGlzLl9wYXJlbnRGb3JtRmllbGQ9bCx0aGlzLm5nQ29udHJvbD1jLHRoaXMuX2xpdmVBbm5vdW5jZXI9bSx0aGlzLl9kZWZhdWx0T3B0aW9ucz11LHRoaXMuX3BhbmVsT3Blbj0hMSx0aGlzLl9jb21wYXJlV2l0aD0odCxlKT0+dD09PWUsdGhpcy5fdWlkPSJtYXQtc2VsZWN0LSIrJFUrKyx0aGlzLl90cmlnZ2VyQXJpYUxhYmVsbGVkQnk9bnVsbCx0aGlzLl9kZXN0cm95PW5ldyB4LHRoaXMuX29uQ2hhbmdlPSgpPT57fSx0aGlzLl9vblRvdWNoZWQ9KCk9Pnt9LHRoaXMuX3ZhbHVlSWQ9Im1hdC1zZWxlY3QtdmFsdWUtIiskVSsrLHRoaXMuX3BhbmVsRG9uZUFuaW1hdGluZ1N0cmVhbT1uZXcgeCx0aGlzLl9vdmVybGF5UGFuZWxDbGFzcz0obnVsbD09PShmPXRoaXMuX2RlZmF1bHRPcHRpb25zKXx8dm9pZCAwPT09Zj92b2lkIDA6Zi5vdmVybGF5UGFuZWxDbGFzcyl8fCIiLHRoaXMuX2ZvY3VzZWQ9ITEsdGhpcy5jb250cm9sVHlwZT0ibWF0LXNlbGVjdCIsdGhpcy5fcmVxdWlyZWQ9ITEsdGhpcy5fbXVsdGlwbGU9ITEsdGhpcy5fZGlzYWJsZU9wdGlvbkNlbnRlcmluZz1udWxsIT09KGg9bnVsbD09PShnPXRoaXMuX2RlZmF1bHRPcHRpb25zKXx8dm9pZCAwPT09Zz92b2lkIDA6Zy5kaXNhYmxlT3B0aW9uQ2VudGVyaW5nKSYmdm9pZCAwIT09aCYmaCx0aGlzLmFyaWFMYWJlbD0iIix0aGlzLm9wdGlvblNlbGVjdGlvbkNoYW5nZXM9RnQoKCgpPT57Y29uc3QgdD10aGlzLm9wdGlvbnM7cmV0dXJuIHQ/dC5jaGFuZ2VzLnBpcGUoY24odCksZG4oKCgpPT5XdCguLi50Lm1hcCgodD0+dC5vblNlbGVjdGlvbkNoYW5nZSkpKSkpKTp0aGlzLl9uZ1pvbmUub25TdGFibGUucGlwZShOZSgxKSxkbigoKCk9PnRoaXMub3B0aW9uU2VsZWN0aW9uQ2hhbmdlcykpKX0pKSx0aGlzLm9wZW5lZENoYW5nZT1uZXcgQWIsdGhpcy5fb3BlbmVkU3RyZWFtPXRoaXMub3BlbmVkQ2hhbmdlLnBpcGUoR3QoKHQ9PnQpKSxodCgoKCk9Pnt9KSkpLHRoaXMuX2Nsb3NlZFN0cmVhbT10aGlzLm9wZW5lZENoYW5nZS5waXBlKEd0KCh0PT4hdCkpLGh0KCgoKT0+e30pKSksdGhpcy5zZWxlY3Rpb25DaGFuZ2U9bmV3IEFiLHRoaXMudmFsdWVDaGFuZ2U9bmV3IEFiLHRoaXMubmdDb250cm9sJiYodGhpcy5uZ0NvbnRyb2wudmFsdWVBY2Nlc3Nvcj10aGlzKSxudWxsIT0obnVsbD09dT92b2lkIDA6dS50eXBlYWhlYWREZWJvdW5jZUludGVydmFsKSYmKHRoaXMuX3R5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWw9dS50eXBlYWhlYWREZWJvdW5jZUludGVydmFsKSx0aGlzLl9zY3JvbGxTdHJhdGVneUZhY3Rvcnk9cCx0aGlzLl9zY3JvbGxTdHJhdGVneT10aGlzLl9zY3JvbGxTdHJhdGVneUZhY3RvcnkoKSx0aGlzLnRhYkluZGV4PXBhcnNlSW50KGQpfHwwLHRoaXMuaWQ9dGhpcy5pZH1nZXQgZm9jdXNlZCgpe3JldHVybiB0aGlzLl9mb2N1c2VkfHx0aGlzLl9wYW5lbE9wZW59Z2V0IHBsYWNlaG9sZGVyKCl7cmV0dXJuIHRoaXMuX3BsYWNlaG9sZGVyfXNldCBwbGFjZWhvbGRlcih0KXt0aGlzLl9wbGFjZWhvbGRlcj10LHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX1nZXQgcmVxdWlyZWQoKXtyZXR1cm4gdGhpcy5fcmVxdWlyZWR9c2V0IHJlcXVpcmVkKHQpe3RoaXMuX3JlcXVpcmVkPXJJKHQpLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX1nZXQgbXVsdGlwbGUoKXtyZXR1cm4gdGhpcy5fbXVsdGlwbGV9c2V0IG11bHRpcGxlKHQpe2lmKHRoaXMuX3NlbGVjdGlvbk1vZGVsJiYoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkpCi8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwp0aHJvdyhmdW5jdGlvbiBlKCl7cmV0dXJuIEVycm9yKCJDYW5ub3QgY2hhbmdlIGBtdWx0aXBsZWAgbW9kZSBvZiBzZWxlY3QgYWZ0ZXIgaW5pdGlhbGl6YXRpb24uIil9KSgpO3RoaXMuX211bHRpcGxlPXJJKHQpfWdldCBkaXNhYmxlT3B0aW9uQ2VudGVyaW5nKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVPcHRpb25DZW50ZXJpbmd9c2V0IGRpc2FibGVPcHRpb25DZW50ZXJpbmcodCl7dGhpcy5fZGlzYWJsZU9wdGlvbkNlbnRlcmluZz1ySSh0KX1nZXQgY29tcGFyZVdpdGgoKXtyZXR1cm4gdGhpcy5fY29tcGFyZVdpdGh9c2V0IGNvbXBhcmVXaXRoKHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiYoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkpdGhyb3coZnVuY3Rpb24gZSgpe3JldHVybiBFcnJvcigiYGNvbXBhcmVXaXRoYCBtdXN0IGJlIGEgZnVuY3Rpb24uIil9KSgpO3RoaXMuX2NvbXBhcmVXaXRoPXQsdGhpcy5fc2VsZWN0aW9uTW9kZWwmJnRoaXMuX2luaXRpYWxpemVTZWxlY3Rpb24oKX1nZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5fdmFsdWV9c2V0IHZhbHVlKHQpeyh0IT09dGhpcy5fdmFsdWV8fHRoaXMuX211bHRpcGxlJiZBcnJheS5pc0FycmF5KHQpKSYmKHRoaXMub3B0aW9ucyYmdGhpcy5fc2V0U2VsZWN0aW9uQnlWYWx1ZSh0KSx0aGlzLl92YWx1ZT10KX1nZXQgdHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCgpe3JldHVybiB0aGlzLl90eXBlYWhlYWREZWJvdW5jZUludGVydmFsfXNldCB0eXBlYWhlYWREZWJvdW5jZUludGVydmFsKHQpe3RoaXMuX3R5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWw9c0kodCl9Z2V0IGlkKCl7cmV0dXJuIHRoaXMuX2lkfXNldCBpZCh0KXt0aGlzLl9pZD10fHx0aGlzLl91aWQsdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfW5nT25Jbml0KCl7dGhpcy5fc2VsZWN0aW9uTW9kZWw9bmV3IGpIKHRoaXMubXVsdGlwbGUpLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKSx0aGlzLl9wYW5lbERvbmVBbmltYXRpbmdTdHJlYW0ucGlwZShrZSgpLHVuKHRoaXMuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUoKCgpPT50aGlzLl9wYW5lbERvbmVBbmltYXRpbmcodGhpcy5wYW5lbE9wZW4pKSl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5faW5pdEtleU1hbmFnZXIoKSx0aGlzLl9zZWxlY3Rpb25Nb2RlbC5jaGFuZ2VkLnBpcGUodW4odGhpcy5fZGVzdHJveSkpLnN1YnNjcmliZSgodD0+e3QuYWRkZWQuZm9yRWFjaCgodD0+dC5zZWxlY3QoKSkpLHQucmVtb3ZlZC5mb3JFYWNoKCh0PT50LmRlc2VsZWN0KCkpKX0pKSx0aGlzLm9wdGlvbnMuY2hhbmdlcy5waXBlKGNuKG51bGwpLHVuKHRoaXMuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5fcmVzZXRPcHRpb25zKCksdGhpcy5faW5pdGlhbGl6ZVNlbGVjdGlvbigpfSkpfW5nRG9DaGVjaygpe2NvbnN0IHQ9dGhpcy5fZ2V0VHJpZ2dlckFyaWFMYWJlbGxlZGJ5KCk7aWYodCE9PXRoaXMuX3RyaWdnZXJBcmlhTGFiZWxsZWRCeSl7Y29uc3QgZT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7dGhpcy5fdHJpZ2dlckFyaWFMYWJlbGxlZEJ5PXQsdD9lLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbGxlZGJ5Iix0KTplLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1sYWJlbGxlZGJ5Iil9dGhpcy5uZ0NvbnRyb2wmJnRoaXMudXBkYXRlRXJyb3JTdGF0ZSgpfW5nT25DaGFuZ2VzKHQpe3QuZGlzYWJsZWQmJnRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKSx0LnR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwmJnRoaXMuX2tleU1hbmFnZXImJnRoaXMuX2tleU1hbmFnZXIud2l0aFR5cGVBaGVhZCh0aGlzLl90eXBlYWhlYWREZWJvdW5jZUludGVydmFsKX1uZ09uRGVzdHJveSgpe3RoaXMuX2Rlc3Ryb3kubmV4dCgpLHRoaXMuX2Rlc3Ryb3kuY29tcGxldGUoKSx0aGlzLnN0YXRlQ2hhbmdlcy5jb21wbGV0ZSgpfXRvZ2dsZSgpe3RoaXMucGFuZWxPcGVuP3RoaXMuY2xvc2UoKTp0aGlzLm9wZW4oKX1vcGVuKCl7dGhpcy5fY2FuT3BlbigpJiYodGhpcy5fcGFuZWxPcGVuPSEwLHRoaXMuX2tleU1hbmFnZXIud2l0aEhvcml6b250YWxPcmllbnRhdGlvbihudWxsKSx0aGlzLl9oaWdobGlnaHRDb3JyZWN0T3B0aW9uKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfWNsb3NlKCl7dGhpcy5fcGFuZWxPcGVuJiYodGhpcy5fcGFuZWxPcGVuPSExLHRoaXMuX2tleU1hbmFnZXIud2l0aEhvcml6b250YWxPcmllbnRhdGlvbih0aGlzLl9pc1J0bCgpPyJydGwiOiJsdHIiKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSx0aGlzLl9vblRvdWNoZWQoKSl9d3JpdGVWYWx1ZSh0KXt0aGlzLnZhbHVlPXR9cmVnaXN0ZXJPbkNoYW5nZSh0KXt0aGlzLl9vbkNoYW5nZT10fXJlZ2lzdGVyT25Ub3VjaGVkKHQpe3RoaXMuX29uVG91Y2hlZD10fXNldERpc2FibGVkU3RhdGUodCl7dGhpcy5kaXNhYmxlZD10LHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX1nZXQgcGFuZWxPcGVuKCl7cmV0dXJuIHRoaXMuX3BhbmVsT3Blbn1nZXQgc2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5tdWx0aXBsZT90aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZDp0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZFswXX1nZXQgdHJpZ2dlclZhbHVlKCl7aWYodGhpcy5lbXB0eSlyZXR1cm4iIjtpZih0aGlzLl9tdWx0aXBsZSl7Y29uc3QgdD10aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZC5tYXAoKHQ9PnQudmlld1ZhbHVlKSk7cmV0dXJuIHRoaXMuX2lzUnRsKCkmJnQucmV2ZXJzZSgpLHQuam9pbigiLCAiKX1yZXR1cm4gdGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWRbMF0udmlld1ZhbHVlfV9pc1J0bCgpe3JldHVybiEhdGhpcy5fZGlyJiYicnRsIj09PXRoaXMuX2Rpci52YWx1ZX1faGFuZGxlS2V5ZG93bih0KXt0aGlzLmRpc2FibGVkfHwodGhpcy5wYW5lbE9wZW4/dGhpcy5faGFuZGxlT3BlbktleWRvd24odCk6dGhpcy5faGFuZGxlQ2xvc2VkS2V5ZG93bih0KSl9X2hhbmRsZUNsb3NlZEtleWRvd24odCl7Y29uc3QgZT10LmtleUNvZGUsbj1lPT09aUl8fGU9PT1vSXx8Mzc9PT1lfHwzOT09PWUsbz1lPT09dEl8fGU9PT1uSSxpPXRoaXMuX2tleU1hbmFnZXI7aWYoIWkuaXNUeXBpbmcoKSYmbyYmIWFJKHQpfHwodGhpcy5tdWx0aXBsZXx8dC5hbHRLZXkpJiZuKXQucHJldmVudERlZmF1bHQoKSx0aGlzLm9wZW4oKTtlbHNlIGlmKCF0aGlzLm11bHRpcGxlKXtjb25zdCBlPXRoaXMuc2VsZWN0ZWQ7aS5vbktleWRvd24odCk7Y29uc3Qgbj10aGlzLnNlbGVjdGVkO24mJmUhPT1uJiZ0aGlzLl9saXZlQW5ub3VuY2VyLmFubm91bmNlKG4udmlld1ZhbHVlLDFlNCl9fV9oYW5kbGVPcGVuS2V5ZG93bih0KXtjb25zdCBlPXRoaXMuX2tleU1hbmFnZXIsbj10LmtleUNvZGUsbz1uPT09aUl8fG49PT1vSSxpPWUuaXNUeXBpbmcoKTtpZihvJiZ0LmFsdEtleSl0LnByZXZlbnREZWZhdWx0KCksdGhpcy5jbG9zZSgpO2Vsc2UgaWYoaXx8biE9PXRJJiZuIT09bkl8fCFlLmFjdGl2ZUl0ZW18fGFJKHQpKWlmKCFpJiZ0aGlzLl9tdWx0aXBsZSYmNjU9PT1uJiZ0LmN0cmxLZXkpe3QucHJldmVudERlZmF1bHQoKTtjb25zdCBlPXRoaXMub3B0aW9ucy5zb21lKCh0PT4hdC5kaXNhYmxlZCYmIXQuc2VsZWN0ZWQpKTt0aGlzLm9wdGlvbnMuZm9yRWFjaCgodD0+e3QuZGlzYWJsZWR8fChlP3Quc2VsZWN0KCk6dC5kZXNlbGVjdCgpKX0pKX1lbHNle2NvbnN0IG49ZS5hY3RpdmVJdGVtSW5kZXg7ZS5vbktleWRvd24odCksdGhpcy5fbXVsdGlwbGUmJm8mJnQuc2hpZnRLZXkmJmUuYWN0aXZlSXRlbSYmZS5hY3RpdmVJdGVtSW5kZXghPT1uJiZlLmFjdGl2ZUl0ZW0uX3NlbGVjdFZpYUludGVyYWN0aW9uKCl9ZWxzZSB0LnByZXZlbnREZWZhdWx0KCksZS5hY3RpdmVJdGVtLl9zZWxlY3RWaWFJbnRlcmFjdGlvbigpfV9vbkZvY3VzKCl7dGhpcy5kaXNhYmxlZHx8KHRoaXMuX2ZvY3VzZWQ9ITAsdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpKX1fb25CbHVyKCl7dGhpcy5fZm9jdXNlZD0hMSx0aGlzLmRpc2FibGVkfHx0aGlzLnBhbmVsT3Blbnx8KHRoaXMuX29uVG91Y2hlZCgpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKSl9X29uQXR0YWNoZWQoKXt0aGlzLm92ZXJsYXlEaXIucG9zaXRpb25DaGFuZ2UucGlwZShOZSgxKSkuc3Vic2NyaWJlKCgoKT0+e3RoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKSx0aGlzLl9wb3NpdGlvbmluZ1NldHRsZWQoKX0pKX1fZ2V0UGFuZWxUaGVtZSgpe3JldHVybiB0aGlzLl9wYXJlbnRGb3JtRmllbGQ/YG1hdC0ke3RoaXMuX3BhcmVudEZvcm1GaWVsZC5jb2xvcn1gOiIifWdldCBlbXB0eSgpe3JldHVybiF0aGlzLl9zZWxlY3Rpb25Nb2RlbHx8dGhpcy5fc2VsZWN0aW9uTW9kZWwuaXNFbXB0eSgpfV9pbml0aWFsaXplU2VsZWN0aW9uKCl7UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKCk9Pnt0aGlzLl9zZXRTZWxlY3Rpb25CeVZhbHVlKHRoaXMubmdDb250cm9sP3RoaXMubmdDb250cm9sLnZhbHVlOnRoaXMuX3ZhbHVlKSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCl9KSl9X3NldFNlbGVjdGlvbkJ5VmFsdWUodCl7aWYodGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWQuZm9yRWFjaCgodD0+dC5zZXRJbmFjdGl2ZVN0eWxlcygpKSksdGhpcy5fc2VsZWN0aW9uTW9kZWwuY2xlYXIoKSx0aGlzLm11bHRpcGxlJiZ0KXtpZighQXJyYXkuaXNBcnJheSh0KSYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpKXRocm93KGZ1bmN0aW9uIGUoKXtyZXR1cm4gRXJyb3IoIlZhbHVlIG11c3QgYmUgYW4gYXJyYXkgaW4gbXVsdGlwbGUtc2VsZWN0aW9uIG1vZGUuIil9KSgpO3QuZm9yRWFjaCgodD0+dGhpcy5fc2VsZWN0VmFsdWUodCkpKSx0aGlzLl9zb3J0VmFsdWVzKCl9ZWxzZXtjb25zdCBlPXRoaXMuX3NlbGVjdFZhbHVlKHQpO2U/dGhpcy5fa2V5TWFuYWdlci51cGRhdGVBY3RpdmVJdGVtKGUpOnRoaXMucGFuZWxPcGVufHx0aGlzLl9rZXlNYW5hZ2VyLnVwZGF0ZUFjdGl2ZUl0ZW0oLTEpfXRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfV9zZWxlY3RWYWx1ZSh0KXtjb25zdCBlPXRoaXMub3B0aW9ucy5maW5kKChlPT57aWYodGhpcy5fc2VsZWN0aW9uTW9kZWwuaXNTZWxlY3RlZChlKSlyZXR1cm4hMTt0cnl7cmV0dXJuIG51bGwhPWUudmFsdWUmJnRoaXMuX2NvbXBhcmVXaXRoKGUudmFsdWUsdCl9Y2F0Y2godCl7cmV0dXJuKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZjb25zb2xlLndhcm4odCksITF9fSkpO3JldHVybiBlJiZ0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3QoZSksZX1faW5pdEtleU1hbmFnZXIoKXt0aGlzLl9rZXlNYW5hZ2VyPW5ldyBCSSh0aGlzLm9wdGlvbnMpLndpdGhUeXBlQWhlYWQodGhpcy5fdHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCkud2l0aFZlcnRpY2FsT3JpZW50YXRpb24oKS53aXRoSG9yaXpvbnRhbE9yaWVudGF0aW9uKHRoaXMuX2lzUnRsKCk/InJ0bCI6Imx0ciIpLndpdGhIb21lQW5kRW5kKCkud2l0aEFsbG93ZWRNb2RpZmllcktleXMoWyJzaGlmdEtleSJdKSx0aGlzLl9rZXlNYW5hZ2VyLnRhYk91dC5waXBlKHVuKHRoaXMuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5wYW5lbE9wZW4mJighdGhpcy5tdWx0aXBsZSYmdGhpcy5fa2V5TWFuYWdlci5hY3RpdmVJdGVtJiZ0aGlzLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0uX3NlbGVjdFZpYUludGVyYWN0aW9uKCksdGhpcy5mb2N1cygpLHRoaXMuY2xvc2UoKSl9KSksdGhpcy5fa2V5TWFuYWdlci5jaGFuZ2UucGlwZSh1bih0aGlzLl9kZXN0cm95KSkuc3Vic2NyaWJlKCgoKT0+e3RoaXMuX3BhbmVsT3BlbiYmdGhpcy5wYW5lbD90aGlzLl9zY3JvbGxPcHRpb25JbnRvVmlldyh0aGlzLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW1JbmRleHx8MCk6dGhpcy5fcGFuZWxPcGVufHx0aGlzLm11bHRpcGxlfHwhdGhpcy5fa2V5TWFuYWdlci5hY3RpdmVJdGVtfHx0aGlzLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0uX3NlbGVjdFZpYUludGVyYWN0aW9uKCl9KSl9X3Jlc2V0T3B0aW9ucygpe2NvbnN0IHQ9V3QodGhpcy5vcHRpb25zLmNoYW5nZXMsdGhpcy5fZGVzdHJveSk7dGhpcy5vcHRpb25TZWxlY3Rpb25DaGFuZ2VzLnBpcGUodW4odCkpLnN1YnNjcmliZSgodD0+e3RoaXMuX29uU2VsZWN0KHQuc291cmNlLHQuaXNVc2VySW5wdXQpLHQuaXNVc2VySW5wdXQmJiF0aGlzLm11bHRpcGxlJiZ0aGlzLl9wYW5lbE9wZW4mJih0aGlzLmNsb3NlKCksdGhpcy5mb2N1cygpKX0pKSxXdCguLi50aGlzLm9wdGlvbnMubWFwKCh0PT50Ll9zdGF0ZUNoYW5nZXMpKSkucGlwZSh1bih0KSkuc3Vic2NyaWJlKCgoKT0+e3RoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX0pKX1fb25TZWxlY3QodCxlKXtjb25zdCBuPXRoaXMuX3NlbGVjdGlvbk1vZGVsLmlzU2VsZWN0ZWQodCk7bnVsbCE9dC52YWx1ZXx8dGhpcy5fbXVsdGlwbGU/KG4hPT10LnNlbGVjdGVkJiYodC5zZWxlY3RlZD90aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3QodCk6dGhpcy5fc2VsZWN0aW9uTW9kZWwuZGVzZWxlY3QodCkpLGUmJnRoaXMuX2tleU1hbmFnZXIuc2V0QWN0aXZlSXRlbSh0KSx0aGlzLm11bHRpcGxlJiYodGhpcy5fc29ydFZhbHVlcygpLGUmJnRoaXMuZm9jdXMoKSkpOih0LmRlc2VsZWN0KCksdGhpcy5fc2VsZWN0aW9uTW9kZWwuY2xlYXIoKSxudWxsIT10aGlzLnZhbHVlJiZ0aGlzLl9wcm9wYWdhdGVDaGFuZ2VzKHQudmFsdWUpKSxuIT09dGhpcy5fc2VsZWN0aW9uTW9kZWwuaXNTZWxlY3RlZCh0KSYmdGhpcy5fcHJvcGFnYXRlQ2hhbmdlcygpLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX1fc29ydFZhbHVlcygpe2lmKHRoaXMubXVsdGlwbGUpe2NvbnN0IHQ9dGhpcy5vcHRpb25zLnRvQXJyYXkoKTt0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zb3J0KCgoZSxuKT0+dGhpcy5zb3J0Q29tcGFyYXRvcj90aGlzLnNvcnRDb21wYXJhdG9yKGUsbix0KTp0LmluZGV4T2YoZSktdC5pbmRleE9mKG4pKSksdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfX1fcHJvcGFnYXRlQ2hhbmdlcyh0KXtsZXQgZT1udWxsO2U9dGhpcy5tdWx0aXBsZT90aGlzLnNlbGVjdGVkLm1hcCgodD0+dC52YWx1ZSkpOnRoaXMuc2VsZWN0ZWQ/dGhpcy5zZWxlY3RlZC52YWx1ZTp0LHRoaXMuX3ZhbHVlPWUsdGhpcy52YWx1ZUNoYW5nZS5lbWl0KGUpLHRoaXMuX29uQ2hhbmdlKGUpLHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQodGhpcy5fZ2V0Q2hhbmdlRXZlbnQoZSkpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfV9oaWdobGlnaHRDb3JyZWN0T3B0aW9uKCl7dGhpcy5fa2V5TWFuYWdlciYmKHRoaXMuZW1wdHk/dGhpcy5fa2V5TWFuYWdlci5zZXRGaXJzdEl0ZW1BY3RpdmUoKTp0aGlzLl9rZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0odGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWRbMF0pKX1fY2FuT3Blbigpe3ZhciB0O3JldHVybiF0aGlzLl9wYW5lbE9wZW4mJiF0aGlzLmRpc2FibGVkJiYobnVsbD09PSh0PXRoaXMub3B0aW9ucyl8fHZvaWQgMD09PXQ/dm9pZCAwOnQubGVuZ3RoKT4wfWZvY3VzKHQpe3RoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cyh0KX1fZ2V0UGFuZWxBcmlhTGFiZWxsZWRieSgpe3ZhciB0O2lmKHRoaXMuYXJpYUxhYmVsKXJldHVybiBudWxsO2NvbnN0IGU9bnVsbD09PSh0PXRoaXMuX3BhcmVudEZvcm1GaWVsZCl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuZ2V0TGFiZWxJZCgpO3JldHVybiB0aGlzLmFyaWFMYWJlbGxlZGJ5PyhlP2UrIiAiOiIiKSt0aGlzLmFyaWFMYWJlbGxlZGJ5OmV9X2dldEFyaWFBY3RpdmVEZXNjZW5kYW50KCl7cmV0dXJuIHRoaXMucGFuZWxPcGVuJiZ0aGlzLl9rZXlNYW5hZ2VyJiZ0aGlzLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0/dGhpcy5fa2V5TWFuYWdlci5hY3RpdmVJdGVtLmlkOm51bGx9X2dldFRyaWdnZXJBcmlhTGFiZWxsZWRieSgpe3ZhciB0O2lmKHRoaXMuYXJpYUxhYmVsKXJldHVybiBudWxsO2NvbnN0IGU9bnVsbD09PSh0PXRoaXMuX3BhcmVudEZvcm1GaWVsZCl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuZ2V0TGFiZWxJZCgpO2xldCBuPShlP2UrIiAiOiIiKSt0aGlzLl92YWx1ZUlkO3JldHVybiB0aGlzLmFyaWFMYWJlbGxlZGJ5JiYobis9IiAiK3RoaXMuYXJpYUxhYmVsbGVkYnkpLG59X3BhbmVsRG9uZUFuaW1hdGluZyh0KXt0aGlzLm9wZW5lZENoYW5nZS5lbWl0KHQpfXNldERlc2NyaWJlZEJ5SWRzKHQpe3RoaXMuX2FyaWFEZXNjcmliZWRieT10LmpvaW4oIiAiKX1vbkNvbnRhaW5lckNsaWNrKCl7dGhpcy5mb2N1cygpLHRoaXMub3BlbigpfWdldCBzaG91bGRMYWJlbEZsb2F0KCl7cmV0dXJuIHRoaXMuX3BhbmVsT3Blbnx8IXRoaXMuZW1wdHl8fHRoaXMuX2ZvY3VzZWQmJiEhdGhpcy5fcGxhY2Vob2xkZXJ9fWNXLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxjVykoTXUoUUgpLE11KEhoKSxNdSh0QyksTXUoZUgpLE11KGNoKSxNdShNeiw4KSxNdShCaiw4KSxNdShsVSw4KSxNdSh5Viw4KSxNdShuaiwxMCksT3IoInRhYmluZGV4IiksTXUoZVcpLE11KGF6KSxNdShuVyw4KSl9LGNXLsm1ZGlyPUpvKHt0eXBlOmNXLHZpZXdRdWVyeTpmdW5jdGlvbiB0KGUsbil7aWYoMSZlJiYoV2IoV1UsMSksV2IoR1UsMSksV2IoZUwsMSkpLDImZSl7bGV0IHQ7VWIodD1ZYigpKSYmKG4udHJpZ2dlcj10LmZpcnN0KSxVYih0PVliKCkpJiYobi5wYW5lbD10LmZpcnN0KSxVYih0PVliKCkpJiYobi5vdmVybGF5RGlyPXQuZmlyc3QpfX0saW5wdXRzOnthcmlhTGFiZWw6WyJhcmlhLWxhYmVsIiwiYXJpYUxhYmVsIl0saWQ6ImlkIixwbGFjZWhvbGRlcjoicGxhY2Vob2xkZXIiLHJlcXVpcmVkOiJyZXF1aXJlZCIsbXVsdGlwbGU6Im11bHRpcGxlIixkaXNhYmxlT3B0aW9uQ2VudGVyaW5nOiJkaXNhYmxlT3B0aW9uQ2VudGVyaW5nIixjb21wYXJlV2l0aDoiY29tcGFyZVdpdGgiLHZhbHVlOiJ2YWx1ZSIsdHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbDoidHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCIscGFuZWxDbGFzczoicGFuZWxDbGFzcyIsYXJpYUxhYmVsbGVkYnk6WyJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhTGFiZWxsZWRieSJdLGVycm9yU3RhdGVNYXRjaGVyOiJlcnJvclN0YXRlTWF0Y2hlciIsc29ydENvbXBhcmF0b3I6InNvcnRDb21wYXJhdG9yIn0sb3V0cHV0czp7b3BlbmVkQ2hhbmdlOiJvcGVuZWRDaGFuZ2UiLF9vcGVuZWRTdHJlYW06Im9wZW5lZCIsX2Nsb3NlZFN0cmVhbToiY2xvc2VkIixzZWxlY3Rpb25DaGFuZ2U6InNlbGVjdGlvbkNoYW5nZSIsdmFsdWVDaGFuZ2U6InZhbHVlQ2hhbmdlIn0sZmVhdHVyZXM6W2dtLFNpXX0pLGNXLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6UUh9LHt0eXBlOkhofSx7dHlwZTp0Q30se3R5cGU6ZUh9LHt0eXBlOmNofSx7dHlwZTpNeixkZWNvcmF0b3JzOlt7dHlwZTpfc31dfSx7dHlwZTpCaixkZWNvcmF0b3JzOlt7dHlwZTpfc31dfSx7dHlwZTpsVSxkZWNvcmF0b3JzOlt7dHlwZTpfc31dfSx7dHlwZTpfVixkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbeVZdfV19LHt0eXBlOm5qLGRlY29yYXRvcnM6W3t0eXBlOkNzfSx7dHlwZTpfc31dfSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6UnIsYXJnczpbInRhYmluZGV4Il19XX0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W2VXXX1dfSx7dHlwZTphen0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltuV119XX1dLGNXLnByb3BEZWNvcmF0b3JzPXt0cmlnZ2VyOlt7dHlwZTpGcixhcmdzOlsidHJpZ2dlciJdfV0scGFuZWw6W3t0eXBlOkZyLGFyZ3M6WyJwYW5lbCJdfV0sb3ZlcmxheURpcjpbe3R5cGU6RnIsYXJnczpbZUxdfV0scGFuZWxDbGFzczpbe3R5cGU6eV99XSxwbGFjZWhvbGRlcjpbe3R5cGU6eV99XSxyZXF1aXJlZDpbe3R5cGU6eV99XSxtdWx0aXBsZTpbe3R5cGU6eV99XSxkaXNhYmxlT3B0aW9uQ2VudGVyaW5nOlt7dHlwZTp5X31dLGNvbXBhcmVXaXRoOlt7dHlwZTp5X31dLHZhbHVlOlt7dHlwZTp5X31dLGFyaWFMYWJlbDpbe3R5cGU6eV8sYXJnczpbImFyaWEtbGFiZWwiXX1dLGFyaWFMYWJlbGxlZGJ5Olt7dHlwZTp5XyxhcmdzOlsiYXJpYS1sYWJlbGxlZGJ5Il19XSxlcnJvclN0YXRlTWF0Y2hlcjpbe3R5cGU6eV99XSx0eXBlYWhlYWREZWJvdW5jZUludGVydmFsOlt7dHlwZTp5X31dLHNvcnRDb21wYXJhdG9yOlt7dHlwZTp5X31dLGlkOlt7dHlwZTp5X31dLG9wZW5lZENoYW5nZTpbe3R5cGU6X199XSxfb3BlbmVkU3RyZWFtOlt7dHlwZTpfXyxhcmdzOlsib3BlbmVkIl19XSxfY2xvc2VkU3RyZWFtOlt7dHlwZTpfXyxhcmdzOlsiY2xvc2VkIl19XSxzZWxlY3Rpb25DaGFuZ2U6W3t0eXBlOl9ffV0sdmFsdWVDaGFuZ2U6W3t0eXBlOl9ffV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoY1csW3t0eXBlOmdffV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOlFIfSx7dHlwZTpIaH0se3R5cGU6dEN9LHt0eXBlOmVIfSx7dHlwZTpjaH0se3R5cGU6TXosZGVjb3JhdG9yczpbe3R5cGU6X3N9XX0se3R5cGU6QmosZGVjb3JhdG9yczpbe3R5cGU6X3N9XX0se3R5cGU6bFUsZGVjb3JhdG9yczpbe3R5cGU6X3N9XX0se3R5cGU6X1YsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W3lWXX1dfSx7dHlwZTpuaixkZWNvcmF0b3JzOlt7dHlwZTpDc30se3R5cGU6X3N9XX0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOlJyLGFyZ3M6WyJ0YWJpbmRleCJdfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltlV119XX0se3R5cGU6YXp9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbblddfV19XX0pLHthcmlhTGFiZWw6W3t0eXBlOnlfLGFyZ3M6WyJhcmlhLWxhYmVsIl19XSxvcGVuZWRDaGFuZ2U6W3t0eXBlOl9ffV0sX29wZW5lZFN0cmVhbTpbe3R5cGU6X18sYXJnczpbIm9wZW5lZCJdfV0sX2Nsb3NlZFN0cmVhbTpbe3R5cGU6X18sYXJnczpbImNsb3NlZCJdfV0sc2VsZWN0aW9uQ2hhbmdlOlt7dHlwZTpfX31dLHZhbHVlQ2hhbmdlOlt7dHlwZTpfX31dLGlkOlt7dHlwZTp5X31dLHBsYWNlaG9sZGVyOlt7dHlwZTp5X31dLHJlcXVpcmVkOlt7dHlwZTp5X31dLG11bHRpcGxlOlt7dHlwZTp5X31dLGRpc2FibGVPcHRpb25DZW50ZXJpbmc6W3t0eXBlOnlffV0sY29tcGFyZVdpdGg6W3t0eXBlOnlffV0sdmFsdWU6W3t0eXBlOnlffV0sdHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbDpbe3R5cGU6eV99XSx0cmlnZ2VyOlt7dHlwZTpGcixhcmdzOlsidHJpZ2dlciJdfV0scGFuZWw6W3t0eXBlOkZyLGFyZ3M6WyJwYW5lbCJdfV0sb3ZlcmxheURpcjpbe3R5cGU6RnIsYXJnczpbZUxdfV0scGFuZWxDbGFzczpbe3R5cGU6eV99XSxhcmlhTGFiZWxsZWRieTpbe3R5cGU6eV8sYXJnczpbImFyaWEtbGFiZWxsZWRieSJdfV0sZXJyb3JTdGF0ZU1hdGNoZXI6W3t0eXBlOnlffV0sc29ydENvbXBhcmF0b3I6W3t0eXBlOnlffV19KTtjbGFzcyBkVyBleHRlbmRzIGNXe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9zY3JvbGxUb3A9MCx0aGlzLl90cmlnZ2VyRm9udFNpemU9MCx0aGlzLl90cmFuc2Zvcm1PcmlnaW49InRvcCIsdGhpcy5fb2Zmc2V0WT0wLHRoaXMuX3Bvc2l0aW9ucz1be29yaWdpblg6InN0YXJ0IixvcmlnaW5ZOiJ0b3AiLG92ZXJsYXlYOiJzdGFydCIsb3ZlcmxheVk6InRvcCJ9LHtvcmlnaW5YOiJzdGFydCIsb3JpZ2luWToiYm90dG9tIixvdmVybGF5WDoic3RhcnQiLG92ZXJsYXlZOiJib3R0b20ifV19X2NhbGN1bGF0ZU92ZXJsYXlTY3JvbGwodCxlLG4pe2NvbnN0IG89dGhpcy5fZ2V0SXRlbUhlaWdodCgpO3JldHVybiBNYXRoLm1pbihNYXRoLm1heCgwLG8qdC1lK28vMiksbil9bmdPbkluaXQoKXtzdXBlci5uZ09uSW5pdCgpLHRoaXMuX3ZpZXdwb3J0UnVsZXIuY2hhbmdlKCkucGlwZSh1bih0aGlzLl9kZXN0cm95KSkuc3Vic2NyaWJlKCgoKT0+e3RoaXMucGFuZWxPcGVuJiYodGhpcy5fdHJpZ2dlclJlY3Q9dGhpcy50cmlnZ2VyLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfSkpfW9wZW4oKXtzdXBlci5fY2FuT3BlbigpJiYoc3VwZXIub3BlbigpLHRoaXMuX3RyaWdnZXJSZWN0PXRoaXMudHJpZ2dlci5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHRoaXMuX3RyaWdnZXJGb250U2l6ZT1wYXJzZUludChnZXRDb21wdXRlZFN0eWxlKHRoaXMudHJpZ2dlci5uYXRpdmVFbGVtZW50KS5mb250U2l6ZXx8IjAiKSx0aGlzLl9jYWxjdWxhdGVPdmVybGF5UG9zaXRpb24oKSx0aGlzLl9uZ1pvbmUub25TdGFibGUucGlwZShOZSgxKSkuc3Vic2NyaWJlKCgoKT0+e3RoaXMuX3RyaWdnZXJGb250U2l6ZSYmdGhpcy5vdmVybGF5RGlyLm92ZXJsYXlSZWYmJnRoaXMub3ZlcmxheURpci5vdmVybGF5UmVmLm92ZXJsYXlFbGVtZW50JiYodGhpcy5vdmVybGF5RGlyLm92ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQuc3R5bGUuZm9udFNpemU9YCR7dGhpcy5fdHJpZ2dlckZvbnRTaXplfXB4YCl9KSkpfV9zY3JvbGxPcHRpb25JbnRvVmlldyh0KXtjb25zdCBlPXdIKHQsdGhpcy5vcHRpb25zLHRoaXMub3B0aW9uR3JvdXBzKSxuPXRoaXMuX2dldEl0ZW1IZWlnaHQoKTt0aGlzLnBhbmVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wPWtIKCh0K2UpKm4sbix0aGlzLnBhbmVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wLHRXKX1fcG9zaXRpb25pbmdTZXR0bGVkKCl7dGhpcy5fY2FsY3VsYXRlT3ZlcmxheU9mZnNldFgoKSx0aGlzLnBhbmVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wPXRoaXMuX3Njcm9sbFRvcH1fcGFuZWxEb25lQW5pbWF0aW5nKHQpe3RoaXMucGFuZWxPcGVuP3RoaXMuX3Njcm9sbFRvcD0wOih0aGlzLm92ZXJsYXlEaXIub2Zmc2V0WD0wLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKSxzdXBlci5fcGFuZWxEb25lQW5pbWF0aW5nKHQpfV9nZXRDaGFuZ2VFdmVudCh0KXtyZXR1cm4gbmV3IGFXKHRoaXMsdCl9X2NhbGN1bGF0ZU92ZXJsYXlPZmZzZXRYKCl7Y29uc3QgdD10aGlzLm92ZXJsYXlEaXIub3ZlcmxheVJlZi5vdmVybGF5RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxlPXRoaXMuX3ZpZXdwb3J0UnVsZXIuZ2V0Vmlld3BvcnRTaXplKCksbj10aGlzLl9pc1J0bCgpLG89dGhpcy5tdWx0aXBsZT81NjozMjtsZXQgaTtpZih0aGlzLm11bHRpcGxlKWk9NDA7ZWxzZSBpZih0aGlzLmRpc2FibGVPcHRpb25DZW50ZXJpbmcpaT0xNjtlbHNle2xldCB0PXRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGVkWzBdfHx0aGlzLm9wdGlvbnMuZmlyc3Q7aT10JiZ0Lmdyb3VwPzMyOjE2fW58fChpKj0tMSk7Y29uc3QgYT0wLSh0LmxlZnQraS0obj9vOjApKSxyPXQucmlnaHQraS1lLndpZHRoKyhuPzA6byk7YT4wP2krPWErODpyPjAmJihpLT1yKzgpLHRoaXMub3ZlcmxheURpci5vZmZzZXRYPU1hdGgucm91bmQoaSksdGhpcy5vdmVybGF5RGlyLm92ZXJsYXlSZWYudXBkYXRlUG9zaXRpb24oKX1fY2FsY3VsYXRlT3ZlcmxheU9mZnNldFkodCxlLG4pe2NvbnN0IG89dGhpcy5fZ2V0SXRlbUhlaWdodCgpLGk9KG8tdGhpcy5fdHJpZ2dlclJlY3QuaGVpZ2h0KS8yLGE9TWF0aC5mbG9vcih0Vy9vKTtsZXQgcjtyZXR1cm4gdGhpcy5kaXNhYmxlT3B0aW9uQ2VudGVyaW5nPzA6KHI9MD09PXRoaXMuX3Njcm9sbFRvcD90Km86dGhpcy5fc2Nyb2xsVG9wPT09bj8odC0odGhpcy5fZ2V0SXRlbUNvdW50KCktYSkpKm8rKG8tKHRoaXMuX2dldEl0ZW1Db3VudCgpKm8tdFcpJW8pOmUtby8yLE1hdGgucm91bmQoLTEqci1pKSl9X2NoZWNrT3ZlcmxheVdpdGhpblZpZXdwb3J0KHQpe2NvbnN0IGU9dGhpcy5fZ2V0SXRlbUhlaWdodCgpLG49dGhpcy5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNpemUoKSxvPXRoaXMuX3RyaWdnZXJSZWN0LnRvcC04LGk9bi5oZWlnaHQtdGhpcy5fdHJpZ2dlclJlY3QuYm90dG9tLTgsYT1NYXRoLmFicyh0aGlzLl9vZmZzZXRZKSxyPU1hdGgubWluKHRoaXMuX2dldEl0ZW1Db3VudCgpKmUsdFcpLWEtdGhpcy5fdHJpZ2dlclJlY3QuaGVpZ2h0O3I+aT90aGlzLl9hZGp1c3RQYW5lbFVwKHIsaSk6YT5vP3RoaXMuX2FkanVzdFBhbmVsRG93bihhLG8sdCk6dGhpcy5fdHJhbnNmb3JtT3JpZ2luPXRoaXMuX2dldE9yaWdpbkJhc2VkT25PcHRpb24oKX1fYWRqdXN0UGFuZWxVcCh0LGUpe2NvbnN0IG49TWF0aC5yb3VuZCh0LWUpO3RoaXMuX3Njcm9sbFRvcC09bix0aGlzLl9vZmZzZXRZLT1uLHRoaXMuX3RyYW5zZm9ybU9yaWdpbj10aGlzLl9nZXRPcmlnaW5CYXNlZE9uT3B0aW9uKCksdGhpcy5fc2Nyb2xsVG9wPD0wJiYodGhpcy5fc2Nyb2xsVG9wPTAsdGhpcy5fb2Zmc2V0WT0wLHRoaXMuX3RyYW5zZm9ybU9yaWdpbj0iNTAlIGJvdHRvbSAwcHgiKX1fYWRqdXN0UGFuZWxEb3duKHQsZSxuKXtjb25zdCBvPU1hdGgucm91bmQodC1lKTtpZih0aGlzLl9zY3JvbGxUb3ArPW8sdGhpcy5fb2Zmc2V0WSs9byx0aGlzLl90cmFuc2Zvcm1PcmlnaW49dGhpcy5fZ2V0T3JpZ2luQmFzZWRPbk9wdGlvbigpLHRoaXMuX3Njcm9sbFRvcD49bilyZXR1cm4gdGhpcy5fc2Nyb2xsVG9wPW4sdGhpcy5fb2Zmc2V0WT0wLHZvaWQodGhpcy5fdHJhbnNmb3JtT3JpZ2luPSI1MCUgdG9wIDBweCIpfV9jYWxjdWxhdGVPdmVybGF5UG9zaXRpb24oKXtjb25zdCB0PXRoaXMuX2dldEl0ZW1IZWlnaHQoKSxlPXRoaXMuX2dldEl0ZW1Db3VudCgpLG49TWF0aC5taW4oZSp0LHRXKSxvPWUqdC1uO2xldCBpO2k9dGhpcy5lbXB0eT8wOk1hdGgubWF4KHRoaXMub3B0aW9ucy50b0FycmF5KCkuaW5kZXhPZih0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZFswXSksMCksaSs9d0goaSx0aGlzLm9wdGlvbnMsdGhpcy5vcHRpb25Hcm91cHMpO2NvbnN0IGE9bi8yO3RoaXMuX3Njcm9sbFRvcD10aGlzLl9jYWxjdWxhdGVPdmVybGF5U2Nyb2xsKGksYSxvKSx0aGlzLl9vZmZzZXRZPXRoaXMuX2NhbGN1bGF0ZU92ZXJsYXlPZmZzZXRZKGksYSxvKSx0aGlzLl9jaGVja092ZXJsYXlXaXRoaW5WaWV3cG9ydChvKX1fZ2V0T3JpZ2luQmFzZWRPbk9wdGlvbigpe2NvbnN0IHQ9dGhpcy5fZ2V0SXRlbUhlaWdodCgpLGU9KHQtdGhpcy5fdHJpZ2dlclJlY3QuaGVpZ2h0KS8yO3JldHVybmA1MCUgJHtNYXRoLmFicyh0aGlzLl9vZmZzZXRZKS1lK3QvMn1weCAwcHhgfV9nZXRJdGVtSGVpZ2h0KCl7cmV0dXJuIDMqdGhpcy5fdHJpZ2dlckZvbnRTaXplfV9nZXRJdGVtQ291bnQoKXtyZXR1cm4gdGhpcy5vcHRpb25zLmxlbmd0aCt0aGlzLm9wdGlvbkdyb3Vwcy5sZW5ndGh9fWRXLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIHBXKGV8fGRXKX0sZFcuybVjbXA9VW8oe3R5cGU6ZFcsc2VsZWN0b3JzOltbIm1hdC1zZWxlY3QiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24gdChlLG4sbyl7aWYoMSZlJiYoR2IobyxzVywxKSxHYihvLFBILDEpLEdiKG8sX0gsMSkpLDImZSl7bGV0IHQ7VWIodD1ZYigpKSYmKG4uY3VzdG9tVHJpZ2dlcj10LmZpcnN0KSxVYih0PVliKCkpJiYobi5vcHRpb25zPXQpLFViKHQ9WWIoKSkmJihuLm9wdGlvbkdyb3Vwcz10KX19LGhvc3RBdHRyczpbInJvbGUiLCJjb21ib2JveCIsImFyaWEtYXV0b2NvbXBsZXRlIiwibm9uZSIsImFyaWEtaGFzcG9wdXAiLCJ0cnVlIiwxLCJtYXQtc2VsZWN0Il0saG9zdFZhcnM6MjAsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJk51KCJrZXlkb3duIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5faGFuZGxlS2V5ZG93bihlKX0pKSgiZm9jdXMiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uX29uRm9jdXMoKX0pKSgiYmx1ciIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5fb25CbHVyKCl9KSksMiZlJiYoTm0oImlkIixuLmlkKSgidGFiaW5kZXgiLG4udGFiSW5kZXgpKCJhcmlhLWNvbnRyb2xzIixuLnBhbmVsT3Blbj9uLmlkKyItcGFuZWwiOm51bGwpKCJhcmlhLWV4cGFuZGVkIixuLnBhbmVsT3BlbikoImFyaWEtbGFiZWwiLG4uYXJpYUxhYmVsfHxudWxsKSgiYXJpYS1yZXF1aXJlZCIsbi5yZXF1aXJlZC50b1N0cmluZygpKSgiYXJpYS1kaXNhYmxlZCIsbi5kaXNhYmxlZC50b1N0cmluZygpKSgiYXJpYS1pbnZhbGlkIixuLmVycm9yU3RhdGUpKCJhcmlhLWRlc2NyaWJlZGJ5IixuLl9hcmlhRGVzY3JpYmVkYnl8fG51bGwpKCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnQiLG4uX2dldEFyaWFBY3RpdmVEZXNjZW5kYW50KCkpLGFmKCJtYXQtc2VsZWN0LWRpc2FibGVkIixuLmRpc2FibGVkKSgibWF0LXNlbGVjdC1pbnZhbGlkIixuLmVycm9yU3RhdGUpKCJtYXQtc2VsZWN0LXJlcXVpcmVkIixuLnJlcXVpcmVkKSgibWF0LXNlbGVjdC1lbXB0eSIsbi5lbXB0eSkoIm1hdC1zZWxlY3QtbXVsdGlwbGUiLG4ubXVsdGlwbGUpKX0saW5wdXRzOntkaXNhYmxlZDoiZGlzYWJsZWQiLGRpc2FibGVSaXBwbGU6ImRpc2FibGVSaXBwbGUiLHRhYkluZGV4OiJ0YWJJbmRleCJ9LGV4cG9ydEFzOlsibWF0U2VsZWN0Il0sZmVhdHVyZXM6W2loKFt7cHJvdmlkZTppVix1c2VFeGlzdGluZzpkV30se3Byb3ZpZGU6Z0gsdXNlRXhpc3Rpbmc6ZFd9XSksZ21dLG5nQ29udGVudFNlbGVjdG9yczpbIm1hdC1zZWxlY3QtdHJpZ2dlciIsIioiXSxkZWNsczo5LHZhcnM6MTIsY29uc3RzOltbImNkay1vdmVybGF5LW9yaWdpbiIsIiIsMSwibWF0LXNlbGVjdC10cmlnZ2VyIiwzLCJjbGljayJdLFsib3JpZ2luIiwiY2RrT3ZlcmxheU9yaWdpbiIsInRyaWdnZXIiLCIiXSxbMSwibWF0LXNlbGVjdC12YWx1ZSIsMywibmdTd2l0Y2giXSxbImNsYXNzIiwibWF0LXNlbGVjdC1wbGFjZWhvbGRlciBtYXQtc2VsZWN0LW1pbi1saW5lIiw0LCJuZ1N3aXRjaENhc2UiXSxbImNsYXNzIiwibWF0LXNlbGVjdC12YWx1ZS10ZXh0IiwzLCJuZ1N3aXRjaCIsNCwibmdTd2l0Y2hDYXNlIl0sWzEsIm1hdC1zZWxlY3QtYXJyb3ctd3JhcHBlciJdLFsxLCJtYXQtc2VsZWN0LWFycm93Il0sWyJjZGstY29ubmVjdGVkLW92ZXJsYXkiLCIiLCJjZGtDb25uZWN0ZWRPdmVybGF5TG9ja1Bvc2l0aW9uIiwiIiwiY2RrQ29ubmVjdGVkT3ZlcmxheUhhc0JhY2tkcm9wIiwiIiwiY2RrQ29ubmVjdGVkT3ZlcmxheUJhY2tkcm9wQ2xhc3MiLCJjZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcCIsMywiY2RrQ29ubmVjdGVkT3ZlcmxheVBhbmVsQ2xhc3MiLCJjZGtDb25uZWN0ZWRPdmVybGF5U2Nyb2xsU3RyYXRlZ3kiLCJjZGtDb25uZWN0ZWRPdmVybGF5T3JpZ2luIiwiY2RrQ29ubmVjdGVkT3ZlcmxheU9wZW4iLCJjZGtDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25zIiwiY2RrQ29ubmVjdGVkT3ZlcmxheU1pbldpZHRoIiwiY2RrQ29ubmVjdGVkT3ZlcmxheU9mZnNldFkiLCJiYWNrZHJvcENsaWNrIiwiYXR0YWNoIiwiZGV0YWNoIl0sWzEsIm1hdC1zZWxlY3QtcGxhY2Vob2xkZXIiLCJtYXQtc2VsZWN0LW1pbi1saW5lIl0sWzEsIm1hdC1zZWxlY3QtdmFsdWUtdGV4dCIsMywibmdTd2l0Y2giXSxbImNsYXNzIiwibWF0LXNlbGVjdC1taW4tbGluZSIsNCwibmdTd2l0Y2hEZWZhdWx0Il0sWzQsIm5nU3dpdGNoQ2FzZSJdLFsxLCJtYXQtc2VsZWN0LW1pbi1saW5lIl0sWzEsIm1hdC1zZWxlY3QtcGFuZWwtd3JhcCJdLFsicm9sZSIsImxpc3Rib3giLCJ0YWJpbmRleCIsIi0xIiwzLCJuZ0NsYXNzIiwia2V5ZG93biJdLFsicGFuZWwiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pe2lmKDEmZSYmKFZ1KEpVKSxPdSgwLCJkaXYiLDAsMSksTnUoImNsaWNrIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLnRvZ2dsZSgpfSkpLE91KDMsImRpdiIsMiksV20oNCxZVSwyLDEsInNwYW4iLDMpLFdtKDUsWFUsMywyLCJzcGFuIiw0KSxQdSgpLE91KDYsImRpdiIsNSksd3UoNywiZGl2Iiw2KSxQdSgpLFB1KCksV20oOCxLVSw0LDE0LCJuZy10ZW1wbGF0ZSIsNyksTnUoImJhY2tkcm9wQ2xpY2siLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uY2xvc2UoKX0pKSgiYXR0YWNoIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLl9vbkF0dGFjaGVkKCl9KSkoImRldGFjaCIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5jbG9zZSgpfSkpKSwyJmUpe2NvbnN0IHQ9R20oMSk7Tm0oImFyaWEtb3ducyIsbi5wYW5lbE9wZW4/bi5pZCsiLXBhbmVsIjpudWxsKSxKYygzKSx2dSgibmdTd2l0Y2giLG4uZW1wdHkpLE5tKCJpZCIsbi5fdmFsdWVJZCksSmMoMSksdnUoIm5nU3dpdGNoQ2FzZSIsITApLEpjKDEpLHZ1KCJuZ1N3aXRjaENhc2UiLCExKSxKYygzKSx2dSgiY2RrQ29ubmVjdGVkT3ZlcmxheVBhbmVsQ2xhc3MiLG4uX292ZXJsYXlQYW5lbENsYXNzKSgiY2RrQ29ubmVjdGVkT3ZlcmxheVNjcm9sbFN0cmF0ZWd5IixuLl9zY3JvbGxTdHJhdGVneSkoImNka0Nvbm5lY3RlZE92ZXJsYXlPcmlnaW4iLHQpKCJjZGtDb25uZWN0ZWRPdmVybGF5T3BlbiIsbi5wYW5lbE9wZW4pKCJjZGtDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25zIixuLl9wb3NpdGlvbnMpKCJjZGtDb25uZWN0ZWRPdmVybGF5TWluV2lkdGgiLG51bGw9PW4uX3RyaWdnZXJSZWN0P251bGw6bi5fdHJpZ2dlclJlY3Qud2lkdGgpKCJjZGtDb25uZWN0ZWRPdmVybGF5T2Zmc2V0WSIsbi5fb2Zmc2V0WSl9fSxkaXJlY3RpdmVzOlt0TCxjdixkdixlTCxwdix0dl0sc3R5bGVzOlsnLm1hdC1zZWxlY3R7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MTAwJTtvdXRsaW5lOm5vbmV9Lm1hdC1zZWxlY3QtdHJpZ2dlcntkaXNwbGF5OmlubGluZS10YWJsZTtjdXJzb3I6cG9pbnRlcjtwb3NpdGlvbjpyZWxhdGl2ZTtib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1zZWxlY3QtZGlzYWJsZWQgLm1hdC1zZWxlY3QtdHJpZ2dlcnstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1zZWxlY3QtdmFsdWV7ZGlzcGxheTp0YWJsZS1jZWxsO21heC13aWR0aDowO3dpZHRoOjEwMCU7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwfS5tYXQtc2VsZWN0LXZhbHVlLXRleHR7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS5tYXQtc2VsZWN0LWFycm93LXdyYXBwZXJ7ZGlzcGxheTp0YWJsZS1jZWxsO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtc2VsZWN0LWFycm93LXdyYXBwZXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LXNlbGVjdC1hcnJvdy13cmFwcGVye3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0yNSUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkLm1hdC1mb3JtLWZpZWxkLWhhcy1sYWJlbCAubWF0LXNlbGVjdDpub3QoLm1hdC1zZWxlY3QtZW1wdHkpIC5tYXQtc2VsZWN0LWFycm93LXdyYXBwZXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1zZWxlY3QubWF0LXNlbGVjdC1lbXB0eSAubWF0LXNlbGVjdC1hcnJvdy13cmFwcGVye3RyYW5zaXRpb246dHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtc2VsZWN0Lm1hdC1zZWxlY3QtZW1wdHkgLm1hdC1zZWxlY3QtYXJyb3ctd3JhcHBlcnt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1zZWxlY3QtYXJyb3d7d2lkdGg6MDtoZWlnaHQ6MDtib3JkZXItbGVmdDo1cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0OjVweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItdG9wOjVweCBzb2xpZDttYXJnaW46MCA0cHh9Lm1hdC1zZWxlY3QtcGFuZWwtd3JhcHtmbGV4LWJhc2lzOjEwMCV9Lm1hdC1zZWxlY3QtcGFuZWx7bWluLXdpZHRoOjExMnB4O21heC13aWR0aDoyODBweDtvdmVyZmxvdzphdXRvOy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNoO3BhZGRpbmctdG9wOjA7cGFkZGluZy1ib3R0b206MDttYXgtaGVpZ2h0OjI1NnB4O21pbi13aWR0aDoxMDAlO2JvcmRlci1yYWRpdXM6NHB4O291dGxpbmU6MH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc2VsZWN0LXBhbmVse291dGxpbmU6c29saWQgMXB4fS5tYXQtc2VsZWN0LXBhbmVsIC5tYXQtb3B0Z3JvdXAtbGFiZWwsLm1hdC1zZWxlY3QtcGFuZWwgLm1hdC1vcHRpb257Zm9udC1zaXplOmluaGVyaXQ7bGluZS1oZWlnaHQ6M2VtO2hlaWdodDozZW19Lm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LXNlbGVjdDpub3QoLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkKSAubWF0LWZvcm0tZmllbGQtZmxleHtjdXJzb3I6cG9pbnRlcn0ubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtc2VsZWN0IC5tYXQtZm9ybS1maWVsZC1sYWJlbHt3aWR0aDpjYWxjKDEwMCUgLSAxOHB4KX0ubWF0LXNlbGVjdC1wbGFjZWhvbGRlcnt0cmFuc2l0aW9uOmNvbG9yIDQwMG1zIDEzMy4zMzMzMzMzMzMzbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtc2VsZWN0LXBsYWNlaG9sZGVye3RyYW5zaXRpb246bm9uZX0ubWF0LWZvcm0tZmllbGQtaGlkZS1wbGFjZWhvbGRlciAubWF0LXNlbGVjdC1wbGFjZWhvbGRlcntjb2xvcjp0cmFuc3BhcmVudDstd2Via2l0LXRleHQtZmlsbC1jb2xvcjp0cmFuc3BhcmVudDt0cmFuc2l0aW9uOm5vbmU7ZGlzcGxheTpibG9ja30ubWF0LXNlbGVjdC1taW4tbGluZTplbXB0eTo6YmVmb3Jle2NvbnRlbnQ6IiAiO3doaXRlLXNwYWNlOnByZTt3aWR0aDoxcHh9XG4nXSxlbmNhcHN1bGF0aW9uOjIsZGF0YTp7YW5pbWF0aW9uOltRVS50cmFuc2Zvcm1QYW5lbFdyYXAsUVUudHJhbnNmb3JtUGFuZWxdfSxjaGFuZ2VEZXRlY3Rpb246MH0pLGRXLnByb3BEZWNvcmF0b3JzPXtvcHRpb25zOlt7dHlwZTp6cixhcmdzOltQSCx7ZGVzY2VuZGFudHM6ITB9XX1dLG9wdGlvbkdyb3Vwczpbe3R5cGU6enIsYXJnczpbX0gse2Rlc2NlbmRhbnRzOiEwfV19XSxjdXN0b21UcmlnZ2VyOlt7dHlwZTpIcixhcmdzOltzV119XX07Y29uc3QgcFc9dnIoZFcpOygidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoZFcsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoibWF0LXNlbGVjdCIsZXhwb3J0QXM6Im1hdFNlbGVjdCIsdGVtcGxhdGU6J1x4M2MhLS1cbiBOb3RlIHRoYXQgdGhlIHNlbGVjdCB0cmlnZ2VyIGVsZW1lbnQgc3BlY2lmaWVzIGBhcmlhLW93bnNgIHBvaW50aW5nIHRvIHRoZSBsaXN0Ym94IG92ZXJsYXkuXG4gV2hpbGUgYXJpYS1vd25zIGlzIG5vdCByZXF1aXJlZCBmb3IgdGhlIEFSSUEgMS4yIGByb2xlPSJjb21ib2JveCJgIGludGVyYWN0aW9uIHBhdHRlcm4sXG4gaXQgZml4ZXMgYW4gaXNzdWUgd2l0aCBWb2ljZU92ZXIgd2hlbiB0aGUgc2VsZWN0IGFwcGVhcnMgaW5zaWRlIG9mIGFuIGBhcmlhLW1vZGVsPSJ0cnVlImBcbiBlbGVtZW50IChlLmcuIGEgZGlhbG9nKS4gV2l0aG91dCB0aGlzIGBhcmlhLW93bnNgLCB0aGUgYGFyaWEtbW9kYWxgIG9uIGEgZGlhbG9nIHByZXZlbnRzXG4gVm9pY2VPdmVyIGZyb20gInNlZWluZyIgdGhlIHNlbGVjdFwncyBsaXN0Ym94IG92ZXJsYXkgZm9yIGFyaWEtYWN0aXZlZGVzY2VuZGFudC5cbiBVc2luZyBgYXJpYS1vd25zYCByZS1wYXJlbnRzIHRoZSBzZWxlY3Qgb3ZlcmxheSBzbyB0aGF0IGl0IHdvcmtzIGFnYWluLlxuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9jb21wb25lbnRzL2lzc3Vlcy8yMDY5NFxuLS1ceDNlXG48ZGl2IGNkay1vdmVybGF5LW9yaWdpblxuICAgICBbYXR0ci5hcmlhLW93bnNdPSJwYW5lbE9wZW4gPyBpZCArIFwnLXBhbmVsXCcgOiBudWxsIlxuICAgICBjbGFzcz0ibWF0LXNlbGVjdC10cmlnZ2VyIlxuICAgICAoY2xpY2spPSJ0b2dnbGUoKSJcbiAgICAgI29yaWdpbj0iY2RrT3ZlcmxheU9yaWdpbiJcbiAgICAgI3RyaWdnZXI+XG4gIDxkaXYgY2xhc3M9Im1hdC1zZWxlY3QtdmFsdWUiIFtuZ1N3aXRjaF09ImVtcHR5IiBbYXR0ci5pZF09Il92YWx1ZUlkIj5cbiAgICA8c3BhbiBjbGFzcz0ibWF0LXNlbGVjdC1wbGFjZWhvbGRlciBtYXQtc2VsZWN0LW1pbi1saW5lIiAqbmdTd2l0Y2hDYXNlPSJ0cnVlIj57e3BsYWNlaG9sZGVyfX08L3NwYW4+XG4gICAgPHNwYW4gY2xhc3M9Im1hdC1zZWxlY3QtdmFsdWUtdGV4dCIgKm5nU3dpdGNoQ2FzZT0iZmFsc2UiIFtuZ1N3aXRjaF09IiEhY3VzdG9tVHJpZ2dlciI+XG4gICAgICA8c3BhbiBjbGFzcz0ibWF0LXNlbGVjdC1taW4tbGluZSIgKm5nU3dpdGNoRGVmYXVsdD57e3RyaWdnZXJWYWx1ZX19PC9zcGFuPlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PSJtYXQtc2VsZWN0LXRyaWdnZXIiICpuZ1N3aXRjaENhc2U9InRydWUiPjwvbmctY29udGVudD5cbiAgICA8L3NwYW4+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9Im1hdC1zZWxlY3QtYXJyb3ctd3JhcHBlciI+PGRpdiBjbGFzcz0ibWF0LXNlbGVjdC1hcnJvdyI+PC9kaXY+PC9kaXY+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlXG4gIGNkay1jb25uZWN0ZWQtb3ZlcmxheVxuICBjZGtDb25uZWN0ZWRPdmVybGF5TG9ja1Bvc2l0aW9uXG4gIGNka0Nvbm5lY3RlZE92ZXJsYXlIYXNCYWNrZHJvcFxuICBjZGtDb25uZWN0ZWRPdmVybGF5QmFja2Ryb3BDbGFzcz0iY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AiXG4gIFtjZGtDb25uZWN0ZWRPdmVybGF5UGFuZWxDbGFzc109Il9vdmVybGF5UGFuZWxDbGFzcyJcbiAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlTY3JvbGxTdHJhdGVneV09Il9zY3JvbGxTdHJhdGVneSJcbiAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlPcmlnaW5dPSJvcmlnaW4iXG4gIFtjZGtDb25uZWN0ZWRPdmVybGF5T3Blbl09InBhbmVsT3BlbiJcbiAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlQb3NpdGlvbnNdPSJfcG9zaXRpb25zIlxuICBbY2RrQ29ubmVjdGVkT3ZlcmxheU1pbldpZHRoXT0iX3RyaWdnZXJSZWN0Py53aWR0aCEiXG4gIFtjZGtDb25uZWN0ZWRPdmVybGF5T2Zmc2V0WV09Il9vZmZzZXRZIlxuICAoYmFja2Ryb3BDbGljayk9ImNsb3NlKCkiXG4gIChhdHRhY2gpPSJfb25BdHRhY2hlZCgpIlxuICAoZGV0YWNoKT0iY2xvc2UoKSI+XG4gIDxkaXYgY2xhc3M9Im1hdC1zZWxlY3QtcGFuZWwtd3JhcCIgW0B0cmFuc2Zvcm1QYW5lbFdyYXBdPlxuICAgIDxkaXZcbiAgICAgICNwYW5lbFxuICAgICAgcm9sZT0ibGlzdGJveCJcbiAgICAgIHRhYmluZGV4PSItMSJcbiAgICAgIGNsYXNzPSJtYXQtc2VsZWN0LXBhbmVsIHt7IF9nZXRQYW5lbFRoZW1lKCkgfX0iXG4gICAgICBbYXR0ci5pZF09ImlkICsgXCctcGFuZWxcJyJcbiAgICAgIFthdHRyLmFyaWEtbXVsdGlzZWxlY3RhYmxlXT0ibXVsdGlwbGUiXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT0iYXJpYUxhYmVsIHx8IG51bGwiXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPSJfZ2V0UGFuZWxBcmlhTGFiZWxsZWRieSgpIlxuICAgICAgW25nQ2xhc3NdPSJwYW5lbENsYXNzIlxuICAgICAgW0B0cmFuc2Zvcm1QYW5lbF09Im11bHRpcGxlID8gXCdzaG93aW5nLW11bHRpcGxlXCcgOiBcJ3Nob3dpbmdcJyJcbiAgICAgIChAdHJhbnNmb3JtUGFuZWwuZG9uZSk9Il9wYW5lbERvbmVBbmltYXRpbmdTdHJlYW0ubmV4dCgkZXZlbnQudG9TdGF0ZSkiXG4gICAgICBbc3R5bGUudHJhbnNmb3JtT3JpZ2luXT0iX3RyYW5zZm9ybU9yaWdpbiJcbiAgICAgIFtzdHlsZS5mb250LXNpemUucHhdPSJfdHJpZ2dlckZvbnRTaXplIlxuICAgICAgKGtleWRvd24pPSJfaGFuZGxlS2V5ZG93bigkZXZlbnQpIj5cbiAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuJyxpbnB1dHM6WyJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCJdLGVuY2Fwc3VsYXRpb246UG8uTm9uZSxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNoLGhvc3Q6e3JvbGU6ImNvbWJvYm94IiwiYXJpYS1hdXRvY29tcGxldGUiOiJub25lIiwiYXJpYS1oYXNwb3B1cCI6InRydWUiLGNsYXNzOiJtYXQtc2VsZWN0IiwiW2F0dHIuaWRdIjoiaWQiLCJbYXR0ci50YWJpbmRleF0iOiJ0YWJJbmRleCIsIlthdHRyLmFyaWEtY29udHJvbHNdIjoncGFuZWxPcGVuID8gaWQgKyAiLXBhbmVsIiA6IG51bGwnLCJbYXR0ci5hcmlhLWV4cGFuZGVkXSI6InBhbmVsT3BlbiIsIlthdHRyLmFyaWEtbGFiZWxdIjoiYXJpYUxhYmVsIHx8IG51bGwiLCJbYXR0ci5hcmlhLXJlcXVpcmVkXSI6InJlcXVpcmVkLnRvU3RyaW5nKCkiLCJbYXR0ci5hcmlhLWRpc2FibGVkXSI6ImRpc2FibGVkLnRvU3RyaW5nKCkiLCJbYXR0ci5hcmlhLWludmFsaWRdIjoiZXJyb3JTdGF0ZSIsIlthdHRyLmFyaWEtZGVzY3JpYmVkYnldIjoiX2FyaWFEZXNjcmliZWRieSB8fCBudWxsIiwiW2F0dHIuYXJpYS1hY3RpdmVkZXNjZW5kYW50XSI6Il9nZXRBcmlhQWN0aXZlRGVzY2VuZGFudCgpIiwiW2NsYXNzLm1hdC1zZWxlY3QtZGlzYWJsZWRdIjoiZGlzYWJsZWQiLCJbY2xhc3MubWF0LXNlbGVjdC1pbnZhbGlkXSI6ImVycm9yU3RhdGUiLCJbY2xhc3MubWF0LXNlbGVjdC1yZXF1aXJlZF0iOiJyZXF1aXJlZCIsIltjbGFzcy5tYXQtc2VsZWN0LWVtcHR5XSI6ImVtcHR5IiwiW2NsYXNzLm1hdC1zZWxlY3QtbXVsdGlwbGVdIjoibXVsdGlwbGUiLCIoa2V5ZG93bikiOiJfaGFuZGxlS2V5ZG93bigkZXZlbnQpIiwiKGZvY3VzKSI6Il9vbkZvY3VzKCkiLCIoYmx1cikiOiJfb25CbHVyKCkifSxhbmltYXRpb25zOltRVS50cmFuc2Zvcm1QYW5lbFdyYXAsUVUudHJhbnNmb3JtUGFuZWxdLHByb3ZpZGVyczpbe3Byb3ZpZGU6aVYsdXNlRXhpc3Rpbmc6ZFd9LHtwcm92aWRlOmdILHVzZUV4aXN0aW5nOmRXfV0sc3R5bGVzOlsnLm1hdC1zZWxlY3R7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MTAwJTtvdXRsaW5lOm5vbmV9Lm1hdC1zZWxlY3QtdHJpZ2dlcntkaXNwbGF5OmlubGluZS10YWJsZTtjdXJzb3I6cG9pbnRlcjtwb3NpdGlvbjpyZWxhdGl2ZTtib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1zZWxlY3QtZGlzYWJsZWQgLm1hdC1zZWxlY3QtdHJpZ2dlcnstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1zZWxlY3QtdmFsdWV7ZGlzcGxheTp0YWJsZS1jZWxsO21heC13aWR0aDowO3dpZHRoOjEwMCU7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwfS5tYXQtc2VsZWN0LXZhbHVlLXRleHR7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS5tYXQtc2VsZWN0LWFycm93LXdyYXBwZXJ7ZGlzcGxheTp0YWJsZS1jZWxsO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtc2VsZWN0LWFycm93LXdyYXBwZXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LXNlbGVjdC1hcnJvdy13cmFwcGVye3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0yNSUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkLm1hdC1mb3JtLWZpZWxkLWhhcy1sYWJlbCAubWF0LXNlbGVjdDpub3QoLm1hdC1zZWxlY3QtZW1wdHkpIC5tYXQtc2VsZWN0LWFycm93LXdyYXBwZXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1zZWxlY3QubWF0LXNlbGVjdC1lbXB0eSAubWF0LXNlbGVjdC1hcnJvdy13cmFwcGVye3RyYW5zaXRpb246dHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtc2VsZWN0Lm1hdC1zZWxlY3QtZW1wdHkgLm1hdC1zZWxlY3QtYXJyb3ctd3JhcHBlcnt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1zZWxlY3QtYXJyb3d7d2lkdGg6MDtoZWlnaHQ6MDtib3JkZXItbGVmdDo1cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0OjVweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItdG9wOjVweCBzb2xpZDttYXJnaW46MCA0cHh9Lm1hdC1zZWxlY3QtcGFuZWwtd3JhcHtmbGV4LWJhc2lzOjEwMCV9Lm1hdC1zZWxlY3QtcGFuZWx7bWluLXdpZHRoOjExMnB4O21heC13aWR0aDoyODBweDtvdmVyZmxvdzphdXRvOy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNoO3BhZGRpbmctdG9wOjA7cGFkZGluZy1ib3R0b206MDttYXgtaGVpZ2h0OjI1NnB4O21pbi13aWR0aDoxMDAlO2JvcmRlci1yYWRpdXM6NHB4O291dGxpbmU6MH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc2VsZWN0LXBhbmVse291dGxpbmU6c29saWQgMXB4fS5tYXQtc2VsZWN0LXBhbmVsIC5tYXQtb3B0Z3JvdXAtbGFiZWwsLm1hdC1zZWxlY3QtcGFuZWwgLm1hdC1vcHRpb257Zm9udC1zaXplOmluaGVyaXQ7bGluZS1oZWlnaHQ6M2VtO2hlaWdodDozZW19Lm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LXNlbGVjdDpub3QoLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkKSAubWF0LWZvcm0tZmllbGQtZmxleHtjdXJzb3I6cG9pbnRlcn0ubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtc2VsZWN0IC5tYXQtZm9ybS1maWVsZC1sYWJlbHt3aWR0aDpjYWxjKDEwMCUgLSAxOHB4KX0ubWF0LXNlbGVjdC1wbGFjZWhvbGRlcnt0cmFuc2l0aW9uOmNvbG9yIDQwMG1zIDEzMy4zMzMzMzMzMzMzbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtc2VsZWN0LXBsYWNlaG9sZGVye3RyYW5zaXRpb246bm9uZX0ubWF0LWZvcm0tZmllbGQtaGlkZS1wbGFjZWhvbGRlciAubWF0LXNlbGVjdC1wbGFjZWhvbGRlcntjb2xvcjp0cmFuc3BhcmVudDstd2Via2l0LXRleHQtZmlsbC1jb2xvcjp0cmFuc3BhcmVudDt0cmFuc2l0aW9uOm5vbmU7ZGlzcGxheTpibG9ja30ubWF0LXNlbGVjdC1taW4tbGluZTplbXB0eTo6YmVmb3Jle2NvbnRlbnQ6IiAiO3doaXRlLXNwYWNlOnByZTt3aWR0aDoxcHh9XG4nXX1dfV0sbnVsbCx7b3B0aW9uczpbe3R5cGU6enIsYXJnczpbUEgse2Rlc2NlbmRhbnRzOiEwfV19XSxvcHRpb25Hcm91cHM6W3t0eXBlOnpyLGFyZ3M6W19ILHtkZXNjZW5kYW50czohMH1dfV0sY3VzdG9tVHJpZ2dlcjpbe3R5cGU6SHIsYXJnczpbc1ddfV19KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIG1Xe31mdW5jdGlvbiB1Vyh0LGUpe2lmKDEmdCl7Y29uc3QgdD1FdSgpO091KDAsInNwYW4iLDUpLE51KCJjbGljayIsKGZ1bmN0aW9uIGUobil7cmEodCk7Y29uc3Qgbz1MdSgpLiRpbXBsaWNpdDtyZXR1cm4gTHUoKS5vbkFjdGl2ZVBsdWdpblNlbGVjdGlvbihuLG8uaWQpfSkpLE1mKDEpLFB1KCl9aWYoMiZ0KXtjb25zdCB0PUx1KCkuJGltcGxpY2l0O05tKCJkYXRhLXBsdWdpbi1pZCIsdC5pZCksSmMoMSkseGYoIiAiLHQudGFiX25hbWUsIiAiKX19ZnVuY3Rpb24gZlcodCxlKXsxJnQmJihPdSgwLCJtYXQtdGFiIiwzKSxXbSgxLHVXLDIsMiwibmctdGVtcGxhdGUiLDQpLFB1KCkpLDImdCYmdnUoImRpc2FibGVkIiwhZS4kaW1wbGljaXQuZW5hYmxlZCl9ZnVuY3Rpb24gZ1codCxlKXtpZigxJnQmJihPdSgwLCJtYXQtb3B0aW9uIiw5KSxNZigxKSxQdSgpKSwyJnQpe2NvbnN0IHQ9ZS4kaW1wbGljaXQ7dnUoInZhbHVlIix0LmlkKSxObSgiZGF0YS1wbHVnaW4taWQiLHQuaWQpLEpjKDEpLHhmKCIgIix0LnRhYl9uYW1lLCIgIil9fWZ1bmN0aW9uIGhXKHQsZSl7aWYoMSZ0KXtjb25zdCB0PUV1KCk7T3UoMCwibWF0LWZvcm0tZmllbGQiLDYpLE91KDEsIm1hdC1sYWJlbCIpLE1mKDIsIkluYWN0aXZlIiksUHUoKSxPdSgzLCJtYXQtc2VsZWN0Iiw3KSxOdSgic2VsZWN0aW9uQ2hhbmdlIiwoZnVuY3Rpb24gZShuKXtyZXR1cm4gcmEodCksTHUoKS5vbkRpc2FibGVkUGx1Z2luU2VsZWN0aW9uQ2hhbmdlZChuKX0pKSxXbSg0LGdXLDIsMywibWF0LW9wdGlvbiIsOCksUHUoKSxQdSgpfWlmKDImdCl7Y29uc3QgdD1MdSgpO0pjKDMpLHZ1KCJ2YWx1ZSIsdC5zZWxlY3RlZFBsdWdpbiksSmMoMSksdnUoIm5nRm9yT2YiLHQuZGlzYWJsZWRQbHVnaW5zKX19bVcuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fG1XKX0sbVcuybVtb2Q9Wm8oe3R5cGU6bVd9KSxtVy7JtWluaj1jbyh7cHJvdmlkZXJzOltvV10saW1wb3J0czpbW0J2LGlMLFNILFR6XSxvRixDVixTSCxUel19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKG1XLHtkZWNsYXJhdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm5bZFcsbFddfSxpbXBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW0J2LGlMLFNILFR6XX0sZXhwb3J0czpmdW5jdGlvbigpe3JldHVybltvRixDVixkVyxsVyxTSCxUel19fSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihtVyxbe3R5cGU6a18sYXJnczpbe2ltcG9ydHM6W0J2LGlMLFNILFR6XSxleHBvcnRzOltvRixDVixkVyxsVyxTSCxUel0sZGVjbGFyYXRpb25zOltkVyxsV10scHJvdmlkZXJzOltvV119XX1dLG51bGwsbnVsbCk7Y2xhc3MgYld7Y29uc3RydWN0b3IoKXt0aGlzLm9uUGx1Z2luU2VsZWN0aW9uQ2hhbmdlZD1uZXcgQWJ9Z2V0QWN0aXZlUGx1Z2luSW5kZXgoKXtyZXR1cm4gdGhpcy5hY3RpdmVQbHVnaW5zLmZpbmRJbmRleCgoKHtpZDp0fSk9PnQ9PT10aGlzLnNlbGVjdGVkUGx1Z2luKSl9b25BY3RpdmVQbHVnaW5TZWxlY3Rpb24odCxlKXt0LnN0b3BQcm9wYWdhdGlvbigpLHRoaXMub25QbHVnaW5TZWxlY3Rpb25DaGFuZ2VkLmVtaXQoZSl9b25EaXNhYmxlZFBsdWdpblNlbGVjdGlvbkNoYW5nZWQodCl7dGhpcy5vblBsdWdpblNlbGVjdGlvbkNoYW5nZWQuZW1pdCh0LnZhbHVlKX19YlcuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGJXKX0sYlcuybVjbXA9VW8oe3R5cGU6Ylcsc2VsZWN0b3JzOltbInBsdWdpbi1zZWxlY3Rvci1jb21wb25lbnQiXV0saW5wdXRzOnthY3RpdmVQbHVnaW5zOiJhY3RpdmVQbHVnaW5zIixkaXNhYmxlZFBsdWdpbnM6ImRpc2FibGVkUGx1Z2lucyIsc2VsZWN0ZWRQbHVnaW46InNlbGVjdGVkUGx1Z2luIn0sb3V0cHV0czp7b25QbHVnaW5TZWxlY3Rpb25DaGFuZ2VkOiJvblBsdWdpblNlbGVjdGlvbkNoYW5nZWQifSxkZWNsczozLHZhcnM6Myxjb25zdHM6W1siYW5pbWF0aW9uRHVyYXRpb24iLCIxMDBtcyIsMSwiYWN0aXZlLXBsdWdpbi1saXN0IiwzLCJzZWxlY3RlZEluZGV4Il0sWzMsImRpc2FibGVkIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImZsb2F0TGFiZWwiLCJuZXZlciIsNCwibmdJZiJdLFszLCJkaXNhYmxlZCJdLFsibWF0LXRhYi1sYWJlbCIsIiJdLFsxLCJwbHVnaW4tbmFtZSIsMywiY2xpY2siXSxbImZsb2F0TGFiZWwiLCJuZXZlciJdLFszLCJ2YWx1ZSIsInNlbGVjdGlvbkNoYW5nZSJdLFszLCJ2YWx1ZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsInZhbHVlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihPdSgwLCJtYXQtdGFiLWdyb3VwIiwwKSxXbSgxLGZXLDIsMSwibWF0LXRhYiIsMSksUHUoKSxXbSgyLGhXLDUsMiwibWF0LWZvcm0tZmllbGQiLDIpKSwyJmUmJih2dSgic2VsZWN0ZWRJbmRleCIsbi5nZXRBY3RpdmVQbHVnaW5JbmRleCgpKSxKYygxKSx2dSgibmdGb3JPZiIsbi5hY3RpdmVQbHVnaW5zKSxKYygxKSx2dSgibmdJZiIsbi5kaXNhYmxlZFBsdWdpbnMubGVuZ3RoPjApKX0sZGlyZWN0aXZlczpbUEIsb3YsYXYsZ0IscEIsX1YsY1YsZFcsUEhdLHN0eWxlczpbJy5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHh9Lm1hdC1oMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaGVhZGxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTVweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZ1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjA1ZW07bWFyZ2luOjAgMCA1NnB4fS5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAwNWVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXJhaXNlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdHJva2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmxhdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZhYltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbWluaS1mYWJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4fS5tYXQtY2FyZC1zdWJ0aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGVja2JveC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvb3Rlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgdHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIzZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LjU0MTY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2NjY2NjY3ZW0pfUBtZWRpYSBwcmludHsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjJlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouMjVlbSAwIC43NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxZW0gMCAxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMiksIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi0wLjA2MjVlbX0ubWF0LW1lbnUtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci12ZXJ0aWNhbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGFiLWxpbmtbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MH0ubWF0LXRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5Om5vbmV9LmNkay12aXN1YWxseS1oaWRkZW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjZ9LmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV0sIC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3hbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2tbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHt9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7fS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOi13ZWJraXQtYXV0b2ZpbGwpe2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZVtfbmdjb250ZW50LSVDT01QJV17cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fS5tYXQtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfVtfbmdob3N0LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4OjEgMSBhdXRvO2ZvbnQtc2l6ZToxNHB4O2hlaWdodDoxMDAlO292ZXJmbG93OmhpZGRlbn1tYXQtZm9ybS1maWVsZFtfbmdjb250ZW50LSVDT01QJV17ZmxleDowIDA7bWFyZ2luLXRvcDo1cHg7d2lkdGg6MTMwcHh9bWF0LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgbWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV0sIG1hdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjUwMDt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9LmFjdGl2ZS1wbHVnaW4tbGlzdFtfbmdjb250ZW50LSVDT01QJV17YWxpZ24tc2VsZjpzdHJldGNoO2ZsZXg6MSAxIGF1dG87b3ZlcmZsb3c6aGlkZGVufS5wbHVnaW4tbmFtZVtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6aW5saW5lLWZsZXg7aGVpZ2h0OjEwMCU7anVzdGlmeS1jb250ZW50OmNlbnRlcjtwYWRkaW5nOjAgMTJweDt3aWR0aDoxMDAlfVtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QubWF0LXByaW1hcnkgLm1hdC10YWItbGlzdCAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3J9W19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCAubWF0LXRhYi1sYWJlbCwgW19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCAubWF0LXRhYi1saW5re2NvbG9yOmluaGVyaXQ7b3BhY2l0eTouN31bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IC5tYXQtdGFiLWxhYmVsLm1hdC10YWItbGFiZWwtYWN0aXZlLCBbX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IC5tYXQtdGFiLWxpbmsubWF0LXRhYi1sYWJlbC1hY3RpdmV7b3BhY2l0eToxfVtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6Y3VycmVudENvbG9yfVtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWR7dmlzaWJpbGl0eTpoaWRkZW59W19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCAubWF0LXRhYi1kaXNhYmxlZHtkaXNwbGF5Om5vbmV9W19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCAubWF0LXRhYi1oZWFkZXIsIFtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgLm1hdC10YWItbGFiZWxzLCBbX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IC5tYXQtdGFiLWxhYmVse2hlaWdodDoxMDAlfVtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgLm1hdC10YWItbGFiZWx7bWluLXdpZHRoOjQ4cHg7cGFkZGluZzowO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX1bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IC5tYXQtdGFiLWxhYmVsLWNvbnRlbnR7aGVpZ2h0OjEwMCV9W19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCBtYXQtdGFiLWhlYWRlciAubWF0LXRhYi1saXN0e3BhZGRpbmc6MCAzNnB4fVtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgbWF0LXRhYi1oZWFkZXI+OmZpcnN0LWNoaWxkLCBbX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IG1hdC10YWItaGVhZGVyPi5tYXQtdGFiLWxhYmVsLWNvbnRhaW5lciwgW19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCBtYXQtdGFiLWhlYWRlcj46bGFzdC1jaGlsZHtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MH1bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IG1hdC10YWItaGVhZGVyPjpmaXJzdC1jaGlsZCwgW19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCBtYXQtdGFiLWhlYWRlcj4ubWF0LXRhYi1sYWJlbC1jb250YWluZXJ7bGVmdDowfVtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgbWF0LXRhYi1oZWFkZXI+Omxhc3QtY2hpbGQsIFtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgbWF0LXRhYi1oZWFkZXI+Lm1hdC10YWItbGFiZWwtY29udGFpbmVye3JpZ2h0OjB9W19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCBtYXQtdGFiLWhlYWRlcj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbntiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IG1hdC10YWItaGVhZGVyPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9ue2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH0nXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoYlcsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoicGx1Z2luLXNlbGVjdG9yLWNvbXBvbmVudCIsdGVtcGxhdGVVcmw6Ii4vcGx1Z2luX3NlbGVjdG9yX2NvbXBvbmVudC5uZy5odG1sIixzdHlsZVVybHM6WyIuL3BsdWdpbl9zZWxlY3Rvcl9jb21wb25lbnQuY3NzIl19XX1dLG51bGwse2FjdGl2ZVBsdWdpbnM6W3t0eXBlOnlffV0sZGlzYWJsZWRQbHVnaW5zOlt7dHlwZTp5X31dLHNlbGVjdGVkUGx1Z2luOlt7dHlwZTp5X31dLG9uUGx1Z2luU2VsZWN0aW9uQ2hhbmdlZDpbe3R5cGU6X199XX0pO2NvbnN0IHlXPXprKHBBLCh0PT5PYmplY3Qua2V5cyh0KS5tYXAoKGU9Pk9iamVjdC5hc3NpZ24oe30se2lkOmV9LHRbZV0pKSkpKSxfVz16ayh5VywodD0+dC5maWx0ZXIoKHQ9PiF0LmVuYWJsZWQpKSkpO2NsYXNzIENXe2NvbnN0cnVjdG9yKHQpe3RoaXMuc3RvcmU9dCx0aGlzLmFjdGl2ZVBsdWdpbiQ9dGhpcy5zdG9yZS5waXBlKFJrKGRBKSksdGhpcy5wbHVnaW5zJD10aGlzLnN0b3JlLnBpcGUoUmsoeVcpKSx0aGlzLmRpc2FibGVkUGx1Z2lucyQ9dGhpcy5zdG9yZS5waXBlKFJrKF9XKSl9b25QbHVnaW5TZWxlY3Rpb25DaGFuZ2UodCl7dGhpcy5zdG9yZS5kaXNwYXRjaChWRSh7cGx1Z2luOnR9KSl9fWZ1bmN0aW9uIE1XKHQsZSl7fUNXLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxDVykoTXUoRWspKX0sQ1cuybVjbXA9VW8oe3R5cGU6Q1csc2VsZWN0b3JzOltbInBsdWdpbi1zZWxlY3RvciJdXSxkZWNsczo0LHZhcnM6OSxjb25zdHM6W1szLCJhY3RpdmVQbHVnaW5zIiwiZGlzYWJsZWRQbHVnaW5zIiwic2VsZWN0ZWRQbHVnaW4iLCJvblBsdWdpblNlbGVjdGlvbkNoYW5nZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKE91KDAsInBsdWdpbi1zZWxlY3Rvci1jb21wb25lbnQiLDApLE51KCJvblBsdWdpblNlbGVjdGlvbkNoYW5nZWQiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLm9uUGx1Z2luU2VsZWN0aW9uQ2hhbmdlKGUpfSkpLE9iKDEsImFzeW5jIiksT2IoMiwiYXN5bmMiKSxPYigzLCJhc3luYyIpLFB1KCkpLDImZSYmdnUoImFjdGl2ZVBsdWdpbnMiLFBiKDEsMyxuLnBsdWdpbnMkKSkoImRpc2FibGVkUGx1Z2lucyIsUGIoMiw1LG4uZGlzYWJsZWRQbHVnaW5zJCkpKCJzZWxlY3RlZFBsdWdpbiIsUGIoMyw3LG4uYWN0aXZlUGx1Z2luJCkpfSxkaXJlY3RpdmVzOltiV10scGlwZXM6W012XSxlbmNhcHN1bGF0aW9uOjJ9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKENXLFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6InBsdWdpbi1zZWxlY3RvciIsdGVtcGxhdGU6J1xuICAgIDxwbHVnaW4tc2VsZWN0b3ItY29tcG9uZW50XG4gICAgICBbYWN0aXZlUGx1Z2luc109InBsdWdpbnMkIHwgYXN5bmMiXG4gICAgICBbZGlzYWJsZWRQbHVnaW5zXT0iZGlzYWJsZWRQbHVnaW5zJCB8IGFzeW5jIlxuICAgICAgW3NlbGVjdGVkUGx1Z2luXT0iYWN0aXZlUGx1Z2luJCB8IGFzeW5jIlxuICAgICAgKG9uUGx1Z2luU2VsZWN0aW9uQ2hhbmdlZCk9Im9uUGx1Z2luU2VsZWN0aW9uQ2hhbmdlKCRldmVudCkiXG4gICAgPjwvcGx1Z2luLXNlbGVjdG9yLWNvbXBvbmVudD5cbiAgJ31dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkVrfV19KSxudWxsKTtjbGFzcyB2V3tjb25zdHJ1Y3Rvcigpe3RoaXMucm9sZT0iZGlhbG9nIix0aGlzLnBhbmVsQ2xhc3M9IiIsdGhpcy5oYXNCYWNrZHJvcD0hMCx0aGlzLmJhY2tkcm9wQ2xhc3M9IiIsdGhpcy5kaXNhYmxlQ2xvc2U9ITEsdGhpcy53aWR0aD0iIix0aGlzLmhlaWdodD0iIix0aGlzLm1heFdpZHRoPSI4MHZ3Iix0aGlzLmRhdGE9bnVsbCx0aGlzLmFyaWFEZXNjcmliZWRCeT1udWxsLHRoaXMuYXJpYUxhYmVsbGVkQnk9bnVsbCx0aGlzLmFyaWFMYWJlbD1udWxsLHRoaXMuYXV0b0ZvY3VzPSEwLHRoaXMucmVzdG9yZUZvY3VzPSEwLHRoaXMuY2xvc2VPbk5hdmlnYXRpb249ITB9fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jb25zdCB4Vz17ZGlhbG9nQ29udGFpbmVyOkt4KCJkaWFsb2dDb250YWluZXIiLFt0Tygidm9pZCwgZXhpdCIsJHgoe29wYWNpdHk6MCx0cmFuc2Zvcm06InNjYWxlKDAuNykifSkpLHRPKCJlbnRlciIsJHgoe3RyYW5zZm9ybToibm9uZSJ9KSksbk8oIiogPT4gZW50ZXIiLEp4KCIxNTBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKSIsJHgoe3RyYW5zZm9ybToibm9uZSIsb3BhY2l0eToxfSkpKSxuTygiKiA9PiB2b2lkLCAqID0+IGV4aXQiLEp4KCI3NW1zIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKSIsJHgoe29wYWNpdHk6MH0pKSldKX07Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIE9XKCl7dGhyb3cgRXJyb3IoIkF0dGVtcHRpbmcgdG8gYXR0YWNoIGRpYWxvZyBjb250ZW50IGFmdGVyIGNvbnRlbnQgaXMgYWxyZWFkeSBhdHRhY2hlZCIpfWNsYXNzIFBXIGV4dGVuZHMgZEZ7Y29uc3RydWN0b3IodCxlLG4sbyxpLGEpe3N1cGVyKCksdGhpcy5fZWxlbWVudFJlZj10LHRoaXMuX2ZvY3VzVHJhcEZhY3Rvcnk9ZSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1uLHRoaXMuX2NvbmZpZz1pLHRoaXMuX2ZvY3VzTW9uaXRvcj1hLHRoaXMuX2FuaW1hdGlvblN0YXRlQ2hhbmdlZD1uZXcgQWIsdGhpcy5fZWxlbWVudEZvY3VzZWRCZWZvcmVEaWFsb2dXYXNPcGVuZWQ9bnVsbCx0aGlzLl9jbG9zZUludGVyYWN0aW9uVHlwZT1udWxsLHRoaXMuYXR0YWNoRG9tUG9ydGFsPXQ9Pih0aGlzLl9wb3J0YWxPdXRsZXQuaGFzQXR0YWNoZWQoKSYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZPVygpLHRoaXMuX3BvcnRhbE91dGxldC5hdHRhY2hEb21Qb3J0YWwodCkpLHRoaXMuX2FyaWFMYWJlbGxlZEJ5PWkuYXJpYUxhYmVsbGVkQnl8fG51bGwsdGhpcy5fZG9jdW1lbnQ9b31faW5pdGlhbGl6ZVdpdGhBdHRhY2hlZENvbnRlbnQoKXt0aGlzLl9zZXR1cEZvY3VzVHJhcCgpLHRoaXMuX2NhcHR1cmVQcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQoKSx0aGlzLl9mb2N1c0RpYWxvZ0NvbnRhaW5lcigpfWF0dGFjaENvbXBvbmVudFBvcnRhbCh0KXtyZXR1cm4gdGhpcy5fcG9ydGFsT3V0bGV0Lmhhc0F0dGFjaGVkKCkmJigidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmT1coKSx0aGlzLl9wb3J0YWxPdXRsZXQuYXR0YWNoQ29tcG9uZW50UG9ydGFsKHQpfWF0dGFjaFRlbXBsYXRlUG9ydGFsKHQpe3JldHVybiB0aGlzLl9wb3J0YWxPdXRsZXQuaGFzQXR0YWNoZWQoKSYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZPVygpLHRoaXMuX3BvcnRhbE91dGxldC5hdHRhY2hUZW1wbGF0ZVBvcnRhbCh0KX1fcmVjYXB0dXJlRm9jdXMoKXt0aGlzLl9jb250YWluc0ZvY3VzKCl8fCghdGhpcy5fY29uZmlnLmF1dG9Gb2N1c3x8IXRoaXMuX2ZvY3VzVHJhcC5mb2N1c0luaXRpYWxFbGVtZW50KCkpJiZ0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKX1fdHJhcEZvY3VzKCl7dGhpcy5fY29uZmlnLmF1dG9Gb2N1cz90aGlzLl9mb2N1c1RyYXAuZm9jdXNJbml0aWFsRWxlbWVudFdoZW5SZWFkeSgpOnRoaXMuX2NvbnRhaW5zRm9jdXMoKXx8dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCl9X3Jlc3RvcmVGb2N1cygpe2NvbnN0IHQ9dGhpcy5fZWxlbWVudEZvY3VzZWRCZWZvcmVEaWFsb2dXYXNPcGVuZWQ7aWYodGhpcy5fY29uZmlnLnJlc3RvcmVGb2N1cyYmdCYmImZ1bmN0aW9uIj09dHlwZW9mIHQuZm9jdXMpe2NvbnN0IGU9dGhpcy5fZ2V0QWN0aXZlRWxlbWVudCgpLG49dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O2UmJmUhPT10aGlzLl9kb2N1bWVudC5ib2R5JiZlIT09biYmIW4uY29udGFpbnMoZSl8fCh0aGlzLl9mb2N1c01vbml0b3I/KHRoaXMuX2ZvY3VzTW9uaXRvci5mb2N1c1ZpYSh0LHRoaXMuX2Nsb3NlSW50ZXJhY3Rpb25UeXBlKSx0aGlzLl9jbG9zZUludGVyYWN0aW9uVHlwZT1udWxsKTp0LmZvY3VzKCkpfXRoaXMuX2ZvY3VzVHJhcCYmdGhpcy5fZm9jdXNUcmFwLmRlc3Ryb3koKX1fc2V0dXBGb2N1c1RyYXAoKXt0aGlzLl9mb2N1c1RyYXA9dGhpcy5fZm9jdXNUcmFwRmFjdG9yeS5jcmVhdGUodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KX1fY2FwdHVyZVByZXZpb3VzbHlGb2N1c2VkRWxlbWVudCgpe3RoaXMuX2RvY3VtZW50JiYodGhpcy5fZWxlbWVudEZvY3VzZWRCZWZvcmVEaWFsb2dXYXNPcGVuZWQ9dGhpcy5fZ2V0QWN0aXZlRWxlbWVudCgpKX1fZm9jdXNEaWFsb2dDb250YWluZXIoKXt0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMmJnRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpfV9jb250YWluc0ZvY3VzKCl7Y29uc3QgdD10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsZT10aGlzLl9nZXRBY3RpdmVFbGVtZW50KCk7cmV0dXJuIHQ9PT1lfHx0LmNvbnRhaW5zKGUpfV9nZXRBY3RpdmVFbGVtZW50KCl7dmFyIHQ7Y29uc3QgZT10aGlzLl9kb2N1bWVudC5hY3RpdmVFbGVtZW50O3JldHVybihudWxsPT09KHQ9bnVsbD09ZT92b2lkIDA6ZS5zaGFkb3dSb290KXx8dm9pZCAwPT09dD92b2lkIDA6dC5hY3RpdmVFbGVtZW50KXx8ZX19UFcuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFBXKShNdShjaCksTXUoWUkpLE11KEhoKSxNdShVQyw4KSxNdSh2VyksTXUocHopKX0sUFcuybVkaXI9Sm8oe3R5cGU6UFcsdmlld1F1ZXJ5OmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJldiKGdGLDMpLDImZSl7bGV0IHQ7VWIodD1ZYigpKSYmKG4uX3BvcnRhbE91dGxldD10LmZpcnN0KX19LGZlYXR1cmVzOltnbV19KSxQVy5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmNofSx7dHlwZTpZSX0se3R5cGU6SGh9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbVUNdfV19LHt0eXBlOnZXfSx7dHlwZTpwen1dLFBXLnByb3BEZWNvcmF0b3JzPXtfcG9ydGFsT3V0bGV0Olt7dHlwZTpGcixhcmdzOltnRix7c3RhdGljOiEwfV19XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihQVyxbe3R5cGU6Z199XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Y2h9LHt0eXBlOllJfSx7dHlwZTpIaH0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltVQ119XX0se3R5cGU6dld9LHt0eXBlOnB6fV19KSx7X3BvcnRhbE91dGxldDpbe3R5cGU6RnIsYXJnczpbZ0Yse3N0YXRpYzohMH1dfV19KTtjbGFzcyB3VyBleHRlbmRzIFBXe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9zdGF0ZT0iZW50ZXIifV9vbkFuaW1hdGlvbkRvbmUoe3RvU3RhdGU6dCx0b3RhbFRpbWU6ZX0peyJlbnRlciI9PT10Pyh0aGlzLl90cmFwRm9jdXMoKSx0aGlzLl9hbmltYXRpb25TdGF0ZUNoYW5nZWQubmV4dCh7c3RhdGU6Im9wZW5lZCIsdG90YWxUaW1lOmV9KSk6ImV4aXQiPT09dCYmKHRoaXMuX3Jlc3RvcmVGb2N1cygpLHRoaXMuX2FuaW1hdGlvblN0YXRlQ2hhbmdlZC5uZXh0KHtzdGF0ZToiY2xvc2VkIix0b3RhbFRpbWU6ZX0pKX1fb25BbmltYXRpb25TdGFydCh7dG9TdGF0ZTp0LHRvdGFsVGltZTplfSl7ImVudGVyIj09PXQ/dGhpcy5fYW5pbWF0aW9uU3RhdGVDaGFuZ2VkLm5leHQoe3N0YXRlOiJvcGVuaW5nIix0b3RhbFRpbWU6ZX0pOiJleGl0IiE9PXQmJiJ2b2lkIiE9PXR8fHRoaXMuX2FuaW1hdGlvblN0YXRlQ2hhbmdlZC5uZXh0KHtzdGF0ZToiY2xvc2luZyIsdG90YWxUaW1lOmV9KX1fc3RhcnRFeGl0QW5pbWF0aW9uKCl7dGhpcy5fc3RhdGU9ImV4aXQiLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfX13Vy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBrVyhlfHx3Vyl9LHdXLsm1Y21wPVVvKHt0eXBlOndXLHNlbGVjdG9yczpbWyJtYXQtZGlhbG9nLWNvbnRhaW5lciJdXSxob3N0QXR0cnM6WyJ0YWJpbmRleCIsIi0xIiwiYXJpYS1tb2RhbCIsInRydWUiLDEsIm1hdC1kaWFsb2ctY29udGFpbmVyIl0saG9zdFZhcnM6Nixob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezEmZSYmSXUoIkBkaWFsb2dDb250YWluZXIuc3RhcnQiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLl9vbkFuaW1hdGlvblN0YXJ0KGUpfSkpKCJAZGlhbG9nQ29udGFpbmVyLmRvbmUiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLl9vbkFuaW1hdGlvbkRvbmUoZSl9KSksMiZlJiYoa2YoImlkIixuLl9pZCksTm0oInJvbGUiLG4uX2NvbmZpZy5yb2xlKSgiYXJpYS1sYWJlbGxlZGJ5IixuLl9jb25maWcuYXJpYUxhYmVsP251bGw6bi5fYXJpYUxhYmVsbGVkQnkpKCJhcmlhLWxhYmVsIixuLl9jb25maWcuYXJpYUxhYmVsKSgiYXJpYS1kZXNjcmliZWRieSIsbi5fY29uZmlnLmFyaWFEZXNjcmliZWRCeXx8bnVsbCksU2YoIkBkaWFsb2dDb250YWluZXIiLG4uX3N0YXRlKSl9LGZlYXR1cmVzOltnbV0sZGVjbHM6MSx2YXJzOjAsY29uc3RzOltbImNka1BvcnRhbE91dGxldCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiZXbSgwLE1XLDAsMCwibmctdGVtcGxhdGUiLDApfSxkaXJlY3RpdmVzOltnRl0sc3R5bGVzOlsiLm1hdC1kaWFsb2ctY29udGFpbmVye2Rpc3BsYXk6YmxvY2s7cGFkZGluZzoyNHB4O2JvcmRlci1yYWRpdXM6NHB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdzphdXRvO291dGxpbmU6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO21pbi1oZWlnaHQ6aW5oZXJpdDttYXgtaGVpZ2h0OmluaGVyaXR9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWRpYWxvZy1jb250YWluZXJ7b3V0bGluZTpzb2xpZCAxcHh9Lm1hdC1kaWFsb2ctY29udGVudHtkaXNwbGF5OmJsb2NrO21hcmdpbjowIC0yNHB4O3BhZGRpbmc6MCAyNHB4O21heC1oZWlnaHQ6NjV2aDtvdmVyZmxvdzphdXRvOy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNofS5tYXQtZGlhbG9nLXRpdGxle21hcmdpbjowIDAgMjBweDtkaXNwbGF5OmJsb2NrfS5tYXQtZGlhbG9nLWFjdGlvbnN7cGFkZGluZzo4cHggMDtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7bWluLWhlaWdodDo1MnB4O2FsaWduLWl0ZW1zOmNlbnRlcjtib3gtc2l6aW5nOmNvbnRlbnQtYm94O21hcmdpbi1ib3R0b206LTI0cHh9Lm1hdC1kaWFsb2ctYWN0aW9uc1thbGlnbj1lbmRde2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0ubWF0LWRpYWxvZy1hY3Rpb25zW2FsaWduPWNlbnRlcl17anVzdGlmeS1jb250ZW50OmNlbnRlcn0ubWF0LWRpYWxvZy1hY3Rpb25zIC5tYXQtYnV0dG9uLWJhc2UrLm1hdC1idXR0b24tYmFzZSwubWF0LWRpYWxvZy1hY3Rpb25zIC5tYXQtbWRjLWJ1dHRvbi1iYXNlKy5tYXQtbWRjLWJ1dHRvbi1iYXNle21hcmdpbi1sZWZ0OjhweH1bZGlyPXJ0bF0gLm1hdC1kaWFsb2ctYWN0aW9ucyAubWF0LWJ1dHRvbi1iYXNlKy5tYXQtYnV0dG9uLWJhc2UsW2Rpcj1ydGxdIC5tYXQtZGlhbG9nLWFjdGlvbnMgLm1hdC1tZGMtYnV0dG9uLWJhc2UrLm1hdC1tZGMtYnV0dG9uLWJhc2V7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6OHB4fVxuIl0sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbeFcuZGlhbG9nQ29udGFpbmVyXX19KTtjb25zdCBrVz12cih3Vyk7KCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYih3Vyxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJtYXQtZGlhbG9nLWNvbnRhaW5lciIsdGVtcGxhdGU6IjxuZy10ZW1wbGF0ZSBjZGtQb3J0YWxPdXRsZXQ+PC9uZy10ZW1wbGF0ZT5cbiIsZW5jYXBzdWxhdGlvbjpQby5Ob25lLGNoYW5nZURldGVjdGlvbjp4by5EZWZhdWx0LGFuaW1hdGlvbnM6W3hXLmRpYWxvZ0NvbnRhaW5lcl0saG9zdDp7Y2xhc3M6Im1hdC1kaWFsb2ctY29udGFpbmVyIix0YWJpbmRleDoiLTEiLCJhcmlhLW1vZGFsIjoidHJ1ZSIsIltpZF0iOiJfaWQiLCJbYXR0ci5yb2xlXSI6Il9jb25maWcucm9sZSIsIlthdHRyLmFyaWEtbGFiZWxsZWRieV0iOiJfY29uZmlnLmFyaWFMYWJlbCA/IG51bGwgOiBfYXJpYUxhYmVsbGVkQnkiLCJbYXR0ci5hcmlhLWxhYmVsXSI6Il9jb25maWcuYXJpYUxhYmVsIiwiW2F0dHIuYXJpYS1kZXNjcmliZWRieV0iOiJfY29uZmlnLmFyaWFEZXNjcmliZWRCeSB8fCBudWxsIiwiW0BkaWFsb2dDb250YWluZXJdIjoiX3N0YXRlIiwiKEBkaWFsb2dDb250YWluZXIuc3RhcnQpIjoiX29uQW5pbWF0aW9uU3RhcnQoJGV2ZW50KSIsIihAZGlhbG9nQ29udGFpbmVyLmRvbmUpIjoiX29uQW5pbWF0aW9uRG9uZSgkZXZlbnQpIn0sc3R5bGVzOlsiLm1hdC1kaWFsb2ctY29udGFpbmVye2Rpc3BsYXk6YmxvY2s7cGFkZGluZzoyNHB4O2JvcmRlci1yYWRpdXM6NHB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdzphdXRvO291dGxpbmU6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO21pbi1oZWlnaHQ6aW5oZXJpdDttYXgtaGVpZ2h0OmluaGVyaXR9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWRpYWxvZy1jb250YWluZXJ7b3V0bGluZTpzb2xpZCAxcHh9Lm1hdC1kaWFsb2ctY29udGVudHtkaXNwbGF5OmJsb2NrO21hcmdpbjowIC0yNHB4O3BhZGRpbmc6MCAyNHB4O21heC1oZWlnaHQ6NjV2aDtvdmVyZmxvdzphdXRvOy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNofS5tYXQtZGlhbG9nLXRpdGxle21hcmdpbjowIDAgMjBweDtkaXNwbGF5OmJsb2NrfS5tYXQtZGlhbG9nLWFjdGlvbnN7cGFkZGluZzo4cHggMDtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7bWluLWhlaWdodDo1MnB4O2FsaWduLWl0ZW1zOmNlbnRlcjtib3gtc2l6aW5nOmNvbnRlbnQtYm94O21hcmdpbi1ib3R0b206LTI0cHh9Lm1hdC1kaWFsb2ctYWN0aW9uc1thbGlnbj1lbmRde2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0ubWF0LWRpYWxvZy1hY3Rpb25zW2FsaWduPWNlbnRlcl17anVzdGlmeS1jb250ZW50OmNlbnRlcn0ubWF0LWRpYWxvZy1hY3Rpb25zIC5tYXQtYnV0dG9uLWJhc2UrLm1hdC1idXR0b24tYmFzZSwubWF0LWRpYWxvZy1hY3Rpb25zIC5tYXQtbWRjLWJ1dHRvbi1iYXNlKy5tYXQtbWRjLWJ1dHRvbi1iYXNle21hcmdpbi1sZWZ0OjhweH1bZGlyPXJ0bF0gLm1hdC1kaWFsb2ctYWN0aW9ucyAubWF0LWJ1dHRvbi1iYXNlKy5tYXQtYnV0dG9uLWJhc2UsW2Rpcj1ydGxdIC5tYXQtZGlhbG9nLWFjdGlvbnMgLm1hdC1tZGMtYnV0dG9uLWJhc2UrLm1hdC1tZGMtYnV0dG9uLWJhc2V7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6OHB4fVxuIl19XX1dLG51bGwsbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpsZXQgU1c9MDtjbGFzcyBEV3tjb25zdHJ1Y3Rvcih0LGUsbj0ibWF0LWRpYWxvZy0iK1NXKyspe3RoaXMuX292ZXJsYXlSZWY9dCx0aGlzLl9jb250YWluZXJJbnN0YW5jZT1lLHRoaXMuaWQ9bix0aGlzLmRpc2FibGVDbG9zZT10aGlzLl9jb250YWluZXJJbnN0YW5jZS5fY29uZmlnLmRpc2FibGVDbG9zZSx0aGlzLl9hZnRlck9wZW5lZD1uZXcgeCx0aGlzLl9hZnRlckNsb3NlZD1uZXcgeCx0aGlzLl9iZWZvcmVDbG9zZWQ9bmV3IHgsdGhpcy5fc3RhdGU9MCxlLl9pZD1uLGUuX2FuaW1hdGlvblN0YXRlQ2hhbmdlZC5waXBlKEd0KCh0PT4ib3BlbmVkIj09PXQuc3RhdGUpKSxOZSgxKSkuc3Vic2NyaWJlKCgoKT0+e3RoaXMuX2FmdGVyT3BlbmVkLm5leHQoKSx0aGlzLl9hZnRlck9wZW5lZC5jb21wbGV0ZSgpfSkpLGUuX2FuaW1hdGlvblN0YXRlQ2hhbmdlZC5waXBlKEd0KCh0PT4iY2xvc2VkIj09PXQuc3RhdGUpKSxOZSgxKSkuc3Vic2NyaWJlKCgoKT0+e2NsZWFyVGltZW91dCh0aGlzLl9jbG9zZUZhbGxiYWNrVGltZW91dCksdGhpcy5fZmluaXNoRGlhbG9nQ2xvc2UoKX0pKSx0LmRldGFjaG1lbnRzKCkuc3Vic2NyaWJlKCgoKT0+e3RoaXMuX2JlZm9yZUNsb3NlZC5uZXh0KHRoaXMuX3Jlc3VsdCksdGhpcy5fYmVmb3JlQ2xvc2VkLmNvbXBsZXRlKCksdGhpcy5fYWZ0ZXJDbG9zZWQubmV4dCh0aGlzLl9yZXN1bHQpLHRoaXMuX2FmdGVyQ2xvc2VkLmNvbXBsZXRlKCksdGhpcy5jb21wb25lbnRJbnN0YW5jZT1udWxsLHRoaXMuX292ZXJsYXlSZWYuZGlzcG9zZSgpfSkpLHQua2V5ZG93bkV2ZW50cygpLnBpcGUoR3QoKHQ9PnQua2V5Q29kZT09PWVJJiYhdGhpcy5kaXNhYmxlQ2xvc2UmJiFhSSh0KSkpKS5zdWJzY3JpYmUoKHQ9Pnt0LnByZXZlbnREZWZhdWx0KCksRVcodGhpcywia2V5Ym9hcmQiKX0pKSx0LmJhY2tkcm9wQ2xpY2soKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5kaXNhYmxlQ2xvc2U/dGhpcy5fY29udGFpbmVySW5zdGFuY2UuX3JlY2FwdHVyZUZvY3VzKCk6RVcodGhpcywibW91c2UiKX0pKX1jbG9zZSh0KXt0aGlzLl9yZXN1bHQ9dCx0aGlzLl9jb250YWluZXJJbnN0YW5jZS5fYW5pbWF0aW9uU3RhdGVDaGFuZ2VkLnBpcGUoR3QoKHQ9PiJjbG9zaW5nIj09PXQuc3RhdGUpKSxOZSgxKSkuc3Vic2NyaWJlKChlPT57dGhpcy5fYmVmb3JlQ2xvc2VkLm5leHQodCksdGhpcy5fYmVmb3JlQ2xvc2VkLmNvbXBsZXRlKCksdGhpcy5fb3ZlcmxheVJlZi5kZXRhY2hCYWNrZHJvcCgpLHRoaXMuX2Nsb3NlRmFsbGJhY2tUaW1lb3V0PXNldFRpbWVvdXQoKCgpPT50aGlzLl9maW5pc2hEaWFsb2dDbG9zZSgpKSxlLnRvdGFsVGltZSsxMDApfSkpLHRoaXMuX3N0YXRlPTEsdGhpcy5fY29udGFpbmVySW5zdGFuY2UuX3N0YXJ0RXhpdEFuaW1hdGlvbigpfWFmdGVyT3BlbmVkKCl7cmV0dXJuIHRoaXMuX2FmdGVyT3BlbmVkfWFmdGVyQ2xvc2VkKCl7cmV0dXJuIHRoaXMuX2FmdGVyQ2xvc2VkfWJlZm9yZUNsb3NlZCgpe3JldHVybiB0aGlzLl9iZWZvcmVDbG9zZWR9YmFja2Ryb3BDbGljaygpe3JldHVybiB0aGlzLl9vdmVybGF5UmVmLmJhY2tkcm9wQ2xpY2soKX1rZXlkb3duRXZlbnRzKCl7cmV0dXJuIHRoaXMuX292ZXJsYXlSZWYua2V5ZG93bkV2ZW50cygpfXVwZGF0ZVBvc2l0aW9uKHQpe2xldCBlPXRoaXMuX2dldFBvc2l0aW9uU3RyYXRlZ3koKTtyZXR1cm4gdCYmKHQubGVmdHx8dC5yaWdodCk/dC5sZWZ0P2UubGVmdCh0LmxlZnQpOmUucmlnaHQodC5yaWdodCk6ZS5jZW50ZXJIb3Jpem9udGFsbHkoKSx0JiYodC50b3B8fHQuYm90dG9tKT90LnRvcD9lLnRvcCh0LnRvcCk6ZS5ib3R0b20odC5ib3R0b20pOmUuY2VudGVyVmVydGljYWxseSgpLHRoaXMuX292ZXJsYXlSZWYudXBkYXRlUG9zaXRpb24oKSx0aGlzfXVwZGF0ZVNpemUodD0iIixlPSIiKXtyZXR1cm4gdGhpcy5fb3ZlcmxheVJlZi51cGRhdGVTaXplKHt3aWR0aDp0LGhlaWdodDplfSksdGhpcy5fb3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpLHRoaXN9YWRkUGFuZWxDbGFzcyh0KXtyZXR1cm4gdGhpcy5fb3ZlcmxheVJlZi5hZGRQYW5lbENsYXNzKHQpLHRoaXN9cmVtb3ZlUGFuZWxDbGFzcyh0KXtyZXR1cm4gdGhpcy5fb3ZlcmxheVJlZi5yZW1vdmVQYW5lbENsYXNzKHQpLHRoaXN9Z2V0U3RhdGUoKXtyZXR1cm4gdGhpcy5fc3RhdGV9X2ZpbmlzaERpYWxvZ0Nsb3NlKCl7dGhpcy5fc3RhdGU9Mix0aGlzLl9vdmVybGF5UmVmLmRpc3Bvc2UoKX1fZ2V0UG9zaXRpb25TdHJhdGVneSgpe3JldHVybiB0aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpLnBvc2l0aW9uU3RyYXRlZ3l9fWZ1bmN0aW9uIEVXKHQsZSxuKXtyZXR1cm4gdm9pZCAwIT09dC5fY29udGFpbmVySW5zdGFuY2UmJih0Ll9jb250YWluZXJJbnN0YW5jZS5fY2xvc2VJbnRlcmFjdGlvblR5cGU9ZSksdC5jbG9zZShuKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY29uc3QgQVc9bmV3IE5yKCJNYXREaWFsb2dEYXRhIiksUlc9bmV3IE5yKCJtYXQtZGlhbG9nLWRlZmF1bHQtb3B0aW9ucyIpLFRXPW5ldyBOcigibWF0LWRpYWxvZy1zY3JvbGwtc3RyYXRlZ3kiKSxOVz17cHJvdmlkZTpUVyxkZXBzOltKRl0sdXNlRmFjdG9yeTpmdW5jdGlvbiBJVyh0KXtyZXR1cm4oKT0+dC5zY3JvbGxTdHJhdGVnaWVzLmJsb2NrKCl9fTtjbGFzcyB6V3tjb25zdHJ1Y3Rvcih0LGUsbixvLGksYSxyLHMsbCl7dGhpcy5fb3ZlcmxheT10LHRoaXMuX2luamVjdG9yPWUsdGhpcy5fZGVmYXVsdE9wdGlvbnM9bix0aGlzLl9wYXJlbnREaWFsb2c9byx0aGlzLl9vdmVybGF5Q29udGFpbmVyPWksdGhpcy5fZGlhbG9nUmVmQ29uc3RydWN0b3I9cix0aGlzLl9kaWFsb2dDb250YWluZXJUeXBlPXMsdGhpcy5fZGlhbG9nRGF0YVRva2VuPWwsdGhpcy5fb3BlbkRpYWxvZ3NBdFRoaXNMZXZlbD1bXSx0aGlzLl9hZnRlckFsbENsb3NlZEF0VGhpc0xldmVsPW5ldyB4LHRoaXMuX2FmdGVyT3BlbmVkQXRUaGlzTGV2ZWw9bmV3IHgsdGhpcy5fYXJpYUhpZGRlbkVsZW1lbnRzPW5ldyBNYXAsdGhpcy5hZnRlckFsbENsb3NlZD1GdCgoKCk9PnRoaXMub3BlbkRpYWxvZ3MubGVuZ3RoP3RoaXMuX2dldEFmdGVyQWxsQ2xvc2VkKCk6dGhpcy5fZ2V0QWZ0ZXJBbGxDbG9zZWQoKS5waXBlKGNuKHZvaWQgMCkpKSksdGhpcy5fc2Nyb2xsU3RyYXRlZ3k9YX1nZXQgb3BlbkRpYWxvZ3MoKXtyZXR1cm4gdGhpcy5fcGFyZW50RGlhbG9nP3RoaXMuX3BhcmVudERpYWxvZy5vcGVuRGlhbG9nczp0aGlzLl9vcGVuRGlhbG9nc0F0VGhpc0xldmVsfWdldCBhZnRlck9wZW5lZCgpe3JldHVybiB0aGlzLl9wYXJlbnREaWFsb2c/dGhpcy5fcGFyZW50RGlhbG9nLmFmdGVyT3BlbmVkOnRoaXMuX2FmdGVyT3BlbmVkQXRUaGlzTGV2ZWx9X2dldEFmdGVyQWxsQ2xvc2VkKCl7Y29uc3QgdD10aGlzLl9wYXJlbnREaWFsb2c7cmV0dXJuIHQ/dC5fZ2V0QWZ0ZXJBbGxDbG9zZWQoKTp0aGlzLl9hZnRlckFsbENsb3NlZEF0VGhpc0xldmVsfW9wZW4odCxlKXtpZigoZT0oZnVuY3Rpb24gbih0LGUpe3JldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZSksdCl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLykoZSx0aGlzLl9kZWZhdWx0T3B0aW9uc3x8bmV3IHZXKSkuaWQmJnRoaXMuZ2V0RGlhbG9nQnlJZChlLmlkKSYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpKXRocm93IEVycm9yKGBEaWFsb2cgd2l0aCBpZCAiJHtlLmlkfSIgZXhpc3RzIGFscmVhZHkuIFRoZSBkaWFsb2cgaWQgbXVzdCBiZSB1bmlxdWUuYCk7Y29uc3Qgbz10aGlzLl9jcmVhdGVPdmVybGF5KGUpLGk9dGhpcy5fYXR0YWNoRGlhbG9nQ29udGFpbmVyKG8sZSksYT10aGlzLl9hdHRhY2hEaWFsb2dDb250ZW50KHQsaSxvLGUpO3JldHVybiB0aGlzLm9wZW5EaWFsb2dzLmxlbmd0aHx8dGhpcy5faGlkZU5vbkRpYWxvZ0NvbnRlbnRGcm9tQXNzaXN0aXZlVGVjaG5vbG9neSgpLHRoaXMub3BlbkRpYWxvZ3MucHVzaChhKSxhLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKCgoKT0+dGhpcy5fcmVtb3ZlT3BlbkRpYWxvZyhhKSkpLHRoaXMuYWZ0ZXJPcGVuZWQubmV4dChhKSxpLl9pbml0aWFsaXplV2l0aEF0dGFjaGVkQ29udGVudCgpLGF9Y2xvc2VBbGwoKXt0aGlzLl9jbG9zZURpYWxvZ3ModGhpcy5vcGVuRGlhbG9ncyl9Z2V0RGlhbG9nQnlJZCh0KXtyZXR1cm4gdGhpcy5vcGVuRGlhbG9ncy5maW5kKChlPT5lLmlkPT09dCkpfW5nT25EZXN0cm95KCl7dGhpcy5fY2xvc2VEaWFsb2dzKHRoaXMuX29wZW5EaWFsb2dzQXRUaGlzTGV2ZWwpLHRoaXMuX2FmdGVyQWxsQ2xvc2VkQXRUaGlzTGV2ZWwuY29tcGxldGUoKSx0aGlzLl9hZnRlck9wZW5lZEF0VGhpc0xldmVsLmNvbXBsZXRlKCl9X2NyZWF0ZU92ZXJsYXkodCl7Y29uc3QgZT10aGlzLl9nZXRPdmVybGF5Q29uZmlnKHQpO3JldHVybiB0aGlzLl9vdmVybGF5LmNyZWF0ZShlKX1fZ2V0T3ZlcmxheUNvbmZpZyh0KXtjb25zdCBlPW5ldyBTRih7cG9zaXRpb25TdHJhdGVneTp0aGlzLl9vdmVybGF5LnBvc2l0aW9uKCkuZ2xvYmFsKCksc2Nyb2xsU3RyYXRlZ3k6dC5zY3JvbGxTdHJhdGVneXx8dGhpcy5fc2Nyb2xsU3RyYXRlZ3koKSxwYW5lbENsYXNzOnQucGFuZWxDbGFzcyxoYXNCYWNrZHJvcDp0Lmhhc0JhY2tkcm9wLGRpcmVjdGlvbjp0LmRpcmVjdGlvbixtaW5XaWR0aDp0Lm1pbldpZHRoLG1pbkhlaWdodDp0Lm1pbkhlaWdodCxtYXhXaWR0aDp0Lm1heFdpZHRoLG1heEhlaWdodDp0Lm1heEhlaWdodCxkaXNwb3NlT25OYXZpZ2F0aW9uOnQuY2xvc2VPbk5hdmlnYXRpb259KTtyZXR1cm4gdC5iYWNrZHJvcENsYXNzJiYoZS5iYWNrZHJvcENsYXNzPXQuYmFja2Ryb3BDbGFzcyksZX1fYXR0YWNoRGlhbG9nQ29udGFpbmVyKHQsZSl7Y29uc3Qgbj1RcC5jcmVhdGUoe3BhcmVudDplJiZlLnZpZXdDb250YWluZXJSZWYmJmUudmlld0NvbnRhaW5lclJlZi5pbmplY3Rvcnx8dGhpcy5faW5qZWN0b3IscHJvdmlkZXJzOlt7cHJvdmlkZTp2Vyx1c2VWYWx1ZTplfV19KSxvPW5ldyBzRih0aGlzLl9kaWFsb2dDb250YWluZXJUeXBlLGUudmlld0NvbnRhaW5lclJlZixuLGUuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyKTtyZXR1cm4gdC5hdHRhY2gobykuaW5zdGFuY2V9X2F0dGFjaERpYWxvZ0NvbnRlbnQodCxlLG4sbyl7Y29uc3QgaT1uZXcgdGhpcy5fZGlhbG9nUmVmQ29uc3RydWN0b3IobixlLG8uaWQpO2lmKHQgaW5zdGFuY2VvZiBVaCllLmF0dGFjaFRlbXBsYXRlUG9ydGFsKG5ldyBsRih0LG51bGwseyRpbXBsaWNpdDpvLmRhdGEsZGlhbG9nUmVmOml9KSk7ZWxzZXtjb25zdCBuPXRoaXMuX2NyZWF0ZUluamVjdG9yKG8saSxlKSxhPWUuYXR0YWNoQ29tcG9uZW50UG9ydGFsKG5ldyBzRih0LG8udmlld0NvbnRhaW5lclJlZixuKSk7aS5jb21wb25lbnRJbnN0YW5jZT1hLmluc3RhbmNlfXJldHVybiBpLnVwZGF0ZVNpemUoby53aWR0aCxvLmhlaWdodCkudXBkYXRlUG9zaXRpb24oby5wb3NpdGlvbiksaX1fY3JlYXRlSW5qZWN0b3IodCxlLG4pe2NvbnN0IG89dCYmdC52aWV3Q29udGFpbmVyUmVmJiZ0LnZpZXdDb250YWluZXJSZWYuaW5qZWN0b3IsaT1be3Byb3ZpZGU6dGhpcy5fZGlhbG9nQ29udGFpbmVyVHlwZSx1c2VWYWx1ZTpufSx7cHJvdmlkZTp0aGlzLl9kaWFsb2dEYXRhVG9rZW4sdXNlVmFsdWU6dC5kYXRhfSx7cHJvdmlkZTp0aGlzLl9kaWFsb2dSZWZDb25zdHJ1Y3Rvcix1c2VWYWx1ZTplfV07cmV0dXJuIXQuZGlyZWN0aW9ufHxvJiZvLmdldChNeixudWxsKXx8aS5wdXNoKHtwcm92aWRlOk16LHVzZVZhbHVlOnt2YWx1ZTp0LmRpcmVjdGlvbixjaGFuZ2U6WigpfX0pLFFwLmNyZWF0ZSh7cGFyZW50Om98fHRoaXMuX2luamVjdG9yLHByb3ZpZGVyczppfSl9X3JlbW92ZU9wZW5EaWFsb2codCl7Y29uc3QgZT10aGlzLm9wZW5EaWFsb2dzLmluZGV4T2YodCk7ZT4tMSYmKHRoaXMub3BlbkRpYWxvZ3Muc3BsaWNlKGUsMSksdGhpcy5vcGVuRGlhbG9ncy5sZW5ndGh8fCh0aGlzLl9hcmlhSGlkZGVuRWxlbWVudHMuZm9yRWFjaCgoKHQsZSk9Pnt0P2Uuc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsdCk6ZS5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIil9KSksdGhpcy5fYXJpYUhpZGRlbkVsZW1lbnRzLmNsZWFyKCksdGhpcy5fZ2V0QWZ0ZXJBbGxDbG9zZWQoKS5uZXh0KCkpKX1faGlkZU5vbkRpYWxvZ0NvbnRlbnRGcm9tQXNzaXN0aXZlVGVjaG5vbG9neSgpe2NvbnN0IHQ9dGhpcy5fb3ZlcmxheUNvbnRhaW5lci5nZXRDb250YWluZXJFbGVtZW50KCk7aWYodC5wYXJlbnRFbGVtZW50KXtjb25zdCBlPXQucGFyZW50RWxlbWVudC5jaGlsZHJlbjtmb3IobGV0IG49ZS5sZW5ndGgtMTtuPi0xO24tLSl7bGV0IG89ZVtuXTtvPT09dHx8IlNDUklQVCI9PT1vLm5vZGVOYW1lfHwiU1RZTEUiPT09by5ub2RlTmFtZXx8by5oYXNBdHRyaWJ1dGUoImFyaWEtbGl2ZSIpfHwodGhpcy5fYXJpYUhpZGRlbkVsZW1lbnRzLnNldChvLG8uZ2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIpKSxvLnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCJ0cnVlIikpfX19X2Nsb3NlRGlhbG9ncyh0KXtsZXQgZT10Lmxlbmd0aDtmb3IoO2UtLTspdFtlXS5jbG9zZSgpfX16Vy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8elcpKE11KEpGKSxNdShRcCksTXUodm9pZCAwKSxNdSh2b2lkIDApLE11KEZGKSxNdSh2b2lkIDApLE11KFVyKSxNdShVciksTXUoTnIpKX0selcuybVkaXI9Sm8oe3R5cGU6eld9KSx6Vy5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOkpGfSx7dHlwZTpRcH0se3R5cGU6dm9pZCAwfSx7dHlwZTp2b2lkIDB9LHt0eXBlOkZGfSx7dHlwZTp2b2lkIDB9LHt0eXBlOlVyfSx7dHlwZTpVcn0se3R5cGU6TnJ9XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHpXLFt7dHlwZTpnX31dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpKRn0se3R5cGU6UXB9LHt0eXBlOnZvaWQgMH0se3R5cGU6dm9pZCAwfSx7dHlwZTpGRn0se3R5cGU6dm9pZCAwfSx7dHlwZTpVcn0se3R5cGU6VXJ9LHt0eXBlOk5yfV19KSxudWxsKTtjbGFzcyBIVyBleHRlbmRzIHpXe2NvbnN0cnVjdG9yKHQsZSxuLG8saSxhLHIpe3N1cGVyKHQsZSxvLGEscixpLERXLHdXLEFXKX19SFcuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEhXKSh1cyhKRiksdXMoUXApLHVzKG9NLDgpLHVzKFJXLDgpLHVzKFRXKSx1cyhIVywxMiksdXMoRkYpKX0sSFcuybVwcm92PWxvKHt0b2tlbjpIVyxmYWN0b3J5OkhXLsm1ZmFjfSksSFcuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpKRn0se3R5cGU6UXB9LHt0eXBlOm9NLGRlY29yYXRvcnM6W3t0eXBlOl9zfV19LHt0eXBlOnZXLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltSV119XX0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W1RXXX1dfSx7dHlwZTpIVyxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6TXN9XX0se3R5cGU6RkZ9XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEhXLFt7dHlwZTpKbX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpKRn0se3R5cGU6UXB9LHt0eXBlOm9NLGRlY29yYXRvcnM6W3t0eXBlOl9zfV19LHt0eXBlOnZXLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltSV119XX0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W1RXXX1dfSx7dHlwZTpIVyxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6TXN9XX0se3R5cGU6RkZ9XX0pLG51bGwpO2xldCBGVz0wO2NsYXNzIExXe2NvbnN0cnVjdG9yKHQsZSxuKXt0aGlzLmRpYWxvZ1JlZj10LHRoaXMuX2VsZW1lbnRSZWY9ZSx0aGlzLl9kaWFsb2c9bix0aGlzLnR5cGU9ImJ1dHRvbiJ9bmdPbkluaXQoKXt0aGlzLmRpYWxvZ1JlZnx8KHRoaXMuZGlhbG9nUmVmPVVXKHRoaXMuX2VsZW1lbnRSZWYsdGhpcy5fZGlhbG9nLm9wZW5EaWFsb2dzKSl9bmdPbkNoYW5nZXModCl7Y29uc3QgZT10Ll9tYXREaWFsb2dDbG9zZXx8dC5fbWF0RGlhbG9nQ2xvc2VSZXN1bHQ7ZSYmKHRoaXMuZGlhbG9nUmVzdWx0PWUuY3VycmVudFZhbHVlKX1fb25CdXR0b25DbGljayh0KXtFVyh0aGlzLmRpYWxvZ1JlZiwwPT09dC5zY3JlZW5YJiYwPT09dC5zY3JlZW5ZPyJrZXlib2FyZCI6Im1vdXNlIix0aGlzLmRpYWxvZ1Jlc3VsdCl9fUxXLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxMVykoTXUoRFcsOCksTXUoY2gpLE11KEhXKSl9LExXLsm1ZGlyPUpvKHt0eXBlOkxXLHNlbGVjdG9yczpbWyIiLCJtYXQtZGlhbG9nLWNsb3NlIiwiIl0sWyIiLCJtYXREaWFsb2dDbG9zZSIsIiJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MSZlJiZOdSgiY2xpY2siLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLl9vbkJ1dHRvbkNsaWNrKGUpfSkpLDImZSYmTm0oImFyaWEtbGFiZWwiLG4uYXJpYUxhYmVsfHxudWxsKSgidHlwZSIsbi50eXBlKX0saW5wdXRzOnt0eXBlOiJ0eXBlIixkaWFsb2dSZXN1bHQ6WyJtYXQtZGlhbG9nLWNsb3NlIiwiZGlhbG9nUmVzdWx0Il0sYXJpYUxhYmVsOlsiYXJpYS1sYWJlbCIsImFyaWFMYWJlbCJdLF9tYXREaWFsb2dDbG9zZTpbIm1hdERpYWxvZ0Nsb3NlIiwiX21hdERpYWxvZ0Nsb3NlIl19LGV4cG9ydEFzOlsibWF0RGlhbG9nQ2xvc2UiXSxmZWF0dXJlczpbU2ldfSksTFcuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpEVyxkZWNvcmF0b3JzOlt7dHlwZTpfc31dfSx7dHlwZTpjaH0se3R5cGU6SFd9XSxMVy5wcm9wRGVjb3JhdG9ycz17YXJpYUxhYmVsOlt7dHlwZTp5XyxhcmdzOlsiYXJpYS1sYWJlbCJdfV0sdHlwZTpbe3R5cGU6eV99XSxkaWFsb2dSZXN1bHQ6W3t0eXBlOnlfLGFyZ3M6WyJtYXQtZGlhbG9nLWNsb3NlIl19XSxfbWF0RGlhbG9nQ2xvc2U6W3t0eXBlOnlfLGFyZ3M6WyJtYXREaWFsb2dDbG9zZSJdfV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoTFcsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoiW21hdC1kaWFsb2ctY2xvc2VdLCBbbWF0RGlhbG9nQ2xvc2VdIixleHBvcnRBczoibWF0RGlhbG9nQ2xvc2UiLGhvc3Q6eyIoY2xpY2spIjoiX29uQnV0dG9uQ2xpY2soJGV2ZW50KSIsIlthdHRyLmFyaWEtbGFiZWxdIjoiYXJpYUxhYmVsIHx8IG51bGwiLCJbYXR0ci50eXBlXSI6InR5cGUifX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkRXLGRlY29yYXRvcnM6W3t0eXBlOl9zfV19LHt0eXBlOmNofSx7dHlwZTpIV31dfSkse3R5cGU6W3t0eXBlOnlffV0sZGlhbG9nUmVzdWx0Olt7dHlwZTp5XyxhcmdzOlsibWF0LWRpYWxvZy1jbG9zZSJdfV0sYXJpYUxhYmVsOlt7dHlwZTp5XyxhcmdzOlsiYXJpYS1sYWJlbCJdfV0sX21hdERpYWxvZ0Nsb3NlOlt7dHlwZTp5XyxhcmdzOlsibWF0RGlhbG9nQ2xvc2UiXX1dfSk7Y2xhc3MgQld7Y29uc3RydWN0b3IodCxlLG4pe3RoaXMuX2RpYWxvZ1JlZj10LHRoaXMuX2VsZW1lbnRSZWY9ZSx0aGlzLl9kaWFsb2c9bix0aGlzLmlkPSJtYXQtZGlhbG9nLXRpdGxlLSIrRlcrK31uZ09uSW5pdCgpe3RoaXMuX2RpYWxvZ1JlZnx8KHRoaXMuX2RpYWxvZ1JlZj1VVyh0aGlzLl9lbGVtZW50UmVmLHRoaXMuX2RpYWxvZy5vcGVuRGlhbG9ncykpLHRoaXMuX2RpYWxvZ1JlZiYmUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKCk9Pntjb25zdCB0PXRoaXMuX2RpYWxvZ1JlZi5fY29udGFpbmVySW5zdGFuY2U7dCYmIXQuX2FyaWFMYWJlbGxlZEJ5JiYodC5fYXJpYUxhYmVsbGVkQnk9dGhpcy5pZCl9KSl9fUJXLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxCVykoTXUoRFcsOCksTXUoY2gpLE11KEhXKSl9LEJXLsm1ZGlyPUpvKHt0eXBlOkJXLHNlbGVjdG9yczpbWyIiLCJtYXQtZGlhbG9nLXRpdGxlIiwiIl0sWyIiLCJtYXREaWFsb2dUaXRsZSIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1kaWFsb2ctdGl0bGUiXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MiZlJiZrZigiaWQiLG4uaWQpfSxpbnB1dHM6e2lkOiJpZCJ9LGV4cG9ydEFzOlsibWF0RGlhbG9nVGl0bGUiXX0pLEJXLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6RFcsZGVjb3JhdG9yczpbe3R5cGU6X3N9XX0se3R5cGU6Y2h9LHt0eXBlOkhXfV0sQlcucHJvcERlY29yYXRvcnM9e2lkOlt7dHlwZTp5X31dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEJXLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6IlttYXQtZGlhbG9nLXRpdGxlXSwgW21hdERpYWxvZ1RpdGxlXSIsZXhwb3J0QXM6Im1hdERpYWxvZ1RpdGxlIixob3N0OntjbGFzczoibWF0LWRpYWxvZy10aXRsZSIsIltpZF0iOiJpZCJ9fV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6RFcsZGVjb3JhdG9yczpbe3R5cGU6X3N9XX0se3R5cGU6Y2h9LHt0eXBlOkhXfV19KSx7aWQ6W3t0eXBlOnlffV19KTtjbGFzcyBWV3t9VlcuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFZXKX0sVlcuybVkaXI9Sm8oe3R5cGU6Vlcsc2VsZWN0b3JzOltbIiIsIm1hdC1kaWFsb2ctY29udGVudCIsIiJdLFsibWF0LWRpYWxvZy1jb250ZW50Il0sWyIiLCJtYXREaWFsb2dDb250ZW50IiwiIl1dLGhvc3RBdHRyczpbMSwibWF0LWRpYWxvZy1jb250ZW50Il19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFZXLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6IlttYXQtZGlhbG9nLWNvbnRlbnRdLCBtYXQtZGlhbG9nLWNvbnRlbnQsIFttYXREaWFsb2dDb250ZW50XSIsaG9zdDp7Y2xhc3M6Im1hdC1kaWFsb2ctY29udGVudCJ9fV19XSxudWxsLG51bGwpO2NsYXNzIGpXe31mdW5jdGlvbiBVVyh0LGUpe2xldCBuPXQubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50O2Zvcig7biYmIW4uY2xhc3NMaXN0LmNvbnRhaW5zKCJtYXQtZGlhbG9nLWNvbnRhaW5lciIpOyluPW4ucGFyZW50RWxlbWVudDtyZXR1cm4gbj9lLmZpbmQoKHQ9PnQuaWQ9PT1uLmlkKSk6bnVsbH0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovalcuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGpXKX0salcuybVkaXI9Sm8oe3R5cGU6alcsc2VsZWN0b3JzOltbIiIsIm1hdC1kaWFsb2ctYWN0aW9ucyIsIiJdLFsibWF0LWRpYWxvZy1hY3Rpb25zIl0sWyIiLCJtYXREaWFsb2dBY3Rpb25zIiwiIl1dLGhvc3RBdHRyczpbMSwibWF0LWRpYWxvZy1hY3Rpb25zIl19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGpXLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6IlttYXQtZGlhbG9nLWFjdGlvbnNdLCBtYXQtZGlhbG9nLWFjdGlvbnMsIFttYXREaWFsb2dBY3Rpb25zXSIsaG9zdDp7Y2xhc3M6Im1hdC1kaWFsb2ctYWN0aW9ucyJ9fV19XSxudWxsLG51bGwpO2NsYXNzIFdXe31XVy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8V1cpfSxXVy7JtW1vZD1abyh7dHlwZTpXV30pLFdXLsm1aW5qPWNvKHtwcm92aWRlcnM6W0hXLE5XXSxpbXBvcnRzOltbaUwseUYsVHpdLFR6XX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oV1cse2RlY2xhcmF0aW9uczpmdW5jdGlvbigpe3JldHVyblt3VyxMVyxCVyxqVyxWV119LGltcG9ydHM6ZnVuY3Rpb24oKXtyZXR1cm5baUwseUYsVHpdfSxleHBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW3dXLExXLEJXLFZXLGpXLFR6XX19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFdXLFt7dHlwZTprXyxhcmdzOlt7aW1wb3J0czpbaUwseUYsVHpdLGV4cG9ydHM6W3dXLExXLEJXLFZXLGpXLFR6XSxkZWNsYXJhdGlvbnM6W3dXLExXLEJXLGpXLFZXXSxwcm92aWRlcnM6W0hXLE5XXSxlbnRyeUNvbXBvbmVudHM6W3dXXX1dfV0sbnVsbCxudWxsKTtjbGFzcyBHV3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuX2RvY3VtZW50PWU7Y29uc3Qgbj10aGlzLl90ZXh0YXJlYT10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpLG89bi5zdHlsZTtvLnBvc2l0aW9uPSJmaXhlZCIsby50b3A9by5vcGFjaXR5PSIwIixvLmxlZnQ9Ii05OTllbSIsbi5zZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiwidHJ1ZSIpLG4udmFsdWU9dCx0aGlzLl9kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG4pfWNvcHkoKXtjb25zdCB0PXRoaXMuX3RleHRhcmVhO2xldCBlPSExO3RyeXtpZih0KXtjb25zdCBuPXRoaXMuX2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7dC5zZWxlY3QoKSx0LnNldFNlbGVjdGlvblJhbmdlKDAsdC52YWx1ZS5sZW5ndGgpLGU9dGhpcy5fZG9jdW1lbnQuZXhlY0NvbW1hbmQoImNvcHkiKSxuJiZuLmZvY3VzKCl9fWNhdGNoKHQpe31yZXR1cm4gZX1kZXN0cm95KCl7Y29uc3QgdD10aGlzLl90ZXh0YXJlYTt0JiYodC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCksdGhpcy5fdGV4dGFyZWE9dm9pZCAwKX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NsYXNzIFlXe2NvbnN0cnVjdG9yKHQpe3RoaXMuX2RvY3VtZW50PXR9Y29weSh0KXtjb25zdCBlPXRoaXMuYmVnaW5Db3B5KHQpLG49ZS5jb3B5KCk7cmV0dXJuIGUuZGVzdHJveSgpLG59YmVnaW5Db3B5KHQpe3JldHVybiBuZXcgR1codCx0aGlzLl9kb2N1bWVudCl9fVlXLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxZVykodXMoVUMpKX0sWVcuybVwcm92PWxvKHtmYWN0b3J5OmZ1bmN0aW9uIHQoKXtyZXR1cm4gbmV3IFlXKHVzKFVDKSl9LHRva2VuOllXLHByb3ZpZGVkSW46InJvb3QifSksWVcuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbVUNdfV19XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFlXLFt7dHlwZTpKbSxhcmdzOlt7cHJvdmlkZWRJbjoicm9vdCJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbVUNdfV19XX0pLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3QgcVc9bmV3IE5yKCJDREtfQ09QWV9UT19DTElQQk9BUkRfQ09ORklHIik7Y2xhc3MgWld7Y29uc3RydWN0b3IodCxlLG4pe3RoaXMuX2NsaXBib2FyZD10LHRoaXMuX25nWm9uZT1lLHRoaXMudGV4dD0iIix0aGlzLmF0dGVtcHRzPTEsdGhpcy5jb3BpZWQ9bmV3IEFiLHRoaXMuX3BlbmRpbmc9bmV3IFNldCxuJiZudWxsIT1uLmF0dGVtcHRzJiYodGhpcy5hdHRlbXB0cz1uLmF0dGVtcHRzKX1jb3B5KHQ9dGhpcy5hdHRlbXB0cyl7aWYodD4xKXtsZXQgZT10O2NvbnN0IG49dGhpcy5fY2xpcGJvYXJkLmJlZ2luQ29weSh0aGlzLnRleHQpO3RoaXMuX3BlbmRpbmcuYWRkKG4pO2NvbnN0IG89KCk9Pntjb25zdCB0PW4uY29weSgpO3R8fCEtLWV8fHRoaXMuX2Rlc3Ryb3llZD8odGhpcy5fY3VycmVudFRpbWVvdXQ9bnVsbCx0aGlzLl9wZW5kaW5nLmRlbGV0ZShuKSxuLmRlc3Ryb3koKSx0aGlzLmNvcGllZC5lbWl0KHQpKTp0aGlzLl9jdXJyZW50VGltZW91dD10aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCgpPT5zZXRUaW1lb3V0KG8sMSkpKX07bygpfWVsc2UgdGhpcy5jb3BpZWQuZW1pdCh0aGlzLl9jbGlwYm9hcmQuY29weSh0aGlzLnRleHQpKX1uZ09uRGVzdHJveSgpe3RoaXMuX2N1cnJlbnRUaW1lb3V0JiZjbGVhclRpbWVvdXQodGhpcy5fY3VycmVudFRpbWVvdXQpLHRoaXMuX3BlbmRpbmcuZm9yRWFjaCgodD0+dC5kZXN0cm95KCkpKSx0aGlzLl9wZW5kaW5nLmNsZWFyKCksdGhpcy5fZGVzdHJveWVkPSEwfX1aVy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8WlcpKE11KFlXKSxNdSh0QyksTXUocVcsOCkpfSxaVy7JtWRpcj1Kbyh7dHlwZTpaVyxzZWxlY3RvcnM6W1siIiwiY2RrQ29weVRvQ2xpcGJvYXJkIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MSZlJiZOdSgiY2xpY2siLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uY29weSgpfSkpfSxpbnB1dHM6e3RleHQ6WyJjZGtDb3B5VG9DbGlwYm9hcmQiLCJ0ZXh0Il0sYXR0ZW1wdHM6WyJjZGtDb3B5VG9DbGlwYm9hcmRBdHRlbXB0cyIsImF0dGVtcHRzIl19LG91dHB1dHM6e2NvcGllZDoiY2RrQ29weVRvQ2xpcGJvYXJkQ29waWVkIn19KSxaVy5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOllXfSx7dHlwZTp0Q30se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltxV119XX1dLFpXLnByb3BEZWNvcmF0b3JzPXt0ZXh0Olt7dHlwZTp5XyxhcmdzOlsiY2RrQ29weVRvQ2xpcGJvYXJkIl19XSxhdHRlbXB0czpbe3R5cGU6eV8sYXJnczpbImNka0NvcHlUb0NsaXBib2FyZEF0dGVtcHRzIl19XSxjb3BpZWQ6W3t0eXBlOl9fLGFyZ3M6WyJjZGtDb3B5VG9DbGlwYm9hcmRDb3BpZWQiXX1dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFpXLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6IltjZGtDb3B5VG9DbGlwYm9hcmRdIixob3N0OnsiKGNsaWNrKSI6ImNvcHkoKSJ9fV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6WVd9LHt0eXBlOnRDfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W3FXXX1dfV19KSx7dGV4dDpbe3R5cGU6eV8sYXJnczpbImNka0NvcHlUb0NsaXBib2FyZCJdfV0sYXR0ZW1wdHM6W3t0eXBlOnlfLGFyZ3M6WyJjZGtDb3B5VG9DbGlwYm9hcmRBdHRlbXB0cyJdfV0sY29waWVkOlt7dHlwZTpfXyxhcmdzOlsiY2RrQ29weVRvQ2xpcGJvYXJkQ29waWVkIl19XX0pOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3MgWFd7fWZ1bmN0aW9uIEtXKHQpe3JldHVybiBFcnJvcihgVW5hYmxlIHRvIGZpbmQgaWNvbiB3aXRoIHRoZSBuYW1lICIke3R9ImApfWZ1bmN0aW9uIEpXKHQpe3JldHVybiBFcnJvcihgVGhlIFVSTCBwcm92aWRlZCB0byBNYXRJY29uUmVnaXN0cnkgd2FzIG5vdCB0cnVzdGVkIGFzIGEgcmVzb3VyY2UgVVJMIHZpYSBBbmd1bGFyJ3MgRG9tU2FuaXRpemVyLiBBdHRlbXB0ZWQgVVJMIHdhcyAiJHt0fSIuYCl9ZnVuY3Rpb24gUVcodCl7cmV0dXJuIEVycm9yKGBUaGUgbGl0ZXJhbCBwcm92aWRlZCB0byBNYXRJY29uUmVnaXN0cnkgd2FzIG5vdCB0cnVzdGVkIGFzIHNhZmUgSFRNTCBieSBBbmd1bGFyJ3MgRG9tU2FuaXRpemVyLiBBdHRlbXB0ZWQgbGl0ZXJhbCB3YXMgIiR7dH0iLmApfVhXLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxYVyl9LFhXLsm1bW9kPVpvKHt0eXBlOlhXfSksWFcuybVpbmo9Y28oe30pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oWFcse2RlY2xhcmF0aW9uczpbWlddLGV4cG9ydHM6W1pXXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoWFcsW3t0eXBlOmtfLGFyZ3M6W3tkZWNsYXJhdGlvbnM6W1pXXSxleHBvcnRzOltaV119XX1dLG51bGwsbnVsbCk7Y2xhc3MgJFd7Y29uc3RydWN0b3IodCxlLG4pe3RoaXMudXJsPXQsdGhpcy5zdmdUZXh0PWUsdGhpcy5vcHRpb25zPW59fWNsYXNzIHRHe2NvbnN0cnVjdG9yKHQsZSxuLG8pe3RoaXMuX2h0dHBDbGllbnQ9dCx0aGlzLl9zYW5pdGl6ZXI9ZSx0aGlzLl9lcnJvckhhbmRsZXI9byx0aGlzLl9zdmdJY29uQ29uZmlncz1uZXcgTWFwLHRoaXMuX2ljb25TZXRDb25maWdzPW5ldyBNYXAsdGhpcy5fY2FjaGVkSWNvbnNCeVVybD1uZXcgTWFwLHRoaXMuX2luUHJvZ3Jlc3NVcmxGZXRjaGVzPW5ldyBNYXAsdGhpcy5fZm9udENzc0NsYXNzZXNCeUFsaWFzPW5ldyBNYXAsdGhpcy5fcmVzb2x2ZXJzPVtdLHRoaXMuX2RlZmF1bHRGb250U2V0Q2xhc3M9Im1hdGVyaWFsLWljb25zIix0aGlzLl9kb2N1bWVudD1ufWFkZFN2Z0ljb24odCxlLG4pe3JldHVybiB0aGlzLmFkZFN2Z0ljb25Jbk5hbWVzcGFjZSgiIix0LGUsbil9YWRkU3ZnSWNvbkxpdGVyYWwodCxlLG4pe3JldHVybiB0aGlzLmFkZFN2Z0ljb25MaXRlcmFsSW5OYW1lc3BhY2UoIiIsdCxlLG4pfWFkZFN2Z0ljb25Jbk5hbWVzcGFjZSh0LGUsbixvKXtyZXR1cm4gdGhpcy5fYWRkU3ZnSWNvbkNvbmZpZyh0LGUsbmV3ICRXKG4sbnVsbCxvKSl9YWRkU3ZnSWNvblJlc29sdmVyKHQpe3JldHVybiB0aGlzLl9yZXNvbHZlcnMucHVzaCh0KSx0aGlzfWFkZFN2Z0ljb25MaXRlcmFsSW5OYW1lc3BhY2UodCxlLG4sbyl7Y29uc3QgaT10aGlzLl9zYW5pdGl6ZXIuc2FuaXRpemUoeGwuSFRNTCxuKTtpZighaSl0aHJvdyBRVyhuKTtyZXR1cm4gdGhpcy5fYWRkU3ZnSWNvbkNvbmZpZyh0LGUsbmV3ICRXKCIiLGksbykpfWFkZFN2Z0ljb25TZXQodCxlKXtyZXR1cm4gdGhpcy5hZGRTdmdJY29uU2V0SW5OYW1lc3BhY2UoIiIsdCxlKX1hZGRTdmdJY29uU2V0TGl0ZXJhbCh0LGUpe3JldHVybiB0aGlzLmFkZFN2Z0ljb25TZXRMaXRlcmFsSW5OYW1lc3BhY2UoIiIsdCxlKX1hZGRTdmdJY29uU2V0SW5OYW1lc3BhY2UodCxlLG4pe3JldHVybiB0aGlzLl9hZGRTdmdJY29uU2V0Q29uZmlnKHQsbmV3ICRXKGUsbnVsbCxuKSl9YWRkU3ZnSWNvblNldExpdGVyYWxJbk5hbWVzcGFjZSh0LGUsbil7Y29uc3Qgbz10aGlzLl9zYW5pdGl6ZXIuc2FuaXRpemUoeGwuSFRNTCxlKTtpZighbyl0aHJvdyBRVyhlKTtyZXR1cm4gdGhpcy5fYWRkU3ZnSWNvblNldENvbmZpZyh0LG5ldyAkVygiIixvLG4pKX1yZWdpc3RlckZvbnRDbGFzc0FsaWFzKHQsZT10KXtyZXR1cm4gdGhpcy5fZm9udENzc0NsYXNzZXNCeUFsaWFzLnNldCh0LGUpLHRoaXN9Y2xhc3NOYW1lRm9yRm9udEFsaWFzKHQpe3JldHVybiB0aGlzLl9mb250Q3NzQ2xhc3Nlc0J5QWxpYXMuZ2V0KHQpfHx0fXNldERlZmF1bHRGb250U2V0Q2xhc3ModCl7cmV0dXJuIHRoaXMuX2RlZmF1bHRGb250U2V0Q2xhc3M9dCx0aGlzfWdldERlZmF1bHRGb250U2V0Q2xhc3MoKXtyZXR1cm4gdGhpcy5fZGVmYXVsdEZvbnRTZXRDbGFzc31nZXRTdmdJY29uRnJvbVVybCh0KXtjb25zdCBlPXRoaXMuX3Nhbml0aXplci5zYW5pdGl6ZSh4bC5SRVNPVVJDRV9VUkwsdCk7aWYoIWUpdGhyb3cgSlcodCk7Y29uc3Qgbj10aGlzLl9jYWNoZWRJY29uc0J5VXJsLmdldChlKTtyZXR1cm4gbj9aKGVHKG4pKTp0aGlzLl9sb2FkU3ZnSWNvbkZyb21Db25maWcobmV3ICRXKHQsbnVsbCkpLnBpcGUoX24oKHQ9PnRoaXMuX2NhY2hlZEljb25zQnlVcmwuc2V0KGUsdCkpKSxodCgodD0+ZUcodCkpKSl9Z2V0TmFtZWRTdmdJY29uKHQsZT0iIil7Y29uc3Qgbj1uRyhlLHQpO2xldCBvPXRoaXMuX3N2Z0ljb25Db25maWdzLmdldChuKTtpZihvKXJldHVybiB0aGlzLl9nZXRTdmdGcm9tQ29uZmlnKG8pO2lmKG89dGhpcy5fZ2V0SWNvbkNvbmZpZ0Zyb21SZXNvbHZlcnMoZSx0KSxvKXJldHVybiB0aGlzLl9zdmdJY29uQ29uZmlncy5zZXQobixvKSx0aGlzLl9nZXRTdmdGcm9tQ29uZmlnKG8pO2NvbnN0IGk9dGhpcy5faWNvblNldENvbmZpZ3MuZ2V0KGUpO3JldHVybiBpP3RoaXMuX2dldFN2Z0Zyb21JY29uU2V0Q29uZmlncyh0LGkpOlgoS1cobikpfW5nT25EZXN0cm95KCl7dGhpcy5fcmVzb2x2ZXJzPVtdLHRoaXMuX3N2Z0ljb25Db25maWdzLmNsZWFyKCksdGhpcy5faWNvblNldENvbmZpZ3MuY2xlYXIoKSx0aGlzLl9jYWNoZWRJY29uc0J5VXJsLmNsZWFyKCl9X2dldFN2Z0Zyb21Db25maWcodCl7cmV0dXJuIHQuc3ZnVGV4dD9aKGVHKHRoaXMuX3N2Z0VsZW1lbnRGcm9tQ29uZmlnKHQpKSk6dGhpcy5fbG9hZFN2Z0ljb25Gcm9tQ29uZmlnKHQpLnBpcGUoaHQoKHQ9PmVHKHQpKSkpfV9nZXRTdmdGcm9tSWNvblNldENvbmZpZ3ModCxlKXtjb25zdCBuPXRoaXMuX2V4dHJhY3RJY29uV2l0aE5hbWVGcm9tQW55U2V0KHQsZSk7cmV0dXJuIG4/WihuKTpMdChlLmZpbHRlcigodD0+IXQuc3ZnVGV4dCkpLm1hcCgodD0+dGhpcy5fbG9hZFN2Z0ljb25TZXRGcm9tQ29uZmlnKHQpLnBpcGUocmUoKGU9Pntjb25zdCBuPXRoaXMuX3Nhbml0aXplci5zYW5pdGl6ZSh4bC5SRVNPVVJDRV9VUkwsdC51cmwpO3JldHVybiB0aGlzLl9lcnJvckhhbmRsZXIuaGFuZGxlRXJyb3IobmV3IEVycm9yKGBMb2FkaW5nIGljb24gc2V0IFVSTDogJHtufSBmYWlsZWQ6ICR7ZS5tZXNzYWdlfWApKSxaKG51bGwpfSkpKSkpKS5waXBlKGh0KCgoKT0+e2NvbnN0IG49dGhpcy5fZXh0cmFjdEljb25XaXRoTmFtZUZyb21BbnlTZXQodCxlKTtpZighbil0aHJvdyBLVyh0KTtyZXR1cm4gbn0pKSl9X2V4dHJhY3RJY29uV2l0aE5hbWVGcm9tQW55U2V0KHQsZSl7Zm9yKGxldCBuPWUubGVuZ3RoLTE7bj49MDtuLS0pe2NvbnN0IG89ZVtuXTtpZihvLnN2Z1RleHQmJm8uc3ZnVGV4dC5pbmRleE9mKHQpPi0xKXtjb25zdCBlPXRoaXMuX3N2Z0VsZW1lbnRGcm9tQ29uZmlnKG8pLG49dGhpcy5fZXh0cmFjdFN2Z0ljb25Gcm9tU2V0KGUsdCxvLm9wdGlvbnMpO2lmKG4pcmV0dXJuIG59fXJldHVybiBudWxsfV9sb2FkU3ZnSWNvbkZyb21Db25maWcodCl7cmV0dXJuIHRoaXMuX2ZldGNoSWNvbih0KS5waXBlKF9uKChlPT50LnN2Z1RleHQ9ZSkpLGh0KCgoKT0+dGhpcy5fc3ZnRWxlbWVudEZyb21Db25maWcodCkpKSl9X2xvYWRTdmdJY29uU2V0RnJvbUNvbmZpZyh0KXtyZXR1cm4gdC5zdmdUZXh0P1oobnVsbCk6dGhpcy5fZmV0Y2hJY29uKHQpLnBpcGUoX24oKGU9PnQuc3ZnVGV4dD1lKSkpfV9leHRyYWN0U3ZnSWNvbkZyb21TZXQodCxlLG4pe2NvbnN0IG89dC5xdWVyeVNlbGVjdG9yKGBbaWQ9IiR7ZX0iXWApO2lmKCFvKXJldHVybiBudWxsO2NvbnN0IGk9by5jbG9uZU5vZGUoITApO2lmKGkucmVtb3ZlQXR0cmlidXRlKCJpZCIpLCJzdmciPT09aS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXJldHVybiB0aGlzLl9zZXRTdmdBdHRyaWJ1dGVzKGksbik7aWYoInN5bWJvbCI9PT1pLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpcmV0dXJuIHRoaXMuX3NldFN2Z0F0dHJpYnV0ZXModGhpcy5fdG9TdmdFbGVtZW50KGkpLG4pO2NvbnN0IGE9dGhpcy5fc3ZnRWxlbWVudEZyb21TdHJpbmcoIjxzdmc+PC9zdmc+Iik7cmV0dXJuIGEuYXBwZW5kQ2hpbGQoaSksdGhpcy5fc2V0U3ZnQXR0cmlidXRlcyhhLG4pfV9zdmdFbGVtZW50RnJvbVN0cmluZyh0KXtjb25zdCBlPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpO2UuaW5uZXJIVE1MPXQ7Y29uc3Qgbj1lLnF1ZXJ5U2VsZWN0b3IoInN2ZyIpO2lmKCFuKXRocm93IEVycm9yKCI8c3ZnPiB0YWcgbm90IGZvdW5kIik7cmV0dXJuIG59X3RvU3ZnRWxlbWVudCh0KXtjb25zdCBlPXRoaXMuX3N2Z0VsZW1lbnRGcm9tU3RyaW5nKCI8c3ZnPjwvc3ZnPiIpLG49dC5hdHRyaWJ1dGVzO2ZvcihsZXQgdD0wO3Q8bi5sZW5ndGg7dCsrKXtjb25zdHtuYW1lOm8sdmFsdWU6aX09blt0XTsiaWQiIT09byYmZS5zZXRBdHRyaWJ1dGUobyxpKX1mb3IobGV0IG49MDtuPHQuY2hpbGROb2Rlcy5sZW5ndGg7bisrKXQuY2hpbGROb2Rlc1tuXS5ub2RlVHlwZT09PXRoaXMuX2RvY3VtZW50LkVMRU1FTlRfTk9ERSYmZS5hcHBlbmRDaGlsZCh0LmNoaWxkTm9kZXNbbl0uY2xvbmVOb2RlKCEwKSk7cmV0dXJuIGV9X3NldFN2Z0F0dHJpYnV0ZXModCxlKXtyZXR1cm4gdC5zZXRBdHRyaWJ1dGUoImZpdCIsIiIpLHQuc2V0QXR0cmlidXRlKCJoZWlnaHQiLCIxMDAlIiksdC5zZXRBdHRyaWJ1dGUoIndpZHRoIiwiMTAwJSIpLHQuc2V0QXR0cmlidXRlKCJwcmVzZXJ2ZUFzcGVjdFJhdGlvIiwieE1pZFlNaWQgbWVldCIpLHQuc2V0QXR0cmlidXRlKCJmb2N1c2FibGUiLCJmYWxzZSIpLGUmJmUudmlld0JveCYmdC5zZXRBdHRyaWJ1dGUoInZpZXdCb3giLGUudmlld0JveCksdH1fZmV0Y2hJY29uKHQpe3ZhciBlO2NvbnN0e3VybDpuLG9wdGlvbnM6b309dCxpPW51bGwhPT0oZT1udWxsPT1vP3ZvaWQgMDpvLndpdGhDcmVkZW50aWFscykmJnZvaWQgMCE9PWUmJmU7aWYoIXRoaXMuX2h0dHBDbGllbnQpdGhyb3coZnVuY3Rpb24gYSgpe3JldHVybiBFcnJvcigiQ291bGQgbm90IGZpbmQgSHR0cENsaWVudCBwcm92aWRlciBmb3IgdXNlIHdpdGggQW5ndWxhciBNYXRlcmlhbCBpY29ucy4gUGxlYXNlIGluY2x1ZGUgdGhlIEh0dHBDbGllbnRNb2R1bGUgZnJvbSBAYW5ndWxhci9jb21tb24vaHR0cCBpbiB5b3VyIGFwcCBpbXBvcnRzLiIpfSkoKTtpZihudWxsPT1uKXRocm93IEVycm9yKGBDYW5ub3QgZmV0Y2ggaWNvbiBmcm9tIFVSTCAiJHtufSIuYCk7Y29uc3Qgcj10aGlzLl9zYW5pdGl6ZXIuc2FuaXRpemUoeGwuUkVTT1VSQ0VfVVJMLG4pO2lmKCFyKXRocm93IEpXKG4pO2NvbnN0IHM9dGhpcy5faW5Qcm9ncmVzc1VybEZldGNoZXMuZ2V0KHIpO2lmKHMpcmV0dXJuIHM7Y29uc3QgbD10aGlzLl9odHRwQ2xpZW50LmdldChyLHtyZXNwb25zZVR5cGU6InRleHQiLHdpdGhDcmVkZW50aWFsczppfSkucGlwZSgoZnVuY3Rpb24gYyh0KXtyZXR1cm4gZT0+ZS5saWZ0KG5ldyBCZSh0KSl9KSgoKCk9PnRoaXMuX2luUHJvZ3Jlc3NVcmxGZXRjaGVzLmRlbGV0ZShyKSkpLG9uKCkpO3JldHVybiB0aGlzLl9pblByb2dyZXNzVXJsRmV0Y2hlcy5zZXQocixsKSxsfV9hZGRTdmdJY29uQ29uZmlnKHQsZSxuKXtyZXR1cm4gdGhpcy5fc3ZnSWNvbkNvbmZpZ3Muc2V0KG5HKHQsZSksbiksdGhpc31fYWRkU3ZnSWNvblNldENvbmZpZyh0LGUpe2NvbnN0IG49dGhpcy5faWNvblNldENvbmZpZ3MuZ2V0KHQpO3JldHVybiBuP24ucHVzaChlKTp0aGlzLl9pY29uU2V0Q29uZmlncy5zZXQodCxbZV0pLHRoaXN9X3N2Z0VsZW1lbnRGcm9tQ29uZmlnKHQpe2lmKCF0LnN2Z0VsZW1lbnQpe2NvbnN0IGU9dGhpcy5fc3ZnRWxlbWVudEZyb21TdHJpbmcodC5zdmdUZXh0KTt0aGlzLl9zZXRTdmdBdHRyaWJ1dGVzKGUsdC5vcHRpb25zKSx0LnN2Z0VsZW1lbnQ9ZX1yZXR1cm4gdC5zdmdFbGVtZW50fV9nZXRJY29uQ29uZmlnRnJvbVJlc29sdmVycyh0LGUpe2ZvcihsZXQgbz0wO288dGhpcy5fcmVzb2x2ZXJzLmxlbmd0aDtvKyspe2NvbnN0IGk9dGhpcy5fcmVzb2x2ZXJzW29dKGUsdCk7aWYoaSlyZXR1cm4obj1pKS51cmwmJm4ub3B0aW9ucz9uZXcgJFcoaS51cmwsbnVsbCxpLm9wdGlvbnMpOm5ldyAkVyhpLG51bGwpfXZhciBuOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi99fWZ1bmN0aW9uIGVHKHQpe3JldHVybiB0LmNsb25lTm9kZSghMCl9ZnVuY3Rpb24gbkcodCxlKXtyZXR1cm4gdCsiOiIrZX10Ry7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8dEcpKHVzKHFELDgpLHVzKFN4KSx1cyhVQyw4KSx1cyhFbCkpfSx0Ry7JtXByb3Y9bG8oe2ZhY3Rvcnk6ZnVuY3Rpb24gdCgpe3JldHVybiBuZXcgdEcodXMocUQsOCksdXMoU3gpLHVzKFVDLDgpLHVzKEVsKSl9LHRva2VuOnRHLHByb3ZpZGVkSW46InJvb3QifSksdEcuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpxRCxkZWNvcmF0b3JzOlt7dHlwZTpfc31dfSx7dHlwZTpTeH0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltVQ119XX0se3R5cGU6RWx9XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHRHLFt7dHlwZTpKbSxhcmdzOlt7cHJvdmlkZWRJbjoicm9vdCJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpxRCxkZWNvcmF0b3JzOlt7dHlwZTpfc31dfSx7dHlwZTpTeH0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltVQ119XX0se3R5cGU6RWx9XX0pLG51bGwpLG5ldyBfcyxuZXcgTXMsbmV3IF9zLG5ldyBfcztjb25zdCBvRz1JeihjbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLl9lbGVtZW50UmVmPXR9fSksaUc9bmV3IE5yKCJtYXQtaWNvbi1sb2NhdGlvbiIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24gYUcoKXtjb25zdCB0PWdzKFVDKSxlPXQ/dC5sb2NhdGlvbjpudWxsO3JldHVybntnZXRQYXRobmFtZTooKT0+ZT9lLnBhdGhuYW1lK2Uuc2VhcmNoOiIifX19KSxyRz1bImNsaXAtcGF0aCIsImNvbG9yLXByb2ZpbGUiLCJzcmMiLCJjdXJzb3IiLCJmaWxsIiwiZmlsdGVyIiwibWFya2VyIiwibWFya2VyLXN0YXJ0IiwibWFya2VyLW1pZCIsIm1hcmtlci1lbmQiLCJtYXNrIiwic3Ryb2tlIl0sc0c9ckcubWFwKCh0PT5gWyR7dH1dYCkpLmpvaW4oIiwgIiksbEc9L151cmxcKFsnIl0/IyguKj8pWyciXT9cKSQvO2NsYXNzIGNHIGV4dGVuZHMgb0d7Y29uc3RydWN0b3IodCxlLG4sbyxpKXtzdXBlcih0KSx0aGlzLl9pY29uUmVnaXN0cnk9ZSx0aGlzLl9sb2NhdGlvbj1vLHRoaXMuX2Vycm9ySGFuZGxlcj1pLHRoaXMuX2lubGluZT0hMSx0aGlzLl9jdXJyZW50SWNvbkZldGNoPWwuRU1QVFksbnx8dC5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCJ0cnVlIil9Z2V0IGlubGluZSgpe3JldHVybiB0aGlzLl9pbmxpbmV9c2V0IGlubGluZSh0KXt0aGlzLl9pbmxpbmU9ckkodCl9Z2V0IHN2Z0ljb24oKXtyZXR1cm4gdGhpcy5fc3ZnSWNvbn1zZXQgc3ZnSWNvbih0KXt0IT09dGhpcy5fc3ZnSWNvbiYmKHQ/dGhpcy5fdXBkYXRlU3ZnSWNvbih0KTp0aGlzLl9zdmdJY29uJiZ0aGlzLl9jbGVhclN2Z0VsZW1lbnQoKSx0aGlzLl9zdmdJY29uPXQpfWdldCBmb250U2V0KCl7cmV0dXJuIHRoaXMuX2ZvbnRTZXR9c2V0IGZvbnRTZXQodCl7Y29uc3QgZT10aGlzLl9jbGVhbnVwRm9udFZhbHVlKHQpO2UhPT10aGlzLl9mb250U2V0JiYodGhpcy5fZm9udFNldD1lLHRoaXMuX3VwZGF0ZUZvbnRJY29uQ2xhc3NlcygpKX1nZXQgZm9udEljb24oKXtyZXR1cm4gdGhpcy5fZm9udEljb259c2V0IGZvbnRJY29uKHQpe2NvbnN0IGU9dGhpcy5fY2xlYW51cEZvbnRWYWx1ZSh0KTtlIT09dGhpcy5fZm9udEljb24mJih0aGlzLl9mb250SWNvbj1lLHRoaXMuX3VwZGF0ZUZvbnRJY29uQ2xhc3NlcygpKX1fc3BsaXRJY29uTmFtZSh0KXtpZighdClyZXR1cm5bIiIsIiJdO2NvbnN0IGU9dC5zcGxpdCgiOiIpO3N3aXRjaChlLmxlbmd0aCl7Y2FzZSAxOnJldHVyblsiIixlWzBdXTtjYXNlIDI6cmV0dXJuIGU7ZGVmYXVsdDp0aHJvdyBFcnJvcihgSW52YWxpZCBpY29uIG5hbWU6ICIke3R9ImApfX1uZ09uSW5pdCgpe3RoaXMuX3VwZGF0ZUZvbnRJY29uQ2xhc3NlcygpfW5nQWZ0ZXJWaWV3Q2hlY2tlZCgpe2NvbnN0IHQ9dGhpcy5fZWxlbWVudHNXaXRoRXh0ZXJuYWxSZWZlcmVuY2VzO2lmKHQmJnQuc2l6ZSl7Y29uc3QgdD10aGlzLl9sb2NhdGlvbi5nZXRQYXRobmFtZSgpO3QhPT10aGlzLl9wcmV2aW91c1BhdGgmJih0aGlzLl9wcmV2aW91c1BhdGg9dCx0aGlzLl9wcmVwZW5kUGF0aFRvUmVmZXJlbmNlcyh0KSl9fW5nT25EZXN0cm95KCl7dGhpcy5fY3VycmVudEljb25GZXRjaC51bnN1YnNjcmliZSgpLHRoaXMuX2VsZW1lbnRzV2l0aEV4dGVybmFsUmVmZXJlbmNlcyYmdGhpcy5fZWxlbWVudHNXaXRoRXh0ZXJuYWxSZWZlcmVuY2VzLmNsZWFyKCl9X3VzaW5nRm9udEljb24oKXtyZXR1cm4hdGhpcy5zdmdJY29ufV9zZXRTdmdFbGVtZW50KHQpe3RoaXMuX2NsZWFyU3ZnRWxlbWVudCgpO2NvbnN0IGU9dC5xdWVyeVNlbGVjdG9yQWxsKCJzdHlsZSIpO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKWVbdF0udGV4dENvbnRlbnQrPSIgIjtjb25zdCBuPXRoaXMuX2xvY2F0aW9uLmdldFBhdGhuYW1lKCk7dGhpcy5fcHJldmlvdXNQYXRoPW4sdGhpcy5fY2FjaGVDaGlsZHJlbldpdGhFeHRlcm5hbFJlZmVyZW5jZXModCksdGhpcy5fcHJlcGVuZFBhdGhUb1JlZmVyZW5jZXMobiksdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKHQpfV9jbGVhclN2Z0VsZW1lbnQoKXtjb25zdCB0PXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtsZXQgZT10LmNoaWxkTm9kZXMubGVuZ3RoO2Zvcih0aGlzLl9lbGVtZW50c1dpdGhFeHRlcm5hbFJlZmVyZW5jZXMmJnRoaXMuX2VsZW1lbnRzV2l0aEV4dGVybmFsUmVmZXJlbmNlcy5jbGVhcigpO2UtLTspe2NvbnN0IG49dC5jaGlsZE5vZGVzW2VdOzE9PT1uLm5vZGVUeXBlJiYic3ZnIiE9PW4ubm9kZU5hbWUudG9Mb3dlckNhc2UoKXx8dC5yZW1vdmVDaGlsZChuKX19X3VwZGF0ZUZvbnRJY29uQ2xhc3Nlcygpe2lmKCF0aGlzLl91c2luZ0ZvbnRJY29uKCkpcmV0dXJuO2NvbnN0IHQ9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LGU9dGhpcy5mb250U2V0P3RoaXMuX2ljb25SZWdpc3RyeS5jbGFzc05hbWVGb3JGb250QWxpYXModGhpcy5mb250U2V0KTp0aGlzLl9pY29uUmVnaXN0cnkuZ2V0RGVmYXVsdEZvbnRTZXRDbGFzcygpO2UhPXRoaXMuX3ByZXZpb3VzRm9udFNldENsYXNzJiYodGhpcy5fcHJldmlvdXNGb250U2V0Q2xhc3MmJnQuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLl9wcmV2aW91c0ZvbnRTZXRDbGFzcyksZSYmdC5jbGFzc0xpc3QuYWRkKGUpLHRoaXMuX3ByZXZpb3VzRm9udFNldENsYXNzPWUpLHRoaXMuZm9udEljb24hPXRoaXMuX3ByZXZpb3VzRm9udEljb25DbGFzcyYmKHRoaXMuX3ByZXZpb3VzRm9udEljb25DbGFzcyYmdC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuX3ByZXZpb3VzRm9udEljb25DbGFzcyksdGhpcy5mb250SWNvbiYmdC5jbGFzc0xpc3QuYWRkKHRoaXMuZm9udEljb24pLHRoaXMuX3ByZXZpb3VzRm9udEljb25DbGFzcz10aGlzLmZvbnRJY29uKX1fY2xlYW51cEZvbnRWYWx1ZSh0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/dC50cmltKCkuc3BsaXQoIiAiKVswXTp0fV9wcmVwZW5kUGF0aFRvUmVmZXJlbmNlcyh0KXtjb25zdCBlPXRoaXMuX2VsZW1lbnRzV2l0aEV4dGVybmFsUmVmZXJlbmNlcztlJiZlLmZvckVhY2goKChlLG4pPT57ZS5mb3JFYWNoKChlPT57bi5zZXRBdHRyaWJ1dGUoZS5uYW1lLGB1cmwoJyR7dH0jJHtlLnZhbHVlfScpYCl9KSl9KSl9X2NhY2hlQ2hpbGRyZW5XaXRoRXh0ZXJuYWxSZWZlcmVuY2VzKHQpe2NvbnN0IGU9dC5xdWVyeVNlbGVjdG9yQWxsKHNHKSxuPXRoaXMuX2VsZW1lbnRzV2l0aEV4dGVybmFsUmVmZXJlbmNlcz10aGlzLl9lbGVtZW50c1dpdGhFeHRlcm5hbFJlZmVyZW5jZXN8fG5ldyBNYXA7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0KyspckcuZm9yRWFjaCgobz0+e2NvbnN0IGk9ZVt0XSxhPWkuZ2V0QXR0cmlidXRlKG8pLHI9YT9hLm1hdGNoKGxHKTpudWxsO2lmKHIpe2xldCB0PW4uZ2V0KGkpO3R8fCh0PVtdLG4uc2V0KGksdCkpLHQucHVzaCh7bmFtZTpvLHZhbHVlOnJbMV19KX19KSl9X3VwZGF0ZVN2Z0ljb24odCl7aWYodGhpcy5fc3ZnTmFtZXNwYWNlPW51bGwsdGhpcy5fc3ZnTmFtZT1udWxsLHRoaXMuX2N1cnJlbnRJY29uRmV0Y2gudW5zdWJzY3JpYmUoKSx0KXtjb25zdFtlLG5dPXRoaXMuX3NwbGl0SWNvbk5hbWUodCk7ZSYmKHRoaXMuX3N2Z05hbWVzcGFjZT1lKSxuJiYodGhpcy5fc3ZnTmFtZT1uKSx0aGlzLl9jdXJyZW50SWNvbkZldGNoPXRoaXMuX2ljb25SZWdpc3RyeS5nZXROYW1lZFN2Z0ljb24obixlKS5waXBlKE5lKDEpKS5zdWJzY3JpYmUoKHQ9PnRoaXMuX3NldFN2Z0VsZW1lbnQodCkpLCh0PT57dGhpcy5fZXJyb3JIYW5kbGVyLmhhbmRsZUVycm9yKG5ldyBFcnJvcihgRXJyb3IgcmV0cmlldmluZyBpY29uICR7ZX06JHtufSEgJHt0Lm1lc3NhZ2V9YCkpfSkpfX19Y0cuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGNHKShNdShjaCksTXUodEcpLE9yKCJhcmlhLWhpZGRlbiIpLE11KGlHKSxNdShFbCkpfSxjRy7JtWNtcD1Vbyh7dHlwZTpjRyxzZWxlY3RvcnM6W1sibWF0LWljb24iXV0saG9zdEF0dHJzOlsicm9sZSIsImltZyIsMSwibWF0LWljb24iLCJub3RyYW5zbGF0ZSJdLGhvc3RWYXJzOjcsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsyJmUmJihObSgiZGF0YS1tYXQtaWNvbi10eXBlIixuLl91c2luZ0ZvbnRJY29uKCk/ImZvbnQiOiJzdmciKSgiZGF0YS1tYXQtaWNvbi1uYW1lIixuLl9zdmdOYW1lfHxuLmZvbnRJY29uKSgiZGF0YS1tYXQtaWNvbi1uYW1lc3BhY2UiLG4uX3N2Z05hbWVzcGFjZXx8bi5mb250U2V0KSxhZigibWF0LWljb24taW5saW5lIixuLmlubGluZSkoIm1hdC1pY29uLW5vLWNvbG9yIiwicHJpbWFyeSIhPT1uLmNvbG9yJiYiYWNjZW50IiE9PW4uY29sb3ImJiJ3YXJuIiE9PW4uY29sb3IpKX0saW5wdXRzOntjb2xvcjoiY29sb3IiLGlubGluZToiaW5saW5lIixzdmdJY29uOiJzdmdJY29uIixmb250U2V0OiJmb250U2V0Iixmb250SWNvbjoiZm9udEljb24ifSxleHBvcnRBczpbIm1hdEljb24iXSxmZWF0dXJlczpbZ21dLG5nQ29udGVudFNlbGVjdG9yczpbIioiXSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoVnUoKSxqdSgwKSl9LHN0eWxlczpbIi5tYXQtaWNvbntiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7ZmlsbDpjdXJyZW50Q29sb3I7aGVpZ2h0OjI0cHg7d2lkdGg6MjRweH0ubWF0LWljb24ubWF0LWljb24taW5saW5le2ZvbnQtc2l6ZTppbmhlcml0O2hlaWdodDppbmhlcml0O2xpbmUtaGVpZ2h0OmluaGVyaXQ7d2lkdGg6aW5oZXJpdH1bZGlyPXJ0bF0gLm1hdC1pY29uLXJ0bC1taXJyb3J7dHJhbnNmb3JtOnNjYWxlKC0xLCAxKX0ubWF0LWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSkgLm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24sLm1hdC1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kpIC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29ue2Rpc3BsYXk6YmxvY2t9Lm1hdC1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kpIC5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLWJ1dHRvbiAubWF0LWljb24sLm1hdC1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kpIC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29uLWJ1dHRvbiAubWF0LWljb257bWFyZ2luOmF1dG99XG4iXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxjRy5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmNofSx7dHlwZTp0R30se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOlJyLGFyZ3M6WyJhcmlhLWhpZGRlbiJdfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltpR119XX0se3R5cGU6RWx9XSxjRy5wcm9wRGVjb3JhdG9ycz17aW5saW5lOlt7dHlwZTp5X31dLHN2Z0ljb246W3t0eXBlOnlffV0sZm9udFNldDpbe3R5cGU6eV99XSxmb250SWNvbjpbe3R5cGU6eV99XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihjRyxbe3R5cGU6aF8sYXJnczpbe3RlbXBsYXRlOiI8bmctY29udGVudD48L25nLWNvbnRlbnQ+IixzZWxlY3RvcjoibWF0LWljb24iLGV4cG9ydEFzOiJtYXRJY29uIixpbnB1dHM6WyJjb2xvciJdLGhvc3Q6e3JvbGU6ImltZyIsY2xhc3M6Im1hdC1pY29uIG5vdHJhbnNsYXRlIiwiW2F0dHIuZGF0YS1tYXQtaWNvbi10eXBlXSI6J191c2luZ0ZvbnRJY29uKCkgPyAiZm9udCIgOiAic3ZnIicsIlthdHRyLmRhdGEtbWF0LWljb24tbmFtZV0iOiJfc3ZnTmFtZSB8fCBmb250SWNvbiIsIlthdHRyLmRhdGEtbWF0LWljb24tbmFtZXNwYWNlXSI6Il9zdmdOYW1lc3BhY2UgfHwgZm9udFNldCIsIltjbGFzcy5tYXQtaWNvbi1pbmxpbmVdIjoiaW5saW5lIiwiW2NsYXNzLm1hdC1pY29uLW5vLWNvbG9yXSI6J2NvbG9yICE9PSAicHJpbWFyeSIgJiYgY29sb3IgIT09ICJhY2NlbnQiICYmIGNvbG9yICE9PSAid2FybiInfSxlbmNhcHN1bGF0aW9uOlBvLk5vbmUsY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaCxzdHlsZXM6WyIubWF0LWljb257YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZpbGw6Y3VycmVudENvbG9yO2hlaWdodDoyNHB4O3dpZHRoOjI0cHh9Lm1hdC1pY29uLm1hdC1pY29uLWlubGluZXtmb250LXNpemU6aW5oZXJpdDtoZWlnaHQ6aW5oZXJpdDtsaW5lLWhlaWdodDppbmhlcml0O3dpZHRoOmluaGVyaXR9W2Rpcj1ydGxdIC5tYXQtaWNvbi1ydGwtbWlycm9ye3RyYW5zZm9ybTpzY2FsZSgtMSwgMSl9Lm1hdC1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kpIC5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLC5tYXQtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5KSAubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbntkaXNwbGF5OmJsb2NrfS5tYXQtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5KSAubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29uLC5tYXQtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5KSAubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29ue21hcmdpbjphdXRvfVxuIl19XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpjaH0se3R5cGU6dEd9LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpScixhcmdzOlsiYXJpYS1oaWRkZW4iXX1dfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbaUddfV19LHt0eXBlOkVsfV19KSx7aW5saW5lOlt7dHlwZTp5X31dLHN2Z0ljb246W3t0eXBlOnlffV0sZm9udFNldDpbe3R5cGU6eV99XSxmb250SWNvbjpbe3R5cGU6eV99XX0pOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3MgZEd7fWRHLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxkRyl9LGRHLsm1bW9kPVpvKHt0eXBlOmRHfSksZEcuybVpbmo9Y28oe2ltcG9ydHM6W1tUel0sVHpdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhkRyx7ZGVjbGFyYXRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuW2NHXX0saW1wb3J0czpmdW5jdGlvbigpe3JldHVybltUel19LGV4cG9ydHM6ZnVuY3Rpb24oKXtyZXR1cm5bY0csVHpdfX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoZEcsW3t0eXBlOmtfLGFyZ3M6W3tpbXBvcnRzOltUel0sZXhwb3J0czpbY0csVHpdLGRlY2xhcmF0aW9uczpbY0ddfV19XSxudWxsLG51bGwpO2NsYXNzIHBHe2NvbnN0cnVjdG9yKHQpe3RoaXMuZGlhbG9nUmVmPXQsdGhpcy50ZW5zb3Jib2FyZERvdERldlVybD0iaHR0cHM6Ly90ZW5zb3Jib2FyZC5kZXYvP3V0bV9zb3VyY2U9dGVuc29yYm9hcmQifW9uQ2xvc2UoKXt0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpfWdldENvbW1hbmRUZXh0KCl7cmV0dXJuIHRoaXMubG9nZGlyPyJ0ZW5zb3Jib2FyZCBkZXYgdXBsb2FkIC0tbG9nZGlyIFxcXG4gICAgJyIrdGhpcy5sb2dkaXIucmVwbGFjZSgvJy9nLCInXFwnJyIpKyInIjoidGVuc29yYm9hcmQgZGV2IHVwbG9hZCAtLWxvZ2RpciB7bG9nZGlyfSJ9fXBHLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxwRykoTXUoRFcpKX0scEcuybVjbXA9VW8oe3R5cGU6cEcsc2VsZWN0b3JzOltbInRiZGV2LXVwbG9hZC1kaWFsb2ctY29tcG9uZW50Il1dLGlucHV0czp7bG9nZGlyOiJsb2dkaXIifSxkZWNsczoyMSx2YXJzOjQsY29uc3RzOltbInRhcmdldCIsIl9ibGFuayIsInJlbCIsIm5vcmVmZXJyZXIgbm9vcGVuZXIiLDEsImFuY2hvci10ZXh0IiwzLCJocmVmIl0sWzEsImNvbW1hbmQiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsInRpdGxlIiwiQ2xpY2sgdG8gY29weSB0aGUgY29tbWFuZCIsMSwiY29tbWFuZC1jb3B5IiwzLCJjZGtDb3B5VG9DbGlwYm9hcmQiXSxbInN2Z0ljb24iLCJjb250ZW50X2NvcHlfMjRweCJdLFsxLCJib3R0b20tYnV0dG9ucyJdLFsibWF0LWZsYXQtYnV0dG9uIiwiIiwxLCJjbG9zZS1idXR0b24iLDMsImNsaWNrIl0sWyJtYXQtZmxhdC1idXR0b24iLCIiLCJ0YXJnZXQiLCJfYmxhbmsiLCJyZWwiLCJub3JlZmVycmVyIG5vb3BlbmVyIiwxLCJsZWFybi1tb3JlLWJ1dHRvbiIsMywiaHJlZiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoT3UoMCwiaDMiKSxNZigxLCJVcGxvYWQgdG8gVGVuc29yQm9hcmQuZGV2IiksUHUoKSxPdSgyLCJwIiksT3UoMywiYSIsMCksTWYoNCwiIFRlbnNvckJvYXJkLmRldiIpLFB1KCksTWYoNSwiIGVuYWJsZXMgeW91IHRvIGVhc2lseSBob3N0LCB0cmFjaywgYW5kIHNoYXJlIHlvdXIgTUwgZXhwZXJpbWVudHMgd2l0aCBldmVyeW9uZS4gWW91IGNhbiBzaGFyZSBhIGxpbmsgdG8gdGhlIHVwbG9hZGVkIFRlbnNvckJvYXJkIGluIHBhcGVycywgYmxvZyBwb3N0cywgYW5kIHNvY2lhbCBtZWRpYS4gVGhpcyBjYW4gc2hvd2Nhc2UgdGhlIHJlc3VsdHMgbW9yZSBlZmZlY3RpdmVseSBhbmQgaGVscHMgcmVwcm9kdWNpYmlsaXR5LlxuIiksUHUoKSxPdSg2LCJwIiksTWYoNywiVG8gdXBsb2FkIGEgbG9nZGlyIHRvIFRlbnNvckJvYXJkLmRldiwgcnVuIHRoZSBjb21tYW5kOiIpLFB1KCksT3UoOCwiZGl2IiwxKSxPdSg5LCJwcmUiKSxPdSgxMCwiY29kZSIpLE1mKDExKSxQdSgpLFB1KCksT3UoMTIsImJ1dHRvbiIsMiksd3UoMTMsIm1hdC1pY29uIiwzKSxQdSgpLFB1KCksT3UoMTQsInAiKSxNZigxNSwiIE9ubHkgY2VydGFpbiBwbHVnaW5zIGFyZSBjdXJyZW50bHkgc3VwcG9ydGVkLiBVcGxvYWRlZCBUZW5zb3JCb2FyZHMgYXJlIHB1YmxpYyBhbmQgdmlzaWJsZSB0byBldmVyeW9uZTsgZG8gbm90IHVwbG9hZCBzZW5zaXRpdmUgZGF0YS5cbiIpLFB1KCksT3UoMTYsImRpdiIsNCksT3UoMTcsImJ1dHRvbiIsNSksTnUoImNsaWNrIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uQ2xvc2UoKX0pKSxNZigxOCwiIENsb3NlICIpLFB1KCksT3UoMTksImEiLDYpLE1mKDIwLCIgTGVhcm4gbW9yZSAiKSxQdSgpLFB1KCkpLDImZSYmKEpjKDMpLFV1KCJocmVmIixuLnRlbnNvcmJvYXJkRG90RGV2VXJsLE9sKSxKYyg4KSx2ZihuLmdldENvbW1hbmRUZXh0KCkpLEpjKDEpLHZ1KCJjZGtDb3B5VG9DbGlwYm9hcmQiLG4uZ2V0Q29tbWFuZFRleHQoKSksSmMoNyksVXUoImhyZWYiLG4udGVuc29yYm9hcmREb3REZXZVcmwsT2wpKX0sZGlyZWN0aXZlczpbTkgsWlcsY0csSUhdLHN0eWxlczpbJy5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHh9Lm1hdC1oMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaGVhZGxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTVweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZ1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjA1ZW07bWFyZ2luOjAgMCA1NnB4fS5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAwNWVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXJhaXNlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdHJva2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmxhdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZhYltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbWluaS1mYWJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4fS5tYXQtY2FyZC1zdWJ0aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGVja2JveC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvb3Rlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgdHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIzZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LjU0MTY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2NjY2NjY3ZW0pfUBtZWRpYSBwcmludHsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjJlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouMjVlbSAwIC43NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxZW0gMCAxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMiksIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi0wLjA2MjVlbX0ubWF0LW1lbnUtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci12ZXJ0aWNhbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGFiLWxpbmtbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MH0ubWF0LXRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5Om5vbmV9LmNkay12aXN1YWxseS1oaWRkZW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjZ9LmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV0sIC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3hbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2tbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHt9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7fS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOi13ZWJraXQtYXV0b2ZpbGwpe2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZVtfbmdjb250ZW50LSVDT01QJV17cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fS5tYXQtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfWRpdltfbmdjb250ZW50LSVDT01QJV0sIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjoxNnB4IDB9W19uZ2hvc3QtJUNPTVAlXSA+IFtfbmdjb250ZW50LSVDT01QJV06Zmlyc3QtY2hpbGR7bWFyZ2luLXRvcDowfVtfbmdob3N0LSVDT01QJV0gPiBbX25nY29udGVudC0lQ09NUCVdOmxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfWgzW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDA7bGluZS1oZWlnaHQ6MS41fXBbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiMyMTIxMjE7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MS41fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojZmZmfS5hbmNob3ItdGV4dFtfbmdjb250ZW50LSVDT01QJV17dGV4dC1kZWNvcmF0aW9uOm5vbmV9LmNvbW1hbmRbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kOiNmNWY2Zjc7Ym9yZGVyLXJhZGl1czo0cHg7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO3BhZGRpbmc6MnB4IDEycHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmNvbW1hbmRbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuY29tbWFuZFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojNjE2MTYxfXByZVtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3cteDphdXRvfWNvZGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjEuNX0uYm90dG9tLWJ1dHRvbnNbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5jbG9zZS1idXR0b25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO21hcmdpbi1yaWdodDo4cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmNsb3NlLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5jbG9zZS1idXR0b25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfVtfbmdob3N0LSVDT01QJV0gICAubGVhcm4tbW9yZS1idXR0b25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOiMxOTc2ZDI7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5sZWFybi1tb3JlLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzQyYTVmNX0nXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIocEcsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoidGJkZXYtdXBsb2FkLWRpYWxvZy1jb21wb25lbnQiLHRlbXBsYXRlVXJsOiIuL3RiZGV2X3VwbG9hZF9kaWFsb2dfY29tcG9uZW50Lm5nLmh0bWwiLHN0eWxlVXJsczpbIi4vdGJkZXZfdXBsb2FkX2RpYWxvZ19jb21wb25lbnQuY3NzIl19XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpEV31dfSkse2xvZ2Rpcjpbe3R5cGU6eV99XX0pO2NvbnN0IG1HPXprKG1BLCh0PT50LmRhdGFfbG9jYXRpb24pKTtjbGFzcyB1R3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXQsdGhpcy5sb2dkaXIkPXRoaXMuc3RvcmUucGlwZShSayhtRykpfX1mdW5jdGlvbiBmRyh0LGUpe2lmKDEmdCl7Y29uc3QgdD1FdSgpO091KDAsImJ1dHRvbiIsMSksTnUoImNsaWNrIiwoZnVuY3Rpb24gZSgpe3JldHVybiByYSh0KSxMdSgpLm9wZW5EaWFsb2coKX0pKSxPdSgxLCJzcGFuIiwyKSx3dSgyLCJtYXQtaWNvbiIsMyksTWYoMywiIFVwbG9hZCAiKSxQdSgpLFB1KCl9fXVHLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHx1RykoTXUoRWspKX0sdUcuybVjbXA9VW8oe3R5cGU6dUcsc2VsZWN0b3JzOltbInRiZGV2LXVwbG9hZC1kaWFsb2ciXV0sZGVjbHM6Mix2YXJzOjMsY29uc3RzOltbMywibG9nZGlyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJih3dSgwLCJ0YmRldi11cGxvYWQtZGlhbG9nLWNvbXBvbmVudCIsMCksT2IoMSwiYXN5bmMiKSksMiZlJiZ2dSgibG9nZGlyIixQYigxLDEsbi5sb2dkaXIkKSl9LGRpcmVjdGl2ZXM6W3BHXSxwaXBlczpbTXZdLGVuY2Fwc3VsYXRpb246Mn0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIodUcsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoidGJkZXYtdXBsb2FkLWRpYWxvZyIsdGVtcGxhdGU6J1xuICAgIDx0YmRldi11cGxvYWQtZGlhbG9nLWNvbXBvbmVudFxuICAgICAgW2xvZ2Rpcl09ImxvZ2RpciQgfCBhc3luYyJcbiAgICA+PC90YmRldi11cGxvYWQtZGlhbG9nLWNvbXBvbmVudD5cbiAgJ31dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkVrfV19KSxudWxsKTtjb25zdCBnRz1bImxvY2FsaG9zdCIsIjEyNy4wLjAuMSJdO2NsYXNzIGhHe2NvbnN0cnVjdG9yKHQsZSl7dGhpcy53aW5kb3c9dCx0aGlzLmRpYWxvZz1lLHRoaXMuc2hvd249Z0cuaW5jbHVkZXModC5sb2NhdGlvbi5ob3N0bmFtZSl9b3BlbkRpYWxvZygpe3RoaXMuZGlhbG9nLm9wZW4odUcse3dpZHRoOiI1NjBweCJ9KX19aEcuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGhHKShNdSgid2luZG93IiksTXUoSFcpKX0saEcuybVjbXA9VW8oe3R5cGU6aEcsc2VsZWN0b3JzOltbInRiZGV2LXVwbG9hZC1idXR0b24iXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezImZSYmYWYoInNob3duIixuLnNob3duKX0sZGVjbHM6MSx2YXJzOjEsY29uc3RzOltbIm1hdC1zdHJva2VkLWJ1dHRvbiIsIiIsMywiY2xpY2siLDQsIm5nSWYiXSxbIm1hdC1zdHJva2VkLWJ1dHRvbiIsIiIsMywiY2xpY2siXSxbMSwiYnV0dG9uLWNvbnRlbnRzIl0sWyJzdmdJY29uIiwiaW5mb19vdXRsaW5lXzI0cHgiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmV20oMCxmRyw0LDAsImJ1dHRvbiIsMCksMiZlJiZ2dSgibmdJZiIsbi5zaG93bil9LGRpcmVjdGl2ZXM6W2F2LE5ILGNHXSxzdHlsZXM6WycubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1iYWRnZS1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo5cHh9Lm1hdC1iYWRnZS1sYXJnZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4fS5tYXQtaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWhlYWRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAyNHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE1cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjgzKS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1oNltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC42NykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtYm9keS1zdHJvbmdbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MCAwIDEycHh9Lm1hdC1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FwdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTJweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6MzAwIDExMnB4LzExMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wNWVtO21hcmdpbjowIDAgNTZweH0ubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNTZweC81NnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMmVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNDVweC80OHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMDVlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDM0cHgvNDBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1yYWlzZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3Ryb2tlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZsYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mYWJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW1pbmktZmFiW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtYnV0dG9uLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FyZC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjBweH0ubWF0LWNhcmQtc3VidGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hlY2tib3gtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC10cmFpbGluZy1pY29uLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC1yZW1vdmUubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxOHB4fS5tYXQtdGFibGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWhlYWRlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb290ZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jYWxlbmRhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FsZW5kYXItYm9keVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYWxlbmRhci1wZXJpb2QtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWRpYWxvZy10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTI1O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTUwJTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjVlbTt3aWR0aDoxLjVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW07bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41ZW0gMDtib3JkZXItdG9wOi44NDM3NWVtIHNvbGlkIHRyYW5zcGFyZW50fS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3RvcDotMC44NDM3NWVtO3BhZGRpbmctdG9wOi44NDM3NWVtfS5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjc1JTttYXJnaW4tdG9wOi42NjY2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNzkxNjY2NjY2N2VtKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAycHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyM2VtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzUzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi41NDE2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNjY2NjY2NjY2N2VtKX1AbWVkaWEgcHJpbnR7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIyZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIxZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMmVtKSBzY2FsZSgwLjc1KX19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjI1ZW0gMCAuNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4wOTM3NWVtO21hcmdpbi10b3A6LTAuNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MWVtIDAgMWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjg0Mzc1ZW07bWFyZ2luLXRvcDotMC4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH1pbnB1dC5tYXQtaW5wdXQtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDotMC4wNjI1ZW19Lm1hdC1tZW51LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1wYWdpbmF0b3JbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXBhZ2luYXRvci1wYWdlLXNpemVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3RbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXN0ZXBwZXItdmVydGljYWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc3RlcC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0Om5vcm1hbH0ubWF0LXN0ZXAtbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRhYi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjB9Lm1hdC10b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTZweH0ubWF0LW9wdGdyb3VwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LXNpbXBsZS1zbmFja2Jhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbltfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRyZWVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbmVzdGVkLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4fS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVdOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtcmlwcGxlLm1hdC1yaXBwbGUtdW5ib3VuZGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6NTAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7dHJhbnNmb3JtOnNjYWxlKDApfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpub25lfS5jZGstdmlzdWFsbHktaGlkZGVuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7bGVmdDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmVtcHR5e2Rpc3BsYXk6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LXBhbmVbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOmF1dG87Ym94LXNpemluZzpib3JkZXItYm94O3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7bWF4LXdpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlfS5jZGstb3ZlcmxheS1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKTtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5Oi42fS5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjMyKX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTowfS5jZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO292ZXJmbG93LXk6c2Nyb2xsfUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnR7fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5ke30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxse2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCAwcyAxbXN9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06bm90KDotd2Via2l0LWF1dG9maWxsKXthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIDBzIDFtc310ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemVbX25nY29udGVudC0lQ09NUCVde3Jlc2l6ZTpub25lfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmdbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OmF1dG8gIWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW4gIWltcG9ydGFudH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nLWZpcmVmb3hbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OjAgIWltcG9ydGFudH0ubWF0LWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX1bX25naG9zdC0lQ09NUCVdICAgYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwO2JvcmRlcjoxcHggc29saWQgI2ViZWJlYn1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBidXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9LmJ1dHRvbi1jb250ZW50c1tfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9bWF0LWljb25bX25nY29udGVudC0lQ09NUCVde21hcmdpbi1yaWdodDo2cHh9J119KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGhHLFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6InRiZGV2LXVwbG9hZC1idXR0b24iLHRlbXBsYXRlVXJsOiIuL3RiZGV2X3VwbG9hZF9idXR0b25fY29tcG9uZW50Lm5nLmh0bWwiLHN0eWxlVXJsczpbIi4vdGJkZXZfdXBsb2FkX2J1dHRvbl9jb21wb25lbnQuY3NzIl19XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpXaW5kb3csZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbIndpbmRvdyJdfV19LHt0eXBlOkhXfV19KSx7c2hvd246W3t0eXBlOkNfLGFyZ3M6WyJjbGFzcy5zaG93biJdfV19KTtjb25zdCBiRz1bIioiXTtmdW5jdGlvbiB5Ryh0LGUpe2lmKDEmdCl7Y29uc3QgdD1FdSgpO091KDAsImRpdiIsMCksTnUoImtleWRvd24iLChmdW5jdGlvbiBlKG4pe3JldHVybiByYSh0KSxMdSgpLl9oYW5kbGVLZXlkb3duKG4pfSkpKCJjbGljayIsKGZ1bmN0aW9uIGUoKXtyZXR1cm4gcmEodCksTHUoKS5jbG9zZWQuZW1pdCgiY2xpY2siKX0pKSgiQHRyYW5zZm9ybU1lbnUuc3RhcnQiLChmdW5jdGlvbiBlKG4pe3JldHVybiByYSh0KSxMdSgpLl9vbkFuaW1hdGlvblN0YXJ0KG4pfSkpKCJAdHJhbnNmb3JtTWVudS5kb25lIiwoZnVuY3Rpb24gZShuKXtyZXR1cm4gcmEodCksTHUoKS5fb25BbmltYXRpb25Eb25lKG4pfSkpLE91KDEsImRpdiIsMSksanUoMiksUHUoKSxQdSgpfWlmKDImdCl7Y29uc3QgdD1MdSgpO3Z1KCJpZCIsdC5wYW5lbElkKSgibmdDbGFzcyIsdC5fY2xhc3NMaXN0KSgiQHRyYW5zZm9ybU1lbnUiLHQuX3BhbmVsQW5pbWF0aW9uU3RhdGUpLE5tKCJhcmlhLWxhYmVsIix0LmFyaWFMYWJlbHx8bnVsbCkoImFyaWEtbGFiZWxsZWRieSIsdC5hcmlhTGFiZWxsZWRieXx8bnVsbCkoImFyaWEtZGVzY3JpYmVkYnkiLHQuYXJpYURlc2NyaWJlZGJ5fHxudWxsKX19Y29uc3QgX0c9e3RyYW5zZm9ybU1lbnU6S3goInRyYW5zZm9ybU1lbnUiLFt0Tygidm9pZCIsJHgoe29wYWNpdHk6MCx0cmFuc2Zvcm06InNjYWxlKDAuOCkifSkpLG5PKCJ2b2lkID0+IGVudGVyIixKeCgiMTIwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSkiLCR4KHtvcGFjaXR5OjEsdHJhbnNmb3JtOiJzY2FsZSgxKSJ9KSkpLG5PKCIqID0+IHZvaWQiLEp4KCIxMDBtcyAyNW1zIGxpbmVhciIsJHgoe29wYWNpdHk6MH0pKSldKSxmYWRlSW5JdGVtczpLeCgiZmFkZUluSXRlbXMiLFt0Tygic2hvd2luZyIsJHgoe29wYWNpdHk6MX0pKSxuTygidm9pZCA9PiAqIixbJHgoe29wYWNpdHk6MH0pLEp4KCI0MDBtcyAxMDBtcyBjdWJpYy1iZXppZXIoMC41NSwgMCwgMC41NSwgMC4yKSIpXSldKX0sQ0c9bmV3IE5yKCJNYXRNZW51Q29udGVudCIpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jbGFzcyBNR3tjb25zdHJ1Y3Rvcih0LGUsbixvLGksYSxyKXt0aGlzLl90ZW1wbGF0ZT10LHRoaXMuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1lLHRoaXMuX2FwcFJlZj1uLHRoaXMuX2luamVjdG9yPW8sdGhpcy5fdmlld0NvbnRhaW5lclJlZj1pLHRoaXMuX2RvY3VtZW50PWEsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9cix0aGlzLl9hdHRhY2hlZD1uZXcgeH1hdHRhY2godD17fSl7dGhpcy5fcG9ydGFsfHwodGhpcy5fcG9ydGFsPW5ldyBsRih0aGlzLl90ZW1wbGF0ZSx0aGlzLl92aWV3Q29udGFpbmVyUmVmKSksdGhpcy5kZXRhY2goKSx0aGlzLl9vdXRsZXR8fCh0aGlzLl9vdXRsZXQ9bmV3IHBGKHRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcix0aGlzLl9hcHBSZWYsdGhpcy5faW5qZWN0b3IpKTtjb25zdCBlPXRoaXMuX3RlbXBsYXRlLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuX291dGxldC5vdXRsZXRFbGVtZW50LGUpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmJiZ0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSx0aGlzLl9wb3J0YWwuYXR0YWNoKHRoaXMuX291dGxldCx0KSx0aGlzLl9hdHRhY2hlZC5uZXh0KCl9ZGV0YWNoKCl7dGhpcy5fcG9ydGFsLmlzQXR0YWNoZWQmJnRoaXMuX3BvcnRhbC5kZXRhY2goKX1uZ09uRGVzdHJveSgpe3RoaXMuX291dGxldCYmdGhpcy5fb3V0bGV0LmRpc3Bvc2UoKX19TUcuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fE1HKShNdShVaCksTXUocmgpLE11KF9DKSxNdShRcCksTXUoWGgpLE11KFVDKSxNdShIaCkpfSxNRy7JtWRpcj1Kbyh7dHlwZTpNRyxzZWxlY3RvcnM6W1sibmctdGVtcGxhdGUiLCJtYXRNZW51Q29udGVudCIsIiJdXSxmZWF0dXJlczpbaWgoW3twcm92aWRlOkNHLHVzZUV4aXN0aW5nOk1HfV0pXX0pLE1HLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6VWh9LHt0eXBlOnJofSx7dHlwZTpfQ30se3R5cGU6UXB9LHt0eXBlOlhofSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbVUNdfV19LHt0eXBlOkhofV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihNRyxbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJuZy10ZW1wbGF0ZVttYXRNZW51Q29udGVudF0iLHByb3ZpZGVyczpbe3Byb3ZpZGU6Q0csdXNlRXhpc3Rpbmc6TUd9XX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOlVofSx7dHlwZTpyaH0se3R5cGU6X0N9LHt0eXBlOlFwfSx7dHlwZTpYaH0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W1VDXX1dfSx7dHlwZTpIaH1dfSksbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCB2Rz1uZXcgTnIoIk1BVF9NRU5VX1BBTkVMIikseEc9enooTnooCi8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzc3t9KSk7Y2xhc3MgT0cgZXh0ZW5kcyB4R3tjb25zdHJ1Y3Rvcih0LGUsbixvKXtzdXBlcigpLHRoaXMuX2VsZW1lbnRSZWY9dCx0aGlzLl9mb2N1c01vbml0b3I9bix0aGlzLl9wYXJlbnRNZW51PW8sdGhpcy5yb2xlPSJtZW51aXRlbSIsdGhpcy5faG92ZXJlZD1uZXcgeCx0aGlzLl9mb2N1c2VkPW5ldyB4LHRoaXMuX2hpZ2hsaWdodGVkPSExLHRoaXMuX3RyaWdnZXJzU3VibWVudT0hMSxvJiZvLmFkZEl0ZW0mJm8uYWRkSXRlbSh0aGlzKX1mb2N1cyh0LGUpe3RoaXMuX2ZvY3VzTW9uaXRvciYmdD90aGlzLl9mb2N1c01vbml0b3IuZm9jdXNWaWEodGhpcy5fZ2V0SG9zdEVsZW1lbnQoKSx0LGUpOnRoaXMuX2dldEhvc3RFbGVtZW50KCkuZm9jdXMoZSksdGhpcy5fZm9jdXNlZC5uZXh0KHRoaXMpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX2ZvY3VzTW9uaXRvciYmdGhpcy5fZm9jdXNNb25pdG9yLm1vbml0b3IodGhpcy5fZWxlbWVudFJlZiwhMSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9mb2N1c01vbml0b3ImJnRoaXMuX2ZvY3VzTW9uaXRvci5zdG9wTW9uaXRvcmluZyh0aGlzLl9lbGVtZW50UmVmKSx0aGlzLl9wYXJlbnRNZW51JiZ0aGlzLl9wYXJlbnRNZW51LnJlbW92ZUl0ZW0mJnRoaXMuX3BhcmVudE1lbnUucmVtb3ZlSXRlbSh0aGlzKSx0aGlzLl9ob3ZlcmVkLmNvbXBsZXRlKCksdGhpcy5fZm9jdXNlZC5jb21wbGV0ZSgpfV9nZXRUYWJJbmRleCgpe3JldHVybiB0aGlzLmRpc2FibGVkPyItMSI6IjAifV9nZXRIb3N0RWxlbWVudCgpe3JldHVybiB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnR9X2NoZWNrRGlzYWJsZWQodCl7dGhpcy5kaXNhYmxlZCYmKHQucHJldmVudERlZmF1bHQoKSx0LnN0b3BQcm9wYWdhdGlvbigpKX1faGFuZGxlTW91c2VFbnRlcigpe3RoaXMuX2hvdmVyZWQubmV4dCh0aGlzKX1nZXRMYWJlbCgpe3ZhciB0LGU7Y29uc3Qgbj10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xvbmVOb2RlKCEwKSxvPW4ucXVlcnlTZWxlY3RvckFsbCgibWF0LWljb24sIC5tYXRlcmlhbC1pY29ucyIpO2ZvcihsZXQgZT0wO2U8by5sZW5ndGg7ZSsrKXtjb25zdCBuPW9bZV07bnVsbD09PSh0PW4ucGFyZW50Tm9kZSl8fHZvaWQgMD09PXR8fHQucmVtb3ZlQ2hpbGQobil9cmV0dXJuKG51bGw9PT0oZT1uLnRleHRDb250ZW50KXx8dm9pZCAwPT09ZT92b2lkIDA6ZS50cmltKCkpfHwiIn19T0cuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fE9HKShNdShjaCksTXUoVUMpLE11KHB6KSxNdSh2Ryw4KSl9LE9HLsm1Y21wPVVvKHt0eXBlOk9HLHNlbGVjdG9yczpbWyIiLCJtYXQtbWVudS1pdGVtIiwiIl1dLGhvc3RBdHRyczpbMSwibWF0LWZvY3VzLWluZGljYXRvciJdLGhvc3RWYXJzOjEwLGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MSZlJiZOdSgiY2xpY2siLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLl9jaGVja0Rpc2FibGVkKGUpfSkpKCJtb3VzZWVudGVyIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLl9oYW5kbGVNb3VzZUVudGVyKCl9KSksMiZlJiYoTm0oInJvbGUiLG4ucm9sZSkoInRhYmluZGV4IixuLl9nZXRUYWJJbmRleCgpKSgiYXJpYS1kaXNhYmxlZCIsbi5kaXNhYmxlZC50b1N0cmluZygpKSgiZGlzYWJsZWQiLG4uZGlzYWJsZWR8fG51bGwpLGFmKCJtYXQtbWVudS1pdGVtIiwhMCkoIm1hdC1tZW51LWl0ZW0taGlnaGxpZ2h0ZWQiLG4uX2hpZ2hsaWdodGVkKSgibWF0LW1lbnUtaXRlbS1zdWJtZW51LXRyaWdnZXIiLG4uX3RyaWdnZXJzU3VibWVudSkpfSxpbnB1dHM6e2Rpc2FibGVkOiJkaXNhYmxlZCIsZGlzYWJsZVJpcHBsZToiZGlzYWJsZVJpcHBsZSIscm9sZToicm9sZSJ9LGV4cG9ydEFzOlsibWF0TWVudUl0ZW0iXSxmZWF0dXJlczpbZ21dLGF0dHJzOlsibWF0LW1lbnUtaXRlbSIsIiJdLG5nQ29udGVudFNlbGVjdG9yczpiRyxkZWNsczoyLHZhcnM6Mixjb25zdHM6W1sibWF0UmlwcGxlIiwiIiwxLCJtYXQtbWVudS1yaXBwbGUiLDMsIm1hdFJpcHBsZURpc2FibGVkIiwibWF0UmlwcGxlVHJpZ2dlciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoVnUoKSxqdSgwKSx3dSgxLCJkaXYiLDApKSwyJmUmJihKYygxKSx2dSgibWF0UmlwcGxlRGlzYWJsZWQiLG4uZGlzYWJsZVJpcHBsZXx8bi5kaXNhYmxlZCkoIm1hdFJpcHBsZVRyaWdnZXIiLG4uX2dldEhvc3RFbGVtZW50KCkpKX0sZGlyZWN0aXZlczpbcEhdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLE9HLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6Y2h9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltVQ119XX0se3R5cGU6cHp9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOlt2R119LHt0eXBlOl9zfV19XSxPRy5wcm9wRGVjb3JhdG9ycz17cm9sZTpbe3R5cGU6eV99XSxfY2hlY2tEaXNhYmxlZDpbe3R5cGU6TV8sYXJnczpbImNsaWNrIixbIiRldmVudCJdXX1dLF9oYW5kbGVNb3VzZUVudGVyOlt7dHlwZTpNXyxhcmdzOlsibW91c2VlbnRlciJdfV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoT0csW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoiW21hdC1tZW51LWl0ZW1dIixleHBvcnRBczoibWF0TWVudUl0ZW0iLGlucHV0czpbImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSJdLGhvc3Q6eyJbYXR0ci5yb2xlXSI6InJvbGUiLCJbY2xhc3MubWF0LW1lbnUtaXRlbV0iOiJ0cnVlIiwiW2NsYXNzLm1hdC1tZW51LWl0ZW0taGlnaGxpZ2h0ZWRdIjoiX2hpZ2hsaWdodGVkIiwiW2NsYXNzLm1hdC1tZW51LWl0ZW0tc3VibWVudS10cmlnZ2VyXSI6Il90cmlnZ2Vyc1N1Ym1lbnUiLCJbYXR0ci50YWJpbmRleF0iOiJfZ2V0VGFiSW5kZXgoKSIsIlthdHRyLmFyaWEtZGlzYWJsZWRdIjoiZGlzYWJsZWQudG9TdHJpbmcoKSIsIlthdHRyLmRpc2FibGVkXSI6ImRpc2FibGVkIHx8IG51bGwiLGNsYXNzOiJtYXQtZm9jdXMtaW5kaWNhdG9yIn0sY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaCxlbmNhcHN1bGF0aW9uOlBvLk5vbmUsdGVtcGxhdGU6JzxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjxkaXYgY2xhc3M9Im1hdC1tZW51LXJpcHBsZSIgbWF0UmlwcGxlXG4gICAgIFttYXRSaXBwbGVEaXNhYmxlZF09ImRpc2FibGVSaXBwbGUgfHwgZGlzYWJsZWQiXG4gICAgIFttYXRSaXBwbGVUcmlnZ2VyXT0iX2dldEhvc3RFbGVtZW50KCkiPlxuPC9kaXY+XG4nfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Y2h9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltVQ119XX0se3R5cGU6cHp9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOlt2R119LHt0eXBlOl9zfV19XX0pLHtyb2xlOlt7dHlwZTp5X31dLF9jaGVja0Rpc2FibGVkOlt7dHlwZTpNXyxhcmdzOlsiY2xpY2siLFsiJGV2ZW50Il1dfV0sX2hhbmRsZU1vdXNlRW50ZXI6W3t0eXBlOk1fLGFyZ3M6WyJtb3VzZWVudGVyIl19XX0pOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3QgUEc9bmV3IE5yKCJtYXQtbWVudS1kZWZhdWx0LW9wdGlvbnMiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uIHdHKCl7cmV0dXJue292ZXJsYXBUcmlnZ2VyOiExLHhQb3NpdGlvbjoiYWZ0ZXIiLHlQb3NpdGlvbjoiYmVsb3ciLGJhY2tkcm9wQ2xhc3M6ImNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wIn19fSk7bGV0IGtHPTA7Y2xhc3MgU0d7Y29uc3RydWN0b3IodCxlLG4pe3RoaXMuX2VsZW1lbnRSZWY9dCx0aGlzLl9uZ1pvbmU9ZSx0aGlzLl9kZWZhdWx0T3B0aW9ucz1uLHRoaXMuX3hQb3NpdGlvbj10aGlzLl9kZWZhdWx0T3B0aW9ucy54UG9zaXRpb24sdGhpcy5feVBvc2l0aW9uPXRoaXMuX2RlZmF1bHRPcHRpb25zLnlQb3NpdGlvbix0aGlzLl9kaXJlY3REZXNjZW5kYW50SXRlbXM9bmV3IFRiLHRoaXMuX3RhYlN1YnNjcmlwdGlvbj1sLkVNUFRZLHRoaXMuX2NsYXNzTGlzdD17fSx0aGlzLl9wYW5lbEFuaW1hdGlvblN0YXRlPSJ2b2lkIix0aGlzLl9hbmltYXRpb25Eb25lPW5ldyB4LHRoaXMub3ZlcmxheVBhbmVsQ2xhc3M9dGhpcy5fZGVmYXVsdE9wdGlvbnMub3ZlcmxheVBhbmVsQ2xhc3N8fCIiLHRoaXMuYmFja2Ryb3BDbGFzcz10aGlzLl9kZWZhdWx0T3B0aW9ucy5iYWNrZHJvcENsYXNzLHRoaXMuX292ZXJsYXBUcmlnZ2VyPXRoaXMuX2RlZmF1bHRPcHRpb25zLm92ZXJsYXBUcmlnZ2VyLHRoaXMuX2hhc0JhY2tkcm9wPXRoaXMuX2RlZmF1bHRPcHRpb25zLmhhc0JhY2tkcm9wLHRoaXMuY2xvc2VkPW5ldyBBYix0aGlzLmNsb3NlPXRoaXMuY2xvc2VkLHRoaXMucGFuZWxJZD0ibWF0LW1lbnUtcGFuZWwtIitrRysrfWdldCB4UG9zaXRpb24oKXtyZXR1cm4gdGhpcy5feFBvc2l0aW9ufXNldCB4UG9zaXRpb24odCl7ImJlZm9yZSI9PT10fHwiYWZ0ZXIiPT09dHx8InVuZGVmaW5lZCIhPXR5cGVvZiBuZ0Rldk1vZGUmJiFuZ0Rldk1vZGV8fChmdW5jdGlvbiBlKCl7dGhyb3cgRXJyb3IoJ3hQb3NpdGlvbiB2YWx1ZSBtdXN0IGJlIGVpdGhlciBcJ2JlZm9yZVwnIG9yIGFmdGVyXCcuXG4gICAgICBFeGFtcGxlOiA8bWF0LW1lbnUgeFBvc2l0aW9uPSJiZWZvcmUiICNtZW51PSJtYXRNZW51Ij48L21hdC1tZW51PicpfSkoKSx0aGlzLl94UG9zaXRpb249dCx0aGlzLnNldFBvc2l0aW9uQ2xhc3NlcygpfWdldCB5UG9zaXRpb24oKXtyZXR1cm4gdGhpcy5feVBvc2l0aW9ufXNldCB5UG9zaXRpb24odCl7ImFib3ZlIj09PXR8fCJiZWxvdyI9PT10fHwidW5kZWZpbmVkIiE9dHlwZW9mIG5nRGV2TW9kZSYmIW5nRGV2TW9kZXx8KGZ1bmN0aW9uIGUoKXt0aHJvdyBFcnJvcigneVBvc2l0aW9uIHZhbHVlIG11c3QgYmUgZWl0aGVyIFwnYWJvdmVcJyBvciBiZWxvd1wnLlxuICAgICAgRXhhbXBsZTogPG1hdC1tZW51IHlQb3NpdGlvbj0iYWJvdmUiICNtZW51PSJtYXRNZW51Ij48L21hdC1tZW51PicpfSkoKSx0aGlzLl95UG9zaXRpb249dCx0aGlzLnNldFBvc2l0aW9uQ2xhc3NlcygpfWdldCBvdmVybGFwVHJpZ2dlcigpe3JldHVybiB0aGlzLl9vdmVybGFwVHJpZ2dlcn1zZXQgb3ZlcmxhcFRyaWdnZXIodCl7dGhpcy5fb3ZlcmxhcFRyaWdnZXI9ckkodCl9Z2V0IGhhc0JhY2tkcm9wKCl7cmV0dXJuIHRoaXMuX2hhc0JhY2tkcm9wfXNldCBoYXNCYWNrZHJvcCh0KXt0aGlzLl9oYXNCYWNrZHJvcD1ySSh0KX1zZXQgcGFuZWxDbGFzcyh0KXtjb25zdCBlPXRoaXMuX3ByZXZpb3VzUGFuZWxDbGFzcztlJiZlLmxlbmd0aCYmZS5zcGxpdCgiICIpLmZvckVhY2goKHQ9Pnt0aGlzLl9jbGFzc0xpc3RbdF09ITF9KSksdGhpcy5fcHJldmlvdXNQYW5lbENsYXNzPXQsdCYmdC5sZW5ndGgmJih0LnNwbGl0KCIgIikuZm9yRWFjaCgodD0+e3RoaXMuX2NsYXNzTGlzdFt0XT0hMH0pKSx0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NOYW1lPSIiKX1nZXQgY2xhc3NMaXN0KCl7cmV0dXJuIHRoaXMucGFuZWxDbGFzc31zZXQgY2xhc3NMaXN0KHQpe3RoaXMucGFuZWxDbGFzcz10fW5nT25Jbml0KCl7dGhpcy5zZXRQb3NpdGlvbkNsYXNzZXMoKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLl91cGRhdGVEaXJlY3REZXNjZW5kYW50cygpLHRoaXMuX2tleU1hbmFnZXI9bmV3IFZJKHRoaXMuX2RpcmVjdERlc2NlbmRhbnRJdGVtcykud2l0aFdyYXAoKS53aXRoVHlwZUFoZWFkKCkud2l0aEhvbWVBbmRFbmQoKSx0aGlzLl90YWJTdWJzY3JpcHRpb249dGhpcy5fa2V5TWFuYWdlci50YWJPdXQuc3Vic2NyaWJlKCgoKT0+dGhpcy5jbG9zZWQuZW1pdCgidGFiIikpKSx0aGlzLl9kaXJlY3REZXNjZW5kYW50SXRlbXMuY2hhbmdlcy5waXBlKGNuKHRoaXMuX2RpcmVjdERlc2NlbmRhbnRJdGVtcyksZG4oKHQ9Pld0KC4uLnQubWFwKCh0PT50Ll9mb2N1c2VkKSkpKSkpLnN1YnNjcmliZSgodD0+dGhpcy5fa2V5TWFuYWdlci51cGRhdGVBY3RpdmVJdGVtKHQpKSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9kaXJlY3REZXNjZW5kYW50SXRlbXMuZGVzdHJveSgpLHRoaXMuX3RhYlN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuY2xvc2VkLmNvbXBsZXRlKCl9X2hvdmVyZWQoKXtyZXR1cm4gdGhpcy5fZGlyZWN0RGVzY2VuZGFudEl0ZW1zLmNoYW5nZXMucGlwZShjbih0aGlzLl9kaXJlY3REZXNjZW5kYW50SXRlbXMpLGRuKCh0PT5XdCguLi50Lm1hcCgodD0+dC5faG92ZXJlZCkpKSkpKX1hZGRJdGVtKHQpe31yZW1vdmVJdGVtKHQpe31faGFuZGxlS2V5ZG93bih0KXtjb25zdCBlPXQua2V5Q29kZSxuPXRoaXMuX2tleU1hbmFnZXI7c3dpdGNoKGUpe2Nhc2UgZUk6YUkodCl8fCh0LnByZXZlbnREZWZhdWx0KCksdGhpcy5jbG9zZWQuZW1pdCgia2V5ZG93biIpKTticmVhaztjYXNlIDM3OnRoaXMucGFyZW50TWVudSYmImx0ciI9PT10aGlzLmRpcmVjdGlvbiYmdGhpcy5jbG9zZWQuZW1pdCgia2V5ZG93biIpO2JyZWFrO2Nhc2UgMzk6dGhpcy5wYXJlbnRNZW51JiYicnRsIj09PXRoaXMuZGlyZWN0aW9uJiZ0aGlzLmNsb3NlZC5lbWl0KCJrZXlkb3duIik7YnJlYWs7ZGVmYXVsdDplIT09b0kmJmUhPT1pSXx8bi5zZXRGb2N1c09yaWdpbigia2V5Ym9hcmQiKSxuLm9uS2V5ZG93bih0KX19Zm9jdXNGaXJzdEl0ZW0odD0icHJvZ3JhbSIpe3RoaXMubGF6eUNvbnRlbnQ/dGhpcy5fbmdab25lLm9uU3RhYmxlLnBpcGUoTmUoMSkpLnN1YnNjcmliZSgoKCk9PnRoaXMuX2ZvY3VzRmlyc3RJdGVtKHQpKSk6dGhpcy5fZm9jdXNGaXJzdEl0ZW0odCl9X2ZvY3VzRmlyc3RJdGVtKHQpe2NvbnN0IGU9dGhpcy5fa2V5TWFuYWdlcjtpZihlLnNldEZvY3VzT3JpZ2luKHQpLnNldEZpcnN0SXRlbUFjdGl2ZSgpLCFlLmFjdGl2ZUl0ZW0mJnRoaXMuX2RpcmVjdERlc2NlbmRhbnRJdGVtcy5sZW5ndGgpe2xldCB0PXRoaXMuX2RpcmVjdERlc2NlbmRhbnRJdGVtcy5maXJzdC5fZ2V0SG9zdEVsZW1lbnQoKS5wYXJlbnRFbGVtZW50O2Zvcig7dDspe2lmKCJtZW51Ij09PXQuZ2V0QXR0cmlidXRlKCJyb2xlIikpe3QuZm9jdXMoKTticmVha310PXQucGFyZW50RWxlbWVudH19fXJlc2V0QWN0aXZlSXRlbSgpe3RoaXMuX2tleU1hbmFnZXIuc2V0QWN0aXZlSXRlbSgtMSl9c2V0RWxldmF0aW9uKHQpe2NvbnN0IGU9YG1hdC1lbGV2YXRpb24teiR7TWF0aC5taW4oNCt0LDI0KX1gLG49T2JqZWN0LmtleXModGhpcy5fY2xhc3NMaXN0KS5maW5kKCh0PT50LnN0YXJ0c1dpdGgoIm1hdC1lbGV2YXRpb24teiIpKSk7biYmbiE9PXRoaXMuX3ByZXZpb3VzRWxldmF0aW9ufHwodGhpcy5fcHJldmlvdXNFbGV2YXRpb24mJih0aGlzLl9jbGFzc0xpc3RbdGhpcy5fcHJldmlvdXNFbGV2YXRpb25dPSExKSx0aGlzLl9jbGFzc0xpc3RbZV09ITAsdGhpcy5fcHJldmlvdXNFbGV2YXRpb249ZSl9c2V0UG9zaXRpb25DbGFzc2VzKHQ9dGhpcy54UG9zaXRpb24sZT10aGlzLnlQb3NpdGlvbil7Y29uc3Qgbj10aGlzLl9jbGFzc0xpc3Q7blsibWF0LW1lbnUtYmVmb3JlIl09ImJlZm9yZSI9PT10LG5bIm1hdC1tZW51LWFmdGVyIl09ImFmdGVyIj09PXQsblsibWF0LW1lbnUtYWJvdmUiXT0iYWJvdmUiPT09ZSxuWyJtYXQtbWVudS1iZWxvdyJdPSJiZWxvdyI9PT1lfV9zdGFydEFuaW1hdGlvbigpe3RoaXMuX3BhbmVsQW5pbWF0aW9uU3RhdGU9ImVudGVyIn1fcmVzZXRBbmltYXRpb24oKXt0aGlzLl9wYW5lbEFuaW1hdGlvblN0YXRlPSJ2b2lkIn1fb25BbmltYXRpb25Eb25lKHQpe3RoaXMuX2FuaW1hdGlvbkRvbmUubmV4dCh0KSx0aGlzLl9pc0FuaW1hdGluZz0hMX1fb25BbmltYXRpb25TdGFydCh0KXt0aGlzLl9pc0FuaW1hdGluZz0hMCwiZW50ZXIiPT09dC50b1N0YXRlJiYwPT09dGhpcy5fa2V5TWFuYWdlci5hY3RpdmVJdGVtSW5kZXgmJih0LmVsZW1lbnQuc2Nyb2xsVG9wPTApfV91cGRhdGVEaXJlY3REZXNjZW5kYW50cygpe3RoaXMuX2FsbEl0ZW1zLmNoYW5nZXMucGlwZShjbih0aGlzLl9hbGxJdGVtcykpLnN1YnNjcmliZSgodD0+e3RoaXMuX2RpcmVjdERlc2NlbmRhbnRJdGVtcy5yZXNldCh0LmZpbHRlcigodD0+dC5fcGFyZW50TWVudT09PXRoaXMpKSksdGhpcy5fZGlyZWN0RGVzY2VuZGFudEl0ZW1zLm5vdGlmeU9uQ2hhbmdlcygpfSkpfX1TRy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8U0cpKE11KGNoKSxNdSh0QyksTXUoUEcpKX0sU0cuybVkaXI9Sm8oe3R5cGU6U0csY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24gdChlLG4sbyl7aWYoMSZlJiYoR2IobyxDRywxKSxHYihvLE9HLDEpLEdiKG8sT0csMCkpLDImZSl7bGV0IHQ7VWIodD1ZYigpKSYmKG4ubGF6eUNvbnRlbnQ9dC5maXJzdCksVWIodD1ZYigpKSYmKG4uX2FsbEl0ZW1zPXQpLFViKHQ9WWIoKSkmJihuLml0ZW1zPXQpfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJldiKFVoLDEpLDImZSl7bGV0IHQ7VWIodD1ZYigpKSYmKG4udGVtcGxhdGVSZWY9dC5maXJzdCl9fSxpbnB1dHM6e2JhY2tkcm9wQ2xhc3M6ImJhY2tkcm9wQ2xhc3MiLHhQb3NpdGlvbjoieFBvc2l0aW9uIix5UG9zaXRpb246InlQb3NpdGlvbiIsb3ZlcmxhcFRyaWdnZXI6Im92ZXJsYXBUcmlnZ2VyIixoYXNCYWNrZHJvcDoiaGFzQmFja2Ryb3AiLHBhbmVsQ2xhc3M6WyJjbGFzcyIsInBhbmVsQ2xhc3MiXSxjbGFzc0xpc3Q6ImNsYXNzTGlzdCIsYXJpYUxhYmVsOlsiYXJpYS1sYWJlbCIsImFyaWFMYWJlbCJdLGFyaWFMYWJlbGxlZGJ5OlsiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYUxhYmVsbGVkYnkiXSxhcmlhRGVzY3JpYmVkYnk6WyJhcmlhLWRlc2NyaWJlZGJ5IiwiYXJpYURlc2NyaWJlZGJ5Il19LG91dHB1dHM6e2Nsb3NlZDoiY2xvc2VkIixjbG9zZToiY2xvc2UifX0pLFNHLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6Y2h9LHt0eXBlOnRDfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbUEddfV19XSxTRy5wcm9wRGVjb3JhdG9ycz17X2FsbEl0ZW1zOlt7dHlwZTp6cixhcmdzOltPRyx7ZGVzY2VuZGFudHM6ITB9XX1dLGJhY2tkcm9wQ2xhc3M6W3t0eXBlOnlffV0sYXJpYUxhYmVsOlt7dHlwZTp5XyxhcmdzOlsiYXJpYS1sYWJlbCJdfV0sYXJpYUxhYmVsbGVkYnk6W3t0eXBlOnlfLGFyZ3M6WyJhcmlhLWxhYmVsbGVkYnkiXX1dLGFyaWFEZXNjcmliZWRieTpbe3R5cGU6eV8sYXJnczpbImFyaWEtZGVzY3JpYmVkYnkiXX1dLHhQb3NpdGlvbjpbe3R5cGU6eV99XSx5UG9zaXRpb246W3t0eXBlOnlffV0sdGVtcGxhdGVSZWY6W3t0eXBlOkZyLGFyZ3M6W1VoXX1dLGl0ZW1zOlt7dHlwZTp6cixhcmdzOltPRyx7ZGVzY2VuZGFudHM6ITF9XX1dLGxhenlDb250ZW50Olt7dHlwZTpIcixhcmdzOltDR119XSxvdmVybGFwVHJpZ2dlcjpbe3R5cGU6eV99XSxoYXNCYWNrZHJvcDpbe3R5cGU6eV99XSxwYW5lbENsYXNzOlt7dHlwZTp5XyxhcmdzOlsiY2xhc3MiXX1dLGNsYXNzTGlzdDpbe3R5cGU6eV99XSxjbG9zZWQ6W3t0eXBlOl9ffV0sY2xvc2U6W3t0eXBlOl9ffV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoU0csW3t0eXBlOmdffV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmNofSx7dHlwZTp0Q30se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W1BHXX1dfV19KSx7YmFja2Ryb3BDbGFzczpbe3R5cGU6eV99XSxjbG9zZWQ6W3t0eXBlOl9ffV0sY2xvc2U6W3t0eXBlOl9ffV0seFBvc2l0aW9uOlt7dHlwZTp5X31dLHlQb3NpdGlvbjpbe3R5cGU6eV99XSxvdmVybGFwVHJpZ2dlcjpbe3R5cGU6eV99XSxoYXNCYWNrZHJvcDpbe3R5cGU6eV99XSxwYW5lbENsYXNzOlt7dHlwZTp5XyxhcmdzOlsiY2xhc3MiXX1dLGNsYXNzTGlzdDpbe3R5cGU6eV99XSxfYWxsSXRlbXM6W3t0eXBlOnpyLGFyZ3M6W09HLHtkZXNjZW5kYW50czohMH1dfV0sYXJpYUxhYmVsOlt7dHlwZTp5XyxhcmdzOlsiYXJpYS1sYWJlbCJdfV0sYXJpYUxhYmVsbGVkYnk6W3t0eXBlOnlfLGFyZ3M6WyJhcmlhLWxhYmVsbGVkYnkiXX1dLGFyaWFEZXNjcmliZWRieTpbe3R5cGU6eV8sYXJnczpbImFyaWEtZGVzY3JpYmVkYnkiXX1dLHRlbXBsYXRlUmVmOlt7dHlwZTpGcixhcmdzOltVaF19XSxpdGVtczpbe3R5cGU6enIsYXJnczpbT0cse2Rlc2NlbmRhbnRzOiExfV19XSxsYXp5Q29udGVudDpbe3R5cGU6SHIsYXJnczpbQ0ddfV19KTtjbGFzcyBERyBleHRlbmRzIFNHe2NvbnN0cnVjdG9yKHQsZSxuKXtzdXBlcih0LGUsbil9fURHLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxERykoTXUoY2gpLE11KHRDKSxNdShQRykpfSxERy7JtWNtcD1Vbyh7dHlwZTpERyxzZWxlY3RvcnM6W1sibWF0LW1lbnUiXV0saG9zdFZhcnM6Myxob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezImZSYmTm0oImFyaWEtbGFiZWwiLG51bGwpKCJhcmlhLWxhYmVsbGVkYnkiLG51bGwpKCJhcmlhLWRlc2NyaWJlZGJ5IixudWxsKX0sZXhwb3J0QXM6WyJtYXRNZW51Il0sZmVhdHVyZXM6W2loKFt7cHJvdmlkZTp2Ryx1c2VFeGlzdGluZzpER31dKSxnbV0sbmdDb250ZW50U2VsZWN0b3JzOmJHLGRlY2xzOjEsdmFyczowLGNvbnN0czpbWyJ0YWJpbmRleCIsIi0xIiwicm9sZSIsIm1lbnUiLDEsIm1hdC1tZW51LXBhbmVsIiwzLCJpZCIsIm5nQ2xhc3MiLCJrZXlkb3duIiwiY2xpY2siXSxbMSwibWF0LW1lbnUtY29udGVudCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoVnUoKSxXbSgwLHlHLDMsNiwibmctdGVtcGxhdGUiKSl9LGRpcmVjdGl2ZXM6W3R2XSxzdHlsZXM6WydtYXQtbWVudXtkaXNwbGF5Om5vbmV9Lm1hdC1tZW51LXBhbmVse21pbi13aWR0aDoxMTJweDttYXgtd2lkdGg6MjgwcHg7b3ZlcmZsb3c6YXV0bzstd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzp0b3VjaDttYXgtaGVpZ2h0OmNhbGMoMTAwdmggLSA0OHB4KTtib3JkZXItcmFkaXVzOjRweDtvdXRsaW5lOjA7bWluLWhlaWdodDo2NHB4fS5tYXQtbWVudS1wYW5lbC5uZy1hbmltYXRpbmd7cG9pbnRlci1ldmVudHM6bm9uZX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtbWVudS1wYW5lbHtvdXRsaW5lOnNvbGlkIDFweH0ubWF0LW1lbnUtY29udGVudDpub3QoOmVtcHR5KXtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbWVudS1pdGVtey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2xpbmUtaGVpZ2h0OjQ4cHg7aGVpZ2h0OjQ4cHg7cGFkZGluZzowIDE2cHg7dGV4dC1hbGlnbjpsZWZ0O3RleHQtZGVjb3JhdGlvbjpub25lO21heC13aWR0aDoxMDAlO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtbWVudS1pdGVtOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtbWVudS1pdGVtW2Rpc2FibGVkXXtjdXJzb3I6ZGVmYXVsdH1bZGlyPXJ0bF0gLm1hdC1tZW51LWl0ZW17dGV4dC1hbGlnbjpyaWdodH0ubWF0LW1lbnUtaXRlbSAubWF0LWljb257bWFyZ2luLXJpZ2h0OjE2cHg7dmVydGljYWwtYWxpZ246bWlkZGxlfS5tYXQtbWVudS1pdGVtIC5tYXQtaWNvbiBzdmd7dmVydGljYWwtYWxpZ246dG9wfVtkaXI9cnRsXSAubWF0LW1lbnUtaXRlbSAubWF0LWljb257bWFyZ2luLWxlZnQ6MTZweDttYXJnaW4tcmlnaHQ6MH0ubWF0LW1lbnUtaXRlbVtkaXNhYmxlZF17cG9pbnRlci1ldmVudHM6bm9uZX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtbWVudS1pdGVte21hcmdpbi10b3A6MXB4fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1tZW51LWl0ZW0uY2RrLXByb2dyYW0tZm9jdXNlZCwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtbWVudS1pdGVtLmNkay1rZXlib2FyZC1mb2N1c2VkLC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1tZW51LWl0ZW0taGlnaGxpZ2h0ZWR7b3V0bGluZTpkb3R0ZWQgMXB4fS5tYXQtbWVudS1pdGVtLXN1Ym1lbnUtdHJpZ2dlcntwYWRkaW5nLXJpZ2h0OjMycHh9Lm1hdC1tZW51LWl0ZW0tc3VibWVudS10cmlnZ2VyOjphZnRlcnt3aWR0aDowO2hlaWdodDowO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6NXB4IDAgNXB4IDVweDtib3JkZXItY29sb3I6dHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgY3VycmVudENvbG9yO2NvbnRlbnQ6IiI7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtyaWdodDoxNnB4O3RyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpfVtkaXI9cnRsXSAubWF0LW1lbnUtaXRlbS1zdWJtZW51LXRyaWdnZXJ7cGFkZGluZy1yaWdodDoxNnB4O3BhZGRpbmctbGVmdDozMnB4fVtkaXI9cnRsXSAubWF0LW1lbnUtaXRlbS1zdWJtZW51LXRyaWdnZXI6OmFmdGVye3JpZ2h0OmF1dG87bGVmdDoxNnB4O3RyYW5zZm9ybTpyb3RhdGVZKDE4MGRlZykgdHJhbnNsYXRlWSgtNTAlKX1idXR0b24ubWF0LW1lbnUtaXRlbXt3aWR0aDoxMDAlfS5tYXQtbWVudS1pdGVtIC5tYXQtbWVudS1yaXBwbGV7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6bm9uZX1cbiddLGVuY2Fwc3VsYXRpb246MixkYXRhOnthbmltYXRpb246W19HLnRyYW5zZm9ybU1lbnUsX0cuZmFkZUluSXRlbXNdfSxjaGFuZ2VEZXRlY3Rpb246MH0pLERHLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6Y2h9LHt0eXBlOnRDfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbUEddfV19XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKERHLFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6Im1hdC1tZW51Iix0ZW1wbGF0ZTonPG5nLXRlbXBsYXRlPlxuICA8ZGl2XG4gICAgY2xhc3M9Im1hdC1tZW51LXBhbmVsIlxuICAgIFtpZF09InBhbmVsSWQiXG4gICAgW25nQ2xhc3NdPSJfY2xhc3NMaXN0IlxuICAgIChrZXlkb3duKT0iX2hhbmRsZUtleWRvd24oJGV2ZW50KSJcbiAgICAoY2xpY2spPSJjbG9zZWQuZW1pdChcJ2NsaWNrXCcpIlxuICAgIFtAdHJhbnNmb3JtTWVudV09Il9wYW5lbEFuaW1hdGlvblN0YXRlIlxuICAgIChAdHJhbnNmb3JtTWVudS5zdGFydCk9Il9vbkFuaW1hdGlvblN0YXJ0KCRldmVudCkiXG4gICAgKEB0cmFuc2Zvcm1NZW51LmRvbmUpPSJfb25BbmltYXRpb25Eb25lKCRldmVudCkiXG4gICAgdGFiaW5kZXg9Ii0xIlxuICAgIHJvbGU9Im1lbnUiXG4gICAgW2F0dHIuYXJpYS1sYWJlbF09ImFyaWFMYWJlbCB8fCBudWxsIlxuICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09ImFyaWFMYWJlbGxlZGJ5IHx8IG51bGwiXG4gICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09ImFyaWFEZXNjcmliZWRieSB8fCBudWxsIj5cbiAgICA8ZGl2IGNsYXNzPSJtYXQtbWVudS1jb250ZW50Ij5cbiAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuJyxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNoLGVuY2Fwc3VsYXRpb246UG8uTm9uZSxleHBvcnRBczoibWF0TWVudSIsaG9zdDp7IlthdHRyLmFyaWEtbGFiZWxdIjoibnVsbCIsIlthdHRyLmFyaWEtbGFiZWxsZWRieV0iOiJudWxsIiwiW2F0dHIuYXJpYS1kZXNjcmliZWRieV0iOiJudWxsIn0sYW5pbWF0aW9uczpbX0cudHJhbnNmb3JtTWVudSxfRy5mYWRlSW5JdGVtc10scHJvdmlkZXJzOlt7cHJvdmlkZTp2Ryx1c2VFeGlzdGluZzpER31dLHN0eWxlczpbJ21hdC1tZW51e2Rpc3BsYXk6bm9uZX0ubWF0LW1lbnUtcGFuZWx7bWluLXdpZHRoOjExMnB4O21heC13aWR0aDoyODBweDtvdmVyZmxvdzphdXRvOy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNoO21heC1oZWlnaHQ6Y2FsYygxMDB2aCAtIDQ4cHgpO2JvcmRlci1yYWRpdXM6NHB4O291dGxpbmU6MDttaW4taGVpZ2h0OjY0cHh9Lm1hdC1tZW51LXBhbmVsLm5nLWFuaW1hdGluZ3twb2ludGVyLWV2ZW50czpub25lfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1tZW51LXBhbmVse291dGxpbmU6c29saWQgMXB4fS5tYXQtbWVudS1jb250ZW50Om5vdCg6ZW1wdHkpe3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9Lm1hdC1tZW51LWl0ZW17LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpwb2ludGVyO291dGxpbmU6bm9uZTtib3JkZXI6bm9uZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7bGluZS1oZWlnaHQ6NDhweDtoZWlnaHQ6NDhweDtwYWRkaW5nOjAgMTZweDt0ZXh0LWFsaWduOmxlZnQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7bWF4LXdpZHRoOjEwMCU7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1tZW51LWl0ZW06Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1tZW51LWl0ZW1bZGlzYWJsZWRde2N1cnNvcjpkZWZhdWx0fVtkaXI9cnRsXSAubWF0LW1lbnUtaXRlbXt0ZXh0LWFsaWduOnJpZ2h0fS5tYXQtbWVudS1pdGVtIC5tYXQtaWNvbnttYXJnaW4tcmlnaHQ6MTZweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Lm1hdC1tZW51LWl0ZW0gLm1hdC1pY29uIHN2Z3t2ZXJ0aWNhbC1hbGlnbjp0b3B9W2Rpcj1ydGxdIC5tYXQtbWVudS1pdGVtIC5tYXQtaWNvbnttYXJnaW4tbGVmdDoxNnB4O21hcmdpbi1yaWdodDowfS5tYXQtbWVudS1pdGVtW2Rpc2FibGVkXXtwb2ludGVyLWV2ZW50czpub25lfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1tZW51LWl0ZW17bWFyZ2luLXRvcDoxcHh9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LW1lbnUtaXRlbS5jZGstcHJvZ3JhbS1mb2N1c2VkLC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1tZW51LWl0ZW0uY2RrLWtleWJvYXJkLWZvY3VzZWQsLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LW1lbnUtaXRlbS1oaWdobGlnaHRlZHtvdXRsaW5lOmRvdHRlZCAxcHh9Lm1hdC1tZW51LWl0ZW0tc3VibWVudS10cmlnZ2Vye3BhZGRpbmctcmlnaHQ6MzJweH0ubWF0LW1lbnUtaXRlbS1zdWJtZW51LXRyaWdnZXI6OmFmdGVye3dpZHRoOjA7aGVpZ2h0OjA7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDo1cHggMCA1cHggNXB4O2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudCB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCBjdXJyZW50Q29sb3I7Y29udGVudDoiIjtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3JpZ2h0OjE2cHg7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSl9W2Rpcj1ydGxdIC5tYXQtbWVudS1pdGVtLXN1Ym1lbnUtdHJpZ2dlcntwYWRkaW5nLXJpZ2h0OjE2cHg7cGFkZGluZy1sZWZ0OjMycHh9W2Rpcj1ydGxdIC5tYXQtbWVudS1pdGVtLXN1Ym1lbnUtdHJpZ2dlcjo6YWZ0ZXJ7cmlnaHQ6YXV0bztsZWZ0OjE2cHg7dHJhbnNmb3JtOnJvdGF0ZVkoMTgwZGVnKSB0cmFuc2xhdGVZKC01MCUpfWJ1dHRvbi5tYXQtbWVudS1pdGVte3dpZHRoOjEwMCV9Lm1hdC1tZW51LWl0ZW0gLm1hdC1tZW51LXJpcHBsZXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czpub25lfVxuJ119XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpjaH0se3R5cGU6dEN9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltQR119XX1dfSksbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCBFRz1uZXcgTnIoIm1hdC1tZW51LXNjcm9sbC1zdHJhdGVneSIpLEFHPXtwcm92aWRlOkVHLGRlcHM6W0pGXSx1c2VGYWN0b3J5OmZ1bmN0aW9uIFJHKHQpe3JldHVybigpPT50LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpfX0sVEc9dkkoe3Bhc3NpdmU6ITB9KTtjbGFzcyBOR3tjb25zdHJ1Y3Rvcih0LGUsbixvLGksYSxyLHMpe3RoaXMuX292ZXJsYXk9dCx0aGlzLl9lbGVtZW50PWUsdGhpcy5fdmlld0NvbnRhaW5lclJlZj1uLHRoaXMuX21lbnVJdGVtSW5zdGFuY2U9YSx0aGlzLl9kaXI9cix0aGlzLl9mb2N1c01vbml0b3I9cyx0aGlzLl9vdmVybGF5UmVmPW51bGwsdGhpcy5fbWVudU9wZW49ITEsdGhpcy5fY2xvc2luZ0FjdGlvbnNTdWJzY3JpcHRpb249bC5FTVBUWSx0aGlzLl9ob3ZlclN1YnNjcmlwdGlvbj1sLkVNUFRZLHRoaXMuX21lbnVDbG9zZVN1YnNjcmlwdGlvbj1sLkVNUFRZLHRoaXMuX2hhbmRsZVRvdWNoU3RhcnQ9dD0+e2x6KHQpfHwodGhpcy5fb3BlbmVkQnk9InRvdWNoIil9LHRoaXMuX29wZW5lZEJ5PXZvaWQgMCx0aGlzLnJlc3RvcmVGb2N1cz0hMCx0aGlzLm1lbnVPcGVuZWQ9bmV3IEFiLHRoaXMub25NZW51T3Blbj10aGlzLm1lbnVPcGVuZWQsdGhpcy5tZW51Q2xvc2VkPW5ldyBBYix0aGlzLm9uTWVudUNsb3NlPXRoaXMubWVudUNsb3NlZCx0aGlzLl9zY3JvbGxTdHJhdGVneT1vLHRoaXMuX3BhcmVudE1hdGVyaWFsTWVudT1pIGluc3RhbmNlb2YgU0c/aTp2b2lkIDAsZS5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMuX2hhbmRsZVRvdWNoU3RhcnQsVEcpLGEmJihhLl90cmlnZ2Vyc1N1Ym1lbnU9dGhpcy50cmlnZ2Vyc1N1Ym1lbnUoKSl9Z2V0IF9kZXByZWNhdGVkTWF0TWVudVRyaWdnZXJGb3IoKXtyZXR1cm4gdGhpcy5tZW51fXNldCBfZGVwcmVjYXRlZE1hdE1lbnVUcmlnZ2VyRm9yKHQpe3RoaXMubWVudT10fWdldCBtZW51KCl7cmV0dXJuIHRoaXMuX21lbnV9c2V0IG1lbnUodCl7dCE9PXRoaXMuX21lbnUmJih0aGlzLl9tZW51PXQsdGhpcy5fbWVudUNsb3NlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdCYmKHQhPT10aGlzLl9wYXJlbnRNYXRlcmlhbE1lbnV8fCJ1bmRlZmluZWQiIT10eXBlb2YgbmdEZXZNb2RlJiYhbmdEZXZNb2RlfHwoZnVuY3Rpb24gZSgpe3Rocm93IEVycm9yKCJtYXRNZW51VHJpZ2dlckZvcjogbWVudSBjYW5ub3QgY29udGFpbiBpdHMgb3duIHRyaWdnZXIuIEFzc2lnbiBhIG1lbnUgdGhhdCBpcyBub3QgYSBwYXJlbnQgb2YgdGhlIHRyaWdnZXIgb3IgbW92ZSB0aGUgdHJpZ2dlciBvdXRzaWRlIG9mIHRoZSBtZW51LiIpfSkoKSx0aGlzLl9tZW51Q2xvc2VTdWJzY3JpcHRpb249dC5jbG9zZS5zdWJzY3JpYmUoKHQ9Pnt0aGlzLl9kZXN0cm95TWVudSh0KSwiY2xpY2siIT09dCYmInRhYiIhPT10fHwhdGhpcy5fcGFyZW50TWF0ZXJpYWxNZW51fHx0aGlzLl9wYXJlbnRNYXRlcmlhbE1lbnUuY2xvc2VkLmVtaXQodCl9KSkpKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLl9jaGVja01lbnUoKSx0aGlzLl9oYW5kbGVIb3ZlcigpfW5nT25EZXN0cm95KCl7dGhpcy5fb3ZlcmxheVJlZiYmKHRoaXMuX292ZXJsYXlSZWYuZGlzcG9zZSgpLHRoaXMuX292ZXJsYXlSZWY9bnVsbCksdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMuX2hhbmRsZVRvdWNoU3RhcnQsVEcpLHRoaXMuX21lbnVDbG9zZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2Nsb3NpbmdBY3Rpb25zU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5faG92ZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1nZXQgbWVudU9wZW4oKXtyZXR1cm4gdGhpcy5fbWVudU9wZW59Z2V0IGRpcigpe3JldHVybiB0aGlzLl9kaXImJiJydGwiPT09dGhpcy5fZGlyLnZhbHVlPyJydGwiOiJsdHIifXRyaWdnZXJzU3VibWVudSgpe3JldHVybiEoIXRoaXMuX21lbnVJdGVtSW5zdGFuY2V8fCF0aGlzLl9wYXJlbnRNYXRlcmlhbE1lbnUpfXRvZ2dsZU1lbnUoKXtyZXR1cm4gdGhpcy5fbWVudU9wZW4/dGhpcy5jbG9zZU1lbnUoKTp0aGlzLm9wZW5NZW51KCl9b3Blbk1lbnUoKXtpZih0aGlzLl9tZW51T3BlbilyZXR1cm47dGhpcy5fY2hlY2tNZW51KCk7Y29uc3QgdD10aGlzLl9jcmVhdGVPdmVybGF5KCksZT10LmdldENvbmZpZygpO3RoaXMuX3NldFBvc2l0aW9uKGUucG9zaXRpb25TdHJhdGVneSksZS5oYXNCYWNrZHJvcD1udWxsPT10aGlzLm1lbnUuaGFzQmFja2Ryb3A/IXRoaXMudHJpZ2dlcnNTdWJtZW51KCk6dGhpcy5tZW51Lmhhc0JhY2tkcm9wLHQuYXR0YWNoKHRoaXMuX2dldFBvcnRhbCgpKSx0aGlzLm1lbnUubGF6eUNvbnRlbnQmJnRoaXMubWVudS5sYXp5Q29udGVudC5hdHRhY2godGhpcy5tZW51RGF0YSksdGhpcy5fY2xvc2luZ0FjdGlvbnNTdWJzY3JpcHRpb249dGhpcy5fbWVudUNsb3NpbmdBY3Rpb25zKCkuc3Vic2NyaWJlKCgoKT0+dGhpcy5jbG9zZU1lbnUoKSkpLHRoaXMuX2luaXRNZW51KCksdGhpcy5tZW51IGluc3RhbmNlb2YgU0cmJnRoaXMubWVudS5fc3RhcnRBbmltYXRpb24oKX1jbG9zZU1lbnUoKXt0aGlzLm1lbnUuY2xvc2UuZW1pdCgpfWZvY3VzKHQsZSl7dGhpcy5fZm9jdXNNb25pdG9yJiZ0P3RoaXMuX2ZvY3VzTW9uaXRvci5mb2N1c1ZpYSh0aGlzLl9lbGVtZW50LHQsZSk6dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKGUpfV9kZXN0cm95TWVudSh0KXtpZighdGhpcy5fb3ZlcmxheVJlZnx8IXRoaXMubWVudU9wZW4pcmV0dXJuO2NvbnN0IGU9dGhpcy5tZW51O3RoaXMuX2Nsb3NpbmdBY3Rpb25zU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fb3ZlcmxheVJlZi5kZXRhY2goKSwhdGhpcy5yZXN0b3JlRm9jdXN8fCJrZXlkb3duIiE9PXQmJnRoaXMuX29wZW5lZEJ5JiZ0aGlzLnRyaWdnZXJzU3VibWVudSgpfHx0aGlzLmZvY3VzKHRoaXMuX29wZW5lZEJ5KSx0aGlzLl9vcGVuZWRCeT12b2lkIDAsZSBpbnN0YW5jZW9mIFNHPyhlLl9yZXNldEFuaW1hdGlvbigpLGUubGF6eUNvbnRlbnQ/ZS5fYW5pbWF0aW9uRG9uZS5waXBlKEd0KCh0PT4idm9pZCI9PT10LnRvU3RhdGUpKSxOZSgxKSx1bihlLmxhenlDb250ZW50Ll9hdHRhY2hlZCkpLnN1YnNjcmliZSh7bmV4dDooKT0+ZS5sYXp5Q29udGVudC5kZXRhY2goKSxjb21wbGV0ZTooKT0+dGhpcy5fc2V0SXNNZW51T3BlbighMSl9KTp0aGlzLl9zZXRJc01lbnVPcGVuKCExKSk6KHRoaXMuX3NldElzTWVudU9wZW4oITEpLGUubGF6eUNvbnRlbnQmJmUubGF6eUNvbnRlbnQuZGV0YWNoKCkpfV9pbml0TWVudSgpe3RoaXMubWVudS5wYXJlbnRNZW51PXRoaXMudHJpZ2dlcnNTdWJtZW51KCk/dGhpcy5fcGFyZW50TWF0ZXJpYWxNZW51OnZvaWQgMCx0aGlzLm1lbnUuZGlyZWN0aW9uPXRoaXMuZGlyLHRoaXMuX3NldE1lbnVFbGV2YXRpb24oKSx0aGlzLm1lbnUuZm9jdXNGaXJzdEl0ZW0odGhpcy5fb3BlbmVkQnl8fCJwcm9ncmFtIiksdGhpcy5fc2V0SXNNZW51T3BlbighMCl9X3NldE1lbnVFbGV2YXRpb24oKXtpZih0aGlzLm1lbnUuc2V0RWxldmF0aW9uKXtsZXQgdD0wLGU9dGhpcy5tZW51LnBhcmVudE1lbnU7Zm9yKDtlOyl0KyssZT1lLnBhcmVudE1lbnU7dGhpcy5tZW51LnNldEVsZXZhdGlvbih0KX19X3NldElzTWVudU9wZW4odCl7dGhpcy5fbWVudU9wZW49dCx0aGlzLl9tZW51T3Blbj90aGlzLm1lbnVPcGVuZWQuZW1pdCgpOnRoaXMubWVudUNsb3NlZC5lbWl0KCksdGhpcy50cmlnZ2Vyc1N1Ym1lbnUoKSYmKHRoaXMuX21lbnVJdGVtSW5zdGFuY2UuX2hpZ2hsaWdodGVkPXQpfV9jaGVja01lbnUoKXt0aGlzLm1lbnV8fCJ1bmRlZmluZWQiIT10eXBlb2YgbmdEZXZNb2RlJiYhbmdEZXZNb2RlfHwoCi8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpmdW5jdGlvbiB0KCl7dGhyb3cgRXJyb3IoJ21hdE1lbnVUcmlnZ2VyRm9yOiBtdXN0IHBhc3MgaW4gYW4gbWF0LW1lbnUgaW5zdGFuY2UuXG5cbiAgICBFeGFtcGxlOlxuICAgICAgPG1hdC1tZW51ICNtZW51PSJtYXRNZW51Ij48L21hdC1tZW51PlxuICAgICAgPGJ1dHRvbiBbbWF0TWVudVRyaWdnZXJGb3JdPSJtZW51Ij48L2J1dHRvbj4nKX0pKCl9X2NyZWF0ZU92ZXJsYXkoKXtpZighdGhpcy5fb3ZlcmxheVJlZil7Y29uc3QgdD10aGlzLl9nZXRPdmVybGF5Q29uZmlnKCk7dGhpcy5fc3Vic2NyaWJlVG9Qb3NpdGlvbnModC5wb3NpdGlvblN0cmF0ZWd5KSx0aGlzLl9vdmVybGF5UmVmPXRoaXMuX292ZXJsYXkuY3JlYXRlKHQpLHRoaXMuX292ZXJsYXlSZWYua2V5ZG93bkV2ZW50cygpLnN1YnNjcmliZSgpfXJldHVybiB0aGlzLl9vdmVybGF5UmVmfV9nZXRPdmVybGF5Q29uZmlnKCl7cmV0dXJuIG5ldyBTRih7cG9zaXRpb25TdHJhdGVneTp0aGlzLl9vdmVybGF5LnBvc2l0aW9uKCkuZmxleGlibGVDb25uZWN0ZWRUbyh0aGlzLl9lbGVtZW50KS53aXRoTG9ja2VkUG9zaXRpb24oKS53aXRoR3Jvd0FmdGVyT3BlbigpLndpdGhUcmFuc2Zvcm1PcmlnaW5PbigiLm1hdC1tZW51LXBhbmVsLCAubWF0LW1kYy1tZW51LXBhbmVsIiksYmFja2Ryb3BDbGFzczp0aGlzLm1lbnUuYmFja2Ryb3BDbGFzc3x8ImNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wIixwYW5lbENsYXNzOnRoaXMubWVudS5vdmVybGF5UGFuZWxDbGFzcyxzY3JvbGxTdHJhdGVneTp0aGlzLl9zY3JvbGxTdHJhdGVneSgpLGRpcmVjdGlvbjp0aGlzLl9kaXJ9KX1fc3Vic2NyaWJlVG9Qb3NpdGlvbnModCl7dGhpcy5tZW51LnNldFBvc2l0aW9uQ2xhc3NlcyYmdC5wb3NpdGlvbkNoYW5nZXMuc3Vic2NyaWJlKCh0PT57dGhpcy5tZW51LnNldFBvc2l0aW9uQ2xhc3Nlcygic3RhcnQiPT09dC5jb25uZWN0aW9uUGFpci5vdmVybGF5WD8iYWZ0ZXIiOiJiZWZvcmUiLCJ0b3AiPT09dC5jb25uZWN0aW9uUGFpci5vdmVybGF5WT8iYmVsb3ciOiJhYm92ZSIpfSkpfV9zZXRQb3NpdGlvbih0KXtsZXRbZSxuXT0iYmVmb3JlIj09PXRoaXMubWVudS54UG9zaXRpb24/WyJlbmQiLCJzdGFydCJdOlsic3RhcnQiLCJlbmQiXSxbbyxpXT0iYWJvdmUiPT09dGhpcy5tZW51LnlQb3NpdGlvbj9bImJvdHRvbSIsInRvcCJdOlsidG9wIiwiYm90dG9tIl0sW2Escl09W28saV0sW3MsbF09W2Usbl0sYz0wO3RoaXMudHJpZ2dlcnNTdWJtZW51KCk/KGw9ZT0iYmVmb3JlIj09PXRoaXMubWVudS54UG9zaXRpb24/InN0YXJ0IjoiZW5kIixuPXM9ImVuZCI9PT1lPyJzdGFydCI6ImVuZCIsYz0iYm90dG9tIj09PW8/ODotOCk6dGhpcy5tZW51Lm92ZXJsYXBUcmlnZ2VyfHwoYT0idG9wIj09PW8/ImJvdHRvbSI6InRvcCIscj0idG9wIj09PWk/ImJvdHRvbSI6InRvcCIpLHQud2l0aFBvc2l0aW9ucyhbe29yaWdpblg6ZSxvcmlnaW5ZOmEsb3ZlcmxheVg6cyxvdmVybGF5WTpvLG9mZnNldFk6Y30se29yaWdpblg6bixvcmlnaW5ZOmEsb3ZlcmxheVg6bCxvdmVybGF5WTpvLG9mZnNldFk6Y30se29yaWdpblg6ZSxvcmlnaW5ZOnIsb3ZlcmxheVg6cyxvdmVybGF5WTppLG9mZnNldFk6LWN9LHtvcmlnaW5YOm4sb3JpZ2luWTpyLG92ZXJsYXlYOmwsb3ZlcmxheVk6aSxvZmZzZXRZOi1jfV0pfV9tZW51Q2xvc2luZ0FjdGlvbnMoKXtjb25zdCB0PXRoaXMuX292ZXJsYXlSZWYuYmFja2Ryb3BDbGljaygpLGU9dGhpcy5fb3ZlcmxheVJlZi5kZXRhY2htZW50cygpO3JldHVybiBXdCh0LHRoaXMuX3BhcmVudE1hdGVyaWFsTWVudT90aGlzLl9wYXJlbnRNYXRlcmlhbE1lbnUuY2xvc2VkOlooKSx0aGlzLl9wYXJlbnRNYXRlcmlhbE1lbnU/dGhpcy5fcGFyZW50TWF0ZXJpYWxNZW51Ll9ob3ZlcmVkKCkucGlwZShHdCgodD0+dCE9PXRoaXMuX21lbnVJdGVtSW5zdGFuY2UpKSxHdCgoKCk9PnRoaXMuX21lbnVPcGVuKSkpOlooKSxlKX1faGFuZGxlTW91c2Vkb3duKHQpe3N6KHQpfHwodGhpcy5fb3BlbmVkQnk9MD09PXQuYnV0dG9uPyJtb3VzZSI6dm9pZCAwLHRoaXMudHJpZ2dlcnNTdWJtZW51KCkmJnQucHJldmVudERlZmF1bHQoKSl9X2hhbmRsZUtleWRvd24odCl7Y29uc3QgZT10LmtleUNvZGU7ZSE9PXRJJiZlIT09bkl8fCh0aGlzLl9vcGVuZWRCeT0ia2V5Ym9hcmQiKSx0aGlzLnRyaWdnZXJzU3VibWVudSgpJiYoMzk9PT1lJiYibHRyIj09PXRoaXMuZGlyfHwzNz09PWUmJiJydGwiPT09dGhpcy5kaXIpJiYodGhpcy5fb3BlbmVkQnk9ImtleWJvYXJkIix0aGlzLm9wZW5NZW51KCkpfV9oYW5kbGVDbGljayh0KXt0aGlzLnRyaWdnZXJzU3VibWVudSgpPyh0LnN0b3BQcm9wYWdhdGlvbigpLHRoaXMub3Blbk1lbnUoKSk6dGhpcy50b2dnbGVNZW51KCl9X2hhbmRsZUhvdmVyKCl7dGhpcy50cmlnZ2Vyc1N1Ym1lbnUoKSYmdGhpcy5fcGFyZW50TWF0ZXJpYWxNZW51JiYodGhpcy5faG92ZXJTdWJzY3JpcHRpb249dGhpcy5fcGFyZW50TWF0ZXJpYWxNZW51Ll9ob3ZlcmVkKCkucGlwZShHdCgodD0+dD09PXRoaXMuX21lbnVJdGVtSW5zdGFuY2UmJiF0LmRpc2FibGVkKSksYmUoMCxjdCkpLnN1YnNjcmliZSgoKCk9Pnt0aGlzLl9vcGVuZWRCeT0ibW91c2UiLHRoaXMubWVudSBpbnN0YW5jZW9mIFNHJiZ0aGlzLm1lbnUuX2lzQW5pbWF0aW5nP3RoaXMubWVudS5fYW5pbWF0aW9uRG9uZS5waXBlKE5lKDEpLGJlKDAsY3QpLHVuKHRoaXMuX3BhcmVudE1hdGVyaWFsTWVudS5faG92ZXJlZCgpKSkuc3Vic2NyaWJlKCgoKT0+dGhpcy5vcGVuTWVudSgpKSk6dGhpcy5vcGVuTWVudSgpfSkpKX1fZ2V0UG9ydGFsKCl7cmV0dXJuIHRoaXMuX3BvcnRhbCYmdGhpcy5fcG9ydGFsLnRlbXBsYXRlUmVmPT09dGhpcy5tZW51LnRlbXBsYXRlUmVmfHwodGhpcy5fcG9ydGFsPW5ldyBsRih0aGlzLm1lbnUudGVtcGxhdGVSZWYsdGhpcy5fdmlld0NvbnRhaW5lclJlZikpLHRoaXMuX3BvcnRhbH19TkcuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fE5HKShNdShKRiksTXUoY2gpLE11KFhoKSxNdShFRyksTXUodkcsOCksTXUoT0csMTApLE11KE16LDgpLE11KHB6KSl9LE5HLsm1ZGlyPUpvKHt0eXBlOk5HLHNlbGVjdG9yczpbWyIiLCJtYXQtbWVudS10cmlnZ2VyLWZvciIsIiJdLFsiIiwibWF0TWVudVRyaWdnZXJGb3IiLCIiXV0saG9zdEF0dHJzOlsiYXJpYS1oYXNwb3B1cCIsInRydWUiLDEsIm1hdC1tZW51LXRyaWdnZXIiXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MSZlJiZOdSgibW91c2Vkb3duIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5faGFuZGxlTW91c2Vkb3duKGUpfSkpKCJrZXlkb3duIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5faGFuZGxlS2V5ZG93bihlKX0pKSgiY2xpY2siLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLl9oYW5kbGVDbGljayhlKX0pKSwyJmUmJk5tKCJhcmlhLWV4cGFuZGVkIixuLm1lbnVPcGVufHxudWxsKSgiYXJpYS1jb250cm9scyIsbi5tZW51T3Blbj9uLm1lbnUucGFuZWxJZDpudWxsKX0saW5wdXRzOntyZXN0b3JlRm9jdXM6WyJtYXRNZW51VHJpZ2dlclJlc3RvcmVGb2N1cyIsInJlc3RvcmVGb2N1cyJdLF9kZXByZWNhdGVkTWF0TWVudVRyaWdnZXJGb3I6WyJtYXQtbWVudS10cmlnZ2VyLWZvciIsIl9kZXByZWNhdGVkTWF0TWVudVRyaWdnZXJGb3IiXSxtZW51OlsibWF0TWVudVRyaWdnZXJGb3IiLCJtZW51Il0sbWVudURhdGE6WyJtYXRNZW51VHJpZ2dlckRhdGEiLCJtZW51RGF0YSJdfSxvdXRwdXRzOnttZW51T3BlbmVkOiJtZW51T3BlbmVkIixvbk1lbnVPcGVuOiJvbk1lbnVPcGVuIixtZW51Q2xvc2VkOiJtZW51Q2xvc2VkIixvbk1lbnVDbG9zZToib25NZW51Q2xvc2UifSxleHBvcnRBczpbIm1hdE1lbnVUcmlnZ2VyIl19KSxORy5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOkpGfSx7dHlwZTpjaH0se3R5cGU6WGh9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltFR119XX0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W3ZHXX0se3R5cGU6X3N9XX0se3R5cGU6T0csZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOkNzfV19LHt0eXBlOk16LGRlY29yYXRvcnM6W3t0eXBlOl9zfV19LHt0eXBlOnB6fV0sTkcucHJvcERlY29yYXRvcnM9e19kZXByZWNhdGVkTWF0TWVudVRyaWdnZXJGb3I6W3t0eXBlOnlfLGFyZ3M6WyJtYXQtbWVudS10cmlnZ2VyLWZvciJdfV0sbWVudTpbe3R5cGU6eV8sYXJnczpbIm1hdE1lbnVUcmlnZ2VyRm9yIl19XSxtZW51RGF0YTpbe3R5cGU6eV8sYXJnczpbIm1hdE1lbnVUcmlnZ2VyRGF0YSJdfV0scmVzdG9yZUZvY3VzOlt7dHlwZTp5XyxhcmdzOlsibWF0TWVudVRyaWdnZXJSZXN0b3JlRm9jdXMiXX1dLG1lbnVPcGVuZWQ6W3t0eXBlOl9ffV0sb25NZW51T3Blbjpbe3R5cGU6X199XSxtZW51Q2xvc2VkOlt7dHlwZTpfX31dLG9uTWVudUNsb3NlOlt7dHlwZTpfX31dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKE5HLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6IlttYXQtbWVudS10cmlnZ2VyLWZvcl0sIFttYXRNZW51VHJpZ2dlckZvcl0iLGhvc3Q6e2NsYXNzOiJtYXQtbWVudS10cmlnZ2VyIiwiYXJpYS1oYXNwb3B1cCI6InRydWUiLCJbYXR0ci5hcmlhLWV4cGFuZGVkXSI6Im1lbnVPcGVuIHx8IG51bGwiLCJbYXR0ci5hcmlhLWNvbnRyb2xzXSI6Im1lbnVPcGVuID8gbWVudS5wYW5lbElkIDogbnVsbCIsIihtb3VzZWRvd24pIjoiX2hhbmRsZU1vdXNlZG93bigkZXZlbnQpIiwiKGtleWRvd24pIjoiX2hhbmRsZUtleWRvd24oJGV2ZW50KSIsIihjbGljaykiOiJfaGFuZGxlQ2xpY2soJGV2ZW50KSJ9LGV4cG9ydEFzOiJtYXRNZW51VHJpZ2dlciJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpKRn0se3R5cGU6Y2h9LHt0eXBlOlhofSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbRUddfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOlt2R119LHt0eXBlOl9zfV19LHt0eXBlOk9HLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTpDc31dfSx7dHlwZTpNeixkZWNvcmF0b3JzOlt7dHlwZTpfc31dfSx7dHlwZTpwen1dfSkse3Jlc3RvcmVGb2N1czpbe3R5cGU6eV8sYXJnczpbIm1hdE1lbnVUcmlnZ2VyUmVzdG9yZUZvY3VzIl19XSxtZW51T3BlbmVkOlt7dHlwZTpfX31dLG9uTWVudU9wZW46W3t0eXBlOl9ffV0sbWVudUNsb3NlZDpbe3R5cGU6X199XSxvbk1lbnVDbG9zZTpbe3R5cGU6X199XSxfZGVwcmVjYXRlZE1hdE1lbnVUcmlnZ2VyRm9yOlt7dHlwZTp5XyxhcmdzOlsibWF0LW1lbnUtdHJpZ2dlci1mb3IiXX1dLG1lbnU6W3t0eXBlOnlfLGFyZ3M6WyJtYXRNZW51VHJpZ2dlckZvciJdfV0sbWVudURhdGE6W3t0eXBlOnlfLGFyZ3M6WyJtYXRNZW51VHJpZ2dlckRhdGEiXX1dfSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyBJR3t9SUcuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fElHKX0sSUcuybVtb2Q9Wm8oe3R5cGU6SUd9KSxJRy7JtWluaj1jbyh7cHJvdmlkZXJzOltBR10saW1wb3J0czpbVHpdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhJRyx7ZGVjbGFyYXRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuW05HLE1HXX0sZXhwb3J0czpmdW5jdGlvbigpe3JldHVybltORyxNRyxUel19fSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihJRyxbe3R5cGU6a18sYXJnczpbe2V4cG9ydHM6W05HLE1HLFR6XSxkZWNsYXJhdGlvbnM6W05HLE1HXSxwcm92aWRlcnM6W0FHXX1dfV0sbnVsbCxudWxsKTtjbGFzcyB6R3t9ZnVuY3Rpb24gSEcodCxlKXsxJnQmJnd1KDAsIm1hdC1pY29uIiw4KX1mdW5jdGlvbiBGRyh0LGUpezEmdCYmd3UoMCwibWF0LWljb24iLDkpfWZ1bmN0aW9uIExHKHQsZSl7MSZ0JiZ3dSgwLCJtYXQtaWNvbiIsMTApfXZhciBCRzt6Ry7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8ekcpfSx6Ry7JtW1vZD1abyh7dHlwZTp6R30pLHpHLsm1aW5qPWNvKHtwcm92aWRlcnM6W0FHXSxpbXBvcnRzOltbQnYsVHosbUgsaUwsSUddLG9GLFR6LElHXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oekcse2RlY2xhcmF0aW9uczpmdW5jdGlvbigpe3JldHVybltERyxPR119LGltcG9ydHM6ZnVuY3Rpb24oKXtyZXR1cm5bQnYsVHosbUgsaUwsSUddfSxleHBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW29GLFR6LERHLE9HLElHXX19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHpHLFt7dHlwZTprXyxhcmdzOlt7aW1wb3J0czpbQnYsVHosbUgsaUwsSUddLGV4cG9ydHM6W29GLFR6LERHLE9HLElHXSxkZWNsYXJhdGlvbnM6W0RHLE9HXSxwcm92aWRlcnM6W0FHXX1dfV0sbnVsbCxudWxsKSwoZnVuY3Rpb24odCl7dFt0LkRFRkFVTFQ9MF09IkRFRkFVTFQiLHRbdC5EQVJLX01PREVfT049MV09IkRBUktfTU9ERV9PTiIsdFt0LkRBUktfTU9ERV9PRkY9Ml09IkRBUktfTU9ERV9PRkYifSkoQkd8fChCRz17fSkpO2NsYXNzIFZHe2NvbnN0cnVjdG9yKCl7dGhpcy5EYXJrTW9kZU92ZXJyaWRlPUJHLHRoaXMub25PdmVycmlkZUNoYW5nZWQ9bmV3IEFifWdldEJ1dHRvblRpdGxlKCl7bGV0IHQ7c3dpdGNoKHRoaXMuZGFya01vZGVPdmVycmlkZSl7Y2FzZSBCRy5ERUZBVUxUOnQ9IkJyb3dzZXIgZGVmYXVsdCI7YnJlYWs7Y2FzZSBCRy5EQVJLX01PREVfT046dD0iRGFyayBtb2RlIjticmVhaztjYXNlIEJHLkRBUktfTU9ERV9PRkY6dD0iTGlnaHQgbW9kZSJ9cmV0dXJuYEN1cnJlbnQgbW9kZTogWyR7dH1dLiBTd2l0Y2ggYmV0d2VlbiBicm93c2VyIGRlZmF1bHQsIGxpZ2h0LCBvciBkYXJrIHRoZW1lLmB9fVZHLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxWRyl9LFZHLsm1Y21wPVVvKHt0eXBlOlZHLHNlbGVjdG9yczpbWyJhcHAtaGVhZGVyLWRhcmstbW9kZS10b2dnbGUtY29tcG9uZW50Il1dLGlucHV0czp7ZGFya01vZGVPdmVycmlkZToiZGFya01vZGVPdmVycmlkZSJ9LG91dHB1dHM6e29uT3ZlcnJpZGVDaGFuZ2VkOiJvbk92ZXJyaWRlQ2hhbmdlZCJ9LGRlY2xzOjE1LHZhcnM6Nixjb25zdHM6W1sibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsIk1lbnUgZm9yIGNoYW5naW5nIGxpZ2h0IG9yIGRhcmsgdGhlbWUiLDMsIm1hdE1lbnVUcmlnZ2VyRm9yIiwibmdTd2l0Y2giLCJ0aXRsZSJdLFsic3ZnSWNvbiIsImJyaWdodG5lc3NfNl8yNHB4Iiw0LCJuZ1N3aXRjaENhc2UiXSxbInN2Z0ljb24iLCJsaWdodF9tb2RlXzI0cHgiLDQsIm5nU3dpdGNoQ2FzZSJdLFsic3ZnSWNvbiIsImRhcmtfbW9kZV8yNHB4Iiw0LCJuZ1N3aXRjaENhc2UiXSxbIm1lbnUiLCJtYXRNZW51Il0sWyJtYXQtbWVudS1pdGVtIiwiIiwidGl0bGUiLCJTZXQgdGhlIHRoZW1lIHRvIG1hdGNoIHRoZSBkZWZhdWx0IG1vZGUgaW4gdGhlIGJyb3dzZXIuIiwzLCJjbGljayJdLFsibWF0LW1lbnUtaXRlbSIsIiIsInRpdGxlIiwiRm9yY2UgbGlnaHQgVGVuc29yQm9hcmQgdGhlbWUuIiwzLCJjbGljayJdLFsibWF0LW1lbnUtaXRlbSIsIiIsInRpdGxlIiwiRm9yY2UgZGFyayBUZW5zb3JCb2FyZCB0aGVtZS4iLDMsImNsaWNrIl0sWyJzdmdJY29uIiwiYnJpZ2h0bmVzc182XzI0cHgiXSxbInN2Z0ljb24iLCJsaWdodF9tb2RlXzI0cHgiXSxbInN2Z0ljb24iLCJkYXJrX21vZGVfMjRweCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoT3UoMCwiYnV0dG9uIiwwKSxXbSgxLEhHLDEsMCwibWF0LWljb24iLDEpLFdtKDIsRkcsMSwwLCJtYXQtaWNvbiIsMiksV20oMyxMRywxLDAsIm1hdC1pY29uIiwzKSxQdSgpLE91KDQsIm1hdC1tZW51IixudWxsLDQpLE91KDYsImJ1dHRvbiIsNSksTnUoImNsaWNrIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uT3ZlcnJpZGVDaGFuZ2VkLmVtaXQobi5EYXJrTW9kZU92ZXJyaWRlLkRFRkFVTFQpfSkpLE91KDcsImxhYmVsIiksTWYoOCwiQnJvd3NlciBkZWZhdWx0IiksUHUoKSxQdSgpLE91KDksImJ1dHRvbiIsNiksTnUoImNsaWNrIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uT3ZlcnJpZGVDaGFuZ2VkLmVtaXQobi5EYXJrTW9kZU92ZXJyaWRlLkRBUktfTU9ERV9PRkYpfSkpLE91KDEwLCJsYWJlbCIpLE1mKDExLCJMaWdodCIpLFB1KCksUHUoKSxPdSgxMiwiYnV0dG9uIiw3KSxOdSgiY2xpY2siLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub25PdmVycmlkZUNoYW5nZWQuZW1pdChuLkRhcmtNb2RlT3ZlcnJpZGUuREFSS19NT0RFX09OKX0pKSxPdSgxMywibGFiZWwiKSxNZigxNCwiRGFyayIpLFB1KCksUHUoKSxQdSgpKSwyJmUmJih2dSgibWF0TWVudVRyaWdnZXJGb3IiLEdtKDUpKSgibmdTd2l0Y2giLG4uZGFya01vZGVPdmVycmlkZSkoInRpdGxlIixuLmdldEJ1dHRvblRpdGxlKCkpLEpjKDEpLHZ1KCJuZ1N3aXRjaENhc2UiLG4uRGFya01vZGVPdmVycmlkZS5ERUZBVUxUKSxKYygxKSx2dSgibmdTd2l0Y2hDYXNlIixuLkRhcmtNb2RlT3ZlcnJpZGUuREFSS19NT0RFX09GRiksSmMoMSksdnUoIm5nU3dpdGNoQ2FzZSIsbi5EYXJrTW9kZU92ZXJyaWRlLkRBUktfTU9ERV9PTikpfSxkaXJlY3RpdmVzOltOSCxORyxjdixkdixERyxPRyxjR10sZW5jYXBzdWxhdGlvbjoyfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihWRyxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJhcHAtaGVhZGVyLWRhcmstbW9kZS10b2dnbGUtY29tcG9uZW50Iix0ZW1wbGF0ZTonXG4gICAgPGJ1dHRvblxuICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPSJtZW51IlxuICAgICAgYXJpYS1sYWJlbD0iTWVudSBmb3IgY2hhbmdpbmcgbGlnaHQgb3IgZGFyayB0aGVtZSJcbiAgICAgIFtuZ1N3aXRjaF09ImRhcmtNb2RlT3ZlcnJpZGUiXG4gICAgICBbdGl0bGVdPSJnZXRCdXR0b25UaXRsZSgpIlxuICAgID5cbiAgICAgIDxtYXQtaWNvblxuICAgICAgICAqbmdTd2l0Y2hDYXNlPSJEYXJrTW9kZU92ZXJyaWRlLkRFRkFVTFQiXG4gICAgICAgIHN2Z0ljb249ImJyaWdodG5lc3NfNl8yNHB4IlxuICAgICAgPjwvbWF0LWljb24+XG4gICAgICA8bWF0LWljb25cbiAgICAgICAgKm5nU3dpdGNoQ2FzZT0iRGFya01vZGVPdmVycmlkZS5EQVJLX01PREVfT0ZGIlxuICAgICAgICBzdmdJY29uPSJsaWdodF9tb2RlXzI0cHgiXG4gICAgICA+PC9tYXQtaWNvbj5cbiAgICAgIDxtYXQtaWNvblxuICAgICAgICAqbmdTd2l0Y2hDYXNlPSJEYXJrTW9kZU92ZXJyaWRlLkRBUktfTU9ERV9PTiJcbiAgICAgICAgc3ZnSWNvbj0iZGFya19tb2RlXzI0cHgiXG4gICAgICA+PC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8bWF0LW1lbnUgI21lbnU9Im1hdE1lbnUiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBtYXQtbWVudS1pdGVtXG4gICAgICAgIHRpdGxlPSJTZXQgdGhlIHRoZW1lIHRvIG1hdGNoIHRoZSBkZWZhdWx0IG1vZGUgaW4gdGhlIGJyb3dzZXIuIlxuICAgICAgICAoY2xpY2spPSJvbk92ZXJyaWRlQ2hhbmdlZC5lbWl0KERhcmtNb2RlT3ZlcnJpZGUuREVGQVVMVCkiXG4gICAgICA+XG4gICAgICAgIDxsYWJlbD5Ccm93c2VyIGRlZmF1bHQ8L2xhYmVsPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIG1hdC1tZW51LWl0ZW1cbiAgICAgICAgdGl0bGU9IkZvcmNlIGxpZ2h0IFRlbnNvckJvYXJkIHRoZW1lLiJcbiAgICAgICAgKGNsaWNrKT0ib25PdmVycmlkZUNoYW5nZWQuZW1pdChEYXJrTW9kZU92ZXJyaWRlLkRBUktfTU9ERV9PRkYpIlxuICAgICAgPlxuICAgICAgICA8bGFiZWw+TGlnaHQ8L2xhYmVsPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIG1hdC1tZW51LWl0ZW1cbiAgICAgICAgdGl0bGU9IkZvcmNlIGRhcmsgVGVuc29yQm9hcmQgdGhlbWUuIlxuICAgICAgICAoY2xpY2spPSJvbk92ZXJyaWRlQ2hhbmdlZC5lbWl0KERhcmtNb2RlT3ZlcnJpZGUuREFSS19NT0RFX09OKSJcbiAgICAgID5cbiAgICAgICAgPGxhYmVsPkRhcms8L2xhYmVsPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9tYXQtbWVudT5cbiAgJ31dfV0sbnVsbCx7ZGFya01vZGVPdmVycmlkZTpbe3R5cGU6eV99XSxvbk92ZXJyaWRlQ2hhbmdlZDpbe3R5cGU6X199XX0pO2NsYXNzIGpHe2NvbnN0cnVjdG9yKHQpe3RoaXMuc3RvcmU9dCx0aGlzLmRhcmtNb2RlT3ZlcnJpZGUkPXRoaXMuc3RvcmUuc2VsZWN0KHZFKS5waXBlKGh0KCh0PT5udWxsPT09dD9CRy5ERUZBVUxUOnQ/QkcuREFSS19NT0RFX09OOkJHLkRBUktfTU9ERV9PRkYpKSl9Y2hhbmdlRGFya01vZGUodCl7bGV0IGU9bnVsbDtzd2l0Y2godCl7Y2FzZSBCRy5ERUZBVUxUOmU9bnVsbDticmVhaztjYXNlIEJHLkRBUktfTU9ERV9PRkY6ZT0hMTticmVhaztjYXNlIEJHLkRBUktfTU9ERV9PTjplPSEwfXRoaXMuc3RvcmUuZGlzcGF0Y2godFQoe2VuYWJsZURhcmtNb2RlOmV9KSl9fWpHLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxqRykoTXUoRWspKX0sakcuybVjbXA9VW8oe3R5cGU6akcsc2VsZWN0b3JzOltbImFwcC1oZWFkZXItZGFyay1tb2RlLXRvZ2dsZSJdXSxkZWNsczoyLHZhcnM6Myxjb25zdHM6W1szLCJkYXJrTW9kZU92ZXJyaWRlIiwib25PdmVycmlkZUNoYW5nZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKE91KDAsImFwcC1oZWFkZXItZGFyay1tb2RlLXRvZ2dsZS1jb21wb25lbnQiLDApLE51KCJvbk92ZXJyaWRlQ2hhbmdlZCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4uY2hhbmdlRGFya01vZGUoZSl9KSksT2IoMSwiYXN5bmMiKSxQdSgpKSwyJmUmJnZ1KCJkYXJrTW9kZU92ZXJyaWRlIixQYigxLDEsbi5kYXJrTW9kZU92ZXJyaWRlJCkpfSxkaXJlY3RpdmVzOltWR10scGlwZXM6W012XSxlbmNhcHN1bGF0aW9uOjJ9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGpHLFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6ImFwcC1oZWFkZXItZGFyay1tb2RlLXRvZ2dsZSIsdGVtcGxhdGU6J1xuICAgIDxhcHAtaGVhZGVyLWRhcmstbW9kZS10b2dnbGUtY29tcG9uZW50XG4gICAgICBbZGFya01vZGVPdmVycmlkZV09ImRhcmtNb2RlT3ZlcnJpZGUkIHwgYXN5bmMiXG4gICAgICAob25PdmVycmlkZUNoYW5nZWQpPSJjaGFuZ2VEYXJrTW9kZSgkZXZlbnQpIlxuICAgID5cbiAgICA8L2FwcC1oZWFkZXItZGFyay1tb2RlLXRvZ2dsZS1jb21wb25lbnQ+XG4gICd9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpFa31dfSksbnVsbCk7Y29uc3QgVUc9emsocEEsZEEsKCh0LGUpPT4hKCFlfHwhdFtlXSkmJnRbZV0uZGlzYWJsZV9yZWxvYWQpKTtjbGFzcyBXR3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXQsdGhpcy5yZWxvYWREaXNhYmxlZCQ9dGhpcy5zdG9yZS5zZWxlY3QoVUcpLHRoaXMuaXNSZWxvYWRpbmckPXRoaXMuc3RvcmUuc2VsZWN0KGxBKS5waXBlKGNlKHRoaXMucmVsb2FkRGlzYWJsZWQkKSxodCgoKFt0LGVdKT0+IWUmJnQ9PT1CRS5MT0FESU5HKSkpLHRoaXMubGFzdExvYWRlZFRpbWVJbk1zJD10aGlzLnN0b3JlLnNlbGVjdChjQSl9dHJpZ2dlclJlbG9hZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goV0UoKSl9Z2V0UmVsb2FkVGl0bGUodCl7cmV0dXJuIHQ/YExhc3QgVXBkYXRlZDogJHt0fWA6IkxvYWRpbmcuLi4ifX1XRy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8V0cpKE11KEVrKSl9LFdHLsm1Y21wPVVvKHt0eXBlOldHLHNlbGVjdG9yczpbWyJhcHAtaGVhZGVyLXJlbG9hZCJdXSxkZWNsczo2LHZhcnM6MTMsY29uc3RzOltbIm1hdC1pY29uLWJ1dHRvbiIsIiIsMSwicmVsb2FkLWJ1dHRvbiIsMywidGl0bGUiLCJkaXNhYmxlZCIsImNsaWNrIl0sWyJzdmdJY29uIiwicmVmcmVzaF8yNHB4IiwxLCJyZWZyZXNoLWljb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKE91KDAsImJ1dHRvbiIsMCksTnUoImNsaWNrIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLnRyaWdnZXJSZWxvYWQoKX0pKSxPYigxLCJhc3luYyIpLE9iKDIsImRhdGUiKSxPYigzLCJhc3luYyIpLE9iKDQsImFzeW5jIiksd3UoNSwibWF0LWljb24iLDEpLFB1KCkpLDImZSYmKGFmKCJsb2FkaW5nIixQYigxLDQsbi5pc1JlbG9hZGluZyQpKSx2dSgidGl0bGUiLG4uZ2V0UmVsb2FkVGl0bGUod2IoMiw2LFBiKDMsOSxuLmxhc3RMb2FkZWRUaW1lSW5NcyQpLCJtZWRpdW0iKSkpKCJkaXNhYmxlZCIsUGIoNCwxMSxuLnJlbG9hZERpc2FibGVkJCkpKX0sZGlyZWN0aXZlczpbTkgsY0ddLHBpcGVzOltNdix3dl0sc3R5bGVzOlsiLnJlbG9hZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAucmVmcmVzaC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgfVxuXG4gICAgICAucmVsb2FkLWJ1dHRvbi5sb2FkaW5nW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIGFuaW1hdGlvbjogcm90YXRlIDJzIGxpbmVhciBpbmZpbml0ZTtcbiAgICAgIH1cblxuICAgICAgQGtleWZyYW1lcyByb3RhdGUge1xuICAgICAgICAwJSB7XG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XG4gICAgICAgIH1cbiAgICAgICAgNTAlIHtcbiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO1xuICAgICAgICB9XG4gICAgICAgIDEwMCUge1xuICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XG4gICAgICAgIH1cbiAgICAgIH0iXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoV0csW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoiYXBwLWhlYWRlci1yZWxvYWQiLHRlbXBsYXRlOidcbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz0icmVsb2FkLWJ1dHRvbiJcbiAgICAgIFtjbGFzcy5sb2FkaW5nXT0iaXNSZWxvYWRpbmckIHwgYXN5bmMiXG4gICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgIChjbGljayk9InRyaWdnZXJSZWxvYWQoKSJcbiAgICAgIFt0aXRsZV09ImdldFJlbG9hZFRpdGxlKGxhc3RMb2FkZWRUaW1lSW5NcyQgfCBhc3luYyB8IGRhdGU6IFwnbWVkaXVtXCcpIlxuICAgICAgW2Rpc2FibGVkXT0icmVsb2FkRGlzYWJsZWQkIHwgYXN5bmMiXG4gICAgPlxuICAgICAgPG1hdC1pY29uIGNsYXNzPSJyZWZyZXNoLWljb24iIHN2Z0ljb249InJlZnJlc2hfMjRweCI+PC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgJyxzdHlsZXM6WyJcbiAgICAgIC5yZWxvYWQtYnV0dG9uLFxuICAgICAgLnJlZnJlc2gtaWNvbiB7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgfVxuXG4gICAgICAucmVsb2FkLWJ1dHRvbi5sb2FkaW5nIHtcbiAgICAgICAgYW5pbWF0aW9uOiByb3RhdGUgMnMgbGluZWFyIGluZmluaXRlO1xuICAgICAgfVxuXG4gICAgICBAa2V5ZnJhbWVzIHJvdGF0ZSB7XG4gICAgICAgIDAlIHtcbiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcbiAgICAgICAgfVxuICAgICAgICA1MCUge1xuICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XG4gICAgICAgIH1cbiAgICAgICAgMTAwJSB7XG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICJdfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6RWt9XX0pLG51bGwpO2NvbnN0IEdHPSJzZXR0aW5ncyIsWUc9e3N0YXRlOkJFLkxPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6RGF0ZS5ub3coKSxzZXR0aW5nczp7cmVsb2FkUGVyaW9kSW5NczozZTQscmVsb2FkRW5hYmxlZDohMSxwYWdlU2l6ZToxMn19LHFHPUZrKEdHKSxaRz16ayhxRywodD0+dC5zdGF0ZSkpLFhHPXprKHFHLCh0PT50LnNldHRpbmdzLnJlbG9hZEVuYWJsZWQpKSxLRz16ayhxRywodD0+dC5zZXR0aW5ncy5yZWxvYWRQZXJpb2RJbk1zKSksSkc9emsocUcsKHQ9PnQuc2V0dGluZ3MucGFnZVNpemUpKSxRRz1XdygiW1NldHRpbmdzXSBSZWxvYWQgRW5hYmxlIFRvZ2dsZWQiKSwkRz1XdygiW1NldHRpbmdzXSBSZWxvYWQgUGVyaW9kIENoYW5nZSIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHRZPVd3KCJbU2V0dGluZ3NdIFBhZ2UgU2l6ZSBDaGFuZ2UiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KTtmdW5jdGlvbiBlWSh0KXtyZXR1cm4gdC5zdGF0ZSE9PUJFLk5PVF9MT0FERUQmJnQuc3RhdGUhPT1CRS5MT0FESU5HfWNvbnN0IG5ZPW1TKFlHLHBTKFFHLCh0PT5lWSh0KT9PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3NldHRpbmdzOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LnNldHRpbmdzKSx7cmVsb2FkRW5hYmxlZDohdC5zZXR0aW5ncy5yZWxvYWRFbmFibGVkfSl9KTp0KSkscFMoJEcsKCh0LHtwZXJpb2RJbk1zOmV9KT0+e2lmKCFlWSh0KSlyZXR1cm4gdDtjb25zdCBuPWU+PTNlND9lOnQuc2V0dGluZ3MucmVsb2FkUGVyaW9kSW5NcztyZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtzZXR0aW5nczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5zZXR0aW5ncykse3JlbG9hZFBlcmlvZEluTXM6bn0pfSl9KSkscFModFksKCh0LHtzaXplOmV9KT0+e2lmKCFlWSh0KSlyZXR1cm4gdDtjb25zdCBuPWU+MD9lOnQuc2V0dGluZ3MucGFnZVNpemU7cmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7c2V0dGluZ3M6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuc2V0dGluZ3MpLHtwYWdlU2l6ZTpufSl9KX0pKSxwUyhQUiwoKHQse3BhcnRpYWxTZXR0aW5nczplfSk9Pntjb25zdCBuPXt9O3JldHVybiBOdW1iZXIuaXNGaW5pdGUoZS5wYWdlU2l6ZSkmJmUucGFnZVNpemU+MCYmKG4ucGFnZVNpemU9ZS5wYWdlU2l6ZSksImJvb2xlYW4iPT10eXBlb2YgZS5hdXRvUmVsb2FkJiYobi5yZWxvYWRFbmFibGVkPWUuYXV0b1JlbG9hZCksTnVtYmVyLmlzRmluaXRlKGUuYXV0b1JlbG9hZFBlcmlvZEluTXMpJiZlLmF1dG9SZWxvYWRQZXJpb2RJbk1zPjNlNCYmKG4ucmVsb2FkUGVyaW9kSW5Ncz1lLmF1dG9SZWxvYWRQZXJpb2RJbk1zKSxPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3NldHRpbmdzOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LnNldHRpbmdzKSxuKX0pfSkpKTtmdW5jdGlvbiBvWSh0LGUpe3JldHVybiBuWSh0LGUpfWNvbnN0IGlZPVsiaW5wdXQiXSxhWT1mdW5jdGlvbigpe3JldHVybntlbnRlckR1cmF0aW9uOjE1MH19LHJZPW5ldyBOcigibWF0LWNoZWNrYm94LWRlZmF1bHQtb3B0aW9ucyIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24gc1koKXtyZXR1cm57Y29sb3I6ImFjY2VudCIsY2xpY2tBY3Rpb246ImNoZWNrLWluZGV0ZXJtaW5hdGUifX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovfSk7bGV0IGxZPTA7Y29uc3QgY1k9e2NvbG9yOiJhY2NlbnQiLGNsaWNrQWN0aW9uOiJjaGVjay1pbmRldGVybWluYXRlIn0sZFk9e3Byb3ZpZGU6dlYsdXNlRXhpc3Rpbmc6SW4oKCgpPT51WSkpLG11bHRpOiEwfTtjbGFzcyBwWXt9Y29uc3QgbVk9SHooSXooenooTnooY2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5fZWxlbWVudFJlZj10fX0pKSkpO2NsYXNzIHVZIGV4dGVuZHMgbVl7Y29uc3RydWN0b3IodCxlLG4sbyxpLGEscil7c3VwZXIodCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9ZSx0aGlzLl9mb2N1c01vbml0b3I9bix0aGlzLl9uZ1pvbmU9byx0aGlzLl9hbmltYXRpb25Nb2RlPWEsdGhpcy5fb3B0aW9ucz1yLHRoaXMuYXJpYUxhYmVsPSIiLHRoaXMuYXJpYUxhYmVsbGVkYnk9bnVsbCx0aGlzLl91bmlxdWVJZD0ibWF0LWNoZWNrYm94LSIrICsrbFksdGhpcy5pZD10aGlzLl91bmlxdWVJZCx0aGlzLmxhYmVsUG9zaXRpb249ImFmdGVyIix0aGlzLm5hbWU9bnVsbCx0aGlzLmNoYW5nZT1uZXcgQWIsdGhpcy5pbmRldGVybWluYXRlQ2hhbmdlPW5ldyBBYix0aGlzLl9vblRvdWNoZWQ9KCk9Pnt9LHRoaXMuX2N1cnJlbnRBbmltYXRpb25DbGFzcz0iIix0aGlzLl9jdXJyZW50Q2hlY2tTdGF0ZT0wLHRoaXMuX2NvbnRyb2xWYWx1ZUFjY2Vzc29yQ2hhbmdlRm49KCk9Pnt9LHRoaXMuX2NoZWNrZWQ9ITEsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5faW5kZXRlcm1pbmF0ZT0hMSx0aGlzLl9vcHRpb25zPXRoaXMuX29wdGlvbnN8fGNZLHRoaXMuY29sb3I9dGhpcy5kZWZhdWx0Q29sb3I9dGhpcy5fb3B0aW9ucy5jb2xvcnx8Y1kuY29sb3IsdGhpcy50YWJJbmRleD1wYXJzZUludChpKXx8MH1nZXQgaW5wdXRJZCgpe3JldHVybmAke3RoaXMuaWR8fHRoaXMuX3VuaXF1ZUlkfS1pbnB1dGB9Z2V0IHJlcXVpcmVkKCl7cmV0dXJuIHRoaXMuX3JlcXVpcmVkfXNldCByZXF1aXJlZCh0KXt0aGlzLl9yZXF1aXJlZD1ySSh0KX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9mb2N1c01vbml0b3IubW9uaXRvcih0aGlzLl9lbGVtZW50UmVmLCEwKS5zdWJzY3JpYmUoKHQ9Pnt0fHxQcm9taXNlLnJlc29sdmUoKS50aGVuKCgoKT0+e3RoaXMuX29uVG91Y2hlZCgpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSkpfSkpLHRoaXMuX3N5bmNJbmRldGVybWluYXRlKHRoaXMuX2luZGV0ZXJtaW5hdGUpfW5nQWZ0ZXJWaWV3Q2hlY2tlZCgpe31uZ09uRGVzdHJveSgpe3RoaXMuX2ZvY3VzTW9uaXRvci5zdG9wTW9uaXRvcmluZyh0aGlzLl9lbGVtZW50UmVmKX1nZXQgY2hlY2tlZCgpe3JldHVybiB0aGlzLl9jaGVja2VkfXNldCBjaGVja2VkKHQpe3QhPXRoaXMuY2hlY2tlZCYmKHRoaXMuX2NoZWNrZWQ9dCx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfXNldCBkaXNhYmxlZCh0KXtjb25zdCBlPXJJKHQpO2UhPT10aGlzLmRpc2FibGVkJiYodGhpcy5fZGlzYWJsZWQ9ZSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9Z2V0IGluZGV0ZXJtaW5hdGUoKXtyZXR1cm4gdGhpcy5faW5kZXRlcm1pbmF0ZX1zZXQgaW5kZXRlcm1pbmF0ZSh0KXtjb25zdCBlPXQhPXRoaXMuX2luZGV0ZXJtaW5hdGU7dGhpcy5faW5kZXRlcm1pbmF0ZT1ySSh0KSxlJiYodGhpcy5fdHJhbnNpdGlvbkNoZWNrU3RhdGUodGhpcy5faW5kZXRlcm1pbmF0ZT8zOnRoaXMuY2hlY2tlZD8xOjIpLHRoaXMuaW5kZXRlcm1pbmF0ZUNoYW5nZS5lbWl0KHRoaXMuX2luZGV0ZXJtaW5hdGUpKSx0aGlzLl9zeW5jSW5kZXRlcm1pbmF0ZSh0aGlzLl9pbmRldGVybWluYXRlKX1faXNSaXBwbGVEaXNhYmxlZCgpe3JldHVybiB0aGlzLmRpc2FibGVSaXBwbGV8fHRoaXMuZGlzYWJsZWR9X29uTGFiZWxUZXh0Q2hhbmdlKCl7dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpfXdyaXRlVmFsdWUodCl7dGhpcy5jaGVja2VkPSEhdH1yZWdpc3Rlck9uQ2hhbmdlKHQpe3RoaXMuX2NvbnRyb2xWYWx1ZUFjY2Vzc29yQ2hhbmdlRm49dH1yZWdpc3Rlck9uVG91Y2hlZCh0KXt0aGlzLl9vblRvdWNoZWQ9dH1zZXREaXNhYmxlZFN0YXRlKHQpe3RoaXMuZGlzYWJsZWQ9dH1fZ2V0QXJpYUNoZWNrZWQoKXtyZXR1cm4gdGhpcy5jaGVja2VkPyJ0cnVlIjp0aGlzLmluZGV0ZXJtaW5hdGU/Im1peGVkIjoiZmFsc2UifV90cmFuc2l0aW9uQ2hlY2tTdGF0ZSh0KXtsZXQgZT10aGlzLl9jdXJyZW50Q2hlY2tTdGF0ZSxuPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtpZihlIT09dCYmKHRoaXMuX2N1cnJlbnRBbmltYXRpb25DbGFzcy5sZW5ndGg+MCYmbi5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuX2N1cnJlbnRBbmltYXRpb25DbGFzcyksdGhpcy5fY3VycmVudEFuaW1hdGlvbkNsYXNzPXRoaXMuX2dldEFuaW1hdGlvbkNsYXNzRm9yQ2hlY2tTdGF0ZVRyYW5zaXRpb24oZSx0KSx0aGlzLl9jdXJyZW50Q2hlY2tTdGF0ZT10LHRoaXMuX2N1cnJlbnRBbmltYXRpb25DbGFzcy5sZW5ndGg+MCkpe24uY2xhc3NMaXN0LmFkZCh0aGlzLl9jdXJyZW50QW5pbWF0aW9uQ2xhc3MpO2NvbnN0IHQ9dGhpcy5fY3VycmVudEFuaW1hdGlvbkNsYXNzO3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKCk9PntzZXRUaW1lb3V0KCgoKT0+e24uY2xhc3NMaXN0LnJlbW92ZSh0KX0pLDFlMyl9KSl9fV9lbWl0Q2hhbmdlRXZlbnQoKXtjb25zdCB0PW5ldyBwWTt0LnNvdXJjZT10aGlzLHQuY2hlY2tlZD10aGlzLmNoZWNrZWQsdGhpcy5fY29udHJvbFZhbHVlQWNjZXNzb3JDaGFuZ2VGbih0aGlzLmNoZWNrZWQpLHRoaXMuY2hhbmdlLmVtaXQodCksdGhpcy5faW5wdXRFbGVtZW50JiYodGhpcy5faW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2hlY2tlZD10aGlzLmNoZWNrZWQpfXRvZ2dsZSgpe3RoaXMuY2hlY2tlZD0hdGhpcy5jaGVja2VkfV9vbklucHV0Q2xpY2sodCl7dmFyIGU7Y29uc3Qgbj1udWxsPT09KGU9dGhpcy5fb3B0aW9ucyl8fHZvaWQgMD09PWU/dm9pZCAwOmUuY2xpY2tBY3Rpb247dC5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLmRpc2FibGVkfHwibm9vcCI9PT1uP3RoaXMuZGlzYWJsZWR8fCJub29wIiE9PW58fCh0aGlzLl9pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5jaGVja2VkPXRoaXMuY2hlY2tlZCx0aGlzLl9pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5pbmRldGVybWluYXRlPXRoaXMuaW5kZXRlcm1pbmF0ZSk6KHRoaXMuaW5kZXRlcm1pbmF0ZSYmImNoZWNrIiE9PW4mJlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCgpPT57dGhpcy5faW5kZXRlcm1pbmF0ZT0hMSx0aGlzLmluZGV0ZXJtaW5hdGVDaGFuZ2UuZW1pdCh0aGlzLl9pbmRldGVybWluYXRlKX0pKSx0aGlzLnRvZ2dsZSgpLHRoaXMuX3RyYW5zaXRpb25DaGVja1N0YXRlKHRoaXMuX2NoZWNrZWQ/MToyKSx0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoKSl9Zm9jdXModCxlKXt0P3RoaXMuX2ZvY3VzTW9uaXRvci5mb2N1c1ZpYSh0aGlzLl9pbnB1dEVsZW1lbnQsdCxlKTp0aGlzLl9pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cyhlKX1fb25JbnRlcmFjdGlvbkV2ZW50KHQpe3Quc3RvcFByb3BhZ2F0aW9uKCl9X2dldEFuaW1hdGlvbkNsYXNzRm9yQ2hlY2tTdGF0ZVRyYW5zaXRpb24odCxlKXtpZigiTm9vcEFuaW1hdGlvbnMiPT09dGhpcy5fYW5pbWF0aW9uTW9kZSlyZXR1cm4iIjtsZXQgbj0iIjtzd2l0Y2godCl7Y2FzZSAwOmlmKDE9PT1lKW49InVuY2hlY2tlZC1jaGVja2VkIjtlbHNle2lmKDMhPWUpcmV0dXJuIiI7bj0idW5jaGVja2VkLWluZGV0ZXJtaW5hdGUifWJyZWFrO2Nhc2UgMjpuPTE9PT1lPyJ1bmNoZWNrZWQtY2hlY2tlZCI6InVuY2hlY2tlZC1pbmRldGVybWluYXRlIjticmVhaztjYXNlIDE6bj0yPT09ZT8iY2hlY2tlZC11bmNoZWNrZWQiOiJjaGVja2VkLWluZGV0ZXJtaW5hdGUiO2JyZWFrO2Nhc2UgMzpuPTE9PT1lPyJpbmRldGVybWluYXRlLWNoZWNrZWQiOiJpbmRldGVybWluYXRlLXVuY2hlY2tlZCJ9cmV0dXJuYG1hdC1jaGVja2JveC1hbmltLSR7bn1gfV9zeW5jSW5kZXRlcm1pbmF0ZSh0KXtjb25zdCBlPXRoaXMuX2lucHV0RWxlbWVudDtlJiYoZS5uYXRpdmVFbGVtZW50LmluZGV0ZXJtaW5hdGU9dCl9fXVZLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHx1WSkoTXUoY2gpLE11KEhoKSxNdShweiksTXUodEMpLE9yKCJ0YWJpbmRleCIpLE11KE53LDgpLE11KHJZLDgpKX0sdVkuybVjbXA9VW8oe3R5cGU6dVksc2VsZWN0b3JzOltbIm1hdC1jaGVja2JveCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24gdChlLG4pe2lmKDEmZSYmKFdiKGlZLDEpLFdiKHBILDEpKSwyJmUpe2xldCB0O1ViKHQ9WWIoKSkmJihuLl9pbnB1dEVsZW1lbnQ9dC5maXJzdCksVWIodD1ZYigpKSYmKG4ucmlwcGxlPXQuZmlyc3QpfX0saG9zdEF0dHJzOlsxLCJtYXQtY2hlY2tib3giXSxob3N0VmFyczoxMixob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezImZSYmKGtmKCJpZCIsbi5pZCksTm0oInRhYmluZGV4IixudWxsKSxhZigibWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUiLG4uaW5kZXRlcm1pbmF0ZSkoIm1hdC1jaGVja2JveC1jaGVja2VkIixuLmNoZWNrZWQpKCJtYXQtY2hlY2tib3gtZGlzYWJsZWQiLG4uZGlzYWJsZWQpKCJtYXQtY2hlY2tib3gtbGFiZWwtYmVmb3JlIiwiYmVmb3JlIj09bi5sYWJlbFBvc2l0aW9uKSgiX21hdC1hbmltYXRpb24tbm9vcGFibGUiLCJOb29wQW5pbWF0aW9ucyI9PT1uLl9hbmltYXRpb25Nb2RlKSl9LGlucHV0czp7ZGlzYWJsZVJpcHBsZToiZGlzYWJsZVJpcHBsZSIsY29sb3I6ImNvbG9yIix0YWJJbmRleDoidGFiSW5kZXgiLGFyaWFMYWJlbDpbImFyaWEtbGFiZWwiLCJhcmlhTGFiZWwiXSxhcmlhTGFiZWxsZWRieTpbImFyaWEtbGFiZWxsZWRieSIsImFyaWFMYWJlbGxlZGJ5Il0saWQ6ImlkIixsYWJlbFBvc2l0aW9uOiJsYWJlbFBvc2l0aW9uIixuYW1lOiJuYW1lIixyZXF1aXJlZDoicmVxdWlyZWQiLGNoZWNrZWQ6ImNoZWNrZWQiLGRpc2FibGVkOiJkaXNhYmxlZCIsaW5kZXRlcm1pbmF0ZToiaW5kZXRlcm1pbmF0ZSIsYXJpYURlc2NyaWJlZGJ5OlsiYXJpYS1kZXNjcmliZWRieSIsImFyaWFEZXNjcmliZWRieSJdLHZhbHVlOiJ2YWx1ZSJ9LG91dHB1dHM6e2NoYW5nZToiY2hhbmdlIixpbmRldGVybWluYXRlQ2hhbmdlOiJpbmRldGVybWluYXRlQ2hhbmdlIn0sZXhwb3J0QXM6WyJtYXRDaGVja2JveCJdLGZlYXR1cmVzOltpaChbZFldKSxnbV0sbmdDb250ZW50U2VsZWN0b3JzOlsiKiJdLGRlY2xzOjE3LHZhcnM6MjAsY29uc3RzOltbMSwibWF0LWNoZWNrYm94LWxheW91dCJdLFsibGFiZWwiLCIiXSxbMSwibWF0LWNoZWNrYm94LWlubmVyLWNvbnRhaW5lciJdLFsidHlwZSIsImNoZWNrYm94IiwxLCJtYXQtY2hlY2tib3gtaW5wdXQiLCJjZGstdmlzdWFsbHktaGlkZGVuIiwzLCJpZCIsInJlcXVpcmVkIiwiY2hlY2tlZCIsImRpc2FibGVkIiwidGFiSW5kZXgiLCJjaGFuZ2UiLCJjbGljayJdLFsiaW5wdXQiLCIiXSxbIm1hdFJpcHBsZSIsIiIsMSwibWF0LWNoZWNrYm94LXJpcHBsZSIsIm1hdC1mb2N1cy1pbmRpY2F0b3IiLDMsIm1hdFJpcHBsZVRyaWdnZXIiLCJtYXRSaXBwbGVEaXNhYmxlZCIsIm1hdFJpcHBsZVJhZGl1cyIsIm1hdFJpcHBsZUNlbnRlcmVkIiwibWF0UmlwcGxlQW5pbWF0aW9uIl0sWzEsIm1hdC1yaXBwbGUtZWxlbWVudCIsIm1hdC1jaGVja2JveC1wZXJzaXN0ZW50LXJpcHBsZSJdLFsxLCJtYXQtY2hlY2tib3gtZnJhbWUiXSxbMSwibWF0LWNoZWNrYm94LWJhY2tncm91bmQiXSxbInZlcnNpb24iLCIxLjEiLCJmb2N1c2FibGUiLCJmYWxzZSIsInZpZXdCb3giLCIwIDAgMjQgMjQiLDAsInhtbCIsInNwYWNlIiwicHJlc2VydmUiLDEsIm1hdC1jaGVja2JveC1jaGVja21hcmsiXSxbImZpbGwiLCJub25lIiwic3Ryb2tlIiwid2hpdGUiLCJkIiwiTTQuMSwxMi43IDksMTcuNiAyMC4zLDYuMyIsMSwibWF0LWNoZWNrYm94LWNoZWNrbWFyay1wYXRoIl0sWzEsIm1hdC1jaGVja2JveC1taXhlZG1hcmsiXSxbMSwibWF0LWNoZWNrYm94LWxhYmVsIiwzLCJjZGtPYnNlcnZlQ29udGVudCJdLFsiY2hlY2tib3hMYWJlbCIsIiJdLFsyLCJkaXNwbGF5Iiwibm9uZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7aWYoMSZlJiYoVnUoKSxPdSgwLCJsYWJlbCIsMCwxKSxPdSgyLCJzcGFuIiwyKSxPdSgzLCJpbnB1dCIsMyw0KSxOdSgiY2hhbmdlIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5fb25JbnRlcmFjdGlvbkV2ZW50KGUpfSkpKCJjbGljayIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4uX29uSW5wdXRDbGljayhlKX0pKSxQdSgpLE91KDUsInNwYW4iLDUpLHd1KDYsInNwYW4iLDYpLFB1KCksd3UoNywic3BhbiIsNyksT3UoOCwic3BhbiIsOCksSGEoKSxPdSg5LCJzdmciLDkpLHd1KDEwLCJwYXRoIiwxMCksUHUoKSxGYSgpLHd1KDExLCJzcGFuIiwxMSksUHUoKSxQdSgpLE91KDEyLCJzcGFuIiwxMiwxMyksTnUoImNka09ic2VydmVDb250ZW50IiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLl9vbkxhYmVsVGV4dENoYW5nZSgpfSkpLE91KDE0LCJzcGFuIiwxNCksTWYoMTUsIsKgIiksUHUoKSxqdSgxNiksUHUoKSxQdSgpKSwyJmUpe2NvbnN0IHQ9R20oMSksZT1HbSgxMyk7Tm0oImZvciIsbi5pbnB1dElkKSxKYygyKSxhZigibWF0LWNoZWNrYm94LWlubmVyLWNvbnRhaW5lci1uby1zaWRlLW1hcmdpbiIsIWUudGV4dENvbnRlbnR8fCFlLnRleHRDb250ZW50LnRyaW0oKSksSmMoMSksdnUoImlkIixuLmlucHV0SWQpKCJyZXF1aXJlZCIsbi5yZXF1aXJlZCkoImNoZWNrZWQiLG4uY2hlY2tlZCkoImRpc2FibGVkIixuLmRpc2FibGVkKSgidGFiSW5kZXgiLG4udGFiSW5kZXgpLE5tKCJ2YWx1ZSIsbi52YWx1ZSkoIm5hbWUiLG4ubmFtZSkoImFyaWEtbGFiZWwiLG4uYXJpYUxhYmVsfHxudWxsKSgiYXJpYS1sYWJlbGxlZGJ5IixuLmFyaWFMYWJlbGxlZGJ5KSgiYXJpYS1jaGVja2VkIixuLl9nZXRBcmlhQ2hlY2tlZCgpKSgiYXJpYS1kZXNjcmliZWRieSIsbi5hcmlhRGVzY3JpYmVkYnkpLEpjKDIpLHZ1KCJtYXRSaXBwbGVUcmlnZ2VyIix0KSgibWF0UmlwcGxlRGlzYWJsZWQiLG4uX2lzUmlwcGxlRGlzYWJsZWQoKSkoIm1hdFJpcHBsZVJhZGl1cyIsMjApKCJtYXRSaXBwbGVDZW50ZXJlZCIsITApKCJtYXRSaXBwbGVBbmltYXRpb24iLGZiKDE5LGFZKSl9fSxkaXJlY3RpdmVzOltwSCxTSV0sc3R5bGVzOlsiQGtleWZyYW1lcyBtYXQtY2hlY2tib3gtZmFkZS1pbi1iYWNrZ3JvdW5kezAle29wYWNpdHk6MH01MCV7b3BhY2l0eToxfX1Aa2V5ZnJhbWVzIG1hdC1jaGVja2JveC1mYWRlLW91dC1iYWNrZ3JvdW5kezAlLDUwJXtvcGFjaXR5OjF9MTAwJXtvcGFjaXR5OjB9fUBrZXlmcmFtZXMgbWF0LWNoZWNrYm94LXVuY2hlY2tlZC1jaGVja2VkLWNoZWNrbWFyay1wYXRoezAlLDUwJXtzdHJva2UtZGFzaG9mZnNldDoyMi45MTAyNTl9NTAle2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMC4xKX0xMDAle3N0cm9rZS1kYXNob2Zmc2V0OjB9fUBrZXlmcmFtZXMgbWF0LWNoZWNrYm94LXVuY2hlY2tlZC1pbmRldGVybWluYXRlLW1peGVkbWFya3swJSw2OC4yJXt0cmFuc2Zvcm06c2NhbGVYKDApfTY4LjIle2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKDAsIDAsIDAsIDEpfTEwMCV7dHJhbnNmb3JtOnNjYWxlWCgxKX19QGtleWZyYW1lcyBtYXQtY2hlY2tib3gtY2hlY2tlZC11bmNoZWNrZWQtY2hlY2ttYXJrLXBhdGh7ZnJvbXthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLjQsIDAsIDEsIDEpO3N0cm9rZS1kYXNob2Zmc2V0OjB9dG97c3Ryb2tlLWRhc2hvZmZzZXQ6LTIyLjkxMDI1OX19QGtleWZyYW1lcyBtYXQtY2hlY2tib3gtY2hlY2tlZC1pbmRldGVybWluYXRlLWNoZWNrbWFya3tmcm9te2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMC4xKTtvcGFjaXR5OjE7dHJhbnNmb3JtOnJvdGF0ZSgwZGVnKX10b3tvcGFjaXR5OjA7dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyl9fUBrZXlmcmFtZXMgbWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtY2hlY2tlZC1jaGVja21hcmt7ZnJvbXthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLjE0LCAwLCAwLCAxKTtvcGFjaXR5OjA7dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyl9dG97b3BhY2l0eToxO3RyYW5zZm9ybTpyb3RhdGUoMzYwZGVnKX19QGtleWZyYW1lcyBtYXQtY2hlY2tib3gtY2hlY2tlZC1pbmRldGVybWluYXRlLW1peGVkbWFya3tmcm9te2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMC4xKTtvcGFjaXR5OjA7dHJhbnNmb3JtOnJvdGF0ZSgtNDVkZWcpfXRve29wYWNpdHk6MTt0cmFuc2Zvcm06cm90YXRlKDBkZWcpfX1Aa2V5ZnJhbWVzIG1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLWNoZWNrZWQtbWl4ZWRtYXJre2Zyb217YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoMC4xNCwgMCwgMCwgMSk7b3BhY2l0eToxO3RyYW5zZm9ybTpyb3RhdGUoMGRlZyl9dG97b3BhY2l0eTowO3RyYW5zZm9ybTpyb3RhdGUoMzE1ZGVnKX19QGtleWZyYW1lcyBtYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS11bmNoZWNrZWQtbWl4ZWRtYXJrezAle2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246bGluZWFyO29wYWNpdHk6MTt0cmFuc2Zvcm06c2NhbGVYKDEpfTMyLjglLDEwMCV7b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZVgoMCl9fS5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCwubWF0LWNoZWNrYm94LWZyYW1le3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6MnB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb2ludGVyLWV2ZW50czpub25lfS5tYXQtY2hlY2tib3h7ZGlzcGxheTppbmxpbmUtYmxvY2s7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJveC1zaGFkb3cgMjgwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTtjdXJzb3I6cG9pbnRlcjstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnR9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlLm1hdC1jaGVja2JveHt0cmFuc2l0aW9uOm5vbmU7YW5pbWF0aW9uOm5vbmV9Lm1hdC1jaGVja2JveCAubWF0LXJpcHBsZS1lbGVtZW50Om5vdCgubWF0LWNoZWNrYm94LXBlcnNpc3RlbnQtcmlwcGxlKXtvcGFjaXR5Oi4xNn0ubWF0LWNoZWNrYm94LWxheW91dHstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7Y3Vyc29yOmluaGVyaXQ7YWxpZ24taXRlbXM6YmFzZWxpbmU7dmVydGljYWwtYWxpZ246bWlkZGxlO2Rpc3BsYXk6aW5saW5lLWZsZXg7d2hpdGUtc3BhY2U6bm93cmFwfS5tYXQtY2hlY2tib3gtbGFiZWx7LXdlYmtpdC11c2VyLXNlbGVjdDphdXRvOy1tb3otdXNlci1zZWxlY3Q6YXV0bzstbXMtdXNlci1zZWxlY3Q6YXV0bzt1c2VyLXNlbGVjdDphdXRvfS5tYXQtY2hlY2tib3gtaW5uZXItY29udGFpbmVye2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxNnB4O2xpbmUtaGVpZ2h0OjA7bWFyZ2luOmF1dG87bWFyZ2luLXJpZ2h0OjhweDtvcmRlcjowO3Bvc2l0aW9uOnJlbGF0aXZlO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aGl0ZS1zcGFjZTpub3dyYXA7d2lkdGg6MTZweDtmbGV4LXNocmluazowfVtkaXI9cnRsXSAubWF0LWNoZWNrYm94LWlubmVyLWNvbnRhaW5lcnttYXJnaW4tbGVmdDo4cHg7bWFyZ2luLXJpZ2h0OmF1dG99Lm1hdC1jaGVja2JveC1pbm5lci1jb250YWluZXItbm8tc2lkZS1tYXJnaW57bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MH0ubWF0LWNoZWNrYm94LWZyYW1le2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpib3JkZXItY29sb3IgOTBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAwLjEpO2JvcmRlci13aWR0aDoycHg7Ym9yZGVyLXN0eWxlOnNvbGlkfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWNoZWNrYm94LWZyYW1le3RyYW5zaXRpb246bm9uZX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtY2hlY2tib3guY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1jaGVja2JveC1mcmFtZXtib3JkZXItc3R5bGU6ZG90dGVkfS5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTppbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3RyYW5zaXRpb246YmFja2dyb3VuZC1jb2xvciA5MG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDAuMSksb3BhY2l0eSA5MG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDAuMSk7LXdlYmtpdC1wcmludC1jb2xvci1hZGp1c3Q6ZXhhY3Q7Y29sb3ItYWRqdXN0OmV4YWN0fS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7dHJhbnNpdGlvbjpub25lfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1jaGVja2JveCAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YmFja2dyb3VuZDpub25lfS5tYXQtY2hlY2tib3gtcGVyc2lzdGVudC1yaXBwbGV7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3RyYW5zZm9ybTpub25lfS5tYXQtY2hlY2tib3gtaW5uZXItY29udGFpbmVyOmhvdmVyIC5tYXQtY2hlY2tib3gtcGVyc2lzdGVudC1yaXBwbGV7b3BhY2l0eTouMDR9Lm1hdC1jaGVja2JveC5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWNoZWNrYm94LXBlcnNpc3RlbnQtcmlwcGxle29wYWNpdHk6LjEyfS5tYXQtY2hlY2tib3gtcGVyc2lzdGVudC1yaXBwbGUsLm1hdC1jaGVja2JveC5tYXQtY2hlY2tib3gtZGlzYWJsZWQgLm1hdC1jaGVja2JveC1pbm5lci1jb250YWluZXI6aG92ZXIgLm1hdC1jaGVja2JveC1wZXJzaXN0ZW50LXJpcHBsZXtvcGFjaXR5OjB9QG1lZGlhKGhvdmVyOiBub25lKXsubWF0LWNoZWNrYm94LWlubmVyLWNvbnRhaW5lcjpob3ZlciAubWF0LWNoZWNrYm94LXBlcnNpc3RlbnQtcmlwcGxle2Rpc3BsYXk6bm9uZX19Lm1hdC1jaGVja2JveC1jaGVja21hcmt7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MTAwJX0ubWF0LWNoZWNrYm94LWNoZWNrbWFyay1wYXRoe3N0cm9rZS1kYXNob2Zmc2V0OjIyLjkxMDI1OTtzdHJva2UtZGFzaGFycmF5OjIyLjkxMDI1OTtzdHJva2Utd2lkdGg6Mi4xMzMzMzMzMzMzcHh9LmNkay1oaWdoLWNvbnRyYXN0LWJsYWNrLW9uLXdoaXRlIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJrLXBhdGh7c3Ryb2tlOiMwMDAgIWltcG9ydGFudH0ubWF0LWNoZWNrYm94LW1peGVkbWFya3t3aWR0aDpjYWxjKDEwMCUgLSA2cHgpO2hlaWdodDoycHg7b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZVgoMCkgcm90YXRlKDBkZWcpO2JvcmRlci1yYWRpdXM6MnB4fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1jaGVja2JveC1taXhlZG1hcmt7aGVpZ2h0OjA7Ym9yZGVyLXRvcDpzb2xpZCAycHg7bWFyZ2luLXRvcDoycHh9Lm1hdC1jaGVja2JveC1sYWJlbC1iZWZvcmUgLm1hdC1jaGVja2JveC1pbm5lci1jb250YWluZXJ7b3JkZXI6MTttYXJnaW4tbGVmdDo4cHg7bWFyZ2luLXJpZ2h0OmF1dG99W2Rpcj1ydGxdIC5tYXQtY2hlY2tib3gtbGFiZWwtYmVmb3JlIC5tYXQtY2hlY2tib3gtaW5uZXItY29udGFpbmVye21hcmdpbi1sZWZ0OmF1dG87bWFyZ2luLXJpZ2h0OjhweH0ubWF0LWNoZWNrYm94LWNoZWNrZWQgLm1hdC1jaGVja2JveC1jaGVja21hcmt7b3BhY2l0eToxfS5tYXQtY2hlY2tib3gtY2hlY2tlZCAubWF0LWNoZWNrYm94LWNoZWNrbWFyay1wYXRoe3N0cm9rZS1kYXNob2Zmc2V0OjB9Lm1hdC1jaGVja2JveC1jaGVja2VkIC5tYXQtY2hlY2tib3gtbWl4ZWRtYXJre3RyYW5zZm9ybTpzY2FsZVgoMSkgcm90YXRlKC00NWRlZyl9Lm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJre29wYWNpdHk6MDt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKX0ubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUgLm1hdC1jaGVja2JveC1jaGVja21hcmstcGF0aHtzdHJva2UtZGFzaG9mZnNldDowfS5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSAubWF0LWNoZWNrYm94LW1peGVkbWFya3tvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlWCgxKSByb3RhdGUoMGRlZyl9Lm1hdC1jaGVja2JveC11bmNoZWNrZWQgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9Lm1hdC1jaGVja2JveC1kaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtY2hlY2tib3gtZGlzYWJsZWR7b3BhY2l0eTouNX0ubWF0LWNoZWNrYm94LWFuaW0tdW5jaGVja2VkLWNoZWNrZWQgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2FuaW1hdGlvbjoxODBtcyBsaW5lYXIgMG1zIG1hdC1jaGVja2JveC1mYWRlLWluLWJhY2tncm91bmR9Lm1hdC1jaGVja2JveC1hbmltLXVuY2hlY2tlZC1jaGVja2VkIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJrLXBhdGh7YW5pbWF0aW9uOjE4MG1zIGxpbmVhciAwbXMgbWF0LWNoZWNrYm94LXVuY2hlY2tlZC1jaGVja2VkLWNoZWNrbWFyay1wYXRofS5tYXQtY2hlY2tib3gtYW5pbS11bmNoZWNrZWQtaW5kZXRlcm1pbmF0ZSAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YW5pbWF0aW9uOjE4MG1zIGxpbmVhciAwbXMgbWF0LWNoZWNrYm94LWZhZGUtaW4tYmFja2dyb3VuZH0ubWF0LWNoZWNrYm94LWFuaW0tdW5jaGVja2VkLWluZGV0ZXJtaW5hdGUgLm1hdC1jaGVja2JveC1taXhlZG1hcmt7YW5pbWF0aW9uOjkwbXMgbGluZWFyIDBtcyBtYXQtY2hlY2tib3gtdW5jaGVja2VkLWluZGV0ZXJtaW5hdGUtbWl4ZWRtYXJrfS5tYXQtY2hlY2tib3gtYW5pbS1jaGVja2VkLXVuY2hlY2tlZCAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YW5pbWF0aW9uOjE4MG1zIGxpbmVhciAwbXMgbWF0LWNoZWNrYm94LWZhZGUtb3V0LWJhY2tncm91bmR9Lm1hdC1jaGVja2JveC1hbmltLWNoZWNrZWQtdW5jaGVja2VkIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJrLXBhdGh7YW5pbWF0aW9uOjkwbXMgbGluZWFyIDBtcyBtYXQtY2hlY2tib3gtY2hlY2tlZC11bmNoZWNrZWQtY2hlY2ttYXJrLXBhdGh9Lm1hdC1jaGVja2JveC1hbmltLWNoZWNrZWQtaW5kZXRlcm1pbmF0ZSAubWF0LWNoZWNrYm94LWNoZWNrbWFya3thbmltYXRpb246OTBtcyBsaW5lYXIgMG1zIG1hdC1jaGVja2JveC1jaGVja2VkLWluZGV0ZXJtaW5hdGUtY2hlY2ttYXJrfS5tYXQtY2hlY2tib3gtYW5pbS1jaGVja2VkLWluZGV0ZXJtaW5hdGUgLm1hdC1jaGVja2JveC1taXhlZG1hcmt7YW5pbWF0aW9uOjkwbXMgbGluZWFyIDBtcyBtYXQtY2hlY2tib3gtY2hlY2tlZC1pbmRldGVybWluYXRlLW1peGVkbWFya30ubWF0LWNoZWNrYm94LWFuaW0taW5kZXRlcm1pbmF0ZS1jaGVja2VkIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJre2FuaW1hdGlvbjo1MDBtcyBsaW5lYXIgMG1zIG1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLWNoZWNrZWQtY2hlY2ttYXJrfS5tYXQtY2hlY2tib3gtYW5pbS1pbmRldGVybWluYXRlLWNoZWNrZWQgLm1hdC1jaGVja2JveC1taXhlZG1hcmt7YW5pbWF0aW9uOjUwMG1zIGxpbmVhciAwbXMgbWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtY2hlY2tlZC1taXhlZG1hcmt9Lm1hdC1jaGVja2JveC1hbmltLWluZGV0ZXJtaW5hdGUtdW5jaGVja2VkIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHthbmltYXRpb246MTgwbXMgbGluZWFyIDBtcyBtYXQtY2hlY2tib3gtZmFkZS1vdXQtYmFja2dyb3VuZH0ubWF0LWNoZWNrYm94LWFuaW0taW5kZXRlcm1pbmF0ZS11bmNoZWNrZWQgLm1hdC1jaGVja2JveC1taXhlZG1hcmt7YW5pbWF0aW9uOjMwMG1zIGxpbmVhciAwbXMgbWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtdW5jaGVja2VkLW1peGVkbWFya30ubWF0LWNoZWNrYm94LWlucHV0e2JvdHRvbTowO2xlZnQ6NTAlfS5tYXQtY2hlY2tib3ggLm1hdC1jaGVja2JveC1yaXBwbGV7cG9zaXRpb246YWJzb2x1dGU7bGVmdDpjYWxjKDUwJSAtIDIwcHgpO3RvcDpjYWxjKDUwJSAtIDIwcHgpO2hlaWdodDo0MHB4O3dpZHRoOjQwcHg7ei1pbmRleDoxO3BvaW50ZXItZXZlbnRzOm5vbmV9XG4iXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSx1WS5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmNofSx7dHlwZTpIaH0se3R5cGU6cHp9LHt0eXBlOnRDfSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6UnIsYXJnczpbInRhYmluZGV4Il19XX0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltOd119XX0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltyWV19XX1dLHVZLnByb3BEZWNvcmF0b3JzPXthcmlhTGFiZWw6W3t0eXBlOnlfLGFyZ3M6WyJhcmlhLWxhYmVsIl19XSxhcmlhTGFiZWxsZWRieTpbe3R5cGU6eV8sYXJnczpbImFyaWEtbGFiZWxsZWRieSJdfV0sYXJpYURlc2NyaWJlZGJ5Olt7dHlwZTp5XyxhcmdzOlsiYXJpYS1kZXNjcmliZWRieSJdfV0saWQ6W3t0eXBlOnlffV0scmVxdWlyZWQ6W3t0eXBlOnlffV0sbGFiZWxQb3NpdGlvbjpbe3R5cGU6eV99XSxuYW1lOlt7dHlwZTp5X31dLGNoYW5nZTpbe3R5cGU6X199XSxpbmRldGVybWluYXRlQ2hhbmdlOlt7dHlwZTpfX31dLHZhbHVlOlt7dHlwZTp5X31dLF9pbnB1dEVsZW1lbnQ6W3t0eXBlOkZyLGFyZ3M6WyJpbnB1dCJdfV0scmlwcGxlOlt7dHlwZTpGcixhcmdzOltwSF19XSxjaGVja2VkOlt7dHlwZTp5X31dLGRpc2FibGVkOlt7dHlwZTp5X31dLGluZGV0ZXJtaW5hdGU6W3t0eXBlOnlffV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIodVksW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoibWF0LWNoZWNrYm94Iix0ZW1wbGF0ZTonPGxhYmVsIFthdHRyLmZvcl09ImlucHV0SWQiIGNsYXNzPSJtYXQtY2hlY2tib3gtbGF5b3V0IiAjbGFiZWw+XG4gIDxzcGFuIGNsYXNzPSJtYXQtY2hlY2tib3gtaW5uZXItY29udGFpbmVyIlxuICAgICAgIFtjbGFzcy5tYXQtY2hlY2tib3gtaW5uZXItY29udGFpbmVyLW5vLXNpZGUtbWFyZ2luXT0iIWNoZWNrYm94TGFiZWwudGV4dENvbnRlbnQgfHwgIWNoZWNrYm94TGFiZWwudGV4dENvbnRlbnQudHJpbSgpIj5cbiAgICA8aW5wdXQgI2lucHV0XG4gICAgICAgICAgIGNsYXNzPSJtYXQtY2hlY2tib3gtaW5wdXQgY2RrLXZpc3VhbGx5LWhpZGRlbiIgdHlwZT0iY2hlY2tib3giXG4gICAgICAgICAgIFtpZF09ImlucHV0SWQiXG4gICAgICAgICAgIFtyZXF1aXJlZF09InJlcXVpcmVkIlxuICAgICAgICAgICBbY2hlY2tlZF09ImNoZWNrZWQiXG4gICAgICAgICAgIFthdHRyLnZhbHVlXT0idmFsdWUiXG4gICAgICAgICAgIFtkaXNhYmxlZF09ImRpc2FibGVkIlxuICAgICAgICAgICBbYXR0ci5uYW1lXT0ibmFtZSJcbiAgICAgICAgICAgW3RhYkluZGV4XT0idGFiSW5kZXgiXG4gICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPSJhcmlhTGFiZWwgfHwgbnVsbCJcbiAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT0iYXJpYUxhYmVsbGVkYnkiXG4gICAgICAgICAgIFthdHRyLmFyaWEtY2hlY2tlZF09Il9nZXRBcmlhQ2hlY2tlZCgpIlxuICAgICAgICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT0iYXJpYURlc2NyaWJlZGJ5IlxuICAgICAgICAgICAoY2hhbmdlKT0iX29uSW50ZXJhY3Rpb25FdmVudCgkZXZlbnQpIlxuICAgICAgICAgICAoY2xpY2spPSJfb25JbnB1dENsaWNrKCRldmVudCkiPlxuICAgIDxzcGFuIG1hdFJpcHBsZSBjbGFzcz0ibWF0LWNoZWNrYm94LXJpcHBsZSBtYXQtZm9jdXMtaW5kaWNhdG9yIlxuICAgICAgICAgW21hdFJpcHBsZVRyaWdnZXJdPSJsYWJlbCJcbiAgICAgICAgIFttYXRSaXBwbGVEaXNhYmxlZF09Il9pc1JpcHBsZURpc2FibGVkKCkiXG4gICAgICAgICBbbWF0UmlwcGxlUmFkaXVzXT0iMjAiXG4gICAgICAgICBbbWF0UmlwcGxlQ2VudGVyZWRdPSJ0cnVlIlxuICAgICAgICAgW21hdFJpcHBsZUFuaW1hdGlvbl09IntlbnRlckR1cmF0aW9uOiAxNTB9Ij5cbiAgICAgIDxzcGFuIGNsYXNzPSJtYXQtcmlwcGxlLWVsZW1lbnQgbWF0LWNoZWNrYm94LXBlcnNpc3RlbnQtcmlwcGxlIj48L3NwYW4+XG4gICAgPC9zcGFuPlxuICAgIDxzcGFuIGNsYXNzPSJtYXQtY2hlY2tib3gtZnJhbWUiPjwvc3Bhbj5cbiAgICA8c3BhbiBjbGFzcz0ibWF0LWNoZWNrYm94LWJhY2tncm91bmQiPlxuICAgICAgPHN2ZyB2ZXJzaW9uPSIxLjEiXG4gICAgICAgICAgIGZvY3VzYWJsZT0iZmFsc2UiXG4gICAgICAgICAgIGNsYXNzPSJtYXQtY2hlY2tib3gtY2hlY2ttYXJrIlxuICAgICAgICAgICB2aWV3Qm94PSIwIDAgMjQgMjQiXG4gICAgICAgICAgIHhtbDpzcGFjZT0icHJlc2VydmUiPlxuICAgICAgICA8cGF0aCBjbGFzcz0ibWF0LWNoZWNrYm94LWNoZWNrbWFyay1wYXRoIlxuICAgICAgICAgICAgICBmaWxsPSJub25lIlxuICAgICAgICAgICAgICBzdHJva2U9IndoaXRlIlxuICAgICAgICAgICAgICBkPSJNNC4xLDEyLjcgOSwxNy42IDIwLjMsNi4zIi8+XG4gICAgICA8L3N2Zz5cbiAgICAgIFx4M2MhLS0gRWxlbWVudCBmb3IgcmVuZGVyaW5nIHRoZSBpbmRldGVybWluYXRlIHN0YXRlIGNoZWNrYm94LiAtLVx4M2VcbiAgICAgIDxzcGFuIGNsYXNzPSJtYXQtY2hlY2tib3gtbWl4ZWRtYXJrIj48L3NwYW4+XG4gICAgPC9zcGFuPlxuICA8L3NwYW4+XG4gIDxzcGFuIGNsYXNzPSJtYXQtY2hlY2tib3gtbGFiZWwiICNjaGVja2JveExhYmVsIChjZGtPYnNlcnZlQ29udGVudCk9Il9vbkxhYmVsVGV4dENoYW5nZSgpIj5cbiAgICBceDNjIS0tIEFkZCBhbiBpbnZpc2libGUgc3BhbiBzbyBKQVdTIGNhbiByZWFkIHRoZSBsYWJlbCAtLVx4M2VcbiAgICA8c3BhbiBzdHlsZT0iZGlzcGxheTpub25lIj4mbmJzcDs8L3NwYW4+XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICA8L3NwYW4+XG48L2xhYmVsPlxuJyxleHBvcnRBczoibWF0Q2hlY2tib3giLGhvc3Q6e2NsYXNzOiJtYXQtY2hlY2tib3giLCJbaWRdIjoiaWQiLCJbYXR0ci50YWJpbmRleF0iOiJudWxsIiwiW2NsYXNzLm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlXSI6ImluZGV0ZXJtaW5hdGUiLCJbY2xhc3MubWF0LWNoZWNrYm94LWNoZWNrZWRdIjoiY2hlY2tlZCIsIltjbGFzcy5tYXQtY2hlY2tib3gtZGlzYWJsZWRdIjoiZGlzYWJsZWQiLCJbY2xhc3MubWF0LWNoZWNrYm94LWxhYmVsLWJlZm9yZV0iOidsYWJlbFBvc2l0aW9uID09ICJiZWZvcmUiJywiW2NsYXNzLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlXSI6Il9hbmltYXRpb25Nb2RlID09PSAnTm9vcEFuaW1hdGlvbnMnIn0scHJvdmlkZXJzOltkWV0saW5wdXRzOlsiZGlzYWJsZVJpcHBsZSIsImNvbG9yIiwidGFiSW5kZXgiXSxlbmNhcHN1bGF0aW9uOlBvLk5vbmUsY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaCxzdHlsZXM6WyJAa2V5ZnJhbWVzIG1hdC1jaGVja2JveC1mYWRlLWluLWJhY2tncm91bmR7MCV7b3BhY2l0eTowfTUwJXtvcGFjaXR5OjF9fUBrZXlmcmFtZXMgbWF0LWNoZWNrYm94LWZhZGUtb3V0LWJhY2tncm91bmR7MCUsNTAle29wYWNpdHk6MX0xMDAle29wYWNpdHk6MH19QGtleWZyYW1lcyBtYXQtY2hlY2tib3gtdW5jaGVja2VkLWNoZWNrZWQtY2hlY2ttYXJrLXBhdGh7MCUsNTAle3N0cm9rZS1kYXNob2Zmc2V0OjIyLjkxMDI1OX01MCV7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAwLjEpfTEwMCV7c3Ryb2tlLWRhc2hvZmZzZXQ6MH19QGtleWZyYW1lcyBtYXQtY2hlY2tib3gtdW5jaGVja2VkLWluZGV0ZXJtaW5hdGUtbWl4ZWRtYXJrezAlLDY4LjIle3RyYW5zZm9ybTpzY2FsZVgoMCl9NjguMiV7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoMCwgMCwgMCwgMSl9MTAwJXt0cmFuc2Zvcm06c2NhbGVYKDEpfX1Aa2V5ZnJhbWVzIG1hdC1jaGVja2JveC1jaGVja2VkLXVuY2hlY2tlZC1jaGVja21hcmstcGF0aHtmcm9te2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKDAuNCwgMCwgMSwgMSk7c3Ryb2tlLWRhc2hvZmZzZXQ6MH10b3tzdHJva2UtZGFzaG9mZnNldDotMjIuOTEwMjU5fX1Aa2V5ZnJhbWVzIG1hdC1jaGVja2JveC1jaGVja2VkLWluZGV0ZXJtaW5hdGUtY2hlY2ttYXJre2Zyb217YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAwLjEpO29wYWNpdHk6MTt0cmFuc2Zvcm06cm90YXRlKDBkZWcpfXRve29wYWNpdHk6MDt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKX19QGtleWZyYW1lcyBtYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS1jaGVja2VkLWNoZWNrbWFya3tmcm9te2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKDAuMTQsIDAsIDAsIDEpO29wYWNpdHk6MDt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKX10b3tvcGFjaXR5OjE7dHJhbnNmb3JtOnJvdGF0ZSgzNjBkZWcpfX1Aa2V5ZnJhbWVzIG1hdC1jaGVja2JveC1jaGVja2VkLWluZGV0ZXJtaW5hdGUtbWl4ZWRtYXJre2Zyb217YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAwLjEpO29wYWNpdHk6MDt0cmFuc2Zvcm06cm90YXRlKC00NWRlZyl9dG97b3BhY2l0eToxO3RyYW5zZm9ybTpyb3RhdGUoMGRlZyl9fUBrZXlmcmFtZXMgbWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtY2hlY2tlZC1taXhlZG1hcmt7ZnJvbXthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLjE0LCAwLCAwLCAxKTtvcGFjaXR5OjE7dHJhbnNmb3JtOnJvdGF0ZSgwZGVnKX10b3tvcGFjaXR5OjA7dHJhbnNmb3JtOnJvdGF0ZSgzMTVkZWcpfX1Aa2V5ZnJhbWVzIG1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLXVuY2hlY2tlZC1taXhlZG1hcmt7MCV7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpsaW5lYXI7b3BhY2l0eToxO3RyYW5zZm9ybTpzY2FsZVgoMSl9MzIuOCUsMTAwJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlWCgwKX19Lm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLC5tYXQtY2hlY2tib3gtZnJhbWV7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czoycHg7Ym94LXNpemluZzpib3JkZXItYm94O3BvaW50ZXItZXZlbnRzOm5vbmV9Lm1hdC1jaGVja2JveHtkaXNwbGF5OmlubGluZS1ibG9jazt0cmFuc2l0aW9uOmJhY2tncm91bmQgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSksYm94LXNoYWRvdyAyODBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpO2N1cnNvcjpwb2ludGVyOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudH0uX21hdC1hbmltYXRpb24tbm9vcGFibGUubWF0LWNoZWNrYm94e3RyYW5zaXRpb246bm9uZTthbmltYXRpb246bm9uZX0ubWF0LWNoZWNrYm94IC5tYXQtcmlwcGxlLWVsZW1lbnQ6bm90KC5tYXQtY2hlY2tib3gtcGVyc2lzdGVudC1yaXBwbGUpe29wYWNpdHk6LjE2fS5tYXQtY2hlY2tib3gtbGF5b3V0ey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6aW5oZXJpdDthbGlnbi1pdGVtczpiYXNlbGluZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7ZGlzcGxheTppbmxpbmUtZmxleDt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1hdC1jaGVja2JveC1sYWJlbHstd2Via2l0LXVzZXItc2VsZWN0OmF1dG87LW1vei11c2VyLXNlbGVjdDphdXRvOy1tcy11c2VyLXNlbGVjdDphdXRvO3VzZXItc2VsZWN0OmF1dG99Lm1hdC1jaGVja2JveC1pbm5lci1jb250YWluZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjE2cHg7bGluZS1oZWlnaHQ6MDttYXJnaW46YXV0bzttYXJnaW4tcmlnaHQ6OHB4O29yZGVyOjA7cG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwtYWxpZ246bWlkZGxlO3doaXRlLXNwYWNlOm5vd3JhcDt3aWR0aDoxNnB4O2ZsZXgtc2hyaW5rOjB9W2Rpcj1ydGxdIC5tYXQtY2hlY2tib3gtaW5uZXItY29udGFpbmVye21hcmdpbi1sZWZ0OjhweDttYXJnaW4tcmlnaHQ6YXV0b30ubWF0LWNoZWNrYm94LWlubmVyLWNvbnRhaW5lci1uby1zaWRlLW1hcmdpbnttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowfS5tYXQtY2hlY2tib3gtZnJhbWV7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDt0cmFuc2l0aW9uOmJvcmRlci1jb2xvciA5MG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDAuMSk7Ym9yZGVyLXdpZHRoOjJweDtib3JkZXItc3R5bGU6c29saWR9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtY2hlY2tib3gtZnJhbWV7dHJhbnNpdGlvbjpub25lfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1jaGVja2JveC5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWNoZWNrYm94LWZyYW1le2JvcmRlci1zdHlsZTpkb3R0ZWR9Lm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmlubGluZS1mbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIDkwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMC4xKSxvcGFjaXR5IDkwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMC4xKTstd2Via2l0LXByaW50LWNvbG9yLWFkanVzdDpleGFjdDtjb2xvci1hZGp1c3Q6ZXhhY3R9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHt0cmFuc2l0aW9uOm5vbmV9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWNoZWNrYm94IC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kOm5vbmV9Lm1hdC1jaGVja2JveC1wZXJzaXN0ZW50LXJpcHBsZXtkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7dHJhbnNmb3JtOm5vbmV9Lm1hdC1jaGVja2JveC1pbm5lci1jb250YWluZXI6aG92ZXIgLm1hdC1jaGVja2JveC1wZXJzaXN0ZW50LXJpcHBsZXtvcGFjaXR5Oi4wNH0ubWF0LWNoZWNrYm94LmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtY2hlY2tib3gtcGVyc2lzdGVudC1yaXBwbGV7b3BhY2l0eTouMTJ9Lm1hdC1jaGVja2JveC1wZXJzaXN0ZW50LXJpcHBsZSwubWF0LWNoZWNrYm94Lm1hdC1jaGVja2JveC1kaXNhYmxlZCAubWF0LWNoZWNrYm94LWlubmVyLWNvbnRhaW5lcjpob3ZlciAubWF0LWNoZWNrYm94LXBlcnNpc3RlbnQtcmlwcGxle29wYWNpdHk6MH1AbWVkaWEoaG92ZXI6IG5vbmUpey5tYXQtY2hlY2tib3gtaW5uZXItY29udGFpbmVyOmhvdmVyIC5tYXQtY2hlY2tib3gtcGVyc2lzdGVudC1yaXBwbGV7ZGlzcGxheTpub25lfX0ubWF0LWNoZWNrYm94LWNoZWNrbWFya3t0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxMDAlfS5tYXQtY2hlY2tib3gtY2hlY2ttYXJrLXBhdGh7c3Ryb2tlLWRhc2hvZmZzZXQ6MjIuOTEwMjU5O3N0cm9rZS1kYXNoYXJyYXk6MjIuOTEwMjU5O3N0cm9rZS13aWR0aDoyLjEzMzMzMzMzMzNweH0uY2RrLWhpZ2gtY29udHJhc3QtYmxhY2stb24td2hpdGUgLm1hdC1jaGVja2JveC1jaGVja21hcmstcGF0aHtzdHJva2U6IzAwMCAhaW1wb3J0YW50fS5tYXQtY2hlY2tib3gtbWl4ZWRtYXJre3dpZHRoOmNhbGMoMTAwJSAtIDZweCk7aGVpZ2h0OjJweDtvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlWCgwKSByb3RhdGUoMGRlZyk7Ym9yZGVyLXJhZGl1czoycHh9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWNoZWNrYm94LW1peGVkbWFya3toZWlnaHQ6MDtib3JkZXItdG9wOnNvbGlkIDJweDttYXJnaW4tdG9wOjJweH0ubWF0LWNoZWNrYm94LWxhYmVsLWJlZm9yZSAubWF0LWNoZWNrYm94LWlubmVyLWNvbnRhaW5lcntvcmRlcjoxO21hcmdpbi1sZWZ0OjhweDttYXJnaW4tcmlnaHQ6YXV0b31bZGlyPXJ0bF0gLm1hdC1jaGVja2JveC1sYWJlbC1iZWZvcmUgLm1hdC1jaGVja2JveC1pbm5lci1jb250YWluZXJ7bWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6OHB4fS5tYXQtY2hlY2tib3gtY2hlY2tlZCAubWF0LWNoZWNrYm94LWNoZWNrbWFya3tvcGFjaXR5OjF9Lm1hdC1jaGVja2JveC1jaGVja2VkIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJrLXBhdGh7c3Ryb2tlLWRhc2hvZmZzZXQ6MH0ubWF0LWNoZWNrYm94LWNoZWNrZWQgLm1hdC1jaGVja2JveC1taXhlZG1hcmt7dHJhbnNmb3JtOnNjYWxlWCgxKSByb3RhdGUoLTQ1ZGVnKX0ubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUgLm1hdC1jaGVja2JveC1jaGVja21hcmt7b3BhY2l0eTowO3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpfS5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSAubWF0LWNoZWNrYm94LWNoZWNrbWFyay1wYXRoe3N0cm9rZS1kYXNob2Zmc2V0OjB9Lm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlIC5tYXQtY2hlY2tib3gtbWl4ZWRtYXJre29wYWNpdHk6MTt0cmFuc2Zvcm06c2NhbGVYKDEpIHJvdGF0ZSgwZGVnKX0ubWF0LWNoZWNrYm94LXVuY2hlY2tlZCAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ubWF0LWNoZWNrYm94LWRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1jaGVja2JveC1kaXNhYmxlZHtvcGFjaXR5Oi41fS5tYXQtY2hlY2tib3gtYW5pbS11bmNoZWNrZWQtY2hlY2tlZCAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YW5pbWF0aW9uOjE4MG1zIGxpbmVhciAwbXMgbWF0LWNoZWNrYm94LWZhZGUtaW4tYmFja2dyb3VuZH0ubWF0LWNoZWNrYm94LWFuaW0tdW5jaGVja2VkLWNoZWNrZWQgLm1hdC1jaGVja2JveC1jaGVja21hcmstcGF0aHthbmltYXRpb246MTgwbXMgbGluZWFyIDBtcyBtYXQtY2hlY2tib3gtdW5jaGVja2VkLWNoZWNrZWQtY2hlY2ttYXJrLXBhdGh9Lm1hdC1jaGVja2JveC1hbmltLXVuY2hlY2tlZC1pbmRldGVybWluYXRlIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHthbmltYXRpb246MTgwbXMgbGluZWFyIDBtcyBtYXQtY2hlY2tib3gtZmFkZS1pbi1iYWNrZ3JvdW5kfS5tYXQtY2hlY2tib3gtYW5pbS11bmNoZWNrZWQtaW5kZXRlcm1pbmF0ZSAubWF0LWNoZWNrYm94LW1peGVkbWFya3thbmltYXRpb246OTBtcyBsaW5lYXIgMG1zIG1hdC1jaGVja2JveC11bmNoZWNrZWQtaW5kZXRlcm1pbmF0ZS1taXhlZG1hcmt9Lm1hdC1jaGVja2JveC1hbmltLWNoZWNrZWQtdW5jaGVja2VkIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHthbmltYXRpb246MTgwbXMgbGluZWFyIDBtcyBtYXQtY2hlY2tib3gtZmFkZS1vdXQtYmFja2dyb3VuZH0ubWF0LWNoZWNrYm94LWFuaW0tY2hlY2tlZC11bmNoZWNrZWQgLm1hdC1jaGVja2JveC1jaGVja21hcmstcGF0aHthbmltYXRpb246OTBtcyBsaW5lYXIgMG1zIG1hdC1jaGVja2JveC1jaGVja2VkLXVuY2hlY2tlZC1jaGVja21hcmstcGF0aH0ubWF0LWNoZWNrYm94LWFuaW0tY2hlY2tlZC1pbmRldGVybWluYXRlIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJre2FuaW1hdGlvbjo5MG1zIGxpbmVhciAwbXMgbWF0LWNoZWNrYm94LWNoZWNrZWQtaW5kZXRlcm1pbmF0ZS1jaGVja21hcmt9Lm1hdC1jaGVja2JveC1hbmltLWNoZWNrZWQtaW5kZXRlcm1pbmF0ZSAubWF0LWNoZWNrYm94LW1peGVkbWFya3thbmltYXRpb246OTBtcyBsaW5lYXIgMG1zIG1hdC1jaGVja2JveC1jaGVja2VkLWluZGV0ZXJtaW5hdGUtbWl4ZWRtYXJrfS5tYXQtY2hlY2tib3gtYW5pbS1pbmRldGVybWluYXRlLWNoZWNrZWQgLm1hdC1jaGVja2JveC1jaGVja21hcmt7YW5pbWF0aW9uOjUwMG1zIGxpbmVhciAwbXMgbWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtY2hlY2tlZC1jaGVja21hcmt9Lm1hdC1jaGVja2JveC1hbmltLWluZGV0ZXJtaW5hdGUtY2hlY2tlZCAubWF0LWNoZWNrYm94LW1peGVkbWFya3thbmltYXRpb246NTAwbXMgbGluZWFyIDBtcyBtYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS1jaGVja2VkLW1peGVkbWFya30ubWF0LWNoZWNrYm94LWFuaW0taW5kZXRlcm1pbmF0ZS11bmNoZWNrZWQgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2FuaW1hdGlvbjoxODBtcyBsaW5lYXIgMG1zIG1hdC1jaGVja2JveC1mYWRlLW91dC1iYWNrZ3JvdW5kfS5tYXQtY2hlY2tib3gtYW5pbS1pbmRldGVybWluYXRlLXVuY2hlY2tlZCAubWF0LWNoZWNrYm94LW1peGVkbWFya3thbmltYXRpb246MzAwbXMgbGluZWFyIDBtcyBtYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS11bmNoZWNrZWQtbWl4ZWRtYXJrfS5tYXQtY2hlY2tib3gtaW5wdXR7Ym90dG9tOjA7bGVmdDo1MCV9Lm1hdC1jaGVja2JveCAubWF0LWNoZWNrYm94LXJpcHBsZXtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OmNhbGMoNTAlIC0gMjBweCk7dG9wOmNhbGMoNTAlIC0gMjBweCk7aGVpZ2h0OjQwcHg7d2lkdGg6NDBweDt6LWluZGV4OjE7cG9pbnRlci1ldmVudHM6bm9uZX1cbiJdfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Y2h9LHt0eXBlOkhofSx7dHlwZTpwen0se3R5cGU6dEN9LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpScixhcmdzOlsidGFiaW5kZXgiXX1dfSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W053XX1dfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W3JZXX1dfV19KSx7YXJpYUxhYmVsOlt7dHlwZTp5XyxhcmdzOlsiYXJpYS1sYWJlbCJdfV0sYXJpYUxhYmVsbGVkYnk6W3t0eXBlOnlfLGFyZ3M6WyJhcmlhLWxhYmVsbGVkYnkiXX1dLGlkOlt7dHlwZTp5X31dLGxhYmVsUG9zaXRpb246W3t0eXBlOnlffV0sbmFtZTpbe3R5cGU6eV99XSxjaGFuZ2U6W3t0eXBlOl9ffV0saW5kZXRlcm1pbmF0ZUNoYW5nZTpbe3R5cGU6X199XSxyZXF1aXJlZDpbe3R5cGU6eV99XSxjaGVja2VkOlt7dHlwZTp5X31dLGRpc2FibGVkOlt7dHlwZTp5X31dLGluZGV0ZXJtaW5hdGU6W3t0eXBlOnlffV0sYXJpYURlc2NyaWJlZGJ5Olt7dHlwZTp5XyxhcmdzOlsiYXJpYS1kZXNjcmliZWRieSJdfV0sdmFsdWU6W3t0eXBlOnlffV0sX2lucHV0RWxlbWVudDpbe3R5cGU6RnIsYXJnczpbImlucHV0Il19XSxyaXBwbGU6W3t0eXBlOkZyLGFyZ3M6W3BIXX1dfSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCBmWT17cHJvdmlkZTpFVix1c2VFeGlzdGluZzpJbigoKCk9PmdZKSksbXVsdGk6ITB9O2NsYXNzIGdZIGV4dGVuZHMga1V7fWdZLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIGhZKGV8fGdZKX0sZ1kuybVkaXI9Sm8oe3R5cGU6Z1ksc2VsZWN0b3JzOltbIm1hdC1jaGVja2JveCIsInJlcXVpcmVkIiwiIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyJtYXQtY2hlY2tib3giLCJyZXF1aXJlZCIsIiIsImZvcm1Db250cm9sIiwiIl0sWyJtYXQtY2hlY2tib3giLCJyZXF1aXJlZCIsIiIsIm5nTW9kZWwiLCIiXV0sZmVhdHVyZXM6W2loKFtmWV0pLGdtXX0pO2NvbnN0IGhZPXZyKGdZKTsoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGdZLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6Im1hdC1jaGVja2JveFtyZXF1aXJlZF1bZm9ybUNvbnRyb2xOYW1lXSxcbiAgICAgICAgICAgICBtYXQtY2hlY2tib3hbcmVxdWlyZWRdW2Zvcm1Db250cm9sXSwgbWF0LWNoZWNrYm94W3JlcXVpcmVkXVtuZ01vZGVsXSIscHJvdmlkZXJzOltmWV19XX1dLG51bGwsbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyBiWXt9YlkuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGJZKX0sYlkuybVtb2Q9Wm8oe3R5cGU6Yll9KSxiWS7JtWluaj1jbyh7fSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhiWSx7ZGVjbGFyYXRpb25zOltnWV0sZXhwb3J0czpbZ1ldfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihiWSxbe3R5cGU6a18sYXJnczpbe2V4cG9ydHM6W2dZXSxkZWNsYXJhdGlvbnM6W2dZXX1dfV0sbnVsbCxudWxsKTtjbGFzcyB5WXt9eVkuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHlZKX0seVkuybVtb2Q9Wm8oe3R5cGU6eVl9KSx5WS7JtWluaj1jbyh7aW1wb3J0czpbW21ILFR6LERJLGJZXSxUeixiWV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKHlZLHtkZWNsYXJhdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm5bdVldfSxpbXBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW21ILFR6LERJLGJZXX0sZXhwb3J0czpmdW5jdGlvbigpe3JldHVyblt1WSxUeixiWV19fSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYih5WSxbe3R5cGU6a18sYXJnczpbe2ltcG9ydHM6W21ILFR6LERJLGJZXSxleHBvcnRzOlt1WSxUeixiWV0sZGVjbGFyYXRpb25zOlt1WV19XX1dLG51bGwsbnVsbCk7Y29uc3QgX1k9dkkoe3Bhc3NpdmU6ITB9KTtjbGFzcyBDWXtjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuX3BsYXRmb3JtPXQsdGhpcy5fbmdab25lPWUsdGhpcy5fbW9uaXRvcmVkRWxlbWVudHM9bmV3IE1hcH1tb25pdG9yKHQpe2lmKCF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpcmV0dXJuIFU7Y29uc3QgZT1wSSh0KSxuPXRoaXMuX21vbml0b3JlZEVsZW1lbnRzLmdldChlKTtpZihuKXJldHVybiBuLnN1YmplY3Q7Y29uc3Qgbz1uZXcgeCxpPSJjZGstdGV4dC1maWVsZC1hdXRvZmlsbGVkIixhPXQ9PnsiY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQiIT09dC5hbmltYXRpb25OYW1lfHxlLmNsYXNzTGlzdC5jb250YWlucyhpKT8iY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIj09PXQuYW5pbWF0aW9uTmFtZSYmZS5jbGFzc0xpc3QuY29udGFpbnMoaSkmJihlLmNsYXNzTGlzdC5yZW1vdmUoaSksdGhpcy5fbmdab25lLnJ1bigoKCk9Pm8ubmV4dCh7dGFyZ2V0OnQudGFyZ2V0LGlzQXV0b2ZpbGxlZDohMX0pKSkpOihlLmNsYXNzTGlzdC5hZGQoaSksdGhpcy5fbmdab25lLnJ1bigoKCk9Pm8ubmV4dCh7dGFyZ2V0OnQudGFyZ2V0LGlzQXV0b2ZpbGxlZDohMH0pKSkpfTtyZXR1cm4gdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgoKT0+e2UuYWRkRXZlbnRMaXN0ZW5lcigiYW5pbWF0aW9uc3RhcnQiLGEsX1kpLGUuY2xhc3NMaXN0LmFkZCgiY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkIil9KSksdGhpcy5fbW9uaXRvcmVkRWxlbWVudHMuc2V0KGUse3N1YmplY3Q6byx1bmxpc3RlbjooKT0+e2UucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYW5pbWF0aW9uc3RhcnQiLGEsX1kpfX0pLG99c3RvcE1vbml0b3JpbmcodCl7Y29uc3QgZT1wSSh0KSxuPXRoaXMuX21vbml0b3JlZEVsZW1lbnRzLmdldChlKTtuJiYobi51bmxpc3RlbigpLG4uc3ViamVjdC5jb21wbGV0ZSgpLGUuY2xhc3NMaXN0LnJlbW92ZSgiY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkIiksZS5jbGFzc0xpc3QucmVtb3ZlKCJjZGstdGV4dC1maWVsZC1hdXRvZmlsbGVkIiksdGhpcy5fbW9uaXRvcmVkRWxlbWVudHMuZGVsZXRlKGUpKX1uZ09uRGVzdHJveSgpe3RoaXMuX21vbml0b3JlZEVsZW1lbnRzLmZvckVhY2goKCh0LGUpPT50aGlzLnN0b3BNb25pdG9yaW5nKGUpKSl9fUNZLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxDWSkodXMoZkkpLHVzKHRDKSl9LENZLsm1cHJvdj1sbyh7ZmFjdG9yeTpmdW5jdGlvbiB0KCl7cmV0dXJuIG5ldyBDWSh1cyhmSSksdXModEMpKX0sdG9rZW46Q1kscHJvdmlkZWRJbjoicm9vdCJ9KSxDWS5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmZJfSx7dHlwZTp0Q31dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoQ1ksW3t0eXBlOkptLGFyZ3M6W3twcm92aWRlZEluOiJyb290In1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmZJfSx7dHlwZTp0Q31dfSksbnVsbCk7Y2xhc3MgTVl7Y29uc3RydWN0b3IodCxlKXt0aGlzLl9lbGVtZW50UmVmPXQsdGhpcy5fYXV0b2ZpbGxNb25pdG9yPWUsdGhpcy5jZGtBdXRvZmlsbD1uZXcgQWJ9bmdPbkluaXQoKXt0aGlzLl9hdXRvZmlsbE1vbml0b3IubW9uaXRvcih0aGlzLl9lbGVtZW50UmVmKS5zdWJzY3JpYmUoKHQ9PnRoaXMuY2RrQXV0b2ZpbGwuZW1pdCh0KSkpfW5nT25EZXN0cm95KCl7dGhpcy5fYXV0b2ZpbGxNb25pdG9yLnN0b3BNb25pdG9yaW5nKHRoaXMuX2VsZW1lbnRSZWYpfX1NWS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8TVkpKE11KGNoKSxNdShDWSkpfSxNWS7JtWRpcj1Kbyh7dHlwZTpNWSxzZWxlY3RvcnM6W1siIiwiY2RrQXV0b2ZpbGwiLCIiXV0sb3V0cHV0czp7Y2RrQXV0b2ZpbGw6ImNka0F1dG9maWxsIn19KSxNWS5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmNofSx7dHlwZTpDWX1dLE1ZLnByb3BEZWNvcmF0b3JzPXtjZGtBdXRvZmlsbDpbe3R5cGU6X199XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihNWSxbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJbY2RrQXV0b2ZpbGxdIn1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmNofSx7dHlwZTpDWX1dfSkse2Nka0F1dG9maWxsOlt7dHlwZTpfX31dfSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyB2WXtjb25zdHJ1Y3Rvcih0LGUsbixvKXt0aGlzLl9lbGVtZW50UmVmPXQsdGhpcy5fcGxhdGZvcm09ZSx0aGlzLl9uZ1pvbmU9bix0aGlzLl9kZXN0cm95ZWQ9bmV3IHgsdGhpcy5fZW5hYmxlZD0hMCx0aGlzLl9wcmV2aW91c01pblJvd3M9LTEsdGhpcy5fZG9jdW1lbnQ9byx0aGlzLl90ZXh0YXJlYUVsZW1lbnQ9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LHRoaXMuX21lYXN1cmluZ0NsYXNzPWUuRklSRUZPWD8iY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZy1maXJlZm94IjoiY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZyJ9Z2V0IG1pblJvd3MoKXtyZXR1cm4gdGhpcy5fbWluUm93c31zZXQgbWluUm93cyh0KXt0aGlzLl9taW5Sb3dzPXNJKHQpLHRoaXMuX3NldE1pbkhlaWdodCgpfWdldCBtYXhSb3dzKCl7cmV0dXJuIHRoaXMuX21heFJvd3N9c2V0IG1heFJvd3ModCl7dGhpcy5fbWF4Um93cz1zSSh0KSx0aGlzLl9zZXRNYXhIZWlnaHQoKX1nZXQgZW5hYmxlZCgpe3JldHVybiB0aGlzLl9lbmFibGVkfXNldCBlbmFibGVkKHQpe3Q9ckkodCksdGhpcy5fZW5hYmxlZCE9PXQmJigodGhpcy5fZW5hYmxlZD10KT90aGlzLnJlc2l6ZVRvRml0Q29udGVudCghMCk6dGhpcy5yZXNldCgpKX1fc2V0TWluSGVpZ2h0KCl7Y29uc3QgdD10aGlzLm1pblJvd3MmJnRoaXMuX2NhY2hlZExpbmVIZWlnaHQ/dGhpcy5taW5Sb3dzKnRoaXMuX2NhY2hlZExpbmVIZWlnaHQrInB4IjpudWxsO3QmJih0aGlzLl90ZXh0YXJlYUVsZW1lbnQuc3R5bGUubWluSGVpZ2h0PXQpfV9zZXRNYXhIZWlnaHQoKXtjb25zdCB0PXRoaXMubWF4Um93cyYmdGhpcy5fY2FjaGVkTGluZUhlaWdodD90aGlzLm1heFJvd3MqdGhpcy5fY2FjaGVkTGluZUhlaWdodCsicHgiOm51bGw7dCYmKHRoaXMuX3RleHRhcmVhRWxlbWVudC5zdHlsZS5tYXhIZWlnaHQ9dCl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyJiYodGhpcy5faW5pdGlhbEhlaWdodD10aGlzLl90ZXh0YXJlYUVsZW1lbnQuc3R5bGUuaGVpZ2h0LHRoaXMucmVzaXplVG9GaXRDb250ZW50KCksdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgoKT0+e1Z0KHRoaXMuX2dldFdpbmRvdygpLCJyZXNpemUiKS5waXBlKG9lKDE2KSx1bih0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCgpPT50aGlzLnJlc2l6ZVRvRml0Q29udGVudCghMCkpKX0pKSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9kZXN0cm95ZWQubmV4dCgpLHRoaXMuX2Rlc3Ryb3llZC5jb21wbGV0ZSgpfV9jYWNoZVRleHRhcmVhTGluZUhlaWdodCgpe2lmKHRoaXMuX2NhY2hlZExpbmVIZWlnaHQpcmV0dXJuO2xldCB0PXRoaXMuX3RleHRhcmVhRWxlbWVudC5jbG9uZU5vZGUoITEpO3Qucm93cz0xLHQuc3R5bGUucG9zaXRpb249ImFic29sdXRlIix0LnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiIsdC5zdHlsZS5ib3JkZXI9Im5vbmUiLHQuc3R5bGUucGFkZGluZz0iMCIsdC5zdHlsZS5oZWlnaHQ9IiIsdC5zdHlsZS5taW5IZWlnaHQ9IiIsdC5zdHlsZS5tYXhIZWlnaHQ9IiIsdC5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIix0aGlzLl90ZXh0YXJlYUVsZW1lbnQucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0KSx0aGlzLl9jYWNoZWRMaW5lSGVpZ2h0PXQuY2xpZW50SGVpZ2h0LHRoaXMuX3RleHRhcmVhRWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpLHRoaXMuX3NldE1pbkhlaWdodCgpLHRoaXMuX3NldE1heEhlaWdodCgpfW5nRG9DaGVjaygpe3RoaXMuX3BsYXRmb3JtLmlzQnJvd3NlciYmdGhpcy5yZXNpemVUb0ZpdENvbnRlbnQoKX1yZXNpemVUb0ZpdENvbnRlbnQodD0hMSl7aWYoIXRoaXMuX2VuYWJsZWQpcmV0dXJuO2lmKHRoaXMuX2NhY2hlVGV4dGFyZWFMaW5lSGVpZ2h0KCksIXRoaXMuX2NhY2hlZExpbmVIZWlnaHQpcmV0dXJuO2NvbnN0IGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LG49ZS52YWx1ZTtpZighdCYmdGhpcy5fbWluUm93cz09PXRoaXMuX3ByZXZpb3VzTWluUm93cyYmbj09PXRoaXMuX3ByZXZpb3VzVmFsdWUpcmV0dXJuO2NvbnN0IG89ZS5wbGFjZWhvbGRlcjtlLmNsYXNzTGlzdC5hZGQodGhpcy5fbWVhc3VyaW5nQ2xhc3MpLGUucGxhY2Vob2xkZXI9IiIsZS5zdHlsZS5oZWlnaHQ9ZS5zY3JvbGxIZWlnaHQtNCsicHgiLGUuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLl9tZWFzdXJpbmdDbGFzcyksZS5wbGFjZWhvbGRlcj1vLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKCk9PnsidW5kZWZpbmVkIiE9dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZT9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCgpPT50aGlzLl9zY3JvbGxUb0NhcmV0UG9zaXRpb24oZSkpKTpzZXRUaW1lb3V0KCgoKT0+dGhpcy5fc2Nyb2xsVG9DYXJldFBvc2l0aW9uKGUpKSl9KSksdGhpcy5fcHJldmlvdXNWYWx1ZT1uLHRoaXMuX3ByZXZpb3VzTWluUm93cz10aGlzLl9taW5Sb3dzfXJlc2V0KCl7dm9pZCAwIT09dGhpcy5faW5pdGlhbEhlaWdodCYmKHRoaXMuX3RleHRhcmVhRWxlbWVudC5zdHlsZS5oZWlnaHQ9dGhpcy5faW5pdGlhbEhlaWdodCl9X25vb3BJbnB1dEhhbmRsZXIoKXt9X2dldERvY3VtZW50KCl7cmV0dXJuIHRoaXMuX2RvY3VtZW50fHxkb2N1bWVudH1fZ2V0V2luZG93KCl7cmV0dXJuIHRoaXMuX2dldERvY3VtZW50KCkuZGVmYXVsdFZpZXd8fHdpbmRvd31fc2Nyb2xsVG9DYXJldFBvc2l0aW9uKHQpe2NvbnN0e3NlbGVjdGlvblN0YXJ0OmUsc2VsZWN0aW9uRW5kOm59PXQsbz10aGlzLl9nZXREb2N1bWVudCgpO3RoaXMuX2Rlc3Ryb3llZC5pc1N0b3BwZWR8fG8uYWN0aXZlRWxlbWVudCE9PXR8fHQuc2V0U2VsZWN0aW9uUmFuZ2UoZSxuKX19dlkuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHZZKShNdShjaCksTXUoZkkpLE11KHRDKSxNdShVQyw4KSl9LHZZLsm1ZGlyPUpvKHt0eXBlOnZZLHNlbGVjdG9yczpbWyJ0ZXh0YXJlYSIsImNka1RleHRhcmVhQXV0b3NpemUiLCIiXV0saG9zdEF0dHJzOlsicm93cyIsIjEiLDEsImNkay10ZXh0YXJlYS1hdXRvc2l6ZSJdLGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MSZlJiZOdSgiaW5wdXQiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uX25vb3BJbnB1dEhhbmRsZXIoKX0pKX0saW5wdXRzOnttaW5Sb3dzOlsiY2RrQXV0b3NpemVNaW5Sb3dzIiwibWluUm93cyJdLG1heFJvd3M6WyJjZGtBdXRvc2l6ZU1heFJvd3MiLCJtYXhSb3dzIl0sZW5hYmxlZDpbImNka1RleHRhcmVhQXV0b3NpemUiLCJlbmFibGVkIl19LGV4cG9ydEFzOlsiY2RrVGV4dGFyZWFBdXRvc2l6ZSJdfSksdlkuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpjaH0se3R5cGU6Zkl9LHt0eXBlOnRDfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W1VDXX1dfV0sdlkucHJvcERlY29yYXRvcnM9e21pblJvd3M6W3t0eXBlOnlfLGFyZ3M6WyJjZGtBdXRvc2l6ZU1pblJvd3MiXX1dLG1heFJvd3M6W3t0eXBlOnlfLGFyZ3M6WyJjZGtBdXRvc2l6ZU1heFJvd3MiXX1dLGVuYWJsZWQ6W3t0eXBlOnlfLGFyZ3M6WyJjZGtUZXh0YXJlYUF1dG9zaXplIl19XSxfbm9vcElucHV0SGFuZGxlcjpbe3R5cGU6TV8sYXJnczpbImlucHV0Il19XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYih2WSxbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJ0ZXh0YXJlYVtjZGtUZXh0YXJlYUF1dG9zaXplXSIsZXhwb3J0QXM6ImNka1RleHRhcmVhQXV0b3NpemUiLGhvc3Q6e2NsYXNzOiJjZGstdGV4dGFyZWEtYXV0b3NpemUiLHJvd3M6IjEifX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmNofSx7dHlwZTpmSX0se3R5cGU6dEN9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbVUNdfV19XX0pLHttaW5Sb3dzOlt7dHlwZTp5XyxhcmdzOlsiY2RrQXV0b3NpemVNaW5Sb3dzIl19XSxtYXhSb3dzOlt7dHlwZTp5XyxhcmdzOlsiY2RrQXV0b3NpemVNYXhSb3dzIl19XSxlbmFibGVkOlt7dHlwZTp5XyxhcmdzOlsiY2RrVGV4dGFyZWFBdXRvc2l6ZSJdfV0sX25vb3BJbnB1dEhhbmRsZXI6W3t0eXBlOk1fLGFyZ3M6WyJpbnB1dCJdfV19KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIHhZe314WS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8eFkpfSx4WS7JtW1vZD1abyh7dHlwZTp4WX0pLHhZLsm1aW5qPWNvKHtpbXBvcnRzOltbZ0ldXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oeFkse2RlY2xhcmF0aW9uczpmdW5jdGlvbigpe3JldHVybltNWSx2WV19LGltcG9ydHM6ZnVuY3Rpb24oKXtyZXR1cm5bZ0ldfSxleHBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW01ZLHZZXX19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHhZLFt7dHlwZTprXyxhcmdzOlt7ZGVjbGFyYXRpb25zOltNWSx2WV0saW1wb3J0czpbZ0ldLGV4cG9ydHM6W01ZLHZZXX1dfV0sbnVsbCxudWxsKTtjbGFzcyBPWSBleHRlbmRzIHZZe2dldCBtYXRBdXRvc2l6ZU1pblJvd3MoKXtyZXR1cm4gdGhpcy5taW5Sb3dzfXNldCBtYXRBdXRvc2l6ZU1pblJvd3ModCl7dGhpcy5taW5Sb3dzPXR9Z2V0IG1hdEF1dG9zaXplTWF4Um93cygpe3JldHVybiB0aGlzLm1heFJvd3N9c2V0IG1hdEF1dG9zaXplTWF4Um93cyh0KXt0aGlzLm1heFJvd3M9dH1nZXQgbWF0QXV0b3NpemUoKXtyZXR1cm4gdGhpcy5lbmFibGVkfXNldCBtYXRBdXRvc2l6ZSh0KXt0aGlzLmVuYWJsZWQ9dH1nZXQgbWF0VGV4dGFyZWFBdXRvc2l6ZSgpe3JldHVybiB0aGlzLmVuYWJsZWR9c2V0IG1hdFRleHRhcmVhQXV0b3NpemUodCl7dGhpcy5lbmFibGVkPXR9fU9ZLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIFBZKGV8fE9ZKX0sT1kuybVkaXI9Sm8oe3R5cGU6T1ksc2VsZWN0b3JzOltbInRleHRhcmVhIiwibWF0LWF1dG9zaXplIiwiIl0sWyJ0ZXh0YXJlYSIsIm1hdFRleHRhcmVhQXV0b3NpemUiLCIiXV0saG9zdEF0dHJzOlsicm93cyIsIjEiLDEsImNkay10ZXh0YXJlYS1hdXRvc2l6ZSIsIm1hdC1hdXRvc2l6ZSJdLGlucHV0czp7Y2RrQXV0b3NpemVNaW5Sb3dzOiJjZGtBdXRvc2l6ZU1pblJvd3MiLGNka0F1dG9zaXplTWF4Um93czoiY2RrQXV0b3NpemVNYXhSb3dzIixtYXRBdXRvc2l6ZU1pblJvd3M6Im1hdEF1dG9zaXplTWluUm93cyIsbWF0QXV0b3NpemVNYXhSb3dzOiJtYXRBdXRvc2l6ZU1heFJvd3MiLG1hdEF1dG9zaXplOlsibWF0LWF1dG9zaXplIiwibWF0QXV0b3NpemUiXSxtYXRUZXh0YXJlYUF1dG9zaXplOiJtYXRUZXh0YXJlYUF1dG9zaXplIn0sZXhwb3J0QXM6WyJtYXRUZXh0YXJlYUF1dG9zaXplIl0sZmVhdHVyZXM6W2dtXX0pLE9ZLnByb3BEZWNvcmF0b3JzPXttYXRBdXRvc2l6ZU1pblJvd3M6W3t0eXBlOnlffV0sbWF0QXV0b3NpemVNYXhSb3dzOlt7dHlwZTp5X31dLG1hdEF1dG9zaXplOlt7dHlwZTp5XyxhcmdzOlsibWF0LWF1dG9zaXplIl19XSxtYXRUZXh0YXJlYUF1dG9zaXplOlt7dHlwZTp5X31dfTtjb25zdCBQWT12cihPWSk7KCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihPWSxbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJ0ZXh0YXJlYVttYXQtYXV0b3NpemVdLCB0ZXh0YXJlYVttYXRUZXh0YXJlYUF1dG9zaXplXSIsZXhwb3J0QXM6Im1hdFRleHRhcmVhQXV0b3NpemUiLGlucHV0czpbImNka0F1dG9zaXplTWluUm93cyIsImNka0F1dG9zaXplTWF4Um93cyJdLGhvc3Q6e2NsYXNzOiJjZGstdGV4dGFyZWEtYXV0b3NpemUgbWF0LWF1dG9zaXplIixyb3dzOiIxIn19XX1dLG51bGwse21hdEF1dG9zaXplTWluUm93czpbe3R5cGU6eV99XSxtYXRBdXRvc2l6ZU1heFJvd3M6W3t0eXBlOnlffV0sbWF0QXV0b3NpemU6W3t0eXBlOnlfLGFyZ3M6WyJtYXQtYXV0b3NpemUiXX1dLG1hdFRleHRhcmVhQXV0b3NpemU6W3t0eXBlOnlffV19KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IHdZPW5ldyBOcigiTUFUX0lOUFVUX1ZBTFVFX0FDQ0VTU09SIiksa1k9WyJidXR0b24iLCJjaGVja2JveCIsImZpbGUiLCJoaWRkZW4iLCJpbWFnZSIsInJhZGlvIiwicmFuZ2UiLCJyZXNldCIsInN1Ym1pdCJdOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9sZXQgU1k9MDtjb25zdCBEWT1GeihjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsbixvKXt0aGlzLl9kZWZhdWx0RXJyb3JTdGF0ZU1hdGNoZXI9dCx0aGlzLl9wYXJlbnRGb3JtPWUsdGhpcy5fcGFyZW50Rm9ybUdyb3VwPW4sdGhpcy5uZ0NvbnRyb2w9b319KTtjbGFzcyBFWSBleHRlbmRzIERZe2NvbnN0cnVjdG9yKHQsZSxuLG8saSxhLHIscyxsLGMpe3N1cGVyKGEsbyxpLG4pLHRoaXMuX2VsZW1lbnRSZWY9dCx0aGlzLl9wbGF0Zm9ybT1lLHRoaXMubmdDb250cm9sPW4sdGhpcy5fYXV0b2ZpbGxNb25pdG9yPXMsdGhpcy5fZm9ybUZpZWxkPWMsdGhpcy5fdWlkPSJtYXQtaW5wdXQtIitTWSsrLHRoaXMuZm9jdXNlZD0hMSx0aGlzLnN0YXRlQ2hhbmdlcz1uZXcgeCx0aGlzLmNvbnRyb2xUeXBlPSJtYXQtaW5wdXQiLHRoaXMuYXV0b2ZpbGxlZD0hMSx0aGlzLl9kaXNhYmxlZD0hMSx0aGlzLl9yZXF1aXJlZD0hMSx0aGlzLl90eXBlPSJ0ZXh0Iix0aGlzLl9yZWFkb25seT0hMSx0aGlzLl9uZXZlckVtcHR5SW5wdXRUeXBlcz1bImRhdGUiLCJkYXRldGltZSIsImRhdGV0aW1lLWxvY2FsIiwibW9udGgiLCJ0aW1lIiwid2VlayJdLmZpbHRlcigodD0+YkkoKS5oYXModCkpKTtjb25zdCBkPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxwPWQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTt0aGlzLl9pbnB1dFZhbHVlQWNjZXNzb3I9cnx8ZCx0aGlzLl9wcmV2aW91c05hdGl2ZVZhbHVlPXRoaXMudmFsdWUsdGhpcy5pZD10aGlzLmlkLGUuSU9TJiZsLnJ1bk91dHNpZGVBbmd1bGFyKCgoKT0+e3QubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsKHQ9PntsZXQgZT10LnRhcmdldDtlLnZhbHVlfHxlLnNlbGVjdGlvblN0YXJ0fHxlLnNlbGVjdGlvbkVuZHx8KGUuc2V0U2VsZWN0aW9uUmFuZ2UoMSwxKSxlLnNldFNlbGVjdGlvblJhbmdlKDAsMCkpfSkpfSkpLHRoaXMuX2lzU2VydmVyPSF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIsdGhpcy5faXNOYXRpdmVTZWxlY3Q9InNlbGVjdCI9PT1wLHRoaXMuX2lzVGV4dGFyZWE9InRleHRhcmVhIj09PXAsdGhpcy5faXNOYXRpdmVTZWxlY3QmJih0aGlzLmNvbnRyb2xUeXBlPWQubXVsdGlwbGU/Im1hdC1uYXRpdmUtc2VsZWN0LW11bHRpcGxlIjoibWF0LW5hdGl2ZS1zZWxlY3QiKX1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5uZ0NvbnRyb2wmJm51bGwhPT10aGlzLm5nQ29udHJvbC5kaXNhYmxlZD90aGlzLm5nQ29udHJvbC5kaXNhYmxlZDp0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQodCl7dGhpcy5fZGlzYWJsZWQ9ckkodCksdGhpcy5mb2N1c2VkJiYodGhpcy5mb2N1c2VkPSExLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKSl9Z2V0IGlkKCl7cmV0dXJuIHRoaXMuX2lkfXNldCBpZCh0KXt0aGlzLl9pZD10fHx0aGlzLl91aWR9Z2V0IHJlcXVpcmVkKCl7cmV0dXJuIHRoaXMuX3JlcXVpcmVkfXNldCByZXF1aXJlZCh0KXt0aGlzLl9yZXF1aXJlZD1ySSh0KX1nZXQgdHlwZSgpe3JldHVybiB0aGlzLl90eXBlfXNldCB0eXBlKHQpe3RoaXMuX3R5cGU9dHx8InRleHQiLHRoaXMuX3ZhbGlkYXRlVHlwZSgpLCF0aGlzLl9pc1RleHRhcmVhJiZiSSgpLmhhcyh0aGlzLl90eXBlKSYmKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC50eXBlPXRoaXMuX3R5cGUpfWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLl9pbnB1dFZhbHVlQWNjZXNzb3IudmFsdWV9c2V0IHZhbHVlKHQpe3QhPT10aGlzLnZhbHVlJiYodGhpcy5faW5wdXRWYWx1ZUFjY2Vzc29yLnZhbHVlPXQsdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpKX1nZXQgcmVhZG9ubHkoKXtyZXR1cm4gdGhpcy5fcmVhZG9ubHl9c2V0IHJlYWRvbmx5KHQpe3RoaXMuX3JlYWRvbmx5PXJJKHQpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX3BsYXRmb3JtLmlzQnJvd3NlciYmdGhpcy5fYXV0b2ZpbGxNb25pdG9yLm1vbml0b3IodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KS5zdWJzY3JpYmUoKHQ9Pnt0aGlzLmF1dG9maWxsZWQ9dC5pc0F1dG9maWxsZWQsdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfSkpfW5nT25DaGFuZ2VzKCl7dGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfW5nT25EZXN0cm95KCl7dGhpcy5zdGF0ZUNoYW5nZXMuY29tcGxldGUoKSx0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXImJnRoaXMuX2F1dG9maWxsTW9uaXRvci5zdG9wTW9uaXRvcmluZyh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpfW5nRG9DaGVjaygpe3RoaXMubmdDb250cm9sJiZ0aGlzLnVwZGF0ZUVycm9yU3RhdGUoKSx0aGlzLl9kaXJ0eUNoZWNrTmF0aXZlVmFsdWUoKSx0aGlzLl9kaXJ0eUNoZWNrUGxhY2Vob2xkZXIoKX1mb2N1cyh0KXt0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXModCl9X2ZvY3VzQ2hhbmdlZCh0KXt0PT09dGhpcy5mb2N1c2VkfHx0aGlzLnJlYWRvbmx5JiZ0fHwodGhpcy5mb2N1c2VkPXQsdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpKX1fb25JbnB1dCgpe31fZGlydHlDaGVja1BsYWNlaG9sZGVyKCl7dmFyIHQsZTtjb25zdCBuPShudWxsPT09KGU9bnVsbD09PSh0PXRoaXMuX2Zvcm1GaWVsZCl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuX2hpZGVDb250cm9sUGxhY2Vob2xkZXIpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmNhbGwodCkpP251bGw6dGhpcy5wbGFjZWhvbGRlcjtpZihuIT09dGhpcy5fcHJldmlvdXNQbGFjZWhvbGRlcil7Y29uc3QgdD10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7dGhpcy5fcHJldmlvdXNQbGFjZWhvbGRlcj1uLG4/dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIixuKTp0LnJlbW92ZUF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiKX19X2RpcnR5Q2hlY2tOYXRpdmVWYWx1ZSgpe2NvbnN0IHQ9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlO3RoaXMuX3ByZXZpb3VzTmF0aXZlVmFsdWUhPT10JiYodGhpcy5fcHJldmlvdXNOYXRpdmVWYWx1ZT10LHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKSl9X3ZhbGlkYXRlVHlwZSgpe2lmKGtZLmluZGV4T2YodGhpcy5fdHlwZSk+LTEmJigidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSkKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCnRocm93KGZ1bmN0aW9uIHQoZSl7cmV0dXJuIEVycm9yKGBJbnB1dCB0eXBlICIke2V9IiBpc24ndCBzdXBwb3J0ZWQgYnkgbWF0SW5wdXQuYCl9KSh0aGlzLl90eXBlKX1faXNOZXZlckVtcHR5KCl7cmV0dXJuIHRoaXMuX25ldmVyRW1wdHlJbnB1dFR5cGVzLmluZGV4T2YodGhpcy5fdHlwZSk+LTF9X2lzQmFkSW5wdXQoKXtsZXQgdD10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudmFsaWRpdHk7cmV0dXJuIHQmJnQuYmFkSW5wdXR9Z2V0IGVtcHR5KCl7cmV0dXJuISh0aGlzLl9pc05ldmVyRW1wdHkoKXx8dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlfHx0aGlzLl9pc0JhZElucHV0KCl8fHRoaXMuYXV0b2ZpbGxlZCl9Z2V0IHNob3VsZExhYmVsRmxvYXQoKXtpZih0aGlzLl9pc05hdGl2ZVNlbGVjdCl7Y29uc3QgdD10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsZT10Lm9wdGlvbnNbMF07cmV0dXJuIHRoaXMuZm9jdXNlZHx8dC5tdWx0aXBsZXx8IXRoaXMuZW1wdHl8fCEhKHQuc2VsZWN0ZWRJbmRleD4tMSYmZSYmZS5sYWJlbCl9cmV0dXJuIHRoaXMuZm9jdXNlZHx8IXRoaXMuZW1wdHl9c2V0RGVzY3JpYmVkQnlJZHModCl7dC5sZW5ndGg/dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgiYXJpYS1kZXNjcmliZWRieSIsdC5qb2luKCIgIikpOnRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtZGVzY3JpYmVkYnkiKX1vbkNvbnRhaW5lckNsaWNrKCl7dGhpcy5mb2N1c2VkfHx0aGlzLmZvY3VzKCl9fUVZLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxFWSkoTXUoY2gpLE11KGZJKSxNdShuaiwxMCksTXUoQmosOCksTXUobFUsOCksTXUoZUgpLE11KHdZLDEwKSxNdShDWSksTXUodEMpLE11KHlWLDgpKX0sRVkuybVkaXI9Sm8oe3R5cGU6RVksc2VsZWN0b3JzOltbImlucHV0IiwibWF0SW5wdXQiLCIiXSxbInRleHRhcmVhIiwibWF0SW5wdXQiLCIiXSxbInNlbGVjdCIsIm1hdE5hdGl2ZUNvbnRyb2wiLCIiXSxbImlucHV0IiwibWF0TmF0aXZlQ29udHJvbCIsIiJdLFsidGV4dGFyZWEiLCJtYXROYXRpdmVDb250cm9sIiwiIl1dLGhvc3RBdHRyczpbMSwibWF0LWlucHV0LWVsZW1lbnQiLCJtYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sIl0saG9zdFZhcnM6OSxob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezEmZSYmTnUoImZvY3VzIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLl9mb2N1c0NoYW5nZWQoITApfSkpKCJibHVyIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLl9mb2N1c0NoYW5nZWQoITEpfSkpKCJpbnB1dCIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5fb25JbnB1dCgpfSkpLDImZSYmKGtmKCJkaXNhYmxlZCIsbi5kaXNhYmxlZCkoInJlcXVpcmVkIixuLnJlcXVpcmVkKSxObSgiaWQiLG4uaWQpKCJkYXRhLXBsYWNlaG9sZGVyIixuLnBsYWNlaG9sZGVyKSgicmVhZG9ubHkiLG4ucmVhZG9ubHkmJiFuLl9pc05hdGl2ZVNlbGVjdHx8bnVsbCkoImFyaWEtaW52YWxpZCIsbi5lcnJvclN0YXRlJiYhbi5lbXB0eSkoImFyaWEtcmVxdWlyZWQiLG4ucmVxdWlyZWQpLGFmKCJtYXQtaW5wdXQtc2VydmVyIixuLl9pc1NlcnZlcikpfSxpbnB1dHM6e2lkOiJpZCIsZGlzYWJsZWQ6ImRpc2FibGVkIixyZXF1aXJlZDoicmVxdWlyZWQiLHR5cGU6InR5cGUiLHZhbHVlOiJ2YWx1ZSIscmVhZG9ubHk6InJlYWRvbmx5IixwbGFjZWhvbGRlcjoicGxhY2Vob2xkZXIiLGVycm9yU3RhdGVNYXRjaGVyOiJlcnJvclN0YXRlTWF0Y2hlciIsdXNlckFyaWFEZXNjcmliZWRCeTpbImFyaWEtZGVzY3JpYmVkYnkiLCJ1c2VyQXJpYURlc2NyaWJlZEJ5Il19LGV4cG9ydEFzOlsibWF0SW5wdXQiXSxmZWF0dXJlczpbaWgoW3twcm92aWRlOmlWLHVzZUV4aXN0aW5nOkVZfV0pLGdtLFNpXX0pLEVZLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6Y2h9LHt0eXBlOmZJfSx7dHlwZTpuaixkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6Q3N9XX0se3R5cGU6QmosZGVjb3JhdG9yczpbe3R5cGU6X3N9XX0se3R5cGU6bFUsZGVjb3JhdG9yczpbe3R5cGU6X3N9XX0se3R5cGU6ZUh9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6Q3N9LHt0eXBlOnlzLGFyZ3M6W3dZXX1dfSx7dHlwZTpDWX0se3R5cGU6dEN9LHt0eXBlOl9WLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOlt5Vl19XX1dLEVZLnByb3BEZWNvcmF0b3JzPXtkaXNhYmxlZDpbe3R5cGU6eV99XSxpZDpbe3R5cGU6eV99XSxwbGFjZWhvbGRlcjpbe3R5cGU6eV99XSxyZXF1aXJlZDpbe3R5cGU6eV99XSx0eXBlOlt7dHlwZTp5X31dLGVycm9yU3RhdGVNYXRjaGVyOlt7dHlwZTp5X31dLHVzZXJBcmlhRGVzY3JpYmVkQnk6W3t0eXBlOnlfLGFyZ3M6WyJhcmlhLWRlc2NyaWJlZGJ5Il19XSx2YWx1ZTpbe3R5cGU6eV99XSxyZWFkb25seTpbe3R5cGU6eV99XSxfZm9jdXNDaGFuZ2VkOlt7dHlwZTpNXyxhcmdzOlsiZm9jdXMiLFsidHJ1ZSJdXX0se3R5cGU6TV8sYXJnczpbImJsdXIiLFsiZmFsc2UiXV19XSxfb25JbnB1dDpbe3R5cGU6TV8sYXJnczpbImlucHV0Il19XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihFWSxbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLFxuICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixleHBvcnRBczoibWF0SW5wdXQiLGhvc3Q6e2NsYXNzOiJtYXQtaW5wdXQtZWxlbWVudCBtYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sIiwiW2NsYXNzLm1hdC1pbnB1dC1zZXJ2ZXJdIjoiX2lzU2VydmVyIiwiW2F0dHIuaWRdIjoiaWQiLCJbYXR0ci5kYXRhLXBsYWNlaG9sZGVyXSI6InBsYWNlaG9sZGVyIiwiW2Rpc2FibGVkXSI6ImRpc2FibGVkIiwiW3JlcXVpcmVkXSI6InJlcXVpcmVkIiwiW2F0dHIucmVhZG9ubHldIjoicmVhZG9ubHkgJiYgIV9pc05hdGl2ZVNlbGVjdCB8fCBudWxsIiwiW2F0dHIuYXJpYS1pbnZhbGlkXSI6ImVycm9yU3RhdGUgJiYgIWVtcHR5IiwiW2F0dHIuYXJpYS1yZXF1aXJlZF0iOiJyZXF1aXJlZCJ9LHByb3ZpZGVyczpbe3Byb3ZpZGU6aVYsdXNlRXhpc3Rpbmc6RVl9XX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmNofSx7dHlwZTpmSX0se3R5cGU6bmosZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOkNzfV19LHt0eXBlOkJqLGRlY29yYXRvcnM6W3t0eXBlOl9zfV19LHt0eXBlOmxVLGRlY29yYXRvcnM6W3t0eXBlOl9zfV19LHt0eXBlOmVIfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOkNzfSx7dHlwZTp5cyxhcmdzOlt3WV19XX0se3R5cGU6Q1l9LHt0eXBlOnRDfSx7dHlwZTpfVixkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbeVZdfV19XX0pLHtpZDpbe3R5cGU6eV99XSxkaXNhYmxlZDpbe3R5cGU6eV99XSxyZXF1aXJlZDpbe3R5cGU6eV99XSx0eXBlOlt7dHlwZTp5X31dLHZhbHVlOlt7dHlwZTp5X31dLHJlYWRvbmx5Olt7dHlwZTp5X31dLF9mb2N1c0NoYW5nZWQ6W3t0eXBlOk1fLGFyZ3M6WyJmb2N1cyIsWyJ0cnVlIl1dfSx7dHlwZTpNXyxhcmdzOlsiYmx1ciIsWyJmYWxzZSJdXX1dLF9vbklucHV0Olt7dHlwZTpNXyxhcmdzOlsiaW5wdXQiXX1dLHBsYWNlaG9sZGVyOlt7dHlwZTp5X31dLGVycm9yU3RhdGVNYXRjaGVyOlt7dHlwZTp5X31dLHVzZXJBcmlhRGVzY3JpYmVkQnk6W3t0eXBlOnlfLGFyZ3M6WyJhcmlhLWRlc2NyaWJlZGJ5Il19XX0pOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3MgQVl7fWZ1bmN0aW9uIFJZKHQsZSl7aWYoMSZ0JiYoT3UoMCwibWF0LWVycm9yIiksTWYoMSksUHUoKSksMiZ0KXtjb25zdCB0PUx1KCk7SmMoMSkseGYoIiBSZWxvYWQgcGVyaW9kIGhhcyB0byBiZSBtaW5pbXVtIG9mICIsdC5NSU5fUkVMT0FEX1BFUklPRF9JTl9TLCIgc2Vjb25kcy4gIil9fWZ1bmN0aW9uIFRZKHQsZSl7MSZ0JiYoT3UoMCwibWF0LWVycm9yIiksTWYoMSwiIFBhZ2Ugc2l6ZSBoYXMgdG8gYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyLiAiKSxQdSgpKX1BWS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8QVkpfSxBWS7JtW1vZD1abyh7dHlwZTpBWX0pLEFZLsm1aW5qPWNvKHtwcm92aWRlcnM6W2VIXSxpbXBvcnRzOltbeFksQ1YsVHpdLHhZLENWXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oQVkse2RlY2xhcmF0aW9uczpmdW5jdGlvbigpe3JldHVybltFWSxPWV19LGltcG9ydHM6ZnVuY3Rpb24oKXtyZXR1cm5beFksQ1YsVHpdfSxleHBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW3hZLENWLEVZLE9ZXX19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEFZLFt7dHlwZTprXyxhcmdzOlt7ZGVjbGFyYXRpb25zOltFWSxPWV0saW1wb3J0czpbeFksQ1YsVHpdLGV4cG9ydHM6W3hZLENWLEVZLE9ZXSxwcm92aWRlcnM6W2VIXX1dfV0sbnVsbCxudWxsKTtjbGFzcyBOWXtjb25zdHJ1Y3Rvcigpe3RoaXMucmVsb2FkVG9nZ2xlZD1uZXcgQWIsdGhpcy5yZWxvYWRQZXJpb2RJbk1zQ2hhbmdlZD1uZXcgQWIsdGhpcy5wYWdlU2l6ZUNoYW5nZWQ9bmV3IEFiLHRoaXMuTUlOX1JFTE9BRF9QRVJJT0RfSU5fUz0zMCx0aGlzLnJlbG9hZFBlcmlvZENvbnRyb2w9bmV3IElqKHRoaXMuTUlOX1JFTE9BRF9QRVJJT0RfSU5fUyxbVFYucmVxdWlyZWQsVFYubWluKHRoaXMuTUlOX1JFTE9BRF9QRVJJT0RfSU5fUyldKSx0aGlzLnBhZ2luYXRpb25Db250cm9sPW5ldyBJaigxLFtUVi5yZXF1aXJlZCxUVi5taW4oMSksdD0+e2NvbnN0IGU9TnVtYmVyKHQudmFsdWUpO3JldHVybiBNYXRoLnJvdW5kKGUpPT09dC52YWx1ZT9udWxsOntpbnRlZ2VyOnt2YWx1ZTp0LnZhbHVlfX19XSksdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyB4fW5nT25Jbml0KCl7dGhpcy5yZWxvYWRQZXJpb2RDb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKHVuKHRoaXMubmdVbnN1YnNjcmliZSksZGUoNTAwKSxHdCgoKCk9PnRoaXMucmVsb2FkUGVyaW9kQ29udHJvbC52YWxpZCkpKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5yZWxvYWRQZXJpb2RDb250cm9sLnZhbGlkJiZ0aGlzLnJlbG9hZFBlcmlvZEluTXNDaGFuZ2VkLmVtaXQoMWUzKnRoaXMucmVsb2FkUGVyaW9kQ29udHJvbC52YWx1ZSl9KSksdGhpcy5wYWdpbmF0aW9uQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZSh1bih0aGlzLm5nVW5zdWJzY3JpYmUpLGRlKDUwMCksR3QoKCgpPT50aGlzLnBhZ2luYXRpb25Db250cm9sLnZhbGlkKSkpLnN1YnNjcmliZSgoKCk9Pnt0aGlzLnBhZ2VTaXplQ2hhbmdlZC5lbWl0KHRoaXMucGFnaW5hdGlvbkNvbnRyb2wudmFsdWUpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKSx0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKX1uZ09uQ2hhbmdlcyh0KXtpZih0LnJlbG9hZFBlcmlvZEluTXMpe2NvbnN0IGU9dC5yZWxvYWRQZXJpb2RJbk1zO2UucHJldmlvdXNWYWx1ZSE9PWUuY3VycmVudFZhbHVlJiZ0aGlzLnJlbG9hZFBlcmlvZENvbnRyb2wuc2V0VmFsdWUoZS5jdXJyZW50VmFsdWUvMWUzKX1pZih0LnJlbG9hZEVuYWJsZWQmJih0LnJlbG9hZEVuYWJsZWQuY3VycmVudFZhbHVlP3RoaXMucmVsb2FkUGVyaW9kQ29udHJvbC5lbmFibGUoKTp0aGlzLnJlbG9hZFBlcmlvZENvbnRyb2wuZGlzYWJsZSgpKSx0LnBhZ2VTaXplKXtjb25zdCBlPXQucGFnZVNpemU7ZS5wcmV2aW91c1ZhbHVlIT09ZS5jdXJyZW50VmFsdWUmJnRoaXMucGFnaW5hdGlvbkNvbnRyb2wuc2V0VmFsdWUoZS5jdXJyZW50VmFsdWUpfX1vblJlbG9hZFRvZ2dsZSgpe3RoaXMucmVsb2FkVG9nZ2xlZC5lbWl0KCl9fU5ZLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxOWSl9LE5ZLsm1Y21wPVVvKHt0eXBlOk5ZLHNlbGVjdG9yczpbWyJzZXR0aW5ncy1kaWFsb2ctY29tcG9uZW50Il1dLGlucHV0czp7cmVsb2FkRW5hYmxlZDoicmVsb2FkRW5hYmxlZCIscmVsb2FkUGVyaW9kSW5NczoicmVsb2FkUGVyaW9kSW5NcyIscGFnZVNpemU6InBhZ2VTaXplIn0sb3V0cHV0czp7cmVsb2FkVG9nZ2xlZDoicmVsb2FkVG9nZ2xlZCIscmVsb2FkUGVyaW9kSW5Nc0NoYW5nZWQ6InJlbG9hZFBlcmlvZEluTXNDaGFuZ2VkIixwYWdlU2l6ZUNoYW5nZWQ6InBhZ2VTaXplQ2hhbmdlZCJ9LGZlYXR1cmVzOltTaV0sZGVjbHM6MTQsdmFyczo1LGNvbnN0czpbWzEsInJlbG9hZC10b2dnbGUiXSxbMywiY2hlY2tlZCIsImNoYW5nZSJdLFsibWF0SW5wdXQiLCIiLCJ0eXBlIiwibnVtYmVyIiwicGxhY2Vob2xkZXIiLCJSZWxvYWQgUGVyaW9kIiwxLCJyZWxvYWQtcGVyaW9kIiwzLCJmb3JtQ29udHJvbCJdLFs0LCJuZ0lmIl0sWyJtYXRJbnB1dCIsIiIsInR5cGUiLCJudW1iZXIiLCJwbGFjZWhvbGRlciIsIlBhZ2luYXRpb24gTGltaXQiLDEsInBhZ2Utc2l6ZSIsMywiZm9ybUNvbnRyb2wiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKE91KDAsImgzIiksTWYoMSwiU2V0dGluZ3MiKSxQdSgpLE91KDIsImRpdiIpLE91KDMsImRpdiIsMCksT3UoNCwibWF0LWNoZWNrYm94IiwxKSxOdSgiY2hhbmdlIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uUmVsb2FkVG9nZ2xlKCl9KSksTWYoNSwiUmVsb2FkIGRhdGEiKSxQdSgpLFB1KCksT3UoNiwiZGl2IiksT3UoNywibWF0LWZvcm0tZmllbGQiKSx3dSg4LCJpbnB1dCIsMiksUHUoKSxXbSg5LFJZLDIsMSwibWF0LWVycm9yIiwzKSxQdSgpLFB1KCksT3UoMTAsImRpdiIpLE91KDExLCJtYXQtZm9ybS1maWVsZCIpLHd1KDEyLCJpbnB1dCIsNCksUHUoKSxXbSgxMyxUWSwyLDAsIm1hdC1lcnJvciIsMyksUHUoKSksMiZlJiYoSmMoNCksdnUoImNoZWNrZWQiLG4ucmVsb2FkRW5hYmxlZCksSmMoNCksdnUoImZvcm1Db250cm9sIixuLnJlbG9hZFBlcmlvZENvbnRyb2wpLEpjKDEpLHZ1KCJuZ0lmIixuLnJlbG9hZFBlcmlvZENvbnRyb2wuaGFzRXJyb3IoIm1pbiIpfHxuLnJlbG9hZFBlcmlvZENvbnRyb2wuaGFzRXJyb3IoInJlcXVpcmVkIikpLEpjKDMpLHZ1KCJmb3JtQ29udHJvbCIsbi5wYWdpbmF0aW9uQ29udHJvbCksSmMoMSksdnUoIm5nSWYiLG4ucGFnaW5hdGlvbkNvbnRyb2wuaW52YWxpZCkpfSxkaXJlY3RpdmVzOlt1WSxfVixFWSxKaixrVixhaixyVSxhdixuVl0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSB7XG4gIGZvbnQtc2l6ZTogMTVweDtcbn1cblxuW19uZ2hvc3QtJUNPTVAlXSAgICA+IGRpdltfbmdjb250ZW50LSVDT01QJV0ge1xuICBtYXJnaW46IDEwcHggMDtcbn1cblxuW19uZ2hvc3QtJUNPTVAlXSAgICA+IFtfbmdjb250ZW50LSVDT01QJV06Zmlyc3QtY2hpbGQge1xuICBtYXJnaW4tdG9wOiAwO1xufVxuXG5bX25naG9zdC0lQ09NUCVdICAgID4gW19uZ2NvbnRlbnQtJUNPTVAlXTpsYXN0LWNoaWxkIHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cblxuaDNbX25nY29udGVudC0lQ09NUCVdIHtcbiAgZm9udC1zaXplOiAyMHB4O1xufVxuXG4ucmVsb2FkLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICBtYXJnaW4tYm90dG9tOiAxMHB4O1xufSJdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihOWSxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJzZXR0aW5ncy1kaWFsb2ctY29tcG9uZW50Iix0ZW1wbGF0ZTonXG4gICAgPGgzPlNldHRpbmdzPC9oMz5cbiAgICA8ZGl2PlxuICAgICAgPGRpdiBjbGFzcz0icmVsb2FkLXRvZ2dsZSI+XG4gICAgICAgIDxtYXQtY2hlY2tib3ggW2NoZWNrZWRdPSJyZWxvYWRFbmFibGVkIiAoY2hhbmdlKT0ib25SZWxvYWRUb2dnbGUoKSJcbiAgICAgICAgICA+UmVsb2FkIGRhdGE8L21hdC1jaGVja2JveFxuICAgICAgICA+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGNsYXNzPSJyZWxvYWQtcGVyaW9kIlxuICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgIHR5cGU9Im51bWJlciJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJSZWxvYWQgUGVyaW9kIlxuICAgICAgICAgICAgW2Zvcm1Db250cm9sXT0icmVsb2FkUGVyaW9kQ29udHJvbCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgKm5nSWY9IlxuICAgICAgICAgICAgcmVsb2FkUGVyaW9kQ29udHJvbC5oYXNFcnJvcihcJ21pblwnKSB8fFxuICAgICAgICAgICAgcmVsb2FkUGVyaW9kQ29udHJvbC5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpXG4gICAgICAgICAgIlxuICAgICAgICA+XG4gICAgICAgICAgUmVsb2FkIHBlcmlvZCBoYXMgdG8gYmUgbWluaW11bSBvZlxuICAgICAgICAgIHt7IE1JTl9SRUxPQURfUEVSSU9EX0lOX1MgfX0gc2Vjb25kcy5cbiAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2PlxuICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICBjbGFzcz0icGFnZS1zaXplIlxuICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPSJQYWdpbmF0aW9uIExpbWl0IlxuICAgICAgICAgIFtmb3JtQ29udHJvbF09InBhZ2luYXRpb25Db250cm9sIlxuICAgICAgICAvPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDxtYXQtZXJyb3IgKm5nSWY9InBhZ2luYXRpb25Db250cm9sLmludmFsaWQiPlxuICAgICAgICBQYWdlIHNpemUgaGFzIHRvIGJlIGEgcG9zaXRpdmUgaW50ZWdlci5cbiAgICAgIDwvbWF0LWVycm9yPlxuICAgIDwvZGl2PlxuICAnLHN0eWxlVXJsczpbIi4vc2V0dGluZ3NfZGlhbG9nX2NvbXBvbmVudC5jc3MiXX1dfV0sbnVsbCx7cmVsb2FkRW5hYmxlZDpbe3R5cGU6eV99XSxyZWxvYWRQZXJpb2RJbk1zOlt7dHlwZTp5X31dLHBhZ2VTaXplOlt7dHlwZTp5X31dLHJlbG9hZFRvZ2dsZWQ6W3t0eXBlOl9ffV0scmVsb2FkUGVyaW9kSW5Nc0NoYW5nZWQ6W3t0eXBlOl9ffV0scGFnZVNpemVDaGFuZ2VkOlt7dHlwZTpfX31dfSk7Y2xhc3MgSVl7Y29uc3RydWN0b3IodCl7dGhpcy5zdG9yZT10LHRoaXMucmVsb2FkRW5hYmxlZCQ9dGhpcy5zdG9yZS5zZWxlY3QoWEcpLHRoaXMucmVsb2FkUGVyaW9kSW5NcyQ9dGhpcy5zdG9yZS5zZWxlY3QoS0cpLHRoaXMucGFnZVNpemUkPXRoaXMuc3RvcmUuc2VsZWN0KEpHKX1vblJlbG9hZFRvZ2dsZWQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKFFHKCkpfW9uUmVsb2FkUGVyaW9kSW5Nc0NoYW5nZWQodCl7dGhpcy5zdG9yZS5kaXNwYXRjaCgkRyh7cGVyaW9kSW5Nczp0fSkpfW9uUGFnZVNpemVDaGFuZ2VkKHQpe3RoaXMuc3RvcmUuZGlzcGF0Y2godFkoe3NpemU6dH0pKX19SVkuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fElZKShNdShFaykpfSxJWS7JtWNtcD1Vbyh7dHlwZTpJWSxzZWxlY3RvcnM6W1sic2V0dGluZ3MtZGlhbG9nIl1dLGRlY2xzOjQsdmFyczo5LGNvbnN0czpbWzMsInJlbG9hZEVuYWJsZWQiLCJyZWxvYWRQZXJpb2RJbk1zIiwicGFnZVNpemUiLCJyZWxvYWRUb2dnbGVkIiwicmVsb2FkUGVyaW9kSW5Nc0NoYW5nZWQiLCJwYWdlU2l6ZUNoYW5nZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKE91KDAsInNldHRpbmdzLWRpYWxvZy1jb21wb25lbnQiLDApLE51KCJyZWxvYWRUb2dnbGVkIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uUmVsb2FkVG9nZ2xlZCgpfSkpKCJyZWxvYWRQZXJpb2RJbk1zQ2hhbmdlZCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25SZWxvYWRQZXJpb2RJbk1zQ2hhbmdlZChlKX0pKSgicGFnZVNpemVDaGFuZ2VkIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vblBhZ2VTaXplQ2hhbmdlZChlKX0pKSxPYigxLCJhc3luYyIpLE9iKDIsImFzeW5jIiksT2IoMywiYXN5bmMiKSxQdSgpKSwyJmUmJnZ1KCJyZWxvYWRFbmFibGVkIixQYigxLDMsbi5yZWxvYWRFbmFibGVkJCkpKCJyZWxvYWRQZXJpb2RJbk1zIixQYigyLDUsbi5yZWxvYWRQZXJpb2RJbk1zJCkpKCJwYWdlU2l6ZSIsUGIoMyw3LG4ucGFnZVNpemUkKSl9LGRpcmVjdGl2ZXM6W05ZXSxwaXBlczpbTXZdLGVuY2Fwc3VsYXRpb246Mn0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoSVksW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3Rvcjoic2V0dGluZ3MtZGlhbG9nIix0ZW1wbGF0ZTonXG4gICAgPHNldHRpbmdzLWRpYWxvZy1jb21wb25lbnRcbiAgICAgIFtyZWxvYWRFbmFibGVkXT0icmVsb2FkRW5hYmxlZCQgfCBhc3luYyJcbiAgICAgIFtyZWxvYWRQZXJpb2RJbk1zXT0icmVsb2FkUGVyaW9kSW5NcyQgfCBhc3luYyJcbiAgICAgIFtwYWdlU2l6ZV09InBhZ2VTaXplJCB8IGFzeW5jIlxuICAgICAgKHJlbG9hZFRvZ2dsZWQpPSJvblJlbG9hZFRvZ2dsZWQoKSJcbiAgICAgIChyZWxvYWRQZXJpb2RJbk1zQ2hhbmdlZCk9Im9uUmVsb2FkUGVyaW9kSW5Nc0NoYW5nZWQoJGV2ZW50KSJcbiAgICAgIChwYWdlU2l6ZUNoYW5nZWQpPSJvblBhZ2VTaXplQ2hhbmdlZCgkZXZlbnQpIlxuICAgID48L3NldHRpbmdzLWRpYWxvZy1jb21wb25lbnQ+XG4gICd9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpFa31dfSksbnVsbCk7Y2xhc3Mgell7Y29uc3RydWN0b3IodCl7dGhpcy5kaWFsb2c9dH1pc0J1dHRvbkRpc2FibGVkKCl7cmV0dXJuIHRoaXMuc2V0dGluZ3NMb2FkU3RhdGU9PT1CRS5OT1RfTE9BREVEfHx0aGlzLnNldHRpbmdzTG9hZFN0YXRlPT09QkUuTE9BRElOR31vcGVuRGlhbG9nKCl7dGhpcy5kaWFsb2cub3BlbihJWSx7d2lkdGg6IjQwMHB4In0pfX16WS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8elkpKE11KEhXKSl9LHpZLsm1Y21wPVVvKHt0eXBlOnpZLHNlbGVjdG9yczpbWyJzZXR0aW5ncy1idXR0b24tY29tcG9uZW50Il1dLGlucHV0czp7c2V0dGluZ3NMb2FkU3RhdGU6InNldHRpbmdzTG9hZFN0YXRlIn0sZGVjbHM6Mix2YXJzOjEsY29uc3RzOltbIm1hdC1pY29uLWJ1dHRvbiIsIiIsMywiZGlzYWJsZWQiLCJjbGljayJdLFsic3ZnSWNvbiIsInNldHRpbmdzXzI0cHgiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKE91KDAsImJ1dHRvbiIsMCksTnUoImNsaWNrIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9wZW5EaWFsb2coKX0pKSx3dSgxLCJtYXQtaWNvbiIsMSksUHUoKSksMiZlJiZ2dSgiZGlzYWJsZWQiLG4uaXNCdXR0b25EaXNhYmxlZCgpKX0sZGlyZWN0aXZlczpbTkgsY0ddLGVuY2Fwc3VsYXRpb246Mn0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoelksW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3Rvcjoic2V0dGluZ3MtYnV0dG9uLWNvbXBvbmVudCIsdGVtcGxhdGU6J1xuICAgIDxidXR0b25cbiAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgW2Rpc2FibGVkXT0iaXNCdXR0b25EaXNhYmxlZCgpIlxuICAgICAgKGNsaWNrKT0ib3BlbkRpYWxvZygpIlxuICAgID5cbiAgICAgIDxtYXQtaWNvbiBzdmdJY29uPSJzZXR0aW5nc18yNHB4Ij48L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICAnfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6SFd9XX0pLHtzZXR0aW5nc0xvYWRTdGF0ZTpbe3R5cGU6eV99XX0pO2NsYXNzIEhZe2NvbnN0cnVjdG9yKHQpe3RoaXMuc3RvcmU9dCx0aGlzLnNldHRpbmdzTG9hZFN0YXRlJD10aGlzLnN0b3JlLnNlbGVjdChaRyl9fUhZLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxIWSkoTXUoRWspKX0sSFkuybVjbXA9VW8oe3R5cGU6SFksc2VsZWN0b3JzOltbInNldHRpbmdzLWJ1dHRvbiJdXSxkZWNsczoyLHZhcnM6Myxjb25zdHM6W1szLCJzZXR0aW5nc0xvYWRTdGF0ZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYod3UoMCwic2V0dGluZ3MtYnV0dG9uLWNvbXBvbmVudCIsMCksT2IoMSwiYXN5bmMiKSksMiZlJiZ2dSgic2V0dGluZ3NMb2FkU3RhdGUiLFBiKDEsMSxuLnNldHRpbmdzTG9hZFN0YXRlJCkpfSxkaXJlY3RpdmVzOlt6WV0scGlwZXM6W012XSxlbmNhcHN1bGF0aW9uOjJ9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEhZLFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6InNldHRpbmdzLWJ1dHRvbiIsdGVtcGxhdGU6J1xuICAgIDxzZXR0aW5ncy1idXR0b24tY29tcG9uZW50XG4gICAgICBbc2V0dGluZ3NMb2FkU3RhdGVdPSJzZXR0aW5nc0xvYWRTdGF0ZSQgfCBhc3luYyJcbiAgICA+PC9zZXR0aW5ncy1idXR0b24tY29tcG9uZW50PlxuICAnfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6RWt9XX0pLG51bGwpO2NsYXNzIEZZe31GWS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8RlkpfSxGWS7JtWNtcD1Vbyh7dHlwZTpGWSxzZWxlY3RvcnM6W1siYXBwLWhlYWRlciJdXSxkZWNsczoxMCx2YXJzOjAsY29uc3RzOltbMSwiYnJhbmQiXSxbMSwicGx1Z2lucyJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiaHJlZiIsImh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCIsInJlbCIsIm5vb3BlbmVyIG5vcmVmZXJyZXIiLCJ0YXJnZXQiLCJfYmxhbmsiLCJhcmlhLWxhYmVsIiwiSGVscCIsMSwicmVhZG1lIl0sWyJzdmdJY29uIiwiaGVscF9vdXRsaW5lXzI0cHgiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKE91KDAsIm1hdC10b29sYmFyIiksT3UoMSwic3BhbiIsMCksTWYoMiwiVGVuc29yQm9hcmQiKSxQdSgpLHd1KDMsInBsdWdpbi1zZWxlY3RvciIsMSksd3UoNCwidGJkZXYtdXBsb2FkLWJ1dHRvbiIpLHd1KDUsImFwcC1oZWFkZXItZGFyay1tb2RlLXRvZ2dsZSIpLHd1KDYsImFwcC1oZWFkZXItcmVsb2FkIiksd3UoNywic2V0dGluZ3MtYnV0dG9uIiksT3UoOCwiYSIsMiksd3UoOSwibWF0LWljb24iLDMpLFB1KCksUHUoKSl9LGRpcmVjdGl2ZXM6W1ZMLENXLGhHLGpHLFdHLEhZLElILGNHXSxzdHlsZXM6WycubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1iYWRnZS1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo5cHh9Lm1hdC1iYWRnZS1sYXJnZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4fS5tYXQtaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWhlYWRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAyNHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE1cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjgzKS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1oNltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC42NykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtYm9keS1zdHJvbmdbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MCAwIDEycHh9Lm1hdC1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FwdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTJweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6MzAwIDExMnB4LzExMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wNWVtO21hcmdpbjowIDAgNTZweH0ubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNTZweC81NnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMmVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNDVweC80OHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMDVlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDM0cHgvNDBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1yYWlzZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3Ryb2tlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZsYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mYWJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW1pbmktZmFiW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtYnV0dG9uLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FyZC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjBweH0ubWF0LWNhcmQtc3VidGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hlY2tib3gtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC10cmFpbGluZy1pY29uLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC1yZW1vdmUubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxOHB4fS5tYXQtdGFibGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWhlYWRlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb290ZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jYWxlbmRhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FsZW5kYXItYm9keVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYWxlbmRhci1wZXJpb2QtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWRpYWxvZy10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTI1O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTUwJTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjVlbTt3aWR0aDoxLjVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW07bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41ZW0gMDtib3JkZXItdG9wOi44NDM3NWVtIHNvbGlkIHRyYW5zcGFyZW50fS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3RvcDotMC44NDM3NWVtO3BhZGRpbmctdG9wOi44NDM3NWVtfS5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjc1JTttYXJnaW4tdG9wOi42NjY2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNzkxNjY2NjY2N2VtKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAycHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyM2VtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzUzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi41NDE2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNjY2NjY2NjY2N2VtKX1AbWVkaWEgcHJpbnR7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIyZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIxZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMmVtKSBzY2FsZSgwLjc1KX19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjI1ZW0gMCAuNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4wOTM3NWVtO21hcmdpbi10b3A6LTAuNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MWVtIDAgMWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjg0Mzc1ZW07bWFyZ2luLXRvcDotMC4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH1pbnB1dC5tYXQtaW5wdXQtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDotMC4wNjI1ZW19Lm1hdC1tZW51LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1wYWdpbmF0b3JbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXBhZ2luYXRvci1wYWdlLXNpemVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3RbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXN0ZXBwZXItdmVydGljYWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc3RlcC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0Om5vcm1hbH0ubWF0LXN0ZXAtbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRhYi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjB9Lm1hdC10b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTZweH0ubWF0LW9wdGdyb3VwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LXNpbXBsZS1zbmFja2Jhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbltfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRyZWVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbmVzdGVkLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4fS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVdOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtcmlwcGxlLm1hdC1yaXBwbGUtdW5ib3VuZGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6NTAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7dHJhbnNmb3JtOnNjYWxlKDApfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpub25lfS5jZGstdmlzdWFsbHktaGlkZGVuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7bGVmdDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmVtcHR5e2Rpc3BsYXk6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LXBhbmVbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOmF1dG87Ym94LXNpemluZzpib3JkZXItYm94O3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7bWF4LXdpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlfS5jZGstb3ZlcmxheS1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKTtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5Oi42fS5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjMyKX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTowfS5jZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO292ZXJmbG93LXk6c2Nyb2xsfUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnR7fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5ke30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxse2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCAwcyAxbXN9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06bm90KDotd2Via2l0LWF1dG9maWxsKXthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIDBzIDFtc310ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemVbX25nY29udGVudC0lQ09NUCVde3Jlc2l6ZTpub25lfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmdbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OmF1dG8gIWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW4gIWltcG9ydGFudH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nLWZpcmVmb3hbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OjAgIWltcG9ydGFudH0ubWF0LWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX1tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2NvbG9yOiNmZmY7ZGlzcGxheTpmbGV4O2hlaWdodDo2NHB4O292ZXJmbG93OmhpZGRlbjt3aWR0aDoxMDAlfXRiZGV2LXVwbG9hZC1idXR0b24uc2hvd25bX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDhweCAwIDE2cHh9LmJyYW5kW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnJlYWRtZVtfbmdjb250ZW50LSVDT01QJV0sIGFwcC1oZWFkZXItcmVsb2FkW19uZ2NvbnRlbnQtJUNPTVAlXSwgc2V0dGluZ3MtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjAgMCBhdXRvfS5icmFuZFtfbmdjb250ZW50LSVDT01QJV17bGV0dGVyLXNwYWNpbmc6LTAuMDI1ZW07bWFyZ2luLWxlZnQ6MTBweDt0ZXh0LXJlbmRlcmluZzpvcHRpbWl6ZUxlZ2liaWxpdHl9LnBsdWdpbnNbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleDoxIDEgYXV0bztmb250LXNpemU6MTRweDtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59J119KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEZZLFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6ImFwcC1oZWFkZXIiLHRlbXBsYXRlOidcbiAgICA8bWF0LXRvb2xiYXI+XG4gICAgICA8c3BhbiBjbGFzcz0iYnJhbmQiPlRlbnNvckJvYXJkPC9zcGFuPlxuICAgICAgPHBsdWdpbi1zZWxlY3RvciBjbGFzcz0icGx1Z2lucyI+PC9wbHVnaW4tc2VsZWN0b3I+XG4gICAgICA8dGJkZXYtdXBsb2FkLWJ1dHRvbj48L3RiZGV2LXVwbG9hZC1idXR0b24+XG4gICAgICA8YXBwLWhlYWRlci1kYXJrLW1vZGUtdG9nZ2xlPjwvYXBwLWhlYWRlci1kYXJrLW1vZGUtdG9nZ2xlPlxuICAgICAgPGFwcC1oZWFkZXItcmVsb2FkPjwvYXBwLWhlYWRlci1yZWxvYWQ+XG4gICAgICA8c2V0dGluZ3MtYnV0dG9uPjwvc2V0dGluZ3MtYnV0dG9uPlxuICAgICAgPGFcbiAgICAgICAgY2xhc3M9InJlYWRtZSJcbiAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCJcbiAgICAgICAgcmVsPSJub29wZW5lciBub3JlZmVycmVyIlxuICAgICAgICB0YXJnZXQ9Il9ibGFuayJcbiAgICAgICAgYXJpYS1sYWJlbD0iSGVscCJcbiAgICAgID5cbiAgICAgICAgPG1hdC1pY29uIHN2Z0ljb249ImhlbHBfb3V0bGluZV8yNHB4Ij48L21hdC1pY29uPlxuICAgICAgPC9hPlxuICAgIDwvbWF0LXRvb2xiYXI+XG4gICcsc3R5bGVVcmxzOlsiaGVhZGVyX2NvbXBvbmVudC5jc3MiXX1dfV0sbnVsbCxudWxsKTtjb25zdCBMWT1bInJvdXRlQ29udGFpbmVyIl07Y2xhc3MgQll7Y29uc3RydWN0b3IodCl7dGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9dH1uZ09uQ2hhbmdlcyh0KXtjb25zdCBlPXQuYWN0aXZlTmdDb21wb25lbnQ7aWYoZSYmKHRoaXMucm91dGVDb250YWluZXIuY2xlYXIoKSxlLmN1cnJlbnRWYWx1ZSkpe2NvbnN0IHQ9dGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoZS5jdXJyZW50VmFsdWUpO3RoaXMucm91dGVDb250YWluZXIuY3JlYXRlQ29tcG9uZW50KHQpfX19QlkuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEJZKShNdShyaCkpfSxCWS7JtWNtcD1Vbyh7dHlwZTpCWSxzZWxlY3RvcnM6W1sicm91dGVyLW91dGxldC1jb21wb25lbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJldiKExZLDMsWGgpLDImZSl7bGV0IHQ7VWIodD1ZYigpKSYmKG4ucm91dGVDb250YWluZXI9dC5maXJzdCl9fSxpbnB1dHM6e2FjdGl2ZU5nQ29tcG9uZW50OiJhY3RpdmVOZ0NvbXBvbmVudCJ9LGZlYXR1cmVzOltTaV0sZGVjbHM6Mix2YXJzOjAsY29uc3RzOltbInJvdXRlQ29udGFpbmVyIiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJkR1KDAsbnVsbCwwKX0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihCWSxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJyb3V0ZXItb3V0bGV0LWNvbXBvbmVudCIsdGVtcGxhdGU6IiA8bmctY29udGFpbmVyICNyb3V0ZUNvbnRhaW5lcj48L25nLWNvbnRhaW5lcj4gIixjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6cmh9XX0pLHtyb3V0ZUNvbnRhaW5lcjpbe3R5cGU6RnIsYXJnczpbInJvdXRlQ29udGFpbmVyIix7c3RhdGljOiEwLHJlYWQ6WGh9XX1dLGFjdGl2ZU5nQ29tcG9uZW50Olt7dHlwZTp5X31dfSk7Y2xhc3MgVll7Y29uc3RydWN0b3IodCxlKXt0aGlzLnN0b3JlPXQsdGhpcy5yZWdpc3RyeT1lLHRoaXMuYWN0aXZlTmdDb21wb25lbnQkPUR0KFt0aGlzLnN0b3JlLnNlbGVjdChfRCksdGhpcy5zdG9yZS5zZWxlY3QoQ0QpXSkucGlwZShodCgoKFt0LGVdKT0+dD9udWxsIT09ZSYmWVMoZS5yb3V0ZUtpbmQsZS5wYXJhbXMpIT09WVModC5yb3V0ZUtpbmQsdC5wYXJhbXMpP251bGw6dGhpcy5yZWdpc3RyeS5nZXROZ0NvbXBvbmVudEJ5Um91dGVLaW5kKHQucm91dGVLaW5kKTpudWxsKSkpfX12YXIgalk7VlkuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFZZKShNdShFayksTXUoaEQpKX0sVlkuybVjbXA9VW8oe3R5cGU6Vlksc2VsZWN0b3JzOltbInJvdXRlci1vdXRsZXQiXV0sZGVjbHM6Mix2YXJzOjMsY29uc3RzOltbMywiYWN0aXZlTmdDb21wb25lbnQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKHd1KDAsInJvdXRlci1vdXRsZXQtY29tcG9uZW50IiwwKSxPYigxLCJhc3luYyIpKSwyJmUmJnZ1KCJhY3RpdmVOZ0NvbXBvbmVudCIsUGIoMSwxLG4uYWN0aXZlTmdDb21wb25lbnQkKSl9LGRpcmVjdGl2ZXM6W0JZXSxwaXBlczpbTXZdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoVlksW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3Rvcjoicm91dGVyLW91dGxldCIsdGVtcGxhdGU6J1xuICAgIDxyb3V0ZXItb3V0bGV0LWNvbXBvbmVudFxuICAgICAgW2FjdGl2ZU5nQ29tcG9uZW50XT0iYWN0aXZlTmdDb21wb25lbnQkIHwgYXN5bmMiXG4gICAgPjwvcm91dGVyLW91dGxldC1jb21wb25lbnQ+XG4gICcsY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkVrfSx7dHlwZTpoRH1dfSksbnVsbCksKGZ1bmN0aW9uKHQpe3RbdC5BQ1RJVkVfUExVR0lOPTBdPSJBQ1RJVkVfUExVR0lOIn0pKGpZfHwoalk9e30pKTtjbGFzcyBVWXtjb25zdHJ1Y3Rvcih0KXt0aGlzLmRlZXBMaW5rZXI9dCx0aGlzLm9uSGFzaENoYW5nZT10aGlzLm9uSGFzaENoYW5nZWRJbXBsLmJpbmQodGhpcyksdGhpcy5vblZhbHVlQ2hhbmdlPW5ldyBBYn1vbkhhc2hDaGFuZ2VkSW1wbCgpe2NvbnN0IHQ9dGhpcy5kZWVwTGlua2VyLmdldFBsdWdpbklkKCk7dCE9PXRoaXMuYWN0aXZlUGx1Z2luSWQmJnRoaXMub25WYWx1ZUNoYW5nZS5lbWl0KHtwcm9wOmpZLkFDVElWRV9QTFVHSU4sdmFsdWU6dH0pfW5nT25Jbml0KCl7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImhhc2hjaGFuZ2UiLHRoaXMub25IYXNoQ2hhbmdlKX1uZ09uRGVzdHJveSgpe3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIix0aGlzLm9uSGFzaENoYW5nZSl9bmdPbkNoYW5nZXModCl7aWYodC5hY3RpdmVQbHVnaW5JZCl7Y29uc3QgZT10LmFjdGl2ZVBsdWdpbklkO3RoaXMuZGVlcExpbmtlci5zZXRQbHVnaW5JZChudWxsPT09ZS5jdXJyZW50VmFsdWU/IiI6ZS5jdXJyZW50VmFsdWUse2RlZmF1bHRWYWx1ZToiIix1c2VMb2NhdGlvblJlcGxhY2U6bnVsbD09PWUucHJldmlvdXNWYWx1ZXx8ZS5maXJzdENoYW5nZX0pfX19VVkuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFVZKShNdShiQSkpfSxVWS7JtWNtcD1Vbyh7dHlwZTpVWSxzZWxlY3RvcnM6W1siaGFzaC1zdG9yYWdlLWNvbXBvbmVudCJdXSxpbnB1dHM6e2FjdGl2ZVBsdWdpbklkOiJhY3RpdmVQbHVnaW5JZCJ9LG91dHB1dHM6e29uVmFsdWVDaGFuZ2U6Im9uVmFsdWVDaGFuZ2UifSxmZWF0dXJlczpbU2ldLGRlY2xzOjAsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXt9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoVVksW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoiaGFzaC1zdG9yYWdlLWNvbXBvbmVudCIsdGVtcGxhdGU6IiIsY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmJBfV19KSx7YWN0aXZlUGx1Z2luSWQ6W3t0eXBlOnlffV0sb25WYWx1ZUNoYW5nZTpbe3R5cGU6X199XX0pO2NsYXNzIFdZe2NvbnN0cnVjdG9yKHQpe3RoaXMuc3RvcmU9dCx0aGlzLmFjdGl2ZVBsdWdpbklkJD10aGlzLnN0b3JlLnBpcGUoUmsoZEEpKX1vblZhbHVlQ2hhbmdlZCh0KXtzd2l0Y2godC5wcm9wKXtjYXNlIGpZLkFDVElWRV9QTFVHSU46dGhpcy5zdG9yZS5kaXNwYXRjaChqRSh7cGx1Z2luOnQudmFsdWV9KSl9fX1XWS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8V1kpKE11KEVrKSl9LFdZLsm1Y21wPVVvKHt0eXBlOldZLHNlbGVjdG9yczpbWyJoYXNoLXN0b3JhZ2UiXV0sZGVjbHM6Mix2YXJzOjMsY29uc3RzOltbMywiYWN0aXZlUGx1Z2luSWQiLCJvblZhbHVlQ2hhbmdlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihPdSgwLCJoYXNoLXN0b3JhZ2UtY29tcG9uZW50IiwwKSxOdSgib25WYWx1ZUNoYW5nZSIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25WYWx1ZUNoYW5nZWQoZSl9KSksT2IoMSwiYXN5bmMiKSxQdSgpKSwyJmUmJnZ1KCJhY3RpdmVQbHVnaW5JZCIsUGIoMSwxLG4uYWN0aXZlUGx1Z2luSWQkKSl9LGRpcmVjdGl2ZXM6W1VZXSxwaXBlczpbTXZdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0ge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfSJdLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihXWSxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJoYXNoLXN0b3JhZ2UiLHRlbXBsYXRlOidcbiAgICA8aGFzaC1zdG9yYWdlLWNvbXBvbmVudFxuICAgICAgW2FjdGl2ZVBsdWdpbklkXT0iYWN0aXZlUGx1Z2luSWQkIHwgYXN5bmMiXG4gICAgICAob25WYWx1ZUNoYW5nZSk9Im9uVmFsdWVDaGFuZ2VkKCRldmVudCkiXG4gICAgPlxuICAgIDwvaGFzaC1zdG9yYWdlLWNvbXBvbmVudD5cbiAgJyxzdHlsZXM6WyJcbiAgICAgIDpob3N0IHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH1cbiAgICAiXSxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6RWt9XX0pLG51bGwpO2NsYXNzIEdZe25nT25DaGFuZ2VzKHQpe3QudGl0bGUmJihmdW5jdGlvbiBlKHQpe2RvY3VtZW50LnRpdGxlPXR9KSh0LnRpdGxlLmN1cnJlbnRWYWx1ZSl9fUdZLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxHWSl9LEdZLsm1Y21wPVVvKHt0eXBlOkdZLHNlbGVjdG9yczpbWyJwYWdlLXRpdGxlLWNvbXBvbmVudCJdXSxpbnB1dHM6e3RpdGxlOiJ0aXRsZSJ9LGZlYXR1cmVzOltTaV0sZGVjbHM6MCx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pe30sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihHWSxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJwYWdlLXRpdGxlLWNvbXBvbmVudCIsdGVtcGxhdGU6IiIsY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sbnVsbCx7dGl0bGU6W3t0eXBlOnlffV19KTtjb25zdCBZWT0iVGVuc29yQm9hcmQiO2NsYXNzIHFZe2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5zdG9yZT10LHRoaXMuY3VzdG9tQnJhbmROYW1lPWUsdGhpcy5nZXRFeHBlcmltZW50SWQkPXRoaXMuc3RvcmUuc2VsZWN0KHhEKS5waXBlKGh0KCh0PT5udWxsPT10P3ZvaWQgMDp0WzBdKSkpLHRoaXMuZXhwZXJpbWVudE5hbWUkPXRoaXMuZ2V0RXhwZXJpbWVudElkJC5waXBlKEd0KEJvb2xlYW4pLFR0KCh0PT50aGlzLnN0b3JlLnNlbGVjdChpUix7ZXhwZXJpbWVudElkOnR9KSkpLGh0KCh0PT50P3QubmFtZTpudWxsKSkpLHRoaXMudGl0bGUkPXRoaXMuc3RvcmUuc2VsZWN0KG1BKS5waXBlKGNlKHRoaXMuc3RvcmUuc2VsZWN0KE1EKSx0aGlzLmV4cGVyaW1lbnROYW1lJCksaHQoKChbdCxlLG5dKT0+e2NvbnN0IG89dGhpcy5jdXN0b21CcmFuZE5hbWV8fFlZO3JldHVybiB0LndpbmRvd190aXRsZT90LndpbmRvd190aXRsZTplPT09alMuRVhQRVJJTUVOVCYmbj9gJHtufSAtICR7b31gOm99KSksY24odGhpcy5jdXN0b21CcmFuZE5hbWV8fFlZKSxrZSgpKX19cVkuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHFZKShNdShFayksTXUoSUUsOCkpfSxxWS7JtWNtcD1Vbyh7dHlwZTpxWSxzZWxlY3RvcnM6W1sicGFnZS10aXRsZSJdXSxkZWNsczoyLHZhcnM6Myxjb25zdHM6W1szLCJ0aXRsZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYod3UoMCwicGFnZS10aXRsZS1jb21wb25lbnQiLDApLE9iKDEsImFzeW5jIikpLDImZSYmdnUoInRpdGxlIixQYigxLDEsbi50aXRsZSQpKX0sZGlyZWN0aXZlczpbR1ldLHBpcGVzOltNdl0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHFZLFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6InBhZ2UtdGl0bGUiLHRlbXBsYXRlOidcbiAgICA8cGFnZS10aXRsZS1jb21wb25lbnQgW3RpdGxlXT0idGl0bGUkIHwgYXN5bmMiPjwvcGFnZS10aXRsZS1jb21wb25lbnQ+XG4gICcsc3R5bGVzOlsiXG4gICAgICA6aG9zdCB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9XG4gICAgIl0sY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkVrfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W0lFXX1dfV19KSxudWxsKTtjbGFzcyBaWXtjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXQsdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyB4LHRoaXMuZ2V0UGFnZVNpemUkPXRoaXMuc3RvcmUucGlwZShSayhKRykpLHRoaXMucGFnaW5hdGVkVmlld1N0b3JlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRmLXBhZ2luYXRlZC12aWV3LXN0b3JlIikudGZfcGFnaW5hdGVkX3ZpZXd9bmdPbkluaXQoKXt0aGlzLmdldFBhZ2VTaXplJC5waXBlKHVuKHRoaXMubmdVbnN1YnNjcmliZSksa2UoKSkuc3Vic2NyaWJlKCh0PT57dGhpcy5wYWdpbmF0ZWRWaWV3U3RvcmUuc2V0TGltaXQodCl9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpfX1aWS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8WlkpKE11KEVrKSl9LFpZLsm1Y21wPVVvKHt0eXBlOlpZLHNlbGVjdG9yczpbWyJzZXR0aW5ncy1wb2x5bWVyLWludGVyb3AiXV0sZGVjbHM6MCx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pe30sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihaWSxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJzZXR0aW5ncy1wb2x5bWVyLWludGVyb3AiLHRlbXBsYXRlOiIiLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2h9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpFa31dfSksbnVsbCk7Y2xhc3MgWFl7Y29uc3RydWN0b3IodCl7dC5zZWxlY3QoTUUpLnN1YnNjcmliZSgodD0+e2RvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnRvZ2dsZSgiZGFyay1tb2RlIix0KX0pKX19WFkuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFhZKShNdShFaykpfSxYWS7JtWNtcD1Vbyh7dHlwZTpYWSxzZWxlY3RvcnM6W1siZGFyay1tb2RlLXN1cHBvcnRlciJdXSxkZWNsczowLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7fSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoWFksW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoiZGFyay1tb2RlLXN1cHBvcnRlciIsdGVtcGxhdGU6IiIsc3R5bGVzOlsiXG4gICAgICA6aG9zdCB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9XG4gICAgIl0sY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkVrfV19KSxudWxsKTtjbGFzcyBLWXtjb25zdHJ1Y3Rvcih0KXt0aGlzLnZjUmVmPXR9fUtZLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxLWSkoTXUoWGgpKX0sS1kuybVjbXA9VW8oe3R5cGU6S1ksc2VsZWN0b3JzOltbInRiLXdlYmFwcCJdXSxkZWNsczo4LHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYod3UoMCwiYXBwLWhlYWRlciIpLE91KDEsIm1haW4iKSx3dSgyLCJyb3V0ZXItb3V0bGV0IiksUHUoKSx3dSgzLCJhbGVydC1zbmFja2JhciIpLHd1KDQsImhhc2gtc3RvcmFnZSIpLHd1KDUsInBhZ2UtdGl0bGUiKSx3dSg2LCJzZXR0aW5ncy1wb2x5bWVyLWludGVyb3AiKSx3dSg3LCJkYXJrLW1vZGUtc3VwcG9ydGVyIikpfSxkaXJlY3RpdmVzOltGWSxWWSxJTCxXWSxxWSxaWSxYWV0sc3R5bGVzOlsnLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEycHg7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtYmFkZ2Utc21hbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6OXB4fS5tYXQtYmFkZ2UtbGFyZ2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweH0ubWF0LWgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1oZWFkbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMjRweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNnB4LzI4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNXB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC44MykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtaDZbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuNjcpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWJvZHktc3Ryb25nW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjAgMCAxMnB4fS5tYXQtc21hbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDEycHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjMwMCAxMTJweC8xMTJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDVlbTttYXJnaW46MCAwIDU2cHh9Lm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDU2cHgvNTZweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDJlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDQ1cHgvNDhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDA1ZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAzNHB4LzQwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDY0cHh9Lm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcmFpc2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0cm9rZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mbGF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmFiW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1taW5pLWZhYltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWJ1dHRvbi10b2dnbGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhcmQtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjIwcHh9Lm1hdC1jYXJkLXN1YnRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2hlY2tib3hbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNoZWNrYm94LWxheW91dFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoZWNrYm94LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoyNHB4fS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtdHJhaWxpbmctaWNvbi5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtcmVtb3ZlLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MThweH0ubWF0LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1oZWFkZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2VsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9vdGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2FsZW5kYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhbGVuZGFyLWJvZHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxM3B4fS5tYXQtY2FsZW5kYXItYm9keS1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FsZW5kYXItcGVyaW9kLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo0MDB9Lm1hdC1kaWFsb2ctdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjEyNTtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE1MCU7bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS41ZW07d2lkdGg6MS41ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNWVtIDA7Ym9yZGVyLXRvcDouODQzNzVlbSBzb2xpZCB0cmFuc3BhcmVudH0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6LTAuODQzNzVlbTtwYWRkaW5nLXRvcDouODQzNzVlbX0ubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo3NSU7bWFyZ2luLXRvcDouNjY2NjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjc5MTY2NjY2NjdlbSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNDM3NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMnB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjNlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM1MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjI4MTI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDouNTQxNjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjY2NjY2NjY2NjdlbSl9QG1lZGlhIHByaW50ey5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMmVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMWVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTJlbSkgc2NhbGUoMC43NSl9fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi4yNWVtIDAgLjc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMDkzNzVlbTttYXJnaW4tdG9wOi0wLjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjFlbSAwIDFlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS44NDM3NWVtO21hcmdpbi10b3A6LTAuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9aW5wdXQubWF0LWlucHV0LWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LTAuMDYyNWVtfS5tYXQtbWVudS1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtcGFnaW5hdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweH0ubWF0LXJhZGlvLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW19Lm1hdC1zbGlkZS10b2dnbGUtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdGVwcGVyLWhvcml6b250YWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXN0ZXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXN0ZXAtc3ViLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDpub3JtYWx9Lm1hdC1zdGVwLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LXN0ZXAtbGFiZWwtc2VsZWN0ZWRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRhYi1ncm91cFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdGFiLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10YWItbGlua1tfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowfS5tYXQtdG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB4O3BhZGRpbmctdG9wOjZweDtwYWRkaW5nLWJvdHRvbTo2cHh9Lm1hdC10b29sdGlwLWhhbmRzZXRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9Lm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE2cHh9Lm1hdC1vcHRncm91cC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1zaW1wbGUtc25hY2tiYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweH0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb25bX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjE7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo1MDB9Lm1hdC10cmVlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW5lc3RlZC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjQwMDtmb250LXNpemU6MTRweH0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmVtcHR5KXt0cmFuc2Zvcm06dHJhbnNsYXRlWigwKX0ubWF0LXJpcHBsZS5tYXQtcmlwcGxlLXVuYm91bmRlZFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItcmFkaXVzOjUwJTtwb2ludGVyLWV2ZW50czpub25lO3RyYW5zaXRpb246b3BhY2l0eSx0cmFuc2Zvcm0gMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpO3RyYW5zZm9ybTpzY2FsZSgwKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6bm9uZX0uY2RrLXZpc3VhbGx5LWhpZGRlbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjA7Y2xpcDpyZWN0KDAgMCAwIDApO2hlaWdodDoxcHg7bWFyZ2luOi0xcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwO291dGxpbmU6MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb2ludGVyLWV2ZW50czpub25lO3RvcDowO2xlZnQ6MDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTplbXB0eXtkaXNwbGF5Om5vbmV9LmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1wYW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czphdXRvO2JveC1zaXppbmc6Ym9yZGVyLWJveDt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O21heC13aWR0aDoxMDAlO21heC1oZWlnaHQ6MTAwJX0uY2RrLW92ZXJsYXktYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO3otaW5kZXg6MTAwMDtwb2ludGVyLWV2ZW50czphdXRvOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDt0cmFuc2l0aW9uOm9wYWNpdHkgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSk7b3BhY2l0eTowfS5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjF9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAuY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTouNn0uY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4zMil9LmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MH0uY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWluLXdpZHRoOjFweDttaW4taGVpZ2h0OjFweH0uY2RrLWdsb2JhbC1zY3JvbGxibG9ja1tfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7d2lkdGg6MTAwJTtvdmVyZmxvdy15OnNjcm9sbH1Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0e31Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZHt9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbHthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQgMHMgMW1zfS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOm5vdCg6LXdlYmtpdC1hdXRvZmlsbCl7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCAwcyAxbXN9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplW19uZ2NvbnRlbnQtJUNPTVAlXXtyZXNpemU6bm9uZX10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDphdXRvICFpbXBvcnRhbnQ7b3ZlcmZsb3c6aGlkZGVuICFpbXBvcnRhbnR9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZy1maXJlZm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDowICFpbXBvcnRhbnR9Lm1hdC1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtbWRjLWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9aHRtbFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90byxzYW5zLXNlcmlmO2hlaWdodDoxMDAlO21hcmdpbjowO3BhZGRpbmc6MH1bX25naG9zdC0lQ09NUCVde2JhY2tncm91bmQ6I2Y1ZjVmNTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2hlaWdodDoxMDAlfWFwcC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2JveC1zaGFkb3c6MCAxcHggM3B4IDNweCByZ2JhKDAsMCwwLC4yNSk7ZmxleDowIDA7ei1pbmRleDoxfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIGFwcC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBhcHAtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3gtc2hhZG93OjAgMXB4IDNweCAzcHggcmdiYSgyNTUsMjU1LDI1NSwuMSl9bWFpbltfbmdjb250ZW50LSVDT01QJV17ZmxleC1ncm93OjE7b3ZlcmZsb3c6YXV0b30nXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoS1ksW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoidGItd2ViYXBwIix0ZW1wbGF0ZVVybDoiLi9hcHBfY29udGFpbmVyLm5nLmh0bWwiLHN0eWxlVXJsczpbIi4vYXBwX2NvbnRhaW5lci5jc3MiXX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOlhofV19KSxudWxsKTtjbGFzcyBKWXtjb25zdHJ1Y3Rvcih0LGUsbil7dGhpcy5zdG9yZT10LHRoaXMubG9jYXRpb249ZSx0aGlzLmFwcFJvb3RQcm92aWRlcj1uLHRoaXMucGF0aG5hbWU9bnVsbH1oYW5kbGVDbGljayh0KXshdGhpcy5wYXRobmFtZXx8dC5jdHJsS2V5fHx0Lm1ldGFLZXl8fCh0LnByZXZlbnREZWZhdWx0KCksdC5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLnN0b3JlLmRpc3BhdGNoKGVEKHtwYXRobmFtZTp0aGlzLnBhdGhuYW1lfSkpKX1nZXQgaHJlZigpe3JldHVybiB0aGlzLnBhdGhuYW1lP3RoaXMuYXBwUm9vdFByb3ZpZGVyLmdldEFic1BhdGhuYW1lV2l0aEFwcFJvb3QodGhpcy5sb2NhdGlvbi5nZXRGdWxsUGF0aEZyb21Sb3V0ZU9yTmF2KHtwYXRobmFtZTp0aGlzLnBhdGhuYW1lfSkpOm51bGx9c2V0IHJvdXRlckxpbmsodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0JiYodD1bdF0pLDA9PT10Lmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigicm91dGVMaW5rIHNob3VsZCBoYXZlIHByb3BlciBwYXRoLiBHb3Qgbm90aGluZy4iKTtjb25zdCBlPVsuLi50XS5qb2luKCIvIik7dGhpcy5wYXRobmFtZT1lLmVuZHNXaXRoKCIvIik/ZTplKyIvIn19SlkuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEpZKShNdShFayksTXUoWlMpLE11KFhTKSl9LEpZLsm1ZGlyPUpvKHt0eXBlOkpZLHNlbGVjdG9yczpbWyJhIiwicm91dGVyTGluayIsIiJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MSZlJiZOdSgiY2xpY2siLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLmhhbmRsZUNsaWNrKGUpfSkpLDImZSYmTm0oImhyZWYiLG4uaHJlZixPbCl9LGlucHV0czp7cm91dGVyTGluazoicm91dGVyTGluayJ9fSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihKWSxbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJhW3JvdXRlckxpbmtdIn1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkVrfSx7dHlwZTpaU30se3R5cGU6WFN9XX0pLHtoYW5kbGVDbGljazpbe3R5cGU6TV8sYXJnczpbImNsaWNrIixbIiRldmVudCJdXX1dLGhyZWY6W3t0eXBlOkNfLGFyZ3M6WyJhdHRyLmhyZWYiXX1dLHJvdXRlckxpbms6W3t0eXBlOnlffV19KTtjbGFzcyBRWXt9UVkuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFFZKX0sUVkuybVtb2Q9Wm8oe3R5cGU6UVl9KSxRWS7JtWluaj1jbyh7aW1wb3J0czpbW0J2LCRTLFFTLGhEXV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKFFZLHtkZWNsYXJhdGlvbnM6W1ZZLEJZLEpZXSxpbXBvcnRzOltCdiwkUyxRUyxoRF0sZXhwb3J0czpbVlksSlldfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihRWSxbe3R5cGU6a18sYXJnczpbe2ltcG9ydHM6W0J2LCRTLFFTLGhEXSxleHBvcnRzOltWWSxKWV0sZGVjbGFyYXRpb25zOltWWSxCWSxKWV19XX1dLG51bGwsbnVsbCk7Y2xhc3MgJFl7fSRZLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHwkWSl9LCRZLsm1bW9kPVpvKHt0eXBlOiRZfSksJFkuybVpbmo9Y28oe30pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oJFkse2RlY2xhcmF0aW9uczpbWFldLGV4cG9ydHM6W1hZXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoJFksW3t0eXBlOmtfLGFyZ3M6W3tkZWNsYXJhdGlvbnM6W1hZXSxleHBvcnRzOltYWV19XX1dLG51bGwsbnVsbCk7Y2xhc3MgdHF7fXRxLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHx0cSl9LHRxLsm1bW9kPVpvKHt0eXBlOnRxfSksdHEuybVpbmo9Y28oe3Byb3ZpZGVyczpbe3Byb3ZpZGU6YkEsdXNlQ2xhc3M6X0F9XX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIodHEsW3t0eXBlOmtfLGFyZ3M6W3twcm92aWRlcnM6W3twcm92aWRlOmJBLHVzZUNsYXNzOl9BfV19XX1dLG51bGwsbnVsbCk7Y2xhc3MgZXF7fWVxLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxlcSl9LGVxLsm1bW9kPVpvKHt0eXBlOmVxfSksZXEuybVpbmo9Y28oe2ltcG9ydHM6W1tCdix0cV1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhlcSx7ZGVjbGFyYXRpb25zOltXWSxVWV0saW1wb3J0czpbQnYsdHFdLGV4cG9ydHM6W1dZXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoZXEsW3t0eXBlOmtfLGFyZ3M6W3tkZWNsYXJhdGlvbnM6W1dZLFVZXSxleHBvcnRzOltXWV0saW1wb3J0czpbQnYsdHFdfV19XSxudWxsLG51bGwpO2NsYXNzIG5xe31ucS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8bnEpfSxucS7JtW1vZD1abyh7dHlwZTpucX0pLG5xLsm1aW5qPWNvKHtpbXBvcnRzOltbQnZdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8obnEse2RlY2xhcmF0aW9uczpbcVksR1ldLGltcG9ydHM6W0J2XSxleHBvcnRzOltxWV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKG5xLFt7dHlwZTprXyxhcmdzOlt7ZGVjbGFyYXRpb25zOltxWSxHWV0sZXhwb3J0czpbcVldLGltcG9ydHM6W0J2XX1dfV0sbnVsbCxudWxsKTtjb25zdCBvcT17aWQ6VVMsbmFtZToiIixzdGFydF90aW1lOjB9LGlxPW1TKHtleHBlcmltZW50TWFwOntbb3EuaWRdOm9xfX0pO2Z1bmN0aW9uIGFxKHQsZSl7cmV0dXJuIGhrKHtkYXRhOmlxfSkodCxlKX1jbGFzcyBycXt9cnEuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHJxKX0scnEuybVtb2Q9Wm8oe3R5cGU6cnF9KSxycS7JtWluaj1jbyh7aW1wb3J0czpbW2lTLmZvckZlYXR1cmUoblIsYXEpXV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKHJxLHtpbXBvcnRzOltvU119KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHJxLFt7dHlwZTprXyxhcmdzOlt7aW1wb3J0czpbaVMuZm9yRmVhdHVyZShuUixhcSldfV19XSxudWxsLG51bGwpO2NsYXNzIHNxe31mdW5jdGlvbiBscSgpe3JldHVybiB6ayhYRywodD0+KHthdXRvUmVsb2FkOnR9KSkpfWZ1bmN0aW9uIGNxKCl7cmV0dXJuIHprKEtHLCh0PT4oe2F1dG9SZWxvYWRQZXJpb2RJbk1zOnR9KSkpfWZ1bmN0aW9uIGRxKCl7cmV0dXJuIHprKEpHLCh0PT4oe3BhZ2VTaXplOnR9KSkpfXNxLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxzcSl9LHNxLsm1bW9kPVpvKHt0eXBlOnNxfSksc3EuybVpbmo9Y28oe2ltcG9ydHM6W1tCdixWVSxqVSx6SCx5WSxXVyxkRyxBWV1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhzcSx7ZGVjbGFyYXRpb25zOlt6WSxIWSxOWSxJWSxaWV0saW1wb3J0czpbQnYsVlUsalUsekgseVksV1csZEcsQVldLGV4cG9ydHM6W3pZLEhZLElZLFpZXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoc3EsW3t0eXBlOmtfLGFyZ3M6W3tkZWNsYXJhdGlvbnM6W3pZLEhZLE5ZLElZLFpZXSxleHBvcnRzOlt6WSxIWSxJWSxaWV0sZW50cnlDb21wb25lbnRzOltJWV0saW1wb3J0czpbQnYsVlUsalUsekgseVksV1csZEcsQVldfV19XSxudWxsLG51bGwpO2NsYXNzIHBxe31wcS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8cHEpfSxwcS7JtW1vZD1abyh7dHlwZTpwcX0pLHBxLsm1aW5qPWNvKHtpbXBvcnRzOltbaVMuZm9yRmVhdHVyZShHRyxvWSksa1IuZGVmaW5lR2xvYmFsU2V0dGluZyhscSksa1IuZGVmaW5lR2xvYmFsU2V0dGluZyhjcSksa1IuZGVmaW5lR2xvYmFsU2V0dGluZyhkcSldLHNxXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8ocHEse2ltcG9ydHM6W29TLGtSLGtSLGtSXSxleHBvcnRzOltzcV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHBxLFt7dHlwZTprXyxhcmdzOlt7ZXhwb3J0czpbc3FdLGltcG9ydHM6W2lTLmZvckZlYXR1cmUoR0csb1kpLGtSLmRlZmluZUdsb2JhbFNldHRpbmcobHEpLGtSLmRlZmluZUdsb2JhbFNldHRpbmcoY3EpLGtSLmRlZmluZUdsb2JhbFNldHRpbmcoZHEpXX1dfV0sbnVsbCxudWxsKTtjbGFzcyBtcXt9bXEuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fG1xKX0sbXEuybVtb2Q9Wm8oe3R5cGU6bXF9KSxtcS7JtWluaj1jbyh7cHJvdmlkZXJzOlt7cHJvdmlkZToid2luZG93Iix1c2VWYWx1ZTp3aW5kb3d9XSxpbXBvcnRzOltbWFcsQnYsekgsV1csZEddXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8obXEse2RlY2xhcmF0aW9uczpbaEcscEcsdUddLGltcG9ydHM6W1hXLEJ2LHpILFdXLGRHXSxleHBvcnRzOltoR119KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKG1xLFt7dHlwZTprXyxhcmdzOlt7ZGVjbGFyYXRpb25zOltoRyxwRyx1R10sZXhwb3J0czpbaEddLGVudHJ5Q29tcG9uZW50czpbdUddLGltcG9ydHM6W1hXLEJ2LHpILFdXLGRHXSxwcm92aWRlcnM6W3twcm92aWRlOiJ3aW5kb3ciLHVzZVZhbHVlOndpbmRvd31dfV19XSxudWxsLG51bGwpO2NsYXNzIHVxe311cS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8dXEpfSx1cS7JtW1vZD1abyh7dHlwZTp1cX0pLHVxLsm1aW5qPWNvKHtwcm92aWRlcnM6W10saW1wb3J0czpbW3pILGRHLEhCLGpMLG1XLHpHLEJ2LENBLHBxLG1xXV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKHVxLHtkZWNsYXJhdGlvbnM6W1ZHLGpHLEZZLGJXLENXLFdHXSxpbXBvcnRzOlt6SCxkRyxIQixqTCxtVyx6RyxCdixDQSxwcSxtcV0sZXhwb3J0czpbakcsRlksQ1csV0ddfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYih1cSxbe3R5cGU6a18sYXJnczpbe2RlY2xhcmF0aW9uczpbVkcsakcsRlksYlcsQ1csV0ddLGV4cG9ydHM6W2pHLEZZLENXLFdHXSxwcm92aWRlcnM6W10saW1wb3J0czpbekgsZEcsSEIsakwsbVcsekcsQnYsQ0EscHEsbXFdfV19XSxudWxsLG51bGwpO2NsYXNzIGZxe2NvbnN0cnVjdG9yKHQsZSl7Y29uc3Qgbj10LmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybCgiLi9pY29uX2J1bmRsZS5zdmciKTtlLmFkZFN2Z0ljb25TZXQobil9fWZxLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxmcSkodXMoU3gpLHVzKHRHKSl9LGZxLsm1bW9kPVpvKHt0eXBlOmZxfSksZnEuybVpbmo9Y28oe2ltcG9ydHM6W1tkR11dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhmcSx7aW1wb3J0czpbZEddfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihmcSxbe3R5cGU6a18sYXJnczpbe2ltcG9ydHM6W2RHXX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOlN4fSx7dHlwZTp0R31dfSksbnVsbCk7Y29uc3QgZ3E9bmV3IE5yKCJbcGx1Z2luc10gUGx1Z2luIHJlZ2lzdHJ5IGNvbmZpZyIpLGhxPW5ldyBNYXA7Y2xhc3MgYnF7Y29uc3RydWN0b3IodCl7aWYoIXQpcmV0dXJuO2NvbnN0IGU9bmV3IFNldCh0Lm1hcCgodD0+dC5wbHVnaW5OYW1lKSkpO2NvbnNvbGUuYXNzZXJ0KGUuc2l6ZT09PXQubGVuZ3RoLCJDYW5ub3QgcmVnaXN0ZXIgdGhlIHNhbWUgcGx1Z2luIG11bHRpcGxlIHRpbWVzLiIpO2Zvcihjb25zdCBlIG9mIHQpe2NvbnN0e3BsdWdpbk5hbWU6dCxjb21wb25lbnRDbGFzczpufT1lO2hxLnNldCh0LG4pfX1zdGF0aWMgZm9yUGx1Z2luKHQsZSl7cmV0dXJue25nTW9kdWxlOmJxLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z3EsbXVsdGk6ITAsdXNlVmFsdWU6e3BsdWdpbk5hbWU6dCxjb21wb25lbnRDbGFzczplfX1dfX1nZXRDb21wb25lbnQodCl7cmV0dXJuIGhxLmdldCh0KXx8bnVsbH19YnEuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGJxKSh1cyhncSw4KSl9LGJxLsm1bW9kPVpvKHt0eXBlOmJxfSksYnEuybVpbmo9Y28oe30pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoYnEsW3t0eXBlOmtfLGFyZ3M6W3t9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W2dxXX1dfV19KSxudWxsKTtjbGFzcyB5cXtjb25zdHJ1Y3Rvcih0KXt0aGlzLmh0dHA9dCx0aGlzLmh0dHBQYXRoUHJlZml4PSJkYXRhL3BsdWdpbi9kZWJ1Z2dlci12MiJ9ZmV0Y2hSdW5zKCl7cmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5odHRwUGF0aFByZWZpeCsiL3J1bnMiKX1mZXRjaEV4ZWN1dGlvbkRpZ2VzdHModCxlLG4pe3JldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuaHR0cFBhdGhQcmVmaXgrIi9leGVjdXRpb24vZGlnZXN0cyIse3BhcmFtczp7cnVuOnQsYmVnaW46U3RyaW5nKGUpLGVuZDpTdHJpbmcobil9fSl9ZmV0Y2hFeGVjdXRpb25EYXRhKHQsZSxuKXtyZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLmh0dHBQYXRoUHJlZml4KyIvZXhlY3V0aW9uL2RhdGEiLHtwYXJhbXM6e3J1bjp0LGJlZ2luOlN0cmluZyhlKSxlbmQ6U3RyaW5nKG4pfX0pfWZldGNoR3JhcGhFeGVjdXRpb25EaWdlc3RzKHQsZSxuLG8pe2lmKHZvaWQgMCE9PW8pdGhyb3cgbmV3IEVycm9yKCJ0cmFjZV9pZCBpcyBub3QgaW1wbGVtZW50ZWQgZm9yIGZldGNoR3JhcGhFeGVjdXRpb25EaWdlc3RzKCkgeWV0Iik7cmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5odHRwUGF0aFByZWZpeCsiL2dyYXBoX2V4ZWN1dGlvbi9kaWdlc3RzIix7cGFyYW1zOntydW46dCxiZWdpbjpTdHJpbmcoZSksZW5kOlN0cmluZyhuKX19KX1mZXRjaEdyYXBoRXhlY3V0aW9uRGF0YSh0LGUsbixvKXtpZih2b2lkIDAhPT1vKXRocm93IG5ldyBFcnJvcigidHJhY2VfaWQgaXMgbm90IGltcGxlbWVudGVkIGZvciBmZXRjaEdyYXBoRXhlY3V0aW9uRGF0YSgpIHlldCIpO3JldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuaHR0cFBhdGhQcmVmaXgrIi9ncmFwaF9leGVjdXRpb24vZGF0YSIse3BhcmFtczp7cnVuOnQsYmVnaW46U3RyaW5nKGUpLGVuZDpTdHJpbmcobil9fSl9ZmV0Y2hHcmFwaE9wSW5mbyh0LGUsbil7cmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5odHRwUGF0aFByZWZpeCsiL2dyYXBocy9vcF9pbmZvIix7cGFyYW1zOntydW46dCxncmFwaF9pZDplLG9wX25hbWU6bn19KX1mZXRjaFNvdXJjZUZpbGVMaXN0KHQpe3JldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuaHR0cFBhdGhQcmVmaXgrIi9zb3VyY2VfZmlsZXMvbGlzdCIse3BhcmFtczp7cnVuOnR9fSl9ZmV0Y2hTb3VyY2VGaWxlKHQsZSl7cmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5odHRwUGF0aFByZWZpeCsiL3NvdXJjZV9maWxlcy9maWxlIix7cGFyYW1zOntydW46dCxpbmRleDpTdHJpbmcoZSl9fSl9ZmV0Y2hTdGFja0ZyYW1lcyh0LGUpe3JldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuaHR0cFBhdGhQcmVmaXgrIi9zdGFja19mcmFtZXMvc3RhY2tfZnJhbWVzIix7cGFyYW1zOntydW46dCxzdGFja19mcmFtZV9pZHM6ZS5qb2luKCIsIil9fSkucGlwZShodCgodD0+KHtzdGFja19mcmFtZXM6dC5zdGFja19mcmFtZXMubWFwKCh0PT4oZnVuY3Rpb24gZSh0KXtyZXR1cm57aG9zdF9uYW1lOnRbMF0sZmlsZV9wYXRoOnRbMV0sbGluZW5vOnRbMl0sZnVuY3Rpb25fbmFtZTp0WzNdfX0pKHQpKSl9KSkpKX1mZXRjaEFsZXJ0cyh0LGUsbixvKXtjb25zdCBpPXtydW46dCxiZWdpbjpTdHJpbmcoZSksZW5kOlN0cmluZyhuKX07cmV0dXJuIHZvaWQgMCE9PW8mJihpLmFsZXJ0X3R5cGU9byksdGhpcy5odHRwLmdldCh0aGlzLmh0dHBQYXRoUHJlZml4KyIvYWxlcnRzIix7cGFyYW1zOml9KX19eXEuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHlxKSh1cyhFRSkpfSx5cS7JtXByb3Y9bG8oe3Rva2VuOnlxLGZhY3Rvcnk6eXEuybVmYWN9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHlxLFt7dHlwZTpKbX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpFRX1dfSksbnVsbCk7Y2xhc3MgX3F7fV9xLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxfcSl9LF9xLsm1bW9kPVpvKHt0eXBlOl9xfSksX3EuybVpbmo9Y28oe3Byb3ZpZGVyczpbeXFdLGltcG9ydHM6W1tBRV1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhfcSx7aW1wb3J0czpbQUVdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihfcSxbe3R5cGU6a18sYXJnczpbe2ltcG9ydHM6W0FFXSxwcm92aWRlcnM6W3lxXX1dfV0sbnVsbCxudWxsKTtjbGFzcyBDcXt9Q3EuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fENxKX0sQ3EuybVjbXA9VW8oe3R5cGU6Q3Esc2VsZWN0b3JzOltbImluYWN0aXZlLWNvbXBvbmVudCJdXSxkZWNsczo1NCx2YXJzOjAsY29uc3RzOltbMSwiY29udGFpbmVyIl0sWzEsInRpdGxlIl0sWzEsImNvZGUiXSxbMSwiYXJnIl0sWzEsImV4aGliaXRzLWNvbnRhaW5lciJdLFsxLCJleGhpYml0Il0sWzEsInNjcmVlbnNob3QiXSxbInNyYyIsImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBVFlBQUFFMkNBWUFBQURydkw2cEFBQW95SHBVV0hSU1lYY2djSEp2Wm1sc1pTQjBlWEJsSUdWNGFXWUFBSGphclp4cGRoeTVjb1gvWXhWZUF1WmhPUmdDNTNnSFhyNi9pMkpyZW1xcm4rMVdpNlNLeFV3a0VIR0hRSURPL3VzL3Ivc1AvaHV0WlpkTDYzWFU2dmt2anp6aTVJdnVQLytOOXpINC9ENisvMUw5K2lyOC9Mcjc5bzNJNTZSM2ZyN1I1dWR6bUx4ZXZ2L0FYL2NJNitmWFhmLzZUdXhmRi9yNkJoZitqRUIzMXRmbngwSHlldnk4SHZMWGhZWjl2cWlqdHgrSHVyNHV0TC9lK0lieTlUZC9HOWJuay83dGZucWhNVXVuY0tNVW82V1EvUHVZUHlOSW43K1R2KzE5akx3djhOcE1LUVgzK2ZSMU1TYmtwOGY3NjdQM1AwN1FUNVA4MTFmdTE5bi85dFV2a3gvbjErdnBsN21zWDNQazYrKy9FY292cjZkdnQ0ay9oY08zRWNXZnYzRjd6UC95T0Y5Lzd6MzlYdnM4M2N5VkdhMWZFZlVtKzY4WjBoc1hVNTdlajFYK05QNFd2bTd2eitCUDk5TnZsdno0N1JkL2RoZ2hzaXJYaFJ4T21PRUdlNTkzMkF3eFI0dU56ekh1bU41clBiVTQ0azVhcDZ3LzRjYVdSanFwczI0N21tUE5jb3JmeGhMZWZjZTczdzZkTzUvQVcyUGdZbHJxdi8zai9xZHYvanQvM0wxYlV4UjgvelpYakNzcXJobUdWazRmZVJkTEVPN1h1cFUzd1gvOStWcCsvMFA4RUtxc1lIblQzSG5BNmRmbkVxdUU3N0dWM2pvbjNsZjQvRm5qNE5yNXVnQlR4TDBMZ3dtSkZmQTFwQkpxOEMzR0ZnTHoyRm1neWNoanluR3hBcUdVZUJoa3pDblY2RnJzVWZmbVoxcDQ3NDBsMXFpWHdTWVdvcVJLYm5WV2FMSllPUmZpcCtWT0RNMlNTaTZsMU5KS2QyV1VXVlBOdGRSYVd4WEl6WlphYnFYVjFscHZvODJlZXU2bDE5NTY3NlBQRVVjQ0E4dW9vNDAreHBnenVzbU5KdGVhdkgveXlvb3JyYnpLcXF1dHZzYWFtL0RaZVpkZGQ5dDlqejFQUE9rQUU2ZWVkdm9aWjFwd0JsSll0bUxWbW5VYk5pK3hkdFBOdDl4NjIrMTMzUGx0MWI1VzlWLysvQnVyRnI1V0xiNlYwdnZhdDFYalZkZmFYNWNJZ3BPaU5XUEZZZzZzZU5NS0VOQlJhK1o3eURscTViUm1ma1NTb2tRR1diUTI3Z1N0R0V1WUxjUnl3N2UxKzc1eS8yamRYT24vYU4zaW4xYk9hZW4rUDFiT3NYVC91bTYvV2JVam50dHZ4VDVacURuMWlleTdaWnk0M0k1eDFUTG50SmxhUzJYdUZYTUxhWmVRV3oyMXJucUJrOXZQTHQzSHhyZTZaNVlQbk1Na0hMOXlQYUhvUXIybWZPUHhFM2hmcGQwMTAyRnBrNTZ5TTQ2OVRyNjUzMVVZTFpjRy84NDhPN1JqM0xTc3VGZFk1dG8wbml1bGZYbmtsdkkrbnFRc0J3QmRmVzhtZGQ4V29tK3NaT285NTU3KzRvWWtLTDlsbmpaakp5RDVPSFZ6bTZXdVdjNWNaWmVUSnludnpmTzQyWWM2Um84UnJTR1NQbmxNUzIzbmNRbTFmSS9DeGFVZVRpM3dkZHNnd3RwMzdicHV5TVhhWWJKcnYxWUE3dVhUYWNiVDVkRGEzS3pEQ20weWY1VXhNMzNiNVFrOWhGMW40YVozU1JTRXMyOGZ6V0k2Vm1lSXlXeHM0MXErcmg3V09DMGFWekRpdUsvR1BCRVF3U21KQ09uK3hFUmFZOTdNMEViYnZoeml0bmF5b0xHRVBNSnN1MXBpa1FmZ05jdGw2WHNJMXRmTmxoMXozRzhvZHBLRndjTWh1eTZQNGxFVFFPSHVNNDJ5N0I3TlNDSU9UN3A5WHlZL0hPWDJRaUsxZlJaejFIWUVPWGlZZmtyTithUmx1L2hWZlIrUm1HUnR5VEk3blptb2ljZzcvdVp5RDhHOUR6azZFb05vc2FHUGFneDVaUktOY1laOFd6bjdpQXZQOWJQWktHWWtKdmNOUE5EMW5ZYytQQ1J3UFkxUXlIRHRhdFhjNnJYQ3hKZEpiWk9STWhlVmRMQithMHVSbXhJUmhjbGsyT2UwYm9jdzdpeUVKK1p6Vk1EeWdmK2R4TjJZZXNycnIvWFR5Tmk5V3BuNTlNMDAzV09OQlNZVkV2ZFY2QmF1SFBaS0RETldHeFZZS2JlNFdFY1NjR3crRTZFa3hzbkowQk05dEJLWXQ2QWJWejFPR2d1Z0lmZnZIRVQ2SkZvTDR3UWN6bUN5Szh6V1NLTWFod2ZIeUdHR2txWUdFTllCVG5PRGpNdGNaeEZZMmJZVmNBT1FJMklodDd1TnBTUkY5a1JDZENZWVBPVHJHeUEvVnJjdVltSGNYYStGblJseU9Zblp0VkRTM2p3T29kcHRTZkFrd1U4eU55NloxWGpBS2FCWXVaK3doYlVrRkFoYUEvUkpGdm8rUVFWYkF6Q3ViU2NGb3lka0pwTi9iaUhtSElIT3R3dWh0bmRPZTBtRXdRZkxHOGhSMHdnbEt4UkoyMkp4RTFDRGZONFRlcmRid0VER3lQVldkRHN0QUdPMkM4TGI2Qy9tUmdQTG1KaDRnS3JXenlTbWdmNEZGbGZ3ajVjSlVGRGtLa3dPa1hQbmNZMVpKZ0tQRVZhZ0c2blFvSlNJZGtzeGQ4VlFPMW15K1M0a21TMkZ4QllFVk5ZdWx5UWtZNUZRL2lFTWI2Y1FqdU9za3hKaWxGZ0RNb3p3OEtZQkdWRTZSaGl4MWhJOXQyOWtYeWRLWWp5ekxsWWhJMnVZeXBHQ2dlTTFBWGZlR3lBMDg5T2txSnRNZW1mMGkxd0hNRjYrZjI0a0pNaEZoRVhRaWpnQ0hiRU81QnY4dUMvNUltSWxCZ09NQ21vQ2cyUDdUYWlCM0FFQUJWdFJtSk1GSmlTenFHSEFLYTd1QVVPUEJwcDBCbVNRNGdVTklSTmZZUDFGVk56Yy9ENEFkMEdlb28wclV1MENZUkFCVHlxV3UyazRVQlR0dFhoV0l3Uk5yQXN4RGpKM3JkMVg3Y0lLaFd1VEtTQVNlU0JtSDBpWXl0V05zQWFoaHJtamxTV1ZXQ0x6MnpKRU9zWTlGUTZyd3ZiZWJWOGlrRXVrc2xseUxOQ05zemFBNktZSjN5MkxBY3kydVJnMHlaaFdtdWlVeGhVRUFMVlpJbFFQY01UVkd6UlBzdkxvbXhDY0Z4QWFyV1JDd3RhMUNFbTZUUGdRdXhpL2phNnYrQUFlR3NRaXF3MThJdHBZUjBKZU9Dd1dBVWxMWXVyMktzTUkwbzRuSU5YTjVUU1kraHhaOVhQNUZwZGNDbGVnc0VQSFlHSmg0VWoyVWxZZy9OcmxHbk1zSm1NalZMaFpZRVhUbG1JREZWbVd4SlNqb3pBT3hCY3EyWVBsVVU0M041SFUvWWFGdi8vczlFVUd0a3NtYXJvQWRPOExCWkVFWnlJbGRrSlE5VEJyUlI4Y1VyYklYb01QTWszTVNnT3pab0ZGN0JJWEZ6RllHcU5ackJ4NnlMTmVnRXNpbi9xR3VJS3VqaHpQSFRteVJIQ0VCcmxtRWpSOGU5VGxrT2RubGF0WlBhdW53d2ZqbmR3OEkxb1dkQWI3b3lNazQ5QmVxWEhQR01sbEVtT1VSc0FNTkV3MzVxaEFud0J5T2NnOGtET1RtMnY0WXdVaGdLSElCS1VGcENEUEMvcXh0UDU2VUdSc1lMOEZDUThnTFRtSW5wOHhLWkF1ZE1DSThzT1hmQU9vQUxrOERnK1Z6amFXcDBwSG5BZVI2Q2xtNWFUWmk1WFRGOW0vejE3RUoxbU1jb2w1QXgxTUplQU93Y3E5NEIyUlBRZ0pRaGpVSHVnVnBCeU1kQVc0QUdXVU9IUHRqZ0k4Ly9LeVhtM0tBd3h3MlFOUVFocVFOOEZTWC9ub0ViR1c1V0E5MGE3TXJYY0xXMlZvU2lJeUNla3ZySCtUeEtvRXpnMWkxMFpXMkRwRzhnellkM2Q0STI4bWdYVWhjcVJkajBOaWlYZVFCbVErUzVvQnExU1FDUFBGdk1JRXpHNUZvclNSK0loRzVCd2lPeXRtRTdDQXJKODdPVGlJTllSbHhLOXozNW1ZOTdvV0lnZm9aa2FnTVM3TTRJQUpjQzRkbnBtQmNvdUw2WWRIdHRla3VDQnNxdWVBSk9RMnF5bnhESHNzekFEWVRIREJCd2huSHBVdkNJY05tUFlKODJFSWdoSXpTTnd2aDYyL3FGc3doYWVUa0NJMFlDeFNIV3lYK3I5RFRtS0JUajBiOEVBNHMrNHNDeCtoYzUrUmFYdkRJb2hoWTdxMTVIeGo0SnBLWVdhR3lVRVV5RHFzUmt4MTY1M0Z1TUlXeFhWRnpFR1pDSTJUSlhoZFFoekFXNENwdUFIeVpSUm9OQVlML1JnUDI1RVJnWGtvOEdmZWltK1VRMGZBTGNLU2pPQ0JRYkx0OW43Z2F2Q1RzZkRjbmpTMTlBWlZpSG5NRm9NZjh4UkJHcWc1R0JEZmcrbDZ3MDFKd203MHUxdGdXRldnWENSekp2MlJOUTJHSjlZbmlMbXc1MFJySmtpTXlRVnAwb0pLa1RRcXNzMG5Kb1ltM0JVRi9FQzk2TVlFU1VORzgwenh6UkRBakd0b09MdXFkVitFMkVsZDZvSDVLS3JUbGZEMTJZVmZYdmoxTTg4Qmtac25DbGp5eG1JeVVGSzN5dG9OTFE4cXNVK0Uxc0I0SUZnMnVoOCtSQkloRDhrZVJEaHZ3UzB1RkFUMlUrYXBpcThObzFnRFZnWHJwZVVETTJGSWMwQ2V4OUMwcCtQQkw2SVJUYTRNK2Qyckt5ZEV5bnhnalIwQ2JrRWFNQWRWeXd1SnJMeGRzNDdzeFh6aVVnbG1GbjRsd0JrN0FkSGphSnNQYlMydXdHQU54b0JlMGFHUUY3QkdISGtVb2ljeFR3ZlJWRUVCQUlvaXY0cEZpZkR0S3c0bjRTMEdFOXdKZFZnUmJEdG5zOEI0aWFUS1FITVhKWUlXNnZJc1RLN2hpdURDblFGSkpneTloN2NHUzBHNXhGdkp2cWFFaDNJbVNiZEltYXFVYU0xeDM0cmNRUGZpSTlDSHZVYUZqdzNtc2hLQWd4aEg1c0hPQURrMEVGUEFxUjVWaGRmWDB2SnhaZ2VNRWk2YnFTTWZFUzlkdzdFYjVDTWxSN2tkN0RQSVY3SUJHN3RFQ1pmd0dnMEZIQWNUZmdqQTdiQSt0NkpNSTR4dGsrbkVUbHkvSUkyRGwwMVpNcjBVNG5VRG5TajlQVUg5S2prUDlWd0VKaTVoZ0crT3Q2QVlLdmlCYkNETU10UW1kc3prdXlvdGQrRXZzWDVRTUltUDZpWDRXWktPOVFlbE8yQVo4VHU1T0d3NVVBeWgrUVpSamd1WGJpQk5kRWwrR3c2S0M0MUVrbTlpT1pBODFhOVIwWnk0TGloQWhXMVdGb0lrc1J2RSt5aTF3Vmt6TjJSakJ0K3d0Z1NTS2d1NkczR3lBZU83aENsSFZvaGJvWWFpYkpCTlJ3QTI1bzdjUmxlU3UxYzJoY1ZsWmdGZzFwMHhtT1Myblp3TmFnR0lXQlhRRWlXRlk2N2dzRExaVFRDOE5WVkJ5SDl1TFdGM3lId01mVlJkMTBmSWxEQkRCYWFTNWxCUS9lN216alEyd0xaQzE3OFoyei8rcnZzZnZvM2dIWmkzeWRSVUtMczJTUkNNak9GRXZDcER5TWs0VHdEemVuVG80SHQ1dEJWNU51Z2FUTjk4WjRtMjhZZnBDV0pzZjg4a2ZTakk2Z1QrSWtUQ1NJQXl1cmJzQnRnNWVETmwvR1Z0d1dxMURaVjFnZytkamhDend6eXBOb04wUWI1K2dMWFV2dlFWMmdYMlJWa3RlVXlFVnBtcVFudkJKOCtHaWNkKzRUd2J1blFUMndENUJXdHlSQThOVkJ2UFF5RGpJOUFhcjhhQVJXQXNqdHh2Q0VWNEVHL2pzUkZIUWtRQ0UrZWgwVi9CS2tsRFhCWFFNT0ZYVVZwZ0ZtU25Za1p2cW03OGJrU0FkRVNuSTZUSnhiaE5QbkxqcGcyc0JKY2JNbWc5TTA5aU56eTI3Y0JGSFhaVThnUjl4M1NyYXNFaUJsYnd4U1g0SlcwWGtDbmtlSW1JeGJMRkgrVEU1Q21aS1dWRkdzY2pqM0V1NEFnRElZTFIyQ1VPcEEvS0RLMkxZdVk5ZXlxdXF5MzQ0RjVMQjhPbFM3eVBjV0xJN2kxRWRnRzFmbFZyT0ttR2pPOHBRV212Mm5pSU54Z3g0N1RRUXd2elhQd3dINkpRaW9zNDNCKzQrRDdnQlBCSTZYTlJyb0NJR2ZLb3FSSWNoRWc0aVFCaC9ZSmxuUFRLRUJsU0NIWURLaHhra29UR2ozaE93V3lSU3dnejNtODVTQmtmQ0ZBZWhWczJwb21YcWt6OVFFQTErQUlLQmZ6TlhjZ2NqVGtoTXE4S0NuNGtraGhBUnBYckRQQzh5Qnk4eEFGTVpCYk9aSmNxZjRkd3c1aWhDdEVoSkMzeENRWlBSb3ZiNTJhQU92Zm43ZkJLMFZjQmpWRndQSjJuSXc1c1Y3UVhERUpBRUVFb3ZnaHk0bW1OTWJKUzRhcllTcnFxL25zbVM0WDVneDhMZW42QUg3dE1CV2Jnc2ZkVzlSUGtoc2tOa0x3NVl0Y0JKY3kyYXF3TlQwR3VIZFlEcFRWeG1zd2ZBRlFCK29reElRTHc0N1YyOEpNMXhER2VjRkYzR2VyT3ljV0FCT011aUdnRUVLcHF5Sm1RYXdOSzZVT0tHbUlqRXJhUGVFOUd2YmhDWFRsM01wSjFOSW5maW9oQTJ5MWtQSzRSK1lJTTQ1MVFUdVhmQ0hPVkVaSmtQSlBVV2RJTE1HUkJySHlyN0FWNkhVNjRyVHBaS213dlZITVNiSGV4ZWd1Ym5VT3ZTT25FeHpFUVl5dDY4WkxIQ1NBTGlXK0NCQVZNanNZWm5zNldqYnZJQVVNV2NHTXlxd2tIa1FnZUVpcXF2ZkNvd1BpUmVjSlRkZVViZ2dMaU9vUUl5UzNUVkYzUXM3QWl2ak9mczkvU29tMjRDMHNhSVllTG9tem5WVUhIRURrejVxeDYrZXg1QXhlcVEvaFpnWkZ3dE5raCtjZzZUR050VFNWZjhOeS9FaDJvZytoRFBiK3FKdlluUU12R2NyRUVRN1Y0THllOXRodTRicHhEd0EyZ1ZWQkJYcFZuTXYvakoxWHJCODJEWnlGSVhpL0JlQkx1QlRXSFlxL0llaVFVb3dMOHhkam5xSnlBZEF0RitRRlFza1pqU0NWRHJVaTNoSEt6RElGZ3NqekNvOHJ3a3ozanF0VEh1RjNEaVdPRThheFlIdXlvU0lKVVZIWDU3clZBUTYzOVVCMXNUT3ZvU0RqR0JrNys2NHZOdFU4MGdJMkhHdWhBeE5yVlpzRUowbVBNSUJHS0NHeHlwZmRnTFM3UHRVT2RxZ2hweDhaam9WUjNOMlRocks1Q1krT0JDTG8xdnkvMVJTRXlEY2tXK0RmakIrOUlqZmpBbFM5QnVsNEVuYnhpNVNHWVF4ZUc5N1crcUN5Vzl2YUVrcis5K0U4Ly9lMUhCYnZ1NjZkYlRLbytCRlJ4cmR0dlpCQjhwdklNTVlrNlJHYUdxKzJkRmpzcVRvVm5ySStzWFJmVjE0aUZHQkZ6cXQwZTZkTktsdGpXcm9CQzhFck5HUUJ6dURzMGIzRDAxZzVFT3BYcHFxck40TFFyVjNmaUNvS2lvM3VnUmtnVTBUb0FjOUlyUkJGWnNpelBnek1XOHhUVktyQTJrSTU4SHNhNkU1a1dyMHNKc0FocnFCb0N2MGtoSkhTV2FvbS9HMWw0U3ZQb1ZjVUpXWHVGSmdFWUdmQlV4TVpma2grZm04WXowb2g0TEFoY29rSkpQV21URVBDejEyNnFhbzNaZ3lhRVFCeXd6Q0lFbmZhMnQwcFI4QXlhUEwzU2tYUXljcnFYbXlLWWx5T3d3cGZvWTc1R09hSkFtREVZdmdGZEx5U3V3OTVGV0VGVnRneUt4YXpCTFBUOGxtYkU2U0hyUzBoZVZYU2dIWW1lc1FZcklhako1dkZZVnNiTC9ZNkVZWnA0eHVhS2VSRW1hQ1pCbnlsODhHYWtZekR1Yzg2SThQQ0FYQkdWYm5obUtpZzlxeHl6bkJtQVBCSGpxRmtUbXNCNVZzaUoxeVF5WmNaaE9TZ1RFSUFXeUhRVmZ4b3d3a3dEV0VBMHN1NG13SVhVVEhQQ21vQ3RxclJra3JnS0xESTVHV0FUeHN0UGhxT1hWWkJDN1Rpc1FZQitONmtFWlJ0TEtoUkVScU8vRm9NbGdRRThucFh3dy9zeE5pZ1E5cTRxeXV3bG1FWW1abm1SSHNsOU1rZENTK1VWeEwzMkV1NitNQ0wzYkNRSElRajFRYVg0aEE1dXBKTHhVRUhpRjRhdXpLMDI2Z3hGempLRGc3V2NqRE1uNDdSWmh0c2srdkYzQ1AyTDVnQ3A0WjJsblFrMEhpRmZNVERjcTRvcVhjWjBxdXdudlFJOVZOZ1hsa2xoeTZGY1pET0crdzZicHlEL3NMcEhtdy9ZeUNDcjI3WTIrSFpQK3lMWUkwTUh1Q2RpaEF0Z0V3blpDVjVXeEFoQktLT1hDcEZhWW9GaVgzS1FpdVEvT1lLZVpRV1FQT3BBV054ODVZdmIzdW81V05JVGcwRjZtWkl3aXFvMWhRZ0pTeG1OdDBKV0Z0RXZjaFRXa3JQeWkxd0QxSGU4ZW1ORVJuVnQyMTdwcTRrTVpoNFlFcm9maEJ5bDk2WktWZGNtTWhJSTVRMHFJNXo4d1dBNGVWNjBDN09aNE1vcnpVVEt6anVKeTUyYXNPWUU3UndpUnJURkZBTEVLSmxlVlV5T2pjV2ZSQ1pNU3c2U01RUGdERis3Y21IUFgzY2MvdnpaL2MwM1htSFNFNXcvU04ydmN1VXZyNnBIakNkeXFreWtsTENXYzJ6c1hjS0dJN25nUXBBRGEzRWFHTnFUZ2xKSUFwL0FzUU5OVW1QVHRyK3hGancrOHZnUUZSMVFnTkd5N0dZQ1FsUmd5MHdTcnArOGdlSUlERHlzb1RwMjJFOGNXMGZqc2M0TkVHNTRmVGZsV3JWbkpqZFZ0RHRkRDdKTEdhaUV2ZDZ5akpzQjdKaWhzSGJ2R2RPaktobWtzeUNUS05VK0hIU3Y0bVF3d0dtK1RYK3l0V0VqTmhtSm9vRngxZ3MxZkZHVDd1SG5rTmZKdzNLZElHVmNtRDB1aE1iY0lpaE1pQm5XYThtS1NxV055dU9CbVZmS0hCMkROc1pUdHpXSWtSclgxUDRLdUt4U0xmZU9yazN5R1dtTzMxUHhrZmpSTmh6RDV6NEJMd3BtSXp1MVZjZlBBSDJxRFFOSFFObFJ1d3hRYzNLSkhxZ0ZjZUdscXQyVTNobHdXREZCZkhoRzFJZ0s5eVNqdE93YkFnbU9oMk0yVUxza0xGUUppRi9GT2JsMm1WVFVJWXpieHVFeVRMTlhwcVBGVkpBUFN1NVc0T0JscXBLUkZkclNhZHBKQ1VjNGdpaTczU25BTU1DR3hzR081MUs4NGFvWEQ4Zno1M2FzN1BISVNGeFlWRkJTRldoRm5odEd4WkJtTWdXOGQraUpnVTBHQjRIYXVyRmZBQVBNcG5JZlFzMlBpWHNhVUFiVXJGS0FxY2hVYnhsM2VoVTNWQXcxZExzakVNdFpTRVVpSitNU3h6YjhPalBVQ0lQSmRHT3d5cCtLbFh4MmYzckQrNXpiVTBFL0VWejgrVlgzZVRtckN3RTFMTXdIU0dTM2VWazg4c2M4NC9NYkVkcjBkTDVvaWVBZWlKbmJTWnBUbVNCQWlIeXBRL1VtVm8ybGVjME9zb21nY3VTeFFTNGl2aWdVSFNxL0JrL1VSdUlaQThDaXdRR21iWkVJaFZvNW9seXV0MGxzRUJCWFNKVFd5VzBydDhRY1RmU3piYWZTMWxGVHlXaVZjRlJSQ1c3V1B1a2NRbEdZa3JRUDVFd0k2UGtCQUlqMTRHbUdoanhBU0VPdUN6RUt3ajVmalFyS2hRa2k2azBiaFR3L2RBNnBRSnZFZzk1VENUNlVOTStMV1VyeUhLai9oaFFuVFJ6QWpPSkNaR1FZYTZtS2ZER0pBQk42Zld0UEVmTzhrdTJDTGtFOU1PY2dRNUJwU1ZQa1dERUxyWTZ0elFPeTVMeVo1NUg5djQvV244L3UvNHJXbitqUWhWNkFJTjVlaUJEN3Y0bW1EZmVlRWJCdjJCWSthL0RhR3BvenY2NGVkSzUzMGhqd040WW1MTWdXYVlwcmtPL3J1SlZVK3V6cFpLK2V5Ym04ZHVteTloQ0taRG82bmlraDVUcjZ3cW5KRE5nWnVCVDFUWGpWN0dBWGRXQVl3dnVvMVlEQUF5bjR1WWxuRGIxTDNsUVZZVkdDL2FJYk54WUMyTFBYK1lBeFJLUGFSZTBsaExsS3Y5TURSaDZVMkVXOVVvQUF4dXlxazJHczBodTJaOVpTRnBOUjBVY3NPSk1Xc1dUQXdsak1RRk43QlJKK3FXbWt5NldpQWZqT1BnVDR4QVZtK0JvSXhvYmg0OUNUQ1B2dXdCY0dweDNxSExzdUxxL1oxUWdKbXRYTmNzRmFEWHZLYW5BWFZSWFUwem0xU2RCVTVzWFRJMG1Td3pLamgwL3RYYjA2blZERXR2TG9VTVpSRlloSHIxZWx2ZkRLNHZCdlVMK05qT3dabDhsRUE2cEx4bUhJNzl1MmV3VngrYkpqcjNxdkhXdkVJYWxMOGlCOUcxQnZ0Y2JwVlFkZm9BSitBZnI3Q2tEM3Z3N2xueU5ZWXZRM0lmeEx4ZTJIRVA0UjRJZ1RNTEloWG10UmkxNk8rR1A4ZUN5TDljWktWNVF2RDQ5VnE3YXJIRGlDMEJQQlhxVWNuRUJDQTdJQTBGbU1XQWh0bDNPaHMydGxQVnZIZktwWEVnRWF1am9zSnJvWTB1RTJQVmVWWm1CTkVBakVTMHVYWkFXWENoc3A1UnJVTXR6eDlBb2RtQ2hPUk9ZR2FJOHdWOXhWUUdCK0pEZXAvSml2akZocVRNQ0RmUnpIM1JJV016MkNIS2dZVFFXOGhUaE9GUVcwc0dUb0R6K3h5bDBOZmFCY1VrK2IvaTRRRG43VVprZGhOUkhTWXpnVkdEZnordmJhMFVmaFU2WEVEQmIrNzlwemozSFhyZFJWcVZjRGtMU2U0aDZpR3JFd3dJREFaTVBQVUhwN1pTcDhSWWpTWGdKbDhsTjdudHlsbzVIMHM0Qzh1cW53ZkpnV0ZhdHRxUDJOVkdwZ2RuNmRZdkF5d2tyOWt0cTNTeUpuaUFPUm9KMkRBOTFqUWZFVEpLUnlRclk5WTcxNFhsRDRZcDNkWkxWbXVuNnBsUTJsc3hUejFZTUc2clVpc0M3U1hwMTd2cXV2aTFFQWFVbm1VQW9HeGM2VHMvTFplUXpLM2xQY2J6cTNFQ2ZtRk8vZUZrL3pRd3I4S2NMZFAwMkJQMldBKzY2NUp6RkFrQmIxZEJncUdYYUN0dmREOUxZd0hOQWlHTWVIb3ViVlg2RGQvUXUyQTNTWVpnVDB4dWdGbWUwQTZrMFlMMnJuSGlTREg4cFNHR3NuL1ZXZG1XV25NaWdzZ0RndlNkMkNXNW9XVFF4b0V2cEZFQmRHWk9INTMyUUVNb0RmVkhvbEpxd2tOVlduMVlkRHprRXBFdi8xcXB6ZUVZSmphZGRoRXBuVnQ2Rk95MnEzUklYY0FSbW45bzZJMnlFc1o5eXY1OGdWYlEva0dsbHBobll6U1pLbHU1Y2hHZ3IzSzRYbkFSejVCbUc2TXRrMmNOWXdpWFpReUFpOE9DRGd1QXBFUHRST2NORE9mVExSUk9CYytMcklEWGlDSkgwYWRITGd6akNaYXJDL2c4cjFYQmdzWmd4alBtNW45ZmlOT3pMZUQ4SERpNjlmUzVWRXlHRTh6NHAxcVFuQjM5WHdlUlBMSVFIUDhoWGIwSjE2TlJ3alYvRnRta3BwaUgxU0tsMzFjUUh2eHljbXpBaDRGV2JnNG55bnlnN0UrVkJoYkRRUHdpK0diOEFJcGtmb3JqSUQ2UTFXb2F5RERoUGNYdFJBaHNJMjZXdnRwNWRaQTA0VkZjZWpxWDlwa0NwcTA1N05aZGJ1OWxmeHZyM0pES3NYaUp3cGFnR00yaVZJMmtKSzVvV1FoNGYwOEE1b0JhV3BDV1BDNkFDbnF3aFRWby9waG1NQndTVWRwZE0xVVR2Y1hmWDZCb1l2aENTZUFvU2VjM3oyM0h0Vm5YUjF0Q3ByNG5EMG1EVWNFRWE3NHRYQjFqVDd0NDM0Zi96Wi9jMDMvbkVIUVBjUlZSRVdUS3VlOENITGtyU0IxWkJCVmFVaWdLMEFLT1I0K29XaGdEcmQ4TEZKN0V4ZnFBTlpvMi9xY0FuQ3lxdWlGcjJha2hIS1JITHlhaWxSNDJwR2plRmFNSGRvS0J3ZFlsNGRIT0ZEN1RndEorOWNCK0hpdFZtTzk4UjJ0L3FxVk1nUE5Xek85Yng4WGdnUndjTHhPRGJBQ3A5L2tDQTRjaUk1NGlDemYvNFllSnJxQXQ3STRsN1UxeFl5RDZ2K1gzZ0xndEttcVRRTGtTbzJKWkVKOFM2Nnprd1o1bGlubjFqOHJrTTROWWxRaDdZbFZpbmkrNXEzNnAyS2Z2U2FRZmJocUtyWXlKNWR5MmNYSWRma3VFbUJVUHZDZU12S1hXM1lzQkxZZnVZOUlIYU9PdXlnQWpYTFFabHhuMC9IRjNDR2NpZC84VHpadTJ6dzVGb3lKK3JnWGMxNFoxUTV3UjZwNkZqS1ZJc2hkcDgxU0RMQ1pLR0Z2WGJ6UXkxeitFdWZuSHlrUi9oOStyOVJXbG1OOGlnT2kxUFpScVozYmF0VUJjNGVMS2k2TDBFMWtrQWRPOUFaQ0J1M2s5S056V3Q3cTZrM2w4eGdtdFdsSGRRdWh1TzRBV1M4SW1Jc2pxbStEa0hrckZ1Z1RCZWEwemVienZmWExYSzBjdW9OcS85V1luei83UDV2aWZFOUw5eTN4QWo0Uk9RL0RpbURtQWlURVY0RElsNjN2K1JJbURINVpkT1JNZVNacm5lZTE5TS9uSURBTnI0RGFRTDlxMXVNREF0TDRxbCtkaGplUDhSckJuSTJYQ0N6MWlRTHB0cE1rQ0RFZm5OZUxlc0l5c0p0Tzl4MmNZeFJPOUhNY28zcXRjY3E0MzRhY1lQZ1ltSURaQlFHTE1GZFdTaHR2K0NFQVRaN0hlbllHcEJkNTE5QWFSUjhLd2pEWVF1RkFmYm1nbEdHNzVPMHEwNDhxTzl5cVhZR0d1c3d5WFJYeDBSSXU2QkdXZmpiQXFGOGNNUVdrQVRxNDlldWRvWkJzVFBjUGh2dU5KUFVHVis3dFdIcHB6YitIZTdFOTVuZ09TUURvMndyOTc1MEtJWG9RZGRsRlVSaWJ3ZmszV0JwcXFxV29Va3dNQk5ZelVHbGlOSWN6d0JyQU11Z016bE50QUxTNnBEMUt1WWExTkpLVUhKNWJOWk40RDVLTnV5dFhzUWJNcE9nMHgrWW1taWVhYjd2dUNUMnBUSXo0R01KbUczRTR0WDJQTXQ1WHU4ekNTaU5oc3IwT2dUME5udkZFVWdBNXNoVXBCM3Ewb3dhNTZ2aXF2VmxGNTNDUEZzTlNpVE0rbkRIVUNFclZKUm5Kd3F6Q3VyKzFWMmNIZXRvZy8xNkNab2ttdHFyMGl6L3FJenovYlA3VFgzbmQ5V2RIMTk3cFIzTUpkYXU3cFhSYVlBSnk3K0JYaWtWTW1mc2pBaTFRZndVc21ab245bE9RSEdvS0ZpMHAzTFFZSFY0U2UzUzFCYXJuWGZzdEF2cXdrZi9xbHFwWGkva0lkWmF4dVlNc1NiWEJ4NW0wZUdLaVVBQ0pra1VRRnoxUTNCT0xaT3EvamdTcFduL0hOcVdKQXZpQUxSVWxaa1lhbVFGL2RXb1JGamhQR1RSMUxhaFJsa05IVFdGWmpqekhBY1RsWTVHclZqcFJwQ0NtK1I0bTdlOTB3N1ZKeHpHOTlFa1pROXNGWS9DcE5TbVBXbFpCTGRoa0tyeG9QMzk4QWRpcW5vV0s3eVpZUEhhbndzSlZPSEhkQmYxSXZZZ1p3dW5RYTJEL0sxSFVKdlUyNXZHYXlsL2JieERYYmg3YVljUXlGaVlrS0YyT2dGV3JYSmpUQ05jcTYzUnF0YW5UdlFXWnd3OG9xRG02K0RSOWdTdTRTSjhIbVRob2RZTlFXWW9QZGpHQ1pZTENJSkFvYWt5VFNaS20zcW5iVTBVZG1aQTZ0QU42ajVnK1JFUUdSTkhITVUrSUNwbVQ3M3RpR3F6dHFPMk45b3BVWEtQVUlhZWRYNHRxV1c5ZFo5ZjR4M3FLZXJmQ1p5UTcwRmdDQzNSbUZ4Q3g0VlcvNXlwMWxGd1NVaHNJL2JXU1NZam50WHBpK3lkYitXbTltNlV6RldWVlJ3TE1oblFqeGsvZ0hKWEd5eXBPdS9DSEVKSWt1L2RhWThMVFlHczFvYks3QzNxekp0d2oxemd2ZTBsSzU0bmdRVTZtWWNXNnRsWG5Td2RQSWZPa0xGc0h1NC9Gek9vR3JKT3dPbUlVMUVMNjZoSzQ2UGpCZHRRUUhVUDFNM1N4dUxybitTQm5vRUlrbFRBaXNzcUhrMDFQWU1XMHVPTUNRT3BwblVnbm9qQllDTm1vVDNlcGZYc0M3QmNHNVZtekI3NENBQ0dGcHdLcGR5Zmh3cmEybEhKQzhHRTZsVmp2NDVZUnBEMW5SbHAwa293M0lycVFkd3FNUFNrWXpYdm9JNUxCRHJXZzJBR2pEVFFGZFdzaVl3anUzbHN4V3NpS0ZGK2hiUWhqeit0bkJlVjNsRVEyN1RwaFJWZHFhdEJ3VlRvZ2oySzlpQjErby9rMDZteXJoYWNQeHc2ZUovZHJ5L005THVkMi9FM3I3T2VxSnVHbDNPZWh3R3NWSVpZdGhJY3FiTmhwWXlrVXdGRVhLNXFHQXlxZE1FM3BpTmpxRkI3dS9OcU1EYlpCdnhhOE5ORDE3dkwvY2s2TWpqMU9FaUJialZvUytzT25ZOVVwSVdHNkQxRmlLQitWQWxFd3BwL2RLZDhKV1lqL09FSkxrbFRuZW5EMGxpb1IzWkp2VzFCRnErVC93RktVNnBsakJqeUJCdEU3c3Z2dWxXSWEvUnBtOEFOWVVGV3ZnWGRFcGtaOEVDOElna200cFVNVzhHdnJqT01ZYXNyQ0FEUTBTQUFEMzJFYmh6S3BsNVFRS0FuajAwRUdHTXg5VnV5Nk9yMXdIbGxIV3U5d042Vkt1OWxJS1hxYStVTndKUmpQZFNUcno2bnJhMFMxVUVLUU9WNVo1L29SQkRRZ3A3Z3lOb2lPV1dscG9TMnBXaGJKWXNPUWp1OGJxaGRsbk9oWDh0V1I3anN2Rnc3czZ6ejZJUzJDRncxQWVndnFXYVRYNmRSd0JLaTBPZnJpWWhadmZsSmhqQXh2MXEyT3NMTVY4M21yOU9DcEFRbWN0b2RKVVRlYlIxbkpLbTZqblF3ejZCV3l1YlVkcmluQXFkbWdIcngrSk1sQlpzZ1YvV0E0THEzZlB4bEZDU2Nlb0o3ZjNRRVovS2Rxak9YSXpwQ1U2azZuZ3ByYWpTS2tuMldkZm9MMnBpdnNxNU5nMlpiQWd6M1BKcGtxK3FGRWFRbDZkVVBTVTR2OVVsai9PUFY0UXhGL2xUZm9qYjgwSHVHeG9NVFpvU3BKMitwWUhsOGpXRkxUV2JjOGJVRU9mSmJKMTZBRVNPSmwxcEljQVozRTBYYTF6cWZRajVDT3dlVUtnWXBNOWNYczR4ZXJWRERWZUVlZ25MSTZsZHEwakdmNUYrUE9nQ0t3UENBVFh6dDE4aEtLT2tkU24wSFVPTWVDUmZlV05Ld0paRkx4ZmZQdEhHSVVlNzBDME9ISGdLRnJPT0hPb1h4cmltMkFMTlJPR3IzVVJkTWZtMzdPZ0JVTTRiUGZXN1pzRHM2akR0MUlyUEtQbzFJTW5ENXc0cnNxZTBySXAyNWI2bzJ2T08vK00ycmZqRUdpdlNBKzYrT2hiR3NDeXR3R2ZSZ0RVR0pGZ09HTFJsOEFIZXkzTWp0dzgrbEYxczZqd2xwNDRhSWFsWFEzSzA2SnNQVWtpSjg1SnVIUkFPUGp4Nm9pek1CSHlHMk9vUzlQQXlXc0d2VnA4NG5JYWdRTmI0NmozTWsrSEJyeUUxQ2ZhcHd5OUJFdDR4WVBRVjRrSUpPUHlwUUZCMFAxVzdUaHZrQlpsUjhFbGNXTG9SOWtsYkRxZjBCbG45Q1kzN2lnN3RDWGJDWXlKYXRWbGxoRTZGQko0ZVpFeDN6RzJBR3l6KzBWMkllb0YwQmtVMHVCektBbjJMd09wYW1rM2g0U3ZEbzZLd25ZWTJoVklPS2dFMEt0S21BWFZ0VzZUY0RzV1NjamtzT25ocEpvVUtqam9TK3ZnZlVTSEpFQWg1Nlh2Vm5EMEMzNlZpZ05JeUtGc0Fxcm5vZG5SYnM2dFhJMWxxR0owYVh6SHRPU3NlWFJ5bHV2aE1ES2VvYWdWVTY3OGpNdWtYblVMWVJFc2dpdUpqNXlmbWRrOUZPVEkwNHlxc3lzN3F4dFJQc0pKU2hBclZTVjBtRmhlUFdyNjI1NnQ3UHFobnZaRStiQS93MXFidEtuU2lpSnBBY3lPa2dJdUh0VkRjSlJ5YzVNc0dUbVlaeUZFOXhERFd1RVFvb3RLUTZkYml2WmZNcGJWVEc4VHJZcitvMWRKeW1XK0NsS3ZQQUhnWTBKamtxNExFdWRVMlRyb3I1T0tzaVZoeUtlckRQZm5aV1I0eUJST0tDdDhIUzFGUSs5UXNJTWhuOGRqOVZxaVBSWjFDSHRhb1hxQVVKVDlQdnFDRFJnSE5XaTRUU3IySkk2cUVFYWhrZFdWUlAyYS95QSs5Y0RXUU83ZkhMdnBPNEJFL1NNYnNkbWVXVnRCc2NNSlVIWWEwVEkvNkMyVk9IWC9Ec3dPVzRiNGNCTzRvOE5rblFxOU5HTnBOYTNsL2ZLTm1nTTJNQTF3RjhWVkt4TEFSdEZhYkZlQ1BCQ2srUEwwbUszdTVmK1g2dDE0TkNXSHkwQjZScXFQcnhkVjkxM00ybnhuWHZ0OEh5NiszVjRNWUFqclF5bksvRGpKTHdFUnRRNitmNHE5cml3TkpmeTRkcFpLVVpNWVgxdFQ3R1VjeThaVldoYTBvSkJwQWtMY0dpdWc2NURHOEkrdDBOREV2S2YrbjNWRFMxMzZvU0VnUk5iWVhQK1Q0Y0hjZ1QxZEdpWHNKUWxCZkkzWGNtMGRUT05QeCtIY1U2VG4zZWhvcllweDZOaVNUZjJ1a0RNSnZPVm1vZlVJQ3ZYN1lCWlZicFZjRU9VZTYxSjQ0Q3VNeXhtMTd0T1BoczlCYjZCQXA4OUlPS2FXckMwV1pQbDNnRjE4QTRSTmRhOEJLbzYwZFBIUytONkFFbHN0TzJWd096V2FEWHVRdHZYMi9JMFVTR0tOUGlpam9CSDFHRW9LRWVHUThFOFJIeGFxV2FSQmpMa1Z3UlBML3FCYTVOT3h3NGYvMCtEWlYyZWxFbEFSYUVFb1BNVTlwUGhPRmR1Vi9mWDdVQTJUMEJXM2o5SmloU0xFMUNGOXV1T3ErbDN4UVE5QnQrNXRhdnBqQVUzMmc2RTN1Zkw3MEhVYmtNUzBWMHhLNytvL2RUcjU2b0k5ZjhHeFJsVGhFK1RTNVNwZThoUVlwcTRPblJ2VjNTUUQwL3JFWlFYd3h4YWc3dW5Jb1FKQ3BmcUtYNjg3c2ZqbjZ6Q1c5YThBc29kWmR5R3JRaDlYRWRXK2NLY2xUYnNrNEdBYTZPV2ZTTVl1aFg2YWh6WDRwMWZCMGdJTWFBQ0l1U25UbXJaQnJIZk16NzJWZmxXZFJ2dEl3bmRYM2ppZkRxYW1OcUtNQUlUT3R3SWlLVm1OK1cvWTZDZkdndmFnOTZwUFNNNEg2U0Z5eUR3TlUwNS9DQ0FkRFdXWkNzTGR3dWNhSGZ6aFdDVHFxb2s2UWhNVmo4aGJoQytwYWpYeUtoQmhCMVdPZ2IyTGdWbkZ3cTRrNlRxczR0cG5hdFhaWitwWWM2NS9WZHNhNU9DNkpsbU9oY2xVZ3JhYWNDa0dvK2VUMmpBeEszMnM5WDBMbU5kRmpOZ1JObnBwcnlROGR3MVN5Y1ZDTXNQREpKa0xYRnFaTnhPakx6MTYvTWNnaUU5ZmVWSVJ3ajV0VDlOOUN1dGhqZzZ0MTRBQUFCZzJsRFExQkpRME1nY0hKdlptbHNaUUFBZUp4OWtUMUl3MEFjeFY5VHBhSVZCVHVJT0dTb1RoWkVSUnkxQ2tXb0VHcUZWaDFNTHYyQ0pnMUppb3VqNEZwdzhHT3g2dURpckt1RHF5QUlmb0E0T1RvcHVraUovMHNLTFdJOE9PN0h1M3VQdTNlQVVDOHp6ZW9ZQnpUZE5sT0p1SmpKcm9xaFY0UWdvQjg5Q01qTU11WWtLUW5mOFhXUEFGL3ZZanpMLzl5Zm8xZk5XUXdJaU1TenpEQnQ0ZzNpNlUzYjRMeFBIR0ZGV1NVK0p4NHo2WUxFajF4WFBIN2pYSEJaNEprUk01MmFKNDRRaTRVMlZ0cVlGVTJOZUlvNHFtbzY1UXNaajFYT1c1eTFjcFUxNzhsZkdNN3BLOHRjcHptTUJCYXhCQWtpRkZSUlFoazJZclRxcEZoSTBYN2N4ei9rK2lWeUtlUXFnWkZqQVJWb2tGMC8rQi84N3RiS1QwNTRTZUU0MFBuaU9COGpRR2dYYU5RYzUvdlljUm9uUVBBWnVOSmIva29kbVBra3ZkYlNva2RBM3pad2NkM1NsRDNnY2djWWZESmtVM2FsSUUwaG53ZmV6K2lic3NEQUxkQzk1dlhXM01mcEE1Q21ycEkzd01FaE1GcWc3SFdmZDNlMTkvYnZtV1ovUDhhN2NtTHcwWHh2QUFBQUJtSkxSMFFBL3dEL0FQK2d2YWVUQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFCM1JKVFVVSDVBY0NFQjhmQlZ4SHRBQUFJQUJKUkVGVWVOcnNuWGw4Vk9XOS85L1BtUzA3a0lXd2hNVUVBUkVFcEFXMEltb1JwWXExaUZXdy9rVEZ1clNpWGNDNjBOcUNYYkQxdXR3cVdtcXhyZEQySXJkWHNiVEk5WXBMQ3lpaVV0a0RFUklnZXpLVFdjK2M4L3orbUhNbUo1TUppeUlrOEx4ZnIvTUtaQ1l6a3pOblB2bnVYL0g5cjEzQW1xMVZSSDE5R1RieFp1WmQrQUczejF0RjBSMnJXRHR2R0ZETGlobmptTGRoSElzK1dNNzBQS0Q4R2E2NDlGSEtMMTNNOW1jbjA0cWZGYlBHTXUvTjBTellzSndiaXV6dlJ5bGZzWUNIRnIvQzVqMEJmSVZuTWY3bWU3aW1iZ0YzL0M3S3pHVWJXVGllTGtrNEhPYkFnUVBVMU5SUVYxZEhZMk1qVFUxTkJBSUJXbHBhQ0FhRGhNTmh3dUV3MFdpVWFEUktMQllqRm91aDZ6cTZyaE9QeDVPSFlSakpyNFpoWUpxbTg5L0NORTJjaDVUUy9pcWtsTmdISUZLL0FrZ3BoZlhTazE5VHZpZDI3ZHBWWEZCUTBOdm44eFc3WEs1aVRkT0tORTByRUVMa0F6MkFQQ0ZFSHBBTlpBR1pnTmM2WElCbVBaNEpHRURNT3NKQUNBaEtLZjJBWDByWkpLVnNrRkxXRzRaUnArdDZkU1FTcVRsNDhPREJrU05IMWxpUEl4MUh1LzhMSVZKdnM3OEhJSVVRN2I0NkRxbHBHa0lJTkUxTFBhVEw1Y0xsY3FGcEd2YS8zVzUzOHF0OWVEd2UzRzQzaG1IUXZYdDNmRDRmUHArUHpNeE1Nak16eWM3T0ppY25oOXpjWExwMzcwNlBIajBvTEN5a1o4K2U5T25UaDh6TXpHTzQ2dnlzbXp1Sm16ZFBaZFhhK1F4RGtZcDkwYmVlc2hXekdEdnZUVVl2Mk1EeVZtWDZISWl5YnM1WWJsNVZ4QjJyMWpLdmk3MDdzVmlNQXdjT2NPalFJZXJxNm1ob2FLQ3BxUW0vMzU4VXRGQW9SQ1FTSVJLSkhGSFFuR0xtUEV6VEZMYkFwWWhaR3lHenhja3BVcW1DNWZ4L1RVM040SnljbkVGdXQ3dE0wN1JTSWNSQUljUUFZQUNRMFVsT2N3VFlKNlg4eERUTkNzTXc5c1ppc1QyTmpZM2xBd1lNMkowaWNQSXdndGRPQUczaEUwSzBFVHBOMDJTcXlGbkNsaFE1NStFVU41ZkxoV0VZNU9YbDRmVjY4WHE5K0h3K01qSXl5TWpJSUNzckt5bHdlWGw1ZE8vZW5mejhmQW9MQytuVnF4ZDkrdlRCNi9VZVZ0QzJybmlSbDk1Y3hZcFZsUXhiOENyTGJ5aFJLcFlHZHkzUWFsaHRaZkh2MWhQakxDNGNYM1RjQkd6ck0zTlpWaktQK1ZOTDhObmZMVi9CNG5VQjZEdVZTN3VZcU8zZnY1OURodzVSVzF0TGZYMDlqWTJOK1AxK0FvRkFVdERDNGZCaEJVM1g5YVIxbGlwcTZjVE10c3BzWWJQL0tLVVJzamIvMzdWclY4OCtmZnFNOEhnOEkxd3UxOWxDaUxPQnN5RDVWblJtTW9EQlFvakJ0cEI0dlY1eWNuSXdUVE1LYkROTmMyczhIdDhhRG9jLzNybHo1OGZqeG8ycnN5eEZLUk1uU3RyL2Q0cWNsRklLSWV6N0pBWE9NSXlrOVdaYmM5WWhPaEk1cDdDWnBvbW1hWGc4SGp3ZUQxNnZsM0E0ak0vbkl4UUtFUXdHYVdscElSQUk0UGY3YVdwcW9yR3hrWWFHQm1wcmErblZxeGY5K3ZYcitMTzA2Z2wrdDc2SWNUYy95Wk5LMURxMjJJWmNjRDJUSnc2amlGbzJyMXZEQjFWUWV2TlNWczRmVDk1eGVZcEtWc3lheHJ3My9mUWROWkdKbzB2QXY1WDFyMnhnVDZ3dlZ5NWV5Wk9UaTdyRXlhcXVybTduZGpZM055ZmRUcWVnUlNLUmRvSjJCQ3ROMkc1bmlxQ0pEcXl5ZGhiWnRkZGU2MXF5Wk1rWE16SXl2dUJ5dWNZSUljNEZCcDltMS9RdTB6VGYxM1Y5czkvdmYvL3JYLy82Kyt2V3JUTWQ0cFlVT1NHRW1jNmlTMmZOYVpvbTAxaHh1Rnl1TmlJbnBTUXJLeXZwbmpvRnp1djFKcTIzek14TXNyS3lrdTVwdDI3ZDJybW54Y1hGU3FFK3JiQjkvNmF2c0c3OU51cklwYkJzTkZOdm5zYzkwNGNkSjFHenFXWDlpMCt3ZU5rNk5wZFhFYUNRMHZHVHVmbWVlN2hoZE9jWHRlYm1acXFxcXBKV1dqcTNNMTBjVGRkMVlyRlkwa0pMRTBjVHpqaGFHc3RNcEltWDJWYVorTjczdnVkNitPR0hML0Q1Zk9kcG1uYStFT0k4SUVkZDFtMW9rVkt1ajhmajZ3T0J3TWE3N3Jwci9WLys4cGQ0R3FFem5hNnJRK1NjY1RtWmFzbWx4TitrbEpLTWpJeDJzVGV2MTVzVXVJN2liMDczdEtpb2lGNjlldEczYjErNmRldW0zc1hQR21OVHRLTHJPdnYzNzI5anBUVTFOU1d0dEtPSm82VkxEdGlDbG1LZEpkMU1oMFdHVThpa2xGcERROE93bkp5Y2kxd3UxNFZDaUltQXV1cVA4ZStVYVpwdjZicitkblYxOWRzREJ3N2Nib2xiTzZ2T2FkSFoxcHZ6MzNhQ3dTbHlVa3A4UHA5TWwxeEl0ZDdTeGQ5czY2MTc5KzV0ckxkKy9mcmg4WGpVdTZlRTdiTng2TkFoS2lzcjJ5VUhuRzZuTFdxMmxXWmJhRWNyYUlaaEpOMU0welE3RkxOUUtIU3gxK3VkcEduYUpHQ0VlbmVPSy8rT3grT3YrLzMrTndvTEM5OG1rY1UxVThXdUk1R3prdzIydXdyZzlYcVRGbHhIQW1kYmNMYjFab3ViMHoxTlRTNlVsSlRRcTFjdjlZNHBZVHQyZ3NFZysvYnQ0OENCQTFSWFY2ZE5EaHlwZkNQRjdSUXBpUUduZFNaU0xMU2ttSVhENFNsZXIzZUtFR0lLMEZlOU15ZUVLc013L2hFSUJOYm01K2V2cGJWY0phM0lPV055dHFzSzRIYTdwYk04eEJhNUkxbHZxZTVwYm00dWVYbDU5T2pSZzRLQ0FvcUxpK25UcHcvOSsvY25PenRidlZ0SzJJNk8vZnYzSjYwMFp5d3RYWElnTlphV3hrbzdrcUNKMUpoWk1CaTh4T2Z6WFNXRXVGS0pXYWNRdWRWTlRVMnJpNHFLYkV1dWpjaWxXbkgydngzdWFUdUJjN3ZkSFFxYzAzcExUUzZreHQ1S1Nrb09rejFWS0dFREFvRUFuM3p5Q1ZWVlZXMnN0T2JtNWpZMWFVZFpaQ3RzMTlOMk53OWpuV21OalkzRGMzSnl2cVpwMnRXZ2FpMDdLZHRpc2RnckJ3NGMrRnRwYWVsV2g4QVpEcEZ6eHViYVdIRjI5dFFXT1V2WVpEcjNOTlY2YzlhKzJabFQyM3JyMjdjdkF3WU1JRGMzVjcxRFN0amFXMmwyZ2lCZHhyT2pFZzViMU5JSm1yTkx3Q2xvdHBpdFdyVXFZOUtrU2RlNjNlN3BRb2pMMUdYWWRUQk5jMDBvRkhyNXFhZWVldVhCQng4TUEvR09SQzZkd0RscjROSUpuQzF1SFpXR3BHWk83Y1NDc3Q2VXNBRVFDb1hZdTNkdnV3U0JiYVcxdExRa1kybEg2Qnc0bktBSnA5dloxTlEwSWpzNyt6cE4wNjREMUpYWXhmOG02cnIrMHY3OSsvODZhTkNnYlE1WDFVaDFWUjBDSjQ4a2NCMWxUdTNZVzA1T1R0SjZTMDBzbkhIR0dXUmxaYWwzNW5RVnRvTUhEeVpkejVxYW1qWUpnaVBWcFRsRUxhMmdXUVcxYmR6TlVDZzB4ZXYxemhCQ1hLc3V1VlBTaWx2WjFOVDBVbUZoNGV0U3lyZ1F3aWx3aHRPQ3M0WE9HWWRMRmJpT1ltL3A2dDVzMTdSbno1NUoxN1IzNzk2bi9YdmlQcDErV2NNd0tDOHZaOSsrZlJ3OGVERFpFdFhjM0l6Zjd5Y1lEQ1pGTFJxTnB1MGVzQVhORVVkTEsyZzMzbmlqYThtU0pUZTYzZTRiZ1F2VXgvL1VSZE8wYWZuNStkTmlzZGc3TzNmdS9QTXR0OXp5MHNhTkcrT1dtMnBJS2R0bFZnM0RrS1pwU2szVDdGaXNkSllFeGVOeDZTd1hzajBFWnlqRS9xTnIveEVPaFVMSmRxMnlzakpjTHBjU3RsT2RwcVltOXV6WjB5YnI2V3lKT2xLeGJScTNVemk2QkpLQ3RtblRwdHdSSTBiTWNybGNONkZxems0djkwZUlMMlZuWjMvcFgvLzYxemNqa2NqeVpjdVcvZVcyMjI3elc5WmJ2Q09CazFKS1I2RzJVK0JrYWd1ZXM5ZjRTQUpYV2xwSzkrN2RsU3Q2cWxKWldVbEZSUVdWbFpWcGE5UFNGZHNleGtwTEcwUGJ0bTFiajdLeXNsdGNMdGN0d0NEMU1ULzlNQXlEeXNwS0Jnd1lZSCtyUEJLSi9PR1ZWMTc1ODNYWFhkZG9XM0QyWWNYZ3pIUXhPR2ZkbTlNOVRTMExzWXQ2MDlXOGxaU1VNSERnUUVwS1NwU3duVXBJS2RtNWN5ZWZmUEpKc3VEMmNGblAxQTZDRHR4T084dXBTU25GaHg5K21IZldXV2ZOZHJsY3M0RXk5ZkZXd3VZUU5wczk0WEQ0OTMvNjA1K1czM3JycmMxSEVEalQwWFNmMnJrZzAzVXNkSlExdFF0NkJ3d1l3T0RCZzdHNkpaU3dkV1VDZ1FDN2QrOU94dE5xYW1xU1dVOW53VzBIcnFkSWJZVktzZEswK2ZQbnUrYlBuLzlObDh2MVRWVDkyUWw4WXc5QjlRNW9xSUJ3VStJQXlPeWVPUElIUXZFUXlPM1ZtWVROL2tPN0xSUUt2ZkQxcjM5OTJlclZxMk9Xd05raVp6b0V6a3kxM3B3QzUvRjRaRWY5cHM1cElmbjUrZlRzMlpQZXZYdlR2MzkvQmcwYWROclV2SjJTd2xaZFhVMTVlVG43OSsvbjRNR0Q3VW81VXVOcHpvQnNPcmZUVGd6WVdjNUlKSEs5eCtPNUV4aW5sT1lFMFZBQnU5Y2x2aDROK1FOaDBNVEUxMDRpYkE2QjIrajMrNWQyNzk3OUZTR0VuaUp3N1Z4VVJ3ZURUTFhlVW12ZVVndDY3WktRM3IxNzA2OWZQOHJLeWs2TGNVaW5YUEtnb3FLaVRaTEFucHZXVVR6TmFhWFpnVm1uMitsSURHaWhVT2dTcjlkN2w5WHlwRGhSYlBrclZIMTQ3RUs0c1FMNmpvSVJYKzFjMW9RUVk3dDE2emJXTUl3cmEycHFsdmJ1M2Z1ZlRvRkxUVExZQ1FacldJSk1tZDluLy8rb2tneVJTSVJ3T016QWdRT1ZzSFdWZU5xT0hUdllzMmRQc2pYS0hqUFVVVHl0QTllem5kdlowTkF3T0M4djcxdENpRHVVeXB4QTRoSFk4RUxDL2Z5MFZIMlFjRmZQdlE3Y0daM3ExOU0wN1N1OWV2WDZTaXdXVy9MeHh4Ly9mdlRvMGVVT2diUExSQXpBTkUzVHRQZGIyTmxUdTJYUEtXNnBJbWNud0ZMRkxSS0pNR1RJa0ZNMjduWktDRnM0SEdiSGpoMVVWRlMwNmZlMDY5TTZpcWVsV21tV3FDWGR6bG16WnJtZWUrNjV1MTB1MXh4QXpXRSswV3hZQ29IcTQrUEd2djluR0h0VHAvdzFQUjdQN0ZHalJrMEpCb1BQVHBndzRmZWJOMitPQWJwbHZXbTJpeXFsTk8xeDVsWUNTenFISzZRS1hMcFNFV2ZZeFJhM1kxc2tvNFR0aE5EWTJNak9uVHVwcUtoSURvUjBUdVZJVjU5bS9SVnppcHJUU3RPa2xDSVVDazMyK1h6M0FsOVdDbk9TM00vaklXcE9jZHZ5UDUzT0xYWFFOeXNyNnlmdnZ2dnV4VFUxTlV0NjkrNzlsaEFpNW5CUEJhMDlxVExGZ25NS25FeTNGQ2lkZTJwWEFRd2VQSmdlUFhxY1lzTG1YOEdNVWZQWWtIc052L3Z3VVNaMm9SZGZYVjNkcHB6RGJtSlBWM1RyS09VUXRubWV4a3JUS2lzcmV4VVhGOStyYWRwM2xMcWNKQm9xamoybWRyUnVhZCtSSnpTaDhDbmMwNHQ3OWVwMWNUUWEvZlhycjcvK3V5bFRwaHl5M0ZQTktYQ0pYVFRDN01oNmM3aXFISTJiT25qdzRGTXFxZEJsTGJiOSsvZXphOWN1UHZua2syUTVoN09USUYyU0lOVktNd3pEYWFWcGtVaGt1c2ZqK1E0d1JxbkxTV1RYRzYzLzFnL3gwSS8vd2JJR0dEZmo2eXlma0FrWVZINjRpWWRlM2N2NnlnaGtaak42NUFqbVRSL0NhS3NIUExwL053dFdiT0dWdlg0Q1pGQTZ1RDkzVEIvTDlOM3JZT3pBVG44S3ZGN3Z0eTY3N0xMejYrdnJueTBvS0ZndGhIQlo3cW51aUwwSlovd3RqY0IxR0h0THRlQnNnZXZ5VTBMODVheDdaUm51U2FQbXNRY2c4QkkzbDY1ajVrc2JXVmkybFJjWFBNVGlOVnVwaXZyb08yd2lOODlmeUMyajh6ckZheTh2TDJmMzd0MUpVYlBMT1ZLYjJEc1NOV2ZHVTBxcFZWZFg5eXNvS1BpdUVPSXVwU29ubWNBaGFQd2srZCt0cjI5a1JVUEt0ZnZ4djVqeGJEbFZlQ2dkV0l5dm9aWU42OWN6b3g3V2ZtY0lKYzE3bWZQNE83d1doc0xpWW9iUnpJYXRPNW4zZUl5OEg3cVlmTmFoazFMbmRxd0lJVWJuNStjdmpzVml2M25ublhlZXYvamlpeXVGRUpyRFBZMWp0ZkxaazBUc3pLbFQzSnhiejV6TGcrellzbk80UXl3V282eXNLOWFabDdOaXpod1dyZG1HMzVlTGUrYk1DL25kc2plcDhwWnk2UTNYY0dtUm4zVVB6V0wrS2o5OUw1ek9IU1hsdkxKc0ZRdG4rY2xidTVUcEozbXAxUGJ0MjVPRnQ4NmV6OE5rUG9XejE5TlJsNlpKS1VVa0Vwbm04WGkrQjN4QnFVcG5pQzlzYi8xMy9RNFd2TnBJTE9VdVc3ZldFczNMNXNJckxtZnBoQndJN1diV0Q5N2h6YjM3V0I4YXd1U0tmV3oxWk5CMzJGaFczbm9HUmJUdy9LS1hXRmhSeGFxOU1MbStva3NJbTQzSDQ3bHQ0c1NKWTJwcmF4Y1hGUld0c1dKdm1pVnF0dlZHd25DVHFkYWJTSW5Ea2VxaU9qZW4yUUkzZE9qUUxuYmhSS0hvR3VZdm44cmt2Qlc0YjVsM0phOHRlNU1xMzJobXpyK1RpWlR6VEhrZFVNclVlZk9aTnl6S3BXY3RadFdlWFBMOE9MWXJuMWlrbEh6ODhjZnMzcjI3emNKaWUydVVQWmtqSlVtUUttckplTnIyN2R1N2w1V1ZmVi9UdEhsS1RUb1I5UlhXUDJLcytlc0hiS0FINHdhMnNLRkNUOTVsL0xWZlkyTzZBVkFlTDNrZXlCczVrYmRHcG50d0Yza2VTendIanU5U3AwVUljVzVoWWVGemtVamtpVC8rOFkrL25UMTdkcU5sdmVtMGpzZ3liRUZ6eHQ3c1FhZE9jVXRkKzVnUXVTaE5GZS95NXlmMlVqanJQM2xzNXRsZHFCeGtHTlBuRDdPTnQzUXh0akltWGptS0o3Wjl3T0lyeDdKbTFIakdYM29OTSsrWnpMQ1Q1SW5xdXM3SEgzK2M3Q1pJTGJ4TkxlZXcwdG1wV2M5a2dpQVlERjdvOC9ubUNpRW1LeVhwWkZndFV0RzltMWl3S1VMZkN5WnljM3hkRzJHenFmMXdFd3ZlYTZaMmJ4VWI0aGxjZU8wb0pqczMxQjNhelVPdlZsRlpmNGoxRlJwOXg0emxqc0ZBUE5wbFQ0L1A1N3ZuNXB0dlBudlNwRW5QRGh3NDhGMHI5aGF6WEZNaGhEQVNobHByM00zcG1xWk1Fa2tJV3p4QzNkNHR2TDUvUHdmOEp1Nk1Ya3lkdklNUFA0eHo5dGxuZDhtMWYybVRCOFB1WE03YTBTdFl0dXcxMXExZng3SkhYMlBaNzY1azhkb25tWHlDeFMwU2lhUVZOYnZ3TnQwK0FvZWxsdXA2YXJGWTdIYVh5M1VmMEVlcFNDY2swZ3cwOC96eTNWUmw5dU9KcTN1UnR5TDlYZjE3OTdGcWt6L3huN3h1REN0T3FjZnkxN0ptVXdWMUFPNXNocDNSTGJFSS9MTVUvSFlDTkUyYk5HREFnR0Yrdi84LzgvTHkvZ3hvbG51YXROeHdKQlpzajhleTNvVGxzbUthVVJxcnlxbHRDcU9qNGMzcnlhQnpoelAyM0hNNFM2dGc1ODZFcTNyMjJXZVRrWkhSdGM0UmdNL3lVYU5Sd0wrZVorYk1aZEZyZWN4OGNpbXZibHpMUTZPQXVuV3MybnhpWDF3d0dPU2pqejQ2YkoxYVNseE54R0l4WWZkOFdtYTJacHFtVmxWVjFTY2Vqei9tY3JtZVVLTFd1YW45MTBZV1Y4SzRxOGN5OVRDVHJzdXUvaHA3bnY0R0crNDlpN05DMVN4KzlsK3NDVG51TVBnOE5qNTlFOXNXWE13MUJVRmVXL0U2aS9ZYXA4cHA2cE9ibS92VGFEUjYvNnBWcTBxa2xCbldSOWtMZUtTVUxpbWxabC8vVmd4TjJONU1KQklSNFdBejFRMGhvcVlnbytnTVJvNFl6QmtGR2VqTk5SdzRjSUNLaWdwMjd0ekpSeDk5UkRBWTdHSVdtNitJdkZ3Z3NJWUYwMlpSdm5BaGViVnJXTFZxSFZzclAyQnlTUzNyeWdGdkdhTk9ZTElrRUFpMHNkU2NMVksyb0RuSGQ5dXVwMVdmMWlickdRd0dKL2g4dnZ1RUVKY3EyZWprWkJpcytMOERCSUFOeTEraWRIbnJUUnVXLzRVSis3L0NxNWQ1cWRWZDVCWGtVT1J4VVRSNEdOZVViR05oUlMwYnFtRmlmZ3VWWVFOZlhqZEtzc0JYMEorWnc3SjVxVHJJNXAwdGNNN2dVK1owZWIzZTJWT21UQ25kdTNmdk0yZWNjY1o3VnR6TlRpd0lJWVJobXFacEwzaHVHM2R6aVc3ZE1tVkxNRUs0ZWpjYmF6OGh0N0F2WldjT1lxakRYYldQczg4K3U4dE1CM0hqbThnOTg2OWs2NEkxN0NrdnB5cGF3cDFQTHNYLzBBSit0KzUzTEk1NUtUenJVdTZZdDVCYlRsQlRVWE56YzFMVTdHYjIrdnI2ZHU3bllUS2Z5WGhhTkJyOWh0dnR2aDgxL0xGcmtObVRzalA3Y0tFajVGRmJlWWh0ZnBQYzRtTEdueUZZcy94bDVtMkZjVE8reHZJSk9SQnE0SU1HQUMrRm1WQzUvblV1L1o5R2NzZGN6RnUzOWllUE1PWFZZVUFqTDgvYjZYcEdqNE5yZXNtQUFRTUdORFEwUEpXZm4vK0s1WnFLRk5jVVo5ek5Gam1QSjFOMEwrd21QZWdFQTM2YWF6L2hnOW9xYXVPWGNxSFYyZURzVVQzNzdMUHAxcTFiMTRpeGxVMS9rclhUbmQ4ZXo1M1B2c3FkSitFRk5UVTFmV3BSY3lRSnRGdHV1Y1cxZVBIaUgyaWE5aUNuMlc2SExrM0JjQ1pmZXluT3JNNzYzLytabWVzakRMdGtJbytlbDBtdHB5K0ZXL2V6WWZuTFRIb3ZIMTkxTGR2OGtIdm1FS2IyZ2hMUEVNYXRXYytHVGV1WVZGMUVtZDdNaG1vVDh2b3hjMWdtRkE4OTVVNmJFS0tzUjQ4ZXZ3eUZRbjNHangrLzVLT1BQdEljMXB0dWlWa3k3aGFQeDl0a1RLWFhLM01LZWxQWUcyTEJJTzVvTTQyTnliS1JOc2ZaWjUvZDZVZU9kNm9QZkdOajR4RkZMWjM3bVpva09IVG9VTCtDZ29MN2hSQ3psVkowTVlxSEp1YXVIWWFpTDB4a09adFlzR1l2NjNkVlEyWWU0eTRZd2Z5ckJ5VW1GUlFNNGRsN1hTeGFzWVUxZTZ2WlFBWm5EVHVMTzZhUFlXbzNvR0RncVhyMjNKbVptZlBlZSsrOTR0ZGZmLzAzbDE5K2VhVnR1Vm5XVzl5K1k3cWtRdUtMajh6Y0FqSmxDODNONllYTkZyZk8zRi9hYVFaTk9rWE56bjdhb3VhTXFhV3gxT3pXS00wMFRSRUlCTDZRbVpuNWdKcVoxb1hac0xSTjk4RnhwY2NBR0RmcmMzbm9veDAwZVNJd0RHUDF6cDA3Rnc4Yk5td0xFTFd5cGpxUVhBK29hWm9VUXBqV2RGNXA3VlNRenBIajlrVGU3dDI3VTFCUVFLOWV2WklES3p1enVIVUtpODNwZnFhSzJ1SGNUNnZmTStsK2hzUGh5N3hlNzRPb3liWmRtek12Z28wdmZINlBmUnJnY3JtbURCMDZ0S0N5c3ZMcGtwS1N0NnhFZ20yNUlZVEFtVlN3ZzI2dGxsc3lGc2ZoakovaHc0ZDNTcmYwcEF1Yk0xSGdGTFhHeHNhMEV6cFMzTStrcUVXajBSbHV0L3RCNEV5bERGMmMvSUdKS1J6SGU4SkhKNS9zOFRuRTNjYjI2ZE1udjY2dTdxbkN3c0svU1NtZFNRVWRSMUxCSVdEU2NsM2JxVms2Z1JOQ01IejQ4RTZYVURpcHd1WXM2WERHMUd4Uk81ejc2UlMxV0N4Mmg4dmxlb2lUMXZDbE9PNk11QnI4aDQ3ZlRMWWVBeEtQZVpvaGhCaFVVRkR3VUZOVFUwNzM3dDMveTJHNXRRbEYyZUlXajhmVGlsdEhvbVlmSTBhTTZGU2xJQ2ROMklMQllJZUpnalIxYXNLNTQ5TXBhcnF1ejlVMDdTRWdRNm5CS2NhNFdjZG5pbTZQQVREbSt0UDVUQloxNjladGZrdExTM1pPVHM3dm5XNnBVN1RTaVp1ZFhFZ1Z0RlJoMHpTTkVTTkdrSjJkM1NsK1llMWtQS216VGVvb3NwL0N1VUhLanFrOS9mVFRIbDNYZjZocDJrSWxhcWNvN2d6NDBoMEpGL0t6dUovalpwMXl0V3VmZ296czdPd0hRcUhRN1ZkZWVXVzJvMVBCQTdpdFRnV1hhWnJDTUF6aDZGSWdHbzBLKy9NWURBYngrLzAwTlRWUlgxL1BvVU9IcUt5c3BMeThuSTgvL3BoSUpOSXBmbG5Yd3c4L2ZFS2ZVTmQxL3YzdmY3Y1pQZVMwMUZKaWFzTGV5RzRuQ3FTVTR0MTMzODM1eWxlKzhpTk4wMzZnUHYybkFjVkRFN0d4VUpQVlMzcVVWdG81VjUvUUtSNVNTdngrZjZldThmSjRQT2RObXpZTmw4dTFkZDI2ZGZFT3BuZklOSWtEa2VxU09wcnMyeHhGUlVXNFhLN1RSOWlrbEd6WnNxV05xS1hiSkpVNmRzZ3BhanQyN09neGRPalFIMnFhOWwzMWlUK055T3dPSmFNU0l1ZkxTVGhLbmd5SVdUMk11Y1dRWFpnUXNpR1RvUFNDeE0rY1FMcUNzQUc0M2U2eDU1OS92aWd1THQ3K3Q3LzlUWGRtUmpzU042Y0FPdXZaVWdYTy9scGNYSHhTUng2ZDBCaGJSNzJmVHZlem81SU9LYVVvTHk4djZOKy8vNE5DaUx2VkovMDBKYmRYNGxBTmNwOEpuODkzKzIyMzNhWjV2ZDRsdDk5K2V5MjB4czRjVnBsaEdJYnRhYlZKS0RqamE4NDRtOHZsd3Q1YVAzejQ4Rk5mMk96SnR4Mk5IanBNOFczU1VsT2lwbEFjVjNHNzdhYWJiaUlhalQ0M1o4NmNCcWRsbGs3Y2NHUkxPeEsyVkhFN1daTjRUNGdyV2w1ZW50d21kZkRnd1E3SGVhY3I2YkJqYXBiN09VZGRqb3JPU2xkeFJWUGMwakVqUjQ2VVFvaC92L25tbTRabGpiVnpTMVBFcmwyOHpYa09uTzZweStVaVB6Ly8xTFBZOXUvZmY5UXh0WFIxYWs4Ly9iUm41TWlSRDJxYWRvLzY2Q2dVeDUrTWpJemJIM2pnZ2ZpbVRadWVYYjE2TmVrc045TTBEV2d0QmJIS1JlVGgzRkdYeTRYVnBuWEN0MTk5cnNKV1hWMmRYSkdYdW5qbGNERTFaNTNhN05tekg5UTA3ZnZxOGxNb1BqOHlNek8vdFdMRmlsaDJkdlp2YlVGemlKdkVXdEpzK2FiSm1Kc1FRanJkVU9kaHU2TzJ1SjNJdmFXZm03RFpHOXFkN21kSDQ3eFRZMm9weGJjUHFzdE9vZmo4eWNySytrNGdFSWprNXViK2tiWlpVcGxheEd0L1h5U1FIY1haYkt2TkZyY1QxVFQvdVFoYk9CeHVJMnIyNHBYbTV1YkR1cC9XS085a201VFZVYUJRS0U0UU9UazUzMmxzYkF6MTZORmpwV1cxU1ZKaWJKYTRPUzAySVlTUXRxZzVCYzYyMkd4aE8rZWNjOGpNek94NndpYWxaTWVPSGUxMkZLUmFhdFkyS2VjU1kreUZLOUZvZEliVis2azZDaFNLRTB0RzkrN2Q1MVJYVndlTGk0di9MaFA5VjIwKzMvWlhlMkNsWmEyMXNkeWNGcHZUSmZYNWZJd2NPZkp6cjNFNzdzTG1GTFhVN0tlOTk3T2p5YmVtYVlwd09IeVpOYVZETmJRckZDZUhvcUtpb3J2Mjd0M3JQK09NTS82Wllyblo4VGE3OUFPSG9BbE4wMlJIY1RaYjJESXlNajczTXBEakttd1ZGUlhzMmJPSHFxcXFwS1dXNm40NnVncElLZXZRQW9IQUY2eDVhbXIwa0VKeEVoRkNET3Jmdi8vdG16ZHZiaG85ZXZUSGx1V1duTnNtaEdoanRaR1NJVTJOczduZGJ0eHVOMTZ2RjYvWFMwWkdCZ01IRHV6OHdsWmRYWjBVdGVycTZxU28yZjJmRHZlelRhdVVjNXgzWm1ibUE2Z2hrUXBGcDBEVHRDK09HREZpOXNxVkt4K2RObTFhbFVQY3BHTjJHNlpwbW5hbU5KM1Zac2ZhbkJsU2UwTHY1NVVwUFM3Q0ZnZ0VrcE02cXF1cjJ6UzFPMk5xNmNvNnBKVGlsbHR1Y1ZrN0N0UTRiNFdpRStGeXVTNi80b29yYW9jT0hmclk5dTNielJSeHN6T24wdDRxYjR1Yk01bGdXMnoyVjYvWG0zUkpzN0t5UHBjNWJwOVoyS1NVN1ZxbG5KWmF1cWIyMUF6bzRzV0xmNkFXcnlnVW5ST3YxM3ZqdSsrK1c1T2JtL3Q3UzlETUZIR1RxWmxTVGRQYVdHN3BTajk4UGgrWm1abU1HalhxdUNjVFByT3c3ZHk1azMzNzlpWExPbzVtVFY1S0J2UWJxbFpOb2VqYzVPVGszRk5kWFgyb3VMajQ3NENaeGkxdEUzT3p5ajZTNG5hNFdGdFdWaFpEaGd6cFBNSldXVm5acmxhdGcxWXAwbVZBZzhIZ0JHdVpzZHI3cVZCMGJ0eEZSVVYzYk4yNjlkQ3dZY1BldDZ3ejIwcHJseW1OeCtPeW80TGRkTEcyN094c1NrcU8zMGIyVHkwb1RVMU5hV3ZWT2hBMWtiS2xYVHR3NEVBZm44OTNIMm9BalVMUkpSQkNsQTBlUFBpV0YxOTg4Y0FOTjl4d3dPR1NKaTI0bFBxMnBFdWFUdGljNHBhVmxVVk9UczV4R3lEZy9qVDdHdzNUWk0rL3QxSzVldy9WKzZ0b09GUkRjMzA5Z2FabVF2NEFrV0NJU0NoRU5CSkJqOFNFcnNlSTYzRmhHcWFRTWlGc1BUM2hlYUpwMzZYcWNsR2NuRStwQmk0UGFKN0V3RXB2dGpvblI0SEw1YnA0MnJScEZjQlR0TWJiVE5Ja0UxTEZ6WmxJY0xxa3prVEN5SkVqajh2MDNVOWxzWlh2L1lUS3FvTlUxOVRSME5CSXM5OVBTMHVRVUNoTU9CSWhFbzBTamNYUVk3clE0M0hpY1NNeE5saEtJU1ZhckhyMzdVS0l1OVJsb2pocFNCUGlVU0FLc1JZSU5VSkdMbVRrMmQ2VW9nTXlNakp1cnErdnJ5Z29LUGdyWUhTVVRCQkNTRHZlbG1xNU9kMVJwN0RsNU9Rd2VQRGdFeTlzQjZ0cjJGZFp4YUhxV3VvYkdtbHE5aE1JdEJBTWhRaUZJMFFpVWFMUkdIcE1KeUZxY1JJeE5TbWtsQ0pZdGUxQ2w4dDFuN284RkoxTDZBd0lONEVlaHB5ZUNZdE8wU0g1K2ZsM2JOMjZ0Y0tLdDVrcGg1UlN5b1MyQ2VMeGVESTdHbzFHNlVqY01qTXprK1Vmdlh2M1BuSENGZ3FGK1dSL0pRY1AxVkJiWDA5alV6TW9NaklCQUFBZ0FFbEVRVlQrUUFzdFNWR0xFSTNGaU9reDlIaGM2UEU0aHRFNmdtajdodi90N3ZQNTVnSjkxS1doNkpURW8rQS9tQkEzbCtkemY3cDE2OVoxbWwvOW9vc3VPcGE3OXdadUF2YVNpTEcxRVRaQVdpVmRwbUVZeE9OeEdZdkZSRFFhbGZhMnE1YVdsdVMycStycWFxcXFxcWlvcUdEbnpwMlVsWldSa2ZIcFc4V1BTZGoyN3R0UDFjRnFhdXRzVVF2UUVuUllhckVZc1ppT3JzZUZyc2N4REJORFdpNG9pTEl6Qm54ZndHVDE2VkYwYXN3NGhPb1R1eFZPQUdWbmZyYSt5ZkpkMndIdzlmM2lwMzZNYU5XN0FGU2QrZVN4L05nbFlUTzJiVkQ1OTM5TFlxdThnWjFJQUNrUVVrZ3BNRTFKWEVMVWdHQmNhQ0ltTldKb0lvSkxoSENKSUc2WEg3ZXJDWStuRG8vM0VBY1haWEhHR1dkdzVtMGZmYXJmNTZqdDdmMVZCNmlzT2toTmJSMzFqVTAwK3dNRVdvS0V3bUVpNFVSY0xSYUxFZE4xZEQxTzNEQXdERk5JTXhGWGl4emNPVTNUdEhucVU2UG9NcGJiMGE3Nk80M0oxTHpmZW5mZ2p5ZVFtTVRqQTd5V3dlU1NTSmNFVFNLRmlSUUdramdtT2dZeDRrUmxuSWpVQ2Nzb1FUTkt3QXpUYUFTcGkvdXByYTJscHFibVU3K3VveEsyUUVzTCt5c1BjS2ltbHZyNlJwcWIvUVJhV2hMSkFxZW9XZFphc2w3TnlvQlc3M2l2bjhmai9wNjZEQlJkaW5CeklzbWdPTHhQNnVrKzY5bWlXYjA3RURkTmdtWTZ4RTJYcGtpS0d6b1JxUk9TVVZyTUNINGpUR004bUhSUFc0eFB0NEQ1cUZ6UlQvWlZjYUM2aHJyNkJocWJFM0cxWURCTXlKRUJqU1dTQmJhb1lab1NLYVdRU0swZ3Y4ZDNnUytvUytBVTh0YWFZd1NlMjBIa1g5VVlWYUV1OFpwZGZiUEpPSzhudWQ4Y2d0Yk5leFEvSVJON1MzMjVKKzAxZi9MWEozbUdhL241MWIxUDl0bkQ5L09iS0xpaWpzWXhMeE9PdGQ0aUVLTXZ6UnZ4ZFdyNXRlMlNTakNFTTVrQTBrUktBeE1CYU5JUUxpR2tTMnE0aFlaYnV2Q1lVYnpDamM5d296VTNrNW1aU2FVZVlhanIyRVB5UjdUWTlsY2RwT3JnSVdycjZtbXdrZ1dKREtpenNWMXY2NEphR2RDRUM3cHJ1aXJ0T1BYd1AvRXh3UlY3dTR5b0FSaFZRWUlyOXVKLzR1T2oveUU5ck43c284Q25lVzUrYitCUEpqZ3NOaS9nQWR3U3FRR2FCR0ZDV3BjMEtuWENVcmRjMGdoK3Y1K21waVlPNlUwYzBCdVByOFVXRElhb1BIQ1E2dG82R2hxYWt2VnF3WkF0YWpHaWxxakY0M0VSTjZ3c3FPV0NWbjY4dnBmSDQvNk9ldHRQUFNML3F1bXlyejI2cWY3bzd4eVBkc25mc2ZvZmovRFMzbUlLM0g1YUdnTzRoMDFrY0dBTGU1cjhOSWVMR2YrTm16aTM2UGhtZlh0NXV0MEVmSnpPYXBOSUNVS2FTRk1BQmxMR3BTazBZVWczY2FKb3VIRVJsaTY4cGhzUkROTGMzRXl0SGlWSHk2QzdLNHNzelhkOExMWkV2VnBOc2w3TkZyVkVFVzRzVVlTYkdCaHB1YUFtcGpSdEYxUVVGeFhkQzR4Uk1uQnFJUU02WmtPMHk3NStvemFNR2RDUDhwZnR1akcyZU9HWCtPcnM3M0xydHk4blkrTmE2cys5Z3h2dWVKQ1pZLzI4dmE3aXVEK2ZRSXdDcGx0V213L3dTaXZXWm1tTklHRzFZVnR0Y1dtSUdBWXhhUkNWT2hFWkl5U2poRUloV2xwYWFJd0hxWTM3cVlvMUhCOVg5RkIxTFFjT1ZWTmIxNUFvN1docG9TVVlJaHdKRTdXS2NHTkphODJ3dXd2c0xLZ0lIZGd4V2RPRXN0Wk9RVVN1cDJ2L0FvWkU2K3Evd3hIeGtKMmJtMWdha3BsUGRrNHgvZnNsZnVlYzNFemlrYy9OeGY3bUgvLzR4M1BUdUtSMmxsU2taa25qR09qRWlVa3JVMnJxUkNJUlFxRVFUVWFJK25pQVEzb3pOYnIvc3dtYkhvOWJMbWc5RFZacHh5ZnZyT0t2ZjkvQTN1WW9rVmcwVVlTcjY4U2pBZEhVN0Nlc3QzWVh6SnB4amN2bjlkNmI3ckUzLy9SNlNzKzdseGNQcE54UTl6SXp6cHZHUSsrbGNSMys3eWVNdldrWjVVcFRUaU95eVBqMUxmVForVFd5Q3gwWDdJVHp5Rjk5QzcxMzNrM3ZkNjZueHpmN3Q3bUlqM1M3NHZPblQ1OCtNd2VJN2hrT3E4MWpoYjAwYWNYYVpFTFlFdUxXSmtzYUowSkMyTUxoY0tJRUpCNmlMaDdnb041SVhCcWZYdGlTcFIwTmpUVDUvYlFFZzBSMEEwdy9GZVhWaEdLNm5RVWxiaVJNZGRsYWlLczk5L2pQN3dhKzNPR3p4ajVrMGE5ZXAvYW9YbUlMYTFaOVFNblVTeWhUMTh6cFl4Vk9ta0MzUzFNYTAwdkhrUC8wQ0Z3Yi8wbjlWWCtrN3BkMXVPKytuTzVmeXpxNjJ4VW5CRTNUSnE0KzR3ZFRIVmFicDFYY3BJdWt1TFc2cERwRzRwQnhZbEluR28wU2lVUUlHaEg4Um9qR2VJdmxralorT21GcjlnYzRjS2c2VWRyUjFKem9BdzJHaU1STnBBRFpjcENxeG9qZEJ5cmloa3k0MTFJS3BCUU41UjhNZHJsY2N3NzdyRG5aOE1aL3N1aWZMVWQraFhWdjg5SjdnNWg1VVM5MXhad3U1UFluNzRFQkdLOVZZanBDZWU1SlorS3AzVW56STl1SmJXOUUvKzgzYWRuZ3dqZXA3MUhkcmpoeGRITmwzZlRINHR2N09jV050clZ0d2xuYjVyVGFZc1NKeFdKRW8xRkNNa2FMR2FIWkNGRWZiNkU2M2tUQUNCKzdzRlVkU0hRWE5EUTJPVnFtd3NUaUpyaTdrWjhoQ2RmWEVkVGoxdURJNUtRU0laRmFYcDc0MXVabFB5bVpObmt5cFdNbU0vYWFlU3o2Wjl2QW4zZmdWZHd6R1Y3NjZYTnNQa0lNdXZhTnY3UDVDNWN6dWZCdzRyZVB6VnYyNFZmWFV5Y1RxQjU0Si9URjdTd0RHM3NSUmUvZFFON1lqa2JUdVBEY1BZSE11azAwLzNmYlVwTDQwdi9pME9WdkVZdWwvSWpQZFZTM2QwVUdYRDNuVTlXd0ZWODJqMXN2c3djM25zbVZjKy9tSEd0UHNmdWNPL251Tjg0NXhrYzBpUDdnZVE2TWFGdkRkaGo2bnA4eitHcFNFd2xDdUt4RFF4TkpxODFJSkJLSVc0a0VYZGVKeFdLRVpZeVFHU1ZnUkdpS0I2azdveS9oMzF4RXo5ZHZTaDVGLzNGbXUza3NiY285cW12ck9GUlRTNTA5dGNOcW1RcEhvc1RpRWt4QlpsRTNYQWVhOERlN1JKYTN0UThVaVFnZjJINUozYXI1ZDh4Nk5zWU5QMXZDczROaDYvS2ZNK2YreHpocjFVS21KaS93ZkNaLzc5dHN1T2JuUFBUY1ZieDZkMGV6SmcveHlpdjdHRDlyTEhuMnR3Njh6WUtmTG1OenJEL1gzUDF0SmdlZVk4N1NGc3A2dDdENXFWRTgrdFJNaHZtVXBweHd2SVZrL2VKaXNrdmp4RmYraytZTlJYVDd5Wm13SjRycmdiRkV2dk15TGRzTnFOcEg1TlVvK3A0T1lpVkR4OUo5R29SdS9RQzlhRkpLQ01OQU9nVFFOV0VjT2VPaVJPN2JkM1MzbnlZYzJGZkJDOC8reHhIdk4rbUtyL0hGOHk4NnFzZjBYVFNRZ3VlbUFoQmF1WTJtSDZ3OThzOW9ucHZlNlBmQU94ZnQvK2ttSUc0ZGlYNVNwQW5DTkVHQXhBQnBJSVdPSVYzRUVaYXdSV1Nja0JuREp5SmtHbDZhbTNiUXdCZW85NFNURzY1aWRhT1E3T3BZMkE0Y1RHUkJtNXFhQ2JRa0NuSERZYXNJMTVCSWFhRExESEo5UWpSR3drUTBqOUJNS1VpOE9NM3I5ZDZWZDk2M1diazhuN0krT1FCTW5IRTV3NVl0NDRNS21EckM4V1NGbHpELzdwZVo5S3ZIZVA2YXA3a2xYU0g0M3RkNTZlQW81cDJmay96VytxWEw0UGJIV2RsN0s0c2V1SXNadWRONTlybXJLQVBXLy9SZVh0bzVrMkVqbE02YzhMakt0UFBKcW4yVDJ2dGlaUHppTW9xdTkrUC8xbjhUM2dQaWExZFJjRVVQV3JiWFFkVWVBai9hMDhHajlDRDdKeU1Rci82ZHdJY0dUT3JBb252Z2VncG41Q044Y2VJci8wSHozMExIY1B1cFQ1LytBN24va1NlTzYyTkczNmpnd09Dbmp2bm5TbjA5cndIK0RlaUFMcVdNQzd2T1RhS1I2RXJBQk9LWVVwTkN4SVVoUlR5ZXNOcGtuQWh1UW1iQ0pXMm9yR0hIZFM4UXp5aG1lR2EvSTd1aSs2dGFYZEJtZjhJRlRmU0JKa1lSNllZRWFSQ1B4OEhud3lVa2hoN0hxdkxSN3YvYnJ1dUZFRmY2Q25Pby9jZGpUTHZ5U29hZU41blN5LzZERGJFWTZUek9rdW5mNXA2QnUzbmlwMytuTXMzdFcxZjlIZjlGVnpIZVlZSDV2RkM1WXg5YmQrNm1QT29sTDdDUHlnQkFDLzVBNG5iRmlVZjY0NGlpSG5oSEZlUHJDMmJNaDZjdzhXWm9lUzVrNE1qWkxOZjFFOGp0K3duK1grNXpXRjd0WFNMOXViOVJlKzFmYVBqaEx1U2tTZlM0cWNjeDNLNDRrYmlFZHRtbWdUKzV3T0dTZWxwcjI1SWRDWmhPbDVURTlGMWQxNU5kQ1JFWlMzUWxHR0dhakNCMWV1Q3dIUWx1Z0ppdWM2aTZwdFVGRGJaT3c3WHIxZUptUXRpTWVGekVEWUhISllRUk40VmhDbTFvWHFGTGM3bnZCQ2hmOWhDelh1ckZ3bC85bnFsRDh2RUYvczZNeWM5MThQU0R1T1dCcTNocDFuTXNlbU42cXF5eDdCOHhKdjlzRkU3UGN2VGRQK0RLNTVieHU0cEIzUHlySll5dWY1bTUzNzZMeGJRUUhUaUxKNGVvaStta0NOdmYzc0JmZEQ3Wk0rTEVubnFWNW0wOXlQdVBhUlRsdVlCcUFuY2RJWnZsTFNiN213UFFpcURIUDB1dHYySnVCTkR0Lys0a2ErbC9VZnVyT2l1bTJraThEdUxiNnpEUDZrdkJ0S0c0WC9nWDhXVE05UWkzSzA0b1BUM2RyaDJoOWY3WEZ2T2dibGx1VHBkVWdwQVNhVnJpSnVQU0ZDSWVseTZYQ3gwelVRSWlkY0ptakJZalFyTVdwc0Zvb1VadnBzaWRoMGU0MGd2YkFhc1h0TEdweVdwd1Q4eFlpOW9ON3JwTzNBQ2thWThqd2hRdU5CRVhwcFRDazkvdm04QTRhR0h6UDNlVE4rYWJUQitTbjNpR1FBdUh5dy80UnN4aS9wV3ZjL05UeThpTmVaTWxIZEgzWG1hTjd4S1dwcnFWdnY1TXZmc0hURTI2dEZmeDVBdFhFWTJDVDhYV1RpSWhvaStzSmZxQy9mOEEvaHYzZ2RjRnNhT29QWXJWMFRKN09TR254VDNxZkFwL2trWHcxcldFOS9qeFBuQTkzVXUzMFREN3c2Ukl5U2lKbkJzdXZBOWNlNWpiRlNjdFRJSDQ0cklCZDA4ZXNmZUJWVW1YRkd5WDFHcTVRaVJNcDBUNWg1WVlUb2t1VFhSY1JORUp5eGcrMDBPTEViRUtkMXM0cERmUnoxdlEvam5Ea1FpSGFscG5yTFVFZzRuQmtkRldhMDNYZGVKU0lqR0ZFVTh1T2haQ0NIRk5XZSs4RmlHK21YaTRITW9HNWxQM3IyVTgvOC9kYkgzdjd6eDAvMUkraUVHMFEzWExZZUxkMytaU2dnUmFyM0xXdmJTUm9pc3ZaOWhSbmp3bGFwMlVWRkhyVzBydXo4L0RWOWpleFRUMzFCSGY3ampxb2hDTkpyNWZGMFBmV0ljWU40YThiNWJpTHUyQlo5Slk4cTdJSXY3V25rVDErbUZ2VjV4TWVyaXpyNzA3NTh1NXBEVElKMXhScWFWMkpCaUdJUXpEd0ZrQ2ttaVVqeEUwSXdTczhVYTF1cCtJMmI0OVRtdFhzNVpjbmRjcWFyb2V4N0NHajVpbWFTMW1RVWlFZUd6dTJObGVXdlZuOU8wLzVLRVJoM2ppZTdjeDdZRVYrQytieGN6aE9VVHJEMU96Vm5nSjgrOGUyZnFITmZBMkwvMnpGOWRjMWw5ZEVhY2FmZnVUT2FrVVg5OWpMOEdRYS8rUCtoL3VRWHh0RWtWLy93YUZQeTVGdnJxV3hsOVdIOVh0aXBPSFFBeTlzK2VsbDlLMmFMZE5INmxkdEdzbWhBM0RTSlIvNk5MdUpVMklXOGgyU1kwUTlVWUwxWHBUKytmNzV6OWVZbGQ1UmJzRkxmNFd5eVZ0M1R3bG90SEVMb080WVFocFNtM3Jodi9OSDF4MnhqdHduSnNDRHJ6TjgvL01ZZXIwVVJTcGE2SlRjbURjeTEzNjlmZlpjTlV4bUJzRGp1cHVobUZRV1ZuSmdBRURqdnFodS9ET2d3NTU0NDAzMHY5aGtuTFBILzd3aHp1ZWYvNzVPaUFJaElDd0VDSm11YWlHRU1LMHRsbEphOUdMdExkWTJjdGVjbkp5Nk5hdEcvbjUrUlFYRjFOU1VzS2dRWVBhN0VodzE5VzNyMW16VnVjbHJEVnIwMVE4Ym1CWTFwcVVDWFV0R3pqZ2x1TXVhZ0I5THVDVzZVbzhGS2MrRXlkTzdEU3ZwWFV0Nk9kRzZhaFJveVk5Ly96eksrMVlteEJDeHlyL0VFS1lRb2prbWo3bjNsRjdXM3hPVGc1NWVYbms1K2RUVkZSRTc5Njk2ZCsvUDRNR0RhS3NyRldLTkhzcFN6RG9xRm16ZHhmWW9tYjV1NlpwQ3ROcW5kcjBmNnR5WFM3dEZuVnBLaFNLbzZWYnQyN1h6SjA3TnpmcGprcnBzZHpScEV1YVdOZHBDbXU3bGJCTFB4THJCeEt0VnZhbUs3L2ZUMk5qSXpVMU5ZUkNyZldLbWoxbkxSUU90NDc1dHVKcXVwNFV0bmJXMm9oaFEyWUJnOVJiZFhyaTZwVjFlcngyemFYZTdPT0lFS0xzdnZ2dXU1ajJTUVNYbEZKTFRONld3alJOTEdGTDFyVFo0bVkzeU5zejIrd1Zmb2NPSFdwOTJ4SWRCZ2tYTkdLTitVNjRvRHB4bzYyMUppMXI3Y2F2WCsxeXVWdzNxYmZwOU1VM3BxRHJ2dll2RkI2RENxcGFrZU5OZm43K1YwdExTNzFwckRiTnR0b3NjV3RudGRuaVpvODFDZ2FEQkFJQkdoc2JxYTJ0SlJKSkxIL1JuTmFhTXd0cUQ0ODBEQVBUTUszbExBbHJiY21UaTI0RVZPUFNhVXplUFdlVGRYVi9YSDJ6dTQ2bDFqZUw3T2xua0RkbjJOSC9rQ2RUdmRuSDMybzcrKzIzMzU1d05GYmI0U3czcDlYVzNOemN4bXB6Si9ZWFJOUEcxaEsxSkNhR1phMVpGcHZtZHJ0dlZHL1A2WTNXelV2MyswZWQ0cDlBRGJ3NTZzMytIQ2d1THI0Q2VOTVN0cGlVMGkyRWNKTklKR2d5Z2JES1BxUmhHQ0llajh2VVdGc2tFbWxqdGRYVjFWRlNVb0xiS3VXd2Q0SW1sVEZ1MVpFWXBvRXBKVkpLSklqUXdSMVRnQXZVVzZNNDVjbnNCa0o4L3M5akduQm9LN1RVbkRaYnNUUTRiK2VyaTBjTnZ1S09qWmJGNWtGS0hZRkxTZ3dTaGhTbU5ER2tnU0YxNG1hVXVCRW1IZytpeHdQRVlrMUVvZzJFSXpXMGhBL1FIUHlFK3BiZEhQTC9PeUZzeVdMY3VHMnRHUmkyRzJwS3BKbFl6Z0pTZUQyZUdlcUtWNXp5dUgzZ3kvdjhueWZVQ0pXYlFRK2RkcWQ0WU4vaVNjQUhTYXNOUEVJU1IwZ1hDRk1paFpSZ1Npa053OFF3VE9LR2lXNFk2THBCVEk4VDFYWENrU2pCY0pSQU1FeFRvSVc2eG1hMGFDVGhndXB4dlcwVzFISkRyYVFCVWlLYTltNFpJWVM0VmwzMWlsUGJuSEJCVHM4VDgxd3ROYWVscUFGNDNPNnIvdmUzQy9zbExiWkVuQzFsTndLWVVnb2pFV3NUY1NNUis5ZU5PSG84VGl5bUU0MVo0aFlLMHh3STBkQVVRSE9XZHlRTGNXMFgxRFFUYm1qQ1d0T3lzN091VTFlOTRwUzMxUEo2SitKcko0TG1BNmYxNlI0N1lzaUZwR3l6UWxvWlVva21wUlNtbEppbXhMQVRDYmE0eFExaThUalJtRTRrR2lNWWlSSUlobWdNQk5HU1RlNU9VVXRhYTNiQ0FMSHFUNy9MMERSTkNadmkxRVM0d0pzTnViMFMvejVSbk9hYjVuT3lNcTZZT1dWQ2htMjFTVnZjRXJQYUJJbVpSaUpodFVrTXd4UUpsOVNhL3FISGllbHhJcGJWMWhLTzRBOEUwZXdzcUc2NW9IYlNJR210V1NVZWt5NjY0RnFnbi9vRUtFNE5JZE1TMXBrM0I3SUxvWHNKYmZiOG5TaTY4RUxtNDBUSm8zTnZIWmZHSFhWSjBLUzBoWTJrMVJZM1RPSnhFOTIyMnZSV3F5MFVqaElJaFhIcnVJbmp4c0JGWEFvTUtZUWhCWVlsYUpacWF1N0MwdWtuSkVPa1VDaE9LM29XZEw4RWVOdGh0Ym1GeElXUVd1SXZrSlJTSWd3cE1Vd3BEZE1RY2NPUXR1V214MU9zdGxBRXJkVU5qU2RIaFNSYXA2UjlpTWJHeHVGQ2lNdlVXNkJRZEQyaWIvNkdvWGU4ek5aTyt2cmNMdGNsYTVjc1NFMGl1Q3lyTFRuT1NKclNLdGcxTGN1dE5kWm1KeElTVmxzRWQ3SnV6UkkyTTlrVG1oQTFRT1RrNUh4TlhSNEt4UW1rOGpXdXVQTVZ0clYrL01udE9aREowNmN4ZjBvSmh5MUVhZHpGaS8vclovejBNU2R3eWZndUhycnhLWmFsamtiem5NdmlsYk9ZZklTZi91THd3ZU9BVDFLc05oMkJoaVJSK2lHUXBta2xFcXpTRHp0ODFqYldGbXNWdHRha2dUWEZ3elJ0TjFSb21uYTF1dElVaWhPTVp4QUxmanVIRzNvQTZGUnVXczJjUjU5aWJ2YVBlUGJDd3pUeU4yN2pkOHVxeUx0OERHVW50SEhDemFVUFBzYXo0NC85SjNPek15Y0IvMDNiT0pzYlpOeXFraGFtRldzelRGTWFpVDVTbVlpM0dlaEdhNnd0SEkyaHBicWc5b0hWaUJvTUJpOEJocW1yVEtFNHFTcEh5WmdwM0R4RVovT1dHaXIvNTFkdDNjdnFONWcyN1JmODhyK2VZZXdEYjdCSDM4WGMyUTh6ZDVOMXUxN05TNC8vaWduVDVqRDArb1hNV1Z1ZDNFVVNyZHpFUS9jL3pNaHAzMlhvamIvZzloVzdxTFZ1Vy8vNGc0ejkwWitaZS84dm1IVGpmWXk4NHhtZTMzNk1kWGV4U3A2WjgxMnVXRnFaZU03R1RkeCsvWVBjL3FhMTRyejZJeFkrOE1qUVFmMzZEYlVFcmRVZGxiaE1LVFhEbENKdW1DSnFtQmlteE5RakhLenpVeCt6eXovQzdQN3czN3k1UDhUdURXK2gyYUtXTHI0R0NKL1BkNVc2cUJTS2s0MU83ZlozV0xiRHc3QWgrWlJjT0k3Uk5SK3h5bHJSV3Z2K1Iyd3RPWmV2WFhzbkczOTZFYVdlTTNsMHljTThPc2I2OFpvcWFvZC9nMWRYL29xMXM0dFp2K1JsMXJRQXNRb1dMZndMVzRmY3dOcVZqL0hoenliaFc3MkVPYXZyazg5Y1Z4bm0wbnZ2WSswZkZySjBURDJMWG5nL0tYeEhoYmVFVys2OUNQNytaMTZzOUxQdU55dlpQUHdxRmw2WUI3RUtGdnpvUlRZUHVZN1gvL3I0ZWM0NG03UXlvNENtQ1NGY0FqQk5Jb2JFTUVGQ011YVdHSzBHcG1IUzgreHpFNjZvdy8zRWJuYTNEazBJY2FXNnFCU0trNkZsdTVuLy8rWXdQeGxqNjh2RTZiT1pQeWtQT0lkcmhxeGs4WnVWekN2Tlo5MzZLc291dks3am1GcmZjN2xqVWpGNVFONlljeWg3K2cxcWd4RGQ4VFlyZ2lONGR1YVppVEg4SldPWVAvMGRKcXgrbi9JcGx3SlFPT0pMVEM1T1dJMmpSNVRBK21vcUljM1kvaml2UFRLSFVzZDNMcnpuNXl5ZGxJV3ZkQXFQWHI2TkdRdWZKQzlZd3J3bngxRUVSTGU4d1lyZ0NKNmNlU2I5dkZ3Q0xFMjEyb1JJZENJZ2hLbUJRRXJNaFBVbFRNT1VpVGliaGlIQnRGeFNkNnExWnJ1aGdBaUh3MU9BdnVvS1V5aE9kb3d0bFR3bWZ2bE1Gcnk4amZMcCtieTJJNThyYnlzK1dxODI0WUxxRUcwTUVDMCtpeExIMkxtaW52bjRHcXM3dE1wOG55ckc1bUhZVnk5aTlNc3ZVdjdsNjVodS9VN1JSaitCcGdwdXYvNTlnRDREQnZRZjhja24rOTVyRzJkREJ3UVNJWVFRbWtDYTFoUnowelN0amdRd3BVd0ttNVlxYXBhbEJpQzhYdThVZFhVcEZKMlRvdkZqR1YzelBzdit2b1hOSmVPWVduTHNqK0hya1ltdnVwcktXT3YzYW1zYWlQWW9QczZMbEVLc1g3YWF6U1VEOEwyMW1oZXR4V0crbkR4eWUzNko1U3NmWS92S3g5aSs4aisrbUdxeFNkbmFpV0JLaVNHbE1HV3FLMm9tRnBTYWlkSVB6UkkwZTZpYnNNczhMRGRVQ1p0QzBWbkpPWXRyaGpmdzRyS1BLSmt3Z3FTdWVUUHhFYUt5NmNoQmZ0K0lpNWp1Zlo5Rnl5cW9CYUxWbTFpd29vclJVODQ5cnFVaTBTMnZNUGV0Zk9ZOU9JZEh2K3huMGVOdlV3bjRobzlsTWh0WnRLSUNQNUNoTjE2VVlxMGxWL1JKcEdaYW9tYUNFRWlpRVYzb1JweHd3RTlkSEtTWnFHdHpweVlOYkRjMEZBcGRyTnhRaGFJems4WEVTWVB3YmZCejVYakhxUGFTYzdqNTNIZDQ2TTRmcyszQmhUeDZ1SWZ3RG1UZWo3L09nbDh2WmRJMFA5SHNmQ1orZFRaUFR2azBvOS9ieDlqZ0xCYTlNSWtQZnIyQm9objNjVU94QjJaTVkvSTlMekIzOVZrc256S01oVCtleG9KZkwyWENNajlSYjE2ZnkyWitlOGcvbHYzbmh5VDdSbkZKbVJnWmpoQkNBeUdsa0Y2WElLcEhPVmdmdytWeTQ5TWtwbFgrSVhyMjdFazBHaFd4V0l4NFBDNU0wOVNrbEM1ZDEzK21hZHAzMU1XalVCd2RuMmF2S0IrditteVcwS1kvTW1sNUNjdC9lUkVscDhoNURJWWlTM0xHWHZzaTBBSUVnS0NBTUlLb1FPaENZR2hDbUc2WEpyMGVGejZ2UjJiNnZHVDZmR1JsK3NqT3pFQkx6WWFTcUYvVE5FMmJwQzVWaGFMekVtMnM0UGtWMnlqNThybW5qS2dCWkdYNnprdm5pbUxOYWNOdXM1SlNKRG9SVEd1RmdaSHNSTkJTaW5LUlVvcUdob1pocUdVdENrWG5aYy9MWEhIck03elU0eW9XVHNrN3BYNDFJY1RacTUvNVVlOE94RTFJaVVDQ0thMU1xTE9IMURyY3FRM3ZKSHBETDFKWGprTFJpU205aXJVclQ5M2ErVEZubnprTTJHOExtd1NYa0dnSTIyS1RRb0tVZHUrb2RkaGJyWkpaVVZwSEZBbVh5M1dodW5JVUNzWEpvbnRlemlqTFNrdE8ra2djc2xXcnBOMC9LcE9WSFlaMWFLa1cyL2UrOXoyWEVHS2lPclVLaGVKazRYRzd6aHQ1WnIrVWh2aGtuSzExbEJHV0t5cmJ1cU5haWh2S3d3OC9mQUhRVFoxYWhVSnhFdW4yL0NQZkxYVmFiVExSRkovWUZpL0JtcTZMdEVRdE9kTElhYkZaQ0ovUGQ1NDZwd3FGNG1SVFd0SnJTSHRYRkszVkhVMFlaYVoxR0xJMUVhbzV5enhJekY0N1g1MVNoVUp4c3NuSnpqekhZYkcxS2Z1dzlVcGFXVkpwN1Q4MlpHS3NrV1piYTFKS2NlMjExN3FFRU1waVV5Z1VKeDIzeS9XRkFiM3lYU2tXbThzU05FMUtCRmh4dGpidWFHdU1UUUJpeVpJbFh3UnkxQ2xWS0JTZHdXaGI5dWg5L1oyaUpxMTlvemhXOHlYaWJNNmFOb2ZGQnBDUmtmRUZkUzRWQ2tWbjRjd0JmZHNrRUdnYlp5TTF6aWFsaVNuTlZ1VWpVYjgyUnAxS2hVTFJXZWlXbXpXRWRzbUR0bkUySEhFMjAweTBXYmtkWTRxRUVPSmNkU29WQ2tWbndlTjJENmQ5akMzWkw0cXpuaTNwanJaYWJPemF0YXNuTUZpZFNvVkMwVmtRUWd6NjVmZG01WFFrYmlSVUxWblBacnVsZG94TjlPblRSelc5S3hTS1RzZWw1NS9ieHhJeWErQWtHaEpoVDlXVldKVWRWaGVDbEk3c2dzZmpVY0ttVUNnNkhYMkxDL283ckxSMnRXeFlJNHhhdXhBU3dvYVVVcmhjcnJQVktWUW9GSjJObkt6TU14eWkxa2JZckRoYndpT1ZDTXNWRlpyZEl5cUVVTUttVUNnNkhSNlBlMUNLcUxrY0ZodXQ0cFpJSU5pdUtOWWR6bEtuVUtGUWREWTBJWVk0ckxUMkpSOXBFZ2dhSUdwcWFnWnp1SFdCQ29WQ2NTU3FOekYzem9NTW5Yb2ZjOWJyeC9PUmZTc2Z2Ny9RS1dqU21zZEdzdVREVGlBNExMYWNuSnhCNmwxUktFNVgvTHg0L3k5WVZBbFV2OEcwNzc5QjVURS9oczZhRi83Q3VwNVhzZmFsWC9Ea2VFL2JtN2UveElRYmw3SW05dWxlNGREU2ZrV2tMZEsxT3hBU2dxYnJCdUc0WmJHNTNlNHk5ZVlxRktjcExidDRzM0VnRjVaQTdaWnRSSWNQK2hUTFljTFVOdXFVakJqVVpxdDhrdEtMZUhMZUZNWjdQOTFMTE95UlY1ekdIUlZ0RHlrTTB4UzZBVzRwcGRBMHJWUzl1d3JGNmNaVzV0NzZJdXVDWWVwaUhqYmYrQkhSWUlDb3Q1SUpOZGV4ZHQ0NWJlTlRzVXBlZlByUExGNWZSUzJaRER0M0NndnZ1b0JoT1pVODgvMW5lR0pIbk5pT1JZeGRQWlpuRjEvRGFPZlA3bGpMN1kvb1BQcW5iekQremQ4d2NobmNVQnBtM1k1cWFtT1pUTHpwTmg2ZFZJeXY4VzFtM1BvT2VSZG1Vcm05Z2RvbUtQdnlOQmJjT0tSUFcwc3RHVjhUSmxKb2dHN2F4bU0wNFlvS0lRYXFOMW1oT04wWXhxTy9mWVNWTS9veWF1WjMyZmlIT2R4Uk1vajV6enpDVzZtaVJvZzFqei9ERTQxamVIYkpZMnhmY2lmWEJGY3o2L0ZOMUZMQ25iKzhqL25EM1l5NmFSNGJVMFV0SFRVTk1HVVdhMy83Q0cvZE81RDFTMTVtVFV1cmE4endHMWk1K0dFMlBqT05vdlV2OHBNM1E3MHR5Nnk5dUFGU0NPRjJpY1FkM043RURVS0lBZXBOVmloT1IzUzI3Z2hRZGtZeHRGVHlRYXd2dzNxa2MxZTNzR3g5SnROdnVvaGhPVUJPQ1RmY05vNjg5OTloWGVPbmVOcWVaM0hOaU1UYXdMelNNeW1MTlZBYnRHOHM1c0l4QlFsaDdYRU9kMHpJWmVNN08wbzZFRFY3c1Fza0J4VkozTllOU3RnVWl0T015dFhQTUdOWkpmNm1NR3g1a0hXRXFRdDYySHhyQlRjLytEM3VkQWFvbXZ6VVVrQnBUNmM0OWFXRWo5alRDUFQ0REMvRXlqTkVkU0JOREs2b09BLytIZW1YWXJFSkNacEltYVpyeTV1MmE5ZXVZaUJEdmMwS3hlbEZ5WlE3ZWV1WmFZenYreVdXL3VFUlhwMTVKbWRkZFRjYmY1c2lhZ0RkOHlpaW5qMDFiZDNKV3ZJbzdmSDV2czdLeWdiSXpzMzQyYnhiY2pxMDJGTFFDZ29LZXF1M1dLRTRUYW1wb0prdkJxQUFBQ0FBU1VSQlZMeTRoREtnZkU4OUphWEY2ZStYTTRLWjQ4T3NlT0Z0dHJZQUxaVzh1UFFOYXMvOUVoT1B1N0JWc2VwL0svQUQwY3EzZWVMTk1PTW5uTWtYQjUrUjV4Q3kxbnEyRktScDR2YjVmTVhxM1ZVb1RrLzhsUTFRTW9ZOC9KUlhlaWliNHVuZ25sbE12dmRPYXAvK003Tm1yOFFmeTZScy9CU2V2V3NNUmNmOVZlV1NWN21hYWRmdm9qS1d4K2dwTi9Eb3BEeWFkL2ZJNjhCYWExMUdKUkNHYVVnUmpVYnY5SHE5VDZ1M1dLSDRiQmlHUVdWbEpRTUdIRVBJK3VOVjZzUTVhWHliR2JlK3o1Vy9uY01OS1paZ1pYWGRnbjVmdnZrZElHQWZBa0lJSWdJUkV3SkRFOEowYVpwMGE1cFdwTTZtUXFIbzdHUmwrUEljYm1nYlM4MDU1UU1rbXFacEJlcVVLUlNLem83WDQyNFhZeU5kakExd0N5SHkxU2xUS0JTZGdoNFhzSHpsQldsdmNydmJDRnY3UXlKc21kUDRiQlVvQ29WQ2NVSndhVm82VjVRMlZwdFZxS3NCZWVxVUtSU0t6bzZtaVJ6U3hkWmtHM0VURXRDRUVFcllGQXBGcDBlSTlzS1dhcm5aWFZVYWtLMU9tVUtoNlBUQ2x0QXFwL3VacHV0QUpvVXRTNTB5aFVMUkJTeTJ6QlJSYzJpZWJDTndHcENwVHBsQ29lZ0NaQnpHRFcxanRXbWs3YWRYS0JTS1RvZTN2WGVhVHRaUXdxWlFLSTZHRUp0WFBNT0U2Ny9MME8rL1J2bkpFN1oyQ1lOMkFpZGI1NGNyRklwVGxTMS9adExDajRpaXMyN1JRdVp1K2hRYnBDcmY0YUZsZmlZL3ZKRHR2N3lVNDdja3BaNTEvL01HYTZxUDZzNnV3MWhzMWtaNE1HbHRTMUFvRktjb1d6ZFZVRFJtSUQ2cWVHMVBNUmNPOFJ6N2d6UTJVSnZkbHd1SEh1OWNZd092clZqTmEwZTNGa3ZyMEVxelRMWEVKbmdRVWtxcDNucUY0clBUMmFaN2xQL1BrOHhZVVlXL1NjZlhQUk9mbmxqYVVwamRrNXQvM0g2WVpPMm1sNW43bTNkWVg2UGo2M2ttMDJkOW5mbmpDNGl1WDhxRXh6K2lMZ2k1MlptTW4zMGZ6MDVxVy80YXJkekVnbCsvd2lzNy9FU3ppNW40MVdrc25ING1SY0M2UmZjeE4zczJHNzkxWnVMTzYzL0QwTi9rcy96SGVTeTRmeTFibThLUW5Vdlo1YmZ4NmxjcjB5NXplZlMyY3lnQnhQQ3AwNEFnaWVrZWZxQUZDQXFJU3RDQk9DQTFFcGFiUXFFNHhTajc2aHcyL3ZZbXB2WThoMGQvK3dodjNYc09mUytjemNZL3BKbVFXL2thc3g3OWlKSlo4L2h3NVM5WWUxcys2eDVmd3FJOTRCcy9pNDBQanFPdys3azgrYWRIMm9rYXNRb1dMZndMVzRmY3dOcVZqL0hoenliaFc3MkVPYXZyRC84Q1N5NWw1UjltTTcxN0psUG5Qc0tyc3daYU43UmY1dkxRV2orSDFTcVJtQk9lR01xbW9RR0d1Z1FVaWxPVW1pcktldzVpbUJmS3QxZFROcnh2MnJ0dFh2ME9sY09uTUc5OEFUNDhGSTJaeXJ6aERheFlYWEhFcDRodWVac1Z3UkhNbTVtdzBId2xZNWcvdlMrYlY3Ly9LWk1NN1plNXJIOXJHLzcyV3RXK1Y5VENEY1JJcmxOUUtCU25CbHQ1Nkk2L3NLYkpUMTBzazJrM3JrN3NETTEraEFudlQrUFZlV1BhTkluWE5vYkpLeTV3ZkMrTGtwSmMvSlgxUkJtWXNvb3ZSZGdhQTBTTHoycXpLTG1vWno2K3htcHFqOE52a2xqbUVzYWYwS3FqUXVNWTdxeFFLTG9LdzFpNCtHR1dmam1mQys5NmtJMS9tTVhVbmlNU0xtbUtxQUVVOWNqRVgxMlBQL2tkbmNxYUFIazlDZzRyYWdDK0hwbjRxcXVwZENoSmJVMEQwUjdGaWJIaG43R2d6RnJtUWw1N3JaSXBYOXNJVzFoZEJBckZxVWlJOG1vb0s4bUN4bXJLdmNXVWRTQXlvNmQ4aVpKL3IyWFJKajlSRW9tRUo5N1BaL3FVZ1VkOEZ0K0lpNWp1Zlo5Rnl5cW9CYUxWbTFpd29vclJVODZsRENncHljZS81U1BXTitwRUd5dDRmbldGUTZFOCtMdzZ0VFgxUkpQZlM3L01KUThpUi9Wcnk0UXJHbElYZ0VKeEt0TEFCNVVGbkZVQzdLMml0dWVnanV2UFNpNWw2ZHd3YzMvekNDTWZzYktpOTg1bVh1bFJQSTEzSVBOKy9IVVcvSG9wazZiNWlXYm5NL0dyczNseVNtSTRkOW5sMTNIUGxxWGMvdi9XRWUwK2dLa2o4c2xOL25CZnJwa3lrRm0vZVlSSmUrN2tyWm5RMFRJWEtXVTRqWFhtK0w5QUNJa3BUU21rbEI4QUk5VkZvRkI4TnRReWwrUEFZWmE1bUZKdWNZMjQ2b2UwbG5zNEY3cEVCVUlYZ3JnbWhLbEpLZjNxYkNvVWlzNk9sTEtsWTJ2Tm5wMmJRQU9Vc0NrVWlrNlBhY29XaDRESmRJSm1lYVM0cFpSTlFnaDExaFFLeGNubk1NdGNETU1JSE1aaWMrb2FtcFN5UVoxTmhVTFIyWWtiaGovRllwUHB4VTJnU1NucjFTbFRLQlNkbldoTTkzZmdma3JIdWdNQU5NTXc2dFFwVXlnVW5aMVFKQnFnZld4TnRuZEVRZE4xdlZxZE1vVkMwZGxwOGdjN2NrV1RZbWRuQzl5UlNLUW1KeWRIblRXRm9oUHh5WUVhZFJKUytHRDdua0RIb2lhdEZhT0pRV3p1Z3djUEhpd3NMRlJuVGFIb1JBem8wMU9kaEJTcTZ4dnRjZy9URmpXUjhENmw3WUlLSWRBMGdUWnk1TWdhanJZSFM2RlFLRTRPa2JtL1dobzZqQ3Y2Lzl0NzgvaW82bnYvLy9VNTIreExsc2tlRWhLV0VFUkFLK0R2aWxoLzZOV3FiUzlZV3JTOVNsdSthUHVyMUc4TDFRcTl0cUJ0b2N0RmJ5dFdyMWhic0ZxZ1ZXcFJSQlRVRmxjVU5TeWFSQ0FRUXNqQ3pHU1ptWFBPNS9mSG5IUHltWk16U2JCc3d1ZjFlQndUQW1hWk0vUE02NzE5M3RUYUNZKytvM2IzODhlTmk0dnJUQldsOUlBTlpEcmozREpFRExCUlN1aysvdEJ4Y1hHZHFkSjAvYUFOYWhsdXpkeVliQVNrYWJEcHV2NHhmK2k0dUxqT1ZDV1Rhck9EWTNOcytTQWt2Zk9BYXByV3lCODZMaTZ1TTFYeDdwNW1oeEEwYSt1SGxLWmhza0ZSK041a0xpNnVNMEVwYkZqNkE4eC9UVTMvc1dBYWZuN0haMW94aEJ3YklTUmRHUVZBT3pvNjZ2bUR5Y1YxWmluUjlCWVczWGszeGw5M0cycSs5a3NzMk56RW5ESTdORURVYlg0ZWEzZWZyTE5rVzdCcDdTdlkzbkdpUDYrTTZ4YjlDcnZXL1JMdkxCZ0hCVUJEL2I0MkJtWTIxMmFPVXhIcnZ3SUFXbEZSOFJGd25JOFpGeGZYeVZQeVF5eForaVIyVk0zQStzZC9oczBMejBmVHd3OWd3ZmJqZ1ZRUGRyeXdFV3Yybkt6VC8xdXdiczFMMk5aeGNqNjdTNUVSVEFlU2lUdSt2N3pEN3RRSW9JTms5TFNsQ3dna0hZcWExbTRYZ0FuOEdjWEZkZm9WM2Y0U05tQVNIcDE3ZnZvNDczRlhZT24xYitPYXA5NUQ2NVRKaURpY05MdHA2Zi9Ga3NMYjhQTGNTdXg0OU9lWTkydzdvbDBxa251V1lmempBT1FSV0h6ZlhGeWZBMFEzUDRCSmF5VmNWOWlPSFEzdGFGVktjZjNjRzdGNFN2bzQ3OFMyaHpCK1RTSFdyL3c4YWdFQUgyTFIxeDVHOUxzL3gzMFh0dUNSTysvRGlrWVZpVlFQdHY3d0IxZ053RFg4YWp6KzA4dXlIeitlb1c1c1g3c2FTNTdhaGZvdUlGZzJCblBtZmhtM2pnczYvRnU2eHdZMUhZQk9BUW9LQ3FTM3ZoTmlMQmFsZWpySGhuUmx0RTRRQkE0MkxxNHpRRTBOTFVEVlpBTXFhVldQcmtUd3FROVJqOG5wN1U4RGFPTE5QOERyTjBleCtzNjdzVzdLUXF6L1FsNy9mOVNwWXNLaS80dmxaVEphdHorS0dmKzlHbFVyYnNPTmhZTjlkNFg0K2svdndkZXhFL05tUEkzcWV4Y05iVGNDRzJhL3RSNjNQUVVzL09uUGNYMVpDblViZjQrYjcxbVA2b2R2eHBXMkNVOWQxK3ZSUDdlbUE5Q0oyWlJMUVRWS0lZR0FDQ0lFUWdnRlFGVlZyZU5QSnk2dU0wT0pMaFV1UmNwY2ZlZVQ0RXFwSnk1blZEQUNVOHJTSzRValU2N0dEUVVmNDIvdm5hSUR0UlVacmxRUFdqdWlpTUtMMnF1L2ljMFB6TUkwaDdGMVhVdnVRLy84R2hPQ0Vpb1FBSlJDQTFNOEFFQjdlbm8rNEU4bkxxNHpReTZmaEVUU0JyRXVGUWxaR25UUDV5ZFRBR1U1UUxUejFHempkSTJiZ2NlL093YTcxanlBNlYrNUM5UC9hejAydEtpT1AxdXlOMzdRQmpRTjlwWVBRaWhKVDhKVFF2cEdxdWpldlhzNTJMaTR6aEJWMXhRQ2V6NUVYVVo0Mm9SbzJVZ2poeVVEU0NGeHd0YWR4OURVQWdURG5qUjRGQm11Vk9xa1ZSUVRMUzFJakw0TTkvMTBFVjcvMDEyNGIyb1BWdDY5R21zZENoSFI5Z010QnNBMEJtckdaVlJFS1FVRklCQ1N2a3ppVFo0OCtTaUFEL2xUaW92ckRIQnNGMXlCNitYWHNlU2hPdFRIdTlHNit5VXNXTnVPSzc4d0xwMWZ5eWxGYmNGQi9PM2xKa1NSUXV2dTU3SHFmZFgyV1R3b3k1RlIvL1l1MUNlQlJEeUtLQXZDSXp1eGFYYzNnQlRxTnorTlZVY3FjYTJadkI5ZWllcU9YZmpiZTkwQXVsRzMrU1ZzNnJSL2wwR1U1YlJqKzl0TmlBS0lkblFQR1lTdDI1L0FOWGMrZ1UwdEtRQmVSQW9EY0NYN2c3UTNnWStPSGQ3Wmc2eXRIdWxMcHdDSUFKbWtpd2hXOFFDQXJ1djYyNElnak9SUEt5NnUweXlsRWdzWHpjS1MzenlKYTJhM0ErRlNYSG5EclZnK3hXdjhnekxNLy9abG1QZmZ2OEtFMzhzb1BlOENYSGxlQUUwWm4wVEd0SnRtNE1wN25zWTFNNThFd2hXWWY5ZjNjR3VOOGRjK0wzWTkvaXRNZXE4ZDBaeEtYTC93eHI3Q1FlRy9ZZWxOSCtLMmV4WmhWZEtEQ1pkZWdDbWw5bSt5RXJmTW5ZeDV2L2tWSnZ3ZUNKVCtHKzY3YnlhbURhSFh2K3dMTitQQmp2Vlk5djBmNExZdXdGVlFpZXUvZTZOUjRlMXIwS1dVZnVBVWhwSjBWVlNuNmVQWEFFS29MS2JkR2lFRVJCUkZXZGQxQ1lEYzA5TnpxOHZsK2hsL1ZuRnhIYjgrVFF1VG81c2Z3S1NuUitDWis2NFlZbnZHNmRIaG94Mi9MTDdzUDE5RmVrbHlISmxMa25zQmtoSUlWRUtJTGdrQ1ZTU0JLb3FjenJHWmxkRm9OUG8yZjNweWNYR2RLZHJkY0dDZnphMnhPVFpLakpFcW96R1hrblNPalFwc25EcHIxcXkzRFNweWNYRnhuVzdGdi9hRDVTM0lySVJtZ00yOENDR1VrTDRUZENWQ2lIRktPUFN0VzdmcWxOTHRoSkRwL0RIbDRqcDdGWngrSzNhZjRhOXlWZFBlYW1ydDdBYzFZNVNLQXNSd2JlYU1hQnBxYkI4YmpMZTZxcXJiK1czbjR1STYzWXJHdTk5M0NFUFpjSlNtWTFCWWJvMlk3UjdHSDZpWlo0dkZZcS96aDVTTGkrdDBhKy9IQnhzR2dockpPRG1YUUNCR0g1c2dJQ1BIQmtELzFyZSt0UjNBTWY2d2NuRnhuVVlkKzhhaVh6ZGxnWnBEamcyVUNBU0NRS2dnR0k2TkVYM3l5U2RWWGRkZjVvOHJGeGVYa3lnOStWOGpwYXF2MVRVZVlzTlFOUk51Zldld01lRW5DQkVnRUNGZFBDQ0VtSDF1RklDZVNxVmVjYmxjMS9KYnlNWEZCYVM3WVErblBEaVNVS0NCSUo3UVR1clhhMnRyMjVrdERLWHBBZ0tsNXRRQkNGS1VBRlFFcUFpcWkybXdBVll2bTA0cHBTMHRMYThNR3phTTMwMHVMaTdvRk5nUkN3S3VBUHg1UWZoOGZoU2U1Sy81NFVkL3IzZUFtZ1pBTTFsRkNLRkVFQ0FJQW1SWmhxSzQ0SEs1NEhhNzA4Y1dtWVVEMDdGVlZsYnVCdkErdjZWY1hGeUhVMjdBRlVCaFVRbDhQdjhwQ0hWcDNkeHZmcjNORm9hcUJ0UnNSeGFaUFd5Q2tWOUxnMDRRQkFGTW5zMkNtNnFxVy9ndDVlTGlPcEpRNEE4RVQ5blg2K3JxZWczT3ViVytpbWpha0JrdEhnSUVnY0NDbWloWTdSNW1LQXJqZjlTajBlaEwvSlp5Y1ozYm9oVFFxSkRkcWJWdHg4cnZmUVdmdS94aVRML3FQL0REdnpjREFKcWYvQ1l1dmVSaTQvb20vdHc4OUs5WlgvOVJIVEx6YTdiQ0FYVExpQm1UQm9JZ2dCaFFFd1VSa3VuWUdMaFJTcW1lbjUvL2lwN2V2bHpLYnk4WDE3a3BRb0I0VXN1U1U0dmg1ZnNXNDFsOEN5dWUrZytNVkdLSUlRQUFLSjcxTUxaOUlZRkUrOSt4NE1abmp1ZExIcnIyYzFmdHQ0V2d4bVVQUXlrMFZZY2twNkVtc283TnNHOU9TMGMxVGRPZTQ3ZVdpNHZMV2MzNDRNTWthcS8rSEVZR0FMZ0NDTEJINExwY2NCM251dUtlbnA1dDJkd2FJZENRc1hLUFVsM1hxSjUyYkZRUVJJaUNDRkh2N08vWXpMbFJBSG9zRnRzY0RvZS96bThnRnhjWEUzOWk0NTMvaWZ0M0pKR01KNEZmWEl2UC9RS0FNZ1YzL25rSnBycUc5amxlKytNeVBQamtkdXlQS3lpYWVBM21mZis3eU85c2ZOY0dOYXR3WUxSNTZBUklBODM0VE1sNEhPM3hPQVJQQkZWbFBvakVuUWFiZWVtNm5nRzMzTnpjelR3YzVlTGl5bFFlcnY3cE03Z2FlN0h5aHJuWS8vVy80ZDdweDdlSllkK1RQOENQLzE2Qk94L2NoS201Y2J5MjhuYjgrSHUvUGZUZTFwODBHc1pLdFlNTmxPb2doSUlRS2dvaVJLSWhxUko0d2lFRWpUWVBVUlFnZW5JZ3BDMmNrREV2eXBSVWRVM1ROdklieWNYRmRlSzBGeHYvK2lGcXYvcGRUQzEyQWE0OFRMN2xHNWg0OU9tWDRKaGI2ejlLUlVoNk94VWhBREhDVUVFVUlZb2lSRW1DSUlxaTVkak1rQlI5Ky91MHpzNU9Eall1THE0VHFIYTB0L3RSVkJ6bys1Q3JBZ0Z2MjQ1c1lhZ0Z0NHcyRHdBZ1NFTXRYUTBWUlJHU0tLYkJac0tOZ1pyVnp4YUpSRjVCZWtzOEZ4Y1gxd2xRTG5KejR6amNGck0rUW51Yjkvem1qUVAyYW1qS2hCckpQREhYT0NrMy9mK3lVQk5GQ1pJVzY2dUttbStaWTR5c0FkUmtNcm1CM3d3dUxxNVBySXcxZ2FOdzlSZEhvdTZSMytMbDVnU0FOcnp5MndkZVF2OUpnNHpDZ1hXd3BNRW9RUlJBb05ORWtrSVVDWFFLU0pJSWljWWdzWTZOeWJVUnBqcXFIVHAwNk8rVmxaVUwrZDNoNHVJYWlwcWYvQ2ErZkYvZnF1SjNicndZOXdPWTlNTk4rTVhuQXFpWTlYUDhWOXNTM0QvdlN2dzRya0FMalhqWHdhM1pHM01wVE9NbENCQmtCWDZ0Ry9HT0kyanNKSkQ5WlJpWG13TTVNQkpreElnUjZPM3RSVzl2TDBra0VraWxVa1JWVmFMcnVrQXBsWkRlek9wU1ZmV1BnaUJjeVc4WkY1ZXpQazFicW9ZcVNvRzNZMkVVVnB5OHJaeXFxcjQ0dktKc0pZQmU5RzJqTXE5dVFrZ0NRSW9Rb2hKQ2RGRVVxU1RKVkZFVXVOd3U2bmE3NFhGNzRQVjY0ZlA3RVF3RUlFaVNaRHEyak9xb1BSenQ3dTUrbWo5MXViak9MUkVDU0VSSFY5ZkoyL0hVM0h6b1ZZY1FOQVZBSllSa2JxVXkyQ1FJQWtSUm9GWnVUUkloU1JKa1NZS3NLSDNGQTNzUndWWWQxZSsvLy80TkFBN3dXODNGZFc2cFFFbWdLM1p5RHRXbWxEYjkxNDhXNzJMQWxyS0ZvVHJNSTRyTW5RYlcyRlFmdHlSUlNvTk5scUVvU3A5alkvTnNnaUNBb2FNT1FMdnJycnQ2VXFuVU9uNmJ1YmpPTFJVcENkQkVIRWVhbTA2NGM0dkg0ODg5dittNWxKTmJBNGc5djVhR216RVhhb2VhSk11UUZRVXVsd3VTSktVL2FQd2pLb29pMFRTTkNvSUFUZE1vNDlyVUF3Y08vTFdxcXVxNy9GWnpjWjFiNGVnRmdTaU9KTHB4dUMyTzJGRVJYY2tUYzRMdUs2Kzg4bllXdDZZQzFCeDhUM09JR3RKMWFKcEdOVTJGcXFhUVNvbElKa1ZJdlNKNlpRazlMcVVQYkV5dWpRMUhNMlpIUjR3WXNVdFYxZldDSU16Z3Q1dUw2OXlDVzZGYlJhRTdCa3FCekZVcG4weUpaT3B2bHkxYWROVG0xRklBVWdSUVFjd3dGRlFnb0NJQlpCRlFKTUN0RUhnVXdPc0N2RzRnNEFWQ2ZpQTNDQlRrQUlJc3k3QzVOdGdINDQxUkt3M3BTUVFlam5KeG5lT1FPeEhhM1hqZ1ZRZTNsdEhta2JGaXp6aDNUUlRUb2Fna2lwQWtFYklrUXBZa0tJb010MHVCMStQdUE1c29pdVpiYW9hbHpKSGhWblUwUHo5L0M2WDBWWDU3dWJpNFBxazBUZDgrWWViOHhnSGNtdFozL2xyYVhJbUVVRkVnRUFXUlNxSUlVVXpEVFpZa0tMSUV0eUxENDNiQjczVkRVQlFGc2l6RDd0eHNEYnRXRVFHQTJ0WFY5UVMvTlZ4Y1hKOVVCdzYzdmpDQVcxTU50NmFUOUpaM0toQkFFSWpoMUFSSWttQTROUkdLTE1GbHVUVVhBbDVQSDlnY2lnam1pRlhHN0NnQWJmcjA2ZXNvcFh6WkN4Y1gxM0ZMcDdSdTZsZS8vMzRXdDJiTWgvWVZEZEpnTTl5YUtGRFRxYVhiTzJ4dXplTkdNT0NENEhLNWtBVnVHYTZORFVkZmYvMTF0YmUzOTNGK2k3aTR1STVYUjlvNm4yMXE3V1NobGpTdU5OU0llWkpIdW45Tk1QWWFtQzBlYkc1TmtmcmNtcy90UXNEblJZNGRiRGE0c2E3TlBoaXZybG16NWtrQTlmdzJjWEZ4RFZXVTBvWWYzZitISFlPRW9kWkp1UVJBMnEwSkVNVjBiazJTUk1paVpCVU1YSVpiODNrOUNBVzh5QTBISUhnOEhqakJ6VlloWlVOU0RZQTJkKzdjYUc5djd4LzRyZUxpNGhxcVdqdWlHeDVhOTN6Q3lhMFJJR1VVRFRUQVBFZ3k3ZGhFVVRDS0JRSmtVWVFzRzdrMTJZQ2F4NFdBejROd3dJLzhuRkFhYkc2M3UxODRtcVg5STZQMVk4T0dEVThBYU9DM2k0dUxhd2h1clhIWncwKytaWU1hNjlqNldqelNSUU1JaEVDMGlnWnB0MmJPaENxeURMZExoc2Vsd08vMUlCVHdJUzhjUUZGZURnU2Z6d2UzMjIyNU5oWnc5dFlQVzY1Ti9mS1h2OXpSMDlQekdMOWxYRnhjZzdxMTltTlAvL0t4cDN0dElhanAxbFNRdmhWN3Bsc1RCVUxUYmkwZGhxYUJsbGtKOVhuY0NQZzh5QW1tM1pva2lSRDhmais4WG0rR2F6dWUxbzgvL2VsUGoxTksrUW03WEZ4Y0E3bTFQWGYvNW85dk9rRE5kRzBPTFI1RzBVQVVqUllQZXpPdURLL2JCYi9QY0d1aEFJcnljd0FBUWlBUWdNL25nejBrWmVEbTFQcGhWVWkvOFkxdkhPdnU3djQ5djNWY1hGeloxTnphL3ZRRFR6NDNXRzR0b3lGWE1OeWFKQXEwSDlRVUdSNlhLOE90UlhKRGNCdUxUSVZ3T0F6V3RRMVFKYzNxMm1iTm1yV0dVdm82djMxY1hGeDI2YnIrNXZSdi9IQ0hBOVFHY0d1QUtCQklnamxkMERkaDRKSmx1SlYwTTY3ZjUwRTQ0RU5lT0lpaS9GenJhd281T1RrSUJvT1dhM1BLdGJHdWpka2FiMjFyM3JoeFl6SWFqVDdLYnlFWEY1ZGREVTJIbjluVmVFakY0SlZRSFNCVVNCOGtTVVZCZ0NTSmhsdExRMDJSbWZZT2p4dEJueGM1d1FBS2NzUHdldnAybXdyNStma0loOE1JQkFMd2VyMFczRXpITmxUWEZnNkhOK2k2L25kK0c3bTR1RXlsVlBYNWtaK2J0OHZCcVEzdTFzUk10eVliQlFPUDJ4aWQ4bmtRRHZxUW54TkVVU1FuNCtzS0JRVUZ5TTNOUlRBWWhOL3Z0M0p0RGhNSkE3azJsUkNTT25Ma0NIZHRYRnhjbG5ic3F0K0V6R1pjQzJ5R1cxT0g2dFpjVm51SE1Ucmw5eUkzRkVCQlhoZytqenNUYkNVbEpjalB6MGRPVGc3TVFzSlFjbTFtTVlGMWJjWEZ4ZjlJcFZJUDg5dkp4Y1hWMWRPN1p2THM3eCt3UVMyUnphMEpSaVhVeWEwcHNnU1h5Mnp2Y0NIZzkxcnRIU1dSdkg1ZlcvQjRQQ2dxS2tKZVhoNUNvVkRXUW9KVGhkVGUxMFlJU1gzd3dRZVBBVGpJYnlzWDE3a3JDaHo4NitaL2JvTnp3WUIxYXhsOWExWWwxTzdXRktOZzRIYW4yenY4WHVTRmdpakt6NEhIcmZRSEd3Q1VsSlFnRW9tQUxTUjR2VjY0WEM1a0c1TFBsbXViT0hGaWZYZDM5NFA4MW5KeG5iczZjclRqeWEvZSthc09tMVBMNnRaSWhsc1RNODVaY3lreVhJb0NyMXVCejJzVURFSUJSSEpES0NuSWMvejZBZ0FvaW9LaW9pSmtLeVRZcXFUVW5FcXdyK2d6WGR2VXFWTWYwM1g5Ulg1N3ViZ0drZUk3NjM0a1ZkTmUvc3lYYm50akNHNU5NOXlhYms0WlNFYmZXcjhxcUhFeWJzQ2JidS9JRHdkUkZNbUZJa3Zad1FZQTVlWGxNQXNKWmtqcVZFaGdoK1NaR1ZLZGRXMDdkdXhJSGpseWhPZmF1TGdHVTZqa3JQdVJkdTVwZkthcHRkTStYWkFBa0NETUJpckRyZW5FT2tTU1dFNU50bzFOZVR6cGszSE4wenNLOHNJb0w4clArajBJN0IvTWtOUjBiUVAwdGxtdWpabElZSjFicXJpNCtPVmtNdmtiL3N6bDRocEFrWkZubFd1THhyc2Z2WERXN1I4YmJvMkZXdC9BZS8vejFxaElDRTBQdUlzMGZTcXVuT0hXMGhNR1hvU0Rma1J5c29lZ2ptQXJMQ3pNR3BJNmpGdFJTWkl5Q2dtc2F5T0VKTGRzMmJLS1VycURQM3U1dUxLSUNFRDFwVUJPQlNCN1B0VS9pcTdUZHgvNDB6UDJnb0dWV3lOQTBneEJtZlBXcUdDRm9HbW9aWnlLNnhTQzV1ZWlNQzg4NFBmU0wwQXRMUzFGZTNzN290RW80dkU0ZW5wNmtFZ2trRXdta1V3bWtVcWxvS29xVkZXRnBtblFOQTI2cm9OWjA2ZFJTZ1VBNnRWWFgzMjRyYTN0d2R6YzNKWDhHY3pGbGMxZWlFREp1RS85ai9IaG5qM3I3L2p2eCtJT1VFczdOa0xTQlFOQ05DTjlSUVZSaENqTGtGd3VTQzRYWkk4SGl0Y0xsOThQZHpBSWJ6Z01mMTRlZ29XRnlCMDJEQVVqUnFCMDNEZ2dGQnE2WXdPQVVDZ0VwOTYyTEkyN0dTRXBISnAyOC9MeU5xWlNxWWY0czVlTDYreFZQQjVmWFZOVHM0Y0pRVE9nUmdoaDErcnBBTktOdUtKSXpWWXlXWmFoR0p2YzNXNDNQQjRQZkQ0ZkFvRUFjbkp5a0orZmo1S1NFb1FHZ1pvajJJQjBJY0hzYldPSDVMUE5rdHFhZG5WQ2lOVnBUQWhKdmZycXE0OVFTdC9tdDUrTDYreVRydXZ2UFByb295K2lmMTZOaFZyS01Ec2FJVVEzSnBpc3RaOG0xRXl3ZVR3ZWVMMWUrUDEraE1OaDVPWGxvYWlvQ09YbDVVTXp3VTRmbEdVWlpXVmxLQ3dzN0ZjbGRUaHhkNkJDZ2dvZzlkblBmcmFwcmEyTmg2TmNYR2VoOXV6WnMvNDczL2xPTkdzSTJ0ZTNabXgySjFuZG11blVQQjRQL0g0L1FxRVFjbk56VVZoWWlMS3lNc2l5UEtUdlNjcjJGMFZGUmVqbzZFQTBHa1ZYVjFmV1hCdWJaOU4xbmVxNmJtNjEwaWlseEhCdFFpUVMyZFRiMjd2QzVYTE41MDhGTHE2elE4ZU9IWHU0dHJaMjd3QnV6ZG8rWmJnMWFvTE5iUGhublpycDF2eCtQNExCSUhKeWNoQ0pSRkJTVW9LaW9xSWhmMS9TUUg4NWJOZ3dkSFoySWhhTG9idTdPd051WmdIQnVLaXU2OFJXU0tBQWRFcXBWU1g5NHgvLytMOXo1c3daS3dqQ2RQNlU0T0lDOXUzYjk2bjkzbFZWZmVtZWUrNTUyUWExWHB0Ynk4aXJBYUNFRU90ekdDWUlBSkRHUnZxdHdSSHJZOGY3V0EwSU5wL1BoN0t5TXN1MWRYZDNXMkJMcFZKMjEwWTFUU082cmxQakc5TU54MmJtMjRSdmZ2T2JIZE9uVDMrd29xS2lGa0FKZjFwem5ldXFxS2o0dEg3cnphKysrdXFHVmF0VzlUaUVvTDJ3RlF5TXZKcHVPRFZxT0RScTV0TE1Ja0U0SEVadWJpNEtDZ3BRVmxhR3Fxb3ExTmJXRGptM05pU3dBZWxDd3JGanh5elgxdHZibXdFM3R2WERDRWRCMDRMUjEwWW9wV29hemtTb3JLeDhJeHFOL2s4Z0VMaVhQNjI1dUQ2ZE9uanc0Qjh2dWVTU0pnTnFMTkRzSWFocVRpWVJRcXk4bXIxWTRIYTdMY0FGZzBIazV1WWlFb21ndExUMHVLRUdaQ2tlT1AxV1lWdEEyRUY1V3dzSWRSaVNaOGV0VW9TUVpEQVlmQ0taVFBLUkt5NnVNMVIxUzZhaXF1cG1ySTMyLzd0NFBMNjZyS3pzYldTMmRsZ2hxQzJ2WmtITlZnV2wyYURHdG5aOFVrYzdKTEFGQW9HTUZwQlFLT1E0bFdDRG0xa2x6UmlTTngrSTU1OS8vbUZkMTdmd3B4QVhWMXJSdXJWWU11OGFUQjFmZzZxcUdveWZOQjJ6Rnp5Q3JhMW56dmVvcXVyV2xTdFhib0Z6QmRTQUcwMVNTbFZLcWFicnVxNXBtcTVwT3RWaHVUV3FLQXBFdFF2dDdURWs1WFE0R2dnRUVBcUZNbG83QW9IQUovbytwYUgrdy9MeWNzZHBCSWRjVzdhUUZFYk9UU1dFSksrOTl0cERqWTJORDFSVVZGUVFRcXI1MDVyclhGYnIxZ1dZUFc4ZEdvSVRjTzMxODNGREtSRGJ0UTBiTml6Rm5LMnZZY1V6RCtLNnlPbjlIaW1sRGR1M2IzOTZ3WUlGTVljUXRCZnBJZmNrcFdiQmdHaUVwRWVuS05WcEt0R0RoTWVIZ0dHQ3hHZ3ptbzhvQ05lY2x3RTFNNy8yU1VMUTR3WWJBQXdmUHR5eFF1b3daa1YxWFNkbVpRTUExWFdkYlFFaGhCQmgrUERoYjdhM3Q5K2ZrNVB6aStQOVhyaTR6aDZydGhYTEZxeERRMlFtVnExZmpta1d3RzdGTFRjc3dZeVpxN0JrMlZaY3VYd2FYS2ZSckRVMk5xNlpPblZxazgydFpZYWdsS1lMQmtUUVJNSHFWNE1rYU9qdVNhRTNucUJDWGhBdWx3dWlMSUFRRVc1dlptdEhhV2twaGc4Zi9pOTlzOEx4L0dPdjE0dUtpZ29VRnhkbkhFeVo1ZFJkS3N0eXY1RFVOcFdReU0zTjNkRFQwL01yL3V6bU9uZTV0Z1liamlxNGRQNUMwU0F4c2dBQUlBQkpSRUZVQm1wcEJTZmVnc1VMYnNDVmtRUmFiZm12WmFzWFlNYlVHbFNOWDRDdGFkK0hyUS9jaGhsVHg2T21xZ28xazY3QnpVczJvU25CZk1LdHQyRjgxWFFzV3JzYWkyWlB4L2lhS3RTTW40b1pDOWFpemlHZmxxamZnRVd6cDJQc2lJcUhxcXVyMzJlY1dpOTdFVUlTWUErUVRKL2NvWnVOdUxMTEI3OGtVSUhxSUhvNzluN3dBZDQ3bEFRaGNieS82Uzk0NUsvdkl4V0pvUGpJVTVnemF3NXUvLzJmY05zMWsxQlROUlZMNmdCc21vZWFxa2xZc0Qzeis5dTZZRHlxYXVaaEUvdkJwcTNINzVLS2k0c0hkRzFtT01xR3BHWUxpQkdhc3ZrMkFZQXdaY3FVaDk5ODg4MUNXWlp2NGs5enJuTk5kYS90UUJLMXVHS0tVNndad2JSYmwySmF2NDl2dzhwbFZiamkrdmxZVkZXTGFrU3hkZEVNekZtVHdPUWI1bVBwQkJkYVgxdUhsYXR1d2V6b0ttek9jSHNOV0xOb0ZhNmRQeC8zelE4aXVtMFZscTFjaU5sUkZ6WS9lQjM2dm92dFdIWnpIU28rKy9rbjlyZjhnKzFYNnhlQ3NsQURvRk1LU296RlQrbThtZ0ovVVNtS3ZWNzRQQkp5eHBZQnh4cnd3V0UzeGw0eEhSZVBIb054UlVVWTVnMUJrUko0ZnZrS2pMbjJSc3lmV1lXSkVRQk5RM2UvQzJiUCtXVGhYM1YxTmVMeGVOYjJEd1pzR1NFcHBaVHF1bTV2QVNFN2QrNFV0bXpaOHREMDZkTUxSRkc4bWovVnVjNGRKZERhR2dXVUNDSXMxNkt0YUdXZEZsd0lSb0lNbkVveDg3NzFXRDR0YVB6N1RWaXhIWmh3eTRONGRPSEU5TCs3L2pwRVdpZGg0YWEvWWZ2eWFRd2NGVXhlL0RqdXU5SDRnbE9tb0N3eEhUTlhyY0NxdXV1d3NMYnZhNDYvODRuTm56bXk0ZmtOOFI2blhqVjdGVlFsQXRHaFU1MVNuYVpTS1ZBSVVFUVpzaXhUYTdqZGx3NDlKYmtadTQ1NFVUbHVJaTQ1dndMRHk4cFFmU3k5UnEvcWxzZXhmbUh0Y1lmZWRTdVhZTjNCcWs4R05sRVVVVlZWMVE5czdEU0NiY3lLbUlVRUkrZkdGaE1JSVVTNDZxcXJtdXJxNmxiVzFOVGtFVUltOFNjODE3a0N0a1FpRFJFWDh5cmV2dVFhM0xEdWFOOEhBak94NnQzbERKeXFNWGxpa0lsWnI4VHl6VmZhUG5jUTFXVVJZSHNyb2dtZ2p4SXVSTW9pR2RDY09QTTZWSzFhaWUwN1dvRmE4KzhtdkZXdTdIMTYvdno1VVZ0T3JjZTRlbTM5YXVsR1hJbFFVSjFxdWs3VlpDK090U2RvM09WSFVYa0llVVpyUnlBUWdCU1ZJWW91QlBNTHJXWmM4VjBDSUlEYXliV2ZJSjlZajYxYkc0QXhDejU1d2o0Y0RxT3lzdEtDVzdZS0tldmNUTGdaVXdrZ2hKakZCSUVRUW1wcmE5OXJhbXI2YlVsSlNTNGhaQVIvMG5PZC9US0JaZ0RPZURYWDNuSWZWbDJiQUJERnRtWHpzV29vb1ZpMERtdFhyTUNhVGR0UmR6Q0dwR1hRcXROSUdvZ1VaVlVvQTFEZjBBUWdBa3BSMzlQVDl1ZDdaMTdWWW9OYVh3V1V5YXNadVhNcnJ5YkxMaXJMTW1SQnAycWlGL0dlT0pvYlBnTDFUY2Jra3JSamt6c1VTSklMNGNJU1ZGWldJaHdPLzR1UFpTc2FXZ0ZsWXZXL1Zva3NLeXV6QnVSWnVHWEx0UmxRTTRlL3pMQlVNeDRjQWtBb0t5dDcrZWpSby9mbjVlVXRBaERoVDN5dXN4MXNrVWdRU0RhaHFSVkFtZUcxcXFkZ1dqVUFSTkc2U2hsQ2pxa09EOHllZ2VXdEV6Rm40WElzckM1RDBBWFVyYndaQ3pjTjFUdGFPbnFndlh2MTRjT3ZOQ0p6c0wzWElhK1dNdk5xNWpKMWRyckE3WGJEazErRVNpV0ZwcjM3Y0tUaE1EQ2hDams1T1ZEYVhaQWtEL0xMS2xCV1ZuWkNIOVYvdWNWaTFLaFJHYTZORFVudEozOVFTdGw4bTI0T3d4cmhLU0dFRUVvcHljL1AvM3RuWjZjL0ZBb3RCdURtVDM2dXMxbTFsMDVFWU0xVy9HMVRFNzcrOVUvNEF0K3hCbXQyQVpldWVCQ0xyK3NMVVJQQklRWjA5ZStnQ1VDa3FxejM0TUdEcTY1ZThYWWQrdG82elBDVGRXdjlRbEJDcUs0bWswaUpMbmg5TWhSRnNmSnEza0FleXZNUG9MTXRpVlFnalB6OGZMaU91cUVvUGhSVmpSclNMd0Fna1VIZi9vcWdLZ0lrbTVxT3I5M0RTWVFRakJneHdwcE15TS9QdHlZVDdHTlhaZ3VJYmZHeU9YSmx0b0FrQVNUQzRmQ2Z1N3E2ZUJzSTExbXY0TFJiY0gxcEV1K3NXSUJINmhMOXdxdlcxdVFRN0ZZQ1VRQ0pLUFAvSitydy9JNVd1eHNERUVOOVhUMGJ3MkxUcWswNGlER1lNZ29QR2VOU0xOUjZHYmhsbkxGbXZuN05maldCZ0ZJOWhTVHBLeFo0dlY3NFBDbkU0Z1NDUHc5bGhma29LaXBDUldFSWlxSWdtU1NELzN5UkNDS0lvYjYrS2VQbmU2MHV4dnlqYWt5YlZnWHNXbk5pbW1JRGdRQ3FxNnY3RlJJMFRjczJJRDlZTVlGUVNvbmY3MytzdTd2YjQvRjRidWRQZjY2ek54cWRpSVVQTGtMZDdLVllPbU02bnIvdVNsdzZwaFE0Mm9EWE5tM0F0b1lBSnR3eUV4TUh0SDNYNHNyOGRWaTNaRGJtTlZ5SmFyUml4NllOMkhFd0NTQ0tSQlFBVTJ2WXRYdzJaalJjajJzbjVPUG9hMnV3K205SEViNzA5Z2QvTUtuZ0h3Nmhadzh5anlPeU9UV3pFVmVpYmg4UTYwclMrTkVXSkx1RHlBbW4wQk5ydzc3Mk5yUW5YYWllUGhVWEdJZEdqblNOUXVpSkxWaXpaQWx3eGFXNDdzWnBLQnZvNXl0ZGhWWExic2E4Z3pNeHdYVVE3MnphZ09jYkFEQ0w0R3R2V1l5WkcrYWN1Rzcvd3NKQ3gxeWJxcXBzUDF0R1dNb1dFNHhQbzluRDBsbXpaajM4NXovL1dYRzczZC9tcndDdXM1WnR0Vi9INDV0cjhjaXlGVml6ZFMxV3JJc2hxZVNqcW5ZYWJsazVIL092ckI2NFNoaWNocVdQTDROcjBRcHNXTDBTVzExVm1ITDlmWGg4d3ZOWXRMSUpCNW44SFJEQUZZc1dvMnpiQ3F4YzBvQ29xeFFqcjczN2tmcFhmN2tWL2FjS3JCQ1VFQ1FvTlZmb1dWRHJhOEtWWlNpS2o1YUdLSHFpY2NSN1kyZzlITU5SUVVHNHNBcFRwMTZPYS85dEpFcExTMUZWVllYeXkrL0U0amVic1d6REtxeG96Y2UwRzZjTkRQOUhseUc2WUFVMnJWcU9yWUVxVEx4dU1aWk5YSUdGR3pJZmgrV1Byd1JoRDNJN0VkcTllemQyNzk2TnhzWkdIRHAwQ0VlT0hFRjdlM3ZHMFVjR0FBa0RRR0wwdXdrQVJFcXBCRUFHNEtLVXVuLzBveCtGZi9qREg5N2ljcm5tOFpjQTE1a3FUZFBRMU5SMFpwK3h0dlUyakorekZkTld2WXY3REk3RVlySGZmL3ZiMzk3OGh6LzhvWWR4WlQwQXVvMjNQWVFRcTJCQWpHMVQ3UGxxek5IZTFobHI1dnluZWI1YVNVa0poZzhmanBxYUd0VFUxSnpVSC9PRXoyZU9IajNhQ2tudDdSOVpYSnQ1NGk2UVdTbTF3dEtmL09Rbm5aRkk1T0c1YytjS0xwZHJMbjhKY1hHZEdNVmlzVDhzWHJ4NGl3RzFKQU8xSGdacS9VN0RkYXFBc3NVQ244L25lTHgzWldVbFJvOGVmZEovcmhNT05rSUlSbzhlYllITjN2cWhhWnAxNUMrVGI4dFdLYlUrNTNlKzg1MDJSVkVldnVtbW04RGh4c1YxWXFDMmRPblN6U3RXck9oQ1pxR0FiY0RObGxmVEJVRmdOMHhSY3hHTC9jQkkwNjJaVUdPUEJ2L1VnQTBBUEI0UFJvMGExYTlwMTliUDFxK1lZTGcwMDdXeGNDT0VFREp2M3J6V1JDTHh1N2x6NStwdXQ1dUhwVnhjbjFESjd0anZGeTlldkdVQXFMRk9yZC9xUE9QQVNHcDNhdWJLdkZBb1pCMFlXVnhjaklxS0Nvd2FOUW9lejZuWmRpL2VmZmZkSitVVG13ZFFtbkF6SzZRczNHelhZQmluQUxCeDQ4WVVJZVQ5aXkrK1dKVmxtWTllY1oweG9wUWlHbzJlZ0E3Nms2aktxM0hEelRjODh2U3kvMi9MNzM3M3UrNXNUZzBPa3dWc29jQ0Vtc3Zsb3V3SnVQYVZlV2FoWU15WU1jalB6ejlsUCtaSlBRT3RzTEN3M3pTQ1E0VVVUSjdOcXBRQ2dHMWdIb1FRVUVxeGRPbFN2UFhXV3crdVhiczI2ZlY2ZVNzSUY5Y1ExZEhSOGVBVlYxeXg5YTIzM2twbWMycXdIVVBFVmo4eks2QjlUczNjMnM3bTFJcUtpbEJSVVlHUkkwZWlzTER3bFA2Y0ovMXd4L0x5OGd6WHhrNGoyRjFiK3BjZUpRQ29xcW9tM0RRMkxEWGh0bkhqUnZoOHZ2K054V0s5ZnIvL2R2QUpCUzZ1Z2RUYjJ0cjZVRUZCd1QvUS8vVGJnYUNtRVVJMG9lOElvcXpoWnpBWVJEaWNuaW9vS2lyQ3NHSERyT2I5VTYxVGNtcHRkWFYxMXVQRG1WTjJUVHR2NWRwVVZUWC96aEZ1QUJBSUJQN1kwZEhSSFE2SGJ3T2ZMZVhpY3RMUmd3Y1ByakltQ3RqWnp4NWIrT2tJTldiQmNRYlVuRmJubVZBckx5L0hpQkVqVUYxOWVrNzlQMlhIY2RmVTFHVGJpK0RvM0V5NEFlbitvQUhnUm5OeWN0YTN0TFIwUlNLUmIvRlRRYmk0d0JxRit2cjYrdFVqUjQ2c0c4U3BKYkpCamMycFpRcy9uYUIyc252VnpnaXdBY0RZc1dQN3dTMEwyQ3k0bVFtM2JIQXovMXhZV1Boc1kyTmpkTml3WWZNRVFiaUlQNlc1em5WcG12Yld1KysrKytjTEw3eXdFZjFuUHdkcjZiQ2dObGhPellSYVlXRWh5c3ZMVVYxZGpiRmp4NTdXbi8yVWdvMFFnckZqeDJaMWJRNi9iVmdINXdnMzQvTlNTaWtkUG56NFAzYnMyTkU1YnR5NGI0cWllQlYvYW5PZDhUcjJ1NVB5YVZNcGJmT1diYnVldm1ybS9TMU0rR21mL2V3aHhycThUS2hSalJCS1JZRlFVYUJVbG5USW9nNlhwTUl0cS9BcUtmamRTUVE5Q1lTOVBjanpkNkV3RkVkNVhoVFZoWjBZVzk0R0VuMzkzQUViQU1peWJNRnRFTWZHNXR1eXdZMGFINmRtYURweDRzUVAxcTlmdi95YWE2NXBWUlRsYS95VnczV3VxYnM3K2NURGoyMTdmdjRkZjQ0T0FMVmVBaVJBWUt0K1FpTUVhYWlKaE1xeUFFVVc0WEpKMU8yVzRmVW84UGxjQ1BqZENJZTh5TXYxbzZnd2hQTFNYRlFQTDhEWW1sTElrbmphSDRQVHN2TE83WFpqN05peGpuazIxcTJ4SVNraEJLbFVLbjBVU1ByLzAvcllsdW5jWnN5WWNiQ21wdVpYYjd6eHhoRy8zejhmZkxVZjE3a2h0YTA5L3RENGYvdXZsdzgyeCswN0N0anoxRXlvMlp3YWRJR0FDZ0toa2dFMVdSYVE2RXpRenFBTFkzTFNVQXNHR0tnVmhGQldtb3ZxNFJHTUhWTUN0MXMrSXg2STAvYUM5L2w4RnR6c1lMT0hwWVFRYXVUVDdLMGc5Z2tGYXNKdDkrN2RlaUFRZUt5bHBlVndKQks1aFM5bDVqcFR0ZjJlKzNIejBmOFg3LzY2OWhQdkRhV1VOalR1TzdxbWVzS2k5NUc1VGFyZmVXb00xTlNCb0tZb0luVXBJcWlRUkZLUjRmZTVFVENobHVkSFVVR3dEMm8xcGZCNVhhaC85cC9Zbmo4T04zN0c3L0JkeHJIMXZtZXc1T245YUlwSmlJd2JoOFUvbVk0clM4NGlzQUhwYzl6R2poM3I2TmpZdkJ4Ny93YUJHMldkR3dCYVdGajRiRjFkM2VGUm8wWjlYUlRGei9LWEVkZFpaOU5VYmV2Mk54cWVubnIxTDV5V0dkdVA4MDZBOUIzcDNRYzFRZ1VCVkpJRUtrdkVnSm9NdDF1QUpoS0lMaGNDQVRkeVdLZFcxZ2UxUU1BTlFFWGRjNjlnWlVtVkk5aGFuMzBHdHowdFllbGp0K082a2w1cy9kRWF6THZqRFd4KzdDS1VuVTFnQTRCUUtHVEJiUkNvOVlPYmtXOWp6M096Z0diQVRRZWcxOWJXdnIxNjllcERNMmJNK05qdGRzL2hMd1d1TTFXSlo5ZGgvSVBBamFNVDJMcXpEYTFKRjZiZE5oUExQNThIRjFxdzdEL1dZUHZvS3JqMnRLQXBsb0JZTldiMWVTUFZMYis1NXk4eFpMWnoyTU5QYSs2VFVxUUVRalFRNkNiVVJBRlVUZWswbWRRQlFxZ2dFNVNWeXZCNlJHZ1MwTzEyR1ZEelFEdTBIMzk2TG9aTzNZdnlDOGZqaHo4ZWp1dUMrN0hrUDU3QzJrTWFZbGlEU1hzdXdlTVBYNFMrTUVuRmp1Y09JZmp2czNCZGlRVEFqMmx6eHFINkt4OWllK3dpWEorb3c3eXZiRVhrWjdkaTZXZk9BckFCNlkxWEE1V0hUY0FSUXN5TEVrS0ltWE16YzIyNnJsTzJ2NDExYmpmZWVPTWhBUGUzdGJWOW5KdWJld3VBWXY0eTRqb2pkZWdZY05jc2JQNlpIOUZYbjhIME8xN0Nwcy9PeEhVQkFFaWdWUm1EOVgvNVFuUHk0LzEvTEp0d3o5dGIrNWFxSkJtSXNVZDVKd2hCa2xLa1FLQUtJQm9JTklHQUVvSG9va0JBVXhyVmlJQ2NQQmYxU3hUdHJRbTBkSXNvSzNCQmxRVW8zblQ0NlRuNk1WYnZDdUsySDgvQXZNdHo4ZkZqeitMbWIyOUc1QzlYWWZGZmJzV0UyMytOWlNVMzRPVUY5aEdxWHJUR1ZFUktHQ2VYNzBjRXZXZzlDbUQ0TU54eTE3OGpPTzRzY1d5bWNuSnlNdURHUUt3ZjJPek9EUUJoNWtyN09UY0F1dUhlYUY1ZTNsL3I2dW8rSGpWcTFFMmlLRjdPWDBWY1o1eEtxakRUQ09XQ280ZWhPdmtHV21NQUFnQWdvbVp5eFV0N3QzKzQ0WktyZnRHRWdiZXo5OXBDVHhWSWg1NkVRQmNFUWdXQlFKSUlKUnBCVWdjbGdnaVgzNFVSdVVFb1hpK0NBUWtwUlVEVTcwTnhnUXYxcjNXaCtrdWZ4N3pMaHlFbjdFWE9iWmZodXFmWFljMC9wbVBLWUltZWZxc2JSQUFxWWtrQThHUGlaLzFuVHlocWg5dDU1NTNYRDJvRFFJNlN0UHJsM0N3YjE5Y09Zb2FtV20xdDdkcy8rOW5QR3Ivem5lL3M4bnE5L01oeHJqTlhSalVoWVd4ajZVbHBENy95Mk5xWEgzNXVXNDh0bjlaLzd5ZVFwRUNLV0ZDRER2UkJUUlFKbFNRQ1dSS2dlQ1hxN2traDJ0Nk56clllQkNLNU9ML1lqWnl3Z3FSYlJHY29pUEl5TnhwVUwyb3ZISUdjc05kTUpxR3FSTVh6UjNzeDZMaTJZditBQmtCQ1FEbnhEOXNaMXdZUkRvZUhCRGQ3V0dxK2J4eU5wSnRBWTRvS09pSEVkRzc2SFhmY29kOXh4eDMvZStEQWdiMmxwYVUzRTBJbThsY1IxNWtxcXROM2R1MDVzdjd1VnhyM0FvMnFRejR0dzZVUmdpU29CVFNORUdpZzBFRkFCWkZRU1NCVWt0THRISW9pVWdrRXZrSS95djBLZkxLTzVvK080dDJtZkV3WTRVZlNJNkV0TndjanF2TVFyWGdmcjBaMTVqdUxvK0dvaEVqK1lHZFF1QkhKbDlCNktBNGdsUDdRMFRoYTRVUGtKSnhtSkp5Sk56RVVDbUhjdUhFWU9YSWtoZzBiaHVMaVlrUWlFZVRrNUdSYjdVY1ZSUUd6Mm84eXEvMDA0NHoyRklBa0lTUkJDREhQYys4dUx5L2Z1bTdkdWgvMjl2YXU0aThmcmpOUnFxNnRmdkdKTGY5VE8vbC9kaU56ejZmMVBHWXVhMFVlTloyYWNaWmEraGM4Mjg0aEdJMjNJbExIZXJDL1RZWHNkU09VNDBlK1g0TGk4Nkc0S0loOG40SkFRVDdHamFuQkYyY1BSOTJxRjdEaGtBcWdGenNlMllvTkdJTWIvaDhKZ0FTWFMwS2k3UmhhRS8wOTFKVExoaUg2M0hhc2JWU0J4REZzV3ZVTzZzZU53cFJBR3BBN1hteEFmZUlzZFd5bUFvRUF4bzBiQjBFUUhDOUNpUDJ0NWR4U3FaUlpNV1dMQ3BRSlRVMzNwZ0hRdnZTbEx6VUIrRTFUVTlQT2twS1Ntd2doRS9qTGlldDBTOWZwdXgvV3Q2OWYrK0diZTdEc1RaVUpQWk9PTG8yQkdhVjkrd2xJdWo5TkZ5aEZTdGRwVDFLRXp5dENVU1RxZGtsd3UyWGtqMUNnSEl6aG5UZmpvS0tNZ29waG1IMVZHU3JLdlVnRVhEaFlXb0pBd0kzQTU3K0FCNDgrZ3lYLytXc3NpRW1JakI2RHhiK1pqaWxHeUR6bCtuRW91K01wVFAzUFMvRE1FeGVEYlI0Tlh2WHZlUERRYzFnMDk5ZFlaUFN4M2ZlVGllbFdqNlA3c2ZKSFcxSDJtMXV4K1B4Ly9iRTc0VnVxVHJSNmUzdnh3UWNmb0w2K0hnY09ITURodzRkeDlPaFJkSFoySWhxTm9xdXJ5OXA4bFVna3pGMExoTmwrQlYzWENhVlVNQzhqYXlrQmtDbWxpcEhKY0FGd3JWcTFLakpyMXF6cnZWN3YvK0V2TGE3ajBTZmFVcFZsVmpRYTYzbjBnZjk5Y2RzZGR6OFZSMStCZ0IyUFlzUFFkT2dKTnZRa09rSC9Jb0VzQ1pCbGticVV0THZ5dUdWNHZhNk1pWUw4dkFDS0NrSW9MOHV4eHFUT2xJbUNUNzFqc3lKenR4dm5uMzgrUkZIc2Q3SHV6ZWJnc2hVVktKTjdNNHNLT3RKVlV3MkFPbWZPSEczT25Ea1A3ZDI3OTYycXFxb2JSRkdjeGwreVhLY3M3RlQxbDNlK2YrQ1pDeSs3OTJNRFVuYVh4dWJVa2dSSVprd1JvSzgvelhCcVZCU1lJb0VpVWtXUjRIYkpjQnRROC90Y0NBWTh5QWw1a1ovSHpINVdGV0RzbUROajl2T3NBeHVRSHB3ZlAzNDhKRW5xQnpiN1d3WjJWQkFFSWdnQ1ZGV2x6TDZGOU42L3Z0RFVxQlFSelF4TkFhaWpSbzE2ZmNTSUVUdGZmLzMxNjNKeWNtNENVTXBmZGx3blM1VGk0SkhXWTA5K1p0cFAzbWhLejNteVVFczRYRWtIbDlZWGVwcVRCR0pma1NEdDFHUzQzUkxjYmdVK2IzcjJNeFR3SUJ6MklXSkNyU3dYSTRZWFl1eVlVcHlDaFZMbkx0aUFkSHZIZWVlZEIwbVNqZ2R3L1NxbWhCQnFoS1pnblp1WmQwTjZHNzBHUVAzb280L1UzTnpjOVJzM2Juempzc3N1KzZMYjdiNkp2d1M1VHFoQy93ZGRYVjFyL3ZyWHYyNzc2bGZuZFF6aTBneWdFUk5vS2VNWHNYVitHck9iQUpJa09lNzhORSsrdGUvOVpJL3pQcDJIUko1VFlETlZVMU1EV1piTkNpaU1OV0NPSWFvSk4rTXRZZUFHUFMzclNDU3pnZGZKdlYxOTlkV05BSDViVjFmMzZzaVJJMmRLa3ZUdi9CWEo5YThxbFVvOXYyUEhqazJUSjA4K3dBQXRHOVNTRE5SVTlBMndteEdIdFd6Rk9NYmJmSjFRUlZGZ1B5RFNoRnB1Ym03R2lyelRlWnozT1EwMklMMUR3V3p2TUM4V2NFNmhxWEhEcmRDVXFacGFybzBKVFRYR3ZWbFBvdHJhMnJjQXZOL1UxUFJDY1hIeGwvaEp2VnlmUkxxdXY5blEwUERNeUpFamQ1bS9QRzFBU3pxNHRKU0RTOU9aaXhxLzJMTkN6ZXYxd3V2MUloQUlXSHMvQ3dvS0xLaU5IRG55dEN4ZTRXQmpWRjVlbmdFMzgyYWFvYXJkeFJtZ3MrQ1dTcVVvSWNRODhOSmVXTkFad0dXNE53Q3Bzckt5RnkrODhNSi9QdnZzczFmbTVlVjlpUkJTdzErdVhJUG4wZWllNXVibXA2ZFBuNzVqMTY1ZEtwTWZZM05wN051a0RXb3E4MHZYQXBxNUVrOFVSZmFYUFhXNVhCbFFNNWV1bUhzL0k1RUlTa3BLckdYR3AzcEYzc25VU1Z1WWZDcGsybW1uZkp6NWRvQnhMSHRhMUp3cmhRRTRHSEN6R24xTjJBSFFtNXVidGVYTGx6ZWtVcWtYTHJqZ2dtYTMyMTFDQ01uaEw5OXpHbHlPQzVNcHBZMnRyYTJQTFZ5NDhFK3paOC9lZi9Ub1Vic3I2M2RrTjlMTFZYcnQrVFJtY2JIVFJuWW9pa0lWUmVtWFMyT0J4aTVkcWE2dVB1WExqTGxqRzRKeWNuSncvdm5udy96dHhFd2daT1RoMkN1UlNEaUdwb3g3TTRmckJWdDRxZ0ZRamZBMEJTQjE3NzMzSnUrOTk5Ni9MRjI2OUlWdmYvdmIwME9oMEV4K3FDV1hBYlNHMXRiV0RjdVdMWHZybDcvOFpTK1RHM1BLcGJGaGFBcnA0NFZVUW1CR0N4cEEra1lGQVVwQWFQcXBTa0JCUUNtb1RnRktDWFFLYURxRnBnT3FScEhTZ0pRR0pGV0toQW9rVWtCdmlxQW5SYkQ3b3dNQURweFZqLzJuMnJHWmttVVpoWVdGanFlQURISGUxRzdnekJONzJSTkM3TlZUeTcwQjBMWnMyWkw0K2M5L3ZyZTd1L3Y1Q3k2NG9Nbmo4ZVFTUWdyNHkvdmNjMnpCWUxDdXBhWGxEOS83M3ZjZW56MTdkdU0vLy9uUFhnZUgxbStucHkybnBoSmlnZERJcDZXZmk0UUlFQVdSaXBJSVNUSnlhYklNUlVuL2NuZTUzWEM3UGZCNmZmRDUvQWdFQXdpRndzakp5VVYrcEFERnhTVW9IellNVmRVaklFbnlXWGt2enZqSmcrUFZ4eDkvaklhR0JqUTFOVmxUQ2gwZEhZaEdvNGpGWXVqdTdrWjNkemQ2ZTN1UlNDU1FUQ2JOVGZXRVhlcXM2em94TCtOeE1xY1cyTWtGaVZJcUE1Q1JQcnZBdXFxcXFwUlhYbmxsYW1GaDRUV0NJRnpNWC9abnY1TEo1UFkzM25qamhhOTg1U3Z2TnpVMW1TTk5yRU96RndneUhKb3gwOHlNUWhIemx5aGxLNTVtb1l3dEVHUXJFcGp0SEdiNFdWWldocXFxS2xSV1ZwN1Y5K0tzVzNKU1dWa0pqOGRqRHNlYmVZZWhGQmlvVVUwbHFxcGE0YW5aOTJhNk5TTTgxUWNJVDVNQWxJYUdCcVdrcE9RRkFOdjI3dDA3b2JLeWNyb3N5NS9uTC8relQ0bEU0bSs3ZCs5K2RjS0VDWTBNek5pd00ra0FOUloycWdFMXE5cHBnSTJheFFIanVVbVo1NjRGTkRPbnhoWUovSDUvUms2dHVMall5cW1kVFVXQ2N3WnNBRkJZV0FpdjEyc0J6dTEyZzMwUzJPSFcyOXRyQVM2WlRHYkx2VkZLS1dIUGVEUFBkMk9lbUNuRHdWbUFBNkNNR2pYcWRRRHZ2UERDQzA5TW1qVHBVci9mZncxd3dvOTU1enExWVdkVExCWjc3c1VYWDN6N2kxLzg0dEVzUUhPQ211bk9yR0YxSTQrbTI2dWRCdFJnVmp6TjU2dVRTek9oWmk4VW1PMGNadU50SUJBNEorN1BXUmVLMm5NZWUvZnV4YjU5KzNEbzBDRzB0TFNndmIzZEdxQ1B4K1BXQUwwWm1ocEQ5RWdtazFCVjFYUnZHZUdwc1hoR29KUVN3OEdaNGFsNXNTRXFHNnJLQUpRYmJyakJ2WHo1OHNrRkJRV1hTNUxFVC9IOUZFbFYxUmNQSERqdzZ1MjMzNzdycWFlZVNnMFJhQ2s3MEFDMktKQUJNOTJjZDJiRFR0YWx5YklNdHBYRFBra1FEb2VSbTV1THdzTENqSFlPOG1tZGorSmdjMVpUVXhNKy92aGpORFUxb2FXbEJXMXRiUVBtM2N6Y1d5cVZnbmxLQ0FNNFlxd01KT3cxQU9Da0xJQ1RBY2liTjI4dXYraWlpeVlIQW9IcHZCL3VqUDBGdWFlenMvT2xiZHUydmZ2RkwzNnhqUUdTRTlCU1dZQ20yb0ZtSG54cWhwdDJsOFlDemV4UE0xM2FRUG0wdkx3OEZCWVdvcXlzREpXVmxTZ3JPL2VDZzNNQ2JBRFEyZG1aVVZSb2JXMUZSMGNIamgwN2hsZ3NaaDEvMU52YjYxUllnQUUyWXJvM0ZuQk1nWUVGSEZ0a0VBMEhaNGRjeHZYZWUrL1ZWRmRYWCt6eGVDNEhVTUtSY2xwaGRxaTd1L3VsdXJxNkhaTW1UZHFQdmlyNFlFQ3o1ODVZVjJjUE9hbDVJQU9UNDJWZEdqdnI2Umg2c2syMzdNeW5XU1N3OTlSeHNKMkYwalFOOWZYMTJMOS9QNXFibTlIYTJvcTJ0alljTzNiTU90dXRxNnZMT3R1dHQ3YzNBMjRPN3MwTVQ4MHozd1lDM0ZBZ1ozNU0ycjE3OTdpS2lvcUwzRzczWlJ4eXB3NW1QVDA5Mno3NjZLTjN4NDhmMzJnTEY1MkFwZzRSWnYyQUJtc1BCeWdSQ0JSWjdoZDJzaTdOTEJDNFhDNXIzdFBuOHlFWURDSVVDaUV2THcrUlNNVEtwMVZYVjBNVXhYUDJYcDVUWURQVjNOeU1mZnYyNGVEQmd6aHk1RWhHYUJxUHh5MjRzWWRYc25CakFjY1VGd1lDSERIQUpqaUVxWklOYXJMdFk5TE9uVHRIVjFWVlRmQjZ2UmNUUXNaeUJKMDQ2YnBlMTlYVjlkcWVQWHZxTHJyb0l0YVo2UXlZQmdLYXlnQk5wWlNxUnFYYzZuRTBONld4UURNcm5icXVVMEVRNFhhNytnSE5IbnA2UEo1K1EreG02RmxRVUlEUzBsSlVWRlNndUpodmxqd253UVlBM2QzZGFHeHN6T2gzYTI5dng3Rmp4eENQeHhHUHh5MjRPWVdtV2NKVEMzQU9PVGpDT0xpTVhCd0RPQ2ZRWmZ6ZHhvMGJpeSs4OE1MYWNEZzhRWmJsaTJGdHh1QWFvbzZsVXFuWDJ0cmFkdjd6bi8rc256RmpScHNCSUgwQWQrWUVOZmFFalg3RkFNYWhXYmt6Tm9kbUZnWTBUWWNvaXZENXZPendlci9RMDRTYTMrL3YxOHBoaHA3RGh3K0gxK3ZsZC9oY0JwdXBBd2NPNE1DQkF6aDA2QkJhVzFzSHJKcXlvYWt0OXpZWTRNQVdHV3lRTTUyY0dhYUtkcGc1QVE2QU9INzhlUG1SUng2cHFxcXFHdTMzKzgrWEpPa3pBUHo4YVoyaHVLcXFiMFdqMGZmMzd0M2I4STF2ZktPcHJxNnUzK1NJTFhUTUJqUVdadXovbzl1QVpqazA0NElkYUdiWXFhb2FGU1VKQWI4dkEyaHNiMXEycXFjNXhGNWVYbjdXbk1yQndYWUNGWXZGck5DVXJacWE3czFwcjBJVzk1WUJPRjNYN1ZWVVpBbFQ3WkF6UTFVckwrY0FOc24yZDJKRlJZVzRaczJhWVNOSGpxd0toVUtqWlZrK2p4QXk0aHpMazMyVVRDWS82T2pvK0dqMzd0Mzd2dmExcjdVME5UWHBObGZtNU02eXVUVHI3OHhtYk52bnlJQ1p6YUdCclhLYXgybXhoWUZrU29Va1NRaUhnaGt1elF3OTdRMjNiTlhUREQzUGxkNDBEclovd2IyeFZWUFR2Y1Zpc2F3OWJ3NjVOd3R3cG5zeklXY1BVeG5BT1lXcTluQlZ0QUhPNlgzUmZ2M2lGNy93WDNIRkZTV2xwYVhEL0g3L2NGbVdSd2lDTUJyV0t0NVByUks2cnU5SkpwUDFzVmhzMy83OSt3OCs5OXh6TFhmZGRWZVBDWmhCWUpZTmFobnZNODRzSTh4a1EwM1k1b21adzAySXBRaVhBQUFHR1VsRVFWUXRtREV1alRLTnRrZ2tVNUFrR1htNTRheTlhWUZBSU1PbG1hRW5kMmtjYkVOV1YxY1g5dS9mYnpYMDJudmVzaFVXc2dGTzA3VEJBR2QzY1NiZ2lBUGtCQWZJRGZhKzZPQUdoZlhyMStmWDFOUkU4dlB6Qy8xK2Y0a3N5OFdpS0pZUlFzb3g2RXJ2VTZaZVN1a0JUZE1PSnBQSjVuZzgzbnpreUpIV3VycTZ0aTkvK2NzZFlBNG1HQVJtMlJ5YTQvdjI1RDhMTS9RdEFLSnNNY0IwWndBZ1NWSS9vTEY5YVd4eG9LYzNtVDdFb1NDL1g0SEFxVGV0cEtRRXc0WU5nOC9uNHk5V0RyYmoxK0hEaC9zVkZ1enV6ZDdVYTA0c09MZzNxL2VOQlp5bWFTYll3UFRDd2NIRjJTRm5BWXFCM0dDWFlIdGZzTDF2NWY5Ky9ldGYrOGVOR3hjc0tpb0toa0tob05mckRTcUtFcFFrS1NpS1lsQVFCRDhoeEU4SThSRkNQQVlJelFNQXpNOEpCZ3pXMmpoS2FRK2x0SXRTR3RkMVBhNXBXa3hWMVdnaWtZaDJkM2ZIT2pzN284M056YkdkTzNmR0Z5eFkwTTNBaTlwQVJnZUFtVzV6V05wZ2wvMjh2V3d3WTBGbXVqTm1TeG9GQUVWUkxKalpXamd5aWdPeUxLTzdKd2xGVVZCU1hHQTEyOXBkR2xzZ0tDb3E0aTlPRHJaL1RhbFV5aW9zSERseXhOcG5PdFNtM3FFQ3p1YmlXQWMzRU9RY1ljZE1Qd2dEUUUxMEFKdjlZci9PUUJjYzN0cmZ6MGlET2J6UHZoM29zb1BNZm1WemFmM2VONDkrZDRMWVlEQXozN2Z0MUlBb2lxQ1V3dVZ5WlFXYXZlSVo3K3FGeStWQ3hiRFNqR2JiY0RpTS9QeDhGQlFVV0FVQ1daYjVpNUtEN2NUcDJMRmpPSGp3WUwvYzIxRDYzb3laVTN0NG1oR21HdTdOZ3B3eHpXQ0Zxc3g5c3Vma2lBT0Vzc0ZPeUFJemNRaGdZd0VuT0VCdElNQU5CRGM3ME9BQXNZRWNtcDdGcmRrVCs0TkNqQ2tBVUZ1WWFjTE1LZ1F3RmM2TUhSdWlLRkpLS2R4dWR3YlFKRW15SEpxOU9CQ05kY1B0OFdEVWlPSDlLcDVGUlVVb0xTMUZLTVE3ZWpqWVRxSmFXbG95M0JzN2tqVlFhMGcyOThhMmg1alZVNXVMQXpOMGI3bzNlMDRPRG81dVVPRFpxckZPUUJzSWJzZmozSTRIYk1jVGRqb0NqcWxPWmdVWUF5OFdubUJ6WnVhZjJUQ1RYUTdFQUkyeXVUUktLYnhlYjFhWFptL2g2SXgyd2V2MTRmenphcXh6MDB5WGRpNGNMOFRCZGdicHdJRURsbnR6S2k3WXE2ZE9yU0dwVk1weWJqYkFRZGQxNGdBNDFzbkJGcXJhM1p6OXozWW9aWFZpRHVFdUdRUnMyVnliUFNTbEE4QnRJTURwVG45bW9EU1FzN1AvUHhsZmkvMnpMZFNFM1puWmdFWnRsVTdyYkQ5ZDErSHorUVpzdEdWblBOczZZZ2dFZ3BneWFhTGwwbmkxazRQdHRDbVpUT0xRb1VQOWlndHNlRHBZL20wQTl6WWc1TXhpQStQazdHNE9XUnlkSFVSTzE2RE9qQTJIVDBhT3piWlVodzRSZVBZTHRpUGRZUWVaM1pXWnpvekpuMldGbVIxcUp0ZzBUVU13R0J4d2FKMXR0RzA1ZWd6aGNBNnV1UHdTbEpTVVFGRVUvdUxpWUR2OTZ1bnA2UmVlc3RYVG9iU0gyT0ZtbTJCd21rZTFRNDV0SFlGRFhnNDJLTUhCMldFQUp6YlVmSm9UekxJNXRxRVdFdXlBd3dBQWd4MWM5andaa3krRExXOW0zME9iQVRPMmZZTmQxRzNQcFdtYWhuQTRuSFcrMDZ4Mm1tSG53Y1B0eUk4VTRMSkwrSXJhRXltSlB3VC9tandlRDZxcnExRlVWSVREaHc5bkROV3orVGNUY0hZSE4xRDExQUZ3bE1uREVSdmdxQTEwNWtWTm9GRkt6Y01HMlY5b2c0TEtDWVlEd0d5b3B4blNvVUxPWVMwaWJDRWwrMjh6M21lY21TUElISUJHN1V1M0J3TWFlMm1haHB5Y25INWIxOW1qaGN5aDlhS2lJa0NxNXk4aURyWXpWejZmRDlYVjFTZ3VMdTZYZjJQYlEreUFzOCtlWm1rUGNRcFJxUWsxVGRPcy9Kc1Q2RXpBTWE3T2hGMC8xODVBYkRCb1pRUFlKd1ZiVnNBeEo3LzIwYmdQZHJBNXNneUkyY0xNZmlBek42amJROC9Cd2s1N0RzMjhWRlZGZm42K2RheVFIV2htSG8wUHEzT3dmYXJrOVhwUlZWV0ZrcElTSy8vVzF0YVcwZi9tVkVFOUhnZG5DMDh6M0J5YmczTndjSGJZbVhCajMyWkFqLzI3VTVIQ1lCMlg3V1A5NEdWNzZ3Z3hCNkJsNU5CWXFObkR6c0VjbWoySDVuYTdrVXFsVUZKU2t0R1BscGVYWnpYWnV0MXUvaUxoWVB2MHl1MTJXOGN5c3dVR3RvTEtBdTU0Y25BTzdzMnBUY1FPdW40RkI5UFoyUUhIL0preVJRblcxZldqbWhQOGh1TFVuTTdoWnovR2dzdm14dXp1TEFObWJJdEdsdnlaWTdnNVZJZG16NkdaVXdPcFZBcVZsWlhJeWNuSm1CcVFKUDVTTzVYNi93SEYxRm5aOGoxaXh3QUFBQUJKUlU1RXJrSmdnZz09Il0sWzEsImRlc2NyaXB0aW9uIl0sWyJzcmMiLCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVRZQUFBRTJDQVlBQUFEcnZMNnBBQUJNQzNwVVdIUlNZWGNnY0hKdlptbHNaU0IwZVhCbElHVjRhV1lBQUhqYXJmMVp0aVc1bFdVTC9rc3JvZ2tpcUFSb0Rpb1o0L1VnbTU5ejRpaU5SdEk5SXZ4bG1sSUwzbnV1Rk1BdTF0b1ZydjMvK1grKzYzLzlyLy8xdktta0srVzNsbGJLelgrcHBSWTYvNmozNzc5Mi9uenVkUDQ4LzhYeTUxL1B2Mzc5K3VzYmdiK2puL3g5NCsyL3Y1L08xL00vZitBZjkzakd2Mzc5cW4rK0UrcWZDLzM1QmhmK1BZRjM5dC9yN3cvSjE4UHY2MC82YzZHMmYvOG9yYjUvZjlUeDUwTHp6d2ZQby96NW5mNTZyTjlmL3Yvclg3N3dza29yYzZNWXdvNVB2TStmNmZjRThmZTc4L3M5ZndZKzkvQzFIbU1zRjM4OThmMXpNUmJrWDE3dkgzL2Y5OThYNkY4VytSLy91djU5OWYvNjE3OHRmdWgvdmg3L2JTM0xuelc2eTMvOWpTZi8yOWZqWDdjSi95SU9mejFSK05kdjNDSEYvM2lkUDcrL2I5WHYyNyszNjBoaFMrV1BSSjNGZnY1eEdUNDRXUEo0ZnF6dzYrVjM1dC92K2RYNFZlOStUN1o4M2ZNZS9KcFBld0s3OGwxUGV0YlRuKy9aNSsvNVRCNHhoUjFlL2c1aGhuaStWdU1iV3BqUmZVcitlcjd3eGhaWHJPemJEUHRpNjFJTWZ6M0xjKzdienYzbVU3bnpldmhvZUxpWVcvM2YvcnIrZDkvOG4veTZ2bSs2Uk05ZC8xb3JuaXNvMXp5R08rZWZmSW9OZWI0Lys1YlBBdi9qMTUvdHYvOG1QNGdxTzVqUE1sZGVzTi9qZDRtUm4zL0tWano3SFBsYzV1K2ZDajNYdS81Y2dDWGkzcG1IZVNJN2NKY241cWM4OXh2Qyt6eXNZMldET2s4ZVlncURIWGh5RG91SFJGNWlDZGNiYXZEZS9NejduTStHSEVyd3k5Z21OaUxIZ201VmRxaXpXU2xsNU9kTkZSbnFPZWFVY3k3NXpmWEtMZmNTU3lxNWxQSVdqVngvNDV2ZS9KYjNmZXZiM2w1alRUWFhVdDlhYTZ1OWhSYXhnYm1WOXJiYVd1czlYSjBiZGE3VitYem5LeU9NT05MSW80eDMxTkZHbjRqUFREUFBNdDlaWjV0OWhSVVhabUtWOWE2NjJ1cjd1VGFXWXFlZGQ5bnZycnZ0L2lGclgvelNsNy95dlYvOTJ0Zi8yclUvdS9vZnYvNEh1L2I4MmJWd2RzclB2WC90R2wrOTN2Y2ZsM2cwSjlrOVk4ZENldGp4MXgxQW9JTjdkdGNucGVET3VXZDNDeWhGRGp4a2RtK3U5YmhqYkdIYVQ4amY4OWZlL1hQbi9xLzI3Y3IxLzJyZnd2OXA1eTYzN3Y4Zk8zZXhkZis1Yi8vRnJpMzkzRHc3OXROQzEvU09hQitmNmFGZS9MNXYvdmpyYng2cDdwN0w2SG4xa1dkZXFhTWk5NzdmRjRmeWNObVpZbjkzdjFOWU82VXZocFRlSzliUWE4Wk81YStOc2Q1N2JOYzhzRFp2K3VwVDhGclBkcW5penBVMXJuMitiWS82MUw3ak84dkhoM2R1VjRtNHlCRXdaWVZscjJGekU0eGYvN2hvU3l6QnlPL3FmYzMwM2pQdzFud1hieHZZMGR4YS9ZbytPbzc3WXNPL09ubVorTDVmcVd6RDJobWZIc1lJdmV5TVJ3UUlQTHhsbmFPdHROTllMZk9jdVlYTXBuN0lFd0pVcjRFUlhwWG5DcW4xUFYvZXVlYjFmbThyOWV1MWpQWStYMEVvSXErNVcxOGRPOU16Ky9IdVozQ2hOMjA4d1hzOTdCNHVvdll2NTQ4djFQeWw4ZDFuVC9IZ2RjZTYyVS8ycnFlRW9JNVVTd2hydHZmRncxUldaQjNkdWNvN25sMTR6VmxIaWp6TllBay8xQUlkd0g0OXBha01uMUw1N2Z6bCtaWEpvOFZudDd6MnF1K2VIMXRjVUpGNWYzM3R3ZDUrTWRZNzl6QlN1dG1kOTVsMXphVVhXdC9kZWNiOERsNXZmVWhQV09OYisvbG1yeXU5Kzd0NGlxeDQ3UGNwNzNkdmZNSEx6OHhSMm14WXlQZDk0c2F2enBCdjlndWREM2ZKZGFQckc2ZjI3SW5FUFN0Y0kwMWVrajhpdCtvKzloZm5qWmNiM3JPbFhka3lkaTZ1Kzlzam9Wbzk4WWc3c0lNWWx6SkNyU0d4L1JPUmFDbjB2VldudVQ3V2xsdVArYjBvM1U0RnVZajM3clBpZFhkZ0M5QzV3YzY5TGgxWHcvWWdGL25DUG9Ua3hTcHFGbmZ4L2R0dXdiL1hOOC8vZjNwaHM1Nm5aVFM3M1RFMmZYZ1liM2kvMkhkZUk2MXJMRjRtM1BWTHJHRmlEenNPS2JjUmUvdFFjT0J1VzJOZ21DYmJ3Zjh3Vm14VGIvRWJvV0Nwa0tuVTN0d3ZmTk5DTXdjN0hWSkJxZ2VHQjdBQXNwdklGelp1YllUanJldkxBMlVaZS9LWU55L2xEU0pyMitabXQ2K05UajF6RlV4YlExYjd5bHZkZjdGSTkrQlJFS0cxUUl4ejhyRTNIRDBzV0krZXhoeiticXYwOWFDMDJpYmM1NDVlTGN6R005MnJwcktScjRhdGlieDFmN25MZzB6c2pxbGFxN1FXTUZBcGxkcnZ2TGdPeUw5aXhQWWNEeVlaUk5YQlZ4R2JJaTVlNmR0UC9saFdWZ3ZKU2JraU1hM3hrYlhxTE9sN0VOUVhGVTF4UWlFKzNqUnJUQkhWK21Jd3NBWCtMOFRCNXM0K1o4UWZvTHgzVGhnbDlCZ2wzOXc5THBUM2V3RjZvUTlzZHJ2ZFl2UVQrTVhiOCsrWSsxMnd6YkgzdDk1alloZmkzZG8zSzR2Q1U5MjVZVTE0aFRsQi9yRXNsdnZDek1YTmpzeGNucFI3VFJqcThLUTNJSU1kTHFDSHV3dUxneWZJZzQwYWhlY2N1d0ZXeHV4bGxZU0hBRVRVbVBKNGNrVFVKMnBYc084VDNMcmJmTit1TUxIM3JPUERzaURzdlBsdUdBM1cwVjNFcDdFay9VWXZMcGE1cE1ETEQyMUw0c1ZRSUM1MmYvNTRYaXhmd2dFTlJHVy8yTitNU3FMMGZLNDJibzZ3aDgwRjl0VzRZNHQ1cnJjTzFCem5zSEJ5dURLRUR1L1YwZmZZNTUxS0tNL0h2MnY1VUY5TU9UOHhQOXhGM0R2anhhRlpHNXVYRTUvQUFLWStzRTY4YnVVdlRENWVBdUY4ZTZxajNCT0ZCbVVETmpGeGVYd0ZiVVlpTXo3andXV3ZoUnRwWGg5bm05N2FlbVpWMFFoV0Z2SEg2bUtHZmVmQk15TmhyNUx4ZklNbmEvVjQzdlcxV2E5SEN5S3c1eG5SRnN4NUx3RkJ3STY2L0E4K0d5ZVJ0SWpOVmVUYkJiRFBXN0RTN0ZoVDBsNFpwRnVNVVFOS1lIa2p0cFJYeTFoUlZpYS82RCtDV1ZyR2tDTSsrR0YwclFxbnY3bGJTWURSa2p2T1pWelNndzlHOElZUlpzVUF5VlhDOXVJZG1VSmxrSjVVUGtES2hpdjBnWWdqSDBYUDlXSE1jWWhMYTMwOXFPVVJwWFhqejlhSDJyZHYrWUg3UXhLaEVBVVFrR0NtTENieXhZOGhBN21pTkI4cnpSODM5dll0MTFzbkYwY0pWd2U4N2JleUl3cmRNeFl1ODFiZXNONVR3SUF2akJxMnIyYzgyQXg0eHc5UitmYis4Q0s4SytnQTRJSVJ3b2hqOFlCbGoyNmQ3V3Y3Z3gwTkVNOUNLRUZCS0M2QzhHMFdQN0o2SDc0Qng5QVJodXZHQ29SM0RGejBERHpqM1dOUkZWa3NTQUtQMnBDRDJZb2NXQlB6WWNBQk9Ed1M5OGFWWWtqdzdSSGp2M2paamRGSndDVllJVGRhZU8xajlNZUdaUDM5SnhyS3picC83NUdma0F1N2dZWlhEUGVGN2VVaURTZ3hwRVRsUlZ0QkZHOTlYTlZieGVkR1BDdTdFU2FlVDBjTGF2eGFqZ3BPeGcxaTBGOEFPeVlVQlh1ZlVQQUtlQSswbGdzQXk5Qlp4SGgvZ3hYTEdLRGVubmV5K3FrOEQ1Z25nVGg1SWxaUWczYTlFL1BMT3BaUFUrbEs3YWNDSDBabDYzc3JlYlQwRnFBVzBvaWZIamp5K1FEWXBqR0NxcmlpM1R3WFFHdlA5dUVBRmV3RjZzR2xjR0hVRkNlUGlSTTVndDJ3VDAvSEZVajlVRHBzVlB0dXR2RURmTU9Obm5JMW5BWXFnM0haQmJERjVvQWZzVnFaalgzQU9NMTM1MllWZzg0LzhYMlFYY3dsL2pHT3dpYmphUkhBZENIdFNGbGNRVU1PbW4vVGdpRUNWc1E0b1VBcWNvQktsSXhqdUpWdGRBaVpQOGdETkFFdUwySGdsYTVibUlOb0taTVF4M0dXSGhkWGdhWW85WU92QmdLK0dHTitQSlNXbG55UzF3c1pnY1gvSWNaM25lbWFGVE8xVmU4bXdjZER4L3VOMEZYV1RjU1IwVXpFSFMvT1ZvTlhjcGh6QXdyeGlZSEwzQ3c3TnFpVks3SUhXTGdHL0FNN0k3MW9PU3Yxdks3eWc1NkhoZy9EK0FZd05nUVB1UHNoZWVLdG1yazVxcFVnVFB2cTZCUXdJUmVjV0FJeklBZ29QcThGT1lZYUpZZ0hkMEh5SjJDVkhaL0lGWmoxdzNOdnZBSGZPVngrWFZpbXg4akpDeVg1eDllUHZ5NTFQVEtHOWZzQUZ1VHZINW5IcHYzdEo2Ly85ei82cno5NW5SL2RvK1M3WWd4N2F0aWVDSnFjWTJKT1lTbUk2SVBSaFphQzlMRGZDR25MRUlDWEhTcWlrZC9iWHZOSUs5Ymh4ZTIvOCtBQWRMVCtZeVYrMzRCRitDMlY5MEFaVE5ETnphS2F6eTNuVGhjQ09QRnlvTCtBSG1GdFhpQXI2b082SHVUSFBrSms4Z3NkMkYySGt6SHU3S0M0SFVCWC9mUERNMStMN1VHNzN4VUVkZy9NQU1VT01zOGN2VFdrWmVEbWNXOTR1dyt2SkU2TGdNUTNkamowRFJBZlJqb3VjSERCR1dPQnNac05nY0dBaHhlNENLWm1LYmduZG0wQWNnR2JQR3BNY1dnVEVxaDFwTHVCYWhOeTNPTjFieTRGcWNHUGJSWm5vQzJzQk9hUGp3VEpJSzQrUkZ3WVZvbEhHYkFqckxEUlQ0aGpiM3VQdmRhbzMyWG9DdUFxb0ZMUDBTelVEWjRjV0JBWU5adGJFbWF2cy8wTkdaMDRwcG1mTU1TbjdEUFVHMk4wZi9tcWNHdUFKZENndmtwSmlobjNCUHY0S3A0NUQ1eCtydHh6ZGhGWVNWS01oQ0dhK203czBvSTJMNjU5VFRRU1NsamZJVHBpalhDV2NUenBHOUQvUGxnMWVQNkh6TUNTeDFmeGRqc0hIQlppMVdTUkQyNityUEZnMkxqekIrd0FqZUJESUFqdm01OThLQVIrQWxTR0NQWENZdDBpL1RkTTlMNjlBVjVRUlNKdzZ3UmtYeGVxSGZSVUJidUJ0SDFmKzRQSEFPOXhZNWphRVZoZ0lkWXN3bmcvWE5QODhEdm9pQnl4QXRUWnp5dGovUnF3SDZ6K3BNQnQ1ZUxuaDFHS0cvekE0K1hJM21ON2VDM2VuMzFubFo4TUZvcEE4WTRGRGUwRnNiRWZRRTJlQTFvQjJVS3FOb1JpcHdSNVlVZUN6QXVVOG9DY01KNll4QWc5d3RtaHVDelhEZVNTb2x6RlhjZkRBWFIxbkJtbUpibzNwaWd3TGVnZnNBR1V6dTQwT0lBc21wL2xIYll1YWNKOU1XUGh1WDc4ck9MdG9KYTd2MndUb3BCNWQ1VDFabFZ1VER1MjFUQUdEQjZ6Q1ppTE9NQ2huMDI4WGtxbzdydzZJQnRFaGs0VWJTK09DSGpUV1V6OENZNUJ6b1RvWWVqaE14MUVDQk9GVGtpMjJNNEhhQVhrZkRSc0NUM283eDRzUFJzeThLcUdIOUNXRFBERGMyRW5CTU0za09jYjJBQnNUeEFuZWowZUwyRE1XYjN5WG1VamU5c2NBekNzMyt4U3llOUJoMi9HdjdGRU9OWlZXUkxqYnM4TFRPa2JHN0x3ZExPQWpockVtblcvUU5aWWlpQlpLdm5CaVJvMUFhYkEyTytXSDNYemhNTEV2RGpZd3JPM0ZjTXFBRng0Q2VqdlpRM3ZjcTNxSG1TbGNIVE1Sb1hpSkw0SUJJMlNZdkFOc0czaGpZYVNBdHlJaWdXaTlPb0gxUW53ejQyS0hDWVBtTUpVOFNCcnZTQjZsQi9oNEw2YlZjS0pZYzRDQ2kwWkc1V05CY0hOVzdXOTN3RWhoRzdzQzRJTDlrSFV3ZGY1L011ZGcrT3pZcENxZ0kxR1lQa1NXTmVRNHR3dk9CZWJuc0V1aGlSUVhBUzhYNENZZ0YvQUM1YU5QT0NLdFZ0VG1NRHl1ZXlvVGw4R0NtS29idzRxY3BlMnNtNExFUXlWRndQNnNUZ1lEVVFNdFVSY3VUZXlFUnFNSE13R2FoQ2xWR3c4SGtxdml6MWx6WkNNelRibWdUSFJoT1BicjVNNkFhQXZzUld3Qm16NUhTZ2RjQ0RmMjNIdXJDRzYvQUVPY0pPZjRmWVhIS2tDQVg0MmN1Sy9UVUpwRU1ieFo0TmJJZnBZZm9CV1FMNXF5TytFTFhXOERsNElLNDJkbCtrQkdQazhKQUtXaVZLOXo1VmcrVGphdHU3ZHE2ckFOcUlEckdMSUlqak1icm1CS3dOZXQ5bkhKUDJHb2Y3alNmN3hJTmVmSjBFUCtyR0tCbjBFMVh5SzNVRkl2N3hPZkplMWhnMFhTRFBZQzhWaWRlSmROSjYzRHYzS01GZE1yczVBRXQxUWJYNmcxSUpBWTdaaGM0akFnNmJmZmNsWnZ2TG4xbmp4OVAzejl0ZmY3eDgvd0sxb0F5TEtBcDBGN1N2ajBnRzZCbG1rUWMzb21ORS9CYlBINTJ1WXROd3ZURnFTaWhiSWZ4TkFnOEZiZERGbHNDOE1EUG4rak9nbTZhQ3hJSmdqdHBVdE5jUjlGbjIwY0NVOFVPQ3hmRGZNTnFBVi93YWlEcytJUU9JQWoxUm1jYWI1T1NMellzV2hWTU9jNE4vQ0dwZHhqZFlibmdIZmNvUmdISkFsc1AwRHQvNXRmLzdyN2JuKzJoOHQvd0NCNEN6eWcvK0YzK0JaRjZRSEd3YnN5TFZnT2xJNFVjVWJwTERuMFU4ajZTakx0YkNRYStiS0MwekRCZ0hsWWRNYjJzYzJicnhVbEZzY29MNm1pQXQrTm5CNzZBQVB4eGFEVEZoWUxPUytIeUQ5MHpvdktNM0xFM3M0MEV5TWJOREh3MGw1NmdlSzYxN2lZOS96cW8veDhyMzdUMW11dTVRNzdxckZFeGd2dlB0RUd5RzFrcTRURTRPWHlScll1eE9kVG51QU96NXN6RjVWNW84Q2xIcE5IQ0hLWFRMd3B3Q1RFSVEzd25OQnFCQVVLSGRmVDNCdEIxNk42L085VlFXdWZDTHlUT3dydXJrMEk0anlQV0RBS0JSbW1MWHBFU0tNbTB3UlVJSGx1Q1Zhc21EZUh5dUUxUVVsU1lDZVZlSEtHM2YwakF1RU53d2FHTjFIWmhkcUpOVjh4MmQ4R0JRTWJPblF3aGhpVWRrTldBL2o4SzlCbEtYeGI2dUVkU0hOTUdtRG5Ed2prZzFkZ0thT2IyWWM3YU5aNkJXeWdLeGxLTXFlMHFHeXNaUEdwa1BTbmlKVkkxMUd6bHBubFg1N1d4dE9RQWdIcW1oUWQ3T3JyQ0Uvelpla3B4aGhRK25pdXNERmNaVGdLL2pLVlJzVzJEVDMvYXBMb3J4dkYwWFlUQVJNc3FPQ09JcVYyc2J3c3pOQTA2NVMzRkJsdkRyUGlud1lRS2g0aW5yamJpclVxT25raGlRS1JJKzNpUk1VQTdQN01zdUNnWTN6Qjd3Z2VSR29rbVlBOEVNbzZoVkVRaER1bGNGUCsyQTE0T3YzYmlRYVVpd0kzem5pOHlGbkgxcXc4Ym52QjVUaEpoK1dISk5UOEpoVHhKYkJIK3JzUE9xNGpTMFhWZzI4T1NlMGMrQWpqQUZEUW5HdllHTjR4c2RGY2VHWXpGWnJpZERRQzE3OExwZGQwYTA0RGZnUnEyaUFrNFZQT0dXZUZ3K3dZaDlyNTJXQXc0MVBPck9HRUppb3h0NWY0Snh0M0NFMGJyaGtMM2xVMEUweUFZQVRPK0lYUG53c1duaVhiNlBhS1R6b2Z0WG56VGRXZ05LYVY5MjRiMURZbDJ0Q3NjRE1DTzhOOFgxZ05pdHh1N3FCT3hEdS9EN2dINU1uY0RVdzJNMXRBQXREM1dueE1qUTBaY2NRNm9DdHdEd2x0UmlTZ0dEK0kzUmZzVTFQaHRpKzBFaDBialhFUndlUVZvc2dqU2RmQVMxeVlUZGVlRWltOTZ0MTI1aUNEREsrTzdnVWZ3cnZpMGEwUUxJYkMzaFhjekdGSmZwKzBQN2tSWkJnby9PUEllMG5KYUF6QXNVK0JoMHkwZzNPM2RLQ1J6ZGw0bjdNOVFCSmNWTy9uQkpMbks4aEdETGtnUkZwaUJ2YWJqRHhSSStCSlZKWUVGWXZFcGtRVVNIZUQ1SEZ0Y016dExwUVg2U3FYeGlVa1JBRVZnRi9OdlBocjF0bkFMaUlRcldGSEdKM3NSY0w4OGJydzlJU3VBaWZlWnM0ZUJhVWFGKzZTendIMndTSGhvYTJwMFlBUENKeWcwL3lFWGJJTDZ6dzQ0RmZTQ0FmUUdLNWIwYnVRZjVnUlJ6WkJYcGNieXFEYjQwSi94NzhSalc1aEtIbkFxb0VSeGovdUxHendNY25MK0g0L1Z2aXB4cWdXeXc0K0tpYXQ5ZWNpWE1OdjJoMHFrYkpid0J4bnR1ZzI5MTF5WWFsMEg1WTJtNXhQWGxHSlFIbHVNU01ZS0tOMFVSV09oQnFwaStFYm5YTjFwMXJ0K2FTR2d5SkFQaVVaY05oY1MrTWNZakJqRW9HUkZTd1pQOFA0UlBuLzIzZE1BaDhNR09ySS9BaG9vV1ovOTdYZVBhZEowK0s4VzhtcGRDeEpkbXl4Q2ViSkdXZkRURmhGZmNHNjBNUEJDYi9manNFOHNjRDQ2VTR4bi9lL2NGVFlDbnJNSTJrU0p0clN5Y3FBaitCZE1TVGhHTFhhOCt4Ui9OK3JZZnhYcCtGTGJWalAxSFIyOWcxUk9NRi9KZit6OXVkdTAyREFGdDRPdXVCRUR3UTNuUGh1d0JQRjhKZkUzZ2Y0SVE1eDhzVUF3SjREM3dxZnROMFg2eVloMSt1RDdNWmtzOHdOL0tCUWdCVnh0RFdYUHpiVDZZdllpaTNBZnp2WkFsOTE3TWdmeTBIK0pnSGlUZHdQT0NDc1cyNDFsWngxWERrKzJLSHh6M2h1cmp6cmFpQk5iV3ZrbzErdGg0OGhkbHIvNGViWFArNFN6NFNBVWptM1lFR2FMVUxEOFpENFRDWXVMc09UOG5uOFYvQS9NdDJBQTdteWZMaGZDN2diUnpZNTR4dmVqNFVHb3ZzbXM2VGpmM1hCL2pidHYvTGU4WWFRUDRzRFJ3REl3Rml3b1ZrVGZHSjZXQXlHOXVDRFVIWlFaZEdrYnFrNWUrN2gvWEMrdlN4TDBnNldvbFV5dEFOT09LWEkyWVZNWmJzakNkQzVORkY3REc4NTMyQnYrQTVKS2RYNUMvcXZrenhLWkQ0YnpZQUlpU016bFdhTnF1R3pqaUNGQkZZQnJvcVg5RUdoWm54UkRqdzl5OVFXaWFROFNyQ3VmRUhtcU9WRTRxTFA4VWxRNUFiMmdRVktDK1diVXYvYnBPRnoxR0NabUprUDloUmRIYysxNUJjR01xQnd0enhYdWptTU04SzFvVE5taHpCaEpaM2M5Rzh6d2FBUlQ0enRaQWhQMzFqUExBb2x6NXZtT21ZK0lOOUloRGNqMlhHeDZmNjRXNHhsU2JKd0NhTlp3UTVyY0x5c3VLc25RVmxHYVRSOTJYQWNuMG1ia3J2WEFWbmhJaU1lbWRaRlR1QzZaOW8wSy9LWmZMcTIxZ1lQamF6UWRVOHZrWVN1cjRUeGlQd1hpYlJYK09kNFBScFRka1RQak5VOG9yZXNaWGJJQnY4MzJqWlNRVWE2Q3JyYWV3UHFMWUI4aDgwZnhnOWovMEJFTEd6Y24xY1NHZGpKcVprakNQU1ZVSWhpREFTemNydllPWTRocThIdkVnNzlZbHd1ME1sUHJqbGhMc1ZUR1FHcFVXcjZmZ1paQzByS1ZQSlI2WndhOXorUzVnU3J2Mll6bEE0VFRWSGxwMVZnU3hiaHZDTGFZSDd1NVVqM0RzTmdCNTcyTER5TDh4UlB3aGdCdFVDTFo1OVJlQWxaQ0dEeE9SNG90MjNJWGxKWklodkxTdkRxMXFZNlFTbjJFeUFDK3lETlRTK1h2UEo1RDJtNlJ0MExCWFRHY2FvOFMxY1RFdHV2WU4wVlN5cytjUEhyRU9WWUlOZ2p2UWtCSjM3NDIyeGtkZnptSFNva3gzQVdJeGpXOFBQKzhLanVPTWI0SU1MaElDSUFIQlJhTVRydFdnbWZnQXpBQW52SFBjRlJ2QmJxSk5xdytzaGpMTjNKQjhvQmwrdGVMWnZRZUdXZ1k3OEdMSlMvLys2NDdtZnlVejkweERpb3lUb2RjVHg0TEFnL2pIaGJzVmhpVjJER0NCSCtIU1RnUG5GVTZNQmo5OFB4a3UrZmpYOE5ONW5BblhhKzVqNkJDV0M4WEEyUXFCUWpBTHhMbENXdUZHa2x2QlhKOWxkQVErZ3laR0tNT3JpVVlCd0E0dUREdDVZVThnQ05HcURBU3JZTytYNFlMYVEvMmNOOXEwY0hnYktRWW5CNFA2NUVKaUpQZnBiamtIY0QwQkt0NG5vWDhidnh4VWp5cHpMNFlxWUdmalJCL1FCNUpna1MrOER3Uy9YMXdjWUtpMWVDU2tDSWdMU3A3YnpPWWtIeGRtNm9CdWptdzB5Z3preGozbGpKdzJyOFB3WStyb25oaTNrb1o1dU1XMHlWN3RNdTNmTE9VQ0NTR1FVdExlbDdSUm5Md1AzM1NEaFNVekdYOHIrMHZGSGpPVUh1TTNscERSK2JQN0J1ZTRIQk1iM3Y2YVIrcjJNMG94d3ZMb0JNVFJlQS9xTzBsYVVITitiSVNuV3ZTQ2tCaTd4aVR4L1J5eXl0VXlnRi9CQnJnQ2h1azRCTlVDTHI0RGg0YTVKTk5KTWVrUlVKUFZYVHplTnpnRmFVNDl2d2lJaWdZWWhlU3VVdmNSa3JBNXZQWUJJMGJEY1l4WVJRbnhGODVQc1RyQktSY3FLalZZTnhoaStoN1JCcnhLTHNWV2NTTVhaWW1DeExqaTdjcTlmREtDVUN3c0NyVGdMRmtvK1A0UVJnT2dCL2pDL3JBK0FBNXVCYU93RjhBY0NBcUVtR2phd0pwZ1M3aHRHWFNCL2ZLSkpBTmxOUlJSV3g2RVpOK0RkYmpsQ040akJicUhYVm9weHp3UytFbTZNdjczNEJVK0hHRm1PdHdZdzRzRk9mTUhhRlRnak1tNGxqd2dKbSszV205RUFxeVFnR080WXVDaGVoSzNkMjByZnVBQUZ0UjVCNFBkU0g3SDRIK2dQQUc3cXE4UGxBK3hyak00aWxjejZXRHRpNlZHMFhNRDgyZ2N1aEd3K3hnQS85dVhCcVBQS3JHUnNRMFdDa3FOZ3dMSnlGcTJlOVFQUW16cWYzSVJyWVJMcTFhQVBrSU1ialc4dzluTFNveDlXRVhPSDgrTDN4cDRNakg5OVRmbnZDbWZsZmdLYzIwVFc4YjRqWHRFUTFYbVg4UDZXTUJzVndIWkIzVzVqN29BdGtDTW9CRVNVZ2hsQlNCR2NXNS95R3ZaK2tKNThJWmEzRjBMZVlEd3NVTG9iajlqUjduYkNFam1mdEJhMElxQjdWaXhpa3RrTHNhakpVdlBGT05lejJKWEw1SGREaTRlbEFZY1ZRU0JBRWF3S3lHNXVFSXFBUWJMQVhtQUxjQjVJc01WU1pSbzltWmVSUVpacytkN28xUnJzY0RReXRBeWU2VG0ybVFjNG82Vi9vby83TTBzeEFhdDgwWW9qci9kZE1JV2VyZUVTTW9kYWNJbzMxczJ5aHdTQTJQR1lpUnRuQXhQY2x2NEJDbnZkRFU4Q1dNMElHRVJ0dGdzTGJFUkdlSmg3TlErRlBxTG5HTFo2U20wQXl0V0VOSStYWXNaNkEvQkFoVkNqOVZoU2NHUHVNQWlBQ0o4SDZHRFdMWnJiUndicVFoYkJUK1UrSmRrWnNqMXcyaGJJWTdBTndBRDhkVVliRnkzZ3llT2FXSWVOQi84c21RSlUxMnJBUWIyTTNDSVhnekhmSVJHc3RlbDYxamRYby9pbXdaRHFWSkc0TmkremY1dDdmNERLOXZaaTZHcytJRHVYR0E2QUlOekJNT1g5amZHcjNMOTNISllWQ3NuTnY3SnFMMDhVNzdSUHJTRWdoMGV0cHJjTTJRd2xQT0NkTUtVR2kzQWNpYlY5bXFVTXhnaTNWZWdBc1g1cVF5K3NNcFRLekUweUNtbHBPbERBU2dZeGlMY0hZbVJFeitvQjYzYkFRUjBFanMxN0UzSTF1blVYRDd0V1VUME1NRGZNMnpJelh1M1JqbjI4UGpDaFdTZG9jQTJ2MExSZFlMM0JUc09WbGNOVmVYYkFON3EydDZVVkpvWUFZNy9rUE1TZWEvbyswTGREQTVCa05CYy9oSERMQkxKNTcySlFOb1lUdVYyc2tmZ0llUVludkJWUVBqSkVKQmpEZkRBZ3dMTStoNldURmVqRzZrSUYrNHVBRnhZWkV6YjdBeUR1YjduMkN4UkZiZ0EyWnJSYTNOTTBtcFV2Z0IzaklkKzB3SEVhY0R2NTBSUGJUMzU1TEdReEh3VDJvR3RUSjQxTzdveHQ0WGRTcmpWOGVLWUVlOENXM01naVd4V01WdFlwU2VhS0FsM1E2N1FjTmdmcklRM001WEkva0JaV2hFdmkrcE5PYW9mT3ZyQVh0NFdsNzdES3cyenVsRHVlY0hzM2pKaGVFT0ZsTmVTZnJFUFYxa2JyUmZqaUwxZUwwVFNDekplZzVjbXlhYXRXMUFSNWk2V2UrME1KY0R3Zy93Y0VCUy9PMll2MXRuR01PTS8zUmErbjRSS1RaRHdRV0FBRDJ3empyMmd4Z0xWalNpVk1qQVc4MHZydkh2YmZuMVZUYlREelZ5TVJiaFpDN3d3UVp6L0RaWmhMYVR4MW1LZzlHS0Nua0tCKzBEUTBLV0NacGd5bDUxTyswR1JCVmpKTlhBZG1Ca0lGQTQvcENtd0NnQWhROWVpcXpCQWExZWFudnYvcXFmNDgvbC9KalQ4dk1QSmwwZnc2M3dJcEhCdUZtQlJjNllrQ2hjT3RjenN4M21DVUVvcWJtb0YxSE9EM0V6TGp3Zmw2MVhkMFBJckhrVEVBeWR4OFNzZ0tsSHQxMDEyc2dyeTk3TU1OMTFxditCV29CL01HQjdNb3NLT3EyWVA4VDR2cUJDalZOSElDL21KdThzbGdKK1N2WWVzQVFCYXZKUFBxa05NTUdKbFkrRzRjQjNka08wRDY2VWI0ZmtwUWZsVnN1azZBblJVMXI3c2FUelhiOGF6YjZrRTRMRitZRFNkWjhnVUJZTjlnUmV3WXptSGpBbmx6WEhFQ3lHUFo1MHdnbmhNUldzYWVIMnM1Z1IxQVZaYm13Nyt4YXZsYjEwa1BRRnh1cUhUYkp0T01oVUFzc0grUHhaTGhHMko4bnE3OEl4bjExNk1kMGpST1U4bUZoRXR1VDJ6OXMwSmxHUWxvL3JpUDBIbzB2NkkxSHZoTXN6bTV6aUFWVXZqNXMwNDg0dXFYRnVqR3dUYXd1dVdrMVlMbFZYaE5pQXQyQmM2RUh3WlNscHdOQ2NrT0FpNGlXL0J6M2hIT0JBYStEQTdNZitUSlhPWHh5NkQ5YzVYLzgyVitVT2JGb1lsc29rYjVRWTRPMjhERUE2QlNNTXp5enZITFZvbS9oQ213aHBGWnhWQnV1OFFDNjgxYW5DUkNBd0ZqUHRFMXl4NEVJVkNiKzFldkx1ZEZzd0xNQmljZnNSd3dDQUFsUUJQNkF2Y01tbGFXaDFkRDlMRmFzb01yS1hRNG5BZEVpSWdpaWpDQS9QNWFmVjVERWMxQThuZGFackNTMnR3aGZZYnlCMUNwVFB3R0YxNUdPSU5PMDRRRmFONW1rLy9wcW8wT3AvMUxPTlAzV3pZWWJJNTJKeVRRL1lpamJMTmtKcGZTdEpRQlMyTWR2dVd5ZVJvZEttMWo4VnpzbUc1Z1dNTkNza0R1UFdhUzJ4c1BBMzBYaUdyRy9YSVIvQU9Zb2dQTit1RVcxb1ZEN0VMZ0JhOW45T2VuWWN0V2pHS2NnL1VWclUwNDlyT2EvbnZITzFjdk8wVVArRGFjTDVRWHNIbi85SE9mcEhnL0pGTmptdUl2NEcySjJIRzEvVFV6S1RWM0RmQ01acFBZNWJidUNlZTAxSHh1Q0NPNkZxcmRWY2JPY1VDMkpKZzNlMW13WllrTW9CMUVqZ3V3akJta2lnQmFZR1kwNXpIcmZVUlR2M0VwT1hIVzMxNTgzQlVlUE8yQ1lUMStYN1BraEZkQWhJOFh4VWppUW5oM05nTHppRU8yL21GZUZyN3hxaFhrcjc0OXVNME9vUVF2c1Y3TE5FblpBOXFDRmJFYWN6MW1IaXhtZk15K1ZlUHQ3T29ET1k0NjBQRWZxd01xdjMreWhHRndFYlg4K1FDVytBdmF3YWp2MzRMWk9IQk4yelVSdTN0TGFSQXZaQmJNaEttd3pjc2FJOGpEampnUkMxOTdmV2Y4UUkvc0t5eENYdnZsWW16NytsanhhaTJMelNSWlBwdngwYmZ0TGkvT0FlLzE5dnNFVlgydUIzS04yMnRZbTEydEFVSEYwVHN3TUo2Mnd3M1JSVjU4V2M5a2p1WlRwbUlwa0M0QlNZVGdQbmlhaWRtTDJDalFLMWJpQkdhbXhkNUFMeE4xMml6OGVRbWdKTU5LcGxUdmFtMEFVTHNBWTRWWXRoeFptd0pJKzdSKzRLenZUNUxsdDdzWEx0UTBtWjRudlBCUGxobWJ6MlpJK0FNcktWNkRackhoRnYxSTBvSEttUFFuVnd0ajd0ZmkvejJ1ekRmYk5vQWM1ZytUdlVheE9raFpKQUFUQ0xZbHhYeHlXZmlXK2t6SXJFVlFBZnJiakI1YW9IOHRnQVVnSVNCZDFlUjlZWGRuTFR3RkdQUzI1OHNWV0pZSmdqS0xKWW80WHcwVlZoWEEvaHBWZzNkY3I5MFhjZ0owcWhpUmg4RStXaXBUTGpPQ1NOZW9keHNOaWRnYlc4bHF2OFppbzQwVnBXTlN4b1BzWHRrNkJIemQrMkJ5Z2xIQitTdkFRYmFCRzQvMTNValQ5QVhaZDVNSXNCbXJkTmtIYkhoa2I4Q2J6OVhNVkcxb3h5bTNoc3MrVm1qRENrQjdvSE13R3JUaWZubkJ0NTMvaSt3OHdJZkM0NWI3eTgrbzJKUUpZcHQyUFVCcWpvdkVmaUVxN0NuSU52Q0R2QWI4aTMxL0Nnd01lbXY1MHdPaGd5c0F2bkpHMEFPWUxkNlhqMnpqajdsTWtOakhtMWRiUWxsTGtWMHhEbjRiZGhrbm1vK2t0bWJlRklsNVBvc1dSQzZQRHZKVEVjNDJjbWZ3RDQ3TnFzTXRSOVNzeFpQWHQwVUxGTmpFZmJOYVVNSUw1OU1qOHV3S283dXlyWFFEeTEveUNDZ1M1aXpmS1ExZkIwYkFRMmJjOTJNczB0b1JNMVJ2ejZlMUNkTTVnRkxSeXFyN21paE5BcXdIaVNEMk5PT2EwaTgzYW1yZjZrbzA1OWxOeW1SZWZwWmZkVmNDYzMwTFd3a2wrdVVnc1VVL2ExT3M5VWtuUFduOVpZVDkzeWM2Rk4vL3ZOamY3bm51ZUV3dHlCWklhY0V2bG9WZGVMSFJvVC80K1JmOEJhS0d0UmdOQk12SUNic0I5OWZvaUltUmIwNlVOVi90Ly9LTy83d2grQVlUdml4RHJTYTg3YzVGYWEzd1NSSFBnREIydUdjSGZleW84N3J4QXljYTlWb2hnYW5VdW9TVFBaQWduU0lDRVlOZUNRWlpRSGw5TmE2UC83VDdnMGMyM1JsaHNSRGZvVnRLRWR4eGVqOHdVYk5ZSklXaFJ5Y0JlQmxrYlJFdHZoOVl4N1hjL0lCMVEyM1JWOVFPbWRQNk50OEQwcCtSLzJVN0ZwK0hwRTE0NUVKYjhaSmNHOFp4d1NXVEtkaGZLOVFHWHFIcEZ2MW1TR0RoU3NzTU1wU1l4MEJoaDJuYlVYRExCWE13Wmg0R2NRVVJ6ekJuY1dCTHNYQ25tVHAvMFVVOGNMYXdEM2lDOEQzUmN0YmJMUFJ0bjJOUGFMaWhTalFScWxXUTdGUWI3OXZTblpHemQxbHpjb3YzT2g5ZkZVS2F0dlY1Q1JObk1NeGtxc0VHNjlnQ1hzVU9UdnZQcnJzZ0hiYStueHdQL3k0ejdPM0RBV1hRUW4wcFc0YmMvT3FScFU1NGw5UFJDcjh3QXdlbnVOc1YwQXRydU5Lako3NFBUbjRWb2JFTUFVRXQ4ZjRiUkpPZko3MFdMNXJBd3loQUt1dmRyWm01YlhpNUxNTXg3V3I0OUhQYnJIdVozUzVsaUxpdG9XWWR6Ly9rODM3QlVoYWtJRFpBVmx0OCtFRXFMNzBremdHaWpWTkRIbitVWloyWUNzOVhzbDAxdHNXODJVNndiOThMNjQ3ODNnYVFSb21vVk5peEE5Z25iZ21pZ3hldnZCeUdOZHZMdGF6N2U1QzlPN1lLbEY2R1RTZlMxSzF1Wkd0aE11aW1WWE8zelpHWHdBQXRPRzA0M1M0NFdJaTE0QWFBeStoSlRtaWpkYlVOVkZ6SGZvN0dTeGE4R2dhQ1MvRXlrSnBxWVVlMFR0Z1FOV3NIZU9rZDN3cUJ3NDNWOXJKSkEzRTBoSG9IYlBtOHhRc1p0cnB2T1N6dmsyYTZVS014dWpLQVkwRWlZSkJXQmtQanpLMmNlcEtWTEtCQjhLMXJRTXBDTWRVL2JCL2IvdUJudzlZRnYzaGF0Sm5Gc29rQXhjM0JlUmYzcjlidVJuZnRkc2FpUG5iZEJRdFJjbzg4S0x4MlFwTXR0T0VScmxvd1hKYUw1ZklyNGx0VzRDZjRLeXNRQkZiVHd2VngrbTROUDBBZlpoSjNSQi9KZm9udEY2NXBFQ3lDUEFNN3lRNmR2SVVKSWR1T3JkaFd1RzhiWG80K2RvakhpWjBsYkRJMDZaVVRBQ2NhaUMzYkNZVWtBOWNBQ3ZNR2wvSmNHS2JIUWtUK0Z5SFpFMkNMYnpzWGh1R2hTSjkxcHNrY0J1UWVNUHE5eTQ2QnZaZUZFVHh3MDZIanZMQitFN2VRd3BrZmczSkdheFhTeEQ4Nm9jTW5xVkNjKzdITE9kMFhUSFBxUjVMSkt2WUhEeFAxMHlDR1lZSHpLb2FnNUErMVlRVWVwOGRnVEIzK1lldkdON1hJNzNkZnRqbEE2Y3FKTTBGVTY3QktwMzVyMWV3NjFjOE12c2g0L1lDQnFNbHNBQ0RsRVdBQXd1NDA4MVY5bTJ3N245NzBzL2UxL0JyWDVtNkdsUnFMZ0sycDVvd2UrTTNhVWxOSkZMU2ExWURlRyt3RytWdkdZNzdIM21BMGtLZDVnRlZmaXZZTVRzdUVPeUsxb3kzaEZRT2FkZmpXMmUzYkpCNm9kd1BKcm1KVlNtT0RiNlhSdmNCbnJiQ2JuWlh3M1c3VmtCR0s3TndJNjdRRm90RTFLOUFkSU9MSE5oVjgvelRpakUxOGJQSkh5SGwrOERPU1p2a2IzcVRaK1hCcXRZQkdwdy84Tlo3UDB4a0gyWGsvTDFoM1h3NmpFTk4rMDU3Sk5uUWt4WWc2R0JuUUFZNDNhMmZhK2IxMXhVRjJEWFlBVU5wNTNwTFY5M2RmMXRXZWR0MWhXNER4WTc0Tk9zTU5JSXdmYm5uV2hCV1BCZ1FRZUFQb0ZkWlJtcGp6VFNrT25TbFUxTmdzUDVBQTYxZ3RLOGJITkVsclZwZWwvekJoUm5kcjBoNThBTnBuV1hsLzkvWktYSGpZZUtvVnJ4V3RJUWkxc0JlZ1k2Zzdvb0FPZ1RkZmROT3VOaXo5YWNROWxCMVViVHZMQnpFQWgyQzVYeXZWNTc3YStCV1pEbXNQZGJ0bXhnUG10cUFaN1o4QmoxOVY4bXQxQ0FvZ285c0YycmJtYTZRNVAxNEkwYmp6MDRDY3ZHK3lwdmdCdFg4RkRXVDVnTDQxb0dHUHIvdVlxYnF0Uzc3TmVlZFdPZzdJZlBuMS9xcnhoNE5jOERsUEhJWURwb0hvejNRREtzSnF1dFJnak1lSW5WV3RwcFFOa3RoaW5ubjUrVnc0QlR1UldBdWNyQ0pxdEJOMStVNWhFbTRjQjJBUExONm0zS2dDcUw0cVU3Y0Y0U2lJVVVCem5sZTI2djdyanJWd3B0T3ZJanR1eWZnN3NYamdlREFHdUczaDY3Q2p1T1JpTlFPMFl1c1owMzc3aGpkY1dDS00xTVFzN1JhNEsvY0ZhQ0diZ3FLVEdMVFVZYkZJOVFiRmZraVY3UENKb0NORXIvRkpmTUtLRjVhZGwwSUoyVXRjb0ROTE9tK0thaTV6NmFjRkhYc045YmVieFhqTXRPTUM4Y0w1N2RIdDlXUTN3b1VUc2Nwaldlc0lXMlB2UU9vTDA3Vk1jdHBtanBHMGZBVCtEN1JmV2VVd2lZQVhlaHhLMEZLSEp0Y0xrTm1xZVNxdzl2MUFsRjQ3eVJxdXhraE5ONHhnZWJ3c09laVgrTmZEVXE1VHBldGJQalpqM2VXeWxla3RQNmxGZ3NISHhoTGk5eE8yQlVuL0pyTFBBd3dqK3JvS3FCNXVHUmRtbmhSMGhIM285NFZmL0xhanZuZ0ExdGU1Tm05SmVpSk10L2xJYS9WUS9mYldkVHVNQnZDVjlPV2dNRVF1Yjl0Zys4YlRzc3ZSeGdRdzlPbi9LRnpEZkgwMndqenN0dWtuczVxc1h4Qms4WDc3QVBvTndaNGlnNDFEdjlBZnE0cmlabHRmRUhKSTNEajVpbVpqV0RTZ3haTlBCOGs3ZVV3YjZONWs4M0VDOUo3WUp0YmlUbGMxeExiakVjVFhDb2J5TEhOMm16VjVPdVRPTWxKOVg1ejJHSlFUMjRoQUFXTWtDYkxDRG9BWnRpb0NKbTAyNFFGdmwyTnFESWFGVTRzTWpnY293bVpWOTNVeU5MeFVzRFNqbi9BOWdORWVSejV4L1I4K01qVjRqaFZ3QkUyMjlRbDZISVRQdVFnVG12U2c3VEV1bHVPRWt1b25BRDVZSFAvUXJWNXpoQXZDYkR3K0FUeFo3aTdFd2p3Q2NEQWVlbDVuTmZRT2w3MldOVnZMSG5XMjNqamo1NVFTU0REbU5waUtyS2U2NmdSMGJMbEIrT0VxQmdoNUpKTjZFOU1BNmRhd0xXTXhXRmNnQnNZODNGYStOMXcrWkFiYk5MdVc2Yk5DTEM1OFZiWlFxanFKQjVjSEFnSzJodzFndHlZa3VndjVzWnFrVDhFTU9qMDZTQXlpNEpnTmk5YmdReG5sQWtuQU5CQ0xHMUF2OXVqSUdSRHh1d0xpL3FIengrWTFhUjBQaiswelBsVW4ydzZrUU9vVHB2UERKSnRZMFgxdHl4ZmduY1hDT0V6dGdJc0FLOUgzZnFyUkM3b2hjUi9WK241OGJNYUJRTCtlSUZuWXAyOHJhd3M2QUdvTHE0OFZBb2RmV2xyOUV0TEhTMWg2K0oxRjVnYnZ2NGlEZEREYkFTOXpTSFl5c2s3b0FCQUhyQUFWeGM5ejlSSE5LNE1WeXd0d0dNRVVCMjRmSzNTZnlVaC9YVk42YnpEMng1WEdMMExBQ2x4bjJKSlZhNWhhczByclYzUno2bDMvN2N2RzBITDlieTU1L2ZPYS83OWQ4dnF2SHZQL3pTV3YvLzJiczd5b0lpUTBZRzV2YStLRTBpZjZrSDRMZVRjY24zRklKejhzZyt6MytJL0wvQ3lIY3hCK3RzTXNwZTIrTVBlZ252ZmY0SUJUdTN6OSs5Y05IdjBYTDJ1ZEpPWUZOZDZJbzUxVXVmMW8xN0xNOUF1WFExdWdaSmdpZkNkVzBNTG5Qait3SWh3cGgybzhoSFd3Wk85VEZHMW0xQ1RvaDBRVHVEV3JOc3ZWM20wUEtmYndYTisrS0J6eHJLNFpvR1pWc0RVZUQ3dXd3cHdPdlVHWjRKSExrbmowUmtoczZPYjZiT2I3ckhVR1c1U0JaZGhXZ3pWNzlEc2VheHNVL09JeDNWWnliSXRoYjl1QkhQMFJzRG1mSTVRc3EzN3QrZnF3elJsc2lFTkV4Wko5YXYxNUxJUUFEZk0xVE1vQ2htclA3Q2ZBQW42R21kakU2YlNEMUM4c2FJZkR0RlFDak8wV2pqdEQ3eGpPTjd6THJqSEwvWUp4TlNjZzdRRGdkdnJNNTJ3MTUwN0FDWnBnRk9XSENzT3VvZzJyZU96UDhIODUxWnJSQnVwa21mVm5kYUxmMUNkRE81Rkt5STNKMHUva3RpNFdDNE1KN3Rxd1NDaUNwc2R3ZExGMHlkaTVmdmZPUHB3ellaQkE4UWtJeUM0bDJ5QUNIaUdZcDUxbjlscTNsWDdjRWtNcHhiUXF4Z2Q3VHFPRkpYcXV6MGtmbWRHRUFkejFjTXJIbUR3c0hONlBpdVR1OXA5Q1dNVHh3MlZEN1NQR1pqeXVaUlVHRnlpcDJhdzE4QU1CcDFLQlIxQkV4ZkNiVmlBNDYwTU90VXdhaFZPZkc1emZ4ZzRub3phVzRTNG43U1FMR3V4VWorQXNiUE50UlFxK3JEM3c0eXZjZ29xU3dRYThUY1R4NXo4Vm8zc3NpZFp0WU1PeHBILzl6Zk82RzlYSmZBQnJLT2Q2KzJrNlpZc0ZLamY3QnZDMFZ1aXpNc1FhVllBOGtFYWkxRSt2L3lmYTNXQk9tT1NMVHp5N0NFLzhlRFVUZElvanFNbm04NDRvZ2M1aWJhQkI1eVhzYWY4RlBnWFFCNUp1eHJUZ0NwSzc1THlPamg5YSs4cllvd25LZi9LcDFFZ1dQeWN1RVIxamd4cW5XRXl6Qk9kQ0RXdlljVTdnOVR3aDNSVStMRlYyVE5hRmxDYzI2OHVIcVlJZGRGK0RIWjIrSDhBR2pKWWN1bW1GRFI1OGRoT2lmaFZENHJnWk5JbWRYSmRSSWhNUW9KaU5YSDJ2cERuZXpyNTY0WDRxVjA4akE2YWRXY1crckZTY0ZLZ0REWTVYbTg0OEt0bW8zOWRPSTlkMkxnK3lETDhRbTIyTVUxYjlUMjJ0ZzV6QTNOemxEbVhQMCtBMnNKbVFLR3U4OXJwMHE5QWpPT1pHSmV5N0dNQWdlSkRCTXJHM1JvRFhXYzZGM2ZPa3VrOXgyTnJQbVRsa3JSRlk1bkxTaGZrdExyRGhmMWdpVUt3OXJvNGNhbGhHN004d0NnUVlTaCs2RDIxaC9leGJDZllKWXRjL2N5QVhhQkwvMEU5UzFwQ1ZMc0ZhdFdMT3o1UkR3VmFjVVlmOU9mV2RJZzZ6UVFzQXI3a3JnSVFTeDNWaW5MRllDZHJ2VmNvOWZHM2N1SE1FNnNNWGlnR3RaQVZBZkQ2UXJ6MHM2N1NQYUtqR3I5UXpYVGFyWlhZQk84SnRSc0MyZDJmZzJhMThRMWJ0ZVVnZENXZEo0VkNBYlg4WTJ4a21ycVpOMlBZMFQyUy95Qm03QnVGN0R4NTZONHNrUTg2aVZNU3UyS2pGbi9kb0xMSnhOaU5ucDZNcG41U01jMENRYkpocXNMYnZrTjdxYUtUMWE4MEY5Wm5ZUEpNNVdqVmRtaUhoblo5dk1lUG53bE1iaU1iWmNuMlB5d1FlNzRrdk5uUTUyc24rTzUzUWNWdFlBc2NFYXA0c2NqMnp3Nnh6Y3ppRjB4ak9hdy9SS2RBUDlKNmp5cE5ZNTJVMzFRamxRY1N4VHJFa3kzcHU3MitGNlBQc1dqRDhUcmw3TFNacnR4TjJIcmp0ZGFmakQ4dy9yejJqdFZIZHlISjJobDl1em5jS1JVTGZUNWs5aG5qeDJmdXhiUGlaaGc2YzZ3VmQvL25YZWlxYkhjVmg0ZWRuL3dYNm9iSUgrK2JMWTVQeGQ0dnBIWGgxaGlnYUhyVmMwMExDbmk5WEptRUxNL3R1YkxMYk8zUjNqSThpblo2K2tuT3k3dXhrcEZoNEcyQUpCaW80ZCtwR3E4Nk9MOW1SUGRZMkNaY1BVQXBzeHJJajdOREtZRWtHUGhkYmJWSHJOSXI5dnBGcnB2WWFjc0NsWUFaUlpCemVaWWtRSnBkZnh0anc2Z2dYcERTYmNJeEFHa0dXeVFNY0UwYldHVWRMaWV0Mkx5Sy9xWnJEUi9pdkh0OWpkNFdEZVZ2Q3NoeXlkaGVuRmpxV1l0c0Q4Q0MyR2FZNzdhZVAwYkdNRmlmYUFZeHd3SG4yOVNURnlqSTJRelN2UmFaV3RGblpDV000Q1ZVYkh4elhOL01OSTMyek5YeHMxVDR6Ry9qQmJ1bm1sYzR3UDd1VExhRnc3aGxMNTU3ajNuU01mQXREWWVVc2l6OC95NTk1OU9lTVQwVFJxMmxBVEVtNEZvNm5JMXloTzIvcVBVbUo5U3dzbXoyR1RrZUM3VXdzTnM0aldyeWFMVWFTejhDRjdER2NKclhMZDdHcEFkRWNmQmljQlNiQWU3Q3I5Mm1CZ0pEZ3pzemtETXpZc2xyRE1rellDaUp1bEd3WVlhaldLRjdSOFpOdlNoTllaREwvTnhjeXNxbjZLQTBscEZ1ZG5mWjhuZ0dnYjNST1N2dWdheGpqTUhyQUZrSkY0V3UzMC92TWlnS2dINmpxWjBzTTJtd3I4R09zekM3MVlWTDJzZllyNUk3VzI1WGk0Rm9NZkovOXNvL0hvVzdRK2ZLY1dBSzJIbmdGRkhvNmNtckxTM1JpREFidlVEVTg4SXZCc3NEVEVHZVZRdS8yWHY5KzE2YzVqTEtPdi9jOGZZYm1ZL3lYai83NnN2NzY4SHV0OTlkVy8xOSsyb28ybTJZY3MyRTIwWG04dU05OU85UmdSSXhMZXh6WFluRUZGZzhuc2o0aHB5WGIrMUVOWUFzWmZ5QkJmTWRVdXZsak9rdXRtalVCeWlLbXhjRmZyOVdhVmVMMzNkVnFKZENRUFBxSGplS2ZSTUZwZEJIQ0c3ZGF6YWhzTXFBRU5FaC9taW02NGNocEVnb2R4dVUxaDhvNHRndGJheGNNTG1WYnhCckFSc3ZlZFdjVW1WZDAxSWR3ekVsc2dGZm5XWHd2YkpnMVNoWnhPbm9EVmNkdk81bkYydVFIWTVmNEY1UTRkSWUxMmd6bkZJVzdDZzJSSFQ2emJLaTNjdmU3T202a3h0amRWRXdGTmxhaHRvUnhWa3lpcWZmZEg1Tmh3QlV3eTBRSFR2QjQyQzJCcDhyMloyS1BCdHVHR1J5T3RJTHl4OU15UEgvVk0vdXpFRktKRjlDZU52UDNoeS90TU1nc084c2F1cFBhL296aytYM2l6L2Vmdnk3WC8zNDVuRUw5MTd2NTdiL3VkZjF1OXU4WCszT3pZWnY3KzRBNXdWbzRHSUM1ZnRZSmV1dTBBSm5RUWNEYm50ZWZCV25sdjdqZC8rM0xPWFhwTW1nSkttR2xMVEhGQm1sZklVYWZVb1ZYaGhYQ1g5N3o5ZGFIeGN0RGFobFAvTkZSRFRndDAvU25nK1kzWFhTViswOWxKazl3aXNrUTAxT3lqSE0zRHY0Q2NFYzZVVDRINTVuM2h1RmFIeEZRMnBGTzJXaHp1RkpDbVVCM1RsdnFqckxVNFJ6QVA3czVxWk1NZ1AwKy9UUGJacmV2ZFJ3MzhEcGV1Nlh0dUJIczJENnIwK2RaZk50Sy96enM3MUZ0MVhQU2I5UmxPaThRZC9SYVpmZllmRjJ1VXV1WVozelV2RSt6VE5vQ01qMDJTL0hzcms1N3lBTm9CUHk1bmFXS0FZZEFSTjFXL2NmY0U1RC9mejRKcE5zaEtkRVorZEJ1YTN1TElkb2MwWFZuWUJRMEpGbjNaSjNLWjA5NXU4Qkx2cXdlSXI0aUhpOW9tOG5FYnlaVEozek1OaVY4VzBOZzdFWlhkRWFNelp6M3dOb0tqSzVvYk1GSm1OYitQK0FTcDVjMHAwM01GSVVXay9mb2o2MjExWEc0SVFHUU1USHhWR25nMjRlOWZXVmNqOFBFQnRwbEZCaW9hT1U4Zmo5aGtuTUZhNHJOeStoeWhkMTJjWnpTRkJra0VCN290STZZdWcyMGw2MVYzU1lDUG4xTTFZMG5ldXhtNDRraXZpZndvbkQxM2NOcnRQZ2RDYnJqcXQ0T2NWYjZNRXRmdll6em5xNnp4eXBIVUtqMW5lY2dDZXhLa0gvYjBkUUJHZFpKWWUxNFRJK1hlREIzRDg0WFI4NFNMVlRFZEFBT3lFamx4NElEY2Ezc2M5ekZzbitUSmNNM2RTSENWZ2Ewejh1U1FHN3NTSVIvekNmSEhUbWtDY0M1Q2p6ZXdZZmdGNFVrR3ZBM2JlSElqZkE2d2hoOFVSMXVCcjIwUUxJMWdLVXpYKzFydHUzTStsN0FvNTFyeHIyWDRSQ2JvMWFSa2JYeHE2Und0eDNmaEMxWmpyYnNOdDA2bXJUWkpoMHV4eCtFaEg4RklJSUNiOGU2R01rNEpZb3hPeGtITUhVYjRyUnJhY3ZHckJoNlBXakRnbjBUREVqOGhZWVg2Yk1KV3JNWUMzTDE4R0pwREljQlliZC9NNkRPZkkvYlFWcE9ZZ05RU0hZVjd3ZVozMjFkZGErVFJuZWtLcHdqTy9kMU9FWWt2bzREZGhqK0djRTBucnV5dUdjMkZvRFNzckU3OVpxbFdPV2N3dkR1bk9ZNE15dXpnL0dCYXdyaTQ5em1NNGhrbEYvaG5vYlVtSVVzSHdQZ3pDelRTaGlDQmRHLzBFaFFITlRWdVRaQ25MYVBWZXY2dVhRN1p2Nk1lVisyemZJU29oZHJZVnQzSUlLbGFyQktRT2pGN2pkc2UvSkpIL2t4OStuamNkemN0b0tGMVRlU2J3R1Vsc2lBRkFyOG1DT2Jwb1k3dEFjb0VDNlA0bkE2aHVVTXAxUlNaQXUxL1pWTXZHY3k3ZW5yZDlhVk9lbmwrUS9RUWg3dHBIczYzaFk1WWRmczNPZS9aYk1pVW1TZ1dDNEQvTXZSbWppSFg2RDMzNGtyNlZKTVhyWlNMRmdLMWlzaXM3a0RqNDA3T2t3aE9CaXVRSHZDeWVNNW9VTHNhbkhhWWd1ZEZ2QnQzUUo3S2tWdlR0aVMrRmwyczY1ZG0wMDF3UmpQNUhtZHZNdWwzcE1iZzBBNTNXN0FPRHFJWTlvTEVneldMSHZjc2pLNk16QUE4Ym84cldHaVhzVmhQZ2tFYmwwd0dJR2ZldTM5QSt0SDUyMWlEcjVwODJNcGdoRWJwTzFTYmJhUGFnSXVQcEhuTktYY25QLytBdmRaVVpPUTJRNTlGSGFoM0V1MzdieVFWTGNRMEs0SkdOeGZZNnNReVBjNHhYOGJYU1U3TmdCNUI4ZFEyQnpDbDE5WDNjd29QdEVDQjE4K1FVMjNTWmIzUWw4dytzV3VKMjluSGF3VG1DcytvVGtZMzk2WmFuK2VrUmhkcTEzOWF4Z3lmUzN5UDJWTWQ3b3YwVlpsMjUyNlpnc05FcThZdjZmZGFUazN4dk9Gd3EvQkhxWUU3Ri9SbWhTbk85OUdmZmNKbjF4bzl3ZU4rRHl5Qld6czNNdHpwc2lYbm1pUnFaMGsyUmR5dE42L0pJTnQ0UG5uOUtyckgrT3JUS0RDR1ROY1o3RzVEaWMwL0dYenRPYzFGQ3YxK002MkpnWlB3UVo4VHRSeElqUU9NYldyQkFzNllNUGZWL0swWVE3U1o5UTFzejBRNHJVMTNwYk9Jay93WFNFUUsycHJFdHVLeW1wRTBhekxtY2VtaW02TXFIUFFVU3hXODhYcllhdTFOZEdPdTU0ek1vQjJzOEFzVnJIYkdHeGcvL2hJNHdNMlgvekViZ1dLZHVielduSUwvd3c0clhMR0w3L0FzQWFZRlpwaG84YXRNTllEWlhHMlJsRVFQbEJMdXh5MVpXOHlaSHBiWFZ4US9TQmN5cGEvcy8rc2lpMHNFK1Z6cUluaXNrOVN6V0J4YzJnNE9qNDMwSzh0eStudEdKeVc3ejdPdUxUekZsS0NKUGRqZHJHWThqMEVGa3A0VzhnVzdTMHZkalZhN3ZhT0s1WnNsNS9sbHVaYkxWcEhzT3B2c3VGdGRHSGdZdkNkR3ZjWm5aZFRuSXlRNjNJOVR3Sk5ZQWluL1pPNk94bGQwVU5VTVIwYTR1a1ZSdHFHRXdhaHFvZ2J6Z1FENUtEdzRXd3g0SktqVkR3bTVESzAvMWl0Q1RNMWh1ZjhWNHdHckFUcVlEN0U2Z04rMnFrZ0huNnc5bTVOUDJER0huVlBJempMT1Y5R2N3VmF4YzRzWHVqTVZpeUNZWFNXbDEvT202MU9sd3ptTVQzSVkySnRicTRNamlwWWFSczdXN3lTSmN3V2UzZ1NUN2RkeHE2Wnp3SkI1Nzg3MkRlbHoyS1U3cUJvVzVSOXdBWVE4WkFKamJyenZMN0w3cDdITWo5ci9lMVl6YzV0QmtMd0FqZHd4RzVlNEtUZGNmZm5EQlI3MjdOczEra2tnS2xsRnRTb0g1TG9kSGVZUFU0ME9lcjZYbzdkNG9HcUk1UU02emxWeGxaT0FGV1Foajl2cWc2akFzS01BWjVCQ0s4Y3ExV2p4OHJaTGZJdHAvS2lBT09NZER6YW5mcDYwalRnbUFxUW96alV5cWJGS0RjbzQ0VGpyN2dkTlpSQWpzYWg4Q0dhTlJ2MzdQVzMwdmFjS3VBRXlSSzVQZThlSGd2UERYTy80YlI0bm5rV0YwaU1hK05ieTRCMHoxMnRyTm0ybnpza0paaitCM0k1dTk2aFA5aU1kaVl1QThHclUwT0FBVHJxV2ZCcjRjbkcrZmM2UlgrYWZGYmx6QUZ3aERsNjVVU284Zm9zemFsYzFlbkhqNTJjRS92blJ2Q0NrSnJQU2FMZENiMjJ3L01Hd2VnaDdCZFcvc3lGRllxWkpXdmwxcnc2dE43REVTQWFxS2I5cEkrVHR1TzRUa2xqUGlOdGVYVUhFUlM3a3M0RzhNcjl6SVhVVE85VHkrR0V0MkszK1BLNEJZQklldkZ2MElQTGVwZDU2dGlzcGtBRnN4bDJHM2lUNGNWMHlwMUJ5S2MxcmhlYkdCOXIyRUcraUFZd3J0NW5jUDNGYXRnNmNzVFplcTBqMEZiTW1pZHF2L1RKZzVmL2paMCtFWXBkQnliQzNwdS82Y0FGTk1oT3JuQW9POThZOVVGcDU2K3QrKzNoc3gzODN5NTUzTVcvL0JUN2Z2MVRxSjczRGhXYzhadGZZckZyLy9kTDVwOVgvdHZQOFBRT3g1N3JPbTJUKzBhZHNSdFNhdERGdWoxbUFTY2QyK256WDh0SjFyRmdYdS84cGpQTzRIWkduYk9qMmpodmVQMXpYWDd2S0VQOVBlLy83UG11ZjMzQWZ6eGZCQXkxVlJ5bSs4QVQrMnRhYmp2SXltcmhRMXl6aFdUM2hIZ0hlKzh2Si9hbDkwK2IxOUVXREdob1dIL2tlK1V6Z2p3QWRvS1JHbmI5SElqenJDK2ZTanFMYUNOUTlKa1hacVpGQi9zdW85Vm5Ndmo0NEVleHZ0bm9mTFVrc1owT2lnZU54Rm5EUkR5MkIzNjZmS0w2RnVOL09NaHpSb1V6MVZ5YU5OZzdRTy9lVHA1ajllMVhyTGFpbndwcGlFVURuajhOV2pyMGZjMTRDY3YzWGF2Vlg1djA5MXRJQ2E3elVESXdkd3RPUUFnVGtRZC9ZV3FEWFp2WWs5Y1JCbVU3Ui9nSTZjMGFtV3Q1REV6djRUU3p3Q3Fpc3RZYkJ0Ti9Ob0VOY1VYVnZ3V25yR0VmdjM0N0ZOUVJjSjQwOGE1d2RZODYrdXhmOEFYT21GdkxWbmZ3K0ozdDZ6Nk92SE0yY1hWMkpaWUVZTHVhQ25lT0g5aW5GaVZmbHFQYVRIeE9mTE4xSU5qQ2J3SUVQYmYwZnZ4NjUrQjJtQ3Nza29YUnhlcFE0KzFHdzlLUksvdjd2OXVoSXlmYnlzOVpCV2pmb3FNWnJDMndXVDJmVXlhSDFYVk8vLzh6YXVXY0paWnhwZTB0OGJJWXhrazUzUW01TmlUb3pWNGpNN2dBOGU5WDg2L3lvUUFxTXErRGV3TDBKUHNFdUFOYytuR3c5OFVLZUpsdDdRRTNQNE94c3pkK2s0ZXN4TjRobUNGM1l6cmRvc2o4Y1p2eFdGenVYSWJqeDVEMHF6dkdjejhuaUtIdnJUYm1aTFBpYk13Wk1tcXpUZ2Rhb25RQlJ1bm8zZjQ2WGRKdW1uRG5DY1Z0VHF0K3pWREpIZU1haGp5QmRmYW1PRWpRR0M4S2dWbSsyN2JjYWxxQ09VNWVFRGZhOFJQR3doY28rS3IxeklhWVFxVG1DSU8yeHVOSktmSUttNVF4SXUxZEh0amxxVkZHMEl5L0EvS2NNeFZDZGd5RXNSR1dZWTFpQXl0SzQ4UUE1NDJiQzdZTFlOdEo2SW1ZemRQV0tqaW1DMTBkaXJlc0szRGUza25Jd1duWm1OZFl6YXRCeHNGQkdCMTlaUWUzalh6T0ZzV0ZoWFBnbUFIV1J6RGtsT3BxLzQ1VEJWN0lTZ2NlNHpsWE94cnlaL1N1cDJ2QWR4T0FFTjRJYnVGQy9PY2NEUWRjUEwybWF1TnBIcFpRWVFYcVBuWCtzTmd6NldlOURqVEJ2TDRPRUpsUS9XV0I5N1pIUERudTFRbW1BOUtQNlFBQ2R0WURhY0pwclFlcGdFSmc5QUtJSlRzWFpNOEhON2xnSlU5ZTZEWTR5NVkrYkxUSFVEUlBXektHSEhqR3gzSnBRZloyd0Jpa0pqdEVibjNPemJiSDdBN2I0SlBSRmRUVzdybGx6WnFKdzVGc3REdmI5OERaUEJPdzVXankzOU5WMkRVNzNMZW54bGh3NGlHc096bnpGdkF5RUIzbnpOZ0RjM3VjWEMvL01ndmJ3cVl5L3ZUVHJyK1pzNXovL3ExLy9jNFptbW5hMElIWXcrRjRTOVNRem5sc0ZqSlZxRGtneTU0OUozNGoxL0VjMVZOdFFSdW5yZ1loVHNueDBKYmNJQWpiM3JMVkZwN2Y4ZXpEYWNUMWdqMEQ4bkowSU1ZcGJiSkw1VDBaaVBramR1Q2svKzdyRzNRS0NhczlOb2Nwc0pvNVFKNnFjMlphc01FNnozTjQwV3RJTldHN25qNGQ2M3BtVE5zMGRRcElteFgvQUc4ZStZa1hGc3l3OFRZMWZsc045ajk4cG1LZmZCd0RtcldPcTBxMVNxOGZFSmVlRnhLQVpRNnZoWXlmQjl2QkFaYjcxb0tWQWw4emNPdEpUWFo1UEU0WnhvUlg2eUtBMG0xRDBXMHlkNmJTaVNMWFgyVFlzMjRNVW5pNG5tTWg0NWxZZ3BOMHJ2Q0p1K1Z3cllWN21WYm9POW9SOFppdjRZUHFxQmN3Tjl0NG5qLy82YS8vRFFhM21lc2M5MlVtNk1oTHZJNjRIR0ZoMWY0cFNQSGZ2aTU5M2JxcWZCRC9hMEdEVll0V21zQUVlcnlLM1NnQTh3cTczc1hJMkZxZUJ3QnlIQTcvZENZemJNMDVkbllreE5xQ25pT1krUmVkUDVLaENJVzROZHJzV0xJWWY4azFrM05qMlYvRGljTW12QS9XMEkyS25LbXJ3VnJuNHJGY0ZsSTRJZVdrMWEvL05xL3VtWGIyWWV1NFVZY3prQW9HNGxRVXlQUDBFS1VCV2hTTTQ4UHlKZkMrblV4Z0JiZlJRS2VncmVuOFM2T1pnODEzcUxlVkx2czljNnN0MDlKYWFFL0RtOUY5UXdZWE1LTURUQ1FRY0xKdUlIS2hoUG11VGxWL25DTnVCMkg5bkwvRXowaEwwam5BemtIb0EvNTlnNGJnSW13aE8zWG5BdXBvNW4wL1IxNkJOWndVTmswR2RTbmU2N3dMUkpBMTNBWnJzRWlHcnozaVlJQXNjNGNjODNPbUwvczlTbUczcG1jdW5CcG0yTFZJQmF2bHFaaUlQSTZTSGZIY1NLZytUc3ltclZHSHVZam53b0FCY1l6ZExOU2dUVXc4cmcvbytTNEw4WjdIdHVuaTNOeHNPKzNub0JnYjd5d1pibmZCVEJlanAvQitUS2FuQVZUcmhMTjFFL0djM2dPZ3ZIZkZjSDlHSEVCaVdGV0xXSVlENDdkRE1MbjE2N2xOc0U3ZUJGMnp2QitIZXRjS0JuRzBlUDg4eEk3bk5HY1RuMmRZWi9mbnlDdVB3b0hTL3M3SWFyZ293K1hoSEp5RXE3SC8rM01NdHVld05tZTA0QzdSWUtSb2ZSVWJ3U1dkVStRWXpISnlMYTloeUF6QkJlMTRFa091bDNQSFc3V1h3bmx0ck84SHRrYWVuWWtsbFB0ekdpT2dFUTd4MDd4UExPM1FobmVkempsWTUwVDdiNFBtT3g2bGdmLzliMzdVb0hZOThZVHFKSlhpYVdmQlRuZFcxTUM0VSs2c25KYm1lOUFkZ3Y3OEFOV050Sm5nRzhsTUNWemRtd0h0SEFFenpsR1JxNkRZb0RHbkREZjcweE13cVlLUW5EWDdIQ0x0eU5LN2ZkWFRPejA1OWN4M1FmcnJjRHlEZHJMQUxJRDdEbEQ1S3J1bXhKeUlpWlRIczE4OFpRL2s3YUc0dytIK3dTRkw4VDdCbHBvZHZnZUtWNTVQZHZCclRxcXpXMHhvNFBTNjRjUkZEMGV0UUtLNlBDUFM4U3hkc3V5cjhrOUFoVlUvejMwYUFUeWYwN3A0YkVudjdUcUpGOUNsZzJhVmllaWg1WkM5UitvdkI3REJBb2RRN0hBby9WUWEyMEpsMVE4bTBIR0pTTjFiQUtOcm56TW5vR0JCL1p1Ty9Cb3ZiQnNEYWsyZFo1M1lsb3ZpUEFHaTFQM0JkZWJWb2pPZXc0YkphNWZwL2pySzQwUUtYTXp6TEQzZEVna0oydTNhVC9ZemRyUGxZR2d3RkovSmY1MTNXcitUKzIrWGRZSDNPZHJIQks1UlRNdTFxb25pWUR0TFlWMkFOcERJSTJKL0JBeGt6RlliY3dkbDJpQ1lFY2hUc1c4OThmQW93SGxLWmw2bkhqaFFFMlZ6aXA1OXlSQ2RmV3V0djJqRjdqNk5uTk9CZFpDdmpvWHN2NGtoeTlFUDZWK1Z3b2cvTUJiejI2b0htb0phV2NFRG5XMTVsWDBYNXp4N0NvTVRiMDZ4Mll1dUJ5VVZNMncweFZOdVlyQUZyVnJwNDZrdGtBZnJHZi8yaWtlSGpnWmQ5emxDcHRXRDZJc1RLb0taaXZ2YnhUa1ljWGhnQVlUVUh1dlg4ZGU1ZUE0Wmh0VVUrdHhXaUdEQjM4dVdCQ2R3Mld0NzZ2L3pMMGJDNHRaUWYyWHAzNS8zenZpUCtEcGtPR0liWXJubFpmMTBIcS9MZzJYUVZDZlFUSDRZeEZxc1Q0Mi9uaFljMWZyZlhmcmtyWUtEMDY4bCtMWnRBUmlNT0ZyZGhqbVl4NDk1Mk5BNTZRNi9GZlJYNW91dHpFUHpEVnhDQVlQdE9pYkFMMzJDZ1NlRGpZNmJEeDRQZ0dMQ2NzN1p3STdBZkR6cEdMVjUwMWgydUtmYndmYnY4YTNnVzZoV0hGYzk3V2FtZE9YeVJWeGN6UzNvZjdjVkVjT2h3Q2ExQzQ3S2s1QTlabU1iZ0JxZVZYc0x1a3l3T0hJWExDbjdpNmJjUHFjdEd0TXNRVXAwVGlscUo2ZDVvMzJtSXg4blY1YUQ1aEgrYUlOem1QUDZwU29GYXNIMHROT2YwMkQ5bHFOM25kRWI0enJUbWMyc3RUT1l6VURmNDRtb3poN3BKeTN6b212ak50MWpxV0p4aXFPbE0veVk4MU1xSy9VQXBSMm1XVytQdXdSSEZEdGNBQmt0Z2ZkZTV5SzNQL05xZVVpWThNblF6TlNkQzJTZStINHdBTHVlU1BHTXU4YmtNYjdaREJlT3VucWVGTXpRTXQxNENtRytDd2RXSCtjQ3ZtVTFzQTk0Mm41YnozNTF2TUE2WTF3ODBleHhMay8rZFZNOGY4N1Z3c0J0VDY0QmRGMVdUTnVRNy9HQXJMT1QvZmM1SE9aOHRCNjNQSm9ub0p3SVRzQzdyNG9yaTU1NitwMVJxeDdNbU9EOVZyRkFRSjBYamJleWlMLzhUUzA5Ly91RkJNZm1hUXBPZFRRRVpxT0RTZnVURVR4RFVDOU1qR2JaZVFmSXlHMEZuUU9tSEhhMFR6cXQ1Tjg1UHRaZEZhZXMyMEg0bi9wLzZVS2RvL0NkdlAzZks4M2ZadkFXUkhMYUJUM2w3VTM0eFZvZFRGQTgzdkp6T1BuNzRnKzNaL253bzlwS2VJaGQzazZVQ3c1OXkwaVEyNDM4VktNcjAyTlZzSDhuVHZTZTA3V2hDajFZRGNvbnJuaHFUWkRrVTNuVG5aNTRzeUxvd0x6UElRT2oyVzZKRUU4bktOcDhiM0d5SWJieU9Ea1poZ0RvU0pjTkx0YVBXVG0yaHZQaGtzZmtnYUVmaDhNSEo1YS9uZ3I2Mmd6ZG5PMnBMM0w2cVJXWW5yV0J2RUhYMzlmanc4VHhqL044K1Jtbk8rQ0lkYVpXN0s3b3NNOXUvUTRPK3daMk8zcjhPY1Z5ZUFCMmFEcE00RG9oRkFDNStHVTYyZ0ZnNWJBZ2c5UFJVOEtEeHhFNS9NekRUNnl0aE94Nzh0M3lhRGxJaEFLUzhQMC8wb0tjTjFOaWdHWkQxMkU2cmNhSjJxK05EaW44OHRIMmJpZlU4UFdjS1N1dGNlWEpRdWRRN3N0Y2RRd1oxbStlZHppdVl0M0NRanZSRGV1Yks1SXh6eE9UdzMyV09UQWxveDhrMGV1SUtET28xck1Ta1dYZFRJRkkyS2xSREpuK0NpdzFUTTZlM3RGRGZLM3g3UmFFYnVNTDJHSGtkVHYwc1RuWjY4OWswN25QSVhNZTBwREZhR3hyR3lmVmhLa2YyOWxtRW1qUFMweW1mOHpqLzg0N0F1cjlacks4QzFPQmVTMmUrUHhyZ2JRbXBKNGhua1hHNlFHTjFWbmlGaVpoNHExbWZteDF4S2ZiakhRNldLWm52enpid1ZPNGpUZWVmQjJ2M2U5d3N1YU9uclJvekJTVnc1ejVUQTdBaHZyMWc5YnZEeVhEdFhtMldKYVlwdGtTQW96bU90SGZFNmxONFFHbHpwRkdOcFFBOHl3TEhSNjEzaDJpM0o1cXM0SDlXTTZybFdBODV0M1J5eGgyUUdNTW5qMm1EeDNRVUIyY1d5eWVsdVp0TEhnemNlRXVPNURXSkNPc3RsMW53aXcyMi9PL3krZTVndmFOVEpkbHRHTTVrY1BuOUkwNkNPSjJCb09EWWhUTlpGdnJPUXNsTFk5eWFpZjV4MjRhWGJIeHFXbmVUdnJPWkp3elJ0WFk3V25BVmt4Z0V1SDEvdGpkalZMakE2dERGSk1CYnE5L2gyTWhEcEhTWEVIZWx0bjltTTVSV3g3QXhMN1pHOHU3MnJpaHF6WWN1YkgybDlVZXJ6bnpjelM5REdlbk03YXBXZk53Q2xkVzV6WGY5M1I4WTVGd21kbkdHNk9BbnZzVHo3SGZGK1ROZ2pWTFM1cjhJdU81N3p3OGRDSmo2UlpiWUNWRkVoMDYrUTAzalgzVElYZ3YrWkJkcDlhd3Z4N2VpZzJ3RU1hS0pydzZUMlgwZEZwMyttWHJZVDh1Q01IQ3VaZmxvUjNZeDlJTlpUM3VnTW5UeTAxWVo5Nzk0TW51NVpFWUNJQnpSb1NrRm0rSm9MZkYzR2RtMWhsbzdSQ3d1czhCMzFhN2xQWmRBUy9aN00wS1R0d2Q5em5zT1ZuVHREekJRalY5ekN1YkVuUzRQUGFlYjJlSHdsYjcxN09uRmZlK0w5dWpIVCtGM21WUDMrck9CdkRjUC90WHduTU9WUExRR0E5eHFpYmcyRi9KWnZmSWVnK3R3YXpwZjY1ekxDckk1ZnIvQXBZVHFBOGFKZXJZQUFBQmcybERRMUJKUTBNZ2NISnZabWxzWlFBQWVKeDlrVDFJdzBBY3hWOVRwYUlWQlR1SU9HU29UaFpFUlJ5MUNrV29FR3FGVmgxTUx2MkNKZzFKaW91ajRGcHc4R094NnVEaXJLdURxeUFJZm9BNE9Ub3B1a2lKLzBzS0xXSThPTzdIdTN1UHUzZUFVQzh6emVvWUJ6VGRObE9KdUpqSnJvcWhWNFFnb0I4OUNNak1NdVlrS1FuZjhYV1BBRi92WWp6TC85eWZvMWZOV1F3SWlNU3p6REJ0NGczaTZVM2I0THhQSEdGRldTVStKeDR6NllMRWoxeFhQSDdqWEhCWjRKa1JNNTJhSjQ0UWk0VTJWdHFZRlUyTmVJbzRxbW82NVFzWmoxWE9XNXkxY3BVMTc4bGZHTTdwSzh0Y3B6bU1CQmF4QkFraUZGUlJRaGsyWXJUcXBGaEkwWDdjeHovaytpVnlLZVFxZ1pGakFSVm9rRjAvK0IvODd0YktUMDU0U2VFNDBQbmlPQjhqUUdnWGFOUWM1L3ZZY1JvblFQQVp1TkpiL2tvZG1Qa2t2ZGJTb2tkQTN6WndjZDNTbEQzZ2NnY1lmREprVTNhbElFMGhud2ZleitpYnNzREFMZEM5NXZYVzNNZnBBNUNtcnBJM3dNRWhNRnFnN0hXZmQzZTE5L2J2bVdaL1A4YTdjbUx3MFh4dkFBQUFCbUpMUjBRQS93RC9BUCtndmFlVEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQjNSSlRVVUg1QWNDRUNRU1IxL1VNUUFBSUFCSlJFRlVlTnJzWFdkNEZGWGJ2cy9NMW5UU0V3SkpxRUtvU3ErQ1NGRXNLS0orb29DZ2lJclN1d2d2dlNnZFFTa1dSSDFGUklvRkMvS0NnQ0NDUWlDMGtKQzJ1OGx1eXZhZGNyNGZPek5zR29ZU2l1eHpYWE50c2p1N00zUG1uSHVlZWorRVVvcTdWZjc4ODArTUdERUNmLy85TjhMRHc5R3paMC9FeHNiaXE2Kyt3dG16WndFQUd6ZHV4T3paczVHYm00dEhIMzBVTE1zaUpDUUVhOWFzQVFEczNic1hJMGVPeE9uVHA1R1ltSWhHalJyaHQ5OSt3OWl4WTJHejJiQjU4MllVRmhiaTBVY2ZoZHZ0aHNQaHdOR2pSMkV5bVFBQW9hR2hTRTVPaGlpSzRIa2VnaUFvcjRJZ1FCUkYzNytKS0lydzNTaWw4aXVobEVMZUFKQ3lyd0JBS1NYUzVTdXZaZDRqNTg2ZGk0bUlpSWpUYXJVeExNdkdNQXdUeFRCTUJDRWtIRUFOQUNHRWtCQUFnUUFDQU9nQmFLU05CY0JJdnljQ0VBQjRwTTBKd0FIQVRpa3RBVkJDS1MyaWxGb29wV1pCRUFvNGpqTzZYQzVUWGw1ZVh2UG16VTNTNzFDZnJkei9oSkN5bjhudkFRQWxoSlI3OWRrb3d6QWdoSUJobUxJYlpWa1dMTXVDWVJqSWY2dFVLdVZWM3RScU5kUnFOVFFhRFRRYURiUmFMYlJhTGZSNlBmUjZQUUlEQXhFVUZJVGc0R0NFaFlXaFJvMGFpSXlNUkhSME5PTGo0M0g0OEdIVXJYOFAvSEpqaE56TndIWTk0dkY0a0p1YkM0UEJnSUtDQWxnc0ZoUVZGYUdrcEFRMm13MTJ1eDBPaHdNdWx3c3Vsd3R1dHhzZWp3Y2Vqd2NjeDRIak9QQThYMnFUQWN4M0UwV1J5QUJYQnN4S0FabjhmeGtBS3dWWXZ2OXYyN2F0Z1Y2dnI4ZXliRjJHWWVvQVNDS0VKQUpJQktDN1RZYlpCZUFTcFRTVFVwb2hpdUpGanVQU3JWYnJoUUVEQnB5WHdjMEgyQ29EdkhJQVNBaWgwbmhSRUhKNVlBZ3BCWHkrSU9jTGVtWEJ6aGYwZk1GT3A5ZERwOVVpTkRRVU1URXhDc0NGaElRZ0xDd000ZUhoaUl5TVJFWkdCdHEyN3dTMVd1MWZYSDVndTNZWk9YSWtWcTVjZVZ1ZFUzUjB0RmZOcVFETVpLMU1CamI1M3NtYW1pOTQrZjYvYi8vQjZKalkyS1pxdGJvcHd6QXBoSkFVQUkwQWFPL3dXK2dHY0ZvVXhWT0NJSnh5dVp5cDZSZlNVeC9wMjZkQTBoUjlRVTBzQTRDZ2xDci9YMEdqbzRSaHdCQUdERVBBTURLWU1aUmgyQXBCalZXeFVLblVVS3RVVUtuVjBLalZFaGdTcURVYTFFcElRRUJBQUFJREF4RWNISXlRa0JEVXFGRURPVGs1YU5xc0pRUkJRRXhNakIrWi9NQjI4OFJvTkNJM054Y21rd2tGQlFVb0xDeEVjWEV4ckZZcmJEWWJIQTRIbkU2bm9xV1YxZEQrUVVzanN0bFpCdEI4TmJOUzJsaFpVSHU0N3lQczRuZVd0TmJwZEswWWhybVBFSEl2Z0FaMzJXMDZKNHJpbjdrNVdjYzBHdldmWThlTStYUHYzcjJpRDlpSmxRQ2VaTVlTU2dnb1FFQklaU0RIZ0dFWnNBd0RobUZwS1lCVHNWQ3hsN1UybFd5aXF0VVFSUkhCd1VHSWlJaUFYcTlIUUVDQVlwNGFqVWJVYjNBUGFrZ2FYR3hNTENLam92eUx6ZzlzMVNmRnhjWEl5Y21Cd1dCQWZuNStoV2FuMCttRTArbUUyKzFXekU2TzQrRHhlTUR6ZkNsUTgvR2pFVjgvV2dXYUdhbkFYNlpvWm1QSGptVWZlK3p4VHVHUlVlMkRnb0k3RUVMYUF3ankzekhBYnJmQldsS01WdmZkYTZPVUh1SjUvcERWYWozODZxdXZIdnJpaXk5NFFraFpvQk1yTW0zTGFIRzBsRitPVWNBTkxNdUFZYjBncDJKWnNMN2dKZ0Vjd3pCZ2lGY3pMK3QvTTV2TnFGVTdDYUdob1Y0VE5TSUMwZEhSaUl1TFEzQndpUCtHK29IdHhnbkhjY2pLeWlxbHBSVVZGU2xhV2xYOGFHVzFORms3OHcwT3lKcVpiR2I2YUdTK3ZqSkNLV1VzRmt2am9LQ2crMW1XN1FLUXJrZU9IQW1OVDZqdHYxa1ZTRzdPSmJScDNicmNjK3JRNzRmM1JVWEg3aThveU4vZnZtM3JOQW5VS3RMcXhFcEE3cklteHpDVUlUNGFITXVDbGJXNGN0cWJDcUlnSWpJeVFna3c2SFE2NkhRNkZCVVZJUzZ1SmdLREFoRWNISUxRMEZCRmU0dUppVVZ3VUJDeXN6Smh0OXNxdmQ3QXdDQWtKZGRGU0dqb0xSdnprdUppWkZ5OGNNdlBVM1czVFhaS0tRd0dBMHdtRTNoQmdNMXFyWEEvaThVQ2s4bFVTanV6MisyS2R1WUxaUDhBWWhWR05XV0h2MlQvZ1BqNHg4cUNtY1BoNktiUmFIb3dETk1EUUZQZjgzUTZIWDRFcTBTY2pnckhKdFR0Y3ZiVmFyVjlhOVpNd0tYc3ZKTTh6LzlpczlsK2JaclNhRDhoRUh5QmpsSmFUcU9UL0hNQUlaU0lJa1JDd0lnTUJNSlFoaEhBc2d4aEdCWXN6MUtlNWFGU1NSb2NwNElnOExEWnROQm9OSXAyNzNLNVVGSlNBcTFPRDZmTHEvazdITjY1WnJOYVVWSlNnaUpMQVFJREF4RVdGblpGTFRYajRnVTBhM0h2TFJ2emkrbm40WERZLzFHYnJ1N3pWTjF0b0hiczJER0FNQWdNQ2taZ1lCQmlZa3Z2NDNBNGtKT1REYmVIQjhlTDRBUVJna2doVWlpdkZLVDBSbEZtbzZBVUVDbUZLRklpS3BGTDcxYld4S1NVRWlxWm1jUWJybU9jVG1jZmpVYlRoeERTQjBETmE3M21IM2YvZ0kwYjFzTmtNaUkrUGg0ZmIvb001ODZkeGRBaGc1UjlKazJaaG9jZWV2aHV4YjhtS3BXcVNWaFkyQnRaT1hrNWdpRDhZTGZiZjBwcDFPQW55VndWS2dVNVNpa0ZvZDRBS3dVaElrU1JRQkI4QUk1bHdmTXNXQlZQVmJ3S29pakE0WENBNHppbzFXckZYV0czMjZFcExsYUFUblp0T0J4MjJPdzJGSmlNQ0EwTmhjMW1RMlJrSkhRNlhhV2djU3ZsbjBEdFpwM25YUVZzQm9NQklBeWlZK0lxTmwxeWM1R1htd3RUdmdsbXN4bEZoWVdLSDgzaHNNTXBtNTF1Tnp4dU56eWNCNXhIMHRaNEh4OGFMMEFRZU1uY0ZDR0tzc2xKQ2FVaUtBVUJLTGxzY25yLy8rMjNBOTBURTJzL0doOGYzL2Q2d016M2VoYk1uNHVacythZ2RlczJLQ2twQVFEVXExY2ZQLzc4S3dEZ3BhR0RxMjI4TjZ4Zmg4Y2U3NGVJaUloeTU3VnN5VHM0Y2VKdmFEUWE5SGl3RjBhOCtocFlsZ1VBWkdkblk4V3lKVGh4OGdTMFdpMTY5dXlGbDRlUFVENnZEcEdPV2ZQRXlSTXZhclhhRjZkTW5aWXpkTmpMMzludDl1K2FOV20wWHdJNG9ZelpXbGFMazRJUElrU1JnU2dTeWdnQ0JJWUZLekJFWUhtSW9raWRUbWM1WUhNNEhGQ3JOVjVYaGpTLzNHNDNuRTRYSEE0bkNpMEZFdEE1WUxmYkVSRVJnY2pJU0w5YTdnYzJ3R1RLUjJCUWNMbjNiVFlic3JPenZEbHArZm13RkZwUVhDVDcwUzVITzkwdUY5d2VOenh1anhmVU9BNDh4NEZUQUkwSEx3Y0VGRkFUSlRDVEUyaTlJQ2FibWFkT24yMFNFQmpZajJHWXgrMTJXK1A4L0h6RXg4ZmZrT3M5azNZYWtaR1I2Tml4RXdBb0M0RVFBcTFXcS94ZFhmTGh4dlhvM0tWTE9XQ2I4ZlkwTkduU0ZQK1pQUmZGUlVVWU0vcE4xRXlvaVg3OW5vUW9pcGcwWVJ5NmRYOEFzK2JNZzhsb3hMaXhveEFWRlkzK1R3Mm9sdk9zNUpnMW82S2loL1YvYXNDd3JCekQ2YzRkMiszNHoreTUzNzR3OFA5T0FSQWs3VTBneEt1WVg5YmtLS1dVVUVJRVNpa2hvaWhTUWtRSUFrTloxdXVPY0xsY1VLbFVWQTRxcWRWcXVGd3VxTlIyeWFYaDlkTzZQUjdKWEhXaHVLaFEwZVpjTGhjY0RnY2NEZ2Vpb3FLZzErdXY2YnEvMnZJbDNsdTlFai85c2hjQThNckx3MkN4V0VxNVl5Wk5ub0llRC9ZRUFKdytmUXE3ZHU1QTgrWXQ4R0RQWHRXK1hoZk1uNHR2ZCsxVTV1anJJOTlFLzZjR0lEMDlIVXZlWFl5UzRpSUVoNFJpNHFUSnFGWEw2MmMrZU9BM3JGbXordTRDTmw3Z0VSZ1lWRVo3eUVGdVRpNk1SaVBNWm04S2gxZExzMTcycDhuUlRvL2tVL1BJL2pRdnFBazhENTczRFFnSXZta2FwSFJBQU14SEgzK2k2OXlsNjFNc3kvWW5oUFR5ZGFyYVNvcXUrenFQSHorR0dkT25LWnJBNDQ5NnpjeCtUL1RIb01GRHF2UWJodzRld01vVnkyRXc1Q0V4TVFsanhvNUhTcE1teXVkN2Y5MkREUnZXSWQ5a1FreHNMSVlQSDRGMjdUc0FBRWErL2lxeUxtVUNBRWEvK1FaVUtoWUpDYld3Y3ZVYWlLS0lybDI3NGVHK2ZhSFZhaEVkRTROV3JWdmo3Smt6eW1LcUVSNk81d1lPaEVhalFVS3RXdWpZcVRQUzBrNVgyN3lvd2pFYkVVSWF4Y2JHVHJpVW5iZmI2WFJzbnpIOXJSMmZmYmJaQ1lDWE5EY1o3QlNRazMxeGhGQlE2alZUS2FYVTdYYUQ1M2tpQlJVb3ovTnd1OTFnV1JWNE5RK092K3l6NWFSZ2xMV2tSQWxNZVR5ZVVnQVhHUmxab2ZZbWlpSVloaW4zTndEazVlWGgyMTA3UysyLzV2MTF5dDl1bHd0REJyK0FqcDA2QXdCV3IxcUo5UFFMY05qdHFGZXYvdFhaK2syYUtJbnNWenJIc3Y5YnpHYTh0K1lETkU1SktmV2RXZjk1RzZOR2pVSHpGaTJ4YStjT0xGKzJGSXNXdnd1WHk0bUZDK1poNWVxMVlPNG1ZUE1ORkRpZFRwdzVjd1puejU3RnhZdnB5TTdPUWw1ZUh2THpUUXJBRlJjWHd5cVpvamE3SFE2N0EwNkgweWRYelEyMzIwM2NiZy94QmhFODRIbU9TRGxwUkJSRlJoUkZobExLVWtyWjFOTm5tMmRjeXA3ZHJmc0RKMVFxMVFlK29PYXJQVjZ2dEdqUkV0dTI3OEtibzhhZ1pzMEViTnUrQzl1Mjc2b3lxRjA0Zng1dlRadUNFYSs5amwzZjdjWlRBNTdHbU5GdndHUTBBZ0F5TXpNd2U5Wk1USnc0QlR1Ly9RR1BQUElZcGs2ZERJZmtyRit4Y2pXMmJkOEZBRml5YkRtMmJkK0ZsYXU5SldnTXcrQzVnYzhqTEt5RzE5bDhNUjBIZnZzTmJkdTJVN1RLRlN0WFE2ZlRLeFA5K0xGamFOYXNlYlhOaTZzNUppR2taMEJBNE1vRmk5N1pYNzlCZ3lscjMxL1hqRktxaFRmaFdRTkFEVkFWcFZRbDMzZDVIa2h6Z25BY1J6eVNOdVp5dVlqTDVTSXlXRG1kVGpnZFRqanNEdGpzZHRoc05saWx3SlhOWmtOeGNURUtDd3RoTnB0aE1wbVFsNWVIckt3c1hMcDBDVzYzV3puUEkwY09ZK3JraWVBNERoYUxCUzhOSFZKS0cxdTBjRDVHdnZGbXBXUHkzWGZmb2xQbkxvbzJPT3lsbDdING5TV29VN2Z1Vlk5dlNFZ0lOQnBOaFordFgvYytObis2Q1FCdzRzVGZlUE9OMThzOWNNcjZ5Ujk5N0hFMGI5RVNBSERQUFkxZ2xnQXpMeThQWVdFMVVMTm16YnN2S3VvMVNZM0l6c3FXbmlMNUtDeTA0TUtGQzlqOXcvZm8xdTBCdUZ4T09GMnV5NmFucEtWbFptWWdyRVlORUVJZzhEemhlYStHNXZHNElRZ0NZVlVxOEJ4SFpKSE56ZDY5Ky9SWis4SDZaL2Y5Yis5VEgyN2NBSTdqVUxkZVBVeWFQRVZaVExlVDdOeTVIVjN2NzZhWXNMMzdQSVR2dnR1RjNidC93TURuWDBCRVJDUTJiUHdZdFdwNzFmOUhIbjBNUzVlOGc2eXNTMmpZc0dyMWpxa25UMkwwcUpGd3VWeTR2MXQzZE9sNmY0WDdyWGx2RmZRQkFYam80YjQzN2ZxcmNreENTSzJJOEloUlFjSEJvekt6Y3JlV2xCUi8xVFNsMFM4QTRhWElxaUJwYllLdkJnZUE4anhQR1lhUjh4ZXBsTmRJR0lZQkw2Z29ML2dtY1h2OXQwNkhvMVErcEt6UmVSUnoxV3VtUmtsSnZhMWF0Y2F2ZTM3QnpCblRrWk9UalNlZmZBcmhFa2hzLzJZYjZ0YXRoMGFOVXlvMXpiZCs5U1VXTG41WGVhOHlZTHBlZWZiL0JtTDBxRGRnTmhkZzMvLytoMWx6NWlxZm1TMW1USjgyQldhTEdXM2F0TVhvTWVPZzFXclJyOStUeWo1ZmZQNFpldmJ1RFFDSWpZMkR4V0pHZW5yNjNhV3hpYUtJOVBRTE9IUG1qS1NsWFVKZVhoNU1KaFBPcEtXQjUzbGN5cnFrVkJMSWVXcE9oeE5PbHhPVVVuamNIdUp4dTB0cGFGTGFCcUdpeUJCQ0dFb3AwKytKSjFVWExsNGFQRzc4aEIrN2RMMS9xOWxzZm1yRjhtVjRkK2t5ZlBMcFoxQ3IxTmo2MVZlM2JaQWxMcTYwbjY5MjdTUVlESGtBZ0tDZ0lCdzkrZ2VHdnp3VXp6MzdOQWEvTUZBWjM2cEtTcE1tMlAzVEhueng1VmJrNWVWaHcvcDE1ZmI1K0tNUDhmdnZoekIzN255b1ZEZm5HVnpWWTFKS1lTbTBJQ2d3Q0F6RFBCRVdWdVBUUzlsNVc5TE9ubisyZWZNV2VrcXBEcGVKQVh3MU9JWlN5Z2lDd1BBOFQzaWVKeHpIRVo3bjVjQUJjYnZjeE9WeWVWTS9IRTRsVjFJT0h2QThyMVFzaElhR1FxL1h3MlF5SVRjM0YxbFpXVWhQdndCS0tZWVBINEUvai80QnJVYXJnTFRSYU1DTzdkOWcyTENYS3IyMjMvYnZRMUp5SGNUR3hsM1hXUGJ1M1J2OSsvZEhmSHc4T25Ub2dQNzkrNk54NDhhbDlna0tDc0lycjd5S0wvLzdCYnAxNzE3cXdUaCsvRVM4OCs1U2JQcjBjNWpOWm55OWRVdXA3Mjc1OHI4b01CZmdxYWVlQmdEbzlYcE1uaklOOCtmTnZuczB0cUtpSXB3L2Z4NnNTZ3RUdmhFV3N6Yy96V3IxbXBwWldaY1FHeGVIM053Y3hNVEVLRTlDUTE0ZU9JNERJUVNVVXNKeEhnQUVITWNSUWVDQjBqV2FaUE5uWHdRdldqaC84SktseXdjUlFwb2VQSGdBOCtZdkJCVkZ2REZxdEdLQ05iem5IdVRsNWQ2V1l4VVRFd05EWGw2cDkzSnlzdEd5cFRmdmFOLy85dUxUVFo5Z3lkTGxTS2hWQ3dEUXBWUDdpclNhY21EbmRybnczWGZmb2srZmg2RFY2UkFYRjRjZVBSN0UvdjM3eWszYUgzZi9nR1VyVnQyMGhOT3JPZWFSSTRlaFVhdlJvR0ZEMyt2dEdCZ1kySEg3em05ZmRydmRuMzM5OVZmL25UQnViQWtoUkpCOGNiSVdwL2ppQkVHZ2xGSXFpaUk0am9NZ2lKUmxSUWlpUUFSQm9JSktnQ0I0UWM4M0o5SnV0ME9qMFVDbjB5bmxXYkwvN2Z5NTh5aklMOENhTmFzdzhQbEJPSHNtRFF2bXo4V2t5Vk94YzhjT1dHMVd2REw4SllCNHlSeUdESG9lYTlaK0FLMlVRdkxGNTUvaDVWZEdYUGQ0ZnYvOTl3Q0FEaDA2SUNNakE3bTU1ZWY3aFFzWE1IL2VIUHhuMWh4czNMQU90Uk9UOFBERGZTRUlBbHEwdkZjeGhYdjI3SVhEdi8rdWZPL1hQYi9neHg5L3dMdExscGVLbHJkcjN3SHQybmU0T3pTMjdPeHNuRHg1RWxsWldjakt1b1M4M0R5WVRKZURCVWFEQVlJZ0lpZ3dDRVdGaFlvZnJTQS9INElnSUNRa2xHaTFPa0lwaFNBSWhCZDRJZ2c4WVNRQndEejVaUC93aTVuWll6dDE3bklvSmpaMmNkcnBVMDJ6c2k0QkFKS1NraEVWSFkzT25ic29pM3ZIam0vUW84ZUR0eTZRSXBrNkFFQWx5aVFaaEI3dSt3ajI3dDJEdzRkL0I4L3orT1dYbjVGNjhnUjY5dks2Qk0xbU13Z0JHSlpGY1hHUjRpT2hZdWtxbHJqNGVCdzZlQkFjeHlGZm9tblNhTFg0NU9PUDhQbm5tOEZ4SElxS0NyRnYzLy9RckZtenk2YndqdTNZOXZWV0xGMitVakdmcXQzOHJ1SXgzVzQzZmo5MEVQUG56Y0h3VjE1RllHQmdSWURlUktmVHpYbjIyZWUrUDM4aFk4VHE5OVpHU1JxY2xsS3FvWlNxZlRVNHlRL0xlTWtQZU1MeEhQRUdEZHpFN1hZVGw4c05INTljS2UzTmJyZkRLaVh4eXI2M3JLeExPSFRvQU9yVXFZdHUzUi9BdE9rem9ORm9ZYkZZTUhUWVMvajhpeTNZK05FbldMTjJIVFFhRFRaKzlJa0NhcWRQbllMYjQ2bFduNmF2SFAzakNDWk5ub3I3dTNYSHUwdFg0RlRxU1ZCS1VWeGNqQmNHL3ArU29uVDgrREVrSlNjcmYzLzA0VWJNWDdDb3d2RUgvdVhwSHBSU25EMTdGcG1abVFyRkVLdFNvNlM0QkZhYkZRNjdIUTZuRTlrNTJRZ0kwRXZPVjRMaTRtSVFoc0RsY2hPMVdnVVA1NEVvQ2dCQWZPaUJHQURraHg5L0NibDBLWFBZZ2YzN2hqRU1VeGNBT25ic2pJTUhEeUl3TUJDZE8zY3RadzdQbVRNTER6elFvMUlmUjNWTDJRVGRCZlBuWXNIOHVYaXdaeSs4TlgwRzZ0ZHZnTGRuenNKN3ExZkNrSmVIMm9tSldMajRYY1JJMmN4OUhub1lKMCtld05BaEw0QmxWWGpzOFg2b1g3OEJMSVdXVXNjWk0yWWNGaTlhNkgwUzE2Nk5kUnMrZ2thandZS0ZpN0Z5eFRKODhmbG5VS3ZWNkhwL053d2EvQ0lBUUJBRUxGcm9OUU9mZmJwL2FUTngwK2JyTm84cWtxb2VjK1JycjRJUUlERXhDV1BIVFZCOGtGZVF1bHFkYmtiZlJ4NTlvY2VEUFQvK1p0dlhuNDBiTzdwWTF0NGsvNXVpeFhsVFE0aElLQVgxVnFoUVFSUWhpZ0xoZVI0c3kxSzVjcVVpaWl2NVlXVXc1S0ZHalhBMGFOQVFaOCtlZ2NQaHdKaXg0NnFVMnZQNVo1L2lxUnVjVm5QZ3dJRktQeHZ3OURQSzN4RVJFUmcvWVJJQUlEdzhIQzhPRzRiWFh4ME9Tb0hrT25YUTd3bXZiMjMrdkRsd3U5MFk1Uk5vbVByVzIyalFvQ0VLQ3kxNGVkalFmMit0cU5WcXhmbno1M0hwMG1VLzJsOS8vUVdHVmNGdXM4SHVrNXVXbG5iNnN2WkNLZFJxTmRIcGRMQmFyVEx2RnBHSUlBbkRNSVJTeWlRbEpiRjc5dTUvbVdYWmwzLzY2Y2ZHKy8rM0Z6UCtNeHNBa0o2ZWpubHpaeU1vTUJDRFh4eUs1czFiS09lMWJPbTc0RGdPNDhaUHJEZ2llUzROWGJ0MnJmSjE3dDI3MTA5UVdJbFVOcGEzY014T3A1NDQvdEh5NWNzM2YvZmRkeDRKNEJRVEZkN2FWUG1WeXNYMkRNTlFRUkFVL2plVlNrVlpsb1ZhcllaS3BWTElMV1hUTkNtNWpzVDNKcEZaeHNTZ1pzMEVKQ2NubFV0M3V0Rnk4TGYvVlhuZjloMjdWTnQ1L0NzMU5xUFJpQXNYTGlBcnk1dkM0VXNFeWJBcXJ6UFc2WVRMN1lMZGJnZlA4NGlPaVFIUGNYQzZYTVJodDROaFdSQkNpQ0FJY2k2YUV1VThmZWI4TXk4TS9MOFJScU94Ylh4OFBQTEsrQTdxMUtrRHU4Mkdnb0o4TkcxNjJjVGEvT2ttbU0xbXpKZzU2NFpkcTE0ZjRFZXdxeHliV3pobWpXclVDSisvYytmT0owcEtTajRNQ3d2YlFRamhmQUZPMHVLSVY0c0RwVlNnb2xTckovbmpJSW9pVWFsVTFKY1ZSdGJhQUlLaW9pTHdISzhrKzdyZGJyaGRMcmhjVGlRbEpsVXJIVkpBUUdDVnlxb0NBZ0tyZGFEL2RjQ1drWkdCOVBSMFpHZG5LMG1CY3RLdDFXb0Z3N0JLS29mSDQ0SEZiSUZLcFlMYjVTWTh6NE5LQmVyZXRBMkdpQ0pQQkVFZ0FKZzJiZHAyZjJmSjBsY0RBd1A3VHBveUZWTW5UMFNOOEhDb1ZDd0N5aXlXanAwNm82UzRTRWsyTkJvTldQUGVLaVFrMU1LUVFkNG9Jc093MlBqUko5ZDF2U3pMd202M1ZmdVQrRTRUdTgxYWFRa1djNHZHekc2emdsV3BRQWhwRXhvYTJrWVFoTDRtaytuRHVMaTRBNFFRamxMS0UwSmtnQk5CSUlKQ2hDZ3FCSm1pNk0wYWthbXRSRkZVekZNQTBPbjBzSmFVZUZOQ2VEa2xoTHRjeWVCeXcrbHlvWllVOUxuUmtseW4zajhXd2djRUJDSzVUcjFxSGV0L2pTbEtLY1daTTJlUW5wNk9uSndjR0kxR2hXWklydmZNeWNrQllSZ3ZLMGVwc2lpZWVOazRlRi82SUZsTFkwNmtwalVJRGc1K2pSRHl5cTB5bnlvSDhreVlMUmJFeE1iNzBjeFhhemZrSWpJeUFvbTF5MU02WldSbXdteSsrV05tTk9RaUlpSUNTWW1sejRuanVIV3BxYWtmdDJ6WjhnSUFEZ0F2UlZJVkg1ek1IK2ZMQ2VkRGNFbkxtcVV5SlpJY01aVlRROExEd3hFVkZZVzR1RGpVcmwyN1drdnFicVg4S3pRMnVZb2dJeU5EQVRXejJZemk0bUtmSW5ZSDNHNDNSRXA5eTZJSXovUGdCUjZpUWl0RUNRVWxvSlQwZjJvQXUzRFJPeU5abG4wRFFNTE51SmFnNE9DcjJqOHhzVGJ5ODAwd0duSVJGQnh5MTJ0dWRwc1ZOcHNWQXM5WENHb0FrSlNZQ0pQcDVvMlpmRTZpSUpRRE5RQlFxOVhEV3JSbzBjZHV0Ni90M0xueng4ZU9IZlBJQUFkdmtNcTNBRi9oaHBOQmptRVlJdm5mcUV4Ujd0dGNSZ1k0WDlaZXVlZEN3NFlOcjduVzlIYVdPMTVqS3l3c3hObXpaNVU4R1Y4T3RiSmtrSVdGaGZCV0MvRGdLdGZTR0FEazNJV01uaHFOWmhTQUIyN21vblM3bldqV3RPbFZhNnNYTXpKaHNaZ2g4Q0pjcnJ1VG8wMnZEd0REc29pTWlFUmlZcTEvMUVZeU15OGh2NkFBQWk5VTI1anA5UUZnVmFvS05iV0tSQlRGUFNhVGFWMWNYTncrUW9odmdJR1hORGRCQWpSUkRpNndMRXQ5d0l5cTFlcFNKSmErUFJia0JqSnlkNnlrcENRMGFOQUFOV3JVOEFQYmJXTnVHSTJsMGpsazJ1NktHRzdkYmpmc2RqdGNMaGNSS1lVZ0VVRXFXaHFsQktETWthUEhZcU9pb2tjUlFrYmY3T3N4R2ZNUUZ4dUR1TGc0K09YdUZvL0hzK3FYWDM3WjJLZFBINE1VWUpBMU9NRW5jaXFERzVXMU5WbFRVNnZWVkc0QldCYmNmRTNTK1BoNEpDWW1va0dEQnYrcUpqSjNyQ21hbFpXRmMrZk9JVE16VTBubjhHMnVJdE82K0RMZENvSkFQQjZ1SXZZTkJnQno0ZUtsL2lxVmFqU0ErMjdtdFRqc050aXNKUUNvSDlUOEFnRFFhRFN2OWVyVnE0UFpiRjRiRVJIeEhTR0VsY0NOODhsL0kxNGxUeFI5R3Y1UUg2cDVXbG11VzJWMXA5VVZWUEFEV3hYa3dvVUxPSC8rdkFKcWNqcEgyZVlxWmVpN0NjZHhBS2g4MCtVdVQ4eTJiZHRxaFlTRWpNbThlUDdWbTMwdHdjSEJVS2xVaUkrUFEyeHNySDlGKytXeU9VVkl5L0R3OERVZWorZUQzMzc3YlVPM2J0MnlDU0dNYkpwU1NubGNabDRXdlY0SjZoc3BKYjVSMDdMcElUSjl2UysxdmNmalFkMXJZUER3QTl0MVNscGFtcEo0SzNlTktpekZkT3NvQzJyRXB4ZUI0a3VEVkRuZ2RydWZVS3ZWWXdHMDhpOGx2OXlPb2xhclgrcmF0ZXQ5K2ZuNWE2S2lvblpMdmpkR0FqVlplNU5UUWNwcWIrWFNRc3BXTHZoMlRwTUI3cDU3N3V5a2I1S1JrWEZIbktoY0hpVUhDWHo5YVdXMU5KOU9VY1JiV096dERDV25jRkJLeWM4Ly94eVdtSmc0am1HWUNmNmw0NWM3eVBlMmJPdldyZXNuVFpwVUNNRGprK0FyeVA0M3VXcEJTZ254OWIxUjN3b0Z1ZlZmVUZCUU9iK2JIRlM0VTlOQlZJbUppYmY5U1hJY2g5VFVWTVYzVmxHSHFBcTZRdmwyVS9jRk5jWnV0M2ZSYXJYakNTRTkvVXZGTDNlWXZEbCsvUGlVWjU1NVptMVNVdElSQUN3QU9YcEtVSnJKRjZJb2doQWlsMlFSbWYrdHJJYm1XMlR2Y0RoZ3RWcFJWRlNFbEpRVXFOVnF2eWw2bzhYbGNpRTFOVlVwa1pLckNYeGI0aWs5Q1NUQ1BWbFRrMDFQQ2RnWVNpbmo4WGlHc3l3N0VZQS9vOVV2ZDZRd0ROTWpNVEd4Y1VsSnljcVFrSkF2QURDU2VTb25sWmNLTE1nV0QvVUtrYXNYZlByWTRrckY5U2twS1pWMnhicHRUZEhiT2QzRGJyZVhBcld5MVFSbEd4YkwvalRKL0pUclBCbFJGRWx1Ym01OGRIVDBCRUxJcS82bDRaZmIxZDFpTUJoZ05Kb2dDQUpzTnVzL2ZvZm4rWFZIamh4Wk4zbnk1RnhKYzVNckY1VGllcCs4TjBpcElYSVNyNUx6Sm5lbUwxdWxFQjBkalpvMWF5STVPZm0yQUxmZzRCQ3dMSVBvNk9nclpoRGN0aHFiMVdxdEZOUmtobHU1OTZKdmtFQUdOWi9JSjJPMzJ6dHJ0ZHFKaEpBSC9jdkhMN2NycUIwN2Rnd1VSS21HcUdKVzJiRDZEUnZYNmRydGdmYzZ0R3Z6QndBRzNzaXBUSURxcFVYeS9rT2x2cmRlalkxU0wwT1MxQWRYM3VRZXVvSkl3UXNVSEMvQzdSR1FtSnlBb0tCYlg5bGl0OXVRbTJkQWJsNGU3cnYzM2pzSDJJcUxpeFZRazR2WnpXWnpoWnBhSlpGUHhaL21kcnNIcWxTcXlRRHErWmVQWDI1WE1SZ01vQ0RYVkwvS01FejNXclZxSjU1TVRWdlJKT1dlSGFDVW9ZQnYzdzFCb2dzUnZiRUFDc2tDQmJ6cmhDb21xUnhSbGN4VVVhUVFxUlJOcFNJYU5taUk0SkNRV3pwV2dZRkJDQXdNZ3NtWUI0UEJVR0dhMUczRm9QdkREeitnZmZ2MmlJbUpRZGV1WFRGaHdnVHMyYk5IWWVpb0tBTHFWdm9QZUgxcTBzYUlvcWlhUDMvK2xQVDA5TFhmZi8vOWJRTnFQTTlqMUtoUmlJNk9SbWhvS0lZUEg2NTBkL0xMM1NzbVV6NkNncThMTU9xR2hvVXRQbmYrNHZDRzl6UUtBS0NUdW1mSlBSZFlTc0ZTS25mTEVnalBjL0J3bkplcDErV1dlaXg0dTJOWnJWWVVGeFhCWWpIRFpEUWhKeWNIR1Jjdkl1MU1Ha3FLaTIrTE1Rc01Db1pSNnB4V1Z0Z1pNMmJjRmllNWQrOWU5T3paRXlrcEtYamdnUWVRbEpTRW9xSWlIRDU4V0k3c0tJQlcxdnlVdFRRdnRiTEFwS1NrMVByODg4L25kdTNhZGN5QUFRT1lrSkFRZE9uUzViYTR6b2tUSjJMYnRtMzQ5Tk5QOGV5enoyTHAwcVU0ZGVvVUhudnNNZi9xdm9zbE56Y1hOY0lqcnZwN3AwK2xZdDVVN01lSEFBQWdBRWxFUVZTYzJlalZ1dzhBTUNxMXV1T3ovL2RjU0t2V2JTNTh2ZlVyQitCVjNTb3pmeWxBY0xtUnQyU08wc3VicEtrVkZPVGowTUdES0N3c1JFUkVCSUtDZ3FIVDZmRDExMTloL3R6WjJMWnRLd290aFdncG1ZYjUrZmw0YTlvVWJONjhDVC8vOUJPYU5HMkswTkF3QU1CZmZ4M0h0Q21Uc0hYckZody85aWRhdDJsN1RWMndOQm9Ock5aaXhGZmdhN3R0VE5HMWE5ZWlhZE9tZU9hWlo1Q1ZsUVZDQ0ZxMmJJbUNnZ0tjT1hNR0tTa3BsU1hlbGdvU1BQamdnNjBhTldvMHBWdTNibjNsbTNlN2lOMXV4NnBWcTdCcDB5YUZtdWo5OTk5SHo1NDlzV0RCZ2dxYjN2cmw3aENydFFUUjEyQ0dOcnluRWQ2ZStaOVM3Nm5WNmtGZHVuU0ovdVhYLzYzcGZuK1hFNVJTUmtJM3hUU1ZzVTBVQkpHWGZHMkE5OVVMZUJLd2dlSkMrZ1Z3SEFlV1lSRVJFWUdNakF4UUFJR0JnZGk2WlF2V2ZyQWVHbzBHWThlOGlTTkhEcU4xNnpaWXZXb0Z1bmQvQUgwZmVSUi8vSEVFQytiTnhhcjMxb0xuZWN5Yk13dnpGeTVHVWxJeTFuM2c3U3Y2MHN2RHIybmNmSHNGMzNhbWFGRlJFZXgyTzNKeWNuRGh3b1ZTUHJYRXhFUWtKaVlxS1IxMnV4MzUrZm1rc0xBUU5wdU51Rnd1SWdnQ0k0b2lrNVNVMVB2SEgzOWNzbno1OHI2RUVIVHAwZ1ZIang3RlcyKzloWGJ0dkExNTI3VnJoOW16WjZONzkrNElDQWhBdlhyMThQMzMzMlBac21WSVNFaEFhR2dvaGcwYnBoRDNVVW94Yjk0ODFLOWZIeHFOQmhFUkVSZzBhQkRzZGpzOEhnK2FObTJLQngrOEhKUFl0R2tUdEZvdGpoOC9EZ0RvMzc4L1dyWHlGalVjTzNZTVRxZXpGTjlhNTg3ZVR0c0hEeDcwcjI2L2xCT3oyWXl4WTBaaDBQUC9oOEdEQnVMM1E5NTVrcDJkalFIOW44Q1QvUjdGcURkR2x2ck81SW5qTVdUUTgzMW0vMmZHMUpTVWxDNEFkS0RVdDVFTUs0b2lLNjhicFlrTXg2R2twSmdZREhsZVFrcW50M0Z6WkdRa0dqWm9DSTFXZzVLU0V1VG01aUF6SXdPN2YvZ0JLVTJhSUNEQVM3SmFJNndHL3BMbS9WOS9IVWVYTHQ1NUhob2FpclMwMC9CNFBERGs1VUduMXlNcHlkdVlKVHc4SEg4ZFAzYkR4KzJXYTJ4eW9LQmR1M2I0OXR0dk1YZnVYTVRGeFNFa0pBUjZ2UjR5MTd1YzBtRTJtd2tBcUZRcVFpbVZ1NjR6VnF2MVdZMUdNN1Z2Mzc3MUd6WnNpRVdMRm9GaEdMUnYzeDZQUFBJSXBreVpvaHh6L3Z6NTJMRmpCenAxNm9SWFhua0YvZnIxdytPUFA0N1RwMC9qMUtsVDZOYXRHeDU2NkNFODhjUVRXTFZxRlJZdVhJak5temVqY2VQR09INzhPQVlPSElqbXpadGp6Smd4K1BEREQ5R3VYVHQ4OHNrbjZONjlPMGFPSEltWk0yZWlSWXNXQ3JBVkZoWUNBSEp5Y2hSdzlIbTZJaUlpQXRuWjJmNVY3SmR5OHNYbm05R3NXVE1NR3Z3aTB0UFRzWHJWQ3JSdDF4NEpDUW40NzVhdE9IZnVMT2JPTGswMVAyL0JJbWx0RmJVWi90TFE4QTgvK21URjRFSFBmeXNwTWtTeVRqa0tDTjRIT0JHbGZGNFFRcWhLcFNKdXQ5dXJ4QUdnb0NDRWdkdmxnczFtUTc0cEh3QkJabVlHQWdJQ2NQRmlPbFlzV3dwQkZCQXMrUW1MaTR1aDFlbXdZL3MzK09tbjNkQm9OTERaYkNncEtZRldxNFhINDhIS0ZjdVFtNXVMb3FLaUd6NXV0MVJqODAzcEVFVVJBd2NPUk4yNmRXRXltWERxMUNrY1BYb1VxYW1wS0NrcGdkdnRSa2xKQ1pIQVFJbjRNQXpEQkFjSHYvTGxsMTh1MG1nMDllV0dGenFkRGhxTkJvUVFoVmxVbG43OStxRmJ0MjVRcTlWNDRva240SEs1TUhmdVhBUUhCNk50MjdabzBxUUpVbE5UQVFCSlNVbFl2MzQ5K3ZUcGc4VEVSRHoyMkdQbzJyV3I4dmw5OTkySFNaTW1ZZno0OFJneVpBaWFOR21DQ1JNdVYyazk4OHd6R0RIQzI2UFI0WEJVbUF1azFXcWxEbGwrOFV0cGFkMm1MWDcrNlVkODlPRkd1RjB1TEg1blNaVytKNG9pWnM1NEd3LzNmYlRlQXowZW5IWXE3ZHdBQURwcDAxQksxYUJVQllBRktLT2tSd0dFWlZYZ09BL3h1RDArcmY3c2NIczhjRGdjc0JSYWtKOXZRbEZSRVU3OC9SZkdqeHVENTU1L0FkMjZsYVl1bkRkbkZqSXlMbUx4TzB1aDFXcExLVE5qUnIrSnhvMVRNUEtOTjZ0bDNHNFpzUGttMzhvcEhTNlhDM1hxMUVHclZxM1F1SEZqUkVSRVFCQUVHSTFHNG5hN0pYWU83eE5IemxIak9HNThTa3JLZ3RUVTFDcDNxUEF0STVNSFBDRWhvWlJUVWdhYXZuMzdvbmJ0MnBnNWN5YWVlKzQ1dEdqUkF0OTk5NTNVT01NcjA2ZFBSMFJFQlBiczJZT1BQLzVZNlhOUVZ2UjZQVHdlVDduMzNXNTNwZjBSL1hLWEExdnJObGk1YWcxcUppVGc0NDgyNHUyM3BsYnBlK3ZYdlErZFRvZUJ6NzhBQUZIQndjRnZmZjNOOXNFQTlCSzRhUWtoYWtLSWlsTEtBbUI4QW5DRTQzaDRPQTlSSXFaT0p6aVBGK2hLaW90aHNWamdjYnRSWEZLQ3h4OS9BZ1FFSmRZU2hJYUZLZVpuaDQ2ZE1QS05VVkNyMWZCNFBBcHpiMGx4TVVhUEdZZmVmUjZDeStWQ21QU2RPeDdZZk11a3NyT3prWk9UZ3kxYnR1RGl4WXRLbmhySGNkRHI5UWdKQ1NHQWwvN2JGOVJXcjE2dDVqaHVPc013czBWUjFKWHRPSDVGKzF0VjNnS3ZyTmgzeVpJbDZOQ2hBekl6TTlHaFF3ZXNYYnNXdlh2M0xyV1AwV2hFVGs0T0tLWDQ5ZGRmS3oxdVFrSUNYQzVYS2RXYjR6aVl6V2JVckZuVHY0cjlVazdteloyTncwY09vMGVQQnpGNXlqUWNPblFRL3pUWDkrL2ZoNzIvL29vcFU5L3luZGU2SmsyYVRybjMzbnVITjJ2V1BCQlNPZ2lsVkEwcEhRUUFTMFdSOER4SEJJRW5QRmM2SFlUbmViamRic1drVkdzMGNEZ2NLQ2pJeDhXTDZkajl3L2RvMUxneEFLQkZpNWJLZWY1NTlDaVNrcEtoMFdnUUd4ZUgwTEF3YUNVTGF2KytmV2plb3NXZDcyT1RDOXA5YXorTGlvcVFuNThQaDhPQjVPUmszK1JiSW1zNGN2czdBR1RuenAxQlBYdjJuTW93ekxpaW9pS2NPblVLUTRjT3JmQjQxOHRPc0dUSkVreWVQQmt6Wjg1VTNzdkl5Q2dWd1h6cHBaZlFva1VMOU92WEQ2TkhqMGJQbmowckJLcVdMVnRDcjlkajM3NTllT1NSUjZSSnVCOE13eWpCRGIvNHhWY0dEbndCaXhjdndPZWJQNFVvaWhnemRqd1loa0YyZGpiR2pIb0RIT2RCY1hFeEJ2Ui9BdmZlZHg4bVRaNktsY3VYd3VWeTRiVVJMeXUvczNMMVdnUUhCMlBCb25kR3Y3Tm9vYWFnSUg5ZGJtNnUvSVNWbzZXOHROWUViMk1zd2V0aWsvYmhlWUY2T0s4NUNnSUVCd1VqTGk0ZW4yN3lkcEsvOTk3N0VCd2NESjduOGVwckl6Ri8zaHg4K2Q4dm9OZnJNWEh5RkVXcG1ETDFMY3lhTlFPY2gwT3RXclV3WWRLVU94dllLS1hseXFUazZHZHljakxPbnorUDFOUlVCQVFFUUJBRXVOM2Vwd1FoUkNiVEl5a3BLVFZtejU0OU5TSWk0azIxV28wcFU2WWdKQ1FFQXdaVTNMMDZLQ2dJQnc4ZXhLRkRoNjRKUE1MRHczSGd3QUhrNXVaQ0VBUXNYTGdRcDA2ZFFsT3BMOEg2OWV1eFo4OGUvUDMzMzZoWHJ4NDJiZHFFbDE1NkNkOSsreTBBNFBQUFAwZGhZU0ZHakJpQndNQkFEQjA2RksrLy9qcUNnNE9oMFdnd2ZQaHdEQmt5Qk9IaDRmNVY3SmR5VXF0MmJTeGJ2cXBDN2YrL1c3WlcrSjNQLy90VnBiOTN6ejJOOE1INmphKzUzVzdWNWs4M3JadisxbFN6dExaOGxBRUdsSXFDS0RLbHdDMG9LQWdhclVhMm5rQkFVQ01zREVsSlNZaUlpRUJNVEN3eU16TEFzaXdhTjA2cDFCL1l0R2t6ckgxL2ZiV08yMDAxUmE5VTBCNFVGSVRZMkZpSW9paWJvMFFHTlpabENhV1VYTGh3SWVMNzc3OS9LeTR1N3MwSEhuZ0FYYnAwZ1ZhcnhmNzkreXUxMDE5NzdUVWNPSEFBZ3djUHZxWnozckJoQTBwS1NsQzNibDIwYTljT05wc05reVpOd3A5Ly9vbXNyQ3lNR1RNR1U2ZE9SWU1HRGNBd0RENzQ0QVA4K09PUDJMQmhBd0JneTVZdFdMLys4azFjdkhneEhucm9JVHorK09QbzI3Y3Y3ci8vZml4YnRzeS9ndjF5VTBXcjFRNS9idURBbCtjdFdCUUZRQ3RWS2FpOXlvNVNwVUJFMFp0NTRHM0E3QTBvdU4zZUtnV0h3K0UxU3lXZm04bGtRbTV1TGpJeU1uRDJ6SmxiZW4wM2pkMGpMUzBOYVdscFNvczh1WnVVWENibHkzeGJKdm1XVUVySm1UTm5hdFNwVStjdFFzaEkvN1FzTGFJb0lpUHpFaXdXQ3dSQmdNdDVkNVpvNmZSNnNDeUw4Qm9SU0VxcVhXa1FSN1lldkdObUJzOVgzNWpwOUhxb1ZDcEVoRWNnS2FseTdzTzllL2VpYnYyYnoxcnJjYnMvMkxUcGsvZmZuajdOQXNCRkNIRkRhUnhEQkVJZ0VNSW9EV1BVYWhYVUdnM1ZhcVMrcFFFQkNBb01STERVemk4aUloS3hzYkdvWGJzMjZ0YXJqM3IxcXJlYXNiSSt2RGZGRkpWN0ZKVGxVNU03U1IwL2Z0eTNRb0Q0MnYzU0ZsU3ZYcjJwQVA3Vm9HWXdHSzY2VTVEYjdjRmZmLzBGVnFWQ2NFaW92NitvM1liQ29rSVVITTFIaStZdG9OR29Ld1MxUC80NENvWmxFUlJjL1dObXQ5dGd0bGlRWDVDUDFxMnV6RUNmYy9QekdWL3ExcTI3ZUhISWkycy8zTGhCV1lkZTA5UmJZZ1dJZ2loU1VHOHhQQlVFa1FpOFFKVnU4ejRrbFU2SEEzYTdEVlpyQ1lvS2kyQXVLQ2lWY1hBanBlWVZmcmZhZ1Mwcks2dFVqNEt5M2RrZERnZHExNjZ0YUdvZWo2ZFU3ZWZxMWF2Vnc0WU5tOG93ekp2d1N6bkpNK1NCVmFuOG5lQWxrWmtmaklaYzVPYmxJcWtDaHVpTEdabGdXUGFtalpudk9XVm1Ya0xpRmZxTDFreEl1QlhETm56cXRPbDhSa2JHMmwvMy9GS1poaXRjQmp1UlVpb1NTc3YzVWVBbFpsNlBoNFBMNDgyQkk0UWcvaVpIL2FzVjJJeEdvOUlpcjJ6amxRbzZTWkdLdU5Ra1VCdm5YN0lWaTduQWpLQ1FVUDlBbEpHZzRCQVVGSmdyQkRhTHhZTGdXekJtUWNFaEtEQVhYQkhZYnBrWnI5Tzk5djRINnowTjZpV3ZsN1ZhT2FCQXZkRUZLcGJLTXlFVUlBUWdjbGQ2RUVMQWVNa3N3VEFzV0phRmlsVkI1VFZmRVJVVmRlY0RtOXloWFc2Umw1K2ZYeW1kZDFtZm1tL3lMY013VS8zTHRESS9FU0FJd2wxdmZsYW1KUlVYV1NyODdGYU5XV0JnRUlvTExkZjAzWkxpWW1SY3ZBQzczWGJGMzA5S3JvdVEwR3NEYmIxZVB6cnQ3QVhYUFEzcWJwTHdUSmxxUG1NblhtN2Z4MUdPOHhBSitFQVlBc0l3RXJBeFlGa0dLcFhDMWd1TlJvUFEwTkE3RjlpY1RtY3BVQ3ZMcDFZSlNhVGNmSVZJdlFsZVlSaG0ycFVYOXRWVEtkOXVVbFdxNDRxRUVNRHA5SE81VlRvUEsrRzV1NVhCbFd1OVh4ZlR6OFBoc0Y5eEg3dmRob3lMRjlDc3hiM1hBYjZCbzArZU91Tm8wcmpoVmg5UW8yVTBPQkVBRlVXUjhEeFBuVTRIWVZtV01vU0FFQVlNUXlDWE5ubzNGVlJxTlRScURSbzFibnhUS01adk9MQlJTbkhtekJtbFRaNGMvU3lycVpXSmZzcU5KUmlKOWZaWmxtV253VnY2VWVseHJwRksrYmFUcWxBZFg2djh1UHNIYk55d0hpYVRFZkh4OGZoNDAyYzRkKzRzaGc0WnBPd3phY28wUFBUUXczNGt2STNsbjBETmR5NWRyMVVhR2hyNnhyRy9UdHBiTm0veXZhKzJWZ2JjQUVDa2xIcDlhcHlIZUhzclhBWTJobVhCTWhLd3lWcWJWb1BHalZPcXZhM2ZEUWMyWDFBcjI4ellicmRYU09mdDYxZHpPcDI5VkNyVlZBQlhOTWl2aDByNWRqU2Ivb25xK0Zva056Y1hDK2JQeGN4WmM5QzZkUnVVbEpRQUFPclZxNDhmZi80VkFQRFMwTUhWZGwwYjFxL0RZNC8zSzhWbUlwL1hzaVh2NE1TSnY2SFJhTkRqd1Y0WThlcHJZRmtXZ0plU1o4V3lKVGh4OGdTMFdpMTY5dXlGbDRlUFVENnZEdm1uWTNicDFCNXF0UnFFTUVoS1NzS1FvY1BRc1dPbmZ5dU9Sa1ZFUkx5NmN1WEtrdGRmZi8xQUdjMk5Fa0tvOUQrUm0yRHhIT2ZsSW1jSUpRd0JReVEvbTZTNUtjQ20xa0NyMGFKZS9mclZlZ0UzTkVFM0l5TUQ2ZW5wbGVhcHlkUkRVb3M4K0xMZlVrb1pxOVhhU3FQUlRBWHdqMWQ5QTZpVWJ6K0F1d0xWOFRVOVpOSk9Jekl5RWgwN2RvSkdvMUhLd0FnaFNtZWk2bnh5ZnJoeFBTd1djN24zWjd3OURUVVRFdkQxTnp2eC9nY2JjT2pnQVd6ZnZnMkFOeWR2MG9SeGFORHdIbXo3WmlkV3JGaU52Yi91d2RkYnY2cTI4NnpxTVZldVhvTWR1NzdEa0tIRHNIamhmR3o5YXNzdG1TZUVFTng3NzczbzJiTW5ldlRvZ2ZqNHEzdTRDNEtBMzM3Ymo4a1R4eU03SzZ1eVk5U0xpb29hdm1EQmdzYVM1U1RUakt1VnVsSks1VzcwaE9kNThKdzM5Y05US3ZYRGpzS2lRdnowNDI2c1hmTWU1cytmZy8zNzl5RkxPbTdXcFVzWStmcXJlUGFacHpCbTFCc29LaXBVenVHakR6Zml1V2VmeGpOUDk4ZXVuVHR1amNabU5Cb1ZVRE1halFxb3libHF2bDNhZlRxMEs2Qm1NQmhxNmZYNktRRGFWdlhtL051YzVvR0JRYkJacjU5UC92anhZNWd4ZlJvOEVzM000NDk2emN4K1QvVEhvTUZEcXZRYmh3NGV3TW9WeTJFdzVDRXhNUWxqeG81SFNwTW15dWQ3ZjkyRERSdldJZDlrUWt4c0xJWVBINEYyN1RzQUFFYSsvaXF5TG1VQ0FFYS8rUVpVS2hZSkNiV3djdlVhaUtLSXJsMjc0ZUcrZmFIVmFoRWRFNE5XclZzcm1lb1dpd1Uxd3NQeDNNQ0IwR2cwU0toVkN4MDdkVVphMnVscUcvZXJPYVplcjBmSGpwMmduaklOYjArZmhsNjkrOXgwWnBiazVHU3dMSXZkdTNkRHE5V2llL2Z1eU0vUGg4UitVd3F3NVNSbDM3L2ZmT04xMUt4WkU2ZFBuNElnQ2xjQzBOYUppWW5EeG80ZHUraWRkOTdKa2JVMkg1K2JIR0FRQlVFRUlieTM3cEV3bERBTUNFUEFzQXh5YzNOQkNNRURQWG9BbEdMRCtuV29WNzgrOURvZGxpNTVCNDg5M2c4OWVqeUlMejcvRE8rdFhvWEpVNmJoeEltL3ZYTnM0MGR3dTkwWVBud1lXdDU3WDVWQi9JWm9iRmFyVldIcThLMy9sRHUzWHltdGcxSktYbnp4UlRZaUltSXlJYVJ2MVk5WmNrTW5pOWxzeHVSSkUvRGNzMDlqM3R6WnR3emNLcU02dmhwcDBhSWx0bTNmaFRkSGpVSE5tZ25ZdG4wWHRtM2ZWV1ZRdTNEK1BONmFOZ1VqWG5zZHU3N2JqYWNHUEkweG85K0FTZEltTXpNek1IdldURXljT0FVN3YvMEJqenp5R0taT25hdzBwVm14Y2pXMmJkOEZBRml5YkRtMmJkK0ZsYXZYZUNjY3crQzVnYzhqTEt5RzF5bCtNUjBIZnZzTmJkdDY2M2dqSXlPeFl1VnE2SFI2WlVFZVAzWU16Wm8xcjdZeHY1Wmp0bTdURmg2T3V5V2xRNUdSa2NqTnpWVjhYYUlvb2thTkdxWDJPWExrTUtaT25naU80MkN4V1BEUzBDR3dXTHdSMlhlWExNUGtLZE9xcEJnd0ROUDd2dnZ1R3h3VEU2T1h0RGFmMGl1d0FCaHZSemlSdUZ3dTRuSzV3SEVlWWpHYmtaZWJDNWZUaGVMaUlnUUdCcUtrcEFRcXRScUNJQ0QxNUFsa1pHWWdMZTIwY3U4ZmVyZ3ZEdjkrQ0FCdy90eFp0R2paRWxxZERpR2hvV2pmdmdQK09ITDQ1cG1pbE5KeVZRVyttcHB2Qk5TM1E3dHZCSFRObWpXVENDSERic1JOLzJyTGwzanUyYWZ4N0ROUFlmNjhPWEM3WEZYNjN2dHIzOE05OXpUQ3A1OTlnYkhqTGhORm1veEc3Tnl4L2E1eVZPL2N1UjFkNysrR2poMDdRYXZWb25lZmgzQlBvMGJZdmZzSEFFQkVSQ1EyYlB3WWpWTlN3REFNSG5uME1YQWVEN0t5TGxYNUdLa25UNkpuajI0WTlQeHp1S2RSSTNUcGVuK0YrNjE1YnhYMEFRRjQ2T0crTiszNnEzSk1RZ2pDYTRURGR2M08rcXNXalVZRFFSQVFFUkdCVHAwNlFSVEZVa1NPQU5DcVZXdUVSMFJnNW96cEdEdm1UZlI3NGttRmFPRnFHNmVvVktybkZ5MWFOQkJlTGpkZmsxUWxZUWdqVWtvWWhvSEg0eUUybXcwdWw0c0VCZ2JDN1haRHBWTEJZTWlEMVdwRmRuWTJDZ3N0eU0zTlJXNU9EaUlqb3lBbkJSODZlQUJXcTNjODY5U3RoNk4vSEZFb2tsSlRUOEptczkwOFlEdDc5aXd1WGJxa3BIVlVwZmRubVFqb3dCdVZxM2JpeE4vWXN1Vy9XUHZCZW55NitRc3dESVAxNjlkVjZidm56NTFEaDQ0ZHk5MzQvUHg4N05qeHpWMEZiQWFEQVhGeHBWWCsycldUWUREa0FmQ3lQQnc5K2dlR3Z6d1V6ejM3TkFhL01GRFJkS29xS1UyYVlQZFBlL0RGbDF1Umw1ZUhEUlhjcDQ4LytoQy8vMzRJYytmT3I1QkRyenFrcXNla2xNSlNhRUhRTFhLSEpDY25vMUdqUnZqdHQ5K1VvRkJaNEIwK2ZBVCtQUG9IdEJydGRUMFk5SG85Qmc0YytLYkJZT2haZ2IvTnE3bDUvVzBNSVFTQ0lFQ3Qxa0FRQk9MeHVCRVVGQXhlRUhENDkwTTRmU29WRE1QQTRYREFaREtoVjYvZStPYWJyekZrOFBOSVRUMkp3RUJ2LzRUbXpWdWdaNjgrR1BuNkNFeWZOZ1VCK2dEb0EvUTN4OGVXbloxZExsZk50MVRLQjlSUVVRVFVicmQzbHBvWjM1QlphN05hRVJRVWpJQ0FBREFNZ3hlSHZvU0xGOU9seFpxSFJRc1hJTjlrUkdoWURZd2JQd0dKaVVuNCtlZWY4Tjh2UGtObVppYm16cGtGalVhRDU1NTdIbDI2M28rbFM5N0JzVCtQd21Bd1lQakxYcjYzdGUrdng0YjE2L0RubjBkaE5CaVEwcVFKTHFaZlFHUlVOTjU1ZHlrb3BWaTlhaVgrK09Nd09BK0g5aDA2NHJYWFI0SlNpbkZqUnVIK2J0M3h5S09QNGNTSnZ6Rm45bit3YnYySHQwVjNiVitKaVltQklTK3YxSHM1T2RsbzJkS2Jpckx2ZjN2eDZhWlBzR1RwY2lUVXFnWEFHeldzYUhHVkJUdTN5NFh2dnZzV2ZmbzhCSzFPaDdpNE9QVG84U0QyNzk5WGFyOHRYLzRYUCs3K0FjdFdyTHJtaE5PcmxhczU1cEVqaDZGUnE5R2dZY09iZm4ra3NrUDgrZWVmQUFDV1pjdFJ5OXRzTm93ZlB3WURueCtFczJmU3NHRCtYRXlhUFBXYWdrVk9weE5idG14UkFYamxyNy8rTWpSdjN2eFB5ZGNtU3Y0MkpXSktLU1VNdzhMamNWT24wOXVVbmpBTW9xS2lFQkFRQUoxT2g3Ly8rZ3VpSU1KaU1VTWJGNC9uWHhpTUJnMGE0bUo2T2k1bFppckhmVzdnODNodTRQTUFnSmVHdllpNmRhdGVVSC9OR2x0UlVWR0Z1V3FWZ0JvcDA2V2R5YzNOamRkcXRSTnhBenUwdDI3VEZqVnIxc1RMdzE3RTExdTNRS2ZUb1hYck5nQ0FPYk5ub1dmUFh2aDQwMmQ0L29WQm1DNVJMRC93UUErc2ZYODlhdGFNeDdTM1ptRHQrK3NWczJqVTZMR1lNSEVLa3BLVHNmYjk5YVU0cE5xMmJZY1pNMmNoTXpNREgzMnlHWmN5TTJHeFdHQTBHaEFZR0lBTkd6L0d4NXMySS9Ya0NSdy9mZ3lFRUV5Wk5oMmZidm9ZYVdtbk1YZk9MRXg3NisxYkJtclMvZkJxSDZLb2FOSUE4SERmUjdCMzd4NGNQdnc3ZUo3SEw3LzhqTlNUSjlDelZ5L0ZIMGtJd0xBc2lvdUxzUG5UVGRMdmxHYUtpWXVQeDZHREI4RnhIUEpOSnE4MnJOWGlrNDgvd3VlZmJ3YkhjU2dxS3NTK2ZmOURzMmJOTHB2Q083WmoyOWRic1hUNXlwdkdVMWZWWTdyZGJ2eCs2Q0RtejV1RDRhKzhla3NvM2ZQejh4V0EwbWcwQ0FzTEs5Y1E1Y0tGOCtqYXRSdis3N21CbURaOUJqUWFyZUpqdXc2cFc3OSsvUmRIalJvVlc1Ry9qVkxLTUF6RHlGUmpIbzhISE04UnpzUEI0M2JEWVhmZ3pKa3ppSXFLZ3QxaFIxRlJFUW9LQ21BMEdQREhIMGV3Zk5rU1BQbFVhVjVGanVPdzZaT1BRWWlYeDYxYU5UWkJFSkNlbnE0RUMzd2pvQldrZFpBeWFSMkVVc3BFUjBkUElJUThlQ052dUVxbHdveVpzM0Q2VkNxKy9mWmJESDVoSUdiTm5vczZkZXZpN0prMDlGemhKZXhyMDZZdDNuVzVZRElhRVIxemJXbTlXcTBXT3IxZU1Wc0RBdlRnT1E2eHNYR0lqSXpDeEFsandUSXNERWF2MzlIcm00ckE2REhqOFBxcnIrRDVGd2FqU1pPbXR3VFV5aWJvTHBnL0Z3dm16OFdEUFh2aHJla3pVTDkrQTd3OWN4YmVXNzBTaHJ3ODFFNU14TUxGN3lJbXhwdGYxK2VoaDNIeTVBa01IZklDV0ZhRnh4N3ZoL3IxRzhCU3BseG96Smh4V0x4b0lUWnVXSWZhdFd0ajNZYVBvTkZvc0dEaFlxeGNzUXhmZlA0WjFHbzF1dDdmRFlNR3Y2ak1yVVVMdldiZ3MwLzNMMjBtYnRxTTJOaTRHejRlVlQzbXlOZGVCU0ZBWW1JU3hvNmJjRVB6MklLRGc2dThiMFpHQnNMQ3d0Q2pSdzhBd1BIang4djEwbWpldkFXYU4yK2hySXV4NDhiZklQL3J6bTZ0VzdmT0FMRENSMnNUQVZCQ2lEZEdTa1VxMTR2eVBFOFp3cEFTYXdubE9RNmhvV0dJam9tRjNXNkhXcVdHV3EzR3JsMDd3RElzbm5yNmFiU1hJdXVBbCtKOCtkSjMwYng1Uzh4ZnNMaENiYk95Y2JzbVlQT05nRmJHcVZZRzFHUUdBTGxjYWpnaDVOVWJQVUZQbno0Rm5VNkhSbzFUMEtoeENyNzl0akUrK0dBdDVzMWJvSmhHaXBuRU1LQzQ4VngwZi8xMUhMdDI3c0RTWlN1ZzFla3dZM3JwcWpDSHd3RzFXZzJYeTFudEFOYXJkeCs1UTNncHFWKy9BZjYzLzhwOVREdDI3RlRwd3RWcXRaajIxdHVsM3F1bzRXMmJ0dTBxWkhtdFY3OCtsaTVmV2VGdnN5eUx2ZnNPM0ZTZ3I4b3gvMm04YnNRNTJPMjJLa1VxNWFxYjY1VlBQL3ZpbXI2blZxdUhiTml3SWVQRkYxL2NCaS9GcmtnQktyV1NwL0NtZ1lpaUtGS0JGOEFURG9FQkFVU3IxVkdkWGdlMzJ3V253MXVOb0ZLcjBLMWJkOFRHeHFGV3Jkckl5TGlJT25YcUFnQTZkZXFNVHAwNlYzb2VkcHUxVWovb1ZadWllWGw1Q2dXUmIxcEhCUkZRK0lDYW9xM1o3Zll1TE10T3JJN0prWFhwRWhiT253ZTczVnQrWWk0b1FHaG9LTFE2SGVvM2FJZ2ZwYWplSDM4Y2dWcWxRblQwUDJ0cm9hR2hLTWd2cUxDN1ZFVmlOcHVoMSt1aDFtaVFuNS92ellXU2lva05oank4dDNvbDN2OWdBdzcvL2p1T1hFWDR1bkxIYmdEOGNuVmpjeXZIckxKalIwZEh3M0dGV3VlQWdLcVp2RlhkNzNwL0t5Z282SlYzMzMyM2hSSk1rSnJDeUNhcG5BSWlpZ0xoZVFFY3o0UGpQUEI0WkFaZUZ4d09CK3cyRzBxS1M3d012UGxHS2JtL2FrbnFkcHNWMGRIUjF3OXNEb2VqRkZ2SFB3UUx5aVhocHFXbGhXbTEydkVBcXFVT3FtZXYzdWpjcFN0ZUh2WWlubjNtS2FTZVBJSFhSM3BwM0taT200NXZkKzNFNEVFRHNYSDlPc3o0ejV3cU9WSVRhdFZDMjNidDhQU0FKL0hDd0dkaE5CcXV1SCtuVHAyaDArdngxSlA5TUgzYUZOU3RWeDkydXgwOHoyUG0yOVB4MHN1dm9GYnQycGo2MXR0WXZIRCtkZnM5NUNlOVg4cFArc3BLc0poYk5HWjJteFZzSlJwR1hGd2NLQldSYjh5cjhOeVM2OVQ3UjlBS0NBaEVjcDBieDFqN0Q4ZU1pNCtQSC9UQ0M0TnF5T0JHeTRNYlF5a2xvaWdRZ2VmQmNiemtiL1BBN1hMQjVYVEM3bkRBYXJPaXVMZ0lGck1GSnFNUjJWblpTbCtGeXNiUlpNZ0ZDQ290UDd3cWF2RFUxRlNrcGFVaE16TlRxUVgxTlVWOUtneUlyTFZKdmpWR29pR2F4VERNaEJzeDZMZUtTcm02cFRLcTQ4cjlMWmt3V3l4K29za3lZalRrSWpJeUFvbTF5M09mWldSbXdteSsrV05tTk9RaUlpSUNTVmZnWXpPWlREQVlET0I1SGxicjdjOVc0M0s1VnZYdTNYczlBSWUwdVFCNENDRWNBSjRRSWhKQ1JJbGFYS1l2b2xxdGwxbzhJQ0FBZ1lHQkNBNE9SbzBhTlJBUkVZRzR1RGpVcmwwYnljbko1VFhGNEdDb1ZTckV4c1pXcXExZGxZOHRLeXNMMmRuWk1KbE1NSnZORlFZTFBCNVB1ZFFPT1ZqZ2NybWV1RkdnZHJYTzFqdEpydmE2RWhOckl6L2ZCS01oVjJFNXVkczFOWnZOQ29Ibkt3UTFBRWhLVElUSmRQUEdURDRuVVJDdUNHcXlTWHFsQlhzYnltdFpXVmxuYTlXcXRWZjJ0eEZDbElBQ0FIaFpQd2hrY0ZPcFZOQm9OTkJxdGREcjlRcXdoWWFHSWp3OEhGRlJVWWlMaTBPZE9uVlFTMG9udWxxcEVyQlpyVmFsc3FBc3FQbldnUHFtZHZpYW9FYWpzWlphclI1N3E1eXRkOUtpdk5wRVZFSUlXclZxaFlzWm1iQll6Q2l5V09CeTNaMGNiWHA5QUJpV1JXUkVKQklUcjd3ZzJyUnVqY3pNUzhndktLaldNZFByQThDcVZQK29xZDNKVXJObXpjRmZmdm5sMmFlZWVpb2JsNk9rTXJCUk9aTGdKYWZrS2NNd2hHVlp5cklzWEM1WEtTSktHZXdDQWdJUUhKdGcwTndBQUNBQVNVUkJWQnlNc0xDd2ExSmlxclNLWk5QVE53bTNnc29DWDFDVHF3c0lwWlNKaUlnWUE2RFZqUnpNNk9ob0dBekdmeDJ3eGNkZmZUb0RJUVIxa3BOUUp6bkpiNE5lcGJhYitDOEZtNXNwaEpDV2ZmdjJIUUJnRlFCQjZvL2dqWlpLcEpUd0VsTlNDZHpBY1p3Q2JpcVZxa0p3Q3d3TVJFaElDSnI0a0M5VVZmNHhlSkNWbFlXY25CekZuMVlacUYzQkJPMWZIYWtkaXJQVlpJRGpEbmVlTyt3MnJ6TVU5SVp4c2ZuRkx6ZFRkRHJka096czdNNlF5cTBvcFJwSXlidStnUVJCRUlnRWJBcHV5QjJ1SEJMTlVVbUpOMHFhbjUrUG5Kd2NoZUxvaG1sc2RydTl3bncxWDhKSUdkaDRuaTluZ21ablo4ZXExZXJSMVRXWTk5NTdMNHhHSTR3bUU2d2x4WGNrTmJqc0RFMUlxSG1uK1ZiODRwZFNFaDhmUDJqanhvMnBRNFlNRVNSL20rQnJscFkxU2FYcUJPcExSR20zMnhXdFRRNHNoSVNFSUR3OC9LcXFQSzRJYkdYejFjcEVQbjN6MVNveVFVbE1UTXdvQVBkVjUyREd4TVJjZFM5T3YvakZMOVZpa3JZWU1HQkEveUZEaG53QWdQY3hTUVhKSkJYaFpkMVZURktHWVloS3BhSXlDNGh2WUtHb3FLaVVyNjFSbzBaVkI3Wk1uNkpUWDhuUHo4ZVpNMmRLTVhlVTlhK1ZEUno0Y3F5bHBhWDF6TXJLR3UyLzNYN3h5MTBsTCsvWnMrZG90MjdkRHN2Z0JpbFNLaGZMUzAxZzVLcDVoVlB1Y3Zlcnk2WnFXVE8xcWkzOFZJbGhQNVI3aytNRjVGL01BbkVhUU54bUVFOHhDR2NESTloQkJCY2d1QURCNDkxRWpsQlJBQ2dsOGpiNC85cXc5YVAzalBMZlk3LzQ1ZTZUaEdiaS85VkxydkgzK1l1RlBBQ0JBQUpBWmJPVWdSZk5BQ3FDaWp5RjZDWVFYQlNDQXhDc0lJSU9qR0FCNGZKQlBMa2c3a3dRNXpuQWxvcjQ1RnBRcS82NTkwV0Z3WU9zYkFzTXBtS1lMVFlVRlR0aHM3bmdjTHJoZEhKd3V6bDRQRHc4SEErT0Y4RHpJZ1NCUWhRcFJFb0pCWmozbHcwZUNlQUIveTMyaTErdVRTaTljOCtkWlptdWgvZE1md1J5SU1FYlJKQURDU3lWaUNsRmtVSVFLSGhlQk1jTDhIQThQQjRlYmpjSHA1T0R3K21HemVaQ1ViRVRab3NOQmxNeExtVlZyVktubkkrdHVNU0ozTHdpRkJSWVVWamtnTlhxaE4zaEJUV1htNFBidzhQakVjQnhBbmhlSkx4QUlRaVVpSlFTVUJETHhYY2JzQ3p6aG45cStzVXZWeWNpQlF5V1NKZ0t3eUNJTEd4M2RqcmlvQVVMRmh5Wk9ISGlSYTlKNmcwbWVFMVNpSklGU2tSS3dBdUVjZ0pEUER4TDNad0tUbzhhTnBjYUpVNHRDbTA2RkZqMU1CWUZJdHNjQkVOeENQSks0bEFuZ1VOY2VBRXFxNG9zQjJ3NXVZVXc1WmZBVW1oSGlkVUptOTBOaDlNRGw4c2pnUm9QanVQQisycHJGS0FVaEFKTVNJaitOUUFKL21ucUY3OWNIYWdkTzFjZllNTVFGSEpuOThtVnBHWkM3ZVRISjA2Y3VCb0FEMitFVkg0VlFRZ0Z2RzM4Q0NFZ1VyTmxJdEVkc1NvMVZDbzFWR29OMUJvdE5Gb2R0TG9BaUNRUXhUWTE4b29Ta0djT3c3MzF6MWNJYnFWTVVXTitDUXpHWWhSWWJDZ3Fkc0JxYzhIaDhNRHA0dUJ5eTZBbXlDWW80YjBtS0tFaUpaU0NPUEpXZENlRXZQSnZtbkRqcG0zQi9YM2Z1V0cveC9NQ1JrMytBdEgxeGlHMDlwc1lQbW9USEE2UGYyWGY1V0lvakFUWU1NVEV4djlya3M2MVd1MmdQYi91YTQ3TFZPSWFTdUZESmU3Tm5oQkZrUWlDQUY3Z0NjOTVBd2VjNS8vWk8rL3dLS28yaXY5bXRtVlRJRTE2Q1VoSGFWSkUwQUFmVWtSQkJDc2xJQWdxTFlMU2xkNkQ5TjVFcFNnSWlpQktFWkFlbENJSVVnVUVFdEo3c21WbXZqOW1kNUpOSXlCTjJmTTgrMEIyWm5idTNwMTU1MjMzSENzV3F3V0xROFpQMVQ1SUpENHVqdVNVRkhRNkErZ0tjelBlTDlkenV4aTJHeEVKUk1jbWs1Q2dHclhVTkF2cEdkYk12SnJEc05udHNtQzNPMEpRR1VFQkFSQ05Sc1A3N2tzMGZ3d2JzNUZOUC96T3VzOTZzV2wxSDNidStaTitnOWU2SitZUlIxUjhvZitjVGk1QXVmTGxPMlF4YkFaUURHU3FXNG5PMWpCSmxnWEpMbUczMndXYjNaWlpGYlZtVmtWVFVsSklURXdrTGphV3lKdVJlUHY0M3Rxdy9YMDlUZzFCNDFKSlRFb2pKZFZDZXBxVmpBd2JGb3VqV0pEcHJTRkpNcktzT0FzY1lrYlV2RGNFZ1JmZGwyamVTRTIxTUcvcGJzTEdkeUM0Y1NXQ0cxZGk4YXpPckZ4emtKaFlOL1hRb3dwRkFVblMzNUduZHViMEh3d012ZmNwN1ROblRoTTJiWXJHYWVqRXhvM2ZFTkxsTFVLNmRuSVI1SW1Pam1iZ0J3TjR1M3ZYbGkxYXRtcE1GaXB4UlZIVUlvS2lpQTdtSHhSSHE0Y2syYlYyRHlmRlVZYWo1U00xTlpYazVDU05Vand4TVFtN3JNKzEwQ0lDV0cxMk5RU05UU0VoS1kza0ZBdHBhUmJTblViTldUQ3dTOWp0a21DWFpDUVp4N0lweEk4L2FxMHo2SFh2UGVnTDVPbm1rd2tkOWhYQmJjSUlxakdjSnhxTzRmdXRKN1R0ZFp0TVpQallqVlN0UDRyaWxUL2k3UGxJTEJZYll5WnZwbnpORVhnVTdVTzlwaFBac2R0VktOZG1rK2dkK2lYZUpmdFR2UEpIZkRwdmUrWVBHSlBNSzUwWDRsZjJBN3hMOXVlRlYrZHc0VktVdHIxajEwWFViVElSZ0dPLy8wMTZ1bzNnUnBXMDdjODJWRVh2RDRaZmROL2hqeWdFQVZMU2hEczZ0bktWcW93YU0vYWVqbS8rdkxrc1c3cUVTeGN2YWlTdUFGZXZYbUhEK3ZVc1dMU1VaY3RYY3VMRU1ZMDhkZjY4T1RScjlqOVdmcjZLZDk5Ny8xVVBEN09ITXh6RlVTRVZCRUVIT0kyYnl0c21TVWlPVlV3Mm13MnJMWXV5ZkhvNnFTbXBKQ2FxSVdsMFZCUUppVkt1T1RZOXdJMGJDVVRISkJPZmtFcFNrbG9GVFhPMGRsaXNkcXlhcHliaHFJSTZ2RFUxRFAxNDhFdTlLS0NDKzczR2dtVy9zSFY5UDVvOVY0WE5QLzdPSzEwV2Nuam5VR3JYVUJjN3o1aS9rNVVMdW1FeTZxbFVvU2c5KzMzQmp6di9ZT0duYjFHcFFsR1dmcjZQRjE2ZHcvRzlJNmxXUmVYck9uRDRJdVhLQm5CMHp3aU9ucmhLajM2ZlU4akhUTSt1alFrZDlqVVdxNDN3bjRjQzBHL3dWNFM4OXhuN2YxSVptanEycTBOOGdscmV1aDZSZ05Hb0o4QS84OGxzTU9nSThQZmkybzBFOXgzdVJnN0V4c1l5Y2NJNFlxS2pFRVNSOTk3clE0T25HM0x0MmpVR2h2YkhaclBpNit2SGlwVmZaS1k3aG56RWpSdlhBVlYweWRQTGl6VnIxd0VxcmYrY1dUTklURXJFMzgrZndVT0hhVm9XQU91Ky9vb05HOVpyK3dQMGZLY1hScU9Sc0dsVFhNYjIrNGtUUEZXM0xwNmVudGp0ZHZ4OC9UaHgvRGoxNnRYbnhJbmpmUENCU3VqajYrdGJyMFNKNGkwdVhicTBHYkE1WGxvaFFWRVUyUkdTT2xZa1NPaDBkdXgyR3phYkhxdk4wYWlibms2YVNRMUpFeElTaUltTndXVEl2YWRObjU1dTFYcldFcE95VkVFMW8rYklxemx5YTQ0UTFPbXRDU2YyZlZ4SXB4TjdQU3dYd2xzZDY5SHNPWldBOHNWV05XamVwQ29MbC8vQ29wbXE5bVdiRmsveVdudVZhQ1F1UHBYUFZoOWcxWklldk5SYVZmMmVOcTRqaDM3OWl5bXpmbUxsQWxVNXZWalJRaXliMHhXVHlVQ2xDa1g1N2ZnVjVpemVSYyt1amJsOE5aYlNKZjBvV2R3UFQwOGp5K2QyNWRxTmVHMDhiM1NvcC8wL0xkMktoNGMrbHlTckhvdlY3cjZMM2NpQnI5YXVwa2FOR29SMGU1dExseTR4Zjk0Y0dqemRrRktsU3ZIMStnMmNQMytPaWVQSHVSd3phY28wQUJJVEUrajlUZzgrR1BnaG9NcjJUUncvbHZFVEoxTzhlSEYrK25FckMrYlBZL1NZek9OcjFxcVZnM2s0TDRIbHhNUkVQRHc4aUk2T1p0S0VjVWl5aEk4alQ1aVltSWpKdzRQdk4zM0hqaDNiOFBUMGZMVkh6M2YyTEZ1NnhPbzBiSTVWQ1pJajM2YklpaUlJYWtpcTJDVzdZTFByRkwwekpEV29JV2w2ZWpxcHFTbHFTQm9majBFdmtwNHVZemE3amxHOEVhbUdvUEdKbVQxckdlbVpCUU9iemRtemx0VmJBOW5oclZXdFhMd25VTzFodVJEcTFIU2xvYWxlcFRpbnp0elEvcTc0ZU9aQzh6Tm5JNUJsaFliMXlyc2MwL2pwQ3Z4eEpsTlhzMjd0SUV3bWcvWjMvYWZLOGVlNVNHUlpac2lBbG56LzQrOEVQajZRTnEvTjRic2ZUbEM5U3U3TXJHWVBBMWFybE9OOWk4V09sNmZSZlJlN2tRUDE2amRnNTQ3dHJQeHNCWmFNRE1LbXp5alFjYklzTTJiMEtOcTgySmI2OWRWZzZxKy9Mbkh0MnQ4TUh6cVk3aUZkV0wzNlM2SnV1dW9MVktwVW1WYzZkQ3p3K0U2Zi9vT1JJNGJ5VHU5M2FkclV0U2QvMG9SeFhMNzhGMkhUWjJJeW1hcDA2OTdqZVZ3S0NZNEtxWm9TRTFDOU5tUlpRckpMU0hhN1F5dEJyWkphTFJZeUxCbWtwNlZyaFlURXhFUnVSQ2JtOU5qVW5yVVVraHplV3JyVFc3TTRRbEJuejVva0M1SmQ5ZGFjemJobndzZjQ2WFJpejRmcFFwQ3phVnRtV096b2RKbkYzNndHSkx1Vnovb1pXWVYramRuY1hiMWVSSzhYRVVXUnRpL1U1UHFaS1h5LzlYZCszUGtIdzhkK3kveGx1em04WXhpZTJZeFZxUkorWkdUWVNFaE13N2V3cDVhL2k0MUxwV1J4WC9kZDdFWk93MWF2UG5QbkxTVDhTRGlmcjF5QjBXaGt6TGdKdHp4dTJkTEZlSGg0MExsTDF5eTVZaHZGaWhWekNWdi9DUW9YTGt4R1JnWmgwMmRTcUZBaFRwdzRUbUZmWDIzYk00MGEwNkpsSzgxYkxGNjgrS3U5ZXIyN2MvSGloZFlzNGFpZExMeHRMbDZiWFJKMGRydmlVaVcxV0VqUFNDYzFOWTNrNUdUME9vR29hSmxpUlF2aDVXbks5TmhpWXBOSlNFeFhlOWJTclZyQndLWlZRZVZNYjAxV3ZUVm5idTN4Y28rOURUeitNRjBJNFVjdnUveDk2TWdsYXRmSW5VMjFZdmtpNlBVaUI0OWNjbm4vUVBoRnFsVEt6RHVjdmVENlZEdCs4bStxVlZZSklZZU0yc0Q1aTFGMGVlTnBWaTNwd2Y2ZlB1TFU2UnNjUDVtVFE2cDJqZEtZelFiMkhqaXZ2YmZ2MEFWRVVlRHBiRjZqRzI0QVRKbzRudkFqNFRSdi9qekRoby9rMEtHRExnL2QzTEJ2MzE3MjdON044QkVmdXdnV1ZhaFFnYVNrSkg3WnMxdkx0MzIvNlR1WFk4K2ZQOGZHamQ4VWFHeFAxcWlCMVdyRlpESWhTUklIRCt5blppMVZ5N1JXcmRyYU9JLys5aHRCUWVVd21VemwrL1R0MTV4c1JZVHNYcHZzOU5yVVFrSm1sZFNtQ2k5Yk1qSklUMWR6YlNrcEtjVEVKaE41MDlWcjA4Y25xQ3NNVWgzZW1zVmlVOWRzT1VOUW04TmJrMXk5dGQvMkRQZlI2Y1MzSDdxY3hJWmZlYWIrNHp6ZnRDb3JWaDNnNU9ucnJGclNJOWQ5Zlh3ODZOZXJHWU5HcnNmYnkwU2xDa1ZaL3VWK0RvWmZZdXJXRDdYOS9qaHpnNFhMOS9EdTI4RWMvdlV2NWl6YXhkSTVYUnhHTDVJK0g2NWhYdGliQlBoN3NXTFZBYnk5VFpwaFhQdk5FZUlUMG5pdlJ6QmVYaVo2ZEdsTTM4RnI4Zkh4d0dqUTB6djBTN3AzZWdaL1B5LzNYZXhHRG5UdTNKV3dzQ21zWGIwS1daWVpPT2dqUkZGMEtSNGtKaWJ5V3NkWHFQUFVVd3dkTm9LNXMyZVNrWkZCbi9jeVU5OXo1eS9DeDhlSFNWT21NZlBUNlN4YXVBQlBUMDhHWmhOU1BuYjBLQnMycktkOSt3NjNIRnZac2tHMGI5K0JkM3YxUkVIaDJXZURxVmV2UGdEdjkrbkg1RWtUV1BmMVY1ak5ab1lNR3c2QW43OS9oL2F2ZE5pK2NjTTNOc0RxTUc1MlZHVXJsVzFYYmRwMTVOcFVyeTFybGRSaXRXcTliVG9SNGhNa29xS1RLVjdVVjR1U2hGbVRYK1ZHUkR4Uk1jbkV4NmVTbUt3dWVrOU5zMnBMcVRJc2ttQzFTdGp0aWlESmlxZ29pTmJvK2YxME9qSHNZYm9Jbm00K21TZXFsdURDWDlFY09uS0pHdFZMTVgxOFI1NTlSbTJwcU50a0lpKzNxY25Jajlwb3gxaXRka2FPLzQ0dnZqcEVRbUk2dFo0c3pmaVJiZmxmc01yOTlPSEk5Wnc1RjRHZnJ5Yy8vM0lXblU1a2FHZ3IrcnpUQkZEYlBRWU0vWXJ0dTg2UW5KSkJuWnBsbURhMkE0MmVWbVhRT25aZHhPV3JzZnk2ZTdnam4yWWpkTmpYclBubUNLSWcwTEZkSFdaUGVRTVBENFA3TG42RXNlZDQ1ZitrNmxwdWlJK1BuMWpqaWFyZkF5bEFLcEFtQ0lJRlZkM0s3bEMxa25VNm5XSXdHakVaVFlxSGh3a1BzeGxQc3lkZTNsNzQrQlRDdDdBdm9nZ05hMG1VRDNxTWFsVktVRDVJcFRVU3hvOTh5WFVabGNON1MwMnprcDVoSlNQREpsaXNFamFiSWtpU0xNZ3lZdWZYNitrL1c5RGpNUERrdzJiWVdqV3Z6dWloTHoyeU40aWlnQ0M0di92RE1tY0YvZXhIeWJBcGl2SkhvNFlOM3YvNzc2c3BEdU9XSmdoQ09tQkJsZXlUUkZHVVJWRlVEQWFEb2hKUGVpZ2VIaDZZUGMxNGVucmg3ZTFONFVLRkVRU0Zlay9LbENubFQ2VUt4YWo1UkdrOFBBem9VeHk1dFl3TUcxWkwxdFVGV1JhNVordGJXenFuVzVlSHphaGxoK0RiKzEvM2cwZWVtMGJSSXJlL3JFWlM5RnlPcWt4OGtoNUpGc2xJZnpSVnFqek1ablNpZ244aE8wRkZ6aUlLZWJmUXlBcGNpYWxNYklJSlNkYmRzemxUeHlRVFdOaEMyY2ZPM3RMSVhiOTI3Vkg0cWFvdldMajQyUmZidE5ycHlMWFpGRVd4Z1dBWEJMV1FJTXV5QUNnMm15M1RJT0pZNlNTckt4VThUQ2ExdVRsRklqRXBrOW9vcUV3Zyt0UTBpNE81STF0dVRaS1JKRm1RSk1XeHlrQjlvU0RxOWJvdUQvMVRJV0hSSTNFenA5djkrUDFDS2ZRR0Qzd0t1M1ZGVTFOVGlFOU9JaWFoS2pVZnY0cEpuNWlyVWZ2MTNCUG85T2I3TW1lcHFTbkVKaWNSRmY4RTlTcWR5dGU0bFN6MWFCRGpGQzlSb2czd2k4T3dXUUc5SUtESDBkZUdxbXdscU12UUJRVUVRUlFFUlJUVmJnUlJwOE5pdFNLZ2tKb21rWnljUVh4Q0dqRXh5WlFxNFllWW5tNVR2VFdyU3lNdWRydUVKTWxxSmRSQm5xU0FrSFp6Ym11ZzhjTTRXWWQyREgza3d0REl1Q0xvRFI3L0tWYUlmd0l2TDIrS0ZpdUJUdTlCUkZ6dWlsK1hvNnVoMDV2djI1eGxqc25NbFpqS3VBR2lLRGJjcy9kQUxUSkpLQTJLb3VoUUs2U3FOVk1VRkVWV0s2U3lNNHJNdXBaVWxTUklUN2VSa3BwQllsSWFzZkdwUkVZbElhWnJQR3RxejVyTkxtR1hIRWJOR1lKbU1uZ0lSb1B1VGZmUDh2QWdOdEgwbjJTRitLZnc5aWxFVEtJcDEyMXhpZm9ITW1mZVBvV0lTVEM1Znh3SFNwY3VuYjMxdzhuOG9YT3lmamhvalpBbHRmM0Q3bGdrYjdmWnNEcGFRTkl6cktTbVdVbE95U0FoSVkyWTJHVDBGa3NtZWFUV3M2Ym0xZ1MxYjAxeFdFNkVoQ3N6bnhRRTRkWGJDZ2tmNFdUMnZaNGZTZFloeVRxM3A1YUhsNVFZSDRzc2d5aTZ6dmVEbWpOMVRIRjM5SnNuSlNaeSthK0xwT2Fqb2V2bDVVMVF1Y2NwVkxqd1hSbnZ2VDZud1dCb3UvYXI5Vis5OFhySEMyUlNoK3NGUWJBN3dsRlpsZXhUQkVtU0ZVbVNCTWt1S1U2dnpXNnpBUW9XaTB4NnVwWFVWQXVKeWVuRXhhV2lWM05yV1pkTnlRNXZUVmFMQmdvNCtkYTh2RXl2RjJUQS96R0s0M3Y3RlBjRW5VNmlpRzlDdmxUSHVVRW5Tbzlzb2FBZ1NFOVBkekZxb0JxVUJ6bG42ZWxwZC9RZysrdlNCZExTVXZQZEp6VTFoY3QvWGFSR3JUcDNaYXozNDV5MTY5UitEcmlhSmRkbWRYaHRrcUtvdVRaRmtSVlZ4VXB5cFRheTJ4RlFzRmdsTWl3MjFXdEx6aUErTVExOUZ2MENOYTltenl3YXlBNVhFQVZoODFkOVBFUlJlTDBnUnUwL1JuRjh6NUdhbWtKRWdsKytWTWQzaXUzYmZtTEY4bVZFUmQya1JJa1NmUDdsR3M2ZlAwZVA3aUhhUGtPSGorU0ZGOXE0ZjRpSEdMY3lNRm12cFgvVE9UMDl2ZHEwZTduOSt1KyszV2pKekxWaEV3UkVVQnk1TmtGUUZCbEpraFZKbGdTN3VrZ2V1OTJHQUZpdE1oa1dHK25wVmxKU00waEtTa2VmblVEU25pVzNsblg1VlBPbTFWNEZTdDlxb0ZrcGp0MG9lSWppNWVYTnpVaVptL0YrRlBPUHZ5dWZlK1BHRGFaTW5zaVljUk9vVjY4K1NVbEpBRlNvVUpIdE8zY0Q4RTZQYnZmc2V5MWZ0cFIyTDdjbklDQWd4N2htelpqT3laTy9ZelFhYWY1OFM5NTd2NC9HS25IdDJqWG16SnJCeVZNbk1abE10R2pSa2w2OTM4dkJPbkUzY2F0elB0ZTRJUWFEQVVFUUNRb0tvbnVQbmpScTFOaDk4ZjV6bEJyNThhZ0czMzI3Y1JmYUVpdEZEMEttUG9KS0lhNWt6YldwaStRbFFNRnFrN0ZZN0dSWWJLU2xxN2syMFJtQ1NwS2MyZUloWjdaNDRHengwT2tLdE9UL3YwcHhmRi9DMG55b2p1OEVaLzg4UTJCZ0lJMGFOY1pvTkJJWUdPZ0l4d1JNSmhNbWs4bGxMZUhkeG1jcmxoRVhGNXZqL2RHalJsS3lWQ2syZnJlWnhVdVdjK2pnQVRadCtsYjErR1dab1lNL3BGTGxLbno3M1dibXpKblBudDI3MkxqaG0zczJ6b0tlYys3OGhYeS9aU3ZkZS9Ra2JPcGtObnl6L29GY0o0SWdVS2RPSFZxMGFFSHo1czBwVWVMMm5BaEprdGkvZngvRGhuekV0Yi8vdmk4cGdiRmpSdkhXRzYvUnZWc1h6cHcrclczNysrcFZ4bzhiMDR3czFWRWM2MGVkREx1U0pBbVNKQW1LSWd1U2F0d0VwN0N5SktrUnA5VnFkL0hhTk1QbTB0NGhPU20vMVJhUCtLc3puaEFFV3Q3cUMvd1RpbU0zVk04dEw2cmoyOEh4NDhkNHVXMGJwazJkVEdSa0pDKzNiY1BMYmR1dzhyTVZCZjZNUXdjUDBQbXROMmplTEpnZTNVUDQ0OVFwbCsxN2R1OGlwR3NuWG1qMVBOMjdkZUhRd1FQYXRuNTkzK2ZsdG1wbys4R0EvcnpjdGcxOTMzOVhNeUxCd1UzcEd0SU5rOGxFa2FKRnFWdXZIdWZPbmdVZ0xpNE9QMzkvT25YdWpORm9wRlRwMGpScS9DeC8vbm5tbnMzNzdaelRiRGJUcUZGamhnMGZ5WkxGQzEwWVplOFh5cFVyaDA2blk5dTJiZXpkdTVlYU5XdGlNQmh5TmRpNS9YOUEvNzc4c21jM1o4NmNScEtsMnpwMzQ4YU4wZXYxZVQ0Z2N2dDczZGRmNGVucHllcTFYek40OEZER2p4dUQ0cmpJWjg2WXpzdnRYMm0yWnUyNjBtVFRId1YwZ2lBSW9pZzYxNDRpYXpVQVNYczVxZFdzRmpzWkdUYlMwcXlJem9LQlhTc1lPTFVNdEtLQjRPM2wwYjVnVDVJN3B6aDJRMFZLcXZDUGMyeTFhdFhtMjAxYkdCQTZrSklsUy9IdHBpMTh1MmtMSWQyNkYrajRpeGN1OFBISTRielhweTlidG03ajFkZGVaK0FIL1RYdXJpdFhMak4rM0JpR0RCbk81aDkrNHFXWDJqRml4RERTMHRTay9KeTU4L2wyMHhZQVpzeWF6YmVidGpCMy9rSUFSRkdrVStjdStQcXFudWxmZjEzaXdQNzlOR2p3TkFDQmdZSE1tVHNmRHcremRuTWNQM2FNR2pWcTNyTTV2NU56MXF2ZkFLdk5waG5rKzRuQXdFQnUzTGpoY0NaVWlpMC9QMWRQLzhpUmNFWU1HNExOWmlNdUxvNTNlblFuTGs0VkcvNTB4aXlHRFI5NVJ3NUlRRUJBbmw3K2h3TkRPWDdzcUdiTUZzeWY1N2llem11L2I5VnExVEVhalZ5N3BucUs1OCtmbzBHRHA2bFZ1MWFEWEx3MkVSQVZCVUVRQkxYdFE4bGFSSEMwZ05pemVtMTIwak9zaUhaSjFzUlpuR0dvckdTeWVLQW9naWdLTC8rVEgyTFF3RkJlNjlpZWtDNXYwYlh6bTJ6Wi9MMlcxM2l0NHl1MGIvY2kzVVB1N1dLRzdpRmR1SGp4OW5RRnR2MzBJNjkxZklVWFdyZGc5cXk4Q2Y1MjdOak82RTlHL21lTTYrYk5td2h1MHBSR2pScGpNcGxvMWZvRnFsU3R5amFIa0VkQVFDRExWM3hPdGVyVkVVV1JsOXEydzJhMTh2ZmZWd3Q4amo5T25hSkY4NmFFZE9sRWxhcFZlUzY0U2E3N0xWd3dEN09uSnkrMHVYODZRUVU1cHlBSStQdjVrNUo2LzBWNGpFWWpraVFSRUJCQTQ4YU5rV1VaazhtMVA2NXUzWHI0QndRd1p2UW5EQm80Z1BhdmRNRGYzMTg3L2w2Z1Q5LytUSnd3bnJselpyUDFoeTEwNmFvV3FCNnZVSUZmOXV4QmxtVXVYYnJFelp1UnBDU3I4L2I0NHhYWXMzc1hYbDdlemJNWk5YMm1jY3ZzYVZOa1J6anExRWVRVk1kTVZaS1hzRmh0cEdmWUVMTVlOYTFnSUN1QW8yaVFHakczR1hlQklmZWpJY05ZK2NWcTVzeGJ3T2NyVjNEcDBpV04zbmhxMktjUDVRM2VvbVVydmw2L2dXN2QzdVpSUW1Sa0pNV0x1K1p0eXBRSklqSlNaUlgyOXZibXQ5OStwWGV2SG5SNjgzVzZkZTJjYXlpU0g2by84UVRiZHV6aXEzVWJpSWlJY0ZFNGN1THpsWjl4K1BBaEprNmNuR2Y0YzdkUjBITXFpa0pjZkJ6ZUR5anRVcTVjT2FwV3JjcisvZnUxb2xCMnc5dTc5M3NjL2UxWFRFYlRQM293bU0xbU9uYnNTTWVPSFRFWURMUnIxNDZPSFR2eTJHT1B1ZXozZUlVSzZqM3oxUnA2OVg2WFFvWFVYUHVycjcyQlRxK2plN2N1ZlBINVozaDdlMlAyVkwzalFSOE81dWVmZC9KMjk2NVZ1b2FFVkhFWXM2eDVOcDJpS0NwWG0zTTFnaXdqT1VOVFdkWTZPbFN2VGNKaXNhR1hzcXd5Y0RUa09zTlFBTUZrMHJlOW16OUk0Y0srUFBGa0RTNWVPRS81OG5tVEt5WW1KakI1NGdTaW9xS3cyMjEwNnR4VlkrTThjK1kwTTJkTUp6MHRqU0pGaXpGMDJBZ3RNYjU3MTgrc1h2MGxsb3dNcWoveEpCOE0vRkRMUCt6NmVTZGpSMzlNZW5vR2ZmdjExN3lFYjlhdlU1UFhpa0xUWnYralcvY2V0L3dlUjQ2RTgrbjBhWWlDU01sU0pmRTBlMnJiOGh0RDgyYkI5Qi93QVV1WExFSlI0UHN0V3g4NncxYTBhRkVpSXlKYzNydCsvUnExYTZ1OVNudC8yY09xTDc5Z3hzelpsQ3F0RnNxZmE5d3cxNXNydTdHelpHU3dkZXNQdEc3OUFpWVBENG9YTDA3ejVzK3piOTllbC8zV3IvdWE3ZHQrWXRhY2VYZXQ0ZlJXdUoxekhqa1NqdEZnb0ZMbCs3OUV5bXExWXJmYk9YcFVEZnQwT2gwV2k4VTFwWkdTd2tjZkRhUnpseERPbmYyVEtaTW5NblRZaURzcUZxV25wN04rdlZvb2FkZXVIVC84OEFOWkY2ZG5qWEIyNy9xWjhSTW1NVDFzR2hNbVRhWlNwY3FZeldhR0Roc0JRRkpTRW0rODFvRVNKVW9DVUtwMGFUNmRNY3R4Myt4cStQbktsWDlrTld5Q0lEakNVVVhJR25xcktUTUpSUkdRSkFXN1hmWGFiRFk3Rm90ZERVVlZiMDBXSEVVRFRhaEZVUlJSRUlTN0dnTkVSMFZ4NnVUdlZLbFNOZC85enAwN3gvK2FQOCt5RlN1Wk0zY0JzMmJPd09wWUd6YnE0eEdFaGc3azh5L1g4TXd6alZpeWFJR1dyMW0vZmgxejVzeG41UmVyQWZoaHkyYnRNMzE4ZkZqNXhXcEdqeG5IL1BsekFaVlliL1BtVFN4Y3RKUWx5ejdqdDk5K1k5ZlBPL01kbThWaVljSzRNWXdhUFpZdlY2K2xUT215MnJaYmpjRnV0eE1WRmNXNmI3NWwvVGNiSDVqeGNuWnZBeWl5ak4xdTE0eFFteGRmWXMrZVhZU0hIOFp1dC9Qenp6djU0OVJKV3JSVTYwZXhzYkVJQW9nNkhZbUpDYXhlOWFYamMxeXJIc1ZMbE9EUXdZUFliRGFpbzFSSlFxUEp4QmVmcjJUdDJ0WFliRFlTRXVMWnUvY1hhdFNva1JrS2Y3K0piemR1WU9ic3VWcjRkTS9EN3dLZTAyS3hjUGpRUVNaUG1rRHZkOS9IeSt2K0U0UkdSMGRyQnNwb05PTHI2MHRDZ3F2SzJjV0xGd2dPYnNwYm5Ub3o4cFBSR0kwbUxjZDJyM0R5NUVrK25UR0w1NEtiTU9MalQvanQxeU11MjVPU2twZzJkVEl2dnRRMlJ6ajg5OTlYV2JaMGNiTXNJYWhXUkhCNGJLSWdDQzdMckZRYU5kbFJJM0ROdGVuVlNxaXNlV3V5eW1FcEFFSjY1THpXUU1tNzhhV25oMDNGN0dIR2FETFNwMjkvU3BjcGsrLytOV3ZXWXZteUpXemI5aU02blI2TEpZUGs1R1FTNHVQeDl2YWhhclhxQUx6VXRoMU5telVENFBEaFExejcreXJ2OW41SGU3SjVlL3RrNWgwYzdKNVZxMVhURXVIaDRZZDQvdm1XbU0ycWEvemlpeThSSG42WXBzMytsK2ZZcmw2OXdtT1BGZEdNYzVWcTFkajN5NTRDalFHZ2EwaTNlNWJuS0FpeU4raE9tVHlSS1pNbjhueUxsbno4eVdncVZxekVxREhqV0RCL0xwRVJFWlFwVzVhcFlaOXFNbTJ0WDJqRHFWTW42ZEc5S3pxZG5uWXZ0NmRpeFVyRXhidmVPQU1IZmtqWXRLbXNXTDZVTW1YS3NIVDVTb3hHSTFPbWhqRjN6aXkrV3JzR2c4RkFjSk9taERqQ2ZVbVNtRFpWRFFQZmZOMjF3K2p6TDFkVHJGanh1ejRmQlQxbnZ6N3ZJd2dxYyt5Z0R3ZmZ0VDQyUlFGdno0S1h3aTlmdm95dnJ5L05temNINFBqeDQxaXQxaHozdzYyQXVRQUFJQUJKUkVGVVQ4MmFLazIzWHE5blVEYW0zRHZGZDk5OWwzY3VQY3M1YXRXcVRhMWF0YlcvRnk5YXdPNWR1L2hmOCtkekZMSDY5M3VmbE9RVVFycS9YV0wwMlBGUE5ubXUwYS9aOG13MlFiWGt6bkJVVVlzSU1vS2dlbXlTbzFiZ3pMWHBKYWZ5bEhQNWxKcGJBeENNUmwzcnUzWHhEUHB3c0VZYlhCQ3NYYk1LdTgzT2xLblRFUVJCYXg5d2hqaE9HQXdHL1B6VUo2ek5haU80U1ZOTmJpeS94Ry9XRUNtcmR5NElnbGFLemkrL2tsZXphRUhHSUdaZjUzT1AwTEpWYTFxMnl2a1RWcXhZaVYvMkhjejMyRWFOR3VkNTQ1cE1Ka1orUE1ybHZYZDY1ZVMvcTkvZ2FiNWV2eUhIK3hVcVZtVG03TG01ZnJaT3AyUFAzZ1AzMWRBWDVKeTNtcTkvQWtFQXZjNU9hbXBLZ1NxVmlxSnc3Tml4ZjN6ZVZXdSt1bTl6M0t2M2UvVHFuYnVtK3V3NTg3T21LdW9CeDdPRm83cHM0YWlneUxJaVNYWkVRVVNTQk1maWdreXZUWlNkWWFpakdxcVN1V2xoYUdzZUVLS2pZL0QyOFVZUUJJNGZQMFpTVWhLS29sQzZUQm1TazVNNWYvNGNBRC85dUZVVGNxMVh2ejQvNzl6SjlldXFXT3pPblRzNGVmTDNmTTlUdDI1OXRtL2JSbnA2T2phYmpSKzJiS2Erb3pTZEY4cVdEU0k2T2xvcnVVZmN5SlQzdTVNeC9KTW52VGxMYnMrTjdFbHZ6eHc5Z1E5NnpuSWJFMEFSM3dSU2svTVd6ZmIwTEZqSVc5RDk3dVpuM2Mxem1qdzhtbVR6MXB3OWJhTGo1U0RsVUFSSmtoQUV1eUE3bzg0c1hwdGVDME1WQlNWTEdKb1dNYmZwM1FwRDgwSitnaFN2dmZZNlk4ZU00b2N0VzZoY3BRb1ZLbFlrTVNHQndNQkF4b3diejZkaDA3QllMQVErRnNpUW9XcGlza3FWcXZUclA0Q2hnei9FWnJkUkxxZ2NnNGNPeTNjTVQ5V3RTOHRXclhtM2wxb3dlUGE1SmpSdDJreExoaTVkc3BpVTFCUmtTV0xmM3IxMDZSckNTMjNiTVhUNENFWU1HNEtmdno5NnZVNHJIdHpKR1A3SmsxNFU1UUkvNlI4bHBLWWtJNHB5anA1QWRjNmtCekpucVNuSjZFUXAxejdGWXY1eDNJajFKeXBTd2N2SEw4Zll5cFd2Y010RjZaNmVYcFFyWCtHdWpmZEJuQk1vc1gzSHJzclBOMjk2Z2l3MFJrNmpwaG8yQkZtV0hlNGJTTEtnZFhZNEs2UkNrVUF6RnF0ZHNGcGw3SklpeUtwWWk4NFdzMkNTS0FvZjNPNm9IaVh1OW51QmkrZi9KTGhXd1pzK0wwZFZKamE1a0h0dGJqYmNqTHhCUUtFa2doN0xPWmVYb3lzVG0zVC81eXkvTVRtOXlhajRRa1RHQjJDVGpLUStvc1F0NmVucFMxdTNicjBLVlE4aEdWWHdKZDBoK0dJVEJDUlJGR1NEWGxDTVJoR1RVYStZUFF5WXpRWTh6U2E4dkV6b25XR29rb1hKUTFFVVVSU0Y1dmM2Q2VwR1RuaDdLcmZGMTFVbThEeFI4ZFc1R1hrRGJ4ODNOWGhxU2pJcEtjblliUm1VQ1RpWGV5b2g4Q3hSY1UvZXR6bHpqa215cDFNMjhHeStIbmhSL3lTSytpYzk0cUk4U2tQZ3F5emhxTTdCOXFGV1J4RWNDK05CbGhWRlZwdDJGVWxTMUFxcFhVS2ZyU2tYQllTNHl6T3FjUWRpTGJlYkJIVWo1dzJnMTlsdjY0SVdSWm02bGM1d09ib3ljWWxXRXVMaXlNaDROQi8xWnJNbm9pZ1RVTmhHMmNmT0lRcEtudGRwdlVvbnVSSlRtWmdFeXoyZE03UFpFNTBvRWVCcm9XemcyUUwvdG84eU9hc2dDTlczcnU5YnZIWEh1WDlweGsxQmgrRElzWUVnS0tyTmttWFViZzVIWmRUNTBxdlUzOW5XaG5wN05MblRRUlh4VFNBaUljRnQyTzRBS1NtSmxQUzdmY29pVWJCVHZzZ2ZsQy9pbHQrN0hjTVI5TmhaZ2g1N09PVDMzSERGVTdXQ3FnRi9PdzJiQWpvaGF3RkJ6YlVwaXFOTlRYS3NSbkQwdHlFNnZEVUJiVzBvZ2s0VW43dlRBUlh6ajBPUkVvaTZlWTIwQjdDTzd0K0l0TlFVb2lLdWdwUklVYjkveHNYMmFEL3BINzQ1Y3h1MU80T3ZyMmN0MUtLQm5zd0NnaXIwb3RHcEtZS3NJRGk4TmtHV2xTd2VtNU9leU9HeERlclhUQ2NJQlArVEgvS3BTcGU0R2UvRHpmZ0FraE9OcEtTNmY2aTg0TzBGQnAyVlVvRnhGUEZOY2srSUcyNEFCcjJ1WWMzcXhRd24vb2pVWndsSFJRUkVCVVVBUVZBVXh4SXJ4Ykc0d0VHN0pza3lncGRaSjlqc2lpQ3AxVkF4K2Zyc3BwNW00NC91cVhYRERUY2VKSTZldU5MbnFlQ0pwOGhTSFJVRTBnR3JJQWcyUVVEV2FkVlJIUjRtdmVMaFljQnNOcUszUzFrV3ZpdUtjRE1xc2VIOTZveDN3dzAzM01qVGF6UG9LZ04vWmcxRkZRVlJFRkE3T0JDUVpRVzdCSUpOUmhEc2FzZ29nT0RoNFNIYTdYWkJVUlJSVVJTZDNXN2ZKQWpDOCs1cGRjTU5OeDRrN0hiN2JvUEJNREdMeDVZaUNFSXFZQkVFd1NvSWdpUUlncXpYNnhXajBhZzQ2TzRWczltTTZGd1hxU2lLOE9xcnIrb0VRV2pvbmxJMzNIRGpRVU92MTljdFc3WnMxc0tCVmtCd09HS3VWRVpaWG9MUmFCUWxTUklWUmRFbEppWTI5UGIyM3VXZVVqZmN1UDlRRklYSXlFaHUzb3hDa2lSU1VwSWYrVGs1ZGVwVTc3NTkrNTUxZW15T1Y3b2dDRmJBN3ZUYWREcWRvdGZyTVJnTWlzbGtRcCtWeWNMRHc2T3UrL0p5dzQwSFk5U09IVHVHZ3FDdGhuRHI4WUt2LzJQbGdRdGthZnR3a0U5cWpUU0NJQ0FJQXFLb1E2L1hvOWNiTWhlV0FvSk9wM3ZxMy9qbFEwTkRhZFdxVllIMlRVbEpRUkFFZHUvZWZjZm5xMVdyRnBNblQ3N1R2QUdob2FFVUtWS0V3b1VMMDd0M2IwMEV4WTFIRjVHUmtTZ0lGQzFXd3QzY25nVStQajZWczRXaG9wTjRNcXZ0VWhtSlpMV2ZUWkhWSEp0em5hZ2dDSFhjVTNsdk1XellNRFp0MnNTNmRldll0R2tUTzNmdXBGKy9mdTZKZWNRUkZSWHQxdVBOQlFhRDRRbHk1dGl5R1RVRmxXNU5RVkZrRkZuV2R1RDgrZk5GZ0VydXFieDNTRTFOWmQ2OGVZU0ZoUkVjSEV4d2NEQ0xGeTltNWNxVnhNVEV1Q2ZvRVlZa1NYZmtxWjA1L1FjRFEvdmY4L0dkT1hPYXNHbFQyTzVRS25OaTQ4WnZDT255RmlGZE83a0k4a1JIUnpQd2d3R0VkTzFFM3o3dmNmWHFGVzNiaVJQSDZmbDJON3FGZEdiMEp5UHoxV1lWQktIQ3lJOUhlZWRqM0FBRUhBc05uTTI2enFxb1VLSkVpU2YvS3hmSmQ5OTlSLzM2OVRHYnpYaDVlZEc4ZVhQT25YTmxldmpsbDErb1ZxMGFIaDRlTkd2V2pMLysra3ZiSnNzeVk4ZU9wWFRwMG5oN2U5T29VU1AyNzkrZjY3bWlvNk41NVpWWDhQUHp3OXZibXhkZWVJRUxGeTVvMndNREEvbndRNVZOOTlpeFk2U25weE1jbkxtdzQ5bG5ud1hnNE1HRDdydjdFVVp5OHAydE9xbGNwU3FqeG95OXAyT2JQMjh1eTVZdTRkTEZpeTVHNk9yVksyeFl2NTRGaTVheWJQbEtUcHc0eHBFajRZNWo1dENzMmY5WStma3F1blYvbXltVEptcXBtRWtUeGpIeWsxRjh0dkpMU3BVdW8ybG01SVZubndzdTRUQmtMb1NUanJCVVc0R2dLbGlwWHB2bTBoa01oditFWWZ2OTk5OTU1WlZYNk55NU0yZk9uR0hIamgzY3ZIbFRNeTVPekpvMWkwbVRKbkg4K0hHOHZiMXAxcXlacHJ3emNlSkVsaXhad3BJbFN6aDU4aVFkT25TZ2VmUG1uTTFGSERjME5CU0x4VUo0ZURqSGpoMURsbVZDUWpMMUJBWU5HcVJ4MDErL2ZoMmowVWhBUUVCV1Y1dUFnQUN1WGJ2bXZydmR5SUhZMkZnR0RRd2xwTXRiZEF2cHpPRkQ2Z1BRcWNuYm9YMWJRdnU3cGpLR0RmbEk5YUs2dkVXN2wxN2d6VGRlMWJaZHZIaVIwUDU5NmQ2dEM0TStHTURObTVFdXg2NzcraXVYL1FGNnZ0T0xzT2t6S1AvNDQ2NzMyb2tUUEZXM0xwNmVLc21xbjY4Zko0NGYxN3l5NTU1VEgrQ0ZDeGZtenovUFlMVmFpWXlJd01Oc0ppaW9IQUQrL3Y2Y09KNC96WG54WXNYS1pERnFqanhiMW5CVXlReEoxVHdiZWxCNzJIUTZYZlgvd29XZ0tBcWZmdm9wL2Z1cjdubFFVQkFoSVNFc1dMREFaYjlQUHZtRWR1M2FBYkJpeFFwS2xTckY1czJiZWVtbGw1ZzhlVExMbHkvWENoSURCdzVrMTY1ZHpKdzVNOGZuWEw1OG1kS2xTMU95WkVrOFBUMVp2bnk1aTVFYU5peVRQVGN0TFEwUEQ0OGNZemFaVERuazA5eHdBK0NydGF1cFVhTUdJZDNlNXRLbFM4eWZONGNHVHpmVU5IblBuei9IeFBIalhJNlpOR1Vhb0VwWTluNm5oNmEvWWJWYW1UaCtMT01uVHFaNDhlTDg5T05XRnN5ZngrZ3htY2ZYckZVcmg1NUhYc0pEaVltSmVIaDRFQjBkemFRSjQ1QmtDUjlIbmpBeE1SR1Rod2ZmYi9xT0hUdTJZVFFhU1VsSklTa3BDWlBKaE5WcVplNmNXZHk0Y1NPSHdsWjJlSGw3bDh0aTFCd0dUaEVkRkFPT1hqYWN0UUpGVVJSQjcyeHlFd1RoUDJIWWF0YXNTVUJBQU5PblQrZk1tVE9jUFh1V1gzLzlsYUpGWFl2bmpSdG5DcFVFQkFSUXZueDUvdmpqRDU1ODhrbFNVMVBwMXEwYmI3K2RLWlJzdFZwZGpuRml5SkFodlBubW13UUdCdEswYVZOZWZQRkZ1bmJ0bXV2WXpHWnpEalVoVUNYZEhvU01teHNQUCtyVmI4Q2NXVE1BZ2ZyMUd4QTJmVWFCanBObG1UR2pSOUhteGJiVXI5OEFVS1VocjEzN20rRkRCNnY3S0RKZTJmUUtLbFdxVEtWS0JkZEtQWDM2RDQ2TkdFcm9CNE00KytlZlhNeVNocGswWVJ3QmdZR0VUWi9KcXgxZWRqR0lBejhZd0lzdnZrU0hqcTh5WXRqUWZNOWhNQmdxWk11dDVjeXhvYUNBVmtEUVoyNmc2bi9oUWpoNDhDRE5taldqU1pNbU5HM2FsTmRlZTQzdzhIQ1dMbDJhNzFOSXI5ZGpOQm8xcmMwMWE5WlF2YnFycmMvTjIycmJ0aTNYcjEvbisrKy81OGNmZjJUNDhPSE1ueitmdzRjUGF5NjZFNlZLbFNJakk0T0VoQVI4ZlgwQnNObHN4TWJHVXJKa1NmZGQ3RVpPdzFhdlBuUG5MU1Q4U0RpZnIxeUIwV2hrekxnSnR6eHUyZExGZUhoNDBMbEw1a1BXWnJOUnJGZ3hWcXo4NHE2TXJYRGh3bVJrWkJBMmZTYUZDaFhpeEluakZIWmMxNFVMRithWlJvMDFrWE5WaHRLYlFvVUtrWlNZeUlTSlUzajg4Y2M1ZS9aUDdWN0lDNElnVk02U1c4dWFaOHRlUUZDY0JRUVJFS0tpb2lvQnB2L0NoYkJnd1FMcTE2L1AxcTFiR1R4NE1DMWF0T0RHalJzNUpQV3k1c3VTazVPNWVQRWkxYXRYcDN6NThwaE1KaTVjdUVDRkNoVzAxNkpGaTlpeVpVdXVIdHY1OCtmcDBxVUxxMWF0WXYvKy9adzZkWXJqamx4RFZ0U3VYUnV6MmN6ZXZabXE1L3YyN1VNVVJaNSsrbW4zWGV4R0RreWFPSjd3SStFMGIvNDh3NGFQNU5DaGd5N1NrYmxoMzc2OTdObTltK0VqUG5hUnFxeFFvUUpKU1VuOHNtZTNsbS83ZnBPclR1ajU4K2ZZdVBHYkFvM3R5Um8xc0ZxdG1Fd21KRW5pNElIOTFLeWxhcG5XcWxWYkcrZlIzMzRqS0tnY1JxT1JZc1dMVTlqWEY1UERzZGkzZDY5MlRENHdMVjY2UERBWGc2YjFzQUZaUERaSGpzM2IyN3ZDZitWQzhQZjNaK2ZPblp3OGVaS1NKVXV5YnQwNmxpMWJocCtmbjh0KzQ4ZVBwM0hqeHZqNitoSWFHa3JGaWhWcDNibzFvaWd5Y09CQXhvNGRTN0ZpeFdqWXNDSHIxNjlueG93WmJOKytQY2Y1enA0OVM1OCtmWmczYng0QkFRR3NXTEVDYjI5dnFsUlJCVzBtVFpwRTdkcTFhZFdxRlY1ZVh2VG8wWU8rZmZ2aTQrT0QwV2lrZCsvZWRPL2UvYjRwbnJ2eDcwTG56bDBKQzV2QzJ0V3JrR1daZ1lNK1FoVEZmQlhlNXM2ZVNVWkdCbjNlNjZWOXp0ejVpL0R4OFdIU2xHbk0vSFE2aXhZdXdOUFRrNEhaaEpTUEhUM0toZzNyYWQrK3d5M0hWclpzRU8zYmQrRGRYajFSVUhqMjJXQk5PL2o5UHYyWVBHa0M2NzcrQ3JQWnpKQmh3N1hJYVBpSWp4azNialEycTQzU3BVc3plT2p3VzU2clFvV0tqd0hYYy9mWUhEb2hHcmVrZ2lDS29vZkZZaG1nMStzbi8xdC8vTkRRVVA3ODgwOSsvUEZIWW1OajZkbXpKenQzN3NSZ01QRFVVMC94eGh0djBMTm5UNjVldllxdnJ5OCtQajVNblRxVmxTdFg4dmZmZjlPb1VTTVdMbHhJR1ljNnZjMW1ZOHlZTVh6MjJXZkV4TVJRdVhKbFB2bmtFenAwNk9CNEd0WGlqVGZlWU9qUW9VUkhSek5nd0FDMmI5OU9jbkl5ZGVyVVlkcTBhVFJxMUFoUTJ6MjZkZXRHV0ZpWWxrOExEUTFselpvMWlLSkl4NDRkbVQxN2RxNWhyaHVQRHZiczJlTldkOHNIY2JHeFlUVnJWTitPdW1iVStVb1RCQ0VEVlNsZUVrVlJYVE5xTUNpQ0lBaG11OTArVXhURlh1N3BjOE1OdDJGN0dKR1JucjY2WW9WeVgyUXpiS2xaREp0ZEVFUlpweE1WdmNHZzZCM0p1YUIvNnhlZU4yOGVmZnYyL1UvOGVKR1JrVG1xdHdXQkxNdGN2bktWdUxnNEpFa2lJLzNSWEh2cVlUYWowK253OXdzZ0tLZ00rUkdtS29yaW1MTlk3UFo3TjJjZVpqTjZ2WjRBL3dDQ2dzcmVjdi9yN243R1hDRkpVbkVjVGJsWlg0cWlwaEhWN2c0WldRYkpMaUVJZ3VBcHkvSlJvTEo3K3Y1OXNGaXNuRGh4QXAxZTc5WVZCVkpUVTBoSlRrS1M3TlNxV1F1ajBaQ3JVZnYxMTk4UWRicjdveXZxR0pNc1M5U3JXOWZ0c2QwQkZFVTVYNlpVOFEvSUpKMTBFazg2cWNMdGpuQlUwZXYxaXJPNlVOWTlkZjlPUkVSR29OUHIzYXdRRG5oNWVWTzBXQWwwT2owM0ltN2t1czlmbDY4ZzZuVDNiYzZjWXhKRkhWZXVYSFZmdEhjQVFSQktaL1BZc3YvZnBWbFhQSC8rZkZIQW5ibitseUkySnRiTkNwRUx2SDBLRVJNVG0rdTJ1TGk0QnpKbjNqNkZpSWwxa3gzY2FWVC95ZWd4M3VUWjh1SFViUUZRMEFjRUJCUjN6OW0vMVQyL2MxYUlSOEZ6UzB5SXkzWGJnNW96THk5dkV1UGo3dWpZcE1SRUx2OTFrZFI4dEhxOXZMd0pLdmM0aFFvWGZtRHpmaS9IV2JWS3RVSkFUQzdlbXZPT3dObjZvVGVaVEVYdi9nM25wamd1S0h4OENxSFRpUlFwVW9UaXhXL3ZHU01Ja0o3dUpxbk1DK2w1RUhnK3lPTEtuZjVlZjEyNlFGcGEvZ0s5cWFrcFhQN3JJalZxUFRoYXhYczV6c2VLRkNtVTNWdHpGQThFMTNCVVVmUTZuZTZ1R2pZM3hmSHRJelUxaFJzUmtkeUlpT0NwT25mM290eSs3U2RXTEY5R1ZOUk5TcFFvd2VkZnJ1SDgrWFAwNko3SlFESjArRWhlZUtHTis0ZDRpSEVyWTVIMVd2cXZqck5Rb1VLRnNoZ3daM091NEZnTW56V1NFZlNpS0Q1Mk43OVlWb3BqTndvZW9uaDVlUk4xTTRMSXlFaUtGU3QyVno3M3hvMGJUSms4a1RIakpsQ3ZYbjJTa2xUT3J3b1ZLcko5NTI0QTN1blI3WjU5citYTGx0THU1Zll1TkUzT2NjMmFNWjJUSjMvSGFEVFMvUG1XdlBkK0g0MVY0dHExYTh5Wk5ZT1RwMDVpTXBsbzBhSWx2WHEvbDROMTRtN2lWdWQ4cm5GRERBWURnaUFTRkJSRTl4NDlhZFNvc2Z2aXZZOHdtejBLdVJxMUhDL0gwa2tGVVJURmdMdDVjamZGOFQ4d2NONCszTHg1ODY1OTN0ay96eEFZR0VpalJvMHhHbzBFQmdZNlFsZ0Jod2FqeTFyQ3U0M1BWaXdqTGk1bkFuLzBxSkdVTEZXS2pkOXRadkdTNVJ3NmVJQk5tNzRGMUo2OG9ZTS9wRkxsS256NzNXYm16Sm5QbnQyNzJMamhtM3Myem9LZWMrNzhoWHkvWlN2ZGUvUWtiT3BrTm55ei9vRmNKNElnVUtkT0hWcTBhRUh6NXMwcFVlTDJuSWlEQi9ZVDByVVRyNy82Q2pNK0RkUFdkTnBzTnNLbVRTR2t5MXQwRCtuQ3ZuMlphNXJ6WThTOWQ1Rk1LcHUrKzVhaGcxWGFKWVBCbU4xakUzRVVEckpHakZhckZWRVFoTHU2U05HZHpQNW5ucHRka3Y3eDV4dy9mb3lYMjdaaDJ0VEpSRVpHOG5MYk5yemN0ZzByUDF0UjRNODRkUEFBbmQ5NmcrYk5ndW5SUFlRL1RwMXkyYjVuOXk1Q3VuYmloVmJQMDcxYkZ3NGRQS0J0NjlmM2ZWNXVxNGEySHd6b3o4dHQyOUQzL1hjMUl4SWMzSlN1SWQwd21Vd1VLVnFVdXZYcWNjNUJTaEFYRjRlZnZ6K2RPbmZHYURSU3FuUnBHalYrbGovL1BIUFA1djEyem1rMm0yblVxREhEaG85a3llS0YrZEphM3l1VUsxY09uVTdIdG0zYjJMdDNMelZyMXNSZ01PUnFzTFAvUHlNam5hbFRKakZ4MGxSV3IxMUhURXdNMjM3NkVZQ3RQMndoSXlPRGxWK3NadnFNV2N5ZSthbm01ZWZGaUZzUVBQSEVFOXBETmI4eFp2MDdKaWFHZDNwMDU4S0Y4OXJ2b05mckMrWGhxV2t2V1piUjYvV0lnTi9kblBRN3BUaDJRMFZLOGo4dnROU3FWWnR2TjIxaFFPaEFTcFlzeGJlYnR2RHRwaTJFZE90ZW9PTXZYcmpBeHlPSDgxNmZ2bXpadW8xWFgzdWRnUi8wSjhyaFRWNjVjcG54NDhZd1pNaHdOdi93RXkrOTFJNFJJNFpwYWx0ejVzN24yMDBxRThxTVdiUDVkdE1XNXM1ZkNJQW9pblRxM0FWZlgvV3krK3V2U3h6WXY1OEdEVlIyazhEQVFPYk1uWStIaDFtNzBJOGZPMGFOR2pYdjJaemZ5VG5yMVcrQTFXYlREUEw5UkdCZ0lEZHUzTkE4RkZtV2M1QThIRGtTem9oaFE3RFpiTVRGeGZGT2orN0V4Y1VSRVJHQnI2OGZKVXVXUktmVDBhcFZhdzRmUGdTb3JMZlBQdnVjNDNjU01CaU1uRHQzVnR1V0d5TnVBWE5qZVpKVkxsdTZXS01HUDNueWR3YjBWMWNSK2ZyNjhzV3FOWVIweStSRTFPbDB1WVdpdUlhaHFrY3JBdmM4Ymh3ME1KVFhPcllucE10YmRPMzhKbHMyZjYvbE5WN3IrQXJ0MjcxSTk1QXU5M1FNM1VPNmNQSGl4ZHM2WnR0UFAvSmF4MWQ0b1hVTFpzL0ttK0J2eDQ3dGpQNWs1SC9HdUc3ZXZJbmdKazFwMUtneEpwT0pWcTFmb0VyVnFteHpDSGtFQkFTeWZNWG5WS3RlSFZFVWVhbHRPMnhXSzMvL1hmRG0wejlPbmFKRjg2YUVkT2xFbGFwVmVTNjRTYTc3TFZ3d0Q3T25KeSswZWZHK2ZmK0NuRk1RQlB6OS9FbDVBTWw2bzlHSUpFa0VCQVRRdUhGalpGbkdaSEpsSGF0YnR4NytBUUdNR2YwSmd3WU9vUDBySGZEMzk2ZFlzZUxFeGNWeTZkSWw3SFk3NGVIaHBLU28zOEhKaUh2cTFFbUdEUDRRbzhsSVltS2l0czNKaUR0M3ppeU5FZmVmNHMyM09yTnIxOC9NbVQyVGNXTkcwN2RmZjZkM2xpT25LZ2lDZHo2NU5SY2pweGNFNGI0a3hENGFNb3g2OWVxVG1KaEFyNTV2VTdXYXluMldGNzN4dzRBV0xWdlJvbVVydnY1cUxaR1JFWStNMXhnWkdVbUZDaFZkM2l0VEpraWJBMjl2YjNaczM4YjQ4V05JU1U3Sk02eklEOVdmZUlKdE8zWVJFUkhCSngrUFlQbXlwZlI4eDVXSDRmT1ZuM0g0OENIbXpKbVBYcSsvTDkrOW9PZFVGSVc0K0RpOEgxRGF4Um1PN3QrL24xcTU4SmtKZ2tEdjN1L3h4dXNkS1ZPbXJHYWt6V1l6dzRhUFpQS2s4WTdmdFN5ZVpyTjIzUGZmYnlJOVBaMUprNmN4ZSthbkxwK1pGeU51WG1qVnFoWGUzdXI4T1BPQXAwK2Y1dlRwMDlvKzN0N2V2UHZ1KzN3UTJvODMzK3BFNWNwNUx5c1RSZEU3bnpCVU0ybzJtdzA5Y0Y4NXFRc1g5dVdKSjJ0dzhjSjV5cGN2bitkK2lZa0pUSjQ0Z2Fpb0tPeDJHNTA2ZDlYWU9NK2NPYzNNR2ROSlQwdWpTTkZpREIwMlFvdmhkKy82bWRXcnY4U1NrVUgxSjU3a2c0RWZhdm1IWFQvdlpPem9qMGxQejZCdnYvNmFsL0ROK25WcThscFJhTnJzZjNUcjN1T1czK1BJa1hBK25UNE5VUkFwV2Fva251Wk10dHo4eHRDOFdURDlCM3pBMGlXTFVCVDRmc3ZXaDg2d0ZTMWFsTWdJVjBOKy9mbzFhdGRXVzFIMi9yS0hWVjkrd1l5WnN5bFZ1alNnVmcxenU3bXlHenRMUmdaYnQvNUE2OVl2WVBMd29Iang0alJ2L3J4TG9ocGcvYnF2MmI3dEoyYk5tWGZmR2s1djU1eEhqb1JqTkJpb1ZQbitMN0cyV3EzWTdYYU9IajNxRE5GeWFHYWtwS1R3MFVjRDZkd2xoSE5uLzJUSzVJa01IVFlDUVJCNHV1RXpQTjN3R1VmdWJLNUdTMSs0Y0dITVpqTmp4MDFBRkVVc0ZndUZIZk9RRnlOdWZ2anhSelYzOTh3enozRDU4bVV0ZkhaSmUxeTh5T1JKRXhnN2JnSXJsaStsVE5rZzJ1VHRLWHRsTTJKWmpKcVFOV1JGQkR6djU0OFNIUlhGcVpPL1U2Vksva3prNTg2ZDQzL05uMmZaaXBYTW1idUFXVE5uWUxWYXNWcXRqUHA0QktHaEEvbjh5elU4ODB3amxpeGFvT1ZyMXE5Zng1dzU4MW41eFdvQWZ0aXlXZnRNSHg4ZlZuNnhtdEZqeGpGLy9seEFKZGJidkhrVEN4Y3RaY215ei9qdHQ5L1k5ZlBPZk1kbXNWaVlNRzRNbzBhUDVjdlZheWxUT25PcDdhM0dZTGZiaVlxS1l0MDMzN0wrbTQwUHpIalo3WGFOQmwyUlpleDJ1MmFFMnJ6NEVudjI3Q0k4L0RCMnU1MmZmOTdKSDZkTzBxSmxTMEJWVGhJRUVIVTZFaE1UdEJ5SklydXlGQmN2VVlKREJ3OWlzOW1Jam9wU3d5aVRpUzgrWDhuYXRhdXgyV3drSk1TemQrOHYxS2hSSXpNVS9uNFQzMjdjd016WmMrOGJBV2RCejJteFdEaDg2Q0NUSjAyZzk3dnZQeEN0aXVqb2FLMmFiVFFhOGZYMXpTR0ljdkhpQllLRG0vSldwODZNL0dRMFJxT0p1RGpYVlErSER4MWt4NDV0V2c5anJWcTFzZHZ0aUtKSVFrSThGeTllcEZMRlN0cTIzQmh4L3lsKysvVUlRNGVOb0VuVFpudzZjdzZuL3ppVmcrMDZ5NFBTbk0yb1pYMkd1cFQzOVlENWZ2d1kwOE9tWXZZd1l6UVo2ZE8zUDZVZHBJNTVvV2JOV2l4ZnRvUnQyMzVFcDlOanNXU1FuSnhNUW53ODN0NCtWSzJtNmhHODFMWWRUWnMxVTMrb3c0ZTQ5dmRWM3UzOVRwYW5pazltM3NIQjdsbTFXalV0RVI0ZWZvam5uMitKMmVHT3YvamlTNFNISDZacHMvL2xPYmFyVjYvdzJHTkZOT05jcFZvMTl2MnlwMEJqQU9nYTB1MnVYQlIzaXV3TnVsTW1UMlRLNUlrODM2SWxIMzh5bW9vVkt6RnF6RGdXeko5TFpFUUVaY3FXWldyWXB4UXRxdmJYdFg2aERhZE9uYVJIOTY3b2RIcmF2ZHllaWhVckVaZHR1ZERBZ1I4U05tMnEraVF1VTRhbHkxZGlOQnFaTWpXTXVYTm04ZFhhTlJnTUJvS2JOTldTeEpJa01XM3FaUFI2UFcrKzN0RTFUUHh5TmNXSzNmMFZnQVU5Wjc4Kzd5TUlLblBzb0E4SDM5VStOaDhmbndMdmUvbnlaWHg5ZlRWWngrUEhqK2RJNU5lc1dZdWFOV3RwK2FwQldaaHk0K1BqNk5XekI2VkxsMmJpcENrOFZxU0k5cnVlTzNkT3kzZjNHeENxZWE1NU1lSVdCQWNPSE1oejIydXZ2Nkg5UHlBZ2dJOEc1eXZzNHBGUEdPcXdjQ0tTSktFSDdzc2ROdWpEd1JwdGNFR3dkczBxN0RZN1U2Wk9SeEFFclgzQWFaNmRNQmdNK1BtcFQxaWIxVVp3azZhYTNGaCtpZCtzSVZMV1ZpNUJFUEo4WW1UTnIrVFZMRnFRTWVUSEUzWTMwYkpWYTFxMmFwM2ovWW9WSy9ITHZ2d0ZtaHMxYXB6bmpXc3ltUmo1OFNpWDk5N3AxVHZIZnZVYlBNM1g2emZrZUw5Q3hZck1uRDAzMTgvVzZYVHMyWHZndmhyNmdwenpWdk4xTjhhUW1wcFNvRllwNStxZU80V2Zuei9yY29rV3NodkFyQWdNREN5d1F0YmRSRUJBZ0ZaaHo4VldDZG50Z1NDQVRxZTJlenc0MXlGZmR6c0dieDl2QkVIZytQRmpKQ1Vsb1NnS3BjdVVJVGs1bWZQblZXWDNuMzdjU3RpMEtRRFVxMStmbjNmdTVQcjE2d0RzM0xtRGt5ZC96L2M4ZGV2V1ovdTJiYVNucDJPejJmaGh5MmJxTjhoZldLVnMyU0NpbzZPMW5FRkVsdHpCbll6aG44QnM5c1NOMjV1YkJ6bG5lWjI3U0pFaXBPV3pwdHJUczJBaGIwSDN1MWU0eCtNMDV1S3BDVW8ycjgwWml1b2UxQ1RrSjBqeDJtdXZNM2JNS0g3WXNvWEtWYXBRb1dKRkVoTVNDQXdNWk15NDhYd2FOZzJMeFVMZ1k0RU1HVHBDRFFtclZLVmYvd0VNSGZ3aE5ydU5ja0hsR0R4MFdMNWplS3B1WFZxMmFzMjd2ZFNDd2JQUE5hRnBVelcwM2ZiVGp5eGRzcGlVMUJSa1NXTGYzcjEwNlJyQ1MyM2JNWFQ0Q0VZTUc0S2Z2ejk2dlU0ckh0ekpHTzdYay81UlFtcEtjcDVldGZpQTVpdzFKUmxkSHBYVzRzV0xFeEVSUWZUTkNEeTlmWEtNclZ6NUNyZGNZTzdwNlVXNThnOVdsK2tlajFPWG04ZVdXOTVOVUc0VmQ5MG1qaDQ5U3BGaWJvM01PMFZVNUhYcTNNWkMrTXVYcnhBYkYrZGVtNXNOTnlOdkVCZ1lRTmxjY3JtWHIxd2hOdmIrejluTnlCc0VCQVFRVkRidi9ISlVWQlNSa1pIWTdYYVNrOTJzT05uUnBFbVQ5a0FhS29OdUVwbWlMaFkwN1FOQnZ1dk5RVzRQNHA4OTBXKzNYNnRzMlRKRVIwY2pudHFQQUFBZ0FFbEVRVlJ4TS9LR214cmNNWWNwS2NsSWRudXVSZzBncUd4Wm9xTHUzNXc1eHlSTFVyNUd6Um1TRm5Fazg5M0lGZG5EVHNHWll4TUVRVjExSUlxQ29DaUtoTHBFNGE0Z0lpS0N5TWliUEZiVXpWOTUrOTdhRFVxVUtIN2I3QjZLb3ZEWDVTdkV4Y1VpMldVeU1oNU5qamF6MlJOUnB5TXdJSkN5WlV2ZmNvSC9sU3RYaVk2SlFiSkw5MnpPekdaUGRIcjlMVDAxTndvRVdSQ0Vqa0JxRm84dFJSQ0VWTUFpQ0lKTkVBUzdLSXFLb0NpS0ZURGM3WEJVRUhWNGVYbmo2ZmJjYm9rMGg5Z0hLTGNWaHJyaHhpTUdteUFJcjJjeGJNbEFzaUFJYVVCR1ZzT21CKzY2WWF0VHB3NDNiOTdrWmxRVXlVbUpiZ2JkZk9EdDQ0TkJyNmRVcVpMdUVNUU5OL0tIdGFBN09nM2JYYThSRnkxYTlJNDBNdDF3d3cwM0NtallsR3ovYWhDQmRQZDh1ZUdHRy84Q1pCVFlZN3R5NVlwYkRjUU5OOXg0NktFb1Nub3UzcG1pT0JSZG5KMXJpcUlvK3JKbHk2YTZwOHdOTjl4NDJDSExjbXFXMEZNemNObmJQUVJCUUZRVXhVMTU2NFliYnZ3YlBMYnN6SlpLdHY5cmYrdFJlMEhjY01PTkIzL2p1dlY0ODRIZGJrL0pZc0NVTEtHb2tqVVVsV1VadmFJb0NmZFNxY2dOTjl3b21GRno2L0htRDR2RmtweWJ4K1pxdnpKRDBiaEhiWUpLbFNwRnRXclZjaFdqOFBiMjVyUFBQcnVYVHgxQ1EwTXBVcVFJaFFzWHBuZnYzcG9JaWh1UExyTHE4YnFYSStaNTd5Umw4OWdVY21uMUFOV3d4VDZLazNUbXpCa21UWnAwMzg4N2JOZ3dObTNheExwMTY5aTBhUk03ZCs2a1g3OSs3cXYyRVlkYmovZldzRnF0U1ZrOHRWenlhNExLclNpQUtFbFN6S000U2VYS2xXUGl4SW1jT1hQbXZwMHpOVFdWZWZQbUVSWVdSbkJ3TU1IQndTeGV2SmlWSzFjU0V4UGp2bklmWWR5cEh1K1owMzh3TUxUL2ZYQUVUaE0yYlFyYkhVcGxUbXpjK0EwaFhkNGlwR3NubGk5YnFyMmZuOER5aVJQSDZmbDJON3FGZEdiMEp5TUxyTTJhbnA2V2pHdFRicmJxcU5OZkE5Rm1zOTE4RkMrazNyMTdVNzE2ZGQ1NTU1MThHWFBYcjEvUGswOCtpZGxzcG5yMTZpeGR1dFJsKzg4Ly8weWRPblV3bTgzVXExZVBzTEF3RjNIWXdNQkFQdnhRWmRNOWR1d1k2ZW5wQkFjSGE5dWZmZlpaQUE0ZVBPaSt1eDloM0trZWIrVXFWUmsxWnV3OUhkdjhlWE5adG5RSmx5NWVkREZDVjY5ZVljUDY5U3hZdEpSbHkxZHk0c1F4amh3SmR4eVR1OEN5M1c1bjBvUnhqUHhrRkordC9KSlNwY3RvbWhtM1FsSmlVbDZoYUk0VkNQcU1qSXlvVzZuTi9CZWgwK2xZc21RSkRSbzBZTkdpUmJ6NzdyczU5dG03ZHkrZE9uVmk5dXpadEdyVmlxTkhqOUs3ZDI5ME9oM2R1M2ZuNHNXTHRHblRocjU5KzdKbXpScCsrZVVYK3Zmdjd5THdNV2pRSUdyWHJnM0E5ZXZYTVJxTkJBUUVhTnNOQmdNQkFRRmN1M2JOZlhlN2tRT3hzYkZNbkRDT21PZ29CRkhrdmZmNjBPRHBoaTRrcmI2K2ZxeFkrVVZtdW1QSVI5eTRvVEk0SnlRazRPbmx4WnExNndCVkZXck9yQmtrSmlYaTcrZlA0S0hETkMwTGdIVmZmOFdHRGV1MS9RRjZ2dE1MbzlHb01WVTc4ZnVKRXp4VnR5NmVucDdZN1hiOGZQMDRjZnc0OWVyVjU4U0o0M3p3d1NEQVZXQTU2dVpOUE14bWdvTEtBZUR2NzgvUE8zY1VhQzV1UnQxTUxvQlJVd0QwRVJFUkVYbkp6Ly9YOGRSVFR4RWFHc3FRSVVObzI3YXRwbjNveElRSkUralJvd2U5ZTZ0OC9tWExsdVhTcFV0TW5UcVY3dDI3czNEaFFxcFVxY0swYWRQVXAyZmx5cHc4ZVpMVnExZTc1TlNjU0V0THc4UERJOGM0VENaVER2azBOOXdBK0dydGFtclVxRUZJdDdlNWRPa1M4K2ZOb2NIVERTbFZxbFNlbXJ5VHBxalhZMkppQXIzZjZhSHBiMWl0VmlhT0g4djRpWk1wWHJ3NFAvMjRsUVh6NXpGNlRPYnhOV3ZWeXNFOG5KZndrRk5nT1RvNm1ra1R4aUhKRWo2T1BHRldnZVVkTzdacEFzdEpTVW1ZVENhc1ZpdHo1OHppeG8wYk9SUzI4ZzY3VHp2YlBlUzhQRFZuTUNyV3JGa3ppdHRZZy9WZnc5aXhZd2tJQ0tCdjM3NDV0cDA2ZFlwbHk1Ymg3ZTJ0dlVhT0hNbUZDeGVRSkluang0OVR2NzZyUUUyalJvM3lQSmZaYk02MUVtdXhXQjZJakpzYkR6L3ExVy9BemgzYldmblpDaXdaR1FVV1ZKRmxtVEdqUjlIbXhiYlVyOThBVUtVaHIxMzdtK0ZEQjlNOXBBdXJWMytwcWJVNVVhbFNaVjdwMExIQTR6dDkrZzlHamhqS083M2ZwV2xUVjJXM1NSUEdjZm55WDRSTm4rbWlWSitZbU1qQUR3WlFyVnAxK3ZVZlVOQlRaVXdZUHpZdG4xQlVNM1NDb0Rib0Fsd0ZLajJLRjQ2bnB5Y0xGeTZrWmN1V2JOem9xdHhqdDlzWk5HZ1FiNy85ZG83alJGRkVyOWZuRUFUT0wxOVhxbFFwTWpJeVNFaEl3TmZYRjFCVnEyTmpZeWxaMGsybjdrWXVocTFlZmViT1cwajRrWEErWDdrQ285SEltSEVUYm5uY3NxV0w4ZkR3b0hPWHJ0cDdOcHVOWXNXS3VZU3Qvd1NGQ3hjbUl5T0RzT2t6S1ZTb0VDZE9IS2V3NDdyT1MyQzVVS0ZDSkNVbU1tSGlGQjUvL0hIT252MVR1eGZ5ZzZJb2YyY3pZSElXenkzbi9ha2VvMXg1bEMrZUZpMWEwTGx6Wi9yMjdhdUpDQU5VcTFhTmt5ZFBVcUZDQmUxMTRNQUJaczJhaFNBSVBQbmtreHc1Y3NUbHM3TC9uUlcxYTlmR2JEYXpkMittNnZtK2Zmc1FSWkdubjM3YWZSZTdrUU9USm80bi9FZzR6WnMvejdEaEl6bDA2R0NPaDJsMjdOdTNsejI3ZHpOOHhNY3V6YXNWS2xRZ0tTbUpYL2JzMXZKdDMyLzZ6dVhZOCtmUHNYSGpOd1VhMjVNMWFtQzFXakdaVEVpU3hNRUQrNmxaUzlVeXpVdGd1Vmp4NGhUMjljWGtDRy8zN2QyckhaTWZKRW02bnMybzVlR3RxZjBlZWtDUlpmbHlYb28randwbXpKaEIxYXBWWFhKZFE0WU1vVldyVm93ZVBacE9uVHB4K3ZScCt2ZnZ6OENCQXdIbzI3Y3ZzMmZQWnVqUW9iejk5dHNjT25TSUJRc1d1SVNWa3laTm9uYnQyclJxMVFvdkx5OTY5T2hCMzc1OThmSHh3V2cwMHJ0M2I3cDM3MzdmRk0vZCtIZWhjK2V1aElWTlllM3FWY2l5ek1CQkh5R0tZcjRLYjNObnp5UWpJNE0rNy9YU1BtZnUvRVg0K1Bnd2FjbzBabjQ2blVVTEYrRHA2Y25BYkRxaXg0NGVaY09HOWJSdjMrR1dZeXRiTm9qMjdUdndicStlS0NnOCsyeXdwaDJjbDhDeVhxOW4rSWlQR1RkdU5EYXJqZEtsU3pONDZLM0ZsMjAyVzBRdUhwdWlxdSs1ZW0yQ2dDSUlndUNka1pIUnoyZzBUbnhVTHBaU3BVb1JHaHFxdFdFNDhjVVhYOUMxYTFkV3JGaEJ0MjdkQUZpMWFoVVRKMDdrd29VTEZDdFdqSjQ5ZXpKeTVFanRTZmpUVHo4eGNPQkFMbHk0UU8zYXRXblFvQUhyMTYvWGRFVURBd1BwMXEwYllXRmhXajR0TkRTVU5XdldJSW9pSFR0MlpQYnMyYmtXRmR4NGRMQm56eDRlcjFqRlBSRjVJQ1ltNXRQYU5aLzRCVmRhOEJRbkxUZ3FiYmdraXFLczArbFZ3NWFVbE5URzI5dDdyWHY2Ymc4blQ1NGtMUzJOQmcwYWFPK05IajJhSDM3NGdmRHc4UHMyRGxtV3VYemxLbkZ4Y1VpU1JFYjZvN2xFeThOc1JxZlQ0ZThYUUZCUUdVUlJ6QzluNDVpeldPejJlemRuSG1ZemVyMmVBUDhBZ29MS3VnM2JIZUxzbjM4T2EvNi9KcWZKS2VTU0RqaWs5MFJKRkVWWnI5Y3Bla0NKajQrLytDajBza21TZE52eWR2bmRHQmN1WEtCTGx5NnNXcldLV3JWcWNmTGtTZWJObThmdzRjUEpqUGNManNqSXlOdW1VN2RZckp3NGNRS2RYbzlQb2NKdStiM1VGT0lUNG9uNUxacGFOV3RoTkJweS9lMSsvZlUzUkowT2I1OTdQMmVwcVNuRXhzVVJIUk5OdmJwMTg5MzN1cnVmTVZjY09uZ2dsc3lDZ1ZZNGNEQjdPRUpSQlFVRldaWVJCRUh3Qkl6L1orKzc0NXVvLy8rZmQ1ZGNkdmVtcFlXMkRGR2dTQUUvRkJGL2JCemdGMFVGUkN4WWtDRWdJaFFVRkdRclFnc2lVNUNsSUdKWkFySmt5aXBZaG15UTBxYnBidE9SY1hlL1AyNDBTZE5Tb0dYbTlYaEVhZFpkM25mM3ZOZDhQbG1XMVFOUXVKYnc3bXpxMUtsWXZIZ3gwdExTRUJ3Y2pMaTRPSXdlUGJwU2I2RTY3V0dKL3o3cXhvc1RleUVzdEx5WGRPMzZEZVRtNWo0VXdXUWZiMitFT3BIaGMzbHNsZCsvUTJvRjlBRXZZMkIwQ0VWTEFKZ0ZvV1NHSkVsT0pwTnhKTXFTY1JkYzYzZjNGaDhmait2WHI4TmtNdUhxMWFzWU0yYk1Bd00xQU1qT3luWU5UenN4cmM0TldWbk8rUjF5Y25JZXlwcHBkVzdJeW5iTkJOOURxdVVpN0ZzOGJGczk3SXNISW9PdTZKMnpMSHZldFlTUGwzSGN2UTlQUCttbTBXakJza3lGS1ltSHNXWWFqUmFNbFhFZG5MczBpOFZ5RmVYNzF4ejcySGgyRHdIY1pBUkJjQnpIY1ZhcjlYeEZveE11ZXpTTklJQ1NFaGVYVzBWV1VnSFAzY01zcnR6cjhTckl6OGVONjFkUlZHU3NGRGpENm9URHpkMzlvZjIrbXRoUG83SHdwaE5BSytleEVVU1o3b0ZNZktHa3BPU2NDOWdxODQ1NDJtYUR3UUFydzhCWVdEMjB6VnF0RGpLNURINit2Z2dNREt6Mi9kNjFjd2VXTDFzS2d5RURRVUZCV0xscUxTNWZ2b1RZL3Yyazk0eU5uNEN1WGJ1NUR2SWpiTmV2WFVGeGNlWDBQa1ZGUnR5NGZoV05telo3b3Ziejl1MjAydzZBeGdCZ2hhSkJ1WWNJYkFEQVhicDA2VngwZExUckRLb0ExSktUa3dHQ2hFYXI0Mm1iQTZydis0dUtqRWpYWnlBOVBSM05tbFhmU1ptV2xvWVowNmZpeThsZkl6cTZCUW9LZUdxY2lJaEk3TnE5RHdBd01QYjlHbHUzWlV1WDRQWHVQZXpZVE1UOW1qdm5HNlNrL0FPYXB0RytReWNNL21pSU5IeWRtcHFLaExsemtISTJCUXFGQWgwN2RzS0hjWU5SazAza2Q5cm1pekV2UUM2WGd5QkloSVdGb1gvc0FMUnVIZlBBenNFN2dZWHR1ZlF3clNiMmMvKyt2UmtDYURFaXFObDdiYnlYQmx1VktoSGxXclpzbVFYZ3Nndkd5cHRlcndjSUVuNytnVFdTbTlGb3RQRHpEd1JBSUQwOXZkcSs5K0svRitEajQ0UFdyV05BMDdURUUwY1FCQlFLQlJRS0JXcFM3K0xINVV1UmsxTStnVDlwNGdUVUNnN0diNzl2d2FMRnkzRDB5R0VrSlcwQ3dQZmtqUjB6R3ZYcU44Q20zN2NnSVdFQjl1L2JpOTgyL2xwaisxblZiU1l1V0lqTlc3ZWpmK3dBeko0NUhSdC8zZUM2T0dyZXFiZ3ljOGEwa3NyQ1VJSVFRbEhZaDZJUTNzQ3lMSHVLSk1sSTEzTGFtOEdRQ1kxV1YrUGIwZWpjWURBWTdqc2tQWDA2R1pPK21BQ3oyWXppNG1KMGY0MFBNM3U4MFJQOTN1OWZwZTg0ZXVRd0VoUG1RYTlQUjJob0dFWjk4aWthUGZ1czdWMFV5NVl0UWFiQkFQK0FBTVRGRFVhckYvNEhBQmcyOUNQY0VoaFRSMzQ4SERJWmhlRGdFQ1F1V0FpV1pkRzJiVHQwZStVVktCUUsrUG43bzNsME5DNWR2QWlBcjFoNmVubWhkNTgrb0drYXdTRWhhQjNUQnYvK1czTkYrN3ZacGtxbFF1dldNWkRIVDhERUx5YWdVK2N1angwekM4TXdPSHIwQ0xZay9ZNGhRNGNqT0NRRUFEOGtQL2U3YjVIeXp4bVFKSVhZZ1I4aUpvWW5RczNNek1TMHFWT1FuWjBGbmM0Tll6NGJpOXExUXl2ZERrRVFpSXFLZ28rUEQxaVd4Zm56NTVHV2xsYmwvVnp4NDNMOHNYM2JPV2RoS0FDVzR6aTJMTDlHY0NBSXZrRzlvRUFxSGdBQVo3RllraFVLUlM4WGxObWJsYkUra0NxYVJxT0ZzU0R2dnIrbmFkTW9iRXJhaWgxL2JNZktGVDlpOWRxZjcrcnpWNjljd2VjVDRqSHBxeWxvM2p3YWUvZnN4cWlSdy9IVHFyWHc4L2ZIelpzM01HWHlsNWc3Yno0YU5HeUlUYjl0eFBqeDQ3QjV5M2FvMVdva0pDNlF3cmM1YytjaE1yS01PSVlrU2ZUdTA3Y3NKM1A5R2c0Zk9vU1BodkMwVVQ0K1B0TG5SVy9xZEhJeVh1L2VvOGJXL1Y2MkdkMmlKY3dXQ3k1ZHZJaW9aczBleWZPV1pWbXA5Y2oyM3g4UEg0cGF0V3Jod29YellHd3F4OXUzYlVWcGFTbFcvTFFHT1RrNUdQUmhMQm8zYmdJM056ZUpFZmVWVjEvRGlSUEhNV1BhVk16Ly9vZEt0MStuVGgxUUZJV2RPM2RDb1ZEZzVaZGZSbVptSml3V2k5Tjl0UDA3SmVVZjdOKzNGN05tZjN2bGhWYlJqbUdvYlk0TklvQVJBamhydFZxKzNVTk13aFVVRkp4eXdWaDVxNjVDUVpXMlpUUSs5Tis3WlVzUzJyN1VEcTFieDBDaFVLQnpsNjVvMExBaGRncDg5OTdlUGxpMmZDV2VhZFFJSkVuaTFkZGVoOFZzeHExYi8xVjVHK2ZPbmtYSDl1M1FyMjl2TkdqWUVDKzJmY25wK3haK1B4OHF0UnBkdTczeXdINS9WYlpKRUFTOFBMMWdMREkra3VmczhlUEhNSDdjWjdCWUxNakp5Y0hBMlA3SXllRUY2YjZkTXhmajRpZVV1MW1mT1hNYWJkcThLTnlBQ01qbE5DNWR1aWk5OXVLTFBLVzlMU1B1blc0WW9vZkdjZnhFZ0tlbnA5MTdsaTVaSkZHRHA2VDhnNCtIOHplNEs1Y3ZvV2xVRkc3eHJyK3R0OFk0Q1VmQmNad0VjSEk1YmRlZ3k3MzExbHVud0hmMnVxd1NPM1BtTkRwMWVCbDVlYm1TaDlPdjc3dFBWRTR4TU5DK0s3OTI3VERvOVh6K1Q2dlY0dVRKRTRqN01CYTkzK21GOTkvckk5MXRxMnFObm4wV08vL2NpNS9YYjBSNmVycWRFSWhvSzFmOGlMLy9Qb3FwVTZkWDJ5amNuYXlxMitRNERqbTVPZEErb2oyRXpadEh3OHZiRzE5TytnS2ZqUG9ZUGQ3NFA0bEI1azZNdUdmUHB1Q3pNYU5CSzJqazUrZExyNG1NdUlrSmN5VkczTXFNcG1rd0RBTnZiMi9FeE1TQVpWazd3a2tBZU9mZFB0aTdkdzhTNW4ySHlWOU93dEJodkRCTjNmQUluRHh4M0RoMHlFY1pEaUdvSGJBSllGWk8xSVVVa3NjY0FIYi8vdjBzeDNGSFhkQjFaeXNwS2NHYTFhdWZ5Ti9tNys4UHZVTVI0L2J0VklrYi84QmYrN0Y2MVUvNC9QTkpXTDMyNXdwRFhZSWd5b0dkcWJRVW0zN2JDRk1wVDlvY0dCaUk5dTA3NE15WjAzYnYyN0QrRit6YXVRTnp2a3Q0WUgxWmQ3UE40OGVQZ1piTFVhOSsvWWR5ZkRwMjdDZzlIRm1jeGJXUGl4dU1VeWRQUUVFcnF1enhidDZjaE9YTGxtTGE5RmtJZGNpaFZjU0llNmR3dEdIRGhqaDA2SkJVbGJjMXJWYUxRWU0rd3ZwZmZrYTdsMTlHL2ZyOFdGbVRKazNSdmtPbmt3WkRSbVdneHBiTmlZckJLSy96UU1LZU41eTFXcTB1WUt2aUFkdTdaN2ZrM3R2YXZyMTc4T0hBRDlDdjc3dVlPV09hbEZOSVMwdkRvQThIb1BjN3ZUQnI1blFwcWY5UThvWldxMFNxeWJFc3JGYXJCRUxkWG5rVisvZnZ4YkZqZjhOcXRXTFBudDA0ZHpZRkhUdDFBc0FMakJBRVFGSVU4dlB6cEZDQ1krM0pUQU9EZ25EMHlCRllMQlprR2d6OFhWeWh3RThyVjJEZHVqV3dXQ3pJeTh2RmdRTi9vWEhqeG1XaDhPWWtiUHB0STc2YmwvakFlT3FxdWsyVHlZUy9qeDdCOUdsZkkyN1FSdytsY0pDUmtZR2RPM2RLRDJkTU1rYWpFWjkrT2dwOSt2WkRRRUFBWmt5ZldpbTdzeGhpZW5oNFlOYnNiK0hsNVFXVHlRUjNBZUJGUnR4aHcwZEFMcGRMakxpVm1kbHNoc2xrd3NHREIyRXltVUJSVkRsdGo2dFhyMkw2dEsveDFlU3ZjZlRJWVd6ZHVrVjY3ZFZYWHp2ckpBeGxiSE5zb21OR0VJU1VxM056ZDRkTUtJOXlvbHRYV0ZoNHpFVjZlR2RUcXpYbzJLa0xWcTlhaVM1ZHlnRHErdlZyMkxCaFBSSVNGa0NoVkdMbWpHbll0blVMWHUvZUEzUG5mSVAySFRxaTU1dHY0ZGpmUjNIbzRJR0hzdStPRGJvenBrL0ZqT2xUMGFGakozeit4U1JFUnRiRHhDOG40L3NGaWRDbnA2TjJhQ2htenY1Vzh0aTZkTzJHczJkVEVOdi9QVkNVREs5Mzc0SEl5SHJJeWJVSCtWR2pSbVAyckpsWXZtd0phdGV1alNYTFZvQ21hY3lZT1J1SkNYUHg4N3Exa012bGFQdFNPL1I3bjZkZlp4Z0dzMmJ5WWVBN3ZleTU5MWV1V29PQWdPcHZZcTdxTm9jTitRZ0V3Uk1zZmpKNnpBUHRZN3RidTNyMUN0cTJiWWQzZS9lQjFXckYzTy9tSUNjbnAxeFBvYTAxYlJxRmMrZk9naVJKNU9YbDR1clZxNmduRkg0cVlzU3R6REl6TSszQ1h3OFBqM0xDTFNkUEhNZlljZVB4ZlBQbWVLNXhFeXhidWhoZHUzWURRUkM0ZHYzYXRZcEFEUTVUQnlSSlFTYWpZRFlERkVtVlRSNklIdHRISDMxMGROMjZkZmtBM0Yzd1ZibTk4WDg5MGE5dmI0azFGQUQrL3Zzb1VtLzloMEZ4QTZXN2xsWm9GVWxKK1FjVEJVV2c4SWlhNzZycDFMa0xPblh1VXU3NXlNaDYrT3RnNVRxbXJWdkhWSGpoS2hRS1RQaDhvdDF6QXorTUsvZStGaTFiNFpjTkc4czlIeEVaaWUvbUpUcjlib3Fpc1AvQTRRZDZIS3V5elR1dDEvMmFUbGU5N1VSTm1qUkZreVk4NWJaTUpzTW5Ea3k1enF4TDEyNjRkT2tTK3ZmanE5YkRQaDRoaGVRVk1lSldaamR1M0lDSGh3ZmF0MjhQQURoOStuUzVnc05idmQ2Vy91M3Q3WTFQeDR5VlVuNXhBMk5UbllJYVFiRGdPSllUakNSSmppUUpqaUJJYUxWYUxqYzNoL2ZZYkhPaXYvenlpM1hObWpVSFNKSjh4UVZkRlJ0QkVGQ3BWSGlqWjArc1dsVW1qbUV4VzlEMnBYYVM1Smxqd3JrbUcySmQ5dmdhUlZFb0tqSSswT0Y4eDl4b1pRRG80K05UWllVczIvTTlPVG41bnZiTllySDhyZGZyYmNOUXF3aHVCQTl1bkRSbFFKSWdDQklrU1lCV0tPRHU3c0VYRHh4bXJsaUx4WExRZGFyZEdkZ0FvRWYzTjNBNzlaYjBmSFNMRnRpemU3ZEVEYjU3OTU5SVNmbEhjdWUzYjl2S2g0TkNHZjErVGFWU3V3N0dYYTdOdzF5emlyYnQ1K2VIWW1OaHBhbVBxcVpJSG5hS3BqcmVsNXViKzA4bFlhaERLQ3FNVXBFa1NJSUVTWkpTVlJSQ0lvNEZ3R1ZrWkxpQXJZcW1VQ3JScDI5WnZxcEJnNFlZTnZ4ampCMHpHbS8zNm9rL2QrNUFjSEF3QUdENGlGSFl1ZU1QOUg2bkY3WnQyd3F5R21ZZnhUdTl5K3l0eUZoWTRXd3ArWkRXck1oWUNLcUNGcExBd0VCd0hJdk1qSFNuKzFhbmJzUWR3VUN0MXFCTzNZaUh1dTdWdForblRwNjQ2Z1RVeEVlWm1BdEI4SVVza2lnRE5aSUVvVktwQ0t2VlNyQXNTM0ljUjNFY0p3ZWdZRmwySDRCblhaY0ljUExVS2ZnSDNML3U1NFVMNTFHclZqRGMzTnl3Wjg5dWJOKzJGYk5tZjJ2M25nejliVHgvRjUzc04yN2NSSGFPaTBIWDBUTDBhZkR4OFVabzdmSnN0UStMZFpobjlmVkdtQk1HWGRFTUJnUDBlajJzVmlzS0gyQmorS05rSE1lZGI5ZXUzU1R3SWkyMjRpMUZBSW9KZ2hBMERnaUdJQWlXSkVtT29palFOTTNSTkEyRlFnRVpINTlLZVI4cEhMVmFyWHRrTXBrTDJBRElxaW4vVVZwU2lqR2pSL0hLNzFvdFBoczdydHdkWFM2WDM5VjNob2JXUm1hbUFSbjZOR2gxYmk3TkEyTWhqTVpDTUZhclUxQURnTERRVUJnTUQyN054SDFpR2FaU1VCTkRVajgvdjZmNkdCWVdGdjROSjdrMUFJd1lWWXF0SGhSRlFTNlhnNlpwS0pWS0tKVktxRlFxRUZxdGxyQllMQVRETUFUTHNoVEhjUlFBT2lzcjYyVXZMNitOTGxnRDB0UFRrYTdQRUJnNGFzNE1HZWtJRFBDLzZ5RjRqdU53L2NaTjVPUmtnN0d5S0MxOU9za25WU28xU0lxQ2o3Y1BRa05EN2xpb3VYbnpQMlJtWllHeE1qVzJaaXFWR3BSTWRrZFB6V1ZsZHVMRWlVK2pvNk92QWloR21jYUJrU0NJSXNHTE13djZCZ3hGVVp4Y0x1Y1VDZ1dVU2lXblZDcWhWcXRCdUxtNUVXYXpXUVEyMjNCVXliSnNNb0JhcnFVR1RwMUtCa0VRMEdoMVVGZnpIYjY0eUFoallRRUFybHI1MkZ6bXNzY3dERTBqU1hLa1RSaHFDMndsQUVvSmdyRFJFS1U0bXFZbFlGT3BWRkNyMVh3b1NwSWt4ekNNYlNqS0FXQVlodGxCVWRRSHJ1VUdtaldMUW5wNk9neUdUQlFXNUZYYnNMcE9wNE5NSmtOUVVDQUNBZ0pjQysyeXA5cEtTa3IrZ24wMTFDNFVkY0Fvb1llTnh6Q1NKRUZSRkNpS0tzdXhpVzBmd2xBcEM0QXRMQ3o4MDhQRHd3VnNnZ1VHQnRZSWZiZkxYT1l5M3E1Y3VYTEdBZFNzQUt3RVFkaTFlaEFPZld3aW9Jbi9Kc1h5cURoblpkUFR4bnA1ZWYwSjRMWnJ1VjNtTXBjOWlEQzBTWk1tMXdYd3NqbzhHRnRRQXdCYjdMSUZONHFpSUdOWmx1TTRyb3h0MHNaakE4QmV1M1p0TzBWUkExekw3aktYdWF5R3c5QjlqcDZhQTZpSnpMbWNHRjBLUEc4Y3d6QmdHQVpXcXhVV2l3VXloVUloa3JSSjAvOEMyTEVBR0hkMzkrM2UzdDR1WUhPWnkxeFdvM2I4K1BIa1NzSlFpZEZEOU5Ca01obmtjam1Fd2dIRXdvRldxd1ZwRzV2YWNMTko0YWl2cis5QnVGVGlYZVl5bDlWc0dIcXhSWXNXL3ptQW1nVVZNSG80NXRha0VGUW00eDgyRlFXQ0pFbU9aVmxDaUdGRnNRVEdiRFp2cG1tNm9XdjVYZWF5R3IyNG9kZnJrWkZoQU1Nd01CcWZuc21Ed3NMQ2ZiQnZ5cFVlSE1lSmpia2l3U1JZbHVVc0ZndHNkQS9BY1p3VWpzcHNQVGJCYStPSU1vVVhGZ0NUbHBhMkxTd3NiSXpyMUhPWnkyb08xSktUazhHQmtLWWgvSitpMzc5enh4OW5uSGhyVnZEVEJuYkVraVJKY3BSTUJscE9RNkdnb1ZBcW9WS3FvRktyb0ZGcm9OUHB5a0pSVzNCekRFZnIxcTE3bm1YWm5VL2FZaVltSmtLcFZEN1FiVnF0Vm93WU1RSitmbjV3ZDNkSFhGd2Npb3VMWFZmMlUyNTZ2UjRjQ1BnSEJEMTFZM0ZXcTNWdjdBZnZaOXNBbThYQmF5c2Zob29ENzdaaEtDV0RUQzZIWEM0SEtaUEpSRkRqYkR3MnpvYnRnd1hBRkJjWEo3bE92L3UzY2VQR0lTa3BDZXZYcjBkU1VoSjI3OTZOWWNPR3VSYm1LVGVESVJOYW5kdFQrZHZUMDlNT09RbEJMYWk0ZjAxb3hpVTVpaFNBVGNibjErUXlHZVEwWFJhS09oWVJDSUt3YS8xSVNFallQRzdjdU04QWhMaE93M3V6b3FJaXpKOC9INnRXclVMYnRyeVUyYUpGaTlDeFkwZk1tREZEVW1wMzJkTm5ETVBjazZkMjRmdzVMRjcwQTc3OWJsNk43dCtGQytleGRjdG1OR25TRkIwNmRwS2UvKzIzWDdGcDQ2OEFRYUJ0MjNiNElKWnZvS2hNWVBuTW1kTkltUHNkckl3VllhRmhxZGV1WDcvZzRLMUpZYWlJUDQ0TnVTUkZnaVFkdkRXaFNrclRkSm5IWmh1S2l1R29qZGZHakI4L3ZzUmlzZno2dEoxd2E5ZXVSWk1tVGFCU3FWQzNibDNNbTJkL0F1M1pzd2ZObWpXRFNxVkNkSFEwWnMrZWJRZFFQWHYyUlBQbXpRRUF5Y25KS0NrcGtVQU5BTnEwNFpXMmp4dzU0cnE2bjJJckxDeTRwOC9WYjlBUUU3Lzhxa2IzYmNIOFJDeGRzaGpYcmw1RlVWR1I5UHgvLzkzRXhnMGI4UDBQUzdCMDJRcWNPWk9NNDhlUENaL2hCWlpYckZ5TjkvdC9nQm5UcGtxcG1HbGZUOGFFTHliaXh4V3I0T1BydDJQdm50MFdaOTRhUU5oWFJFVndJMGxRdHVOVEFxako1SExJUmRvaXNUd3F2SW1qS0lwZ0dJWWpTUklNdzBoNU5nRFdXN2R1YmFwYnQrNklwK1ZrKyttbm54QWJHNHR2dnZrR25UdDN4bDkvL1lYaHc0ZERyVlpqd0lBQnVIcjFLcnAxNjRhaFE0ZGk3ZHExMHV1MnlrVTllL1pFYmk2dlAzcjc5bTNRTkcwbnFDR1h5K0h0N1kzVTFGVFgxZTJ5Y3BhZG5ZMnBYMDlHVnFZQkJFbGk4T0FoYU5ucUJhU21wbUxVaU9Hd1dNenc4UERFOGhWbDlQVGpQdnNVYVduOHdGQmVYaDdVR2czV3Jsc1BnRmVGU3BnN0Iva0YrZkR5OU1LWXNlTWtrUjRBV1AvTHo5aTRjWVAwZmdBWU1QQkQwRFNOMmJObTJPM2JQMmZPNFBubXphRldxMkcxV3VIcDRZa3pwMDhqT3JvRnpwdzVqWkVqUHdGZ0w3QnN5TWlBVXFWQ1dGZ2QwYk03VllHM1ppVUlNYjlHY0FEQkVRQkhrQ1JIa1NSSWt1S2tTRk1NUXdWdlRhRlFsZ0diVGE3Tk5oeTFteDJOaUlpNFlMVmFONUlrK2NiVGNGSjk4ODAzK09DREQ2UWNXR1JrSkc3Y3VJSEpreWRqd0lBQldMaHdJUm8wYUlCWnMyYnhkOC82OVpHU2tvSTFhOVpJMy9IMjIyVmlGY1hGeFU2TEZRcUZvcHdzbWN0Y0JnQS9yMXVEeG8wYm85LzdIK0RhdFd0WU1EOEJMVnU5Z09EZ1lQeXlZU011WDc2RXFWTW0yMzFtMmd6K2ZNelB6MFBjd0ZoSmY4TnNObVBxbEs4d1plcDBCQVlHWXNjZjIvSDlndm1ZOVBqTzdyUUFBQ0FBU1VSQlZHWFo1NXMwYlZxT2VmaE9Bc3VabVptWTl2VmtNQ3dEblpBbnRCVlkvdlBQblpMQWNrRkJBUlFLQmN4bU0rWis5KzJXWlVzWFp6bDRhcmJnSm9TaDRQaUhXRFN3U1ovSnlydzFXbWpXVmFtVUlPVnlPUnk4TmpnT3hndTlJZ3dBSmk4djc2a0pSOCtmUDQ4WFhuakI3cm1ZbUJqODk5OS9NQnFOT0gzNmREbXgydGF0VzFmNGZTcVZxcHhLRDhCclZUNE1mVXFYUGZvVzNhSWxkdis1Q3l0K1hBNVRhV21WQlZWWWxzV1hreWFpMnl1dm9VV0xsZ0I0YWNqVTFGdUlIenNHL2Z2MXhabzFxMkRJeUxEN1hMMTY5ZkhHLy9XOGkydmtIQ2FNSDR1QmNZUFFydDMvc3dmWUNnU1c4L1B6TVdya3gvQnc5empreEZ1ekxScEliQjYydVRXS3NnbERaUlJrTXJtTnQ2YUFTcVdHVEFRMnNXdFhERWNwaXVJRUhVSGIyVkhHeDhkbkQ4TXdod2lDYVAya24xUXFsY3JwQ1NQK1h5YVRsVk02cjB5VU5qZzRHS1dscGNqTHk0T0hod2NBd0dLeElEczdHN1ZxdVdqdlhPWUUyS0piSUhIK1FodzdmZ3dyVnl3SFRkUDRjdkxYZC96YzBpV0xvRlFxMGFmdmU5SnpGb3NGQVFFQmRtSHIvWmk3dXp0S1Mwc3grNXZ2NE9ibWhqTm5Uc05kT0s5RmdlV09uVHBMM3FKV3E0V2JteHNLOHZNeGVjcTBveSsvMU9aNkpkNmEyTHZHbG5WcENHRW9qMUdTUXlhWHlVREw1YUFWQ2lpVktxZzFhcEEwVFVNdTlINVVFSkxhRlJFQVdJdUtpbjUrR2s2cWhnMGJsa3ZxSHo1OEdJR0JnWEJ6YzhOenp6Mkg0OGVQMjczdStMZXRSVVZGUWFWUzRjQ0JNcUhrZ3djUGdpUkp0R3JWeW5VVnU2eWNUWnM2QmNlT0gwUDc5aDB3TG40Q2poNDlVdTVtNm1nSER4N0EvbjM3RUQvK2N6c1c0WWlJQ0JRVUZPQ3YvZnVrZk52bXBOL3RQbnY1OGlYODlsdlZnckxuR2plRzJXeUdRcUVBd3pBNGN2Z1FtalRsdFV3ckVsZ09DQXlFdTRjSDhuSnpkMWZrclFHRUhac0hRTmg0YkdWNU5jck9XMU5BcVZCQ3JWWkJxOUZDSmdKYlJVVUVtN1lQYVJLaGZmdjJ2eDQ1Y3VSRGdpQWVlMDBFbG1YeHh4OS9sSHUrYmR1MmlJK1BSOCtlUGZIc3M4K2ljK2ZPT0hqd0lPYk1tWU9KRTNteDRLRkRoMkxldkhrWU8zWXNQdmpnQXh3OWVoVGZmLys5WFZpNWJ0MDY1T2JtWXZEZ3dkQm9OSWlOamNYUW9VT2gwK2xBMHpUaTR1TFF2MzkvU1RIYlpTNnp0VDU5M3NQczJUT3diczFxc0N5TFVaOThDcElrN1lvSCtmbjVlS3ZuRzJqMi9QTVlPMjQ4RXVkOWg5TFNVZ3daL0tIMFBZa0xmb0JPcDhPMEdiUHczYmZmNEllRjMwT3RWbU9VZzQ1bzhxbFQyTGh4QTNyMCtMODc3bHRvYUJoNjlQZy9EUHB3QURod2FOT21yU1FlWHBIQXNrd213N2o0Q2VkZmU2WHIyUXE4TlF0QmlLQW1GQTBJOE40YVJZSWlLVTRtVlVMbFV0OGFyYUNoVkNtaEZpWVBpSjQ5ZXlJL1B4K0ZoWVVvS2lwQ2NYRXhTa3BLWURLWkNKUEpCQnM5QkpMak9Ca0FPUUJsVVZIUkFKVks5ZlhqZk5Ja0ppWlcyQng3L2ZwMWhJV0ZZZG15WlpneFl3WnUzTGlCc0xBd0RCOCtIRU9HREpIZXQyUEhEb3dhTlFwWHJseEJWRlFVV3Jac2lRMGJOa2k2b2oxNzlzU05HemR3NHNRSktaODJZc1FJckYyN0ZpUkpvbWZQbnBnM2I5NERuNEJ3MmFObCsvZnZSM2hrZzZmaXR4b01obStmajJwOEJEejl0NmhyWUFSUEJWNUNFRVFwRDNDRWxWZWhvamlaVENZcVVIRzJUQjRhclJZNm5RNmVucDd3OGZGRlVGQVF3c0xDUVBUdTNSdDVlWGtvS0NoQVVWRVJpb3FLVUZKU2d0TFNVcGhNSnNKc05zTnF0WklzeXhJMmVnajA0c1dMdldKalkvOEFFUDYwbm93cEtTa29MaTVHeTVZdHBlY21UWnFFYmR1MjRkaXhZdy9VNjd4eDh6L2s1T1NBWVJpVWxqeWRJMXBLbFFvVVJjSEwweHRoWWJVbDhsUm54bkdjc0diWnNGcHJiczJVS2hWa01obTh2YndSRmhiNjFBTWJ4M0hYUGhzemV1TGFOYXVMQUpTZ1ROZkFDRjVhcndTQVdRQTJScERXWTRWd2sxTW9GZnhjcUVvRnRVWURuVllMTjNkM2VIbDV3OS9mRDhIQklRaVBpSUJNcFZLaHBLUUVORTNEYkRaRExwZkRZckU0VmtodFExSUdBRE53NE1DQzNyMTcvNlJVS2ljOWpnczhiTmd3SkNZbTNzOEJ3cFVyVjlDM2IxK3NYcjBhVFpzMlJVcEtDdWJQbjQvNGVON3R2cE5La3FQcDlYcjQrOS9kNkxQSlpNYVpNMmRBeVdUUXVibTc1UGVLak1qTnkwWFd5VXcwYmRJVU5DMTNldXhPbkRnSmtxS2cxZFg4bWhVVkdaR2RrNFBNckV4RUM4M2FGZG50Sjd5Zk1UYzNkL1BhTmF0Tk5pR29XUVF5QUJZT1lBZ0hiUVB4UHh6SGdXTTVzQ3dMbG1WNUpnK0J6Y05xdGNCaXNjQmlOc05zTXZQQXBsUXFVVkpTWXBkcms4bGtzRnF0b0NnS0RNT0E0emlKTnB6ak9BWUFzM256NXAvZmZQUE45d0RVZmR3V09DRWhBUWtKQ2ZmMUhUMTY5RUI4ZkR4R2pCaUJ0TFEwQkFjSDQ5TlBQOFhISDM4c1hVQTFiZW42ZEZBeW1Vc3dXVENOUmd1TlJvc01mUnJTMHRNUUZscmVTN3ArNHlaSWlucGdhMmE3VHpkdi9vZlFTbVQ0YWdVSFA4bmUydldsUzVlY2RBQTFtOXhhV1l0SEdhRWtCYmxNMUEzbHE1Nml0NmJWYXVIdTdnNVBUeS80K2ZraE9EZ1lkY1BEMGFqUnN5QTFHZzJVU2lVVUNnVm9tb1p0TVVFb0lvQ2lLTTZtbjAxcy9iRDI2dFVydDZTa1pPWFRmQ0hGeDhmait2WHJNSmxNdUhyMUtzYU1HVk5wQ0ZUZGxwMlYvZFFPVDFkbVdwMGJzckt5bmI2V2s1UHpVTlpNcTNORFZuYldVM3RNc3JPemt4WXZXbGdLKzRLQkNHNFNrNGR0aXdjZmlwS2daQlJIVVE3TnVNS1VnVnF0a2tETzI4c2JNcGtNcEZhcmhWcXRobEtweEwyMGZxeGJ0MjR0eDNFdWh0MkhjZ2U4OStIcHA4RnpZMW5HNldzUGE4MDBHaTBZSy9PVW5xdmN4VzltenpyaEJOVEVmRm81d1JaZTZaMTBtQWZsUjZma0FxaXBWRXBvTkJxNHVibkJ3OU1Udm42K0FBQ1pUcWVUS3FKQ3djQXUxeWFUeVRpcjFVb3dET08wWVRjMk5qYi9yYmZlV3FIUmFLWS80UWNHZXIwZUJvTUJWb2FCc2JCNjJFMjFXaDFrY2huOGZIM3ZXdHFQSUlDU0VoZVhXMFZXVWdIUDNjTXNydHpyOFNLU00wSE1Ud2F1NU4zYmhpTTh3QTJKQWhmbFd5Mi9veUEvSHpldVgwVlJrYkZTSUErckV3NDNkM2RrWkdRa3JmcHBSWVc1TlRocHlDVkprdVA3MW1TY1RFYnhvQ2FUZzZiTGRBNTRqUU1kNzYxNSswQ2g0THNMWkI0ZUhpZ29LSURSYUpTcW9XYXpXUUkzcTlVS21Vd0dobUhFcEozVTB5YmsycXh2dmZYV21pMWJ0cnhCRUVTTEp4WFVrcE9UQVlLRVJxdmoyVTJyVWR1NHFNaUlkSDBHMHRQVHExMEpmdGZPSFZpK2JDa01oZ3dFQlFWaDVhcTF1SHo1RW1MNzk1UGVNelorQXJwMjdlWkN3a2ZaRXBPQnEzbjMvdmtyZVNEbUo0TmIwckZhZHVmNnRTc29MaTY2NDNsOTQvcFZQTnU0NllsM2VyMlo3QVRVbkhwcmtKaHliWWZjNVpETDVKRFRmRE91UXFHQVVxV0NSc05QTTNoNjhYazIwV1NlbnA3SXk4dERZV0doYlE4YmFKcm1xd3dPWHBzTjY0ZWsxcng5KzNaelFVSEJqKzd1N2s4a3NPbjFlb0FnNGVkZk0yTEpZbkxab0U5RGVucDZ0WWt5cDZXbFljYjBxZmh5OHRlSWptNkJnZ0tlR2ljaUloSzdkdThEQUF5TWZiL0cxbTNaMGlWNHZYc1BPellUY2IvbXp2a0dLU24vZ0tacHRPL1FDWU0vR2lJTlg2ZW1waUpoN2h5a25FMkJRcUZBeDQ2ZDhHSGM0SExEMmRWcGQ5cm1pekV2UUM2WGd5QkloSVdGb1gvc0FMUnVIZlBBemtIaWZrRE5CdHlxeSs0RWFyYmc5dC9ObTF1dlhMbHN2WU8zeHBUUHJWR1FVUlFualU3SjVUd2RPRTJYZVdzNkxkdzlQT0R0N1dNM0FrbjYrUGpBdzhNRE9wME9hclVhS3BVS0NvVkN5clU1eTdjNXk3VjVlSGhzWmxsMjI1TUliQVpESmpSYVhjM25ZSFJ1TUJnTTFmWjlGLys5QUI4Zkg3UnVIUU9hcGlXZU9JSWdvRkR3ZDcyN2JVbTVHL3R4K1ZMazVKUlA0RSthT0FHMWdvUHgyKzlic0dqeE1odzljaGhKU1pzQThEMTVZOGVNUnIzNkRiRHA5eTFJU0ZpQS9mdjI0cmVOTmNlOVVOVnRKaTVZaU0xYnQ2Ti83QURNbmprZEczL2Q0UElrNzJCV3EzVlhtNWdYTGpqeDFDcjAxa2c3YjYwTTFPVENQS2hDcVlSS3hjdnN1YnU1dzh2VEMvNDIzaG9Ba0g1K2Z2RHk4b0tibXh1MFdpM0U5Zyt4U21vRGJKd05oYmpkaUJYNGFYeUx3V0Q0OFlrOE9JejFnU1NiTlJvdHJGYnJmWC9QNmRQSjZQNWFOOHlhT1IxNnZSN2RYK3VHN3E5MXc0b2ZsMWY1TzQ0ZU9Zdys3NzZOOWkrM1JXei9mamgzOXF6ZDYvdjM3VVcvOTNxamErY082UDkrWHh3OWNsaDZiZGpRajlEOU5UNjBIZm54Y0hSL3JSdUdmalJJQXBHMmJkdmh2WDd2UTZGUXdNL2ZIODJqbzNIcDRrVUFmTVhTMDhzTHZmdjBBVTNUQ0E0SlFldVlOdmozMzVxclQ5M05ObFVxRlZxM2pzRzQrQWxZdkdpaEhmSGlrMkJGUlVWSStuMFR4bzRaWFQwaDYvWHJPMkUvRTJvSGJCekhXVG1PWXppT1kxbVc1UWhBOHRaS1NvcTVUSU1CcWJkdW9hQ2dvSXk5UTZtQ1JxT0dRcUhBZ3ZtSk9IandMNmpVYW50Z0N3b0tnbytQRHp3OVBhSFQ2ZURZL2xGSmxiU2MxeFlZR0hqWVlyRXNlZEtBcmJvS0JWWGFsdEY0MzkvUnRHa1VOaVZ0eGNjalJxRldyV0JzU3RxS1RVbGIwZS85L2xYNi9OVXJWL0Q1aEhnTUhqSVVXN2Z2eEp0djljS29rY01saXB1Yk4yOWd5dVF2OGRsbjhkaXliUWRlZmZWMWpCOC9UaEtsU1VoY2dFMUpXd0VBYytiT3c2YWtyVWhjc0pBLzRVZ1N2ZnYwaFllSHAzRGlYOFBoUTRmUXNpVlBBdURqNDRPRXhBVlFLbFVTRUo1T1RrYmp4azFxYk0zdlpadlJMVnJDYkxGSWdQdzRtZU1RdmZoM1ZsWVdCc2IyeDVVcmw2dmxSbEphV3JwbS9Qanh0eHhBemVUb3JmRmpVenllTUF3RGtxVEFzZ3dzRmdzL1NSQWVqc3lzVExBY0I2VkNDWlhRM25IczJGRW9sVXE0dWJtWDJ6YXBVcWtRRUJBQWIyOXZ1THU3dzdiOW96S3Z6VmxmRzBFUWxuUG56cTBFY052bGhEKyt0bVZMRXRxKzFBNnRXOGRBb1ZDZ2M1ZXVhTkN3SVhidTNBRUE4UGIyd2JMbEsvRk1vMFlnU1JLdnZ2WTZMR1l6YnQzNnI4cmJPSGYyTERxMmI0ZCtmWHVqUWNPR2VMSHRTMDdmdC9ENytWQ3AxZWphN1pVSDl2dXJzazJDSU9EbDZRVmprZkhST1hBRW9QMGdDbTZqL3dkQ0tZUHF0ZnB3RzljR2hKdkM3bTJqUjQzQTZlUlRBSGpHM084WHpBY0FlSGg0NEtmVmE5SHYvUStxWTI5dUh6dDI3SzhLUERYYjNqVVc0SE5yRkVWeEhNZHhGRVdCWlZsT29WQUl3KzBxZUh0NXdXZ3NoRW9vR09UbDVjRnNNdUhGRjErRVhGNSt1b1FFZ0tDZ0lQajYrc0xUMHhOdWJtN1FhRFJRcTlWU0hzWVpBMGhGdWJhb3FLaXJ4Y1hGUHp6cEYzL1h6aDFRV1Boa0N0cnE5WG9FQnRwMzVkZXVIUWE5UGgwQW9OVnFjZkxrQ2NSOUdJdmU3L1RDKysvMWNlb0pWR2FObm4wV08vL2NpNS9YYjBSNmVqcVdMUzN2Nks5YzhTUCsvdnNvcGs2ZERwbE05a0IrZTFXM3lYRWNjbkp6b0gyRWVnaVZIU05BcU9SZ2Mwcmd2ZlExcU45b2lOSS9yOEw5VTN2cXhDRkRoMlBxMTFPUW1EQVAyN2R0UmQvMytBcTVlRzFYaCtYbDVmMlNtSmlZNitDcG1aem4xaml1VE1vWWtNa29LSlJLbU0xbVVDU1BOY1hGeFNBSVFuQzZGRGg4NkJBR0RJaUR6czE1bzdVTTRLbC9Bd0lDa0pPVFUySHJoOFZpRVdheXJKekE5c0d4TEF1Q0lGaU80d2piWEZ1Yk5tMVdIajkrdkIxSmt1MWMvcy9qWi83Ky90Q25wOXZmZm0rbklpcUtiMFU1OE5kK3JGNzFFK1o4TncvQklieG8yWXN4THpqMWFoekJ6bFJhaXUzYnQ2RkxsNjVRS0pVSURBeEUrL1lkY1BEZ0FidjNiVmovQzNidDNJRzVDZlBoNXU3K1FINzMzV3p6K1BGam9PVnkxS3RmLzRFZkgwWHJFTGpIdnlqOWJmazNFN21mN0lTOG5qZEt0bDJHOVhvdWRNTmJJbmZrRHBpUHAwSDdnWDBMVVhoRUJEcDI2b3lWSzVaajVxeHY0T1oyNzFNWWNya2M3ZHJaWCtZN2R1dzRNSHIwNk9OVjhOWVlBVDlZcTlYS0NaRWdLSm1NVXlxVUlBa0NOMjVjbDRZSGVEWVBEVTZmVHNaTDdWNUd2UVlOOE8vRkN4VURHd0NFaElRZ0t5dkxhZXVIQ0d3aXVERU1JejJFR1ZJV0FDSDJ0U1VuSjVzTkJzT1NnSUNBcHhMWWZ0MnducS95Y1J6YXZmei84SDcvV0FCOG04TlhrNzVBWVdFaG1rWkY0ZERCQTFJdTZrR2JiWkdDWTFsWXJWWnB3cVRiSzY5aXlPQTRkT2pVQ2MyYVBZKy8vdHFQYzJkVDhOblljUUI0Z1JHQ0FFaUtRbjUrSHJadTJTSjhqLzFzYkdCUUVJNGVPWUs2ZGNPUmw1c0xYejgvMEFvRmZscTVBdm41ZVhpM2QxOFVGUmx4NE1CZmFOS2tMSisxWlhNU052MjJFWE1UNWo4d25ycXFidE5rTXVGMDhpbk1tREVOY1lNK2VpaVU3cVpEdDJEb3RycjhNYjJlQzdxSlArVFArY0Y2TXcrcVYrdkJjamtiY0RndU8zZjhnWDE3OTJESzE5UHd6ZXhaK0hyYWROU3JkMjhBYmJGWXNIT252WmI2dFd2WHRoWVVGRGhPRjRnZVd6bUdYSXFpUUZJVXdIRlMzNnhjTGtkQVlDQTBHZzEwV2gzKytlY00vUDBEUU5NS1hMMXlCWVVGaGJqNDd3WGs1R1NESkVuSTVYTDBldnVkOHNBbWhxUzV1Ym5JejgrSDBXaEVjWEV4VENhVEhialplbTBNdzNBY3gwRjRTTk1JQUN5QmdZRUhUQ2JUZkpxbWh6eE5vSlo4NmhTMmJFbkN3aCtXZ0tJb2ZESnFCRUpEdzlEdTVmK0h1WE8rUWZzT0hkSHp6YmR3N08rak9PVGdwVHdvYzJ6UW5URjlLbVpNbjRvT0hUdmg4eThtSVRLeUhpWitPUm5mTDBpRVBqMGR0VU5ETVhQMnQ1S2FVWmV1M1hEMmJBcGkrNzhIaXBMaDllNDlFQmxaRHptNU9YYmJHVFZxTkdiUG1vbmx5NWFnZHUzYVdMSnNCV2lheG95WnM1R1lNQmMvcjFzTHVWeU90aSsxay9JNkRNTmcxa3crREh5bmx6MzMvc3BWYXhBUVVQMjloRlhkNXJBaEg0RWdlSUxGVDBhUGVhQjliRld4a3UyWDRmYkovMEQ1cUpIVmV5TTBiejREOTg5aWtEL2pvTjM3VWxKUzhPMmN1ZkR6OTRlYnV6dE9uamgrejhCV2JoOUtTbjRjTjI3Y0RRRzh6STRGQTFRd1pRQ0FzMWdzMEdpMW5OeEd3MEF1cDVHV25nYVpUSVk2ZGVyQ3o4OFAwMmZPUm9QNkRlRGo2NHVGMzgrSFZxdXpBN1Z5d09idjc0L3M3R3prNWVWSndDYU9XWWtlbTQzWDVoaVMyazBqRUFSaDNyTm56L0pPblRyOWp5Q0lxS2NGMkk0ZE80b09IVHBKellLdnZQSXFqaDM3RysxZS9uOUlTZmtIRXdWRm9QQ0l5QnJmbDA2ZHU2QlQ1eTdsbm8rTXJJZS9EbGF1WTlxNmRVeUZGNjVDb2NDRXp5ZmFQVGZ3dzdoeTcydlJzaFYrMmJDeDNQTVJrWkg0YnA1enlpaUtvckQvd09FSGVzeXFzczA3cmRmOW1rNVhEWDJTREllQ21ZZWtQNDNMVHdQTFQ1ZDcyeWMyckxsTm0wYWhhZFBxdVR3NWpqdnp4eDkvT0JZTWJITnJaaW0zUmhDc1FQbk5XYTFXRGdDVVNpV24wK21rV2RDaW9tSmN1bmdSL3Y0QjZOQ3hFOC9rSVV3WStQaFdQaHBXTGp0YXExYXRjcmsyMFdOejhOcWtjSlJsV1Z2VmVJYmpPQktBdFV1WEx2cnM3T3dmdkx5OEZqNU5YcHR0ejZ2QVl5Y2xuR3V5SWRabGo2OVJGSVdpSXVNalFXamc3ZTE5VHltU3RMUzBqV3ZYcmpVNkFUV1RIYWp4bkdzc1FZQWpTWktuOXBielBXcmkySlNDcHVIdDVZWDY5ZXNMdEVTKzhQRHdnSStQajkxa3pxREJ6Z1BDY3Z3Njd1N3VjTmJiVmtIakxpZlNHMVhVdE92dDdiM2RZckVzZmxwTzBPYk5XMkRYenAwb0tTbUJ4V0xCdHExYjBFTG8wV3JhTkFyYnQvRW56T1ZMMWRQL3BGS3BYYWh3bDJ2ek1OZXNvbTM3K2ZtaDJGaHhsWjBMOTdoL2o2b2F2a00wdGRvK3QxaGFXcnA2NU1pUkYyMUNVSk9EdDJaWE1DQUlnaU9FWm44WnJ6akZ5ZVV5WVJhVWxtWkIrU0YzZ1NYWDJ4disvZ0dTZHVsZGVXd0FYMGdRdlRaYnFuQkhyODIyaUNCNmJTeGZCbU9FU2lsSkVBUjE2TkNoWlczYnRuMmVJSWhtVDlLRk0rQ0RmaUFFN2pWZlh6OGtKQzdBODgyYm8xUG5MaGowSVY4d2FQUGlTMmpYN21VQXdQQVJvL0RseE0veDY0YjFDSStJNEJPbVQ5Q2QvbEd5SW1OaGhhMEw1RU5hc3lKaklhZ0tXa2dDQXdPUm5wNk96SXgwcUFXaUJUc2JHZ1V1TWZtZVowYTVjQTlnYVBWbGhPclVqWkFHNFRtT083MW56NTY5VHZKcXR1MGRqa1VEZm5SS0hKdVN5eUNYQzU0YkxZNU5sUTI1ZTNsNndjL1hyOG95bFU1WFdTNlhJemc0Mks2SVlFdHBKSWFpanUwZlRnb0pWZ0NXZHUzYXBXWm1aaTcwOGZGWjlEaGVKRm9uK1k5dGYreXE4UDI5M242blhESVRBUEx5Y2pGejlyZHdjM1BEbmoyN1VWSlNVcVZ0M1Nsc3lNN0pjUUdiZ3htTmhmRHg5WEg2bW8rUE43S3pIL3lhR1kyRjVRZ0JiSzFaczJZd0dBelE2L1VvS3N5Mzc1UFVBaGhiRzBEdCs5aURiT0J5ZHZWZEYxb050Rm9OYnQ2OHVmSEhIMzhzcUNnRWhZT3lPNStWRVpUdk9BNGN5M0ljeTRKbEdUQ01sWDlZTGJCYXpMQ1lTMkV4bDhKVVdneFRhUkZ1WHI5eTc4QUdBQUVCQWNqTnpiWHoycHpsMm13OU5vZENndWkxV1FpQ0lIMTlmWGVXbHBiT1ZTZ1VIejl1RjRtc211N3dwU1dsR0RONkZLLzhydFZLN1JPMmQzUm5YZFNWV1dob2JXUm1HcENoVDROVzUrYlNQREFXd21nc0JHTzFJclMyY3hBSUN3MkZ3ZkRnMWt6Y0o1WmhFQlphT1RENStmblowZTg4NnBhZm43L2twWmRldWxTUnQwWVFoQWhzREVFUWpNamNJYXBPMFRRTmxVb2xlR2RsZE45ZVhsN3c5UzFUbldyUW9BRWFObXhZOVd1MnNoZHIxNjVkWVYrYm85ZkdzaXpoVUVnb1Z5VmR0V3JWMHY3OSt6Y2lTYkw5NDNTeCtQbjVJVjJmY2Q4WFFGU3pabGk0cU9KUjJxSWlJd0lEN2s3TWhTQUlORy9lSE5kdjNFUk9UamJ5Y25KUVd2cDBraytxVkdxUUZBVWZieCtFaG9aVSt0NFcwZEc0ZWZNL1pHWmwxZWlhcVZScVVESVp2TDI5N3docWo1dFpyZFo5RXlkT1BPQUFhcVVpc0FtZ1pwOVhFN1FNUkNWM3VWek95ZVZseEpHMkFPZmg0UUZ2YjI4RUJBU2dkdTI3V3p2aVRvSWp0Mjdkd3ZuejUzSHQyaldrcHFiQ1lEQWdKeWRIQWp4SExWSUI5QWlXWlFtV1pTbU80eWp3V3FRMHgzSEtHemR1dEFvTkRaMEw0TEZTSHpsMUtoa0VRVUNqMVVGZHpYZjQ0aUlqaklVRkFMaHFKNXAwbWN0cXlOSVBIVG8wT3lZbTVwWUFaQ1hnTlVLTFlLOFBhaXVseDloNmF3cUZncFAwUVRXODBMR0hod2U4dkd6RVdlcld4VFBQUElPUWtKQzdpN0x1OUlhUWtCQkpVTmt4MStiWStpSEtZbkc4MlU0a1dIbm5naUREd3NLT0Z4UVVKT3AwdXFtUDAxRnMxaXdLNmVucE1CZ3lVVmlRVnkwc0hBRGZ2eVNUeVJBVUZJaUFnQURYNWVLeXg4SnUzNzY5S2lZbUpsVUlNOFhRczlSSkNHb1Z2RFZwMEYwaWpSUkNVVnVhYjFHL1FBeEZhOVdxZGRlZ1ZpVmc0L000b1U1emJVNTYyc1JDZ21Odm16aHVaU0VJZ25KemMvdlpaRExWcFdsNndPTjBNQU1EQTZ1TjNkWmxMbnRjeldnMHJnNE9EajRGKzlZT3h4RFVZaE9Dc3M1QzBJcEFqVmQxOTBGUVVCQkNRMFB2YVIrcnBCT24wK2tRRWhKaVIyOWt5N2dyRHFrSy9XMTJ2VzJDMXliMXRva0xzV3ZYcmlVc3krNXhuU1l1YzlsamxWZmJ2M0Rod2oxd1hnR1ZQRFk0eklNSzVKR2NMYWpSQXNXM0dJN3FkS0lvQzU5WEN3a0p1ZWVKRE5uTm16ZXJqb0k4VlpIVDdubnhPZkYxNFNFbThGaWhBNThRd2UyVlYxNUpPM0Rnd1BjaElTR2hBTUpkcDR6TFhQWm9HOGR4MTA2Y09KSDA2YWVmRmpvSlFjdUJtaUNBYkNlblo0c2ZGZUVJTCtSQ2dtVlozQTArMlFIYjNiaDZ2cjYrVGljUmJBU1dZVU1mVHBoTUpoQUVBVUc2VDJvQklmaGZSTFpwMCtaRVRrNU9ncWVuNSt5cWhzVXVjNW5MSG82emR1M2F0VFZ2dnZsbXFvTzM1aXdFdGRxMmRvamhwOER2S0JVTXRGcXRYZWdwVmo4akl5UFJ1SEZqcU5YM1BpRnlWMkNpVnFzUkdocGFib2EwZ3ZsUmptVlpRaXdrY0J6SENnVUYyNmtFMHN2TGEzTnhjWEdRU3FVYTR6cDNYT2F5UjlPeXM3TVhoNGVIbjdYeDFFcHRId1JCbUd4QnpURUVGU1FHeXVYVmJNSE5WOURXRFEwTnZTOVF1MnRnQS9nRWVrVjhiYzdHck1UR1hRSGNPR0VxUWN5M2tRRElWcTFhTFRseDRvUy9YQzd2NXpxRlhQWVVoM3JRNi9YSXlEQ0FZUmdZalk4R1EzTnBhZW5QNzc3N3JtMi9XcmtRbE9NNENkUTRqbU1GUmx5T1pWbU9ZUmc3dmo4eHNoTWZZcFZVb1ZCQXJWWkRMcGZqMHFWTER4YllBQ0E4UE56cHFKV1RhUVJPNkdjVFI2M0VXVkxiRmhEaW4zLytJZmZzMmJPNGZmdjJmaFJGZFhHZDRpNTdHa0V0T1RrWkhBaHBHc0wvRWRndmk4WHk1MDhyVit6S3ljbXhPQUUxMndrRGZteUtJRmdDWVBsMEZLL2VMakIzY0VvbEw4U2kwV2o1bmpWM0QzaDVlOEhmUHdDMWdvTVJYamRjMHRHNFg3dW5iNkFvQ25YcjFrVndjREQ4L2YzaDVlVmxWeWxWS3BXMitUZE9aQUt4VmJZUzNGVXIrQllRYytmT25WTXZYYnEwa09PNFk0L3pDYnBwMHlZb2xjcUtFeFZXSzBhTUdBRS9Qeis0dTdzakxpNU9VbmR5MmROcmVyMGVIQWo0QndROU1tTnhMTXVlUEhUd1lOTEVMeVlVT09UVVNvUkhxUjJvU1hSRUpGZStDbHArdWtEbnBvT0hoNmRFUlZRN05MUmFRTzJlZ1EzZ0ZXM0N3c0lRRkJRRVIyMVNKeXBYb3BxelhRdUlBN2labm5ubW1aUzB0TFFGSE1kZGVWSlA0SEhqeGlFcEtRbnIxNjlIVWxJU2R1L2VqV0hEaHJtdTdLZmNESVpNYUhWdWo4eitjQngzOWR5NWMrdjc5bmtud3dIVWJDdWdKanRRRTNyV1NGS2FCNFZjSnVma3RDaDBySUJLWlQ5bDRPUGpBLytBQUlTRTFMNHY3WVZxQXpZQUNBNE9SbWhvS0FJREF5WCt0a3JBRGJiOWJRSi9tMFFsTGp4TXdjSEJCM0p5Y2hJQVpENXBKMjlSVVJIbXo1K1AyYk5ubzIzYnRtamJ0aTBXTFZxRUZTdFdJQ3NyeTNWMVA4WEdNTXc5ZVdvWHpwL0RxQkhEcTN0M3NtN2V2TG02YStjTzEyRS8yRzRIYkFSQldEaU9zNGlDeHh6SENSeHJGRWVRSklxS2pNak56VUdtd1FBQ3ZOaTBScTJHMldUQ2diLyt3cFl0bS9IbnJwM3c5dmF1OXNiMysvYjc2dFdyaDlxMWEwdmc1dUhoWVNmaFp3TnVZa2dxOXNPeHprSlNBQ1lmSDU5dCtmbjUzd2tMV0tQV3FsVXJUSmt5QlMrLy9ETFVhalVpSWlMd3h4OS9ZTzdjdVFnT0RvYTd1enNHREJnZ3FTMk5HREVDblR0M3R2dU83dDI3WTlDZ1FVNi92MmZQbm1qZXZEa0FJRGs1R1NVbEpXamJ0cTMwZXBzMmJRQUFSNDRjY1YzZFQ3RVZGaGJjMCtmcU4yaUlpVjkrVloyN1VxclhweTl2MDdyVmVaUzFkWlRhaEo2OHQyYlgya0V5SkVteEhNZXg0RGpJWkJUTUpoTlVLalVYRWxJYi9nRUJTRTlQaDFxdGdWcWpRVXJLUDNqbDFWY3hldlFZUkVSRTR2Q2hROVcrbnZmZE8wWVFCQ0lpSXB3cVdqbXJqb290SUFBSUFFNkxDUnpIa1I0ZUh1dU5ScU5HbzlIRTEvUkpOWDM2ZEd6ZXZCa3hNVEVZTkdnUWV2VG9nZTdkdStQQ2hRczRmLzQ4MnJWcmg2NWR1K0tOTjk2NDYrL3UyYk1uY25OekFRQzNiOThHVGROMm5GeHl1UnplM3Q1SVRVMTFYZDB1SzJmWjJkbVkrdlZrWkdVYVFKQWtCZzhlZ3BhdFhrQnFhaXBHalJnT2k4VU1EdzlQTEYveFUxbTY0N05Qa1piR2E1Ym41ZVZCcmRGZzdicjFBSUNyVjY4aVllNGM1QmZrdzh2VEMyUEdqcE5FZWdCZytiS2xpNy80ZlB3cEIxQXJ0UUUzdmxnQVdJUnJsaVVJc0FSSmNBUkhnT000VGlhVGdXVlp6dDNESFFxRkFnUkJRSitlRHJWS0RZcWlvRmFyVWI5QlF3VFZxb1dpSWlNT0hUejRNcm5Fd0FBQUlBQkpSRUZVNkFFYndJOWNoWWVIbHlPakZNdThUZ2JrYmZ2YklJU2s0bVNDQ0c2RVZxdGRXVnhjckZLcFZDTnI4dVRwMGFPSHBJMzR4aHR2WU5teVpaZzZkU3AwT2gxYXRteUpaNTk5RnVmT25ic25ZSHY3N2JlbGZ4Y1hGenN0TENnVUNwaE1KdGRWN0xKeTl2TzZOV2pjdURINnZmOEJybDI3aGdYekU5Q3kxUXNJRGc3R0x4czI0dkxsUzVnNlpiTGRaNmJObUFVQXlNL1BROXpBV0l3Y05Sb0FZRGFiTVhYS1Y1Z3lkVG9DQXdPeDQ0L3QrSDdCZkV3U0JJYnk4L04rK09MejhZZWRoSjRsZDhpcmNTekRpRlJsa010cFVad0ZSVVZGTUFwc3hrb1ZINzFwdEZyNCt2cGkrN2F0eU0vUFIxNWUzcU1KYkFDdmNHVkxJVzdidEd2anNkbjJ0VW5neHBhcDZqSUMwRW5nOXRaYmJ5MVp2MzQ5clZRcWEwekd6M2I2UXFGUVNQbEQwV2lhcmhiZ1VhbFVNSnZONVo0M21Vd1BSWi9TWlkrK1JiZG9pWVM1Y3dBUWFOR2lKV1ovTTZkS24yTlpGbDlPbW9odXI3eUdGaTFhQWdDdVg3K0cxTlJiaUIvTDk4S3pIQXVOb0YxUVdGaTQ3SjFlYisxSCtha0MreERVUmtKUEZEdG1HSWFUeStVYzc1eUFvMm1lTERYVFlJQkdvMFYwZEF2OC9mZFJ1THQ3UUtWVWdtVlpyUGh4T1hyMWVoc05uM2tHNDhlTmZYU0JEUURDd3NMc3RCRWNweEZzaUNoaDQ2MXhBdmlKa3drUW12MUFFQVN4WmNzV1l0cTBhVXZpNCtObENvVWlyaVpPSHBrVEh2cUsxS1NjUFcreFdLcTBuZURnWUpTV2xpSXZMdzhlSGg3U1o3T3pzNnZNNWU2eXB3ellvbHNnY2Y1Q0hEdCtEQ3RYTEFkTjAvaHk4dGQzL056U0pZdWdWQ3JScCs5N2R1ZHBRRUNBWGRnS0FFYWpjY1dFK0hGN1UxTCtjZXhUY3dRMU96WmNvZG1lb3hVS2pwYkxZYlpZUUpFa2FJVUNGRVhCMTljWGRlclVoYnU3QndpQ1FHQlFJSFJhSFJpckZSTStuNGp3OEhCY3ZQaXZkQzA4c3NBR0FQWHIxeStuUmVvWWpqcDRiU0s5RVd4eWJveVFneU1JZ2lDKyt1cXJQRjlmM3lVREJ3NGtGUXJGd0lkNW90RTBYYzUxdm5UcFVwVTRvNktpb3FCU3FYRGd3QUc4K3VxckFJQ0RCdytDSkVtMGF0WEtkUlc3ckp4Tm16b0YwUzFhb24zN0RtZ1IzUUp2OXV3QmxtVXI3ZmM2ZVBBQTl1L2JoNFdMbHRqZGlDTWlJbEJRVUlDLzl1L0RpMjFmd3RXclYzSHE1SW1menA0OXUyZmp4ZzBsTnA1YWljUERSQkNFV2NpcDJiSGhNaXpMeVNnWlpESTVTa3BLT0hjdmJ5aVZTdWgwYmxBbytQK1hta3I1SnR4YXdRZ0xEVU5BWUNBVU5NM3Y2NEVEYU5LMDZhTVBiQVJCb0g3OStoS3dPWHBzRE1QWWVteTI0QVpoRkFOQ3ZzM3VPNGNORzVaTjAvU1NmdjM2NFdHQ1c4dVdMVEY3OW13c1c3WU16WnMzeDZKRmk1Q2VubDdoKzlldFc0ZmMzRndNSGp3WUdvMEdzYkd4R0RwMEtIUTZIV2lhUmx4Y0hQcjM3dzh2THkvWFZleXljdGFuejN1WVBYc0cxcTFaRFpabE1lcVRUMEdTcEYzeElEOC9IMi8xZkFQTm5uOGVZOGVOUitLODcxQmFXb29oZ3orVXZpZHh3US9RNlhTWU5tTVd2dnYyRy95dzhIdlFOUDJUaDZmbm54dlcvMUlFKzBLQmJRT3V5WEVPVk9wWG95Z1FESU9Ta21LVWxwWndhclVhbmw1ZVVLbFVxRmUvUG03ZXVJR2pSdzlEcDlPaDE5dnZJaVE0QlBYcTEwZjgrTTh4ZWZJa1dNd1doSVNFWU16WStFY2YyTVJjVXIxNjlld3FwTGE1TmlHdlZxNllBUHRLcVMyNEVRUkJFSEZ4Y1prbWsyblJ3SUVEV2FWU0dmY3dUclRYWDM4ZEkwZU94T2pSbzhHeUxQcjE2NGNCQXdhZ3ROUjVaOHFHRFJ0dzQ4WU5EQjQ4R0FBd2UvWnNXSzFXZE8vZUhTUkpvbWZQbnBnN2Q2N3JDbmFaVXd1cFhSdHo1ODEzbXRiNFpjTkc1emZUWDM2dDhQc2FOR2lJaFl1V3dHZzBycGcxYzhhZVpVc1hWd1Jxa3FjbWdocEprZ3hRUmhvcG95aE9ybFNDcGhVYzMzd3JpTEtvTlhCemQwZGtaQ1Q4L1B3UUZGUUxZWFhxb0c1NE9KUktKWjU3cmpGK1dMUzBSdGZ0anBvSDkyTVpHUms0ZCs0Y3JseTVndFRVVk9qMWVtUm5aNWZUU3hCQ1YwSUFRRUpnNFNVNGppTnROQlBrSE1jcEFDZ25USmpnSGg4Zkg2dFNxWWE0VG4wK1VYemo1bi9JeWNrQnd6QW9MWGs2UjdTVUtoVW9pb0tYcHpmQ3dtcFhHcTV4SENlc1dUYXMxcHBiTTZWS0JabE1CbTh2YjRTRlZVd1J0bi8vZm9SSE5uZ2c2MVJZV0xoc1F2eTR2VGJocHpOUXMyWHNzSWlNSFdKelBVWEpPSUhlbXdjMXBiMjRzYWRubWNwVWFGZ1k2dGR2QUY5ZjN3ZDJMdFFvQjVxL3YzKzU0WGduRlZMWTVObWtTcWx3d2RyMnVJbUZCVXlaTWdVblQ1NzhZY09HRFdhMVduM1ByU0FkT25UQW4zLysrY2hjbUhxOUh2NytkemY2YkRLWmNlYk1HVkF5R1hSdTdpNzV2U0lqY3ZOeWtYVXlFMDJiTklWWW9YTUV0Uk1uVG9La0tHaDFOYjltUlVWR1pPZmtJRE1yRTlGQ3MzWkZkcnVHK3hrTENncCtHRHBrOFA1TGx5NmFLd00xbEZWQUpUMVFnVGhXVUpvaUlJeE9TYXdkSkNWUWYxTVU1RElaeFBsUXRWSUZzOGxVNDcvdGdRRWJ3SXZCaU9CV1dYVlVySkFLdld5YzFXb1Z3WTJ4RFV0RmNOdStmVHMwR3MzU3dzTENVcTFXT3hLQThtNzNiZGV1WFkvOWhaeXVUd2NsazhFL0lBZ3VBelFhTFRRYUxUTDBhVWhMVDBPWUV5TFY2emR1Z3FTb0I3Wm10dnQwOCtaL0NLMUVocStXVFp0Uk5WdHBkbmIyNGxZdG14OUdlZmJiaWp3MUt3aUNJUUNHRUR3MUdVVnhNcG5ncVlsRDdXbzF0Qm9OZEhha2tZR29YVHNVa1pHUkNBMExlK0Rud1FOaHJRMFBENjlJWUZrQ09KdTdxWlJyczFxdDRtdE93UTBBZERyZHF0emMzR0lQRDQvaEFIeWZ0Z3M1T3lzYldqZDNGNkk1bUZibmhxeXNiS2ZBbHBPVEE5MURXRE90emcxWjJWbVZBbHNOV1paZW43NDgrdm1vVTdDZi9YVDAwdXhCRFFLb0VTUkhFaVJIa1FKYkIyMURHQ25NZjJvRnZRSStCUFZEclZwOFh1MWhnTm9EQXpZK2FkbkFLYkE1ZW0yaTV5YUNHOEFQQ0ZjQ2JweW5wK2ZHakl5TUlsOWYzNDhJZ29oNFdpNWVqcnYzNGVtbndYUEx6OHR4K3RyRFdqT05Sb3Y4M0p4NytpeVJuQWxpZmpKdzVlNjY5RGx3VjIrYXNsYTMvbS95K1R0NGFxWnlvRVlJb0VZU0FndXVESEk1elNsb2thbERBRFdKQmRjTGJqb2RMT1pTNU9WbUl6TkRnOHlNTktmckVGWW5IRzd1N284L3NBRkFvMGFOeW9GYkJjQW1nWnVZY0tzSTNNUy8vZjM5LzdoKy9YcEI3ZHExNDBpU2pLNStFT0haVFEwR0E2d01BMk5oOWJDYmFyVTZ5T1F5K0FtMHlIZDFzaE5BU1ltTHk2MGlLNm1BNSs1aEZsZnUrWGdsSmdOWDd3N1VXSEFuejVYY1d0ODVkZloxbEovOXRHL3BzTXVwbFFjMW1RQnF0SUwzMUJ5TEJhTElzZFZpZ29lSFI2WEs3VVZGUnR5NGZoV05telo3TW9DTklBZzBhdFNvUXEvTkdaalllSEJPd1UzNFhvN2pPSzVPblRxSGs1T1Q4NTU3N3JrQkZFVjFyazVRUzA1T0JnZ1NHcTJPWnpldFJtM2pvaUlqMHZVWlNFOVByM1lsK0YwN2QyRDVzcVV3R0RJUUZCU0VsYXZXNHZMbFM0anRYOGJDUGpaK0FycDI3ZVpDd2tmWWlMc0VOUXZIL0htdzhHSlNuNHlGR1RiaHArUHNaNGtBYXVaeU9UVTdVSk9ERmdTT2xRcEJMay9qV0FIMVEyQlFFSXdGZVpXQ211MDUvMFNFb3FMSjVYSUozTzdnc2RubTJ5b0NOM0h3bGhORDA2aW9xSE1iTjI2YzFhMWJ0MHlhcHZ0V3h6N3I5WHFBSU9Iblh6Tml5V0p5MmFCUFEzcDZlclZ4VTZXbHBXSEc5S240Y3ZMWGlJNXVnWUlDbmhvbklpSVN1M2J2QXdBTWpIMi94bzcxc3FWTDhIcjNIblpzSnVKK3paM3pEVkpTL2dGTjAyamZvUk1HZnpRRUZFVUJBRkpUVTVFd2R3NVN6cVpBb1ZDZ1k4ZE8rREJ1c1BSNlRkaWR0dmxpekF1UXkrVWdDQkpoWVdIb0h6c0FyVnZIUEpxZUttditlVTMyb1YxZjVQMVdVQW1vbGZQVUJBTFlDa0NONzFWVHFrUVJGbDBacVBueGJSMWhvV0hJejh1dTBlTlVWU01meGthVlNpVWFOV3FFOFBCd0JBY0hTMExNdGx4dVlyT2ZRcUdReEZWbE1obG5JOFRNMkhLNUNUbUNVZ0FsYjd6eHh1MG1UWnA4YXpRYXZ4RmV2eTh6R0RLaDBlcHFmRjAwT2pjWURJWnErNzZMLzE2QWo0OFBXcmVPQVUzVDhQSHhrVHhuUVFxdHdwblk2ckFmbHk5RlRrNTJ1ZWNuVFp5QVdzSEIrTzMzTFZpMGVCbU9Iam1NcEtSTmZQakVzaGc3WmpUcTFXK0FUYjl2UVVMQ0F1emZ0eGUvYmZ5MXh2YXpxdHRNWExBUW03ZHVSLy9ZQVpnOWN6bzIvcnJob1Z5MDNqOTJoOXZvLzBsL2V5VjBoYkpUQkFCWWM2MUYzN2UrTnZIM0wvSit5M2ZJcFJVTGo3THFweTJvZ1dCZ1UvMmtLRms1VUFNSFpHWm1vcmk0V01xcCtmcjZJaWd3Q0tHaFlhaFh2ejVvWVZSS1BNK2FOV3VHamgwN29uMzc5Z2dLdXJzcTlJb2ZsNlAzTzczd2RxK2UyTHBsYzVrM2FyRmc5cXdaNk5mM1hmVHYxeGNIRHg1NCtCNWJtWmVpUWFOR2pad054WmNMUzBXeFZkaFVTNFVUMG5GQ2dSUEQwbi8vL1pmVjZYUXJNekl5OUw2K3ZvTUlncmhuVVdZclkzMGd5V2FOUmd0andmMVR1Sncrbll4SlgweUEyV3hHY1hFeHVyL0doNWs5M3VpSmZ1LzNyOUozSEQxeUdJa0o4NkRYcHlNME5BeWpQdmtValo1OVZucDkvNzY5V0xac0NUSU5CdmdIQkNBdWJqQmF2Y0JmYk1PR2ZvUmIvL0ZDdHlNL0hnNlpqRUp3Y0FnU0Z5d0V5N0pvMjdZZHVyM3lDaFFLQmZ6OC9kRThPaHFYTGw0RXdGY3NQYjI4MEx0UEg5QTBqZUNRRUxTT2FZTi8vNzFRWSt0K045dFVxVlJvM1RvRzh2Z0ptUGpGQkhUcTNPV2hNTE5vK2pTR2NWa3kySndTSVp6aHJ2MW56bHJ6d3MydnpzSmVUY29abjVvUWZoSldnQk5CamVVZEJ0S21VQ0RuYUtGUWtKK2ZEMFpRbXFKcEdsNWVaWjVhYUJnUGFvNlNlWFhxMUFGRlVkaTVjeWNVQ2dWZWZ2bGxaR1ptMnBGR09NNjlpbitucFB6RG4yUExWOEJrTWlFdWJnQ2ltajJQb0tBZ2JOKzJGYVdscFZqeDB4cms1T1JnMElleGFOeTRpVVF0bnA2ZS9uQThOdEYwT3AxVHo4M1QweE02bmM0WnhiaWRNSXlvbitEZ3Vaa0Z6NjBVUUxHL3YvOGYvLzc3N3lTR1lmYmU2MzVXVjZHZ1N0c3kzbi91b1duVEtHeEsyb3FQUjR4Q3JWckIySlMwRlp1U3RsWVoxSzVldVlMUEo4Umo4SkNoMkxwOUo5NThxeGRHalJ3T1EwWUdBT0RtelJ1WU12bExmUFpaUExaczI0RlhYMzBkNDhlUGswUnBFaElYWUZQU1ZnREFuTG56c0NscEt4SVhMT1JEQkpKRTd6NTk0ZUhoQ1lDbjBqbDg2QkJhdHVSSkFIeDhmSkNRdUFCS3BVbzYwVThuSjZOeDR5WTF0dWIzc3Mzb0ZpMWh0bGdrUUg3UVpqbHJnUGJENS9rYkwydmQvL2Z0Yy9OZnVQbFZDdXdaYjRzZEhxVUUvekFEaEFVRXlrQ056K3h3VnF1Rms4bDVDdis4dkh6STVES29WQ3JVQ2F1RHFHYlB3OHZiRzFxdEZyNitmcnluRmhhRyt2WHFRNnZWT2wzWHRMUTB5VmxoV1JhZW5wNTI3MW02WkJIV3JGNEZBRWhKK1FjZkR4OEtBTGh5K1JLYVJrVkJvVlRDemQwZEw3endQNXc0enVzOG5UbHpHbTNhdkNpY1R3VGtjaHFYTHBVZGgxa3pwejljWUFNQWQzZDNDZHhDUWtMc3dPME9GT08yWVNrcmhLYmluVW9FdHhJQXhjODg4OHlwbjMvK2VVcHBhZWx5VnhyNnpyWmxTeExhdnRRT3JWdkhRS0ZRb0hPWHJtalFzQ0YyN3R6QmgwTGVQbGkyZktVa2xmYnFhNi9EWWpiajFxMy9xcnlOYzJmUG9tUDdkdWpYdHpjYU5HeUlGOXUrNVBSOUM3K2ZENVZhamE3ZFhubGd2NzhxMnlRSUFsNmVYakRXY0JLOHdodmd5ak5RZFk1QWlTZTFPdUhYNVN1Ny9UYm1sZ09vT1FKYkNRR1VBb1NaZjhCS0NLcFNKTUNSSURpYXBqbVNKRkZTWE13VkZCVEEzY01kT3EyT24vMTBjNE83dXp0VUtoWGMzTno0bkpvQWFyb0tSRmhvbWdiRE1QRDI5a1pNVEF4WWxwWDREa1Y3NTkwKzJMdDNEeExtZllmSlgwN0MwR0c4ZmtQZDhBaWNQSEVjUnFNUkJRVUZPSGZ1ckhUVHo4L1BoMUtweE5tektmaHN6R2pRQ2hyNStma0FnS1RmTnlFOFBPTGhoYUsyNXVIaGdVYU5HbFY2RW9uL0Z4NGNRUkNFeFdMaGJPc01MTXR5dHYxdFlsZ0tnT3ZkdTNjYWdJVHM3T3diWGw1ZWd3RGNjNGIrd29YemlCc1lpMlhMVnlJaU1oSkxseXpHNXFSTmtwZFNrWDAzNXhzY1BuUUlPVGs1bURqcFM3UjVzZTBqQ1d4NnZSNFJFWkYyejlXdUhRYTlubWN4MFdxMStIUFhUa3laOGlXTWhVYTdNS0txMXVqWlo3SHp6NzFJVDAvSEY1K1B4N0tsU3pCZzRJZDI3MW01NGtmOC9mZFJKQ1FzY01xWlZ4TlcxVzF5SEllYzNCeG9IMUlQSVZka1NiODhmL2VxaHNlR25NSXhpZnhSQkRaVEJhR25CZUJFcFhhR0FNRUp3QVlLQkNlWHk2RlVxcmk4dkZ4UWxBd0IvZ0ZDOVZNSE56YzNlSGw1UWEvWHdOUExTd2cvRzl5eEYwME1SdzhkT29TbVR1aUp0Rm90QmczNkNDTkhETU03Ny9aRy9mcjh2R3lUSmszUnNWTVhEQnM2R081dTdsQ3IxRkNwVmRMbk5tOU9Ra2xKQ2FaTm40VjUzMzBMQU1qSTBHTnowdTlJblAvOW93RnNBT0RwNldrSGJqWWdWZzdZeEdPTHNpWmV3bWF1VkFRNmFhNE5BQ3VTNG5sN2UyODZmLzc4alhyMTZ2V2pLT3JsZTkxZnVWeU92LzdhajRqSVNCdytWRFhPOWhFalA4R0lrWjlnbk1CZytxaWF2NzgvOUE1VVRMZHZweUlxaW05Rk9mRFhmcXhlOVJQbWZEY1B3UUlQM1lzeEx6aTlJVG1DbmFtMEZOdTNiME9YTGwyaFVDb1JHQmlJOXUwN2xFc0FiMWovQzNidDNJRzVDZk5ydEpIelhyZDUvUGd4MEhJNTZ0V3YvOENQajVXeDd2dGJmMzV6dHgvalUxR0pPcnQ5Z1lDUWV0UUFnaVVKZ2lWQWNDVEhnZ0xKeVVCQ0pwTnorZmw1Y0hOM0IyTzF3bURJd0xQUE5TNmJLUER6aFZ2cUxmajYrcUYrL2YvZjNwbkhSMVhlKy8vem5HWDJ5YjRNeVlTRWtJUmN0dUNsd3JWaVhTNHVWRnNwdUsrWHFxMC8vZlc2SWxhOXJiVjFCWmNxeXExNlJhdTFldVVWYmRVZjlkNjZ3cjBnb2xHSkNZUWtKQ1FrSVNHUVpTYVptYk04dnovT2VVNmVPWmxKUUFGSnpQTjZIZVprTXBNWnpweDVuODkzTDBmcUtNZUlOWnY5N0xQUEFCanppTzJkcUJzYUd2REEvZmZpbnQvZWk3WFBQWXZKaFVVNDIxVEtsMTUyT1M2OXpFaHN1T2JxbjJMcTFCTEx5bk83M2JqbnQvZENFQVJFbzFHa3BxYmlyVGZmUkgrb0g5ZisvSnB2M3hTMXcyM216SmtvS1NsQlFVRkIzRmkvMU5SVXkrZm1kcnVaYVVyWjNGS2JXY3I4Ym9yTk5CMWdwdW1xVmF2dUhoZ1llUExydnRkL21ENERIMys4Q1hWMU94RGcwak0rM3J3Sks1YmZZdjM4NkNPcnZyWG8yWWhmRHJPN01RQlFYYmZhU2dIQTJlZjhDQjkrK0Q2MmJQa1lxcXJpdmZmZXhWZlYyM0RHbVdjQ01BYU1FQUlJb29qZTNoN0xSMEwxK0tEUHBMdzhiTjYwQ1lxaW9NdU05anFjVHJ6NHh4Znd5aXN2UTFFVTlQUWN3SVlOSDJIMjdObERwdkNiZjhVYnIxZmlzY2RYSDdVK2RRZjdtdEZvRkI5djNvUUg3cjhYUDcvMnVxTWVPT2pUQnArOS9mSGZyVDM3YjNlTVpub09BSWlZMDZSaUFCUkN6SUhHRkxvZ2lWUWtBcFVnVUJrQ0hFU2toQUIrZndyeTg0T1lWdjRQY0xuY2NMdmN5TWpJUkU1T0R2THo4cEdlbG82OHZMeFJvUVlZRVZRbVJCd09COUxTMG9ZMWFmMTA2eWU0L1pkMzRwUlRUOE1qanoyQm1xK3E0NEtIaXFMZ3BSZi9DRUtBV2JObVd6NWsxUXhrOVBRY1FFTkRBOHBLeTNEVjFkZmdsVmZYWWUwTEx4NDdpbzAzUzJmT25EbE1zWTJ3VVdJc0VFS3NOdU9ta3FOY2dxL09lclFEMEcrLy9YYjk5dHR2LzQrV2xwYTYvUHo4ZnlHRUhIY283OU1oeS9CNlBIanhqeTlnd1VrbjRhdnFiV1BHaDJaUDBIM3dnZnZ3NEFQMzRmUXp6c1MvL2VwdWxKYVc0ZGUvK1MzV1BMVWFIZTN0bUZ4WWlJZFdQV0pOTTFyMHc3TlJYYjBOVnkyN0FxSW80ZHpGUDBGcGFSbjIyOHFGYnI3NVZxeGErWkJ4Slo0OEdjOCs5d0ljRGdjZWZHZ1ZWai94ZTd6NnlwOGh5ekpPUHVWVVhQa3ZQd1ZnNUNtdWZPZ0JTSktFaXk4OEw5NU1mT2xsQkFLSFA1ZndZRi96RjlkZkIwS0F3c0lpM0hMcmJVYzFqMDBIL2J3aHNyZnlsSmI3NnRBNGxPSmtVMnJXTGNGUUh6VUFSaVVCaUE1UUtnQlVwSVJLZ2dCUkEyUWlVaWNrT05QU2gyby9mVDRVRkJRTTVhbVpnWUlkTzdZUGkzNG1XMDFOVFVoTFM4UENoUXNCQUo5Ly92bXdtUjhYWERnMDdDZ3pNeFBMYnh1YWY3Qng0d1k4L3RnanFLZzREZzg4dU1xQzVLSWZubzI2dWpvc3U5SlFjNys0NGNaaENsczZGcjk0cWFtcG1EVnJsdFVPaFJCaTNmTDczSDBXM0FCUXJxcEI1M3h3aVV4VHJhQ2c0TVBYWG51dDdweHp6cm5BNVhJdE85ajNxS2dxVHZ2bmhmajlZNC9naGh0dnhoL1dQSFhNSGNjenoxcUVNODlhTk96KzB0SXlmTFJ4NURtbUo1NjRJT2tYMStsMDRxNS8rM1hjZmRmOGJIamZ6M256L3lsaE04U1MwbEk4OXZqcWhIOWJGRVY4dU9GL2orcHhPcGpYSE8xNGZkUGw5eWZQa3h3SWgvLzAycjRQMzcvclFHVWZaM3JHRWdITjlLY3BBRFdnUmcyZ0VRcWRnRklDUWtVUUtpb2FKQUF5a1F5b1FZYmI0ekdTYi8xRFByWHM3QndqcGNQTVUvdmU5dzYrV3RHcTJQbWFhOEdDazdCZ3dVbkQ3cGNrQ2JmY3VuekU1eDZUWUdNZk5BODMrNVlBY0JiY0ZFV2hab1VDSDFTZ1hLVUNVMjhhQU8zODg4OXZCZkJrYTJ2cmwzbDVlVmNTUWtadHdxNXJHcjUvNGdJME5UWEZSWG9FVVlSK0JKdDNUcXp4dVVSUlJEZ2Npc3VYMUhYOWkxMjdkbFdlOG9NVGQ0QkxaeG9CYWpFeXBOSllkdzZkQUdhUWdFQUVvUklFeUJBc3FMa2d3K1gwd09QendlZnpXVDYxbkJ5alRLcW9NSEdlV3FMbDhYZ3hNQkErcU1jZHlTVWR5eCsyMSt2RjdObXpJWXFpdFkwQ09tb3FPQll4dFFjVm1HMnEyMDFUQUZvd0dQeGc3ZHExWDExd3dRWG5lVHllbjQzMi9qSXlNdkIvZi9HdjZPZnkzUEx6ZzlqZDNJUllMQWFxNjZpdHJVRmhZZEVSTzBadXQyZUNDb2Q0Ykw3Tlk1YnN0WE55Y3REUnNkY0NXeWpVLy93ZlgzaitvL3Z2dXpka1UybDg1SlBmZUtpWlppZDBFMmpVaUh3S1ZBS0JURVRxZ0FnSFpMaUlETGZEQTA5SkRueG1TZ2VER3QvOTFwNm1rV3hOS1M3QnJzYjZFZUhtOFhneHBiamt1d3Myd0NpL3NzUE5EcmtFSmlwVGIvWXFCY3I1M3BocHFwdW1xUVpBWGJac21iWnMyYkpuNnVycVBpMHVMcjVFRk1WRHlzbkl5OHZEcWFmOU15Ni85Q0trcEtSYVpVeEFmTHJIVjlYYjhNVGp2OGY5RHp5RXFTVmYvME5PZEtXZldFRFlITktiYUFuZjBqRUxoL29oSmtraG1UUnBFdHJiMjlIUjFycGhkMHZyMjB1WExHNUtvdEo0bnhvTGpNV0dWSm94UmNxNGNCczFuNElnVWtrU0lVbG1odzZIREFkckVtbk9LR0Q5MUN6ek16L2Z5Rk9iVm41SXFUWXBxYW1vT0c3dXQvNzVIOUdaQjRkelVVcXQrUWt0TFMzbzZPaEFWMWNYZW5wNjBOdmJpM0E0akhBNGpFZ2t3by8vSTl6Z1pxTHJPcHVsUUFDd2VRcWlDWGlaVXVvQTRBRGdCT0FzS1NseGJkbXk1VWVOdTNaZG1SczRPb00vOTNic3dkeEQ2UERSMU5TTTd2MzdKenJvRGp1T2Jjakt5a1JoZ2s0VFRjM042TzQrK3Nkc2IwY2JNak16VVpTZzBTU2xkRTluWitkL3pwa3o1NU9Pamc3RkJyVm9Jb1VHSzlwSlZCaU5JVFRURXFGc015dDBJRWtTSk1tYVV3QW5CemFQeHdPLzM0KzB0RFJrWkdRZ056Y1grZm41bURKbHloR3RKZjVPS3phTHdJUmc1c3laN0FNYXB0enN0K1kyTEdKS0NLRW0zTUFyTjJhYXdwaEdyd0ZRNit2cjFZeU1qTW9ubjN6eWt3VS9PR1Z4UmtibWxVZjZpaTdMOGlFOXA3QndNcnE2T3JHM293MCtmOHJFeklOUVAwS2hmbWlxbWhCcUFGQlVXSWpPenFOM3pOaDcwalV0SWRUQzRmRExiN3p4eGtlWFhYYlpnVkZVV3BSVGFOWkVkbE9sYVNiTWRBNW1Sc2RiMmRiSzI4MzFValBiZVdkblp5TVFDR0R5NU1rb0tTbEJlWG41bUQ0UHhveGk0MWREUXdQcTYrdlIzTnlNOXZaMjdOdTNEL3YzNzBkZlh4OUNvUkRDNFRBR0J3Y3Q1V2JPWENEY0dFQmV2UW1tZWhOTTBFc0FKRTY5V1FydS9RODJWRXdwTGw0cWl1S1pSK0wvMWJtM0haTUN1WWZjdG9oU2lsMU56ZGkvdnh1YXFpTVMrVzQybjNTN1BSQkVFVm1aV1Nnc0xCaFZiVFEzNzBiWHZuM1FWTzJJSFRPMzJ3TlJraElxTlVWUi9ydXFxdXEvNXMrZjM4SUJMUm5VRXBtZDZwRFphUUhObUUxZ0FzMG9aSTlYYUY2djE0SmFSa1lHc3JLeU1HblNKQlFXRnFLa3BBUlRwMDRkOCtmQ21BUWJBTFMwdEdEbnpwMFczRG83TzNIZ3dBSDA5dmFpdjc4ZkF3TUQvR2kvWVhEVE5JMll3NXZabUQ4R04yYWVzcEYvTWc4M0FNNVBQcTFha0pPVGUvN2g2dFE3RUE0aDFOOEhnQjcyUnBNVDY5aGJ1cTV2Yld4c2ZMdTB0TFRXVkZ4MmxSWkxvTktVQkNwTjV6WnFXakJKb2VZeDB6bjgxbnlDZENQeWFVS3R0TFFVQldZbHlWaGYwbGg5NHdVRkJUQ3JEbUFXeFZ1M2ljeFYwMFNsZ2lBUVFSQ2dLQW9saExDR2wvYkFnaFVwSllRdzA5UTZBWStmZTl6N0pTVWxteDUrK09FelVsSlN6aWVFZkczZDd2ZjdJVWtTOHZJbUlSQUlUSHpyeC9HaWxPNW9iMi8vNjhLRkM2dHFhMnNaek95K3RKak5oOFpEelJZY3NJWVhVMUVVcVNpSzF2ZEJsbVhLZXU0eHFIbTlYZ3RxUnBEQWJEdFVXSWl5c3JKREh2MDRBYllqdEhKemM4R2FVUEtBU3dRMXp2ZkdaaUVTUlZGQUNHRUp2WlFPRFRYVmJXa2hHZ0RWbkcrcW1QNDM1ZHh6ejMzcmpqdnUrUERXVzI4OVBTMHQ3WHhDU1BIRTEzZGlKUURhcnE2dXJyL2VmZmZkVzllc1dSUGxUTWxZQXRPVDNTcDJzNU9kaTh5WHhpYXkyMVdhTE1zVzBPeFFZd0VDbHM1UlZGU0Vzckt5WWUyRXhyd3AydFRVTk9iL0U1RklCSTJOalZhMGROKytmVmEwTkJRS1lXQmdBSU9EZzRoR281WlphaGJvRWxZenljeFNMbXBLYkthcFNDbVZtSW5LK2Q4Y0FKeTMzSEpMeWhWWFhMRXdKU1ZsNlRkcGFqbXh4aFhRR3ZmdjMvL21talZyUG4zMjJXY2pIS0NVSkVDTGNiQ3pSenVaVXJPaW5jejg1S3dVcTlzMFUydDhvQ0ExTlJWcGFXbm0zTThBQ2dvS1VGeGNESmZMTmU2Ty9aajFzU1U0aWJCanh3NDBOalppejU0OTJMdDNyd1U0RmxSZ2dPUDlic3ozeGdHT21GMTlDZk8vSVQ0MVJJUVJYRWdFT01meTVjdjlLMWFzT0RVakkrTmNRc2lNaWEvM2Q5S0hWdFBaMmZtM1gvM3FWMVhQUFBOTWRBU2cyVGZGTkR0VkRtWWFiM2JhVlpxcDFPS0FsaWp5eVlER1VqbUtpNHN4YmRxME1adk84WjBCRzF0TlRVMW9iR3hFYTJ1cnBkNE9IRGlBdnI2K3BFR0ZCSUdGdU1ncFUyOE1jaGpLZlVzS3VPTGlZc2ZHalJ0UHlzM05QVnNRaEJNbXZ1N2pmMm1hdHJtbHBlWGRrMDQ2cWJxMXRaWEJpUWVhY2hCQVk4K3pBZ01BS0IveFpDcU5EeEFrQ3hLa3hFMW5EeUFZREtLNHVCaEYzOUlnNHdrZjI5ZGNSVVZGZkZ1ak9CL2NLQUVHZGlWazZvMXFtbWJsdmNITWRUUFZXMXh3d2VaL2l3RndORFkyT3ZMeTh0NEY4RkZkWGQyY29xS2loYklzLzNqaTZ6LytWalFhZld2Nzl1My9NMmZPbkYwY3pIaVZGa3NBTlNVSjBQamdRRnlTTGEvU2VMUFQ0WEFNODZjeDA1TlA1eWdvS01EVXFWUEhWWkRnT3dNMndBZ3E4SDNiWEM0WCtKUEFEcmRJSkdJQkxoYUxXWkZUQmpjdXVFRDRrWCtzUXdpTWZDSVZnR0lxT0F0d0FCeGxaV1ZiQUh6KzdydnZ2anB2M3J3ZitIeStzd0VFSjVBd3BsMGZyZjM5L2UrOC8vNzdueTFldkhoZkVxQWxncG95a2tJekw1aDhsQjRzcHNXdGtKVHlBQUFUVGtsRVFWVG1CdWk2VG5WZGg2WnBWbDh5UlZHc0JIV202QndPQjhMaE1OeHVOL3I3KzlIYjI0dnQyN2RqKy9idGgrVVkrUDBwRUVYQlNobVpNRVdQb3QrdHJxNE96YzNOYUd0cnc5NjllN0YvLy80Ui9XNW1LVmJDNEFLWDFBdlROR1dsV1hGQkJwdUp5cHVxTWdESEpaZGM0bHE1Y3VYOG5KeWMweVJKT20wQ0UyTm5xYXI2Zmt0THkvL2NkTk5OdFgvNXkxK1Vnd1Nha2dCbzlxQUFnNWxPaUFDanhsT2dnaWhDRWtXSXJDUktraUU3WkRoa0I0eXA3S1pTYzd2aDhYcmg5L21Sa21xTXhzdkt5a0p1SUlCZzBBZ1NIQWwvV3BqTHdaeDdET1Znaml1d1hYVFJSWGoxMVZkeC9mWFhZL1hxb1g1ZnJhMnRhR3Bxd2cwMzNJRFBQdnNNNTU1N0xnb0tDcEw2M2JpRVhwaCt0NUdDQzJRVXdFbEpBQ2NEa0JjdFdsU3dkdTNhK1RrNU9RdS9TVDdjeERxaUY4Z2RQVDA5SDN6MDBVZGZMRjY4dUp1RFVpS2dLVW1BcGlZRG10a2prREpmR2hFRWlLWXZUUlFOb0VteVdSb2xPeUE3SEhDYVVITzdYSERINWFnWjZSeFoyZG1tK1RuNXFLaXB6cjN0eUpzVU9HWnlNY2VkS1NyTE10NTQ0dzA4OGNRVDFoVXFHQXhDRUFSVVYxY0RNRHAxQmdLQllUNDRleTVjTEJhREtJcFFGSVZsZFpORTVxbk5COGM2aFFpbWlTcHhKcXBrbnZBVzJOYXZYMThmQ0FTYUFieStiZHUyOHFsVHA1N2dkcnRQQXpCUjFmN3R3cXh0WUdEZ2c1cWFtcXA1OCtidFpqN1Znd0FhdjZtbVF0TVNtWndNYUlJZ1VFcXBtVjlwSk5xS2tnaEpaTFdlRW1UWllTZzFGaVJ3R3BGUHR4bjU5UHVOeUdkR1pnWnlzbk9SbDVlSHlZV0YxcXpOSTcyOFBqLzI3dDA3QWJZanRSWXNXSUFOR3paZ3k1WXRtRDkvdm5YL3hvMGJNV2ZPSEd6ZHV0VXE5alVuemNjQkxod09XMEdHU0NSaUFjNVViOVFlWE5CMW5ROHdKQW95YUFCRTg0b3RVVW9aMk94S1RwNDFhOWJuQUw0QzhQejI3ZHRuRlJZV0h1OXl1VTZaZ056Umc5bmc0T0JIOWZYMVgxUlVWT3ppMVZVU29La0hDYk9FUU9NREE3cXVVMW1XTVV5bHhabWVUcmo0ZEE2dkY3Rm9GRnMvK1FRWFgzSUpNak96a0dPbWN4UVZUWWtiUlB4TlYyMXREZDUrNjAxVVZNekI2V2NNTDVYMmVuMEk5ZmNlTTUvbHVBTmJSa1lHVGozMVZGUldWc2FCYmQyNmRiamdnZ3Z3NmFlZkloZ01vclMwRkI2UEJ6VTFOYWlzckVSUFR3L2NiamZLeTh1Um41K1B3Y0ZCU0pLRW5UdDNZdCsrZmRhZ0UwbVNhR1ptSmtSUkpLRlFDSkZJaElxaUNOYXhGd0FSUmRFQ25LN3JnbWwyaUdia1ZEUlBmR2FtU2dsQUo1V1hsMjhGOERtQXRWOSsrZVcwNHVMaU9SNlA1NFNKM0xqRHUzUmRyd21Id3gvdjJMR2o1dmpqaitlVm1jNkJhU1NncVJ6UTdPWW1pNXpUWkVCajZSdXFxc0xoY0VCa0hUa2swNEpnS3MzaGhOTTEzUFQwcDZSZ3puSEhJUmljYktSekZBU1JrM040bzU1UFBia2FqWTBOR0FpSGg0MWw1TmZSSEN6K25RTWJBQ3hkdWhRUFAvd3dIbnp3UVFEQTRPQWcxcTlmajVVclYyTEZpaFZJVDAvSDdObXpVVmRYaCtlZmZ4NlhYSElKQ2dvS1VGdGJpemZmZkJPeUxDTVlER0wzN3QzbzZ1cENhV2twWkZsR1QwOFA5dXpaZzRHQkFhU21wdEpZTElaSUpFSjBYWWZYNjZXYXBpRVNpVURYZFNwSkV1R2lxTVM4V2dzMk01V3ZhT0EzSG5UUzdObXp2ekNWM0t2cjE2K2ZOSGZ1M09scGFXbHpaRmsrQVVEcUJKNE9hZlVxaXZKeGQzZjNsNXMyYldwWXNtUkpONFlpa2NuVVdTS284UjAyVk50emRVNmhVYjQvR2t1d0ZTd2ZtaEhCRkFTQk9wMHVQajhOc3NNQmdSRHMzcjBibXFwQ2xDVE1ualViK2NFZ0tBWCszOXR2UVJBRXBLZG40SkhISHJlc2tGK3VXSTYydGowQWdKNmVIbmk4WHZ6NWxkY0FHSjF4bnZqOW8ranQ2MFZHZWdadXUvMlgxcEFlQUhqdFAxOUZaZVU2Ni9FQWNQVTFQNFBENGNDcWxRK09tUTk1WElKdDhlTEZ1TzY2NjFCZFhZMlpNMmRpL2ZyMW1ENTlPZ29MQzYzSGVEd2V2UHp5eTdqNDRvdHg3YlhYb3EydERjRmdFS0ZRQ0pzMmJVSkZSUVZ5YzNQaDkvdVJsWldGU0NRQ244K0hmZnYyUWRNMHVOMXVSQ0lSQUtEcDZla1FCTUV5VVZWVmhTaUtiTllDaTZJUzB6UVZ6UHNZNEVUeml5S1pxazYwUVk0SG5iUm8wYUpkQUZvQS9MMmlva0orN3JubmlvdUxpNmY1Zkw3WmtpUjlEOEJFSzEyYmtGQlY5ZE8rdnI3cXVycTZ4cXV1dXFxMXBxWkd0eWt6eldZNkpnTWFEelArT2JyTjNMUVVtcmtoR2RCWXp6UkNDRnd1MXpDVnRxZHREM0t5Y3pCOXhneW9xb3J0dGJXWS8wOG5JRDA5SGQvLy9vbUl4YUo0OVpVL1l4bzMzL1QrQjFjYUJPL3R3Yyt2dVFvMzNYd3JBR1BPNTMyL3V3ZS91KzhCVEpvMENlLzhiVDNXUFBVazd2N05iNjNuVnN5Wk02enpzTVBoR0hNZityak5ZMXV3WUFGZWYvMTF6Snc1RSt2V3JjTjU1NTAzN0hIVjFkWG82dXBDWldVbHVNbFcwSFVkMmRuWmNMbGNhR3hzeE02ZE82MDBFVVZSa0pLU0FxL1hpNEVCbzRlWDMrK0hwbWxVVlZVTURnNFNWVlVoeTdLVmEyUkdVVmsrRWpYSGFRMVRjS2FaYWxVMmNKQkxCRHZwaXkrK2tPYk9uVnNOWUR1QXR3b0xDOFdYWDM1NWNtbHBhWEZxYXVvMFdaWm5Fa0pLdmtzVW81VFd4Mkt4cnc0Y09GQy9mZnYyNXNzdnYzeHZhMnVyYmxObGlkUlpNcFZtL1k0bFk5ditCdTgzaXpNM2VhQnhDZUJ4UUdNS2pSQUN0OGM5bE1aaG1wN0JZQUYyMXUxQVcxc2JTa3BLY01sbGx5RWozWWg2QmdJQlJLTlJ1TjN1UkNZMmZuUDNyM0gyT1QvR3ZIbUdTMmJYcmthMHRyYmdEbk5ndDA1MWVHMURWY3JLcHFHc2JOcVlQdytrOFhxQ0wxMjZGR3ZYcnNWdHQ5Mkd0OTkrRy9mZWUrK3d4NmlxaWx0dXVRVS8vYWt4MDdLOXZkMXFPUzZLSXQ1NDR3Mjg4ODQ3S0M0dXh1VEprekZqeGd4VVZWVkJraVQ0ZkQ1cmlJdlg2N1ZTUTJSWnB0Rm9GRTZuazVqUlUycUxvREt3V1ZQc0thVzZlUitEbkFBalJZQXZ3QmR0Z0J1MjM5emNMSjU0NG9rN0FOUURlQmVBdUdyVkt0L3BwNStlbDUrZlA5bm44MDJSWmJsRUVJUnBNSHJMamVVVjFYVjlSeXdXYStqdjcyL2V2WHYzbm5mZWVXZnZuWGZlT1FndUoyd0VtQ1dEV3R3K3A4eml6RXliT3FNMm9GRytrd3pmWWNZT05MWUJnTmZqalE4UWVEekl5OHZIak9uVGNhQ25CenZyZHFDOXJRMDMzblFMSnVYbElTOHZEenQzMWlVOE9QL3g3Tk53dVZ5NDdQSXJyUHNVUlVFZ0VNRGFGMTRjOXhlNGNRdTJKVXVXNE1ZYmI4VFRUeitOc3JJeVRKa3laZGhqcGsrZmptM2J0cUhFSEtaU1VsS0NaNTU1QmhzM2JzUlZWMTJGVFpzMlllSENoVml3WUlHVjg3WjU4MmE0M1c3NC9YNXJxclhYNjdVaXB3NkhnNWtWbEc5b3FXa2FCRUdncXFxQ1VncFJGQ21sbEpoQkI4S3BPRlo0VHpqSUNTYmtoQVNRRzNILzFsdHZIUVRRRGFDR00zMkZ5c3JLclBMeTh1eXNyS3hjbjgrWEo4dnlKRkVVZzRTUUFnREhTcnVIQ0tXMFJkTzBQYkZZckQwVUNyVjNkbloyMWRUVWRGOTQ0WVVITUpTZHI0OENzMlFLTGVFK0J6UGREak1NRFFDaXlkUlpJcURaaXRhdGpVWGpBY0RuOThlVlJ2bDhQbXpkK2dtbVRTdkhxYWVlQnJmYmpYdC9kdyttbFpmRDUwdnVjZGk0Y1FNKy9PQUQvUHZUejhZbDVaYVVsS0N2cnc4ZmZmZ0JmbkR5S1dob2FFRE5WOVg0MFkvUHRSNnpjMmNkcXF1MzRTYy9XVG9CdG1OeEJZTkJ6SnMzRDNmZGRSZnV2UFBPaEk5WnNXSUZ6anJyTE54OTk5MjQ5TkpMVVZOVGcrWExsK1BtbTIvR2pCa3prSldWaFk2T0R2ajlmaWlLZ3ZmZWV3K1JTQVN5TENNOVBSMzc5eHVUejMwK24xV3h3RTVTdDlzTlZWV3hmLzkrcWlnS2ZENGZKRWtpZzRPRDBEU05NajhHU3hjUkJJRVYyNE1CYmdUSVdZQ3lkUjBaYWVPVGg0VWxTNVlNQU5qRC9WMzJHdVRSUngvMXpabzFLeVVRQ0tTa3BxYW1lRHllRklmRGtTSkpVb29vaWltQ0lQZ0lJVDVDaUpjUTRqWkJ5Qm9Bc05jQ0J3WnJiQnlsZEpCU0dxYVVoblJkRDJtYTFxK3FhbDgwR3UwYkdCam83K25wNld0dmIrLy84c3N2UTh1WEx4L2c0RVZ0SUtNandFeTNLU3h0dEkxMTBVZ0FzamlZOFNBRFM2ZzFwNlR4NWlhRG1hMnRVQnpRV044MHA5TUpTaWxTVTFOdHJidFRjZFpaUDhTNzcvNDNHaHZxNFhRNmNlZGR2NExQNTBOcmF5dHV2dkZmb1NneDlQYjI0b0x6bHVBZjU4N0Y3Yis4RTZzZmZ3eVJTQVRYLzUraENaS3JuL29EL0g0LzduOXdKUjU3NUdIODRkL1h3T1B4NEdiYjRPR3F6ejVEWmVXNk1RKzJjVmQ1b0tvcTFxMWJCd0JZdVhJbGJydnROalEwTktDNDJPZ0JLVWtTWG5ycEpWeDAwVVVBZ0QvOTZVKzQ3Nzc3VUY5ZmowQWdnS3V2dmhwMzNYVVhDQ0hZc21VTHJyNzZhdFRXMXNMajhhQzgzSml2V0ZWVmhXWExscUcydGhaLy8vdmZzWGp4WXF0cVlkZXVYV2h1YmtaRlJRVVVSY0hPblR1aHFpcUN3U0NibG9YdTdtNm0xQ0FJQWp1eENlZUxzeURIOWhOQUxnNTJuSm9URW9Fc3dUNS9tMmpqWDJla0RRbHU3ZnR4YnJBRSsvenRTSnNkWlBZdG1Vb2J0czhHOXlTQzJHZ3dZL3UyeHFVSEJUUmVwZkhOSUh0NmVqQnBVajY4UGkvOGZuTytwMW5BbnBzYlFINSsvaUdOd2ZzMlZzUE83VGo1NUpNbndEWldWbTl2TC9iczJXUDUzK3oxcG14NGpMMlpKVmR6Q200TW9GVzh6TXhVUHNqQXlyVzRzaTMrY3lJMjBNVkJqbElRZ0E2RDNTSCtuQWhzUE9DRUJGQWJDWEFqd2MwT05DU0EyRWdLVFUraTF1eU8vVkVoWm5zOTNtL0dZR2JkY3FhbmZYQTN0WGR0WmpCenVkeElTZkVQYXdMSkZGcDNkemNLSmhkWnpTQXpNak90NG5LL1AyVk1mRStPSmJDTkcxUDBoQk5Pd09iTm04ZGNFSSsveUtTbXBqTHpsSEpkSEFqWDNZRVFRdUpVSEl4eGdjVHcwMEVBQ0VrRUpVb2gyS0JIUmdIYVNIQTdGT1YyS0dBN0ZMTXpHZUNvRFdnakFVeTNBd3dnbEJCUWdJQVFDMlFHekFRQkFqRWhKZ29RK1JJb3RobWxVRU5xVFpZaENBUUNJVkExRGRtcHFjTWFRZnI5ZmhCQ0VBd0dvV2thZkQ0L1VsTlM0ZlY0MGRmYmg3N2V2bVArUk00UEhsdk5hc1lOMkRadDJuVFVYb3NmMk56ZDNSM1h5REljRG8vVXFkZFNib3FpV01yTlZHOThEU3JoRkJ6bGxCeTdwVFpUbGNGRTU5VWRyN0lJQVVrRVBRNlNvNEZNR0FWb3lhQkdFa0I4TkxWR2t5aTNaS0JqY05KSGVnNXo5ck9ac3B6elA1RXFzOEdNUUJEWTdGcUJDc0x3bVJxU0pCbGdrMlRJSnRRY1pxS3QwK0dBcnV1UUpCbVptWmxXNVFCckJDbUtJb3FMcHlMYm5FVXdzU2JBZHRSWFFVRUJjbk56MGRiV1puWHBUV1Nlc280aEl3R08zeGpZUm9NY0J6aG9ta1lKa3hoRFFJdURqVTNoeFVHUFN6MFpCakRUdEIwSlpFZlN4MmI3bVNtcHBNQ2ppWjdQZGM3QXNIMkQ5Z2JRQ0FFQkFSRUlGUWhCbkRvekZCb1ZCUUdDS0VLMFEwMlNJRW5NcDJaQVRYWTQ0SkJsT0V5ejA2Z3FFQ0dLQWdLQmdOV3VteldDbEdVWjAyZk1PT1NCMlJOckFteUhkVGtjRGhRVkZWbUE2K3pzdE5xUTkvVDBvTCsvZjBUL1d6TEFjZjQzcTRNSUR6a3VpZGlDbkdtZUluNjRQYS9jQ0V4QVlRaDJJT3c3bmd4WU5wVTNxaitOc24wNmltSWoxczNCUUc0VTRQRS9HK1lqLzNkc1RuOEFvTHBPSVFnQ0RKNFJhdlkvQTdHVW1jQUZCa1RUN0RSdmVZVW1Nb1hHQWMxVWFQSEJBVGM4SHNPWHBpb0tKaytlYkxYclp0T2lvdEhvaUZBalZWMGdUMVlCOVQySC8yUXVTUU85L2pqUTQ3SW53RFllRjZVVUhSMGQ2T3pzaEtwcGgxVFVHNGxFME4vZmI1bWpiRXZXeUpKdGxBSTZwWkFrQ1U2bmN5VEFRZE0wdnByQmdwd2dpS0JVcDdwT1RjRHBvQlNnb0t6OUtnQkNUUENaMzNlWUlCd09LaTZnUkVhNWpkdTNlSFZ3L1F6cElTcTUrRGVmNEhkY3poWmwrYytpS0ZyUFllYWxwbWtRUldrWXpBaWZnMmI0enl5b2plWkhrMDJ6MCtGd3d1RjB4QUhONHhtYXZENFE3a2RwYVNseWNuSVFDQVRnOVhvUDdnUmJYUVUwOUJ5WkU3KytCK1RKS3RCbno1Z0EyM2lFV2xWVkZVQUVlSDErZUwwKzVINk4xbEtEZzRQbzdPeEVkL2MrOUppVDZmdjYreEFPaFJBT0QyQndjQUNSd1FnaTBRaGlwbm9iR0J4RUpESUlWVkdNcTNwaTh6UnVZNHBOVlZWSWtnUmRwMFNuT3FpdXd3Q2NNUnFWUldWTkFCRFo0WUJ1bXJxTVJ5eTZOOFFuQWs3TklZbDV5WU1TQjJHQ2pnSTJBa0tTQWk0T1dQR1A0MzRtaEplYW9KUmFkWmpzLzBnSU1TcEVIQTdtTzZNTWFoYk1ERC9hY0xOelJLQ3h0a0l1dU53dXVOMGVlTDBlZUgwK3BKanBHMm5wNlFqMzk2S2lvZ0llaitlUXppdHlwS0RHd1czQ0ZCMkhxNk9qQXlBQ2NuSy9XYmRSdDl1TndzSkNCQUs1Nk9yc1F2ZCtNN2pRMjJ1WnB3TURZUXdNR0RDTFJxTndlenlJeFdMbzcrdUZKRWx3dTkwam1xaE10V21hQmtWUklFbnlVSkJoQ0c1RVZZMi80WFE2emNlWS9qaFJoSzRiMWxzMEdqV1VpaWhpeUpaRkhOZ1NwQVF4Zm1Bb2RrRVRYaXlTdGFObWJhRGkxWlQxUEdyL3ZablF6SVBOQWxnQ3B6OElJZEEwRFE2SHd3SWFNeThCd09sd3hxZHFpSUwxR1ZGSzRUTHJORjF1RjBSUndoZWZWMWwvMStQeG9LUzBGSG1abVhIcEczYUY1dmY3a1pLYWl2VDBkR1JtWkNJN0p4dXR1NXNPR1dvVGF3SnNYM3QxZG5iQjYvTWZ0ci9uZExvUUxDaEFZTklrTS9ldDIxSncvZjM5Q0lWREdEQVYzT0JnQk5Gb0JBNVp4dURnQUh3KzM0ZytPSDZMeFdLUVpVZGNBYjhKT0txR0ZCQkM0UGY3VFJWSENhVTZkTXBNVm1vTXJ5RUNaRW5pL1hTY3YyN0lGY1lCei9xSERPME5neDhiTkdLREcxVlYxWUlWcFlDbXFTQ0VRaENNYWd4RlVVQUVBWkpvdkNkVlZhRHJsQnJGNGtNcXpYTDYyemFCR0NhbXBxblU1WElOeXpkajRPS2hGZ3FGRUFxRlVGdzhGUzYzRzNzN090RFd0Z2V6WnMwR1UzM2ZPMzRlMHRMUzBOZlhoK3B0WDhMcGNHTEd6Rmx3bXdyTjQvWEE1L1daTGJvTmhaYVJrWW5zN096RG1seWIrZnhpS05XZDZGdjF2d0NBakNkK2lJRzM2aEI1cHo3cGMvelhIUS9uS1VYWWQ0SFJqc2g3K1d4SVU5TFJlOCtIQi8yNm96V2JQSmJXL3djYUx0Ynd1T0xUcXdBQUFBQkpSVTVFcmtKZ2dnPT0iXSxbInNyYyIsImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBVFlBQUFFMkNBWUFBQURydkw2cEFBQktvbnBVV0hSU1lYY2djSEp2Wm1sc1pTQjBlWEJsSUdWNGFXWUFBSGphcloxdGx1VzRyV1gvYXhSdkNCSy9PUnp4UTJ2MURIcjR2VGNqczF4VnRsLzdyVzZYcXlJejRzYTlFZ2tjbkFNQzBMWC85Ly82cnYvNnIvOTZTbXZoU3JtMjBrdTUrVi9xcVllWFA3VDc1My85L1BlNTAvbnYrVjhzdi83MC9QWDcxeDgvQ0h5TnZ2TG5CL1g5K2ZxOGZELy80eGQrZjhZei92cjlxLzM2U1dpLzN1alhEM2pqbnl2d2svM3ordk5GOHYzdzgvMG4vWHFqdm4vK1VIcXJmNzdVOGV1TjVxOFhua3Y1OVcvNjQ3Sit2dmozNnkvZnFLelN5bnhRREdISEo5N252K25uQ3VMUHZ5Ly8xdlBmd091ZUdQbnpFOXQxdnZ5K0pSYmtMN2YzKyt0OS8zbUIvckxJdi85MC9YMzEvL2pUM3hZL3ZMKytILysybHVYWEd0M2xYLy9neVgvN2Z2empZOEpmek9HUEt3cC8vY0VZNlo5djU5ZS8zN2ZhOSsyZnUzdFRZVVhMTDRzNmkvMzhmaHRlT0ZqeWVINnQ4RS9sMzh5ZjYvbW44MCs3MzN1eTVldWU5K0NmK2ZRbnNDdmY5YVJuUGUvelBmdDhuYy9rRWxQWW9mSTFoQm5pK1Y2TE5mUXdvL3VVL09mNVFvMDlydGpZeXhuMnhmYWxHUDY0bHVkOGJqK2ZONS9HSjYrSGw0YUhOM3Y0bFgvN3ovWGYvZkIvOHMvMWZkTWxldTcyeDFweFhVRzc1akxjT2YvTHE5aUQ1L3UxYi9rczhPOS9mbTMvL1NmN3dWVFp3WHlXdVhHRDd6MSszbUxrNXgrMkZjOCtSMTZYK2ZxenljOVYxNjgzWUluNDdNekZQSkVkdU1zVDgxT2V1NFpRbjRkMWJHelF5NVdIbU1KZ0I1NmN3K0lpUTRxeGhLdUdGdnhzZnFjKzU3VWhoeEw4TnRqRVJ1Ulk4SzNHRHIxc1Zrb1orNm1wWVVOdmpqbmxuRXV1dVYyNTU3ZkVra291cGRRaXlMMDExbFJ6TGJYV1ZudDlXMnlwNVZaYWJhMzE5dmJRSXhpWWUrbTF0OTc3KzRicjVZTmUzdXZsOVMvZkdXSEVrVVllWmRUUlJoL3Z4SHhtbW5tV1dXZWJmYjRyckxpQWlWVldYVzMxOWU3bjJpREZUanZ2c3V0dXUrLzN3OWErK0tVdmYrV3JYL3Y2OS82eGE3OTI5Wi8rK1IvczJ2TnIxOExaS1Y5WC85ZzF2bnZWK3ZzdEh1RWt1MmZzV0VnUE8xN2RBUXc2dUdkM2UxSUs3cHg3ZHZlQVUrVEFSV2IzNWxxUE84WVdwdjJFL0QxLzdOMC9kdTQvMnJjcnQvOW8zOEwvYmVjdXQrNy94ODVkYk4wLzc5dS8yTFZsbkp0bngzNjgwRFc5STk3SGE5N0FGWDFqZmZ5MXhDKy84YXZqMjdOdVlkSWYvK2MvdlY3dlo3LzE0VjdMdStwVGMwaWx2V3h1SEozTEdIUGlWMmxFTDJXL2laZU1IZExYV255NWc5bldNKzg5cmpCbkhMdTJKKzg2ZHN4ZmU0RzZiK3kxVjU0SmU5cVR6MXExMzJ2dDhYQWZNKzkzalRWQ0duenVFL29NcVY1UDQ2MG02NFgxM1h2WG1RWTJzTCtZNy81OE5lMzY4TE9ZNTczbUhwM3RIUFVlVDhwanMyT0EvOHN1WWxUWFRLTFZzK2FxTDhRa3gwMTRmZGZMT25RdU1lVEJubGJXSjR6U0FmWTN6L3FOVk4vd0xTeHJmaVhPWEVlNklEVjEzaXhHYlFtRDdrU1ozc3Yzc01GZjNTekdIUHh4eGEvTkw5eGNudjR6b0NGMThxNnh6b0J6enE5ZGJlV1MwbUtkWnI1SHVWc1A3UHNjUUg3ZnE0VTFTMXhoclB0TCtWc1kwRno0UVk5NXJ4cHEzeVd3RVNtWHE3U0hQZmxxNXVhTU4rdTcyWXpPNjl6WWY3UDV6OHlyY1RIQVFTejl1MGNxMXpEZ3hidVV0UWF3d3EyRnVQRWpEQk96aldzVXRqbHlLWFBFL1BJSkJjZC9CNSs4NDZoY3lvTWg4R3ZYR01lcS9qdUwreGMvbTZXTVdQYVk4Y09wOTJ6ZkZkWXFIZmVPaWJET1BXTWJLVXhYcHNjMlYvYlcxajYzK1h3dllQL0hXMk10SWJBaFJQcjJmQmVoL1FGOUZtQ0NLZlc1dWNmK3hsQXg0bWVYd1hLWDhSVSt2UlI4OHlQQ1l5ZnRUZmViV250NVQ4eDlyblcxOHVVSmlIM0huTXFMRFg3LzdncStmdlBpcjZWdngvcHhRVEdOc0h0Ym9PUDFzb1A4dFh3UkFNSzd1VXBRRE44SEZVYm5mbk1BU2NTczJPVis3N05lYkNBYUJSZi81bzlYNzY5ZVVoNHV2dGZ2aWQvWi9mMDFYZUZsaTJyQldwNVpndWF5ODRRbUxqeGs4LzZzSWV5R1QzMjBsVEJodFlTVHhJY2tQUXgzL1BhajV3NXNhb1JudlBWaks3aitZNWNkTUs2d0JSY3UxZGJmTC9MaGtYZTRObEc2bDhhT0R1Z1NLMVJUK2JCalhqbEhMOXQ3WHZ5aEZaYWtoNmZuRzJzTEtRZnViNy9TNzdyRzgxNnBqRldlZC9JcGdHdHZCQUt3R09OLzhsdnpSK0J2TlU3d2xML09BejR6cHhiM3lDek1malRIY1dOVTE4TTlWWnowVGJNMjdoNUhlOWRSRUptOWxJN0pMbExBMTBKZ0pmK2R5VjcvdVQwL1h2SEtHdzRYSmpmTkJSY2lUK2NlcERVM3hqZUJWVHhhT2xwRHdUS0pydlV0R3lOczd5N2xHNERBZ3BEbGN2ZlJpbXZFUlk5S0dKMVZUSG9IVjlRelZERUJwcE9RcHJrV1ByVHp5ZzF1d25uNC8vZXlpckVOWUpLVjRwNzUwekQyQVR2c3lWcFB2OHJUZExXT05RSlFmT0p1OGRDdXpYczloQzhDWWt4RXhNZFBHUnU4aWdSVklta3BzZDBFOC9SaUd2dGEvVTQ1Z28rZG5jZW5TOFpRSGx5clB4MThZSjltNUJjcWNjWlBXcVcrWHd0N0VqSW4vc1J2YmFJQWNZMzd3RnJaNWtCRVh1bmV4TS8rZU5zdmlBT3lEZEIxMTRKb1drRERBMFpoTWMvZ2QwZHEvVDdzRysrNVFPRmtWRFdDRFlKYzIxWGt4ZWkrQXRCa1FoUG9jRStDL2lEK3M3SjFQanZpOXgzR1V4OUR6cTQ1WFdQaTd2RVJFTURZeGtKeStiemxuQVQrR3JtaU1jcXp1TTNiMEFRUmdPaDhIU3dCL2lOK0dTQXJmTzlLOFNVOGNodjh6U1VocW1DNjVka3BHOGJBSlZaLzg0dG44VEdMbGdGckl4Vy9qemtsc0FFeUVhK1JGb3NPUUk2YXhTaG9GUHpxL25hQU9zQzI5b2RZTFFOQ1JkUWpYb3pBSGNBaXFtamEwaUljZjVOMXV6Wk9DSVpGU0VlcXdENlVZMGxDcHRZRGpFU1FzUzhpVFNHNFZqQ3NOTDZ1dlo4SmZNU1ZoYkV2dlZkSmE5OGd3ZDczT3dpM2tXQ2VYdXc4QXk4ZjcvSHRZcEM1VTJFbFo5dkljYkFLLzBPTHNWdllQcHp0SmtDK2hPUWJ1cGQwcHp1dnRVSW0zTDdiQ3dVRVNzejVXYmxCSE91SFMzUFJtTUtRSlJMU1lERWZzQkhZTlJ5K2x3eDI5bHN0QmJ6aVFSdkN4d2RqZmRBVUdDQXh6VVdGeExWYUNPRmpBOURneFFmZFpITUpKUmU2ekhDQ3pSUGVJVWg0TjVmUDRzUDFRSFo0M3MwTnNVNHBEYUltZG5BTEJqS24vdjVjRmplVzR4VXlSR2krSFhMWUMvNkN4QUtWY0NQOGpoc2hxT1pudndUbXNEYjJuRURWaVRNUVplL2FpWDdZS0phdjhJdlF4ZzVtOTRGNVlFejNCOW9BRzRtTDc4QXc5S2pnM1VSMGRoNEVaM1hlbk5oWjNwZGJ4V1Q3M250ZFMzNUJOQW9ZZDRzRHozZzdMdnBKQS9BYUtCWnZnQk1YMW4yOVdNbWNIZGJSY3lDWUpTVlc1WGQ2dmZTZVJQZ0k4QnRDOWF1ZHdDZ211QTZsSS83Y0IvV1FCa0FNWkJLK1dONVFGd3FoNUFGWTFjNlBCbS9VZVBsczNuWGlWckVNcENCMG5vMURYMWVNSXh2bmVvTkpnZ0VMcmM2YWFrdWJWWGxZbDRWbEJRSWtiTXJOVGMwZFJjZWtHZ2hvcUljMmMrdDU0b2tUTXdBdVFBYmVlMkUxaTFENlFNWUMwZ0NxU2VSWUY4eXVtU0tBanFVcUhpQkljQTU1R1ZFd3NaUlFwRGsvc0creElZU3JDVTBCUjNadVdncHNZY0w1MkRYQXZHdktQVWFpQXdJS2x3V3BXSFB6UGZ3V1ZCTmtqdEF3VENPV2I3NWdub3QrUWhXdndLbnJ2bnJDbTlZTDJ6VHlQVFVBeklRTDRESmtkQVdYRGdxaFBrQ1laMjNlSFJ3QmFOeHEyR3JxT0FnN2VvUFpnQWg0RHVKcWh2ZFRqVE5xc0JjSlhURENSSFI5Mk1EcFp3Z09OMkU3dzhwQmF3SXpEbG9ENEhvQjVIQ0xVREo0OVFiV0N4VGlBb24reUFEczVlMndpL0tDbkVRWGpIYjM1eDR2Q3h6QlVvSUlXOHJXb1VXZ3IwUWIvSE9OcEJXai8xaXhUdUJoWSsrcHo1NTBHeXNFUnR4dzVwNGpJVGRPSWhpVUFFSjhBL0lRclNlVmhZWUpRanM3N0gyK2NDUXVHWDhrSEJDOE96aUZIRzBoSmNJc1lWTWdMdGd2VXFVU1A5VU1GMFFwanU4dUh4NnNXZ256WXpIblU4SGtyK2NLeHpkU0FUeVREWUlrVHJidWdUQUNQQldUZnJHcmhHOWVMOUhLUDZKTStSTkdVSlArNnk5MWJpWEJzN2lxZ0o0QzFBSExoUVJDVmdTa1RKUTlZa2U0TE5RUHZJa2RKb0NPaWxJNUNkR0FrOVVYaEk0RUtaeDgrOEdHT3Q4WHFwYkN5OW9EVTVDS3lwSzFXY2VGZlV3WXdyY0NvaFg5M1JNc0VIN29Uc0FFMGJtOEFRZ3dDTVBwVWJSQjBJM0ZMNlFFbklhMHNNdDN2ZEFrMzBOY2hLR3lwSERhSmpYZXQxSWJVK3FUaTlrOVpKZ2Y5UGcxakhrRkV6S0dHNktGNzdJaDF3bmhSNmoxcGlEampTVU9vTklORkJwckJ5R08vK0JaZXN6NzVjNTFGUlRsQm9sYklPSmwvQnBKeDFaZUVjditqSTEzbDQrQ3dvRVk5TEsyUkVWZXlKMHZUTjBQWVZNSkZ4MlRhd2d4Z2pPWWl4SHRQSUNrQzdjWUgrOFA0bjFMVGY2OU4wNnZqZ1RtVW1oZ0M0dUh3NEVvMkNUT0FnRUQ2aUJWbnd1R1JZLzh0Z3MwakhzaEJGQUZEZmNObUVyMmN4QzRpK0J1S3F5ejZnTW43cUFRd1pOb2puYzExU3ZtR0hDOHVIRVJYZ2tNYnN4RzVNaUdZUUpRZmt0NkFOZTM0VkhObldjTkRpRDFrMVpFNDM1dk96RnA0akFENGNmSHNoTUp3aEpnNVRBRkZ1ZjgxZ0E4TUNlRFVkc0dJbHk1SnhPYUl4THAyRHN3Q3NrTW5zQjhMdmdBZkp4OU53b013UHJlSU4zTnZSQzdNZU1YTzRiRVRwWWZQdjZDZzF3Rmk4VjExd1RyZWdzYjJVYTRaSE1nQmFvZWlXc3VGYU5KWExNOHBCTnA5dEVvbU1lSUNlRDd5ckd6bDZWbEtURS9TRFpMUDVFUWdBdmsrTlhqbDJaRzRBZGxvQk80U0NWU3dmaUlJWlYvdi81RU16UklpVWVYSm1wT0JkNElZOHpyVFJnOGtRVyt6VzlYV0dFMFJUSkN4NGVKRWdBZ2R3SHlmRk41WHpFUzFQNDlzRnpvMzNvRVFaWWxYeTBaN0RHTDczTzdJakljVGNsNnZRQ0l2MDRVYmtab2ZpV1BEMUkrRXlTQmVBUEhiZnpwWFFpSkhTNTBZTTY5dzJ2TC9neTZCUFBLVnZ4YURoY2pFWWhRaWIyYmdJQUNzemhQVFRkUnFiRzF5QVFXdEpsaGYvZzczeFhIUzVBQmJLUXMxbzZqQ095QVVpb3plYkF3RVRWZlJnMzZTWWczS0czSk4rdk5HN1h3Qk5qZDRIS0krTUFQY2FraTVIQnRERGVqKzlnempHS1lNTVRKaUFBZzI1MzRYRmtOL0NHR2hjVmRFMHZlQ2s2azViY2lLLzF6UWR5RWx5VHFIYTcyNVVHWVFESHp1Wkcvb25wQjVZclNmUkNUZlVOR1lkWTNuSFBJWkFKeUQvNmNYendLQm9uUGNTUEFGWnJQZTRaVndqakdxTVh3U2lSOE5QRE94U0N6cXZENXI1YVZnSWlZUkpNVVJENWU4YjRxUHZpN0Y1TUM3MGNvYnhncGtwQXJZaStoS1lxTHBkOGs0aU4zK21IcGtLcWdac201aEhQa2xYbHYrSXFadEk0NzhUMkUyMjlidi83cFFoQWVLUEJ6SmdGU1lZNnNDT3h0QzNoM0FLSUQyaWplUmxsVys4R0xIaVJSdXZobDZUdWNLK0pWaElZTU9VSU9RRFVLWlA4TExNaG1sWEJzeURBaHlqd21sNy8rdGp2WDkzdHpjTkVjRGp2bURiaWhuUk9Pai9hUmZrYzJDeVoxQ0dEYmtERndGeFNxSzV2VUsxOVpGL3JtSVJ3VDdMeFRqMlpNRldmMkZpYi9uWk01S0J3b1FIamQzQlpzOWc5ei9jZEZzVWJiSzY4WksvbHUxRTh3ek8raDYwSzh3R3o4RFZuUmVLOGxyMFZheE5kTUw2UnU5M0diNlVXV2huakJmRk9ycHNyVVpWa1VoWEdFb2YzOXEwOG1aa2kxVFgraUxZQWErWEo5dUtKOW05dG1IV0NGSGJxeVppRFdvTGlBZkN6SENBZFlZcWNtdkJGUUQzK0R0MmJzR1Y0SHFRYW4wS2tROWc0VE80bW50eUpDUy93M1Y4SUs2TEd4d2poWXJGQU5mOHArSUJVeWVSR3VDdEVUTVlWQThKUjJtME1DODkrQi9YNTF3K2FnS093T2tmZE81dUtXeW1pZ0JBdnFMR2dLNE01MW44djQvdXlvZjc2UWp6MEc5cEN4alNoQzdNWVB3UisyRk9XTnIvRCtjUFRTRzhDR1ZtZ05KWHQvQlZZRyswUEJoeUdoQk53N0lUUEJBR1dxUlAveHFvMGdhWmdZNFA3ZUFEaWtBVFZ5N2VlRnR1NnQ5b0pPUWM0RkZSZzZ2UHJGMU1HZVhUL0UrZ1BxcGc5V2h0U0ZnQU8rQ0llWjNJc0t4RjdRUWVMMWN6d2ptM3NzQ01pQ2VxdlRvNVM0aHprbjJRMXZuRG82SFZva2hxc0x3VFRDMkFNRDJSZWhuc1dBTTNTbzJ3ZnRoeVpBR0Q1MzVYbjVWYVFsd211bXdtMFFOTUNGQ0QzQ05jdnU3RE1lRFV5T1pqNzdoeDdoNU5nSFV0SXMyRHNWaUliS2JDb2FWcDBDTWFoNWpBUDNmVEZMZUJVRWxpZ0hQK1NTTC9VdWxrelEzcmZISEpBT1VDeDZxdHkwY3lrQWVyc1hreVVUR0J6L0dnYXZoR1ErWndQbEhGaW5RLy9RTy9EQlYva0hjR1djQWRuVTRHNGdhekRCNFE3eWxqQmJyamRyLzNnL1AyTDFrVzltc0JBU1k2RllSTTEzNFpLWURmc2lBUUV2Q1NkOENqc1BpM2lmMjBUSVJHczh4T3pyZy8zaWhxQlBXRENMWVdvTUFOdmI3QmJMU3B5RzFTQ1FRRjVBR0NkcEd5Zi96TG1pVEovMkZjK3VJRnEvVHZtRnJNZGZPQm54eVdWTFc3RHZpVkVpa2VEeEExV0ZtMFhzaEhVQjV6QnJOTUdFMW02UE13aFJZRTB6dzVuUUhlemFEVmplSUJOdmpBNzU3cDhVNzRSakxQT2szUGQ0YnUrZlVCUlordlRHY3ZrbHY4bzlJbkJQNkErcEpKdmhrVmhCSXhkVGhCRGVneEJRTnFKa0lBaUdqLy80blR0ajhOKytWTHJmQ2JYdzU0VkJCUk9pR3dHQTViTmx2QzF2VE9BSkNpelRjWVowb2dJQjdtTmxaUTR2dGc4ZWdZVlFRUzQrZUtiTmRpRGNDYXNEQnpSTjVCRjlOK1dKVnVtSFBSVitCTWk4VC9tTWZxbDUxQzBiZWZkRVd3K3dybmt3QXkwRTR3bGhEeHdUaTBEVFdINHczRXZvWXovWkhSVjJCN3d6ZUkyd04rbnJZa1RQcjVROWlwWEYvektNaW5qL0lnTUJYV3hwdGladjczampvL0dDYVd5ZktRSzJjMEVUTDZ3Tklib251eFhEQUptTzNHa1JodEZ1ZHJpYWFrVko4NVkzOFNTWlJNZEF1RnpJVTN4dVhtK2VaMTRtYWowQnd5YUEvY3dPc3NxbUdFQlNMbjFnR2JlSG1oTkdVUU1CQ1ViS3k3aVUwUlZqTmNDU0FuZ0VhcmtzbWRYQUlWajNDblNqREpJL3hjeUJUR1F6TzZJOEI1MlIxZHk0YUdndUszZEFHa0JvL1dMVm9rZXFzczlzRHU0eFZ5QVBVR1crejhSK3NmUjFrc0VwbjNPdUFGQTB6NFYwanFtU2UrS0JFYWkvMG9WMVlGZkxCK2VEUFlNV3c2UUZ3UWQyakl3YmdOczM0RnFMSFlNSVJZVHZzOGRraitIUjE0S05OYzJkVDlDYkg4d285Qzk0Nk5XTS8rSXNzY25ySktCREx3TFhORjVvbm1lQmhJWkJuT3JKek9pUnpnTTZSaERrMzlpSmMwaG9FeDEzckhDOFdhYld2VytjQlRoN01pVFovRHJ4SVJIS3NEZENkb05ZOFJWSEtBRHo5cXpRUThlNUlBTlEvTytjbGo0QkdZQjhSSTQ4QVJUbmdyRW4zQnlGalJEYnJQaUZxK1VZQVdoQ1RabGRvd3d2OGNqTTJGNDNsMkMrK2I2SnQ4MWNYczluZllnb0EwWUlQZ0xzUU5wM2VmenRTVEJHMEhDYjZhSFdMSjV3dWtpN1JzKzhBYlNIVDRXRFpVVHBqU2NYZVlmcFhUNGNXQ3hnTnB1MWM0UVZFc0M1YTZ5ZHBSdjZnam93UG1xOGtuRUpOQURnNG5uQkIxT1FxZDBJbklEWUFzbS9xNThqTU5nMFBnakh3Tzg4cW5qalMrd0pVQjh3Q2c3WElKVlFIVURRT0xsMm5oMEhuYXpmbkh4YTdkWkUrS1hpWk1FY2p3b2MzdjZrS2tYNkNCQUxGaDFNc1dXdUFsVDk5b3ZwNEFiZklwUmcyMWdYNkh2bDBuTkpyWXNCSC94K21VZ3o1bnhvSG9nVkxHc1MzeXN3aGd4aGRTcUxGRTUwY2tzc0JZQkExK2ZpTS9PVFFDVElEUGpKZFhzWWlEMjl0YjFjVW9RYnd1WFBnY09ReTZBRmN5dG1nN2NudVI5V2g2eUx2Qkc4Q1JhYk1wSDlQV3dITzVkUUI1VDlGNUk2S21NZGt4Zy9DWnVZSGF2SkhzTjcwTFlZbzZ4bXNtdmZuYzA4WUtGcEhBVDRJTEVzRlIvVk52RVBzLzlraDZ3S09yT2hQelBXNFdGRGZXRHhlRG5zazhWTzdnWDZFd2FTWVdhK2NVbFI4WHR6U1dBcVhBNFhHY3Jld2QzazduRVE3N21RME85M2t0K3MvY1ZHSnBPa2tmODAxaGFWUWNTSXJpRU96SjVpeEN3OHpHTWNkYzdtQnZWU3ZORUxqOWlOQy9NcDJORURTOWtmWVFMVzBJRW1OSWVxSGw0VWpLVGJzeWJRdE4xNFdJdFlLMzhEcVRJYldHY2tKbVF6T0pjNmVucTRiVjFUelBMaURqUlg3TndFVFVvSk8wTGFjaG1JZkZuRmtxRkdrd090c3h6M1NvVVB2Z2pkY0FzVXlrbER3VEF3Tnk3VkUwK1dNSjZERytKc2d3MXpmNnNRdXNmTjlkK2Ztc0xqekd6S2ZsektRY0IvUXk5Z0o3RDNpZWEya3FZQWN1RlFBaHozeTZZb1AwOWNmMzBsM0RlTFQyN1l5Z3Qzdm9KT25ZMzloSTVVZ3A4Rnl1UVA2czc3d2lMeEI0SCtlVmpvZ28vaWIzdzFpSnVQQkxPSlYxaDI4SXY1V3lJN3NhaXVUckErQlJpeXZtYXhnV3lXV0liUVJnZ2h6bDVwNVZnUW1tWFVBc3NoaVZmUHBwb3RaeWp6M21iNVpHS3lnUVEvQWhNQVgwU2UvczV0VEVJSEVXY3JOV0dQT1cwMEgwSHJDOWZIdldZaURCYnZNWEQ3elZsdVM0OStjUllzOEpBV3YvNm1MWWg1L0l6bC8zNFkwT1Y1RUpkcmpVekdWcTJBeUlxUUxuRnFQNVVSNkJ6ZTMrTnBmQVU0Ky9XRFg5OW1PL2pCWmRWcU9uVUdlRW8za2Zld3ljU2pZS2tTenJKWTBZRGRBT2x3NUtWVCt4UGpuWnc2UVF1UTNPa0NRYUxSazlqbUFjTk0yWElsd2pZVXR2MmNTU1NEQXpIOHNXNGwrZG9Kbm52dUZzdDRUNlZKd3RlZ1RTVnNYcTJjWXk4TlJkd2ZGMi9RUWdkbWVBZ3VtTTM4UmVqSmhLVkhWd2w3KzlRcGlBYnprSXNZSU9oRU0vdGFFdW9HU01FOVZPc2VwN0xOZzQwSXJBWGhYbTRGa3JIcW5xeHREQno5QkI2aDlFSEM0QW5JVWoxOW9TVmpHd29DdkdpZXRkMFZydWpCN0NzMzBFL2VmRnNUZ1Q1Q1Q4WXhQWUx1VUdiYzRnVnlJK292L05iNlppd0paNE1ZV2N3NHhXYVZJandobitOd1pDZmlsMGpiUVhZbzk3cFlmZ2drNUFuVUp1S0JEb1ZZQUhzWWFncmVzSGwrRGl5VzVzY0JlRmh3U2FqVEczT0ZFOHdQMHZhdWE5MWNFaUlkY0s0cHZxYU1NWUxDQnNDWDJQM2pKQURMMTBYbUFNZ1JDRGNSZ3N1SGZTV0oyZ0l1TGd0N0lLZTNDSkNlMTN3anZqYlVDcDRhcWhMWnlqcFpKalllUU5NZXUwa0V6d3E0ZHpaMUxld0k0WlZiZ29SWVZRYlAzZENXNWYyZ1FSY1hrenlJQXdkeFYvUU0xTWxVVEFnblNuYlBrdkJzRER4Y3hJbHVMdWdHL2tDTmVKTGpyeUkvSUJwWnZWY2ptTTNnZ2t5VEk0VnpOdm15YmNDRnJLU3lJTmZSZDZnMUJGRXFUMHFZeDRDZG0zajF2Qnl1WkNHSmxIYXREd0dSY0ZIcmJLWlZYTkdqUWV5SnYxOGVGTTdpZ2ZYTEN5dVlnNTU4MkZ3UUZ2a0x1VFdCZzBJcGFYSi9jSXQ4dng2MGJqMHpHOU83U2RmcnVTWGphRTlNNyszcWNHVDlubnRDTEt6VllnOENieFB1VWFmbFkwMHJHcGlBRlJnRUJUZ2dhaTdBajVUQ1ZpWDI1Mlk5RFNYRTdJWnk1QmZoSjU0eEVtMkkxTkUxaDdFSGF3THdqQUlwK0Y3dkJ2NWFMamFQeFNkQWg2Y3ZyTUxqdVY4NnoyUnBSZXQ4ZWc4TURQYThDSENzQVJqU0lBNHhudFNoWlNQek10ZXdQbFFDV0RndGxVaXNNazZWd1pOUUxDK0J1UlBBOHBzOEl3Q05SM3JpMXVnOW8wSnllMnlkKzJYVm1qVTcwQ1BJUW1GaGtYZ3h3bTFhTE83SVBPVlJyRHU4RkRLNGdyQzA1Yjc4ZzZTMi9xTDE3MUlabm16NnRLcGtla3FIQ3NFaXNQYmFNaUNEN3hLVDhXb1kwSWhHR1NMK1l6VVJUSVJWZzR2dzI5ZkRqNkFzME5FR3UxK285S1A5UHp5WXkzeVFjMzE3d0tXZE5lUVRzb2RJSWlNUjEzRi9sQ29Xdks4eWRydk5hWUVHWFBDRzB6WlBYOTZBcDJZcjFtQm1XQnAweWxNbWdpWnVpc1FHS3daMytwMWpQbXdjcUlXQUZDQm40RFNTSzFIWlBJV25hUStoNFVQeVdVN1NNUC9rMFdnbGRPSHVPeGRVQjN0L2QwakF2RTQyQi9mUzRNRFpMeEQ0SmxweWU3S044V1lnazRpQW12M3dLSWdyOGR3Q0NmWWlXNTExRXpvZU5OcEY4SjRQU0pIUTBGNWt4S1BqQjg1akRBblJBdU41OWNKRFkxNVBnWEI5aE1zODVZSEVHZUJDMkxocWhmbUQrT3o3U3F3dmhKVDFqRStjMzcwOFd1ZTlFYWRWczRKaEdkQytVMWgxa3R5OUtPeDE5Q3RDTVZYRXBadGl5ZFkyQTRnbTF2c0E3Vm9hdC9rMjRlelR4aHZHM2l4WHdpOEpaTU55TzI0blhFUWYxTDVITCtZZmVWdDhJbkROQ09mUUJ1dVpWU2pkMCtpWndrOGQyd3hBeU1PMno0Z2ZIWkhiTUVoQ0N0ekhZZ0ZZVEZ2TjBtTkMxU0wyVmlVT3VMSUhqTnJpa3cxZlN3WmlZdDBIMENvd3VZSEFyUkd3WUJFQnNudnlsZWFNdVp6SGNsOVdlbHFJU3h5dHcwekhucm4vOEpaa2FZRkhJT003b3NqRFRIRDVaRVJZMGZNVkR2Mk5NSElBMllpTWgyMThZRDVzNjJSbldNbnp0Y0ozNEsyUTVHRFJIZXJvNXcyYXF2cHdFV0lGSENUOC9PRFAzNFpYRXd3ZVpEaTBMQ05GRTJ3N0FlZzNXRWFBQlBJSSsraVhCOUNLeVlOS1hOeVRTY2lKdVJURVp4andOWXZaaVpaRWJpQlpvMGsvbkNtejM1OTVTRlBYVnVBVFlxRURFTWdXOFE4enc1RC91QWlZNFpYNVZpZ1RkbW9SVDhBaXBiMmdLeTQ0WnVhS0NITUE2aXVmSDBiN1l2RU9ZZTlGejJHY2dNSE9saW53VGxDQTVkNFFjOU5YM2wwOStRVkRDUUR4YXJDb2hrNUE3dktHajNtS2x3L0hlT0Rsbms5K2ZncHk1ejBWM0hDOVlnVU11QldoTFZrakJCZ0dlSVFOVjlBRFVXUEppUTVIK014UTBVV2MvenduaFBkZ0hjWGNSUkVDaVRGcllYZ0VxUnVIUnZQaXhsY05uaktoQklnenNtSVFHSnd3YzVnc3ZIemhpTVAxZ0x2NFpaMzhCVGMzOS9aSTV5UkhhbHdXNkdaTUhPV3dNbmFER09KdGxmeVlKaDZJNTRscm5tOWtzMWMxSGNrN1gxNWlFYUhKM0w0VEYzNnhteXhreTNCN0FKV3dWNENRRE0rekJvOFFvRktLQ0NJUDhyOWR6Mms2b2loWk1vdFZnRkd2UlJuelFwNjQ3NW13bGphTW9pZ25QZHY0dXZLZExRSEtTdWNqVXJmMjB2cVNHeTNBbFFIakE1cGt6dVpOT0czMEhWK1BlamV1VDNUeXlKN3cwME1GbzJBY2pVMW0vL2tLQXB2M0JkUzlLU3RWTEpmMGlDQmYrU2xXVnVMVlpoQ3g1M21EcUFVL2dZZGJRVzdlZnB0T1dOWGFNNnYyVGY0cytTclVDbXFRaUlEemdwV1diWEVac1N5S0RwMlZHM3dHWVQ2WmpLOWY1ZFZkaFdOdHdjWk0wU0tvYm5odkRCNEF3cEZEdk41SC80R2VJK3pGU1U5MFhXZ2dUU3BIZUFraDVCdDA1aDFkb21xbEZ0d1VpRVAzWWFIcWpWUXYweUxGbnBVdmVvWnJ3aGh2KzFEQjhPd01zQzU3aXhEcTMydWxkaXQ0YkpGb0tURm15OFNJT1UyeWVPcGNMUnhKMW95cVdaRFZxa1pXNjMzTW9pcmRjT0JzMGNCandrT3JUNS90RG55RzlTb1FqWGhKYVYrMldlOENtRnMzdFhCYlYyZHhocFdQZUxGNVNuTVkxVkRIZHFOTXNhRjlKNlFKRWhlWGJOalJTYmhtT050VTdySjVzRHJpNC9Ra1pYbFloZmhBNVFIOXczd1ZvdlN6RlNGOEN2bHFRb2RYak1zNmxUWk9xNDh4MUNvL1VNNktHcVR3dWIvTmxYT0R5MmFnUkJodjVpM1IvamFOUUZiT3I1ZDJIVWpyMXNUMDkvRU0veFJYbmFRak1SRCsxUWpnWEhBTG51L0JzT1J0dUJEclY2eW16eWNmY3BkTC95REc0WlZKYmMvVkVDcDlPMjQyWlFGZzVJZGRzUjZNT0llRVlZa3c2Qml5cm9RdmhKTXJ1anl3eGdDMng2WkZhWlVzOWtWK2N1R2JXQkhiOXliUHVvcThXOGU3N1pSQkVjSkVWT29DQUpkMDNkOUo5QUtFSGx3UFAxVkZDS1MrWmdKaGFVSEx0M2o0c1cxdjJ3QlJvSkhZUDR1QnVYbSsvcXpMRTFsM2lrMEJ2RHBvMTB6TlFEUnY2eWNhUE5hVHdHTGhIZ1NZU01hL0NETm8yWHJWY1lYM2duZGREWjVQSU1TSVh1dmhlejVIMHVobnFIQ3N5end2SnZ3TjNyUGV3U0tmMjFSRVZrZmVrSDZDLzNvQXV3c3oyZ1ZDWVM4RWl3cnFZQUxaSlBPNHQxazJjQk0xaUh3SFlTMVg5elQxMjFCWTFtWS9Ia1N0RnllK2Jtemh0bHAydmVWV2I0YjJlVUx3SlF0UTlvc1VqQjllQ0dVS2NBQ2JIOWdRYzRhbklNbmNhSlNsWEF0MitMelFHbUV5V3ZFSGtQWU9WeUVTWTQ5Sk5meHBCekFXNVRCNmhMdkNVVjhFbkdrc3BHU0RSSnk0RDc5RkJKVTVVZUlzdHZtYkV1QWVqYjJ2cHVwTk1scVRYQzEzeHpxZ1U0UUZsdlFKMWRPU3VTL0xKSW5GbUVVbERJQVVjSHZUVzNWd3o3bjNXbGdza05naUQ2SWZFZXk5VHhVenFxdFkzeVl2aEFaY2lOK2Zia3dyZVRFbjhRRXdlSHN3bzNNYmdMY0ZtaG1pVGdSQXNZQm5BMTVrOUFGZlhHbndaVmxXYlVrWjhmdFU4eUs0Q1drS3FTZXRVM2VBSUlIUXNqQVQxUTJKOEtnakRmUk1oNTI3NTJ3eUNBalBQdFgwbGlUZU54b2RhZFYzdHRpaERvM05JdW0wakRLNVNuZUZKVnU4MnQ4eVRkZC9ubXI2dDVrbUlES25DK1BJcDRwKzNoN1lXYzVhMm8wL1AyaHV2L0hhai94Ly8zcjlKeS9FUUwrbXRBNjdib3MzUWR4NDloZXNjdU5tZXkvdUQ2V1BDbEQwZ1JJNXFxNEpaY0dNd2VrSEdxdlVvMVpQcVJwRVEraDNqMUh2dHFmczUwTkN3Snl6WjkrUXpXbDUvcFEwMitGUW9Sa1YvUE13YnMzWHVrRUxPT3A5aWh5TjE3Q1E1Rm51YThmV1pTbWVhRnR0QVNsVGtZWXJSUTgxS3NJaHZ4V3FBU0VBZzFCZEhnaWlrcERXdUdERFh3bGhmcnVuaS9oYjl5bFF0R1RXZzdueVUxYVIwS3daTmcwclRzMDJtdnNoVUJERlRPNWE4RSs0R3FqNXRPMjdhVmZmMmdvc3Q3SHBTNEsxUVo2QTV4eGJoOHBDUHN4L1ZHTFBUMFo1ZWtoeWpyYjVVSlFtU2ljL1Z3YWxyTHQ2ckZJREFQNWhQTmpVTC9PQm1tbEFmdFdBTkovOFZ3SHhwT3ZmQ0FoOGIySGY0QXVJWkdGRUJsRHVjenh1a3lBK3JFSjhna1NtVFVqUnhZNWk1eDU5MjdrUVpDV3RleWpYSUVVR3ptcllHelovZWZCK0UycUl3LzNlN0d1MEgrV3p5YUxlMTRaenhlR2gycHVoNXpnczRkM0RENXM3b2gxZ0ZqYTFJaUdDMHNMNHRnYklVc0lVSVZpSnV3ZHc3Y3kwemhEbW1LeGxKd3hvUmVqVkl4SU1UeS9raUlWOHZtTDhBazZnVndhRmRIK0laaERyNS9TWFhjdmFEc0RMaW9JNzlvRkhHWnRaSHl0eE5od0VqSUpDOHRiYlZ1TzFMSDM4aW9NS0NPTHBOYVYrM2VkMCtnNzRRclRPOUFVb3VXVVRHUGFDVEl0Tmk4ZUdxNEdIMktiY0ZQSG9ZZWhMa0xESkcxVmFMOHU4eHZzaG5UejVObWNhMzNkYVM1VE5pc3JncDgxTHJNT3cyQzE2VjRRTG5EZDUvdGVuRFJscFhqOFY1NmxteTdyWTdoMWdDY05PRUg0WC80UVVQZk93SmE4TTl2amFIT1JaU05WTzdaUE8vSGhkL0lkdHZLc25udUZXQVZiN3Y0TG50REpjWEJtdzl1aFZDUmM4cmJmWGdNQXk4ZVVNc0Z1cWtQTUZ0Vlh6QXJDc2Q3RTBJd1I3MUJJWHhNb2pRU2UveHR2aTR6REw1NjBRaUk1ck51MGh4Zzk5d0VhTnEyY0N1Y0s1bjQ2Qi9tcEFvMldQS203ZEtVNTc1bEZCSDRUL0ZWYzJGdTBwZWJ3Sm9xZVdGWnBEN0VldFFCclNZNDN4NmYrSW1DQ0tGcDV2VFkwbzVYa1h2TG9wcWdEenoycEtZak1xUzFVSDJNdVBoTHB2blB3b3Q5SHdvcG93RHVMYU9aMTRCU0MyRktLQmF5eGdEUzRNSDhNK0pXRlFvS2RCNXVCSFpaNXlTbUo4Wm1NOFhtTEZZTHhzT3BvanRQSGVmTWNRRGtMY0xnOUFjWHVtSW1TbzJjNVhTejJuYVlGbFVTTUJCYU9UUVdlcjBFR0swV1hucVgrYis5NW93enNFOWJrbEpETWFoOHhjNHliWFNnUmw3ZzNlYkRrYVpsVGE1dzVQdTA3Wk9LVDZkNXZ3WGFhTk1EM0NPWXJmUGpVK1BkU2Z2Rkh4WE1RU0dzbnB0bExIWE0yclhuNHRuRVI2b0dtZTZuRXhHdE9hWURTTnhWYnZ1b25YWU53Z1NBSXkxMk41VkxSYVB4TjFZR3hRTFN3cnZLYjRQUWMxdEkxNFRxZms3MkFHTG05REgyNkNxVmlZNXBuQ2xjL0Z3c3B2MDBlQk5VZmNOL2p6WStEeFhKTGJRbVRZOXhUUGVkZmNrR25yVHRHWllEeDB6MmtDbDZtZG5RNlBNTnRkVDRLbm1PRjVmNTFNL1NYRDg1M1dRZkg1QjUwUE5qc0w1UHBUZnVjSHRYL3lPei9ablpQYnNUVG5qK3pPN3h3T1FlZVAxSTdpRDZlVmV1SVVpeFY1YlpuL1VMakk3WjBscUY4TGxtRVppZE50WitZdHN3a1NTTVc3WndMRVBKSGhRdWg3QklBMnR3U0FuUXNtdzNNRnltMGtpV3pUR3NCR1BOM0ZNbDM3a2lyeExSTUk4YlRhUFcwY0Y1UUxYcVhZUnpCK3RwL2NNdEQ1M3RZNnZUYXZJcEpaUHhRb1FvWXJnQ2w3T3BXRzRpS0FyYTBDOGRkMFpVOTlpRjA0dDVvVXJ3aFdMdGhzQURZUUVvcWRMUTJaYzAvelJWdFRXcXphOE9BcFlMb1FkaFF1Sk5hZ2dneUdvNFNJaUo2akhXbUJVUFBVc3lUQlJDUWhaRUcxVjhSRDhmcmNUOCsvZlRMMWdzbWlZdkMzaytNaWltV1BkajBJRlZDdDlhMGIzMzhMZ3NQdXJXSFJIQ3JWRSsvYk9IQVRpcjhYY2R4TlRyS2lxSWFBWnhlNDlsZHFCcEc1ZUpqMU1uOUlyR3V2OVNQZGNvQTJyZkN5UldVb1hiNlJHNkxHUGxMUDgwYUI2VnREbGl3ditPYnRNUnErdk9SQ2FPRlRJem05Wlg2S3JNZGFvS0UyMUJHaFFyN1FyVVJpT0RoTEVrOXVHQ1FZZDdZUkZDVEJZZmtRQy9ROXM3TVNpQVY5OFZhNEdMYUVVV3picUV1OTJHSG9VN2NZSENIK0pxakVBcXFFWnB5WXo1QXMrMm53ZWpQYWIzREtRaUpZUnoweFB1VlVickZyWDdhZERTbldMVWZGTllqMnBkc2xBSnN3aHJNUkhtczBlY3lLL0xENVNTMzkycERubFhSRnQzOWhrOG1TSG1TTUtRTTdaSzFvYlRicDNnZEo4LzNIVjZ6NkJwMGhML2plSFo1b0RjRzhMM1ljaTl6Mzk0eTFJVDVyUTdGd3RpT0NXVXlUSkpXTCtDeU5lSDRUNG1DYlNEdDBlS2F2OFdhb0kvajNwMERLSnNqTVpTUTRoYjIrbUNwQXNDd3o2bTlWWjI1RFZKdldYWnNWcmVFemJNVVBMbkRaMTczNkdDWUlocXpOWG1ZWUwzelp5dExrb1lLdEZYcVNMYzNFQ0FESG1seHJrakMzdUxsSkZydXNaVTlMTEJrVnVvc0ZCN2pTeVc2Q2pmWnpkb2hWd2UvdEJPcjdIdGF3b3hJZUs3WkNMbVlQaU80WHEyTXUxS1JLOWppR1RjUENoMG1mYW9iWlRuWEwxNkVOeGZROS9Bb0RZWGZoTlhnMEcvVlk4ZGl1MC9xUzJUdjdwOUVxV0JDM1pYZFZ1QWZFeFdLdEdON3ErWkx1YTllYmRTK0liTWlrV2Nxa3BvV043T1VwYURTaFM0ejdxZmdiME5PRDJLUEdPM1FwNDJOM3BvWTkyZEZwQ2pRQ3NNbVpTOEQrd1B0L3VpVFp1MDYwWUM5WWVWdUg0UE8rMnRCRGxBUFdRN2Vub0VPM2hpWDdHNTVyZEZIMUUxYjdaUVVjM2dXdTRvZ2Y4Tlh0dFFuMkNPR25ZSWNqYTlnUlpQdXc5UlY3d0ZBa2xpZUt6OWNHZVJpaDNhdklhSFMwNGFoQ01oYmFOMzBlUzhjQlZUcDVMSHZPaUJnSUxXTEd3QnBxcS9DY2lZOXdrWjhXZjltWGg3TURiOHFMaEJvSFpqeFZ0RDBaQW5qYkJvMENaeHNBeG1FNUNsU0hCYnVmKy9Ub1JHTTRscDFodUJxTjgwRkt0dUVBRGRSKzhvK0xxSXFvUUZuY2xreDN4VjUyUnNyQ1B0aWpVNlpzVWU1VDltVWhaVFJ4aXluWEUreTM4cnoyMCtLRVcwTmoyVmpDWXZZOHN2MzVMOE5oV1orQ2E2WExHa2tMRGdQQjFKemViU1YwaFJ0dkR6R3NFYlR2UGllUEZrL040dW5SdCszSlVzc3h3eTQyKzBCR29jb3ZzWThvQkxDZHMvSWJ6bUVueU5MMnVFZVcwOGtoaFZVM0VmdHVBQVQvdGtldnl1RVF3ZDB5eHVIQkl2WVI3dHdxQk1DVCtmZ2tHM3JzNWcvOFB4RllIUDB3alZlWVN6THA5VVhBQXVqajkzRHlDNXJPajl3QVNGUDd3QzlpUk1JNHQrVlhIWE8zOE9KOTdqUVZpdkt3YytDRExUbE9BV00weTlIV2hTTEhKZ25wbnB0OU50MjJFdTdYSTJnLzJLSnAyeFVnSlhhcUNxU1BSN3AyT0Nkb0tWS2pnYVhodWV5R3g1a3hudWVyZzdqM3ZkK3BvdzBUVWJCNGp5U0JKT1NqWlorYkFMdk1QVUhvZ0tKNWl2UHg3NGJ3ZS9OeUhsaDdmaVo1Z0tyQTZZQXduVGFkYXBVMnY0VmZQeGp1UkpUQTMrMHBPdDIzN054cDRCcmo4aUlkSldFZFFuNklZZzRtd1I3NXRJRFdBNjdpK296Y0lOeEk3Q0pYSUFtMHN2QlVvVG04QUtPNlRsVVFIL0M2U3QzMHBiTmlHaXlEaFpYL2VsWmhKVEdMeDRJRTV4NndVNTVXNVJ2NVorbWFKeUtYZlRBQkxPdFdjTUdTMFozb1BrU2d4Uml3VGxRM0RERTYxYU1OOTZoNmhBUGdqMmRwUURZMVFkakNGWnVOWThsNDVrZ25HYUNESnJUY1J3VmFUNjRSNDhja3JTejc4MS9rM0dBenB2TFdDd0k5WlJ0UVpEemdCa0FncjdZWFk2Tld3VXZtTXpwRzFwK1QxUS9OQTdISFJvRGFSSkxHbmdXSDMvRkRhM3VKSHNSS0xUQkNuNU5kc3M4UDNxemJuZ3lMNElJVkFZWHdMc094cHdtZU9nMGMvYnYrakk1UVNHVEp6YkpNQTJxeU5BRHU5SjBnbDg1UWc1dXR1Z1cyZldhQUNGV3ZSd0g5VWhSOEFXRnpHci82R2dSZEM5bWlaMzJZZFNLOFlVRElVM1BGSnBXd1FidUJUbkV4ZnRRMlRtQmY5c09xT0Jya0NNTS9yYU9KUnJQR09KcEYxZyswM2VKZUdGU3h6aEl6OEt3ZXY2eEhrVGxLSlVsa1VmVm5KNGQ1M2drenQxN0hBenhFc0gyUXhWNWNhd3EzS05JZVI4bDRvQUpGQStnZk1MdStaNG9JNEdMSGJMUnAxcmlZUFZHNms0NXNpZitmY2JIeDQyWHpyNEhOUW1Uczhic2lVSm1zbCtINm9ZamRkUFNSY3BZZDN3TG5Qb1RjWmxKTG05My9aWVZycW56T3kxWGFZYmJqaGJERytzWW5nT3BKbm4rcml0ZjNUQk1yc0kzSERubUVZQnFuWlVpQ041RWhqN0tud0tCN2htcGVyS0F6Wmo3TFd1QWN4NUJlbTBtc2owQVdsUXBXMjJHVG1rSXlUWnRsVHBFMEROdUtYbXRQVTNOa0lXeWd5Vk4xbzNxYTA3SUNnS3RzWjU0T1FJRWtLRmJybUt0MGxrMHdqSjRwUWhGb3RUMitYaXpHK094YnJRdFVZRFhzclZtd2htRGJPOXUxZ2FWcWpTbmZYQkdHVXgzWTByRlI4Rzg1RU1WVlRSQ3RhU3J5ak9xeGhPTk1BYnFqZmNvZjlMM1pSYk9reVkxTGcvVEJxVzdMZng5bDF5bll1NjBPT3J0bTlTcWFuSHUxZHJWVm0yS1JYb252SVR0bWI2Y2ZGSmJTTnJHSXEzalhUNjZ3bnVFaHBwRHVkWUh3ZDdZQjlrVzl0cG9KTzl1NVFzUFhlTDZ1QklJOUlJb2VqTnloQU1zVUVPd2JGc0hXM3ZkSlplRWlQNk1WdUd0VWlBWE1kekluQW1kcDQ0ZGF4Ny9YUC95cjhvZnJmMXovQUg1YU9HUVpPM2JOeFJJZEg1dVhuUkFUUFVpOVpUWGJpbXJ6RGNzVGQvVGRBaEpxc2xFWE0vRmtEbmNoZGp2S3hzazVZWjVFMC8xYzUvVGFPc3p1U0pMUUdzUTdHeS81M0czbGFuRHdUYldIQWxjZml1OVJGcGJaaTUwdDNTaUJXQTVYc0VsYWlaUS9ITHlhRWljUUkvQk9TTWJWYjQ5Umt0VlFOc2VjbVQ1SVpNK0phbStZSnlMV1pOaUZnV0JpdTM0ZDQ3SmNuVEFTVGQzT0JWWERWenhDaHBKVmh3MHNQcU5uQzhuUElGRDkrSDVzbnJON0ZTVDJZb1pWT3RnenIzSll4eTBsZEJwQjk4RFpRVGhIdllQMUVWM0xkUk1aK0trZHlkbUVTTG1Lc3pYZ251Z3hqRG9IbEYrSGVFR1F1aE11Y0xzVnovVEQxMFdxVDdKUE1IdUF3R3VzNWp3ZGlTK1dqVXFyNHlIYUZQU0QxUkIyNFh5MUlna3NjSnEyWHp1OElKeVkrazAvMWNsLzBwNlJjZVE2MkFWTHp3Rit5N3lKY253aVc5QnRXUHlRRE9xK0FDRXl0VzM5MWpRTGpabUF2aXhpa2w5Tlc3WnNIMEN1VjhkL25lRlVMMWorVFJ1OTJOd1A3bzA5bVIwN2RiYjNaNHQyUkJTak00dlZaYytaUlFEbFJmek5jZG1SQmJXeGxmTzBRcldmd1hOSVdkNGd2dXhjRWpHKzNFVTlKSjFDMnV6cHRISktRaFNWQ00zaGQ2RE51S1hYWnVmQUFWc3VBQlRlM3g1T0lnbnNkbHF4bHh6Z1lGMUIxYldKeE9hVkliVTJBRjFsOE9sY20yVWFKWEo5ZGJQLzdIN0MwTHVwQzlNTlQ3Y3NoTldwOXM4OUZnNG9Lci9LZmdDb2hQaXJFWG1iTGQ0bXVyVmlHeWVkYVRvOVJiSlBmZndhN21IN0RQQU1TN0ZFWHJFMHpzZ1IxTk00TTFsZ3lyZWpSQ3A0UjZnd0dXSFZ4dlQ4dWhMV3FpMkg2QnRIM2ppSllscm5pWnNjb3BneXdZS1lNNi8zN3J6YWdRaE9hdUd1c1BlcThzOW13KzYxU2lVbzFRUWR0M3ZlbkdNaHlHS1U0WkVtaEFmayszSzRia3ZkTElqWjBhYks5NXlMejI3d05Zc0wrL1BZRGtGRE9QTzA4bFNnY2tmVlJZZDVSdXZkVUtTWGM0bFFsSXVBZzNpQU41eENjU3MrWCtnQVNoakw2bDRKS0FwZmY1VFh3WUtqS20zeTNGOWhOZVBGTzhPNzdHeDB5b1ZETk12SGhVQUE4UFhGeDhFbnAyT0F5bnRTOEN3aWEyZEZyeVB2SE5YRzMxQVQ0TkZXNGtEemw3eU9FRFhVaytha0F1NXo2aEU5TU5zcXlZMjZzeWkxdjkwalYvemI3aGRFMmszc1ArMnVOZG16MjI0ejVPS01LUUdQNmkwUUtrUTRPMEtTczhLU1V5ekRaK0hFTXpkRTFhcFMvZVZhZXptdkFDT0h3cnlaQzI0UUVIQUExMTJXNmVKZGtIQTdXZVA0R1hsa1NYeXc2cmJhQUV1WVF6c0wvazRKR1N0c3h6UWd2bXhQc0Z0NjJXQnUzUzUwVmNpcUd5cndnV2JOMlg2d2dkNHRjV0JYNEJiN0ptUURzRGR4OFN4c3MxNGRVL0N1TUZ1WW5LM2VqdmNzelpZdlFMTnpnNDdVTzNVaCtod3FFN2VEWjc5bmRxbWQvYkF2cStteEhKUVgvby9Mb3BvN24yRm5mSmxJczFqT1hMUElXdzUyTm0raDBwbGVsMVBnTEloK29ZSndBeFR4K0lnY0x3cDFPYXZGZ0dGeXhoUG1ZcFI0aTNYSmFhTmx4NWswWjRGWHlwYyttZXhhYVNkWHgzNVVzM1phcDZNeVc5V2hsbW5LZFVZSVd0RDdoTStJWVNQNDh0QWM1UUhQdG44bUJpZURmQjY2bm82TVd3NkpxRjNPbkgzc3hjMjREQjVwM1F5TVp6WUhYa0E5VXdJUjdaL3RGOXEybTU0bWFuK0NsbnEyT212bWxNNTBCd1FrU3dOTlJXNUhYam9FeGdoSlJMSlJIUm8vbGFRNExTUXhlcnBSN0pERWUrNkdmSHFKSzhFYVdPazNOM1I3S1o5OVJxZmt2cGpmeERiUTVOeThReit1RnUvdGRKZEtHRnpPN0pDa1RZZnVlWVJwMjhjMExYeWZZdHlLMk9HTnEvT01uSzRRUFQ2NHR6SGdzZ0VTSVpzd1l0VGdhNi81czdtWnluSTBTL1VkSFFzWXNCSFR1VFNkS0JSTXZ6d3FEWENVaU9JMHBHdEd1MFl0T0IyM2c4TEVIWWRSc01VT1FhbTh1L2xLTE96R2daRktFS0JvQ2drS21LRWhlcUhvY0ZrOGJMK1VmZ05MbTl0R01rZEx3UjZ4azk2emhjTmVSN2Z1MHg0NVp4amxKRHNCdTBSK3MyalgvMU5Mem9aaXoxZnpjaEp6OUFEanpPT0RIU0VEMGlNdnpXTTVHY0IyUVBndTI0Y202aGtiQ2VkSWVkbGxrMDgrdFNja3JYTzBWaE5CYlg5NzBVN0padjl6V284YXZKWE5CYUFDWDk3WFlpU3JkbzFWdHNWQWRYck5aK29BTGtKSWNtN0hlckl0N2NYWlFleE5pK3V6d1JBUEZtV3lsQTVjbDllWnNMQVNld0RmZ0prN2JUZkV0Vm4xT3Q1bytsSXl0dmRqVWYzS1lJQjE1UkNGYm5jTGhLZnAyVW9FaTVuU2l6Vmx0Nkp4L3dGZ0s5Qm5pOWo0TzdIS28rL0hVdlY2Y3EzQm9jcjJjeFMwUElqaTRCYXU2Sndxb0FHaXVkTzdtOHF6aHAwZGR3NGVETXhCWTNnOGtZK1kxcTNPTWp0bi9xZkhjMkZlUkROOTcvRElNVE1oMFBsNHRmYnJjZklJOHF6ZVZnRGNRUEhKODVnNUtJNERhZjloTWN2MSt3OThORzcyUmFVT1hCRFQ3eTlhaDh2YnJQZVlhSFBIQjVVelZUT1kzM1FqVUMvd3hNOUJBYWRlL3U0T2hTVnNPaEhyNlU2N08rZFcyQW9CMVNQSEl5U3l3d0N5cmpmL2lpMEo1bS9iQ1FSaW52R29lNnhwZXRLcWVaVFdaOHV2OUFYRkRsTkFISFkxaUQzczlwdUFDZmxNNVFYeDZ1WHM4ZWRNTVlDUERZSlJzZSsxbmxFM2RzMXVhRjZBa2lUbk5jQmliaWR4dmE3L0diTmlsc2Z4MSsxQ040VFRBV0RuVWJROWMvdkJYZ3hibzcwTkoxK3pTTzh3N1dMeGJIZXdYaWV1bnVvYVhCZi8xZnUzdllnT29iMm5rNHNjNmZYWnhJdzlnT2RGZUVNeERLQ3NPUmpxTTFMYi9QMFI5d2g2anI3emVMV2o4c3FwS3Q3Mm9pQ1duTGxjRllOZ1ZtZ2VURmhhdE02QXJoYndwK2JzUTJ1S0FJRFBDdnorMU12bzhqcUhwWG9WMXFJVUQvMXdOY2NkalhiS3kyRU9DWVd4UGZNbUppQXJwc1dObnZUZlo3ejNHeTZvMkQraFVScEswTDlxeWhjelE3NkowS3poR1c3V1hZb0pPMzN4NXN1RmN3VFY0L2dqTzJtS1F5VDNHVm50L0RuSXZQVXpVdVpodmFQZE9aSy9nYmRPcS84UVJRNXlRV1VUbDkya1plOEVhMm5DRFM5OEFYTEgyRVhWcFMxMDRUUXZUUk9iTUNNSCtVNUZwM2w0cTJhdXR3SEpBV3RJRHJSR0ZoYWJSQWg2emxvdEhsdHVod0U0d29hVmN6ajI3enFWdzhYQkRsUHJCV0JEZEExRmFQU1F5ZnFRR1J5TUxRNVh1TjFZRGpFdWpvU2RpZGR0MXBQZFc2WnhQNURXNTNhWTVyNmNFMXljaCtjMFJNelowNXB3TDJBU29zL2xwRE12ZFlHZjZSeVI4Z2M0K1RJTnptZG1TN2tKN2M5anliQ2VhSGNySzJxZ3Nya1BpY2oyZU52OEJKb0JCd25tOWp3dWNKWm82ZEdSSGl3Z2xNVXN1SThGV1phbmVJNTYwcnVaYnpnMUJEcTBDclJ0V3Bqd09wak4vQzRYSGR3U0lPV3hOR1E2NDhHcFYrdUtFRElmcllHMlFwQk9PeDJtSlR2TlVZTFd1Nk8zeStlUGNNQ2l1TDJkK0NBa0wraUNyVU1FREpoLytkZ2tEeENjelNCYjNQbFJ2RnNEQVgwTzlaU2lPc242N2JjbnF0bnhWQjJ1UFpKam0wR2JaWTN4aGRzL3MyUWtxN01XSWNUM0dlTmJZY2g1Yi9tUE8yVzFsbWVQVmc3ZERoTUowMkViYzhwNklSYmx1VHcyaTA3QTR6NHJmTlJCamtHVkg1MHpiOVlnclE3dk1WVU10MEpFSjhoRjZpQ2I5U0tJVFdoYlNlbWFMcDFIZHBBS3p6aXFoK2pCSTh4enlieE5VZzQ3VE0yVGRXeEVQaHlNdmc3WmNkWm5YSkM5aXdYTUdYNzBkc2Z0b1Q2Uk11aGFoN281RStBSTR0Y3lXQmFEbjVtSlBLVjFEbnE1WHlzRWlyMEZuU3VLWjc0SFJMUFlyVTBnOXNoWGQrTzMrNHlDdzdJa0p3Y2Y0MkVxMHRMMFBURS9iT0hCMmVaK3kzVnNidU8waHpIeDRhM1pydXhnT0V6YlRtM3I1bStWZGJLczMrSWw1elRDVkk3c2FNN05ubm5ad2ZKNUVqUk85aUtBUXdUWkRXS3hXbDkzd3VGZy80YWQ1Y0ZheERPNDdNT09paFZ3enNnOFIrL3pxaTNyanpiTmdkWFJtbVJFYVkybjZQdUZTamduU2ZZUXpvbU9mZVFZQktMTXJ2a3p3YzdPOFp3dngrNmY0ZllQQkVuY2VDVkt6NmxXVGFZcm0yMnBjVFJMRWRBOTJxdjFNYzVVdUNIYTIvNzJCUnNCTEIxMkFLNklIcFBMeHJQZjVCeGNCMGJaZUJmdEZMR1V6RWNCNUZkZXRVMzJFQmZMM1J4ZmlicTZBUElVcmI2MDJUNmZLZEtRdkFBdlk0M3Q1cTAyeWNWNVlPcWdYUHVzRERXcjlWcU44Slg5Ni9raTJJVFZVRDdVWVZvWG9QVG5zajMvYnR5Q2pjWWorUnFjeXpxTnh5NGJlZVhqbU1uYlUyV2c0eHFLci9zZFVYMktRSzAycnNleXA3eDNFSitSQ0M5ZlFLdmw1QitSZkczSG5kc1JsQWEzUXdBSW1WMUxKdmVlNHVobFFrUkc3N3dKS1pmc0NLM3pPUWZVWnlxbXd6QnRWMHFFTkxZV3VGeW1kcXFqVnNEc3dqM3NFdXd0Tmxub3RDS3ovVTZmSFVzbURPZGVHb2Z6czNlZDVzNm5kYXI3REdRTVcwbGVpTFErZ2NOUjJGeG9IUjBBZStDSVFMNkhTY1Y0RHgrWUUyWmVrYWtZRnJJS3NpY0xiQVpnRzdUdFJMN09JNEdzQkhwUTBRNmk5akVSblVoNFNtbE45Y1ZmcWZ4N1F1ZVFEaTk0VlFuRURvb01UdFhhbFNEREd0blBDb0lRMFZsc0E3V0gvMjg5WTV3czRmbHI2SFlpYzJ0U0FLRHdUSHpHQTlBczF5bnV0Q29wK2N3SVQvQlJiYXVlMlJaT0luSjhxVnhQbW50T1dKeEpqaUpiQlZWeGp1Q1FacWlDeTdaclowK1lQWWxPUkF5RVlQU2lGTHQxL2dWY3h6bDNzVFhrT1pPNG5NMW9sL1FaTHNSclBNKy93blF1SElEQ0lqcHVibHVKdno1QnpKNzZoQjYzTk5LWlhPOHI2eHZkWTRKa2Q1QkpxK0swYnJ0OHRtTS9Tbldvc01PRE1ERTA0SEppM0YyRHg0WFA4ckV2NXU4ZHd1TlFMdE1QM1Q2K25LeGJDY04raGl2RGIvT1ppZXVBR1FkT1pQMklHOTVvMWZjOHBNcVNwdFBicmZKVGdBWWZLR052a3ZPUnQwOGJtUmYyMFcxdHNMVHlTK0VwNDNhYzRuTzYvWjFJdnUwd1I3WEU2dXhpL05tU2FmNis3UUo4N0dpUzVUaXVHSmJrZFVySGlwTzJUanNoUHR1enRVMVdQRVZreG1zamtHY3NIdGE0eks5anBHQXhYRGtoWlY5V2hMUFFZMGhDUWZaWW5DOXZuc2xHRDBlblRvOE5MU3MyZUxDZ3RpRUxGa1FQTUJxL1FrM0VkS0VTQjl4M09HRy9PcXpiYytVN08vUU1FbXA5b3pNNVlYVk83UWtlM1Rrc0lVNGZJd005WklOWm16SHFaUmRldDM0WldVVTBIUVNheDBJQUVCMU9qSGtSOGZGQzNPWG4rVlV6TmJPd1RuTTJnZVRJN0dYZG5OUFBWdFdqOSsxSjhubUVUc3NlMVRUc09ZbWlxWnpKenQxQ1VqYkVrbGxJZ2hKcm5tZGJGUWRMWGVNOG1DRytDQ3M3M1ZzOFBVNTludEgwSGl3RmorM251VDByTjYyRWhxY2lxT2Vwc2JGWFFXUkNpd3l1M2NkVkNJUGd6SFNLbDlVVmhBLzdqWHlhRlZ4M255Rnh6dWNiRXVGRGFnZUNFZlJweHJLTEdNY0cxZWM4eG9WRkM1Wk1ycy8yVWdMSFo4TmRQc09hc3NZL0hPQVNwSnk5clFjZGhjL3NjeGg1V1JUOUFsa2VqQklDMkZySHJmTFNSY0NQOHVVV3dta25URTZPVjJEWTRGT3JKZzZkcmFkSDhDdlhxeGMvbmd3QXpNMm5YWlNOcEd2eWhHYUNncUJLV0o0d2xCTVVYck1hUGxmRE05MDVMYm5rWFV1NUhCeTFidDRob0ltY1EvUVltanhySDVBZGJzV1p5Q1U1QnM0SGpIbVVPOC9NaG16cnVNaGt3K0FMaHdUbXBKcnJnMVRwSDE4MVRMTnlNU0FmSVlUck5uK0VKWVIwQ29vOXdmS3dhNXhuUnRnd05DcVJGbnJpMEhtSFBVcmhjdjJpVTFvY2cyL2VIdk5uKzNCY1p6S2tkVW94WGdMa1poY01sT3E0TTB6NzRrMVpNMGNxUDdhR212WlhnSG00cEVOeDAzMDVUZUZrK2U0enN2UjliU2diVS9WT2pFZHNGd3d5M3phMm4yZVpmT1laNEp1dzVtQnZHMDd4Uk1mN1EyeFlSQ2RlV3B3Umc4Zmp6dUQwRVNMVG04TWpyd290ZEVobFErWkRmMTVQVTZFaHpZbmgzMm1FZGNLTUZkM2JpZ1VucDhYNzFORi90amxMTTFnT3BDalVhSnVIUkhSL1owNDNHR0MzeUxmOW44blFuUkVNSGk2Zkt2Nzl5VUJBdE1VRjMxYTRxYnFMYklTMVU3dHZITVhpVitkT090TEQ2aE5ZS2lFL3p1REpPRCtOTWpaN1BzOVAxOC9JSDJ3RXNMK2NZZ1NYeHRpakU4RXNOVHd0enE4QS9kMjJ4ei8yQ0hUMnhPWVdKQ09PQzJFR1grNC9xc2FKL1E3YlFRQlpvWWNHdWxXdTFlb3ZyTkU1cnRzcFI1OFliTVVMN0tBNm8vaDk2NWxydVRCTTFOWUdOODhBbkR0Z0E4RmhtUWpONlNEb0JlWkRCTE9QQmJEakhFTHdWZDVjZlltT3RwVUNUUUkzMm1kSTBoZlNaVzF2UDQvVklhcER4bDZrOW52TEFCT29LZkt1TTdOQ1BMQ2p2eUsxUk9xZWJjOTQ3QWhTdDkvWHVPMlVLSStqTW53Q0RqUXUyKzRFUEtsV05OdG4ydkl5dkVrdmRxVEVwUTROanQwN3ovMGc0TmpDTUIyK0RuVERtQkQwVHNmM0lWQnpnTnZRNi9ZemhsTmFycnBTbFVHZnUrZkZ6UUhGODhVZzQ4ZXRvV0E4Z0Ivd016dk1hem5WL0E3d3RxcnE3czZVZW4xMmhGMVF2TmR0SVZwWUJNa0owNnNGVE1SUkw3TzRsaFUyczhDQjJIWUdhRXF3VC9YZmFZSHljTWl4K1gzNGtNSk1KQjBPbkxjNDByWnJLZmdIclhGV2c2ak4rL3U0SE1UNjRjL2JLR2VXRFFKamdZeGo3NTA2aGlna0RGbkZBNEttZVZ0NURGZThRQllZOUxkNklNNWo4SGJUelBFTjA2MGQ4d1VvUFhFa2ZpMFBQUWlrUVA3eTJRanMybXpCL0ZWS2xudllIeDU4T0E5czNQeVNUVWZ1UjhGMUxBODNDVmk0TXdkTDMyOXdZcFd4M2o2K24vS29hdU1wck5idXNuNmU4VE1PaFhYV1BRcjljUWQ5TEJEczBVa25acG50MDRBOXFLelk0b25hOGF6VHFkZDVYczR3N2FhelFJd2tGQ0RwQUJBZ3dybWNyK2Mwc3BYWnpJdG11QnNSb0RvVUdnMmY1RGFuWWRFNUVkRklMbXFkZ3ZCbWR0RHhkTU5YMVdvTnZROXVFUWliZGFESlBEWHJMVUxiL0RESGVTYmFldzFqd3VOa2Z2aml5YXRidEdkQnVQWER5Tkg3VjVuYzU4RCs0UFMxQndMNUZvamg2WkU1VTdReHlONWZINVBuVThoWVRaOFFVY3lyQnlLb1RkWUJIKzRQd1luSTVxTWVzek95YlNhMU5zcHNNU0NUbk1kK2ZVS3lVMzU4SXBVUEV3aU9rcldiL05UaFkxQ0ZOVmJrMkZQc09CM0VySlZxYi9JNUtwYVB5S3pMTloxQWMwb2RvNDl1eUVGUXhxOFFDZmVaeER6RVRaOVQxcVd6RG5UY0hxQzlmRnIwak0wbjZPd0ZyUWxPRFN2MmZTVnJWc3JwaE1WSlVOZG55Q0NZMElGTUk5NlEySnc4M2o3UGw0eU9XSzhSZWZMQklaL3d0WHhTSGphVW0rb1o3N1FySldQeFhFNXhVQ3dLMUFlc2JLT1NUZkdPZlBtNlJQbk1nY1Y2ek5VU3d5MnNIaVhhTzB2NFNJTVhPZVFTTkR4SjB0UDRmYWJhcWZGaC9zdGFKQUlDdi9ZNGJ6dDlWeFlwSkZVTzBYWXVUenE1L25rb3UvSEExT3hKTEh2MnZKMjBCN05wNXJQR012QnhYeXhGZ3ZvdER3NlhCK2pGYnMrNStsaU8zTGZRR2VkSXArcmVzckc1N3VqYzNZM2RPc1lmWSsvZXZvTzE3OHZCRW5leUJBTWk1RUFSOWJRZEx1TzBjeW05enpSVnJNc0RUc05nUm01NkcvYlFtQ1k3UVlQRnZzRVczcHdMSkZaOVRrYVdJamh6eEVmdlFXS2NBdS80Y1hqVk5nZnBXU0ZyWFdkQnF2dUFoNG9kWHdnNmZvWFA1UHF3Ryt4b0JuejZ0SVJidE04aU9hU3BPZmZVc2JtT2tuak91SXpwdWZBY3lyZnc1c3NScnl5SkZQUFhzOU13eUdrVHVNODZlVEUrWU5iNXo0NHI4ZnpFZG9UUHlBdjRQVTVYbVYxMjRPZ0NxM2R1TUxuSWJDdG8rOGdGQUZtazFEcXpvM3pvbk95TEJlUm1wYU1lUmNGSnpUNlpQdnVlaTQxblM1N1hHdTNndVkvVFdRQlRLSGVGVjY5dFRaa0greW9taTJ6T2M5dWVIY2JuUXgvMEZ4K08xYS8zVENpMTFNaE9ZR0lIckxIN2JDZXJzdGxESjhkVkoraDZ6T2ZEUFJ3bGtwMDVXbndLVFBJdVRkMWNJN3BYenpQeVQ1bGVObHc2M2dKRzlxQUNsSENQTGZ0UWlzOENoalBQenc0NTYxRWNWcGxmUi9aZTJJbFBuWU9heEF3bjgzZ1pjSWdvQy9UNnlWcURiUFk4bktkZHpXb3Yrc05LQjRQUjgvajRGeTVzK3JBN2EzRjhvcFoxbXltY1pGeDAzTnVwdC9ZeGRQMHRVSDY4OVIxbldwV0hOdXdLTXVXUjBRTUhNNjdydTAvNUtmdnpoVlZPVnQvU041RFVKOFE1VU1hSFBWaHFOTXlVbU9xTHhCK1dtWS8zc1ljSWU3YTJYWTZYZGlpaWJXNDQ2ODlNWkd3YXh2dTVKeU9jeHpqc2JmL1RZMTdmTWp1YkN5Q2J6bW00bXdlYjR6cVJPL2xZWWVodzhyR1B5OVF3Nkg2eXNkc0gxK0syNTdBMjJoWmpoMlV4a3hOOWhBOE1FWmVFK0RwcmJOa3NrYU1QOCswK29jN1JURWZ3TGl2R2lJUmVDbmJoOFlIc3Zwc3ljSnc2RUlzZjVWUFNjNWxXVUxmNllMdm5IR0RZZUswY1JKN0FUeDdpQmN5TDNmUkpJdzQveFBNOUtYMGo3bHJzdXpsbmxsZER5dmlJaGVjMkxZMjVmUEZNQncvTFRyNWdmWVJUaHdnMnhBZTIydGtFNk96aFUrSFdjdjY0bytTMG8yMWZvTW1qZTV4SGU1YndGSityTVFGbHgxaDlCSE1mK3VSakhHQlIrZGVvcWZ2MHo1aVlQWDRNSGprU3gvTnFXR1VqMkcySEREcmdLeE5wWVhIZFpwWGlRNWtMdU9DY3NtYndSUUlhWHl5ejhEUGZlb204NlZjL0k0cnF0YXdmTmVxMFVqMkEzYkk0eDBjMzJibnNRMTdzUUQxUHViS3BHTnN3N3p6MlJiU1lSaFdIbnBxdDRyY3RteVo4RW9BbXhCYjVacnFia0Izbk14NWJhWHdpeE9jakhoM0RpVHBzRnVnQ2xzMnVNcXR3eTdiU0JEbjNzRGg4RWdCUHdQaFRUeVBCNVBuZG5WN0ZFdnYvZVo4eGg3Tjk3Q0tNU0NHZkFGc0pSaDZiblRHcll6cTVQWHVzV1oyQ0dJZlBkNElGL3IzaGtkVzR0a2Q0UG43cmtZR2JxSExlRU84QzZ6QllFMm5FVFpPZ1RqcVJRVHNJQ1hlSzJlZWNkc2M2eExhdVUxV3JCWml0T2dQYmEyMU9GL1NRenZHM1ZreGd1WHRHQjVXZHB5Q2RWdjd1V0NZVFV5THNlQzRIV0ZydFlNdEtkQW9RaXNRSjYrTnpOQ3ZZOFp5Ukt3NDh4UUNoYThnY09LTlpWQ3VLZ2s4cGZYekNRRlhLcnZBNUU5OE8yZXpqQjZyOXZpamY1VE4vRytLMU9QeTZPOG9TVW5JN0dyOURlN0Y4SStEc25tV2o5VDJmeHlpTEhJb0ZnSSs2OEo1NzRTeE8zYTdMNThQNGJKMEEvcjNxcFNSQi9FenhlUnFSZlFJVHhoaUFWcGpGbUQ3Y2JKdTI5Umpma3Ywelh1MDdCeCtPNXhDK2ZXNVdQdW1vZWNvWUVWOEFjcnYyUExOTWtHZndSVlpLVU1TSnN5VWlIakhHMTltSHFUdSszeDZUSHM2elNhQmV3SWZEK29vUGRBNzJISCtWdXh6V0o5bXBCdXQzakh5MnJRekYzQ3JvYW1JZm1MdWRNTUNOUWRSc3IvQTVqNXMzdzJCWnZldk1BU2svbGNTT0xEelBKNFdPTCtOR3NSbHlxRHpmWGoyMUR6NDJPUHRvaWNma2NiU21mSjJ6MjR1bEhvN0U1aXFRaWhha1R4K1RHcERlTXoxQzJVZjR6QjMxNWZOVUxQVzUyK05qcVo5NysxeW5ZQkhVNHlOVG5UUnpwamVpYzMwR2VmbDV4dGdwSC9MSkFzUVk0N3dkYVdDVkE0SldjVFRwTU4zdHdUVC9zbXU3VjgrKytDN3JBRGtFOXg3SENWaHc4bnBnN0lPcEhYWG84eHA5cU9PcC92Rmh5TDRZazM3VTA5RkJremJIM2FnREJ4dXdXdDI0T2thMU5XQWxqMElSRkQ2emFaWUdlWHJpT2NDM1dKL2xyY3VXdSs4ODdheWZydjdoZ2FYajhweStWeUptZDVxSEljMldyampNd0dNZ0tCZlUyTm84eStVcjB2aStjVnVqOCtWNGcyMEJrMCtzdzRZOWh1WENpVUdPVFhmcUdwVFpKeUY1K2o1Zm43c21mOXYyNHpxeC93VDR1dXBWUEhJZ05IZ1c1SUZ1UDdNOXZvUkxmZFZIRDhHSUFmZnNBY1I5R3ZlVEQwQWJCZG1IQTN5UGVlRVhMZEtHbTRyN29aN1BYRWY4QkNKdm5ScXY5eG1OVnQxR0h3NTlocDFqSDhSdEsxVXNpMkZsZllidERENnB3bno3emhIRWM1enpycWRRREJhbWhTenA1NW56WmFzWnZvRTVMZ25rNFpUSnMxdmxmRW5UY1h6ejFKZEVINXhta2lEeUJxOUQ4ckZqYkljRmwvTE94ZldiZzdRbXloSFdEd1NCejc0L2JxZjduR09zNnZVMHdRZk5BUm5Pckx0dDVhaHE2L2M4eFdQZU9UbmNzMFdUZkZZcjNSNHBwek9nVHp6QlJ5NnJuQUNFODh5MEp3MldNcW1uaStOOWJhYXhlOENHZm9tQ3d3THMvZmc4ZXpZVlBCeGtyaXRhZ1dDVGdnY3pQVHZFMzRkdUpwK2ltQjJ3ZFNyMVgydlpBRUZqNkRlQXpXS2F4SWR3UHpBM3Uza2lvdU02RDFKS1g1cWVmTXRLdWRKbGhwdG8ySDFNd1p1ZHR3WEVxdWVjOHd1YXNXT0FyR08rNjdRamkrVytQaDkvKzRxVEZpVzBEaUI2U05LRzAvaHR6MFc0d3BpMlJsODN1NUVTOGdQZHlmWjRQb2lSR2J2aVpibWxOWWFXZkZvbGlMQllwalNmZDNZRjRPdUVGTHVYMXZESnUydlk4dTJENnQvMlpXUUlkdTVVbTN3VkM5VzZjK1J0OGJQWkdtZGp5WjNZeEJyYk1YdGI3dm42Q0hFY3cvUDU2cEFWYktsWk9rQzQ1SXJTOVZrTWRkdVVaOE5Fc04za3RrTjN3YmJsN0dCcFF3QzJuZzArbm9vNDhqaWFyOGRqN0xVQVp2OFBQUGZ2RWE2TzBVNEFBQUdEYVVORFVFbERReUJ3Y205bWFXeGxBQUI0bkgyUlBVakRRQnpGWDFPbG9oVUZPNGc0WktoT0ZrUkZITFVLUmFnUWFvVldIVXd1L1lJbURVbUtpNlBnV25Ed1k3SHE0T0tzcTRPcklBaCtnRGc1T2ltNlNJbi9Td290WWp3NDdzZTdlNCs3ZDRCUUx6UE42aGdITk4wMlU0bTRtTW11aXFGWGhDQ2dIejBJeU13eTVpUXBDZC94ZFk4QVgrOWlQTXYvM0oralY4MVpEQWlJeExQTU1HM2lEZUxwVGR2Z3ZFOGNZVVZaSlQ0bkhqUHBnc1NQWEZjOGZ1TmNjRm5nbVJFem5ab25qaENMaFRaVzJwZ1ZUWTE0aWppcWFqcmxDeG1QVmM1Ym5MVnlsVFh2eVY4WXp1a3J5MXluT1l3RUZyRUVDU0lVVkZGQ0dUWml0T3FrV0VqUmZ0ekhQK1Q2SlhJcDVDcUJrV01CRldpUVhULzRIL3p1MXNwUFRuaEo0VGpRK2VJNEh5TkFhQmRvMUJ6bis5aHhHaWRBOEJtNDBsditTaDJZK1NTOTF0S2lSMERmTm5CeDNkS1VQZUJ5QnhoOE1tUlRkcVVnVFNHZkI5N1A2SnV5d01BdDBMM205ZGJjeCtrRGtLYXVramZBd1NFd1dxRHNkWjkzZDdYMzl1K1pabjgveHJ0eVl2RFJmRzhBQUFBR1lrdEhSQUQvQVA4QS82QzlwNU1BQUFBSmNFaFpjd0FBQ3hNQUFBc1RBUUNhbkJnQUFBQUhkRWxOUlFma0J3SVJFZytzaDBPcUFBQWdBRWxFUVZSNDJ1eGRkM2dVMWQ1K3oyekxwdmVFa0lSaUNDMFFhZ2hkT3FHSU5CRkVVY0VHSW9JRnBQaGh1VjdBY20zWDNwQXJLZ29pSUNBaXZZbDBFa3BDU085bGU1dlptZlA5c1R2RDdHWkRVVVRVL1QzUFBKdmR6Y3llT1hQbW5mZlhDYVVVZnZudFlyUFpVRjVlanVycWF0VFcxa0tuMDBHdjE4TmtNc0ZzTnNOaXNjQm1zOEZtczhIaGNNRGhjSUJsV2JBc0M0N2p3SEVjbkU2bnRQRThMNzN5UEE5QkVPUi9FMEVRSU44b3BlSXJvWlJDM0FBUTcxY0FvSlFTOTlDbFY2L1BTRjVlWGx4VVZGUVRqVVlUcDFBbzRoaUdpV0VZSm9vUUVna2dBa0FvSVNRVVFCQ0FRQUJhQUdyM3BnREF1SThuQU9BQnNPN05Cc0FLd0VJcE5RSXdVa3IxbE5KNlNta2R6L08xSE1kVjJlMzI2b3FLaW9yMDlQUnE5M0dvYkd2d25oRGkvWjM0R1FCUVFraURWOWxHR1lZQklRUU13MEFRQktqVmFqQU1BNFpocUVLaGdFS2hBTU13RVA5V0twWFNxN2lwVkNxb1ZDcW8xV3FvMVdwb05CcG9OQnBvdFZwb3RWb0VCUVVoT0RnWUlTRWhDQThQUjBSRUJLS2pveEViRzR1RWhBUm90VnIvelhRZGhmaUI3YmNKeTdJb0x5OUhaV1VsYW10clVWOWZENzFlRDZQUktBR2ExV3FGM1c2SDNXNi9JcURKd1V5K0NZSkFSSUR6QWpNUElCUEJTUTVTM29BbGYxOWRYWjBhSEJ5Y29sUXFiMkVZcGlVaHBEa2hwQm1BWmdBQ2JwSnB0Z01vcHBRV0NZSlF5UE44QWN1eUYzVTZYWDZ6WnMwdWVBRWN2UXpnTlFCQUVmZ0lJUjVBUnltbFNxVlNCRFlKME9RZ0o5L2s0TllZd0FVRUJDQWdJQUNCZ1lFU3dJV0doaUk4UEJ5UmtaR0lqbzVHZkh3OEVoSVNvRmFyL1RlWEg5aitIQ2twS1VGbFpTVnFhbXBRVjFjSG5VNEhvOUVJazhra0Fack5acnNzb0hFY0o3RXpiMUR6QldZaUt4T0JUYngyUG9ETTQzMWVYbDVzUWtKQ0I1VksxVUdoVUxRbmhMUUgwQmFBNXE5OERYaWVkNVNXbHA1TlNrbzY0M1E2ejloc3RwemMzTnljSGoxNjFMcVpvaHpVQkRkVDgyQjIza0FuQXBzSWFDS2J1eExJaWFDbVVDaWdVcWt1QzNCYXJWWUN1SkNRRUlTR2hpSWlJZ0pSVVZHSWlZbEJmSHc4a3BLUy9EZVpIOWh1bkZSVlZUVlFPdzBHZzZSMnlnSE5icmMzQUxRcnNEUWlxcDFlZ0VZYVlXVU5HTm5FaVJNVkgzMzBVZmVBZ0lCdUNvV2lLeUdrQzREVXYrTzE0SGtlcGFXbGFOYXNtZmRYZVlJZ0hPTTQ3cmpSYUR4Mnh4MTNITnU5ZTdjZ0F6c0o5QWdoZ2plamN3TmJBemJITUF6MUFYQlFLQlQwU3V4TkRuQWlleE1CVGxSUHc4TENHcWluY1hGeC9wdk9EMngvbkJnTUJwU1ZsVWtzelpmYTZjdU94bkVjV0phVkdKb1BPeHFSMjlGOE1EUGl3MTRtc2pMeXhCTlBLSll1WGRwSG85SDBaQmltRnlHa0o0RGdmOEkxdVF5d2VZdVpVbnJJNlhRZU1wbE1oMmZPbkhsb3pabzFUaDlBSjRqQTVnWTA2c011UjcyWm5KZjlqWHJiMzBRR3AxYXJKWUJyelA0bVYwOUY5dGEwYVZPRWhZWDViMEkvc0YwLzRUZ09KU1VsSGl4TnI5ZExMTzFxN0dpK25BTWlvSG14TTBuTmxERXl5SUdNVXNyVTE5ZTNDdzRPdmxXaFVQUWpoUFFIOEk5YzlkY0FiQTJlVTRJZzdPVTRibDlWVmRXKzVzMmJuM09EV3dOV0oyZDBJbnVUL3kwNkdPUWdKd0pjWTg2Rks5bmZSUFlXSGg3dXdkNlNrcEtnVXFuOE42VWYySDZmVkZaV29yUzB0SUZ6UUs1MmlxQW1zalNSb1YwdG9QRThMNm1aZ2lBMENtWldxM1dBV3EwZXpERE1ZQUFkL0ZmbmR3R2J0MlE3bmM0ZFJxTnhWM1IwOUQ2NHZMaUNOOWcxQm5JTXcwanFxa0tob0ZjTGNDS0RFOW1iQ0c1eTlkVGJ1WkNZbUlqNCtIai94ZmNEMjdXTHhXSkJjWEV4eXN2TFVWVlY1ZE01Y0tYd0RTKzFrM2c1QnVUc2pIZ3hOQW5NYkRaYmxscXR6aUtFWkFGbzZyOHlOMFRLZUo3LzBXUXliWStNak55T1MrRXFQa0ZPcHE1NnFLb2lpL1B5b05JcnNUZHY5ZFRidVJBWEY0ZUVoQVFrSnljaktDaklmN1g4d0haMVVsSlNJckUwdVMzTmwzUEEyNWJtZzZWZENkQ0l0ODNNWXJFTTFHZzB0eEZDUnZuQjdLWUF1UzE2dlg1TFRFeU15T1E4UU02YnhjbEFybEdBVXlxVmpRS2NuTDE1T3hlOGJXK0ppWWwrNzZrZjJDNHZKcE1KUlVWRktDc3I4MkJwQm9QQkl5YnRLb05zaWFoNml1cm1aZGdabzlQcDBvS0RnOGN5REhNN2dIYitKWGxUeWxtV1pUZVdsNWR2YnRteTVSa1p3UEV5a0tPeTF3WXNUcTZtdW9HTlhrMXdyenoyVGZTY2l1eXRhZE9tYU5hc0dVSkNRdnhYeUE5c0RWbWE2Q0R3NWZGc0xJUkRCRFZmZ0NiUEVwQURtZ2htbXpadENoZzhlUEJFcFZJNWdSQXl6TDhNL3pvaUNNSTJxOVc2NGEyMzN0cTRhTkVpR3dDbkhPUmtMRTRRMlp1M211b1ZIdUlCY0NLNE5SWWE0dTA1RlIwTGZ2Ym1CellBZ05WcVJVRkJRUU1IZ2NqU3pHYXpaRXU3UXViQTVRQ055TlZPdlY3ZklTZ29hQkxETUpNQStGZmlYL3laeUhIYzJwS1NrdlVwS1Nsblphb3E3NjJxeWdDT1hnbmdMaGZZcTlWcUVSd2NMTEUzYjhkQ2l4WXRFQmdZNkw4eS8xUmdxNmlva0ZUUDZ1cHFEd2ZCbGVMU1pLRG1FOURjQWJVZTZxYlZhczFTcTlXVENTRVQvVXZ1YjhuaTF1bjErclhSMGRFNzNBeE9EbkM4THpWVkZpYlNBT0FhczczNWluc1RWZFBZMkZoSk5XM1NwTWsvL3Bvby8wa255L004OHZQelVWeGNqSXFLQ2lrbHltQXd3R2cwd21LeFNLRG1jRGg4WmcrSWdDYXpvL2tFdEx2dnZsdngwVWNmM2ExVUt1OEcwTWQvKy85OWhXR1ljWkdSa2VONG50OXZzVmkrSGp4NDhOckRodzg3UlpDamxEYndyUEk4VHdWQm9HTGlQYy96VkI0UzVIUTZxVHhjU05RUTVLWVE4YUVyUG9TdFZpdk1aak5NSmhOdXVlVVdLQlNLZnk1akt5d3MvRWVjcU5GbzlBbG9vc2RUcm5aZXpvN21TK1dVc1RPeWFkT21rTmF0VzkrclVDaW13Ujl6OW84VVNtbTJ3K0g0Y3YzNjlXc1dMRmhnSklUd01pYlhRRTJWc1RodkJuZForNXRjUFJVRGU4V2MweVpObWlBNU9SbWhvYUgvVEdEak9PNXZmNUpsWldVb0xDeVV2SjVpQm9HMzZ0bFlHSWVYMmtsa2FVOFNxR1ZuWjBlMGJObnlmb1ZDY1QrQUZQL3Q3UmNBK1hhN2ZkV21UWnUrbmpKbGlzNUxUZVhkNENhcHFPNWdYeXJQUWZWV1QzMkZoWGluWkVWSFIwdGUwK2JObTZOcDAzOWU1TkRmMnNaR0tVVnViaTZLaW9xa2dOdkxlVDI5TXdnYVVUdEZMeWRES1NVblQ1NE1iZHUyN1F5RlFqRUR3QzMrZTlrdlB1U2l6V2I3L0t1dnZ2cHkrdlRwaHNzQkhDRkVrQ1hkZTJjdVVGOFpDNDE1VGNXQTNtYk5taUUxTlJYdWJBay9zUDJWeFdReTRjS0ZDNUw2V1YxZExYazk1UUczamVSNUV1OVVLQzlQSjdOa3lSTEZraVZMSGxRb0ZBL0NIMy9tbDZ0NzBKNjFXcTByNzdqamp0VmJ0bXhoM1FBbnFhZ3lnQlBrSGxUdjFDeVZTa1VieXplVnE2V1JrWkdJalkyVjFOS1VsSlIvVE16YjN4TFlxcXFxa0orZmo1S1NFbFJVVkRRSTVmQk9YcGZiMUx4WW1vZGpRUFJ5MnUzMk8xVXExU01BZXZodlY3LzhCb0E3YkRRYVB3c1BEOTlJQ09HOEFNNmJ3VkZaQmdQMVptL2VNVy9lQWIxaVNFaVRKazJRbEpTRVcyNjU1UjlSRHVsdjV4VXRMQ3pFeFlzWFBlTFQ1TG1lM3NucmNwWW1PZ3JrYXFmTWpzWllyZGFCYXJWNnBqdmx5UzkrK1cxc2dwQ01zTEN3REo3blIxVlhWMy9XcEVtVEEzS0E4L2FpOGp4UDNRSkJFS2hYL1Q3eFBYeDVVVVd6aXVoRnRkdnRzTmxzYU42OHVSL1kvaXIydFBQbnorUGl4WXVOT2drdVU5bTJBVXVUcTUzMTlmV3BvYUdoc3dnaEQvdHZTNzljTDJFWVprUjhmUHdJbG1VL3lzbkorYnh6NTg3NU1vQVR3MFI0QUlJZ0NJTFkzOEs5VVRGbFR3NXUzaUFuT3NDOHdjMXV0Nk4xNjlaL1c3dmIzd0xZYkRZYnpwOC83K0g1bE1lbk5XWlA4MlpwYmxDVDFNNTc3NzFYOGNFSEg4eFdLQlNQQVVqMDM0cCsrU05FcFZMTjZOU3BVNWJGWW5tL2I5KytueDgvZnB3RndMblpHeU9xcUpSU3FSaW0yNEZGNWNVVnZBSE91MXF6SE9CWWxwWEE3ZS9ZU09ZdkQydzZuUTY1dWJrb0xDeVVDa0xLcTNMNEtnYnBmb3JKUVUzTzBoaEtLYkZhclVNMUdzM2pBQWI1YnoyLzNBQnBHaGdZK1B5dnYvNDZvTHE2K3FNbVRacnNKWVN3TXZXVTRGSk9LdlZpY0hLQW83NmFBdmxTVDhVb2dOVFVWRVJFUlBpQjdXYVJxcW9xajNBT01ZbmRWNFZiV1NnSEVlbTVENWJHbEphV3hzZkZ4VDNPTU14Yy83M21sejlCUFIwUUh4OC93T0Z3L0hmSGpoMmZabVZsVmJyVlUwWU9jSzRLNWtSb2pMM0pWRlZjalpxYW1wcjZ0M0lxL0dXQnJhU2tCSGw1ZVNncUtwTENPZVROVlh3NUNieFpHcy96Y3BiRzJPMzJDU3FWYW03cHVlTmR5eDNCeUVodmRWT2RjMzE5UFdwcmE1R2FtdXBIZ0wrQTZQVjZiTnEwQ1E2SEE0TUdEYm9tZzcxYXJaNDFiTml3WG5WMWRlOUhSVVZ0SVlRbzNPb3BKN085RWJuOVRRNXdMTXNTbG1VYnRiMTVNemlPNDFCVFV3T3oyUXdBaUlpSVFPdldyWDgzOFNnb0tBQUF4TWZIWDlYNVYxUlV3T0Z3L0c3bkJ0UG9ONndlbnl4N0VvUDdaeUlqc3o4ZVdmZ3F5a3pPbTJMQjVPZm40OHlaTXg1eGFwZlltZzdGRjg3ZzJKRmZrWjJkZzhMaU1saHNkamdjRGlJQ25EczFpZ2lDd0FpQ29LaXNyRXgyT3AydnFWU3Evd0hvdXZvLzgzRFB3bmR1aW5NOWZQZ3czbnp6VFFEQWtTTkg4TnByci8ycFkvZzl3bkVjQmcwYUJJUEI4S2VONFhyTDJiTm5ZYmZiRzN6dWREb3hZY0lFRkJVVklUQXdFRmFyOVpxUFRRanBIQmtaK1I3THNvdDM3TmpSakZJYVFDblZ3TldZV2tVcFZWQktGWUlnS0FSQllIaWVKMDZuazdBc0M1UEpCS1BSU0VRdnFEeVAxR0F3U0ZXaUt5b3FVRnhjakFzWEx1RFFvVVA0K09PUDhmYmJiLy9tZGZiU1N5L2h6Smt6QUlDQ2dnS3NXN2NPSzFhc3dLcFZxNjVxUFd6WnNzWG4vMTdyZW1nVTJMWjk4Q3hlL0hRM1JrNS9CdiszNEQ3ay9mZ2VIbm4yNHo5OUlaMDdkdzVuejU1RmZuNitSN1Zia2ExVkZlY2h2NlFheXNCUWhBUUhnSE5ZU0gyOW5vaU16YzNVaUNBSUlrc2JGeDBkL1JVaFpPYk4rTlQvOHNzdmtaR1I4YmNZZzBxbHd2dnZ2LytidWk3ZERQUGdTK2JNbVlPU2twSUduK2ZsNVlFUWdrV0xGbUh5NU1sbzE2N2Q3NW0zQi9yMzcvL2ZFeWRPWkFIUXd0VVRWZ1EzcFJ2Z0dCSGMzTDAwQ00vemNEZ2N4RzYzRXhIY0xCWUxUQ1lUVHA0OGlZS0NBdFRVMUVqOVBWaVd4Wmd4WXpCdzRNRGZORTZUeVlUZHUzZWpUWnMyQUlETXpFeXNXTEVDdDkxMjJ3MWZENDBDVzFGUkVVaEVjMHlaTkFZamI3OFhMeTkvRWNPNkpNRUpRRjk0RkhQdm40Q01qRXpjTnZraDdENVhCUUE0dXY1TkRNKzZGM2syQUhEaXhZZEc0dUZsWDdwNStVbE15aHFPZDcvWWlEbFRiMGRtUmlZKzIxM29ZbUNIdnNjOTQ0WWlJNk1YcGo3NkhQSnJIU0p0eE5aUGxtUDBnTDdJN0RzWUR5NTRCYWZQblVOQlFZSFVEcys3SjBGRmVUWEFxQkFhRkFDVldrdlVTZ1dvNEhTQm10TkpPSTVsbkU0bjAyUEFpUEJ2OXAxNVFhVlNmUW1nMjRGdjM4VHcvcjB3OExaN2NMalFKS2V1SG1OWTh1WWFPRzdRVFdNMEduSDI3Rm4wNkhFcER0aHF0V0xldkhubzM3OC9IbnZzTVRnY3J0R1l6V1k4OWRSVEdEcDBLQ1pObW9SVHAwNEJBTDc0NGdzOCt1aWpHREJnQUJZdlhveXNyQ3pNbVROSGJMcU10V3ZYWXVUSWtjakt5dkw1cFBRMWhsOSsrUVhqeDQvSDRNR0RzV1RKRXRoc05nQkFiVzB0WnMrZWpheXNMSXdmUHg2Ly9QS0x0TTlkZDkyRmtTTkhZczZjT1pLNkk4cW5uMzZLNGNPSFk4aVFJWGp0dGRmZ0hUVHVQWWJ2di84ZTc3MzNudlQ5NmRPbnNXREJBb2twTFZ1MkRFT0hEc1hZc1dPbE1aak5aa3lmUGgydnYvNDZoZ3daZ29rVEo2S29xQWdBOE1JTEwyRC8vdjNTOFZhdlhvM1ZxMWRmOXRyczJiTUhFeWRPUkdscEtlYk9uWXVKRXlkaTU4NmRBSUNubjM0YVR6enhCQ29xS2pCeDRrUk1uRGdSTE10ZTluanIxNi9INjYrL2poa3pacUJmdjM1WXVuU3BOQS9MbHkvSHFGR2p1aXhjdVBDRFhidDJ6ZjN3d3crakthVUJBRFNVVWhXbFZDa0lncExuZVViYzNNQkdEQVlEYW10clVWdGJTMncyRzNRNkhVNmZQZzJqMFlqczdHeHMyN1lOUjQ4ZVJXVmxKY3JLeWxCUVVJRGk0bUxVMWRWSnY1K1hsNGQ3N3JrSGdpQkk0NTA5ZXphT0hqM3FjUTRiTjI3RXFGR2p3RERNRmRmMjVkYkR1WFBuTUdIQ0JBd1lNQUNmZnZycEZkZmtoUXNYTUhQbVREend3QVBvMzc4L0ZpNWNDTWgwYzQrdDhzUUc5R2pmRXAxNmpjRFNWOTdCNlJMWGlWTGVnRmtqT3FIN3NHbjRidE42ekpwd0sxcjNtSUFTTzhXdWorZWpSWXMrT0dtbW9KVERJNE5TTUd6Mlc2NzlxdmVoUzRzV2FObTZFMmJNbTQ5Rjg1L0Uzbnd6K0xvVEdOQytKVVkvK0N3MnJGK04wVDNiWXRUanJuMU9yRnVHbGkzYVl2N3JLL0hLMGpsSWlvbEMxclFuTUgvK2ZFeWZQaDNqeG8zRDRNR0RrWm1aaVk0ZE95STFOUlVhQlFGUmFoQVpHVWxDUWtLSVZxc2xhcldhVVNxVkN1S3lLYXBYcmZsMjhPSUhSLy9Zc20wZmVxeWFvNDdTUGJSclNnczY5cUdsZFAzYWxYUll0MVRhZXNUamxGSktUNnhiUmx1MmFFdWZlZXQvZE8ybksyaW5sSlowMmJvVDlFYklxbFdyNk50dnZ5MjkvL0hISDJuLy92MXBXVmtaZFRnYzlNNDc3NlJyMTY2bGxGSzZZTUVDK3E5Ly9Zc0tna0FQSHo1TWUvVG9RYTFXSzMzOTlkZnBmLzd6SDNya3lCRTZkT2hReW5FYzdkV3JGNjJ0cmFVSER4NmtJMGVPcEhxOW51cjFlanBreUJCNjh1VEp5NDVCcDlQUjd0MjcwN05uejFLZTUrbkNoUXZwRzIrOFFTbWw5UDMzMzZlZmYvNDVwWlRTUTRjTzBYNzkra243bVV3bWFqUWFhWHA2T2pVWUROTG41OCtmcC8zNjlhTVdpNFZhTEJZNlpjb1Urc3N2djF4MkREVTFOYlIzNzk2VTR6aEtLYVZMbGl5aGE5YXNvWlJTK3ZycnI5T25uMzZhT3AxT2V2YnNXWnFabVVudGRqczFHQXcwSlNXRkhqaHdnRkpLNllvVksrajgrZk9sZVowNWM2WjAvR0hEaHRIQ3dzS3J1a1pEaGd5aHVibTVEVDQvY2VJRUhUTm16RlZmNjQ4Ly9wamVkdHR0VktmVFViUFpUQWNPSEVoLy9mVlhTaW1sTnB1TkdvMUdPbVBHRFByamp6OVNudWQvS2l3c25BQ2dHWUFtQUtJSUlXRUFnZ0FFTUF5akpvUW9DU0VLdFZyTkJBUUVFQUFrTEN5TXhNZkhJems1R1FFQkFXamV2RGt5TXpNeGVQQmdqQnMzRHRPblQ4ZjgrZlB4MEVNUFllREFnVGgrL0RoWWxnV2xGR1BHak1IT25UdEJLY1c1YytmUXQyOWZPSjFPRDh3WU4yNGN5c3JLR21ESnA1OStpdWVmZjk3ak03ZXFqUFQwZEJnTUJ1bnpqei8rR0dQSGpvWFpiRVpWVlJVeU16T1JuWjN0c2UrcVZhdnc5dHR2Uys5UG56Nk5ybDI3b3F5c0RGYXJGUk1uVG15Y3NjV2xqOGJXcmQvanZxd08yUC9OZXhnemVBZysrZmtjaE9JRDJISFdnSWtQUG8zYlI0N0Jvc2Z1Qmx0OUZMdFAxbDhWQ3huMTZISjgrT295dkxqc1pmUnBHWVNDZzd0UmFHVXdmZDRpakI0ekdXKzgrd0ZtanV2dGVnSjh2d0UwTEFGOHhSbmtGQmtRb0hEaTlQR2pVcHlhZDBpSHpXWURUeWtnOEI2cXA4dnJLVEFVVU14K1k5UERVeWVPWDdsay9zeWhHbnNadHUzT1JmNnZoMURQQitEQnA1L0JtSEgzWUdDWGhFdFBvZTgzQUJGSlNGQVlVV1VMUkdJRWcxMjc5dDBReHJaMjdWcU1HemZPNDdNMmJkb2dJU0VCYXJVYTNicDFRMFZGQlFEZ3A1OSt3b3daTTBBSVFmZnUzWkdjbkl3VEowNEFnRlIxTlNRa0JFcWxFa0ZCUVdCWkZwczNiMGFUSmsyd2R1MWFyRjI3RmpFeE1UaDA2TkJseDNENDhHRjA2TkFCYmRxMEFjTXdXTEJnQWNhUEh3OEFtREZqQmhJU0V2RDIyMjlqNTg2ZHFLbXBrZllUZjk4N0lEUXVMZzRxbFFydnZQTU9UcDgralpVclZ6WlFNYnpIRUIwZGpTNWR1bUQzN3QxZ1dSYTdkKy9HcUZHdVpKQWZmdmdCSVNFaFdMbHlKUTRjT0FDR1lYRCsvSGxwREQxNzlnUUFaR1Jrb0tyS3BXa01IRGdRT1RrNTBPbDBPSG55Sk9MaTRxNUhXNzlybHU3ZHV5TThQQnhCUVVGbzM3NDlLaXNyQVFBQkFRRUlDUW1SNnFzeERETzRXYk5tYjN6enpUZFQzS3BwZ0tpYUFoQlZVd1VBUnN5ZUlZUVF0eU9OMk8xMjhEd1B1OTB1cWFaNnZSNTFkWFZTWUx2UmFFUnViaTVPblRvRnU5Mk9HVE5tNFBQUFB3Y0FmUFhWVjdqbm5uczg2cjNsNXVZaUpDUUVDUWtKVjNXdWphMEhBT2pjdVRPQ2dvSVFHeHVMWWNPR2VURC94dTZMaElRRUpDUWtRS3ZWNHE2Nzdtb00yRmhzVy9NWjloY3llR3p4TW16YnN4ZTNkMURobGRmZWQzbFFBR2cwcnVhdEt2Y3J4L0x1ZlFYSUdHc0RDZmVLbDJFNUJ3QUZOQnFYZzdaRmVoOWs5ZTNzb3B3bUN6aWJIaGZPbjBkaFlSSENrMUlSRzZLOFhQY29Ra0VJcFlKVU84M3A1QmllNTVuaXZPMEp2VnEyZUMxQXEzMERRSUpTbzRZQ0FNZXo0Snc4QUFXVW1vWk9ZcnZORGlYRG82YXlFcFdWMWVpU05RVlp2ZHJlRUZ0aWVIajRaYXVoTWd3anFRc2N4MEdqMFVqZmFiWGFLNm8vTnBzTm9hR2gwaloyN0ZqMDZkUG5zbVBnT0E1cXRWcDZIeElTSXBYRmVlMjExN0IrL1hyMDZORURJMGFNdUtyekRBc0x3OGFORzVHYW1vcHZ2dmtHdzRZTlExbFoyUlhuWWVyVXFmajIyMit4ZmZ0MkRCbzBTQW95dGRsc2lJeU1sTTVwN3R5NVB1ZFFQbmRLcFJMang0L0g5OTkvajNYcjF1R3V1Kzc2MDIxM2hCQmNJWTg3UWExV3Z6Uno1c3huTm0zYWxDaXFwaktBRTRHTmNkdVRJUWdDY1FmbkVrRVFpTVBoOEhBcTZQVjY2ZDZ5V0N3b0xDeVV3SzF2Mzc3SXo4L0h1WFBuc0czYk5reWFOTWxqTUd2V3JNR0VDUk91K3p5bzFXcklTNnRkelgyaDBXZ2FBellsanYrNEVrOHRlQlo3VCthanRMUVFlclByeGxFMDY0Wk8wU3I4c081L0tDd3R4YW92TndDQkxkR3RZd3ppWStJQTFPR1hnOW5JUDdrTEY2cjVLdzY4WlpjTVJDaFliUHBtSGNwSzgvRFl1RXowdnVkRm1Fd21ORW0rQlpiYUtnaWg4YmlsWlRNb0JSWUJha1dET0RWM3hWdkNzaXdVaEFCVUlDekxFWjduR1VHZ3pOQ0hYKzNYcEhubWg1bnR3MmJ1MnJnRzU0cEw4ZTJxTmJDUUVHUjBhWTFiT25SRUlDeFl2Mm9kQ3M4ZnhjbThPbWw4ZlhyM0JLZlhJU0VqQ3c4L09BMXQ0c09Ra2RIbEQxL1lhOWFzd1IxMzNIRk5UL3N0VzdaSWJ2YnM3R3gwN05qeGl2dFVWVlZoekpneG1EQmhBbHEzYnUyeFlIeU5vWFBuempoNjlDajBlcjMwUHg5ODhJSGt0UjAzYmh5NmQrOHVxUWxYa2wyN2R1SGxsMS9HYmJmZGhsZGVlUVZ0MjdiRndZTUhyemdQM2J0M1IybHBLVmF1WElrcFU2WkluMmRrWklCbFdVeVlNQUVUSmt4QVFrTENWUVdmVHBvMENldlhyOGZodzRldnlYaXUxV3BSVjFmM3A0QmZlbm82amg0OU9xTlhyMTR2RlJRVTlQRGxXQUNnRUFTQkVkbWI2RFdsbE1LWFUwSE0xckhaYkZJSi9ieThQSnc5ZXhhVEprM0NvNDgraXFGRGgzcFVDZUU0RHJ0MjdjTFFvVU92eTNrVkZoYUNVZ3FIdzRIZHUzZWpRNGNPVjF3UE9wMU9zamYvOU5OUGpjV3hNWGpzcGYraWV2NUN6QmczQkJ3Rm9sdDJ3Y3N2ejRGUzNRVExYdjhYWnM1N0hnUDdyWUk2ckNtZWVlVnRwSVVDR0h3blJxVjlnK1VQMzRaUFcvZERpNlpoMEYzaEpEVEovZkhLMGdmeDFMOFhvZSs3SEtLYWQ4VnpDNmZnOU9uVGlPNDRCSm10TCtEbmJ6NEQ2K1NoMElhZ1pZb0dBWEI2eDZoSjhXbFFLQWdSQkNJSVBBSEFESjc0eU5UWC8rL2had2pScGl4NCtYVVVQVElQSTI3dEIwVkFCTzViK2hxR3R0SUNHSW9sRHc3QnN4OCtqUjlYeDZKOXdxV3FvOE1mZmg2UGx6NkJOeDZmZ3VVOEVOMnFLMTdxUHhsQStCKzJZRm1XeFo0OWV5U0QrTlhJMHFWTE1YUG1UR3phdEFrVkZSVll1blRwRlcvbzhlUEg0L1RwMDhqS3lrSk1UQXdVQ29YazVtOXNEQWtKQ1pnN2R5NG1USmlBbUpnWUFKRGM3ak5tek1EQ2hRc1JHeHVMMk5oWUNJSUFnOEdBc0xBd2pCczNEdlgxOVRDWlRCZzFhaFNDZ29Ld1pjc1daR1ptWXZYcTFSZ3pab3pyd2FsUVNEZkk1ZWFCRUlLSkV5ZGl5NVl0U0VtNVZOZHo0Y0tGZVBUUlJ6RjI3RmhRU3RHdVhidXI4cWFLUFFOYXRXb0ZwZkxxd3p1blRwMktPWFBtb0huejVoZzllalNtVHAxNjNkZkQ4ODgvangwN2RxQzJ0aGJIamgzRFN5KzloUGZmZngrdFc3ZkcxS2xUTVdyVXFJRnhjWEhOQmcwYTlOYlBQLys4MFoyR0phL3N6QU1BcFZSd3gyNUNvVkJRa1JDbzFXb2FIeDhQczltTVU2ZE9TV3p4czg4K1EvdjI3VEZ5NUVnSWdvQTJiZHFndUxnWTk5NTdyOGY0ZnY3NVovVHQyOWVEeVFQQWhnMGI4TnBycjhGa01zSHBkT0xubjMvR0k0ODhna21USmpXNkhrU1FHanQyTFBSNlBYcjA2Q0daRHk2M0hod09CKzY5OTE0cDlPYUtaWXRZaHdsV0I0UHdVSy9PMDRJVDlYbzlna09qb2ZaWUJ3TDA5WG9FUjBaZVUvU3Z3RHFnTjlzQUJqaWJrK01SemxGZFhZWGFlaDBjTmx1RGJBSTVxTW15Q0pocGQwOVZMUC9QZnhkRWh3Y3Rna2Nnc210ODJ1QndhTlNlaE5WbTBRUEtZR2g5cUtTc3d3S2pqVWQwK0I5ZmF2bnMyYk00Y3VRSTdyNzc3bXZldDY2dURxR2hvVkNwVkZlOWo4MW1BOGR4SG1Xa3J6UUdsbVZoTnBzUkdSblpZSUhaYkRhRWgxOGI4SnRNSmhCQ0VCd2NmRjNtd1dBd1FLMVcvKzQ4eUNsVHBqU0l1OXU0Y2FPSDUwL3NrWEdsY3k0dUxzWWpqenppOFZuNzl1MnhZc1dLM3p5K21wb2FhTFZhTUF5RGYvM3JYODdFeE1UWDNudnZ2WTlPblRwbGQ2ZGtjZTdONmE3ekpoQkNCSGtoUzQxR0E3VmFUY1hhYm1McEk3Rm9aVlJVRk9MajQyRTBHcEdUazROVnExWjVuT3VubjM2S1BuMzZvRldyNnhmUUxpYnJ5ME5CR2xzUDJkblpXTGh3SWI3Nzdqdm85WHBFUmtiZVhQWFlkRG9kY3J4QVRYUVNpTTFXNU4yalpLQW1yNXZHVkZaV0prVkZSVDFEQ0prQnYvamxieXFDSU9EdXUrOUcwNlpOd2ZNOFRwMDZoYSsvL2hvaElTRXJkK3pZOGVIdzRjTkxDU0VPTDNEanZjQk5LajB1Z3B1OEc1WUlicVdscFNnb0tNQ3NXYlBRcDA4ZnRHL2YvcWJKTHhXQmJjT0dEWmNZL2MwQ2JISlFLeWtwOFFBMWVjTVZIMHhOVEkxaUJFRWdKcE9wbTFhclhlaXZtZWFYZndxNFpXZG53MjYzSXowOVhYSWc4VHkvSlRjMzk3MTI3ZHFkQnVDUXNUZW51N2tNNys2eElJaU5ZK1RnSnBZY0Y3MlhZZzIzbEpRVXFXRGx6UUp1VnFzVmhZV0ZIa0hRTndXdzZmVjZaR2RuK3dRMWthbjVVajlsV1FTRVVzclliTFpoYXJWNkVmeVZiZjNpRjFCS0Q1ZVhsNytUbUppNDF3dmNPRGU0U2N6TlhYNjhBYmcxcHBhSzRKYVdsbmJOWm9jYklYOTZFcnpCWVBESjFIUTZuYzhLSFY3cXB3UnFEb2Rqc2xLcFhBU2dsWDlKKzhVdnJrcTlDUWtKa2JXMXRXOUZSMGR2cHBReXhCVTRSaWlsSE54T0JjR2RVdUFtT1JRdXh3UDFBWlMrZmdOcGFXbS9LUzNxYnd0c0pwUEpwMDFOQkxYTHFaOXlVR05aOW1HRlFyRVlRSXgvT2Z2Rkx4N0FreElWRmJWWXI5Y0hoNGVIZitNdWQwUzhOVFlSM0p4T3AwOXdhd3pVeEsxRGh3NDNWYU1ZNXMvNllZdkYwcWlqd0VjVFk5SVlxSEVjOTVSQ29WanVCN1hHN1EvMzNYZmZUVFdtd3NKQy9OVWFkYi84OHN2bzNiczNoZzRkS3FVYVRaNDhHWk1uVDhiMDZkT3YrKy90Mzc4ZjE3SG5iMHhZV05nU3M5bDhMd0N0TEpoWG5xa2daU2s0blU3aXJscEpSN1FBQUNBQVNVUkJWTk1tSmREYmJEYVBRTjY2dWpvcGVUNC9QeDg1T1Rtd1dDdzRlL2FzbE5IaExmUG16Wk15WlJxVHpaczNTeGtPZnpsZ3M5dnQxK0w5SlBJT1VxSk43WjEzM2xGeEhQY3N3ekF2d3BWUzRoY2Z3dk04amh3NWNsT042Y1VYWDRURllwSGVHNDFHeko0OSs2YWR3NU1uVDJMTGxpMzQ2YWVmc0czYk5uVHExQWtxbFFxdnZQSUtubnZ1dWVzK3Z6VTFOVmkrZlBrMWhlejRrb3NYTCtLNTU1NFQzd1lFQlFVdHJLeXNmRWlqMFFRMUFtNEtRUkNJdlB5UnU5S3VCRzRXaXdWR283RlJjSHZpaVNjOFVxM2tjdXJVS2FsZ1FtTlNXVmtwRlNmNFM2bWlITWRkMXZ2cFpWTVRjejRoTDhmeTY2Ky9CcWVucHk5aUdPYkp2eU1ZSFRod0FNMmJOOGYrL2ZzUkZ4ZUh2bjM3U2psMVpyTVoyN2R2QndEMDZkTUgwZEhSMG43bDVlWFl0MjhmSWlNak1YRGdRSjlWRms2ZE9nV05SaU1WRWF5dHJjWE9uVHNSR0JpSWZ2MzZlYWdUUjQ4ZVJWNWVIdnIxNjRmYzNGemNldXV0a2xxeWI5OCtsSmVYbzNmdjNraE12TlFPb3F5c0RQdjI3VU5vYUNnR0Roem9rZVlGdUxJaWFtcHEwTDU5ZXdCQVRrNE96cDQ5aTkyN2QyUGJ0bTBBZ0w1OSswcnhaOFhGeFRodzRBQ1NrNVBScTFjdkNRZ3ZYTGlBbUpnWTdOKy9INm1wcWVqU3Bjc1Z4MEFweGQ2OWUxRlJVWUdlUFhzaU9UbFoyaWNuSndkUlVWRW9MUzFGYm00dSt2WHJoOFRFUk96Y3VST0hEaDFDUkVRRTl1M2JCN1ZhTGMxRDA2Wk5ZVEtaR21XbGh3NGRRbEpTRW5yMTZnVkNDSTRkTzRiVTFGUm90VnFjUG4wYW5UcDF3b1VMRnhBWUdPaVJZN2x1M1RxTUhUdjJpdXZoK1BIamlJNk9SbEpTRWdCSWViT0RCZzNDc1dQSGNQVG9VZXphdFVzS2NCMDZkQ2kwV3UzYzFxMWJxNGNORy9iUnl5Ky9ySGVybEtMZHplbFdTM2wzcVh4UkxZWEQ0U0NDSUZDajBRaTFXbzNFeEVRUFZaUVFncEtTRWdRRUJIalkyOFRyNTZ0czA5R2pSNUdibTR0dTNicDV4TUFKZ29BZE8zYWd2cjRlUTRZTWtZNzN5eSsvb0UyYk5nZ0xDd1BMc2podzRJQjBMZXgyTzdadDJ3YWxVb2wyN2RyZFdNWkdLZlVBTlhreXUzZlRGVmx2QWc5UU8zLytmRVI2ZXZyU3Z5dW9BYTR5T2s4KytTVDBlajJXTFZzbVpRUG9kRHJjZHR0dEtDMHRSV0ZoSVVhUEhvM2EybG9Bd0xGanh6QnAwaVRvOVhwczNyd1pEenp3UUlQamJ0bXlCZlBuejVmQThPTEZpNWc0Y2FLVS9EMW16QmdwTFdYMTZ0VjQrdW1uWVRRYXNXalJJano5OU5NZUtzWFhYMzhObzlHSUtWT21JRHM3R3dCdy9QaHgzSDMzM1RBYWpkaTVjeWNtVDU3Y3dEYXpidDA2andUbXVybzZsSmFXUWhBRUZCVVZvYWlvU0xUellPZk9uWGpnZ1FkZ3NWanc3cnZ2U29Hc3BhV2xtRFZyRnQ1NDR3M29kRHJNbWpVTHUzYnR1dUlZNXMyYmh5KysrQUlta3dsVHAwNzFLRlcwYXRVcVRKOCtIZSsrK3k1eWNuSlFYKzhxNmxCU1VvS2FtaHJZYkRZVUZSV2h0TFQwaXRkdjU4NmR1TysrKzJDeFdQRFJSeDlKa2ZJYk4yN0VrU05IY1Bic1dUenh4Qk1BZ1BmZmY5OURQYU9VNHZ2dnY4ZnR0OTkreGZWdy92eDVQUC84ODlML2JkMjZGWjkvL2prWWhrRjFkVFVxS3l2QnNxdzByNkt3TER2TDRYQThQSEhpeEdnQVl2RktGUUNsSUFnS0FBcEtLV0ZaVmxKTFRTWVRxcXFxWUxGWVVGMWRqWnljSEEvbVZsVlZoYTFidDZKZHUzYkl5Y2tCcFJSbnpwekIrUEhqVVYxZGpjOC8vOXhqN2w1OTlWVzgvdnJyc0ZxdGVPU1JSN0JqeHc3cHV3MGJOdURvMGFNNGZmbzB4b3daSTdINzVjdVhTeVlNbzlHSUo1OThVZ0xDcVZPbll2djI3Y2pQejNkbGZ6Uld0dWlQMkU2ZlBvMXZ2LzBXcjd6eUN1Yk5tNGVwVTZkaTVNaVI2Tk9uRHpwMTZvVFUxRlFrSlNVaE5qWVc0ZUhoSkNnb2lHZzBHa2FwVkNvVUNvV3lzTEF3VGhDRU4rbmZYSVlQSDA2enM3TXBwWlNXbHBiU0RoMDZVS2ZUU1d0cmErbXhZOGNvcFpTeUxFdG56SmhCdDJ6WlFpbWw5UDc3NzZlYk5tMmk3dExRZE1HQ0JWU24wMUdqMFVqVDB0TG8xcTFiNlpBaFEyaFZWWlgwTzZXbHBmVE1tVFBTOGJLeXN1anAwNmNwcFpUMjc5OWZHa041ZVRudDNyMDdwWlRTNDhlUDB4RWpSbEJYTldwS3Yvbm1HL3JVVTA5UlNpbjk5Tk5QNmV6WnM2blQ2WlMrczlsczB1OEpna0N6c3JLb1RxZnpPTithbWhyYXRXdlhCdk13ZVBCZ2FRd1dpNFYyN3R5Wk9od09tcE9UUXdjTkdpU040WU1QUHFEUFBmZmNaY2R3NXN3WmV1dXR0MUt4UitldVhidm8rUEhqcGQrYVAzOCtmZjc1NTMxZWowMmJOdEZaczJiNS9NNW9OTktPSFR0NmZEWnExQ2g2K1BCaFNpbWxITWZSbmoxNzB2ejhmUHJkZDkvUmQ5NTVoMzc0NFlkMDRNQ0J0TEt5a280ZE85WmpqbzRjT2RMZ3R4cGJEM2E3bldaa1pORGk0bUpLS2FWMzNua24zYkZqeDJWTEp4a01CcHFXbGtZNWpxTjJ1LzJEMmJOblp3Qm9BU0FCUUJTQVVFSklJTU13R2dCS2htRVVHbzJHSVlTUXdNQkFFaHNiaTRTRUJEQU1nMDZkT3FGUG56NFlPWElrSmsrZWpDWk5tbURGaWhYNDl0dHZwUnA1SDMvOHNYVC85K3ZYRC9uNSthaXNyRVJHUmdic2Rqc29wVGg0OENDbVRKa2lsUzFhdEdpUnRNLzA2ZE94ZnYxNlVFb3hkdXhZbkRoeEFwUlMxTlRVb0d2WHJxQ1U0cGRmZnNHSUVTTWdzc3kzM25ycnhxbWk1ODZkdzRVTEZ5VDFVOTd6VTdTcE5SSjhLekcxNU9Ua1JZU1EyZmdIaUppdjJMUnBVekFNQTZQUmlKQ1FFS3hldlJvclZxeEFhR2dvY25KeXBDZDdZV0docEY0U1F2RHZmLzhiZ012emJMZmJNWC8rZlBUczJWUEs3d1JjcFdPZWYvNTVXQ3dXQkFjSG82S2lBanpQUzZ4SVBKN2MxcE9ibTR2eThuS01IRGxTc3VHMWJldXFkako1OG1RVUZSVmgyTEJoU0UxTnhiUnAweEFRY01uOGVlVElFYVNrcEZ4VjNCUFA4OGpQejhkVFR6M2xNVjR4K1Y2cjFVcnFlWEJ3c0ZUSnBMRXhGQlFVb0czYnRwSjZucGFXSnRYakYrVjZwUVJkdkhoUlVyMlVTaVhhdEdtRHdzSkNwS2VuWStmT25YQTRISmc2ZFNvT0hqd0lwVkxwTVVlTkpYbjdXZzhSRVJHWU9uVXFWcTFhaGNtVEo2T21wZ2I5Ky9lL3FyWGwzaDRZTjI0Yzl1N2QrOEdKRXlmcXZiVXJkODRvTCthWDhqeFBXWllWKy8vQlpyTkphbWg1ZVRsaVkyTlJYVjBObFVvRmhVS0IwNmRQUytXazVPc29QejhmRm90RlVyY0ZRZkJZRTNMelJXcHFxa2UxRjE5U1ZsYm0wU05WcFZMZEdHREx6OC8zQ1dvK0tuUTBDT2tRYldvdFdyVDR4NENhWEl4R0kxaVdSWEJ3TUxaczJRS2owWWd2djNSVkpYNzAwVWVsLzR1T2prWkZSWVdVRUw1bnp4NTA3OTdkNVNGaUdHemV2Qm56NXMzRGUrKzlKK1Vycmw2OUdvbUppVml5WkFrQWVLZy9VVkZScUt5czlMQ2ZpWiszYmR2V1o0WFp2THc4UFB6d3czajIyV2R4N05neFBQamdnOWkyYlJ1aW9xSXVlOU1TUWp5cXN3S0FRcUZBZUhnNFB2endRNmtza2lpaSt1MUxHaHREVEV5TXh3MVNWbGJtQWZMWFU4VGZFcHZ1aUwvVnZIbHpWRlpXSWpBd0VJTUdEY0xpeFlzOUdxWllMQlljUDM1Y2VpaGRhVDBBcmlUOEVTTkdnR1ZaVEpzMnpjT3U2bXRldlVXdFZqL1FwazBiWWRTb1VlKy8rT0tMYUF6Y1JBRGlPRTRLQlJFZEFZUVFYTHg0RWQyNmRVTnRiUzBVQ29Ya1FEaCsvRGg2OSs0dEhVOWNROUhSMGRpMGFaTlBPN0I4ek9YbDVjak16QlRIS2ozQTVDYU9xS2lvQnVyOEh3NXNKU1VsVXRNVmI2Ym1iVlB6RmRMeHpqdnZxTnlPZ2puL0pFQjc3NzMzTUdYS0ZLeGF0UW9qUm95QVNxVkNiR3lzVkErcnVMZ1l1M2J0a2tyc1RKczJUZktrNWVibTRxdXZ2c0tHRFJ2Z2REcWhWcXVSa0pDQXQ5NTZDN2ZmZmp2YXRXdUgvdjM3SXlZbUJsdTNic1dPSFR0dzRzUUpuRGx6UnJLeFRabzBDUXNYTHNTRER6N29rWVBYdDI5ZnZQTEtLM2oxMVZmUnYzOS83Tml4QTBsSlNaZzhlVEtPSERtQ2JkdTJZYzZjT2FpcHFZRmFyWmFldm1MbGlPWExsemM0MS9Ed2NDZ1VDbnoxMVZkbzBxUUoyclZyaDVpWUdEend3QU9ZTTJjTzVzMmJoN3E2T216WnNnWC8vZTkvTHp0dmpZMmhhOWV1SUlUZzdiZmZSa1pHQnBZdFc5YWdTc1cxZXBzM2JOZ0F1OTBPanVQdzNYZmZJVFEwRklNR0RjTDk5OStQSlV1VzRNa25uOFRldlhzUkZoYUd0TFEwRUVJUUdCaUl0bTNiSWprNUdVVkZSUjc5QURadjNvemh3NGY3dk5sOXJRZkExVTFxOE9EQjJMQmhBL2J0OHl5QW1wU1VoT0xpWXZ6d3d3OElDQWlRQU1KYkZBckZRd3NYTG5UdTNMbnovZjM3OXpld2k3cmY4NElnU0hGdWxGTGljRGdvSVFUeXB1TjZ2VjRDdHRUVVZMejc3cnVJakl5RXpXWkRjWEV4QUtCMTY5Wm8zcnc1RmkxYWhQSGp4K1BZc1dPd1dDeVlPM2V1TkE5ZHUzYUZ5V1RDL3YzN3NYanhZZ0JBMTY1ZDhmbm5uOFBoY09DSEgzNlF4cGVabVluLys3Ly93M3Z2dllkV3JWcGh6Wm8xVUN4ZHV2UVB1em1ycXFwd3p0MmpRTjdNMkdBd2VCU0k5RTZUa3NlcHJWKy9mZ25ETUF2K1NhRDJ4UmRmWU5Tb1VUaDQ4Q0JhdEdpQnVYUG5RcVZTSVRFeEVZbUppZGkzYngvaTQrTXhZY0lFUkVWRklURXhFYTFhdFVKU1VwS3JGcFZTaVJkZWVFSHlMQ29VQ25UdjNoMUJRVUhvMGFNSHpwdzVnL1QwZExScjF3NHFsUXFIRGgxQ1dsb2FoZzRkaW9TRUJNVEV4Q0FqSXdOV3F4VkhqaHhCdDI3ZGNPalFJVXlmUGgwS2hRSzMzWFliY25OemNmVG9VYlJwMHdZVEprd0F3ekJJVDA5SFVGQVFkdTdjQ1l2RmdzV0xGMHU5S3RldFc0Y21UWnBJSGpxNU1BeURYcjE2WWQrK2ZhaW9xRUJhV2hwQ1EwT2xpcktpK2pacjFpeUpxUVFHQm5yVTZZcUxpME9MRmkwYUhRTWhCQ05IamtSMmRqYU9IeitPaVJNbk5tZ3kwckpsUzhUR3h2cThKbEZSVVEwOGQ5dTNiNGZGWWtHM2J0MWdNQmpnZERxUm5wNk85UFIwaElXRllmdjI3WWlLaXNLenp6NHJsZlNKaUloQXQyN2RFQjBkamVqb2FHUm1aa3FlNk9lZWV3NlBQLzU0Z3lqK3h0YURuRHcwYjk0Y0F3WU04TmhQcTlXaVk4ZU8yTE5uRDNRNkhUcDE2b1NBZ0FBb0ZBcDA2OVpOK3Ird3NEQjA3Tmd4NDg0Nzc3Uy85TkpMcDJXTVQwUTRLcXFjY2lhblZDcUo2TlFLQ1FueHFLUkNLVVZrWkNTYU5XdUdFeWRPSUNrcENWbFpXVWhMUzROV3EwVldWaGFxcTZ0eDhPQkJ4TWJHNHQ1Nzc1WFU3ZDY5ZXlNdkx3OWxaV1Y0OXRsbkplOTF0MjdkVUZwYWlweWNIRXlhTkFteHNiSG8ycldyVk9ycThPSERxS3FxUW54OC9CK1hLNnJUNlpDZG5lM0Ixcnl6Q3J6RE91UnhhbUx3clR0T3pTOSs4Y3NORUxQWi9PK1FrSkQvQWJDNUs0TTRBTENRVlFZUmMwdVZTaVYxTTJJcTVwV0tTZk1SRVJGU1htbHljakpTVWxLUWxwWjJ3NUxtL3hCVjFHYXpTUjNhS3lvcVVGdGJLN1hIdTV6NnlmTTg1R2xTRE1NczlpODF2L2pseGtsd2NQQmNuVTVuallpSVdPZG1aaFR1V0RhdjlDdnFJblhFbGFORkNHVVlCZ3pEZ0JBQzhXK2xVZ21WU2dWM2NqMDZkdXo0dTJ2ay9TbkFSaW5GK2ZQblVWaFk2S0YreXF0MGlCNVFlWkZJdDZ1V0VSUGEzYm1mL293Q3Yvamx4a3BBZUhqNFkxVlZWWmE0dUxpdDFKVmM2bTF2Zzd1SGd1QjBPa1hQcUFoeUlJUklkalp4RXdGT285RWdQVDNkWnhPWG14clk1S0FtTmpJV0hRVVdpK1d5bFc4RlFTQTJtMjJZdTBxSFAvZlRMMzc1Y3lRbUppWm1aa0ZCZ2JGRml4WUh2SmdiQlVBRlFSQzlvNUFCR2hHTFY0cWJITlJFWUFzSUNKQ2FLdjhsZ0syd3NCQVhMMTVFV1ZtWlQwZUIzVzV2a0ZVZ0MrdGdUQ1pUTjNjOU5YL3BJYi80NVU4VVFraEtjbkx5UThlUEg5ZDM3dHc1eDgzY1JKV1VpbjBSUk5ZR21ZTkJWRVc5R1p0U3FZUmFyWVphclpiNm12NVJjdDI4b2xWVlZaSmRyYnk4M0tkZHJURVBxRmpPT3pRMDlDVkN5RUQvc3ZLTFgyNEtjR3NhRXhNVDJxbFRwOU5mZi8yMXpRMWVrcWNVUG1xMnVWVlM4Vy81NTVCL0xvYSt5SHRjWEZmR2RqMWFoNW5OWnB3NWMwWmlhMklPcUhlYlBJZkQ0ZUVCRmRYUHUrNjZTd0hnbWZyNmVuODViNy80NWVhUzRabVptVFVwS1NtdlhiaHdRWkF4TjFmNmdmc1A5eXZjV1FuRW5VSUgrZVowT3FYTlhUVUU3ZHExKzBQQVRmbDdhejVSU3BHWGw0Zmk0bUpVVkZRMHNLczFWdExiN1N3Z0FKaGx5NVl0Y0RxZE42VHhpdGhUMGJ2cXhKWEVZckVnTUZBTFFoai9VdmZMUDQyNTNiMTE2OWJxbEpTVXo5MDRKc2pCalJBUnh3VEs4enpoT0k2NmFSc1Z2YVJ5RmRYYlk5cStmZnZyN2t4UUJnVUYvcTRENU9YbG9iYTJCbnE5RG1hekNWYXJCWGE3cEhMS0tuUTRpUmlkTFBlQTF0YldUSFU3QzI2SThMd1RUaWVQYXoxdm5VNkh5TWlJYStvNWFUQVlFUklTN0RPUzNDOSsrU3RKVUZEZ25QejhDNVczM0pLeUZZQTNjNVArVHhBRWdlZDVPSjFPS0JRTTRUaU9LcFZLaWFIWjdUWllyUmFZelNibzlUclUxdGFnb3FMOHVyYnVBd0RsdGR5bzNsSldWb2F5c25KVVY5ZWd2bDRIZzhFSXM3bEJqd0kzdUVtZ1J0eFVsZFRXMXZRTkNBaDRCamV3THB6cmFTSGd0NXkzYUFDOVdqR1pUQWdMQzhYdm1XTy8rT1VtRVdWOGZQekR4NDhmcSt6Y3Vjc3hYOHpOL1VvRVFRRFA4NVRqbkdBWXppdmtRd21WU2cyMVdnT05KZ0JhYlNDQ2dvSVJHaHJhSUNmNGR3MjJzV3FYVjVMUzhqSWNQM3NCT25kR2djRndLYW5kYkxiQWJMV0J2UVJzSWxzanZDQVFLbENtcUtnd0lTZ29hRDZBbEJ0THF4a3B6dVphVlc1NWN1OGZ0YzhmSWZwamU2Qm9sb0dRcUJzVEZrZzVPNncxOVZCR1JFT2pWUU53b21Mckp0aHNnS3BwR3lSbHRQbGIzT20vWlY1dGhUbXdPS01SblJMWHlIL1lVYlhqTUNKdjdRZVZtK2c3aWs2ajdGZytBSUxZUWFNUkhNcGN4N0ZFSURvbDRXcDN1YVYxNjliM3IxeTVzbnphdEdubEFNUkFYZkdWaXA1U251ZmhEdHFWUWtBdWVVY3Q3dEFQdGJzVGxoYkJ3VUVJQ3d1N3BxWXdqdEpjR0l4YXhMWkxhbkJPeW10V2s2Z1ZpejdZZ1AxRjVTQjFaU2l2cVVmWHVGQW9MU1pZTEdhVWxKV2hzTjRNd3RrZ0NFQ0lFc1RwZE1MSmNjVEJPUW5nc3F1OWsydCsrcm40K0NIa1QxaVFsT0thMVVNeFArNWE5dnN0Ky93UlV2TFpjZ1JOL2d4aHZRUC84TitxMi9ZWkRyL3lKYlROV3NCUlZvQm04OTlGbS81SlVBVUV3bkp1Tjg0ZHFFS3p6SFovQzJEN0xmTnFPTEFHaGZwTXhLYU9iSXpuSS8rOXp4RFk5MVpvM0VTZlVXcWcxZ2JnNHRzdlFKMStHMExERzY2bnl1OC9Sc0R0YVFpTDhSeEx3ZnRMb2V6MUdKSTZSRGJZeDN6aVI1UVlPaU0yTmZGYU5KNEI0OGFOSzV3MmJkcGJNdFlteUZnYjRJcHpnMXNscFF6REVJV0NvUTZIQWtxbGF4TXpFZFRxUzIzK2dvT0QwYkZqeDZzbUFwYmptM0gyVkJMaTA1bzFPS2RyQnphbzBUK3REWG8yRFVGaG9ScTc5cFppN3prZHVrY29ZTmJYNFdLZEZZbmhnZUR0UUVWMUhURXJsVkFJVG5DdUNHVkNBTVpTbS8vUXlEZjJ6TXpKVEVYSEc1eGJJRGRpL2pZMWx2bkQ5d0VFVURCdzZxdkEwU0FFUm5oNmpTZ0VFREN3VjVWRDBJUWpNUHpTWXJaWGxZSlhoaUlvS3ZUU0Rxd2RvQVRPdW1vSW1qQUVoSHFtdERpTmRiQVpIUWlNaTRkQzlkdEJtQy9kai8yTFY2TEgybzFvMGl3VUVHeXcxbk5nR0EzaUI0OUFNRk9PL0FLTGova1E0S2lwQnNjcEVKUVFBOCtISFE5YmVRVUVWVEFDWThJOXZxTU9LOHhWdGRERXhFR3QxZHhrOCtyN25BalBnVG9GVUtzQk5nc1FIQmZoT1Q1bkRQcCsreG1JYkk2MHpkcWhlYk4ycVB4b0NZQ0dhNWM2bldqLzNDb1FaY1BQemFjT1FObHFPb2dRRGlpVjBqaW80RVQ4N2ZNUUwvdnMwakE0V01zcndFVEdJU0JRMDJDdDhFYkhmVlVWVllWeFRlTFdBK0I5cWFTQ0lBaUVFT3AwT3NFd0JBNGJKWVF3MUtYQktLRlV1dE9zVkdvRWFOUlFPT3pRS0xVSURRMTEyOXNFMkNyTFFRTWlQYTREQUhDNktuQWtCRVRnUUoyOE5CL3ljMUplcXplaW9xSWVhazZQa3FwSzFOWFZnemhaMk13bVdOUXExT29NSUFvQ2NDNjdtb0pRY0N3TEVFcW9xNlk2c1ZoTS9aVE91dmtjbzBTd2tvQ1FHdzFzbHdEdXR6QzJhOW52dCt3REFPZWZtWWlMdVNvd1NpV0V5b3NJdm4waCtzNGQ3ZnJTZUFycit6K0RwR0V4cUR5bEE4dzZkUGprSnpSTE11TFFmVk5SWjQyRXlsSUdrallSdDc0Nkd5b0dvRTRPaFcvTlI3RktBWHZCR2NUUFhvSHVkN2tLRWhiKzUxR2MzRlNDaU9ZUk1GNm9ROFozR3hFclBkd2RPUG5rVEtnR3pVSzdyQzVYWGhzL3JJZXErd1FrTkhlckU0cEFCTW55UndnVlFIbkJhejZxc1hQd2VMQXhMYUdDQVNaZEtQcXUraENSTVJwUVV6SDJUTGtIOXRDV1VBczYyQk1HSXV0VlYwaysvZTdQc1dmUkp3aHRtd0o3MlVVa1Ava0oyZzFzZnBQTWErUG5CSUdIOGVlVjJIN2dLekNXTXFEMW5SajR4aXdvQVZTdSt5OU9mYmtEK21OMUdIeG1MeUs5c1pyakFIaXVKL2JzejlqOS9FZXduUDRWcmQvZWk3YTNObkdwWk1jMllkL0xYOENTVXdKUzhEaktQOUVpK3JaSDBHVnlQd0JsT0hEM2s5QVZua2ZJN1l2Ui8rbExwZHJ0dVh1d2U5WWlNRTFhZ1MzTVE5eERMNkhiWFgxOXJaV0g5eHpJTHV6WEsrMllTeFdsQWtBRVVTMTF1MGtKejdKdzJ1MVVTUWpzT2gzNDZIZzNhMU9DNk10UTlRdUxXcFVkUWVwZ1hGVCtpSUIzWGtDZ3ZReDV6endITnJRWlVIOFJRVVBub3ZjVDQwQWc0T0pyczNGeVl5SENZalhnV0FkSW0yVDNmSGllMHpVQm05VnFsY0k2YW12cm9LK3Z4dkhDU3NRRmg3cmFjOW5zSUx3QW85RUdvOE5KRkZRQUZTaWhEQWhEd0l4YnNpTDhrVFU3bjZxdjB5ZE1HejhZS2VvL1F4SDliY0QyZS9hN1poRGxuWEJHOXNLb2o1NENNZVhoaDh6eHFKZ3lBZ254U2hldnFEa0ZSZVptakY3ZUVRQUxKNnRFMWVvM1VhWHFoOUhmTDRiQ2FjQ3VJWm5JMnpNTzdRY2tBcndUeXJRc0RINXVDcHpsZTdGK3dCSzBHcmNMRVlIVk9QZmhYbVRzT29XRU9BQk9GandqZjlnSU1KdzZBazE3M1ZXZGcrWENCUVFuOTJ6OGY2a0F3ZWtOYkJIb3MzNDcxQ0V1NnA3M3doU2MrV29YK2o0MkhPWURQNkErYkRER2ZlRXFoTW16ckxSdjRlY2ZvTm5UbjZIVEdOZlRuV2VGSzQ3eHhzMXI0K2NFZ1ljVnlSajc3WnRRQ3dic0hOUUQrWWZ1UUp1ZXNXZ3lmZzZhakIrTEg5cE1kQU9ZMS9pZEhFQTlnVTNUYmpDR2ZqVVlSKzdxQnRCTGF5Mnc2MmdNL1dvMGp0L2ZHNm83MzBMYTBHVFprUkxSNTh1dlVQTCtZN2hRVDJYSHMrTElZM09Rc09CcmRCemNHb0xwUERiM200SDZNWHNSRmRKZ3JUUmhxV0xhc21YL0xsaXc0Qm1CVWdpRVFJRE1ZMG9wQlFVRXlpaWcwQVpRRlp6RVhGdER0YUdCVUNqc0lDd0xjMTAxNG9lUFJHeUxKb2lMamtadFJRVjIvdWRWSkkxOEdjTm5EUUdjT3V3WU9BQ2w0MGFpcWZvUWpuNXlBVU1QYjBWNGtJRGo5dzlHbGZTZzlEeW5hM0xYRlJRVW9Lek1uUU5hWDR1REo4N0FvUXBDc3NJSnM5a09qbVVoY0FLYzFFbkFTNG50RUFRUVFhREVrZHpweWJuOTJ3MnRMem1QVjdjZndhalVFWWhUd1M4K0pMWlBMMWVublpCV2lHa0QxSjhxUjBLOGUzRnFVbkhMNkk2U2FVQ3BCblFuVHlLdTc1TlFBSUF5REUxNnQwZjE2ZFBBQUpmOUpLNm5xNHFwTXFFN29xSXVvajdmam9nT2tZanZHWWtqRDB4RDhwQitpQjg0RFBIdDVmYVdRUFQvNmRRZmZLWU1xamUrZzl6dmRzTm10b090TGtLSXU1eTBOcTBybUZNUFlOY2NCK0o2ZEVYeXlKRUlVcnZucDJjdkhQalhMRGpQamtCVWozNUlIdERsSnBwWFphUG5CQUJSbVpsUU13Q1lNTVIzYjRYNjdHeWc1MDJRY0dQS1JYVzJEWXE5MytEWVFaZHFUcDJsMEJXWUVkWFI1MW9aT0h2MjdMTUxGanp6c1ZzbDViM3NiZFNOMEpUbmVUQXFCZ0xsaWMzT1VxVkNBY0p5Y0FaR1FDQXNqRVlqTkJvTkFtc0tVSCtzQ0h6MGVoeXIvd1VVQU90MG9ENm5CQkdxTTJEU01oQWV4QUJnRU4rM0o2ck9OTGFxcnRaUVdsS0MwdEpTVkZkWG9hNnVGa2RPbkVLSlE0SFdvVXJZN2E1cUhWUVFJSEFjR01KQXpRQzhRQWxBQ2FXVW1mYjhmOFpOSGRybjZaN040ekd5YngrMDV3cXhyZERpUjdCRzZjVmx2dE1HNGZkRmtCRDNsVmVpODBmYjBIdnhkS2k1TXV3ZlB4UjV4MnArODFHRFdqYUhzYUQ0bXZheDdGK0pneCtmUkpkMy9vZVJXN2FnNi8xRDNkb01vRXpzZ2RIN2ZrTEtrRTR3N1ZxRkgyNS9ES3g3djZZUHZJd1JYNjVBZUh3QXppKzVCNGZlMzNIVHpPdmx6c25uWG96aUpsbDBBcUNLUlB6SUxDUm1aU0VwYXlSNmZMb1dUVzhKYkhTdEJBWUd6aW9wS2U0TFZ5VWVEYVZVRFZmNGxvSlNxcUFBUXlsMTl5cmx3UVBnT0JZczY0Q0Q0OEJCZ05WcWhjbGtoc0ZnUUYyZERqcU9BZHVxTFVpWExrakt5a0tYTi8rSGxGN1hGZ3B5VmNCbU1wazhlb0FlUDNVS1o0d1VIYUkwWU8wMjJPME9zS3dEQ2dDVXRST0hLMmFOVUVFZ0JHQ3Fxa3FUUWdQVlR4VFZHbHpUWnplZ3hFSVFIT0NQNzJwTXF2Y2VjQmtyVEhtb09RZEVkcnk4U3o0aXZRT3E5dTRGRHdCT0F5cjI1eUJTVm1HMjZ1QmVsL0czL0ZmVTZWb2hxa1VBQUJhc1JVQlVSaiswbS9jc1V2ckZ3cGd2NytMTkl1Zi81dUQ4OXF0amJRbWp4NEhkdHhwbEJRYjNmV0tGcGRwd3llMFVHUW0yckFST3VYbWpyQXdCcmRJUkhoTUVDQmFVL2JUM2txSGFaQUxDNHBBNGFnSzZ2N1lVeXBKenNMcDNaazBtQk4zU0NTbjNQb3hPRDk0Ry9ibThtMlplTDNkT0FGQzNieDlZd1hXOHlsL3pFTmtoN2VyY2RwSGhzRnloc1ltM0tEVWFzSFgxVi9mUElXMFEyOW9HcXlrY3NkMjZJclpiVjRTM2FBWlZFSFBadGRLMGFkTjd2L2xtVFJNUjNBQkk0QWFBb1FMUHVPeHRUc0lUUUhCeWhHVTVPRGduV040Sm04MFZ0T3NDTnc2MGFTREtDcXRnaXdpSHRuVXFvbHEzaERva0VFR2RPb0JtSDRiZUlnQndvbkx2d2NiUCsyck8xNVhZN2k0WVdWT0tBM21Wc0xGMjdDbTNRV0R0Z0FBa0JDbmhwQ0FxeHRXOUJ0UlZoNDRCbUtpb3VIbVBqdXpkN1lGdk4rTG9rUmpvYTJ1UjBMRW5SaVJwL0FqV2lDaHFEK0xIY1hlQXI3NkkwQWRlY051QkdwZjRPeDlIM0E5MzRvY1JKNkN5bFlHa1BZUlcvUytwbGR6SkxkZzZjU3ZzQldmUWZNbGJjRG1hcXJGcjJGandDYWxRb3g1Rzh5MFlPRlFlaXNHaGN0TTNVTWNPUit2QkhhOThFeVgzUjc5L1Q4SCsyL3Nqb0VVTE9FcUxrZkxTYW5RWTZuSW1hTHFNUkt1V1gyRjl0OTdRZEJtQjBSOHNRdFNnU1ZDL2RSZTJURHdLeGxhUGdPaExEZ0R6d2YvaDU4VmZJcUpOQzlnS3ppQjY1Z0tFdWFmaDdJSTdVSFJSaTVBWU5YUzUxZWo2d2VNM3pid0tsemtuQU5BcXl2SFQ3ZVBBV01yQWRIb010MlJFQWREaDREMzNRRmZ2Z05GUWdRUGpSa09wYllFK2E5K0UyTUs2OWR6NTJQbllPT1F2RFViN2w3OUVxNTRKeUZ2eEtQTDJGTUdhV3cxU2NpOEtYOU1pYmZuL2tOemV0VmZ5UFE5ajF4T1BvT3lURU1UZCtUUXlwZzlHN2RaM2NQanRMV0FyTDhMQi9Zck4rMWVpeVgwTDBYbDhUM1I3ODNYc2ZuQXFTdDVMZ1pLcmhkbVNnQ0UvZll6Z3k2d1ZRa2puVWFORzNRSGd2ektWbEhmVFZJRlNTZ1dua3dvQVZTclZjRHFkNERpT0VKNm5uRUJodDl2ZHdidXV5aDlSUFFlZ2F2dEtiRHorRTNJaUF4QmxEVVBmRGQ4akpyNHZ1ajdRRWo4UEc0N1FXQzE0cW5FMURBUWFuQk9oR21uUWdRQUFJQUJKUkVGVVZMaWlDaW9tdUplV2l1V0k2cURYRzN4MW1YSW51SE9FNXdWQ0tWWFk3YmFKS3BYcWZ5N3JMNGR5Z3dVYWJSQ2l0SCtPY2EyNnVob3N5eUV4OGRxb2JYWjJEbEpUVzBtMTYvK29mUURnN0ZPalllbTZGQjJISllJVGdoRVVGWFRWKzdyQ0VrSVFGTlV3ME5GUlV3a2hJQlRha0VBUDljTldXUWtuVkFpT2o4SDFjT2RRMWdwemVUVlVNZkVJQ0xxS2VCNkJoYW00RXVyWUJHZ0NsVjVmV1dHcHJJVXFJaFlCSVo3SFlnMDFjQmdjQ0V4SWhFSjVrODNyWmM0SkFIaExIV3hteGl2YzQyWVJBZGJ5VWxCTkJJS2lRcTU2clpTVmxjMU5URXphQmNBQ1YybHhPNldVSllSdzdyTGl2SGRKY2ExV2k4REFRQVFGQlNFa0pBVGg0V0dJakl4Q2JHd3M0a0lEMGF4WkszVHVuWW5rcEV0QnVHeGRGWnhNTUFJamduNGJZN05ZTENndExVVlZsYnkybWdrV2k5V2REM29wYmNycGxISkJpU0M0Z25CTFMwdmlWU3JWM0V1UFN4VVNJc1BobDZzVGRVUWMxTmU0VDBCYzQ4R1dtcGg0bjlZSWJYekNkUjAzVVFjaTVGcHFiVEZxaERSUGJ1U3JRSVFrKy81T0hSWURkZGhOT3ErWE9TY0FVQVJGSVRqb1psMTVEQUlUa3E5NXJTUWtKRXo3OU5OUGN1Njc3MzRlQUE5UWliWGhVb0ZLTVplVUtoUUt3cklzZFdVa0tLQlNLV0d4cUtUT1lvR0JXaGhZTzhwS1N4RVZHWW1nSU5lRXFhT3VmUDB1YTJPNzFJVEYxVEpQQkRWWGFXOEhIQTRXSE9lUk1pVjZRZ21sbE1URnhUME9vS3Nmb3E1TkVtZjhIMUp1VGZGUGhIOWUvMUpDQ09sMHh4MTNUSERiMlRTVVF1NUlZRVJja0dVbGdPTTR3bkVzSEE0V2Ryc0ROcHNORm92Vm5TU3ZSMTFkTFNvcks2WFdmVmR0VzJ6c2k4cktTcS95M2lhWXpSYlliRllQcHNheW5GUmpTUkI0S2NIZGFyVU1aUmhtcnY5eVg3dUV0TzdtbndUL3ZQNGxKVEF3OE1IYzNQTkhVMU5iSHdiZ2RERzNTN1kyU0lueVVyb1ZXSmFEUXNGS1NmSTJtd3BtczlxZEpLOURVRkFRUWtOREVSRVJnZmo0K0t2a25ENkU0emd2RmRSVlc4MW1zOEptczd1OW9LeFUybHV1Z2xKS3liMzNUbE5vTkpySC9aZlpMMzc1NTBuTGxpMm5wS1NreUQya0tqZUpZdUFPL3hBRU1RVEVDYWZUU1RpT0E4dUtyTTBPbTgwS3M5a01nOEdJK3ZwNlZGVlZvN1MwRkZkYlA5SW5zTGxDTzZyY0txaEJxck5tczhtWkd1dlJBZHBkSlpOUVNwa1BQdmhnTm9CQi9rdDg3VkpkWFkzUzBqTC9SUGpsTHlzS2hhTC80Y08vakJhQmpWS3FFc0dOVXFxZ2xETHU2dGx5bFZUQ0ZZZkRCVzZYNnJZWjNDcHBGVXBLU240YnNCa01CbmZQZ2hyb2RIcVlUSzYyZVdMTFBIbU5OYWVUSS9JdVV3QklmWDFkcWtLaGVNeC9lZjNpbDMrdVJFUkVUTnV5WlhPU0Y3aEpzVzBBaUNBSU10YkdTYXpOVlpEUzdyYTNXV0F5R2FIVDZWRmJXNFB5OG5JWURJWnJCelo1aHlsWGVXOExyRlpQVURPYXpLZzFtS0EzV1dGak9ibkRnQkU0NjZ4WE51eE1YTEJ1TC9hV21TNGQyR25ITjdzUDRjbXZ0dUhmMjArZ3lrSDlWLzk2aTlPQzJ0UG5YY0drdjFNcVZyK0FnKzl2dSs1RDVDdC94WTdaeXozR2FEaTJIY2VXek1lKzJYTng1cnU5RUg3WEx3alFuOWlQOHgrK2d4TnZyb1RENjd1cXJTdHhjUFpqT1BMS2g3QmFaYi9rck1PKysyZkM1RStHdVY3UzlOWmJiNzNkRFd3ZVFic2lhL04wSkhneU54SGNyRlliekdZTGpFYVhTbHBkWFkyeXF3aFM5Z0MycXFvcVZGWld1aExjM1hGcUxoWFVKck9yMldHdzJNRVFWeUVQd2NrUnB5dG1qVmdORlFObmY3VDVZUzRxRVNOYi9qOTc1eDBmUlozLy8rZk1sdXhtMDNzMmdTUWtoQllnR0NEU0lRS0NvS0FDSXZZR25PVzhzNWV2RFU4NXozTHF6M1lxbGtOUkViRmdwQmNGUktRSENNMlFoUFJlTjl0bmZuL3NKdGtVVWhDVTAzazl6QU96bTVuNXpPZnptZmU4Nit0dDRLSDN2dUZBdldzTGY1VCtIVXR6Yk13ZE1Zamcyanh1WHZIenI5ekFDdHJBZEpRdDF6N2FWSGIwcTJSa1hSbVd5dHF6UHNUakx6MUw4TVV6OFN3aXl2bGlKWDdESnhFM1l4VFpqOTlNNW9iY1gzR0ZLakpmZUlYcXpEMWt2dnB4aTdtbzN2dzJQL3pqYTZMblhvZTJhQ09iN251MXVjSktIVXpNRUMwSDN0K2c3S096QkoxT2QwTm01dUhCSGxyYjZhS2tMYlMybHY2Mnhxb0VsMGxhWGw1QmNYRXhKU1VsWFJkc2hZV3VaaXpWMVZVdFRGQ3IxWUxOMWlqWUpQeTl0WUpXRkJBRkJORlZ4aThBWXVISjdOdVArTVZ5LzZqZWpFbStnTGtKQWl2MkZ3QldOaHd1NGRaSkl4a2FFOEg4UzBkZ1AzYVVnMlpsOGM4V2lyNWV3djZYbHVLb084bmh4WXZadi9oNXFpcWtSaWxGMXB2UHMvMk9POW43OGhJYVRGMTdwY2gxaFJ4YS9BamI3MzJFZ294OFQ2bEg5anN2c2YyT085bjkwcEtXbWsrSGd2Y0l4OWFhaUp2Y3A4WEhnNTk1ZzRSTEp4STFjUmFSS1NHWUNvdC94VXdFTS9LajVhVGVmdzJ0S3pDelAxeEs3TUtINlRGcUdJTVdQWUw5dS85UzVtSFZSTTIrbk9ML3ZvZEZlZU9lTmZUdTNmdEtXZ1lSTkI3bWFLUFcxbFJMNmhsSXNObXNXSzB0VGRMcTZpckt5c29vTEN6cW1tREx5M01WdUxlT2dycE1VRmRhaDBlVDQrYUFnU3VDSzFvczVybkh5NnVuSjBTRTRHeW81MVNkbGNTSUVJNlhWZ0ZPSEpLTVN1VytuS2hDSmRkenN0S3VyUHhaZ2svL1lZU05HWUtvQ1NJNExZMnd0TEhvOWE3NVB2SDBBbzd1cVNIK3RsdlI1RzlrdzkwdmRrbGJMbHJ4R2VvaDA0aWRFTWRQMTh5anZNSUJPTWk0ZXc2L1pEcEpXREFmSC9NZU52NzEzMTA2WDkzUFAyQlBISTdmYWJJcmk1Y3RJanUzRi8wdUgzWU9ac2hDOWRFOC9Qc25Vbi95R0RhdlJBSWl5cW5KYW5hWGlCRXBCSWw3S2M2eUtSdnFMRUd0VmwrY241ODNtcWJjdG1aZlcyTkRKemVkZUl0QWdrdTQyZDM1YlcyanBLV2xKZVRsNVhjczJHdzJHOFhGcmxyUTZ1cHF0d25hNEJFRlBVMTZoOU1weUxJczN2SFFZeXFOUnZNWHM4Mkd0MWJGcDJ2V2NzMktuOUZyMU5UYUhZQTNJK0tEV1BGakJtWDFEYXpkdW85Y1djQnNkU2dyZjViZzIzc1F4bUZKaUxvQUlsSlRNYWFtb3ZNR0tDTjc1UzZTSG4yY2lPUmtCaTU2Rk9lNjVWVFVkMzVPLzZsWDAzZktLS0ttMzBiOE1DYzVHektRUzNkeWJLT1RvWXZ1SWlneGtmaTc3MFhjc1lLcWhzN1BWM3Z5Sklib21IYS9hOWkvZ20ydjdTTnQrUkw4Zk04Rmxib0pteGxVbW1LMlRCeExabm91YWowNDZqek5CaDk4WW5UVVpSVXJHK29zSWpJeWNuWktTb3JPcmJXMUNTUTBtcVh0cFgrNHRMYkdLR21EMnlTdHByeThuT0xpSW15MjlsOUNhcGNKV3RpaUg2aXIvck94WktwWlcydE14SFU2bmE0MmRwSWtDSUlndlBMMFkvT0JWTDFXUzRQSnlkWFRMK0VTcDVxOU96ZmpwM0hWaE40Mll3cld0VHU1ZldrV0EvdjBaWHpRQ2J3VmRvOXpEMGMxRGRYK2VJZTUxU1R2VVBTKzFWZ3FnVTc2MUJvOGtpSDF4a2pLSzh0eGxOWml0UlN5NjlZYm05UjlyNlFrc0FLZFVQL0xPT0EwTk9rVk83WVJjUEZzQWtQUEZWZThBYTBlblBZSUp2NjBEMDFJRUQ4c0JyV3Z2dTJmU2s1bDM1eEZpS0k0Yk0yYTFaTkRROE8rQmV6dUh3ZHVXbkZjeWJ1Q3V5OXBrNXp4MU5xMFdsY2dRYWR6QlJLcXFocE4wa0ppMnluZlU1dk41aVk2SWxjdHFHZVQ0NWI1YWc2SFEzQUxOY0h1Y0FtMWpBUDcvVlFxMVh5QVBxR0IvSEswSE5Gck1LSEE4ZUp5RW51NE9oSnB2UU80NS9LTDNTNmFRaVpzOCtYK1VJVmw4dXp1SUFGQmNyYWtIRk1INEIxUVEwT3BEZUswWUNyRFhCZUFMcWdMT282SHI4dGNXSVIrc0JGMW1BRXZRenlqUHY0VVF6ZmZTMzZSY1pnM3RKK0hGRFR4V3BKc29lMGJrU1g1NEIySXp2ZlhGRmZxQ09qZmc1ck00K2d1R0FhbURLcEx3eGdRNzl2Q1hHMG9NQkVTRjludUdKeGFmd3lCdnNvK094UFBaM0R3N0VjZWVmajdaNTlkYkFQc3NpdzczQXdnVHJmVzFxSjFuOXN5bEp1anBEWjNsTFRSSksyaG9zSVZTQWdQRDBldmIvbUNFcHZvaUtvYTIrYzFlRFE4dGpiV2d1SndOUHJXSE5oc0RnQUJXUmIyMURodVhiYi9WSCtBMkw1OTZWZWJ3L1BiVDdCbC8xNCt6WktabGV3cUhpNDZsY3RIZTA2dzZlQXgvcjUwRTRNdUhFcWNJdGZPc2xJU2c2LzZCSm52ZlVIZXVnMDBtQUJDaWIxaUdJZWUrUWZGR2ZzNStNUmlWSlBuRU96VCtlbHExbjdNMFRYYktmajJIYkwyYU9nNXNUOUNXQ3A5eHRyNDhmN25LZDZmUWRIbU5leCs0WjB1cFpqNGpSaUprTGtIVXpzZWlNcE5Lem0rZW5lN3grMjVkZ3piWDE3VjVXa28rdllqam55K0FhZTluS3dQUGlSNyt5RUFlbDEzUFRsdlBFUHU5enM1OFBpemFLWmNTNmhIRWIxY2NZQnkweUFpK3JUVkdnL2NNWVh2bjEydTdMRXpoQ0FJZmUrNzc3NUp0SzFHOEV6OWFKRzA2M0EwK3ZXYlRWS0x4VlZMV2xkWDU4NXRLMjgza0tDYU8vY3FqOXkxS21wcmE5cHBlbXpGWm5PRllwME9SeE43eHlQdmZSYWs5dlo1M1NwcWc0WkhCNEhLaTdSK1VSdzRsa1ZHcFpNN0x4M0hNSGVmUTZmTndwYk1iUGFYMURJd2FUQVBqSW5uOStBTk5abE1PSjBTZm41KzNUcXV0TFNNNE9EZ2J2VUlQWk5qem5SOHJ0M2pqWEhTaFppT0hxUWh2d2pEd0F2UmV3c0VqNW1NcXV3d2VhdTNJTWFPWlBpamYwSGJoWDRUd2VNbVl6dXdscExNV2dZKy9VL0NZL3dBa2ZBcE0xQ1ZIaVF2ZlFPMWhiVUVqeHhMVUZ4azU1Ukgra2pzR1V1cDhSNURXSytXTEMrU3RRRjFXQ3hCY2ExcUFhVmlEdi96Yll4M1BFWlliTmVZWWFwKzJrUkRyWmF3NFFNUkdreUlmajBKN20xRUYzY0JJVkYyVHFXdlJZZ2V6ZkJIRnFEVk5JKzY2SlBYYU9nMW5jUXg3ZmM5OVJzd2pPRDRTRVZLbmFuT3JOTVpOUnJOK2syYk5sdHgxNDgyVW9rTGd0RFlXZDZ6azV3Z2lnS2lxSEwvaU80T1Z5cDNseXMxV3EwV25jNkxvS0NnRnZSZ3dqZmZmTzNSeTZCUnVOVzZtVHdhazNQTldDeU5YR3NPd2VsMGlySXNpemFiOVY2VlN2WHMvOUxrbnU5OGJHYzZ2djhWMkxJMnNQSHBINW44d2VOZGVySFpNcjVnMVNNL00rUGI1emluSGxsSEJWdXUrQXVEUHZ5VW9FQlJrVUxuQ05YVjFmOEtEQXhhaVl1enpTUUlRZ011RDYxTkVBU0hJQWlTU3FXU0dqbmJkRG92V2FmVDQrMnR4MkF3NE9Qamk1K2ZIMEZCZ1lTR2hoRVZaU1F1TG83Ky9mc1RIeC9mYklwNkJnemNaSkdOR2hwMnU4T3RFam9GZDNwSFUrblVuajI3ZlZVcTFjM0tVaW5vRHJUeEU1bmFSYUVHb0UyYXdlVmZMZWFjaDVuVXdZei9acmtpMU00eC9QMzlyN3ovL3Z0OEc4MVJkNFJVUmF0U0szZHVHdzZISzFKcXR6dXcyZXdlVVZKWGJsdGpJS0cwdEpTR2h1YlF2T2dxY3E5dlpYcTJ6RmxyajJ0dDRNQ0JOd0lLdVpXQ2N3dFJqYWhXaE0wZnlOY1cvK0NERDA1d0M3WjJmVzJ0T2R2YTVyWlpXd1FTWEVYeXJrQkMwN1pwV2VUZW1LL1dOaExxWnU0UUFPRzY2NjVWcVZTcUc1UmxVcUJBUVhjUkZCUTBvMWV2WHRwMnREYXhVV3Z6cUVob3lwMXREaVI0a2xJMkZzbTcwajhzRm90THNMbTBOVmVSZXp0Q3paT1NxRWxiZS9mZGQ2OERCaXBMZFBiaEl0VlRVZ29VL0tHMXRnSGJ0bTBkMHhXdHJYM05yVkc0TlJiSnQwei9BQkJicG5mWVd2alduRTZuTzIrdG1Sa1hFTlZxOVhYSzhweEx3ZWFuVElTQ1B6VEN3OE9udVFWYW85YW1waFVaWldNMVFxTU1hdWxyczUwMi9jUGhjS0J1ckFkdDFOWWE4OVdhS3d5YWZHdTRLYituQXFPcmEydXBzWXRFQmZyUXJndkVLWU9xZFFLQWs2S3FPZ3pldnZoNXFaVFZQUTJLMTN4S1ZiRVZNYVFYZmFhUDZkSXh0dndqbEJTSzlCamVwOHZYc1JjZklXdk56OGhBK01RckNJbytWNXFpaE9Sb1cwMHFxTlZucFN0V2l5dFY1Wkt6dDR4ZUYzV0RCcnd1bjJOZmJFUUNBbE12SnFKZjEraW5LN2F2UnRWN0hBRmgzbDIrVk1YV2RFcXp5aEYwNGNUUG5jTFpTdVdVR2lvbzNMSU5xMG5FZU9tbDZIVy8zWDQxbmRoTnJUV1V5S1NZTGg4aml1S0k0OGVQSmJzcHhCdUw0KzF1cmMzcE5rZWJORGFuMDRuRFpzRlVYNDlUcTRYUVNMeTh2RnJWa1RacWJTV0lybnJRNWdvREQyMnRUY0FBRUxScTI5VjMvZnNEcHIzMUxYLy82RXRHdjdTQ0hhV045WFpXbnZ2b0MwWSs5UjhTRmkzSHMwVFZZYXBnL2lzZnNlQ3p6Vno2NGxJK1BGS21TTERUUU9WbFFGTnpoRDJ2Zk43bFl4cjJmY3UrRDlaMnp5UVF0V2dNQm9vL2VaSEN6S3B6ZGorbjNubVlsU2xEV1ptU3pDZkdhRDRmTXBTVktVUForTVJIditxOCtSOHQ1c2lHSXkxZm5RVzcrUG1GLzNidlJLSWFqY0ZBNWRvUHlmN3hlSmNQeTM3ak1Zb09WWGZ2VWw1NnRHSTUrNTk2bmJOWGF1OWc5MDJYOE11bVE1aEx5NUhPSVR2SndZZHVvcml3NVFVcU55MGo4OHRkM1Q1WGJHenNSRTl6dEZXRVZHZ2RTSEE2blRobEdXdDFPZldWZFUwVkNXYXpwVWxyYzlXUmxpRTJVaEo1Q2pWM2hZRm4wQUJabG9YcTZxcUJna283ZThHc21XeC9ZQjRyNzc2T0IvcDdzV2pEd2NaSGtza2pMMlRWZ290by9lNWY5ZjJQMVBVY3pEY0xMMmZsTlVONSthdnRWQ2owTU8waWRNS2w5SnFjZW5ydHJLS0UybE9GT051WlAyZERIWFg1cGJTaDhaUnNtRTdsWURGWm1qNVNoOFVUUDNzV2dWRytwMzFnR3ZKUFVWOVN4YStoQmUxNTIzUE1PckNmV1FkVzRlY2R5S2kxKzVsMVlEOFRuN3EyZVhpU1M3TXo1ZWRncWJOMHJxRTRISmlPSGFEbVZEbVN3MEdiOXJpU2picWNmT3kyTG13eVF3UzlaczhpTlBFMHJlVWNOa3o1cHpCVnRNL2NhaTB0eEZ6VDBNNWExRkNiazk5aW5RS0hweEUvNHlKT0YraVZMQ1pxYzNLd05saTZPTHNTa2lPZnNuMGlTWXNlcFA5ZmJzRGdvVUE2VFJYVW5jcHZkNi9JQUE0TGRUazVYWm9ueWVHZ2V1Y1dURFUyMTV5M3UvZUsyeks5dUs5aGJXaFpjcUxSYUM3YnVIRkREdytOcmNrY2JmSzF1VnNPdUlRYWd1anREUm9WRG1kakxha0h0VkZkRGFVNTJSUms1NkgyVE85b0xwdHk0blJLU0ZLenhnYUlCb1BoS2hCSjh1amczalBJSDB0SkkvMlFtaUc5b3FBbXA4MFU3c2dxWk1KRll3RUlqdWxGUDhkV2RwWTV1U1JjTVVtN1k5THR2R29NWmVaSXZIMGxxck1iU0gzL0U2TDZ1SnJ1Mmc2dlpzMnN6V2lvd3F3Znh1UlBua2V2QmZPeExXeWUveUFxWXlMVzdPTkUzUDR2aGw4L3JzTXJ5WFc1YkprOUQ0dHZMN1J5Slphb1NVeDdwYmsvaiszWUpyWXVXazd5RzI4UjdQOHI3K3JJbDN5eTRITVNldFZSVmlSaHIzSXdldjFhTEovZXcvSFNrVnowMkN6QXdwYVIvWWo5T0pzWXpRN1cvZTFGTENjT1lqYzhSZlYzQVJoR3ptSE1QWFBjNW1nV1c2NmJpNjJ1bnVwU1B5YXZYMEhBR1ZyWjloUHJXSFhOMC9qMjdvVlVmaElwYmpvWHZmRWdXcmRneW43MVhuTFZLaXpabVVUZS9SS3AxNDhISkU2OTh3aTdsL3lFZjN3UXRmbDJSbjY0alBEWWpnZFJ2Zmw5TmovNEx2NzlFN0FVWkJIejRGSUdUSXpyOEppODkvN0I0VzkyVWx0VHhFL3o1cUpXQnpEcy9YY0o5b1dDOXg3aHB6ZTJFUkFYU0hXdWpaR2ZmVXBrbkd1eENwZmN6NEdkRW1MMkxwd2FiNnoreWN6ODVKK25kUTJVci9zUHU5OWVRMTIybVlwN3J1YUVRVVhQK1UvUmYvSUFBTXo3dm1iOXRjdVJLbjVCNm5NTlU5KytGeFZRdldNNVA5ejlQUG8rZlRFZCs0WEVmN3piZEF6QThPR3BZNEZUYnEzTkJySU5CQld5N0pSbFdaUkFscHhPV1JCRTFHcVg1aVpMTW9Ma2JKSCswVkJ5Z3IwcnZpUXkya2lKMUlDNnRXK3QwVkhuMHRhYVRkQnZ2LzFXSjRyaVZTMVgzY1I3TzdPWU0rbXlUcmFIbGJJNkJ5UDhSRjc0YkEzSm8wY1I3Z05sdFdZSTkxSGtWZGNOR1lhOHV3YXRyK3NCS2ZyZ0VmYS9zNUtvRjI1eHpYSzFscWxydjhTZ3M3SDdxbEZrZnIyZmxObUo3UDdyMzRoKzdETUdUZXlEVkhlTTc4YmVTc1hsV3dudTREbXIzNTVPVmZBVXJ2ajRNZGZidUJVOWpMT3VsSXI5aDdDZEpYdEtQckdId0JjMmt6cmNDQTRMVHFEd2RDWjA5QWltckZqQjhTZm1VaFgzZDFKdmJLbmRTcVVtQnE3OW1tQi9rZDFYRFNmMyt5d0Nwc2VmbVZzZ2FnU1gvcmdWalJyQXdyWXBROG5kUFovZXcxMHZFKzNnUzVuNDFEd2NoVnY1YXNKakpNN2FnaUY3TlR2L2M0eUxOMi9DejFlay9JdG4rT241OTVuK2VzZXRRTEtYdmt2Y294K1FQS00zSU9Ic2doYlY0K2JINlhIektWWWxYTTNJRlNzSWFzeGtyc3ZnNTMrdVovUzJyWVNINmNoLy9XNTJQZmMrbDczVi9IS3Eybm1VU3phdEl5QlloOU5pNmREZkdUSjVBVk1tTDJEcmhEaWlYdjJjWHIxYnBreWJIVVl1LytZNTFKWWMwZ2ZOcEt6aVhpSjhDOWw1K3o5SVdycVJYa21oMlBPMzhQWE1wNGlidUJ3M1ZTQStQb1pwOCtiTlc3RnMyVEtyeXh4Rkl5RGJaUkFGd2ZXZjRDS3p4ZWwweWs2blU1QWxXUmFjVG5jdHFic0JqQ0dBNk5temlJd01wMmZQQ05TTlVWQ1hHZXIwU1BGbzZWK2JPSEhpYktDNXo3eGs1L1V2VnVOSVNHVkIvK0N1ZW5VdzZEUm9SRUdSVVdlSW11MHJ5Znc0SFZORkhZN3FFcVMremU4YVE4cG9ERG9BTFNHamgzSDh3Q0dZQXFXSHpLaTJmczdlSFNBaklUdnlxY3F1SjNqUTZWOHErcVFVeEl6YjJISzNsZkRVRkhwT200YkJvekpNUDNRdWN3N1BQWHMzRm5NaHZZYTdUVUcxN2xmVkVhdmlrd2oyZHoxNGh1aEk2cXFyei9oY2dtamh4UE9MeWQ5NUFMdFZ3cHhUUzBCbERlQVNiT0VqUnJtR2JCeEdjUEJKS3JNc21IZHZBMi9JZXZsWlZ3djB5aFBVSFBUQzZYWWVuUTVoSTBieTR6TjM0RGh5Q2NHcFkrazU0WUl6SHJmbFdBYm1xR0dFaGJtaUNCRmp4MUM3TkwzRkdBSW16aVRBWGN1dDB2MjZhRU5neWhCWGRZZ3VBa05JRFpaYWNKYnZvcnpHaTZBdi8wUFZsNEJrUnF6TXBLWUs5TTBpSS9yNTUvK1Z1bXpac3MyTjVxanNNa2NkSUR0bEdjbmxiNU5rU1hLMjB0ZzhvcVJhTThVL2JhR2lwcDRDalJmcVJoUFU2V3lkNHRHY2tBdUlhclZxbHNmN21rOVhyV2FyR01mN1UvdlRlVjY0RjZHK2FzcHFuZnhseGtWQUEvK3BoMUEvdlNLcE9yWThXN29xVHE1ank2UExHZmZGZndtTERhYnE2eGZaOHJXdEl3WFBkUkpORUJIVHB1TGpYcWdlVTZmakcrL2Q0YlhVMGFsY3VtMDlSVnUzVXZqTlV0TGZXY3ZNelcraFBVZTNLdW9OcDlsSFV0Ty9jaGQ1U1FWUEIxWTNpaGJhZTkxbXYvb1ErYVVwakYyMkNKMjNtdDNYRFVPVzVOT2Z3WDA5cjVqQlJFMmQ2djU4S2oxdkRtZ3hsUGF1RlhYYjgxeVN0cCtpclQ5eDdMSHJLYnp1VlVZdFNEdG4yMHZyYy9hZVAwRThUZEdiZnpSUlU2YzJsY1QxbURhN2pWc2dMQ3dzRGRqV3l0Zm1tYkFydTFJL1hKUkdzb3dnT0oyeVMyYTUzR2hWbVlkQk5qSmdTaHJSUFl5SXpjbTR6dmJTTzVCbFdhaXFxa3dTQk9IaVJuOVordnIxZkZZWHdqdFhwalNwbEoxdG1aR0pSallmeXdhZ0xQY2t4OVNScElZcS9yWFR6bGh3Q09yeVhFd2Vjc3RlVklRYzJaZmcyR0RBUWQ2NmxvMUhUSHUyVVc4QnNGRytiUmVoQXdlQmIxL0MrcGhwcUFzZ2JHZ0tZVU5UQ0lpTFFXTm9Yamh0U0FoMUJTMGJxRGpxNnNBL25PanBzeGoyMHBPbzg0N2k2ZnUxWlcxbCsxMFBVMWwzN3ViQUt5Q0FCamY5czdQNEFKVkZMY21SMUhvRGxzcnlzL2VnaHdSaE90V1NicnFob0lDQUljUFFlYXR4Vmh5aWFHZExQcm1TSFZ0ZDgxVzRpNHFxM2dUSDZRZ1pQaHByMWlIMC9ZWTB6Ym1mTWFoWm1CbUMwRHFLTVZXMWxOUzJ1am9NOGNrazNMaVE1UG1YVVgzMHhCbmZpNjdQSUhRRnV5Z3RkUVVoaW4vWWlsL3k0Ri9OcUtQMjFXTXI3MW9FWFJVM2pCQnlzUnBpbStjaExncE5xN2VqV3ExTzI3QmhmWTkyQkp1cTBXSnNsRWVTSkNFTDRMRFpXblMyc3BnYUVQejljVGl0MUpkbm8yNFVhbTJyREpxQ0JvS1BqOC9semNaMENZczNaVkdyOHlMdFdWZW9YUnZhaSswTEp3RHc1TnNma0Y1c284N21ZTWFpSlNRTkhzYUhNd1l4ZmN3b3ZudG5GWmU5ZVpLYXFscitldmswZ3BVU3dOTUx0ckFSREo0Wnd1b0xSNkEycG5EeHQ2K2hIellWSTIremV1WmN0R0lkdXFDUWxvSWdTT0tIV1planBncUw3MFFtenhnRXdOQlhYK2I3K2RlUzkxWUNhbnM1OVNZams5WXZhU0xRN1hYTFBXeTYrVDYrZkY5SDNOOWZKUG5Lb2RUditJaU4vL2NKZ1gzak1HZG5Fbkw3US9oN3ZKU2Q1U2ZKL3V3clloNWJUTkE1U244TG1YZ0Zxbi9PSVgzbVQ2ajlJdEdGdE5SempKZGZ6OUZiSCtLYjFhL2dOLzU2eGo5NjdhKzZYdlRjQlp5WU41K1ZJOThrNHBxSEdIbkhOR0t1dVpYMUN4WlF0M0VnbGhyUUo3UmtYYkVmV00yYTJXdXdaR2NTKzlqL0k4QWJHRENWMUp1MnMzN0NPUHo3eFdJK2xZM2ZwUTh5OXA1TDNVOXlUd2JmZHhGYjAwYWc4b3RoVFBvS2duM2d5RU56eUQycHh6ZFVTOVh4VWxMZS90dVozNHp2SUZJZnVwanQweWZqSHg5TWRiYU5rWjhzK3RWcmtuRFRRcmJmUFpOZi9BM0UzUDBTQTZjbmRmQ21NSkw2MmtOc3ZXa0tKK0w3SWxlVllnbEtaZnBIaTlvSTJHSERocVVDdVo3Q1RaWmx1K0NLa0VxeUlMak5VUW1WbHc3SlZFOVZ0Z2xiWURqYVdDOTA0VVpxTTM4aXEvd2tKWUlPWWZEZ3dlNytCbVlzRm90Z3RWcXgyKzJDdytFUTNDRlhsZFBwMkFQMFB4dTJWVWxWUFhxREFUL3Q3Nk90bmUrMFJaM0RnU2svSDFWZ0JEcERXNytJczZHT2hsb0xQaEdocmN3ZGlZYkNmR1N2UUF6QlhaTkVrcTBCVTNFNW1zQXdkTDY2MzJXOVpKdUordEk2dktNaitMMzBlMmRESFEybE5YajNqRWJWenN2WVdsYU1wUE5ENzl2U3ZKY3NKa3lsRlhpRlJhRFZkVzBQMkdyS3NOWlk4VFpHb3pvTGxDWk9VdzBORlNhOG80M3RqdjIzY2FuWU1PVVhJL3FIb1BkdlA1bFpsdVdqb3FpNkE2Z0g2bkJSR3BrQmk0QmdGMFRCS1FpQ3BGYXJaWTFHSTN0NWVhSFQ2V1M5WG8rM3Q3ZUwwc2hiajQ5V1QxalBIaTZOcmRrRWJkYlljQ2ZJbVV6MWFXZEhxTGtjSHVHQlNyblFyelFHTUVUSG5sNzk5L2JGMTl1MzNibjNOdmJzM21wcHZmSHQyZk4zdlZ0QmE4QTMydkM3amtIbDdZdHZCNmthWHFIdFZ5cUlPZ08rUGJzM2RxMS9LRnIvc3poMmd6KytCdi9mZDh1S1dneWQ3Q05CRVBvZVBKalJkK0RBUWZ2Ym1LUElUbVFrUVJBRVNYSnBiWTJCQk04NlVvY2tJMm5WMkd3V3hNYkdMTTI1YTgzK05VRHc4dks2VEJFbUNoUW9PTmVJajQ4ZjBjb1ViYzM0UVhPWmxZU243UElza0xkYWJZZ2V2alhCN1ZzVFBCeDJvaUFJMDVVcFY2QkF3Ym1HWHE5UG83bjZvTjBXZmE0ZnFaSDVRMmloc1RWMXRySTFhbXlTUitEQXBha0JndG5jTUJXSVVxWmNnUUlGdndHTVI0OGVHVWpMOHFwR3hvL0cxRE5Ca2p5TDQ1czF0MmIyanliQjFvWnp6ZVhlMEdxbktuUDkyNkswdEpUOC9BSmxJaFQ4S1JFVEV6UE1VMk56bTZPcVZ1Wm9DNjQyTjRWNEM2MU5kQWNNbWxTN3hnUGRacWdpMkJRb1VQQ2JRYWZUalcrbHJiVm5qcmFRV2EwRENYYTdIZEhUREczVTFBQ2hvY0Uwb1gwejFNbk9qTU1zV3JtQmU1ZHY0djE5dVI3MEt6SlplWGw4dW0wdnIyNDhTSzNIVVE1ckE5c1BIZWV0alR0Wm5sbWlyT0J2aUVQM1hjR0pIY1hud1Vna2ZyNTZQQVduL2poemF5dk5wYnF3NGd5UHJtUGJaWmRTMnFYRGJWUmxITUorRmhoeGFqY3RZY01UUzgvcVBNZ05GWlFleVczeitjL1hqQ1V2cDN2bWFFYkdnVDRlV2xzTGphM3hweVZYbTlRbVFpcTJNa1B4TUVNbnRyODM2L2hxYnlGOVltUEV6UktVQUFBZ0FFbEVRVlM0dEg4VW03ZHM0UEVmR2tkdTVyMzFlemhTWE1KYlAyUzJFR3lsZVRtOHN6ZWIvYitjNUl0amltRDdMV0V0SzhCdXRwMEhJeEdKbnJjUXY4QS9rT3RnMVN2c1diTCtqQVc5cFNBUFIxZTZUVlBPanF0dnBOcDhGbDR2cGtvYXlzNHUvNTZVK3dNYi92cGltODh0ZVRuWTdkMDdWNjlldlpJOU5iYlRtS040bXFQTldwdExzS21ibzZHTlRCNHVNMVFVeGZZRm14akE0aHNuTmYwYTJGREdYL2Jud3RoWXdKdG5icDRKTlRsOGMzQm5TekdjMEo4UEV2cXplc05hUHFoVGhNMjVRUFhPZEk0dlg0OGREUUVqcDlIL3l2Rk5TYnEyNHFQc2UreDF6RlpmRXY5Mk55RkdYOEJDM3JJUEtkcDdGTHRkVGZDa1dmU1pub29BVlArY1RtV2xub1k5RzZpcEZJbTc2WGFNU2U0aWRVY2QyZSsvUStIK2szakZENkgvd3B2dzl1NDQrOU4wNkFkT3JOb09vaGJ2MGEwRWI4NStNcGQ4Z3FuYWlpRitDSDBYM3RBNUEreHB4bEN6ZHcxRkJmNzB2WFFFQUpXYlYxSWxKUkovVVJKbDZ6NmlRVzJrY25NNkZtY3dDZlB2SURUVzMvMndsM0w4blhlb3lDckJrRFNPL3JkY2lWYmRxSTJVY2VLOTl5ZzdVb0JYejBRU2JyNlZBUDlxTWw5K240bzlHZFRWbGJGL2NUWkNaREtEYjNSNWJ4d1ZXUng5OTBPcVQ5VVNNUFl5K2wyVjVrNHd0cEgzMFZ1YzJubVNnTFRKZEVVQnEveCtCYWQrM0kvWlZNT0pGeFpUb0JXSm5MT1E4SGgvMS9tV3ZVdmVqcU9valFra3pwL2ZWTmplc1FKWXpiR1huNlU4dTRySVdUZlRhMHkvSnMwdy8vUDN5UHZoRUtxSVJCSVhkbjYrM0E5ZW92TGdBZVRpWFBZdFhveWdDcVQzM3hZMmtTYVlUK3hrOTVKUHNYdEZNK0NldS9Gemw3Qlk4ak00OXM3SDFGVTdDSjE2TllsVGhpSUEzdDdlSTREUFdwdWlqZVlvc2lRNUpVbkE2VVFscW1WSkl3bE91MDAyMWRSZ2t5UXNYdDZJalZMUG5aU0xMQ05VVmxiMHA0dk5XbzZVbHBOb0RGR2t5dThNdVdRbkcrWS9UK2pNYStsejNSVUk1cG9XUklBbmwzOUY2Q1d6Q2RCbHMvWEIxNXBNb1pwQ08xR3pyNlAzdkdrVXZYSTdCOWNjQTZCbVZ6bzcvdlk0bXBScHhFN293WTZycjZXaVJnSWNaTnc5aDE4eW5TUXNtSStQZVE4Yi8vcnZUaDlRVFhnc1lXbWpLZm44VlZxU2JUU3c4NmJyY2ZhNW1IN3piOFEvUU1MYTZSdis5R1B3Nnp1SXdsZnY0OFR1UW14Wlcvbmg0ZjhRTUNqUnBmT3MvNHdkRDd4STRPUzVHQk1kYkxuMlRzd09seFd5ODVvWmxKbU1KTjUySXh6OWpCK2VXOTVrb2Z3MDd6SUtDbjFKdUcwKzRiMjhxTTJ0QkxVdndlUFM4RThNUXh2ZGw3QzBOTUtISnJwdktaOHRNK2ZRRUpCQ245dXVvdjdiWjluOXdYWUFTajU5bGwyZkhpTHVwaHNSOXEya3JMRHp5bjVkM0VEQzBsSlJhNzBJSEpOR1dOcDRmSUpjbklpRlN4NWoxNmNaeE41ME13R2FrNnlmZDErWG1IbnIxbjFLUStTRnhNOGN5YUU3cnlMM21JdEVNK3U1djdCL1ZUYXhOODBuTkt5VXpkYzkxT241L0llT0lXUllFdmhHRUo2V1J0aTRDOTAwVHk2dE5HZEZPc1paMTZBdDNjSlB6eTl6T2JSSzk3TnU1aTJJZ3liUlo5NWxGTDU4QjRjM1pRR3VaaStyVjM4WDJaNmZEVmtXWkFSQkVBUVFhSEtqT2UxV25LalJCSWVpRGRDaGJsM3dqcXMyZEh4WEhxWlQyWWQ1ODdDVGQrN3NwMGlXMzl0NzFWQ0p3NkZIYjR3bUpENkNrT1NXMzhkZGR5ZlJJL29qUjExTnh1VWZZQU8waERMZ3J6ZFJzWDgvNW1vYi9vUGlLTjkxRUthNCtpWUVYSHdOZmFhTUFrWVJ0K0k5Y2pjZEkyaFVKY2MyT3BtNDZ5NThOQkIwOTcxa3BWNUxWY085QkhkQS9hOE43WWt4MU1ndmJUUTdLNVpxSzRGaFlRUU1TQ0o0WUhMblFyeDBad2RqTURMeXRhZFpjOHR0NUJocTZmdmlSd1NITnBjelJjNWJTT3lZWVRCbU1Ma2ZEaUIvYnhVeDZ2WGtsdmRuNXIxWG93TDg3NzJEcjJlOGp1WFJPWWdacThrcFR1REtyMjUzTVpza045ZEdocWVtWWo4VVFaazJIbU5xTXlkYzFmcmwxQmluTWY2R2k1R0JRWGZkeUtwRlh6SDh4bEhrcmxoSjc3OStqZkdDT0l6OTcrZkVoMWQyZXIvZVBmdmczZE1YalVaSFNHb3FvWVptb1pHOTRpdjZQdlE5eGdzaUlQa0pjcFplUU1HSmw0anIzWEVKbCthQ1MwbStLZzBCNkRmek0zTFRmeUFtZmpCSGx1d2llZE9QaElhb2tmdmZUKzdTRVJSbE9ZaUpQMzE5VjBEU01IeFYrUWlHdkJiejBJamVDLytPY1dnZ2dmWlpySHJPVlY5ZThQbjdhTWJmU3Y5cG81R0FnUXV1WU1meWRKTFNYSngxS1NrcC9ZRThUM05VRUlTbVpGMEVRVUFVWlVIRXBaaHB2TkQ1YW5BNnJOZ0ZMNWRnYSt6dTN2aWpVcW5HZGpiWkZVVTVMUGo4QUl0dW1FbWlRYWxtLzcyaGlwdkV5SHN5T0hEbkhING90R0s4NXUrTWVHQnVVMzJsVjZDcjVGM1FhUkVjRGlUQVdaSEoraGszNFQxeUtnRVIvalFVMXlQNU5GTlNlMGVFTnYyL1BqU002c29TSEtYbFdDMkY3THIxeGlZYUhxK2tKTEFDM21jeThrQ0d2Zm9NKzE5OW1DLytua2ZBaU1zWThjcVQrSGF3cHh5bFJSMk9RZGRuUERHSml6aGVNSmp4bzFvMkdOR0hOZEovYS9FMit0TlFYazJEc3hpcE1vTnROOXpZUEtvQjhVaUF0YkFZVFV4OHQraWE2b3Z6Y1J6ZHc1WWJtdnNuQlBjZTdqcGZhUjFCWVdGdVZTd0NROEN2S1FnMVl5azFvMnUwbU1SQURHRmdxNndET3VaSTFJVkZOYmtwZE1Zd0dySXFvYVlJczluTW9YdHY1V2pUbStBQ1ZOamM4dVhNL0tycVFKZFRWYVZSSVZ1dHJwRVhGV0Q2OFFpYmI5amNyUGtOYVM1eUNnZ0lTQVkyZUdocnJoOEJBVmtXSktkVGtKMlNJSW9xSkVtU0hlWmFvYWJVS2h0OGZCRjB0cllhMjczMzNxc1NCS0ZEM3VpNmlnSnUrV2diZDg2ZHdiZ0liMFdxbkJkUTAvT1dCK2w1eTRQWVNqTllOMjQyUmRmT0pkcllnZTltNHdvY1EyNWc3TDl1QitENEU3dndERmcyRkRjMzNER1hsZUoxWVRqcU1BMWVobmhHZmZ3cEJ2WFpHWG5nbUZsTUdETUwyVkxGam5tVE9mN2RIRkptbjU0MVFoMFcyZUVZeXI5NWtkenFJY1QzK29XZlg5L0FxRHVhM2NYbTRrSWdCYkRSVUZoRFpFZ0EzdW9JVkpHcFRQanN0VGFGOWpaakJQYmNuZGdrbXVqQVBTRUlBbktyN2lrK0VkRjRwWVF5OGIySDJ3cVVjSC9NcGFWQUhGaUtNVlU3dWl3Z0JGRnExZHRCank1TWo2V3dISHBIZ0ZTRnFSU01YYUJic1pRV0lMczFHVXRoS2Q0UlFlQWZqdDdnejVDM2xoRWVlQWJLU2plNnlPZ2pqZmhmTkpPSlQ3ZlB5S0xSYUVZTUhqeEljK0JBUnF0RVhVRjA2V3VDZ0N6aHROdVJOR3JzWmdzYW4yQjBZZjdvdkhXb1c1bWhQUG5rRTZPQjAxZk4ydXU0YzBrNnV1ZytWQlprczdRQVZQb0E1aVc3aWx5M0h6akV5WXB5ckU0elgyN1BJQ0U4a3FrSm9VZ04xU3c3Y0lyRHA2b3B0VWtzM1FHcEEvcVI2S2RSWk5KWmdDMXJPMGMyRlJDWk9nQkgvazZzMmhoOEFqb3hjYUo2MExBbm5ZS2ZSMFB4TG81OXV3Lzk5RXVhZ3hGclArYm9ta0g0T2c2UnZjL0ErRmY2SVBoTDlCbHI0OGY3bjJmZ0RSY2pWeFZTc0NlUElmZmQxaUg3UnRYKzdaaHFySmhOVGlwM2JrRjl5b3VRMUJIb2RLVWMvTmNLZ3NhTlJFc2w5YVYyZ21QQ094eTNFSlo2MmpFNHM3YXo3UjlyR2ZYTk40VDRsckYreWh4T3BQYW45MUNYaEMvNjVDMXlVaU1Rc2xkVFlyK1FZUmNFb2hXbjB0UDNSYlkvczRRK2w2YmlLRHhHU2JiRUJYK1pqWGJRVkdJai9zMzIvM3VEL25QSFlzdmRneHc1aVo3dTgvbkg5NlhxZzY4NE9UUUliV2dNMGNQN0VUaHBEajR2WE03UGIvWW1ia3dpNXF4RFZKdkNHRFJ2SWpGenJtVGJxNHNKQ2JtZHFxL2VvTDZyY28wUUFtSWNuSGh6S2Ria1NBSlNSdU1ickNOdTFreCtldkZKQW53WFVyL3BBMm9pcGhIVnUzUDkwcjQzblgyZlhZd3hvb1lqM3h4bHlLZmpRZTFMdjVzR3N2dXVoMG4rNnpXbzdlVVViZHBQd21QMzBCbUJ2eW82SG4zQk14ejZmQlgrZ1VHRWp4L1ZGSHhwRDFHemIrVEFKWDhobzM4SXhnRkc2bzd1eE9xVFROOUxoalVwY08rOTkzNnZsSlNVUXpRM1UxWUpJQ0lJSXJMc1JFWkFGR1JabHBGRkFidTVGbHVEQnJtNkZKVmFyUmJjaWJrQ0lENzExSk5YaTZKNGVoK2JaS2ZLcGlMY29NRmlkMkN4TzdDS1dvWkhCd0Z3TFBjVWVWWTFRMk5Ed2VGQXJmY2xLY3dYMlZyUEQ5bGwrUGdIMGkvSUc0dmRRVlI0QkJINjM1YU14bVF5NFhSSzNXNUtYRnBhUm5Cd01DcVY2cHdlYzZialEzQlN0V3M3UlpzMlUxc3FNSERSMDRRYW03ZWpiNzhVRElIdTZKWW1nTEJoL2RIMUhFeGdVQTA1WDY3QmpKR2syMlpqNkpGQVlGdzROYnZTY2NSY2hMNXNENlhIVFF4OCtwK0U5L0FGUk1LbnpFQlZlcEM4OUEzVUZ0WVNQSElzUVhHUkhYTG1sNjFiU2RYeGZIeVRVaEZyQ3pFWGxPQnpRU282THpCbkhhQm8weWJLRHVjUWZjdWpKSTVONkZSN09kMFl5cmR2Sm5UMlh6RDJqVURRQmhBNW9pOFZod3NKR1JoUHhmcFAwSTJkaStQZ0pxcktmRWg1N2duOEEzUWdlQkYxMlV4c1I3ZVR2KzRIVEZWMndzYU93ejhxQkFRdm9pK2JnVDE3Si9scmY4RHFDTUE0WVFRNmI5ZFRxNDBkVEVpVVFQWGg0MWpNV3NJSDl3YU5IejFuVEtMdTU4MFViTnlLMWFvbFl1eDRmTU44TVF3WWdhK1lUKzQzbTlHTm1VMU1TaStDaGc3RnExTlpKQkkrTVExYjFpSHE4L0xSeFNWakNOTGhlOEU0Zk9RQ1RxMWFqODBRei9Cbkg4YmczYmtxYlJpZWhsZkJ6K1QvbkVYQy9jOFNrK3dTMUVHakw4RkhLQ0l2L1R1cXNvcnh1MkEwWWYxaU9pY2k5Z29uYW13L2FqSU9ZUzZzeG45NENvM01aQUhKSTlDN0RUdkJONXl3UVFtSWhraGlMeGxCeFpZMUZHNzdDWWNZVE9UWTBYZ0hORnVBZXIwKzY3bm5uanVCcTkrb0hYQUk0QUNjZ0NRSW9peXFSRmtRQk5SZU9sU1NFNm5CZ3RvUWlLRFQ2VVJQN2pXSHcvNk5JQWlUL3FpYXpmbk94M2FtNHp2YnlIMzlkckpOa3hqL3dPVi9tTFUvY3YrbG1GS2VaT2pjRkVYRi94K0F3K0hZb3RGb242V1pvNjFlRUFRVFlCVUV3U1lJelJ4dFdxMkxvODNMeThYUkpyb1RjcEZsV1pnOWU1WktFSVFSeXBRcThBcUx3eWNpNkE5MVQ3cVlSTHhERkovdy80elhXSzBlR2hNVDB4dzRhTmxNV1d4MG43bVNkUnQvWEtscmFzODBqM2ZmZlhjWW9QVERVMERFN1B1SitJUGRVOXlkTHlvTCs3OEZuMlhMUHU0NWF0VG9ZelQzUUJEZGFSK05wVldDTE11eUxEZm40MHFTMUt5eEFlaDB1cUhLWENwUW9PQjhRZS9ldlh1NWhacG4ya2VqWUtPbHh1YnExU0pKVXN2Q1VwVktwVGdmemlMQ3drSzdGVGdBTUJnTStQbjVLcE9uUUFIZzcrL2ZwNVVaS25yOENLMDBOeVRKUldtazlxQXBFZ1JCdUVDWnlyTXAyTUs2Zll6QllGQW1Ub0VDTnpRYVRSSnRmV3lOeGZCTlRCK2VSZkdlR2hzblRod1BBeEs3ZXNIcTJscHlLK3B4bkM0bno5bTJxYXpWYkNhM3JCcXpRMVpXVElFQ0JaMUNFSVNFRjE1NDNxZWxZSk5ibTZOQ2N6NnVSL0FBRUl4R1k1ZUszcEhxdWV1VkZleTFhd24zY2xKbzEvUHY2NmN4SWt3UFdIbnVvMi81T3F1Y1VpbUFMVTlkUmJUN3NQZFhydVNOekRwNkJIaVJWMlZod1JXWGNPdUFNR1hsRkNoUTBDRW1UWnBrQkNwb0lweEVGQVFFRDgwTmFQYTF5YktFdXRGRzFXaTBYUk5zb29ZRnMyYVMxTU9WMXI3eXUxVXMybkNRMWZPR0F5b21qN3lRV3llYW1mam1uaGFIalVnZHhUVXp3OUdLa0g5MEQ1TlhiT1B5QVZkMFV0R21RSUdDUHp1aW9xSjZBcGx1UWRhaWN4VnRvcU11NFNhNkpaMmdVb2tEdW5ZWnJ5YWhCdEF6eUI5TEU4K01taUc5b2dqV3Q4MTg3aHNWM2xSckZ4YmtoK2l3WTVXVVJWT2dRRUhIOFBIeGlmTVFhcTFiOGpYbHNyazdXQ0ZKa3RDVTVDWUl3b0J1WDlGdTRyMmRXY3hKN2R1TmcyUSsyWHFRWWNPVE1DcWtJQW9VS09nRUdvMG1vWlZRYStGamE1Mm9LOHR5VXdtWUFIU1BWRTJ5OC9vWHEzRWtwTEtnZjljTnloMC9iK1hqY2o5ZW1EUkFXVEVGQ2hSMENsRVUrM2hvYVc2aEpudWFvOUFpZ09BU2JFSnBhVWtpNE5YMVN6bjVkTlZxdG9weHZESzFQMTFWdkE1bTdPS3huMnA1NTdvMGdoVlNEd1VLRkhRTlhpdFhmaEhpSWR4RVdhWUZoNlJuQUVHV1hla2UrUGo0SkhUOUdqTHA2OWZ6V1YwSTcxeVpncjZMVXUzRThRUDhmVk1CYjl3MGhSaHZ4UVpWb0VCQjE5RzNiOTlRVHArazZ5SFVYT2FvR2hEVWFuVjhsNjlnTG1IeHBpeHFkVjZrUGV1aStkV0c5bUw3d2drQVBQbjJCNlFYMjZpek9aaXhhQWxKZzRmeDRZeEIvR2YxRGdvclJhNTUrVVAzaWZTOGQ5ODhCdXFWUlZPZ1FFSEhDQWtKRFc5cmpyYlUyanpNVVZrUUJFSHZjTmhmRmtWeC9wOWhnbjVMMmlJRkNoU2NIWmpONW1YZTNvYWx1T2lMNm9BNk40V1JCYkFMZ3VBUVJWRlNxOVd5UnFPUlJRQkJFR0tWcVZPZ1FNSDVDbzFHRStuV3lzVFRtS0tlYVIrdUx3UkJpRkdtVG9FQ0JlY3JWQ3BWOUdtRW11QWgzQUFaa0p1K1ZBU2JBZ1VLemxzSWd0Q2psY1lteUhLTGxBOTM5UUhJTW9nblRod1BCM1RLMUNsUW9PQThodTdmLzM3SnAzT056V1dPaXNIQndaSEtuQ2xRb09COHg4Q0JBLzA4QkZtYmRJOUdvU2JMTXFLWGwxZjRtVnprVEdpTHpPWUdjc3VxTWRuL1BMUkZzdVJBa3BTaVdBVUtmaTBpSWlMOFRxT3R0ZjVCclZLcHVpZll6cEMyNktPdlZ2TG1VUlBodmxvS0swM2NPR01xQ3dmOXdaWEZ3azBzVDc0ZVZZOElaSnNGcjdnVWhyLzRFaEc5T3k5Qk0rMyttZ1BiSFl5OCswcGxSeXRRQVBqNys3ZlcyRTVuaWdxaUtJcWgzVHE3bTdabyt3UHpXSG4zZFR6UTM0dEZHdzY2djNUUkZxMWFjQkd0eWEydm5EcWQ3UTlkeDhvN3JpTDkycUc4K3MxUFZQd1pWc01ya1VsN2RqUDc0SDc2RG5Hdy9mLytYNHV2SFRWbDFPWVhJN1hROGlUc3hkbVVIdndGeWRFOWpVOEdjRmlveThuQmJwUGM1M045WjZzcW83NjBwczB4OXBveWFrL2w0N0FwbXFXQzh4ZmUzdDUrcHhGcVRkVGdqYVZWYWxFVXUwbUo1a1ZTaitheTBwNUIvbGhLV3RJV1VaUFQ1aWk5UjBkWUNWQ3J4QTRiN1A3eG9DWnNlQXFXelVkeEFpb3NISHY2TGc1dnlNTS9WRU50YlJBVFBsdENRR0FkTytmZlJzV0pIQnJLSk5iTjNRVUJTVXg0OTBtOEtDUzk3K1VNMzdPVFVBTlVmcm1ZYmVzTlhQYkdYMTBLNHBMN09iQlRRc3plaFZQampkVS9tWm1mL0pPOU42VlNJUXhCTmxYVGNEU0RpTCsveFlpYnh3S1EvY0pDOW4yVFMyQnNFTFcvbEhQaHFyV0VOKzBJQy92L3ZnRDFSWGVSTkYzcDg2UGc5NFZXcSszVXgrYlcyRkFMZ25EbXpTTWJhWXNtWGRhbFAvOXB6eTVlM1pYTnlRb3IvNWgzS1VGL2h0V1E2aWpldElscVN3MG5YL3VDdUd1ZVFnVlViM2lQakIwYUx0dTRCaTgxNUx3OG4zMXZyV0xDdzVkejRic3JxUG51VlRaL1pXWEsyL2QzNjNKVk80OXl5YVoxQkFUcmNGb3NUYXV1NlRlVkNRL093TEo3R1YvZXU0emhONDlGUlNsSGwvekloVnN5TUlZRERodk9GbVc4RWpXSDl1RTFzRnA1cWhUOC9xcUJXdTFIeDc0MW9WbU5nTUF6ZTJDN1QxczBzRzgvbmpMR3NHM3ZIbDdkdUorTGJoM1BINzUxaVZSTDhhcHZFWXFQVWFNZnl1UWJKZ0pRdG4wN0drUXlGLzhEQ2JEblZsQmxQUVQ4dXM3ckFSTm5FaERzeXQ1UjZacXplTUtHREFaQUZ4Mk5XRjJOSFZBUlJNU0lJSGJmZGdNOUo0MGxJdTFpSWdaRWV5ci9qRnVmb1R4UkNzNExxRlNxZGt4UkdSQ0UxZzRaRWZEci9pWE9qTGJJWVBDaGQyUVlOMDBkalYvK01YNnMrQk5FUjlWUkpQLzdKY1orc29wZWtjZlk5VnA2MCtRYmtsS0ptanFWSGxPbjBtdmhJNHg5L0phdVNNcm01V3NuSkszMWFaOVZRRkM3VjBsc2FSNFBlWGNkby83dkZyVDJBclpmT1prVGU4dVVKMGpCZVFsUkZIMW80MXRyV1ZMbC9neFJFSVJ1Q3JZem9TMlNLS294TmYxV1dWcE1ua05Mb083UDVHVVQ2WGYvQTVRc2VaN0tHb25RVVNPcHpUeUJmM0lLWVVOVENCczZHRU5Rcy82cTlqVmdMNitrcGVqeXhjdW5sb2JDQnBmV3QyL1ByeHlURFp0SkluajRXUHJmOHpnSlk4T296U3BwOGYzaEorN20yQVpGYTFQdyswTVFCSjlPVE5BbVhqWTFkTk1hUENQYW9yNjhzdlF6dHB0MWhPcEZjaXRNekpsK0VVUC9aQzAwTmJGcDlCMy9MQWYvazg2NEIyNGxhY2ZkcEkrYlRFQ3ZjT3B6ZnlIcWpwZEl1V3FFUzd0Tm1Vb2tOL0xOdUlsb0lsSzQ2TFBuME9GTDcrc25zWFBXeFJ4TENFZHJFTUhuMTR5b2xDMFhYNDdUbUlpV1NtcnI0MG1iM04vamV6dkYzMzZPTm13S2ZTWU9VcDRzQmIrM1lEUFFzdWk5VGFvSHpSSk9LZ0NNdjhYQVRBMG1LaXdPZ24xOU1XaCtIN0xKODQyMnlHbXFvYUdxRG4yWUViVzJhM05pTFN0RTBnV2c5L1UrQ3lPUU1CY1g0MENEVDBUb255eFNyZUIvREVXQ0lDNEVUTGlvaTJxQmVrRVF6SUJWRUFTN0lBaE9sVW9scVlIZmpPclI0RzNBNEsyc2ppZFVCbjk4RGY3ZE9zWXI5R3kraDBUMEVVWmxJUlQ4TDBEWGdSbnFBVmZ3UUdGT1ZLQkF3ZjhDV3N1cWRnME1XVVlSYkFvVUtQaWZFbXh0QWdidENiaEcvbkFGQ2hRb09OK2g2a0JqYXlIZ0dzc1NGSndESERwMEdKdk5wa3lFQWdWbkIySkhXbHA3ZjZoQWdRSUYvd3NRT3ZrZFFCQ0JibEk2T05tWmNaaEZLemR3Ny9KTnZMOHZsMmFkUkNZckw0OVB0KzNsMVkwSHFXM3ZjSWVKOXpmK3hKYjhHbVdKT29LdG1NeC9QVWZlL3R6ZjVmSy92SFF2NlpkTVl2bm9HMmc0aDljeFo2U1RQdjFTVmc0Znd0SHY4My9YS2EvUE9vU3BSdEd3ejJOMFdWYUpnTE43cDY3anE3MkY5SW1ONGRMK1VXemVzb0hIZjhocDNLYTh0MzRQUjRwTGVPdUh6SFlGMitvdDIzamp4d3kyRk5RcXk5VFJRN2JqYXc1OXNKVDkvL255ZDdsK3dqMHZNdTJUNXhHcktqbVhoVy82UWRPWTl1MHFlaVY1NDdEK3ZyUkpKNTVaUVBiT1ltWHpuYjl3bmtaYmE2TzFxUUVib09tNmxSdkE0aHNuTmYwYTJGREdYL2Jud3RoWXdKdG5icDRKTlRsOGMzQm5tME5yaTdOWld1akQ3RGp2YzZvRi9CR1F0M29OdmU1OWlQeVhQNmJXOWpmOHVoQzdydDZaenZIbDY3R2pJV0RrTlBwZk9iNXB4VTFIdG5OczJUZVlheVg4TDd5WWZsZFBSSVdGdkdVZlVyVDNLSGE3bXVCSnMrZ3pQYlhUSk4ySzdhdklYZjBqRFZVbWZBZU5vZTlOczJsa3BhcmJ1NDdTbWlDOFNuNGlkK3RSZk1aY3dlQzVhV2Y4Z2k3NWJpblphM2VCWHhUeHR5d2tOTmJGMlNBM2xITHM3WGNvUDFHRWx6R0dYamNzSkRqYXhRSm9PcnlWSXgrdXhHb1Y4UmswbHY2M3pPaHdnMXV6ZG5GaytRWktqcFlqcm5nVHh4NC8vRVplU3E5eFNVM25PN2IwSzh4V0xWRnpieVEydFE4QWhWKzhnMndjUk9sM0t6RmJmVW44MjkyRUdGMWpzT2JzSjNQSko1aXFyUmppaDlCMzRRM29kUjNmRTVnNDhmcFNncWRjU002U3BWZ2N2dlQ1Mi8wRUd3M0tBK0cyWTdxanNmMHEzZnRJYVRtSnhwQXU3RkViejMzN013dW5Ec05MU1cvdlpLNnF5RitYVGVUVU9VUW1scERmQlMxQ0x0bkpodm5QRXpyeld2cGNkd1dDdWFaSjA3SWNXY09hZVErZ0czb3hmVzZhZzFEVzZENm9vNmJRVHRUczYrZzlieHBGcjl6T3dUWEhPcjFXWFZZdWdXblQ2YmZnZXFUTXovamhtWSthdjl1M25yMzMvWTFUMlY3RXpKcUoybEYzeGhwZjlZYlgrT0haZEtMbTNreGtuSk10Vjk1RXJmdU5lUHpaMjhrdkRLVHY3UXVKSE5JRFM2VzdGdG1Xei9mejdzSTdiUTU5YjVtTEhoT09UcTZqRG9vaUxDME43eEFEUG9NdUpDd3REZis0OE9hNXUvNVJmTkpta25ERk9JN2VlejNaQjZzQUtQcm1YWFkrOXlHaGw4d21RSmZOMWdkZmM1K3hnWjAzWFkreno4WDBtMzhqL2dFU1Zudm45d1Ftc2w1N2tSLy83elg4UjE1TTlLZ0VMT1YxeXZOd2VzRW10L3EzaGNabTVneXBpMDVsSCtiTncwN2V1Yk5mcDMvNzg4NGRWUGRJWm15b2xuM0tBblVJYThaR0tueFNDVGRxa2RMR2NHVHRPdnFQdWI1aldkaFFpY09oUjIrTUppUStncERrNXU5eWxyNU42SFdQMG4rR1MzTUtTUjdtL2lhVUFYKzlpWXI5K3pGWDIvQWZGRWY1cm9Nd3BVK0gxNHE5L25acWoreW5wcUFjLzZUK0hGdXhHN2kyK1cyWmtNYUloMjlEQUtKL3hUemtMbDlCM08wdjBXUEVCVEJpRUlVckI1SDNVejREMHFLeFZsYWlpUXJCTDc0dklRT1NQTForTlZhVENsMVlCSUdENGdnZU5LelQ2NmdDalJoVGpaU0U2TkVrRHNHWTJyTjU3dDcvRDJFM1BFU3ZzY09RZ2I2emg1R2R2b200Z1M3SzlyanI3aVI2Ukgva3FLdkp1UHdEYklBV0s1WnFLNEZoWVFRTVNDSjRZSEtYN3NuMWlKcnBjKzl6eEE4TlZoNkV0ckIwUjJNN0k2dXdvaWlIQlo4ZllORU5VMGswZEJKY3RWWHdqNDNaREEzWHNQN3dTVTdXMk1rckxPWlFoVWxacW5aUXVHNHRHcjJGbzYrL1FVVmVQV1ZyMTJMdDdPR01tOFRJZThaejRNNDVMQitjeXJaL2ZkcmtrREFYRk9BYkY5ZldZVkdSeWRxME5ESlhyS2ZxMEdFYWl1dVJISjN0SFJPN3I3K1lINS85TDVYN0QxT1hYWVJrczdWNFpmb21KcDZWbWxOTFpTWGVJV0ZONzJCOVdDQ1cwbklBK2p6d0FsNTVYL1B0aUtGOGZjbTFGSjV3RTgzN0pESHlwZHM0K2VRQ3ZoaVF6S1lIWHNicU9QTXhtRW9LS2Z2eVRiYmNjQ1BmMzNBanYveFlqazl3czJub0ZlaGlJUkIwV2dTSHcrM2REbVRZcTg5US9zN0RmREV3bVhXM1BrNmRTZXIwbmx3TEdZSnZ2Q0xVMnJWS1pObmNqbmJXbmtFZ3EzRVZsSFlMZFJVRjNQTFJOdTZjTzROeEVWMG8vcFJWakIwWVMyN3VLWEtCN0hvNzl0SlNUbFRFa2hTcytBOWF2NVR5MTI4bGZNSzlxQXhhVkgxSEVwRCtUd29PbXVnMXNLTzVVdFB6bGdmcGVjdUQyRW96V0RkdU5rWFh6aVhhQ1BvZVVaUmtad010TmV2S2pTdHdETG1Cc2YrNjNXWGVQYkdMVXkya3BSclI0V2l4YytUOEhadzRITUdWZTE1R0M5UnVlSTNET3pKZGRIK05iOHN6U0NJUzFDcWtSbnZORFYxUUVBM2xwVUJQd0lHNXRBcS9NSmZid3l2MkFpNTg2MlBBUWRiaUJleC9hd1hHRnhjQUVIN1pRc0l2VzRpekpwOHQweWFRcy9jRytnenZvbEhTcXIrRUlkeEk1T2g3R0hIYm1HN2RUK0NZV1V3WU13dlpVc1dPZVpNNS90MGNVbVluZFhoUGRESi90b3BpYkE0dmZNSUQvNnlDemVRaHpEcjBjS2hsV2E0VmhHNjhYKzExM0xra0hWMTBIeW9Mc2xsYUFDcDlBUE9TWGVyNzlnT0hPRmxSanRWcDVzdnRHU1NFUnpJMUlaVDdab3h2T3NVckgrZFRsVENJeXhOREZUbldXb3ZLLzVIQzNKNU12ZSsycG9DQmZQQXI4amQrVDYrQmw1eGVLYzdhenBGTkJVU21Ec0NSdnhPck5nYWZBTGZwZU0xOERzOTdpc3g0SFdGeHZwUituMEhjWGJmZ0hkV0RoajNwRlB3OEdvcDNjZXpiZmVpbmUxekRweGVoc1VWa3ZQQWhFWDBpTVU2ZGpDNHdDbS96UWJMVzdTRFlZT0x3cXg4RFEzNzFmWWVtam1EWGYxL0JJRTNDZjlDRmhNU0YwblBPTERZOCtTL0M0eDVDeWxwTmZsRWlGMS9vTXRteVAzZ1ZvZWN3ZkVNMVZKekl3eWY1S3JjcGNZZ0R5L1lRUGlZRm9TYUxCcE12dmwxMHZ2djFUdURZOG5meEZjZmlIVGVJME40UnhONndnTU0zUE1iUnlDY0o2ZWxIOWQ0ZkVIdlBvTmVvdUE3T1ZNckJmNjBnYU54SXRGUlNYMm9uT01ibHMrdm9uanJETDA5ZVQyYnBTR1o5OXVTZlZiRFZkNkN0dFJCMnFpZWVlT0pLUVJBU3UrN1l0bE5sVXhGdTBHQ3hPN0RZSFZoRkxjT2pYUjBNanVXZUlzK3FabWhzS0RnY3FQVytKSVg1dGpsTmRIZzRzWDYvZmJjT3Npd0FBQ0FBU1VSQlZBTjZrOG1FMHluaDU5YzlmczNTMGpLQ2c0TlJxVlRuOUJoclFTSHF2c1Bva1J6ZjlKbDNsQkdIWFVOby85Z09WQjRuVmJ1MlU3UnBNN1dsQWdNWFBVMm8wV1VtcVVNVGlCazNnSksxNlJUL2ZBaDk3MVRDQjhiaTFYTXdnVUUxNUh5NUJqTkdrbTZiamFGSEFvRnhqUjBaTlJndnZnanpzUXdzSlNZQ2hxYWc5UTdGbUJwTHdjb3ZxY3F0cDk5ZHQrTWRIa1Y0Y3JQNTZSVVo3M0dPcnNFM2VRdytZaVcxV2Jtb0l4UHhqd3hBMzJzWW9VWWJwNzVLeDFRZnhKQi9MaUlvMUVWRzQ2ak1wV2pUWmtwKzNJY2hkUzdKdDE2Q1NnUkVnZHFNSFJSdDJVVGxMMVVrUHZnMDBmM0N1cVpsRFJ1UDJseE0zUzg1NEJkRllHd1k2ckFFWXNiMHBuaE5Pc1UvSFVEd2pjVTRiamc2Z3l2TzZ0c3ZCVU9nZXg5ckFnZ2I1bUtVTm1jZG9HalRKc29PNXhCOXk2TWtqazBBNlBDZVhOQVNOR3dvV25YN1l6VDBIa3pvZ05nLzUwdmY2VHo2OU5QLytCbFhFTUhhK0s4Z0NIYkFLUWlDSkFpQ0xBaUNMRGlkam85RVViem16ekk1dnlVZjI3bmljRk9nNEUvcHBMRllWdXIxM3YrbExSOWJBeTM0MkVSSmxHVzVVcGt5QlFvVW5POXdPQnkxSGlhbmZIcGZtNEFveTNLRk1tVUtGQ2c0MzJHMVdodkxsVm9MdERZQ1RuUTZuZVhLbENsUW9PQjhSME5EUXgwdGszSlBHeDBWN1haN2lUSmw1d1poWWFIZENod29VS0RnOUtpdXJqNmRLZG9rN0JvelBFU0x4VktxVE5tNUVteGhpbUJUb09Bc29haW9xSzYxUUJPRU5tVlZzaUNBV0ZSVVhIUkcwck8ybHR5S2VoeW5JMlJ3dHRJUUpSbUhVMnI2a2FRL3o0TEk3bngwdVIzV2xkTVZ1elY5TGlrYldvRUNnSXlNZy9YdVIwTnFGbTVDTzQrUGdIcnc0TUdsa3VTMDRPb0Ewem1rZXU1NlpRVjc3VnJDdlp3VTJ2WDgrL3BwakFqVEExYWUrK2hidnM0cXAxUUtZTXRUVnpYVkNuNjFialdQN0NqQXo1MmdNL3JDVWJ4d1VlSWZmelZxOXZERnBIOHo0K2NuU0I5d0Q1TU9yMnBxNUpxLzVCNU8xa3lnbi9FQUI0NGtNUEdwdVUySGJadVFST3lIaHlpOEo1blFwM2ZUcTU5YTJka0svc3l3M0gvLy9RMGRtS0l0L0cyTlQ4c3BvR3RTUnRTd1lOWk1rbnE0MHRwWGZyZUtSUnNPc25yZWNFREY1SkVYY3V0RU14UGZiTnVsZk9xRUNidzRQa0ZaSWdVS0ZIVFA2cEhsdkZZQ1RQTFEzRnJxYTRLQTZEcEc3Z1pOcTFlVFVBUG9HZVNQcGFuR1Q4MlFYbEVFNjl2WExxcXJxOWh5Sklmc0dzdWZhRWtFVkY1ZWdJaEtyMjlSSEM2cXZCQzFJb0pLaGRncTFWelU2MEVFMFV2djRqbFdvT0JQREtmVFdkQktxTFh5dFFteUlBZzBCZy9VZ0N4SlVzNFpPYm50SnQ3Ym1jV2NTWmQxK3FjYUx4MzJrbkpXN1M5aDYvSjFUSjh5aGNjOTZHSCtzUEMvZ011M0xnSGcwdDNMVzN4bHZIRXhybGJGMDJoTnhUanF1MTBBOVBoNGg3S3JGZnpwWWJQWml0clIyTnBOK1JBRVFWWURzdFBwek82MllKUHN2UDdGYWh3SnFTem8zem5OeXJRSmFVeHovMzlaN21FbXZMZWQ2eS9vU2F4R1dUUUZDaFIwalByNitxSjJUTkRUK3RsRXR6UTgyVTNGa0U5WHJXYXJHTWNyVS90M3U5VlZhSFFrVVk1NlRpbjg0QW9VS09nQ1NrdEx5K2lDajYzUkhCVUJ1YXFxS3F2cmw1QkpYNytleitwQ2VPZktGUFJpMTQ2cHJEYzMvWloxN0NRRittRDYrQ2dMcGtDQmdzNlJtWmxaNFNITXBFNU1VUVJCRUx3QnJTUTVpd0d2VHE5Z0xtYjBvaStvMVhuaEpib2NkZHJRWG14Zk9BR0FKOS8rZ1BSaUcxVm1CLzU2TDVJR0QrUERHUU80NzVYMzJPUHd3Vjhqa1ZjcmNlL3NxY3pyRS9LYlQ5QnZ5ZTZoUUlHQ3N3S3JJSWpYNG1walVJK0wyYU5PRUlSNjkyYzJRUkFjb2lnNlZTcFIxbWcwc2lBSWd0NHQyTFlBeWVkdWJCSmwxZldZblFMaEFiNTQvVTRKK1lwZ1U2RGdmd3VTSkdXb1ZPcEZ1Tm9ZZUFvMms0ZGdjN29FbTByV2FEUnlZNDZCTEVsU3BpaUs1MUN3aVlRRytDbXJwRUNCZ203QlpyTmwwZGEzMXRySEpudVlvWWlDSU1pQTdIQTRNcFVwVktCQXdmbUd1cnE2M0hZRVdwT1ByWFVPVzFQd0FKRE5adk5oWlFvVktGQnd2dUhVcVZNRnJRU2FrOU9rZkRRS3VjYVlwbno4K0FsRnNDbFFvT0M4dzlxMTYwcmNnc3ZwSWRUYXBIczBtYUdpNEtvOEFPVFUxTlJ5U1hLZUFIci9wcU4rNTlLMm4xMXdOYVRNVTFaVWdZSS9PV1JaL3VYUlJ4ODF0elpEM1hSRm5wcWFoM0FUbTRyZ1pVQ1NKR212S0lxOS84Z1Q1VldUaTZvd0U2cTcxNVRXNzlRcFJNY0pVQ3NzR3dvVS9GYXcyZXlIMnpWRFpTUUVXUUpCUnBaQmxtUkJsaEdjSURqa3B1QUJnR3kzMi9kMWZpa25Pek1PczJqbEJ1NWR2b24zOStWaWE1YXZaT1hsOGVtMnZieTY4U0MxclczbC9CeWUrWElqOTYzWXpFZVpoWCs2UlNyZnQ1bXhUMzdSNHJPVDI3NWwrcjlXdC92M1A2NVp3ZWpaZDVFODYxSDIxbmg4NGFobDBaUC9ZTkFWZDNQSjRxOS8yNXR3RkhQdFRROHk5SXFGWFB2R0QxMCs3SVVuSCtHL2U2dTZkYWxsLzNtTjBkZituZWdaejNBMjJWQy9XN242LzdOMzduRlIxZm4vZjU0ekY0WmhHRVlZWUVSRVJGSkRSRU15SkRVemM4M016Rnh6eTh5MXNqSXoxM1ZiYTExei9mVTF0MjI3bUd0bWRqTXoxOHpNVE0xWU5EUFh5c3pJQzVrUklSSWlJZ3pETU16bGZINS96SVVad0d2cVZzNzc4VGdQWmM3bDh6bm44em12ODc2K1BwelI3SE0zc0t1b2xCTXRLTC9talpmSkdUV1pubVAvU2NWNWUvQXU5dTByeHRhTW4yLzVpMDh6NS8xdnoraEtCYXRmcCsrNDZhUmQrd2QyMjg1aEZ4VWJVNmJQNDREOTNKRUlIcmZhRHJaaWhnYjcyUENUVFVwSXlGSlQ4QUIvWk5ScXRlNDZkZWZyV0xPcm5DNnBIYmdob3gyYnQrUXphMnVKYjJjREwzLzRCZnNyanJCbzY3NFFZRHRXZG9EZnZicU51TGJKREwwMEdkbmx2dWlBemUyb3AvUm9iY2h2c1IweXVPdnFMcTBjWGNmc2Y3N0h6UGxQc252Vi81RWQwN1NuL0xPUGVMazhnWjJybjJYOXd6ZGUySnRRVzFqMnl0K1pOeXFMR3J2cjlFSDlhQ1ZXdStlTW1ycjFuc2xzV3pnSmRhMlZjL0dxNUc5NGo0SUR4eml3NXh1cTdjZVovL0phcWs1bkd0cExHWDcvaTdTNk9JaTltQmt2RnJKczZiUHNYdlpITE9mdHdkY3ljZEpjaXBvUjQxaXJxNm11ZDUzUmxRYU92SjF0Uy85Q2txdnV4RVN4WnlHRm05YXlyMDBXbmZYbmpvNm1xUGpRRDgyMHRXQWZtNUQ4NE9ZRE9GK3FoMUFIMjZtalI5K3lhL1BtQWh0dzRtSW4yY1RqNDY4Ti9ObkdmcFQ3ZHY4QS9WTUJQZjgzWVFUVWxyRDI2MDlEVGx1eGJSZlhEUnJJdmJsSkZ4V1lPWTRmNXNtWDExSmNyMlZvdWk3a0M3enN0YmNvc2lwWUxzME9PV2ZudHYrdzVzdHZLYXgyczNybFcyeFRSVEx4enB0SmliU3orTVYzMkxYM2F4eFZHdVk4dDR6WWpwbE1HOWJ6WjNHdmJsc1ZpMWZtcy92N0NoU2RrZEUzM2NEZ2pQZ21jQ3Y5aG9mbXZJbE5uOENVMzQrZ2E1eTMwTVYrL0RBTDN0aklubklibWJsOW1UcThGNmRLZzFZYWpyTm8yWHZzK1A0WXNZbUpqQnM5Z3V5MitwTy8wQU91WXRuS3RiejhTU0ZibERVOE5QNG16S2Z3TEd6NVlCMzVYeGRqclQvTUU4OHRRNC9NcldQSGtORkdKdi85dFd6Wjh5MWxqZ2FXdlBRbWVsMGMwKzYrRHRNSnI5YkkwdGMzVWVPcTVxQTlnYUdkbkt6OC9CalQ3NytkakRnTnV6Ly9oQlVGZXlpdmJTRHQwaDVNSFhNMUpnM3MvdTltVnUwOFNJbTlua1dMbG1IUlNBeTk0VWJ5VWcwK0JiNktKeGNzWnM5UkdELzJ0d3k0cE0xUEdFUTd5OTlZdzZadmptRHBlQWxUYnh1S3hRZFVaVVc3ZVdMRlJ5aHRraG1lRlk4anRoUERlN1FMV0hLTC9sM0FyVk9mRHJIdVZpeC9CMk5xZTlaLzhDbTZ4STVNLy8zMVdIeDFtRFVsKzFtMjMwbU85a2VXRkJTUjBPa3laazY0Q2owdTFxOWV4Nm92ZnJDOXNXSHJrV1phbWdkUWhOY2M5Vk9EQzBsQ0tJcUNyY0dEcmRHRjdITzZDVUQ1NktPUEZDSEVqak41RHZzcnEraWNkS3JTS0JkN1MydUpFY2U1Yy9GYjNQcnlCajc0b2VaaThCQXdmZHBzRHVxN01HbFlOc3ZleVEvYXB5STdweWRkdFVkWmxCK2FRcGpjSVowaHVkMHdTUkhrNVdZekpLODdSZzJBaHQ2OUx5T3ZjeUlHY3lKRHJzeW0vNlZ0VDlvRDY2RUR6Rm40SnJPYmJadUt6djNpWk03cUNxcTFDWXkvWlRoais3Vm42b04vWVh0Vms1YTI1SjB0REJvMmhOeW9IeG55aHhleEF6UWNaZFNFUjZtTTZjeVVXNitoWk5QclRQLzMxNmRzYThuOHAxaC9KSnBwZDl6STBPNEpWQjF2T09VNXhRZjJzK09IT3BMajQwblFPZGoweWQ0V3BsMXpTZXQ4S1VONlg0Sk9ZNlQvbGRrTXViSW5DVHJ2aTVuZTlWS0c1S1NqMHhrWWVHVTJneS92Y2dvYTZrYVd2dkltY3FmZWxIKzhuTVY3dGVSR1ZmREV1MThCY0xDa2dwd3I4NWcyZGdnY0tHRE1zNXNBU0VycHhKQXJNNGpWYU9qZE81c2hWMTVHU3BzbTZGKzk3aitrOWVyTHNJNkMwWDk1aVovQ0xmSHFNLzlnZm1FOUUyOGRSdXlQWHpENHJ5dTg2bEZ0TVVNbnpTY2w5eXBHOXpJeWJmWjhWbjhaWk5EYmZtRFRnU2o2ZG9zT0FiWlZiNzdCak5jL1ovU282NGl0M01uSXVVMnVrNW9maXBqOTVIUE0vMjhOSTYrL2lsU2RDd2RRc0h3SlU5NzlqdHQrZTkwWFRwZGJhY1VFOVp1aGlpS0VrUERxYlkxdUJZMUdUWXhlRzRpS0JzRE43WGJ2MEdnMGcwN25JWlIrdjVmbjkzcDRjZktscC9vTVlITzVXYi92Q00rUEdZYXQvQnNtdkxhUmpnK040ZGRNRHE1VTdHWEY5M0hzZVdrZ0ZobG0zdDZmVVIvNEg3ZE1ScmNNNU1PNzRmdlE4eXp0TzJCcHI4T2dpU0NuVndhWkFhMUNRODhlR2FqTGQyTW9qNlJ2ZHNhcExVZU5sZ1J6U3gzQ29EbjNOVzM2bEV5bUQ2L2hzMisrd3laTVpDUTQrR3hmTlhuOXZWcmJtTnQreStEc1M2RG5IYno4MW4xc09UeUoxRDBGN0V2c3c2clJWeUFEYys0Y1NzYlRXNWwvUy9lVHRsVjkzSXErYlF4cHFSM28yU1h0dFBvbkd5ek1lK1ErWHA3N0RFTm0zQWRGM3lPZndtcEs2ZGlKbERnM1dtMDB1ZGtaSWFabWFxZExTSTJwUnhjUlRWNTJ4a2swdGVEdldSeUQrbDJLODBNelNxL0xHT0NwWjlVWDNvL01xTi9lUlBHM0J5bjZzWmJNcnFuTVgxY0VEQ2FoWFFvSjdmUVlOVnF5c3pQSWFhYVlEaHgySFNQN1pNRGwwY3hlT0k4U0oyU2NWZVZmRFV2WDcyZm1xNCtRbDZJaHI5TTRsdlNmeTI3N3JjZ2ZmNEl6YXhEVGgzaXRnd2xYZjBoaDhFZnR4ekxLWXhKSWFVVUR2dmZPMituZlBZYitLV05ZK0p0RkZEOTZFMm0rNCt5R05CYlBIT00xRWZNQUZKYS8vekZUSmovSFpSMjFlMW94UXoyQVI1Szg0Q1lFSUNIOGE3cW8xU29pSXlKUSszSS9oUGNnSWVycTZqNkxqWTA5NVNNNDltTUo5N3oxRlhQdUdFSG5xRlBaMUdyMGFoalcrekpTalpGZ3pLSlAxSFkrSzdmL3FvSE5XVk9MclUwY1p0L2pzY1RHQXhkMlVUQTVRb2ZGM05JME1lcFBIZDFkdHVCSlpxN2REOGc4OGR4OFJuZUpQUG1IYmxjK2cyYSt5NUJCdVNSRXFhbXllM0M0bS93L3lXYmZ2SktOV0dKY1ZOWTBJbGRXWWozNERTTWZQQlE0cm5mSFMxSGdwSFJZOTk1L1A0OHNXRUgyc05mUkpYWmsvditieXNDT0p5L1pTK3ZVQVlBaE4xOVBFbURzMnZIQ1R3cFpqVm9HV2FWQzFraG9aUlgyUmdFME1IUEtJMndScVF6cVpvSGpWVGhjcHhlQk54dDk5NjFXb1ZhNVVjUloreEtvckRWZ01mdElFaU5OSkVUWktEOE82dG9hTE9ZbVd2K0UySmpRanppZ3lGSXJGOVdRbE9BN05pYVdCTWxLcFIzU2ZGMU83cGpjek8vVlNFVlZJME1zSmc2VWZGdmNHcWdGKzllRWQwT1NaYlFvMURjNHNOa2RoUGpZQUdYU3BQdDNyRmp4WmkwUWM2TDdyenQybUR1WGJXUHltQnU1eXFJL2pTZW1vV09pQVpmYkhYZ01MbytFUnY1MUwwMm5qVFZoUEg2TUtnVXNNbFJVSGIzd1ByN3FvNnovNlBNV3p2Y2hwbFF5MjBhZjlOeXhrNmN6ZHZJSjdrMmp4dUVLRFFhc2VtY0RJeWRPWmQ2SVRvQ0w0aTN2aE93dnE2b0N6S0JZcWFqVmtSUWJRWEpDQWdsWmJkajQxTmdUYURncVpMZW5SVVRTMUw0ekMvOCtDL0N3YlA0L21QbmFGcmJQSG41YXo2UnJ0elBNYUpJbFpNVnp4Z0VNbTdXV0tyc2cxWElhdXR5UGUxbjRUUnlsSHp5SUFTaloralpQZkZFU2RJQUUwcG12N3VhMDJ5Zy8za2h5dXppYWtjK2pWU2s0Z29kUWJTQWh4a1pGbFF0U05HQ3ZvYkxlUUZJYjBKbmpLZDNXRlBNdHF6Z0tRZDhSWFdJOENjY3JLVmNnVFE1MVE1VWZxWUVVRTlSV1V5bU1tSU1nUTI0QmhoRll6QkdVVjlUVVB2cjRNMlVuQUxXUWtpclpWM0VRcWRQU1Jxc1JHaFZlalMxSXhNcVZLOTNMbDcveHNTekx3MXAzbDlVeCthWDMwU1Yzb2Zydzk3eCtHRlNSSm03dDZhWDUvdVNyUFJRZnE2TFIwOEE3bnhTU250aVc2OUxqdWJIWHBVd28rQzg5alRuVUh6N0k1NHFGdjdhTCtGVURtNXlRd2EzcHg1anh3bVltWDJIaXNUYytob1MrWHNDcFBjcTJmWWNwUGZBajlxTnE4dis3RzFOQ01qbWR6aTJWazZsVGR4Yi9yZnM1djdlczd0MG9ldWtkRm1mcFNVMXV6K0FlSFVocGw4Q0tyVnZZMlZWaTM4Y2ZzUDRISlVRalgvbkcyd3hPR1UzbHArOVQycUVmZmR2SzZFMERTVnYwQ05OZWE4ZXRWNlJRV1ZMTUhuc2JIaHFaNHowcHFoMEQyaDlqenZNYkdOekp6TUNCbHhPcmhsWC9YZ1h0dXRMWnJHYm45NVdrWjE1ei9nWlNuMGhYZFJrTFZueEVYdHNvY2k3UDRYUys1eHZmWE15WWRSNXM3ODA0OVJKd01mRWtPYjVqMlVkN3lORTdlT0tsRHduTmxUZVIwZDdEb3FVYnFleG1KaU1yaTdRMnA3WTNDemU5emVWemQvSHRaODhTdW94U0RQMTdSUEhVb3JjcDcyVWhMNjhQeVFZVDQ0WmV5bVBQTGlYMnp2NXNXL1VtdXY1WDAxTVBjcjkrSkQ4OWsrbXZwWkFUV2NXcm54NGhOM2h3amVrTTdsakw5cUlHMGpKQ05mdEZMeThqTS9JM2JGKzFrdVJyQjVCK1VrVlU1dGJyKzNIUDh5OTlldkQ3OG1BejFCMENic0svTXFXdlJsUW8xRHNFa2lTanVEMm8xR3ExSklSQUNDSDV0SC81NFljZlRsQ3IxYTM3MlJRWHg1MHFFcU0wT0Z4dUhDNDNqYktXM3NsZU0rT2JIMG81MUtnbUp6VWUzRzdVa2RGa0prUmpUa3lpbTc2UkRWLy93STlLSkErUDZFY25neHAydmRteWpiYmRJYW43ZVptampkWGxLSFZIMGV2MVozUmViVzB0MGRIUnlQS1poTEpWRE9pWHc0R2RPL2pQL3FQY2Njc3dPcVVra2R1NUxiYUtVbFordklkYUtab2VTVkdVVmxSaDE1ckk3aGdNYkZwNlpYY21xaFVOUHlvdWdaeU84Zjh6ME5hWlV4amMxY2dYUlQ5UXI0bWhkM29pR2QyekVPVUhlUHVqUXFJdTdjdTkxM1NrVTNwblV0cDRQMkRYWDNVNS84bmZ6QTlTSWd2K2ZDdUprU3JRUkhIemIzTDQ5c3N2V2ZmSlYxUTZ0UXpzY3hrZDR2UUJOOFkxQTNMNDhidGlTcW9hNk5HakM5RnFzTmRVc09tVFhlUi9mb0NVN0VITXZqV1hpUE8xNkkyazR6Zjl1MUY4c0pqaThtT2tYWnBCZkdUUW9HZ005T21SU212dmEzeFNDbGQxVHdreXExWDA2SkZPSkpEY3NSUEpNVnAwSmpPWFhaTEc0T3kyckZ1L2xjL0xHbmhnd2syMGl6ZlRyMXY3d0F0L1ZiOWVWSlY4ejdlSGo1S1lrazU3azlZWFhPaElla0pVWU03a1pIY2gyRHNVYmJZd29OY2xOSGNrOUwzeUN1b3JTdmp1eCtPa2RlMUdnbDZpWisvZTZLdS9aK1htTDlFa1o3TGd3WnVJMWtpZ01YTFRvQ3dPZkYxRWpiNDkvUklhT0dycXlnM2RMWUg3U2hCVkxOaFZ6MjE5T2dhQ0J5dmZmSThieG81aWUvNFdHaTBaTEhqZ0JxSTBUYzlPWnpMVE96MDBTYVpqOTU3RVdnKzk4ODcydlljQUo5QUlPSHovT2dHWEgrQlVzcXlvSkFtMVNrWlJCRTYzQjZjaUllbDBPdG50ZGt0Q0NGa0lvUkpDYUV0S3Z1K2VrcEt5N1lLOElSZTRwS3IyMjg5eGwrOGpMdTdNS2c5S1MwdEpTa3BDSGE0OENNdEZLa1hmZkVkcXAwNm9uY2U1OWZkL1pPak1weG5mUGNoajVhcGgxTDFQTWVmWjJXUVlaTURKcUJ2R01YYlJDa2FjR2YwaDcrUnZ2Mi9rSCtiOVNDZ0htMDJDZWlRYUpTU25KT0dSSkVsUnk3TFFxbVVSb2RVUUVhRVIvdUNCa0NRSjRZMHZDRUJKVGUxWXBDaWVQVUJtZURqREVwYXdBR3o5Y0EzalpwZWhTSkVNSFRXSmNkMmJ1ZUUxSmxhOU5DZkVMNWpldFJPeFo3aGdreUxFdnBGL21IZXNtUm5xcG1XNmg1QjhPV3orSUtoS2tsSEpFbXBabGdueXN3WEF6ZTEyRjZqVjZsOGRzTGtqWW5ESHBrRkM0cG1ac0xVU0lqNFZOT0ZsdGNKeWNjckVPUzh3OFF6UG1mZmFXMmZjVHIydC90TVQrTlk4U0pJWDFDUUVrb1FreTk0SXMxcUxTcU5GMWtZZ1IrZ0M2UjVJa3VSVDJyeUlhTFZhdDhUR3hrNzV0UTJPUjJmQ0pVZEJ3cG5weG8yVkxrVDhKUkNtQmc5TFdNNnJmRk82Y3graGFSNXV3Q05KVXBER0ppRkpzcEJrRlpKS2c2elJJbXQxeUZvZHFnaDlrOGJXTEo5Tk1admp0eW1LNXpEUTdyemVSZmJ2V3Y3V3RudDRkTU1TbG90UWhCRGxsMS9ldTdTWkNlcmZmSlJGVWdocnJpekxnVTJsVXFGU3lWNWdrMlZaZUR5ZVlGTlVBQjZQeC9PQlNxV2FjRjd2Sk15N0ZwYXdoTVVuRFEwTlcxdlQxb0syRUI0MldaYUZIOE84d09ZRk43azFqYzJQakhWMXR2d1RkYURHYXVXSFk3WVRzd040UXRPZkZVWEI3UW5kZnZXaVZMTmk4U0lXTFZyRSt1MUZ2N3JicXlrdll2V0s1U3hmZHlFQzZFNEtWcSttMG5FUnZOMk9LdGJuZjNiQzNmdTJiNlN3TkxUV2V2ZVdOUlJWdEY0bFdsbThrNVhMbDdObXkrNW04OVBKWndWcldiNXNHWHRLbTdoNFBpdFlUNVh6ZjNQckJ3OSs5MVV6VUhNRDdsQXpsQllhV3hPZ3FWQ3AxRjVnODI4UTREWVNnQkliRzVzUEhBNTlHRFllZVBwVnJsKzBqajhzZTRlK1Q2M2l2NVgrQXVSRy9yN3NiZkwrOWdMcGMxWlNGampKeFVQL2VvMis4M3piNHk5ejZjd2xmRlFqZnVVelZNWmdNRkM2NHkwV3J0N3hpK3U5dTJRTG82YzgxZnBPNng0RzVWM1A5cUpTS2lwck9QK2ZLVHRQVEh1UXdvdUFPMkhkTTM5aS9iNFRFNld0WC93d3E3ZVhoZnkyOGRXL3MrMkF0U1ZHbG13aWQrQ2Q3Q2t0bzdJNjlPR3RuZmQ3N24zaWJjcktLN0RhbTJvN2JIdldNSDMreHYrSkdkcWpSNC92ZmVEVjNBeHRLcVh5RllZR1k1Y1gwSm8ydFUrRms1clNQaVFoU1NoQ0NBVlFQQjdQQnBWS2RWZlR1NnJobmxFanlHenZMUk5admY0OTV1Ui96WVpiZXdNcUJ1ZmxjdGVnQmdZOS8wVlFselU4K2NEdkEzK1ZGMzNKeU0zSDZXT1NmdVc0Wm1MWXJXUFJWWDlDWWNrSnRKN0tNbXJjT2xLYk02UW9Uc3BLeTVBTlpwTE1vVFdRRGxzMTVaVld6RW5KR0hYbkthOU9VWERVbExGcCsxZTQzVzZRWmRUKzVHUkZ3VnEwazFMTFFPYk5uTzZkV0tkMVRVQUdlMDBWbFRaSVRXNjZaNmU5aHJJS0swbXBLZWlDTCtaMlVGSldpU1hsREpkdVZKeVVsWmFqajdVUWE5U0ZkS0t5ckJTMzNreFNyT0gwQU41aHBjb0dsbGd0WmVVMUpDVmJtdTdYTjA0NmN4Sm1RMmc3MVJYbFdKMXFVbElzSWM5SEFSUzdsYklxRzhrcFNhR0p2YzVTNWkzWnljTGRyN1I0ZUJXbHBlak1MV20vRkxlYjZVcytRYTJXVzFoSnhUdDJZT2g3QzdPbVQwT1cxU0huYk4rK2czRlROak41Y0doKzVzRHhrNWlhL1FDbFU0YVFjZ0ZqWlhhN2Zjc0pmR3VlSVArYUFnRWZXOEFNOVd0c2FyVUt0VnFOMm1lUEVteVMrc0tqQ3VDcHFhblpFQmNYMXdSc1JKRFp2cWtVS2lVMkJzY1JmNkd6bXN2UzJrRnR5VWx2NEsyZGV4bVdmVFVYZFh4UnNURjMvQTI4V3VnbVJWOURsYkV2RzljOGowVUg5cklkREI1MEc3cjBuc2pXTW1MNzM4K0t4OFlCc09YVnYzRFgzUFZrWmFaUWV1QUFNNVovenFnc3d6bnYzaE9UaDdOKzV3L1lEbFF4YU1oMXFPVkVGcTVkUm1jZFBEWnhDSnQySDZibVlBMURobHlIbkhvVkc1Zk1QQ1c0amUvZEJuMy9DV3pOMzRKZWRqQmd5Z3M4TVNHUHRmTWZaT3FDcldSME5sTlUyc2lyYTliVE44MklyWFE3Z3diOURsMTZGZzZIaTVvZ2pxRXhtWkdNV3RYQXFLNVFzMk1KWGFkK1NzV09Gd0U0c0cwcG84Yy9TbXpuTEp4VkpReWE5aUt6eC9UR1hyNkwwU051bzhxWUJsVUhTQjN4S010bmp6MXB2OGZudHFYRW5FdnBycy9vbXRzSGEvRlg5Sno0QWdzbURhUnkzeVpHanJrZmJYSUdOUWYzTVhENjh6dzVjUkJRd2Npc2ZsUW1kQ2FXR2c1VW0xaTUvbTJ5TERvMlBuTTNqNnc5UWl5TjJLdUtjR2JjeWZZVnN3THZRa25CS2lvNi80YVFJWFZXTVduRU5XeXJTY0NFQTdldG1zRkRmSXB6NFRwR1RudVdvbDNibUw3OFc2WU9TZmFkVk1XVWtiOWo1OEVERkZmS0RCbXlHVXZ1TFN4NzdDNUt0eTVqd3B6WEtOcFZqcUg4TnRZOXBXUGNySmNZMTk5YkZvbXhKNE03bDdPcW9JUnBRMUl2MkN1eGI5LytMMDlpaGdacGJLRkJneVlUMUd1R3F0VnFTRTV1aDlsc2xxS2pvNldJaUFoWnJWYXJaRm5XU0pJVUtVbVNVWktrQkNHVWZVSW9vc1htckJQM1BmT1NXTGozYU9qdk5jV2k1NnczeGFGV3puSFZIUko1czVlSy9RMnRYTzhDYkVlT1ZJaERodzZkOFhsZmYvMjFhR3gwbkZXYkh6NTNqN2orankrSC9QYkRCMCtLeEY2M2lGcVBJb1J3aUQ5ZmY2bDQ4SVd0UWdoRi9PZTVlOFhWOXkwTUhCdmM3dTJYeFloWFByZjYvbmFLeGtiM1Nkdis4YVBGb20xaW9raHN0ajM2eG1lbjdIZkQxOHRGVEs4N1d0MTMvUE9YUmVLVjk1elJjN2lqVjVTNDVyNW5oTXQvL1FhN3FQMXFsVWpzZUpYNHZ0WjdIMSs4TVVQMHVuMnVFRUlSejk3ZFIvenU4VFhlOXI1YUlXS2tSUEhoajk1emIra1dJZDdhNyt2TGZ4ZUx4Q3Z1OUxiaktoTlh0NDhYcjN4UzVtdlhMWTRkcnhGQ0tPTFJtN3VMKzU3Tjl4MVhKVzdzMWs2OCs2Mzk1SDIrSWxHOHRkOHBYdnZ6OWVMMmY2d1J4ejVaSXJyOWRvNFF3aVorZjNrNzhmZjM5d2doRk9HcDNTTjZ0YjlVZkZIckhjL2EycWJydnZibjY4VHR2dnZZOFBTZG9sMi9lMFc5VUlSb09DaDZ0V2tuUGo3YTFONWJmN3RGM1BqdzBwQStmUEhHSTZManRkTkVvMUNFYUNnVlY3WFRpRWZmTEF3NTVzL1hkeEJQYnlodE9XL2ZuQ1Y2M1BGRXEvZjJ4K3M3aU9jK0xHOTEzK3NQM3lodStkdktDL1plS29xbkNCZ05EQWNHQWJsQU55QlZrcVFFSHhaRnlyS3NVYXZWcW9pSUNEazZPbG95bTgxU2NuSTcwdFBUeWNyS29rK2ZQbHg3N2JXb1pWbmxqeWhJc2l3TFJWRWtYeERCYjQ1Nm5FN25lMXF0TnBSMFRYSHhyN2MzNEU2L2duc3lUcjg4YWR2Ty9jUmYycFd1T2k1cTJiWHJTM3IydlFhakRLQmx3T0E4SHR1NUd5YjJKYk4zZnc3TS9UUGo1Ukw2NXZWbDVNaWgrSW1rQmd6c3k1eTdidVRBeU92b08yZ29RL05PenNsbTZYOFg1UlYzL1d4OGptUEdqZzJZWGpxZGpoM2JDbEQwc0dqdVg3elRxcXFJUGJ0MEtNQ3VuWHNZT01GTEdtREtHa0JQODZrTlh2ZUJiWHdtOTJadFhsS2d6VmlURWFoa3k5WUR4Sm8vWU1hTUQ3MDZqZHRCNGU0U2hxZDNQY2tWOVJnTWFqQWFNQmxpTVJqdE9PdzJzTzVqeTI0N2NzSHJ6TmpxTlJXZDdsTDJITFNSbmExang2b25XYmppUXlxdERtb3Fpa2tkZFhQZ2lqMXplNk1IMENXUm1sQkRWUTNnczhxcnE2c3dKWWV5Z1JUdS9wSzhBWGQ2dFRwZE1nUHowcys3VDlNWWE2S3E3TUk1Tkd0cWFyYlFzdElneEJTVkpFa0pyQnNhRWcwTjhxMnAxV2cwR3E4cDJzd2NGVkpUdHE0Q2VNckx5OWVucHFZK0ZCVHlaTVY3Ry9oWTdzZ3IxMlZ3MnJYSFNpTXJzU09ncEFBQUlBQkpSRUZVZHhZemNzUkZsdUp4aHNYWkNiM0hzRzkzTGdYNUJheGUramVlWExHZGZXdm5JZ01Ubm55WC9ydTJVYkJsQ3pORzlXUDN3bzk0Wk1TSkMwUXFkNnhnOEwxL2IvSDd1Tm12TVcxRTFvVVBwaGhia2c5WTBub3hZb1IvN1lZYkdUVTU5cFNQek92Vjh6cnRGRVZwZXRGUGVxS2VBVU52b25lQzk2OFJJMjRrSlQzbDlBWlA5akZFZU9FVFVGQzBaZ2FQdkpFVTJYKzltMG5ycktkOHkwSW1MUGlDL0kzdjBUWEJ3UG9uNzJSK1JSTVVxZVVUKzBXTkpoTldxN1dWUHNnWGRLUnNWaXNtaytHQ3RiZDE2OGRmTlFNMTEwbk1VQkdhdHhia1cvTUJtK3hQYUdzQ3R3QlZlQ0E2bXBiV2FaK2lLSnQ4c1F2ZS8vQkQvbDFuNXNXYmV4RjVCcy83NkEvZjhJbW5MY1BUREJjVnJsbGkyMUpjWEJMeWxjM092b3pkMi82RFZRRndzbVhqZG5KeWVnWW1sU0VobFJHM1RtRHhNdzlUc1c4L0RwOEQyV3ExazU3ZG40blRadkhRK0w3czJYZmdwRzJiczRlemZ0MTdyR3UyM1RXNDZ5bjdyZFhwVUtxcmZIMDhmVm4yeEJUbUxzMC9yV096K3c2azZzQlhKR1gySmpjM2w5emNYTko4UVlYczNKNFViUEdta3RRVWJtRlhWVk5IWXMxR1NrdThrY0VkMjNZRW5xMDZ2Uys5bGM5WUdZZ2FLdFRVV0lFRUJ2UlA1bUNGTTlCT2RrYm5Wb0gyOUZTYVRBWm0yQ20xeGdhdWw1bWVodEVnVTFGYVNrTFhYblJOTUlCaVkrMjZndE8rYkU1MkwvYnRDYVdLejg2K2pPMWJ0bmxYZzNPVWtiLzk0UG4zZCszWlEwNTJ6Z1Y1UDl4dTkrWVJJMFljQ3dJMkZ5MFRjNE55MTZTUVpOeGczNXBHbzBhcjFhSldxOVYrVVBORlIyVWhTUXJOelZHN3ZXR3R3UkExbUlZalBGN3dIVlpkQkFQbjd2ZStBUEZwZkhMdjFRRE1YdndxNzFjNHFYTzZ1WEhPUzJUMnVKelhidlJxQm05L3ZwOSt2WHBoa2k4cVhDTnorQVR5WHI2SnRLNXZrVFgwUHRZK05abVVRUk9ac3Z4OWNuS3VJa1ZucGNyWW40M2p2R2JYWnl0bU0vR1pqOG5zbWtKeDRXNG1QZktTMTNUQnpVUERlN0JMU1NmSjZLU3d4TTN5OVlOUHJtOW85U1FsbjkzTEs2Y1BaR3J2WjhuSnVneWpJWlZsQmUvUTlUUXV0V1BUVyt4Tzc4d2o0MDdOTUcvTUdzSGlTUjh4c0dkM3VtYW1VMVZ5a0s2ai9zYXJNMGR4MXlOL1orWGczekZnNjRzNDNZTGtJRk4wM01TN0dUcStINXV5T21NeFJ5RGpXL3RCbmNTaTVmOWd6TGlyV05ZMUU2V3FqRUZUbjJmbW1ONDhOUDhWeG82OG5aemx5VmkwRGc2V0NaWnQzVXJPV1ZIZzZabjM2a3VNSG5NRGE1L3FpczVaU2FtdEhmazdWNUUxZER6bUo2NG5iL0NuNk94VldCTFNUdnVxNllOR1lwaDJHd2NkaitGZit5ZHIxQlNHTGIyR25MeHJpWlZkS09ZbW1wK1haOS9CeS9uRkZPK3JRRmR5RTZzZTB6Tmo0WHNNeXpLZS9ZUzFIMkRqTGlQTGw2VmZrUGZqMEtHeVQxb3hRVjBuTUVPRkpNbEIwZEFtVGMydnJXbTFXcVJ1M2JyUjBOQkFRME1EalkwT3FiSFJpY3Zsa2hSRmtSVkZrWVVRYWtEN2YvLzNtUEhoaHgvZUJyVC9KWU5NWldVbFRxZUw1T1F6cXhUYnMyY3ZuVHRmZ3ZZYzE0cldWSlZqZFd0SnNZUytYVTY3bGZMS2Frd0pTWmowMmhiblZOdGxVcEl0cUg4bEh3bTN3MFo1UlJXeGxpUU1PbTN3RHNyS3FraElTVWJiN0Y1dFZlWFlNR0l4dDJJQktFN0tTOHZSbVMzRUdrSWR1dFVWcFRqUVk3R1l6NEdCcDFCUlZncTZXQ3pCYVRtS2s5S1Njb3lXWkV6Nk0wdkpXVDdySm5hblBjd1Q0M3VIdEZOWlhvYk9sSFJhdE80L1JiWXZtY2FUcFRtc25uUCtYVVpDaUxLYmJocjU1M2ZmZmRkT0UwV1JEYkJKa21USHk4UG1sQ1RKTGN1eUlzdXlvdEZvUkVTRWxvZ0luWWlNakNReU1wS29xQ2dNQmdOR281SFkyRFpJUFhyMHdHNjMwOURRZ01QaGtCb2JHM0c1WEZJempqWU5vR3RzZER5aTBXaW1ob0V0TEdFNWY2SllpMW02cVlUeG93YitUOW92V1BVcTZVUEdrV0k0LzE5TnE5WDZVa3lNNlFPZ2dWRHV0WHBKa2hvQWh5UkpMa21Tdk54cmFyWHdBbHNFT3AwWDJQUjZQVkZSVVVSSFJ4TVRFME5jWEp6WEZQV2JveXFWU3FoVUtzbmo4UWhabHZCNFJIQ0psZnZRb1VOcjB0TFNwb2FuWGxoK1BWTEQ4b1hMcUc3Rmoyako3TXVvQVJkK3pWYlptTWI0VVduL3N5Y3ljTlQ0QzliVzVzMWJkalh6clozUXZ5YkxrdkNibno2c0NqSkIxV2kxR2lJaUlvaU0xUG1CVFVXUXI4MFhIWlh4eGtZRDBWRWxQZjJTL1c2M2E3VXN5eVBETDBSWWZoMWk0dFpKazhPUDRYOGdqWTJONjBhTUdGRkZxRi9OQmJna1NRcXdlUkNvRFExbDhRakdMcjl2VGFlTElESlNqNnpSYUFJSEJLZCtCQmZHK3dJSkhyeVZDRytIaHlRc1lRbkxUNVdpb3FKUFd0SFdnb01HbnRZb2lwcW5lR2cwR2pRYUxWcHRCRHFkRHIwK0FHeWFRTGpVcitLcFZMSm96dllCZU16bStBSWh4Q2ZoWVFsTFdNSnl0dUx4ZUhiMDdIblo5eWZSMWxxd2VhaFVUV2FvRjZ2VXFOV2FGdHFhd1JDRldxdlZvTkY0YlZTWHk0dUFicmNiYjBXQ2dxSW9BWEFUUW5nQWQzMTkvYi9kaW5KbHJVdW1YUnRENjVFNWp3QlZzeUozajR2eTR6WWlvZ3pFUllZcHRuL09zcnRnTlRzT1ZJSXVpWEhqaDZNUFA1S3duRU01ZEtqc1B5ZlIxdnlNdVVwb3Nic3F4QVQxNDViZnQ2YlRlUU1KMGRIUnFMVmFMUnFORnJYYTJVb1F3ZDFpb1JmQWs5SWw4KzFMSDV3N01USENrMW51aXVUcGNkZlRKeUVTTDIzUk90Nzlyb3BLeGNTV3Y5MkN2eVQzeUtGdkdiOXNHM0dXZUk1WEhxVnpyenorT2FnTGNuaU1XNVh5SFRCbkN5eWE4YjlwWDZ2VFk1QXJtZnJRRzR3SUExdFl6cUVvaXJLdlg3KytlMXJYMXBxVzFzTy9ZSXNrQ1ZtV1dna2ErRTFRdjdZV2ljRVFoZEVZZ3h3UkVZRlhhL09hcEUzZ0p2dTBOam1Rck9zSHR1UGxoOXo1RDl6MDV1b0hiK2VoakFqbTVIL3Q2N0tYdHVpOWU2NmgrUnJqYjJ6OWxPNTVWN1BzOThONGQ5SzFmTHA1TzE4MVhDUUQ2ZnZYV2dWbEZhSDc3RFZRWEVySVN1ZUtBclp5MkxvTDNHN09hUFZ2QmU5VUtTa0d1ek8wQTdicWx1MmZTREx5aGpCMjlGQk9GUEYzTzZ3VUY1ZGdkN2JzWEUxbEdTV2w1YlRZcFRncEt5bW12TW9hZnJzdllxbXNyTnhZVm5ZNEdOU2NCTllMRFNtaFVrSzF0ZUNnZ2Q4RWJkTFdvcUs4MmxxYk5pYmtpQWdkV20yRXp3SFhsTUdyVXFtRnZ5SWhLSWpnYXd6Mzh1WExWd0xmcGNURzRHZ01wUzJLaTJ5WlFHalFhbEg1bDdPWEFMVVdnK3JpR01qK0ZwajJFT1FOZ3VHRFlJR3ZPRzN4RE9qWkg2Wk1nS3plVUZUdC9mMmhNVEJ1TnBSc2dTRkRZUEFZOE8waTF3eTdmUnlFZTFaQXo3Rk43ZVF2Z0FGallIQXVqQmtMMlNPOHY4OFlDVU5Hd3NneE1DZ2JKaS84aVdicTJtZm8zTGtYVTZiY1E5Zk9QVmk1bzlTM3g4bVRFNitoNzlBN21EcjU5L1RNSG81L2o3MXNCMzB6TG1YODVEOHhmdVMxakptNU5QeUdYNFFpaENpZU5ldlJMMDloaHJZb2VQZVZUWW5nOUE0dnNFVVFFYUh6SmVrYWlJbUpJVFkyRm5Wa3BJNkdCcTg2NTNScWZMNDJkZk1JYWJCSjZnRThkOTg5MFhyYjZCR3Z2L3pwZDdOSFh6djhsRGQweDNYWDhNRHJteGhmdkpmcVl6WGNPZnBhTHJsWWNsM2RFdFd4Z2owK1ptYUhBNHJYdzJOYm9YQVhtTlN3ZGk0ODlCU3NmUXllWEFrSDE4Q0lGWkMvNHN5YTJya05kdTZHRExPM25jQ0hKUk5XellHYUhaQTZFWjZaQkdlVnY2NVVNbTNTLytPeHRkOXdhN2FaZmF0bU0yRGFZNHpZdmhodHpXNFdyTEt5cGVwelVtVlFuTTZBdHJwanpWSzBBLzlFL3NKN3ZSRG9kSWJmOG90UWpoNDkrdDZMTDc3WTJKcTJKa21TM3d6MTBFVC9MVUlqb2NHZ3BpVWlRa3RrcEM2Z3JabE1Kc3ptZU9USVNEMDZuWTRtWDV1R1prbTd3ZWtmSWFrZmsyYiszNy9kNlZjVW53NXQwWmJQdnFCU1orR2VxN0s1NS9KMnZKRy9rd0EvNWE5ZFpNR3RRWnFWVGdmYnRvQWVtRGNUWnN5QWpidGhUK0ZQYjZyblVDK28rZHZ4UzU2dk9zZVVBcnBxYjNyMzJUbi9DaW0wWnpBZzI5dEl4c0JCcUFzL3AxUUJqT24wVDY5a3pMRGJtZnZNSW5hWDFRVEFNN04zZnc2c2VaenhrMmV3WlBrNmJJbzYvSlpmZk5yYTkwODg4Y1FYelVBdFdHTnJrZUxSSE5SYSt0WjB2a2lvSVZCMVlMRWtJa2RGNmRIcEl2SDYyclQ0bzZTaHFSOHFFUVJxQ3Q0SXFmdVYrYzhjLy91QWprdFBIUUJvWk9XbjMzTGJ0VmZTSjlYQzlmMzYwczFWd3FhUytvc0UyTUJvYU9rTFMra0pJMFo0dDNIVFlOVVRaK2F6VTl3dDl4bFBVUHNjWU1vNW45RWFPWmFsMi9jeWYvb3R5Qlc3R056N2NyYVdlVFV6THhYVFI0ekk2OHpXcFg4amIvUk1sUEM3ZnJGcGEydi8rYytuSE0xTVVMKzIxdW9TZThFWUZGeGg0TlhXV3ZyV3pHWXphclVhMldBd29OZEhobWh0VFVtNzZ0YTQybnpnSm5ra1NYS3ZXYm5pVFNIRS9wUGZrZ3BEaElvZnFtcTlMNlNqbGtQMUVnYmR4ZnZWN2o4QURoUkMxeHpJemZWdUtVRjE4SG9qV0N0RGd3b0FDVVlvOVRIeWJQdnNQSGZTWU1ic0xxZWtPcWdYU1psazZmZXhaVmNWQVBzSzhuRm5YZTdsSkhQYXNMcjE5QjQ0akJuekZqSWkzVUZSaVZjM1BERVZVMWd1RW0zdG05bXpaKzlzQmRTY1FmNjFWbEk4WkVKTHAwSzFOYjArc3BtMjVtVStVVWRIRzZtcnE2TyszbzdEMFVCall5Tk9weGFOeG9YTDVVS3RWZ3UzMnkxNVBCNmhlTU56UWdnVUVJb1FlQ1pNdUxQMmhUckxhenVtWERjUFRreGJOUG42SzdsNzFYdDhzVE9lbXFvcWtyTDZNRFJvN1lTTFRkS0d3c3l0a0pNRm1lbmVLT2JRaDJEdU9COSs1SHI1a2JPeXdKQUVHemRDTERCaEl0dzFDQloyQmJNQk9KL1VkdXBVWnM4YXlxMDl1NkEzcGJGaSs0ZGtHaXc4dGVDdmpCclpoK1daYWV6WlY4NkM1ZTk3MlYxckN1bWZlenZtakN6a21oSnFFc1l3TDlmTC9YdGlLcWF3WEF6eTQ0OC9ybjMrK1VXbjhxMkZKT1FHMFJLSmxxQVdFV0QxaUk0MjBxWk5HK0xqNDlINS9DL1NhNis5U21scEtSVVZSemgycklxYW1scnE2cXpZYlBXbnkvcWh2ZTY2SWZwMTY5YXRraVNwOTBudnp1T2l2TGFlaU1pby8xbUM3cytOM2NOaGc0cHFzRmhBZDVxWHJxNEVSUWRtNC85dW9yb2ROc29xcWtoSVRrRWZuS0d0T0ttb0tNZXROcEdjRUVweGZUSXFwckQ4ZWtWUmxKMlptZDJmMnI5L3Z3TXZpMGU5YjdNQmRoK0xoL04wV0R3TUJpK1FtVXd4eE1XWnNWZ1NTVWxKNFpKTExxRkhqeDdvOWQ3UHBicE5temJVMU5SUVYyZkRicStub2NGQlkyTUVXcTBUbDhzYklWV3JWY0x0OXJOK3lIZzhua0N5THVEWnNHR2owMnExdmhvVEUzTnlZRk5wU0lvMWhVYzZTSFFHU0QxRHJTczI0WC9mYjdYT1FHcHJIWmUxV0pKU1d6MUhxemVTbW1vTUQvcEZKc1hGeGUvdjM3L2Z6YWtqb1FwTnE3djd0TFhtdnJVSUg0T0hWMXN6R3IzYVdrSkNRZ0RVQUdTejJZekpaQ0k2Mm9CZUgwVmtwSTZJaUFpZnI2MTFmMXRRMUNLdytJTEoxT1k5UlZIV2g0Y3hMR0VKaTE5Y0x0ZUhsMXpTZVg4elFEdWxiNjAxdjVwR293M1FFdW4xVVVSSEczenBIZWFBYnkwQWJBa0ppY1RHeG1JMHhtQXdST0ZOLzRpZ3FTSkI3VXNCVVlrZ0N2R1FFaXU4aXk2NEtpc3JYdzBQWlZqQ0VoYS9mUG5sbDVzSVRjWU5BSnRQVzNPZlhGdlROS3NIYlNwME54cTl5YmdKQ1lsRVJVV0ZBbHRTVWx2TVpqTnQycGlJam80bU5QMGpJa2hyMHpTUGtyYlEydHEyVGRydWNybVdoSWN6TEdFSlMzMTkvZklycnNnOTFBelVHaytrcmZtWDFHdGVOdVduSkRwUmVrZFNVdHVXSHBISXlFZ3NGZ3R4Y1hIRXhNVGdUZi93SnUxR1JHaDlLU0FCY3pTNHpFbzBxeUYxUzVMazJydDM3MUxnOEs5dGtESXp1NFZwd2NNU2x0TVVJY1RoTld2V2JHMU5VMnVtcllYa3JiVVdDZlZYR1BpNTFwcW5kMFJHUnJZRU5vQ2twQ1RpNCtOcDA2WU5ScU9ScUtnbzlQcElJaUw4NEtZNWJWL2JaWmRsZjJlMzIxOElEMjFZd25MeFNtVmw1Y3F4WTI4LzNreFRPNkcyZGlMZm10Y0UxUklSNGMxWkN3NFl4TWZIazVTVTFHcjczblhJdFZvc0ZxOUo2ZzBrUktQWDZ3T0JCSzAySWxoekU0b1FPTjBlNGZZb1FoRk5yQjkrZE83YUkzdnBzL21GbTBNNEhOd08zdnBvQjlOWGJPTHgvTjBjYVJUaDBROUxXSDZGNG5hN1A4N0p5Zm44TkxTMWtLWDEvTlVGdmxRUFh5VlVSRkRBSUxnZTFJekYwdmFFVmxRZ0FhbDkrMlQ4Z1lTWUdDTUdnd0YvSFdtdzFxYlJ5RGpkb05ab1VLbFVJQVRDMXprL3VCMDZlTUM1WU1OL2x3UUQyN0wzMS9ONmlaTXhmYktJc3g1aXdxclB3aVUxWVFuTHIxQUtDd3ZmTHlzNzNMeTZvQkZvREFZMUg2QXB3VFdoVFZIUUptMHR0QjdVR0FnWXRHK2ZmTUkraEZRT0ppVzFKVDQrSHBPcERkSFJYcE0wTXRKcmtqWnBiVHJNYmFLRklUS0NDSzFHcUZTeThHSmJ3RmIyU0JLdWcwL2Q5N0hMNmZ5WDk4cU41Tzg5d2wzWDVwSFR3Y0xFRy9yZytxYUlyeHZDa3lBc1lmazFpZFZxZmJWWHI1d1NIM2dGZzFwd3dYdHp2aldmdHFacVJWdlRoVlFZbUV4K0U3VHRTZnNSQW15SmlZbFlMQmJNNWpoTXBoaWZTZW9GTjUydXlSejFSVW1GV3ExR0JOR0xOR2x0a2h0d2Jpc29lRVVJOFNWNGNDc0NsY3JYbkt4Q0pXd1VWN3ZDTXlFc1lmbVZpS0lvWHozLy9LTG1BWU9BYjAyU0pDZXQrOVo4SnFoR05HbHJUV1ZUM3B5MWFFeW1HTXhtYjhBZ01USHg5SUVOb0YyN2RpUWtKUGh5MjR3WURGR0JJbmsvQTRnL2tBQUtpcEJRYTlRQklrcEpDakJndXNkZE43VGkrUEhqTDRDZVBwMWlXYlc5a0tNMk94OTgvQ1UvQ0ltR1JuZDROb1FsTEw4UytmYmJiMWZQbURIRDFncW8rVFUyUDZnRnAzaTBXSEdxaWJuRFgrUWU1VnZoUFphRWhBVGF0VHQxT1dRTFlJdUppU0VwS1Ftek9kNlgyOVpra2dhRG15eEJuY01qZEhvOUdwV3ExYVJkSk1rVkYyZmU0SEs1WHJ6N3hpRjA1d2lUWHQvQXAwb2lBMkpWNkhWaFRxNndoT1hYSURhYjdZMnVYUy85SnNnRWJXeW1yYldhak5zVU1OQ0k1cUFXV3VUdUpaQk1Ta29pSmlibWxQMXBGVm5hdDI5UGRYVTFWcXVWK3ZwNlh5RjhJMDZuRTZmVGlhT2huaU8yUm93bUUycVBrOFpHQlVWUkVFSUlSVkVVRUI0aGtDU1FrU1RWSjU5ODh2SlZWMTNWYTlwTnY4a0djTmVWYy9XMmFQNFVIMTZwS2l4aCtSV1lvTHRmZmZXMXphMzQxWUpCellVMzE5VWpTWkxTUEJtM3lhOFdXalpsTUVTSEZMeTNiOS8rdFByVUtyQnBOQnFTazVPcHJhM0ZacXZEYnJmamNEaThsRWFPQnI0K1ZvY3FNZ3BKdUdod0s4SXRKRW10VWdraEZEd2U4TklhU1lvQU53TFgxVmNQTE52ejVhNUZYM3FpRmlkcEZkNzUrSE95Y252VE1ZeHJZUW5MTDE2KytlYWIxUTg4OElEMUpDWm9pMlJjMzZwVExkSTd2SDYxbGxIUXhNUUVrcE9UMFdoT0R6Uk95S2Rxc1ZpYUplNUcrMnBKSTRtUGk4T2tqd0NWQ2ttbFFwSzlxQ3ZMS2lGSkNDUkpTSkt2WWwvQ0pVbVNNL095N0UybEpTWFByaTg2VE0vZWZYbDZjT2Z3akFoTFdIN2hVbHRidXlRam85dUJrMmhyZm1Eeis5WjhBWU1BcUlVdzRucWpvUDVhME9pUVJOem1oZTVuckxINUpTVWxKWWpTeU82ak5Hb2tQVm54Y2JiWnFLKzMwOURRSUJvYkd5V1B4NE5hcmNiajhRaWZCQlpabGlUSm1WaFQrdEtNMy8rK215ekxnOEpUSWl4aCtXV0wyKzNlOHVpanN6OXVCbW9PbW5MV1RoUUZEVFpCaFplMUk1ZzhVdTh6UVUwK0U5UkNTa3JLR2ZYdHBBejRVVkZSSkNjbms1aVk0RXZjamNGZ0NDNlVid29tK0d1N1ZMNUFnbitwUG9JcUV1NjY2KzdqaHc0ZGVnRW9EMCtMc0lUbEZ5MC9mdnJwcCs4OSsreXpEYTJZb0k1bUptaWd3aUEwWUtBV3dacWF2OERkWUlnT0xLUG5OMEdiczNmOEpJME52SUdFMnRyYWdOWVc4TFU1dmRUaGJyY2J0OXVOeCtOQlVacUNDRUlJZk9BbUNTSGNnQ1JKa3B5YTJ2RnpxN1YyUVhSMDlOenczQWhMV0g2WmN2anc0V1Y5Ky9Zcjg0RlhNS0ExTjBIZFFSVUdvbWxSbHRCZ2diL0FQU3JLNEV2dGFFTjh2RGUxNDNRREJtY0ViQUFkT25Ud1JVaHRORFEwME5qb3dPbDA0bkk1ZzRETmpjZmpFUjZQUndvR09KL1dKdmxNVXBja1NTcWpNZWJmalkyT05LMVdlMWQ0aW9RbExMOHNzZGxzYnlRbnQ5OUZhR3BIY3hQVVJXalpWQXNUdElsakxiakFQWlNPcUVPSERtZlZ4OU5hakMwNk9wcjI3ZHNIMFJzRk0rNzZxeEw4eEpTYVU1bWtUcUR4d3cvemx5aUtVaENlSm1FSnl5OUgzRzczUjRzV0xTcWc5UWhvUUdNN21RbnFCeld0TnFKWmRZR0JtQmhUZ0k2b2ZmdjJSRWRIbjFVL1R6dER0bjM3OWxpdDNrVmVRclUydjBucXdlUHg0UEVvSnpKSkVVSklQdFhVT1d6WXNQTHZ2eTkrdmtPSDFBNlNSS2Z3bEFsTFdIN2VJb1FvM3JGang5by8vZW1odWxaTVVBY3RBd2FlRTV1Z1hrMU5wNHYwc1hiNE9kYThCZTdKeWNsblpZS2VrY2JtbDQ0ZE85S3VuVGNGSkZLdkIwMGsrcWlvSUdMS0NMUWFEWklzQzFubFgwaytoRzAzRUVpUUpNblpzV1BhenBxYTQ4L1Jjdm5NaTBhc3BYdFl2MjNQdWJuTzluMFhwTS9iMXErZ3pQcHpmNjZ3ZnR1RmFzMU93Zm90T0g4aGM2VzVmTFpwTlFlclQva0t1b3UvL3UveWZ2MzZselhUMWxvelFmMkp1TDdxQXE4SnF0SDR0YlZRdjVxL1pLcE5tMWppNCtOcDF5NkpqaDA3L3FSN09pTmcwK3YxZEdodjVxMVBDbm45NnpJK0tTbG4wM2VWTktpOU5ySWtQSlJVMTNITTdzUnFkd2k3UzBGV3FZVXNTMEtTVUJUaFhZdFVDT0VXQXBja1NZMnhzWEh2TlRRMFBQVkxBYUluSm85a1c5bTVJMXlxTE16bm1aVmJmdkoxeWo5YnhTTUwxMTZRZTFydzBPL1o4VE9QYTFjV3dqTXJXM2xPTytEZWVlZTJyZDByNS9Ga3dVRzB2NUM1MGx4ZW5uTS8yNHB0SnozbTJMSHFGOU43OU4wVHBLazVnamRKa2hxRFFhM0pCSldFU3FVV1hsRFRpaFBWZ1hyejFjeTBiWnRFaHc0ZFFsYWNPdS9BQnRDMlhYc20vbTRNODM4L2dnZHVHRVMvOWtiMjF6aUppb3JDRUIzRHBSM2FrWjZVUUx1RU5raEN3WVdNTEt1RUlvUUFTY2l5djFCZStCa0FHbk56YzVlNFhLN1hmZ0grQlFxM2ZVaFpqVGRvRWlyZUNhdzRiQlFYbCtJTW1zLzJtaXFLaTB1d3UwTW51YUlvcEE2WnpNYjVrMXU5bHNOV1JVbFoxWm4xMFc2bHBMU2lCZGVkdzFaRFNYRXhOb2Y3RE83SnUzNW9jVWtwZG1mTEY3U21zb3lLNnBZdmhLMnF2TlYrSzA0N0pjWEZWRm50NTNXY0ZBVlNoOERHK1MxL3Q1WEQxbDNnZG52L0R0bnZnSklTc0xlaWVpbDQ3WXFTNHViNzdUejV4QnRNbWpUMmx6VlhGQ2RsSlNYWVdoblg1dU5rdDl2LzNhTkhqK0I4dFJZbUtDMVRPM3hyR0toRU1NZGE4MkNCbnppeUtWK3RQVzNidHYzSmMrQXNxdEFqdUs1dlQ3NzZTc1p1YnlERmtzQ250ZFVZREJHNFhHNGtXY2FHZ3NmalFhMVJDNkZTUzJvWkhJMU9aRmtTRWlLUUFpSzhLU0JTWWVIWGNrRkJ3WXVEQmcxS1VLbFUxLzBjUWExdzNUTk1lK1pkQ2cvYTJYM1hkU3d4cUJrMjlaOU1IWllGd0t2VGIyUjFUVWNxUDlzTWVoM3F6SnZadG1RR1Q5dzdpR1c3UGFRbDZOaXpyNXpacjc3TjJMN3BnSU5aNDRhVFgvZ050cXo3MkxOc1JxQ3RSVk4vdzRvRGNhamR4Nms2V0VqSzZNZFpPMi84S2Z0WVhiaUdBWU0rUUVjMUZmbzhDdFkvVDRJV1ZzNFp5NnpWMzlNNTFjekJ3aUxHUC9FR0Q0M0tPZVU5clZ2d0lGT2Uya1JHVm1mS0R4UXpkKzBYREVuMzZpWExabzluc2ZVSSszYnVZdXJMLzJINnNFeHdWek5yL00yc0xGSkkwZHVwTnZSbTNlcC9ZZEZCeGU0MURCNzFKMUl5czdCVkhpUjcvTk04TlhIZ2VSbXJXZU1ndnhCc1diQm5XZFB2RDQyQmJVVlFVZ0ZEaGdDeHNISWx4QUk3VnNMNEdaQ2VDUWVLWU81eUdKWGpQUzkvQWN6WkJycURZTlZDalFtS2ZBdE5Pb3JXVTJEUFlVbWE3aGN6VjVTYWc0d2MvQnNxREYyUjdRMDRLcDNrK3ZZMUg2ZWV0LzhqUDgzMXpZZUhEeDl1TFZldE5STlVDYTRGOWE4SnF0Rm9SZE1xVTVHQk90Q1lHQk94c1hFa0ppYVNuTnllVHAzT2tidGRDT1dzdHVQSHEvbDQ4d2YwdjJVODE5My9aKzY3N3o1R2ovNHQxMTU3TFZkY2NRV2RMMGxETnNRUmIybExiR3diU1ZLcEpKVldLMHV5ckpKa1dRTlNCSklVSlVtU1NaS2tSS0REdm4xN2h5dUs1MU52d2NMNTJZNGNxUkNIRGgwNjYvTnY2eEVsM3RydmJQSDdLMys4WHNUM0dpVitySGNMSVJUUjBHZ1hRaWlpdHJZbWNNejNHNTRRSGE2ZEduTGUvcmRtaVc2M3pRMzU3ZmtIcnhHWDN6WlhlSVFpWEljTFJMdTRLOFFQbnBQM2EvOWJzNFNtWFQ5eHFFRVJRampFSDMvVFVmenA5YzlhOUtGdS95b1IzK1ZtVVgrS2U2cjlhcFdJYTNlRjJIL000ZjJ0c1VZY3IvUGUyeTNkVk9LUEwyNFhRaWhpNzc5bmlrNDN6QkJDS0dMemM1TkVqNXNmRVkxQ0VVSzR4ZE4zWHluKzhPSTIzL081VHR6eGo3V0I2emMyT2s3K3JCdjNpVDV0RTBWaVl1aDI5ZjN6VDJ1YzlyK2xpRzYzdGZ6OTIzY1UwZTJXME44OFJ4WFJLVkVSbnh6Mi92M2p4NHBvMzA4Ukx0LytENTlUUkdRN1Jldzk2djI3b2FIcDNDOWVteUc2Lys2eFg5UmNlZmZ4c2FMZmZkN24ySGhraCtnVXFSS3ZmRjdkWXB6Y2J0Zk85OTViK3dEd1cyQTRNQmpvQzJRRFhZRU9raVFsK3Q3aEtGbVdJMVFxbFVhdFZxc2lJaUprZzhFZ3hjYkdTbTNidGlVdHJTT1ptZDI0NG9vcnVQYmFheGs5K3JmY2Q5OTkvTzF2ZitPVlYxN200NCszY3Z4NDlWbmpVZlB0ckhtRFRNWW90dXd0SnJKYkg0YkZleWd2Sy9ORlNOMDBOdFJ6eU9yQ2toaUh4dDJJUTNpRUpNbVNKS3VFMS95V0ZDRjVrTHhxcXdUSWtpUkpHUm5kdmk0ck83UXdLU2twVnBLazlGOWFJR0R3eUZ1eDZMM1d2VTdyL1lKWEZHNWk4ak92Y0tDc0dzVlJSYVdjZDFyWDZwMlhpd3pJU2NtWW5kVlluWUR1NU9lazVWNU5zZzVBUy8rQmVTemN1UnZHNW1BcjNjbU1lZjlpOThFS0ZMZU5tbW9qVnVCa1hveGRPd3BJSFhRelhXTjluaU90RVpPMlNkSHZuZWRWWjVKU1VyQlZmUTdBMXEyYjBkcHptRFhqWVFCS1MreFU2QXFCUExMNzltUEc1RDl4YjhWbjVQWHR6NmhoZ3pqcG1sL2FybXd2Ly9HQ2pGdkpkaWhYdzVyNXNOWnJwV0hkNHkyUDhSZnk5QndLR1didi8zVkI0MUJaZlJTak1ma1hOVmQyN2Z5Yy9pT25leDl6UWc1OU00eUJmVTNqOU9sM1NXMlQzbnAwK3YxSG1nVUtnaU9nSi9DcnlhSnBCWGQvc0tBcEFtb3dHSHhyZ3JZaEljRmJCNXFhbW9ySlpEcG5ZM3FXd09aaHhYc2IyQk9md3hQWEdQaitteUtjUGxvamg3Mk9UNDdXMFM0NW1XakZRWDI5MXo4Z3ExUklzcG9JTGNMamNlTlVFRWlTZ2k5eDF3OXd5Y250UDY2cU92cGNYRnpjVENEK2x3UnNPcU9obWJPcGtGR2ovc3BqNno5Z1dIWUs5bDFMc1V6NDhQUUdSZzRhR3ZuTUhkQ0szNE9xVkRGaCtHME1XL1FoOHdkbm9xN2NnaVh6cno4NURDMEg5OC9uckZLQXJOeHJHVEhZOTAwYWNTUEdoRlFBc2tiTVlGL09jUEkzRmJCMDNuMHMzZkpIOHArNTk4UU5PQTh5SXUrM2xEVHJhTmRoRDdEaXNRbm5mT3lNeVRCeVJOUGZJOGRBUXZCK1krdm5tWTNSMk96V1g5WmNrZVhXM0hUQjQxUzE3UFYvdi9IZzlQdS9KN1N3M2RHS1h5MUE5UjIwMkxId3J3bmFNZ0pxOEFVTHZQeHFiZHQ2azNDVGs1UFA2WGllQmJBSjN2L3dRLzVkWjJicDczcGhrQVdlaGdZY0RnY09XdzNyZGh3ak9TMmRSQnhZcmJWNHpGTmlBQUFnQUVsRVFWU0JVcXVveUFoUjV4U1NUcTFHOGJnQlNaRWxDUUY0Q3hTOC9qWWhoR1EyeDYrdnFUbHVpSW1KK2V1cDlaUUxLd2FqbnFyS2F1aWFjT3FEcThzb1ZhZlF0MmNLTXJCK3pidTQwWiszdmhYdjJFeVpZemJKT2lmYkNyYVRNL1lQNEs2a3ROcEkvN3hNMU1DTzlldXBWRTU5VDltNUF5bVo4dytLcXFkNHRUYTNsUnFIQVpQaHhQR21BZjJ2NXFGdHhXVFBHdXZWeGhRN1ZUWGV4cXhXSzdISkdZeWVrRUZ1a3B1OEo0dE9malBhVkJhdmZZL212bTJ0NGFkOTFmVkdzRlo2dmR6K3laK2FCNFpTa0ZPaHQ0OUFvcXJxOUNaZTE1NDVsRCt6QVNlMDBFQi9ybk9sZDA0djVtM2JDcmRtNGF6Y3liWWlLd044KzZ4V3E2TkJpbm5sd1VmKzN6NmEwam9jUUVNSXFMVk03ZkJyYThIOGFxSzF5Z0wvS2xOdDIxcElTZWxBNTg3bm51bm56SUd0NFFpUEYzeUhWUmZCd0xuN0FWQkZXM2lxZHdxRmhWOXlTTkdpUG5LTWIreDF1QnZzdE5GSFl0YnBpRFhGVUgva21LaHY5RWpDSTRSS3JaWmsvTVNVSWZXa2toQkNOcG5hdkdXejFVVkZSVVU5OG5NQ3RnbVQvc0Q0Q1ZleDJHUmd6Q012OHRESW5pYytPR1VBVS9JZXBXL3VOYVFaRk13cDhZRUhYckZqQmFPbS93dDdWUWtsVlRKOSs3NVA1ckFIV1RSajFGbjN6V0wyTUhiUTFhaXBwdEk0bElMUjJhQlZtRDZoTThOeis5QXpXWStjMUI2TGZPcDdNbWFONE5VWkh6RTBwd2NaV1oycExDM2xzWldmTWpqOXhBYmtnSWx6R1ByWmI4bnNlU1VaS1NZT0hpaG04b0wzdVhlUWdiVlBqT2V4OVVmSlNJMWxYMkVSanl4OCs1UlRNeUhwekwvaUZUdGcxSFN3VjBGSkZmVHRDNW5EWUpIUDM1NlVDNE9BckN3d0pNSEdqUkJyaHVYellWeWVOM2hnTFFkdER1UXZPbzBQWGMraDVMa2ZaV3VaazBISjJsL0VYQmx5N3l4ZUhuUTl1UU0vUU8xMFliUTBxYVBMSHYzZGkvYy9zMkZYTTFCekJJR2J0eGEwbFdDQmY2RmpYd1JVdEJZQmpZa3hCZFl0YU44K2hmVDBUa2lTZE03ZlUwbUljNU5uYytUSUVmYnUzY3QzMzMzSG9VTmxIRGxTd2JGanh6aCt2SWE2dWpycTY3MUY5UFgxRFRoZFRzbnRMYUNYUEI2UEpJU1FmWnNhMEFCYUlZUU9pTFRiNisrSmpJejh3N202NGNyS1NweE9GOG5KN1M0WUdGYVZsZURXbTdIRUdzNTdXMjY3bGZJYUI4bEpDU0c1UERXVlpkZ3drSnh3WmhxUDIyR2p2TElhc3lVWnZmYjBzb1BzTlpWVVdkMVlrcExRQm4wNkhiWXF5cXRzV0pKU1R2dGFGMUlVTjVTVmdkRU1wak1ZcW0xTHBqSy9OSStWYzBiL2d1YUttL0xTY2t4QjQzcjgrUEVYWW1QanRqUXpQUnNBdSs5ZnI5WW1TVTdKbTJRZkFEWmZaWUUvVDAwMEFacUI2R2h2L1dkY1hCeUppUmJhdDArbVU2ZE9kT3ZXN1pTTHNweXRxR2JQZnZUY21HZ0dBNUlrMGRqb0xZNTN1ZnlGOFFxSzR2R1hXUGxEc1Q1UUZVMi9CZHU2WHMwTmdLKysrbXJQeUpFalVhdlZ2YzlGUCt2cjYvRjRGSXduY3BxY0I5RWJUUmdpdFJla0xWa1RRVXgwRk0yL2dib29JOGFvTTdmcVpiV1dtSmdZTktyVC82cHFkRkhFeEVTamFvWmRhcTJlTmliVEdWM3JRb29rUTR3SmRHYzRWQ2xadldrOFhFYlhIbDFSL1dMbWlreDAwTGpXMXRhK1BHalF0WnQvL1BGSFZ5dkE1azNDOWZuVkpFbHlOVE0vQTZEbU56LzlDeHo3QXdWdDJyVHhyVm5RTm1CK25tdS8yamtJSHJRdXFhbXBPQndPbkU0dnJaSGI3UXBRR25rOGlnL2t2R0RXQkdwQ2VKTWxGY1ZYVjRvUXd1VjN1cTFiOTc3MCtPUHpsanp5eU1QcWlJaUllN2hvcFlibEM1ZFIzWXFDYmNuc3k2Z0JQUW5MLzBqVXNZd2ROK0lYTzFmcTZ1cGVlK0NCQnpaLzhjVVh6ZlBVbWtETkd3SDFhMm9lZk13ZC9naG84d1JjYndUVW42c1d1c0pVV2xwSFVsTlR6KytRbk9zTGR1blN4Y2ZaNWd5a2YvZ0w1UDJhbTI4VFFnaWYxa1pBbFZNVTRXY0NrZncrdHpsejV0VEV4NXVYM0gzMzNYSkVSTVRkRitmYlkrTFdTWlBESUJLV2N6cFg2dXJxWHYvclgyY1Z2UDc2c29ZZ1RhMGhlUE9ER2tHVkJiSXN0UllCRGZqVnZJU1JocUFhMElSQVdrZVhMbDNPLzdmbW5Ldnpra1NYTGwxb2JHejA4Ylc1L0Z4dEFjMnRLWkZPQklHYlFBaWgrSWhBUWt4VVNaSjQ0SUVweDdSYTdaSTc3cmlEaXhmY3doS1djeWQxZFhXdlAvYllZL25QUHZ0c1BhR0Jnb0EvelFkcUlmbHFYaE5VYmhFQjlTL0UwcHd3MHB1cjFwYlUxQTUwNmRMbHZBUUx6anV3QVVSR1J0SzVjK2NnV2lPdjF0YmthL09hcEQ2ejFBOXV3cWVsK1NPbHdlQW1TUkxTUGZmY2U3U3hzWEh4M1hmZnJlaDB1bnZDVXpNc1lUbHJVSHZ0cjMrZFZYQVNVR3VRcE5CVnBvS1h6Z3VPZ0RacGFrMEp1REV4eG9CZnpaK3Ixcmx6WnlJakl5L0kvWjJ6NEVGcjRLYlQ2UUxnNXZINHdTM0ExZWJYMnZ5YkQ4YkZpWFJCQWJCaHcwYVhKRWw3K3ZUSmRXczBtak1PS1B3dmdnZGhDY3ZQU1dwcmExK2VQSGx5d2VMRkw5cFBwS25SU21WQkU2akp3ci9BY1dnRU5LckZlZ1YrbjlxbGwxNksyV3krWVBkNEZqRjNENThXN21YTzZueit1TEtBVjc3OEljQkQxVmhmdy9LUFBtWEd2emZ4bDNlM1U2eEVjY2tsbDlDaFF3b0o1amdhRkluRDlZM1VDSzF2ZFhsOThPcnlRcVBSb0ZLcGhUK0QyUjkxb1luRHJSRndQUGJZWTdVMzN6enFCYnZkL3ZTRm5oUUg5K3lrMm5HdXJ1WmszNjdkMkU0NzQ2YWNrVG0vNGNCWkVIOVpLNG9wT2dQMmgyMnZQc0s5VDY3NTJiK2tJM09ncUpYbnNXOFhaL0JjVDBmY3pMdHJORnRLN0QvcHVaNUtLa3VMS0trOFM3STc5d0dHWk45TTJVa09PWDc4K0F2WFhETW9QOGluMWtKVG95VU5VWEJodTQrR0tOU25GaG1wOXlYZ2Vxc0s0dVBOV0N4dDZkQWhoVXN1dWVTOHBYV2NPMkJUNmxpenE1d3VxUjI0SWFNZG03ZmtNMnRyQ1FBL0ZKZndkYjNNMWQwN2t4MHJlT0NGVlJ3MnRDVTlQWjFvblliOURSTDFIc0VSUllQUmFNUmdhRVpTNlFNM3Rkb1BibDV5eW1ZRWxZMkFZOE9HRGZWUlVZYVhiRGJiNDc2QnVTQXllK3pWRkpTY0sxN01TaVlPdllraSsra0RZV2xKTWM2emVHRS9XL1U0MHhlc08rM2piVFZIcWFpeS9leUJiZnhVU0dobEZrOGN5aGs4MTlNWXFSMUxXVkdSUnY5VS9VOTZycWVTdGZQL3dMelZoV2Y5b1N3cExqMVJ1WnpqNk5Hano4WEd4bTBKaW42ZURxaDVKRW55K0lNRkxjM1BVTEpJZjFXQm40SW9QVDM5SnpIaFhqZ2ZtMnppOGZIWEJ2NXNZei9LZmJ0L2dQNnBkTzdlazhlNysvZWtzbXZ2ZnJaK1g4MUQyWjF3dVFZU2s5Q085emV1cDZEY2dja2srY3pTUU5vSFByOWF3TmZtZHVNckpjVVQ3SFB6cFlRQUVCMXRYSGI4ZUxYZFpESk40VHpXbHBidVhNZmlOWjlTV09IRS9zeWo3RGJMNUk2NG0yRTUzakxwZlZ0WHMyVDUrMWpsTm95NWR5cURzcnc1T29xOWdrWFB6R2RIMFdGaWt6c3k3dDVwWktjWTJaMi9qRlZidnFERVZzT2lPWC9Gb3BVWk91NFA1SFUrZFFMdDd2eWx6RisxbVlTTXE1ZytiVHdtTmJpdFpTeGU5REs3aTc1SDBjY3hlc0lVQm1lbmdMT2NwK1krejg0ZHV6aGdyV1Rtek8vUUpmZGk1cjBqQWk5RC9zckZyTnI0QlJqYU1tckNKQWIxOVBYZFdjMlN1WSt3N2VBeGhrMzRJNlA2K2twZjNGWldMSnpQcHAzZmt0RDVjcVpPbXhRbzZONjNiVFdMbHI2UERTMFpBMjVpMnEyRE9SK3B1UHUyd3ZKTjNobmNPK1Rad0tvdFVHS0RSWFBBb29XaDR5RFAxL1h0NjJEWkduQWJZT0kweVBGWHVUdmdtUVV3WkRBc1hnQjJBMHlmQmVtKzRYaDE4UXNNSC90QzA3MmM0cm5hcXc2d1lQNGk5cFRVa2pub3Qwd2ROeVJRY3JWajNXSmVYZjFmbkZvamVjTnY0NjZodlZHcTlqSG4vN2QzN3VGUmxIZjcvOHpzSVp2TlpyTXNJUWtoaVRGZ2lDSEVpQmdSSXlJaUlsSkVSS1NJaUpRaVdxcldvclZLS1M4dlB6elVJcVVVclZJOElaNFFFUkVwSXFVVUVSQVJNVWFNTWNRUVlnZ2hoR1d6MmV6T3p2UDdZL1l3dXptQWVLSytQdGMxMTU1blptZWV1ZWYrbnU3dndoZll0YldDdXJLL002dm1uNlFWWHNhTWNZTlB3TkpjTEYvNENCdEx2MkxJMkl1amtheWhnb1VMRjFOV2Zhd2hQam45cVNjZWZXQTMwYldmTFRIbVo3dWdwbXR3SEFWcWtVQkJBb21KMGFDbVZSWDArdlpraUw1ellJc1puOVkza0p0K1Z0c1AvTWVwT0tJeUtUVUpnTHk4UEJSRm9WdEtOK0piV2toT1J1ZHJDeTFoOEFxREcwQWcwQ200aVM1ZG5Lc09IYXByN3RhdDIyM2ZsU3FJUFNPUDRjTnRiSC94RVlwS0xtTkl0cG0wRE0xUFY3NWhFU1B1ZkkwRmkvNlhaRjhsTThaY3hkSnQ3MU9jWW1icGZUZXl6bmNGODJhT283NXlEdzBOYnNpeWs5NnJIOE10RnRZc2VaSGlJVmVRYjRPczVKTklvRldxV1BaeU9RL2Uva3RXekwrRHlYTXNySjQzSGw5OUpZMldiQ2JmTmdwZi9XNXVHMzBaUzNkK3lzQVVPNE9HWG9IczJrMWxiUitHRDc4QzJSYXBYWHh4OWczTTIyWm53Wnhic1hwcUtOMVhIZ2EyTFM4L3g4Z2xEekVoZXhzVHh0NU1jZlc3WkprVkhweHlCWnZOVnpEN3pqc29YZmtvSXlZM3N1dmwyVkMzbFJIai80Y0Z6LzZkYkx1UGJYczB3Y3ZPZ0czYnFzZlpzUGRRek0yeks3ZmRONE9VVG1ablNqWU1Id3BUUjhQWWV5RXQrTjMwWGpEY0FtdVdRUEVRZ3NjMWFGNHZnNmxQd01KSGdGb1lQd3cyN1lFc1N4RFk1c0c2N1RCMU10QUlqUzdBQWREQSt2V1YzRGV2VUhmbGRISmNQZFdNSFh3RitWTWY0dlpSYVN5Yit4dG1laXdzbWo2WXh0MHJHRDN6RlpZdmV3aUgyc0R1YXMyTWxhMHBEQjErQmQ3eURjaFpGekI4ZUJIVzVCTTNDVjQ1N3hjczNKdkJvdnQreWJwRjkxS2hvMnR6cHY2TStuTm5mWEg5OWJiblI0NjhKbFQ3R1p1bkZscGFPd0sxVUZWQlorYW5CbXBkU1V0TEpUTXprMTY5ZXBLWGwvZURNZmx2Qkd6Vit6L2hzVThDUERuajdGaDdsV2ZXYkNUdTdBRmMyU011L0c2ZlBuMUlUMDhub2JtWjFGUTZDaUlFdnkwRWhLT2xIWUliYUlDWW1wcTJmdi8rL2E2c3JNeGJaRmsrLzlzK1VJNjBYcFNrOVNMTlppUy8veUJLOGlLSGJ1bkN2ekJ4MXF1TUtNa0Qrak4xNkZPc1dMdUw0aWtEYVd4b3dKcVZRazV1QVVXRlJib0xNNStVYkR0MnM0VitKU1gwUDlrS0d0bkt6TGx6S000MlVqajN0NlNNZWc3WHZQSFlldzFpNXFROGR1N1pqVnROSVQvZHpjN2R0UXdja1VYL2toS2E5cVNUYk02bHBLUkVCNUxWTEZ5OGxRVjd2bVJZbGhrb1J2Y3BCU052Wk5xb0lVQXhBMmY5bWIyMWtHWFp5c0oxQ3Bzcjd5WGJEUDN1K3dOUDlQb1pwWjdaNUxzYmFGS3NwR1JrMFM4M25YNzlUL3gzTEE0bmFXbHRiaU1ZVDBEemtyT2dKQXRzeHJhQWw1SU5kalAwS3lIcXVDNTZCTzU2QWdZSDkydjAwN0I2Szl3K05QZ0ZEOXk3Q0lha3gyeXNxWkpLVndiWitpSmIyZGJoY1MxYit5eGxHZGV3Y3Zvb1pHRHV2YmVTZjgrTExKbytHRzlESTZyRlJscEdOZ1ZaL1FnZkltc3lKU1VsN0Z2dHBLbFhVZlI1NnRoaHdQSVZHNW01NmlBREM2d1V6NzJISmF2L0VQR25IV3I4b0xYVi9jcklrVGZ1cDIzdHA2NUVpbGFKamtITllEQUlrOG1JMld6U2dWcHNVWHVvWENvelhDNzFRNDVUQnJZalgxVnh5eXNmTWZlbTBlUW02R2VoWU1PbWpieDZQSm5sTnhaRzNhMGxTU0k3TzV2RTR5NHlNOUNab21xVU9ScGFqOGJnb0RQbUJoSWFlUlBpekRQUDNQYmhoN3ViK3ZidE85VmdNQXovdmc1aWRYVXRaWXQveDY1blEvL1d3dENoMnZQcGMvL09mYlArbDM2NTkyUEpLR0xSc3FjWWt2Y05va055Q3VsQmVtSkp5OERhVkU4ajBMVDFhWVpPZnBUaFk2NG14VzZtd2EzZzlaMGd5dUN1cFVaTkl5ZXIvUktlWkljelBFM01aZ1ZGQVc5ZERZM2VHdTRjZDAza2UwWG5vSHJCMkdza3o4N2F6YXhKVjFCZTQyWDQxUHQ1Zk03a1RuWFhiSTRVMHRKaXZpSGJ2NU04cE9wYVdEb0xWdW1JY1QvOWhoeVFtOTZ1WXhsRi9qcmIrUkpYNlhiR2pQNDAvRjV4M2tXb1FQclF5VHc0cG9LcEl5K2syaVV6K2Q1SG1ULzlWS2RxRTNYMUZqS1NOYitmTVMwTlozQS8vWDcveG9zbjNyN214aG0zSHRLWm4zcFFDeGUxUzdSUjZvZ0JOUk1tVTNzTldFS3kzbTFCN2Z2SVZmdldnZTM0a1lQOFl2bFdab3kvbWt2U29wMnA3NzczSC83eXVjelROMStNdlozQ09ZUFJnQ09ySnozUEZLaHFJSWF0aFlBczVHOExtNlFkZ1ZzSURVWElORDMzM0g2ZnJGcjE2cCt1dXVxcXcyYXorY1p2UGRvaXk2Z3hZdmxaV1JrVVRmOGI5NDVxYXdVN2NvcFpzdUlOUUdINXJKOHphOEZ5dGoxeFp5UjJJNnR0dFBjN0Q5N1VVMU9yVUpSanhGdFhnOGVaUVRMd3hMTEhHRFByS1I2YzNBL3dVYm5tejdFNzNtYS9zYVdUSWRkUldlMmpWOWJKMVNlYTB6Sncybko1ZXUxYllmTlBQNTFHelpqTHFCbHpjZFh0Wm5EaDVXeWVPcGxoblpRRVZ1N1p3dHB0QjJKV2swcnhpQ0hZdjRselRtN2IweUFySGNZc2h2RUZYek9VNXNnbXgxSkhUUVAwU3VHRXh6VXIvUXhTQnFTeWZ1VzhkclpoWThyc2hVeVp2WkQ2MGxVVURmdzlVNllPcDVkUlA3OU9OampsSUQzRlMwMkRCOUtzS0hWMU5LclE0dkc4OU5qU2Y3eDl4eDEvY0hVQ2FsNmRXYXFQZnJZQnRVaGhlN3hPcWNPdTYxV1FHaXhzejZGUG56NllUS1lmUEtqMDlZSE5mNXdaLzNnVFMwWnZHZy91NTdtRFlJaDNNS0VvaS8zbGU3ajFyYys1NGRMK3JQOUFpK3ljZGNhWkRFaFBSUFUwc2VLamFqNnBidUtJVDJWdk55ZjJ0RFBJVUtOOWJEcFFDejBYSWF2VDc5ZHkyYlJFWHdJUmJBc3pRaUdFRUdQR1hIc3dMeTl2d2Z2djc2eTMyV3gzOEMwbUl1Zm45Mkw1b2dWWVJoYlFxM0FnK1ZsT3B0NzVLNGJmOVV0eXpQOURybE5tNTZiMTVJeTZoNkg1ZGxZKy9pQmtEeVEzemN5dWZWWDA2bitUM25BaVAwZmg4UVZQVU44L2cvd0JROGc1a1o5TjliSmd6aXhTYmgvRml2bC9adGpFMzJFRHNyS3plWEh0OCt3cWtpbGI5d1RyeWhYMEtsZTV1WDNZdmVRbFhoeVFqQ010aCtFREM4Q1l4WjB6U3JocnlxMHNtUE1yck40YTlqWGFtRHF1NDE0RWNsb0pkdzcxTVhuNkhHWk5Id1dOTmF6ZFhzWGMyYmZqSzkvTW92WFZEQ2twd2xPOWxRWnpEdG5PenYvTzhDbXpHWDRLdXBHN3QwS2pGMXcrMkw0Skdxd3djSEJFRlRnL0J4NWZBUFg5SVg4QTVDVEQ3VE5oNmpTd3pkZUNDbHZXdytEYm9kOEpDWFFhdzRhbXNHMTdPWU5IUld1SHRYZGM4MGRPSW1mdXBkeTFJSThKUS9LcEw5OURxVHVOZTZhTW9HcnJhbGFWK3hqY0w1ZmEzYnVRczdKSjFzM092RjVuOCtDS2Y3QXF3MDF5Umg2RCtuWG1Ncll4Y2VKdzVzKytuNno3ZnM2YVJZOG94eFhseVV0emUvL25VTnNlQlhwQTgwcVMxQ3FFYUNmNVZoOG9NSWFZbW9pUEQ1bWZOaDFUMDBBdDFLdWdUNTgrV0N5bmgzemkxMC9RVmYwYzlSbElUVERoOVN0NC9RcXRzcG5pRENmSG0xdXcybXlZUkNEOFdWSVhKemxKRmtTcm15MzdEMk5MNnNMWlRpdCtJWkdYbTR2VEtGQVVCVldObEZ1cHFnaWJvanF5Um9pOUNkSGgzZ2xKa2dRZ0dob2ExQWNlZUtEc3R0dHVyYkphclQwbFNYTENOMC9RTFI1eUZVcmRQajZ0cUNLK1J4OXkwNVBvMm5NQVZ4WTVXZlBxcTJ4K3Z3eHJabCtHWG53ZWlYRXlub1pLTnF6L0p4czM3eVNyWkRKemZqMmFPRGxDRVM0WmNTVU41WHY0Zkg4MXFiMzZrOW4xQkJORFRtWFVzRE40L3BtVk9NLzlPUS9kTTU0NEdmSXZ1QlJSdFlOWDMvZ1hDZjNHTVgxMEVUMzdGSk9WckdWNkorV2N4NEFzaWQwZmZVcWR4OHpGNTJtTzNZSkxSNU5ycWVPMVYxL240Mm9YRncrOWd1eFU3ZGc0TTNwVGtKTWEzdGMreFJlVEhDOVRNbW9jbHJvUFdiVnFIWjhlT0VhL1M0WnlUcThlR0NTRkQ3ZjlpdzNyLzBuWlZ4Si9XUEFvNS9WSS9FNG03dHN2dzBjVjBQZENjQitFNmhvNGQxQUUyQzRaQVEzbDhQbCtTTzBGbVYwaDYxd1kwQjFXdlFvN1BvSzBQakQ0ZkxBWUlyZjVBUU1ocnAzdFpYZnhNK2ZwWFV3YmUwblUrKzBlVjFNUzE0Njdpcy9mWGMvYXR6WlIzeHJIa0tIRE9DUFZqb3lYN1p2ZjVxMzE3L0JsU3pjZS9zc0RuSmtVT2VlWjU1WndWdHd4UGl3cngyMTBjbjUrZHFmSDRleUxobUUvOUFFdnJYdTNNbWZ3MVkrdFgvblkrODNIajNlazBLRlA1L0FGQVMwcStUWTIraGxxdmhJZnI1bWZpWW4yb0FTUkpoU3BCUXA2VVZCUWdNMW00M1FaMzVvZTI2bU9ZOGVPVVZwYVNrWEZGeHc0Y0lDNnVqcU9IR21JMFhGckNSYld0K0x6K1NSL1VNdE5WVlZKVmRXUW5wc0JNS0RwdVptRUVIRm9jOVJTVnZaSlVXNXU3aFNEd1hEcEQ2SEg5dFA0TVF3UGQ0NitrbEVMMzJKSXR2VzAyak5GVWY2OWZmdjJOUjAwTSs2Z1Q0SHdDMEZBbHVXQVB2bTIvVHkxV0YyMVVFcUhGdjBzS0NnZ0tTbnB0RG9teGg5NkI1S1NrdWpUcDQvTzlOU2JsbEZFVFUvZkpOQjZKMmltYWRqSklVSit0NkJacWdKcWZuNmYzYzgvLzN6dG1ESFhWQUUzbjg2WFQvbXVUZXl0YW16bkV6dkR4ZzdqcDBLd0gycFlXYmo2MzkvN1ZuME5GYXpadktmZHozS0xoNUxqTkQ3LytPT1BiN3I3N251T0U1M09FV3QrNnR2aytTVkpEa2dTcXI1TXFyMktnbENlV3F6NXFSZUxQTjFBN2JRQU5nQ0h3MEdmUHZrNlVKTjBqMUlZNENSSkNpMUNraVJKODdrcFFVQlRVVlVoOVBsdElaOGJJRzY0NFlaYTRLK2ZmYmF2eW1wTm1BNTBQeDB2bjR5OEl1d1o3VVF6WlNPMm45RGwvOXd3MmpNWVZHS2pIYnZxSzdmSHRUd3hNVHNrNDYxUDU5Q2JvTzMxL2d3QUFhMnlSMWJiTDJqWGZHb2g4ek1VL2RTWVdnalU4ci9WemxJL09tQUQ2TktsU3pEM0pRSm1Hb2lGbUpzVWZoM0wzQUJKVlNVVlZDa0VhbnJtQnFoQjlpWjY5ODVidlduVHBxcnUzZE51TWhnTVEwNjNFMksxT2JIK2hHQS9qZEQ5ekd3aEpTYlJUMUdVelR0MjdIaWpwT1RpR2pydnpxNnZKR2l2OFVxb3FYR2Jpb0pJOG0xSGdZSjh1blRwY3RvZXQrOU0zZU5VUm54OFBIYTdQYXpmRmdva2hMSTZPZ2dhZEpZd0U3WnRRd0FIaUdlZWVlYXcxV3JkMGE5ZlA4K3BLSVQ4Tkg0YVA5UTRkdXpZMHZ2dXUvLzFXMjY1NVlqTzlEeFJ6V2RVTWJ0T2VpZ21uY09pNjlJZUt6Mms5Nm4xT2ExQkRVNkQ0RUVISjQ5UFBpbmppeSsrb0tibUFIVjFoemh5NUFoTlRVMjRYQzZhbTV2eGVEenRCQlQ4S0VvZ0ZGQ0lEU29ZMFlJS1pvSkJCU0R1d0lIcWkzdjA2REZaa3FSemY3cHNmaHFuNjFCVmRjOW5uMzIyS2orL1QzbVFwY1g2MC9RbWFKVHBpU2JqSFdKcUl0TFEyRVRIUGpXOStSbk4xRTVIbjlxM3h0aWFYQzRPdWYzWUxHWmtQV2NLS05RMkhzTWpETmpNMFJtNnJTMHRIR3hxSmk0dURwUGNNZEd5V0N3NEhJNXdUOUxvNmdUQ3ZyaVk1R2FwSS9JV1NnSFJtNmFoMTQ4Kyt1akJnb0tDblRrNU9YNmowZmk5ZzV1cnVwUjNQcTduckt5VWsvK1J0NTVWYTNiUTgrd3p2M0h6a05OcFZPM2R5dnAzdGxEWFlpR25SOWZ2ZndkTzhiaHVYZnNpY2xvQjlyanZacmZjYnZmelR6NjU5T1dSSTBjZXBQMTZUMzBxaDFmcXVPZW5ydTdUSEdacVF2Rmh0am13MnhKSVRJdzBYd2xKRDRWVU9nb0tDazZZSnJWM3l6b0NYWHVTYUpaQWJlVEZKNTloNi91N3FQZlpPQ3Z6KzlOaisvbytOdFhOci8reWt0MStNNmx4QVdyOThUdzY2U291VEltbjV2T1B1ZTdGSFRnZGRqeXU0M1R2MVplL1gxZE1vZ3hQclZyRmtyTGpaRHJpT0hEVXl5MWpSakMxVDhjWGMySmlJbjM3OWtXV1pXVFpFSHlNTEpLa2Y0d0VGQ1JKd3UvM2kyQ0ZnaEJDb0twcVZDQWhxUEdtQ2swNkpIRGRkZU5xZ0wvVjFCelltNTZlZnBNa1NkOXFaNVQxUzJkUmtUNmVHU1BhcHJ6WDc5M0l3ZzFHUnBRVW5Qd0tQVlhNZjNBcGc4Y013ZmxmQkZ4NzFpeGtWV01CY3ljUGJmTlozYlluR0RUbE9hWlAvaGx5aXVjNzI0ZmE3Uzh6ZDdQQzQvZE8rSmFPcThxS0JYOWtWTUY0TXI3bGtMV3FxaDk5L3ZubnEvTHl6djVNeDlKaU83TjN4TklVU1pJQ1FxaXFFQWpaYUZJTkJnT1JFcWxJbmxyZG9hOHdkYzBpTVRFeHFxQTlVaWFsVlJRa0pDUjBmbCtvM3N6a1dTK3daY3VJa0ljUW04M0czZzFQc2JiQ3dvaUJlYWN4c01rbWJoazdtb0pNTFJxeWF0MGJ6TjM0TVc5TktNYnFUT2ZWMzk1RXV0V0U2bk16YWNGenZGU2V4OVE4T3hkZWNCRTNqRTdGTEVQTnZnOFl0bklyMS9RWlEyZjM1WVNFQkFvTEM5Rk9pSXpCMEI3SVNVRmdrd21LVTZKRlRQM0JvRUs0SVROaHBOTVlteXBKVWlpb29BS0JqSXpNelU4OXRleVRjZVBHamJWYXJkUGF2WHMyMVZQdlVzbktTb3M2ZUNyZ2RUWFE0SmJKU285Y0ZxcWlVRjMyQWFXK0lTaUtnaXdia2VYd3hDVjcrQXpXanpTMnVWamNqZlg0ekU3c3NvYzZ0MHhHaWozOG1XTHZ4ODd0eTl0VUFDbEtkQ21PYkRSR3ZxUDZxS211d1pLY1RyTE5FcnM1a0ZYcXFxc3dPdEpKdG4vNzJlT3FxbEJYOVFtN2ErenRIQWVGbmR2ZW85L1lXN2huNW5oazQ4bE5TOFhyb3JxMmtiU01tRDZsS3FpS20rcmFKdEt6TThLMXFxcXE0cTZ0WU10dWIzQWZ0RGwwd3VQcWRkSGdoalNubVpyYUp0SXowc0xmVVJTVlJScy9iVk8wcnlwS1ZDUlQvMzhCbXVxcWNjdjJObjFlUTJvb0IvZVhQLzIzZjZ6WThzRC9tK3NtRWlEUWwwZnB6ZEQyVEU5VmtpUlZWVFhyUktnaXVwbXgyWXdzeThSWnJKaGtpRSt3NFhBNHRNVnV3MktPSXkwOWc5emNzNElWQldadER0VTJrcDZSUmtOTk5iYTBMS3k2VS9Yc3dnY1lNdmwvSXRGNzJjSElDUk94Tkw3TDNxb083dEZOOWRTNUZMS3kwcU91SjhYcnBxYTJIa2RLT283WStSbzhTbzIxMWZnc3pxZ2VyS3JQUTNWdHc2bEVSZU1veUl4dzdpeG5FdDVEZmdDY1hTTXdKWnNUeUxBYmFmRnBGMXRlajRpQ1pvclRqcXo0YVQyUnBrM1FMSTJBbXlFRzVDS3NMY0xncEJEQVNaSWtpZERGSGdRNGdTNWkyZzU3VTI2K2VVcmc1cHVuUEZsZS90a0hPVGs1RXd3R3d5V2hnL24wZlQ5bnp1cEs4dE5rS3R6cHJGNzNFdm5KWmxZL2NpT3pWaDdBYmpRZ2U2b3hGOTNDdW1Vek1WZHZZZmlVLzZWbTMyNmFiSGRUc2NwSjl1QWJXVHByRXVCbDlxUlJiTno3R2U3Q1d5bGRIbXhWN3Q1RGJ0YlBLQ2pKWS92ZVJnYjBTMlBmN3IzTVcvMHhZNG9jckh4NEJvK3YyY0cyS2lmVk5XOFRKdmMxV3hnKy92Nmc0cWFQMHAyN1diVDlLSlA2MmFndjI4Q1k4Yi9DbkpGUFUwVVpRMlkreGlQVE5OYWtsTDZJWS94elRNazl4dFlhZ2FkUlljV3VIZlQ3TnFQNDNuSW1qZm9WWmRXbFZMbTNNWHozQzFoeUwyZnRrbnZBVmNyNHNiK2h2THlVR25VWHc3Yy9ROUhvTzNoa3hzZ1Rzcjh4TS81R2ZtRU9lMHRyZWVURk54azNJSXVtN1V2Sm1mQVlSU2xXTEZhRmZlNTBObXg4aFY3Mkp1NFpmejFiOTFWUVZhY3lmUGg3NER5SGwxOStCQ2QwZUZ3bkQraE9WZklBcW5mdkpHL0FoYmdxUDZKbzJ0OVpmTnNReWpjczViYUhuMmZ2OXUwczJkUEMySEQxazR1N3h2Mk1YZlVhdEZYdjI4M1FXYSt3N000UnFLNUtwbzI5anQwZUp3NWZQUlQ4bkxYTDdnMVdUTlJ4Y1dyLy81d3hyT2pORjVhdnErcUFwZW5OVUY4UTBIeDZsaGE2YVV0YXVFM0VtUXlpVlZFSjlmMDBHK0dyMm9Pb0JoUHlWNGVRVkxBbUp0RzFxNU5Ebi95SDF5czlaR2VrOFB3enk3bmwwWmM1N3p3THkrKzlodm1ibXJHN1A4V1ljUjQyNVN2cWs2OWs5OHR6Z3BkSFBTKytYTWJzZTA4MkZ1ZmxpYWN4dkRnQUFDQUFTVVJCVkh0djRwRjFWZVNtbUtsMEpiTnEvU3ZrT1kxc2ZmbytKai84TmdXNTZWU1hsVEx3dHIrdytNN2dmR2phUlhiZXJZd2RuY3FHWFVkUVhJM01XL01SK2FXUE1QemhMUlE1QkUxTnRlZzZScDNDNGp2T3JRdi93WkpQRHJmNXJIWi9LUmZPZjRVRDN0amZCWGg2NVVvbXYvbngxOXFXcWdiNCtPTzl2UGJhYXl4YTlCZnV1Ky8zL1BLWHYrUzY2OFl5Yk5nd0xycG9JRVZGUmVUbDlTWTdPNXZ1M2J1VG5Kd3NKU1VsU1FrSlZpa3VMazQybVV3R2c4RmdsR1haSk10eW5DUkpWa21TRWlWSjZpSkpVZ3FRQWVRQVp3TkZ2WHIxR3REWWVPVC9DYUhXTkgrNlNuVHRmcUhZMzZ3SUlWVHh0MTlkS241Mi83TkNDRlc4OXFjYlJMY0xKb3ZqQVZVSWY0TzQrdXl1NHFrZERVSUlWUWloaWlkL2U0VzQ1YkV0NGRmNjVkTlhab3MrTjh5UHZIZDh0emlyeDZYaXNGREV6ZWNsaVgrODN5aGVlK0FHOGF2SE5rVytjM2lMNk5Iak1uRzRuZlVKb1lwM0h2dTFPUGZxZTdUOUVXNXg4L2s5eEVOdmxnb2hWQkU0VmlyT3l6eGJmSEJNKzY3LzR4WENZT2dpbm5xM1d2dTkzeU5hL08ydlZ3aFZ2UC84YkpHYW1ocXpkQmRQL3J1Mnc5K0VscmYvK2d0eDFlK1d0ZnZaRzMrNlNWejd4eFVuWEljUXFoQ0JPbkZwank3aStRL3FoUkNxK09TVjJhTGJoVk5GcTFERjBmZWVFSWI0czhTT3cxNGhoQ3IrL011THhFMFByUTMvOXZQWDVvcysxODl1ZjczdEhOZWJMa2dWcjN6cUU4Lzg3aXB4NDU5V2l5UHZMaFY5cnB1cis1MVBYTjhuUWJ6eWVmdjcrdFdISzBYdjNpWGk0K0QrUEhYM1ZlTEszeTRUQWFFS0lUemlqc3ZPRW45NXAxcW9hcUNtcnU2akJUTDhIQmdMakFhdUFpNEhCZ0VYQUVYQnVaa0RaRWlTbEJLY3U0bVNKRmxsV1k2VFpkbGtNQmlNSnBQSllKUWxHY2tnSmRrVEpBa2taMnAzc3JPelNYUEVZYktuY3RGRkE3bDg4UG1ZSkNpNWVoTDMzZmQ3SG5yb0lWNTc3VFUrL25ndnJyS1ZkT3Q5TGMxQzVibmZYYzJ2SDl2TWwyODhUT1pWZHlJQzVaeDc1aVVjQ2w2ZmdmM3I2Tkw5TWc2M2MrMisvZGRidU9xM3k2TGUrK0xOaDhtODhBYU8rclhYci8rLzYvblovU3NRUXVYNHNTWUNvZlVlM1U3UHJ1ZnlSZkI3NHVoT3pqQ1orTU1MdTRMcjh0TFNxdkRwSzNPSlAvTUtEcldxQ09INkJubHNxcCsvdmZvV1NxOEx1Q1UvMnFCc2J2eUtXMS8rZ1B0dnVJYU1HSWZxZXp2L3cvTU5kbDZZOHZYMG1pUkpvcUNnQUtQUmlORm93R0F3aGhtY0xPc2ZvM3h4WWIrYkpDa2g5aVpVVlEwcmh1allXNmkvUWlERTNpb3FLaFNucyt1cXQ5NWE5MzdYUTl0SE93ZGNlbE4yVUNsMjZKRExtUC9FYm1BaUFNV0RCbUdUQWRuSjRJRTU3TnBkeXVUaVFhZDBhR1diSFJzeWRvY2R1ODJPeldiRDdUazVtZTdxcmM4eWZVazU2N2E4b2UyUHE0ek5lenpJbTU3ajNpMGE4L1FwMVpSV3VPblhUNlB3NXB4QmpCOFlsT0F3V3VqTUVPMC9ZUTUxRStiOHNNNjYycjNzOWVRek9GaTluajlrS01iSnY2WmFoV1RBbmorUS9zbWFBVHBrME1Vc1c3c0xHSEdLRzdOaXN4bkJic05oYzJLemUvQ2U1TG53TlpReWJ2ejl6SC94WHhRRTkyZlR4aTM0Y3JPNTc5N1BBQ2gzcXh4NWYvdUtGVisxYnBrNDhjYWpKMkJwb1JwUG55UkpvVFNPZ0M3cUtmVDVhVDdGTDR4eDhaamo0akViUEtMVkQ5YXU4YmdQK2VuYW96dDJleEoyZXlLWjl0MGtkVTJoUjQ4TUVrUWpMeTVkVEhXREIxVngwOVJvSjlTQndXNnpZM1hZY2RvOElOdXc0aWJrRGZVMk5lQ3hPemhab3I5MTg3K3hJdlBnck45ckhMZXlubEx2SG1BOGFsTUY5OTcxSjNhV1ZlRlZmZFM3RzJod1EwNW81Wlo4Sm8zdEYzeGh4aEwwTldUM3Y0QVVNNER0VklFdHdJdHZ2TVYvNURONTZzcjhLR3V5MWQzQXJjOXU1TnFycitLcXJPaE0wNC8zdnM4ZnRydjR4OVFSZEQxRlpaTzh2RHhDemsrajBZakJFQUs2aUptcStlSEN2amdSZkpTQ0VWR2RiellLNEZRZHdJWEFMUUFvVjE0NVlqK3dKUE95WDc2cktNcTFScVB4aXBOeEtuL3pJVWRzOVpOWW5hZDJOK09uL0puRnEvOUZMNGN4dkIrcU9abGhZNjRtSzdpcTBhT3ZKU2MzVXU4b1cyMmNyRmR0NytvRlRKcnpYSnYzNzMzOG40d2ZrTUtQYjhqaGg4alpPQWxaSWFXSjI4ZmZRTW5zcHhoVGxCYTF2Z0ZEcjJaa2dRMUZVZDQrNjZ4ZUc2Wk9IWGRnZVFUUU9nSTF2WTlOMFptZVlYOXhxRStJTEJ1RTBTRHdla0gxdWtWRGF6TUlnYi9GUzBLQ2pUaXpqTWxxbzB1WExqaWREcXhHaWE2cFBlaDVabGZtL2ZJUFhMOXNNOU9IRldDczMweGF3UjlpL20zN2M5Sml0MlAydUhCQjI4Q0wzTjdWb1pKVmRER2pSNGR1L2xjejFaRUJLTnczNldvc2s1NW53eE9ETUZOTmNmSkYwZFBmYXNQU0RuTEpzdkViQkE4UXZQbjIyN3gwUEpsbmYzNGU4YnFkVmp4TjNQSFVlZ1lPR2NhTnZhUC8zdWZsSC9HYlRRZFo4b3VSbkdIOVppcjRQWHYyeEd3MkJ3SE9pTWtVRFhEdE1MY2d3RWxTUkhvOFVxRVFZbTI2d0VKQXg5N0NrK2pBTzA5K1lESTlXVnBUYytDZHQ5L1plRjIvL2xQQ1NyMDd0MnpCclU3R3BqYXllVnNsbzZaR1pLUnRWaHVORGZYZjdmWG5xMmY2dUJzWStlQUxETXZYSFh0N0FVUHlQVlM3bkl3YnJrbnV1QnNhTU5wTzdSemtEWnZLMnY3ajJzeGNaOHFKUS9sV2F5SU5EViszbzVPUGhUT25ZeDB5ZzJramduZnA5QUlLcldWczN0M0FoSDdKbEczYWlGSjRQbGt5ZUFCWDJWWjJOZmdvVGphemFjdC82Ti92OTVGOXNOdHcxZGVnOEYyVzNhZ3N2ZWRHYWdwL3paSUpBNkkrR1RKMElLOStYck5yMHVDU04zdWZsZnRwNk9ZWkEyanRnSnJrbHlRTitJUVFBUUVCT1p4d2l4b0lxQUxKZ05sb0VrYWpFZUZyQnRra3pzaE0xd1FpWlM4ZmYvWVZSbHNpNmFsZCtkenRvVnUzYmppdFhnNDJCUmllY1NiNXVRa2NjWGRsME1BQ2pNRDJkZXVvUDhuN3M1emRqMExmUHNvYW9TUUcyZEtjM2FuY1dCVWxFejlvOENYTW1mOFplZjN2UWJzSEs1cHNQaDZxcXoxTUxTbkdMRVBWcGpYc1BZV21YVi8vM0xZYzRvRk5YK0N5eERGa3ZxWVFhdTZXdzd2VEwyWEhoeCt5c2U0NEg3eStsbis4SG1RSGx3L2ovZ0daL1AydDk2aHRsTGxoNFRQQkZjV3piT1lFK3A1aS85VE16RXdkdUpuUWtnMk5ZVk0xbXNXRmdVNElJYVJnUGFtUXBFQW9WeTRjV05DeHR4REFSYkUzd0orUmtma3YyUmovM3I4L2VYNllFT0k2SUMrRlNvWU51Z3lqcHdaenllK1pNQ0J5ZG9lTnY0VkY0MzVGMGVvSHlCdDJDeS9PbjByZDloY1pPL052ZUJxcXFHcVFLU2w1azRLUmQvRDRqRTcwdDd6N0dEZnNsOVI2WGRUWFZ6T3k1R0xNR1JlejhjWDUxRzk2a2VXNzZpaWNlek12ejlWTzdid1YvMlprdnBVSG4vNEg0OGIvakRVTDhyRDQ2cWwyOTJEanJwVmtuTUp4TjF2dFpGaFBMYStoLzhoSk9CNi9nWUtpRjNBV1hjT1dwMmVkRkxCdFhQa2NqclJSRVdDVDAxaXcrQStNSFhNaEt3cHlLQzJyWmZHS056R2pBWnM5emM2OUl5L0ZhbFVwZDJldzdwR0lRbTM2Z05FTTVSb0tDOC9EbG40QjY5Y3Z3ZG5KY2Uxc3pKOTJCZXZLM095cjlMQjMzRVVzdERwWXNPcE5pdTE3ZVhEUmVzaXJvVi9SMzdUcllPWmYrZU1ORjMwMjlCZXoxdnlxNzZBUGV6OGNVSFJSVEwwaWh5K1dvVW5nRjVvYWh4S2NoMm9FMUNRaHl3aEZFVUpJTW1hemRqMGNiM1lKYzBKeXVBdWMxZXJFWVR5QXF6V080dUtMYUZqM1QxNSt6VVc4MFlTemF6d1pQZlBJN05tTG1WTnlHVFhnUW9veXJNanBtYVNkN1AxUHptRGM2Q3pXYjloRHlmam9iS21DVVZNWXVPd2Fjdkplb1hERXJheFpNSU9jRWJjemE4dk45Qzg4bjRKZTZWUlY3bVBFUFU4eWY5SWdicnR6QWxPSFg4Q3lnalM4MXU3ME9vV2NwdE95OHVEcmpLTkhqMUplWGs1VjFaZlUxdFpTWDE5UFkrTVJtcHFPQldXUFFsVUtMWGk5clhnOEhudytIMEtva3RhaFhpRVFDRWpCL2d1aGFnVXBXTEVnQjhIZkNCaURWUXNtdE1vRk14QjMzMzIvVHp6YlVuSDU2c0ExMXkyL2EyaE9nMWNtSStWMHpDNVRxYXVwQm91VHRPUWZoMGFJNG5WVFU5ZEFTa1lXMW1DK1JkUDJwZVROL0lEYVRYK2lwczVGZWt3YXdROHhoQkQ3RHg4K3ZHYk9uRG03SG52czhWYWRLZWxyeC9RTVBmcURFVTlGdDZoNlgxcXdpb0JnMG0zUWVqR0hHaGxqc1VTNnMydXF0NGs0SEVrNG5WMUpTZWxLdk5uQzJlZWNSMkdmM2xFbFVrMzFOYml4dFVsRk9kRndsYTJoWk1ZR2RtNWFmTkt1RGErN2licEdGMmxwR1ZoMEtUdnV4bm9hUERKWkdjbW4xT1hNK044K3VidDA2VUpoWVNGeGNYSEV4Wm5EZHl3OWc5TXpOeUhVVUljckljdCtTWlpsRkVVUmdVQVVld3NWMThzeDVta0FVSUxtcVIvd3o1Ly9nQTk0cmZjZzhZNzN6dUZEZTNSTHVoYm9lZm9kS1ptMGpPd2ZsZmZMYUxHUm5kMitZb0JzdHBHVlpmdWhBYTN5OE9IRGJ6ejg4TU1mL1BuUEM3dzZnUEozQUdpeGdRRkZIeHdJQXBzSWxVVUY1YnZSUUUzTFR3dFdFMFNCbXMybXFkNG1KWVg2RTJnZDJyT3pzK25kdXpmeDhkRm1reU1sZzFQSjlySG5qMkxoakVacVhTbzVKNm5yYnJFNXlMYTEzWnJObVlMdEcvQ0QvM3JHcHB0RWZQYlpaMVJXN3VmZ3dSb09IVHBFUTBPa3Z0VHRkdVB4ZUhDNWp0SFM0a1VJZ2MvbncrZno0ZmY3SlVWcGw3MUpRZ2c1Q0hDaG1sTkRrTDJaZ3V6TnJGL3V2bnRtNHU5Kzk3dExuVTduMVpJazllR244ZjJ5dUtZYXR1eHpNV1JBL2cvSGpWVzFyTDYrZnYzczJYLzg4TWtubjJ6dEJOQmlGMzhRMU5vRE5EMm9oVmxhRU5SRU1FY052ZVJRQk5UMDFRU3A5T2lSUVU3T21mVHUzZnNIYjdyeVhZMGZEYkNGUmxWVkZaV1ZsZFRVMUZCWFYwZERnNmJHNjNJZDQvaHhOMGVQSHNYajhTQ0VDQmJRdCtMeitmSDcvU0ZsM2lCekMwaXFLcVJnNURSa29vWkNRZ2FkZWRvdXdPWGs1SmkzYnYzUHhhbXBxVmZKc256aFQ1RHo0eCtCUUdEN2dRTTE3MXg4Y1VscFRjMUJKU1l3MEJtbzZRRXQ3RWNMVlE4QVFoL3hiTXZTVEpqTmNlZ1ZiNjFXZmQxbnBKRnhSa1lHT1RrNVpHZG4vNmpQaGZISDlvZXlzN09KajQvSFlva25MaTRPc3prdUhHUXdHazBFQWdGa1dVWUlvVE5UV3pFWURLRTdZWWk5aVVBZ2dDUkpvYnkza0VrcXh3WVhZc3hUSDJDdXJLdzBwNmYzZUFmWVVsNytXVkYyZHZaUWs4azA2cWZMLzhjM1dsdGIxKzdidCsvZG9xSno5K3ZBVE0vU2ZPMkFtcjhEUUF2b1VqakNabWNzU3pNYWpVR1dwb0dheFdMUnlYZ25ZTE1sa3BTVWhOT3BseDNLb21mUEhGSlRVMy8wNThUNFkveFRxYW1wV0szV0lNQlpzRmdpQUJjSUtCZ01CbFJWRFVkUXZWNWpDTnp3K1h4Q2x1WDJmRzhpYUpyR1JrOERCSnRpb0lYaVRYcUFBOHk1dWIxM0FudmVlV2ZqUzhYRkZ3eXkyUkt1Z2xNS1N2NDBUaC9YUjgzeDQ4Zi8rYTkvYmQ0OWV2VG9oZzRBclQxUTgzZkcwRG95TzBNc3JYM1RVKzlQMDRJRVNVa09uRTRuS1NuZDZONjlPMWxaWjlDclYwOFNFeFAvVDV5ZlV6WkZtMXd1anZsbGVuU3hSUmNBQnhScWp4N0hFSjlBYWtKMHI4cVdGZy8xYmgvSmppUVNUTkwzTWZrb0x5L255eSsxaU9taFEvVWNPRkROMGFOTnFHb0F0MXVMbUxhMFJKckZ0TGEyNHZmNzhQbTBoakU2M3h1aDVqRnFRS0FLSVFmYm1ZWk0xSTU4Y0hwVDFRU1lKMHlZWVBuVG54NitJQ1VsWllqUmFPeFF4WGZQNXRWWThvYVJsM2J5elVOcXk2QkNnVUdGUDY2SldyRnJNMnBHTWJuaFk2R2lLRkZsNWhpREUvRkVKY2lxcXVxSzM2TStvYjZtR3AvWjBTWWkyTlJRUTZNYjB0TFQvblhvWU0yN3Yvbk5iejU5L2ZYWC9TY0phUDUyQUMzUUFVTlRRL1hPd1FBQjBTd3Qwcnk0clQ4dG9xUG1kR3BCZ3ZUMGRNNDQ0d3h5YzNPL1UzOWE5ZDZ0dUoyRjVHZWNIaEgzNzAyMmFQbnFWVHkycjVuVVJETzFqYzFNdnZwS3BoZCt0MjBISkVtaWQrL2VKQ1FrQlBONTR2SDcvUmdNUmxRMUVKWGtHNWs4QmxwYmpSZ01QdngrdjlDK0wwdUtFa0JSRktINEF2aFZGVWtTS3RwTk5hd1dFc3gzTXdRbmE0akJHWU9BNWdzQjI0b1ZLMXBYckZqeEwyRHJ4bzF2UDNYKytlZGZrSmlZT0ZTU3BDaGRsL1ZQUDBUeWxBRmZDOWoyYllNVmpUOHVZRk5kNVV5Wit2OVlzZjN0OEhzcjU5M0F4QWZYayt5d2hhZnlJMnMrWW55L1JvcHQ1ekp2MzFHR3Q4ZUpQV1VVcEJWZ0gvY3cyNWZPakFCWHhWYkdqYnVKV21NR2RxVWV1ZkJtdGo1OUQzanJ1V1BDMVordC9zUzNPY25RL05ISG41WWYwWUZTZTREbTd3RFFsQk1BbW1nL09HREFhRFRwcFlhSWl6TVRGMmRweDUrbUtkNTI3WnBNYW1vcUdSazkyUDM2WXR6WExhTDNkeHdrc0NrMWpKbStsbTFySDhSOEdzeVpVMkJzclpRZWFJbVNMWHF5S1pXM0poVFRlT1FJM25oN2xHelI0TkUzTURYUFRrdXJqL2c0N1M4ZjJiK1hpNS8vZ3YvTXVvYnZTMDZ3cWFtSnlzcjlsSmFXVWx0YlN5QVE0T2pSUm80ZDA0SUtzZmx1UVdYZVVOUVVSVkh3Ky8xUzgvRUFmalZBbkRrU1BkVUZHQ1Foa0tGTmtNRVFaSERHR0JZWHRYejg4ZDY4bmoxN1hoZ2ZIejlFVlpSMFZjZENUZ29BVkcyUmpUR01KVWhoM0kzUTVJT010SzhKTEY2b3FvV01iQWlsR25tYW9LNFIwcktJa3E0SjFiNVVWMEZ5QmxoMXMxenhRblVkWkdXM3ZhT3F3YzlTMHFOL0E3QngwVFNXTkE1aDFaenhPbUQ3T1F0ckxtSHI0OU5qMWxSRi8wNkFyWEx0ZzR4ZHNndDMyV0UyVi95YmRDT0FtMG45ZTJLZjloS0xwdzBHb0xTMHJQYk1NOC9ZL05KRDB6Nzh4ZisrVUIzeXFaNEVvT2tYSmNqUUF1MlpuQVNGVDRNMXpURm1wd0dEd1JSc1dteWlJOU16SVNHQlJKc1ZDWWt1S2VuMHpNNElCZ2t5eWM3SzRwRnBBM0ZNZnBPN1JtUkh5MWdCN29aYUdyeG1zak9TMjh5VnhycHFGR3N5S2Zib202cW5xWjY2Smk5cDZSblJVbEg0bUQ2b0Q0TVh2cy80Zmo5OGc1ZnZUYllvQkdxaFkyYzB5SHlmZ1dhSHc4RTU1eFRTMnVyRlpES2hLSDdpNHkzRXhWbUNRUWJORWR2Y2JNSm9iTUZrTXVMMWFpek81L1BoYi9WenBNRWdWRldSQkFxdHJZcVE1QUJtazRxRUpIeCtEZHhDUVFaWkRnY1pBa0pnQUNsWXhTTkN6SzBOeVBYdFc3Z0grQVI0K29JTEx1aDc0TE1QejcvN2hZckJkdzdQU0QrWi96aHRPT3lxZ093SnNIcGU1UDE3eDhBZUdWUTNWSmZDMEZtdytMWVRyKy9wbWJDcUNlcDNBbFl3RnNEV3BmRHdkRmkrQjNKU29MUU01andORTB2QXZRY3l4c0hJWEdod3daNDYyTElMY3UxUXR4c0dqNGFNUXUyZjc5c01XNXNnRzlqK01reStGM29WUVBrK21MOEN4dllQd3lFclZyek82RVVQZnl2ellNM3FOeGc2NFZHOFM2OWw3ZllHcHBVazQ5MjNudFVWV2V5WmZFbXR4K1BaVWxIeHhVZm5uSFBPZmoyNzZnRFEyZ08yMEh1aG9GSWdER2l5ckVwQ3FHcW9JemdJSkVrWVRTWU1zaVM4TFMzSTVnUzZXT1BBM3l3YWpyckl6TTdHYXRGQXpXS0pJeTR1MUpIZFNrS0NqWGpKemVzdnY0RTE3UXppMUdaU2lzZng1SnpCMkJwMk0yNzhQWlR2cWNGWWVSTWJGbGtaTVA1dTVrMGRCa29qc3lkZnk4djdWTEtzSGhwdHhheGQ5VGZTTERCelJDYmJQSDB4bWczVVYrNWw5T3puZUhDeVZzLzU0dHdibVBWeUpZVzlrcW5ZVjg4VFczY3dJSXlKWmthTnVvZ2xMNjlsZkwrSlVjZmNWYmFlQ2ZjOHk3emxLeWh5bkxiQXBoditacGJ0K0lKeGw3Y045bjFWOVNsYmpqbDVXVmN6dXYyRDkxbjAvbjRxajdReWI4TFB2bmYxVjRQQlFNK2VQWW1McytEenRXSzFKZ1M3WE1jQ25KbVdGaTJLMnRyYXFvR2IwY2NaMlVhTzF2bUZLK0NuUzZJV1BRMEVBcUxGRndCSnhXeFNoYXFxa3FJZ0NSQ1NGSTZpQmdDREpLR0FaQWhPZkdQUVREVzJBM1RHSFR0MjdBTDIvT2JLcktjdTIvdFI3NXljbkNLcjFYcGhaN2x4U3pmQTJvV3d0SjF5VEZzQnJKd0xUZHNoZXhvc3ZPM2tUdjcyUGJCM082Ulp3UnZzQ2pqOVliZ242RXFwV2crRDU4TEVEY0U3ZWgzY3N4TUtIWERQY0ZpNUVlNGJBdy9mQzJNZmhIa1RvR29EOU5vWXZNazF3TVRiNGRuZE1EQWQ2clpDOFYwd2VrdHcvM3dWN0N5MWMzdEIyeXVpZE0xZkdGcnhxamFSMHk1ZzlmSjVuV2U4cTNXc1hsZkY3SG45OGRSZXl1TnIxekYxNE1TeThnLzM3ZkIwY1pUMWpEUG9tWm1xWTFtZEFacWlZMmVLSHN3a0NUWFlsRmhvaWd1U2tHUkpHTU9SVG9sV2I2dFFoWUY0czRuNE9CT05UY2RGZ0hpT0hXc2hMYXNuU2JiNHNEOHQwajNLaXMybXFkMGUrYlNVaEw0amVmaXVjZlRva1U1NmVqcFpXVm1RbTh2R2plT1pOZlpzSEpPZlorYkk3UEJoMlB6NGJOWjRMMkx2cm5tWVVWazQ3UkllWHI2TkJWTUhhaVJnd0RqV1BUd1pUL1ZHZXZXL20ybmpkNUJqcVdQSjRzMHMyM3VRUVdtQTRzTVhZMHdVRmhheDY4R2RoQlJ2d3JjbVZ4MjdkbjJFMi9mZkVCVTlCZG1pdm5sbjh6L3BaN0IxOXdjc2VtY1BsMDBkVE1JUFFGTlRVbEp3T3J1UW1KaUl6WllRRlVIVkp0RngzRzR6WnJPSGxoYU40WVZNMDJhekQ4bHZ4R0x4aTJCZ1FmSzRGUXltZ0RBYXRSNE5BVVVWSUNSWkRrZFJKUTNraEJ5OFVPVGdoV0FJbXFuaHNxMTJnTTVZV0hqT1IwRW05OUpiYjYzcmZ0NTU1K1U3SEk0aWs4bDBJWEJTblRVR0J2WC9IRmxnYVFRM25GUjIrYkF4R3FnQllYbVl1cjB3WXlHVTEyZ21aTDF1Z3R0eU5WQUR5TXFDVU8vblhidGg5dFBhOCt5QmtCR2NlVlhib05ZSXF4ZkJHa0QxZ2FzVWFvRXNBRmNEalVZSGpuYmNqRG1Ecm1QeG5LREV0OUYyUXQ5TzQvYTFsS1pkZHV6OHJvRWQ5VVhGZTkrWjlOY3ZEQTlOUGhMeWtYYkN6dG9ETmIzQ1JyVHZERlNCcEdxUFFvUjdic2l5TU1nSTdZYW9DSkMwM3BFR0l4YUxSUmlOUnRLTmNQQndBL2JVYkxwM3Rlc0NCQnFvMld6UnFSelpDZWZ6K3FLVlBMc3lnV0hEUnBCYmRHS2h4eTFiL29YWjA1L1o5LzQrNkRid1VHZlpDMmpBTm1TUVpvNWJzd1pTYkM5bGQ1VkNUbDR5UXdZbGM5dTRheGczOGpJR0R4L0ZvTUtzcVBYYW5RNWM5VWZhYk04NVlESjFkWk5QZDFNVVRsVzJLQ0hCeGxrSk5zNjZzb1EzNXE1ZzI1Rkx1THpyRDVQNWJMVmE2ZE9uRDNhN25jVEVSQklTYkZpdFZxeldlSnFhTkFibmRzZGhOamRqTnB2d2VrMTR2YTBjTnhzeDRDYytQdXg3RTdMa0IyTkFNcHMxQnVkcjFSaWNMR3NwSW9HQVFKS0ZoQWdIN0tUZ1hWM1dtSnprMS9uaURERWdwd2M2WTFCQzZRQ3c4Wnh6Q2szTGxqMlZrNU56Wm0rYnpWWm9OQnI3US90OWxjT0tMbCt6OE00U0crUnl3OWl4TUc4ZGpPd0hudDJRTnFXZDdjUnNTemFDVDRuNEl2U2VYWHNHakJrZGVUMW1QSVFGa093TzdJb0xseGRpNlpqVmtVNWUzZ2wxOU4yS29uemdjcmxLRno3K1ZPV1JEN2ZYMk0zTDFSaG1Gb2p4ZzNVRWFIb3cwLzlHMWZ2UGdvMGlWVWxDSUJDeUxLTUdBa0tXRGFoS3F4RElKTm9UTVp1TUhHdHNFQWFUQmw0bWt3bVA1d2l5TE9Ieks5Z1NiY1RIdE1RTDlmbDBPcDEwNjVaQ2V2cUZiTHZtSmo3NzlGTldQZnNnZjMzdEE4cld6Tzg4S2d3VURyaWMwY09DZ2d1anI4YWVrbjFDcUpqejh2dU0zcjZGTFpzMk1ISEkrVHk0N21NbUZFZWtxdHhOTG16TzA2T0QxZmNrVzZUeTFiRVd1aWRwL0t5eHZvNERpcGt1bGgrK25DTXpNeE9Id3hFRU9Gc1k0T0xqajJLeGFPQ21CUlphTUpsYU9CWm53b0NQaEFSanFHS0JoRGdqTHNVdkxIWURpaThndVlXQ3lSd1FKbGtsRUFqZzk2dElraURZVHliVTZGbHZwc3JCQzhRZ1NWSTQ2S0FEdWZiQXp2alJSM3VONTUxM1hpbXdEMWg3eGhsbkdHNGI5WHhXcStHc0hKOHZxYmZKWkNxUUpLblh0M3JBR3FIYUNDVkYyazZ2VzMxUzZtUU1HZ2pyMThDSUdiQjNQZFFvRWZabXF3WTVHNHFEUVkyR0JoMkdtWE1wem0ya3ROeERZZUdKbzhOQ2lBcFZpRStPSHE2cjJGeXg3OHNiYjV4MHFLYW1SbzFoWmUyeHM0NVlXdml6b05LTEVyTU9WUWloVDlVUVdndGNTY2d5QkZTRXdXQkE4ZnVGd1dSQ1ZWb3htT0t4eHNjSmd4UkFVU0UrVG10N0o3eE5mSFZNMEsrNG1PcTlIMURqeXViOE5JY3U0VllmOWRUcVBidDI2VUpxang2Y2ZlNkZETy9uSUcza2MzZzFsNmpHb0MwVzZoc2EwTHlaMmhnODZGTHUyVnBKdjlrVE5aYXJlbWhvaXR4cU5tM1p4TXlSVS9CVWIyT25xNEFGMlViQWg4dXRValJ3S0VVRGg5SlUray9LeW10QkIyeGxaYVVVOVcvTEdOM2xtNWd4ZnhYM0xGcE12djEwQmJaVGtpMUs1Uy9QdmNTN0xSYTZ4Y3Q4ZWFTWmNTTXZvMy9DYVFIdUpDWW1VbEJRUUZKU2tnN2dFckJhRzJscWlzZGljUkVYMTB4Y25KbkdPRE1tNGNWbU05SGFxa1ZOMHpKOXVDdE0xQi8ySTFSRnlHWUZlNElpQlpON2hkY2JRRGFxUWhhcUZFcjAxUVVhUWlBWFpuSEJ2RGcvMGJseGhoaUFhL1A4eXkrL05QenVyeVdmQVJWeEMza0hNRHp5eUo5c2g1b3VUMDkwOWNocWJiV2RhUkttWGlEM1JsTW8rZm9qQzI0ZkNDVURJTWNHeVZrbk40bnVlaGhHajRIOHBaRGJIN0tDZHFPY0RDc1d3YVNCV3ZEQVZRdm0vckR4OFloVGV1eTRLMWk1ZmlNVENrZEZoK2VGK016cjlYNXgvUGp4TDZ1cnF3Lys4NThiRHQxLy8vMHRnRHFoWDdvNEFaaDFCR3F4ejhOTDhQeEVKZElHMndNSmlLUnJJRWxDUXNKb2tJUmYwZEtLZksxZVRPWTRMQ1pWSEdseWM3akJDMExDYUpBd3g4VmpOY1BlZlhYazlSdElhbGM3R1lNdjR1Mk5PL0hrOXlhN1czSlFsY05KdDI3ZHdxVlJtWm1aYkhyaUxpNWUrQjhLOHJLbzNMdUgyKzc3QjNyNEh6dnRONHlkZGdNYkY5c1pQUGwvV0RCakJJT256V1hFenVzb0tMcUkvQ3dIRmVXVnpGajhKdE9IYW1TL2FmdkxEQnI2R2syVnBVeDYrQmx5TEFCMWpDKytGSGRHUG5ZYXFIVG5zbVprWVJSNVdidm0zNHlkTzYvTnVmZldsL1BNTXk4eDhjSHZEOWkrMTFyUlprOHpSN3dLWFJNVFNUREpQd2lJMWRmWDQvUDV5Y2pvMGY0K05qZFRYVjBkVHVnOWNpUlVhK29LeXlDMXRHaSt0OVpXYnhEY3RIcFRqOXVISWhTRXFxV0hoSXJxUTlVTHdScFVnaldvb1VKN1FrQ25lNVNEZ0NmcmxwQ01raUdtQ2ZTSm5odGlmdy9JcTFhOW1weVhsOWN0T2JsYnFzMldrRzR5bWJvYkRJWU1TWkl5MnhwOWJVZEREU2hXU1B1YUVTQkZBV29oYXlpVWwwZnNabFdCbWhxd0o0TWpZa3g3aFJBSFdnL3ZPamh3K0IrL1dySDI2YStVeHZyRFpXVmxSNjYvZnZ4UklocDY0ZlNKRHNDc0k0Ylc0Zk5ROGJudTkvb1VqWENxUnVneDJCMHRxTllzaVpCY3ZXNkpsRU1aWkFRUzFnUWJscmhRbmFjNUdQRU1CUWdTd3Uzd3VuUnhoRmxhS0RpZ2I0WG44N2lvclcvVU9qcFpUejZMek5OVVQ0TkxJUzA5SFhQdzdqUnplQ2JaTTk5bllxR0NZbkdTSEpYdW9kSlFXNHNiTTFucEtkR3BJL3ZXTW5ENk9yWnZYb0wxTkNBclA3b2krRzhLYktGUlYxY1hMS1EvUkVQRFlSb2JHNE1hYnhHbEVJK24vWW9Gdjk4ZnpuM1RWeTRFQW9vVUNLaGhnQXNFMUNDd3FhaHFHTlRRTWJxT1FDNE1VREdxSTUwdGNzeHpPZVo1YUJ2U280OHVzUFh0MjllZWxwWm1UMHBLc2x1dFZydlpiTFlialVhN3dXQ3d5N0pza3lUSkprbFNnaVJKOFVFZ0RBa0FHSFRldFJBdytHcTM0cHY1TE41emU0dVdiYStKNXZRSndyM3dsNm83RUFnY1Z4VEYxZHJhNnZKNFBNZWJtcHBjWDMzMTFmRzllejkyMzMzMzNSNGRlSWtZSUJPZGIrLzA0Z0FBQzh4SlJFRlVnSmtleURwaWFsRkxKMEFXQldaNklBT0VMRXRDNjVJbVlURElPa0NUTVJpTXNaVURSQkp0MjFZUWFNbTJtaUpIWXFJOXpOS1NrN3NGdTdGck9XcmY1UWdCMjR5aFgyODcrN2F0cGNGUlRFbis2U0VQL3hPd2RaYk40dmR6NE1DQnNJQ2xKb04wbEdQSFhPMktXRWFyaGZpQ0FLZTBBM0FSRnFkMXVsZEQ1VnJFTUxqT1FLNWRzTk9WZDhtZGdKcWhIV0NMWGZUYjZXeWhuY2ZZNTlGTzJyYlA5WStkTGJGQUZydDB4TkxhUEE5SnY3Y0hZaWNDczlEem1KNGFVZXlzTGFDRlFDMVN1TjZSR0dSU2toMkhvd3ZKeVYxeHlHNys4MkVsRG1jWERJYm8vdlQ5aDQxblFPNjMyMTE5Mzg3TldIc05KTXRwL3ErK3puOEN0cE1ZeDQ0ZDQrREJnOVRWMVhINGNJaTlSWFRlbXBzOU92TTBVclVRcVRtTkJyaEFJQkJscHFxcUdnVnlRcWlTcW9xd3FVcTQ0Yk9RaEVBUGRGSTdJQlFEVU1LZ1ZVTzB5OUk2QXplcEE0Q1Qyd0cxemdDdU0zQ0xCVFRhQWJIT0dKcmFBVnVMZXEybDJraWRnbGpRWjZick54djJtNFhBTEdocVNraFNOSmpwUUUyRUZHUDBnR1kwUmhoYXFIcWdiVjZhVFZmbkdmR2w5ZWpSZzZTa0pINGEzM2xVOVAvZVNFcEtJaWtwaWE1ZHUxSmIreFgxOVllQ09tOUhneVZaeDRNRjljM2hnbnF2VjErU3BXZHZJUk0xRUtVZW9nbGNCZ2dFVkZSVkZVR1FFNnFxU3FGK00xcS9CcUpZWFBBQ2ptVjBPZ0NTWkVtS0JUd2hCd0d5TTBEckROeStEblA3T3NEMmRjek9kZ0V1Q0VpZEFoalJ6YkxEb0tyM21ZVmVCd0V0aXBscFFDYUgyajZLRUZPTDFIWWF3d3JPRVpZV3FSNndSS1Z3aEZoYUVsMjZkQ0U1T1ptVWxGVFMwN3YvbjVBWCtnbllmdUJSV3ZvSnVibG5rWnFheW9FRE5kVFZmY1hodzRjNWN1UklsSkJseUR6Vks0Ym9hMDQxMzVzR2NvRkFHT0FJQkFKNmlTUkp4K0JFaE1tSjBLT0lNVlhSUjFjamJGeEk3WU5TRk5oRmZhY2RjMWM2QWJCMXhOcGlUVkxSQ2JoMUJuQnFlNjkxb05RWnM0djlUZFMyOUs5alRFMWtXZFlGQS9TQVppQ2t1aEVMYUFaRGhLSHBpOWJiVTdiVnpNNklFR1RYcmwyRExLMDdtWmsvS1ZyOUJHdy93TWpNekNBMU5ZWGEydHF3U205Yjg3UTVHRndJQVp3dnh2L1docjJGQWd4QmtGTTdCRGtkd0JITjVxUllvSXQ2M3M1bmJaWmdIbDBuekV4TDB2b3VmV3hCMW5XeVRLNmpCYjFwR2ZPYTlsaFppSm5wL0dmdGdGbkk3RFIyd3RMMGZqUnpVQk13WGljQ0dXMTJodFJ0MDlQVE1adk5QMTFnUHd5d0JkaXhkeC8vclBpS1k0cE13Vms5dWVIY016QURyYzFOdkxyck0vYldIY05nc1RHeXVKQUx1OGNrd2l2TlBQWHZqem16OTlrTXp2anY5UjJZeldheXM3TkpUVTF0WTU3cW82ZlIvamM5ZytzNGVxb29Db3EvbFpaV0NZdFppZ0k1WGJDaFBaQWowaVlWS2ZaUlZWVWtXUTRKMk1ReU96cGhZcnJYVWtqVzYyVEJyQ1BHRnZXZUNOblpKMlp5ZEFKZ2tkOExJVlJWWURESVVVeE01eTlEbjZJUkMyYWh3SUMrQ2JlZW9YVVc3WXo0MFN4dC9HaWhhR2VzMlJuYlVLVzlVYllic29xZzNaYXc3aW9tVEhtWXhTdVc0TlJkMWJYbGU1QlQ4a2x6ZkR1QTZTbGR4ZUM1dTlqNTh2eHZ2SjRoYzNleC9SVFdjekwvNlJUMDJJNnplbmN0UllYWnBKcFZscjI5a2MrT1g4YURnN0w1c3JLS2o1dGxMdTJiaS92SVFYNzk5NVVzdm1NaUE3cEVOdlBXNXEwc2VlOUxyckwxK0s4R3R0Q0lqNCtuWjg4YzB0SlNxYXVybzc2K1BtaWU2djF2SVlCcmFTT0wxRkgwdExuaENJY2JBK1JrcGVqVFE0VE9ENmNIT1lSUWhSWndVQWtHSHNKQUY3ek9KU0VFa2l3alJjQ09rMkZkTWNCM0lqQTcyWEtTTnFhcGlQdzRDcVJDN0tvanRxY0h4UER6NFA4ekdBemg5Mk1DQUVRZVk4Rk0xalhkMWdPYUlkaVl1Nk5vWjdTc1VFaUZRd08waUIrdGE5ZXVwS1Nra0phV0ZwV1BkcUl4YlFRc3JJRCs3UlROclZzeUI4dUE4VkdnQnJEa3ZwL2ptUHhXVkJIOE43cWhweFZ3KzZSdm50S2hlbDFVVlI4K3BkK2V6SC82K3NBbU8zaGc4dVhobDEwOGg3bDF6NWN3S0p2Y3ZrVTgwRGYwU1RhN1AvbVVMZnNiR2RCRk94Q3V1djA4VjJ2anVqT3RlSDVrMURjaElZR2VQWHZTdlh2M2NQVDBTTzFuUFAvQ2UvUXRLY0hlY2h6WG9VbzJmVkpMbjc2NUpMUzJCQU1Nc1F6T3k0RXZ2cURwV0ROQ0VSdzVjZ1JWTXBHUzRvUkFnSURpNWZEaFkxaXRSbkhNNVVKRnhwN2tRQloreWVWeW93UzBXSUlwemlKTVJna2hCQUcvRDE4Z0lBQkpsZzFJaE1CT1JWRlVMU0NocXFDeGxwTUZyVFlBcGtYWXBUQ2xDNmJrSTdjdmNpakMzd21CclBiOVlGNFlZWUFLN20yUTFXbUFKSVFxaE5CK0wwa3lScU1oQkhBRUZEOENDVW5Xb3BRaFVBdjRXMUV4b3JTMkVoQmd0ZG14eHBuQ1FOWk8yZ1p0ZldudE16U3Q3MEFRMEl6eDdQbkVTdTRaTm5ac1M2UmJUaEkzVDNTUTNrM3pveDJ0U09OdnoxaHh5VEIrT2d3dEJEeXdjQkdNdnhQU0xPQ3JoMGVlaFJsM1FlVW1XTGtacXR6dytGeElNOE9JU1RBd040UVNqU3grNGwvY3RXVnArT0EybFc5andiTnZzYm0wSHN2eVA5TzAzVUhlNEd1Wk9GUnJabHk1Y3kxYm01SkpxZDNDaTVzK0lYZkl6N2x2OG5BcWQyM2c2WmZmb3JxdWtmVGM4NWx4KzNUUzdScE1ySHY2WWJaVkhNZWFkWDdVaWF6WXZvYnRqWGE4ZXphd3RlSUlJNmY4bHJFbHVTZHgxZmhZdldRZWEzWitTYitSTjNIYjJCSmtvTDU4TzB1ZlhVVjU5U0djR2IyWmR2dWQ1S1ZaVC9pZlZFODl5eFl2Wm12cEFiNXgrdituOVEza3ByZVRTK00vVHNVUmxUNnBRVmFtK25obzdVNm1YM2srY1QvT2psK0FWbHlmazVQRE9lZWNRLzY1Z3pqSDBjQ0xHOHZJeWtwangvbzFtRFB5eVV4THBWdTNGSktUdStKME9uRTR1b1RMdWV4Mk82azlNa2gxSmlLWkUwaExTeU0xcFNzSlZvMEJ4TWNaY0x1UGMrUm9NM2FIRTd2Tmd0RWNSNXhSRnJJcFR0aVRrb1F0d1N4OExjMWdER2EwV3pRNUpzMDJNd21UeVNTTVJxTXdHaVFSQkFoaE1CcUUxc1JCVWcwR2d5ckxjbnRMSUxpRUd2ZEdMNXIybkNKSmtxWjRvZFZWaGwvSExBRkprZ0t5SkFWa1dRNG15V3JybG1VcHZCMkJVSVdHdW1wd3U2ckJZRkFsdEk1TkpwTlJTS2hDQ2FqQ2FEUUtrOGtrVENhek1FaUlnQ3AwaXJOeGlJQkNhMnVyc0NRa0NwdFpGbTdYY1JFWHIvbS9Jbzc5NEhHT2o4ZHF0WEM4c1o1RGh3NVJWMWRIYlcwdEJ3OGU1S3NqYnV4Mk8wbEpTVGdjWFlKK3NxNTA2NVpDYW1vcTZjbmRlVzlMQm1VTlozRDk5VGswN3N4bFcxMCs1NXh6RGtwRkR0ZmVhYVZrTEV3YUNYZU5nWjMxZ0JXeWZERHBIazBzZE5ZVWNLV0JYWWIwWGpCOE9Eak5VRHhFZTU2bHUrUjg1WnZZS2ZkblFIcUVwMWlTc3hnMi9BcXlVMnowNm5jeHc0ZGZRYjllRVZtL3lwMXZjdCswWDdDcXdzTDRpZGRqVlZ3QVZGV1UwMnZBbGR4KzF4MWt1ZDlqMkpSNVljR0N2SDZES2NrSzhNaXlOMktBN1ExbVRMc2J0V0FvRTRabU1uM3N6VlNmaEVSUjArNVZiSEQxWXZxVWExazkrem9XYjZnRW9LYXlBbWQrQ1hmZWRRY2xLWWNZTnVJVzNDZjZUNnFMR1NNdVpsMk5uV20zMy9ITmdnZlYrei9oc1U4Q1BEbmo3RmlpeVROck5oSjM5Z0N1N0tHVkpPN2M4UjVObVVVTTZtYm13LzhEemt1THhVSjJkalozTFg2QlR5Ky9tTWNmLzRER3pKSE12dTRTM0M1OWlvaW5UWW1XMVpxSVRiaW85UGpKeU1pSTlzRVp0Um1UY1ZadkVnMUNaNlphTU1mN2FQWTBvMGp4eUhLTFVERVFGMmRHbU0zRVdWUWFXcjJTMFJ4SG5DRm9zaXFDRnE5ZnhOc1NrSVdndGFVWlJZRFJhQ1Jpd1lxUU9Sb21Xa0VpRmtXK2hORGlwcW8vQUxLTWpDb0ZBbUF3R0pHbGprMVFqV1JKK0gwK0pJTVJveHg1RDBBRUFnUWtDWXNsTHNxa05KdE5CQlNGZ0Nvd0dtUjhBVUZjbkJsSmtwRXNGcFFXRjY1V1NWZ3NjV0Z6cy9XNGhDa3VpV1NuQTFsSzRIaGxMWEpjUFBGR2ZiV0FQakFnMDJwTEpJNW9jOVNjMkFXbnMwdVVEMDNmU01WT0VpYWpnOS8rMFVtLzFHNTBQNTdLcXpWR0xCWll1aEFtem9JUkpkci9uem9VVnF5RjRpa3daaFpzSGdGanhrQlRDbXdNeXBxbFpHdUwzUXo5U3RxYW9yWGxWVmh5TXFOa1hTek9ERXBLTWxpZllzV1JYMHhKU1Z1enpaaDNCWS9QdXgwWkdCNThiOGo0R2RSVzdHVnZlUTBaaGVkUzkreGJOQUxKUUU1aE1TbStNdVJsYlUzSWdwRTNNbTNVRUtDWWdiUCt6TjVhVFNtNTA1RStpUG4zanNjQnpKcHhEZmU4dUlyYmg4MmszL0NKWkZmdlkwOVpKZVplNTJDcGZJQUtOeFIxOHA5Y3UxZXp2RGFQbXMwenNRUC9IM2l4Z0ptUU81d3VBQUFBQUVsRlRrU3VRbUNDIl0sWzEsImRldGFpbHMtY29udGFpbmVyIl0sWzEsImRldGFpbHMiXSxbImhyZWYiLCJodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9hcGlfZG9jcy9weXRob24vdGYvZGVidWdnaW5nL2V4cGVyaW1lbnRhbC9lbmFibGVfZHVtcF9kZWJ1Z19pbmZvIiwidGFyZ2V0IiwiYmxhbmsiLCJyZWwiLCJub3JlZmVycmVyIG5vb3BlbmVyIl0sWyJocmVmIiwiaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvYXBpX2RvY3MvcHl0aG9uL3RmL2RlYnVnZ2luZyIsInRhcmdldCIsImJsYW5rIiwicmVsIiwibm9yZWZlcnJlciBub29wZW5lciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoT3UoMCwiZGl2IiwwKSxPdSgxLCJkaXYiLDEpLE1mKDIsIkRlYnVnZ2VyIFYyIGlzIGluYWN0aXZlIGJlY2F1c2Ugbm8gZGF0YSBpcyBhdmFpbGFibGUuIiksUHUoKSxPdSgzLCJkaXYiKSxNZig0LCJUbyB1c2UgdGhlIGRlYnVnZ2VyLCIpLFB1KCksT3UoNSwiZGl2IiksT3UoNiwib2wiKSxPdSg3LCJsaSIpLE1mKDgsIiBBZGQgdGhlIGZvbGxvd2luZyBsaW5lIHRvIHRoZSBiZWdpbm5pbmcgb2YgeW91ciBwcm9ncmFtOiAiKSxPdSg5LCJkaXYiLDIpLE91KDEwLCJzcGFuIiksTWYoMTEsInRmLmRlYnVnZ2luZy5leHBlcmltZW50YWwuZW5hYmxlX2R1bXBfZGVidWdfaW5mbygiKSxQdSgpLE91KDEyLCJzcGFuIiwzKSxNZigxMywibG9nZGlyIiksUHUoKSxNZigxNCwiLCAiKSxPdSgxNSwic3BhbiIsMyksTWYoMTYsJ3RlbnNvcl9kZWJ1Z19tb2RlPSJGVUxMX0hFQUxUSCInKSxQdSgpLE1mKDE3LCIsICIpLE91KDE4LCJzcGFuIiwzKSxNZigxOSwiY2lyY3VsYXJfYnVmZmVyX3NpemU9LTEiKSxQdSgpLE91KDIwLCJzcGFuIiksTWYoMjEsIikiKSxQdSgpLFB1KCksUHUoKSxPdSgyMiwibGkiKSxNZigyMywiUmUtcnVuIHRoZSBwcm9ncmFtLiIpLFB1KCksUHUoKSxQdSgpLE91KDI0LCJkaXYiLDQpLE91KDI1LCJkaXYiLDUpLE91KDI2LCJkaXYiLDYpLHd1KDI3LCJpbWciLDcpLFB1KCksT3UoMjgsImRpdiIsOCksTWYoMjksIkF1dG8tYWxlcnRzIGZvciBwcm9ibGVtcyBmb3VuZCIpLFB1KCksUHUoKSxPdSgzMCwiZGl2Iiw1KSxPdSgzMSwiZGl2Iiw2KSx3dSgzMiwiaW1nIiw5KSxQdSgpLE91KDMzLCJkaXYiLDgpLE1mKDM0LCIgSW50ZWdyYXRlZCBkZWJ1Z2dpbmcgdG8gdHJhY2UgcHJvYmxlbXMgdG8gdGhlaXIgY2F1c2VzICIpLFB1KCksUHUoKSxPdSgzNSwiZGl2Iiw1KSxPdSgzNiwiZGl2Iiw2KSx3dSgzNywiaW1nIiwxMCksUHUoKSxPdSgzOCwiZGl2Iiw4KSxNZigzOSwiTGluayBsb2cgdG8gY29kZSIpLFB1KCksUHUoKSxQdSgpLE91KDQwLCJkaXYiLDExKSxPdSg0MSwiZGl2IiwxMiksTWYoNDIsIiBUaGUgbG9nIGRpcmVjdG9yeSBtdXN0IGNvbnRhaW4gVGVuc29yRmxvdyBEZWJ1Z2dlciAoVjIpIGRhdGEuIHRmLmRlYnVnZ2luZy5leHBlcmltZW50YWwuZW5hYmxlX2R1bXBfZGVidWdfaW5mbygpIHdpbGwgY29sbGVjdCB0ZW5zb3IgZGF0YSwgZ3JhcGggc3RydWN0dXJlcywgdGhlIGFzc29jaWF0ZWQgc3RhY2sgdHJhY2VzLCBhbmQgc291cmNlIGNvZGUgdG8gdGhlIHNwZWNpZmljZWQgZGlyZWN0b3J5IGxvZ2RpciBhcyB0aGUgaW5zdHJ1bWVudGVkIFRlbnNvckZsb3cgcHJvZ3JhbSBleGVjdXRlcy4gIiksUHUoKSxPdSg0MywiZGl2IiwxMiksT3UoNDQsImRpdiIpLE1mKDQ1LCIgU2VlICIpLE91KDQ2LCJhIiwxMyksTWYoNDcsIiBkb2N1bWVudGF0aW9uICIpLFB1KCksTWYoNDgsIiBvZiB0aGUgUHl0aG9uIEFQSSBvZiBEZWJ1Z2dlciBWMi4gIiksUHUoKSxPdSg0OSwiZGl2IiksTWYoNTAsIiBTZWUgIiksT3UoNTEsImEiLDE0KSxNZig1MiwiIGhlcmUgIiksUHUoKSxNZig1MywiIGZvciBvdGhlciBUZW5zb3JGbG93IGRlYnVnZ2luZyBBUElzLiAiKSxQdSgpLFB1KCksUHUoKSxQdSgpKX0sc3R5bGVzOlsiLmFyZ1tfbmdjb250ZW50LSVDT01QJV0ge1xuICBjb2xvcjogbGlnaHRibHVlO1xuICBmb250LXN0eWxlOiBpdGFsaWM7XG4gIG1hcmdpbjogMnB4O1xufVxuXG4uY29kZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJywgbW9ub3NwYWNlO1xuICBtYXJnaW46IDEwcHg7XG59XG5cbi5jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdIHtcbiAgaGVpZ2h0OiAxMDAlO1xuICBmb250LWZhbWlseTogUm9ib3RvO1xuICBmb250LXNpemU6IDE1cHg7XG4gIG92ZXJmbG93LXk6IGF1dG87XG4gIHBhZGRpbmc6IDUwcHg7XG59XG5cbi5kZXRhaWxzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0ge1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgd2lkdGg6IDEwMCU7XG59XG5cbi5kZXRhaWxzW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgbWFyZ2luOiAxMHB4IDYwcHg7XG4gIHdpZHRoOiA1MCU7XG59XG5cbi5leGhpYml0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0ge1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB3aWR0aDogMTAwJTtcbn1cblxuLmV4aGliaXRbX25nY29udGVudC0lQ09NUCVdIHtcbiAgYWxpZ24tY29udGVudDogY2VudGVyO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1hcmdpbjogMTBweCA2MHB4O1xuICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuICB3aWR0aDogMzEwcHg7XG59XG5cbi5leGhpYml0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kZXNjcmlwdGlvbltfbmdjb250ZW50LSVDT01QJV0ge1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB3aWR0aDogMzEwcHg7XG59XG5cbi5leGhpYml0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zY3JlZW5zaG90W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNhbnZhc1tfbmdjb250ZW50LSVDT01QJV0ge1xuICBoZWlnaHQ6IDIwMHB4O1xuICB3aWR0aDogMTAwJTtcbn1cblxuLnRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGZvbnQtc2l6ZTogMTM1JTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIG1hcmdpbi1ib3R0b206IDI1cHg7XG59Il19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKENxLFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6ImluYWN0aXZlLWNvbXBvbmVudCIsdGVtcGxhdGVVcmw6Ii4vaW5hY3RpdmVfY29tcG9uZW50Lm5nLmh0bWwiLHN0eWxlVXJsczpbIi4vaW5hY3RpdmVfY29tcG9uZW50LmNzcyJdfV19XSxudWxsLG51bGwpO2NsYXNzIE1xe2NvbnN0cnVjdG9yKHQpe3RoaXMuc3RvcmU9dH19TXEuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fE1xKShNdShFaykpfSxNcS7JtWNtcD1Vbyh7dHlwZTpNcSxzZWxlY3RvcnM6W1sidGYtZGVidWdnZXItdjItaW5hY3RpdmUiXV0sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmd3UoMCwiaW5hY3RpdmUtY29tcG9uZW50Iil9LGRpcmVjdGl2ZXM6W0NxXSxlbmNhcHN1bGF0aW9uOjJ9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKE1xLFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6InRmLWRlYnVnZ2VyLXYyLWluYWN0aXZlIix0ZW1wbGF0ZToiIDxpbmFjdGl2ZS1jb21wb25lbnQ+PC9pbmFjdGl2ZS1jb21wb25lbnQ+ICJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpFa31dfSksbnVsbCk7Y29uc3QgdnE9V3coIltEZWJ1Z2dlcl0gRGVidWdnZXIgTG9hZGVkIikseHE9V3coIltEZWJ1Z2dlcl0gRGVidWdnZXIgVW5sb2FkZWQiKSxPcT1XdygiW0RlYnVnZ2VyXSBBIE5ldyBEZWJ1Z2dlciBEYXRhIFBvbGxpbmcgRXZlbnQgQmVnaW5zIiksUHE9V3coIltEZWJ1Z2dlcl0gRGVidWdnZXIgUnVucyBSZXF1ZXN0ZWQiKSx3cT1XdygiW0RlYnVnZ2VyXSBEZWJ1Z2dlciBSdW5zIExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGtxPVd3KCJbRGVidWdnZXJdIERlYnVnZ2VyIFJ1bnMgUmVxdWVzdCBGYWlsZWQiKSxTcT1XdygiW0RlYnVnZ2VyXSBOdW1iZXIgYW5kIEJyZWFrZG93biBvZiBBbGVydHMgUmVxdWVzdGVkIiksRHE9V3coIltEZWJ1Z2dlcl0gTnVtYmVyIGFuZCBCcmVha2Rvd24gb2YgQWxlcnRzIExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLEVxPVd3KCJbRGVidWdnZXJdIEFsZXJ0cyBEYXRhIG9mIGFuIEFsZXJ0VHlwZSBJcyBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxBcT1XdygiW0RlYnVnZ2VyXSBBbGVydCBUeXBlIEZvY3VzIFRvZ2dsZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxScT1XdygiW0RlYnVnZ2VyXSBOdW1iZXIgb2YgVG9wLUxldmVsIEV4ZWN1dGlvbnMgUmVxdWVzdGVkIiksVHE9V3coIltEZWJ1Z2dlcl0gTnVtYmVyIG9mIFRvcC1MZXZlbCBFeGVjdXRpb25zIExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLE5xPVd3KCJbRGVidWdnZXJdIEV4ZWN1dGlvbkRpZ2VzdHMgUmVxdWVzdGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksSXE9V3coIltEZWJ1Z2dlcl0gRXhlY3V0aW9uRGlnZXN0cyBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSx6cT1XdygiW0RlYnVnZ2VyXSBTY3JvbGwgTGVmdHdhcmQgb24gdGhlIEV4ZWN1dGlvbiBUaW1lbGluZSIpLEhxPVd3KCJbRGVidWdnZXJdIFNjcm9sbCBSaWdodHdhcmQgb24gdGhlIEV4ZWN1dGlvbiBUaW1lbGluZSIpLEZxPVd3KCJbRGVidWdnZXJdIFNjcm9sbCB0aGUgRXhlY3V0aW9uIFRpbWVsaW5lIHRvIEdpdmVuIEluZGV4Iix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksTHE9V3coIltEZWJ1Z2dlcl0gRXhlY3V0aW9uIERhdGEgT2JqZWN0cyBCZWluZyBGb2N1c2VkIE9uIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksQnE9V3coIltEZWJ1Z2dlcl0gRXhlY3V0aW9uIERhdGEgT2JqZWN0cyBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxWcT1XdygiW0RlYnVnZ2VyXSBOdW1iZXIgb2YgSW50cmEtR3JhcGggRXhlY3V0aW9ucyBSZXF1ZXN0ZWQiKSxqcT1XdygiW0RlYnVnZ2VyXSBOdW1iZXIgb2YgSW50cmEtR3JhcGggRXhlY3V0aW9ucyBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxVcT1XdygiW0RlYnVnZ2VyXSBJbnRyYS1HcmFwaCBFeGVjdXRpb24gRGF0YSBSZXF1ZXN0ZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxXcT1XdygiW0RlYnVnZ2VyXSBJbnRyYS1HcmFwaCBFeGVjdXRpb24gRGF0YSBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxHcT1XdygiW0RlYnVnZ2VyXSBTY3JvbGwgSW50cmEtR3JhcGggRXhlY3V0aW9uIExpc3QgdG8gR2l2ZW4gSW5kZXgiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxZcT1XdygiW0RlYnVnZ2VyXSBHcmFwaCBFeGVjdXRpb24gaXMgRm9jdXNlZCBPbiIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHFxPVd3KCJbRGVidWdnZXJdIEdyYXBoIE9wIElzIEZvY3VzZWQgT24iLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxacT1XdygiW0RlYnVnZ2VyXSBHcmFwaCBPcCBJbmZvIFJlcXVlc3RlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFhxPVd3KCJbRGVidWdnZXJdIEdyYXBoIE9wIEluZm8gTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksS3E9V3coIltEZWJ1Z2dlcl0gU291cmNlIEZpbGUgTGlzdCBSZXF1ZXN0ZWQuIiksSnE9V3coIltEZWJ1Z2dlcl0gU291cmNlIEZpbGUgTGlzdCBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxRcT1XdygiW0RlYnVnZ2VyXSBTb3VyY2UgRmlsZSBMaW5lIElzIEZvY3VzZWQgb24iLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSwkcT1XdygiW0RlYnVnZ2VyXSBTb3VyY2UgRmlsZSBSZXF1ZXN0ZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSx0Wj1XdygiW0RlYnVnZ2VyXSBTb3VyY2UgRmlsZSBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxlWj1XdygiW0RlYnVnZ2VyXSBBIFNldCBvZiBTdGFjayBGcmFtZXMgSGF2ZSBCZWVuIExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLG5aPSJkZWJ1Z2dlciI7dmFyIG9aLGlaLGFaO2Z1bmN0aW9uIHJaKHQpe2lmKG51bGw9PT10LmNvZGVMb2NhdGlvbkZvY3VzVHlwZSlyZXR1cm4gbnVsbDtsZXQgZT1bXTtpZih0LmNvZGVMb2NhdGlvbkZvY3VzVHlwZT09PWFaLkVYRUNVVElPTil7Y29uc3R7Zm9jdXNJbmRleDpuLGV4ZWN1dGlvbkRhdGE6b309dC5leGVjdXRpb25zO2lmKG51bGw9PT1ufHx2b2lkIDA9PT1vW25dKXJldHVybiBudWxsO2U9b1tuXS5zdGFja19mcmFtZV9pZHN9ZWxzZXtpZihudWxsPT09dC5ncmFwaHMuZm9jdXNlZE9wKXJldHVybiBudWxsO2NvbnN0e2dyYXBoSWQ6bixvcE5hbWU6b309dC5ncmFwaHMuZm9jdXNlZE9wO2lmKHZvaWQgMD09PXQuZ3JhcGhzLm9wc1tuXXx8IXQuZ3JhcGhzLm9wc1tuXS5oYXMobykpcmV0dXJuIG51bGw7ZT10LmdyYXBocy5vcHNbbl0uZ2V0KG8pLnN0YWNrX2ZyYW1lX2lkc31jb25zdCBuPVtdO2Zvcihjb25zdCBvIG9mIGUpe2lmKG51bGw9PXQuc3RhY2tGcmFtZXNbb10pcmV0dXJuIG51bGw7bi5wdXNoKHQuc3RhY2tGcmFtZXNbb10pfXJldHVybiBufWZ1bmN0aW9uIHNaKHQsZSl7cmV0dXJuIHQuZmluZEluZGV4KCh0PT50Lmhvc3RfbmFtZT09PWUuaG9zdF9uYW1lJiZ0LmZpbGVfcGF0aD09PWUuZmlsZV9wYXRoKSl9ZnVuY3Rpb24gbFoodCxlLG4pe2lmKGU+PW4pdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBiZWdpbiB0byBiZSBsZXNzIHRoYW4gZW5kLCBidXQgZ290IGJlZ2luPSR7ZX0sIGVuZD0ke259YCk7cmV0dXJuIHQuZmluZEluZGV4KCh0PT50LmJlZ2luPT09ZSYmdC5lbmQ9PT1uKSl9ZnVuY3Rpb24gY1oodCl7Y29uc3QgZT10LnNvdXJjZUNvZGUuZm9jdXNMaW5lU3BlYztpZighdC5zdGlja1RvQm90dG9tbW9zdEZyYW1lSW5Gb2N1c2VkRmlsZSlyZXR1cm4gZTtjb25zdCBuPXJaKHQpO2lmKG51bGw9PT1uKXJldHVybiBlO2NvbnN0IG89KGZ1bmN0aW9uIGkodCxlKXtpZihudWxsPT09ZSlyZXR1cm4gbnVsbDtmb3IobGV0IG49dC5sZW5ndGgtMTtuPj0wOy0tbil7Y29uc3Qgbz10W25dLHtob3N0X25hbWU6aSxmaWxlX3BhdGg6YX09bztpZihpPT09ZS5ob3N0X25hbWUmJmE9PT1lLmZpbGVfcGF0aClyZXR1cm4gb31yZXR1cm4gbnVsbH0pKG4sZSk7cmV0dXJuIG51bGw9PT1vP2U6b30hKGZ1bmN0aW9uKHQpe3RbdC5VTlNQRUNJRklFRD0wXT0iVU5TUEVDSUZJRUQiLHRbdC5OT19URU5TT1I9MV09Ik5PX1RFTlNPUiIsdFt0LkNVUlRfSEVBTFRIPTJdPSJDVVJUX0hFQUxUSCIsdFt0LkNPTkNJU0VfSEVBTFRIPTNdPSJDT05DSVNFX0hFQUxUSCIsdFt0LkZVTExfSEVBTFRIPTRdPSJGVUxMX0hFQUxUSCIsdFt0LlNIQVBFPTVdPSJTSEFQRSIsdFt0LkZVTExfTlVNRVJJQ1M9Nl09IkZVTExfTlVNRVJJQ1MiLHRbdC5GVUxMX1RFTlNPUj03XT0iRlVMTF9URU5TT1IiLHRbdC5SRURVQ0VfSU5GX05BTl9USFJFRV9TTE9UUz04XT0iUkVEVUNFX0lORl9OQU5fVEhSRUVfU0xPVFMifSkob1p8fChvWj17fSkpLChmdW5jdGlvbih0KXt0LkZVTkNUSU9OX1JFQ09NUElMRV9BTEVSVD0iRnVuY3Rpb25SZWNvbXBpbGVzQWxlcnQiLHQuSU5GX05BTl9BTEVSVD0iSW5mTmFuQWxlcnQiLHQuVEVOU09SX1NIQVBFX0FMRVJUPSJUZW5zb3JTaGFwZUFsZXJ0In0pKGlafHwoaVo9e30pKSwoZnVuY3Rpb24odCl7dFt0LkVYRUNVVElPTj0wXT0iRVhFQ1VUSU9OIix0W3QuR1JBUEhfT1BfQ1JFQVRJT049MV09IkdSQVBIX09QX0NSRUFUSU9OIn0pKGFafHwoYVo9e30pKTtjb25zdCBkWj1tUyh7cnVuczp7fSxydW5zTG9hZGVkOntzdGF0ZTpCRS5OT1RfTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpudWxsfSxhY3RpdmVSdW5JZDpudWxsLGxhc3REYXRhUG9sbE9uc2V0VGltZU1zOi0xLGxhc3ROb25FbXB0eVBvbGxEYXRhVGltZU1zOjEsYWxlcnRzOnthbGVydHNMb2FkZWQ6e3N0YXRlOkJFLk5PVF9MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOm51bGx9LG51bUFsZXJ0czowLGFsZXJ0c0JyZWFrZG93bjp7fSxhbGVydHM6e30sZXhlY3V0aW9uSW5kaWNlczp7fSxncmFwaEV4ZWN1dGlvbkluZGljZXM6e30sZm9jdXNUeXBlOm51bGx9LGV4ZWN1dGlvbnM6KGZ1bmN0aW9uIHBaKCl7cmV0dXJue251bUV4ZWN1dGlvbnNMb2FkZWQ6e3N0YXRlOkJFLk5PVF9MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOm51bGx9LGV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQ6e2xvYWRpbmdSYW5nZXM6W10sbnVtRXhlY3V0aW9uczowLHBhZ2VMb2FkZWRTaXplczp7fX0sZGlzcGxheUNvdW50OjUwLHBhZ2VTaXplOjEwMCxzY3JvbGxCZWdpbkluZGV4OjAsZm9jdXNJbmRleDpudWxsLGV4ZWN1dGlvbkRpZ2VzdHM6e30sZXhlY3V0aW9uRGF0YTp7fX19KSgpLGdyYXBoRXhlY3V0aW9uczooZnVuY3Rpb24gbVooKXtyZXR1cm57bnVtRXhlY3V0aW9uc0xvYWRlZDp7c3RhdGU6QkUuTk9UX0xPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6bnVsbH0sZXhlY3V0aW9uRGlnZXN0c0xvYWRlZDp7bG9hZGluZ1JhbmdlczpbXSxudW1FeGVjdXRpb25zOjAscGFnZUxvYWRlZFNpemVzOnt9fSxkaXNwbGF5Q291bnQ6MTAwLHBhZ2VTaXplOjIwMCxzY3JvbGxCZWdpbkluZGV4OjAsZm9jdXNJbmRleDpudWxsLGdyYXBoRXhlY3V0aW9uRGlnZXN0czp7fSxncmFwaEV4ZWN1dGlvbkRhdGFMb2FkaW5nUGFnZXM6W10sZ3JhcGhFeGVjdXRpb25EYXRhUGFnZUxvYWRlZFNpemVzOnt9LGdyYXBoRXhlY3V0aW9uRGF0YTp7fX19KSgpLGdyYXBoczp7b3BzOnt9LGxvYWRpbmdPcHM6e30sZm9jdXNlZE9wOm51bGx9LHN0YWNrRnJhbWVzOnt9LGNvZGVMb2NhdGlvbkZvY3VzVHlwZTpudWxsLHN0aWNrVG9Cb3R0b21tb3N0RnJhbWVJbkZvY3VzZWRGaWxlOiExLHNvdXJjZUNvZGU6e3NvdXJjZUZpbGVMaXN0TG9hZGVkOntzdGF0ZTpCRS5OT1RfTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpudWxsfSxzb3VyY2VGaWxlTGlzdDpbXSxmaWxlQ29udGVudHM6W10sZm9jdXNMaW5lU3BlYzpudWxsfX0scFMoUHEsKHQ9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7cnVuc0xvYWRlZDpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5ydW5zTG9hZGVkKSx7c3RhdGU6QkUuTE9BRElOR30pfSkpKSxwUyhrcSwodD0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtydW5zTG9hZGVkOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LnJ1bnNMb2FkZWQpLHtzdGF0ZTpCRS5GQUlMRUR9KX0pKSkscFMod3EsKCh0LHtydW5zOmV9KT0+e2NvbnN0IG49T2JqZWN0LmtleXMoZSksbz1uLmxlbmd0aD4wJiZudWxsPT09dC5hY3RpdmVSdW5JZDtyZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtsYXN0Tm9uRW1wdHlQb2xsRGF0YVRpbWVNczpvP0RhdGUubm93KCk6dC5sYXN0Tm9uRW1wdHlQb2xsRGF0YVRpbWVNcyxydW5zOmUscnVuc0xvYWRlZDp7c3RhdGU6QkUuTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpEYXRlLm5vdygpfSxhY3RpdmVSdW5JZDpuLmxlbmd0aD4wP25bMF06bnVsbH0pfSkpLHBTKE9xLCh0PT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2xhc3REYXRhUG9sbE9uc2V0VGltZU1zOkRhdGUubm93KCl9KSkpLHBTKFNxLCh0PT5udWxsPT09dC5hY3RpdmVSdW5JZD90Ok9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7YWxlcnRzOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LmFsZXJ0cykse2FsZXJ0c0xvYWRlZDpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5hbGVydHMuYWxlcnRzTG9hZGVkKSx7c3RhdGU6QkUuTE9BRElOR30pfSl9KSkpLHBTKERxLCgodCx7bnVtQWxlcnRzOmUsYWxlcnRzQnJlYWtkb3duOm59KT0+e2lmKG51bGw9PT10LmFjdGl2ZVJ1bklkKXJldHVybiB0O2NvbnN0IG89ZT50LmFsZXJ0cy5udW1BbGVydHM7cmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7bGFzdE5vbkVtcHR5UG9sbERhdGFUaW1lTXM6bz9EYXRlLm5vdygpOnQubGFzdE5vbkVtcHR5UG9sbERhdGFUaW1lTXMsYWxlcnRzOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LmFsZXJ0cykse2FsZXJ0c0xvYWRlZDpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5hbGVydHMuYWxlcnRzTG9hZGVkKSx7c3RhdGU6QkUuTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpEYXRlLm5vdygpfSksbnVtQWxlcnRzOmUsYWxlcnRzQnJlYWtkb3duOm59KX0pfSkpLHBTKEVxLCgodCx7bnVtQWxlcnRzOmUsYWxlcnRzQnJlYWtkb3duOm4sYWxlcnRUeXBlOm8sYmVnaW46aSxhbGVydHM6YX0pPT57aWYobnVsbD09PXQuYWN0aXZlUnVuSWQpcmV0dXJuIHQ7Y29uc3Qgcj17fSxzPXQuYWxlcnRzLmV4ZWN1dGlvbkluZGljZXNbb10/dC5hbGVydHMuZXhlY3V0aW9uSW5kaWNlc1tvXS5zbGljZSgpOltdLGw9dC5hbGVydHMuZ3JhcGhFeGVjdXRpb25JbmRpY2VzW29dP3QuYWxlcnRzLmdyYXBoRXhlY3V0aW9uSW5kaWNlc1tvXS5zbGljZSgpOltdO2ZvcihsZXQgdD0wO3Q8YS5sZW5ndGg7Kyt0KXtjb25zdCBlPWkrdCxuPWFbdF07aWYocltlXT1uLG4uYWxlcnRfdHlwZT09PWlaLklORl9OQU5fQUxFUlQpe2NvbnN0IHQ9bjtzW2VdPXQuZXhlY3V0aW9uX2luZGV4LG51bGwhPT10LmdyYXBoX2V4ZWN1dGlvbl90cmFjZV9pbmRleCYmKGxbZV09dC5ncmFwaF9leGVjdXRpb25fdHJhY2VfaW5kZXgpfX12b2lkIDAhPT10LmFsZXJ0cy5hbGVydHNbb10mJk9iamVjdC5hc3NpZ24ocix0LmFsZXJ0cy5hbGVydHNbb10pO2xldCBjPXQuZXhlY3V0aW9ucy5zY3JvbGxCZWdpbkluZGV4LGQ9dC5ncmFwaEV4ZWN1dGlvbnMuZm9jdXNJbmRleDtpZihvPT09aVouSU5GX05BTl9BTEVSVCYmMD09PWkpe2NvbnN0IGU9YVswXTtjPU1hdGgubWF4KDAsZS5leGVjdXRpb25faW5kZXgtTWF0aC5mbG9vcih0LmV4ZWN1dGlvbnMuZGlzcGxheUNvdW50LzIpKSxudWxsIT09ZS5ncmFwaF9leGVjdXRpb25fdHJhY2VfaW5kZXgmJihkPWUuZ3JhcGhfZXhlY3V0aW9uX3RyYWNlX2luZGV4KX1yZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtleGVjdXRpb25zOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LmV4ZWN1dGlvbnMpLHtzY3JvbGxCZWdpbkluZGV4OmN9KSxncmFwaEV4ZWN1dGlvbnM6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuZ3JhcGhFeGVjdXRpb25zKSx7Zm9jdXNJbmRleDpkfSksYWxlcnRzOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LmFsZXJ0cykse2FsZXJ0c0xvYWRlZDpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5hbGVydHMuYWxlcnRzTG9hZGVkKSx7c3RhdGU6QkUuTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpEYXRlLm5vdygpfSksbnVtQWxlcnRzOmUsYWxlcnRzQnJlYWtkb3duOm4sYWxlcnRzOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LmFsZXJ0cy5hbGVydHMpLHtbb106cn0pLGV4ZWN1dGlvbkluZGljZXM6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuYWxlcnRzLmV4ZWN1dGlvbkluZGljZXMpLHtbb106c30pLGdyYXBoRXhlY3V0aW9uSW5kaWNlczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5hbGVydHMuZ3JhcGhFeGVjdXRpb25JbmRpY2VzKSx7W29dOmx9KX0pfSl9KSkscFMoQXEsKCh0LHthbGVydFR5cGU6ZX0pPT57Y29uc3Qgbj1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2FsZXJ0czpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5hbGVydHMpLHtmb2N1c1R5cGU6dC5hbGVydHMuZm9jdXNUeXBlPT09ZT9udWxsOmV9KX0pLG89bi5hbGVydHMuZm9jdXNUeXBlO2lmKG51bGwhPT1vKXtjb25zdCB0PW4uYWxlcnRzLmV4ZWN1dGlvbkluZGljZXNbb118fFtdO3ZvaWQgMCE9PXRbMF0mJihuLmV4ZWN1dGlvbnM9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LG4uZXhlY3V0aW9ucykse3Njcm9sbEJlZ2luSW5kZXg6TWF0aC5tYXgoMCxOdW1iZXIodFswXSktTWF0aC5mbG9vcihuLmV4ZWN1dGlvbnMuZGlzcGxheUNvdW50LzIpKX0pKX1yZXR1cm4gbn0pKSxwUyhScSwodD0+bnVsbD09PXQuYWN0aXZlUnVuSWQ/dDpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2V4ZWN1dGlvbnM6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuZXhlY3V0aW9ucykse251bUV4ZWN1dGlvbnNMb2FkZWQ6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuZXhlY3V0aW9ucy5udW1FeGVjdXRpb25zTG9hZGVkKSx7c3RhdGU6QkUuTE9BRElOR30pfSl9KSkpLHBTKFRxLCgodCx7bnVtRXhlY3V0aW9uczplfSk9PntpZihudWxsPT09dC5hY3RpdmVSdW5JZClyZXR1cm4gdDtjb25zdCBuPWU+dC5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQubnVtRXhlY3V0aW9ucyxvPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7bGFzdE5vbkVtcHR5UG9sbERhdGFUaW1lTXM6bj9EYXRlLm5vdygpOnQubGFzdE5vbkVtcHR5UG9sbERhdGFUaW1lTXMsZXhlY3V0aW9uczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5leGVjdXRpb25zKSx7bnVtRXhlY3V0aW9uc0xvYWRlZDpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5leGVjdXRpb25zLm51bUV4ZWN1dGlvbnNMb2FkZWQpLHtzdGF0ZTpCRS5MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOkRhdGUubm93KCl9KSxleGVjdXRpb25EaWdlc3RzTG9hZGVkOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LmV4ZWN1dGlvbnMuZXhlY3V0aW9uRGlnZXN0c0xvYWRlZCkse251bUV4ZWN1dGlvbnM6ZX0pfSl9KTtyZXR1cm4gZT4wJiZudWxsPT09dC5leGVjdXRpb25zLmZvY3VzSW5kZXgmJihvLmV4ZWN1dGlvbnMuZm9jdXNJbmRleD0wKSxvfSkpLHBTKE5xLCgodCxlKT0+e2lmKG51bGw9PT10LmFjdGl2ZVJ1bklkKXJldHVybiB0O2NvbnN0IG49Wy4uLnQuZXhlY3V0aW9ucy5leGVjdXRpb25EaWdlc3RzTG9hZGVkLmxvYWRpbmdSYW5nZXNdO3JldHVybi0xPT09bFoobixlLmJlZ2luLGUuZW5kKSYmbi5wdXNoKHtiZWdpbjplLmJlZ2luLGVuZDplLmVuZH0pLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7ZXhlY3V0aW9uczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5leGVjdXRpb25zKSx7ZXhlY3V0aW9uRGlnZXN0c0xvYWRlZDpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQpLHtsb2FkaW5nUmFuZ2VzOm59KX0pfSl9KSkscFMoSXEsKCh0LGUpPT57aWYobnVsbD09PXQuYWN0aXZlUnVuSWQpcmV0dXJuIHQ7Y29uc3Qgbj1bLi4udC5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQubG9hZGluZ1Jhbmdlc10sbz1sWihuLGUuYmVnaW4sZS5lbmQpOy0xIT09byYmbi5zcGxpY2UobywxKTtjb25zdCBpPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7ZXhlY3V0aW9uczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5leGVjdXRpb25zKSx7ZXhlY3V0aW9uRGlnZXN0c0xvYWRlZDpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQpLHtudW1FeGVjdXRpb25zOmUubnVtX2RpZ2VzdHMsbG9hZGluZ1JhbmdlczpufSksZXhlY3V0aW9uRGlnZXN0czpPYmplY3QuYXNzaWduKHt9LHQuZXhlY3V0aW9ucy5leGVjdXRpb25EaWdlc3RzKX0pfSk7Zm9yKGxldCB0PWUuYmVnaW47dDxlLmVuZDsrK3QpaS5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNbdF09ZS5leGVjdXRpb25fZGlnZXN0c1t0LWUuYmVnaW5dO2lmKGUuZW5kPmUuYmVnaW4pe2NvbnN0IG49ZS5iZWdpbi90LmV4ZWN1dGlvbnMucGFnZVNpemU7aS5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQucGFnZUxvYWRlZFNpemVzPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxpLmV4ZWN1dGlvbnMuZXhlY3V0aW9uRGlnZXN0c0xvYWRlZC5wYWdlTG9hZGVkU2l6ZXMpLHtbbl06ZS5lbmQtZS5iZWdpbn0pfXJldHVybiBpfSkpLHBTKHpxLCh0PT57aWYobnVsbD09PXQuYWN0aXZlUnVuSWQpcmV0dXJuIHQ7bGV0IGU9dC5leGVjdXRpb25zLnNjcm9sbEJlZ2luSW5kZXg7cmV0dXJuIGU+MCYmZS0tLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7ZXhlY3V0aW9uczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5leGVjdXRpb25zKSx7c2Nyb2xsQmVnaW5JbmRleDplfSl9KX0pKSxwUyhIcSwodD0+e2lmKG51bGw9PT10LmFjdGl2ZVJ1bklkKXJldHVybiB0O2xldCBlPXQuZXhlY3V0aW9ucy5zY3JvbGxCZWdpbkluZGV4O3JldHVybiBlK3QuZXhlY3V0aW9ucy5kaXNwbGF5Q291bnQrMTw9dC5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQubnVtRXhlY3V0aW9ucyYmZSsrLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7ZXhlY3V0aW9uczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5leGVjdXRpb25zKSx7c2Nyb2xsQmVnaW5JbmRleDplfSl9KX0pKSxwUyhGcSwoKHQsZSk9PntpZihlLmluZGV4PDB8fCFOdW1iZXIuaXNJbnRlZ2VyKGUuaW5kZXgpKXRocm93IG5ldyBFcnJvcihgQXR0ZW1wdCB0byBzY3JvbGwgdG8gbmVnYXRpdmUgb3Igbm9uLWludGVnZXIgZXhlY3V0aW9uIGluZGV4ICgke2UuaW5kZXh9KWApO2NvbnN0e2Rpc3BsYXlDb3VudDpufT10LmV4ZWN1dGlvbnMse251bUV4ZWN1dGlvbnM6b309dC5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQ7aWYoZS5pbmRleD5NYXRoLm1heCgwLG8tbikpdGhyb3cgbmV3IEVycm9yKGBBdHRlbXB0IHRvIHNjcm9sbCB0byBleGVjdXRpb24gaW5kZXggKCR7ZS5pbmRleH0pLCB3aGljaCBleGNlZWRzIG1heGltdW0gYWxsb3dlZCBpbmRleCAobnVtRXhlY3V0aW9ucz0ke299OyBkaXNwbGF5Q291bnQ9JHtufSlgKTtyZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtleGVjdXRpb25zOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LmV4ZWN1dGlvbnMpLHtzY3JvbGxCZWdpbkluZGV4OmUuaW5kZXh9KX0pfSkpLHBTKExxLCgodCxlKT0+e2NvbnN0IG49T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtleGVjdXRpb25zOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LmV4ZWN1dGlvbnMpLHtmb2N1c0luZGV4OnQuZXhlY3V0aW9ucy5zY3JvbGxCZWdpbkluZGV4K2UuZGlzcGxheUluZGV4fSksY29kZUxvY2F0aW9uRm9jdXNUeXBlOmFaLkVYRUNVVElPTixzb3VyY2VDb2RlOk9iamVjdC5hc3NpZ24oe30sdC5zb3VyY2VDb2RlKX0pO3JldHVybiBuLnNvdXJjZUNvZGUuZm9jdXNMaW5lU3BlYz1jWihuKSxufSkpLHBTKEJxLCgodCxlKT0+e2lmKG51bGw9PT10LmFjdGl2ZVJ1bklkKXJldHVybiB0O2NvbnN0IG49T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtleGVjdXRpb25zOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LmV4ZWN1dGlvbnMpLHtleGVjdXRpb25EYXRhOk9iamVjdC5hc3NpZ24oe30sdC5leGVjdXRpb25zLmV4ZWN1dGlvbkRhdGEpfSl9KTtmb3IobGV0IHQ9ZS5iZWdpbjt0PGUuZW5kOysrdCluLmV4ZWN1dGlvbnMuZXhlY3V0aW9uRGF0YVt0XT1lLmV4ZWN1dGlvbnNbdC1lLmJlZ2luXTtyZXR1cm4gbn0pKSxwUyhWcSwodD0+bnVsbD09PXQuYWN0aXZlUnVuSWQ/dDpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2dyYXBoRXhlY3V0aW9uczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5ncmFwaEV4ZWN1dGlvbnMpLHtudW1FeGVjdXRpb25zTG9hZGVkOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LmdyYXBoRXhlY3V0aW9ucy5udW1FeGVjdXRpb25zTG9hZGVkKSx7c3RhdGU6QkUuTE9BRElOR30pfSl9KSkpLHBTKGpxLCgodCx7bnVtR3JhcGhFeGVjdXRpb25zOmV9KT0+e2lmKG51bGw9PT10LmFjdGl2ZVJ1bklkKXJldHVybiB0O2NvbnN0IG49ZT50LmdyYXBoRXhlY3V0aW9ucy5leGVjdXRpb25EaWdlc3RzTG9hZGVkLm51bUV4ZWN1dGlvbnMsbz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2xhc3ROb25FbXB0eVBvbGxEYXRhVGltZU1zOm4/RGF0ZS5ub3coKTp0Lmxhc3ROb25FbXB0eVBvbGxEYXRhVGltZU1zLGdyYXBoRXhlY3V0aW9uczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5ncmFwaEV4ZWN1dGlvbnMpLHtudW1FeGVjdXRpb25zTG9hZGVkOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LmdyYXBoRXhlY3V0aW9ucy5udW1FeGVjdXRpb25zTG9hZGVkKSx7c3RhdGU6QkUuTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpEYXRlLm5vdygpfSksZXhlY3V0aW9uRGlnZXN0c0xvYWRlZDpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5ncmFwaEV4ZWN1dGlvbnMuZXhlY3V0aW9uRGlnZXN0c0xvYWRlZCkse251bUV4ZWN1dGlvbnM6ZX0pfSl9KTtyZXR1cm4gZT4wJiZudWxsPT09dC5ncmFwaEV4ZWN1dGlvbnMuZm9jdXNJbmRleCYmKG8uZ3JhcGhFeGVjdXRpb25zLmZvY3VzSW5kZXg9MCksb30pKSxwUyhVcSwoKHQse3BhZ2VJbmRleDplfSk9PntpZihudWxsPT09dC5hY3RpdmVSdW5JZClyZXR1cm4gdDtjb25zdCBuPXQuZ3JhcGhFeGVjdXRpb25zLmdyYXBoRXhlY3V0aW9uRGF0YUxvYWRpbmdQYWdlcy5zbGljZSgpO3JldHVybi0xPT09bi5pbmRleE9mKGUpJiZuLnB1c2goZSksT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtncmFwaEV4ZWN1dGlvbnM6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuZ3JhcGhFeGVjdXRpb25zKSx7Z3JhcGhFeGVjdXRpb25EYXRhTG9hZGluZ1BhZ2VzOm59KX0pfSkpLHBTKFdxLCgodCxlKT0+e2lmKG51bGw9PT10LmFjdGl2ZVJ1bklkKXJldHVybiB0O2NvbnN0e3BhZ2VTaXplOm59PXQuZ3JhcGhFeGVjdXRpb25zLG89dC5ncmFwaEV4ZWN1dGlvbnMuZ3JhcGhFeGVjdXRpb25EYXRhTG9hZGluZ1BhZ2VzLnNsaWNlKCksaT1PYmplY3QuYXNzaWduKHt9LHQuZ3JhcGhFeGVjdXRpb25zLmdyYXBoRXhlY3V0aW9uRGF0YVBhZ2VMb2FkZWRTaXplcyksYT1PYmplY3QuYXNzaWduKHt9LHQuZ3JhcGhFeGVjdXRpb25zLmdyYXBoRXhlY3V0aW9uRGF0YSk7Zm9yKGxldCB0PWUuYmVnaW47dDxlLmVuZDsrK3Qpe2NvbnN0IHI9TWF0aC5mbG9vcih0L24pOy0xIT09by5pbmRleE9mKHIpJiZvLnNwbGljZShvLmluZGV4T2YociksMSksdm9pZCAwPT09aVtyXSYmKGlbcl09MCksdm9pZCAwPT09YVt0XSYmaVtyXSsrLGFbdF09ZS5ncmFwaF9leGVjdXRpb25zW3QtZS5iZWdpbl19cmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7Z3JhcGhFeGVjdXRpb25zOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LmdyYXBoRXhlY3V0aW9ucykse2dyYXBoRXhlY3V0aW9uRGF0YUxvYWRpbmdQYWdlczpvLGdyYXBoRXhlY3V0aW9uRGF0YVBhZ2VMb2FkZWRTaXplczppLGdyYXBoRXhlY3V0aW9uRGF0YTphfSl9KX0pKSxwUyhHcSwoKHQsZSk9PntpZihlLmluZGV4PDB8fCFOdW1iZXIuaXNJbnRlZ2VyKGUuaW5kZXgpKXRocm93IG5ldyBFcnJvcihgQXR0ZW1wdCB0byBzY3JvbGwgdG8gbmVnYXRpdmUgb3Igbm9uLWludGVnZXIgZ3JhcGgtZXhlY3V0aW9uIGluZGV4ICgke2UuaW5kZXh9KWApO3JldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2dyYXBoRXhlY3V0aW9uczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5ncmFwaEV4ZWN1dGlvbnMpLHtzY3JvbGxCZWdpbkluZGV4OmUuaW5kZXh9KX0pfSkpLHBTKFlxLCgodCxlKT0+dVoodCxlLmdyYXBoX2lkLGUub3BfbmFtZSxlLmluZGV4KSkpLHBTKHFxLCgodCxlKT0+dVoodCxlLmdyYXBoX2lkLGUub3BfbmFtZSkpKSxwUyhacSwoKHQsZSk9Pntjb25zdHtncmFwaF9pZDpuLG9wX25hbWU6b309ZSxpPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7Z3JhcGhzOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LmdyYXBocykse2xvYWRpbmdPcHM6T2JqZWN0LmFzc2lnbih7fSx0LmdyYXBocy5sb2FkaW5nT3BzKX0pfSk7cmV0dXJuIHZvaWQgMD09PWkuZ3JhcGhzLmxvYWRpbmdPcHNbbl0mJihpLmdyYXBocy5sb2FkaW5nT3BzW25dPW5ldyBNYXApLGkuZ3JhcGhzLmxvYWRpbmdPcHNbbl0uaGFzKG8pfHxpLmdyYXBocy5sb2FkaW5nT3BzW25dLnNldChvLEJFLkxPQURJTkcpLGl9KSkscFMoWHEsKCh0LGUpPT57Y29uc3R7Z3JhcGhPcEluZm9SZXNwb25zZTpufT1lLHtncmFwaF9pZHM6b309bixpPW9bby5sZW5ndGgtMV0sYT1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2dyYXBoczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5ncmFwaHMpLHtvcHM6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuZ3JhcGhzLm9wcykse1tpXTpuZXcgTWFwKHQuZ3JhcGhzLm9wc1tpXSl9KSxsb2FkaW5nT3BzOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LmdyYXBocy5sb2FkaW5nT3BzKSx7W2ldOm5ldyBNYXAodC5ncmFwaHMubG9hZGluZ09wc1tpXSl9KX0pfSk7Zm9yKGNvbnN0IHQgb2Ygbi5pbnB1dHMpdC5kYXRhJiZhLmdyYXBocy5vcHNbaV0uc2V0KHQub3BfbmFtZSx0LmRhdGEpO2ZvcihsZXQgdD0wO3Q8bi5jb25zdW1lcnMubGVuZ3RoOysrdClmb3IoY29uc3QgZSBvZiBuLmNvbnN1bWVyc1t0XSllLmRhdGEmJmEuZ3JhcGhzLm9wc1tpXS5zZXQoZS5vcF9uYW1lLGUuZGF0YSk7cmV0dXJuIGEuZ3JhcGhzLm9wc1tpXS5zZXQobi5vcF9uYW1lLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxuKSx7aW5wdXRzOm4uaW5wdXRzLm1hcCgodD0+KHtvcF9uYW1lOnQub3BfbmFtZSxvdXRwdXRfc2xvdDp0Lm91dHB1dF9zbG90fSkpKSxjb25zdW1lcnM6bi5jb25zdW1lcnMubWFwKCh0PT50Lm1hcCgodD0+KHtvcF9uYW1lOnQub3BfbmFtZSxpbnB1dF9zbG90OnQuaW5wdXRfc2xvdH0pKSkpKX0pKSxhLmdyYXBocy5sb2FkaW5nT3BzW2ldLnNldChuLm9wX25hbWUsQkUuTE9BREVEKSxhfSkpLHBTKEtxLCh0PT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3NvdXJjZUNvZGU6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuc291cmNlQ29kZSkse3NvdXJjZUZpbGVMaXN0TG9hZGVkOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LnNvdXJjZUNvZGUuc291cmNlRmlsZUxpc3RMb2FkZWQpLHtzdGF0ZTpCRS5MT0FESU5HfSl9KX0pKSkscFMoSnEsKCh0LGUpPT57dmFyIG47Y29uc3Qgbz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3NvdXJjZUNvZGU6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuc291cmNlQ29kZSkse3NvdXJjZUZpbGVMaXN0TG9hZGVkOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LnNvdXJjZUNvZGUuc291cmNlRmlsZUxpc3RMb2FkZWQpLHtzdGF0ZTpCRS5MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOkRhdGUubm93KCl9KSxzb3VyY2VGaWxlTGlzdDplLnNvdXJjZUZpbGVzLGZpbGVDb250ZW50czp0LnNvdXJjZUNvZGUuZmlsZUNvbnRlbnRzLnNsaWNlKCl9KX0pLGk9ZS5zb3VyY2VGaWxlcy5sZW5ndGgse2ZpbGVDb250ZW50czphfT1vLnNvdXJjZUNvZGU7Zm9yKGxldCBlPTA7ZTxpOysrZSlhW2VdPW51bGwhPT0obj10LnNvdXJjZUNvZGUuZmlsZUNvbnRlbnRzW2VdKSYmdm9pZCAwIT09bj9uOntsb2FkU3RhdGU6QkUuTk9UX0xPQURFRCxsaW5lczpudWxsfTtyZXR1cm4gb30pKSxwUyhRcSwoKHQsZSk9Pntjb25zdCBuPXJaKHQpLG89T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtzb3VyY2VDb2RlOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LnNvdXJjZUNvZGUpLHtmb2N1c0xpbmVTcGVjOmUuc3RhY2tGcmFtZX0pfSk7cmV0dXJuIG51bGwhPT1uJiYoby5zdGlja1RvQm90dG9tbW9zdEZyYW1lSW5Gb2N1c2VkRmlsZT0oZnVuY3Rpb24gaSh0LGUpe2xldCBuPS0xLG89LTE7aWYodC5mb3JFYWNoKCgoe2ZpbGVfcGF0aDp0LGxpbmVubzppfSxhKT0+e3Q9PT1lLmZpbGVfcGF0aCYmKG89YSxpPT09ZS5saW5lbm8mJihuPWEpKX0pKSwtMT09PW4pdGhyb3cgbmV3IEVycm9yKGBTdGFjayBmcmFtZSAke0pTT04uc3RyaW5naWZ5KGUpfSBpcyBub3QgZm91bmQuYCk7cmV0dXJuIG49PT1vfSkobixlLnN0YWNrRnJhbWUpKSxvfSkpLHBTKCRxLCgodCxlKT0+e2NvbnN0IG49T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtzb3VyY2VDb2RlOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LnNvdXJjZUNvZGUpLHtmaWxlQ29udGVudHM6dC5zb3VyY2VDb2RlLmZpbGVDb250ZW50cy5zbGljZSgpfSl9KSxvPXNaKG4uc291cmNlQ29kZS5zb3VyY2VGaWxlTGlzdCxlKTtpZighKG8+PTApKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgdGhlIGZvbGxvd2luZyBmaWxlIGluIGZpbGUgbGlzdDogaG9zdF9uYW1lPSIke2UuaG9zdF9uYW1lfSIsIGZpbGVfcGF0aD0iJHtlLmZpbGVfcGF0aH0iYCk7cmV0dXJuIG4uc291cmNlQ29kZS5maWxlQ29udGVudHMuc3BsaWNlKG8sMSxPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sbi5zb3VyY2VDb2RlLmZpbGVDb250ZW50c1tvXSkse2xvYWRTdGF0ZTpCRS5MT0FESU5HfSkpLG59KSkscFModFosKCh0LGUpPT57Y29uc3Qgbj1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3NvdXJjZUNvZGU6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuc291cmNlQ29kZSkse2ZpbGVDb250ZW50czp0LnNvdXJjZUNvZGUuZmlsZUNvbnRlbnRzLnNsaWNlKCl9KX0pLG89c1oobi5zb3VyY2VDb2RlLnNvdXJjZUZpbGVMaXN0LGUpO2lmKCEobz49MCkpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCB0aGUgZm9sbG93aW5nIGZpbGUgaW4gZmlsZSBsaXN0OiBob3N0X25hbWU9IiR7ZS5ob3N0X25hbWV9IiwgZmlsZV9wYXRoPSIke2UuZmlsZV9wYXRofSJgKTtyZXR1cm4gbi5zb3VyY2VDb2RlLmZpbGVDb250ZW50cy5zcGxpY2UobywxLHtsb2FkU3RhdGU6QkUuTE9BREVELGxpbmVzOmUubGluZXN9KSxufSkpLHBTKGVaLCgodCxlKT0+e2lmKG51bGw9PT10LmFjdGl2ZVJ1bklkKXJldHVybiB0O2NvbnN0IG49T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtzdGFja0ZyYW1lczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5zdGFja0ZyYW1lcyksZS5zdGFja0ZyYW1lcyksc291cmNlQ29kZTpPYmplY3QuYXNzaWduKHt9LHQuc291cmNlQ29kZSl9KTtyZXR1cm4gbi5zb3VyY2VDb2RlLmZvY3VzTGluZVNwZWM9Y1oobiksbn0pKSk7ZnVuY3Rpb24gdVoodCxlLG4sbyl7Y29uc3QgaT1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2dyYXBoczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5ncmFwaHMpLHtmb2N1c2VkT3A6e2dyYXBoSWQ6ZSxvcE5hbWU6bn19KSxjb2RlTG9jYXRpb25Gb2N1c1R5cGU6YVouR1JBUEhfT1BfQ1JFQVRJT04sc291cmNlQ29kZTpPYmplY3QuYXNzaWduKHt9LHQuc291cmNlQ29kZSl9KTtyZXR1cm4gaS5zb3VyY2VDb2RlLmZvY3VzTGluZVNwZWM9Y1ooaSksdm9pZCAwIT09byYmKGkuZ3JhcGhFeGVjdXRpb25zPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LmdyYXBoRXhlY3V0aW9ucykse2ZvY3VzSW5kZXg6b30pKSxpfWZ1bmN0aW9uIGZaKHQsZSl7cmV0dXJuIGRaKHQsZSl9Y29uc3QgZ1o9RmsoblopLGhaPXprKGdaLCh0PT50LnJ1bnMpKSxiWj16ayhnWiwodD0+dC5ydW5zTG9hZGVkKSkseVo9emsoZ1osKHQ9PnQuYWN0aXZlUnVuSWQpKSxfWj16ayhnWiwodD0+dC5sYXN0RGF0YVBvbGxPbnNldFRpbWVNcy10Lmxhc3ROb25FbXB0eVBvbGxEYXRhVGltZU1zKSksQ1o9emsoZ1osKHQ9PnQuYWxlcnRzKSksTVo9emsoQ1osKHQ9PnQuYWxlcnRzTG9hZGVkKSksdlo9emsoQ1osKHQ9PnQubnVtQWxlcnRzKSkseFo9emsoQ1osKHQ9PnQuZm9jdXNUeXBlKSksT1o9emsoQ1osKHQ9Pm51bGw9PT10LmZvY3VzVHlwZT8wOnQuYWxlcnRzQnJlYWtkb3duW3QuZm9jdXNUeXBlXXx8MCkpLFBaPXprKENaLCh0PT5udWxsPT09dC5mb2N1c1R5cGV8fHZvaWQgMD09PXQuYWxlcnRzW3QuZm9jdXNUeXBlXT9udWxsOnQuYWxlcnRzW3QuZm9jdXNUeXBlXSkpLHdaPXprKENaLCh0PT50LmFsZXJ0c0JyZWFrZG93bikpLGtaPXprKGdaLCh0PT50LmV4ZWN1dGlvbnMpKSxTWj16ayhrWiwodD0+dC5udW1FeGVjdXRpb25zTG9hZGVkKSksRFo9emsoa1osKHQ9PnQuZXhlY3V0aW9uRGlnZXN0c0xvYWRlZCkpLEVaPXprKGtaLCh0PT50LmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQubnVtRXhlY3V0aW9ucykpLEFaPXprKGtaLCh0PT50LnNjcm9sbEJlZ2luSW5kZXgpKSxSWj16ayhrWiwodD0+dC5wYWdlU2l6ZSkpLFRaPXprKGtaLCh0PT50LmRpc3BsYXlDb3VudCkpLE5aPXprKGtaLCh0PT57Y29uc3QgZT1bXTtmb3IobGV0IG49dC5zY3JvbGxCZWdpbkluZGV4O248dC5zY3JvbGxCZWdpbkluZGV4K3QuZGlzcGxheUNvdW50OysrbillLnB1c2gobiBpbiB0LmV4ZWN1dGlvbkRpZ2VzdHM/dC5leGVjdXRpb25EaWdlc3RzW25dOm51bGwpO3JldHVybiBlfSkpLElaPXprKGdaLCh0PT50LmdyYXBoRXhlY3V0aW9ucykpLHpaPXprKElaLCh0PT50Lm51bUV4ZWN1dGlvbnNMb2FkZWQpKSxIWj16ayhnWiwodD0+dC5ncmFwaEV4ZWN1dGlvbnMuZXhlY3V0aW9uRGlnZXN0c0xvYWRlZC5udW1FeGVjdXRpb25zKSksRlo9emsoSVosKHQ9PnQuc2Nyb2xsQmVnaW5JbmRleCkpLExaPXprKElaLCh0PT50LmRpc3BsYXlDb3VudCkpLEJaPXprKElaLCh0PT50LnBhZ2VTaXplKSksVlo9emsoSVosKHQ9PnQuZ3JhcGhFeGVjdXRpb25EYXRhTG9hZGluZ1BhZ2VzKSksalo9emsoSVosKHQ9PnQuZ3JhcGhFeGVjdXRpb25EYXRhUGFnZUxvYWRlZFNpemVzKSksVVo9emsoSVosKHQ9PnQuZ3JhcGhFeGVjdXRpb25EYXRhKSksV1o9emsoSVosKHQ9PnQuZm9jdXNJbmRleCkpLEdaPXprKGdaLCh0PT50LmdyYXBocykpLFlaPXprKEdaLCh0PT57Y29uc3R7Zm9jdXNlZE9wOmUsb3BzOm59PXQ7cmV0dXJuIG51bGw9PT1lfHx2b2lkIDA9PT1uW2UuZ3JhcGhJZF0/bnVsbDpuW2UuZ3JhcGhJZF0uZ2V0KGUub3BOYW1lKXx8bnVsbH0pKSxxWj16ayhHWiwodD0+e2NvbnN0e2ZvY3VzZWRPcDplLG9wczpufT10O2lmKG51bGwhPT1lJiZ2b2lkIDAhPT1uW2UuZ3JhcGhJZF0mJm5bZS5ncmFwaElkXS5oYXMoZS5vcE5hbWUpKXtjb25zdCB0PW5bZS5ncmFwaElkXSx7aW5wdXRzOm99PXQuZ2V0KGUub3BOYW1lKTtyZXR1cm4gby5tYXAoKGU9Pntjb25zdCBuPU9iamVjdC5hc3NpZ24oe30sZSk7cmV0dXJuIHQuaGFzKGUub3BfbmFtZSkmJihuLmRhdGE9dC5nZXQoZS5vcF9uYW1lKSksbn0pKX1yZXR1cm4gbnVsbH0pKSxaWj16ayhXWixVWixxWiwoKHQsZSxuKT0+e2lmKG51bGw9PT10fHxudWxsPT09bilyZXR1cm4gbnVsbDtjb25zdCBvPW4ubWFwKCh0PT4hMSkpLGk9W107aWYoMD09PW4ubGVuZ3RoKXJldHVybiBpO2NvbnN0IGE9ZVt0XS5ncmFwaF9pZCxyPU1hdGgubWF4KDAsdC0yMDApO2ZvcihsZXQgcz10LTE7cz49cjstLXMpaWYodm9pZCAwIT09ZVtzXSlmb3IobGV0IHQ9MDt0PG4ubGVuZ3RoJiYob1t0XXx8ZVtzXS5ncmFwaF9pZCE9PWF8fGVbc10ub3BfbmFtZSE9PW5bdF0ub3BfbmFtZXx8ZVtzXS5vdXRwdXRfc2xvdCE9PW5bdF0ub3V0cHV0X3Nsb3R8fChpLnB1c2gocyksb1t0XT0hMCxpLmxlbmd0aCE9PW4ubGVuZ3RoKSk7Kyt0KTtyZXR1cm4gaX0pKSxYWj16ayhHWiwodD0+e2NvbnN0e2ZvY3VzZWRPcDplLG9wczpufT10O2lmKG51bGwhPT1lJiZ2b2lkIDAhPT1uW2UuZ3JhcGhJZF0mJm5bZS5ncmFwaElkXS5oYXMoZS5vcE5hbWUpKXtjb25zdCB0PW5bZS5ncmFwaElkXSx7Y29uc3VtZXJzOm99PXQuZ2V0KGUub3BOYW1lKTtyZXR1cm4gby5tYXAoKGU9PmUubWFwKChlPT57Y29uc3Qgbj1PYmplY3QuYXNzaWduKHt9LGUpO3JldHVybiB0LmhhcyhlLm9wX25hbWUpJiYobi5kYXRhPXQuZ2V0KGUub3BfbmFtZSkpLG59KSkpKX1yZXR1cm4gbnVsbH0pKSxLWj16ayhnWiwodD0+e2NvbnN0IGU9dC5leGVjdXRpb25zLnNjcm9sbEJlZ2luSW5kZXgsbj10LmV4ZWN1dGlvbnMuc2Nyb2xsQmVnaW5JbmRleCt0LmV4ZWN1dGlvbnMuZGlzcGxheUNvdW50LG89bmV3IEFycmF5KG4tZSkuZmlsbChudWxsKSxpPXQuYWxlcnRzLmZvY3VzVHlwZTtpZihudWxsPT09aSlyZXR1cm4gbztjb25zdCBhPXQuYWxlcnRzLmV4ZWN1dGlvbkluZGljZXNbaV07aWYodm9pZCAwPT09YSlyZXR1cm4gbztmb3IobGV0IGk9ZTtpPG47KytpKWEuaW5jbHVkZXMoaSkmJihvW2ktZV09dC5hbGVydHMuZm9jdXNUeXBlKTtyZXR1cm4gb30pKSxKWj16ayhnWiwodD0+dC5leGVjdXRpb25zKSksUVo9emsoSlosKHQ9PnQuZm9jdXNJbmRleCkpLCRaPXprKEpaLCh0PT57aWYobnVsbD09PXQuZm9jdXNJbmRleClyZXR1cm4gbnVsbDtjb25zdHtmb2N1c0luZGV4OmUsc2Nyb2xsQmVnaW5JbmRleDpuLGRpc3BsYXlDb3VudDpvfT10O3JldHVybiBlPG58fGU+PW4rbz9udWxsOmUtbn0pKSx0WD16ayhKWiwodD0+dC5leGVjdXRpb25EYXRhKSksZVg9emsoZ1osKHQ9PnQuZ3JhcGhzLmxvYWRpbmdPcHMpKSxuWD16ayhnWiwodD0+dC5zdGFja0ZyYW1lcykpLG9YPXprKEpaLCh0PT57Y29uc3R7Zm9jdXNJbmRleDplLGV4ZWN1dGlvbkRhdGE6bn09dDtyZXR1cm4gbnVsbD09PWV8fHZvaWQgMD09PW5bZV0/bnVsbDpuW2VdfSkpLGlYPXprKGdaLFFaLG9YLFlaLCgodCxlLG4sbyk9Pntjb25zdHtjb2RlTG9jYXRpb25Gb2N1c1R5cGU6aX09dDtyZXR1cm4gbnVsbD09PWk/bnVsbDppPT09YVouRVhFQ1VUSU9OP251bGw9PT1lfHxudWxsPT09bj9udWxsOntjb2RlTG9jYXRpb25UeXBlOmFaLkVYRUNVVElPTixvcFR5cGU6bi5vcF90eXBlLGV4ZWN1dGlvbkluZGV4OmV9Om51bGw9PT1vP251bGw6e2NvZGVMb2NhdGlvblR5cGU6YVouR1JBUEhfT1BfQ1JFQVRJT04sb3BUeXBlOm8ub3BfdHlwZSxvcE5hbWU6by5vcF9uYW1lfX0pKSxhWD16ayhnWixyWiksclg9emsoZ1osKHQ9PnQuc291cmNlQ29kZSkpLHNYPXprKHJYLCh0PT50LnNvdXJjZUZpbGVMaXN0TG9hZGVkKSk7emsoclgsKHQ9PnQuc291cmNlRmlsZUxpc3QpKTtjb25zdCBsWD16ayhyWCwodD0+e2NvbnN0e3NvdXJjZUZpbGVMaXN0OmUsZm9jdXNMaW5lU3BlYzpufT10O3JldHVybiBudWxsPT09bj8tMTpzWihlLG4pfSkpLGNYPXprKHJYLGxYLCgodCxlKT0+LTE9PT1lP251bGw6dC5maWxlQ29udGVudHNbZV18fG51bGwpKSxkWD16ayhnWiwodD0+dC5zb3VyY2VDb2RlLmZvY3VzTGluZVNwZWMpKSxwWD16ayhnWiwodD0+dC5zdGlja1RvQm90dG9tbW9zdEZyYW1lSW5Gb2N1c2VkRmlsZSkpLG1YPWZ1bmN0aW9uKHQpe3JldHVyblt0XX07ZnVuY3Rpb24gdVgodCxlKXtpZigxJnQpe2NvbnN0IHQ9RXUoKTtPdSgwLCJkaXYiLDcpLE51KCJjbGljayIsKGZ1bmN0aW9uIG4oKXtyYSh0KTtjb25zdCBvPWUuJGltcGxpY2l0O3JldHVybiBMdSgpLm9uVG9nZ2xlRm9jdXNUeXBlLmVtaXQoby50eXBlKX0pKSxPdSgxLCJkaXYiLDgpLE1mKDIpLFB1KCksT3UoMywiZGl2Iiw5KSxNZig0KSxQdSgpLHd1KDUsImRpdiIpLFB1KCl9aWYoMiZ0KXtjb25zdCB0PWUuJGltcGxpY2l0LG49THUoKTt2dSgibmdDbGFzcyIsZ2IoNCxtWCx0LnR5cGU9PT1uLmZvY3VzVHlwZT8iZm9jdXMiOiIiKSksSmMoMiksdmYodC5kaXNwbGF5TmFtZSksSmMoMiksT2YoIiAiLHQuZGlzcGxheVN5bWJvbCwiOiAiLHQuY291bnQsIiAiKX19Y2xhc3MgZlh7Y29uc3RydWN0b3IoKXt0aGlzLm51bUFsZXJ0cz0wLHRoaXMuYWxlcnRzQnJlYWtkb3duPVtdLHRoaXMuZm9jdXNUeXBlPW51bGwsdGhpcy5vblRvZ2dsZUZvY3VzVHlwZT1uZXcgQWJ9fWZYLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxmWCl9LGZYLsm1Y21wPVVvKHt0eXBlOmZYLHNlbGVjdG9yczpbWyJhbGVydHMtY29tcG9uZW50Il1dLGlucHV0czp7bnVtQWxlcnRzOiJudW1BbGVydHMiLGFsZXJ0c0JyZWFrZG93bjoiYWxlcnRzQnJlYWtkb3duIixmb2N1c1R5cGU6ImZvY3VzVHlwZSJ9LG91dHB1dHM6e29uVG9nZ2xlRm9jdXNUeXBlOiJvblRvZ2dsZUZvY3VzVHlwZSJ9LGRlY2xzOjEwLHZhcnM6NSxjb25zdHM6W1sxLCJhbGVydHMtY29udGFpbmVyIl0sWzEsImRlYnVnZ2luZy10aXRsZSJdLFsxLCJudW0tYWxlcnRzLWNvbnRhaW5lciJdLFsxLCJudW0tYWxlcnRzLWxhYmVsIl0sWzEsIm51bS1hbGVydHMtdmFsdWUiLDMsIm5nQ2xhc3MiXSxbMSwiYWxlcnRzLWJyZWFrZG93bi1jb250YWluZXIiXSxbImNsYXNzIiwiYWxlcnRzLWJyZWFrZG93bi10eXBlIiwzLCJuZ0NsYXNzIiwiY2xpY2siLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJhbGVydHMtYnJlYWtkb3duLXR5cGUiLDMsIm5nQ2xhc3MiLCJjbGljayJdLFsxLCJhbGVydC10eXBlLW5hbWUiXSxbMSwiYWxlcnQtdHlwZS1jb3VudCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoT3UoMCwiZGl2IiwwKSxPdSgxLCJkaXYiLDEpLE1mKDIsIkRlYnVnZ2luZyIpLFB1KCksT3UoMywiZGl2IiwyKSxPdSg0LCJkaXYiLDMpLE1mKDUsIkFsZXJ0cyIpLFB1KCksT3UoNiwiZGl2Iiw0KSxNZig3KSxQdSgpLFB1KCksT3UoOCwiZGl2Iiw1KSxXbSg5LHVYLDYsNiwiZGl2Iiw2KSxQdSgpLFB1KCkpLDImZSYmKEpjKDYpLHZ1KCJuZ0NsYXNzIixnYigzLG1YLG4ubnVtQWxlcnRzPjA/Im5vbi16ZXJvIjoiIikpLEpjKDEpLHhmKCIgIixuLm51bUFsZXJ0cywiICIpLEpjKDIpLHZ1KCJuZ0Zvck9mIixuLmFsZXJ0c0JyZWFrZG93bikpfSxkaXJlY3RpdmVzOlt0dixvdl0sc3R5bGVzOlsiLmFsZXJ0cy1icmVha2Rvd24tY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGZvbnQtc2l6ZTogMTNweDtcbiAgcGFkZGluZzogMTBweCAxMHB4IDEwcHg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLmFsZXJ0cy1icmVha2Rvd24tdHlwZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICBib3JkZXItcmFkaXVzOiAwIDEwcHggMTBweCAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBhZGRpbmc6IDZweCAwIDZweCA1MHB4O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuXG4uYWxlcnRzLWJyZWFrZG93bi10eXBlLmZvY3VzW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmVlZTA7XG59XG5cbi5hbGVydHMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGZvbnQtZmFtaWx5OiAnUm9ib3RvJywgQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtcbn1cblxuLmFsZXJ0LXR5cGUtY291bnRbX25nY29udGVudC0lQ09NUCVdIHtcbiAgXG4gIGJhY2tncm91bmQtY29sb3I6ICNlNTI1OTI7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgY29sb3I6ICNmZmY7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcGFkZGluZzogM3B4O1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHJpZ2h0OiAyMHB4O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuXG4uYWxlcnQtdHlwZS1uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcGFkZGluZzogM3B4O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuXG4uZGVidWdnaW5nLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGZvbnQtc2l6ZTogMThweDtcbn1cblxuLm51bS1hbGVydHMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBwYWRkaW5nOiAxMHB4IDEwcHggMTBweCAzMHB4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi5udW0tYWxlcnRzLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgZm9udC1zaXplOiAxM3B4O1xufVxuXG4ubnVtLWFsZXJ0cy12YWx1ZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICBib3JkZXItcmFkaXVzOiAxMnB4O1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGZvbnQtc2l6ZTogMTNweDtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgbGluZS1oZWlnaHQ6IDI0cHg7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgcmlnaHQ6IDIwcHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgd2lkdGg6IDI0cHg7XG59XG5cbi5udW0tYWxlcnRzLXZhbHVlLm5vbi16ZXJvW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmI3ODA7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufSJdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihmWCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJhbGVydHMtY29tcG9uZW50Iix0ZW1wbGF0ZVVybDoiLi9hbGVydHNfY29tcG9uZW50Lm5nLmh0bWwiLHN0eWxlVXJsczpbIi4vYWxlcnRzX2NvbXBvbmVudC5jc3MiXX1dfV0sbnVsbCx7bnVtQWxlcnRzOlt7dHlwZTp5X31dLGFsZXJ0c0JyZWFrZG93bjpbe3R5cGU6eV99XSxmb2N1c1R5cGU6W3t0eXBlOnlffV0sb25Ub2dnbGVGb2N1c1R5cGU6W3t0eXBlOl9ffV19KTtjb25zdCBnWD17W2laLkZVTkNUSU9OX1JFQ09NUElMRV9BTEVSVF06e2Rpc3BsYXlOYW1lOiJGdW5jdGlvbiByZWNvbXBpbGVzIixkaXNwbGF5U3ltYm9sOiJDIn0sW2laLklORl9OQU5fQUxFUlRdOntkaXNwbGF5TmFtZToiTmFOL+KIniIsZGlzcGxheVN5bWJvbDoi4oieIn0sW2laLlRFTlNPUl9TSEFQRV9BTEVSVF06e2Rpc3BsYXlOYW1lOiJUZW5zb3Igc2hhcGUiLGRpc3BsYXlTeW1ib2w6IuKWoCJ9fTtjbGFzcyBoWHtjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXQsdGhpcy5udW1BbGVydHMkPXRoaXMuc3RvcmUucGlwZShSayh2WikpLHRoaXMuYWxlcnRzQnJlYWtkb3duJD10aGlzLnN0b3JlLnBpcGUoUmsoemsod1osKHQ9Pntjb25zdCBlPU9iamVjdC5rZXlzKHQpO3JldHVybiBlLnNvcnQoKSxlLm1hcCgoZT0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt0eXBlOmV9LGdYW2VdKSx7Y291bnQ6dFtlXX0pKSl9KSkpKSx0aGlzLmZvY3VzVHlwZSQ9dGhpcy5zdG9yZS5waXBlKFJrKHhaKSl9b25Ub2dnbGVGb2N1c1R5cGUodCl7dGhpcy5zdG9yZS5kaXNwYXRjaChBcSh7YWxlcnRUeXBlOnR9KSl9fWhYLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxoWCkoTXUoRWspKX0saFguybVjbXA9VW8oe3R5cGU6aFgsc2VsZWN0b3JzOltbInRmLWRlYnVnZ2VyLXYyLWFsZXJ0cyJdXSxkZWNsczo0LHZhcnM6OSxjb25zdHM6W1szLCJudW1BbGVydHMiLCJhbGVydHNCcmVha2Rvd24iLCJmb2N1c1R5cGUiLCJvblRvZ2dsZUZvY3VzVHlwZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoT3UoMCwiYWxlcnRzLWNvbXBvbmVudCIsMCksTnUoIm9uVG9nZ2xlRm9jdXNUeXBlIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vblRvZ2dsZUZvY3VzVHlwZShlKX0pKSxPYigxLCJhc3luYyIpLE9iKDIsImFzeW5jIiksT2IoMywiYXN5bmMiKSxQdSgpKSwyJmUmJnZ1KCJudW1BbGVydHMiLFBiKDEsMyxuLm51bUFsZXJ0cyQpKSgiYWxlcnRzQnJlYWtkb3duIixQYigyLDUsbi5hbGVydHNCcmVha2Rvd24kKSkoImZvY3VzVHlwZSIsUGIoMyw3LG4uZm9jdXNUeXBlJCkpfSxkaXJlY3RpdmVzOltmWF0scGlwZXM6W012XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGhYLFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6InRmLWRlYnVnZ2VyLXYyLWFsZXJ0cyIsdGVtcGxhdGU6J1xuICAgIDxhbGVydHMtY29tcG9uZW50XG4gICAgICBbbnVtQWxlcnRzXT0ibnVtQWxlcnRzJCB8IGFzeW5jIlxuICAgICAgW2FsZXJ0c0JyZWFrZG93bl09ImFsZXJ0c0JyZWFrZG93biQgfCBhc3luYyJcbiAgICAgIFtmb2N1c1R5cGVdPSJmb2N1c1R5cGUkIHwgYXN5bmMiXG4gICAgICAob25Ub2dnbGVGb2N1c1R5cGUpPSJvblRvZ2dsZUZvY3VzVHlwZSgkZXZlbnQpIlxuICAgID5cbiAgICA8L2FsZXJ0cy1jb21wb25lbnQ+XG4gICcsY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkVrfV19KSxudWxsKTtjb25zdCBiWD1bInNsaWRlcldyYXBwZXIiXSx5WD12SSh7cGFzc2l2ZTohMX0pLF9YPXtwcm92aWRlOnZWLHVzZUV4aXN0aW5nOkluKCgoKT0+dlgpKSxtdWx0aTohMH07Y2xhc3MgQ1h7fWNvbnN0IE1YPUh6KEl6KE56KGNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuX2VsZW1lbnRSZWY9dH19KSwiYWNjZW50IikpO2NsYXNzIHZYIGV4dGVuZHMgTVh7Y29uc3RydWN0b3IodCxlLG4sbyxpLGEscixzKXtzdXBlcih0KSx0aGlzLl9mb2N1c01vbml0b3I9ZSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1uLHRoaXMuX2Rpcj1vLHRoaXMuX25nWm9uZT1hLHRoaXMuX2FuaW1hdGlvbk1vZGU9cyx0aGlzLl9pbnZlcnQ9ITEsdGhpcy5fbWF4PTEwMCx0aGlzLl9taW49MCx0aGlzLl9zdGVwPTEsdGhpcy5fdGh1bWJMYWJlbD0hMSx0aGlzLl90aWNrSW50ZXJ2YWw9MCx0aGlzLl92YWx1ZT1udWxsLHRoaXMuX3ZlcnRpY2FsPSExLHRoaXMuY2hhbmdlPW5ldyBBYix0aGlzLmlucHV0PW5ldyBBYix0aGlzLnZhbHVlQ2hhbmdlPW5ldyBBYix0aGlzLm9uVG91Y2hlZD0oKT0+e30sdGhpcy5fcGVyY2VudD0wLHRoaXMuX2lzU2xpZGluZz0hMSx0aGlzLl9pc0FjdGl2ZT0hMSx0aGlzLl90aWNrSW50ZXJ2YWxQZXJjZW50PTAsdGhpcy5fc2xpZGVyRGltZW5zaW9ucz1udWxsLHRoaXMuX2NvbnRyb2xWYWx1ZUFjY2Vzc29yQ2hhbmdlRm49KCk9Pnt9LHRoaXMuX2RpckNoYW5nZVN1YnNjcmlwdGlvbj1sLkVNUFRZLHRoaXMuX3BvaW50ZXJEb3duPXQ9Pnt0aGlzLmRpc2FibGVkfHx0aGlzLl9pc1NsaWRpbmd8fCF4WCh0KSYmMCE9PXQuYnV0dG9ufHx0aGlzLl9uZ1pvbmUucnVuKCgoKT0+e2NvbnN0IGU9dGhpcy52YWx1ZSxuPU9YKHQpO3RoaXMuX2lzU2xpZGluZz0hMCx0aGlzLl9sYXN0UG9pbnRlckV2ZW50PXQsdC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2ZvY3VzSG9zdEVsZW1lbnQoKSx0aGlzLl9vbk1vdXNlZW50ZXIoKSx0aGlzLl9iaW5kR2xvYmFsRXZlbnRzKHQpLHRoaXMuX2ZvY3VzSG9zdEVsZW1lbnQoKSx0aGlzLl91cGRhdGVWYWx1ZUZyb21Qb3NpdGlvbihuKSx0aGlzLl92YWx1ZU9uU2xpZGVTdGFydD1lLGUhPXRoaXMudmFsdWUmJnRoaXMuX2VtaXRJbnB1dEV2ZW50KCl9KSl9LHRoaXMuX3BvaW50ZXJNb3ZlPXQ9PntpZih0aGlzLl9pc1NsaWRpbmcpe3QucHJldmVudERlZmF1bHQoKTtjb25zdCBlPXRoaXMudmFsdWU7dGhpcy5fbGFzdFBvaW50ZXJFdmVudD10LHRoaXMuX3VwZGF0ZVZhbHVlRnJvbVBvc2l0aW9uKE9YKHQpKSxlIT10aGlzLnZhbHVlJiZ0aGlzLl9lbWl0SW5wdXRFdmVudCgpfX0sdGhpcy5fcG9pbnRlclVwPXQ9Pnt0aGlzLl9pc1NsaWRpbmcmJih0LnByZXZlbnREZWZhdWx0KCksdGhpcy5fcmVtb3ZlR2xvYmFsRXZlbnRzKCksdGhpcy5faXNTbGlkaW5nPSExLHRoaXMuX3ZhbHVlT25TbGlkZVN0YXJ0PT10aGlzLnZhbHVlfHx0aGlzLmRpc2FibGVkfHx0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoKSx0aGlzLl92YWx1ZU9uU2xpZGVTdGFydD10aGlzLl9sYXN0UG9pbnRlckV2ZW50PW51bGwpfSx0aGlzLl93aW5kb3dCbHVyPSgpPT57dGhpcy5fbGFzdFBvaW50ZXJFdmVudCYmdGhpcy5fcG9pbnRlclVwKHRoaXMuX2xhc3RQb2ludGVyRXZlbnQpfSx0aGlzLl9kb2N1bWVudD1yLHRoaXMudGFiSW5kZXg9cGFyc2VJbnQoaSl8fDAsYS5ydW5PdXRzaWRlQW5ndWxhcigoKCk9Pntjb25zdCBlPXQubmF0aXZlRWxlbWVudDtlLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsdGhpcy5fcG9pbnRlckRvd24seVgpLGUuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdGhpcy5fcG9pbnRlckRvd24seVgpfSkpfWdldCBpbnZlcnQoKXtyZXR1cm4gdGhpcy5faW52ZXJ0fXNldCBpbnZlcnQodCl7dGhpcy5faW52ZXJ0PXJJKHQpfWdldCBtYXgoKXtyZXR1cm4gdGhpcy5fbWF4fXNldCBtYXgodCl7dGhpcy5fbWF4PXNJKHQsdGhpcy5fbWF4KSx0aGlzLl9wZXJjZW50PXRoaXMuX2NhbGN1bGF0ZVBlcmNlbnRhZ2UodGhpcy5fdmFsdWUpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfWdldCBtaW4oKXtyZXR1cm4gdGhpcy5fbWlufXNldCBtaW4odCl7dGhpcy5fbWluPXNJKHQsdGhpcy5fbWluKSxudWxsPT09dGhpcy5fdmFsdWUmJih0aGlzLnZhbHVlPXRoaXMuX21pbiksdGhpcy5fcGVyY2VudD10aGlzLl9jYWxjdWxhdGVQZXJjZW50YWdlKHRoaXMuX3ZhbHVlKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX1nZXQgc3RlcCgpe3JldHVybiB0aGlzLl9zdGVwfXNldCBzdGVwKHQpe3RoaXMuX3N0ZXA9c0kodCx0aGlzLl9zdGVwKSx0aGlzLl9zdGVwJTEhPTAmJih0aGlzLl9yb3VuZFRvRGVjaW1hbD10aGlzLl9zdGVwLnRvU3RyaW5nKCkuc3BsaXQoIi4iKS5wb3AoKS5sZW5ndGgpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfWdldCB0aHVtYkxhYmVsKCl7cmV0dXJuIHRoaXMuX3RodW1iTGFiZWx9c2V0IHRodW1iTGFiZWwodCl7dGhpcy5fdGh1bWJMYWJlbD1ySSh0KX1nZXQgdGlja0ludGVydmFsKCl7cmV0dXJuIHRoaXMuX3RpY2tJbnRlcnZhbH1zZXQgdGlja0ludGVydmFsKHQpe3RoaXMuX3RpY2tJbnRlcnZhbD0iYXV0byI9PT10PyJhdXRvIjoibnVtYmVyIj09dHlwZW9mIHR8fCJzdHJpbmciPT10eXBlb2YgdD9zSSh0LHRoaXMuX3RpY2tJbnRlcnZhbCk6MH1nZXQgdmFsdWUoKXtyZXR1cm4gbnVsbD09PXRoaXMuX3ZhbHVlJiYodGhpcy52YWx1ZT10aGlzLl9taW4pLHRoaXMuX3ZhbHVlfXNldCB2YWx1ZSh0KXtpZih0IT09dGhpcy5fdmFsdWUpe2xldCBlPXNJKHQpO3RoaXMuX3JvdW5kVG9EZWNpbWFsJiZlIT09dGhpcy5taW4mJmUhPT10aGlzLm1heCYmKGU9cGFyc2VGbG9hdChlLnRvRml4ZWQodGhpcy5fcm91bmRUb0RlY2ltYWwpKSksdGhpcy5fdmFsdWU9ZSx0aGlzLl9wZXJjZW50PXRoaXMuX2NhbGN1bGF0ZVBlcmNlbnRhZ2UodGhpcy5fdmFsdWUpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfX1nZXQgdmVydGljYWwoKXtyZXR1cm4gdGhpcy5fdmVydGljYWx9c2V0IHZlcnRpY2FsKHQpe3RoaXMuX3ZlcnRpY2FsPXJJKHQpfWdldCBkaXNwbGF5VmFsdWUoKXtyZXR1cm4gdGhpcy5kaXNwbGF5V2l0aD90aGlzLmRpc3BsYXlXaXRoKHRoaXMudmFsdWUpOnRoaXMuX3JvdW5kVG9EZWNpbWFsJiZ0aGlzLnZhbHVlJiZ0aGlzLnZhbHVlJTEhPTA/dGhpcy52YWx1ZS50b0ZpeGVkKHRoaXMuX3JvdW5kVG9EZWNpbWFsKTp0aGlzLnZhbHVlfHwwfWZvY3VzKHQpe3RoaXMuX2ZvY3VzSG9zdEVsZW1lbnQodCl9Ymx1cigpe3RoaXMuX2JsdXJIb3N0RWxlbWVudCgpfWdldCBwZXJjZW50KCl7cmV0dXJuIHRoaXMuX2NsYW1wKHRoaXMuX3BlcmNlbnQpfV9zaG91bGRJbnZlcnRBeGlzKCl7cmV0dXJuIHRoaXMudmVydGljYWw/IXRoaXMuaW52ZXJ0OnRoaXMuaW52ZXJ0fV9pc01pblZhbHVlKCl7cmV0dXJuIDA9PT10aGlzLnBlcmNlbnR9X2dldFRodW1iR2FwKCl7cmV0dXJuIHRoaXMuZGlzYWJsZWQ/Nzp0aGlzLl9pc01pblZhbHVlKCkmJiF0aGlzLnRodW1iTGFiZWw/dGhpcy5faXNBY3RpdmU/MTA6NzowfV9nZXRUcmFja0JhY2tncm91bmRTdHlsZXMoKXtjb25zdCB0PXRoaXMudmVydGljYWw/YDEsICR7MS10aGlzLnBlcmNlbnR9LCAxYDoxLXRoaXMucGVyY2VudCsiLCAxLCAxIjtyZXR1cm57dHJhbnNmb3JtOmB0cmFuc2xhdGUke3RoaXMudmVydGljYWw/IlkiOiJYIn0oJHt0aGlzLl9zaG91bGRJbnZlcnRNb3VzZUNvb3JkcygpPyItIjoiIn0ke3RoaXMuX2dldFRodW1iR2FwKCl9cHgpIHNjYWxlM2QoJHt0fSlgfX1fZ2V0VHJhY2tGaWxsU3R5bGVzKCl7Y29uc3QgdD10aGlzLnBlcmNlbnQsZT10aGlzLnZlcnRpY2FsP2AxLCAke3R9LCAxYDpgJHt0fSwgMSwgMWA7cmV0dXJue3RyYW5zZm9ybTpgdHJhbnNsYXRlJHt0aGlzLnZlcnRpY2FsPyJZIjoiWCJ9KCR7dGhpcy5fc2hvdWxkSW52ZXJ0TW91c2VDb29yZHMoKT8iIjoiLSJ9JHt0aGlzLl9nZXRUaHVtYkdhcCgpfXB4KSBzY2FsZTNkKCR7ZX0pYCxkaXNwbGF5OjA9PT10PyJub25lIjoiIn19X2dldFRpY2tzQ29udGFpbmVyU3R5bGVzKCl7cmV0dXJue3RyYW5zZm9ybTpgdHJhbnNsYXRlJHt0aGlzLnZlcnRpY2FsPyJZIjoiWCJ9KCR7dGhpcy52ZXJ0aWNhbHx8InJ0bCIhPXRoaXMuX2dldERpcmVjdGlvbigpPyItIjoiIn0ke3RoaXMuX3RpY2tJbnRlcnZhbFBlcmNlbnQvMioxMDB9JSlgfX1fZ2V0VGlja3NTdHlsZXMoKXtsZXQgdD0xMDAqdGhpcy5fdGlja0ludGVydmFsUGVyY2VudCxlPXtiYWNrZ3JvdW5kU2l6ZTp0aGlzLnZlcnRpY2FsP2AycHggJHt0fSVgOmAke3R9JSAycHhgLHRyYW5zZm9ybTpgdHJhbnNsYXRlWigwKSB0cmFuc2xhdGUke3RoaXMudmVydGljYWw/IlkiOiJYIn0oJHt0aGlzLnZlcnRpY2FsfHwicnRsIiE9dGhpcy5fZ2V0RGlyZWN0aW9uKCk/IiI6Ii0ifSR7dC8yfSUpJHt0aGlzLnZlcnRpY2FsfHwicnRsIiE9dGhpcy5fZ2V0RGlyZWN0aW9uKCk/IiI6IiByb3RhdGUoMTgwZGVnKSJ9YH07aWYodGhpcy5faXNNaW5WYWx1ZSgpJiZ0aGlzLl9nZXRUaHVtYkdhcCgpKXtjb25zdCB0PXRoaXMuX3Nob3VsZEludmVydEF4aXMoKTtsZXQgbjtuPXRoaXMudmVydGljYWw/dD8iQm90dG9tIjoiVG9wIjp0PyJSaWdodCI6IkxlZnQiLGVbYHBhZGRpbmcke259YF09YCR7dGhpcy5fZ2V0VGh1bWJHYXAoKX1weGB9cmV0dXJuIGV9X2dldFRodW1iQ29udGFpbmVyU3R5bGVzKCl7Y29uc3QgdD10aGlzLl9zaG91bGRJbnZlcnRBeGlzKCk7cmV0dXJue3RyYW5zZm9ybTpgdHJhbnNsYXRlJHt0aGlzLnZlcnRpY2FsPyJZIjoiWCJ9KC0kezEwMCooKCJydGwiIT10aGlzLl9nZXREaXJlY3Rpb24oKXx8dGhpcy52ZXJ0aWNhbD90OiF0KT90aGlzLnBlcmNlbnQ6MS10aGlzLnBlcmNlbnQpfSUpYH19X3Nob3VsZEludmVydE1vdXNlQ29vcmRzKCl7Y29uc3QgdD10aGlzLl9zaG91bGRJbnZlcnRBeGlzKCk7cmV0dXJuInJ0bCIhPXRoaXMuX2dldERpcmVjdGlvbigpfHx0aGlzLnZlcnRpY2FsP3Q6IXR9X2dldERpcmVjdGlvbigpe3JldHVybiB0aGlzLl9kaXImJiJydGwiPT10aGlzLl9kaXIudmFsdWU/InJ0bCI6Imx0ciJ9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fZm9jdXNNb25pdG9yLm1vbml0b3IodGhpcy5fZWxlbWVudFJlZiwhMCkuc3Vic2NyaWJlKCh0PT57dGhpcy5faXNBY3RpdmU9ISF0JiYia2V5Ym9hcmQiIT09dCx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCl9KSksdGhpcy5fZGlyJiYodGhpcy5fZGlyQ2hhbmdlU3Vic2NyaXB0aW9uPXRoaXMuX2Rpci5jaGFuZ2Uuc3Vic2NyaWJlKCgoKT0+e3RoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSkpKX1uZ09uRGVzdHJveSgpe2NvbnN0IHQ9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIix0aGlzLl9wb2ludGVyRG93bix5WCksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0Iix0aGlzLl9wb2ludGVyRG93bix5WCksdGhpcy5fbGFzdFBvaW50ZXJFdmVudD1udWxsLHRoaXMuX3JlbW92ZUdsb2JhbEV2ZW50cygpLHRoaXMuX2ZvY3VzTW9uaXRvci5zdG9wTW9uaXRvcmluZyh0aGlzLl9lbGVtZW50UmVmKSx0aGlzLl9kaXJDaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1fb25Nb3VzZWVudGVyKCl7dGhpcy5kaXNhYmxlZHx8KHRoaXMuX3NsaWRlckRpbWVuc2lvbnM9dGhpcy5fZ2V0U2xpZGVyRGltZW5zaW9ucygpLHRoaXMuX3VwZGF0ZVRpY2tJbnRlcnZhbFBlcmNlbnQoKSl9X29uRm9jdXMoKXt0aGlzLl9zbGlkZXJEaW1lbnNpb25zPXRoaXMuX2dldFNsaWRlckRpbWVuc2lvbnMoKSx0aGlzLl91cGRhdGVUaWNrSW50ZXJ2YWxQZXJjZW50KCl9X29uQmx1cigpe3RoaXMub25Ub3VjaGVkKCl9X29uS2V5ZG93bih0KXtpZih0aGlzLmRpc2FibGVkfHxhSSh0KSlyZXR1cm47Y29uc3QgZT10aGlzLnZhbHVlO3N3aXRjaCh0LmtleUNvZGUpe2Nhc2UgMzM6dGhpcy5faW5jcmVtZW50KDEwKTticmVhaztjYXNlIDM0OnRoaXMuX2luY3JlbWVudCgtMTApO2JyZWFrO2Nhc2UgMzU6dGhpcy52YWx1ZT10aGlzLm1heDticmVhaztjYXNlIDM2OnRoaXMudmFsdWU9dGhpcy5taW47YnJlYWs7Y2FzZSAzNzp0aGlzLl9pbmNyZW1lbnQoInJ0bCI9PXRoaXMuX2dldERpcmVjdGlvbigpPzE6LTEpO2JyZWFrO2Nhc2Ugb0k6dGhpcy5faW5jcmVtZW50KDEpO2JyZWFrO2Nhc2UgMzk6dGhpcy5faW5jcmVtZW50KCJydGwiPT10aGlzLl9nZXREaXJlY3Rpb24oKT8tMToxKTticmVhaztjYXNlIGlJOnRoaXMuX2luY3JlbWVudCgtMSk7YnJlYWs7ZGVmYXVsdDpyZXR1cm59ZSE9dGhpcy52YWx1ZSYmKHRoaXMuX2VtaXRJbnB1dEV2ZW50KCksdGhpcy5fZW1pdENoYW5nZUV2ZW50KCkpLHRoaXMuX2lzU2xpZGluZz0hMCx0LnByZXZlbnREZWZhdWx0KCl9X29uS2V5dXAoKXt0aGlzLl9pc1NsaWRpbmc9ITF9X2dldFdpbmRvdygpe3JldHVybiB0aGlzLl9kb2N1bWVudC5kZWZhdWx0Vmlld3x8d2luZG93fV9iaW5kR2xvYmFsRXZlbnRzKHQpe2NvbnN0IGU9dGhpcy5fZG9jdW1lbnQsbj14WCh0KSxvPW4/InRvdWNoZW5kIjoibW91c2V1cCI7ZS5hZGRFdmVudExpc3RlbmVyKG4/InRvdWNobW92ZSI6Im1vdXNlbW92ZSIsdGhpcy5fcG9pbnRlck1vdmUseVgpLGUuYWRkRXZlbnRMaXN0ZW5lcihvLHRoaXMuX3BvaW50ZXJVcCx5WCksbiYmZS5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGNhbmNlbCIsdGhpcy5fcG9pbnRlclVwLHlYKTtjb25zdCBpPXRoaXMuX2dldFdpbmRvdygpO3ZvaWQgMCE9PWkmJmkmJmkuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsdGhpcy5fd2luZG93Qmx1cil9X3JlbW92ZUdsb2JhbEV2ZW50cygpe2NvbnN0IHQ9dGhpcy5fZG9jdW1lbnQ7dC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHRoaXMuX3BvaW50ZXJNb3ZlLHlYKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHRoaXMuX3BvaW50ZXJVcCx5WCksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLHRoaXMuX3BvaW50ZXJNb3ZlLHlYKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIix0aGlzLl9wb2ludGVyVXAseVgpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hjYW5jZWwiLHRoaXMuX3BvaW50ZXJVcCx5WCk7Y29uc3QgZT10aGlzLl9nZXRXaW5kb3coKTt2b2lkIDAhPT1lJiZlJiZlLnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLHRoaXMuX3dpbmRvd0JsdXIpfV9pbmNyZW1lbnQodCl7dGhpcy52YWx1ZT10aGlzLl9jbGFtcCgodGhpcy52YWx1ZXx8MCkrdGhpcy5zdGVwKnQsdGhpcy5taW4sdGhpcy5tYXgpfV91cGRhdGVWYWx1ZUZyb21Qb3NpdGlvbih0KXtpZighdGhpcy5fc2xpZGVyRGltZW5zaW9ucylyZXR1cm47bGV0IGU9dGhpcy5fY2xhbXAoKCh0aGlzLnZlcnRpY2FsP3QueTp0LngpLSh0aGlzLnZlcnRpY2FsP3RoaXMuX3NsaWRlckRpbWVuc2lvbnMudG9wOnRoaXMuX3NsaWRlckRpbWVuc2lvbnMubGVmdCkpLyh0aGlzLnZlcnRpY2FsP3RoaXMuX3NsaWRlckRpbWVuc2lvbnMuaGVpZ2h0OnRoaXMuX3NsaWRlckRpbWVuc2lvbnMud2lkdGgpKTtpZih0aGlzLl9zaG91bGRJbnZlcnRNb3VzZUNvb3JkcygpJiYoZT0xLWUpLDA9PT1lKXRoaXMudmFsdWU9dGhpcy5taW47ZWxzZSBpZigxPT09ZSl0aGlzLnZhbHVlPXRoaXMubWF4O2Vsc2V7Y29uc3QgdD10aGlzLl9jYWxjdWxhdGVWYWx1ZShlKSxuPU1hdGgucm91bmQoKHQtdGhpcy5taW4pL3RoaXMuc3RlcCkqdGhpcy5zdGVwK3RoaXMubWluO3RoaXMudmFsdWU9dGhpcy5fY2xhbXAobix0aGlzLm1pbix0aGlzLm1heCl9fV9lbWl0Q2hhbmdlRXZlbnQoKXt0aGlzLl9jb250cm9sVmFsdWVBY2Nlc3NvckNoYW5nZUZuKHRoaXMudmFsdWUpLHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKSx0aGlzLmNoYW5nZS5lbWl0KHRoaXMuX2NyZWF0ZUNoYW5nZUV2ZW50KCkpfV9lbWl0SW5wdXRFdmVudCgpe3RoaXMuaW5wdXQuZW1pdCh0aGlzLl9jcmVhdGVDaGFuZ2VFdmVudCgpKX1fdXBkYXRlVGlja0ludGVydmFsUGVyY2VudCgpe2lmKHRoaXMudGlja0ludGVydmFsJiZ0aGlzLl9zbGlkZXJEaW1lbnNpb25zKWlmKCJhdXRvIj09dGhpcy50aWNrSW50ZXJ2YWwpe2xldCB0PXRoaXMudmVydGljYWw/dGhpcy5fc2xpZGVyRGltZW5zaW9ucy5oZWlnaHQ6dGhpcy5fc2xpZGVyRGltZW5zaW9ucy53aWR0aCxlPU1hdGguY2VpbCgzMC8odCp0aGlzLnN0ZXAvKHRoaXMubWF4LXRoaXMubWluKSkpO3RoaXMuX3RpY2tJbnRlcnZhbFBlcmNlbnQ9ZSp0aGlzLnN0ZXAvdH1lbHNlIHRoaXMuX3RpY2tJbnRlcnZhbFBlcmNlbnQ9dGhpcy50aWNrSW50ZXJ2YWwqdGhpcy5zdGVwLyh0aGlzLm1heC10aGlzLm1pbil9X2NyZWF0ZUNoYW5nZUV2ZW50KHQ9dGhpcy52YWx1ZSl7bGV0IGU9bmV3IENYO3JldHVybiBlLnNvdXJjZT10aGlzLGUudmFsdWU9dCxlfV9jYWxjdWxhdGVQZXJjZW50YWdlKHQpe3JldHVybigodHx8MCktdGhpcy5taW4pLyh0aGlzLm1heC10aGlzLm1pbil9X2NhbGN1bGF0ZVZhbHVlKHQpe3JldHVybiB0aGlzLm1pbit0Kih0aGlzLm1heC10aGlzLm1pbil9X2NsYW1wKHQsZT0wLG49MSl7cmV0dXJuIE1hdGgubWF4KGUsTWF0aC5taW4odCxuKSl9X2dldFNsaWRlckRpbWVuc2lvbnMoKXtyZXR1cm4gdGhpcy5fc2xpZGVyV3JhcHBlcj90aGlzLl9zbGlkZXJXcmFwcGVyLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk6bnVsbH1fZm9jdXNIb3N0RWxlbWVudCh0KXt0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXModCl9X2JsdXJIb3N0RWxlbWVudCgpe3RoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5ibHVyKCl9d3JpdGVWYWx1ZSh0KXt0aGlzLnZhbHVlPXR9cmVnaXN0ZXJPbkNoYW5nZSh0KXt0aGlzLl9jb250cm9sVmFsdWVBY2Nlc3NvckNoYW5nZUZuPXR9cmVnaXN0ZXJPblRvdWNoZWQodCl7dGhpcy5vblRvdWNoZWQ9dH1zZXREaXNhYmxlZFN0YXRlKHQpe3RoaXMuZGlzYWJsZWQ9dH19ZnVuY3Rpb24geFgodCl7cmV0dXJuInQiPT09dC50eXBlWzBdfWZ1bmN0aW9uIE9YKHQpe2NvbnN0IGU9eFgodCk/dC50b3VjaGVzWzBdfHx0LmNoYW5nZWRUb3VjaGVzWzBdOnQ7cmV0dXJue3g6ZS5jbGllbnRYLHk6ZS5jbGllbnRZfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovdlguybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHZYKShNdShjaCksTXUocHopLE11KEhoKSxNdShNeiw4KSxPcigidGFiaW5kZXgiKSxNdSh0QyksTXUoVUMpLE11KE53LDgpKX0sdlguybVjbXA9VW8oe3R5cGU6dlgsc2VsZWN0b3JzOltbIm1hdC1zbGlkZXIiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJldiKGJYLDEpLDImZSl7bGV0IHQ7VWIodD1ZYigpKSYmKG4uX3NsaWRlcldyYXBwZXI9dC5maXJzdCl9fSxob3N0QXR0cnM6WyJyb2xlIiwic2xpZGVyIiwxLCJtYXQtc2xpZGVyIiwibWF0LWZvY3VzLWluZGljYXRvciJdLGhvc3RWYXJzOjI5LGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MSZlJiZOdSgiZm9jdXMiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uX29uRm9jdXMoKX0pKSgiYmx1ciIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5fb25CbHVyKCl9KSkoImtleWRvd24iLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLl9vbktleWRvd24oZSl9KSkoImtleXVwIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLl9vbktleXVwKCl9KSkoIm1vdXNlZW50ZXIiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uX29uTW91c2VlbnRlcigpfSkpKCJzZWxlY3RzdGFydCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIGUucHJldmVudERlZmF1bHQoKX0pKSwyJmUmJihrZigidGFiSW5kZXgiLG4udGFiSW5kZXgpLE5tKCJhcmlhLWRpc2FibGVkIixuLmRpc2FibGVkKSgiYXJpYS12YWx1ZW1heCIsbi5tYXgpKCJhcmlhLXZhbHVlbWluIixuLm1pbikoImFyaWEtdmFsdWVub3ciLG4udmFsdWUpKCJhcmlhLXZhbHVldGV4dCIsbnVsbD09bi52YWx1ZVRleHQ/bi5kaXNwbGF5VmFsdWU6bi52YWx1ZVRleHQpKCJhcmlhLW9yaWVudGF0aW9uIixuLnZlcnRpY2FsPyJ2ZXJ0aWNhbCI6Imhvcml6b250YWwiKSxhZigibWF0LXNsaWRlci1kaXNhYmxlZCIsbi5kaXNhYmxlZCkoIm1hdC1zbGlkZXItaGFzLXRpY2tzIixuLnRpY2tJbnRlcnZhbCkoIm1hdC1zbGlkZXItaG9yaXpvbnRhbCIsIW4udmVydGljYWwpKCJtYXQtc2xpZGVyLWF4aXMtaW52ZXJ0ZWQiLG4uX3Nob3VsZEludmVydEF4aXMoKSkoIm1hdC1zbGlkZXItaW52ZXJ0LW1vdXNlLWNvb3JkcyIsbi5fc2hvdWxkSW52ZXJ0TW91c2VDb29yZHMoKSkoIm1hdC1zbGlkZXItc2xpZGluZyIsbi5faXNTbGlkaW5nKSgibWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nIixuLnRodW1iTGFiZWwpKCJtYXQtc2xpZGVyLXZlcnRpY2FsIixuLnZlcnRpY2FsKSgibWF0LXNsaWRlci1taW4tdmFsdWUiLG4uX2lzTWluVmFsdWUoKSkoIm1hdC1zbGlkZXItaGlkZS1sYXN0LXRpY2siLG4uZGlzYWJsZWR8fG4uX2lzTWluVmFsdWUoKSYmbi5fZ2V0VGh1bWJHYXAoKSYmbi5fc2hvdWxkSW52ZXJ0QXhpcygpKSgiX21hdC1hbmltYXRpb24tbm9vcGFibGUiLCJOb29wQW5pbWF0aW9ucyI9PT1uLl9hbmltYXRpb25Nb2RlKSl9LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIixjb2xvcjoiY29sb3IiLHRhYkluZGV4OiJ0YWJJbmRleCIsaW52ZXJ0OiJpbnZlcnQiLG1heDoibWF4IixtaW46Im1pbiIsdmFsdWU6InZhbHVlIixzdGVwOiJzdGVwIix0aHVtYkxhYmVsOiJ0aHVtYkxhYmVsIix0aWNrSW50ZXJ2YWw6InRpY2tJbnRlcnZhbCIsdmVydGljYWw6InZlcnRpY2FsIixkaXNwbGF5V2l0aDoiZGlzcGxheVdpdGgiLHZhbHVlVGV4dDoidmFsdWVUZXh0In0sb3V0cHV0czp7Y2hhbmdlOiJjaGFuZ2UiLGlucHV0OiJpbnB1dCIsdmFsdWVDaGFuZ2U6InZhbHVlQ2hhbmdlIn0sZXhwb3J0QXM6WyJtYXRTbGlkZXIiXSxmZWF0dXJlczpbaWgoW19YXSksZ21dLGRlY2xzOjEzLHZhcnM6Nixjb25zdHM6W1sxLCJtYXQtc2xpZGVyLXdyYXBwZXIiXSxbInNsaWRlcldyYXBwZXIiLCIiXSxbMSwibWF0LXNsaWRlci10cmFjay13cmFwcGVyIl0sWzEsIm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZCIsMywibmdTdHlsZSJdLFsxLCJtYXQtc2xpZGVyLXRyYWNrLWZpbGwiLDMsIm5nU3R5bGUiXSxbMSwibWF0LXNsaWRlci10aWNrcy1jb250YWluZXIiLDMsIm5nU3R5bGUiXSxbMSwibWF0LXNsaWRlci10aWNrcyIsMywibmdTdHlsZSJdLFsxLCJtYXQtc2xpZGVyLXRodW1iLWNvbnRhaW5lciIsMywibmdTdHlsZSJdLFsxLCJtYXQtc2xpZGVyLWZvY3VzLXJpbmciXSxbMSwibWF0LXNsaWRlci10aHVtYiJdLFsxLCJtYXQtc2xpZGVyLXRodW1iLWxhYmVsIl0sWzEsIm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoT3UoMCwiZGl2IiwwLDEpLE91KDIsImRpdiIsMiksd3UoMywiZGl2IiwzKSx3dSg0LCJkaXYiLDQpLFB1KCksT3UoNSwiZGl2Iiw1KSx3dSg2LCJkaXYiLDYpLFB1KCksT3UoNywiZGl2Iiw3KSx3dSg4LCJkaXYiLDgpLHd1KDksImRpdiIsOSksT3UoMTAsImRpdiIsMTApLE91KDExLCJzcGFuIiwxMSksTWYoMTIpLFB1KCksUHUoKSxQdSgpLFB1KCkpLDImZSYmKEpjKDMpLHZ1KCJuZ1N0eWxlIixuLl9nZXRUcmFja0JhY2tncm91bmRTdHlsZXMoKSksSmMoMSksdnUoIm5nU3R5bGUiLG4uX2dldFRyYWNrRmlsbFN0eWxlcygpKSxKYygxKSx2dSgibmdTdHlsZSIsbi5fZ2V0VGlja3NDb250YWluZXJTdHlsZXMoKSksSmMoMSksdnUoIm5nU3R5bGUiLG4uX2dldFRpY2tzU3R5bGVzKCkpLEpjKDEpLHZ1KCJuZ1N0eWxlIixuLl9nZXRUaHVtYkNvbnRhaW5lclN0eWxlcygpKSxKYyg1KSx2ZihuLmRpc3BsYXlWYWx1ZSkpfSxkaXJlY3RpdmVzOltndl0sc3R5bGVzOlsnLm1hdC1zbGlkZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246cmVsYXRpdmU7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6OHB4O291dGxpbmU6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Lm1hdC1zbGlkZXI6bm90KC5tYXQtc2xpZGVyLWRpc2FibGVkKTphY3RpdmUsLm1hdC1zbGlkZXIubWF0LXNsaWRlci1zbGlkaW5nOm5vdCgubWF0LXNsaWRlci1kaXNhYmxlZCl7Y3Vyc29yOi13ZWJraXQtZ3JhYmJpbmc7Y3Vyc29yOmdyYWJiaW5nfS5tYXQtc2xpZGVyLXdyYXBwZXJ7cG9zaXRpb246YWJzb2x1dGU7LXdlYmtpdC1wcmludC1jb2xvci1hZGp1c3Q6ZXhhY3Q7Y29sb3ItYWRqdXN0OmV4YWN0fS5tYXQtc2xpZGVyLXRyYWNrLXdyYXBwZXJ7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO292ZXJmbG93OmhpZGRlbn0ubWF0LXNsaWRlci10cmFjay1maWxse3Bvc2l0aW9uOmFic29sdXRlO3RyYW5zZm9ybS1vcmlnaW46MCAwO3RyYW5zaXRpb246dHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJhY2tncm91bmQtY29sb3IgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZHtwb3NpdGlvbjphYnNvbHV0ZTt0cmFuc2Zvcm0tb3JpZ2luOjEwMCUgMTAwJTt0cmFuc2l0aW9uOnRyYW5zZm9ybSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxiYWNrZ3JvdW5kLWNvbG9yIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5tYXQtc2xpZGVyLXRpY2tzLWNvbnRhaW5lcntwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7dG9wOjA7b3ZlcmZsb3c6aGlkZGVufS5tYXQtc2xpZGVyLXRpY2tze2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdDtiYWNrZ3JvdW5kLWNsaXA6Y29udGVudC1ib3g7Ym94LXNpemluZzpib3JkZXItYm94O29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1zbGlkZXItdGh1bWItY29udGFpbmVye3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTt0cmFuc2l0aW9uOnRyYW5zZm9ybSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LXNsaWRlci1mb2N1cy1yaW5ne3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjMwcHg7aGVpZ2h0OjMwcHg7Ym9yZGVyLXJhZGl1czo1MCU7dHJhbnNmb3JtOnNjYWxlKDApO29wYWNpdHk6MDt0cmFuc2l0aW9uOnRyYW5zZm9ybSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxiYWNrZ3JvdW5kLWNvbG9yIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLG9wYWNpdHkgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1zbGlkZXIuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1zbGlkZXItZm9jdXMtcmluZywubWF0LXNsaWRlci5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7dHJhbnNmb3JtOnNjYWxlKDEpO29wYWNpdHk6MX0ubWF0LXNsaWRlcjpub3QoLm1hdC1zbGlkZXItZGlzYWJsZWQpOm5vdCgubWF0LXNsaWRlci1zbGlkaW5nKSAubWF0LXNsaWRlci10aHVtYi1sYWJlbCwubWF0LXNsaWRlcjpub3QoLm1hdC1zbGlkZXItZGlzYWJsZWQpOm5vdCgubWF0LXNsaWRlci1zbGlkaW5nKSAubWF0LXNsaWRlci10aHVtYntjdXJzb3I6LXdlYmtpdC1ncmFiO2N1cnNvcjpncmFifS5tYXQtc2xpZGVyLXRodW1ie3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0Oi0xMHB4O2JvdHRvbTotMTBweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6MjBweDtoZWlnaHQ6MjBweDtib3JkZXI6M3B4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yYWRpdXM6NTAlO3RyYW5zZm9ybTpzY2FsZSgwLjcpO3RyYW5zaXRpb246dHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJhY2tncm91bmQtY29sb3IgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSksYm9yZGVyLWNvbG9yIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2Rpc3BsYXk6bm9uZTthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoyOHB4O2hlaWdodDoyOHB4O2JvcmRlci1yYWRpdXM6NTAlO3RyYW5zaXRpb246dHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJvcmRlci1yYWRpdXMgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSksYmFja2dyb3VuZC1jb2xvciA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse291dGxpbmU6c29saWQgMXB4fS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7ei1pbmRleDoxO29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1zbGlkZXItc2xpZGluZyAubWF0LXNsaWRlci10cmFjay1maWxsLC5tYXQtc2xpZGVyLXNsaWRpbmcgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZCwubWF0LXNsaWRlci1zbGlkaW5nIC5tYXQtc2xpZGVyLXRodW1iLWNvbnRhaW5lcnt0cmFuc2l0aW9uLWR1cmF0aW9uOjBtc30ubWF0LXNsaWRlci1oYXMtdGlja3MgLm1hdC1zbGlkZXItd3JhcHBlcjo6YWZ0ZXJ7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItd2lkdGg6MDtib3JkZXItc3R5bGU6c29saWQ7b3BhY2l0eTowO3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LXNsaWRlci1oYXMtdGlja3MuY2RrLWZvY3VzZWQ6bm90KC5tYXQtc2xpZGVyLWhpZGUtbGFzdC10aWNrKSAubWF0LXNsaWRlci13cmFwcGVyOjphZnRlciwubWF0LXNsaWRlci1oYXMtdGlja3M6aG92ZXI6bm90KC5tYXQtc2xpZGVyLWhpZGUtbGFzdC10aWNrKSAubWF0LXNsaWRlci13cmFwcGVyOjphZnRlcntvcGFjaXR5OjF9Lm1hdC1zbGlkZXItaGFzLXRpY2tzLmNkay1mb2N1c2VkOm5vdCgubWF0LXNsaWRlci1kaXNhYmxlZCkgLm1hdC1zbGlkZXItdGlja3MsLm1hdC1zbGlkZXItaGFzLXRpY2tzOmhvdmVyOm5vdCgubWF0LXNsaWRlci1kaXNhYmxlZCkgLm1hdC1zbGlkZXItdGlja3N7b3BhY2l0eToxfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcgLm1hdC1zbGlkZXItZm9jdXMtcmluZ3tkaXNwbGF5Om5vbmV9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtkaXNwbGF5OmZsZXh9Lm1hdC1zbGlkZXItYXhpcy1pbnZlcnRlZCAubWF0LXNsaWRlci10cmFjay1maWxse3RyYW5zZm9ybS1vcmlnaW46MTAwJSAxMDAlfS5tYXQtc2xpZGVyLWF4aXMtaW52ZXJ0ZWQgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZHt0cmFuc2Zvcm0tb3JpZ2luOjAgMH0ubWF0LXNsaWRlcjpub3QoLm1hdC1zbGlkZXItZGlzYWJsZWQpLmNkay1mb2N1c2VkLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyAubWF0LXNsaWRlci10aHVtYnt0cmFuc2Zvcm06c2NhbGUoMCl9Lm1hdC1zbGlkZXI6bm90KC5tYXQtc2xpZGVyLWRpc2FibGVkKS5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtib3JkZXItcmFkaXVzOjUwJSA1MCUgMH0ubWF0LXNsaWRlcjpub3QoLm1hdC1zbGlkZXItZGlzYWJsZWQpLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7b3BhY2l0eToxfS5tYXQtc2xpZGVyOm5vdCgubWF0LXNsaWRlci1kaXNhYmxlZCkuY2RrLW1vdXNlLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXI6bm90KC5tYXQtc2xpZGVyLWRpc2FibGVkKS5jZGstdG91Y2gtZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYiwubWF0LXNsaWRlcjpub3QoLm1hdC1zbGlkZXItZGlzYWJsZWQpLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWJ7Ym9yZGVyLXdpZHRoOjJweDt0cmFuc2Zvcm06c2NhbGUoMSl9Lm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItZm9jdXMtcmluZ3t0cmFuc2Zvcm06c2NhbGUoMCk7b3BhY2l0eTowfS5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRodW1ie2JvcmRlci13aWR0aDo0cHg7dHJhbnNmb3JtOnNjYWxlKDAuNSl9Lm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7ZGlzcGxheTpub25lfS5tYXQtc2xpZGVyLWhvcml6b250YWx7aGVpZ2h0OjQ4cHg7bWluLXdpZHRoOjEyOHB4fS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItd3JhcHBlcntoZWlnaHQ6MnB4O3RvcDoyM3B4O2xlZnQ6OHB4O3JpZ2h0OjhweH0ubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXdyYXBwZXI6OmFmdGVye2hlaWdodDoycHg7Ym9yZGVyLWxlZnQtd2lkdGg6MnB4O3JpZ2h0OjA7dG9wOjB9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10cmFjay13cmFwcGVye2hlaWdodDoycHg7d2lkdGg6MTAwJX0ubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRyYWNrLWZpbGx7aGVpZ2h0OjJweDt3aWR0aDoxMDAlO3RyYW5zZm9ybTpzY2FsZVgoMCl9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke2hlaWdodDoycHg7d2lkdGg6MTAwJTt0cmFuc2Zvcm06c2NhbGVYKDEpfS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdGlja3MtY29udGFpbmVye2hlaWdodDoycHg7d2lkdGg6MTAwJX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdGlja3MtY29udGFpbmVye2hlaWdodDowO291dGxpbmU6c29saWQgMnB4O3RvcDoxcHh9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10aWNrc3toZWlnaHQ6MnB4O3dpZHRoOjEwMCV9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10aHVtYi1jb250YWluZXJ7d2lkdGg6MTAwJTtoZWlnaHQ6MDt0b3A6NTAlfS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItZm9jdXMtcmluZ3t0b3A6LTE1cHg7cmlnaHQ6LTE1cHh9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtyaWdodDotMTRweDt0b3A6LTQwcHg7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMjZweCkgc2NhbGUoMC4wMSkgcm90YXRlKDQ1ZGVnKX0ubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7dHJhbnNmb3JtOnJvdGF0ZSgtNDVkZWcpfS5tYXQtc2xpZGVyLWhvcml6b250YWwuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXNsaWRlci1ob3Jpem9udGFsLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zbGlkZXItaG9yaXpvbnRhbC5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e3RyYW5zZm9ybTpub25lfS5tYXQtc2xpZGVyLXZlcnRpY2Fse3dpZHRoOjQ4cHg7bWluLWhlaWdodDoxMjhweH0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci13cmFwcGVye3dpZHRoOjJweDt0b3A6OHB4O2JvdHRvbTo4cHg7bGVmdDoyM3B4fS5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXdyYXBwZXI6OmFmdGVye3dpZHRoOjJweDtib3JkZXItdG9wLXdpZHRoOjJweDtib3R0b206MDtsZWZ0OjB9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdHJhY2std3JhcHBlcntoZWlnaHQ6MTAwJTt3aWR0aDoycHh9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdHJhY2stZmlsbHtoZWlnaHQ6MTAwJTt3aWR0aDoycHg7dHJhbnNmb3JtOnNjYWxlWSgwKX0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke2hlaWdodDoxMDAlO3dpZHRoOjJweDt0cmFuc2Zvcm06c2NhbGVZKDEpfS5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXRpY2tzLWNvbnRhaW5lcnt3aWR0aDoycHg7aGVpZ2h0OjEwMCV9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10aWNrcy1jb250YWluZXJ7d2lkdGg6MDtvdXRsaW5lOnNvbGlkIDJweDtsZWZ0OjFweH0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci1mb2N1cy1yaW5ne2JvdHRvbTotMTVweDtsZWZ0Oi0xNXB4fS5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXRpY2tze3dpZHRoOjJweDtoZWlnaHQ6MTAwJX0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10aHVtYi1jb250YWluZXJ7aGVpZ2h0OjEwMCU7d2lkdGg6MDtsZWZ0OjUwJX0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10aHVtYnstd2Via2l0LWJhY2tmYWNlLXZpc2liaWxpdHk6aGlkZGVuO2JhY2tmYWNlLXZpc2liaWxpdHk6aGlkZGVufS5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2JvdHRvbTotMTRweDtsZWZ0Oi00MHB4O3RyYW5zZm9ybTp0cmFuc2xhdGVYKDI2cHgpIHNjYWxlKDAuMDEpIHJvdGF0ZSgtNDVkZWcpfS5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyl9Lm1hdC1zbGlkZXItdmVydGljYWwuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7dHJhbnNmb3JtOnJvdGF0ZSgtNDVkZWcpfVtkaXI9cnRsXSAubWF0LXNsaWRlci13cmFwcGVyOjphZnRlcntsZWZ0OjA7cmlnaHQ6YXV0b31bZGlyPXJ0bF0gLm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10cmFjay1maWxse3RyYW5zZm9ybS1vcmlnaW46MTAwJSAxMDAlfVtkaXI9cnRsXSAubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7dHJhbnNmb3JtLW9yaWdpbjowIDB9W2Rpcj1ydGxdIC5tYXQtc2xpZGVyLWhvcml6b250YWwubWF0LXNsaWRlci1heGlzLWludmVydGVkIC5tYXQtc2xpZGVyLXRyYWNrLWZpbGx7dHJhbnNmb3JtLW9yaWdpbjowIDB9W2Rpcj1ydGxdIC5tYXQtc2xpZGVyLWhvcml6b250YWwubWF0LXNsaWRlci1heGlzLWludmVydGVkIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7dHJhbnNmb3JtLW9yaWdpbjoxMDAlIDEwMCV9Lm1hdC1zbGlkZXIuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1zbGlkZXItdHJhY2stZmlsbCwubWF0LXNsaWRlci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5kLC5tYXQtc2xpZGVyLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtc2xpZGVyLXRpY2tzLC5tYXQtc2xpZGVyLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtc2xpZGVyLXRodW1iLWNvbnRhaW5lciwubWF0LXNsaWRlci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LXNsaWRlci1mb2N1cy1yaW5nLC5tYXQtc2xpZGVyLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtc2xpZGVyLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLC5tYXQtc2xpZGVyLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHQsLm1hdC1zbGlkZXIuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1zbGlkZXItaGFzLXRpY2tzIC5tYXQtc2xpZGVyLXdyYXBwZXI6OmFmdGVye3RyYW5zaXRpb246bm9uZX1cbiddLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLHZYLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6Y2h9LHt0eXBlOnB6fSx7dHlwZTpIaH0se3R5cGU6TXosZGVjb3JhdG9yczpbe3R5cGU6X3N9XX0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOlJyLGFyZ3M6WyJ0YWJpbmRleCJdfV19LHt0eXBlOnRDfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbVUNdfV19LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbTnddfV19XSx2WC5wcm9wRGVjb3JhdG9ycz17aW52ZXJ0Olt7dHlwZTp5X31dLG1heDpbe3R5cGU6eV99XSxtaW46W3t0eXBlOnlffV0sc3RlcDpbe3R5cGU6eV99XSx0aHVtYkxhYmVsOlt7dHlwZTp5X31dLHRpY2tJbnRlcnZhbDpbe3R5cGU6eV99XSx2YWx1ZTpbe3R5cGU6eV99XSxkaXNwbGF5V2l0aDpbe3R5cGU6eV99XSx2YWx1ZVRleHQ6W3t0eXBlOnlffV0sdmVydGljYWw6W3t0eXBlOnlffV0sY2hhbmdlOlt7dHlwZTpfX31dLGlucHV0Olt7dHlwZTpfX31dLHZhbHVlQ2hhbmdlOlt7dHlwZTpfX31dLF9zbGlkZXJXcmFwcGVyOlt7dHlwZTpGcixhcmdzOlsic2xpZGVyV3JhcHBlciJdfV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIodlgsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoibWF0LXNsaWRlciIsZXhwb3J0QXM6Im1hdFNsaWRlciIscHJvdmlkZXJzOltfWF0saG9zdDp7Iihmb2N1cykiOiJfb25Gb2N1cygpIiwiKGJsdXIpIjoiX29uQmx1cigpIiwiKGtleWRvd24pIjoiX29uS2V5ZG93bigkZXZlbnQpIiwiKGtleXVwKSI6Il9vbktleXVwKCkiLCIobW91c2VlbnRlcikiOiJfb25Nb3VzZWVudGVyKCkiLCIoc2VsZWN0c3RhcnQpIjoiJGV2ZW50LnByZXZlbnREZWZhdWx0KCkiLGNsYXNzOiJtYXQtc2xpZGVyIG1hdC1mb2N1cy1pbmRpY2F0b3IiLHJvbGU6InNsaWRlciIsIlt0YWJJbmRleF0iOiJ0YWJJbmRleCIsIlthdHRyLmFyaWEtZGlzYWJsZWRdIjoiZGlzYWJsZWQiLCJbYXR0ci5hcmlhLXZhbHVlbWF4XSI6Im1heCIsIlthdHRyLmFyaWEtdmFsdWVtaW5dIjoibWluIiwiW2F0dHIuYXJpYS12YWx1ZW5vd10iOiJ2YWx1ZSIsIlthdHRyLmFyaWEtdmFsdWV0ZXh0XSI6InZhbHVlVGV4dCA9PSBudWxsID8gZGlzcGxheVZhbHVlIDogdmFsdWVUZXh0IiwiW2F0dHIuYXJpYS1vcmllbnRhdGlvbl0iOid2ZXJ0aWNhbCA/ICJ2ZXJ0aWNhbCIgOiAiaG9yaXpvbnRhbCInLCJbY2xhc3MubWF0LXNsaWRlci1kaXNhYmxlZF0iOiJkaXNhYmxlZCIsIltjbGFzcy5tYXQtc2xpZGVyLWhhcy10aWNrc10iOiJ0aWNrSW50ZXJ2YWwiLCJbY2xhc3MubWF0LXNsaWRlci1ob3Jpem9udGFsXSI6IiF2ZXJ0aWNhbCIsIltjbGFzcy5tYXQtc2xpZGVyLWF4aXMtaW52ZXJ0ZWRdIjoiX3Nob3VsZEludmVydEF4aXMoKSIsIltjbGFzcy5tYXQtc2xpZGVyLWludmVydC1tb3VzZS1jb29yZHNdIjoiX3Nob3VsZEludmVydE1vdXNlQ29vcmRzKCkiLCJbY2xhc3MubWF0LXNsaWRlci1zbGlkaW5nXSI6Il9pc1NsaWRpbmciLCJbY2xhc3MubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nXSI6InRodW1iTGFiZWwiLCJbY2xhc3MubWF0LXNsaWRlci12ZXJ0aWNhbF0iOiJ2ZXJ0aWNhbCIsIltjbGFzcy5tYXQtc2xpZGVyLW1pbi12YWx1ZV0iOiJfaXNNaW5WYWx1ZSgpIiwiW2NsYXNzLm1hdC1zbGlkZXItaGlkZS1sYXN0LXRpY2tdIjoiZGlzYWJsZWQgfHwgX2lzTWluVmFsdWUoKSAmJiBfZ2V0VGh1bWJHYXAoKSAmJiBfc2hvdWxkSW52ZXJ0QXhpcygpIiwiW2NsYXNzLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlXSI6J19hbmltYXRpb25Nb2RlID09PSAiTm9vcEFuaW1hdGlvbnMiJ30sdGVtcGxhdGU6JzxkaXYgY2xhc3M9Im1hdC1zbGlkZXItd3JhcHBlciIgI3NsaWRlcldyYXBwZXI+XG4gIDxkaXYgY2xhc3M9Im1hdC1zbGlkZXItdHJhY2std3JhcHBlciI+XG4gICAgPGRpdiBjbGFzcz0ibWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5kIiBbbmdTdHlsZV09Il9nZXRUcmFja0JhY2tncm91bmRTdHlsZXMoKSI+PC9kaXY+XG4gICAgPGRpdiBjbGFzcz0ibWF0LXNsaWRlci10cmFjay1maWxsIiBbbmdTdHlsZV09Il9nZXRUcmFja0ZpbGxTdHlsZXMoKSI+PC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJtYXQtc2xpZGVyLXRpY2tzLWNvbnRhaW5lciIgW25nU3R5bGVdPSJfZ2V0VGlja3NDb250YWluZXJTdHlsZXMoKSI+XG4gICAgPGRpdiBjbGFzcz0ibWF0LXNsaWRlci10aWNrcyIgW25nU3R5bGVdPSJfZ2V0VGlja3NTdHlsZXMoKSI+PC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJtYXQtc2xpZGVyLXRodW1iLWNvbnRhaW5lciIgW25nU3R5bGVdPSJfZ2V0VGh1bWJDb250YWluZXJTdHlsZXMoKSI+XG4gICAgPGRpdiBjbGFzcz0ibWF0LXNsaWRlci1mb2N1cy1yaW5nIj48L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJtYXQtc2xpZGVyLXRodW1iIj48L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJtYXQtc2xpZGVyLXRodW1iLWxhYmVsIj5cbiAgICAgIDxzcGFuIGNsYXNzPSJtYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHQiPnt7ZGlzcGxheVZhbHVlfX08L3NwYW4+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLGlucHV0czpbImRpc2FibGVkIiwiY29sb3IiLCJ0YWJJbmRleCJdLGVuY2Fwc3VsYXRpb246UG8uTm9uZSxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNoLHN0eWxlczpbJy5tYXQtc2xpZGVye2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjhweDtvdXRsaW5lOm5vbmU7dmVydGljYWwtYWxpZ246bWlkZGxlfS5tYXQtc2xpZGVyOm5vdCgubWF0LXNsaWRlci1kaXNhYmxlZCk6YWN0aXZlLC5tYXQtc2xpZGVyLm1hdC1zbGlkZXItc2xpZGluZzpub3QoLm1hdC1zbGlkZXItZGlzYWJsZWQpe2N1cnNvcjotd2Via2l0LWdyYWJiaW5nO2N1cnNvcjpncmFiYmluZ30ubWF0LXNsaWRlci13cmFwcGVye3Bvc2l0aW9uOmFic29sdXRlOy13ZWJraXQtcHJpbnQtY29sb3ItYWRqdXN0OmV4YWN0O2NvbG9yLWFkanVzdDpleGFjdH0ubWF0LXNsaWRlci10cmFjay13cmFwcGVye3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDtvdmVyZmxvdzpoaWRkZW59Lm1hdC1zbGlkZXItdHJhY2stZmlsbHtwb3NpdGlvbjphYnNvbHV0ZTt0cmFuc2Zvcm0tb3JpZ2luOjAgMDt0cmFuc2l0aW9uOnRyYW5zZm9ybSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxiYWNrZ3JvdW5kLWNvbG9yIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7cG9zaXRpb246YWJzb2x1dGU7dHJhbnNmb3JtLW9yaWdpbjoxMDAlIDEwMCU7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSksYmFja2dyb3VuZC1jb2xvciA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LXNsaWRlci10aWNrcy1jb250YWluZXJ7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3RvcDowO292ZXJmbG93OmhpZGRlbn0ubWF0LXNsaWRlci10aWNrc3tiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQ7YmFja2dyb3VuZC1jbGlwOmNvbnRlbnQtYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDtvcGFjaXR5OjA7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5tYXQtc2xpZGVyLXRodW1iLWNvbnRhaW5lcntwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjE7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1zbGlkZXItZm9jdXMtcmluZ3twb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDozMHB4O2hlaWdodDozMHB4O2JvcmRlci1yYWRpdXM6NTAlO3RyYW5zZm9ybTpzY2FsZSgwKTtvcGFjaXR5OjA7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSksYmFja2dyb3VuZC1jb2xvciA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5tYXQtc2xpZGVyLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmcsLm1hdC1zbGlkZXIuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LXNsaWRlci1mb2N1cy1yaW5ne3RyYW5zZm9ybTpzY2FsZSgxKTtvcGFjaXR5OjF9Lm1hdC1zbGlkZXI6bm90KC5tYXQtc2xpZGVyLWRpc2FibGVkKTpub3QoLm1hdC1zbGlkZXItc2xpZGluZykgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwsLm1hdC1zbGlkZXI6bm90KC5tYXQtc2xpZGVyLWRpc2FibGVkKTpub3QoLm1hdC1zbGlkZXItc2xpZGluZykgLm1hdC1zbGlkZXItdGh1bWJ7Y3Vyc29yOi13ZWJraXQtZ3JhYjtjdXJzb3I6Z3JhYn0ubWF0LXNsaWRlci10aHVtYntwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDotMTBweDtib3R0b206LTEwcHg7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjIwcHg7aGVpZ2h0OjIwcHg7Ym9yZGVyOjNweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItcmFkaXVzOjUwJTt0cmFuc2Zvcm06c2NhbGUoMC43KTt0cmFuc2l0aW9uOnRyYW5zZm9ybSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxiYWNrZ3JvdW5kLWNvbG9yIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJvcmRlci1jb2xvciA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LXNsaWRlci10aHVtYi1sYWJlbHtkaXNwbGF5Om5vbmU7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MjhweDtoZWlnaHQ6MjhweDtib3JkZXItcmFkaXVzOjUwJTt0cmFuc2l0aW9uOnRyYW5zZm9ybSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxib3JkZXItcmFkaXVzIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJhY2tncm91bmQtY29sb3IgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtvdXRsaW5lOnNvbGlkIDFweH0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e3otaW5kZXg6MTtvcGFjaXR5OjA7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5tYXQtc2xpZGVyLXNsaWRpbmcgLm1hdC1zbGlkZXItdHJhY2stZmlsbCwubWF0LXNsaWRlci1zbGlkaW5nIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmQsLm1hdC1zbGlkZXItc2xpZGluZyAubWF0LXNsaWRlci10aHVtYi1jb250YWluZXJ7dHJhbnNpdGlvbi1kdXJhdGlvbjowbXN9Lm1hdC1zbGlkZXItaGFzLXRpY2tzIC5tYXQtc2xpZGVyLXdyYXBwZXI6OmFmdGVye2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXdpZHRoOjA7Ym9yZGVyLXN0eWxlOnNvbGlkO29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1zbGlkZXItaGFzLXRpY2tzLmNkay1mb2N1c2VkOm5vdCgubWF0LXNsaWRlci1oaWRlLWxhc3QtdGljaykgLm1hdC1zbGlkZXItd3JhcHBlcjo6YWZ0ZXIsLm1hdC1zbGlkZXItaGFzLXRpY2tzOmhvdmVyOm5vdCgubWF0LXNsaWRlci1oaWRlLWxhc3QtdGljaykgLm1hdC1zbGlkZXItd3JhcHBlcjo6YWZ0ZXJ7b3BhY2l0eToxfS5tYXQtc2xpZGVyLWhhcy10aWNrcy5jZGstZm9jdXNlZDpub3QoLm1hdC1zbGlkZXItZGlzYWJsZWQpIC5tYXQtc2xpZGVyLXRpY2tzLC5tYXQtc2xpZGVyLWhhcy10aWNrczpob3Zlcjpub3QoLm1hdC1zbGlkZXItZGlzYWJsZWQpIC5tYXQtc2xpZGVyLXRpY2tze29wYWNpdHk6MX0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7ZGlzcGxheTpub25lfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7ZGlzcGxheTpmbGV4fS5tYXQtc2xpZGVyLWF4aXMtaW52ZXJ0ZWQgLm1hdC1zbGlkZXItdHJhY2stZmlsbHt0cmFuc2Zvcm0tb3JpZ2luOjEwMCUgMTAwJX0ubWF0LXNsaWRlci1heGlzLWludmVydGVkIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7dHJhbnNmb3JtLW9yaWdpbjowIDB9Lm1hdC1zbGlkZXI6bm90KC5tYXQtc2xpZGVyLWRpc2FibGVkKS5jZGstZm9jdXNlZC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcgLm1hdC1zbGlkZXItdGh1bWJ7dHJhbnNmb3JtOnNjYWxlKDApfS5tYXQtc2xpZGVyOm5vdCgubWF0LXNsaWRlci1kaXNhYmxlZCkuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7Ym9yZGVyLXJhZGl1czo1MCUgNTAlIDB9Lm1hdC1zbGlkZXI6bm90KC5tYXQtc2xpZGVyLWRpc2FibGVkKS5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e29wYWNpdHk6MX0ubWF0LXNsaWRlcjpub3QoLm1hdC1zbGlkZXItZGlzYWJsZWQpLmNkay1tb3VzZS1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtc2xpZGVyOm5vdCgubWF0LXNsaWRlci1kaXNhYmxlZCkuY2RrLXRvdWNoLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXI6bm90KC5tYXQtc2xpZGVyLWRpc2FibGVkKS5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1ie2JvcmRlci13aWR0aDoycHg7dHJhbnNmb3JtOnNjYWxlKDEpfS5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7dHJhbnNmb3JtOnNjYWxlKDApO29wYWNpdHk6MH0ubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10aHVtYntib3JkZXItd2lkdGg6NHB4O3RyYW5zZm9ybTpzY2FsZSgwLjUpfS5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2Rpc3BsYXk6bm9uZX0ubWF0LXNsaWRlci1ob3Jpem9udGFse2hlaWdodDo0OHB4O21pbi13aWR0aDoxMjhweH0ubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXdyYXBwZXJ7aGVpZ2h0OjJweDt0b3A6MjNweDtsZWZ0OjhweDtyaWdodDo4cHh9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci13cmFwcGVyOjphZnRlcntoZWlnaHQ6MnB4O2JvcmRlci1sZWZ0LXdpZHRoOjJweDtyaWdodDowO3RvcDowfS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdHJhY2std3JhcHBlcntoZWlnaHQ6MnB4O3dpZHRoOjEwMCV9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10cmFjay1maWxse2hlaWdodDoycHg7d2lkdGg6MTAwJTt0cmFuc2Zvcm06c2NhbGVYKDApfS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZHtoZWlnaHQ6MnB4O3dpZHRoOjEwMCU7dHJhbnNmb3JtOnNjYWxlWCgxKX0ubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRpY2tzLWNvbnRhaW5lcntoZWlnaHQ6MnB4O3dpZHRoOjEwMCV9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRpY2tzLWNvbnRhaW5lcntoZWlnaHQ6MDtvdXRsaW5lOnNvbGlkIDJweDt0b3A6MXB4fS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdGlja3N7aGVpZ2h0OjJweDt3aWR0aDoxMDAlfS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdGh1bWItY29udGFpbmVye3dpZHRoOjEwMCU7aGVpZ2h0OjA7dG9wOjUwJX0ubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7dG9wOi0xNXB4O3JpZ2h0Oi0xNXB4fS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7cmlnaHQ6LTE0cHg7dG9wOi00MHB4O3RyYW5zZm9ybTp0cmFuc2xhdGVZKDI2cHgpIHNjYWxlKDAuMDEpIHJvdGF0ZSg0NWRlZyl9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKX0ubWF0LXNsaWRlci1ob3Jpem9udGFsLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zbGlkZXItaG9yaXpvbnRhbC5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYi1sYWJlbCwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc2xpZGVyLWhvcml6b250YWwuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dHt0cmFuc2Zvcm06bm9uZX0ubWF0LXNsaWRlci12ZXJ0aWNhbHt3aWR0aDo0OHB4O21pbi1oZWlnaHQ6MTI4cHh9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItd3JhcHBlcnt3aWR0aDoycHg7dG9wOjhweDtib3R0b206OHB4O2xlZnQ6MjNweH0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci13cmFwcGVyOjphZnRlcnt3aWR0aDoycHg7Ym9yZGVyLXRvcC13aWR0aDoycHg7Ym90dG9tOjA7bGVmdDowfS5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXRyYWNrLXdyYXBwZXJ7aGVpZ2h0OjEwMCU7d2lkdGg6MnB4fS5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXRyYWNrLWZpbGx7aGVpZ2h0OjEwMCU7d2lkdGg6MnB4O3RyYW5zZm9ybTpzY2FsZVkoMCl9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZHtoZWlnaHQ6MTAwJTt3aWR0aDoycHg7dHJhbnNmb3JtOnNjYWxlWSgxKX0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10aWNrcy1jb250YWluZXJ7d2lkdGg6MnB4O2hlaWdodDoxMDAlfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdGlja3MtY29udGFpbmVye3dpZHRoOjA7b3V0bGluZTpzb2xpZCAycHg7bGVmdDoxcHh9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItZm9jdXMtcmluZ3tib3R0b206LTE1cHg7bGVmdDotMTVweH0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10aWNrc3t3aWR0aDoycHg7aGVpZ2h0OjEwMCV9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdGh1bWItY29udGFpbmVye2hlaWdodDoxMDAlO3dpZHRoOjA7bGVmdDo1MCV9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdGh1bWJ7LXdlYmtpdC1iYWNrZmFjZS12aXNpYmlsaXR5OmhpZGRlbjtiYWNrZmFjZS12aXNpYmlsaXR5OmhpZGRlbn0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtib3R0b206LTE0cHg7bGVmdDotNDBweDt0cmFuc2Zvcm06dHJhbnNsYXRlWCgyNnB4KSBzY2FsZSgwLjAxKSByb3RhdGUoLTQ1ZGVnKX0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpfS5tYXQtc2xpZGVyLXZlcnRpY2FsLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKX1bZGlyPXJ0bF0gLm1hdC1zbGlkZXItd3JhcHBlcjo6YWZ0ZXJ7bGVmdDowO3JpZ2h0OmF1dG99W2Rpcj1ydGxdIC5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdHJhY2stZmlsbHt0cmFuc2Zvcm0tb3JpZ2luOjEwMCUgMTAwJX1bZGlyPXJ0bF0gLm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke3RyYW5zZm9ybS1vcmlnaW46MCAwfVtkaXI9cnRsXSAubWF0LXNsaWRlci1ob3Jpem9udGFsLm1hdC1zbGlkZXItYXhpcy1pbnZlcnRlZCAubWF0LXNsaWRlci10cmFjay1maWxse3RyYW5zZm9ybS1vcmlnaW46MCAwfVtkaXI9cnRsXSAubWF0LXNsaWRlci1ob3Jpem9udGFsLm1hdC1zbGlkZXItYXhpcy1pbnZlcnRlZCAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke3RyYW5zZm9ybS1vcmlnaW46MTAwJSAxMDAlfS5tYXQtc2xpZGVyLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtc2xpZGVyLXRyYWNrLWZpbGwsLm1hdC1zbGlkZXIuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZCwubWF0LXNsaWRlci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LXNsaWRlci10aWNrcywubWF0LXNsaWRlci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LXNsaWRlci10aHVtYi1jb250YWluZXIsLm1hdC1zbGlkZXIuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1zbGlkZXItZm9jdXMtcmluZywubWF0LXNsaWRlci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LXNsaWRlci10aHVtYiwubWF0LXNsaWRlci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LXNsaWRlci10aHVtYi1sYWJlbCwubWF0LXNsaWRlci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0LC5tYXQtc2xpZGVyLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtc2xpZGVyLWhhcy10aWNrcyAubWF0LXNsaWRlci13cmFwcGVyOjphZnRlcnt0cmFuc2l0aW9uOm5vbmV9XG4nXX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmNofSx7dHlwZTpwen0se3R5cGU6SGh9LHt0eXBlOk16LGRlY29yYXRvcnM6W3t0eXBlOl9zfV19LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpScixhcmdzOlsidGFiaW5kZXgiXX1dfSx7dHlwZTp0Q30se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W1VDXX1dfSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W053XX1dfV19KSx7Y2hhbmdlOlt7dHlwZTpfX31dLGlucHV0Olt7dHlwZTpfX31dLHZhbHVlQ2hhbmdlOlt7dHlwZTpfX31dLGludmVydDpbe3R5cGU6eV99XSxtYXg6W3t0eXBlOnlffV0sbWluOlt7dHlwZTp5X31dLHZhbHVlOlt7dHlwZTp5X31dLHN0ZXA6W3t0eXBlOnlffV0sdGh1bWJMYWJlbDpbe3R5cGU6eV99XSx0aWNrSW50ZXJ2YWw6W3t0eXBlOnlffV0sdmVydGljYWw6W3t0eXBlOnlffV0sZGlzcGxheVdpdGg6W3t0eXBlOnlffV0sdmFsdWVUZXh0Olt7dHlwZTp5X31dLF9zbGlkZXJXcmFwcGVyOlt7dHlwZTpGcixhcmdzOlsic2xpZGVyV3JhcHBlciJdfV19KTtjbGFzcyBQWHt9UFguybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFBYKX0sUFguybVtb2Q9Wm8oe3R5cGU6UFh9KSxQWC7JtWluaj1jbyh7aW1wb3J0czpbW0J2LFR6XSxUel19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKFBYLHtkZWNsYXJhdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm5bdlhdfSxpbXBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW0J2LFR6XX0sZXhwb3J0czpmdW5jdGlvbigpe3JldHVyblt2WCxUel19fSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihQWCxbe3R5cGU6a18sYXJnczpbe2ltcG9ydHM6W0J2LFR6XSxleHBvcnRzOlt2WCxUel0sZGVjbGFyYXRpb25zOlt2WF19XX1dLG51bGwsbnVsbCk7Y29uc3Qgd1g9ezE5OiJmbG9hdDE2IiwxOiJmbG9hdDMyIiwyOiJmbG9hdDY0IiwzOiJpbnQzMiIsNDoidWludDgiLDE3OiJ1aW50MTYiLDIyOiJ1aW50MzIiLDIzOiJ1aW50NjQiLDU6ImludDE2Iiw2OiJpbnQ4Iiw3OiJzdHJpbmciLDg6ImNvbXBsZXg2NCIsMTg6ImNvbXBsZXgxMjgiLDk6ImludDY0IiwxMDoiYm9vbCIsMTE6InFpbnQ4IiwxMjoicXVpbnQ4IiwxNToicWludDE2IiwxNjoicXVpbnQxNiIsMTM6InFpbnQzMiIsMTQ6ImJmbG9hdDE2IiwyMDoicmVzb3VyY2UiLDIxOiJ2YXJpYW50IiwxMTk6ImZsb2F0MTZfcmVmIiwxMDE6ImZsb2F0MzJfcmVmIiwxMDI6ImZsb2F0NjRfcmVmIiwxMDM6ImludDMyX3JlZiIsMTIyOiJ1aW50MzJfcmVmIiwxMDQ6InVpbnQ4X3JlZiIsMTE3OiJ1aW50MTZfcmVmIiwxMDU6ImludDE2X3JlZiIsMTA2OiJpbnQ4X3JlZiIsMTA3OiJzdHJpbmdfcmVmIiwxMDg6ImNvbXBsZXg2NF9yZWYiLDExODoiY29tcGxleDEyOF9yZWYiLDEwOToiaW50NjRfcmVmIiwxMjM6InVpbnQ2NF9yZWYiLDExMDoiYm9vbF9yZWYiLDExMToicWludDhfcmVmIiwxMTI6InF1aW50OF9yZWYiLDExNToicWludDE2X3JlZiIsMTE2OiJxdWludDE2X3JlZiIsMTEzOiJxaW50MzJfcmVmIiwxMTQ6ImJmbG9hdDE2X3JlZiIsMTIwOiJyZXNvdXJjZV9yZWYiLDEyMToidmFyaWFudF9yZWYifTtmdW5jdGlvbiBrWCh0KXtjb25zdHt0ZW5zb3JEZWJ1Z01vZGU6ZSxhcnJheTpufT10O3N3aXRjaChlKXtjYXNlIG9aLk5PX1RFTlNPUjppZihudWxsIT09bil0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWRseSByZWNlaXZlZCBub24tbnVsbCBkZWJ1Zy10ZW5zb3ItdmFsdWUgYXJyYXkgdW5kZXIgTk9fVEVOU09SIG1vZGUiKTtyZXR1cm57fTtjYXNlIG9aLkNVUlRfSEVBTFRIOmlmKG51bGw9PT1ufHwyIT09bi5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKGBVbmRlciBDVVJUX0hFQUxUSCBtb2RlLCBleHBlY3RlZCBkZWJ1Zy10ZW5zb3ItdmFsdWUgYXJyYXkgdG8gaGF2ZSBsZW5ndGggMiwgYnV0IGdvdCAke0pTT04uc3RyaW5naWZ5KG4pfWApO3JldHVybntoYXNJbmZPck5hTjpCb29sZWFuKG5bMV0pfTtjYXNlIG9aLkNPTkNJU0VfSEVBTFRIOntpZihudWxsPT09bnx8NSE9PW4ubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgVW5kZXIgQ09OQ0lTRV9IRUFMVEggbW9kZSwgZXhwZWN0ZWQgZGVidWctdGVuc29yLXZhbHVlIGFycmF5IHRvIGhhdmUgbGVuZ3RoIDUsIGJ1dCBnb3QgJHtKU09OLnN0cmluZ2lmeShuKX1gKTtjb25zdCB0PXtzaXplOm5bMV19O3JldHVybiBuWzJdPjAmJih0Lm51bU5lZ2F0aXZlSW5mcz1uWzJdKSxuWzNdPjAmJih0Lm51bVBvc2l0aXZlSW5mcz1uWzNdKSxuWzRdPjAmJih0Lm51bU5hTnM9bls0XSksdH1jYXNlIG9aLlNIQVBFOntpZihudWxsPT09bnx8MTAhPT1uLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoYFVuZGVyIFNIQVBFIG1vZGUsIGV4cGVjdGVkIGRlYnVnLXRlbnNvci12YWx1ZSBhcnJheSB0byBoYXZlIGxlbmd0aCAxMCwgYnV0IGdvdCAke0pTT04uc3RyaW5naWZ5KG4pfWApO2NvbnN0IHQ9blsyXTtsZXQgZT1uLnNsaWNlKDQsTWF0aC5taW4oNCt0LG4ubGVuZ3RoKSk7cmV0dXJuIGUubGVuZ3RoPHQmJihlPW5ldyBBcnJheSh0LWUubGVuZ3RoKS5jb25jYXQoZSkpLHtkdHlwZTp3WFtuWzFdXSxyYW5rOnQsc2l6ZTpuWzNdLHNoYXBlOmV9fWNhc2Ugb1ouRlVMTF9IRUFMVEg6e2lmKG51bGw9PT1ufHwxMSE9PW4ubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgVW5kZXIgRlVMTF9IRUFMVEggbW9kZSwgZXhwZWN0ZWQgZGVidWctdGVuc29yLXZhbHVlIGFycmF5IHRvIGhhdmUgbGVuZ3RoIDExLCBidXQgZ290ICR7SlNPTi5zdHJpbmdpZnkobil9YCk7Y29uc3QgdD17ZHR5cGU6d1hbblsyXV0scmFuazpuWzNdLHNpemU6bls0XX07cmV0dXJuIG5bNV0+MCYmKHQubnVtTmVnYXRpdmVJbmZzPW5bNV0pLG5bNl0+MCYmKHQubnVtUG9zaXRpdmVJbmZzPW5bNl0pLG5bN10+MCYmKHQubnVtTmFOcz1uWzddKSxuWzhdPjAmJih0Lm51bU5lZ2F0aXZlRmluaXRlcz1uWzhdKSxuWzldPjAmJih0Lm51bVplcm9zPW5bOV0pLG5bMTBdPjAmJih0Lm51bVBvc2l0aXZlRmluaXRlcz1uWzEwXSksdH1jYXNlIG9aLkZVTExfVEVOU09SOmlmKG51bGwhPT1uKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZGx5IHJlY2VpdmVkIG5vbi1udWxsIGRlYnVnLXRlbnNvci12YWx1ZSBhcnJheSB1bmRlciBGVUxMX1RFTlNPUiBtb2RlIik7cmV0dXJue307ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFVucmVjb2duaXplZCB0ZW5zb3JEZWJ1Z01vZGU6ICR7ZX1gKX19Y29uc3QgU1g9Iltfbmdob3N0LSVDT01QJV0ge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNlM2U1ZTg7XG4gICAgYm9yZGVyOiAxcHggc29saWQgI2MwYzBjMDtcbiAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubycsIG1vbm9zcGFjZTtcbiAgICBoZWlnaHQ6IDE0cHg7XG4gICAgbGluZS1oZWlnaHQ6IDE0cHg7XG4gICAgbWFyZ2luOiAwIDJweDtcbiAgICBwYWRkaW5nOiAxcHggM3B4O1xuICAgIHdpZHRoOiBtYXgtY29udGVudDtcbiAgfSI7ZnVuY3Rpb24gRFgodCxlKXsxJnQmJnd1KDAsImRpdiIsNCl9ZnVuY3Rpb24gRVgodCxlKXtpZigxJnQmJihPdSgwLCJkaXYiLDcpLE91KDEsInNwYW4iLDgpLE1mKDIsIk5hTiIpLFB1KCksT3UoMywic3BhbiIsOSksTWYoNCksUHUoKSxQdSgpKSwyJnQpe2NvbnN0IHQ9THUoMik7SmMoNCkseGYoIsOXIix0Lm51bU5hTnMsIiIpfX1mdW5jdGlvbiBBWCh0LGUpe2lmKDEmdCYmKE91KDAsImRpdiIsNyksT3UoMSwic3BhbiIsOCksTWYoMiwiLeKIniIpLFB1KCksT3UoMywic3BhbiIsOSksTWYoNCksUHUoKSxQdSgpKSwyJnQpe2NvbnN0IHQ9THUoMik7SmMoNCkseGYoIsOXIix0Lm51bU5lZ2F0aXZlSW5mcywiIil9fWZ1bmN0aW9uIFJYKHQsZSl7aWYoMSZ0JiYoT3UoMCwiZGl2Iiw3KSxPdSgxLCJzcGFuIiw4KSxNZigyLCIr4oieIiksUHUoKSxPdSgzLCJzcGFuIiw5KSxNZig0KSxQdSgpLFB1KCkpLDImdCl7Y29uc3QgdD1MdSgyKTtKYyg0KSx4Zigiw5ciLHQubnVtUG9zaXRpdmVJbmZzLCIiKX19ZnVuY3Rpb24gVFgodCxlKXtpZigxJnQmJihPdSgwLCJkaXYiLDcpLE91KDEsInNwYW4iLDEwKSxNZigyLCItIiksUHUoKSxPdSgzLCJzcGFuIiw5KSxNZig0KSxQdSgpLFB1KCkpLDImdCl7Y29uc3QgdD1MdSgyKTtKYyg0KSx4Zigiw5ciLHQubnVtTmVnYXRpdmVGaW5pdGVzLCIiKX19ZnVuY3Rpb24gTlgodCxlKXtpZigxJnQmJihPdSgwLCJkaXYiLDcpLE91KDEsInNwYW4iLDEwKSxNZigyLCIwIiksUHUoKSxPdSgzLCJzcGFuIiw5KSxNZig0KSxQdSgpLFB1KCkpLDImdCl7Y29uc3QgdD1MdSgyKTtKYyg0KSx4Zigiw5ciLHQubnVtWmVyb3MsIiIpfX1mdW5jdGlvbiBJWCh0LGUpe2lmKDEmdCYmKE91KDAsImRpdiIsNyksT3UoMSwic3BhbiIsMTApLE1mKDIsIisiKSxQdSgpLE91KDMsInNwYW4iLDkpLE1mKDQpLFB1KCksUHUoKSksMiZ0KXtjb25zdCB0PUx1KDIpO0pjKDQpLHhmKCLDlyIsdC5udW1Qb3NpdGl2ZUZpbml0ZXMsIiIpfX1mdW5jdGlvbiB6WCh0LGUpe2lmKDEmdCYmKE91KDAsImRpdiIsNSksV20oMSxFWCw1LDEsImRpdiIsNiksV20oMixBWCw1LDEsImRpdiIsNiksV20oMyxSWCw1LDEsImRpdiIsNiksV20oNCxUWCw1LDEsImRpdiIsNiksV20oNSxOWCw1LDEsImRpdiIsNiksV20oNixJWCw1LDEsImRpdiIsNiksUHUoKSksMiZ0KXtjb25zdCB0PUx1KCk7SmMoMSksdnUoIm5nSWYiLHZvaWQgMCE9PXQubnVtTmFOcyYmdC5udW1OYU5zPjApLEpjKDEpLHZ1KCJuZ0lmIix2b2lkIDAhPT10Lm51bU5lZ2F0aXZlSW5mcyYmdC5udW1OZWdhdGl2ZUluZnM+MCksSmMoMSksdnUoIm5nSWYiLHZvaWQgMCE9PXQubnVtUG9zaXRpdmVJbmZzJiZ0Lm51bVBvc2l0aXZlSW5mcz4wKSxKYygxKSx2dSgibmdJZiIsdm9pZCAwIT09dC5udW1OZWdhdGl2ZUZpbml0ZXMmJnQubnVtTmVnYXRpdmVGaW5pdGVzPjApLEpjKDEpLHZ1KCJuZ0lmIix2b2lkIDAhPT10Lm51bVplcm9zJiZ0Lm51bVplcm9zPjApLEpjKDEpLHZ1KCJuZ0lmIix2b2lkIDAhPT10Lm51bVBvc2l0aXZlRmluaXRlcyYmdC5udW1Qb3NpdGl2ZUZpbml0ZXM+MCl9fWNvbnN0IEhYPWZ1bmN0aW9uKHQpe3JldHVyblsiY29udGFpbmVyIix0XX07ZnVuY3Rpb24gRlgodCxlKXsxJnQmJnd1KDAsImRlYnVnLXRlbnNvci1kdHlwZSIsNSksMiZ0JiZ2dSgiZHR5cGUiLEx1KCkuZGVidWdUZW5zb3JWYWx1ZS5kdHlwZSl9ZnVuY3Rpb24gTFgodCxlKXsxJnQmJnd1KDAsImRlYnVnLXRlbnNvci1yYW5rIiw2KSwyJnQmJnZ1KCJyYW5rIixMdSgpLmRlYnVnVGVuc29yVmFsdWUucmFuayl9ZnVuY3Rpb24gQlgodCxlKXsxJnQmJnd1KDAsImRlYnVnLXRlbnNvci1zaGFwZSIsNyksMiZ0JiZ2dSgic2hhcGUiLEx1KCkuZGVidWdUZW5zb3JWYWx1ZS5zaGFwZSl9ZnVuY3Rpb24gVlgodCxlKXsxJnQmJnd1KDAsImRlYnVnLXRlbnNvci1oYXMtaW5mLW9yLW5hbiIsOCksMiZ0JiZ2dSgiaGFzSW5mT3JOYU4iLEx1KCkuZGVidWdUZW5zb3JWYWx1ZS5oYXNJbmZPck5hTil9ZnVuY3Rpb24galgodCxlKXtpZigxJnQmJnd1KDAsImRlYnVnLXRlbnNvci1udW1lcmljLWJyZWFrZG93biIsOSksMiZ0KXtjb25zdCB0PUx1KCk7VXUoInNpemUiLHQuZGVidWdUZW5zb3JWYWx1ZS5zaXplKSx2dSgibnVtTmVnYXRpdmVJbmZzIix0LmRlYnVnVGVuc29yVmFsdWUubnVtTmVnYXRpdmVJbmZzKSgibnVtUG9zaXRpdmVJbmZzIix0LmRlYnVnVGVuc29yVmFsdWUubnVtUG9zaXRpdmVJbmZzKSgibnVtTmFOcyIsdC5kZWJ1Z1RlbnNvclZhbHVlLm51bU5hTnMpKCJudW1OZWdhdGl2ZUZpbml0ZXMiLHQuZGVidWdUZW5zb3JWYWx1ZS5udW1OZWdhdGl2ZUZpbml0ZXMpKCJudW1aZXJvcyIsdC5kZWJ1Z1RlbnNvclZhbHVlLm51bVplcm9zKSgibnVtUG9zaXRpdmVGaW5pdGVzIix0LmRlYnVnVGVuc29yVmFsdWUubnVtUG9zaXRpdmVGaW5pdGVzKX19Y29uc3QgVVg9IlxuICA6aG9zdCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2UzZTVlODtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjYzBjMGMwO1xuICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJywgbW9ub3NwYWNlO1xuICAgIGhlaWdodDogMTRweDtcbiAgICBsaW5lLWhlaWdodDogMTRweDtcbiAgICBtYXJnaW46IDAgMnB4O1xuICAgIHBhZGRpbmc6IDFweCAzcHg7XG4gICAgd2lkdGg6IG1heC1jb250ZW50O1xuICB9XG4iO2NsYXNzIFdYe31XWC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8V1gpfSxXWC7JtWNtcD1Vbyh7dHlwZTpXWCxzZWxlY3RvcnM6W1siZGVidWctdGVuc29yLWR0eXBlIl1dLGlucHV0czp7ZHR5cGU6ImR0eXBlIn0sZGVjbHM6MSx2YXJzOjEsdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmTWYoMCksMiZlJiZ4ZigiICIsbi5kdHlwZSwiICIpfSxzdHlsZXM6W1NYXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoV1gsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoiZGVidWctdGVuc29yLWR0eXBlIix0ZW1wbGF0ZToiIHt7IGR0eXBlIH19ICIsc3R5bGVzOltVWF19XX1dLG51bGwse2R0eXBlOlt7dHlwZTp5X31dfSk7Y2xhc3MgR1h7fUdYLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxHWCl9LEdYLsm1Y21wPVVvKHt0eXBlOkdYLHNlbGVjdG9yczpbWyJkZWJ1Zy10ZW5zb3ItcmFuayJdXSxpbnB1dHM6e3Jhbms6InJhbmsifSxkZWNsczoxLHZhcnM6MSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiZNZigwKSwyJmUmJnhmKCIgIixuLnJhbmssIkQgIil9LHN0eWxlczpbU1hdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihHWCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJkZWJ1Zy10ZW5zb3ItcmFuayIsdGVtcGxhdGU6IiB7eyByYW5rIH19RCAiLHN0eWxlczpbVVhdfV19XSxudWxsLHtyYW5rOlt7dHlwZTp5X31dfSk7Y2xhc3MgWVh7Z2V0IHNoYXBlU3RyaW5nKCl7cmV0dXJuIlsiK3RoaXMuc2hhcGUubWFwKCh0PT52b2lkIDA9PT10PyI/IjpTdHJpbmcodCkpKS5qb2luKCIsIikrIl0ifX1ZWC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8WVgpfSxZWC7JtWNtcD1Vbyh7dHlwZTpZWCxzZWxlY3RvcnM6W1siZGVidWctdGVuc29yLXNoYXBlIl1dLGlucHV0czp7c2hhcGU6InNoYXBlIn0sZGVjbHM6MSx2YXJzOjEsdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmTWYoMCksMiZlJiZ4ZigiIHNoYXBlOiIsbi5zaGFwZVN0cmluZywiICIpfSxzdHlsZXM6W1NYXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoWVgsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoiZGVidWctdGVuc29yLXNoYXBlIix0ZW1wbGF0ZToiIHNoYXBlOnt7IHNoYXBlU3RyaW5nIH19ICIsc3R5bGVzOltVWF19XX1dLG51bGwse3NoYXBlOlt7dHlwZTp5X31dfSk7Y2xhc3MgcVh7Z2V0IGJyZWFrZG93bkV4aXN0cygpe3JldHVybiB2b2lkIDAhPT10aGlzLm51bU5hTnN8fHZvaWQgMCE9PXRoaXMubnVtTmVnYXRpdmVJbmZzfHx2b2lkIDAhPT10aGlzLm51bVBvc2l0aXZlSW5mc3x8dm9pZCAwIT09dGhpcy5udW1OZWdhdGl2ZUZpbml0ZXN8fHZvaWQgMCE9PXRoaXMubnVtWmVyb3N8fHZvaWQgMCE9PXRoaXMubnVtUG9zaXRpdmVGaW5pdGVzfX1xWC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8cVgpfSxxWC7JtWNtcD1Vbyh7dHlwZTpxWCxzZWxlY3RvcnM6W1siZGVidWctdGVuc29yLW51bWVyaWMtYnJlYWtkb3duIl1dLGlucHV0czp7c2l6ZToic2l6ZSIsbnVtTmFOczoibnVtTmFOcyIsbnVtTmVnYXRpdmVJbmZzOiJudW1OZWdhdGl2ZUluZnMiLG51bVBvc2l0aXZlSW5mczoibnVtUG9zaXRpdmVJbmZzIixudW1OZWdhdGl2ZUZpbml0ZXM6Im51bU5lZ2F0aXZlRmluaXRlcyIsbnVtWmVyb3M6Im51bVplcm9zIixudW1Qb3NpdGl2ZUZpbml0ZXM6Im51bVBvc2l0aXZlRmluaXRlcyJ9LGRlY2xzOjcsdmFyczozLGNvbnN0czpbWzEsInNpemUiXSxbMSwic2l6ZS12YWx1ZSJdLFsiY2xhc3MiLCJicmVhayIsNCwibmdJZiJdLFsiY2xhc3MiLCJicmVha2Rvd24iLDQsIm5nSWYiXSxbMSwiYnJlYWsiXSxbMSwiYnJlYWtkb3duIl0sWyJjbGFzcyIsImNhdGVnb3J5Iiw0LCJuZ0lmIl0sWzEsImNhdGVnb3J5Il0sWzEsImNhdGVnb3J5LXRhZyIsImluZmluaXRlIl0sWzEsImNhdGVnb3J5LWNvdW50Il0sWzEsImNhdGVnb3J5LXRhZyIsImZpbml0ZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoT3UoMCwiZGl2IiwwKSxPdSgxLCJzcGFuIiksTWYoMiwic2l6ZToiKSxQdSgpLE91KDMsInNwYW4iLDEpLE1mKDQpLFB1KCksUHUoKSxXbSg1LERYLDEsMCwiZGl2IiwyKSxXbSg2LHpYLDcsNiwiZGl2IiwzKSksMiZlJiYoSmMoNCksdmYobi5zaXplKSxKYygxKSx2dSgibmdJZiIsbi5icmVha2Rvd25FeGlzdHMpLEpjKDEpLHZ1KCJuZ0lmIixuLmJyZWFrZG93bkV4aXN0cykpfSxkaXJlY3RpdmVzOlthdl0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlM2U1ZTg7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNjMGMwYzA7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgICAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubycsIG1vbm9zcGFjZTtcbiAgICAgICAgZm9udC1zaXplOiAxMHB4O1xuICAgICAgICBtYXJnaW46IDAgMnB4O1xuICAgICAgICBwYWRkaW5nOiAxcHg7XG4gICAgICB9XG4gICAgICAuYnJlYWtbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgZmxleC1iYXNpczogMTAwJTtcbiAgICAgICAgd2lkdGg6IDA7XG4gICAgICB9XG4gICAgICAuc2l6ZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgaGVpZ2h0OiAxMXB4O1xuICAgICAgICBsaW5lLWhlaWdodDogMTFweDtcbiAgICAgICAgbWFyZ2luOiAwIDNweDtcbiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICAgIH1cbiAgICAgIC5icmVha2Rvd25bX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4xMik7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGhlaWdodDogMTFweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDExcHg7XG4gICAgICAgIHBhZGRpbmc6IDJweDtcbiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICAgIH1cbiAgICAgIC5jYXRlZ29yeVtfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAycHg7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiA0cHg7XG4gICAgICAgIG1hcmdpbi10b3A6IDJweDtcbiAgICAgICAgaGVpZ3RoOiAxMDAlO1xuICAgICAgICB3aWR0aDogbWF4LWNvbnRlbnQ7XG4gICAgICB9XG4gICAgICAuY2F0ZWdvcnktdGFnW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgICAgICAgcGFkZGluZzogMCAycHg7XG4gICAgICB9XG4gICAgICAuZmluaXRlW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNhYWE7XG4gICAgICAgIGNvbG9yOiAjZmVmZWZlO1xuICAgICAgfVxuICAgICAgLmluZmluaXRlW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlNTI1OTI7XG4gICAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgfSJdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihxWCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJkZWJ1Zy10ZW5zb3ItbnVtZXJpYy1icmVha2Rvd24iLHRlbXBsYXRlOidcbiAgICA8ZGl2IGNsYXNzPSJzaXplIj5cbiAgICAgIDxzcGFuPnNpemU6PC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9InNpemUtdmFsdWUiPnt7IHNpemUgfX08L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj0iYnJlYWtkb3duRXhpc3RzIiBjbGFzcz0iYnJlYWsiPjwvZGl2PlxuICAgIDxkaXYgKm5nSWY9ImJyZWFrZG93bkV4aXN0cyIgY2xhc3M9ImJyZWFrZG93biI+XG4gICAgICA8ZGl2ICpuZ0lmPSJudW1OYU5zICE9PSB1bmRlZmluZWQgJiYgbnVtTmFOcyA+IDAiIGNsYXNzPSJjYXRlZ29yeSI+XG4gICAgICAgIDxzcGFuIGNsYXNzPSJjYXRlZ29yeS10YWcgaW5maW5pdGUiPk5hTjwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9ImNhdGVnb3J5LWNvdW50Ij7Dl3t7IG51bU5hTnMgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nSWY9Im51bU5lZ2F0aXZlSW5mcyAhPT0gdW5kZWZpbmVkICYmIG51bU5lZ2F0aXZlSW5mcyA+IDAiXG4gICAgICAgIGNsYXNzPSJjYXRlZ29yeSJcbiAgICAgID5cbiAgICAgICAgPHNwYW4gY2xhc3M9ImNhdGVnb3J5LXRhZyBpbmZpbml0ZSI+LeKInjwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9ImNhdGVnb3J5LWNvdW50Ij7Dl3t7IG51bU5lZ2F0aXZlSW5mcyB9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj0ibnVtUG9zaXRpdmVJbmZzICE9PSB1bmRlZmluZWQgJiYgbnVtUG9zaXRpdmVJbmZzID4gMCJcbiAgICAgICAgY2xhc3M9ImNhdGVnb3J5IlxuICAgICAgPlxuICAgICAgICA8c3BhbiBjbGFzcz0iY2F0ZWdvcnktdGFnIGluZmluaXRlIj4r4oiePC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz0iY2F0ZWdvcnktY291bnQiPsOXe3sgbnVtUG9zaXRpdmVJbmZzIH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPSJudW1OZWdhdGl2ZUZpbml0ZXMgIT09IHVuZGVmaW5lZCAmJiBudW1OZWdhdGl2ZUZpbml0ZXMgPiAwIlxuICAgICAgICBjbGFzcz0iY2F0ZWdvcnkiXG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzPSJjYXRlZ29yeS10YWcgZmluaXRlIj4tPC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz0iY2F0ZWdvcnktY291bnQiPsOXe3sgbnVtTmVnYXRpdmVGaW5pdGVzIH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPSJudW1aZXJvcyAhPT0gdW5kZWZpbmVkICYmIG51bVplcm9zID4gMCIgY2xhc3M9ImNhdGVnb3J5Ij5cbiAgICAgICAgPHNwYW4gY2xhc3M9ImNhdGVnb3J5LXRhZyBmaW5pdGUiPjA8L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPSJjYXRlZ29yeS1jb3VudCI+w5d7eyBudW1aZXJvcyB9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj0ibnVtUG9zaXRpdmVGaW5pdGVzICE9PSB1bmRlZmluZWQgJiYgbnVtUG9zaXRpdmVGaW5pdGVzID4gMCJcbiAgICAgICAgY2xhc3M9ImNhdGVnb3J5IlxuICAgICAgPlxuICAgICAgICA8c3BhbiBjbGFzcz0iY2F0ZWdvcnktdGFnIGZpbml0ZSI+Kzwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9ImNhdGVnb3J5LWNvdW50Ij7Dl3t7IG51bVBvc2l0aXZlRmluaXRlcyB9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAnLHN0eWxlczpbIlxuICAgICAgOmhvc3Qge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTNlNWU4O1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjYzBjMGMwO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nLCBtb25vc3BhY2U7XG4gICAgICAgIGZvbnQtc2l6ZTogMTBweDtcbiAgICAgICAgbWFyZ2luOiAwIDJweDtcbiAgICAgICAgcGFkZGluZzogMXB4O1xuICAgICAgfVxuICAgICAgLmJyZWFrIHtcbiAgICAgICAgZmxleC1iYXNpczogMTAwJTtcbiAgICAgICAgd2lkdGg6IDA7XG4gICAgICB9XG4gICAgICAuc2l6ZSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBoZWlnaHQ6IDExcHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxMXB4O1xuICAgICAgICBtYXJnaW46IDAgM3B4O1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgICAgfVxuICAgICAgLmJyZWFrZG93biB7XG4gICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMTIpO1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBoZWlnaHQ6IDExcHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxMXB4O1xuICAgICAgICBwYWRkaW5nOiAycHg7XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICB9XG4gICAgICAuY2F0ZWdvcnkge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAycHg7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiA0cHg7XG4gICAgICAgIG1hcmdpbi10b3A6IDJweDtcbiAgICAgICAgaGVpZ3RoOiAxMDAlO1xuICAgICAgICB3aWR0aDogbWF4LWNvbnRlbnQ7XG4gICAgICB9XG4gICAgICAuY2F0ZWdvcnktdGFnIHtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4O1xuICAgICAgICBwYWRkaW5nOiAwIDJweDtcbiAgICAgIH1cbiAgICAgIC5maW5pdGUge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjYWFhO1xuICAgICAgICBjb2xvcjogI2ZlZmVmZTtcbiAgICAgIH1cbiAgICAgIC5pbmZpbml0ZSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlNTI1OTI7XG4gICAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgfVxuICAgICJdfV19XSxudWxsLHtzaXplOlt7dHlwZTp5X31dLG51bU5hTnM6W3t0eXBlOnlffV0sbnVtTmVnYXRpdmVJbmZzOlt7dHlwZTp5X31dLG51bVBvc2l0aXZlSW5mczpbe3R5cGU6eV99XSxudW1OZWdhdGl2ZUZpbml0ZXM6W3t0eXBlOnlffV0sbnVtWmVyb3M6W3t0eXBlOnlffV0sbnVtUG9zaXRpdmVGaW5pdGVzOlt7dHlwZTp5X31dfSk7Y2xhc3MgWlh7Z2V0IGluZm9TdHJpbmcoKXtyZXR1cm4gdGhpcy5oYXNJbmZPck5hTj8iSGFzIOKIni9OYU4iOiJObyDiiJ4vTmFOIn19WlguybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFpYKX0sWlguybVjbXA9VW8oe3R5cGU6Wlgsc2VsZWN0b3JzOltbImRlYnVnLXRlbnNvci1oYXMtaW5mLW9yLW5hbiJdXSxpbnB1dHM6e2hhc0luZk9yTmFOOiJoYXNJbmZPck5hTiJ9LGRlY2xzOjIsdmFyczo0LGNvbnN0czpbWzMsIm5nQ2xhc3MiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKE91KDAsImRpdiIsMCksTWYoMSksUHUoKSksMiZlJiYodnUoIm5nQ2xhc3MiLGdiKDIsSFgsbi5oYXNJbmZPck5hTj8iaGFzLWluZi1vci1uYW4iOiIiKSksSmMoMSkseGYoIiAiLG4uaW5mb1N0cmluZywiICIpKX0sZGlyZWN0aXZlczpbdHZdLHN0eWxlczpbIi5jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2UzZTVlODtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2MwYzBjMDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgICBjb2xvcjogIzY2NjY2NjtcbiAgICAgICAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubycsIG1vbm9zcGFjZTtcbiAgICAgICAgaGVpZ2h0OiAxNHB4O1xuICAgICAgICBsaW5lLWhlaWdodDogMTRweDtcbiAgICAgICAgbWFyZ2luOiAwIDJweDtcbiAgICAgICAgcGFkZGluZzogMXB4IDNweDtcbiAgICAgICAgd2lkdGg6IG1heC1jb250ZW50O1xuICAgICAgfVxuICAgICAgLmhhcy1pbmYtb3ItbmFuW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlNTI1OTI7XG4gICAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgfSJdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihaWCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJkZWJ1Zy10ZW5zb3ItaGFzLWluZi1vci1uYW4iLHRlbXBsYXRlOiJcbiAgICA8ZGl2IFtuZ0NsYXNzXT1cIlsnY29udGFpbmVyJywgaGFzSW5mT3JOYU4gPyAnaGFzLWluZi1vci1uYW4nIDogJyddXCI+XG4gICAgICB7eyBpbmZvU3RyaW5nIH19XG4gICAgPC9kaXY+XG4gICIsc3R5bGVzOlsiXG4gICAgICAuY29udGFpbmVyIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2UzZTVlODtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2MwYzBjMDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgICBjb2xvcjogIzY2NjY2NjtcbiAgICAgICAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubycsIG1vbm9zcGFjZTtcbiAgICAgICAgaGVpZ2h0OiAxNHB4O1xuICAgICAgICBsaW5lLWhlaWdodDogMTRweDtcbiAgICAgICAgbWFyZ2luOiAwIDJweDtcbiAgICAgICAgcGFkZGluZzogMXB4IDNweDtcbiAgICAgICAgd2lkdGg6IG1heC1jb250ZW50O1xuICAgICAgfVxuICAgICAgLmhhcy1pbmYtb3ItbmFuIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2U1MjU5MjtcbiAgICAgICAgY29sb3I6ICNmZmY7XG4gICAgICB9XG4gICAgIl19XX1dLG51bGwse2hhc0luZk9yTmFOOlt7dHlwZTp5X31dfSk7Y2xhc3MgWFh7fVhYLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxYWCl9LFhYLsm1Y21wPVVvKHt0eXBlOlhYLHNlbGVjdG9yczpbWyJkZWJ1Zy10ZW5zb3ItdmFsdWUiXV0saW5wdXRzOntkZWJ1Z1RlbnNvclZhbHVlOiJkZWJ1Z1RlbnNvclZhbHVlIn0sZGVjbHM6NSx2YXJzOjUsY29uc3RzOltbMywiZHR5cGUiLDQsIm5nSWYiXSxbMywicmFuayIsNCwibmdJZiJdLFszLCJzaGFwZSIsNCwibmdJZiJdLFszLCJoYXNJbmZPck5hTiIsNCwibmdJZiJdLFszLCJzaXplIiwibnVtTmVnYXRpdmVJbmZzIiwibnVtUG9zaXRpdmVJbmZzIiwibnVtTmFOcyIsIm51bU5lZ2F0aXZlRmluaXRlcyIsIm51bVplcm9zIiwibnVtUG9zaXRpdmVGaW5pdGVzIiw0LCJuZ0lmIl0sWzMsImR0eXBlIl0sWzMsInJhbmsiXSxbMywic2hhcGUiXSxbMywiaGFzSW5mT3JOYU4iXSxbMywic2l6ZSIsIm51bU5lZ2F0aXZlSW5mcyIsIm51bVBvc2l0aXZlSW5mcyIsIm51bU5hTnMiLCJudW1OZWdhdGl2ZUZpbml0ZXMiLCJudW1aZXJvcyIsIm51bVBvc2l0aXZlRmluaXRlcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoV20oMCxGWCwxLDEsImRlYnVnLXRlbnNvci1kdHlwZSIsMCksV20oMSxMWCwxLDEsImRlYnVnLXRlbnNvci1yYW5rIiwxKSxXbSgyLEJYLDEsMSwiZGVidWctdGVuc29yLXNoYXBlIiwyKSxXbSgzLFZYLDEsMSwiZGVidWctdGVuc29yLWhhcy1pbmYtb3ItbmFuIiwzKSxXbSg0LGpYLDEsNywiZGVidWctdGVuc29yLW51bWVyaWMtYnJlYWtkb3duIiw0KSksMiZlJiYodnUoIm5nSWYiLHZvaWQgMCE9PW4uZGVidWdUZW5zb3JWYWx1ZS5kdHlwZSksSmMoMSksdnUoIm5nSWYiLHZvaWQgMCE9PW4uZGVidWdUZW5zb3JWYWx1ZS5yYW5rKSxKYygxKSx2dSgibmdJZiIsdm9pZCAwIT09bi5kZWJ1Z1RlbnNvclZhbHVlLnNoYXBlKSxKYygxKSx2dSgibmdJZiIsdm9pZCAwIT09bi5kZWJ1Z1RlbnNvclZhbHVlLmhhc0luZk9yTmFOKSxKYygxKSx2dSgibmdJZiIsdm9pZCAwIT09bi5kZWJ1Z1RlbnNvclZhbHVlLnNpemUpKX0sZGlyZWN0aXZlczpbYXYsV1gsR1gsWVgsWlgscVhdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0ge1xuICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC13cmFwOiBub3dyYXA7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gICAgICB9XG4gICAgICBkZWJ1Zy10ZW5zb3ItbnVtZXJpYy1icmVha2Rvd25bX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgfSJdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihYWCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJkZWJ1Zy10ZW5zb3ItdmFsdWUiLHRlbXBsYXRlOidcbiAgICA8ZGVidWctdGVuc29yLWR0eXBlXG4gICAgICAqbmdJZj0iZGVidWdUZW5zb3JWYWx1ZS5kdHlwZSAhPT0gdW5kZWZpbmVkIlxuICAgICAgW2R0eXBlXT0iZGVidWdUZW5zb3JWYWx1ZS5kdHlwZSJcbiAgICA+XG4gICAgPC9kZWJ1Zy10ZW5zb3ItZHR5cGU+XG4gICAgPGRlYnVnLXRlbnNvci1yYW5rXG4gICAgICAqbmdJZj0iZGVidWdUZW5zb3JWYWx1ZS5yYW5rICE9PSB1bmRlZmluZWQiXG4gICAgICBbcmFua109ImRlYnVnVGVuc29yVmFsdWUucmFuayJcbiAgICA+XG4gICAgPC9kZWJ1Zy10ZW5zb3ItcmFuaz5cbiAgICA8ZGVidWctdGVuc29yLXNoYXBlXG4gICAgICAqbmdJZj0iZGVidWdUZW5zb3JWYWx1ZS5zaGFwZSAhPT0gdW5kZWZpbmVkIlxuICAgICAgW3NoYXBlXT0iZGVidWdUZW5zb3JWYWx1ZS5zaGFwZSJcbiAgICA+XG4gICAgPC9kZWJ1Zy10ZW5zb3Itc2hhcGU+XG4gICAgPGRlYnVnLXRlbnNvci1oYXMtaW5mLW9yLW5hblxuICAgICAgKm5nSWY9ImRlYnVnVGVuc29yVmFsdWUuaGFzSW5mT3JOYU4gIT09IHVuZGVmaW5lZCJcbiAgICAgIFtoYXNJbmZPck5hTl09ImRlYnVnVGVuc29yVmFsdWUuaGFzSW5mT3JOYU4iXG4gICAgPlxuICAgIDwvZGVidWctdGVuc29yLWhhcy1pbmYtb3ItbmFuPlxuICAgIDxkZWJ1Zy10ZW5zb3ItbnVtZXJpYy1icmVha2Rvd25cbiAgICAgICpuZ0lmPSJkZWJ1Z1RlbnNvclZhbHVlLnNpemUgIT09IHVuZGVmaW5lZCJcbiAgICAgIHNpemU9Int7IGRlYnVnVGVuc29yVmFsdWUuc2l6ZSB9fSJcbiAgICAgIFtudW1OZWdhdGl2ZUluZnNdPSJkZWJ1Z1RlbnNvclZhbHVlLm51bU5lZ2F0aXZlSW5mcyJcbiAgICAgIFtudW1Qb3NpdGl2ZUluZnNdPSJkZWJ1Z1RlbnNvclZhbHVlLm51bVBvc2l0aXZlSW5mcyJcbiAgICAgIFtudW1OYU5zXT0iZGVidWdUZW5zb3JWYWx1ZS5udW1OYU5zIlxuICAgICAgW251bU5lZ2F0aXZlRmluaXRlc109ImRlYnVnVGVuc29yVmFsdWUubnVtTmVnYXRpdmVGaW5pdGVzIlxuICAgICAgW251bVplcm9zXT0iZGVidWdUZW5zb3JWYWx1ZS5udW1aZXJvcyJcbiAgICAgIFtudW1Qb3NpdGl2ZUZpbml0ZXNdPSJkZWJ1Z1RlbnNvclZhbHVlLm51bVBvc2l0aXZlRmluaXRlcyJcbiAgICA+XG4gICAgPC9kZWJ1Zy10ZW5zb3ItbnVtZXJpYy1icmVha2Rvd24+XG4gICcsc3R5bGVzOlsiXG4gICAgICA6aG9zdCB7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LXdyYXA6IG5vd3JhcDtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgdmVydGljYWwtYWxpZ246IHRvcDtcbiAgICAgIH1cbiAgICAgIGRlYnVnLXRlbnNvci1udW1lcmljLWJyZWFrZG93biB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIH1cbiAgICAiXX1dfV0sbnVsbCx7ZGVidWdUZW5zb3JWYWx1ZTpbe3R5cGU6eV99XX0pO2NvbnN0IEtYPWZ1bmN0aW9uKHQsZSl7cmV0dXJue3RlbnNvckRlYnVnTW9kZTp0LGFycmF5OmV9fTtmdW5jdGlvbiBKWCh0LGUpe2lmKDEmdCYmKE91KDAsImRpdiIsMTIpLE91KDEsImRpdiIsMTMpLE1mKDIpLFB1KCksT3UoMywiZGl2IiwxNCksd3UoNCwiZGVidWctdGVuc29yLXZhbHVlIiwxNSksUHUoKSxQdSgpKSwyJnQpe2NvbnN0IHQ9ZS4kaW1wbGljaXQsbj1lLmluZGV4LG89THUoMyk7SmMoMikseGYoIk91dHB1dCBzbG90ICIsbiwiOiIpLEpjKDIpLHZ1KCJkZWJ1Z1RlbnNvclZhbHVlIixvLnBhcnNlRGVidWdUZW5zb3JWYWx1ZShoYigyLEtYLG8udGVuc29yRGVidWdNb2RlLHQpKSl9fWZ1bmN0aW9uIFFYKHQsZSl7aWYoMSZ0JiYoT3UoMCwiZGl2IiwxMCksV20oMSxKWCw1LDUsImRpdiIsMTEpLFB1KCkpLDImdCl7Y29uc3QgdD1MdSgyKTtKYygxKSx2dSgibmdGb3JPZiIsdC5kZWJ1Z1RlbnNvclZhbHVlcyl9fWZ1bmN0aW9uICRYKHQsZSl7aWYoMSZ0JiYoT3UoMCwiZGl2IiksT3UoMSwiZGl2IiksT3UoMiwiZGl2IiwzKSxPdSgzLCJzcGFuIiw0KSxNZig0LCIgT3A6ICIpLFB1KCksT3UoNSwic3BhbiIsNSksTWYoNiksUHUoKSxQdSgpLE91KDcsImRpdiIsMyksT3UoOCwic3BhbiIsNCksTWYoOSwiICMgb2YgaW5wdXQgdGVuc29yczogIiksUHUoKSxPdSgxMCwic3BhbiIsNiksTWYoMTEpLFB1KCksUHUoKSxPdSgxMiwiZGl2IiwzKSxPdSgxMywic3BhbiIsNCksTWYoMTQsIiAjIG9mIG91dHB1dCB0ZW5zb3JzOiAiKSxQdSgpLE91KDE1LCJzcGFuIiw3KSxNZigxNiksUHUoKSxPdSgxNywic3BhbiIsOCksTWYoMTgpLFB1KCksUHUoKSxXbSgxOSxRWCwyLDEsImRpdiIsOSksUHUoKSxQdSgpKSwyJnQpe2NvbnN0IHQ9THUoKTtKYyg2KSx4ZigiICIsdC5mb2N1c2VkRXhlY3V0aW9uRGF0YS5vcF90eXBlLCIgIiksSmMoNSkseGYoIiAiLG51bGw9PXQuZm9jdXNlZEV4ZWN1dGlvbkRhdGEuaW5wdXRfdGVuc29yX2lkcz8wOnQuZm9jdXNlZEV4ZWN1dGlvbkRhdGEuaW5wdXRfdGVuc29yX2lkcy5sZW5ndGgsIiAiKSxKYyg1KSx4ZigiICIsbnVsbD09dC5mb2N1c2VkRXhlY3V0aW9uRGF0YS5vdXRwdXRfdGVuc29yX2lkcz8wOnQuZm9jdXNlZEV4ZWN1dGlvbkRhdGEub3V0cHV0X3RlbnNvcl9pZHMubGVuZ3RoLCIgIiksSmMoMikseGYoIiAoZGVidWcgbW9kZTogIix0LlRlbnNvckRlYnVnTW9kZVt0LnRlbnNvckRlYnVnTW9kZV0sIikgIiksSmMoMSksdnUoIm5nSWYiLHQuaGFzRGVidWdUZW5zb3JWYWx1ZXMpfX1mdW5jdGlvbiB0Syh0LGUpe31jbGFzcyBlS3tjb25zdHJ1Y3Rvcigpe3RoaXMudGVuc29yRGVidWdNb2RlPW9aLlVOU1BFQ0lGSUVELHRoaXMuaGFzRGVidWdUZW5zb3JWYWx1ZXM9ITEsdGhpcy5kZWJ1Z1RlbnNvclZhbHVlcz1udWxsLHRoaXMuZGVidWdUZW5zb3JEdHlwZXM9bnVsbCx0aGlzLlRlbnNvckRlYnVnTW9kZT1vWix0aGlzLnBhcnNlRGVidWdUZW5zb3JWYWx1ZT1rWH19ZUsuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGVLKX0sZUsuybVjbXA9VW8oe3R5cGU6ZUssc2VsZWN0b3JzOltbImV4ZWN1dGlvbi1kYXRhLWNvbXBvbmVudCJdXSxpbnB1dHM6e2ZvY3VzZWRFeGVjdXRpb25JbmRleDoiZm9jdXNlZEV4ZWN1dGlvbkluZGV4Iixmb2N1c2VkRXhlY3V0aW9uRGF0YToiZm9jdXNlZEV4ZWN1dGlvbkRhdGEiLHRlbnNvckRlYnVnTW9kZToidGVuc29yRGVidWdNb2RlIixoYXNEZWJ1Z1RlbnNvclZhbHVlczoiaGFzRGVidWdUZW5zb3JWYWx1ZXMiLGRlYnVnVGVuc29yVmFsdWVzOiJkZWJ1Z1RlbnNvclZhbHVlcyIsZGVidWdUZW5zb3JEdHlwZXM6ImRlYnVnVGVuc29yRHR5cGVzIn0sZGVjbHM6Nyx2YXJzOjMsY29uc3RzOltbMSwiZm9jdXMtZXhlY3V0aW9uLWNvbnRhaW5lciJdLFs0LCJuZ0lmIiwibmdJZkVsc2UiXSxbImxvYWRpbmdfc2VjdGlvbiIsIiJdLFsxLCJleGVjdXRpb24tZGF0YS1maWVsZCJdLFsxLCJleGVjdXRpb24tZGF0YS1rZXkiXSxbMSwiZXhlY3V0aW9uLWRhdGEtdmFsdWUiLCJvcC10eXBlIl0sWzEsImV4ZWN1dGlvbi1kYXRhLXZhbHVlIiwiaW5wdXQtdGVuc29ycyJdLFsxLCJleGVjdXRpb24tZGF0YS12YWx1ZSIsIm91dHB1dC10ZW5zb3JzIl0sWzEsImV4ZWN1dGlvbi1kYXRhLXZhbHVlIl0sWyJjbGFzcyIsIm91dHB1dC1zbG90cyIsNCwibmdJZiJdLFsxLCJvdXRwdXQtc2xvdHMiXSxbImNsYXNzIiwib3V0cHV0LXNsb3QtY29udGFpbmVyIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwib3V0cHV0LXNsb3QtY29udGFpbmVyIl0sWzEsIm91dHB1dC1zbG90LW51bWJlciJdLFsxLCJvdXRwdXQtc2xvdC1kZWJ1Zy10ZW5zb3ItdmFsdWUiXSxbMywiZGVidWdUZW5zb3JWYWx1ZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7aWYoMSZlJiYoT3UoMCwiZGl2IiwwKSxPdSgxLCJkaXYiKSxPdSgyLCJzcGFuIiksTWYoMyksUHUoKSxQdSgpLFdtKDQsJFgsMjAsNSwiZGl2IiwxKSxXbSg1LHRLLDAsMCwibmctdGVtcGxhdGUiLG51bGwsMixLYiksUHUoKSksMiZlKXtjb25zdCB0PUdtKDYpO0pjKDMpLHhmKCIgUHl0aG9uIEV4ZWN1dGlvbiAjIixuLmZvY3VzZWRFeGVjdXRpb25JbmRleCwiICIpLEpjKDEpLHZ1KCJuZ0lmIixudWxsIT09bi5mb2N1c2VkRXhlY3V0aW9uRGF0YSkoIm5nSWZFbHNlIix0KX19LGRpcmVjdGl2ZXM6W2F2LG92LFhYXSxzdHlsZXM6WycubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1iYWRnZS1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo5cHh9Lm1hdC1iYWRnZS1sYXJnZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4fS5tYXQtaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWhlYWRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAyNHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE1cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjgzKS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1oNltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC42NykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtYm9keS1zdHJvbmdbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MCAwIDEycHh9Lm1hdC1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FwdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTJweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6MzAwIDExMnB4LzExMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wNWVtO21hcmdpbjowIDAgNTZweH0ubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNTZweC81NnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMmVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNDVweC80OHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMDVlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDM0cHgvNDBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1yYWlzZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3Ryb2tlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZsYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mYWJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW1pbmktZmFiW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtYnV0dG9uLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FyZC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjBweH0ubWF0LWNhcmQtc3VidGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hlY2tib3gtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC10cmFpbGluZy1pY29uLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC1yZW1vdmUubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxOHB4fS5tYXQtdGFibGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWhlYWRlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb290ZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jYWxlbmRhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FsZW5kYXItYm9keVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYWxlbmRhci1wZXJpb2QtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWRpYWxvZy10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTI1O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTUwJTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjVlbTt3aWR0aDoxLjVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW07bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41ZW0gMDtib3JkZXItdG9wOi44NDM3NWVtIHNvbGlkIHRyYW5zcGFyZW50fS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3RvcDotMC44NDM3NWVtO3BhZGRpbmctdG9wOi44NDM3NWVtfS5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjc1JTttYXJnaW4tdG9wOi42NjY2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNzkxNjY2NjY2N2VtKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAycHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyM2VtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzUzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi41NDE2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNjY2NjY2NjY2N2VtKX1AbWVkaWEgcHJpbnR7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIyZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIxZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMmVtKSBzY2FsZSgwLjc1KX19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjI1ZW0gMCAuNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4wOTM3NWVtO21hcmdpbi10b3A6LTAuNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MWVtIDAgMWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjg0Mzc1ZW07bWFyZ2luLXRvcDotMC4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH1pbnB1dC5tYXQtaW5wdXQtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDotMC4wNjI1ZW19Lm1hdC1tZW51LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1wYWdpbmF0b3JbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXBhZ2luYXRvci1wYWdlLXNpemVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3RbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXN0ZXBwZXItdmVydGljYWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc3RlcC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0Om5vcm1hbH0ubWF0LXN0ZXAtbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRhYi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjB9Lm1hdC10b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTZweH0ubWF0LW9wdGdyb3VwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LXNpbXBsZS1zbmFja2Jhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbltfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRyZWVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbmVzdGVkLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4fS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVdOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtcmlwcGxlLm1hdC1yaXBwbGUtdW5ib3VuZGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6NTAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7dHJhbnNmb3JtOnNjYWxlKDApfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpub25lfS5jZGstdmlzdWFsbHktaGlkZGVuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7bGVmdDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmVtcHR5e2Rpc3BsYXk6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LXBhbmVbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOmF1dG87Ym94LXNpemluZzpib3JkZXItYm94O3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7bWF4LXdpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlfS5jZGstb3ZlcmxheS1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKTtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5Oi42fS5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjMyKX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTowfS5jZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO292ZXJmbG93LXk6c2Nyb2xsfUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnR7fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5ke30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxse2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCAwcyAxbXN9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06bm90KDotd2Via2l0LWF1dG9maWxsKXthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIDBzIDFtc310ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemVbX25nY29udGVudC0lQ09NUCVde3Jlc2l6ZTpub25lfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmdbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OmF1dG8gIWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW4gIWltcG9ydGFudH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nLWZpcmVmb3hbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OjAgIWltcG9ydGFudH0ubWF0LWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0uZGVidWctdGVuc29yLXZhbHVlcy10YWJsZVtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0uZGVidWctdGVuc29yLXZhbHVlcy10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICB0ZFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgIzAwMDt0ZXh0LWFsaWduOmxlZnR9LmRlYnVnLXRlbnNvci12YWx1ZXMtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246bGVmdH0uZXhlY3V0aW9uLWRhdGEtZmllbGRbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcH0uZXhlY3V0aW9uLWRhdGEta2V5W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9jazttYXgtd2lkdGg6MTIwcHg7dGV4dC1hbGlnbjpyaWdodDt3aWR0aDoxMjBweH0uZXhlY3V0aW9uLWRhdGEtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1sZWZ0OjEwcHh9LmZvY3VzLWV4ZWN1dGlvbi1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmY2M4MDtib3JkZXItcmFkaXVzOjRweDtmb250LXNpemU6MTJweDtoZWlnaHQ6MTIwcHg7cGFkZGluZzo1cHg7d2lkdGg6MzYwcHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmZvY3VzLWV4ZWN1dGlvbi1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZm9jdXMtZXhlY3V0aW9uLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZTY1MTAwfS5vdXRwdXQtc2xvdHNbX25nY29udGVudC0lQ09NUCVde2hlaWdodDo2MHB4O292ZXJmbG93LXg6YXV0bztvdmVyZmxvdy15OmF1dG99Lm91dHB1dC1zbG90LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgI2ViZWJlYjttYXJnaW4tdG9wOjVweDtwYWRkaW5nOjJweCAwO3ZlcnRpY2FsLWFsaWduOnRvcH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAub3V0cHV0LXNsb3QtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm91dHB1dC1zbG90LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgIzU1NX0ub3V0cHV0LXNsb3QtbnVtYmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmJsb2NrO2ZvbnQtZmFtaWx5OiJSb2JvdG8gTW9ubyIsbW9ub3NwYWNlfS5vdXRwdXQtc2xvdC1kZWJ1Zy10ZW5zb3ItdmFsdWVbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjNweCAwIDNweCAzMHB4fS5vdXRwdXQtdGVuc29yc1tfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDo1cHh9J119KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGVLLFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6ImV4ZWN1dGlvbi1kYXRhLWNvbXBvbmVudCIsdGVtcGxhdGVVcmw6Ii4vZXhlY3V0aW9uX2RhdGFfY29tcG9uZW50Lm5nLmh0bWwiLHN0eWxlVXJsczpbIi4vZXhlY3V0aW9uX2RhdGFfY29tcG9uZW50LmNzcyJdfV19XSxudWxsLHtmb2N1c2VkRXhlY3V0aW9uSW5kZXg6W3t0eXBlOnlffV0sZm9jdXNlZEV4ZWN1dGlvbkRhdGE6W3t0eXBlOnlffV0sdGVuc29yRGVidWdNb2RlOlt7dHlwZTp5X31dLGhhc0RlYnVnVGVuc29yVmFsdWVzOlt7dHlwZTp5X31dLGRlYnVnVGVuc29yVmFsdWVzOlt7dHlwZTp5X31dLGRlYnVnVGVuc29yRHR5cGVzOlt7dHlwZTp5X31dfSk7Y29uc3Qgbks9IlVua25vd24gZHR5cGUiO2NsYXNzIG9Le2NvbnN0cnVjdG9yKHQpe3RoaXMuc3RvcmU9dCx0aGlzLmZvY3VzZWRFeGVjdXRpb25EYXRhJD10aGlzLnN0b3JlLnBpcGUoUmsob1gpKSx0aGlzLnRlbnNvckRlYnVnTW9kZSQ9dGhpcy5zdG9yZS5waXBlKFJrKHprKG9YLCh0PT5udWxsPT09dD9vWi5VTlNQRUNJRklFRDp0LnRlbnNvcl9kZWJ1Z19tb2RlKSkpKSx0aGlzLmhhc0RlYnVnVGVuc29yVmFsdWVzJD10aGlzLnN0b3JlLnBpcGUoUmsoemsob1gsKHQ9PntpZihudWxsPT09dHx8bnVsbD09PXQuZGVidWdfdGVuc29yX3ZhbHVlcylyZXR1cm4hMTtmb3IoY29uc3QgZSBvZiB0LmRlYnVnX3RlbnNvcl92YWx1ZXMpaWYobnVsbCE9PWUmJmUubGVuZ3RoPjApcmV0dXJuITA7cmV0dXJuITF9KSkpKSx0aGlzLmRlYnVnVGVuc29yVmFsdWVzJD10aGlzLnN0b3JlLnBpcGUoUmsoemsob1gsKHQ9Pm51bGw9PT10P251bGw6dC5kZWJ1Z190ZW5zb3JfdmFsdWVzKSkpKSx0aGlzLmRlYnVnVGVuc29yRHR5cGVzJD10aGlzLnN0b3JlLnBpcGUoUmsoemsob1gsKHQ9PntpZihudWxsPT09dHx8bnVsbD09PXQuZGVidWdfdGVuc29yX3ZhbHVlcylyZXR1cm4gbnVsbDtpZih0LnRlbnNvcl9kZWJ1Z19tb2RlIT09b1ouRlVMTF9IRUFMVEgmJnQudGVuc29yX2RlYnVnX21vZGUhPT1vWi5TSEFQRSlyZXR1cm4gbnVsbDtjb25zdCBlPVtdO2Zvcihjb25zdCBuIG9mIHQuZGVidWdfdGVuc29yX3ZhbHVlcylpZihudWxsPT09billLnB1c2gobkspO2Vsc2V7Y29uc3Qgbz1TdHJpbmcodC50ZW5zb3JfZGVidWdfbW9kZT09PW9aLkZVTExfSEVBTFRIP25bMl06blsxXSk7ZS5wdXNoKHdYW29dfHxuSyl9cmV0dXJuIGV9KSkpKX19ZnVuY3Rpb24gaUsodCxlKXtpZigxJnQpe2NvbnN0IHQ9RXUoKTtPdSgwLCJtYXQtc2xpZGVyIiwxMSksTnUoImlucHV0IiwoZnVuY3Rpb24gZShuKXtyZXR1cm4gcmEodCksTHUoMikub25TbGlkZXJDaGFuZ2UuZW1pdChuLnZhbHVlKX0pKSxQdSgpfWlmKDImdCl7Y29uc3QgdD1MdSgyKTt2dSgibWluIiwwKSgibWF4Iix0LnNjcm9sbEJlZ2luSW5kZXhVcHBlckxpbWl0KSgidmFsdWUiLHQuc2Nyb2xsQmVnaW5JbmRleCl9fWZ1bmN0aW9uIGFLKHQsZSl7aWYoMSZ0KXtjb25zdCB0PUV1KCk7T3UoMCwiZGl2Iiw2KSxPdSgxLCJidXR0b24iLDcpLE51KCJjbGljayIsKGZ1bmN0aW9uIGUoKXtyZXR1cm4gcmEodCksTHUoKS5vbk5hdmlnYXRlTGVmdC5lbWl0KCl9KSksTWYoMiwiIDwgIiksUHUoKSxPdSgzLCJkaXYiLDgpLE1mKDQpLFB1KCksT3UoNSwiYnV0dG9uIiw5KSxOdSgiY2xpY2siLChmdW5jdGlvbiBlKCl7cmV0dXJuIHJhKHQpLEx1KCkub25OYXZpZ2F0ZVJpZ2h0LmVtaXQoKX0pKSxNZig2LCIgPiAiKSxQdSgpLFdtKDcsaUssMSwzLCJtYXQtc2xpZGVyIiwxMCksUHUoKX1pZigyJnQpe2NvbnN0IHQ9THUoKTtKYyg0KSxQZigiICIsdC5zY3JvbGxCZWdpbkluZGV4LCIgfiAiLHQuc2Nyb2xsQmVnaW5JbmRleCt0LmRpc3BsYXlDb3VudC0xLCIgb2YgIix0Lm51bUV4ZWN1dGlvbnMsIiAiKSxKYygzKSx2dSgibmdJZiIsdC5zY3JvbGxCZWdpbkluZGV4VXBwZXJMaW1pdD4wKX19b0suybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fG9LKShNdShFaykpfSxvSy7JtWNtcD1Vbyh7dHlwZTpvSyxzZWxlY3RvcnM6W1sidGYtZGVidWdnZXItdjItZXhlY3V0aW9uLWRhdGEiXV0saW5wdXRzOntmb2N1c2VkRXhlY3V0aW9uSW5kZXg6ImZvY3VzZWRFeGVjdXRpb25JbmRleCJ9LGRlY2xzOjYsdmFyczoxNixjb25zdHM6W1szLCJmb2N1c2VkRXhlY3V0aW9uSW5kZXgiLCJmb2N1c2VkRXhlY3V0aW9uRGF0YSIsInRlbnNvckRlYnVnTW9kZSIsImhhc0RlYnVnVGVuc29yVmFsdWVzIiwiZGVidWdUZW5zb3JWYWx1ZXMiLCJkZWJ1Z1RlbnNvckR0eXBlcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYod3UoMCwiZXhlY3V0aW9uLWRhdGEtY29tcG9uZW50IiwwKSxPYigxLCJhc3luYyIpLE9iKDIsImFzeW5jIiksT2IoMywiYXN5bmMiKSxPYig0LCJhc3luYyIpLE9iKDUsImFzeW5jIikpLDImZSYmdnUoImZvY3VzZWRFeGVjdXRpb25JbmRleCIsbi5mb2N1c2VkRXhlY3V0aW9uSW5kZXgpKCJmb2N1c2VkRXhlY3V0aW9uRGF0YSIsUGIoMSw2LG4uZm9jdXNlZEV4ZWN1dGlvbkRhdGEkKSkoInRlbnNvckRlYnVnTW9kZSIsUGIoMiw4LG4udGVuc29yRGVidWdNb2RlJCkpKCJoYXNEZWJ1Z1RlbnNvclZhbHVlcyIsUGIoMywxMCxuLmhhc0RlYnVnVGVuc29yVmFsdWVzJCkpKCJkZWJ1Z1RlbnNvclZhbHVlcyIsUGIoNCwxMixuLmRlYnVnVGVuc29yVmFsdWVzJCkpKCJkZWJ1Z1RlbnNvckR0eXBlcyIsUGIoNSwxNCxuLmRlYnVnVGVuc29yRHR5cGVzJCkpfSxkaXJlY3RpdmVzOltlS10scGlwZXM6W012XSxlbmNhcHN1bGF0aW9uOjJ9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKG9LLFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6InRmLWRlYnVnZ2VyLXYyLWV4ZWN1dGlvbi1kYXRhIix0ZW1wbGF0ZTonXG4gICAgPGV4ZWN1dGlvbi1kYXRhLWNvbXBvbmVudFxuICAgICAgW2ZvY3VzZWRFeGVjdXRpb25JbmRleF09ImZvY3VzZWRFeGVjdXRpb25JbmRleCJcbiAgICAgIFtmb2N1c2VkRXhlY3V0aW9uRGF0YV09ImZvY3VzZWRFeGVjdXRpb25EYXRhJCB8IGFzeW5jIlxuICAgICAgW3RlbnNvckRlYnVnTW9kZV09InRlbnNvckRlYnVnTW9kZSQgfCBhc3luYyJcbiAgICAgIFtoYXNEZWJ1Z1RlbnNvclZhbHVlc109Imhhc0RlYnVnVGVuc29yVmFsdWVzJCB8IGFzeW5jIlxuICAgICAgW2RlYnVnVGVuc29yVmFsdWVzXT0iZGVidWdUZW5zb3JWYWx1ZXMkIHwgYXN5bmMiXG4gICAgICBbZGVidWdUZW5zb3JEdHlwZXNdPSJkZWJ1Z1RlbnNvckR0eXBlcyQgfCBhc3luYyJcbiAgICA+PC9leGVjdXRpb24tZGF0YS1jb21wb25lbnQ+XG4gICd9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpFa31dfSkse2ZvY3VzZWRFeGVjdXRpb25JbmRleDpbe3R5cGU6eV99XX0pO2NvbnN0IHJLPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm5bdCxlLG5dfTtmdW5jdGlvbiBzSyh0LGUpe2lmKDEmdCl7Y29uc3QgdD1FdSgpO091KDAsImRpdiIsMTQpLE51KCJjbGljayIsKGZ1bmN0aW9uIG4oKXtyYSh0KTtjb25zdCBvPWUuaW5kZXg7cmV0dXJuIEx1KDIpLm9uRXhlY3V0aW9uRGlnZXN0Q2xpY2tlZC5lbWl0KG8pfSkpLE91KDEsImRpdiIsMTUpLE1mKDIpLFB1KCksUHUoKX1pZigyJnQpe2NvbnN0IHQ9ZS4kaW1wbGljaXQsbj1lLmluZGV4LG89THUoMik7SmMoMSksVXUoInRpdGxlIix0Lm9wX3R5cGUpLHZ1KCJuZ0NsYXNzIixiYigzLHJLLHQuaXNfZ3JhcGg/ImZ1bmMtZ3JhcGgtZXhlY3V0aW9uIjoiIixuPT09by5mb2N1c2VkRXhlY3V0aW9uRGlzcGxheUluZGV4PyJmb2N1c2VkIjoiIixvLmRpc3BsYXlGb2N1c2VkQWxlcnRUeXBlc1tuXXx8IiIpKSxKYygxKSx4ZigiICIsdC5zaG9ydF9vcF90eXBlLCIgIil9fWZ1bmN0aW9uIGxLKHQsZSl7aWYoMSZ0JiYoT3UoMCwiZGl2IiwxMiksV20oMSxzSywzLDcsImRpdiIsMTMpLFB1KCkpLDImdCl7Y29uc3QgdD1MdSgpO0pjKDEpLHZ1KCJuZ0Zvck9mIix0LmRpc3BsYXlFeGVjdXRpb25EaWdlc3RzKX19ZnVuY3Rpb24gY0sodCxlKXtpZigxJnQmJihrdSgwKSx3dSgxLCJ0Zi1kZWJ1Z2dlci12Mi1leGVjdXRpb24tZGF0YSIsMTYpLFN1KCkpLDImdCl7Y29uc3QgdD1MdSgpO0pjKDEpLHZ1KCJmb2N1c2VkRXhlY3V0aW9uSW5kZXgiLHQuZm9jdXNlZEV4ZWN1dGlvbkluZGV4KX19Y2xhc3MgZEt7Y29uc3RydWN0b3IoKXt0aGlzLmFjdGl2ZVJ1bklkPW51bGwsdGhpcy5sb2FkaW5nTnVtRXhlY3V0aW9ucz0hMSx0aGlzLm51bUV4ZWN1dGlvbnM9MCx0aGlzLnNjcm9sbEJlZ2luSW5kZXg9MCx0aGlzLnNjcm9sbEJlZ2luSW5kZXhVcHBlckxpbWl0PTAsdGhpcy5wYWdlU2l6ZT0wLHRoaXMuZGlzcGxheUNvdW50PTAsdGhpcy5kaXNwbGF5RXhlY3V0aW9uRGlnZXN0cz1bXSx0aGlzLmRpc3BsYXlGb2N1c2VkQWxlcnRUeXBlcz1bXSx0aGlzLmZvY3VzZWRFeGVjdXRpb25JbmRleD1udWxsLHRoaXMuZm9jdXNlZEV4ZWN1dGlvbkRpc3BsYXlJbmRleD1udWxsLHRoaXMuZm9jdXNlZEV4ZWN1dGlvbkRhdGE9bnVsbCx0aGlzLm9uTmF2aWdhdGVMZWZ0PW5ldyBBYix0aGlzLm9uTmF2aWdhdGVSaWdodD1uZXcgQWIsdGhpcy5vbkV4ZWN1dGlvbkRpZ2VzdENsaWNrZWQ9bmV3IEFiLHRoaXMub25TbGlkZXJDaGFuZ2U9bmV3IEFifX1kSy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8ZEspfSxkSy7JtWNtcD1Vbyh7dHlwZTpkSyxzZWxlY3RvcnM6W1sidGltZWxpbmUtY29tcG9uZW50Il1dLGlucHV0czp7YWN0aXZlUnVuSWQ6ImFjdGl2ZVJ1bklkIixsb2FkaW5nTnVtRXhlY3V0aW9uczoibG9hZGluZ051bUV4ZWN1dGlvbnMiLG51bUV4ZWN1dGlvbnM6Im51bUV4ZWN1dGlvbnMiLHNjcm9sbEJlZ2luSW5kZXg6InNjcm9sbEJlZ2luSW5kZXgiLHNjcm9sbEJlZ2luSW5kZXhVcHBlckxpbWl0OiJzY3JvbGxCZWdpbkluZGV4VXBwZXJMaW1pdCIscGFnZVNpemU6InBhZ2VTaXplIixkaXNwbGF5Q291bnQ6ImRpc3BsYXlDb3VudCIsZGlzcGxheUV4ZWN1dGlvbkRpZ2VzdHM6ImRpc3BsYXlFeGVjdXRpb25EaWdlc3RzIixkaXNwbGF5Rm9jdXNlZEFsZXJ0VHlwZXM6ImRpc3BsYXlGb2N1c2VkQWxlcnRUeXBlcyIsZm9jdXNlZEV4ZWN1dGlvbkluZGV4OiJmb2N1c2VkRXhlY3V0aW9uSW5kZXgiLGZvY3VzZWRFeGVjdXRpb25EaXNwbGF5SW5kZXg6ImZvY3VzZWRFeGVjdXRpb25EaXNwbGF5SW5kZXgiLGZvY3VzZWRFeGVjdXRpb25EYXRhOiJmb2N1c2VkRXhlY3V0aW9uRGF0YSJ9LG91dHB1dHM6e29uTmF2aWdhdGVMZWZ0OiJvbk5hdmlnYXRlTGVmdCIsb25OYXZpZ2F0ZVJpZ2h0OiJvbk5hdmlnYXRlUmlnaHQiLG9uRXhlY3V0aW9uRGlnZXN0Q2xpY2tlZDoib25FeGVjdXRpb25EaWdlc3RDbGlja2VkIixvblNsaWRlckNoYW5nZToib25TbGlkZXJDaGFuZ2UifSxkZWNsczo5LHZhcnM6NCxjb25zdHM6W1sxLCJ0aW1lbGluZS10aXRsZSJdLFsxLCJleGVjdXRpb24tY291bnQiXSxbMSwidG9wLWxldmVsLWV4ZWN1dGlvbnMiXSxbImNsYXNzIiwibmF2aWdhdGlvbi1zZWN0aW9uIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImV4ZWN1dGlvbi10aW1lbGluZSIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzEsIm5hdmlnYXRpb24tc2VjdGlvbiJdLFsibWF0LWJ1dHRvbiIsIiIsMSwibmF2aWdhdGlvbi1idXR0b24tbGVmdCIsMywiY2xpY2siXSxbMSwibmF2aWdhdGlvbi1wb3NpdGlvbi1pbmZvIl0sWyJtYXQtYnV0dG9uIiwiIiwxLCJuYXZpZ2F0aW9uLWJ1dHRvbi1yaWdodCIsMywiY2xpY2siXSxbImNsYXNzIiwidGltZWxpbmUtc2xpZGVyIiwic3RlcCIsIjEiLDMsIm1pbiIsIm1heCIsInZhbHVlIiwiaW5wdXQiLDQsIm5nSWYiXSxbInN0ZXAiLCIxIiwxLCJ0aW1lbGluZS1zbGlkZXIiLDMsIm1pbiIsIm1heCIsInZhbHVlIiwiaW5wdXQiXSxbMSwiZXhlY3V0aW9uLXRpbWVsaW5lIl0sWzMsImNsaWNrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywiY2xpY2siXSxbMSwiZXhlY3V0aW9uLWRpZ2VzdCIsMywibmdDbGFzcyIsInRpdGxlIl0sWzMsImZvY3VzZWRFeGVjdXRpb25JbmRleCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoT3UoMCwiZGl2IiksT3UoMSwiZGl2IiwwKSxNZigyLCIgUHl0aG9uIEV4ZWN1dGlvbiBUaW1lbGluZSAiKSxPdSgzLCJzcGFuIiwxKSxNZig0KSxQdSgpLFB1KCksT3UoNSwiZGl2IiwyKSxXbSg2LGFLLDgsNCwiZGl2IiwzKSxXbSg3LGxLLDIsMSwiZGl2Iiw0KSxXbSg4LGNLLDIsMSwibmctY29udGFpbmVyIiw1KSxQdSgpLFB1KCkpLDImZSYmKEpjKDQpLHhmKCIgKCIsbi5udW1FeGVjdXRpb25zLCIpICIpLEpjKDIpLHZ1KCJuZ0lmIixuLm51bUV4ZWN1dGlvbnMpLEpjKDEpLHZ1KCJuZ0lmIixuLm51bUV4ZWN1dGlvbnMpLEpjKDEpLHZ1KCJuZ0lmIixudWxsIT09bi5hY3RpdmVSdW5JZCYmbnVsbCE9PW4uZm9jdXNlZEV4ZWN1dGlvbkluZGV4KSl9LGRpcmVjdGl2ZXM6W2F2LE5ILHZYLG92LHR2LG9LXSxzdHlsZXM6WyIuZXhlY3V0aW9uLWRpZ2VzdFtfbmdjb250ZW50LSVDT01QJV0ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTNlNWU4O1xuICBib3JkZXI6IDFweCBzb2xpZCAjYzBjMGMwO1xuICBjb2xvcjogIzQyNTA2NjtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBmb250LXNpemU6IDEwcHg7XG4gIGhlaWdodDogMTVweDtcbiAgcGFkZGluZzogMXB4O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIHdpZHRoOiAxMnB4O1xufVxuXG4uZXhlY3V0aW9uLWRpZ2VzdC5mdW5jLWdyYXBoLWV4ZWN1dGlvbltfbmdjb250ZW50LSVDT01QJV0ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzdkYmY1O1xuICBjb2xvcjogIzRlNTY2NDtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG5cbi5leGVjdXRpb24tZGlnZXN0LmZvY3VzZWRbX25nY29udGVudC0lQ09NUCVdIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZDRiMztcbiAgYm9yZGVyOiAxcHggc29saWQgIzAwMDtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5cbi5leGVjdXRpb24tZGlnZXN0LkluZk5hbkFsZXJ0W19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlNTI1OTI7XG4gIGNvbG9yOiAjZmZmO1xufVxuXG5cbi5leGVjdXRpb24tZGlnZXN0W19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlciB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICMwMDA7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuXG4uZXhlY3V0aW9uLXRpbWVsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIG92ZXJmbG93LXg6IGhpZGRlbjtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgd2lkdGg6IDEwMCU7XG4gIG1hcmdpbi10b3A6IDVweDtcbiAgbWFyZ2luLWJvdHRvbTogNXB4O1xufVxuXG4udGltZWxpbmUtc2xpZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgaGVpZ2h0OiA0OHB4O1xuICBsZWZ0OiAzNDBweDsgXG4gIHBhZGRpbmc6IDA7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgcmlnaHQ6IDQwcHg7XG59XG5cbiAgLnRpbWVsaW5lLXNsaWRlciAubWF0LXNsaWRlci10aHVtYiB7XG4gIGJvcmRlci1yYWRpdXM6IDVweDtcbiAgcmlnaHQ6IC00MHB4O1xuICB3aWR0aDogODBweDtcbn1cblxuXG4ubmF2aWdhdGlvbi1wb3NpdGlvbi1pbmZvW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBmb250LXNpemU6IDE0cHg7XG4gIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG4gIG1heC13aWR0aDogMjAwcHg7XG4gIHBhZGRpbmctbGVmdDogMTBweDtcbiAgcGFkZGluZy1yaWdodDogMTBweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuXG4ubmF2aWdhdGlvbi1zZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGhlaWdodDogNDhweDtcbiAgbGluZS1oZWlnaHQ6IDQ4cHg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgd2lkdGg6IDEwMCU7XG59Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGRLLFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6InRpbWVsaW5lLWNvbXBvbmVudCIsdGVtcGxhdGVVcmw6Ii4vdGltZWxpbmVfY29tcG9uZW50Lm5nLmh0bWwiLHN0eWxlVXJsczpbIi4vdGltZWxpbmVfY29tcG9uZW50LmNzcyJdLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2h9XX1dLG51bGwse2FjdGl2ZVJ1bklkOlt7dHlwZTp5X31dLGxvYWRpbmdOdW1FeGVjdXRpb25zOlt7dHlwZTp5X31dLG51bUV4ZWN1dGlvbnM6W3t0eXBlOnlffV0sc2Nyb2xsQmVnaW5JbmRleDpbe3R5cGU6eV99XSxzY3JvbGxCZWdpbkluZGV4VXBwZXJMaW1pdDpbe3R5cGU6eV99XSxwYWdlU2l6ZTpbe3R5cGU6eV99XSxkaXNwbGF5Q291bnQ6W3t0eXBlOnlffV0sZGlzcGxheUV4ZWN1dGlvbkRpZ2VzdHM6W3t0eXBlOnlffV0sZGlzcGxheUZvY3VzZWRBbGVydFR5cGVzOlt7dHlwZTp5X31dLGZvY3VzZWRFeGVjdXRpb25JbmRleDpbe3R5cGU6eV99XSxmb2N1c2VkRXhlY3V0aW9uRGlzcGxheUluZGV4Olt7dHlwZTp5X31dLGZvY3VzZWRFeGVjdXRpb25EYXRhOlt7dHlwZTp5X31dLG9uTmF2aWdhdGVMZWZ0Olt7dHlwZTpfX31dLG9uTmF2aWdhdGVSaWdodDpbe3R5cGU6X199XSxvbkV4ZWN1dGlvbkRpZ2VzdENsaWNrZWQ6W3t0eXBlOl9ffV0sb25TbGlkZXJDaGFuZ2U6W3t0eXBlOl9ffV19KTtjb25zdCBwSz1bIl9fZm9yd2FyZF8iLCJfX2JhY2t3YXJkXyIsIl9faW5mZXJlbmNlXyJdO2NsYXNzIG1Le2NvbnN0cnVjdG9yKHQpe3RoaXMuc3RvcmU9dCx0aGlzLmFjdGl2ZVJ1bklkJD10aGlzLnN0b3JlLnBpcGUoUmsoeVopKSx0aGlzLmxvYWRpbmdOdW1FeGVjdXRpb25zJD10aGlzLnN0b3JlLnBpcGUoUmsoemsoU1osKHQ9PnQuc3RhdGU9PUJFLkxPQURJTkcpKSkpLHRoaXMuc2Nyb2xsQmVnaW5JbmRleCQ9dGhpcy5zdG9yZS5waXBlKFJrKEFaKSksdGhpcy5zY3JvbGxCZWdpbkluZGV4VXBwZXJMaW1pdCQ9dGhpcy5zdG9yZS5waXBlKFJrKHprKEVaLFRaLCgodCxlKT0+TWF0aC5tYXgoMCx0LWUpKSkpKSx0aGlzLnBhZ2VTaXplJD10aGlzLnN0b3JlLnBpcGUoUmsoUlopKSx0aGlzLmRpc3BsYXlDb3VudCQ9dGhpcy5zdG9yZS5waXBlKFJrKFRaKSksdGhpcy5kaXNwbGF5RXhlY3V0aW9uRGlnZXN0cyQ9dGhpcy5zdG9yZS5waXBlKFJrKHprKE5aLCh0PT50Lm1hcCgodD0+KGZ1bmN0aW9uIGUodCxuPTEpe2lmKCF0KXJldHVybntvcF90eXBlOiIoTi9BKSIsc2hvcnRfb3BfdHlwZToiLi4iLGlzX2dyYXBoOiExfTtjb25zdCBvPXBLLmZpbHRlcigoZT0+dC5vcF90eXBlLnN0YXJ0c1dpdGgoZSkpKTtpZihvLmxlbmd0aCl7Y29uc3QgZT10Lm9wX3R5cGUuc2xpY2Uob1swXS5sZW5ndGgpO3JldHVybntvcF90eXBlOnQub3BfdHlwZSxzaG9ydF9vcF90eXBlOmUuc2xpY2UoMCxuKSxpc19ncmFwaDohMH19cmV0dXJue29wX3R5cGU6dC5vcF90eXBlLHNob3J0X29wX3R5cGU6dC5vcF90eXBlLnNsaWNlKDAsbiksaXNfZ3JhcGg6ITF9fSkodCkpKSkpKSksdGhpcy5kaXNwbGF5Rm9jdXNlZEFsZXJ0VHlwZXMkPXRoaXMuc3RvcmUucGlwZShSayhLWikpLHRoaXMuZm9jdXNlZEV4ZWN1dGlvbkluZGV4JD10aGlzLnN0b3JlLnBpcGUoUmsoUVopKSx0aGlzLmZvY3VzZWRFeGVjdXRpb25EaXNwbGF5SW5kZXgkPXRoaXMuc3RvcmUucGlwZShSaygkWikpLHRoaXMubnVtRXhlY3V0aW9ucyQ9dGhpcy5zdG9yZS5waXBlKFJrKEVaKSl9b25OYXZpZ2F0ZUxlZnQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKHpxKCkpfW9uTmF2aWdhdGVSaWdodCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goSHEoKSl9b25FeGVjdXRpb25EaWdlc3RDbGlja2VkKHQpe3RoaXMuc3RvcmUuZGlzcGF0Y2goTHEoe2Rpc3BsYXlJbmRleDp0fSkpfW9uU2xpZGVyQ2hhbmdlKHQpe3RoaXMuc3RvcmUuZGlzcGF0Y2goRnEoe2luZGV4OnR9KSl9fWZ1bmN0aW9uIHVLKHQsZSl7MSZ0JiYoT3UoMCwic3BhbiIpLE1mKDEsIiBPdXRwdXQgIiksUHUoKSl9ZnVuY3Rpb24gZksodCxlKXsxJnQmJihPdSgwLCJzcGFuIiksTWYoMSwiIElucHV0ICIpLFB1KCkpfWZ1bmN0aW9uIGdLKHQsZSl7aWYoMSZ0JiYoT3UoMCwiZGl2Iiw2KSxPdSgxLCJzcGFuIiw3KSxXbSgyLHVLLDIsMCwic3BhbiIsOCksV20oMyxmSywyLDAsInNwYW4iLDgpLFB1KCksTWYoNCksUHUoKSksMiZ0KXtjb25zdCB0PUx1KCk7SmMoMSksdnUoIm5nU3dpdGNoIix0LmtpbmQpLEpjKDEpLHZ1KCJuZ1N3aXRjaENhc2UiLCJpbnB1dCIpLEpjKDEpLHZ1KCJuZ1N3aXRjaENhc2UiLCJjb25zdW1lciIpLEpjKDEpLHhmKCIgc2xvdDogIix0LnNsb3QsIiAiKX19ZnVuY3Rpb24gaEsodCxlKXtpZigxJnQmJihPdSgwLCJkaXYiLDkpLE1mKDEpLFB1KCkpLDImdCl7Y29uc3QgdD1MdSgpO0pjKDEpLHhmKCIgIix0Lm9wRGF0YS5vcF90eXBlLCIgIil9fWZ1bmN0aW9uIGJLKHQsZSl7MSZ0JiYoT3UoMCwic3BhbiIsMTApLE1mKDEsIiAoT3AgaW5mbyB1bmF2YWlsYWJsZS4pICIpLFB1KCkpfW1LLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxtSykoTXUoRWspKX0sbUsuybVjbXA9VW8oe3R5cGU6bUssc2VsZWN0b3JzOltbInRmLWRlYnVnZ2VyLXYyLXRpbWVsaW5lIl1dLGRlY2xzOjEyLHZhcnM6MzMsY29uc3RzOltbMywiYWN0aXZlUnVuSWQiLCJsb2FkaW5nTnVtRXhlY3V0aW9ucyIsIm51bUV4ZWN1dGlvbnMiLCJzY3JvbGxCZWdpbkluZGV4Iiwic2Nyb2xsQmVnaW5JbmRleFVwcGVyTGltaXQiLCJwYWdlU2l6ZSIsImRpc3BsYXlDb3VudCIsImRpc3BsYXlFeGVjdXRpb25EaWdlc3RzIiwiZGlzcGxheUZvY3VzZWRBbGVydFR5cGVzIiwiZm9jdXNlZEV4ZWN1dGlvbkluZGV4IiwiZm9jdXNlZEV4ZWN1dGlvbkRpc3BsYXlJbmRleCIsIm9uTmF2aWdhdGVMZWZ0Iiwib25OYXZpZ2F0ZVJpZ2h0Iiwib25FeGVjdXRpb25EaWdlc3RDbGlja2VkIiwib25TbGlkZXJDaGFuZ2UiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKE91KDAsInRpbWVsaW5lLWNvbXBvbmVudCIsMCksTnUoIm9uTmF2aWdhdGVMZWZ0IiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uTmF2aWdhdGVMZWZ0KCl9KSkoIm9uTmF2aWdhdGVSaWdodCIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vbk5hdmlnYXRlUmlnaHQoKX0pKSgib25FeGVjdXRpb25EaWdlc3RDbGlja2VkIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vbkV4ZWN1dGlvbkRpZ2VzdENsaWNrZWQoZSl9KSkoIm9uU2xpZGVyQ2hhbmdlIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vblNsaWRlckNoYW5nZShlKX0pKSxPYigxLCJhc3luYyIpLE9iKDIsImFzeW5jIiksT2IoMywiYXN5bmMiKSxPYig0LCJhc3luYyIpLE9iKDUsImFzeW5jIiksT2IoNiwiYXN5bmMiKSxPYig3LCJhc3luYyIpLE9iKDgsImFzeW5jIiksT2IoOSwiYXN5bmMiKSxPYigxMCwiYXN5bmMiKSxPYigxMSwiYXN5bmMiKSxQdSgpKSwyJmUmJnZ1KCJhY3RpdmVSdW5JZCIsUGIoMSwxMSxuLmFjdGl2ZVJ1bklkJCkpKCJsb2FkaW5nTnVtRXhlY3V0aW9ucyIsUGIoMiwxMyxuLmxvYWRpbmdOdW1FeGVjdXRpb25zJCkpKCJudW1FeGVjdXRpb25zIixQYigzLDE1LG4ubnVtRXhlY3V0aW9ucyQpKSgic2Nyb2xsQmVnaW5JbmRleCIsUGIoNCwxNyxuLnNjcm9sbEJlZ2luSW5kZXgkKSkoInNjcm9sbEJlZ2luSW5kZXhVcHBlckxpbWl0IixQYig1LDE5LG4uc2Nyb2xsQmVnaW5JbmRleFVwcGVyTGltaXQkKSkoInBhZ2VTaXplIixQYig2LDIxLG4ucGFnZVNpemUkKSkoImRpc3BsYXlDb3VudCIsUGIoNywyMyxuLmRpc3BsYXlDb3VudCQpKSgiZGlzcGxheUV4ZWN1dGlvbkRpZ2VzdHMiLFBiKDgsMjUsbi5kaXNwbGF5RXhlY3V0aW9uRGlnZXN0cyQpKSgiZGlzcGxheUZvY3VzZWRBbGVydFR5cGVzIixQYig5LDI3LG4uZGlzcGxheUZvY3VzZWRBbGVydFR5cGVzJCkpKCJmb2N1c2VkRXhlY3V0aW9uSW5kZXgiLFBiKDEwLDI5LG4uZm9jdXNlZEV4ZWN1dGlvbkluZGV4JCkpKCJmb2N1c2VkRXhlY3V0aW9uRGlzcGxheUluZGV4IixQYigxMSwzMSxuLmZvY3VzZWRFeGVjdXRpb25EaXNwbGF5SW5kZXgkKSl9LGRpcmVjdGl2ZXM6W2RLXSxwaXBlczpbTXZdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIobUssW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoidGYtZGVidWdnZXItdjItdGltZWxpbmUiLHRlbXBsYXRlOidcbiAgICA8dGltZWxpbmUtY29tcG9uZW50XG4gICAgICBbYWN0aXZlUnVuSWRdPSJhY3RpdmVSdW5JZCQgfCBhc3luYyJcbiAgICAgIFtsb2FkaW5nTnVtRXhlY3V0aW9uc109ImxvYWRpbmdOdW1FeGVjdXRpb25zJCB8IGFzeW5jIlxuICAgICAgW251bUV4ZWN1dGlvbnNdPSJudW1FeGVjdXRpb25zJCB8IGFzeW5jIlxuICAgICAgW3Njcm9sbEJlZ2luSW5kZXhdPSJzY3JvbGxCZWdpbkluZGV4JCB8IGFzeW5jIlxuICAgICAgW3Njcm9sbEJlZ2luSW5kZXhVcHBlckxpbWl0XT0ic2Nyb2xsQmVnaW5JbmRleFVwcGVyTGltaXQkIHwgYXN5bmMiXG4gICAgICBbcGFnZVNpemVdPSJwYWdlU2l6ZSQgfCBhc3luYyJcbiAgICAgIFtkaXNwbGF5Q291bnRdPSJkaXNwbGF5Q291bnQkIHwgYXN5bmMiXG4gICAgICBbZGlzcGxheUV4ZWN1dGlvbkRpZ2VzdHNdPSJkaXNwbGF5RXhlY3V0aW9uRGlnZXN0cyQgfCBhc3luYyJcbiAgICAgIFtkaXNwbGF5Rm9jdXNlZEFsZXJ0VHlwZXNdPSJkaXNwbGF5Rm9jdXNlZEFsZXJ0VHlwZXMkIHwgYXN5bmMiXG4gICAgICBbZm9jdXNlZEV4ZWN1dGlvbkluZGV4XT0iZm9jdXNlZEV4ZWN1dGlvbkluZGV4JCB8IGFzeW5jIlxuICAgICAgW2ZvY3VzZWRFeGVjdXRpb25EaXNwbGF5SW5kZXhdPSJmb2N1c2VkRXhlY3V0aW9uRGlzcGxheUluZGV4JCB8IGFzeW5jIlxuICAgICAgKG9uTmF2aWdhdGVMZWZ0KT0ib25OYXZpZ2F0ZUxlZnQoKSJcbiAgICAgIChvbk5hdmlnYXRlUmlnaHQpPSJvbk5hdmlnYXRlUmlnaHQoKSJcbiAgICAgIChvbkV4ZWN1dGlvbkRpZ2VzdENsaWNrZWQpPSJvbkV4ZWN1dGlvbkRpZ2VzdENsaWNrZWQoJGV2ZW50KSJcbiAgICAgIChvblNsaWRlckNoYW5nZSk9Im9uU2xpZGVyQ2hhbmdlKCRldmVudCkiXG4gICAgPjwvdGltZWxpbmUtY29tcG9uZW50PlxuICAnLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2h9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpFa31dfSksbnVsbCk7Y29uc3QgeUs9ZnVuY3Rpb24odCl7cmV0dXJuW3RdfTtjbGFzcyBfS3tjb25zdHJ1Y3Rvcigpe3RoaXMub25PcE5hbWVDbGljaz1uZXcgQWJ9fWZ1bmN0aW9uIENLKHQsZSl7aWYoMSZ0KXtjb25zdCB0PUV1KCk7T3UoMCwiZGl2IiwxMyksT3UoMSwiZGl2IiwxNCksTWYoMiksUHUoKSxPdSgzLCJncmFwaC1vcCIsMTUpLE51KCJvbk9wTmFtZUNsaWNrIiwoZnVuY3Rpb24gZShuKXtyYSh0KTtjb25zdCBvPUx1KDMpO3JldHVybiBvLm9uR3JhcGhPcE5hdmlnYXRlLmVtaXQoe29wX25hbWU6bi5vcF9uYW1lLGdyYXBoX2lkOm8uZ3JhcGhJZH0pfSkpLFB1KCksUHUoKX1pZigyJnQpe2NvbnN0IHQ9ZS4kaW1wbGljaXQsbj1lLmluZGV4O0pjKDIpLHhmKCJJbnB1dCBzbG90ICIsbiwiOiIpLEpjKDEpLHZ1KCJraW5kIiwiaW5wdXQiKSgib3BOYW1lIix0Lm9wX25hbWUpKCJzbG90Iix0Lm91dHB1dF9zbG90KSgib3BEYXRhIix0LmRhdGEpfX1mdW5jdGlvbiBNSyh0LGUpe2lmKDEmdCYmKE91KDAsImRpdiIsMTEpLE91KDEsImRpdiIpLFdtKDIsQ0ssNCw1LCJkaXYiLDEyKSxQdSgpLFB1KCkpLDImdCl7Y29uc3QgdD1MdSgyKTtKYygyKSx2dSgibmdGb3JPZiIsdC5pbnB1dE9wcyl9fWZ1bmN0aW9uIHZLKHQsZSl7MSZ0JiYoT3UoMCwiZGl2IiwxNiksTWYoMSwiIChUaGlzIG9wIGhhcyBubyBpbnB1dCB0ZW5zb3IuKSAiKSxQdSgpKX1mdW5jdGlvbiB4Syh0LGUpe2lmKDEmdCl7Y29uc3QgdD1FdSgpO091KDAsImRpdiIsMjMpLE91KDEsImdyYXBoLW9wIiwxNSksTnUoIm9uT3BOYW1lQ2xpY2siLChmdW5jdGlvbiBlKG4pe3JhKHQpO2NvbnN0IG89THUoNCk7cmV0dXJuIG8ub25HcmFwaE9wTmF2aWdhdGUuZW1pdCh7b3BfbmFtZTpuLm9wX25hbWUsZ3JhcGhfaWQ6by5ncmFwaElkfSl9KSksUHUoKSxQdSgpfWlmKDImdCl7Y29uc3QgdD1lLiRpbXBsaWNpdDtKYygxKSx2dSgia2luZCIsImNvbnN1bWVyIikoIm9wTmFtZSIsdC5vcF9uYW1lKSgic2xvdCIsdC5pbnB1dF9zbG90KSgib3BEYXRhIix0LmRhdGEpfX1mdW5jdGlvbiBPSyh0LGUpe2lmKDEmdCYmKE91KDAsImRpdiIsMTkpLE91KDEsImRpdiIsMjApLE1mKDIpLE91KDMsInNwYW4iKSxxZyg0LDIxKSxQdSgpLE1mKDUsIikgIiksUHUoKSxXbSg2LHhLLDIsNCwiZGl2IiwyMiksUHUoKSksMiZ0KXtjb25zdCB0PWUuJGltcGxpY2l0LG49ZS5pbmRleDtKYygyKSxPZigiIE91dHB1dCBzbG90ICIsbiwiOiAoIix0Lmxlbmd0aCwiICIpLEpjKDIpLFpnKHQubGVuZ3RoKSxYZyg0KSxKYygyKSx2dSgibmdGb3JPZiIsdCl9fWZ1bmN0aW9uIFBLKHQsZSl7aWYoMSZ0JiYoT3UoMCwiZGl2IiwxNyksT3UoMSwiZGl2IiksV20oMixPSyw3LDQsImRpdiIsMTgpLFB1KCksUHUoKSksMiZ0KXtjb25zdCB0PUx1KDIpO0pjKDIpLHZ1KCJuZ0Zvck9mIix0LmNvbnN1bWVyT3BzKX19ZnVuY3Rpb24gd0sodCxlKXtpZigxJnQmJihPdSgwLCJkaXYiLDI0KSxNZigxKSxPdSgyLCJzcGFuIikscWcoMywyNSksUHUoKSxNZig0LCIgYW5kIG5vIGNvbnN1bWVyLikgIiksUHUoKSksMiZ0KXtjb25zdCB0PUx1KDIpO0pjKDEpLHhmKCIgKFRoaXMgb3AgaGFzICIsdC5vcEluZm8uY29uc3VtZXJzLmxlbmd0aCwiIG91dHB1dCAiKSxKYygyKSxaZyh0Lm9wSW5mby5jb25zdW1lcnMubGVuZ3RoKSxYZygzKX19ZnVuY3Rpb24ga0sodCxlKXtpZigxJnQpe2NvbnN0IHQ9RXUoKTtPdSgwLCJkaXYiKSxXbSgxLE1LLDMsMSwiZGl2Iiw0KSxXbSgyLHZLLDIsMCwibmctdGVtcGxhdGUiLG51bGwsNSxLYiksT3UoNCwiZGl2Iiw2KSxPdSg1LCJkaXYiLDcpLE1mKDYsIk9wOiIpLFB1KCksT3UoNywiZ3JhcGgtb3AiLDgpLE51KCJvbk9wTmFtZUNsaWNrIiwoZnVuY3Rpb24gZShuKXtyYSh0KTtjb25zdCBvPUx1KCk7cmV0dXJuIG8ub25HcmFwaE9wTmF2aWdhdGUuZW1pdCh7b3BfbmFtZTpuLm9wX25hbWUsZ3JhcGhfaWQ6by5ncmFwaElkfSl9KSksUHUoKSxQdSgpLFdtKDgsUEssMywxLCJkaXYiLDkpLFdtKDksd0ssNSwyLCJuZy10ZW1wbGF0ZSIsbnVsbCwxMCxLYiksUHUoKX1pZigyJnQpe2NvbnN0IHQ9R20oMyksZT1HbSgxMCksbj1MdSgpO0pjKDEpLHZ1KCJuZ0lmIixuLmlucHV0T3BzLmxlbmd0aD4wKSgibmdJZkVsc2UiLHQpLEpjKDYpLHZ1KCJraW5kIiwic2VsZiIpKCJvcE5hbWUiLG4ub3BJbmZvLm9wX25hbWUpKCJvcERhdGEiLG4ub3BJbmZvKSxKYygxKSx2dSgibmdJZiIsbi50b3RhbE51bUNvbnN1bWVycz4wKSgibmdJZkVsc2UiLGUpfX1mdW5jdGlvbiBTSyh0LGUpezEmdCYmKE91KDAsInNwYW4iLDI2KSxNZigxLCIgKE9wIGluZm8gdW5hdmFpbGFibGUuKSAiKSxQdSgpKX1mdW5jdGlvbiBESyh0LGUpezEmdCYmKE91KDAsImRpdiIsMjcpLE1mKDEsIiBObyBncmFwaCBvcCBzZWxlY3RlZC4gQ2xpY2sgYSB0ZW5zb3IgbmFtZSBpbiB0aGUgR3JhcGggRXhlY3V0aW9ucyB0YWJsZSB0byB2aWV3IHRoZSBuZWlnaGJvcmhvb2Qgb2YgdGhlIHRlbnNvcidzIG9wIGluIGl0cyBncmFwaC4gIiksUHUoKSl9X0suybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fF9LKX0sX0suybVjbXA9VW8oe3R5cGU6X0ssc2VsZWN0b3JzOltbImdyYXBoLW9wIl1dLGlucHV0czp7a2luZDoia2luZCIsb3BOYW1lOiJvcE5hbWUiLHNsb3Q6InNsb3QiLG9wRGF0YToib3BEYXRhIn0sb3V0cHV0czp7b25PcE5hbWVDbGljazoib25PcE5hbWVDbGljayJ9LGRlY2xzOjksdmFyczo3LGNvbnN0czpbWzEsIm9wLWNvbnRhaW5lciJdLFsxLCJpbnB1dC10ZW5zb3ItbmFtZSJdLFsxLCJvcC1uYW1lIiwzLCJuZ0NsYXNzIiwiY2xpY2siXSxbImNsYXNzIiwic2xvdCIsNCwibmdJZiJdLFsiY2xhc3MiLCJvcC10eXBlIiw0LCJuZ0lmIiwibmdJZkVsc2UiXSxbIm9wSW5mb01pc3NpbmciLCIiXSxbMSwic2xvdCJdLFszLCJuZ1N3aXRjaCJdLFs0LCJuZ1N3aXRjaENhc2UiXSxbMSwib3AtdHlwZSJdLFsxLCJvcC1pbmZvLW1pc3NpbmciXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pe2lmKDEmZSYmKE91KDAsImJ1dHRvbiIsMCksT3UoMSwiZGl2IiwxKSxPdSgyLCJidXR0b24iLDIpLE51KCJjbGljayIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vbk9wTmFtZUNsaWNrLmVtaXQoe29wX25hbWU6bi5vcE5hbWV9KX0pKSxPdSgzLCJzcGFuIiksTWYoNCksUHUoKSxQdSgpLFdtKDUsZ0ssNSw0LCJkaXYiLDMpLFB1KCksV20oNixoSywyLDEsImRpdiIsNCksV20oNyxiSywyLDAsIm5nLXRlbXBsYXRlIixudWxsLDUsS2IpLFB1KCkpLDImZSl7Y29uc3QgdD1HbSg4KTtKYygyKSx2dSgibmdDbGFzcyIsZ2IoNSx5Sywic2VsZiI9PT1uLmtpbmQ/InNlbGYtb3AtbmFtZSI6IiIpKSxKYygyKSx2ZihuLm9wTmFtZSksSmMoMSksdnUoIm5nSWYiLCJzZWxmIiE9PW4ua2luZCksSmMoMSksdnUoIm5nSWYiLHZvaWQgMCE9PW4ub3BEYXRhKSgibmdJZkVsc2UiLHQpfX0sZGlyZWN0aXZlczpbdHYsYXYsY3YsZHZdLHN0eWxlczpbJy5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHh9Lm1hdC1oMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaGVhZGxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTVweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZ1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjA1ZW07bWFyZ2luOjAgMCA1NnB4fS5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAwNWVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXJhaXNlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdHJva2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmxhdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZhYltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbWluaS1mYWJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4fS5tYXQtY2FyZC1zdWJ0aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGVja2JveC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvb3Rlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgdHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIzZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LjU0MTY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2NjY2NjY3ZW0pfUBtZWRpYSBwcmludHsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjJlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouMjVlbSAwIC43NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxZW0gMCAxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMiksIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi0wLjA2MjVlbX0ubWF0LW1lbnUtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci12ZXJ0aWNhbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGFiLWxpbmtbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MH0ubWF0LXRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5Om5vbmV9LmNkay12aXN1YWxseS1oaWRkZW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjZ9LmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV0sIC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3hbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2tbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHt9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7fS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOi13ZWJraXQtYXV0b2ZpbGwpe2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZVtfbmdjb250ZW50LSVDT01QJV17cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fS5tYXQtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfS5vcC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCAub3AtbmFtZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6aW5oZXJpdDtiYWNrZ3JvdW5kLWNvbG9yOmluaGVyaXR9Lm9wLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjJweCBzb2xpZCAjZWJlYmViO2JvcmRlci1yYWRpdXM6NHB4O2JveC1zaGFkb3c6MXB4IDNweCAjZWVlO2N1cnNvcjpwb2ludGVyO21hcmdpbjowIDVweCAwIDA7cGFkZGluZzoycHggNnB4O3RleHQtYWxpZ246cmlnaHQ7d2lkdGg6MjAwcHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm9wLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5vcC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjoycHggc29saWQgIzU1NX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAub3AtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm9wLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym94LXNoYWRvdzoxcHggM3B4ICM3NTc1NzV9Lm9wLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXN7b3V0bGluZTowfS5vcC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmhvdmVye2JvcmRlcjoycHggc29saWQgI2ZmZDNiMn0ub3AtaW5mby1taXNzaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpncmF5fS5vcC1uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6bm9uZTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmlubGluZS1ibG9jaztvdmVyZmxvdy13cmFwOmFueXdoZXJlO3BhZGRpbmc6MDt0ZXh0LWFsaWduOnJpZ2h0O3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7d2hpdGUtc3BhY2U6cHJlLXdyYXB9Lm9wLW5hbWVbX25nY29udGVudC0lQ09NUCVdOmZvY3Vze291dGxpbmU6MH0ub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZWNlZmYxO2JvcmRlcjoxcHggc29saWQgI2ViZWJlYjtib3JkZXItcmFkaXVzOjRweDtmb250LWZhbWlseToiUm9ib3RvIE1vbm8iLG1vbm9zcGFjZTtmb250LXNpemU6MTBweDtoZWlnaHQ6MTRweDtsaW5lLWhlaWdodDoxNHB4O3BhZGRpbmc6MXB4IDNweDt3aWR0aDptYXgtY29udGVudDtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tdG9wOjNweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5vcC10eXBlW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MXB4IHNvbGlkICM1NTV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojNDU1YTY0fS5zZWxmLW9wLW5hbWVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OmJvbGQ7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LnNsb3RbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnNsb3RbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuc2xvdFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9J119KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKF9LLFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6ImdyYXBoLW9wIix0ZW1wbGF0ZVVybDoiZ3JhcGhfb3BfY29tcG9uZW50Lm5nLmh0bWwiLHN0eWxlVXJsczpbIi4vZ3JhcGhfb3BfY29tcG9uZW50LmNzcyJdfV19XSxudWxsLHtraW5kOlt7dHlwZTp5X31dLG9wTmFtZTpbe3R5cGU6eV99XSxzbG90Olt7dHlwZTp5X31dLG9wRGF0YTpbe3R5cGU6eV99XSxvbk9wTmFtZUNsaWNrOlt7dHlwZTpfX31dfSk7Y2xhc3MgRUt7Y29uc3RydWN0b3IoKXt0aGlzLm9uR3JhcGhPcE5hdmlnYXRlPW5ldyBBYn1nZXQgZ3JhcGhJZCgpe3JldHVybiB0aGlzLm9wSW5mby5ncmFwaF9pZHNbdGhpcy5vcEluZm8uZ3JhcGhfaWRzLmxlbmd0aC0xXX1nZXQgdG90YWxOdW1Db25zdW1lcnMoKXtyZXR1cm4gdGhpcy5jb25zdW1lck9wcy5yZWR1Y2UoKCh0LGUpPT50K2UubGVuZ3RoKSwwKX19RUsuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEVLKX0sRUsuybVjbXA9VW8oe3R5cGU6RUssc2VsZWN0b3JzOltbImdyYXBoLWNvbXBvbmVudCJdXSxpbnB1dHM6e29wSW5mbzoib3BJbmZvIixpbnB1dE9wczoiaW5wdXRPcHMiLGNvbnN1bWVyT3BzOiJjb25zdW1lck9wcyJ9LG91dHB1dHM6e29uR3JhcGhPcE5hdmlnYXRlOiJvbkdyYXBoT3BOYXZpZ2F0ZSJ9LGRlY2xzOjksdmFyczoyLGNvbnN0czpmdW5jdGlvbigpe2xldCB0LGUsbixvO3JldHVybiB0PSJ1bmRlZmluZWQiIT10eXBlb2YgbmdJMThuQ2xvc3VyZU1vZGUmJm5nSTE4bkNsb3N1cmVNb2RlP2dvb2cuZ2V0TXNnKCJ7VkFSX1BMVVJBTCwgcGx1cmFsLCA9MCB7Y29uc3VtZXJ9ID0xIHtjb25zdW1lcn0gb3RoZXIge2NvbnN1bWVyc319Iik6JGxvY2FsaXplYDrikJ9mZTU1ZjliMTkzZWEyMGFhZTViNTYzNWU2OGQ5Mzg2NTAzODQ3NzQ24pCfNDk1NTEzMzc0MDg0MTI5OTg1MTp7VkFSX1BMVVJBTCwgcGx1cmFsLCA9MCB7Y29uc3VtZXJ9ID0xIHtjb25zdW1lcn0gb3RoZXIge2NvbnN1bWVyc319YCx0PUtnKHQse1ZBUl9QTFVSQUw6Iu+/vTDvv70ifSksZT0idW5kZWZpbmVkIiE9dHlwZW9mIG5nSTE4bkNsb3N1cmVNb2RlJiZuZ0kxOG5DbG9zdXJlTW9kZT9nb29nLmdldE1zZygiIHskaWN1fSIse2ljdTp0fSk6JGxvY2FsaXplYDrikJ9iYWE0NjBlMmYyYjg1N2UyNjI5MmIyNDZmYzE4YWUwZWE5YjVlNTM34pCfNTU1NjM0MDM0Mzg1MDE2NTUxNjogJHt0fTpJQ1U6YCxuPSJ1bmRlZmluZWQiIT10eXBlb2YgbmdJMThuQ2xvc3VyZU1vZGUmJm5nSTE4bkNsb3N1cmVNb2RlP2dvb2cuZ2V0TXNnKCJ7VkFSX1BMVVJBTCwgcGx1cmFsLCA9MCB7dGVuc29yfSA9MSB7dGVuc29yfSBvdGhlciB7dGVuc29yc319Iik6JGxvY2FsaXplYDrikJ82YWE3NWY2MjdlMGRjMTYxNTBlZjQ0ODQ2NGUwYzg1N2FhYTBkYzE44pCfNTE1NjcxMjkzNTE1MDU4Njg3ODp7VkFSX1BMVVJBTCwgcGx1cmFsLCA9MCB7dGVuc29yfSA9MSB7dGVuc29yfSBvdGhlciB7dGVuc29yc319YCxuPUtnKG4se1ZBUl9QTFVSQUw6Iu+/vTDvv70ifSksbz0idW5kZWZpbmVkIiE9dHlwZW9mIG5nSTE4bkNsb3N1cmVNb2RlJiZuZ0kxOG5DbG9zdXJlTW9kZT9nb29nLmdldE1zZygiIHskaWN1fSIse2ljdTpufSk6JGxvY2FsaXplYDrikJ84OTM0NzZjMmM0MjFjZWU0NzY2M2M5NzMyZmE0MWE3NTBkM2E3M2Rm4pCfMjQ2MDY3MDUzNzM1MTYyNjM0OiAke259OklDVTpgLFtbMSwiZ3JhcGgtc3RydWN0dXJlLWNvbnRhaW5lciJdLFs0LCJuZ0lmIiwibmdJZkVsc2UiXSxbIm9wSW5mb01pc3NpbmciLCIiXSxbIm5vT3BGb2N1c2VkIiwiIl0sWyJjbGFzcyIsImlucHV0cy1jb250YWluZXIiLDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsibm9JbnB1dHMiLCIiXSxbMSwic2VsZi1vcC1jb250YWluZXIiXSxbMSwic2VsZi1vcC1oZWFkZXIiXSxbMywia2luZCIsIm9wTmFtZSIsIm9wRGF0YSIsIm9uT3BOYW1lQ2xpY2siXSxbImNsYXNzIiwiY29uc3VtZXJzLWNvbnRhaW5lciIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJub0NvbnN1bWVycyIsIiJdLFsxLCJpbnB1dHMtY29udGFpbmVyIl0sWyJjbGFzcyIsImlucHV0LW9wLXNlY3Rpb24iLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJpbnB1dC1vcC1zZWN0aW9uIl0sWzEsImlucHV0LXNsb3QtaGVhZGVyIl0sWzMsImtpbmQiLCJvcE5hbWUiLCJzbG90Iiwib3BEYXRhIiwib25PcE5hbWVDbGljayJdLFsxLCJpbnB1dHMtY29udGFpbmVyIiwibm8taW5wdXRzLWluZGljYXRvciJdLFsxLCJjb25zdW1lcnMtY29udGFpbmVyIl0sWyJjbGFzcyIsInNsb3QtY29uc3VtZXJzLWNvbnRhaW5lciIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsInNsb3QtY29uc3VtZXJzLWNvbnRhaW5lciJdLFsxLCJzbG90LWNvbnN1bWVycy1oZWFkZXIiXSxlLFsiY2xhc3MiLCJjb25zdW1lci1zZWN0aW9uIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY29uc3VtZXItc2VjdGlvbiJdLFsxLCJvcC1jb25zdW1lcnMtY29udGFpbmVyIl0sbyxbMSwib3AtaW5mby1taXNzaW5nIl0sWzEsIm5vLW9wLWZvY3VzZWQiXV19LHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJihPdSgwLCJkaXYiKSxPdSgxLCJkaXYiKSxNZigyLCJHcmFwaCBTdHJ1Y3R1cmUiKSxQdSgpLE91KDMsImRpdiIsMCksV20oNCxrSywxMSw3LCJkaXYiLDEpLFB1KCksV20oNSxTSywyLDAsIm5nLXRlbXBsYXRlIixudWxsLDIsS2IpLFdtKDcsREssMiwwLCJuZy10ZW1wbGF0ZSIsbnVsbCwzLEtiKSxQdSgpKSwyJmUpe2NvbnN0IHQ9R20oOCk7SmMoNCksdnUoIm5nSWYiLG51bGwhPW4ub3BJbmZvKSgibmdJZkVsc2UiLHQpfX0sZGlyZWN0aXZlczpbYXYsX0ssb3ZdLHN0eWxlczpbJy5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHh9Lm1hdC1oMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaGVhZGxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTVweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZ1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjA1ZW07bWFyZ2luOjAgMCA1NnB4fS5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAwNWVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXJhaXNlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdHJva2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmxhdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZhYltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbWluaS1mYWJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4fS5tYXQtY2FyZC1zdWJ0aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGVja2JveC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvb3Rlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgdHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIzZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LjU0MTY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2NjY2NjY3ZW0pfUBtZWRpYSBwcmludHsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjJlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouMjVlbSAwIC43NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxZW0gMCAxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMiksIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi0wLjA2MjVlbX0ubWF0LW1lbnUtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci12ZXJ0aWNhbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGFiLWxpbmtbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MH0ubWF0LXRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5Om5vbmV9LmNkay12aXN1YWxseS1oaWRkZW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjZ9LmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV0sIC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3hbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2tbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHt9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7fS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOi13ZWJraXQtYXV0b2ZpbGwpe2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZVtfbmdjb250ZW50LSVDT01QJV17cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fS5tYXQtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfVtfbmdob3N0LSVDT01QJV17b3ZlcmZsb3cteTphdXRvfS5jb25zdW1lcnMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbTo1cHg7b3ZlcmZsb3cteDphdXRvO3doaXRlLXNwYWNlOm5vd3JhcH0uY29uc3VtZXItc2VjdGlvbltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpibG9jazttYXJnaW46NXB4IDB9LmdyYXBoLXN0cnVjdHVyZS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O292ZXJmbG93LXk6YXV0bzt3aGl0ZS1zcGFjZTpub3dyYXB9LmlucHV0cy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjEyKTttYXJnaW4tdG9wOjVweDtvdmVyZmxvdy14OmF1dG87cGFkZGluZy1ib3R0b206MDt3aGl0ZS1zcGFjZTpub3dyYXB9LmlucHV0LW9wLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yaWdodDoxcHggc29saWQgcmdiYSgwLDAsMCwuMTIpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1yaWdodDo1cHg7cGFkZGluZy1ib3R0b206NXB4fS5pbnB1dC1zbG90LWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZmZmMDk5O21hcmdpbi1ib3R0b206NXB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5pbnB1dC1zbG90LWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5pbnB1dC1zbG90LWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZTY1MTAwfS5pbnB1dC10ZW5zb3ItbmFtZVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpibG9jazt3aGl0ZS1zcGFjZTpub3dyYXB9Lm5vLW9wLWZvY3VzZWRbX25nY29udGVudC0lQ09NUCVde2NvbG9yOmdyYXk7Zm9udC1mYW1pbHk6IlJvYm90byIsQXJpYWwsSGVsdmV0aWNhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEzcHg7d2hpdGUtc3BhY2U6bm9ybWFsfS5zZWxmLW9wLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6Ym9sZDttYXJnaW4tYm90dG9tOjVweH0uc2VsZi1vcC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjEyKTtwYWRkaW5nLWJvdHRvbTo1cHh9LnNsb3QtY29uc3VtZXJzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCByZ2JhKDAsMCwwLC4xMik7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXJpZ2h0OjVweDtwYWRkaW5nLXRvcDo1cHg7dmVydGljYWwtYWxpZ246dG9wfS5zbG90LWNvbnN1bWVycy1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcH0nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoRUssW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoiZ3JhcGgtY29tcG9uZW50Iix0ZW1wbGF0ZVVybDoiLi9ncmFwaF9jb21wb25lbnQubmcuaHRtbCIsc3R5bGVVcmxzOlsiLi9ncmFwaF9jb21wb25lbnQuY3NzIl0sY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sbnVsbCx7b3BJbmZvOlt7dHlwZTp5X31dLGlucHV0T3BzOlt7dHlwZTp5X31dLGNvbnN1bWVyT3BzOlt7dHlwZTp5X31dLG9uR3JhcGhPcE5hdmlnYXRlOlt7dHlwZTpfX31dfSk7Y2xhc3MgQUt7Y29uc3RydWN0b3IodCl7dGhpcy5zdG9yZT10LHRoaXMub3BJbmZvJD10aGlzLnN0b3JlLnBpcGUoUmsoWVopKSx0aGlzLmlucHV0T3BzJD10aGlzLnN0b3JlLnBpcGUoUmsocVopKSx0aGlzLmNvbnN1bWVyT3BzJD10aGlzLnN0b3JlLnBpcGUoUmsoWFopKX1vbkdyYXBoT3BOYXZpZ2F0ZSh0KXt0aGlzLnN0b3JlLmRpc3BhdGNoKHFxKHQpKX19ZnVuY3Rpb24gUksodCxlKXsxJnQmJihPdSgwLCJkaXYiLDEyKSxNZigxLCLilrYiKSxQdSgpKX1BSy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8QUspKE11KEVrKSl9LEFLLsm1Y21wPVVvKHt0eXBlOkFLLHNlbGVjdG9yczpbWyJ0Zi1kZWJ1Z2dlci12Mi1ncmFwaCJdXSxkZWNsczo0LHZhcnM6OSxjb25zdHM6W1szLCJvcEluZm8iLCJpbnB1dE9wcyIsImNvbnN1bWVyT3BzIiwib25HcmFwaE9wTmF2aWdhdGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKE91KDAsImdyYXBoLWNvbXBvbmVudCIsMCksTnUoIm9uR3JhcGhPcE5hdmlnYXRlIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vbkdyYXBoT3BOYXZpZ2F0ZShlKX0pKSxPYigxLCJhc3luYyIpLE9iKDIsImFzeW5jIiksT2IoMywiYXN5bmMiKSxQdSgpKSwyJmUmJnZ1KCJvcEluZm8iLFBiKDEsMyxuLm9wSW5mbyQpKSgiaW5wdXRPcHMiLFBiKDIsNSxuLmlucHV0T3BzJCkpKCJjb25zdW1lck9wcyIsUGIoMyw3LG4uY29uc3VtZXJPcHMkKSl9LGRpcmVjdGl2ZXM6W0VLXSxwaXBlczpbTXZdLGVuY2Fwc3VsYXRpb246Mn0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoQUssW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoidGYtZGVidWdnZXItdjItZ3JhcGgiLHRlbXBsYXRlOidcbiAgICA8Z3JhcGgtY29tcG9uZW50XG4gICAgICBbb3BJbmZvXT0ib3BJbmZvJCB8IGFzeW5jIlxuICAgICAgW2lucHV0T3BzXT0iaW5wdXRPcHMkIHwgYXN5bmMiXG4gICAgICBbY29uc3VtZXJPcHNdPSJjb25zdW1lck9wcyQgfCBhc3luYyJcbiAgICAgIChvbkdyYXBoT3BOYXZpZ2F0ZSk9Im9uR3JhcGhPcE5hdmlnYXRlKCRldmVudCkiXG4gICAgPjwvZ3JhcGgtY29tcG9uZW50PlxuICAnfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6RWt9XX0pLG51bGwpO2NvbnN0IFRLPWZ1bmN0aW9uKHQsZSl7cmV0dXJue3RlbnNvckRlYnVnTW9kZTp0LGFycmF5OmV9fTtmdW5jdGlvbiBOSyh0LGUpe2lmKDEmdCYmd3UoMCwiZGVidWctdGVuc29yLXZhbHVlIiwxNyksMiZ0KXtjb25zdCB0PUx1KDIpLiRpbXBsaWNpdCxlPUx1KDIpO3Z1KCJkZWJ1Z1RlbnNvclZhbHVlIixlLnBhcnNlRGVidWdUZW5zb3JWYWx1ZShoYigxLFRLLGUuZ3JhcGhFeGVjdXRpb25EYXRhW3RdLnRlbnNvcl9kZWJ1Z19tb2RlLGUuZ3JhcGhFeGVjdXRpb25EYXRhW3RdLmRlYnVnX3RlbnNvcl92YWx1ZSkpKX19ZnVuY3Rpb24gSUsodCxlKXtpZigxJnQpe2NvbnN0IHQ9RXUoKTtPdSgwLCJkaXYiKSxPdSgxLCJkaXYiLDEzKSxPdSgyLCJidXR0b24iLDE0KSxOdSgiY2xpY2siLChmdW5jdGlvbiBlKCl7cmEodCk7Y29uc3Qgbj1MdSgpLiRpbXBsaWNpdCxvPUx1KDIpO3JldHVybiBvLm9uVGVuc29yTmFtZUNsaWNrLmVtaXQoe2luZGV4Om4sZ3JhcGhfaWQ6by5ncmFwaEV4ZWN1dGlvbkRhdGFbbl0uZ3JhcGhfaWQsb3BfbmFtZTpvLmdyYXBoRXhlY3V0aW9uRGF0YVtuXS5vcF9uYW1lfSl9KSksTWYoMyksUHUoKSxPdSg0LCJkaXYiLDE1KSxNZig1KSxQdSgpLFB1KCksV20oNixOSywxLDQsImRlYnVnLXRlbnNvci12YWx1ZSIsMTYpLFB1KCl9aWYoMiZ0KXtjb25zdCB0PUx1KCkuJGltcGxpY2l0LGU9THUoMik7SmMoMiksVXUoInRpdGxlIixlLmdldFRlbnNvck5hbWUodCkpLEpjKDEpLHhmKCIgIixlLmdldFRlbnNvck5hbWUodCksIiAiKSxKYygyKSx2ZihlLmdyYXBoRXhlY3V0aW9uRGF0YVt0XS5vcF90eXBlKSxKYygxKSx2dSgibmdJZiIsbnVsbCE9PWUuZ3JhcGhFeGVjdXRpb25EYXRhW3RdLmRlYnVnX3RlbnNvcl92YWx1ZSl9fWZ1bmN0aW9uIHpLKHQsZSl7MSZ0JiYoT3UoMCwiZGl2IiwxOCksTWYoMSwiIExvYWRpbmcuLi4gIiksUHUoKSl9Y29uc3QgSEs9ZnVuY3Rpb24odCl7cmV0dXJueyJpbnB1dC1vZi1mb2N1cyI6dH19O2Z1bmN0aW9uIEZLKHQsZSl7aWYoMSZ0JiYoT3UoMCwiZGl2Iiw1KSxPdSgxLCJkaXYiLDYpLE91KDIsImRpdiIsNyksV20oMyxSSywyLDAsImRpdiIsOCksTWYoNCksUHUoKSxXbSg1LElLLDcsNCwiZGl2Iiw5KSxXbSg2LHpLLDIsMCwibmctdGVtcGxhdGUiLDEwLDExLEtiKSxQdSgpLFB1KCkpLDImdCl7Y29uc3QgdD1lLiRpbXBsaWNpdCxuPUdtKDcpLG89THUoMik7SmMoMSksdnUoIm5nQ2xhc3MiLGdiKDUsSEssby5pc0lucHV0T2ZGb2N1cyh0KSkpLEpjKDIpLHZ1KCJuZ0lmIix0PT09by5mb2N1c0luZGV4KSxKYygxKSx4ZigiICIsdCwiICIpLEpjKDEpLHZ1KCJuZ0lmIixvLmdyYXBoRXhlY3V0aW9uRGF0YVt0XSkoIm5nSWZFbHNlIixuKX19ZnVuY3Rpb24gTEsodCxlKXtpZigxJnQpe2NvbnN0IHQ9RXUoKTtPdSgwLCJjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQiLDMpLE51KCJzY3JvbGxlZEluZGV4Q2hhbmdlIiwoZnVuY3Rpb24gZShuKXtyZXR1cm4gcmEodCksTHUoKS5vblNjcm9sbGVkSW5kZXhDaGFuZ2UuZW1pdChuKX0pKSxXbSgxLEZLLDgsNywiZGl2Iiw0KSxQdSgpfWlmKDImdCl7Y29uc3QgdD1MdSgpO0pjKDEpLHZ1KCJjZGtWaXJ0dWFsRm9yT2YiLHQuZ3JhcGhFeGVjdXRpb25JbmRpY2VzKX19Y2xhc3MgQkt7Y29uc3RydWN0b3IoKXt0aGlzLm9uU2Nyb2xsZWRJbmRleENoYW5nZT1uZXcgQWIsdGhpcy5vblRlbnNvck5hbWVDbGljaz1uZXcgQWIsdGhpcy5wYXJzZURlYnVnVGVuc29yVmFsdWU9a1gsdGhpcy5URVNUX09OTFk9e2dldFZpZXdQb3J0OigpPT50aGlzLnZpZXdQb3J0fX1uZ09uQ2hhbmdlcyh0KXtpZih0aGlzLnZpZXdQb3J0JiZ0LmZvY3VzSW5kZXgmJm51bGwhPT10LmZvY3VzSW5kZXguY3VycmVudFZhbHVlKXtjb25zdCBlPXRoaXMudmlld1BvcnQuZ2V0UmVuZGVyZWRSYW5nZSgpLG49dC5mb2N1c0luZGV4LmN1cnJlbnRWYWx1ZSxvPU1hdGgucm91bmQoKGUuZW5kLWUuc3RhcnQpLzMpLGk9TWF0aC5tYXgobi1vLDApO3RoaXMudmlld1BvcnQuc2Nyb2xsVG9JbmRleChpLG4+PWUuc3RhcnQmJm48ZS5lbmQ/InNtb290aCI6dm9pZCAwKX19Z2V0VGVuc29yTmFtZSh0KXtyZXR1cm5gJHt0aGlzLmdyYXBoRXhlY3V0aW9uRGF0YVt0XS5vcF9uYW1lfToke3RoaXMuZ3JhcGhFeGVjdXRpb25EYXRhW3RdLm91dHB1dF9zbG90fWB9aXNJbnB1dE9mRm9jdXModCl7cmV0dXJuIG51bGwhPT10aGlzLmZvY3VzSW5wdXRJbmRpY2VzJiZ0aGlzLmZvY3VzSW5wdXRJbmRpY2VzLmluY2x1ZGVzKHQpfX1CSy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8QkspfSxCSy7JtWNtcD1Vbyh7dHlwZTpCSyxzZWxlY3RvcnM6W1siZ3JhcGgtZXhlY3V0aW9ucy1jb21wb25lbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJldiKHRGLDEpLDImZSl7bGV0IHQ7VWIodD1ZYigpKSYmKG4udmlld1BvcnQ9dC5maXJzdCl9fSxpbnB1dHM6e251bUdyYXBoRXhlY3V0aW9uczoibnVtR3JhcGhFeGVjdXRpb25zIixncmFwaEV4ZWN1dGlvbkRhdGE6ImdyYXBoRXhlY3V0aW9uRGF0YSIsZ3JhcGhFeGVjdXRpb25JbmRpY2VzOiJncmFwaEV4ZWN1dGlvbkluZGljZXMiLGZvY3VzSW5kZXg6ImZvY3VzSW5kZXgiLGZvY3VzSW5wdXRJbmRpY2VzOiJmb2N1c0lucHV0SW5kaWNlcyJ9LG91dHB1dHM6e29uU2Nyb2xsZWRJbmRleENoYW5nZToib25TY3JvbGxlZEluZGV4Q2hhbmdlIixvblRlbnNvck5hbWVDbGljazoib25UZW5zb3JOYW1lQ2xpY2sifSxmZWF0dXJlczpbU2ldLGRlY2xzOjQsdmFyczoyLGNvbnN0czpbWzEsImdyYXBoLWV4ZWN1dGlvbnMtY29udGFpbmVyIl0sWzEsImdyYXBoLWV4ZWN1dGlvbnMtdGl0bGUiXSxbIml0ZW1TaXplIiwiMzgiLCJjbGFzcyIsImdyYXBoLWV4ZWN1dGlvbnMtdmlld3BvcnQiLDMsInNjcm9sbGVkSW5kZXhDaGFuZ2UiLDQsIm5nSWYiXSxbIml0ZW1TaXplIiwiMzgiLDEsImdyYXBoLWV4ZWN1dGlvbnMtdmlld3BvcnQiLDMsInNjcm9sbGVkSW5kZXhDaGFuZ2UiXSxbImNsYXNzIiwidGVuc29yLWNvbnRhaW5lciIsNCwiY2RrVmlydHVhbEZvciIsImNka1ZpcnR1YWxGb3JPZiJdLFsxLCJ0ZW5zb3ItY29udGFpbmVyIl0sWzEsInRlbnNvci1pdGVtIiwzLCJuZ0NsYXNzIl0sWzEsImdyYXBoLWV4ZWN1dGlvbi1pbmRleCJdLFsiY2xhc3MiLCJncmFwaC1leGVjdXRpb24tZm9jdXMiLDQsIm5nSWYiXSxbNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJjbGFzcyIsInRlbnNvci1pdGVtIl0sWyJkYXRhTG9hZGluZyIsIiJdLFsxLCJncmFwaC1leGVjdXRpb24tZm9jdXMiXSxbMSwidGVuc29yLW5hbWUtYW5kLW9wLXR5cGUiXSxbMSwidGVuc29yLW5hbWUiLDMsInRpdGxlIiwiY2xpY2siXSxbMSwib3AtdHlwZSJdLFszLCJkZWJ1Z1RlbnNvclZhbHVlIiw0LCJuZ0lmIl0sWzMsImRlYnVnVGVuc29yVmFsdWUiXSxbMSwibG9hZGluZy1zcGlubmVyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihPdSgwLCJkaXYiLDApLE91KDEsImRpdiIsMSksTWYoMiksUHUoKSxXbSgzLExLLDIsMSwiY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0IiwyKSxQdSgpKSwyJmUmJihKYygyKSx4ZigiIEdyYXBoIEV4ZWN1dGlvbnMgKCIsbi5udW1HcmFwaEV4ZWN1dGlvbnMsIikgIiksSmMoMSksdnUoIm5nSWYiLG51bGwhPT1uLm51bUdyYXBoRXhlY3V0aW9ucyYmbi5udW1HcmFwaEV4ZWN1dGlvbnM+MCkpfSxkaXJlY3RpdmVzOlthdix0RixYSCxuRix0dixYWF0sc3R5bGVzOlsnLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEycHg7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtYmFkZ2Utc21hbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6OXB4fS5tYXQtYmFkZ2UtbGFyZ2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweH0ubWF0LWgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1oZWFkbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMjRweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNnB4LzI4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNXB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC44MykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtaDZbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuNjcpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWJvZHktc3Ryb25nW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjAgMCAxMnB4fS5tYXQtc21hbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDEycHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjMwMCAxMTJweC8xMTJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDVlbTttYXJnaW46MCAwIDU2cHh9Lm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDU2cHgvNTZweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDJlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDQ1cHgvNDhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDA1ZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAzNHB4LzQwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDY0cHh9Lm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcmFpc2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0cm9rZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mbGF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmFiW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1taW5pLWZhYltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWJ1dHRvbi10b2dnbGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhcmQtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjIwcHh9Lm1hdC1jYXJkLXN1YnRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2hlY2tib3hbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNoZWNrYm94LWxheW91dFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoZWNrYm94LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoyNHB4fS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtdHJhaWxpbmctaWNvbi5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtcmVtb3ZlLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MThweH0ubWF0LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1oZWFkZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2VsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9vdGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2FsZW5kYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhbGVuZGFyLWJvZHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxM3B4fS5tYXQtY2FsZW5kYXItYm9keS1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FsZW5kYXItcGVyaW9kLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo0MDB9Lm1hdC1kaWFsb2ctdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjEyNTtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE1MCU7bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS41ZW07d2lkdGg6MS41ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNWVtIDA7Ym9yZGVyLXRvcDouODQzNzVlbSBzb2xpZCB0cmFuc3BhcmVudH0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6LTAuODQzNzVlbTtwYWRkaW5nLXRvcDouODQzNzVlbX0ubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo3NSU7bWFyZ2luLXRvcDouNjY2NjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjc5MTY2NjY2NjdlbSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNDM3NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMnB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjNlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM1MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjI4MTI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDouNTQxNjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjY2NjY2NjY2NjdlbSl9QG1lZGlhIHByaW50ey5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMmVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMWVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTJlbSkgc2NhbGUoMC43NSl9fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi4yNWVtIDAgLjc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMDkzNzVlbTttYXJnaW4tdG9wOi0wLjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjFlbSAwIDFlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS44NDM3NWVtO21hcmdpbi10b3A6LTAuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9aW5wdXQubWF0LWlucHV0LWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LTAuMDYyNWVtfS5tYXQtbWVudS1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtcGFnaW5hdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweH0ubWF0LXJhZGlvLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW19Lm1hdC1zbGlkZS10b2dnbGUtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdGVwcGVyLWhvcml6b250YWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXN0ZXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXN0ZXAtc3ViLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDpub3JtYWx9Lm1hdC1zdGVwLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LXN0ZXAtbGFiZWwtc2VsZWN0ZWRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRhYi1ncm91cFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdGFiLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10YWItbGlua1tfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowfS5tYXQtdG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB4O3BhZGRpbmctdG9wOjZweDtwYWRkaW5nLWJvdHRvbTo2cHh9Lm1hdC10b29sdGlwLWhhbmRzZXRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9Lm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE2cHh9Lm1hdC1vcHRncm91cC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1zaW1wbGUtc25hY2tiYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweH0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb25bX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjE7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo1MDB9Lm1hdC10cmVlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW5lc3RlZC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjQwMDtmb250LXNpemU6MTRweH0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmVtcHR5KXt0cmFuc2Zvcm06dHJhbnNsYXRlWigwKX0ubWF0LXJpcHBsZS5tYXQtcmlwcGxlLXVuYm91bmRlZFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItcmFkaXVzOjUwJTtwb2ludGVyLWV2ZW50czpub25lO3RyYW5zaXRpb246b3BhY2l0eSx0cmFuc2Zvcm0gMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpO3RyYW5zZm9ybTpzY2FsZSgwKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6bm9uZX0uY2RrLXZpc3VhbGx5LWhpZGRlbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjA7Y2xpcDpyZWN0KDAgMCAwIDApO2hlaWdodDoxcHg7bWFyZ2luOi0xcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwO291dGxpbmU6MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb2ludGVyLWV2ZW50czpub25lO3RvcDowO2xlZnQ6MDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTplbXB0eXtkaXNwbGF5Om5vbmV9LmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1wYW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czphdXRvO2JveC1zaXppbmc6Ym9yZGVyLWJveDt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O21heC13aWR0aDoxMDAlO21heC1oZWlnaHQ6MTAwJX0uY2RrLW92ZXJsYXktYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO3otaW5kZXg6MTAwMDtwb2ludGVyLWV2ZW50czphdXRvOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDt0cmFuc2l0aW9uOm9wYWNpdHkgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSk7b3BhY2l0eTowfS5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjF9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAuY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTouNn0uY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4zMil9LmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MH0uY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWluLXdpZHRoOjFweDttaW4taGVpZ2h0OjFweH0uY2RrLWdsb2JhbC1zY3JvbGxibG9ja1tfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7d2lkdGg6MTAwJTtvdmVyZmxvdy15OnNjcm9sbH1Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0e31Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZHt9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbHthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQgMHMgMW1zfS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOm5vdCg6LXdlYmtpdC1hdXRvZmlsbCl7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCAwcyAxbXN9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplW19uZ2NvbnRlbnQtJUNPTVAlXXtyZXNpemU6bm9uZX10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDphdXRvICFpbXBvcnRhbnQ7b3ZlcmZsb3c6aGlkZGVuICFpbXBvcnRhbnR9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZy1maXJlZm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDowICFpbXBvcnRhbnR9Lm1hdC1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtbWRjLWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9LmdyYXBoLWV4ZWN1dGlvbnMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItbGVmdDoxcHggc29saWQgI2ViZWJlYjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2hlaWdodDoxMDAlO21hcmdpbi1sZWZ0OjhweDtwYWRkaW5nLWxlZnQ6MTBweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZ3JhcGgtZXhlY3V0aW9ucy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JhcGgtZXhlY3V0aW9ucy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjNTU1fS5ncmFwaC1leGVjdXRpb24tZm9jdXNbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5ncmFwaC1leGVjdXRpb24taW5kZXhbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZy1yaWdodDo0cHg7dGV4dC1hbGlnbjpyaWdodDt3aWR0aDo0MHB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5ncmFwaC1leGVjdXRpb24taW5kZXhbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JhcGgtZXhlY3V0aW9uLWluZGV4W19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0uZ3JhcGgtZXhlY3V0aW9ucy10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Ym94LXNoYWRvdzowIDVweCAzcHggLTNweCAjY2NjO3BhZGRpbmctYm90dG9tOjVweH0uZ3JhcGgtZXhlY3V0aW9ucy12aWV3cG9ydFtfbmdjb250ZW50LSVDT01QJV17ZmxleC1ncm93OjE7Zm9udC1zaXplOjEycHg7d2lkdGg6MTAwJTtvdmVyZmxvdy14OmhpZGRlbn0uaW5wdXQtb2YtZm9jdXNbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmZjA5OX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuaW5wdXQtb2YtZm9jdXNbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuaW5wdXQtb2YtZm9jdXNbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2U2NTEwMH0ubG9hZGluZy1zcGlubmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9ja30ub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZWNlZmYxO2JvcmRlcjoxcHggc29saWQgI2ViZWJlYjtib3JkZXItcmFkaXVzOjRweDtmb250LWZhbWlseToiUm9ib3RvIE1vbm8iLG1vbm9zcGFjZTtmb250LXNpemU6MTBweDtoZWlnaHQ6MTRweDtsaW5lLWhlaWdodDoxNHB4O3BhZGRpbmc6MXB4IDNweDt3aWR0aDptYXgtY29udGVudDtkaXJlY3Rpb246cnRsO2Rpc3BsYXk6YmxvY2t9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjFweCBzb2xpZCAjNTU1fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5vcC10eXBlW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzQ1NWE2NH0udGVuc29yLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0udGVuc29yLWl0ZW1bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDpub3dyYXA7aGVpZ2h0OjM4cHg7bGluZS1oZWlnaHQ6MzhweDt0ZXh0LWFsaWduOmxlZnQ7dmVydGljYWwtYWxpZ246bWlkZGxlO3doaXRlLXNwYWNlOm5vd3JhcDt3aWR0aDoxMDAlfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC50ZW5zb3ItaXRlbVtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC50ZW5zb3ItaXRlbVtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX0udGVuc29yLW5hbWVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyOm5vbmU7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOmluaGVyaXQ7Y3Vyc29yOnBvaW50ZXI7ZGlyZWN0aW9uOnJ0bDtkaXNwbGF5OmJsb2NrO2hlaWdodDoxNnB4O2xpbmUtaGVpZ2h0OjE2cHg7bWFyZ2luOjJweCAwIDFweDttYXgtd2lkdGg6Y2FsYygxMDAlIC0gMnB4KTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowIDJweDt0ZXh0LWFsaWduOnJpZ2h0O3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXB9LnRlbnNvci1uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1c3tvdXRsaW5lOjFweCBzb2xpZCAjYzZjYWQxfS50ZW5zb3ItbmFtZS1hbmQtb3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV17ZGlyZWN0aW9uOnJ0bDtkaXNwbGF5OmlubGluZS1ibG9jaztvdmVyZmxvdzpoaWRkZW47cGFkZGluZy1yaWdodDo4cHg7dGV4dC1hbGlnbjpyaWdodDt3aWR0aDoyNDBweH1kZWJ1Zy10ZW5zb3ItdmFsdWVbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbjoycHggMH0nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoQkssW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoiZ3JhcGgtZXhlY3V0aW9ucy1jb21wb25lbnQiLHRlbXBsYXRlVXJsOiIuL2dyYXBoX2V4ZWN1dGlvbnNfY29tcG9uZW50Lm5nLmh0bWwiLHN0eWxlVXJsczpbIi4vZ3JhcGhfZXhlY3V0aW9uc19jb21wb25lbnQuY3NzIl0sY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sbnVsbCx7bnVtR3JhcGhFeGVjdXRpb25zOlt7dHlwZTp5X31dLGdyYXBoRXhlY3V0aW9uRGF0YTpbe3R5cGU6eV99XSxncmFwaEV4ZWN1dGlvbkluZGljZXM6W3t0eXBlOnlffV0sZm9jdXNJbmRleDpbe3R5cGU6eV99XSxmb2N1c0lucHV0SW5kaWNlczpbe3R5cGU6eV99XSxvblNjcm9sbGVkSW5kZXhDaGFuZ2U6W3t0eXBlOl9ffV0sb25UZW5zb3JOYW1lQ2xpY2s6W3t0eXBlOl9ffV0sdmlld1BvcnQ6W3t0eXBlOkZyLGFyZ3M6W3RGLHtzdGF0aWM6ITF9XX1dfSk7Y2xhc3MgVkt7Y29uc3RydWN0b3IodCl7dGhpcy5zdG9yZT10LHRoaXMubnVtR3JhcGhFeGVjdXRpb25zJD10aGlzLnN0b3JlLnBpcGUoUmsoSFopKSx0aGlzLmdyYXBoRXhlY3V0aW9uRGF0YSQ9dGhpcy5zdG9yZS5waXBlKFJrKFVaKSksdGhpcy5ncmFwaEV4ZWN1dGlvbkluZGljZXMkPXRoaXMuc3RvcmUucGlwZShSayh6ayhIWiwodD0+MD09PXQ/bnVsbDpBcnJheS5mcm9tKHtsZW5ndGg6dH0pLm1hcCgoKHQsZSk9PmUpKSkpKSksdGhpcy5mb2N1c0luZGV4JD10aGlzLnN0b3JlLnBpcGUoUmsoV1opKSx0aGlzLmZvY3VzSW5wdXRJbmRpY2VzJD10aGlzLnN0b3JlLnBpcGUoUmsoWlopKX1vblNjcm9sbGVkSW5kZXhDaGFuZ2UodCl7dGhpcy5zdG9yZS5kaXNwYXRjaChHcSh7aW5kZXg6dH0pKX1vblRlbnNvck5hbWVDbGljayh0KXt0aGlzLnN0b3JlLmRpc3BhdGNoKFlxKHQpKX19VksuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFZLKShNdShFaykpfSxWSy7JtWNtcD1Vbyh7dHlwZTpWSyxzZWxlY3RvcnM6W1sidGYtZGVidWdnZXItdjItZ3JhcGgtZXhlY3V0aW9ucyJdXSxkZWNsczo2LHZhcnM6MTUsY29uc3RzOltbMywibnVtR3JhcGhFeGVjdXRpb25zIiwiZ3JhcGhFeGVjdXRpb25EYXRhIiwiZ3JhcGhFeGVjdXRpb25JbmRpY2VzIiwiZm9jdXNJbmRleCIsImZvY3VzSW5wdXRJbmRpY2VzIiwib25TY3JvbGxlZEluZGV4Q2hhbmdlIiwib25UZW5zb3JOYW1lQ2xpY2siXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKE91KDAsImdyYXBoLWV4ZWN1dGlvbnMtY29tcG9uZW50IiwwKSxOdSgib25TY3JvbGxlZEluZGV4Q2hhbmdlIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vblNjcm9sbGVkSW5kZXhDaGFuZ2UoZSl9KSkoIm9uVGVuc29yTmFtZUNsaWNrIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vblRlbnNvck5hbWVDbGljayhlKX0pKSxPYigxLCJhc3luYyIpLE9iKDIsImFzeW5jIiksT2IoMywiYXN5bmMiKSxPYig0LCJhc3luYyIpLE9iKDUsImFzeW5jIiksUHUoKSksMiZlJiZ2dSgibnVtR3JhcGhFeGVjdXRpb25zIixQYigxLDUsbi5udW1HcmFwaEV4ZWN1dGlvbnMkKSkoImdyYXBoRXhlY3V0aW9uRGF0YSIsUGIoMiw3LG4uZ3JhcGhFeGVjdXRpb25EYXRhJCkpKCJncmFwaEV4ZWN1dGlvbkluZGljZXMiLFBiKDMsOSxuLmdyYXBoRXhlY3V0aW9uSW5kaWNlcyQpKSgiZm9jdXNJbmRleCIsUGIoNCwxMSxuLmZvY3VzSW5kZXgkKSkoImZvY3VzSW5wdXRJbmRpY2VzIixQYig1LDEzLG4uZm9jdXNJbnB1dEluZGljZXMkKSl9LGRpcmVjdGl2ZXM6W0JLXSxwaXBlczpbTXZdLGVuY2Fwc3VsYXRpb246Mn0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoVkssW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoidGYtZGVidWdnZXItdjItZ3JhcGgtZXhlY3V0aW9ucyIsdGVtcGxhdGU6J1xuICAgIDxncmFwaC1leGVjdXRpb25zLWNvbXBvbmVudFxuICAgICAgW251bUdyYXBoRXhlY3V0aW9uc109Im51bUdyYXBoRXhlY3V0aW9ucyQgfCBhc3luYyJcbiAgICAgIFtncmFwaEV4ZWN1dGlvbkRhdGFdPSJncmFwaEV4ZWN1dGlvbkRhdGEkIHwgYXN5bmMiXG4gICAgICBbZ3JhcGhFeGVjdXRpb25JbmRpY2VzXT0iZ3JhcGhFeGVjdXRpb25JbmRpY2VzJCB8IGFzeW5jIlxuICAgICAgW2ZvY3VzSW5kZXhdPSJmb2N1c0luZGV4JCB8IGFzeW5jIlxuICAgICAgW2ZvY3VzSW5wdXRJbmRpY2VzXT0iZm9jdXNJbnB1dEluZGljZXMkIHwgYXN5bmMiXG4gICAgICAob25TY3JvbGxlZEluZGV4Q2hhbmdlKT0ib25TY3JvbGxlZEluZGV4Q2hhbmdlKCRldmVudCkiXG4gICAgICAob25UZW5zb3JOYW1lQ2xpY2spPSJvblRlbnNvck5hbWVDbGljaygkZXZlbnQpIlxuICAgID48L2dyYXBoLWV4ZWN1dGlvbnMtY29tcG9uZW50PlxuICAnfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6RWt9XX0pLG51bGwpO2NvbnN0IGpLPWZ1bmN0aW9uIFVLKCl7cmV0dXJuIHdpbmRvd307ZnVuY3Rpb24gV0sodCl7Y29uc3QgZT1qSygpLnJlcXVpcmU7cmV0dXJuIG5ldyBQcm9taXNlKChuPT57ZSh0LG4pfSkpfWZ1bmN0aW9uIEdLKCl7cmV0dXJuIHJSKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD1qSygpO2lmKHZvaWQgMD09PXQubW9uYWNvKXtpZighdC5yZXF1aXJlKXRocm93IG5ldyBFcnJvcigibG9hZE1vbmFjbygpIGZhaWxlZCBiZWNhdXNlIGZ1bmN0aW9uIHJlcXVpcmUoKSBpcyB1bmF2YWlsYWJsZSIpO3QucmVxdWlyZS5jb25maWcoe3BhdGhzOnt2czoiL3RmLWltcG9ydHMvdnMifX0pLHlpZWxkIFdLKFsidnMvZWRpdG9yL2VkaXRvci5tYWluIl0pLHlpZWxkIFdLKFsidnMvcHl0aG9uL3B5dGhvbi5jb250cmlidXRpb24iXSl9fSkpfWZ1bmN0aW9uIFlLKHQpe3JldHVybiB0PyJ2cy1kYXJrIjoidnMifWNsYXNzIHFLe2NvbnN0cnVjdG9yKHQpe3RoaXMucmVzaXplRXZlbnREZWJvdW5jZVBlcmlvZEluTXM9MTAwLHRoaXMub25SZXNpemU9bmV3IEFiLHRoaXMubmdVbnN1YnNjcmliZSQ9bmV3IHgsdGhpcy5vblJlc2l6ZSQ9bmV3IHg7Y29uc3QgZT1uZXcgUmVzaXplT2JzZXJ2ZXIoKCgpPT57dGhpcy5vblJlc2l6ZSQubmV4dCgpfSkpO2Uub2JzZXJ2ZSh0Lm5hdGl2ZUVsZW1lbnQpLHRoaXMubmdVbnN1YnNjcmliZSQuc3Vic2NyaWJlKCgoKT0+e2UudW5vYnNlcnZlKHQubmF0aXZlRWxlbWVudCl9KSl9bmdPbkluaXQoKXt0aGlzLm9uUmVzaXplJC5waXBlKHJuKDEpLGRlKHRoaXMucmVzaXplRXZlbnREZWJvdW5jZVBlcmlvZEluTXMpLHVuKHRoaXMubmdVbnN1YnNjcmliZSQpKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5vblJlc2l6ZS5lbWl0KCl9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLm5nVW5zdWJzY3JpYmUkLm5leHQoKSx0aGlzLm5nVW5zdWJzY3JpYmUkLmNvbXBsZXRlKCl9fXFLLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxxSykoTXUoY2gpKX0scUsuybVkaXI9Sm8oe3R5cGU6cUssc2VsZWN0b3JzOltbIiIsImRldGVjdFJlc2l6ZSIsIiJdXSxpbnB1dHM6e3Jlc2l6ZUV2ZW50RGVib3VuY2VQZXJpb2RJbk1zOiJyZXNpemVFdmVudERlYm91bmNlUGVyaW9kSW5NcyJ9LG91dHB1dHM6e29uUmVzaXplOiJvblJlc2l6ZSJ9fSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihxSyxbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJbZGV0ZWN0UmVzaXplXSJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpjaH1dfSkse3Jlc2l6ZUV2ZW50RGVib3VuY2VQZXJpb2RJbk1zOlt7dHlwZTp5X31dLG9uUmVzaXplOlt7dHlwZTpfX31dfSk7Y29uc3QgWks9WyJjb2RlVmlld2VyQ29udGFpbmVyIl07Y2xhc3MgWEt7Y29uc3RydWN0b3IoKXt0aGlzLmxpbmVzPW51bGwsdGhpcy5mb2N1c2VkTGluZW5vPW51bGwsdGhpcy5tb25hY289bnVsbCx0aGlzLmVkaXRvcj1udWxsLHRoaXMuZGVjb3JhdGlvbnM9W10sdGhpcy5SRVNJWkVfREVCT1VOQ0VfSU5URVJWQUxfTVM9NTB9b25SZXNpemUoKXt0aGlzLmVkaXRvciYmdGhpcy5lZGl0b3IubGF5b3V0KCl9bmdPbkNoYW5nZXModCl7dmFyIGU7aWYobnVsbD09PXRoaXMubW9uYWNvKXJldHVybjtjb25zdCBuPXQubW9uYWNvJiZudWxsPT09dGhpcy5lZGl0b3I7bnVsbD09PXRoaXMuZWRpdG9yJiYodGhpcy5lZGl0b3I9dGhpcy5tb25hY28uZWRpdG9yLmNyZWF0ZSh0aGlzLmNvZGVWaWV3ZXJDb250YWluZXIubmF0aXZlRWxlbWVudCx7dmFsdWU6KG51bGwhPT0oZT10aGlzLmxpbmVzKSYmdm9pZCAwIT09ZT9lOltdKS5qb2luKCJcbiIpLGxhbmd1YWdlOiJweXRob24iLHJlYWRPbmx5OiEwLGZvbnRTaXplOjEwLG1pbmltYXA6e2VuYWJsZWQ6ITB9LHRoZW1lOllLKHRoaXMudXNlRGFya01vZGUpfSkpLHQubGluZXMmJnRoaXMubGluZXMmJnRoaXMuZWRpdG9yLnNldFZhbHVlKHRoaXMubGluZXMuam9pbigiXG4iKSk7Y29uc3Qgbz1ufHx0LmZvY3VzZWRMaW5lbm8/dGhpcy5mb2N1c2VkTGluZW5vOm51bGw7aWYobyYmdGhpcy5saW5lcyl7dGhpcy5lZGl0b3IucmV2ZWFsTGluZUluQ2VudGVyKG8sdGhpcy5tb25hY28uZWRpdG9yLlNjcm9sbFR5cGUuU21vb3RoKTtjb25zdCB0PXRoaXMubGluZXNbby0xXS5sZW5ndGg7dGhpcy5kZWNvcmF0aW9ucz10aGlzLmVkaXRvci5kZWx0YURlY29yYXRpb25zKHRoaXMuZGVjb3JhdGlvbnMsW3tyYW5nZTpuZXcgdGhpcy5tb25hY28uUmFuZ2UobywxLG8sMSksb3B0aW9uczp7aXNXaG9sZUxpbmU6ITAsbGluZXNEZWNvcmF0aW9uc0NsYXNzTmFtZToiaGlnaGxpZ2h0LWd1dHRlciJ9fSx7cmFuZ2U6bmV3IHRoaXMubW9uYWNvLlJhbmdlKG8sMSxvLHQrMSksb3B0aW9uczp7aW5saW5lQ2xhc3NOYW1lOiJoaWdobGlnaHQtbGluZSJ9fV0pfXQudXNlRGFya01vZGUmJnRoaXMubW9uYWNvLmVkaXRvci5zZXRUaGVtZShZSyh0aGlzLnVzZURhcmtNb2RlKSl9fVhLLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxYSyl9LFhLLsm1Y21wPVVvKHt0eXBlOlhLLHNlbGVjdG9yczpbWyJzb3VyY2UtY29kZS1jb21wb25lbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJldiKFpLLDMsY2gpLDImZSl7bGV0IHQ7VWIodD1ZYigpKSYmKG4uY29kZVZpZXdlckNvbnRhaW5lcj10LmZpcnN0KX19LGlucHV0czp7bGluZXM6ImxpbmVzIixmb2N1c2VkTGluZW5vOiJmb2N1c2VkTGluZW5vIixtb25hY286Im1vbmFjbyIsdXNlRGFya01vZGU6InVzZURhcmtNb2RlIn0sZmVhdHVyZXM6W1NpXSxkZWNsczoyLHZhcnM6MSxjb25zdHM6W1siZGV0ZWN0UmVzaXplIiwiIiwxLCJjb2RlLXZpZXdlci1jb250YWluZXIiLDMsInJlc2l6ZUV2ZW50RGVib3VuY2VQZXJpb2RJbk1zIiwib25SZXNpemUiXSxbImNvZGVWaWV3ZXJDb250YWluZXIiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKE91KDAsImRpdiIsMCwxKSxOdSgib25SZXNpemUiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub25SZXNpemUoKX0pKSxQdSgpKSwyJmUmJnZ1KCJyZXNpemVFdmVudERlYm91bmNlUGVyaW9kSW5NcyIsbi5SRVNJWkVfREVCT1VOQ0VfSU5URVJWQUxfTVMpfSxkaXJlY3RpdmVzOltxS10sc3R5bGVzOlsiLmNvZGUtdmlld2VyLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0ge1xuICBoZWlnaHQ6IDEwMCU7XG59XG5cbltfbmdob3N0LSVDT01QJV0gICAgIC5oaWdobGlnaHQtZ3V0dGVyIHtcbiAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDExMSwgMCwgMC43KTtcbiAgd2lkdGg6IDVweCAhaW1wb3J0YW50O1xufVxuXG5bX25naG9zdC0lQ09NUCVdICAgICAuaGlnaGxpZ2h0LWxpbmUge1xuICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMTExLCAwLCAwLjMpO1xufSJdLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihYSyxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJzb3VyY2UtY29kZS1jb21wb25lbnQiLHRlbXBsYXRlVXJsOiIuL3NvdXJjZV9jb2RlX2NvbXBvbmVudC5uZy5odG1sIixzdHlsZVVybHM6WyIuL3NvdXJjZV9jb2RlX2NvbXBvbmVudC5jc3MiXSxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSxudWxsLHtsaW5lczpbe3R5cGU6eV99XSxmb2N1c2VkTGluZW5vOlt7dHlwZTp5X31dLG1vbmFjbzpbe3R5cGU6eV99XSx1c2VEYXJrTW9kZTpbe3R5cGU6eV99XSxjb2RlVmlld2VyQ29udGFpbmVyOlt7dHlwZTpGcixhcmdzOlsiY29kZVZpZXdlckNvbnRhaW5lciIse3N0YXRpYzohMCxyZWFkOmNofV19XX0pO2NsYXNzIEtLe2NvbnN0cnVjdG9yKCl7dGhpcy5saW5lcz1udWxsLHRoaXMuZm9jdXNlZExpbmVubz1udWxsLHRoaXMudXNlRGFya01vZGU9ITEsdGhpcy5tb25hY28kPW51bGx9bmdPbkluaXQoKXt0aGlzLm1vbmFjbyQ9UnQoR0soKSkucGlwZShodCgoKCk9PndpbmRvdy5tb25hY28pKSl9fWZ1bmN0aW9uIEpLKHQsZSl7aWYoMSZ0JiYoT3UoMCwiZGl2Iiw2KSxNZigxKSxQdSgpKSwyJnQpe2NvbnN0IHQ9THUoKTtKYygxKSx4ZigiICIsdC5mb2N1c2VkU291cmNlTGluZVNwZWMuZmlsZV9wYXRoLCIgIil9fWZ1bmN0aW9uIFFLKHQsZSl7MSZ0JiYoT3UoMCwiZGl2Iiw3KSxNZigxLCIgTm8gZmlsZSBzZWxlY3RlZC4gQ2xpY2sgYSBsaW5lIG51bWJlciBpbiB0aGUgU3RhY2sgVHJhY2Ugc2VjdGlvbiB0byBzaG93IHRoZSBzb3VyY2UgY29kZS4gIiksUHUoKSl9ZnVuY3Rpb24gJEsodCxlKXtpZigxJnQmJnd1KDAsInNvdXJjZS1jb2RlIiw4KSwyJnQpe2NvbnN0IHQ9THUoKTt2dSgibGluZXMiLHQuZm9jdXNlZFNvdXJjZUZpbGVDb250ZW50LmxpbmVzKSgiZm9jdXNlZExpbmVubyIsdC5mb2N1c2VkU291cmNlTGluZVNwZWMubGluZW5vKSgidXNlRGFya01vZGUiLHQudXNlRGFya01vZGUpfX1LSy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8S0spfSxLSy7JtWNtcD1Vbyh7dHlwZTpLSyxzZWxlY3RvcnM6W1sic291cmNlLWNvZGUiXV0saW5wdXRzOntsaW5lczoibGluZXMiLGZvY3VzZWRMaW5lbm86ImZvY3VzZWRMaW5lbm8iLHVzZURhcmtNb2RlOiJ1c2VEYXJrTW9kZSJ9LGRlY2xzOjIsdmFyczo2LGNvbnN0czpbWzMsImxpbmVzIiwiZm9jdXNlZExpbmVubyIsIm1vbmFjbyIsInVzZURhcmtNb2RlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJih3dSgwLCJzb3VyY2UtY29kZS1jb21wb25lbnQiLDApLE9iKDEsImFzeW5jIikpLDImZSYmdnUoImxpbmVzIixuLmxpbmVzKSgiZm9jdXNlZExpbmVubyIsbi5mb2N1c2VkTGluZW5vKSgibW9uYWNvIixQYigxLDQsbi5tb25hY28kKSkoInVzZURhcmtNb2RlIixuLnVzZURhcmtNb2RlKX0sZGlyZWN0aXZlczpbWEtdLHBpcGVzOltNdl0sZW5jYXBzdWxhdGlvbjoyfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihLSyxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJzb3VyY2UtY29kZSIsdGVtcGxhdGU6J1xuICAgIDxzb3VyY2UtY29kZS1jb21wb25lbnRcbiAgICAgIFtsaW5lc109ImxpbmVzIlxuICAgICAgW2ZvY3VzZWRMaW5lbm9dPSJmb2N1c2VkTGluZW5vIlxuICAgICAgW21vbmFjb109Im1vbmFjbyQgfCBhc3luYyJcbiAgICAgIFt1c2VEYXJrTW9kZV09InVzZURhcmtNb2RlIlxuICAgID48L3NvdXJjZS1jb2RlLWNvbXBvbmVudD5cbiAgJ31dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW119KSx7bGluZXM6W3t0eXBlOnlffV0sZm9jdXNlZExpbmVubzpbe3R5cGU6eV99XSx1c2VEYXJrTW9kZTpbe3R5cGU6eV99XX0pO2NsYXNzIHRKe2NvbnN0cnVjdG9yKCl7dGhpcy5mb2N1c2VkU291cmNlRmlsZUNvbnRlbnQ9bnVsbCx0aGlzLmZvY3VzZWRTb3VyY2VMaW5lU3BlYz1udWxsfX10Si7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8dEopfSx0Si7JtWNtcD1Vbyh7dHlwZTp0SixzZWxlY3RvcnM6W1sic291cmNlLWZpbGVzLWNvbXBvbmVudCJdXSxpbnB1dHM6e2ZvY3VzZWRTb3VyY2VGaWxlQ29udGVudDoiZm9jdXNlZFNvdXJjZUZpbGVDb250ZW50Iixmb2N1c2VkU291cmNlTGluZVNwZWM6ImZvY3VzZWRTb3VyY2VMaW5lU3BlYyIsdXNlRGFya01vZGU6InVzZURhcmtNb2RlIn0sZGVjbHM6OCx2YXJzOjMsY29uc3RzOltbMSwic291cmNlLWZpbGVzLWNvbnRhaW5lciJdLFsxLCJoZWFkZXItc2VjdGlvbiJdLFsxLCJ0aXRsZS10YWciXSxbImNsYXNzIiwiZmlsZS1sYWJlbCIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJub0ZpbGVTZWxlY3RlZCIsIiJdLFszLCJsaW5lcyIsImZvY3VzZWRMaW5lbm8iLCJ1c2VEYXJrTW9kZSIsNCwibmdJZiJdLFsxLCJmaWxlLWxhYmVsIl0sWzEsIm5vLWZpbGUtc2VsZWN0ZWQiXSxbMywibGluZXMiLCJmb2N1c2VkTGluZW5vIiwidXNlRGFya01vZGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pe2lmKDEmZSYmKE91KDAsImRpdiIsMCksT3UoMSwiZGl2IiwxKSxPdSgyLCJkaXYiLDIpLE1mKDMsIlNvdXJjZSBDb2RlIiksUHUoKSxXbSg0LEpLLDIsMSwiZGl2IiwzKSxXbSg1LFFLLDIsMCwibmctdGVtcGxhdGUiLG51bGwsNCxLYiksUHUoKSxXbSg3LCRLLDEsMywic291cmNlLWNvZGUiLDUpLFB1KCkpLDImZSl7Y29uc3QgdD1HbSg2KTtKYyg0KSx2dSgibmdJZiIsbnVsbCE9PW4uZm9jdXNlZFNvdXJjZUxpbmVTcGVjKSgibmdJZkVsc2UiLHQpLEpjKDMpLHZ1KCJuZ0lmIixudWxsIT09bi5mb2N1c2VkU291cmNlRmlsZUNvbnRlbnQmJm51bGwhPT1uLmZvY3VzZWRTb3VyY2VMaW5lU3BlYyYmbnVsbCE9PW4uZm9jdXNlZFNvdXJjZUZpbGVDb250ZW50LmxpbmVzKX19LGRpcmVjdGl2ZXM6W2F2LEtLXSxzdHlsZXM6WycubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1iYWRnZS1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo5cHh9Lm1hdC1iYWRnZS1sYXJnZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4fS5tYXQtaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWhlYWRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAyNHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE1cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjgzKS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1oNltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC42NykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtYm9keS1zdHJvbmdbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MCAwIDEycHh9Lm1hdC1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FwdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTJweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6MzAwIDExMnB4LzExMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wNWVtO21hcmdpbjowIDAgNTZweH0ubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNTZweC81NnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMmVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNDVweC80OHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMDVlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDM0cHgvNDBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1yYWlzZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3Ryb2tlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZsYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mYWJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW1pbmktZmFiW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtYnV0dG9uLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FyZC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjBweH0ubWF0LWNhcmQtc3VidGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hlY2tib3gtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC10cmFpbGluZy1pY29uLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC1yZW1vdmUubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxOHB4fS5tYXQtdGFibGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWhlYWRlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb290ZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jYWxlbmRhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FsZW5kYXItYm9keVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYWxlbmRhci1wZXJpb2QtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWRpYWxvZy10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTI1O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTUwJTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjVlbTt3aWR0aDoxLjVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW07bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41ZW0gMDtib3JkZXItdG9wOi44NDM3NWVtIHNvbGlkIHRyYW5zcGFyZW50fS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3RvcDotMC44NDM3NWVtO3BhZGRpbmctdG9wOi44NDM3NWVtfS5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjc1JTttYXJnaW4tdG9wOi42NjY2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNzkxNjY2NjY2N2VtKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAycHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyM2VtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzUzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi41NDE2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNjY2NjY2NjY2N2VtKX1AbWVkaWEgcHJpbnR7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIyZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIxZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMmVtKSBzY2FsZSgwLjc1KX19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjI1ZW0gMCAuNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4wOTM3NWVtO21hcmdpbi10b3A6LTAuNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MWVtIDAgMWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjg0Mzc1ZW07bWFyZ2luLXRvcDotMC4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH1pbnB1dC5tYXQtaW5wdXQtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDotMC4wNjI1ZW19Lm1hdC1tZW51LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1wYWdpbmF0b3JbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXBhZ2luYXRvci1wYWdlLXNpemVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3RbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXN0ZXBwZXItdmVydGljYWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc3RlcC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0Om5vcm1hbH0ubWF0LXN0ZXAtbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRhYi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjB9Lm1hdC10b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTZweH0ubWF0LW9wdGdyb3VwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LXNpbXBsZS1zbmFja2Jhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbltfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRyZWVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbmVzdGVkLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4fS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVdOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtcmlwcGxlLm1hdC1yaXBwbGUtdW5ib3VuZGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6NTAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7dHJhbnNmb3JtOnNjYWxlKDApfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpub25lfS5jZGstdmlzdWFsbHktaGlkZGVuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7bGVmdDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmVtcHR5e2Rpc3BsYXk6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LXBhbmVbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOmF1dG87Ym94LXNpemluZzpib3JkZXItYm94O3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7bWF4LXdpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlfS5jZGstb3ZlcmxheS1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKTtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5Oi42fS5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjMyKX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTowfS5jZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO292ZXJmbG93LXk6c2Nyb2xsfUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnR7fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5ke30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxse2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCAwcyAxbXN9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06bm90KDotd2Via2l0LWF1dG9maWxsKXthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIDBzIDFtc310ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemVbX25nY29udGVudC0lQ09NUCVde3Jlc2l6ZTpub25lfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmdbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OmF1dG8gIWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW4gIWltcG9ydGFudH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nLWZpcmVmb3hbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OjAgIWltcG9ydGFudH0ubWF0LWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0uaGVhZGVyLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7ZGlzcGxheTpmbGV4O2hlaWdodDoyNHB4O3BhZGRpbmctYm90dG9tOjZweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2hpdGUtc3BhY2U6bm93cmFwO3dpZHRoOjEwMCV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmhlYWRlci1zZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmhlYWRlci1zZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fS5maWxlLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXdlaWdodDpub3JtYWw7d2hpdGUtc3BhY2U6bm9ybWFsO292ZXJmbG93LXdyYXA6YW55d2hlcmU7b3ZlcmZsb3cteTphdXRvO3BhZGRpbmc6MCAyMHB4fS5uby1maWxlLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9jaztjb2xvcjojNjY2O3BhZGRpbmc6MCAyMHB4O3doaXRlLXNwYWNlOm5vcm1hbH0uc291cmNlLWZpbGVzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmb250LWZhbWlseToiUm9ib3RvIE1vbm8iLG1vbm9zcGFjZTtmb250LXNpemU6MTBweDtoZWlnaHQ6MTAwJX0udGl0bGUtdGFnW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXdlaWdodDpib2xkO2hlaWdodDoxMDAlO3BhZGRpbmctbGVmdDo2cHg7dmVydGljYWwtYWxpZ246dG9wfXNvdXJjZS1jb2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4LWdyb3c6MTt3aWR0aDoxMDAlfSddfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYih0Sixbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJzb3VyY2UtZmlsZXMtY29tcG9uZW50Iix0ZW1wbGF0ZVVybDoiLi9zb3VyY2VfZmlsZXNfY29tcG9uZW50Lm5nLmh0bWwiLHN0eWxlVXJsczpbIi4vc291cmNlX2ZpbGVzX2NvbXBvbmVudC5jc3MiXX1dfV0sbnVsbCx7Zm9jdXNlZFNvdXJjZUZpbGVDb250ZW50Olt7dHlwZTp5X31dLGZvY3VzZWRTb3VyY2VMaW5lU3BlYzpbe3R5cGU6eV99XSx1c2VEYXJrTW9kZTpbe3R5cGU6eV99XX0pO2NsYXNzIGVKe2NvbnN0cnVjdG9yKHQpe3RoaXMuc3RvcmU9dCx0aGlzLmZvY3VzZWRTb3VyY2VGaWxlQ29udGVudCQ9dGhpcy5zdG9yZS5zZWxlY3QoY1gpLHRoaXMuZm9jdXNlZFNvdXJjZUxpbmVTcGVjJD10aGlzLnN0b3JlLnNlbGVjdChkWCksdGhpcy51c2VEYXJrTW9kZSQ9dGhpcy5zdG9yZS5zZWxlY3QoTUUpfX1lSi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8ZUopKE11KEVrKSl9LGVKLsm1Y21wPVVvKHt0eXBlOmVKLHNlbGVjdG9yczpbWyJ0Zi1kZWJ1Z2dlci12Mi1zb3VyY2UtZmlsZXMiXV0sZGVjbHM6NCx2YXJzOjksY29uc3RzOltbMywiZm9jdXNlZFNvdXJjZUZpbGVDb250ZW50IiwiZm9jdXNlZFNvdXJjZUxpbmVTcGVjIiwidXNlRGFya01vZGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKHd1KDAsInNvdXJjZS1maWxlcy1jb21wb25lbnQiLDApLE9iKDEsImFzeW5jIiksT2IoMiwiYXN5bmMiKSxPYigzLCJhc3luYyIpKSwyJmUmJnZ1KCJmb2N1c2VkU291cmNlRmlsZUNvbnRlbnQiLFBiKDEsMyxuLmZvY3VzZWRTb3VyY2VGaWxlQ29udGVudCQpKSgiZm9jdXNlZFNvdXJjZUxpbmVTcGVjIixQYigyLDUsbi5mb2N1c2VkU291cmNlTGluZVNwZWMkKSkoInVzZURhcmtNb2RlIixQYigzLDcsbi51c2VEYXJrTW9kZSQpKX0sZGlyZWN0aXZlczpbdEpdLHBpcGVzOltNdl0sZW5jYXBzdWxhdGlvbjoyfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihlSixbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJ0Zi1kZWJ1Z2dlci12Mi1zb3VyY2UtZmlsZXMiLHRlbXBsYXRlOidcbiAgICA8c291cmNlLWZpbGVzLWNvbXBvbmVudFxuICAgICAgW2ZvY3VzZWRTb3VyY2VGaWxlQ29udGVudF09ImZvY3VzZWRTb3VyY2VGaWxlQ29udGVudCQgfCBhc3luYyJcbiAgICAgIFtmb2N1c2VkU291cmNlTGluZVNwZWNdPSJmb2N1c2VkU291cmNlTGluZVNwZWMkIHwgYXN5bmMiXG4gICAgICBbdXNlRGFya01vZGVdPSJ1c2VEYXJrTW9kZSQgfCBhc3luYyJcbiAgICA+PC9zb3VyY2UtZmlsZXMtY29tcG9uZW50PlxuICAnfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6RWt9XX0pLG51bGwpO2NvbnN0IG5KPVsic3RhY2tGcmFtZUFycmF5Il07ZnVuY3Rpb24gb0oodCxlKXtpZigxJnQmJihPdSgwLCJzcGFuIiwxMyksTWYoMSksUHUoKSksMiZ0KXtjb25zdCB0PUx1KDMpO0pjKDEpLHhmKCIgIyIsdC5leGVjdXRpb25JbmRleCwiOiAiKX19ZnVuY3Rpb24gaUoodCxlKXtpZigxJnQmJihPdSgwLCJzcGFuIiwxNCksTWYoMSksUHUoKSksMiZ0KXtjb25zdCB0PUx1KDMpO0pjKDEpLHhmKCIgIix0Lm9wVHlwZSwiICIpfX1mdW5jdGlvbiBhSih0LGUpe2lmKDEmdCYmKE91KDAsImRpdiIpLE1mKDEsIiBFYWdlciBleGVjdXRpb24gIiksV20oMixvSiwyLDEsInNwYW4iLDExKSxXbSgzLGlKLDIsMSwic3BhbiIsMTIpLFB1KCkpLDImdCl7Y29uc3QgdD1MdSgyKTtKYygyKSx2dSgibmdJZiIsbnVsbCE9PXQub3BUeXBlKSxKYygxKSx2dSgibmdJZiIsbnVsbCE9PXQub3BUeXBlKX19ZnVuY3Rpb24gckoodCxlKXtpZigxJnQmJihPdSgwLCJzcGFuIiwxNiksTWYoMSksUHUoKSksMiZ0KXtjb25zdCB0PUx1KDMpO0pjKDEpLHhmKCcgIicsdC5vcE5hbWUsJyIgJyl9fWZ1bmN0aW9uIHNKKHQsZSl7aWYoMSZ0JiYoT3UoMCwic3BhbiIsMTQpLE1mKDEpLFB1KCkpLDImdCl7Y29uc3QgdD1MdSgzKTtKYygxKSx4ZigiICIsdC5vcFR5cGUsIiAiKX19ZnVuY3Rpb24gbEoodCxlKXtpZigxJnQmJihPdSgwLCJkaXYiKSxNZigxLCIgQ3JlYXRpb24gb2YgZ3JhcGggb3AgIiksV20oMixySiwyLDEsInNwYW4iLDE1KSxXbSgzLHNKLDIsMSwic3BhbiIsMTIpLFB1KCkpLDImdCl7Y29uc3QgdD1MdSgyKTtKYygyKSx2dSgibmdJZiIsbnVsbCE9PXQub3BOYW1lKSxKYygxKSx2dSgibmdJZiIsbnVsbCE9PXQub3BUeXBlKX19ZnVuY3Rpb24gY0oodCxlKXtpZigxJnQmJihPdSgwLCJzcGFuIiwxNyksTWYoMSksUHUoKSksMiZ0KXtjb25zdCB0PUx1KDIpO0pjKDEpLHhmKCIgKEhvc3QgbmFtZTogIix0LnN0YWNrRnJhbWVzRm9yRGlzcGxheVswXS5ob3N0X25hbWUsIikgIil9fWZ1bmN0aW9uIGRKKHQsZSl7aWYoMSZ0JiYoT3UoMCwiZGl2Iiw3KSxPdSgxLCJzcGFuIiksT3UoMiwic3BhbiIsOCksV20oMyxhSiw0LDIsImRpdiIsOSksV20oNCxsSiw0LDIsImRpdiIsOSksUHUoKSxQdSgpLE91KDUsImRpdiIpLFdtKDYsY0osMiwxLCJzcGFuIiwxMCksUHUoKSxQdSgpKSwyJnQpe2NvbnN0IHQ9THUoKTtKYygyKSx2dSgibmdTd2l0Y2giLHQuY29kZUxvY2F0aW9uVHlwZSksSmMoMSksdnUoIm5nU3dpdGNoQ2FzZSIsdC5Db2RlTG9jYXRpb25UeXBlLkVYRUNVVElPTiksSmMoMSksdnUoIm5nU3dpdGNoQ2FzZSIsdC5Db2RlTG9jYXRpb25UeXBlLkdSQVBIX09QX0NSRUFUSU9OKSxKYygyKSx2dSgibmdJZiIsbnVsbCE9PXQuc3RhY2tGcmFtZXNGb3JEaXNwbGF5JiZ0LnN0YWNrRnJhbWVzRm9yRGlzcGxheS5sZW5ndGg+MCl9fWZ1bmN0aW9uIHBKKHQsZSl7MSZ0JiYoT3UoMCwiZGl2IiwxOCksTWYoMSwiIENsaWNrIGFuIGVhZ2VyIGV4ZWN1dGlvbiBvciBncmFwaCBvcCB0byBzaG93IGl0cyBvcmlnaW5hbCBzdGFjayB0cmFjZS4gIiksUHUoKSl9ZnVuY3Rpb24gbUoodCxlKXsxJnQmJihPdSgwLCJkaXYiLDI4KSxNZigxLCIg4qSTICIpLFB1KCkpfWNvbnN0IHVKPWZ1bmN0aW9uKHQsZSl7cmV0dXJuW3QsZV19O2Z1bmN0aW9uIGZKKHQsZSl7aWYoMSZ0KXtjb25zdCB0PUV1KCk7T3UoMCwiZGl2IiwyMiksT3UoMSwiZGl2IiwyMyksTWYoMiksUHUoKSxPdSgzLCJkaXYiLDI0KSxXbSg0LG1KLDIsMCwiZGl2IiwyNSksT3UoNSwiZGl2IiwyNiksTnUoImNsaWNrIiwoZnVuY3Rpb24gbigpe3JhKHQpO2NvbnN0IG89ZS4kaW1wbGljaXQ7cmV0dXJuIEx1KDIpLm9uU291cmNlTGluZUNsaWNrZWQuZW1pdChvKX0pKSxNZig2KSxQdSgpLE91KDcsImRpdiIsMjcpLE1mKDgpLFB1KCksUHUoKSxQdSgpfWlmKDImdCl7Y29uc3QgdD1lLiRpbXBsaWNpdCxuPUx1KDIpO3Z1KCJuZ0NsYXNzIixoYig2LHVKLHQuYmVsb25nc1RvRm9jdXNlZEZpbGU/ImZvY3VzZWQtZmlsZSI6IiIsdC5mb2N1c2VkPyJmb2N1c2VkLXN0YWNrLWZyYW1lIjoiIikpLEpjKDEpLFV1KCJ0aXRsZSIsdC5maWxlX3BhdGgpLEpjKDEpLHhmKCIgIix0LmNvbmNpc2VfZmlsZV9wYXRoLCIgIiksSmMoMiksdnUoIm5nSWYiLG4uc3RpY2tUb0JvdHRvbW1vc3RGcmFtZUluRm9jdXNlZEZpbGUmJnQuZm9jdXNlZCksSmMoMikseGYoIiBMaW5lICIsdC5saW5lbm8sIiAiKSxKYygyKSx4ZigiICIsdC5mdW5jdGlvbl9uYW1lLCIgIil9fWZ1bmN0aW9uIGdKKHQsZSl7aWYoMSZ0JiYoT3UoMCwiZGl2IiwxOSwyMCksV20oMixmSiw5LDksImRpdiIsMjEpLFB1KCkpLDImdCl7Y29uc3QgdD1MdSgpO0pjKDIpLHZ1KCJuZ0Zvck9mIix0LnN0YWNrRnJhbWVzRm9yRGlzcGxheSl9fWZ1bmN0aW9uIGhKKHQsZSl7fWNsYXNzIGJKe2NvbnN0cnVjdG9yKCl7dGhpcy5zdGFja0ZyYW1lc0ZvckRpc3BsYXk9bnVsbCx0aGlzLm9uU291cmNlTGluZUNsaWNrZWQ9bmV3IEFiLHRoaXMuQ29kZUxvY2F0aW9uVHlwZT1hWn1uZ0FmdGVyVmlld0NoZWNrZWQoKXtpZih2b2lkIDA9PT10aGlzLnN0YWNrRnJhbWVBcnJheSlyZXR1cm47Y29uc3QgdD10aGlzLnN0YWNrRnJhbWVBcnJheS5uYXRpdmVFbGVtZW50LGU9dC5xdWVyeVNlbGVjdG9yKCIuZm9jdXNlZC1zdGFjay1mcmFtZSIpO2lmKG51bGwhPT1lKXJldHVybiB2b2lkIHRoaXMuc2Nyb2xsVG9FbGVtZW50KHQsZSk7Y29uc3Qgbj10LnF1ZXJ5U2VsZWN0b3IoIi5zdGFjay1mcmFtZS1jb250YWluZXI6bGFzdC1jaGlsZCIpO251bGwhPT1uJiZ0aGlzLnNjcm9sbFRvRWxlbWVudCh0LG4pfXNjcm9sbFRvRWxlbWVudCh0LGUpe3Quc2Nyb2xsVG9wPWUub2Zmc2V0VG9wfX1iSi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8YkopfSxiSi7JtWNtcD1Vbyh7dHlwZTpiSixzZWxlY3RvcnM6W1sic3RhY2stdHJhY2UtY29tcG9uZW50Il1dLHZpZXdRdWVyeTpmdW5jdGlvbiB0KGUsbil7aWYoMSZlJiZXYihuSiwxKSwyJmUpe2xldCB0O1ViKHQ9WWIoKSkmJihuLnN0YWNrRnJhbWVBcnJheT10LmZpcnN0KX19LGlucHV0czp7Y29kZUxvY2F0aW9uVHlwZToiY29kZUxvY2F0aW9uVHlwZSIsb3BUeXBlOiJvcFR5cGUiLG9wTmFtZToib3BOYW1lIixleGVjdXRpb25JbmRleDoiZXhlY3V0aW9uSW5kZXgiLHN0aWNrVG9Cb3R0b21tb3N0RnJhbWVJbkZvY3VzZWRGaWxlOiJzdGlja1RvQm90dG9tbW9zdEZyYW1lSW5Gb2N1c2VkRmlsZSIsc3RhY2tGcmFtZXNGb3JEaXNwbGF5OiJzdGFja0ZyYW1lc0ZvckRpc3BsYXkifSxvdXRwdXRzOntvblNvdXJjZUxpbmVDbGlja2VkOiJvblNvdXJjZUxpbmVDbGlja2VkIn0sZGVjbHM6MTAsdmFyczo0LGNvbnN0czpbWzEsInN0YWNrLXRyYWNlLWNvbnRhaW5lciJdLFsxLCJzdGFjay10cmFjZS1oZWFkZXIiXSxbMSwic3RhY2stdHJhY2UtdGl0bGUiXSxbImNsYXNzIiwic3RhY2stdHJhY2UtYXV4LWluZm8iLDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsibm9TdGFja1RyYWNlIiwiIl0sWyJjbGFzcyIsInN0YWNrLWZyYW1lLWFycmF5Iiw0LCJuZ0lmIiwibmdJZkVsc2UiXSxbImxvYWRpbmdTZWN0aW9uIiwiIl0sWzEsInN0YWNrLXRyYWNlLWF1eC1pbmZvIl0sWzEsImNvZGUtbG9jYXRpb24tb3JpZ2luIiwzLCJuZ1N3aXRjaCJdLFs0LCJuZ1N3aXRjaENhc2UiXSxbImNsYXNzIiwic3RhY2stdHJhY2UtaG9zdC1uYW1lIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImVhZ2VyLWV4ZWN1dGlvbi1pbmRleCIsNCwibmdJZiJdLFsiY2xhc3MiLCJvcC10eXBlIiw0LCJuZ0lmIl0sWzEsImVhZ2VyLWV4ZWN1dGlvbi1pbmRleCJdLFsxLCJvcC10eXBlIl0sWyJjbGFzcyIsIm9wLW5hbWUiLDQsIm5nSWYiXSxbMSwib3AtbmFtZSJdLFsxLCJzdGFjay10cmFjZS1ob3N0LW5hbWUiXSxbMSwic3RhY2stdHJhY2UtYXV4LWluZm8iLCJuby1zdGFjay10cmFjZSJdLFsxLCJzdGFjay1mcmFtZS1hcnJheSJdLFsic3RhY2tGcmFtZUFycmF5IiwiIl0sWyJjbGFzcyIsInN0YWNrLWZyYW1lLWNvbnRhaW5lciIsMywibmdDbGFzcyIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsInN0YWNrLWZyYW1lLWNvbnRhaW5lciIsMywibmdDbGFzcyJdLFsxLCJzdGFjay1mcmFtZS1maWxlLXBhdGgiLDMsInRpdGxlIl0sWzEsInN0YWNrLWZyYW1lLWxpbmVuby1mdW5jdGlvbiJdLFsiY2xhc3MiLCJzdGljay10by1ib3R0b21tb3N0LWluZGljYXRvciIsInRpdGxlIiwiU3RpY2tpbmcgdG8gdGhlIGJvdHRvbW1vc3QgZnJhbWUgaW4gdGhlIGN1cnJlbnQgc291cmNlIGZpbGUgd2hlbiBuYXZpZ2F0aW5nIGV4ZWN1dGlvbnMgYW5kIGdyYXBoIG9wcy4gVG8gcmVtb3ZlIHRoaXMgc3RpY2tpbmcsIGNsaWNrIGFueSBub24tYm90dG9tbW9zdCBzdGFjayBmcmFtZS4iLDQsIm5nSWYiXSxbMSwic3RhY2stZnJhbWUtbGluZW5vIiwzLCJjbGljayJdLFsxLCJzdGFjay1mcmFtZS1mdW5jdGlvbiJdLFsidGl0bGUiLCJTdGlja2luZyB0byB0aGUgYm90dG9tbW9zdCBmcmFtZSBpbiB0aGUgY3VycmVudCBzb3VyY2UgZmlsZSB3aGVuIG5hdmlnYXRpbmcgZXhlY3V0aW9ucyBhbmQgZ3JhcGggb3BzLiBUbyByZW1vdmUgdGhpcyBzdGlja2luZywgY2xpY2sgYW55IG5vbi1ib3R0b21tb3N0IHN0YWNrIGZyYW1lLiIsMSwic3RpY2stdG8tYm90dG9tbW9zdC1pbmRpY2F0b3IiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pe2lmKDEmZSYmKE91KDAsImRpdiIsMCksT3UoMSwiZGl2IiwxKSxPdSgyLCJzcGFuIiwyKSxNZigzLCIgU3RhY2sgVHJhY2UgIiksUHUoKSxXbSg0LGRKLDcsNCwiZGl2IiwzKSxXbSg1LHBKLDIsMCwibmctdGVtcGxhdGUiLG51bGwsNCxLYiksUHUoKSxXbSg3LGdKLDMsMSwiZGl2Iiw1KSxXbSg4LGhKLDAsMCwibmctdGVtcGxhdGUiLG51bGwsNixLYiksUHUoKSksMiZlKXtjb25zdCB0PUdtKDYpLGU9R20oOSk7SmMoNCksdnUoIm5nSWYiLG51bGwhPT1uLmNvZGVMb2NhdGlvblR5cGUpKCJuZ0lmRWxzZSIsdCksSmMoMyksdnUoIm5nSWYiLG51bGwhPT1uLnN0YWNrRnJhbWVzRm9yRGlzcGxheSkoIm5nSWZFbHNlIixlKX19LGRpcmVjdGl2ZXM6W2F2LGN2LGR2LG92LHR2XSxzdHlsZXM6WycubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1iYWRnZS1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo5cHh9Lm1hdC1iYWRnZS1sYXJnZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4fS5tYXQtaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWhlYWRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAyNHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE1cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjgzKS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1oNltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC42NykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtYm9keS1zdHJvbmdbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MCAwIDEycHh9Lm1hdC1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FwdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTJweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6MzAwIDExMnB4LzExMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wNWVtO21hcmdpbjowIDAgNTZweH0ubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNTZweC81NnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMmVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNDVweC80OHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMDVlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDM0cHgvNDBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1yYWlzZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3Ryb2tlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZsYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mYWJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW1pbmktZmFiW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtYnV0dG9uLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FyZC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjBweH0ubWF0LWNhcmQtc3VidGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hlY2tib3gtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC10cmFpbGluZy1pY29uLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC1yZW1vdmUubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxOHB4fS5tYXQtdGFibGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWhlYWRlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb290ZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jYWxlbmRhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FsZW5kYXItYm9keVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYWxlbmRhci1wZXJpb2QtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWRpYWxvZy10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTI1O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTUwJTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjVlbTt3aWR0aDoxLjVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW07bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41ZW0gMDtib3JkZXItdG9wOi44NDM3NWVtIHNvbGlkIHRyYW5zcGFyZW50fS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3RvcDotMC44NDM3NWVtO3BhZGRpbmctdG9wOi44NDM3NWVtfS5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjc1JTttYXJnaW4tdG9wOi42NjY2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNzkxNjY2NjY2N2VtKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAycHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyM2VtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzUzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi41NDE2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNjY2NjY2NjY2N2VtKX1AbWVkaWEgcHJpbnR7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIyZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIxZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMmVtKSBzY2FsZSgwLjc1KX19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjI1ZW0gMCAuNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4wOTM3NWVtO21hcmdpbi10b3A6LTAuNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MWVtIDAgMWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjg0Mzc1ZW07bWFyZ2luLXRvcDotMC4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH1pbnB1dC5tYXQtaW5wdXQtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDotMC4wNjI1ZW19Lm1hdC1tZW51LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1wYWdpbmF0b3JbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXBhZ2luYXRvci1wYWdlLXNpemVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3RbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXN0ZXBwZXItdmVydGljYWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc3RlcC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0Om5vcm1hbH0ubWF0LXN0ZXAtbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRhYi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjB9Lm1hdC10b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTZweH0ubWF0LW9wdGdyb3VwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LXNpbXBsZS1zbmFja2Jhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbltfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRyZWVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbmVzdGVkLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4fS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVdOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtcmlwcGxlLm1hdC1yaXBwbGUtdW5ib3VuZGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6NTAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7dHJhbnNmb3JtOnNjYWxlKDApfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpub25lfS5jZGstdmlzdWFsbHktaGlkZGVuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7bGVmdDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmVtcHR5e2Rpc3BsYXk6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LXBhbmVbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOmF1dG87Ym94LXNpemluZzpib3JkZXItYm94O3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7bWF4LXdpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlfS5jZGstb3ZlcmxheS1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKTtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5Oi42fS5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjMyKX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTowfS5jZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO292ZXJmbG93LXk6c2Nyb2xsfUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnR7fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5ke30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxse2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCAwcyAxbXN9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06bm90KDotd2Via2l0LWF1dG9maWxsKXthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIDBzIDFtc310ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemVbX25nY29udGVudC0lQ09NUCVde3Jlc2l6ZTpub25lfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmdbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OmF1dG8gIWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW4gIWltcG9ydGFudH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nLWZpcmVmb3hbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OjAgIWltcG9ydGFudH0ubWF0LWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0uZm9jdXNlZC1maWxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDpib2xkfS5mb2N1c2VkLXN0YWNrLWZyYW1lW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDExMSwwLC4zKX0ubm8tc3RhY2stdHJhY2VbX25nY29udGVudC0lQ09NUCVde2NvbG9yOmdyYXl9Lm9wLW5hbWVbX25nY29udGVudC0lQ09NUCVde3dvcmQtd3JhcDphbnl3aGVyZX0ub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZWNlZmYxO2JvcmRlcjoxcHggc29saWQgI2ViZWJlYjtib3JkZXItcmFkaXVzOjRweDtmb250LWZhbWlseToiUm9ib3RvIE1vbm8iLG1vbm9zcGFjZTtmb250LXNpemU6MTBweDtoZWlnaHQ6MTRweDtsaW5lLWhlaWdodDoxNHB4O3BhZGRpbmc6MXB4IDNweDt3aWR0aDptYXgtY29udGVudH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5vcC10eXBlW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MXB4IHNvbGlkICM1NTV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojNDU1YTY0fS5zdGFjay1mcmFtZS1hcnJheVtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3cteDpoaWRkZW47b3ZlcmZsb3cteTphdXRvO3dpZHRoOmNhbGMoMTAwJSAtIDhweCl9LnN0YWNrLWZyYW1lLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2EwYTBhMH0uc3RhY2stZnJhbWUtZmlsZS1wYXRoW19uZ2NvbnRlbnQtJUNPTVAlXXttYXgtd2lkdGg6MTgwcHg7d2lkdGg6MTgwcHh9LnN0YWNrLWZyYW1lLWxpbmVuby1mdW5jdGlvbltfbmdjb250ZW50LSVDT01QJV17dGV4dC1hbGlnbjpyaWdodDt3aGl0ZS1zcGFjZTpub3dyYXB9LnN0YWNrLWZyYW1lLWZ1bmN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9jazttYXgtd2lkdGg6MjAwcHg7cGFkZGluZy1sZWZ0OjEwcHg7dGV4dC1hbGlnbjpsZWZ0O3doaXRlLXNwYWNlOm5vcm1hbDt3aWR0aDoyMDBweDt3b3JkLXdyYXA6YW55d2hlcmV9LnN0YWNrLWZyYW1lLWxpbmVub1tfbmdjb250ZW50LSVDT01QJV17Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWF4LXdpZHRoOjgwcHg7dGV4dC1hbGlnbjpsZWZ0O3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7d2lkdGg6ODBweH0uc3RhY2stdHJhY2UtYXV4LWluZm9bX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6MTVweDtwYWRkaW5nLWxlZnQ6MjRweH0uc3RhY2stdHJhY2UtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItbGVmdDoxcHggc29saWQgI2ViZWJlYjtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpmbGV4O2ZsZXgtZmxvdzpjb2x1bW47Zm9udC1zaXplOjEwcHg7Zm9udC1mYW1pbHk6IlJvYm90byBNb25vIixtb25vc3BhY2U7aGVpZ2h0OjEwMCU7bWFyZ2luLWxlZnQ6OHB4O21heC1oZWlnaHQ6MzYwcHg7b3ZlcmZsb3cteDpoaWRkZW47b3ZlcmZsb3cteTpoaWRkZW47cGFkZGluZy1sZWZ0OjhweDt3aWR0aDoxMDAlfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zdGFjay10cmFjZS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuc3RhY2stdHJhY2UtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItbGVmdDoxcHggc29saWQgIzU1NX0uc3RhY2stdHJhY2UtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3gtc2hhZG93OjAgNXB4IDNweCAtM3B4ICNjY2M7cGFkZGluZy1ib3R0b206M3B4fS5zdGFjay10cmFjZS1ob3N0LW5hbWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOmdyYXl9LnN0YWNrLXRyYWNlLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDpib2xkfS5zdGljay10by1ib3R0b21tb3N0LWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC13ZWlnaHQ6Ym9sZDtmb250LXNpemU6MTJweDtwYWRkaW5nLXJpZ2h0OjNweH0nXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoYkosW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3Rvcjoic3RhY2stdHJhY2UtY29tcG9uZW50Iix0ZW1wbGF0ZVVybDoiLi9zdGFja190cmFjZV9jb21wb25lbnQubmcuaHRtbCIsc3R5bGVVcmxzOlsiLi9zdGFja190cmFjZV9jb21wb25lbnQuY3NzIl19XX1dLG51bGwse2NvZGVMb2NhdGlvblR5cGU6W3t0eXBlOnlffV0sb3BUeXBlOlt7dHlwZTp5X31dLG9wTmFtZTpbe3R5cGU6eV99XSxleGVjdXRpb25JbmRleDpbe3R5cGU6eV99XSxzdGlja1RvQm90dG9tbW9zdEZyYW1lSW5Gb2N1c2VkRmlsZTpbe3R5cGU6eV99XSxzdGFja0ZyYW1lc0ZvckRpc3BsYXk6W3t0eXBlOnlffV0sb25Tb3VyY2VMaW5lQ2xpY2tlZDpbe3R5cGU6X199XSxzdGFja0ZyYW1lQXJyYXk6W3t0eXBlOkZyLGFyZ3M6WyJzdGFja0ZyYW1lQXJyYXkiXX1dfSk7Y2xhc3MgeUp7Y29uc3RydWN0b3IodCl7dGhpcy5zdG9yZT10LHRoaXMuY29kZUxvY2F0aW9uVHlwZSQ9dGhpcy5zdG9yZS5waXBlKFJrKHprKGlYLCh0PT5udWxsPT09dD9udWxsOnQuY29kZUxvY2F0aW9uVHlwZSkpKSksdGhpcy5vcFR5cGUkPXRoaXMuc3RvcmUucGlwZShSayh6ayhpWCwodD0+bnVsbD09PXQ/bnVsbDp0Lm9wVHlwZSkpKSksdGhpcy5vcE5hbWUkPXRoaXMuc3RvcmUucGlwZShSayh6ayhpWCwodD0+bnVsbD09PXR8fHQuY29kZUxvY2F0aW9uVHlwZSE9PWFaLkdSQVBIX09QX0NSRUFUSU9OP251bGw6dC5vcE5hbWUpKSkpLHRoaXMuZXhlY3V0aW9uSW5kZXgkPXRoaXMuc3RvcmUucGlwZShSayh6ayhpWCwodD0+bnVsbD09PXR8fHQuY29kZUxvY2F0aW9uVHlwZSE9PWFaLkVYRUNVVElPTj9udWxsOnQuZXhlY3V0aW9uSW5kZXgpKSkpLHRoaXMuc3RpY2tUb0JvdHRvbW1vc3RGcmFtZUluRm9jdXNlZEZpbGUkPXRoaXMuc3RvcmUucGlwZShSayhwWCkpLHRoaXMuc3RhY2tGcmFtZXNGb3JEaXNwbGF5JD10aGlzLnN0b3JlLnBpcGUoUmsoemsoYVgsZFgsKCh0LGUpPT57aWYobnVsbD09PXQpcmV0dXJuIG51bGw7Y29uc3Qgbj1bXTtmb3IoY29uc3QgbyBvZiB0KXtjb25zdHtob3N0X25hbWU6dCxmaWxlX3BhdGg6aSxsaW5lbm86YSxmdW5jdGlvbl9uYW1lOnJ9PW8scz1pLnNwbGl0KCIvIiksbD1udWxsIT09ZSYmdD09PWUuaG9zdF9uYW1lJiZpPT09ZS5maWxlX3BhdGg7bi5wdXNoKHtob3N0X25hbWU6dCxmaWxlX3BhdGg6aSxjb25jaXNlX2ZpbGVfcGF0aDpzW3MubGVuZ3RoLTFdLGxpbmVubzphLGZ1bmN0aW9uX25hbWU6cixiZWxvbmdzVG9Gb2N1c2VkRmlsZTpsLGZvY3VzZWQ6bCYmYT09PWUubGluZW5vfSl9cmV0dXJuIG59KSkpKX1vblNvdXJjZUxpbmVDbGlja2VkKHQpe2NvbnN0e2hvc3RfbmFtZTplLGZpbGVfcGF0aDpuLGxpbmVubzpvLGZ1bmN0aW9uX25hbWU6aX09dDt0aGlzLnN0b3JlLmRpc3BhdGNoKFFxKHtzdGFja0ZyYW1lOntob3N0X25hbWU6ZSxmaWxlX3BhdGg6bixsaW5lbm86byxmdW5jdGlvbl9uYW1lOml9fSkpfX1mdW5jdGlvbiBfSih0LGUpezEmdCYmd3UoMCwidGYtZGVidWdnZXItdjItaW5hY3RpdmUiKX1mdW5jdGlvbiBDSih0LGUpezEmdCYmKE91KDAsImRpdiIsMyksd3UoMSwidGYtZGVidWdnZXItdjItYWxlcnRzIiksT3UoMiwiZGl2Iiw0KSx3dSgzLCJ0Zi1kZWJ1Z2dlci12Mi10aW1lbGluZSIpLHd1KDQsInRmLWRlYnVnZ2VyLXYyLWdyYXBoIiksUHUoKSx3dSg1LCJ0Zi1kZWJ1Z2dlci12Mi1ncmFwaC1leGVjdXRpb25zIiksUHUoKSxPdSg2LCJkaXYiLDUpLHd1KDcsInRmLWRlYnVnZ2VyLXYyLXNvdXJjZS1maWxlcyIpLHd1KDgsInRmLWRlYnVnZ2VyLXYyLXN0YWNrLXRyYWNlIiksUHUoKSl9eUouybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHlKKShNdShFaykpfSx5Si7JtWNtcD1Vbyh7dHlwZTp5SixzZWxlY3RvcnM6W1sidGYtZGVidWdnZXItdjItc3RhY2stdHJhY2UiXV0sZGVjbHM6Nyx2YXJzOjE4LGNvbnN0czpbWzMsImNvZGVMb2NhdGlvblR5cGUiLCJvcFR5cGUiLCJvcE5hbWUiLCJleGVjdXRpb25JbmRleCIsInN0aWNrVG9Cb3R0b21tb3N0RnJhbWVJbkZvY3VzZWRGaWxlIiwic3RhY2tGcmFtZXNGb3JEaXNwbGF5Iiwib25Tb3VyY2VMaW5lQ2xpY2tlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoT3UoMCwic3RhY2stdHJhY2UtY29tcG9uZW50IiwwKSxOdSgib25Tb3VyY2VMaW5lQ2xpY2tlZCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25Tb3VyY2VMaW5lQ2xpY2tlZChlKX0pKSxPYigxLCJhc3luYyIpLE9iKDIsImFzeW5jIiksT2IoMywiYXN5bmMiKSxPYig0LCJhc3luYyIpLE9iKDUsImFzeW5jIiksT2IoNiwiYXN5bmMiKSxQdSgpKSwyJmUmJnZ1KCJjb2RlTG9jYXRpb25UeXBlIixQYigxLDYsbi5jb2RlTG9jYXRpb25UeXBlJCkpKCJvcFR5cGUiLFBiKDIsOCxuLm9wVHlwZSQpKSgib3BOYW1lIixQYigzLDEwLG4ub3BOYW1lJCkpKCJleGVjdXRpb25JbmRleCIsUGIoNCwxMixuLmV4ZWN1dGlvbkluZGV4JCkpKCJzdGlja1RvQm90dG9tbW9zdEZyYW1lSW5Gb2N1c2VkRmlsZSIsUGIoNSwxNCxuLnN0aWNrVG9Cb3R0b21tb3N0RnJhbWVJbkZvY3VzZWRGaWxlJCkpKCJzdGFja0ZyYW1lc0ZvckRpc3BsYXkiLFBiKDYsMTYsbi5zdGFja0ZyYW1lc0ZvckRpc3BsYXkkKSl9LGRpcmVjdGl2ZXM6W2JKXSxwaXBlczpbTXZdLGVuY2Fwc3VsYXRpb246Mn0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoeUosW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoidGYtZGVidWdnZXItdjItc3RhY2stdHJhY2UiLHRlbXBsYXRlOidcbiAgICA8c3RhY2stdHJhY2UtY29tcG9uZW50XG4gICAgICBbY29kZUxvY2F0aW9uVHlwZV09ImNvZGVMb2NhdGlvblR5cGUkIHwgYXN5bmMiXG4gICAgICBbb3BUeXBlXT0ib3BUeXBlJCB8IGFzeW5jIlxuICAgICAgW29wTmFtZV09Im9wTmFtZSQgfCBhc3luYyJcbiAgICAgIFtleGVjdXRpb25JbmRleF09ImV4ZWN1dGlvbkluZGV4JCB8IGFzeW5jIlxuICAgICAgW3N0aWNrVG9Cb3R0b21tb3N0RnJhbWVJbkZvY3VzZWRGaWxlXT0iXG4gICAgICAgIHN0aWNrVG9Cb3R0b21tb3N0RnJhbWVJbkZvY3VzZWRGaWxlJCB8IGFzeW5jXG4gICAgICAiXG4gICAgICBbc3RhY2tGcmFtZXNGb3JEaXNwbGF5XT0ic3RhY2tGcmFtZXNGb3JEaXNwbGF5JCB8IGFzeW5jIlxuICAgICAgKG9uU291cmNlTGluZUNsaWNrZWQpPSJvblNvdXJjZUxpbmVDbGlja2VkKCRldmVudCkiXG4gICAgPjwvc3RhY2stdHJhY2UtY29tcG9uZW50PlxuICAnfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6RWt9XX0pLG51bGwpO2NsYXNzIE1Ke2NvbnN0cnVjdG9yKCl7dGhpcy5ydW5zPXt9LHRoaXMucnVuSWRzPVtdLHRoaXMuYWN0aXZlUnVuSWQ9bnVsbH19TUouybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fE1KKX0sTUouybVjbXA9VW8oe3R5cGU6TUosc2VsZWN0b3JzOltbImRlYnVnZ2VyLWNvbXBvbmVudCJdXSxpbnB1dHM6e3J1bnM6InJ1bnMiLHJ1bklkczoicnVuSWRzIixhY3RpdmVSdW5JZDoiYWN0aXZlUnVuSWQifSxkZWNsczo0LHZhcnM6Mixjb25zdHM6W1sxLCJkZWJ1Z2dlci1jb250YWluZXIiXSxbNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJkYXRhQXZhaWxhYmxlIiwiIl0sWzEsInRvcC1zZWN0aW9uIl0sWzEsInRvcC1jZW50ZXItc2VjdGlvbiJdLFsxLCJib3R0b20tc2VjdGlvbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7aWYoMSZlJiYoT3UoMCwiZGl2IiwwKSxXbSgxLF9KLDEsMCwidGYtZGVidWdnZXItdjItaW5hY3RpdmUiLDEpLFdtKDIsQ0osOSwwLCJuZy10ZW1wbGF0ZSIsbnVsbCwyLEtiKSxQdSgpKSwyJmUpe2NvbnN0IHQ9R20oMyk7SmMoMSksdnUoIm5nSWYiLDA9PT1uLnJ1bklkcy5sZW5ndGgpKCJuZ0lmRWxzZSIsdCl9fSxkaXJlY3RpdmVzOlthdixNcSxoWCxtSyxBSyxWSyxlSix5Sl0sc3R5bGVzOlsnLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEycHg7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtYmFkZ2Utc21hbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6OXB4fS5tYXQtYmFkZ2UtbGFyZ2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweH0ubWF0LWgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1oZWFkbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMjRweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNnB4LzI4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNXB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC44MykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtaDZbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuNjcpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWJvZHktc3Ryb25nW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjAgMCAxMnB4fS5tYXQtc21hbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDEycHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjMwMCAxMTJweC8xMTJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDVlbTttYXJnaW46MCAwIDU2cHh9Lm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDU2cHgvNTZweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDJlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDQ1cHgvNDhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDA1ZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAzNHB4LzQwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDY0cHh9Lm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcmFpc2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0cm9rZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mbGF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmFiW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1taW5pLWZhYltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWJ1dHRvbi10b2dnbGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhcmQtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjIwcHh9Lm1hdC1jYXJkLXN1YnRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2hlY2tib3hbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNoZWNrYm94LWxheW91dFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoZWNrYm94LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoyNHB4fS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtdHJhaWxpbmctaWNvbi5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtcmVtb3ZlLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MThweH0ubWF0LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1oZWFkZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2VsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9vdGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2FsZW5kYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhbGVuZGFyLWJvZHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxM3B4fS5tYXQtY2FsZW5kYXItYm9keS1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FsZW5kYXItcGVyaW9kLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo0MDB9Lm1hdC1kaWFsb2ctdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjEyNTtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE1MCU7bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS41ZW07d2lkdGg6MS41ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNWVtIDA7Ym9yZGVyLXRvcDouODQzNzVlbSBzb2xpZCB0cmFuc3BhcmVudH0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6LTAuODQzNzVlbTtwYWRkaW5nLXRvcDouODQzNzVlbX0ubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo3NSU7bWFyZ2luLXRvcDouNjY2NjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjc5MTY2NjY2NjdlbSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNDM3NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMnB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjNlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM1MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjI4MTI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDouNTQxNjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjY2NjY2NjY2NjdlbSl9QG1lZGlhIHByaW50ey5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMmVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMWVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTJlbSkgc2NhbGUoMC43NSl9fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi4yNWVtIDAgLjc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMDkzNzVlbTttYXJnaW4tdG9wOi0wLjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjFlbSAwIDFlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS44NDM3NWVtO21hcmdpbi10b3A6LTAuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9aW5wdXQubWF0LWlucHV0LWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LTAuMDYyNWVtfS5tYXQtbWVudS1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtcGFnaW5hdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweH0ubWF0LXJhZGlvLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW19Lm1hdC1zbGlkZS10b2dnbGUtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdGVwcGVyLWhvcml6b250YWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXN0ZXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXN0ZXAtc3ViLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDpub3JtYWx9Lm1hdC1zdGVwLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LXN0ZXAtbGFiZWwtc2VsZWN0ZWRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRhYi1ncm91cFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdGFiLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10YWItbGlua1tfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowfS5tYXQtdG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB4O3BhZGRpbmctdG9wOjZweDtwYWRkaW5nLWJvdHRvbTo2cHh9Lm1hdC10b29sdGlwLWhhbmRzZXRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9Lm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE2cHh9Lm1hdC1vcHRncm91cC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1zaW1wbGUtc25hY2tiYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweH0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb25bX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjE7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo1MDB9Lm1hdC10cmVlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW5lc3RlZC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjQwMDtmb250LXNpemU6MTRweH0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmVtcHR5KXt0cmFuc2Zvcm06dHJhbnNsYXRlWigwKX0ubWF0LXJpcHBsZS5tYXQtcmlwcGxlLXVuYm91bmRlZFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItcmFkaXVzOjUwJTtwb2ludGVyLWV2ZW50czpub25lO3RyYW5zaXRpb246b3BhY2l0eSx0cmFuc2Zvcm0gMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpO3RyYW5zZm9ybTpzY2FsZSgwKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6bm9uZX0uY2RrLXZpc3VhbGx5LWhpZGRlbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjA7Y2xpcDpyZWN0KDAgMCAwIDApO2hlaWdodDoxcHg7bWFyZ2luOi0xcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwO291dGxpbmU6MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb2ludGVyLWV2ZW50czpub25lO3RvcDowO2xlZnQ6MDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTplbXB0eXtkaXNwbGF5Om5vbmV9LmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1wYW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czphdXRvO2JveC1zaXppbmc6Ym9yZGVyLWJveDt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O21heC13aWR0aDoxMDAlO21heC1oZWlnaHQ6MTAwJX0uY2RrLW92ZXJsYXktYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO3otaW5kZXg6MTAwMDtwb2ludGVyLWV2ZW50czphdXRvOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDt0cmFuc2l0aW9uOm9wYWNpdHkgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSk7b3BhY2l0eTowfS5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjF9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAuY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTouNn0uY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4zMil9LmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MH0uY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWluLXdpZHRoOjFweDttaW4taGVpZ2h0OjFweH0uY2RrLWdsb2JhbC1zY3JvbGxibG9ja1tfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7d2lkdGg6MTAwJTtvdmVyZmxvdy15OnNjcm9sbH1Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0e31Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZHt9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbHthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQgMHMgMW1zfS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOm5vdCg6LXdlYmtpdC1hdXRvZmlsbCl7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCAwcyAxbXN9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplW19uZ2NvbnRlbnQtJUNPTVAlXXtyZXNpemU6bm9uZX10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDphdXRvICFpbXBvcnRhbnQ7b3ZlcmZsb3c6aGlkZGVuICFpbXBvcnRhbnR9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZy1maXJlZm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDowICFpbXBvcnRhbnR9Lm1hdC1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtbWRjLWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9LmJvdHRvbS1zZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyLXRvcDoxcHggc29saWQgI2ViZWJlYjtkaXNwbGF5OmZsZXg7ZmxleC1ncm93OjE7aGVpZ2h0OjM0JTtwYWRkaW5nLXRvcDo2cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmJvdHRvbS1zZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmJvdHRvbS1zZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItdG9wOjFweCBzb2xpZCAjNTU1fS5kZWJ1Z2dlci1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JveC1zaXppbmc6Ym9yZGVyLWJveDtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59LnRvcC1zZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpmbGV4O2ZsZXgtZ3JvdzoxO2hlaWdodDo2NiU7cGFkZGluZzo2cHggMH10Zi1kZWJ1Z2dlci12Mi1hbGVydHNbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yaWdodDoxcHggc29saWQgI2ViZWJlYjtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6MTBweDttaW4td2lkdGg6MTYwcHg7d2lkdGg6Y2FsYygxNSUgLSAxMXB4KX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICB0Zi1kZWJ1Z2dlci12Mi1hbGVydHNbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICB0Zi1kZWJ1Z2dlci12Mi1hbGVydHNbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yaWdodDoxcHggc29saWQgIzU1NX10Zi1kZWJ1Z2dlci12Mi1ncmFwaC1leGVjdXRpb25zW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9jaztmbGV4LWdyb3c6MTttaW4td2lkdGg6NTQwcHg7d2lkdGg6NTQwcHh9dGYtZGVidWdnZXItdjItc291cmNlLWZpbGVzW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MTAwJTt3aWR0aDo3MCV9dGYtZGVidWdnZXItdjItc3RhY2stdHJhY2VbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZsZXgtZ3JvdzoxO2hlaWdodDoxMDAlO21pbi13aWR0aDo1NDBweDt3aWR0aDo1NDBweH0udG9wLWNlbnRlci1zZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9jaztvdmVyZmxvdzphdXRvO3dpZHRoOjU1JX10Zi1kZWJ1Z2dlci12Mi10aW1lbGluZVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpibG9ja310Zi1kZWJ1Z2dlci12Mi1ncmFwaFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgI2ViZWJlYjtkaXNwbGF5OmJsb2NrO21hcmdpbi10b3A6NXB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIHRmLWRlYnVnZ2VyLXYyLWdyYXBoW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgdGYtZGVidWdnZXItdjItZ3JhcGhbX25nY29udGVudC0lQ09NUCVde2JvcmRlci10b3A6MXB4IHNvbGlkICM1NTV9J10sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKE1KLFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6ImRlYnVnZ2VyLWNvbXBvbmVudCIsdGVtcGxhdGVVcmw6Ii4vZGVidWdnZXJfY29tcG9uZW50Lm5nLmh0bWwiLHN0eWxlVXJsczpbIi4vZGVidWdnZXJfY29tcG9uZW50LmNzcyJdLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2h9XX1dLG51bGwse3J1bnM6W3t0eXBlOnlffV0scnVuSWRzOlt7dHlwZTp5X31dLGFjdGl2ZVJ1bklkOlt7dHlwZTp5X31dfSk7Y2xhc3Mgdkp7Y29uc3RydWN0b3IodCl7dGhpcy5zdG9yZT10LHRoaXMucnVucyQ9dGhpcy5zdG9yZS5waXBlKFJrKGhaKSksdGhpcy5ydW5zSWRzJD10aGlzLnN0b3JlLnBpcGUoUmsoemsoaFosKHQ9Pk9iamVjdC5rZXlzKHQpKSkpKSx0aGlzLmFjdGl2ZVJ1bklkJD10aGlzLnN0b3JlLnBpcGUoUmsoeVopKX1uZ09uSW5pdCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2godnEoKSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN0b3JlLmRpc3BhdGNoKHhxKCkpfX12Si7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8dkopKE11KEVrKSl9LHZKLsm1Y21wPVVvKHt0eXBlOnZKLHNlbGVjdG9yczpbWyJ0Zi1kZWJ1Z2dlci12MiJdXSxkZWNsczo0LHZhcnM6OSxjb25zdHM6W1szLCJydW5zIiwicnVuSWRzIiwiYWN0aXZlUnVuSWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKHd1KDAsImRlYnVnZ2VyLWNvbXBvbmVudCIsMCksT2IoMSwiYXN5bmMiKSxPYigyLCJhc3luYyIpLE9iKDMsImFzeW5jIikpLDImZSYmdnUoInJ1bnMiLFBiKDEsMyxuLnJ1bnMkKSkoInJ1bklkcyIsUGIoMiw1LG4ucnVuc0lkcyQpKSgiYWN0aXZlUnVuSWQiLFBiKDMsNyxuLmFjdGl2ZVJ1bklkJCkpfSxkaXJlY3RpdmVzOltNSl0scGlwZXM6W012XSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIH0iXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIodkosW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoidGYtZGVidWdnZXItdjIiLHRlbXBsYXRlOidcbiAgICA8ZGVidWdnZXItY29tcG9uZW50XG4gICAgICBbcnVuc109InJ1bnMkIHwgYXN5bmMiXG4gICAgICBbcnVuSWRzXT0icnVuc0lkcyQgfCBhc3luYyJcbiAgICAgIFthY3RpdmVSdW5JZF09ImFjdGl2ZVJ1bklkJCB8IGFzeW5jIlxuICAgID48L2RlYnVnZ2VyLWNvbXBvbmVudD5cbiAgJyxzdHlsZXM6WyJcbiAgICAgIDpob3N0IHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIH1cbiAgICAiXX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkVrfV19KSxudWxsKTtjb25zdCB4Sj0iZGVidWdnZXItdjIiO2Z1bmN0aW9uIE9KKHQsZSxuLG8saSl7aWYobjw9MHx8IU51bWJlci5pc0ludGVnZXIobikpdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBhZ2VTaXplOiAke259YCk7aWYoZT5vKXRocm93IG5ldyBFcnJvcihgZW5kIGluZGV4ICgke2V9KSBleGNlZWRzIHRvdGFsIG51bWJlciBvZiBpdGVtcyAoJHtvfSlgKTtpZihlLXQ+bil0aHJvdyBuZXcgRXJyb3IoImJlZ2luLWVuZCBzcGFuIGV4Y2VlZHMgcGFnZSBzaXplLCB3aGljaCBpcyBub3QgYWxsb3dlZCIpO2NvbnN0IGE9W10scj1NYXRoLmZsb29yKHQvbik7KCEociBpbiBpKXx8aVtyXTxuJiZyKm4raVtyXTxvKSYmYS5wdXNoKHIpO2NvbnN0IHM9TWF0aC5mbG9vcigoZS0xKS9uKTtyZXR1cm4gcyE9PXImJighKHMgaW4gaSl8fHMqbitpW3NdPGUmJmU8bykmJmEucHVzaChzKSxhfWNsYXNzIFBKe2NvbnN0cnVjdG9yKHQsZSxuKXt0aGlzLmFjdGlvbnMkPXQsdGhpcy5zdG9yZT1lLHRoaXMuZGF0YVNvdXJjZT1uLHRoaXMubG9hZERhdGEkPWdTKCgoKT0+e2NvbnN0IHQ9dGhpcy5sb2FkRGVidWdnZXJSdW5zKFd0KHRoaXMub25EZWJ1Z2dlckRhdGFQb2xsKCksdGhpcy5vbkNvcmVSZWxvYWQoKSkpLnBpcGUob24oKSksZT10aGlzLmxvYWRTb3VyY2VGaWxlTGlzdCh0KSxuPXRoaXMuY3JlYXRlTnVtRXhlY3V0aW9uTG9hZGVyKHQpLG89dGhpcy5jcmVhdGVOdW1BbGVydHNBbmRCcmVha2Rvd25Mb2FkZXIodCksaT10aGlzLm9uQWxlcnRUeXBlRm9jdXNlZCgpLGE9dGhpcy5mZXRjaEV4ZWN1dGlvbkRpZ2VzdHNGb3JBbGVydFR5cGVGb2N1cyhpKSxyPXRoaXMuY3JlYXRlSW5pdGlhbEV4ZWN1dGlvbkRldGVjdG9yKG4pLnBpcGUob24oKSkscz10aGlzLmNyZWF0ZUV4ZWN1dGlvbkRpZ2VzdExvYWRlcihXdCh0aGlzLm9uRXhlY3V0aW9uU2Nyb2xsKCksdGhpcy5jcmVhdGVJbml0aWFsRXhlY3V0aW9uRGlnZXN0KHIpLGEpKSxsPXRoaXMuY3JlYXRlRXhlY3V0aW9uRGF0YUFuZFN0YWNrRnJhbWVzTG9hZGVyKFd0KHRoaXMub25FeGVjdXRpb25EaWdlc3RGb2N1c2VkKCksci5waXBlKGtuKHRoaXMuc3RvcmUuc2VsZWN0KHlaKSx0aGlzLnN0b3JlLnNlbGVjdCh0WCkpLGh0KCgoWyx0LGVdKT0+KHthY3RpdmVSdW5JZDp0LGxvYWRlZEV4ZWN1dGlvbkRhdGE6ZSxmb2N1c0luZGV4OjB9KSkpKSkpO3JldHVybiBXdChvLHMsbCx0aGlzLmNyZWF0ZU51bUdyYXBoRXhlY3V0aW9uTG9hZGVyKHQpLGUsdGhpcy5vblNvdXJjZUZpbGVGb2N1c2VkKCksdGhpcy5sb2FkR3JhcGhFeGVjdXRpb25QYWdlcyh0aGlzLm9uR3JhcGhFeGVjdXRpb25TY3JvbGwoKSksdGhpcy5sb2FkR3JhcGhPcFN0YWNrRnJhbWVzKHRoaXMubG9hZEdyYXBoT3BJbmZvKCkpKS5waXBlKGh0KCgoKT0+KHt9KSkpKX0pLHtkaXNwYXRjaDohMX0pfW9uRGVidWdnZXJEYXRhUG9sbCgpe3JldHVybiB0aGlzLmFjdGlvbnMkLnBpcGUoeFModnEpLGRuKCh0PT4oZnVuY3Rpb24gZSh0LG4sbyl7cmV0dXJuIHQucGlwZSgoZnVuY3Rpb24gaSh0KXtyZXR1cm4gZT0+ZS5saWZ0KG5ldyB0bih0KSl9KSgodD0+dC5waXBlKGtuKG4pLChmdW5jdGlvbiBlKHQsbil7cmV0dXJuIG4/ZT0+bmV3IHhlKGUsbikubGlmdChuZXcgTWUodCkpOmU9PmUubGlmdChuZXcgTWUodCkpfSkoKChbLHRdKT0+WnQodCkpKSkpKSx1bihvKSxodCgoKCk9Pnt9KSkpfSkoWih0KSx0aGlzLnN0b3JlLnNlbGVjdChfWikucGlwZShodCgodD0+KGZ1bmN0aW9uIGUodCl7cmV0dXJuIHQ+NmU0PzZlNDp0PjRlMz90OjJlM30pKHQpKSkpLHRoaXMuYWN0aW9ucyQucGlwZSh4Uyh4cSkpKSkpLF9uKCgoKT0+dGhpcy5zdG9yZS5kaXNwYXRjaChPcSgpKSkpLGh0KCgoKT0+e30pKSl9b25Db3JlUmVsb2FkKCl7cmV0dXJuIFd0KHRoaXMuYWN0aW9ucyQucGlwZSh4UyhXRSxHRSkpLHRoaXMuYWN0aW9ucyQucGlwZSh4UyhWRSkpLnBpcGUoa24odGhpcy5zdG9yZS5zZWxlY3QoYlopKSxHdCgoKFssdF0pPT50LnN0YXRlPT09QkUuTk9UX0xPQURFRHx8dC5zdGF0ZT09PUJFLkZBSUxFRCYmbnVsbD09PXQubGFzdExvYWRlZFRpbWVJbk1zKSkpKS5waXBlKGtuKHRoaXMuc3RvcmUuc2VsZWN0KGRBKSksR3QoKChbLHRdKT0+dD09PXhKKSksX24oKCgpPT50aGlzLnN0b3JlLmRpc3BhdGNoKE9xKCkpKSksaHQoKCgpPT57fSkpKX1sb2FkRGVidWdnZXJSdW5zKHQpe3JldHVybiB0LnBpcGUoa24odGhpcy5zdG9yZS5zZWxlY3QoYlopKSxHdCgoKFsse3N0YXRlOnR9XSk9PnQhPT1CRS5MT0FESU5HKSksX24oKCgpPT50aGlzLnN0b3JlLmRpc3BhdGNoKFBxKCkpKSksVHQoKCgpPT50aGlzLmRhdGFTb3VyY2UuZmV0Y2hSdW5zKCkucGlwZShfbigodD0+e3RoaXMuc3RvcmUuZGlzcGF0Y2god3Eoe3J1bnM6dH0pKX0pKSxodCgoKCk9Pnt9KSkpKSkpfWNyZWF0ZU51bUV4ZWN1dGlvbkxvYWRlcih0KXtyZXR1cm4gdC5waXBlKGtuKHRoaXMuc3RvcmUuc2VsZWN0KGhaKSx0aGlzLnN0b3JlLnNlbGVjdChTWikpLEd0KCgoWyx0LGVdKT0+T2JqZWN0LmtleXModCkubGVuZ3RoPjAmJmUuc3RhdGUhPT1CRS5MT0FESU5HKSksX24oKCgpPT50aGlzLnN0b3JlLmRpc3BhdGNoKFJxKCkpKSksVHQoKChbLHRdKT0+e2NvbnN0IGU9T2JqZWN0LmtleXModClbMF07cmV0dXJuIHRoaXMuZGF0YVNvdXJjZS5mZXRjaEV4ZWN1dGlvbkRpZ2VzdHMoZSwwLDApLnBpcGUoX24oKHQ9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKFRxKHtudW1FeGVjdXRpb25zOnQubnVtX2RpZ2VzdHN9KSl9KSksaHQoKCgpPT57fSkpKX0pKSl9Y3JlYXRlTnVtR3JhcGhFeGVjdXRpb25Mb2FkZXIodCl7cmV0dXJuIHQucGlwZShrbih0aGlzLnN0b3JlLnNlbGVjdChoWiksdGhpcy5zdG9yZS5zZWxlY3QoelopKSxHdCgoKFssdCxlXSk9Pk9iamVjdC5rZXlzKHQpLmxlbmd0aD4wJiZlLnN0YXRlIT09QkUuTE9BRElORykpLF9uKCgoKT0+dGhpcy5zdG9yZS5kaXNwYXRjaChWcSgpKSkpLFR0KCgoWyx0XSk9Pntjb25zdCBlPU9iamVjdC5rZXlzKHQpWzBdO3JldHVybiB0aGlzLmRhdGFTb3VyY2UuZmV0Y2hHcmFwaEV4ZWN1dGlvbkRpZ2VzdHMoZSwwLDApLnBpcGUoX24oKHQ9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKGpxKHtudW1HcmFwaEV4ZWN1dGlvbnM6dC5udW1fZGlnZXN0c30pKX0pKSxodCgoKCk9Pnt9KSkpfSkpKX1jcmVhdGVOdW1BbGVydHNBbmRCcmVha2Rvd25Mb2FkZXIodCl7cmV0dXJuIHQucGlwZShrbih0aGlzLnN0b3JlLnNlbGVjdChoWiksdGhpcy5zdG9yZS5zZWxlY3QoTVopKSxHdCgoKFssdCxlXSk9Pk9iamVjdC5rZXlzKHQpLmxlbmd0aD4wJiZlLnN0YXRlIT09QkUuTE9BRElORykpLF9uKCgoKT0+dGhpcy5zdG9yZS5kaXNwYXRjaChTcSgpKSkpLFR0KCgoWyx0XSk9Pntjb25zdCBlPU9iamVjdC5rZXlzKHQpWzBdO3JldHVybiB0aGlzLmRhdGFTb3VyY2UuZmV0Y2hBbGVydHMoZSwwLDApLnBpcGUoX24oKHQ9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKERxKHtudW1BbGVydHM6dC5udW1fYWxlcnRzLGFsZXJ0c0JyZWFrZG93bjp0LmFsZXJ0c19icmVha2Rvd259KSl9KSksaHQoKCgpPT57fSkpKX0pKSl9Y3JlYXRlSW5pdGlhbEV4ZWN1dGlvbkRldGVjdG9yKHQpe3JldHVybiB0LnBpcGUoa24odGhpcy5zdG9yZS5zZWxlY3QoRVopLHRoaXMuc3RvcmUuc2VsZWN0KERaKSksR3QoKChbLHQsZV0pPT50PjAmJjA9PT1PYmplY3Qua2V5cyhlLnBhZ2VMb2FkZWRTaXplcykubGVuZ3RoKSksaHQoKCgpPT57fSkpKX1jcmVhdGVJbml0aWFsRXhlY3V0aW9uRGlnZXN0KHQpe3JldHVybiB0LnBpcGUoa24odGhpcy5zdG9yZS5zZWxlY3QoRVopLHRoaXMuc3RvcmUuc2VsZWN0KHlaKSx0aGlzLnN0b3JlLnNlbGVjdChSWikpLEd0KCgoWywsdF0pPT5udWxsIT09dCkpLGh0KCgoWyx0LGUsbl0pPT4oe2JlZ2luOjAsZW5kOk1hdGgubWluKHQsbikscnVuSWQ6ZX0pKSkpfW9uRXhlY3V0aW9uU2Nyb2xsKCl7cmV0dXJuIHRoaXMuYWN0aW9ucyQucGlwZSh4Uyh6cSxIcSxGcSksa24odGhpcy5zdG9yZS5zZWxlY3QoeVopLHRoaXMuc3RvcmUuc2VsZWN0KEFaKSx0aGlzLnN0b3JlLnNlbGVjdChFWiksdGhpcy5zdG9yZS5zZWxlY3QoVFopLHRoaXMuc3RvcmUuc2VsZWN0KFJaKSksR3QoKChbdF0pPT5udWxsIT09dCkpLGh0KCgoWyx0LGUsbixvLGldKT0+KHtydW5JZDp0LGJlZ2luOmUsZW5kOk1hdGgubWluKG4sZStvKSxwYWdlU2l6ZTppfSkpKSxrbih0aGlzLnN0b3JlLnNlbGVjdChEWikpLGh0KCgoW3QsZV0pPT4oe3Byb3BzOnQsbG9hZGVkOmUsbWlzc2luZ1BhZ2VzOk9KKHQuYmVnaW4sdC5lbmQsdC5wYWdlU2l6ZSxlLm51bUV4ZWN1dGlvbnMsZS5wYWdlTG9hZGVkU2l6ZXMpfSkpKSxHdCgoKHttaXNzaW5nUGFnZXM6dH0pPT50Lmxlbmd0aD4wKSksaHQoKCh7cHJvcHM6dCxsb2FkZWQ6ZSxtaXNzaW5nUGFnZXM6bn0pPT57Y29uc3R7cnVuSWQ6byxwYWdlU2l6ZTppfT10O3JldHVybntiZWdpbjpuWzBdKmksZW5kOk1hdGgubWluKGUubnVtRXhlY3V0aW9ucywobltuLmxlbmd0aC0xXSsxKSppKSxydW5JZDpvfX0pKSl9Y3JlYXRlRXhlY3V0aW9uRGlnZXN0TG9hZGVyKHQpe3JldHVybiB0LnBpcGUoa24odGhpcy5zdG9yZS5zZWxlY3QoRFopKSxHdCgoKFt7YmVnaW46dCxlbmQ6ZX0sbl0pPT5lPnQmJiEoZnVuY3Rpb24gbyh0LGUsbil7aWYoZT49bil0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGJlZ2luIHRvIGJlIGxlc3MgdGhhbiBlbmQsIGJ1dCBnb3QgYmVnaW49JHtlfSwgZW5kPSR7bn1gKTtyZXR1cm4tMSE9PXQuZmluZEluZGV4KCh0PT50LmJlZ2luPj1lJiZ0LmVuZDw9bikpfSkobi5sb2FkaW5nUmFuZ2VzLHQsZSkpKSxfbigoKFt7YmVnaW46dCxlbmQ6ZX1dKT0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goTnEoe2JlZ2luOnQsZW5kOmV9KSl9KSksVHQoKChbe3J1bklkOnQsYmVnaW46ZSxlbmQ6bn1dKT0+dGhpcy5kYXRhU291cmNlLmZldGNoRXhlY3V0aW9uRGlnZXN0cyh0LGUsbikucGlwZShfbigodD0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goSXEodCkpfSkpLGh0KCgoKT0+e30pKSkpKSl9b25FeGVjdXRpb25EaWdlc3RGb2N1c2VkKCl7cmV0dXJuIHRoaXMuYWN0aW9ucyQucGlwZSh4UyhMcSksa24odGhpcy5zdG9yZS5zZWxlY3QoeVopLHRoaXMuc3RvcmUuc2VsZWN0KHRYKSx0aGlzLnN0b3JlLnNlbGVjdChBWikpLGh0KCgoW3QsZSxuLG9dKT0+KHthY3RpdmVSdW5JZDplLGxvYWRlZEV4ZWN1dGlvbkRhdGE6bixmb2N1c0luZGV4Om8rdC5kaXNwbGF5SW5kZXh9KSkpKX1jcmVhdGVFeGVjdXRpb25EYXRhQW5kU3RhY2tGcmFtZXNMb2FkZXIodCl7cmV0dXJuIHQucGlwZShHdCgoKHthY3RpdmVSdW5JZDp0LGxvYWRlZEV4ZWN1dGlvbkRhdGE6ZSxmb2N1c0luZGV4Om59KT0+bnVsbCE9PXQmJm51bGwhPT1uJiZ2b2lkIDA9PT1lW25dKSksVHQoKCh7YWN0aXZlUnVuSWQ6dCxmb2N1c0luZGV4OmV9KT0+e2NvbnN0IG49ZSxvPW4rMTtyZXR1cm4gdGhpcy5kYXRhU291cmNlLmZldGNoRXhlY3V0aW9uRGF0YSh0LG4sbykucGlwZShfbigodD0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goQnEodCkpfSkpLGh0KCh0PT4oe2V4ZWN1dGlvbkRhdGE6dCxiZWdpbjpuLGVuZDpvfSkpKSl9KSksaHQoKCh7ZXhlY3V0aW9uRGF0YTp0fSk9PnQuZXhlY3V0aW9uc1swXSkpLGtuKHRoaXMuc3RvcmUuc2VsZWN0KHlaKSx0aGlzLnN0b3JlLnNlbGVjdChuWCkpLEd0KCgoW3QsZSxuXSk9PntpZihudWxsPT09ZSlyZXR1cm4hMTtmb3IoY29uc3QgZSBvZiB0LnN0YWNrX2ZyYW1lX2lkcylpZih2b2lkIDA9PT1uW2VdKXJldHVybiEwO3JldHVybiExfSkpLFR0KCgoW3QsZV0pPT57Y29uc3Qgbj10LnN0YWNrX2ZyYW1lX2lkcztyZXR1cm4gdGhpcy5kYXRhU291cmNlLmZldGNoU3RhY2tGcmFtZXMoZSxuKS5waXBlKF9uKCh0PT57Y29uc3QgZT17fTtmb3IobGV0IG89MDtvPG4ubGVuZ3RoOysrbyllW25bb11dPXQuc3RhY2tfZnJhbWVzW29dO3RoaXMuc3RvcmUuZGlzcGF0Y2goZVooe3N0YWNrRnJhbWVzOmV9KSl9KSksaHQoKCgpPT57fSkpKX0pKSl9b25HcmFwaEV4ZWN1dGlvblNjcm9sbCgpe3JldHVybiB0aGlzLmFjdGlvbnMkLnBpcGUoeFMoR3EpLGRlKDEwMCksa24odGhpcy5zdG9yZS5zZWxlY3QoeVopLHRoaXMuc3RvcmUuc2VsZWN0KEhaKSx0aGlzLnN0b3JlLnNlbGVjdChGWikpLEd0KCgoWyx0LGVdKT0+bnVsbCE9PXQmJmU+MCkpLGh0KCgoWyx0LGUsbl0pPT4oe3J1bklkOnQsbnVtR3JhcGhFeGVjdXRpb25zOmUsc2Nyb2xsQmVnaW5JbmRleDpufSkpKSxrbih0aGlzLnN0b3JlLnNlbGVjdChCWiksdGhpcy5zdG9yZS5zZWxlY3QoTFopLHRoaXMuc3RvcmUuc2VsZWN0KFZaKSx0aGlzLnN0b3JlLnNlbGVjdChqWikpLGh0KCgoW3tydW5JZDp0LG51bUdyYXBoRXhlY3V0aW9uczplLHNjcm9sbEJlZ2luSW5kZXg6bn0sbyxpLGEscl0pPT57bGV0IHM9T0oobixNYXRoLm1pbihuK2ksZSksbyxlLHIpO3JldHVybiBzPXMuZmlsdGVyKCh0PT4tMT09PWEuaW5kZXhPZih0KSkpLHtydW5JZDp0LG1pc3NpbmdQYWdlczpzLHBhZ2VTaXplOm8sbnVtR3JhcGhFeGVjdXRpb25zOmV9fSkpKX1sb2FkR3JhcGhFeGVjdXRpb25QYWdlcyh0KXtyZXR1cm4gdC5waXBlKEd0KCgoe21pc3NpbmdQYWdlczp0fSk9PnQubGVuZ3RoPjApKSxfbigoKHttaXNzaW5nUGFnZXM6dH0pPT57dC5mb3JFYWNoKCh0PT57dGhpcy5zdG9yZS5kaXNwYXRjaChVcSh7cGFnZUluZGV4OnR9KSl9KSl9KSksVHQoKCh7cnVuSWQ6dCxtaXNzaW5nUGFnZXM6ZSxwYWdlU2l6ZTpuLG51bUdyYXBoRXhlY3V0aW9uczpvfSk9Pntjb25zdCBpPWVbMF0qbixhPU1hdGgubWluKChlW2UubGVuZ3RoLTFdKzEpKm4sbyk7cmV0dXJuIHRoaXMuZGF0YVNvdXJjZS5mZXRjaEdyYXBoRXhlY3V0aW9uRGF0YSh0LGksYSkucGlwZShfbigodD0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goV3EodCkpfSkpLGh0KCgoKT0+e30pKSl9KSkpfWxvYWRHcmFwaE9wSW5mbygpe3JldHVybiB0aGlzLmFjdGlvbnMkLnBpcGUoeFMocXEsWXEpLGtuKHRoaXMuc3RvcmUuc2VsZWN0KHlaKSx0aGlzLnN0b3JlLnNlbGVjdChlWCkpLEd0KCgoW3QsZSxuXSk9Pntjb25zdHtncmFwaF9pZDpvLG9wX25hbWU6aX09dDtyZXR1cm4hKG51bGw9PT1lfHx2b2lkIDAhPT1uW29dJiZuW29dLmhhcyhpKSYmKG5bb10uZ2V0KGkpPT09QkUuTE9BRElOR3x8bltvXS5nZXQoaSk9PT1CRS5MT0FERUQpKX0pKSxfbigoKFt7Z3JhcGhfaWQ6dCxvcF9uYW1lOmV9XSk9PnRoaXMuc3RvcmUuZGlzcGF0Y2goWnEoe2dyYXBoX2lkOnQsb3BfbmFtZTplfSkpKSksVHQoKChbdCxlXSk9Pntjb25zdHtncmFwaF9pZDpuLG9wX25hbWU6b309dDtyZXR1cm4gdGhpcy5kYXRhU291cmNlLmZldGNoR3JhcGhPcEluZm8oZSxuLG8pLnBpcGUoX24oKHQ9PnRoaXMuc3RvcmUuZGlzcGF0Y2goWHEoe2dyYXBoT3BJbmZvUmVzcG9uc2U6dH0pKSkpLGh0KCh0PT4oe3J1bklkOmUsc3RhY2tGcmFtZUlkczp0LnN0YWNrX2ZyYW1lX2lkc30pKSkpfSkpKX1sb2FkR3JhcGhPcFN0YWNrRnJhbWVzKHQpe3JldHVybiB0LnBpcGUoa24odGhpcy5zdG9yZS5zZWxlY3QoblgpKSxodCgoKFt7cnVuSWQ6dCxzdGFja0ZyYW1lSWRzOmV9LG5dKT0+KHtydW5JZDp0LG1pc3NpbmdTdGFja0ZyYW1lSWRzOmUuZmlsdGVyKCh0PT52b2lkIDA9PT1uW3RdKSl9KSkpLEd0KCgoe3J1bklkOnQsbWlzc2luZ1N0YWNrRnJhbWVJZHM6ZX0pPT5udWxsIT09dCYmZS5sZW5ndGg+MCkpLFR0KCgoe3J1bklkOnQsbWlzc2luZ1N0YWNrRnJhbWVJZHM6ZX0pPT50aGlzLmRhdGFTb3VyY2UuZmV0Y2hTdGFja0ZyYW1lcyh0LGUpLnBpcGUoX24oKHQ9Pntjb25zdCBuPXt9O2ZvcihsZXQgbz0wO288ZS5sZW5ndGg7KytvKW5bZVtvXV09dC5zdGFja19mcmFtZXNbb107dGhpcy5zdG9yZS5kaXNwYXRjaChlWih7c3RhY2tGcmFtZXM6bn0pKX0pKSxodCgoKCk9Pnt9KSkpKSkpfW9uQWxlcnRUeXBlRm9jdXNlZCgpe3JldHVybiB0aGlzLmFjdGlvbnMkLnBpcGUoeFMoQXEpLGtuKHRoaXMuc3RvcmUuc2VsZWN0KHlaKSx0aGlzLnN0b3JlLnNlbGVjdCh4WiksdGhpcy5zdG9yZS5zZWxlY3QoT1opLHRoaXMuc3RvcmUuc2VsZWN0KFBaKSx0aGlzLnN0b3JlLnNlbGVjdChNWikpLEd0KCgoWyx0LGUsbixvLGldKT0+bnVsbCE9PXQmJm51bGwhPT1lJiZuPjAmJihudWxsPT09b3x8T2JqZWN0LmtleXMobykubGVuZ3RoPG4pJiZpLnN0YXRlIT09QkUuTE9BRElORykpLF9uKCgoKT0+dGhpcy5zdG9yZS5kaXNwYXRjaChTcSgpKSkpLFR0KCgoWyx0LGVdKT0+dGhpcy5kYXRhU291cmNlLmZldGNoQWxlcnRzKHQsMCwtMSxlKSkpLF9uKCgoe251bV9hbGVydHM6dCxhbGVydHNfYnJlYWtkb3duOmUsYWxlcnRfdHlwZTpuLGJlZ2luOm8sZW5kOmksYWxlcnRzOmF9KT0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goRXEoe251bUFsZXJ0czp0LGFsZXJ0c0JyZWFrZG93bjplLGFsZXJ0VHlwZTpuLGJlZ2luOm8sZW5kOmksYWxlcnRzOmF9KSl9KSkpfWZldGNoRXhlY3V0aW9uRGlnZXN0c0ZvckFsZXJ0VHlwZUZvY3VzKHQpe3JldHVybiB0LnBpcGUoa24odGhpcy5zdG9yZS5zZWxlY3QoUlopLHRoaXMuc3RvcmUuc2VsZWN0KFRaKSx0aGlzLnN0b3JlLnNlbGVjdChFWiksdGhpcy5zdG9yZS5zZWxlY3QoRFopLHRoaXMuc3RvcmUuc2VsZWN0KHlaKSksaHQoKChbdCxlLG4sbyxpLGFdKT0+e2NvbnN0IHI9dC5hbGVydHNbMF0uZXhlY3V0aW9uX2luZGV4LHM9T0ooTWF0aC5tYXgoMCxyLU1hdGguZmxvb3Iobi8yKSksTWF0aC5taW4ocitNYXRoLmZsb29yKG4vMiksbyksZSxvLGkucGFnZUxvYWRlZFNpemVzKTtyZXR1cm4gMD09PXMubGVuZ3RoP3tydW5JZDphLGJlZ2luOjAsZW5kOjB9OntydW5JZDphLGJlZ2luOnNbMF0qZSxlbmQ6TWF0aC5taW4oaS5udW1FeGVjdXRpb25zLChzW3MubGVuZ3RoLTFdKzEpKmUpfX0pKSl9bG9hZFNvdXJjZUZpbGVMaXN0KHQpe3JldHVybiB0LnBpcGUoa24odGhpcy5zdG9yZS5zZWxlY3QoeVopLHRoaXMuc3RvcmUuc2VsZWN0KHNYKSksR3QoKChbLHQsZV0pPT5udWxsIT09dCYmZS5zdGF0ZSE9PUJFLkxPQURJTkcpKSxfbigoKCk9PnRoaXMuc3RvcmUuZGlzcGF0Y2goS3EoKSkpKSxUdCgoKFssdF0pPT50aGlzLmRhdGFTb3VyY2UuZmV0Y2hTb3VyY2VGaWxlTGlzdCh0KS5waXBlKF9uKCh0PT57Y29uc3QgZT1bXTt0LmZvckVhY2goKChbdCxuXSk9PntlLnB1c2goe2hvc3RfbmFtZTp0LGZpbGVfcGF0aDpufSl9KSksdGhpcy5zdG9yZS5kaXNwYXRjaChKcSh7c291cmNlRmlsZXM6ZX0pKX0pKSxodCgoKCk9Pnt9KSkpKSkpfW9uU291cmNlRmlsZUZvY3VzZWQoKXtyZXR1cm4gdGhpcy5hY3Rpb25zJC5waXBlKHhTKFFxKSxrbih0aGlzLnN0b3JlLnNlbGVjdCh5WiksdGhpcy5zdG9yZS5zZWxlY3QobFgpLHRoaXMuc3RvcmUuc2VsZWN0KGNYKSksaHQoKChbdCxlLG4sb10pPT4oe3J1bklkOmUsc3RhY2tGcmFtZTp0LnN0YWNrRnJhbWUsZmlsZUluZGV4Om4sZmlsZUNvbnRlbnQ6b30pKSksR3QoKCh7cnVuSWQ6dCxmaWxlQ29udGVudDplfSk9Pm51bGwhPT10JiZudWxsIT09ZSYmZS5sb2FkU3RhdGU9PT1CRS5OT1RfTE9BREVEKSksX24oKCh7c3RhY2tGcmFtZTp0fSk9PnRoaXMuc3RvcmUuZGlzcGF0Y2goJHEoe2hvc3RfbmFtZTp0Lmhvc3RfbmFtZSxmaWxlX3BhdGg6dC5maWxlX3BhdGh9KSkpKSxUdCgoKHtmaWxlSW5kZXg6dCxydW5JZDplfSk9PnRoaXMuZGF0YVNvdXJjZS5mZXRjaFNvdXJjZUZpbGUoZSx0KS5waXBlKF9uKCh0PT57dGhpcy5zdG9yZS5kaXNwYXRjaCh0Wih0KSl9KSksaHQoKCgpPT57fSkpKSkpKX19UEouybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFBKKSh1cyh2UyksdXMoRWspLHVzKHlxKSl9LFBKLsm1cHJvdj1sbyh7dG9rZW46UEosZmFjdG9yeTpQSi7JtWZhY30pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoUEosW3t0eXBlOkptfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOnZTfSx7dHlwZTpFa30se3R5cGU6eXF9XX0pLG51bGwpO2NsYXNzIHdKe313Si7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8d0opfSx3Si7JtW1vZD1abyh7dHlwZTp3Sn0pLHdKLsm1aW5qPWNvKHtpbXBvcnRzOltbQnZdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8od0ose2RlY2xhcmF0aW9uczpbZlgsaFhdLGltcG9ydHM6W0J2XSxleHBvcnRzOltoWF19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHdKLFt7dHlwZTprXyxhcmdzOlt7ZGVjbGFyYXRpb25zOltmWCxoWF0saW1wb3J0czpbQnZdLGV4cG9ydHM6W2hYXX1dfV0sbnVsbCxudWxsKTtjbGFzcyBrSnt9a0ouybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGtKKX0sa0ouybVtb2Q9Wm8oe3R5cGU6a0p9KSxrSi7JtWluaj1jbyh7aW1wb3J0czpbW0J2XV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKGtKLHtkZWNsYXJhdGlvbnM6W0VLLF9LLEFLXSxpbXBvcnRzOltCdl0sZXhwb3J0czpbQUtdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihrSixbe3R5cGU6a18sYXJnczpbe2RlY2xhcmF0aW9uczpbRUssX0ssQUtdLGltcG9ydHM6W0J2XSxleHBvcnRzOltBS119XX1dLG51bGwsbnVsbCk7Y2xhc3MgU0p7fVNKLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxTSil9LFNKLsm1bW9kPVpvKHt0eXBlOlNKfSksU0ouybVpbmo9Y28oe2ltcG9ydHM6W1tCdl1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhTSix7ZGVjbGFyYXRpb25zOltXWCxaWCxxWCxHWCxZWCxYWF0saW1wb3J0czpbQnZdLGV4cG9ydHM6W1hYXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoU0osW3t0eXBlOmtfLGFyZ3M6W3tkZWNsYXJhdGlvbnM6W1dYLFpYLHFYLEdYLFlYLFhYXSxpbXBvcnRzOltCdl0sZXhwb3J0czpbWFhdfV19XSxudWxsLG51bGwpO2NsYXNzIERKe31ESi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8REopfSxESi7JtW1vZD1abyh7dHlwZTpESn0pLERKLsm1aW5qPWNvKHtpbXBvcnRzOltbQnYsU0osaUZdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oREose2RlY2xhcmF0aW9uczpbQkssVktdLGltcG9ydHM6W0J2LFNKLGlGXSxleHBvcnRzOltWS119KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKERKLFt7dHlwZTprXyxhcmdzOlt7ZGVjbGFyYXRpb25zOltCSyxWS10saW1wb3J0czpbQnYsU0osaUZdLGV4cG9ydHM6W1ZLXX1dfV0sbnVsbCxudWxsKTtjbGFzcyBFSnt9RUouybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEVKKX0sRUouybVtb2Q9Wm8oe3R5cGU6RUp9KSxFSi7JtWluaj1jbyh7fSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhFSix7ZGVjbGFyYXRpb25zOltDcSxNcV0sZXhwb3J0czpbTXFdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihFSixbe3R5cGU6a18sYXJnczpbe2RlY2xhcmF0aW9uczpbQ3EsTXFdLGV4cG9ydHM6W01xXX1dfV0sbnVsbCxudWxsKTtjbGFzcyBBSnt9QUouybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEFKKX0sQUouybVtb2Q9Wm8oe3R5cGU6QUp9KSxBSi7JtWluaj1jbyh7fSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhBSix7ZGVjbGFyYXRpb25zOltxS10sZXhwb3J0czpbcUtdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihBSixbe3R5cGU6a18sYXJnczpbe2V4cG9ydHM6W3FLXSxkZWNsYXJhdGlvbnM6W3FLXX1dfV0sbnVsbCxudWxsKTtjb25zdCBSSj1bImNvZGVWaWV3ZXJDb250YWluZXIiXTtjbGFzcyBUSntjb25zdHJ1Y3Rvcigpe3RoaXMuZmlyc3RUZXh0PW51bGwsdGhpcy5zZWNvbmRUZXh0PW51bGwsdGhpcy5yZW5kZXJTaWRlQnlTaWRlPSEwLHRoaXMubW9uYWNvPW51bGwsdGhpcy5lZGl0b3I9bnVsbCx0aGlzLlJFU0laRV9ERUJPVU5DRV9JTlRFUlZBTF9NUz01MH1vblJlc2l6ZSgpe3RoaXMuZWRpdG9yJiZ0aGlzLmVkaXRvci5sYXlvdXQoKX1uZ09uQ2hhbmdlcyh0KXtpZighdGhpcy5tb25hY28pcmV0dXJuO2NvbnN0IGU9IXRoaXMuZWRpdG9yO2UmJih0aGlzLmVkaXRvcj10aGlzLm1vbmFjby5lZGl0b3IuY3JlYXRlRGlmZkVkaXRvcih0aGlzLmNvZGVWaWV3ZXJDb250YWluZXIubmF0aXZlRWxlbWVudCx7cmVhZE9ubHk6ITAsZm9udFNpemU6MTAsbWluaW1hcDp7ZW5hYmxlZDohMH0scmVuZGVyU2lkZUJ5U2lkZTp0aGlzLnJlbmRlclNpZGVCeVNpZGUsdGhlbWU6WUsodGhpcy51c2VEYXJrTW9kZSl9KSksKGV8fHQuZmlyc3RUZXh0fHx0LnNlY29uZFRleHQpJiZ0aGlzLmVkaXRvci5zZXRNb2RlbCh7b3JpZ2luYWw6dGhpcy5tb25hY28uZWRpdG9yLmNyZWF0ZU1vZGVsKHRoaXMuZmlyc3RUZXh0fHwiIiksbW9kaWZpZWQ6dGhpcy5tb25hY28uZWRpdG9yLmNyZWF0ZU1vZGVsKHRoaXMuc2Vjb25kVGV4dHx8IiIpfSksdC5yZW5kZXJTaWRlQnlTaWRlJiZ0aGlzLmVkaXRvci51cGRhdGVPcHRpb25zKHtyZW5kZXJTaWRlQnlTaWRlOnRoaXMucmVuZGVyU2lkZUJ5U2lkZX0pLHQudXNlRGFya01vZGUmJnRoaXMubW9uYWNvLmVkaXRvci5zZXRUaGVtZShZSyh0aGlzLnVzZURhcmtNb2RlKSl9fVRKLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxUSil9LFRKLsm1Y21wPVVvKHt0eXBlOlRKLHNlbGVjdG9yczpbWyJzb3VyY2UtY29kZS1kaWZmLWNvbXBvbmVudCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24gdChlLG4pe2lmKDEmZSYmV2IoUkosMyxjaCksMiZlKXtsZXQgdDtVYih0PVliKCkpJiYobi5jb2RlVmlld2VyQ29udGFpbmVyPXQuZmlyc3QpfX0saW5wdXRzOntmaXJzdFRleHQ6ImZpcnN0VGV4dCIsc2Vjb25kVGV4dDoic2Vjb25kVGV4dCIscmVuZGVyU2lkZUJ5U2lkZToicmVuZGVyU2lkZUJ5U2lkZSIsbW9uYWNvOiJtb25hY28iLHVzZURhcmtNb2RlOiJ1c2VEYXJrTW9kZSJ9LGZlYXR1cmVzOltTaV0sZGVjbHM6Mix2YXJzOjEsY29uc3RzOltbImRldGVjdFJlc2l6ZSIsIiIsMSwiY29kZS12aWV3ZXItY29udGFpbmVyIiwzLCJyZXNpemVFdmVudERlYm91bmNlUGVyaW9kSW5NcyIsIm9uUmVzaXplIl0sWyJjb2RlVmlld2VyQ29udGFpbmVyIiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihPdSgwLCJkaXYiLDAsMSksTnUoIm9uUmVzaXplIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uUmVzaXplKCl9KSksUHUoKSksMiZlJiZ2dSgicmVzaXplRXZlbnREZWJvdW5jZVBlcmlvZEluTXMiLG4uUkVTSVpFX0RFQk9VTkNFX0lOVEVSVkFMX01TKX0sZGlyZWN0aXZlczpbcUtdLHN0eWxlczpbIi5jb2RlLXZpZXdlci1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgfSJdLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihUSixbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJzb3VyY2UtY29kZS1kaWZmLWNvbXBvbmVudCIsdGVtcGxhdGU6J1xuICAgIDxkaXZcbiAgICAgICNjb2RlVmlld2VyQ29udGFpbmVyXG4gICAgICBjbGFzcz0iY29kZS12aWV3ZXItY29udGFpbmVyIlxuICAgICAgZGV0ZWN0UmVzaXplXG4gICAgICBbcmVzaXplRXZlbnREZWJvdW5jZVBlcmlvZEluTXNdPSJSRVNJWkVfREVCT1VOQ0VfSU5URVJWQUxfTVMiXG4gICAgICAob25SZXNpemUpPSJvblJlc2l6ZSgpIlxuICAgID48L2Rpdj5cbiAgJyxzdHlsZXM6WyJcbiAgICAgIC5jb2RlLXZpZXdlci1jb250YWluZXIge1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICB9XG4gICAgIl0sY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sbnVsbCx7Zmlyc3RUZXh0Olt7dHlwZTp5X31dLHNlY29uZFRleHQ6W3t0eXBlOnlffV0scmVuZGVyU2lkZUJ5U2lkZTpbe3R5cGU6eV99XSxtb25hY286W3t0eXBlOnlffV0sdXNlRGFya01vZGU6W3t0eXBlOnlffV0sY29kZVZpZXdlckNvbnRhaW5lcjpbe3R5cGU6RnIsYXJnczpbImNvZGVWaWV3ZXJDb250YWluZXIiLHtzdGF0aWM6ITAscmVhZDpjaH1dfV19KTtjbGFzcyBOSntjb25zdHJ1Y3Rvcigpe3RoaXMuZmlyc3RUZXh0PW51bGwsdGhpcy5zZWNvbmRUZXh0PW51bGwsdGhpcy5yZW5kZXJTaWRlQnlTaWRlPSEwLHRoaXMudXNlRGFya01vZGU9ITEsdGhpcy5tb25hY28kPW51bGx9bmdPbkluaXQoKXt0aGlzLm1vbmFjbyQ9UnQoR0soKSkucGlwZShodCgoKCk9PndpbmRvdy5tb25hY28pKSl9fU5KLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxOSil9LE5KLsm1Y21wPVVvKHt0eXBlOk5KLHNlbGVjdG9yczpbWyJzb3VyY2UtY29kZS1kaWZmIl1dLGlucHV0czp7Zmlyc3RUZXh0OiJmaXJzdFRleHQiLHNlY29uZFRleHQ6InNlY29uZFRleHQiLHJlbmRlclNpZGVCeVNpZGU6InJlbmRlclNpZGVCeVNpZGUiLHVzZURhcmtNb2RlOiJ1c2VEYXJrTW9kZSJ9LGRlY2xzOjIsdmFyczo3LGNvbnN0czpbWzMsImZpcnN0VGV4dCIsInNlY29uZFRleHQiLCJyZW5kZXJTaWRlQnlTaWRlIiwibW9uYWNvIiwidXNlRGFya01vZGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKHd1KDAsInNvdXJjZS1jb2RlLWRpZmYtY29tcG9uZW50IiwwKSxPYigxLCJhc3luYyIpKSwyJmUmJnZ1KCJmaXJzdFRleHQiLG4uZmlyc3RUZXh0KSgic2Vjb25kVGV4dCIsbi5zZWNvbmRUZXh0KSgicmVuZGVyU2lkZUJ5U2lkZSIsbi5yZW5kZXJTaWRlQnlTaWRlKSgibW9uYWNvIixQYigxLDUsbi5tb25hY28kKSkoInVzZURhcmtNb2RlIixuLnVzZURhcmtNb2RlKX0sZGlyZWN0aXZlczpbVEpdLHBpcGVzOltNdl0sc3R5bGVzOlsic291cmNlLWNvZGUtZGlmZi1jb21wb25lbnRbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoTkosW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3Rvcjoic291cmNlLWNvZGUtZGlmZiIsdGVtcGxhdGU6J1xuICAgIDxzb3VyY2UtY29kZS1kaWZmLWNvbXBvbmVudFxuICAgICAgW2ZpcnN0VGV4dF09ImZpcnN0VGV4dCJcbiAgICAgIFtzZWNvbmRUZXh0XT0ic2Vjb25kVGV4dCJcbiAgICAgIFtyZW5kZXJTaWRlQnlTaWRlXT0icmVuZGVyU2lkZUJ5U2lkZSJcbiAgICAgIFttb25hY29dPSJtb25hY28kIHwgYXN5bmMiXG4gICAgICBbdXNlRGFya01vZGVdPSJ1c2VEYXJrTW9kZSJcbiAgICA+PC9zb3VyY2UtY29kZS1kaWZmLWNvbXBvbmVudD5cbiAgJyxzdHlsZXM6WyJcbiAgICAgIHNvdXJjZS1jb2RlLWRpZmYtY29tcG9uZW50IHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIH1cbiAgICAiXSxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSxudWxsLHtmaXJzdFRleHQ6W3t0eXBlOnlffV0sc2Vjb25kVGV4dDpbe3R5cGU6eV99XSxyZW5kZXJTaWRlQnlTaWRlOlt7dHlwZTp5X31dLHVzZURhcmtNb2RlOlt7dHlwZTp5X31dfSk7Y2xhc3MgSUp7fUlKLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxJSil9LElKLsm1bW9kPVpvKHt0eXBlOklKfSksSUouybVpbmo9Y28oe2ltcG9ydHM6W1tCdixBSl1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhJSix7ZGVjbGFyYXRpb25zOltYSyxLSyxUSixOSl0saW1wb3J0czpbQnYsQUpdLGV4cG9ydHM6W0tLLE5KXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoSUosW3t0eXBlOmtfLGFyZ3M6W3tkZWNsYXJhdGlvbnM6W1hLLEtLLFRKLE5KXSxpbXBvcnRzOltCdixBSl0sZXhwb3J0czpbS0ssTkpdfV19XSxudWxsLG51bGwpO2NsYXNzIHpKe316Si7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8ekopfSx6Si7JtW1vZD1abyh7dHlwZTp6Sn0pLHpKLsm1aW5qPWNvKHtpbXBvcnRzOltbQnYsSUpdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oekose2RlY2xhcmF0aW9uczpbdEosZUpdLGltcG9ydHM6W0J2LElKXSxleHBvcnRzOltlSl19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHpKLFt7dHlwZTprXyxhcmdzOlt7ZGVjbGFyYXRpb25zOlt0SixlSl0saW1wb3J0czpbQnYsSUpdLGV4cG9ydHM6W2VKXX1dfV0sbnVsbCxudWxsKTtjbGFzcyBISnt9SEouybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEhKKX0sSEouybVtb2Q9Wm8oe3R5cGU6SEp9KSxISi7JtWluaj1jbyh7aW1wb3J0czpbW0J2LElKXV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKEhKLHtkZWNsYXJhdGlvbnM6W2JKLHlKXSxpbXBvcnRzOltCdixJSl0sZXhwb3J0czpbeUpdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihISixbe3R5cGU6a18sYXJnczpbe2RlY2xhcmF0aW9uczpbYkoseUpdLGltcG9ydHM6W0J2LElKXSxleHBvcnRzOlt5Sl19XX1dLG51bGwsbnVsbCk7Y2xhc3MgRkp7fUZKLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxGSil9LEZKLsm1bW9kPVpvKHt0eXBlOkZKfSksRkouybVpbmo9Y28oe2ltcG9ydHM6W1tCdixTSl1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhGSix7ZGVjbGFyYXRpb25zOltlSyxvS10saW1wb3J0czpbQnYsU0pdLGV4cG9ydHM6W29LXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoRkosW3t0eXBlOmtfLGFyZ3M6W3tkZWNsYXJhdGlvbnM6W2VLLG9LXSxpbXBvcnRzOltCdixTSl0sZXhwb3J0czpbb0tdfV19XSxudWxsLG51bGwpO2NsYXNzIExKe31MSi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8TEopfSxMSi7JtW1vZD1abyh7dHlwZTpMSn0pLExKLsm1aW5qPWNvKHtpbXBvcnRzOltbQnYsRkosekgsUFhdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oTEose2RlY2xhcmF0aW9uczpbZEssbUtdLGltcG9ydHM6W0J2LEZKLHpILFBYXSxleHBvcnRzOlttS119KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKExKLFt7dHlwZTprXyxhcmdzOlt7ZGVjbGFyYXRpb25zOltkSyxtS10saW1wb3J0czpbQnYsRkosekgsUFhdLGV4cG9ydHM6W21LXX1dfV0sbnVsbCxudWxsKTtjbGFzcyBCSnt9QkouybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEJKKX0sQkouybVtb2Q9Wm8oe3R5cGU6Qkp9KSxCSi7JtWluaj1jbyh7aW1wb3J0czpbW3dKLEJ2LENBLERKLGtKLEVKLHpKLEhKLF9xLExKLGlTLmZvckZlYXR1cmUoblosZlopLExTLmZvckZlYXR1cmUoW1BKXSksYnEuZm9yUGx1Z2luKHhKLHZKKV1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhCSix7ZGVjbGFyYXRpb25zOltNSix2Sl0saW1wb3J0czpbd0osQnYsQ0EsREosa0osRUosekosSEosX3EsTEosb1MsRlMsYnFdLGV4cG9ydHM6W3ZKXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoQkosW3t0eXBlOmtfLGFyZ3M6W3tkZWNsYXJhdGlvbnM6W01KLHZKXSxpbXBvcnRzOlt3SixCdixDQSxESixrSixFSix6SixISixfcSxMSixpUy5mb3JGZWF0dXJlKG5aLGZaKSxMUy5mb3JGZWF0dXJlKFtQSl0pLGJxLmZvclBsdWdpbih4Six2SildLGV4cG9ydHM6W3ZKXSxlbnRyeUNvbXBvbmVudHM6W3ZKXX1dfV0sbnVsbCxudWxsKTtjb25zdCBWSj1XdygiW01ldHJpY3NdIE1ldHJpY3MgVGFnIE1ldGFkYXRhIFJlcXVlc3RlZCIpLGpKPVd3KCJbTWV0cmljc10gTWV0cmljcyBUYWcgTWV0YWRhdGEgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksVUo9V3coIltNZXRyaWNzXSBNZXRyaWNzIFRhZyBNZXRhZGF0YSBGYWlsZWQiKSxXSj1XdygiW01ldHJpY3NdIE1ldHJpY3MgU2V0dGluZ3MgQ2hhbmdlIFRvb2x0aXAiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KTtXdygiW01ldHJpY3NdIE1ldHJpY3MgU2V0dGluZ3MgVG9nZ2xlIFNob3cgRGF0YSBEb3dubG9hZCIpO2NvbnN0IEdKPVd3KCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5nIFRvZ2dsZSBJZ25vcmUgT3V0bGllciIpLFlKPVd3KCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5nIENoYW5nZSBYIEF4aXMgVHlwZSIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHFKPVd3KCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5nIENoYW5nZSBTY2FsYXIgU21vb3RoaW5nIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksWko9V3coIltNZXRyaWNzXSBNZXRyaWNzIFNldHRpbmcgUGFydGl0aW9uIE5vbiBNb25vdG9uaWMgWCBUb2dnbGVkIiksWEo9V3coIltNZXRyaWNzXSBNZXRyaWNzIFNldHRpbmcgQ2hhbmdlIEltYWdlIEJyaWdodG5lc3MiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxLSj1XdygiW01ldHJpY3NdIE1ldHJpY3MgU2V0dGluZyBDaGFuZ2UgSW1hZ2UgQ29udHJhc3QiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxKSj1XdygiW01ldHJpY3NdIEltYWdlIEJyaWdodG5lc3MgU2V0dGluZyBSZXNldCIpLFFKPVd3KCJbTWV0cmljc10gSW1hZ2UgQ29udHJhc3QgU2V0dGluZyBSZXNldCIpLCRKPVd3KCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5nIFRvZ2dsZSBJbWFnZSBTaG93IEFjdHVhbCBTaXplIiksdFE9V3coIltNZXRyaWNzXSBNZXRyaWNzIFNldHRpbmcgQ2hhbmdlIEhpc3RvZ3JhbSBNb2RlIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksZVE9V3coIltNZXRyaWNzXSBNdWx0aXBsZSBUaW1lIFNlcmllcyBSZXF1ZXN0ZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxuUT1XdygiW01ldHJpY3NdIEZldGNoIFRpbWUgU2VyaWVzIFJlcXVlc3QgRmFpbGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksb1E9V3coIltNZXRyaWNzXSBGZXRjaCBUaW1lIFNlcmllcyBSZXNwb25zZSBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxpUT1XdygiW01ldHJpY3NdIENhcmQgVmlzaWJpbGl0eSBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksYVE9V3coIltNZXRyaWNzXSBDYXJkIFN0ZXAgU2xpZGVyIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxyUT1XdygiW01ldHJpY3NdIFRhZyBGaWx0ZXIgQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHNRPVd3KCJbTWV0cmljc10gTWV0cmljcyBUYWcgR3JvdXAgRXhwYW5zaW9uIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxsUT1XdygiW01ldHJpY3NdIENhcmQgUGluIFN0YXRlIFRvZ2dsZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxjUT1XdygiW01ldHJpY3NdIExpbmtlZCBUaW1lIFNlbGVjdGlvbiBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksZFE9V3coIltNZXRyaWNzXSBMaW5rZWQgVGltZSBTZWxlY3Rpb24gQ2xlYXJlZCIpO2Z1bmN0aW9uIHBRKHQsZSl7Y29uc3Qgbj17fTtmb3IoY29uc3QgbyBvZiBPYmplY3Qua2V5cyh0KSluW29dPWUodFtvXSxvKTtyZXR1cm4gbn1mdW5jdGlvbiBtUSh0LGUsbil7Y29uc3R7cGx1Z2luOm8sdGFnOmkscnVuSWQ6YSxzYW1wbGU6cn09ZVt0XSxzPXBUKG4sbyxpLHIpO2lmKHMpe2lmKG51bGwhPT1hJiZzLnJ1blRvU2VyaWVzLmhhc093blByb3BlcnR5KGEpKXtjb25zdCB0PXMucnVuVG9TZXJpZXNbYV0ubGVuZ3RoO3JldHVybiB0PjA/dC0xOm51bGx9Y29uc3QgdD1PYmplY3QudmFsdWVzKHMucnVuVG9TZXJpZXMpLm1hcCgodD0+dC5sZW5ndGgpKTtpZih0Lmxlbmd0aClyZXR1cm4gTWF0aC5tYXgoLi4udCktMX1yZXR1cm4gbnVsbH1mdW5jdGlvbiB1USh0LGUsbixvKXtjb25zdCBpPU9iamVjdC5hc3NpZ24oe30sZSk7Zm9yKGNvbnN0IGEgaW4gdCl7aWYoIXQuaGFzT3duUHJvcGVydHkoYSkpY29udGludWU7Y29uc3Qgcj1tUShhLHQsbik7aWYobnVsbD09PXIpe2UuaGFzT3duUHJvcGVydHkoYSkmJihpW2FdPW51bGwpO2NvbnRpbnVlfWNvbnN0IHM9ZS5oYXNPd25Qcm9wZXJ0eShhKT9lW2FdOm51bGwsbD1tUShhLHQsbyksYz1udWxsIT09cyYmcz09PWwsZD1udWxsPT09c3x8YzsobnVsbCE9PXMmJnM+cnx8ZCkmJihpW2FdPXIpfXJldHVybiBpfWZ1bmN0aW9uIGZRKHQpe2NvbnN0IGU9cFEodC5ydW5Ub0xvYWRTdGF0ZSwodD0+dD09PUJFLkxPQURJTkc/QkUuTE9BRElORzpCRS5OT1RfTE9BREVEKSk7cmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7cnVuVG9Mb2FkU3RhdGU6ZX0pfWZ1bmN0aW9uIGdRKHQsZSxuLG8pe3JldHVybiBKU09OLnN0cmluZ2lmeShbdCxlLG58fCIiLG9dKX1jb25zdHtpbml0aWFsU3RhdGU6aFEscmVkdWNlcnM6YlF9PU9OKHt0YWdNZXRhZGF0YUxvYWRlZDpCRS5OT1RfTE9BREVELHRhZ01ldGFkYXRhOntzY2FsYXJzOnt0YWdEZXNjcmlwdGlvbnM6e30sdGFnVG9SdW5zOnt9fSxoaXN0b2dyYW1zOnt0YWdEZXNjcmlwdGlvbnM6e30sdGFnVG9SdW5zOnt9fSxpbWFnZXM6e3RhZ0Rlc2NyaXB0aW9uczp7fSx0YWdSdW5TYW1wbGVkSW5mbzp7fX19LGNhcmRMaXN0OltdLGNhcmRUb1Bpbm5lZENvcHk6bmV3IE1hcCxwaW5uZWRDYXJkVG9PcmlnaW5hbDpuZXcgTWFwLHVucmVzb2x2ZWRJbXBvcnRlZFBpbm5lZENhcmRzOltdLGNhcmRNZXRhZGF0YU1hcDp7fSxjYXJkU3RlcEluZGV4Ont9LHRhZ0ZpbHRlcjoiIix0YWdHcm91cEV4cGFuZGVkOm5ldyBNYXAsc2VsZWN0ZWRUaW1lOm51bGx9LHt0aW1lU2VyaWVzRGF0YTp7c2NhbGFyczp7fSxoaXN0b2dyYW1zOnt9LGltYWdlczp7fX0sc2V0dGluZ3M6Q1Qsc2V0dGluZ092ZXJyaWRlczp7fSx2aXNpYmxlQ2FyZHM6bmV3IFNldH0sKHQ9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7dmlzaWJsZUNhcmRzOm5ldyBTZXR9KSkpLHlRPWhRLF9RPW1TKGhRLHBTKHRELCgodCx7cm91dGVLaW5kOmUscGFydGlhbFN0YXRlOm59KT0+e2lmKGUhPT1qUy5FWFBFUklNRU5UJiZlIT09alMuQ09NUEFSRV9FWFBFUklNRU5UKXJldHVybiB0O2NvbnN0IG89bmV3IFNldDtmb3IoY29uc3QgZSBvZiB0LnBpbm5lZENhcmRUb09yaWdpbmFsLmtleXMoKSl7Y29uc3R7cGx1Z2luOm4sdGFnOmkscnVuSWQ6YSxzYW1wbGU6cn09dC5jYXJkTWV0YWRhdGFNYXBbZV07by5hZGQoZ1EobixpLGEscikpfWNvbnN0IGk9bixhPVtdO2Zvcihjb25zdCBlIG9mWy4uLnQudW5yZXNvbHZlZEltcG9ydGVkUGlubmVkQ2FyZHMsLi4uaS5tZXRyaWNzLnBpbm5lZENhcmRzXSl7Y29uc3QgdD1nUShlLnBsdWdpbixlLnRhZyxlLnJ1bklkLGUuc2FtcGxlKTtvLmhhcyh0KXx8KG8uYWRkKHQpLGEucHVzaChlKSl9Y29uc3Qgcj1oVChhLHQuY2FyZExpc3QsdC5jYXJkTWV0YWRhdGFNYXAsdC5jYXJkVG9QaW5uZWRDb3B5LHQucGlubmVkQ2FyZFRvT3JpZ2luYWwsdC5jYXJkU3RlcEluZGV4KSxzPWkubWV0cmljcy5zbW9vdGhpbmc7bGV0IGw9dC5zZXR0aW5nT3ZlcnJpZGVzO2lmKE51bWJlci5pc0Zpbml0ZShzKSYmbnVsbCE9PXMpe2NvbnN0IGU9TWF0aC5tYXgoMCxNYXRoLm1pbiguOTk5LE51bWJlcihzLnRvUHJlY2lzaW9uKDMpKSkpO2w9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuc2V0dGluZ092ZXJyaWRlcykse3NjYWxhclNtb290aGluZzplfSl9cmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHIpLHtzZXR0aW5nT3ZlcnJpZGVzOmx9KX0pKSxwUyhQUiwoKHQse3BhcnRpYWxTZXR0aW5nczplfSk9Pntjb25zdCBuPXt9O2lmKGUudG9vbHRpcFNvcnRTdHJpbmcpc3dpdGNoKGUudG9vbHRpcFNvcnRTdHJpbmcpe2Nhc2UgbFIuQVNDRU5ESU5HOm4udG9vbHRpcFNvcnQ9bFIuQVNDRU5ESU5HO2JyZWFrO2Nhc2UgbFIuREVTQ0VORElORzpuLnRvb2x0aXBTb3J0PWxSLkRFU0NFTkRJTkc7YnJlYWs7Y2FzZSBsUi5ERUZBVUxUOm4udG9vbHRpcFNvcnQ9bFIuREVGQVVMVDticmVhaztjYXNlIGxSLk5FQVJFU1Q6bi50b29sdGlwU29ydD1sUi5ORUFSRVNUfXJldHVybiJib29sZWFuIj09dHlwZW9mIGUuaWdub3JlT3V0bGllcnMmJihuLmlnbm9yZU91dGxpZXJzPWUuaWdub3JlT3V0bGllcnMpLCJudW1iZXIiPT10eXBlb2YgZS5zY2FsYXJTbW9vdGhpbmcmJihuLnNjYWxhclNtb290aGluZz1lLnNjYWxhclNtb290aGluZyksT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtzZXR0aW5nczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5zZXR0aW5ncyksbil9KX0pKSxwUyhHRSxXRSwodD0+e2NvbnN0IGU9dC50YWdNZXRhZGF0YUxvYWRlZD09PUJFLkxPQURJTkc/QkUuTE9BRElORzpCRS5OT1RfTE9BREVELG49cFEodC50aW1lU2VyaWVzRGF0YSwoKHQsZSk9PnBRKHQsKHQ9Pm1SKGUpP3BRKHQsKHQ9PmZRKHQpKSk6ZlEodCkpKSkpO3JldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3RhZ01ldGFkYXRhTG9hZGVkOmUsdGltZVNlcmllc0RhdGE6bn0pfSkpLHBTKFZKLCh0PT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3RhZ01ldGFkYXRhTG9hZGVkOkJFLkxPQURJTkd9KSkpLHBTKFVKLCh0PT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3RhZ01ldGFkYXRhTG9hZGVkOkJFLkZBSUxFRH0pKSkscFMoakosKCh0LHt0YWdNZXRhZGF0YTplfSk9Pntjb25zdCBuPXtzY2FsYXJzOk1RKGUsc1IuU0NBTEFSUyksaGlzdG9ncmFtczpNUShlLHNSLkhJU1RPR1JBTVMpLGltYWdlczplW3NSLklNQUdFU119LG89T2JqZWN0LmFzc2lnbih7fSx0LmNhcmRNZXRhZGF0YU1hcCksaT0oZnVuY3Rpb24gYSh0KXtjb25zdCBlPVtdO2ZvcihsZXQgbiBvZiBPYmplY3Qua2V5cyh0KSl7Y29uc3Qgbz1uO2xldCBpO2lmKG1SKG8pKXtpZighZlIobykpdGhyb3cgbmV3IEVycm9yKCJNdWx0aS1ydW4sIHNhbXBsZWQgcGx1Z2luIHN1cHBvcnQgbm90IHlldCBpbXBsZW1lbnRlZCIpO3tjb25zdCBuPXRbb10udGFnUnVuU2FtcGxlZEluZm87Zm9yKGNvbnN0IHQgb2YgT2JqZWN0LmtleXMobikpZm9yKGNvbnN0IGkgb2YgT2JqZWN0LmtleXMoblt0XSkpe2NvbnN0e21heFNhbXBsZXNQZXJTdGVwOmF9PW5bdF1baV07Zm9yKGxldCBuPTA7bjxhO24rKyllLnB1c2goe3BsdWdpbjpvLHRhZzp0LHJ1bklkOmksc2FtcGxlOm59KX19fWVsc2UgaWYoZlIobykpe2k9dFtvXS50YWdUb1J1bnM7Zm9yKGNvbnN0IHQgb2YgT2JqZWN0LmtleXMoaSkpZm9yKGNvbnN0IG4gb2YgaVt0XSllLnB1c2goe3BsdWdpbjpvLHRhZzp0LHJ1bklkOm59KX1lbHNle2k9dFtvXS50YWdUb1J1bnM7Zm9yKGNvbnN0IHQgb2YgT2JqZWN0LmtleXMoaSkpZS5wdXNoKHtwbHVnaW46byx0YWc6dCxydW5JZDpudWxsfSl9fXJldHVybiBlfSkobikscj1bXTtmb3IoY29uc3QgZSBvZiBpKXtjb25zdCBuPXVUKGUpO3QuY2FyZE1ldGFkYXRhTWFwLmhhc093blByb3BlcnR5KG4pfHwob1tuXT1lLHIucHVzaChuKSl9Y29uc3Qgcz1bLi4udC5jYXJkTGlzdCwuLi5yXSxsPWhUKHQudW5yZXNvbHZlZEltcG9ydGVkUGlubmVkQ2FyZHMscixvLHQuY2FyZFRvUGlubmVkQ29weSx0LnBpbm5lZENhcmRUb09yaWdpbmFsLHQuY2FyZFN0ZXBJbmRleCk7cmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLGwpLHt0YWdNZXRhZGF0YUxvYWRlZDpCRS5MT0FERUQsdGFnTWV0YWRhdGE6bixjYXJkTGlzdDpzfSl9KSkscFMoclEsKCh0LHt0YWdGaWx0ZXI6ZX0pPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3RhZ0ZpbHRlcjplfSkpKSxwUyhXSiwoKHQse3NvcnQ6ZX0pPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3NldHRpbmdPdmVycmlkZXM6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuc2V0dGluZ092ZXJyaWRlcykse3Rvb2x0aXBTb3J0OmV9KX0pKSkscFMoR0osKHQ9Pnt2YXIgZTtjb25zdCBuPSEobnVsbCE9PShlPXQuc2V0dGluZ092ZXJyaWRlcy5pZ25vcmVPdXRsaWVycykmJnZvaWQgMCE9PWU/ZTp0LnNldHRpbmdzLmlnbm9yZU91dGxpZXJzKTtyZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtzZXR0aW5nT3ZlcnJpZGVzOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LnNldHRpbmdPdmVycmlkZXMpLHtpZ25vcmVPdXRsaWVyczpufSl9KX0pKSxwUyhZSiwoKHQse3hBeGlzVHlwZTplfSk9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7c2V0dGluZ092ZXJyaWRlczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5zZXR0aW5nT3ZlcnJpZGVzKSx7eEF4aXNUeXBlOmV9KX0pKSkscFMocUosKCh0LHtzbW9vdGhpbmc6ZX0pPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3NldHRpbmdPdmVycmlkZXM6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuc2V0dGluZ092ZXJyaWRlcykse3NjYWxhclNtb290aGluZzplfSl9KSkpLHBTKFpKLCh0PT57dmFyIGU7Y29uc3Qgbj0hKG51bGwhPT0oZT10LnNldHRpbmdPdmVycmlkZXMuc2NhbGFyUGFydGl0aW9uTm9uTW9ub3RvbmljWCkmJnZvaWQgMCE9PWU/ZTp0LnNldHRpbmdzLnNjYWxhclBhcnRpdGlvbk5vbk1vbm90b25pY1gpO3JldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3NldHRpbmdPdmVycmlkZXM6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuc2V0dGluZ092ZXJyaWRlcykse3NjYWxhclBhcnRpdGlvbk5vbk1vbm90b25pY1g6bn0pfSl9KSkscFMoWEosKCh0LHticmlnaHRuZXNzSW5NaWxsaTplfSk9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7c2V0dGluZ092ZXJyaWRlczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5zZXR0aW5nT3ZlcnJpZGVzKSx7aW1hZ2VCcmlnaHRuZXNzSW5NaWxsaTplfSl9KSkpLHBTKEtKLCgodCx7Y29udHJhc3RJbk1pbGxpOmV9KT0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtzZXR0aW5nT3ZlcnJpZGVzOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LnNldHRpbmdPdmVycmlkZXMpLHtpbWFnZUNvbnRyYXN0SW5NaWxsaTplfSl9KSkpLHBTKEpKLCh0PT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3NldHRpbmdPdmVycmlkZXM6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuc2V0dGluZ092ZXJyaWRlcykse2ltYWdlQnJpZ2h0bmVzc0luTWlsbGk6dm9pZCAwfSl9KSkpLHBTKFFKLCh0PT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3NldHRpbmdPdmVycmlkZXM6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuc2V0dGluZ092ZXJyaWRlcykse2ltYWdlQ29udHJhc3RJbk1pbGxpOnZvaWQgMH0pfSkpKSxwUygkSiwodD0+e3ZhciBlO2NvbnN0IG49IShudWxsIT09KGU9dC5zZXR0aW5nT3ZlcnJpZGVzLmltYWdlU2hvd0FjdHVhbFNpemUpJiZ2b2lkIDAhPT1lP2U6dC5zZXR0aW5ncy5pbWFnZVNob3dBY3R1YWxTaXplKTtyZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtzZXR0aW5nT3ZlcnJpZGVzOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LnNldHRpbmdPdmVycmlkZXMpLHtpbWFnZVNob3dBY3R1YWxTaXplOm59KX0pfSkpLHBTKHRRLCgodCx7aGlzdG9ncmFtTW9kZTplfSk9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7c2V0dGluZ092ZXJyaWRlczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5zZXR0aW5nT3ZlcnJpZGVzKSx7aGlzdG9ncmFtTW9kZTplfSl9KSkpLHBTKGVRLCgodCx7cmVxdWVzdHM6ZX0pPT57aWYoIWUubGVuZ3RoKXJldHVybiB0O2NvbnN0IG49T2JqZWN0LmFzc2lnbih7fSx0LnRpbWVTZXJpZXNEYXRhKTtmb3IoY29uc3QgbyBvZiBlKXtjb25zdHtwbHVnaW46ZSx0YWc6aSxzYW1wbGU6YX09bztuW2VdPW1UKG4sZSxpLGEpO2NvbnN0IHI9cFQobixlLGksYSkscz1nUihvKT9bby5ydW5JZF06Z1QodC50YWdNZXRhZGF0YSxlLGksYSk7ci5ydW5Ub0xvYWRTdGF0ZT1mVChCRS5MT0FESU5HLHMsci5ydW5Ub0xvYWRTdGF0ZSl9cmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7dGltZVNlcmllc0RhdGE6bn0pfSkpLHBTKG5RLCgodCx7cmVxdWVzdDplfSk9Pntjb25zdCBuPU9iamVjdC5hc3NpZ24oe30sdC50aW1lU2VyaWVzRGF0YSkse3BsdWdpbjpvLHRhZzppLHNhbXBsZTphfT1lO25bb109bVQobixvLGksYSk7Y29uc3Qgcj1wVChuLG8saSxhKSxzPWdSKGUpP1tlLnJ1bklkXTpnVCh0LnRhZ01ldGFkYXRhLG8saSxhKTtyZXR1cm4gci5ydW5Ub0xvYWRTdGF0ZT1mVChCRS5GQUlMRUQscyxyLnJ1blRvTG9hZFN0YXRlKSxPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3RpbWVTZXJpZXNEYXRhOm59KX0pKSxwUyhvUSwoKHQse3Jlc3BvbnNlOmV9KT0+e2NvbnN0IG49T2JqZWN0LmFzc2lnbih7fSx0LnRpbWVTZXJpZXNEYXRhKSx7cGx1Z2luOm8sdGFnOmkscnVuSWQ6YSxzYW1wbGU6cn09ZTtuW29dPW1UKG4sbyxpLHIpO2NvbnN0IHM9cFQobixvLGkscik7aWYoYlIoZSkpe2NvbnN0IGU9YT9bYV06Z1QodC50YWdNZXRhZGF0YSxvLGkscik7cy5ydW5Ub0xvYWRTdGF0ZT1mVChCRS5GQUlMRUQsZSxzLnJ1blRvTG9hZFN0YXRlKX1lbHNle2NvbnN0IHQ9ZS5ydW5Ub1NlcmllcztzLnJ1blRvU2VyaWVzPU9iamVjdC5hc3NpZ24oe30scy5ydW5Ub1Nlcmllcykscy5ydW5Ub0xvYWRTdGF0ZT1PYmplY3QuYXNzaWduKHt9LHMucnVuVG9Mb2FkU3RhdGUpO2Zvcihjb25zdCBlIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShlKSYmKHMucnVuVG9TZXJpZXNbZV09dFtlXSxzLnJ1blRvTG9hZFN0YXRlW2VdPUJFLkxPQURFRCl9cmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7dGltZVNlcmllc0RhdGE6bixjYXJkU3RlcEluZGV4OnVRKHQuY2FyZE1ldGFkYXRhTWFwLHQuY2FyZFN0ZXBJbmRleCxuLHQudGltZVNlcmllc0RhdGEpfSl9KSkscFMoYVEsKCh0LHtjYXJkSWQ6ZSxzdGVwSW5kZXg6bn0pPT57Y29uc3Qgbz1tUShlLHQuY2FyZE1ldGFkYXRhTWFwLHQudGltZVNlcmllc0RhdGEpO2xldCBpPW47cmV0dXJuIG51bGw9PT1vP2k9bnVsbDpuPm8mJihpPW8pLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7Y2FyZFN0ZXBJbmRleDpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5jYXJkU3RlcEluZGV4KSx7W2VdOml9KX0pfSkpLHBTKHNRLCgodCx7dGFnR3JvdXA6ZX0pPT57Y29uc3Qgbj1uZXcgTWFwKHQudGFnR3JvdXBFeHBhbmRlZCk7cmV0dXJuIG4uc2V0KGUsIW4uZ2V0KGUpKSxPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3RhZ0dyb3VwRXhwYW5kZWQ6bn0pfSkpLHBTKGlRLCgodCx7ZW50ZXJlZENhcmRzOmUsZXhpdGVkQ2FyZHM6bn0pPT57aWYoMD09PWUuc2l6ZSYmMD09PW4uc2l6ZSlyZXR1cm4gdDtjb25zdCBvPW5ldyBTZXQodC52aXNpYmxlQ2FyZHMpO3JldHVybiBlLmZvckVhY2goKHQ9PntvLmFkZCh0KX0pKSxuLmZvckVhY2goKHQ9PntpZihvLmRlbGV0ZSh0KSxlLmhhcyh0KSl0aHJvdyBuZXcgRXJyb3IoIkEgJ2NhcmRWaXNpYmlsaXR5Q2hhbmdlZCcgd2l0aCBhbiBpbnZhbGlkIHBheWxvYWQgY29udGFpbnMgb3ZlcmxhcHBpbmcgc2V0cyIpfSkpLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7dmlzaWJsZUNhcmRzOm99KX0pKSxwUyhsUSwoKHQse2NhcmRJZDplfSk9Pntjb25zdCBuPXQucGlubmVkQ2FyZFRvT3JpZ2luYWwuaGFzKGUpLG89IW4mJiF0LmNhcmRUb1Bpbm5lZENvcHkuaGFzKGUpO2lmKG8mJiF5VCh0KSlyZXR1cm4gdDtsZXQgaT1uZXcgTWFwKHQuY2FyZFRvUGlubmVkQ29weSksYT1uZXcgTWFwKHQucGlubmVkQ2FyZFRvT3JpZ2luYWwpLHI9T2JqZWN0LmFzc2lnbih7fSx0LmNhcmRNZXRhZGF0YU1hcCkscz1PYmplY3QuYXNzaWduKHt9LHQuY2FyZFN0ZXBJbmRleCk7aWYobil7Y29uc3Qgbj10LnBpbm5lZENhcmRUb09yaWdpbmFsLmdldChlKTtpLmRlbGV0ZShuKSxhLmRlbGV0ZShlKSxkZWxldGUgcltlXSxkZWxldGUgc1tlXX1lbHNlIGlmKG8pe2NvbnN0IHQ9YlQoZSxpLGEscyxyKTtpPXQuY2FyZFRvUGlubmVkQ29weSxhPXQucGlubmVkQ2FyZFRvT3JpZ2luYWwscj10LmNhcmRNZXRhZGF0YU1hcCxzPXQuY2FyZFN0ZXBJbmRleH1lbHNle2NvbnN0IG49dC5jYXJkVG9QaW5uZWRDb3B5LmdldChlKTtpLmRlbGV0ZShlKSxhLmRlbGV0ZShuKSxkZWxldGUgcltuXSxkZWxldGUgc1tuXX1yZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtjYXJkTWV0YWRhdGFNYXA6cixjYXJkU3RlcEluZGV4OnMsY2FyZFRvUGlubmVkQ29weTppLHBpbm5lZENhcmRUb09yaWdpbmFsOmF9KX0pKSxwUyhjUSwoKHQsZSk9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7c2VsZWN0ZWRUaW1lOntzdGFydDp7c3RlcDplLnN0YXJ0U3RlcCx3YWxsVGltZTplLnN0YXJ0V2FsbFRpbWV9LGVuZDp2b2lkIDA9PT1lLmVuZFN0ZXB8fHZvaWQgMD09PWUuZW5kV2FsbFRpbWU/bnVsbDp7c3RlcDplLmVuZFN0ZXAsd2FsbFRpbWU6ZS5lbmRXYWxsVGltZX19fSkpKSxwUyhkUSwodD0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtzZWxlY3RlZFRpbWU6bnVsbH0pKSkpO2Z1bmN0aW9uIENRKHQsZSl7cmV0dXJuIFNOKF9RLGJRKSh0LGUpfWZ1bmN0aW9uIE1RKHQsZSl7cmV0dXJue3RhZ0Rlc2NyaXB0aW9uczp0W2VdLnRhZ0Rlc2NyaXB0aW9ucyx0YWdUb1J1bnM6dlEodFtlXS5ydW5UYWdJbmZvKX19ZnVuY3Rpb24gdlEodCl7Y29uc3QgZT17fTtmb3IoY29uc3QgbiBpbiB0KWZvcihjb25zdCBvIG9mIHRbbl0pZVtvXT1bLi4uZVtvXXx8W10sbl07cmV0dXJuIGV9Y29uc3QgeFE9emsoT1Qsa1QsKCh0LGUsbik9PmU/T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHtsb2FkU3RhdGU6dCxpZDpufSk6bnVsbCkpLE9RPVd3KCJbTWV0cmljcyBFZmZlY3RzXSBJbml0Iik7Y2xhc3MgUFF7Y29uc3RydWN0b3IodCxlLG4pe3RoaXMuYWN0aW9ucyQ9dCx0aGlzLnN0b3JlPWUsdGhpcy5kYXRhU291cmNlPW4sdGhpcy5kYXNoYm9hcmRTaG93bldpdGhvdXREYXRhJD10aGlzLmFjdGlvbnMkLnBpcGUoeFMoT1EsVkUsb0QpLGtuKHRoaXMuc3RvcmUuc2VsZWN0KGRBKSx0aGlzLnN0b3JlLnNlbGVjdCh2VCkpLEd0KCgoWyx0LGVdKT0+dD09PWRSJiZlPT09QkUuTk9UX0xPQURFRCkpKSx0aGlzLnJlbG9hZFJlcXVlc3RlZFdoaWxlU2hvd24kPXRoaXMuYWN0aW9ucyQucGlwZSh4UyhHRSxXRSksa24odGhpcy5zdG9yZS5zZWxlY3QoZEEpKSxHdCgoKFssdF0pPT50PT09ZFIpKSksdGhpcy5sb2FkVGFnTWV0YWRhdGEkPVd0KHRoaXMuZGFzaGJvYXJkU2hvd25XaXRob3V0RGF0YSQsdGhpcy5yZWxvYWRSZXF1ZXN0ZWRXaGlsZVNob3duJCkucGlwZShrbih0aGlzLnN0b3JlLnNlbGVjdCh2VCksdGhpcy5zdG9yZS5zZWxlY3QoeEQpKSxHdCgoKFssdCxlXSk9PnQhPT1CRS5MT0FESU5HJiZudWxsIT09ZSkpLF9uKCgoKT0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goVkooKSl9KSksZG4oKChbLCx0XSk9PnRoaXMuZGF0YVNvdXJjZS5mZXRjaFRhZ01ldGFkYXRhKHQpLnBpcGUoX24oKHQ9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKGpKKHt0YWdNZXRhZGF0YTp0fSkpfSkpLHJlKCgoKT0+KHRoaXMuc3RvcmUuZGlzcGF0Y2goVUooKSksWihudWxsKSkpKSkpKSksdGhpcy52aXNpYmxlQ2FyZHNXaXRob3V0RGF0YUNoYW5nZWQkPXRoaXMuYWN0aW9ucyQucGlwZSh4UyhpUSksZG4oKCgpPT50aGlzLmdldFZpc2libGVDYXJkRmV0Y2hJbmZvcygpLnBpcGUoTmUoMSkpKSksaHQoKHQ9PnQuZmlsdGVyKCh0PT50LmxvYWRTdGF0ZT09PUJFLk5PVF9MT0FERUQpKSkpKSx0aGlzLnZpc2libGVDYXJkc1JlbG9hZGVkJD10aGlzLnJlbG9hZFJlcXVlc3RlZFdoaWxlU2hvd24kLnBpcGUoZG4oKCgpPT50aGlzLmdldFZpc2libGVDYXJkRmV0Y2hJbmZvcygpLnBpcGUoTmUoMSkpKSksaHQoKHQ9PnQuZmlsdGVyKCh0PT50LmxvYWRTdGF0ZSE9PUJFLkxPQURJTkcpKSkpKSx0aGlzLmxvYWRUaW1lU2VyaWVzJD1XdCh0aGlzLnZpc2libGVDYXJkc1dpdGhvdXREYXRhQ2hhbmdlZCQsdGhpcy52aXNpYmxlQ2FyZHNSZWxvYWRlZCQpLnBpcGUoR3QoKHQ9PnQubGVuZ3RoPjApKSxrbih0aGlzLnN0b3JlLnNlbGVjdCh4RCkucGlwZShHdCgodD0+bnVsbCE9PXQpKSkpLFR0KCgoW3QsZV0pPT50aGlzLmZldGNoVGltZVNlcmllc0ZvckNhcmRzKHQsZSkpKSksdGhpcy5kYXRhRWZmZWN0cyQ9Z1MoKCgpPT5XdCh0aGlzLmxvYWRUYWdNZXRhZGF0YSQsdGhpcy5sb2FkVGltZVNlcmllcyQpKSx7ZGlzcGF0Y2g6ITF9KX1uZ3J4T25Jbml0RWZmZWN0cygpe3JldHVybiBPUSgpfWdldFZpc2libGVDYXJkRmV0Y2hJbmZvcygpe3JldHVybiB0aGlzLnN0b3JlLnNlbGVjdChEVCkucGlwZShkbigodD0+dC5zaXplP0x0KFsuLi50XS5tYXAoKHQ9PnRoaXMuc3RvcmUuc2VsZWN0KHhRLHQpLnBpcGUoTmUoMSkpKSkpOlooW10pKSksaHQoKHQ9PnQuZmlsdGVyKEJvb2xlYW4pKSkpfWZldGNoVGltZVNlcmllcyh0KXtyZXR1cm4gdGhpcy5kYXRhU291cmNlLmZldGNoVGltZVNlcmllcyhbdF0pLnBpcGUoX24oKHQ9Pntjb25zdCBlPXQuZmlsdGVyKGJSKTtlLmxlbmd0aCYmY29uc29sZS5lcnJvcigiVGltZSBzZXJpZXMgcmVzcG9uc2UgY29udGFpbmVkIGVycm9yczoiLGUpLHRoaXMuc3RvcmUuZGlzcGF0Y2gob1Eoe3Jlc3BvbnNlOnRbMF19KSl9KSkscmUoKCgpPT4odGhpcy5zdG9yZS5kaXNwYXRjaChuUSh7cmVxdWVzdDp0fSkpLFoobnVsbCkpKSkpfWZldGNoVGltZVNlcmllc0ZvckNhcmRzKHQsZSl7cmV0dXJuIFoodC5tYXAoKHQ9Pntjb25zdHtwbHVnaW46bix0YWc6byxydW5JZDppLHNhbXBsZTphfT10O3JldHVybiBmUihuKT97cGx1Z2luOm4sdGFnOm8sc2FtcGxlOmEscnVuSWQ6aX06e3BsdWdpbjpuLHRhZzpvLHNhbXBsZTphLGV4cGVyaW1lbnRJZHM6ZX19KSkpLnBpcGUoX24oKHQ9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKGVRKHtyZXF1ZXN0czp0fSkpfSkpLFR0KCh0PT5XdCguLi50Lm1hcCgodD0+dGhpcy5mZXRjaFRpbWVTZXJpZXModCkpKSkpKSl9fVBRLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxQUSkodXModlMpLHVzKEVrKSx1cyhoUikpfSxQUS7JtXByb3Y9bG8oe3Rva2VuOlBRLGZhY3Rvcnk6UFEuybVmYWN9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFBRLFt7dHlwZTpKbX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTp2U30se3R5cGU6RWt9LHt0eXBlOmhSfV19KSxudWxsKTtjb25zdCB3UT1uZXcgTnIoIk1ldHJpY3MgU3RvcmUgQ29uZmlnIiksa1E9bmV3IE5yKCJNZXRyaWNzIEluaXRpYWwgU2V0dGluZ3MgQ29uZmlnIik7ZnVuY3Rpb24gU1EodCl7cmV0dXJuIHQ/e2luaXRpYWxTdGF0ZTpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30seVEpLHtzZXR0aW5nczp0fSl9Ontpbml0aWFsU3RhdGU6eVF9fXZhciBEUTshKGZ1bmN0aW9uKHQpe3QuQ0hFQ0tCT1g9ImNoZWNrYm94Iix0LlJVTl9OQU1FPSJydW5fbmFtZSIsdC5FWFBFUklNRU5UX05BTUU9ImV4cGVyaW1lbnRfbmFtZSIsdC5SVU5fQ09MT1I9InJ1bl9jb2xvciJ9KShEUXx8KERRPXt9KSk7Y29uc3QgRVE9RmsoeEEpLEFRPXprKEVRLCgodCxlKT0+e2NvbnN0IG49W107Zm9yKGNvbnN0IG8gb2YgZSl0LnNwZWNzW29dJiZuLnB1c2godC5zcGVjc1tvXS5ocGFyYW0uZGVmYXVsdEZpbHRlcnMpO3JldHVybiBHQShuKX0pKSxSUT16ayhBUSxFUSwoKHQsZSxuKT0+e3ZhciBvO2NvbnN0IGk9V0EobiksYT1lLmZpbHRlcnNbaV07cmV0dXJuIG5ldyBNYXAoWy4uLnQsLi4ubnVsbCE9PShvPW51bGw9PWE/dm9pZCAwOmEuaHBhcmFtcykmJnZvaWQgMCE9PW8/bzpbXV0pfSkpLFRRPXprKEVRLCgodCxlKT0+e2NvbnN0IG49W107Zm9yKGNvbnN0IG8gb2YgZSl0LnNwZWNzW29dJiZuLnB1c2godC5zcGVjc1tvXS5tZXRyaWMuZGVmYXVsdEZpbHRlcnMpO3JldHVybiBZQShuKX0pKSxOUT16ayhUUSxFUSwoKHQsZSxuKT0+e3ZhciBvO2NvbnN0IGk9V0EobiksYT1lLmZpbHRlcnNbaV07cmV0dXJuIG5ldyBNYXAoWy4uLnQsLi4ubnVsbCE9PShvPW51bGw9PWE/dm9pZCAwOmEubWV0cmljcykmJnZvaWQgMCE9PW8/bzpbXV0pfSkpLElRPXprKEVRLCgodCxlKT0+KGZ1bmN0aW9uIG4oLi4udCl7Y29uc3QgZT1uZXcgTWFwLG49bmV3IE1hcCxvPW5ldyBNYXAsaT1uZXcgTWFwLGE9W107Zm9yKGNvbnN0IHIgb2YgdCl7Zm9yKGNvbnN0IHQgb2Ygci5ocGFyYW1zKWlmKG4uaGFzKHQubmFtZSl8fG4uc2V0KHQubmFtZSxuZXcgU2V0KSxuLmdldCh0Lm5hbWUpLmFkZCh0LmRpc3BsYXlOYW1lKSxlLmhhcyh0Lm5hbWUpKXtjb25zdCBuPWUuZ2V0KHQubmFtZSksbz10O2lmKG4udHlwZSE9PW8udHlwZSYmYS5wdXNoKGBIcGFyYW0sICR7by5uYW1lfSwgdHlwZXMgaGF2ZSB0byBtYXRjaC4gR290OiAke24udHlwZX0gdnMuICR7by50eXBlfWApLG4uZG9tYWluLnR5cGU9PT1MQS5JTlRFUlZBTCYmby5kb21haW4udHlwZT09PUxBLklOVEVSVkFMKW4uZG9tYWluLm1pblZhbHVlPT09by5kb21haW4ubWluVmFsdWUmJm4uZG9tYWluLm1heFZhbHVlPT09by5kb21haW4ubWF4VmFsdWV8fGEucHVzaChgSHBhcmFtLCAke28ubmFtZX0sIGRvbWFpbnMgaGF2ZSB0byBtYXRjaC4gR290OiAke24uZG9tYWlufSB2cy4gJHtvLmRvbWFpbn1gKTtlbHNlIGlmKG4uZG9tYWluLnR5cGU9PT1MQS5ESVNDUkVURSYmby5kb21haW4udHlwZT09PUxBLkRJU0NSRVRFKXtjb25zdCB0PW5ldyBTZXQoWy4uLm4uZG9tYWluLnZhbHVlcywuLi5vLmRvbWFpbi52YWx1ZXNdKTtuLmRvbWFpbi52YWx1ZXMubGVuZ3RoPT09by5kb21haW4udmFsdWVzLmxlbmd0aCYmbi5kb21haW4udmFsdWVzLmxlbmd0aD09PXQuc2l6ZXx8YS5wdXNoKGBIcGFyYW0sICR7by5uYW1lfSwgZG9tYWlucyBoYXZlIHRvIG1hdGNoLiBHb3Q6ICR7bi5kb21haW59IHZzLiAke28uZG9tYWlufWApfWVsc2UgYS5wdXNoKGBIcGFyYW0sICR7by5uYW1lfSwgZG9tYWlucyBoYXZlIHRvIG1hdGNoLiBHb3Q6ICR7bi5kb21haW59IHZzLiAke28uZG9tYWlufWApfWVsc2UgZS5zZXQodC5uYW1lLE9iamVjdC5hc3NpZ24oe30sdCkpO2Zvcihjb25zdCB0IG9mIHIubWV0cmljcylpZihpLmhhcyh0LnRhZyl8fGkuc2V0KHQudGFnLG5ldyBTZXQpLGkuZ2V0KHQudGFnKS5hZGQodC5kaXNwbGF5TmFtZSksby5oYXModC50YWcpKXtjb25zdCBlPW8uZ2V0KHQudGFnKSxuPXQ7ZS5kYXRhc2V0VHlwZSE9PW4uZGF0YXNldFR5cGUmJmEucHVzaChgTWV0cmljLCAke24udGFnfSwgZGF0YXNldFR5cGVzIGhhdmUgdG8gbWF0Y2guIEdvdDogJHtlLmRhdGFzZXRUeXBlfSB2cy4gJHtuLmRhdGFzZXRUeXBlfWApfWVsc2Ugby5zZXQodC50YWcsT2JqZWN0LmFzc2lnbih7fSx0KSl9aWYoYS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKGBWYWxpZGF0aW9uIGVycm9yOlxuJHthLmpvaW4oIlxuIil9YCk7cmV0dXJue2hwYXJhbXM6Wy4uLmVdLm1hcCgoKFt0LGVdKT0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHtkaXNwbGF5TmFtZTpbLi4ubi5nZXQodCldLmpvaW4oIiBvciAiKX0pKSksbWV0cmljczpbLi4ub10ubWFwKCgoW3QsZV0pPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZSkse2Rpc3BsYXlOYW1lOlsuLi5pLmdldCh0KV0uam9pbigiIG9yICIpfSkpKX19KSguLi5lLmV4cGVyaW1lbnRJZHMubWFwKChlPT57Y29uc3Qgbj10LnNwZWNzW2VdO3JldHVybiBuP3tocGFyYW1zOm4uaHBhcmFtLnNwZWNzLG1ldHJpY3M6bi5tZXRyaWMuc3BlY3N9Om51bGx9KSkuZmlsdGVyKEJvb2xlYW4pKSkpLHpRPXt0b29sdGlwU3RhdGU6S3goInN0YXRlIixbdE8oImluaXRpYWwsIHZvaWQsIGhpZGRlbiIsJHgoe29wYWNpdHk6MCx0cmFuc2Zvcm06InNjYWxlKDApIn0pKSx0TygidmlzaWJsZSIsJHgoe3RyYW5zZm9ybToic2NhbGUoMSkifSkpLG5PKCIqID0+IHZpc2libGUiLEp4KCIyMDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKSIsZU8oWyR4KHtvcGFjaXR5OjAsdHJhbnNmb3JtOiJzY2FsZSgwKSIsb2Zmc2V0OjB9KSwkeCh7b3BhY2l0eTouNSx0cmFuc2Zvcm06InNjYWxlKDAuOTkpIixvZmZzZXQ6LjV9KSwkeCh7b3BhY2l0eToxLHRyYW5zZm9ybToic2NhbGUoMSkiLG9mZnNldDoxfSldKSkpLG5PKCIqID0+IGhpZGRlbiIsSngoIjEwMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpIiwkeCh7b3BhY2l0eTowfSkpKV0pfSxIUT12SSh7cGFzc2l2ZTohMH0pO2Z1bmN0aW9uIEZRKHQpe3JldHVybiBFcnJvcihgVG9vbHRpcCBwb3NpdGlvbiAiJHt0fSIgaXMgaW52YWxpZC5gKX1jb25zdCBMUT1uZXcgTnIoIm1hdC10b29sdGlwLXNjcm9sbC1zdHJhdGVneSIpLEJRPXtwcm92aWRlOkxRLGRlcHM6W0pGXSx1c2VGYWN0b3J5OmZ1bmN0aW9uIFZRKHQpe3JldHVybigpPT50LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbih7c2Nyb2xsVGhyb3R0bGU6MjB9KX19LGpRPW5ldyBOcigibWF0LXRvb2x0aXAtZGVmYXVsdC1vcHRpb25zIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbiBVUSgpe3JldHVybntzaG93RGVsYXk6MCxoaWRlRGVsYXk6MCx0b3VjaGVuZEhpZGVEZWxheToxNTAwfX19KTtjbGFzcyBXUXtjb25zdHJ1Y3Rvcih0LGUsbixvLGksYSxyLHMsbCxjLGQscCl7dGhpcy5fb3ZlcmxheT10LHRoaXMuX2VsZW1lbnRSZWY9ZSx0aGlzLl9zY3JvbGxEaXNwYXRjaGVyPW4sdGhpcy5fdmlld0NvbnRhaW5lclJlZj1vLHRoaXMuX25nWm9uZT1pLHRoaXMuX3BsYXRmb3JtPWEsdGhpcy5fYXJpYURlc2NyaWJlcj1yLHRoaXMuX2ZvY3VzTW9uaXRvcj1zLHRoaXMuX2Rpcj1jLHRoaXMuX2RlZmF1bHRPcHRpb25zPWQsdGhpcy5fcG9zaXRpb249ImJlbG93Iix0aGlzLl9kaXNhYmxlZD0hMSx0aGlzLl92aWV3SW5pdGlhbGl6ZWQ9ITEsdGhpcy5fcG9pbnRlckV4aXRFdmVudHNJbml0aWFsaXplZD0hMSx0aGlzLnNob3dEZWxheT10aGlzLl9kZWZhdWx0T3B0aW9ucy5zaG93RGVsYXksdGhpcy5oaWRlRGVsYXk9dGhpcy5fZGVmYXVsdE9wdGlvbnMuaGlkZURlbGF5LHRoaXMudG91Y2hHZXN0dXJlcz0iYXV0byIsdGhpcy5fbWVzc2FnZT0iIix0aGlzLl9wYXNzaXZlTGlzdGVuZXJzPVtdLHRoaXMuX2Rlc3Ryb3llZD1uZXcgeCx0aGlzLl9oYW5kbGVLZXlkb3duPXQ9Pnt0aGlzLl9pc1Rvb2x0aXBWaXNpYmxlKCkmJnQua2V5Q29kZT09PWVJJiYhYUkodCkmJih0LnByZXZlbnREZWZhdWx0KCksdC5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLl9uZ1pvbmUucnVuKCgoKT0+dGhpcy5oaWRlKDApKSkpfSx0aGlzLl9zY3JvbGxTdHJhdGVneT1sLGQmJihkLnBvc2l0aW9uJiYodGhpcy5wb3NpdGlvbj1kLnBvc2l0aW9uKSxkLnRvdWNoR2VzdHVyZXMmJih0aGlzLnRvdWNoR2VzdHVyZXM9ZC50b3VjaEdlc3R1cmVzKSksaS5ydW5PdXRzaWRlQW5ndWxhcigoKCk9PntlLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy5faGFuZGxlS2V5ZG93bil9KSl9Z2V0IHBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX3Bvc2l0aW9ufXNldCBwb3NpdGlvbih0KXt0IT09dGhpcy5fcG9zaXRpb24mJih0aGlzLl9wb3NpdGlvbj10LHRoaXMuX292ZXJsYXlSZWYmJih0aGlzLl91cGRhdGVQb3NpdGlvbigpLHRoaXMuX3Rvb2x0aXBJbnN0YW5jZSYmdGhpcy5fdG9vbHRpcEluc3RhbmNlLnNob3coMCksdGhpcy5fb3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpKSl9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfXNldCBkaXNhYmxlZCh0KXt0aGlzLl9kaXNhYmxlZD1ySSh0KSx0aGlzLl9kaXNhYmxlZD90aGlzLmhpZGUoMCk6dGhpcy5fc2V0dXBQb2ludGVyRW50ZXJFdmVudHNJZk5lZWRlZCgpfWdldCBtZXNzYWdlKCl7cmV0dXJuIHRoaXMuX21lc3NhZ2V9c2V0IG1lc3NhZ2UodCl7dGhpcy5fYXJpYURlc2NyaWJlci5yZW1vdmVEZXNjcmlwdGlvbih0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsdGhpcy5fbWVzc2FnZSwidG9vbHRpcCIpLHRoaXMuX21lc3NhZ2U9bnVsbCE9dD9TdHJpbmcodCkudHJpbSgpOiIiLCF0aGlzLl9tZXNzYWdlJiZ0aGlzLl9pc1Rvb2x0aXBWaXNpYmxlKCk/dGhpcy5oaWRlKDApOih0aGlzLl9zZXR1cFBvaW50ZXJFbnRlckV2ZW50c0lmTmVlZGVkKCksdGhpcy5fdXBkYXRlVG9vbHRpcE1lc3NhZ2UoKSx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKCk9Pnt0aGlzLl9hcmlhRGVzY3JpYmVyLmRlc2NyaWJlKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCx0aGlzLm1lc3NhZ2UsInRvb2x0aXAiKX0pKX0pKSl9Z2V0IHRvb2x0aXBDbGFzcygpe3JldHVybiB0aGlzLl90b29sdGlwQ2xhc3N9c2V0IHRvb2x0aXBDbGFzcyh0KXt0aGlzLl90b29sdGlwQ2xhc3M9dCx0aGlzLl90b29sdGlwSW5zdGFuY2UmJnRoaXMuX3NldFRvb2x0aXBDbGFzcyh0aGlzLl90b29sdGlwQ2xhc3MpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX3ZpZXdJbml0aWFsaXplZD0hMCx0aGlzLl9zZXR1cFBvaW50ZXJFbnRlckV2ZW50c0lmTmVlZGVkKCksdGhpcy5fZm9jdXNNb25pdG9yLm1vbml0b3IodGhpcy5fZWxlbWVudFJlZikucGlwZSh1bih0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKHQ9Pnt0PyJrZXlib2FyZCI9PT10JiZ0aGlzLl9uZ1pvbmUucnVuKCgoKT0+dGhpcy5zaG93KCkpKTp0aGlzLl9uZ1pvbmUucnVuKCgoKT0+dGhpcy5oaWRlKDApKSl9KSl9bmdPbkRlc3Ryb3koKXtjb25zdCB0PXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtjbGVhclRpbWVvdXQodGhpcy5fdG91Y2hzdGFydFRpbWVvdXQpLHRoaXMuX292ZXJsYXlSZWYmJih0aGlzLl9vdmVybGF5UmVmLmRpc3Bvc2UoKSx0aGlzLl90b29sdGlwSW5zdGFuY2U9bnVsbCksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLl9oYW5kbGVLZXlkb3duKSx0aGlzLl9wYXNzaXZlTGlzdGVuZXJzLmZvckVhY2goKChbZSxuXSk9Pnt0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZSxuLEhRKX0pKSx0aGlzLl9wYXNzaXZlTGlzdGVuZXJzLmxlbmd0aD0wLHRoaXMuX2Rlc3Ryb3llZC5uZXh0KCksdGhpcy5fZGVzdHJveWVkLmNvbXBsZXRlKCksdGhpcy5fYXJpYURlc2NyaWJlci5yZW1vdmVEZXNjcmlwdGlvbih0LHRoaXMubWVzc2FnZSwidG9vbHRpcCIpLHRoaXMuX2ZvY3VzTW9uaXRvci5zdG9wTW9uaXRvcmluZyh0KX1zaG93KHQ9dGhpcy5zaG93RGVsYXkpe2lmKHRoaXMuZGlzYWJsZWR8fCF0aGlzLm1lc3NhZ2V8fHRoaXMuX2lzVG9vbHRpcFZpc2libGUoKSYmIXRoaXMuX3Rvb2x0aXBJbnN0YW5jZS5fc2hvd1RpbWVvdXRJZCYmIXRoaXMuX3Rvb2x0aXBJbnN0YW5jZS5faGlkZVRpbWVvdXRJZClyZXR1cm47Y29uc3QgZT10aGlzLl9jcmVhdGVPdmVybGF5KCk7dGhpcy5fZGV0YWNoKCksdGhpcy5fcG9ydGFsPXRoaXMuX3BvcnRhbHx8bmV3IHNGKEdRLHRoaXMuX3ZpZXdDb250YWluZXJSZWYpLHRoaXMuX3Rvb2x0aXBJbnN0YW5jZT1lLmF0dGFjaCh0aGlzLl9wb3J0YWwpLmluc3RhbmNlLHRoaXMuX3Rvb2x0aXBJbnN0YW5jZS5hZnRlckhpZGRlbigpLnBpcGUodW4odGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgoKT0+dGhpcy5fZGV0YWNoKCkpKSx0aGlzLl9zZXRUb29sdGlwQ2xhc3ModGhpcy5fdG9vbHRpcENsYXNzKSx0aGlzLl91cGRhdGVUb29sdGlwTWVzc2FnZSgpLHRoaXMuX3Rvb2x0aXBJbnN0YW5jZS5zaG93KHQpfWhpZGUodD10aGlzLmhpZGVEZWxheSl7dGhpcy5fdG9vbHRpcEluc3RhbmNlJiZ0aGlzLl90b29sdGlwSW5zdGFuY2UuaGlkZSh0KX10b2dnbGUoKXt0aGlzLl9pc1Rvb2x0aXBWaXNpYmxlKCk/dGhpcy5oaWRlKCk6dGhpcy5zaG93KCl9X2lzVG9vbHRpcFZpc2libGUoKXtyZXR1cm4hIXRoaXMuX3Rvb2x0aXBJbnN0YW5jZSYmdGhpcy5fdG9vbHRpcEluc3RhbmNlLmlzVmlzaWJsZSgpfV9jcmVhdGVPdmVybGF5KCl7aWYodGhpcy5fb3ZlcmxheVJlZilyZXR1cm4gdGhpcy5fb3ZlcmxheVJlZjtjb25zdCB0PXRoaXMuX3Njcm9sbERpc3BhdGNoZXIuZ2V0QW5jZXN0b3JTY3JvbGxDb250YWluZXJzKHRoaXMuX2VsZW1lbnRSZWYpLGU9dGhpcy5fb3ZlcmxheS5wb3NpdGlvbigpLmZsZXhpYmxlQ29ubmVjdGVkVG8odGhpcy5fZWxlbWVudFJlZikud2l0aFRyYW5zZm9ybU9yaWdpbk9uKCIubWF0LXRvb2x0aXAiKS53aXRoRmxleGlibGVEaW1lbnNpb25zKCExKS53aXRoVmlld3BvcnRNYXJnaW4oOCkud2l0aFNjcm9sbGFibGVDb250YWluZXJzKHQpO3JldHVybiBlLnBvc2l0aW9uQ2hhbmdlcy5waXBlKHVuKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgodD0+e3RoaXMuX3Rvb2x0aXBJbnN0YW5jZSYmdC5zY3JvbGxhYmxlVmlld1Byb3BlcnRpZXMuaXNPdmVybGF5Q2xpcHBlZCYmdGhpcy5fdG9vbHRpcEluc3RhbmNlLmlzVmlzaWJsZSgpJiZ0aGlzLl9uZ1pvbmUucnVuKCgoKT0+dGhpcy5oaWRlKDApKSl9KSksdGhpcy5fb3ZlcmxheVJlZj10aGlzLl9vdmVybGF5LmNyZWF0ZSh7ZGlyZWN0aW9uOnRoaXMuX2Rpcixwb3NpdGlvblN0cmF0ZWd5OmUscGFuZWxDbGFzczoibWF0LXRvb2x0aXAtcGFuZWwiLHNjcm9sbFN0cmF0ZWd5OnRoaXMuX3Njcm9sbFN0cmF0ZWd5KCl9KSx0aGlzLl91cGRhdGVQb3NpdGlvbigpLHRoaXMuX292ZXJsYXlSZWYuZGV0YWNobWVudHMoKS5waXBlKHVuKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKCk9PnRoaXMuX2RldGFjaCgpKSksdGhpcy5fb3ZlcmxheVJlZn1fZGV0YWNoKCl7dGhpcy5fb3ZlcmxheVJlZiYmdGhpcy5fb3ZlcmxheVJlZi5oYXNBdHRhY2hlZCgpJiZ0aGlzLl9vdmVybGF5UmVmLmRldGFjaCgpLHRoaXMuX3Rvb2x0aXBJbnN0YW5jZT1udWxsfV91cGRhdGVQb3NpdGlvbigpe2NvbnN0IHQ9dGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKS5wb3NpdGlvblN0cmF0ZWd5LGU9dGhpcy5fZ2V0T3JpZ2luKCksbj10aGlzLl9nZXRPdmVybGF5UG9zaXRpb24oKTt0LndpdGhQb3NpdGlvbnMoW09iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlLm1haW4pLG4ubWFpbiksT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUuZmFsbGJhY2spLG4uZmFsbGJhY2spXSl9X2dldE9yaWdpbigpe2NvbnN0IHQ9IXRoaXMuX2Rpcnx8Imx0ciI9PXRoaXMuX2Rpci52YWx1ZSxlPXRoaXMucG9zaXRpb247bGV0IG47aWYoImFib3ZlIj09ZXx8ImJlbG93Ij09ZSluPXtvcmlnaW5YOiJjZW50ZXIiLG9yaWdpblk6ImFib3ZlIj09ZT8idG9wIjoiYm90dG9tIn07ZWxzZSBpZigiYmVmb3JlIj09ZXx8ImxlZnQiPT1lJiZ0fHwicmlnaHQiPT1lJiYhdCluPXtvcmlnaW5YOiJzdGFydCIsb3JpZ2luWToiY2VudGVyIn07ZWxzZSBpZigiYWZ0ZXIiPT1lfHwicmlnaHQiPT1lJiZ0fHwibGVmdCI9PWUmJiF0KW49e29yaWdpblg6ImVuZCIsb3JpZ2luWToiY2VudGVyIn07ZWxzZSBpZigidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKXRocm93IEZRKGUpO2NvbnN0e3g6byx5Oml9PXRoaXMuX2ludmVydFBvc2l0aW9uKG4ub3JpZ2luWCxuLm9yaWdpblkpO3JldHVybnttYWluOm4sZmFsbGJhY2s6e29yaWdpblg6byxvcmlnaW5ZOml9fX1fZ2V0T3ZlcmxheVBvc2l0aW9uKCl7Y29uc3QgdD0hdGhpcy5fZGlyfHwibHRyIj09dGhpcy5fZGlyLnZhbHVlLGU9dGhpcy5wb3NpdGlvbjtsZXQgbjtpZigiYWJvdmUiPT1lKW49e292ZXJsYXlYOiJjZW50ZXIiLG92ZXJsYXlZOiJib3R0b20ifTtlbHNlIGlmKCJiZWxvdyI9PWUpbj17b3ZlcmxheVg6ImNlbnRlciIsb3ZlcmxheVk6InRvcCJ9O2Vsc2UgaWYoImJlZm9yZSI9PWV8fCJsZWZ0Ij09ZSYmdHx8InJpZ2h0Ij09ZSYmIXQpbj17b3ZlcmxheVg6ImVuZCIsb3ZlcmxheVk6ImNlbnRlciJ9O2Vsc2UgaWYoImFmdGVyIj09ZXx8InJpZ2h0Ij09ZSYmdHx8ImxlZnQiPT1lJiYhdCluPXtvdmVybGF5WDoic3RhcnQiLG92ZXJsYXlZOiJjZW50ZXIifTtlbHNlIGlmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpdGhyb3cgRlEoZSk7Y29uc3R7eDpvLHk6aX09dGhpcy5faW52ZXJ0UG9zaXRpb24obi5vdmVybGF5WCxuLm92ZXJsYXlZKTtyZXR1cm57bWFpbjpuLGZhbGxiYWNrOntvdmVybGF5WDpvLG92ZXJsYXlZOml9fX1fdXBkYXRlVG9vbHRpcE1lc3NhZ2UoKXt0aGlzLl90b29sdGlwSW5zdGFuY2UmJih0aGlzLl90b29sdGlwSW5zdGFuY2UubWVzc2FnZT10aGlzLm1lc3NhZ2UsdGhpcy5fdG9vbHRpcEluc3RhbmNlLl9tYXJrRm9yQ2hlY2soKSx0aGlzLl9uZ1pvbmUub25NaWNyb3Rhc2tFbXB0eS5waXBlKE5lKDEpLHVuKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKCk9Pnt0aGlzLl90b29sdGlwSW5zdGFuY2UmJnRoaXMuX292ZXJsYXlSZWYudXBkYXRlUG9zaXRpb24oKX0pKSl9X3NldFRvb2x0aXBDbGFzcyh0KXt0aGlzLl90b29sdGlwSW5zdGFuY2UmJih0aGlzLl90b29sdGlwSW5zdGFuY2UudG9vbHRpcENsYXNzPXQsdGhpcy5fdG9vbHRpcEluc3RhbmNlLl9tYXJrRm9yQ2hlY2soKSl9X2ludmVydFBvc2l0aW9uKHQsZSl7cmV0dXJuImFib3ZlIj09PXRoaXMucG9zaXRpb258fCJiZWxvdyI9PT10aGlzLnBvc2l0aW9uPyJ0b3AiPT09ZT9lPSJib3R0b20iOiJib3R0b20iPT09ZSYmKGU9InRvcCIpOiJlbmQiPT09dD90PSJzdGFydCI6InN0YXJ0Ij09PXQmJih0PSJlbmQiKSx7eDp0LHk6ZX19X3NldHVwUG9pbnRlckVudGVyRXZlbnRzSWZOZWVkZWQoKXshdGhpcy5fZGlzYWJsZWQmJnRoaXMubWVzc2FnZSYmdGhpcy5fdmlld0luaXRpYWxpemVkJiYhdGhpcy5fcGFzc2l2ZUxpc3RlbmVycy5sZW5ndGgmJih0aGlzLl9wbGF0Zm9ybVN1cHBvcnRzTW91c2VFdmVudHMoKT90aGlzLl9wYXNzaXZlTGlzdGVuZXJzLnB1c2goWyJtb3VzZWVudGVyIiwoKT0+e3RoaXMuX3NldHVwUG9pbnRlckV4aXRFdmVudHNJZk5lZWRlZCgpLHRoaXMuc2hvdygpfV0pOiJvZmYiIT09dGhpcy50b3VjaEdlc3R1cmVzJiYodGhpcy5fZGlzYWJsZU5hdGl2ZUdlc3R1cmVzSWZOZWNlc3NhcnkoKSx0aGlzLl9wYXNzaXZlTGlzdGVuZXJzLnB1c2goWyJ0b3VjaHN0YXJ0IiwoKT0+e3RoaXMuX3NldHVwUG9pbnRlckV4aXRFdmVudHNJZk5lZWRlZCgpLGNsZWFyVGltZW91dCh0aGlzLl90b3VjaHN0YXJ0VGltZW91dCksdGhpcy5fdG91Y2hzdGFydFRpbWVvdXQ9c2V0VGltZW91dCgoKCk9PnRoaXMuc2hvdygpKSw1MDApfV0pKSx0aGlzLl9hZGRMaXN0ZW5lcnModGhpcy5fcGFzc2l2ZUxpc3RlbmVycykpfV9zZXR1cFBvaW50ZXJFeGl0RXZlbnRzSWZOZWVkZWQoKXtpZih0aGlzLl9wb2ludGVyRXhpdEV2ZW50c0luaXRpYWxpemVkKXJldHVybjt0aGlzLl9wb2ludGVyRXhpdEV2ZW50c0luaXRpYWxpemVkPSEwO2NvbnN0IHQ9W107aWYodGhpcy5fcGxhdGZvcm1TdXBwb3J0c01vdXNlRXZlbnRzKCkpdC5wdXNoKFsibW91c2VsZWF2ZSIsKCk9PnRoaXMuaGlkZSgpXSxbIndoZWVsIix0PT50aGlzLl93aGVlbExpc3RlbmVyKHQpXSk7ZWxzZSBpZigib2ZmIiE9PXRoaXMudG91Y2hHZXN0dXJlcyl7dGhpcy5fZGlzYWJsZU5hdGl2ZUdlc3R1cmVzSWZOZWNlc3NhcnkoKTtjb25zdCBlPSgpPT57Y2xlYXJUaW1lb3V0KHRoaXMuX3RvdWNoc3RhcnRUaW1lb3V0KSx0aGlzLmhpZGUodGhpcy5fZGVmYXVsdE9wdGlvbnMudG91Y2hlbmRIaWRlRGVsYXkpfTt0LnB1c2goWyJ0b3VjaGVuZCIsZV0sWyJ0b3VjaGNhbmNlbCIsZV0pfXRoaXMuX2FkZExpc3RlbmVycyh0KSx0aGlzLl9wYXNzaXZlTGlzdGVuZXJzLnB1c2goLi4udCl9X2FkZExpc3RlbmVycyh0KXt0LmZvckVhY2goKChbdCxlXSk9Pnt0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0LGUsSFEpfSkpfV9wbGF0Zm9ybVN1cHBvcnRzTW91c2VFdmVudHMoKXtyZXR1cm4hdGhpcy5fcGxhdGZvcm0uSU9TJiYhdGhpcy5fcGxhdGZvcm0uQU5EUk9JRH1fd2hlZWxMaXN0ZW5lcih0KXtpZih0aGlzLl9pc1Rvb2x0aXBWaXNpYmxlKCkpe2NvbnN0IGU9KHRoaXMuX2RvY3VtZW50fHxkb2N1bWVudCkuZWxlbWVudEZyb21Qb2ludCh0LmNsaWVudFgsdC5jbGllbnRZKSxuPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtlPT09bnx8bi5jb250YWlucyhlKXx8dGhpcy5oaWRlKCl9fV9kaXNhYmxlTmF0aXZlR2VzdHVyZXNJZk5lY2Vzc2FyeSgpe2NvbnN0IHQ9dGhpcy50b3VjaEdlc3R1cmVzO2lmKCJvZmYiIT09dCl7Y29uc3QgZT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsbj1lLnN0eWxlOygib24iPT09dHx8IklOUFVUIiE9PWUubm9kZU5hbWUmJiJURVhUQVJFQSIhPT1lLm5vZGVOYW1lKSYmKG4udXNlclNlbGVjdD1uLm1zVXNlclNlbGVjdD1uLndlYmtpdFVzZXJTZWxlY3Q9bi5Nb3pVc2VyU2VsZWN0PSJub25lIiksIm9uIiE9PXQmJmUuZHJhZ2dhYmxlfHwobi53ZWJraXRVc2VyRHJhZz0ibm9uZSIpLG4udG91Y2hBY3Rpb249Im5vbmUiLG4ud2Via2l0VGFwSGlnaGxpZ2h0Q29sb3I9InRyYW5zcGFyZW50In19fVdRLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxXUSkoTXUoSkYpLE11KGNoKSxNdShLSCksTXUoWGgpLE11KHRDKSxNdShmSSksTXUoekkpLE11KHB6KSxNdShMUSksTXUoTXosOCksTXUoalEsOCksTXUoVUMpKX0sV1EuybVkaXI9Sm8oe3R5cGU6V1Esc2VsZWN0b3JzOltbIiIsIm1hdFRvb2x0aXAiLCIiXV0saG9zdEF0dHJzOlsxLCJtYXQtdG9vbHRpcC10cmlnZ2VyIl0saW5wdXRzOntzaG93RGVsYXk6WyJtYXRUb29sdGlwU2hvd0RlbGF5Iiwic2hvd0RlbGF5Il0saGlkZURlbGF5OlsibWF0VG9vbHRpcEhpZGVEZWxheSIsImhpZGVEZWxheSJdLHRvdWNoR2VzdHVyZXM6WyJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsInRvdWNoR2VzdHVyZXMiXSxwb3NpdGlvbjpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsInBvc2l0aW9uIl0sZGlzYWJsZWQ6WyJtYXRUb29sdGlwRGlzYWJsZWQiLCJkaXNhYmxlZCJdLG1lc3NhZ2U6WyJtYXRUb29sdGlwIiwibWVzc2FnZSJdLHRvb2x0aXBDbGFzczpbIm1hdFRvb2x0aXBDbGFzcyIsInRvb2x0aXBDbGFzcyJdfSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0pLFdRLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6SkZ9LHt0eXBlOmNofSx7dHlwZTpLSH0se3R5cGU6WGh9LHt0eXBlOnRDfSx7dHlwZTpmSX0se3R5cGU6ekl9LHt0eXBlOnB6fSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbTFFdfV19LHt0eXBlOk16LGRlY29yYXRvcnM6W3t0eXBlOl9zfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbalFdfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltVQ119XX1dLFdRLnByb3BEZWNvcmF0b3JzPXtwb3NpdGlvbjpbe3R5cGU6eV8sYXJnczpbIm1hdFRvb2x0aXBQb3NpdGlvbiJdfV0sZGlzYWJsZWQ6W3t0eXBlOnlfLGFyZ3M6WyJtYXRUb29sdGlwRGlzYWJsZWQiXX1dLHNob3dEZWxheTpbe3R5cGU6eV8sYXJnczpbIm1hdFRvb2x0aXBTaG93RGVsYXkiXX1dLGhpZGVEZWxheTpbe3R5cGU6eV8sYXJnczpbIm1hdFRvb2x0aXBIaWRlRGVsYXkiXX1dLHRvdWNoR2VzdHVyZXM6W3t0eXBlOnlfLGFyZ3M6WyJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyJdfV0sbWVzc2FnZTpbe3R5cGU6eV8sYXJnczpbIm1hdFRvb2x0aXAiXX1dLHRvb2x0aXBDbGFzczpbe3R5cGU6eV8sYXJnczpbIm1hdFRvb2x0aXBDbGFzcyJdfV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoV1EsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoiW21hdFRvb2x0aXBdIixleHBvcnRBczoibWF0VG9vbHRpcCIsaG9zdDp7Y2xhc3M6Im1hdC10b29sdGlwLXRyaWdnZXIifX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkpGfSx7dHlwZTpjaH0se3R5cGU6S0h9LHt0eXBlOlhofSx7dHlwZTp0Q30se3R5cGU6Zkl9LHt0eXBlOnpJfSx7dHlwZTpwen0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W0xRXX1dfSx7dHlwZTpNeixkZWNvcmF0b3JzOlt7dHlwZTpfc31dfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W2pRXX1dfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbVUNdfV19XX0pLHtzaG93RGVsYXk6W3t0eXBlOnlfLGFyZ3M6WyJtYXRUb29sdGlwU2hvd0RlbGF5Il19XSxoaWRlRGVsYXk6W3t0eXBlOnlfLGFyZ3M6WyJtYXRUb29sdGlwSGlkZURlbGF5Il19XSx0b3VjaEdlc3R1cmVzOlt7dHlwZTp5XyxhcmdzOlsibWF0VG9vbHRpcFRvdWNoR2VzdHVyZXMiXX1dLHBvc2l0aW9uOlt7dHlwZTp5XyxhcmdzOlsibWF0VG9vbHRpcFBvc2l0aW9uIl19XSxkaXNhYmxlZDpbe3R5cGU6eV8sYXJnczpbIm1hdFRvb2x0aXBEaXNhYmxlZCJdfV0sbWVzc2FnZTpbe3R5cGU6eV8sYXJnczpbIm1hdFRvb2x0aXAiXX1dLHRvb2x0aXBDbGFzczpbe3R5cGU6eV8sYXJnczpbIm1hdFRvb2x0aXBDbGFzcyJdfV19KTtjbGFzcyBHUXtjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuX2NoYW5nZURldGVjdG9yUmVmPXQsdGhpcy5fYnJlYWtwb2ludE9ic2VydmVyPWUsdGhpcy5fdmlzaWJpbGl0eT0iaW5pdGlhbCIsdGhpcy5fY2xvc2VPbkludGVyYWN0aW9uPSExLHRoaXMuX29uSGlkZT1uZXcgeCx0aGlzLl9pc0hhbmRzZXQ9dGhpcy5fYnJlYWtwb2ludE9ic2VydmVyLm9ic2VydmUoIihtYXgtd2lkdGg6IDU5OS45OHB4KSBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCksIChtYXgtd2lkdGg6IDk1OS45OHB4KSBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIil9c2hvdyh0KXt0aGlzLl9oaWRlVGltZW91dElkJiYoY2xlYXJUaW1lb3V0KHRoaXMuX2hpZGVUaW1lb3V0SWQpLHRoaXMuX2hpZGVUaW1lb3V0SWQ9bnVsbCksdGhpcy5fY2xvc2VPbkludGVyYWN0aW9uPSEwLHRoaXMuX3Nob3dUaW1lb3V0SWQ9c2V0VGltZW91dCgoKCk9Pnt0aGlzLl92aXNpYmlsaXR5PSJ2aXNpYmxlIix0aGlzLl9zaG93VGltZW91dElkPW51bGwsdGhpcy5fbWFya0ZvckNoZWNrKCl9KSx0KX1oaWRlKHQpe3RoaXMuX3Nob3dUaW1lb3V0SWQmJihjbGVhclRpbWVvdXQodGhpcy5fc2hvd1RpbWVvdXRJZCksdGhpcy5fc2hvd1RpbWVvdXRJZD1udWxsKSx0aGlzLl9oaWRlVGltZW91dElkPXNldFRpbWVvdXQoKCgpPT57dGhpcy5fdmlzaWJpbGl0eT0iaGlkZGVuIix0aGlzLl9oaWRlVGltZW91dElkPW51bGwsdGhpcy5fbWFya0ZvckNoZWNrKCl9KSx0KX1hZnRlckhpZGRlbigpe3JldHVybiB0aGlzLl9vbkhpZGV9aXNWaXNpYmxlKCl7cmV0dXJuInZpc2libGUiPT09dGhpcy5fdmlzaWJpbGl0eX1uZ09uRGVzdHJveSgpe3RoaXMuX29uSGlkZS5jb21wbGV0ZSgpfV9hbmltYXRpb25TdGFydCgpe3RoaXMuX2Nsb3NlT25JbnRlcmFjdGlvbj0hMX1fYW5pbWF0aW9uRG9uZSh0KXtjb25zdCBlPXQudG9TdGF0ZTsiaGlkZGVuIiE9PWV8fHRoaXMuaXNWaXNpYmxlKCl8fHRoaXMuX29uSGlkZS5uZXh0KCksInZpc2libGUiIT09ZSYmImhpZGRlbiIhPT1lfHwodGhpcy5fY2xvc2VPbkludGVyYWN0aW9uPSEwKX1faGFuZGxlQm9keUludGVyYWN0aW9uKCl7dGhpcy5fY2xvc2VPbkludGVyYWN0aW9uJiZ0aGlzLmhpZGUoMCl9X21hcmtGb3JDaGVjaygpe3RoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfX1HUS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8R1EpKE11KEhoKSxNdShwTCkpfSxHUS7JtWNtcD1Vbyh7dHlwZTpHUSxzZWxlY3RvcnM6W1sibWF0LXRvb2x0aXAtY29tcG9uZW50Il1dLGhvc3RBdHRyczpbImFyaWEtaGlkZGVuIiwidHJ1ZSJdLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJk51KCJjbGljayIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5faGFuZGxlQm9keUludGVyYWN0aW9uKCl9KSwhMSxYbCkoImF1eGNsaWNrIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLl9oYW5kbGVCb2R5SW50ZXJhY3Rpb24oKX0pLCExLFhsKSwyJmUmJm9mKCJ6b29tIiwidmlzaWJsZSI9PT1uLl92aXNpYmlsaXR5PzE6bnVsbCl9LGRlY2xzOjMsdmFyczo3LGNvbnN0czpbWzEsIm1hdC10b29sdGlwIiwzLCJuZ0NsYXNzIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJihPdSgwLCJkaXYiLDApLE51KCJAc3RhdGUuc3RhcnQiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uX2FuaW1hdGlvblN0YXJ0KCl9KSkoIkBzdGF0ZS5kb25lIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5fYW5pbWF0aW9uRG9uZShlKX0pKSxPYigxLCJhc3luYyIpLE1mKDIpLFB1KCkpLDImZSl7bGV0IHQ9bnVsbDthZigibWF0LXRvb2x0aXAtaGFuZHNldCIsbnVsbD09KHQ9UGIoMSw1LG4uX2lzSGFuZHNldCkpP251bGw6dC5tYXRjaGVzKSx2dSgibmdDbGFzcyIsbi50b29sdGlwQ2xhc3MpKCJAc3RhdGUiLG4uX3Zpc2liaWxpdHkpLEpjKDIpLHZmKG4ubWVzc2FnZSl9fSxkaXJlY3RpdmVzOlt0dl0scGlwZXM6W012XSxzdHlsZXM6WyIubWF0LXRvb2x0aXAtcGFuZWx7cG9pbnRlci1ldmVudHM6bm9uZSAhaW1wb3J0YW50fS5tYXQtdG9vbHRpcHtjb2xvcjojZmZmO2JvcmRlci1yYWRpdXM6NHB4O21hcmdpbjoxNHB4O21heC13aWR0aDoyNTBweDtwYWRkaW5nLWxlZnQ6OHB4O3BhZGRpbmctcmlnaHQ6OHB4O292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC10b29sdGlwe291dGxpbmU6c29saWQgMXB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0e21hcmdpbjoyNHB4O3BhZGRpbmctbGVmdDoxNnB4O3BhZGRpbmctcmlnaHQ6MTZweH1cbiJdLGVuY2Fwc3VsYXRpb246MixkYXRhOnthbmltYXRpb246W3pRLnRvb2x0aXBTdGF0ZV19LGNoYW5nZURldGVjdGlvbjowfSksR1EuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpIaH0se3R5cGU6cEx9XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEdRLFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6Im1hdC10b29sdGlwLWNvbXBvbmVudCIsdGVtcGxhdGU6JzxkaXYgY2xhc3M9Im1hdC10b29sdGlwIlxuICAgICBbbmdDbGFzc109InRvb2x0aXBDbGFzcyJcbiAgICAgW2NsYXNzLm1hdC10b29sdGlwLWhhbmRzZXRdPSIoX2lzSGFuZHNldCB8IGFzeW5jKT8ubWF0Y2hlcyJcbiAgICAgW0BzdGF0ZV09Il92aXNpYmlsaXR5IlxuICAgICAoQHN0YXRlLnN0YXJ0KT0iX2FuaW1hdGlvblN0YXJ0KCkiXG4gICAgIChAc3RhdGUuZG9uZSk9Il9hbmltYXRpb25Eb25lKCRldmVudCkiPnt7bWVzc2FnZX19PC9kaXY+XG4nLGVuY2Fwc3VsYXRpb246UG8uTm9uZSxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNoLGFuaW1hdGlvbnM6W3pRLnRvb2x0aXBTdGF0ZV0saG9zdDp7IltzdHlsZS56b29tXSI6J192aXNpYmlsaXR5ID09PSAidmlzaWJsZSIgPyAxIDogbnVsbCcsIihib2R5OmNsaWNrKSI6InRoaXMuX2hhbmRsZUJvZHlJbnRlcmFjdGlvbigpIiwiKGJvZHk6YXV4Y2xpY2spIjoidGhpcy5faGFuZGxlQm9keUludGVyYWN0aW9uKCkiLCJhcmlhLWhpZGRlbiI6InRydWUifSxzdHlsZXM6WyIubWF0LXRvb2x0aXAtcGFuZWx7cG9pbnRlci1ldmVudHM6bm9uZSAhaW1wb3J0YW50fS5tYXQtdG9vbHRpcHtjb2xvcjojZmZmO2JvcmRlci1yYWRpdXM6NHB4O21hcmdpbjoxNHB4O21heC13aWR0aDoyNTBweDtwYWRkaW5nLWxlZnQ6OHB4O3BhZGRpbmctcmlnaHQ6OHB4O292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC10b29sdGlwe291dGxpbmU6c29saWQgMXB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0e21hcmdpbjoyNHB4O3BhZGRpbmctbGVmdDoxNnB4O3BhZGRpbmctcmlnaHQ6MTZweH1cbiJdfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6SGh9LHt0eXBlOnBMfV19KSxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIFlRe31mdW5jdGlvbiBxUSh0LGUpe2lmKDEmdCYmKE91KDAsIm1hdC1vcHRpb24iLDE5KSxNZigxKSxQdSgpKSwyJnQpe2NvbnN0IHQ9ZS4kaW1wbGljaXQ7dnUoInZhbHVlIix0KSxKYygxKSx4ZigiICIsdCwiICIpfX1mdW5jdGlvbiBaUSh0LGUpe2lmKDEmdCl7Y29uc3QgdD1FdSgpO091KDAsIm1hdC1mb3JtLWZpZWxkIiwxNiksT3UoMSwibWF0LXNlbGVjdCIsMTcpLE51KCJzZWxlY3Rpb25DaGFuZ2UiLChmdW5jdGlvbiBlKG4pe3JldHVybiByYSh0KSxMdSgyKS5fY2hhbmdlUGFnZVNpemUobi52YWx1ZSl9KSksV20oMixxUSwyLDIsIm1hdC1vcHRpb24iLDE4KSxQdSgpLFB1KCl9aWYoMiZ0KXtjb25zdCB0PUx1KDIpO3Z1KCJhcHBlYXJhbmNlIix0Ll9mb3JtRmllbGRBcHBlYXJhbmNlKSgiY29sb3IiLHQuY29sb3IpLEpjKDEpLHZ1KCJ2YWx1ZSIsdC5wYWdlU2l6ZSkoImRpc2FibGVkIix0LmRpc2FibGVkKSgiYXJpYS1sYWJlbCIsdC5faW50bC5pdGVtc1BlclBhZ2VMYWJlbCksSmMoMSksdnUoIm5nRm9yT2YiLHQuX2Rpc3BsYXllZFBhZ2VTaXplT3B0aW9ucyl9fWZ1bmN0aW9uIFhRKHQsZSl7aWYoMSZ0JiYoT3UoMCwiZGl2IiwyMCksTWYoMSksUHUoKSksMiZ0KXtjb25zdCB0PUx1KDIpO0pjKDEpLHZmKHQucGFnZVNpemUpfX1mdW5jdGlvbiBLUSh0LGUpe2lmKDEmdCYmKE91KDAsImRpdiIsMTIpLE91KDEsImRpdiIsMTMpLE1mKDIpLFB1KCksV20oMyxaUSwzLDYsIm1hdC1mb3JtLWZpZWxkIiwxNCksV20oNCxYUSwyLDEsImRpdiIsMTUpLFB1KCkpLDImdCl7Y29uc3QgdD1MdSgpO0pjKDIpLHhmKCIgIix0Ll9pbnRsLml0ZW1zUGVyUGFnZUxhYmVsLCIgIiksSmMoMSksdnUoIm5nSWYiLHQuX2Rpc3BsYXllZFBhZ2VTaXplT3B0aW9ucy5sZW5ndGg+MSksSmMoMSksdnUoIm5nSWYiLHQuX2Rpc3BsYXllZFBhZ2VTaXplT3B0aW9ucy5sZW5ndGg8PTEpfX1mdW5jdGlvbiBKUSh0LGUpe2lmKDEmdCl7Y29uc3QgdD1FdSgpO091KDAsImJ1dHRvbiIsMjEpLE51KCJjbGljayIsKGZ1bmN0aW9uIGUoKXtyZXR1cm4gcmEodCksTHUoKS5maXJzdFBhZ2UoKX0pKSxIYSgpLE91KDEsInN2ZyIsNyksd3UoMiwicGF0aCIsMjIpLFB1KCksUHUoKX1pZigyJnQpe2NvbnN0IHQ9THUoKTt2dSgibWF0VG9vbHRpcCIsdC5faW50bC5maXJzdFBhZ2VMYWJlbCkoIm1hdFRvb2x0aXBEaXNhYmxlZCIsdC5fcHJldmlvdXNCdXR0b25zRGlzYWJsZWQoKSkoIm1hdFRvb2x0aXBQb3NpdGlvbiIsImFib3ZlIikoImRpc2FibGVkIix0Ll9wcmV2aW91c0J1dHRvbnNEaXNhYmxlZCgpKSxObSgiYXJpYS1sYWJlbCIsdC5faW50bC5maXJzdFBhZ2VMYWJlbCl9fWZ1bmN0aW9uIFFRKHQsZSl7aWYoMSZ0KXtjb25zdCB0PUV1KCk7SGEoKSxGYSgpLE91KDAsImJ1dHRvbiIsMjMpLE51KCJjbGljayIsKGZ1bmN0aW9uIGUoKXtyZXR1cm4gcmEodCksTHUoKS5sYXN0UGFnZSgpfSkpLEhhKCksT3UoMSwic3ZnIiw3KSx3dSgyLCJwYXRoIiwyNCksUHUoKSxQdSgpfWlmKDImdCl7Y29uc3QgdD1MdSgpO3Z1KCJtYXRUb29sdGlwIix0Ll9pbnRsLmxhc3RQYWdlTGFiZWwpKCJtYXRUb29sdGlwRGlzYWJsZWQiLHQuX25leHRCdXR0b25zRGlzYWJsZWQoKSkoIm1hdFRvb2x0aXBQb3NpdGlvbiIsImFib3ZlIikoImRpc2FibGVkIix0Ll9uZXh0QnV0dG9uc0Rpc2FibGVkKCkpLE5tKCJhcmlhLWxhYmVsIix0Ll9pbnRsLmxhc3RQYWdlTGFiZWwpfX1ZUS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8WVEpfSxZUS7JtW1vZD1abyh7dHlwZTpZUX0pLFlRLsm1aW5qPWNvKHtwcm92aWRlcnM6W0JRXSxpbXBvcnRzOltbeXosQnYsaUwsVHpdLFR6LG9GXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oWVEse2RlY2xhcmF0aW9uczpmdW5jdGlvbigpe3JldHVybltXUSxHUV19LGltcG9ydHM6ZnVuY3Rpb24oKXtyZXR1cm5beXosQnYsaUwsVHpdfSxleHBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW1dRLEdRLFR6LG9GXX19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFlRLFt7dHlwZTprXyxhcmdzOlt7aW1wb3J0czpbeXosQnYsaUwsVHpdLGV4cG9ydHM6W1dRLEdRLFR6LG9GXSxkZWNsYXJhdGlvbnM6W1dRLEdRXSxlbnRyeUNvbXBvbmVudHM6W0dRXSxwcm92aWRlcnM6W0JRXX1dfV0sbnVsbCxudWxsKTtjbGFzcyAkUXtjb25zdHJ1Y3Rvcigpe3RoaXMuY2hhbmdlcz1uZXcgeCx0aGlzLml0ZW1zUGVyUGFnZUxhYmVsPSJJdGVtcyBwZXIgcGFnZToiLHRoaXMubmV4dFBhZ2VMYWJlbD0iTmV4dCBwYWdlIix0aGlzLnByZXZpb3VzUGFnZUxhYmVsPSJQcmV2aW91cyBwYWdlIix0aGlzLmZpcnN0UGFnZUxhYmVsPSJGaXJzdCBwYWdlIix0aGlzLmxhc3RQYWdlTGFiZWw9Ikxhc3QgcGFnZSIsdGhpcy5nZXRSYW5nZUxhYmVsPSh0LGUsbik9PntpZigwPT1ufHwwPT1lKXJldHVybmAwIG9mICR7bn1gO2NvbnN0IG89dCplO3JldHVybmAke28rMX0g4oCTICR7bzwobj1NYXRoLm1heChuLDApKT9NYXRoLm1pbihvK2Usbik6bytlfSBvZiAke259YH19fSRRLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHwkUSl9LCRRLsm1cHJvdj1sbyh7ZmFjdG9yeTpmdW5jdGlvbiB0KCl7cmV0dXJuIG5ldyAkUX0sdG9rZW46JFEscHJvdmlkZWRJbjoicm9vdCJ9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKCRRLFt7dHlwZTpKbSxhcmdzOlt7cHJvdmlkZWRJbjoicm9vdCJ9XX1dLChmdW5jdGlvbigpe3JldHVybltdfSksbnVsbCk7Y29uc3QgdCQ9e3Byb3ZpZGU6JFEsZGVwczpbW25ldyBfcyxuZXcgTXMsJFFdXSx1c2VGYWN0b3J5OmZ1bmN0aW9uIGUkKHQpe3JldHVybiB0fHxuZXcgJFF9fSxuJD1uZXcgTnIoIk1BVF9QQUdJTkFUT1JfREVGQVVMVF9PUFRJT05TIiksbyQ9TnooTHooY2xhc3N7fSkpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jbGFzcyBpJCBleHRlbmRzIG8ke2NvbnN0cnVjdG9yKHQsZSxuKXtpZihzdXBlcigpLHRoaXMuX2ludGw9dCx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1lLHRoaXMuX3BhZ2VJbmRleD0wLHRoaXMuX2xlbmd0aD0wLHRoaXMuX3BhZ2VTaXplT3B0aW9ucz1bXSx0aGlzLl9oaWRlUGFnZVNpemU9ITEsdGhpcy5fc2hvd0ZpcnN0TGFzdEJ1dHRvbnM9ITEsdGhpcy5wYWdlPW5ldyBBYix0aGlzLl9pbnRsQ2hhbmdlcz10LmNoYW5nZXMuc3Vic2NyaWJlKCgoKT0+dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpKSxuKXtjb25zdHtwYWdlU2l6ZTp0LHBhZ2VTaXplT3B0aW9uczplLGhpZGVQYWdlU2l6ZTpvLHNob3dGaXJzdExhc3RCdXR0b25zOml9PW47bnVsbCE9dCYmKHRoaXMuX3BhZ2VTaXplPXQpLG51bGwhPWUmJih0aGlzLl9wYWdlU2l6ZU9wdGlvbnM9ZSksbnVsbCE9byYmKHRoaXMuX2hpZGVQYWdlU2l6ZT1vKSxudWxsIT1pJiYodGhpcy5fc2hvd0ZpcnN0TGFzdEJ1dHRvbnM9aSl9fWdldCBwYWdlSW5kZXgoKXtyZXR1cm4gdGhpcy5fcGFnZUluZGV4fXNldCBwYWdlSW5kZXgodCl7dGhpcy5fcGFnZUluZGV4PU1hdGgubWF4KHNJKHQpLDApLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5fbGVuZ3RofXNldCBsZW5ndGgodCl7dGhpcy5fbGVuZ3RoPXNJKHQpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfWdldCBwYWdlU2l6ZSgpe3JldHVybiB0aGlzLl9wYWdlU2l6ZX1zZXQgcGFnZVNpemUodCl7dGhpcy5fcGFnZVNpemU9TWF0aC5tYXgoc0kodCksMCksdGhpcy5fdXBkYXRlRGlzcGxheWVkUGFnZVNpemVPcHRpb25zKCl9Z2V0IHBhZ2VTaXplT3B0aW9ucygpe3JldHVybiB0aGlzLl9wYWdlU2l6ZU9wdGlvbnN9c2V0IHBhZ2VTaXplT3B0aW9ucyh0KXt0aGlzLl9wYWdlU2l6ZU9wdGlvbnM9KHR8fFtdKS5tYXAoKHQ9PnNJKHQpKSksdGhpcy5fdXBkYXRlRGlzcGxheWVkUGFnZVNpemVPcHRpb25zKCl9Z2V0IGhpZGVQYWdlU2l6ZSgpe3JldHVybiB0aGlzLl9oaWRlUGFnZVNpemV9c2V0IGhpZGVQYWdlU2l6ZSh0KXt0aGlzLl9oaWRlUGFnZVNpemU9ckkodCl9Z2V0IHNob3dGaXJzdExhc3RCdXR0b25zKCl7cmV0dXJuIHRoaXMuX3Nob3dGaXJzdExhc3RCdXR0b25zfXNldCBzaG93Rmlyc3RMYXN0QnV0dG9ucyh0KXt0aGlzLl9zaG93Rmlyc3RMYXN0QnV0dG9ucz1ySSh0KX1uZ09uSW5pdCgpe3RoaXMuX2luaXRpYWxpemVkPSEwLHRoaXMuX3VwZGF0ZURpc3BsYXllZFBhZ2VTaXplT3B0aW9ucygpLHRoaXMuX21hcmtJbml0aWFsaXplZCgpfW5nT25EZXN0cm95KCl7dGhpcy5faW50bENoYW5nZXMudW5zdWJzY3JpYmUoKX1uZXh0UGFnZSgpe2lmKCF0aGlzLmhhc05leHRQYWdlKCkpcmV0dXJuO2NvbnN0IHQ9dGhpcy5wYWdlSW5kZXg7dGhpcy5wYWdlSW5kZXgrKyx0aGlzLl9lbWl0UGFnZUV2ZW50KHQpfXByZXZpb3VzUGFnZSgpe2lmKCF0aGlzLmhhc1ByZXZpb3VzUGFnZSgpKXJldHVybjtjb25zdCB0PXRoaXMucGFnZUluZGV4O3RoaXMucGFnZUluZGV4LS0sdGhpcy5fZW1pdFBhZ2VFdmVudCh0KX1maXJzdFBhZ2UoKXtpZighdGhpcy5oYXNQcmV2aW91c1BhZ2UoKSlyZXR1cm47Y29uc3QgdD10aGlzLnBhZ2VJbmRleDt0aGlzLnBhZ2VJbmRleD0wLHRoaXMuX2VtaXRQYWdlRXZlbnQodCl9bGFzdFBhZ2UoKXtpZighdGhpcy5oYXNOZXh0UGFnZSgpKXJldHVybjtjb25zdCB0PXRoaXMucGFnZUluZGV4O3RoaXMucGFnZUluZGV4PXRoaXMuZ2V0TnVtYmVyT2ZQYWdlcygpLTEsdGhpcy5fZW1pdFBhZ2VFdmVudCh0KX1oYXNQcmV2aW91c1BhZ2UoKXtyZXR1cm4gdGhpcy5wYWdlSW5kZXg+PTEmJjAhPXRoaXMucGFnZVNpemV9aGFzTmV4dFBhZ2UoKXtjb25zdCB0PXRoaXMuZ2V0TnVtYmVyT2ZQYWdlcygpLTE7cmV0dXJuIHRoaXMucGFnZUluZGV4PHQmJjAhPXRoaXMucGFnZVNpemV9Z2V0TnVtYmVyT2ZQYWdlcygpe3JldHVybiB0aGlzLnBhZ2VTaXplP01hdGguY2VpbCh0aGlzLmxlbmd0aC90aGlzLnBhZ2VTaXplKTowfV9jaGFuZ2VQYWdlU2l6ZSh0KXtjb25zdCBlPXRoaXMucGFnZUluZGV4O3RoaXMucGFnZUluZGV4PU1hdGguZmxvb3IodGhpcy5wYWdlSW5kZXgqdGhpcy5wYWdlU2l6ZS90KXx8MCx0aGlzLnBhZ2VTaXplPXQsdGhpcy5fZW1pdFBhZ2VFdmVudChlKX1fbmV4dEJ1dHRvbnNEaXNhYmxlZCgpe3JldHVybiB0aGlzLmRpc2FibGVkfHwhdGhpcy5oYXNOZXh0UGFnZSgpfV9wcmV2aW91c0J1dHRvbnNEaXNhYmxlZCgpe3JldHVybiB0aGlzLmRpc2FibGVkfHwhdGhpcy5oYXNQcmV2aW91c1BhZ2UoKX1fdXBkYXRlRGlzcGxheWVkUGFnZVNpemVPcHRpb25zKCl7dGhpcy5faW5pdGlhbGl6ZWQmJih0aGlzLnBhZ2VTaXplfHwodGhpcy5fcGFnZVNpemU9MCE9dGhpcy5wYWdlU2l6ZU9wdGlvbnMubGVuZ3RoP3RoaXMucGFnZVNpemVPcHRpb25zWzBdOjUwKSx0aGlzLl9kaXNwbGF5ZWRQYWdlU2l6ZU9wdGlvbnM9dGhpcy5wYWdlU2l6ZU9wdGlvbnMuc2xpY2UoKSwtMT09PXRoaXMuX2Rpc3BsYXllZFBhZ2VTaXplT3B0aW9ucy5pbmRleE9mKHRoaXMucGFnZVNpemUpJiZ0aGlzLl9kaXNwbGF5ZWRQYWdlU2l6ZU9wdGlvbnMucHVzaCh0aGlzLnBhZ2VTaXplKSx0aGlzLl9kaXNwbGF5ZWRQYWdlU2l6ZU9wdGlvbnMuc29ydCgoKHQsZSk9PnQtZSkpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX1fZW1pdFBhZ2VFdmVudCh0KXt0aGlzLnBhZ2UuZW1pdCh7cHJldmlvdXNQYWdlSW5kZXg6dCxwYWdlSW5kZXg6dGhpcy5wYWdlSW5kZXgscGFnZVNpemU6dGhpcy5wYWdlU2l6ZSxsZW5ndGg6dGhpcy5sZW5ndGh9KX19aSQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGkkKShNdSgkUSksTXUoSGgpLE11KHZvaWQgMCkpfSxpJC7JtWRpcj1Kbyh7dHlwZTppJCxpbnB1dHM6e3BhZ2VJbmRleDoicGFnZUluZGV4IixsZW5ndGg6Imxlbmd0aCIscGFnZVNpemU6InBhZ2VTaXplIixwYWdlU2l6ZU9wdGlvbnM6InBhZ2VTaXplT3B0aW9ucyIsaGlkZVBhZ2VTaXplOiJoaWRlUGFnZVNpemUiLHNob3dGaXJzdExhc3RCdXR0b25zOiJzaG93Rmlyc3RMYXN0QnV0dG9ucyIsY29sb3I6ImNvbG9yIn0sb3V0cHV0czp7cGFnZToicGFnZSJ9LGZlYXR1cmVzOltnbV19KSxpJC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOiRRfSx7dHlwZTpIaH0se3R5cGU6dm9pZCAwfV0saSQucHJvcERlY29yYXRvcnM9e2NvbG9yOlt7dHlwZTp5X31dLHBhZ2VJbmRleDpbe3R5cGU6eV99XSxsZW5ndGg6W3t0eXBlOnlffV0scGFnZVNpemU6W3t0eXBlOnlffV0scGFnZVNpemVPcHRpb25zOlt7dHlwZTp5X31dLGhpZGVQYWdlU2l6ZTpbe3R5cGU6eV99XSxzaG93Rmlyc3RMYXN0QnV0dG9uczpbe3R5cGU6eV99XSxwYWdlOlt7dHlwZTpfX31dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGkkLFt7dHlwZTpnX31dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTokUX0se3R5cGU6SGh9LHt0eXBlOnZvaWQgMH1dfSkse3BhZ2U6W3t0eXBlOl9ffV0scGFnZUluZGV4Olt7dHlwZTp5X31dLGxlbmd0aDpbe3R5cGU6eV99XSxwYWdlU2l6ZTpbe3R5cGU6eV99XSxwYWdlU2l6ZU9wdGlvbnM6W3t0eXBlOnlffV0saGlkZVBhZ2VTaXplOlt7dHlwZTp5X31dLHNob3dGaXJzdExhc3RCdXR0b25zOlt7dHlwZTp5X31dLGNvbG9yOlt7dHlwZTp5X31dfSk7Y2xhc3MgYSQgZXh0ZW5kcyBpJHtjb25zdHJ1Y3Rvcih0LGUsbil7c3VwZXIodCxlLG4pLG4mJm51bGwhPW4uZm9ybUZpZWxkQXBwZWFyYW5jZSYmKHRoaXMuX2Zvcm1GaWVsZEFwcGVhcmFuY2U9bi5mb3JtRmllbGRBcHBlYXJhbmNlKX19YSQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGEkKShNdSgkUSksTXUoSGgpLE11KG4kLDgpKX0sYSQuybVjbXA9VW8oe3R5cGU6YSQsc2VsZWN0b3JzOltbIm1hdC1wYWdpbmF0b3IiXV0saG9zdEF0dHJzOlsicm9sZSIsImdyb3VwIiwxLCJtYXQtcGFnaW5hdG9yIl0saW5wdXRzOntkaXNhYmxlZDoiZGlzYWJsZWQifSxleHBvcnRBczpbIm1hdFBhZ2luYXRvciJdLGZlYXR1cmVzOltnbV0sZGVjbHM6MTQsdmFyczoxNCxjb25zdHM6W1sxLCJtYXQtcGFnaW5hdG9yLW91dGVyLWNvbnRhaW5lciJdLFsxLCJtYXQtcGFnaW5hdG9yLWNvbnRhaW5lciJdLFsiY2xhc3MiLCJtYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZSIsNCwibmdJZiJdLFsxLCJtYXQtcGFnaW5hdG9yLXJhbmdlLWFjdGlvbnMiXSxbMSwibWF0LXBhZ2luYXRvci1yYW5nZS1sYWJlbCJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwibWF0LXBhZ2luYXRvci1uYXZpZ2F0aW9uLWZpcnN0IiwzLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFBvc2l0aW9uIiwiZGlzYWJsZWQiLCJjbGljayIsNCwibmdJZiJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwidHlwZSIsImJ1dHRvbiIsMSwibWF0LXBhZ2luYXRvci1uYXZpZ2F0aW9uLXByZXZpb3VzIiwzLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFBvc2l0aW9uIiwiZGlzYWJsZWQiLCJjbGljayJdLFsidmlld0JveCIsIjAgMCAyNCAyNCIsImZvY3VzYWJsZSIsImZhbHNlIiwxLCJtYXQtcGFnaW5hdG9yLWljb24iXSxbImQiLCJNMTUuNDEgNy40MUwxNCA2bC02IDYgNiA2IDEuNDEtMS40MUwxMC44MyAxMnoiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsInR5cGUiLCJidXR0b24iLDEsIm1hdC1wYWdpbmF0b3ItbmF2aWdhdGlvbi1uZXh0IiwzLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFBvc2l0aW9uIiwiZGlzYWJsZWQiLCJjbGljayJdLFsiZCIsIk0xMCA2TDguNTkgNy40MSAxMy4xNyAxMmwtNC41OCA0LjU5TDEwIDE4bDYtNnoiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsInR5cGUiLCJidXR0b24iLCJjbGFzcyIsIm1hdC1wYWdpbmF0b3ItbmF2aWdhdGlvbi1sYXN0IiwzLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFBvc2l0aW9uIiwiZGlzYWJsZWQiLCJjbGljayIsNCwibmdJZiJdLFsxLCJtYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZSJdLFsxLCJtYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZS1sYWJlbCJdLFsiY2xhc3MiLCJtYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZS1zZWxlY3QiLDMsImFwcGVhcmFuY2UiLCJjb2xvciIsNCwibmdJZiJdLFsiY2xhc3MiLCJtYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZS12YWx1ZSIsNCwibmdJZiJdLFsxLCJtYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZS1zZWxlY3QiLDMsImFwcGVhcmFuY2UiLCJjb2xvciJdLFszLCJ2YWx1ZSIsImRpc2FibGVkIiwiYXJpYS1sYWJlbCIsInNlbGVjdGlvbkNoYW5nZSJdLFszLCJ2YWx1ZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsInZhbHVlIl0sWzEsIm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplLXZhbHVlIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJ0eXBlIiwiYnV0dG9uIiwxLCJtYXQtcGFnaW5hdG9yLW5hdmlnYXRpb24tZmlyc3QiLDMsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwUG9zaXRpb24iLCJkaXNhYmxlZCIsImNsaWNrIl0sWyJkIiwiTTE4LjQxIDE2LjU5TDEzLjgyIDEybDQuNTktNC41OUwxNyA2bC02IDYgNiA2ek02IDZoMnYxMkg2eiJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwidHlwZSIsImJ1dHRvbiIsMSwibWF0LXBhZ2luYXRvci1uYXZpZ2F0aW9uLWxhc3QiLDMsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwUG9zaXRpb24iLCJkaXNhYmxlZCIsImNsaWNrIl0sWyJkIiwiTTUuNTkgNy40MUwxMC4xOCAxMmwtNC41OSA0LjU5TDcgMThsNi02LTYtNnpNMTYgNmgydjEyaC0yeiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoT3UoMCwiZGl2IiwwKSxPdSgxLCJkaXYiLDEpLFdtKDIsS1EsNSwzLCJkaXYiLDIpLE91KDMsImRpdiIsMyksT3UoNCwiZGl2Iiw0KSxNZig1KSxQdSgpLFdtKDYsSlEsMyw1LCJidXR0b24iLDUpLE91KDcsImJ1dHRvbiIsNiksTnUoImNsaWNrIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLnByZXZpb3VzUGFnZSgpfSkpLEhhKCksT3UoOCwic3ZnIiw3KSx3dSg5LCJwYXRoIiw4KSxQdSgpLFB1KCksRmEoKSxPdSgxMCwiYnV0dG9uIiw5KSxOdSgiY2xpY2siLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ubmV4dFBhZ2UoKX0pKSxIYSgpLE91KDExLCJzdmciLDcpLHd1KDEyLCJwYXRoIiwxMCksUHUoKSxQdSgpLFdtKDEzLFFRLDMsNSwiYnV0dG9uIiwxMSksUHUoKSxQdSgpLFB1KCkpLDImZSYmKEpjKDIpLHZ1KCJuZ0lmIiwhbi5oaWRlUGFnZVNpemUpLEpjKDMpLHhmKCIgIixuLl9pbnRsLmdldFJhbmdlTGFiZWwobi5wYWdlSW5kZXgsbi5wYWdlU2l6ZSxuLmxlbmd0aCksIiAiKSxKYygxKSx2dSgibmdJZiIsbi5zaG93Rmlyc3RMYXN0QnV0dG9ucyksSmMoMSksdnUoIm1hdFRvb2x0aXAiLG4uX2ludGwucHJldmlvdXNQYWdlTGFiZWwpKCJtYXRUb29sdGlwRGlzYWJsZWQiLG4uX3ByZXZpb3VzQnV0dG9uc0Rpc2FibGVkKCkpKCJtYXRUb29sdGlwUG9zaXRpb24iLCJhYm92ZSIpKCJkaXNhYmxlZCIsbi5fcHJldmlvdXNCdXR0b25zRGlzYWJsZWQoKSksTm0oImFyaWEtbGFiZWwiLG4uX2ludGwucHJldmlvdXNQYWdlTGFiZWwpLEpjKDMpLHZ1KCJtYXRUb29sdGlwIixuLl9pbnRsLm5leHRQYWdlTGFiZWwpKCJtYXRUb29sdGlwRGlzYWJsZWQiLG4uX25leHRCdXR0b25zRGlzYWJsZWQoKSkoIm1hdFRvb2x0aXBQb3NpdGlvbiIsImFib3ZlIikoImRpc2FibGVkIixuLl9uZXh0QnV0dG9uc0Rpc2FibGVkKCkpLE5tKCJhcmlhLWxhYmVsIixuLl9pbnRsLm5leHRQYWdlTGFiZWwpLEpjKDMpLHZ1KCJuZ0lmIixuLnNob3dGaXJzdExhc3RCdXR0b25zKSl9LGRpcmVjdGl2ZXM6W2F2LE5ILFdRLF9WLGRXLG92LFBIXSxzdHlsZXM6WyIubWF0LXBhZ2luYXRvcntkaXNwbGF5OmJsb2NrfS5tYXQtcGFnaW5hdG9yLW91dGVyLWNvbnRhaW5lcntkaXNwbGF5OmZsZXh9Lm1hdC1wYWdpbmF0b3ItY29udGFpbmVye2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO3BhZGRpbmc6MCA4cHg7ZmxleC13cmFwOndyYXAtcmV2ZXJzZTt3aWR0aDoxMDAlfS5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6YmFzZWxpbmU7bWFyZ2luLXJpZ2h0OjhweH1bZGlyPXJ0bF0gLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXple21hcmdpbi1yaWdodDowO21hcmdpbi1sZWZ0OjhweH0ubWF0LXBhZ2luYXRvci1wYWdlLXNpemUtbGFiZWx7bWFyZ2luOjAgNHB4fS5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZS1zZWxlY3R7bWFyZ2luOjZweCA0cHggMCA0cHg7d2lkdGg6NTZweH0ubWF0LXBhZ2luYXRvci1wYWdlLXNpemUtc2VsZWN0Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZXt3aWR0aDo2NHB4fS5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZS1zZWxlY3QubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxse3dpZHRoOjY0cHh9Lm1hdC1wYWdpbmF0b3ItcmFuZ2UtbGFiZWx7bWFyZ2luOjAgMzJweCAwIDI0cHh9Lm1hdC1wYWdpbmF0b3ItcmFuZ2UtYWN0aW9uc3tkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5tYXQtcGFnaW5hdG9yLWljb257d2lkdGg6MjhweDtmaWxsOmN1cnJlbnRDb2xvcn1bZGlyPXJ0bF0gLm1hdC1wYWdpbmF0b3ItaWNvbnt0cmFuc2Zvcm06cm90YXRlKDE4MGRlZyl9XG4iXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxhJC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOiRRfSx7dHlwZTpIaH0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltuJF19XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoYSQsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoibWF0LXBhZ2luYXRvciIsZXhwb3J0QXM6Im1hdFBhZ2luYXRvciIsdGVtcGxhdGU6JzxkaXYgY2xhc3M9Im1hdC1wYWdpbmF0b3Itb3V0ZXItY29udGFpbmVyIj5cbiAgPGRpdiBjbGFzcz0ibWF0LXBhZ2luYXRvci1jb250YWluZXIiPlxuICAgIDxkaXYgY2xhc3M9Im1hdC1wYWdpbmF0b3ItcGFnZS1zaXplIiAqbmdJZj0iIWhpZGVQYWdlU2l6ZSI+XG4gICAgICA8ZGl2IGNsYXNzPSJtYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZS1sYWJlbCI+XG4gICAgICAgIHt7X2ludGwuaXRlbXNQZXJQYWdlTGFiZWx9fVxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxtYXQtZm9ybS1maWVsZFxuICAgICAgICAqbmdJZj0iX2Rpc3BsYXllZFBhZ2VTaXplT3B0aW9ucy5sZW5ndGggPiAxIlxuICAgICAgICBbYXBwZWFyYW5jZV09Il9mb3JtRmllbGRBcHBlYXJhbmNlISJcbiAgICAgICAgW2NvbG9yXT0iY29sb3IiXG4gICAgICAgIGNsYXNzPSJtYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZS1zZWxlY3QiPlxuICAgICAgICA8bWF0LXNlbGVjdFxuICAgICAgICAgIFt2YWx1ZV09InBhZ2VTaXplIlxuICAgICAgICAgIFtkaXNhYmxlZF09ImRpc2FibGVkIlxuICAgICAgICAgIFthcmlhLWxhYmVsXT0iX2ludGwuaXRlbXNQZXJQYWdlTGFiZWwiXG4gICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9Il9jaGFuZ2VQYWdlU2l6ZSgkZXZlbnQudmFsdWUpIj5cbiAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBwYWdlU2l6ZU9wdGlvbiBvZiBfZGlzcGxheWVkUGFnZVNpemVPcHRpb25zIiBbdmFsdWVdPSJwYWdlU2l6ZU9wdGlvbiI+XG4gICAgICAgICAgICB7e3BhZ2VTaXplT3B0aW9ufX1cbiAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9Im1hdC1wYWdpbmF0b3ItcGFnZS1zaXplLXZhbHVlIlxuICAgICAgICAqbmdJZj0iX2Rpc3BsYXllZFBhZ2VTaXplT3B0aW9ucy5sZW5ndGggPD0gMSI+e3twYWdlU2l6ZX19PC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPSJtYXQtcGFnaW5hdG9yLXJhbmdlLWFjdGlvbnMiPlxuICAgICAgPGRpdiBjbGFzcz0ibWF0LXBhZ2luYXRvci1yYW5nZS1sYWJlbCI+XG4gICAgICAgIHt7X2ludGwuZ2V0UmFuZ2VMYWJlbChwYWdlSW5kZXgsIHBhZ2VTaXplLCBsZW5ndGgpfX1cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgIGNsYXNzPSJtYXQtcGFnaW5hdG9yLW5hdmlnYXRpb24tZmlyc3QiXG4gICAgICAgICAgICAgIChjbGljayk9ImZpcnN0UGFnZSgpIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT0iX2ludGwuZmlyc3RQYWdlTGFiZWwiXG4gICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iX2ludGwuZmlyc3RQYWdlTGFiZWwiXG4gICAgICAgICAgICAgIFttYXRUb29sdGlwRGlzYWJsZWRdPSJfcHJldmlvdXNCdXR0b25zRGlzYWJsZWQoKSJcbiAgICAgICAgICAgICAgW21hdFRvb2x0aXBQb3NpdGlvbl09IlwnYWJvdmVcJyJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iX3ByZXZpb3VzQnV0dG9uc0Rpc2FibGVkKCkiXG4gICAgICAgICAgICAgICpuZ0lmPSJzaG93Rmlyc3RMYXN0QnV0dG9ucyI+XG4gICAgICAgIDxzdmcgY2xhc3M9Im1hdC1wYWdpbmF0b3ItaWNvbiIgdmlld0JveD0iMCAwIDI0IDI0IiBmb2N1c2FibGU9ImZhbHNlIj5cbiAgICAgICAgICA8cGF0aCBkPSJNMTguNDEgMTYuNTlMMTMuODIgMTJsNC41OS00LjU5TDE3IDZsLTYgNiA2IDZ6TTYgNmgydjEySDZ6Ii8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgIGNsYXNzPSJtYXQtcGFnaW5hdG9yLW5hdmlnYXRpb24tcHJldmlvdXMiXG4gICAgICAgICAgICAgIChjbGljayk9InByZXZpb3VzUGFnZSgpIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT0iX2ludGwucHJldmlvdXNQYWdlTGFiZWwiXG4gICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iX2ludGwucHJldmlvdXNQYWdlTGFiZWwiXG4gICAgICAgICAgICAgIFttYXRUb29sdGlwRGlzYWJsZWRdPSJfcHJldmlvdXNCdXR0b25zRGlzYWJsZWQoKSJcbiAgICAgICAgICAgICAgW21hdFRvb2x0aXBQb3NpdGlvbl09IlwnYWJvdmVcJyJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iX3ByZXZpb3VzQnV0dG9uc0Rpc2FibGVkKCkiPlxuICAgICAgICA8c3ZnIGNsYXNzPSJtYXQtcGFnaW5hdG9yLWljb24iIHZpZXdCb3g9IjAgMCAyNCAyNCIgZm9jdXNhYmxlPSJmYWxzZSI+XG4gICAgICAgICAgPHBhdGggZD0iTTE1LjQxIDcuNDFMMTQgNmwtNiA2IDYgNiAxLjQxLTEuNDFMMTAuODMgMTJ6Ii8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgIGNsYXNzPSJtYXQtcGFnaW5hdG9yLW5hdmlnYXRpb24tbmV4dCJcbiAgICAgICAgICAgICAgKGNsaWNrKT0ibmV4dFBhZ2UoKSJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09Il9pbnRsLm5leHRQYWdlTGFiZWwiXG4gICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iX2ludGwubmV4dFBhZ2VMYWJlbCJcbiAgICAgICAgICAgICAgW21hdFRvb2x0aXBEaXNhYmxlZF09Il9uZXh0QnV0dG9uc0Rpc2FibGVkKCkiXG4gICAgICAgICAgICAgIFttYXRUb29sdGlwUG9zaXRpb25dPSJcJ2Fib3ZlXCciXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09Il9uZXh0QnV0dG9uc0Rpc2FibGVkKCkiPlxuICAgICAgICA8c3ZnIGNsYXNzPSJtYXQtcGFnaW5hdG9yLWljb24iIHZpZXdCb3g9IjAgMCAyNCAyNCIgZm9jdXNhYmxlPSJmYWxzZSI+XG4gICAgICAgICAgPHBhdGggZD0iTTEwIDZMOC41OSA3LjQxIDEzLjE3IDEybC00LjU4IDQuNTlMMTAgMThsNi02eiIvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICBjbGFzcz0ibWF0LXBhZ2luYXRvci1uYXZpZ2F0aW9uLWxhc3QiXG4gICAgICAgICAgICAgIChjbGljayk9Imxhc3RQYWdlKCkiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPSJfaW50bC5sYXN0UGFnZUxhYmVsIlxuICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09Il9pbnRsLmxhc3RQYWdlTGFiZWwiXG4gICAgICAgICAgICAgIFttYXRUb29sdGlwRGlzYWJsZWRdPSJfbmV4dEJ1dHRvbnNEaXNhYmxlZCgpIlxuICAgICAgICAgICAgICBbbWF0VG9vbHRpcFBvc2l0aW9uXT0iXCdhYm92ZVwnIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJfbmV4dEJ1dHRvbnNEaXNhYmxlZCgpIlxuICAgICAgICAgICAgICAqbmdJZj0ic2hvd0ZpcnN0TGFzdEJ1dHRvbnMiPlxuICAgICAgICA8c3ZnIGNsYXNzPSJtYXQtcGFnaW5hdG9yLWljb24iIHZpZXdCb3g9IjAgMCAyNCAyNCIgZm9jdXNhYmxlPSJmYWxzZSI+XG4gICAgICAgICAgPHBhdGggZD0iTTUuNTkgNy40MUwxMC4xOCAxMmwtNC41OSA0LjU5TDcgMThsNi02LTYtNnpNMTYgNmgydjEyaC0yeiIvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuJyxpbnB1dHM6WyJkaXNhYmxlZCJdLGhvc3Q6e2NsYXNzOiJtYXQtcGFnaW5hdG9yIixyb2xlOiJncm91cCJ9LGNoYW5nZURldGVjdGlvbjp4by5PblB1c2gsZW5jYXBzdWxhdGlvbjpQby5Ob25lLHN0eWxlczpbIi5tYXQtcGFnaW5hdG9ye2Rpc3BsYXk6YmxvY2t9Lm1hdC1wYWdpbmF0b3Itb3V0ZXItY29udGFpbmVye2Rpc3BsYXk6ZmxleH0ubWF0LXBhZ2luYXRvci1jb250YWluZXJ7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7cGFkZGluZzowIDhweDtmbGV4LXdyYXA6d3JhcC1yZXZlcnNlO3dpZHRoOjEwMCV9Lm1hdC1wYWdpbmF0b3ItcGFnZS1zaXple2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpiYXNlbGluZTttYXJnaW4tcmlnaHQ6OHB4fVtkaXI9cnRsXSAubWF0LXBhZ2luYXRvci1wYWdlLXNpemV7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6OHB4fS5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZS1sYWJlbHttYXJnaW46MCA0cHh9Lm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplLXNlbGVjdHttYXJnaW46NnB4IDRweCAwIDRweDt3aWR0aDo1NnB4fS5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZS1zZWxlY3QubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5le3dpZHRoOjY0cHh9Lm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplLXNlbGVjdC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGx7d2lkdGg6NjRweH0ubWF0LXBhZ2luYXRvci1yYW5nZS1sYWJlbHttYXJnaW46MCAzMnB4IDAgMjRweH0ubWF0LXBhZ2luYXRvci1yYW5nZS1hY3Rpb25ze2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9Lm1hdC1wYWdpbmF0b3ItaWNvbnt3aWR0aDoyOHB4O2ZpbGw6Y3VycmVudENvbG9yfVtkaXI9cnRsXSAubWF0LXBhZ2luYXRvci1pY29ue3RyYW5zZm9ybTpyb3RhdGUoMTgwZGVnKX1cbiJdfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6JFF9LHt0eXBlOkhofSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W24kXX1dfV19KSxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIHIke31mdW5jdGlvbiBzJCh0LGUpe2lmKDEmdCl7Y29uc3QgdD1FdSgpO091KDAsImRpdiIsMyksTnUoIkBhcnJvd1Bvc2l0aW9uLnN0YXJ0IiwoZnVuY3Rpb24gZSgpe3JldHVybiByYSh0KSxMdSgpLl9kaXNhYmxlVmlld1N0YXRlQW5pbWF0aW9uPSEwfSkpKCJAYXJyb3dQb3NpdGlvbi5kb25lIiwoZnVuY3Rpb24gZSgpe3JldHVybiByYSh0KSxMdSgpLl9kaXNhYmxlVmlld1N0YXRlQW5pbWF0aW9uPSExfSkpLHd1KDEsImRpdiIsNCksT3UoMiwiZGl2Iiw1KSx3dSgzLCJkaXYiLDYpLHd1KDQsImRpdiIsNyksd3UoNSwiZGl2Iiw4KSxQdSgpLFB1KCl9aWYoMiZ0KXtjb25zdCB0PUx1KCk7dnUoIkBhcnJvd09wYWNpdHkiLHQuX2dldEFycm93Vmlld1N0YXRlKCkpKCJAYXJyb3dQb3NpdGlvbiIsdC5fZ2V0QXJyb3dWaWV3U3RhdGUoKSkoIkBhbGxvd0NoaWxkcmVuIix0Ll9nZXRBcnJvd0RpcmVjdGlvblN0YXRlKCkpLEpjKDIpLHZ1KCJAaW5kaWNhdG9yIix0Ll9nZXRBcnJvd0RpcmVjdGlvblN0YXRlKCkpLEpjKDEpLHZ1KCJAbGVmdFBvaW50ZXIiLHQuX2dldEFycm93RGlyZWN0aW9uU3RhdGUoKSksSmMoMSksdnUoIkByaWdodFBvaW50ZXIiLHQuX2dldEFycm93RGlyZWN0aW9uU3RhdGUoKSl9fXIkLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxyJCl9LHIkLsm1bW9kPVpvKHt0eXBlOnIkfSksciQuybVpbmo9Y28oe3Byb3ZpZGVyczpbdCRdLGltcG9ydHM6W1tCdix6SCxtVyxZUSxUel1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhyJCx7ZGVjbGFyYXRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuW2EkXX0saW1wb3J0czpmdW5jdGlvbigpe3JldHVybltCdix6SCxtVyxZUSxUel19LGV4cG9ydHM6ZnVuY3Rpb24oKXtyZXR1cm5bYSRdfX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIociQsW3t0eXBlOmtfLGFyZ3M6W3tpbXBvcnRzOltCdix6SCxtVyxZUSxUel0sZXhwb3J0czpbYSRdLGRlY2xhcmF0aW9uczpbYSRdLHByb3ZpZGVyczpbdCRdfV19XSxudWxsLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3QgbCQ9bmV3IE5yKCJNQVRfU09SVF9ERUZBVUxUX09QVElPTlMiKSxjJD1MeihOeihjbGFzc3t9KSk7Y2xhc3MgZCQgZXh0ZW5kcyBjJHtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuX2RlZmF1bHRPcHRpb25zPXQsdGhpcy5zb3J0YWJsZXM9bmV3IE1hcCx0aGlzLl9zdGF0ZUNoYW5nZXM9bmV3IHgsdGhpcy5zdGFydD0iYXNjIix0aGlzLl9kaXJlY3Rpb249IiIsdGhpcy5zb3J0Q2hhbmdlPW5ldyBBYn1nZXQgZGlyZWN0aW9uKCl7cmV0dXJuIHRoaXMuX2RpcmVjdGlvbn1zZXQgZGlyZWN0aW9uKHQpe2lmKHQmJiJhc2MiIT09dCYmImRlc2MiIT09dCYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpKXRocm93KGZ1bmN0aW9uIGUodCl7cmV0dXJuIEVycm9yKGAke3R9IGlzIG5vdCBhIHZhbGlkIHNvcnQgZGlyZWN0aW9uICgnYXNjJyBvciAnZGVzYycpLmApfSkodCk7dGhpcy5fZGlyZWN0aW9uPXR9Z2V0IGRpc2FibGVDbGVhcigpe3JldHVybiB0aGlzLl9kaXNhYmxlQ2xlYXJ9c2V0IGRpc2FibGVDbGVhcih0KXt0aGlzLl9kaXNhYmxlQ2xlYXI9ckkodCl9cmVnaXN0ZXIodCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSl7aWYoIXQuaWQpdGhyb3coZnVuY3Rpb24gZSgpe3JldHVybiBFcnJvcigiTWF0U29ydEhlYWRlciBtdXN0IGJlIHByb3ZpZGVkIHdpdGggYSB1bmlxdWUgaWQuIil9KSgpO2lmKHRoaXMuc29ydGFibGVzLmhhcyh0LmlkKSl0aHJvdyhmdW5jdGlvbiBuKHQpe3JldHVybiBFcnJvcihgQ2Fubm90IGhhdmUgdHdvIE1hdFNvcnRhYmxlcyB3aXRoIHRoZSBzYW1lIGlkICgke3R9KS5gKX0pKHQuaWQpfXRoaXMuc29ydGFibGVzLnNldCh0LmlkLHQpfWRlcmVnaXN0ZXIodCl7dGhpcy5zb3J0YWJsZXMuZGVsZXRlKHQuaWQpfXNvcnQodCl7dGhpcy5hY3RpdmUhPXQuaWQ/KHRoaXMuYWN0aXZlPXQuaWQsdGhpcy5kaXJlY3Rpb249dC5zdGFydD90LnN0YXJ0OnRoaXMuc3RhcnQpOnRoaXMuZGlyZWN0aW9uPXRoaXMuZ2V0TmV4dFNvcnREaXJlY3Rpb24odCksdGhpcy5zb3J0Q2hhbmdlLmVtaXQoe2FjdGl2ZTp0aGlzLmFjdGl2ZSxkaXJlY3Rpb246dGhpcy5kaXJlY3Rpb259KX1nZXROZXh0U29ydERpcmVjdGlvbih0KXt2YXIgZSxuLG87aWYoIXQpcmV0dXJuIiI7Y29uc3QgaT1udWxsIT09KG49bnVsbCE9PShlPW51bGw9PXQ/dm9pZCAwOnQuZGlzYWJsZUNsZWFyKSYmdm9pZCAwIT09ZT9lOnRoaXMuZGlzYWJsZUNsZWFyKSYmdm9pZCAwIT09bj9uOiEhKG51bGw9PT0obz10aGlzLl9kZWZhdWx0T3B0aW9ucyl8fHZvaWQgMD09PW8/dm9pZCAwOm8uZGlzYWJsZUNsZWFyKTtsZXQgYT0oZnVuY3Rpb24gcih0LGUpe2xldCBuPVsiYXNjIiwiZGVzYyJdO3JldHVybiJkZXNjIj09dCYmbi5yZXZlcnNlKCksZXx8bi5wdXNoKCIiKSxufQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8pKHQuc3RhcnR8fHRoaXMuc3RhcnQsaSkscz1hLmluZGV4T2YodGhpcy5kaXJlY3Rpb24pKzE7cmV0dXJuIHM+PWEubGVuZ3RoJiYocz0wKSxhW3NdfW5nT25Jbml0KCl7dGhpcy5fbWFya0luaXRpYWxpemVkKCl9bmdPbkNoYW5nZXMoKXt0aGlzLl9zdGF0ZUNoYW5nZXMubmV4dCgpfW5nT25EZXN0cm95KCl7dGhpcy5fc3RhdGVDaGFuZ2VzLmNvbXBsZXRlKCl9fWQkLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxkJCkoTXUobCQsOCkpfSxkJC7JtWRpcj1Kbyh7dHlwZTpkJCxzZWxlY3RvcnM6W1siIiwibWF0U29ydCIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1zb3J0Il0saW5wdXRzOntkaXNhYmxlZDpbIm1hdFNvcnREaXNhYmxlZCIsImRpc2FibGVkIl0sc3RhcnQ6WyJtYXRTb3J0U3RhcnQiLCJzdGFydCJdLGRpcmVjdGlvbjpbIm1hdFNvcnREaXJlY3Rpb24iLCJkaXJlY3Rpb24iXSxkaXNhYmxlQ2xlYXI6WyJtYXRTb3J0RGlzYWJsZUNsZWFyIiwiZGlzYWJsZUNsZWFyIl0sYWN0aXZlOlsibWF0U29ydEFjdGl2ZSIsImFjdGl2ZSJdfSxvdXRwdXRzOntzb3J0Q2hhbmdlOiJtYXRTb3J0Q2hhbmdlIn0sZXhwb3J0QXM6WyJtYXRTb3J0Il0sZmVhdHVyZXM6W2dtLFNpXX0pLGQkLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltsJF19XX1dLGQkLnByb3BEZWNvcmF0b3JzPXthY3RpdmU6W3t0eXBlOnlfLGFyZ3M6WyJtYXRTb3J0QWN0aXZlIl19XSxzdGFydDpbe3R5cGU6eV8sYXJnczpbIm1hdFNvcnRTdGFydCJdfV0sZGlyZWN0aW9uOlt7dHlwZTp5XyxhcmdzOlsibWF0U29ydERpcmVjdGlvbiJdfV0sZGlzYWJsZUNsZWFyOlt7dHlwZTp5XyxhcmdzOlsibWF0U29ydERpc2FibGVDbGVhciJdfV0sc29ydENoYW5nZTpbe3R5cGU6X18sYXJnczpbIm1hdFNvcnRDaGFuZ2UiXX1dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGQkLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6IlttYXRTb3J0XSIsZXhwb3J0QXM6Im1hdFNvcnQiLGhvc3Q6e2NsYXNzOiJtYXQtc29ydCJ9LGlucHV0czpbImRpc2FibGVkOiBtYXRTb3J0RGlzYWJsZWQiXX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbbCRdfV19XX0pLHtzdGFydDpbe3R5cGU6eV8sYXJnczpbIm1hdFNvcnRTdGFydCJdfV0sc29ydENoYW5nZTpbe3R5cGU6X18sYXJnczpbIm1hdFNvcnRDaGFuZ2UiXX1dLGRpcmVjdGlvbjpbe3R5cGU6eV8sYXJnczpbIm1hdFNvcnREaXJlY3Rpb24iXX1dLGRpc2FibGVDbGVhcjpbe3R5cGU6eV8sYXJnczpbIm1hdFNvcnREaXNhYmxlQ2xlYXIiXX1dLGFjdGl2ZTpbe3R5cGU6eV8sYXJnczpbIm1hdFNvcnRBY3RpdmUiXX1dfSk7Y29uc3QgcCQ9RHouRU5URVJJTkcrIiAiK1N6LlNUQU5EQVJEX0NVUlZFLG0kPXtpbmRpY2F0b3I6S3goImluZGljYXRvciIsW3RPKCJhY3RpdmUtYXNjLCBhc2MiLCR4KHt0cmFuc2Zvcm06InRyYW5zbGF0ZVkoMHB4KSJ9KSksdE8oImFjdGl2ZS1kZXNjLCBkZXNjIiwkeCh7dHJhbnNmb3JtOiJ0cmFuc2xhdGVZKDEwcHgpIn0pKSxuTygiYWN0aXZlLWFzYyA8PT4gYWN0aXZlLWRlc2MiLEp4KHAkKSldKSxsZWZ0UG9pbnRlcjpLeCgibGVmdFBvaW50ZXIiLFt0TygiYWN0aXZlLWFzYywgYXNjIiwkeCh7dHJhbnNmb3JtOiJyb3RhdGUoLTQ1ZGVnKSJ9KSksdE8oImFjdGl2ZS1kZXNjLCBkZXNjIiwkeCh7dHJhbnNmb3JtOiJyb3RhdGUoNDVkZWcpIn0pKSxuTygiYWN0aXZlLWFzYyA8PT4gYWN0aXZlLWRlc2MiLEp4KHAkKSldKSxyaWdodFBvaW50ZXI6S3goInJpZ2h0UG9pbnRlciIsW3RPKCJhY3RpdmUtYXNjLCBhc2MiLCR4KHt0cmFuc2Zvcm06InJvdGF0ZSg0NWRlZykifSkpLHRPKCJhY3RpdmUtZGVzYywgZGVzYyIsJHgoe3RyYW5zZm9ybToicm90YXRlKC00NWRlZykifSkpLG5PKCJhY3RpdmUtYXNjIDw9PiBhY3RpdmUtZGVzYyIsSngocCQpKV0pLGFycm93T3BhY2l0eTpLeCgiYXJyb3dPcGFjaXR5IixbdE8oImRlc2MtdG8tYWN0aXZlLCBhc2MtdG8tYWN0aXZlLCBhY3RpdmUiLCR4KHtvcGFjaXR5OjF9KSksdE8oImRlc2MtdG8taGludCwgYXNjLXRvLWhpbnQsIGhpbnQiLCR4KHtvcGFjaXR5Oi41NH0pKSx0TygiaGludC10by1kZXNjLCBhY3RpdmUtdG8tZGVzYywgZGVzYywgaGludC10by1hc2MsIGFjdGl2ZS10by1hc2MsIGFzYywgdm9pZCIsJHgoe29wYWNpdHk6MH0pKSxuTygiKiA9PiBhc2MsICogPT4gZGVzYywgKiA9PiBhY3RpdmUsICogPT4gaGludCwgKiA9PiB2b2lkIixKeCgiMG1zIikpLG5PKCIqIDw9PiAqIixKeChwJCkpXSksYXJyb3dQb3NpdGlvbjpLeCgiYXJyb3dQb3NpdGlvbiIsW25PKCIqID0+IGRlc2MtdG8taGludCwgKiA9PiBkZXNjLXRvLWFjdGl2ZSIsSngocCQsZU8oWyR4KHt0cmFuc2Zvcm06InRyYW5zbGF0ZVkoLTI1JSkifSksJHgoe3RyYW5zZm9ybToidHJhbnNsYXRlWSgwKSJ9KV0pKSksbk8oIiogPT4gaGludC10by1kZXNjLCAqID0+IGFjdGl2ZS10by1kZXNjIixKeChwJCxlTyhbJHgoe3RyYW5zZm9ybToidHJhbnNsYXRlWSgwKSJ9KSwkeCh7dHJhbnNmb3JtOiJ0cmFuc2xhdGVZKDI1JSkifSldKSkpLG5PKCIqID0+IGFzYy10by1oaW50LCAqID0+IGFzYy10by1hY3RpdmUiLEp4KHAkLGVPKFskeCh7dHJhbnNmb3JtOiJ0cmFuc2xhdGVZKDI1JSkifSksJHgoe3RyYW5zZm9ybToidHJhbnNsYXRlWSgwKSJ9KV0pKSksbk8oIiogPT4gaGludC10by1hc2MsICogPT4gYWN0aXZlLXRvLWFzYyIsSngocCQsZU8oWyR4KHt0cmFuc2Zvcm06InRyYW5zbGF0ZVkoMCkifSksJHgoe3RyYW5zZm9ybToidHJhbnNsYXRlWSgtMjUlKSJ9KV0pKSksdE8oImRlc2MtdG8taGludCwgYXNjLXRvLWhpbnQsIGhpbnQsIGRlc2MtdG8tYWN0aXZlLCBhc2MtdG8tYWN0aXZlLCBhY3RpdmUiLCR4KHt0cmFuc2Zvcm06InRyYW5zbGF0ZVkoMCkifSkpLHRPKCJoaW50LXRvLWRlc2MsIGFjdGl2ZS10by1kZXNjLCBkZXNjIiwkeCh7dHJhbnNmb3JtOiJ0cmFuc2xhdGVZKC0yNSUpIn0pKSx0TygiaGludC10by1hc2MsIGFjdGl2ZS10by1hc2MsIGFzYyIsJHgoe3RyYW5zZm9ybToidHJhbnNsYXRlWSgyNSUpIn0pKV0pLGFsbG93Q2hpbGRyZW46S3goImFsbG93Q2hpbGRyZW4iLFtuTygiKiA8PT4gKiIsW2lPKCJAKiIsb08oKSx7b3B0aW9uYWw6ITB9KV0pXSl9OwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3MgdSR7Y29uc3RydWN0b3IoKXt0aGlzLmNoYW5nZXM9bmV3IHgsdGhpcy5zb3J0QnV0dG9uTGFiZWw9dD0+YENoYW5nZSBzb3J0aW5nIGZvciAke3R9YH19dSQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHUkKX0sdSQuybVwcm92PWxvKHtmYWN0b3J5OmZ1bmN0aW9uIHQoKXtyZXR1cm4gbmV3IHUkfSx0b2tlbjp1JCxwcm92aWRlZEluOiJyb290In0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIodSQsW3t0eXBlOkptLGFyZ3M6W3twcm92aWRlZEluOiJyb290In1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW119KSxudWxsKTtjb25zdCBmJD17cHJvdmlkZTp1JCxkZXBzOltbbmV3IF9zLG5ldyBNcyx1JF1dLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gZyQodCl7cmV0dXJuIHR8fG5ldyB1JH19LGgkPU56KAovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3N7fSk7Y2xhc3MgYiQgZXh0ZW5kcyBoJHtjb25zdHJ1Y3Rvcih0LGUsbixvLGksYSl7aWYoc3VwZXIoKSx0aGlzLl9pbnRsPXQsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9ZSx0aGlzLl9zb3J0PW4sdGhpcy5fY29sdW1uRGVmPW8sdGhpcy5fZm9jdXNNb25pdG9yPWksdGhpcy5fZWxlbWVudFJlZj1hLHRoaXMuX3Nob3dJbmRpY2F0b3JIaW50PSExLHRoaXMuX2Fycm93RGlyZWN0aW9uPSIiLHRoaXMuX2Rpc2FibGVWaWV3U3RhdGVBbmltYXRpb249ITEsdGhpcy5hcnJvd1Bvc2l0aW9uPSJhZnRlciIsIW4mJigidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSl0aHJvdyhmdW5jdGlvbiByKCl7cmV0dXJuIEVycm9yKCJNYXRTb3J0SGVhZGVyIG11c3QgYmUgcGxhY2VkIHdpdGhpbiBhIHBhcmVudCBlbGVtZW50IHdpdGggdGhlIE1hdFNvcnQgZGlyZWN0aXZlLiIpfSkoKTt0aGlzLl9oYW5kbGVTdGF0ZUNoYW5nZXMoKX1nZXQgZGlzYWJsZUNsZWFyKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVDbGVhcn1zZXQgZGlzYWJsZUNsZWFyKHQpe3RoaXMuX2Rpc2FibGVDbGVhcj1ySSh0KX1uZ09uSW5pdCgpeyF0aGlzLmlkJiZ0aGlzLl9jb2x1bW5EZWYmJih0aGlzLmlkPXRoaXMuX2NvbHVtbkRlZi5uYW1lKSx0aGlzLl91cGRhdGVBcnJvd0RpcmVjdGlvbigpLHRoaXMuX3NldEFuaW1hdGlvblRyYW5zaXRpb25TdGF0ZSh7dG9TdGF0ZTp0aGlzLl9pc1NvcnRlZCgpPyJhY3RpdmUiOnRoaXMuX2Fycm93RGlyZWN0aW9ufSksdGhpcy5fc29ydC5yZWdpc3Rlcih0aGlzKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9mb2N1c01vbml0b3IubW9uaXRvcih0aGlzLl9lbGVtZW50UmVmLCEwKS5zdWJzY3JpYmUoKHQ9Pntjb25zdCBlPSEhdDtlIT09dGhpcy5fc2hvd0luZGljYXRvckhpbnQmJih0aGlzLl9zZXRJbmRpY2F0b3JIaW50VmlzaWJsZShlKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcodGhpcy5fZWxlbWVudFJlZiksdGhpcy5fc29ydC5kZXJlZ2lzdGVyKHRoaXMpLHRoaXMuX3JlcmVuZGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9X3NldEluZGljYXRvckhpbnRWaXNpYmxlKHQpe3RoaXMuX2lzRGlzYWJsZWQoKSYmdHx8KHRoaXMuX3Nob3dJbmRpY2F0b3JIaW50PXQsdGhpcy5faXNTb3J0ZWQoKXx8KHRoaXMuX3VwZGF0ZUFycm93RGlyZWN0aW9uKCksdGhpcy5fc2V0QW5pbWF0aW9uVHJhbnNpdGlvblN0YXRlKHRoaXMuX3Nob3dJbmRpY2F0b3JIaW50P3tmcm9tU3RhdGU6dGhpcy5fYXJyb3dEaXJlY3Rpb24sdG9TdGF0ZToiaGludCJ9Ontmcm9tU3RhdGU6ImhpbnQiLHRvU3RhdGU6dGhpcy5fYXJyb3dEaXJlY3Rpb259KSkpfV9zZXRBbmltYXRpb25UcmFuc2l0aW9uU3RhdGUodCl7dGhpcy5fdmlld1N0YXRlPXQsdGhpcy5fZGlzYWJsZVZpZXdTdGF0ZUFuaW1hdGlvbiYmKHRoaXMuX3ZpZXdTdGF0ZT17dG9TdGF0ZTp0LnRvU3RhdGV9KX1fdG9nZ2xlT25JbnRlcmFjdGlvbigpe3RoaXMuX3NvcnQuc29ydCh0aGlzKSwiaGludCIhPT10aGlzLl92aWV3U3RhdGUudG9TdGF0ZSYmImFjdGl2ZSIhPT10aGlzLl92aWV3U3RhdGUudG9TdGF0ZXx8KHRoaXMuX2Rpc2FibGVWaWV3U3RhdGVBbmltYXRpb249ITApfV9oYW5kbGVDbGljaygpe3RoaXMuX2lzRGlzYWJsZWQoKXx8dGhpcy5fc29ydC5zb3J0KHRoaXMpfV9oYW5kbGVLZXlkb3duKHQpe3RoaXMuX2lzRGlzYWJsZWQoKXx8dC5rZXlDb2RlIT09bkkmJnQua2V5Q29kZSE9PXRJfHwodC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX3RvZ2dsZU9uSW50ZXJhY3Rpb24oKSl9X2lzU29ydGVkKCl7cmV0dXJuIHRoaXMuX3NvcnQuYWN0aXZlPT10aGlzLmlkJiYoImFzYyI9PT10aGlzLl9zb3J0LmRpcmVjdGlvbnx8ImRlc2MiPT09dGhpcy5fc29ydC5kaXJlY3Rpb24pfV9nZXRBcnJvd0RpcmVjdGlvblN0YXRlKCl7cmV0dXJuYCR7dGhpcy5faXNTb3J0ZWQoKT8iYWN0aXZlLSI6IiJ9JHt0aGlzLl9hcnJvd0RpcmVjdGlvbn1gfV9nZXRBcnJvd1ZpZXdTdGF0ZSgpe2NvbnN0IHQ9dGhpcy5fdmlld1N0YXRlLmZyb21TdGF0ZTtyZXR1cm4odD9gJHt0fS10by1gOiIiKSt0aGlzLl92aWV3U3RhdGUudG9TdGF0ZX1fdXBkYXRlQXJyb3dEaXJlY3Rpb24oKXt0aGlzLl9hcnJvd0RpcmVjdGlvbj10aGlzLl9pc1NvcnRlZCgpP3RoaXMuX3NvcnQuZGlyZWN0aW9uOnRoaXMuc3RhcnR8fHRoaXMuX3NvcnQuc3RhcnR9X2lzRGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fc29ydC5kaXNhYmxlZHx8dGhpcy5kaXNhYmxlZH1fZ2V0QXJpYVNvcnRBdHRyaWJ1dGUoKXtyZXR1cm4gdGhpcy5faXNTb3J0ZWQoKT8iYXNjIj09dGhpcy5fc29ydC5kaXJlY3Rpb24/ImFzY2VuZGluZyI6ImRlc2NlbmRpbmciOiJub25lIn1fcmVuZGVyQXJyb3coKXtyZXR1cm4hdGhpcy5faXNEaXNhYmxlZCgpfHx0aGlzLl9pc1NvcnRlZCgpfV9oYW5kbGVTdGF0ZUNoYW5nZXMoKXt0aGlzLl9yZXJlbmRlclN1YnNjcmlwdGlvbj1XdCh0aGlzLl9zb3J0LnNvcnRDaGFuZ2UsdGhpcy5fc29ydC5fc3RhdGVDaGFuZ2VzLHRoaXMuX2ludGwuY2hhbmdlcykuc3Vic2NyaWJlKCgoKT0+e3RoaXMuX2lzU29ydGVkKCkmJih0aGlzLl91cGRhdGVBcnJvd0RpcmVjdGlvbigpLCJoaW50IiE9PXRoaXMuX3ZpZXdTdGF0ZS50b1N0YXRlJiYiYWN0aXZlIiE9PXRoaXMuX3ZpZXdTdGF0ZS50b1N0YXRlfHwodGhpcy5fZGlzYWJsZVZpZXdTdGF0ZUFuaW1hdGlvbj0hMCksdGhpcy5fc2V0QW5pbWF0aW9uVHJhbnNpdGlvblN0YXRlKHtmcm9tU3RhdGU6dGhpcy5fYXJyb3dEaXJlY3Rpb24sdG9TdGF0ZToiYWN0aXZlIn0pLHRoaXMuX3Nob3dJbmRpY2F0b3JIaW50PSExKSwhdGhpcy5faXNTb3J0ZWQoKSYmdGhpcy5fdmlld1N0YXRlJiYiYWN0aXZlIj09PXRoaXMuX3ZpZXdTdGF0ZS50b1N0YXRlJiYodGhpcy5fZGlzYWJsZVZpZXdTdGF0ZUFuaW1hdGlvbj0hMSx0aGlzLl9zZXRBbmltYXRpb25UcmFuc2l0aW9uU3RhdGUoe2Zyb21TdGF0ZToiYWN0aXZlIix0b1N0YXRlOnRoaXMuX2Fycm93RGlyZWN0aW9ufSkpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSkpfX1iJC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8YiQpKE11KHUkKSxNdShIaCksTXUoZCQsOCksTXUoIk1BVF9TT1JUX0hFQURFUl9DT0xVTU5fREVGIiw4KSxNdShweiksTXUoY2gpKX0sYiQuybVjbXA9VW8oe3R5cGU6YiQsc2VsZWN0b3JzOltbIiIsIm1hdC1zb3J0LWhlYWRlciIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1zb3J0LWhlYWRlciJdLGhvc3RWYXJzOjMsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJk51KCJjbGljayIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5faGFuZGxlQ2xpY2soKX0pKSgia2V5ZG93biIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4uX2hhbmRsZUtleWRvd24oZSl9KSkoIm1vdXNlZW50ZXIiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uX3NldEluZGljYXRvckhpbnRWaXNpYmxlKCEwKX0pKSgibW91c2VsZWF2ZSIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5fc2V0SW5kaWNhdG9ySGludFZpc2libGUoITEpfSkpLDImZSYmKE5tKCJhcmlhLXNvcnQiLG4uX2dldEFyaWFTb3J0QXR0cmlidXRlKCkpLGFmKCJtYXQtc29ydC1oZWFkZXItZGlzYWJsZWQiLG4uX2lzRGlzYWJsZWQoKSkpfSxpbnB1dHM6e2Rpc2FibGVkOiJkaXNhYmxlZCIsYXJyb3dQb3NpdGlvbjoiYXJyb3dQb3NpdGlvbiIsZGlzYWJsZUNsZWFyOiJkaXNhYmxlQ2xlYXIiLGlkOlsibWF0LXNvcnQtaGVhZGVyIiwiaWQiXSxzdGFydDoic3RhcnQifSxleHBvcnRBczpbIm1hdFNvcnRIZWFkZXIiXSxmZWF0dXJlczpbZ21dLGF0dHJzOlsibWF0LXNvcnQtaGVhZGVyIiwiIl0sbmdDb250ZW50U2VsZWN0b3JzOlsiKiJdLGRlY2xzOjQsdmFyczo2LGNvbnN0czpbWyJyb2xlIiwiYnV0dG9uIiwxLCJtYXQtc29ydC1oZWFkZXItY29udGFpbmVyIiwibWF0LWZvY3VzLWluZGljYXRvciJdLFsxLCJtYXQtc29ydC1oZWFkZXItY29udGVudCJdLFsiY2xhc3MiLCJtYXQtc29ydC1oZWFkZXItYXJyb3ciLDQsIm5nSWYiXSxbMSwibWF0LXNvcnQtaGVhZGVyLWFycm93Il0sWzEsIm1hdC1zb3J0LWhlYWRlci1zdGVtIl0sWzEsIm1hdC1zb3J0LWhlYWRlci1pbmRpY2F0b3IiXSxbMSwibWF0LXNvcnQtaGVhZGVyLXBvaW50ZXItbGVmdCJdLFsxLCJtYXQtc29ydC1oZWFkZXItcG9pbnRlci1yaWdodCJdLFsxLCJtYXQtc29ydC1oZWFkZXItcG9pbnRlci1taWRkbGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKFZ1KCksT3UoMCwiZGl2IiwwKSxPdSgxLCJkaXYiLDEpLGp1KDIpLFB1KCksV20oMyxzJCw2LDYsImRpdiIsMiksUHUoKSksMiZlJiYoYWYoIm1hdC1zb3J0LWhlYWRlci1zb3J0ZWQiLG4uX2lzU29ydGVkKCkpKCJtYXQtc29ydC1oZWFkZXItcG9zaXRpb24tYmVmb3JlIiwiYmVmb3JlIj09bi5hcnJvd1Bvc2l0aW9uKSxObSgidGFiaW5kZXgiLG4uX2lzRGlzYWJsZWQoKT9udWxsOjApLEpjKDMpLHZ1KCJuZ0lmIixuLl9yZW5kZXJBcnJvdygpKSl9LGRpcmVjdGl2ZXM6W2F2XSxzdHlsZXM6WyIubWF0LXNvcnQtaGVhZGVyLWNvbnRhaW5lcntkaXNwbGF5OmZsZXg7Y3Vyc29yOnBvaW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2xldHRlci1zcGFjaW5nOm5vcm1hbDtvdXRsaW5lOjB9W21hdC1zb3J0LWhlYWRlcl0uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1zb3J0LWhlYWRlci1jb250YWluZXIsW21hdC1zb3J0LWhlYWRlcl0uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LXNvcnQtaGVhZGVyLWNvbnRhaW5lcntib3JkZXItYm90dG9tOnNvbGlkIDFweCBjdXJyZW50Q29sb3J9Lm1hdC1zb3J0LWhlYWRlci1kaXNhYmxlZCAubWF0LXNvcnQtaGVhZGVyLWNvbnRhaW5lcntjdXJzb3I6ZGVmYXVsdH0ubWF0LXNvcnQtaGVhZGVyLWNvbnRlbnR7dGV4dC1hbGlnbjpjZW50ZXI7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0ubWF0LXNvcnQtaGVhZGVyLXBvc2l0aW9uLWJlZm9yZXtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZX0ubWF0LXNvcnQtaGVhZGVyLWFycm93e2hlaWdodDoxMnB4O3dpZHRoOjEycHg7bWluLXdpZHRoOjEycHg7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpmbGV4O29wYWNpdHk6MH0ubWF0LXNvcnQtaGVhZGVyLWFycm93LFtkaXI9cnRsXSAubWF0LXNvcnQtaGVhZGVyLXBvc2l0aW9uLWJlZm9yZSAubWF0LXNvcnQtaGVhZGVyLWFycm93e21hcmdpbjowIDAgMCA2cHh9Lm1hdC1zb3J0LWhlYWRlci1wb3NpdGlvbi1iZWZvcmUgLm1hdC1zb3J0LWhlYWRlci1hcnJvdyxbZGlyPXJ0bF0gLm1hdC1zb3J0LWhlYWRlci1hcnJvd3ttYXJnaW46MCA2cHggMCAwfS5tYXQtc29ydC1oZWFkZXItc3RlbXtiYWNrZ3JvdW5kOmN1cnJlbnRDb2xvcjtoZWlnaHQ6MTBweDt3aWR0aDoycHg7bWFyZ2luOmF1dG87ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc29ydC1oZWFkZXItc3RlbXt3aWR0aDowO2JvcmRlci1sZWZ0OnNvbGlkIDJweH0ubWF0LXNvcnQtaGVhZGVyLWluZGljYXRvcnt3aWR0aDoxMDAlO2hlaWdodDoycHg7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjB9Lm1hdC1zb3J0LWhlYWRlci1wb2ludGVyLW1pZGRsZXttYXJnaW46YXV0bztoZWlnaHQ6MnB4O3dpZHRoOjJweDtiYWNrZ3JvdW5kOmN1cnJlbnRDb2xvcjt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc29ydC1oZWFkZXItcG9pbnRlci1taWRkbGV7d2lkdGg6MDtoZWlnaHQ6MDtib3JkZXItdG9wOnNvbGlkIDJweDtib3JkZXItbGVmdDpzb2xpZCAycHh9Lm1hdC1zb3J0LWhlYWRlci1wb2ludGVyLWxlZnQsLm1hdC1zb3J0LWhlYWRlci1wb2ludGVyLXJpZ2h0e2JhY2tncm91bmQ6Y3VycmVudENvbG9yO3dpZHRoOjZweDtoZWlnaHQ6MnB4O3Bvc2l0aW9uOmFic29sdXRlO3RvcDowfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zb3J0LWhlYWRlci1wb2ludGVyLWxlZnQsLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXNvcnQtaGVhZGVyLXBvaW50ZXItcmlnaHR7d2lkdGg6MDtoZWlnaHQ6MDtib3JkZXItbGVmdDpzb2xpZCA2cHg7Ym9yZGVyLXRvcDpzb2xpZCAycHh9Lm1hdC1zb3J0LWhlYWRlci1wb2ludGVyLWxlZnR7dHJhbnNmb3JtLW9yaWdpbjpyaWdodDtsZWZ0OjB9Lm1hdC1zb3J0LWhlYWRlci1wb2ludGVyLXJpZ2h0e3RyYW5zZm9ybS1vcmlnaW46bGVmdDtyaWdodDowfVxuIl0sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbbSQuaW5kaWNhdG9yLG0kLmxlZnRQb2ludGVyLG0kLnJpZ2h0UG9pbnRlcixtJC5hcnJvd09wYWNpdHksbSQuYXJyb3dQb3NpdGlvbixtJC5hbGxvd0NoaWxkcmVuXX0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxiJC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOnUkfSx7dHlwZTpIaH0se3R5cGU6ZCQsZGVjb3JhdG9yczpbe3R5cGU6X3N9XX0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6WyJNQVRfU09SVF9IRUFERVJfQ09MVU1OX0RFRiJdfSx7dHlwZTpfc31dfSx7dHlwZTpwen0se3R5cGU6Y2h9XSxiJC5wcm9wRGVjb3JhdG9ycz17aWQ6W3t0eXBlOnlfLGFyZ3M6WyJtYXQtc29ydC1oZWFkZXIiXX1dLGFycm93UG9zaXRpb246W3t0eXBlOnlffV0sc3RhcnQ6W3t0eXBlOnlffV0sZGlzYWJsZUNsZWFyOlt7dHlwZTp5X31dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGIkLFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6IlttYXQtc29ydC1oZWFkZXJdIixleHBvcnRBczoibWF0U29ydEhlYWRlciIsdGVtcGxhdGU6J1x4M2MhLS1cbiAgV2Ugc2V0IHRoZSBgdGFiaW5kZXhgIG9uIGFuIGVsZW1lbnQgaW5zaWRlIHRoZSB0YWJsZSBoZWFkZXIsIHJhdGhlciB0aGFuIHRoZSBoZWFkZXIgaXRzZWxmLFxuICBiZWNhdXNlIG9mIGEgYnVnIGluIE5WREEgd2hlcmUgaGF2aW5nIGEgYHRhYmluZGV4YCBvbiBhIGB0aGAgYnJlYWtzIGtleWJvYXJkIG5hdmlnYXRpb24gaW4gdGhlXG4gIHRhYmxlIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL252YWNjZXNzL252ZGEvaXNzdWVzLzc3MTgpLiBUaGlzIGFsbG93cyBmb3IgdGhlIGhlYWRlciB0byBib3RoXG4gIGJlIGZvY3VzYWJsZSwgYW5kIGhhdmUgc2NyZWVuIHJlYWRlcnMgcmVhZCBvdXQgaXRzIGBhcmlhLXNvcnRgIHN0YXRlLiBXZSBwcmVmZXIgdGhpcyBhcHByb2FjaFxuICBvdmVyIGhhdmluZyBhIGJ1dHRvbiB3aXRoIGFuIGBhcmlhLWxhYmVsYCBpbnNpZGUgdGhlIGhlYWRlciwgYmVjYXVzZSB0aGUgYnV0dG9uXCdzIGBhcmlhLWxhYmVsYFxuICB3aWxsIGJlIHJlYWQgb3V0IGFzIHRoZSB1c2VyIGlzIG5hdmlnYXRpbmcgdGhlIHRhYmxlXCdzIGNlbGwgKHNlZSAjMTMwMTIpLlxuXG4gIFRoZSBhcHByb2FjaCBpcyBiYXNlZCBvZmYgb2Y6IGh0dHBzOi8vZGVxdWV1bml2ZXJzaXR5LmNvbS9saWJyYXJ5L2FyaWEvdGFibGVzL3NmLXNvcnRhYmxlLWdyaWRcbi0tXHgzZVxuPGRpdiBjbGFzcz0ibWF0LXNvcnQtaGVhZGVyLWNvbnRhaW5lciBtYXQtZm9jdXMtaW5kaWNhdG9yIlxuICAgICBbY2xhc3MubWF0LXNvcnQtaGVhZGVyLXNvcnRlZF09Il9pc1NvcnRlZCgpIlxuICAgICBbY2xhc3MubWF0LXNvcnQtaGVhZGVyLXBvc2l0aW9uLWJlZm9yZV09ImFycm93UG9zaXRpb24gPT0gXCdiZWZvcmVcJyJcbiAgICAgW2F0dHIudGFiaW5kZXhdPSJfaXNEaXNhYmxlZCgpID8gbnVsbCA6IDAiXG4gICAgIHJvbGU9ImJ1dHRvbiI+XG5cbiAgXHgzYyEtLVxuICAgIFRPRE8oY3Jpc2JldG8pOiB0aGlzIGRpdiBpc25cJ3Qgc3RyaWN0bHkgbmVjZXNzYXJ5LCBidXQgd2UgaGF2ZSB0byBrZWVwIGl0IGR1ZSB0byBhIGxhcmdlXG4gICAgbnVtYmVyIG9mIHNjcmVlbnNob3QgZGlmZiBmYWlsdXJlcy4gSXQgc2hvdWxkIGJlIHJlbW92ZWQgZXZlbnR1YWxseS4gTm90ZSB0aGF0IHRoZSBkaWZmZXJlbmNlXG4gICAgaXNuXCd0IHZpc2libGUgd2l0aCBhIHNob3J0ZXIgaGVhZGVyLCBidXQgb25jZSBpdCBicmVha3MgdXAgaW50byBtdWx0aXBsZSBsaW5lcywgdGhpcyBlbGVtZW50XG4gICAgY2F1c2VzIGl0IHRvIGJlIGNlbnRlci1hbGlnbmVkLCB3aGVyZWFzIHJlbW92aW5nIGl0IHdpbGwga2VlcCB0aGUgdGV4dCB0byB0aGUgbGVmdC5cbiAgLS1ceDNlXG4gIDxkaXYgY2xhc3M9Im1hdC1zb3J0LWhlYWRlci1jb250ZW50Ij5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gIDwvZGl2PlxuXG4gIFx4M2MhLS0gRGlzYWJsZSBhbmltYXRpb25zIHdoaWxlIGEgY3VycmVudCBhbmltYXRpb24gaXMgcnVubmluZyAtLVx4M2VcbiAgPGRpdiBjbGFzcz0ibWF0LXNvcnQtaGVhZGVyLWFycm93IlxuICAgICAgICpuZ0lmPSJfcmVuZGVyQXJyb3coKSJcbiAgICAgICBbQGFycm93T3BhY2l0eV09Il9nZXRBcnJvd1ZpZXdTdGF0ZSgpIlxuICAgICAgIFtAYXJyb3dQb3NpdGlvbl09Il9nZXRBcnJvd1ZpZXdTdGF0ZSgpIlxuICAgICAgIFtAYWxsb3dDaGlsZHJlbl09Il9nZXRBcnJvd0RpcmVjdGlvblN0YXRlKCkiXG4gICAgICAgKEBhcnJvd1Bvc2l0aW9uLnN0YXJ0KT0iX2Rpc2FibGVWaWV3U3RhdGVBbmltYXRpb24gPSB0cnVlIlxuICAgICAgIChAYXJyb3dQb3NpdGlvbi5kb25lKT0iX2Rpc2FibGVWaWV3U3RhdGVBbmltYXRpb24gPSBmYWxzZSI+XG4gICAgPGRpdiBjbGFzcz0ibWF0LXNvcnQtaGVhZGVyLXN0ZW0iPjwvZGl2PlxuICAgIDxkaXYgY2xhc3M9Im1hdC1zb3J0LWhlYWRlci1pbmRpY2F0b3IiIFtAaW5kaWNhdG9yXT0iX2dldEFycm93RGlyZWN0aW9uU3RhdGUoKSI+XG4gICAgICA8ZGl2IGNsYXNzPSJtYXQtc29ydC1oZWFkZXItcG9pbnRlci1sZWZ0IiBbQGxlZnRQb2ludGVyXT0iX2dldEFycm93RGlyZWN0aW9uU3RhdGUoKSI+PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJtYXQtc29ydC1oZWFkZXItcG9pbnRlci1yaWdodCIgW0ByaWdodFBvaW50ZXJdPSJfZ2V0QXJyb3dEaXJlY3Rpb25TdGF0ZSgpIj48L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9Im1hdC1zb3J0LWhlYWRlci1wb2ludGVyLW1pZGRsZSI+PC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLGhvc3Q6e2NsYXNzOiJtYXQtc29ydC1oZWFkZXIiLCIoY2xpY2spIjoiX2hhbmRsZUNsaWNrKCkiLCIoa2V5ZG93bikiOiJfaGFuZGxlS2V5ZG93bigkZXZlbnQpIiwiKG1vdXNlZW50ZXIpIjoiX3NldEluZGljYXRvckhpbnRWaXNpYmxlKHRydWUpIiwiKG1vdXNlbGVhdmUpIjoiX3NldEluZGljYXRvckhpbnRWaXNpYmxlKGZhbHNlKSIsIlthdHRyLmFyaWEtc29ydF0iOiJfZ2V0QXJpYVNvcnRBdHRyaWJ1dGUoKSIsIltjbGFzcy5tYXQtc29ydC1oZWFkZXItZGlzYWJsZWRdIjoiX2lzRGlzYWJsZWQoKSJ9LGVuY2Fwc3VsYXRpb246UG8uTm9uZSxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNoLGlucHV0czpbImRpc2FibGVkIl0sYW5pbWF0aW9uczpbbSQuaW5kaWNhdG9yLG0kLmxlZnRQb2ludGVyLG0kLnJpZ2h0UG9pbnRlcixtJC5hcnJvd09wYWNpdHksbSQuYXJyb3dQb3NpdGlvbixtJC5hbGxvd0NoaWxkcmVuXSxzdHlsZXM6WyIubWF0LXNvcnQtaGVhZGVyLWNvbnRhaW5lcntkaXNwbGF5OmZsZXg7Y3Vyc29yOnBvaW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2xldHRlci1zcGFjaW5nOm5vcm1hbDtvdXRsaW5lOjB9W21hdC1zb3J0LWhlYWRlcl0uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1zb3J0LWhlYWRlci1jb250YWluZXIsW21hdC1zb3J0LWhlYWRlcl0uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LXNvcnQtaGVhZGVyLWNvbnRhaW5lcntib3JkZXItYm90dG9tOnNvbGlkIDFweCBjdXJyZW50Q29sb3J9Lm1hdC1zb3J0LWhlYWRlci1kaXNhYmxlZCAubWF0LXNvcnQtaGVhZGVyLWNvbnRhaW5lcntjdXJzb3I6ZGVmYXVsdH0ubWF0LXNvcnQtaGVhZGVyLWNvbnRlbnR7dGV4dC1hbGlnbjpjZW50ZXI7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0ubWF0LXNvcnQtaGVhZGVyLXBvc2l0aW9uLWJlZm9yZXtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZX0ubWF0LXNvcnQtaGVhZGVyLWFycm93e2hlaWdodDoxMnB4O3dpZHRoOjEycHg7bWluLXdpZHRoOjEycHg7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpmbGV4O29wYWNpdHk6MH0ubWF0LXNvcnQtaGVhZGVyLWFycm93LFtkaXI9cnRsXSAubWF0LXNvcnQtaGVhZGVyLXBvc2l0aW9uLWJlZm9yZSAubWF0LXNvcnQtaGVhZGVyLWFycm93e21hcmdpbjowIDAgMCA2cHh9Lm1hdC1zb3J0LWhlYWRlci1wb3NpdGlvbi1iZWZvcmUgLm1hdC1zb3J0LWhlYWRlci1hcnJvdyxbZGlyPXJ0bF0gLm1hdC1zb3J0LWhlYWRlci1hcnJvd3ttYXJnaW46MCA2cHggMCAwfS5tYXQtc29ydC1oZWFkZXItc3RlbXtiYWNrZ3JvdW5kOmN1cnJlbnRDb2xvcjtoZWlnaHQ6MTBweDt3aWR0aDoycHg7bWFyZ2luOmF1dG87ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc29ydC1oZWFkZXItc3RlbXt3aWR0aDowO2JvcmRlci1sZWZ0OnNvbGlkIDJweH0ubWF0LXNvcnQtaGVhZGVyLWluZGljYXRvcnt3aWR0aDoxMDAlO2hlaWdodDoycHg7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjB9Lm1hdC1zb3J0LWhlYWRlci1wb2ludGVyLW1pZGRsZXttYXJnaW46YXV0bztoZWlnaHQ6MnB4O3dpZHRoOjJweDtiYWNrZ3JvdW5kOmN1cnJlbnRDb2xvcjt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc29ydC1oZWFkZXItcG9pbnRlci1taWRkbGV7d2lkdGg6MDtoZWlnaHQ6MDtib3JkZXItdG9wOnNvbGlkIDJweDtib3JkZXItbGVmdDpzb2xpZCAycHh9Lm1hdC1zb3J0LWhlYWRlci1wb2ludGVyLWxlZnQsLm1hdC1zb3J0LWhlYWRlci1wb2ludGVyLXJpZ2h0e2JhY2tncm91bmQ6Y3VycmVudENvbG9yO3dpZHRoOjZweDtoZWlnaHQ6MnB4O3Bvc2l0aW9uOmFic29sdXRlO3RvcDowfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zb3J0LWhlYWRlci1wb2ludGVyLWxlZnQsLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXNvcnQtaGVhZGVyLXBvaW50ZXItcmlnaHR7d2lkdGg6MDtoZWlnaHQ6MDtib3JkZXItbGVmdDpzb2xpZCA2cHg7Ym9yZGVyLXRvcDpzb2xpZCAycHh9Lm1hdC1zb3J0LWhlYWRlci1wb2ludGVyLWxlZnR7dHJhbnNmb3JtLW9yaWdpbjpyaWdodDtsZWZ0OjB9Lm1hdC1zb3J0LWhlYWRlci1wb2ludGVyLXJpZ2h0e3RyYW5zZm9ybS1vcmlnaW46bGVmdDtyaWdodDowfVxuIl19XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTp1JH0se3R5cGU6SGh9LHt0eXBlOmQkLGRlY29yYXRvcnM6W3t0eXBlOl9zfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOlsiTUFUX1NPUlRfSEVBREVSX0NPTFVNTl9ERUYiXX0se3R5cGU6X3N9XX0se3R5cGU6cHp9LHt0eXBlOmNofV19KSx7YXJyb3dQb3NpdGlvbjpbe3R5cGU6eV99XSxkaXNhYmxlQ2xlYXI6W3t0eXBlOnlffV0saWQ6W3t0eXBlOnlfLGFyZ3M6WyJtYXQtc29ydC1oZWFkZXIiXX1dLHN0YXJ0Olt7dHlwZTp5X31dfSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyB5JHt9eSQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHkkKX0seSQuybVtb2Q9Wm8oe3R5cGU6eSR9KSx5JC7JtWluaj1jbyh7cHJvdmlkZXJzOltmJF0saW1wb3J0czpbW0J2LFR6XV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKHkkLHtkZWNsYXJhdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm5bZCQsYiRdfSxpbXBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW0J2LFR6XX0sZXhwb3J0czpmdW5jdGlvbigpe3JldHVybltkJCxiJF19fSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYih5JCxbe3R5cGU6a18sYXJnczpbe2ltcG9ydHM6W0J2LFR6XSxleHBvcnRzOltkJCxiJF0sZGVjbGFyYXRpb25zOltkJCxiJF0scHJvdmlkZXJzOltmJF19XX1dLG51bGwsbnVsbCk7Y29uc3QgXyQ9W1tbImNhcHRpb24iXV0sW1siY29sZ3JvdXAiXSxbImNvbCJdXV07ZnVuY3Rpb24gQyQodCxlKXtpZigxJnQmJihPdSgwLCJ0aCIsMyksTWYoMSksUHUoKSksMiZ0KXtjb25zdCB0PUx1KCk7b2YoInRleHQtYWxpZ24iLHQuanVzdGlmeSksSmMoMSkseGYoIiAiLHQuaGVhZGVyVGV4dCwiICIpfX1mdW5jdGlvbiBNJCh0LGUpe2lmKDEmdCYmKE91KDAsInRkIiw0KSxNZigxKSxQdSgpKSwyJnQpe2NvbnN0IHQ9ZS4kaW1wbGljaXQsbj1MdSgpO29mKCJ0ZXh0LWFsaWduIixuLmp1c3RpZnkpLEpjKDEpLHhmKCIgIixuLmRhdGFBY2Nlc3Nvcih0LG4ubmFtZSksIiAiKX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIHYkKHQpe3JldHVybiBjbGFzcyBleHRlbmRzIHR7Y29uc3RydWN0b3IoLi4udCl7c3VwZXIoLi4udCksdGhpcy5fc3RpY2t5PSExLHRoaXMuX2hhc1N0aWNreUNoYW5nZWQ9ITF9Z2V0IHN0aWNreSgpe3JldHVybiB0aGlzLl9zdGlja3l9c2V0IHN0aWNreSh0KXtjb25zdCBlPXRoaXMuX3N0aWNreTt0aGlzLl9zdGlja3k9ckkodCksdGhpcy5faGFzU3RpY2t5Q2hhbmdlZD1lIT09dGhpcy5fc3RpY2t5fWhhc1N0aWNreUNoYW5nZWQoKXtjb25zdCB0PXRoaXMuX2hhc1N0aWNreUNoYW5nZWQ7cmV0dXJuIHRoaXMuX2hhc1N0aWNreUNoYW5nZWQ9ITEsdH1yZXNldFN0aWNreUNoYW5nZWQoKXt0aGlzLl9oYXNTdGlja3lDaGFuZ2VkPSExfX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NvbnN0IHgkPW5ldyBOcigiQ0RLX1RBQkxFIiksTyQ9bmV3IE5yKCJ0ZXh0LWNvbHVtbi1vcHRpb25zIik7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyBQJHtjb25zdHJ1Y3Rvcih0KXt0aGlzLnRlbXBsYXRlPXR9fVAkLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxQJCkoTXUoVWgpKX0sUCQuybVkaXI9Sm8oe3R5cGU6UCQsc2VsZWN0b3JzOltbIiIsImNka0NlbGxEZWYiLCIiXV19KSxQJC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOlVofV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihQJCxbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJbY2RrQ2VsbERlZl0ifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6VWh9XX0pLG51bGwpO2NsYXNzIHcke2NvbnN0cnVjdG9yKHQpe3RoaXMudGVtcGxhdGU9dH19dyQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHckKShNdShVaCkpfSx3JC7JtWRpcj1Kbyh7dHlwZTp3JCxzZWxlY3RvcnM6W1siIiwiY2RrSGVhZGVyQ2VsbERlZiIsIiJdXX0pLHckLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6VWh9XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHckLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6IltjZGtIZWFkZXJDZWxsRGVmXSJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpVaH1dfSksbnVsbCk7Y2xhc3MgayR7Y29uc3RydWN0b3IodCl7dGhpcy50ZW1wbGF0ZT10fX1rJC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8ayQpKE11KFVoKSl9LGskLsm1ZGlyPUpvKHt0eXBlOmskLHNlbGVjdG9yczpbWyIiLCJjZGtGb290ZXJDZWxsRGVmIiwiIl1dfSksayQuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpVaH1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoayQsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoiW2Nka0Zvb3RlckNlbGxEZWZdIn1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOlVofV19KSxudWxsKTtjb25zdCBTJD12JChjbGFzc3t9KTtjbGFzcyBEJCBleHRlbmRzIFMke2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5fdGFibGU9dCx0aGlzLl9zdGlja3lFbmQ9ITF9Z2V0IG5hbWUoKXtyZXR1cm4gdGhpcy5fbmFtZX1zZXQgbmFtZSh0KXt0aGlzLl9zZXROYW1lSW5wdXQodCl9Z2V0IHN0aWNreUVuZCgpe3JldHVybiB0aGlzLl9zdGlja3lFbmR9c2V0IHN0aWNreUVuZCh0KXtjb25zdCBlPXRoaXMuX3N0aWNreUVuZDt0aGlzLl9zdGlja3lFbmQ9ckkodCksdGhpcy5faGFzU3RpY2t5Q2hhbmdlZD1lIT09dGhpcy5fc3RpY2t5RW5kfV91cGRhdGVDb2x1bW5Dc3NDbGFzc05hbWUoKXt0aGlzLl9jb2x1bW5Dc3NDbGFzc05hbWU9W2BjZGstY29sdW1uLSR7dGhpcy5jc3NDbGFzc0ZyaWVuZGx5TmFtZX1gXX1fc2V0TmFtZUlucHV0KHQpe3QmJih0aGlzLl9uYW1lPXQsdGhpcy5jc3NDbGFzc0ZyaWVuZGx5TmFtZT10LnJlcGxhY2UoL1teYS16MC05Xy1dL2dpLCItIiksdGhpcy5fdXBkYXRlQ29sdW1uQ3NzQ2xhc3NOYW1lKCkpfX1EJC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8RCQpKE11KHgkLDgpKX0sRCQuybVkaXI9Sm8oe3R5cGU6RCQsc2VsZWN0b3JzOltbIiIsImNka0NvbHVtbkRlZiIsIiJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbiB0KGUsbixvKXtpZigxJmUmJihHYihvLFAkLDEpLEdiKG8sdyQsMSksR2IobyxrJCwxKSksMiZlKXtsZXQgdDtVYih0PVliKCkpJiYobi5jZWxsPXQuZmlyc3QpLFViKHQ9WWIoKSkmJihuLmhlYWRlckNlbGw9dC5maXJzdCksVWIodD1ZYigpKSYmKG4uZm9vdGVyQ2VsbD10LmZpcnN0KX19LGlucHV0czp7c3RpY2t5OiJzdGlja3kiLG5hbWU6WyJjZGtDb2x1bW5EZWYiLCJuYW1lIl0sc3RpY2t5RW5kOiJzdGlja3lFbmQifSxmZWF0dXJlczpbaWgoW3twcm92aWRlOiJNQVRfU09SVF9IRUFERVJfQ09MVU1OX0RFRiIsdXNlRXhpc3Rpbmc6RCR9XSksZ21dfSksRCQuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbeCRdfSx7dHlwZTpfc31dfV0sRCQucHJvcERlY29yYXRvcnM9e25hbWU6W3t0eXBlOnlfLGFyZ3M6WyJjZGtDb2x1bW5EZWYiXX1dLHN0aWNreUVuZDpbe3R5cGU6eV8sYXJnczpbInN0aWNreUVuZCJdfV0sY2VsbDpbe3R5cGU6SHIsYXJnczpbUCRdfV0saGVhZGVyQ2VsbDpbe3R5cGU6SHIsYXJnczpbdyRdfV0sZm9vdGVyQ2VsbDpbe3R5cGU6SHIsYXJnczpbayRdfV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoRCQsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoiW2Nka0NvbHVtbkRlZl0iLGlucHV0czpbInN0aWNreSJdLHByb3ZpZGVyczpbe3Byb3ZpZGU6Ik1BVF9TT1JUX0hFQURFUl9DT0xVTU5fREVGIix1c2VFeGlzdGluZzpEJH1dfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W3gkXX0se3R5cGU6X3N9XX1dfSkse25hbWU6W3t0eXBlOnlfLGFyZ3M6WyJjZGtDb2x1bW5EZWYiXX1dLHN0aWNreUVuZDpbe3R5cGU6eV8sYXJnczpbInN0aWNreUVuZCJdfV0sY2VsbDpbe3R5cGU6SHIsYXJnczpbUCRdfV0saGVhZGVyQ2VsbDpbe3R5cGU6SHIsYXJnczpbdyRdfV0sZm9vdGVyQ2VsbDpbe3R5cGU6SHIsYXJnczpbayRdfV19KTtjbGFzcyBFJHtjb25zdHJ1Y3Rvcih0LGUpe2NvbnN0IG49ZS5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdDtmb3IoY29uc3QgZSBvZiB0Ll9jb2x1bW5Dc3NDbGFzc05hbWUpbi5hZGQoZSl9fWNsYXNzIEEkIGV4dGVuZHMgRSR7Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpfX1BJC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8QSQpKE11KEQkKSxNdShjaCkpfSxBJC7JtWRpcj1Kbyh7dHlwZTpBJCxzZWxlY3RvcnM6W1siY2RrLWhlYWRlci1jZWxsIl0sWyJ0aCIsImNkay1oZWFkZXItY2VsbCIsIiJdXSxob3N0QXR0cnM6WyJyb2xlIiwiY29sdW1uaGVhZGVyIiwxLCJjZGstaGVhZGVyLWNlbGwiXSxmZWF0dXJlczpbZ21dfSksQSQuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpEJH0se3R5cGU6Y2h9XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEEkLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6ImNkay1oZWFkZXItY2VsbCwgdGhbY2RrLWhlYWRlci1jZWxsXSIsaG9zdDp7Y2xhc3M6ImNkay1oZWFkZXItY2VsbCIscm9sZToiY29sdW1uaGVhZGVyIn19XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpEJH0se3R5cGU6Y2h9XX0pLG51bGwpO2NsYXNzIFIkIGV4dGVuZHMgRSR7Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpfX1SJC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8UiQpKE11KEQkKSxNdShjaCkpfSxSJC7JtWRpcj1Kbyh7dHlwZTpSJCxzZWxlY3RvcnM6W1siY2RrLWZvb3Rlci1jZWxsIl0sWyJ0ZCIsImNkay1mb290ZXItY2VsbCIsIiJdXSxob3N0QXR0cnM6WyJyb2xlIiwiZ3JpZGNlbGwiLDEsImNkay1mb290ZXItY2VsbCJdLGZlYXR1cmVzOltnbV19KSxSJC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOkQkfSx7dHlwZTpjaH1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoUiQsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoiY2RrLWZvb3Rlci1jZWxsLCB0ZFtjZGstZm9vdGVyLWNlbGxdIixob3N0OntjbGFzczoiY2RrLWZvb3Rlci1jZWxsIixyb2xlOiJncmlkY2VsbCJ9fV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6RCR9LHt0eXBlOmNofV19KSxudWxsKTtjbGFzcyBUJCBleHRlbmRzIEUke2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCxlKX19VCQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFQkKShNdShEJCksTXUoY2gpKX0sVCQuybVkaXI9Sm8oe3R5cGU6VCQsc2VsZWN0b3JzOltbImNkay1jZWxsIl0sWyJ0ZCIsImNkay1jZWxsIiwiIl1dLGhvc3RBdHRyczpbInJvbGUiLCJncmlkY2VsbCIsMSwiY2RrLWNlbGwiXSxmZWF0dXJlczpbZ21dfSksVCQuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpEJH0se3R5cGU6Y2h9XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFQkLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6ImNkay1jZWxsLCB0ZFtjZGstY2VsbF0iLGhvc3Q6e2NsYXNzOiJjZGstY2VsbCIscm9sZToiZ3JpZGNlbGwifX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkQkfSx7dHlwZTpjaH1dfSksbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyBOJHtjb25zdHJ1Y3Rvcigpe3RoaXMudGFza3M9W10sdGhpcy5lbmRUYXNrcz1bXX19Y29uc3QgSSQ9bmV3IE5yKCJfQ09BTEVTQ0VEX1NUWUxFX1NDSEVEVUxFUiIpO2NsYXNzIHoke2NvbnN0cnVjdG9yKHQpe3RoaXMuX25nWm9uZT10LHRoaXMuX2N1cnJlbnRTY2hlZHVsZT1udWxsLHRoaXMuX2Rlc3Ryb3llZD1uZXcgeH1zY2hlZHVsZSh0KXt0aGlzLl9jcmVhdGVTY2hlZHVsZUlmTmVlZGVkKCksdGhpcy5fY3VycmVudFNjaGVkdWxlLnRhc2tzLnB1c2godCl9c2NoZWR1bGVFbmQodCl7dGhpcy5fY3JlYXRlU2NoZWR1bGVJZk5lZWRlZCgpLHRoaXMuX2N1cnJlbnRTY2hlZHVsZS5lbmRUYXNrcy5wdXNoKHQpfW5nT25EZXN0cm95KCl7dGhpcy5fZGVzdHJveWVkLm5leHQoKSx0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKX1fY3JlYXRlU2NoZWR1bGVJZk5lZWRlZCgpe3RoaXMuX2N1cnJlbnRTY2hlZHVsZXx8KHRoaXMuX2N1cnJlbnRTY2hlZHVsZT1uZXcgTiQsdGhpcy5fZ2V0U2NoZWR1bGVPYnNlcnZhYmxlKCkucGlwZSh1bih0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCgpPT57Zm9yKDt0aGlzLl9jdXJyZW50U2NoZWR1bGUudGFza3MubGVuZ3RofHx0aGlzLl9jdXJyZW50U2NoZWR1bGUuZW5kVGFza3MubGVuZ3RoOyl7Y29uc3QgdD10aGlzLl9jdXJyZW50U2NoZWR1bGU7dGhpcy5fY3VycmVudFNjaGVkdWxlPW5ldyBOJDtmb3IoY29uc3QgZSBvZiB0LnRhc2tzKWUoKTtmb3IoY29uc3QgZSBvZiB0LmVuZFRhc2tzKWUoKX10aGlzLl9jdXJyZW50U2NoZWR1bGU9bnVsbH0pKSl9X2dldFNjaGVkdWxlT2JzZXJ2YWJsZSgpe3JldHVybiB0aGlzLl9uZ1pvbmUuaXNTdGFibGU/UnQoUHJvbWlzZS5yZXNvbHZlKHZvaWQgMCkpOnRoaXMuX25nWm9uZS5vblN0YWJsZS5waXBlKE5lKDEpKX19eiQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHokKSh1cyh0QykpfSx6JC7JtXByb3Y9bG8oe3Rva2VuOnokLGZhY3Rvcnk6eiQuybVmYWN9KSx6JC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOnRDfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYih6JCxbe3R5cGU6Sm19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6dEN9XX0pLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3QgSCQ9IjxuZy1jb250YWluZXIgY2RrQ2VsbE91dGxldD48L25nLWNvbnRhaW5lcj4iO2NsYXNzIEYke2NvbnN0cnVjdG9yKHQsZSl7dGhpcy50ZW1wbGF0ZT10LHRoaXMuX2RpZmZlcnM9ZX1uZ09uQ2hhbmdlcyh0KXtpZighdGhpcy5fY29sdW1uc0RpZmZlcil7Y29uc3QgZT10LmNvbHVtbnMmJnQuY29sdW1ucy5jdXJyZW50VmFsdWV8fFtdO3RoaXMuX2NvbHVtbnNEaWZmZXI9dGhpcy5fZGlmZmVycy5maW5kKGUpLmNyZWF0ZSgpLHRoaXMuX2NvbHVtbnNEaWZmZXIuZGlmZihlKX19Z2V0Q29sdW1uc0RpZmYoKXtyZXR1cm4gdGhpcy5fY29sdW1uc0RpZmZlci5kaWZmKHRoaXMuY29sdW1ucyl9ZXh0cmFjdENlbGxUZW1wbGF0ZSh0KXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIEIkP3QuaGVhZGVyQ2VsbC50ZW1wbGF0ZTp0aGlzIGluc3RhbmNlb2YgaiQ/dC5mb290ZXJDZWxsLnRlbXBsYXRlOnQuY2VsbC50ZW1wbGF0ZX19RiQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEYkKShNdShVaCksTXUoRWgpKX0sRiQuybVkaXI9Sm8oe3R5cGU6RiQsZmVhdHVyZXM6W1NpXX0pLEYkLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6VWh9LHt0eXBlOkVofV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihGJCxbe3R5cGU6Z199XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6VWh9LHt0eXBlOkVofV19KSxudWxsKTtjb25zdCBMJD12JChjbGFzcyBleHRlbmRzIEYke30pO2NsYXNzIEIkIGV4dGVuZHMgTCR7Y29uc3RydWN0b3IodCxlLG4pe3N1cGVyKHQsZSksdGhpcy5fdGFibGU9bn1uZ09uQ2hhbmdlcyh0KXtzdXBlci5uZ09uQ2hhbmdlcyh0KX19QiQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEIkKShNdShVaCksTXUoRWgpLE11KHgkLDgpKX0sQiQuybVkaXI9Sm8oe3R5cGU6QiQsc2VsZWN0b3JzOltbIiIsImNka0hlYWRlclJvd0RlZiIsIiJdXSxpbnB1dHM6e2NvbHVtbnM6WyJjZGtIZWFkZXJSb3dEZWYiLCJjb2x1bW5zIl0sc3RpY2t5OlsiY2RrSGVhZGVyUm93RGVmU3RpY2t5Iiwic3RpY2t5Il19LGZlYXR1cmVzOltnbSxTaV19KSxCJC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOlVofSx7dHlwZTpFaH0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W3gkXX0se3R5cGU6X3N9XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoQiQsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoiW2Nka0hlYWRlclJvd0RlZl0iLGlucHV0czpbImNvbHVtbnM6IGNka0hlYWRlclJvd0RlZiIsInN0aWNreTogY2RrSGVhZGVyUm93RGVmU3RpY2t5Il19XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpVaH0se3R5cGU6RWh9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOlt4JF19LHt0eXBlOl9zfV19XX0pLG51bGwpO2NvbnN0IFYkPXYkKGNsYXNzIGV4dGVuZHMgRiR7fSk7Y2xhc3MgaiQgZXh0ZW5kcyBWJHtjb25zdHJ1Y3Rvcih0LGUsbil7c3VwZXIodCxlKSx0aGlzLl90YWJsZT1ufW5nT25DaGFuZ2VzKHQpe3N1cGVyLm5nT25DaGFuZ2VzKHQpfX1qJC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8aiQpKE11KFVoKSxNdShFaCksTXUoeCQsOCkpfSxqJC7JtWRpcj1Kbyh7dHlwZTpqJCxzZWxlY3RvcnM6W1siIiwiY2RrRm9vdGVyUm93RGVmIiwiIl1dLGlucHV0czp7Y29sdW1uczpbImNka0Zvb3RlclJvd0RlZiIsImNvbHVtbnMiXSxzdGlja3k6WyJjZGtGb290ZXJSb3dEZWZTdGlja3kiLCJzdGlja3kiXX0sZmVhdHVyZXM6W2dtLFNpXX0pLGokLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6VWh9LHt0eXBlOkVofSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbeCRdfSx7dHlwZTpfc31dfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihqJCxbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJbY2RrRm9vdGVyUm93RGVmXSIsaW5wdXRzOlsiY29sdW1uczogY2RrRm9vdGVyUm93RGVmIiwic3RpY2t5OiBjZGtGb290ZXJSb3dEZWZTdGlja3kiXX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOlVofSx7dHlwZTpFaH0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W3gkXX0se3R5cGU6X3N9XX1dfSksbnVsbCk7Y2xhc3MgVSQgZXh0ZW5kcyBGJHtjb25zdHJ1Y3Rvcih0LGUsbil7c3VwZXIodCxlKSx0aGlzLl90YWJsZT1ufX1VJC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8VSQpKE11KFVoKSxNdShFaCksTXUoeCQsOCkpfSxVJC7JtWRpcj1Kbyh7dHlwZTpVJCxzZWxlY3RvcnM6W1siIiwiY2RrUm93RGVmIiwiIl1dLGlucHV0czp7Y29sdW1uczpbImNka1Jvd0RlZkNvbHVtbnMiLCJjb2x1bW5zIl0sd2hlbjpbImNka1Jvd0RlZldoZW4iLCJ3aGVuIl19LGZlYXR1cmVzOltnbV19KSxVJC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOlVofSx7dHlwZTpFaH0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6W3gkXX0se3R5cGU6X3N9XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoVSQsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoiW2Nka1Jvd0RlZl0iLGlucHV0czpbImNvbHVtbnM6IGNka1Jvd0RlZkNvbHVtbnMiLCJ3aGVuOiBjZGtSb3dEZWZXaGVuIl19XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpVaH0se3R5cGU6RWh9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOlt4JF19LHt0eXBlOl9zfV19XX0pLG51bGwpO2NsYXNzIFcke2NvbnN0cnVjdG9yKHQpe3RoaXMuX3ZpZXdDb250YWluZXI9dCxXJC5tb3N0UmVjZW50Q2VsbE91dGxldD10aGlzfW5nT25EZXN0cm95KCl7VyQubW9zdFJlY2VudENlbGxPdXRsZXQ9PT10aGlzJiYoVyQubW9zdFJlY2VudENlbGxPdXRsZXQ9bnVsbCl9fVckLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxXJCkoTXUoWGgpKX0sVyQuybVkaXI9Sm8oe3R5cGU6VyQsc2VsZWN0b3JzOltbIiIsImNka0NlbGxPdXRsZXQiLCIiXV19KSxXJC5tb3N0UmVjZW50Q2VsbE91dGxldD1udWxsLFckLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6WGh9XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFckLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6IltjZGtDZWxsT3V0bGV0XSJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpYaH1dfSksbnVsbCk7Y2xhc3MgRyR7fUckLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxHJCl9LEckLsm1Y21wPVVvKHt0eXBlOkckLHNlbGVjdG9yczpbWyJjZGstaGVhZGVyLXJvdyJdLFsidHIiLCJjZGstaGVhZGVyLXJvdyIsIiJdXSxob3N0QXR0cnM6WyJyb2xlIiwicm93IiwxLCJjZGstaGVhZGVyLXJvdyJdLGRlY2xzOjEsdmFyczowLGNvbnN0czpbWyJjZGtDZWxsT3V0bGV0IiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJkR1KDAsMCl9LGRpcmVjdGl2ZXM6W1ckXSxlbmNhcHN1bGF0aW9uOjJ9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEckLFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6ImNkay1oZWFkZXItcm93LCB0cltjZGstaGVhZGVyLXJvd10iLHRlbXBsYXRlOkgkLGhvc3Q6e2NsYXNzOiJjZGstaGVhZGVyLXJvdyIscm9sZToicm93In0sY2hhbmdlRGV0ZWN0aW9uOnhvLkRlZmF1bHQsZW5jYXBzdWxhdGlvbjpQby5Ob25lfV19XSxudWxsLG51bGwpO2NsYXNzIFkke31ZJC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8WSQpfSxZJC7JtWNtcD1Vbyh7dHlwZTpZJCxzZWxlY3RvcnM6W1siY2RrLWZvb3Rlci1yb3ciXSxbInRyIiwiY2RrLWZvb3Rlci1yb3ciLCIiXV0saG9zdEF0dHJzOlsicm9sZSIsInJvdyIsMSwiY2RrLWZvb3Rlci1yb3ciXSxkZWNsczoxLHZhcnM6MCxjb25zdHM6W1siY2RrQ2VsbE91dGxldCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiZEdSgwLDApfSxkaXJlY3RpdmVzOltXJF0sZW5jYXBzdWxhdGlvbjoyfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihZJCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJjZGstZm9vdGVyLXJvdywgdHJbY2RrLWZvb3Rlci1yb3ddIix0ZW1wbGF0ZTpIJCxob3N0OntjbGFzczoiY2RrLWZvb3Rlci1yb3ciLHJvbGU6InJvdyJ9LGNoYW5nZURldGVjdGlvbjp4by5EZWZhdWx0LGVuY2Fwc3VsYXRpb246UG8uTm9uZX1dfV0sbnVsbCxudWxsKTtjbGFzcyBxJHt9cSQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHEkKX0scSQuybVjbXA9VW8oe3R5cGU6cSQsc2VsZWN0b3JzOltbImNkay1yb3ciXSxbInRyIiwiY2RrLXJvdyIsIiJdXSxob3N0QXR0cnM6WyJyb2xlIiwicm93IiwxLCJjZGstcm93Il0sZGVjbHM6MSx2YXJzOjAsY29uc3RzOltbImNka0NlbGxPdXRsZXQiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmRHUoMCwwKX0sZGlyZWN0aXZlczpbVyRdLGVuY2Fwc3VsYXRpb246Mn0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIocSQsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoiY2RrLXJvdywgdHJbY2RrLXJvd10iLHRlbXBsYXRlOkgkLGhvc3Q6e2NsYXNzOiJjZGstcm93Iixyb2xlOiJyb3cifSxjaGFuZ2VEZXRlY3Rpb246eG8uRGVmYXVsdCxlbmNhcHN1bGF0aW9uOlBvLk5vbmV9XX1dLG51bGwsbnVsbCk7Y2xhc3MgWiR7Y29uc3RydWN0b3IodCl7dGhpcy50ZW1wbGF0ZVJlZj10fX1aJC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8WiQpKE11KFVoKSl9LFokLsm1ZGlyPUpvKHt0eXBlOlokLHNlbGVjdG9yczpbWyJuZy10ZW1wbGF0ZSIsImNka05vRGF0YVJvdyIsIiJdXX0pLFokLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6VWh9XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFokLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6Im5nLXRlbXBsYXRlW2Nka05vRGF0YVJvd10ifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6VWh9XX0pLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3QgWCQ9WyJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiXTtjbGFzcyBLJHtjb25zdHJ1Y3Rvcih0LGUsbixvLGk9ITAsYT0hMCxyKXt0aGlzLl9pc05hdGl2ZUh0bWxUYWJsZT10LHRoaXMuX3N0aWNrQ2VsbENzcz1lLHRoaXMuZGlyZWN0aW9uPW4sdGhpcy5fY29hbGVzY2VkU3R5bGVTY2hlZHVsZXI9byx0aGlzLl9pc0Jyb3dzZXI9aSx0aGlzLl9uZWVkc1Bvc2l0aW9uU3RpY2t5T25FbGVtZW50PWEsdGhpcy5fcG9zaXRpb25MaXN0ZW5lcj1yLHRoaXMuX2NhY2hlZENlbGxXaWR0aHM9W10sdGhpcy5fYm9yZGVyQ2VsbENzcz17dG9wOmAke2V9LWJvcmRlci1lbGVtLXRvcGAsYm90dG9tOmAke2V9LWJvcmRlci1lbGVtLWJvdHRvbWAsbGVmdDpgJHtlfS1ib3JkZXItZWxlbS1sZWZ0YCxyaWdodDpgJHtlfS1ib3JkZXItZWxlbS1yaWdodGB9fWNsZWFyU3RpY2t5UG9zaXRpb25pbmcodCxlKXtjb25zdCBuPVtdO2Zvcihjb25zdCBlIG9mIHQpaWYoZS5ub2RlVHlwZT09PWUuRUxFTUVOVF9OT0RFKXtuLnB1c2goZSk7Zm9yKGxldCB0PTA7dDxlLmNoaWxkcmVuLmxlbmd0aDt0Kyspbi5wdXNoKGUuY2hpbGRyZW5bdF0pfXRoaXMuX3NjaGVkdWxlU3R5bGVDaGFuZ2VzKCgoKT0+e2Zvcihjb25zdCB0IG9mIG4pdGhpcy5fcmVtb3ZlU3RpY2t5U3R5bGUodCxlKX0pKX11cGRhdGVTdGlja3lDb2x1bW5zKHQsZSxuLG89ITApe2lmKCF0Lmxlbmd0aHx8IXRoaXMuX2lzQnJvd3Nlcnx8IWUuc29tZSgodD0+dCkpJiYhbi5zb21lKCh0PT50KSkpcmV0dXJuIHZvaWQodGhpcy5fcG9zaXRpb25MaXN0ZW5lciYmKHRoaXMuX3Bvc2l0aW9uTGlzdGVuZXIuc3RpY2t5Q29sdW1uc1VwZGF0ZWQoe3NpemVzOltdfSksdGhpcy5fcG9zaXRpb25MaXN0ZW5lci5zdGlja3lFbmRDb2x1bW5zVXBkYXRlZCh7c2l6ZXM6W119KSkpO2NvbnN0IGk9dFswXSxhPWkuY2hpbGRyZW4ubGVuZ3RoLHI9dGhpcy5fZ2V0Q2VsbFdpZHRocyhpLG8pLHM9dGhpcy5fZ2V0U3RpY2t5U3RhcnRDb2x1bW5Qb3NpdGlvbnMocixlKSxsPXRoaXMuX2dldFN0aWNreUVuZENvbHVtblBvc2l0aW9ucyhyLG4pLGM9ZS5sYXN0SW5kZXhPZighMCksZD1uLmluZGV4T2YoITApO3RoaXMuX3NjaGVkdWxlU3R5bGVDaGFuZ2VzKCgoKT0+e2NvbnN0IG89InJ0bCI9PT10aGlzLmRpcmVjdGlvbixpPW8/InJpZ2h0IjoibGVmdCIscD1vPyJsZWZ0IjoicmlnaHQiO2Zvcihjb25zdCBvIG9mIHQpZm9yKGxldCB0PTA7dDxhO3QrKyl7Y29uc3QgYT1vLmNoaWxkcmVuW3RdO2VbdF0mJnRoaXMuX2FkZFN0aWNreVN0eWxlKGEsaSxzW3RdLHQ9PT1jKSxuW3RdJiZ0aGlzLl9hZGRTdGlja3lTdHlsZShhLHAsbFt0XSx0PT09ZCl9dGhpcy5fcG9zaXRpb25MaXN0ZW5lciYmKHRoaXMuX3Bvc2l0aW9uTGlzdGVuZXIuc3RpY2t5Q29sdW1uc1VwZGF0ZWQoe3NpemVzOi0xPT09Yz9bXTpyLnNsaWNlKDAsYysxKS5tYXAoKCh0LG4pPT5lW25dP3Q6bnVsbCkpfSksdGhpcy5fcG9zaXRpb25MaXN0ZW5lci5zdGlja3lFbmRDb2x1bW5zVXBkYXRlZCh7c2l6ZXM6LTE9PT1kP1tdOnIuc2xpY2UoZCkubWFwKCgodCxlKT0+bltlK2RdP3Q6bnVsbCkpLnJldmVyc2UoKX0pKX0pKX1zdGlja1Jvd3ModCxlLG4pe2lmKCF0aGlzLl9pc0Jyb3dzZXIpcmV0dXJuO2NvbnN0IG89ImJvdHRvbSI9PT1uP3Quc2xpY2UoKS5yZXZlcnNlKCk6dCxpPSJib3R0b20iPT09bj9lLnNsaWNlKCkucmV2ZXJzZSgpOmUsYT1bXSxyPVtdLHM9W107Zm9yKGxldCB0PTAsZT0wO3Q8by5sZW5ndGg7dCsrKXtpZihhW3RdPWUsIWlbdF0pY29udGludWU7Y29uc3Qgbj1vW3RdO3NbdF09dGhpcy5faXNOYXRpdmVIdG1sVGFibGU/QXJyYXkuZnJvbShuLmNoaWxkcmVuKTpbbl07Y29uc3QgbD1uLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtlKz1sLHJbdF09bH1jb25zdCBsPWkubGFzdEluZGV4T2YoITApO3RoaXMuX3NjaGVkdWxlU3R5bGVDaGFuZ2VzKCgoKT0+e3ZhciB0LGU7Zm9yKGxldCB0PTA7dDxvLmxlbmd0aDt0Kyspe2lmKCFpW3RdKWNvbnRpbnVlO2NvbnN0IGU9YVt0XSxvPXQ9PT1sO2Zvcihjb25zdCBpIG9mIHNbdF0pdGhpcy5fYWRkU3RpY2t5U3R5bGUoaSxuLGUsbyl9InRvcCI9PT1uP251bGw9PT0odD10aGlzLl9wb3NpdGlvbkxpc3RlbmVyKXx8dm9pZCAwPT09dHx8dC5zdGlja3lIZWFkZXJSb3dzVXBkYXRlZCh7c2l6ZXM6cixlbGVtZW50czpzfSk6bnVsbD09PShlPXRoaXMuX3Bvc2l0aW9uTGlzdGVuZXIpfHx2b2lkIDA9PT1lfHxlLnN0aWNreUZvb3RlclJvd3NVcGRhdGVkKHtzaXplczpyLGVsZW1lbnRzOnN9KX0pKX11cGRhdGVTdGlja3lGb290ZXJDb250YWluZXIodCxlKXtpZighdGhpcy5faXNOYXRpdmVIdG1sVGFibGUpcmV0dXJuO2NvbnN0IG49dC5xdWVyeVNlbGVjdG9yKCJ0Zm9vdCIpO3RoaXMuX3NjaGVkdWxlU3R5bGVDaGFuZ2VzKCgoKT0+e2Uuc29tZSgodD0+IXQpKT90aGlzLl9yZW1vdmVTdGlja3lTdHlsZShuLFsiYm90dG9tIl0pOnRoaXMuX2FkZFN0aWNreVN0eWxlKG4sImJvdHRvbSIsMCwhMSl9KSl9X3JlbW92ZVN0aWNreVN0eWxlKHQsZSl7Zm9yKGNvbnN0IG4gb2YgZSl0LnN0eWxlW25dPSIiLHQuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLl9ib3JkZXJDZWxsQ3NzW25dKTtYJC5zb21lKChuPT4tMT09PWUuaW5kZXhPZihuKSYmdC5zdHlsZVtuXSkpP3Quc3R5bGUuekluZGV4PXRoaXMuX2dldENhbGN1bGF0ZWRaSW5kZXgodCk6KHQuc3R5bGUuekluZGV4PSIiLHRoaXMuX25lZWRzUG9zaXRpb25TdGlja3lPbkVsZW1lbnQmJih0LnN0eWxlLnBvc2l0aW9uPSIiKSx0LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5fc3RpY2tDZWxsQ3NzKSl9X2FkZFN0aWNreVN0eWxlKHQsZSxuLG8pe3QuY2xhc3NMaXN0LmFkZCh0aGlzLl9zdGlja0NlbGxDc3MpLG8mJnQuY2xhc3NMaXN0LmFkZCh0aGlzLl9ib3JkZXJDZWxsQ3NzW2VdKSx0LnN0eWxlW2VdPWAke259cHhgLHQuc3R5bGUuekluZGV4PXRoaXMuX2dldENhbGN1bGF0ZWRaSW5kZXgodCksdGhpcy5fbmVlZHNQb3NpdGlvblN0aWNreU9uRWxlbWVudCYmKHQuc3R5bGUuY3NzVGV4dCs9InBvc2l0aW9uOiAtd2Via2l0LXN0aWNreTsgcG9zaXRpb246IHN0aWNreTsgIil9X2dldENhbGN1bGF0ZWRaSW5kZXgodCl7Y29uc3QgZT17dG9wOjEwMCxib3R0b206MTAsbGVmdDoxLHJpZ2h0OjF9O2xldCBuPTA7Zm9yKGNvbnN0IG8gb2YgWCQpdC5zdHlsZVtvXSYmKG4rPWVbb10pO3JldHVybiBuP2Ake259YDoiIn1fZ2V0Q2VsbFdpZHRocyh0LGU9ITApe2lmKCFlJiZ0aGlzLl9jYWNoZWRDZWxsV2lkdGhzLmxlbmd0aClyZXR1cm4gdGhpcy5fY2FjaGVkQ2VsbFdpZHRocztjb25zdCBuPVtdLG89dC5jaGlsZHJlbjtmb3IobGV0IHQ9MDt0PG8ubGVuZ3RoO3QrKyluLnB1c2gob1t0XS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCk7cmV0dXJuIHRoaXMuX2NhY2hlZENlbGxXaWR0aHM9bixufV9nZXRTdGlja3lTdGFydENvbHVtblBvc2l0aW9ucyh0LGUpe2NvbnN0IG49W107bGV0IG89MDtmb3IobGV0IGk9MDtpPHQubGVuZ3RoO2krKyllW2ldJiYobltpXT1vLG8rPXRbaV0pO3JldHVybiBufV9nZXRTdGlja3lFbmRDb2x1bW5Qb3NpdGlvbnModCxlKXtjb25zdCBuPVtdO2xldCBvPTA7Zm9yKGxldCBpPXQubGVuZ3RoO2k+MDtpLS0pZVtpXSYmKG5baV09byxvKz10W2ldKTtyZXR1cm4gbn1fc2NoZWR1bGVTdHlsZUNoYW5nZXModCl7dGhpcy5fY29hbGVzY2VkU3R5bGVTY2hlZHVsZXI/dGhpcy5fY29hbGVzY2VkU3R5bGVTY2hlZHVsZXIuc2NoZWR1bGUodCk6dCgpfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovZnVuY3Rpb24gSiQodCl7cmV0dXJuIEVycm9yKGBDb3VsZCBub3QgZmluZCBjb2x1bW4gd2l0aCBpZCAiJHt0fSIuYCl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCBRJD1uZXcgTnIoIkNES19TUEwiKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY2xhc3MgJCR7Y29uc3RydWN0b3IodCxlKXt0aGlzLnZpZXdDb250YWluZXI9dCx0aGlzLmVsZW1lbnRSZWY9ZX19JCQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fCQkKShNdShYaCksTXUoY2gpKX0sJCQuybVkaXI9Sm8oe3R5cGU6JCQsc2VsZWN0b3JzOltbIiIsInJvd091dGxldCIsIiJdXX0pLCQkLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6WGh9LHt0eXBlOmNofV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYigkJCxbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJbcm93T3V0bGV0XSJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpYaH0se3R5cGU6Y2h9XX0pLG51bGwpO2NsYXNzIHQwe2NvbnN0cnVjdG9yKHQsZSl7dGhpcy52aWV3Q29udGFpbmVyPXQsdGhpcy5lbGVtZW50UmVmPWV9fXQwLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHx0MCkoTXUoWGgpLE11KGNoKSl9LHQwLsm1ZGlyPUpvKHt0eXBlOnQwLHNlbGVjdG9yczpbWyIiLCJoZWFkZXJSb3dPdXRsZXQiLCIiXV19KSx0MC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOlhofSx7dHlwZTpjaH1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIodDAsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoiW2hlYWRlclJvd091dGxldF0ifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6WGh9LHt0eXBlOmNofV19KSxudWxsKTtjbGFzcyBlMHtjb25zdHJ1Y3Rvcih0LGUpe3RoaXMudmlld0NvbnRhaW5lcj10LHRoaXMuZWxlbWVudFJlZj1lfX1lMC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8ZTApKE11KFhoKSxNdShjaCkpfSxlMC7JtWRpcj1Kbyh7dHlwZTplMCxzZWxlY3RvcnM6W1siIiwiZm9vdGVyUm93T3V0bGV0IiwiIl1dfSksZTAuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpYaH0se3R5cGU6Y2h9XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGUwLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6Iltmb290ZXJSb3dPdXRsZXRdIn1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOlhofSx7dHlwZTpjaH1dfSksbnVsbCk7Y2xhc3MgbjB7Y29uc3RydWN0b3IodCxlKXt0aGlzLnZpZXdDb250YWluZXI9dCx0aGlzLmVsZW1lbnRSZWY9ZX19bjAuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fG4wKShNdShYaCksTXUoY2gpKX0sbjAuybVkaXI9Sm8oe3R5cGU6bjAsc2VsZWN0b3JzOltbIiIsIm5vRGF0YVJvd091dGxldCIsIiJdXX0pLG4wLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6WGh9LHt0eXBlOmNofV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihuMCxbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJbbm9EYXRhUm93T3V0bGV0XSJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpYaH0se3R5cGU6Y2h9XX0pLG51bGwpO2NvbnN0IG8wPSdcbiAgPG5nLWNvbnRlbnQgc2VsZWN0PSJjYXB0aW9uIj48L25nLWNvbnRlbnQ+XG4gIDxuZy1jb250ZW50IHNlbGVjdD0iY29sZ3JvdXAsIGNvbCI+PC9uZy1jb250ZW50PlxuICA8bmctY29udGFpbmVyIGhlYWRlclJvd091dGxldD48L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciByb3dPdXRsZXQ+PC9uZy1jb250YWluZXI+XG4gIDxuZy1jb250YWluZXIgbm9EYXRhUm93T3V0bGV0PjwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyIGZvb3RlclJvd091dGxldD48L25nLWNvbnRhaW5lcj5cbic7Y2xhc3MgaTB7Y29uc3RydWN0b3IodCxlLG4sbyxpLGEscixzLGwsYyxkKXt0aGlzLl9kaWZmZXJzPXQsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9ZSx0aGlzLl9lbGVtZW50UmVmPW4sdGhpcy5fZGlyPWksdGhpcy5fcGxhdGZvcm09cix0aGlzLl92aWV3UmVwZWF0ZXI9cyx0aGlzLl9jb2FsZXNjZWRTdHlsZVNjaGVkdWxlcj1sLHRoaXMuX3N0aWNreVBvc2l0aW9uaW5nTGlzdGVuZXI9Yyx0aGlzLl92aWV3cG9ydFJ1bGVyPWQsdGhpcy5fb25EZXN0cm95PW5ldyB4LHRoaXMuX2NvbHVtbkRlZnNCeU5hbWU9bmV3IE1hcCx0aGlzLl9jdXN0b21Db2x1bW5EZWZzPW5ldyBTZXQsdGhpcy5fY3VzdG9tUm93RGVmcz1uZXcgU2V0LHRoaXMuX2N1c3RvbUhlYWRlclJvd0RlZnM9bmV3IFNldCx0aGlzLl9jdXN0b21Gb290ZXJSb3dEZWZzPW5ldyBTZXQsdGhpcy5faGVhZGVyUm93RGVmQ2hhbmdlZD0hMCx0aGlzLl9mb290ZXJSb3dEZWZDaGFuZ2VkPSEwLHRoaXMuX3N0aWNreUNvbHVtblN0eWxlc05lZWRSZXNldD0hMCx0aGlzLl9mb3JjZVJlY2FsY3VsYXRlQ2VsbFdpZHRocz0hMCx0aGlzLl9jYWNoZWRSZW5kZXJSb3dzTWFwPW5ldyBNYXAsdGhpcy5zdGlja3lDc3NDbGFzcz0iY2RrLXRhYmxlLXN0aWNreSIsdGhpcy5uZWVkc1Bvc2l0aW9uU3RpY2t5T25FbGVtZW50PSEwLHRoaXMuX2lzU2hvd2luZ05vRGF0YVJvdz0hMSx0aGlzLl9tdWx0aVRlbXBsYXRlRGF0YVJvd3M9ITEsdGhpcy5fZml4ZWRMYXlvdXQ9ITEsdGhpcy52aWV3Q2hhbmdlPW5ldyBIKHtzdGFydDowLGVuZDpOdW1iZXIuTUFYX1ZBTFVFfSksb3x8dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgicm9sZSIsImdyaWQiKSx0aGlzLl9kb2N1bWVudD1hLHRoaXMuX2lzTmF0aXZlSHRtbFRhYmxlPSJUQUJMRSI9PT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQubm9kZU5hbWV9Z2V0IHRyYWNrQnkoKXtyZXR1cm4gdGhpcy5fdHJhY2tCeUZufXNldCB0cmFja0J5KHQpeyJ1bmRlZmluZWQiIT10eXBlb2YgbmdEZXZNb2RlJiYhbmdEZXZNb2RlfHxudWxsPT10fHwiZnVuY3Rpb24iPT10eXBlb2YgdHx8Y29uc29sZS53YXJuKGB0cmFja0J5IG11c3QgYmUgYSBmdW5jdGlvbiwgYnV0IHJlY2VpdmVkICR7SlNPTi5zdHJpbmdpZnkodCl9LmApLHRoaXMuX3RyYWNrQnlGbj10fWdldCBkYXRhU291cmNlKCl7cmV0dXJuIHRoaXMuX2RhdGFTb3VyY2V9c2V0IGRhdGFTb3VyY2UodCl7dGhpcy5fZGF0YVNvdXJjZSE9PXQmJnRoaXMuX3N3aXRjaERhdGFTb3VyY2UodCl9Z2V0IG11bHRpVGVtcGxhdGVEYXRhUm93cygpe3JldHVybiB0aGlzLl9tdWx0aVRlbXBsYXRlRGF0YVJvd3N9c2V0IG11bHRpVGVtcGxhdGVEYXRhUm93cyh0KXt0aGlzLl9tdWx0aVRlbXBsYXRlRGF0YVJvd3M9ckkodCksdGhpcy5fcm93T3V0bGV0JiZ0aGlzLl9yb3dPdXRsZXQudmlld0NvbnRhaW5lci5sZW5ndGgmJih0aGlzLl9mb3JjZVJlbmRlckRhdGFSb3dzKCksdGhpcy51cGRhdGVTdGlja3lDb2x1bW5TdHlsZXMoKSl9Z2V0IGZpeGVkTGF5b3V0KCl7cmV0dXJuIHRoaXMuX2ZpeGVkTGF5b3V0fXNldCBmaXhlZExheW91dCh0KXt0aGlzLl9maXhlZExheW91dD1ySSh0KSx0aGlzLl9mb3JjZVJlY2FsY3VsYXRlQ2VsbFdpZHRocz0hMCx0aGlzLl9zdGlja3lDb2x1bW5TdHlsZXNOZWVkUmVzZXQ9ITB9bmdPbkluaXQoKXt0aGlzLl9zZXR1cFN0aWNreVN0eWxlcigpLHRoaXMuX2lzTmF0aXZlSHRtbFRhYmxlJiZ0aGlzLl9hcHBseU5hdGl2ZVRhYmxlU2VjdGlvbnMoKSx0aGlzLl9kYXRhRGlmZmVyPXRoaXMuX2RpZmZlcnMuZmluZChbXSkuY3JlYXRlKCgodCxlKT0+dGhpcy50cmFja0J5P3RoaXMudHJhY2tCeShlLmRhdGFJbmRleCxlLmRhdGEpOmUpKSx0aGlzLl92aWV3cG9ydFJ1bGVyJiZ0aGlzLl92aWV3cG9ydFJ1bGVyLmNoYW5nZSgpLnBpcGUodW4odGhpcy5fb25EZXN0cm95KSkuc3Vic2NyaWJlKCgoKT0+e3RoaXMuX2ZvcmNlUmVjYWxjdWxhdGVDZWxsV2lkdGhzPSEwfSkpfW5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpe2lmKHRoaXMuX2NhY2hlUm93RGVmcygpLHRoaXMuX2NhY2hlQ29sdW1uRGVmcygpLCF0aGlzLl9oZWFkZXJSb3dEZWZzLmxlbmd0aCYmIXRoaXMuX2Zvb3RlclJvd0RlZnMubGVuZ3RoJiYhdGhpcy5fcm93RGVmcy5sZW5ndGgmJigidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSl0aHJvdyhmdW5jdGlvbiB0KCl7cmV0dXJuIEVycm9yKCJNaXNzaW5nIGRlZmluaXRpb25zIGZvciBoZWFkZXIsIGZvb3RlciwgYW5kIHJvdzsgY2Fubm90IGRldGVybWluZSB3aGljaCBjb2x1bW5zIHNob3VsZCBiZSByZW5kZXJlZC4iKX0pKCk7Y29uc3QgZT10aGlzLl9yZW5kZXJVcGRhdGVkQ29sdW1ucygpfHx0aGlzLl9oZWFkZXJSb3dEZWZDaGFuZ2VkfHx0aGlzLl9mb290ZXJSb3dEZWZDaGFuZ2VkO3RoaXMuX3N0aWNreUNvbHVtblN0eWxlc05lZWRSZXNldD10aGlzLl9zdGlja3lDb2x1bW5TdHlsZXNOZWVkUmVzZXR8fGUsdGhpcy5fZm9yY2VSZWNhbGN1bGF0ZUNlbGxXaWR0aHM9ZSx0aGlzLl9oZWFkZXJSb3dEZWZDaGFuZ2VkJiYodGhpcy5fZm9yY2VSZW5kZXJIZWFkZXJSb3dzKCksdGhpcy5faGVhZGVyUm93RGVmQ2hhbmdlZD0hMSksdGhpcy5fZm9vdGVyUm93RGVmQ2hhbmdlZCYmKHRoaXMuX2ZvcmNlUmVuZGVyRm9vdGVyUm93cygpLHRoaXMuX2Zvb3RlclJvd0RlZkNoYW5nZWQ9ITEpLHRoaXMuZGF0YVNvdXJjZSYmdGhpcy5fcm93RGVmcy5sZW5ndGg+MCYmIXRoaXMuX3JlbmRlckNoYW5nZVN1YnNjcmlwdGlvbj90aGlzLl9vYnNlcnZlUmVuZGVyQ2hhbmdlcygpOnRoaXMuX3N0aWNreUNvbHVtblN0eWxlc05lZWRSZXNldCYmdGhpcy51cGRhdGVTdGlja3lDb2x1bW5TdHlsZXMoKSx0aGlzLl9jaGVja1N0aWNreVN0YXRlcygpfW5nT25EZXN0cm95KCl7dGhpcy5fcm93T3V0bGV0LnZpZXdDb250YWluZXIuY2xlYXIoKSx0aGlzLl9ub0RhdGFSb3dPdXRsZXQudmlld0NvbnRhaW5lci5jbGVhcigpLHRoaXMuX2hlYWRlclJvd091dGxldC52aWV3Q29udGFpbmVyLmNsZWFyKCksdGhpcy5fZm9vdGVyUm93T3V0bGV0LnZpZXdDb250YWluZXIuY2xlYXIoKSx0aGlzLl9jYWNoZWRSZW5kZXJSb3dzTWFwLmNsZWFyKCksdGhpcy5fb25EZXN0cm95Lm5leHQoKSx0aGlzLl9vbkRlc3Ryb3kuY29tcGxldGUoKSxGSCh0aGlzLmRhdGFTb3VyY2UpJiZ0aGlzLmRhdGFTb3VyY2UuZGlzY29ubmVjdCh0aGlzKX1yZW5kZXJSb3dzKCl7dGhpcy5fcmVuZGVyUm93cz10aGlzLl9nZXRBbGxSZW5kZXJSb3dzKCk7Y29uc3QgdD10aGlzLl9kYXRhRGlmZmVyLmRpZmYodGhpcy5fcmVuZGVyUm93cyk7aWYoIXQpcmV0dXJuIHZvaWQgdGhpcy5fdXBkYXRlTm9EYXRhUm93KCk7Y29uc3QgZT10aGlzLl9yb3dPdXRsZXQudmlld0NvbnRhaW5lcjt0aGlzLl92aWV3UmVwZWF0ZXI/dGhpcy5fdmlld1JlcGVhdGVyLmFwcGx5Q2hhbmdlcyh0LGUsKCh0LGUsbik9PnRoaXMuX2dldEVtYmVkZGVkVmlld0FyZ3ModC5pdGVtLG4pKSwodD0+dC5pdGVtLmRhdGEpLCh0PT57MT09PXQub3BlcmF0aW9uJiZ0LmNvbnRleHQmJnRoaXMuX3JlbmRlckNlbGxUZW1wbGF0ZUZvckl0ZW0odC5yZWNvcmQuaXRlbS5yb3dEZWYsdC5jb250ZXh0KX0pKTp0LmZvckVhY2hPcGVyYXRpb24oKCh0LG4sbyk9PntpZihudWxsPT10LnByZXZpb3VzSW5kZXgpe2NvbnN0IGU9dC5pdGVtO3RoaXMuX3JlbmRlclJvdyh0aGlzLl9yb3dPdXRsZXQsZS5yb3dEZWYsbyx7JGltcGxpY2l0OmUuZGF0YX0pfWVsc2UgaWYobnVsbD09byllLnJlbW92ZShuKTtlbHNle2NvbnN0IHQ9ZS5nZXQobik7ZS5tb3ZlKHQsbyl9fSkpLHRoaXMuX3VwZGF0ZVJvd0luZGV4Q29udGV4dCgpLHQuZm9yRWFjaElkZW50aXR5Q2hhbmdlKCh0PT57ZS5nZXQodC5jdXJyZW50SW5kZXgpLmNvbnRleHQuJGltcGxpY2l0PXQuaXRlbS5kYXRhfSkpLHRoaXMuX3VwZGF0ZU5vRGF0YVJvdygpLHRoaXMudXBkYXRlU3RpY2t5Q29sdW1uU3R5bGVzKCl9YWRkQ29sdW1uRGVmKHQpe3RoaXMuX2N1c3RvbUNvbHVtbkRlZnMuYWRkKHQpfXJlbW92ZUNvbHVtbkRlZih0KXt0aGlzLl9jdXN0b21Db2x1bW5EZWZzLmRlbGV0ZSh0KX1hZGRSb3dEZWYodCl7dGhpcy5fY3VzdG9tUm93RGVmcy5hZGQodCl9cmVtb3ZlUm93RGVmKHQpe3RoaXMuX2N1c3RvbVJvd0RlZnMuZGVsZXRlKHQpfWFkZEhlYWRlclJvd0RlZih0KXt0aGlzLl9jdXN0b21IZWFkZXJSb3dEZWZzLmFkZCh0KSx0aGlzLl9oZWFkZXJSb3dEZWZDaGFuZ2VkPSEwfXJlbW92ZUhlYWRlclJvd0RlZih0KXt0aGlzLl9jdXN0b21IZWFkZXJSb3dEZWZzLmRlbGV0ZSh0KSx0aGlzLl9oZWFkZXJSb3dEZWZDaGFuZ2VkPSEwfWFkZEZvb3RlclJvd0RlZih0KXt0aGlzLl9jdXN0b21Gb290ZXJSb3dEZWZzLmFkZCh0KSx0aGlzLl9mb290ZXJSb3dEZWZDaGFuZ2VkPSEwfXJlbW92ZUZvb3RlclJvd0RlZih0KXt0aGlzLl9jdXN0b21Gb290ZXJSb3dEZWZzLmRlbGV0ZSh0KSx0aGlzLl9mb290ZXJSb3dEZWZDaGFuZ2VkPSEwfXNldE5vRGF0YVJvdyh0KXt0aGlzLl9jdXN0b21Ob0RhdGFSb3c9dH11cGRhdGVTdGlja3lIZWFkZXJSb3dTdHlsZXMoKXtjb25zdCB0PXRoaXMuX2dldFJlbmRlcmVkUm93cyh0aGlzLl9oZWFkZXJSb3dPdXRsZXQpLGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoInRoZWFkIik7ZSYmKGUuc3R5bGUuZGlzcGxheT10Lmxlbmd0aD8iIjoibm9uZSIpO2NvbnN0IG49dGhpcy5faGVhZGVyUm93RGVmcy5tYXAoKHQ9PnQuc3RpY2t5KSk7dGhpcy5fc3RpY2t5U3R5bGVyLmNsZWFyU3RpY2t5UG9zaXRpb25pbmcodCxbInRvcCJdKSx0aGlzLl9zdGlja3lTdHlsZXIuc3RpY2tSb3dzKHQsbiwidG9wIiksdGhpcy5faGVhZGVyUm93RGVmcy5mb3JFYWNoKCh0PT50LnJlc2V0U3RpY2t5Q2hhbmdlZCgpKSl9dXBkYXRlU3RpY2t5Rm9vdGVyUm93U3R5bGVzKCl7Y29uc3QgdD10aGlzLl9nZXRSZW5kZXJlZFJvd3ModGhpcy5fZm9vdGVyUm93T3V0bGV0KSxlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCJ0Zm9vdCIpO2UmJihlLnN0eWxlLmRpc3BsYXk9dC5sZW5ndGg/IiI6Im5vbmUiKTtjb25zdCBuPXRoaXMuX2Zvb3RlclJvd0RlZnMubWFwKCh0PT50LnN0aWNreSkpO3RoaXMuX3N0aWNreVN0eWxlci5jbGVhclN0aWNreVBvc2l0aW9uaW5nKHQsWyJib3R0b20iXSksdGhpcy5fc3RpY2t5U3R5bGVyLnN0aWNrUm93cyh0LG4sImJvdHRvbSIpLHRoaXMuX3N0aWNreVN0eWxlci51cGRhdGVTdGlja3lGb290ZXJDb250YWluZXIodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LG4pLHRoaXMuX2Zvb3RlclJvd0RlZnMuZm9yRWFjaCgodD0+dC5yZXNldFN0aWNreUNoYW5nZWQoKSkpfXVwZGF0ZVN0aWNreUNvbHVtblN0eWxlcygpe2NvbnN0IHQ9dGhpcy5fZ2V0UmVuZGVyZWRSb3dzKHRoaXMuX2hlYWRlclJvd091dGxldCksZT10aGlzLl9nZXRSZW5kZXJlZFJvd3ModGhpcy5fcm93T3V0bGV0KSxuPXRoaXMuX2dldFJlbmRlcmVkUm93cyh0aGlzLl9mb290ZXJSb3dPdXRsZXQpOyh0aGlzLl9pc05hdGl2ZUh0bWxUYWJsZSYmIXRoaXMuX2ZpeGVkTGF5b3V0fHx0aGlzLl9zdGlja3lDb2x1bW5TdHlsZXNOZWVkUmVzZXQpJiYodGhpcy5fc3RpY2t5U3R5bGVyLmNsZWFyU3RpY2t5UG9zaXRpb25pbmcoWy4uLnQsLi4uZSwuLi5uXSxbImxlZnQiLCJyaWdodCJdKSx0aGlzLl9zdGlja3lDb2x1bW5TdHlsZXNOZWVkUmVzZXQ9ITEpLHQuZm9yRWFjaCgoKHQsZSk9Pnt0aGlzLl9hZGRTdGlja3lDb2x1bW5TdHlsZXMoW3RdLHRoaXMuX2hlYWRlclJvd0RlZnNbZV0pfSkpLHRoaXMuX3Jvd0RlZnMuZm9yRWFjaCgodD0+e2NvbnN0IG49W107Zm9yKGxldCBvPTA7bzxlLmxlbmd0aDtvKyspdGhpcy5fcmVuZGVyUm93c1tvXS5yb3dEZWY9PT10JiZuLnB1c2goZVtvXSk7dGhpcy5fYWRkU3RpY2t5Q29sdW1uU3R5bGVzKG4sdCl9KSksbi5mb3JFYWNoKCgodCxlKT0+e3RoaXMuX2FkZFN0aWNreUNvbHVtblN0eWxlcyhbdF0sdGhpcy5fZm9vdGVyUm93RGVmc1tlXSl9KSksQXJyYXkuZnJvbSh0aGlzLl9jb2x1bW5EZWZzQnlOYW1lLnZhbHVlcygpKS5mb3JFYWNoKCh0PT50LnJlc2V0U3RpY2t5Q2hhbmdlZCgpKSl9X2dldEFsbFJlbmRlclJvd3MoKXtjb25zdCB0PVtdLGU9dGhpcy5fY2FjaGVkUmVuZGVyUm93c01hcDt0aGlzLl9jYWNoZWRSZW5kZXJSb3dzTWFwPW5ldyBNYXA7Zm9yKGxldCBuPTA7bjx0aGlzLl9kYXRhLmxlbmd0aDtuKyspe2xldCBvPXRoaXMuX2RhdGFbbl07Y29uc3QgaT10aGlzLl9nZXRSZW5kZXJSb3dzRm9yRGF0YShvLG4sZS5nZXQobykpO3RoaXMuX2NhY2hlZFJlbmRlclJvd3NNYXAuaGFzKG8pfHx0aGlzLl9jYWNoZWRSZW5kZXJSb3dzTWFwLnNldChvLG5ldyBXZWFrTWFwKTtmb3IobGV0IGU9MDtlPGkubGVuZ3RoO2UrKyl7bGV0IG49aVtlXTtjb25zdCBvPXRoaXMuX2NhY2hlZFJlbmRlclJvd3NNYXAuZ2V0KG4uZGF0YSk7by5oYXMobi5yb3dEZWYpP28uZ2V0KG4ucm93RGVmKS5wdXNoKG4pOm8uc2V0KG4ucm93RGVmLFtuXSksdC5wdXNoKG4pfX1yZXR1cm4gdH1fZ2V0UmVuZGVyUm93c0ZvckRhdGEodCxlLG4pe3JldHVybiB0aGlzLl9nZXRSb3dEZWZzKHQsZSkubWFwKChvPT57Y29uc3QgaT1uJiZuLmhhcyhvKT9uLmdldChvKTpbXTtpZihpLmxlbmd0aCl7Y29uc3QgdD1pLnNoaWZ0KCk7cmV0dXJuIHQuZGF0YUluZGV4PWUsdH1yZXR1cm57ZGF0YTp0LHJvd0RlZjpvLGRhdGFJbmRleDplfX0pKX1fY2FjaGVDb2x1bW5EZWZzKCl7dGhpcy5fY29sdW1uRGVmc0J5TmFtZS5jbGVhcigpLGEwKHRoaXMuX2dldE93bkRlZnModGhpcy5fY29udGVudENvbHVtbkRlZnMpLHRoaXMuX2N1c3RvbUNvbHVtbkRlZnMpLmZvckVhY2goKHQ9PntpZih0aGlzLl9jb2x1bW5EZWZzQnlOYW1lLmhhcyh0Lm5hbWUpJiYoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkpdGhyb3coZnVuY3Rpb24gZSh0KXtyZXR1cm4gRXJyb3IoYER1cGxpY2F0ZSBjb2x1bW4gZGVmaW5pdGlvbiBuYW1lIHByb3ZpZGVkOiAiJHt0fSIuYCl9KSh0Lm5hbWUpO3RoaXMuX2NvbHVtbkRlZnNCeU5hbWUuc2V0KHQubmFtZSx0KX0pKX1fY2FjaGVSb3dEZWZzKCl7dGhpcy5faGVhZGVyUm93RGVmcz1hMCh0aGlzLl9nZXRPd25EZWZzKHRoaXMuX2NvbnRlbnRIZWFkZXJSb3dEZWZzKSx0aGlzLl9jdXN0b21IZWFkZXJSb3dEZWZzKSx0aGlzLl9mb290ZXJSb3dEZWZzPWEwKHRoaXMuX2dldE93bkRlZnModGhpcy5fY29udGVudEZvb3RlclJvd0RlZnMpLHRoaXMuX2N1c3RvbUZvb3RlclJvd0RlZnMpLHRoaXMuX3Jvd0RlZnM9YTAodGhpcy5fZ2V0T3duRGVmcyh0aGlzLl9jb250ZW50Um93RGVmcyksdGhpcy5fY3VzdG9tUm93RGVmcyk7Y29uc3QgdD10aGlzLl9yb3dEZWZzLmZpbHRlcigodD0+IXQud2hlbikpO2lmKCF0aGlzLm11bHRpVGVtcGxhdGVEYXRhUm93cyYmdC5sZW5ndGg+MSYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpKXRocm93KGZ1bmN0aW9uIGUoKXtyZXR1cm4gRXJyb3IoIlRoZXJlIGNhbiBvbmx5IGJlIG9uZSBkZWZhdWx0IHJvdyB3aXRob3V0IGEgd2hlbiBwcmVkaWNhdGUgZnVuY3Rpb24uIil9KSgpO3RoaXMuX2RlZmF1bHRSb3dEZWY9dFswXX1fcmVuZGVyVXBkYXRlZENvbHVtbnMoKXtjb25zdCB0PSh0LGUpPT50fHwhIWUuZ2V0Q29sdW1uc0RpZmYoKSxlPXRoaXMuX3Jvd0RlZnMucmVkdWNlKHQsITEpO2UmJnRoaXMuX2ZvcmNlUmVuZGVyRGF0YVJvd3MoKTtjb25zdCBuPXRoaXMuX2hlYWRlclJvd0RlZnMucmVkdWNlKHQsITEpO24mJnRoaXMuX2ZvcmNlUmVuZGVySGVhZGVyUm93cygpO2NvbnN0IG89dGhpcy5fZm9vdGVyUm93RGVmcy5yZWR1Y2UodCwhMSk7cmV0dXJuIG8mJnRoaXMuX2ZvcmNlUmVuZGVyRm9vdGVyUm93cygpLGV8fG58fG99X3N3aXRjaERhdGFTb3VyY2UodCl7dGhpcy5fZGF0YT1bXSxGSCh0aGlzLmRhdGFTb3VyY2UpJiZ0aGlzLmRhdGFTb3VyY2UuZGlzY29ubmVjdCh0aGlzKSx0aGlzLl9yZW5kZXJDaGFuZ2VTdWJzY3JpcHRpb24mJih0aGlzLl9yZW5kZXJDaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9yZW5kZXJDaGFuZ2VTdWJzY3JpcHRpb249bnVsbCksdHx8KHRoaXMuX2RhdGFEaWZmZXImJnRoaXMuX2RhdGFEaWZmZXIuZGlmZihbXSksdGhpcy5fcm93T3V0bGV0LnZpZXdDb250YWluZXIuY2xlYXIoKSksdGhpcy5fZGF0YVNvdXJjZT10fV9vYnNlcnZlUmVuZGVyQ2hhbmdlcygpe2lmKCF0aGlzLmRhdGFTb3VyY2UpcmV0dXJuO2xldCB0O2lmKEZIKHRoaXMuZGF0YVNvdXJjZSk/dD10aGlzLmRhdGFTb3VyY2UuY29ubmVjdCh0aGlzKTp1dCh0aGlzLmRhdGFTb3VyY2UpP3Q9dGhpcy5kYXRhU291cmNlOkFycmF5LmlzQXJyYXkodGhpcy5kYXRhU291cmNlKSYmKHQ9Wih0aGlzLmRhdGFTb3VyY2UpKSx2b2lkIDA9PT10JiYoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkpdGhyb3coZnVuY3Rpb24gZSgpe3JldHVybiBFcnJvcigiUHJvdmlkZWQgZGF0YSBzb3VyY2UgZGlkIG5vdCBtYXRjaCBhbiBhcnJheSwgT2JzZXJ2YWJsZSwgb3IgRGF0YVNvdXJjZSIpfSkoKTt0aGlzLl9yZW5kZXJDaGFuZ2VTdWJzY3JpcHRpb249dC5waXBlKHVuKHRoaXMuX29uRGVzdHJveSkpLnN1YnNjcmliZSgodD0+e3RoaXMuX2RhdGE9dHx8W10sdGhpcy5yZW5kZXJSb3dzKCl9KSl9X2ZvcmNlUmVuZGVySGVhZGVyUm93cygpe3RoaXMuX2hlYWRlclJvd091dGxldC52aWV3Q29udGFpbmVyLmxlbmd0aD4wJiZ0aGlzLl9oZWFkZXJSb3dPdXRsZXQudmlld0NvbnRhaW5lci5jbGVhcigpLHRoaXMuX2hlYWRlclJvd0RlZnMuZm9yRWFjaCgoKHQsZSk9PnRoaXMuX3JlbmRlclJvdyh0aGlzLl9oZWFkZXJSb3dPdXRsZXQsdCxlKSkpLHRoaXMudXBkYXRlU3RpY2t5SGVhZGVyUm93U3R5bGVzKCl9X2ZvcmNlUmVuZGVyRm9vdGVyUm93cygpe3RoaXMuX2Zvb3RlclJvd091dGxldC52aWV3Q29udGFpbmVyLmxlbmd0aD4wJiZ0aGlzLl9mb290ZXJSb3dPdXRsZXQudmlld0NvbnRhaW5lci5jbGVhcigpLHRoaXMuX2Zvb3RlclJvd0RlZnMuZm9yRWFjaCgoKHQsZSk9PnRoaXMuX3JlbmRlclJvdyh0aGlzLl9mb290ZXJSb3dPdXRsZXQsdCxlKSkpLHRoaXMudXBkYXRlU3RpY2t5Rm9vdGVyUm93U3R5bGVzKCl9X2FkZFN0aWNreUNvbHVtblN0eWxlcyh0LGUpe2NvbnN0IG49QXJyYXkuZnJvbShlLmNvbHVtbnN8fFtdKS5tYXAoKHQ9Pntjb25zdCBlPXRoaXMuX2NvbHVtbkRlZnNCeU5hbWUuZ2V0KHQpO2lmKCFlJiYoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkpdGhyb3cgSiQodCk7cmV0dXJuIGV9KSksbz1uLm1hcCgodD0+dC5zdGlja3kpKSxpPW4ubWFwKCh0PT50LnN0aWNreUVuZCkpO3RoaXMuX3N0aWNreVN0eWxlci51cGRhdGVTdGlja3lDb2x1bW5zKHQsbyxpLCF0aGlzLl9maXhlZExheW91dHx8dGhpcy5fZm9yY2VSZWNhbGN1bGF0ZUNlbGxXaWR0aHMpfV9nZXRSZW5kZXJlZFJvd3ModCl7Y29uc3QgZT1bXTtmb3IobGV0IG49MDtuPHQudmlld0NvbnRhaW5lci5sZW5ndGg7bisrKXtjb25zdCBvPXQudmlld0NvbnRhaW5lci5nZXQobik7ZS5wdXNoKG8ucm9vdE5vZGVzWzBdKX1yZXR1cm4gZX1fZ2V0Um93RGVmcyh0LGUpe2lmKDE9PXRoaXMuX3Jvd0RlZnMubGVuZ3RoKXJldHVyblt0aGlzLl9yb3dEZWZzWzBdXTtsZXQgbj1bXTtpZih0aGlzLm11bHRpVGVtcGxhdGVEYXRhUm93cyluPXRoaXMuX3Jvd0RlZnMuZmlsdGVyKChuPT4hbi53aGVufHxuLndoZW4oZSx0KSkpO2Vsc2V7bGV0IG89dGhpcy5fcm93RGVmcy5maW5kKChuPT5uLndoZW4mJm4ud2hlbihlLHQpKSl8fHRoaXMuX2RlZmF1bHRSb3dEZWY7byYmbi5wdXNoKG8pfWlmKCFuLmxlbmd0aCYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpKXRocm93KGZ1bmN0aW9uIG8odCl7cmV0dXJuIEVycm9yKGBDb3VsZCBub3QgZmluZCBhIG1hdGNoaW5nIHJvdyBkZWZpbml0aW9uIGZvciB0aGVwcm92aWRlZCByb3cgZGF0YTogJHtKU09OLnN0cmluZ2lmeSh0KX1gKX0pKHQpO3JldHVybiBufV9nZXRFbWJlZGRlZFZpZXdBcmdzKHQsZSl7cmV0dXJue3RlbXBsYXRlUmVmOnQucm93RGVmLnRlbXBsYXRlLGNvbnRleHQ6eyRpbXBsaWNpdDp0LmRhdGF9LGluZGV4OmV9fV9yZW5kZXJSb3codCxlLG4sbz17fSl7Y29uc3QgaT10LnZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KGUudGVtcGxhdGUsbyxuKTtyZXR1cm4gdGhpcy5fcmVuZGVyQ2VsbFRlbXBsYXRlRm9ySXRlbShlLG8pLGl9X3JlbmRlckNlbGxUZW1wbGF0ZUZvckl0ZW0odCxlKXtmb3IobGV0IG4gb2YgdGhpcy5fZ2V0Q2VsbFRlbXBsYXRlcyh0KSlXJC5tb3N0UmVjZW50Q2VsbE91dGxldCYmVyQubW9zdFJlY2VudENlbGxPdXRsZXQuX3ZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KG4sZSk7dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9X3VwZGF0ZVJvd0luZGV4Q29udGV4dCgpe2NvbnN0IHQ9dGhpcy5fcm93T3V0bGV0LnZpZXdDb250YWluZXI7Zm9yKGxldCBlPTAsbj10Lmxlbmd0aDtlPG47ZSsrKXtjb25zdCBvPXQuZ2V0KGUpLmNvbnRleHQ7by5jb3VudD1uLG8uZmlyc3Q9MD09PWUsby5sYXN0PWU9PT1uLTEsby5ldmVuPWUlMj09MCxvLm9kZD0hby5ldmVuLHRoaXMubXVsdGlUZW1wbGF0ZURhdGFSb3dzPyhvLmRhdGFJbmRleD10aGlzLl9yZW5kZXJSb3dzW2VdLmRhdGFJbmRleCxvLnJlbmRlckluZGV4PWUpOm8uaW5kZXg9dGhpcy5fcmVuZGVyUm93c1tlXS5kYXRhSW5kZXh9fV9nZXRDZWxsVGVtcGxhdGVzKHQpe3JldHVybiB0JiZ0LmNvbHVtbnM/QXJyYXkuZnJvbSh0LmNvbHVtbnMsKGU9Pntjb25zdCBuPXRoaXMuX2NvbHVtbkRlZnNCeU5hbWUuZ2V0KGUpO2lmKCFuJiYoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkpdGhyb3cgSiQoZSk7cmV0dXJuIHQuZXh0cmFjdENlbGxUZW1wbGF0ZShuKX0pKTpbXX1fYXBwbHlOYXRpdmVUYWJsZVNlY3Rpb25zKCl7Y29uc3QgdD10aGlzLl9kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksZT1be3RhZzoidGhlYWQiLG91dGxldHM6W3RoaXMuX2hlYWRlclJvd091dGxldF19LHt0YWc6InRib2R5IixvdXRsZXRzOlt0aGlzLl9yb3dPdXRsZXQsdGhpcy5fbm9EYXRhUm93T3V0bGV0XX0se3RhZzoidGZvb3QiLG91dGxldHM6W3RoaXMuX2Zvb3RlclJvd091dGxldF19XTtmb3IoY29uc3QgbiBvZiBlKXtjb25zdCBlPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQobi50YWcpO2Uuc2V0QXR0cmlidXRlKCJyb2xlIiwicm93Z3JvdXAiKTtmb3IoY29uc3QgdCBvZiBuLm91dGxldHMpZS5hcHBlbmRDaGlsZCh0LmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7dC5hcHBlbmRDaGlsZChlKX10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQodCl9X2ZvcmNlUmVuZGVyRGF0YVJvd3MoKXt0aGlzLl9kYXRhRGlmZmVyLmRpZmYoW10pLHRoaXMuX3Jvd091dGxldC52aWV3Q29udGFpbmVyLmNsZWFyKCksdGhpcy5yZW5kZXJSb3dzKCl9X2NoZWNrU3RpY2t5U3RhdGVzKCl7Y29uc3QgdD0odCxlKT0+dHx8ZS5oYXNTdGlja3lDaGFuZ2VkKCk7dGhpcy5faGVhZGVyUm93RGVmcy5yZWR1Y2UodCwhMSkmJnRoaXMudXBkYXRlU3RpY2t5SGVhZGVyUm93U3R5bGVzKCksdGhpcy5fZm9vdGVyUm93RGVmcy5yZWR1Y2UodCwhMSkmJnRoaXMudXBkYXRlU3RpY2t5Rm9vdGVyUm93U3R5bGVzKCksQXJyYXkuZnJvbSh0aGlzLl9jb2x1bW5EZWZzQnlOYW1lLnZhbHVlcygpKS5yZWR1Y2UodCwhMSkmJih0aGlzLl9zdGlja3lDb2x1bW5TdHlsZXNOZWVkUmVzZXQ9ITAsdGhpcy51cGRhdGVTdGlja3lDb2x1bW5TdHlsZXMoKSl9X3NldHVwU3RpY2t5U3R5bGVyKCl7dGhpcy5fc3RpY2t5U3R5bGVyPW5ldyBLJCh0aGlzLl9pc05hdGl2ZUh0bWxUYWJsZSx0aGlzLnN0aWNreUNzc0NsYXNzLHRoaXMuX2Rpcj90aGlzLl9kaXIudmFsdWU6Imx0ciIsdGhpcy5fY29hbGVzY2VkU3R5bGVTY2hlZHVsZXIsdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyLHRoaXMubmVlZHNQb3NpdGlvblN0aWNreU9uRWxlbWVudCx0aGlzLl9zdGlja3lQb3NpdGlvbmluZ0xpc3RlbmVyKSwodGhpcy5fZGlyP3RoaXMuX2Rpci5jaGFuZ2U6WigpKS5waXBlKHVuKHRoaXMuX29uRGVzdHJveSkpLnN1YnNjcmliZSgodD0+e3RoaXMuX3N0aWNreVN0eWxlci5kaXJlY3Rpb249dCx0aGlzLnVwZGF0ZVN0aWNreUNvbHVtblN0eWxlcygpfSkpfV9nZXRPd25EZWZzKHQpe3JldHVybiB0LmZpbHRlcigodD0+IXQuX3RhYmxlfHx0Ll90YWJsZT09PXRoaXMpKX1fdXBkYXRlTm9EYXRhUm93KCl7Y29uc3QgdD10aGlzLl9jdXN0b21Ob0RhdGFSb3d8fHRoaXMuX25vRGF0YVJvdztpZih0KXtjb25zdCBlPTA9PT10aGlzLl9yb3dPdXRsZXQudmlld0NvbnRhaW5lci5sZW5ndGg7aWYoZSE9PXRoaXMuX2lzU2hvd2luZ05vRGF0YVJvdyl7Y29uc3Qgbj10aGlzLl9ub0RhdGFSb3dPdXRsZXQudmlld0NvbnRhaW5lcjtlP24uY3JlYXRlRW1iZWRkZWRWaWV3KHQudGVtcGxhdGVSZWYpOm4uY2xlYXIoKSx0aGlzLl9pc1Nob3dpbmdOb0RhdGFSb3c9ZX19fX1mdW5jdGlvbiBhMCh0LGUpe3JldHVybiB0LmNvbmNhdChBcnJheS5mcm9tKGUpKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovaTAuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGkwKShNdShFaCksTXUoSGgpLE11KGNoKSxPcigicm9sZSIpLE11KE16LDgpLE11KFVDKSxNdShmSSksTXUoV0gsOCksTXUoSSQsOCksTXUoUSQsMTIpLE11KFFILDgpKX0saTAuybVjbXA9VW8oe3R5cGU6aTAsc2VsZWN0b3JzOltbImNkay10YWJsZSJdLFsidGFibGUiLCJjZGstdGFibGUiLCIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24gdChlLG4sbyl7aWYoMSZlJiYoR2IobyxaJCwxKSxHYihvLEQkLDEpLEdiKG8sVSQsMSksR2IobyxCJCwxKSxHYihvLGokLDEpKSwyJmUpe2xldCB0O1ViKHQ9WWIoKSkmJihuLl9ub0RhdGFSb3c9dC5maXJzdCksVWIodD1ZYigpKSYmKG4uX2NvbnRlbnRDb2x1bW5EZWZzPXQpLFViKHQ9WWIoKSkmJihuLl9jb250ZW50Um93RGVmcz10KSxVYih0PVliKCkpJiYobi5fY29udGVudEhlYWRlclJvd0RlZnM9dCksVWIodD1ZYigpKSYmKG4uX2NvbnRlbnRGb290ZXJSb3dEZWZzPXQpfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJihXYigkJCwzKSxXYih0MCwzKSxXYihlMCwzKSxXYihuMCwzKSksMiZlKXtsZXQgdDtVYih0PVliKCkpJiYobi5fcm93T3V0bGV0PXQuZmlyc3QpLFViKHQ9WWIoKSkmJihuLl9oZWFkZXJSb3dPdXRsZXQ9dC5maXJzdCksVWIodD1ZYigpKSYmKG4uX2Zvb3RlclJvd091dGxldD10LmZpcnN0KSxVYih0PVliKCkpJiYobi5fbm9EYXRhUm93T3V0bGV0PXQuZmlyc3QpfX0saG9zdEF0dHJzOlsxLCJjZGstdGFibGUiXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MiZlJiZhZigiY2RrLXRhYmxlLWZpeGVkLWxheW91dCIsbi5maXhlZExheW91dCl9LGlucHV0czp7dHJhY2tCeToidHJhY2tCeSIsZGF0YVNvdXJjZToiZGF0YVNvdXJjZSIsbXVsdGlUZW1wbGF0ZURhdGFSb3dzOiJtdWx0aVRlbXBsYXRlRGF0YVJvd3MiLGZpeGVkTGF5b3V0OiJmaXhlZExheW91dCJ9LGV4cG9ydEFzOlsiY2RrVGFibGUiXSxmZWF0dXJlczpbaWgoW3twcm92aWRlOngkLHVzZUV4aXN0aW5nOmkwfSx7cHJvdmlkZTpXSCx1c2VDbGFzczpCSH0se3Byb3ZpZGU6SSQsdXNlQ2xhc3M6eiR9LHtwcm92aWRlOlEkLHVzZVZhbHVlOm51bGx9XSldLG5nQ29udGVudFNlbGVjdG9yczpbImNhcHRpb24iLCJjb2xncm91cCwgY29sIl0sZGVjbHM6Nix2YXJzOjAsY29uc3RzOltbImhlYWRlclJvd091dGxldCIsIiJdLFsicm93T3V0bGV0IiwiIl0sWyJub0RhdGFSb3dPdXRsZXQiLCIiXSxbImZvb3RlclJvd091dGxldCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoVnUoXyQpLGp1KDApLGp1KDEsMSksRHUoMiwwKSxEdSgzLDEpLER1KDQsMiksRHUoNSwzKSl9LGRpcmVjdGl2ZXM6W3QwLCQkLG4wLGUwXSxzdHlsZXM6WyIuY2RrLXRhYmxlLWZpeGVkLWxheW91dHt0YWJsZS1sYXlvdXQ6Zml4ZWR9XG4iXSxlbmNhcHN1bGF0aW9uOjJ9KSxpMC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOkVofSx7dHlwZTpIaH0se3R5cGU6Y2h9LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpScixhcmdzOlsicm9sZSJdfV19LHt0eXBlOk16LGRlY29yYXRvcnM6W3t0eXBlOl9zfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltVQ119XX0se3R5cGU6Zkl9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbV0hdfV19LHt0eXBlOnokLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltJJF19XX0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTpNc30se3R5cGU6eXMsYXJnczpbUSRdfV19LHt0eXBlOlFILGRlY29yYXRvcnM6W3t0eXBlOl9zfV19XSxpMC5wcm9wRGVjb3JhdG9ycz17dHJhY2tCeTpbe3R5cGU6eV99XSxkYXRhU291cmNlOlt7dHlwZTp5X31dLG11bHRpVGVtcGxhdGVEYXRhUm93czpbe3R5cGU6eV99XSxmaXhlZExheW91dDpbe3R5cGU6eV99XSxfcm93T3V0bGV0Olt7dHlwZTpGcixhcmdzOlskJCx7c3RhdGljOiEwfV19XSxfaGVhZGVyUm93T3V0bGV0Olt7dHlwZTpGcixhcmdzOlt0MCx7c3RhdGljOiEwfV19XSxfZm9vdGVyUm93T3V0bGV0Olt7dHlwZTpGcixhcmdzOltlMCx7c3RhdGljOiEwfV19XSxfbm9EYXRhUm93T3V0bGV0Olt7dHlwZTpGcixhcmdzOltuMCx7c3RhdGljOiEwfV19XSxfY29udGVudENvbHVtbkRlZnM6W3t0eXBlOnpyLGFyZ3M6W0QkLHtkZXNjZW5kYW50czohMH1dfV0sX2NvbnRlbnRSb3dEZWZzOlt7dHlwZTp6cixhcmdzOltVJCx7ZGVzY2VuZGFudHM6ITB9XX1dLF9jb250ZW50SGVhZGVyUm93RGVmczpbe3R5cGU6enIsYXJnczpbQiQse2Rlc2NlbmRhbnRzOiEwfV19XSxfY29udGVudEZvb3RlclJvd0RlZnM6W3t0eXBlOnpyLGFyZ3M6W2okLHtkZXNjZW5kYW50czohMH1dfV0sX25vRGF0YVJvdzpbe3R5cGU6SHIsYXJnczpbWiRdfV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoaTAsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoiY2RrLXRhYmxlLCB0YWJsZVtjZGstdGFibGVdIixleHBvcnRBczoiY2RrVGFibGUiLHRlbXBsYXRlOm8wLGhvc3Q6e2NsYXNzOiJjZGstdGFibGUiLCJbY2xhc3MuY2RrLXRhYmxlLWZpeGVkLWxheW91dF0iOiJmaXhlZExheW91dCJ9LGVuY2Fwc3VsYXRpb246UG8uTm9uZSxjaGFuZ2VEZXRlY3Rpb246eG8uRGVmYXVsdCxwcm92aWRlcnM6W3twcm92aWRlOngkLHVzZUV4aXN0aW5nOmkwfSx7cHJvdmlkZTpXSCx1c2VDbGFzczpCSH0se3Byb3ZpZGU6SSQsdXNlQ2xhc3M6eiR9LHtwcm92aWRlOlEkLHVzZVZhbHVlOm51bGx9XSxzdHlsZXM6WyIuY2RrLXRhYmxlLWZpeGVkLWxheW91dHt0YWJsZS1sYXlvdXQ6Zml4ZWR9XG4iXX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkVofSx7dHlwZTpIaH0se3R5cGU6Y2h9LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpScixhcmdzOlsicm9sZSJdfV19LHt0eXBlOk16LGRlY29yYXRvcnM6W3t0eXBlOl9zfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltVQ119XX0se3R5cGU6Zkl9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbV0hdfV19LHt0eXBlOnokLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltJJF19XX0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTpNc30se3R5cGU6eXMsYXJnczpbUSRdfV19LHt0eXBlOlFILGRlY29yYXRvcnM6W3t0eXBlOl9zfV19XX0pLHt0cmFja0J5Olt7dHlwZTp5X31dLGRhdGFTb3VyY2U6W3t0eXBlOnlffV0sbXVsdGlUZW1wbGF0ZURhdGFSb3dzOlt7dHlwZTp5X31dLGZpeGVkTGF5b3V0Olt7dHlwZTp5X31dLF9yb3dPdXRsZXQ6W3t0eXBlOkZyLGFyZ3M6WyQkLHtzdGF0aWM6ITB9XX1dLF9oZWFkZXJSb3dPdXRsZXQ6W3t0eXBlOkZyLGFyZ3M6W3QwLHtzdGF0aWM6ITB9XX1dLF9mb290ZXJSb3dPdXRsZXQ6W3t0eXBlOkZyLGFyZ3M6W2UwLHtzdGF0aWM6ITB9XX1dLF9ub0RhdGFSb3dPdXRsZXQ6W3t0eXBlOkZyLGFyZ3M6W24wLHtzdGF0aWM6ITB9XX1dLF9jb250ZW50Q29sdW1uRGVmczpbe3R5cGU6enIsYXJnczpbRCQse2Rlc2NlbmRhbnRzOiEwfV19XSxfY29udGVudFJvd0RlZnM6W3t0eXBlOnpyLGFyZ3M6W1UkLHtkZXNjZW5kYW50czohMH1dfV0sX2NvbnRlbnRIZWFkZXJSb3dEZWZzOlt7dHlwZTp6cixhcmdzOltCJCx7ZGVzY2VuZGFudHM6ITB9XX1dLF9jb250ZW50Rm9vdGVyUm93RGVmczpbe3R5cGU6enIsYXJnczpbaiQse2Rlc2NlbmRhbnRzOiEwfV19XSxfbm9EYXRhUm93Olt7dHlwZTpIcixhcmdzOltaJF19XX0pO2NsYXNzIHIwe2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5fdGFibGU9dCx0aGlzLl9vcHRpb25zPWUsdGhpcy5qdXN0aWZ5PSJzdGFydCIsdGhpcy5fb3B0aW9ucz1lfHx7fX1nZXQgbmFtZSgpe3JldHVybiB0aGlzLl9uYW1lfXNldCBuYW1lKHQpe3RoaXMuX25hbWU9dCx0aGlzLl9zeW5jQ29sdW1uRGVmTmFtZSgpfW5nT25Jbml0KCl7aWYodGhpcy5fc3luY0NvbHVtbkRlZk5hbWUoKSx2b2lkIDA9PT10aGlzLmhlYWRlclRleHQmJih0aGlzLmhlYWRlclRleHQ9dGhpcy5fY3JlYXRlRGVmYXVsdEhlYWRlclRleHQoKSksdGhpcy5kYXRhQWNjZXNzb3J8fCh0aGlzLmRhdGFBY2Nlc3Nvcj10aGlzLl9vcHRpb25zLmRlZmF1bHREYXRhQWNjZXNzb3J8fCgodCxlKT0+dFtlXSkpLHRoaXMuX3RhYmxlKXRoaXMuY29sdW1uRGVmLmNlbGw9dGhpcy5jZWxsLHRoaXMuY29sdW1uRGVmLmhlYWRlckNlbGw9dGhpcy5oZWFkZXJDZWxsLHRoaXMuX3RhYmxlLmFkZENvbHVtbkRlZih0aGlzLmNvbHVtbkRlZik7ZWxzZSBpZigidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKXRocm93KGZ1bmN0aW9uIHQoKXtyZXR1cm4gRXJyb3IoIlRleHQgY29sdW1uIGNvdWxkIG5vdCBmaW5kIGEgcGFyZW50IHRhYmxlIGZvciByZWdpc3RyYXRpb24uIil9KSgpfW5nT25EZXN0cm95KCl7dGhpcy5fdGFibGUmJnRoaXMuX3RhYmxlLnJlbW92ZUNvbHVtbkRlZih0aGlzLmNvbHVtbkRlZil9X2NyZWF0ZURlZmF1bHRIZWFkZXJUZXh0KCl7Y29uc3QgdD10aGlzLm5hbWU7aWYoIXQmJigidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSl0aHJvdyhmdW5jdGlvbiBlKCl7cmV0dXJuIEVycm9yKCJUYWJsZSB0ZXh0IGNvbHVtbiBtdXN0IGhhdmUgYSBuYW1lLiIpfSkoKTtyZXR1cm4gdGhpcy5fb3B0aW9ucyYmdGhpcy5fb3B0aW9ucy5kZWZhdWx0SGVhZGVyVGV4dFRyYW5zZm9ybT90aGlzLl9vcHRpb25zLmRlZmF1bHRIZWFkZXJUZXh0VHJhbnNmb3JtKHQpOnRbMF0udG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpfV9zeW5jQ29sdW1uRGVmTmFtZSgpe3RoaXMuY29sdW1uRGVmJiYodGhpcy5jb2x1bW5EZWYubmFtZT10aGlzLm5hbWUpfX1yMC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8cjApKE11KGkwLDgpLE11KE8kLDgpKX0scjAuybVjbXA9VW8oe3R5cGU6cjAsc2VsZWN0b3JzOltbImNkay10ZXh0LWNvbHVtbiJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24gdChlLG4pe2lmKDEmZSYmKFdiKEQkLDMpLFdiKFAkLDMpLFdiKHckLDMpKSwyJmUpe2xldCB0O1ViKHQ9WWIoKSkmJihuLmNvbHVtbkRlZj10LmZpcnN0KSxVYih0PVliKCkpJiYobi5jZWxsPXQuZmlyc3QpLFViKHQ9WWIoKSkmJihuLmhlYWRlckNlbGw9dC5maXJzdCl9fSxpbnB1dHM6e2p1c3RpZnk6Imp1c3RpZnkiLG5hbWU6Im5hbWUiLGhlYWRlclRleHQ6ImhlYWRlclRleHQiLGRhdGFBY2Nlc3NvcjoiZGF0YUFjY2Vzc29yIn0sZGVjbHM6Myx2YXJzOjAsY29uc3RzOltbImNka0NvbHVtbkRlZiIsIiJdLFsiY2RrLWhlYWRlci1jZWxsIiwiIiwzLCJ0ZXh0LWFsaWduIiw0LCJjZGtIZWFkZXJDZWxsRGVmIl0sWyJjZGstY2VsbCIsIiIsMywidGV4dC1hbGlnbiIsNCwiY2RrQ2VsbERlZiJdLFsiY2RrLWhlYWRlci1jZWxsIiwiIl0sWyJjZGstY2VsbCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoa3UoMCwwKSxXbSgxLEMkLDIsMywidGgiLDEpLFdtKDIsTSQsMiwzLCJ0ZCIsMiksU3UoKSl9LGRpcmVjdGl2ZXM6W0QkLHckLFAkLEEkLFQkXSxlbmNhcHN1bGF0aW9uOjJ9KSxyMC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmkwLGRlY29yYXRvcnM6W3t0eXBlOl9zfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbTyRdfV19XSxyMC5wcm9wRGVjb3JhdG9ycz17bmFtZTpbe3R5cGU6eV99XSxoZWFkZXJUZXh0Olt7dHlwZTp5X31dLGRhdGFBY2Nlc3Nvcjpbe3R5cGU6eV99XSxqdXN0aWZ5Olt7dHlwZTp5X31dLGNvbHVtbkRlZjpbe3R5cGU6RnIsYXJnczpbRCQse3N0YXRpYzohMH1dfV0sY2VsbDpbe3R5cGU6RnIsYXJnczpbUCQse3N0YXRpYzohMH1dfV0saGVhZGVyQ2VsbDpbe3R5cGU6RnIsYXJnczpbdyQse3N0YXRpYzohMH1dfV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIocjAsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoiY2RrLXRleHQtY29sdW1uIix0ZW1wbGF0ZTonXG4gICAgPG5nLWNvbnRhaW5lciBjZGtDb2x1bW5EZWY+XG4gICAgICA8dGggY2RrLWhlYWRlci1jZWxsICpjZGtIZWFkZXJDZWxsRGVmIFtzdHlsZS50ZXh0LWFsaWduXT0ianVzdGlmeSI+XG4gICAgICAgIHt7aGVhZGVyVGV4dH19XG4gICAgICA8L3RoPlxuICAgICAgPHRkIGNkay1jZWxsICpjZGtDZWxsRGVmPSJsZXQgZGF0YSIgW3N0eWxlLnRleHQtYWxpZ25dPSJqdXN0aWZ5Ij5cbiAgICAgICAge3tkYXRhQWNjZXNzb3IoZGF0YSwgbmFtZSl9fVxuICAgICAgPC90ZD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgJyxlbmNhcHN1bGF0aW9uOlBvLk5vbmUsY2hhbmdlRGV0ZWN0aW9uOnhvLkRlZmF1bHR9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTppMCxkZWNvcmF0b3JzOlt7dHlwZTpfc31dfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W08kXX1dfV19KSx7anVzdGlmeTpbe3R5cGU6eV99XSxuYW1lOlt7dHlwZTp5X31dLGhlYWRlclRleHQ6W3t0eXBlOnlffV0sZGF0YUFjY2Vzc29yOlt7dHlwZTp5X31dLGNvbHVtbkRlZjpbe3R5cGU6RnIsYXJnczpbRCQse3N0YXRpYzohMH1dfV0sY2VsbDpbe3R5cGU6RnIsYXJnczpbUCQse3N0YXRpYzohMH1dfV0saGVhZGVyQ2VsbDpbe3R5cGU6RnIsYXJnczpbdyQse3N0YXRpYzohMH1dfV19KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IHMwPVtpMCxVJCxQJCxXJCx3JCxrJCxEJCxUJCxxJCxBJCxSJCxHJCxCJCxZJCxqJCwkJCx0MCxlMCxyMCxaJCxuMF07Y2xhc3MgbDB7fWwwLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxsMCl9LGwwLsm1bW9kPVpvKHt0eXBlOmwwfSksbDAuybVpbmo9Y28oe2ltcG9ydHM6W1tpRl1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhsMCx7ZGVjbGFyYXRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuW2kwLFUkLFAkLFckLHckLGskLEQkLFQkLHEkLEEkLFIkLEckLEIkLFkkLGokLCQkLHQwLGUwLHIwLFokLG4wXX0saW1wb3J0czpmdW5jdGlvbigpe3JldHVybltpRl19LGV4cG9ydHM6ZnVuY3Rpb24oKXtyZXR1cm5baTAsVSQsUCQsVyQsdyQsayQsRCQsVCQscSQsQSQsUiQsRyQsQiQsWSQsaiQsJCQsdDAsZTAscjAsWiQsbjBdfX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIobDAsW3t0eXBlOmtfLGFyZ3M6W3tleHBvcnRzOnMwLGRlY2xhcmF0aW9uczpzMCxpbXBvcnRzOltpRl19XX1dLG51bGwsbnVsbCk7Y29uc3QgYzA9W1tbImNhcHRpb24iXV0sW1siY29sZ3JvdXAiXSxbImNvbCJdXV07ZnVuY3Rpb24gZDAodCxlKXtpZigxJnQmJihPdSgwLCJ0aCIsMyksTWYoMSksUHUoKSksMiZ0KXtjb25zdCB0PUx1KCk7b2YoInRleHQtYWxpZ24iLHQuanVzdGlmeSksSmMoMSkseGYoIiAiLHQuaGVhZGVyVGV4dCwiICIpfX1mdW5jdGlvbiBwMCh0LGUpe2lmKDEmdCYmKE91KDAsInRkIiw0KSxNZigxKSxQdSgpKSwyJnQpe2NvbnN0IHQ9ZS4kaW1wbGljaXQsbj1MdSgpO29mKCJ0ZXh0LWFsaWduIixuLmp1c3RpZnkpLEpjKDEpLHhmKCIgIixuLmRhdGFBY2Nlc3Nvcih0LG4ubmFtZSksIiAiKX19Y2xhc3MgbTAgZXh0ZW5kcyBpMHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5zdGlja3lDc3NDbGFzcz0ibWF0LXRhYmxlLXN0aWNreSIsdGhpcy5uZWVkc1Bvc2l0aW9uU3RpY2t5T25FbGVtZW50PSExfX1tMC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiB1MChlfHxtMCl9LG0wLsm1Y21wPVVvKHt0eXBlOm0wLHNlbGVjdG9yczpbWyJtYXQtdGFibGUiXSxbInRhYmxlIiwibWF0LXRhYmxlIiwiIl1dLGhvc3RBdHRyczpbMSwibWF0LXRhYmxlIl0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezImZSYmYWYoIm1hdC10YWJsZS1maXhlZC1sYXlvdXQiLG4uZml4ZWRMYXlvdXQpfSxleHBvcnRBczpbIm1hdFRhYmxlIl0sZmVhdHVyZXM6W2loKFt7cHJvdmlkZTpXSCx1c2VDbGFzczpCSH0se3Byb3ZpZGU6aTAsdXNlRXhpc3Rpbmc6bTB9LHtwcm92aWRlOngkLHVzZUV4aXN0aW5nOm0wfSx7cHJvdmlkZTpJJCx1c2VDbGFzczp6JH1dKSxnbV0sbmdDb250ZW50U2VsZWN0b3JzOlsiY2FwdGlvbiIsImNvbGdyb3VwLCBjb2wiXSxkZWNsczo2LHZhcnM6MCxjb25zdHM6W1siaGVhZGVyUm93T3V0bGV0IiwiIl0sWyJyb3dPdXRsZXQiLCIiXSxbIm5vRGF0YVJvd091dGxldCIsIiJdLFsiZm9vdGVyUm93T3V0bGV0IiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihWdShjMCksanUoMCksanUoMSwxKSxEdSgyLDApLER1KDMsMSksRHUoNCwyKSxEdSg1LDMpKX0sZGlyZWN0aXZlczpbdDAsJCQsbjAsZTBdLHN0eWxlczpbJ21hdC10YWJsZXtkaXNwbGF5OmJsb2NrfW1hdC1oZWFkZXItcm93e21pbi1oZWlnaHQ6NTZweH1tYXQtcm93LG1hdC1mb290ZXItcm93e21pbi1oZWlnaHQ6NDhweH1tYXQtcm93LG1hdC1oZWFkZXItcm93LG1hdC1mb290ZXItcm93e2Rpc3BsYXk6ZmxleDtib3JkZXItd2lkdGg6MDtib3JkZXItYm90dG9tLXdpZHRoOjFweDtib3JkZXItc3R5bGU6c29saWQ7YWxpZ24taXRlbXM6Y2VudGVyO2JveC1zaXppbmc6Ym9yZGVyLWJveH1tYXQtcm93OjphZnRlcixtYXQtaGVhZGVyLXJvdzo6YWZ0ZXIsbWF0LWZvb3Rlci1yb3c6OmFmdGVye2Rpc3BsYXk6aW5saW5lLWJsb2NrO21pbi1oZWlnaHQ6aW5oZXJpdDtjb250ZW50OiIifW1hdC1jZWxsOmZpcnN0LW9mLXR5cGUsbWF0LWhlYWRlci1jZWxsOmZpcnN0LW9mLXR5cGUsbWF0LWZvb3Rlci1jZWxsOmZpcnN0LW9mLXR5cGV7cGFkZGluZy1sZWZ0OjI0cHh9W2Rpcj1ydGxdIG1hdC1jZWxsOmZpcnN0LW9mLXR5cGU6bm90KDpvbmx5LW9mLXR5cGUpLFtkaXI9cnRsXSBtYXQtaGVhZGVyLWNlbGw6Zmlyc3Qtb2YtdHlwZTpub3QoOm9ubHktb2YtdHlwZSksW2Rpcj1ydGxdIG1hdC1mb290ZXItY2VsbDpmaXJzdC1vZi10eXBlOm5vdCg6b25seS1vZi10eXBlKXtwYWRkaW5nLWxlZnQ6MDtwYWRkaW5nLXJpZ2h0OjI0cHh9bWF0LWNlbGw6bGFzdC1vZi10eXBlLG1hdC1oZWFkZXItY2VsbDpsYXN0LW9mLXR5cGUsbWF0LWZvb3Rlci1jZWxsOmxhc3Qtb2YtdHlwZXtwYWRkaW5nLXJpZ2h0OjI0cHh9W2Rpcj1ydGxdIG1hdC1jZWxsOmxhc3Qtb2YtdHlwZTpub3QoOm9ubHktb2YtdHlwZSksW2Rpcj1ydGxdIG1hdC1oZWFkZXItY2VsbDpsYXN0LW9mLXR5cGU6bm90KDpvbmx5LW9mLXR5cGUpLFtkaXI9cnRsXSBtYXQtZm9vdGVyLWNlbGw6bGFzdC1vZi10eXBlOm5vdCg6b25seS1vZi10eXBlKXtwYWRkaW5nLXJpZ2h0OjA7cGFkZGluZy1sZWZ0OjI0cHh9bWF0LWNlbGwsbWF0LWhlYWRlci1jZWxsLG1hdC1mb290ZXItY2VsbHtmbGV4OjE7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtvdmVyZmxvdzpoaWRkZW47d29yZC13cmFwOmJyZWFrLXdvcmQ7bWluLWhlaWdodDppbmhlcml0fXRhYmxlLm1hdC10YWJsZXtib3JkZXItc3BhY2luZzowfXRyLm1hdC1oZWFkZXItcm93e2hlaWdodDo1NnB4fXRyLm1hdC1yb3csdHIubWF0LWZvb3Rlci1yb3d7aGVpZ2h0OjQ4cHh9dGgubWF0LWhlYWRlci1jZWxse3RleHQtYWxpZ246bGVmdH1bZGlyPXJ0bF0gdGgubWF0LWhlYWRlci1jZWxse3RleHQtYWxpZ246cmlnaHR9dGgubWF0LWhlYWRlci1jZWxsLHRkLm1hdC1jZWxsLHRkLm1hdC1mb290ZXItY2VsbHtwYWRkaW5nOjA7Ym9yZGVyLWJvdHRvbS13aWR0aDoxcHg7Ym9yZGVyLWJvdHRvbS1zdHlsZTpzb2xpZH10aC5tYXQtaGVhZGVyLWNlbGw6Zmlyc3Qtb2YtdHlwZSx0ZC5tYXQtY2VsbDpmaXJzdC1vZi10eXBlLHRkLm1hdC1mb290ZXItY2VsbDpmaXJzdC1vZi10eXBle3BhZGRpbmctbGVmdDoyNHB4fVtkaXI9cnRsXSB0aC5tYXQtaGVhZGVyLWNlbGw6Zmlyc3Qtb2YtdHlwZTpub3QoOm9ubHktb2YtdHlwZSksW2Rpcj1ydGxdIHRkLm1hdC1jZWxsOmZpcnN0LW9mLXR5cGU6bm90KDpvbmx5LW9mLXR5cGUpLFtkaXI9cnRsXSB0ZC5tYXQtZm9vdGVyLWNlbGw6Zmlyc3Qtb2YtdHlwZTpub3QoOm9ubHktb2YtdHlwZSl7cGFkZGluZy1sZWZ0OjA7cGFkZGluZy1yaWdodDoyNHB4fXRoLm1hdC1oZWFkZXItY2VsbDpsYXN0LW9mLXR5cGUsdGQubWF0LWNlbGw6bGFzdC1vZi10eXBlLHRkLm1hdC1mb290ZXItY2VsbDpsYXN0LW9mLXR5cGV7cGFkZGluZy1yaWdodDoyNHB4fVtkaXI9cnRsXSB0aC5tYXQtaGVhZGVyLWNlbGw6bGFzdC1vZi10eXBlOm5vdCg6b25seS1vZi10eXBlKSxbZGlyPXJ0bF0gdGQubWF0LWNlbGw6bGFzdC1vZi10eXBlOm5vdCg6b25seS1vZi10eXBlKSxbZGlyPXJ0bF0gdGQubWF0LWZvb3Rlci1jZWxsOmxhc3Qtb2YtdHlwZTpub3QoOm9ubHktb2YtdHlwZSl7cGFkZGluZy1yaWdodDowO3BhZGRpbmctbGVmdDoyNHB4fS5tYXQtdGFibGUtc3RpY2t5e3Bvc2l0aW9uOi13ZWJraXQtc3RpY2t5ICFpbXBvcnRhbnQ7cG9zaXRpb246c3RpY2t5ICFpbXBvcnRhbnR9Lm1hdC10YWJsZS1maXhlZC1sYXlvdXR7dGFibGUtbGF5b3V0OmZpeGVkfVxuJ10sZW5jYXBzdWxhdGlvbjoyfSk7Y29uc3QgdTA9dnIobTApOygidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIobTAsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoibWF0LXRhYmxlLCB0YWJsZVttYXQtdGFibGVdIixleHBvcnRBczoibWF0VGFibGUiLHRlbXBsYXRlOm8wLGhvc3Q6e2NsYXNzOiJtYXQtdGFibGUiLCJbY2xhc3MubWF0LXRhYmxlLWZpeGVkLWxheW91dF0iOiJmaXhlZExheW91dCJ9LHByb3ZpZGVyczpbe3Byb3ZpZGU6V0gsdXNlQ2xhc3M6Qkh9LHtwcm92aWRlOmkwLHVzZUV4aXN0aW5nOm0wfSx7cHJvdmlkZTp4JCx1c2VFeGlzdGluZzptMH0se3Byb3ZpZGU6SSQsdXNlQ2xhc3M6eiR9XSxlbmNhcHN1bGF0aW9uOlBvLk5vbmUsY2hhbmdlRGV0ZWN0aW9uOnhvLkRlZmF1bHQsc3R5bGVzOlsnbWF0LXRhYmxle2Rpc3BsYXk6YmxvY2t9bWF0LWhlYWRlci1yb3d7bWluLWhlaWdodDo1NnB4fW1hdC1yb3csbWF0LWZvb3Rlci1yb3d7bWluLWhlaWdodDo0OHB4fW1hdC1yb3csbWF0LWhlYWRlci1yb3csbWF0LWZvb3Rlci1yb3d7ZGlzcGxheTpmbGV4O2JvcmRlci13aWR0aDowO2JvcmRlci1ib3R0b20td2lkdGg6MXB4O2JvcmRlci1zdHlsZTpzb2xpZDthbGlnbi1pdGVtczpjZW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94fW1hdC1yb3c6OmFmdGVyLG1hdC1oZWFkZXItcm93OjphZnRlcixtYXQtZm9vdGVyLXJvdzo6YWZ0ZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWluLWhlaWdodDppbmhlcml0O2NvbnRlbnQ6IiJ9bWF0LWNlbGw6Zmlyc3Qtb2YtdHlwZSxtYXQtaGVhZGVyLWNlbGw6Zmlyc3Qtb2YtdHlwZSxtYXQtZm9vdGVyLWNlbGw6Zmlyc3Qtb2YtdHlwZXtwYWRkaW5nLWxlZnQ6MjRweH1bZGlyPXJ0bF0gbWF0LWNlbGw6Zmlyc3Qtb2YtdHlwZTpub3QoOm9ubHktb2YtdHlwZSksW2Rpcj1ydGxdIG1hdC1oZWFkZXItY2VsbDpmaXJzdC1vZi10eXBlOm5vdCg6b25seS1vZi10eXBlKSxbZGlyPXJ0bF0gbWF0LWZvb3Rlci1jZWxsOmZpcnN0LW9mLXR5cGU6bm90KDpvbmx5LW9mLXR5cGUpe3BhZGRpbmctbGVmdDowO3BhZGRpbmctcmlnaHQ6MjRweH1tYXQtY2VsbDpsYXN0LW9mLXR5cGUsbWF0LWhlYWRlci1jZWxsOmxhc3Qtb2YtdHlwZSxtYXQtZm9vdGVyLWNlbGw6bGFzdC1vZi10eXBle3BhZGRpbmctcmlnaHQ6MjRweH1bZGlyPXJ0bF0gbWF0LWNlbGw6bGFzdC1vZi10eXBlOm5vdCg6b25seS1vZi10eXBlKSxbZGlyPXJ0bF0gbWF0LWhlYWRlci1jZWxsOmxhc3Qtb2YtdHlwZTpub3QoOm9ubHktb2YtdHlwZSksW2Rpcj1ydGxdIG1hdC1mb290ZXItY2VsbDpsYXN0LW9mLXR5cGU6bm90KDpvbmx5LW9mLXR5cGUpe3BhZGRpbmctcmlnaHQ6MDtwYWRkaW5nLWxlZnQ6MjRweH1tYXQtY2VsbCxtYXQtaGVhZGVyLWNlbGwsbWF0LWZvb3Rlci1jZWxse2ZsZXg6MTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO292ZXJmbG93OmhpZGRlbjt3b3JkLXdyYXA6YnJlYWstd29yZDttaW4taGVpZ2h0OmluaGVyaXR9dGFibGUubWF0LXRhYmxle2JvcmRlci1zcGFjaW5nOjB9dHIubWF0LWhlYWRlci1yb3d7aGVpZ2h0OjU2cHh9dHIubWF0LXJvdyx0ci5tYXQtZm9vdGVyLXJvd3toZWlnaHQ6NDhweH10aC5tYXQtaGVhZGVyLWNlbGx7dGV4dC1hbGlnbjpsZWZ0fVtkaXI9cnRsXSB0aC5tYXQtaGVhZGVyLWNlbGx7dGV4dC1hbGlnbjpyaWdodH10aC5tYXQtaGVhZGVyLWNlbGwsdGQubWF0LWNlbGwsdGQubWF0LWZvb3Rlci1jZWxse3BhZGRpbmc6MDtib3JkZXItYm90dG9tLXdpZHRoOjFweDtib3JkZXItYm90dG9tLXN0eWxlOnNvbGlkfXRoLm1hdC1oZWFkZXItY2VsbDpmaXJzdC1vZi10eXBlLHRkLm1hdC1jZWxsOmZpcnN0LW9mLXR5cGUsdGQubWF0LWZvb3Rlci1jZWxsOmZpcnN0LW9mLXR5cGV7cGFkZGluZy1sZWZ0OjI0cHh9W2Rpcj1ydGxdIHRoLm1hdC1oZWFkZXItY2VsbDpmaXJzdC1vZi10eXBlOm5vdCg6b25seS1vZi10eXBlKSxbZGlyPXJ0bF0gdGQubWF0LWNlbGw6Zmlyc3Qtb2YtdHlwZTpub3QoOm9ubHktb2YtdHlwZSksW2Rpcj1ydGxdIHRkLm1hdC1mb290ZXItY2VsbDpmaXJzdC1vZi10eXBlOm5vdCg6b25seS1vZi10eXBlKXtwYWRkaW5nLWxlZnQ6MDtwYWRkaW5nLXJpZ2h0OjI0cHh9dGgubWF0LWhlYWRlci1jZWxsOmxhc3Qtb2YtdHlwZSx0ZC5tYXQtY2VsbDpsYXN0LW9mLXR5cGUsdGQubWF0LWZvb3Rlci1jZWxsOmxhc3Qtb2YtdHlwZXtwYWRkaW5nLXJpZ2h0OjI0cHh9W2Rpcj1ydGxdIHRoLm1hdC1oZWFkZXItY2VsbDpsYXN0LW9mLXR5cGU6bm90KDpvbmx5LW9mLXR5cGUpLFtkaXI9cnRsXSB0ZC5tYXQtY2VsbDpsYXN0LW9mLXR5cGU6bm90KDpvbmx5LW9mLXR5cGUpLFtkaXI9cnRsXSB0ZC5tYXQtZm9vdGVyLWNlbGw6bGFzdC1vZi10eXBlOm5vdCg6b25seS1vZi10eXBlKXtwYWRkaW5nLXJpZ2h0OjA7cGFkZGluZy1sZWZ0OjI0cHh9Lm1hdC10YWJsZS1zdGlja3l7cG9zaXRpb246LXdlYmtpdC1zdGlja3kgIWltcG9ydGFudDtwb3NpdGlvbjpzdGlja3kgIWltcG9ydGFudH0ubWF0LXRhYmxlLWZpeGVkLWxheW91dHt0YWJsZS1sYXlvdXQ6Zml4ZWR9XG4nXX1dfV0sbnVsbCxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIGYwIGV4dGVuZHMgUCR7fWYwLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIGcwKGV8fGYwKX0sZjAuybVkaXI9Sm8oe3R5cGU6ZjAsc2VsZWN0b3JzOltbIiIsIm1hdENlbGxEZWYiLCIiXV0sZmVhdHVyZXM6W2loKFt7cHJvdmlkZTpQJCx1c2VFeGlzdGluZzpmMH1dKSxnbV19KTtjb25zdCBnMD12cihmMCk7KCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihmMCxbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJbbWF0Q2VsbERlZl0iLHByb3ZpZGVyczpbe3Byb3ZpZGU6UCQsdXNlRXhpc3Rpbmc6ZjB9XX1dfV0sbnVsbCxudWxsKTtjbGFzcyBoMCBleHRlbmRzIHcke31oMC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBiMChlfHxoMCl9LGgwLsm1ZGlyPUpvKHt0eXBlOmgwLHNlbGVjdG9yczpbWyIiLCJtYXRIZWFkZXJDZWxsRGVmIiwiIl1dLGZlYXR1cmVzOltpaChbe3Byb3ZpZGU6dyQsdXNlRXhpc3Rpbmc6aDB9XSksZ21dfSk7Y29uc3QgYjA9dnIoaDApOygidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoaDAsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoiW21hdEhlYWRlckNlbGxEZWZdIixwcm92aWRlcnM6W3twcm92aWRlOnckLHVzZUV4aXN0aW5nOmgwfV19XX1dLG51bGwsbnVsbCk7Y2xhc3MgeTAgZXh0ZW5kcyBrJHt9eTAuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gXzAoZXx8eTApfSx5MC7JtWRpcj1Kbyh7dHlwZTp5MCxzZWxlY3RvcnM6W1siIiwibWF0Rm9vdGVyQ2VsbERlZiIsIiJdXSxmZWF0dXJlczpbaWgoW3twcm92aWRlOmskLHVzZUV4aXN0aW5nOnkwfV0pLGdtXX0pO2NvbnN0IF8wPXZyKHkwKTsoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHkwLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6IlttYXRGb290ZXJDZWxsRGVmXSIscHJvdmlkZXJzOlt7cHJvdmlkZTprJCx1c2VFeGlzdGluZzp5MH1dfV19XSxudWxsLG51bGwpO2NsYXNzIEMwIGV4dGVuZHMgRCR7Z2V0IG5hbWUoKXtyZXR1cm4gdGhpcy5fbmFtZX1zZXQgbmFtZSh0KXt0aGlzLl9zZXROYW1lSW5wdXQodCl9X3VwZGF0ZUNvbHVtbkNzc0NsYXNzTmFtZSgpe3N1cGVyLl91cGRhdGVDb2x1bW5Dc3NDbGFzc05hbWUoKSx0aGlzLl9jb2x1bW5Dc3NDbGFzc05hbWUucHVzaChgbWF0LWNvbHVtbi0ke3RoaXMuY3NzQ2xhc3NGcmllbmRseU5hbWV9YCl9fUMwLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIE0wKGV8fEMwKX0sQzAuybVkaXI9Sm8oe3R5cGU6QzAsc2VsZWN0b3JzOltbIiIsIm1hdENvbHVtbkRlZiIsIiJdXSxpbnB1dHM6e3N0aWNreToic3RpY2t5IixuYW1lOlsibWF0Q29sdW1uRGVmIiwibmFtZSJdfSxmZWF0dXJlczpbaWgoW3twcm92aWRlOkQkLHVzZUV4aXN0aW5nOkMwfSx7cHJvdmlkZToiTUFUX1NPUlRfSEVBREVSX0NPTFVNTl9ERUYiLHVzZUV4aXN0aW5nOkMwfV0pLGdtXX0pLEMwLnByb3BEZWNvcmF0b3JzPXtuYW1lOlt7dHlwZTp5XyxhcmdzOlsibWF0Q29sdW1uRGVmIl19XX07Y29uc3QgTTA9dnIoQzApOygidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoQzAsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoiW21hdENvbHVtbkRlZl0iLGlucHV0czpbInN0aWNreSJdLHByb3ZpZGVyczpbe3Byb3ZpZGU6RCQsdXNlRXhpc3Rpbmc6QzB9LHtwcm92aWRlOiJNQVRfU09SVF9IRUFERVJfQ09MVU1OX0RFRiIsdXNlRXhpc3Rpbmc6QzB9XX1dfV0sbnVsbCx7bmFtZTpbe3R5cGU6eV8sYXJnczpbIm1hdENvbHVtbkRlZiJdfV19KTtjbGFzcyB2MCBleHRlbmRzIEEke312MC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiB4MChlfHx2MCl9LHYwLsm1ZGlyPUpvKHt0eXBlOnYwLHNlbGVjdG9yczpbWyJtYXQtaGVhZGVyLWNlbGwiXSxbInRoIiwibWF0LWhlYWRlci1jZWxsIiwiIl1dLGhvc3RBdHRyczpbInJvbGUiLCJjb2x1bW5oZWFkZXIiLDEsIm1hdC1oZWFkZXItY2VsbCJdLGZlYXR1cmVzOltnbV19KTtjb25zdCB4MD12cih2MCk7KCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYih2MCxbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJtYXQtaGVhZGVyLWNlbGwsIHRoW21hdC1oZWFkZXItY2VsbF0iLGhvc3Q6e2NsYXNzOiJtYXQtaGVhZGVyLWNlbGwiLHJvbGU6ImNvbHVtbmhlYWRlciJ9fV19XSxudWxsLG51bGwpO2NsYXNzIE8wIGV4dGVuZHMgUiR7fU8wLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIFAwKGV8fE8wKX0sTzAuybVkaXI9Sm8oe3R5cGU6TzAsc2VsZWN0b3JzOltbIm1hdC1mb290ZXItY2VsbCJdLFsidGQiLCJtYXQtZm9vdGVyLWNlbGwiLCIiXV0saG9zdEF0dHJzOlsicm9sZSIsImdyaWRjZWxsIiwxLCJtYXQtZm9vdGVyLWNlbGwiXSxmZWF0dXJlczpbZ21dfSk7Y29uc3QgUDA9dnIoTzApOygidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoTzAsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoibWF0LWZvb3Rlci1jZWxsLCB0ZFttYXQtZm9vdGVyLWNlbGxdIixob3N0OntjbGFzczoibWF0LWZvb3Rlci1jZWxsIixyb2xlOiJncmlkY2VsbCJ9fV19XSxudWxsLG51bGwpO2NsYXNzIHcwIGV4dGVuZHMgVCR7fXcwLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIGswKGV8fHcwKX0sdzAuybVkaXI9Sm8oe3R5cGU6dzAsc2VsZWN0b3JzOltbIm1hdC1jZWxsIl0sWyJ0ZCIsIm1hdC1jZWxsIiwiIl1dLGhvc3RBdHRyczpbInJvbGUiLCJncmlkY2VsbCIsMSwibWF0LWNlbGwiXSxmZWF0dXJlczpbZ21dfSk7Y29uc3QgazA9dnIodzApOygidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIodzAsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoibWF0LWNlbGwsIHRkW21hdC1jZWxsXSIsaG9zdDp7Y2xhc3M6Im1hdC1jZWxsIixyb2xlOiJncmlkY2VsbCJ9fV19XSxudWxsLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3MgUzAgZXh0ZW5kcyBCJHt9UzAuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gRDAoZXx8UzApfSxTMC7JtWRpcj1Kbyh7dHlwZTpTMCxzZWxlY3RvcnM6W1siIiwibWF0SGVhZGVyUm93RGVmIiwiIl1dLGlucHV0czp7Y29sdW1uczpbIm1hdEhlYWRlclJvd0RlZiIsImNvbHVtbnMiXSxzdGlja3k6WyJtYXRIZWFkZXJSb3dEZWZTdGlja3kiLCJzdGlja3kiXX0sZmVhdHVyZXM6W2loKFt7cHJvdmlkZTpCJCx1c2VFeGlzdGluZzpTMH1dKSxnbV19KTtjb25zdCBEMD12cihTMCk7KCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihTMCxbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJbbWF0SGVhZGVyUm93RGVmXSIscHJvdmlkZXJzOlt7cHJvdmlkZTpCJCx1c2VFeGlzdGluZzpTMH1dLGlucHV0czpbImNvbHVtbnM6IG1hdEhlYWRlclJvd0RlZiIsInN0aWNreTogbWF0SGVhZGVyUm93RGVmU3RpY2t5Il19XX1dLG51bGwsbnVsbCk7Y2xhc3MgRTAgZXh0ZW5kcyBqJHt9RTAuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gQTAoZXx8RTApfSxFMC7JtWRpcj1Kbyh7dHlwZTpFMCxzZWxlY3RvcnM6W1siIiwibWF0Rm9vdGVyUm93RGVmIiwiIl1dLGlucHV0czp7Y29sdW1uczpbIm1hdEZvb3RlclJvd0RlZiIsImNvbHVtbnMiXSxzdGlja3k6WyJtYXRGb290ZXJSb3dEZWZTdGlja3kiLCJzdGlja3kiXX0sZmVhdHVyZXM6W2loKFt7cHJvdmlkZTpqJCx1c2VFeGlzdGluZzpFMH1dKSxnbV19KTtjb25zdCBBMD12cihFMCk7KCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihFMCxbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJbbWF0Rm9vdGVyUm93RGVmXSIscHJvdmlkZXJzOlt7cHJvdmlkZTpqJCx1c2VFeGlzdGluZzpFMH1dLGlucHV0czpbImNvbHVtbnM6IG1hdEZvb3RlclJvd0RlZiIsInN0aWNreTogbWF0Rm9vdGVyUm93RGVmU3RpY2t5Il19XX1dLG51bGwsbnVsbCk7Y2xhc3MgUjAgZXh0ZW5kcyBVJHt9UjAuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gVDAoZXx8UjApfSxSMC7JtWRpcj1Kbyh7dHlwZTpSMCxzZWxlY3RvcnM6W1siIiwibWF0Um93RGVmIiwiIl1dLGlucHV0czp7Y29sdW1uczpbIm1hdFJvd0RlZkNvbHVtbnMiLCJjb2x1bW5zIl0sd2hlbjpbIm1hdFJvd0RlZldoZW4iLCJ3aGVuIl19LGZlYXR1cmVzOltpaChbe3Byb3ZpZGU6VSQsdXNlRXhpc3Rpbmc6UjB9XSksZ21dfSk7Y29uc3QgVDA9dnIoUjApOygidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoUjAsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoiW21hdFJvd0RlZl0iLHByb3ZpZGVyczpbe3Byb3ZpZGU6VSQsdXNlRXhpc3Rpbmc6UjB9XSxpbnB1dHM6WyJjb2x1bW5zOiBtYXRSb3dEZWZDb2x1bW5zIiwid2hlbjogbWF0Um93RGVmV2hlbiJdfV19XSxudWxsLG51bGwpO2NsYXNzIE4wIGV4dGVuZHMgRyR7fU4wLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIEkwKGV8fE4wKX0sTjAuybVjbXA9VW8oe3R5cGU6TjAsc2VsZWN0b3JzOltbIm1hdC1oZWFkZXItcm93Il0sWyJ0ciIsIm1hdC1oZWFkZXItcm93IiwiIl1dLGhvc3RBdHRyczpbInJvbGUiLCJyb3ciLDEsIm1hdC1oZWFkZXItcm93Il0sZXhwb3J0QXM6WyJtYXRIZWFkZXJSb3ciXSxmZWF0dXJlczpbaWgoW3twcm92aWRlOkckLHVzZUV4aXN0aW5nOk4wfV0pLGdtXSxkZWNsczoxLHZhcnM6MCxjb25zdHM6W1siY2RrQ2VsbE91dGxldCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiZEdSgwLDApfSxkaXJlY3RpdmVzOltXJF0sZW5jYXBzdWxhdGlvbjoyfSk7Y29uc3QgSTA9dnIoTjApOygidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoTjAsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoibWF0LWhlYWRlci1yb3csIHRyW21hdC1oZWFkZXItcm93XSIsdGVtcGxhdGU6SCQsaG9zdDp7Y2xhc3M6Im1hdC1oZWFkZXItcm93Iixyb2xlOiJyb3cifSxjaGFuZ2VEZXRlY3Rpb246eG8uRGVmYXVsdCxlbmNhcHN1bGF0aW9uOlBvLk5vbmUsZXhwb3J0QXM6Im1hdEhlYWRlclJvdyIscHJvdmlkZXJzOlt7cHJvdmlkZTpHJCx1c2VFeGlzdGluZzpOMH1dfV19XSxudWxsLG51bGwpO2NsYXNzIHowIGV4dGVuZHMgWSR7fXowLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIEgwKGV8fHowKX0sejAuybVjbXA9VW8oe3R5cGU6ejAsc2VsZWN0b3JzOltbIm1hdC1mb290ZXItcm93Il0sWyJ0ciIsIm1hdC1mb290ZXItcm93IiwiIl1dLGhvc3RBdHRyczpbInJvbGUiLCJyb3ciLDEsIm1hdC1mb290ZXItcm93Il0sZXhwb3J0QXM6WyJtYXRGb290ZXJSb3ciXSxmZWF0dXJlczpbaWgoW3twcm92aWRlOlkkLHVzZUV4aXN0aW5nOnowfV0pLGdtXSxkZWNsczoxLHZhcnM6MCxjb25zdHM6W1siY2RrQ2VsbE91dGxldCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiZEdSgwLDApfSxkaXJlY3RpdmVzOltXJF0sZW5jYXBzdWxhdGlvbjoyfSk7Y29uc3QgSDA9dnIoejApOygidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoejAsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoibWF0LWZvb3Rlci1yb3csIHRyW21hdC1mb290ZXItcm93XSIsdGVtcGxhdGU6SCQsaG9zdDp7Y2xhc3M6Im1hdC1mb290ZXItcm93Iixyb2xlOiJyb3cifSxjaGFuZ2VEZXRlY3Rpb246eG8uRGVmYXVsdCxlbmNhcHN1bGF0aW9uOlBvLk5vbmUsZXhwb3J0QXM6Im1hdEZvb3RlclJvdyIscHJvdmlkZXJzOlt7cHJvdmlkZTpZJCx1c2VFeGlzdGluZzp6MH1dfV19XSxudWxsLG51bGwpO2NsYXNzIEYwIGV4dGVuZHMgcSR7fUYwLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIEwwKGV8fEYwKX0sRjAuybVjbXA9VW8oe3R5cGU6RjAsc2VsZWN0b3JzOltbIm1hdC1yb3ciXSxbInRyIiwibWF0LXJvdyIsIiJdXSxob3N0QXR0cnM6WyJyb2xlIiwicm93IiwxLCJtYXQtcm93Il0sZXhwb3J0QXM6WyJtYXRSb3ciXSxmZWF0dXJlczpbaWgoW3twcm92aWRlOnEkLHVzZUV4aXN0aW5nOkYwfV0pLGdtXSxkZWNsczoxLHZhcnM6MCxjb25zdHM6W1siY2RrQ2VsbE91dGxldCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiZEdSgwLDApfSxkaXJlY3RpdmVzOltXJF0sZW5jYXBzdWxhdGlvbjoyfSk7Y29uc3QgTDA9dnIoRjApOygidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoRjAsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoibWF0LXJvdywgdHJbbWF0LXJvd10iLHRlbXBsYXRlOkgkLGhvc3Q6e2NsYXNzOiJtYXQtcm93Iixyb2xlOiJyb3cifSxjaGFuZ2VEZXRlY3Rpb246eG8uRGVmYXVsdCxlbmNhcHN1bGF0aW9uOlBvLk5vbmUsZXhwb3J0QXM6Im1hdFJvdyIscHJvdmlkZXJzOlt7cHJvdmlkZTpxJCx1c2VFeGlzdGluZzpGMH1dfV19XSxudWxsLG51bGwpO2NsYXNzIEIwIGV4dGVuZHMgWiR7fUIwLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIFYwKGV8fEIwKX0sQjAuybVkaXI9Sm8oe3R5cGU6QjAsc2VsZWN0b3JzOltbIm5nLXRlbXBsYXRlIiwibWF0Tm9EYXRhUm93IiwiIl1dLGZlYXR1cmVzOltpaChbe3Byb3ZpZGU6WiQsdXNlRXhpc3Rpbmc6QjB9XSksZ21dfSk7Y29uc3QgVjA9dnIoQjApOygidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoQjAsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoibmctdGVtcGxhdGVbbWF0Tm9EYXRhUm93XSIscHJvdmlkZXJzOlt7cHJvdmlkZTpaJCx1c2VFeGlzdGluZzpCMH1dfV19XSxudWxsLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3MgajAgZXh0ZW5kcyByMHt9ajAuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gVTAoZXx8ajApfSxqMC7JtWNtcD1Vbyh7dHlwZTpqMCxzZWxlY3RvcnM6W1sibWF0LXRleHQtY29sdW1uIl1dLGZlYXR1cmVzOltnbV0sZGVjbHM6Myx2YXJzOjAsY29uc3RzOltbIm1hdENvbHVtbkRlZiIsIiJdLFsibWF0LWhlYWRlci1jZWxsIiwiIiwzLCJ0ZXh0LWFsaWduIiw0LCJtYXRIZWFkZXJDZWxsRGVmIl0sWyJtYXQtY2VsbCIsIiIsMywidGV4dC1hbGlnbiIsNCwibWF0Q2VsbERlZiJdLFsibWF0LWhlYWRlci1jZWxsIiwiIl0sWyJtYXQtY2VsbCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoa3UoMCwwKSxXbSgxLGQwLDIsMywidGgiLDEpLFdtKDIscDAsMiwzLCJ0ZCIsMiksU3UoKSl9LGRpcmVjdGl2ZXM6W0MwLGgwLGYwLHYwLHcwXSxlbmNhcHN1bGF0aW9uOjJ9KTtjb25zdCBVMD12cihqMCk7KCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihqMCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJtYXQtdGV4dC1jb2x1bW4iLHRlbXBsYXRlOidcbiAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj5cbiAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgW3N0eWxlLnRleHQtYWxpZ25dPSJqdXN0aWZ5Ij5cbiAgICAgICAge3toZWFkZXJUZXh0fX1cbiAgICAgIDwvdGg+XG4gICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBkYXRhIiBbc3R5bGUudGV4dC1hbGlnbl09Imp1c3RpZnkiPlxuICAgICAgICB7e2RhdGFBY2Nlc3NvcihkYXRhLCBuYW1lKX19XG4gICAgICA8L3RkPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAnLGVuY2Fwc3VsYXRpb246UG8uTm9uZSxjaGFuZ2VEZXRlY3Rpb246eG8uRGVmYXVsdH1dfV0sbnVsbCxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IFcwPVttMCxoMCxTMCxDMCxmMCxSMCx5MCxFMCx2MCx3MCxPMCxOMCxGMCx6MCxCMCxqMF07Y2xhc3MgRzB7fUcwLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxHMCl9LEcwLsm1bW9kPVpvKHt0eXBlOkcwfSksRzAuybVpbmo9Y28oe2ltcG9ydHM6W1tsMCxUel0sVHpdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhHMCx7ZGVjbGFyYXRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuW20wLGgwLFMwLEMwLGYwLFIwLHkwLEUwLHYwLHcwLE8wLE4wLEYwLHowLEIwLGowXX0saW1wb3J0czpmdW5jdGlvbigpe3JldHVybltsMCxUel19LGV4cG9ydHM6ZnVuY3Rpb24oKXtyZXR1cm5bVHosbTAsaDAsUzAsQzAsZjAsUjAseTAsRTAsdjAsdzAsTzAsTjAsRjAsejAsQjAsajBdfX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoRzAsW3t0eXBlOmtfLGFyZ3M6W3tpbXBvcnRzOltsMCxUel0sZXhwb3J0czpbVHosVzBdLGRlY2xhcmF0aW9uczpXMH1dfV0sbnVsbCxudWxsKTtjbGFzcyBZMCBleHRlbmRzIEhIe2NvbnN0cnVjdG9yKHQ9W10pe3N1cGVyKCksdGhpcy5fcmVuZGVyRGF0YT1uZXcgSChbXSksdGhpcy5fZmlsdGVyPW5ldyBIKCIiKSx0aGlzLl9pbnRlcm5hbFBhZ2VDaGFuZ2VzPW5ldyB4LHRoaXMuX3JlbmRlckNoYW5nZXNTdWJzY3JpcHRpb249bnVsbCx0aGlzLnNvcnRpbmdEYXRhQWNjZXNzb3I9KHQsZSk9Pntjb25zdCBuPXRbZV07aWYobEkobikpe2NvbnN0IHQ9TnVtYmVyKG4pO3JldHVybiB0PDkwMDcxOTkyNTQ3NDA5OTE/dDpufXJldHVybiBufSx0aGlzLnNvcnREYXRhPSh0LGUpPT57Y29uc3Qgbj1lLmFjdGl2ZSxvPWUuZGlyZWN0aW9uO3JldHVybiBuJiYiIiE9bz90LnNvcnQoKCh0LGUpPT57bGV0IGk9dGhpcy5zb3J0aW5nRGF0YUFjY2Vzc29yKHQsbiksYT10aGlzLnNvcnRpbmdEYXRhQWNjZXNzb3IoZSxuKTtjb25zdCByPXR5cGVvZiBpLHM9dHlwZW9mIGE7ciE9PXMmJigibnVtYmVyIj09PXImJihpKz0iIiksIm51bWJlciI9PT1zJiYoYSs9IiIpKTtsZXQgbD0wO3JldHVybiBudWxsIT1pJiZudWxsIT1hP2k+YT9sPTE6aTxhJiYobD0tMSk6bnVsbCE9aT9sPTE6bnVsbCE9YSYmKGw9LTEpLGwqKCJhc2MiPT1vPzE6LTEpfSkpOnR9LHRoaXMuZmlsdGVyUHJlZGljYXRlPSh0LGUpPT57Y29uc3Qgbj1PYmplY3Qua2V5cyh0KS5yZWR1Y2UoKChlLG4pPT5lK3Rbbl0rIuKXrCIpLCIiKS50b0xvd2VyQ2FzZSgpLG89ZS50cmltKCkudG9Mb3dlckNhc2UoKTtyZXR1cm4tMSE9bi5pbmRleE9mKG8pfSx0aGlzLl9kYXRhPW5ldyBIKHQpLHRoaXMuX3VwZGF0ZUNoYW5nZVN1YnNjcmlwdGlvbigpfWdldCBkYXRhKCl7cmV0dXJuIHRoaXMuX2RhdGEudmFsdWV9c2V0IGRhdGEodCl7dGhpcy5fZGF0YS5uZXh0KHQpLHRoaXMuX3JlbmRlckNoYW5nZXNTdWJzY3JpcHRpb258fHRoaXMuX2ZpbHRlckRhdGEodCl9Z2V0IGZpbHRlcigpe3JldHVybiB0aGlzLl9maWx0ZXIudmFsdWV9c2V0IGZpbHRlcih0KXt0aGlzLl9maWx0ZXIubmV4dCh0KSx0aGlzLl9yZW5kZXJDaGFuZ2VzU3Vic2NyaXB0aW9ufHx0aGlzLl9maWx0ZXJEYXRhKHRoaXMuZGF0YSl9Z2V0IHNvcnQoKXtyZXR1cm4gdGhpcy5fc29ydH1zZXQgc29ydCh0KXt0aGlzLl9zb3J0PXQsdGhpcy5fdXBkYXRlQ2hhbmdlU3Vic2NyaXB0aW9uKCl9Z2V0IHBhZ2luYXRvcigpe3JldHVybiB0aGlzLl9wYWdpbmF0b3J9c2V0IHBhZ2luYXRvcih0KXt0aGlzLl9wYWdpbmF0b3I9dCx0aGlzLl91cGRhdGVDaGFuZ2VTdWJzY3JpcHRpb24oKX1fdXBkYXRlQ2hhbmdlU3Vic2NyaXB0aW9uKCl7dmFyIHQ7Y29uc3QgZT10aGlzLl9zb3J0P1d0KHRoaXMuX3NvcnQuc29ydENoYW5nZSx0aGlzLl9zb3J0LmluaXRpYWxpemVkKTpaKG51bGwpLG49dGhpcy5fcGFnaW5hdG9yP1d0KHRoaXMuX3BhZ2luYXRvci5wYWdlLHRoaXMuX2ludGVybmFsUGFnZUNoYW5nZXMsdGhpcy5fcGFnaW5hdG9yLmluaXRpYWxpemVkKTpaKG51bGwpLG89RHQoW3RoaXMuX2RhdGEsdGhpcy5fZmlsdGVyXSkucGlwZShodCgoKFt0XSk9PnRoaXMuX2ZpbHRlckRhdGEodCkpKSksaT1EdChbbyxlXSkucGlwZShodCgoKFt0XSk9PnRoaXMuX29yZGVyRGF0YSh0KSkpKSxhPUR0KFtpLG5dKS5waXBlKGh0KCgoW3RdKT0+dGhpcy5fcGFnZURhdGEodCkpKSk7bnVsbD09PSh0PXRoaXMuX3JlbmRlckNoYW5nZXNTdWJzY3JpcHRpb24pfHx2b2lkIDA9PT10fHx0LnVuc3Vic2NyaWJlKCksdGhpcy5fcmVuZGVyQ2hhbmdlc1N1YnNjcmlwdGlvbj1hLnN1YnNjcmliZSgodD0+dGhpcy5fcmVuZGVyRGF0YS5uZXh0KHQpKSl9X2ZpbHRlckRhdGEodCl7cmV0dXJuIHRoaXMuZmlsdGVyZWREYXRhPW51bGw9PXRoaXMuZmlsdGVyfHwiIj09PXRoaXMuZmlsdGVyP3Q6dC5maWx0ZXIoKHQ9PnRoaXMuZmlsdGVyUHJlZGljYXRlKHQsdGhpcy5maWx0ZXIpKSksdGhpcy5wYWdpbmF0b3ImJnRoaXMuX3VwZGF0ZVBhZ2luYXRvcih0aGlzLmZpbHRlcmVkRGF0YS5sZW5ndGgpLHRoaXMuZmlsdGVyZWREYXRhfV9vcmRlckRhdGEodCl7cmV0dXJuIHRoaXMuc29ydD90aGlzLnNvcnREYXRhKHQuc2xpY2UoKSx0aGlzLnNvcnQpOnR9X3BhZ2VEYXRhKHQpe2lmKCF0aGlzLnBhZ2luYXRvcilyZXR1cm4gdDtjb25zdCBlPXRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCp0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZTtyZXR1cm4gdC5zbGljZShlLGUrdGhpcy5wYWdpbmF0b3IucGFnZVNpemUpfV91cGRhdGVQYWdpbmF0b3IodCl7UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKCk9Pntjb25zdCBlPXRoaXMucGFnaW5hdG9yO2lmKGUmJihlLmxlbmd0aD10LGUucGFnZUluZGV4PjApKXtjb25zdCB0PU1hdGguY2VpbChlLmxlbmd0aC9lLnBhZ2VTaXplKS0xfHwwLG49TWF0aC5taW4oZS5wYWdlSW5kZXgsdCk7biE9PWUucGFnZUluZGV4JiYoZS5wYWdlSW5kZXg9bix0aGlzLl9pbnRlcm5hbFBhZ2VDaGFuZ2VzLm5leHQoKSl9fSkpfWNvbm5lY3QoKXtyZXR1cm4gdGhpcy5fcmVuZGVyQ2hhbmdlc1N1YnNjcmlwdGlvbnx8dGhpcy5fdXBkYXRlQ2hhbmdlU3Vic2NyaXB0aW9uKCksdGhpcy5fcmVuZGVyRGF0YX1kaXNjb25uZWN0KCl7dmFyIHQ7bnVsbD09PSh0PXRoaXMuX3JlbmRlckNoYW5nZXNTdWJzY3JpcHRpb24pfHx2b2lkIDA9PT10fHx0LnVuc3Vic2NyaWJlKCksdGhpcy5fcmVuZGVyQ2hhbmdlc1N1YnNjcmlwdGlvbj1udWxsfX1jbGFzcyBxMCBleHRlbmRzIFkwe31jb25zdCBaMD1bInBhbmVsIl07ZnVuY3Rpb24gWDAodCxlKXtpZigxJnQmJihPdSgwLCJkaXYiLDAsMSksanUoMiksUHUoKSksMiZ0KXtjb25zdCB0PWUuaWQsbj1MdSgpO3Z1KCJpZCIsbi5pZCkoIm5nQ2xhc3MiLG4uX2NsYXNzTGlzdCksTm0oImFyaWEtbGFiZWwiLG4uYXJpYUxhYmVsfHxudWxsKSgiYXJpYS1sYWJlbGxlZGJ5IixuLl9nZXRQYW5lbEFyaWFMYWJlbGxlZGJ5KHQpKX19bGV0IEswPTA7Y2xhc3MgSjB7Y29uc3RydWN0b3IodCxlKXt0aGlzLnNvdXJjZT10LHRoaXMub3B0aW9uPWV9fWNvbnN0IFEwPXp6KGNsYXNze30pLCQwPW5ldyBOcigibWF0LWF1dG9jb21wbGV0ZS1kZWZhdWx0LW9wdGlvbnMiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uIHQxKCl7cmV0dXJue2F1dG9BY3RpdmVGaXJzdE9wdGlvbjohMX19fSk7Y2xhc3MgZTEgZXh0ZW5kcyBRMHtjb25zdHJ1Y3Rvcih0LGUsbixvKXtzdXBlcigpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPXQsdGhpcy5fZWxlbWVudFJlZj1lLHRoaXMuX2FjdGl2ZU9wdGlvbkNoYW5nZXM9bC5FTVBUWSx0aGlzLnNob3dQYW5lbD0hMSx0aGlzLl9pc09wZW49ITEsdGhpcy5kaXNwbGF5V2l0aD1udWxsLHRoaXMub3B0aW9uU2VsZWN0ZWQ9bmV3IEFiLHRoaXMub3BlbmVkPW5ldyBBYix0aGlzLmNsb3NlZD1uZXcgQWIsdGhpcy5vcHRpb25BY3RpdmF0ZWQ9bmV3IEFiLHRoaXMuX2NsYXNzTGlzdD17fSx0aGlzLmlkPSJtYXQtYXV0b2NvbXBsZXRlLSIrSzArKyx0aGlzLmluZXJ0R3JvdXBzPShudWxsPT1vP3ZvaWQgMDpvLlNBRkFSSSl8fCExLHRoaXMuX2F1dG9BY3RpdmVGaXJzdE9wdGlvbj0hIW4uYXV0b0FjdGl2ZUZpcnN0T3B0aW9ufWdldCBpc09wZW4oKXtyZXR1cm4gdGhpcy5faXNPcGVuJiZ0aGlzLnNob3dQYW5lbH1nZXQgYXV0b0FjdGl2ZUZpcnN0T3B0aW9uKCl7cmV0dXJuIHRoaXMuX2F1dG9BY3RpdmVGaXJzdE9wdGlvbn1zZXQgYXV0b0FjdGl2ZUZpcnN0T3B0aW9uKHQpe3RoaXMuX2F1dG9BY3RpdmVGaXJzdE9wdGlvbj1ySSh0KX1zZXQgY2xhc3NMaXN0KHQpe3RoaXMuX2NsYXNzTGlzdD10JiZ0Lmxlbmd0aD8oZnVuY3Rpb24gZSh0LG49L1xzKy8pe2NvbnN0IG89W107aWYobnVsbCE9dCl7Y29uc3QgZT1BcnJheS5pc0FycmF5KHQpP3Q6YCR7dH1gLnNwbGl0KG4pO2Zvcihjb25zdCB0IG9mIGUpe2NvbnN0IGU9YCR7dH1gLnRyaW0oKTtlJiZvLnB1c2goZSl9fXJldHVybiBvfSkodCkucmVkdWNlKCgodCxlKT0+KHRbZV09ITAsdCkpLHt9KTp7fSx0aGlzLl9zZXRWaXNpYmlsaXR5Q2xhc3Nlcyh0aGlzLl9jbGFzc0xpc3QpLHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc05hbWU9IiJ9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5fa2V5TWFuYWdlcj1uZXcgQkkodGhpcy5vcHRpb25zKS53aXRoV3JhcCgpLHRoaXMuX2FjdGl2ZU9wdGlvbkNoYW5nZXM9dGhpcy5fa2V5TWFuYWdlci5jaGFuZ2Uuc3Vic2NyaWJlKCh0PT57dGhpcy5vcHRpb25BY3RpdmF0ZWQuZW1pdCh7c291cmNlOnRoaXMsb3B0aW9uOnRoaXMub3B0aW9ucy50b0FycmF5KClbdF18fG51bGx9KX0pKSx0aGlzLl9zZXRWaXNpYmlsaXR5KCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9hY3RpdmVPcHRpb25DaGFuZ2VzLnVuc3Vic2NyaWJlKCl9X3NldFNjcm9sbFRvcCh0KXt0aGlzLnBhbmVsJiYodGhpcy5wYW5lbC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcD10KX1fZ2V0U2Nyb2xsVG9wKCl7cmV0dXJuIHRoaXMucGFuZWw/dGhpcy5wYW5lbC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcDowfV9zZXRWaXNpYmlsaXR5KCl7dGhpcy5zaG93UGFuZWw9ISF0aGlzLm9wdGlvbnMubGVuZ3RoLHRoaXMuX3NldFZpc2liaWxpdHlDbGFzc2VzKHRoaXMuX2NsYXNzTGlzdCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9X2VtaXRTZWxlY3RFdmVudCh0KXtjb25zdCBlPW5ldyBKMCh0aGlzLHQpO3RoaXMub3B0aW9uU2VsZWN0ZWQuZW1pdChlKX1fZ2V0UGFuZWxBcmlhTGFiZWxsZWRieSh0KXtyZXR1cm4gdGhpcy5hcmlhTGFiZWw/bnVsbDp0aGlzLmFyaWFMYWJlbGxlZGJ5Pyh0P3QrIiAiOiIiKSt0aGlzLmFyaWFMYWJlbGxlZGJ5OnR9X3NldFZpc2liaWxpdHlDbGFzc2VzKHQpe3RbdGhpcy5fdmlzaWJsZUNsYXNzXT10aGlzLnNob3dQYW5lbCx0W3RoaXMuX2hpZGRlbkNsYXNzXT0hdGhpcy5zaG93UGFuZWx9fWUxLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxlMSkoTXUoSGgpLE11KGNoKSxNdSgkMCksTXUoZkkpKX0sZTEuybVkaXI9Sm8oe3R5cGU6ZTEsdmlld1F1ZXJ5OmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJihXYihVaCwzKSxXYihaMCwxKSksMiZlKXtsZXQgdDtVYih0PVliKCkpJiYobi50ZW1wbGF0ZT10LmZpcnN0KSxVYih0PVliKCkpJiYobi5wYW5lbD10LmZpcnN0KX19LGlucHV0czp7ZGlzcGxheVdpdGg6ImRpc3BsYXlXaXRoIixhdXRvQWN0aXZlRmlyc3RPcHRpb246ImF1dG9BY3RpdmVGaXJzdE9wdGlvbiIsY2xhc3NMaXN0OlsiY2xhc3MiLCJjbGFzc0xpc3QiXSxhcmlhTGFiZWw6WyJhcmlhLWxhYmVsIiwiYXJpYUxhYmVsIl0sYXJpYUxhYmVsbGVkYnk6WyJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhTGFiZWxsZWRieSJdLHBhbmVsV2lkdGg6InBhbmVsV2lkdGgifSxvdXRwdXRzOntvcHRpb25TZWxlY3RlZDoib3B0aW9uU2VsZWN0ZWQiLG9wZW5lZDoib3BlbmVkIixjbG9zZWQ6ImNsb3NlZCIsb3B0aW9uQWN0aXZhdGVkOiJvcHRpb25BY3RpdmF0ZWQifSxmZWF0dXJlczpbZ21dfSksZTEuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpIaH0se3R5cGU6Y2h9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOlskMF19XX0se3R5cGU6Zkl9XSxlMS5wcm9wRGVjb3JhdG9ycz17dGVtcGxhdGU6W3t0eXBlOkZyLGFyZ3M6W1VoLHtzdGF0aWM6ITB9XX1dLHBhbmVsOlt7dHlwZTpGcixhcmdzOlsicGFuZWwiXX1dLGFyaWFMYWJlbDpbe3R5cGU6eV8sYXJnczpbImFyaWEtbGFiZWwiXX1dLGFyaWFMYWJlbGxlZGJ5Olt7dHlwZTp5XyxhcmdzOlsiYXJpYS1sYWJlbGxlZGJ5Il19XSxkaXNwbGF5V2l0aDpbe3R5cGU6eV99XSxhdXRvQWN0aXZlRmlyc3RPcHRpb246W3t0eXBlOnlffV0scGFuZWxXaWR0aDpbe3R5cGU6eV99XSxvcHRpb25TZWxlY3RlZDpbe3R5cGU6X199XSxvcGVuZWQ6W3t0eXBlOl9ffV0sY2xvc2VkOlt7dHlwZTpfX31dLG9wdGlvbkFjdGl2YXRlZDpbe3R5cGU6X199XSxjbGFzc0xpc3Q6W3t0eXBlOnlfLGFyZ3M6WyJjbGFzcyJdfV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoZTEsW3t0eXBlOmdffV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkhofSx7dHlwZTpjaH0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnlzLGFyZ3M6WyQwXX1dfSx7dHlwZTpmSX1dfSkse2Rpc3BsYXlXaXRoOlt7dHlwZTp5X31dLG9wdGlvblNlbGVjdGVkOlt7dHlwZTpfX31dLG9wZW5lZDpbe3R5cGU6X199XSxjbG9zZWQ6W3t0eXBlOl9ffV0sb3B0aW9uQWN0aXZhdGVkOlt7dHlwZTpfX31dLGF1dG9BY3RpdmVGaXJzdE9wdGlvbjpbe3R5cGU6eV99XSxjbGFzc0xpc3Q6W3t0eXBlOnlfLGFyZ3M6WyJjbGFzcyJdfV0sdGVtcGxhdGU6W3t0eXBlOkZyLGFyZ3M6W1VoLHtzdGF0aWM6ITB9XX1dLHBhbmVsOlt7dHlwZTpGcixhcmdzOlsicGFuZWwiXX1dLGFyaWFMYWJlbDpbe3R5cGU6eV8sYXJnczpbImFyaWEtbGFiZWwiXX1dLGFyaWFMYWJlbGxlZGJ5Olt7dHlwZTp5XyxhcmdzOlsiYXJpYS1sYWJlbGxlZGJ5Il19XSxwYW5lbFdpZHRoOlt7dHlwZTp5X31dfSk7Y2xhc3MgbjEgZXh0ZW5kcyBlMXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fdmlzaWJsZUNsYXNzPSJtYXQtYXV0b2NvbXBsZXRlLXZpc2libGUiLHRoaXMuX2hpZGRlbkNsYXNzPSJtYXQtYXV0b2NvbXBsZXRlLWhpZGRlbiJ9fW4xLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG8xKGV8fG4xKX0sbjEuybVjbXA9VW8oe3R5cGU6bjEsc2VsZWN0b3JzOltbIm1hdC1hdXRvY29tcGxldGUiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24gdChlLG4sbyl7aWYoMSZlJiYoR2IobyxfSCwxKSxHYihvLFBILDEpKSwyJmUpe2xldCB0O1ViKHQ9WWIoKSkmJihuLm9wdGlvbkdyb3Vwcz10KSxVYih0PVliKCkpJiYobi5vcHRpb25zPXQpfX0saG9zdEF0dHJzOlsxLCJtYXQtYXV0b2NvbXBsZXRlIl0saW5wdXRzOntkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIn0sZXhwb3J0QXM6WyJtYXRBdXRvY29tcGxldGUiXSxmZWF0dXJlczpbaWgoW3twcm92aWRlOmdILHVzZUV4aXN0aW5nOm4xfV0pLGdtXSxuZ0NvbnRlbnRTZWxlY3RvcnM6WyIqIl0sZGVjbHM6MSx2YXJzOjAsY29uc3RzOltbInJvbGUiLCJsaXN0Ym94IiwxLCJtYXQtYXV0b2NvbXBsZXRlLXBhbmVsIiwzLCJpZCIsIm5nQ2xhc3MiXSxbInBhbmVsIiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihWdSgpLFdtKDAsWDAsMyw0LCJuZy10ZW1wbGF0ZSIpKX0sZGlyZWN0aXZlczpbdHZdLHN0eWxlczpbIi5tYXQtYXV0b2NvbXBsZXRlLXBhbmVse21pbi13aWR0aDoxMTJweDttYXgtd2lkdGg6MjgwcHg7b3ZlcmZsb3c6YXV0bzstd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzp0b3VjaDt2aXNpYmlsaXR5OmhpZGRlbjttYXgtd2lkdGg6bm9uZTttYXgtaGVpZ2h0OjI1NnB4O3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjEwMCU7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czo0cHg7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6NHB4fS5tYXQtYXV0b2NvbXBsZXRlLXBhbmVsLm1hdC1hdXRvY29tcGxldGUtdmlzaWJsZXt2aXNpYmlsaXR5OnZpc2libGV9Lm1hdC1hdXRvY29tcGxldGUtcGFuZWwubWF0LWF1dG9jb21wbGV0ZS1oaWRkZW57dmlzaWJpbGl0eTpoaWRkZW59Lm1hdC1hdXRvY29tcGxldGUtcGFuZWwtYWJvdmUgLm1hdC1hdXRvY29tcGxldGUtcGFuZWx7Ym9yZGVyLXJhZGl1czowO2JvcmRlci10b3AtbGVmdC1yYWRpdXM6NHB4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjRweH0ubWF0LWF1dG9jb21wbGV0ZS1wYW5lbCAubWF0LWRpdmlkZXItaG9yaXpvbnRhbHttYXJnaW4tdG9wOi0xcHh9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWF1dG9jb21wbGV0ZS1wYW5lbHtvdXRsaW5lOnNvbGlkIDFweH1tYXQtYXV0b2NvbXBsZXRle2Rpc3BsYXk6bm9uZX1cbiJdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG4xLnByb3BEZWNvcmF0b3JzPXtvcHRpb25Hcm91cHM6W3t0eXBlOnpyLGFyZ3M6W19ILHtkZXNjZW5kYW50czohMH1dfV0sb3B0aW9uczpbe3R5cGU6enIsYXJnczpbUEgse2Rlc2NlbmRhbnRzOiEwfV19XX07Y29uc3QgbzE9dnIobjEpOygidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIobjEsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoibWF0LWF1dG9jb21wbGV0ZSIsdGVtcGxhdGU6JzxuZy10ZW1wbGF0ZSBsZXQtZm9ybUZpZWxkSWQ9ImlkIj5cbiAgPGRpdiBjbGFzcz0ibWF0LWF1dG9jb21wbGV0ZS1wYW5lbCJcbiAgICAgICByb2xlPSJsaXN0Ym94IlxuICAgICAgIFtpZF09ImlkIlxuICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPSJhcmlhTGFiZWwgfHwgbnVsbCJcbiAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPSJfZ2V0UGFuZWxBcmlhTGFiZWxsZWRieShmb3JtRmllbGRJZCkiXG4gICAgICAgW25nQ2xhc3NdPSJfY2xhc3NMaXN0IlxuICAgICAgICNwYW5lbD5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbicsZW5jYXBzdWxhdGlvbjpQby5Ob25lLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2gsZXhwb3J0QXM6Im1hdEF1dG9jb21wbGV0ZSIsaW5wdXRzOlsiZGlzYWJsZVJpcHBsZSJdLGhvc3Q6e2NsYXNzOiJtYXQtYXV0b2NvbXBsZXRlIn0scHJvdmlkZXJzOlt7cHJvdmlkZTpnSCx1c2VFeGlzdGluZzpuMX1dLHN0eWxlczpbIi5tYXQtYXV0b2NvbXBsZXRlLXBhbmVse21pbi13aWR0aDoxMTJweDttYXgtd2lkdGg6MjgwcHg7b3ZlcmZsb3c6YXV0bzstd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzp0b3VjaDt2aXNpYmlsaXR5OmhpZGRlbjttYXgtd2lkdGg6bm9uZTttYXgtaGVpZ2h0OjI1NnB4O3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjEwMCU7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czo0cHg7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6NHB4fS5tYXQtYXV0b2NvbXBsZXRlLXBhbmVsLm1hdC1hdXRvY29tcGxldGUtdmlzaWJsZXt2aXNpYmlsaXR5OnZpc2libGV9Lm1hdC1hdXRvY29tcGxldGUtcGFuZWwubWF0LWF1dG9jb21wbGV0ZS1oaWRkZW57dmlzaWJpbGl0eTpoaWRkZW59Lm1hdC1hdXRvY29tcGxldGUtcGFuZWwtYWJvdmUgLm1hdC1hdXRvY29tcGxldGUtcGFuZWx7Ym9yZGVyLXJhZGl1czowO2JvcmRlci10b3AtbGVmdC1yYWRpdXM6NHB4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjRweH0ubWF0LWF1dG9jb21wbGV0ZS1wYW5lbCAubWF0LWRpdmlkZXItaG9yaXpvbnRhbHttYXJnaW4tdG9wOi0xcHh9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWF1dG9jb21wbGV0ZS1wYW5lbHtvdXRsaW5lOnNvbGlkIDFweH1tYXQtYXV0b2NvbXBsZXRle2Rpc3BsYXk6bm9uZX1cbiJdfV19XSxudWxsLHtvcHRpb25Hcm91cHM6W3t0eXBlOnpyLGFyZ3M6W19ILHtkZXNjZW5kYW50czohMH1dfV0sb3B0aW9uczpbe3R5cGU6enIsYXJnczpbUEgse2Rlc2NlbmRhbnRzOiEwfV19XX0pOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3MgaTF7Y29uc3RydWN0b3IodCl7dGhpcy5lbGVtZW50UmVmPXR9fWkxLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxpMSkoTXUoY2gpKX0saTEuybVkaXI9Sm8oe3R5cGU6aTF9KSxpMS5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmNofV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihpMSxbe3R5cGU6Z199XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Y2h9XX0pLG51bGwpO2NsYXNzIGExIGV4dGVuZHMgaTF7fWExLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIHIxKGV8fGExKX0sYTEuybVkaXI9Sm8oe3R5cGU6YTEsc2VsZWN0b3JzOltbIiIsIm1hdEF1dG9jb21wbGV0ZU9yaWdpbiIsIiJdXSxleHBvcnRBczpbIm1hdEF1dG9jb21wbGV0ZU9yaWdpbiJdLGZlYXR1cmVzOltnbV19KTtjb25zdCByMT12cihhMSk7KCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihhMSxbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJbbWF0QXV0b2NvbXBsZXRlT3JpZ2luXSIsZXhwb3J0QXM6Im1hdEF1dG9jb21wbGV0ZU9yaWdpbiJ9XX1dLG51bGwsbnVsbCk7Y29uc3QgczE9bmV3IE5yKCJtYXQtYXV0b2NvbXBsZXRlLXNjcm9sbC1zdHJhdGVneSIpLGwxPXtwcm92aWRlOnMxLGRlcHM6W0pGXSx1c2VGYWN0b3J5OmZ1bmN0aW9uIGMxKHQpe3JldHVybigpPT50LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpfX0sZDE9e3Byb3ZpZGU6dlYsdXNlRXhpc3Rpbmc6SW4oKCgpPT5tMSkpLG11bHRpOiEwfTtjbGFzcyBwMXtjb25zdHJ1Y3Rvcih0LGUsbixvLGksYSxyLHMsYyxkLHApe3RoaXMuX2VsZW1lbnQ9dCx0aGlzLl9vdmVybGF5PWUsdGhpcy5fdmlld0NvbnRhaW5lclJlZj1uLHRoaXMuX3pvbmU9byx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1pLHRoaXMuX2Rpcj1yLHRoaXMuX2Zvcm1GaWVsZD1zLHRoaXMuX2RvY3VtZW50PWMsdGhpcy5fdmlld3BvcnRSdWxlcj1kLHRoaXMuX2RlZmF1bHRzPXAsdGhpcy5fY29tcG9uZW50RGVzdHJveWVkPSExLHRoaXMuX2F1dG9jb21wbGV0ZURpc2FibGVkPSExLHRoaXMuX21hbnVhbGx5RmxvYXRpbmdMYWJlbD0hMSx0aGlzLl92aWV3cG9ydFN1YnNjcmlwdGlvbj1sLkVNUFRZLHRoaXMuX2Nhbk9wZW5Pbk5leHRGb2N1cz0hMCx0aGlzLl9jbG9zZUtleUV2ZW50U3RyZWFtPW5ldyB4LHRoaXMuX3dpbmRvd0JsdXJIYW5kbGVyPSgpPT57dGhpcy5fY2FuT3Blbk9uTmV4dEZvY3VzPXRoaXMuX2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQhPT10aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnR8fHRoaXMucGFuZWxPcGVufSx0aGlzLl9vbkNoYW5nZT0oKT0+e30sdGhpcy5fb25Ub3VjaGVkPSgpPT57fSx0aGlzLnBvc2l0aW9uPSJhdXRvIix0aGlzLmF1dG9jb21wbGV0ZUF0dHJpYnV0ZT0ib2ZmIix0aGlzLl9vdmVybGF5QXR0YWNoZWQ9ITEsdGhpcy5vcHRpb25TZWxlY3Rpb25zPUZ0KCgoKT0+dGhpcy5hdXRvY29tcGxldGUmJnRoaXMuYXV0b2NvbXBsZXRlLm9wdGlvbnM/V3QoLi4udGhpcy5hdXRvY29tcGxldGUub3B0aW9ucy5tYXAoKHQ9PnQub25TZWxlY3Rpb25DaGFuZ2UpKSk6dGhpcy5fem9uZS5vblN0YWJsZS5waXBlKE5lKDEpLGRuKCgoKT0+dGhpcy5vcHRpb25TZWxlY3Rpb25zKSkpKSksdGhpcy5fc2Nyb2xsU3RyYXRlZ3k9YX1nZXQgYXV0b2NvbXBsZXRlRGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fYXV0b2NvbXBsZXRlRGlzYWJsZWR9c2V0IGF1dG9jb21wbGV0ZURpc2FibGVkKHQpe3RoaXMuX2F1dG9jb21wbGV0ZURpc2FibGVkPXJJKHQpfW5nQWZ0ZXJWaWV3SW5pdCgpe2NvbnN0IHQ9dGhpcy5fZ2V0V2luZG93KCk7dm9pZCAwIT09dCYmdGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKCk9PnQuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsdGhpcy5fd2luZG93Qmx1ckhhbmRsZXIpKSl9bmdPbkNoYW5nZXModCl7dC5wb3NpdGlvbiYmdGhpcy5fcG9zaXRpb25TdHJhdGVneSYmKHRoaXMuX3NldFN0cmF0ZWd5UG9zaXRpb25zKHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kpLHRoaXMucGFuZWxPcGVuJiZ0aGlzLl9vdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKCkpfW5nT25EZXN0cm95KCl7Y29uc3QgdD10aGlzLl9nZXRXaW5kb3coKTt2b2lkIDAhPT10JiZ0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLHRoaXMuX3dpbmRvd0JsdXJIYW5kbGVyKSx0aGlzLl92aWV3cG9ydFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2NvbXBvbmVudERlc3Ryb3llZD0hMCx0aGlzLl9kZXN0cm95UGFuZWwoKSx0aGlzLl9jbG9zZUtleUV2ZW50U3RyZWFtLmNvbXBsZXRlKCl9Z2V0IHBhbmVsT3Blbigpe3JldHVybiB0aGlzLl9vdmVybGF5QXR0YWNoZWQmJnRoaXMuYXV0b2NvbXBsZXRlLnNob3dQYW5lbH1vcGVuUGFuZWwoKXt0aGlzLl9hdHRhY2hPdmVybGF5KCksdGhpcy5fZmxvYXRMYWJlbCgpfWNsb3NlUGFuZWwoKXt0aGlzLl9yZXNldExhYmVsKCksdGhpcy5fb3ZlcmxheUF0dGFjaGVkJiYodGhpcy5wYW5lbE9wZW4mJnRoaXMuYXV0b2NvbXBsZXRlLmNsb3NlZC5lbWl0KCksdGhpcy5hdXRvY29tcGxldGUuX2lzT3Blbj10aGlzLl9vdmVybGF5QXR0YWNoZWQ9ITEsdGhpcy5fb3ZlcmxheVJlZiYmdGhpcy5fb3ZlcmxheVJlZi5oYXNBdHRhY2hlZCgpJiYodGhpcy5fb3ZlcmxheVJlZi5kZXRhY2goKSx0aGlzLl9jbG9zaW5nQWN0aW9uc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpKSx0aGlzLl9jb21wb25lbnREZXN0cm95ZWR8fHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKSl9dXBkYXRlUG9zaXRpb24oKXt0aGlzLl9vdmVybGF5QXR0YWNoZWQmJnRoaXMuX292ZXJsYXlSZWYudXBkYXRlUG9zaXRpb24oKX1nZXQgcGFuZWxDbG9zaW5nQWN0aW9ucygpe3JldHVybiBXdCh0aGlzLm9wdGlvblNlbGVjdGlvbnMsdGhpcy5hdXRvY29tcGxldGUuX2tleU1hbmFnZXIudGFiT3V0LnBpcGUoR3QoKCgpPT50aGlzLl9vdmVybGF5QXR0YWNoZWQpKSksdGhpcy5fY2xvc2VLZXlFdmVudFN0cmVhbSx0aGlzLl9nZXRPdXRzaWRlQ2xpY2tTdHJlYW0oKSx0aGlzLl9vdmVybGF5UmVmP3RoaXMuX292ZXJsYXlSZWYuZGV0YWNobWVudHMoKS5waXBlKEd0KCgoKT0+dGhpcy5fb3ZlcmxheUF0dGFjaGVkKSkpOlooKSkucGlwZShodCgodD0+dCBpbnN0YW5jZW9mIHhIP3Q6bnVsbCkpKX1nZXQgYWN0aXZlT3B0aW9uKCl7cmV0dXJuIHRoaXMuYXV0b2NvbXBsZXRlJiZ0aGlzLmF1dG9jb21wbGV0ZS5fa2V5TWFuYWdlcj90aGlzLmF1dG9jb21wbGV0ZS5fa2V5TWFuYWdlci5hY3RpdmVJdGVtOm51bGx9X2dldE91dHNpZGVDbGlja1N0cmVhbSgpe3JldHVybiBXdChWdCh0aGlzLl9kb2N1bWVudCwiY2xpY2siKSxWdCh0aGlzLl9kb2N1bWVudCwiYXV4Y2xpY2siKSxWdCh0aGlzLl9kb2N1bWVudCwidG91Y2hlbmQiKSkucGlwZShHdCgodD0+e2NvbnN0IGU9dGhpcy5faXNJbnNpZGVTaGFkb3dSb290JiZ0LmNvbXBvc2VkUGF0aD90LmNvbXBvc2VkUGF0aCgpWzBdOnQudGFyZ2V0LG49dGhpcy5fZm9ybUZpZWxkP3RoaXMuX2Zvcm1GaWVsZC5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Om51bGwsbz10aGlzLmNvbm5lY3RlZFRvP3RoaXMuY29ubmVjdGVkVG8uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Om51bGw7cmV0dXJuIHRoaXMuX292ZXJsYXlBdHRhY2hlZCYmZSE9PXRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCYmKCFufHwhbi5jb250YWlucyhlKSkmJighb3x8IW8uY29udGFpbnMoZSkpJiYhIXRoaXMuX292ZXJsYXlSZWYmJiF0aGlzLl9vdmVybGF5UmVmLm92ZXJsYXlFbGVtZW50LmNvbnRhaW5zKGUpfSkpKX13cml0ZVZhbHVlKHQpe1Byb21pc2UucmVzb2x2ZShudWxsKS50aGVuKCgoKT0+dGhpcy5fc2V0VHJpZ2dlclZhbHVlKHQpKSl9cmVnaXN0ZXJPbkNoYW5nZSh0KXt0aGlzLl9vbkNoYW5nZT10fXJlZ2lzdGVyT25Ub3VjaGVkKHQpe3RoaXMuX29uVG91Y2hlZD10fXNldERpc2FibGVkU3RhdGUodCl7dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmRpc2FibGVkPXR9X2hhbmRsZUtleWRvd24odCl7Y29uc3QgZT10LmtleUNvZGU7aWYoZSE9PWVJfHxhSSh0KXx8dC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuYWN0aXZlT3B0aW9uJiZlPT09dEkmJnRoaXMucGFuZWxPcGVuKXRoaXMuYWN0aXZlT3B0aW9uLl9zZWxlY3RWaWFJbnRlcmFjdGlvbigpLHRoaXMuX3Jlc2V0QWN0aXZlSXRlbSgpLHQucHJldmVudERlZmF1bHQoKTtlbHNlIGlmKHRoaXMuYXV0b2NvbXBsZXRlKXtjb25zdCBuPXRoaXMuYXV0b2NvbXBsZXRlLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0sbz1lPT09b0l8fGU9PT1pSTt0aGlzLnBhbmVsT3Blbnx8OT09PWU/dGhpcy5hdXRvY29tcGxldGUuX2tleU1hbmFnZXIub25LZXlkb3duKHQpOm8mJnRoaXMuX2Nhbk9wZW4oKSYmdGhpcy5vcGVuUGFuZWwoKSwob3x8dGhpcy5hdXRvY29tcGxldGUuX2tleU1hbmFnZXIuYWN0aXZlSXRlbSE9PW4pJiZ0aGlzLl9zY3JvbGxUb09wdGlvbih0aGlzLmF1dG9jb21wbGV0ZS5fa2V5TWFuYWdlci5hY3RpdmVJdGVtSW5kZXh8fDApfX1faGFuZGxlSW5wdXQodCl7bGV0IGU9dC50YXJnZXQsbj1lLnZhbHVlOyJudW1iZXIiPT09ZS50eXBlJiYobj0iIj09bj9udWxsOnBhcnNlRmxvYXQobikpLHRoaXMuX3ByZXZpb3VzVmFsdWUhPT1uJiYodGhpcy5fcHJldmlvdXNWYWx1ZT1uLHRoaXMuX29uQ2hhbmdlKG4pLHRoaXMuX2Nhbk9wZW4oKSYmdGhpcy5fZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PXQudGFyZ2V0JiZ0aGlzLm9wZW5QYW5lbCgpKX1faGFuZGxlRm9jdXMoKXt0aGlzLl9jYW5PcGVuT25OZXh0Rm9jdXM/dGhpcy5fY2FuT3BlbigpJiYodGhpcy5fcHJldmlvdXNWYWx1ZT10aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUsdGhpcy5fYXR0YWNoT3ZlcmxheSgpLHRoaXMuX2Zsb2F0TGFiZWwoITApKTp0aGlzLl9jYW5PcGVuT25OZXh0Rm9jdXM9ITB9X2Zsb2F0TGFiZWwodD0hMSl7dGhpcy5fZm9ybUZpZWxkJiYiYXV0byI9PT10aGlzLl9mb3JtRmllbGQuZmxvYXRMYWJlbCYmKHQ/dGhpcy5fZm9ybUZpZWxkLl9hbmltYXRlQW5kTG9ja0xhYmVsKCk6dGhpcy5fZm9ybUZpZWxkLmZsb2F0TGFiZWw9ImFsd2F5cyIsdGhpcy5fbWFudWFsbHlGbG9hdGluZ0xhYmVsPSEwKX1fcmVzZXRMYWJlbCgpe3RoaXMuX21hbnVhbGx5RmxvYXRpbmdMYWJlbCYmKHRoaXMuX2Zvcm1GaWVsZC5mbG9hdExhYmVsPSJhdXRvIix0aGlzLl9tYW51YWxseUZsb2F0aW5nTGFiZWw9ITEpfV9zdWJzY3JpYmVUb0Nsb3NpbmdBY3Rpb25zKCl7cmV0dXJuIFd0KHRoaXMuX3pvbmUub25TdGFibGUucGlwZShOZSgxKSksdGhpcy5hdXRvY29tcGxldGUub3B0aW9ucy5jaGFuZ2VzLnBpcGUoX24oKCgpPT50aGlzLl9wb3NpdGlvblN0cmF0ZWd5LnJlYXBwbHlMYXN0UG9zaXRpb24oKSkpLGJlKDApKSkucGlwZShkbigoKCk9Pntjb25zdCB0PXRoaXMucGFuZWxPcGVuO3JldHVybiB0aGlzLl9yZXNldEFjdGl2ZUl0ZW0oKSx0aGlzLmF1dG9jb21wbGV0ZS5fc2V0VmlzaWJpbGl0eSgpLHRoaXMucGFuZWxPcGVuJiYodGhpcy5fb3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpLHQhPT10aGlzLnBhbmVsT3BlbiYmdGhpcy5hdXRvY29tcGxldGUub3BlbmVkLmVtaXQoKSksdGhpcy5wYW5lbENsb3NpbmdBY3Rpb25zfSkpLE5lKDEpKS5zdWJzY3JpYmUoKHQ9PnRoaXMuX3NldFZhbHVlQW5kQ2xvc2UodCkpKX1fZGVzdHJveVBhbmVsKCl7dGhpcy5fb3ZlcmxheVJlZiYmKHRoaXMuY2xvc2VQYW5lbCgpLHRoaXMuX292ZXJsYXlSZWYuZGlzcG9zZSgpLHRoaXMuX292ZXJsYXlSZWY9bnVsbCl9X3NldFRyaWdnZXJWYWx1ZSh0KXtjb25zdCBlPXRoaXMuYXV0b2NvbXBsZXRlJiZ0aGlzLmF1dG9jb21wbGV0ZS5kaXNwbGF5V2l0aD90aGlzLmF1dG9jb21wbGV0ZS5kaXNwbGF5V2l0aCh0KTp0LG49bnVsbCE9ZT9lOiIiO3RoaXMuX2Zvcm1GaWVsZD90aGlzLl9mb3JtRmllbGQuX2NvbnRyb2wudmFsdWU9bjp0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWU9bix0aGlzLl9wcmV2aW91c1ZhbHVlPW59X3NldFZhbHVlQW5kQ2xvc2UodCl7dCYmdC5zb3VyY2UmJih0aGlzLl9jbGVhclByZXZpb3VzU2VsZWN0ZWRPcHRpb24odC5zb3VyY2UpLHRoaXMuX3NldFRyaWdnZXJWYWx1ZSh0LnNvdXJjZS52YWx1ZSksdGhpcy5fb25DaGFuZ2UodC5zb3VyY2UudmFsdWUpLHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpLHRoaXMuYXV0b2NvbXBsZXRlLl9lbWl0U2VsZWN0RXZlbnQodC5zb3VyY2UpKSx0aGlzLmNsb3NlUGFuZWwoKX1fY2xlYXJQcmV2aW91c1NlbGVjdGVkT3B0aW9uKHQpe3RoaXMuYXV0b2NvbXBsZXRlLm9wdGlvbnMuZm9yRWFjaCgoZT0+e2UhPT10JiZlLnNlbGVjdGVkJiZlLmRlc2VsZWN0KCl9KSl9X2F0dGFjaE92ZXJsYXkoKXt2YXIgdDtpZighdGhpcy5hdXRvY29tcGxldGUmJigidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSl0aHJvdyhmdW5jdGlvbiBlKCl7cmV0dXJuIEVycm9yKCJBdHRlbXB0aW5nIHRvIG9wZW4gYW4gdW5kZWZpbmVkIGluc3RhbmNlIG9mIGBtYXQtYXV0b2NvbXBsZXRlYC4gTWFrZSBzdXJlIHRoYXQgdGhlIGlkIHBhc3NlZCB0byB0aGUgYG1hdEF1dG9jb21wbGV0ZWAgaXMgY29ycmVjdCBhbmQgdGhhdCB5b3UncmUgYXR0ZW1wdGluZyB0byBvcGVuIGl0IGFmdGVyIHRoZSBuZ0FmdGVyQ29udGVudEluaXQgaG9vay4iKX0pKCk7bnVsbD09dGhpcy5faXNJbnNpZGVTaGFkb3dSb290JiYodGhpcy5faXNJbnNpZGVTaGFkb3dSb290PSEhUEkodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50KSk7bGV0IG49dGhpcy5fb3ZlcmxheVJlZjtuPyh0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LnNldE9yaWdpbih0aGlzLl9nZXRDb25uZWN0ZWRFbGVtZW50KCkpLG4udXBkYXRlU2l6ZSh7d2lkdGg6dGhpcy5fZ2V0UGFuZWxXaWR0aCgpfSkpOih0aGlzLl9wb3J0YWw9bmV3IGxGKHRoaXMuYXV0b2NvbXBsZXRlLnRlbXBsYXRlLHRoaXMuX3ZpZXdDb250YWluZXJSZWYse2lkOm51bGw9PT0odD10aGlzLl9mb3JtRmllbGQpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmdldExhYmVsSWQoKX0pLG49dGhpcy5fb3ZlcmxheS5jcmVhdGUodGhpcy5fZ2V0T3ZlcmxheUNvbmZpZygpKSx0aGlzLl9vdmVybGF5UmVmPW4sbi5rZXlkb3duRXZlbnRzKCkuc3Vic2NyaWJlKCh0PT57KHQua2V5Q29kZT09PWVJJiYhYUkodCl8fHQua2V5Q29kZT09PW9JJiZhSSh0LCJhbHRLZXkiKSkmJih0aGlzLl9yZXNldEFjdGl2ZUl0ZW0oKSx0aGlzLl9jbG9zZUtleUV2ZW50U3RyZWFtLm5leHQoKSx0LnN0b3BQcm9wYWdhdGlvbigpLHQucHJldmVudERlZmF1bHQoKSl9KSksdGhpcy5fdmlld3BvcnRTdWJzY3JpcHRpb249dGhpcy5fdmlld3BvcnRSdWxlci5jaGFuZ2UoKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5wYW5lbE9wZW4mJm4mJm4udXBkYXRlU2l6ZSh7d2lkdGg6dGhpcy5fZ2V0UGFuZWxXaWR0aCgpfSl9KSkpLG4mJiFuLmhhc0F0dGFjaGVkKCkmJihuLmF0dGFjaCh0aGlzLl9wb3J0YWwpLHRoaXMuX2Nsb3NpbmdBY3Rpb25zU3Vic2NyaXB0aW9uPXRoaXMuX3N1YnNjcmliZVRvQ2xvc2luZ0FjdGlvbnMoKSk7Y29uc3Qgbz10aGlzLnBhbmVsT3Blbjt0aGlzLmF1dG9jb21wbGV0ZS5fc2V0VmlzaWJpbGl0eSgpLHRoaXMuYXV0b2NvbXBsZXRlLl9pc09wZW49dGhpcy5fb3ZlcmxheUF0dGFjaGVkPSEwLHRoaXMucGFuZWxPcGVuJiZvIT09dGhpcy5wYW5lbE9wZW4mJnRoaXMuYXV0b2NvbXBsZXRlLm9wZW5lZC5lbWl0KCl9X2dldE92ZXJsYXlDb25maWcoKXt2YXIgdDtyZXR1cm4gbmV3IFNGKHtwb3NpdGlvblN0cmF0ZWd5OnRoaXMuX2dldE92ZXJsYXlQb3NpdGlvbigpLHNjcm9sbFN0cmF0ZWd5OnRoaXMuX3Njcm9sbFN0cmF0ZWd5KCksd2lkdGg6dGhpcy5fZ2V0UGFuZWxXaWR0aCgpLGRpcmVjdGlvbjp0aGlzLl9kaXIscGFuZWxDbGFzczpudWxsPT09KHQ9dGhpcy5fZGVmYXVsdHMpfHx2b2lkIDA9PT10P3ZvaWQgMDp0Lm92ZXJsYXlQYW5lbENsYXNzfSl9X2dldE92ZXJsYXlQb3NpdGlvbigpe2NvbnN0IHQ9dGhpcy5fb3ZlcmxheS5wb3NpdGlvbigpLmZsZXhpYmxlQ29ubmVjdGVkVG8odGhpcy5fZ2V0Q29ubmVjdGVkRWxlbWVudCgpKS53aXRoRmxleGlibGVEaW1lbnNpb25zKCExKS53aXRoUHVzaCghMSk7cmV0dXJuIHRoaXMuX3NldFN0cmF0ZWd5UG9zaXRpb25zKHQpLHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3k9dCx0fV9zZXRTdHJhdGVneVBvc2l0aW9ucyh0KXtjb25zdCBlPVt7b3JpZ2luWDoic3RhcnQiLG9yaWdpblk6ImJvdHRvbSIsb3ZlcmxheVg6InN0YXJ0IixvdmVybGF5WToidG9wIn0se29yaWdpblg6ImVuZCIsb3JpZ2luWToiYm90dG9tIixvdmVybGF5WDoiZW5kIixvdmVybGF5WToidG9wIn1dLG49dGhpcy5fYWJvdmVDbGFzcyxvPVt7b3JpZ2luWDoic3RhcnQiLG9yaWdpblk6InRvcCIsb3ZlcmxheVg6InN0YXJ0IixvdmVybGF5WToiYm90dG9tIixwYW5lbENsYXNzOm59LHtvcmlnaW5YOiJlbmQiLG9yaWdpblk6InRvcCIsb3ZlcmxheVg6ImVuZCIsb3ZlcmxheVk6ImJvdHRvbSIscGFuZWxDbGFzczpufV07bGV0IGk7aT0iYWJvdmUiPT09dGhpcy5wb3NpdGlvbj9vOiJiZWxvdyI9PT10aGlzLnBvc2l0aW9uP2U6Wy4uLmUsLi4ub10sdC53aXRoUG9zaXRpb25zKGkpfV9nZXRDb25uZWN0ZWRFbGVtZW50KCl7cmV0dXJuIHRoaXMuY29ubmVjdGVkVG8/dGhpcy5jb25uZWN0ZWRUby5lbGVtZW50UmVmOnRoaXMuX2Zvcm1GaWVsZD90aGlzLl9mb3JtRmllbGQuZ2V0Q29ubmVjdGVkT3ZlcmxheU9yaWdpbigpOnRoaXMuX2VsZW1lbnR9X2dldFBhbmVsV2lkdGgoKXtyZXR1cm4gdGhpcy5hdXRvY29tcGxldGUucGFuZWxXaWR0aHx8dGhpcy5fZ2V0SG9zdFdpZHRoKCl9X2dldEhvc3RXaWR0aCgpe3JldHVybiB0aGlzLl9nZXRDb25uZWN0ZWRFbGVtZW50KCkubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aH1fcmVzZXRBY3RpdmVJdGVtKCl7Y29uc3QgdD10aGlzLmF1dG9jb21wbGV0ZTt0LmF1dG9BY3RpdmVGaXJzdE9wdGlvbj90Ll9rZXlNYW5hZ2VyLnNldEZpcnN0SXRlbUFjdGl2ZSgpOnQuX2tleU1hbmFnZXIuc2V0QWN0aXZlSXRlbSgtMSl9X2Nhbk9wZW4oKXtjb25zdCB0PXRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudDtyZXR1cm4hdC5yZWFkT25seSYmIXQuZGlzYWJsZWQmJiF0aGlzLl9hdXRvY29tcGxldGVEaXNhYmxlZH1fZ2V0V2luZG93KCl7dmFyIHQ7cmV0dXJuKG51bGw9PT0odD10aGlzLl9kb2N1bWVudCl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuZGVmYXVsdFZpZXcpfHx3aW5kb3d9X3Njcm9sbFRvT3B0aW9uKHQpe2NvbnN0IGU9dGhpcy5hdXRvY29tcGxldGUsbj13SCh0LGUub3B0aW9ucyxlLm9wdGlvbkdyb3Vwcyk7aWYoMD09PXQmJjE9PT1uKWUuX3NldFNjcm9sbFRvcCgwKTtlbHNlIGlmKGUucGFuZWwpe2NvbnN0IG49ZS5vcHRpb25zLnRvQXJyYXkoKVt0XTtpZihuKXtjb25zdCB0PW4uX2dldEhvc3RFbGVtZW50KCksbz1rSCh0Lm9mZnNldFRvcCx0Lm9mZnNldEhlaWdodCxlLl9nZXRTY3JvbGxUb3AoKSxlLnBhbmVsLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0KTtlLl9zZXRTY3JvbGxUb3Aobyl9fX19cDEuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHAxKShNdShjaCksTXUoSkYpLE11KFhoKSxNdSh0QyksTXUoSGgpLE11KHMxKSxNdShNeiw4KSxNdSh5Viw5KSxNdShVQyw4KSxNdShRSCksTXUoJDAsOCkpfSxwMS7JtWRpcj1Kbyh7dHlwZTpwMSxpbnB1dHM6e3Bvc2l0aW9uOlsibWF0QXV0b2NvbXBsZXRlUG9zaXRpb24iLCJwb3NpdGlvbiJdLGF1dG9jb21wbGV0ZUF0dHJpYnV0ZTpbImF1dG9jb21wbGV0ZSIsImF1dG9jb21wbGV0ZUF0dHJpYnV0ZSJdLGF1dG9jb21wbGV0ZURpc2FibGVkOlsibWF0QXV0b2NvbXBsZXRlRGlzYWJsZWQiLCJhdXRvY29tcGxldGVEaXNhYmxlZCJdLGF1dG9jb21wbGV0ZTpbIm1hdEF1dG9jb21wbGV0ZSIsImF1dG9jb21wbGV0ZSJdLGNvbm5lY3RlZFRvOlsibWF0QXV0b2NvbXBsZXRlQ29ubmVjdGVkVG8iLCJjb25uZWN0ZWRUbyJdfSxmZWF0dXJlczpbU2ldfSkscDEuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpjaH0se3R5cGU6SkZ9LHt0eXBlOlhofSx7dHlwZTp0Q30se3R5cGU6SGh9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltzMV19XX0se3R5cGU6TXosZGVjb3JhdG9yczpbe3R5cGU6X3N9XX0se3R5cGU6X1YsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W3lWXX0se3R5cGU6dnN9XX0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltVQ119XX0se3R5cGU6UUh9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbJDBdfV19XSxwMS5wcm9wRGVjb3JhdG9ycz17YXV0b2NvbXBsZXRlOlt7dHlwZTp5XyxhcmdzOlsibWF0QXV0b2NvbXBsZXRlIl19XSxwb3NpdGlvbjpbe3R5cGU6eV8sYXJnczpbIm1hdEF1dG9jb21wbGV0ZVBvc2l0aW9uIl19XSxjb25uZWN0ZWRUbzpbe3R5cGU6eV8sYXJnczpbIm1hdEF1dG9jb21wbGV0ZUNvbm5lY3RlZFRvIl19XSxhdXRvY29tcGxldGVBdHRyaWJ1dGU6W3t0eXBlOnlfLGFyZ3M6WyJhdXRvY29tcGxldGUiXX1dLGF1dG9jb21wbGV0ZURpc2FibGVkOlt7dHlwZTp5XyxhcmdzOlsibWF0QXV0b2NvbXBsZXRlRGlzYWJsZWQiXX1dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHAxLFt7dHlwZTpnX31dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpjaH0se3R5cGU6SkZ9LHt0eXBlOlhofSx7dHlwZTp0Q30se3R5cGU6SGh9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltzMV19XX0se3R5cGU6TXosZGVjb3JhdG9yczpbe3R5cGU6X3N9XX0se3R5cGU6X1YsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W3lWXX0se3R5cGU6dnN9XX0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltVQ119XX0se3R5cGU6UUh9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbJDBdfV19XX0pLHtwb3NpdGlvbjpbe3R5cGU6eV8sYXJnczpbIm1hdEF1dG9jb21wbGV0ZVBvc2l0aW9uIl19XSxhdXRvY29tcGxldGVBdHRyaWJ1dGU6W3t0eXBlOnlfLGFyZ3M6WyJhdXRvY29tcGxldGUiXX1dLGF1dG9jb21wbGV0ZURpc2FibGVkOlt7dHlwZTp5XyxhcmdzOlsibWF0QXV0b2NvbXBsZXRlRGlzYWJsZWQiXX1dLGF1dG9jb21wbGV0ZTpbe3R5cGU6eV8sYXJnczpbIm1hdEF1dG9jb21wbGV0ZSJdfV0sY29ubmVjdGVkVG86W3t0eXBlOnlfLGFyZ3M6WyJtYXRBdXRvY29tcGxldGVDb25uZWN0ZWRUbyJdfV19KTtjbGFzcyBtMSBleHRlbmRzIHAxe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9hYm92ZUNsYXNzPSJtYXQtYXV0b2NvbXBsZXRlLXBhbmVsLWFib3ZlIn19bTEuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gdTEoZXx8bTEpfSxtMS7JtWRpcj1Kbyh7dHlwZTptMSxzZWxlY3RvcnM6W1siaW5wdXQiLCJtYXRBdXRvY29tcGxldGUiLCIiXSxbInRleHRhcmVhIiwibWF0QXV0b2NvbXBsZXRlIiwiIl1dLGhvc3RBdHRyczpbMSwibWF0LWF1dG9jb21wbGV0ZS10cmlnZ2VyIl0saG9zdFZhcnM6Nyxob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezEmZSYmTnUoImZvY3VzaW4iLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uX2hhbmRsZUZvY3VzKCl9KSkoImJsdXIiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uX29uVG91Y2hlZCgpfSkpKCJpbnB1dCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4uX2hhbmRsZUlucHV0KGUpfSkpKCJrZXlkb3duIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5faGFuZGxlS2V5ZG93bihlKX0pKSwyJmUmJk5tKCJhdXRvY29tcGxldGUiLG4uYXV0b2NvbXBsZXRlQXR0cmlidXRlKSgicm9sZSIsbi5hdXRvY29tcGxldGVEaXNhYmxlZD9udWxsOiJjb21ib2JveCIpKCJhcmlhLWF1dG9jb21wbGV0ZSIsbi5hdXRvY29tcGxldGVEaXNhYmxlZD9udWxsOiJsaXN0IikoImFyaWEtYWN0aXZlZGVzY2VuZGFudCIsbi5wYW5lbE9wZW4mJm4uYWN0aXZlT3B0aW9uP24uYWN0aXZlT3B0aW9uLmlkOm51bGwpKCJhcmlhLWV4cGFuZGVkIixuLmF1dG9jb21wbGV0ZURpc2FibGVkP251bGw6bi5wYW5lbE9wZW4udG9TdHJpbmcoKSkoImFyaWEtb3ducyIsbi5hdXRvY29tcGxldGVEaXNhYmxlZHx8IW4ucGFuZWxPcGVufHxudWxsPT1uLmF1dG9jb21wbGV0ZT9udWxsOm4uYXV0b2NvbXBsZXRlLmlkKSgiYXJpYS1oYXNwb3B1cCIsIW4uYXV0b2NvbXBsZXRlRGlzYWJsZWQpfSxleHBvcnRBczpbIm1hdEF1dG9jb21wbGV0ZVRyaWdnZXIiXSxmZWF0dXJlczpbaWgoW2QxXSksZ21dfSk7Y29uc3QgdTE9dnIobTEpOygidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIobTEsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoiaW5wdXRbbWF0QXV0b2NvbXBsZXRlXSwgdGV4dGFyZWFbbWF0QXV0b2NvbXBsZXRlXSIsaG9zdDp7Y2xhc3M6Im1hdC1hdXRvY29tcGxldGUtdHJpZ2dlciIsIlthdHRyLmF1dG9jb21wbGV0ZV0iOiJhdXRvY29tcGxldGVBdHRyaWJ1dGUiLCJbYXR0ci5yb2xlXSI6J2F1dG9jb21wbGV0ZURpc2FibGVkID8gbnVsbCA6ICJjb21ib2JveCInLCJbYXR0ci5hcmlhLWF1dG9jb21wbGV0ZV0iOidhdXRvY29tcGxldGVEaXNhYmxlZCA/IG51bGwgOiAibGlzdCInLCJbYXR0ci5hcmlhLWFjdGl2ZWRlc2NlbmRhbnRdIjoiKHBhbmVsT3BlbiAmJiBhY3RpdmVPcHRpb24pID8gYWN0aXZlT3B0aW9uLmlkIDogbnVsbCIsIlthdHRyLmFyaWEtZXhwYW5kZWRdIjoiYXV0b2NvbXBsZXRlRGlzYWJsZWQgPyBudWxsIDogcGFuZWxPcGVuLnRvU3RyaW5nKCkiLCJbYXR0ci5hcmlhLW93bnNdIjoiKGF1dG9jb21wbGV0ZURpc2FibGVkIHx8ICFwYW5lbE9wZW4pID8gbnVsbCA6IGF1dG9jb21wbGV0ZT8uaWQiLCJbYXR0ci5hcmlhLWhhc3BvcHVwXSI6IiFhdXRvY29tcGxldGVEaXNhYmxlZCIsIihmb2N1c2luKSI6Il9oYW5kbGVGb2N1cygpIiwiKGJsdXIpIjoiX29uVG91Y2hlZCgpIiwiKGlucHV0KSI6Il9oYW5kbGVJbnB1dCgkZXZlbnQpIiwiKGtleWRvd24pIjoiX2hhbmRsZUtleWRvd24oJGV2ZW50KSJ9LGV4cG9ydEFzOiJtYXRBdXRvY29tcGxldGVUcmlnZ2VyIixwcm92aWRlcnM6W2QxXX1dfV0sbnVsbCxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIGYxe31mMS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8ZjEpfSxmMS7JtW1vZD1abyh7dHlwZTpmMX0pLGYxLsm1aW5qPWNvKHtwcm92aWRlcnM6W2wxXSxpbXBvcnRzOltbaUwsU0gsVHosQnZdLG9GLFNILFR6XX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oZjEse2RlY2xhcmF0aW9uczpmdW5jdGlvbigpe3JldHVybltuMSxtMSxhMV19LGltcG9ydHM6ZnVuY3Rpb24oKXtyZXR1cm5baUwsU0gsVHosQnZdfSxleHBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW24xLG0xLGExLG9GLFNILFR6XX19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGYxLFt7dHlwZTprXyxhcmdzOlt7aW1wb3J0czpbaUwsU0gsVHosQnZdLGV4cG9ydHM6W24xLG0xLGExLG9GLFNILFR6XSxkZWNsYXJhdGlvbnM6W24xLG0xLGExXSxwcm92aWRlcnM6W2wxXX1dfV0sbnVsbCxudWxsKTtjbGFzcyBnMXtjb25zdHJ1Y3Rvcigpe3RoaXMudmFsdWU9IiIsdGhpcy5wbGFjZWhvbGRlcj0iIn1vbklucHV0S2V5VXAodCl7IkVudGVyIj09PXQua2V5JiZ0aGlzLmF1dG9jb21wbGV0ZVRyaWdnZXIuY2xvc2VQYW5lbCgpfX1mdW5jdGlvbiBoMSh0LGUpe2lmKDEmdCYmKEhhKCksd3UoMCwiY2lyY2xlIiwzKSksMiZ0KXtjb25zdCB0PUx1KCk7b2YoImFuaW1hdGlvbi1uYW1lIiwibWF0LXByb2dyZXNzLXNwaW5uZXItc3Ryb2tlLXJvdGF0ZS0iK3QuX3NwaW5uZXJBbmltYXRpb25MYWJlbCkoInN0cm9rZS1kYXNob2Zmc2V0Iix0Ll9nZXRTdHJva2VEYXNoT2Zmc2V0KCksInB4IikoInN0cm9rZS1kYXNoYXJyYXkiLHQuX2dldFN0cm9rZUNpcmN1bWZlcmVuY2UoKSwicHgiKSgic3Ryb2tlLXdpZHRoIix0Ll9nZXRDaXJjbGVTdHJva2VXaWR0aCgpLCIlIiksTm0oInIiLHQuX2dldENpcmNsZVJhZGl1cygpKX19ZnVuY3Rpb24gYjEodCxlKXtpZigxJnQmJihIYSgpLHd1KDAsImNpcmNsZSIsMykpLDImdCl7Y29uc3QgdD1MdSgpO29mKCJzdHJva2UtZGFzaG9mZnNldCIsdC5fZ2V0U3Ryb2tlRGFzaE9mZnNldCgpLCJweCIpKCJzdHJva2UtZGFzaGFycmF5Iix0Ll9nZXRTdHJva2VDaXJjdW1mZXJlbmNlKCksInB4IikoInN0cm9rZS13aWR0aCIsdC5fZ2V0Q2lyY2xlU3Ryb2tlV2lkdGgoKSwiJSIpLE5tKCJyIix0Ll9nZXRDaXJjbGVSYWRpdXMoKSl9fWZ1bmN0aW9uIHkxKHQsZSl7aWYoMSZ0JiYoSGEoKSx3dSgwLCJjaXJjbGUiLDMpKSwyJnQpe2NvbnN0IHQ9THUoKTtvZigiYW5pbWF0aW9uLW5hbWUiLCJtYXQtcHJvZ3Jlc3Mtc3Bpbm5lci1zdHJva2Utcm90YXRlLSIrdC5fc3Bpbm5lckFuaW1hdGlvbkxhYmVsKSgic3Ryb2tlLWRhc2hvZmZzZXQiLHQuX2dldFN0cm9rZURhc2hPZmZzZXQoKSwicHgiKSgic3Ryb2tlLWRhc2hhcnJheSIsdC5fZ2V0U3Ryb2tlQ2lyY3VtZmVyZW5jZSgpLCJweCIpKCJzdHJva2Utd2lkdGgiLHQuX2dldENpcmNsZVN0cm9rZVdpZHRoKCksIiUiKSxObSgiciIsdC5fZ2V0Q2lyY2xlUmFkaXVzKCkpfX1mdW5jdGlvbiBfMSh0LGUpe2lmKDEmdCYmKEhhKCksd3UoMCwiY2lyY2xlIiwzKSksMiZ0KXtjb25zdCB0PUx1KCk7b2YoInN0cm9rZS1kYXNob2Zmc2V0Iix0Ll9nZXRTdHJva2VEYXNoT2Zmc2V0KCksInB4IikoInN0cm9rZS1kYXNoYXJyYXkiLHQuX2dldFN0cm9rZUNpcmN1bWZlcmVuY2UoKSwicHgiKSgic3Ryb2tlLXdpZHRoIix0Ll9nZXRDaXJjbGVTdHJva2VXaWR0aCgpLCIlIiksTm0oInIiLHQuX2dldENpcmNsZVJhZGl1cygpKX19ZzEuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGcxKX0sZzEuybVjbXA9VW8oe3R5cGU6ZzEsc2VsZWN0b3JzOltbInRiLWZpbHRlci1pbnB1dCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24gdChlLG4pe2lmKDEmZSYmV2IobTEsMSksMiZlKXtsZXQgdDtVYih0PVliKCkpJiYobi5hdXRvY29tcGxldGVUcmlnZ2VyPXQuZmlyc3QpfX0saW5wdXRzOnt2YWx1ZToidmFsdWUiLG1hdEF1dG9jb21wbGV0ZToibWF0QXV0b2NvbXBsZXRlIixwbGFjZWhvbGRlcjoicGxhY2Vob2xkZXIifSxkZWNsczoyLHZhcnM6NCxjb25zdHM6W1sic3ZnSWNvbiIsInNlYXJjaF8yNHB4Il0sWyJ0eXBlIiwidGV4dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywicGxhY2Vob2xkZXIiLCJtYXRBdXRvY29tcGxldGUiLCJtYXRBdXRvY29tcGxldGVEaXNhYmxlZCIsInZhbHVlIiwia2V5dXAiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKHd1KDAsIm1hdC1pY29uIiwwKSxPdSgxLCJpbnB1dCIsMSksTnUoImtleXVwIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vbklucHV0S2V5VXAoZSl9KSksUHUoKSksMiZlJiYoSmMoMSksdnUoInBsYWNlaG9sZGVyIixuLnBsYWNlaG9sZGVyKSgibWF0QXV0b2NvbXBsZXRlIixuLm1hdEF1dG9jb21wbGV0ZSkoIm1hdEF1dG9jb21wbGV0ZURpc2FibGVkIiwhbi5tYXRBdXRvY29tcGxldGUpKCJ2YWx1ZSIsbi52YWx1ZSkpfSxkaXJlY3RpdmVzOltjRyxtMV0sc3R5bGVzOlsnLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEycHg7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtYmFkZ2Utc21hbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6OXB4fS5tYXQtYmFkZ2UtbGFyZ2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweH0ubWF0LWgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1oZWFkbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMjRweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNnB4LzI4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNXB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC44MykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtaDZbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuNjcpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWJvZHktc3Ryb25nW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjAgMCAxMnB4fS5tYXQtc21hbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDEycHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjMwMCAxMTJweC8xMTJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDVlbTttYXJnaW46MCAwIDU2cHh9Lm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDU2cHgvNTZweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDJlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDQ1cHgvNDhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDA1ZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAzNHB4LzQwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDY0cHh9Lm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcmFpc2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0cm9rZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mbGF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmFiW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1taW5pLWZhYltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWJ1dHRvbi10b2dnbGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhcmQtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjIwcHh9Lm1hdC1jYXJkLXN1YnRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2hlY2tib3hbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNoZWNrYm94LWxheW91dFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoZWNrYm94LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoyNHB4fS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtdHJhaWxpbmctaWNvbi5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtcmVtb3ZlLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MThweH0ubWF0LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1oZWFkZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2VsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9vdGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2FsZW5kYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhbGVuZGFyLWJvZHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxM3B4fS5tYXQtY2FsZW5kYXItYm9keS1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FsZW5kYXItcGVyaW9kLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo0MDB9Lm1hdC1kaWFsb2ctdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjEyNTtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE1MCU7bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS41ZW07d2lkdGg6MS41ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNWVtIDA7Ym9yZGVyLXRvcDouODQzNzVlbSBzb2xpZCB0cmFuc3BhcmVudH0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6LTAuODQzNzVlbTtwYWRkaW5nLXRvcDouODQzNzVlbX0ubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo3NSU7bWFyZ2luLXRvcDouNjY2NjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjc5MTY2NjY2NjdlbSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNDM3NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMnB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjNlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM1MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjI4MTI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDouNTQxNjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjY2NjY2NjY2NjdlbSl9QG1lZGlhIHByaW50ey5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMmVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMWVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTJlbSkgc2NhbGUoMC43NSl9fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi4yNWVtIDAgLjc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMDkzNzVlbTttYXJnaW4tdG9wOi0wLjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjFlbSAwIDFlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS44NDM3NWVtO21hcmdpbi10b3A6LTAuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9aW5wdXQubWF0LWlucHV0LWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LTAuMDYyNWVtfS5tYXQtbWVudS1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtcGFnaW5hdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweH0ubWF0LXJhZGlvLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW19Lm1hdC1zbGlkZS10b2dnbGUtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdGVwcGVyLWhvcml6b250YWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXN0ZXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXN0ZXAtc3ViLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDpub3JtYWx9Lm1hdC1zdGVwLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LXN0ZXAtbGFiZWwtc2VsZWN0ZWRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRhYi1ncm91cFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdGFiLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10YWItbGlua1tfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowfS5tYXQtdG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB4O3BhZGRpbmctdG9wOjZweDtwYWRkaW5nLWJvdHRvbTo2cHh9Lm1hdC10b29sdGlwLWhhbmRzZXRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9Lm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE2cHh9Lm1hdC1vcHRncm91cC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1zaW1wbGUtc25hY2tiYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweH0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb25bX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjE7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo1MDB9Lm1hdC10cmVlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW5lc3RlZC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjQwMDtmb250LXNpemU6MTRweH0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmVtcHR5KXt0cmFuc2Zvcm06dHJhbnNsYXRlWigwKX0ubWF0LXJpcHBsZS5tYXQtcmlwcGxlLXVuYm91bmRlZFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItcmFkaXVzOjUwJTtwb2ludGVyLWV2ZW50czpub25lO3RyYW5zaXRpb246b3BhY2l0eSx0cmFuc2Zvcm0gMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpO3RyYW5zZm9ybTpzY2FsZSgwKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6bm9uZX0uY2RrLXZpc3VhbGx5LWhpZGRlbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjA7Y2xpcDpyZWN0KDAgMCAwIDApO2hlaWdodDoxcHg7bWFyZ2luOi0xcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwO291dGxpbmU6MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb2ludGVyLWV2ZW50czpub25lO3RvcDowO2xlZnQ6MDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTplbXB0eXtkaXNwbGF5Om5vbmV9LmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1wYW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czphdXRvO2JveC1zaXppbmc6Ym9yZGVyLWJveDt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O21heC13aWR0aDoxMDAlO21heC1oZWlnaHQ6MTAwJX0uY2RrLW92ZXJsYXktYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO3otaW5kZXg6MTAwMDtwb2ludGVyLWV2ZW50czphdXRvOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDt0cmFuc2l0aW9uOm9wYWNpdHkgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSk7b3BhY2l0eTowfS5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjF9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAuY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTouNn0uY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4zMil9LmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MH0uY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWluLXdpZHRoOjFweDttaW4taGVpZ2h0OjFweH0uY2RrLWdsb2JhbC1zY3JvbGxibG9ja1tfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7d2lkdGg6MTAwJTtvdmVyZmxvdy15OnNjcm9sbH1Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0e31Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZHt9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbHthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQgMHMgMW1zfS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOm5vdCg6LXdlYmtpdC1hdXRvZmlsbCl7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCAwcyAxbXN9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplW19uZ2NvbnRlbnQtJUNPTVAlXXtyZXNpemU6bm9uZX10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDphdXRvICFpbXBvcnRhbnQ7b3ZlcmZsb3c6aGlkZGVuICFpbXBvcnRhbnR9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZy1maXJlZm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDowICFpbXBvcnRhbnR9Lm1hdC1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtbWRjLWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9W19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmZsZXg7Zm9udC1zaXplOjEzcHh9bWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7ZmxleDpub25lO21hcmdpbi1yaWdodDo1cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBtYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9aW5wdXRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6aW5oZXJpdDtjYXJldC1jb2xvcjpjdXJyZW50Q29sb3I7Y29sb3I6Y3VycmVudENvbG9yO2ZvbnQ6aW5oZXJpdDtib3JkZXI6bm9uZTtvdXRsaW5lOm5vbmU7cGFkZGluZzowO2ZsZXgtZ3JvdzoxfSddfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihnMSxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJ0Yi1maWx0ZXItaW5wdXQiLHRlbXBsYXRlOidcbiAgICA8bWF0LWljb24gc3ZnSWNvbj0ic2VhcmNoXzI0cHgiPjwvbWF0LWljb24+XG5cbiAgICBceDNjIS0tIE5vdGU6IHRvIGFsbG93IGZhbHN5IFwnbWF0QXV0b2NvbXBsZXRlXCcgdmFsdWVzLCB3ZSBuZWVkIFwnbWF0QXV0b2NvbXBsZXRlRGlzYWJsZWRcJ1xuICAgIHRvIHByZXZlbnQgcnVudGltZSBlcnJvcnMuIC0tXHgzZVxuICAgIDxpbnB1dFxuICAgICAgdHlwZT0idGV4dCJcbiAgICAgIGF1dG9jb21wbGV0ZT0ib2ZmIlxuICAgICAgW3BsYWNlaG9sZGVyXT0icGxhY2Vob2xkZXIiXG4gICAgICBbbWF0QXV0b2NvbXBsZXRlXT0ibWF0QXV0b2NvbXBsZXRlIlxuICAgICAgW21hdEF1dG9jb21wbGV0ZURpc2FibGVkXT0iIW1hdEF1dG9jb21wbGV0ZSJcbiAgICAgIFt2YWx1ZV09InZhbHVlIlxuICAgICAgKGtleXVwKT0ib25JbnB1dEtleVVwKCRldmVudCkiXG4gICAgLz5cbiAgJyxzdHlsZVVybHM6WyJmaWx0ZXJfaW5wdXRfY29tcG9uZW50LmNzcyJdfV19XSxudWxsLHt2YWx1ZTpbe3R5cGU6eV99XSxtYXRBdXRvY29tcGxldGU6W3t0eXBlOnlffV0scGxhY2Vob2xkZXI6W3t0eXBlOnlffV0sYXV0b2NvbXBsZXRlVHJpZ2dlcjpbe3R5cGU6RnIsYXJnczpbbTFdfV19KTtjb25zdCBDMT0iLm1hdC1wcm9ncmVzcy1zcGlubmVye2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6aGlkZGVufS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBzdmd7cG9zaXRpb246YWJzb2x1dGU7dHJhbnNmb3JtOnJvdGF0ZSgtOTBkZWcpO3RvcDowO2xlZnQ6MDt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlcjtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBjaXJjbGV7ZmlsbDp0cmFuc3BhcmVudDt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlcjt0cmFuc2l0aW9uOnN0cm9rZS1kYXNob2Zmc2V0IDIyNW1zIGxpbmVhcn0uX21hdC1hbmltYXRpb24tbm9vcGFibGUubWF0LXByb2dyZXNzLXNwaW5uZXIgY2lyY2xle3RyYW5zaXRpb246bm9uZTthbmltYXRpb246bm9uZX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBjaXJjbGV7c3Ryb2tlOmN1cnJlbnRDb2xvcjtzdHJva2U6Q2FudmFzVGV4dH0ubWF0LXByb2dyZXNzLXNwaW5uZXIubWF0LXByb2dyZXNzLXNwaW5uZXItaW5kZXRlcm1pbmF0ZS1hbmltYXRpb25bbW9kZT1pbmRldGVybWluYXRlXSBzdmd7YW5pbWF0aW9uOm1hdC1wcm9ncmVzcy1zcGlubmVyLWxpbmVhci1yb3RhdGUgMjAwMG1zIGxpbmVhciBpbmZpbml0ZX0uX21hdC1hbmltYXRpb24tbm9vcGFibGUubWF0LXByb2dyZXNzLXNwaW5uZXIubWF0LXByb2dyZXNzLXNwaW5uZXItaW5kZXRlcm1pbmF0ZS1hbmltYXRpb25bbW9kZT1pbmRldGVybWluYXRlXSBzdmd7dHJhbnNpdGlvbjpub25lO2FuaW1hdGlvbjpub25lfS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci1pbmRldGVybWluYXRlLWFuaW1hdGlvblttb2RlPWluZGV0ZXJtaW5hdGVdIGNpcmNsZXt0cmFuc2l0aW9uLXByb3BlcnR5OnN0cm9rZTthbmltYXRpb24tZHVyYXRpb246NDAwMG1zO2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuMjUsIDEpO2FuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6aW5maW5pdGV9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlLm1hdC1wcm9ncmVzcy1zcGlubmVyLm1hdC1wcm9ncmVzcy1zcGlubmVyLWluZGV0ZXJtaW5hdGUtYW5pbWF0aW9uW21vZGU9aW5kZXRlcm1pbmF0ZV0gY2lyY2xle3RyYW5zaXRpb246bm9uZTthbmltYXRpb246bm9uZX0ubWF0LXByb2dyZXNzLXNwaW5uZXIubWF0LXByb2dyZXNzLXNwaW5uZXItaW5kZXRlcm1pbmF0ZS1mYWxsYmFjay1hbmltYXRpb25bbW9kZT1pbmRldGVybWluYXRlXSBzdmd7YW5pbWF0aW9uOm1hdC1wcm9ncmVzcy1zcGlubmVyLXN0cm9rZS1yb3RhdGUtZmFsbGJhY2sgMTAwMDBtcyBjdWJpYy1iZXppZXIoMC44NywgMC4wMywgMC4zMywgMSkgaW5maW5pdGV9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlLm1hdC1wcm9ncmVzcy1zcGlubmVyLm1hdC1wcm9ncmVzcy1zcGlubmVyLWluZGV0ZXJtaW5hdGUtZmFsbGJhY2stYW5pbWF0aW9uW21vZGU9aW5kZXRlcm1pbmF0ZV0gc3Zne3RyYW5zaXRpb246bm9uZTthbmltYXRpb246bm9uZX0ubWF0LXByb2dyZXNzLXNwaW5uZXIubWF0LXByb2dyZXNzLXNwaW5uZXItaW5kZXRlcm1pbmF0ZS1mYWxsYmFjay1hbmltYXRpb25bbW9kZT1pbmRldGVybWluYXRlXSBjaXJjbGV7dHJhbnNpdGlvbi1wcm9wZXJ0eTpzdHJva2V9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlLm1hdC1wcm9ncmVzcy1zcGlubmVyLm1hdC1wcm9ncmVzcy1zcGlubmVyLWluZGV0ZXJtaW5hdGUtZmFsbGJhY2stYW5pbWF0aW9uW21vZGU9aW5kZXRlcm1pbmF0ZV0gY2lyY2xle3RyYW5zaXRpb246bm9uZTthbmltYXRpb246bm9uZX1Aa2V5ZnJhbWVzIG1hdC1wcm9ncmVzcy1zcGlubmVyLWxpbmVhci1yb3RhdGV7MCV7dHJhbnNmb3JtOnJvdGF0ZSgwZGVnKX0xMDAle3RyYW5zZm9ybTpyb3RhdGUoMzYwZGVnKX19QGtleWZyYW1lcyBtYXQtcHJvZ3Jlc3Mtc3Bpbm5lci1zdHJva2Utcm90YXRlLTEwMHswJXtzdHJva2UtZGFzaG9mZnNldDoyNjguNjA2MTcxNTc1cHg7dHJhbnNmb3JtOnJvdGF0ZSgwKX0xMi41JXtzdHJva2UtZGFzaG9mZnNldDo1Ni41NDg2Njc3cHg7dHJhbnNmb3JtOnJvdGF0ZSgwKX0xMi41MDAxJXtzdHJva2UtZGFzaG9mZnNldDo1Ni41NDg2Njc3cHg7dHJhbnNmb3JtOnJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoNzIuNWRlZyl9MjUle3N0cm9rZS1kYXNob2Zmc2V0OjI2OC42MDYxNzE1NzVweDt0cmFuc2Zvcm06cm90YXRlWCgxODBkZWcpIHJvdGF0ZSg3Mi41ZGVnKX0yNS4wMDAxJXtzdHJva2UtZGFzaG9mZnNldDoyNjguNjA2MTcxNTc1cHg7dHJhbnNmb3JtOnJvdGF0ZSgyNzBkZWcpfTM3LjUle3N0cm9rZS1kYXNob2Zmc2V0OjU2LjU0ODY2NzdweDt0cmFuc2Zvcm06cm90YXRlKDI3MGRlZyl9MzcuNTAwMSV7c3Ryb2tlLWRhc2hvZmZzZXQ6NTYuNTQ4NjY3N3B4O3RyYW5zZm9ybTpyb3RhdGVYKDE4MGRlZykgcm90YXRlKDE2MS41ZGVnKX01MCV7c3Ryb2tlLWRhc2hvZmZzZXQ6MjY4LjYwNjE3MTU3NXB4O3RyYW5zZm9ybTpyb3RhdGVYKDE4MGRlZykgcm90YXRlKDE2MS41ZGVnKX01MC4wMDAxJXtzdHJva2UtZGFzaG9mZnNldDoyNjguNjA2MTcxNTc1cHg7dHJhbnNmb3JtOnJvdGF0ZSgxODBkZWcpfTYyLjUle3N0cm9rZS1kYXNob2Zmc2V0OjU2LjU0ODY2NzdweDt0cmFuc2Zvcm06cm90YXRlKDE4MGRlZyl9NjIuNTAwMSV7c3Ryb2tlLWRhc2hvZmZzZXQ6NTYuNTQ4NjY3N3B4O3RyYW5zZm9ybTpyb3RhdGVYKDE4MGRlZykgcm90YXRlKDI1MS41ZGVnKX03NSV7c3Ryb2tlLWRhc2hvZmZzZXQ6MjY4LjYwNjE3MTU3NXB4O3RyYW5zZm9ybTpyb3RhdGVYKDE4MGRlZykgcm90YXRlKDI1MS41ZGVnKX03NS4wMDAxJXtzdHJva2UtZGFzaG9mZnNldDoyNjguNjA2MTcxNTc1cHg7dHJhbnNmb3JtOnJvdGF0ZSg5MGRlZyl9ODcuNSV7c3Ryb2tlLWRhc2hvZmZzZXQ6NTYuNTQ4NjY3N3B4O3RyYW5zZm9ybTpyb3RhdGUoOTBkZWcpfTg3LjUwMDEle3N0cm9rZS1kYXNob2Zmc2V0OjU2LjU0ODY2NzdweDt0cmFuc2Zvcm06cm90YXRlWCgxODBkZWcpIHJvdGF0ZSgzNDEuNWRlZyl9MTAwJXtzdHJva2UtZGFzaG9mZnNldDoyNjguNjA2MTcxNTc1cHg7dHJhbnNmb3JtOnJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoMzQxLjVkZWcpfX1Aa2V5ZnJhbWVzIG1hdC1wcm9ncmVzcy1zcGlubmVyLXN0cm9rZS1yb3RhdGUtZmFsbGJhY2t7MCV7dHJhbnNmb3JtOnJvdGF0ZSgwZGVnKX0yNSV7dHJhbnNmb3JtOnJvdGF0ZSgxMTcwZGVnKX01MCV7dHJhbnNmb3JtOnJvdGF0ZSgyMzQwZGVnKX03NSV7dHJhbnNmb3JtOnJvdGF0ZSgzNTEwZGVnKX0xMDAle3RyYW5zZm9ybTpyb3RhdGUoNDY4MGRlZyl9fVxuIixNMT1JeihjbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLl9lbGVtZW50UmVmPXR9fSwicHJpbWFyeSIpLHYxPW5ldyBOcigibWF0LXByb2dyZXNzLXNwaW5uZXItZGVmYXVsdC1vcHRpb25zIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbiB4MSgpe3JldHVybntkaWFtZXRlcjoxMDB9fX0pO2NsYXNzIE8xIGV4dGVuZHMgTTF7Y29uc3RydWN0b3IodCxlLG4sbyxpKXtzdXBlcih0KSx0aGlzLl9lbGVtZW50UmVmPXQsdGhpcy5fZG9jdW1lbnQ9bix0aGlzLl9kaWFtZXRlcj0xMDAsdGhpcy5fdmFsdWU9MCx0aGlzLl9mYWxsYmFja0FuaW1hdGlvbj0hMSx0aGlzLm1vZGU9ImRldGVybWluYXRlIjtjb25zdCBhPU8xLl9kaWFtZXRlcnM7dGhpcy5fc3Bpbm5lckFuaW1hdGlvbkxhYmVsPXRoaXMuX2dldFNwaW5uZXJBbmltYXRpb25MYWJlbCgpLGEuaGFzKG4uaGVhZCl8fGEuc2V0KG4uaGVhZCxuZXcgU2V0KFsxMDBdKSksdGhpcy5fZmFsbGJhY2tBbmltYXRpb249ZS5FREdFfHxlLlRSSURFTlQsdGhpcy5fbm9vcEFuaW1hdGlvbnM9Ik5vb3BBbmltYXRpb25zIj09PW8mJiEhaSYmIWkuX2ZvcmNlQW5pbWF0aW9ucyxpJiYoaS5kaWFtZXRlciYmKHRoaXMuZGlhbWV0ZXI9aS5kaWFtZXRlciksaS5zdHJva2VXaWR0aCYmKHRoaXMuc3Ryb2tlV2lkdGg9aS5zdHJva2VXaWR0aCkpfWdldCBkaWFtZXRlcigpe3JldHVybiB0aGlzLl9kaWFtZXRlcn1zZXQgZGlhbWV0ZXIodCl7dGhpcy5fZGlhbWV0ZXI9c0kodCksdGhpcy5fc3Bpbm5lckFuaW1hdGlvbkxhYmVsPXRoaXMuX2dldFNwaW5uZXJBbmltYXRpb25MYWJlbCgpLCF0aGlzLl9mYWxsYmFja0FuaW1hdGlvbiYmdGhpcy5fc3R5bGVSb290JiZ0aGlzLl9hdHRhY2hTdHlsZU5vZGUoKX1nZXQgc3Ryb2tlV2lkdGgoKXtyZXR1cm4gdGhpcy5fc3Ryb2tlV2lkdGh8fHRoaXMuZGlhbWV0ZXIvMTB9c2V0IHN0cm9rZVdpZHRoKHQpe3RoaXMuX3N0cm9rZVdpZHRoPXNJKHQpfWdldCB2YWx1ZSgpe3JldHVybiJkZXRlcm1pbmF0ZSI9PT10aGlzLm1vZGU/dGhpcy5fdmFsdWU6MH1zZXQgdmFsdWUodCl7dGhpcy5fdmFsdWU9TWF0aC5tYXgoMCxNYXRoLm1pbigxMDAsc0kodCkpKX1uZ09uSW5pdCgpe2NvbnN0IHQ9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O3RoaXMuX3N0eWxlUm9vdD1QSSh0KXx8dGhpcy5fZG9jdW1lbnQuaGVhZCx0aGlzLl9hdHRhY2hTdHlsZU5vZGUoKSx0LmNsYXNzTGlzdC5hZGQoYG1hdC1wcm9ncmVzcy1zcGlubmVyLWluZGV0ZXJtaW5hdGUke3RoaXMuX2ZhbGxiYWNrQW5pbWF0aW9uPyItZmFsbGJhY2siOiIifS1hbmltYXRpb25gKX1fZ2V0Q2lyY2xlUmFkaXVzKCl7cmV0dXJuKHRoaXMuZGlhbWV0ZXItMTApLzJ9X2dldFZpZXdCb3goKXtjb25zdCB0PTIqdGhpcy5fZ2V0Q2lyY2xlUmFkaXVzKCkrdGhpcy5zdHJva2VXaWR0aDtyZXR1cm5gMCAwICR7dH0gJHt0fWB9X2dldFN0cm9rZUNpcmN1bWZlcmVuY2UoKXtyZXR1cm4gMipNYXRoLlBJKnRoaXMuX2dldENpcmNsZVJhZGl1cygpfV9nZXRTdHJva2VEYXNoT2Zmc2V0KCl7cmV0dXJuImRldGVybWluYXRlIj09PXRoaXMubW9kZT90aGlzLl9nZXRTdHJva2VDaXJjdW1mZXJlbmNlKCkqKDEwMC10aGlzLl92YWx1ZSkvMTAwOnRoaXMuX2ZhbGxiYWNrQW5pbWF0aW9uJiYiaW5kZXRlcm1pbmF0ZSI9PT10aGlzLm1vZGU/LjIqdGhpcy5fZ2V0U3Ryb2tlQ2lyY3VtZmVyZW5jZSgpOm51bGx9X2dldENpcmNsZVN0cm9rZVdpZHRoKCl7cmV0dXJuIHRoaXMuc3Ryb2tlV2lkdGgvdGhpcy5kaWFtZXRlcioxMDB9X2F0dGFjaFN0eWxlTm9kZSgpe2NvbnN0IHQ9dGhpcy5fc3R5bGVSb290LGU9dGhpcy5fZGlhbWV0ZXIsbj1PMS5fZGlhbWV0ZXJzO2xldCBvPW4uZ2V0KHQpO2lmKCFvfHwhby5oYXMoZSkpe2NvbnN0IGk9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtpLnNldEF0dHJpYnV0ZSgibWF0LXNwaW5uZXItYW5pbWF0aW9uIix0aGlzLl9zcGlubmVyQW5pbWF0aW9uTGFiZWwpLGkudGV4dENvbnRlbnQ9dGhpcy5fZ2V0QW5pbWF0aW9uVGV4dCgpLHQuYXBwZW5kQ2hpbGQoaSksb3x8KG89bmV3IFNldCxuLnNldCh0LG8pKSxvLmFkZChlKX19X2dldEFuaW1hdGlvblRleHQoKXtjb25zdCB0PXRoaXMuX2dldFN0cm9rZUNpcmN1bWZlcmVuY2UoKTtyZXR1cm4iXG4gQGtleWZyYW1lcyBtYXQtcHJvZ3Jlc3Mtc3Bpbm5lci1zdHJva2Utcm90YXRlLURJQU1FVEVSIHtcbiAgICAwJSAgICAgIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IFNUQVJUX1ZBTFVFOyAgdHJhbnNmb3JtOiByb3RhdGUoMCk7IH1cbiAgICAxMi41JSAgIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IEVORF9WQUxVRTsgICAgdHJhbnNmb3JtOiByb3RhdGUoMCk7IH1cbiAgICAxMi41MDAxJSAgeyBzdHJva2UtZGFzaG9mZnNldDogRU5EX1ZBTFVFOyAgICB0cmFuc2Zvcm06IHJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoNzIuNWRlZyk7IH1cbiAgICAyNSUgICAgIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IFNUQVJUX1ZBTFVFOyAgdHJhbnNmb3JtOiByb3RhdGVYKDE4MGRlZykgcm90YXRlKDcyLjVkZWcpOyB9XG5cbiAgICAyNS4wMDAxJSAgIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IFNUQVJUX1ZBTFVFOyAgdHJhbnNmb3JtOiByb3RhdGUoMjcwZGVnKTsgfVxuICAgIDM3LjUlICAgeyBzdHJva2UtZGFzaG9mZnNldDogRU5EX1ZBTFVFOyAgICB0cmFuc2Zvcm06IHJvdGF0ZSgyNzBkZWcpOyB9XG4gICAgMzcuNTAwMSUgIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IEVORF9WQUxVRTsgICAgdHJhbnNmb3JtOiByb3RhdGVYKDE4MGRlZykgcm90YXRlKDE2MS41ZGVnKTsgfVxuICAgIDUwJSAgICAgeyBzdHJva2UtZGFzaG9mZnNldDogU1RBUlRfVkFMVUU7ICB0cmFuc2Zvcm06IHJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoMTYxLjVkZWcpOyB9XG5cbiAgICA1MC4wMDAxJSAgeyBzdHJva2UtZGFzaG9mZnNldDogU1RBUlRfVkFMVUU7ICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpOyB9XG4gICAgNjIuNSUgICB7IHN0cm9rZS1kYXNob2Zmc2V0OiBFTkRfVkFMVUU7ICAgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7IH1cbiAgICA2Mi41MDAxJSAgeyBzdHJva2UtZGFzaG9mZnNldDogRU5EX1ZBTFVFOyAgICB0cmFuc2Zvcm06IHJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoMjUxLjVkZWcpOyB9XG4gICAgNzUlICAgICB7IHN0cm9rZS1kYXNob2Zmc2V0OiBTVEFSVF9WQUxVRTsgIHRyYW5zZm9ybTogcm90YXRlWCgxODBkZWcpIHJvdGF0ZSgyNTEuNWRlZyk7IH1cblxuICAgIDc1LjAwMDElICB7IHN0cm9rZS1kYXNob2Zmc2V0OiBTVEFSVF9WQUxVRTsgIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsgfVxuICAgIDg3LjUlICAgeyBzdHJva2UtZGFzaG9mZnNldDogRU5EX1ZBTFVFOyAgICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7IH1cbiAgICA4Ny41MDAxJSAgeyBzdHJva2UtZGFzaG9mZnNldDogRU5EX1ZBTFVFOyAgICB0cmFuc2Zvcm06IHJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoMzQxLjVkZWcpOyB9XG4gICAgMTAwJSAgICB7IHN0cm9rZS1kYXNob2Zmc2V0OiBTVEFSVF9WQUxVRTsgIHRyYW5zZm9ybTogcm90YXRlWCgxODBkZWcpIHJvdGF0ZSgzNDEuNWRlZyk7IH1cbiAgfVxuIi5yZXBsYWNlKC9TVEFSVF9WQUxVRS9nLCIiKy45NSp0KS5yZXBsYWNlKC9FTkRfVkFMVUUvZywiIisuMip0KS5yZXBsYWNlKC9ESUFNRVRFUi9nLGAke3RoaXMuX3NwaW5uZXJBbmltYXRpb25MYWJlbH1gKX1fZ2V0U3Bpbm5lckFuaW1hdGlvbkxhYmVsKCl7cmV0dXJuIHRoaXMuZGlhbWV0ZXIudG9TdHJpbmcoKS5yZXBsYWNlKCIuIiwiXyIpfX1PMS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8TzEpKE11KGNoKSxNdShmSSksTXUoVUMsOCksTXUoTncsOCksTXUodjEpKX0sTzEuybVjbXA9VW8oe3R5cGU6TzEsc2VsZWN0b3JzOltbIm1hdC1wcm9ncmVzcy1zcGlubmVyIl1dLGhvc3RBdHRyczpbInJvbGUiLCJwcm9ncmVzc2JhciIsInRhYmluZGV4IiwiLTEiLDEsIm1hdC1wcm9ncmVzcy1zcGlubmVyIl0saG9zdFZhcnM6MTAsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsyJmUmJihObSgiYXJpYS12YWx1ZW1pbiIsImRldGVybWluYXRlIj09PW4ubW9kZT8wOm51bGwpKCJhcmlhLXZhbHVlbWF4IiwiZGV0ZXJtaW5hdGUiPT09bi5tb2RlPzEwMDpudWxsKSgiYXJpYS12YWx1ZW5vdyIsImRldGVybWluYXRlIj09PW4ubW9kZT9uLnZhbHVlOm51bGwpKCJtb2RlIixuLm1vZGUpLG9mKCJ3aWR0aCIsbi5kaWFtZXRlciwicHgiKSgiaGVpZ2h0IixuLmRpYW1ldGVyLCJweCIpLGFmKCJfbWF0LWFuaW1hdGlvbi1ub29wYWJsZSIsbi5fbm9vcEFuaW1hdGlvbnMpKX0saW5wdXRzOntjb2xvcjoiY29sb3IiLG1vZGU6Im1vZGUiLGRpYW1ldGVyOiJkaWFtZXRlciIsc3Ryb2tlV2lkdGg6InN0cm9rZVdpZHRoIix2YWx1ZToidmFsdWUifSxleHBvcnRBczpbIm1hdFByb2dyZXNzU3Bpbm5lciJdLGZlYXR1cmVzOltnbV0sZGVjbHM6Myx2YXJzOjgsY29uc3RzOltbInByZXNlcnZlQXNwZWN0UmF0aW8iLCJ4TWlkWU1pZCBtZWV0IiwiZm9jdXNhYmxlIiwiZmFsc2UiLCJhcmlhLWhpZGRlbiIsInRydWUiLDMsIm5nU3dpdGNoIl0sWyJjeCIsIjUwJSIsImN5IiwiNTAlIiwzLCJhbmltYXRpb24tbmFtZSIsInN0cm9rZS1kYXNob2Zmc2V0Iiwic3Ryb2tlLWRhc2hhcnJheSIsInN0cm9rZS13aWR0aCIsNCwibmdTd2l0Y2hDYXNlIl0sWyJjeCIsIjUwJSIsImN5IiwiNTAlIiwzLCJzdHJva2UtZGFzaG9mZnNldCIsInN0cm9rZS1kYXNoYXJyYXkiLCJzdHJva2Utd2lkdGgiLDQsIm5nU3dpdGNoQ2FzZSJdLFsiY3giLCI1MCUiLCJjeSIsIjUwJSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoSGEoKSxPdSgwLCJzdmciLDApLFdtKDEsaDEsMSw5LCJjaXJjbGUiLDEpLFdtKDIsYjEsMSw3LCJjaXJjbGUiLDIpLFB1KCkpLDImZSYmKG9mKCJ3aWR0aCIsbi5kaWFtZXRlciwicHgiKSgiaGVpZ2h0IixuLmRpYW1ldGVyLCJweCIpLHZ1KCJuZ1N3aXRjaCIsImluZGV0ZXJtaW5hdGUiPT09bi5tb2RlKSxObSgidmlld0JveCIsbi5fZ2V0Vmlld0JveCgpKSxKYygxKSx2dSgibmdTd2l0Y2hDYXNlIiwhMCksSmMoMSksdnUoIm5nU3dpdGNoQ2FzZSIsITEpKX0sZGlyZWN0aXZlczpbY3YsZHZdLHN0eWxlczpbQzFdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLE8xLl9kaWFtZXRlcnM9bmV3IFdlYWtNYXAsTzEuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpjaH0se3R5cGU6Zkl9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbVUNdfV19LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbTnddfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOlt2MV19XX1dLE8xLnByb3BEZWNvcmF0b3JzPXtkaWFtZXRlcjpbe3R5cGU6eV99XSxzdHJva2VXaWR0aDpbe3R5cGU6eV99XSxtb2RlOlt7dHlwZTp5X31dLHZhbHVlOlt7dHlwZTp5X31dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKE8xLFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6Im1hdC1wcm9ncmVzcy1zcGlubmVyIixleHBvcnRBczoibWF0UHJvZ3Jlc3NTcGlubmVyIixob3N0Ontyb2xlOiJwcm9ncmVzc2JhciIsY2xhc3M6Im1hdC1wcm9ncmVzcy1zcGlubmVyIix0YWJpbmRleDoiLTEiLCJbY2xhc3MuX21hdC1hbmltYXRpb24tbm9vcGFibGVdIjoiX25vb3BBbmltYXRpb25zIiwiW3N0eWxlLndpZHRoLnB4XSI6ImRpYW1ldGVyIiwiW3N0eWxlLmhlaWdodC5weF0iOiJkaWFtZXRlciIsIlthdHRyLmFyaWEtdmFsdWVtaW5dIjonbW9kZSA9PT0gImRldGVybWluYXRlIiA/IDAgOiBudWxsJywiW2F0dHIuYXJpYS12YWx1ZW1heF0iOidtb2RlID09PSAiZGV0ZXJtaW5hdGUiID8gMTAwIDogbnVsbCcsIlthdHRyLmFyaWEtdmFsdWVub3ddIjonbW9kZSA9PT0gImRldGVybWluYXRlIiA/IHZhbHVlIDogbnVsbCcsIlthdHRyLm1vZGVdIjoibW9kZSJ9LGlucHV0czpbImNvbG9yIl0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgcHJlc2VydmVBc3BlY3RSYXRpbyBvZiB4TWlkWU1pZCBtZWV0IGFzIHRoZSBjZW50ZXIgb2YgdGhlIHZpZXdwb3J0IGlzIHRoZSBjaXJjbGVcJ3NcbiAgY2VudGVyLiBUaGUgY2VudGVyIG9mIHRoZSBjaXJjbGUgd2lsbCByZW1haW4gYXQgdGhlIGNlbnRlciBvZiB0aGUgbWF0LXByb2dyZXNzLXNwaW5uZXJcbiAgZWxlbWVudCBjb250YWluaW5nIHRoZSBTVkcuIGBmb2N1c2FibGU9ImZhbHNlImAgcHJldmVudHMgSUUgZnJvbSBhbGxvd2luZyB0aGUgdXNlciB0b1xuICB0YWIgaW50byB0aGUgU1ZHIGVsZW1lbnQuXG4tLVx4M2Vcblx4M2MhLS1cbiAgQWxsIGNoaWxkcmVuIG5lZWQgdG8gYmUgaGlkZGVuIGZvciBzY3JlZW4gcmVhZGVycyBpbiBvcmRlciB0byBzdXBwb3J0IENocm9tZVZveC5cbiAgTW9yZSBjb250ZXh0IGluIHRoZSBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvY29tcG9uZW50cy9pc3N1ZXMvMjIxNjUuXG4tLVx4M2VcbjxzdmdcbiAgW3N0eWxlLndpZHRoLnB4XT0iZGlhbWV0ZXIiXG4gIFtzdHlsZS5oZWlnaHQucHhdPSJkaWFtZXRlciJcbiAgW2F0dHIudmlld0JveF09Il9nZXRWaWV3Qm94KCkiXG4gIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIG1lZXQiXG4gIGZvY3VzYWJsZT0iZmFsc2UiXG4gIFtuZ1N3aXRjaF09Im1vZGUgPT09IFwnaW5kZXRlcm1pbmF0ZVwnIlxuICBhcmlhLWhpZGRlbj0idHJ1ZSI+XG5cbiAgXHgzYyEtLVxuICAgIFRlY2huaWNhbGx5IHdlIGNhbiByZXVzZSB0aGUgc2FtZSBgY2lyY2xlYCBlbGVtZW50LCBob3dldmVyIFNhZmFyaSBoYXMgYW4gaXNzdWUgdGhhdCBicmVha3NcbiAgICB0aGUgU1ZHIHJlbmRlcmluZyBpbiBkZXRlcm1pbmF0ZSBtb2RlLCBhZnRlciBzd2l0Y2hpbmcgYmV0d2VlbiBpbmRldGVybWluYXRlIGFuZCBkZXRlcm1pbmF0ZS5cbiAgICBVc2luZyBhIGRpZmZlcmVudCBlbGVtZW50IGF2b2lkcyB0aGUgaXNzdWUuIEFuIGFsdGVybmF0aXZlIHRvIHRoaXMgaXMgYWRkaW5nIGBkaXNwbGF5OiBub25lYFxuICAgIGZvciBhIHNwbGl0IHNlY29uZCBhbmQgdGhlbiByZW1vdmluZyBpdCB3aGVuIHN3aXRjaGluZyBiZXR3ZWVuIG1vZGVzLCBidXQgaXRcJ3MgaGFyZCB0byBrbm93XG4gICAgZm9yIGhvdyBsb25nIHRvIGhpZGUgdGhlIGVsZW1lbnQgYW5kIGl0IGNhbiBjYXVzZSB0aGUgVUkgdG8gYmxpbmsuXG4gIC0tXHgzZVxuICA8Y2lyY2xlXG4gICAgKm5nU3dpdGNoQ2FzZT0idHJ1ZSJcbiAgICBjeD0iNTAlIlxuICAgIGN5PSI1MCUiXG4gICAgW2F0dHIucl09Il9nZXRDaXJjbGVSYWRpdXMoKSJcbiAgICBbc3R5bGUuYW5pbWF0aW9uLW5hbWVdPSJcJ21hdC1wcm9ncmVzcy1zcGlubmVyLXN0cm9rZS1yb3RhdGUtXCcgKyBfc3Bpbm5lckFuaW1hdGlvbkxhYmVsIlxuICAgIFtzdHlsZS5zdHJva2UtZGFzaG9mZnNldC5weF09Il9nZXRTdHJva2VEYXNoT2Zmc2V0KCkiXG4gICAgW3N0eWxlLnN0cm9rZS1kYXNoYXJyYXkucHhdPSJfZ2V0U3Ryb2tlQ2lyY3VtZmVyZW5jZSgpIlxuICAgIFtzdHlsZS5zdHJva2Utd2lkdGguJV09Il9nZXRDaXJjbGVTdHJva2VXaWR0aCgpIj48L2NpcmNsZT5cblxuICA8Y2lyY2xlXG4gICAgKm5nU3dpdGNoQ2FzZT0iZmFsc2UiXG4gICAgY3g9IjUwJSJcbiAgICBjeT0iNTAlIlxuICAgIFthdHRyLnJdPSJfZ2V0Q2lyY2xlUmFkaXVzKCkiXG4gICAgW3N0eWxlLnN0cm9rZS1kYXNob2Zmc2V0LnB4XT0iX2dldFN0cm9rZURhc2hPZmZzZXQoKSJcbiAgICBbc3R5bGUuc3Ryb2tlLWRhc2hhcnJheS5weF09Il9nZXRTdHJva2VDaXJjdW1mZXJlbmNlKCkiXG4gICAgW3N0eWxlLnN0cm9rZS13aWR0aC4lXT0iX2dldENpcmNsZVN0cm9rZVdpZHRoKCkiPjwvY2lyY2xlPlxuPC9zdmc+XG4nLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2gsZW5jYXBzdWxhdGlvbjpQby5Ob25lLHN0eWxlczpbIi5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lcntkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbn0ubWF0LXByb2dyZXNzLXNwaW5uZXIgc3Zne3Bvc2l0aW9uOmFic29sdXRlO3RyYW5zZm9ybTpyb3RhdGUoLTkwZGVnKTt0b3A6MDtsZWZ0OjA7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXI7b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LXByb2dyZXNzLXNwaW5uZXIgY2lyY2xle2ZpbGw6dHJhbnNwYXJlbnQ7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXI7dHJhbnNpdGlvbjpzdHJva2UtZGFzaG9mZnNldCAyMjVtcyBsaW5lYXJ9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlLm1hdC1wcm9ncmVzcy1zcGlubmVyIGNpcmNsZXt0cmFuc2l0aW9uOm5vbmU7YW5pbWF0aW9uOm5vbmV9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXByb2dyZXNzLXNwaW5uZXIgY2lyY2xle3N0cm9rZTpjdXJyZW50Q29sb3I7c3Ryb2tlOkNhbnZhc1RleHR9Lm1hdC1wcm9ncmVzcy1zcGlubmVyLm1hdC1wcm9ncmVzcy1zcGlubmVyLWluZGV0ZXJtaW5hdGUtYW5pbWF0aW9uW21vZGU9aW5kZXRlcm1pbmF0ZV0gc3Zne2FuaW1hdGlvbjptYXQtcHJvZ3Jlc3Mtc3Bpbm5lci1saW5lYXItcm90YXRlIDIwMDBtcyBsaW5lYXIgaW5maW5pdGV9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlLm1hdC1wcm9ncmVzcy1zcGlubmVyLm1hdC1wcm9ncmVzcy1zcGlubmVyLWluZGV0ZXJtaW5hdGUtYW5pbWF0aW9uW21vZGU9aW5kZXRlcm1pbmF0ZV0gc3Zne3RyYW5zaXRpb246bm9uZTthbmltYXRpb246bm9uZX0ubWF0LXByb2dyZXNzLXNwaW5uZXIubWF0LXByb2dyZXNzLXNwaW5uZXItaW5kZXRlcm1pbmF0ZS1hbmltYXRpb25bbW9kZT1pbmRldGVybWluYXRlXSBjaXJjbGV7dHJhbnNpdGlvbi1wcm9wZXJ0eTpzdHJva2U7YW5pbWF0aW9uLWR1cmF0aW9uOjQwMDBtczthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLjM1LCAwLCAwLjI1LCAxKTthbmltYXRpb24taXRlcmF0aW9uLWNvdW50OmluZmluaXRlfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci1pbmRldGVybWluYXRlLWFuaW1hdGlvblttb2RlPWluZGV0ZXJtaW5hdGVdIGNpcmNsZXt0cmFuc2l0aW9uOm5vbmU7YW5pbWF0aW9uOm5vbmV9Lm1hdC1wcm9ncmVzcy1zcGlubmVyLm1hdC1wcm9ncmVzcy1zcGlubmVyLWluZGV0ZXJtaW5hdGUtZmFsbGJhY2stYW5pbWF0aW9uW21vZGU9aW5kZXRlcm1pbmF0ZV0gc3Zne2FuaW1hdGlvbjptYXQtcHJvZ3Jlc3Mtc3Bpbm5lci1zdHJva2Utcm90YXRlLWZhbGxiYWNrIDEwMDAwbXMgY3ViaWMtYmV6aWVyKDAuODcsIDAuMDMsIDAuMzMsIDEpIGluZmluaXRlfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci1pbmRldGVybWluYXRlLWZhbGxiYWNrLWFuaW1hdGlvblttb2RlPWluZGV0ZXJtaW5hdGVdIHN2Z3t0cmFuc2l0aW9uOm5vbmU7YW5pbWF0aW9uOm5vbmV9Lm1hdC1wcm9ncmVzcy1zcGlubmVyLm1hdC1wcm9ncmVzcy1zcGlubmVyLWluZGV0ZXJtaW5hdGUtZmFsbGJhY2stYW5pbWF0aW9uW21vZGU9aW5kZXRlcm1pbmF0ZV0gY2lyY2xle3RyYW5zaXRpb24tcHJvcGVydHk6c3Ryb2tlfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci1pbmRldGVybWluYXRlLWZhbGxiYWNrLWFuaW1hdGlvblttb2RlPWluZGV0ZXJtaW5hdGVdIGNpcmNsZXt0cmFuc2l0aW9uOm5vbmU7YW5pbWF0aW9uOm5vbmV9QGtleWZyYW1lcyBtYXQtcHJvZ3Jlc3Mtc3Bpbm5lci1saW5lYXItcm90YXRlezAle3RyYW5zZm9ybTpyb3RhdGUoMGRlZyl9MTAwJXt0cmFuc2Zvcm06cm90YXRlKDM2MGRlZyl9fUBrZXlmcmFtZXMgbWF0LXByb2dyZXNzLXNwaW5uZXItc3Ryb2tlLXJvdGF0ZS0xMDB7MCV7c3Ryb2tlLWRhc2hvZmZzZXQ6MjY4LjYwNjE3MTU3NXB4O3RyYW5zZm9ybTpyb3RhdGUoMCl9MTIuNSV7c3Ryb2tlLWRhc2hvZmZzZXQ6NTYuNTQ4NjY3N3B4O3RyYW5zZm9ybTpyb3RhdGUoMCl9MTIuNTAwMSV7c3Ryb2tlLWRhc2hvZmZzZXQ6NTYuNTQ4NjY3N3B4O3RyYW5zZm9ybTpyb3RhdGVYKDE4MGRlZykgcm90YXRlKDcyLjVkZWcpfTI1JXtzdHJva2UtZGFzaG9mZnNldDoyNjguNjA2MTcxNTc1cHg7dHJhbnNmb3JtOnJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoNzIuNWRlZyl9MjUuMDAwMSV7c3Ryb2tlLWRhc2hvZmZzZXQ6MjY4LjYwNjE3MTU3NXB4O3RyYW5zZm9ybTpyb3RhdGUoMjcwZGVnKX0zNy41JXtzdHJva2UtZGFzaG9mZnNldDo1Ni41NDg2Njc3cHg7dHJhbnNmb3JtOnJvdGF0ZSgyNzBkZWcpfTM3LjUwMDEle3N0cm9rZS1kYXNob2Zmc2V0OjU2LjU0ODY2NzdweDt0cmFuc2Zvcm06cm90YXRlWCgxODBkZWcpIHJvdGF0ZSgxNjEuNWRlZyl9NTAle3N0cm9rZS1kYXNob2Zmc2V0OjI2OC42MDYxNzE1NzVweDt0cmFuc2Zvcm06cm90YXRlWCgxODBkZWcpIHJvdGF0ZSgxNjEuNWRlZyl9NTAuMDAwMSV7c3Ryb2tlLWRhc2hvZmZzZXQ6MjY4LjYwNjE3MTU3NXB4O3RyYW5zZm9ybTpyb3RhdGUoMTgwZGVnKX02Mi41JXtzdHJva2UtZGFzaG9mZnNldDo1Ni41NDg2Njc3cHg7dHJhbnNmb3JtOnJvdGF0ZSgxODBkZWcpfTYyLjUwMDEle3N0cm9rZS1kYXNob2Zmc2V0OjU2LjU0ODY2NzdweDt0cmFuc2Zvcm06cm90YXRlWCgxODBkZWcpIHJvdGF0ZSgyNTEuNWRlZyl9NzUle3N0cm9rZS1kYXNob2Zmc2V0OjI2OC42MDYxNzE1NzVweDt0cmFuc2Zvcm06cm90YXRlWCgxODBkZWcpIHJvdGF0ZSgyNTEuNWRlZyl9NzUuMDAwMSV7c3Ryb2tlLWRhc2hvZmZzZXQ6MjY4LjYwNjE3MTU3NXB4O3RyYW5zZm9ybTpyb3RhdGUoOTBkZWcpfTg3LjUle3N0cm9rZS1kYXNob2Zmc2V0OjU2LjU0ODY2NzdweDt0cmFuc2Zvcm06cm90YXRlKDkwZGVnKX04Ny41MDAxJXtzdHJva2UtZGFzaG9mZnNldDo1Ni41NDg2Njc3cHg7dHJhbnNmb3JtOnJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoMzQxLjVkZWcpfTEwMCV7c3Ryb2tlLWRhc2hvZmZzZXQ6MjY4LjYwNjE3MTU3NXB4O3RyYW5zZm9ybTpyb3RhdGVYKDE4MGRlZykgcm90YXRlKDM0MS41ZGVnKX19QGtleWZyYW1lcyBtYXQtcHJvZ3Jlc3Mtc3Bpbm5lci1zdHJva2Utcm90YXRlLWZhbGxiYWNrezAle3RyYW5zZm9ybTpyb3RhdGUoMGRlZyl9MjUle3RyYW5zZm9ybTpyb3RhdGUoMTE3MGRlZyl9NTAle3RyYW5zZm9ybTpyb3RhdGUoMjM0MGRlZyl9NzUle3RyYW5zZm9ybTpyb3RhdGUoMzUxMGRlZyl9MTAwJXt0cmFuc2Zvcm06cm90YXRlKDQ2ODBkZWcpfX1cbiJdfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Y2h9LHt0eXBlOmZJfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W1VDXX1dfSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W053XX1dfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbdjFdfV19XX0pLHttb2RlOlt7dHlwZTp5X31dLGRpYW1ldGVyOlt7dHlwZTp5X31dLHN0cm9rZVdpZHRoOlt7dHlwZTp5X31dLHZhbHVlOlt7dHlwZTp5X31dfSk7Y2xhc3MgUDEgZXh0ZW5kcyBPMXtjb25zdHJ1Y3Rvcih0LGUsbixvLGkpe3N1cGVyKHQsZSxuLG8saSksdGhpcy5tb2RlPSJpbmRldGVybWluYXRlIn19UDEuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFAxKShNdShjaCksTXUoZkkpLE11KFVDLDgpLE11KE53LDgpLE11KHYxKSl9LFAxLsm1Y21wPVVvKHt0eXBlOlAxLHNlbGVjdG9yczpbWyJtYXQtc3Bpbm5lciJdXSxob3N0QXR0cnM6WyJyb2xlIiwicHJvZ3Jlc3NiYXIiLCJtb2RlIiwiaW5kZXRlcm1pbmF0ZSIsMSwibWF0LXNwaW5uZXIiLCJtYXQtcHJvZ3Jlc3Mtc3Bpbm5lciJdLGhvc3RWYXJzOjYsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsyJmUmJihvZigid2lkdGgiLG4uZGlhbWV0ZXIsInB4IikoImhlaWdodCIsbi5kaWFtZXRlciwicHgiKSxhZigiX21hdC1hbmltYXRpb24tbm9vcGFibGUiLG4uX25vb3BBbmltYXRpb25zKSl9LGlucHV0czp7Y29sb3I6ImNvbG9yIn0sZmVhdHVyZXM6W2dtXSxkZWNsczozLHZhcnM6OCxjb25zdHM6W1sicHJlc2VydmVBc3BlY3RSYXRpbyIsInhNaWRZTWlkIG1lZXQiLCJmb2N1c2FibGUiLCJmYWxzZSIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMywibmdTd2l0Y2giXSxbImN4IiwiNTAlIiwiY3kiLCI1MCUiLDMsImFuaW1hdGlvbi1uYW1lIiwic3Ryb2tlLWRhc2hvZmZzZXQiLCJzdHJva2UtZGFzaGFycmF5Iiwic3Ryb2tlLXdpZHRoIiw0LCJuZ1N3aXRjaENhc2UiXSxbImN4IiwiNTAlIiwiY3kiLCI1MCUiLDMsInN0cm9rZS1kYXNob2Zmc2V0Iiwic3Ryb2tlLWRhc2hhcnJheSIsInN0cm9rZS13aWR0aCIsNCwibmdTd2l0Y2hDYXNlIl0sWyJjeCIsIjUwJSIsImN5IiwiNTAlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihIYSgpLE91KDAsInN2ZyIsMCksV20oMSx5MSwxLDksImNpcmNsZSIsMSksV20oMixfMSwxLDcsImNpcmNsZSIsMiksUHUoKSksMiZlJiYob2YoIndpZHRoIixuLmRpYW1ldGVyLCJweCIpKCJoZWlnaHQiLG4uZGlhbWV0ZXIsInB4IiksdnUoIm5nU3dpdGNoIiwiaW5kZXRlcm1pbmF0ZSI9PT1uLm1vZGUpLE5tKCJ2aWV3Qm94IixuLl9nZXRWaWV3Qm94KCkpLEpjKDEpLHZ1KCJuZ1N3aXRjaENhc2UiLCEwKSxKYygxKSx2dSgibmdTd2l0Y2hDYXNlIiwhMSkpfSxkaXJlY3RpdmVzOltjdixkdl0sc3R5bGVzOltDMV0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksUDEuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpjaH0se3R5cGU6Zkl9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbVUNdfV19LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbTnddfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOlt2MV19XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoUDEsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoibWF0LXNwaW5uZXIiLGhvc3Q6e3JvbGU6InByb2dyZXNzYmFyIixtb2RlOiJpbmRldGVybWluYXRlIixjbGFzczoibWF0LXNwaW5uZXIgbWF0LXByb2dyZXNzLXNwaW5uZXIiLCJbY2xhc3MuX21hdC1hbmltYXRpb24tbm9vcGFibGVdIjoiX25vb3BBbmltYXRpb25zIiwiW3N0eWxlLndpZHRoLnB4XSI6ImRpYW1ldGVyIiwiW3N0eWxlLmhlaWdodC5weF0iOiJkaWFtZXRlciJ9LGlucHV0czpbImNvbG9yIl0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgcHJlc2VydmVBc3BlY3RSYXRpbyBvZiB4TWlkWU1pZCBtZWV0IGFzIHRoZSBjZW50ZXIgb2YgdGhlIHZpZXdwb3J0IGlzIHRoZSBjaXJjbGVcJ3NcbiAgY2VudGVyLiBUaGUgY2VudGVyIG9mIHRoZSBjaXJjbGUgd2lsbCByZW1haW4gYXQgdGhlIGNlbnRlciBvZiB0aGUgbWF0LXByb2dyZXNzLXNwaW5uZXJcbiAgZWxlbWVudCBjb250YWluaW5nIHRoZSBTVkcuIGBmb2N1c2FibGU9ImZhbHNlImAgcHJldmVudHMgSUUgZnJvbSBhbGxvd2luZyB0aGUgdXNlciB0b1xuICB0YWIgaW50byB0aGUgU1ZHIGVsZW1lbnQuXG4tLVx4M2Vcblx4M2MhLS1cbiAgQWxsIGNoaWxkcmVuIG5lZWQgdG8gYmUgaGlkZGVuIGZvciBzY3JlZW4gcmVhZGVycyBpbiBvcmRlciB0byBzdXBwb3J0IENocm9tZVZveC5cbiAgTW9yZSBjb250ZXh0IGluIHRoZSBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvY29tcG9uZW50cy9pc3N1ZXMvMjIxNjUuXG4tLVx4M2VcbjxzdmdcbiAgW3N0eWxlLndpZHRoLnB4XT0iZGlhbWV0ZXIiXG4gIFtzdHlsZS5oZWlnaHQucHhdPSJkaWFtZXRlciJcbiAgW2F0dHIudmlld0JveF09Il9nZXRWaWV3Qm94KCkiXG4gIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIG1lZXQiXG4gIGZvY3VzYWJsZT0iZmFsc2UiXG4gIFtuZ1N3aXRjaF09Im1vZGUgPT09IFwnaW5kZXRlcm1pbmF0ZVwnIlxuICBhcmlhLWhpZGRlbj0idHJ1ZSI+XG5cbiAgXHgzYyEtLVxuICAgIFRlY2huaWNhbGx5IHdlIGNhbiByZXVzZSB0aGUgc2FtZSBgY2lyY2xlYCBlbGVtZW50LCBob3dldmVyIFNhZmFyaSBoYXMgYW4gaXNzdWUgdGhhdCBicmVha3NcbiAgICB0aGUgU1ZHIHJlbmRlcmluZyBpbiBkZXRlcm1pbmF0ZSBtb2RlLCBhZnRlciBzd2l0Y2hpbmcgYmV0d2VlbiBpbmRldGVybWluYXRlIGFuZCBkZXRlcm1pbmF0ZS5cbiAgICBVc2luZyBhIGRpZmZlcmVudCBlbGVtZW50IGF2b2lkcyB0aGUgaXNzdWUuIEFuIGFsdGVybmF0aXZlIHRvIHRoaXMgaXMgYWRkaW5nIGBkaXNwbGF5OiBub25lYFxuICAgIGZvciBhIHNwbGl0IHNlY29uZCBhbmQgdGhlbiByZW1vdmluZyBpdCB3aGVuIHN3aXRjaGluZyBiZXR3ZWVuIG1vZGVzLCBidXQgaXRcJ3MgaGFyZCB0byBrbm93XG4gICAgZm9yIGhvdyBsb25nIHRvIGhpZGUgdGhlIGVsZW1lbnQgYW5kIGl0IGNhbiBjYXVzZSB0aGUgVUkgdG8gYmxpbmsuXG4gIC0tXHgzZVxuICA8Y2lyY2xlXG4gICAgKm5nU3dpdGNoQ2FzZT0idHJ1ZSJcbiAgICBjeD0iNTAlIlxuICAgIGN5PSI1MCUiXG4gICAgW2F0dHIucl09Il9nZXRDaXJjbGVSYWRpdXMoKSJcbiAgICBbc3R5bGUuYW5pbWF0aW9uLW5hbWVdPSJcJ21hdC1wcm9ncmVzcy1zcGlubmVyLXN0cm9rZS1yb3RhdGUtXCcgKyBfc3Bpbm5lckFuaW1hdGlvbkxhYmVsIlxuICAgIFtzdHlsZS5zdHJva2UtZGFzaG9mZnNldC5weF09Il9nZXRTdHJva2VEYXNoT2Zmc2V0KCkiXG4gICAgW3N0eWxlLnN0cm9rZS1kYXNoYXJyYXkucHhdPSJfZ2V0U3Ryb2tlQ2lyY3VtZmVyZW5jZSgpIlxuICAgIFtzdHlsZS5zdHJva2Utd2lkdGguJV09Il9nZXRDaXJjbGVTdHJva2VXaWR0aCgpIj48L2NpcmNsZT5cblxuICA8Y2lyY2xlXG4gICAgKm5nU3dpdGNoQ2FzZT0iZmFsc2UiXG4gICAgY3g9IjUwJSJcbiAgICBjeT0iNTAlIlxuICAgIFthdHRyLnJdPSJfZ2V0Q2lyY2xlUmFkaXVzKCkiXG4gICAgW3N0eWxlLnN0cm9rZS1kYXNob2Zmc2V0LnB4XT0iX2dldFN0cm9rZURhc2hPZmZzZXQoKSJcbiAgICBbc3R5bGUuc3Ryb2tlLWRhc2hhcnJheS5weF09Il9nZXRTdHJva2VDaXJjdW1mZXJlbmNlKCkiXG4gICAgW3N0eWxlLnN0cm9rZS13aWR0aC4lXT0iX2dldENpcmNsZVN0cm9rZVdpZHRoKCkiPjwvY2lyY2xlPlxuPC9zdmc+XG4nLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2gsZW5jYXBzdWxhdGlvbjpQby5Ob25lLHN0eWxlczpbIi5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lcntkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbn0ubWF0LXByb2dyZXNzLXNwaW5uZXIgc3Zne3Bvc2l0aW9uOmFic29sdXRlO3RyYW5zZm9ybTpyb3RhdGUoLTkwZGVnKTt0b3A6MDtsZWZ0OjA7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXI7b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LXByb2dyZXNzLXNwaW5uZXIgY2lyY2xle2ZpbGw6dHJhbnNwYXJlbnQ7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXI7dHJhbnNpdGlvbjpzdHJva2UtZGFzaG9mZnNldCAyMjVtcyBsaW5lYXJ9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlLm1hdC1wcm9ncmVzcy1zcGlubmVyIGNpcmNsZXt0cmFuc2l0aW9uOm5vbmU7YW5pbWF0aW9uOm5vbmV9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXByb2dyZXNzLXNwaW5uZXIgY2lyY2xle3N0cm9rZTpjdXJyZW50Q29sb3I7c3Ryb2tlOkNhbnZhc1RleHR9Lm1hdC1wcm9ncmVzcy1zcGlubmVyLm1hdC1wcm9ncmVzcy1zcGlubmVyLWluZGV0ZXJtaW5hdGUtYW5pbWF0aW9uW21vZGU9aW5kZXRlcm1pbmF0ZV0gc3Zne2FuaW1hdGlvbjptYXQtcHJvZ3Jlc3Mtc3Bpbm5lci1saW5lYXItcm90YXRlIDIwMDBtcyBsaW5lYXIgaW5maW5pdGV9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlLm1hdC1wcm9ncmVzcy1zcGlubmVyLm1hdC1wcm9ncmVzcy1zcGlubmVyLWluZGV0ZXJtaW5hdGUtYW5pbWF0aW9uW21vZGU9aW5kZXRlcm1pbmF0ZV0gc3Zne3RyYW5zaXRpb246bm9uZTthbmltYXRpb246bm9uZX0ubWF0LXByb2dyZXNzLXNwaW5uZXIubWF0LXByb2dyZXNzLXNwaW5uZXItaW5kZXRlcm1pbmF0ZS1hbmltYXRpb25bbW9kZT1pbmRldGVybWluYXRlXSBjaXJjbGV7dHJhbnNpdGlvbi1wcm9wZXJ0eTpzdHJva2U7YW5pbWF0aW9uLWR1cmF0aW9uOjQwMDBtczthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLjM1LCAwLCAwLjI1LCAxKTthbmltYXRpb24taXRlcmF0aW9uLWNvdW50OmluZmluaXRlfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci1pbmRldGVybWluYXRlLWFuaW1hdGlvblttb2RlPWluZGV0ZXJtaW5hdGVdIGNpcmNsZXt0cmFuc2l0aW9uOm5vbmU7YW5pbWF0aW9uOm5vbmV9Lm1hdC1wcm9ncmVzcy1zcGlubmVyLm1hdC1wcm9ncmVzcy1zcGlubmVyLWluZGV0ZXJtaW5hdGUtZmFsbGJhY2stYW5pbWF0aW9uW21vZGU9aW5kZXRlcm1pbmF0ZV0gc3Zne2FuaW1hdGlvbjptYXQtcHJvZ3Jlc3Mtc3Bpbm5lci1zdHJva2Utcm90YXRlLWZhbGxiYWNrIDEwMDAwbXMgY3ViaWMtYmV6aWVyKDAuODcsIDAuMDMsIDAuMzMsIDEpIGluZmluaXRlfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci1pbmRldGVybWluYXRlLWZhbGxiYWNrLWFuaW1hdGlvblttb2RlPWluZGV0ZXJtaW5hdGVdIHN2Z3t0cmFuc2l0aW9uOm5vbmU7YW5pbWF0aW9uOm5vbmV9Lm1hdC1wcm9ncmVzcy1zcGlubmVyLm1hdC1wcm9ncmVzcy1zcGlubmVyLWluZGV0ZXJtaW5hdGUtZmFsbGJhY2stYW5pbWF0aW9uW21vZGU9aW5kZXRlcm1pbmF0ZV0gY2lyY2xle3RyYW5zaXRpb24tcHJvcGVydHk6c3Ryb2tlfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci1pbmRldGVybWluYXRlLWZhbGxiYWNrLWFuaW1hdGlvblttb2RlPWluZGV0ZXJtaW5hdGVdIGNpcmNsZXt0cmFuc2l0aW9uOm5vbmU7YW5pbWF0aW9uOm5vbmV9QGtleWZyYW1lcyBtYXQtcHJvZ3Jlc3Mtc3Bpbm5lci1saW5lYXItcm90YXRlezAle3RyYW5zZm9ybTpyb3RhdGUoMGRlZyl9MTAwJXt0cmFuc2Zvcm06cm90YXRlKDM2MGRlZyl9fUBrZXlmcmFtZXMgbWF0LXByb2dyZXNzLXNwaW5uZXItc3Ryb2tlLXJvdGF0ZS0xMDB7MCV7c3Ryb2tlLWRhc2hvZmZzZXQ6MjY4LjYwNjE3MTU3NXB4O3RyYW5zZm9ybTpyb3RhdGUoMCl9MTIuNSV7c3Ryb2tlLWRhc2hvZmZzZXQ6NTYuNTQ4NjY3N3B4O3RyYW5zZm9ybTpyb3RhdGUoMCl9MTIuNTAwMSV7c3Ryb2tlLWRhc2hvZmZzZXQ6NTYuNTQ4NjY3N3B4O3RyYW5zZm9ybTpyb3RhdGVYKDE4MGRlZykgcm90YXRlKDcyLjVkZWcpfTI1JXtzdHJva2UtZGFzaG9mZnNldDoyNjguNjA2MTcxNTc1cHg7dHJhbnNmb3JtOnJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoNzIuNWRlZyl9MjUuMDAwMSV7c3Ryb2tlLWRhc2hvZmZzZXQ6MjY4LjYwNjE3MTU3NXB4O3RyYW5zZm9ybTpyb3RhdGUoMjcwZGVnKX0zNy41JXtzdHJva2UtZGFzaG9mZnNldDo1Ni41NDg2Njc3cHg7dHJhbnNmb3JtOnJvdGF0ZSgyNzBkZWcpfTM3LjUwMDEle3N0cm9rZS1kYXNob2Zmc2V0OjU2LjU0ODY2NzdweDt0cmFuc2Zvcm06cm90YXRlWCgxODBkZWcpIHJvdGF0ZSgxNjEuNWRlZyl9NTAle3N0cm9rZS1kYXNob2Zmc2V0OjI2OC42MDYxNzE1NzVweDt0cmFuc2Zvcm06cm90YXRlWCgxODBkZWcpIHJvdGF0ZSgxNjEuNWRlZyl9NTAuMDAwMSV7c3Ryb2tlLWRhc2hvZmZzZXQ6MjY4LjYwNjE3MTU3NXB4O3RyYW5zZm9ybTpyb3RhdGUoMTgwZGVnKX02Mi41JXtzdHJva2UtZGFzaG9mZnNldDo1Ni41NDg2Njc3cHg7dHJhbnNmb3JtOnJvdGF0ZSgxODBkZWcpfTYyLjUwMDEle3N0cm9rZS1kYXNob2Zmc2V0OjU2LjU0ODY2NzdweDt0cmFuc2Zvcm06cm90YXRlWCgxODBkZWcpIHJvdGF0ZSgyNTEuNWRlZyl9NzUle3N0cm9rZS1kYXNob2Zmc2V0OjI2OC42MDYxNzE1NzVweDt0cmFuc2Zvcm06cm90YXRlWCgxODBkZWcpIHJvdGF0ZSgyNTEuNWRlZyl9NzUuMDAwMSV7c3Ryb2tlLWRhc2hvZmZzZXQ6MjY4LjYwNjE3MTU3NXB4O3RyYW5zZm9ybTpyb3RhdGUoOTBkZWcpfTg3LjUle3N0cm9rZS1kYXNob2Zmc2V0OjU2LjU0ODY2NzdweDt0cmFuc2Zvcm06cm90YXRlKDkwZGVnKX04Ny41MDAxJXtzdHJva2UtZGFzaG9mZnNldDo1Ni41NDg2Njc3cHg7dHJhbnNmb3JtOnJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoMzQxLjVkZWcpfTEwMCV7c3Ryb2tlLWRhc2hvZmZzZXQ6MjY4LjYwNjE3MTU3NXB4O3RyYW5zZm9ybTpyb3RhdGVYKDE4MGRlZykgcm90YXRlKDM0MS41ZGVnKX19QGtleWZyYW1lcyBtYXQtcHJvZ3Jlc3Mtc3Bpbm5lci1zdHJva2Utcm90YXRlLWZhbGxiYWNrezAle3RyYW5zZm9ybTpyb3RhdGUoMGRlZyl9MjUle3RyYW5zZm9ybTpyb3RhdGUoMTE3MGRlZyl9NTAle3RyYW5zZm9ybTpyb3RhdGUoMjM0MGRlZyl9NzUle3RyYW5zZm9ybTpyb3RhdGUoMzUxMGRlZyl9MTAwJXt0cmFuc2Zvcm06cm90YXRlKDQ2ODBkZWcpfX1cbiJdfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Y2h9LHt0eXBlOmZJfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W1VDXX1dfSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W053XX1dfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbdjFdfV19XX0pLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3MgdzF7fWZ1bmN0aW9uIGsxKHQsZSl7aWYoMSZ0JiYoa3UoMCksT3UoMSwibGkiLDE4KSxNZigyKSxQdSgpLFN1KCkpLDImdCl7Y29uc3QgdD1lLiRpbXBsaWNpdDtKYygxKSx2dSgidGl0bGUiLHQubmFtZSksSmMoMSksdmYodC5uYW1lKX19ZnVuY3Rpb24gUzEodCxlKXtpZigxJnQmJihPdSgwLCJsaSIsMTkpLE91KDEsImVtIiksTWYoMiksT2IoMywibnVtYmVyIiksUHUoKSxQdSgpKSwyJnQpe2NvbnN0IHQ9THUoKS4kaW1wbGljaXQ7SmMoMikseGYoImFuZCAiLFBiKDMsMSx0LnJ1bnMubGVuZ3RoLTUpLCIgbW9yZSIpfX1mdW5jdGlvbiBEMSh0LGUpezEmdCYmKE91KDAsImxpIiwyMCksT3UoMSwiZW0iKSxNZigyLCJObyBydW5zIGFyZSBpbiB0aGUgZ3JvdXAiKSxQdSgpLFB1KCkpfXcxLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHx3MSl9LHcxLsm1bW9kPVpvKHt0eXBlOncxfSksdzEuybVpbmo9Y28oe2ltcG9ydHM6W1tUeixCdl0sVHpdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyh3MSx7ZGVjbGFyYXRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuW08xLFAxXX0saW1wb3J0czpmdW5jdGlvbigpe3JldHVybltUeixCdl19LGV4cG9ydHM6ZnVuY3Rpb24oKXtyZXR1cm5bTzEsUDEsVHpdfX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIodzEsW3t0eXBlOmtfLGFyZ3M6W3tpbXBvcnRzOltUeixCdl0sZXhwb3J0czpbTzEsUDEsVHpdLGRlY2xhcmF0aW9uczpbTzEsUDFdfV19XSxudWxsLG51bGwpO2NvbnN0IEUxPWZ1bmN0aW9uKHQpe3JldHVybntib3JkZXJDb2xvcjp0fX0sQTE9ZnVuY3Rpb24odCl7cmV0dXJue2JhY2tncm91bmRDb2xvcjp0fX07ZnVuY3Rpb24gUjEodCxlKXtpZigxJnQmJihPdSgwLCJ1bCIsMTIpLE91KDEsImxpIiksT3UoMiwibGFiZWwiKSx3dSgzLCJzcGFuIiwxMyksT3UoNCwiY29kZSIsMTQpLE1mKDUpLFB1KCksUHUoKSxPdSg2LCJ1bCIpLFdtKDcsazEsMywyLCJuZy1jb250YWluZXIiLDE1KSxPYig4LCJzbGljZSIpLFdtKDksUzEsNCwzLCJsaSIsMTYpLFdtKDEwLEQxLDMsMCwibGkiLDE3KSxQdSgpLFB1KCksUHUoKSksMiZ0KXtjb25zdCB0PWUuJGltcGxpY2l0O3Z1KCJuZ1N0eWxlIixnYigxMSxFMSx0LmNvbG9yKSksSmMoMyksdnUoIm5nU3R5bGUiLGdiKDEzLEExLHQuY29sb3IpKSxKYygxKSx2dSgidGl0bGUiLHQuZ3JvdXBJZCksSmMoMSksdmYodC5ncm91cElkKSxKYygyKSx2dSgibmdGb3JPZiIsa2IoOCw3LHQucnVucywwLDUpKSxKYygyKSx2dSgibmdJZiIsdC5ydW5zLmxlbmd0aD41KSxKYygxKSx2dSgibmdJZiIsMD09PXQucnVucy5sZW5ndGgpfX1mdW5jdGlvbiBUMSh0LGUpe2lmKDEmdCYmKE91KDAsImRpdiIsOSksT3UoMSwiaDQiKSxNZigyLCJDb2xvciBncm91cCBwcmV2aWV3IiksUHUoKSxPdSgzLCJkaXYiLDEwKSxXbSg0LFIxLDExLDE1LCJ1bCIsMTEpLFB1KCksUHUoKSksMiZ0KXtjb25zdCB0PUx1KCk7SmMoNCksdnUoIm5nRm9yT2YiLHQuY29sb3JSdW5QYWlyTGlzdCl9fWNsYXNzIE4xe2NvbnN0cnVjdG9yKHQpe3RoaXMuZGlhbG9nUmVmPXQsdGhpcy5vblNhdmU9bmV3IEFiLHRoaXMucmVnZXhJbnB1dE9uQ2hhbmdlPW5ldyBBYn1vbkVudGVyKHQpe3RoaXMub25TYXZlQ2xpY2sodCksdGhpcy5kaWFsb2dSZWYuY2xvc2UoKX1vblNhdmVDbGljayh0KXt0aGlzLm9uU2F2ZS5lbWl0KHQpfWZpbGxFeGFtcGxlKHQpe3RoaXMucmVnZXhTdHJpbmc9dH1yZWdleElucHV0Q2hhbmdlKHQpe3RoaXMucmVnZXhJbnB1dE9uQ2hhbmdlLmVtaXQodCl9fU4xLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxOMSkoTXUoRFcpKX0sTjEuybVjbXA9VW8oe3R5cGU6TjEsc2VsZWN0b3JzOltbInJlZ2V4LWVkaXQtZGlhbG9nLWNvbXBvbmVudCJdXSxpbnB1dHM6e3JlZ2V4U3RyaW5nOiJyZWdleFN0cmluZyIsY29sb3JSdW5QYWlyTGlzdDoiY29sb3JSdW5QYWlyTGlzdCJ9LG91dHB1dHM6e29uU2F2ZToib25TYXZlIixyZWdleElucHV0T25DaGFuZ2U6InJlZ2V4SW5wdXRPbkNoYW5nZSJ9LGRlY2xzOjI5LHZhcnM6Mixjb25zdHM6ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gdD0idW5kZWZpbmVkIiE9dHlwZW9mIG5nSTE4bkNsb3N1cmVNb2RlJiZuZ0kxOG5DbG9zdXJlTW9kZT9nb29nLmdldE1zZygiQ29sb3IgUnVucyBieSBSZWdleCBRdWVyeSIpOiRsb2NhbGl6ZWA6Q29sb3IgUnVucyBieSBSZWdleCBRdWVyeeKQnzE1ZWQ5ZjZmZDJkNDkwNmE0ODAzZmMxMjU1ZGUzYzVkYjJjNTY1MzDikJ85MDg4OTg1MTEzOTYwMzEyODA4OkNvbG9yIFJ1bnMgYnkgUmVnZXggUXVlcnlgLFtbIm1hdC1kaWFsb2ctdGl0bGUiLCIiXSxbIm1hdElucHV0IiwiIiwiYXJpYS1sYWJlbCIsdCwiY2RrRm9jdXNJbml0aWFsIiwiIiwzLCJ2YWx1ZSIsImtleWRvd24uZW50ZXIiLCJpbnB1dCJdLFsicmVnZXhTdHJpbmdJbnB1dCIsIiJdLFsxLCJleGFtcGxlLWRldGFpbHMiXSxbMywiY2xpY2siXSxbImNsYXNzIiwiZ3JvdXAtY29udGFpbmVyIiw0LCJuZ0lmIl0sWyJtYXQtZGlhbG9nLWFjdGlvbnMiLCIiLCJhbGlnbiIsImVuZCJdLFsibWF0LWJ1dHRvbiIsIiIsIm1hdC1kaWFsb2ctY2xvc2UiLCIiXSxbIm1hdC1yYWlzZWQtYnV0dG9uIiwiIiwiY29sb3IiLCJwcmltYXJ5IiwibWF0LWRpYWxvZy1jbG9zZSIsIiIsMywiY2xpY2siXSxbMSwiZ3JvdXAtY29udGFpbmVyIl0sWzEsImdyb3VwaW5nLXByZXZpZXciXSxbImNsYXNzIiwiZ3JvdXAiLDMsIm5nU3R5bGUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJncm91cCIsMywibmdTdHlsZSJdLFsxLCJjb2xvci1zd2F0Y2giLDMsIm5nU3R5bGUiXSxbIm5hbWUiLCJncm91cC1pZCIsMywidGl0bGUiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbGFzcyIsIm1vcmUiLDQsIm5nSWYiXSxbImNsYXNzIiwibm8tbWF0Y2giLDQsIm5nSWYiXSxbMywidGl0bGUiXSxbMSwibW9yZSJdLFsxLCJuby1tYXRjaCJdXX0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pe2lmKDEmZSl7Y29uc3QgdD1FdSgpO091KDAsImgxIiwwKSxNZigxLCJDb2xvciBydW5zIGJ5IHJlZ2V4IiksUHUoKSxPdSgyLCJtYXQtZGlhbG9nLWNvbnRlbnQiKSxPdSgzLCJwIiksTWYoNCwiRW50ZXIgYSByZWdleCB3aXRoIGNhcHR1cmluZyBncm91cHMgdG8gbWF0Y2ggYWdhaW5zdCBydW4gbmFtZXM6IiksUHUoKSxPdSg1LCJtYXQtZm9ybS1maWVsZCIpLE91KDYsImlucHV0IiwxLDIpLE51KCJrZXlkb3duLmVudGVyIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vbkVudGVyKGUudGFyZ2V0LnZhbHVlKX0pKSgiaW5wdXQiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLnJlZ2V4SW5wdXRDaGFuZ2UoZS50YXJnZXQudmFsdWUpfSkpLFB1KCksUHUoKSxQdSgpLE91KDgsImRpdiIsMyksT3UoOSwicCIpLE1mKDEwLCcgRWFjaCBtYXRjaGluZyBydW4gd2lsbCBiZSBhc3NpZ25lZCBhIGNvbG9yIGJhc2VkIG9uIHRoZSAia2V5IiBmb3JtZWQgYnkgaXRzIG1hdGNoZXMgdG8gdGhlIGNhcHR1cmluZyBncm91cHMuICcpLHd1KDExLCJiciIpLE91KDEyLCJidXR0b24iLDQpLE51KCJjbGljayIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5maWxsRXhhbXBsZSgiKHRyYWlufGV2YWwpIil9KSksTWYoMTMsIiBUcnkgIiksT3UoMTQsImNvZGUiKSxNZigxNSwiKHRyYWlufGV2YWwpIiksUHUoKSxQdSgpLE1mKDE2LCIgdG8gYXNzaWduIGFsbCBydW5zIGNvbnRhaW5pbmcgIiksT3UoMTcsImNvZGUiKSxNZigxOCwidHJhaW4iKSxQdSgpLE1mKDE5LCIgdG8gb25lIGNvbG9yIGFuZCBhbGwgcnVucyBjb250YWluaW5nICIpLE91KDIwLCJjb2RlIiksTWYoMjEsImV2YWwiKSxQdSgpLE1mKDIyLCIgdG8gYW5vdGhlciBjb2xvci4gIiksUHUoKSxQdSgpLFdtKDIzLFQxLDUsMSwiZGl2Iiw1KSxPdSgyNCwiZGl2Iiw2KSxPdSgyNSwiYnV0dG9uIiw3KSxNZigyNiwiQ2FuY2VsIiksUHUoKSxPdSgyNywiYnV0dG9uIiw4KSxOdSgiY2xpY2siLChmdW5jdGlvbiBlKCl7cmEodCk7Y29uc3Qgbz1HbSg3KTtyZXR1cm4gbi5vblNhdmVDbGljayhvLnZhbHVlKX0pKSxNZigyOCwiIFNhdmUgIiksUHUoKSxQdSgpfTImZSYmKEpjKDYpLFV1KCJ2YWx1ZSIsbi5yZWdleFN0cmluZyksSmMoMTcpLHZ1KCJuZ0lmIixuLmNvbG9yUnVuUGFpckxpc3QubGVuZ3RoKSl9LGRpcmVjdGl2ZXM6W0JXLFZXLF9WLEVZLGF2LGpXLE5ILExXLG92LGd2XSxwaXBlczpbRnYsVHZdLHN0eWxlczpbJy5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHh9Lm1hdC1oMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaGVhZGxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTVweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZ1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjA1ZW07bWFyZ2luOjAgMCA1NnB4fS5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAwNWVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXJhaXNlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdHJva2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmxhdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZhYltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbWluaS1mYWJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4fS5tYXQtY2FyZC1zdWJ0aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGVja2JveC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvb3Rlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgdHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIzZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LjU0MTY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2NjY2NjY3ZW0pfUBtZWRpYSBwcmludHsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjJlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouMjVlbSAwIC43NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxZW0gMCAxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMiksIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi0wLjA2MjVlbX0ubWF0LW1lbnUtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci12ZXJ0aWNhbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGFiLWxpbmtbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MH0ubWF0LXRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5Om5vbmV9LmNkay12aXN1YWxseS1oaWRkZW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjZ9LmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV0sIC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3hbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2tbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHt9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7fS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOi13ZWJraXQtYXV0b2ZpbGwpe2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZVtfbmdjb250ZW50LSVDT01QJV17cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fS5tYXQtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfS5leGFtcGxlLWRldGFpbHNbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O3BhZGRpbmc6MDtib3JkZXI6bm9uZTtjdXJzb3I6cG9pbnRlcjt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO2NvbG9yOiMxOTc2ZDJ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmV4YW1wbGUtZGV0YWlsc1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZXhhbXBsZS1kZXRhaWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzQyYTVmNX0uZXhhbXBsZS1kZXRhaWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV06dmlzaXRlZHtjb2xvcjojN2IxZmEyfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5leGFtcGxlLWRldGFpbHNbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXTp2aXNpdGVkLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZXhhbXBsZS1kZXRhaWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV06dmlzaXRlZHtjb2xvcjojYmE2OGM4fS5ncm91cC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbjoxMHB4IDB9Lmdyb3VwLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLWJvdHRvbToxMHB4fS5ncm91cGluZy1wcmV2aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MXB4IHNvbGlkICNlYmViZWI7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtkaXNwbGF5OmdyaWQ7ZmxleC13cmFwOndyYXA7Z2FwOjEwcHg7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdCgyLCBtaW5tYXgoNTAlLCAxZnIpKTttYXgtaGVpZ2h0OjUwdmg7b3ZlcmZsb3cteTphdXRvO3BhZGRpbmc6MjBweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXBpbmctcHJldmlld1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cGluZy1wcmV2aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MXB4IHNvbGlkICM1NTV9LmNvbG9yLXN3YXRjaFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJhZGl1czo1MCU7Ym94LXNoYWRvdzowIDAgMnB4ICMwMDA7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjE1cHg7d2lkdGg6MTVweH11bFtfbmdjb250ZW50LSVDT01QJV17bGlzdC1zdHlsZS10eXBlOm5vbmU7cGFkZGluZzowfS5ncm91cFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjFweCBzb2xpZCAjZWJlYmViO2JvcmRlci1yYWRpdXM6M3B4O21hcmdpbjowO3BhZGRpbmc6MTBweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXBbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjoxcHggc29saWQgIzU1NX0uZ3JvdXBbX25nY29udGVudC0lQ09NUCVdICAgbGFiZWxbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6Z3JpZDtnYXA6MTBweDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6bWF4LWNvbnRlbnQgYXV0bztwYWRkaW5nOjVweCAwfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cFtfbmdjb250ZW50LSVDT01QJV0gICBsYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cFtfbmdjb250ZW50LSVDT01QJV0gICBsYWJlbFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX0uZ3JvdXBbX25nY29udGVudC0lQ09NUCVdICAgbGFiZWxbX25nY29udGVudC0lQ09NUCVdICAgLmdyb3VwLWlkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6Ljk1ZW07b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwfS5ncm91cFtfbmdjb250ZW50LSVDT01QJV0gICB1bFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOi45ZW19Lmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHVsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGxpW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXB9Lmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tb3JlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uby1tYXRjaFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTttYXJnaW4tdG9wOjVweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXBbX25nY29udGVudC0lQ09NUCVdICAgLm1vcmVbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXBbX25nY29udGVudC0lQ09NUCVdICAgLm1vcmVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cFtfbmdjb250ZW50LSVDT01QJV0gICAubm8tbWF0Y2hbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXBbX25nY29udGVudC0lQ09NUCVdICAgLm5vLW1hdGNoW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoTjEsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoicmVnZXgtZWRpdC1kaWFsb2ctY29tcG9uZW50Iix0ZW1wbGF0ZVVybDoicmVnZXhfZWRpdF9kaWFsb2cubmcuaHRtbCIsc3R5bGVVcmxzOlsicmVnZXhfZWRpdF9kaWFsb2dfY29tcG9uZW50LmNzcyJdLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2h9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpEV31dfSkse3JlZ2V4U3RyaW5nOlt7dHlwZTp5X31dLGNvbG9yUnVuUGFpckxpc3Q6W3t0eXBlOnlffV0sb25TYXZlOlt7dHlwZTpfX31dLHJlZ2V4SW5wdXRPbkNoYW5nZTpbe3R5cGU6X199XX0pO2NsYXNzIEkxe2NvbnN0cnVjdG9yKHQsZSxuKXt0aGlzLnN0b3JlPXQsdGhpcy5kaWFsb2dSZWY9ZSx0aGlzLnRlbnRhdGl2ZVJlZ2V4U3RyaW5nJD1uZXcgeCx0aGlzLmdyb3VwQnlSZWdleFN0cmluZyQ9RnQoKCgpPT5XdCh0aGlzLnN0b3JlLnNlbGVjdChNTikucGlwZShOZSgxKSksdGhpcy50ZW50YXRpdmVSZWdleFN0cmluZyQpKSkucGlwZShjbigiIikpLHRoaXMuY29sb3JSdW5QYWlyTGlzdCQ9RnQoKCgpPT50aGlzLmdyb3VwQnlSZWdleFN0cmluZyQucGlwZShkZSg1MDApLGNlKHRoaXMuYWxsUnVucyQsdGhpcy5ydW5JZFRvRWlkJCksaHQoKChbdCxlLG5dKT0+e3ZhciBvO2NvbnN0IGk9b04oe2tleTplTi5SRUdFWCxyZWdleFN0cmluZzp0fSxlLG4pLGE9bmV3IE1hcCxyPVtdO2Zvcihjb25zdFt0LGVdb2YgT2JqZWN0LmVudHJpZXMoaS5tYXRjaGVzKSl7Y29uc3Qgbj1udWxsIT09KG89YS5nZXQodCkpJiZ2b2lkIDAhPT1vP286a05bYS5zaXplJWtOLmxlbmd0aF07YS5zZXQodCxuKSxyLnB1c2goe2dyb3VwSWQ6dCxjb2xvcjpuLHJ1bnM6ZX0pfXJldHVybiByfSkpKSkpLnBpcGUoY24oW10pKSx0aGlzLmV4cGVyaW1lbnRJZHM9bi5leHBlcmltZW50SWRzLHRoaXMucnVuSWRUb0VpZCQ9RHQodGhpcy5leHBlcmltZW50SWRzLm1hcCgodD0+dGhpcy5zdG9yZS5zZWxlY3QoZE4se2V4cGVyaW1lbnRJZDp0fSkucGlwZShodCgoZT0+KHtleHBlcmltZW50SWQ6dCxydW5JZHM6ZX0pKSkpKSkpLnBpcGUoaHQoKHQ9Pntjb25zdCBlPXt9O2Zvcihjb25zdHtydW5JZHM6bixleHBlcmltZW50SWQ6b31vZiB0KWZvcihjb25zdCB0IG9mIG4pZVt0XT1vO3JldHVybiBlfSkpKSx0aGlzLmFsbFJ1bnMkPUR0KHRoaXMuZXhwZXJpbWVudElkcy5tYXAoKHQ9PnRoaXMuc3RvcmUuc2VsZWN0KGNOLHtleHBlcmltZW50SWQ6dH0pKSkpLnBpcGUoaHQoKHQ9PnQuZmxhdCgpKSkpfW9uUmVnZXhJbnB1dE9uQ2hhbmdlKHQpe3RoaXMudGVudGF0aXZlUmVnZXhTdHJpbmckLm5leHQodCl9b25TYXZlKHQpe3RoaXMuc3RvcmUuZGlzcGF0Y2goSUEoe2V4cGVyaW1lbnRJZHM6dGhpcy5leHBlcmltZW50SWRzLGdyb3VwQnk6e2tleTplTi5SRUdFWCxyZWdleFN0cmluZzp0fX0pKX19ZnVuY3Rpb24gejEodCxlKXsxJnQmJnd1KDAsIm1hdC1pY29uIiw5KX1mdW5jdGlvbiBIMSh0LGUpezEmdCYmd3UoMCwibWF0LWljb24iLDkpfWZ1bmN0aW9uIEYxKHQsZSl7MSZ0JiZ3dSgwLCJtYXQtaWNvbiIsOSl9ZnVuY3Rpb24gTDEodCxlKXtpZigxJnQpe2NvbnN0IHQ9RXUoKTtPdSgwLCJidXR0b24iLDUpLE51KCJjbGljayIsKGZ1bmN0aW9uIGUoKXtyZXR1cm4gcmEodCksTHUoKS5vbkdyb3VwQnlSZWdleENsaWNrKCl9KSksT3UoMSwic3BhbiIpLFdtKDIsRjEsMSwwLCJtYXQtaWNvbiIsNiksUHUoKSxPdSgzLCJsYWJlbCIpLE1mKDQsIlJlZ2V4IiksUHUoKSxQdSgpfWlmKDImdCl7Y29uc3QgdD1MdSgpO05tKCJhcmlhLWNoZWNrZWQiLHQuc2VsZWN0ZWRHcm91cEJ5LmtleT09PXQuR3JvdXBCeUtleS5SRUdFWCksSmMoMiksdnUoIm5nSWYiLHQuc2VsZWN0ZWRHcm91cEJ5LmtleT09PXQuR3JvdXBCeUtleS5SRUdFWCl9fWZ1bmN0aW9uIEIxKHQsZSl7aWYoMSZ0JiYoT3UoMCwibGFiZWwiKSxNZigxKSxQdSgpKSwyJnQpe2NvbnN0IHQ9THUoMik7SmMoMSksdmYodC5yZWdleFN0cmluZyl9fWZ1bmN0aW9uIFYxKHQsZSl7MSZ0JiYoT3UoMCwibGFiZWwiLDE0KSxNZigxLCIobm9uZSBzZXQpIiksUHUoKSl9ZnVuY3Rpb24gajEodCxlKXtpZigxJnQpe2NvbnN0IHQ9RXUoKTtPdSgwLCJidXR0b24iLDEwKSxOdSgiY2xpY2siLChmdW5jdGlvbiBlKCl7cmV0dXJuIHJhKHQpLEx1KCkub25SZWdleFN0cmluZ0VkaXQoKX0pKSxPdSgxLCJzcGFuIiksd3UoMiwibWF0LWljb24iLDExKSxQdSgpLFdtKDMsQjEsMiwxLCJsYWJlbCIsMTIpLFdtKDQsVjEsMiwwLCJsYWJlbCIsMTMpLFB1KCl9aWYoMiZ0KXtjb25zdCB0PUx1KCk7SmMoMyksdnUoIm5nSWYiLHQucmVnZXhTdHJpbmcpLEpjKDEpLHZ1KCJuZ0lmIiwhdC5yZWdleFN0cmluZyl9fUkxLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxJMSkoTXUoRWspLE11KERXKSxNdShBVykpfSxJMS7JtWNtcD1Vbyh7dHlwZTpJMSxzZWxlY3RvcnM6W1sicmVnZXgtZWRpdC1kaWFsb2ciXV0sZGVjbHM6Myx2YXJzOjYsY29uc3RzOltbMywicmVnZXhTdHJpbmciLCJjb2xvclJ1blBhaXJMaXN0Iiwib25TYXZlIiwicmVnZXhJbnB1dE9uQ2hhbmdlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihPdSgwLCJyZWdleC1lZGl0LWRpYWxvZy1jb21wb25lbnQiLDApLE51KCJvblNhdmUiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLm9uU2F2ZShlKX0pKSgicmVnZXhJbnB1dE9uQ2hhbmdlIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vblJlZ2V4SW5wdXRPbkNoYW5nZShlKX0pKSxPYigxLCJhc3luYyIpLE9iKDIsImFzeW5jIiksUHUoKSksMiZlJiZ2dSgicmVnZXhTdHJpbmciLFBiKDEsMixuLmdyb3VwQnlSZWdleFN0cmluZyQpKSgiY29sb3JSdW5QYWlyTGlzdCIsUGIoMiw0LG4uY29sb3JSdW5QYWlyTGlzdCQpKX0sZGlyZWN0aXZlczpbTjFdLHBpcGVzOltNdl0sZW5jYXBzdWxhdGlvbjoyfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihJMSxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJyZWdleC1lZGl0LWRpYWxvZyIsdGVtcGxhdGU6JzxyZWdleC1lZGl0LWRpYWxvZy1jb21wb25lbnRcbiAgICBbcmVnZXhTdHJpbmddPSJncm91cEJ5UmVnZXhTdHJpbmckIHwgYXN5bmMiXG4gICAgW2NvbG9yUnVuUGFpckxpc3RdPSJjb2xvclJ1blBhaXJMaXN0JCB8IGFzeW5jIlxuICAgIChvblNhdmUpPSJvblNhdmUoJGV2ZW50KSJcbiAgICAocmVnZXhJbnB1dE9uQ2hhbmdlKT0ib25SZWdleElucHV0T25DaGFuZ2UoJGV2ZW50KSJcbiAgPjwvcmVnZXgtZWRpdC1kaWFsb2ctY29tcG9uZW50Pid9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpFa30se3R5cGU6RFd9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltBV119XX1dfSksbnVsbCk7Y2xhc3MgVTF7Y29uc3RydWN0b3IodCl7dGhpcy5kaWFsb2c9dCx0aGlzLkdyb3VwQnlLZXk9ZU4sdGhpcy5vbkdyb3VwQnlDaGFuZ2U9bmV3IEFifW9uUmVnZXhTdHJpbmdFZGl0KCl7dGhpcy5kaWFsb2cub3BlbihJMSx7bWF4SGVpZ2h0OiI5NXZoIixtaW5IZWlnaHQ6IjUwMHB4IixtYXhXaWR0aDoiODB2dyIsbWluV2lkdGg6IjYwMHB4IixkYXRhOntleHBlcmltZW50SWRzOnRoaXMuZXhwZXJpbWVudElkc319KX1vbkdyb3VwQnlSZWdleENsaWNrKCl7dGhpcy5yZWdleFN0cmluZz90aGlzLm9uR3JvdXBCeUNoYW5nZS5lbWl0KHtrZXk6ZU4uUkVHRVgscmVnZXhTdHJpbmc6dGhpcy5yZWdleFN0cmluZ30pOnRoaXMub25SZWdleFN0cmluZ0VkaXQoKX19VTEuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFUxKShNdShIVykpfSxVMS7JtWNtcD1Vbyh7dHlwZTpVMSxzZWxlY3RvcnM6W1sicnVucy1ncm91cC1tZW51LWJ1dHRvbi1jb21wb25lbnQiXV0saW5wdXRzOntleHBlcmltZW50SWRzOiJleHBlcmltZW50SWRzIixyZWdleFN0cmluZzoicmVnZXhTdHJpbmciLHNlbGVjdGVkR3JvdXBCeToic2VsZWN0ZWRHcm91cEJ5IixzaG93R3JvdXBCeVJlZ2V4OiJzaG93R3JvdXBCeVJlZ2V4In0sb3V0cHV0czp7b25Hcm91cEJ5Q2hhbmdlOiJvbkdyb3VwQnlDaGFuZ2UifSxkZWNsczoxOCx2YXJzOjcsY29uc3RzOltbIm1hdC1pY29uLWJ1dHRvbiIsIiIsInRpdGxlIiwiR3JvdXAgcnVucyBieS4uLiIsMywibWF0TWVudVRyaWdnZXJGb3IiXSxbInN2Z0ljb24iLCJwYWxldHRlXzI0cHgiXSxbMSwicnVuLXRhYmxlLWNvbG9yLWdyb3VwLWJ5Il0sWyJncm91cEJ5TWVudSIsIm1hdE1lbnUiXSxbMSwibGFiZWwiXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJyb2xlIiwibWVudWl0ZW1yYWRpbyIsMywiY2xpY2siXSxbInN2Z0ljb24iLCJkb25lXzI0cHgiLDQsIm5nSWYiXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJyb2xlIiwibWVudWl0ZW1yYWRpbyIsMywiY2xpY2siLDQsIm5nSWYiXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJyb2xlIiwibWVudWl0ZW0iLCJjbGFzcyIsImRpc3BsYXktcmVnZXgtc3RyaW5nIiwzLCJjbGljayIsNCwibmdJZiJdLFsic3ZnSWNvbiIsImRvbmVfMjRweCJdLFsibWF0LW1lbnUtaXRlbSIsIiIsInJvbGUiLCJtZW51aXRlbSIsMSwiZGlzcGxheS1yZWdleC1zdHJpbmciLDMsImNsaWNrIl0sWyJzdmdJY29uIiwiZWRpdF8yNHB4Il0sWzQsIm5nSWYiXSxbImNsYXNzIiwibm9uZS1zZXQtc3RyaW5nIiw0LCJuZ0lmIl0sWzEsIm5vbmUtc2V0LXN0cmluZyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoT3UoMCwiYnV0dG9uIiwwKSx3dSgxLCJtYXQtaWNvbiIsMSksUHUoKSxPdSgyLCJtYXQtbWVudSIsMiwzKSxPdSg0LCJkaXYiLDQpLE1mKDUsIkNvbG9yIHJ1bnMgYnkiKSxQdSgpLE91KDYsImJ1dHRvbiIsNSksTnUoImNsaWNrIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uR3JvdXBCeUNoYW5nZS5lbWl0KHtrZXk6bi5Hcm91cEJ5S2V5LkVYUEVSSU1FTlR9KX0pKSxPdSg3LCJzcGFuIiksV20oOCx6MSwxLDAsIm1hdC1pY29uIiw2KSxQdSgpLE91KDksImxhYmVsIiksTWYoMTAsIkV4cGVyaW1lbnQiKSxQdSgpLFB1KCksT3UoMTEsImJ1dHRvbiIsNSksTnUoImNsaWNrIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uR3JvdXBCeUNoYW5nZS5lbWl0KHtrZXk6bi5Hcm91cEJ5S2V5LlJVTn0pfSkpLE91KDEyLCJzcGFuIiksV20oMTMsSDEsMSwwLCJtYXQtaWNvbiIsNiksUHUoKSxPdSgxNCwibGFiZWwiKSxNZigxNSwiUnVuIiksUHUoKSxQdSgpLFdtKDE2LEwxLDUsMiwiYnV0dG9uIiw3KSxXbSgxNyxqMSw1LDIsImJ1dHRvbiIsOCksUHUoKSksMiZlJiYodnUoIm1hdE1lbnVUcmlnZ2VyRm9yIixHbSgzKSksSmMoNiksTm0oImFyaWEtY2hlY2tlZCIsbi5zZWxlY3RlZEdyb3VwQnkua2V5PT09bi5Hcm91cEJ5S2V5LkVYUEVSSU1FTlQpLEpjKDIpLHZ1KCJuZ0lmIixuLnNlbGVjdGVkR3JvdXBCeS5rZXk9PT1uLkdyb3VwQnlLZXkuRVhQRVJJTUVOVCksSmMoMyksTm0oImFyaWEtY2hlY2tlZCIsbi5zZWxlY3RlZEdyb3VwQnkua2V5PT09bi5Hcm91cEJ5S2V5LlJVTiksSmMoMiksdnUoIm5nSWYiLG4uc2VsZWN0ZWRHcm91cEJ5LmtleT09PW4uR3JvdXBCeUtleS5SVU4pLEpjKDMpLHZ1KCJuZ0lmIixuLnNob3dHcm91cEJ5UmVnZXgpLEpjKDEpLHZ1KCJuZ0lmIixuLnNob3dHcm91cEJ5UmVnZXgpKX0sZGlyZWN0aXZlczpbTkgsTkcsY0csREcsT0csYXZdLHN0eWxlczpbJy5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHh9Lm1hdC1oMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaGVhZGxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTVweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZ1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjA1ZW07bWFyZ2luOjAgMCA1NnB4fS5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAwNWVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXJhaXNlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdHJva2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmxhdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZhYltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbWluaS1mYWJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4fS5tYXQtY2FyZC1zdWJ0aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGVja2JveC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvb3Rlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgdHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIzZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LjU0MTY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2NjY2NjY3ZW0pfUBtZWRpYSBwcmludHsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjJlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouMjVlbSAwIC43NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxZW0gMCAxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMiksIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi0wLjA2MjVlbX0ubWF0LW1lbnUtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci12ZXJ0aWNhbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGFiLWxpbmtbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MH0ubWF0LXRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5Om5vbmV9LmNkay12aXN1YWxseS1oaWRkZW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjZ9LmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV0sIC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3hbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2tbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHt9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7fS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOi13ZWJraXQtYXV0b2ZpbGwpe2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZVtfbmdjb250ZW50LSVDT01QJV17cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fS5tYXQtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfSAgLnJ1bi10YWJsZS1jb2xvci1ncm91cC1ieXtmb250LXNpemU6MTZweH0gIC5ydW4tdGFibGUtY29sb3ItZ3JvdXAtYnkgLmxhYmVse2NvbG9yOiM2MTYxNjE7Zm9udC1zaXplOi45ZW07bWFyZ2luOjEwcHggMDtwYWRkaW5nOjAgMTZweDtwb2ludGVyLWV2ZW50czpub25lfSAgLnJ1bi10YWJsZS1jb2xvci1ncm91cC1ieSBidXR0b257ZGlzcGxheTpncmlkO2dhcDoycHggMTBweDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MjBweCBhdXRvfSAgLnJ1bi10YWJsZS1jb2xvci1ncm91cC1ieSBtYXQtaWNvbntoZWlnaHQ6MjBweDt3aWR0aDoyMHB4fSAgLnJ1bi10YWJsZS1jb2xvci1ncm91cC1ieSAuZGlzcGxheS1yZWdleC1zdHJpbmd7cGFkZGluZy1sZWZ0OjQwcHh9ICAucnVuLXRhYmxlLWNvbG9yLWdyb3VwLWJ5IC5kaXNwbGF5LXJlZ2V4LXN0cmluZyAubm9uZS1zZXQtc3RyaW5ne2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgICAucnVuLXRhYmxlLWNvbG9yLWdyb3VwLWJ5IC5kaXNwbGF5LXJlZ2V4LXN0cmluZyAubm9uZS1zZXQtc3RyaW5nLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAgIC5ydW4tdGFibGUtY29sb3ItZ3JvdXAtYnkgLmRpc3BsYXktcmVnZXgtc3RyaW5nIC5ub25lLXNldC1zdHJpbmd7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9J10sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFUxLFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6InJ1bnMtZ3JvdXAtbWVudS1idXR0b24tY29tcG9uZW50Iix0ZW1wbGF0ZVVybDoicnVuc19ncm91cF9tZW51X2J1dHRvbl9jb21wb25lbnQubmcuaHRtbCIsc3R5bGVVcmxzOlsicnVuc19ncm91cF9tZW51X2J1dHRvbl9jb21wb25lbnQuY3NzIl0sY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkhXfV19KSx7ZXhwZXJpbWVudElkczpbe3R5cGU6eV99XSxyZWdleFN0cmluZzpbe3R5cGU6eV99XSxzZWxlY3RlZEdyb3VwQnk6W3t0eXBlOnlffV0sc2hvd0dyb3VwQnlSZWdleDpbe3R5cGU6eV99XSxvbkdyb3VwQnlDaGFuZ2U6W3t0eXBlOl9ffV19KTtjbGFzcyBXMXtjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXQsdGhpcy5zaG93R3JvdXBCeVJlZ2V4JD10aGlzLnN0b3JlLnNlbGVjdCh3RSksdGhpcy5zZWxlY3RlZEdyb3VwQnkkPXRoaXMuc3RvcmUuc2VsZWN0KGdOKSx0aGlzLmdyb3VwQnlSZWdleFN0cmluZyQ9dGhpcy5zdG9yZS5zZWxlY3QoTU4pfW9uR3JvdXBCeUNoYW5nZSh0KXt0aGlzLnN0b3JlLmRpc3BhdGNoKElBKHtleHBlcmltZW50SWRzOnRoaXMuZXhwZXJpbWVudElkcyxncm91cEJ5OnR9KSl9fVcxLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxXMSkoTXUoRWspKX0sVzEuybVjbXA9VW8oe3R5cGU6VzEsc2VsZWN0b3JzOltbInJ1bnMtZ3JvdXAtbWVudS1idXR0b24iXV0saW5wdXRzOntleHBlcmltZW50SWRzOiJleHBlcmltZW50SWRzIn0sZGVjbHM6NCx2YXJzOjEwLGNvbnN0czpbWzMsInJlZ2V4U3RyaW5nIiwic2VsZWN0ZWRHcm91cEJ5Iiwic2hvd0dyb3VwQnlSZWdleCIsImV4cGVyaW1lbnRJZHMiLCJvbkdyb3VwQnlDaGFuZ2UiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKE91KDAsInJ1bnMtZ3JvdXAtbWVudS1idXR0b24tY29tcG9uZW50IiwwKSxOdSgib25Hcm91cEJ5Q2hhbmdlIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vbkdyb3VwQnlDaGFuZ2UoZSl9KSksT2IoMSwiYXN5bmMiKSxPYigyLCJhc3luYyIpLE9iKDMsImFzeW5jIiksUHUoKSksMiZlJiZ2dSgicmVnZXhTdHJpbmciLFBiKDEsNCxuLmdyb3VwQnlSZWdleFN0cmluZyQpKSgic2VsZWN0ZWRHcm91cEJ5IixQYigyLDYsbi5zZWxlY3RlZEdyb3VwQnkkKSkoInNob3dHcm91cEJ5UmVnZXgiLFBiKDMsOCxuLnNob3dHcm91cEJ5UmVnZXgkKSkoImV4cGVyaW1lbnRJZHMiLG4uZXhwZXJpbWVudElkcyl9LGRpcmVjdGl2ZXM6W1UxXSxwaXBlczpbTXZdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoVzEsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoicnVucy1ncm91cC1tZW51LWJ1dHRvbiIsdGVtcGxhdGU6J1xuICAgIDxydW5zLWdyb3VwLW1lbnUtYnV0dG9uLWNvbXBvbmVudFxuICAgICAgW3JlZ2V4U3RyaW5nXT0iZ3JvdXBCeVJlZ2V4U3RyaW5nJCB8IGFzeW5jIlxuICAgICAgW3NlbGVjdGVkR3JvdXBCeV09InNlbGVjdGVkR3JvdXBCeSQgfCBhc3luYyJcbiAgICAgIFtzaG93R3JvdXBCeVJlZ2V4XT0ic2hvd0dyb3VwQnlSZWdleCQgfCBhc3luYyJcbiAgICAgIFtleHBlcmltZW50SWRzXT0iZXhwZXJpbWVudElkcyJcbiAgICAgIChvbkdyb3VwQnlDaGFuZ2UpPSJvbkdyb3VwQnlDaGFuZ2UoJGV2ZW50KSJcbiAgICA+PC9ydW5zLWdyb3VwLW1lbnUtYnV0dG9uLWNvbXBvbmVudD5cbiAgJyxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6RWt9XX0pLHtleHBlcmltZW50SWRzOlt7dHlwZTp5X31dfSk7Y29uc3QgRzE9WyJjb250YWluZXIiXTt2YXIgWTE7IShmdW5jdGlvbih0KXt0W3QuTk9ORT0wXT0iTk9ORSIsdFt0LkxFRlQ9MV09IkxFRlQiLHRbdC5SSUdIVD0yXT0iUklHSFQifSkoWTF8fChZMT17fSkpO2NsYXNzIHExe2NvbnN0cnVjdG9yKHQpe3RoaXMuY2hhbmdlRGV0ZWN0b3I9dCx0aGlzLnRpY2tDb3VudD0yMCx0aGlzLnZhbHVlPW5ldyBBYix0aGlzLlBvc2l0aW9uPVkxLHRoaXMuYWN0aXZlVGh1bWI9WTEuTk9ORSx0aGlzLm9mZnNldFhGcm9tT3JpZ2luT2ZBY3RpdmVUaHVtYj0wLHRoaXMubmdVbnN1YnNjcmliZT1uZXcgeH1nZXRUaHVtYlBvc2l0aW9uKHQpe2NvbnN0IGU9dGhpcy5nZXRDbGlwcGVkVmFsdWUodCksbj10aGlzLm1heC10aGlzLm1pbjtyZXR1cm4gbjw9MD8iNTAlIjooZS10aGlzLm1pbikvbioxMDArIiUifWdldFRyYWNrV2lkdGgoKXtjb25zdCB0PXRoaXMubWF4LXRoaXMubWluO3JldHVybiB0PD0wPyIwJSI6KHRoaXMuZ2V0Q2xpcHBlZFZhbHVlKHRoaXMudXBwZXJWYWx1ZSktdGhpcy5nZXRDbGlwcGVkVmFsdWUodGhpcy5sb3dlclZhbHVlKSkvdCoxMDArIiUifWdldENsaXBwZWRWYWx1ZSh0KXtyZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgodCx0aGlzLm1pbiksdGhpcy5tYXgpfW5nT25EZXN0cm95KCl7dGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKSx0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKX1uZ09uSW5pdCgpe1Z0KGRvY3VtZW50LCJtb3VzZW1vdmUiLHtwYXNzaXZlOiEwfSkucGlwZSh1bih0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKHQ9Pnt0aGlzLmhhbmRsZU1vdXNlTW92ZSh0KX0pKSxWdChkb2N1bWVudCwibW91c2V1cCIse3Bhc3NpdmU6ITB9KS5waXBlKHVuKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgodD0+e3RoaXMuaGFuZGxlTW91c2VPdXQodCl9KSl9aGFuZGxlTW91c2VEb3duKHQsZSl7dGhpcy5hY3RpdmVUaHVtYj1lLHRoaXMub2Zmc2V0WEZyb21PcmlnaW5PZkFjdGl2ZVRodW1iPTYtdC5vZmZzZXRYfWNhbGN1bGF0ZVZhbHVlRnJvbU1vdXNlRXZlbnQodCl7Y29uc3R7bGVmdDplLHJpZ2h0Om59PXRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbz10LmNsaWVudFgtZSt0aGlzLm9mZnNldFhGcm9tT3JpZ2luT2ZBY3RpdmVUaHVtYjtsZXQgaTtpZihudWxsIT09dGhpcy50aWNrQ291bnQmJnRoaXMudGlja0NvdW50PjApe2NvbnN0IHQ9KG4tZSkvdGhpcy50aWNrQ291bnQ7aT1NYXRoLnJvdW5kKG8vdCkqdC8obi1lKX1lbHNlIGk9by8obi1lKTtyZXR1cm4gdGhpcy5nZXRDbGlwcGVkVmFsdWUodGhpcy5taW4rKHRoaXMubWF4LXRoaXMubWluKSppKX1oYW5kbGVNb3VzZU1vdmUodCl7aWYodGhpcy5hY3RpdmVUaHVtYj09PVkxLk5PTkUpcmV0dXJuO2NvbnN0IGU9dGhpcy5jYWxjdWxhdGVWYWx1ZUZyb21Nb3VzZUV2ZW50KHQpO2xldCBuPVt0aGlzLmxvd2VyVmFsdWUsdGhpcy51cHBlclZhbHVlXTt0aGlzLmFjdGl2ZVRodW1iPT09WTEuTEVGVD8oZT50aGlzLnVwcGVyVmFsdWUmJih0aGlzLmFjdGl2ZVRodW1iPVkxLlJJR0hUKSxuPVtlLHRoaXMudXBwZXJWYWx1ZV0pOihlPHRoaXMubG93ZXJWYWx1ZSYmKHRoaXMuYWN0aXZlVGh1bWI9WTEuTEVGVCksbj1bdGhpcy5sb3dlclZhbHVlLGVdKSx0aGlzLm1heWJlTm90aWZ5TmV4dFZhbHVlKG4pLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCl9bWF5YmVOb3RpZnlOZXh0VmFsdWUodCl7Y29uc3RbZSxuXT10LnNvcnQoKCh0LGUpPT50LWUpKTt0aGlzLmxvd2VyVmFsdWU9PT1lJiZ0aGlzLnVwcGVyVmFsdWU9PT1ufHx0aGlzLnZhbHVlLmVtaXQoe2xvd2VyVmFsdWU6ZSx1cHBlclZhbHVlOm59KX1oYW5kbGVNb3VzZU91dCh0KXt0aGlzLmFjdGl2ZVRodW1iIT09WTEuTk9ORSYmKHRoaXMuYWN0aXZlVGh1bWI9WTEuTk9ORSx0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpKX1oYW5kbGVJbnB1dENoYW5nZSh0LGUpe2NvbnN0IG49dGhpcy5nZXRDbGlwcGVkVmFsdWUoTnVtYmVyKHQudGFyZ2V0LnZhbHVlKSk7aWYoaXNOYU4obikpcmV0dXJuO2xldCBvPVt0aGlzLmxvd2VyVmFsdWUsdGhpcy51cHBlclZhbHVlXTtvPWU9PT1ZMS5MRUZUP1tuLHRoaXMudXBwZXJWYWx1ZV06W3RoaXMubG93ZXJWYWx1ZSxuXSx0aGlzLm1heWJlTm90aWZ5TmV4dFZhbHVlKG8pfWlzVGh1bWJBY3RpdmUodCl7cmV0dXJuIHRoaXMuYWN0aXZlVGh1bWI9PT10fX1xMS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8cTEpKE11KEhoKSl9LHExLsm1Y21wPVVvKHt0eXBlOnExLHNlbGVjdG9yczpbWyJ0Yi1yYW5nZS1pbnB1dCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24gdChlLG4pe2lmKDEmZSYmV2IoRzEsMyxjaCksMiZlKXtsZXQgdDtVYih0PVliKCkpJiYobi5jb250YWluZXI9dC5maXJzdCl9fSxpbnB1dHM6e21pbjoibWluIixtYXg6Im1heCIsbG93ZXJWYWx1ZToibG93ZXJWYWx1ZSIsdXBwZXJWYWx1ZToidXBwZXJWYWx1ZSIsdGlja0NvdW50OiJ0aWNrQ291bnQifSxvdXRwdXRzOnt2YWx1ZToidmFsdWUifSxkZWNsczo4LHZhcnM6MTQsY29uc3RzOltbInR5cGUiLCJudW1iZXIiLDEsImxvd2VyLWlucHV0IiwzLCJ2YWx1ZSIsImNoYW5nZSJdLFsidHlwZSIsIm51bWJlciIsMSwidXBwZXItaW5wdXQiLDMsInZhbHVlIiwiY2hhbmdlIl0sWzEsImNvbnRhaW5lciJdLFsiY29udGFpbmVyIiwiIl0sWzEsInNsaWRlci10cmFjayJdLFsxLCJzbGlkZXItdHJhY2stZmlsbCJdLFsxLCJ0aHVtYiIsMywibW91c2Vkb3duIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihPdSgwLCJpbnB1dCIsMCksTnUoImNoYW5nZSIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4uaGFuZGxlSW5wdXRDaGFuZ2UoZSxuLlBvc2l0aW9uLkxFRlQpfSkpLFB1KCksT3UoMSwiaW5wdXQiLDEpLE51KCJjaGFuZ2UiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLmhhbmRsZUlucHV0Q2hhbmdlKGUsbi5Qb3NpdGlvbi5SSUdIVCl9KSksUHUoKSxPdSgyLCJzcGFuIiwyLDMpLHd1KDQsInNwYW4iLDQpLHd1KDUsInNwYW4iLDUpLE91KDYsInNwYW4iLDYpLE51KCJtb3VzZWRvd24iLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLmhhbmRsZU1vdXNlRG93bihlLG4uUG9zaXRpb24uTEVGVCl9KSksUHUoKSxPdSg3LCJzcGFuIiw2KSxOdSgibW91c2Vkb3duIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5oYW5kbGVNb3VzZURvd24oZSxuLlBvc2l0aW9uLlJJR0hUKX0pKSxQdSgpLFB1KCkpLDImZSYmKHZ1KCJ2YWx1ZSIsbi5sb3dlclZhbHVlKSxKYygxKSx2dSgidmFsdWUiLG4udXBwZXJWYWx1ZSksSmMoNCksb2YoImxlZnQiLG4uZ2V0VGh1bWJQb3NpdGlvbihuLmxvd2VyVmFsdWUpKSgid2lkdGgiLG4uZ2V0VHJhY2tXaWR0aCgpKSxKYygxKSxvZigibGVmdCIsbi5nZXRUaHVtYlBvc2l0aW9uKG4ubG93ZXJWYWx1ZSkpLGFmKCJhY3RpdmUiLG4uaXNUaHVtYkFjdGl2ZShuLlBvc2l0aW9uLkxFRlQpKSxKYygxKSxvZigibGVmdCIsbi5nZXRUaHVtYlBvc2l0aW9uKG4udXBwZXJWYWx1ZSkpLGFmKCJhY3RpdmUiLG4uaXNUaHVtYkFjdGl2ZShuLlBvc2l0aW9uLlJJR0hUKSkpfSxzdHlsZXM6WycubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1iYWRnZS1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo5cHh9Lm1hdC1iYWRnZS1sYXJnZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4fS5tYXQtaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWhlYWRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAyNHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE1cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjgzKS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1oNltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC42NykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtYm9keS1zdHJvbmdbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MCAwIDEycHh9Lm1hdC1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FwdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTJweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6MzAwIDExMnB4LzExMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wNWVtO21hcmdpbjowIDAgNTZweH0ubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNTZweC81NnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMmVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNDVweC80OHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMDVlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDM0cHgvNDBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1yYWlzZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3Ryb2tlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZsYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mYWJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW1pbmktZmFiW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtYnV0dG9uLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FyZC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjBweH0ubWF0LWNhcmQtc3VidGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hlY2tib3gtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC10cmFpbGluZy1pY29uLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC1yZW1vdmUubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxOHB4fS5tYXQtdGFibGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWhlYWRlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb290ZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jYWxlbmRhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FsZW5kYXItYm9keVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYWxlbmRhci1wZXJpb2QtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWRpYWxvZy10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTI1O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTUwJTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjVlbTt3aWR0aDoxLjVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW07bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41ZW0gMDtib3JkZXItdG9wOi44NDM3NWVtIHNvbGlkIHRyYW5zcGFyZW50fS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3RvcDotMC44NDM3NWVtO3BhZGRpbmctdG9wOi44NDM3NWVtfS5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjc1JTttYXJnaW4tdG9wOi42NjY2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNzkxNjY2NjY2N2VtKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAycHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyM2VtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzUzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi41NDE2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNjY2NjY2NjY2N2VtKX1AbWVkaWEgcHJpbnR7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIyZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIxZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMmVtKSBzY2FsZSgwLjc1KX19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjI1ZW0gMCAuNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4wOTM3NWVtO21hcmdpbi10b3A6LTAuNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MWVtIDAgMWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjg0Mzc1ZW07bWFyZ2luLXRvcDotMC4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH1pbnB1dC5tYXQtaW5wdXQtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDotMC4wNjI1ZW19Lm1hdC1tZW51LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1wYWdpbmF0b3JbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXBhZ2luYXRvci1wYWdlLXNpemVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3RbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXN0ZXBwZXItdmVydGljYWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc3RlcC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0Om5vcm1hbH0ubWF0LXN0ZXAtbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRhYi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjB9Lm1hdC10b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTZweH0ubWF0LW9wdGdyb3VwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LXNpbXBsZS1zbmFja2Jhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbltfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRyZWVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbmVzdGVkLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4fS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVdOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtcmlwcGxlLm1hdC1yaXBwbGUtdW5ib3VuZGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6NTAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7dHJhbnNmb3JtOnNjYWxlKDApfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpub25lfS5jZGstdmlzdWFsbHktaGlkZGVuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7bGVmdDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmVtcHR5e2Rpc3BsYXk6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LXBhbmVbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOmF1dG87Ym94LXNpemluZzpib3JkZXItYm94O3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7bWF4LXdpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlfS5jZGstb3ZlcmxheS1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKTtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5Oi42fS5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjMyKX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTowfS5jZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO292ZXJmbG93LXk6c2Nyb2xsfUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnR7fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5ke30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxse2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCAwcyAxbXN9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06bm90KDotd2Via2l0LWF1dG9maWxsKXthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIDBzIDFtc310ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemVbX25nY29udGVudC0lQ09NUCVde3Jlc2l6ZTpub25lfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmdbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OmF1dG8gIWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW4gIWltcG9ydGFudH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nLWZpcmVmb3hbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OjAgIWltcG9ydGFudH0ubWF0LWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX1bX25naG9zdC0lQ09NUCVde2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmlubGluZS1ncmlkO2dyaWQtZ2FwOjEwcHg7Z3JpZC10ZW1wbGF0ZS1hcmVhczoibG93ZXItaW5wdXQgdXBwZXItaW5wdXQiICJzbGlkZXIgc2xpZGVyIjtmb250LXNpemU6MDttaW4td2lkdGg6MTAwcHg7cGFkZGluZzo2cHh9aW5wdXRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6aW5oZXJpdDtib3JkZXItc3R5bGU6c29saWQ7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOmluaGVyaXQ7b3ZlcmZsb3c6aGlkZGVuO3dpZHRoOjEwMCV9Lmxvd2VyLWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXtncmlkLWFyZWE6bG93ZXItaW5wdXR9LnVwcGVyLWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXtncmlkLWFyZWE6dXBwZXItaW5wdXQ7anVzdGlmeS1zZWxmOmZsZXgtZW5kfS5jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2dyaWQtYXJlYTpzbGlkZXI7YWxpZ24taXRlbXM6Y2VudGVyO2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmlubGluZS1mbGV4O2hlaWdodDoxMnB4O2p1c3RpZnktY29udGVudDpjZW50ZXI7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MTAwJX0uc2xpZGVyLXRyYWNrW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjI2KTtoZWlnaHQ6MnB4O3dpZHRoOjEwMCV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnNsaWRlci10cmFja1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5zbGlkZXItdHJhY2tbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMyl9LnNsaWRlci10cmFjay1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtoZWlnaHQ6MnB4fS50aHVtYltfbmdjb250ZW50LSVDT01QJV17Ym94LXNhZGhvdzowIDAgMCAxcHggcmdiYSgwLDAsMCwuMjYpO2JvcmRlci1yYWRpdXM6MTAwJTtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MTJweDttYXJnaW4tbGVmdDotNnB4O3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyO3RyYW5zaXRpb246dHJhbnNmb3JtIC4zcyBlYXNlO3dpZHRoOjEycHg7d2lsbC1jaGFuZ2U6dHJhbnNmb3JtfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC50aHVtYltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC50aHVtYltfbmdjb250ZW50LSVDT01QJV17Ym94LXNhZGhvdzowIDAgMCAxcHggcmdiYSgyNTUsMjU1LDI1NSwuMyl9LnRodW1iLmFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnNjYWxlKDEuMil9LnNsaWRlci10cmFjay1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnRodW1iW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOiNmNTdjMDB9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnNsaWRlci10cmFjay1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNsaWRlci10cmFjay1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnRodW1iW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnRodW1iW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOiNlZjZjMDB9J10sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHExLFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6InRiLXJhbmdlLWlucHV0Iix0ZW1wbGF0ZVVybDoiLi9yYW5nZV9pbnB1dF9jb21wb25lbnQubmcuaHRtbCIsc3R5bGVVcmxzOlsiLi9yYW5nZV9pbnB1dF9jb21wb25lbnQuY3NzIl0sY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkhofV19KSx7Y29udGFpbmVyOlt7dHlwZTpGcixhcmdzOlsiY29udGFpbmVyIix7c3RhdGljOiEwLHJlYWQ6Y2h9XX1dLG1pbjpbe3R5cGU6eV99XSxtYXg6W3t0eXBlOnlffV0sbG93ZXJWYWx1ZTpbe3R5cGU6eV99XSx1cHBlclZhbHVlOlt7dHlwZTp5X31dLHRpY2tDb3VudDpbe3R5cGU6eV99XSx2YWx1ZTpbe3R5cGU6X199XX0pO2NvbnN0IFoxPVsiZGlhbG9nUG9wdXAiXSxYMT1bImh1ZVNsaWRlciJdLEsxPVsiYWxwaGFTbGlkZXIiXTtmdW5jdGlvbiBKMSh0LGUpe2lmKDEmdCYmd3UoMCwiZGl2IiksMiZ0KXtjb25zdCB0PUx1KCk7d2YoImFycm93IGFycm93LSIsdC5jcFVzZVBvc2l0aW9uLCIiKSxvZigidG9wIix0LmFycm93VG9wLCJweCIpfX1mdW5jdGlvbiBRMSh0LGUpe2lmKDEmdCl7Y29uc3QgdD1FdSgpO091KDAsImRpdiIsMjYpLE51KCJuZXdWYWx1ZSIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIHJhKHQpLEx1KCkub25Db2xvckNoYW5nZShuKX0pKSgiZHJhZ1N0YXJ0IiwoZnVuY3Rpb24gZSgpe3JldHVybiByYSh0KSxMdSgpLm9uRHJhZ1N0YXJ0KCJzYXR1cmF0aW9uLWxpZ2h0bmVzcyIpfSkpKCJkcmFnRW5kIiwoZnVuY3Rpb24gZSgpe3JldHVybiByYSh0KSxMdSgpLm9uRHJhZ0VuZCgic2F0dXJhdGlvbi1saWdodG5lc3MiKX0pKSx3dSgxLCJkaXYiLDEzKSxQdSgpfWlmKDImdCl7Y29uc3QgdD1MdSgpO29mKCJiYWNrZ3JvdW5kLWNvbG9yIix0Lmh1ZVNsaWRlckNvbG9yKSx2dSgicmdYIiwxKSgicmdZIiwxKSxKYygxKSxvZigidG9wIixudWxsPT10LnNsaWRlcj9udWxsOnQuc2xpZGVyLnYsInB4IikoImxlZnQiLG51bGw9PXQuc2xpZGVyP251bGw6dC5zbGlkZXIucywicHgiKX19ZnVuY3Rpb24gJDEodCxlKXtpZigxJnQpe2NvbnN0IHQ9RXUoKTtPdSgwLCJidXR0b24iLDI3KSxOdSgiY2xpY2siLChmdW5jdGlvbiBlKG4pe3JhKHQpO2NvbnN0IG89THUoKTtyZXR1cm4gby5vbkFkZFByZXNldENvbG9yKG4sby5zZWxlY3RlZENvbG9yKX0pKSxNZigxKSxQdSgpfWlmKDImdCl7Y29uc3QgdD1MdSgpO2xmKHQuY3BBZGRDb2xvckJ1dHRvbkNsYXNzKSx2dSgiZGlzYWJsZWQiLHQuY3BQcmVzZXRDb2xvcnMmJnQuY3BQcmVzZXRDb2xvcnMubGVuZ3RoPj10LmNwTWF4UHJlc2V0Q29sb3JzTGVuZ3RoKSxKYygxKSx4ZigiICIsdC5jcEFkZENvbG9yQnV0dG9uVGV4dCwiICIpfX1mdW5jdGlvbiB0Myh0LGUpezEmdCYmd3UoMCwiZGl2IiwyOCl9ZnVuY3Rpb24gZTModCxlKXtpZigxJnQpe2NvbnN0IHQ9RXUoKTtPdSgwLCJpbnB1dCIsMzQpLE51KCJrZXl1cC5lbnRlciIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIHJhKHQpLEx1KDIpLm9uQWNjZXB0Q29sb3Iobil9KSkoIm5ld1ZhbHVlIiwoZnVuY3Rpb24gZShuKXtyZXR1cm4gcmEodCksTHUoMikub25BbHBoYUlucHV0KG4pfSkpLFB1KCl9aWYoMiZ0KXtjb25zdCB0PUx1KDIpO3Z1KCJyZyIsMSkoInZhbHVlIixudWxsPT10LmNteWtUZXh0P251bGw6dC5jbXlrVGV4dC5hKX19ZnVuY3Rpb24gbjModCxlKXsxJnQmJihPdSgwLCJkaXYiKSxNZigxLCJBIiksUHUoKSl9ZnVuY3Rpb24gbzModCxlKXtpZigxJnQpe2NvbnN0IHQ9RXUoKTtPdSgwLCJkaXYiLDI5KSxPdSgxLCJkaXYiLDMwKSxPdSgyLCJpbnB1dCIsMzEpLE51KCJrZXl1cC5lbnRlciIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIHJhKHQpLEx1KCkub25BY2NlcHRDb2xvcihuKX0pKSgibmV3VmFsdWUiLChmdW5jdGlvbiBlKG4pe3JldHVybiByYSh0KSxMdSgpLm9uQ3lhbklucHV0KG4pfSkpLFB1KCksT3UoMywiaW5wdXQiLDMxKSxOdSgia2V5dXAuZW50ZXIiLChmdW5jdGlvbiBlKG4pe3JldHVybiByYSh0KSxMdSgpLm9uQWNjZXB0Q29sb3Iobil9KSkoIm5ld1ZhbHVlIiwoZnVuY3Rpb24gZShuKXtyZXR1cm4gcmEodCksTHUoKS5vbk1hZ2VudGFJbnB1dChuKX0pKSxQdSgpLE91KDQsImlucHV0IiwzMSksTnUoImtleXVwLmVudGVyIiwoZnVuY3Rpb24gZShuKXtyZXR1cm4gcmEodCksTHUoKS5vbkFjY2VwdENvbG9yKG4pfSkpKCJuZXdWYWx1ZSIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIHJhKHQpLEx1KCkub25ZZWxsb3dJbnB1dChuKX0pKSxQdSgpLE91KDUsImlucHV0IiwzMSksTnUoImtleXVwLmVudGVyIiwoZnVuY3Rpb24gZShuKXtyZXR1cm4gcmEodCksTHUoKS5vbkFjY2VwdENvbG9yKG4pfSkpKCJuZXdWYWx1ZSIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIHJhKHQpLEx1KCkub25CbGFja0lucHV0KG4pfSkpLFB1KCksV20oNixlMywxLDIsImlucHV0IiwzMiksUHUoKSxPdSg3LCJkaXYiLDMwKSxPdSg4LCJkaXYiKSxNZig5LCJDIiksUHUoKSxPdSgxMCwiZGl2IiksTWYoMTEsIk0iKSxQdSgpLE91KDEyLCJkaXYiKSxNZigxMywiWSIpLFB1KCksT3UoMTQsImRpdiIpLE1mKDE1LCJLIiksUHUoKSxXbSgxNixuMywyLDAsImRpdiIsMzMpLFB1KCksUHUoKX1pZigyJnQpe2NvbnN0IHQ9THUoKTtvZigiZGlzcGxheSIsMyE9PXQuZm9ybWF0PyJub25lIjoiYmxvY2siKSxKYygyKSx2dSgicmciLDEwMCkoInZhbHVlIixudWxsPT10LmNteWtUZXh0P251bGw6dC5jbXlrVGV4dC5jKSxKYygxKSx2dSgicmciLDEwMCkoInZhbHVlIixudWxsPT10LmNteWtUZXh0P251bGw6dC5jbXlrVGV4dC5tKSxKYygxKSx2dSgicmciLDEwMCkoInZhbHVlIixudWxsPT10LmNteWtUZXh0P251bGw6dC5jbXlrVGV4dC55KSxKYygxKSx2dSgicmciLDEwMCkoInZhbHVlIixudWxsPT10LmNteWtUZXh0P251bGw6dC5jbXlrVGV4dC5rKSxKYygxKSx2dSgibmdJZiIsImRpc2FibGVkIiE9PXQuY3BBbHBoYUNoYW5uZWwpLEpjKDEwKSx2dSgibmdJZiIsImRpc2FibGVkIiE9PXQuY3BBbHBoYUNoYW5uZWwpfX1mdW5jdGlvbiBpMyh0LGUpe2lmKDEmdCl7Y29uc3QgdD1FdSgpO091KDAsImlucHV0IiwzNCksTnUoImtleXVwLmVudGVyIiwoZnVuY3Rpb24gZShuKXtyZXR1cm4gcmEodCksTHUoMikub25BY2NlcHRDb2xvcihuKX0pKSgibmV3VmFsdWUiLChmdW5jdGlvbiBlKG4pe3JldHVybiByYSh0KSxMdSgyKS5vbkFscGhhSW5wdXQobil9KSksUHUoKX1pZigyJnQpe2NvbnN0IHQ9THUoMik7dnUoInJnIiwxKSgidmFsdWUiLG51bGw9PXQuaHNsYVRleHQ/bnVsbDp0LmhzbGFUZXh0LmEpfX1mdW5jdGlvbiBhMyh0LGUpezEmdCYmKE91KDAsImRpdiIpLE1mKDEsIkEiKSxQdSgpKX1mdW5jdGlvbiByMyh0LGUpe2lmKDEmdCl7Y29uc3QgdD1FdSgpO091KDAsImRpdiIsMzUpLE91KDEsImRpdiIsMzApLE91KDIsImlucHV0IiwzNiksTnUoImtleXVwLmVudGVyIiwoZnVuY3Rpb24gZShuKXtyZXR1cm4gcmEodCksTHUoKS5vbkFjY2VwdENvbG9yKG4pfSkpKCJuZXdWYWx1ZSIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIHJhKHQpLEx1KCkub25IdWVJbnB1dChuKX0pKSxQdSgpLE91KDMsImlucHV0IiwzMSksTnUoImtleXVwLmVudGVyIiwoZnVuY3Rpb24gZShuKXtyZXR1cm4gcmEodCksTHUoKS5vbkFjY2VwdENvbG9yKG4pfSkpKCJuZXdWYWx1ZSIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIHJhKHQpLEx1KCkub25TYXR1cmF0aW9uSW5wdXQobil9KSksUHUoKSxPdSg0LCJpbnB1dCIsMzEpLE51KCJrZXl1cC5lbnRlciIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIHJhKHQpLEx1KCkub25BY2NlcHRDb2xvcihuKX0pKSgibmV3VmFsdWUiLChmdW5jdGlvbiBlKG4pe3JldHVybiByYSh0KSxMdSgpLm9uTGlnaHRuZXNzSW5wdXQobil9KSksUHUoKSxXbSg1LGkzLDEsMiwiaW5wdXQiLDMyKSxQdSgpLE91KDYsImRpdiIsMzApLE91KDcsImRpdiIpLE1mKDgsIkgiKSxQdSgpLE91KDksImRpdiIpLE1mKDEwLCJTIiksUHUoKSxPdSgxMSwiZGl2IiksTWYoMTIsIkwiKSxQdSgpLFdtKDEzLGEzLDIsMCwiZGl2IiwzMyksUHUoKSxQdSgpfWlmKDImdCl7Y29uc3QgdD1MdSgpO29mKCJkaXNwbGF5IiwyIT09dC5mb3JtYXQ/Im5vbmUiOiJibG9jayIpLEpjKDIpLHZ1KCJyZyIsMzYwKSgidmFsdWUiLG51bGw9PXQuaHNsYVRleHQ/bnVsbDp0LmhzbGFUZXh0LmgpLEpjKDEpLHZ1KCJyZyIsMTAwKSgidmFsdWUiLG51bGw9PXQuaHNsYVRleHQ/bnVsbDp0LmhzbGFUZXh0LnMpLEpjKDEpLHZ1KCJyZyIsMTAwKSgidmFsdWUiLG51bGw9PXQuaHNsYVRleHQ/bnVsbDp0LmhzbGFUZXh0LmwpLEpjKDEpLHZ1KCJuZ0lmIiwiZGlzYWJsZWQiIT09dC5jcEFscGhhQ2hhbm5lbCksSmMoOCksdnUoIm5nSWYiLCJkaXNhYmxlZCIhPT10LmNwQWxwaGFDaGFubmVsKX19ZnVuY3Rpb24gczModCxlKXtpZigxJnQpe2NvbnN0IHQ9RXUoKTtPdSgwLCJpbnB1dCIsMzQpLE51KCJrZXl1cC5lbnRlciIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIHJhKHQpLEx1KDIpLm9uQWNjZXB0Q29sb3Iobil9KSkoIm5ld1ZhbHVlIiwoZnVuY3Rpb24gZShuKXtyZXR1cm4gcmEodCksTHUoMikub25BbHBoYUlucHV0KG4pfSkpLFB1KCl9aWYoMiZ0KXtjb25zdCB0PUx1KDIpO3Z1KCJyZyIsMSkoInZhbHVlIixudWxsPT10LnJnYmFUZXh0P251bGw6dC5yZ2JhVGV4dC5hKX19ZnVuY3Rpb24gbDModCxlKXsxJnQmJihPdSgwLCJkaXYiKSxNZigxLCJBIiksUHUoKSl9ZnVuY3Rpb24gYzModCxlKXtpZigxJnQpe2NvbnN0IHQ9RXUoKTtPdSgwLCJkaXYiLDM3KSxPdSgxLCJkaXYiLDMwKSxPdSgyLCJpbnB1dCIsMzgpLE51KCJrZXl1cC5lbnRlciIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIHJhKHQpLEx1KCkub25BY2NlcHRDb2xvcihuKX0pKSgibmV3VmFsdWUiLChmdW5jdGlvbiBlKG4pe3JldHVybiByYSh0KSxMdSgpLm9uUmVkSW5wdXQobil9KSksUHUoKSxPdSgzLCJpbnB1dCIsMzgpLE51KCJrZXl1cC5lbnRlciIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIHJhKHQpLEx1KCkub25BY2NlcHRDb2xvcihuKX0pKSgibmV3VmFsdWUiLChmdW5jdGlvbiBlKG4pe3JldHVybiByYSh0KSxMdSgpLm9uR3JlZW5JbnB1dChuKX0pKSxQdSgpLE91KDQsImlucHV0IiwzOCksTnUoImtleXVwLmVudGVyIiwoZnVuY3Rpb24gZShuKXtyZXR1cm4gcmEodCksTHUoKS5vbkFjY2VwdENvbG9yKG4pfSkpKCJuZXdWYWx1ZSIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIHJhKHQpLEx1KCkub25CbHVlSW5wdXQobil9KSksUHUoKSxXbSg1LHMzLDEsMiwiaW5wdXQiLDMyKSxQdSgpLE91KDYsImRpdiIsMzApLE91KDcsImRpdiIpLE1mKDgsIlIiKSxQdSgpLE91KDksImRpdiIpLE1mKDEwLCJHIiksUHUoKSxPdSgxMSwiZGl2IiksTWYoMTIsIkIiKSxQdSgpLFdtKDEzLGwzLDIsMCwiZGl2IiwzMyksUHUoKSxQdSgpfWlmKDImdCl7Y29uc3QgdD1MdSgpO29mKCJkaXNwbGF5IiwxIT09dC5mb3JtYXQ/Im5vbmUiOiJibG9jayIpLEpjKDIpLHZ1KCJyZyIsMjU1KSgidmFsdWUiLG51bGw9PXQucmdiYVRleHQ/bnVsbDp0LnJnYmFUZXh0LnIpLEpjKDEpLHZ1KCJyZyIsMjU1KSgidmFsdWUiLG51bGw9PXQucmdiYVRleHQ/bnVsbDp0LnJnYmFUZXh0LmcpLEpjKDEpLHZ1KCJyZyIsMjU1KSgidmFsdWUiLG51bGw9PXQucmdiYVRleHQ/bnVsbDp0LnJnYmFUZXh0LmIpLEpjKDEpLHZ1KCJuZ0lmIiwiZGlzYWJsZWQiIT09dC5jcEFscGhhQ2hhbm5lbCksSmMoOCksdnUoIm5nSWYiLCJkaXNhYmxlZCIhPT10LmNwQWxwaGFDaGFubmVsKX19ZnVuY3Rpb24gZDModCxlKXtpZigxJnQpe2NvbnN0IHQ9RXUoKTtPdSgwLCJpbnB1dCIsMzQpLE51KCJrZXl1cC5lbnRlciIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIHJhKHQpLEx1KDIpLm9uQWNjZXB0Q29sb3Iobil9KSkoIm5ld1ZhbHVlIiwoZnVuY3Rpb24gZShuKXtyZXR1cm4gcmEodCksTHUoMikub25BbHBoYUlucHV0KG4pfSkpLFB1KCl9aWYoMiZ0KXtjb25zdCB0PUx1KDIpO3Z1KCJyZyIsMSkoInZhbHVlIix0LmhleEFscGhhKX19ZnVuY3Rpb24gcDModCxlKXsxJnQmJihPdSgwLCJkaXYiKSxNZigxLCJBIiksUHUoKSl9ZnVuY3Rpb24gbTModCxlKXtpZigxJnQpe2NvbnN0IHQ9RXUoKTtPdSgwLCJkaXYiLDM5KSxPdSgxLCJkaXYiLDMwKSxPdSgyLCJpbnB1dCIsNDApLE51KCJibHVyIiwoZnVuY3Rpb24gZSgpe3JldHVybiByYSh0KSxMdSgpLm9uSGV4SW5wdXQobnVsbCl9KSkoImtleXVwLmVudGVyIiwoZnVuY3Rpb24gZShuKXtyZXR1cm4gcmEodCksTHUoKS5vbkFjY2VwdENvbG9yKG4pfSkpKCJuZXdWYWx1ZSIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIHJhKHQpLEx1KCkub25IZXhJbnB1dChuKX0pKSxQdSgpLFdtKDMsZDMsMSwyLCJpbnB1dCIsMzIpLFB1KCksT3UoNCwiZGl2IiwzMCksT3UoNSwiZGl2IiksTWYoNiwiSGV4IiksUHUoKSxXbSg3LHAzLDIsMCwiZGl2IiwzMyksUHUoKSxQdSgpfWlmKDImdCl7Y29uc3QgdD1MdSgpO29mKCJkaXNwbGF5IiwwIT09dC5mb3JtYXQ/Im5vbmUiOiJibG9jayIpLGFmKCJoZXgtYWxwaGEiLCJmb3JjZWQiPT09dC5jcEFscGhhQ2hhbm5lbCksSmMoMiksdnUoInZhbHVlIix0LmhleFRleHQpLEpjKDEpLHZ1KCJuZ0lmIiwiZm9yY2VkIj09PXQuY3BBbHBoYUNoYW5uZWwpLEpjKDQpLHZ1KCJuZ0lmIiwiZm9yY2VkIj09PXQuY3BBbHBoYUNoYW5uZWwpfX1mdW5jdGlvbiB1Myh0LGUpe2lmKDEmdCl7Y29uc3QgdD1FdSgpO091KDAsImlucHV0IiwzNCksTnUoImtleXVwLmVudGVyIiwoZnVuY3Rpb24gZShuKXtyZXR1cm4gcmEodCksTHUoMikub25BY2NlcHRDb2xvcihuKX0pKSgibmV3VmFsdWUiLChmdW5jdGlvbiBlKG4pe3JldHVybiByYSh0KSxMdSgyKS5vbkFscGhhSW5wdXQobil9KSksUHUoKX1pZigyJnQpe2NvbnN0IHQ9THUoMik7dnUoInJnIiwxKSgidmFsdWUiLG51bGw9PXQuaHNsYVRleHQ/bnVsbDp0LmhzbGFUZXh0LmEpfX1mdW5jdGlvbiBmMyh0LGUpe2lmKDEmdCl7Y29uc3QgdD1FdSgpO091KDAsImRpdiIsNDEpLE91KDEsImRpdiIsMzApLE91KDIsImlucHV0IiwzMSksTnUoImtleXVwLmVudGVyIiwoZnVuY3Rpb24gZShuKXtyZXR1cm4gcmEodCksTHUoKS5vbkFjY2VwdENvbG9yKG4pfSkpKCJuZXdWYWx1ZSIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIHJhKHQpLEx1KCkub25WYWx1ZUlucHV0KG4pfSkpLFB1KCksV20oMyx1MywxLDIsImlucHV0IiwzMiksUHUoKSxPdSg0LCJkaXYiLDMwKSxPdSg1LCJkaXYiKSxNZig2LCJWIiksUHUoKSxPdSg3LCJkaXYiKSxNZig4LCJBIiksUHUoKSxQdSgpLFB1KCl9aWYoMiZ0KXtjb25zdCB0PUx1KCk7SmMoMiksdnUoInJnIiwxMDApKCJ2YWx1ZSIsbnVsbD09dC5oc2xhVGV4dD9udWxsOnQuaHNsYVRleHQubCksSmMoMSksdnUoIm5nSWYiLCJkaXNhYmxlZCIhPT10LmNwQWxwaGFDaGFubmVsKX19ZnVuY3Rpb24gZzModCxlKXtpZigxJnQpe2NvbnN0IHQ9RXUoKTtPdSgwLCJkaXYiLDQyKSxPdSgxLCJzcGFuIiw0MyksTnUoImNsaWNrIiwoZnVuY3Rpb24gZSgpe3JldHVybiByYSh0KSxMdSgpLm9uRm9ybWF0VG9nZ2xlKC0xKX0pKSxQdSgpLE91KDIsInNwYW4iLDQzKSxOdSgiY2xpY2siLChmdW5jdGlvbiBlKCl7cmV0dXJuIHJhKHQpLEx1KCkub25Gb3JtYXRUb2dnbGUoMSl9KSksUHUoKSxQdSgpfX1mdW5jdGlvbiBoMyh0LGUpe2lmKDEmdCl7Y29uc3QgdD1FdSgpO091KDAsInNwYW4iLDUwKSxOdSgiY2xpY2siLChmdW5jdGlvbiBlKG4pe3JhKHQpO2NvbnN0IG89THUoKS4kaW1wbGljaXQ7cmV0dXJuIEx1KDMpLm9uUmVtb3ZlUHJlc2V0Q29sb3IobixvKX0pKSxQdSgpfTImdCYmbGYoTHUoNCkuY3BSZW1vdmVDb2xvckJ1dHRvbkNsYXNzKX1mdW5jdGlvbiBiMyh0LGUpe2lmKDEmdCl7Y29uc3QgdD1FdSgpO091KDAsImRpdiIsNDgpLE51KCJjbGljayIsKGZ1bmN0aW9uIG4oKXtyYSh0KTtjb25zdCBvPWUuJGltcGxpY2l0O3JldHVybiBMdSgzKS5zZXRDb2xvckZyb21TdHJpbmcobyl9KSksV20oMSxoMywxLDMsInNwYW4iLDQ5KSxQdSgpfWlmKDImdCl7Y29uc3QgdD1lLiRpbXBsaWNpdCxuPUx1KDMpO29mKCJiYWNrZ3JvdW5kLWNvbG9yIix0KSxKYygxKSx2dSgibmdJZiIsbi5jcEFkZENvbG9yQnV0dG9uKX19ZnVuY3Rpb24geTModCxlKXtpZigxJnQmJihPdSgwLCJkaXYiKSxXbSgxLGIzLDIsMywiZGl2Iiw0NyksUHUoKSksMiZ0KXtjb25zdCB0PUx1KDIpO2xmKHQuY3BQcmVzZXRDb2xvcnNDbGFzcyksSmMoMSksdnUoIm5nRm9yT2YiLHQuY3BQcmVzZXRDb2xvcnMpfX1mdW5jdGlvbiBfMyh0LGUpe2lmKDEmdCYmKE91KDAsImRpdiIpLE1mKDEpLFB1KCkpLDImdCl7Y29uc3QgdD1MdSgyKTtsZih0LmNwUHJlc2V0RW1wdHlNZXNzYWdlQ2xhc3MpLEpjKDEpLHZmKHQuY3BQcmVzZXRFbXB0eU1lc3NhZ2UpfX1mdW5jdGlvbiBDMyh0LGUpe2lmKDEmdCYmKE91KDAsImRpdiIsNDQpLHd1KDEsImhyIiksT3UoMiwiZGl2Iiw0NSksTWYoMyksUHUoKSxXbSg0LHkzLDIsNCwiZGl2Iiw0NiksV20oNSxfMywyLDQsImRpdiIsNDYpLFB1KCkpLDImdCl7Y29uc3QgdD1MdSgpO0pjKDMpLHZmKHQuY3BQcmVzZXRMYWJlbCksSmMoMSksdnUoIm5nSWYiLG51bGw9PXQuY3BQcmVzZXRDb2xvcnM/bnVsbDp0LmNwUHJlc2V0Q29sb3JzLmxlbmd0aCksSmMoMSksdnUoIm5nSWYiLCEobnVsbCE9dC5jcFByZXNldENvbG9ycyYmdC5jcFByZXNldENvbG9ycy5sZW5ndGgpJiZ0LmNwQWRkQ29sb3JCdXR0b24pfX1mdW5jdGlvbiBNMyh0LGUpe2lmKDEmdCl7Y29uc3QgdD1FdSgpO091KDAsImJ1dHRvbiIsNTMpLE51KCJjbGljayIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIHJhKHQpLEx1KDIpLm9uQ2FuY2VsQ29sb3Iobil9KSksTWYoMSksUHUoKX1pZigyJnQpe2NvbnN0IHQ9THUoMik7bGYodC5jcENhbmNlbEJ1dHRvbkNsYXNzKSxKYygxKSx2Zih0LmNwQ2FuY2VsQnV0dG9uVGV4dCl9fWZ1bmN0aW9uIHYzKHQsZSl7aWYoMSZ0KXtjb25zdCB0PUV1KCk7T3UoMCwiYnV0dG9uIiw1MyksTnUoImNsaWNrIiwoZnVuY3Rpb24gZShuKXtyZXR1cm4gcmEodCksTHUoMikub25BY2NlcHRDb2xvcihuKX0pKSxNZigxKSxQdSgpfWlmKDImdCl7Y29uc3QgdD1MdSgyKTtsZih0LmNwT0tCdXR0b25DbGFzcyksSmMoMSksdmYodC5jcE9LQnV0dG9uVGV4dCl9fWZ1bmN0aW9uIHgzKHQsZSl7aWYoMSZ0JiYoT3UoMCwiZGl2Iiw1MSksV20oMSxNMywyLDQsImJ1dHRvbiIsNTIpLFdtKDIsdjMsMiw0LCJidXR0b24iLDUyKSxQdSgpKSwyJnQpe2NvbnN0IHQ9THUoKTtKYygxKSx2dSgibmdJZiIsdC5jcENhbmNlbEJ1dHRvbiksSmMoMSksdnUoIm5nSWYiLHQuY3BPS0J1dHRvbil9fXZhciBPMzshKGZ1bmN0aW9uKHQpe3RbdC5IRVg9MF09IkhFWCIsdFt0LlJHQkE9MV09IlJHQkEiLHRbdC5IU0xBPTJdPSJIU0xBIix0W3QuQ01ZSz0zXT0iQ01ZSyJ9KShPM3x8KE8zPXt9KSk7Y2xhc3MgUDN7Y29uc3RydWN0b3IodCxlLG4sbyl7dGhpcy5yPXQsdGhpcy5nPWUsdGhpcy5iPW4sdGhpcy5hPW99fWNsYXNzIHcze2NvbnN0cnVjdG9yKHQsZSxuLG8pe3RoaXMuaD10LHRoaXMucz1lLHRoaXMudj1uLHRoaXMuYT1vfX1jbGFzcyBrM3tjb25zdHJ1Y3Rvcih0LGUsbixvKXt0aGlzLmg9dCx0aGlzLnM9ZSx0aGlzLmw9bix0aGlzLmE9b319Y2xhc3MgUzN7Y29uc3RydWN0b3IodCxlLG4sbyxpPTEpe3RoaXMuYz10LHRoaXMubT1lLHRoaXMueT1uLHRoaXMuaz1vLHRoaXMuYT1pfX1jbGFzcyBEM3tjb25zdHJ1Y3Rvcigpe3RoaXMubmV3VmFsdWU9bmV3IEFifWlucHV0Q2hhbmdlKHQpe2NvbnN0IGU9dC50YXJnZXQudmFsdWU7aWYodm9pZCAwPT09dGhpcy5yZyl0aGlzLm5ld1ZhbHVlLmVtaXQoZSk7ZWxzZXtjb25zdCB0PXBhcnNlRmxvYXQoZSk7dGhpcy5uZXdWYWx1ZS5lbWl0KHt2OnQscmc6dGhpcy5yZ30pfX19RDMuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEQzKX0sRDMuybVkaXI9Sm8oe3R5cGU6RDMsc2VsZWN0b3JzOltbIiIsInRleHQiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJk51KCJpbnB1dCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4uaW5wdXRDaGFuZ2UoZSl9KSl9LGlucHV0czp7cmc6InJnIix0ZXh0OiJ0ZXh0In0sb3V0cHV0czp7bmV3VmFsdWU6Im5ld1ZhbHVlIn19KSxEMy5wcm9wRGVjb3JhdG9ycz17cmc6W3t0eXBlOnlffV0sdGV4dDpbe3R5cGU6eV99XSxuZXdWYWx1ZTpbe3R5cGU6X199XSxpbnB1dENoYW5nZTpbe3R5cGU6TV8sYXJnczpbImlucHV0IixbIiRldmVudCJdXX1dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEQzLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6Ilt0ZXh0XSJ9XX1dLChmdW5jdGlvbigpe3JldHVybltdfSkse25ld1ZhbHVlOlt7dHlwZTpfX31dLGlucHV0Q2hhbmdlOlt7dHlwZTpNXyxhcmdzOlsiaW5wdXQiLFsiJGV2ZW50Il1dfV0scmc6W3t0eXBlOnlffV0sdGV4dDpbe3R5cGU6eV99XX0pO2NsYXNzIEUze2NvbnN0cnVjdG9yKHQpe3RoaXMuZWxSZWY9dCx0aGlzLmRyYWdFbmQ9bmV3IEFiLHRoaXMuZHJhZ1N0YXJ0PW5ldyBBYix0aGlzLm5ld1ZhbHVlPW5ldyBBYix0aGlzLmxpc3RlbmVyTW92ZT10PT50aGlzLm1vdmUodCksdGhpcy5saXN0ZW5lclN0b3A9KCk9PnRoaXMuc3RvcCgpfW1vdXNlRG93bih0KXt0aGlzLnN0YXJ0KHQpfXRvdWNoU3RhcnQodCl7dGhpcy5zdGFydCh0KX1tb3ZlKHQpe3QucHJldmVudERlZmF1bHQoKSx0aGlzLnNldEN1cnNvcih0KX1zdGFydCh0KXt0aGlzLnNldEN1cnNvcih0KSx0LnN0b3BQcm9wYWdhdGlvbigpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHRoaXMubGlzdGVuZXJTdG9wKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsdGhpcy5saXN0ZW5lclN0b3ApLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdGhpcy5saXN0ZW5lck1vdmUpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsdGhpcy5saXN0ZW5lck1vdmUpLHRoaXMuZHJhZ1N0YXJ0LmVtaXQoKX1zdG9wKCl7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsdGhpcy5saXN0ZW5lclN0b3ApLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIix0aGlzLmxpc3RlbmVyU3RvcCksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix0aGlzLmxpc3RlbmVyTW92ZSksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIix0aGlzLmxpc3RlbmVyTW92ZSksdGhpcy5kcmFnRW5kLmVtaXQoKX1nZXRYKHQpe2NvbnN0IGU9dGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybih2b2lkIDAhPT10LnBhZ2VYP3QucGFnZVg6dC50b3VjaGVzWzBdLnBhZ2VYKS1lLmxlZnQtd2luZG93LnBhZ2VYT2Zmc2V0fWdldFkodCl7Y29uc3QgZT10aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuKHZvaWQgMCE9PXQucGFnZVk/dC5wYWdlWTp0LnRvdWNoZXNbMF0ucGFnZVkpLWUudG9wLXdpbmRvdy5wYWdlWU9mZnNldH1zZXRDdXJzb3IodCl7Y29uc3QgZT10aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGgsbj10aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0LG89TWF0aC5tYXgoMCxNYXRoLm1pbih0aGlzLmdldFgodCksZSkpLGk9TWF0aC5tYXgoMCxNYXRoLm1pbih0aGlzLmdldFkodCksbikpO3ZvaWQgMCE9PXRoaXMucmdYJiZ2b2lkIDAhPT10aGlzLnJnWT90aGlzLm5ld1ZhbHVlLmVtaXQoe3M6by9lLHY6MS1pL24scmdYOnRoaXMucmdYLHJnWTp0aGlzLnJnWX0pOnZvaWQgMD09PXRoaXMucmdYJiZ2b2lkIDAhPT10aGlzLnJnWT90aGlzLm5ld1ZhbHVlLmVtaXQoe3Y6aS9uLHJnWTp0aGlzLnJnWX0pOnZvaWQgMCE9PXRoaXMucmdYJiZ2b2lkIDA9PT10aGlzLnJnWSYmdGhpcy5uZXdWYWx1ZS5lbWl0KHt2Om8vZSxyZ1g6dGhpcy5yZ1h9KX19RTMuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEUzKShNdShjaCkpfSxFMy7JtWRpcj1Kbyh7dHlwZTpFMyxzZWxlY3RvcnM6W1siIiwic2xpZGVyIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MSZlJiZOdSgibW91c2Vkb3duIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5tb3VzZURvd24oZSl9KSkoInRvdWNoc3RhcnQiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLnRvdWNoU3RhcnQoZSl9KSl9LGlucHV0czp7cmdYOiJyZ1giLHJnWToicmdZIixzbGlkZXI6InNsaWRlciJ9LG91dHB1dHM6e2RyYWdFbmQ6ImRyYWdFbmQiLGRyYWdTdGFydDoiZHJhZ1N0YXJ0IixuZXdWYWx1ZToibmV3VmFsdWUifX0pLEUzLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6Y2h9XSxFMy5wcm9wRGVjb3JhdG9ycz17cmdYOlt7dHlwZTp5X31dLHJnWTpbe3R5cGU6eV99XSxzbGlkZXI6W3t0eXBlOnlffV0sZHJhZ0VuZDpbe3R5cGU6X199XSxkcmFnU3RhcnQ6W3t0eXBlOl9ffV0sbmV3VmFsdWU6W3t0eXBlOl9ffV0sbW91c2VEb3duOlt7dHlwZTpNXyxhcmdzOlsibW91c2Vkb3duIixbIiRldmVudCJdXX1dLHRvdWNoU3RhcnQ6W3t0eXBlOk1fLGFyZ3M6WyJ0b3VjaHN0YXJ0IixbIiRldmVudCJdXX1dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEUzLFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6IltzbGlkZXJdIn1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmNofV19KSx7ZHJhZ0VuZDpbe3R5cGU6X199XSxkcmFnU3RhcnQ6W3t0eXBlOl9ffV0sbmV3VmFsdWU6W3t0eXBlOl9ffV0sbW91c2VEb3duOlt7dHlwZTpNXyxhcmdzOlsibW91c2Vkb3duIixbIiRldmVudCJdXX1dLHRvdWNoU3RhcnQ6W3t0eXBlOk1fLGFyZ3M6WyJ0b3VjaHN0YXJ0IixbIiRldmVudCJdXX1dLHJnWDpbe3R5cGU6eV99XSxyZ1k6W3t0eXBlOnlffV0sc2xpZGVyOlt7dHlwZTp5X31dfSk7Y2xhc3MgQTN7Y29uc3RydWN0b3IodCxlLG4sbyl7dGhpcy5oPXQsdGhpcy5zPWUsdGhpcy52PW4sdGhpcy5hPW99fWNsYXNzIFIze2NvbnN0cnVjdG9yKHQsZSxuLG8pe3RoaXMuaD10LHRoaXMucz1lLHRoaXMudj1uLHRoaXMuYT1vfX1jbGFzcyBUM3tjb25zdHJ1Y3Rvcigpe3RoaXMuYWN0aXZlPW51bGx9c2V0QWN0aXZlKHQpe3RoaXMuYWN0aXZlJiZ0aGlzLmFjdGl2ZSE9PXQmJiJpbmxpbmUiIT09dGhpcy5hY3RpdmUuY3BEaWFsb2dEaXNwbGF5JiZ0aGlzLmFjdGl2ZS5jbG9zZURpYWxvZygpLHRoaXMuYWN0aXZlPXR9aHN2YTJoc2xhKHQpe2NvbnN0IGU9dC5oLG49dC5zLG89dC52LGk9dC5hO2lmKDA9PT1vKXJldHVybiBuZXcgazMoZSwwLDAsaSk7aWYoMD09PW4mJjE9PT1vKXJldHVybiBuZXcgazMoZSwxLDEsaSk7e2NvbnN0IHQ9byooMi1uKS8yO3JldHVybiBuZXcgazMoZSxvKm4vKDEtTWF0aC5hYnMoMip0LTEpKSx0LGkpfX1oc2xhMmhzdmEodCl7Y29uc3QgZT1NYXRoLm1pbih0LmgsMSksbj1NYXRoLm1pbih0LnMsMSksbz1NYXRoLm1pbih0LmwsMSksaT1NYXRoLm1pbih0LmEsMSk7aWYoMD09PW8pcmV0dXJuIG5ldyB3MyhlLDAsMCxpKTt7Y29uc3QgdD1vK24qKDEtTWF0aC5hYnMoMipvLTEpKS8yO3JldHVybiBuZXcgdzMoZSwyKih0LW8pL3QsdCxpKX19aHN2YVRvUmdiYSh0KXtsZXQgZSxuLG87Y29uc3QgaT10LmgsYT10LnMscj10LnYscz10LmEsbD1NYXRoLmZsb29yKDYqaSksYz02KmktbCxkPXIqKDEtYSkscD1yKigxLWMqYSksbT1yKigxLSgxLWMpKmEpO3N3aXRjaChsJTYpe2Nhc2UgMDplPXIsbj1tLG89ZDticmVhaztjYXNlIDE6ZT1wLG49cixvPWQ7YnJlYWs7Y2FzZSAyOmU9ZCxuPXIsbz1tO2JyZWFrO2Nhc2UgMzplPWQsbj1wLG89cjticmVhaztjYXNlIDQ6ZT1tLG49ZCxvPXI7YnJlYWs7Y2FzZSA1OmU9cixuPWQsbz1wO2JyZWFrO2RlZmF1bHQ6ZT0wLG49MCxvPTB9cmV0dXJuIG5ldyBQMyhlLG4sbyxzKX1jbXlrVG9SZ2IodCl7cmV0dXJuIG5ldyBQMygoMS10LmMpKigxLXQuayksKDEtdC5tKSooMS10LmspLCgxLXQueSkqKDEtdC5rKSx0LmEpfXJnYmFUb0NteWsodCl7Y29uc3QgZT0xLU1hdGgubWF4KHQucix0LmcsdC5iKTtyZXR1cm4gMT09PWU/bmV3IFMzKDAsMCwwLDEsdC5hKTpuZXcgUzMoKDEtdC5yLWUpLygxLWUpLCgxLXQuZy1lKS8oMS1lKSwoMS10LmItZSkvKDEtZSksZSx0LmEpfXJnYmFUb0hzdmEodCl7bGV0IGUsbjtjb25zdCBvPU1hdGgubWluKHQuciwxKSxpPU1hdGgubWluKHQuZywxKSxhPU1hdGgubWluKHQuYiwxKSxyPU1hdGgubWluKHQuYSwxKSxzPU1hdGgubWF4KG8saSxhKSxsPU1hdGgubWluKG8saSxhKSxjPXMsZD1zLWw7aWYobj0wPT09cz8wOmQvcyxzPT09bCllPTA7ZWxzZXtzd2l0Y2gocyl7Y2FzZSBvOmU9KGktYSkvZCsoaTxhPzY6MCk7YnJlYWs7Y2FzZSBpOmU9KGEtbykvZCsyO2JyZWFrO2Nhc2UgYTplPShvLWkpL2QrNDticmVhaztkZWZhdWx0OmU9MH1lLz02fXJldHVybiBuZXcgdzMoZSxuLGMscil9cmdiYVRvSGV4KHQsZSl7bGV0IG49IiMiKygxPDwyNHx0LnI8PDE2fHQuZzw8OHx0LmIpLnRvU3RyaW5nKDE2KS5zdWJzdHIoMSk7cmV0dXJuIGUmJihuKz0oMjU2fE1hdGgucm91bmQoMjU1KnQuYSkpLnRvU3RyaW5nKDE2KS5zdWJzdHIoMSkpLG59bm9ybWFsaXplQ01ZSyh0KXtyZXR1cm4gbmV3IFMzKHQuYy8xMDAsdC5tLzEwMCx0LnkvMTAwLHQuay8xMDAsdC5hKX1kZW5vcm1hbGl6ZUNNWUsodCl7cmV0dXJuIG5ldyBTMyhNYXRoLmZsb29yKDEwMCp0LmMpLE1hdGguZmxvb3IoMTAwKnQubSksTWF0aC5mbG9vcigxMDAqdC55KSxNYXRoLmZsb29yKDEwMCp0LmspLHQuYSl9ZGVub3JtYWxpemVSR0JBKHQpe3JldHVybiBuZXcgUDMoTWF0aC5yb3VuZCgyNTUqdC5yKSxNYXRoLnJvdW5kKDI1NSp0LmcpLE1hdGgucm91bmQoMjU1KnQuYiksdC5hKX1zdHJpbmdUb0hzdmEodD0iIixlPSExKXtsZXQgbj1udWxsO3Q9KHR8fCIiKS50b0xvd2VyQ2FzZSgpO2NvbnN0IG89W3tyZTovKHJnYilhP1woXHMqKFxkezEsM30pXHMqLFxzKihcZHsxLDN9KVxzKiU/LFxzKihcZHsxLDN9KVxzKiU/KD86LFxzKihcZCsoPzpcLlxkKyk/KVxzKik/XCkvLHBhcnNlOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgUDMocGFyc2VJbnQodFsyXSwxMCkvMjU1LHBhcnNlSW50KHRbM10sMTApLzI1NSxwYXJzZUludCh0WzRdLDEwKS8yNTUsaXNOYU4ocGFyc2VGbG9hdCh0WzVdKSk/MTpwYXJzZUZsb2F0KHRbNV0pKX19LHtyZTovKGhzbClhP1woXHMqKFxkezEsM30pXHMqLFxzKihcZHsxLDN9KSVccyosXHMqKFxkezEsM30pJVxzKig/OixccyooXGQrKD86XC5cZCspPylccyopP1wpLyxwYXJzZTpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGszKHBhcnNlSW50KHRbMl0sMTApLzM2MCxwYXJzZUludCh0WzNdLDEwKS8xMDAscGFyc2VJbnQodFs0XSwxMCkvMTAwLGlzTmFOKHBhcnNlRmxvYXQodFs1XSkpPzE6cGFyc2VGbG9hdCh0WzVdKSl9fV07by5wdXNoKGU/e3JlOi8jKFthLWZBLUYwLTldezJ9KShbYS1mQS1GMC05XXsyfSkoW2EtZkEtRjAtOV17Mn0pKFthLWZBLUYwLTldezJ9KT8kLyxwYXJzZTpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IFAzKHBhcnNlSW50KHRbMV0sMTYpLzI1NSxwYXJzZUludCh0WzJdLDE2KS8yNTUscGFyc2VJbnQodFszXSwxNikvMjU1LHBhcnNlSW50KHRbNF18fCJGRiIsMTYpLzI1NSl9fTp7cmU6LyMoW2EtZkEtRjAtOV17Mn0pKFthLWZBLUYwLTldezJ9KShbYS1mQS1GMC05XXsyfSkkLyxwYXJzZTpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IFAzKHBhcnNlSW50KHRbMV0sMTYpLzI1NSxwYXJzZUludCh0WzJdLDE2KS8yNTUscGFyc2VJbnQodFszXSwxNikvMjU1LDEpfX0pLG8ucHVzaCh7cmU6LyMoW2EtZkEtRjAtOV0pKFthLWZBLUYwLTldKShbYS1mQS1GMC05XSkkLyxwYXJzZTpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IFAzKHBhcnNlSW50KHRbMV0rdFsxXSwxNikvMjU1LHBhcnNlSW50KHRbMl0rdFsyXSwxNikvMjU1LHBhcnNlSW50KHRbM10rdFszXSwxNikvMjU1LDEpfX0pO2Zvcihjb25zdCBlIGluIG8paWYoby5oYXNPd25Qcm9wZXJ0eShlKSl7Y29uc3QgaT1vW2VdLGE9aS5yZS5leGVjKHQpLHI9YSYmaS5wYXJzZShhKTtpZihyKXJldHVybiByIGluc3RhbmNlb2YgUDM/bj10aGlzLnJnYmFUb0hzdmEocik6ciBpbnN0YW5jZW9mIGszJiYobj10aGlzLmhzbGEyaHN2YShyKSksbn1yZXR1cm4gbn1vdXRwdXRGb3JtYXQodCxlLG4pe3N3aXRjaCgiYXV0byI9PT1lJiYoZT10LmE8MT8icmdiYSI6ImhleCIpLGUpe2Nhc2UiaHNsYSI6Y29uc3QgZT10aGlzLmhzdmEyaHNsYSh0KSxvPW5ldyBrMyhNYXRoLnJvdW5kKDM2MCplLmgpLE1hdGgucm91bmQoMTAwKmUucyksTWF0aC5yb3VuZCgxMDAqZS5sKSxNYXRoLnJvdW5kKDEwMCplLmEpLzEwMCk7cmV0dXJuIHQuYTwxfHwiYWx3YXlzIj09PW4/ImhzbGEoIitvLmgrIiwiK28ucysiJSwiK28ubCsiJSwiK28uYSsiKSI6ImhzbCgiK28uaCsiLCIrby5zKyIlLCIrby5sKyIlKSI7Y2FzZSJyZ2JhIjpjb25zdCBpPXRoaXMuZGVub3JtYWxpemVSR0JBKHRoaXMuaHN2YVRvUmdiYSh0KSk7cmV0dXJuIHQuYTwxfHwiYWx3YXlzIj09PW4/InJnYmEoIitpLnIrIiwiK2kuZysiLCIraS5iKyIsIitNYXRoLnJvdW5kKDEwMCppLmEpLzEwMCsiKSI6InJnYigiK2kucisiLCIraS5nKyIsIitpLmIrIikiO2RlZmF1bHQ6Y29uc3QgYT0iYWx3YXlzIj09PW58fCJmb3JjZWQiPT09bjtyZXR1cm4gdGhpcy5yZ2JhVG9IZXgodGhpcy5kZW5vcm1hbGl6ZVJHQkEodGhpcy5oc3ZhVG9SZ2JhKHQpKSxhKX19fVQzLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxUMyl9LFQzLsm1cHJvdj1sbyh7dG9rZW46VDMsZmFjdG9yeTpUMy7JtWZhY30pLFQzLmN0b3JQYXJhbWV0ZXJzPSgpPT5bXSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFQzLFt7dHlwZTpKbX1dLChmdW5jdGlvbigpe3JldHVybltdfSksbnVsbCk7Y2xhc3MgTjN7Y29uc3RydWN0b3IodCxlLG4pe3RoaXMuZWxSZWY9dCx0aGlzLmNkUmVmPWUsdGhpcy5zZXJ2aWNlPW4sdGhpcy5pc0lFMTA9ITEsdGhpcy5kaWFsb2dBcnJvd1NpemU9MTAsdGhpcy5kaWFsb2dBcnJvd09mZnNldD0xNSx0aGlzLmRpYWxvZ0lucHV0RmllbGRzPVtPMy5IRVgsTzMuUkdCQSxPMy5IU0xBLE8zLkNNWUtdLHRoaXMudXNlUm9vdFZpZXdDb250YWluZXI9ITF9aGFuZGxlRXNjKHQpe3RoaXMuc2hvdyYmInBvcHVwIj09PXRoaXMuY3BEaWFsb2dEaXNwbGF5JiZ0aGlzLm9uQ2FuY2VsQ29sb3IodCl9aGFuZGxlRW50ZXIodCl7dGhpcy5zaG93JiYicG9wdXAiPT09dGhpcy5jcERpYWxvZ0Rpc3BsYXkmJnRoaXMub25BY2NlcHRDb2xvcih0KX1uZ09uSW5pdCgpe3RoaXMuc2xpZGVyPW5ldyBBMygwLDAsMCwwKSx0aGlzLnNsaWRlckRpbU1heD1uZXcgUjModGhpcy5odWVTbGlkZXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aHx8MTQwLHRoaXMuY3BXaWR0aCwxMzAsdGhpcy5hbHBoYVNsaWRlci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRofHwxNDApLHRoaXMuZm9ybWF0PXRoaXMuY3BDbXlrRW5hYmxlZD9PMy5DTVlLOiJyZ2JhIj09PXRoaXMuY3BPdXRwdXRGb3JtYXQ/TzMuUkdCQToiaHNsYSI9PT10aGlzLmNwT3V0cHV0Rm9ybWF0P08zLkhTTEE6TzMuSEVYLHRoaXMubGlzdGVuZXJNb3VzZURvd249dD0+e3RoaXMub25Nb3VzZURvd24odCl9LHRoaXMubGlzdGVuZXJSZXNpemU9KCk9Pnt0aGlzLm9uUmVzaXplKCl9LHRoaXMub3BlbkRpYWxvZyh0aGlzLmluaXRpYWxDb2xvciwhMSl9bmdPbkRlc3Ryb3koKXt0aGlzLmNsb3NlRGlhbG9nKCl9bmdBZnRlclZpZXdJbml0KCl7MjMwPT09dGhpcy5jcFdpZHRoJiYiaW5saW5lIiE9PXRoaXMuY3BEaWFsb2dEaXNwbGF5fHwodGhpcy5zbGlkZXJEaW1NYXg9bmV3IFIzKHRoaXMuaHVlU2xpZGVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGh8fDE0MCx0aGlzLmNwV2lkdGgsMTMwLHRoaXMuYWxwaGFTbGlkZXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aHx8MTQwKSx0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCExKSx0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKSl9b3BlbkRpYWxvZyh0LGU9ITApe3RoaXMuc2VydmljZS5zZXRBY3RpdmUodGhpcyksdGhpcy53aWR0aHx8KHRoaXMuY3BXaWR0aD10aGlzLmRpcmVjdGl2ZUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCksdGhpcy5oZWlnaHR8fCh0aGlzLmhlaWdodD0zMjApLHRoaXMuc2V0SW5pdGlhbENvbG9yKHQpLHRoaXMuc2V0Q29sb3JGcm9tU3RyaW5nKHQsZSksdGhpcy5vcGVuQ29sb3JQaWNrZXIoKX1jbG9zZURpYWxvZygpe3RoaXMuY2xvc2VDb2xvclBpY2tlcigpfXNldHVwRGlhbG9nKHQsZSxuLG8saSxhLHIscyxsLGMsZCxwLG0sdSxmLGcsaCxiLHksXyxDLE0sdix4LE8sUCx3LGssUyxELEUsQSxSLFQsTil7dGhpcy5zZXRJbml0aWFsQ29sb3IobiksdGhpcy5zZXRDb2xvck1vZGUocyksdGhpcy5pc0lFMTA9MTA9PT0oZnVuY3Rpb24gSSgpe2xldCB0PSIiOyJ1bmRlZmluZWQiIT10eXBlb2YgbmF2aWdhdG9yJiYodD1uYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkpO2NvbnN0IGU9dC5pbmRleE9mKCJtc2llICIpO3JldHVybiBlPjAmJnBhcnNlSW50KHQuc3Vic3RyaW5nKGUrNSx0LmluZGV4T2YoIi4iLGUpKSwxMCl9KSgpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2U9dCx0aGlzLmRpcmVjdGl2ZUVsZW1lbnRSZWY9ZSx0aGlzLmNwRGlzYWJsZUlucHV0PXAsdGhpcy5jcENteWtFbmFibGVkPWwsdGhpcy5jcEFscGhhQ2hhbm5lbD1jLHRoaXMuY3BPdXRwdXRGb3JtYXQ9ZCx0aGlzLmNwRGlhbG9nRGlzcGxheT1hLHRoaXMuY3BJZ25vcmVkRWxlbWVudHM9bSx0aGlzLmNwU2F2ZUNsaWNrT3V0c2lkZT11LHRoaXMuY3BDbG9zZUNsaWNrT3V0c2lkZT1mLHRoaXMudXNlUm9vdFZpZXdDb250YWluZXI9Zyx0aGlzLndpZHRoPXRoaXMuY3BXaWR0aD1wYXJzZUludChvLDEwKSx0aGlzLmhlaWdodD10aGlzLmNwSGVpZ2h0PXBhcnNlSW50KGksMTApLHRoaXMuY3BQb3NpdGlvbj1oLHRoaXMuY3BQb3NpdGlvbk9mZnNldD1wYXJzZUludChiLDEwKSx0aGlzLmNwT0tCdXR0b249UCx0aGlzLmNwT0tCdXR0b25UZXh0PWssdGhpcy5jcE9LQnV0dG9uQ2xhc3M9dyx0aGlzLmNwQ2FuY2VsQnV0dG9uPVMsdGhpcy5jcENhbmNlbEJ1dHRvblRleHQ9RSx0aGlzLmNwQ2FuY2VsQnV0dG9uQ2xhc3M9RCx0aGlzLmZhbGxiYWNrQ29sb3I9cnx8IiNmZmYiLHRoaXMuc2V0UHJlc2V0Q29uZmlnKF8sQyksdGhpcy5jcFByZXNldENvbG9yc0NsYXNzPU0sdGhpcy5jcE1heFByZXNldENvbG9yc0xlbmd0aD12LHRoaXMuY3BQcmVzZXRFbXB0eU1lc3NhZ2U9eCx0aGlzLmNwUHJlc2V0RW1wdHlNZXNzYWdlQ2xhc3M9Tyx0aGlzLmNwQWRkQ29sb3JCdXR0b249QSx0aGlzLmNwQWRkQ29sb3JCdXR0b25UZXh0PVQsdGhpcy5jcEFkZENvbG9yQnV0dG9uQ2xhc3M9Uix0aGlzLmNwUmVtb3ZlQ29sb3JCdXR0b25DbGFzcz1OLHl8fCh0aGlzLmRpYWxvZ0Fycm93T2Zmc2V0PTApLCJpbmxpbmUiPT09YSYmKHRoaXMuZGlhbG9nQXJyb3dTaXplPTAsdGhpcy5kaWFsb2dBcnJvd09mZnNldD0wKSwiaGV4Ij09PWQmJiJhbHdheXMiIT09YyYmImZvcmNlZCIhPT1jJiYodGhpcy5jcEFscGhhQ2hhbm5lbD0iZGlzYWJsZWQiKX1zZXRDb2xvck1vZGUodCl7c3dpdGNoKHQudG9TdHJpbmcoKS50b1VwcGVyQ2FzZSgpKXtjYXNlIjEiOmNhc2UiQyI6Y2FzZSJDT0xPUiI6dGhpcy5jcENvbG9yTW9kZT0xO2JyZWFrO2Nhc2UiMiI6Y2FzZSJHIjpjYXNlIkdSQVlTQ0FMRSI6dGhpcy5jcENvbG9yTW9kZT0yO2JyZWFrO2Nhc2UiMyI6Y2FzZSJQIjpjYXNlIlBSRVNFVFMiOnRoaXMuY3BDb2xvck1vZGU9MzticmVhaztkZWZhdWx0OnRoaXMuY3BDb2xvck1vZGU9MX19c2V0SW5pdGlhbENvbG9yKHQpe3RoaXMuaW5pdGlhbENvbG9yPXR9c2V0UHJlc2V0Q29uZmlnKHQsZSl7dGhpcy5jcFByZXNldExhYmVsPXQsdGhpcy5jcFByZXNldENvbG9ycz1lfXNldENvbG9yRnJvbVN0cmluZyh0LGU9ITAsbj0hMCl7bGV0IG87ImFsd2F5cyI9PT10aGlzLmNwQWxwaGFDaGFubmVsfHwiZm9yY2VkIj09PXRoaXMuY3BBbHBoYUNoYW5uZWw/KG89dGhpcy5zZXJ2aWNlLnN0cmluZ1RvSHN2YSh0LCEwKSxvfHx0aGlzLmhzdmF8fChvPXRoaXMuc2VydmljZS5zdHJpbmdUb0hzdmEodCwhMSkpKTpvPXRoaXMuc2VydmljZS5zdHJpbmdUb0hzdmEodCwhMSksb3x8dGhpcy5oc3ZhfHwobz10aGlzLnNlcnZpY2Uuc3RyaW5nVG9Ic3ZhKHRoaXMuZmFsbGJhY2tDb2xvciwhMSkpLG8mJih0aGlzLmhzdmE9byx0aGlzLnNsaWRlckg9dGhpcy5oc3ZhLmgsImhleCI9PT10aGlzLmNwT3V0cHV0Rm9ybWF0JiYiZGlzYWJsZWQiPT09dGhpcy5jcEFscGhhQ2hhbm5lbCYmKHRoaXMuaHN2YS5hPTEpLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoZSxuKSl9b25SZXNpemUoKXsiZml4ZWQiPT09dGhpcy5wb3NpdGlvbj90aGlzLnNldERpYWxvZ1Bvc2l0aW9uKCk6ImlubGluZSIhPT10aGlzLmNwRGlhbG9nRGlzcGxheSYmdGhpcy5jbG9zZUNvbG9yUGlja2VyKCl9b25EcmFnRW5kKHQpe3RoaXMuZGlyZWN0aXZlSW5zdGFuY2Uuc2xpZGVyRHJhZ0VuZCh7c2xpZGVyOnQsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uRHJhZ1N0YXJ0KHQpe3RoaXMuZGlyZWN0aXZlSW5zdGFuY2Uuc2xpZGVyRHJhZ1N0YXJ0KHtzbGlkZXI6dCxjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25Nb3VzZURvd24odCl7IXRoaXMuc2hvd3x8dGhpcy5pc0lFMTB8fCJwb3B1cCIhPT10aGlzLmNwRGlhbG9nRGlzcGxheXx8dC50YXJnZXQ9PT10aGlzLmRpcmVjdGl2ZUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudHx8dGhpcy5pc0Rlc2NlbmRhbnQodGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LHQudGFyZ2V0KXx8dGhpcy5pc0Rlc2NlbmRhbnQodGhpcy5kaXJlY3RpdmVFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsdC50YXJnZXQpfHwwIT09dGhpcy5jcElnbm9yZWRFbGVtZW50cy5maWx0ZXIoKGU9PmU9PT10LnRhcmdldCkpLmxlbmd0aHx8KHRoaXMuY3BTYXZlQ2xpY2tPdXRzaWRlP3RoaXMuZGlyZWN0aXZlSW5zdGFuY2UuY29sb3JTZWxlY3RlZCh0aGlzLm91dHB1dENvbG9yKToodGhpcy5oc3ZhPW51bGwsdGhpcy5zZXRDb2xvckZyb21TdHJpbmcodGhpcy5pbml0aWFsQ29sb3IsITEpLHRoaXMuY3BDbXlrRW5hYmxlZCYmdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5jbXlrQ2hhbmdlZCh0aGlzLmNteWtDb2xvciksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5jb2xvckNoYW5nZWQodGhpcy5pbml0aWFsQ29sb3IpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuY29sb3JDYW5jZWxlZCgpKSx0aGlzLmNwQ2xvc2VDbGlja091dHNpZGUmJnRoaXMuY2xvc2VDb2xvclBpY2tlcigpKX1vbkFjY2VwdENvbG9yKHQpe3Quc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5vdXRwdXRDb2xvciYmdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5jb2xvclNlbGVjdGVkKHRoaXMub3V0cHV0Q29sb3IpLCJwb3B1cCI9PT10aGlzLmNwRGlhbG9nRGlzcGxheSYmdGhpcy5jbG9zZUNvbG9yUGlja2VyKCl9b25DYW5jZWxDb2xvcih0KXt0aGlzLmhzdmE9bnVsbCx0LnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuY29sb3JDYW5jZWxlZCgpLHRoaXMuc2V0Q29sb3JGcm9tU3RyaW5nKHRoaXMuaW5pdGlhbENvbG9yLCEwKSwicG9wdXAiPT09dGhpcy5jcERpYWxvZ0Rpc3BsYXkmJih0aGlzLmNwQ215a0VuYWJsZWQmJnRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuY215a0NoYW5nZWQodGhpcy5jbXlrQ29sb3IpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuY29sb3JDaGFuZ2VkKHRoaXMuaW5pdGlhbENvbG9yLCEwKSx0aGlzLmNsb3NlQ29sb3JQaWNrZXIoKSl9b25Gb3JtYXRUb2dnbGUodCl7Y29uc3QgZT10aGlzLmRpYWxvZ0lucHV0RmllbGRzLmxlbmd0aC0odGhpcy5jcENteWtFbmFibGVkPzA6MSksbj0oKHRoaXMuZGlhbG9nSW5wdXRGaWVsZHMuaW5kZXhPZih0aGlzLmZvcm1hdCkrdCklZStlKSVlO3RoaXMuZm9ybWF0PXRoaXMuZGlhbG9nSW5wdXRGaWVsZHNbbl19b25Db2xvckNoYW5nZSh0KXt0aGlzLmhzdmEucz10LnMvdC5yZ1gsdGhpcy5oc3ZhLnY9dC52L3QucmdZLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLnNsaWRlckNoYW5nZWQoe3NsaWRlcjoibGlnaHRuZXNzIix2YWx1ZTp0aGlzLmhzdmEudixjb2xvcjp0aGlzLm91dHB1dENvbG9yfSksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5zbGlkZXJDaGFuZ2VkKHtzbGlkZXI6InNhdHVyYXRpb24iLHZhbHVlOnRoaXMuaHN2YS5zLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vbkh1ZUNoYW5nZSh0KXt0aGlzLmhzdmEuaD10LnYvdC5yZ1gsdGhpcy5zbGlkZXJIPXRoaXMuaHN2YS5oLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLnNsaWRlckNoYW5nZWQoe3NsaWRlcjoiaHVlIix2YWx1ZTp0aGlzLmhzdmEuaCxjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25WYWx1ZUNoYW5nZSh0KXt0aGlzLmhzdmEudj10LnYvdC5yZ1gsdGhpcy51cGRhdGVDb2xvclBpY2tlcigpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2Uuc2xpZGVyQ2hhbmdlZCh7c2xpZGVyOiJ2YWx1ZSIsdmFsdWU6dGhpcy5oc3ZhLnYsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uQWxwaGFDaGFuZ2UodCl7dGhpcy5oc3ZhLmE9dC52L3QucmdYLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLnNsaWRlckNoYW5nZWQoe3NsaWRlcjoiYWxwaGEiLHZhbHVlOnRoaXMuaHN2YS5hLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vbkhleElucHV0KHQpe2lmKG51bGw9PT10KXRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKTtlbHNle3QmJiIjIiE9PXRbMF0mJih0PSIjIit0KTtsZXQgZT0vXiMoW2EtZjAtOV17M318W2EtZjAtOV17Nn0pJC9naTsiYWx3YXlzIj09PXRoaXMuY3BBbHBoYUNoYW5uZWwmJihlPS9eIyhbYS1mMC05XXszfXxbYS1mMC05XXs2fXxbYS1mMC05XXs4fSkkL2dpKTtjb25zdCBuPWUudGVzdCh0KTtuJiYodC5sZW5ndGg8NSYmKHQ9IiMiK3Quc3Vic3RyaW5nKDEpLnNwbGl0KCIiKS5tYXAoKHQ9PnQrdCkpLmpvaW4oIiIpKSwiZm9yY2VkIj09PXRoaXMuY3BBbHBoYUNoYW5uZWwmJih0Kz1NYXRoLnJvdW5kKDI1NSp0aGlzLmhzdmEuYSkudG9TdHJpbmcoMTYpKSx0aGlzLnNldENvbG9yRnJvbVN0cmluZyh0LCEwLCExKSksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5pbnB1dENoYW5nZWQoe2lucHV0OiJoZXgiLHZhbGlkOm4sdmFsdWU6dCxjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9fW9uUmVkSW5wdXQodCl7Y29uc3QgZT10aGlzLnNlcnZpY2UuaHN2YVRvUmdiYSh0aGlzLmhzdmEpLG49IWlzTmFOKHQudikmJnQudj49MCYmdC52PD10LnJnO24mJihlLnI9dC52L3QucmcsdGhpcy5oc3ZhPXRoaXMuc2VydmljZS5yZ2JhVG9Ic3ZhKGUpLHRoaXMuc2xpZGVySD10aGlzLmhzdmEuaCx0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoicmVkIix2YWxpZDpuLHZhbHVlOmUucixjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25CbHVlSW5wdXQodCl7Y29uc3QgZT10aGlzLnNlcnZpY2UuaHN2YVRvUmdiYSh0aGlzLmhzdmEpLG49IWlzTmFOKHQudikmJnQudj49MCYmdC52PD10LnJnO24mJihlLmI9dC52L3QucmcsdGhpcy5oc3ZhPXRoaXMuc2VydmljZS5yZ2JhVG9Ic3ZhKGUpLHRoaXMuc2xpZGVySD10aGlzLmhzdmEuaCx0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoiYmx1ZSIsdmFsaWQ6bix2YWx1ZTplLmIsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uR3JlZW5JbnB1dCh0KXtjb25zdCBlPXRoaXMuc2VydmljZS5oc3ZhVG9SZ2JhKHRoaXMuaHN2YSksbj0haXNOYU4odC52KSYmdC52Pj0wJiZ0LnY8PXQucmc7biYmKGUuZz10LnYvdC5yZyx0aGlzLmhzdmE9dGhpcy5zZXJ2aWNlLnJnYmFUb0hzdmEoZSksdGhpcy5zbGlkZXJIPXRoaXMuaHN2YS5oLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKSksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5pbnB1dENoYW5nZWQoe2lucHV0OiJncmVlbiIsdmFsaWQ6bix2YWx1ZTplLmcsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uSHVlSW5wdXQodCl7Y29uc3QgZT0haXNOYU4odC52KSYmdC52Pj0wJiZ0LnY8PXQucmc7ZSYmKHRoaXMuaHN2YS5oPXQudi90LnJnLHRoaXMuc2xpZGVySD10aGlzLmhzdmEuaCx0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoiaHVlIix2YWxpZDplLHZhbHVlOnRoaXMuaHN2YS5oLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vblZhbHVlSW5wdXQodCl7Y29uc3QgZT0haXNOYU4odC52KSYmdC52Pj0wJiZ0LnY8PXQucmc7ZSYmKHRoaXMuaHN2YS52PXQudi90LnJnLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKSksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5pbnB1dENoYW5nZWQoe2lucHV0OiJ2YWx1ZSIsdmFsaWQ6ZSx2YWx1ZTp0aGlzLmhzdmEudixjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25BbHBoYUlucHV0KHQpe2NvbnN0IGU9IWlzTmFOKHQudikmJnQudj49MCYmdC52PD10LnJnO2UmJih0aGlzLmhzdmEuYT10LnYvdC5yZyx0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoiYWxwaGEiLHZhbGlkOmUsdmFsdWU6dGhpcy5oc3ZhLmEsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uTGlnaHRuZXNzSW5wdXQodCl7Y29uc3QgZT10aGlzLnNlcnZpY2UuaHN2YTJoc2xhKHRoaXMuaHN2YSksbj0haXNOYU4odC52KSYmdC52Pj0wJiZ0LnY8PXQucmc7biYmKGUubD10LnYvdC5yZyx0aGlzLmhzdmE9dGhpcy5zZXJ2aWNlLmhzbGEyaHN2YShlKSx0aGlzLnNsaWRlckg9dGhpcy5oc3ZhLmgsdGhpcy51cGRhdGVDb2xvclBpY2tlcigpKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmlucHV0Q2hhbmdlZCh7aW5wdXQ6ImxpZ2h0bmVzcyIsdmFsaWQ6bix2YWx1ZTplLmwsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uU2F0dXJhdGlvbklucHV0KHQpe2NvbnN0IGU9dGhpcy5zZXJ2aWNlLmhzdmEyaHNsYSh0aGlzLmhzdmEpLG49IWlzTmFOKHQudikmJnQudj49MCYmdC52PD10LnJnO24mJihlLnM9dC52L3QucmcsdGhpcy5oc3ZhPXRoaXMuc2VydmljZS5oc2xhMmhzdmEoZSksdGhpcy5zbGlkZXJIPXRoaXMuaHN2YS5oLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKSksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5pbnB1dENoYW5nZWQoe2lucHV0OiJzYXR1cmF0aW9uIix2YWxpZDpuLHZhbHVlOmUucyxjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25DeWFuSW5wdXQodCl7IWlzTmFOKHQudikmJnQudj49MCYmdC52PD10LnJnJiYodGhpcy5jbXlrLmM9dC52LHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoITEsITAsITApKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmlucHV0Q2hhbmdlZCh7aW5wdXQ6ImN5YW4iLHZhbGlkOiEwLHZhbHVlOnRoaXMuY215ay5jLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vbk1hZ2VudGFJbnB1dCh0KXshaXNOYU4odC52KSYmdC52Pj0wJiZ0LnY8PXQucmcmJih0aGlzLmNteWsubT10LnYsdGhpcy51cGRhdGVDb2xvclBpY2tlcighMSwhMCwhMCkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoibWFnZW50YSIsdmFsaWQ6ITAsdmFsdWU6dGhpcy5jbXlrLm0sY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uWWVsbG93SW5wdXQodCl7IWlzTmFOKHQudikmJnQudj49MCYmdC52PD10LnJnJiYodGhpcy5jbXlrLnk9dC52LHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoITEsITAsITApKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmlucHV0Q2hhbmdlZCh7aW5wdXQ6InllbGxvdyIsdmFsaWQ6ITAsdmFsdWU6dGhpcy5jbXlrLnksY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uQmxhY2tJbnB1dCh0KXshaXNOYU4odC52KSYmdC52Pj0wJiZ0LnY8PXQucmcmJih0aGlzLmNteWsuaz10LnYsdGhpcy51cGRhdGVDb2xvclBpY2tlcighMSwhMCwhMCkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoiYmxhY2siLHZhbGlkOiEwLHZhbHVlOnRoaXMuY215ay5rLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vbkFkZFByZXNldENvbG9yKHQsZSl7dC5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLmNwUHJlc2V0Q29sb3JzLmZpbHRlcigodD0+dD09PWUpKS5sZW5ndGh8fCh0aGlzLmNwUHJlc2V0Q29sb3JzPXRoaXMuY3BQcmVzZXRDb2xvcnMuY29uY2F0KGUpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UucHJlc2V0Q29sb3JzQ2hhbmdlZCh0aGlzLmNwUHJlc2V0Q29sb3JzKSl9b25SZW1vdmVQcmVzZXRDb2xvcih0LGUpe3Quc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5jcFByZXNldENvbG9ycz10aGlzLmNwUHJlc2V0Q29sb3JzLmZpbHRlcigodD0+dCE9PWUpKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLnByZXNldENvbG9yc0NoYW5nZWQodGhpcy5jcFByZXNldENvbG9ycyl9b3BlbkNvbG9yUGlja2VyKCl7dGhpcy5zaG93fHwodGhpcy5zaG93PSEwLHRoaXMuaGlkZGVuPSEwLHNldFRpbWVvdXQoKCgpPT57dGhpcy5oaWRkZW49ITEsdGhpcy5zZXREaWFsb2dQb3NpdGlvbigpLHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpfSksMCksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5zdGF0ZUNoYW5nZWQoITApLHRoaXMuaXNJRTEwfHwoZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIix0aGlzLmxpc3RlbmVyTW91c2VEb3duKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0Iix0aGlzLmxpc3RlbmVyTW91c2VEb3duKSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdGhpcy5saXN0ZW5lclJlc2l6ZSkpfWNsb3NlQ29sb3JQaWNrZXIoKXt0aGlzLnNob3cmJih0aGlzLnNob3c9ITEsdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5zdGF0ZUNoYW5nZWQoITEpLHRoaXMuaXNJRTEwfHwoZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIix0aGlzLmxpc3RlbmVyTW91c2VEb3duKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0Iix0aGlzLmxpc3RlbmVyTW91c2VEb3duKSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdGhpcy5saXN0ZW5lclJlc2l6ZSksdGhpcy5jZFJlZi5kZXN0cm95ZWR8fHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpKX11cGRhdGVDb2xvclBpY2tlcih0PSEwLGU9ITAsbj0hMSl7aWYodGhpcy5zbGlkZXJEaW1NYXgpe2xldCBvLGksYTsyPT09dGhpcy5jcENvbG9yTW9kZSYmKHRoaXMuaHN2YS5zPTApO2NvbnN0IHI9dGhpcy5vdXRwdXRDb2xvcjtpZihpPXRoaXMuc2VydmljZS5oc3ZhMmhzbGEodGhpcy5oc3ZhKSx0aGlzLmNwQ215a0VuYWJsZWQ/KG4/KGE9dGhpcy5zZXJ2aWNlLmNteWtUb1JnYih0aGlzLnNlcnZpY2Uubm9ybWFsaXplQ01ZSyh0aGlzLmNteWspKSx0aGlzLmhzdmE9dGhpcy5zZXJ2aWNlLnJnYmFUb0hzdmEoYSkpOihhPXRoaXMuc2VydmljZS5oc3ZhVG9SZ2JhKHRoaXMuaHN2YSksdGhpcy5jbXlrPXRoaXMuc2VydmljZS5kZW5vcm1hbGl6ZUNNWUsodGhpcy5zZXJ2aWNlLnJnYmFUb0NteWsoYSkpKSxhPXRoaXMuc2VydmljZS5kZW5vcm1hbGl6ZVJHQkEoYSksdGhpcy5zbGlkZXJIPXRoaXMuaHN2YS5oKTphPXRoaXMuc2VydmljZS5kZW5vcm1hbGl6ZVJHQkEodGhpcy5zZXJ2aWNlLmhzdmFUb1JnYmEodGhpcy5oc3ZhKSksbz10aGlzLnNlcnZpY2UuZGVub3JtYWxpemVSR0JBKHRoaXMuc2VydmljZS5oc3ZhVG9SZ2JhKG5ldyB3Myh0aGlzLnNsaWRlckh8fHRoaXMuaHN2YS5oLDEsMSwxKSkpLGUmJih0aGlzLmhzbGFUZXh0PW5ldyBrMyhNYXRoLnJvdW5kKDM2MCppLmgpLE1hdGgucm91bmQoMTAwKmkucyksTWF0aC5yb3VuZCgxMDAqaS5sKSxNYXRoLnJvdW5kKDEwMCppLmEpLzEwMCksdGhpcy5yZ2JhVGV4dD1uZXcgUDMoYS5yLGEuZyxhLmIsTWF0aC5yb3VuZCgxMDAqYS5hKS8xMDApLHRoaXMuY3BDbXlrRW5hYmxlZCYmKHRoaXMuY215a1RleHQ9bmV3IFMzKHRoaXMuY215ay5jLHRoaXMuY215ay5tLHRoaXMuY215ay55LHRoaXMuY215ay5rLE1hdGgucm91bmQoMTAwKnRoaXMuY215ay5hKS8xMDApKSx0aGlzLmhleFRleHQ9dGhpcy5zZXJ2aWNlLnJnYmFUb0hleChhLCJhbHdheXMiPT09dGhpcy5jcEFscGhhQ2hhbm5lbCksdGhpcy5oZXhBbHBoYT10aGlzLnJnYmFUZXh0LmEpLCJhdXRvIj09PXRoaXMuY3BPdXRwdXRGb3JtYXQmJnRoaXMuZm9ybWF0IT09TzMuUkdCQSYmdGhpcy5mb3JtYXQhPT1PMy5DTVlLJiZ0aGlzLmhzdmEuYTwxJiYodGhpcy5mb3JtYXQ9dGhpcy5oc3ZhLmE8MT9PMy5SR0JBOk8zLkhFWCksdGhpcy5odWVTbGlkZXJDb2xvcj0icmdiKCIrby5yKyIsIitvLmcrIiwiK28uYisiKSIsdGhpcy5hbHBoYVNsaWRlckNvbG9yPSJyZ2IoIithLnIrIiwiK2EuZysiLCIrYS5iKyIpIix0aGlzLm91dHB1dENvbG9yPXRoaXMuc2VydmljZS5vdXRwdXRGb3JtYXQodGhpcy5oc3ZhLHRoaXMuY3BPdXRwdXRGb3JtYXQsdGhpcy5jcEFscGhhQ2hhbm5lbCksdGhpcy5zZWxlY3RlZENvbG9yPXRoaXMuc2VydmljZS5vdXRwdXRGb3JtYXQodGhpcy5oc3ZhLCJyZ2JhIixudWxsKSx0aGlzLmZvcm1hdCE9PU8zLkNNWUspdGhpcy5jbXlrQ29sb3I9IiI7ZWxzZSBpZigiYWx3YXlzIj09PXRoaXMuY3BBbHBoYUNoYW5uZWx8fCJlbmFibGVkIj09PXRoaXMuY3BBbHBoYUNoYW5uZWx8fCJmb3JjZWQiPT09dGhpcy5jcEFscGhhQ2hhbm5lbCl7Y29uc3QgdD1NYXRoLnJvdW5kKDEwMCp0aGlzLmNteWsuYSkvMTAwO3RoaXMuY215a0NvbG9yPWBjbXlrYSgke3RoaXMuY215ay5jfSwke3RoaXMuY215ay5tfSwke3RoaXMuY215ay55fSwke3RoaXMuY215ay5rfSwke3R9KWB9ZWxzZSB0aGlzLmNteWtDb2xvcj1gY215aygke3RoaXMuY215ay5jfSwke3RoaXMuY215ay5tfSwke3RoaXMuY215ay55fSwke3RoaXMuY215ay5rfSlgO3RoaXMuc2xpZGVyPW5ldyBBMygodGhpcy5zbGlkZXJIfHx0aGlzLmhzdmEuaCkqdGhpcy5zbGlkZXJEaW1NYXguaC04LHRoaXMuaHN2YS5zKnRoaXMuc2xpZGVyRGltTWF4LnMtOCwoMS10aGlzLmhzdmEudikqdGhpcy5zbGlkZXJEaW1NYXgudi04LHRoaXMuaHN2YS5hKnRoaXMuc2xpZGVyRGltTWF4LmEtOCksdCYmciE9PXRoaXMub3V0cHV0Q29sb3ImJih0aGlzLmNwQ215a0VuYWJsZWQmJnRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuY215a0NoYW5nZWQodGhpcy5jbXlrQ29sb3IpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuY29sb3JDaGFuZ2VkKHRoaXMub3V0cHV0Q29sb3IpKX19c2V0RGlhbG9nUG9zaXRpb24oKXtpZigiaW5saW5lIj09PXRoaXMuY3BEaWFsb2dEaXNwbGF5KXRoaXMucG9zaXRpb249InJlbGF0aXZlIjtlbHNle2xldCB0LGU9InN0YXRpYyIsbj0iIixvPW51bGwsaT1udWxsLGE9dGhpcy5kaXJlY3RpdmVFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucGFyZW50Tm9kZTtjb25zdCByPXRoaXMuZGlhbG9nRWxlbWVudC5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodDtmb3IoO251bGwhPT1hJiYiSFRNTCIhPT1hLnRhZ05hbWU7KXtpZih0PXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGEpLGU9dC5nZXRQcm9wZXJ0eVZhbHVlKCJwb3NpdGlvbiIpLG49dC5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKSwic3RhdGljIiE9PWUmJm51bGw9PT1vJiYobz1hKSxuJiYibm9uZSIhPT1uJiZudWxsPT09aSYmKGk9YSksImZpeGVkIj09PWUpe289aTticmVha31hPWEucGFyZW50Tm9kZX1jb25zdCBzPXRoaXMuY3JlYXRlRGlhbG9nQm94KHRoaXMuZGlyZWN0aXZlRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCJmaXhlZCIhPT1lKTtpZih0aGlzLnVzZVJvb3RWaWV3Q29udGFpbmVyfHwiZml4ZWQiPT09ZSYmKCFvfHxvIGluc3RhbmNlb2YgSFRNTFVua25vd25FbGVtZW50KSl0aGlzLnRvcD1zLnRvcCx0aGlzLmxlZnQ9cy5sZWZ0O2Vsc2V7bnVsbD09PW8mJihvPWEpO2NvbnN0IHQ9dGhpcy5jcmVhdGVEaWFsb2dCb3gobywiZml4ZWQiIT09ZSk7dGhpcy50b3A9cy50b3AtdC50b3AsdGhpcy5sZWZ0PXMubGVmdC10LmxlZnR9ImZpeGVkIj09PWUmJih0aGlzLnBvc2l0aW9uPSJmaXhlZCIpO2xldCBsPXRoaXMuY3BQb3NpdGlvbjsiYXV0byI9PT10aGlzLmNwUG9zaXRpb24mJihsPShmdW5jdGlvbiB0KGUpe2xldCBuPSJyaWdodCIsbz0iYm90dG9tIjtjb25zdHtoZWlnaHQ6aSx3aWR0aDphLHRvcDpyLGJvdHRvbTpzLGxlZnQ6bCxyaWdodDpjfT1lLGQ9ci1pPDAscD1zK2k+KHdpbmRvdy5pbm5lckhlaWdodHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCksbT1sLWE8MCx1PWMrYT4od2luZG93LmlubmVyV2lkdGh8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCk7cmV0dXJuIHAmJihvPSJ0b3AiKSxkJiYobz0iYm90dG9tIiksbSYmKG49InJpZ2h0IiksdSYmKG49ImxlZnQiKSxkJiZwJiZtJiZ1P1sibGVmdCIsInJpZ2h0IiwidG9wIiwiYm90dG9tIl0ucmVkdWNlKCgodCxuKT0+ZVt0XT5lW25dP3Q6bikpOm0mJnU/ZD8iYm90dG9tIjpwfHxyPnM/InRvcCI6ImJvdHRvbSI6ZCYmcD9tPyJyaWdodCI6dXx8bD5jPyJsZWZ0IjoicmlnaHQiOmAke299LSR7bn1gfSkodGhpcy5kaWFsb2dFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpKSwidG9wIj09PWw/KHRoaXMuYXJyb3dUb3A9ci0xLHRoaXMudG9wLT1yK3RoaXMuZGlhbG9nQXJyb3dTaXplLHRoaXMubGVmdCs9dGhpcy5jcFBvc2l0aW9uT2Zmc2V0LzEwMCpzLndpZHRoLXRoaXMuZGlhbG9nQXJyb3dPZmZzZXQpOiJib3R0b20iPT09bD8odGhpcy50b3ArPXMuaGVpZ2h0K3RoaXMuZGlhbG9nQXJyb3dTaXplLHRoaXMubGVmdCs9dGhpcy5jcFBvc2l0aW9uT2Zmc2V0LzEwMCpzLndpZHRoLXRoaXMuZGlhbG9nQXJyb3dPZmZzZXQpOiJ0b3AtbGVmdCI9PT1sfHwibGVmdC10b3AiPT09bD8odGhpcy50b3AtPXItcy5oZWlnaHQrcy5oZWlnaHQqdGhpcy5jcFBvc2l0aW9uT2Zmc2V0LzEwMCx0aGlzLmxlZnQtPXRoaXMuY3BXaWR0aCt0aGlzLmRpYWxvZ0Fycm93U2l6ZS0yLXRoaXMuZGlhbG9nQXJyb3dPZmZzZXQpOiJ0b3AtcmlnaHQiPT09bHx8InJpZ2h0LXRvcCI9PT1sPyh0aGlzLnRvcC09ci1zLmhlaWdodCtzLmhlaWdodCp0aGlzLmNwUG9zaXRpb25PZmZzZXQvMTAwLHRoaXMubGVmdCs9cy53aWR0aCt0aGlzLmRpYWxvZ0Fycm93U2l6ZS0yLXRoaXMuZGlhbG9nQXJyb3dPZmZzZXQpOiJsZWZ0Ij09PWx8fCJib3R0b20tbGVmdCI9PT1sfHwibGVmdC1ib3R0b20iPT09bD8odGhpcy50b3ArPXMuaGVpZ2h0KnRoaXMuY3BQb3NpdGlvbk9mZnNldC8xMDAtdGhpcy5kaWFsb2dBcnJvd09mZnNldCx0aGlzLmxlZnQtPXRoaXMuY3BXaWR0aCt0aGlzLmRpYWxvZ0Fycm93U2l6ZS0yKToodGhpcy50b3ArPXMuaGVpZ2h0KnRoaXMuY3BQb3NpdGlvbk9mZnNldC8xMDAtdGhpcy5kaWFsb2dBcnJvd09mZnNldCx0aGlzLmxlZnQrPXMud2lkdGgrdGhpcy5kaWFsb2dBcnJvd1NpemUtMil9fWlzRGVzY2VuZGFudCh0LGUpe2xldCBuPWUucGFyZW50Tm9kZTtmb3IoO251bGwhPT1uOyl7aWYobj09PXQpcmV0dXJuITA7bj1uLnBhcmVudE5vZGV9cmV0dXJuITF9Y3JlYXRlRGlhbG9nQm94KHQsZSl7cmV0dXJue3RvcDp0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCsoZT93aW5kb3cucGFnZVlPZmZzZXQ6MCksbGVmdDp0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQrKGU/d2luZG93LnBhZ2VYT2Zmc2V0OjApLHdpZHRoOnQub2Zmc2V0V2lkdGgsaGVpZ2h0OnQub2Zmc2V0SGVpZ2h0fX19TjMuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fE4zKShNdShjaCksTXUoSGgpLE11KFQzKSl9LE4zLsm1Y21wPVVvKHt0eXBlOk4zLHNlbGVjdG9yczpbWyJjb2xvci1waWNrZXIiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJihXYihaMSwzKSxXYihYMSwzKSxXYihLMSwzKSksMiZlKXtsZXQgdDtVYih0PVliKCkpJiYobi5kaWFsb2dFbGVtZW50PXQuZmlyc3QpLFViKHQ9WWIoKSkmJihuLmh1ZVNsaWRlcj10LmZpcnN0KSxVYih0PVliKCkpJiYobi5hbHBoYVNsaWRlcj10LmZpcnN0KX19LGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MSZlJiZOdSgia2V5dXAuZXNjIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5oYW5kbGVFc2MoZSl9KSwhMSxabCkoImtleXVwLmVudGVyIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5oYW5kbGVFbnRlcihlKX0pLCExLFpsKX0sZGVjbHM6MjgsdmFyczo0Nyxjb25zdHM6W1sxLCJjb2xvci1waWNrZXIiLDMsImNsaWNrIl0sWyJkaWFsb2dQb3B1cCIsIiJdLFszLCJjbGFzcyIsInRvcCIsNCwibmdJZiJdLFsiY2xhc3MiLCJzYXR1cmF0aW9uLWxpZ2h0bmVzcyIsMywic2xpZGVyIiwicmdYIiwicmdZIiwiYmFja2dyb3VuZC1jb2xvciIsIm5ld1ZhbHVlIiwiZHJhZ1N0YXJ0IiwiZHJhZ0VuZCIsNCwibmdJZiJdLFsxLCJodWUtYWxwaGEiLCJib3giXSxbMSwibGVmdCJdLFsxLCJzZWxlY3RlZC1jb2xvci1iYWNrZ3JvdW5kIl0sWzEsInNlbGVjdGVkLWNvbG9yIl0sWyJ0eXBlIiwiYnV0dG9uIiwzLCJjbGFzcyIsImRpc2FibGVkIiwiY2xpY2siLDQsIm5nSWYiXSxbMSwicmlnaHQiXSxbInN0eWxlIiwiaGVpZ2h0OiAxNnB4OyIsNCwibmdJZiJdLFsxLCJodWUiLDMsInNsaWRlciIsInJnWCIsIm5ld1ZhbHVlIiwiZHJhZ1N0YXJ0IiwiZHJhZ0VuZCJdLFsiaHVlU2xpZGVyIiwiIl0sWzEsImN1cnNvciJdLFsxLCJ2YWx1ZSIsMywic2xpZGVyIiwicmdYIiwibmV3VmFsdWUiLCJkcmFnU3RhcnQiLCJkcmFnRW5kIl0sWyJ2YWx1ZVNsaWRlciIsIiJdLFsxLCJhbHBoYSIsMywic2xpZGVyIiwicmdYIiwibmV3VmFsdWUiLCJkcmFnU3RhcnQiLCJkcmFnRW5kIl0sWyJhbHBoYVNsaWRlciIsIiJdLFsiY2xhc3MiLCJjbXlrLXRleHQiLDMsImRpc3BsYXkiLDQsIm5nSWYiXSxbImNsYXNzIiwiaHNsYS10ZXh0IiwzLCJkaXNwbGF5Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsInJnYmEtdGV4dCIsMywiZGlzcGxheSIsNCwibmdJZiJdLFsiY2xhc3MiLCJoZXgtdGV4dCIsMywiaGV4LWFscGhhIiwiZGlzcGxheSIsNCwibmdJZiJdLFsiY2xhc3MiLCJ2YWx1ZS10ZXh0Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsInR5cGUtcG9saWN5Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsInByZXNldC1hcmVhIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImJ1dHRvbi1hcmVhIiw0LCJuZ0lmIl0sWzEsInNhdHVyYXRpb24tbGlnaHRuZXNzIiwzLCJzbGlkZXIiLCJyZ1giLCJyZ1kiLCJuZXdWYWx1ZSIsImRyYWdTdGFydCIsImRyYWdFbmQiXSxbInR5cGUiLCJidXR0b24iLDMsImRpc2FibGVkIiwiY2xpY2siXSxbMiwiaGVpZ2h0IiwiMTZweCJdLFsxLCJjbXlrLXRleHQiXSxbMSwiYm94Il0sWyJ0eXBlIiwibnVtYmVyIiwicGF0dGVybiIsIlswLTldKiIsIm1pbiIsIjAiLCJtYXgiLCIxMDAiLDMsInRleHQiLCJyZyIsInZhbHVlIiwia2V5dXAuZW50ZXIiLCJuZXdWYWx1ZSJdLFsidHlwZSIsIm51bWJlciIsInBhdHRlcm4iLCJbMC05XSsoW1xcLixdWzAtOV17MSwyfSk/IiwibWluIiwiMCIsIm1heCIsIjEiLCJzdGVwIiwiMC4xIiwzLCJ0ZXh0IiwicmciLCJ2YWx1ZSIsImtleXVwLmVudGVyIiwibmV3VmFsdWUiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsidHlwZSIsIm51bWJlciIsInBhdHRlcm4iLCJbMC05XSsoW1xcLixdWzAtOV17MSwyfSk/IiwibWluIiwiMCIsIm1heCIsIjEiLCJzdGVwIiwiMC4xIiwzLCJ0ZXh0IiwicmciLCJ2YWx1ZSIsImtleXVwLmVudGVyIiwibmV3VmFsdWUiXSxbMSwiaHNsYS10ZXh0Il0sWyJ0eXBlIiwibnVtYmVyIiwicGF0dGVybiIsIlswLTldKiIsIm1pbiIsIjAiLCJtYXgiLCIzNjAiLDMsInRleHQiLCJyZyIsInZhbHVlIiwia2V5dXAuZW50ZXIiLCJuZXdWYWx1ZSJdLFsxLCJyZ2JhLXRleHQiXSxbInR5cGUiLCJudW1iZXIiLCJwYXR0ZXJuIiwiWzAtOV0qIiwibWluIiwiMCIsIm1heCIsIjI1NSIsMywidGV4dCIsInJnIiwidmFsdWUiLCJrZXl1cC5lbnRlciIsIm5ld1ZhbHVlIl0sWzEsImhleC10ZXh0Il0sWzMsInRleHQiLCJ2YWx1ZSIsImJsdXIiLCJrZXl1cC5lbnRlciIsIm5ld1ZhbHVlIl0sWzEsInZhbHVlLXRleHQiXSxbMSwidHlwZS1wb2xpY3kiXSxbMSwidHlwZS1wb2xpY3ktYXJyb3ciLDMsImNsaWNrIl0sWzEsInByZXNldC1hcmVhIl0sWzEsInByZXNldC1sYWJlbCJdLFszLCJjbGFzcyIsNCwibmdJZiJdLFsiY2xhc3MiLCJwcmVzZXQtY29sb3IiLDMsImJhY2tncm91bmRDb2xvciIsImNsaWNrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwicHJlc2V0LWNvbG9yIiwzLCJjbGljayJdLFszLCJjbGFzcyIsImNsaWNrIiw0LCJuZ0lmIl0sWzMsImNsaWNrIl0sWzEsImJ1dHRvbi1hcmVhIl0sWyJ0eXBlIiwiYnV0dG9uIiwzLCJjbGFzcyIsImNsaWNrIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwzLCJjbGljayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoT3UoMCwiZGl2IiwwLDEpLE51KCJjbGljayIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIGUuc3RvcFByb3BhZ2F0aW9uKCl9KSksV20oMixKMSwxLDUsImRpdiIsMiksV20oMyxRMSwyLDgsImRpdiIsMyksT3UoNCwiZGl2Iiw0KSxPdSg1LCJkaXYiLDUpLHd1KDYsImRpdiIsNiksd3UoNywiZGl2Iiw3KSxXbSg4LCQxLDIsNSwiYnV0dG9uIiw4KSxQdSgpLE91KDksImRpdiIsOSksV20oMTAsdDMsMSwwLCJkaXYiLDEwKSxPdSgxMSwiZGl2IiwxMSwxMiksTnUoIm5ld1ZhbHVlIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vbkh1ZUNoYW5nZShlKX0pKSgiZHJhZ1N0YXJ0IiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uRHJhZ1N0YXJ0KCJodWUiKX0pKSgiZHJhZ0VuZCIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vbkRyYWdFbmQoImh1ZSIpfSkpLHd1KDEzLCJkaXYiLDEzKSxQdSgpLE91KDE0LCJkaXYiLDE0LDE1KSxOdSgibmV3VmFsdWUiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLm9uVmFsdWVDaGFuZ2UoZSl9KSkoImRyYWdTdGFydCIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vbkRyYWdTdGFydCgidmFsdWUiKX0pKSgiZHJhZ0VuZCIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vbkRyYWdFbmQoInZhbHVlIil9KSksd3UoMTYsImRpdiIsMTMpLFB1KCksT3UoMTcsImRpdiIsMTYsMTcpLE51KCJuZXdWYWx1ZSIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25BbHBoYUNoYW5nZShlKX0pKSgiZHJhZ1N0YXJ0IiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uRHJhZ1N0YXJ0KCJhbHBoYSIpfSkpKCJkcmFnRW5kIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uRHJhZ0VuZCgiYWxwaGEiKX0pKSx3dSgxOSwiZGl2IiwxMyksUHUoKSxQdSgpLFB1KCksV20oMjAsbzMsMTcsMTIsImRpdiIsMTgpLFdtKDIxLHIzLDE0LDEwLCJkaXYiLDE5KSxXbSgyMixjMywxNCwxMCwiZGl2IiwyMCksV20oMjMsbTMsOCw3LCJkaXYiLDIxKSxXbSgyNCxmMyw5LDMsImRpdiIsMjIpLFdtKDI1LGczLDMsMCwiZGl2IiwyMyksV20oMjYsQzMsNiwzLCJkaXYiLDI0KSxXbSgyNyx4MywzLDIsImRpdiIsMjUpLFB1KCkpLDImZSYmKG9mKCJkaXNwbGF5IixuLnNob3c/ImJsb2NrIjoibm9uZSIpKCJ2aXNpYmlsaXR5IixuLmhpZGRlbj8iaGlkZGVuIjoidmlzaWJsZSIpKCJ0b3AiLG4udG9wLCJweCIpKCJsZWZ0IixuLmxlZnQsInB4IikoInBvc2l0aW9uIixuLnBvc2l0aW9uKSgiaGVpZ2h0IixuLmNwSGVpZ2h0LCJweCIpKCJ3aWR0aCIsbi5jcFdpZHRoLCJweCIpLGFmKCJvcGVuIixuLnNob3cpLEpjKDIpLHZ1KCJuZ0lmIiwicG9wdXAiPT1uLmNwRGlhbG9nRGlzcGxheSksSmMoMSksdnUoIm5nSWYiLDE9PT0obi5jcENvbG9yTW9kZXx8MSkpLEpjKDQpLG9mKCJiYWNrZ3JvdW5kLWNvbG9yIixuLnNlbGVjdGVkQ29sb3IpLEpjKDEpLHZ1KCJuZ0lmIixuLmNwQWRkQ29sb3JCdXR0b24pLEpjKDIpLHZ1KCJuZ0lmIiwiZGlzYWJsZWQiPT09bi5jcEFscGhhQ2hhbm5lbCksSmMoMSksb2YoImRpc3BsYXkiLDE9PT0obi5jcENvbG9yTW9kZXx8MSk/ImJsb2NrIjoibm9uZSIpLHZ1KCJyZ1giLDEpLEpjKDIpLG9mKCJsZWZ0IixudWxsPT1uLnNsaWRlcj9udWxsOm4uc2xpZGVyLmgsInB4IiksSmMoMSksb2YoImRpc3BsYXkiLDI9PT0obi5jcENvbG9yTW9kZXx8MSk/ImJsb2NrIjoibm9uZSIpLHZ1KCJyZ1giLDEpLEpjKDIpLG9mKCJyaWdodCIsbnVsbD09bi5zbGlkZXI/bnVsbDpuLnNsaWRlci52LCJweCIpLEpjKDEpLG9mKCJkaXNwbGF5IiwiZGlzYWJsZWQiPT09bi5jcEFscGhhQ2hhbm5lbD8ibm9uZSI6ImJsb2NrIikoImJhY2tncm91bmQtY29sb3IiLG4uYWxwaGFTbGlkZXJDb2xvciksdnUoInJnWCIsMSksSmMoMiksb2YoImxlZnQiLG51bGw9PW4uc2xpZGVyP251bGw6bi5zbGlkZXIuYSwicHgiKSxKYygxKSx2dSgibmdJZiIsIW4uY3BEaXNhYmxlSW5wdXQmJjE9PT0obi5jcENvbG9yTW9kZXx8MSkpLEpjKDEpLHZ1KCJuZ0lmIiwhbi5jcERpc2FibGVJbnB1dCYmMT09PShuLmNwQ29sb3JNb2RlfHwxKSksSmMoMSksdnUoIm5nSWYiLCFuLmNwRGlzYWJsZUlucHV0JiYxPT09KG4uY3BDb2xvck1vZGV8fDEpKSxKYygxKSx2dSgibmdJZiIsIW4uY3BEaXNhYmxlSW5wdXQmJjE9PT0obi5jcENvbG9yTW9kZXx8MSkpLEpjKDEpLHZ1KCJuZ0lmIiwhbi5jcERpc2FibGVJbnB1dCYmMj09PShuLmNwQ29sb3JNb2RlfHwxKSksSmMoMSksdnUoIm5nSWYiLCFuLmNwRGlzYWJsZUlucHV0JiYxPT09KG4uY3BDb2xvck1vZGV8fDEpKSxKYygxKSx2dSgibmdJZiIsKG51bGw9PW4uY3BQcmVzZXRDb2xvcnM/bnVsbDpuLmNwUHJlc2V0Q29sb3JzLmxlbmd0aCl8fG4uY3BBZGRDb2xvckJ1dHRvbiksSmMoMSksdnUoIm5nSWYiLG4uY3BPS0J1dHRvbnx8bi5jcENhbmNlbEJ1dHRvbikpfSxkaXJlY3RpdmVzOlthdixFMyxEMyxvdl0sc3R5bGVzOlsnLmNvbG9yLXBpY2tlcnstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICM3Nzc7Y3Vyc29yOmRlZmF1bHQ7aGVpZ2h0OmF1dG87cG9zaXRpb246YWJzb2x1dGU7dXNlci1zZWxlY3Q6bm9uZTt3aWR0aDoyMzBweDt6LWluZGV4OjEwMDB9LmNvbG9yLXBpY2tlciAqe2JveC1zaXppbmc6Ym9yZGVyLWJveDtmb250LXNpemU6MTFweDttYXJnaW46MH0uY29sb3ItcGlja2VyIGlucHV0e2NvbG9yOiMwMDA7Zm9udC1zaXplOjEzcHg7aGVpZ2h0OjI2cHg7bWluLXdpZHRoOjA7dGV4dC1hbGlnbjpjZW50ZXI7d2lkdGg6MH0uY29sb3ItcGlja2VyIGlucHV0Oi1tb3otc3VibWl0LWludmFsaWQsLmNvbG9yLXBpY2tlciBpbnB1dDotbW96LXVpLWludmFsaWQsLmNvbG9yLXBpY2tlciBpbnB1dDppbnZhbGlke2JveC1zaGFkb3c6bm9uZX0uY29sb3ItcGlja2VyIGlucHV0Ojotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLC5jb2xvci1waWNrZXIgaW5wdXQ6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7bWFyZ2luOjB9LmNvbG9yLXBpY2tlciAuYXJyb3d7Ym9yZGVyLXN0eWxlOnNvbGlkO2hlaWdodDowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjA7ei1pbmRleDo5OTk5OTl9LmNvbG9yLXBpY2tlciAuYXJyb3cuYXJyb3ctdG9we2JvcmRlci1jb2xvcjojNzc3IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50O2JvcmRlci13aWR0aDoxMHB4IDVweDtsZWZ0OjhweH0uY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1ib3R0b217Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50IHRyYW5zcGFyZW50ICM3Nzc7Ym9yZGVyLXdpZHRoOjEwcHggNXB4O2xlZnQ6OHB4O3RvcDotMjBweH0uY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1sZWZ0LXRvcCwuY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy10b3AtbGVmdHtib3JkZXItY29sb3I6dHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgIzc3Nztib3JkZXItd2lkdGg6NXB4IDEwcHg7Ym90dG9tOjhweDtyaWdodDotMjFweH0uY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1yaWdodC10b3AsLmNvbG9yLXBpY2tlciAuYXJyb3cuYXJyb3ctdG9wLXJpZ2h0e2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudCAjNzc3IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50O2JvcmRlci13aWR0aDo1cHggMTBweDtib3R0b206OHB4O2xlZnQ6LTIwcHh9LmNvbG9yLXBpY2tlciAuYXJyb3cuYXJyb3ctYm90dG9tLWxlZnQsLmNvbG9yLXBpY2tlciAuYXJyb3cuYXJyb3ctbGVmdCwuY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1sZWZ0LWJvdHRvbXtib3JkZXItY29sb3I6dHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgIzc3Nztib3JkZXItd2lkdGg6NXB4IDEwcHg7cmlnaHQ6LTIxcHg7dG9wOjhweH0uY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1ib3R0b20tcmlnaHQsLmNvbG9yLXBpY2tlciAuYXJyb3cuYXJyb3ctcmlnaHQsLmNvbG9yLXBpY2tlciAuYXJyb3cuYXJyb3ctcmlnaHQtYm90dG9te2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudCAjNzc3IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50O2JvcmRlci13aWR0aDo1cHggMTBweDtsZWZ0Oi0yMHB4O3RvcDo4cHh9LmNvbG9yLXBpY2tlciAuY3Vyc29ye2JvcmRlcjoycHggc29saWQgIzIyMjtib3JkZXItcmFkaXVzOjUwJTtjdXJzb3I6ZGVmYXVsdDtoZWlnaHQ6MTZweDtwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDoxNnB4fS5jb2xvci1waWNrZXIgLmJveHtkaXNwbGF5OmZsZXg7cGFkZGluZzo0cHggOHB4fS5jb2xvci1waWNrZXIgLmxlZnR7cGFkZGluZzoxNnB4IDhweDtwb3NpdGlvbjpyZWxhdGl2ZX0uY29sb3ItcGlja2VyIC5yaWdodHtmbGV4OjEgMSBhdXRvO3BhZGRpbmc6MTJweCA4cHh9LmNvbG9yLXBpY2tlciAuYnV0dG9uLWFyZWF7cGFkZGluZzowIDE2cHggMTZweDt0ZXh0LWFsaWduOnJpZ2h0fS5jb2xvci1waWNrZXIgLmJ1dHRvbi1hcmVhIGJ1dHRvbnttYXJnaW4tbGVmdDo4cHh9LmNvbG9yLXBpY2tlciAucHJlc2V0LWFyZWF7cGFkZGluZzo0cHggMTVweH0uY29sb3ItcGlja2VyIC5wcmVzZXQtYXJlYSAucHJlc2V0LWxhYmVse2NvbG9yOiM1NTU7Zm9udC1zaXplOjExcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6NHB4O3RleHQtYWxpZ246bGVmdDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcDt3aWR0aDoxMDAlfS5jb2xvci1waWNrZXIgLnByZXNldC1hcmVhIC5wcmVzZXQtY29sb3J7Ym9yZGVyOjFweCBzb2xpZCAjYTlhOWE5O2JvcmRlci1yYWRpdXM6MjUlO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxOHB4O21hcmdpbjo0cHggNnB4IDhweDtwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDoxOHB4fS5jb2xvci1waWNrZXIgLnByZXNldC1hcmVhIC5wcmVzZXQtZW1wdHktbWVzc2FnZXtmb250LXN0eWxlOml0YWxpYzttYXJnaW4tYm90dG9tOjhweDttYXJnaW4tdG9wOjRweDttaW4taGVpZ2h0OjE4cHg7dGV4dC1hbGlnbjpjZW50ZXJ9LmNvbG9yLXBpY2tlciAuaGV4LXRleHR7Zm9udC1zaXplOjExcHg7cGFkZGluZzo0cHggOHB4O3dpZHRoOjEwMCV9LmNvbG9yLXBpY2tlciAuaGV4LXRleHQgLmJveHtwYWRkaW5nOjAgMjRweCA4cHggOHB4fS5jb2xvci1waWNrZXIgLmhleC10ZXh0IC5ib3ggZGl2e2NsZWFyOmxlZnQ7Y29sb3I6IzU1NTtmbGV4OjEgMSBhdXRvO2Zsb2F0OmxlZnQ7dGV4dC1hbGlnbjpjZW50ZXJ9LmNvbG9yLXBpY2tlciAuaGV4LXRleHQgLmJveCBpbnB1dHtib3JkZXI6MXB4IHNvbGlkICNhOWE5YTk7ZmxleDoxIDEgYXV0bztwYWRkaW5nOjFweH0uY29sb3ItcGlja2VyIC5oZXgtYWxwaGEgLmJveCBkaXY6Zmlyc3QtY2hpbGQsLmNvbG9yLXBpY2tlciAuaGV4LWFscGhhIC5ib3ggaW5wdXQ6Zmlyc3QtY2hpbGR7ZmxleC1ncm93OjM7bWFyZ2luLXJpZ2h0OjhweH0uY29sb3ItcGlja2VyIC5jbXlrLXRleHQsLmNvbG9yLXBpY2tlciAuaHNsYS10ZXh0LC5jb2xvci1waWNrZXIgLnJnYmEtdGV4dCwuY29sb3ItcGlja2VyIC52YWx1ZS10ZXh0e2ZvbnQtc2l6ZToxMXB4O3BhZGRpbmc6NHB4IDhweDt3aWR0aDoxMDAlfS5jb2xvci1waWNrZXIgLmNteWstdGV4dCAuYm94LC5jb2xvci1waWNrZXIgLmhzbGEtdGV4dCAuYm94LC5jb2xvci1waWNrZXIgLnJnYmEtdGV4dCAuYm94e3BhZGRpbmc6MCAyNHB4IDhweCA4cHh9LmNvbG9yLXBpY2tlciAudmFsdWUtdGV4dCAuYm94e3BhZGRpbmc6MCA4cHggOHB4fS5jb2xvci1waWNrZXIgLmNteWstdGV4dCAuYm94IGRpdiwuY29sb3ItcGlja2VyIC5oc2xhLXRleHQgLmJveCBkaXYsLmNvbG9yLXBpY2tlciAucmdiYS10ZXh0IC5ib3ggZGl2LC5jb2xvci1waWNrZXIgLnZhbHVlLXRleHQgLmJveCBkaXZ7Y29sb3I6IzU1NTtmbGV4OjEgMSBhdXRvO21hcmdpbi1yaWdodDo4cHg7dGV4dC1hbGlnbjpjZW50ZXJ9LmNvbG9yLXBpY2tlciAuY215ay10ZXh0IC5ib3ggZGl2Omxhc3QtY2hpbGQsLmNvbG9yLXBpY2tlciAuaHNsYS10ZXh0IC5ib3ggZGl2Omxhc3QtY2hpbGQsLmNvbG9yLXBpY2tlciAucmdiYS10ZXh0IC5ib3ggZGl2Omxhc3QtY2hpbGQsLmNvbG9yLXBpY2tlciAudmFsdWUtdGV4dCAuYm94IGRpdjpsYXN0LWNoaWxke21hcmdpbi1yaWdodDowfS5jb2xvci1waWNrZXIgLmNteWstdGV4dCAuYm94IGlucHV0LC5jb2xvci1waWNrZXIgLmhzbGEtdGV4dCAuYm94IGlucHV0LC5jb2xvci1waWNrZXIgLnJnYmEtdGV4dCAuYm94IGlucHV0LC5jb2xvci1waWNrZXIgLnZhbHVlLXRleHQgLmJveCBpbnB1dHtib3JkZXI6MXB4IHNvbGlkICNhOWE5YTk7ZmxleDoxO2Zsb2F0OmxlZnQ7bWFyZ2luOjAgOHB4IDAgMDtwYWRkaW5nOjFweH0uY29sb3ItcGlja2VyIC5jbXlrLXRleHQgLmJveCBpbnB1dDpsYXN0LWNoaWxkLC5jb2xvci1waWNrZXIgLmhzbGEtdGV4dCAuYm94IGlucHV0Omxhc3QtY2hpbGQsLmNvbG9yLXBpY2tlciAucmdiYS10ZXh0IC5ib3ggaW5wdXQ6bGFzdC1jaGlsZCwuY29sb3ItcGlja2VyIC52YWx1ZS10ZXh0IC5ib3ggaW5wdXQ6bGFzdC1jaGlsZHttYXJnaW4tcmlnaHQ6MH0uY29sb3ItcGlja2VyIC5odWUtYWxwaGF7YWxpZ24taXRlbXM6Y2VudGVyO21hcmdpbi1ib3R0b206M3B4fS5jb2xvci1waWNrZXIgLmh1ZXtiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFKWUFBQUFRQ0FZQUFBRDA2SVluQUFBQUJtSkxSMFFBL3dEL0FQK2d2YWVUQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFCM1JKVFVVSDRBSVdEd2tVRldiQ0NBQUFBRnhKUkVGVWFON3Qwa0VLZzBBUUFNRTJ4ODMvbjJxdTVxQ2dEMWlEaENvWWRwbmJRQzliYlkxcVZPL2p2YzZrM2FkOTFzNy83RjEvY3NnUHJ1anVRMTdCRFlTRnNCQVd3Z0poSVN5RUJjSkNXQWdMaElXd0VCWUlpMmY3QXIvMVRDZ0ZIMlg5QUFBQUFFbEZUa1N1UW1DQyIpO2RpcmVjdGlvbjpsdHJ9LmNvbG9yLXBpY2tlciAuaHVlLC5jb2xvci1waWNrZXIgLnZhbHVle2JhY2tncm91bmQtc2l6ZToxMDAlIDEwMCU7Ym9yZGVyOm5vbmU7Y3Vyc29yOnBvaW50ZXI7aGVpZ2h0OjE2cHg7bWFyZ2luLWJvdHRvbToxNnB4O3dpZHRoOjEwMCV9LmNvbG9yLXBpY2tlciAudmFsdWV7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBSllBQUFBUUNBWUFBQUQwNklZbkFBQUNUa2xFUVZSNDJ1M1NZVWNyQUJoQTRVMlNrbVJKTW1XU0prbEtKaVdaWnBLVUpKc2tLVW1hVEZJbUtaT1V6TXlTcEdSbWxpUk5KaWxKU3BLU0pFdG1TcElwbVdtU2RPNzM2LzZEK3g3T1AzZ1VDb1dDdjFjcWxTUWxKWkdjbkV4S1NncXBxYW1rcGFXUm5wNU9Sa1lHbVptWnFGUXFzckt5eU03T0ppY25oOXpjWE5ScU5YbDVlZVRuNTZQUmFDZ29LS0N3c0pDaW9pSzBXaTNGeGNXVWxKUlFXbHBLV1ZrWjVlWGxWRlJVVUZsWmlVNm5vNnFxaXVycWFtcHFhcWl0cmFXdXJnNjlYazk5ZlQwR2d3R2owVWhEUXdPTmpZMDBOVFhSM054TVMwc0xyYTJ0dExXMTBkN2Vqc2xrd213MjA5SFJRV2RuSjExZFhYUjNkOVBUMDBOdmJ5OTlmWDMwOS9jek1EREE0T0FnRm91Rm9hRWhyRllydzhQRGpJeU1NRG82eXRqWUdEYWJqZkh4Y1NZbUpwaWNuR1JxYWdxNzNjNzA5RFF6TXpQTXpzNHlOemZIL1B3OERvY0RwOU9KeStYQzdYYXpzTERBNHVJaVMwdExMQzh2czdLeXd1cnFLbXRyYTNnOEhyeGVMejZmRDcvZnovcjZPaHNiRzJ4dWJySzF0Y1gyOWphQlFJQ2RuUjJDd1NDN3U3dnM3ZTJ4djcvUHdjRUJoNGVISEIwZGNYeDh6TW5KQ2FlbnA1eWRuWEYrZnM3RnhRV1hsNWRjWFYxeGZYM056YzBOdDdlMzNOM2RFUXFGdUwrLzUrSGhnWEE0VENRUzRmSHhrYWVuSjU2Zm4zbDVlZUgxOVpWb05NcmIyeHZ2Nys5OGZId1FpOFdJeCtOOGZuNlNTQ1Q0K3ZyaSsvdWJuNThmZm45LytWY0tnU1d3QkpiQUVsZ0NTMkFKTElFbHNBU1d3QkpZQWt0Z0NTeUJKYkFFbHNBU1dBSkxZQWtzZ1NXd0JKYkFFbGdDUzJBSkxJRWxzUDQvV0g4QW1KNVo2akhTNGg4QUFBQUFTVVZPUks1Q1lJST0iKTtkaXJlY3Rpb246cnRsfS5jb2xvci1waWNrZXIgLmFscGhhe2JhY2tncm91bmQtaW1hZ2U6dXJsKCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUpZQUFBQVFDQVlBQUFEMDZJWW5BQUFBQm1KTFIwUUEvd0QvQVArZ3ZhZVRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUIzUkpUVVVINEFJV0R3WVFsWk1hM2dBQUFXVkpSRUZVYU43dG1FR082akFRUkNzT0FySGdCcHlBSllHamNHb2N4QW00QTJJSHBtb1dFMGVCSCtlem1GbE52VTA2c2hKM1c2VkVlbFdNVVFBSUlGOWY2cVpwaW1zQTFMWXRTMnVGNTEvdTI3WVZBRlpWUlVrRW9HSGRQVi9zSWNiSUVJSWtVZEkvOVhhN25leXY2MStTV0ZVVkFWQ1NjdDAwVFduMmZ2NnUzK0VjZmQzdFh6eS8wK25FVXUrU1Bqby9rcXpybWlRcFNjTjZ2OThYZXdmQTgvbE1raUxKMld4R1NVb3BjVDZmTTZVME5YOS9mcmZiamV2MVd0ZnJsWmZMaFlmRFFRSEcvQUlPbG5Hd2pJTmxIQ3hqSEN6allKbS9USldkQ3dxdUpYc2VGRnpHd0ROTmVpS01PSlRPOHhRZERRYWVCMjkrSzllZmVMYUJvOUo3dmR2dEpqMVJqRkZqZml2N3F2OTV0angvN2xlU1FnaDkzZTFmZk1lSXA2TytZUWpoby9ONzkxdDFYVk9TU0k3Ti8vSys0L0dveFdMQngrUEI1L09wNVhMSisvM09sSkpXcXhVM204M292djVpR2Y4S2pZTmxIQ3hqSEN6allCa0h5NWdmNWd1c3ZRVTdVMzdqVEFBQUFBQkpSVTVFcmtKZ2dnPT0iKTtiYWNrZ3JvdW5kLXNpemU6MTAwJSAxMDAlO2JvcmRlcjpub25lO2N1cnNvcjpwb2ludGVyO2RpcmVjdGlvbjpsdHI7aGVpZ2h0OjE2cHg7d2lkdGg6MTAwJX0uY29sb3ItcGlja2VyIC50eXBlLXBvbGljeXtiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCSUFBQUFnQ0FZQUFBQWZmQ2p4QUFBQUJITkNTVlFJQ0FnSWZBaGtpQUFBQUFsd1NGbHpBQUFDZXdBQUFuc0IwMUNPM0FBQUFCbDBSVmgwVTI5bWRIZGhjbVVBZDNkM0xtbHVhM05qWVhCbExtOXlaNXZ1UEJvQUFBSUFTVVJCVkVpSjdaWTlheFJSRklhZnN4TVN0ckxRSnBBZ3BCRmhpK0M5dzFZU28wMEk2UlovZzl2WnBCZi9RT3I0R3lSZ2tTS05TckFhZHNacVFHd0NrdUFXeVJaSnN5U3d2aFo3Ti92aHpyZ2JMSDNMZDg1OTdqbHp6NTB6Sm9reXhYSDhEcURWYXIwcWk2djhCYkl0cVNHcEVjZnhkbG1zRldYa3ZYOEFmQVZXZzNVS1BFblQ5R0t1ak16c0FGZ1pzVmFDTjFWVFFkNzdYVW5yZ0Uxa3YrNjkzNTI2OFdScHpybkhadllSV0M3WXZDM3BSWlpsM3dvenF0VnFpeUg5SWdqQXNwa2QxR3ExeFVKUXRWcmRCOVpLSUFPdGhkZy9RYzY1TFVrN3dOSU1vQ1ZKTzg2NXJZRmhrcWpYNi9kN3ZWNEdQSndCTXFvZlVSUzVKRWs2RllCZXIvZWVZYi9NbzlXd0ZuUE92UWJlQXZmdUFBSzRCTjRzQUp0QUcvZ0pJRWxtTnVpSnliYTNFR05tWmlQZVp1RVZtVmVsbC9ZLzZOK0N6RG4zQVhoRU9PbzdIdi8zQmVBejhJelFrTVBuSmJ1UHgxd0MreVlKNy8wbllJUDVTLzBGSEtkcCtyd0NFRVhSUy9yZjVIbDFHdGIyTTBpU3BDT3BDWnpQQVRtWDFFeVNwSE1MQXNpeTdNak1Eb0hyR1NEWFpuYVlaZG5Sd0JoN0o5MXV0d21jekFBNkNiRzNHZ1BsZVg0anFVSC9hMUNrdHFSR251YzNoU0NBTUIzMmdLc3BrQ3RnYjNLQ1FNbWtqZVA0V05KVGhyTk5admFsMVdwdFRJc3Y3SnRRNHRtSWRSYThxU29FcFdsNllXWk5vQU4wekt4Wk5QZWhwTFNCWnYydCtRMENKOWxMbkFSUUxBQUFBQUJKUlU1RXJrSmdnZz09Iik7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTo4cHggMTZweDtoZWlnaHQ6MjRweDtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDoxMnB4O3RvcDoyMThweDt3aWR0aDoxNnB4fS5jb2xvci1waWNrZXIgLnR5cGUtcG9saWN5IC50eXBlLXBvbGljeS1hcnJvd3tkaXNwbGF5OmJsb2NrO2hlaWdodDo1MCU7d2lkdGg6MTAwJX0uY29sb3ItcGlja2VyIC5zZWxlY3RlZC1jb2xvcntib3JkZXI6MXB4IHNvbGlkICNhOWE5YTk7Ym9yZGVyLXJhZGl1czo1MCU7aGVpZ2h0OjQwcHg7bGVmdDo4cHg7cG9zaXRpb246YWJzb2x1dGU7dG9wOjE2cHg7d2lkdGg6NDBweH0uY29sb3ItcGlja2VyIC5zZWxlY3RlZC1jb2xvci1iYWNrZ3JvdW5ke2JhY2tncm91bmQtaW1hZ2U6dXJsKCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUNnQUFBQW9DQVlBQUFDTS9yaHRBQUFBaDBsRVFWUllSKzJXMFFsQU1RZ0Q2MHpkZndPZHFhOFRtSS93UU1yNUswSTViWkxJekxPYTJudDM3VlZWYmQrZER4NW9iZ0NDM0tCTHdKMmZmNFBuVmlka2YrdWNJaHc4MEhRYUNMbzNETUgzQ1JLM2lGc21BV1ZsNmhQTkR3dDhFdk5FNXErWXVFWGNNZ2tvblZNNlNkeUNvRXZBblo4djFIang4MTdNaWxteFNVQjVyZExKRHljWmdVQVpVY2gvQUFBQUFFbEZUa1N1UW1DQyIpO2JvcmRlci1yYWRpdXM6NTAlO2hlaWdodDo0MHB4O3dpZHRoOjQwcHh9LmNvbG9yLXBpY2tlciAuc2F0dXJhdGlvbi1saWdodG5lc3N7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBT1lBQUFDQ0NBWUFBQUJTRDdUM0FBQUFCbUpMUjBRQS93RC9BUCtndmFlVEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQjNSSlRVVUg0QUlXRHdrc1BXUjZsZ0FBSUFCSlJFRlVlTnJ0blZ1VDQ3Z1JyQUhOK1AvL09yLzYxWTV3T05aN21aMXUzWEFlTE1qSlpHWlZnZEtzZmM1eFIzUzBSSUlVVytDSHpDcGMyTWNZbzdYR3YzZXg3VWlaZDU3cmp5enp2K3YrMzNYL1IvKzNyL2Y3dlIzODZZK1R2S05jZi93ZGhUTFBjdjlxVTJ3WmQ3NHV0aDB0MTgyMWprSVpMUGNzSS82bldhNFh2dXRxdVUwWjg1bW54ODBTL1p6Z3BuTG5PdEhOdDcvb2Z4MVRLWGNTTnpOLzdxYk1RM2p1N3JOUW1NWVlkLzRzMmo5YWErUCtnR2FNY1pyYjFNL3RkcnZmNy9kMnY5OVA5L3Q5M08vM2NidmR4dTEyRzlmcmRWd3VsM0UrbjhjLy8vblArMisvL1hiNjZhZWZ4bC8vK3RmeDV6Ly8yWUs1QWwycmd2ZjRVc2JwZEdyQjUyYkF2QXJYcHV6am1pcUFWU0d6NWVEbUdZWHpoYkFabUNybm16ZGRwVVUrOFkxZEFPWWVYQ3REVXdWd1Y3WUNHSDZ1QW15TWNaOWw1dmtVYUJQR01VWjcvSjV3Lzc5Mi9mdnY5WHE5MzI2M2RyL2ZUeFBFQ2VNRThuSzVqTS9Qei9IVFR6L2R2MzM3ZHZybGwxL0dQLzd4ai9HM3YvMXQvT1V2ZndrVnN3b25namRPcDlQekgzVTNEM3ptV0duWlZYbjRqQ3FzN3dDMkJLUDQvOHRBemtac29XeDZYcnFlSFp5bXZwNEFCQ0JKaFRRd0tmRFQ4Z3pyWkNJcWk1QWhpQUNqQmZFQjJyUDgvWDYzTU03ZjYvVjZ2OS92N1hhN2JZQzgzVzdqY3Jsc1ZISXE1ZmZ2MzArLy9mYmIrT1dYWDhaUFAvMDAvdjczdjQrZmYvNzVKU3ZiZXUrYkwyV01NYUZiQWxwQk5NODVRWCtjdDZxb1Nxa1BBd3VRbEJWS3FHTkZTVU9BQTNCbXU3Z0M1aE5PZDE1blN3dkFPVVc3QzRnaVVDVjhTZ241TDloTkZJcVRzcDBHeEkweXNpb3lqQWprWS90R0pWRXB6K2Z6K09XWFgrN2Z2MzgvL2Y3NzcrUGJ0Mi9qMTE5L0hULy8vUFA0OWRkZng4ZkhSd3JtVGpWNzc5RVh1MnB4Mnhoand0ZEpaUWNBV1FJUExQSVNzTUphU3dpRDhneklLcndTeUFURTVqNW5BYlI1YzFkQlV3QmxzRVdXMGg2THFpWXNxRlBBUXhDeVJaM3dPU0FSeG1sWE1YNWs2NHBRZnZ2MjdmNzUrZGsrUGo1T0h4OGY0L3YzNytQYnQyL2p0OTkrRzkrK2ZSc2ZIeC9qY3JtVUZMTzMxZ1lEV2JseFJJcy9UcWZUN291c3hKc0F4WEEyR2M3VEE5WGRnZmRvSGJGc2o3NlgyKzFXQXJnSTFhZ2VHd0EzcXVwcW9Ic21jYkk2RnU5M3F1Z2dGYTlkN0xlRHRnS2ZBRkhCSitORUJ5SWtjSjVLZXJ2ZFRtaGhHY2dKSlNaNXZuLy9maitmeisxOFBwOCtQei9INStmbm1HRCsvdnZ2NC92MzcrUGo0Mk44Zm42TzIrMVdzN0pqalA2d3JhTUk1RTRSWjh4MnZWNVRTd2txdW90VjcvZDdUejZIRldzRC9xTmNkdzBDUTNxLzMyMWM2ODZUd0RWSWRidXk3M3pObGRoU0hiOEkya2xaem5tK0luQlM0VTZuMDMwMmFCRnNMaEhEQUtKVkpWZ2xmSTlqaHZ1NTNXNTNzTEFOWU54QWlEQTZNQ2VVSHg4ZjkrdjEyaTZYUzd0Y0xxY1pXNTdQNXllWTgvZno4M09jeitmbnNTbVlVeWtuV0VHODVXQnN0OXN0elNMeU1kZnI5UWkwOGlZMTVVWjBMbERHTGhSM281eksyajdPUFVURDBFK25VM3RrN1hiLzE2TkZiaGxvQU11WTF6akxVT08zQktlSURlK1o4czMvSjRnRm80VE01alBtdVJnMjhmb1VLS1ZTd28xNlRnQTVucHl3Y1dMSGdZbC9QejgvNzMvNjA1L2FiNy85MW02M1c3dGNMaWUwc1pqNG1hbzVnVHlmejg4RTBmMStqOEVjWXp3VFBFRzJjcWp5ZkhORjBNOGZ1cUVpYU9WblJ6WlpRTmg1ZndReUhnL0hER2ZKbzg5UTF6Yi9xdXU1WEM2NzczSTJYS2ZUcWQvdjkrZDN3dXFXdmEvWVRkVWRFVjNmaEl2L1ZpeXBzNllFM3gzcjQzSzViSlFTNjZ6YXhWR0ZzdmQrLy9qNGFGKy9mbTNmdjM5dnQ5dXRmZjM2dGYzKysrL3RkcnVkdm4zN1p1TkxCYWFDTWdVekMrclpSaUZvd3hVdUpJOFlNcWNDcDlPcHE1dmFnYVlVNmxHSkExWFFxZWpjaHc2Q2owR3c1bllCckd3MDFBMk8yMDZuMDRCR291Tk55VGZwL0Z3RWxoVWV5Nm5YcklLdzdRUVdkZHh1TjJsZEw1Zkw4MzlnU1BGOGFodS9KdkJPNDhDUFN1cU1mOFZwOS9QNTNMNTgrZEx1OTNzN244L3RmcjgvMzkvdjkvYjUrVGtoUEozUDU2bVE0MzYvaisvZnYrL2lTZ2J6ZXIwK0FaeC81Kzg4YnY2T01kYTZTNXo2a2QyMWZZQzlkeHY3Y0lKSjJkOUFPUzMwZlBNenlIaVRNOEI0REY2WFVsWUhwNEtRVzNXKzF0NzdNTkIxdkdIeFdxN1hhN3ZmNzgreTUvTjVBK0gxZXQyOXh1UDVkYll0eWFSdTRBa3NiUHE2OTM2ZmpSelhSeEJiUHIvYitiMTgrZktsalRIYUJCQmZuOC9uMC8xK0gxKytmQm5uOHptMHNCOGZINXU0Y3I1R3VCaE1WazBFRW45UnNjdGdWaE0raXhsSnRNQTIzUjhCNnl5c0FzdEJPZ0ZYSUtLQ01JZ1RvTXFORXUyZllNSDd6dGM3MzJkUUtrQ2oxeXRBWnRZMEt4OHBJcjhHR0orQVQzVisySGlyaGwrK2ZCbVh5Mld6NzN3K2IxN1A4cCtmbjgvdFV3R1ZsZVZrVHlVYjY4RGtmYXlXWTR6eE5SaWhVNEVwTEpQWlZySyt1N0o0L21nZktxZUxXOVgyUkVXbEl0TDFkaXluYkREYjMralhnWWpRcW4wcnJ4V2MrTmtJTFA3Rjd4SWJNdng3dlY1M3g0MHhubGJXSkYxMlpTYWcvTjBwVzZ0K1p6bU9NekhqYWpLd0Rmb25kNzh6WVRkZnExOHVwOTd6cjJxOHYzSWlvQnByUnRCbDBFWjlvZzVXQlJHT2RPSGpJalhGN1VvdEZiZ09Xblh6SUp5ell2akc1SVlnc21NT3hIa3o4T3NNU3JWTldlcTVUOERhT2NiRXYxT2Q1cmJzOWFPN1l2TWV0NjNFa0YrK2ZNRXhxK01SbDQvTDViTFpOLytleitmblo2S2F6dU1xWFNRVk81c3BKWGZsSEFJemVzL3hKc2Vja1JKaURNb2c5ZDZWZlJycVhNcjZLcFZWMjdqUndKYWNHb3ZPQU0xek1kUU1ud0sxQXViSzYza2RDQ2h2STFDN2cwejluZi9EK1h6ZTJWajhIN0d4NFA5ZHVRbHNZQ3JxeU44WHFHM0htLzEwT2ozancvbitjcmxzdHVNK2pQbW14VDJkVHVQejgzUHp0MnBuMVhzRUhYL2JuUGFWcVZtaDB4d090MG82WExMQUhlUFVVMjAzd0hmY3JzcEN3bVYzVHJ5QjVzME1zZWVnOTd4L0J3ekNqQmxiQitwUkFQbGEwQlZRdVQ2VjZRSGRCbGozZDBLRzE0N2IrRHF4UWVVeW1ETzQzVzRkUWFyK1RJandtQWQwejgvaDY1dmYwL3lMdjNQYjVYTHBydS95ZERvOXM3RVQwSStQajZkS0s5VlVFSWVLV1FXUEFPcko4TEtkNHZFK3Q5MVkzZTdVRmxXYXRnMlZ3Sm5iK0hQbXR2bS9zZks1OS9PYVdGM3gvZVAxVVBIdkE1RERZRHBZWGZiMGRydjFWMkRrQmt4dHcvdEVXVlZsWFdkQzlwRllzNS9qZmg5ZFMvMTZ2VzdzNmxURytUZnFzeFNKSHhrWFhxL1hkcjFldTRMc2ZENlAzdnNUM043N0RrTCt6UG01alNkS0w0elIzQXhRZDZySGtMa1lsU293c3JxN3puenU2d1N3ZHNNSk9YbUE1ZkJjanh0Z01HQllIbHI1em9raHRzTUNUZ1hMUU9XNFhDNmRFeUVNcHJMOG1BUXpYUmdkdWl4Mnlaem9yeGtZc0RuM2hCMVZlTUxHc1hzVnRnbDJwVzhTM3N2azB2dzdSNGhOYUh2djRjQUNsNUhGendJSDBLYzZ6dTRYakRQUi9qcEFWeFd6TzFYazJERGIzdlRjeGVHVTFpV1pIa21JRFd6aVdLdmlyQ0o0RHJhdnM2SUovR0c2Y1RxV2RYRHkrZkFyUURWVmtMcWtWakFvWklJVGRtbUlxWHdxYTk1TjMrTUdZb1pRZFJWTk81M1kxeFJraE8xNnZZN2V1NTA3Q2E5bEpuYkdweE9lbVFoU3cvQVFzbW1wNXpVOUJpVThHNnd2WDc2TTYvVTZQajQrZG8wQno0Q3BnaWtuVFVlRHF3bEtCbWczdTRPVmpyWjFBK3JBY2dhZWpXcTZlSkN2Q1lGRE9OU3dPZ0hYNEVRUnc4bHhiekRPZEVLNmdaM0hrMWIrOGcybzFKRnRLWHl2L2ZFZFRYdVdqV1hkQVppQnA2QURlRHJDRmlpbTdCNlpGbmVlSTdHdm0vUE1rVURYNjdXN3hJOGIwRDcvdjhkQTlxZk41b2FDZjc0V1pqSDBtZjFjbWZZMVkwSlVGbVZyVFd1OHV6a05jTHRFajd1NUZYQlRrZkM2R09BNXE4WU14TzhLVnZGNnNBVkdkY3JVYnNLT0RjUUtrTE1PTWRtbHh1bTY0MllyUG0yNkFsaFpXMVlCMVIrcnJHc3dFOFRhWUFXZVVNeGRmK1dqd1N2WjJFZjN5dE95Zm41K1BwVlBBYXFPbjQzTXROQnF2bWpqeGJqTTRsWmpaWTRncU5NSTVrdGFXL3NZS053Uys5bEZRekdpaG1NQ0tQYTcrWjBWNkViMEdSbW9idHBYOEpsald1NUZNTE41amE2aEc5a3dRZ1pxZjUrMU5INVV4emtGUmVDZFdoSjhYZGxHVWt4TzdIUmxZUm00bVZPNDNXN3RlcjEyVFBKRXcvcm1FTjNMNVNLSElXWmc5bXorcFVvS09ZcTViSlRKZFgyZ21lMVVjeE1aUUZhRVFJbEhjdDMyTStZMUJ6R2tHdXpmaXlBTjl6K3VncGxaMXN5bUNyRENZWWtHeERUcEk5UnpCeTBySHllRFVDMW5XYWVVYUQ5bjR4a055WU1CRFp0elozQisrZkpsWTIxWEZET2NBUkpsYWJPeWlTM3VDcExJOWpyWmpDRGthVnZjQ0Nqd29nbktTaFdkelhaV2xaTXZWVGdEOExwcWxDTHJxZ2JjQitxWXdyZ0tZcFQwY2NDcWJLeUNWYWxrRWFibi9GeW5vZ0NyUEtmcWY1MXhKN3NHQjJaWGNabXhvU096dGp4MzAwRFppN2EwLzJBSVIwVWxCYWc5U3VEdzZLY0F6bGFCN3ZIWnZXcGpLOTBkeXJxNmJLeURVWlFiUjBCMDViaUxRa0hJY1NVbWdJSytTd3VxZ0hDbm9pbzJSUVUxeWorQm5CeTlwcGhWS0xHeUM3WnpGSzFweFdLK0U4SWhWQ1dMTi91THRuVVU0YXlvWUxvYUFOejhGZHRhU3ZZNHBWMEJFVzJsczYxY3pxbGxCS3BUeUtnTUFocloxY2RjMVJST3RQbXZXTmtkY0taN1pLeGFXamlQTEpNcHA3T1pLeEErcnFHL29KTGp4ZjBwbkpscUxvRFpvM2d5VTBtS0d5czJ0YUtlY2ovZDFDK3JKU3BsQnFsVHlBcWdSK0Q4S2pLbG1STDJndFVjQWRDdHNMK2lqQ05UMW9xcXFrSDJPSEViRzVzREZuVWc1QWEreUxvdTJWVTFwdGoxUzJaUXF2MU9SWk45SVd6UmZnYVJCeEtvQkU4VVd5cWxKRnRySWMwQXhOalNqZWQ5OUNUWS9YRGZTekN6NU0wSVpvVkVzV25QRk5Uc2w4b29WQzFUemJHZ3FGWk5EU2dWd0tLKzFzR0RNS3F4WkNXR1ZNRHlzaUVyMWpWU1FKVVl3ajVpSE9sVGhkSHQ0NFNRZzlDTitubDhEOTBOTUlnQWRncjQ2SnFSaVI5STh2UmRGdmJyMTdtL3l4VU1Lak5MTWlWVUFEd3UyQ1dHaGhpK0Y1NVRXTTlNOWNvZ3ptczFkbk00dU9GL0xBRVlXZGNxbk03eUZteXEzSWZ3bU9ST2Q3WTFpRld0T2pvWThUbzQxbVRWNUl5c2dGRnVSenNiV0ZHYk5JSUpDRHYxZE9vNGxaRzdqV0J3UkZ0VlRLdVd5ZUNCeUpLT2FuOG9aM2VwOVhkZE5sMHREdWF5d0x6OWNYUFllREFBMFNwa0JPOXNiVmNUT1ZXbGRQdjR1eXpFa3p4SHRqdm9uSG9Ta0ZFV05vbzFkOERoY1FwdXRkMnBwTm9uNEJ6b0FpSjFoQkZRZzBkVnRkYkdISERRV3VzaG1ORVF1a0xNMlFPMUcyWThiZ1RYcUZoY0JKajdFalBnY1B0czhVUzhxUHBQQi9kWHpuT2g1WjQzOHR6SDVlYzZRZ3JPS3JSUmZLbXlzQm1VREIrUGhZYWJNbFZQRVIrR0NTSVRUenI3YW0ydEFySDNiZ2NFelBKbStjcjVqSjRObkhORkRWckZYY0k1TGU5azVKbncrYmVkYlYrRmZSelpJSGFPT2FPc0xZMC83VUdzNThEanJHd0tNSU1GSUd6T0VXMS9qR3NkQXRDTjZoRUFJNGhCZTlZWGVSUk9CU1ZQQVZQQXF2SU01Yng1aFZLV0FNUDZ6QlJ5M2llc2NyaWRWZEZCaW5CeFhEbkcyR1JZMlhiQ3ZwMWxodkd0TzlCeHU1aDkwOFhRdTQybG5TQXJNRmRpek1pbTh1d1JDeFBHbm5PUzhsd3BuYk9pRHFUQWpzclJOL1Bjb0FTY0NiYUFDcVZNNDB5bG5qalRCcytid1dsQUcyMy9VS2Jka2l3S1dJUVBHeldhY3pwb1NseFBFajgyMmNOV2twUzdGeXpzRHJxcGZncEczamFodzJ2Z2JhU1FBeHVMV1pZdDdKenlOZThKb1pwTkFjdkRGT2R3MHdxWVQ5QUsxclp6L0RkYlNsTFBwMHJ5SXhnUUpsSzlBWmxFcTdJT1hwb2hnOVBJaHJDbmc4OEpzT3hpVjRaV0FZZmc0c2lreC84a3kyWjlsODYydXF3cmZzY0lIOCt1Z1RtVkd5aWRkZVZZVWdFTW40R1p6ZzE0RXdJc2g5c3gyY0tLaVdYUmV1T0U1Z3pHT1FnZGxSS1ZWZGxldnFiMjc5WHEwUW5zdHMyVkRhQk8wY29lenNydVd0SEFwdTZzS0c0SUJoTjBhR1Uya0xyTUtHUlROM0htYkNEd0tWMTR6dmtNRURHNFFmWlZzcFZsYU5VMm1oYzVURVozTjFoL3pxVGhldUxwVzA1WldUR1ZqYjNkYm5ObXhLWkJuTjhKcWlkYVZMS0FPeUFSTkxTK01CNTRaMitWYXFvTUxLcm9WQmxuZ2VmblRQQWNvSE5XQ1N2bGZBOENJMEhFbUJOQm5CbFh5TXJ6VTdBN1dWbTk0UFBxUTJnbXFLeCtXREdzbnZpbG1jU09CSnFPSzFuWXlBSXp1QXllc3EzVWRTSzNLZldjWUtEOTVIbWZZT1UzcXNlcjJDdFlFVUErRnBmcWROdmdQQlpVQmhEckdPTlJWbFFzaDhyTGNhVUN5a0hHME9PVXdUbExCcnNoNXNvRU1HZXppMUU0SFJWdDFpY3A1d1pFRlhkaWJDa0c4WTh2WDc1c2JPNEUwaW9tOXoraGpTaU9meTNEaHBYSXRwVmhFK1VHUWR2b1dqdENobXJHSGY0WUF6S2dCTm5HdHVKeEZDZUdkaFVBZlFMTEs4a0JZQVA2Z3ZGSlphak1HM1hreWN5OEt1QzBxNEV5eW13dHdkeGR2Mk0wbUlCdEswTEtuZjY0MGowMEF1cTRnVWtkV0dsaHMyMnFKYzZkWkNzTDE5b3hubFRKRzRTWVZSSUdwRDhUUEZCdU02T0VsYlMxcGxkaWQ0bUdBeU42Wkl1cGJDNWJYSk45ZmRwYlRoU3hMVWFJOElHMVhJWUJ4VzNUanM2S1Fvc0tjeGZ4Y1FtZG53UkdNMTBHbkZjQ3kyWFl1bkxNeUFrZGdrNG1lUGljenNMeWd0aGNCdXQ2Z29PcVM3WVZGWEFETGphb3NCNnM2b2ZjWldBWlNJUllxU1VraXpZd3R0WWFiM3ZVT1E5dzJIUnhJSWc4V3dSVmVFNjh4aTRVdEwzelJwaHhwbHp3dVpyY3FZQ3ExSTNqUEk1ZG5KSXlnRW9oTWJQcVZKU3pyd3p4QkpUczV6TitSZVVTZ3hpa1BRVkYzSlZCZU5ReGJIRU5yRU1OdkVkRlpWVjlsSDkrT1JHRXNOWlFweVROYzRDM0FHN1hGNG5nenErRHJPMnpidWFhT1hnZGFGY2RrRW90b1NGQlZYMnFKMEM4T1daZUc0S0dscGdoQTBYZlRPUENxVjJxcXdRMjZRV2ZGMlBNTGhJMncxbFZBYTJhUHNZZDB6YTI1TVFSd2djWk42dVFEQ2krWnhpRDRYRU0ya1p4T1Q0MUZuWm5hUmxjcFpvdXpsUnFxZGJRVldvcFFvU0I1OFJWNTBsQk5ySGkvQXdYUzVMcndEVmxwWTNGYzNCeWlZR2M1MlRyaXN0NmtPWGR3SW5BUXRKcHA1UWNoeWFxdVlPVjdTdStmeFZNYVYzZGMwUkUyUzZtVVkwZ0x0MnBNY1lxcktJUTl3MmwxZ3BRVU10UVljbW1idDVEVE54ZGhuVUNqUXF0Yks5U1VTenZyQzBtbWhoRTFlMkZTMitveHlweS9aQVN1dGttdGp4M3ZjQkMyNFBYNjVuYnFrQkNSaGZqUzlrSVlQbmVlOGNNYWdWT2hJLzNUMWZBbWR0QVdac0Nzd1RKQ2tRVk5hMHFXS1NLUE9wSEFVaEQ5RHJiVmN5b1lrd3FodmgxN3ZZQWF5WExReUtHWWR4bFVERnA0OTRyQlhSallnTzE3RERZZXROSVVqL2V6cDZTMGxubHBFd3NXbUpNa093c0tYZVpLRUFqSUhuMEVRSklTYVJCY082VU1JTno3cC9iRWpqbnc0ZnQreG1EdmtzeFg0RzJySXJpczdxYWVLd0FGTVAyT2k3bjRjcml1Wnd0cFNVd3BmTHhTbk9SU3JJcXVzYzVaRmFYeXNxUldqaVoyRHlBV0VJTDM1dFZTb1FFbEZBQ2pPZUdHU0U3QUhFUWdkby9MU3ZDT2dHQnZreHNtRGJ2bFMzRnA1dmhhQjJUQUdxUktyS0tNcmhMVnBhR3pFVmpaME9ReERoYUNUQStReVJSMWQxNWFRenJKbnRMM1JpYnNpcGpHNmpsZ0w0eXFiUzBzTllnMWU4NHZoYkJWckVsSzY0Q1VjV1lYRGZLeGhwSXV4aVZKWlV4c2JNeS91UkJLVE5SUTRrUTNMZFJZTFMwckpqUlBsVFBxWTZnZEpzRURjK2FRWEFuK0hnc05VQ2JSdUYwT2owenduQTdiV0RrYmhPNUVuczAwcWVRaFMxbGFCTWw1TS9jQWF4c0xGOHJLeXFsK1RmN0VMTEVHdS9peGlpbWRDdm8wVGpmcGpLd2FnZ2VuNGVoNXY3TG9rTEtiTHV5dkhoY1pHOGRoR3JFRHg3SGc5M1pwcEpGN3FCcU8zaVZ2ZVhFRFFOSW56ZW9lOFlxNmVQYVpCWjJKdmlNM1cyVUFHb3Rla1JDQUdxNEVrRjFYM0RPblIxMXlSc0JMMXRSYTBQVmNaaU5GWFoyYzM0RnNrdm9tSW5RUTZsenBKb1piSnhrNDNOd0tKRkJxdUpTc3JCeUh5ZHhLT25UeFFBU0JtUzNqK0pNbnNIU2xhM0VjNks5VldvSlZuOXpmandPTTdocVlBQXFKUXdFMmEzbkE0OEoyUUdlZ1JrcFpOaXZTWSt5czNFa0tkNG9KSXdzdklIbDNjV2dMdDVrNE5INk9tdExXZHB1ck9rd0VNdXBZYzdlTXREUmhPY0kydWk1SmhWSXpYekx5dG8vR0FQdVpveW84d2tvZHVWZ0pnbEN0N09oR2JnSUQ0TXE0c2krNjN6VVMxRnVGRlhGbHF5YWoyZW1IbExNY0JxWXUwRk11UjI4QmJCN2xPeFJNU2lDUVhGaENLdXdraForcFlEaUdTZ2JzS0tWOE1pU1JzdUhTSVdNOXJrbFJpSWxaWnVxWGpzUUs4b29ZSk1ncTNKS1dWa2hIYmhzVnhGVXp0aE9XUGtZaWpjYng1NElLc1NkVCt1THIzY3JHS3lvWWdGaUdSOWlCazRrZmxvVVgrSklsUVJRcWFibXBnbmhxdHBRcGI2UlZRMVdINURuclM0aEVvR1pxYWVyUTJkaEZiejhYZVB4U2htRGJvNzBlSVNqb29yTzJ2SzhTSlhJNFNVbUVVNHpXS0R6VUR0V1RZdzd4WGxiU1RFajRGUmc3ektuS29HUkFMdjBHczlUZ2MxQnBDeXdHWlJRQXRxVnoyeHJCY0FNekVwZlp3RlNhMkc1VzBRQkZqU01hcFdBRUZhM0hjR043Q3hEekVDeUlrSjk3cXdycVdOVFdWbzg3NlBQc2pQa2oyd3Zncm9NNWxMWktNRVRLVnFsL0N2bldWRmlGYS9TekpVUXdrb1pzcjY3WTZ2bFNSVjMvMnRtTlRPWTN2bmF4WXdNdW9QS3FkelIxdzdJcUh5bWxQeGFBVGhmVTdLbzJaWFlqNEFZSkhMK2tOZEt3UlFZRVNUUmE1ZnNVWi9yVkMxVE1UeVdWeVlvcU50dXphSHNNeXYydHZvYXJ4ZGZxd1lnVTFheEZvL2NucWwxRkdzcUsrdUFST1Y4Qlg0R1U4V2NaVEFUaTJxN1FjeWkwTzBWK0doV0JNTlJVa244SDFTc1dWRTVCeTNHaTBFQ3FVZUpvQmZBdERhNGFta2RYRzM3QUdQNUdnZWI4NHA3VWF6cG9LUnpkRnplUThIa29IR3hwckt5L0hwbTV0MTJwNDdKNnhUWURFejd1SU5FWFN1eFlYdkZza1lBYyt5U3hIOXNmNWZ0S3pVNklid1ZCY1VHZzVlNUZNQ0VYU0VyWlIwd0dheVYxOXdvTTlndVBqVHFKZFZUcVI0dUU0bkpuTGxkV1ZrRUNDWkxkMlZMRit4dGFtZXg3SXBpcmlTRFVwdnJwbjlscndHTUNIeXBwTUgrcHM2TElMc3VGR1VqMVhFT1hpcWJxU0hQVUtuQ2xwV1Y2OGtxdFVSVk5EWTRUTmFvY3lrb1llVFU1bmdHRVFhL1MxRG5uRTRBZVhNY0tqSFBBbUZWakNCRU5hZXlMVk5IZnIzcHg4eFVzdEo5NGhJcGZINEhLRS9lRGFBcks2bFN5VlZGYmR0MWd4VElWazNwcHBWbEZYaTRwRWhWQlRPYnF1b2hVODVNTFhuMWlhaHZVa0hKalNDTWMwMXRMRnZlVlZCeDBEb2RNNmpmdEN1N0RPdEl6WXhyYzBxcDFKR1AyYXlZRnoyR2I2SHZNck84Y25HdFY2R2ptM3VJbVNmRDJHcFdLNnVvd2JaR014RktRQ28xcE9NdGNNWEZwUnN0K2hYR29Bb21GM3NTVEJHZ1RnbGJCS1d3c1EzdFpxYVlTcDBaMUNpbVJEV0ZjQ0pVUFlKMDBCSTVGa0tZTm9pZnVReG1OODhTV1ZYV0xNYVVxcXFnQzBCbVFKUjZzazN1OU5DZjZqWUxYeEFmcXNZRWdWTEFoUlkyQXRndGZsWk5GbUZ5aHhkckxrQWRXbGs0RDg4TTJpeEh5ZXBJZGhNSHJHL2lSMVpHdHEwTUdwYkRiUlBZT1hlU1kxTTZOeTRac3R2R1NrdEsrWGJGUEFUajJEMzcxc2FQRXNBTVhoWHJzWjBrbS9YU3RraGhNeUJmc2E2dVhGWmUyVkNlK1lNcjErR0tnd3JReU5ZcTFWUnJCK0VpekFvdzZOc2ROS2N5VkVrWWVNNzN5czZxNGtBSHA2QmlGa2xUa0lyVkM1b1lWN3V6d09HQ3o0VUowU3RxMmxXTUp5NHd0YitSZXRMNnRaRmljbkptQnc1VWpDdlhYTVpWSlgyTVFrYmYrWE41RVdkNzhWejgvSkVzTVpUQmlLTnpzbTFpbkxSVVE3NEg0TmlkYXFJNjhqNXNBRmd4Y1J2ZUM3aWVMSlhmUVl4alpaMkNzaVdGZXdaWEptQklsWjF0ZHRyWDRoU3VhdGVLc28vUlpPdE9LVzJubXExb1R6ZUs2ZFJXQVd1Mk5SVmI0aHEwU1htMUd2dHVnSHJicjVJWHFtU2t0ZzVDdURFMk1TbFB3c1k1a05FMldwM0FxaVpiV1ZMQXhpQkYrMmlCWmJ1Tmo2TUI2cnNNTEM3Rnlhc2FZRHlvN0trb1B5RXR3M3BFTVhmUHZ4QUppMmpBUVFnanJ6MHJMSVpTV1psSW9OaHdkNXhLNEFSOW1ZTmpXQWFMcm51SW1KZUJWTjl6Qk9ST2JWdmJyK21UVGZGU0VKTFNSbkhvN2hFSm9JaThNRnFqeG12Z21GNVVSWno0ekxGZ1paOEN0dTJYN2dnVmNjS205Z1Z4SXNPSHF4WGdOTUtuRldaWW5mMWRCbk9oYXlYcTE3UXdGbFdXMDllTkt5VkpGbVhxYU9OR0E1YUNlZ01iSjNVVWtHWTFpYzNuS1dnanE4cWZWWUdRRzFnUnQ2cnM2MmE2SGlxcVVPcWRlc0s1Tm1YNG5Hb2ZKb2lFMWQwZEY5bFZWa3ZUMS9rRUVhYUNvWU93RnBjVmNvTE0rNzY2OVB4QzlyV3FrdEgwc1dVWWxkMFZDcHVCWi9zdFZSY0dneTlXWDIrVTFRdGhpOVN6QXFTeHpac3krT2lGekJZbnlTR1Y2R2t1NDRyRDhCQ09aQlYzQnZENStBS1JITndNRXNCNkV6SG5KcGtUQWVpVWxFR2tjRUNlQjZHRFpUcDVZRUpUbHZkcmtueFlqVGxsTWtmTnRYd0RqTTd1VmpLNUpYVVVuNDNycnFwSzJqeXRheEhXME01RzhEQzhydEhNWXM3S1NnZHVWUU1HVFlGcUZ2VlM2cmtEM3NESjQ2YWZkWUZ3b3ExMUFPS0NCTGh2d29VZ2M4SUdBTnljUjZrblpyZEpQZHN1eG55amZkM0ZvdlRsUk1kRWR0T2w1Q01WNUVIc1hRQmlzN1RPd3ZJRFphR2oyVm5wYmg3Y3BLNjNWd1lFTUx3cWJqenlsNjk5c2F3RkZrRjF5cWpVVTMxSGZDNnNXMVpGVkZ1WFZYVmd6OWtlRWF3MHlzMWxXZm0rYXpRQVFTV0EraEtZVmZzWmpQbmNBY1VCOW9JYXl5L1VaWFJOY2tER2ppNzdHc1didkJvNnRQcldQcU95VmtCVXErSU5lcXB6TmRZcy91MGlmaDVxbXBxSVcrMzNKVlNVY3dZNzBLTDRVOWxZZFU2bGp0U2xzN2xtZmk5ZzNZemVRZlZrYUdGYVYzT0RDbmFEMk44d3NFREZrbEUzUnpNM1pnaGRZa1dIc3N6cTcwRkllY25La1ZrdDhlek16UnE5YmtHdUtvalJMQlZTb2QzWTF5UHFLZ1lXN0pSUVRQVnl5NXhJWUxqT2d4Z1Q1MlJLSlVZMWRPcklpUmQ0ZnV0UXgvQTVBY1NtRWp6MHZGV3JrTHp2YldBdTlIT1diR2d4RmsxVk5UcG5CS2s2VGd3aXNJL0hjeFlYUDF1QVdPNzJVTEZsQlRxK2FTdTJWVFVzNmhyeE0yQ0YraEVvcjFWSUE5Wm1GVWFhYjFsU1NnWnNWczRzeHpIbFZMb0pIcjlINERoT05Ua0kxWEMwL3dpWTJOb1dBRzVSbG5IRm5xNm9MY2NwUWRkTXVKL08xN0pWQTVPSExpMEJxQ3p0cTdZMSsrdWNDZDk4cUxJOE1JSEJWL2NLanhRVG1lM2hGQlMzTXlDcW5Ec3V5bTJvODBIanZGRlR0clVSbU5hR0pzbVZhaEltalRzVVhLdFFaVEFWczdNdnY4LytmelVyWkFYY0xKNk00a29lNlhQMGI2U21XV05EenlVcFE4YmwrTHRXeDR0dXFaMzZjUllWM3l1VnhQTnd2SWlxaVFDU211N3NyZ1R6UjZua3locENhclh3RnkxdkdkNWlQMmNZMDZsRnI1TmpoaGcxWTYrTkIyOGZ0Yks4M3M4cmY3a0xKYkt3REZQYkxnMjVhMEFkWkpFaXFyNXBoaXhLTURsUlV0Y3NzcTFocmlMcUdvSCt6ZU5nVm05T2VtanNFVFY4SmRGME5IbmtJRnhXWTFPQjRZcnA3cnRXSjdOZ0FBQVBYa2xFUVZRM29OczVucGx5VmY4dTJGb0x1MUpySHZlYVpXUWpxQWtzaHRGYTJnenNTRzNacGtidmczSGFmRjlzbFBQbGxkakZsSzgwR3lzbThNcjRNUGhuZU5XRU5QR2pBSXBtaWxUUEFUZFRSVFhsQ0JZSFlBUXVQd0EzNnhJcFd0R040cTNZMk1oaUdzVXB1U1NubEVKUkQ4UG9yQzdDRllWdytGNTFxVGhnYWJ4c1R4V3pDR1kwWlNzYjNsZnFBeTBPUE5qTnk4eGlRUUtzSFlGUTJIQlpWdlZiQnVxM20xb1dLYWpxYW9uc002dVpVcjZDalhXTlowbDVFM2gzalVSbWE2a1AzTUpJaXkxTG0ra2FoUXE0MU4yaVpqYTVzanRsTFlOWkhackg2cVVHbTR2TWJEcDZSdzJDRm12dXlGa3JCY0N5TXRGcUJhRUNtc0hvSzlCWjJMQS9sSmNScVNhRHFuYVdiclpkR2F6M0RMZ0l2QmxuNHdvR3p0YnlKR3FzbHd4a2hoSHJUalRZRlhDdE9vS1M4dUxkb2ZWZEFiT3lsR1U2bmxZcFhXWnRzNG5YQnE2V3hKaXRNTm9rSFVKbmJuSnBsUW0rYUdwWTJhNUdNVjJRRDFoUnViQlBGS2R1bWY1T0hrTEh6MEY5bHVFNWtqQmpSYTBuRkU1Q1VHcUh3MzJNbWpaNnhrZ0lOVm5TbloxVlpTdEsycUtsUmFMbFFnSzd1VHE3SkZYSndNKzNTT0VLeWhaTkkrdEowSTVxTVl5OWsycUpEN2RWV2RxS1hhMENLTlIwQ2NqZytCMklZdTJmY0JaSlprTUZnTTExcjBYOTJ3aWxnaEZHZ3pWbmV4bHFCN3hMOW1TMjlTaVlVVlkyblhPWmpOQlJzeURzUVBSV1c1aHJaNFhjZEM0SFZXUmJqZ0pyNHNGb2ZLNVN6alE3cmhJMVVlYmRQZEViajZzcUl2VFpRWjV2YTA4ckFCc0FXMFV4ZVd5dEFrN0EyS0o5WnB4ekNpb0IyNFhGdFlBZVhZeHI2YW5TcWhMZ3BwRXFXYkd3THVuVGdyVitJaldsTDI5bGphQWw0RVFNR3NFcnA0YXBlWmlxdXdSWExYQXFPQ2VydTMybW15ZGM2b1dUU1dwRkFHZHplVEI4UlRIVk1FdGxNOTBDYmJRQ1loUGpxM2VnWXIxRkdkWUlRaml1REdaNXpaL0F6b2JLR095THh0aTZjNFJ3dHYyYW55V2xMSUNubExoeEpSWHQ2QTVlYkRCV0ZOT05ieFdaMmQwMm1udTRTOVlFQ3BlcHBWMXpTV1JCV3hIWXpWSXYxQ1hTb3V3cXFYM2pCQkJEWmRZUWJwVFFXNFpRbFM4cjVrSDRzdVNSbWcyKyszSk4xMHgxUGFBbUVrbXRZbEVkZUdwSkVNNmtPdUNxQ1IyMm9TdWpqNUlWMkhkVDB6ajVwckxLVGpYRkFQamRRbHlxN3hJQnhBUVA1eU1jekc0VnhBS3cwbjZpbFoyUUJjZTJwTHVsa3V4eHFub0l6RmZncXlxamlsOVMxVk53QnJGbWV5ZW9wczh5T2paVXliWmRmUzhDdWFUSUp1bXpzNXRPRGFOdExwRkRRL1BjSkd3ZUxobWVMMW5CMEtxaVVEU2NzaVVWRDg5RGkzSHRyS3RTVUx3M1JMaXlnWkQrN3NGOEpUT2JnWXNyR3ZETlVGUkdsMWl5MExsMVlrVWMyYUpZTW9nOTIwSThxVzZZRENnMU1xazBKSEpGS1hrYmdiUnJlSStxcFlOT1pIclZjRFViYTdwanNwaFNKTnRLNnVwZ1JOQVZvT1MwbXVnQmVONGJJWmdIaHVQWi9zMUVOYVg2S3NWcitZTnJoMU5iN2lwUjBQRTV6Yk5SZWdDYnJIUlV3NllmMDdkTEJKbDFmOEtCOWFzMlYxbk5xQXNsNjJMQkJoZWh3YWxlcmtIbUIxSkZJRVpLU0V1c2RsNUpRajFuSmxIWFNDRjM0MmdKOUNZR3JYZWxrbkpJWHFWUDhzRCtxdHBsQ1IzWEgycWZLcTB5Z01wK0tuVmtLeE5sWjhtMllrSWxWTWlDblhVd2w3cXpuQktTdlF6M20zUHQ2b1FiWE81YjVGaXhDaC9mSHhVUVcvQUVjSzZ6Q05xS1FuTDlzeXdxbUt1d3ZxU1l6VC9hUFZOTnBWeWh2UlcyMWFxY2lDc2pkV3ZCd0lMVXZoNVZ5Q3piV29DMXBKako2ODBDV3NsK3VkS0I2VDVSd0cxbWxvaG5scGJnNDdpejVVOWhhMEZHdG1STEZZQnRPOTl5OTdBcDB6K1pEVEFvZzZrU0xac01IZy9JRmtrZ3A2Q3B2VTJVMGNZVlNkbm1randCZE9tWGJ4VFdOV3p1SWJpcE1pb1Z4RWNrWkVvYWhTT2l5Mk0zSzBqY0MxTGhWRHdhcUcwWnZrY1dxQ25yRzRHSXh5a3JxbGJXZHc2TFF5QmFaUjhIbUxSSWhRV3NIc3dENDJaWFZMTmtmOWwrRmxXMEhWUTJsd0ZzQy9aMUZkemxRUjBLYVBmbytGZGZ1Ky9kd1ZSSUN1MUNHUjdBRUlpQWhjK0FaVUYwa09CYVB4bVVxZzRpNjR2UW5VNG5GRFlKOU56KzFmVlh2ZUg5cW1yK2tQSUx4OG9LY1JWL0JGYnhiRTBKTVQwa1NENHc2TC9sTlk4b2NzcWFnVmRVM0EzTWp4aHhjR3VxenNQSDRpcnBhb3cxcTZPeXJWanZwOU5wYzU5RTkxTGxkYm9ZVnpKV2RpbVdmQVcyU05FS2NEYVgyRm1CTExBL3VLeGxtaGg2MTNJczFVUlFBcGJLZnR0d3hMMDJxNk9ueDVwUXhTYlBvakFnK3Y1aEFuTjZMSFZSRFhJc3ZLdFJqaVMwcUpVeVpUQVhWYkFLODJFbEZKV2FRZFZvcVVDMVVudDdCVmFUUXVkTTZTdXFleGpRSk40KzBpY2F4di91dGJLdjgzRVRiVDhIOGdqY09LeE9KbWJVYTZPT1ZYaHQzZEZZNnJIdjlYb056RkxjZUVBMW84K3BLbTBMQUhQSFoycllLakZxMGhmWkZpeHNxSEpnRDNlRDVuK1Uwa2IxbUZqWGtuMmx2TVNTT3NORS9DZElBS0YwU3l0cTZ1ck9IVU41Z3dnNEdab3NnYm1nZ001dWNyYTJxclMySWcxY2JpQkJjeFl6Z3pVRE5MQ3ZMOEdiWlhOcDZPUnkzTG1TK0trODN6UklBSzZBMWlvS2EySTlOYXBJdWlVRmRmQzk3NjZQRlpVdHFVcjZLYldrK3paVTFhL1pySVhFenRyalRPZno3aHdLemlDZVhJYXJhSHRiWklNeisycEdnYXpDbXc0cVdBRnZFZGhvZFlwMFhxMHBWN0cxWVdZV2JPNHFoR3E0MitaOEJZdHJMV3ZsdU5QcFpBZWFGRlMxdnViUGdiZ3hzcWNwbkFhc3pCb3ZLYUZvRFE4Qkd0amZVT2w0TkFHMm5tUVYwNGZlSmd1bXZYMmZzclFFV1pnaEwwSm5WZFlrbjNET1pJZVJOODZScVBXQ21zdkdWcUVNUm53eFFBeHdTOEVNWW8zSXptWTIrQkNjTHA0TUtpdXl1aEltYW1sYlpGY05vTmw3dHArUkhkMThaalFJUkt5WGRGUmhOOTgvaHlLcXdYV05vN08xd2lhWG9ITjEwOFJFWlpXRXE2Z3JuSWZqemVnOGpkUmYxWEVMNGtrWGE1YkJqS3hvS2FsakJqZUhsVnhRNEdheWNwVzRsRE9BS3RuVHhIQXRPZnpPdFp3SEFNN3NxVlhrVjZ5dTZrYXAxbkhrWEtxV0YvNFhIcWplbk5LcUJqcFIzbDFjaDNFamcxK0VzZ2RRaHNkRzBCNEZNOXNXQVZXcHVBeWl3VFBsZVp4dDlWeVpWUzJxWGZSZVdxVEFpbHByOUFwb1dUanh5bWl0N053VjRKVHJpWnlPQTlCMGs3SEZmVUxvdXJtS1lIVm5SUXZxR0w1SE1IZHFGY1IycVdwbWNLNmVUd3gyZGlwV3J2aURpbHIrZktXcTNPV1JXZEhLd0E0ZXU4d2pjaGJlUnpGaWxxampaTjN1ZkNwZmtKMC9zY1ZwbllrNkwwUEk3N2x4ZFdDWjg3V2lXbTdCL0FHcXVRU251akdLc0I4Q0ptaUpxOHExcEtJVld5cU9pVEs2NnIxOEJOOHI3NC9BRTcxZmRDM3lQUzJNeGRPcG5FMXRsVnhEOUptVk9vZ2dOK3I0UGpBWFZGUGEzRWc1alZKR0ZWVUdOb2xIMjBHVnJVQjdCT3lTV3E2V3FZUWRXUjkycGNGTVlNd2NrYlNnQ0tDcUQ2N0RpaVd1MWc4TVFDOUJ5ZmNGcVcxTCtqTDcxNHFOQ3V6bm9TeHQwZGEyZ3RXTjFHOEYwQkswTk4wbnVpbWVsVUY5ZElkQWZqTzQ0VVQzQ2pRTG9VZUxISkZUTzNnbXBSdUlJT3Z3QlFDYnFOZW8zcXRaOWlGNnhWSzEzR1JsbzR6cWltcStDR2RUaVIxdVJZOG9xZ0UwMmhaQmE3OWtaWFBNcXV4UkhLbGEyc2FaV040bVJxWlVqMHZMQ0toa2pLbnFPUUhOdVNaVkpvS3ZBcVMxd3BFcXV2V0RDMUIyeXB3ckNQc1JNRVBWVE9ETUxKTUR2NnFlS1h3aTJKWVY1U3E0cUt5dmdHc0hDTGl1ajJqUjU5VjhnTXFTSjJGSlpSWEVIVlJIajNzRlByY3Q2T3BxbFcxR3BhdFFkdDBHdndmTTZuNjNJbnNHVkZoSkdhQnFncXFJVjZJc1hsbFpneVNQcTRSM2JudDN3aTVjditjTjJ5cVFMVzFUOTVLWVZzV1d0S2s0Y0I5VzUzV1FRZmxRWVI2V2w0SGFKWmp2VkUwRDV5dnErUktnWkNzNXFkQkVQNXNEOTRjQXZRTGxTZ05hU01BdEh4ODhCdU5RNDF6ZEZzWDMwektiY3MwTUxEL2loa3BRemwwd2lUcUtMVGZiS21DbXlZSUNuSzBJYmFpZUM0Q0c5aVN5TFE3Y0lNR1F3YXU2VEtvcTYwQXBsM1dONDBMWnBjYTFDS0tLOVZReXlJRW44dzBGOEY2Q0wyaDhvM2l4R3dDN3M3RVd6Q09xbWNBcFl4WUQ0anNBelZTMHNsMnQ5OHBBN3ZyS29waENWU29uYllwZ0g2bXZTbjI0cFRCVjRzZHRWM0J0TXE1azgyeStJQUR2VUowdUFsa0NWVHhJYVBtK1VOdS9xa1Y0RjFUekhYQ0dyWElBcUl0Qkt5cHFLOTlWdEFPVnM2NE80T2JYN3BITFZDcFlIY1Jtd3ZMUjdUdllBS0JCTjU4TEdWekR1RnoraFFiV2duY1F5Q1pBaytWYnNQU291ZjkzMjYxaVpnbWZDcHdSYkF2cW1TcXJpVTJQd2hqYW9PeVlxdEllZ1ZYVmlUc215dGE2Ykd5U3BZM2d5UnJwSXlBZWFXRER4dHBzWHdLeWFsTURLTlA3WUJYTXFFc2tVc2kydUM4Rk5BUHhBS1RWZlQxbzZWek0wRTBqRisxcldjVXVIdmR5Zzd2Z29GcGxYOEhwdkhwTUNPTVJVUEh6WmtJbnNxbEZLTlgvRUlPNTJFMFN4U3pPd29iMlZtUkxXNUQxWElVMHJiZ00xQXpXZ3lDN2ZlOEc3eFVBSy90YUVCYXQ3bHVxdHlQN0Vtc2FKUU9qNUYrbXJuWmZDdVlDZkJVQVd3U2h5ZDZwTVkvdkFIRzFVcU9ZcGJJL2d5NVQwQ01LbStVTzNnRnVDODVkZ2ZEVmVndVBEZklUcklCTHNMcmNnZGgzQ0ZnRlpqYUtKNEl2M0Y4QU5FcXZ1eFIxdFZLT2dMb0NhMWp4Ym9CQWtqNnY3ai9pY0ZiQTdmNHJmUm5RRExSVmlHMTNpMHZxQlFyWVZxQmJBRFpUMFpwaUhvU3p2UXBvcEtJRlMzc0UxSGZCV2xIWGQwSDdMbkFycXZvdWdNdGxqSEJnWm5oM0Vvei9CS2pMTUw0WjJBcTAraEVKcjlqYVZVQmJ2TnpDSVVpcm9DN0FXbW1GdzRvNUFLM010QjVWeXBaTVNGZ3MwNUp5R1Z3bHdCcXNFR0FBYTJaVTFDalVleFhHc0U0cktyaWlsQnZGek9LS28zQXVBcm9FNlFGUVUzdThZcE5Yd1M1aysxVFp0NVVyd291TjRLaVVFdytrM1pXRHAxUlhITlJxWGIyMVRzMzk5NDV5WlNnM1ZuWkZOUTlDRjNYZVp5cjVEZ0JYS2l3Q01hMk14ZVREWVhnUDFGc2Y5UU5LWmMwazgxUkprM3I2RVEzckNtQlZ5TEw3NUVqWjFwSVZESG9GdGlPQUhvQjBCZFRWeWxxQnNLS0tTK0FlQlhKVkxZK0NYQVN1R3ZPL0F1cTdHdUVqRGZHS2cxb0thMXovZG1taTlJOVNVR05obDBBdGZ1bEhBYXdvWXJuU2ttTlhBVnVHRWhyRVZYdlVGK0E1Q3QyUHFOT2pEZXR5bmE0Q21lVW9sbWVYTE40QXE3QzVTajEwUTd5amdsK3Q2Q054U1JIbUk1WCtDcHdyZVlCM1FmZHFuYTRxMjFLZEJ1YzRHb1pzbjQ5Wk9PaVZpbndIcUs5V3pqdmdld2VFaDJBVTUrdnR4WjlDZDlXcWtoNDlWMThFNW9qNnZWeW4wUlN0QXlHSU81ZWRYUktkNUIwVkdWWHEyeXIzeFlwKzVVdCtDNFFKNFAxTjMzOXBRTWpSZWpqNHZiL0RjcjZyUWMzTy8wcmptdFpwZVlDQmlDSGZDZW1SYk5oYksvcE5VUGMzd2ZLeTVmMkQ3T2xMMy91UGh2ZS9vVTRUMEY4ZitWTk0ydnlvaXYwaksrS0hRZmRIcSswYm5jejRvejczLytZNkxiS3cxby81QjdlT2YxUmwvMGR1OUI5dG4vOWJ2cmYvait2MGg2dHRuMnRwL3IvNDgxOXk0L3p2NTM5MXV2enpmd0RpZno2cGhUMU1QZ0FBQUFCSlJVNUVya0pnZ2c9PSIpO2JhY2tncm91bmQtc2l6ZToxMDAlIDEwMCU7Ym9yZGVyOm5vbmU7Y3Vyc29yOnBvaW50ZXI7ZGlyZWN0aW9uOmx0cjtoZWlnaHQ6MTMwcHg7dG91Y2gtYWN0aW9uOm1hbmlwdWxhdGlvbjt3aWR0aDoxMDAlfS5jb2xvci1waWNrZXIgLmNwLWFkZC1jb2xvci1idXR0b24tY2xhc3N7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtib3JkZXI6MDtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmlubGluZTttYXJnaW46M3B4IC0zcHg7cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlfS5jb2xvci1waWNrZXIgLmNwLWFkZC1jb2xvci1idXR0b24tY2xhc3M6aG92ZXJ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX0uY29sb3ItcGlja2VyIC5jcC1hZGQtY29sb3ItYnV0dG9uLWNsYXNzOmRpc2FibGVke2NvbG9yOiM5OTk7Y3Vyc29yOm5vdC1hbGxvd2VkfS5jb2xvci1waWNrZXIgLmNwLWFkZC1jb2xvci1idXR0b24tY2xhc3M6ZGlzYWJsZWQ6aG92ZXJ7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LmNvbG9yLXBpY2tlciAuY3AtcmVtb3ZlLWNvbG9yLWJ1dHRvbi1jbGFzc3tiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLXJhZGl1czo1MCU7Ym94LXNoYWRvdzoxcHggMXB4IDVweCAjMzMzO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjEwcHg7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6LTVweDt0ZXh0LWFsaWduOmNlbnRlcjt0b3A6LTVweDt3aWR0aDoxMHB4fS5jb2xvci1waWNrZXIgLmNwLXJlbW92ZS1jb2xvci1idXR0b24tY2xhc3M6YmVmb3Jle2JvdHRvbTozLjVweDtjb250ZW50OiJ4IjtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6MTBweDtwb3NpdGlvbjpyZWxhdGl2ZX0nXSxlbmNhcHN1bGF0aW9uOjJ9KSxOMy5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmNofSx7dHlwZTpIaH0se3R5cGU6VDN9XSxOMy5wcm9wRGVjb3JhdG9ycz17ZGlhbG9nRWxlbWVudDpbe3R5cGU6RnIsYXJnczpbImRpYWxvZ1BvcHVwIix7c3RhdGljOiEwfV19XSxodWVTbGlkZXI6W3t0eXBlOkZyLGFyZ3M6WyJodWVTbGlkZXIiLHtzdGF0aWM6ITB9XX1dLGFscGhhU2xpZGVyOlt7dHlwZTpGcixhcmdzOlsiYWxwaGFTbGlkZXIiLHtzdGF0aWM6ITB9XX1dLGhhbmRsZUVzYzpbe3R5cGU6TV8sYXJnczpbImRvY3VtZW50OmtleXVwLmVzYyIsWyIkZXZlbnQiXV19XSxoYW5kbGVFbnRlcjpbe3R5cGU6TV8sYXJnczpbImRvY3VtZW50OmtleXVwLmVudGVyIixbIiRldmVudCJdXX1dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKE4zLFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6ImNvbG9yLXBpY2tlciIsdGVtcGxhdGU6JzxkaXYgI2RpYWxvZ1BvcHVwIGNsYXNzPSJjb2xvci1waWNrZXIiIFtjbGFzcy5vcGVuXT0ic2hvdyIgW3N0eWxlLmRpc3BsYXldPSIhc2hvdyA/IFwnbm9uZVwnIDogXCdibG9ja1wnIiBbc3R5bGUudmlzaWJpbGl0eV09ImhpZGRlbiA/IFwnaGlkZGVuXCcgOiBcJ3Zpc2libGVcJyIgW3N0eWxlLnRvcC5weF09InRvcCIgW3N0eWxlLmxlZnQucHhdPSJsZWZ0IiBbc3R5bGUucG9zaXRpb25dPSJwb3NpdGlvbiIgW3N0eWxlLmhlaWdodC5weF09ImNwSGVpZ2h0IiBbc3R5bGUud2lkdGgucHhdPSJjcFdpZHRoIiAoY2xpY2spPSIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkiPlxuICA8ZGl2ICpuZ0lmPSJjcERpYWxvZ0Rpc3BsYXk9PVwncG9wdXBcJyIgY2xhc3M9ImFycm93IGFycm93LXt7Y3BVc2VQb3NpdGlvbn19IiBbc3R5bGUudG9wLnB4XT0iYXJyb3dUb3AiPjwvZGl2PlxuXG4gIDxkaXYgKm5nSWY9IihjcENvbG9yTW9kZSB8fMKgMSkgPT09IDEiIGNsYXNzPSJzYXR1cmF0aW9uLWxpZ2h0bmVzcyIgW3NsaWRlcl0gW3JnWF09IjEiIFtyZ1ldPSIxIiBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09Imh1ZVNsaWRlckNvbG9yIiAobmV3VmFsdWUpPSJvbkNvbG9yQ2hhbmdlKCRldmVudCkiIChkcmFnU3RhcnQpPSJvbkRyYWdTdGFydChcJ3NhdHVyYXRpb24tbGlnaHRuZXNzXCcpIiAoZHJhZ0VuZCk9Im9uRHJhZ0VuZChcJ3NhdHVyYXRpb24tbGlnaHRuZXNzXCcpIj5cbiAgICA8ZGl2IGNsYXNzPSJjdXJzb3IiIFtzdHlsZS50b3AucHhdPSJzbGlkZXI/LnYiIFtzdHlsZS5sZWZ0LnB4XT0ic2xpZGVyPy5zIj48L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz0iaHVlLWFscGhhIGJveCI+XG4gICAgPGRpdiBjbGFzcz0ibGVmdCI+XG4gICAgICA8ZGl2IGNsYXNzPSJzZWxlY3RlZC1jb2xvci1iYWNrZ3JvdW5kIj48L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz0ic2VsZWN0ZWQtY29sb3IiIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT0ic2VsZWN0ZWRDb2xvciI+PC9kaXY+XG5cbiAgICAgIDxidXR0b24gKm5nSWY9ImNwQWRkQ29sb3JCdXR0b24iIHR5cGU9ImJ1dHRvbiIgY2xhc3M9Int7Y3BBZGRDb2xvckJ1dHRvbkNsYXNzfX0iIFtkaXNhYmxlZF09ImNwUHJlc2V0Q29sb3JzICYmIGNwUHJlc2V0Q29sb3JzLmxlbmd0aCA+PSBjcE1heFByZXNldENvbG9yc0xlbmd0aCIgKGNsaWNrKT0ib25BZGRQcmVzZXRDb2xvcigkZXZlbnQsIHNlbGVjdGVkQ29sb3IpIj5cbiAgICAgICAge3tjcEFkZENvbG9yQnV0dG9uVGV4dH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9InJpZ2h0Ij5cbiAgICAgIDxkaXYgKm5nSWY9ImNwQWxwaGFDaGFubmVsPT09XCdkaXNhYmxlZFwnIiBzdHlsZT0iaGVpZ2h0OiAxNnB4OyI+PC9kaXY+XG5cbiAgICAgIDxkaXYgI2h1ZVNsaWRlciBjbGFzcz0iaHVlIiBbc2xpZGVyXSBbcmdYXT0iMSIgW3N0eWxlLmRpc3BsYXldPSIoY3BDb2xvck1vZGUgfHzCoDEpID09PSAxID8gXCdibG9ja1wnIDogXCdub25lXCciIChuZXdWYWx1ZSk9Im9uSHVlQ2hhbmdlKCRldmVudCkiIChkcmFnU3RhcnQpPSJvbkRyYWdTdGFydChcJ2h1ZVwnKSIgKGRyYWdFbmQpPSJvbkRyYWdFbmQoXCdodWVcJykiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJjdXJzb3IiIFtzdHlsZS5sZWZ0LnB4XT0ic2xpZGVyPy5oIj48L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2ICN2YWx1ZVNsaWRlciBjbGFzcz0idmFsdWUiIFtzbGlkZXJdIFtyZ1hdPSIxIiBbc3R5bGUuZGlzcGxheV09IihjcENvbG9yTW9kZSB8fMKgMSkgPT09IDIgPyBcJ2Jsb2NrXCc6IFwnbm9uZVwnIiAobmV3VmFsdWUpPSJvblZhbHVlQ2hhbmdlKCRldmVudCkiIChkcmFnU3RhcnQpPSJvbkRyYWdTdGFydChcJ3ZhbHVlXCcpIiAoZHJhZ0VuZCk9Im9uRHJhZ0VuZChcJ3ZhbHVlXCcpIj5cbiAgICAgICAgPGRpdiBjbGFzcz0iY3Vyc29yIiBbc3R5bGUucmlnaHQucHhdPSJzbGlkZXI/LnYiPjwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgI2FscGhhU2xpZGVyIGNsYXNzPSJhbHBoYSIgW3NsaWRlcl0gW3JnWF09IjEiIFtzdHlsZS5kaXNwbGF5XT0iY3BBbHBoYUNoYW5uZWwgPT09IFwnZGlzYWJsZWRcJyA/IFwnbm9uZVwnIDogXCdibG9ja1wnIiBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09ImFscGhhU2xpZGVyQ29sb3IiIChuZXdWYWx1ZSk9Im9uQWxwaGFDaGFuZ2UoJGV2ZW50KSIgKGRyYWdTdGFydCk9Im9uRHJhZ1N0YXJ0KFwnYWxwaGFcJykiIChkcmFnRW5kKT0ib25EcmFnRW5kKFwnYWxwaGFcJykiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJjdXJzb3IiIFtzdHlsZS5sZWZ0LnB4XT0ic2xpZGVyPy5hIj48L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2ICpuZ0lmPSIhY3BEaXNhYmxlSW5wdXQgJiYgKGNwQ29sb3JNb2RlIHx8wqAxKSA9PT0gMSIgY2xhc3M9ImNteWstdGV4dCIgW3N0eWxlLmRpc3BsYXldPSJmb3JtYXQgIT09IDMgPyBcJ25vbmVcJyA6IFwnYmxvY2tcJyI+XG4gICAgPGRpdiBjbGFzcz0iYm94Ij5cbiAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIHBhdHRlcm49IlswLTldKiIgbWluPSIwIiBtYXg9IjEwMCIgW3RleHRdIFtyZ109IjEwMCIgW3ZhbHVlXT0iY215a1RleHQ/LmMiIChrZXl1cC5lbnRlcik9Im9uQWNjZXB0Q29sb3IoJGV2ZW50KSIgKG5ld1ZhbHVlKT0ib25DeWFuSW5wdXQoJGV2ZW50KSIgLz5cbiAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIHBhdHRlcm49IlswLTldKiIgbWluPSIwIiBtYXg9IjEwMCIgW3RleHRdIFtyZ109IjEwMCIgW3ZhbHVlXT0iY215a1RleHQ/Lm0iIChrZXl1cC5lbnRlcik9Im9uQWNjZXB0Q29sb3IoJGV2ZW50KSIgKG5ld1ZhbHVlKT0ib25NYWdlbnRhSW5wdXQoJGV2ZW50KSIgLz5cbiAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIHBhdHRlcm49IlswLTldKiIgbWluPSIwIiBtYXg9IjEwMCIgW3RleHRdIFtyZ109IjEwMCIgW3ZhbHVlXT0iY215a1RleHQ/LnkiIChrZXl1cC5lbnRlcik9Im9uQWNjZXB0Q29sb3IoJGV2ZW50KSIgKG5ld1ZhbHVlKT0ib25ZZWxsb3dJbnB1dCgkZXZlbnQpIiAvPlxuICAgICAgPGlucHV0IHR5cGU9Im51bWJlciIgcGF0dGVybj0iWzAtOV0qIiBtaW49IjAiIG1heD0iMTAwIiBbdGV4dF0gW3JnXT0iMTAwIiBbdmFsdWVdPSJjbXlrVGV4dD8uayIgKGtleXVwLmVudGVyKT0ib25BY2NlcHRDb2xvcigkZXZlbnQpIiAobmV3VmFsdWUpPSJvbkJsYWNrSW5wdXQoJGV2ZW50KSIgLz5cbiAgICAgIDxpbnB1dCAqbmdJZj0iY3BBbHBoYUNoYW5uZWwhPT1cJ2Rpc2FibGVkXCciIHR5cGU9Im51bWJlciIgcGF0dGVybj0iWzAtOV0rKFtcXC4sXVswLTldezEsMn0pPyIgbWluPSIwIiBtYXg9IjEiIHN0ZXA9IjAuMSIgW3RleHRdIFtyZ109IjEiIFt2YWx1ZV09ImNteWtUZXh0Py5hIiAoa2V5dXAuZW50ZXIpPSJvbkFjY2VwdENvbG9yKCRldmVudCkiIChuZXdWYWx1ZSk9Im9uQWxwaGFJbnB1dCgkZXZlbnQpIiAvPlxuICAgIDwvZGl2PlxuXG4gICAgIDxkaXYgY2xhc3M9ImJveCI+XG4gICAgICA8ZGl2PkM8L2Rpdj48ZGl2Pk08L2Rpdj48ZGl2Plk8L2Rpdj48ZGl2Pks8L2Rpdj48ZGl2ICpuZ0lmPSJjcEFscGhhQ2hhbm5lbCE9PVwnZGlzYWJsZWRcJyIgPkE8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiAqbmdJZj0iIWNwRGlzYWJsZUlucHV0ICYmIChjcENvbG9yTW9kZSB8fMKgMSkgPT09IDEgIiBjbGFzcz0iaHNsYS10ZXh0IiBbc3R5bGUuZGlzcGxheV09ImZvcm1hdCAhPT0gMiA/IFwnbm9uZVwnIDogXCdibG9ja1wnIj5cbiAgICA8ZGl2IGNsYXNzPSJib3giPlxuICAgICAgPGlucHV0IHR5cGU9Im51bWJlciIgcGF0dGVybj0iWzAtOV0qIiBtaW49IjAiIG1heD0iMzYwIiBbdGV4dF0gW3JnXT0iMzYwIiBbdmFsdWVdPSJoc2xhVGV4dD8uaCIgKGtleXVwLmVudGVyKT0ib25BY2NlcHRDb2xvcigkZXZlbnQpIiAobmV3VmFsdWUpPSJvbkh1ZUlucHV0KCRldmVudCkiIC8+XG4gICAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBwYXR0ZXJuPSJbMC05XSoiIG1pbj0iMCIgbWF4PSIxMDAiIFt0ZXh0XSBbcmddPSIxMDAiIFt2YWx1ZV09ImhzbGFUZXh0Py5zIiAoa2V5dXAuZW50ZXIpPSJvbkFjY2VwdENvbG9yKCRldmVudCkiIChuZXdWYWx1ZSk9Im9uU2F0dXJhdGlvbklucHV0KCRldmVudCkiIC8+XG4gICAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBwYXR0ZXJuPSJbMC05XSoiIG1pbj0iMCIgbWF4PSIxMDAiIFt0ZXh0XSBbcmddPSIxMDAiIFt2YWx1ZV09ImhzbGFUZXh0Py5sIiAoa2V5dXAuZW50ZXIpPSJvbkFjY2VwdENvbG9yKCRldmVudCkiIChuZXdWYWx1ZSk9Im9uTGlnaHRuZXNzSW5wdXQoJGV2ZW50KSIgLz5cbiAgICAgIDxpbnB1dCAqbmdJZj0iY3BBbHBoYUNoYW5uZWwhPT1cJ2Rpc2FibGVkXCciIHR5cGU9Im51bWJlciIgcGF0dGVybj0iWzAtOV0rKFtcXC4sXVswLTldezEsMn0pPyIgbWluPSIwIiBtYXg9IjEiIHN0ZXA9IjAuMSIgW3RleHRdIFtyZ109IjEiIFt2YWx1ZV09ImhzbGFUZXh0Py5hIiAoa2V5dXAuZW50ZXIpPSJvbkFjY2VwdENvbG9yKCRldmVudCkiIChuZXdWYWx1ZSk9Im9uQWxwaGFJbnB1dCgkZXZlbnQpIiAvPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz0iYm94Ij5cbiAgICAgIDxkaXY+SDwvZGl2PjxkaXY+UzwvZGl2PjxkaXY+TDwvZGl2PjxkaXYgKm5nSWY9ImNwQWxwaGFDaGFubmVsIT09XCdkaXNhYmxlZFwnIj5BPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgKm5nSWY9IiFjcERpc2FibGVJbnB1dCAmJiAoY3BDb2xvck1vZGUgfHzCoDEpID09PSAxICIgW3N0eWxlLmRpc3BsYXldPSJmb3JtYXQgIT09IDEgPyBcJ25vbmVcJyA6IFwnYmxvY2tcJyIgY2xhc3M9InJnYmEtdGV4dCI+XG4gICAgPGRpdiBjbGFzcz0iYm94Ij5cbiAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIHBhdHRlcm49IlswLTldKiIgbWluPSIwIiBtYXg9IjI1NSIgW3RleHRdIFtyZ109IjI1NSIgW3ZhbHVlXT0icmdiYVRleHQ/LnIiIChrZXl1cC5lbnRlcik9Im9uQWNjZXB0Q29sb3IoJGV2ZW50KSIgKG5ld1ZhbHVlKT0ib25SZWRJbnB1dCgkZXZlbnQpIiAvPlxuICAgICAgPGlucHV0IHR5cGU9Im51bWJlciIgcGF0dGVybj0iWzAtOV0qIiBtaW49IjAiIG1heD0iMjU1IiBbdGV4dF0gW3JnXT0iMjU1IiBbdmFsdWVdPSJyZ2JhVGV4dD8uZyIgKGtleXVwLmVudGVyKT0ib25BY2NlcHRDb2xvcigkZXZlbnQpIiAobmV3VmFsdWUpPSJvbkdyZWVuSW5wdXQoJGV2ZW50KSIgLz5cbiAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIHBhdHRlcm49IlswLTldKiIgbWluPSIwIiBtYXg9IjI1NSIgW3RleHRdIFtyZ109IjI1NSIgW3ZhbHVlXT0icmdiYVRleHQ/LmIiIChrZXl1cC5lbnRlcik9Im9uQWNjZXB0Q29sb3IoJGV2ZW50KSIgKG5ld1ZhbHVlKT0ib25CbHVlSW5wdXQoJGV2ZW50KSIgLz5cbiAgICAgIDxpbnB1dCAqbmdJZj0iY3BBbHBoYUNoYW5uZWwhPT1cJ2Rpc2FibGVkXCciIHR5cGU9Im51bWJlciIgcGF0dGVybj0iWzAtOV0rKFtcXC4sXVswLTldezEsMn0pPyIgbWluPSIwIiBtYXg9IjEiIHN0ZXA9IjAuMSIgW3RleHRdIFtyZ109IjEiIFt2YWx1ZV09InJnYmFUZXh0Py5hIiAoa2V5dXAuZW50ZXIpPSJvbkFjY2VwdENvbG9yKCRldmVudCkiIChuZXdWYWx1ZSk9Im9uQWxwaGFJbnB1dCgkZXZlbnQpIiAvPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz0iYm94Ij5cbiAgICAgIDxkaXY+UjwvZGl2PjxkaXY+RzwvZGl2PjxkaXY+QjwvZGl2PjxkaXYgKm5nSWY9ImNwQWxwaGFDaGFubmVsIT09XCdkaXNhYmxlZFwnIiA+QTwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2ICpuZ0lmPSIhY3BEaXNhYmxlSW5wdXQgJiYgKGNwQ29sb3JNb2RlIHx8wqAxKSA9PT0gMSIgY2xhc3M9ImhleC10ZXh0IiBbY2xhc3MuaGV4LWFscGhhXT0iY3BBbHBoYUNoYW5uZWw9PT1cJ2ZvcmNlZFwnIlxuICAgIFtzdHlsZS5kaXNwbGF5XT0iZm9ybWF0ICE9PSAwID8gXCdub25lXCcgOiBcJ2Jsb2NrXCciPlxuICAgIDxkaXYgY2xhc3M9ImJveCI+XG4gICAgICA8aW5wdXQgW3RleHRdIFt2YWx1ZV09ImhleFRleHQiIChibHVyKT0ib25IZXhJbnB1dChudWxsKSIgKGtleXVwLmVudGVyKT0ib25BY2NlcHRDb2xvcigkZXZlbnQpIiAobmV3VmFsdWUpPSJvbkhleElucHV0KCRldmVudCkiLz5cbiAgICAgIDxpbnB1dCAqbmdJZj0iY3BBbHBoYUNoYW5uZWw9PT1cJ2ZvcmNlZFwnIiB0eXBlPSJudW1iZXIiIHBhdHRlcm49IlswLTldKyhbXFwuLF1bMC05XXsxLDJ9KT8iIG1pbj0iMCIgbWF4PSIxIiBzdGVwPSIwLjEiIFt0ZXh0XSBbcmddPSIxIiBbdmFsdWVdPSJoZXhBbHBoYSIgKGtleXVwLmVudGVyKT0ib25BY2NlcHRDb2xvcigkZXZlbnQpIiAobmV3VmFsdWUpPSJvbkFscGhhSW5wdXQoJGV2ZW50KSIvPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz0iYm94Ij5cbiAgICAgIDxkaXY+SGV4PC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPSJjcEFscGhhQ2hhbm5lbD09PVwnZm9yY2VkXCciPkE8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiAqbmdJZj0iIWNwRGlzYWJsZUlucHV0ICYmIChjcENvbG9yTW9kZSB8fMKgMSkgPT09IDIiIGNsYXNzPSJ2YWx1ZS10ZXh0Ij5cbiAgICA8ZGl2IGNsYXNzPSJib3giPlxuICAgICAgPGlucHV0IHR5cGU9Im51bWJlciIgcGF0dGVybj0iWzAtOV0qIiBtaW49IjAiIG1heD0iMTAwIiBbdGV4dF0gW3JnXT0iMTAwIiBbdmFsdWVdPSJoc2xhVGV4dD8ubCIgKGtleXVwLmVudGVyKT0ib25BY2NlcHRDb2xvcigkZXZlbnQpIiAobmV3VmFsdWUpPSJvblZhbHVlSW5wdXQoJGV2ZW50KSIgLz5cbiAgICAgIDxpbnB1dCAqbmdJZj0iY3BBbHBoYUNoYW5uZWwhPT1cJ2Rpc2FibGVkXCciIHR5cGU9Im51bWJlciIgcGF0dGVybj0iWzAtOV0rKFtcXC4sXVswLTldezEsMn0pPyIgbWluPSIwIiBtYXg9IjEiIHN0ZXA9IjAuMSIgIFt0ZXh0XSBbcmddPSIxIiBbdmFsdWVdPSJoc2xhVGV4dD8uYSIgKGtleXVwLmVudGVyKT0ib25BY2NlcHRDb2xvcigkZXZlbnQpIiAobmV3VmFsdWUpPSJvbkFscGhhSW5wdXQoJGV2ZW50KSIgLz5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9ImJveCI+XG4gICAgICA8ZGl2PlY8L2Rpdj48ZGl2PkE8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiAqbmdJZj0iIWNwRGlzYWJsZUlucHV0ICYmIChjcENvbG9yTW9kZSB8fMKgMSkgPT09IDEiIGNsYXNzPSJ0eXBlLXBvbGljeSI+XG4gICAgPHNwYW4gY2xhc3M9InR5cGUtcG9saWN5LWFycm93IiAoY2xpY2spPSJvbkZvcm1hdFRvZ2dsZSgtMSkiPjwvc3Bhbj5cbiAgICA8c3BhbiBjbGFzcz0idHlwZS1wb2xpY3ktYXJyb3ciIChjbGljayk9Im9uRm9ybWF0VG9nZ2xlKDEpIj48L3NwYW4+XG4gIDwvZGl2PlxuXG4gIDxkaXYgKm5nSWY9ImNwUHJlc2V0Q29sb3JzPy5sZW5ndGggfHwgY3BBZGRDb2xvckJ1dHRvbiIgY2xhc3M9InByZXNldC1hcmVhIj5cbiAgICA8aHI+XG5cbiAgICA8ZGl2IGNsYXNzPSJwcmVzZXQtbGFiZWwiPnt7Y3BQcmVzZXRMYWJlbH19PC9kaXY+XG5cbiAgICA8ZGl2ICpuZ0lmPSJjcFByZXNldENvbG9ycz8ubGVuZ3RoIiBjbGFzcz0ie3tjcFByZXNldENvbG9yc0NsYXNzfX0iPlxuICAgICAgPGRpdiAqbmdGb3I9ImxldCBjb2xvciBvZiBjcFByZXNldENvbG9ycyIgY2xhc3M9InByZXNldC1jb2xvciIgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09ImNvbG9yIiAoY2xpY2spPSJzZXRDb2xvckZyb21TdHJpbmcoY29sb3IpIj5cbiAgICAgICAgPHNwYW4gKm5nSWY9ImNwQWRkQ29sb3JCdXR0b24iIGNsYXNzPSJ7e2NwUmVtb3ZlQ29sb3JCdXR0b25DbGFzc319IiAoY2xpY2spPSJvblJlbW92ZVByZXNldENvbG9yKCRldmVudCwgY29sb3IpIj48L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgKm5nSWY9IiFjcFByZXNldENvbG9ycz8ubGVuZ3RoICYmIGNwQWRkQ29sb3JCdXR0b24iIGNsYXNzPSJ7e2NwUHJlc2V0RW1wdHlNZXNzYWdlQ2xhc3N9fSI+e3tjcFByZXNldEVtcHR5TWVzc2FnZX19PC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgKm5nSWY9ImNwT0tCdXR0b24gfHwgY3BDYW5jZWxCdXR0b24iIGNsYXNzPSJidXR0b24tYXJlYSI+XG4gICAgPGJ1dHRvbiAqbmdJZj0iY3BDYW5jZWxCdXR0b24iIHR5cGU9ImJ1dHRvbiIgY2xhc3M9Int7Y3BDYW5jZWxCdXR0b25DbGFzc319IiAoY2xpY2spPSJvbkNhbmNlbENvbG9yKCRldmVudCkiPnt7Y3BDYW5jZWxCdXR0b25UZXh0fX08L2J1dHRvbj5cblxuICAgIDxidXR0b24gKm5nSWY9ImNwT0tCdXR0b24iIHR5cGU9ImJ1dHRvbiIgY2xhc3M9Int7Y3BPS0J1dHRvbkNsYXNzfX0iIChjbGljayk9Im9uQWNjZXB0Q29sb3IoJGV2ZW50KSI+e3tjcE9LQnV0dG9uVGV4dH19PC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLGVuY2Fwc3VsYXRpb246UG8uTm9uZSxzdHlsZXM6WycuY29sb3ItcGlja2Vyey1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgIzc3NztjdXJzb3I6ZGVmYXVsdDtoZWlnaHQ6YXV0bztwb3NpdGlvbjphYnNvbHV0ZTt1c2VyLXNlbGVjdDpub25lO3dpZHRoOjIzMHB4O3otaW5kZXg6MTAwMH0uY29sb3ItcGlja2VyICp7Ym94LXNpemluZzpib3JkZXItYm94O2ZvbnQtc2l6ZToxMXB4O21hcmdpbjowfS5jb2xvci1waWNrZXIgaW5wdXR7Y29sb3I6IzAwMDtmb250LXNpemU6MTNweDtoZWlnaHQ6MjZweDttaW4td2lkdGg6MDt0ZXh0LWFsaWduOmNlbnRlcjt3aWR0aDowfS5jb2xvci1waWNrZXIgaW5wdXQ6LW1vei1zdWJtaXQtaW52YWxpZCwuY29sb3ItcGlja2VyIGlucHV0Oi1tb3otdWktaW52YWxpZCwuY29sb3ItcGlja2VyIGlucHV0OmludmFsaWR7Ym94LXNoYWRvdzpub25lfS5jb2xvci1waWNrZXIgaW5wdXQ6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sLmNvbG9yLXBpY2tlciBpbnB1dDo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTttYXJnaW46MH0uY29sb3ItcGlja2VyIC5hcnJvd3tib3JkZXItc3R5bGU6c29saWQ7aGVpZ2h0OjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MDt6LWluZGV4Ojk5OTk5OX0uY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy10b3B7Ym9yZGVyLWNvbG9yOiM3NzcgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXdpZHRoOjEwcHggNXB4O2xlZnQ6OHB4fS5jb2xvci1waWNrZXIgLmFycm93LmFycm93LWJvdHRvbXtib3JkZXItY29sb3I6dHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgIzc3Nztib3JkZXItd2lkdGg6MTBweCA1cHg7bGVmdDo4cHg7dG9wOi0yMHB4fS5jb2xvci1waWNrZXIgLmFycm93LmFycm93LWxlZnQtdG9wLC5jb2xvci1waWNrZXIgLmFycm93LmFycm93LXRvcC1sZWZ0e2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudCB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCAjNzc3O2JvcmRlci13aWR0aDo1cHggMTBweDtib3R0b206OHB4O3JpZ2h0Oi0yMXB4fS5jb2xvci1waWNrZXIgLmFycm93LmFycm93LXJpZ2h0LXRvcCwuY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy10b3AtcmlnaHR7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50ICM3NzcgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXdpZHRoOjVweCAxMHB4O2JvdHRvbTo4cHg7bGVmdDotMjBweH0uY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1ib3R0b20tbGVmdCwuY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1sZWZ0LC5jb2xvci1waWNrZXIgLmFycm93LmFycm93LWxlZnQtYm90dG9te2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudCB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCAjNzc3O2JvcmRlci13aWR0aDo1cHggMTBweDtyaWdodDotMjFweDt0b3A6OHB4fS5jb2xvci1waWNrZXIgLmFycm93LmFycm93LWJvdHRvbS1yaWdodCwuY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1yaWdodCwuY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1yaWdodC1ib3R0b217Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50ICM3NzcgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXdpZHRoOjVweCAxMHB4O2xlZnQ6LTIwcHg7dG9wOjhweH0uY29sb3ItcGlja2VyIC5jdXJzb3J7Ym9yZGVyOjJweCBzb2xpZCAjMjIyO2JvcmRlci1yYWRpdXM6NTAlO2N1cnNvcjpkZWZhdWx0O2hlaWdodDoxNnB4O3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjE2cHh9LmNvbG9yLXBpY2tlciAuYm94e2Rpc3BsYXk6ZmxleDtwYWRkaW5nOjRweCA4cHh9LmNvbG9yLXBpY2tlciAubGVmdHtwYWRkaW5nOjE2cHggOHB4O3Bvc2l0aW9uOnJlbGF0aXZlfS5jb2xvci1waWNrZXIgLnJpZ2h0e2ZsZXg6MSAxIGF1dG87cGFkZGluZzoxMnB4IDhweH0uY29sb3ItcGlja2VyIC5idXR0b24tYXJlYXtwYWRkaW5nOjAgMTZweCAxNnB4O3RleHQtYWxpZ246cmlnaHR9LmNvbG9yLXBpY2tlciAuYnV0dG9uLWFyZWEgYnV0dG9ue21hcmdpbi1sZWZ0OjhweH0uY29sb3ItcGlja2VyIC5wcmVzZXQtYXJlYXtwYWRkaW5nOjRweCAxNXB4fS5jb2xvci1waWNrZXIgLnByZXNldC1hcmVhIC5wcmVzZXQtbGFiZWx7Y29sb3I6IzU1NTtmb250LXNpemU6MTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzo0cHg7dGV4dC1hbGlnbjpsZWZ0O3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwO3dpZHRoOjEwMCV9LmNvbG9yLXBpY2tlciAucHJlc2V0LWFyZWEgLnByZXNldC1jb2xvcntib3JkZXI6MXB4IHNvbGlkICNhOWE5YTk7Ym9yZGVyLXJhZGl1czoyNSU7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjE4cHg7bWFyZ2luOjRweCA2cHggOHB4O3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjE4cHh9LmNvbG9yLXBpY2tlciAucHJlc2V0LWFyZWEgLnByZXNldC1lbXB0eS1tZXNzYWdle2ZvbnQtc3R5bGU6aXRhbGljO21hcmdpbi1ib3R0b206OHB4O21hcmdpbi10b3A6NHB4O21pbi1oZWlnaHQ6MThweDt0ZXh0LWFsaWduOmNlbnRlcn0uY29sb3ItcGlja2VyIC5oZXgtdGV4dHtmb250LXNpemU6MTFweDtwYWRkaW5nOjRweCA4cHg7d2lkdGg6MTAwJX0uY29sb3ItcGlja2VyIC5oZXgtdGV4dCAuYm94e3BhZGRpbmc6MCAyNHB4IDhweCA4cHh9LmNvbG9yLXBpY2tlciAuaGV4LXRleHQgLmJveCBkaXZ7Y2xlYXI6bGVmdDtjb2xvcjojNTU1O2ZsZXg6MSAxIGF1dG87ZmxvYXQ6bGVmdDt0ZXh0LWFsaWduOmNlbnRlcn0uY29sb3ItcGlja2VyIC5oZXgtdGV4dCAuYm94IGlucHV0e2JvcmRlcjoxcHggc29saWQgI2E5YTlhOTtmbGV4OjEgMSBhdXRvO3BhZGRpbmc6MXB4fS5jb2xvci1waWNrZXIgLmhleC1hbHBoYSAuYm94IGRpdjpmaXJzdC1jaGlsZCwuY29sb3ItcGlja2VyIC5oZXgtYWxwaGEgLmJveCBpbnB1dDpmaXJzdC1jaGlsZHtmbGV4LWdyb3c6MzttYXJnaW4tcmlnaHQ6OHB4fS5jb2xvci1waWNrZXIgLmNteWstdGV4dCwuY29sb3ItcGlja2VyIC5oc2xhLXRleHQsLmNvbG9yLXBpY2tlciAucmdiYS10ZXh0LC5jb2xvci1waWNrZXIgLnZhbHVlLXRleHR7Zm9udC1zaXplOjExcHg7cGFkZGluZzo0cHggOHB4O3dpZHRoOjEwMCV9LmNvbG9yLXBpY2tlciAuY215ay10ZXh0IC5ib3gsLmNvbG9yLXBpY2tlciAuaHNsYS10ZXh0IC5ib3gsLmNvbG9yLXBpY2tlciAucmdiYS10ZXh0IC5ib3h7cGFkZGluZzowIDI0cHggOHB4IDhweH0uY29sb3ItcGlja2VyIC52YWx1ZS10ZXh0IC5ib3h7cGFkZGluZzowIDhweCA4cHh9LmNvbG9yLXBpY2tlciAuY215ay10ZXh0IC5ib3ggZGl2LC5jb2xvci1waWNrZXIgLmhzbGEtdGV4dCAuYm94IGRpdiwuY29sb3ItcGlja2VyIC5yZ2JhLXRleHQgLmJveCBkaXYsLmNvbG9yLXBpY2tlciAudmFsdWUtdGV4dCAuYm94IGRpdntjb2xvcjojNTU1O2ZsZXg6MSAxIGF1dG87bWFyZ2luLXJpZ2h0OjhweDt0ZXh0LWFsaWduOmNlbnRlcn0uY29sb3ItcGlja2VyIC5jbXlrLXRleHQgLmJveCBkaXY6bGFzdC1jaGlsZCwuY29sb3ItcGlja2VyIC5oc2xhLXRleHQgLmJveCBkaXY6bGFzdC1jaGlsZCwuY29sb3ItcGlja2VyIC5yZ2JhLXRleHQgLmJveCBkaXY6bGFzdC1jaGlsZCwuY29sb3ItcGlja2VyIC52YWx1ZS10ZXh0IC5ib3ggZGl2Omxhc3QtY2hpbGR7bWFyZ2luLXJpZ2h0OjB9LmNvbG9yLXBpY2tlciAuY215ay10ZXh0IC5ib3ggaW5wdXQsLmNvbG9yLXBpY2tlciAuaHNsYS10ZXh0IC5ib3ggaW5wdXQsLmNvbG9yLXBpY2tlciAucmdiYS10ZXh0IC5ib3ggaW5wdXQsLmNvbG9yLXBpY2tlciAudmFsdWUtdGV4dCAuYm94IGlucHV0e2JvcmRlcjoxcHggc29saWQgI2E5YTlhOTtmbGV4OjE7ZmxvYXQ6bGVmdDttYXJnaW46MCA4cHggMCAwO3BhZGRpbmc6MXB4fS5jb2xvci1waWNrZXIgLmNteWstdGV4dCAuYm94IGlucHV0Omxhc3QtY2hpbGQsLmNvbG9yLXBpY2tlciAuaHNsYS10ZXh0IC5ib3ggaW5wdXQ6bGFzdC1jaGlsZCwuY29sb3ItcGlja2VyIC5yZ2JhLXRleHQgLmJveCBpbnB1dDpsYXN0LWNoaWxkLC5jb2xvci1waWNrZXIgLnZhbHVlLXRleHQgLmJveCBpbnB1dDpsYXN0LWNoaWxke21hcmdpbi1yaWdodDowfS5jb2xvci1waWNrZXIgLmh1ZS1hbHBoYXthbGlnbi1pdGVtczpjZW50ZXI7bWFyZ2luLWJvdHRvbTozcHh9LmNvbG9yLXBpY2tlciAuaHVle2JhY2tncm91bmQtaW1hZ2U6dXJsKCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUpZQUFBQVFDQVlBQUFEMDZJWW5BQUFBQm1KTFIwUUEvd0QvQVArZ3ZhZVRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUIzUkpUVVVINEFJV0R3a1VGV2JDQ0FBQUFGeEpSRUZVYU43dDBrRUtnMEFRQU1FMng4My9uMnF1NXFDZ0QxaURoQ29ZZHBuYlFDOWJiWTFxVk8vanZjNmszYWQ5MXM3LzdGMS9jc2dQcnVqdVExN0JEWVNGc0JBV3dnSmhJU3lFQmNKQ1dBZ0xoSVd3RUJZSWkyZjdBci8xVENnRkgyWDlBQUFBQUVsRlRrU3VRbUNDIik7ZGlyZWN0aW9uOmx0cn0uY29sb3ItcGlja2VyIC5odWUsLmNvbG9yLXBpY2tlciAudmFsdWV7YmFja2dyb3VuZC1zaXplOjEwMCUgMTAwJTtib3JkZXI6bm9uZTtjdXJzb3I6cG9pbnRlcjtoZWlnaHQ6MTZweDttYXJnaW4tYm90dG9tOjE2cHg7d2lkdGg6MTAwJX0uY29sb3ItcGlja2VyIC52YWx1ZXtiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFKWUFBQUFRQ0FZQUFBRDA2SVluQUFBQ1RrbEVRVlI0MnUzU1lVY3JBQmhBNFUyU2ttUkpNbVdTSmtsS0ppV1pacEtVSkpza0tVbWFURkltS1pPVXpNeVNwR1JtbGlSTkppbEpTcEtTSkV0bVNwSXBtV21TZE83MzYvNkQreDdPUDNnVUNvV0N2MWNxbFNRbEpaR2NuRXhLU2dxcHFhbWtwYVdSbnA1T1JrWUdtWm1acUZRcXNyS3l5TTdPSmljbmg5emNYTlJxTlhsNWVlVG41NlBSYUNnb0tLQ3dzSkNpb2lLMFdpM0Z4Y1dVbEpSUVdscEtXVmtaNWVYbFZGUlVVRmxaaVU2bm82cXFpdXJxYW1wcWFxaXRyYVd1cmc2OVhrOTlmVDBHZ3dHajBVaERRd09OalkwME5UWFIzTnhNUzBzTHJhMnR0TFcxMGQ3ZWpzbGt3bXcyMDlIUlFXZG5KMTFkWFhSM2Q5UFQwME52Ynk5OWZYMzA5L2N6TUREQTRPQWdGb3VGb2FFaHJGWXJ3OFBEakl5TU1EbzZ5dGpZR0RhYmpmSHhjU1ltSnBpY25HUnFhZ3E3M2M3MDlEUXpNelBNenM0eU56ZkgvUHc4RG9jRHA5T0p5K1hDN1hhenNMREE0dUlpUzB0TExDOHZzN0t5d3VycUttdHJhM2c4SHJ4ZUx6NmZENy9mei9yNk9oc2JHMnh1YnJLMXRjWDI5amFCUUlDZG5SMkN3U0M3dTd2czdlMnh2Ny9Qd2NFQmg0ZUhIQjBkY1h4OHpNbkpDYWVucDV5ZG5YRitmczdGeFFXWGw1ZGNYVjF4ZlgzTnpjME50N2UzM04zZEVRcUZ1TCsvNStIaGdYQTRUQ1FTNGZIeGthZW5KNTZmbjNsNWVlSDE5WlZvTk1yYjJ4dnY3Kzk4Zkh3UWk4V0l4K044Zm42U1NDVDQrdnJpKy91Ym41OGZmbjkvK1ZjS2dTV3dCSmJBRWxnQ1MyQUpMSUVsc0FTV3dCSllBa3RnQ1N5QkpiQUVsc0FTV0FKTFlBa3NnU1d3QkpiQUVsZ0NTMkFKTElFbHNQNC9XSDhBbUo1WjZqSFM0aDhBQUFBQVNVVk9SSzVDWUlJPSIpO2RpcmVjdGlvbjpydGx9LmNvbG9yLXBpY2tlciAuYWxwaGF7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBSllBQUFBUUNBWUFBQUQwNklZbkFBQUFCbUpMUjBRQS93RC9BUCtndmFlVEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQjNSSlRVVUg0QUlXRHdZUWxaTWEzZ0FBQVdWSlJFRlVhTjd0bUVHTzZqQVFSQ3NPQXJIZ0JweUFKWUdqY0dvY3hBbTRBMklIcG1vV0UwZUJIK2V6bUZsTnZVMDZzaEozVzZWRWVsV01VUUFJSUY5ZjZxWnBpbXNBMUxZdFMydUY1MS91MjdZVkFGWlZSVWtFb0dIZFBWL3NJY2JJRUlJa1VkSS85WGE3bmV5djYxK1NXRlVWQVZDU2N0MDBUV24yZnY2dTMrRWNmZDN0WHp5LzArbkVVdStTUGpvL2txenJtaVFwU2NONnY5OFhld2ZBOC9sTWtpTEoyV3hHU1VvcGNUNmZNNlUwTlg5L2ZyZmJqZXYxV3RmcmxaZkxoWWZEUVFIRy9BSU9sbkd3aklObEhDeGpIQ3pqWUptL1RKV2RDd3F1SlhzZUZGekd3RE5OZWlLTU9KVE84eFFkRFFhZUIyOStLOWVmZUxhQm85Sjd2ZHZ0SmoxUmpGRmpmaXY3cXY5NXRqeC83bGVTUWdoOTNlMWZmTWVJcDZPK1lRamhvL043OTF0MVhWT1NTSTdOLy9LKzQvR294V0xCeCtQQjUvT3A1WExKKy8zT2xKSldxeFUzbTgzb3Z2NWlHZjhLallObEhDeGpIQ3pqWUJrSHk1Z2Y1Z3VzdlFVN1UzN2pUQUFBQUFCSlJVNUVya0pnZ2c9PSIpO2JhY2tncm91bmQtc2l6ZToxMDAlIDEwMCU7Ym9yZGVyOm5vbmU7Y3Vyc29yOnBvaW50ZXI7ZGlyZWN0aW9uOmx0cjtoZWlnaHQ6MTZweDt3aWR0aDoxMDAlfS5jb2xvci1waWNrZXIgLnR5cGUtcG9saWN5e2JhY2tncm91bmQtaW1hZ2U6dXJsKCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJJQUFBQWdDQVlBQUFBZmZDanhBQUFBQkhOQ1NWUUlDQWdJZkFoa2lBQUFBQWx3U0ZsekFBQUNld0FBQW5zQjAxQ08zQUFBQUJsMFJWaDBVMjltZEhkaGNtVUFkM2QzTG1sdWEzTmpZWEJsTG05eVo1dnVQQm9BQUFJQVNVUkJWRWlKN1pZOWF4UlJGSWFmc3hNU3RyTFFKcEFncEJGaGkrQzl3MVlTbzAwSTZSWi9nOXZacEJmL1FPcjRHeVJna1NLTlNyQWFkc1pxUUd3Q2t1QVd5UlpKc3lTd3ZoWjdOL3ZoenJnYkxIM0xkODU5N2pseno1MHpKb2t5eFhIOERxRFZhcjBxaTZ2OEJiSXRxU0dwRWNmeGRsbXNGV1hrdlg4QWZBVldnM1VLUEVuVDlHS3VqTXpzQUZnWnNWYUNOMVZUUWQ3N1hVbnJnRTFrdis2OTM1MjY4V1JwenJuSFp2WVJXQzdZdkMzcFJaWmwzd296cXRWcWl5SDlJZ2pBc3BrZDFHcTF4VUpRdFZyZEI5WktJQU90aGRnL1FjNjVMVWs3d05JTW9DVkpPODY1cllGaGtxalg2L2Q3dlY0R1BKd0JNcW9mVVJTNUpFazZGWUJlci9lZVliL01vOVd3Rm5QT3ZRYmVBdmZ1QUFLNEJONHNBSnRBRy9nSklFbG1OdWlKeWJhM0VHTm1aaVBlWnVFVm1WZWxsL1kvNk4rQ3pEbjNBWGhFT09vN0h2LzNCZUF6OEl6UWtNUG5KYnVQeDF3Qyt5WUo3LzBuWUlQNVMvMEZIS2RwK3J3Q0VFWFJTL3JmNUhsMUd0YjJNMGlTcENPcENaelBBVG1YMUV5U3BITUxBc2l5N01qTURvSHJHU0RYWm5hWVpkblJ3Qmg3SjkxdXR3bWN6QUE2Q2JHM0dnUGxlWDRqcVVIL2ExQ2t0cVJHbnVjM2hTQ0FNQjMyZ0tzcGtDdGdiM0tDUU1ta2plUDRXTkpUaHJOTlp2YWwxV3B0VElzdjdKdFE0dG1JZFJhOHFTb0VwV2w2WVdaTm9BTjB6S3haTlBlaHBMU0JadjJ0K1EwQ0o5bExuQVJRTEFBQUFBQkpSVTVFcmtKZ2dnPT0iKTtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOjhweCAxNnB4O2hlaWdodDoyNHB4O3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjEycHg7dG9wOjIxOHB4O3dpZHRoOjE2cHh9LmNvbG9yLXBpY2tlciAudHlwZS1wb2xpY3kgLnR5cGUtcG9saWN5LWFycm93e2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjUwJTt3aWR0aDoxMDAlfS5jb2xvci1waWNrZXIgLnNlbGVjdGVkLWNvbG9ye2JvcmRlcjoxcHggc29saWQgI2E5YTlhOTtib3JkZXItcmFkaXVzOjUwJTtoZWlnaHQ6NDBweDtsZWZ0OjhweDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MTZweDt3aWR0aDo0MHB4fS5jb2xvci1waWNrZXIgLnNlbGVjdGVkLWNvbG9yLWJhY2tncm91bmR7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQ2dBQUFBb0NBWUFBQUNNL3JodEFBQUFoMGxFUVZSWVIrMlcwUWxBTVFnRDYwemRmd09kcWE4VG1JL3dRTXI1SzBJNWJaTEl6TE9hMm50MzdWVlZiZCtkRHg1b2JnQ0MzS0JMd0oyZmY0UG5WaWRrZit1Y0lodzgwSFFhQ0xvM0RNSDNDUkszaUZzbUFXVmw2aFBORHd0OEV2TkU1cStZdUVYY01na29uVk02U2R5Q29FdkFuWjh2MUhqeDgxN01pbG14U1VCNXJkTEpEeWNaZ1VBWlVjaC9BQUFBQUVsRlRrU3VRbUNDIik7Ym9yZGVyLXJhZGl1czo1MCU7aGVpZ2h0OjQwcHg7d2lkdGg6NDBweH0uY29sb3ItcGlja2VyIC5zYXR1cmF0aW9uLWxpZ2h0bmVzc3tiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFPWUFBQUNDQ0FZQUFBQlNEN1QzQUFBQUJtSkxSMFFBL3dEL0FQK2d2YWVUQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFCM1JKVFVVSDRBSVdEd2tzUFdSNmxnQUFJQUJKUkVGVWVOcnRuVnVUNDdnUnJBSE4rUC8vT3IvNjFZNXdPTlo3bVoxdTNYQWVMTWpKWkdaVmdkS3NmYzV4UjNTMFJJSVVXK0NIekNwYzJNY1lvN1hHdjNleDdVaVpkNTdyanl6enYrdiszM1gvUi8rM3IvZjd2UjM4NlkrVHZLTmNmL3dkaFRMUGN2OXFVMndaZDc0dXRoMHQxODIxamtJWkxQY3NJLzZuV2E0WHZ1dHF1VTBaODVtbng4MFMvWnpncG5Mbk90SE50Ny9vZngxVEtYY1NOek4vN3FiTVEzanU3ck5RbU1ZWWQvNHMyajlhYStQK2dHYU1jWnJiMU0vdGRydmY3L2Qydjk5UDkvdDkzTy8zY2J2ZHh1MTJHOWZyZFZ3dWwzRStuOGMvLy9uUCsyKy8vWGI2NmFlZnhsLy8rdGZ4NXovLzJZSzVBbDJyZ3ZmNFVzYnBkR3JCNTJiQXZBclhwdXpqbWlxQVZTR3o1ZURtR1lYemhiQVptQ3JubXpkZHBVVSs4WTFkQU9ZZVhDdERVd1Z3VjdZQ0dINnVBbXlNY1o5bDV2a1VhQlBHTVVaNy9KNXcvNzkyL2Z2djlYcTkzMjYzZHIvZlR4UEVDZU1FOG5LNWpNL1B6L0hUVHovZHYzMzdkdnJsbDEvR1AvN3hqL0czdi8xdC9PVXZmd2tWc3dvbmdqZE9wOVB6SDNVM0Qzem1XR25aVlhuNGpDcXM3d0MyQktQNC84dEF6a1pzb1d4NlhycWVIWnltdnA0QUJDQkpoVFF3S2ZEVDhnenJaQ0lxaTVBaGlBQ2pCZkVCMnJQOC9YNjNNTTdmNi9WNnY5L3Y3WGE3YllDODNXN2pjcmxzVkhJcTVmZnYzMCsvL2ZiYitPV1hYOFpQUC8wMC92NzN2NCtmZi83NUpTdmJldStiTDJXTU1hRmJBbHBCTk04NVFYK2N0NnFvU3FrUEF3dVFsQlZLcUdORlNVT0FBM0JtdTdnQzVoTk9kMTVuU3d2QU9VVzdDNGdpVUNWOFNnbjVMOWhORklxVHNwMEd4STB5c2lveWpBamtZL3RHSlZFcHorZnorT1dYWCs3ZnYzOC8vZjc3NytQYnQyL2oxMTkvSFQvLy9QUDQ5ZGRmeDhmSFJ3cm1UalY3NzlFWHUycHgyeGhqd3RkSlpRY0FXUUlQTFBJU3NNSmFTd2lEOGd6SUtyd1N5QVRFNWo1bkFiUjVjMWRCVXdCbHNFV1cwaDZMcWlZc3FGUEFReEN5Ulozd09TQVJ4bWxYTVg1azY0cFFmdnYyN2Y3NStkaytQajVPSHg4ZjQvdjM3K1BidDIvanQ5OStHOSsrZlJzZkh4L2pjcm1VRkxPMzFnWURXYmx4UklzL1RxZlQ3b3VzeEpzQXhYQTJHYzdUQTlYZGdmZG9IYkZzajc2WDIrMVdBcmdJMWFnZUd3QTNxdXBxb0hzbWNiSTZGdTkzcXVnZ0ZhOWQ3TGVEdGdLZkFGSEJKK05FQnlJa2NKNUtlcnZkVG1oaEdjZ0pKU1o1dm4vL2ZqK2Z6KzE4UHA4K1B6L0g1K2ZubUdEKy92dnY0L3YzNytQajQyTjhmbjZPMisxV3M3SmpqUDZ3cmFNSTVFNFJaOHgydlY1VFN3a3F1b3RWNy9kN1R6NkhGV3NEL3FOY2R3MENRM3EvMzIxYzY4NlR3RFZJZGJ1eTczek5sZGhTSGI4STJrbFp6bm0rSW5CUzRVNm4wMzAyYUJGc0xoSERBS0pWSlZnbGZJOWpodnU1M1c1M3NMQU5ZTnhBaURBNk1DZVVIeDhmOSt2MTJpNlhTN3RjTHFjWlc1N1A1eWVZOC9mejgzT2N6K2Zuc1NtWVV5a25XRUc4NVdCc3Q5c3R6U0x5TWRmcjlRaTA4aVkxNVVaMExsREdMaFIzbzV6SzJqN09QVVREMEUrblUzdGs3WGIvMTZORmJobG9BTXVZMXpqTFVPTzNCS2VJRGUrWjhzMy9KNGdGbzRUTTVqUG11UmcyOGZvVUtLVlN3bzE2VGdBNW5weXdjV0xIZ1lsL1B6OC83My82MDUvYWI3LzkxbTYzVzd0Y0xpZTBzWmo0bWFvNWdUeWZ6ODhFMGYxK2o4RWNZendUUEVHMmNxanlmSE5GME04ZnVxRWlhT1ZuUnpaWlFOaDVmd1F5SGcvSERHZkpvODlRMXpiL3F1dTVYQzY3NzNJMlhLZlRxZC92OStkM3d1cVd2YS9ZVGRVZEVWM2ZoSXYvVml5cHM2WUUzeDNyNDNLNWJKUVM2NnpheFZHRnN2ZCsvL2o0YUYrL2ZtM2Z2Mzl2dDl1dGZmMzZ0ZjMrKysvdGRydWR2bjM3WnVOTEJhYUNNZ1V6QytyWlJpRm93eFV1Skk4WU1xY0NwOU9wcTV2YWdhWVU2bEdKQTFYUXFlamNodzZDajBHdzVuWUJyR3cwMUEyTzIwNm4wNEJHb3VOTnlUZnAvRndFbGhVZXk2blhySUt3N1FRV2RkeHVOMmxkTDVmTDgzOWdTUEY4YWh1L0p2Qk80OENQU3VxTWY4VnA5L1A1M0w1OCtkTHU5M3M3bjgvdGZyOC8zOS92OS9iNStUa2hQSjNQNTZtUTQzNi9qKy9mdisvaVNnYnplcjArQVp4LzUrODhidjZPTWRhNlM1ejZrZDIxZllDOWR4djdjSUpKMmQ5QU9TMzBmUE16eUhpVE04QjRERjZYVWxZSHA0S1FXM1crMXQ3N01OQjF2R0h4V3E3WGE3dmY3OCt5NS9ONUErSDFldDI5eHVQNWRiWXR5YVJ1NEFrc2JQcTY5MzZmalJ6WFJ4QmJQci9iK2IxOCtmS2xqVEhhQkJCZm44L24wLzErSDErK2ZCbm44em0wc0I4Zkg1dTRjcjVHdUJoTVZrMEVFbjlSc2N0Z1ZoTStpeGxKdE1BMjNSOEI2eXlzQXN0Qk9nRlhJS0tDTUlnVG9NcU5FdTJmWU1IN3p0YzczMmRRS2tDajF5dEFadFkwS3g4cElyOEdHSitBVDNWKzJIaXJobCsrZkJtWHkyV3o3M3crYjE3UDhwK2ZuOC90VXdHVmxlVmtUeVViNjhEa2ZheVdZNHp4TlJpaFU0RXBMSlBaVnJLK3U3SjQvbWdmS3FlTFc5WDJSRVdsSXRMMWRpeW5iRERiMytqWGdZalFxbjBycnhXYytOa0lMUDdGN3hJYk12eDd2VjUzeDQweG5sYldKRjEyWlNhZy9OMHBXNnQrWnptT016SGphakt3RGZvbmQ3OHpZVGRmcTE4dXA5N3pyMnE4djNJaW9CcHJSdEJsMEVaOW9nNVdCUkdPZE9IaklqWEY3VW90RmJnT1duWHpJSnl6WXZqRzVJWWdzbU1PeEhrejhPc01TclZOV2VxNVQ4RGFPY2JFdjFPZDVyYnM5YU83WXZNZXQ2M0VrRisrZk1FeHErTVJsNC9MNWJMWk4vK2V6K2ZuWjZLYXp1TXFYU1FWTzVzcEpYZmxIQUl6ZXMveEpzZWNrUkppRE1vZzlkNlZmUnJxWE1yNktwVlYyN2pSd0phY0dvdk9BTTF6TWRRTW53SzFBdWJLNjNrZENDaHZJMUM3ZzB6OW5mL0QrWHplMlZqOEg3R3g0UDlkdVFsc1lDcnF5TjhYcUczSG0vMTBPajNqdy9uK2NybHN0dU0ralBtbXhUMmRUdVB6ODNQenQycG4xWHNFSFgvYm5QYVZxVm1oMHh3T3QwbzZYTExBSGVQVVUyMDN3SGZjcnNwQ3dtVjNUcnlCNXMwTXNlZWc5N3gvQnd6Q2pCbGJCK3BSQVBsYTBCVlF1VDZWNlFIZEJsajNkMEtHMTQ3YitEcXhRZVV5bURPNDNXNGRRYXIrVElqd21BZDB6OC9oNjV2ZjAveUx2M1BiNVhMcHJ1L3lkRG85czdFVDBJK1BqNmRLSzlWVUVJZUtXUVdQQU9ySjhMS2Q0dkUrdDkxWTNlN1VGbFdhdGcyVndKbmIrSFBtdHZtL3NmSzU5L09hV0YzeC9lUDFVUEh2QTVERFlEcFlYZmIwZHJ2MVYyRGtCa3h0dy90RVdWVmxYV2RDOXBGWXM1L2pmaDlkUy8xNnZXN3M2bFRHK1RmcXN4U0pIeGtYWHEvWGRyMWV1NExzZkQ2UDN2c1QzTjc3RGtMK3pQbTVqU2RLTDR6UjNBeFFkNnJIa0xrWWxTb3dzcnE3em56dTZ3U3dkc01KT1htQTVmQmNqeHRnTUdCWUhscjV6b2todHNNQ1RnWExRT1c0WEM2ZEV5RU1wckw4bUFRelhSZ2R1aXgyeVp6b3J4a1lzRG4zaEIxVmVNTEdzWHNWdGdsMnBXOFMzc3ZrMHZ3N1I0aE5hSHZ2NGNBQ2w1SEZ6d0lIMEtjNnp1NFhqRFBSL2pwQVZ4V3pPMVhrMkREYjN2VGN4ZUdVMWlXWkhrbUlEV3ppV0t2aXJDSjREcmF2czZJSi9HRzZjVHFXZFhEeStmQXJRRFZWa0xxa1ZqQW9aSUlUZG1tSXFYd3FhOTVOMytNR1lvWlFkUlZOTzUzWTF4UmtoTzE2dlk3ZXU1MDdDYTlsSm5iR3B4T2VtUWhTdy9BUXNtbXA1elU5QmlVOEc2d3ZYNzZNNi9VNlBqNCtkbzBCejRDcGdpa25UVWVEcXdsS0JtZzN1NE9WanJaMUErckFjZ2FlaldxNmVKQ3ZDWUZET05Td09nSFg0RVFSdzhseGJ6RE9kRUs2Z1ozSGsxYis4ZzJvMUpGdEtYeXYvZkVkVFh1V2pXWGRBWmlCcDZBRGVEckNGaWltN0I2WkZuZWVJN0d2bS9QTWtVRFg2N1c3eEk4YjBENy92OGRBOXFmTjVvYUNmNzRXWmpIMG1mMWNtZlkxWTBKVUZtVnJUV3U4dXprTmNMdEVqN3U1RlhCVGtmQzZHT0E1cThZTXhPOEtWdkY2c0FWR2RjclVic0tPRGNRS2tMTU9NZG1seHVtNjQyWXJQbTI2QWxoWlcxWUIxUityckdzd0U4VGFZQVdlVU14ZGYrV2p3U3ZaMkVmM3l0T3lmbjUrUHBWUEFhcU9uNDNNdE5CcXZtamp4YmpNNGxaalpZNGdxTk1JNWt0YVcvc1lLTndTKzlsRlF6R2lobU1DS1BhNytaMFY2RWIwR1Jtb2J0cFg4SmxqV3U1Rk1MTjVqYTZoRzlrd1FnWnFmNSsxTkg1VXh6a0ZSZUNkV2hKOFhkbEdVa3hPN0hSbFlSbTRtVk80M1c3dGVyMTJUUEpFdy9ybUVOM0w1U0tISVdaZzlteitwVW9LT1lxNWJKVEpkWDJnbWUxVWN4TVpRRmFFUUlsSGN0MzJNK1kxQnpHa0d1emZpeUFOOXordWdwbFoxc3ltQ3JEQ1lZa0d4RFRwSTlSekJ5MHJIeWVEVUMxbldhZVVhRDluNHhrTnlZTUJEWnR6WjNCKytmSmxZMjFYRkRPY0FSSmxhYk95aVMzdUNwTEk5anJaakNEa2FWdmNDQ2p3b2duS1NoV2R6WFpXbFpNdlZUZ0Q4THBxbENMcnFnYmNCK3FZd3JnS1lwVDBjY0NxYkt5Q1ZhbGtFYWJuL0Z5bm9nQ3JQS2ZxZjUxeEo3c0dCMlpYY1pteG9TT3p0angzMDBEWmk3YTAvMkFJUjBVbEJhZzlTdUR3NktjQXpsYUI3dkhadldwaks5MGR5cnE2Ykt5RFVaUWJSMEIwNWJpTFFrSEljU1VtZ0lLK1N3dXFnSENub2lvMlJRVTF5aitCbkJ5OXBwaFZLTEd5QzdaekZLMXB4V0srRThJaFZDV0xOL3VMdG5VVTRheW9ZTG9hQU56OEZkdGFTdlk0cFYwQkVXMmxzNjFjenFsbEJLcFR5S2dNQWhyWjFjZGMxUlJPdFBtdldOa2RjS1o3Wkt4YVdqaVBMSk1wcDdPWkt4QStycUcvb0pManhmMHBuSmxxTG9EWm8zZ3lVMG1LR3lzMnRhS2Vjai9kMUMrckpTcGxCcWxUeUFxZ1IrRDhLaktsbVJMMmd0VWNBZEN0c0wraWpDTlQxb3FxcWtIMk9IRWJHNXNERm5VZzVBYSt5TG91MlZVMXB0ajFTMlpRcXYxT1JaTjlJV3pSZmdhUkJ4S29CRThVV3lxbEpGdHJJYzBBeE5qU2plZDk5Q1RZL1hEZlN6Q3o1TTBJWm9WRXNXblBGTlRzbDhvb1ZDMVR6YkdncUZaTkRTZ1Z3S0srMXNHRE1LcXhaQ1dHVk1EeXNpRXIxalZTUUpVWXdqNWlIT2xUaGRIdDQ0U1FnOUNOK25sOEQ5ME5NSWdBZGdyNDZKcVJpUjlJOHZSZEZ2YnIxN20veXhVTUtqTkxNaVZVQUR3dTJDV0doaGkrRjU1VFdNOU05Y29nem1zMWRuTTR1T0YvTEFFWVdkY3FuTTd5Rm15cTNJZndtT1JPZDdZMWlGV3RPam9ZOFRvNDFtVFY1SXlzZ0ZGdVJ6c2JXRkdiTklJSkNEdjFkT280bFpHN2pXQndSRnRWVEt1V3llQ0J5SktPYW44b1ozZXA5WGRkTmwwdER1YXl3THo5Y1hQWWVEQUEwU3BrQk85c2JWY1RPVldsZFB2NHV5ekVrenhIdGp2b25Ib1NrRkVXTm9vMWQ4RGhjUXB1dGQycHBOb240QnpvQWlKMWhCRlFnMGRWdGRiR0hIRFFXdXNobU5FUXVrTE0yUU8xRzJZOGJnVFhxRmhjQkpqN0VqUGdjUHRzOFVTOHFQcFBCL2RYem5PaDVaNDM4dHpINWVjNlFnck9LclJSZktteXNCbVVEQitQaFlhYk1sVlBFUitHQ1NJVFR6cjdhbTJ0QXJIM2JnY0V6UEptK2NyNWpKNE5uSE5GRFZyRlhjSTVMZTlrNUpudytiZWRiVitGZlJ6WklIYU9PYU9zTFkwLzdVR3M1OERqckd3S01JTUZJR3pPRVcxL2pHc2RBdENONmhFQUk0aEJlOVlYZVJST0JTVlBBVlBBcXZJTTVieDVoVktXQU1QNnpCUnkzaWVzY3JpZFZkRkJpbkJ4WERuRzJHUlkyWGJDdnAxbGh2R3RPOUJ4dTVoOTA4WFF1NDJsblNBck1GZGl6TWltOHV3UkN4UEdubk9TOGx3cG5iT2lEcVRBanNyUk4vUGNvQVNjQ2JhQUNxVk00MHlsbmpqVEJzK2J3V2xBRzIzL1VLYmRraXdLV0lRUEd6V2FjenBvU2x4UEVqODIyY05Xa3BTN0Z5enNEcnFwZmdwRzNqYWh3MnZnYmFTUUF4dUxXWll0N0p6eU5lOEpvWnBOQWN2REZPZHcwd3FZVDlBSzFyWnovRGRiU2xMUHAwcnlJeGdRSmxLOUFabEVxN0lPWHBvaGc5UElockNuZzg4SnNPeGlWNFpXQVlmZzRzaWt4LzhreTJaOWw4NjJ1cXdyZnNjSUg4K3VnVG1WR3lpZGRlVllVZ0VNbjRHWnpnMTRFd0lzaDlzeDJjS0tpV1hSZXVPRTVnekdPUWdkbFJLVlZkbGV2cWIyNzlYcTBRbnN0czJWRGFCTzBjb2V6c3J1V3RIQXB1NnNLRzRJQmhOMGFHVTJrTHJNS0dSVE4zSG1iQ0R3S1YxNHp2a01FREc0UWZaVnNwVmxhTlUybWhjNVRFWjNOMWgvenFUaGV1THBXMDVaV1RHVmpiM2Ribk5teEtaQm5OOEpxaWRhVkxLQU95QVJOTFMrTUI1NFoyK1ZhcW9NTEtyb1ZCbG5nZWZuVFBBY29ITldDU3ZsZkE4Q0kwSEVtQk5CbkJsWHlNcnpVN0E3V1ZtOTRQUHFRMmdtcUt4K1dER3NudmlsbWNTT0JKcU9LMW5ZeUFJenVBeWVzcTNVZFNLM0tmV2NZS0Q5NUhtZllPVTNxc2VyMkN0WUVVQStGcGZxZE52Z1BCWlVCaERyR09OUlZsUXNoOHJMY2FVQ3lrSEcwT09Vd1RsTEJyc2g1c29FTUdlemkxRTRIUlZ0MWljcDV3WkVGWGRpYkNrRzhZOHZYNzVzYk80RTBpb205eitoalNpT2Z5M0RocFhJdHBWaEUrVUdRZHZvV2p0Q2htckdIZjRZQXpLZ0JObkd0dUp4RkNlR2RoVUFmUUxMSzhrQllBUDZndkZKWmFqTUczWGt5Y3k4S3VDMHE0RXl5bXd0d2R4ZHYyTTBtSUJ0SzBMS25mNjQwajAwQXVxNGdVa2RXR2xoczIycUpjNmRaQ3NMMTlveG5sVEpHNFNZVlJJR3BEOFRQRkJ1TTZPRWxiUzFwbGRpZDRtR0F5TjZaSXVwYkM1YlhKTjlmZHBiVGhTeExVYUk4SUcxWElZQnhXM1RqczZLUW9zS2N4ZnhjUW1kbndSR00xMEduRmNDeTJYWXVuTE15QWtkZ2s0bWVQaWN6c0x5Z3RoY0J1dDZnb09xUzdZVkZYQURMamFvc0I2czZvZmNaV0FaU0lSWXFTVWtpell3dHRZYWIzdlVPUTl3MkhSeElJZzhXd1JWZUU2OHhpNFV0TDN6UnBoeHBsend1WnJjcVlDcTFJM2pQSTVkbkpJeWdFb2hNYlBxVkpTenJ3enhCSlRzNXpOK1JlVVNneGlrUFFWRjNKVkJlTlF4YkhFTnJFTU52RWRGWlZWOWxIOStPUkdFc05aUXB5VE5jNEMzQUc3WEY0bmd6cStEck8yemJ1YWFPWGdkYUZjZGtFb3RvU0ZCVlgycUowQzhPV1plRzRLR2xwZ2hBMFhmVE9QQ3FWMnFxd1EyNlFXZkYyUE1MaEkydzFsVkFhMmFQc1lkMHphMjVNUVJ3Z2NaTjZ1UURDaStaeGlENFhFTTJrWnhPVDQxRm5abmFSbGNwWm91emxScXFkYlFWV29wUW9TQjU4UlY1MGxCTnJIaS9Bd1hTNUxyd0RWbHBZM0ZjM0J5aVlHYzUyVHJpc3Q2a09YZHdJbkFRdEpwcDVRY2h5YXF1WU9WN1N1K2Z4Vk1hVjNkYzBSRTJTNm1VWTBnTHQycE1jWXFyS0lROXcybDFncFFVTXRRWWNtbWJ0NURUTnhkaG5VQ2pRcXRiSzlTVVN6dnJDMG1taGhFMWUyRlMyK294eXB5L1pBU3V0a210angzdmNCQzI0UFg2NW5icWtCQ1JoZmpTOWtJWVBuZWU4Y01hZ1ZPaEkvM1QxZkFtZHRBV1pzQ3N3VEpDa1FWTmEwcVdLU0tQT3BIQVVoRDlEcmJWY3lvWWt3cWh2aDE3dllBYXlYTFF5S0dZZHhsVURGcDQ5NHJCWFJqWWdPMTdERFlldE5JVWovZXpwNlMwbG5scEV3c1dtSk1rT3dzS1hlWktFQWpJSG4wRVFKSVNhUkJjTzZVTUlOejdwL2JFampudzRmdCt4bUR2a3N4WDRHMnJJcmlzN3FhZUt3QUZNUDJPaTduNGNyaXVad3RwU1V3cGZMeFNuT1JTcklxdXNjNVpGYVh5c3FSV2ppWjJEeUFXRUlMMzV0VlNvUUVsRkFDak9lR0dTRTdBSEVRZ2RvL0xTdkNPZ0dCdmt4c21EYnZsUzNGcDV2aGFCMlRBR3FSS3JLS01yaExWcGFHekVWalowT1F4RGhhQ1RBK1F5UlIxZDE1YVF6ckpudEwzUmlic2lwakc2amxnTDR5cWJTMHNOWWcxZTg0dmhiQlZyRWxLNjRDVWNXWVhEZkt4aHBJdXhpVkpaVXhzYk15L3VSQktUTlJRNGtRM0xkUllMUzBySmpSUGxUUHFZNmdkSnNFRGMrYVFYQW4rSGdzTlVDYlJ1RjBPajB6d25BN2JXRGtiaE81RW5zMDBxZVFoUzFsYUJNbDVNL2NBYXhzTEY4ckt5cWwrVGY3RUxMRUd1L2l4aWltZEN2bzBUamZwakt3YWdnZW40ZWg1djdMb2tMS2JMdXl2SGhjWkc4ZGhHckVEeDdIZzkzWnBwSkY3cUJxTzNpVnZlWEVEUU5Jbnplb2U4WXE2ZVBhWkJaMkp2aU0zVzJVQUdvdGVrUkNBR3E0RWtGMVgzRE9uUjExeVJzQkwxdFJhMFBWY1ppTkZYWjJjMzRGc2t2b21JblFRNmx6cEpvWmJKeGs0M053S0pGQnF1SlNzckJ5SHlkeEtPblR4UUFTQm1TM2orSk1uc0hTbGEzRWM2SzlWV29KVm45emZqd09NN2hxWUFBcUpRd0UyYTNuQTQ4SjJRR2VnUmtwWk5pdlNZK3lzM0VrS2Q0b0pJd3N2SUhsM2NXZ0x0NWs0Tkg2T210TFdkcHVyT2t3RU11cFljN2VNdERSaE9jSTJ1aTVKaFZJelh6THl0by9HQVB1Wm95bzh3a29kdVZnSmdsQ3Q3T2hHYmdJRDRNcTRzaSs2M3pVUzFGdUZGWEZscXlhajJlbUhsTE1jQnFZdTBGTXVSMjhCYkI3bE94Uk1TaUNRWEZoQ0t1d2toWitwWURpR1NnYnNLS1Y4TWlTUnN1SFNJV005cmtsUmlJbFpadXFYanNRSzhvb1lKTWdxM0pLV1ZraEhiaHNWeEZVenRoT1dQa1lpamNieDU0SUtzU2RUK3VMcjNjckdLeW9ZZ0ZpR1I5aUJrNGtmbG9VWCtKSWxRUlFxYWJtcGduaHF0cFFwYjZSVlExV0g1RG5yUzRoRW9HWnFhZXJRMmRoRmJ6OFhlUHhTaG1EYm83MGVJU2pvb3JPMnZLOFNKWEk0U1VtRVU0eldLRHpVRHRXVFl3N3hYbGJTVEVqNEZSZzd6S25Lb0dSQUx2MEdzOVRnYzFCcEN5d0daUlFBdHFWejJ4ckJjQU16RXBmWndGU2EyRzVXMFFCRmpTTWFwV0FFRmEzSGNHTjdDeER6RUN5SWtKOTdxd3JxV05UV1ZvODc2UFBzalBrajJ3dmdyb001bExaS01FVEtWcWwvQ3ZuV1ZGaUZhL1N6SlVRd2tvWnNyNjdZNnZsU1JWMy8ydG1OVE9ZM3ZuYXhZd011b1BLcWR6UjF3N0lxSHltbFB4YUFUaGZVN0tvMlpYWWo0QVlKSEwra05kS3dSUVlFU1RSYTVmc1VaL3JWQzFUTVR5V1Z5WW9xTnR1emFIc015djJ0dm9hcnhkZnF3WWdVMWF4Rm8vY25xbDFGR3NxSyt1QVJPVjhCWDRHVThXY1pUQVRpMnE3UWN5aTBPMFYrR2hXQk1OUlVrbjhIMVNzV1ZFNUJ5M0dpMEVDcVVlSm9CZkF0RGE0YW1rZFhHMzdBR1A1R2dlYjg0cDdVYXpwb0tSemRGemVROEhrb0hHeHByS3kvSHBtNXQxMnA0N0o2eFRZREV6N3VJTkVYU3V4WVh2RnNrWUFjK3lTeEg5c2Y1ZnRLelU2SWJ3VkJjVUdnNWU1Rk1DRVhTRXJaUjB3R2F5VjE5d29NOWd1UGpUcUpkVlRxUjR1RTRuSm5MbGRXVmtFQ0NaTGQyVkxGK3h0YW1leDdJcGlyaVNEVXB2cnBuOWxyd0dNQ0h5cHBNSCtwczZMSUxzdUZHVWoxWEVPWGlxYnFTSFBVS25DbHBXVjY4a3F0VVJWTkRZNFROYW9jeWtvWWVUVTVuZ0dFUWEvUzFEbm5FNEFlWE1jS2pIUEFtRlZqQ0JFTmFleUxWTkhmcjNweDh4VXN0Sjk0aElwZkg0SEtFL2VEYUFySzZsU3lWVkZiZHQxZ3hUSVZrM3BwcFZsRlhpNHBFaFZCVE9icXVvaFU4NU1MWG4xaWFodlVrSEpqU0NNYzAxdExGdmVWVkJ4MERvZE02amZ0Q3U3RE90SXpZeHJjMHFwMUpHUDJheVlGejJHYjZIdk1yTzhjbkd0VjZHam0zdUltU2ZEMkdwV0s2dW93YlpHTXhGS1FDbzFwT010Y01YRnBSc3QraFhHb0FvbUYzc1NUQkdnVGdsYkJLV3dzUTN0WnFhWVNwMFoxQ2ltUkRXRmNDSlVQWUowMEJJNUZrS1lOb2lmdVF4bU44OFNXVlhXTE1hVXFxcWdDMEJtUUpSNnNrM3U5TkNmNmpZTFh4QWZxc1lFZ1ZMQWhSWTJBdGd0ZmxaTkZtRnloeGRyTGtBZFdsazREODhNMml4SHllcElkaE1IckcvaVIxWkd0cTBNR3BiRGJSUFlPWGVTWTFNNk55NFpzdHZHU2t0SytYYkZQQVRqMkQzNzFzYVBFc0FNWGhYcnNaMGttL1hTdGtoaE15QmZzYTZ1WEZaZTJWQ2UrWU1yMStHS2d3clF5TllxMVZSckIrRWl6QW93Nk5zZE5LY3lWRWtZZU03M3lzNnE0a0FIcDZCaUZrbFRrSXJWQzVvWVY3dXp3T0dDejRVSjBTdHEybFdNSnk0d3RiK1JldEw2dFpGaWNuSm1CdzVVakN2WFhNWlZKWDJNUWtiZitYTjVFV2Q3OFZ6OC9KRXNNWlRCaUtOenNtMWluTFJVUTc0SDROaWRhcUk2OGo1c0FGZ3hjUnZlQzdpZUxKWGZRWXhqWloyQ3NpV0Zld1pYSm1CSWxaMXRkdHJYNGhTdWF0ZUtzby9SWk90T0tXMm5tcTFvVHplSzZkUldBV3UyTlJWYjRocTBTWG0xR3Z0dWdIcmJyNUlYcW1Ta3RnNUN1REUyTVNsUHdzWTVrTkUyV3AzQXFpWmJXVkxBeGlCRisyaUJaYnVOajZNQjZyc01MQzdGeWFzYVlEeW83S2tvUHlFdHczcEVNWGZQdnhBSmkyakFRUWdqcnowckxJWlNXWmxJb05od2Q1eEs0QVI5bVlOaldBYUxybnVJbUplQlZOOXpCT1JPYlZ2YnIrbVRUZkZTRUpMU1JuSG83aEVKb0lpOE1GcWp4bXZnbUY1VVJaejR6TEZnWlo4Q3R1Mlg3Z2dWY2NLbTlnVnhJc09IcXhYZ05NS25GV1pZbmYxZEJuT2hheVhxMTdRd0ZsV1cwOWVOS3lWSkZtWHFhT05HQTVhQ2VnTWJKM1VVa0dZMWljM25LV2dqcThxZlZZR1FHMWdSdDZyczYyYTZIaXFxVU9xZGVzSzVObVg0bkdvZkpvaUUxZDBkRjlsVlZrdlQxL2tFRWFhQ29ZT3dGcGNWY29MTSs3NjY5UHhDOXJXcWt0SDBzV1VZbGQwVkNwdUJaL3N0VlJjR2d5OVdYMitVMVF0aGk5U3pBcVN4elpzeStPaUZ6QllueVNHVjZHa3U0NHJEOEJDT1pCVjNCdkQ1K0FLUkhOd01Fc0I2RXpIbkpwa1RBZWlVbEVHa2NFQ2VCNkdEWlRwNVlFSlRsdmRya254WWpUbGxNa2ZOdFh3RGpNN3VWaks1SlhVVW40M3JycXBLMmp5dGF4SFcwTTVHOERDOHJ0SE1ZczdLU2dkdVZRTUdUWUZxRnZWUzZya0Qzc0RKNDZhZmRZRndvcTExQU9LQ0JMaHZ3b1VnYzhJR0FOeWNSNmtuWnJkSlBkc3V4bnlqZmQzRm92VGxSTWRFZHRPbDVDTVY1RUhzWFFCaXM3VE93dklEWmFHajJWbnBiaDdjcEs2M1Z3WUVNTHdxYmp6eWw2OTlzYXdGRmtGMXlxalVVMzFIZkM2c1cxWkZWRnVYVlhWZ3o5a2VFYXcweXMxbFdmbSthelFBUVNXQStoS1lWZnNaalBuY0FjVUI5b0lheXkvVVpYUk5ja0RHamk3N0dzV2J2Qm82dFByV1BxT3lWa0JVcStJTmVxcHpOZFlzL3UwaWZoNXFtcHFJVyszM0pWU1Vjd1k3MEtMNFU5bFlkVTZsanRTbHM3bG1maTlnM1l6ZVFmVmthR0ZhVjNPRENuYUQyTjh3c0VERmtsRTNSek0zWmdoZFlrV0hzc3pxNzBGSWVjbktrVmt0OGV6TXpScTlia0d1S29qUkxCVlNvZDNZMXlQcUtnWVc3SlJRVFBWeXk1eElZTGpPZ3hnVDUyUktKVVkxZE9ySWlSZDRmdXRReC9BNUFjU21FanowdkZXcmtMenZiV0F1OUhPV2JHZ3hGazFWTlRwbkJLazZUZ3dpc0kvSGN4WVhQMXVBV083MlVMRmxCVHErYVN1MlZUVXM2aHJ4TTJDRitoRW9yMVZJQTlabUZVYWFiMWxTU2dac1ZzNHN4ekhsVkxvSkhyOUg0RGhPTlRrSTFYQzAvd2lZMk5vV0FHNVJsbkhGbnE2b0xjY3BRZGRNdUovTzE3SlZBNU9ITGkwQnFDenRxN1kxKyt1Y0NkOThxTEk4TUlIQlYvY0tqeFFUbWUzaEZCUzNNeUNxbkRzdXltMm84MEhqdkZGVHRyVVJtTmFHSnNtVmFoSW1qVHNVWEt0UVpUQVZzN012djgvK2Z6VXJaQVhjTEo2TTRrb2U2WFAwYjZTbVdXTkR6eVVwUThibCtMdFd4NHR1cVozNmNSWVYzeXVWeFBOd3ZJaXFpUUNTbXU3c3JnVHpSNm5reWhwQ2FyWHdGeTF2R2Q1aVAyY1kwNmxGcjVOamhoZzFZNitOQjI4ZnRiSzgzczhyZjdrTEpiS3dERlBiTGcyNWEwQWRaSkVpcXI1cGhpeEtNRGxSVXRjc3NxMWhyaUxxR29IK3plTmdWbTlPZW1qc0VUVjhKZEYwTkhua0lGeFdZMU9CNFlycDdydFdKN05nQUFBUFhrbEVRVlEzb05zNW5wbHlWZjh1MkZvTHUxSnJIdmVhWldRanFBa3NodEZhMmd6c1NHM1pwa2J2ZzNIYWZGOXNsUFBsbGRqRmxLODBHeXNtOE1yNE1QaG5lTldFTlBHakFJcG1pbFRQQVRkVFJUWGxDQllIWUFRdVB3QTM2eElwV3RHTjRxM1kyTWhpR3NVcHVTU25sRUpSRDhQb3JDN0NGWVZ3K0Y1MXFUaGdhYnhzVHhXekNHWTBaU3NiM2xmcUF5ME9QTmpOeTh4aVFRS3NIWUZRMkhCWlZ2VmJCdXEzbTFvV0thanFhb25zTTZ1WlVyNkNqWFdOWjBsNUUzaDNqVVJtYTZrUDNNSklpeTFMbStrYWhRcTQxTjJpWmphNXNqdGxMWU5aSFpySDZxVUdtNHZNYkRwNlJ3MkNGbXZ1eUZrckJjQ3lNdEZxQmFFQ21zSG9LOUJaMkxBL2xKY1JxU2FEcW5hV2JyWmRHYXozRExnSXZCbG40d29HenRieUpHcXNsd3hraGhIclRqVFlGWEN0T29LUzh1TGRvZlZkQWJPeWxHVTZubFlwWFdadHM0blhCcTZXeEppdE1Ob2tIVUpuYm5KcGxRbSthR3BZMmE1R01WMlFEMWhSdWJCUEZLZHVtZjVPSGtMSHowRjlsdUU1a2pCalJhMG5GRTVDVUdxSHczMk1talo2eGtnSU5WblNuWjFWWlN0SzJxS2xSYUxsUWdLN3VUcTdKRlhKd00rM1NPRUt5aFpOSSt0SjBJNXFNWXk5azJxSkQ3ZFZXZHFLWGEwQ0tOUjBDY2pnK0IySVl1MmZjQlpKWmtNRmdNMTFyMFg5MndpbGdoRkdnelZuZXhscUI3eEw5bVMyOVNpWVVWWTJuWE9aak5CUnN5RHNRUFJXVzVoclo0WGNkQzRIVldSYmpnSnI0c0ZvZks1U3pqUTdyaEkxVWViZFBkRWJqNnNxSXZUWlFaNXZhMDhyQUJzQVcwVXhlV3l0QWs3QTJLSjlacHh6Q2lvQjI0WEZ0WUFlWFl4cjZhblNxaExncHBFcVdiR3dMdW5UZ3JWK0lqV2xMMjlsamFBbDRFUU1Hc0VycDRhcGVaaXF1d1JYTFhBcU9DZXJ1MzJtbXlkYzZvV1RTV3BGQUdkemVUQjhSVEhWTUV0bE05MENiYlFDWWhQanEzZWdZcjFGR2RZSVFqaXVER1o1elovQXpvYktHT3lMeHRpNmM0Und0djJhbnlXbExJQ25sTGh4SlJYdDZBNWViREJXRk5PTmJ4V1oyZDAybW51NFM5WUVDcGVwcFYxelNXUkJXeEhZelZJdjFDWFNvdXdxcVgzakJCQkRaZFlRYnBUUVc0WlFsUzhyNWtINHN1U1JtZzIrKzNKTjEweDFQYUFtRWttdFlsRWRlR3BKRU02a091Q3FDUjIyb1N1amo1SVYySGRUMHpqNXByTEtUalhGQVBqZFFseXE3eElCeEFRUDV5TWN6RzRWeEFLdzBuNmlsWjJRQmNlMnBMdWxrdXh4cW5vSXpGZmdxeXFqaWw5UzFWTndCckZtZXllb3BzOHlPalpVeWJaZGZTOEN1YVRJSnVtenM1dE9EYU50THBGRFEvUGNKR3dlTGhtZUwxbkIwS3FpVURTY3NpVVZEODlEaTNIdHJLdFNVTHczUkxpeWdaRCs3c0Y4SlRPYmdZc3JHdkROVUZSR2wxaXkwTGwxWWtVYzJhSllNb2c5MjBJOHFXNllEQ2cxTXFrMEpISkZLWGtiZ2JScmVJK3FwWU5PWkhyVmNEVWJhN3Bqc3BoU0pOdEs2dXBnUk5BVm9PUzBtdWdCZU40YklaZ0hodVBaL3MxRU5hWDZLc1ZyK1lOcmgxTmI3aXBSMFBFNXpiTlJlZ0NickhSVXc2WWYwN2RMQkpsMWY4S0I5YXMyVjFuTnFBc2w2MkxCQmhlaHdhbGVya0htQjFKRklFWktTRXVzZGw1SlFqMW5KbEhYU0NGMzQyZ0o5Q1lHclhlbGtuSklYcVZQOHNEK3F0cGxDUjNYSDJxZktxMHlnTXArS25Wa0t4TmxaOG0yWWtJbFZNaUNuWFV3bDdxem5CS1N2UXozbTNQdDZvUWJYTzViNUZpeENoL2ZIeFVRVy9BRWNLNnpDTnFLUW5MOXN5d3FtS3V3dnFTWXpUL2FQVk5OcFZ5aHZSVzIxYXFjaUNzamRXdkJ3SUxVdmg1VnlDemJXb0MxcEpqSjY4MENXc2wrdWRLQjZUNVJ3RzFtbG9obmxwYmc0N2l6NVU5aGEwRkd0bVJMRllCdE85OXk5N0FwMHorWkRUQW9nNmtTTFpzTUhnL0lGa2tncDZDcHZVMlUwY1lWU2RubWtqd0JkT21YYnhUV05XenVJYmlwTWlvVnhFY2taRW9haFNPaXkyTTNLMGpjQzFMaFZEd2FxRzBadmtjV3FDbnJHNEdJeHlrcnFsYldkdzZMUXlCYVpSOEhtTFJJaFFXc0hzd0Q0MlpYVkxOa2Y5bCtGbFcwSFZRMmx3RnNDL1oxRmR6bFFSMEthUGZvK0ZkZnUrL2R3VlJJQ3UxQ0dSN0FFSWlBaGMrQVpVRjBrT0JhUHhtVXFnNGk2NHZRblU0bkZEWUo5TnorMWZWWHZlSDlxbXIra1BJTHg4b0tjUlYvQkZieGJFMEpNVDBrU0Q0dzZML2xOWThvY3NxYWdWZFUzQTNNanhoeGNHdXF6c1BINGlycGFvdzFxNk95clZqdnA5TnBjNTlFOTFMbGRib1lWekpXZGltV2ZBVzJTTkVLY0RhWDJGbUJMTEEvdUt4bG1oaDYxM0lzMVVSUUFwYktmdHR3eEwwMnE2T254NXBReFNiUG9qQWcrdjVoQW5ONkxIVlJEWElzdkt0UmppUzBxSlV5WlRBWFZiQUs4MkVsRkpXYVFkVm9xVUMxVW50N0JWYVRRdWRNNlN1cWV4alFKTjQrMGljYXh2L3V0Ykt2ODNFVGJUOEg4Z2pjT0t4T0ptYlVhNk9PVlhodDNkRlk2ckh2OVhvTnpGTGNlRUExbzgrcEttMExBSFBIWjJyWUtqRnEwaGZaRml4c3FISmdEM2VENW4rVTBrYjFtRmpYa24ybHZNU1NPc05FL0NkSUFLRjBTeXRxNnVyT0hVTjVnd2c0R1pvc2dibWdnTTV1Y3JhMnFyUzJJZzFjYmlCQmN4WXpnelVETkxDdkw4R2JaWE5wNk9SeTNMbVMrS2s4M3pSSUFLNkExaW9LYTJJOU5hcEl1aVVGZGZDOTc2NlBGWlV0cVVyNktiV2srelpVMWEvWnJJWEV6dHJqVE9mejdod0t6aUNlWElhcmFIdGJaSU16KzJwR2dhekNtdzRxV0FGdkVkaG9kWXAwWHEwcFY3RzFZV1lXYk80cWhHcTQyK1o4Qll0ckxXdmx1TlBwWkFlYUZGUzF2dWJQZ2JneHNxY3BuQWFzekJvdkthRm9EUThCR3RqZlVPbDROQUcybm1RVjA0ZmVKZ3VtdlgyZnNyUUVXWmdoTDBKblZkWWtuM0RPWkllUk44NlJxUFdDbXN2R1ZxRU1Sbnd4UUF4d1M4RU1ZbzNJem1ZMitCQ2NMcDRNS2l1eXVoSW1hbWxiWkZjTm9ObDd0cCtSSGQxOFpqUUlSS3lYZEZSaE45OC9oeUtxd1hXTm83TzF3aWFYb0hOMTA4UkVaWldFcTZncm5JZmp6ZWc4amRSZjFYRUw0a2tYYTViQmpLeG9LYWxqQmplSGxWeFE0R2F5Y3BXNGxET0FLdG5UeEhBdE9mek90WndIQU03c3FWWGtWNnl1NmthcDFuSGtYS3FXRi80WEhxamVuTktxQmpwUjNsMWNoM0VqZzErRXNnZFFoc2RHMEI0Rk05c1dBVldwdUF5aXdUUGxlWnh0OVZ5WlZTMnFYZlJlV3FUQWlscHI5QXBvV1RqeHltaXQ3TndWNEpUcmlaeU9BOUIwazdIRmZVTG91cm1LWUhWblJRdnFHTDVITUhkcUZjUjJxV3BtY0s2ZVR3eDJkaXBXcnZpRGlscitmS1dxM09XUldkSEt3QTRldTh3amNoYmVSekZpbHFqalpOM3VmQ3Bma0owL3NjVnBuWWs2TDBQSTc3bHhkV0NaODdXaVdtN0IvQUdxdVFTbnVqR0tzQjhDSm1pSnE4cTFwS0lWV3lxT2lUSzY2cjE4Qk44cjc0L0FFNzFmZEMzeVBTMk14ZE9wbkUxdGxWeEQ5Sm1WT29nZ04rcjRQakFYVkZQYTNFZzVqVkpHRlZVR05vbEgyMEdWclVCN0JPeVNXcTZXcVlRZFdSOTJwY0ZNWU13Y2tiU2dDS0NxRDY3RGlpV3UxZzhNUUM5QnlmY0ZxVzFMK2pMNzE0cU5DdXpub1N4dDBkYTJndFdOMUc4RjBCSzBOTjBudWltZWxVRjlkSWRBZmpPNDRVVDNDalFMb1VlTEhKRlRPM2dtcFJ1SUlPdndCUUNicU5lbzNxdFo5aUY2eFZLMTNHUmxvNHpxaW1xK0NHZFRpUjF1Ulk4b3FnRTAyaFpCYTc5a1pYUE1xdXhSSEtsYTJzYVpXTjRtUnFaVWowdkxDS2hraktucU9RSE51U1pWSm9LdkFxUzF3cEVxdXZXREMxQjJ5cHdyQ1BzUk1FUFZUT0RNTEpNRHY2cWVLWHdpMkpZVjVTcTRxS3l2Z0dzSENMaXVqMmpSNTlWOGdNcVNKMkZKWlJYRUhWUkhqM3NGUHJjdDZPcHFsVzFHcGF0UWR0MEd2d2ZNNm42M0luc0dWRmhKR2FCcWdxcUlWNklzWGxsWmd5U1BxNFIzYm50M3dpNWN2K2NOMnlxUUxXMVQ5NUtZVnNXV3RLazRjQjlXNTNXUVFmbFFZUjZXbDRIYUpaanZWRTBENXl2cStSS2daQ3M1cWRCRVA1c0Q5NGNBdlFMbFNnTmFTTUF0SHg4OEJ1TlE0MXpkRnNYMzB6S2JjczBNTEQvaWhrcFF6bDB3aVRxS0xUZmJLbUNteVlJQ25LMEliYWllQzRDRzlpU3lMUTdjSU1HUXdhdTZUS29xNjBBcGwzV040MExacGNhMUNLS0s5VlF5eUlFbjh3MEY4RjZDTDJoOG8zaXhHd0M3czdFV3pDT3FtY0FwWXhZRDRqc0F6VlMwc2wydDk4cEE3dnJLb3BoQ1ZTb25iWXBnSDZtdlNuMjRwVEJWNHNkdFYzQnRNcTVrODJ5K0lBRHZVSjB1QWxrQ1ZUeElhUG0rVU51L3FrVjRGMVR6SFhDR3JYSUFxSXRCS3lwcUs5OVZ0QU9WczY0TzRPYlg3cEhMVkNwWUhjUm13dkxSN1R2WUFLQkJONThMR1Z6RHVGeitoUWJXZ25jUXlDWkFrK1Zic1BTb3VmOTMyNjFpWmdtZkNwd1JiQXZxbVNxcmlVMlB3aGphb095WXF0SWVnVlhWaVRzbXl0YTZiR3lTcFkzZ3lScnBJeUFlYVdERHh0cHNYd0t5YWxNREtOUDdZQlhNcUVza1VzaTJ1QzhGTkFQeEFLVFZmVDFvNlZ6TTBFMGpGKzFyV2NVdUh2ZHlnN3Znb0ZwbFg4SHB2SHBNQ09NUlVQSHpaa0luc3FsRktOWC9FSU81MkUwU3hTek93b2IyVm1STFc1RDFYSVUwcmJnTTFBeldneUM3ZmU4Rzd4VUFLL3RhRUJhdDdsdXF0eVA3RW1zYUpRT2o1Rittcm5aZkN1WUNmQlVBV3dTaHlkNnBNWS92QUhHMVVxT1lwYkkvZ3k1VDBDTUttK1VPM2dGdUM4NWRnZkRWZWd1UERmSVRySUJMc0xyY2dkaDNDRmdGWmphS0o0SXYzRjhBTkVxdnV4UjF0VktPZ0xvQ2Exanhib0JBa2o2djdqL2ljRmJBN2Y0cmZSblFETFJWaUcxM2kwdnFCUXJZVnFCYkFEWlQwWnBpSG9TenZRcG9wS0lGUzNzRTFIZkJXbEhYZDBIN0xuQXJxdm91Z010bGpIQmdabmgzRW96L0JLakxNTDRaMkFxMCtoRUpyOWphVlVCYnZOekNJVWlyb0M3QVdtbUZ3NG81QUszTXRCNVZ5cFpNU0ZnczA1SnlHVndsd0Jxc0VHQUFhMlpVMUNqVWV4WEdzRTRyS3JpaWxCdkZ6T0tLbzNBdUFyb0U2UUZRVTN1OFlwTlh3UzVrKzFUWnQ1VXJ3b3VONEtpVUV3K2szWldEcDFSWEhOUnFYYjIxVHMzOTk0NXlaU2czVm5aRk5ROUNGM1hlWnlyNURnQlhLaXdDTWEyTXhlVERZWGdQMUZzZjlRTktaYzBrODFSSmszcjZFUTNyQ21CVnlMTDc1RWpaMXBJVkRIb0Z0aU9BSG9CMEJkVFZ5bHFCc0tLS1MrQWVCWEpWTFkrQ1hBU3VHdk8vQXVxN0d1RWpEZkdLZzFvS2Exei9kbW1pOUk5U1VHTmhsMEF0ZnVsSEFhd29Zcm5Ta21OWEFWdUdFaHJFVlh2VUYrQTVDdDJQcU5PakRldHluYTRDbWVVb2xtZVhMTjRBcTdDNVNqMTBRN3lqZ2wrdDZDTnhTUkhtSTVYK0Nwd3JlWUIzUWZkcW5hNHEyMUtkQnVjNEdvWnNuNDlaT09pVmlud0hxSzlXemp2Z2V3ZUVoMkFVNSt2dHhaOUNkOVdxa2g0OVYxOEU1b2o2dlZ5bjBSU3RBeUdJTzVlZFhSS2Q1QjBWR1ZYcTJ5cjN4WXArNVV0K0M0UUo0UDFOMzM5cFFNalJlamo0dmIvRGNyNnJRYzNPLzByam10WnBlWUNCaUNIZkNlbVJiTmhiSy9wTlVQYzN3Zkt5NWYyRDdPbEwzL3VQaHZlL29VNFQwRjhmK1ZOTTJ2eW9pdjBqSytLSFFmZEhxKzBibmN6NG96NzMvK1k2TGJLdzFvLzVCN2VPZjFSbC8wZHU5Qjl0bi85YnZyZi9qK3YwaDZ0dG4ydHAvci80ODE5eTQvenY1MzkxdXZ6emZ3RGlmejZwaFQxTVBnQUFBQUJKUlU1RXJrSmdnZz09Iik7YmFja2dyb3VuZC1zaXplOjEwMCUgMTAwJTtib3JkZXI6bm9uZTtjdXJzb3I6cG9pbnRlcjtkaXJlY3Rpb246bHRyO2hlaWdodDoxMzBweDt0b3VjaC1hY3Rpb246bWFuaXB1bGF0aW9uO3dpZHRoOjEwMCV9LmNvbG9yLXBpY2tlciAuY3AtYWRkLWNvbG9yLWJ1dHRvbi1jbGFzc3tiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjowO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6aW5saW5lO21hcmdpbjozcHggLTNweDtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGV9LmNvbG9yLXBpY2tlciAuY3AtYWRkLWNvbG9yLWJ1dHRvbi1jbGFzczpob3Zlcnt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfS5jb2xvci1waWNrZXIgLmNwLWFkZC1jb2xvci1idXR0b24tY2xhc3M6ZGlzYWJsZWR7Y29sb3I6Izk5OTtjdXJzb3I6bm90LWFsbG93ZWR9LmNvbG9yLXBpY2tlciAuY3AtYWRkLWNvbG9yLWJ1dHRvbi1jbGFzczpkaXNhYmxlZDpob3Zlcnt0ZXh0LWRlY29yYXRpb246bm9uZX0uY29sb3ItcGlja2VyIC5jcC1yZW1vdmUtY29sb3ItYnV0dG9uLWNsYXNze2JhY2tncm91bmQ6I2ZmZjtib3JkZXItcmFkaXVzOjUwJTtib3gtc2hhZG93OjFweCAxcHggNXB4ICMzMzM7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MTBweDtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDotNXB4O3RleHQtYWxpZ246Y2VudGVyO3RvcDotNXB4O3dpZHRoOjEwcHh9LmNvbG9yLXBpY2tlciAuY3AtcmVtb3ZlLWNvbG9yLWJ1dHRvbi1jbGFzczpiZWZvcmV7Ym90dG9tOjMuNXB4O2NvbnRlbnQ6IngiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZToxMHB4O3Bvc2l0aW9uOnJlbGF0aXZlfSddfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Y2h9LHt0eXBlOkhofSx7dHlwZTpUM31dfSkse2hhbmRsZUVzYzpbe3R5cGU6TV8sYXJnczpbImRvY3VtZW50OmtleXVwLmVzYyIsWyIkZXZlbnQiXV19XSxoYW5kbGVFbnRlcjpbe3R5cGU6TV8sYXJnczpbImRvY3VtZW50OmtleXVwLmVudGVyIixbIiRldmVudCJdXX1dLGRpYWxvZ0VsZW1lbnQ6W3t0eXBlOkZyLGFyZ3M6WyJkaWFsb2dQb3B1cCIse3N0YXRpYzohMH1dfV0saHVlU2xpZGVyOlt7dHlwZTpGcixhcmdzOlsiaHVlU2xpZGVyIix7c3RhdGljOiEwfV19XSxhbHBoYVNsaWRlcjpbe3R5cGU6RnIsYXJnczpbImFscGhhU2xpZGVyIix7c3RhdGljOiEwfV19XX0pO2NsYXNzIEkze2NvbnN0cnVjdG9yKHQsZSxuLG8saSxhKXt0aGlzLmluamVjdG9yPXQsdGhpcy5jZnI9ZSx0aGlzLmFwcFJlZj1uLHRoaXMudmNSZWY9byx0aGlzLmVsUmVmPWksdGhpcy5fc2VydmljZT1hLHRoaXMuZGlhbG9nQ3JlYXRlZD0hMSx0aGlzLmlnbm9yZUNoYW5nZXM9ITEsdGhpcy52aWV3QXR0YWNoZWRUb0FwcFJlZj0hMSx0aGlzLmNwV2lkdGg9IjIzMHB4Iix0aGlzLmNwSGVpZ2h0PSJhdXRvIix0aGlzLmNwVG9nZ2xlPSExLHRoaXMuY3BEaXNhYmxlZD0hMSx0aGlzLmNwSWdub3JlZEVsZW1lbnRzPVtdLHRoaXMuY3BGYWxsYmFja0NvbG9yPSIiLHRoaXMuY3BDb2xvck1vZGU9ImNvbG9yIix0aGlzLmNwQ215a0VuYWJsZWQ9ITEsdGhpcy5jcE91dHB1dEZvcm1hdD0iYXV0byIsdGhpcy5jcEFscGhhQ2hhbm5lbD0iZW5hYmxlZCIsdGhpcy5jcERpc2FibGVJbnB1dD0hMSx0aGlzLmNwRGlhbG9nRGlzcGxheT0icG9wdXAiLHRoaXMuY3BTYXZlQ2xpY2tPdXRzaWRlPSEwLHRoaXMuY3BDbG9zZUNsaWNrT3V0c2lkZT0hMCx0aGlzLmNwVXNlUm9vdFZpZXdDb250YWluZXI9ITEsdGhpcy5jcFBvc2l0aW9uPSJhdXRvIix0aGlzLmNwUG9zaXRpb25PZmZzZXQ9IjAlIix0aGlzLmNwUG9zaXRpb25SZWxhdGl2ZVRvQXJyb3c9ITEsdGhpcy5jcE9LQnV0dG9uPSExLHRoaXMuY3BPS0J1dHRvblRleHQ9Ik9LIix0aGlzLmNwT0tCdXR0b25DbGFzcz0iY3Atb2stYnV0dG9uLWNsYXNzIix0aGlzLmNwQ2FuY2VsQnV0dG9uPSExLHRoaXMuY3BDYW5jZWxCdXR0b25UZXh0PSJDYW5jZWwiLHRoaXMuY3BDYW5jZWxCdXR0b25DbGFzcz0iY3AtY2FuY2VsLWJ1dHRvbi1jbGFzcyIsdGhpcy5jcFByZXNldExhYmVsPSJQcmVzZXQgY29sb3JzIix0aGlzLmNwUHJlc2V0Q29sb3JzQ2xhc3M9ImNwLXByZXNldC1jb2xvcnMtY2xhc3MiLHRoaXMuY3BNYXhQcmVzZXRDb2xvcnNMZW5ndGg9Nix0aGlzLmNwUHJlc2V0RW1wdHlNZXNzYWdlPSJObyBjb2xvcnMgYWRkZWQiLHRoaXMuY3BQcmVzZXRFbXB0eU1lc3NhZ2VDbGFzcz0icHJlc2V0LWVtcHR5LW1lc3NhZ2UiLHRoaXMuY3BBZGRDb2xvckJ1dHRvbj0hMSx0aGlzLmNwQWRkQ29sb3JCdXR0b25UZXh0PSJBZGQgY29sb3IiLHRoaXMuY3BBZGRDb2xvckJ1dHRvbkNsYXNzPSJjcC1hZGQtY29sb3ItYnV0dG9uLWNsYXNzIix0aGlzLmNwUmVtb3ZlQ29sb3JCdXR0b25DbGFzcz0iY3AtcmVtb3ZlLWNvbG9yLWJ1dHRvbi1jbGFzcyIsdGhpcy5jcElucHV0Q2hhbmdlPW5ldyBBYighMCksdGhpcy5jcFRvZ2dsZUNoYW5nZT1uZXcgQWIoITApLHRoaXMuY3BTbGlkZXJDaGFuZ2U9bmV3IEFiKCEwKSx0aGlzLmNwU2xpZGVyRHJhZ0VuZD1uZXcgQWIoITApLHRoaXMuY3BTbGlkZXJEcmFnU3RhcnQ9bmV3IEFiKCEwKSx0aGlzLmNvbG9yUGlja2VyT3Blbj1uZXcgQWIoITApLHRoaXMuY29sb3JQaWNrZXJDbG9zZT1uZXcgQWIoITApLHRoaXMuY29sb3JQaWNrZXJDYW5jZWw9bmV3IEFiKCEwKSx0aGlzLmNvbG9yUGlja2VyU2VsZWN0PW5ldyBBYighMCksdGhpcy5jb2xvclBpY2tlckNoYW5nZT1uZXcgQWIoITEpLHRoaXMuY3BDbXlrQ29sb3JDaGFuZ2U9bmV3IEFiKCEwKSx0aGlzLmNwUHJlc2V0Q29sb3JzQ2hhbmdlPW5ldyBBYighMCl9aGFuZGxlQ2xpY2soKXt0aGlzLmlucHV0Rm9jdXMoKX1oYW5kbGVGb2N1cygpe3RoaXMuaW5wdXRGb2N1cygpfWhhbmRsZUlucHV0KHQpe3RoaXMuaW5wdXRDaGFuZ2UodCl9bmdPbkRlc3Ryb3koKXtudWxsIT10aGlzLmNtcFJlZiYmKHRoaXMudmlld0F0dGFjaGVkVG9BcHBSZWYmJnRoaXMuYXBwUmVmLmRldGFjaFZpZXcodGhpcy5jbXBSZWYuaG9zdFZpZXcpLHRoaXMuY21wUmVmLmRlc3Ryb3koKSx0aGlzLmNtcFJlZj1udWxsLHRoaXMuZGlhbG9nPW51bGwpfW5nT25DaGFuZ2VzKHQpe3QuY3BUb2dnbGUmJiF0aGlzLmNwRGlzYWJsZWQmJih0LmNwVG9nZ2xlLmN1cnJlbnRWYWx1ZT90aGlzLm9wZW5EaWFsb2coKTp0LmNwVG9nZ2xlLmN1cnJlbnRWYWx1ZXx8dGhpcy5jbG9zZURpYWxvZygpKSx0LmNvbG9yUGlja2VyJiYodGhpcy5kaWFsb2cmJiF0aGlzLmlnbm9yZUNoYW5nZXMmJigiaW5saW5lIj09PXRoaXMuY3BEaWFsb2dEaXNwbGF5JiZ0aGlzLmRpYWxvZy5zZXRJbml0aWFsQ29sb3IodC5jb2xvclBpY2tlci5jdXJyZW50VmFsdWUpLHRoaXMuZGlhbG9nLnNldENvbG9yRnJvbVN0cmluZyh0LmNvbG9yUGlja2VyLmN1cnJlbnRWYWx1ZSwhMSksdGhpcy5jcFVzZVJvb3RWaWV3Q29udGFpbmVyJiYiaW5saW5lIiE9PXRoaXMuY3BEaWFsb2dEaXNwbGF5JiZ0aGlzLmNtcFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCkpLHRoaXMuaWdub3JlQ2hhbmdlcz0hMSksKHQuY3BQcmVzZXRMYWJlbHx8dC5jcFByZXNldENvbG9ycykmJnRoaXMuZGlhbG9nJiZ0aGlzLmRpYWxvZy5zZXRQcmVzZXRDb25maWcodGhpcy5jcFByZXNldExhYmVsLHRoaXMuY3BQcmVzZXRDb2xvcnMpfW9wZW5EaWFsb2coKXtpZih0aGlzLmRpYWxvZ0NyZWF0ZWQpdGhpcy5kaWFsb2cmJnRoaXMuZGlhbG9nLm9wZW5EaWFsb2codGhpcy5jb2xvclBpY2tlcik7ZWxzZXtsZXQgdD10aGlzLnZjUmVmO2lmKHRoaXMuZGlhbG9nQ3JlYXRlZD0hMCx0aGlzLnZpZXdBdHRhY2hlZFRvQXBwUmVmPSExLHRoaXMuY3BVc2VSb290Vmlld0NvbnRhaW5lciYmImlubGluZSIhPT10aGlzLmNwRGlhbG9nRGlzcGxheSl7Y29uc3QgZT10aGlzLmluamVjdG9yLmdldCh0aGlzLmFwcFJlZi5jb21wb25lbnRUeXBlc1swXSxRcC5OVUxMKTtlIT09UXAuTlVMTD8odD1lLnZjUmVmfHxlLnZpZXdDb250YWluZXJSZWZ8fHRoaXMudmNSZWYsdD09PXRoaXMudmNSZWYmJmNvbnNvbGUud2FybigiWW91IGFyZSB1c2luZyBjcFVzZVJvb3RWaWV3Q29udGFpbmVyLCBidXQgdGhlIHJvb3QgY29tcG9uZW50IGlzIG5vdCBleHBvc2luZyB2aWV3Q29udGFpbmVyUmVmIVBsZWFzZSBleHBvc2UgaXQgYnkgYWRkaW5nICdwdWJsaWMgdmNSZWY6IFZpZXdDb250YWluZXJSZWYnIHRvIHRoZSBjb25zdHJ1Y3Rvci4iKSk6dGhpcy52aWV3QXR0YWNoZWRUb0FwcFJlZj0hMH1jb25zdCBlPXRoaXMuY2ZyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KE4zKTtpZih0aGlzLnZpZXdBdHRhY2hlZFRvQXBwUmVmKXRoaXMuY21wUmVmPWUuY3JlYXRlKHRoaXMuaW5qZWN0b3IpLHRoaXMuYXBwUmVmLmF0dGFjaFZpZXcodGhpcy5jbXBSZWYuaG9zdFZpZXcpLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5jbXBSZWYuaG9zdFZpZXcucm9vdE5vZGVzWzBdKTtlbHNle2NvbnN0IG49X3UuZnJvbVJlc29sdmVkUHJvdmlkZXJzKFtdLHQucGFyZW50SW5qZWN0b3IpO3RoaXMuY21wUmVmPXQuY3JlYXRlQ29tcG9uZW50KGUsMCxuLFtdKX10aGlzLmNtcFJlZi5pbnN0YW5jZS5zZXR1cERpYWxvZyh0aGlzLHRoaXMuZWxSZWYsdGhpcy5jb2xvclBpY2tlcix0aGlzLmNwV2lkdGgsdGhpcy5jcEhlaWdodCx0aGlzLmNwRGlhbG9nRGlzcGxheSx0aGlzLmNwRmFsbGJhY2tDb2xvcix0aGlzLmNwQ29sb3JNb2RlLHRoaXMuY3BDbXlrRW5hYmxlZCx0aGlzLmNwQWxwaGFDaGFubmVsLHRoaXMuY3BPdXRwdXRGb3JtYXQsdGhpcy5jcERpc2FibGVJbnB1dCx0aGlzLmNwSWdub3JlZEVsZW1lbnRzLHRoaXMuY3BTYXZlQ2xpY2tPdXRzaWRlLHRoaXMuY3BDbG9zZUNsaWNrT3V0c2lkZSx0aGlzLmNwVXNlUm9vdFZpZXdDb250YWluZXIsdGhpcy5jcFBvc2l0aW9uLHRoaXMuY3BQb3NpdGlvbk9mZnNldCx0aGlzLmNwUG9zaXRpb25SZWxhdGl2ZVRvQXJyb3csdGhpcy5jcFByZXNldExhYmVsLHRoaXMuY3BQcmVzZXRDb2xvcnMsdGhpcy5jcFByZXNldENvbG9yc0NsYXNzLHRoaXMuY3BNYXhQcmVzZXRDb2xvcnNMZW5ndGgsdGhpcy5jcFByZXNldEVtcHR5TWVzc2FnZSx0aGlzLmNwUHJlc2V0RW1wdHlNZXNzYWdlQ2xhc3MsdGhpcy5jcE9LQnV0dG9uLHRoaXMuY3BPS0J1dHRvbkNsYXNzLHRoaXMuY3BPS0J1dHRvblRleHQsdGhpcy5jcENhbmNlbEJ1dHRvbix0aGlzLmNwQ2FuY2VsQnV0dG9uQ2xhc3MsdGhpcy5jcENhbmNlbEJ1dHRvblRleHQsdGhpcy5jcEFkZENvbG9yQnV0dG9uLHRoaXMuY3BBZGRDb2xvckJ1dHRvbkNsYXNzLHRoaXMuY3BBZGRDb2xvckJ1dHRvblRleHQsdGhpcy5jcFJlbW92ZUNvbG9yQnV0dG9uQ2xhc3MpLHRoaXMuZGlhbG9nPXRoaXMuY21wUmVmLmluc3RhbmNlLHRoaXMudmNSZWYhPT10JiZ0aGlzLmNtcFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCl9fWNsb3NlRGlhbG9nKCl7dGhpcy5kaWFsb2cmJiJwb3B1cCI9PT10aGlzLmNwRGlhbG9nRGlzcGxheSYmdGhpcy5kaWFsb2cuY2xvc2VEaWFsb2coKX1jbXlrQ2hhbmdlZCh0KXt0aGlzLmNwQ215a0NvbG9yQ2hhbmdlLmVtaXQodCl9c3RhdGVDaGFuZ2VkKHQpe3RoaXMuY3BUb2dnbGVDaGFuZ2UuZW1pdCh0KSx0P3RoaXMuY29sb3JQaWNrZXJPcGVuLmVtaXQodGhpcy5jb2xvclBpY2tlcik6dGhpcy5jb2xvclBpY2tlckNsb3NlLmVtaXQodGhpcy5jb2xvclBpY2tlcil9Y29sb3JDaGFuZ2VkKHQsZT0hMCl7dGhpcy5pZ25vcmVDaGFuZ2VzPWUsdGhpcy5jb2xvclBpY2tlckNoYW5nZS5lbWl0KHQpfWNvbG9yU2VsZWN0ZWQodCl7dGhpcy5jb2xvclBpY2tlclNlbGVjdC5lbWl0KHQpfWNvbG9yQ2FuY2VsZWQoKXt0aGlzLmNvbG9yUGlja2VyQ2FuY2VsLmVtaXQoKX1pbnB1dEZvY3VzKCl7Y29uc3QgdD10aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsZT10aGlzLmNwSWdub3JlZEVsZW1lbnRzLmZpbHRlcigoZT0+ZT09PXQpKTt0aGlzLmNwRGlzYWJsZWR8fGUubGVuZ3RofHwoInVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudCYmdD09PWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ/dGhpcy5vcGVuRGlhbG9nKCk6dGhpcy5kaWFsb2cmJnRoaXMuZGlhbG9nLnNob3c/dGhpcy5jbG9zZURpYWxvZygpOnRoaXMub3BlbkRpYWxvZygpKX1pbnB1dENoYW5nZSh0KXt0aGlzLmRpYWxvZz90aGlzLmRpYWxvZy5zZXRDb2xvckZyb21TdHJpbmcodC50YXJnZXQudmFsdWUsITApOih0aGlzLmNvbG9yUGlja2VyPXQudGFyZ2V0LnZhbHVlLHRoaXMuY29sb3JQaWNrZXJDaGFuZ2UuZW1pdCh0aGlzLmNvbG9yUGlja2VyKSl9aW5wdXRDaGFuZ2VkKHQpe3RoaXMuY3BJbnB1dENoYW5nZS5lbWl0KHQpfXNsaWRlckNoYW5nZWQodCl7dGhpcy5jcFNsaWRlckNoYW5nZS5lbWl0KHQpfXNsaWRlckRyYWdFbmQodCl7dGhpcy5jcFNsaWRlckRyYWdFbmQuZW1pdCh0KX1zbGlkZXJEcmFnU3RhcnQodCl7dGhpcy5jcFNsaWRlckRyYWdTdGFydC5lbWl0KHQpfXByZXNldENvbG9yc0NoYW5nZWQodCl7dGhpcy5jcFByZXNldENvbG9yc0NoYW5nZS5lbWl0KHQpfX1JMy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8STMpKE11KFFwKSxNdShyaCksTXUoX0MpLE11KFhoKSxNdShjaCksTXUoVDMpKX0sSTMuybVkaXI9Sm8oe3R5cGU6STMsc2VsZWN0b3JzOltbIiIsImNvbG9yUGlja2VyIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MSZlJiZOdSgiY2xpY2siLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uaGFuZGxlQ2xpY2soKX0pKSgiZm9jdXMiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uaGFuZGxlRm9jdXMoKX0pKSgiaW5wdXQiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLmhhbmRsZUlucHV0KGUpfSkpfSxpbnB1dHM6e2NwV2lkdGg6ImNwV2lkdGgiLGNwSGVpZ2h0OiJjcEhlaWdodCIsY3BUb2dnbGU6ImNwVG9nZ2xlIixjcERpc2FibGVkOiJjcERpc2FibGVkIixjcElnbm9yZWRFbGVtZW50czoiY3BJZ25vcmVkRWxlbWVudHMiLGNwRmFsbGJhY2tDb2xvcjoiY3BGYWxsYmFja0NvbG9yIixjcENvbG9yTW9kZToiY3BDb2xvck1vZGUiLGNwQ215a0VuYWJsZWQ6ImNwQ215a0VuYWJsZWQiLGNwT3V0cHV0Rm9ybWF0OiJjcE91dHB1dEZvcm1hdCIsY3BBbHBoYUNoYW5uZWw6ImNwQWxwaGFDaGFubmVsIixjcERpc2FibGVJbnB1dDoiY3BEaXNhYmxlSW5wdXQiLGNwRGlhbG9nRGlzcGxheToiY3BEaWFsb2dEaXNwbGF5IixjcFNhdmVDbGlja091dHNpZGU6ImNwU2F2ZUNsaWNrT3V0c2lkZSIsY3BDbG9zZUNsaWNrT3V0c2lkZToiY3BDbG9zZUNsaWNrT3V0c2lkZSIsY3BVc2VSb290Vmlld0NvbnRhaW5lcjoiY3BVc2VSb290Vmlld0NvbnRhaW5lciIsY3BQb3NpdGlvbjoiY3BQb3NpdGlvbiIsY3BQb3NpdGlvbk9mZnNldDoiY3BQb3NpdGlvbk9mZnNldCIsY3BQb3NpdGlvblJlbGF0aXZlVG9BcnJvdzoiY3BQb3NpdGlvblJlbGF0aXZlVG9BcnJvdyIsY3BPS0J1dHRvbjoiY3BPS0J1dHRvbiIsY3BPS0J1dHRvblRleHQ6ImNwT0tCdXR0b25UZXh0IixjcE9LQnV0dG9uQ2xhc3M6ImNwT0tCdXR0b25DbGFzcyIsY3BDYW5jZWxCdXR0b246ImNwQ2FuY2VsQnV0dG9uIixjcENhbmNlbEJ1dHRvblRleHQ6ImNwQ2FuY2VsQnV0dG9uVGV4dCIsY3BDYW5jZWxCdXR0b25DbGFzczoiY3BDYW5jZWxCdXR0b25DbGFzcyIsY3BQcmVzZXRMYWJlbDoiY3BQcmVzZXRMYWJlbCIsY3BQcmVzZXRDb2xvcnNDbGFzczoiY3BQcmVzZXRDb2xvcnNDbGFzcyIsY3BNYXhQcmVzZXRDb2xvcnNMZW5ndGg6ImNwTWF4UHJlc2V0Q29sb3JzTGVuZ3RoIixjcFByZXNldEVtcHR5TWVzc2FnZToiY3BQcmVzZXRFbXB0eU1lc3NhZ2UiLGNwUHJlc2V0RW1wdHlNZXNzYWdlQ2xhc3M6ImNwUHJlc2V0RW1wdHlNZXNzYWdlQ2xhc3MiLGNwQWRkQ29sb3JCdXR0b246ImNwQWRkQ29sb3JCdXR0b24iLGNwQWRkQ29sb3JCdXR0b25UZXh0OiJjcEFkZENvbG9yQnV0dG9uVGV4dCIsY3BBZGRDb2xvckJ1dHRvbkNsYXNzOiJjcEFkZENvbG9yQnV0dG9uQ2xhc3MiLGNwUmVtb3ZlQ29sb3JCdXR0b25DbGFzczoiY3BSZW1vdmVDb2xvckJ1dHRvbkNsYXNzIixjb2xvclBpY2tlcjoiY29sb3JQaWNrZXIiLGNwUHJlc2V0Q29sb3JzOiJjcFByZXNldENvbG9ycyJ9LG91dHB1dHM6e2NwSW5wdXRDaGFuZ2U6ImNwSW5wdXRDaGFuZ2UiLGNwVG9nZ2xlQ2hhbmdlOiJjcFRvZ2dsZUNoYW5nZSIsY3BTbGlkZXJDaGFuZ2U6ImNwU2xpZGVyQ2hhbmdlIixjcFNsaWRlckRyYWdFbmQ6ImNwU2xpZGVyRHJhZ0VuZCIsY3BTbGlkZXJEcmFnU3RhcnQ6ImNwU2xpZGVyRHJhZ1N0YXJ0Iixjb2xvclBpY2tlck9wZW46ImNvbG9yUGlja2VyT3BlbiIsY29sb3JQaWNrZXJDbG9zZToiY29sb3JQaWNrZXJDbG9zZSIsY29sb3JQaWNrZXJDYW5jZWw6ImNvbG9yUGlja2VyQ2FuY2VsIixjb2xvclBpY2tlclNlbGVjdDoiY29sb3JQaWNrZXJTZWxlY3QiLGNvbG9yUGlja2VyQ2hhbmdlOiJjb2xvclBpY2tlckNoYW5nZSIsY3BDbXlrQ29sb3JDaGFuZ2U6ImNwQ215a0NvbG9yQ2hhbmdlIixjcFByZXNldENvbG9yc0NoYW5nZToiY3BQcmVzZXRDb2xvcnNDaGFuZ2UifSxleHBvcnRBczpbIm5neENvbG9yUGlja2VyIl0sZmVhdHVyZXM6W1NpXX0pLEkzLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6UXB9LHt0eXBlOnJofSx7dHlwZTpfQ30se3R5cGU6WGh9LHt0eXBlOmNofSx7dHlwZTpUM31dLEkzLnByb3BEZWNvcmF0b3JzPXtjb2xvclBpY2tlcjpbe3R5cGU6eV99XSxjcFdpZHRoOlt7dHlwZTp5X31dLGNwSGVpZ2h0Olt7dHlwZTp5X31dLGNwVG9nZ2xlOlt7dHlwZTp5X31dLGNwRGlzYWJsZWQ6W3t0eXBlOnlffV0sY3BJZ25vcmVkRWxlbWVudHM6W3t0eXBlOnlffV0sY3BGYWxsYmFja0NvbG9yOlt7dHlwZTp5X31dLGNwQ29sb3JNb2RlOlt7dHlwZTp5X31dLGNwQ215a0VuYWJsZWQ6W3t0eXBlOnlffV0sY3BPdXRwdXRGb3JtYXQ6W3t0eXBlOnlffV0sY3BBbHBoYUNoYW5uZWw6W3t0eXBlOnlffV0sY3BEaXNhYmxlSW5wdXQ6W3t0eXBlOnlffV0sY3BEaWFsb2dEaXNwbGF5Olt7dHlwZTp5X31dLGNwU2F2ZUNsaWNrT3V0c2lkZTpbe3R5cGU6eV99XSxjcENsb3NlQ2xpY2tPdXRzaWRlOlt7dHlwZTp5X31dLGNwVXNlUm9vdFZpZXdDb250YWluZXI6W3t0eXBlOnlffV0sY3BQb3NpdGlvbjpbe3R5cGU6eV99XSxjcFBvc2l0aW9uT2Zmc2V0Olt7dHlwZTp5X31dLGNwUG9zaXRpb25SZWxhdGl2ZVRvQXJyb3c6W3t0eXBlOnlffV0sY3BPS0J1dHRvbjpbe3R5cGU6eV99XSxjcE9LQnV0dG9uVGV4dDpbe3R5cGU6eV99XSxjcE9LQnV0dG9uQ2xhc3M6W3t0eXBlOnlffV0sY3BDYW5jZWxCdXR0b246W3t0eXBlOnlffV0sY3BDYW5jZWxCdXR0b25UZXh0Olt7dHlwZTp5X31dLGNwQ2FuY2VsQnV0dG9uQ2xhc3M6W3t0eXBlOnlffV0sY3BQcmVzZXRMYWJlbDpbe3R5cGU6eV99XSxjcFByZXNldENvbG9yczpbe3R5cGU6eV99XSxjcFByZXNldENvbG9yc0NsYXNzOlt7dHlwZTp5X31dLGNwTWF4UHJlc2V0Q29sb3JzTGVuZ3RoOlt7dHlwZTp5X31dLGNwUHJlc2V0RW1wdHlNZXNzYWdlOlt7dHlwZTp5X31dLGNwUHJlc2V0RW1wdHlNZXNzYWdlQ2xhc3M6W3t0eXBlOnlffV0sY3BBZGRDb2xvckJ1dHRvbjpbe3R5cGU6eV99XSxjcEFkZENvbG9yQnV0dG9uVGV4dDpbe3R5cGU6eV99XSxjcEFkZENvbG9yQnV0dG9uQ2xhc3M6W3t0eXBlOnlffV0sY3BSZW1vdmVDb2xvckJ1dHRvbkNsYXNzOlt7dHlwZTp5X31dLGNwSW5wdXRDaGFuZ2U6W3t0eXBlOl9ffV0sY3BUb2dnbGVDaGFuZ2U6W3t0eXBlOl9ffV0sY3BTbGlkZXJDaGFuZ2U6W3t0eXBlOl9ffV0sY3BTbGlkZXJEcmFnRW5kOlt7dHlwZTpfX31dLGNwU2xpZGVyRHJhZ1N0YXJ0Olt7dHlwZTpfX31dLGNvbG9yUGlja2VyT3Blbjpbe3R5cGU6X199XSxjb2xvclBpY2tlckNsb3NlOlt7dHlwZTpfX31dLGNvbG9yUGlja2VyQ2FuY2VsOlt7dHlwZTpfX31dLGNvbG9yUGlja2VyU2VsZWN0Olt7dHlwZTpfX31dLGNvbG9yUGlja2VyQ2hhbmdlOlt7dHlwZTpfX31dLGNwQ215a0NvbG9yQ2hhbmdlOlt7dHlwZTpfX31dLGNwUHJlc2V0Q29sb3JzQ2hhbmdlOlt7dHlwZTpfX31dLGhhbmRsZUNsaWNrOlt7dHlwZTpNXyxhcmdzOlsiY2xpY2siXX1dLGhhbmRsZUZvY3VzOlt7dHlwZTpNXyxhcmdzOlsiZm9jdXMiXX1dLGhhbmRsZUlucHV0Olt7dHlwZTpNXyxhcmdzOlsiaW5wdXQiLFsiJGV2ZW50Il1dfV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoSTMsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoiW2NvbG9yUGlja2VyXSIsZXhwb3J0QXM6Im5neENvbG9yUGlja2VyIn1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOlFwfSx7dHlwZTpyaH0se3R5cGU6X0N9LHt0eXBlOlhofSx7dHlwZTpjaH0se3R5cGU6VDN9XX0pLHtjcFdpZHRoOlt7dHlwZTp5X31dLGNwSGVpZ2h0Olt7dHlwZTp5X31dLGNwVG9nZ2xlOlt7dHlwZTp5X31dLGNwRGlzYWJsZWQ6W3t0eXBlOnlffV0sY3BJZ25vcmVkRWxlbWVudHM6W3t0eXBlOnlffV0sY3BGYWxsYmFja0NvbG9yOlt7dHlwZTp5X31dLGNwQ29sb3JNb2RlOlt7dHlwZTp5X31dLGNwQ215a0VuYWJsZWQ6W3t0eXBlOnlffV0sY3BPdXRwdXRGb3JtYXQ6W3t0eXBlOnlffV0sY3BBbHBoYUNoYW5uZWw6W3t0eXBlOnlffV0sY3BEaXNhYmxlSW5wdXQ6W3t0eXBlOnlffV0sY3BEaWFsb2dEaXNwbGF5Olt7dHlwZTp5X31dLGNwU2F2ZUNsaWNrT3V0c2lkZTpbe3R5cGU6eV99XSxjcENsb3NlQ2xpY2tPdXRzaWRlOlt7dHlwZTp5X31dLGNwVXNlUm9vdFZpZXdDb250YWluZXI6W3t0eXBlOnlffV0sY3BQb3NpdGlvbjpbe3R5cGU6eV99XSxjcFBvc2l0aW9uT2Zmc2V0Olt7dHlwZTp5X31dLGNwUG9zaXRpb25SZWxhdGl2ZVRvQXJyb3c6W3t0eXBlOnlffV0sY3BPS0J1dHRvbjpbe3R5cGU6eV99XSxjcE9LQnV0dG9uVGV4dDpbe3R5cGU6eV99XSxjcE9LQnV0dG9uQ2xhc3M6W3t0eXBlOnlffV0sY3BDYW5jZWxCdXR0b246W3t0eXBlOnlffV0sY3BDYW5jZWxCdXR0b25UZXh0Olt7dHlwZTp5X31dLGNwQ2FuY2VsQnV0dG9uQ2xhc3M6W3t0eXBlOnlffV0sY3BQcmVzZXRMYWJlbDpbe3R5cGU6eV99XSxjcFByZXNldENvbG9yc0NsYXNzOlt7dHlwZTp5X31dLGNwTWF4UHJlc2V0Q29sb3JzTGVuZ3RoOlt7dHlwZTp5X31dLGNwUHJlc2V0RW1wdHlNZXNzYWdlOlt7dHlwZTp5X31dLGNwUHJlc2V0RW1wdHlNZXNzYWdlQ2xhc3M6W3t0eXBlOnlffV0sY3BBZGRDb2xvckJ1dHRvbjpbe3R5cGU6eV99XSxjcEFkZENvbG9yQnV0dG9uVGV4dDpbe3R5cGU6eV99XSxjcEFkZENvbG9yQnV0dG9uQ2xhc3M6W3t0eXBlOnlffV0sY3BSZW1vdmVDb2xvckJ1dHRvbkNsYXNzOlt7dHlwZTp5X31dLGNwSW5wdXRDaGFuZ2U6W3t0eXBlOl9ffV0sY3BUb2dnbGVDaGFuZ2U6W3t0eXBlOl9ffV0sY3BTbGlkZXJDaGFuZ2U6W3t0eXBlOl9ffV0sY3BTbGlkZXJEcmFnRW5kOlt7dHlwZTpfX31dLGNwU2xpZGVyRHJhZ1N0YXJ0Olt7dHlwZTpfX31dLGNvbG9yUGlja2VyT3Blbjpbe3R5cGU6X199XSxjb2xvclBpY2tlckNsb3NlOlt7dHlwZTpfX31dLGNvbG9yUGlja2VyQ2FuY2VsOlt7dHlwZTpfX31dLGNvbG9yUGlja2VyU2VsZWN0Olt7dHlwZTpfX31dLGNvbG9yUGlja2VyQ2hhbmdlOlt7dHlwZTpfX31dLGNwQ215a0NvbG9yQ2hhbmdlOlt7dHlwZTpfX31dLGNwUHJlc2V0Q29sb3JzQ2hhbmdlOlt7dHlwZTpfX31dLGhhbmRsZUNsaWNrOlt7dHlwZTpNXyxhcmdzOlsiY2xpY2siXX1dLGhhbmRsZUZvY3VzOlt7dHlwZTpNXyxhcmdzOlsiZm9jdXMiXX1dLGhhbmRsZUlucHV0Olt7dHlwZTpNXyxhcmdzOlsiaW5wdXQiLFsiJGV2ZW50Il1dfV0sY29sb3JQaWNrZXI6W3t0eXBlOnlffV0sY3BQcmVzZXRDb2xvcnM6W3t0eXBlOnlffV19KTtjbGFzcyB6M3t9ejMuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHozKX0sejMuybVtb2Q9Wm8oe3R5cGU6ejN9KSx6My7JtWluaj1jbyh7cHJvdmlkZXJzOltUM10saW1wb3J0czpbW0J2XV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKHozLHtkZWNsYXJhdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm5bTjMsSTMsRDMsRTNdfSxpbXBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW0J2XX0sZXhwb3J0czpmdW5jdGlvbigpe3JldHVybltJM119fSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYih6Myxbe3R5cGU6a18sYXJnczpbe2ltcG9ydHM6W0J2XSxleHBvcnRzOltJM10scHJvdmlkZXJzOltUM10sZGVjbGFyYXRpb25zOltOMyxJMyxEMyxFM10sZW50cnlDb21wb25lbnRzOltOM119XX1dLG51bGwsbnVsbCk7Y29uc3QgSDM9WyJmaWx0ZXIiXTtmdW5jdGlvbiBGMyh0LGUpezEmdCYmRHUoMCl9ZnVuY3Rpb24gTDModCxlKXsxJnQmJkR1KDApfWZ1bmN0aW9uIEIzKHQsZSl7MSZ0JiZEdSgwKX1jb25zdCBWMz1mdW5jdGlvbih0KXtyZXR1cm57aXRlbTp0fX07ZnVuY3Rpb24gajModCxlKXtpZigxJnQmJihrdSgwKSxXbSgxLEIzLDEsMCwibmctY29udGFpbmVyIiwxMyksU3UoKSksMiZ0KXtjb25zdCB0PWUuJGltcGxpY2l0O0x1KCk7Y29uc3Qgbj1HbSgxNyk7SmMoMSksdnUoIm5nVGVtcGxhdGVPdXRsZXQiLG4pKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsZ2IoMixWMyx0KSl9fWZ1bmN0aW9uIFUzKHQsZSl7MSZ0JiYoT3UoMCwiZGl2IiwxNCksd3UoMSwibWF0LXNwaW5uZXIiLDE1KSxQdSgpKX1mdW5jdGlvbiBXMyh0LGUpezEmdCYmKE91KDAsImRpdiIsMTYpLE1mKDEsIk5vIFJ1bnMiKSxQdSgpKX1mdW5jdGlvbiBHMyh0LGUpe2lmKDEmdCYmKE91KDAsImRpdiIsMTYpLE91KDEsInNwYW4iKSxNZigyLCdObyBydW5zIG1hdGNoICInKSxPdSgzLCJjb2RlIiksTWYoNCksUHUoKSxNZig1LCciJyksUHUoKSxQdSgpKSwyJnQpe2NvbnN0IHQ9THUoKTtKYyg0KSx2Zih0LnJlZ2V4RmlsdGVyKX19Y29uc3QgWTM9ZnVuY3Rpb24oKXtyZXR1cm5bNSwxMCwyMF19O2Z1bmN0aW9uIHEzKHQsZSl7aWYoMSZ0KXtjb25zdCB0PUV1KCk7T3UoMCwibWF0LXBhZ2luYXRvciIsMTcpLE51KCJwYWdlIiwoZnVuY3Rpb24gZShuKXtyZXR1cm4gcmEodCksTHUoKS5vblBhZ2luYXRpb25DaGFuZ2UuZW1pdChuKX0pKSxQdSgpfWlmKDImdCl7Y29uc3QgdD1MdSgpO3Z1KCJwYWdlU2l6ZU9wdGlvbnMiLGZiKDQsWTMpKSgicGFnZUluZGV4Iix0LnBhZ2luYXRpb25PcHRpb24ucGFnZUluZGV4KSgicGFnZVNpemUiLHQucGFnaW5hdGlvbk9wdGlvbi5wYWdlU2l6ZSkoImxlbmd0aCIsdC5maWx0ZXJlZEl0ZW1zTGVuZ3RoKX19ZnVuY3Rpb24gWjModCxlKXtpZigxJnQpe2NvbnN0IHQ9RXUoKTtPdSgwLCJkaXYiLDE5KSxPdSgxLCJzcGFuIiwyMCksTWYoMiksUHUoKSxPdSgzLCJidXR0b24iLDIxKSxOdSgiY2xpY2siLChmdW5jdGlvbiBlKCl7cmV0dXJuIHJhKHQpLEx1KDIpLm9uU2VsZWN0QWxsUGFnZXMuZW1pdCgpfSkpLE1mKDQsIiBTZWxlY3QgYWxsIHJ1bnMgIiksUHUoKSxQdSgpfWlmKDImdCl7Y29uc3QgdD1MdSgyKTtKYygyKSxPZigiQWxsIHJ1bnMgaW4gdGhpcyBwYWdlIGFyZSBzZWxlY3RlZCBidXQgbm90IGFsbCBydW5zICgiLHQubnVtU2VsZWN0ZWRJdGVtcywiIG9mICIsdC5hbGxJdGVtc0xlbmd0aCwiKSBhcmUgc2VsZWN0ZWQuIil9fWZ1bmN0aW9uIFgzKHQsZSl7aWYoMSZ0JiZXbSgwLFozLDUsMiwiZGl2IiwxOCksMiZ0KXtjb25zdCB0PUx1KCk7dnUoIm5nSWYiLHQuYWxsUGFnZUl0ZW1zU2VsZWN0ZWQoKSYmdC5udW1TZWxlY3RlZEl0ZW1zIT09dC5hbGxJdGVtc0xlbmd0aCl9fWZ1bmN0aW9uIEszKHQsZSl7aWYoMSZ0KXtjb25zdCB0PUV1KCk7T3UoMCwibWF0LWNoZWNrYm94IiwzMSksTnUoImNoYW5nZSIsKGZ1bmN0aW9uIGUoKXtyZXR1cm4gcmEodCksTHUoMykuaGFuZGxlUGFnZVRvZ2dsZSgpfSkpLFB1KCl9aWYoMiZ0KXtjb25zdCB0PUx1KDMpO3Z1KCJjaGVja2VkIix0LmFsbFBhZ2VJdGVtc1NlbGVjdGVkKCkpKCJpbmRldGVybWluYXRlIiwhdC5hbGxQYWdlSXRlbXNTZWxlY3RlZCgpJiZ0LnNvbWVQYWdlSXRlbXNTZWxlY3RlZCgpKX19Y29uc3QgSjM9ZnVuY3Rpb24odCl7cmV0dXJue3R5cGU6dH19O2Z1bmN0aW9uIFEzKHQsZSl7aWYoMSZ0JiYoT3UoMCwic3BhbiIsMzIpLE1mKDEsIkV4cGVyaW1lbnQiKSxQdSgpKSwyJnQpe2NvbnN0IHQ9THUoMyk7dnUoIm1hdC1zb3J0LWhlYWRlciIsZ2IoMSxKMyx0LlNvcnRUeXBlLkVYUEVSSU1FTlRfTkFNRSkpfX1mdW5jdGlvbiAkMyh0LGUpe2lmKDEmdCYmKE91KDAsInNwYW4iLDMyKSxNZigxLCJSdW4iKSxQdSgpKSwyJnQpe2NvbnN0IHQ9THUoMyk7dnUoIm1hdC1zb3J0LWhlYWRlciIsZ2IoMSxKMyx0LlNvcnRUeXBlLlJVTl9OQU1FKSl9fWZ1bmN0aW9uIHQyKHQsZSl7MSZ0JiZ3dSgwLCJydW5zLWdyb3VwLW1lbnUtYnV0dG9uIiwzNCksMiZ0JiZ2dSgiZXhwZXJpbWVudElkcyIsTHUoNCkuZXhwZXJpbWVudElkcyl9ZnVuY3Rpb24gZTIodCxlKXtpZigxJnQmJihPdSgwLCJzcGFuIiksV20oMSx0MiwxLDEsInJ1bnMtZ3JvdXAtbWVudS1idXR0b24iLDMzKSxQdSgpKSwyJnQpe2NvbnN0IHQ9THUoMyk7SmMoMSksdnUoIm5nSWYiLHQuc2hvd0dyb3VwQ29udHJvbCl9fWNvbnN0IG4yPWZ1bmN0aW9uKHQpe3JldHVyblsiY29sdW1uIix0XX07ZnVuY3Rpb24gbzIodCxlKXtpZigxJnQmJihPdSgwLCJzcGFuIiwyNiksa3UoMSwyNyksV20oMixLMywxLDIsIm1hdC1jaGVja2JveCIsMjgpLFdtKDMsUTMsMiwzLCJzcGFuIiwyOSksV20oNCwkMywyLDMsInNwYW4iLDI5KSxXbSg1LGUyLDIsMSwic3BhbiIsMzApLFN1KCksUHUoKSksMiZ0KXtjb25zdCB0PWUuJGltcGxpY2l0LG49THUoMik7dnUoIm5nQ2xhc3MiLGdiKDYsbjIsInRiLWNvbHVtbi0iK3QpKSxKYygxKSx2dSgibmdTd2l0Y2giLHQpLEpjKDEpLHZ1KCJuZ1N3aXRjaENhc2UiLG4uUnVuc1RhYmxlQ29sdW1uLkNIRUNLQk9YKSxKYygxKSx2dSgibmdTd2l0Y2hDYXNlIixuLlJ1bnNUYWJsZUNvbHVtbi5FWFBFUklNRU5UX05BTUUpLEpjKDEpLHZ1KCJuZ1N3aXRjaENhc2UiLG4uUnVuc1RhYmxlQ29sdW1uLlJVTl9OQU1FKSxKYygxKSx2dSgibmdTd2l0Y2hDYXNlIixuLlJ1bnNUYWJsZUNvbHVtbi5SVU5fQ09MT1IpfX1mdW5jdGlvbiBpMih0LGUpe2lmKDEmdCl7Y29uc3QgdD1FdSgpO2t1KDApLE91KDEsImRpdiIsNDMpLE51KCJjbGljayIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIGUuc3RvcFByb3BhZ2F0aW9uKCl9KSksT3UoMiwidGItcmFuZ2UtaW5wdXQiLDQ0KSxOdSgidmFsdWUiLChmdW5jdGlvbiBlKG4pe3JhKHQpO2NvbnN0IG89THUoMikuJGltcGxpY2l0O3JldHVybiBMdSgyKS5oYW5kbGVIcGFyYW1JbnRlcnZhbENoYW5nZWQobyxuKX0pKSxQdSgpLFB1KCksU3UoKX1pZigyJnQpe2NvbnN0IHQ9THUoMikuJGltcGxpY2l0O0pjKDIpLHZ1KCJtaW4iLHQuZmlsdGVyLm1pblZhbHVlKSgibWF4Iix0LmZpbHRlci5tYXhWYWx1ZSkoImxvd2VyVmFsdWUiLHQuZmlsdGVyLmZpbHRlckxvd2VyVmFsdWUpKCJ1cHBlclZhbHVlIix0LmZpbHRlci5maWx0ZXJVcHBlclZhbHVlKX19ZnVuY3Rpb24gYTIodCxlKXtpZigxJnQpe2NvbnN0IHQ9RXUoKTtPdSgwLCJkaXYiLDQ2KSxOdSgiY2xpY2siLChmdW5jdGlvbiB0KGUpe3JldHVybiBlLnN0b3BQcm9wYWdhdGlvbigpfSkpLE91KDEsIm1hdC1jaGVja2JveCIsNDIpLE51KCJjaGFuZ2UiLChmdW5jdGlvbiBuKCl7cmEodCk7Y29uc3Qgbz1lLiRpbXBsaWNpdCxpPUx1KDMpLiRpbXBsaWNpdDtyZXR1cm4gTHUoMikuaGFuZGxlSHBhcmFtRGlzY3JldGVDaGFuZ2VkKGksbyl9KSksT3UoMiwic3BhbiIpLE1mKDMpLFB1KCksUHUoKSxQdSgpfWlmKDImdCl7Y29uc3QgdD1lLiRpbXBsaWNpdCxuPUx1KDMpLiRpbXBsaWNpdDtKYygxKSx2dSgiY2hlY2tlZCIsbi5maWx0ZXIuZmlsdGVyVmFsdWVzLmluY2x1ZGVzKHQpKSxKYygyKSx2Zih0KX19ZnVuY3Rpb24gcjIodCxlKXtpZigxJnQmJihrdSgwKSxXbSgxLGEyLDQsMiwiZGl2Iiw0NSksU3UoKSksMiZ0KXtjb25zdCB0PUx1KDIpLiRpbXBsaWNpdDtKYygxKSx2dSgibmdGb3JPZiIsdC5maWx0ZXIucG9zc2libGVWYWx1ZXMpfX1mdW5jdGlvbiBzMih0LGUpe2lmKDEmdCl7Y29uc3QgdD1FdSgpO2t1KDApLE91KDEsImJ1dHRvbiIsMzgpLE51KCJjbGljayIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIGUuc3RvcFByb3BhZ2F0aW9uKCl9KSksd3UoMiwibWF0LWljb24iLDM5KSxQdSgpLE91KDMsIm1hdC1tZW51IixudWxsLDQwKSxPdSg1LCJkaXYiLDQxKSxOdSgiY2xpY2siLChmdW5jdGlvbiB0KGUpe3JldHVybiBlLnN0b3BQcm9wYWdhdGlvbigpfSkpLE91KDYsIm1hdC1jaGVja2JveCIsNDIpLE51KCJjaGFuZ2UiLChmdW5jdGlvbiBlKCl7cmEodCk7Y29uc3Qgbj1MdSgpLiRpbXBsaWNpdDtyZXR1cm4gTHUoMikuaGFuZGxlSHBhcmFtSW5jbHVkZVVuZGVmaW5lZFRvZ2dsZWQobil9KSksT3UoNywic3BhbiIpLE1mKDgsIihzaG93IGVtcHR5IHZhbHVlKSIpLFB1KCksUHUoKSxQdSgpLFdtKDksaTIsMyw0LCJuZy1jb250YWluZXIiLDM3KSxXbSgxMCxyMiwyLDEsIm5nLWNvbnRhaW5lciIsMzcpLFB1KCksU3UoKX1pZigyJnQpe2NvbnN0IHQ9R20oNCksZT1MdSgpLiRpbXBsaWNpdCxuPUx1KDIpO0pjKDEpLHZ1KCJtYXRNZW51VHJpZ2dlckZvciIsdCksTm0oImFyaWEtbGFiZWwiLCJGaWx0ZXIgaHBhcmFtICIrKGUuZGlzcGxheU5hbWV8fGUubmFtZSkpLEpjKDUpLHZ1KCJjaGVja2VkIixlLmZpbHRlci5pbmNsdWRlVW5kZWZpbmVkKSxKYygzKSx2dSgibmdJZiIsZS5maWx0ZXIudHlwZT09PW4uRG9tYWluVHlwZS5JTlRFUlZBTCksSmMoMSksdnUoIm5nSWYiLGUuZmlsdGVyLnR5cGU9PT1uLkRvbWFpblR5cGUuRElTQ1JFVEUpfX1jb25zdCBsMj1mdW5jdGlvbih0LGUpe3JldHVybnt0eXBlOnQsbmFtZTplfX07ZnVuY3Rpb24gYzIodCxlKXtpZigxJnQmJihPdSgwLCJzcGFuIiwzNSksT3UoMSwic3BhbiIsMzYpLE1mKDIpLFB1KCksV20oMyxzMiwxMSw1LCJuZy1jb250YWluZXIiLDM3KSxQdSgpKSwyJnQpe2NvbnN0IHQ9ZS4kaW1wbGljaXQsbj1MdSgyKTt2dSgibWF0LXNvcnQtaGVhZGVyIixoYigzLGwyLG4uU29ydFR5cGUuSFBBUkFNLHQubmFtZSkpLEpjKDIpLHZmKHQuZGlzcGxheU5hbWV8fHQubmFtZSksSmMoMSksdnUoIm5nSWYiLHQuZmlsdGVyKX19ZnVuY3Rpb24gZDIodCxlKXtpZigxJnQpe2NvbnN0IHQ9RXUoKTtrdSgwKSxPdSgxLCJidXR0b24iLDM4KSxOdSgiY2xpY2siLChmdW5jdGlvbiB0KGUpe3JldHVybiBlLnN0b3BQcm9wYWdhdGlvbigpfSkpLHd1KDIsIm1hdC1pY29uIiwzOSksUHUoKSxPdSgzLCJtYXQtbWVudSIsbnVsbCw0MCksT3UoNSwiZGl2Iiw0MSksTnUoImNsaWNrIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gZS5zdG9wUHJvcGFnYXRpb24oKX0pKSxPdSg2LCJtYXQtY2hlY2tib3giLDQyKSxOdSgiY2hhbmdlIiwoZnVuY3Rpb24gZSgpe3JhKHQpO2NvbnN0IG49THUoKS4kaW1wbGljaXQ7cmV0dXJuIEx1KDIpLmhhbmRsZU1ldHJpY0luY2x1ZGVVbmRlZmluZWRDaGFuZ2VkKG4pfSkpLE91KDcsInNwYW4iKSxNZig4LCIoc2hvdyBlbXB0eSB2YWx1ZSkiKSxQdSgpLFB1KCksUHUoKSxPdSg5LCJkaXYiLDQzKSxOdSgiY2xpY2siLChmdW5jdGlvbiB0KGUpe3JldHVybiBlLnN0b3BQcm9wYWdhdGlvbigpfSkpLE91KDEwLCJ0Yi1yYW5nZS1pbnB1dCIsNDQpLE51KCJ2YWx1ZSIsKGZ1bmN0aW9uIGUobil7cmEodCk7Y29uc3Qgbz1MdSgpLiRpbXBsaWNpdDtyZXR1cm4gTHUoMikuaGFuZGxlTWV0cmljRmlsdGVyQ2hhbmdlZChvLG4pfSkpLFB1KCksUHUoKSxQdSgpLFN1KCl9aWYoMiZ0KXtjb25zdCB0PUdtKDQpLGU9THUoKS4kaW1wbGljaXQ7SmMoMSksdnUoIm1hdE1lbnVUcmlnZ2VyRm9yIix0KSxObSgiYXJpYS1sYWJlbCIsIkZpbHRlciBtZXRyaWMgIisoZS5kaXNwbGF5TmFtZXx8ZS50YWcpKSxKYyg1KSx2dSgiY2hlY2tlZCIsZS5maWx0ZXIuaW5jbHVkZVVuZGVmaW5lZCksSmMoNCksdnUoIm1pbiIsZS5maWx0ZXIubWluVmFsdWUpKCJtYXgiLGUuZmlsdGVyLm1heFZhbHVlKSgibG93ZXJWYWx1ZSIsZS5maWx0ZXIuZmlsdGVyTG93ZXJWYWx1ZSkoInVwcGVyVmFsdWUiLGUuZmlsdGVyLmZpbHRlclVwcGVyVmFsdWUpfX1jb25zdCBwMj1mdW5jdGlvbih0LGUpe3JldHVybnt0eXBlOnQsdGFnOmV9fTtmdW5jdGlvbiBtMih0LGUpe2lmKDEmdCYmKE91KDAsInNwYW4iLDM1KSxPdSgxLCJzcGFuIiwzNiksTWYoMiksUHUoKSxXbSgzLGQyLDExLDcsIm5nLWNvbnRhaW5lciIsMzcpLFB1KCkpLDImdCl7Y29uc3QgdD1lLiRpbXBsaWNpdCxuPUx1KDIpO3Z1KCJtYXQtc29ydC1oZWFkZXIiLGhiKDMscDIsbi5Tb3J0VHlwZS5NRVRSSUMsdC50YWcpKSxKYygyKSx2Zih0LmRpc3BsYXlOYW1lfHx0LnRhZyksSmMoMSksdnUoIm5nSWYiLHQuZmlsdGVyKX19ZnVuY3Rpb24gdTIodCxlKXtpZigxJnQpe2NvbnN0IHQ9RXUoKTtPdSgwLCJkaXYiLDIyKSxPdSgxLCJkaXYiLDIzKSxOdSgibWF0U29ydENoYW5nZSIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIHJhKHQpLEx1KCkuaGFuZGxlU29ydENoYW5nZShuKX0pKSxXbSgyLG8yLDYsOCwic3BhbiIsMjQpLFdtKDMsYzIsNCw2LCJzcGFuIiwyNSksV20oNCxtMiw0LDYsInNwYW4iLDI1KSxQdSgpLFB1KCl9aWYoMiZ0KXtjb25zdCB0PUx1KCk7SmMoMSksdnUoIm1hdFNvcnRBY3RpdmUiLHQuc29ydE9wdGlvbi5jb2x1bW4pLEpjKDEpLHZ1KCJuZ0Zvck9mIix0LmNvbHVtbnMpLEpjKDEpLHZ1KCJuZ0Zvck9mIix0LmhwYXJhbUNvbHVtbnMpKCJuZ0ZvclRyYWNrQnkiLHQudHJhY2tCeUhwYXJhbUNvbHVtbiksSmMoMSksdnUoIm5nRm9yT2YiLHQubWV0cmljQ29sdW1ucykoIm5nRm9yVHJhY2tCeSIsdC50cmFja0J5TWV0cmljQ29sdW1uKX19ZnVuY3Rpb24gZjIodCxlKXtpZigxJnQpe2NvbnN0IHQ9RXUoKTtPdSgwLCJzcGFuIiksT3UoMSwibWF0LWNoZWNrYm94Iiw0MiksTnUoImNoYW5nZSIsKGZ1bmN0aW9uIGUoKXtyYSh0KTtjb25zdCBuPUx1KDIpLml0ZW07cmV0dXJuIEx1KCkub25TZWxlY3Rpb25Ub2dnbGUuZW1pdChuKX0pKSxQdSgpLFB1KCl9aWYoMiZ0KXtjb25zdCB0PUx1KDIpLml0ZW07SmMoMSksdnUoImNoZWNrZWQiLHQuc2VsZWN0ZWQpfX1mdW5jdGlvbiBnMih0LGUpe2lmKDEmdCYmKE91KDAsInNwYW4iLDM2KSxNZigxKSxQdSgpKSwyJnQpe2NvbnN0IHQ9THUoMikuaXRlbTtObSgidGl0bGUiLHQuZXhwZXJpbWVudE5hbWUpLEpjKDEpLHZmKHQuZXhwZXJpbWVudEFsaWFzKX19ZnVuY3Rpb24gaDIodCxlKXtpZigxJnQmJihPdSgwLCJzcGFuIiwzNiksTWYoMSksUHUoKSksMiZ0KXtjb25zdCB0PUx1KDIpLml0ZW07SmMoMSksdmYodC5ydW4ubmFtZSl9fWNvbnN0IGIyPWZ1bmN0aW9uKHQpe3JldHVybnsicnVuLWNvbG9yLXN3YXRjaCI6ITAsIm5vLWNvbG9yIjp0fX07ZnVuY3Rpb24geTIodCxlKXtpZigxJnQpe2NvbnN0IHQ9RXUoKTtPdSgwLCJzcGFuIiksT3UoMSwiYnV0dG9uIiw1MiksTnUoImNvbG9yUGlja2VyQ2hhbmdlIiwoZnVuY3Rpb24gZShuKXtyYSh0KTtjb25zdCBvPUx1KDIpLml0ZW07cmV0dXJuIEx1KCkub25SdW5Db2xvckNoYW5nZS5lbWl0KHtydW5JZDpvLnJ1bi5pZCxuZXdDb2xvcjpufSl9KSksUHUoKSxQdSgpfWlmKDImdCl7Y29uc3QgdD1MdSgyKS5pdGVtO0pjKDEpLG9mKCJiYWNrZ3JvdW5kIix0LnJ1bkNvbG9yKSx2dSgibmdDbGFzcyIsZ2IoOSxiMiwhdC5ydW5Db2xvcikpKCJjb2xvclBpY2tlciIsdC5ydW5Db2xvcikoImNwRGlhbG9nRGlzcGxheSIsInBvcHVwIikoImNwUG9zaXRpb24iLCJib3R0b20tcmlnaHQiKSgiY3BQb3NpdGlvbk9mZnNldCIsLTIwKSgiY3BVc2VSb290Vmlld0NvbnRhaW5lciIsITApKCJjcE91dHB1dEZvcm1hdCIsImhleCIpfX1mdW5jdGlvbiBfMih0LGUpe2lmKDEmdCYmKE91KDAsInNwYW4iLDUwKSxrdSgxLDI3KSxXbSgyLGYyLDIsMSwic3BhbiIsMzApLFdtKDMsZzIsMiwyLCJzcGFuIiw1MSksV20oNCxoMiwyLDEsInNwYW4iLDUxKSxXbSg1LHkyLDIsMTEsInNwYW4iLDMwKSxTdSgpLFB1KCkpLDImdCl7Y29uc3QgdD1lLiRpbXBsaWNpdCxuPUx1KDIpO3Z1KCJuZ0NsYXNzIixnYig2LG4yLCJ0Yi1jb2x1bW4tIit0KSksSmMoMSksdnUoIm5nU3dpdGNoIix0KSxKYygxKSx2dSgibmdTd2l0Y2hDYXNlIixuLlJ1bnNUYWJsZUNvbHVtbi5DSEVDS0JPWCksSmMoMSksdnUoIm5nU3dpdGNoQ2FzZSIsbi5SdW5zVGFibGVDb2x1bW4uRVhQRVJJTUVOVF9OQU1FKSxKYygxKSx2dSgibmdTd2l0Y2hDYXNlIixuLlJ1bnNUYWJsZUNvbHVtbi5SVU5fTkFNRSksSmMoMSksdnUoIm5nU3dpdGNoQ2FzZSIsbi5SdW5zVGFibGVDb2x1bW4uUlVOX0NPTE9SKX19ZnVuY3Rpb24gQzIodCxlKXtpZigxJnQmJihPdSgwLCJzcGFuIiw1MyksTWYoMSksUHUoKSksMiZ0KXtjb25zdCB0PWUuJGltcGxpY2l0LG49THUoKS5pdGVtO0pjKDEpLHZmKG4uaHBhcmFtcy5nZXQodC5uYW1lKSl9fWZ1bmN0aW9uIE0yKHQsZSl7aWYoMSZ0JiYoT3UoMCwic3BhbiIsNTMpLE1mKDEpLFB1KCkpLDImdCl7Y29uc3QgdD1lLiRpbXBsaWNpdCxuPUx1KCkuaXRlbTtKYygxKSx2ZihuLm1ldHJpY3MuZ2V0KHQudGFnKSl9fWZ1bmN0aW9uIHYyKHQsZSl7aWYoMSZ0JiYoT3UoMCwiZGl2Iiw0NyksV20oMSxfMiw2LDgsInNwYW4iLDQ4KSxXbSgyLEMyLDIsMSwic3BhbiIsNDkpLFdtKDMsTTIsMiwxLCJzcGFuIiw0OSksUHUoKSksMiZ0KXtjb25zdCB0PWUuaXRlbSxuPUx1KCk7Tm0oImRhdGEtaWQiLHQucnVuLmlkKSxKYygxKSx2dSgibmdGb3JPZiIsbi5jb2x1bW5zKSxKYygxKSx2dSgibmdGb3JPZiIsbi5ocGFyYW1Db2x1bW5zKSxKYygxKSx2dSgibmdGb3JPZiIsbi5tZXRyaWNDb2x1bW5zKX19Y2xhc3MgeDIgZXh0ZW5kcyAkUXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5pdGVtc1BlclBhZ2VMYWJlbD0iU2hvdyBydW5zOiJ9fXgyLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIE8yKGV8fHgyKX0seDIuybVwcm92PWxvKHt0b2tlbjp4MixmYWN0b3J5OngyLsm1ZmFjfSk7Y29uc3QgTzI9dnIoeDIpOygidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoeDIsW3t0eXBlOkptfV0sbnVsbCxudWxsKTtjbGFzcyBQMntjb25zdHJ1Y3Rvcigpe3RoaXMuZGF0YVNvdXJjZT1uZXcgcTAsdGhpcy5Eb21haW5UeXBlPUxBLHRoaXMuUnVuc1RhYmxlQ29sdW1uPURRLHRoaXMuU29ydFR5cGU9dE4sdGhpcy5vblJlZ2V4RmlsdGVyQ2hhbmdlPW5ldyBBYix0aGlzLm9uU2VsZWN0aW9uVG9nZ2xlPW5ldyBBYix0aGlzLm9uUGFnZVNlbGVjdGlvblRvZ2dsZT1uZXcgQWIsdGhpcy5vblNlbGVjdEFsbFBhZ2VzPW5ldyBBYix0aGlzLm9uUGFnaW5hdGlvbkNoYW5nZT1uZXcgQWIsdGhpcy5vblNvcnRDaGFuZ2U9bmV3IEFiLHRoaXMub25SdW5Db2xvckNoYW5nZT1uZXcgQWIsdGhpcy5vbkhwYXJhbURpc2NyZXRlRmlsdGVyQ2hhbmdlZD1uZXcgQWIsdGhpcy5vbkhwYXJhbUludGVydmFsRmlsdGVyQ2hhbmdlZD1uZXcgQWIsdGhpcy5vbk1ldHJpY0ZpbHRlckNoYW5nZWQ9bmV3IEFifW5nT25DaGFuZ2VzKCl7dGhpcy5kYXRhU291cmNlLmRhdGE9dGhpcy5wYWdlSXRlbXN9Z2V0SHBhcmFtQ29sdW1uSWQodCl7cmV0dXJuYGg6JHt0Lm5hbWV9YH1nZXRNZXRyaWNDb2x1bW5JZCh0KXtyZXR1cm5gbToke3QudGFnfWB9Z2V0Q29sdW1uSWRzKCl7cmV0dXJuWy4uLnRoaXMuY29sdW1ucywuLi50aGlzLmhwYXJhbUNvbHVtbnMubWFwKHRoaXMuZ2V0SHBhcmFtQ29sdW1uSWQpLC4uLnRoaXMubWV0cmljQ29sdW1ucy5tYXAodGhpcy5nZXRNZXRyaWNDb2x1bW5JZCldfWFsbFBhZ2VJdGVtc1NlbGVjdGVkKCl7cmV0dXJuIEJvb2xlYW4odGhpcy5wYWdlSXRlbXMubGVuZ3RoKSYmdGhpcy5wYWdlSXRlbXMuZXZlcnkoKHQ9PnQuc2VsZWN0ZWQpKX1zb21lUGFnZUl0ZW1zU2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5wYWdlSXRlbXMuc29tZSgodD0+dC5zZWxlY3RlZCkpfWhhbmRsZVBhZ2VUb2dnbGUoKXt0aGlzLm9uUGFnZVNlbGVjdGlvblRvZ2dsZS5lbWl0KHtpdGVtczp0aGlzLnBhZ2VJdGVtc30pfWhhbmRsZVNvcnRDaGFuZ2UodCl7bGV0IGU7c3dpdGNoKHQuZGlyZWN0aW9uKXtjYXNlImFzYyI6ZT1QTi5BU0M7YnJlYWs7Y2FzZSJkZXNjIjplPVBOLkRFU0M7YnJlYWs7ZGVmYXVsdDplPVBOLlVOU0VUfXRoaXMub25Tb3J0Q2hhbmdlLmVtaXQoe2tleTp0LmFjdGl2ZSxkaXJlY3Rpb246ZX0pfW9uRmlsdGVyS2V5VXAodCl7dGhpcy5vblJlZ2V4RmlsdGVyQ2hhbmdlLmVtaXQodC50YXJnZXQudmFsdWUpfXRhYmxlVHJhY2tCeSh0LGUpe3JldHVybiBlLnJ1bi5pZH1oYW5kbGVIcGFyYW1JbmNsdWRlVW5kZWZpbmVkVG9nZ2xlZCh0KXtjb25zdHtuYW1lOmUsZmlsdGVyOm59PXQ7aWYoIW4pdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFyaWFudCBlcnJvcjogcmVxdWlyZSBmaWx0ZXIgdG8gZXhpc3QgZm9yIGl0IHRvIGNoYW5nZSIpO24udHlwZT09PUxBLkRJU0NSRVRFP3RoaXMub25IcGFyYW1EaXNjcmV0ZUZpbHRlckNoYW5nZWQuZW1pdCh7aHBhcmFtTmFtZTplLGluY2x1ZGVVbmRlZmluZWQ6IW4uaW5jbHVkZVVuZGVmaW5lZCxmaWx0ZXJWYWx1ZXM6bi5maWx0ZXJWYWx1ZXN9KTp0aGlzLm9uSHBhcmFtSW50ZXJ2YWxGaWx0ZXJDaGFuZ2VkLmVtaXQoe25hbWU6ZSxpbmNsdWRlVW5kZWZpbmVkOiFuLmluY2x1ZGVVbmRlZmluZWQsZmlsdGVyTG93ZXJWYWx1ZTpuLmZpbHRlckxvd2VyVmFsdWUsZmlsdGVyVXBwZXJWYWx1ZTpuLmZpbHRlclVwcGVyVmFsdWV9KX1oYW5kbGVIcGFyYW1JbnRlcnZhbENoYW5nZWQodCxlKXtjb25zdHtuYW1lOm4sZmlsdGVyOm99PXQ7aWYoIW8pdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFyaWFudCBlcnJvcjogcmVxdWlyZSBmaWx0ZXIgdG8gZXhpc3QgZm9yIGl0IHRvIGNoYW5nZSIpO3RoaXMub25IcGFyYW1JbnRlcnZhbEZpbHRlckNoYW5nZWQuZW1pdCh7bmFtZTpuLGluY2x1ZGVVbmRlZmluZWQ6by5pbmNsdWRlVW5kZWZpbmVkLGZpbHRlckxvd2VyVmFsdWU6ZS5sb3dlclZhbHVlLGZpbHRlclVwcGVyVmFsdWU6ZS51cHBlclZhbHVlfSl9aGFuZGxlSHBhcmFtRGlzY3JldGVDaGFuZ2VkKHQsZSl7Y29uc3R7bmFtZTpuLGZpbHRlcjpvfT10O2lmKCFvKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhcmlhbnQgZXJyb3I6IHJlcXVpcmUgZmlsdGVyIHRvIGV4aXN0IGZvciBpdCB0byBjaGFuZ2UiKTtpZihvLnR5cGUhPT1MQS5ESVNDUkVURSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgSW52YXJpYW50IGVycm9yOiBleHBlY3RlZCBkaXNjcmV0ZSBkb21haW4gZm9yICR7bn1gKTtjb25zdCBpPW5ldyBTZXQoWy4uLm8uZmlsdGVyVmFsdWVzXSk7aS5oYXMoZSk/aS5kZWxldGUoZSk6aS5hZGQoZSksdGhpcy5vbkhwYXJhbURpc2NyZXRlRmlsdGVyQ2hhbmdlZC5lbWl0KHtocGFyYW1OYW1lOm4saW5jbHVkZVVuZGVmaW5lZDpvLmluY2x1ZGVVbmRlZmluZWQsZmlsdGVyVmFsdWVzOlsuLi5pXX0pfWhhbmRsZU1ldHJpY0luY2x1ZGVVbmRlZmluZWRDaGFuZ2VkKHQpe2lmKCF0LmZpbHRlcil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YXJpYW50IGVycm9yOiByZXF1aXJlIGZpbHRlciB0byBleGlzdCBmb3IgaXQgdG8gY2hhbmdlIik7dGhpcy5vbk1ldHJpY0ZpbHRlckNoYW5nZWQuZW1pdCh7bmFtZTp0LnRhZyxpbmNsdWRlVW5kZWZpbmVkOiF0LmZpbHRlci5pbmNsdWRlVW5kZWZpbmVkLGZpbHRlckxvd2VyVmFsdWU6dC5maWx0ZXIuZmlsdGVyTG93ZXJWYWx1ZSxmaWx0ZXJVcHBlclZhbHVlOnQuZmlsdGVyLmZpbHRlclVwcGVyVmFsdWV9KX1oYW5kbGVNZXRyaWNGaWx0ZXJDaGFuZ2VkKHQsZSl7aWYoIXQuZmlsdGVyKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhcmlhbnQgZXJyb3I6IHJlcXVpcmUgZmlsdGVyIHRvIGV4aXN0IGZvciBpdCB0byBjaGFuZ2UiKTt0aGlzLm9uTWV0cmljRmlsdGVyQ2hhbmdlZC5lbWl0KHtuYW1lOnQudGFnLGluY2x1ZGVVbmRlZmluZWQ6dC5maWx0ZXIuaW5jbHVkZVVuZGVmaW5lZCxmaWx0ZXJMb3dlclZhbHVlOmUubG93ZXJWYWx1ZSxmaWx0ZXJVcHBlclZhbHVlOmUudXBwZXJWYWx1ZX0pfXRyYWNrQnlIcGFyYW1Db2x1bW4odCl7cmV0dXJuIHQubmFtZX10cmFja0J5TWV0cmljQ29sdW1uKHQpe3JldHVybiB0LnRhZ319UDIuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFAyKX0sUDIuybVjbXA9VW8oe3R5cGU6UDIsc2VsZWN0b3JzOltbInJ1bnMtdGFibGUtY29tcG9uZW50Il1dLHZpZXdRdWVyeTpmdW5jdGlvbiB0KGUsbil7aWYoMSZlJiYoV2IoSDMsMyxjaCksV2IoYSQsMyksV2IoZCQsMykpLDImZSl7bGV0IHQ7VWIodD1ZYigpKSYmKG4uZmlsdGVyPXQuZmlyc3QpLFViKHQ9WWIoKSkmJihuLnBhZ2luYXRvcj10LmZpcnN0KSxVYih0PVliKCkpJiYobi5zb3J0PXQuZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezImZSYmYWYoImZsZXgtbGF5b3V0IixuLnVzZUZsZXhpYmxlTGF5b3V0KX0saW5wdXRzOntleHBlcmltZW50SWRzOiJleHBlcmltZW50SWRzIixzaG93RXhwZXJpbWVudE5hbWU6InNob3dFeHBlcmltZW50TmFtZSIsY29sdW1uczoiY29sdW1ucyIsaHBhcmFtQ29sdW1uczoiaHBhcmFtQ29sdW1ucyIsbWV0cmljQ29sdW1uczoibWV0cmljQ29sdW1ucyIsYWxsSXRlbXNMZW5ndGg6ImFsbEl0ZW1zTGVuZ3RoIixmaWx0ZXJlZEl0ZW1zTGVuZ3RoOiJmaWx0ZXJlZEl0ZW1zTGVuZ3RoIix1c2VGbGV4aWJsZUxheW91dDoidXNlRmxleGlibGVMYXlvdXQiLHVzZVBhZ2luYXRpb246InVzZVBhZ2luYXRpb24iLHNob3dHcm91cENvbnRyb2w6InNob3dHcm91cENvbnRyb2wiLHBhZ2VJdGVtczoicGFnZUl0ZW1zIixsb2FkaW5nOiJsb2FkaW5nIixudW1TZWxlY3RlZEl0ZW1zOiJudW1TZWxlY3RlZEl0ZW1zIixzb3J0T3B0aW9uOiJzb3J0T3B0aW9uIixwYWdpbmF0aW9uT3B0aW9uOiJwYWdpbmF0aW9uT3B0aW9uIixyZWdleEZpbHRlcjoicmVnZXhGaWx0ZXIifSxvdXRwdXRzOntvblJlZ2V4RmlsdGVyQ2hhbmdlOiJvblJlZ2V4RmlsdGVyQ2hhbmdlIixvblNlbGVjdGlvblRvZ2dsZToib25TZWxlY3Rpb25Ub2dnbGUiLG9uUGFnZVNlbGVjdGlvblRvZ2dsZToib25QYWdlU2VsZWN0aW9uVG9nZ2xlIixvblNlbGVjdEFsbFBhZ2VzOiJvblNlbGVjdEFsbFBhZ2VzIixvblBhZ2luYXRpb25DaGFuZ2U6Im9uUGFnaW5hdGlvbkNoYW5nZSIsb25Tb3J0Q2hhbmdlOiJvblNvcnRDaGFuZ2UiLG9uUnVuQ29sb3JDaGFuZ2U6Im9uUnVuQ29sb3JDaGFuZ2UiLG9uSHBhcmFtRGlzY3JldGVGaWx0ZXJDaGFuZ2VkOiJvbkhwYXJhbURpc2NyZXRlRmlsdGVyQ2hhbmdlZCIsb25IcGFyYW1JbnRlcnZhbEZpbHRlckNoYW5nZWQ6Im9uSHBhcmFtSW50ZXJ2YWxGaWx0ZXJDaGFuZ2VkIixvbk1ldHJpY0ZpbHRlckNoYW5nZWQ6Im9uTWV0cmljRmlsdGVyQ2hhbmdlZCJ9LGZlYXR1cmVzOltpaChbe3Byb3ZpZGU6JFEsdXNlQ2xhc3M6eDJ9XSksU2ldLGRlY2xzOjE4LHZhcnM6OCxjb25zdHM6W1sxLCJmaWx0ZXItcm93Il0sWyJwbGFjZWhvbGRlciIsIkZpbHRlciBydW5zIChyZWdleCkiLDEsInJ1bi1maWx0ZXIiLDMsImtleXVwIl0sWzEsInRhYmxlLWNvbnRhaW5lciJdLFsicm9sZSIsInRhYmxlIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiXSxbInJvbGUiLCJyb3dncm91cCIsMSwicm93cyJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiXSxbImNsYXNzIiwibG9hZGluZyIsNCwibmdJZiJdLFsiY2xhc3MiLCJuby1ydW5zIiw0LCJuZ0lmIl0sWyJzaG93Rmlyc3RMYXN0QnV0dG9ucyIsIiIsMywicGFnZVNpemVPcHRpb25zIiwicGFnZUluZGV4IiwicGFnZVNpemUiLCJsZW5ndGgiLCJwYWdlIiw0LCJuZ0lmIl0sWyJzZWxlY3RBbGwiLCIiXSxbImhlYWRlciIsIiJdLFsicm93IiwiIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCJdLFsxLCJsb2FkaW5nIl0sWyJtb2RlIiwiaW5kZXRlcm1pbmF0ZSIsImRpYW1ldGVyIiwiMjgiXSxbMSwibm8tcnVucyJdLFsic2hvd0ZpcnN0TGFzdEJ1dHRvbnMiLCIiLDMsInBhZ2VTaXplT3B0aW9ucyIsInBhZ2VJbmRleCIsInBhZ2VTaXplIiwibGVuZ3RoIiwicGFnZSJdLFsiY2xhc3MiLCJzZWxlY3QtYWxsIiwicm9sZSIsInJvdyIsNCwibmdJZiJdLFsicm9sZSIsInJvdyIsMSwic2VsZWN0LWFsbCJdLFsicm9sZSIsImNvbHVtbmhlYWRlciJdLFsibWF0LWJ1dHRvbiIsIiIsMywiY2xpY2siXSxbInJvbGUiLCJyb3dncm91cCIsMSwiaGVhZGVyIl0sWyJtYXRTb3J0IiwiIiwicm9sZSIsInJvdyIsMywibWF0U29ydEFjdGl2ZSIsIm1hdFNvcnRDaGFuZ2UiXSxbInJvbGUiLCJjb2x1bW5oZWFkZXIiLDMsIm5nQ2xhc3MiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsImNsYXNzIiwiY29sdW1uIiwzLCJtYXQtc29ydC1oZWFkZXIiLDQsIm5nRm9yIiwibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsMywibmdDbGFzcyJdLFszLCJuZ1N3aXRjaCJdLFszLCJjaGVja2VkIiwiaW5kZXRlcm1pbmF0ZSIsImNoYW5nZSIsNCwibmdTd2l0Y2hDYXNlIl0sWzMsIm1hdC1zb3J0LWhlYWRlciIsNCwibmdTd2l0Y2hDYXNlIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFszLCJjaGVja2VkIiwiaW5kZXRlcm1pbmF0ZSIsImNoYW5nZSJdLFszLCJtYXQtc29ydC1oZWFkZXIiXSxbMywiZXhwZXJpbWVudElkcyIsNCwibmdJZiJdLFszLCJleHBlcmltZW50SWRzIl0sWyJyb2xlIiwiY29sdW1uaGVhZGVyIiwxLCJjb2x1bW4iLDMsIm1hdC1zb3J0LWhlYWRlciJdLFsxLCJuYW1lIl0sWzQsIm5nSWYiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsMywibWF0TWVudVRyaWdnZXJGb3IiLCJjbGljayJdLFsic3ZnSWNvbiIsImZpbHRlcl9hbHRfMjRweCJdLFsiZmlsdGVyTWVudSIsIm1hdE1lbnUiXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJyb2xlIiwibWVudWl0ZW1jaGVja2JveCIsImRpc2FibGVSaXBwbGUiLCIiLDEsImZpbHRlci1tZW51LWNoZWNrYm94LXJvdyIsMywiY2xpY2siXSxbMywiY2hlY2tlZCIsImNoYW5nZSJdLFsiZGlzYWJsZVJpcHBsZSIsIiIsIm1hdC1tZW51LWl0ZW0iLCIiLDEsInJhbmdlLWlucHV0LWNvbnRhaW5lciIsMywiY2xpY2siXSxbMywibWluIiwibWF4IiwibG93ZXJWYWx1ZSIsInVwcGVyVmFsdWUiLCJ2YWx1ZSJdLFsibWF0LW1lbnUtaXRlbSIsIiIsImNsYXNzIiwiZmlsdGVyLW1lbnUtY2hlY2tib3gtcm93Iiwicm9sZSIsIm1lbnVpdGVtY2hlY2tib3giLDMsImNsaWNrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJyb2xlIiwibWVudWl0ZW1jaGVja2JveCIsMSwiZmlsdGVyLW1lbnUtY2hlY2tib3gtcm93IiwzLCJjbGljayJdLFsicm9sZSIsInJvdyJdLFsicm9sZSIsImNlbGwiLDMsIm5nQ2xhc3MiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsicm9sZSIsImNlbGwiLCJjbGFzcyIsImNvbHVtbiIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJyb2xlIiwiY2VsbCIsMywibmdDbGFzcyJdLFsiY2xhc3MiLCJuYW1lIiw0LCJuZ1N3aXRjaENhc2UiXSxbMywibmdDbGFzcyIsImNvbG9yUGlja2VyIiwiY3BEaWFsb2dEaXNwbGF5IiwiY3BQb3NpdGlvbiIsImNwUG9zaXRpb25PZmZzZXQiLCJjcFVzZVJvb3RWaWV3Q29udGFpbmVyIiwiY3BPdXRwdXRGb3JtYXQiLCJjb2xvclBpY2tlckNoYW5nZSJdLFsicm9sZSIsImNlbGwiLDEsImNvbHVtbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7aWYoMSZlJiYoT3UoMCwiZGl2IiwwKSxPdSgxLCJ0Yi1maWx0ZXItaW5wdXQiLDEpLE51KCJrZXl1cCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25GaWx0ZXJLZXlVcChlKX0pKSxQdSgpLFB1KCksT3UoMiwiZGl2IiwyKSxPdSgzLCJkaXYiLDMpLFdtKDQsRjMsMSwwLCJuZy1jb250YWluZXIiLDQpLFdtKDUsTDMsMSwwLCJuZy1jb250YWluZXIiLDQpLE91KDYsImRpdiIsNSksV20oNyxqMywyLDQsIm5nLWNvbnRhaW5lciIsNiksUHUoKSxQdSgpLFdtKDgsVTMsMiwwLCJkaXYiLDcpLFdtKDksVzMsMiwwLCJkaXYiLDgpLFdtKDEwLEczLDYsMSwiZGl2Iiw4KSxQdSgpLFdtKDExLHEzLDEsNSwibWF0LXBhZ2luYXRvciIsOSksV20oMTIsWDMsMSwxLCJuZy10ZW1wbGF0ZSIsbnVsbCwxMCxLYiksV20oMTQsdTIsNSw2LCJuZy10ZW1wbGF0ZSIsbnVsbCwxMSxLYiksV20oMTYsdjIsNCw0LCJuZy10ZW1wbGF0ZSIsbnVsbCwxMixLYikpLDImZSl7Y29uc3QgdD1HbSgxMyksZT1HbSgxNSk7SmMoNCksdnUoIm5nVGVtcGxhdGVPdXRsZXQiLGUpLEpjKDEpLHZ1KCJuZ1RlbXBsYXRlT3V0bGV0Iix0KSxKYygyKSx2dSgibmdGb3JPZiIsbi5wYWdlSXRlbXMpKCJuZ0ZvclRyYWNrQnkiLG4udGFibGVUcmFja0J5KSxKYygxKSx2dSgibmdJZiIsbi5sb2FkaW5nKSxKYygxKSx2dSgibmdJZiIsIW4ubG9hZGluZyYmMD09PW4uYWxsSXRlbXNMZW5ndGgpLEpjKDEpLHZ1KCJuZ0lmIiwhbi5sb2FkaW5nJiZuLmFsbEl0ZW1zTGVuZ3RoPjAmJjA9PT1uLmZpbHRlcmVkSXRlbXNMZW5ndGgpLEpjKDEpLHZ1KCJuZ0lmIixuLnVzZVBhZ2luYXRpb24pfX0sZGlyZWN0aXZlczpbZzEsaHYsb3YsYXYsUDEsYSQsTkgsZCQsdHYsY3YsZHYsdVksYiQsVzEsTkcsY0csREcsT0cscTEsSTNdLHN0eWxlczpbJy5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHh9Lm1hdC1oMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaGVhZGxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTVweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZ1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjA1ZW07bWFyZ2luOjAgMCA1NnB4fS5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAwNWVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXJhaXNlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdHJva2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmxhdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZhYltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbWluaS1mYWJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4fS5tYXQtY2FyZC1zdWJ0aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGVja2JveC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvb3Rlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgdHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIzZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LjU0MTY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2NjY2NjY3ZW0pfUBtZWRpYSBwcmludHsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjJlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouMjVlbSAwIC43NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxZW0gMCAxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMiksIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi0wLjA2MjVlbX0ubWF0LW1lbnUtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci12ZXJ0aWNhbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGFiLWxpbmtbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MH0ubWF0LXRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5Om5vbmV9LmNkay12aXN1YWxseS1oaWRkZW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjZ9LmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV0sIC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3hbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2tbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHt9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7fS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOi13ZWJraXQtYXV0b2ZpbGwpe2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZVtfbmdjb250ZW50LSVDT01QJV17cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fS5tYXQtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfVtfbmdob3N0LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmb250LXNpemU6MTNweDtvdmVyZmxvdzpoaWRkZW59LmZpbHRlci1yb3dbX25nY29udGVudC0lQ09NUCVde2ZsZXg6bm9uZX0udGFibGUtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtjb250YWluOmxheW91dCBwYWludDtmbGV4LWdyb3c6MTttYXgtd2lkdGg6MTAwJTtvdmVyZmxvdy14OmF1dG87b3ZlcmZsb3cteTphdXRvO3dpbGwtY2hhbmdlOnNjcm9sbC1wb3NpdGlvbn0uZmxleC1sYXlvdXRbX25naG9zdC0lQ09NUCVdICAgLm5hbWVbX25nY29udGVudC0lQ09NUCVde3dvcmQtYnJlYWs6YnJlYWstd29yZDtvdmVyZmxvdy13cmFwOmJyZWFrLXdvcmR9LmZsZXgtbGF5b3V0W19uZ2hvc3QtJUNPTVAlXSAgIG1hdC1wYWdpbmF0b3JbX25nY29udGVudC0lQ09NUCVde2JvcmRlci10b3A6MXB4IHNvbGlkICNlYmViZWI7cGFkZGluZy1ib3R0b206MTJweH1ib2R5LmRhcmstbW9kZSAgIC5mbGV4LWxheW91dFtfbmdob3N0LSVDT01QJV0gICBtYXQtcGFnaW5hdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItdG9wOjFweCBzb2xpZCAjNTU1fVtyb2xlPXRhYmxlXVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTp0YWJsZTt3aWR0aDoxMDAlfVtyb2xlPXRhYmxlXVtfbmdjb250ZW50LSVDT01QJV0gICAuaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXB9W3JvbGU9dGFibGVdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgW3JvbGU9Y29sdW1uaGVhZGVyXVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZmZmO3Bvc2l0aW9uOnN0aWNreTt0b3A6MDt6LWluZGV4OjF9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgW3JvbGU9dGFibGVdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgW3JvbGU9Y29sdW1uaGVhZGVyXVtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIFtyb2xlPXRhYmxlXVtfbmdjb250ZW50LSVDT01QJV0gICAuaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIFtyb2xlPWNvbHVtbmhlYWRlcl1bX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzMwMzAzMH1bcm9sZT10YWJsZV1bX25nY29udGVudC0lQ09NUCVdICAgW3JvbGU9cm93XVtfbmdjb250ZW50LSVDT01QJV17Y29udGFpbjpzdHJpY3Q7ZGlzcGxheTp0YWJsZS1yb3c7aGVpZ2h0OjQzcHh9W3JvbGU9dGFibGVdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIFtyb2xlPXJvd11bX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWJlYjtkaXNwbGF5OnRhYmxlLWNlbGw7cGFkZGluZzo1cHg7dmVydGljYWwtYWxpZ246bWlkZGxlfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIFtyb2xlPXRhYmxlXVtfbmdjb250ZW50LSVDT01QJV0gICBbcm9sZT1yb3ddW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb2x1bW5bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBbcm9sZT10YWJsZV1bX25nY29udGVudC0lQ09NUCVdICAgW3JvbGU9cm93XVtfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fVtyb2xlPXRhYmxlXVtfbmdjb250ZW50LSVDT01QJV0gICBbcm9sZT1yb3ddW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb2x1bW5bX25nY29udGVudC0lQ09NUCVdOmZpcnN0LWNoaWxke3BhZGRpbmctbGVmdDoyNHB4fVtyb2xlPXRhYmxlXVtfbmdjb250ZW50LSVDT01QJV0gICBbcm9sZT1yb3ddW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb2x1bW5bX25nY29udGVudC0lQ09NUCVdOmxhc3QtY2hpbGR7cGFkZGluZy1yaWdodDoyNHB4fVtyb2xlPXJvd2dyb3VwXVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTp0YWJsZS1yb3ctZ3JvdXB9W3JvbGU9cm93Z3JvdXBdLmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTp0YWJsZS1oZWFkZXItZ3JvdXB9LmxvYWRpbmdbX25nY29udGVudC0lQ09NUCVdLCAubm8tcnVuc1tfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2JvcmRlcjowO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7ZGlzcGxheTpmbGV4O2hlaWdodDo0OHB4O3BhZGRpbmc6MCAyNHB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5sb2FkaW5nW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmxvYWRpbmdbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM1NTV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm5vLXJ1bnNbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAubm8tcnVuc1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX0ubG9hZGluZ1tfbmdjb250ZW50LSVDT01QJV17anVzdGlmeS1jb250ZW50OmNlbnRlcn0uc2VsZWN0LWFsbFtfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MTJweDtwYWRkaW5nLXRvcDoxMnB4fS5zZWxlY3QtYWxsLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdLCAuc2VsZWN0LWFsbC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNjt0ZXh0LWFsaWduOmxlZnR9LnNlbGVjdC1hbGwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjUwMDtwYWRkaW5nOjAgNHB4fS5maWx0ZXItcm93W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmViO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7aGVpZ2h0OjQ4cHg7cGFkZGluZzowIDE2cHggMCAyMXB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5maWx0ZXItcm93W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmZpbHRlci1yb3dbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM1NTV9LmZpbHRlci1yb3dbX25nY29udGVudC0lQ09NUCVdICAgdGItZmlsdGVyLWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4LWdyb3c6MX0udGItY29sdW1uLWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXSwgLnRiLWNvbHVtbi1ydW5fY29sb3JbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjIwcHh9LnRiLWNvbHVtbi1ydW5fY29sb3JbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246Y2VudGVyfS5ydW4tY29sb3Itc3dhdGNoW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItcmFkaXVzOjEwMCU7Ym9yZGVyOjFweCBzb2xpZCAjZWJlYmViO2hlaWdodDoyMHB4O3dpZHRoOjIwcHg7b3V0bGluZTpub25lfS5ydW4tY29sb3Itc3dhdGNoLm5vLWNvbG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItY29sb3I6I2M2Y2FkMTtib3JkZXItd2lkdGg6MnB4fS5yYW5nZS1pbnB1dC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDphdXRvfVtfbmdob3N0LSVDT01QJV0gICAgIG1hdC1wYWdpbmF0b3IgbWF0LWZvcm0tZmllbGR7bWFyZ2luOjB9LmZpbHRlci1tZW51LWNoZWNrYm94LXJvd1tfbmdjb250ZW50LSVDT01QJV0gICBtYXQtY2hlY2tib3hbX25nY29udGVudC0lQ09NUCVdICAgICBsYWJlbHtkaXNwbGF5OmZsZXg7aGVpZ2h0OjEwMCU7YWxpZ24taXRlbXM6Y2VudGVyfS5maWx0ZXItbWVudS1jaGVja2JveC1yb3dbX25nY29udGVudC0lQ09NUCVdICAgbWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgbGFiZWwgLm1hdC1jaGVja2JveC1pbm5lci1jb250YWluZXJ7bWFyZ2luLWxlZnQ6MH0uZmlsdGVyLW1lbnUtY2hlY2tib3gtcm93W19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV0gICAgIGxhYmVsIC5tYXQtY2hlY2tib3gtbGFiZWx7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgbWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIG1hdC1wYWdpbmF0b3JbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzMwMzAzMH0nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoUDIsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoicnVucy10YWJsZS1jb21wb25lbnQiLHRlbXBsYXRlVXJsOiJydW5zX3RhYmxlX2NvbXBvbmVudC5uZy5odG1sIixob3N0OnsiW2NsYXNzLmZsZXgtbGF5b3V0XSI6InVzZUZsZXhpYmxlTGF5b3V0In0sc3R5bGVVcmxzOlsicnVuc190YWJsZV9jb21wb25lbnQuY3NzIl0sY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOiRRLHVzZUNsYXNzOngyfV19XX1dLG51bGwse2V4cGVyaW1lbnRJZHM6W3t0eXBlOnlffV0sc2hvd0V4cGVyaW1lbnROYW1lOlt7dHlwZTp5X31dLGNvbHVtbnM6W3t0eXBlOnlffV0saHBhcmFtQ29sdW1uczpbe3R5cGU6eV99XSxtZXRyaWNDb2x1bW5zOlt7dHlwZTp5X31dLGFsbEl0ZW1zTGVuZ3RoOlt7dHlwZTp5X31dLGZpbHRlcmVkSXRlbXNMZW5ndGg6W3t0eXBlOnlffV0sdXNlRmxleGlibGVMYXlvdXQ6W3t0eXBlOnlffV0sdXNlUGFnaW5hdGlvbjpbe3R5cGU6eV99XSxzaG93R3JvdXBDb250cm9sOlt7dHlwZTp5X31dLHBhZ2VJdGVtczpbe3R5cGU6eV99XSxsb2FkaW5nOlt7dHlwZTp5X31dLG51bVNlbGVjdGVkSXRlbXM6W3t0eXBlOnlffV0sc29ydE9wdGlvbjpbe3R5cGU6eV99XSxwYWdpbmF0aW9uT3B0aW9uOlt7dHlwZTp5X31dLHJlZ2V4RmlsdGVyOlt7dHlwZTp5X31dLG9uUmVnZXhGaWx0ZXJDaGFuZ2U6W3t0eXBlOl9ffV0sb25TZWxlY3Rpb25Ub2dnbGU6W3t0eXBlOl9ffV0sb25QYWdlU2VsZWN0aW9uVG9nZ2xlOlt7dHlwZTpfX31dLG9uU2VsZWN0QWxsUGFnZXM6W3t0eXBlOl9ffV0sb25QYWdpbmF0aW9uQ2hhbmdlOlt7dHlwZTpfX31dLG9uU29ydENoYW5nZTpbe3R5cGU6X199XSxvblJ1bkNvbG9yQ2hhbmdlOlt7dHlwZTpfX31dLG9uSHBhcmFtRGlzY3JldGVGaWx0ZXJDaGFuZ2VkOlt7dHlwZTpfX31dLG9uSHBhcmFtSW50ZXJ2YWxGaWx0ZXJDaGFuZ2VkOlt7dHlwZTpfX31dLG9uTWV0cmljRmlsdGVyQ2hhbmdlZDpbe3R5cGU6X199XSxmaWx0ZXI6W3t0eXBlOkZyLGFyZ3M6WyJmaWx0ZXIiLHtzdGF0aWM6ITAscmVhZDpjaH1dfV0scGFnaW5hdG9yOlt7dHlwZTpGcixhcmdzOlthJCx7c3RhdGljOiEwfV19XSxzb3J0Olt7dHlwZTpGcixhcmdzOltkJCx7c3RhdGljOiEwfV19XX0pO2NvbnN0IHcyPXprKG1OLCh0PT50LnN0YXRlPT09QkUuTE9BRElORykpO2Z1bmN0aW9uIGsyKHQsZSl7c3dpdGNoKGUudHlwZSl7Y2FzZSB0Ti5FWFBFUklNRU5UX05BTUU6cmV0dXJuW3QuZXhwZXJpbWVudEFsaWFzLHQucnVuLm5hbWUsdC5ydW4uaWRdO2Nhc2UgdE4uUlVOX05BTUU6cmV0dXJuW3QucnVuLm5hbWUsdC5leHBlcmltZW50QWxpYXMsdC5ydW4uaWRdO2Nhc2UgdE4uSFBBUkFNOnJldHVyblt0LmhwYXJhbXMuZ2V0KGUubmFtZSksdC5ydW4ubmFtZSx0LmV4cGVyaW1lbnRBbGlhcyx0LnJ1bi5pZF07Y2FzZSB0Ti5NRVRSSUM6cmV0dXJuW3QubWV0cmljcy5nZXQoZS50YWcpLHQucnVuLm5hbWUsdC5leHBlcmltZW50QWxpYXMsdC5ydW4uaWRdO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBOb3QgeWV0IGltcGxlbWVudGVkOiAke2V9YCl9fWZ1bmN0aW9uIFMyKHQsZSl7cmV0dXJuIHZvaWQgMD09PWU/dC5pbmNsdWRlVW5kZWZpbmVkOnQudHlwZT09PUxBLkRJU0NSRVRFP3QuZmlsdGVyVmFsdWVzLmluY2x1ZGVzKGUpOnQudHlwZT09PUxBLklOVEVSVkFMJiZ0LmZpbHRlckxvd2VyVmFsdWU8PWUmJmU8PXQuZmlsdGVyVXBwZXJWYWx1ZX1jbGFzcyBEMntjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXQsdGhpcy5sb2FkaW5nJD1udWxsLHRoaXMuaHBhcmFtQ29sdW1ucyQ9WihbXSksdGhpcy5tZXRyaWNDb2x1bW5zJD1aKFtdKSx0aGlzLnVzZUZsZXhpYmxlTGF5b3V0PSExLHRoaXMudXNlUGFnaW5hdGlvbj0hMSx0aGlzLmNvbHVtbnM9W0RRLlJVTl9OQU1FXSx0aGlzLnNob3dIcGFyYW1zQW5kTWV0cmljcz0hMSx0aGlzLnNvcnRPcHRpb24kPXRoaXMuc3RvcmUuc2VsZWN0KF9OKSx0aGlzLnBhZ2luYXRpb25PcHRpb24kPXRoaXMuc3RvcmUuc2VsZWN0KHlOKSx0aGlzLnJlZ2V4RmlsdGVyJD10aGlzLnN0b3JlLnNlbGVjdChoTiksdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyB4fWlzRXhwZXJpbWVudE5hbWVWaXNpYmxlKCl7cmV0dXJuIHRoaXMuY29sdW1ucy5zb21lKCh0PT50PT09RFEuRVhQRVJJTUVOVF9OQU1FKSl9bmdPbkluaXQoKXtjb25zdCB0PUR0KHRoaXMuZXhwZXJpbWVudElkcy5tYXAoKHQ9PnRoaXMuZ2V0UnVuVGFibGVJdGVtc0ZvckV4cGVyaW1lbnQodCkpKSkucGlwZShodCgodD0+W10uY29uY2F0KC4uLnQpKSkpO3RoaXMuYWxsVW5zb3J0ZWRSdW5UYWJsZUl0ZW1zJD10LnBpcGUoYW4oMSkpLHRoaXMuYWxsSXRlbXNMZW5ndGgkPXRoaXMuYWxsVW5zb3J0ZWRSdW5UYWJsZUl0ZW1zJC5waXBlKGh0KCh0PT50Lmxlbmd0aCkpKTtjb25zdCBlPXRoaXMuZ2V0RmlsdGVyZWRJdGVtcyQodGhpcy5hbGxVbnNvcnRlZFJ1blRhYmxlSXRlbXMkKS5waXBlKGFuKDEpKTt0aGlzLmZpbHRlcmVkSXRlbXNMZW5ndGgkPWUucGlwZShodCgodD0+dC5sZW5ndGgpKSksdGhpcy5wYWdlSXRlbXMkPXRoaXMuc29ydGVkQW5kU2xpY2VkSXRlbXMkKGUpLHRoaXMubnVtU2VsZWN0ZWRJdGVtcyQ9dGhpcy5hbGxVbnNvcnRlZFJ1blRhYmxlSXRlbXMkLnBpcGUoaHQoKHQ9PnQucmVkdWNlKCgodCxlKT0+dCtOdW1iZXIoZS5zZWxlY3RlZCkpLDApKSkpO2NvbnN0IG49dGhpcy5leHBlcmltZW50SWRzLm1hcCgodD0+dGhpcy5zdG9yZS5zZWxlY3QodzIse2V4cGVyaW1lbnRJZDp0fSkpKTtpZih0aGlzLmxvYWRpbmckPUR0KG4pLnBpcGUoaHQoKHQ9PnQuc29tZSgodD0+dCkpKSkpLHRoaXMuc2hvd0hwYXJhbXNBbmRNZXRyaWNzKXtjb25zdCB0PXRoaXMuc3RvcmUuc2VsZWN0KElRLHtleHBlcmltZW50SWRzOnRoaXMuZXhwZXJpbWVudElkc30pO3RoaXMuaHBhcmFtQ29sdW1ucyQ9RHQoW3RoaXMuc3RvcmUuc2VsZWN0KFJRLHRoaXMuZXhwZXJpbWVudElkcyksdF0pLnBpcGUoaHQoKChbdCx7aHBhcmFtczplfV0pPT5lLm1hcCgoKHtuYW1lOmUsZGlzcGxheU5hbWU6bn0pPT57Y29uc3Qgbz10LmdldChlKTtpZighbyl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgSW52YXJpYW50IGVycm9yOiBhIGZpbHRlciBmb3IgJHtlfSBtdXN0IGV4aXN0IHdoZW4gdGhlIGhwYXJhbSBleGlzdHNgKTtyZXR1cm57ZGlzcGxheU5hbWU6bixuYW1lOmUsZmlsdGVyOm99fSkpKSkpLHRoaXMubWV0cmljQ29sdW1ucyQ9RHQoW3RoaXMuc3RvcmUuc2VsZWN0KE5RLHRoaXMuZXhwZXJpbWVudElkcyksdF0pLnBpcGUoaHQoKChbdCx7bWV0cmljczplfV0pPT5lLm1hcCgoKHt0YWc6ZSxkaXNwbGF5TmFtZTpufSk9Pntjb25zdCBvPXQuZ2V0KGUpO2lmKCFvKXRocm93IG5ldyBSYW5nZUVycm9yKGBJbnZhcmlhbnQgZXJyb3I6IGEgZmlsdGVyIGZvciAke2V9IG11c3QgZXhpc3Qgd2hlbiB0aGUgbWV0cmljIGV4aXN0c2ApO3JldHVybntkaXNwbGF5TmFtZTpuLHRhZzplLGZpbHRlcjpvfX0pKSkpKX10aGlzLmNvbHVtbnMuaW5jbHVkZXMoRFEuQ0hFQ0tCT1gpJiZ0aGlzLnN0b3JlLnNlbGVjdChPRCkucGlwZSh1bih0aGlzLm5nVW5zdWJzY3JpYmUpLGRuKCgoKT0+dC5waXBlKEd0KCh0PT50Lmxlbmd0aD41MDApKSxOZSgxKSkpKSkuc3Vic2NyaWJlKCgoKT0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goS04oe2xvY2FsaXplZE1lc3NhZ2U6IlRoZSBudW1iZXIgb2YgcnVucyBleGNlZWRzIDUwMC4gTmV3IHJ1bnMgYXJlIHVuc2VsZWN0ZWQgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuIn0pKX0pKSx0aGlzLnNob3dHcm91cENvbnRyb2wkPXRoaXMuc3RvcmUuc2VsZWN0KFBFKS5waXBlKGh0KCh0PT50JiZ0aGlzLmNvbHVtbnMuaW5jbHVkZXMoRFEuUlVOX0NPTE9SKSkpKSx0aGlzLnN0b3JlLmRpc3BhdGNoKE5BKHtleHBlcmltZW50SWRzOnRoaXMuZXhwZXJpbWVudElkc30pKX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9Z2V0RmlsdGVyZWRJdGVtcyQodCl7cmV0dXJuIER0KFt0LHRoaXMuc3RvcmUuc2VsZWN0KGhOKV0pLnBpcGUoaHQoKChbdCxlXSk9PntpZighZSlyZXR1cm4gdDtsZXQgbj1udWxsO3RyeXtuPWU/bmV3IFJlZ0V4cChlKTpudWxsfWNhdGNoKHQpe31pZighbilyZXR1cm5bXTtjb25zdCBvPXRoaXMuY29sdW1ucy5pbmNsdWRlcyhEUS5FWFBFUklNRU5UX05BTUUpO3JldHVybiB0LmZpbHRlcigodD0+e2lmKG49biwhbylyZXR1cm4gbi50ZXN0KHQucnVuLm5hbWUpO2NvbnN0IGU9YCR7dC5leHBlcmltZW50TmFtZX0vJHt0LnJ1bi5uYW1lfWA7cmV0dXJuIG4udGVzdCh0LnJ1bi5uYW1lKXx8bi50ZXN0KHQuZXhwZXJpbWVudEFsaWFzKXx8bi50ZXN0KHQuZXhwZXJpbWVudE5hbWUpfHxuLnRlc3QoZSl9KSl9KSksY2UodGhpcy5zdG9yZS5zZWxlY3QoUlEsdGhpcy5leHBlcmltZW50SWRzKSx0aGlzLnN0b3JlLnNlbGVjdChOUSx0aGlzLmV4cGVyaW1lbnRJZHMpKSxodCgoKFt0LGUsbl0pPT50aGlzLnNob3dIcGFyYW1zQW5kTWV0cmljcz90LmZpbHRlcigoKHtocGFyYW1zOnQsbWV0cmljczpvfSk9PlsuLi5lLmVudHJpZXMoKV0uZXZlcnkoKChbZSxuXSk9PlMyKG4sdC5nZXQoZSkpKSkmJlsuLi5uLmVudHJpZXMoKV0uZXZlcnkoKChbdCxlXSk9PlMyKGUsby5nZXQodCkpKSkpKTp0KSkpfXNvcnRlZEFuZFNsaWNlZEl0ZW1zJCh0KXtjb25zdCBlPUR0KFt0LHRoaXMuc3RvcmUuc2VsZWN0KF9OKV0pLnBpcGUoaHQoKChbdCxlXSk9PihmdW5jdGlvbiBuKHQsZSl7Y29uc3Qgbj1lLmtleSxvPVsuLi50XTtyZXR1cm4gbnVsbD09PW58fGUuZGlyZWN0aW9uPT09UE4uVU5TRVR8fG8uc29ydCgoKHQsbyk9Pntjb25zdCBpPWsyKHQsbiksYT1rMihvLG4pO2lmKGkubGVuZ3RoIT09YS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKGBJbnZhcmlhbnQgZXJyb3I6IGEgZ2l2ZW4gc29ydCBzaG91bGQgcmVzdWx0IGluIHNhbWUgbnVtYmVyIG9mIGl0ZW1zOiAke2V9YCk7Zm9yKGxldCB0PTA7dDxpLmxlbmd0aDt0Kyspe2NvbnN0IG49aVt0XSxvPWFbdF07aWYobiE9PW8pe2lmKHZvaWQgMD09PW58fHZvaWQgMD09PW8pcmV0dXJuIHZvaWQgMD09PW8/LTE6MTtpZih0eXBlb2YgbiE9dHlwZW9mIG8pdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY29tcGFyZSB2YWx1ZXMgb2YgZGlmZmVyZW50IHR5cGVzOiAke3R5cGVvZiBufSB2cy4gJHt0eXBlb2Ygb31gKTtyZXR1cm4gbjxvPT0oZS5kaXJlY3Rpb249PT1QTi5BU0MpPy0xOjF9fXJldHVybiAwfSkpLG99KSh0LGUpKSkpO3JldHVybiBEdChbZSx0aGlzLnN0b3JlLnNlbGVjdCh5TildKS5waXBlKGh0KCgoW3QsZV0pPT57aWYoIXRoaXMudXNlUGFnaW5hdGlvbilyZXR1cm4gdC5zbGljZSgpO2NvbnN0e3BhZ2VTaXplOm4scGFnZUluZGV4Om99PWU7cmV0dXJuIHQuc2xpY2UobypuLChvKzEpKm4pfSkpLGNuKFtdKSl9Z2V0UnVuVGFibGVJdGVtc0ZvckV4cGVyaW1lbnQodCl7cmV0dXJuIER0KFt0aGlzLnN0b3JlLnNlbGVjdChjTix7ZXhwZXJpbWVudElkOnR9KSx0aGlzLnN0b3JlLnNlbGVjdChpUix7ZXhwZXJpbWVudElkOnR9KSx0aGlzLnN0b3JlLnNlbGVjdCh2TiksdGhpcy5zdG9yZS5zZWxlY3QoQ04pLHRoaXMuc3RvcmUuc2VsZWN0KFBEKV0pLnBpcGUoaHQoKChbZSxuLG8saSxhXSk9PmUubWFwKChlPT57Y29uc3Qgcj1uZXcgTWFwOyhlLmhwYXJhbXN8fFtdKS5mb3JFYWNoKCh0PT57ci5zZXQodC5uYW1lLHQudmFsdWUpfSkpO2NvbnN0IHM9bmV3IE1hcDtyZXR1cm4oZS5tZXRyaWNzfHxbXSkuZm9yRWFjaCgodD0+e3Muc2V0KHQudGFnLHQudmFsdWUpfSkpLHtydW46ZSxleHBlcmltZW50TmFtZToobnVsbD09bj92b2lkIDA6bi5uYW1lKXx8IiIsZXhwZXJpbWVudEFsaWFzOmFbdF0sc2VsZWN0ZWQ6Qm9vbGVhbihvJiZvLmdldChlLmlkKSkscnVuQ29sb3I6aVtlLmlkXSxocGFyYW1zOnIsbWV0cmljczpzfX0pKSkpKX1vblJ1blNlbGVjdGlvblRvZ2dsZSh0KXt0aGlzLnN0b3JlLmRpc3BhdGNoKGtBKHtleHBlcmltZW50SWRzOnRoaXMuZXhwZXJpbWVudElkcyxydW5JZDp0LnJ1bi5pZH0pKX1vblBhZ2VTZWxlY3Rpb25Ub2dnbGUodCl7Y29uc3R7aXRlbXM6ZX09dCxuPWUubWFwKCgoe3J1bjp0fSk9PnQuaWQpKTt0aGlzLnN0b3JlLmRpc3BhdGNoKFNBKHtleHBlcmltZW50SWRzOnRoaXMuZXhwZXJpbWVudElkcyxydW5JZHM6bn0pKX1vblNlbGVjdEFsbFBhZ2VzKCl7aWYoIXRoaXMudXNlUGFnaW5hdGlvbil0aHJvdyBuZXcgRXJyb3IoIlNlbGVjdCBhbGwgZXZlbnRzIGNhbm5vdCBiZSBkaXNwYXRjaGVkIHdoZW4gcGFnaW5hdGlvbiBpcyBkaXNhYmxlZCIpO3RoaXMuc3RvcmUuZGlzcGF0Y2goREEoe2V4cGVyaW1lbnRJZHM6dGhpcy5leHBlcmltZW50SWRzfSkpfW9uUGFnaW5hdGlvbkNoYW5nZSh0KXtpZighdGhpcy51c2VQYWdpbmF0aW9uKXRocm93IG5ldyBFcnJvcigiUGFnaW5hdGlvbiBldmVudHMgY2Fubm90IGJlIGRpc3BhdGNoZWQgd2hlbiBwYWdpbmF0aW9uIGlzIGRpc2FibGVkIik7Y29uc3R7cGFnZUluZGV4OmUscGFnZVNpemU6bn09dDt0aGlzLnN0b3JlLmRpc3BhdGNoKEVBKHtwYWdlSW5kZXg6ZSxwYWdlU2l6ZTpufSkpfW9uU29ydENoYW5nZSh0KXt0aGlzLnN0b3JlLmRpc3BhdGNoKEFBKHQpKX1vblJlZ2V4RmlsdGVyQ2hhbmdlKHQpe3RoaXMuc3RvcmUuZGlzcGF0Y2goUkEoe3JlZ2V4U3RyaW5nOnR9KSl9b25SdW5Db2xvckNoYW5nZSh7cnVuSWQ6dCxuZXdDb2xvcjplfSl7dGhpcy5zdG9yZS5kaXNwYXRjaChUQSh7cnVuSWQ6dCxuZXdDb2xvcjplfSkpfW9uSHBhcmFtRGlzY3JldGVGaWx0ZXJDaGFuZ2VkKHQpe2NvbnN0e2hwYXJhbU5hbWU6ZSxmaWx0ZXJWYWx1ZXM6bixpbmNsdWRlVW5kZWZpbmVkOm99PXQ7dGhpcy5zdG9yZS5kaXNwYXRjaChWQSh7ZXhwZXJpbWVudElkczp0aGlzLmV4cGVyaW1lbnRJZHMsaHBhcmFtTmFtZTplLGZpbHRlclZhbHVlczpuLGluY2x1ZGVVbmRlZmluZWQ6b30pKX1vbkhwYXJhbUludGVydmFsRmlsdGVyQ2hhbmdlZCh0KXtjb25zdHtuYW1lOmUsZmlsdGVyTG93ZXJWYWx1ZTpuLGZpbHRlclVwcGVyVmFsdWU6byxpbmNsdWRlVW5kZWZpbmVkOml9PXQ7dGhpcy5zdG9yZS5kaXNwYXRjaChqQSh7ZXhwZXJpbWVudElkczp0aGlzLmV4cGVyaW1lbnRJZHMsaHBhcmFtTmFtZTplLGZpbHRlckxvd2VyVmFsdWU6bixmaWx0ZXJVcHBlclZhbHVlOm8saW5jbHVkZVVuZGVmaW5lZDppfSkpfW9uTWV0cmljRmlsdGVyQ2hhbmdlZCh0KXtjb25zdHtuYW1lOmUsaW5jbHVkZVVuZGVmaW5lZDpuLGZpbHRlckxvd2VyVmFsdWU6byxmaWx0ZXJVcHBlclZhbHVlOml9PXQ7dGhpcy5zdG9yZS5kaXNwYXRjaChVQSh7ZXhwZXJpbWVudElkczp0aGlzLmV4cGVyaW1lbnRJZHMsbWV0cmljVGFnOmUsaW5jbHVkZVVuZGVmaW5lZDpuLGZpbHRlckxvd2VyVmFsdWU6byxmaWx0ZXJVcHBlclZhbHVlOml9KSl9fUQyLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxEMikoTXUoRWspKX0sRDIuybVjbXA9VW8oe3R5cGU6RDIsc2VsZWN0b3JzOltbInJ1bnMtdGFibGUiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezImZSYmYWYoImZsZXgtbGF5b3V0IixuLnVzZUZsZXhpYmxlTGF5b3V0KX0saW5wdXRzOnt1c2VGbGV4aWJsZUxheW91dDoidXNlRmxleGlibGVMYXlvdXQiLHVzZVBhZ2luYXRpb246InVzZVBhZ2luYXRpb24iLGNvbHVtbnM6ImNvbHVtbnMiLGV4cGVyaW1lbnRJZHM6ImV4cGVyaW1lbnRJZHMiLHNob3dIcGFyYW1zQW5kTWV0cmljczoic2hvd0hwYXJhbXNBbmRNZXRyaWNzIn0sZGVjbHM6MTIsdmFyczozOCxjb25zdHM6W1szLCJleHBlcmltZW50SWRzIiwidXNlRmxleGlibGVMYXlvdXQiLCJudW1TZWxlY3RlZEl0ZW1zIiwiY29sdW1ucyIsImhwYXJhbUNvbHVtbnMiLCJtZXRyaWNDb2x1bW5zIiwic2hvd0V4cGVyaW1lbnROYW1lIiwicGFnZUl0ZW1zIiwiZmlsdGVyZWRJdGVtc0xlbmd0aCIsImFsbEl0ZW1zTGVuZ3RoIiwibG9hZGluZyIsInBhZ2luYXRpb25PcHRpb24iLCJyZWdleEZpbHRlciIsInNob3dHcm91cENvbnRyb2wiLCJzb3J0T3B0aW9uIiwidXNlUGFnaW5hdGlvbiIsIm9uU2VsZWN0aW9uVG9nZ2xlIiwib25QYWdlU2VsZWN0aW9uVG9nZ2xlIiwib25TZWxlY3RBbGxQYWdlcyIsIm9uUGFnaW5hdGlvbkNoYW5nZSIsIm9uUmVnZXhGaWx0ZXJDaGFuZ2UiLCJvblNvcnRDaGFuZ2UiLCJvblJ1bkNvbG9yQ2hhbmdlIiwib25IcGFyYW1JbnRlcnZhbEZpbHRlckNoYW5nZWQiLCJvbkhwYXJhbURpc2NyZXRlRmlsdGVyQ2hhbmdlZCIsIm9uTWV0cmljRmlsdGVyQ2hhbmdlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoT3UoMCwicnVucy10YWJsZS1jb21wb25lbnQiLDApLE51KCJvblNlbGVjdGlvblRvZ2dsZSIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25SdW5TZWxlY3Rpb25Ub2dnbGUoZSl9KSkoIm9uUGFnZVNlbGVjdGlvblRvZ2dsZSIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25QYWdlU2VsZWN0aW9uVG9nZ2xlKGUpfSkpKCJvblNlbGVjdEFsbFBhZ2VzIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uU2VsZWN0QWxsUGFnZXMoKX0pKSgib25QYWdpbmF0aW9uQ2hhbmdlIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vblBhZ2luYXRpb25DaGFuZ2UoZSl9KSkoIm9uUmVnZXhGaWx0ZXJDaGFuZ2UiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLm9uUmVnZXhGaWx0ZXJDaGFuZ2UoZSl9KSkoIm9uU29ydENoYW5nZSIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25Tb3J0Q2hhbmdlKGUpfSkpKCJvblJ1bkNvbG9yQ2hhbmdlIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vblJ1bkNvbG9yQ2hhbmdlKGUpfSkpKCJvbkhwYXJhbUludGVydmFsRmlsdGVyQ2hhbmdlZCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25IcGFyYW1JbnRlcnZhbEZpbHRlckNoYW5nZWQoZSl9KSkoIm9uSHBhcmFtRGlzY3JldGVGaWx0ZXJDaGFuZ2VkIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vbkhwYXJhbURpc2NyZXRlRmlsdGVyQ2hhbmdlZChlKX0pKSgib25NZXRyaWNGaWx0ZXJDaGFuZ2VkIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vbk1ldHJpY0ZpbHRlckNoYW5nZWQoZSl9KSksT2IoMSwiYXN5bmMiKSxPYigyLCJhc3luYyIpLE9iKDMsImFzeW5jIiksT2IoNCwiYXN5bmMiKSxPYig1LCJhc3luYyIpLE9iKDYsImFzeW5jIiksT2IoNywiYXN5bmMiKSxPYig4LCJhc3luYyIpLE9iKDksImFzeW5jIiksT2IoMTAsImFzeW5jIiksT2IoMTEsImFzeW5jIiksUHUoKSksMiZlJiZ2dSgiZXhwZXJpbWVudElkcyIsbi5leHBlcmltZW50SWRzKSgidXNlRmxleGlibGVMYXlvdXQiLG4udXNlRmxleGlibGVMYXlvdXQpKCJudW1TZWxlY3RlZEl0ZW1zIixQYigxLDE2LG4ubnVtU2VsZWN0ZWRJdGVtcyQpKSgiY29sdW1ucyIsbi5jb2x1bW5zKSgiaHBhcmFtQ29sdW1ucyIsUGIoMiwxOCxuLmhwYXJhbUNvbHVtbnMkKSkoIm1ldHJpY0NvbHVtbnMiLFBiKDMsMjAsbi5tZXRyaWNDb2x1bW5zJCkpKCJzaG93RXhwZXJpbWVudE5hbWUiLG4uaXNFeHBlcmltZW50TmFtZVZpc2libGUoKSkoInBhZ2VJdGVtcyIsUGIoNCwyMixuLnBhZ2VJdGVtcyQpKSgiZmlsdGVyZWRJdGVtc0xlbmd0aCIsUGIoNSwyNCxuLmZpbHRlcmVkSXRlbXNMZW5ndGgkKSkoImFsbEl0ZW1zTGVuZ3RoIixQYig2LDI2LG4uYWxsSXRlbXNMZW5ndGgkKSkoImxvYWRpbmciLFBiKDcsMjgsbi5sb2FkaW5nJCkpKCJwYWdpbmF0aW9uT3B0aW9uIixQYig4LDMwLG4ucGFnaW5hdGlvbk9wdGlvbiQpKSgicmVnZXhGaWx0ZXIiLFBiKDksMzIsbi5yZWdleEZpbHRlciQpKSgic2hvd0dyb3VwQ29udHJvbCIsUGIoMTAsMzQsbi5zaG93R3JvdXBDb250cm9sJCkpKCJzb3J0T3B0aW9uIixQYigxMSwzNixuLnNvcnRPcHRpb24kKSkoInVzZVBhZ2luYXRpb24iLG4udXNlUGFnaW5hdGlvbil9LGRpcmVjdGl2ZXM6W1AyXSxwaXBlczpbTXZdLHN0eWxlczpbIi5mbGV4LWxheW91dFtfbmdob3N0LSVDT01QJV0ge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgfVxuXG4gICAgICAuZmxleC1sYXlvdXRbX25naG9zdC0lQ09NUCVdICAgID4gcnVucy10YWJsZS1jb21wb25lbnRbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEQyLFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6InJ1bnMtdGFibGUiLHRlbXBsYXRlOidcbiAgICA8cnVucy10YWJsZS1jb21wb25lbnRcbiAgICAgIFtleHBlcmltZW50SWRzXT0iZXhwZXJpbWVudElkcyJcbiAgICAgIFt1c2VGbGV4aWJsZUxheW91dF09InVzZUZsZXhpYmxlTGF5b3V0IlxuICAgICAgW251bVNlbGVjdGVkSXRlbXNdPSJudW1TZWxlY3RlZEl0ZW1zJCB8IGFzeW5jIlxuICAgICAgW2NvbHVtbnNdPSJjb2x1bW5zIlxuICAgICAgW2hwYXJhbUNvbHVtbnNdPSJocGFyYW1Db2x1bW5zJCB8IGFzeW5jIlxuICAgICAgW21ldHJpY0NvbHVtbnNdPSJtZXRyaWNDb2x1bW5zJCB8IGFzeW5jIlxuICAgICAgW3Nob3dFeHBlcmltZW50TmFtZV09ImlzRXhwZXJpbWVudE5hbWVWaXNpYmxlKCkiXG4gICAgICBbcGFnZUl0ZW1zXT0icGFnZUl0ZW1zJCB8IGFzeW5jIlxuICAgICAgW2ZpbHRlcmVkSXRlbXNMZW5ndGhdPSJmaWx0ZXJlZEl0ZW1zTGVuZ3RoJCB8IGFzeW5jIlxuICAgICAgW2FsbEl0ZW1zTGVuZ3RoXT0iYWxsSXRlbXNMZW5ndGgkIHwgYXN5bmMiXG4gICAgICBbbG9hZGluZ109ImxvYWRpbmckIHwgYXN5bmMiXG4gICAgICBbcGFnaW5hdGlvbk9wdGlvbl09InBhZ2luYXRpb25PcHRpb24kIHwgYXN5bmMiXG4gICAgICBbcmVnZXhGaWx0ZXJdPSJyZWdleEZpbHRlciQgfCBhc3luYyJcbiAgICAgIFtzaG93R3JvdXBDb250cm9sXT0ic2hvd0dyb3VwQ29udHJvbCQgfCBhc3luYyJcbiAgICAgIFtzb3J0T3B0aW9uXT0ic29ydE9wdGlvbiQgfCBhc3luYyJcbiAgICAgIFt1c2VQYWdpbmF0aW9uXT0idXNlUGFnaW5hdGlvbiJcbiAgICAgIChvblNlbGVjdGlvblRvZ2dsZSk9Im9uUnVuU2VsZWN0aW9uVG9nZ2xlKCRldmVudCkiXG4gICAgICAob25QYWdlU2VsZWN0aW9uVG9nZ2xlKT0ib25QYWdlU2VsZWN0aW9uVG9nZ2xlKCRldmVudCkiXG4gICAgICAob25TZWxlY3RBbGxQYWdlcyk9Im9uU2VsZWN0QWxsUGFnZXMoKSJcbiAgICAgIChvblBhZ2luYXRpb25DaGFuZ2UpPSJvblBhZ2luYXRpb25DaGFuZ2UoJGV2ZW50KSJcbiAgICAgIChvblJlZ2V4RmlsdGVyQ2hhbmdlKT0ib25SZWdleEZpbHRlckNoYW5nZSgkZXZlbnQpIlxuICAgICAgKG9uU29ydENoYW5nZSk9Im9uU29ydENoYW5nZSgkZXZlbnQpIlxuICAgICAgKG9uUnVuQ29sb3JDaGFuZ2UpPSJvblJ1bkNvbG9yQ2hhbmdlKCRldmVudCkiXG4gICAgICAob25IcGFyYW1JbnRlcnZhbEZpbHRlckNoYW5nZWQpPSJvbkhwYXJhbUludGVydmFsRmlsdGVyQ2hhbmdlZCgkZXZlbnQpIlxuICAgICAgKG9uSHBhcmFtRGlzY3JldGVGaWx0ZXJDaGFuZ2VkKT0ib25IcGFyYW1EaXNjcmV0ZUZpbHRlckNoYW5nZWQoJGV2ZW50KSJcbiAgICAgIChvbk1ldHJpY0ZpbHRlckNoYW5nZWQpPSJvbk1ldHJpY0ZpbHRlckNoYW5nZWQoJGV2ZW50KSJcbiAgICA+PC9ydW5zLXRhYmxlLWNvbXBvbmVudD5cbiAgJyxob3N0OnsiW2NsYXNzLmZsZXgtbGF5b3V0XSI6InVzZUZsZXhpYmxlTGF5b3V0In0sc3R5bGVzOlsiXG4gICAgICA6aG9zdC5mbGV4LWxheW91dCB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICB9XG5cbiAgICAgIDpob3N0LmZsZXgtbGF5b3V0ID4gcnVucy10YWJsZS1jb21wb25lbnQge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgIH1cbiAgICAiXSxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6RWt9XX0pLHt1c2VGbGV4aWJsZUxheW91dDpbe3R5cGU6eV99XSx1c2VQYWdpbmF0aW9uOlt7dHlwZTp5X31dLGNvbHVtbnM6W3t0eXBlOnlffV0sZXhwZXJpbWVudElkczpbe3R5cGU6eV99XSxzaG93SHBhcmFtc0FuZE1ldHJpY3M6W3t0eXBlOnlffV19KTtjbGFzcyBFMnt9RTIuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEUyKX0sRTIuybVjbXA9VW8oe3R5cGU6RTIsc2VsZWN0b3JzOltbInJ1bnMtc2VsZWN0b3ItY29tcG9uZW50Il1dLGlucHV0czp7ZXhwZXJpbWVudElkczoiZXhwZXJpbWVudElkcyIsc2hvd0hwYXJhbXNBbmRNZXRyaWNzOiJzaG93SHBhcmFtc0FuZE1ldHJpY3MiLGNvbHVtbnM6ImNvbHVtbnMifSxkZWNsczoxLHZhcnM6NCxjb25zdHM6W1szLCJ1c2VGbGV4aWJsZUxheW91dCIsImNvbHVtbnMiLCJleHBlcmltZW50SWRzIiwic2hvd0hwYXJhbXNBbmRNZXRyaWNzIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJnd1KDAsInJ1bnMtdGFibGUiLDApLDImZSYmdnUoInVzZUZsZXhpYmxlTGF5b3V0IiwhMCkoImNvbHVtbnMiLG4uY29sdW1ucykoImV4cGVyaW1lbnRJZHMiLG4uZXhwZXJpbWVudElkcykoInNob3dIcGFyYW1zQW5kTWV0cmljcyIsbi5zaG93SHBhcmFtc0FuZE1ldHJpY3MpfSxkaXJlY3RpdmVzOltEMl0sc3R5bGVzOlsicnVucy10YWJsZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEUyLFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6InJ1bnMtc2VsZWN0b3ItY29tcG9uZW50Iix0ZW1wbGF0ZTonXG4gICAgPHJ1bnMtdGFibGVcbiAgICAgIFt1c2VGbGV4aWJsZUxheW91dF09InRydWUiXG4gICAgICBbY29sdW1uc109ImNvbHVtbnMiXG4gICAgICBbZXhwZXJpbWVudElkc109ImV4cGVyaW1lbnRJZHMiXG4gICAgICBbc2hvd0hwYXJhbXNBbmRNZXRyaWNzXT0ic2hvd0hwYXJhbXNBbmRNZXRyaWNzIlxuICAgID48L3J1bnMtdGFibGU+XG4gICcsc3R5bGVzOlsiXG4gICAgICBydW5zLXRhYmxlIHtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgfVxuICAgICJdLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2h9XX1dLG51bGwse2V4cGVyaW1lbnRJZHM6W3t0eXBlOnlffV0sc2hvd0hwYXJhbXNBbmRNZXRyaWNzOlt7dHlwZTp5X31dLGNvbHVtbnM6W3t0eXBlOnlffV19KTtjbGFzcyBBMntjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXQsdGhpcy5leHBlcmltZW50SWRzJD10aGlzLnN0b3JlLnNlbGVjdCh4RCkucGlwZShodCgodD0+bnVsbCE9dD90OltdKSkpLHRoaXMuY29sdW1ucyQ9dGhpcy5zdG9yZS5zZWxlY3QoeEQpLnBpcGUoaHQoKHQ9PltEUS5DSEVDS0JPWCxEUS5SVU5fTkFNRSx0JiZ0Lmxlbmd0aD4xP0RRLkVYUEVSSU1FTlRfTkFNRTpudWxsLERRLlJVTl9DT0xPUl0uZmlsdGVyKCh0PT5udWxsIT09dCkpKSkpfX1BMi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8QTIpKE11KEVrKSl9LEEyLsm1Y21wPVVvKHt0eXBlOkEyLHNlbGVjdG9yczpbWyJydW5zLXNlbGVjdG9yIl1dLGlucHV0czp7c2hvd0hwYXJhbXNBbmRNZXRyaWNzOiJzaG93SHBhcmFtc0FuZE1ldHJpY3MifSxkZWNsczozLHZhcnM6Nyxjb25zdHM6W1szLCJleHBlcmltZW50SWRzIiwiY29sdW1ucyIsInNob3dIcGFyYW1zQW5kTWV0cmljcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYod3UoMCwicnVucy1zZWxlY3Rvci1jb21wb25lbnQiLDApLE9iKDEsImFzeW5jIiksT2IoMiwiYXN5bmMiKSksMiZlJiZ2dSgiZXhwZXJpbWVudElkcyIsUGIoMSwzLG4uZXhwZXJpbWVudElkcyQpKSgiY29sdW1ucyIsUGIoMiw1LG4uY29sdW1ucyQpKSgic2hvd0hwYXJhbXNBbmRNZXRyaWNzIixuLnNob3dIcGFyYW1zQW5kTWV0cmljcyl9LGRpcmVjdGl2ZXM6W0UyXSxwaXBlczpbTXZdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoQTIsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoicnVucy1zZWxlY3RvciIsdGVtcGxhdGU6J1xuICAgIDxydW5zLXNlbGVjdG9yLWNvbXBvbmVudFxuICAgICAgW2V4cGVyaW1lbnRJZHNdPSJleHBlcmltZW50SWRzJCB8IGFzeW5jIlxuICAgICAgW2NvbHVtbnNdPSJjb2x1bW5zJCB8IGFzeW5jIlxuICAgICAgW3Nob3dIcGFyYW1zQW5kTWV0cmljc109InNob3dIcGFyYW1zQW5kTWV0cmljcyJcbiAgICA+PC9ydW5zLXNlbGVjdG9yLWNvbXBvbmVudD5cbiAgJyxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6RWt9XX0pLHtzaG93SHBhcmFtc0FuZE1ldHJpY3M6W3t0eXBlOnlffV19KTtjb25zdCBSMj1uZXcgV2Vha01hcDtjbGFzcyBUMntjb25zdHJ1Y3Rvcih0LGUpe3RoaXMucm9vdD10LHRoaXMuYnVmZmVyPWUsdGhpcy5kZXN0cm95ZWRUYXJnZXRzPW5ldyBTZXR9aW5pdGlhbGl6ZSh0KXt0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyfHwodGhpcy5pbnRlcnNlY3Rpb25DYWxsYmFjaz10LHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXI9bmV3IEludGVyc2VjdGlvbk9ic2VydmVyKHRoaXMub25DYXJkSW50ZXJzZWN0aW9uLmJpbmQodGhpcykse3RocmVzaG9sZDowLHJvb3Q6dGhpcy5yb290LHJvb3RNYXJnaW46dGhpcy5idWZmZXJ9KSl9YWRkKHQpe3RoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKSYmdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlci5vYnNlcnZlKHQpfXdpbGxEZXN0cm95KHQpe3RoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKSYmdGhpcy5kZXN0cm95ZWRUYXJnZXRzLmFkZCh0KX1lbnN1cmVJbml0aWFsaXplZCgpe2lmKCF0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyKXRocm93IG5ldyBFcnJvcigiQ2FyZE9ic2VydmVyIG11c3QgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSIpO3JldHVybiEwfW9uQ2FyZEludGVyc2VjdGlvbih0KXt0LnNvcnQoKCh0LGUpPT50LnRpbWUtZS50aW1lKSk7Y29uc3QgZT1uZXcgU2V0LG49bmV3IFNldDtmb3IoY29uc3QgbyBvZiB0KXtjb25zdCB0PW8udGFyZ2V0LGk9UjIuZ2V0KHQpO2lmKCFpKXRocm93IG5ldyBFcnJvcigiQSBDYXJkT2JzZXJ2ZXIgZWxlbWVudCBtdXN0IGJlIGFzc29jaWF0ZWQgd2l0aCBhIENhcmRJZCIpO28uaXNJbnRlcnNlY3Rpbmc/KGUuYWRkKGkpLG4uZGVsZXRlKGkpKTooZS5kZWxldGUoaSksbi5hZGQoaSkpLHRoaXMuZGVzdHJveWVkVGFyZ2V0cy5oYXModCkmJiFvLmlzSW50ZXJzZWN0aW5nJiYodGhpcy5kZXN0cm95ZWRUYXJnZXRzLmRlbGV0ZSh0KSx0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyLnVub2JzZXJ2ZSh0KSl9dGhpcy5pbnRlcnNlY3Rpb25DYWxsYmFjayhlLG4pfW9uQ2FyZEludGVyc2VjdGlvbkZvclRlc3QodCl7dGhpcy5vbkNhcmRJbnRlcnNlY3Rpb24odCl9fWNsYXNzIE4ye2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5ob3N0PXQsdGhpcy5zdG9yZT1lfW9uQ2FyZEludGVyc2VjdGlvbih0LGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goaVEoe2VudGVyZWRDYXJkczp0LGV4aXRlZENhcmRzOmV9KSl9bmdPbkluaXQoKXtSMi5zZXQodGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQsdGhpcy5jYXJkSWQpLHRoaXMuY2FyZE9ic2VydmVyfHwodGhpcy5jYXJkT2JzZXJ2ZXI9bmV3IFQyKSx0aGlzLmNhcmRPYnNlcnZlci5pbml0aWFsaXplKHRoaXMub25DYXJkSW50ZXJzZWN0aW9uLmJpbmQodGhpcykpLHRoaXMuY2FyZE9ic2VydmVyLmFkZCh0aGlzLmhvc3QubmF0aXZlRWxlbWVudCl9bmdPbkRlc3Ryb3koKXt0aGlzLmNhcmRPYnNlcnZlciYmdGhpcy5jYXJkT2JzZXJ2ZXIud2lsbERlc3Ryb3kodGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQpfWhvc3RGb3JUZXN0KCl7cmV0dXJuIHRoaXMuaG9zdH19TjIuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fE4yKShNdShjaCksTXUoRWspKX0sTjIuybVkaXI9Sm8oe3R5cGU6TjIsc2VsZWN0b3JzOltbIiIsImNhcmRMYXp5TG9hZGVyIiwiIl1dLGlucHV0czp7Y2FyZElkOlsiY2FyZExhenlMb2FkZXIiLCJjYXJkSWQiXSxjYXJkT2JzZXJ2ZXI6ImNhcmRPYnNlcnZlciJ9fSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihOMixbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJbY2FyZExhenlMb2FkZXJdIn1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmNofSx7dHlwZTpFa31dfSkse2NhcmRJZDpbe3R5cGU6eV8sYXJnczpbImNhcmRMYXp5TG9hZGVyIl19XSxjYXJkT2JzZXJ2ZXI6W3t0eXBlOnlffV19KTtjb25zdCBJMj0iL3NjYWxhcl9zdW1tYXJ5IjtmdW5jdGlvbiB6Mih0LGUpe2xldCBuPXQ7cmV0dXJuIGUmJnQuc3RhcnRzV2l0aChlKyIvIikmJihuPXQuc2xpY2UoZS5sZW5ndGgrMSkpLG4uZW5kc1dpdGgoSTIpJiYobj1uLnNsaWNlKDAsLUkyLmxlbmd0aCkpLG58fHR9ZnVuY3Rpb24gSDIodCxlKXtsZXQgbj0wLG89MDtmb3IoOzspe2lmKG49PT10Lmxlbmd0aClyZXR1cm4gbz09PWUubGVuZ3RoPzA6LTE7aWYobz09PWUubGVuZ3RoKXJldHVybiAxO2lmKEwyKHRbbl0pJiZMMihlW29dKSl7Y29uc3QgaT1uLGE9bztuPUYyKHQsbisxKSxvPUYyKGUsbysxKTtjb25zdCByPU51bWJlcih0LnNsaWNlKGksbikpLHM9TnVtYmVyKGUuc2xpY2UoYSxvKSk7aWYocjxzKXJldHVybi0xO2lmKHI+cylyZXR1cm4gMX1lbHNle2lmKEIyKHRbbl0pKXtpZighQjIoZVtvXSkpcmV0dXJuLTF9ZWxzZXtpZihCMihlW29dKSlyZXR1cm4gMTtpZih0W25dPGVbb10pcmV0dXJuLTE7aWYodFtuXT5lW29dKXJldHVybiAxfW4rKyxvKyt9fX1mdW5jdGlvbiBGMih0LGUpe2xldCBuOyEoZnVuY3Rpb24odCl7dFt0Lk5BVFVSQUw9MF09Ik5BVFVSQUwiLHRbdC5SRUFMPTFdPSJSRUFMIix0W3QuRVhQT05FTlRfU0lHTj0yXT0iRVhQT05FTlRfU0lHTiIsdFt0LkVYUE9ORU5UPTNdPSJFWFBPTkVOVCJ9KShufHwobj17fSkpO2xldCBvPW4uTkFUVVJBTCxpPWU7Zm9yKDtpPHQubGVuZ3RoO2krKylpZihvPT09bi5OQVRVUkFMKXtpZigiLiI9PT10W2ldKW89bi5SRUFMO2Vsc2UgaWYoImUiPT09dFtpXXx8IkUiPT09dFtpXSlvPW4uRVhQT05FTlRfU0lHTjtlbHNlIGlmKCFMMih0W2ldKSlicmVha31lbHNlIGlmKG89PT1uLlJFQUwpe2lmKCJlIj09PXRbaV18fCJFIj09PXRbaV0pbz1uLkVYUE9ORU5UX1NJR047ZWxzZSBpZighTDIodFtpXSkpYnJlYWt9ZWxzZSBpZihvPT09bi5FWFBPTkVOVF9TSUdOKXtpZighTDIodFtpXSkmJiIrIiE9PXRbaV0mJiItIiE9PXRbaV0pYnJlYWs7bz1uLkVYUE9ORU5UfWVsc2UgaWYobz09PW4uRVhQT05FTlQmJiFMMih0W2ldKSlicmVhaztyZXR1cm4gaX1mdW5jdGlvbiBMMih0KXtyZXR1cm4iMCI8PXQmJnQ8PSI5In1mdW5jdGlvbiBCMih0KXtyZXR1cm4iLyI9PT10fHxMMih0KX1mdW5jdGlvbiBWMih0LGUpezEmdCYmd3UoMCwibWF0LWljb24iLDYpfWZ1bmN0aW9uIGoyKHQsZSl7aWYoMSZ0JiYoT3UoMCwibWF0LW9wdGlvbiIsNyksTWYoMSksUHUoKSksMiZ0KXtjb25zdCB0PWUuJGltcGxpY2l0O3Z1KCJ2YWx1ZSIsdCksSmMoMSksdmYodCl9fWNsYXNzIFUye2NvbnN0cnVjdG9yKCl7dGhpcy5vblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2U9bmV3IEFifW9uQ29tcGxldGlvbkFjY2VwdGVkKHQpe3RoaXMub25SZWdleEZpbHRlclZhbHVlQ2hhbmdlLmVtaXQoKGZ1bmN0aW9uIGUodCl7cmV0dXJuIHQucmVwbGFjZSh3TCwiXFwkJiIpfSkodCkpfX1VMi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8VTIpfSxVMi7JtWNtcD1Vbyh7dHlwZTpVMixzZWxlY3RvcnM6W1sibWV0cmljcy10YWctZmlsdGVyLWNvbXBvbmVudCJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MiZlJiZhZigidmFsaWQiLG4uaXNSZWdleEZpbHRlclZhbGlkKX0saW5wdXRzOntyZWdleEZpbHRlclZhbHVlOiJyZWdleEZpbHRlclZhbHVlIixpc1JlZ2V4RmlsdGVyVmFsaWQ6ImlzUmVnZXhGaWx0ZXJWYWxpZCIsY29tcGxldGlvbnM6ImNvbXBsZXRpb25zIn0sb3V0cHV0czp7b25SZWdleEZpbHRlclZhbHVlQ2hhbmdlOiJvblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2UifSxkZWNsczo2LHZhcnM6NCxjb25zdHM6W1sxLCJ0YWctZmlsdGVyIl0sWyJwbGFjZWhvbGRlciIsIkZpbHRlciB0YWdzIChyZWdleCkiLDMsInZhbHVlIiwibWF0QXV0b2NvbXBsZXRlIiwiaW5wdXQiXSxbInN2Z0ljb24iLCJlcnJvcl8yNHB4IiwiY2xhc3MiLCJlcnJvci1pY29uIiwidGl0bGUiLCJJbnZhbGlkIHJlZ2V4IGZpbHRlci4gVGhlIHJlc3VsdCBtYXkgYmUgc3RhbGUuIiw0LCJuZ0lmIl0sWzMsIm9wdGlvblNlbGVjdGVkIl0sWyJmaWx0ZXJNYXRjaGVzIiwibWF0QXV0b2NvbXBsZXRlIl0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbInN2Z0ljb24iLCJlcnJvcl8yNHB4IiwidGl0bGUiLCJJbnZhbGlkIHJlZ2V4IGZpbHRlci4gVGhlIHJlc3VsdCBtYXkgYmUgc3RhbGUuIiwxLCJlcnJvci1pY29uIl0sWzMsInZhbHVlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJihPdSgwLCJkaXYiLDApLE91KDEsInRiLWZpbHRlci1pbnB1dCIsMSksTnUoImlucHV0IiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2UuZW1pdChlLnRhcmdldC52YWx1ZSl9KSksUHUoKSxXbSgyLFYyLDEsMCwibWF0LWljb24iLDIpLFB1KCksT3UoMywibWF0LWF1dG9jb21wbGV0ZSIsMyw0KSxOdSgib3B0aW9uU2VsZWN0ZWQiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLm9uQ29tcGxldGlvbkFjY2VwdGVkKGUub3B0aW9uLnZhbHVlKX0pKSxXbSg1LGoyLDIsMiwibWF0LW9wdGlvbiIsNSksUHUoKSksMiZlKXtjb25zdCB0PUdtKDQpO0pjKDEpLHZ1KCJ2YWx1ZSIsbi5yZWdleEZpbHRlclZhbHVlKSgibWF0QXV0b2NvbXBsZXRlIix0KSxKYygxKSx2dSgibmdJZiIsIW4uaXNSZWdleEZpbHRlclZhbGlkKSxKYygzKSx2dSgibmdGb3JPZiIsbi5jb21wbGV0aW9ucyl9fSxkaXJlY3RpdmVzOltnMSxhdixuMSxvdixjRyxQSF0sc3R5bGVzOlsnLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEycHg7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtYmFkZ2Utc21hbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6OXB4fS5tYXQtYmFkZ2UtbGFyZ2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweH0ubWF0LWgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1oZWFkbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMjRweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNnB4LzI4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNXB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC44MykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtaDZbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuNjcpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWJvZHktc3Ryb25nW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjAgMCAxMnB4fS5tYXQtc21hbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDEycHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjMwMCAxMTJweC8xMTJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDVlbTttYXJnaW46MCAwIDU2cHh9Lm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDU2cHgvNTZweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDJlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDQ1cHgvNDhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDA1ZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAzNHB4LzQwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDY0cHh9Lm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcmFpc2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0cm9rZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mbGF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmFiW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1taW5pLWZhYltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWJ1dHRvbi10b2dnbGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhcmQtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjIwcHh9Lm1hdC1jYXJkLXN1YnRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2hlY2tib3hbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNoZWNrYm94LWxheW91dFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoZWNrYm94LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoyNHB4fS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtdHJhaWxpbmctaWNvbi5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtcmVtb3ZlLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MThweH0ubWF0LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1oZWFkZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2VsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9vdGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2FsZW5kYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhbGVuZGFyLWJvZHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxM3B4fS5tYXQtY2FsZW5kYXItYm9keS1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FsZW5kYXItcGVyaW9kLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo0MDB9Lm1hdC1kaWFsb2ctdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjEyNTtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE1MCU7bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS41ZW07d2lkdGg6MS41ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNWVtIDA7Ym9yZGVyLXRvcDouODQzNzVlbSBzb2xpZCB0cmFuc3BhcmVudH0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6LTAuODQzNzVlbTtwYWRkaW5nLXRvcDouODQzNzVlbX0ubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo3NSU7bWFyZ2luLXRvcDouNjY2NjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjc5MTY2NjY2NjdlbSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNDM3NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMnB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjNlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM1MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjI4MTI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDouNTQxNjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjY2NjY2NjY2NjdlbSl9QG1lZGlhIHByaW50ey5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMmVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMWVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTJlbSkgc2NhbGUoMC43NSl9fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi4yNWVtIDAgLjc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMDkzNzVlbTttYXJnaW4tdG9wOi0wLjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjFlbSAwIDFlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS44NDM3NWVtO21hcmdpbi10b3A6LTAuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9aW5wdXQubWF0LWlucHV0LWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LTAuMDYyNWVtfS5tYXQtbWVudS1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtcGFnaW5hdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweH0ubWF0LXJhZGlvLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW19Lm1hdC1zbGlkZS10b2dnbGUtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdGVwcGVyLWhvcml6b250YWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXN0ZXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXN0ZXAtc3ViLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDpub3JtYWx9Lm1hdC1zdGVwLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LXN0ZXAtbGFiZWwtc2VsZWN0ZWRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRhYi1ncm91cFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdGFiLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10YWItbGlua1tfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowfS5tYXQtdG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB4O3BhZGRpbmctdG9wOjZweDtwYWRkaW5nLWJvdHRvbTo2cHh9Lm1hdC10b29sdGlwLWhhbmRzZXRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9Lm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE2cHh9Lm1hdC1vcHRncm91cC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1zaW1wbGUtc25hY2tiYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweH0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb25bX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjE7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo1MDB9Lm1hdC10cmVlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW5lc3RlZC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjQwMDtmb250LXNpemU6MTRweH0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmVtcHR5KXt0cmFuc2Zvcm06dHJhbnNsYXRlWigwKX0ubWF0LXJpcHBsZS5tYXQtcmlwcGxlLXVuYm91bmRlZFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItcmFkaXVzOjUwJTtwb2ludGVyLWV2ZW50czpub25lO3RyYW5zaXRpb246b3BhY2l0eSx0cmFuc2Zvcm0gMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpO3RyYW5zZm9ybTpzY2FsZSgwKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6bm9uZX0uY2RrLXZpc3VhbGx5LWhpZGRlbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjA7Y2xpcDpyZWN0KDAgMCAwIDApO2hlaWdodDoxcHg7bWFyZ2luOi0xcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwO291dGxpbmU6MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb2ludGVyLWV2ZW50czpub25lO3RvcDowO2xlZnQ6MDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTplbXB0eXtkaXNwbGF5Om5vbmV9LmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1wYW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czphdXRvO2JveC1zaXppbmc6Ym9yZGVyLWJveDt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O21heC13aWR0aDoxMDAlO21heC1oZWlnaHQ6MTAwJX0uY2RrLW92ZXJsYXktYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO3otaW5kZXg6MTAwMDtwb2ludGVyLWV2ZW50czphdXRvOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDt0cmFuc2l0aW9uOm9wYWNpdHkgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSk7b3BhY2l0eTowfS5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjF9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAuY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTouNn0uY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4zMil9LmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MH0uY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWluLXdpZHRoOjFweDttaW4taGVpZ2h0OjFweH0uY2RrLWdsb2JhbC1zY3JvbGxibG9ja1tfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7d2lkdGg6MTAwJTtvdmVyZmxvdy15OnNjcm9sbH1Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0e31Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZHt9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbHthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQgMHMgMW1zfS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOm5vdCg6LXdlYmtpdC1hdXRvZmlsbCl7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCAwcyAxbXN9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplW19uZ2NvbnRlbnQtJUNPTVAlXXtyZXNpemU6bm9uZX10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDphdXRvICFpbXBvcnRhbnQ7b3ZlcmZsb3c6aGlkZGVuICFpbXBvcnRhbnR9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZy1maXJlZm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDowICFpbXBvcnRhbnR9Lm1hdC1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtbWRjLWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9LnRhZy1maWx0ZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjpyZWxhdGl2ZX10Yi1maWx0ZXItaW5wdXRbX25nY29udGVudC0lQ09NUCVde2ZsZXgtZ3JvdzoxfVtfbmdob3N0LSVDT01QJV17Y29sb3I6IzIxMjEyMX1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV17Y29sb3I6I2ZmZn1bX25naG9zdC0lQ09NUCVdOm5vdCgudmFsaWQpe2NvbG9yOiNjNjI4Mjh9W19uZ2hvc3QtJUNPTVAlXTpub3QoLnZhbGlkKSAgIC5lcnJvci1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojYzYyODI4O3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjB9J10sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFUyLFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6Im1ldHJpY3MtdGFnLWZpbHRlci1jb21wb25lbnQiLHRlbXBsYXRlVXJsOiJmaWx0ZXJfaW5wdXRfY29tcG9uZW50Lm5nLmh0bWwiLHN0eWxlVXJsczpbImZpbHRlcl9pbnB1dF9jb21wb25lbnQuY3NzIl0sY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sbnVsbCx7cmVnZXhGaWx0ZXJWYWx1ZTpbe3R5cGU6eV99XSxpc1JlZ2V4RmlsdGVyVmFsaWQ6W3t0eXBlOkNfLGFyZ3M6WyJjbGFzcy52YWxpZCJdfSx7dHlwZTp5X31dLGNvbXBsZXRpb25zOlt7dHlwZTp5X31dLG9uUmVnZXhGaWx0ZXJWYWx1ZUNoYW5nZTpbe3R5cGU6X199XX0pO2NsYXNzIFcye2NvbnN0cnVjdG9yKHQpe3RoaXMuc3RvcmU9dCx0aGlzLnRhZ0ZpbHRlciQ9dGhpcy5zdG9yZS5zZWxlY3QoWFQpLHRoaXMuaXNUYWdGaWx0ZXJSZWdleFZhbGlkJD10aGlzLnRhZ0ZpbHRlciQucGlwZShodCgodD0+e3RyeXtyZXR1cm4gbmV3IFJlZ0V4cCh0KSwhMH1jYXRjaCh0KXtyZXR1cm4hMX19KSkpLHRoaXMuY29tcGxldGlvbnMkPXRoaXMuc3RvcmUuc2VsZWN0KEVUKS5waXBlKGh0KCh0PT50Lm1hcCgoKHt0YWc6dH0pPT50KSkpKSxkbigodD0+RHQoW1oodCksdGhpcy5zdG9yZS5zZWxlY3QoWFQpXSkpKSxodCgoKFt0LGVdKT0+e3RyeXtyZXR1cm5bdCxuZXcgUmVnRXhwKGUpXX1jYXRjaChlKXtyZXR1cm5bdCxudWxsXX19KSksR3QoKChbLHRdKT0+bnVsbCE9PXQpKSxodCgoKFt0LGVdKT0+dC5maWx0ZXIoKHQ9PmUudGVzdCh0KSkpLnNvcnQoSDIpKSkpfW9uVGFnRmlsdGVyQ2hhbmdlKHQpe3RoaXMuc3RvcmUuZGlzcGF0Y2goclEoe3RhZ0ZpbHRlcjp0fSkpfX1mdW5jdGlvbiBHMih0LGUpe2lmKDEmdCYmKE91KDAsInNwYW4iLDIpLE1mKDEpLFB1KCkpLDImdCl7Y29uc3QgdD1MdSgpO0pjKDEpLHZmKHQuZmlyc3RUZXh0UGFydCgpKX19VzIuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFcyKShNdShFaykpfSxXMi7JtWNtcD1Vbyh7dHlwZTpXMixzZWxlY3RvcnM6W1sibWV0cmljcy10YWctZmlsdGVyIl1dLGRlY2xzOjQsdmFyczo5LGNvbnN0czpbWzMsInJlZ2V4RmlsdGVyVmFsdWUiLCJpc1JlZ2V4RmlsdGVyVmFsaWQiLCJjb21wbGV0aW9ucyIsIm9uUmVnZXhGaWx0ZXJWYWx1ZUNoYW5nZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoT3UoMCwibWV0cmljcy10YWctZmlsdGVyLWNvbXBvbmVudCIsMCksTnUoIm9uUmVnZXhGaWx0ZXJWYWx1ZUNoYW5nZSIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25UYWdGaWx0ZXJDaGFuZ2UoZSl9KSksT2IoMSwiYXN5bmMiKSxPYigyLCJhc3luYyIpLE9iKDMsImFzeW5jIiksUHUoKSksMiZlJiZ2dSgicmVnZXhGaWx0ZXJWYWx1ZSIsUGIoMSwzLG4udGFnRmlsdGVyJCkpKCJpc1JlZ2V4RmlsdGVyVmFsaWQiLFBiKDIsNSxuLmlzVGFnRmlsdGVyUmVnZXhWYWxpZCQpKSgiY29tcGxldGlvbnMiLFBiKDMsNyxuLmNvbXBsZXRpb25zJCkpfSxkaXJlY3RpdmVzOltVMl0scGlwZXM6W012XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFcyLFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6Im1ldHJpY3MtdGFnLWZpbHRlciIsdGVtcGxhdGU6J1xuICAgIDxtZXRyaWNzLXRhZy1maWx0ZXItY29tcG9uZW50XG4gICAgICBbcmVnZXhGaWx0ZXJWYWx1ZV09InRhZ0ZpbHRlciQgfCBhc3luYyJcbiAgICAgIFtpc1JlZ2V4RmlsdGVyVmFsaWRdPSJpc1RhZ0ZpbHRlclJlZ2V4VmFsaWQkIHwgYXN5bmMiXG4gICAgICBbY29tcGxldGlvbnNdPSJjb21wbGV0aW9ucyQgfCBhc3luYyJcbiAgICAgIChvblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2UpPSJvblRhZ0ZpbHRlckNoYW5nZSgkZXZlbnQpIlxuICAgID48L21ldHJpY3MtdGFnLWZpbHRlci1jb21wb25lbnQ+XG4gICcsY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkVrfV19KSxudWxsKTtjbGFzcyBZMntwYXJzZVZhbHVlKCl7Y29uc3QgdD10aGlzLnZhbHVlLmxhc3RJbmRleE9mKCIvIik7cmV0dXJuLTE9PT10P3tmaXJzdDoiIixzZWNvbmQ6dGhpcy52YWx1ZX06e2ZpcnN0OnRoaXMudmFsdWUuc2xpY2UoMCx0KSxzZWNvbmQ6dGhpcy52YWx1ZS5zbGljZSh0KX19Zmlyc3RUZXh0UGFydCgpe3JldHVybiB0aGlzLnBhcnNlVmFsdWUoKS5maXJzdH1zZWNvbmRUZXh0UGFydCgpe3JldHVybiB0aGlzLnBhcnNlVmFsdWUoKS5zZWNvbmR9fWZ1bmN0aW9uIHEyKHQsZSxuKXtyZXR1cm4gZXx8bj9bbixlP2UubmFtZToiLi4uIl0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIi8iKTp0fVkyLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxZMil9LFkyLsm1Y21wPVVvKHt0eXBlOlkyLHNlbGVjdG9yczpbWyJ0Yi10cnVuY2F0ZWQtcGF0aCJdXSxpbnB1dHM6e3ZhbHVlOiJ2YWx1ZSJ9LGRlY2xzOjMsdmFyczoyLGNvbnN0czpbWyJjbGFzcyIsImZpcnN0LXRleHQtcGFydCIsNCwibmdJZiJdLFsxLCJzZWNvbmQtdGV4dC1wYXJ0Il0sWzEsImZpcnN0LXRleHQtcGFydCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoV20oMCxHMiwyLDEsInNwYW4iLDApLE91KDEsInNwYW4iLDEpLE1mKDIpLFB1KCkpLDImZSYmKHZ1KCJuZ0lmIixuLmZpcnN0VGV4dFBhcnQoKS5sZW5ndGg+MCksSmMoMiksdmYobi5zZWNvbmRUZXh0UGFydCgpKSl9LGRpcmVjdGl2ZXM6W2F2XSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWZsZXg7d2hpdGUtc3BhY2U6bm93cmFwfS5maXJzdC10ZXh0LXBhcnRbX25nY29udGVudC0lQ09NUCVde2ZsZXg6MSAxIDRjaDttYXgtd2lkdGg6bWF4LWNvbnRlbnR9LmZpcnN0LXRleHQtcGFydFtfbmdjb250ZW50LSVDT01QJV0sIC5zZWNvbmQtdGV4dC1wYXJ0W19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc30iXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoWTIsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoidGItdHJ1bmNhdGVkLXBhdGgiLHRlbXBsYXRlOidcbiAgICA8c3BhbiAqbmdJZj0iZmlyc3RUZXh0UGFydCgpLmxlbmd0aCA+IDAiIGNsYXNzPSJmaXJzdC10ZXh0LXBhcnQiPnt7XG4gICAgICBmaXJzdFRleHRQYXJ0KClcbiAgICB9fTwvc3Bhbj5cbiAgICA8c3BhbiBjbGFzcz0ic2Vjb25kLXRleHQtcGFydCI+e3sgc2Vjb25kVGV4dFBhcnQoKSB9fTwvc3Bhbj5cbiAgJyxzdHlsZVVybHM6WyJ0cnVuY2F0ZWRfcGF0aF9jb21wb25lbnQuY3NzIl19XX1dLG51bGwse3ZhbHVlOlt7dHlwZTp5X31dfSk7Y2xhc3MgWjJ7fVoyLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxaMil9LFoyLsm1Y21wPVVvKHt0eXBlOloyLHNlbGVjdG9yczpbWyJjYXJkLXJ1bi1uYW1lLWNvbXBvbmVudCJdXSxpbnB1dHM6e25hbWU6Im5hbWUifSxkZWNsczoxLHZhcnM6MSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiZNZigwKSwyJmUmJnZmKG4ubmFtZSl9LHN0eWxlczpbJy5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHh9Lm1hdC1oMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaGVhZGxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTVweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZ1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjA1ZW07bWFyZ2luOjAgMCA1NnB4fS5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAwNWVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXJhaXNlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdHJva2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmxhdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZhYltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbWluaS1mYWJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4fS5tYXQtY2FyZC1zdWJ0aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGVja2JveC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvb3Rlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgdHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIzZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LjU0MTY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2NjY2NjY3ZW0pfUBtZWRpYSBwcmludHsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjJlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouMjVlbSAwIC43NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxZW0gMCAxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMiksIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi0wLjA2MjVlbX0ubWF0LW1lbnUtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci12ZXJ0aWNhbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGFiLWxpbmtbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MH0ubWF0LXRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5Om5vbmV9LmNkay12aXN1YWxseS1oaWRkZW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjZ9LmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV0sIC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3hbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2tbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHt9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7fS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOi13ZWJraXQtYXV0b2ZpbGwpe2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZVtfbmdjb250ZW50LSVDT01QJV17cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fS5tYXQtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfVtfbmdob3N0LSVDT01QJV17Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9J10sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFoyLFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6ImNhcmQtcnVuLW5hbWUtY29tcG9uZW50Iix0ZW1wbGF0ZToie3sgbmFtZSB9fSIsc3R5bGVVcmxzOlsicnVuX25hbWVfY29tcG9uZW50LmNzcyJdLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2h9XX1dLG51bGwse25hbWU6W3t0eXBlOnlffV19KTtjbGFzcyBYMntjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXR9bmdPbkluaXQoKXt0aGlzLm5hbWUkPUR0KFt0aGlzLnN0b3JlLnNlbGVjdChsTix7cnVuSWQ6dGhpcy5ydW5JZH0pLHRoaXMuc3RvcmUuc2VsZWN0KHNOLHtydW5JZDp0aGlzLnJ1bklkfSksdGhpcy5zdG9yZS5zZWxlY3QoUEQpXSkucGlwZShodCgoKFt0LGUsbl0pPT5xMih0aGlzLnJ1bklkLHQsZT9uW2VdOm51bGwpKSkpfX1mdW5jdGlvbiBLMih0LGUpezEmdCYmd3UoMCwibWF0LXNwaW5uZXIiLDE1KX1mdW5jdGlvbiBKMih0LGUpe2lmKDEmdCYmKE91KDAsImRpdiIsMTMpLE1mKDEpLFdtKDIsSzIsMSwwLCJtYXQtc3Bpbm5lciIsMTQpLFB1KCkpLDImdCl7Y29uc3QgdD1MdSgpO0pjKDEpLHhmKCIgU3RlcCAiLHQuc3RlcFZhbHVlc1t0LnN0ZXBJbmRleF0sIiAiKSxKYygxKSx2dSgibmdJZiIsdC5sb2FkU3RhdGU9PT10LkRhdGFMb2FkU3RhdGUuTE9BRElORyl9fVgyLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxYMikoTXUoRWspKX0sWDIuybVjbXA9VW8oe3R5cGU6WDIsc2VsZWN0b3JzOltbImNhcmQtcnVuLW5hbWUiXV0saW5wdXRzOntydW5JZDoicnVuSWQifSxkZWNsczozLHZhcnM6Nixjb25zdHM6W1szLCJuYW1lIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJih3dSgwLCJjYXJkLXJ1bi1uYW1lLWNvbXBvbmVudCIsMCksT2IoMSwiYXN5bmMiKSxPYigyLCJhc3luYyIpKSwyJmUmJih2dSgibmFtZSIsUGIoMSwyLG4ubmFtZSQpKSxObSgidGl0bGUiLFBiKDIsNCxuLm5hbWUkKSkpfSxkaXJlY3RpdmVzOltaMl0scGlwZXM6W012XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFgyLFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6ImNhcmQtcnVuLW5hbWUiLHRlbXBsYXRlOidcbiAgICA8Y2FyZC1ydW4tbmFtZS1jb21wb25lbnRcbiAgICAgIFtuYW1lXT0ibmFtZSQgfCBhc3luYyJcbiAgICAgIFthdHRyLnRpdGxlXT0ibmFtZSQgfCBhc3luYyJcbiAgICA+PC9jYXJkLXJ1bi1uYW1lLWNvbXBvbmVudD5cbiAgJyxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6RWt9XX0pLHtydW5JZDpbe3R5cGU6eV99XX0pO2NvbnN0IFEyPWZ1bmN0aW9uKHQpe3JldHVybntmaWx0ZXI6dH19O2Z1bmN0aW9uICQyKHQsZSl7aWYoMSZ0KXtjb25zdCB0PUV1KCk7a3UoMCksT3UoMSwiZGl2IiwxNiksT3UoMiwibWF0LXNsaWRlciIsMTcpLE51KCJpbnB1dCIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIHJhKHQpLEx1KCkub25TbGlkZXJJbnB1dChuKX0pKSxQdSgpLFB1KCksT3UoMywiZGl2IiwxOCksd3UoNCwiaW1nIiwxOSksUHUoKSxTdSgpfWlmKDImdCl7Y29uc3QgdD1MdSgpO0pjKDIpLHZ1KCJkaXNhYmxlZCIsdC5zdGVwVmFsdWVzLmxlbmd0aDw9MSkoIm1pbiIsMCkoIm1heCIsdC5zdGVwVmFsdWVzLmxlbmd0aC0xKSgic3RlcCIsMSkoInRpY2tJbnRlcnZhbCIsMSkoInZhbHVlIix0LnN0ZXBJbmRleCksSmMoMiksV3UoImFsdCIsIkltYWdlIGF0IHN0ZXAgIix0LnN0ZXBWYWx1ZXNbdC5zdGVwSW5kZXhdLCIiKSxVdSgic3JjIix0LmltYWdlVXJsLE9sKSx2dSgibmdTdHlsZSIsZ2IoOSxRMix0LmNzc0ZpbHRlcigpKSl9fWZ1bmN0aW9uIHQ1KHQsZSl7MSZ0JiYoT3UoMCwiZGl2IiwyMSksTWYoMSwiIERhdGEgZmFpbGVkIHRvIGxvYWQuICIpLFB1KCkpfWZ1bmN0aW9uIGU1KHQsZSl7aWYoMSZ0JiZXbSgwLHQ1LDIsMCwiZGl2IiwyMCksMiZ0KXtjb25zdCB0PUx1KCk7dnUoIm5nSWYiLHQubG9hZFN0YXRlPT09dC5EYXRhTG9hZFN0YXRlLkZBSUxFRCl9fWNvbnN0IG41PWZ1bmN0aW9uKHQpe3JldHVybntiYWNrZ3JvdW5kQ29sb3I6dH19O2NsYXNzIG81e2NvbnN0cnVjdG9yKCl7dGhpcy5EYXRhTG9hZFN0YXRlPUJFLHRoaXMub25BY3R1YWxTaXplVG9nZ2xlPW5ldyBBYix0aGlzLnN0ZXBJbmRleENoYW5nZT1uZXcgQWIsdGhpcy5vblBpbkNsaWNrZWQ9bmV3IEFifWNzc0ZpbHRlcigpe3JldHVybmBjb250cmFzdCgke3RoaXMuY29udHJhc3RJbk1pbGxpLzEwfSUpIGJyaWdodG5lc3MoJHt0aGlzLmJyaWdodG5lc3NJbk1pbGxpLzFlM30pYH1vblNsaWRlcklucHV0KHQpe3RoaXMuc3RlcEluZGV4Q2hhbmdlLmVtaXQodC52YWx1ZSl9fW81Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxvNSl9LG81Lsm1Y21wPVVvKHt0eXBlOm81LHNlbGVjdG9yczpbWyJpbWFnZS1jYXJkLWNvbXBvbmVudCJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MiZlJiZhZigiYWN0dWFsLXNpemUiLG4uc2hvd0FjdHVhbFNpemUpfSxpbnB1dHM6e2xvYWRTdGF0ZToibG9hZFN0YXRlIix0aXRsZToidGl0bGUiLHRhZzoidGFnIixydW5JZDoicnVuSWQiLHNhbXBsZToic2FtcGxlIixpbWFnZVVybDoiaW1hZ2VVcmwiLHN0ZXBJbmRleDoic3RlcEluZGV4IixzdGVwVmFsdWVzOiJzdGVwVmFsdWVzIixicmlnaHRuZXNzSW5NaWxsaToiYnJpZ2h0bmVzc0luTWlsbGkiLGNvbnRyYXN0SW5NaWxsaToiY29udHJhc3RJbk1pbGxpIixzaG93QWN0dWFsU2l6ZToic2hvd0FjdHVhbFNpemUiLHJ1bkNvbG9yU2NhbGU6InJ1bkNvbG9yU2NhbGUiLGFsbG93VG9nZ2xlQWN0dWFsU2l6ZToiYWxsb3dUb2dnbGVBY3R1YWxTaXplIixpc1Bpbm5lZDoiaXNQaW5uZWQifSxvdXRwdXRzOntvbkFjdHVhbFNpemVUb2dnbGU6Im9uQWN0dWFsU2l6ZVRvZ2dsZSIsc3RlcEluZGV4Q2hhbmdlOiJzdGVwSW5kZXhDaGFuZ2UiLG9uUGluQ2xpY2tlZDoib25QaW5DbGlja2VkIn0sZGVjbHM6MTQsdmFyczoxMixjb25zdHM6ZnVuY3Rpb24oKXtsZXQgdCxlO3JldHVybiB0PSJ1bmRlZmluZWQiIT10eXBlb2YgbmdJMThuQ2xvc3VyZU1vZGUmJm5nSTE4bkNsb3N1cmVNb2RlP2dvb2cuZ2V0TXNnKCJQaW4gY2FyZCIpOiRsb2NhbGl6ZWA6QSBidXR0b24gdG8gcGluIGEgY2FyZC7ikJ9lNjY1ZGM3MTJiZDVmMThkNGRmYTNhMjllMTI1ZDU2NWNjNTFlMmY24pCfNzI4NDYwNjQyNjIzNDM3NTM0NDpQaW4gY2FyZGAsZT0idW5kZWZpbmVkIiE9dHlwZW9mIG5nSTE4bkNsb3N1cmVNb2RlJiZuZ0kxOG5DbG9zdXJlTW9kZT9nb29nLmdldE1zZygiVG9nZ2xlIGFjdHVhbCBpbWFnZSBzaXplIik6JGxvY2FsaXplYDpBIGJ1dHRvbiBvbiBhbiBpbWFnZSBjYXJkIHRoYXQgdG9nZ2xlcyBhY3R1YWwgaW1hZ2Ugc2l6ZS7ikJ8zY2EwNWVmM2E2ZTNhMzcwNjVmNWUwZjY5YzVkNWEyMTc4ZDkwNzkx4pCfNzYzNTEwMTkzNjY2NDc4OTE0MDpUb2dnbGUgYWN0dWFsIGltYWdlIHNpemVgLFtbMSwiaGVhZGluZyJdLFsxLCJ0YWciLDMsInRpdGxlIiwidmFsdWUiXSxbMSwicnVuIl0sWzEsImRvdCIsMywibmdTdHlsZSJdLFsxLCJydW4tdGV4dCIsMywicnVuSWQiXSxbImNsYXNzIiwic3RlcCIsNCwibmdJZiJdLFsxLCJjb250cm9scyJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsdCwxLCJwaW4tYnV0dG9uIiwzLCJjbGljayJdLFszLCJzdmdJY29uIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIixlLCJ0aXRsZSIsIlRvZ2dsZSBhY3R1YWwgaW1hZ2Ugc2l6ZSIsMywiZGlzYWJsZWQiLCJjbGljayJdLFsic3ZnSWNvbiIsImltYWdlX3NlYXJjaF8yNHB4Il0sWzQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsibm9JbWFnZURhdGEiLCIiXSxbMSwic3RlcCJdLFsiZGlhbWV0ZXIiLCIxOCIsNCwibmdJZiJdLFsiZGlhbWV0ZXIiLCIxOCJdLFsxLCJzbGlkZXItcm93Il0sWyJjb2xvciIsInByaW1hcnkiLDEsInN0ZXAtc2xpZGVyIiwzLCJkaXNhYmxlZCIsIm1pbiIsIm1heCIsInN0ZXAiLCJ0aWNrSW50ZXJ2YWwiLCJ2YWx1ZSIsImlucHV0Il0sWzEsImltZy1jb250YWluZXIiXSxbMywiYWx0Iiwic3JjIiwibmdTdHlsZSJdLFsiY2xhc3MiLCJlbXB0eS1tZXNzYWdlIiw0LCJuZ0lmIl0sWzEsImVtcHR5LW1lc3NhZ2UiXV19LHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJihPdSgwLCJkaXYiLDApLHd1KDEsInRiLXRydW5jYXRlZC1wYXRoIiwxKSxPdSgyLCJkaXYiLDIpLHd1KDMsInNwYW4iLDMpLHd1KDQsImNhcmQtcnVuLW5hbWUiLDQpLFB1KCksV20oNSxKMiwzLDIsImRpdiIsNSksT3UoNiwic3BhbiIsNiksT3UoNywiYnV0dG9uIiw3KSxOdSgiY2xpY2siLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub25QaW5DbGlja2VkLmVtaXQoIW4uaXNQaW5uZWQpfSkpLHd1KDgsIm1hdC1pY29uIiw4KSxQdSgpLE91KDksImJ1dHRvbiIsOSksTnUoImNsaWNrIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uQWN0dWFsU2l6ZVRvZ2dsZS5lbWl0KCl9KSksd3UoMTAsIm1hdC1pY29uIiwxMCksUHUoKSxQdSgpLFB1KCksV20oMTEsJDIsNSwxMSwibmctY29udGFpbmVyIiwxMSksV20oMTIsZTUsMSwxLCJuZy10ZW1wbGF0ZSIsbnVsbCwxMixLYikpLDImZSl7Y29uc3QgdD1HbSgxMyk7SmMoMSksVXUoInRpdGxlIixuLnRhZyksVXUoInZhbHVlIixuLnRpdGxlKSxKYygyKSx2dSgibmdTdHlsZSIsZ2IoMTAsbjUsbi5ydW5Db2xvclNjYWxlKG4ucnVuSWQpKSksSmMoMSksdnUoInJ1bklkIixuLnJ1bklkKSxKYygxKSx2dSgibmdJZiIsbnVsbCE9PW4uc3RlcEluZGV4JiZuLnN0ZXBJbmRleDxuLnN0ZXBWYWx1ZXMubGVuZ3RoKSxKYygyKSxObSgidGl0bGUiLG4uaXNQaW5uZWQ/IlVucGluIGNhcmQiOiJQaW4gY2FyZCIpLEpjKDEpLHZ1KCJzdmdJY29uIixuLmlzUGlubmVkPyJrZWVwXzI0cHgiOiJrZWVwX291dGxpbmVfMjRweCIpLEpjKDEpLHZ1KCJkaXNhYmxlZCIsIW4uYWxsb3dUb2dnbGVBY3R1YWxTaXplKSxKYygyKSx2dSgibmdJZiIsbnVsbCE9PW4uc3RlcEluZGV4JiZuLnN0ZXBJbmRleDxuLnN0ZXBWYWx1ZXMubGVuZ3RoKSgibmdJZkVsc2UiLHQpfX0sZGlyZWN0aXZlczpbWTIsZ3YsWDIsYXYsTkgsY0csUDEsdlhdLHN0eWxlczpbJy5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHh9Lm1hdC1oMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaGVhZGxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTVweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZ1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjA1ZW07bWFyZ2luOjAgMCA1NnB4fS5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAwNWVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXJhaXNlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdHJva2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmxhdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZhYltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbWluaS1mYWJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4fS5tYXQtY2FyZC1zdWJ0aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGVja2JveC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvb3Rlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgdHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIzZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LjU0MTY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2NjY2NjY3ZW0pfUBtZWRpYSBwcmludHsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjJlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouMjVlbSAwIC43NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxZW0gMCAxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMiksIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi0wLjA2MjVlbX0ubWF0LW1lbnUtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci12ZXJ0aWNhbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGFiLWxpbmtbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MH0ubWF0LXRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5Om5vbmV9LmNkay12aXN1YWxseS1oaWRkZW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjZ9LmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV0sIC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3hbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2tbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHt9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7fS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOi13ZWJraXQtYXV0b2ZpbGwpe2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZVtfbmdjb250ZW50LSVDT01QJV17cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fS5tYXQtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfVtfbmdob3N0LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtib3gtc2l6aW5nOmJvcmRlci1ib3g7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6YXV0bztwYWRkaW5nOjE2cHg7cGFkZGluZy10b3A6NHB4fS5hY3R1YWwtc2l6ZVtfbmdob3N0LSVDT01QJV17aGVpZ2h0OmF1dG99LmhlYWRpbmdbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1hcmVhczoidGFnIGNvbnRyb2xzIiAicnVuIHN0ZXAiO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgYXV0bztmb250LXNpemU6MTRweDttYXJnaW4tYm90dG9tOjRweDtwb3NpdGlvbjpyZWxhdGl2ZX0udGFnW19uZ2NvbnRlbnQtJUNPTVAlXXtncmlkLWFyZWE6dGFnO292ZXJmbG93OmhpZGRlbn0ucGluLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICBtYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjE4cHh9LnJ1bltfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOnJ1bjtkaXNwbGF5OmZsZXg7d2hpdGUtc3BhY2U6bm93cmFwfS5ydW5bX25nY29udGVudC0lQ09NUCVdICAgLmRvdFtfbmdjb250ZW50LSVDT01QJV17ZmxleDpub25lO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjEzcHg7aGVpZ2h0OjEzcHg7Ym9yZGVyLXJhZGl1czo1MCU7bWFyZ2luLXJpZ2h0OjRweH0ucnVuW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5ydW4tdGV4dFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7bWF4LXdpZHRoOjEyMHB4fS5zdGVwW19uZ2NvbnRlbnQtJUNPTVAlXXtncmlkLWFyZWE6c3RlcDtkaXNwbGF5OmZsZXh9LnN0ZXBbX25nY29udGVudC0lQ09NUCVdICAgbWF0LXNwaW5uZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi1sZWZ0OjRweDttYXJnaW4tcmlnaHQ6MH0ucnVuW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnN0ZXBbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7Zm9udC1zaXplOjEzcHg7aGVpZ2h0OjE1cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnJ1bltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ydW5bX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zdGVwW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnN0ZXBbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS5jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTt3aGl0ZS1zcGFjZTpub3dyYXA7Z3JpZC1hcmVhOmNvbnRyb2xzO2p1c3RpZnktc2VsZjpmbGV4LWVuZDtmbGV4LXNocmluazowO21hcmdpbi1yaWdodDotMTJweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuY29udHJvbHNbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuY29udHJvbHNbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS5pbWctY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjEgMSAwO292ZXJmbG93LXk6YXV0bztwb3NpdGlvbjpyZWxhdGl2ZX0uaW1nLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICBpbWdbX25nY29udGVudC0lQ09NUCVde2ltYWdlLXJlbmRlcmluZzotbW96LWNyaXNwLWVkZ2VzO2ltYWdlLXJlbmRlcmluZzpwaXhlbGF0ZWR9LmFjdHVhbC1zaXplW19uZ2hvc3QtJUNPTVAlXSAgIC5pbWctY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzphdXRvO2ZsZXg6bm9uZX1bX25naG9zdC0lQ09NUCVdOm5vdCguYWN0dWFsLXNpemUpICAgaW1nW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTttYXgtaGVpZ2h0OjEwMCU7bWF4LXdpZHRoOjEwMCU7d2lkdGg6YXV0bztoZWlnaHQ6MTAwJTtvYmplY3QtZml0OmNvbnRhaW59LnNsaWRlci1yb3dbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7aGVpZ2h0OjI0cHh9LnN0ZXAtc2xpZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjF9W19uZ2hvc3QtJUNPTVAlXSAgICAgLm1hdC1zbGlkZXItbWluLXZhbHVlIC5tYXQtc2xpZGVyLXRodW1ie2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMH0uZW1wdHktbWVzc2FnZVtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDoxZW07Zm9udC1zaXplOjEzcHh9J10sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKG81LFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6ImltYWdlLWNhcmQtY29tcG9uZW50Iix0ZW1wbGF0ZVVybDoiaW1hZ2VfY2FyZF9jb21wb25lbnQubmcuaHRtbCIsc3R5bGVVcmxzOlsiaW1hZ2VfY2FyZF9jb21wb25lbnQuY3NzIl0saG9zdDp7IltjbGFzcy5hY3R1YWwtc2l6ZV0iOiJzaG93QWN0dWFsU2l6ZSJ9LGNoYW5nZURldGVjdGlvbjp4by5PblB1c2h9XX1dLG51bGwse2xvYWRTdGF0ZTpbe3R5cGU6eV99XSx0aXRsZTpbe3R5cGU6eV99XSx0YWc6W3t0eXBlOnlffV0scnVuSWQ6W3t0eXBlOnlffV0sc2FtcGxlOlt7dHlwZTp5X31dLGltYWdlVXJsOlt7dHlwZTp5X31dLHN0ZXBJbmRleDpbe3R5cGU6eV99XSxzdGVwVmFsdWVzOlt7dHlwZTp5X31dLGJyaWdodG5lc3NJbk1pbGxpOlt7dHlwZTp5X31dLGNvbnRyYXN0SW5NaWxsaTpbe3R5cGU6eV99XSxzaG93QWN0dWFsU2l6ZTpbe3R5cGU6eV99XSxydW5Db2xvclNjYWxlOlt7dHlwZTp5X31dLGFsbG93VG9nZ2xlQWN0dWFsU2l6ZTpbe3R5cGU6eV99XSxpc1Bpbm5lZDpbe3R5cGU6eV99XSxvbkFjdHVhbFNpemVUb2dnbGU6W3t0eXBlOl9ffV0sc3RlcEluZGV4Q2hhbmdlOlt7dHlwZTpfX31dLG9uUGluQ2xpY2tlZDpbe3R5cGU6X199XX0pO2NsYXNzIGk1e2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5zdG9yZT10LHRoaXMuZGF0YVNvdXJjZT1lLHRoaXMuZnVsbFdpZHRoQ2hhbmdlZD1uZXcgQWIsdGhpcy5waW5TdGF0ZUNoYW5nZWQ9bmV3IEFiLHRoaXMuYnJpZ2h0bmVzc0luTWlsbGkkPXRoaXMuc3RvcmUuc2VsZWN0KFlUKSx0aGlzLmNvbnRyYXN0SW5NaWxsaSQ9dGhpcy5zdG9yZS5zZWxlY3QocVQpLHRoaXMuYWN0dWFsU2l6ZUdsb2JhbFNldHRpbmckPXRoaXMuc3RvcmUuc2VsZWN0KFpUKSx0aGlzLnNob3dBY3R1YWxTaXplPSExLHRoaXMuYWN0dWFsU2l6ZVVpVG9nZ2xlZD0hMSx0aGlzLmFjdHVhbFNpemVVaVRvZ2dsZVN1YmplY3Q9bmV3IEgodGhpcy5hY3R1YWxTaXplVWlUb2dnbGVkKSx0aGlzLm5nVW5zdWJzY3JpYmU9bmV3IHh9b25TdGVwSW5kZXhDaGFuZ2VkKHQpe3RoaXMuc3RvcmUuZGlzcGF0Y2goYVEoe2NhcmRJZDp0aGlzLmNhcmRJZCxzdGVwSW5kZXg6dH0pKX1pc0ltYWdlQ2FyZE1ldGFkYXRhKHQpe2NvbnN0e3BsdWdpbjplfT10O3JldHVybiBlPT09c1IuSU1BR0VTfW9uQWN0dWFsU2l6ZVRvZ2dsZSgpe3RoaXMuYWN0dWFsU2l6ZVVpVG9nZ2xlZD0hdGhpcy5hY3R1YWxTaXplVWlUb2dnbGVkLHRoaXMuYWN0dWFsU2l6ZVVpVG9nZ2xlU3ViamVjdC5uZXh0KHRoaXMuYWN0dWFsU2l6ZVVpVG9nZ2xlZCl9bmdPbkluaXQoKXtEdChbdGhpcy5hY3R1YWxTaXplR2xvYmFsU2V0dGluZyQsdGhpcy5hY3R1YWxTaXplVWlUb2dnbGVTdWJqZWN0XSkucGlwZSh1bih0aGlzLm5nVW5zdWJzY3JpYmUpLF9uKCgoW3QsZV0pPT57dGhpcy5zaG93QWN0dWFsU2l6ZT10fHxlLHRoaXMuZnVsbFdpZHRoQ2hhbmdlZC5lbWl0KHRoaXMuc2hvd0FjdHVhbFNpemUpfSkpKS5zdWJzY3JpYmUoKCgpPT57fSkpO2NvbnN0IHQ9dGhpcy5zdG9yZS5zZWxlY3Qoa1QsdGhpcy5jYXJkSWQpLnBpcGUoR3QoKHQ9PiEhdCYmdGhpcy5pc0ltYWdlQ2FyZE1ldGFkYXRhKHQpKSksaHQoKHQ9PnQpKSxhbigxKSksZT1EdChbdCx0aGlzLnN0b3JlLnNlbGVjdChQVCx0aGlzLmNhcmRJZCldKS5waXBlKGh0KCgoW3QsZV0pPT57Y29uc3Qgbj10LnJ1bklkO3JldHVybiBlJiZlLmhhc093blByb3BlcnR5KG4pP2Vbbl06W119KSksa2UoKCh0LGUpPT50Lmxlbmd0aD09PWUubGVuZ3RoJiYwPT09dC5sZW5ndGh8fHQ9PT1lKSksYW4oMSkpO3RoaXMuc3RlcEluZGV4JD10aGlzLnN0b3JlLnNlbGVjdChBVCx0aGlzLmNhcmRJZCksdGhpcy5sb2FkU3RhdGUkPXRoaXMuc3RvcmUuc2VsZWN0KE9ULHRoaXMuY2FyZElkKTtjb25zdCBuPUR0KFtlLHRoaXMuc3RlcEluZGV4JF0pLnBpcGUoaHQoKChbdCxlXSk9Pm51bGwhPT1lJiZ0W2VdP3RbZV06bnVsbCkpKTt0aGlzLnRhZyQ9dC5waXBlKGh0KCh0PT50LnRhZykpKSx0aGlzLnRpdGxlJD10aGlzLnRhZyQucGlwZShodCgodD0+ejIodCx0aGlzLmdyb3VwTmFtZSkpKSksdGhpcy5ydW5JZCQ9dC5waXBlKGh0KCh0PT50LnJ1bklkKSkpLHRoaXMuc2FtcGxlJD10LnBpcGUoaHQoKHQ9PnQuc2FtcGxlKSkpLHRoaXMuaW1hZ2VVcmwkPW4ucGlwZShodCgodD0+dD90aGlzLmRhdGFTb3VyY2UuaW1hZ2VVcmwodC5pbWFnZUlkKTpudWxsKSkpLHRoaXMuc3RlcFZhbHVlcyQ9ZS5waXBlKGh0KCh0PT50Lm1hcCgodD0+dC5zdGVwKSkpKSksdGhpcy5pc1Bpbm5lZCQ9dGhpcy5zdG9yZS5zZWxlY3QoSVQsdGhpcy5jYXJkSWQpfW5nT25EZXN0cm95KCl7dGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKSx0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKX19dmFyIGE1LHI1LHM1O2Z1bmN0aW9uIGw1KHQsZSl7MSZ0JiYoT3UoMCwic3BhbiIpLE1mKDEsInNjYWxhciIpLFB1KCkpfWZ1bmN0aW9uIGM1KHQsZSl7MSZ0JiYoT3UoMCwic3BhbiIpLE1mKDEsImhpc3RvZ3JhbSIpLFB1KCkpfWZ1bmN0aW9uIGQ1KHQsZSl7MSZ0JiYoT3UoMCwic3BhbiIpLE1mKDEsInVua25vd24iKSxQdSgpKX1mdW5jdGlvbiBwNSh0LGUpe2lmKDEmdCYmKGt1KDAsMTMpLFdtKDEsbDUsMiwwLCJzcGFuIiwxNCksV20oMixjNSwyLDAsInNwYW4iLDE0KSxXbSgzLGQ1LDIsMCwic3BhbiIsMTUpLFN1KCkpLDImdCl7Y29uc3QgdD1MdSgyKTt2dSgibmdTd2l0Y2giLHQuY2FyZE1ldGFkYXRhLnBsdWdpbiksSmMoMSksdnUoIm5nU3dpdGNoQ2FzZSIsdC5QbHVnaW5UeXBlLlNDQUxBUlMpLEpjKDEpLHZ1KCJuZ1N3aXRjaENhc2UiLHQuUGx1Z2luVHlwZS5ISVNUT0dSQU1TKX19ZnVuY3Rpb24gbTUodCxlKXsxJnQmJkR1KDApfWZ1bmN0aW9uIHU1KHQsZSl7aWYoMSZ0JiYoT3UoMCwib3B0aW9uIiwxNiksTWYoMSksUHUoKSksMiZ0KXtjb25zdCB0PWUuJGltcGxpY2l0O3Z1KCJ2YWx1ZSIsdC5pZCksSmMoMSksdmYodC5uYW1lKX19ZnVuY3Rpb24gZjUodCxlKXtpZigxJnQpe2NvbnN0IHQ9RXUoKTtrdSgwKSxPdSgxLCJoMiIpLFdtKDIscDUsNCwzLCJuZy10ZW1wbGF0ZSIsbnVsbCwyLEtiKSxPdSg0LCJzcGFuIiksTWYoNSwiRG93bmxvYWTCoCIpLFB1KCksV20oNixtNSwxLDAsIm5nLWNvbnRhaW5lciIsMyksT3UoNywic3BhbiIpLE1mKDgsIsKgZGF0YSBmb3LCoCIpLFB1KCksT3UoOSwiY29kZSIsNCksTWYoMTApLFB1KCksUHUoKSxPdSgxMSwibWF0LWRpYWxvZy1jb250ZW50IiksT3UoMTIsIm1hdC1mb3JtLWZpZWxkIiw1KSxPdSgxMywibWF0LWxhYmVsIiksTWYoMTQsIlNlbGVjdCBhIHJ1biB0byBkb3dubG9hZCBhIGRhdGEgZm9yIGEgc2VyaWVzIiksUHUoKSxPdSgxNSwic2VsZWN0Iiw2KSxOdSgiY2hhbmdlIiwoZnVuY3Rpb24gZShuKXtyZXR1cm4gcmEodCksTHUoKS5ydW5TZWxlY3RlZC5lbWl0KG4udGFyZ2V0LnZhbHVlKX0pKSxPdSgxNiwib3B0aW9uIiw3KSxNZigxNywiLSIpLFB1KCksV20oMTgsdTUsMiwyLCJvcHRpb24iLDgpLFB1KCksUHUoKSxPdSgxOSwiZGl2Iiw5KSxPdSgyMCwic3BhbiIpLE1mKDIxLCJEb3dubG9hZCBhc+KApiIpLFB1KCksTWYoMjIsIsKgIiksT3UoMjMsImEiLDEwKSxNZigyNCwiSlNPTiIpLFB1KCksT3UoMjUsImEiLDEwKSxNZigyNiwiQ1NWIiksUHUoKSxQdSgpLFB1KCksT3UoMjcsIm1hdC1kaWFsb2ctYWN0aW9ucyIsMTEpLE91KDI4LCJidXR0b24iLDEyKSxNZigyOSwiQ2xvc2UiKSxQdSgpLFB1KCksU3UoKX1pZigyJnQpe2NvbnN0IHQ9R20oMyksZT1MdSgpO0pjKDYpLHZ1KCJuZ1RlbXBsYXRlT3V0bGV0Iix0KSxKYygzKSx2dSgidGl0bGUiLGUuY2FyZE1ldGFkYXRhLnRhZyksSmMoMSksdmYoZS5jYXJkTWV0YWRhdGEudGFnKSxKYyg1KSx2dSgidmFsdWUiLGUuc2VsZWN0ZWRSdW5JZHx8IiIpLEpjKDEpLHZ1KCJ2YWx1ZSIsIiIpLEpjKDIpLHZ1KCJuZ0Zvck9mIixlLnJ1bnMpLEpjKDUpLHZ1KCJkaXNhYmxlZCIsIWUuZG93bmxvYWRVcmxKc29uKSgiZG93bmxvYWQiLGUuZ2V0RG93bmxvYWROYW1lKCJqc29uIikpLE5tKCJocmVmIixlLmRvd25sb2FkVXJsSnNvbixPbCksSmMoMiksdnUoImRpc2FibGVkIiwhZS5kb3dubG9hZFVybENzdikoImRvd25sb2FkIixlLmdldERvd25sb2FkTmFtZSgiY3N2IikpLE5tKCJocmVmIixlLmRvd25sb2FkVXJsQ3N2LE9sKX19ZnVuY3Rpb24gZzUodCxlKXsxJnQmJk1mKDAsIkxvYWRpbmcuLi4iKX1pNS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8aTUpKE11KEVrKSxNdShoUikpfSxpNS7JtWNtcD1Vbyh7dHlwZTppNSxzZWxlY3RvcnM6W1siaW1hZ2UtY2FyZCJdXSxpbnB1dHM6e2NhcmRJZDoiY2FyZElkIixncm91cE5hbWU6Imdyb3VwTmFtZSIscnVuQ29sb3JTY2FsZToicnVuQ29sb3JTY2FsZSJ9LG91dHB1dHM6e2Z1bGxXaWR0aENoYW5nZWQ6ImZ1bGxXaWR0aENoYW5nZWQiLHBpblN0YXRlQ2hhbmdlZDoicGluU3RhdGVDaGFuZ2VkIn0sZGVjbHM6MTMsdmFyczozOCxjb25zdHM6W1szLCJsb2FkU3RhdGUiLCJ0aXRsZSIsInRhZyIsInJ1bklkIiwic2FtcGxlIiwiaW1hZ2VVcmwiLCJzdGVwSW5kZXgiLCJzdGVwVmFsdWVzIiwiYnJpZ2h0bmVzc0luTWlsbGkiLCJjb250cmFzdEluTWlsbGkiLCJydW5Db2xvclNjYWxlIiwic2hvd0FjdHVhbFNpemUiLCJhbGxvd1RvZ2dsZUFjdHVhbFNpemUiLCJpc1Bpbm5lZCIsInN0ZXBJbmRleENoYW5nZSIsIm9uQWN0dWFsU2l6ZVRvZ2dsZSIsIm9uUGluQ2xpY2tlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoT3UoMCwiaW1hZ2UtY2FyZC1jb21wb25lbnQiLDApLE51KCJzdGVwSW5kZXhDaGFuZ2UiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLm9uU3RlcEluZGV4Q2hhbmdlZChlKX0pKSgib25BY3R1YWxTaXplVG9nZ2xlIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uQWN0dWFsU2l6ZVRvZ2dsZSgpfSkpKCJvblBpbkNsaWNrZWQiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLnBpblN0YXRlQ2hhbmdlZC5lbWl0KGUpfSkpLE9iKDEsImFzeW5jIiksT2IoMiwiYXN5bmMiKSxPYigzLCJhc3luYyIpLE9iKDQsImFzeW5jIiksT2IoNSwiYXN5bmMiKSxPYig2LCJhc3luYyIpLE9iKDcsImFzeW5jIiksT2IoOCwiYXN5bmMiKSxPYig5LCJhc3luYyIpLE9iKDEwLCJhc3luYyIpLE9iKDExLCJhc3luYyIpLE9iKDEyLCJhc3luYyIpLFB1KCkpLDImZSYmdnUoImxvYWRTdGF0ZSIsUGIoMSwxNCxuLmxvYWRTdGF0ZSQpKSgidGl0bGUiLFBiKDIsMTYsbi50aXRsZSQpKSgidGFnIixQYigzLDE4LG4udGFnJCkpKCJydW5JZCIsUGIoNCwyMCxuLnJ1bklkJCkpKCJzYW1wbGUiLFBiKDUsMjIsbi5zYW1wbGUkKSkoImltYWdlVXJsIixQYig2LDI0LG4uaW1hZ2VVcmwkKSkoInN0ZXBJbmRleCIsUGIoNywyNixuLnN0ZXBJbmRleCQpKSgic3RlcFZhbHVlcyIsUGIoOCwyOCxuLnN0ZXBWYWx1ZXMkKSkoImJyaWdodG5lc3NJbk1pbGxpIixQYig5LDMwLG4uYnJpZ2h0bmVzc0luTWlsbGkkKSkoImNvbnRyYXN0SW5NaWxsaSIsUGIoMTAsMzIsbi5jb250cmFzdEluTWlsbGkkKSkoInJ1bkNvbG9yU2NhbGUiLG4ucnVuQ29sb3JTY2FsZSkoInNob3dBY3R1YWxTaXplIixuLnNob3dBY3R1YWxTaXplKSgiYWxsb3dUb2dnbGVBY3R1YWxTaXplIiwhMT09PVBiKDExLDM0LG4uYWN0dWFsU2l6ZUdsb2JhbFNldHRpbmckKSkoImlzUGlubmVkIixQYigxMiwzNixuLmlzUGlubmVkJCkpfSxkaXJlY3RpdmVzOltvNV0scGlwZXM6W012XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGk1LFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6ImltYWdlLWNhcmQiLHRlbXBsYXRlOidcbiAgICA8aW1hZ2UtY2FyZC1jb21wb25lbnRcbiAgICAgIFtsb2FkU3RhdGVdPSJsb2FkU3RhdGUkIHwgYXN5bmMiXG4gICAgICBbdGl0bGVdPSJ0aXRsZSQgfCBhc3luYyJcbiAgICAgIFt0YWddPSJ0YWckIHwgYXN5bmMiXG4gICAgICBbcnVuSWRdPSJydW5JZCQgfCBhc3luYyJcbiAgICAgIFtzYW1wbGVdPSJzYW1wbGUkIHwgYXN5bmMiXG4gICAgICBbaW1hZ2VVcmxdPSJpbWFnZVVybCQgfCBhc3luYyJcbiAgICAgIFtzdGVwSW5kZXhdPSJzdGVwSW5kZXgkIHwgYXN5bmMiXG4gICAgICBbc3RlcFZhbHVlc109InN0ZXBWYWx1ZXMkIHwgYXN5bmMiXG4gICAgICAoc3RlcEluZGV4Q2hhbmdlKT0ib25TdGVwSW5kZXhDaGFuZ2VkKCRldmVudCkiXG4gICAgICBbYnJpZ2h0bmVzc0luTWlsbGldPSJicmlnaHRuZXNzSW5NaWxsaSQgfCBhc3luYyJcbiAgICAgIFtjb250cmFzdEluTWlsbGldPSJjb250cmFzdEluTWlsbGkkIHwgYXN5bmMiXG4gICAgICBbcnVuQ29sb3JTY2FsZV09InJ1bkNvbG9yU2NhbGUiXG4gICAgICBbc2hvd0FjdHVhbFNpemVdPSJzaG93QWN0dWFsU2l6ZSJcbiAgICAgIFthbGxvd1RvZ2dsZUFjdHVhbFNpemVdPSIoYWN0dWFsU2l6ZUdsb2JhbFNldHRpbmckIHwgYXN5bmMpID09PSBmYWxzZSJcbiAgICAgIFtpc1Bpbm5lZF09ImlzUGlubmVkJCB8IGFzeW5jIlxuICAgICAgKG9uQWN0dWFsU2l6ZVRvZ2dsZSk9Im9uQWN0dWFsU2l6ZVRvZ2dsZSgpIlxuICAgICAgKG9uUGluQ2xpY2tlZCk9InBpblN0YXRlQ2hhbmdlZC5lbWl0KCRldmVudCkiXG4gICAgPjwvaW1hZ2UtY2FyZC1jb21wb25lbnQ+XG4gICcsY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkVrfSx7dHlwZTpoUn1dfSkse2NhcmRJZDpbe3R5cGU6eV99XSxncm91cE5hbWU6W3t0eXBlOnlffV0scnVuQ29sb3JTY2FsZTpbe3R5cGU6eV99XSxmdWxsV2lkdGhDaGFuZ2VkOlt7dHlwZTpfX31dLHBpblN0YXRlQ2hhbmdlZDpbe3R5cGU6X199XX0pLChmdW5jdGlvbih0KXt0W3QuU1ZHPTBdPSJTVkciLHRbdC5XRUJHTD0xXT0iV0VCR0wifSkoYTV8fChhNT17fSkpLChmdW5jdGlvbih0KXt0W3QuTElORUFSPTBdPSJMSU5FQVIiLHRbdC5MT0cxMD0xXT0iTE9HMTAiLHRbdC5USU1FPTJdPSJUSU1FIn0pKHI1fHwocjU9e30pKTtjbGFzcyBoNXtjb25zdHJ1Y3Rvcigpe3RoaXMucnVuU2VsZWN0ZWQ9bmV3IEFiLHRoaXMuUGx1Z2luVHlwZT1zUn1nZXREb3dubG9hZE5hbWUodCl7Y29uc3QgZT10aGlzLnJ1bnMuZmluZCgodD0+dC5pZD09PXRoaXMuc2VsZWN0ZWRSdW5JZCkpO3JldHVybiBlP2Ake2UubmFtZX0uJHt0fWA6IiJ9fWg1Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxoNSl9LGg1Lsm1Y21wPVVvKHt0eXBlOmg1LHNlbGVjdG9yczpbWyJkYXRhX2Rvd25sb2FkX2RpYWxvZ19jb21wb25lbnQiXV0saW5wdXRzOntjYXJkTWV0YWRhdGE6ImNhcmRNZXRhZGF0YSIscnVuczoicnVucyIsc2VsZWN0ZWRSdW5JZDoic2VsZWN0ZWRSdW5JZCIsZG93bmxvYWRVcmxDc3Y6ImRvd25sb2FkVXJsQ3N2Iixkb3dubG9hZFVybEpzb246ImRvd25sb2FkVXJsSnNvbiJ9LG91dHB1dHM6e3J1blNlbGVjdGVkOiJydW5TZWxlY3RlZCJ9LGRlY2xzOjMsdmFyczoyLGNvbnN0czpbWzQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsibm9DYXJkTWV0YWRhdGEiLCIiXSxbImRhdGFOYW1lIiwiIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiXSxbMSwidGFnLW5hbWUiLDMsInRpdGxlIl0sWyJhcHBlYXJhbmNlIiwiZmlsbCIsMSwicnVuLXNlbGVjdG9yIl0sWyJtYXROYXRpdmVDb250cm9sIiwiIiwibmFtZSIsInJ1biIsImNka0ZvY3VzSW5pdGlhbCIsIiIsInJlcXVpcmVkIiwiIiwzLCJ2YWx1ZSIsImNoYW5nZSJdLFsic2VsZWN0ZWQiLCIiLDMsInZhbHVlIl0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiZG93bmxvYWQtY29udHJvbHMiXSxbIm1hdC1zdHJva2VkLWJ1dHRvbiIsIiIsMywiZGlzYWJsZWQiLCJkb3dubG9hZCJdLFsiYWxpZ24iLCJlbmQiXSxbIm1hdC1idXR0b24iLCIiLCJtYXQtZGlhbG9nLWNsb3NlIiwiIl0sWzMsIm5nU3dpdGNoIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFs0LCJOZ1N3aXRjaERlZmF1bHQiXSxbMywidmFsdWUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pe2lmKDEmZSYmKFdtKDAsZjUsMzAsMTIsIm5nLWNvbnRhaW5lciIsMCksV20oMSxnNSwxLDAsIm5nLXRlbXBsYXRlIixudWxsLDEsS2IpKSwyJmUpe2NvbnN0IHQ9R20oMik7dnUoIm5nSWYiLG4uY2FyZE1ldGFkYXRhKSgibmdJZkVsc2UiLHQpfX0sZGlyZWN0aXZlczpbYXYsaHYsVlcsX1YsY1YsRVksX1UseFUsb3YsSUgsalcsTkgsTFcsY3YsZHZdLHN0eWxlczpbJy5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHh9Lm1hdC1oMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaGVhZGxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTVweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZ1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjA1ZW07bWFyZ2luOjAgMCA1NnB4fS5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAwNWVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXJhaXNlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdHJva2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmxhdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZhYltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbWluaS1mYWJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4fS5tYXQtY2FyZC1zdWJ0aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGVja2JveC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvb3Rlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgdHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIzZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LjU0MTY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2NjY2NjY3ZW0pfUBtZWRpYSBwcmludHsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjJlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouMjVlbSAwIC43NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxZW0gMCAxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMiksIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi0wLjA2MjVlbX0ubWF0LW1lbnUtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci12ZXJ0aWNhbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGFiLWxpbmtbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MH0ubWF0LXRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5Om5vbmV9LmNkay12aXN1YWxseS1oaWRkZW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjZ9LmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV0sIC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3hbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2tbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHt9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7fS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOi13ZWJraXQtYXV0b2ZpbGwpe2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZVtfbmdjb250ZW50LSVDT01QJV17cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fS5tYXQtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfWgyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MS4yNWVtO292ZXJmbG93LXdyYXA6YnJlYWstd29yZH0ucnVuLXNlbGVjdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6LjllbTt3aWR0aDoxMDAlfS5kb3dubG9hZC1jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOi45ZW19LmRvd25sb2FkLWNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGFbX25nY29udGVudC0lQ09NUCVde21hcmdpbjozcHggMTBweCAzcHggMH0nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoaDUsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoiZGF0YV9kb3dubG9hZF9kaWFsb2dfY29tcG9uZW50Iix0ZW1wbGF0ZVVybDoiZGF0YV9kb3dubG9hZF9kaWFsb2dfY29tcG9uZW50Lm5nLmh0bWwiLHN0eWxlVXJsczpbImRhdGFfZG93bmxvYWRfZGlhbG9nX2NvbXBvbmVudC5jc3MiXSxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSxudWxsLHtjYXJkTWV0YWRhdGE6W3t0eXBlOnlffV0scnVuczpbe3R5cGU6eV99XSxzZWxlY3RlZFJ1bklkOlt7dHlwZTp5X31dLGRvd25sb2FkVXJsQ3N2Olt7dHlwZTp5X31dLGRvd25sb2FkVXJsSnNvbjpbe3R5cGU6eV99XSxydW5TZWxlY3RlZDpbe3R5cGU6X199XX0pO2NsYXNzIGI1e2NvbnN0cnVjdG9yKHQsZSxuKXt0aGlzLnNlbGVjdGVkUnVuSWQkPW5ldyBIKG51bGwpLHRoaXMuY2FyZE1ldGFkYXRhJD10LnNlbGVjdChrVCxuLmNhcmRJZCkucGlwZShHdCgodD0+Qm9vbGVhbih0KSkpKSx0aGlzLmRvd25sb2FkVXJsQ3N2JD1EdChbdC5zZWxlY3Qoa1Qsbi5jYXJkSWQpLHRoaXMuc2VsZWN0ZWRSdW5JZCRdKS5waXBlKGh0KCgoW3Qsbl0pPT50JiZuP2UuZG93bmxvYWRVcmwodC5wbHVnaW4sdC50YWcsbiwiY3N2Iik6bnVsbCkpLGNuKG51bGwpKSx0aGlzLmRvd25sb2FkVXJsSnNvbiQ9RHQoW3Quc2VsZWN0KGtULG4uY2FyZElkKSx0aGlzLnNlbGVjdGVkUnVuSWQkXSkucGlwZShodCgoKFt0LG5dKT0+dCYmbj9lLmRvd25sb2FkVXJsKHQucGx1Z2luLHQudGFnLG4sImpzb24iKTpudWxsKSksY24obnVsbCkpLHRoaXMucnVucyQ9RHQoW3Quc2VsZWN0KHBOKSx0LnNlbGVjdChQVCxuLmNhcmRJZCldKS5waXBlKGh0KCgoW3QsZV0pPT5lP09iamVjdC5rZXlzKGUpLm1hcCgoZT0+dC5nZXQoZSkpKS5maWx0ZXIoQm9vbGVhbik6W10pKSl9fWZ1bmN0aW9uIHk1KHQsZSl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTp0Pj1lPzA6TmFOfWZ1bmN0aW9uIF81KHQpe3JldHVybiAxPT09dC5sZW5ndGgmJih0PShmdW5jdGlvbiBlKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3JldHVybiB5NSh0KGUpLG4pfX0pKHQpKSx7bGVmdDpmdW5jdGlvbihlLG4sbyxpKXtmb3IobnVsbD09byYmKG89MCksbnVsbD09aSYmKGk9ZS5sZW5ndGgpO288aTspe3ZhciBhPW8raT4+PjE7dChlW2FdLG4pPDA/bz1hKzE6aT1hfXJldHVybiBvfSxyaWdodDpmdW5jdGlvbihlLG4sbyxpKXtmb3IobnVsbD09byYmKG89MCksbnVsbD09aSYmKGk9ZS5sZW5ndGgpO288aTspe3ZhciBhPW8raT4+PjE7dChlW2FdLG4pPjA/aT1hOm89YSsxfXJldHVybiBvfX19YjUuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGI1KShNdShFayksTXUoaFIpLE11KEFXKSl9LGI1Lsm1Y21wPVVvKHt0eXBlOmI1LHNlbGVjdG9yczpbWyJkYXRhX2Rvd25sb2FkX2RpYWxvZyJdXSxkZWNsczo2LHZhcnM6MTUsY29uc3RzOltbMywiY2FyZE1ldGFkYXRhIiwicnVucyIsInNlbGVjdGVkUnVuSWQiLCJkb3dubG9hZFVybENzdiIsImRvd25sb2FkVXJsSnNvbiIsInJ1blNlbGVjdGVkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihPdSgwLCJkYXRhX2Rvd25sb2FkX2RpYWxvZ19jb21wb25lbnQiLDApLE51KCJydW5TZWxlY3RlZCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4uc2VsZWN0ZWRSdW5JZCQubmV4dChlKX0pKSxPYigxLCJhc3luYyIpLE9iKDIsImFzeW5jIiksT2IoMywiYXN5bmMiKSxPYig0LCJhc3luYyIpLE9iKDUsImFzeW5jIiksUHUoKSksMiZlJiZ2dSgiY2FyZE1ldGFkYXRhIixQYigxLDUsbi5jYXJkTWV0YWRhdGEkKSkoInJ1bnMiLFBiKDIsNyxuLnJ1bnMkKSkoInNlbGVjdGVkUnVuSWQiLFBiKDMsOSxuLnNlbGVjdGVkUnVuSWQkKSkoImRvd25sb2FkVXJsQ3N2IixQYig0LDExLG4uZG93bmxvYWRVcmxDc3YkKSkoImRvd25sb2FkVXJsSnNvbiIsUGIoNSwxMyxuLmRvd25sb2FkVXJsSnNvbiQpKX0sZGlyZWN0aXZlczpbaDVdLHBpcGVzOltNdl0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihiNSxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJkYXRhX2Rvd25sb2FkX2RpYWxvZyIsdGVtcGxhdGU6JzxkYXRhX2Rvd25sb2FkX2RpYWxvZ19jb21wb25lbnRcbiAgICBbY2FyZE1ldGFkYXRhXT0iY2FyZE1ldGFkYXRhJCB8IGFzeW5jIlxuICAgIFtydW5zXT0icnVucyQgfCBhc3luYyJcbiAgICBbc2VsZWN0ZWRSdW5JZF09InNlbGVjdGVkUnVuSWQkIHwgYXN5bmMiXG4gICAgW2Rvd25sb2FkVXJsQ3N2XT0iZG93bmxvYWRVcmxDc3YkIHwgYXN5bmMiXG4gICAgW2Rvd25sb2FkVXJsSnNvbl09ImRvd25sb2FkVXJsSnNvbiQgfCBhc3luYyJcbiAgICAocnVuU2VsZWN0ZWQpPSJzZWxlY3RlZFJ1bklkJC5uZXh0KCRldmVudCkiXG4gID48L2RhdGFfZG93bmxvYWRfZGlhbG9nX2NvbXBvbmVudD4nLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2h9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpFa30se3R5cGU6aFJ9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltBV119XX1dfSksbnVsbCksKGZ1bmN0aW9uKHQpe3RbdC5PUklHSU5BTD0wXT0iT1JJR0lOQUwiLHRbdC5ERVJJVkVEPTFdPSJERVJJVkVEIn0pKHM1fHwoczU9e30pKTt2YXIgQzU9XzUoeTUpLnJpZ2h0O2Z1bmN0aW9uIE01KHQsZSl7dmFyIG4sbyxpLGE9dC5sZW5ndGgscj0tMTtpZihudWxsPT1lKXtmb3IoOysrcjxhOylpZihudWxsIT0obj10W3JdKSYmbj49bilmb3Iobz1pPW47KytyPGE7KW51bGwhPShuPXRbcl0pJiYobz5uJiYobz1uKSxpPG4mJihpPW4pKX1lbHNlIGZvcig7KytyPGE7KWlmKG51bGwhPShuPWUodFtyXSxyLHQpKSYmbj49bilmb3Iobz1pPW47KytyPGE7KW51bGwhPShuPWUodFtyXSxyLHQpKSYmKG8+biYmKG89biksaTxuJiYoaT1uKSk7cmV0dXJuW28saV19dmFyIHY1PUFycmF5LnByb3RvdHlwZS5zbGljZTtmdW5jdGlvbiB4NSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gTzUodCl7cmV0dXJuIHR9ZnVuY3Rpb24gUDUodCxlLG4pe3Q9K3QsZT0rZSxuPShpPWFyZ3VtZW50cy5sZW5ndGgpPDI/KGU9dCx0PTAsMSk6aTwzPzE6K247Zm9yKHZhciBvPS0xLGk9MHxNYXRoLm1heCgwLE1hdGguY2VpbCgoZS10KS9uKSksYT1uZXcgQXJyYXkoaSk7KytvPGk7KWFbb109dCtvKm47cmV0dXJuIGF9dmFyIHc1PU1hdGguc3FydCg1MCksazU9TWF0aC5zcXJ0KDEwKSxTNT1NYXRoLnNxcnQoMik7ZnVuY3Rpb24gRDUodCxlLG4pe3ZhciBvLGksYSxyLHM9LTE7aWYobj0rbiwodD0rdCk9PShlPStlKSYmbj4wKXJldHVyblt0XTtpZigobz1lPHQpJiYoaT10LHQ9ZSxlPWkpLDA9PT0ocj1FNSh0LGUsbikpfHwhaXNGaW5pdGUocikpcmV0dXJuW107aWYocj4wKWZvcih0PU1hdGguY2VpbCh0L3IpLGU9TWF0aC5mbG9vcihlL3IpLGE9bmV3IEFycmF5KGk9TWF0aC5jZWlsKGUtdCsxKSk7KytzPGk7KWFbc109KHQrcykqcjtlbHNlIGZvcih0PU1hdGguZmxvb3IodCpyKSxlPU1hdGguY2VpbChlKnIpLGE9bmV3IEFycmF5KGk9TWF0aC5jZWlsKHQtZSsxKSk7KytzPGk7KWFbc109KHQtcykvcjtyZXR1cm4gbyYmYS5yZXZlcnNlKCksYX1mdW5jdGlvbiBFNSh0LGUsbil7dmFyIG89KGUtdCkvTWF0aC5tYXgoMCxuKSxpPU1hdGguZmxvb3IoTWF0aC5sb2cobykvTWF0aC5MTjEwKSxhPW8vTWF0aC5wb3coMTAsaSk7cmV0dXJuIGk+PTA/KGE+PXc1PzEwOmE+PWs1PzU6YT49UzU/MjoxKSpNYXRoLnBvdygxMCxpKTotTWF0aC5wb3coMTAsLWkpLyhhPj13NT8xMDphPj1rNT81OmE+PVM1PzI6MSl9ZnVuY3Rpb24gQTUodCxlLG4pe3ZhciBvPU1hdGguYWJzKGUtdCkvTWF0aC5tYXgoMCxuKSxpPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2cobykvTWF0aC5MTjEwKSksYT1vL2k7cmV0dXJuIGE+PXc1P2kqPTEwOmE+PWs1P2kqPTU6YT49UzUmJihpKj0yKSxlPHQ/LWk6aX1mdW5jdGlvbiBSNSh0KXtyZXR1cm4gTWF0aC5jZWlsKE1hdGgubG9nKHQubGVuZ3RoKS9NYXRoLkxOMikrMX1mdW5jdGlvbiBUNSgpe3ZhciB0PU81LGU9TTUsbj1SNTtmdW5jdGlvbiBvKG8pe3ZhciBpLGEscj1vLmxlbmd0aCxzPW5ldyBBcnJheShyKTtmb3IoaT0wO2k8cjsrK2kpc1tpXT10KG9baV0saSxvKTt2YXIgbD1lKHMpLGM9bFswXSxkPWxbMV0scD1uKHMsYyxkKTtBcnJheS5pc0FycmF5KHApfHwocD1BNShjLGQscCkscD1QNShNYXRoLmNlaWwoYy9wKSpwLGQscCkpO2Zvcih2YXIgbT1wLmxlbmd0aDtwWzBdPD1jOylwLnNoaWZ0KCksLS1tO2Zvcig7cFttLTFdPmQ7KXAucG9wKCksLS1tO3ZhciB1LGY9bmV3IEFycmF5KG0rMSk7Zm9yKGk9MDtpPD1tOysraSkodT1mW2ldPVtdKS54MD1pPjA/cFtpLTFdOmMsdS54MT1pPG0/cFtpXTpkO2ZvcihpPTA7aTxyOysraSljPD0oYT1zW2ldKSYmYTw9ZCYmZltDNShwLGEsMCxtKV0ucHVzaChvW2ldKTtyZXR1cm4gZn1yZXR1cm4gby52YWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOng1KGUpLG8pOnR9LG8uZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6eDUoW3RbMF0sdFsxXV0pLG8pOmV9LG8udGhyZXNob2xkcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkFycmF5LmlzQXJyYXkodCk/eDUodjUuY2FsbCh0KSk6eDUodCksbyk6bn0sb312YXIgTjU9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIEk1KHQpe3JldHVybiB0fXZhciB6NT0xZS02O2Z1bmN0aW9uIEg1KHQpe3JldHVybiJ0cmFuc2xhdGUoIisodCsuNSkrIiwwKSJ9ZnVuY3Rpb24gRjUodCl7cmV0dXJuInRyYW5zbGF0ZSgwLCIrKHQrLjUpKyIpIn1mdW5jdGlvbiBMNSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuK3QoZSl9fWZ1bmN0aW9uIEI1KHQpe3ZhciBlPU1hdGgubWF4KDAsdC5iYW5kd2lkdGgoKS0xKS8yO3JldHVybiB0LnJvdW5kKCkmJihlPU1hdGgucm91bmQoZSkpLGZ1bmN0aW9uKG4pe3JldHVybit0KG4pK2V9fWZ1bmN0aW9uIFY1KCl7cmV0dXJuIXRoaXMuX19heGlzfWZ1bmN0aW9uIGo1KHQsZSl7dmFyIG49W10sbz1udWxsLGk9bnVsbCxhPTYscj02LHM9MyxsPTE9PT10fHw0PT09dD8tMToxLGM9ND09PXR8fDI9PT10PyJ4IjoieSIsZD0xPT09dHx8Mz09PXQ/SDU6RjU7ZnVuY3Rpb24gcChwKXt2YXIgbT1udWxsPT1vP2UudGlja3M/ZS50aWNrcy5hcHBseShlLG4pOmUuZG9tYWluKCk6byx1PW51bGw9PWk/ZS50aWNrRm9ybWF0P2UudGlja0Zvcm1hdC5hcHBseShlLG4pOkk1OmksZj1NYXRoLm1heChhLDApK3MsZz1lLnJhbmdlKCksaD0rZ1swXSsuNSxiPStnW2cubGVuZ3RoLTFdKy41LHk9KGUuYmFuZHdpZHRoP0I1Okw1KShlLmNvcHkoKSksXz1wLnNlbGVjdGlvbj9wLnNlbGVjdGlvbigpOnAsQz1fLnNlbGVjdEFsbCgiLmRvbWFpbiIpLmRhdGEoW251bGxdKSxNPV8uc2VsZWN0QWxsKCIudGljayIpLmRhdGEobSxlKS5vcmRlcigpLHY9TS5leGl0KCkseD1NLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJ0aWNrIiksTz1NLnNlbGVjdCgibGluZSIpLFA9TS5zZWxlY3QoInRleHQiKTtDPUMubWVyZ2UoQy5lbnRlcigpLmluc2VydCgicGF0aCIsIi50aWNrIikuYXR0cigiY2xhc3MiLCJkb21haW4iKS5hdHRyKCJzdHJva2UiLCJjdXJyZW50Q29sb3IiKSksTT1NLm1lcmdlKHgpLE89Ty5tZXJnZSh4LmFwcGVuZCgibGluZSIpLmF0dHIoInN0cm9rZSIsImN1cnJlbnRDb2xvciIpLmF0dHIoYysiMiIsbCphKSksUD1QLm1lcmdlKHguYXBwZW5kKCJ0ZXh0IikuYXR0cigiZmlsbCIsImN1cnJlbnRDb2xvciIpLmF0dHIoYyxsKmYpLmF0dHIoImR5IiwxPT09dD8iMGVtIjozPT09dD8iMC43MWVtIjoiMC4zMmVtIikpLHAhPT1fJiYoQz1DLnRyYW5zaXRpb24ocCksTT1NLnRyYW5zaXRpb24ocCksTz1PLnRyYW5zaXRpb24ocCksUD1QLnRyYW5zaXRpb24ocCksdj12LnRyYW5zaXRpb24ocCkuYXR0cigib3BhY2l0eSIsejUpLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3JldHVybiBpc0Zpbml0ZSh0PXkodCkpP2QodCk6dGhpcy5nZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIpfSkpLHguYXR0cigib3BhY2l0eSIsejUpLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucGFyZW50Tm9kZS5fX2F4aXM7cmV0dXJuIGQoZSYmaXNGaW5pdGUoZT1lKHQpKT9lOnkodCkpfSkpKSx2LnJlbW92ZSgpLEMuYXR0cigiZCIsND09PXR8fDI9PXQ/cj8iTSIrbCpyKyIsIitoKyJIMC41ViIrYisiSCIrbCpyOiJNMC41LCIraCsiViIrYjpyPyJNIitoKyIsIitsKnIrIlYwLjVIIitiKyJWIitsKnI6Ik0iK2grIiwwLjVIIitiKSxNLmF0dHIoIm9wYWNpdHkiLDEpLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3JldHVybiBkKHkodCkpfSkpLE8uYXR0cihjKyIyIixsKmEpLFAuYXR0cihjLGwqZikudGV4dCh1KSxfLmZpbHRlcihWNSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJmb250LXNpemUiLDEwKS5hdHRyKCJmb250LWZhbWlseSIsInNhbnMtc2VyaWYiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsMj09PXQ/InN0YXJ0Ijo0PT09dD8iZW5kIjoibWlkZGxlIiksXy5lYWNoKChmdW5jdGlvbigpe3RoaXMuX19heGlzPXl9KSl9cmV0dXJuIHAuc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxwKTplfSxwLnRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIG49TjUuY2FsbChhcmd1bWVudHMpLHB9LHAudGlja0FyZ3VtZW50cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1udWxsPT10P1tdOk41LmNhbGwodCkscCk6bi5zbGljZSgpfSxwLnRpY2tWYWx1ZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89bnVsbD09dD9udWxsOk41LmNhbGwodCkscCk6byYmby5zbGljZSgpfSxwLnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxwKTppfSxwLnRpY2tTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXI9K3QscCk6YX0scC50aWNrU2l6ZUlubmVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSt0LHApOmF9LHAudGlja1NpemVPdXRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rdCxwKTpyfSxwLnRpY2tQYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSt0LHApOnN9LHB9ZnVuY3Rpb24gVTUodCl7cmV0dXJuIGo1KDIsdCl9ZnVuY3Rpb24gVzUodCl7cmV0dXJuIGo1KDMsdCl9dmFyIEc1PXt2YWx1ZTpmdW5jdGlvbigpe319O2Z1bmN0aW9uIFk1KCl7Zm9yKHZhciB0LGU9MCxuPWFyZ3VtZW50cy5sZW5ndGgsbz17fTtlPG47KytlKXtpZighKHQ9YXJndW1lbnRzW2VdKyIiKXx8dCBpbiBvfHwvW1xzLl0vLnRlc3QodCkpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrdCk7b1t0XT1bXX1yZXR1cm4gbmV3IHE1KG8pfWZ1bmN0aW9uIHE1KHQpe3RoaXMuXz10fWZ1bmN0aW9uIFo1KHQsZSl7cmV0dXJuIHQudHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcCgoZnVuY3Rpb24odCl7dmFyIG49IiIsbz10LmluZGV4T2YoIi4iKTtpZihvPj0wJiYobj10LnNsaWNlKG8rMSksdD10LnNsaWNlKDAsbykpLHQmJiFlLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO3JldHVybnt0eXBlOnQsbmFtZTpufX0pKX1mdW5jdGlvbiBYNSh0LGUpe2Zvcih2YXIgbixvPTAsaT10Lmxlbmd0aDtvPGk7KytvKWlmKChuPXRbb10pLm5hbWU9PT1lKXJldHVybiBuLnZhbHVlfWZ1bmN0aW9uIEs1KHQsZSxuKXtmb3IodmFyIG89MCxpPXQubGVuZ3RoO288aTsrK28paWYodFtvXS5uYW1lPT09ZSl7dFtvXT1HNSx0PXQuc2xpY2UoMCxvKS5jb25jYXQodC5zbGljZShvKzEpKTticmVha31yZXR1cm4gbnVsbCE9biYmdC5wdXNoKHtuYW1lOmUsdmFsdWU6bn0pLHR9cTUucHJvdG90eXBlPVk1LnByb3RvdHlwZT17Y29uc3RydWN0b3I6cTUsb246ZnVuY3Rpb24odCxlKXt2YXIgbixvPXRoaXMuXyxpPVo1KHQrIiIsbyksYT0tMSxyPWkubGVuZ3RoO2lmKCEoYXJndW1lbnRzLmxlbmd0aDwyKSl7aWYobnVsbCE9ZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrOiAiK2UpO2Zvcig7KythPHI7KWlmKG49KHQ9aVthXSkudHlwZSlvW25dPUs1KG9bbl0sdC5uYW1lLGUpO2Vsc2UgaWYobnVsbD09ZSlmb3IobiBpbiBvKW9bbl09SzUob1tuXSx0Lm5hbWUsbnVsbCk7cmV0dXJuIHRoaXN9Zm9yKDsrK2E8cjspaWYoKG49KHQ9aVthXSkudHlwZSkmJihuPVg1KG9bbl0sdC5uYW1lKSkpcmV0dXJuIG59LGNvcHk6ZnVuY3Rpb24oKXt2YXIgdD17fSxlPXRoaXMuXztmb3IodmFyIG4gaW4gZSl0W25dPWVbbl0uc2xpY2UoKTtyZXR1cm4gbmV3IHE1KHQpfSxjYWxsOmZ1bmN0aW9uKHQsZSl7aWYoKG49YXJndW1lbnRzLmxlbmd0aC0yKT4wKWZvcih2YXIgbixvLGk9bmV3IEFycmF5KG4pLGE9MDthPG47KythKWlbYV09YXJndW1lbnRzW2ErMl07aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtmb3IoYT0wLG49KG89dGhpcy5fW3RdKS5sZW5ndGg7YTxuOysrYSlvW2FdLnZhbHVlLmFwcGx5KGUsaSl9LGFwcGx5OmZ1bmN0aW9uKHQsZSxuKXtpZighdGhpcy5fLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO2Zvcih2YXIgbz10aGlzLl9bdF0saT0wLGE9by5sZW5ndGg7aTxhOysraSlvW2ldLnZhbHVlLmFwcGx5KGUsbil9fTt2YXIgSjU9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLFE1PXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDpKNSx4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9O2Z1bmN0aW9uICQ1KHQpe3ZhciBlPXQrPSIiLG49ZS5pbmRleE9mKCI6Iik7cmV0dXJuIG4+PTAmJiJ4bWxucyIhPT0oZT10LnNsaWNlKDAsbikpJiYodD10LnNsaWNlKG4rMSkpLFE1Lmhhc093blByb3BlcnR5KGUpP3tzcGFjZTpRNVtlXSxsb2NhbDp0fTp0fWZ1bmN0aW9uIHQ0KHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMub3duZXJEb2N1bWVudCxuPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiBuPT09SjUmJmUuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PUo1P2UuY3JlYXRlRWxlbWVudCh0KTplLmNyZWF0ZUVsZW1lbnROUyhuLHQpfX1mdW5jdGlvbiBlNCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyh0LnNwYWNlLHQubG9jYWwpfX1mdW5jdGlvbiBuNCh0KXt2YXIgZT0kNSh0KTtyZXR1cm4oZS5sb2NhbD9lNDp0NCkoZSl9ZnVuY3Rpb24gbzQoKXt9ZnVuY3Rpb24gaTQodCl7cmV0dXJuIG51bGw9PXQ/bzQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKHQpfX1mdW5jdGlvbiBhNCgpe3JldHVybltdfWZ1bmN0aW9uIHI0KHQpe3JldHVybiBudWxsPT10P2E0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbCh0KX19ZnVuY3Rpb24gczQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2hlcyh0KX19ZnVuY3Rpb24gbDQodCl7cmV0dXJuIG5ldyBBcnJheSh0Lmxlbmd0aCl9ZnVuY3Rpb24gYzQodCxlKXt0aGlzLm93bmVyRG9jdW1lbnQ9dC5vd25lckRvY3VtZW50LHRoaXMubmFtZXNwYWNlVVJJPXQubmFtZXNwYWNlVVJJLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wYXJlbnQ9dCx0aGlzLl9fZGF0YV9fPWV9ZnVuY3Rpb24gZDQodCxlLG4sbyxpLGEpe2Zvcih2YXIgcixzPTAsbD1lLmxlbmd0aCxjPWEubGVuZ3RoO3M8YzsrK3MpKHI9ZVtzXSk/KHIuX19kYXRhX189YVtzXSxvW3NdPXIpOm5bc109bmV3IGM0KHQsYVtzXSk7Zm9yKDtzPGw7KytzKShyPWVbc10pJiYoaVtzXT1yKX1mdW5jdGlvbiBwNCh0LGUsbixvLGksYSxyKXt2YXIgcyxsLGMsZD17fSxwPWUubGVuZ3RoLG09YS5sZW5ndGgsdT1uZXcgQXJyYXkocCk7Zm9yKHM9MDtzPHA7KytzKShsPWVbc10pJiYodVtzXT1jPSIkIityLmNhbGwobCxsLl9fZGF0YV9fLHMsZSksYyBpbiBkP2lbc109bDpkW2NdPWwpO2ZvcihzPTA7czxtOysrcykobD1kW2M9IiQiK3IuY2FsbCh0LGFbc10scyxhKV0pPyhvW3NdPWwsbC5fX2RhdGFfXz1hW3NdLGRbY109bnVsbCk6bltzXT1uZXcgYzQodCxhW3NdKTtmb3Iocz0wO3M8cDsrK3MpKGw9ZVtzXSkmJmRbdVtzXV09PT1sJiYoaVtzXT1sKX1mdW5jdGlvbiBtNCh0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6dD49ZT8wOk5hTn1mdW5jdGlvbiB1NCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX19ZnVuY3Rpb24gZjQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpfX1mdW5jdGlvbiBnNCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKHQsZSl9fWZ1bmN0aW9uIGg0KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwsZSl9fWZ1bmN0aW9uIGI0KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09bj90aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KTp0aGlzLnNldEF0dHJpYnV0ZSh0LG4pfX1mdW5jdGlvbiB5NCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PW4/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsLG4pfX1mdW5jdGlvbiBfNCh0KXtyZXR1cm4gdC5vd25lckRvY3VtZW50JiZ0Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fHQuZG9jdW1lbnQmJnR8fHQuZGVmYXVsdFZpZXd9ZnVuY3Rpb24gQzQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KX19ZnVuY3Rpb24gTTQodCxlLG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxlLG4pfX1mdW5jdGlvbiB2NCh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09bz90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxvLG4pfX1mdW5jdGlvbiB4NCh0LGUpe3JldHVybiB0LnN0eWxlLmdldFByb3BlcnR5VmFsdWUoZSl8fF80KHQpLmdldENvbXB1dGVkU3R5bGUodCxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKGUpfWZ1bmN0aW9uIE80KHQpe3JldHVybiBmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW3RdfX1mdW5jdGlvbiBQNCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbdF09ZX19ZnVuY3Rpb24gdzQodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1uP2RlbGV0ZSB0aGlzW3RdOnRoaXNbdF09bn19ZnVuY3Rpb24gazQodCl7cmV0dXJuIHQudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIFM0KHQpe3JldHVybiB0LmNsYXNzTGlzdHx8bmV3IEQ0KHQpfWZ1bmN0aW9uIEQ0KHQpe3RoaXMuX25vZGU9dCx0aGlzLl9uYW1lcz1rNCh0LmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfWZ1bmN0aW9uIEU0KHQsZSl7Zm9yKHZhciBuPVM0KHQpLG89LTEsaT1lLmxlbmd0aDsrK288aTspbi5hZGQoZVtvXSl9ZnVuY3Rpb24gQTQodCxlKXtmb3IodmFyIG49UzQodCksbz0tMSxpPWUubGVuZ3RoOysrbzxpOyluLnJlbW92ZShlW29dKX1mdW5jdGlvbiBSNCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtFNCh0aGlzLHQpfX1mdW5jdGlvbiBUNCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtBNCh0aGlzLHQpfX1mdW5jdGlvbiBONCh0LGUpe3JldHVybiBmdW5jdGlvbigpeyhlLmFwcGx5KHRoaXMsYXJndW1lbnRzKT9FNDpBNCkodGhpcyx0KX19ZnVuY3Rpb24gSTQoKXt0aGlzLnRleHRDb250ZW50PSIifWZ1bmN0aW9uIHo0KHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9dH19ZnVuY3Rpb24gSDQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD1udWxsPT1lPyIiOmV9fWZ1bmN0aW9uIEY0KCl7dGhpcy5pbm5lckhUTUw9IiJ9ZnVuY3Rpb24gTDQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9dH19ZnVuY3Rpb24gQjQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5pbm5lckhUTUw9bnVsbD09ZT8iIjplfX1mdW5jdGlvbiBWNCgpe3RoaXMubmV4dFNpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzKX1mdW5jdGlvbiBqNCgpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIFU0KCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gVzQoKXt2YXIgdD10aGlzLnBhcmVudE5vZGU7dCYmdC5yZW1vdmVDaGlsZCh0aGlzKX1mdW5jdGlvbiBHNCgpe3ZhciB0PXRoaXMuY2xvbmVOb2RlKCExKSxlPXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gZT9lLmluc2VydEJlZm9yZSh0LHRoaXMubmV4dFNpYmxpbmcpOnR9ZnVuY3Rpb24gWTQoKXt2YXIgdD10aGlzLmNsb25lTm9kZSghMCksZT10aGlzLnBhcmVudE5vZGU7cmV0dXJuIGU/ZS5pbnNlcnRCZWZvcmUodCx0aGlzLm5leHRTaWJsaW5nKTp0fWM0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6YzQsYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUodCx0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUodCxlKX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3IodCl9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKHQpfX0sRDQucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24odCl7dGhpcy5fbmFtZXMuaW5kZXhPZih0KTwwJiYodGhpcy5fbmFtZXMucHVzaCh0KSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxyZW1vdmU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbmFtZXMuaW5kZXhPZih0KTtlPj0wJiYodGhpcy5fbmFtZXMuc3BsaWNlKGUsMSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0sY29udGFpbnM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2YodCk+PTB9fTt2YXIgcTQ9e30sWjQ9bnVsbDtmdW5jdGlvbiBYNCh0LGUsbil7cmV0dXJuIHQ9SzQodCxlLG4pLGZ1bmN0aW9uKGUpe3ZhciBuPWUucmVsYXRlZFRhcmdldDtuJiYobj09PXRoaXN8fDgmbi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0aGlzKSl8fHQuY2FsbCh0aGlzLGUpfX1mdW5jdGlvbiBLNCh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKG8pe3ZhciBpPVo0O1o0PW87dHJ5e3QuY2FsbCh0aGlzLHRoaXMuX19kYXRhX18sZSxuKX1maW5hbGx5e1o0PWl9fX1mdW5jdGlvbiBKNCh0KXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLykubWFwKChmdW5jdGlvbih0KXt2YXIgZT0iIixuPXQuaW5kZXhPZigiLiIpO3JldHVybiBuPj0wJiYoZT10LnNsaWNlKG4rMSksdD10LnNsaWNlKDAsbikpLHt0eXBlOnQsbmFtZTplfX0pKX1mdW5jdGlvbiBRNCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9fb247aWYoZSl7Zm9yKHZhciBuLG89MCxpPS0xLGE9ZS5sZW5ndGg7bzxhOysrbyluPWVbb10sdC50eXBlJiZuLnR5cGUhPT10LnR5cGV8fG4ubmFtZSE9PXQubmFtZT9lWysraV09bjp0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIobi50eXBlLG4ubGlzdGVuZXIsbi5jYXB0dXJlKTsrK2k/ZS5sZW5ndGg9aTpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gJDQodCxlLG4pe3ZhciBvPXE0Lmhhc093blByb3BlcnR5KHQudHlwZSk/WDQ6SzQ7cmV0dXJuIGZ1bmN0aW9uKGksYSxyKXt2YXIgcyxsPXRoaXMuX19vbixjPW8oZSxhLHIpO2lmKGwpZm9yKHZhciBkPTAscD1sLmxlbmd0aDtkPHA7KytkKWlmKChzPWxbZF0pLnR5cGU9PT10LnR5cGUmJnMubmFtZT09PXQubmFtZSlyZXR1cm4gdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKHMudHlwZSxzLmxpc3RlbmVyLHMuY2FwdHVyZSksdGhpcy5hZGRFdmVudExpc3RlbmVyKHMudHlwZSxzLmxpc3RlbmVyPWMscy5jYXB0dXJlPW4pLHZvaWQocy52YWx1ZT1lKTt0aGlzLmFkZEV2ZW50TGlzdGVuZXIodC50eXBlLGMsbikscz17dHlwZTp0LnR5cGUsbmFtZTp0Lm5hbWUsdmFsdWU6ZSxsaXN0ZW5lcjpjLGNhcHR1cmU6bn0sbD9sLnB1c2gocyk6dGhpcy5fX29uPVtzXX19ZnVuY3Rpb24gdDYodCxlLG4pe3ZhciBvPV80KHQpLGk9by5DdXN0b21FdmVudDsiZnVuY3Rpb24iPT10eXBlb2YgaT9pPW5ldyBpKGUsbik6KGk9by5kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSxuPyhpLmluaXRFdmVudChlLG4uYnViYmxlcyxuLmNhbmNlbGFibGUpLGkuZGV0YWlsPW4uZGV0YWlsKTppLmluaXRFdmVudChlLCExLCExKSksdC5kaXNwYXRjaEV2ZW50KGkpfWZ1bmN0aW9uIGU2KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQ2KHRoaXMsdCxlKX19ZnVuY3Rpb24gbjYodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdDYodGhpcyx0LGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19InVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudCYmKCJvbm1vdXNlZW50ZXIiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fHwocTQ9e21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSkpO3ZhciBvNj1bbnVsbF07ZnVuY3Rpb24gaTYodCxlKXt0aGlzLl9ncm91cHM9dCx0aGlzLl9wYXJlbnRzPWV9ZnVuY3Rpb24gYTYoKXtyZXR1cm4gbmV3IGk2KFtbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0sbzYpfWZ1bmN0aW9uIHI2KHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD9uZXcgaTYoW1tkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHQpXV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyBpNihbW3RdXSxvNil9ZnVuY3Rpb24gczYoKXtmb3IodmFyIHQsZT1aNDt0PWUuc291cmNlRXZlbnQ7KWU9dDtyZXR1cm4gZX1mdW5jdGlvbiBsNih0LGUpe3ZhciBuPXQub3duZXJTVkdFbGVtZW50fHx0O2lmKG4uY3JlYXRlU1ZHUG9pbnQpe3ZhciBvPW4uY3JlYXRlU1ZHUG9pbnQoKTtyZXR1cm4gby54PWUuY2xpZW50WCxvLnk9ZS5jbGllbnRZLFsobz1vLm1hdHJpeFRyYW5zZm9ybSh0LmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSkpLngsby55XX12YXIgaT10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybltlLmNsaWVudFgtaS5sZWZ0LXQuY2xpZW50TGVmdCxlLmNsaWVudFktaS50b3AtdC5jbGllbnRUb3BdfWZ1bmN0aW9uIGM2KHQpe3ZhciBlPXM2KCk7cmV0dXJuIGUuY2hhbmdlZFRvdWNoZXMmJihlPWUuY2hhbmdlZFRvdWNoZXNbMF0pLGw2KHQsZSl9ZnVuY3Rpb24gZDYoKXtaNC5wcmV2ZW50RGVmYXVsdCgpLFo0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIHA2KHQpe3ZhciBlPXQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LG49cjYodCkub24oImRyYWdzdGFydC5kcmFnIixkNiwhMCk7Im9uc2VsZWN0c3RhcnQiaW4gZT9uLm9uKCJzZWxlY3RzdGFydC5kcmFnIixkNiwhMCk6KGUuX19ub3NlbGVjdD1lLnN0eWxlLk1velVzZXJTZWxlY3QsZS5zdHlsZS5Nb3pVc2VyU2VsZWN0PSJub25lIil9ZnVuY3Rpb24gbTYodCxlKXt2YXIgbj10LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxvPXI2KHQpLm9uKCJkcmFnc3RhcnQuZHJhZyIsbnVsbCk7ZSYmKG8ub24oImNsaWNrLmRyYWciLGQ2LCEwKSxzZXRUaW1lb3V0KChmdW5jdGlvbigpe28ub24oImNsaWNrLmRyYWciLG51bGwpfSksMCkpLCJvbnNlbGVjdHN0YXJ0ImluIG4/by5vbigic2VsZWN0c3RhcnQuZHJhZyIsbnVsbCk6KG4uc3R5bGUuTW96VXNlclNlbGVjdD1uLl9fbm9zZWxlY3QsZGVsZXRlIG4uX19ub3NlbGVjdCl9ZnVuY3Rpb24gdTYodCxlLG4pe3QucHJvdG90eXBlPWUucHJvdG90eXBlPW4sbi5jb25zdHJ1Y3Rvcj10fWZ1bmN0aW9uIGY2KHQsZSl7dmFyIG49T2JqZWN0LmNyZWF0ZSh0LnByb3RvdHlwZSk7Zm9yKHZhciBvIGluIGUpbltvXT1lW29dO3JldHVybiBufWZ1bmN0aW9uIGc2KCl7fWk2LnByb3RvdHlwZT1hNi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmk2LHNlbGVjdDpmdW5jdGlvbiBoNih0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9aTQodCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxvPW5ldyBBcnJheShuKSxpPTA7aTxuOysraSlmb3IodmFyIGEscixzPWVbaV0sbD1zLmxlbmd0aCxjPW9baV09bmV3IEFycmF5KGwpLGQ9MDtkPGw7KytkKShhPXNbZF0pJiYocj10LmNhbGwoYSxhLl9fZGF0YV9fLGQscykpJiYoIl9fZGF0YV9fImluIGEmJihyLl9fZGF0YV9fPWEuX19kYXRhX18pLGNbZF09cik7cmV0dXJuIG5ldyBpNihvLHRoaXMuX3BhcmVudHMpfSxzZWxlY3RBbGw6ZnVuY3Rpb24gYjYodCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PXI0KHQpKTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49ZS5sZW5ndGgsbz1bXSxpPVtdLGE9MDthPG47KythKWZvcih2YXIgcixzPWVbYV0sbD1zLmxlbmd0aCxjPTA7YzxsOysrYykocj1zW2NdKSYmKG8ucHVzaCh0LmNhbGwocixyLl9fZGF0YV9fLGMscykpLGkucHVzaChyKSk7cmV0dXJuIG5ldyBpNihvLGkpfSxmaWx0ZXI6ZnVuY3Rpb24geTYodCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PXM0KHQpKTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49ZS5sZW5ndGgsbz1uZXcgQXJyYXkobiksaT0wO2k8bjsrK2kpZm9yKHZhciBhLHI9ZVtpXSxzPXIubGVuZ3RoLGw9b1tpXT1bXSxjPTA7YzxzOysrYykoYT1yW2NdKSYmdC5jYWxsKGEsYS5fX2RhdGFfXyxjLHIpJiZsLnB1c2goYSk7cmV0dXJuIG5ldyBpNihvLHRoaXMuX3BhcmVudHMpfSxkYXRhOmZ1bmN0aW9uIF82KHQsZSl7aWYoIXQpcmV0dXJuIGY9bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSxkPS0xLHRoaXMuZWFjaCgoZnVuY3Rpb24odCl7ZlsrK2RdPXR9KSksZjt2YXIgbj1lP3A0OmQ0LG89dGhpcy5fcGFyZW50cyxpPXRoaXMuX2dyb3VwczsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9KGZ1bmN0aW9uIGEodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSkodCkpO2Zvcih2YXIgcj1pLmxlbmd0aCxzPW5ldyBBcnJheShyKSxsPW5ldyBBcnJheShyKSxjPW5ldyBBcnJheShyKSxkPTA7ZDxyOysrZCl7dmFyIHA9b1tkXSxtPWlbZF0sdT1tLmxlbmd0aCxmPXQuY2FsbChwLHAmJnAuX19kYXRhX18sZCxvKSxnPWYubGVuZ3RoLGg9bFtkXT1uZXcgQXJyYXkoZyksYj1zW2RdPW5ldyBBcnJheShnKTtuKHAsbSxoLGIsY1tkXT1uZXcgQXJyYXkodSksZixlKTtmb3IodmFyIHksXyxDPTAsTT0wO0M8ZzsrK0MpaWYoeT1oW0NdKXtmb3IoQz49TSYmKE09QysxKTshKF89YltNXSkmJisrTTxnOyk7eS5fbmV4dD1ffHxudWxsfX1yZXR1cm4ocz1uZXcgaTYocyxvKSkuX2VudGVyPWwscy5fZXhpdD1jLHN9LGVudGVyOmZ1bmN0aW9uIEM2KCl7cmV0dXJuIG5ldyBpNih0aGlzLl9lbnRlcnx8dGhpcy5fZ3JvdXBzLm1hcChsNCksdGhpcy5fcGFyZW50cyl9LGV4aXQ6ZnVuY3Rpb24gTTYoKXtyZXR1cm4gbmV3IGk2KHRoaXMuX2V4aXR8fHRoaXMuX2dyb3Vwcy5tYXAobDQpLHRoaXMuX3BhcmVudHMpfSxqb2luOmZ1bmN0aW9uIHY2KHQsZSxuKXt2YXIgbz10aGlzLmVudGVyKCksaT10aGlzLGE9dGhpcy5leGl0KCk7cmV0dXJuIG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dChvKTpvLmFwcGVuZCh0KyIiKSxudWxsIT1lJiYoaT1lKGkpKSxudWxsPT1uP2EucmVtb3ZlKCk6bihhKSxvJiZpP28ubWVyZ2UoaSkub3JkZXIoKTppfSxtZXJnZTpmdW5jdGlvbiB4Nih0KXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49dC5fZ3JvdXBzLG89ZS5sZW5ndGgsaT1NYXRoLm1pbihvLG4ubGVuZ3RoKSxhPW5ldyBBcnJheShvKSxyPTA7cjxpOysrcilmb3IodmFyIHMsbD1lW3JdLGM9bltyXSxkPWwubGVuZ3RoLHA9YVtyXT1uZXcgQXJyYXkoZCksbT0wO208ZDsrK20pKHM9bFttXXx8Y1ttXSkmJihwW21dPXMpO2Zvcig7cjxvOysrcilhW3JdPWVbcl07cmV0dXJuIG5ldyBpNihhLHRoaXMuX3BhcmVudHMpfSxvcmRlcjpmdW5jdGlvbiBPNigpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT0tMSxuPXQubGVuZ3RoOysrZTxuOylmb3IodmFyIG8saT10W2VdLGE9aS5sZW5ndGgtMSxyPWlbYV07LS1hPj0wOykobz1pW2FdKSYmKHImJjReby5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihyKSYmci5wYXJlbnROb2RlLmluc2VydEJlZm9yZShvLHIpLHI9byk7cmV0dXJuIHRoaXN9LHNvcnQ6ZnVuY3Rpb24gUDYodCl7ZnVuY3Rpb24gZShlLG4pe3JldHVybiBlJiZuP3QoZS5fX2RhdGFfXyxuLl9fZGF0YV9fKTohZS0hbn10fHwodD1tNCk7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxvPW4ubGVuZ3RoLGk9bmV3IEFycmF5KG8pLGE9MDthPG87KythKXtmb3IodmFyIHIscz1uW2FdLGw9cy5sZW5ndGgsYz1pW2FdPW5ldyBBcnJheShsKSxkPTA7ZDxsOysrZCkocj1zW2RdKSYmKGNbZF09cik7Yy5zb3J0KGUpfXJldHVybiBuZXcgaTYoaSx0aGlzLl9wYXJlbnRzKS5vcmRlcigpfSxjYWxsOmZ1bmN0aW9uIHc2KCl7dmFyIHQ9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyx0LmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfSxub2RlczpmdW5jdGlvbiBrNigpe3ZhciB0PW5ldyBBcnJheSh0aGlzLnNpemUoKSksZT0tMTtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpe3RbKytlXT10aGlzfSkpLHR9LG5vZGU6ZnVuY3Rpb24gUzYoKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9MCxuPXQubGVuZ3RoO2U8bjsrK2UpZm9yKHZhciBvPXRbZV0saT0wLGE9by5sZW5ndGg7aTxhOysraSl7dmFyIHI9b1tpXTtpZihyKXJldHVybiByfXJldHVybiBudWxsfSxzaXplOmZ1bmN0aW9uIEQ2KCl7dmFyIHQ9MDtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpeysrdH0pKSx0fSxlbXB0eTpmdW5jdGlvbiBFNigpe3JldHVybiF0aGlzLm5vZGUoKX0sZWFjaDpmdW5jdGlvbiBBNih0KXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49MCxvPWUubGVuZ3RoO248bzsrK24pZm9yKHZhciBpLGE9ZVtuXSxyPTAscz1hLmxlbmd0aDtyPHM7KytyKShpPWFbcl0pJiZ0LmNhbGwoaSxpLl9fZGF0YV9fLHIsYSk7cmV0dXJuIHRoaXN9LGF0dHI6ZnVuY3Rpb24gUjYodCxlKXt2YXIgbj0kNSh0KTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBvPXRoaXMubm9kZSgpO3JldHVybiBuLmxvY2FsP28uZ2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKTpvLmdldEF0dHJpYnV0ZShuKX1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT1lP24ubG9jYWw/ZjQ6dTQ6ImZ1bmN0aW9uIj09dHlwZW9mIGU/bi5sb2NhbD95NDpiNDpuLmxvY2FsP2g0Omc0KShuLGUpKX0sc3R5bGU6ZnVuY3Rpb24gVDYodCxlLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChudWxsPT1lP0M0OiJmdW5jdGlvbiI9PXR5cGVvZiBlP3Y0Ok00KSh0LGUsbnVsbD09bj8iIjpuKSk6eDQodGhpcy5ub2RlKCksdCl9LHByb3BlcnR5OmZ1bmN0aW9uIE42KHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PWU/TzQ6ImZ1bmN0aW9uIj09dHlwZW9mIGU/dzQ6UDQpKHQsZSkpOnRoaXMubm9kZSgpW3RdfSxjbGFzc2VkOmZ1bmN0aW9uIEk2KHQsZSl7dmFyIG49azQodCsiIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIG89UzQodGhpcy5ub2RlKCkpLGk9LTEsYT1uLmxlbmd0aDsrK2k8YTspaWYoIW8uY29udGFpbnMobltpXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIHRoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIGU/TjQ6ZT9SNDpUNCkobixlKSl9LHRleHQ6ZnVuY3Rpb24gejYodCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PXQ/STQ6KCJmdW5jdGlvbiI9PXR5cGVvZiB0P0g0Ono0KSh0KSk6dGhpcy5ub2RlKCkudGV4dENvbnRlbnR9LGh0bWw6ZnVuY3Rpb24gSDYodCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PXQ/RjQ6KCJmdW5jdGlvbiI9PXR5cGVvZiB0P0I0Okw0KSh0KSk6dGhpcy5ub2RlKCkuaW5uZXJIVE1MfSxyYWlzZTpmdW5jdGlvbiBGNigpe3JldHVybiB0aGlzLmVhY2goVjQpfSxsb3dlcjpmdW5jdGlvbiBMNigpe3JldHVybiB0aGlzLmVhY2goajQpfSxhcHBlbmQ6ZnVuY3Rpb24gQjYodCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpuNCh0KTtyZXR1cm4gdGhpcy5zZWxlY3QoKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQoZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSkpfSxpbnNlcnQ6ZnVuY3Rpb24gVjYodCxlKXt2YXIgbj0iZnVuY3Rpb24iPT10eXBlb2YgdD90Om40KHQpLG89bnVsbD09ZT9VNDoiZnVuY3Rpb24iPT10eXBlb2YgZT9lOmk0KGUpO3JldHVybiB0aGlzLnNlbGVjdCgoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUobi5hcHBseSh0aGlzLGFyZ3VtZW50cyksby5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSkpfSxyZW1vdmU6ZnVuY3Rpb24gajYoKXtyZXR1cm4gdGhpcy5lYWNoKFc0KX0sY2xvbmU6ZnVuY3Rpb24gVTYodCl7cmV0dXJuIHRoaXMuc2VsZWN0KHQ/WTQ6RzQpfSxkYXR1bTpmdW5jdGlvbiBXNih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsdCk6dGhpcy5ub2RlKCkuX19kYXRhX199LG9uOmZ1bmN0aW9uIEc2KHQsZSxuKXt2YXIgbyxpLGE9SjQodCsiIikscj1hLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2ZvcihzPWU/JDQ6UTQsbnVsbD09biYmKG49ITEpLG89MDtvPHI7KytvKXRoaXMuZWFjaChzKGFbb10sZSxuKSk7cmV0dXJuIHRoaXN9dmFyIHM9dGhpcy5ub2RlKCkuX19vbjtpZihzKWZvcih2YXIgbCxjPTAsZD1zLmxlbmd0aDtjPGQ7KytjKWZvcihvPTAsbD1zW2NdO288cjsrK28paWYoKGk9YVtvXSkudHlwZT09PWwudHlwZSYmaS5uYW1lPT09bC5uYW1lKXJldHVybiBsLnZhbHVlfSxkaXNwYXRjaDpmdW5jdGlvbiBZNih0LGUpe3JldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBlP242OmU2KSh0LGUpKX19O3ZhciBxNj0uNyxaNj0xL3E2LFg2PSJcXHMqKFsrLV0/XFxkKylcXHMqIixLNj0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixKNj0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIsUTY9L14jKFswLTlhLWZdezMsOH0pJC8sJDY9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW1g2LFg2LFg2XSsiXFwpJCIpLHQ3PW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tKNixKNixKNl0rIlxcKSQiKSxlNz1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW1g2LFg2LFg2LEs2XSsiXFwpJCIpLG43PW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbSjYsSjYsSjYsSzZdKyJcXCkkIiksbzc9bmV3IFJlZ0V4cCgiXmhzbFxcKCIrW0s2LEo2LEo2XSsiXFwpJCIpLGk3PW5ldyBSZWdFeHAoIl5oc2xhXFwoIitbSzYsSjYsSjYsSzZdKyJcXCkkIiksYTc9e2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH07ZnVuY3Rpb24gcjcoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXgoKX1mdW5jdGlvbiBzNygpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdFJnYigpfWZ1bmN0aW9uIGw3KHQpe3ZhciBlLG47cmV0dXJuIHQ9KHQrIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLChlPVE2LmV4ZWModCkpPyhuPWVbMV0ubGVuZ3RoLGU9cGFyc2VJbnQoZVsxXSwxNiksNj09PW4/YzcoZSk6Mz09PW4/bmV3IHU3KGU+PjgmMTV8ZT4+NCYyNDAsZT4+NCYxNXwyNDAmZSwoMTUmZSk8PDR8MTUmZSwxKTo4PT09bj9kNyhlPj4yNCYyNTUsZT4+MTYmMjU1LGU+PjgmMjU1LCgyNTUmZSkvMjU1KTo0PT09bj9kNyhlPj4xMiYxNXxlPj44JjI0MCxlPj44JjE1fGU+PjQmMjQwLGU+PjQmMTV8MjQwJmUsKCgxNSZlKTw8NHwxNSZlKS8yNTUpOm51bGwpOihlPSQ2LmV4ZWModCkpP25ldyB1NyhlWzFdLGVbMl0sZVszXSwxKTooZT10Ny5leGVjKHQpKT9uZXcgdTcoMjU1KmVbMV0vMTAwLDI1NSplWzJdLzEwMCwyNTUqZVszXS8xMDAsMSk6KGU9ZTcuZXhlYyh0KSk/ZDcoZVsxXSxlWzJdLGVbM10sZVs0XSk6KGU9bjcuZXhlYyh0KSk/ZDcoMjU1KmVbMV0vMTAwLDI1NSplWzJdLzEwMCwyNTUqZVszXS8xMDAsZVs0XSk6KGU9bzcuZXhlYyh0KSk/YjcoZVsxXSxlWzJdLzEwMCxlWzNdLzEwMCwxKTooZT1pNy5leGVjKHQpKT9iNyhlWzFdLGVbMl0vMTAwLGVbM10vMTAwLGVbNF0pOmE3Lmhhc093blByb3BlcnR5KHQpP2M3KGE3W3RdKToidHJhbnNwYXJlbnQiPT09dD9uZXcgdTcoTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiBjNyh0KXtyZXR1cm4gbmV3IHU3KHQ+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdCwxKX1mdW5jdGlvbiBkNyh0LGUsbixvKXtyZXR1cm4gbzw9MCYmKHQ9ZT1uPU5hTiksbmV3IHU3KHQsZSxuLG8pfWZ1bmN0aW9uIHA3KHQpe3JldHVybiB0IGluc3RhbmNlb2YgZzZ8fCh0PWw3KHQpKSx0P25ldyB1NygodD10LnJnYigpKS5yLHQuZyx0LmIsdC5vcGFjaXR5KTpuZXcgdTd9ZnVuY3Rpb24gbTcodCxlLG4sbyl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3A3KHQpOm5ldyB1Nyh0LGUsbixudWxsPT1vPzE6byl9ZnVuY3Rpb24gdTcodCxlLG4sbyl7dGhpcy5yPSt0LHRoaXMuZz0rZSx0aGlzLmI9K24sdGhpcy5vcGFjaXR5PStvfWZ1bmN0aW9uIGY3KCl7cmV0dXJuIiMiK2g3KHRoaXMucikraDcodGhpcy5nKStoNyh0aGlzLmIpfWZ1bmN0aW9uIGc3KCl7dmFyIHQ9dGhpcy5vcGFjaXR5O3JldHVybigxPT09KHQ9aXNOYU4odCk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsdCkpKT8icmdiKCI6InJnYmEoIikrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLnIpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuZyl8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5iKXx8MCkpKygxPT09dD8iKSI6IiwgIit0KyIpIil9ZnVuY3Rpb24gaDcodCl7cmV0dXJuKCh0PU1hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodCl8fDApKSk8MTY/IjAiOiIiKSt0LnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBiNyh0LGUsbixvKXtyZXR1cm4gbzw9MD90PWU9bj1OYU46bjw9MHx8bj49MT90PWU9TmFOOmU8PTAmJih0PU5hTiksbmV3IEM3KHQsZSxuLG8pfWZ1bmN0aW9uIHk3KHQpe2lmKHQgaW5zdGFuY2VvZiBDNylyZXR1cm4gbmV3IEM3KHQuaCx0LnMsdC5sLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIGc2fHwodD1sNyh0KSksIXQpcmV0dXJuIG5ldyBDNztpZih0IGluc3RhbmNlb2YgQzcpcmV0dXJuIHQ7dmFyIGU9KHQ9dC5yZ2IoKSkuci8yNTUsbj10LmcvMjU1LG89dC5iLzI1NSxpPU1hdGgubWluKGUsbixvKSxhPU1hdGgubWF4KGUsbixvKSxyPU5hTixzPWEtaSxsPShhK2kpLzI7cmV0dXJuIHM/KHI9ZT09PWE/KG4tbykvcys2KihuPG8pOm49PT1hPyhvLWUpL3MrMjooZS1uKS9zKzQscy89bDwuNT9hK2k6Mi1hLWkscio9NjApOnM9bD4wJiZsPDE/MDpyLG5ldyBDNyhyLHMsbCx0Lm9wYWNpdHkpfWZ1bmN0aW9uIF83KHQsZSxuLG8pe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD95Nyh0KTpuZXcgQzcodCxlLG4sbnVsbD09bz8xOm8pfWZ1bmN0aW9uIEM3KHQsZSxuLG8pe3RoaXMuaD0rdCx0aGlzLnM9K2UsdGhpcy5sPStuLHRoaXMub3BhY2l0eT0rb31mdW5jdGlvbiBNNyh0LGUsbil7cmV0dXJuIDI1NSoodDw2MD9lKyhuLWUpKnQvNjA6dDwxODA/bjp0PDI0MD9lKyhuLWUpKigyNDAtdCkvNjA6ZSl9dTYoZzYsbDcse2NvcHk6ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IHRoaXMuY29uc3RydWN0b3IsdGhpcyx0KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpfSxoZXg6cjcsZm9ybWF0SGV4OnI3LGZvcm1hdEhzbDpmdW5jdGlvbiB2Nygpe3JldHVybiB5Nyh0aGlzKS5mb3JtYXRIc2woKX0sZm9ybWF0UmdiOnM3LHRvU3RyaW5nOnM3fSksdTYodTcsbTcsZjYoZzYse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/WjY6TWF0aC5wb3coWjYsdCksbmV3IHU3KHRoaXMucip0LHRoaXMuZyp0LHRoaXMuYip0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P3E2Ok1hdGgucG93KHE2LHQpLG5ldyB1Nyh0aGlzLnIqdCx0aGlzLmcqdCx0aGlzLmIqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4tLjU8PXRoaXMuciYmdGhpcy5yPDI1NS41JiYtLjU8PXRoaXMuZyYmdGhpcy5nPDI1NS41JiYtLjU8PXRoaXMuYiYmdGhpcy5iPDI1NS41JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4OmY3LGZvcm1hdEhleDpmNyxmb3JtYXRSZ2I6ZzcsdG9TdHJpbmc6Zzd9KSksdTYoQzcsXzcsZjYoZzYse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/WjY6TWF0aC5wb3coWjYsdCksbmV3IEM3KHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/cTY6TWF0aC5wb3cocTYsdCksbmV3IEM3KHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5oJTM2MCszNjAqKHRoaXMuaDwwKSxlPWlzTmFOKHQpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLG49dGhpcy5sLG89bisobjwuNT9uOjEtbikqZSxpPTIqbi1vO3JldHVybiBuZXcgdTcoTTcodD49MjQwP3QtMjQwOnQrMTIwLGksbyksTTcodCxpLG8pLE03KHQ8MTIwP3QrMjQwOnQtMTIwLGksbyksdGhpcy5vcGFjaXR5KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGZvcm1hdEhzbDpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3BhY2l0eTtyZXR1cm4oMT09PSh0PWlzTmFOKHQpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLHQpKSk/ImhzbCgiOiJoc2xhKCIpKyh0aGlzLmh8fDApKyIsICIrMTAwKih0aGlzLnN8fDApKyIlLCAiKzEwMCoodGhpcy5sfHwwKSsiJSIrKDE9PT10PyIpIjoiLCAiK3QrIikiKX19KSk7dmFyIHg3PU1hdGguUEkvMTgwLE83PTE4MC9NYXRoLlBJLFA3PS45NjQyMix3Nz0uODI1MjEsazc9NC8yOSxTNz02LzI5LEQ3PTMqUzcqUzc7ZnVuY3Rpb24gRTcodCl7aWYodCBpbnN0YW5jZW9mIEE3KXJldHVybiBuZXcgQTcodC5sLHQuYSx0LmIsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgRjcpcmV0dXJuIEw3KHQpO3QgaW5zdGFuY2VvZiB1N3x8KHQ9cDcodCkpO3ZhciBlLG4sbz1JNyh0LnIpLGk9STcodC5nKSxhPUk3KHQuYikscj1SNygoLjIyMjUwNDUqbysuNzE2ODc4NippKy4wNjA2MTY5KmEpLzEpO3JldHVybiBvPT09aSYmaT09PWE/ZT1uPXI6KGU9UjcoKC40MzYwNzQ3Km8rLjM4NTA2NDkqaSsuMTQzMDgwNCphKS9QNyksbj1SNygoLjAxMzkzMjIqbysuMDk3MTA0NSppKy43MTQxNzMzKmEpL3c3KSksbmV3IEE3KDExNipyLTE2LDUwMCooZS1yKSwyMDAqKHItbiksdC5vcGFjaXR5KX1mdW5jdGlvbiBBNyh0LGUsbixvKXt0aGlzLmw9K3QsdGhpcy5hPStlLHRoaXMuYj0rbix0aGlzLm9wYWNpdHk9K299ZnVuY3Rpb24gUjcodCl7cmV0dXJuIHQ+LjAwODg1NjQ1MTY3OTAzNTYzMT9NYXRoLnBvdyh0LDEvMyk6dC9ENytrN31mdW5jdGlvbiBUNyh0KXtyZXR1cm4gdD5TNz90KnQqdDpENyoodC1rNyl9ZnVuY3Rpb24gTjcodCl7cmV0dXJuIDI1NSoodDw9LjAwMzEzMDg/MTIuOTIqdDoxLjA1NSpNYXRoLnBvdyh0LDEvMi40KS0uMDU1KX1mdW5jdGlvbiBJNyh0KXtyZXR1cm4odC89MjU1KTw9LjA0MDQ1P3QvMTIuOTI6TWF0aC5wb3coKHQrLjA1NSkvMS4wNTUsMi40KX1mdW5jdGlvbiB6Nyh0KXtpZih0IGluc3RhbmNlb2YgRjcpcmV0dXJuIG5ldyBGNyh0LmgsdC5jLHQubCx0Lm9wYWNpdHkpO2lmKHQgaW5zdGFuY2VvZiBBN3x8KHQ9RTcodCkpLDA9PT10LmEmJjA9PT10LmIpcmV0dXJuIG5ldyBGNyhOYU4sMDx0LmwmJnQubDwxMDA/MDpOYU4sdC5sLHQub3BhY2l0eSk7dmFyIGU9TWF0aC5hdGFuMih0LmIsdC5hKSpPNztyZXR1cm4gbmV3IEY3KGU8MD9lKzM2MDplLE1hdGguc3FydCh0LmEqdC5hK3QuYip0LmIpLHQubCx0Lm9wYWNpdHkpfWZ1bmN0aW9uIEg3KHQsZSxuLG8pe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD96Nyh0KTpuZXcgRjcodCxlLG4sbnVsbD09bz8xOm8pfWZ1bmN0aW9uIEY3KHQsZSxuLG8pe3RoaXMuaD0rdCx0aGlzLmM9K2UsdGhpcy5sPStuLHRoaXMub3BhY2l0eT0rb31mdW5jdGlvbiBMNyh0KXtpZihpc05hTih0LmgpKXJldHVybiBuZXcgQTcodC5sLDAsMCx0Lm9wYWNpdHkpO3ZhciBlPXQuaCp4NztyZXR1cm4gbmV3IEE3KHQubCxNYXRoLmNvcyhlKSp0LmMsTWF0aC5zaW4oZSkqdC5jLHQub3BhY2l0eSl9ZnVuY3Rpb24gQjcodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIFY3KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0K24qZX19ZnVuY3Rpb24gajcodCxlKXt2YXIgbj1lLXQ7cmV0dXJuIG4/VjcodCxuPjE4MHx8bjwtMTgwP24tMzYwKk1hdGgucm91bmQobi8zNjApOm4pOkI3KGlzTmFOKHQpP2U6dCl9ZnVuY3Rpb24gVTcodCxlKXt2YXIgbj1lLXQ7cmV0dXJuIG4/VjcodCxuKTpCNyhpc05hTih0KT9lOnQpfXU2KEE3LChmdW5jdGlvbiBXNyh0LGUsbixvKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/RTcodCk6bmV3IEE3KHQsZSxuLG51bGw9PW8/MTpvKX0pLGY2KGc2LHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IEE3KHRoaXMubCsxOCoobnVsbD09dD8xOnQpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgQTcodGhpcy5sLTE4KihudWxsPT10PzE6dCksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD0odGhpcy5sKzE2KS8xMTYsZT1pc05hTih0aGlzLmEpP3Q6dCt0aGlzLmEvNTAwLG49aXNOYU4odGhpcy5iKT90OnQtdGhpcy5iLzIwMDtyZXR1cm4gbmV3IHU3KE43KDMuMTMzODU2MSooZT1QNypUNyhlKSktMS42MTY4NjY3Kih0PTEqVDcodCkpLS40OTA2MTQ2KihuPXc3KlQ3KG4pKSksTjcoLS45Nzg3Njg0KmUrMS45MTYxNDE1KnQrLjAzMzQ1NCpuKSxONyguMDcxOTQ1MyplLS4yMjg5OTE0KnQrMS40MDUyNDI3Km4pLHRoaXMub3BhY2l0eSl9fSkpLHU2KEY3LEg3LGY2KGc2LHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IEY3KHRoaXMuaCx0aGlzLmMsdGhpcy5sKzE4KihudWxsPT10PzE6dCksdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgRjcodGhpcy5oLHRoaXMuYyx0aGlzLmwtMTgqKG51bGw9PXQ/MTp0KSx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gTDcodGhpcykucmdiKCl9fSkpO3ZhciBHNz0oZnVuY3Rpb24gdChlKXt2YXIgbj0oZnVuY3Rpb24gbyh0KXtyZXR1cm4gMT09KHQ9K3QpP1U3OmZ1bmN0aW9uKGUsbil7cmV0dXJuIG4tZT8oZnVuY3Rpb24gbyh0LGUsbil7cmV0dXJuIHQ9TWF0aC5wb3codCxuKSxlPU1hdGgucG93KGUsbiktdCxuPTEvbixmdW5jdGlvbihvKXtyZXR1cm4gTWF0aC5wb3codCtvKmUsbil9fSkoZSxuLHQpOkI3KGlzTmFOKGUpP246ZSl9fSkoZSk7ZnVuY3Rpb24gaSh0LGUpe3ZhciBvPW4oKHQ9bTcodCkpLnIsKGU9bTcoZSkpLnIpLGk9bih0LmcsZS5nKSxhPW4odC5iLGUuYikscj1VNyh0Lm9wYWNpdHksZS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQucj1vKGUpLHQuZz1pKGUpLHQuYj1hKGUpLHQub3BhY2l0eT1yKGUpLHQrIiJ9fXJldHVybiBpLmdhbW1hPXQsaX0pKDEpLFk3PShmdW5jdGlvbiBaNyh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG4sbyxpPWUubGVuZ3RoLGE9bmV3IEFycmF5KGkpLHI9bmV3IEFycmF5KGkpLHM9bmV3IEFycmF5KGkpO2ZvcihuPTA7bjxpOysrbilvPW03KGVbbl0pLGFbbl09by5yfHwwLHJbbl09by5nfHwwLHNbbl09by5ifHwwO3JldHVybiBhPXQoYSkscj10KHIpLHM9dChzKSxvLm9wYWNpdHk9MSxmdW5jdGlvbih0KXtyZXR1cm4gby5yPWEodCksby5nPXIodCksby5iPXModCksbysiIn19fSkoKGZ1bmN0aW9uIHE3KHQpe3ZhciBlPXQubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBvPW48PTA/bj0wOm4+PTE/KG49MSxlLTEpOk1hdGguZmxvb3IobiplKSxpPXRbb10sYT10W28rMV07cmV0dXJuKGZ1bmN0aW9uIHIodCxlLG4sbyxpKXt2YXIgYT10KnQscj1hKnQ7cmV0dXJuKCgxLTMqdCszKmEtcikqZSsoNC02KmErMypyKSpuKygxKzMqdCszKmEtMypyKSpvK3IqaSkvNn0pKChuLW8vZSkqZSxvPjA/dFtvLTFdOjIqaS1hLGksYSxvPGUtMT90W28rMl06MiphLWkpfX0pKTtmdW5jdGlvbiBYNyh0LGUpe2V8fChlPVtdKTt2YXIgbixvPXQ/TWF0aC5taW4oZS5sZW5ndGgsdC5sZW5ndGgpOjAsaT1lLnNsaWNlKCk7cmV0dXJuIGZ1bmN0aW9uKGEpe2ZvcihuPTA7bjxvOysrbilpW25dPXRbbl0qKDEtYSkrZVtuXSphO3JldHVybiBpfX1mdW5jdGlvbiBLNyh0LGUpe3ZhciBuLG89ZT9lLmxlbmd0aDowLGk9dD9NYXRoLm1pbihvLHQubGVuZ3RoKTowLGE9bmV3IEFycmF5KGkpLHI9bmV3IEFycmF5KG8pO2ZvcihuPTA7bjxpOysrbilhW25dPW84KHRbbl0sZVtuXSk7Zm9yKDtuPG87KytuKXJbbl09ZVtuXTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKG49MDtuPGk7KytuKXJbbl09YVtuXSh0KTtyZXR1cm4gcn19ZnVuY3Rpb24gSjcodCxlKXt2YXIgbj1uZXcgRGF0ZTtyZXR1cm4gdD0rdCxlPStlLGZ1bmN0aW9uKG8pe3JldHVybiBuLnNldFRpbWUodCooMS1vKStlKm8pLG59fWZ1bmN0aW9uIFE3KHQsZSl7cmV0dXJuIHQ9K3QsZT0rZSxmdW5jdGlvbihuKXtyZXR1cm4gdCooMS1uKStlKm59fWZ1bmN0aW9uICQ3KHQsZSl7dmFyIG4sbz17fSxpPXt9O2ZvcihuIGluIG51bGwhPT10JiYib2JqZWN0Ij09dHlwZW9mIHR8fCh0PXt9KSxudWxsIT09ZSYmIm9iamVjdCI9PXR5cGVvZiBlfHwoZT17fSksZSluIGluIHQ/b1tuXT1vOCh0W25dLGVbbl0pOmlbbl09ZVtuXTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKG4gaW4gbylpW25dPW9bbl0odCk7cmV0dXJuIGl9fXZhciB0OD0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2csZTg9bmV3IFJlZ0V4cCh0OC5zb3VyY2UsImciKTtmdW5jdGlvbiBuOCh0LGUpe3ZhciBuLG8saSxhPXQ4Lmxhc3RJbmRleD1lOC5sYXN0SW5kZXg9MCxyPS0xLHM9W10sbD1bXTtmb3IodCs9IiIsZSs9IiI7KG49dDguZXhlYyh0KSkmJihvPWU4LmV4ZWMoZSkpOykoaT1vLmluZGV4KT5hJiYoaT1lLnNsaWNlKGEsaSksc1tyXT9zW3JdKz1pOnNbKytyXT1pKSwobj1uWzBdKT09PShvPW9bMF0pP3Nbcl0/c1tyXSs9bzpzWysrcl09bzooc1srK3JdPW51bGwsbC5wdXNoKHtpOnIseDpRNyhuLG8pfSkpLGE9ZTgubGFzdEluZGV4O3JldHVybiBhPGUubGVuZ3RoJiYoaT1lLnNsaWNlKGEpLHNbcl0/c1tyXSs9aTpzWysrcl09aSkscy5sZW5ndGg8Mj9sWzBdPyhmdW5jdGlvbiBjKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdChlKSsiIn19KShsWzBdLngpOihmdW5jdGlvbiBkKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0pKGUpOihlPWwubGVuZ3RoLGZ1bmN0aW9uKHQpe2Zvcih2YXIgbixvPTA7bzxlOysrbylzWyhuPWxbb10pLmldPW4ueCh0KTtyZXR1cm4gcy5qb2luKCIiKX0pfWZ1bmN0aW9uIG84KHQsZSl7dmFyIG4sbz10eXBlb2YgZTtyZXR1cm4gbnVsbD09ZXx8ImJvb2xlYW4iPT09bz9CNyhlKTooIm51bWJlciI9PT1vP1E3OiJzdHJpbmciPT09bz8obj1sNyhlKSk/KGU9bixHNyk6bjg6ZSBpbnN0YW5jZW9mIGw3P0c3OmUgaW5zdGFuY2VvZiBEYXRlP0o3OihmdW5jdGlvbiBpKHQpe3JldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcodCkmJiEodCBpbnN0YW5jZW9mIERhdGFWaWV3KX0pKGUpP1g3OkFycmF5LmlzQXJyYXkoZSk/Szc6ImZ1bmN0aW9uIiE9dHlwZW9mIGUudmFsdWVPZiYmImZ1bmN0aW9uIiE9dHlwZW9mIGUudG9TdHJpbmd8fGlzTmFOKGUpPyQ3OlE3KSh0LGUpfWZ1bmN0aW9uIGk4KHQsZSl7cmV0dXJuIHQ9K3QsZT0rZSxmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5yb3VuZCh0KigxLW4pK2Uqbil9fXZhciBhOCxyOCxzOCxsOCxjOD0xODAvTWF0aC5QSSxkOD17dHJhbnNsYXRlWDowLHRyYW5zbGF0ZVk6MCxyb3RhdGU6MCxza2V3WDowLHNjYWxlWDoxLHNjYWxlWToxfTtmdW5jdGlvbiBwOCh0LGUsbixvLGksYSl7dmFyIHIscyxsO3JldHVybihyPU1hdGguc3FydCh0KnQrZSplKSkmJih0Lz1yLGUvPXIpLChsPXQqbitlKm8pJiYobi09dCpsLG8tPWUqbCksKHM9TWF0aC5zcXJ0KG4qbitvKm8pKSYmKG4vPXMsby89cyxsLz1zKSx0Km88ZSpuJiYodD0tdCxlPS1lLGw9LWwscj0tcikse3RyYW5zbGF0ZVg6aSx0cmFuc2xhdGVZOmEscm90YXRlOk1hdGguYXRhbjIoZSx0KSpjOCxza2V3WDpNYXRoLmF0YW4obCkqYzgsc2NhbGVYOnIsc2NhbGVZOnN9fWZ1bmN0aW9uIG04KHQsZSxuLG8pe2Z1bmN0aW9uIGkodCl7cmV0dXJuIHQubGVuZ3RoP3QucG9wKCkrIiAiOiIifXJldHVybiBmdW5jdGlvbihhLHIpe3ZhciBzPVtdLGw9W107cmV0dXJuIGE9dChhKSxyPXQociksKGZ1bmN0aW9uIGModCxvLGksYSxyLHMpe2lmKHQhPT1pfHxvIT09YSl7dmFyIGw9ci5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLGUsbnVsbCxuKTtzLnB1c2goe2k6bC00LHg6UTcodCxpKX0se2k6bC0yLHg6UTcobyxhKX0pfWVsc2UoaXx8YSkmJnIucHVzaCgidHJhbnNsYXRlKCIraStlK2Erbil9KShhLnRyYW5zbGF0ZVgsYS50cmFuc2xhdGVZLHIudHJhbnNsYXRlWCxyLnRyYW5zbGF0ZVkscyxsKSwoZnVuY3Rpb24gZCh0LGUsbixhKXt0IT09ZT8odC1lPjE4MD9lKz0zNjA6ZS10PjE4MCYmKHQrPTM2MCksYS5wdXNoKHtpOm4ucHVzaChpKG4pKyJyb3RhdGUoIixudWxsLG8pLTIseDpRNyh0LGUpfSkpOmUmJm4ucHVzaChpKG4pKyJyb3RhdGUoIitlK28pfSkoYS5yb3RhdGUsci5yb3RhdGUscyxsKSwoZnVuY3Rpb24gcCh0LGUsbixhKXt0IT09ZT9hLnB1c2goe2k6bi5wdXNoKGkobikrInNrZXdYKCIsbnVsbCxvKS0yLHg6UTcodCxlKX0pOmUmJm4ucHVzaChpKG4pKyJza2V3WCgiK2Urbyl9KShhLnNrZXdYLHIuc2tld1gscyxsKSwoZnVuY3Rpb24gbSh0LGUsbixvLGEscil7aWYodCE9PW58fGUhPT1vKXt2YXIgcz1hLnB1c2goaShhKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7ci5wdXNoKHtpOnMtNCx4OlE3KHQsbil9LHtpOnMtMix4OlE3KGUsbyl9KX1lbHNlIDE9PT1uJiYxPT09b3x8YS5wdXNoKGkoYSkrInNjYWxlKCIrbisiLCIrbysiKSIpfSkoYS5zY2FsZVgsYS5zY2FsZVksci5zY2FsZVgsci5zY2FsZVkscyxsKSxhPXI9bnVsbCxmdW5jdGlvbih0KXtmb3IodmFyIGUsbj0tMSxvPWwubGVuZ3RoOysrbjxvOylzWyhlPWxbbl0pLmldPWUueCh0KTtyZXR1cm4gcy5qb2luKCIiKX19fXZhciB1OCxmOCxnOD1tOCgoZnVuY3Rpb24gaDgodCl7cmV0dXJuIm5vbmUiPT09dD9kODooYTh8fChhOD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSxyOD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsczg9ZG9jdW1lbnQuZGVmYXVsdFZpZXcpLGE4LnN0eWxlLnRyYW5zZm9ybT10LHQ9czguZ2V0Q29tcHV0ZWRTdHlsZShyOC5hcHBlbmRDaGlsZChhOCksbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgidHJhbnNmb3JtIikscjgucmVtb3ZlQ2hpbGQoYTgpLHA4KCsodD10LnNsaWNlKDcsLTEpLnNwbGl0KCIsIikpWzBdLCt0WzFdLCt0WzJdLCt0WzNdLCt0WzRdLCt0WzVdKSl9KSwicHgsICIsInB4KSIsImRlZykiKSxiOD1tOCgoZnVuY3Rpb24geTgodCl7cmV0dXJuIG51bGw9PXQ/ZDg6KGw4fHwobDg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKSksbDguc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLHQpLCh0PWw4LnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkpP3A4KCh0PXQubWF0cml4KS5hLHQuYix0LmMsdC5kLHQuZSx0LmYpOmQ4KX0pLCIsICIsIikiLCIpIiksXzg9KGZ1bmN0aW9uIEM4KHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3ZhciBvPXQoKGU9XzcoZSkpLmgsKG49XzcobikpLmgpLGk9VTcoZS5zLG4ucyksYT1VNyhlLmwsbi5sKSxyPVU3KGUub3BhY2l0eSxuLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZS5oPW8odCksZS5zPWkodCksZS5sPWEodCksZS5vcGFjaXR5PXIodCksZSsiIn19fSkoajcpLE04PShmdW5jdGlvbiB2OCh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXt2YXIgbz10KChlPUg3KGUpKS5oLChuPUg3KG4pKS5oKSxpPVU3KGUuYyxuLmMpLGE9VTcoZS5sLG4ubCkscj1VNyhlLm9wYWNpdHksbi5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUuaD1vKHQpLGUuYz1pKHQpLGUubD1hKHQpLGUub3BhY2l0eT1yKHQpLGUrIiJ9fX0pKGo3KSx4OD0wLE84PTAsUDg9MCx3OD0wLGs4PTAsUzg9MCxEOD0ib2JqZWN0Ij09dHlwZW9mIHBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxFOD0ib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbih0KXtzZXRUaW1lb3V0KHQsMTcpfTtmdW5jdGlvbiBBOCgpe3JldHVybiBrOHx8KEU4KFI4KSxrOD1EOC5ub3coKStTOCl9ZnVuY3Rpb24gUjgoKXtrOD0wfWZ1bmN0aW9uIFQ4KCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiBOOCh0LGUsbil7dmFyIG89bmV3IFQ4O3JldHVybiBvLnJlc3RhcnQodCxlLG4pLG99ZnVuY3Rpb24gSTgoKXtrOD0odzg9RDgubm93KCkpK1M4LHg4PU84PTA7dHJ5eyEoZnVuY3Rpb24gdCgpe0E4KCksKyt4ODtmb3IodmFyIHQsZT11ODtlOykodD1rOC1lLl90aW1lKT49MCYmZS5fY2FsbC5jYWxsKG51bGwsdCksZT1lLl9uZXh0Oy0teDh9KSgpfWZpbmFsbHl7eDg9MCwoZnVuY3Rpb24gZSgpe2Zvcih2YXIgdCxlLG49dTgsbz0xLzA7bjspbi5fY2FsbD8obz5uLl90aW1lJiYobz1uLl90aW1lKSx0PW4sbj1uLl9uZXh0KTooZT1uLl9uZXh0LG4uX25leHQ9bnVsbCxuPXQ/dC5fbmV4dD1lOnU4PWUpO2Y4PXQsSDgobyl9KSgpLGs4PTB9fWZ1bmN0aW9uIHo4KCl7dmFyIHQ9RDgubm93KCksZT10LXc4O2U+MWUzJiYoUzgtPWUsdzg9dCl9ZnVuY3Rpb24gSDgodCl7eDh8fChPOCYmKE84PWNsZWFyVGltZW91dChPOCkpLHQtazg+MjQ/KHQ8MS8wJiYoTzg9c2V0VGltZW91dChJOCx0LUQ4Lm5vdygpLVM4KSksUDgmJihQOD1jbGVhckludGVydmFsKFA4KSkpOihQOHx8KHc4PUQ4Lm5vdygpLFA4PXNldEludGVydmFsKHo4LDFlMykpLHg4PTEsRTgoSTgpKSl9ZnVuY3Rpb24gRjgodCxlLG4pe3ZhciBvPW5ldyBUODtyZXR1cm4gby5yZXN0YXJ0KChmdW5jdGlvbihuKXtvLnN0b3AoKSx0KG4rZSl9KSxlPW51bGw9PWU/MDorZSxuKSxvfVQ4LnByb3RvdHlwZT1OOC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlQ4LHJlc3RhcnQ6ZnVuY3Rpb24odCxlLG4pe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIik7bj0obnVsbD09bj9BOCgpOituKSsobnVsbD09ZT8wOitlKSx0aGlzLl9uZXh0fHxmOD09PXRoaXN8fChmOD9mOC5fbmV4dD10aGlzOnU4PXRoaXMsZjg9dGhpcyksdGhpcy5fY2FsbD10LHRoaXMuX3RpbWU9bixIOCgpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCxIOCgpKX19O3ZhciBMOD1ZNSgic3RhcnQiLCJlbmQiLCJjYW5jZWwiLCJpbnRlcnJ1cHQiKSxCOD1bXTtmdW5jdGlvbiBWOCh0LGUsbixvLGksYSl7dmFyIHI9dC5fX3RyYW5zaXRpb247aWYocil7aWYobiBpbiByKXJldHVybn1lbHNlIHQuX190cmFuc2l0aW9uPXt9OyEoZnVuY3Rpb24gcyh0LGUsbil7dmFyIG8saT10Ll9fdHJhbnNpdGlvbjtmdW5jdGlvbiBhKGwpe3ZhciBjLGQscCxtO2lmKDEhPT1uLnN0YXRlKXJldHVybiBzKCk7Zm9yKGMgaW4gaSlpZigobT1pW2NdKS5uYW1lPT09bi5uYW1lKXtpZigzPT09bS5zdGF0ZSlyZXR1cm4gRjgoYSk7ND09PW0uc3RhdGU/KG0uc3RhdGU9NixtLnRpbWVyLnN0b3AoKSxtLm9uLmNhbGwoImludGVycnVwdCIsdCx0Ll9fZGF0YV9fLG0uaW5kZXgsbS5ncm91cCksZGVsZXRlIGlbY10pOitjPGUmJihtLnN0YXRlPTYsbS50aW1lci5zdG9wKCksbS5vbi5jYWxsKCJjYW5jZWwiLHQsdC5fX2RhdGFfXyxtLmluZGV4LG0uZ3JvdXApLGRlbGV0ZSBpW2NdKX1pZihGOCgoZnVuY3Rpb24oKXszPT09bi5zdGF0ZSYmKG4uc3RhdGU9NCxuLnRpbWVyLnJlc3RhcnQocixuLmRlbGF5LG4udGltZSkscihsKSl9KSksbi5zdGF0ZT0yLG4ub24uY2FsbCgic3RhcnQiLHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApLDI9PT1uLnN0YXRlKXtmb3Iobi5zdGF0ZT0zLG89bmV3IEFycmF5KHA9bi50d2Vlbi5sZW5ndGgpLGM9MCxkPS0xO2M8cDsrK2MpKG09bi50d2VlbltjXS52YWx1ZS5jYWxsKHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApKSYmKG9bKytkXT1tKTtvLmxlbmd0aD1kKzF9fWZ1bmN0aW9uIHIoZSl7Zm9yKHZhciBpPWU8bi5kdXJhdGlvbj9uLmVhc2UuY2FsbChudWxsLGUvbi5kdXJhdGlvbik6KG4udGltZXIucmVzdGFydChzKSxuLnN0YXRlPTUsMSksYT0tMSxyPW8ubGVuZ3RoOysrYTxyOylvW2FdLmNhbGwodCxpKTs1PT09bi5zdGF0ZSYmKG4ub24uY2FsbCgiZW5kIix0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxzKCkpfWZ1bmN0aW9uIHMoKXtmb3IodmFyIG8gaW4gbi5zdGF0ZT02LG4udGltZXIuc3RvcCgpLGRlbGV0ZSBpW2VdLGkpcmV0dXJuO2RlbGV0ZSB0Ll9fdHJhbnNpdGlvbn1pW2VdPW4sbi50aW1lcj1OOCgoZnVuY3Rpb24gbCh0KXtuLnN0YXRlPTEsbi50aW1lci5yZXN0YXJ0KGEsbi5kZWxheSxuLnRpbWUpLG4uZGVsYXk8PXQmJmEodC1uLmRlbGF5KX0pLDAsbi50aW1lKX0pKHQsbix7bmFtZTplLGluZGV4Om8sZ3JvdXA6aSxvbjpMOCx0d2VlbjpCOCx0aW1lOmEudGltZSxkZWxheTphLmRlbGF5LGR1cmF0aW9uOmEuZHVyYXRpb24sZWFzZTphLmVhc2UsdGltZXI6bnVsbCxzdGF0ZTowfSl9ZnVuY3Rpb24gajgodCxlKXt2YXIgbj1XOCh0LGUpO2lmKG4uc3RhdGU+MCl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZCIpO3JldHVybiBufWZ1bmN0aW9uIFU4KHQsZSl7dmFyIG49VzgodCxlKTtpZihuLnN0YXRlPjMpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBydW5uaW5nIik7cmV0dXJuIG59ZnVuY3Rpb24gVzgodCxlKXt2YXIgbj10Ll9fdHJhbnNpdGlvbjtpZighbnx8IShuPW5bZV0pKXRocm93IG5ldyBFcnJvcigidHJhbnNpdGlvbiBub3QgZm91bmQiKTtyZXR1cm4gbn1mdW5jdGlvbiBHOCh0LGUpe3ZhciBuLG8saSxhPXQuX190cmFuc2l0aW9uLHI9ITA7aWYoYSl7Zm9yKGkgaW4gZT1udWxsPT1lP251bGw6ZSsiIixhKShuPWFbaV0pLm5hbWU9PT1lPyhvPW4uc3RhdGU+MiYmbi5zdGF0ZTw1LG4uc3RhdGU9NixuLnRpbWVyLnN0b3AoKSxuLm9uLmNhbGwobz8iaW50ZXJydXB0IjoiY2FuY2VsIix0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxkZWxldGUgYVtpXSk6cj0hMTtyJiZkZWxldGUgdC5fX3RyYW5zaXRpb259fWZ1bmN0aW9uIFk4KHQsZSl7dmFyIG4sbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaT1VOCh0aGlzLHQpLGE9aS50d2VlbjtpZihhIT09bilmb3IodmFyIHI9MCxzPShvPW49YSkubGVuZ3RoO3I8czsrK3IpaWYob1tyXS5uYW1lPT09ZSl7KG89by5zbGljZSgpKS5zcGxpY2UociwxKTticmVha31pLnR3ZWVuPW99fWZ1bmN0aW9uIHE4KHQsZSxuKXt2YXIgbyxpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1VOCh0aGlzLHQpLHI9YS50d2VlbjtpZihyIT09byl7aT0obz1yKS5zbGljZSgpO2Zvcih2YXIgcz17bmFtZTplLHZhbHVlOm59LGw9MCxjPWkubGVuZ3RoO2w8YzsrK2wpaWYoaVtsXS5uYW1lPT09ZSl7aVtsXT1zO2JyZWFrfWw9PT1jJiZpLnB1c2gocyl9YS50d2Vlbj1pfX1mdW5jdGlvbiBaOCh0LGUsbil7dmFyIG89dC5faWQ7cmV0dXJuIHQuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1VOCh0aGlzLG8pOyh0LnZhbHVlfHwodC52YWx1ZT17fSkpW2VdPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpfSkpLGZ1bmN0aW9uKHQpe3JldHVybiBXOCh0LG8pLnZhbHVlW2VdfX1mdW5jdGlvbiBYOCh0LGUpe3ZhciBuO3JldHVybigibnVtYmVyIj09dHlwZW9mIGU/UTc6ZSBpbnN0YW5jZW9mIGw3P0c3OihuPWw3KGUpKT8oZT1uLEc3KTpuOCkodCxlKX1mdW5jdGlvbiBLOCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX19ZnVuY3Rpb24gSjgodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpfX1mdW5jdGlvbiBROCh0LGUsbil7dmFyIG8saSxhPW4rIiI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5nZXRBdHRyaWJ1dGUodCk7cmV0dXJuIHI9PT1hP251bGw6cj09PW8/aTppPWUobz1yLG4pfX1mdW5jdGlvbiAkOCh0LGUsbil7dmFyIG8saSxhPW4rIiI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5nZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpO3JldHVybiByPT09YT9udWxsOnI9PT1vP2k6aT1lKG89cixuKX19ZnVuY3Rpb24gdDkodCxlLG4pe3ZhciBvLGksYTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcixzLGw9bih0aGlzKTtpZihudWxsIT1sKXJldHVybihyPXRoaXMuZ2V0QXR0cmlidXRlKHQpKT09PShzPWwrIiIpP251bGw6cj09PW8mJnM9PT1pP2E6KGk9cyxhPWUobz1yLGwpKTt0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX19ZnVuY3Rpb24gZTkodCxlLG4pe3ZhciBvLGksYTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcixzLGw9bih0aGlzKTtpZihudWxsIT1sKXJldHVybihyPXRoaXMuZ2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKSk9PT0ocz1sKyIiKT9udWxsOnI9PT1vJiZzPT09aT9hOihpPXMsYT1lKG89cixsKSk7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpfX1mdW5jdGlvbiBuOSh0LGUpe3JldHVybiBmdW5jdGlvbihuKXt0aGlzLnNldEF0dHJpYnV0ZSh0LGUuY2FsbCh0aGlzLG4pKX19ZnVuY3Rpb24gbzkodCxlKXtyZXR1cm4gZnVuY3Rpb24obil7dGhpcy5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwsZS5jYWxsKHRoaXMsbikpfX1mdW5jdGlvbiBpOSh0LGUpe3ZhciBuLG87ZnVuY3Rpb24gaSgpe3ZhciBpPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBpIT09byYmKG49KG89aSkmJm85KHQsaSkpLG59cmV0dXJuIGkuX3ZhbHVlPWUsaX1mdW5jdGlvbiBhOSh0LGUpe3ZhciBuLG87ZnVuY3Rpb24gaSgpe3ZhciBpPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBpIT09byYmKG49KG89aSkmJm45KHQsaSkpLG59cmV0dXJuIGkuX3ZhbHVlPWUsaX1mdW5jdGlvbiByOSh0LGUpe3JldHVybiBmdW5jdGlvbigpe2o4KHRoaXMsdCkuZGVsYXk9K2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBzOSh0LGUpe3JldHVybiBlPStlLGZ1bmN0aW9uKCl7ajgodGhpcyx0KS5kZWxheT1lfX1mdW5jdGlvbiBsOSh0LGUpe3JldHVybiBmdW5jdGlvbigpe1U4KHRoaXMsdCkuZHVyYXRpb249K2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBjOSh0LGUpe3JldHVybiBlPStlLGZ1bmN0aW9uKCl7VTgodGhpcyx0KS5kdXJhdGlvbj1lfX1mdW5jdGlvbiBkOSh0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXtVOCh0aGlzLHQpLmVhc2U9ZX19ZnVuY3Rpb24gcDkodCxlLG4pe3ZhciBvLGksYT0oZnVuY3Rpb24gcih0KXtyZXR1cm4odCsiIikudHJpbSgpLnNwbGl0KC9efFxzKy8pLmV2ZXJ5KChmdW5jdGlvbih0KXt2YXIgZT10LmluZGV4T2YoIi4iKTtyZXR1cm4gZT49MCYmKHQ9dC5zbGljZSgwLGUpKSwhdHx8InN0YXJ0Ij09PXR9KSl9KShlKT9qODpVODtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj1hKHRoaXMsdCkscz1yLm9uO3MhPT1vJiYoaT0obz1zKS5jb3B5KCkpLm9uKGUsbiksci5vbj1pfX12YXIgbTk9YTYucHJvdG90eXBlLmNvbnN0cnVjdG9yO2Z1bmN0aW9uIHU5KHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCl9fWZ1bmN0aW9uIGY5KHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24obyl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LGUuY2FsbCh0aGlzLG8pLG4pfX1mdW5jdGlvbiBnOSh0LGUsbil7dmFyIG8saTtmdW5jdGlvbiBhKCl7dmFyIGE9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGEhPT1pJiYobz0oaT1hKSYmZjkodCxhLG4pKSxvfXJldHVybiBhLl92YWx1ZT1lLGF9ZnVuY3Rpb24gaDkodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3RoaXMudGV4dENvbnRlbnQ9dC5jYWxsKHRoaXMsZSl9fWZ1bmN0aW9uIGI5KHQpe3ZhciBlLG47ZnVuY3Rpb24gbygpe3ZhciBvPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBvIT09biYmKGU9KG49bykmJmg5KG8pKSxlfXJldHVybiBvLl92YWx1ZT10LG99dmFyIHk5PTA7ZnVuY3Rpb24gXzkodCxlLG4sbyl7dGhpcy5fZ3JvdXBzPXQsdGhpcy5fcGFyZW50cz1lLHRoaXMuX25hbWU9bix0aGlzLl9pZD1vfWZ1bmN0aW9uIEM5KCl7cmV0dXJuKyt5OX12YXIgTTk9YTYucHJvdG90eXBlO185LnByb3RvdHlwZT17Y29uc3RydWN0b3I6Xzksc2VsZWN0OmZ1bmN0aW9uIHY5KHQpe3ZhciBlPXRoaXMuX25hbWUsbj10aGlzLl9pZDsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9aTQodCkpO2Zvcih2YXIgbz10aGlzLl9ncm91cHMsaT1vLmxlbmd0aCxhPW5ldyBBcnJheShpKSxyPTA7cjxpOysrcilmb3IodmFyIHMsbCxjPW9bcl0sZD1jLmxlbmd0aCxwPWFbcl09bmV3IEFycmF5KGQpLG09MDttPGQ7KyttKShzPWNbbV0pJiYobD10LmNhbGwocyxzLl9fZGF0YV9fLG0sYykpJiYoIl9fZGF0YV9fImluIHMmJihsLl9fZGF0YV9fPXMuX19kYXRhX18pLHBbbV09bCxWOChwW21dLGUsbixtLHAsVzgocyxuKSkpO3JldHVybiBuZXcgXzkoYSx0aGlzLl9wYXJlbnRzLGUsbil9LHNlbGVjdEFsbDpmdW5jdGlvbiB4OSh0KXt2YXIgZT10aGlzLl9uYW1lLG49dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PXI0KHQpKTtmb3IodmFyIG89dGhpcy5fZ3JvdXBzLGk9by5sZW5ndGgsYT1bXSxyPVtdLHM9MDtzPGk7KytzKWZvcih2YXIgbCxjPW9bc10sZD1jLmxlbmd0aCxwPTA7cDxkOysrcClpZihsPWNbcF0pe2Zvcih2YXIgbSx1PXQuY2FsbChsLGwuX19kYXRhX18scCxjKSxmPVc4KGwsbiksZz0wLGg9dS5sZW5ndGg7ZzxoOysrZykobT11W2ddKSYmVjgobSxlLG4sZyx1LGYpO2EucHVzaCh1KSxyLnB1c2gobCl9cmV0dXJuIG5ldyBfOShhLHIsZSxuKX0sZmlsdGVyOmZ1bmN0aW9uIE85KHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1zNCh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLG89bmV3IEFycmF5KG4pLGk9MDtpPG47KytpKWZvcih2YXIgYSxyPWVbaV0scz1yLmxlbmd0aCxsPW9baV09W10sYz0wO2M8czsrK2MpKGE9cltjXSkmJnQuY2FsbChhLGEuX19kYXRhX18sYyxyKSYmbC5wdXNoKGEpO3JldHVybiBuZXcgXzkobyx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfSxtZXJnZTpmdW5jdGlvbiBQOSh0KXtpZih0Ll9pZCE9PXRoaXMuX2lkKXRocm93IG5ldyBFcnJvcjtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49dC5fZ3JvdXBzLG89ZS5sZW5ndGgsaT1NYXRoLm1pbihvLG4ubGVuZ3RoKSxhPW5ldyBBcnJheShvKSxyPTA7cjxpOysrcilmb3IodmFyIHMsbD1lW3JdLGM9bltyXSxkPWwubGVuZ3RoLHA9YVtyXT1uZXcgQXJyYXkoZCksbT0wO208ZDsrK20pKHM9bFttXXx8Y1ttXSkmJihwW21dPXMpO2Zvcig7cjxvOysrcilhW3JdPWVbcl07cmV0dXJuIG5ldyBfOShhLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9LHNlbGVjdGlvbjpmdW5jdGlvbiB3OSgpe3JldHVybiBuZXcgbTkodGhpcy5fZ3JvdXBzLHRoaXMuX3BhcmVudHMpfSx0cmFuc2l0aW9uOmZ1bmN0aW9uIGs5KCl7Zm9yKHZhciB0PXRoaXMuX25hbWUsZT10aGlzLl9pZCxuPUM5KCksbz10aGlzLl9ncm91cHMsaT1vLmxlbmd0aCxhPTA7YTxpOysrYSlmb3IodmFyIHIscz1vW2FdLGw9cy5sZW5ndGgsYz0wO2M8bDsrK2MpaWYocj1zW2NdKXt2YXIgZD1XOChyLGUpO1Y4KHIsdCxuLGMscyx7dGltZTpkLnRpbWUrZC5kZWxheStkLmR1cmF0aW9uLGRlbGF5OjAsZHVyYXRpb246ZC5kdXJhdGlvbixlYXNlOmQuZWFzZX0pfXJldHVybiBuZXcgXzkobyx0aGlzLl9wYXJlbnRzLHQsbil9LGNhbGw6TTkuY2FsbCxub2RlczpNOS5ub2Rlcyxub2RlOk05Lm5vZGUsc2l6ZTpNOS5zaXplLGVtcHR5Ok05LmVtcHR5LGVhY2g6TTkuZWFjaCxvbjpmdW5jdGlvbiBTOSh0LGUpe3ZhciBuPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/VzgodGhpcy5ub2RlKCksbikub24ub24odCk6dGhpcy5lYWNoKHA5KG4sdCxlKSl9LGF0dHI6ZnVuY3Rpb24gRDkodCxlKXt2YXIgbj0kNSh0KSxvPSJ0cmFuc2Zvcm0iPT09bj9iODpYODtyZXR1cm4gdGhpcy5hdHRyVHdlZW4odCwiZnVuY3Rpb24iPT10eXBlb2YgZT8obi5sb2NhbD9lOTp0OSkobixvLFo4KHRoaXMsImF0dHIuIit0LGUpKTpudWxsPT1lPyhuLmxvY2FsP0o4Oks4KShuKToobi5sb2NhbD8kODpROCkobixvLGUpKX0sYXR0clR3ZWVuOmZ1bmN0aW9uIEU5KHQsZSl7dmFyIG49ImF0dHIuIit0O2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4obj10aGlzLnR3ZWVuKG4pKSYmbi5fdmFsdWU7aWYobnVsbD09ZSlyZXR1cm4gdGhpcy50d2VlbihuLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcjt2YXIgbz0kNSh0KTtyZXR1cm4gdGhpcy50d2VlbihuLChvLmxvY2FsP2k5OmE5KShvLGUpKX0sc3R5bGU6ZnVuY3Rpb24gQTkodCxlLG4pe3ZhciBvPSJ0cmFuc2Zvcm0iPT0odCs9IiIpP2c4Olg4O3JldHVybiBudWxsPT1lP3RoaXMuc3R5bGVUd2Vlbih0LChmdW5jdGlvbiBpKHQsZSl7dmFyIG4sbyxpO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPXg0KHRoaXMsdCkscj0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KSx4NCh0aGlzLHQpKTtyZXR1cm4gYT09PXI/bnVsbDphPT09biYmcj09PW8/aTppPWUobj1hLG89cil9fSkodCxvKSkub24oImVuZC5zdHlsZS4iK3QsdTkodCkpOiJmdW5jdGlvbiI9PXR5cGVvZiBlP3RoaXMuc3R5bGVUd2Vlbih0LChmdW5jdGlvbiByKHQsZSxuKXt2YXIgbyxpLGE7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9eDQodGhpcyx0KSxzPW4odGhpcyksbD1zKyIiO3JldHVybiBudWxsPT1zJiYodGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KSxsPXM9eDQodGhpcyx0KSkscj09PWw/bnVsbDpyPT09byYmbD09PWk/YTooaT1sLGE9ZShvPXIscykpfX0pKHQsbyxaOCh0aGlzLCJzdHlsZS4iK3QsZSkpKS5lYWNoKChmdW5jdGlvbiBhKHQsZSl7dmFyIG4sbyxpLGEscj0ic3R5bGUuIitlLHM9ImVuZC4iK3I7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGw9VTgodGhpcyx0KSxjPWwub24sZD1udWxsPT1sLnZhbHVlW3JdP2F8fChhPXU5KGUpKTp2b2lkIDA7Yz09PW4mJmk9PT1kfHwobz0obj1jKS5jb3B5KCkpLm9uKHMsaT1kKSxsLm9uPW99fSkodGhpcy5faWQsdCkpOnRoaXMuc3R5bGVUd2Vlbih0LChmdW5jdGlvbiBzKHQsZSxuKXt2YXIgbyxpLGE9bisiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj14NCh0aGlzLHQpO3JldHVybiByPT09YT9udWxsOnI9PT1vP2k6aT1lKG89cixuKX19KSh0LG8sZSksbikub24oImVuZC5zdHlsZS4iK3QsbnVsbCl9LHN0eWxlVHdlZW46ZnVuY3Rpb24gUjkodCxlLG4pe3ZhciBvPSJzdHlsZS4iKyh0Kz0iIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihvPXRoaXMudHdlZW4obykpJiZvLl92YWx1ZTtpZihudWxsPT1lKXJldHVybiB0aGlzLnR3ZWVuKG8sbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKG8sZzkodCxlLG51bGw9PW4/IiI6bikpfSx0ZXh0OmZ1bmN0aW9uIFQ5KHQpe3JldHVybiB0aGlzLnR3ZWVuKCJ0ZXh0IiwiZnVuY3Rpb24iPT10eXBlb2YgdD8oZnVuY3Rpb24gZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpO3RoaXMudGV4dENvbnRlbnQ9bnVsbD09ZT8iIjplfX0pKFo4KHRoaXMsInRleHQiLHQpKTooZnVuY3Rpb24gbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PXR9fSkobnVsbD09dD8iIjp0KyIiKSl9LHRleHRUd2VlbjpmdW5jdGlvbiBOOSh0KXt2YXIgZT0idGV4dCI7aWYoYXJndW1lbnRzLmxlbmd0aDwxKXJldHVybihlPXRoaXMudHdlZW4oZSkpJiZlLl92YWx1ZTtpZihudWxsPT10KXJldHVybiB0aGlzLnR3ZWVuKGUsbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKGUsYjkodCkpfSxyZW1vdmU6ZnVuY3Rpb24gSTkoKXtyZXR1cm4gdGhpcy5vbigiZW5kLnJlbW92ZSIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlO2Zvcih2YXIgbiBpbiB0aGlzLl9fdHJhbnNpdGlvbilpZigrbiE9PWUpcmV0dXJuO3QmJnQucmVtb3ZlQ2hpbGQodGhpcyl9fSkodGhpcy5faWQpKX0sdHdlZW46ZnVuY3Rpb24gejkodCxlKXt2YXIgbj10aGlzLl9pZDtpZih0Kz0iIixhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgbyxpPVc4KHRoaXMubm9kZSgpLG4pLnR3ZWVuLGE9MCxyPWkubGVuZ3RoO2E8cjsrK2EpaWYoKG89aVthXSkubmFtZT09PXQpcmV0dXJuIG8udmFsdWU7cmV0dXJuIG51bGx9cmV0dXJuIHRoaXMuZWFjaCgobnVsbD09ZT9ZODpxOCkobix0LGUpKX0sZGVsYXk6ZnVuY3Rpb24gSDkodCl7dmFyIGU9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgdD9yOTpzOSkoZSx0KSk6VzgodGhpcy5ub2RlKCksZSkuZGVsYXl9LGR1cmF0aW9uOmZ1bmN0aW9uIEY5KHQpe3ZhciBlPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIHQ/bDk6YzkpKGUsdCkpOlc4KHRoaXMubm9kZSgpLGUpLmR1cmF0aW9ufSxlYXNlOmZ1bmN0aW9uIEw5KHQpe3ZhciBlPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChkOShlLHQpKTpXOCh0aGlzLm5vZGUoKSxlKS5lYXNlfSxlbmQ6ZnVuY3Rpb24gQjkoKXt2YXIgdCxlLG49dGhpcyxvPW4uX2lkLGk9bi5zaXplKCk7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihhLHIpe3ZhciBzPXt2YWx1ZTpyfSxsPXt2YWx1ZTpmdW5jdGlvbigpezA9PS0taSYmYSgpfX07bi5lYWNoKChmdW5jdGlvbigpe3ZhciBuPVU4KHRoaXMsbyksaT1uLm9uO2khPT10JiYoKGU9KHQ9aSkuY29weSgpKS5fLmNhbmNlbC5wdXNoKHMpLGUuXy5pbnRlcnJ1cHQucHVzaChzKSxlLl8uZW5kLnB1c2gobCkpLG4ub249ZX0pKX0pKX19O3ZhciBWOT17dGltZTpudWxsLGRlbGF5OjAsZHVyYXRpb246MjUwLGVhc2U6ZnVuY3Rpb24gajkodCl7cmV0dXJuKCh0Kj0yKTw9MT90KnQqdDoodC09MikqdCp0KzIpLzJ9fTtmdW5jdGlvbiBVOSh0LGUpe2Zvcih2YXIgbjshKG49dC5fX3RyYW5zaXRpb24pfHwhKG49bltlXSk7KWlmKCEodD10LnBhcmVudE5vZGUpKXJldHVybiBWOS50aW1lPUE4KCksVjk7cmV0dXJuIG59ZnVuY3Rpb24gVzkodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIEc5KHQsZSxuKXt0aGlzLnRhcmdldD10LHRoaXMudHlwZT1lLHRoaXMuc2VsZWN0aW9uPW59ZnVuY3Rpb24gWTkoKXtaNC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBxOSgpe1o0LnByZXZlbnREZWZhdWx0KCksWjQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9YTYucHJvdG90eXBlLmludGVycnVwdD1mdW5jdGlvbiBaOSh0KXtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpe0c4KHRoaXMsdCl9KSl9LGE2LnByb3RvdHlwZS50cmFuc2l0aW9uPWZ1bmN0aW9uIFg5KHQpe3ZhciBlLG47dCBpbnN0YW5jZW9mIF85PyhlPXQuX2lkLHQ9dC5fbmFtZSk6KGU9QzkoKSwobj1WOSkudGltZT1BOCgpLHQ9bnVsbD09dD9udWxsOnQrIiIpO2Zvcih2YXIgbz10aGlzLl9ncm91cHMsaT1vLmxlbmd0aCxhPTA7YTxpOysrYSlmb3IodmFyIHIscz1vW2FdLGw9cy5sZW5ndGgsYz0wO2M8bDsrK2MpKHI9c1tjXSkmJlY4KHIsdCxlLGMscyxufHxVOShyLGUpKTtyZXR1cm4gbmV3IF85KG8sdGhpcy5fcGFyZW50cyx0LGUpfTt2YXIgSzk9e25hbWU6ImRyYWcifSxKOT17bmFtZToic3BhY2UifSxROT17bmFtZToiaGFuZGxlIn0sJDk9e25hbWU6ImNlbnRlciJ9O2Z1bmN0aW9uIHR0dCh0KXtyZXR1cm5bK3RbMF0sK3RbMV1dfWZ1bmN0aW9uIGV0dCh0KXtyZXR1cm5bdHR0KHRbMF0pLHR0dCh0WzFdKV19ZnVuY3Rpb24gbnR0KHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4oZnVuY3Rpb24gbih0LGUsbyl7YXJndW1lbnRzLmxlbmd0aDwzJiYobz1lLGU9czYoKS5jaGFuZ2VkVG91Y2hlcyk7Zm9yKHZhciBpLGE9MCxyPWU/ZS5sZW5ndGg6MDthPHI7KythKWlmKChpPWVbYV0pLmlkZW50aWZpZXI9PT1vKXJldHVybiBsNih0LGkpO3JldHVybiBudWxsfSkoZSxaNC50b3VjaGVzLHQpfX12YXIgb3R0PXtuYW1lOiJ4IixoYW5kbGVzOlsidyIsImUiXS5tYXAoZHR0KSxpbnB1dDpmdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT10P251bGw6W1srdFswXSxlWzBdWzFdXSxbK3RbMV0sZVsxXVsxXV1dfSxvdXRwdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQmJlt0WzBdWzBdLHRbMV1bMF1dfX0saXR0PXtuYW1lOiJ5IixoYW5kbGVzOlsibiIsInMiXS5tYXAoZHR0KSxpbnB1dDpmdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT10P251bGw6W1tlWzBdWzBdLCt0WzBdXSxbZVsxXVswXSwrdFsxXV1dfSxvdXRwdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQmJlt0WzBdWzFdLHRbMV1bMV1dfX0sYXR0PXtvdmVybGF5OiJjcm9zc2hhaXIiLHNlbGVjdGlvbjoibW92ZSIsbjoibnMtcmVzaXplIixlOiJldy1yZXNpemUiLHM6Im5zLXJlc2l6ZSIsdzoiZXctcmVzaXplIixudzoibndzZS1yZXNpemUiLG5lOiJuZXN3LXJlc2l6ZSIsc2U6Im53c2UtcmVzaXplIixzdzoibmVzdy1yZXNpemUifSxydHQ9e2U6InciLHc6ImUiLG53OiJuZSIsbmU6Im53IixzZToic3ciLHN3OiJzZSJ9LHN0dD17bjoicyIsczoibiIsbnc6InN3IixuZToic2UiLHNlOiJuZSIsc3c6Im53In0sbHR0PXtvdmVybGF5OjEsc2VsZWN0aW9uOjEsbjpudWxsLGU6MSxzOm51bGwsdzotMSxudzotMSxuZToxLHNlOjEsc3c6LTF9LGN0dD17b3ZlcmxheToxLHNlbGVjdGlvbjoxLG46LTEsZTpudWxsLHM6MSx3Om51bGwsbnc6LTEsbmU6LTEsc2U6MSxzdzoxfTtmdW5jdGlvbiBkdHQodCl7cmV0dXJue3R5cGU6dH19ZnVuY3Rpb24gcHR0KCl7cmV0dXJuIVo0LmN0cmxLZXkmJiFaNC5idXR0b259ZnVuY3Rpb24gbXR0KCl7dmFyIHQ9dGhpcy5vd25lclNWR0VsZW1lbnR8fHRoaXM7cmV0dXJuIHQuaGFzQXR0cmlidXRlKCJ2aWV3Qm94Iik/W1sodD10LnZpZXdCb3guYmFzZVZhbCkueCx0LnldLFt0LngrdC53aWR0aCx0LnkrdC5oZWlnaHRdXTpbWzAsMF0sW3Qud2lkdGguYmFzZVZhbC52YWx1ZSx0LmhlaWdodC5iYXNlVmFsLnZhbHVlXV19ZnVuY3Rpb24gdXR0KCl7cmV0dXJuIG5hdmlnYXRvci5tYXhUb3VjaFBvaW50c3x8Im9udG91Y2hzdGFydCJpbiB0aGlzfWZ1bmN0aW9uIGZ0dCh0KXtmb3IoOyF0Ll9fYnJ1c2g7KWlmKCEodD10LnBhcmVudE5vZGUpKXJldHVybjtyZXR1cm4gdC5fX2JydXNofWZ1bmN0aW9uIGd0dCh0KXtyZXR1cm4gdFswXVswXT09PXRbMV1bMF18fHRbMF1bMV09PT10WzFdWzFdfXZhciBodHQ9TWF0aC5QSSxidHQ9MipodHQseXR0PTFlLTYsX3R0PWJ0dC15dHQ7ZnVuY3Rpb24gQ3R0KCl7dGhpcy5feDA9dGhpcy5feTA9dGhpcy5feDE9dGhpcy5feTE9bnVsbCx0aGlzLl89IiJ9ZnVuY3Rpb24gTXR0KCl7cmV0dXJuIG5ldyBDdHR9Q3R0LnByb3RvdHlwZT1NdHQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpDdHQsbW92ZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPStlKX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7bnVsbCE9PXRoaXMuX3gxJiYodGhpcy5feDE9dGhpcy5feDAsdGhpcy5feTE9dGhpcy5feTAsdGhpcy5fKz0iWiIpfSxsaW5lVG86ZnVuY3Rpb24odCxlKXt0aGlzLl8rPSJMIisodGhpcy5feDE9K3QpKyIsIisodGhpcy5feTE9K2UpfSxxdWFkcmF0aWNDdXJ2ZVRvOmZ1bmN0aW9uKHQsZSxuLG8pe3RoaXMuXys9IlEiKyArdCsiLCIrICtlKyIsIisodGhpcy5feDE9K24pKyIsIisodGhpcy5feTE9K28pfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKHQsZSxuLG8saSxhKXt0aGlzLl8rPSJDIisgK3QrIiwiKyArZSsiLCIrICtuKyIsIisgK28rIiwiKyh0aGlzLl94MT0raSkrIiwiKyh0aGlzLl95MT0rYSl9LGFyY1RvOmZ1bmN0aW9uKHQsZSxuLG8saSl7dmFyIGE9dGhpcy5feDEscj10aGlzLl95MSxzPShuPStuKS0odD0rdCksbD0obz0rbyktKGU9K2UpLGM9YS10LGQ9ci1lLHA9YypjK2QqZDtpZigoaT0raSk8MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIitpKTtpZihudWxsPT09dGhpcy5feDEpdGhpcy5fKz0iTSIrKHRoaXMuX3gxPXQpKyIsIisodGhpcy5feTE9ZSk7ZWxzZSBpZihwPnl0dClpZihNYXRoLmFicyhkKnMtbCpjKT55dHQmJmkpe3ZhciBtPW4tYSx1PW8tcixmPXMqcytsKmwsZz1tKm0rdSp1LGg9TWF0aC5zcXJ0KGYpLGI9TWF0aC5zcXJ0KHApLHk9aSpNYXRoLnRhbigoaHR0LU1hdGguYWNvcygoZitwLWcpLygyKmgqYikpKS8yKSxfPXkvYixDPXkvaDtNYXRoLmFicyhfLTEpPnl0dCYmKHRoaXMuXys9IkwiKyh0K18qYykrIiwiKyhlK18qZCkpLHRoaXMuXys9IkEiK2krIiwiK2krIiwwLDAsIisgKyhkKm0+Yyp1KSsiLCIrKHRoaXMuX3gxPXQrQypzKSsiLCIrKHRoaXMuX3kxPWUrQypsKX1lbHNlIHRoaXMuXys9IkwiKyh0aGlzLl94MT10KSsiLCIrKHRoaXMuX3kxPWUpfSxhcmM6ZnVuY3Rpb24odCxlLG4sbyxpLGEpe3Q9K3QsZT0rZSxhPSEhYTt2YXIgcj0obj0rbikqTWF0aC5jb3Mobykscz1uKk1hdGguc2luKG8pLGw9dCtyLGM9ZStzLGQ9MV5hLHA9YT9vLWk6aS1vO2lmKG48MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIituKTtudWxsPT09dGhpcy5feDE/dGhpcy5fKz0iTSIrbCsiLCIrYzooTWF0aC5hYnModGhpcy5feDEtbCk+eXR0fHxNYXRoLmFicyh0aGlzLl95MS1jKT55dHQpJiYodGhpcy5fKz0iTCIrbCsiLCIrYyksbiYmKHA8MCYmKHA9cCVidHQrYnR0KSxwPl90dD90aGlzLl8rPSJBIituKyIsIituKyIsMCwxLCIrZCsiLCIrKHQtcikrIiwiKyhlLXMpKyJBIituKyIsIituKyIsMCwxLCIrZCsiLCIrKHRoaXMuX3gxPWwpKyIsIisodGhpcy5feTE9Yyk6cD55dHQmJih0aGlzLl8rPSJBIituKyIsIituKyIsMCwiKyArKHA+PWh0dCkrIiwiK2QrIiwiKyh0aGlzLl94MT10K24qTWF0aC5jb3MoaSkpKyIsIisodGhpcy5feTE9ZStuKk1hdGguc2luKGkpKSkpfSxyZWN0OmZ1bmN0aW9uKHQsZSxuLG8pe3RoaXMuXys9Ik0iKyh0aGlzLl94MD10aGlzLl94MT0rdCkrIiwiKyh0aGlzLl95MD10aGlzLl95MT0rZSkrImgiKyArbisidiIrICtvKyJoIistbisiWiJ9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX319O3ZhciB2dHQ9IiQiO2Z1bmN0aW9uIHh0dCgpe31mdW5jdGlvbiBPdHQodCxlKXt2YXIgbj1uZXcgeHR0O2lmKHQgaW5zdGFuY2VvZiB4dHQpdC5lYWNoKChmdW5jdGlvbih0LGUpe24uc2V0KGUsdCl9KSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KHQpKXt2YXIgbyxpPS0xLGE9dC5sZW5ndGg7aWYobnVsbD09ZSlmb3IoOysraTxhOyluLnNldChpLHRbaV0pO2Vsc2UgZm9yKDsrK2k8YTspbi5zZXQoZShvPXRbaV0saSx0KSxvKX1lbHNlIGlmKHQpZm9yKHZhciByIGluIHQpbi5zZXQocix0W3JdKTtyZXR1cm4gbn1mdW5jdGlvbiBQdHQoKXt9eHR0LnByb3RvdHlwZT1PdHQucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp4dHQsaGFzOmZ1bmN0aW9uKHQpe3JldHVybiB2dHQrdCBpbiB0aGlzfSxnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXNbdnR0K3RdfSxzZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpc1t2dHQrdF09ZSx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24odCl7dmFyIGU9dnR0K3Q7cmV0dXJuIGUgaW4gdGhpcyYmZGVsZXRlIHRoaXNbZV19LGNsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PXZ0dCYmZGVsZXRlIHRoaXNbdF19LGtleXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcyllWzBdPT09dnR0JiZ0LnB1c2goZS5zbGljZSgxKSk7cmV0dXJuIHR9LHZhbHVlczpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzKWVbMF09PT12dHQmJnQucHVzaCh0aGlzW2VdKTtyZXR1cm4gdH0sZW50cmllczpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzKWVbMF09PT12dHQmJnQucHVzaCh7a2V5OmUuc2xpY2UoMSksdmFsdWU6dGhpc1tlXX0pO3JldHVybiB0fSxzaXplOmZ1bmN0aW9uKCl7dmFyIHQ9MDtmb3IodmFyIGUgaW4gdGhpcyllWzBdPT09dnR0JiYrK3Q7cmV0dXJuIHR9LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMpaWYodFswXT09PXZ0dClyZXR1cm4hMTtyZXR1cm4hMH0sZWFjaDpmdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcyllWzBdPT09dnR0JiZ0KHRoaXNbZV0sZS5zbGljZSgxKSx0aGlzKX19O3ZhciB3dHQ9T3R0LnByb3RvdHlwZTtmdW5jdGlvbiBrdHQodCxlKXtpZigobj0odD1lP3QudG9FeHBvbmVudGlhbChlLTEpOnQudG9FeHBvbmVudGlhbCgpKS5pbmRleE9mKCJlIikpPDApcmV0dXJuIG51bGw7dmFyIG4sbz10LnNsaWNlKDAsbik7cmV0dXJuW28ubGVuZ3RoPjE/b1swXStvLnNsaWNlKDIpOm8sK3Quc2xpY2UobisxKV19ZnVuY3Rpb24gU3R0KHQpe3JldHVybih0PWt0dChNYXRoLmFicyh0KSkpP3RbMV06TmFOfVB0dC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlB0dCxoYXM6d3R0LmhhcyxhZGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXNbdnR0Kyh0Kz0iIildPXQsdGhpc30scmVtb3ZlOnd0dC5yZW1vdmUsY2xlYXI6d3R0LmNsZWFyLHZhbHVlczp3dHQua2V5cyxzaXplOnd0dC5zaXplLGVtcHR5Ond0dC5lbXB0eSxlYWNoOnd0dC5lYWNofTt2YXIgRHR0LEV0dD0vXig/OiguKT8oWzw+PV5dKSk/KFsrXC0oIF0pPyhbJCNdKT8oMCk/KFxkKyk/KCwpPyhcLlxkKyk/KH4pPyhbYS16JV0pPyQvaTtmdW5jdGlvbiBBdHQodCl7aWYoIShlPUV0dC5leGVjKHQpKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9ybWF0OiAiK3QpO3ZhciBlO3JldHVybiBuZXcgUnR0KHtmaWxsOmVbMV0sYWxpZ246ZVsyXSxzaWduOmVbM10sc3ltYm9sOmVbNF0semVybzplWzVdLHdpZHRoOmVbNl0sY29tbWE6ZVs3XSxwcmVjaXNpb246ZVs4XSYmZVs4XS5zbGljZSgxKSx0cmltOmVbOV0sdHlwZTplWzEwXX0pfWZ1bmN0aW9uIFJ0dCh0KXt0aGlzLmZpbGw9dm9pZCAwPT09dC5maWxsPyIgIjp0LmZpbGwrIiIsdGhpcy5hbGlnbj12b2lkIDA9PT10LmFsaWduPyI+Ijp0LmFsaWduKyIiLHRoaXMuc2lnbj12b2lkIDA9PT10LnNpZ24/Ii0iOnQuc2lnbisiIix0aGlzLnN5bWJvbD12b2lkIDA9PT10LnN5bWJvbD8iIjp0LnN5bWJvbCsiIix0aGlzLnplcm89ISF0Lnplcm8sdGhpcy53aWR0aD12b2lkIDA9PT10LndpZHRoP3ZvaWQgMDordC53aWR0aCx0aGlzLmNvbW1hPSEhdC5jb21tYSx0aGlzLnByZWNpc2lvbj12b2lkIDA9PT10LnByZWNpc2lvbj92b2lkIDA6K3QucHJlY2lzaW9uLHRoaXMudHJpbT0hIXQudHJpbSx0aGlzLnR5cGU9dm9pZCAwPT09dC50eXBlPyIiOnQudHlwZSsiIn1mdW5jdGlvbiBUdHQodCxlKXt2YXIgbj1rdHQodCxlKTtpZighbilyZXR1cm4gdCsiIjt2YXIgbz1uWzBdLGk9blsxXTtyZXR1cm4gaTwwPyIwLiIrbmV3IEFycmF5KC1pKS5qb2luKCIwIikrbzpvLmxlbmd0aD5pKzE/by5zbGljZSgwLGkrMSkrIi4iK28uc2xpY2UoaSsxKTpvK25ldyBBcnJheShpLW8ubGVuZ3RoKzIpLmpvaW4oIjAiKX1BdHQucHJvdG90eXBlPVJ0dC5wcm90b3R5cGUsUnR0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbGwrdGhpcy5hbGlnbit0aGlzLnNpZ24rdGhpcy5zeW1ib2wrKHRoaXMuemVybz8iMCI6IiIpKyh2b2lkIDA9PT10aGlzLndpZHRoPyIiOk1hdGgubWF4KDEsMHx0aGlzLndpZHRoKSkrKHRoaXMuY29tbWE/IiwiOiIiKSsodm9pZCAwPT09dGhpcy5wcmVjaXNpb24/IiI6Ii4iK01hdGgubWF4KDAsMHx0aGlzLnByZWNpc2lvbikpKyh0aGlzLnRyaW0/In4iOiIiKSt0aGlzLnR5cGV9O3ZhciBOdHQ9eyIlIjpmdW5jdGlvbih0LGUpe3JldHVybigxMDAqdCkudG9GaXhlZChlKX0sYjpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZygyKX0sYzpmdW5jdGlvbih0KXtyZXR1cm4gdCsiIn0sZDpmdW5jdGlvbiBJdHQodCl7cmV0dXJuIE1hdGguYWJzKHQ9TWF0aC5yb3VuZCh0KSk+PTFlMjE/dC50b0xvY2FsZVN0cmluZygiZW4iKS5yZXBsYWNlKC8sL2csIiIpOnQudG9TdHJpbmcoMTApfSxlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudG9FeHBvbmVudGlhbChlKX0sZjpmdW5jdGlvbih0LGUpe3JldHVybiB0LnRvRml4ZWQoZSl9LGc6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50b1ByZWNpc2lvbihlKX0sbzpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZyg4KX0scDpmdW5jdGlvbih0LGUpe3JldHVybiBUdHQoMTAwKnQsZSl9LHI6VHR0LHM6ZnVuY3Rpb24genR0KHQsZSl7dmFyIG49a3R0KHQsZSk7aWYoIW4pcmV0dXJuIHQrIiI7dmFyIG89blswXSxpPW5bMV0sYT1pLShEdHQ9MypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoaS8zKSkpKSsxLHI9by5sZW5ndGg7cmV0dXJuIGE9PT1yP286YT5yP28rbmV3IEFycmF5KGEtcisxKS5qb2luKCIwIik6YT4wP28uc2xpY2UoMCxhKSsiLiIrby5zbGljZShhKToiMC4iK25ldyBBcnJheSgxLWEpLmpvaW4oIjAiKStrdHQodCxNYXRoLm1heCgwLGUrYS0xKSlbMF19LFg6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9LHg6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoMTYpfX07ZnVuY3Rpb24gSHR0KHQpe3JldHVybiB0fXZhciBGdHQsTHR0LEJ0dCxWdHQ9QXJyYXkucHJvdG90eXBlLm1hcCxqdHQ9WyJ5IiwieiIsImEiLCJmIiwicCIsIm4iLCLCtSIsIm0iLCIiLCJrIiwiTSIsIkciLCJUIiwiUCIsIkUiLCJaIiwiWSJdO2Z1bmN0aW9uIFV0dCh0LGUpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOnRoaXMucmFuZ2UodCk7YnJlYWs7ZGVmYXVsdDp0aGlzLnJhbmdlKGUpLmRvbWFpbih0KX1yZXR1cm4gdGhpc30hKGZ1bmN0aW9uIFd0dCh0KXtGdHQ9KGZ1bmN0aW9uIGUodCl7dmFyIGU9dm9pZCAwPT09dC5ncm91cGluZ3x8dm9pZCAwPT09dC50aG91c2FuZHM/SHR0OihmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4sbyl7Zm9yKHZhciBpPW4ubGVuZ3RoLGE9W10scj0wLHM9dFswXSxsPTA7aT4wJiZzPjAmJihsK3MrMT5vJiYocz1NYXRoLm1heCgxLG8tbCkpLGEucHVzaChuLnN1YnN0cmluZyhpLT1zLGkrcykpLCEoKGwrPXMrMSk+bykpOylzPXRbcj0ocisxKSV0Lmxlbmd0aF07cmV0dXJuIGEucmV2ZXJzZSgpLmpvaW4oZSl9fSkoVnR0LmNhbGwodC5ncm91cGluZyxOdW1iZXIpLHQudGhvdXNhbmRzKyIiKSxvPXZvaWQgMD09PXQuY3VycmVuY3k/IiI6dC5jdXJyZW5jeVswXSsiIixpPXZvaWQgMD09PXQuY3VycmVuY3k/IiI6dC5jdXJyZW5jeVsxXSsiIixhPXZvaWQgMD09PXQuZGVjaW1hbD8iLiI6dC5kZWNpbWFsKyIiLHI9dm9pZCAwPT09dC5udW1lcmFscz9IdHQ6KGZ1bmN0aW9uIHModCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1swLTldL2csKGZ1bmN0aW9uKGUpe3JldHVybiB0WytlXX0pKX19KShWdHQuY2FsbCh0Lm51bWVyYWxzLFN0cmluZykpLGw9dm9pZCAwPT09dC5wZXJjZW50PyIlIjp0LnBlcmNlbnQrIiIsYz12b2lkIDA9PT10Lm1pbnVzPyItIjp0Lm1pbnVzKyIiLGQ9dm9pZCAwPT09dC5uYW4/Ik5hTiI6dC5uYW4rIiI7ZnVuY3Rpb24gcCh0KXt2YXIgbj0odD1BdHQodCkpLmZpbGwscz10LmFsaWduLHA9dC5zaWduLG09dC5zeW1ib2wsdT10Lnplcm8sZj10LndpZHRoLGc9dC5jb21tYSxoPXQucHJlY2lzaW9uLGI9dC50cmltLHk9dC50eXBlOyJuIj09PXk/KGc9ITAseT0iZyIpOk50dFt5XXx8KHZvaWQgMD09PWgmJihoPTEyKSxiPSEwLHk9ImciKSwodXx8IjAiPT09biYmIj0iPT09cykmJih1PSEwLG49IjAiLHM9Ij0iKTt2YXIgXz0iJCI9PT1tP286IiMiPT09bSYmL1tib3hYXS8udGVzdCh5KT8iMCIreS50b0xvd2VyQ2FzZSgpOiIiLEM9IiQiPT09bT9pOi9bJXBdLy50ZXN0KHkpP2w6IiIsTT1OdHRbeV0sdj0vW2RlZmdwcnMlXS8udGVzdCh5KTtmdW5jdGlvbiB4KHQpe3ZhciBvLGksbCxtPV8seD1DO2lmKCJjIj09PXkpeD1NKHQpK3gsdD0iIjtlbHNle3ZhciBPPSh0PSt0KTwwfHwxL3Q8MDtpZih0PWlzTmFOKHQpP2Q6TShNYXRoLmFicyh0KSxoKSxiJiYodD0oZnVuY3Rpb24gUCh0KXt0OmZvcih2YXIgZSxuPXQubGVuZ3RoLG89MSxpPS0xO288bjsrK28pc3dpdGNoKHRbb10pe2Nhc2UiLiI6aT1lPW87YnJlYWs7Y2FzZSIwIjowPT09aSYmKGk9byksZT1vO2JyZWFrO2RlZmF1bHQ6aWYoISt0W29dKWJyZWFrIHQ7aT4wJiYoaT0wKX1yZXR1cm4gaT4wP3Quc2xpY2UoMCxpKSt0LnNsaWNlKGUrMSk6dH0pKHQpKSxPJiYwPT0rdCYmIisiIT09cCYmKE89ITEpLG09KE8/IigiPT09cD9wOmM6Ii0iPT09cHx8IigiPT09cD8iIjpwKSttLHg9KCJzIj09PXk/anR0WzgrRHR0LzNdOiIiKSt4KyhPJiYiKCI9PT1wPyIpIjoiIiksdilmb3Iobz0tMSxpPXQubGVuZ3RoOysrbzxpOylpZig0OD4obD10LmNoYXJDb2RlQXQobykpfHxsPjU3KXt4PSg0Nj09PWw/YSt0LnNsaWNlKG8rMSk6dC5zbGljZShvKSkreCx0PXQuc2xpY2UoMCxvKTticmVha319ZyYmIXUmJih0PWUodCwxLzApKTt2YXIgdz1tLmxlbmd0aCt0Lmxlbmd0aCt4Lmxlbmd0aCxrPXc8Zj9uZXcgQXJyYXkoZi13KzEpLmpvaW4obik6IiI7c3dpdGNoKGcmJnUmJih0PWUoayt0LGsubGVuZ3RoP2YteC5sZW5ndGg6MS8wKSxrPSIiKSxzKXtjYXNlIjwiOnQ9bSt0K3grazticmVhaztjYXNlIj0iOnQ9bStrK3QreDticmVhaztjYXNlIl4iOnQ9ay5zbGljZSgwLHc9ay5sZW5ndGg+PjEpK20rdCt4K2suc2xpY2Uodyk7YnJlYWs7ZGVmYXVsdDp0PWsrbSt0K3h9cmV0dXJuIHIodCl9cmV0dXJuIGg9dm9pZCAwPT09aD82Oi9bZ3Byc10vLnRlc3QoeSk/TWF0aC5tYXgoMSxNYXRoLm1pbigyMSxoKSk6TWF0aC5tYXgoMCxNYXRoLm1pbigyMCxoKSkseC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0KyIifSx4fXJldHVybntmb3JtYXQ6cCxmb3JtYXRQcmVmaXg6ZnVuY3Rpb24gbSh0LGUpe3ZhciBuPXAoKCh0PUF0dCh0KSkudHlwZT0iZiIsdCkpLG89MypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoU3R0KGUpLzMpKSksaT1NYXRoLnBvdygxMCwtbyksYT1qdHRbOCtvLzNdO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbihpKnQpK2F9fX19KSh0KSxMdHQ9RnR0LmZvcm1hdCxCdHQ9RnR0LmZvcm1hdFByZWZpeH0pKHtkZWNpbWFsOiIuIix0aG91c2FuZHM6IiwiLGdyb3VwaW5nOlszXSxjdXJyZW5jeTpbIiQiLCIiXSxtaW51czoiLSJ9KTt2YXIgR3R0PUFycmF5LnByb3RvdHlwZSxZdHQ9R3R0Lm1hcCxxdHQ9R3R0LnNsaWNlLFp0dD17bmFtZToiaW1wbGljaXQifTtmdW5jdGlvbiBYdHQoKXt2YXIgdD1PdHQoKSxlPVtdLG49W10sbz1adHQ7ZnVuY3Rpb24gaShpKXt2YXIgYT1pKyIiLHI9dC5nZXQoYSk7aWYoIXIpe2lmKG8hPT1adHQpcmV0dXJuIG87dC5zZXQoYSxyPWUucHVzaChpKSl9cmV0dXJuIG5bKHItMSklbi5sZW5ndGhdfXJldHVybiBpLmRvbWFpbj1mdW5jdGlvbihuKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZS5zbGljZSgpO2U9W10sdD1PdHQoKTtmb3IodmFyIG8sYSxyPS0xLHM9bi5sZW5ndGg7KytyPHM7KXQuaGFzKGE9KG89bltyXSkrIiIpfHx0LnNldChhLGUucHVzaChvKSk7cmV0dXJuIGl9LGkucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49cXR0LmNhbGwodCksaSk6bi5zbGljZSgpfSxpLnVua25vd249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dCxpKTpvfSxpLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gWHR0KGUsbikudW5rbm93bihvKX0sVXR0LmFwcGx5KGksYXJndW1lbnRzKSxpfWZ1bmN0aW9uIEt0dCgpe3ZhciB0LGUsbj1YdHQoKS51bmtub3duKHZvaWQgMCksbz1uLmRvbWFpbixpPW4ucmFuZ2UsYT1bMCwxXSxyPSExLHM9MCxsPTAsYz0uNTtmdW5jdGlvbiBkKCl7dmFyIG49bygpLmxlbmd0aCxkPWFbMV08YVswXSxwPWFbZC0wXSxtPWFbMS1kXTt0PShtLXApL01hdGgubWF4KDEsbi1zKzIqbCksciYmKHQ9TWF0aC5mbG9vcih0KSkscCs9KG0tcC10KihuLXMpKSpjLGU9dCooMS1zKSxyJiYocD1NYXRoLnJvdW5kKHApLGU9TWF0aC5yb3VuZChlKSk7dmFyIHU9UDUobikubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gcCt0KmV9KSk7cmV0dXJuIGkoZD91LnJldmVyc2UoKTp1KX1yZXR1cm4gZGVsZXRlIG4udW5rbm93bixuLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obyh0KSxkKCkpOm8oKX0sbi5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1bK3RbMF0sK3RbMV1dLGQoKSk6YS5zbGljZSgpfSxuLnJhbmdlUm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGE9Wyt0WzBdLCt0WzFdXSxyPSEwLGQoKX0sbi5iYW5kd2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gZX0sbi5zdGVwPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LG4ucm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ISF0LGQoKSk6cn0sbi5wYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPU1hdGgubWluKDEsbD0rdCksZCgpKTpzfSxuLnBhZGRpbmdJbm5lcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1NYXRoLm1pbigxLHQpLGQoKSk6c30sbi5wYWRkaW5nT3V0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9K3QsZCgpKTpsfSxuLmFsaWduPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPU1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSksZCgpKTpjfSxuLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gS3R0KG8oKSxhKS5yb3VuZChyKS5wYWRkaW5nSW5uZXIocykucGFkZGluZ091dGVyKGwpLmFsaWduKGMpfSxVdHQuYXBwbHkoZCgpLGFyZ3VtZW50cyl9ZnVuY3Rpb24gSnR0KHQpe3ZhciBlPXQuY29weTtyZXR1cm4gdC5wYWRkaW5nPXQucGFkZGluZ091dGVyLGRlbGV0ZSB0LnBhZGRpbmdJbm5lcixkZWxldGUgdC5wYWRkaW5nT3V0ZXIsdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEp0dChlKCkpfSx0fWZ1bmN0aW9uIFF0dCgpe3JldHVybiBKdHQoS3R0LmFwcGx5KG51bGwsYXJndW1lbnRzKS5wYWRkaW5nSW5uZXIoMSkpfWZ1bmN0aW9uICR0dCh0KXtyZXR1cm4rdH12YXIgdGV0PVswLDFdO2Z1bmN0aW9uIGVldCh0KXtyZXR1cm4gdH1mdW5jdGlvbiBuZXQodCxlKXtyZXR1cm4oZS09dD0rdCk/ZnVuY3Rpb24obil7cmV0dXJuKG4tdCkvZX06KGZ1bmN0aW9uIG4odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSkoaXNOYU4oZSk/TmFOOi41KX1mdW5jdGlvbiBvZXQodCl7dmFyIGUsbj10WzBdLG89dFt0Lmxlbmd0aC0xXTtyZXR1cm4gbj5vJiYoZT1uLG49byxvPWUpLGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heChuLE1hdGgubWluKG8sdCkpfX1mdW5jdGlvbiBpZXQodCxlLG4pe3ZhciBvPXRbMF0saT10WzFdLGE9ZVswXSxyPWVbMV07cmV0dXJuIGk8bz8obz1uZXQoaSxvKSxhPW4ocixhKSk6KG89bmV0KG8saSksYT1uKGEscikpLGZ1bmN0aW9uKHQpe3JldHVybiBhKG8odCkpfX1mdW5jdGlvbiBhZXQodCxlLG4pe3ZhciBvPU1hdGgubWluKHQubGVuZ3RoLGUubGVuZ3RoKS0xLGk9bmV3IEFycmF5KG8pLGE9bmV3IEFycmF5KG8pLHI9LTE7Zm9yKHRbb108dFswXSYmKHQ9dC5zbGljZSgpLnJldmVyc2UoKSxlPWUuc2xpY2UoKS5yZXZlcnNlKCkpOysrcjxvOylpW3JdPW5ldCh0W3JdLHRbcisxXSksYVtyXT1uKGVbcl0sZVtyKzFdKTtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49QzUodCxlLDEsbyktMTtyZXR1cm4gYVtuXShpW25dKGUpKX19ZnVuY3Rpb24gcmV0KHQsZSl7cmV0dXJuIGUuZG9tYWluKHQuZG9tYWluKCkpLnJhbmdlKHQucmFuZ2UoKSkuaW50ZXJwb2xhdGUodC5pbnRlcnBvbGF0ZSgpKS5jbGFtcCh0LmNsYW1wKCkpLnVua25vd24odC51bmtub3duKCkpfWZ1bmN0aW9uIHNldCgpe3ZhciB0LGUsbixvLGksYSxyPXRldCxzPXRldCxsPW84LGM9ZWV0O2Z1bmN0aW9uIGQoKXtyZXR1cm4gbz1NYXRoLm1pbihyLmxlbmd0aCxzLmxlbmd0aCk+Mj9hZXQ6aWV0LGk9YT1udWxsLHB9ZnVuY3Rpb24gcChlKXtyZXR1cm4gaXNOYU4oZT0rZSk/bjooaXx8KGk9byhyLm1hcCh0KSxzLGwpKSkodChjKGUpKSl9cmV0dXJuIHAuaW52ZXJ0PWZ1bmN0aW9uKG4pe3JldHVybiBjKGUoKGF8fChhPW8ocyxyLm1hcCh0KSxRNykpKShuKSkpfSxwLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1ZdHQuY2FsbCh0LCR0dCksYz09PWVldHx8KGM9b2V0KHIpKSxkKCkpOnIuc2xpY2UoKX0scC5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1xdHQuY2FsbCh0KSxkKCkpOnMuc2xpY2UoKX0scC5yYW5nZVJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBzPXF0dC5jYWxsKHQpLGw9aTgsZCgpfSxwLmNsYW1wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPXQ/b2V0KHIpOmVldCxwKTpjIT09ZWV0fSxwLmludGVycG9sYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPXQsZCgpKTpsfSxwLnVua25vd249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxwKTpufSxmdW5jdGlvbihuLG8pe3JldHVybiB0PW4sZT1vLGQoKX19ZnVuY3Rpb24gY2V0KHQsZSl7cmV0dXJuIHNldCgpKHQsZSl9ZnVuY3Rpb24gZGV0KHQpe3ZhciBlPXQuZG9tYWluO3JldHVybiB0LnRpY2tzPWZ1bmN0aW9uKHQpe3ZhciBuPWUoKTtyZXR1cm4gRDUoblswXSxuW24ubGVuZ3RoLTFdLG51bGw9PXQ/MTA6dCl9LHQudGlja0Zvcm1hdD1mdW5jdGlvbih0LG4pe3ZhciBvPWUoKTtyZXR1cm4oZnVuY3Rpb24gaSh0LGUsbixvKXt2YXIgaSxhPUE1KHQsZSxuKTtzd2l0Y2goKG89QXR0KG51bGw9PW8/IixmIjpvKSkudHlwZSl7Y2FzZSJzIjp2YXIgcj1NYXRoLm1heChNYXRoLmFicyh0KSxNYXRoLmFicyhlKSk7cmV0dXJuIG51bGwhPW8ucHJlY2lzaW9ufHxpc05hTihpPShmdW5jdGlvbiBzKHQsZSl7cmV0dXJuIE1hdGgubWF4KDAsMypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoU3R0KGUpLzMpKSktU3R0KE1hdGguYWJzKHQpKSl9KShhLHIpKXx8KG8ucHJlY2lzaW9uPWkpLEJ0dChvLHIpO2Nhc2UiIjpjYXNlImUiOmNhc2UiZyI6Y2FzZSJwIjpjYXNlInIiOm51bGwhPW8ucHJlY2lzaW9ufHxpc05hTihpPShmdW5jdGlvbiBsKHQsZSl7cmV0dXJuIHQ9TWF0aC5hYnModCksZT1NYXRoLmFicyhlKS10LE1hdGgubWF4KDAsU3R0KGUpLVN0dCh0KSkrMX0pKGEsTWF0aC5tYXgoTWF0aC5hYnModCksTWF0aC5hYnMoZSkpKSl8fChvLnByZWNpc2lvbj1pLSgiZSI9PT1vLnR5cGUpKTticmVhaztjYXNlImYiOmNhc2UiJSI6bnVsbCE9by5wcmVjaXNpb258fGlzTmFOKGk9KGZ1bmN0aW9uIGModCl7cmV0dXJuIE1hdGgubWF4KDAsLVN0dChNYXRoLmFicyh0KSkpfSkoYSkpfHwoby5wcmVjaXNpb249aS0yKigiJSI9PT1vLnR5cGUpKX1yZXR1cm4gTHR0KG8pfSkob1swXSxvW28ubGVuZ3RoLTFdLG51bGw9PXQ/MTA6dCxuKX0sdC5uaWNlPWZ1bmN0aW9uKG4pe251bGw9PW4mJihuPTEwKTt2YXIgbyxpPWUoKSxhPTAscj1pLmxlbmd0aC0xLHM9aVthXSxsPWlbcl07cmV0dXJuIGw8cyYmKG89cyxzPWwsbD1vLG89YSxhPXIscj1vKSwobz1FNShzLGwsbikpPjA/bz1FNShzPU1hdGguZmxvb3Iocy9vKSpvLGw9TWF0aC5jZWlsKGwvbykqbyxuKTpvPDAmJihvPUU1KHM9TWF0aC5jZWlsKHMqbykvbyxsPU1hdGguZmxvb3IobCpvKS9vLG4pKSxvPjA/KGlbYV09TWF0aC5mbG9vcihzL28pKm8saVtyXT1NYXRoLmNlaWwobC9vKSpvLGUoaSkpOm88MCYmKGlbYV09TWF0aC5jZWlsKHMqbykvbyxpW3JdPU1hdGguZmxvb3IobCpvKS9vLGUoaSkpLHR9LHR9ZnVuY3Rpb24gcGV0KCl7dmFyIHQ9Y2V0KGVldCxlZXQpO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gcmV0KHQscGV0KCkpfSxVdHQuYXBwbHkodCxhcmd1bWVudHMpLGRldCh0KX1mdW5jdGlvbiBtZXQodCxlKXt2YXIgbixvPTAsaT0odD10LnNsaWNlKCkpLmxlbmd0aC0xLGE9dFtvXSxyPXRbaV07cmV0dXJuIHI8YSYmKG49byxvPWksaT1uLG49YSxhPXIscj1uKSx0W29dPWUuZmxvb3IoYSksdFtpXT1lLmNlaWwociksdH1mdW5jdGlvbiB1ZXQodCl7cmV0dXJuIE1hdGgubG9nKHQpfWZ1bmN0aW9uIGZldCh0KXtyZXR1cm4gTWF0aC5leHAodCl9ZnVuY3Rpb24gZ2V0KHQpe3JldHVybi1NYXRoLmxvZygtdCl9ZnVuY3Rpb24gaGV0KHQpe3JldHVybi1NYXRoLmV4cCgtdCl9ZnVuY3Rpb24gYmV0KHQpe3JldHVybiBpc0Zpbml0ZSh0KT8rKCIxZSIrdCk6dDwwPzA6dH1mdW5jdGlvbiB5ZXQodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybi10KC1lKX19ZnVuY3Rpb24gX2V0KHQpe3ZhciBlLG4sbz10KHVldCxmZXQpLGk9by5kb21haW4sYT0xMDtmdW5jdGlvbiByKCl7cmV0dXJuIGU9KGZ1bmN0aW9uIHIodCl7cmV0dXJuIHQ9PT1NYXRoLkU/TWF0aC5sb2c6MTA9PT10JiZNYXRoLmxvZzEwfHwyPT09dCYmTWF0aC5sb2cyfHwodD1NYXRoLmxvZyh0KSxmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5sb2coZSkvdH0pfSkoYSksbj0oZnVuY3Rpb24gcyh0KXtyZXR1cm4gMTA9PT10P2JldDp0PT09TWF0aC5FP01hdGguZXhwOmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnBvdyh0LGUpfX0pKGEpLGkoKVswXTwwPyhlPXlldChlKSxuPXlldChuKSx0KGdldCxoZXQpKTp0KHVldCxmZXQpLG99cmV0dXJuIG8uYmFzZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rdCxyKCkpOmF9LG8uZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpKHQpLHIoKSk6aSgpfSxvLnRpY2tzPWZ1bmN0aW9uKHQpe3ZhciBvLHI9aSgpLHM9clswXSxsPXJbci5sZW5ndGgtMV07KG89bDxzKSYmKG09cyxzPWwsbD1tKTt2YXIgYyxkLHAsbT1lKHMpLHU9ZShsKSxmPW51bGw9PXQ/MTA6K3QsZz1bXTtpZighKGElMSkmJnUtbTxmKXtpZihtPU1hdGgucm91bmQobSktMSx1PU1hdGgucm91bmQodSkrMSxzPjApe2Zvcig7bTx1OysrbSlmb3IoZD0xLGM9bihtKTtkPGE7KytkKWlmKCEoKHA9YypkKTxzKSl7aWYocD5sKWJyZWFrO2cucHVzaChwKX19ZWxzZSBmb3IoO208dTsrK20pZm9yKGQ9YS0xLGM9bihtKTtkPj0xOy0tZClpZighKChwPWMqZCk8cykpe2lmKHA+bClicmVhaztnLnB1c2gocCl9fWVsc2UgZz1ENShtLHUsTWF0aC5taW4odS1tLGYpKS5tYXAobik7cmV0dXJuIG8/Zy5yZXZlcnNlKCk6Z30sby50aWNrRm9ybWF0PWZ1bmN0aW9uKHQsaSl7aWYobnVsbD09aSYmKGk9MTA9PT1hPyIuMGUiOiIsIiksImZ1bmN0aW9uIiE9dHlwZW9mIGkmJihpPUx0dChpKSksdD09PTEvMClyZXR1cm4gaTtudWxsPT10JiYodD0xMCk7dmFyIHI9TWF0aC5tYXgoMSxhKnQvby50aWNrcygpLmxlbmd0aCk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBvPXQvbihNYXRoLnJvdW5kKGUodCkpKTtyZXR1cm4gbyphPGEtLjUmJihvKj1hKSxvPD1yP2kodCk6IiJ9fSxvLm5pY2U9ZnVuY3Rpb24oKXtyZXR1cm4gaShtZXQoaSgpLHtmbG9vcjpmdW5jdGlvbih0KXtyZXR1cm4gbihNYXRoLmZsb29yKGUodCkpKX0sY2VpbDpmdW5jdGlvbih0KXtyZXR1cm4gbihNYXRoLmNlaWwoZSh0KSkpfX0pKX0sb31mdW5jdGlvbiBDZXQoKXt2YXIgdD1fZXQoc2V0KCkpLmRvbWFpbihbMSwxMF0pO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gcmV0KHQsQ2V0KCkpLmJhc2UodC5iYXNlKCkpfSxVdHQuYXBwbHkodCxhcmd1bWVudHMpLHR9dmFyIE1ldD1uZXcgRGF0ZSx2ZXQ9bmV3IERhdGU7ZnVuY3Rpb24geGV0KHQsZSxuLG8pe2Z1bmN0aW9uIGkoZSl7cmV0dXJuIHQoZT0wPT09YXJndW1lbnRzLmxlbmd0aD9uZXcgRGF0ZTpuZXcgRGF0ZSgrZSkpLGV9cmV0dXJuIGkuZmxvb3I9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoZT1uZXcgRGF0ZSgrZSkpLGV9LGkuY2VpbD1mdW5jdGlvbihuKXtyZXR1cm4gdChuPW5ldyBEYXRlKG4tMSkpLGUobiwxKSx0KG4pLG59LGkucm91bmQ9ZnVuY3Rpb24odCl7dmFyIGU9aSh0KSxuPWkuY2VpbCh0KTtyZXR1cm4gdC1lPG4tdD9lOm59LGkub2Zmc2V0PWZ1bmN0aW9uKHQsbil7cmV0dXJuIGUodD1uZXcgRGF0ZSgrdCksbnVsbD09bj8xOk1hdGguZmxvb3IobikpLHR9LGkucmFuZ2U9ZnVuY3Rpb24obixvLGEpe3ZhciByLHM9W107aWYobj1pLmNlaWwobiksYT1udWxsPT1hPzE6TWF0aC5mbG9vcihhKSwhKG48byYmYT4wKSlyZXR1cm4gcztkb3tzLnB1c2gocj1uZXcgRGF0ZSgrbikpLGUobixhKSx0KG4pfXdoaWxlKHI8biYmbjxvKTtyZXR1cm4gc30saS5maWx0ZXI9ZnVuY3Rpb24obil7cmV0dXJuIHhldCgoZnVuY3Rpb24oZSl7aWYoZT49ZSlmb3IoO3QoZSksIW4oZSk7KWUuc2V0VGltZShlLTEpfSksKGZ1bmN0aW9uKHQsbyl7aWYodD49dClpZihvPDApZm9yKDsrK288PTA7KWZvcig7ZSh0LC0xKSwhbih0KTspO2Vsc2UgZm9yKDstLW8+PTA7KWZvcig7ZSh0LDEpLCFuKHQpOyk7fSkpfSxuJiYoaS5jb3VudD1mdW5jdGlvbihlLG8pe3JldHVybiBNZXQuc2V0VGltZSgrZSksdmV0LnNldFRpbWUoK28pLHQoTWV0KSx0KHZldCksTWF0aC5mbG9vcihuKE1ldCx2ZXQpKX0saS5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLmZsb29yKHQpLGlzRmluaXRlKHQpJiZ0PjA/dD4xP2kuZmlsdGVyKG8/ZnVuY3Rpb24oZSl7cmV0dXJuIG8oZSkldD09MH06ZnVuY3Rpb24oZSl7cmV0dXJuIGkuY291bnQoMCxlKSV0PT0wfSk6aTpudWxsfSksaX12YXIgT2V0PXhldCgoZnVuY3Rpb24oKXt9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS10fSkpO09ldC5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLmZsb29yKHQpLGlzRmluaXRlKHQpJiZ0PjA/dD4xP3hldCgoZnVuY3Rpb24oZSl7ZS5zZXRUaW1lKE1hdGguZmxvb3IoZS90KSp0KX0pLChmdW5jdGlvbihlLG4pe2Uuc2V0VGltZSgrZStuKnQpfSksKGZ1bmN0aW9uKGUsbil7cmV0dXJuKG4tZSkvdH0pKTpPZXQ6bnVsbH07dmFyIFBldD0xZTMsd2V0PTZlNCxrZXQ9MzZlNSxEZXQ9ODY0ZTUsRWV0PTYwNDhlNSxBZXQ9eGV0KChmdW5jdGlvbih0KXt0LnNldFRpbWUodC10LmdldE1pbGxpc2Vjb25kcygpKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCtlKlBldCl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS9QZXR9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDU2Vjb25kcygpfSkpLFJldD14ZXQoKGZ1bmN0aW9uKHQpe3Quc2V0VGltZSh0LXQuZ2V0TWlsbGlzZWNvbmRzKCktdC5nZXRTZWNvbmRzKCkqUGV0KX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCtlKndldCl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS93ZXR9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0TWludXRlcygpfSkpLFRldD14ZXQoKGZ1bmN0aW9uKHQpe3Quc2V0VGltZSh0LXQuZ2V0TWlsbGlzZWNvbmRzKCktdC5nZXRTZWNvbmRzKCkqUGV0LXQuZ2V0TWludXRlcygpKndldCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrZSprZXQpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkva2V0fSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEhvdXJzKCl9KSksTmV0PXhldCgoZnVuY3Rpb24odCl7dC5zZXRIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0RGF0ZSh0LmdldERhdGUoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQtKGUuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKndldCkvRGV0fSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldERhdGUoKS0xfSkpO2Z1bmN0aW9uIElldCh0KXtyZXR1cm4geGV0KChmdW5jdGlvbihlKXtlLnNldERhdGUoZS5nZXREYXRlKCktKGUuZ2V0RGF5KCkrNy10KSU3KSxlLnNldEhvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpKzcqZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10LShlLmdldFRpbWV6b25lT2Zmc2V0KCktdC5nZXRUaW1lem9uZU9mZnNldCgpKSp3ZXQpL0VldH0pKX12YXIgemV0PUlldCgwKSxIZXQ9SWV0KDEpO0lldCgyKSxJZXQoMyk7dmFyIEZldD1JZXQoNCk7SWV0KDUpLElldCg2KTt2YXIgTGV0PXhldCgoZnVuY3Rpb24odCl7dC5zZXREYXRlKDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldE1vbnRoKHQuZ2V0TW9udGgoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldE1vbnRoKCktdC5nZXRNb250aCgpKzEyKihlLmdldEZ1bGxZZWFyKCktdC5nZXRGdWxsWWVhcigpKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNb250aCgpfSkpLEJldD14ZXQoKGZ1bmN0aW9uKHQpe3Quc2V0TW9udGgoMCwxKSx0LnNldEhvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXRGdWxsWWVhcigpLXQuZ2V0RnVsbFllYXIoKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRGdWxsWWVhcigpfSkpO0JldC5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gaXNGaW5pdGUodD1NYXRoLmZsb29yKHQpKSYmdD4wP3hldCgoZnVuY3Rpb24oZSl7ZS5zZXRGdWxsWWVhcihNYXRoLmZsb29yKGUuZ2V0RnVsbFllYXIoKS90KSp0KSxlLnNldE1vbnRoKDAsMSksZS5zZXRIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbihlLG4pe2Uuc2V0RnVsbFllYXIoZS5nZXRGdWxsWWVhcigpK24qdCl9KSk6bnVsbH07dmFyIFZldD14ZXQoKGZ1bmN0aW9uKHQpe3Quc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFVUQ0RhdGUodC5nZXRVVENEYXRlKCkrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS9EZXR9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDRGF0ZSgpLTF9KSk7ZnVuY3Rpb24gamV0KHQpe3JldHVybiB4ZXQoKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDRGF0ZShlLmdldFVUQ0RhdGUoKS0oZS5nZXRVVENEYXkoKSs3LXQpJTcpLGUuc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFVUQ0RhdGUodC5nZXRVVENEYXRlKCkrNyplKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQpL0VldH0pKX12YXIgVWV0PWpldCgwKSxXZXQ9amV0KDEpO2pldCgyKSxqZXQoMyk7dmFyIEdldD1qZXQoNCk7amV0KDUpLGpldCg2KTt2YXIgWWV0PXhldCgoZnVuY3Rpb24odCl7dC5zZXRVVENNb250aCgwLDEpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFVUQ0Z1bGxZZWFyKHQuZ2V0VVRDRnVsbFllYXIoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldFVUQ0Z1bGxZZWFyKCktdC5nZXRVVENGdWxsWWVhcigpfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0Z1bGxZZWFyKCl9KSk7ZnVuY3Rpb24gcWV0KHQpe2lmKDA8PXQueSYmdC55PDEwMCl7dmFyIGU9bmV3IERhdGUoLTEsdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpO3JldHVybiBlLnNldEZ1bGxZZWFyKHQueSksZX1yZXR1cm4gbmV3IERhdGUodC55LHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKX1mdW5jdGlvbiBaZXQodCl7aWYoMDw9dC55JiZ0Lnk8MTAwKXt2YXIgZT1uZXcgRGF0ZShEYXRlLlVUQygtMSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCkpO3JldHVybiBlLnNldFVUQ0Z1bGxZZWFyKHQueSksZX1yZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEModC55LHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKSl9ZnVuY3Rpb24gWGV0KHQsZSxuKXtyZXR1cm57eTp0LG06ZSxkOm4sSDowLE06MCxTOjAsTDowfX1ZZXQuZXZlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIGlzRmluaXRlKHQ9TWF0aC5mbG9vcih0KSkmJnQ+MD94ZXQoKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDRnVsbFllYXIoTWF0aC5mbG9vcihlLmdldFVUQ0Z1bGxZZWFyKCkvdCkqdCksZS5zZXRVVENNb250aCgwLDEpLGUuc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24oZSxuKXtlLnNldFVUQ0Z1bGxZZWFyKGUuZ2V0VVRDRnVsbFllYXIoKStuKnQpfSkpOm51bGx9O3ZhciBLZXQsSmV0LFFldD17Ii0iOiIiLF86IiAiLDA6IjAifSwkZXQ9L15ccypcZCsvLHRudD0vXiUvLGVudD0vW1xcXiQqKz98W1xdKCkue31dL2c7ZnVuY3Rpb24gbm50KHQsZSxuKXt2YXIgbz10PDA/Ii0iOiIiLGk9KG8/LXQ6dCkrIiIsYT1pLmxlbmd0aDtyZXR1cm4gbysoYTxuP25ldyBBcnJheShuLWErMSkuam9pbihlKStpOmkpfWZ1bmN0aW9uIG9udCh0KXtyZXR1cm4gdC5yZXBsYWNlKGVudCwiXFwkJiIpfWZ1bmN0aW9uIGludCh0KXtyZXR1cm4gbmV3IFJlZ0V4cCgiXig/OiIrdC5tYXAob250KS5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gYW50KHQpe2Zvcih2YXIgZT17fSxuPS0xLG89dC5sZW5ndGg7KytuPG87KWVbdFtuXS50b0xvd2VyQ2FzZSgpXT1uO3JldHVybiBlfWZ1bmN0aW9uIHJudCh0LGUsbil7dmFyIG89JGV0LmV4ZWMoZS5zbGljZShuLG4rMSkpO3JldHVybiBvPyh0Lnc9K29bMF0sbitvWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gc250KHQsZSxuKXt2YXIgbz0kZXQuZXhlYyhlLnNsaWNlKG4sbisxKSk7cmV0dXJuIG8/KHQudT0rb1swXSxuK29bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBsbnQodCxlLG4pe3ZhciBvPSRldC5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gbz8odC5VPStvWzBdLG4rb1swXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGNudCh0LGUsbil7dmFyIG89JGV0LmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiBvPyh0LlY9K29bMF0sbitvWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gZG50KHQsZSxuKXt2YXIgbz0kZXQuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIG8/KHQuVz0rb1swXSxuK29bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBwbnQodCxlLG4pe3ZhciBvPSRldC5leGVjKGUuc2xpY2UobixuKzQpKTtyZXR1cm4gbz8odC55PStvWzBdLG4rb1swXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIG1udCh0LGUsbil7dmFyIG89JGV0LmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiBvPyh0Lnk9K29bMF0rKCtvWzBdPjY4PzE5MDA6MmUzKSxuK29bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB1bnQodCxlLG4pe3ZhciBvPS9eKFopfChbKy1dXGRcZCkoPzo6PyhcZFxkKSk/Ly5leGVjKGUuc2xpY2UobixuKzYpKTtyZXR1cm4gbz8odC5aPW9bMV0/MDotKG9bMl0rKG9bM118fCIwMCIpKSxuK29bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBmbnQodCxlLG4pe3ZhciBvPSRldC5leGVjKGUuc2xpY2UobixuKzEpKTtyZXR1cm4gbz8odC5xPTMqb1swXS0zLG4rb1swXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGdudCh0LGUsbil7dmFyIG89JGV0LmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiBvPyh0Lm09b1swXS0xLG4rb1swXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGhudCh0LGUsbil7dmFyIG89JGV0LmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiBvPyh0LmQ9K29bMF0sbitvWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gYm50KHQsZSxuKXt2YXIgbz0kZXQuZXhlYyhlLnNsaWNlKG4sbiszKSk7cmV0dXJuIG8/KHQubT0wLHQuZD0rb1swXSxuK29bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB5bnQodCxlLG4pe3ZhciBvPSRldC5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gbz8odC5IPStvWzBdLG4rb1swXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIF9udCh0LGUsbil7dmFyIG89JGV0LmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiBvPyh0Lk09K29bMF0sbitvWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gQ250KHQsZSxuKXt2YXIgbz0kZXQuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIG8/KHQuUz0rb1swXSxuK29bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBNbnQodCxlLG4pe3ZhciBvPSRldC5leGVjKGUuc2xpY2UobixuKzMpKTtyZXR1cm4gbz8odC5MPStvWzBdLG4rb1swXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHZudCh0LGUsbil7dmFyIG89JGV0LmV4ZWMoZS5zbGljZShuLG4rNikpO3JldHVybiBvPyh0Lkw9TWF0aC5mbG9vcihvWzBdLzFlMyksbitvWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24geG50KHQsZSxuKXt2YXIgbz10bnQuZXhlYyhlLnNsaWNlKG4sbisxKSk7cmV0dXJuIG8/bitvWzBdLmxlbmd0aDotMX1mdW5jdGlvbiBPbnQodCxlLG4pe3ZhciBvPSRldC5leGVjKGUuc2xpY2UobikpO3JldHVybiBvPyh0LlE9K29bMF0sbitvWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gUG50KHQsZSxuKXt2YXIgbz0kZXQuZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gbz8odC5zPStvWzBdLG4rb1swXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHdudCh0LGUpe3JldHVybiBubnQodC5nZXREYXRlKCksZSwyKX1mdW5jdGlvbiBrbnQodCxlKXtyZXR1cm4gbm50KHQuZ2V0SG91cnMoKSxlLDIpfWZ1bmN0aW9uIFNudCh0LGUpe3JldHVybiBubnQodC5nZXRIb3VycygpJTEyfHwxMixlLDIpfWZ1bmN0aW9uIERudCh0LGUpe3JldHVybiBubnQoMStOZXQuY291bnQoQmV0KHQpLHQpLGUsMyl9ZnVuY3Rpb24gRW50KHQsZSl7cmV0dXJuIG5udCh0LmdldE1pbGxpc2Vjb25kcygpLGUsMyl9ZnVuY3Rpb24gQW50KHQsZSl7cmV0dXJuIEVudCh0LGUpKyIwMDAifWZ1bmN0aW9uIFJudCh0LGUpe3JldHVybiBubnQodC5nZXRNb250aCgpKzEsZSwyKX1mdW5jdGlvbiBUbnQodCxlKXtyZXR1cm4gbm50KHQuZ2V0TWludXRlcygpLGUsMil9ZnVuY3Rpb24gTm50KHQsZSl7cmV0dXJuIG5udCh0LmdldFNlY29uZHMoKSxlLDIpfWZ1bmN0aW9uIEludCh0KXt2YXIgZT10LmdldERheSgpO3JldHVybiAwPT09ZT83OmV9ZnVuY3Rpb24gem50KHQsZSl7cmV0dXJuIG5udCh6ZXQuY291bnQoQmV0KHQpLTEsdCksZSwyKX1mdW5jdGlvbiBIbnQodCl7dmFyIGU9dC5nZXREYXkoKTtyZXR1cm4gZT49NHx8MD09PWU/RmV0KHQpOkZldC5jZWlsKHQpfWZ1bmN0aW9uIEZudCh0LGUpe3JldHVybiB0PUhudCh0KSxubnQoRmV0LmNvdW50KEJldCh0KSx0KSsoND09PUJldCh0KS5nZXREYXkoKSksZSwyKX1mdW5jdGlvbiBMbnQodCl7cmV0dXJuIHQuZ2V0RGF5KCl9ZnVuY3Rpb24gQm50KHQsZSl7cmV0dXJuIG5udChIZXQuY291bnQoQmV0KHQpLTEsdCksZSwyKX1mdW5jdGlvbiBWbnQodCxlKXtyZXR1cm4gbm50KHQuZ2V0RnVsbFllYXIoKSUxMDAsZSwyKX1mdW5jdGlvbiBqbnQodCxlKXtyZXR1cm4gbm50KCh0PUhudCh0KSkuZ2V0RnVsbFllYXIoKSUxMDAsZSwyKX1mdW5jdGlvbiBVbnQodCxlKXtyZXR1cm4gbm50KHQuZ2V0RnVsbFllYXIoKSUxZTQsZSw0KX1mdW5jdGlvbiBXbnQodCxlKXt2YXIgbj10LmdldERheSgpO3JldHVybiBubnQoKHQ9bj49NHx8MD09PW4/RmV0KHQpOkZldC5jZWlsKHQpKS5nZXRGdWxsWWVhcigpJTFlNCxlLDQpfWZ1bmN0aW9uIEdudCh0KXt2YXIgZT10LmdldFRpbWV6b25lT2Zmc2V0KCk7cmV0dXJuKGU+MD8iLSI6KGUqPS0xLCIrIikpK25udChlLzYwfDAsIjAiLDIpK25udChlJTYwLCIwIiwyKX1mdW5jdGlvbiBZbnQodCxlKXtyZXR1cm4gbm50KHQuZ2V0VVRDRGF0ZSgpLGUsMil9ZnVuY3Rpb24gcW50KHQsZSl7cmV0dXJuIG5udCh0LmdldFVUQ0hvdXJzKCksZSwyKX1mdW5jdGlvbiBabnQodCxlKXtyZXR1cm4gbm50KHQuZ2V0VVRDSG91cnMoKSUxMnx8MTIsZSwyKX1mdW5jdGlvbiBYbnQodCxlKXtyZXR1cm4gbm50KDErVmV0LmNvdW50KFlldCh0KSx0KSxlLDMpfWZ1bmN0aW9uIEtudCh0LGUpe3JldHVybiBubnQodC5nZXRVVENNaWxsaXNlY29uZHMoKSxlLDMpfWZ1bmN0aW9uIEpudCh0LGUpe3JldHVybiBLbnQodCxlKSsiMDAwIn1mdW5jdGlvbiBRbnQodCxlKXtyZXR1cm4gbm50KHQuZ2V0VVRDTW9udGgoKSsxLGUsMil9ZnVuY3Rpb24gJG50KHQsZSl7cmV0dXJuIG5udCh0LmdldFVUQ01pbnV0ZXMoKSxlLDIpfWZ1bmN0aW9uIHRvdCh0LGUpe3JldHVybiBubnQodC5nZXRVVENTZWNvbmRzKCksZSwyKX1mdW5jdGlvbiBlb3QodCl7dmFyIGU9dC5nZXRVVENEYXkoKTtyZXR1cm4gMD09PWU/NzplfWZ1bmN0aW9uIG5vdCh0LGUpe3JldHVybiBubnQoVWV0LmNvdW50KFlldCh0KS0xLHQpLGUsMil9ZnVuY3Rpb24gb290KHQpe3ZhciBlPXQuZ2V0VVRDRGF5KCk7cmV0dXJuIGU+PTR8fDA9PT1lP0dldCh0KTpHZXQuY2VpbCh0KX1mdW5jdGlvbiBpb3QodCxlKXtyZXR1cm4gdD1vb3QodCksbm50KEdldC5jb3VudChZZXQodCksdCkrKDQ9PT1ZZXQodCkuZ2V0VVRDRGF5KCkpLGUsMil9ZnVuY3Rpb24gYW90KHQpe3JldHVybiB0LmdldFVUQ0RheSgpfWZ1bmN0aW9uIHJvdCh0LGUpe3JldHVybiBubnQoV2V0LmNvdW50KFlldCh0KS0xLHQpLGUsMil9ZnVuY3Rpb24gc290KHQsZSl7cmV0dXJuIG5udCh0LmdldFVUQ0Z1bGxZZWFyKCklMTAwLGUsMil9ZnVuY3Rpb24gbG90KHQsZSl7cmV0dXJuIG5udCgodD1vb3QodCkpLmdldFVUQ0Z1bGxZZWFyKCklMTAwLGUsMil9ZnVuY3Rpb24gY290KHQsZSl7cmV0dXJuIG5udCh0LmdldFVUQ0Z1bGxZZWFyKCklMWU0LGUsNCl9ZnVuY3Rpb24gZG90KHQsZSl7dmFyIG49dC5nZXRVVENEYXkoKTtyZXR1cm4gbm50KCh0PW4+PTR8fDA9PT1uP0dldCh0KTpHZXQuY2VpbCh0KSkuZ2V0VVRDRnVsbFllYXIoKSUxZTQsZSw0KX1mdW5jdGlvbiBwb3QoKXtyZXR1cm4iKzAwMDAifWZ1bmN0aW9uIG1vdCgpe3JldHVybiIlIn1mdW5jdGlvbiB1b3QodCl7cmV0dXJuK3R9ZnVuY3Rpb24gZm90KHQpe3JldHVybiBNYXRoLmZsb29yKCt0LzFlMyl9IShmdW5jdGlvbiBnb3QodCl7S2V0PShmdW5jdGlvbiBlKHQpe3ZhciBlPXQuZGF0ZVRpbWUsbj10LmRhdGUsbz10LnRpbWUsaT10LnBlcmlvZHMsYT10LmRheXMscj10LnNob3J0RGF5cyxzPXQubW9udGhzLGw9dC5zaG9ydE1vbnRocyxjPWludChpKSxkPWFudChpKSxwPWludChhKSxtPWFudChhKSx1PWludChyKSxmPWFudChyKSxnPWludChzKSxoPWFudChzKSxiPWludChsKSx5PWFudChsKSxfPXthOmZ1bmN0aW9uIEModCl7cmV0dXJuIHJbdC5nZXREYXkoKV19LEE6ZnVuY3Rpb24gTSh0KXtyZXR1cm4gYVt0LmdldERheSgpXX0sYjpmdW5jdGlvbiB2KHQpe3JldHVybiBsW3QuZ2V0TW9udGgoKV19LEI6ZnVuY3Rpb24geCh0KXtyZXR1cm4gc1t0LmdldE1vbnRoKCldfSxjOm51bGwsZDp3bnQsZTp3bnQsZjpBbnQsZzpqbnQsRzpXbnQsSDprbnQsSTpTbnQsajpEbnQsTDpFbnQsbTpSbnQsTTpUbnQscDpmdW5jdGlvbiBPKHQpe3JldHVybiBpWysodC5nZXRIb3VycygpPj0xMildfSxxOmZ1bmN0aW9uIFAodCl7cmV0dXJuIDErfn4odC5nZXRNb250aCgpLzMpfSxROnVvdCxzOmZvdCxTOk5udCx1OkludCxVOnpudCxWOkZudCx3OkxudCxXOkJudCx4Om51bGwsWDpudWxsLHk6Vm50LFk6VW50LFo6R250LCIlIjptb3R9LHc9e2E6ZnVuY3Rpb24gayh0KXtyZXR1cm4gclt0LmdldFVUQ0RheSgpXX0sQTpmdW5jdGlvbiBTKHQpe3JldHVybiBhW3QuZ2V0VVRDRGF5KCldfSxiOmZ1bmN0aW9uIEQodCl7cmV0dXJuIGxbdC5nZXRVVENNb250aCgpXX0sQjpmdW5jdGlvbiBFKHQpe3JldHVybiBzW3QuZ2V0VVRDTW9udGgoKV19LGM6bnVsbCxkOlludCxlOlludCxmOkpudCxnOmxvdCxHOmRvdCxIOnFudCxJOlpudCxqOlhudCxMOktudCxtOlFudCxNOiRudCxwOmZ1bmN0aW9uIEEodCl7cmV0dXJuIGlbKyh0LmdldFVUQ0hvdXJzKCk+PTEyKV19LHE6ZnVuY3Rpb24gUih0KXtyZXR1cm4gMSt+fih0LmdldFVUQ01vbnRoKCkvMyl9LFE6dW90LHM6Zm90LFM6dG90LHU6ZW90LFU6bm90LFY6aW90LHc6YW90LFc6cm90LHg6bnVsbCxYOm51bGwseTpzb3QsWTpjb3QsWjpwb3QsIiUiOm1vdH0sVD17YTpmdW5jdGlvbiBOKHQsZSxuKXt2YXIgbz11LmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIG8/KHQudz1mW29bMF0udG9Mb3dlckNhc2UoKV0sbitvWzBdLmxlbmd0aCk6LTF9LEE6ZnVuY3Rpb24gSSh0LGUsbil7dmFyIG89cC5leGVjKGUuc2xpY2UobikpO3JldHVybiBvPyh0Lnc9bVtvWzBdLnRvTG93ZXJDYXNlKCldLG4rb1swXS5sZW5ndGgpOi0xfSxiOmZ1bmN0aW9uIHoodCxlLG4pe3ZhciBvPWIuZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gbz8odC5tPXlbb1swXS50b0xvd2VyQ2FzZSgpXSxuK29bMF0ubGVuZ3RoKTotMX0sQjpmdW5jdGlvbiBIKHQsZSxuKXt2YXIgbz1nLmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIG8/KHQubT1oW29bMF0udG9Mb3dlckNhc2UoKV0sbitvWzBdLmxlbmd0aCk6LTF9LGM6ZnVuY3Rpb24gRih0LG4sbyl7cmV0dXJuIFcodCxlLG4sbyl9LGQ6aG50LGU6aG50LGY6dm50LGc6bW50LEc6cG50LEg6eW50LEk6eW50LGo6Ym50LEw6TW50LG06Z250LE06X250LHA6ZnVuY3Rpb24gTCh0LGUsbil7dmFyIG89Yy5leGVjKGUuc2xpY2UobikpO3JldHVybiBvPyh0LnA9ZFtvWzBdLnRvTG93ZXJDYXNlKCldLG4rb1swXS5sZW5ndGgpOi0xfSxxOmZudCxROk9udCxzOlBudCxTOkNudCx1OnNudCxVOmxudCxWOmNudCx3OnJudCxXOmRudCx4OmZ1bmN0aW9uIEIodCxlLG8pe3JldHVybiBXKHQsbixlLG8pfSxYOmZ1bmN0aW9uIFYodCxlLG4pe3JldHVybiBXKHQsbyxlLG4pfSx5Om1udCxZOnBudCxaOnVudCwiJSI6eG50fTtmdW5jdGlvbiBqKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBvLGksYSxyPVtdLHM9LTEsbD0wLGM9dC5sZW5ndGg7Zm9yKG4gaW5zdGFuY2VvZiBEYXRlfHwobj1uZXcgRGF0ZSgrbikpOysrczxjOykzNz09PXQuY2hhckNvZGVBdChzKSYmKHIucHVzaCh0LnNsaWNlKGwscykpLG51bGwhPShpPVFldFtvPXQuY2hhckF0KCsrcyldKT9vPXQuY2hhckF0KCsrcyk6aT0iZSI9PT1vPyIgIjoiMCIsKGE9ZVtvXSkmJihvPWEobixpKSksci5wdXNoKG8pLGw9cysxKTtyZXR1cm4gci5wdXNoKHQuc2xpY2UobCxzKSksci5qb2luKCIiKX19ZnVuY3Rpb24gVSh0LGUpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgbyxpLGE9WGV0KDE5MDAsdm9pZCAwLDEpO2lmKFcoYSx0LG4rPSIiLDApIT1uLmxlbmd0aClyZXR1cm4gbnVsbDtpZigiUSJpbiBhKXJldHVybiBuZXcgRGF0ZShhLlEpO2lmKCJzImluIGEpcmV0dXJuIG5ldyBEYXRlKDFlMyphLnMrKCJMImluIGE/YS5MOjApKTtpZihlJiYhKCJaImluIGEpJiYoYS5aPTApLCJwImluIGEmJihhLkg9YS5IJTEyKzEyKmEucCksdm9pZCAwPT09YS5tJiYoYS5tPSJxImluIGE/YS5xOjApLCJWImluIGEpe2lmKGEuVjwxfHxhLlY+NTMpcmV0dXJuIG51bGw7InciaW4gYXx8KGEudz0xKSwiWiJpbiBhPyhpPShvPVpldChYZXQoYS55LDAsMSkpKS5nZXRVVENEYXkoKSxvPWk+NHx8MD09PWk/V2V0LmNlaWwobyk6V2V0KG8pLG89VmV0Lm9mZnNldChvLDcqKGEuVi0xKSksYS55PW8uZ2V0VVRDRnVsbFllYXIoKSxhLm09by5nZXRVVENNb250aCgpLGEuZD1vLmdldFVUQ0RhdGUoKSsoYS53KzYpJTcpOihpPShvPXFldChYZXQoYS55LDAsMSkpKS5nZXREYXkoKSxvPWk+NHx8MD09PWk/SGV0LmNlaWwobyk6SGV0KG8pLG89TmV0Lm9mZnNldChvLDcqKGEuVi0xKSksYS55PW8uZ2V0RnVsbFllYXIoKSxhLm09by5nZXRNb250aCgpLGEuZD1vLmdldERhdGUoKSsoYS53KzYpJTcpfWVsc2UoIlciaW4gYXx8IlUiaW4gYSkmJigidyJpbiBhfHwoYS53PSJ1ImluIGE/YS51JTc6IlciaW4gYT8xOjApLGk9IloiaW4gYT9aZXQoWGV0KGEueSwwLDEpKS5nZXRVVENEYXkoKTpxZXQoWGV0KGEueSwwLDEpKS5nZXREYXkoKSxhLm09MCxhLmQ9IlciaW4gYT8oYS53KzYpJTcrNyphLlctKGkrNSklNzphLncrNyphLlUtKGkrNiklNyk7cmV0dXJuIloiaW4gYT8oYS5IKz1hLlovMTAwfDAsYS5NKz1hLlolMTAwLFpldChhKSk6cWV0KGEpfX1mdW5jdGlvbiBXKHQsZSxuLG8pe2Zvcih2YXIgaSxhLHI9MCxzPWUubGVuZ3RoLGw9bi5sZW5ndGg7cjxzOyl7aWYobz49bClyZXR1cm4tMTtpZigzNz09PShpPWUuY2hhckNvZGVBdChyKyspKSl7aWYoaT1lLmNoYXJBdChyKyspLCEoYT1UW2kgaW4gUWV0P2UuY2hhckF0KHIrKyk6aV0pfHwobz1hKHQsbixvKSk8MClyZXR1cm4tMX1lbHNlIGlmKGkhPW4uY2hhckNvZGVBdChvKyspKXJldHVybi0xfXJldHVybiBvfXJldHVybiBfLng9aihuLF8pLF8uWD1qKG8sXyksXy5jPWooZSxfKSx3Lng9aihuLHcpLHcuWD1qKG8sdyksdy5jPWooZSx3KSx7Zm9ybWF0OmZ1bmN0aW9uKHQpe3ZhciBlPWoodCs9IiIsXyk7cmV0dXJuIGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sZX0scGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9VSh0Kz0iIiwhMSk7cmV0dXJuIGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sZX0sdXRjRm9ybWF0OmZ1bmN0aW9uKHQpe3ZhciBlPWoodCs9IiIsdyk7cmV0dXJuIGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sZX0sdXRjUGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9VSh0Kz0iIiwhMCk7cmV0dXJuIGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sZX19fSkodCksSmV0PUtldC5mb3JtYXR9KSh7ZGF0ZVRpbWU6IiV4LCAlWCIsZGF0ZToiJS1tLyUtZC8lWSIsdGltZToiJS1JOiVNOiVTICVwIixwZXJpb2RzOlsiQU0iLCJQTSJdLGRheXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLHNob3J0RGF5czpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLG1vbnRoczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sc2hvcnRNb250aHM6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXX0pO3ZhciBob3Q9MzE1MzZlNjtmdW5jdGlvbiBib3QodCl7cmV0dXJuIG5ldyBEYXRlKHQpfWZ1bmN0aW9uIHlvdCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIERhdGU/K3Q6K25ldyBEYXRlKCt0KX1mdW5jdGlvbiBfb3QodCxlLG4sbyxpLGEscixzLGwpe3ZhciBjPWNldChlZXQsZWV0KSxkPWMuaW52ZXJ0LHA9Yy5kb21haW4sbT1sKCIuJUwiKSx1PWwoIjolUyIpLGY9bCgiJUk6JU0iKSxnPWwoIiVJICVwIiksaD1sKCIlYSAlZCIpLGI9bCgiJWIgJWQiKSx5PWwoIiVCIiksXz1sKCIlWSIpLEM9W1tyLDEsMWUzXSxbciw1LDVlM10sW3IsMTUsMTVlM10sW3IsMzAsM2U0XSxbYSwxLDZlNF0sW2EsNSwzZTVdLFthLDE1LDllNV0sW2EsMzAsMThlNV0sW2ksMSwzNmU1XSxbaSwzLDEwOGU1XSxbaSw2LDIxNmU1XSxbaSwxMiw0MzJlNV0sW28sMSw4NjRlNV0sW28sMiwxNzI4ZTVdLFtuLDEsNjA0OGU1XSxbZSwxLDI1OTJlNl0sW2UsMyw3Nzc2ZTZdLFt0LDEsaG90XV07ZnVuY3Rpb24gTShzKXtyZXR1cm4ocihzKTxzP206YShzKTxzP3U6aShzKTxzP2Y6byhzKTxzP2c6ZShzKTxzP24ocyk8cz9oOmI6dChzKTxzP3k6Xykocyl9ZnVuY3Rpb24gdihlLG4sbyxpKXtpZihudWxsPT1lJiYoZT0xMCksIm51bWJlciI9PXR5cGVvZiBlKXt2YXIgYT1NYXRoLmFicyhvLW4pL2Uscj1fNSgoZnVuY3Rpb24odCl7cmV0dXJuIHRbMl19KSkucmlnaHQoQyxhKTtyPT09Qy5sZW5ndGg/KGk9QTUobi9ob3Qsby9ob3QsZSksZT10KTpyPyhpPShyPUNbYS9DW3ItMV1bMl08Q1tyXVsyXS9hP3ItMTpyXSlbMV0sZT1yWzBdKTooaT1NYXRoLm1heChBNShuLG8sZSksMSksZT1zKX1yZXR1cm4gbnVsbD09aT9lOmUuZXZlcnkoaSl9cmV0dXJuIGMuaW52ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgRGF0ZShkKHQpKX0sYy5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/cChZdHQuY2FsbCh0LHlvdCkpOnAoKS5tYXAoYm90KX0sYy50aWNrcz1mdW5jdGlvbih0LGUpe3ZhciBuLG89cCgpLGk9b1swXSxhPW9bby5sZW5ndGgtMV0scj1hPGk7cmV0dXJuIHImJihuPWksaT1hLGE9biksbj0obj12KHQsaSxhLGUpKT9uLnJhbmdlKGksYSsxKTpbXSxyP24ucmV2ZXJzZSgpOm59LGMudGlja0Zvcm1hdD1mdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT1lP006bChlKX0sYy5uaWNlPWZ1bmN0aW9uKHQsZSl7dmFyIG49cCgpO3JldHVybih0PXYodCxuWzBdLG5bbi5sZW5ndGgtMV0sZSkpP3AobWV0KG4sdCkpOmN9LGMuY29weT1mdW5jdGlvbigpe3JldHVybiByZXQoYyxfb3QodCxlLG4sbyxpLGEscixzLGwpKX0sY31mdW5jdGlvbiBDb3QoKXtyZXR1cm4gVXR0LmFwcGx5KF9vdChCZXQsTGV0LHpldCxOZXQsVGV0LFJldCxBZXQsT2V0LEpldCkuZG9tYWluKFtuZXcgRGF0ZSgyZTMsMCwxKSxuZXcgRGF0ZSgyZTMsMCwyKV0pLGFyZ3VtZW50cyl9ZnVuY3Rpb24gTW90KHQpe2Zvcih2YXIgZT10Lmxlbmd0aC82fDAsbj1uZXcgQXJyYXkoZSksbz0wO288ZTspbltvXT0iIyIrdC5zbGljZSg2Km8sNiorK28pO3JldHVybiBufWZ1bmN0aW9uIHZvdCh0KXtyZXR1cm4gWTcodFt0Lmxlbmd0aC0xXSl9dmFyIHhvdD12b3QobmV3IEFycmF5KDMpLmNvbmNhdCgiZGVlYmY3OWVjYWUxMzE4MmJkIiwiZWZmM2ZmYmRkN2U3NmJhZWQ2MjE3MWI1IiwiZWZmM2ZmYmRkN2U3NmJhZWQ2MzE4MmJkMDg1MTljIiwiZWZmM2ZmYzZkYmVmOWVjYWUxNmJhZWQ2MzE4MmJkMDg1MTljIiwiZWZmM2ZmYzZkYmVmOWVjYWUxNmJhZWQ2NDI5MmM2MjE3MWI1MDg0NTk0IiwiZjdmYmZmZGVlYmY3YzZkYmVmOWVjYWUxNmJhZWQ2NDI5MmM2MjE3MWI1MDg0NTk0IiwiZjdmYmZmZGVlYmY3YzZkYmVmOWVjYWUxNmJhZWQ2NDI5MmM2MjE3MWI1MDg1MTljMDgzMDZiIikubWFwKE1vdCkpLE9vdD12b3QobmV3IEFycmF5KDMpLmNvbmNhdCgiZjBmMGYwYmRiZGJkNjM2MzYzIiwiZjdmN2Y3Y2NjY2NjOTY5Njk2NTI1MjUyIiwiZjdmN2Y3Y2NjY2NjOTY5Njk2NjM2MzYzMjUyNTI1IiwiZjdmN2Y3ZDlkOWQ5YmRiZGJkOTY5Njk2NjM2MzYzMjUyNTI1IiwiZjdmN2Y3ZDlkOWQ5YmRiZGJkOTY5Njk2NzM3MzczNTI1MjUyMjUyNTI1IiwiZmZmZmZmZjBmMGYwZDlkOWQ5YmRiZGJkOTY5Njk2NzM3MzczNTI1MjUyMjUyNTI1IiwiZmZmZmZmZjBmMGYwZDlkOWQ5YmRiZGJkOTY5Njk2NzM3MzczNTI1MjUyMjUyNTI1MDAwMDAwIikubWFwKE1vdCkpLFBvdD12b3QobmV3IEFycmF5KDMpLmNvbmNhdCgiZmVlMGQyZmM5MjcyZGUyZDI2IiwiZmVlNWQ5ZmNhZTkxZmI2YTRhY2IxODFkIiwiZmVlNWQ5ZmNhZTkxZmI2YTRhZGUyZDI2YTUwZjE1IiwiZmVlNWQ5ZmNiYmExZmM5MjcyZmI2YTRhZGUyZDI2YTUwZjE1IiwiZmVlNWQ5ZmNiYmExZmM5MjcyZmI2YTRhZWYzYjJjY2IxODFkOTkwMDBkIiwiZmZmNWYwZmVlMGQyZmNiYmExZmM5MjcyZmI2YTRhZWYzYjJjY2IxODFkOTkwMDBkIiwiZmZmNWYwZmVlMGQyZmNiYmExZmM5MjcyZmI2YTRhZWYzYjJjY2IxODFkYTUwZjE1NjcwMDBkIikubWFwKE1vdCkpO2Z1bmN0aW9uIHdvdCh0KXtyZXR1cm4gZnVuY3Rpb24gZSgpe3JldHVybiB0fX1mdW5jdGlvbiBrb3QodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIFNvdCh0KXtyZXR1cm4gbmV3IGtvdCh0KX1mdW5jdGlvbiBEb3QodCl7cmV0dXJuIHRbMF19ZnVuY3Rpb24gRW90KHQpe3JldHVybiB0WzFdfWZ1bmN0aW9uIEFvdCgpe3ZhciB0PURvdCxlPUVvdCxuPXdvdCghMCksbz1udWxsLGk9U290LGE9bnVsbDtmdW5jdGlvbiByKHIpe3ZhciBzLGwsYyxkPXIubGVuZ3RoLHA9ITE7Zm9yKG51bGw9PW8mJihhPWkoYz1NdHQoKSkpLHM9MDtzPD1kOysrcykhKHM8ZCYmbihsPXJbc10scyxyKSk9PT1wJiYoKHA9IXApP2EubGluZVN0YXJ0KCk6YS5saW5lRW5kKCkpLHAmJmEucG9pbnQoK3QobCxzLHIpLCtlKGwscyxyKSk7aWYoYylyZXR1cm4gYT1udWxsLGMrIiJ8fG51bGx9cmV0dXJuIHIueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOndvdCgrZSkscik6dH0sci55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6d290KCt0KSxyKTplfSxyLmRlZmluZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp3b3QoISF0KSxyKTpufSxyLmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQsbnVsbCE9byYmKGE9aShvKSkscik6aX0sci5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT10P289YT1udWxsOmE9aShvPXQpLHIpOm99LHJ9ZnVuY3Rpb24gUm90KHQsZSxuKXt0Ll9jb250ZXh0LmJlemllckN1cnZlVG8odC5feDErdC5fayoodC5feDItdC5feDApLHQuX3kxK3QuX2sqKHQuX3kyLXQuX3kwKSx0Ll94Mit0Ll9rKih0Ll94MS1lKSx0Ll95Mit0Ll9rKih0Ll95MS1uKSx0Ll94Mix0Ll95Mil9ZnVuY3Rpb24gVG90KHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2s9KDEtZSkvNn1mdW5jdGlvbiBOb3QodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fYWxwaGE9ZX1rb3QucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjtkZWZhdWx0OnRoaXMuX2NvbnRleHQubGluZVRvKHQsZSl9fX0sVG90LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzpSb3QodGhpcyx0aGlzLl94MSx0aGlzLl95MSl9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gxPXQsdGhpcy5feTE9ZTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0OlJvdCh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX0sTm90LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gyLHRoaXMuX3kyKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7aWYodD0rdCxlPStlLHRoaXMuX3BvaW50KXt2YXIgbj10aGlzLl94Mi10LG89dGhpcy5feTItZTt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KG4qbitvKm8sdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO2RlZmF1bHQ6IShmdW5jdGlvbiBpKHQsZSxuKXt2YXIgbz10Ll94MSxpPXQuX3kxLGE9dC5feDIscj10Ll95MjtpZih0Ll9sMDFfYT4xZS0xMil7dmFyIHM9Mip0Ll9sMDFfMmErMyp0Ll9sMDFfYSp0Ll9sMTJfYSt0Ll9sMTJfMmEsbD0zKnQuX2wwMV9hKih0Ll9sMDFfYSt0Ll9sMTJfYSk7bz0obypzLXQuX3gwKnQuX2wxMl8yYSt0Ll94Mip0Ll9sMDFfMmEpL2wsaT0oaSpzLXQuX3kwKnQuX2wxMl8yYSt0Ll95Mip0Ll9sMDFfMmEpL2x9aWYodC5fbDIzX2E+MWUtMTIpe3ZhciBjPTIqdC5fbDIzXzJhKzMqdC5fbDIzX2EqdC5fbDEyX2ErdC5fbDEyXzJhLGQ9Myp0Ll9sMjNfYSoodC5fbDIzX2ErdC5fbDEyX2EpO2E9KGEqYyt0Ll94MSp0Ll9sMjNfMmEtZSp0Ll9sMTJfMmEpL2Qscj0ocipjK3QuX3kxKnQuX2wyM18yYS1uKnQuX2wxMl8yYSkvZH10Ll9jb250ZXh0LmJlemllckN1cnZlVG8obyxpLGEscix0Ll94Mix0Ll95Mil9KSh0aGlzLHQsZSl9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19O3ZhciBJb3Q9KGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gZT9uZXcgTm90KHQsZSk6bmV3IFRvdCh0LDApfXJldHVybiBuLmFscGhhPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0pKC41KTtjb25zdCB6b3Q9MWU0LEhvdD0uMDAxLEZvdD1MdHQoIi4yfmUiKSxMb3Q9THR0KCIuNH5yIiksQm90PUx0dCgiLH4iKTtmdW5jdGlvbiBWb3QodCl7aWYoMD09PXQpcmV0dXJuIjAiO2NvbnN0IGU9TWF0aC5hYnModCk7cmV0dXJuIGU+PXpvdHx8ZTxIb3Q/Rm90KHQpOkxvdCh0KX1jb25zdCBqb3Q9e2Zvcm1hdFRpY2s6Vm90LGZvcm1hdFNob3J0OlZvdCxmb3JtYXRSZWFkYWJsZSh0KXtjb25zdCBlPU1hdGguYWJzKHQpO3JldHVybiBlPj16b3R8fGU8SG90P0ZvdCh0KTpCb3QodCl9LGZvcm1hdExvbmc6Qm90fSxVb3Q9THR0KCIwLjN+cyIpLFdvdD1MdHQoIiwuM35mIik7ZnVuY3Rpb24gR290KHQpe2NvbnN0IGU9TWF0aC5hYnModCk7cmV0dXJuIGU+PXpvdHx8ZTxIb3Q/VW90KHQpOldvdCh0KX1jb25zdCBZb3Q9e2Zvcm1hdFRpY2s6R290LGZvcm1hdFNob3J0OkdvdCxmb3JtYXRSZWFkYWJsZTpHb3QsZm9ybWF0TG9uZzpHb3R9LHFvdD0zNmU1LFpvdD04NjRlNSxYb3Q9MzE1MzZlNixLb3Q9THR0KCIuNH4iKTtmdW5jdGlvbiBKb3QodCl7aWYoMD09PXQpcmV0dXJuIjAiO2xldCBlPU1hdGguc2lnbih0KT4wPyIiOiItIjtjb25zdCBuPU1hdGguYWJzKHQpO3JldHVybiBlKz1uPDFlMz9gJHtLb3Qobil9IG1zYDpuPDZlND9gJHtLb3Qobi8xZTMpfSBzZWNgOm48cW90P2Ake0tvdChuLzZlNCl9IG1pbmA6bjxab3Q/YCR7S290KG4vcW90KX0gaHJgOm48WG90P2Ake0tvdChuL1pvdCl9IGRheWA6YCR7S290KG4vWG90KX0geXJgLGV9Y29uc3QgUW90PXtmb3JtYXRUaWNrOkpvdCxmb3JtYXRTaG9ydDpKb3QsZm9ybWF0UmVhZGFibGU6Sm90LGZvcm1hdExvbmc6Sm90fSwkb3Q9Q290KCkudGlja0Zvcm1hdCgpO2xldCB0aXQ7Y29uc3QgZWl0PXtmb3JtYXRUaWNrOnQ9PiRvdChuZXcgRGF0ZSh0KSksZm9ybWF0U2hvcnQ6dD0+bmV3IERhdGUodCkudG9Mb2NhbGVTdHJpbmcodGl0LHt5ZWFyOiJudW1lcmljIixtb250aDoic2hvcnQiLGRheToibnVtZXJpYyIsaG91cjoibnVtZXJpYyIsbWludXRlOiJudW1lcmljIixzZWNvbmQ6Im51bWVyaWMifSksZm9ybWF0UmVhZGFibGU6dD0+bmV3IERhdGUodCkudG9Mb2NhbGVTdHJpbmcodGl0LHt5ZWFyOiJudW1lcmljIixtb250aDoic2hvcnQiLGRheToibnVtZXJpYyIsaG91cjoibnVtZXJpYyIsbWludXRlOiJudW1lcmljIixzZWNvbmQ6Im51bWVyaWMiLHRpbWVab25lTmFtZToic2hvcnQifSksZm9ybWF0TG9uZzp0PT5uZXcgRGF0ZSh0KS50b0xvY2FsZVN0cmluZyh0aXQse3llYXI6Im51bWVyaWMiLG1vbnRoOiJsb25nIixkYXk6Im51bWVyaWMiLGhvdXI6Im51bWVyaWMiLG1pbnV0ZToibnVtZXJpYyIsc2Vjb25kOiJudW1lcmljIix0aW1lWm9uZU5hbWU6InNob3J0IixmcmFjdGlvbmFsU2Vjb25kRGlnaXRzOjN9KX07ZnVuY3Rpb24gbml0KHQpe3N3aXRjaCh0KXtjYXNlIHI1LkxJTkVBUjpyZXR1cm4gbmV3IG9pdDtjYXNlIHI1LkxPRzEwOnJldHVybiBuZXcgaWl0O2Nhc2UgcjUuVElNRTpyZXR1cm4gbmV3IGFpdDtkZWZhdWx0OnRocm93IG5ldyBSYW5nZUVycm9yKGBTY2FsZVR5cGUgJHt0fSBub3Qgc3VwcG9ydGVkLmApfX1jbGFzcyBvaXR7Y29uc3RydWN0b3IoKXt0aGlzLmRlZmF1bHRGb3JtYXR0ZXI9am90fXRyYW5zZm9ybSh0LGUsbil7Y29uc3RbbyxpXT10LGE9aS1vLFtyLHNdPWU7cmV0dXJuIDA9PT1hP3I6KHMtcikvYSoobi1vKStyfWZvcndhcmQodCxlLG4pe3JldHVybiB0aGlzLnRyYW5zZm9ybSh0LGUsbil9cmV2ZXJzZSh0LGUsbil7cmV0dXJuIHRoaXMudHJhbnNmb3JtKGUsdCxuKX1uaWNlRG9tYWluKHQpe2xldFtlLG5dPXQ7aWYobjxlKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBpbnB1dDogbWluIGlzIGxhcmdlciB0aGFuIG1heCIpO2lmKG49PT1lKXJldHVybiAwPT09ZT9bLTEsMV06ZTwwP1syKmUsMF06WzAsMiplXTtjb25zdCBvPXBldCgpLGk9LjA1KihuLWUrTnVtYmVyLkVQU0lMT04pLFthLHJdPW8uZG9tYWluKFtlLWksbitpXSkubmljZSgpLmRvbWFpbigpO3JldHVyblthLHJdfXRpY2tzKHQsZSl7cmV0dXJuIHBldCgpLmRvbWFpbih0KS50aWNrcyhlKX1pc1NhZmVOdW1iZXIodCl7cmV0dXJuIE51bWJlci5pc0Zpbml0ZSh0KX19Y2xhc3MgaWl0e2NvbnN0cnVjdG9yKCl7dGhpcy5kZWZhdWx0Rm9ybWF0dGVyPWpvdH10cmFuc2Zvcm0odCl7cmV0dXJuIE1hdGgubG9nMTAodD4wP3Q6TnVtYmVyLk1JTl9WQUxVRSl9dW50cmFuc2Zvcm0odCl7cmV0dXJuIE1hdGguZXhwKHQvTWF0aC5MT0cxMEUpfWZvcndhcmQodCxlLG4pe2lmKG48PTApcmV0dXJuIGVbMF07Y29uc3RbbyxpXT10LFthLHJdPWUscz10aGlzLnRyYW5zZm9ybShvKSxsPXRoaXMudHJhbnNmb3JtKGkpLXMsYz1yLWE7cmV0dXJuIG49dGhpcy50cmFuc2Zvcm0obiksYy8obCtOdW1iZXIuRVBTSUxPTikqKG4tcykrYX1yZXZlcnNlKHQsZSxuKXtjb25zdFtvLGldPXQsW2Escl09ZSxzPXRoaXMudHJhbnNmb3JtKG8pLGw9dGhpcy50cmFuc2Zvcm0oaSk7cmV0dXJuIHRoaXMudW50cmFuc2Zvcm0oKGwtcykvKHItYStOdW1iZXIuRVBTSUxPTikqKG4tYSkrcyl9bmljZURvbWFpbih0KXtjb25zdFtlLG5dPXQ7aWYoZT5uKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBpbnB1dDogbWluIGlzIGxhcmdlciB0aGFuIG1heCIpO2NvbnN0IG89TWF0aC5tYXgoZSxOdW1iZXIuTUlOX1ZBTFVFKSxpPU1hdGgubWF4KG4sTnVtYmVyLk1JTl9WQUxVRSk7cmV0dXJuIG48PTA/W051bWJlci5NSU5fVkFMVUUsMV06W01hdGgubWF4KE51bWJlci5NSU5fVkFMVUUsLjUqbyksMippXX10aWNrcyh0LGUpe2NvbnN0IG49dFswXTw9MD9OdW1iZXIuTUlOX1ZBTFVFOnRbMF0sbz10WzFdPD0wP051bWJlci5NSU5fVkFMVUU6dFsxXSxpPUNldCgpLmRvbWFpbihbbixvXSkudGlja3MoZSk7cmV0dXJuIGkubGVuZ3RoP2k6dH1pc1NhZmVOdW1iZXIodCl7cmV0dXJuIE51bWJlci5pc0Zpbml0ZSh0KSYmdD4wfX1jbGFzcyBhaXR7Y29uc3RydWN0b3IoKXt0aGlzLnNjYWxlPUNvdCgpLHRoaXMuZGVmYXVsdEZvcm1hdHRlcj1laXR9Zm9yd2FyZCh0LGUsbil7cmV0dXJuIHRoaXMuc2NhbGUuZG9tYWluKHQpLnJhbmdlKGUpKG4pfXJldmVyc2UodCxlLG4pe3JldHVybiB0aGlzLnNjYWxlLmRvbWFpbih0KS5yYW5nZShlKS5pbnZlcnQobikuZ2V0VGltZSgpfW5pY2VEb21haW4odCl7Y29uc3RbZSxuXT10aGlzLnNjYWxlLmRvbWFpbih0KS5uaWNlKCkuZG9tYWluKCk7cmV0dXJuW2UuZ2V0VGltZSgpLG4uZ2V0VGltZSgpXX10aWNrcyh0LGUpe3JldHVybiB0aGlzLnNjYWxlLmRvbWFpbih0KS50aWNrcyhlKS5tYXAoKHQ9PnQuZ2V0VGltZSgpKSl9aXNTYWZlTnVtYmVyKHQpe3JldHVybiBOdW1iZXIuaXNGaW5pdGUodCl9fWNvbnN0IHJpdD1Cb29sZWFuKHNlbGYuaGFzT3duUHJvcGVydHkoImRvY3VtZW50IikmJmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLmdldENvbnRleHQoIndlYmdsMiIpKTtmdW5jdGlvbiBzaXQoKXtyZXR1cm4gc2VsZi5oYXNPd25Qcm9wZXJ0eSgiT2Zmc2NyZWVuQ2FudmFzIil9ZnVuY3Rpb24gbGl0KHQsZSl7aWYodC5sZW5ndGghPT1lLmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKylpZih0W25dIT09ZVtuXSlyZXR1cm4hMTtyZXR1cm4hMH1jbGFzcyBjaXR7Y29uc3RydWN0b3IoKXt0aGlzLnhTY2FsZT1uaXQocjUuTElORUFSKSx0aGlzLnlTY2FsZT1uaXQocjUuTElORUFSKSx0aGlzLmRvbUNvbnRhaW5lclJlY3Q9e3g6MCx3aWR0aDoxLHk6MCxoZWlnaHQ6MX0sdGhpcy5sYXN0VXBkYXRlZD0wLHRoaXMuY3VycmVudFZpZXdCb3hSZWN0PXt4OjAsd2lkdGg6MSx5OjAsaGVpZ2h0OjF9fWdldFVwZGF0ZUlkZW50aWZpZXIoKXtyZXR1cm4gdGhpcy5sYXN0VXBkYXRlZH11cGRhdGVJZGVudGlmaWVyKCl7dGhpcy5sYXN0VXBkYXRlZCsrfWlzWUF4aXNQb2ludGVkRG93bigpe3JldHVybiEwfXNldFhTY2FsZSh0KXt0aGlzLnhTY2FsZT10LHRoaXMudXBkYXRlSWRlbnRpZmllcigpfXNldFlTY2FsZSh0KXt0aGlzLnlTY2FsZT10LHRoaXMudXBkYXRlSWRlbnRpZmllcigpfWdldEN1cnJlbnRWaWV3Qm94UmVjdCgpe3JldHVybiB0aGlzLmN1cnJlbnRWaWV3Qm94UmVjdH1zZXRWaWV3Qm94UmVjdCh0KXt0aGlzLmN1cnJlbnRWaWV3Qm94UmVjdD10LHRoaXMudXBkYXRlSWRlbnRpZmllcigpfXNldERvbUNvbnRhaW5lclJlY3QodCl7dGhpcy5kb21Db250YWluZXJSZWN0PXQsdGhpcy51cGRhdGVJZGVudGlmaWVyKCl9dHJhbnNmb3JtRGF0YVRvVWlDb29yZCh0LGUpe2NvbnN0IG49dCxvPShmdW5jdGlvbiBpKHQpe3JldHVybnt4Olt0LngsdC54K3Qud2lkdGhdLHk6W3QueSx0LnkrdC5oZWlnaHRdfX0pKHRoaXMuY3VycmVudFZpZXdCb3hSZWN0KTtyZXR1cm5bdGhpcy54U2NhbGUuZm9yd2FyZChvLngsW24ueCxuLngrbi53aWR0aF0sZVswXSksdGhpcy55U2NhbGUuZm9yd2FyZChvLnksdGhpcy5pc1lBeGlzUG9pbnRlZERvd24oKT9bbi55K24uaGVpZ2h0LG4ueV06W24ueSxuLnkrbi5oZWlnaHRdLGVbMV0pXX19ZnVuY3Rpb24gZGl0KHQsZSxuLG8pe2NvbnN0e2NvbG9yOmksdmlzaWJsZTphLG9wYWNpdHk6cn09bztsZXQgcz10O2lmKHMpe2lmKCFhKXJldHVybiBzLnN0eWxlLmRpc3BsYXk9Im5vbmUiLHN9ZWxzZXtpZighYSlyZXR1cm4gbnVsbDtzPWUoKX1yZXR1cm4gcz1uKHMpLHMuc3R5bGUuZGlzcGxheT0iIixzLnN0eWxlLnN0cm9rZT1pLHMuc3R5bGUub3BhY2l0eT1TdHJpbmcobnVsbCE9cj9yOjEpLHN9Y2xhc3MgcGl0e2NvbnN0cnVjdG9yKHQpe3RoaXMuc3ZnPXR9Zmx1c2goKXt9b25SZXNpemUodCl7fWRlc3Ryb3lPYmplY3QodCl7dGhpcy5zdmcucmVtb3ZlQ2hpbGQodC5kb20pfXNldFVzZURhcmtNb2RlKHQpe31jcmVhdGVQYXRoRFN0cmluZyh0KXtpZighdC5sZW5ndGgpcmV0dXJuIiI7Y29uc3QgZT1uZXcgQXJyYXkodC5sZW5ndGgvMik7ZVswXT1gTSR7dFswXX0sJHt0WzFdfWA7Zm9yKGxldCBuPTE7bjx0Lmxlbmd0aC8yO24rKyllW25dPWBMJHt0WzIqbl19LCR7dFsyKm4rMV19YDtyZXR1cm4gZS5qb2luKCIiKX1jcmVhdGVPclVwZGF0ZUxpbmVPYmplY3QodCxlLG4pe2NvbnN0IG89ZGl0KG51bGw9PXQ/dm9pZCAwOnQuZG9tLCgoKT0+e2NvbnN0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInBhdGgiKTt0LnN0eWxlLmZpbGw9Im5vbmUiO2NvbnN0IG49dGhpcy5jcmVhdGVQYXRoRFN0cmluZyhlKTtyZXR1cm4gdC5zZXRBdHRyaWJ1dGUoImQiLG4pLHRoaXMuc3ZnLmFwcGVuZENoaWxkKHQpLHR9KSwobj0+e2lmKCEobnVsbD09dD92b2lkIDA6dC5kYXRhKXx8IWxpdChlLG51bGw9PXQ/dm9pZCAwOnQuZGF0YSkpe2NvbnN0IHQ9dGhpcy5jcmVhdGVQYXRoRFN0cmluZyhlKTtuLnNldEF0dHJpYnV0ZSgiZCIsdCl9cmV0dXJuIG59KSxuKTtyZXR1cm4gbnVsbD09PW8/bnVsbDooby5zdHlsZS5zdHJva2VXaWR0aD1TdHJpbmcobi53aWR0aCkse2RvbTpvLGRhdGE6ZX0pfWNyZWF0ZU9yVXBkYXRlVHJpYW5nbGVPYmplY3QodCxlLG4pe2NvbnN0e3NpemU6byxjb2xvcjppfT1uLGE9bypNYXRoLnNxcnQoMykvMixyPW5ldyBGbG9hdDMyQXJyYXkoW2UueC1vLzIsZS55K2EvMyxlLngrby8yLGUueSthLzMsZS54LGUueS0yKmEvM10pLHM9ZGl0KG51bGw9PXQ/dm9pZCAwOnQuZG9tLCgoKT0+e2NvbnN0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInBhdGgiKTt0LmNsYXNzTGlzdC5hZGQoInRyaWFuZ2xlIiksdC5zdHlsZS5maWxsPSJub25lIjtjb25zdCBlPXRoaXMuY3JlYXRlUGF0aERTdHJpbmcocik7cmV0dXJuIHQuc2V0QXR0cmlidXRlKCJkIixlKyJaIiksdGhpcy5zdmcuYXBwZW5kQ2hpbGQodCksdH0pLCh0PT57Y29uc3QgZT10aGlzLmNyZWF0ZVBhdGhEU3RyaW5nKHIpO3JldHVybiB0LnNldEF0dHJpYnV0ZSgiZCIsZSsiWiIpLHR9KSxuKTtyZXR1cm4gbnVsbD09PXM/bnVsbDoocy5zdHlsZS5maWxsPWkse2RvbTpzLGRhdGE6cn0pfWNyZWF0ZU9yVXBkYXRlQ2lyY2xlT2JqZWN0KHQsZSxuKXtjb25zdHtjb2xvcjpvLHJhZGl1czppfT1uLGE9ZGl0KG51bGw9PXQ/dm9pZCAwOnQuZG9tLCgoKT0+e2NvbnN0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImNpcmNsZSIpO3JldHVybiB0LnN0eWxlLmZpbGw9byx0LnNldEF0dHJpYnV0ZSgiY3giLFN0cmluZyhlLngpKSx0LnNldEF0dHJpYnV0ZSgiY3kiLFN0cmluZyhlLnkpKSx0LnNldEF0dHJpYnV0ZSgiciIsU3RyaW5nKGkpKSx0aGlzLnN2Zy5hcHBlbmRDaGlsZCh0KSx0fSksKHQ9Pih0LnN0eWxlLmZpbGw9byx0LnNldEF0dHJpYnV0ZSgiY3giLFN0cmluZyhlLngpKSx0LnNldEF0dHJpYnV0ZSgiY3kiLFN0cmluZyhlLnkpKSx0LnNldEF0dHJpYnV0ZSgiciIsU3RyaW5nKGkpKSx0KSksbik7cmV0dXJuIG51bGw9PT1hP251bGw6e2RvbTphLGRhdGE6ZX19Y3JlYXRlT3JVcGRhdGVUcmFwZXpvaWRPYmplY3QodCxlLG4sbyl7aWYoZS55IT09bi55KXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnB1dCBlcnJvcjogc3RhcnQueSAhPSBlbmQueS4iKTtjb25zdHthbHRpdHVkZTppLGNvbG9yOmF9PW8scj0yL01hdGguc3FydCgzKSppLHM9bmV3IEZsb2F0MzJBcnJheShbZS54LXIvMixlLnkraS8yLGUueCxlLnktaS8yLG4ueCxuLnktaS8yLG4ueCtyLzIsbi55K2kvMl0pLGw9ZGl0KG51bGw9PXQ/dm9pZCAwOnQuZG9tLCgoKT0+e2NvbnN0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInBhdGgiKTt0LmNsYXNzTGlzdC5hZGQoInRyYXBlem9pZCIpLHQuc3R5bGUuZmlsbD0ibm9uZSI7Y29uc3QgZT10aGlzLmNyZWF0ZVBhdGhEU3RyaW5nKHMpO3JldHVybiB0LnNldEF0dHJpYnV0ZSgiZCIsZSsiWiIpLHRoaXMuc3ZnLmFwcGVuZENoaWxkKHQpLHR9KSwodD0+e2NvbnN0IGU9dGhpcy5jcmVhdGVQYXRoRFN0cmluZyhzKTtyZXR1cm4gdC5zZXRBdHRyaWJ1dGUoImQiLGUrIloiKSx0fSksbyk7cmV0dXJuIG51bGw9PT1sP251bGw6KGwuc3R5bGUuZmlsbD1hLHtkb206bCxkYXRhOnN9KX19Y29uc3QgbWl0PTEwMCx1aXQ9MWUzLGZpdD0xMDAxLGdpdD0xMDAyLGhpdD0xMDAzLGJpdD0xMDA2LHlpdD0xMDA4LF9pdD0xMDEyLENpdD0xMDE0LE1pdD0xMDE1LHZpdD0xMDE2LHhpdD0xMDIwLE9pdD0xMDIyLFBpdD0xMDIzLHdpdD0xMDI2LGtpdD0xMDI3LFNpdD0yMzAwLERpdD0yMzAxLEVpdD0yMzAyLEFpdD0yNDAwLFJpdD0yNDAxLFRpdD0yNDAyLE5pdD0zZTMsSWl0PTc2ODAseml0PTM1MDQ0LEhpdD0zNTA0OCxGaXQ9IjMwMCBlcyI7ZnVuY3Rpb24gTGl0KCl7fU9iamVjdC5hc3NpZ24oTGl0LnByb3RvdHlwZSx7YWRkRXZlbnRMaXN0ZW5lcjpmdW5jdGlvbih0LGUpe3ZvaWQgMD09PXRoaXMuX2xpc3RlbmVycyYmKHRoaXMuX2xpc3RlbmVycz17fSk7Y29uc3Qgbj10aGlzLl9saXN0ZW5lcnM7dm9pZCAwPT09blt0XSYmKG5bdF09W10pLC0xPT09blt0XS5pbmRleE9mKGUpJiZuW3RdLnB1c2goZSl9LGhhc0V2ZW50TGlzdGVuZXI6ZnVuY3Rpb24odCxlKXtpZih2b2lkIDA9PT10aGlzLl9saXN0ZW5lcnMpcmV0dXJuITE7Y29uc3Qgbj10aGlzLl9saXN0ZW5lcnM7cmV0dXJuIHZvaWQgMCE9PW5bdF0mJi0xIT09blt0XS5pbmRleE9mKGUpfSxyZW1vdmVFdmVudExpc3RlbmVyOmZ1bmN0aW9uKHQsZSl7aWYodm9pZCAwPT09dGhpcy5fbGlzdGVuZXJzKXJldHVybjtjb25zdCBuPXRoaXMuX2xpc3RlbmVyc1t0XTtpZih2b2lkIDAhPT1uKXtjb25zdCB0PW4uaW5kZXhPZihlKTstMSE9PXQmJm4uc3BsaWNlKHQsMSl9fSxkaXNwYXRjaEV2ZW50OmZ1bmN0aW9uKHQpe2lmKHZvaWQgMD09PXRoaXMuX2xpc3RlbmVycylyZXR1cm47Y29uc3QgZT10aGlzLl9saXN0ZW5lcnNbdC50eXBlXTtpZih2b2lkIDAhPT1lKXt0LnRhcmdldD10aGlzO2NvbnN0IG49ZS5zbGljZSgwKTtmb3IobGV0IGU9MCxvPW4ubGVuZ3RoO2U8bztlKyspbltlXS5jYWxsKHRoaXMsdCl9fX0pO2NvbnN0IEJpdD1bXTtmb3IobGV0IHQ9MDt0PDI1Njt0KyspQml0W3RdPSh0PDE2PyIwIjoiIikrdC50b1N0cmluZygxNik7bGV0IFZpdD0xMjM0NTY3O2NvbnN0IGppdD17REVHMlJBRDpNYXRoLlBJLzE4MCxSQUQyREVHOjE4MC9NYXRoLlBJLGdlbmVyYXRlVVVJRDpmdW5jdGlvbigpe2NvbnN0IHQ9NDI5NDk2NzI5NSpNYXRoLnJhbmRvbSgpfDAsZT00Mjk0OTY3Mjk1Kk1hdGgucmFuZG9tKCl8MCxuPTQyOTQ5NjcyOTUqTWF0aC5yYW5kb20oKXwwLG89NDI5NDk2NzI5NSpNYXRoLnJhbmRvbSgpfDA7cmV0dXJuKEJpdFsyNTUmdF0rQml0W3Q+PjgmMjU1XStCaXRbdD4+MTYmMjU1XStCaXRbdD4+MjQmMjU1XSsiLSIrQml0WzI1NSZlXStCaXRbZT4+OCYyNTVdKyItIitCaXRbZT4+MTYmMTV8NjRdK0JpdFtlPj4yNCYyNTVdKyItIitCaXRbNjMmbnwxMjhdK0JpdFtuPj44JjI1NV0rIi0iK0JpdFtuPj4xNiYyNTVdK0JpdFtuPj4yNCYyNTVdK0JpdFsyNTUmb10rQml0W28+PjgmMjU1XStCaXRbbz4+MTYmMjU1XStCaXRbbz4+MjQmMjU1XSkudG9VcHBlckNhc2UoKX0sY2xhbXA6ZnVuY3Rpb24odCxlLG4pe3JldHVybiBNYXRoLm1heChlLE1hdGgubWluKG4sdCkpfSxldWNsaWRlYW5Nb2R1bG86ZnVuY3Rpb24odCxlKXtyZXR1cm4odCVlK2UpJWV9LG1hcExpbmVhcjpmdW5jdGlvbih0LGUsbixvLGkpe3JldHVybiBvKyh0LWUpKihpLW8pLyhuLWUpfSxsZXJwOmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4oMS1uKSp0K24qZX0sZGFtcDpmdW5jdGlvbih0LGUsbixvKXtyZXR1cm4gaml0LmxlcnAodCxlLDEtTWF0aC5leHAoLW4qbykpfSxwaW5ncG9uZzpmdW5jdGlvbih0LGU9MSl7cmV0dXJuIGUtTWF0aC5hYnMoaml0LmV1Y2xpZGVhbk1vZHVsbyh0LDIqZSktZSl9LHNtb290aHN0ZXA6ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0PD1lPzA6dD49bj8xOih0PSh0LWUpLyhuLWUpKSp0KigzLTIqdCl9LHNtb290aGVyc3RlcDpmdW5jdGlvbih0LGUsbil7cmV0dXJuIHQ8PWU/MDp0Pj1uPzE6KHQ9KHQtZSkvKG4tZSkpKnQqdCoodCooNip0LTE1KSsxMCl9LHJhbmRJbnQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqKGUtdCsxKSl9LHJhbmRGbG9hdDpmdW5jdGlvbih0LGUpe3JldHVybiB0K01hdGgucmFuZG9tKCkqKGUtdCl9LHJhbmRGbG9hdFNwcmVhZDpmdW5jdGlvbih0KXtyZXR1cm4gdCooLjUtTWF0aC5yYW5kb20oKSl9LHNlZWRlZFJhbmRvbTpmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwIT09dCYmKFZpdD10JTIxNDc0ODM2NDcpLFZpdD0xNjgwNypWaXQlMjE0NzQ4MzY0NywoVml0LTEpLzIxNDc0ODM2NDZ9LGRlZ1RvUmFkOmZ1bmN0aW9uKHQpe3JldHVybiB0KmppdC5ERUcyUkFEfSxyYWRUb0RlZzpmdW5jdGlvbih0KXtyZXR1cm4gdCpqaXQuUkFEMkRFR30saXNQb3dlck9mVHdvOmZ1bmN0aW9uKHQpe3JldHVybiAwPT0odCZ0LTEpJiYwIT09dH0sY2VpbFBvd2VyT2ZUd286ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucG93KDIsTWF0aC5jZWlsKE1hdGgubG9nKHQpL01hdGguTE4yKSl9LGZsb29yUG93ZXJPZlR3bzpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5wb3coMixNYXRoLmZsb29yKE1hdGgubG9nKHQpL01hdGguTE4yKSl9LHNldFF1YXRlcm5pb25Gcm9tUHJvcGVyRXVsZXI6ZnVuY3Rpb24odCxlLG4sbyxpKXtjb25zdCBhPU1hdGguY29zLHI9TWF0aC5zaW4scz1hKG4vMiksbD1yKG4vMiksYz1hKChlK28pLzIpLGQ9cigoZStvKS8yKSxwPWEoKGUtbykvMiksbT1yKChlLW8pLzIpLHU9YSgoby1lKS8yKSxmPXIoKG8tZSkvMik7c3dpdGNoKGkpe2Nhc2UiWFlYIjp0LnNldChzKmQsbCpwLGwqbSxzKmMpO2JyZWFrO2Nhc2UiWVpZIjp0LnNldChsKm0scypkLGwqcCxzKmMpO2JyZWFrO2Nhc2UiWlhaIjp0LnNldChsKnAsbCptLHMqZCxzKmMpO2JyZWFrO2Nhc2UiWFpYIjp0LnNldChzKmQsbCpmLGwqdSxzKmMpO2JyZWFrO2Nhc2UiWVhZIjp0LnNldChsKnUscypkLGwqZixzKmMpO2JyZWFrO2Nhc2UiWllaIjp0LnNldChsKmYsbCp1LHMqZCxzKmMpO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS53YXJuKCJUSFJFRS5NYXRoVXRpbHM6IC5zZXRRdWF0ZXJuaW9uRnJvbVByb3BlckV1bGVyKCkgZW5jb3VudGVyZWQgYW4gdW5rbm93biBvcmRlcjogIitpKX19fTtjbGFzcyBVaXR7Y29uc3RydWN0b3IodD0wLGU9MCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlzVmVjdG9yMiIse3ZhbHVlOiEwfSksdGhpcy54PXQsdGhpcy55PWV9Z2V0IHdpZHRoKCl7cmV0dXJuIHRoaXMueH1zZXQgd2lkdGgodCl7dGhpcy54PXR9Z2V0IGhlaWdodCgpe3JldHVybiB0aGlzLnl9c2V0IGhlaWdodCh0KXt0aGlzLnk9dH1zZXQodCxlKXtyZXR1cm4gdGhpcy54PXQsdGhpcy55PWUsdGhpc31zZXRTY2FsYXIodCl7cmV0dXJuIHRoaXMueD10LHRoaXMueT10LHRoaXN9c2V0WCh0KXtyZXR1cm4gdGhpcy54PXQsdGhpc31zZXRZKHQpe3JldHVybiB0aGlzLnk9dCx0aGlzfXNldENvbXBvbmVudCh0LGUpe3N3aXRjaCh0KXtjYXNlIDA6dGhpcy54PWU7YnJlYWs7Y2FzZSAxOnRoaXMueT1lO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrdCl9cmV0dXJuIHRoaXN9Z2V0Q29tcG9uZW50KHQpe3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIHRoaXMueDtjYXNlIDE6cmV0dXJuIHRoaXMueTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK3QpfX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLngsdGhpcy55KX1jb3B5KHQpe3JldHVybiB0aGlzLng9dC54LHRoaXMueT10LnksdGhpc31hZGQodCxlKXtyZXR1cm4gdm9pZCAwIT09ZT8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiAuYWRkKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuYWRkVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5hZGRWZWN0b3JzKHQsZSkpOih0aGlzLngrPXQueCx0aGlzLnkrPXQueSx0aGlzKX1hZGRTY2FsYXIodCl7cmV0dXJuIHRoaXMueCs9dCx0aGlzLnkrPXQsdGhpc31hZGRWZWN0b3JzKHQsZSl7cmV0dXJuIHRoaXMueD10LngrZS54LHRoaXMueT10LnkrZS55LHRoaXN9YWRkU2NhbGVkVmVjdG9yKHQsZSl7cmV0dXJuIHRoaXMueCs9dC54KmUsdGhpcy55Kz10LnkqZSx0aGlzfXN1Yih0LGUpe3JldHVybiB2b2lkIDAhPT1lPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjI6IC5zdWIoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5zdWJWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLnN1YlZlY3RvcnModCxlKSk6KHRoaXMueC09dC54LHRoaXMueS09dC55LHRoaXMpfXN1YlNjYWxhcih0KXtyZXR1cm4gdGhpcy54LT10LHRoaXMueS09dCx0aGlzfXN1YlZlY3RvcnModCxlKXtyZXR1cm4gdGhpcy54PXQueC1lLngsdGhpcy55PXQueS1lLnksdGhpc31tdWx0aXBseSh0KXtyZXR1cm4gdGhpcy54Kj10LngsdGhpcy55Kj10LnksdGhpc31tdWx0aXBseVNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kj10LHRoaXMueSo9dCx0aGlzfWRpdmlkZSh0KXtyZXR1cm4gdGhpcy54Lz10LngsdGhpcy55Lz10LnksdGhpc31kaXZpZGVTY2FsYXIodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlTY2FsYXIoMS90KX1hcHBseU1hdHJpeDModCl7Y29uc3QgZT10aGlzLngsbj10aGlzLnksbz10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9b1swXSplK29bM10qbitvWzZdLHRoaXMueT1vWzFdKmUrb1s0XSpuK29bN10sdGhpc31taW4odCl7cmV0dXJuIHRoaXMueD1NYXRoLm1pbih0aGlzLngsdC54KSx0aGlzLnk9TWF0aC5taW4odGhpcy55LHQueSksdGhpc31tYXgodCl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0aGlzLngsdC54KSx0aGlzLnk9TWF0aC5tYXgodGhpcy55LHQueSksdGhpc31jbGFtcCh0LGUpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodC54LE1hdGgubWluKGUueCx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodC55LE1hdGgubWluKGUueSx0aGlzLnkpKSx0aGlzfWNsYW1wU2NhbGFyKHQsZSl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy54KSksdGhpcy55PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLnkpKSx0aGlzfWNsYW1wTGVuZ3RoKHQsZSl7Y29uc3Qgbj10aGlzLmxlbmd0aCgpO3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcihufHwxKS5tdWx0aXBseVNjYWxhcihNYXRoLm1heCh0LE1hdGgubWluKGUsbikpKX1mbG9vcigpe3JldHVybiB0aGlzLng9TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT1NYXRoLmZsb29yKHRoaXMueSksdGhpc31jZWlsKCl7cmV0dXJuIHRoaXMueD1NYXRoLmNlaWwodGhpcy54KSx0aGlzLnk9TWF0aC5jZWlsKHRoaXMueSksdGhpc31yb3VuZCgpe3JldHVybiB0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpLHRoaXMueT1NYXRoLnJvdW5kKHRoaXMueSksdGhpc31yb3VuZFRvWmVybygpe3JldHVybiB0aGlzLng9dGhpcy54PDA/TWF0aC5jZWlsKHRoaXMueCk6TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT10aGlzLnk8MD9NYXRoLmNlaWwodGhpcy55KTpNYXRoLmZsb29yKHRoaXMueSksdGhpc31uZWdhdGUoKXtyZXR1cm4gdGhpcy54PS10aGlzLngsdGhpcy55PS10aGlzLnksdGhpc31kb3QodCl7cmV0dXJuIHRoaXMueCp0LngrdGhpcy55KnQueX1jcm9zcyh0KXtyZXR1cm4gdGhpcy54KnQueS10aGlzLnkqdC54fWxlbmd0aFNxKCl7cmV0dXJuIHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueX1sZW5ndGgoKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSl9bWFuaGF0dGFuTGVuZ3RoKCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueCkrTWF0aC5hYnModGhpcy55KX1ub3JtYWxpemUoKXtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIodGhpcy5sZW5ndGgoKXx8MSl9YW5nbGUoKXtyZXR1cm4gTWF0aC5hdGFuMigtdGhpcy55LC10aGlzLngpK01hdGguUEl9ZGlzdGFuY2VUbyh0KXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdGFuY2VUb1NxdWFyZWQodCkpfWRpc3RhbmNlVG9TcXVhcmVkKHQpe2NvbnN0IGU9dGhpcy54LXQueCxuPXRoaXMueS10Lnk7cmV0dXJuIGUqZStuKm59bWFuaGF0dGFuRGlzdGFuY2VUbyh0KXtyZXR1cm4gTWF0aC5hYnModGhpcy54LXQueCkrTWF0aC5hYnModGhpcy55LXQueSl9c2V0TGVuZ3RoKHQpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKHQpfWxlcnAodCxlKXtyZXR1cm4gdGhpcy54Kz0odC54LXRoaXMueCkqZSx0aGlzLnkrPSh0LnktdGhpcy55KSplLHRoaXN9bGVycFZlY3RvcnModCxlLG4pe3JldHVybiB0aGlzLng9dC54KyhlLngtdC54KSpuLHRoaXMueT10LnkrKGUueS10LnkpKm4sdGhpc31lcXVhbHModCl7cmV0dXJuIHQueD09PXRoaXMueCYmdC55PT09dGhpcy55fWZyb21BcnJheSh0LGU9MCl7cmV0dXJuIHRoaXMueD10W2VdLHRoaXMueT10W2UrMV0sdGhpc310b0FycmF5KHQ9W10sZT0wKXtyZXR1cm4gdFtlXT10aGlzLngsdFtlKzFdPXRoaXMueSx0fWZyb21CdWZmZXJBdHRyaWJ1dGUodCxlLG4pe3JldHVybiB2b2lkIDAhPT1uJiZjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjI6IG9mZnNldCBoYXMgYmVlbiByZW1vdmVkIGZyb20gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKSx0aGlzLng9dC5nZXRYKGUpLHRoaXMueT10LmdldFkoZSksdGhpc31yb3RhdGVBcm91bmQodCxlKXtjb25zdCBuPU1hdGguY29zKGUpLG89TWF0aC5zaW4oZSksaT10aGlzLngtdC54LGE9dGhpcy55LXQueTtyZXR1cm4gdGhpcy54PWkqbi1hKm8rdC54LHRoaXMueT1pKm8rYSpuK3QueSx0aGlzfXJhbmRvbSgpe3JldHVybiB0aGlzLng9TWF0aC5yYW5kb20oKSx0aGlzLnk9TWF0aC5yYW5kb20oKSx0aGlzfX1jbGFzcyBXaXR7Y29uc3RydWN0b3IoKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaXNNYXRyaXgzIix7dmFsdWU6ITB9KSx0aGlzLmVsZW1lbnRzPVsxLDAsMCwwLDEsMCwwLDAsMV0sYXJndW1lbnRzLmxlbmd0aD4wJiZjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXgzOiB0aGUgY29uc3RydWN0b3Igbm8gbG9uZ2VyIHJlYWRzIGFyZ3VtZW50cy4gdXNlIC5zZXQoKSBpbnN0ZWFkLiIpfXNldCh0LGUsbixvLGksYSxyLHMsbCl7Y29uc3QgYz10aGlzLmVsZW1lbnRzO3JldHVybiBjWzBdPXQsY1sxXT1vLGNbMl09cixjWzNdPWUsY1s0XT1pLGNbNV09cyxjWzZdPW4sY1s3XT1hLGNbOF09bCx0aGlzfWlkZW50aXR5KCl7cmV0dXJuIHRoaXMuc2V0KDEsMCwwLDAsMSwwLDAsMCwxKSx0aGlzfWNsb25lKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5mcm9tQXJyYXkodGhpcy5lbGVtZW50cyl9Y29weSh0KXtjb25zdCBlPXRoaXMuZWxlbWVudHMsbj10LmVsZW1lbnRzO3JldHVybiBlWzBdPW5bMF0sZVsxXT1uWzFdLGVbMl09blsyXSxlWzNdPW5bM10sZVs0XT1uWzRdLGVbNV09bls1XSxlWzZdPW5bNl0sZVs3XT1uWzddLGVbOF09bls4XSx0aGlzfWV4dHJhY3RCYXNpcyh0LGUsbil7cmV0dXJuIHQuc2V0RnJvbU1hdHJpeDNDb2x1bW4odGhpcywwKSxlLnNldEZyb21NYXRyaXgzQ29sdW1uKHRoaXMsMSksbi5zZXRGcm9tTWF0cml4M0NvbHVtbih0aGlzLDIpLHRoaXN9c2V0RnJvbU1hdHJpeDQodCl7Y29uc3QgZT10LmVsZW1lbnRzO3JldHVybiB0aGlzLnNldChlWzBdLGVbNF0sZVs4XSxlWzFdLGVbNV0sZVs5XSxlWzJdLGVbNl0sZVsxMF0pLHRoaXN9bXVsdGlwbHkodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlNYXRyaWNlcyh0aGlzLHQpfXByZW11bHRpcGx5KHQpe3JldHVybiB0aGlzLm11bHRpcGx5TWF0cmljZXModCx0aGlzKX1tdWx0aXBseU1hdHJpY2VzKHQsZSl7Y29uc3Qgbj10LmVsZW1lbnRzLG89ZS5lbGVtZW50cyxpPXRoaXMuZWxlbWVudHMsYT1uWzBdLHI9blszXSxzPW5bNl0sbD1uWzFdLGM9bls0XSxkPW5bN10scD1uWzJdLG09bls1XSx1PW5bOF0sZj1vWzBdLGc9b1szXSxoPW9bNl0sYj1vWzFdLHk9b1s0XSxfPW9bN10sQz1vWzJdLE09b1s1XSx2PW9bOF07cmV0dXJuIGlbMF09YSpmK3IqYitzKkMsaVszXT1hKmcrcip5K3MqTSxpWzZdPWEqaCtyKl8rcyp2LGlbMV09bCpmK2MqYitkKkMsaVs0XT1sKmcrYyp5K2QqTSxpWzddPWwqaCtjKl8rZCp2LGlbMl09cCpmK20qYit1KkMsaVs1XT1wKmcrbSp5K3UqTSxpWzhdPXAqaCttKl8rdSp2LHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7Y29uc3QgZT10aGlzLmVsZW1lbnRzO3JldHVybiBlWzBdKj10LGVbM10qPXQsZVs2XSo9dCxlWzFdKj10LGVbNF0qPXQsZVs3XSo9dCxlWzJdKj10LGVbNV0qPXQsZVs4XSo9dCx0aGlzfWRldGVybWluYW50KCl7Y29uc3QgdD10aGlzLmVsZW1lbnRzLGU9dFswXSxuPXRbMV0sbz10WzJdLGk9dFszXSxhPXRbNF0scj10WzVdLHM9dFs2XSxsPXRbN10sYz10WzhdO3JldHVybiBlKmEqYy1lKnIqbC1uKmkqYytuKnIqcytvKmkqbC1vKmEqc31pbnZlcnQoKXtjb25zdCB0PXRoaXMuZWxlbWVudHMsZT10WzBdLG49dFsxXSxvPXRbMl0saT10WzNdLGE9dFs0XSxyPXRbNV0scz10WzZdLGw9dFs3XSxjPXRbOF0sZD1jKmEtcipsLHA9cipzLWMqaSxtPWwqaS1hKnMsdT1lKmQrbipwK28qbTtpZigwPT09dSlyZXR1cm4gdGhpcy5zZXQoMCwwLDAsMCwwLDAsMCwwLDApO2NvbnN0IGY9MS91O3JldHVybiB0WzBdPWQqZix0WzFdPShvKmwtYypuKSpmLHRbMl09KHIqbi1vKmEpKmYsdFszXT1wKmYsdFs0XT0oYyplLW8qcykqZix0WzVdPShvKmktciplKSpmLHRbNl09bSpmLHRbN109KG4qcy1sKmUpKmYsdFs4XT0oYSplLW4qaSkqZix0aGlzfXRyYW5zcG9zZSgpe2xldCB0O2NvbnN0IGU9dGhpcy5lbGVtZW50cztyZXR1cm4gdD1lWzFdLGVbMV09ZVszXSxlWzNdPXQsdD1lWzJdLGVbMl09ZVs2XSxlWzZdPXQsdD1lWzVdLGVbNV09ZVs3XSxlWzddPXQsdGhpc31nZXROb3JtYWxNYXRyaXgodCl7cmV0dXJuIHRoaXMuc2V0RnJvbU1hdHJpeDQodCkuY29weSh0aGlzKS5pbnZlcnQoKS50cmFuc3Bvc2UoKX10cmFuc3Bvc2VJbnRvQXJyYXkodCl7Y29uc3QgZT10aGlzLmVsZW1lbnRzO3JldHVybiB0WzBdPWVbMF0sdFsxXT1lWzNdLHRbMl09ZVs2XSx0WzNdPWVbMV0sdFs0XT1lWzRdLHRbNV09ZVs3XSx0WzZdPWVbMl0sdFs3XT1lWzVdLHRbOF09ZVs4XSx0aGlzfXNldFV2VHJhbnNmb3JtKHQsZSxuLG8saSxhLHIpe2NvbnN0IHM9TWF0aC5jb3MoaSksbD1NYXRoLnNpbihpKTtyZXR1cm4gdGhpcy5zZXQobipzLG4qbCwtbioocyphK2wqcikrYSt0LC1vKmwsbypzLC1vKigtbCphK3MqcikrcitlLDAsMCwxKSx0aGlzfXNjYWxlKHQsZSl7Y29uc3Qgbj10aGlzLmVsZW1lbnRzO3JldHVybiBuWzBdKj10LG5bM10qPXQsbls2XSo9dCxuWzFdKj1lLG5bNF0qPWUsbls3XSo9ZSx0aGlzfXJvdGF0ZSh0KXtjb25zdCBlPU1hdGguY29zKHQpLG49TWF0aC5zaW4odCksbz10aGlzLmVsZW1lbnRzLGk9b1swXSxhPW9bM10scj1vWzZdLHM9b1sxXSxsPW9bNF0sYz1vWzddO3JldHVybiBvWzBdPWUqaStuKnMsb1szXT1lKmErbipsLG9bNl09ZSpyK24qYyxvWzFdPS1uKmkrZSpzLG9bNF09LW4qYStlKmwsb1s3XT0tbipyK2UqYyx0aGlzfXRyYW5zbGF0ZSh0LGUpe2NvbnN0IG49dGhpcy5lbGVtZW50cztyZXR1cm4gblswXSs9dCpuWzJdLG5bM10rPXQqbls1XSxuWzZdKz10Km5bOF0sblsxXSs9ZSpuWzJdLG5bNF0rPWUqbls1XSxuWzddKz1lKm5bOF0sdGhpc31lcXVhbHModCl7Y29uc3QgZT10aGlzLmVsZW1lbnRzLG49dC5lbGVtZW50cztmb3IobGV0IHQ9MDt0PDk7dCsrKWlmKGVbdF0hPT1uW3RdKXJldHVybiExO3JldHVybiEwfWZyb21BcnJheSh0LGU9MCl7Zm9yKGxldCBuPTA7bjw5O24rKyl0aGlzLmVsZW1lbnRzW25dPXRbbitlXTtyZXR1cm4gdGhpc310b0FycmF5KHQ9W10sZT0wKXtjb25zdCBuPXRoaXMuZWxlbWVudHM7cmV0dXJuIHRbZV09blswXSx0W2UrMV09blsxXSx0W2UrMl09blsyXSx0W2UrM109blszXSx0W2UrNF09bls0XSx0W2UrNV09bls1XSx0W2UrNl09bls2XSx0W2UrN109bls3XSx0W2UrOF09bls4XSx0fX1sZXQgR2l0O2NvbnN0IFlpdD17Z2V0RGF0YVVSTDpmdW5jdGlvbih0KXtpZigvXmRhdGE6L2kudGVzdCh0LnNyYykpcmV0dXJuIHQuc3JjO2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgSFRNTENhbnZhc0VsZW1lbnQpcmV0dXJuIHQuc3JjO2xldCBlO2lmKHQgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudCllPXQ7ZWxzZXt2b2lkIDA9PT1HaXQmJihHaXQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiY2FudmFzIikpLEdpdC53aWR0aD10LndpZHRoLEdpdC5oZWlnaHQ9dC5oZWlnaHQ7Y29uc3Qgbj1HaXQuZ2V0Q29udGV4dCgiMmQiKTt0IGluc3RhbmNlb2YgSW1hZ2VEYXRhP24ucHV0SW1hZ2VEYXRhKHQsMCwwKTpuLmRyYXdJbWFnZSh0LDAsMCx0LndpZHRoLHQuaGVpZ2h0KSxlPUdpdH1yZXR1cm4gZS53aWR0aD4yMDQ4fHxlLmhlaWdodD4yMDQ4P2UudG9EYXRhVVJMKCJpbWFnZS9qcGVnIiwuNik6ZS50b0RhdGFVUkwoImltYWdlL3BuZyIpfX07bGV0IHFpdD0wO2Z1bmN0aW9uIFppdCh0PVppdC5ERUZBVUxUX0lNQUdFLGU9Wml0LkRFRkFVTFRfTUFQUElORyxuPTEwMDEsbz0xMDAxLGk9MTAwNixhPTEwMDgscj0xMDIzLHM9MTAwOSxsPTEsYz0zZTMpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpZCIse3ZhbHVlOnFpdCsrfSksdGhpcy51dWlkPWppdC5nZW5lcmF0ZVVVSUQoKSx0aGlzLm5hbWU9IiIsdGhpcy5pbWFnZT10LHRoaXMubWlwbWFwcz1bXSx0aGlzLm1hcHBpbmc9ZSx0aGlzLndyYXBTPW4sdGhpcy53cmFwVD1vLHRoaXMubWFnRmlsdGVyPWksdGhpcy5taW5GaWx0ZXI9YSx0aGlzLmFuaXNvdHJvcHk9bCx0aGlzLmZvcm1hdD1yLHRoaXMuaW50ZXJuYWxGb3JtYXQ9bnVsbCx0aGlzLnR5cGU9cyx0aGlzLm9mZnNldD1uZXcgVWl0KDAsMCksdGhpcy5yZXBlYXQ9bmV3IFVpdCgxLDEpLHRoaXMuY2VudGVyPW5ldyBVaXQoMCwwKSx0aGlzLnJvdGF0aW9uPTAsdGhpcy5tYXRyaXhBdXRvVXBkYXRlPSEwLHRoaXMubWF0cml4PW5ldyBXaXQsdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITAsdGhpcy5wcmVtdWx0aXBseUFscGhhPSExLHRoaXMuZmxpcFk9ITAsdGhpcy51bnBhY2tBbGlnbm1lbnQ9NCx0aGlzLmVuY29kaW5nPWMsdGhpcy52ZXJzaW9uPTAsdGhpcy5vblVwZGF0ZT1udWxsfWZ1bmN0aW9uIFhpdCh0KXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIEhUTUxJbWFnZUVsZW1lbnQmJnQgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50fHwidW5kZWZpbmVkIiE9dHlwZW9mIEhUTUxDYW52YXNFbGVtZW50JiZ0IGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnR8fCJ1bmRlZmluZWQiIT10eXBlb2YgSW1hZ2VCaXRtYXAmJnQgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcD9ZaXQuZ2V0RGF0YVVSTCh0KTp0LmRhdGE/e2RhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodC5kYXRhKSx3aWR0aDp0LndpZHRoLGhlaWdodDp0LmhlaWdodCx0eXBlOnQuZGF0YS5jb25zdHJ1Y3Rvci5uYW1lfTooY29uc29sZS53YXJuKCJUSFJFRS5UZXh0dXJlOiBVbmFibGUgdG8gc2VyaWFsaXplIFRleHR1cmUuIikse30pfVppdC5ERUZBVUxUX0lNQUdFPXZvaWQgMCxaaXQuREVGQVVMVF9NQVBQSU5HPTMwMCxaaXQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShMaXQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6Wml0LGlzVGV4dHVyZTohMCx1cGRhdGVNYXRyaXg6ZnVuY3Rpb24oKXt0aGlzLm1hdHJpeC5zZXRVdlRyYW5zZm9ybSh0aGlzLm9mZnNldC54LHRoaXMub2Zmc2V0LnksdGhpcy5yZXBlYXQueCx0aGlzLnJlcGVhdC55LHRoaXMucm90YXRpb24sdGhpcy5jZW50ZXIueCx0aGlzLmNlbnRlci55KX0sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9LGNvcHk6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubmFtZT10Lm5hbWUsdGhpcy5pbWFnZT10LmltYWdlLHRoaXMubWlwbWFwcz10Lm1pcG1hcHMuc2xpY2UoMCksdGhpcy5tYXBwaW5nPXQubWFwcGluZyx0aGlzLndyYXBTPXQud3JhcFMsdGhpcy53cmFwVD10LndyYXBULHRoaXMubWFnRmlsdGVyPXQubWFnRmlsdGVyLHRoaXMubWluRmlsdGVyPXQubWluRmlsdGVyLHRoaXMuYW5pc290cm9weT10LmFuaXNvdHJvcHksdGhpcy5mb3JtYXQ9dC5mb3JtYXQsdGhpcy5pbnRlcm5hbEZvcm1hdD10LmludGVybmFsRm9ybWF0LHRoaXMudHlwZT10LnR5cGUsdGhpcy5vZmZzZXQuY29weSh0Lm9mZnNldCksdGhpcy5yZXBlYXQuY29weSh0LnJlcGVhdCksdGhpcy5jZW50ZXIuY29weSh0LmNlbnRlciksdGhpcy5yb3RhdGlvbj10LnJvdGF0aW9uLHRoaXMubWF0cml4QXV0b1VwZGF0ZT10Lm1hdHJpeEF1dG9VcGRhdGUsdGhpcy5tYXRyaXguY29weSh0Lm1hdHJpeCksdGhpcy5nZW5lcmF0ZU1pcG1hcHM9dC5nZW5lcmF0ZU1pcG1hcHMsdGhpcy5wcmVtdWx0aXBseUFscGhhPXQucHJlbXVsdGlwbHlBbHBoYSx0aGlzLmZsaXBZPXQuZmxpcFksdGhpcy51bnBhY2tBbGlnbm1lbnQ9dC51bnBhY2tBbGlnbm1lbnQsdGhpcy5lbmNvZGluZz10LmVuY29kaW5nLHRoaXN9LHRvSlNPTjpmdW5jdGlvbih0KXtjb25zdCBlPXZvaWQgMD09PXR8fCJzdHJpbmciPT10eXBlb2YgdDtpZighZSYmdm9pZCAwIT09dC50ZXh0dXJlc1t0aGlzLnV1aWRdKXJldHVybiB0LnRleHR1cmVzW3RoaXMudXVpZF07Y29uc3Qgbj17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6IlRleHR1cmUiLGdlbmVyYXRvcjoiVGV4dHVyZS50b0pTT04ifSx1dWlkOnRoaXMudXVpZCxuYW1lOnRoaXMubmFtZSxtYXBwaW5nOnRoaXMubWFwcGluZyxyZXBlYXQ6W3RoaXMucmVwZWF0LngsdGhpcy5yZXBlYXQueV0sb2Zmc2V0Olt0aGlzLm9mZnNldC54LHRoaXMub2Zmc2V0LnldLGNlbnRlcjpbdGhpcy5jZW50ZXIueCx0aGlzLmNlbnRlci55XSxyb3RhdGlvbjp0aGlzLnJvdGF0aW9uLHdyYXA6W3RoaXMud3JhcFMsdGhpcy53cmFwVF0sZm9ybWF0OnRoaXMuZm9ybWF0LHR5cGU6dGhpcy50eXBlLGVuY29kaW5nOnRoaXMuZW5jb2RpbmcsbWluRmlsdGVyOnRoaXMubWluRmlsdGVyLG1hZ0ZpbHRlcjp0aGlzLm1hZ0ZpbHRlcixhbmlzb3Ryb3B5OnRoaXMuYW5pc290cm9weSxmbGlwWTp0aGlzLmZsaXBZLHByZW11bHRpcGx5QWxwaGE6dGhpcy5wcmVtdWx0aXBseUFscGhhLHVucGFja0FsaWdubWVudDp0aGlzLnVucGFja0FsaWdubWVudH07aWYodm9pZCAwIT09dGhpcy5pbWFnZSl7Y29uc3Qgbz10aGlzLmltYWdlO2lmKHZvaWQgMD09PW8udXVpZCYmKG8udXVpZD1qaXQuZ2VuZXJhdGVVVUlEKCkpLCFlJiZ2b2lkIDA9PT10LmltYWdlc1tvLnV1aWRdKXtsZXQgZTtpZihBcnJheS5pc0FycmF5KG8pKXtlPVtdO2ZvcihsZXQgdD0wLG49by5sZW5ndGg7dDxuO3QrKyllLnB1c2goWGl0KG9bdF0uaXNEYXRhVGV4dHVyZT9vW3RdLmltYWdlOm9bdF0pKX1lbHNlIGU9WGl0KG8pO3QuaW1hZ2VzW28udXVpZF09e3V1aWQ6by51dWlkLHVybDplfX1uLmltYWdlPW8udXVpZH1yZXR1cm4gZXx8KHQudGV4dHVyZXNbdGhpcy51dWlkXT1uKSxufSxkaXNwb3NlOmZ1bmN0aW9uKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfSx0cmFuc2Zvcm1VdjpmdW5jdGlvbih0KXtpZigzMDAhPT10aGlzLm1hcHBpbmcpcmV0dXJuIHQ7aWYodC5hcHBseU1hdHJpeDModGhpcy5tYXRyaXgpLHQueDwwfHx0Lng+MSlzd2l0Y2godGhpcy53cmFwUyl7Y2FzZSB1aXQ6dC54PXQueC1NYXRoLmZsb29yKHQueCk7YnJlYWs7Y2FzZSBmaXQ6dC54PXQueDwwPzA6MTticmVhaztjYXNlIGdpdDp0Lng9MT09PU1hdGguYWJzKE1hdGguZmxvb3IodC54KSUyKT9NYXRoLmNlaWwodC54KS10Lng6dC54LU1hdGguZmxvb3IodC54KX1pZih0Lnk8MHx8dC55PjEpc3dpdGNoKHRoaXMud3JhcFQpe2Nhc2UgdWl0OnQueT10LnktTWF0aC5mbG9vcih0LnkpO2JyZWFrO2Nhc2UgZml0OnQueT10Lnk8MD8wOjE7YnJlYWs7Y2FzZSBnaXQ6dC55PTE9PT1NYXRoLmFicyhNYXRoLmZsb29yKHQueSklMik/TWF0aC5jZWlsKHQueSktdC55OnQueS1NYXRoLmZsb29yKHQueSl9cmV0dXJuIHRoaXMuZmxpcFkmJih0Lnk9MS10LnkpLHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFppdC5wcm90b3R5cGUsIm5lZWRzVXBkYXRlIix7c2V0OmZ1bmN0aW9uKHQpeyEwPT09dCYmdGhpcy52ZXJzaW9uKyt9fSk7Y2xhc3MgS2l0e2NvbnN0cnVjdG9yKHQ9MCxlPTAsbj0wLG89MSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlzVmVjdG9yNCIse3ZhbHVlOiEwfSksdGhpcy54PXQsdGhpcy55PWUsdGhpcy56PW4sdGhpcy53PW99Z2V0IHdpZHRoKCl7cmV0dXJuIHRoaXMuen1zZXQgd2lkdGgodCl7dGhpcy56PXR9Z2V0IGhlaWdodCgpe3JldHVybiB0aGlzLnd9c2V0IGhlaWdodCh0KXt0aGlzLnc9dH1zZXQodCxlLG4sbyl7cmV0dXJuIHRoaXMueD10LHRoaXMueT1lLHRoaXMuej1uLHRoaXMudz1vLHRoaXN9c2V0U2NhbGFyKHQpe3JldHVybiB0aGlzLng9dCx0aGlzLnk9dCx0aGlzLno9dCx0aGlzLnc9dCx0aGlzfXNldFgodCl7cmV0dXJuIHRoaXMueD10LHRoaXN9c2V0WSh0KXtyZXR1cm4gdGhpcy55PXQsdGhpc31zZXRaKHQpe3JldHVybiB0aGlzLno9dCx0aGlzfXNldFcodCl7cmV0dXJuIHRoaXMudz10LHRoaXN9c2V0Q29tcG9uZW50KHQsZSl7c3dpdGNoKHQpe2Nhc2UgMDp0aGlzLng9ZTticmVhaztjYXNlIDE6dGhpcy55PWU7YnJlYWs7Y2FzZSAyOnRoaXMuej1lO2JyZWFrO2Nhc2UgMzp0aGlzLnc9ZTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK3QpfXJldHVybiB0aGlzfWdldENvbXBvbmVudCh0KXtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiB0aGlzLng7Y2FzZSAxOnJldHVybiB0aGlzLnk7Y2FzZSAyOnJldHVybiB0aGlzLno7Y2FzZSAzOnJldHVybiB0aGlzLnc7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX19Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy54LHRoaXMueSx0aGlzLnosdGhpcy53KX1jb3B5KHQpe3JldHVybiB0aGlzLng9dC54LHRoaXMueT10LnksdGhpcy56PXQueix0aGlzLnc9dm9pZCAwIT09dC53P3QudzoxLHRoaXN9YWRkKHQsZSl7cmV0dXJuIHZvaWQgMCE9PWU/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogLmFkZCgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLmFkZFZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuYWRkVmVjdG9ycyh0LGUpKToodGhpcy54Kz10LngsdGhpcy55Kz10LnksdGhpcy56Kz10LnosdGhpcy53Kz10LncsdGhpcyl9YWRkU2NhbGFyKHQpe3JldHVybiB0aGlzLngrPXQsdGhpcy55Kz10LHRoaXMueis9dCx0aGlzLncrPXQsdGhpc31hZGRWZWN0b3JzKHQsZSl7cmV0dXJuIHRoaXMueD10LngrZS54LHRoaXMueT10LnkrZS55LHRoaXMuej10LnorZS56LHRoaXMudz10LncrZS53LHRoaXN9YWRkU2NhbGVkVmVjdG9yKHQsZSl7cmV0dXJuIHRoaXMueCs9dC54KmUsdGhpcy55Kz10LnkqZSx0aGlzLnorPXQueiplLHRoaXMudys9dC53KmUsdGhpc31zdWIodCxlKXtyZXR1cm4gdm9pZCAwIT09ZT8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3I0OiAuc3ViKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuc3ViVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5zdWJWZWN0b3JzKHQsZSkpOih0aGlzLngtPXQueCx0aGlzLnktPXQueSx0aGlzLnotPXQueix0aGlzLnctPXQudyx0aGlzKX1zdWJTY2FsYXIodCl7cmV0dXJuIHRoaXMueC09dCx0aGlzLnktPXQsdGhpcy56LT10LHRoaXMudy09dCx0aGlzfXN1YlZlY3RvcnModCxlKXtyZXR1cm4gdGhpcy54PXQueC1lLngsdGhpcy55PXQueS1lLnksdGhpcy56PXQuei1lLnosdGhpcy53PXQudy1lLncsdGhpc31tdWx0aXBseSh0KXtyZXR1cm4gdGhpcy54Kj10LngsdGhpcy55Kj10LnksdGhpcy56Kj10LnosdGhpcy53Kj10LncsdGhpc31tdWx0aXBseVNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kj10LHRoaXMueSo9dCx0aGlzLnoqPXQsdGhpcy53Kj10LHRoaXN9YXBwbHlNYXRyaXg0KHQpe2NvbnN0IGU9dGhpcy54LG49dGhpcy55LG89dGhpcy56LGk9dGhpcy53LGE9dC5lbGVtZW50cztyZXR1cm4gdGhpcy54PWFbMF0qZSthWzRdKm4rYVs4XSpvK2FbMTJdKmksdGhpcy55PWFbMV0qZSthWzVdKm4rYVs5XSpvK2FbMTNdKmksdGhpcy56PWFbMl0qZSthWzZdKm4rYVsxMF0qbythWzE0XSppLHRoaXMudz1hWzNdKmUrYVs3XSpuK2FbMTFdKm8rYVsxNV0qaSx0aGlzfWRpdmlkZVNjYWxhcih0KXtyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhcigxL3QpfXNldEF4aXNBbmdsZUZyb21RdWF0ZXJuaW9uKHQpe3RoaXMudz0yKk1hdGguYWNvcyh0LncpO2NvbnN0IGU9TWF0aC5zcXJ0KDEtdC53KnQudyk7cmV0dXJuIGU8MWUtND8odGhpcy54PTEsdGhpcy55PTAsdGhpcy56PTApOih0aGlzLng9dC54L2UsdGhpcy55PXQueS9lLHRoaXMuej10LnovZSksdGhpc31zZXRBeGlzQW5nbGVGcm9tUm90YXRpb25NYXRyaXgodCl7bGV0IGUsbixvLGk7Y29uc3QgYT0uMDEscj0uMSxzPXQuZWxlbWVudHMsbD1zWzBdLGM9c1s0XSxkPXNbOF0scD1zWzFdLG09c1s1XSx1PXNbOV0sZj1zWzJdLGc9c1s2XSxoPXNbMTBdO2lmKE1hdGguYWJzKGMtcCk8YSYmTWF0aC5hYnMoZC1mKTxhJiZNYXRoLmFicyh1LWcpPGEpe2lmKE1hdGguYWJzKGMrcCk8ciYmTWF0aC5hYnMoZCtmKTxyJiZNYXRoLmFicyh1K2cpPHImJk1hdGguYWJzKGwrbStoLTMpPHIpcmV0dXJuIHRoaXMuc2V0KDEsMCwwLDApLHRoaXM7ZT1NYXRoLlBJO2NvbnN0IHQ9KGwrMSkvMixzPShtKzEpLzIsYj0oaCsxKS8yLHk9KGMrcCkvNCxfPShkK2YpLzQsQz0odStnKS80O3JldHVybiB0PnMmJnQ+Yj90PGE/KG49MCxvPS43MDcxMDY3ODEsaT0uNzA3MTA2NzgxKToobj1NYXRoLnNxcnQodCksbz15L24saT1fL24pOnM+Yj9zPGE/KG49LjcwNzEwNjc4MSxvPTAsaT0uNzA3MTA2NzgxKToobz1NYXRoLnNxcnQocyksbj15L28saT1DL28pOmI8YT8obj0uNzA3MTA2NzgxLG89LjcwNzEwNjc4MSxpPTApOihpPU1hdGguc3FydChiKSxuPV8vaSxvPUMvaSksdGhpcy5zZXQobixvLGksZSksdGhpc31sZXQgYj1NYXRoLnNxcnQoKGctdSkqKGctdSkrKGQtZikqKGQtZikrKHAtYykqKHAtYykpO3JldHVybiBNYXRoLmFicyhiKTwuMDAxJiYoYj0xKSx0aGlzLng9KGctdSkvYix0aGlzLnk9KGQtZikvYix0aGlzLno9KHAtYykvYix0aGlzLnc9TWF0aC5hY29zKChsK20raC0xKS8yKSx0aGlzfW1pbih0KXtyZXR1cm4gdGhpcy54PU1hdGgubWluKHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1pbih0aGlzLnksdC55KSx0aGlzLno9TWF0aC5taW4odGhpcy56LHQueiksdGhpcy53PU1hdGgubWluKHRoaXMudyx0LncpLHRoaXN9bWF4KHQpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodGhpcy54LHQueCksdGhpcy55PU1hdGgubWF4KHRoaXMueSx0LnkpLHRoaXMuej1NYXRoLm1heCh0aGlzLnosdC56KSx0aGlzLnc9TWF0aC5tYXgodGhpcy53LHQudyksdGhpc31jbGFtcCh0LGUpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodC54LE1hdGgubWluKGUueCx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodC55LE1hdGgubWluKGUueSx0aGlzLnkpKSx0aGlzLno9TWF0aC5tYXgodC56LE1hdGgubWluKGUueix0aGlzLnopKSx0aGlzLnc9TWF0aC5tYXgodC53LE1hdGgubWluKGUudyx0aGlzLncpKSx0aGlzfWNsYW1wU2NhbGFyKHQsZSl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy54KSksdGhpcy55PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLnkpKSx0aGlzLno9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMueikpLHRoaXMudz1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy53KSksdGhpc31jbGFtcExlbmd0aCh0LGUpe2NvbnN0IG49dGhpcy5sZW5ndGgoKTtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIobnx8MSkubXVsdGlwbHlTY2FsYXIoTWF0aC5tYXgodCxNYXRoLm1pbihlLG4pKSl9Zmxvb3IoKXtyZXR1cm4gdGhpcy54PU1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9TWF0aC5mbG9vcih0aGlzLnkpLHRoaXMuej1NYXRoLmZsb29yKHRoaXMueiksdGhpcy53PU1hdGguZmxvb3IodGhpcy53KSx0aGlzfWNlaWwoKXtyZXR1cm4gdGhpcy54PU1hdGguY2VpbCh0aGlzLngpLHRoaXMueT1NYXRoLmNlaWwodGhpcy55KSx0aGlzLno9TWF0aC5jZWlsKHRoaXMueiksdGhpcy53PU1hdGguY2VpbCh0aGlzLncpLHRoaXN9cm91bmQoKXtyZXR1cm4gdGhpcy54PU1hdGgucm91bmQodGhpcy54KSx0aGlzLnk9TWF0aC5yb3VuZCh0aGlzLnkpLHRoaXMuej1NYXRoLnJvdW5kKHRoaXMueiksdGhpcy53PU1hdGgucm91bmQodGhpcy53KSx0aGlzfXJvdW5kVG9aZXJvKCl7cmV0dXJuIHRoaXMueD10aGlzLng8MD9NYXRoLmNlaWwodGhpcy54KTpNYXRoLmZsb29yKHRoaXMueCksdGhpcy55PXRoaXMueTwwP01hdGguY2VpbCh0aGlzLnkpOk1hdGguZmxvb3IodGhpcy55KSx0aGlzLno9dGhpcy56PDA/TWF0aC5jZWlsKHRoaXMueik6TWF0aC5mbG9vcih0aGlzLnopLHRoaXMudz10aGlzLnc8MD9NYXRoLmNlaWwodGhpcy53KTpNYXRoLmZsb29yKHRoaXMudyksdGhpc31uZWdhdGUoKXtyZXR1cm4gdGhpcy54PS10aGlzLngsdGhpcy55PS10aGlzLnksdGhpcy56PS10aGlzLnosdGhpcy53PS10aGlzLncsdGhpc31kb3QodCl7cmV0dXJuIHRoaXMueCp0LngrdGhpcy55KnQueSt0aGlzLnoqdC56K3RoaXMudyp0Lnd9bGVuZ3RoU3EoKXtyZXR1cm4gdGhpcy54KnRoaXMueCt0aGlzLnkqdGhpcy55K3RoaXMueip0aGlzLnordGhpcy53KnRoaXMud31sZW5ndGgoKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSt0aGlzLnoqdGhpcy56K3RoaXMudyp0aGlzLncpfW1hbmhhdHRhbkxlbmd0aCgpe3JldHVybiBNYXRoLmFicyh0aGlzLngpK01hdGguYWJzKHRoaXMueSkrTWF0aC5hYnModGhpcy56KStNYXRoLmFicyh0aGlzLncpfW5vcm1hbGl6ZSgpe3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcih0aGlzLmxlbmd0aCgpfHwxKX1zZXRMZW5ndGgodCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCkubXVsdGlwbHlTY2FsYXIodCl9bGVycCh0LGUpe3JldHVybiB0aGlzLngrPSh0LngtdGhpcy54KSplLHRoaXMueSs9KHQueS10aGlzLnkpKmUsdGhpcy56Kz0odC56LXRoaXMueikqZSx0aGlzLncrPSh0LnctdGhpcy53KSplLHRoaXN9bGVycFZlY3RvcnModCxlLG4pe3JldHVybiB0aGlzLng9dC54KyhlLngtdC54KSpuLHRoaXMueT10LnkrKGUueS10LnkpKm4sdGhpcy56PXQueisoZS56LXQueikqbix0aGlzLnc9dC53KyhlLnctdC53KSpuLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lng9PT10aGlzLngmJnQueT09PXRoaXMueSYmdC56PT09dGhpcy56JiZ0Lnc9PT10aGlzLnd9ZnJvbUFycmF5KHQsZT0wKXtyZXR1cm4gdGhpcy54PXRbZV0sdGhpcy55PXRbZSsxXSx0aGlzLno9dFtlKzJdLHRoaXMudz10W2UrM10sdGhpc310b0FycmF5KHQ9W10sZT0wKXtyZXR1cm4gdFtlXT10aGlzLngsdFtlKzFdPXRoaXMueSx0W2UrMl09dGhpcy56LHRbZSszXT10aGlzLncsdH1mcm9tQnVmZmVyQXR0cmlidXRlKHQsZSxuKXtyZXR1cm4gdm9pZCAwIT09biYmY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3I0OiBvZmZzZXQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy54PXQuZ2V0WChlKSx0aGlzLnk9dC5nZXRZKGUpLHRoaXMuej10LmdldFooZSksdGhpcy53PXQuZ2V0VyhlKSx0aGlzfXJhbmRvbSgpe3JldHVybiB0aGlzLng9TWF0aC5yYW5kb20oKSx0aGlzLnk9TWF0aC5yYW5kb20oKSx0aGlzLno9TWF0aC5yYW5kb20oKSx0aGlzLnc9TWF0aC5yYW5kb20oKSx0aGlzfX1jbGFzcyBKaXQgZXh0ZW5kcyBMaXR7Y29uc3RydWN0b3IodCxlLG4pe3N1cGVyKCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlzV2ViR0xSZW5kZXJUYXJnZXQiLHt2YWx1ZTohMH0pLHRoaXMud2lkdGg9dCx0aGlzLmhlaWdodD1lLHRoaXMuc2Npc3Nvcj1uZXcgS2l0KDAsMCx0LGUpLHRoaXMuc2Npc3NvclRlc3Q9ITEsdGhpcy52aWV3cG9ydD1uZXcgS2l0KDAsMCx0LGUpLHRoaXMudGV4dHVyZT1uZXcgWml0KHZvaWQgMCwobj1ufHx7fSkubWFwcGluZyxuLndyYXBTLG4ud3JhcFQsbi5tYWdGaWx0ZXIsbi5taW5GaWx0ZXIsbi5mb3JtYXQsbi50eXBlLG4uYW5pc290cm9weSxuLmVuY29kaW5nKSx0aGlzLnRleHR1cmUuaW1hZ2U9e30sdGhpcy50ZXh0dXJlLmltYWdlLndpZHRoPXQsdGhpcy50ZXh0dXJlLmltYWdlLmhlaWdodD1lLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9dm9pZCAwIT09bi5nZW5lcmF0ZU1pcG1hcHMmJm4uZ2VuZXJhdGVNaXBtYXBzLHRoaXMudGV4dHVyZS5taW5GaWx0ZXI9dm9pZCAwIT09bi5taW5GaWx0ZXI/bi5taW5GaWx0ZXI6Yml0LHRoaXMuZGVwdGhCdWZmZXI9dm9pZCAwPT09bi5kZXB0aEJ1ZmZlcnx8bi5kZXB0aEJ1ZmZlcix0aGlzLnN0ZW5jaWxCdWZmZXI9dm9pZCAwIT09bi5zdGVuY2lsQnVmZmVyJiZuLnN0ZW5jaWxCdWZmZXIsdGhpcy5kZXB0aFRleHR1cmU9dm9pZCAwIT09bi5kZXB0aFRleHR1cmU/bi5kZXB0aFRleHR1cmU6bnVsbH1zZXRTaXplKHQsZSl7dGhpcy53aWR0aD09PXQmJnRoaXMuaGVpZ2h0PT09ZXx8KHRoaXMud2lkdGg9dCx0aGlzLmhlaWdodD1lLHRoaXMudGV4dHVyZS5pbWFnZS53aWR0aD10LHRoaXMudGV4dHVyZS5pbWFnZS5oZWlnaHQ9ZSx0aGlzLmRpc3Bvc2UoKSksdGhpcy52aWV3cG9ydC5zZXQoMCwwLHQsZSksdGhpcy5zY2lzc29yLnNldCgwLDAsdCxlKX1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLndpZHRoPXQud2lkdGgsdGhpcy5oZWlnaHQ9dC5oZWlnaHQsdGhpcy52aWV3cG9ydC5jb3B5KHQudmlld3BvcnQpLHRoaXMudGV4dHVyZT10LnRleHR1cmUuY2xvbmUoKSx0aGlzLmRlcHRoQnVmZmVyPXQuZGVwdGhCdWZmZXIsdGhpcy5zdGVuY2lsQnVmZmVyPXQuc3RlbmNpbEJ1ZmZlcix0aGlzLmRlcHRoVGV4dHVyZT10LmRlcHRoVGV4dHVyZSx0aGlzfWRpc3Bvc2UoKXt0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc3Bvc2UifSl9fWNsYXNzIFFpdHtjb25zdHJ1Y3Rvcih0PTAsZT0wLG49MCxvPTEpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpc1F1YXRlcm5pb24iLHt2YWx1ZTohMH0pLHRoaXMuX3g9dCx0aGlzLl95PWUsdGhpcy5fej1uLHRoaXMuX3c9b31zdGF0aWMgc2xlcnAodCxlLG4sbyl7cmV0dXJuIG4uY29weSh0KS5zbGVycChlLG8pfXN0YXRpYyBzbGVycEZsYXQodCxlLG4sbyxpLGEscil7bGV0IHM9bltvKzBdLGw9bltvKzFdLGM9bltvKzJdLGQ9bltvKzNdO2NvbnN0IHA9aVthKzBdLG09aVthKzFdLHU9aVthKzJdLGY9aVthKzNdO2lmKGQhPT1mfHxzIT09cHx8bCE9PW18fGMhPT11KXtsZXQgdD0xLXI7Y29uc3QgZT1zKnArbCptK2MqdStkKmYsbj1lPj0wPzE6LTEsbz0xLWUqZTtpZihvPk51bWJlci5FUFNJTE9OKXtjb25zdCBpPU1hdGguc3FydChvKSxhPU1hdGguYXRhbjIoaSxlKm4pO3Q9TWF0aC5zaW4odCphKS9pLHI9TWF0aC5zaW4ociphKS9pfWNvbnN0IGk9cipuO2lmKHM9cyp0K3AqaSxsPWwqdCttKmksYz1jKnQrdSppLGQ9ZCp0K2YqaSx0PT09MS1yKXtjb25zdCB0PTEvTWF0aC5zcXJ0KHMqcytsKmwrYypjK2QqZCk7cyo9dCxsKj10LGMqPXQsZCo9dH19dFtlXT1zLHRbZSsxXT1sLHRbZSsyXT1jLHRbZSszXT1kfXN0YXRpYyBtdWx0aXBseVF1YXRlcm5pb25zRmxhdCh0LGUsbixvLGksYSl7Y29uc3Qgcj1uW29dLHM9bltvKzFdLGw9bltvKzJdLGM9bltvKzNdLGQ9aVthXSxwPWlbYSsxXSxtPWlbYSsyXSx1PWlbYSszXTtyZXR1cm4gdFtlXT1yKnUrYypkK3MqbS1sKnAsdFtlKzFdPXMqdStjKnArbCpkLXIqbSx0W2UrMl09bCp1K2MqbStyKnAtcypkLHRbZSszXT1jKnUtcipkLXMqcC1sKm0sdH1nZXQgeCgpe3JldHVybiB0aGlzLl94fXNldCB4KHQpe3RoaXMuX3g9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IHkoKXtyZXR1cm4gdGhpcy5feX1zZXQgeSh0KXt0aGlzLl95PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCB6KCl7cmV0dXJuIHRoaXMuX3p9c2V0IHoodCl7dGhpcy5fej10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgdygpe3JldHVybiB0aGlzLl93fXNldCB3KHQpe3RoaXMuX3c9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9c2V0KHQsZSxuLG8pe3JldHVybiB0aGlzLl94PXQsdGhpcy5feT1lLHRoaXMuX3o9bix0aGlzLl93PW8sdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5feCx0aGlzLl95LHRoaXMuX3osdGhpcy5fdyl9Y29weSh0KXtyZXR1cm4gdGhpcy5feD10LngsdGhpcy5feT10LnksdGhpcy5fej10LnosdGhpcy5fdz10LncsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbUV1bGVyKHQsZSl7aWYoIXR8fCF0LmlzRXVsZXIpdGhyb3cgbmV3IEVycm9yKCJUSFJFRS5RdWF0ZXJuaW9uOiAuc2V0RnJvbUV1bGVyKCkgbm93IGV4cGVjdHMgYW4gRXVsZXIgcm90YXRpb24gcmF0aGVyIHRoYW4gYSBWZWN0b3IzIGFuZCBvcmRlci4iKTtjb25zdCBuPXQuX3gsbz10Ll95LGk9dC5feixhPXQuX29yZGVyLHI9TWF0aC5jb3Mscz1NYXRoLnNpbixsPXIobi8yKSxjPXIoby8yKSxkPXIoaS8yKSxwPXMobi8yKSxtPXMoby8yKSx1PXMoaS8yKTtzd2l0Y2goYSl7Y2FzZSJYWVoiOnRoaXMuX3g9cCpjKmQrbCptKnUsdGhpcy5feT1sKm0qZC1wKmMqdSx0aGlzLl96PWwqYyp1K3AqbSpkLHRoaXMuX3c9bCpjKmQtcCptKnU7YnJlYWs7Y2FzZSJZWFoiOnRoaXMuX3g9cCpjKmQrbCptKnUsdGhpcy5feT1sKm0qZC1wKmMqdSx0aGlzLl96PWwqYyp1LXAqbSpkLHRoaXMuX3c9bCpjKmQrcCptKnU7YnJlYWs7Y2FzZSJaWFkiOnRoaXMuX3g9cCpjKmQtbCptKnUsdGhpcy5feT1sKm0qZCtwKmMqdSx0aGlzLl96PWwqYyp1K3AqbSpkLHRoaXMuX3c9bCpjKmQtcCptKnU7YnJlYWs7Y2FzZSJaWVgiOnRoaXMuX3g9cCpjKmQtbCptKnUsdGhpcy5feT1sKm0qZCtwKmMqdSx0aGlzLl96PWwqYyp1LXAqbSpkLHRoaXMuX3c9bCpjKmQrcCptKnU7YnJlYWs7Y2FzZSJZWlgiOnRoaXMuX3g9cCpjKmQrbCptKnUsdGhpcy5feT1sKm0qZCtwKmMqdSx0aGlzLl96PWwqYyp1LXAqbSpkLHRoaXMuX3c9bCpjKmQtcCptKnU7YnJlYWs7Y2FzZSJYWlkiOnRoaXMuX3g9cCpjKmQtbCptKnUsdGhpcy5feT1sKm0qZC1wKmMqdSx0aGlzLl96PWwqYyp1K3AqbSpkLHRoaXMuX3c9bCpjKmQrcCptKnU7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLndhcm4oIlRIUkVFLlF1YXRlcm5pb246IC5zZXRGcm9tRXVsZXIoKSBlbmNvdW50ZXJlZCBhbiB1bmtub3duIG9yZGVyOiAiK2EpfXJldHVybiExIT09ZSYmdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbUF4aXNBbmdsZSh0LGUpe2NvbnN0IG49ZS8yLG89TWF0aC5zaW4obik7cmV0dXJuIHRoaXMuX3g9dC54Km8sdGhpcy5feT10Lnkqbyx0aGlzLl96PXQueipvLHRoaXMuX3c9TWF0aC5jb3MobiksdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbVJvdGF0aW9uTWF0cml4KHQpe2NvbnN0IGU9dC5lbGVtZW50cyxuPWVbMF0sbz1lWzRdLGk9ZVs4XSxhPWVbMV0scj1lWzVdLHM9ZVs5XSxsPWVbMl0sYz1lWzZdLGQ9ZVsxMF0scD1uK3IrZDtpZihwPjApe2NvbnN0IHQ9LjUvTWF0aC5zcXJ0KHArMSk7dGhpcy5fdz0uMjUvdCx0aGlzLl94PShjLXMpKnQsdGhpcy5feT0oaS1sKSp0LHRoaXMuX3o9KGEtbykqdH1lbHNlIGlmKG4+ciYmbj5kKXtjb25zdCB0PTIqTWF0aC5zcXJ0KDErbi1yLWQpO3RoaXMuX3c9KGMtcykvdCx0aGlzLl94PS4yNSp0LHRoaXMuX3k9KG8rYSkvdCx0aGlzLl96PShpK2wpL3R9ZWxzZSBpZihyPmQpe2NvbnN0IHQ9MipNYXRoLnNxcnQoMStyLW4tZCk7dGhpcy5fdz0oaS1sKS90LHRoaXMuX3g9KG8rYSkvdCx0aGlzLl95PS4yNSp0LHRoaXMuX3o9KHMrYykvdH1lbHNle2NvbnN0IHQ9MipNYXRoLnNxcnQoMStkLW4tcik7dGhpcy5fdz0oYS1vKS90LHRoaXMuX3g9KGkrbCkvdCx0aGlzLl95PShzK2MpL3QsdGhpcy5fej0uMjUqdH1yZXR1cm4gdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbVVuaXRWZWN0b3JzKHQsZSl7bGV0IG49dC5kb3QoZSkrMTtyZXR1cm4gbjwxZS02PyhuPTAsTWF0aC5hYnModC54KT5NYXRoLmFicyh0LnopPyh0aGlzLl94PS10LnksdGhpcy5feT10LngsdGhpcy5fej0wLHRoaXMuX3c9bik6KHRoaXMuX3g9MCx0aGlzLl95PS10LnosdGhpcy5fej10LnksdGhpcy5fdz1uKSk6KHRoaXMuX3g9dC55KmUuei10LnoqZS55LHRoaXMuX3k9dC56KmUueC10LngqZS56LHRoaXMuX3o9dC54KmUueS10LnkqZS54LHRoaXMuX3c9biksdGhpcy5ub3JtYWxpemUoKX1hbmdsZVRvKHQpe3JldHVybiAyKk1hdGguYWNvcyhNYXRoLmFicyhqaXQuY2xhbXAodGhpcy5kb3QodCksLTEsMSkpKX1yb3RhdGVUb3dhcmRzKHQsZSl7Y29uc3Qgbj10aGlzLmFuZ2xlVG8odCk7aWYoMD09PW4pcmV0dXJuIHRoaXM7Y29uc3Qgbz1NYXRoLm1pbigxLGUvbik7cmV0dXJuIHRoaXMuc2xlcnAodCxvKSx0aGlzfWlkZW50aXR5KCl7cmV0dXJuIHRoaXMuc2V0KDAsMCwwLDEpfWludmVydCgpe3JldHVybiB0aGlzLmNvbmp1Z2F0ZSgpfWNvbmp1Z2F0ZSgpe3JldHVybiB0aGlzLl94Kj0tMSx0aGlzLl95Kj0tMSx0aGlzLl96Kj0tMSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31kb3QodCl7cmV0dXJuIHRoaXMuX3gqdC5feCt0aGlzLl95KnQuX3krdGhpcy5feip0Ll96K3RoaXMuX3cqdC5fd31sZW5ndGhTcSgpe3JldHVybiB0aGlzLl94KnRoaXMuX3grdGhpcy5feSp0aGlzLl95K3RoaXMuX3oqdGhpcy5feit0aGlzLl93KnRoaXMuX3d9bGVuZ3RoKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLl94KnRoaXMuX3grdGhpcy5feSp0aGlzLl95K3RoaXMuX3oqdGhpcy5feit0aGlzLl93KnRoaXMuX3cpfW5vcm1hbGl6ZSgpe2xldCB0PXRoaXMubGVuZ3RoKCk7cmV0dXJuIDA9PT10Pyh0aGlzLl94PTAsdGhpcy5feT0wLHRoaXMuX3o9MCx0aGlzLl93PTEpOih0PTEvdCx0aGlzLl94PXRoaXMuX3gqdCx0aGlzLl95PXRoaXMuX3kqdCx0aGlzLl96PXRoaXMuX3oqdCx0aGlzLl93PXRoaXMuX3cqdCksdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9bXVsdGlwbHkodCxlKXtyZXR1cm4gdm9pZCAwIT09ZT8oY29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiAubXVsdGlwbHkoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5tdWx0aXBseVF1YXRlcm5pb25zKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLm11bHRpcGx5UXVhdGVybmlvbnModCxlKSk6dGhpcy5tdWx0aXBseVF1YXRlcm5pb25zKHRoaXMsdCl9cHJlbXVsdGlwbHkodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlRdWF0ZXJuaW9ucyh0LHRoaXMpfW11bHRpcGx5UXVhdGVybmlvbnModCxlKXtjb25zdCBuPXQuX3gsbz10Ll95LGk9dC5feixhPXQuX3cscj1lLl94LHM9ZS5feSxsPWUuX3osYz1lLl93O3JldHVybiB0aGlzLl94PW4qYythKnIrbypsLWkqcyx0aGlzLl95PW8qYythKnMraSpyLW4qbCx0aGlzLl96PWkqYythKmwrbipzLW8qcix0aGlzLl93PWEqYy1uKnItbypzLWkqbCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zbGVycCh0LGUpe2lmKDA9PT1lKXJldHVybiB0aGlzO2lmKDE9PT1lKXJldHVybiB0aGlzLmNvcHkodCk7Y29uc3Qgbj10aGlzLl94LG89dGhpcy5feSxpPXRoaXMuX3osYT10aGlzLl93O2xldCByPWEqdC5fdytuKnQuX3grbyp0Ll95K2kqdC5fejtpZihyPDA/KHRoaXMuX3c9LXQuX3csdGhpcy5feD0tdC5feCx0aGlzLl95PS10Ll95LHRoaXMuX3o9LXQuX3oscj0tcik6dGhpcy5jb3B5KHQpLHI+PTEpcmV0dXJuIHRoaXMuX3c9YSx0aGlzLl94PW4sdGhpcy5feT1vLHRoaXMuX3o9aSx0aGlzO2NvbnN0IHM9MS1yKnI7aWYoczw9TnVtYmVyLkVQU0lMT04pe2NvbnN0IHQ9MS1lO3JldHVybiB0aGlzLl93PXQqYStlKnRoaXMuX3csdGhpcy5feD10Km4rZSp0aGlzLl94LHRoaXMuX3k9dCpvK2UqdGhpcy5feSx0aGlzLl96PXQqaStlKnRoaXMuX3osdGhpcy5ub3JtYWxpemUoKSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31jb25zdCBsPU1hdGguc3FydChzKSxjPU1hdGguYXRhbjIobCxyKSxkPU1hdGguc2luKCgxLWUpKmMpL2wscD1NYXRoLnNpbihlKmMpL2w7cmV0dXJuIHRoaXMuX3c9YSpkK3RoaXMuX3cqcCx0aGlzLl94PW4qZCt0aGlzLl94KnAsdGhpcy5feT1vKmQrdGhpcy5feSpwLHRoaXMuX3o9aSpkK3RoaXMuX3oqcCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31lcXVhbHModCl7cmV0dXJuIHQuX3g9PT10aGlzLl94JiZ0Ll95PT09dGhpcy5feSYmdC5fej09PXRoaXMuX3omJnQuX3c9PT10aGlzLl93fWZyb21BcnJheSh0LGU9MCl7cmV0dXJuIHRoaXMuX3g9dFtlXSx0aGlzLl95PXRbZSsxXSx0aGlzLl96PXRbZSsyXSx0aGlzLl93PXRbZSszXSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc310b0FycmF5KHQ9W10sZT0wKXtyZXR1cm4gdFtlXT10aGlzLl94LHRbZSsxXT10aGlzLl95LHRbZSsyXT10aGlzLl96LHRbZSszXT10aGlzLl93LHR9ZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUpe3JldHVybiB0aGlzLl94PXQuZ2V0WChlKSx0aGlzLl95PXQuZ2V0WShlKSx0aGlzLl96PXQuZ2V0WihlKSx0aGlzLl93PXQuZ2V0VyhlKSx0aGlzfV9vbkNoYW5nZSh0KXtyZXR1cm4gdGhpcy5fb25DaGFuZ2VDYWxsYmFjaz10LHRoaXN9X29uQ2hhbmdlQ2FsbGJhY2soKXt9fWNsYXNzICRpdHtjb25zdHJ1Y3Rvcih0PTAsZT0wLG49MCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlzVmVjdG9yMyIse3ZhbHVlOiEwfSksdGhpcy54PXQsdGhpcy55PWUsdGhpcy56PW59c2V0KHQsZSxuKXtyZXR1cm4gdm9pZCAwPT09biYmKG49dGhpcy56KSx0aGlzLng9dCx0aGlzLnk9ZSx0aGlzLno9bix0aGlzfXNldFNjYWxhcih0KXtyZXR1cm4gdGhpcy54PXQsdGhpcy55PXQsdGhpcy56PXQsdGhpc31zZXRYKHQpe3JldHVybiB0aGlzLng9dCx0aGlzfXNldFkodCl7cmV0dXJuIHRoaXMueT10LHRoaXN9c2V0Wih0KXtyZXR1cm4gdGhpcy56PXQsdGhpc31zZXRDb21wb25lbnQodCxlKXtzd2l0Y2godCl7Y2FzZSAwOnRoaXMueD1lO2JyZWFrO2Nhc2UgMTp0aGlzLnk9ZTticmVhaztjYXNlIDI6dGhpcy56PWU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX1yZXR1cm4gdGhpc31nZXRDb21wb25lbnQodCl7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gdGhpcy54O2Nhc2UgMTpyZXR1cm4gdGhpcy55O2Nhc2UgMjpyZXR1cm4gdGhpcy56O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrdCl9fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMueCx0aGlzLnksdGhpcy56KX1jb3B5KHQpe3JldHVybiB0aGlzLng9dC54LHRoaXMueT10LnksdGhpcy56PXQueix0aGlzfWFkZCh0LGUpe3JldHVybiB2b2lkIDAhPT1lPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5hZGQoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5hZGRWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmFkZFZlY3RvcnModCxlKSk6KHRoaXMueCs9dC54LHRoaXMueSs9dC55LHRoaXMueis9dC56LHRoaXMpfWFkZFNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kz10LHRoaXMueSs9dCx0aGlzLnorPXQsdGhpc31hZGRWZWN0b3JzKHQsZSl7cmV0dXJuIHRoaXMueD10LngrZS54LHRoaXMueT10LnkrZS55LHRoaXMuej10LnorZS56LHRoaXN9YWRkU2NhbGVkVmVjdG9yKHQsZSl7cmV0dXJuIHRoaXMueCs9dC54KmUsdGhpcy55Kz10LnkqZSx0aGlzLnorPXQueiplLHRoaXN9c3ViKHQsZSl7cmV0dXJuIHZvaWQgMCE9PWU/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLnN1YigpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLnN1YlZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuc3ViVmVjdG9ycyh0LGUpKToodGhpcy54LT10LngsdGhpcy55LT10LnksdGhpcy56LT10LnosdGhpcyl9c3ViU2NhbGFyKHQpe3JldHVybiB0aGlzLngtPXQsdGhpcy55LT10LHRoaXMuei09dCx0aGlzfXN1YlZlY3RvcnModCxlKXtyZXR1cm4gdGhpcy54PXQueC1lLngsdGhpcy55PXQueS1lLnksdGhpcy56PXQuei1lLnosdGhpc31tdWx0aXBseSh0LGUpe3JldHVybiB2b2lkIDAhPT1lPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5tdWx0aXBseSgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLm11bHRpcGx5VmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5tdWx0aXBseVZlY3RvcnModCxlKSk6KHRoaXMueCo9dC54LHRoaXMueSo9dC55LHRoaXMueio9dC56LHRoaXMpfW11bHRpcGx5U2NhbGFyKHQpe3JldHVybiB0aGlzLngqPXQsdGhpcy55Kj10LHRoaXMueio9dCx0aGlzfW11bHRpcGx5VmVjdG9ycyh0LGUpe3JldHVybiB0aGlzLng9dC54KmUueCx0aGlzLnk9dC55KmUueSx0aGlzLno9dC56KmUueix0aGlzfWFwcGx5RXVsZXIodCl7cmV0dXJuIHQmJnQuaXNFdWxlcnx8Y29uc29sZS5lcnJvcigiVEhSRUUuVmVjdG9yMzogLmFwcGx5RXVsZXIoKSBub3cgZXhwZWN0cyBhbiBFdWxlciByb3RhdGlvbiByYXRoZXIgdGhhbiBhIFZlY3RvcjMgYW5kIG9yZGVyLiIpLHRoaXMuYXBwbHlRdWF0ZXJuaW9uKGVhdC5zZXRGcm9tRXVsZXIodCkpfWFwcGx5QXhpc0FuZ2xlKHQsZSl7cmV0dXJuIHRoaXMuYXBwbHlRdWF0ZXJuaW9uKGVhdC5zZXRGcm9tQXhpc0FuZ2xlKHQsZSkpfWFwcGx5TWF0cml4Myh0KXtjb25zdCBlPXRoaXMueCxuPXRoaXMueSxvPXRoaXMueixpPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMueD1pWzBdKmUraVszXSpuK2lbNl0qbyx0aGlzLnk9aVsxXSplK2lbNF0qbitpWzddKm8sdGhpcy56PWlbMl0qZStpWzVdKm4raVs4XSpvLHRoaXN9YXBwbHlOb3JtYWxNYXRyaXgodCl7cmV0dXJuIHRoaXMuYXBwbHlNYXRyaXgzKHQpLm5vcm1hbGl6ZSgpfWFwcGx5TWF0cml4NCh0KXtjb25zdCBlPXRoaXMueCxuPXRoaXMueSxvPXRoaXMueixpPXQuZWxlbWVudHMsYT0xLyhpWzNdKmUraVs3XSpuK2lbMTFdKm8raVsxNV0pO3JldHVybiB0aGlzLng9KGlbMF0qZStpWzRdKm4raVs4XSpvK2lbMTJdKSphLHRoaXMueT0oaVsxXSplK2lbNV0qbitpWzldKm8raVsxM10pKmEsdGhpcy56PShpWzJdKmUraVs2XSpuK2lbMTBdKm8raVsxNF0pKmEsdGhpc31hcHBseVF1YXRlcm5pb24odCl7Y29uc3QgZT10aGlzLngsbj10aGlzLnksbz10aGlzLnosaT10LngsYT10Lnkscj10Lnoscz10LncsbD1zKmUrYSpvLXIqbixjPXMqbityKmUtaSpvLGQ9cypvK2kqbi1hKmUscD0taSplLWEqbi1yKm87cmV0dXJuIHRoaXMueD1sKnMrcCotaStjKi1yLWQqLWEsdGhpcy55PWMqcytwKi1hK2QqLWktbCotcix0aGlzLno9ZCpzK3AqLXIrbCotYS1jKi1pLHRoaXN9cHJvamVjdCh0KXtyZXR1cm4gdGhpcy5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZEludmVyc2UpLmFwcGx5TWF0cml4NCh0LnByb2plY3Rpb25NYXRyaXgpfXVucHJvamVjdCh0KXtyZXR1cm4gdGhpcy5hcHBseU1hdHJpeDQodC5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZSkuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGQpfXRyYW5zZm9ybURpcmVjdGlvbih0KXtjb25zdCBlPXRoaXMueCxuPXRoaXMueSxvPXRoaXMueixpPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMueD1pWzBdKmUraVs0XSpuK2lbOF0qbyx0aGlzLnk9aVsxXSplK2lbNV0qbitpWzldKm8sdGhpcy56PWlbMl0qZStpWzZdKm4raVsxMF0qbyx0aGlzLm5vcm1hbGl6ZSgpfWRpdmlkZSh0KXtyZXR1cm4gdGhpcy54Lz10LngsdGhpcy55Lz10LnksdGhpcy56Lz10LnosdGhpc31kaXZpZGVTY2FsYXIodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlTY2FsYXIoMS90KX1taW4odCl7cmV0dXJuIHRoaXMueD1NYXRoLm1pbih0aGlzLngsdC54KSx0aGlzLnk9TWF0aC5taW4odGhpcy55LHQueSksdGhpcy56PU1hdGgubWluKHRoaXMueix0LnopLHRoaXN9bWF4KHQpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodGhpcy54LHQueCksdGhpcy55PU1hdGgubWF4KHRoaXMueSx0LnkpLHRoaXMuej1NYXRoLm1heCh0aGlzLnosdC56KSx0aGlzfWNsYW1wKHQsZSl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LngsTWF0aC5taW4oZS54LHRoaXMueCkpLHRoaXMueT1NYXRoLm1heCh0LnksTWF0aC5taW4oZS55LHRoaXMueSkpLHRoaXMuej1NYXRoLm1heCh0LnosTWF0aC5taW4oZS56LHRoaXMueikpLHRoaXN9Y2xhbXBTY2FsYXIodCxlKXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMueSkpLHRoaXMuej1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy56KSksdGhpc31jbGFtcExlbmd0aCh0LGUpe2NvbnN0IG49dGhpcy5sZW5ndGgoKTtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIobnx8MSkubXVsdGlwbHlTY2FsYXIoTWF0aC5tYXgodCxNYXRoLm1pbihlLG4pKSl9Zmxvb3IoKXtyZXR1cm4gdGhpcy54PU1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9TWF0aC5mbG9vcih0aGlzLnkpLHRoaXMuej1NYXRoLmZsb29yKHRoaXMueiksdGhpc31jZWlsKCl7cmV0dXJuIHRoaXMueD1NYXRoLmNlaWwodGhpcy54KSx0aGlzLnk9TWF0aC5jZWlsKHRoaXMueSksdGhpcy56PU1hdGguY2VpbCh0aGlzLnopLHRoaXN9cm91bmQoKXtyZXR1cm4gdGhpcy54PU1hdGgucm91bmQodGhpcy54KSx0aGlzLnk9TWF0aC5yb3VuZCh0aGlzLnkpLHRoaXMuej1NYXRoLnJvdW5kKHRoaXMueiksdGhpc31yb3VuZFRvWmVybygpe3JldHVybiB0aGlzLng9dGhpcy54PDA/TWF0aC5jZWlsKHRoaXMueCk6TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT10aGlzLnk8MD9NYXRoLmNlaWwodGhpcy55KTpNYXRoLmZsb29yKHRoaXMueSksdGhpcy56PXRoaXMuejwwP01hdGguY2VpbCh0aGlzLnopOk1hdGguZmxvb3IodGhpcy56KSx0aGlzfW5lZ2F0ZSgpe3JldHVybiB0aGlzLng9LXRoaXMueCx0aGlzLnk9LXRoaXMueSx0aGlzLno9LXRoaXMueix0aGlzfWRvdCh0KXtyZXR1cm4gdGhpcy54KnQueCt0aGlzLnkqdC55K3RoaXMueip0Lnp9bGVuZ3RoU3EoKXtyZXR1cm4gdGhpcy54KnRoaXMueCt0aGlzLnkqdGhpcy55K3RoaXMueip0aGlzLnp9bGVuZ3RoKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkrdGhpcy56KnRoaXMueil9bWFuaGF0dGFuTGVuZ3RoKCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueCkrTWF0aC5hYnModGhpcy55KStNYXRoLmFicyh0aGlzLnopfW5vcm1hbGl6ZSgpe3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcih0aGlzLmxlbmd0aCgpfHwxKX1zZXRMZW5ndGgodCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCkubXVsdGlwbHlTY2FsYXIodCl9bGVycCh0LGUpe3JldHVybiB0aGlzLngrPSh0LngtdGhpcy54KSplLHRoaXMueSs9KHQueS10aGlzLnkpKmUsdGhpcy56Kz0odC56LXRoaXMueikqZSx0aGlzfWxlcnBWZWN0b3JzKHQsZSxuKXtyZXR1cm4gdGhpcy54PXQueCsoZS54LXQueCkqbix0aGlzLnk9dC55KyhlLnktdC55KSpuLHRoaXMuej10LnorKGUuei10LnopKm4sdGhpc31jcm9zcyh0LGUpe3JldHVybiB2b2lkIDAhPT1lPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5jcm9zcygpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLmNyb3NzVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5jcm9zc1ZlY3RvcnModCxlKSk6dGhpcy5jcm9zc1ZlY3RvcnModGhpcyx0KX1jcm9zc1ZlY3RvcnModCxlKXtjb25zdCBuPXQueCxvPXQueSxpPXQueixhPWUueCxyPWUueSxzPWUuejtyZXR1cm4gdGhpcy54PW8qcy1pKnIsdGhpcy55PWkqYS1uKnMsdGhpcy56PW4qci1vKmEsdGhpc31wcm9qZWN0T25WZWN0b3IodCl7Y29uc3QgZT10Lmxlbmd0aFNxKCk7aWYoMD09PWUpcmV0dXJuIHRoaXMuc2V0KDAsMCwwKTtjb25zdCBuPXQuZG90KHRoaXMpL2U7cmV0dXJuIHRoaXMuY29weSh0KS5tdWx0aXBseVNjYWxhcihuKX1wcm9qZWN0T25QbGFuZSh0KXtyZXR1cm4gdGF0LmNvcHkodGhpcykucHJvamVjdE9uVmVjdG9yKHQpLHRoaXMuc3ViKHRhdCl9cmVmbGVjdCh0KXtyZXR1cm4gdGhpcy5zdWIodGF0LmNvcHkodCkubXVsdGlwbHlTY2FsYXIoMip0aGlzLmRvdCh0KSkpfWFuZ2xlVG8odCl7Y29uc3QgZT1NYXRoLnNxcnQodGhpcy5sZW5ndGhTcSgpKnQubGVuZ3RoU3EoKSk7aWYoMD09PWUpcmV0dXJuIE1hdGguUEkvMjtjb25zdCBuPXRoaXMuZG90KHQpL2U7cmV0dXJuIE1hdGguYWNvcyhqaXQuY2xhbXAobiwtMSwxKSl9ZGlzdGFuY2VUbyh0KXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdGFuY2VUb1NxdWFyZWQodCkpfWRpc3RhbmNlVG9TcXVhcmVkKHQpe2NvbnN0IGU9dGhpcy54LXQueCxuPXRoaXMueS10Lnksbz10aGlzLnotdC56O3JldHVybiBlKmUrbipuK28qb31tYW5oYXR0YW5EaXN0YW5jZVRvKHQpe3JldHVybiBNYXRoLmFicyh0aGlzLngtdC54KStNYXRoLmFicyh0aGlzLnktdC55KStNYXRoLmFicyh0aGlzLnotdC56KX1zZXRGcm9tU3BoZXJpY2FsKHQpe3JldHVybiB0aGlzLnNldEZyb21TcGhlcmljYWxDb29yZHModC5yYWRpdXMsdC5waGksdC50aGV0YSl9c2V0RnJvbVNwaGVyaWNhbENvb3Jkcyh0LGUsbil7Y29uc3Qgbz1NYXRoLnNpbihlKSp0O3JldHVybiB0aGlzLng9bypNYXRoLnNpbihuKSx0aGlzLnk9TWF0aC5jb3MoZSkqdCx0aGlzLno9bypNYXRoLmNvcyhuKSx0aGlzfXNldEZyb21DeWxpbmRyaWNhbCh0KXtyZXR1cm4gdGhpcy5zZXRGcm9tQ3lsaW5kcmljYWxDb29yZHModC5yYWRpdXMsdC50aGV0YSx0LnkpfXNldEZyb21DeWxpbmRyaWNhbENvb3Jkcyh0LGUsbil7cmV0dXJuIHRoaXMueD10Kk1hdGguc2luKGUpLHRoaXMueT1uLHRoaXMuej10Kk1hdGguY29zKGUpLHRoaXN9c2V0RnJvbU1hdHJpeFBvc2l0aW9uKHQpe2NvbnN0IGU9dC5lbGVtZW50cztyZXR1cm4gdGhpcy54PWVbMTJdLHRoaXMueT1lWzEzXSx0aGlzLno9ZVsxNF0sdGhpc31zZXRGcm9tTWF0cml4U2NhbGUodCl7Y29uc3QgZT10aGlzLnNldEZyb21NYXRyaXhDb2x1bW4odCwwKS5sZW5ndGgoKSxuPXRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbih0LDEpLmxlbmd0aCgpLG89dGhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKHQsMikubGVuZ3RoKCk7cmV0dXJuIHRoaXMueD1lLHRoaXMueT1uLHRoaXMuej1vLHRoaXN9c2V0RnJvbU1hdHJpeENvbHVtbih0LGUpe3JldHVybiB0aGlzLmZyb21BcnJheSh0LmVsZW1lbnRzLDQqZSl9c2V0RnJvbU1hdHJpeDNDb2x1bW4odCxlKXtyZXR1cm4gdGhpcy5mcm9tQXJyYXkodC5lbGVtZW50cywzKmUpfWVxdWFscyh0KXtyZXR1cm4gdC54PT09dGhpcy54JiZ0Lnk9PT10aGlzLnkmJnQuej09PXRoaXMuen1mcm9tQXJyYXkodCxlPTApe3JldHVybiB0aGlzLng9dFtlXSx0aGlzLnk9dFtlKzFdLHRoaXMuej10W2UrMl0sdGhpc310b0FycmF5KHQ9W10sZT0wKXtyZXR1cm4gdFtlXT10aGlzLngsdFtlKzFdPXRoaXMueSx0W2UrMl09dGhpcy56LHR9ZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUsbil7cmV0dXJuIHZvaWQgMCE9PW4mJmNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogb2Zmc2V0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMueD10LmdldFgoZSksdGhpcy55PXQuZ2V0WShlKSx0aGlzLno9dC5nZXRaKGUpLHRoaXN9cmFuZG9tKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJhbmRvbSgpLHRoaXMueT1NYXRoLnJhbmRvbSgpLHRoaXMuej1NYXRoLnJhbmRvbSgpLHRoaXN9fWNvbnN0IHRhdD1uZXcgJGl0LGVhdD1uZXcgUWl0O2NsYXNzIG5hdHtjb25zdHJ1Y3Rvcih0LGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpc0JveDMiLHt2YWx1ZTohMH0pLHRoaXMubWluPXZvaWQgMCE9PXQ/dDpuZXcgJGl0KDEvMCwxLzAsMS8wKSx0aGlzLm1heD12b2lkIDAhPT1lP2U6bmV3ICRpdCgtMS8wLC0xLzAsLTEvMCl9c2V0KHQsZSl7cmV0dXJuIHRoaXMubWluLmNvcHkodCksdGhpcy5tYXguY29weShlKSx0aGlzfXNldEZyb21BcnJheSh0KXtsZXQgZT0xLzAsbj0xLzAsbz0xLzAsaT0tMS8wLGE9LTEvMCxyPS0xLzA7Zm9yKGxldCBzPTAsbD10Lmxlbmd0aDtzPGw7cys9Myl7Y29uc3QgbD10W3NdLGM9dFtzKzFdLGQ9dFtzKzJdO2w8ZSYmKGU9bCksYzxuJiYobj1jKSxkPG8mJihvPWQpLGw+aSYmKGk9bCksYz5hJiYoYT1jKSxkPnImJihyPWQpfXJldHVybiB0aGlzLm1pbi5zZXQoZSxuLG8pLHRoaXMubWF4LnNldChpLGEsciksdGhpc31zZXRGcm9tQnVmZmVyQXR0cmlidXRlKHQpe2xldCBlPTEvMCxuPTEvMCxvPTEvMCxpPS0xLzAsYT0tMS8wLHI9LTEvMDtmb3IobGV0IHM9MCxsPXQuY291bnQ7czxsO3MrKyl7Y29uc3QgbD10LmdldFgocyksYz10LmdldFkocyksZD10LmdldFoocyk7bDxlJiYoZT1sKSxjPG4mJihuPWMpLGQ8byYmKG89ZCksbD5pJiYoaT1sKSxjPmEmJihhPWMpLGQ+ciYmKHI9ZCl9cmV0dXJuIHRoaXMubWluLnNldChlLG4sbyksdGhpcy5tYXguc2V0KGksYSxyKSx0aGlzfXNldEZyb21Qb2ludHModCl7dGhpcy5tYWtlRW1wdHkoKTtmb3IobGV0IGU9MCxuPXQubGVuZ3RoO2U8bjtlKyspdGhpcy5leHBhbmRCeVBvaW50KHRbZV0pO3JldHVybiB0aGlzfXNldEZyb21DZW50ZXJBbmRTaXplKHQsZSl7Y29uc3Qgbj1hYXQuY29weShlKS5tdWx0aXBseVNjYWxhciguNSk7cmV0dXJuIHRoaXMubWluLmNvcHkodCkuc3ViKG4pLHRoaXMubWF4LmNvcHkodCkuYWRkKG4pLHRoaXN9c2V0RnJvbU9iamVjdCh0KXtyZXR1cm4gdGhpcy5tYWtlRW1wdHkoKSx0aGlzLmV4cGFuZEJ5T2JqZWN0KHQpfWNsb25lKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMubWluLmNvcHkodC5taW4pLHRoaXMubWF4LmNvcHkodC5tYXgpLHRoaXN9bWFrZUVtcHR5KCl7cmV0dXJuIHRoaXMubWluLng9dGhpcy5taW4ueT10aGlzLm1pbi56PTEvMCx0aGlzLm1heC54PXRoaXMubWF4Lnk9dGhpcy5tYXguej0tMS8wLHRoaXN9aXNFbXB0eSgpe3JldHVybiB0aGlzLm1heC54PHRoaXMubWluLnh8fHRoaXMubWF4Lnk8dGhpcy5taW4ueXx8dGhpcy5tYXguejx0aGlzLm1pbi56fWdldENlbnRlcih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKGNvbnNvbGUud2FybigiVEhSRUUuQm94MzogLmdldENlbnRlcigpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSx0PW5ldyAkaXQpLHRoaXMuaXNFbXB0eSgpP3Quc2V0KDAsMCwwKTp0LmFkZFZlY3RvcnModGhpcy5taW4sdGhpcy5tYXgpLm11bHRpcGx5U2NhbGFyKC41KX1nZXRTaXplKHQpe3JldHVybiB2b2lkIDA9PT10JiYoY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuZ2V0U2l6ZSgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSx0PW5ldyAkaXQpLHRoaXMuaXNFbXB0eSgpP3Quc2V0KDAsMCwwKTp0LnN1YlZlY3RvcnModGhpcy5tYXgsdGhpcy5taW4pfWV4cGFuZEJ5UG9pbnQodCl7cmV0dXJuIHRoaXMubWluLm1pbih0KSx0aGlzLm1heC5tYXgodCksdGhpc31leHBhbmRCeVZlY3Rvcih0KXtyZXR1cm4gdGhpcy5taW4uc3ViKHQpLHRoaXMubWF4LmFkZCh0KSx0aGlzfWV4cGFuZEJ5U2NhbGFyKHQpe3JldHVybiB0aGlzLm1pbi5hZGRTY2FsYXIoLXQpLHRoaXMubWF4LmFkZFNjYWxhcih0KSx0aGlzfWV4cGFuZEJ5T2JqZWN0KHQpe3QudXBkYXRlV29ybGRNYXRyaXgoITEsITEpO2NvbnN0IGU9dC5nZW9tZXRyeTt2b2lkIDAhPT1lJiYobnVsbD09PWUuYm91bmRpbmdCb3gmJmUuY29tcHV0ZUJvdW5kaW5nQm94KCkscmF0LmNvcHkoZS5ib3VuZGluZ0JveCkscmF0LmFwcGx5TWF0cml4NCh0Lm1hdHJpeFdvcmxkKSx0aGlzLnVuaW9uKHJhdCkpO2NvbnN0IG49dC5jaGlsZHJlbjtmb3IobGV0IHQ9MCxlPW4ubGVuZ3RoO3Q8ZTt0KyspdGhpcy5leHBhbmRCeU9iamVjdChuW3RdKTtyZXR1cm4gdGhpc31jb250YWluc1BvaW50KHQpe3JldHVybiEodC54PHRoaXMubWluLnh8fHQueD50aGlzLm1heC54fHx0Lnk8dGhpcy5taW4ueXx8dC55PnRoaXMubWF4Lnl8fHQuejx0aGlzLm1pbi56fHx0Lno+dGhpcy5tYXgueil9Y29udGFpbnNCb3godCl7cmV0dXJuIHRoaXMubWluLng8PXQubWluLngmJnQubWF4Lng8PXRoaXMubWF4LngmJnRoaXMubWluLnk8PXQubWluLnkmJnQubWF4Lnk8PXRoaXMubWF4LnkmJnRoaXMubWluLno8PXQubWluLnomJnQubWF4Lno8PXRoaXMubWF4Lnp9Z2V0UGFyYW1ldGVyKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5nZXRQYXJhbWV0ZXIoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIiksZT1uZXcgJGl0KSxlLnNldCgodC54LXRoaXMubWluLngpLyh0aGlzLm1heC54LXRoaXMubWluLngpLCh0LnktdGhpcy5taW4ueSkvKHRoaXMubWF4LnktdGhpcy5taW4ueSksKHQuei10aGlzLm1pbi56KS8odGhpcy5tYXguei10aGlzLm1pbi56KSl9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4hKHQubWF4Lng8dGhpcy5taW4ueHx8dC5taW4ueD50aGlzLm1heC54fHx0Lm1heC55PHRoaXMubWluLnl8fHQubWluLnk+dGhpcy5tYXgueXx8dC5tYXguejx0aGlzLm1pbi56fHx0Lm1pbi56PnRoaXMubWF4LnopfWludGVyc2VjdHNTcGhlcmUodCl7cmV0dXJuIHRoaXMuY2xhbXBQb2ludCh0LmNlbnRlcixhYXQpLGFhdC5kaXN0YW5jZVRvU3F1YXJlZCh0LmNlbnRlcik8PXQucmFkaXVzKnQucmFkaXVzfWludGVyc2VjdHNQbGFuZSh0KXtsZXQgZSxuO3JldHVybiB0Lm5vcm1hbC54PjA/KGU9dC5ub3JtYWwueCp0aGlzLm1pbi54LG49dC5ub3JtYWwueCp0aGlzLm1heC54KTooZT10Lm5vcm1hbC54KnRoaXMubWF4Lngsbj10Lm5vcm1hbC54KnRoaXMubWluLngpLHQubm9ybWFsLnk+MD8oZSs9dC5ub3JtYWwueSp0aGlzLm1pbi55LG4rPXQubm9ybWFsLnkqdGhpcy5tYXgueSk6KGUrPXQubm9ybWFsLnkqdGhpcy5tYXgueSxuKz10Lm5vcm1hbC55KnRoaXMubWluLnkpLHQubm9ybWFsLno+MD8oZSs9dC5ub3JtYWwueip0aGlzLm1pbi56LG4rPXQubm9ybWFsLnoqdGhpcy5tYXgueik6KGUrPXQubm9ybWFsLnoqdGhpcy5tYXgueixuKz10Lm5vcm1hbC56KnRoaXMubWluLnopLGU8PS10LmNvbnN0YW50JiZuPj0tdC5jb25zdGFudH1pbnRlcnNlY3RzVHJpYW5nbGUodCl7aWYodGhpcy5pc0VtcHR5KCkpcmV0dXJuITE7dGhpcy5nZXRDZW50ZXIodWF0KSxmYXQuc3ViVmVjdG9ycyh0aGlzLm1heCx1YXQpLHNhdC5zdWJWZWN0b3JzKHQuYSx1YXQpLGxhdC5zdWJWZWN0b3JzKHQuYix1YXQpLGNhdC5zdWJWZWN0b3JzKHQuYyx1YXQpLGRhdC5zdWJWZWN0b3JzKGxhdCxzYXQpLHBhdC5zdWJWZWN0b3JzKGNhdCxsYXQpLG1hdC5zdWJWZWN0b3JzKHNhdCxjYXQpO2xldCBlPVswLC1kYXQueixkYXQueSwwLC1wYXQueixwYXQueSwwLC1tYXQueixtYXQueSxkYXQueiwwLC1kYXQueCxwYXQueiwwLC1wYXQueCxtYXQueiwwLC1tYXQueCwtZGF0LnksZGF0LngsMCwtcGF0LnkscGF0LngsMCwtbWF0LnksbWF0LngsMF07cmV0dXJuISFvYXQoZSxzYXQsbGF0LGNhdCxmYXQpJiYoZT1bMSwwLDAsMCwxLDAsMCwwLDFdLCEhb2F0KGUsc2F0LGxhdCxjYXQsZmF0KSYmKGdhdC5jcm9zc1ZlY3RvcnMoZGF0LHBhdCksZT1bZ2F0LngsZ2F0LnksZ2F0LnpdLG9hdChlLHNhdCxsYXQsY2F0LGZhdCkpKX1jbGFtcFBvaW50KHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5jbGFtcFBvaW50KCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLGU9bmV3ICRpdCksZS5jb3B5KHQpLmNsYW1wKHRoaXMubWluLHRoaXMubWF4KX1kaXN0YW5jZVRvUG9pbnQodCl7cmV0dXJuIGFhdC5jb3B5KHQpLmNsYW1wKHRoaXMubWluLHRoaXMubWF4KS5zdWIodCkubGVuZ3RoKCl9Z2V0Qm91bmRpbmdTcGhlcmUodCl7cmV0dXJuIHZvaWQgMD09PXQmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLkJveDM6IC5nZXRCb3VuZGluZ1NwaGVyZSgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSx0aGlzLmdldENlbnRlcih0LmNlbnRlciksdC5yYWRpdXM9LjUqdGhpcy5nZXRTaXplKGFhdCkubGVuZ3RoKCksdH1pbnRlcnNlY3QodCl7cmV0dXJuIHRoaXMubWluLm1heCh0Lm1pbiksdGhpcy5tYXgubWluKHQubWF4KSx0aGlzLmlzRW1wdHkoKSYmdGhpcy5tYWtlRW1wdHkoKSx0aGlzfXVuaW9uKHQpe3JldHVybiB0aGlzLm1pbi5taW4odC5taW4pLHRoaXMubWF4Lm1heCh0Lm1heCksdGhpc31hcHBseU1hdHJpeDQodCl7cmV0dXJuIHRoaXMuaXNFbXB0eSgpfHwoaWF0WzBdLnNldCh0aGlzLm1pbi54LHRoaXMubWluLnksdGhpcy5taW4ueikuYXBwbHlNYXRyaXg0KHQpLGlhdFsxXS5zZXQodGhpcy5taW4ueCx0aGlzLm1pbi55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSxpYXRbMl0uc2V0KHRoaXMubWluLngsdGhpcy5tYXgueSx0aGlzLm1pbi56KS5hcHBseU1hdHJpeDQodCksaWF0WzNdLnNldCh0aGlzLm1pbi54LHRoaXMubWF4LnksdGhpcy5tYXgueikuYXBwbHlNYXRyaXg0KHQpLGlhdFs0XS5zZXQodGhpcy5tYXgueCx0aGlzLm1pbi55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxpYXRbNV0uc2V0KHRoaXMubWF4LngsdGhpcy5taW4ueSx0aGlzLm1heC56KS5hcHBseU1hdHJpeDQodCksaWF0WzZdLnNldCh0aGlzLm1heC54LHRoaXMubWF4LnksdGhpcy5taW4ueikuYXBwbHlNYXRyaXg0KHQpLGlhdFs3XS5zZXQodGhpcy5tYXgueCx0aGlzLm1heC55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSx0aGlzLnNldEZyb21Qb2ludHMoaWF0KSksdGhpc310cmFuc2xhdGUodCl7cmV0dXJuIHRoaXMubWluLmFkZCh0KSx0aGlzLm1heC5hZGQodCksdGhpc31lcXVhbHModCl7cmV0dXJuIHQubWluLmVxdWFscyh0aGlzLm1pbikmJnQubWF4LmVxdWFscyh0aGlzLm1heCl9fWZ1bmN0aW9uIG9hdCh0LGUsbixvLGkpe2ZvcihsZXQgYT0wLHI9dC5sZW5ndGgtMzthPD1yO2ErPTMpe2hhdC5mcm9tQXJyYXkodCxhKTtjb25zdCByPWkueCpNYXRoLmFicyhoYXQueCkraS55Kk1hdGguYWJzKGhhdC55KStpLnoqTWF0aC5hYnMoaGF0LnopLHM9ZS5kb3QoaGF0KSxsPW4uZG90KGhhdCksYz1vLmRvdChoYXQpO2lmKE1hdGgubWF4KC1NYXRoLm1heChzLGwsYyksTWF0aC5taW4ocyxsLGMpKT5yKXJldHVybiExfXJldHVybiEwfWNvbnN0IGlhdD1bbmV3ICRpdCxuZXcgJGl0LG5ldyAkaXQsbmV3ICRpdCxuZXcgJGl0LG5ldyAkaXQsbmV3ICRpdCxuZXcgJGl0XSxhYXQ9bmV3ICRpdCxyYXQ9bmV3IG5hdCxzYXQ9bmV3ICRpdCxsYXQ9bmV3ICRpdCxjYXQ9bmV3ICRpdCxkYXQ9bmV3ICRpdCxwYXQ9bmV3ICRpdCxtYXQ9bmV3ICRpdCx1YXQ9bmV3ICRpdCxmYXQ9bmV3ICRpdCxnYXQ9bmV3ICRpdCxoYXQ9bmV3ICRpdCxiYXQ9bmV3IG5hdDtjbGFzcyB5YXR7Y29uc3RydWN0b3IodCxlKXt0aGlzLmNlbnRlcj12b2lkIDAhPT10P3Q6bmV3ICRpdCx0aGlzLnJhZGl1cz12b2lkIDAhPT1lP2U6LTF9c2V0KHQsZSl7cmV0dXJuIHRoaXMuY2VudGVyLmNvcHkodCksdGhpcy5yYWRpdXM9ZSx0aGlzfXNldEZyb21Qb2ludHModCxlKXtjb25zdCBuPXRoaXMuY2VudGVyO3ZvaWQgMCE9PWU/bi5jb3B5KGUpOmJhdC5zZXRGcm9tUG9pbnRzKHQpLmdldENlbnRlcihuKTtsZXQgbz0wO2ZvcihsZXQgZT0wLGk9dC5sZW5ndGg7ZTxpO2UrKylvPU1hdGgubWF4KG8sbi5kaXN0YW5jZVRvU3F1YXJlZCh0W2VdKSk7cmV0dXJuIHRoaXMucmFkaXVzPU1hdGguc3FydChvKSx0aGlzfWNsb25lKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMuY2VudGVyLmNvcHkodC5jZW50ZXIpLHRoaXMucmFkaXVzPXQucmFkaXVzLHRoaXN9aXNFbXB0eSgpe3JldHVybiB0aGlzLnJhZGl1czwwfW1ha2VFbXB0eSgpe3JldHVybiB0aGlzLmNlbnRlci5zZXQoMCwwLDApLHRoaXMucmFkaXVzPS0xLHRoaXN9Y29udGFpbnNQb2ludCh0KXtyZXR1cm4gdC5kaXN0YW5jZVRvU3F1YXJlZCh0aGlzLmNlbnRlcik8PXRoaXMucmFkaXVzKnRoaXMucmFkaXVzfWRpc3RhbmNlVG9Qb2ludCh0KXtyZXR1cm4gdC5kaXN0YW5jZVRvKHRoaXMuY2VudGVyKS10aGlzLnJhZGl1c31pbnRlcnNlY3RzU3BoZXJlKHQpe2NvbnN0IGU9dGhpcy5yYWRpdXMrdC5yYWRpdXM7cmV0dXJuIHQuY2VudGVyLmRpc3RhbmNlVG9TcXVhcmVkKHRoaXMuY2VudGVyKTw9ZSplfWludGVyc2VjdHNCb3godCl7cmV0dXJuIHQuaW50ZXJzZWN0c1NwaGVyZSh0aGlzKX1pbnRlcnNlY3RzUGxhbmUodCl7cmV0dXJuIE1hdGguYWJzKHQuZGlzdGFuY2VUb1BvaW50KHRoaXMuY2VudGVyKSk8PXRoaXMucmFkaXVzfWNsYW1wUG9pbnQodCxlKXtjb25zdCBuPXRoaXMuY2VudGVyLmRpc3RhbmNlVG9TcXVhcmVkKHQpO3JldHVybiB2b2lkIDA9PT1lJiYoY29uc29sZS53YXJuKCJUSFJFRS5TcGhlcmU6IC5jbGFtcFBvaW50KCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLGU9bmV3ICRpdCksZS5jb3B5KHQpLG4+dGhpcy5yYWRpdXMqdGhpcy5yYWRpdXMmJihlLnN1Yih0aGlzLmNlbnRlcikubm9ybWFsaXplKCksZS5tdWx0aXBseVNjYWxhcih0aGlzLnJhZGl1cykuYWRkKHRoaXMuY2VudGVyKSksZX1nZXRCb3VuZGluZ0JveCh0KXtyZXR1cm4gdm9pZCAwPT09dCYmKGNvbnNvbGUud2FybigiVEhSRUUuU3BoZXJlOiAuZ2V0Qm91bmRpbmdCb3goKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIiksdD1uZXcgbmF0KSx0aGlzLmlzRW1wdHkoKT8odC5tYWtlRW1wdHkoKSx0KToodC5zZXQodGhpcy5jZW50ZXIsdGhpcy5jZW50ZXIpLHQuZXhwYW5kQnlTY2FsYXIodGhpcy5yYWRpdXMpLHQpfWFwcGx5TWF0cml4NCh0KXtyZXR1cm4gdGhpcy5jZW50ZXIuYXBwbHlNYXRyaXg0KHQpLHRoaXMucmFkaXVzPXRoaXMucmFkaXVzKnQuZ2V0TWF4U2NhbGVPbkF4aXMoKSx0aGlzfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5jZW50ZXIuYWRkKHQpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0LmNlbnRlci5lcXVhbHModGhpcy5jZW50ZXIpJiZ0LnJhZGl1cz09PXRoaXMucmFkaXVzfX1jb25zdCBfYXQ9bmV3ICRpdCxDYXQ9bmV3ICRpdCxNYXQ9bmV3ICRpdCx2YXQ9bmV3ICRpdCx4YXQ9bmV3ICRpdCxPYXQ9bmV3ICRpdCxQYXQ9bmV3ICRpdDtjbGFzcyB3YXR7Y29uc3RydWN0b3IodCxlKXt0aGlzLm9yaWdpbj12b2lkIDAhPT10P3Q6bmV3ICRpdCx0aGlzLmRpcmVjdGlvbj12b2lkIDAhPT1lP2U6bmV3ICRpdCgwLDAsLTEpfXNldCh0LGUpe3JldHVybiB0aGlzLm9yaWdpbi5jb3B5KHQpLHRoaXMuZGlyZWN0aW9uLmNvcHkoZSksdGhpc31jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLm9yaWdpbi5jb3B5KHQub3JpZ2luKSx0aGlzLmRpcmVjdGlvbi5jb3B5KHQuZGlyZWN0aW9uKSx0aGlzfWF0KHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihjb25zb2xlLndhcm4oIlRIUkVFLlJheTogLmF0KCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLGU9bmV3ICRpdCksZS5jb3B5KHRoaXMuZGlyZWN0aW9uKS5tdWx0aXBseVNjYWxhcih0KS5hZGQodGhpcy5vcmlnaW4pfWxvb2tBdCh0KXtyZXR1cm4gdGhpcy5kaXJlY3Rpb24uY29weSh0KS5zdWIodGhpcy5vcmlnaW4pLm5vcm1hbGl6ZSgpLHRoaXN9cmVjYXN0KHQpe3JldHVybiB0aGlzLm9yaWdpbi5jb3B5KHRoaXMuYXQodCxfYXQpKSx0aGlzfWNsb3Nlc3RQb2ludFRvUG9pbnQodCxlKXt2b2lkIDA9PT1lJiYoY29uc29sZS53YXJuKCJUSFJFRS5SYXk6IC5jbG9zZXN0UG9pbnRUb1BvaW50KCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLGU9bmV3ICRpdCksZS5zdWJWZWN0b3JzKHQsdGhpcy5vcmlnaW4pO2NvbnN0IG49ZS5kb3QodGhpcy5kaXJlY3Rpb24pO3JldHVybiBuPDA/ZS5jb3B5KHRoaXMub3JpZ2luKTplLmNvcHkodGhpcy5kaXJlY3Rpb24pLm11bHRpcGx5U2NhbGFyKG4pLmFkZCh0aGlzLm9yaWdpbil9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiBNYXRoLnNxcnQodGhpcy5kaXN0YW5jZVNxVG9Qb2ludCh0KSl9ZGlzdGFuY2VTcVRvUG9pbnQodCl7Y29uc3QgZT1fYXQuc3ViVmVjdG9ycyh0LHRoaXMub3JpZ2luKS5kb3QodGhpcy5kaXJlY3Rpb24pO3JldHVybiBlPDA/dGhpcy5vcmlnaW4uZGlzdGFuY2VUb1NxdWFyZWQodCk6KF9hdC5jb3B5KHRoaXMuZGlyZWN0aW9uKS5tdWx0aXBseVNjYWxhcihlKS5hZGQodGhpcy5vcmlnaW4pLF9hdC5kaXN0YW5jZVRvU3F1YXJlZCh0KSl9ZGlzdGFuY2VTcVRvU2VnbWVudCh0LGUsbixvKXtDYXQuY29weSh0KS5hZGQoZSkubXVsdGlwbHlTY2FsYXIoLjUpLE1hdC5jb3B5KGUpLnN1Yih0KS5ub3JtYWxpemUoKSx2YXQuY29weSh0aGlzLm9yaWdpbikuc3ViKENhdCk7Y29uc3QgaT0uNSp0LmRpc3RhbmNlVG8oZSksYT0tdGhpcy5kaXJlY3Rpb24uZG90KE1hdCkscj12YXQuZG90KHRoaXMuZGlyZWN0aW9uKSxzPS12YXQuZG90KE1hdCksbD12YXQubGVuZ3RoU3EoKSxjPU1hdGguYWJzKDEtYSphKTtsZXQgZCxwLG0sdTtpZihjPjApaWYoZD1hKnMtcixwPWEqci1zLHU9aSpjLGQ+PTApaWYocD49LXUpaWYocDw9dSl7Y29uc3QgdD0xL2M7ZCo9dCxwKj10LG09ZCooZCthKnArMipyKStwKihhKmQrcCsyKnMpK2x9ZWxzZSBwPWksZD1NYXRoLm1heCgwLC0oYSpwK3IpKSxtPS1kKmQrcCoocCsyKnMpK2w7ZWxzZSBwPS1pLGQ9TWF0aC5tYXgoMCwtKGEqcCtyKSksbT0tZCpkK3AqKHArMipzKStsO2Vsc2UgcDw9LXU/KGQ9TWF0aC5tYXgoMCwtKC1hKmkrcikpLHA9ZD4wPy1pOk1hdGgubWluKE1hdGgubWF4KC1pLC1zKSxpKSxtPS1kKmQrcCoocCsyKnMpK2wpOnA8PXU/KGQ9MCxwPU1hdGgubWluKE1hdGgubWF4KC1pLC1zKSxpKSxtPXAqKHArMipzKStsKTooZD1NYXRoLm1heCgwLC0oYSppK3IpKSxwPWQ+MD9pOk1hdGgubWluKE1hdGgubWF4KC1pLC1zKSxpKSxtPS1kKmQrcCoocCsyKnMpK2wpO2Vsc2UgcD1hPjA/LWk6aSxkPU1hdGgubWF4KDAsLShhKnArcikpLG09LWQqZCtwKihwKzIqcykrbDtyZXR1cm4gbiYmbi5jb3B5KHRoaXMuZGlyZWN0aW9uKS5tdWx0aXBseVNjYWxhcihkKS5hZGQodGhpcy5vcmlnaW4pLG8mJm8uY29weShNYXQpLm11bHRpcGx5U2NhbGFyKHApLmFkZChDYXQpLG19aW50ZXJzZWN0U3BoZXJlKHQsZSl7X2F0LnN1YlZlY3RvcnModC5jZW50ZXIsdGhpcy5vcmlnaW4pO2NvbnN0IG49X2F0LmRvdCh0aGlzLmRpcmVjdGlvbiksbz1fYXQuZG90KF9hdCktbipuLGk9dC5yYWRpdXMqdC5yYWRpdXM7aWYobz5pKXJldHVybiBudWxsO2NvbnN0IGE9TWF0aC5zcXJ0KGktbykscj1uLWEscz1uK2E7cmV0dXJuIHI8MCYmczwwP251bGw6dGhpcy5hdChyPDA/czpyLGUpfWludGVyc2VjdHNTcGhlcmUodCl7cmV0dXJuIHRoaXMuZGlzdGFuY2VTcVRvUG9pbnQodC5jZW50ZXIpPD10LnJhZGl1cyp0LnJhZGl1c31kaXN0YW5jZVRvUGxhbmUodCl7Y29uc3QgZT10Lm5vcm1hbC5kb3QodGhpcy5kaXJlY3Rpb24pO2lmKDA9PT1lKXJldHVybiAwPT09dC5kaXN0YW5jZVRvUG9pbnQodGhpcy5vcmlnaW4pPzA6bnVsbDtjb25zdCBuPS0odGhpcy5vcmlnaW4uZG90KHQubm9ybWFsKSt0LmNvbnN0YW50KS9lO3JldHVybiBuPj0wP246bnVsbH1pbnRlcnNlY3RQbGFuZSh0LGUpe2NvbnN0IG49dGhpcy5kaXN0YW5jZVRvUGxhbmUodCk7cmV0dXJuIG51bGw9PT1uP251bGw6dGhpcy5hdChuLGUpfWludGVyc2VjdHNQbGFuZSh0KXtjb25zdCBlPXQuZGlzdGFuY2VUb1BvaW50KHRoaXMub3JpZ2luKTtyZXR1cm4gMD09PWV8fHQubm9ybWFsLmRvdCh0aGlzLmRpcmVjdGlvbikqZTwwfWludGVyc2VjdEJveCh0LGUpe2xldCBuLG8saSxhLHIscztjb25zdCBsPTEvdGhpcy5kaXJlY3Rpb24ueCxjPTEvdGhpcy5kaXJlY3Rpb24ueSxkPTEvdGhpcy5kaXJlY3Rpb24ueixwPXRoaXMub3JpZ2luO3JldHVybiBsPj0wPyhuPSh0Lm1pbi54LXAueCkqbCxvPSh0Lm1heC54LXAueCkqbCk6KG49KHQubWF4LngtcC54KSpsLG89KHQubWluLngtcC54KSpsKSxjPj0wPyhpPSh0Lm1pbi55LXAueSkqYyxhPSh0Lm1heC55LXAueSkqYyk6KGk9KHQubWF4LnktcC55KSpjLGE9KHQubWluLnktcC55KSpjKSxuPmF8fGk+bz9udWxsOigoaT5ufHxuIT1uKSYmKG49aSksKGE8b3x8byE9bykmJihvPWEpLGQ+PTA/KHI9KHQubWluLnotcC56KSpkLHM9KHQubWF4LnotcC56KSpkKToocj0odC5tYXguei1wLnopKmQscz0odC5taW4uei1wLnopKmQpLG4+c3x8cj5vP251bGw6KChyPm58fG4hPW4pJiYobj1yKSwoczxvfHxvIT1vKSYmKG89cyksbzwwP251bGw6dGhpcy5hdChuPj0wP246byxlKSkpfWludGVyc2VjdHNCb3godCl7cmV0dXJuIG51bGwhPT10aGlzLmludGVyc2VjdEJveCh0LF9hdCl9aW50ZXJzZWN0VHJpYW5nbGUodCxlLG4sbyxpKXt4YXQuc3ViVmVjdG9ycyhlLHQpLE9hdC5zdWJWZWN0b3JzKG4sdCksUGF0LmNyb3NzVmVjdG9ycyh4YXQsT2F0KTtsZXQgYSxyPXRoaXMuZGlyZWN0aW9uLmRvdChQYXQpO2lmKHI+MCl7aWYobylyZXR1cm4gbnVsbDthPTF9ZWxzZXtpZighKHI8MCkpcmV0dXJuIG51bGw7YT0tMSxyPS1yfXZhdC5zdWJWZWN0b3JzKHRoaXMub3JpZ2luLHQpO2NvbnN0IHM9YSp0aGlzLmRpcmVjdGlvbi5kb3QoT2F0LmNyb3NzVmVjdG9ycyh2YXQsT2F0KSk7aWYoczwwKXJldHVybiBudWxsO2NvbnN0IGw9YSp0aGlzLmRpcmVjdGlvbi5kb3QoeGF0LmNyb3NzKHZhdCkpO2lmKGw8MClyZXR1cm4gbnVsbDtpZihzK2w+cilyZXR1cm4gbnVsbDtjb25zdCBjPS1hKnZhdC5kb3QoUGF0KTtyZXR1cm4gYzwwP251bGw6dGhpcy5hdChjL3IsaSl9YXBwbHlNYXRyaXg0KHQpe3JldHVybiB0aGlzLm9yaWdpbi5hcHBseU1hdHJpeDQodCksdGhpcy5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKHQpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lm9yaWdpbi5lcXVhbHModGhpcy5vcmlnaW4pJiZ0LmRpcmVjdGlvbi5lcXVhbHModGhpcy5kaXJlY3Rpb24pfX1jbGFzcyBrYXR7Y29uc3RydWN0b3IoKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaXNNYXRyaXg0Iix7dmFsdWU6ITB9KSx0aGlzLmVsZW1lbnRzPVsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXSxhcmd1bWVudHMubGVuZ3RoPjAmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IHRoZSBjb25zdHJ1Y3RvciBubyBsb25nZXIgcmVhZHMgYXJndW1lbnRzLiB1c2UgLnNldCgpIGluc3RlYWQuIil9c2V0KHQsZSxuLG8saSxhLHIscyxsLGMsZCxwLG0sdSxmLGcpe2NvbnN0IGg9dGhpcy5lbGVtZW50cztyZXR1cm4gaFswXT10LGhbNF09ZSxoWzhdPW4saFsxMl09byxoWzFdPWksaFs1XT1hLGhbOV09cixoWzEzXT1zLGhbMl09bCxoWzZdPWMsaFsxMF09ZCxoWzE0XT1wLGhbM109bSxoWzddPXUsaFsxMV09ZixoWzE1XT1nLHRoaXN9aWRlbnRpdHkoKXtyZXR1cm4gdGhpcy5zZXQoMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMSksdGhpc31jbG9uZSgpe3JldHVybihuZXcga2F0KS5mcm9tQXJyYXkodGhpcy5lbGVtZW50cyl9Y29weSh0KXtjb25zdCBlPXRoaXMuZWxlbWVudHMsbj10LmVsZW1lbnRzO3JldHVybiBlWzBdPW5bMF0sZVsxXT1uWzFdLGVbMl09blsyXSxlWzNdPW5bM10sZVs0XT1uWzRdLGVbNV09bls1XSxlWzZdPW5bNl0sZVs3XT1uWzddLGVbOF09bls4XSxlWzldPW5bOV0sZVsxMF09blsxMF0sZVsxMV09blsxMV0sZVsxMl09blsxMl0sZVsxM109blsxM10sZVsxNF09blsxNF0sZVsxNV09blsxNV0sdGhpc31jb3B5UG9zaXRpb24odCl7Y29uc3QgZT10aGlzLmVsZW1lbnRzLG49dC5lbGVtZW50cztyZXR1cm4gZVsxMl09blsxMl0sZVsxM109blsxM10sZVsxNF09blsxNF0sdGhpc31zZXRGcm9tTWF0cml4Myh0KXtjb25zdCBlPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMuc2V0KGVbMF0sZVszXSxlWzZdLDAsZVsxXSxlWzRdLGVbN10sMCxlWzJdLGVbNV0sZVs4XSwwLDAsMCwwLDEpLHRoaXN9ZXh0cmFjdEJhc2lzKHQsZSxuKXtyZXR1cm4gdC5zZXRGcm9tTWF0cml4Q29sdW1uKHRoaXMsMCksZS5zZXRGcm9tTWF0cml4Q29sdW1uKHRoaXMsMSksbi5zZXRGcm9tTWF0cml4Q29sdW1uKHRoaXMsMiksdGhpc31tYWtlQmFzaXModCxlLG4pe3JldHVybiB0aGlzLnNldCh0LngsZS54LG4ueCwwLHQueSxlLnksbi55LDAsdC56LGUueixuLnosMCwwLDAsMCwxKSx0aGlzfWV4dHJhY3RSb3RhdGlvbih0KXtjb25zdCBlPXRoaXMuZWxlbWVudHMsbj10LmVsZW1lbnRzLG89MS9TYXQuc2V0RnJvbU1hdHJpeENvbHVtbih0LDApLmxlbmd0aCgpLGk9MS9TYXQuc2V0RnJvbU1hdHJpeENvbHVtbih0LDEpLmxlbmd0aCgpLGE9MS9TYXQuc2V0RnJvbU1hdHJpeENvbHVtbih0LDIpLmxlbmd0aCgpO3JldHVybiBlWzBdPW5bMF0qbyxlWzFdPW5bMV0qbyxlWzJdPW5bMl0qbyxlWzNdPTAsZVs0XT1uWzRdKmksZVs1XT1uWzVdKmksZVs2XT1uWzZdKmksZVs3XT0wLGVbOF09bls4XSphLGVbOV09bls5XSphLGVbMTBdPW5bMTBdKmEsZVsxMV09MCxlWzEyXT0wLGVbMTNdPTAsZVsxNF09MCxlWzE1XT0xLHRoaXN9bWFrZVJvdGF0aW9uRnJvbUV1bGVyKHQpe3QmJnQuaXNFdWxlcnx8Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLm1ha2VSb3RhdGlvbkZyb21FdWxlcigpIG5vdyBleHBlY3RzIGEgRXVsZXIgcm90YXRpb24gcmF0aGVyIHRoYW4gYSBWZWN0b3IzIGFuZCBvcmRlci4iKTtjb25zdCBlPXRoaXMuZWxlbWVudHMsbj10Lngsbz10LnksaT10LnosYT1NYXRoLmNvcyhuKSxyPU1hdGguc2luKG4pLHM9TWF0aC5jb3MobyksbD1NYXRoLnNpbihvKSxjPU1hdGguY29zKGkpLGQ9TWF0aC5zaW4oaSk7aWYoIlhZWiI9PT10Lm9yZGVyKXtjb25zdCB0PWEqYyxuPWEqZCxvPXIqYyxpPXIqZDtlWzBdPXMqYyxlWzRdPS1zKmQsZVs4XT1sLGVbMV09bitvKmwsZVs1XT10LWkqbCxlWzldPS1yKnMsZVsyXT1pLXQqbCxlWzZdPW8rbipsLGVbMTBdPWEqc31lbHNlIGlmKCJZWFoiPT09dC5vcmRlcil7Y29uc3QgdD1zKmMsbj1zKmQsbz1sKmMsaT1sKmQ7ZVswXT10K2kqcixlWzRdPW8qci1uLGVbOF09YSpsLGVbMV09YSpkLGVbNV09YSpjLGVbOV09LXIsZVsyXT1uKnItbyxlWzZdPWkrdCpyLGVbMTBdPWEqc31lbHNlIGlmKCJaWFkiPT09dC5vcmRlcil7Y29uc3QgdD1zKmMsbj1zKmQsbz1sKmMsaT1sKmQ7ZVswXT10LWkqcixlWzRdPS1hKmQsZVs4XT1vK24qcixlWzFdPW4rbypyLGVbNV09YSpjLGVbOV09aS10KnIsZVsyXT0tYSpsLGVbNl09cixlWzEwXT1hKnN9ZWxzZSBpZigiWllYIj09PXQub3JkZXIpe2NvbnN0IHQ9YSpjLG49YSpkLG89cipjLGk9cipkO2VbMF09cypjLGVbNF09bypsLW4sZVs4XT10KmwraSxlWzFdPXMqZCxlWzVdPWkqbCt0LGVbOV09bipsLW8sZVsyXT0tbCxlWzZdPXIqcyxlWzEwXT1hKnN9ZWxzZSBpZigiWVpYIj09PXQub3JkZXIpe2NvbnN0IHQ9YSpzLG49YSpsLG89cipzLGk9cipsO2VbMF09cypjLGVbNF09aS10KmQsZVs4XT1vKmQrbixlWzFdPWQsZVs1XT1hKmMsZVs5XT0tcipjLGVbMl09LWwqYyxlWzZdPW4qZCtvLGVbMTBdPXQtaSpkfWVsc2UgaWYoIlhaWSI9PT10Lm9yZGVyKXtjb25zdCB0PWEqcyxuPWEqbCxvPXIqcyxpPXIqbDtlWzBdPXMqYyxlWzRdPS1kLGVbOF09bCpjLGVbMV09dCpkK2ksZVs1XT1hKmMsZVs5XT1uKmQtbyxlWzJdPW8qZC1uLGVbNl09cipjLGVbMTBdPWkqZCt0fXJldHVybiBlWzNdPTAsZVs3XT0wLGVbMTFdPTAsZVsxMl09MCxlWzEzXT0wLGVbMTRdPTAsZVsxNV09MSx0aGlzfW1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKHQpe3JldHVybiB0aGlzLmNvbXBvc2UoRWF0LHQsQWF0KX1sb29rQXQodCxlLG4pe2NvbnN0IG89dGhpcy5lbGVtZW50cztyZXR1cm4gTmF0LnN1YlZlY3RvcnModCxlKSwwPT09TmF0Lmxlbmd0aFNxKCkmJihOYXQuej0xKSxOYXQubm9ybWFsaXplKCksUmF0LmNyb3NzVmVjdG9ycyhuLE5hdCksMD09PVJhdC5sZW5ndGhTcSgpJiYoMT09PU1hdGguYWJzKG4ueik/TmF0LngrPTFlLTQ6TmF0LnorPTFlLTQsTmF0Lm5vcm1hbGl6ZSgpLFJhdC5jcm9zc1ZlY3RvcnMobixOYXQpKSxSYXQubm9ybWFsaXplKCksVGF0LmNyb3NzVmVjdG9ycyhOYXQsUmF0KSxvWzBdPVJhdC54LG9bNF09VGF0Lngsb1s4XT1OYXQueCxvWzFdPVJhdC55LG9bNV09VGF0Lnksb1s5XT1OYXQueSxvWzJdPVJhdC56LG9bNl09VGF0Lnosb1sxMF09TmF0LnosdGhpc31tdWx0aXBseSh0LGUpe3JldHVybiB2b2lkIDAhPT1lPyhjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5tdWx0aXBseSgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLm11bHRpcGx5TWF0cmljZXMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMubXVsdGlwbHlNYXRyaWNlcyh0LGUpKTp0aGlzLm11bHRpcGx5TWF0cmljZXModGhpcyx0KX1wcmVtdWx0aXBseSh0KXtyZXR1cm4gdGhpcy5tdWx0aXBseU1hdHJpY2VzKHQsdGhpcyl9bXVsdGlwbHlNYXRyaWNlcyh0LGUpe2NvbnN0IG49dC5lbGVtZW50cyxvPWUuZWxlbWVudHMsaT10aGlzLmVsZW1lbnRzLGE9blswXSxyPW5bNF0scz1uWzhdLGw9blsxMl0sYz1uWzFdLGQ9bls1XSxwPW5bOV0sbT1uWzEzXSx1PW5bMl0sZj1uWzZdLGc9blsxMF0saD1uWzE0XSxiPW5bM10seT1uWzddLF89blsxMV0sQz1uWzE1XSxNPW9bMF0sdj1vWzRdLHg9b1s4XSxPPW9bMTJdLFA9b1sxXSx3PW9bNV0saz1vWzldLFM9b1sxM10sRD1vWzJdLEU9b1s2XSxBPW9bMTBdLFI9b1sxNF0sVD1vWzNdLE49b1s3XSxJPW9bMTFdLHo9b1sxNV07cmV0dXJuIGlbMF09YSpNK3IqUCtzKkQrbCpULGlbNF09YSp2K3IqdytzKkUrbCpOLGlbOF09YSp4K3IqaytzKkErbCpJLGlbMTJdPWEqTytyKlMrcypSK2wqeixpWzFdPWMqTStkKlArcCpEK20qVCxpWzVdPWMqditkKncrcCpFK20qTixpWzldPWMqeCtkKmsrcCpBK20qSSxpWzEzXT1jKk8rZCpTK3AqUittKnosaVsyXT11Kk0rZipQK2cqRCtoKlQsaVs2XT11KnYrZip3K2cqRStoKk4saVsxMF09dSp4K2YqaytnKkEraCpJLGlbMTRdPXUqTytmKlMrZypSK2gqeixpWzNdPWIqTSt5KlArXypEK0MqVCxpWzddPWIqdit5KncrXypFK0MqTixpWzExXT1iKngreSprK18qQStDKkksaVsxNV09YipPK3kqUytfKlIrQyp6LHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7Y29uc3QgZT10aGlzLmVsZW1lbnRzO3JldHVybiBlWzBdKj10LGVbNF0qPXQsZVs4XSo9dCxlWzEyXSo9dCxlWzFdKj10LGVbNV0qPXQsZVs5XSo9dCxlWzEzXSo9dCxlWzJdKj10LGVbNl0qPXQsZVsxMF0qPXQsZVsxNF0qPXQsZVszXSo9dCxlWzddKj10LGVbMTFdKj10LGVbMTVdKj10LHRoaXN9ZGV0ZXJtaW5hbnQoKXtjb25zdCB0PXRoaXMuZWxlbWVudHMsZT10WzBdLG49dFs0XSxvPXRbOF0saT10WzEyXSxhPXRbMV0scj10WzVdLHM9dFs5XSxsPXRbMTNdLGM9dFsyXSxkPXRbNl0scD10WzEwXSxtPXRbMTRdO3JldHVybiB0WzNdKigraSpzKmQtbypsKmQtaSpyKnArbipsKnArbypyKm0tbipzKm0pK3RbN10qKCtlKnMqbS1lKmwqcCtpKmEqcC1vKmEqbStvKmwqYy1pKnMqYykrdFsxMV0qKCtlKmwqZC1lKnIqbS1pKmEqZCtuKmEqbStpKnIqYy1uKmwqYykrdFsxNV0qKC1vKnIqYy1lKnMqZCtlKnIqcCtvKmEqZC1uKmEqcCtuKnMqYyl9dHJhbnNwb3NlKCl7Y29uc3QgdD10aGlzLmVsZW1lbnRzO2xldCBlO3JldHVybiBlPXRbMV0sdFsxXT10WzRdLHRbNF09ZSxlPXRbMl0sdFsyXT10WzhdLHRbOF09ZSxlPXRbNl0sdFs2XT10WzldLHRbOV09ZSxlPXRbM10sdFszXT10WzEyXSx0WzEyXT1lLGU9dFs3XSx0WzddPXRbMTNdLHRbMTNdPWUsZT10WzExXSx0WzExXT10WzE0XSx0WzE0XT1lLHRoaXN9c2V0UG9zaXRpb24odCxlLG4pe2NvbnN0IG89dGhpcy5lbGVtZW50cztyZXR1cm4gdC5pc1ZlY3RvcjM/KG9bMTJdPXQueCxvWzEzXT10Lnksb1sxNF09dC56KToob1sxMl09dCxvWzEzXT1lLG9bMTRdPW4pLHRoaXN9aW52ZXJ0KCl7Y29uc3QgdD10aGlzLmVsZW1lbnRzLGU9dFswXSxuPXRbMV0sbz10WzJdLGk9dFszXSxhPXRbNF0scj10WzVdLHM9dFs2XSxsPXRbN10sYz10WzhdLGQ9dFs5XSxwPXRbMTBdLG09dFsxMV0sdT10WzEyXSxmPXRbMTNdLGc9dFsxNF0saD10WzE1XSxiPWQqZypsLWYqcCpsK2YqcyptLXIqZyptLWQqcypoK3IqcCpoLHk9dSpwKmwtYypnKmwtdSpzKm0rYSpnKm0rYypzKmgtYSpwKmgsXz1jKmYqbC11KmQqbCt1KnIqbS1hKmYqbS1jKnIqaCthKmQqaCxDPXUqZCpzLWMqZipzLXUqcipwK2EqZipwK2MqcipnLWEqZCpnLE09ZSpiK24qeStvKl8raSpDO2lmKDA9PT1NKXJldHVybiB0aGlzLnNldCgwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwKTtjb25zdCB2PTEvTTtyZXR1cm4gdFswXT1iKnYsdFsxXT0oZipwKmktZCpnKmktZipvKm0rbipnKm0rZCpvKmgtbipwKmgpKnYsdFsyXT0ocipnKmktZipzKmkrZipvKmwtbipnKmwtcipvKmgrbipzKmgpKnYsdFszXT0oZCpzKmktcipwKmktZCpvKmwrbipwKmwrcipvKm0tbipzKm0pKnYsdFs0XT15KnYsdFs1XT0oYypnKmktdSpwKmkrdSpvKm0tZSpnKm0tYypvKmgrZSpwKmgpKnYsdFs2XT0odSpzKmktYSpnKmktdSpvKmwrZSpnKmwrYSpvKmgtZSpzKmgpKnYsdFs3XT0oYSpwKmktYypzKmkrYypvKmwtZSpwKmwtYSpvKm0rZSpzKm0pKnYsdFs4XT1fKnYsdFs5XT0odSpkKmktYypmKmktdSpuKm0rZSpmKm0rYypuKmgtZSpkKmgpKnYsdFsxMF09KGEqZippLXUqcippK3UqbipsLWUqZipsLWEqbipoK2UqcipoKSp2LHRbMTFdPShjKnIqaS1hKmQqaS1jKm4qbCtlKmQqbCthKm4qbS1lKnIqbSkqdix0WzEyXT1DKnYsdFsxM109KGMqZipvLXUqZCpvK3UqbipwLWUqZipwLWMqbipnK2UqZCpnKSp2LHRbMTRdPSh1KnIqby1hKmYqby11Km4qcytlKmYqcythKm4qZy1lKnIqZykqdix0WzE1XT0oYSpkKm8tYypyKm8rYypuKnMtZSpkKnMtYSpuKnArZSpyKnApKnYsdGhpc31zY2FsZSh0KXtjb25zdCBlPXRoaXMuZWxlbWVudHMsbj10Lngsbz10LnksaT10Lno7cmV0dXJuIGVbMF0qPW4sZVs0XSo9byxlWzhdKj1pLGVbMV0qPW4sZVs1XSo9byxlWzldKj1pLGVbMl0qPW4sZVs2XSo9byxlWzEwXSo9aSxlWzNdKj1uLGVbN10qPW8sZVsxMV0qPWksdGhpc31nZXRNYXhTY2FsZU9uQXhpcygpe2NvbnN0IHQ9dGhpcy5lbGVtZW50cztyZXR1cm4gTWF0aC5zcXJ0KE1hdGgubWF4KHRbMF0qdFswXSt0WzFdKnRbMV0rdFsyXSp0WzJdLHRbNF0qdFs0XSt0WzVdKnRbNV0rdFs2XSp0WzZdLHRbOF0qdFs4XSt0WzldKnRbOV0rdFsxMF0qdFsxMF0pKX1tYWtlVHJhbnNsYXRpb24odCxlLG4pe3JldHVybiB0aGlzLnNldCgxLDAsMCx0LDAsMSwwLGUsMCwwLDEsbiwwLDAsMCwxKSx0aGlzfW1ha2VSb3RhdGlvblgodCl7Y29uc3QgZT1NYXRoLmNvcyh0KSxuPU1hdGguc2luKHQpO3JldHVybiB0aGlzLnNldCgxLDAsMCwwLDAsZSwtbiwwLDAsbixlLDAsMCwwLDAsMSksdGhpc31tYWtlUm90YXRpb25ZKHQpe2NvbnN0IGU9TWF0aC5jb3ModCksbj1NYXRoLnNpbih0KTtyZXR1cm4gdGhpcy5zZXQoZSwwLG4sMCwwLDEsMCwwLC1uLDAsZSwwLDAsMCwwLDEpLHRoaXN9bWFrZVJvdGF0aW9uWih0KXtjb25zdCBlPU1hdGguY29zKHQpLG49TWF0aC5zaW4odCk7cmV0dXJuIHRoaXMuc2V0KGUsLW4sMCwwLG4sZSwwLDAsMCwwLDEsMCwwLDAsMCwxKSx0aGlzfW1ha2VSb3RhdGlvbkF4aXModCxlKXtjb25zdCBuPU1hdGguY29zKGUpLG89TWF0aC5zaW4oZSksaT0xLW4sYT10Lngscj10Lnkscz10LnosbD1pKmEsYz1pKnI7cmV0dXJuIHRoaXMuc2V0KGwqYStuLGwqci1vKnMsbCpzK28qciwwLGwqcitvKnMsYypyK24sYypzLW8qYSwwLGwqcy1vKnIsYypzK28qYSxpKnMqcytuLDAsMCwwLDAsMSksdGhpc31tYWtlU2NhbGUodCxlLG4pe3JldHVybiB0aGlzLnNldCh0LDAsMCwwLDAsZSwwLDAsMCwwLG4sMCwwLDAsMCwxKSx0aGlzfW1ha2VTaGVhcih0LGUsbil7cmV0dXJuIHRoaXMuc2V0KDEsZSxuLDAsdCwxLG4sMCx0LGUsMSwwLDAsMCwwLDEpLHRoaXN9Y29tcG9zZSh0LGUsbil7Y29uc3Qgbz10aGlzLmVsZW1lbnRzLGk9ZS5feCxhPWUuX3kscj1lLl96LHM9ZS5fdyxsPWkraSxjPWErYSxkPXIrcixwPWkqbCxtPWkqYyx1PWkqZCxmPWEqYyxnPWEqZCxoPXIqZCxiPXMqbCx5PXMqYyxfPXMqZCxDPW4ueCxNPW4ueSx2PW4uejtyZXR1cm4gb1swXT0oMS0oZitoKSkqQyxvWzFdPShtK18pKkMsb1syXT0odS15KSpDLG9bM109MCxvWzRdPShtLV8pKk0sb1s1XT0oMS0ocCtoKSkqTSxvWzZdPShnK2IpKk0sb1s3XT0wLG9bOF09KHUreSkqdixvWzldPShnLWIpKnYsb1sxMF09KDEtKHArZikpKnYsb1sxMV09MCxvWzEyXT10Lngsb1sxM109dC55LG9bMTRdPXQueixvWzE1XT0xLHRoaXN9ZGVjb21wb3NlKHQsZSxuKXtjb25zdCBvPXRoaXMuZWxlbWVudHM7bGV0IGk9U2F0LnNldChvWzBdLG9bMV0sb1syXSkubGVuZ3RoKCk7Y29uc3QgYT1TYXQuc2V0KG9bNF0sb1s1XSxvWzZdKS5sZW5ndGgoKSxyPVNhdC5zZXQob1s4XSxvWzldLG9bMTBdKS5sZW5ndGgoKTt0aGlzLmRldGVybWluYW50KCk8MCYmKGk9LWkpLHQueD1vWzEyXSx0Lnk9b1sxM10sdC56PW9bMTRdLERhdC5jb3B5KHRoaXMpO2NvbnN0IHM9MS9pLGw9MS9hLGM9MS9yO3JldHVybiBEYXQuZWxlbWVudHNbMF0qPXMsRGF0LmVsZW1lbnRzWzFdKj1zLERhdC5lbGVtZW50c1syXSo9cyxEYXQuZWxlbWVudHNbNF0qPWwsRGF0LmVsZW1lbnRzWzVdKj1sLERhdC5lbGVtZW50c1s2XSo9bCxEYXQuZWxlbWVudHNbOF0qPWMsRGF0LmVsZW1lbnRzWzldKj1jLERhdC5lbGVtZW50c1sxMF0qPWMsZS5zZXRGcm9tUm90YXRpb25NYXRyaXgoRGF0KSxuLng9aSxuLnk9YSxuLno9cix0aGlzfW1ha2VQZXJzcGVjdGl2ZSh0LGUsbixvLGksYSl7dm9pZCAwPT09YSYmY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubWFrZVBlcnNwZWN0aXZlKCkgaGFzIGJlZW4gcmVkZWZpbmVkIGFuZCBoYXMgYSBuZXcgc2lnbmF0dXJlLiBQbGVhc2UgY2hlY2sgdGhlIGRvY3MuIik7Y29uc3Qgcj10aGlzLmVsZW1lbnRzLHM9MippLyhuLW8pLGw9KGUrdCkvKGUtdCksYz0obitvKS8obi1vKSxkPS0oYStpKS8oYS1pKSxwPS0yKmEqaS8oYS1pKTtyZXR1cm4gclswXT0yKmkvKGUtdCkscls0XT0wLHJbOF09bCxyWzEyXT0wLHJbMV09MCxyWzVdPXMscls5XT1jLHJbMTNdPTAsclsyXT0wLHJbNl09MCxyWzEwXT1kLHJbMTRdPXAsclszXT0wLHJbN109MCxyWzExXT0tMSxyWzE1XT0wLHRoaXN9bWFrZU9ydGhvZ3JhcGhpYyh0LGUsbixvLGksYSl7Y29uc3Qgcj10aGlzLmVsZW1lbnRzLHM9MS8oZS10KSxsPTEvKG4tbyksYz0xLyhhLWkpLGQ9KGUrdCkqcyxwPShuK28pKmwsbT0oYStpKSpjO3JldHVybiByWzBdPTIqcyxyWzRdPTAscls4XT0wLHJbMTJdPS1kLHJbMV09MCxyWzVdPTIqbCxyWzldPTAsclsxM109LXAsclsyXT0wLHJbNl09MCxyWzEwXT0tMipjLHJbMTRdPS1tLHJbM109MCxyWzddPTAsclsxMV09MCxyWzE1XT0xLHRoaXN9ZXF1YWxzKHQpe2NvbnN0IGU9dGhpcy5lbGVtZW50cyxuPXQuZWxlbWVudHM7Zm9yKGxldCB0PTA7dDwxNjt0KyspaWYoZVt0XSE9PW5bdF0pcmV0dXJuITE7cmV0dXJuITB9ZnJvbUFycmF5KHQsZT0wKXtmb3IobGV0IG49MDtuPDE2O24rKyl0aGlzLmVsZW1lbnRzW25dPXRbbitlXTtyZXR1cm4gdGhpc310b0FycmF5KHQ9W10sZT0wKXtjb25zdCBuPXRoaXMuZWxlbWVudHM7cmV0dXJuIHRbZV09blswXSx0W2UrMV09blsxXSx0W2UrMl09blsyXSx0W2UrM109blszXSx0W2UrNF09bls0XSx0W2UrNV09bls1XSx0W2UrNl09bls2XSx0W2UrN109bls3XSx0W2UrOF09bls4XSx0W2UrOV09bls5XSx0W2UrMTBdPW5bMTBdLHRbZSsxMV09blsxMV0sdFtlKzEyXT1uWzEyXSx0W2UrMTNdPW5bMTNdLHRbZSsxNF09blsxNF0sdFtlKzE1XT1uWzE1XSx0fX1jb25zdCBTYXQ9bmV3ICRpdCxEYXQ9bmV3IGthdCxFYXQ9bmV3ICRpdCgwLDAsMCksQWF0PW5ldyAkaXQoMSwxLDEpLFJhdD1uZXcgJGl0LFRhdD1uZXcgJGl0LE5hdD1uZXcgJGl0O2NsYXNzIElhdHtjb25zdHJ1Y3Rvcih0PTAsZT0wLG49MCxvPUlhdC5EZWZhdWx0T3JkZXIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpc0V1bGVyIix7dmFsdWU6ITB9KSx0aGlzLl94PXQsdGhpcy5feT1lLHRoaXMuX3o9bix0aGlzLl9vcmRlcj1vfWdldCB4KCl7cmV0dXJuIHRoaXMuX3h9c2V0IHgodCl7dGhpcy5feD10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgeSgpe3JldHVybiB0aGlzLl95fXNldCB5KHQpe3RoaXMuX3k9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IHooKXtyZXR1cm4gdGhpcy5fen1zZXQgeih0KXt0aGlzLl96PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCBvcmRlcigpe3JldHVybiB0aGlzLl9vcmRlcn1zZXQgb3JkZXIodCl7dGhpcy5fb3JkZXI9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9c2V0KHQsZSxuLG8pe3JldHVybiB0aGlzLl94PXQsdGhpcy5feT1lLHRoaXMuX3o9bix0aGlzLl9vcmRlcj1vfHx0aGlzLl9vcmRlcix0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLl94LHRoaXMuX3ksdGhpcy5feix0aGlzLl9vcmRlcil9Y29weSh0KXtyZXR1cm4gdGhpcy5feD10Ll94LHRoaXMuX3k9dC5feSx0aGlzLl96PXQuX3osdGhpcy5fb3JkZXI9dC5fb3JkZXIsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbVJvdGF0aW9uTWF0cml4KHQsZSxuKXtjb25zdCBvPWppdC5jbGFtcCxpPXQuZWxlbWVudHMsYT1pWzBdLHI9aVs0XSxzPWlbOF0sbD1pWzFdLGM9aVs1XSxkPWlbOV0scD1pWzJdLG09aVs2XSx1PWlbMTBdO3N3aXRjaChlPWV8fHRoaXMuX29yZGVyKXtjYXNlIlhZWiI6dGhpcy5feT1NYXRoLmFzaW4obyhzLC0xLDEpKSxNYXRoLmFicyhzKTwuOTk5OTk5OT8odGhpcy5feD1NYXRoLmF0YW4yKC1kLHUpLHRoaXMuX3o9TWF0aC5hdGFuMigtcixhKSk6KHRoaXMuX3g9TWF0aC5hdGFuMihtLGMpLHRoaXMuX3o9MCk7YnJlYWs7Y2FzZSJZWFoiOnRoaXMuX3g9TWF0aC5hc2luKC1vKGQsLTEsMSkpLE1hdGguYWJzKGQpPC45OTk5OTk5Pyh0aGlzLl95PU1hdGguYXRhbjIocyx1KSx0aGlzLl96PU1hdGguYXRhbjIobCxjKSk6KHRoaXMuX3k9TWF0aC5hdGFuMigtcCxhKSx0aGlzLl96PTApO2JyZWFrO2Nhc2UiWlhZIjp0aGlzLl94PU1hdGguYXNpbihvKG0sLTEsMSkpLE1hdGguYWJzKG0pPC45OTk5OTk5Pyh0aGlzLl95PU1hdGguYXRhbjIoLXAsdSksdGhpcy5fej1NYXRoLmF0YW4yKC1yLGMpKToodGhpcy5feT0wLHRoaXMuX3o9TWF0aC5hdGFuMihsLGEpKTticmVhaztjYXNlIlpZWCI6dGhpcy5feT1NYXRoLmFzaW4oLW8ocCwtMSwxKSksTWF0aC5hYnMocCk8Ljk5OTk5OTk/KHRoaXMuX3g9TWF0aC5hdGFuMihtLHUpLHRoaXMuX3o9TWF0aC5hdGFuMihsLGEpKToodGhpcy5feD0wLHRoaXMuX3o9TWF0aC5hdGFuMigtcixjKSk7YnJlYWs7Y2FzZSJZWlgiOnRoaXMuX3o9TWF0aC5hc2luKG8obCwtMSwxKSksTWF0aC5hYnMobCk8Ljk5OTk5OTk/KHRoaXMuX3g9TWF0aC5hdGFuMigtZCxjKSx0aGlzLl95PU1hdGguYXRhbjIoLXAsYSkpOih0aGlzLl94PTAsdGhpcy5feT1NYXRoLmF0YW4yKHMsdSkpO2JyZWFrO2Nhc2UiWFpZIjp0aGlzLl96PU1hdGguYXNpbigtbyhyLC0xLDEpKSxNYXRoLmFicyhyKTwuOTk5OTk5OT8odGhpcy5feD1NYXRoLmF0YW4yKG0sYyksdGhpcy5feT1NYXRoLmF0YW4yKHMsYSkpOih0aGlzLl94PU1hdGguYXRhbjIoLWQsdSksdGhpcy5feT0wKTticmVhaztkZWZhdWx0OmNvbnNvbGUud2FybigiVEhSRUUuRXVsZXI6IC5zZXRGcm9tUm90YXRpb25NYXRyaXgoKSBlbmNvdW50ZXJlZCBhbiB1bmtub3duIG9yZGVyOiAiK2UpfXJldHVybiB0aGlzLl9vcmRlcj1lLCExIT09biYmdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbVF1YXRlcm5pb24odCxlLG4pe3JldHVybiB6YXQubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24odCksdGhpcy5zZXRGcm9tUm90YXRpb25NYXRyaXgoemF0LGUsbil9c2V0RnJvbVZlY3RvcjModCxlKXtyZXR1cm4gdGhpcy5zZXQodC54LHQueSx0LnosZXx8dGhpcy5fb3JkZXIpfXJlb3JkZXIodCl7cmV0dXJuIEhhdC5zZXRGcm9tRXVsZXIodGhpcyksdGhpcy5zZXRGcm9tUXVhdGVybmlvbihIYXQsdCl9ZXF1YWxzKHQpe3JldHVybiB0Ll94PT09dGhpcy5feCYmdC5feT09PXRoaXMuX3kmJnQuX3o9PT10aGlzLl96JiZ0Ll9vcmRlcj09PXRoaXMuX29yZGVyfWZyb21BcnJheSh0KXtyZXR1cm4gdGhpcy5feD10WzBdLHRoaXMuX3k9dFsxXSx0aGlzLl96PXRbMl0sdm9pZCAwIT09dFszXSYmKHRoaXMuX29yZGVyPXRbM10pLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXRvQXJyYXkodD1bXSxlPTApe3JldHVybiB0W2VdPXRoaXMuX3gsdFtlKzFdPXRoaXMuX3ksdFtlKzJdPXRoaXMuX3osdFtlKzNdPXRoaXMuX29yZGVyLHR9dG9WZWN0b3IzKHQpe3JldHVybiB0P3Quc2V0KHRoaXMuX3gsdGhpcy5feSx0aGlzLl96KTpuZXcgJGl0KHRoaXMuX3gsdGhpcy5feSx0aGlzLl96KX1fb25DaGFuZ2UodCl7cmV0dXJuIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2s9dCx0aGlzfV9vbkNoYW5nZUNhbGxiYWNrKCl7fX1JYXQuRGVmYXVsdE9yZGVyPSJYWVoiLElhdC5Sb3RhdGlvbk9yZGVycz1bIlhZWiIsIllaWCIsIlpYWSIsIlhaWSIsIllYWiIsIlpZWCJdO2NvbnN0IHphdD1uZXcga2F0LEhhdD1uZXcgUWl0O2NsYXNzIEZhdHtjb25zdHJ1Y3Rvcigpe3RoaXMubWFzaz0xfXNldCh0KXt0aGlzLm1hc2s9MTw8dHwwfWVuYWJsZSh0KXt0aGlzLm1hc2t8PTE8PHR8MH1lbmFibGVBbGwoKXt0aGlzLm1hc2s9LTF9dG9nZ2xlKHQpe3RoaXMubWFza149MTw8dHwwfWRpc2FibGUodCl7dGhpcy5tYXNrJj1+KDE8PHR8MCl9ZGlzYWJsZUFsbCgpe3RoaXMubWFzaz0wfXRlc3QodCl7cmV0dXJuIDAhPSh0aGlzLm1hc2smdC5tYXNrKX19bGV0IExhdD0wO2NvbnN0IEJhdD1uZXcgJGl0LFZhdD1uZXcgUWl0LGphdD1uZXcga2F0LFVhdD1uZXcgJGl0LFdhdD1uZXcgJGl0LEdhdD1uZXcgJGl0LFlhdD1uZXcgUWl0LHFhdD1uZXcgJGl0KDEsMCwwKSxaYXQ9bmV3ICRpdCgwLDEsMCksWGF0PW5ldyAkaXQoMCwwLDEpLEthdD17dHlwZToiYWRkZWQifSxKYXQ9e3R5cGU6InJlbW92ZWQifTtmdW5jdGlvbiBRYXQoKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTpMYXQrK30pLHRoaXMudXVpZD1qaXQuZ2VuZXJhdGVVVUlEKCksdGhpcy5uYW1lPSIiLHRoaXMudHlwZT0iT2JqZWN0M0QiLHRoaXMucGFyZW50PW51bGwsdGhpcy5jaGlsZHJlbj1bXSx0aGlzLnVwPVFhdC5EZWZhdWx0VXAuY2xvbmUoKTtjb25zdCB0PW5ldyAkaXQsZT1uZXcgSWF0LG49bmV3IFFpdCxvPW5ldyAkaXQoMSwxLDEpO2UuX29uQ2hhbmdlKChmdW5jdGlvbiBpKCl7bi5zZXRGcm9tRXVsZXIoZSwhMSl9KSksbi5fb25DaGFuZ2UoKGZ1bmN0aW9uIGEoKXtlLnNldEZyb21RdWF0ZXJuaW9uKG4sdm9pZCAwLCExKX0pKSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLHtwb3NpdGlvbjp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6dH0scm90YXRpb246e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOmV9LHF1YXRlcm5pb246e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOm59LHNjYWxlOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpvfSxtb2RlbFZpZXdNYXRyaXg6e3ZhbHVlOm5ldyBrYXR9LG5vcm1hbE1hdHJpeDp7dmFsdWU6bmV3IFdpdH19KSx0aGlzLm1hdHJpeD1uZXcga2F0LHRoaXMubWF0cml4V29ybGQ9bmV3IGthdCx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9UWF0LkRlZmF1bHRNYXRyaXhBdXRvVXBkYXRlLHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMSx0aGlzLmxheWVycz1uZXcgRmF0LHRoaXMudmlzaWJsZT0hMCx0aGlzLmNhc3RTaGFkb3c9ITEsdGhpcy5yZWNlaXZlU2hhZG93PSExLHRoaXMuZnJ1c3R1bUN1bGxlZD0hMCx0aGlzLnJlbmRlck9yZGVyPTAsdGhpcy5hbmltYXRpb25zPVtdLHRoaXMudXNlckRhdGE9e319UWF0LkRlZmF1bHRVcD1uZXcgJGl0KDAsMSwwKSxRYXQuRGVmYXVsdE1hdHJpeEF1dG9VcGRhdGU9ITAsUWF0LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoTGl0LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOlFhdCxpc09iamVjdDNEOiEwLG9uQmVmb3JlUmVuZGVyOmZ1bmN0aW9uKCl7fSxvbkFmdGVyUmVuZGVyOmZ1bmN0aW9uKCl7fSxhcHBseU1hdHJpeDQ6ZnVuY3Rpb24odCl7dGhpcy5tYXRyaXhBdXRvVXBkYXRlJiZ0aGlzLnVwZGF0ZU1hdHJpeCgpLHRoaXMubWF0cml4LnByZW11bHRpcGx5KHQpLHRoaXMubWF0cml4LmRlY29tcG9zZSh0aGlzLnBvc2l0aW9uLHRoaXMucXVhdGVybmlvbix0aGlzLnNjYWxlKX0sYXBwbHlRdWF0ZXJuaW9uOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnF1YXRlcm5pb24ucHJlbXVsdGlwbHkodCksdGhpc30sc2V0Um90YXRpb25Gcm9tQXhpc0FuZ2xlOmZ1bmN0aW9uKHQsZSl7dGhpcy5xdWF0ZXJuaW9uLnNldEZyb21BeGlzQW5nbGUodCxlKX0sc2V0Um90YXRpb25Gcm9tRXVsZXI6ZnVuY3Rpb24odCl7dGhpcy5xdWF0ZXJuaW9uLnNldEZyb21FdWxlcih0LCEwKX0sc2V0Um90YXRpb25Gcm9tTWF0cml4OmZ1bmN0aW9uKHQpe3RoaXMucXVhdGVybmlvbi5zZXRGcm9tUm90YXRpb25NYXRyaXgodCl9LHNldFJvdGF0aW9uRnJvbVF1YXRlcm5pb246ZnVuY3Rpb24odCl7dGhpcy5xdWF0ZXJuaW9uLmNvcHkodCl9LHJvdGF0ZU9uQXhpczpmdW5jdGlvbih0LGUpe3JldHVybiBWYXQuc2V0RnJvbUF4aXNBbmdsZSh0LGUpLHRoaXMucXVhdGVybmlvbi5tdWx0aXBseShWYXQpLHRoaXN9LHJvdGF0ZU9uV29ybGRBeGlzOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIFZhdC5zZXRGcm9tQXhpc0FuZ2xlKHQsZSksdGhpcy5xdWF0ZXJuaW9uLnByZW11bHRpcGx5KFZhdCksdGhpc30scm90YXRlWDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5yb3RhdGVPbkF4aXMocWF0LHQpfSxyb3RhdGVZOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnJvdGF0ZU9uQXhpcyhaYXQsdCl9LHJvdGF0ZVo6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucm90YXRlT25BeGlzKFhhdCx0KX0sdHJhbnNsYXRlT25BeGlzOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIEJhdC5jb3B5KHQpLmFwcGx5UXVhdGVybmlvbih0aGlzLnF1YXRlcm5pb24pLHRoaXMucG9zaXRpb24uYWRkKEJhdC5tdWx0aXBseVNjYWxhcihlKSksdGhpc30sdHJhbnNsYXRlWDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50cmFuc2xhdGVPbkF4aXMocWF0LHQpfSx0cmFuc2xhdGVZOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRyYW5zbGF0ZU9uQXhpcyhaYXQsdCl9LHRyYW5zbGF0ZVo6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudHJhbnNsYXRlT25BeGlzKFhhdCx0KX0sbG9jYWxUb1dvcmxkOmZ1bmN0aW9uKHQpe3JldHVybiB0LmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKX0sd29ybGRUb0xvY2FsOmZ1bmN0aW9uKHQpe3JldHVybiB0LmFwcGx5TWF0cml4NChqYXQuY29weSh0aGlzLm1hdHJpeFdvcmxkKS5pbnZlcnQoKSl9LGxvb2tBdDpmdW5jdGlvbih0LGUsbil7dC5pc1ZlY3RvcjM/VWF0LmNvcHkodCk6VWF0LnNldCh0LGUsbik7Y29uc3Qgbz10aGlzLnBhcmVudDt0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSxXYXQuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubWF0cml4V29ybGQpLHRoaXMuaXNDYW1lcmF8fHRoaXMuaXNMaWdodD9qYXQubG9va0F0KFdhdCxVYXQsdGhpcy51cCk6amF0Lmxvb2tBdChVYXQsV2F0LHRoaXMudXApLHRoaXMucXVhdGVybmlvbi5zZXRGcm9tUm90YXRpb25NYXRyaXgoamF0KSxvJiYoamF0LmV4dHJhY3RSb3RhdGlvbihvLm1hdHJpeFdvcmxkKSxWYXQuc2V0RnJvbVJvdGF0aW9uTWF0cml4KGphdCksdGhpcy5xdWF0ZXJuaW9uLnByZW11bHRpcGx5KFZhdC5pbnZlcnQoKSkpfSxhZGQ6ZnVuY3Rpb24odCl7aWYoYXJndW1lbnRzLmxlbmd0aD4xKXtmb3IobGV0IHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXRoaXMuYWRkKGFyZ3VtZW50c1t0XSk7cmV0dXJuIHRoaXN9cmV0dXJuIHQ9PT10aGlzPyhjb25zb2xlLmVycm9yKCJUSFJFRS5PYmplY3QzRC5hZGQ6IG9iamVjdCBjYW4ndCBiZSBhZGRlZCBhcyBhIGNoaWxkIG9mIGl0c2VsZi4iLHQpLHRoaXMpOih0JiZ0LmlzT2JqZWN0M0Q/KG51bGwhPT10LnBhcmVudCYmdC5wYXJlbnQucmVtb3ZlKHQpLHQucGFyZW50PXRoaXMsdGhpcy5jaGlsZHJlbi5wdXNoKHQpLHQuZGlzcGF0Y2hFdmVudChLYXQpKTpjb25zb2xlLmVycm9yKCJUSFJFRS5PYmplY3QzRC5hZGQ6IG9iamVjdCBub3QgYW4gaW5zdGFuY2Ugb2YgVEhSRUUuT2JqZWN0M0QuIix0KSx0aGlzKX0scmVtb3ZlOmZ1bmN0aW9uKHQpe2lmKGFyZ3VtZW50cy5sZW5ndGg+MSl7Zm9yKGxldCB0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl0aGlzLnJlbW92ZShhcmd1bWVudHNbdF0pO3JldHVybiB0aGlzfWNvbnN0IGU9dGhpcy5jaGlsZHJlbi5pbmRleE9mKHQpO3JldHVybi0xIT09ZSYmKHQucGFyZW50PW51bGwsdGhpcy5jaGlsZHJlbi5zcGxpY2UoZSwxKSx0LmRpc3BhdGNoRXZlbnQoSmF0KSksdGhpc30sY2xlYXI6ZnVuY3Rpb24oKXtmb3IobGV0IHQ9MDt0PHRoaXMuY2hpbGRyZW4ubGVuZ3RoO3QrKyl7Y29uc3QgZT10aGlzLmNoaWxkcmVuW3RdO2UucGFyZW50PW51bGwsZS5kaXNwYXRjaEV2ZW50KEphdCl9cmV0dXJuIHRoaXMuY2hpbGRyZW4ubGVuZ3RoPTAsdGhpc30sYXR0YWNoOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSxqYXQuY29weSh0aGlzLm1hdHJpeFdvcmxkKS5pbnZlcnQoKSxudWxsIT09dC5wYXJlbnQmJih0LnBhcmVudC51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksamF0Lm11bHRpcGx5KHQucGFyZW50Lm1hdHJpeFdvcmxkKSksdC5hcHBseU1hdHJpeDQoamF0KSx0LnVwZGF0ZVdvcmxkTWF0cml4KCExLCExKSx0aGlzLmFkZCh0KSx0aGlzfSxnZXRPYmplY3RCeUlkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmdldE9iamVjdEJ5UHJvcGVydHkoImlkIix0KX0sZ2V0T2JqZWN0QnlOYW1lOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmdldE9iamVjdEJ5UHJvcGVydHkoIm5hbWUiLHQpfSxnZXRPYmplY3RCeVByb3BlcnR5OmZ1bmN0aW9uKHQsZSl7aWYodGhpc1t0XT09PWUpcmV0dXJuIHRoaXM7Zm9yKGxldCBuPTAsbz10aGlzLmNoaWxkcmVuLmxlbmd0aDtuPG87bisrKXtjb25zdCBvPXRoaXMuY2hpbGRyZW5bbl0uZ2V0T2JqZWN0QnlQcm9wZXJ0eSh0LGUpO2lmKHZvaWQgMCE9PW8pcmV0dXJuIG99fSxnZXRXb3JsZFBvc2l0aW9uOmZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYoY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLmdldFdvcmxkUG9zaXRpb24oKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIiksdD1uZXcgJGl0KSx0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSx0LnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1hdHJpeFdvcmxkKX0sZ2V0V29ybGRRdWF0ZXJuaW9uOmZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYoY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLmdldFdvcmxkUXVhdGVybmlvbigpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSx0PW5ldyBRaXQpLHRoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLHRoaXMubWF0cml4V29ybGQuZGVjb21wb3NlKFdhdCx0LEdhdCksdH0sZ2V0V29ybGRTY2FsZTpmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKGNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5nZXRXb3JsZFNjYWxlKCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLHQ9bmV3ICRpdCksdGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksdGhpcy5tYXRyaXhXb3JsZC5kZWNvbXBvc2UoV2F0LFlhdCx0KSx0fSxnZXRXb3JsZERpcmVjdGlvbjpmdW5jdGlvbih0KXt2b2lkIDA9PT10JiYoY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLmdldFdvcmxkRGlyZWN0aW9uKCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLHQ9bmV3ICRpdCksdGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSk7Y29uc3QgZT10aGlzLm1hdHJpeFdvcmxkLmVsZW1lbnRzO3JldHVybiB0LnNldChlWzhdLGVbOV0sZVsxMF0pLm5vcm1hbGl6ZSgpfSxyYXljYXN0OmZ1bmN0aW9uKCl7fSx0cmF2ZXJzZTpmdW5jdGlvbih0KXt0KHRoaXMpO2NvbnN0IGU9dGhpcy5jaGlsZHJlbjtmb3IobGV0IG49MCxvPWUubGVuZ3RoO248bztuKyspZVtuXS50cmF2ZXJzZSh0KX0sdHJhdmVyc2VWaXNpYmxlOmZ1bmN0aW9uKHQpe2lmKCExPT09dGhpcy52aXNpYmxlKXJldHVybjt0KHRoaXMpO2NvbnN0IGU9dGhpcy5jaGlsZHJlbjtmb3IobGV0IG49MCxvPWUubGVuZ3RoO248bztuKyspZVtuXS50cmF2ZXJzZVZpc2libGUodCl9LHRyYXZlcnNlQW5jZXN0b3JzOmZ1bmN0aW9uKHQpe2NvbnN0IGU9dGhpcy5wYXJlbnQ7bnVsbCE9PWUmJih0KGUpLGUudHJhdmVyc2VBbmNlc3RvcnModCkpfSx1cGRhdGVNYXRyaXg6ZnVuY3Rpb24oKXt0aGlzLm1hdHJpeC5jb21wb3NlKHRoaXMucG9zaXRpb24sdGhpcy5xdWF0ZXJuaW9uLHRoaXMuc2NhbGUpLHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH0sdXBkYXRlTWF0cml4V29ybGQ6ZnVuY3Rpb24odCl7dGhpcy5tYXRyaXhBdXRvVXBkYXRlJiZ0aGlzLnVwZGF0ZU1hdHJpeCgpLCh0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGV8fHQpJiYobnVsbD09PXRoaXMucGFyZW50P3RoaXMubWF0cml4V29ybGQuY29weSh0aGlzLm1hdHJpeCk6dGhpcy5tYXRyaXhXb3JsZC5tdWx0aXBseU1hdHJpY2VzKHRoaXMucGFyZW50Lm1hdHJpeFdvcmxkLHRoaXMubWF0cml4KSx0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITEsdD0hMCk7Y29uc3QgZT10aGlzLmNoaWxkcmVuO2ZvcihsZXQgbj0wLG89ZS5sZW5ndGg7bjxvO24rKyllW25dLnVwZGF0ZU1hdHJpeFdvcmxkKHQpfSx1cGRhdGVXb3JsZE1hdHJpeDpmdW5jdGlvbih0LGUpe2NvbnN0IG49dGhpcy5wYXJlbnQ7aWYoITA9PT10JiZudWxsIT09biYmbi51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksdGhpcy5tYXRyaXhBdXRvVXBkYXRlJiZ0aGlzLnVwZGF0ZU1hdHJpeCgpLG51bGw9PT10aGlzLnBhcmVudD90aGlzLm1hdHJpeFdvcmxkLmNvcHkodGhpcy5tYXRyaXgpOnRoaXMubWF0cml4V29ybGQubXVsdGlwbHlNYXRyaWNlcyh0aGlzLnBhcmVudC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeCksITA9PT1lKXtjb25zdCB0PXRoaXMuY2hpbGRyZW47Zm9yKGxldCBlPTAsbj10Lmxlbmd0aDtlPG47ZSsrKXRbZV0udXBkYXRlV29ybGRNYXRyaXgoITEsITApfX0sdG9KU09OOmZ1bmN0aW9uKHQpe2NvbnN0IGU9dm9pZCAwPT09dHx8InN0cmluZyI9PXR5cGVvZiB0LG49e307ZSYmKHQ9e2dlb21ldHJpZXM6e30sbWF0ZXJpYWxzOnt9LHRleHR1cmVzOnt9LGltYWdlczp7fSxzaGFwZXM6e30sc2tlbGV0b25zOnt9LGFuaW1hdGlvbnM6e319LG4ubWV0YWRhdGE9e3ZlcnNpb246NC41LHR5cGU6Ik9iamVjdCIsZ2VuZXJhdG9yOiJPYmplY3QzRC50b0pTT04ifSk7Y29uc3Qgbz17fTtmdW5jdGlvbiBpKGUsbil7cmV0dXJuIHZvaWQgMD09PWVbbi51dWlkXSYmKGVbbi51dWlkXT1uLnRvSlNPTih0KSksbi51dWlkfWlmKG8udXVpZD10aGlzLnV1aWQsby50eXBlPXRoaXMudHlwZSwiIiE9PXRoaXMubmFtZSYmKG8ubmFtZT10aGlzLm5hbWUpLCEwPT09dGhpcy5jYXN0U2hhZG93JiYoby5jYXN0U2hhZG93PSEwKSwhMD09PXRoaXMucmVjZWl2ZVNoYWRvdyYmKG8ucmVjZWl2ZVNoYWRvdz0hMCksITE9PT10aGlzLnZpc2libGUmJihvLnZpc2libGU9ITEpLCExPT09dGhpcy5mcnVzdHVtQ3VsbGVkJiYoby5mcnVzdHVtQ3VsbGVkPSExKSwwIT09dGhpcy5yZW5kZXJPcmRlciYmKG8ucmVuZGVyT3JkZXI9dGhpcy5yZW5kZXJPcmRlciksInt9IiE9PUpTT04uc3RyaW5naWZ5KHRoaXMudXNlckRhdGEpJiYoby51c2VyRGF0YT10aGlzLnVzZXJEYXRhKSxvLmxheWVycz10aGlzLmxheWVycy5tYXNrLG8ubWF0cml4PXRoaXMubWF0cml4LnRvQXJyYXkoKSwhMT09PXRoaXMubWF0cml4QXV0b1VwZGF0ZSYmKG8ubWF0cml4QXV0b1VwZGF0ZT0hMSksdGhpcy5pc0luc3RhbmNlZE1lc2gmJihvLnR5cGU9Ikluc3RhbmNlZE1lc2giLG8uY291bnQ9dGhpcy5jb3VudCxvLmluc3RhbmNlTWF0cml4PXRoaXMuaW5zdGFuY2VNYXRyaXgudG9KU09OKCkpLHRoaXMuaXNNZXNofHx0aGlzLmlzTGluZXx8dGhpcy5pc1BvaW50cyl7by5nZW9tZXRyeT1pKHQuZ2VvbWV0cmllcyx0aGlzLmdlb21ldHJ5KTtjb25zdCBlPXRoaXMuZ2VvbWV0cnkucGFyYW1ldGVycztpZih2b2lkIDAhPT1lJiZ2b2lkIDAhPT1lLnNoYXBlcyl7Y29uc3Qgbj1lLnNoYXBlcztpZihBcnJheS5pc0FycmF5KG4pKWZvcihsZXQgZT0wLG89bi5sZW5ndGg7ZTxvO2UrKylpKHQuc2hhcGVzLG5bZV0pO2Vsc2UgaSh0LnNoYXBlcyxuKX19aWYodGhpcy5pc1NraW5uZWRNZXNoJiYoby5iaW5kTW9kZT10aGlzLmJpbmRNb2RlLG8uYmluZE1hdHJpeD10aGlzLmJpbmRNYXRyaXgudG9BcnJheSgpLHZvaWQgMCE9PXRoaXMuc2tlbGV0b24mJihpKHQuc2tlbGV0b25zLHRoaXMuc2tlbGV0b24pLG8uc2tlbGV0b249dGhpcy5za2VsZXRvbi51dWlkKSksdm9pZCAwIT09dGhpcy5tYXRlcmlhbClpZihBcnJheS5pc0FycmF5KHRoaXMubWF0ZXJpYWwpKXtjb25zdCBlPVtdO2ZvcihsZXQgbj0wLG89dGhpcy5tYXRlcmlhbC5sZW5ndGg7bjxvO24rKyllLnB1c2goaSh0Lm1hdGVyaWFscyx0aGlzLm1hdGVyaWFsW25dKSk7by5tYXRlcmlhbD1lfWVsc2Ugby5tYXRlcmlhbD1pKHQubWF0ZXJpYWxzLHRoaXMubWF0ZXJpYWwpO2lmKHRoaXMuY2hpbGRyZW4ubGVuZ3RoPjApe28uY2hpbGRyZW49W107Zm9yKGxldCBlPTA7ZTx0aGlzLmNoaWxkcmVuLmxlbmd0aDtlKyspby5jaGlsZHJlbi5wdXNoKHRoaXMuY2hpbGRyZW5bZV0udG9KU09OKHQpLm9iamVjdCl9aWYodGhpcy5hbmltYXRpb25zLmxlbmd0aD4wKXtvLmFuaW1hdGlvbnM9W107Zm9yKGxldCBlPTA7ZTx0aGlzLmFuaW1hdGlvbnMubGVuZ3RoO2UrKylvLmFuaW1hdGlvbnMucHVzaChpKHQuYW5pbWF0aW9ucyx0aGlzLmFuaW1hdGlvbnNbZV0pKX1pZihlKXtjb25zdCBlPWEodC5nZW9tZXRyaWVzKSxvPWEodC5tYXRlcmlhbHMpLGk9YSh0LnRleHR1cmVzKSxyPWEodC5pbWFnZXMpLHM9YSh0LnNoYXBlcyksbD1hKHQuc2tlbGV0b25zKSxjPWEodC5hbmltYXRpb25zKTtlLmxlbmd0aD4wJiYobi5nZW9tZXRyaWVzPWUpLG8ubGVuZ3RoPjAmJihuLm1hdGVyaWFscz1vKSxpLmxlbmd0aD4wJiYobi50ZXh0dXJlcz1pKSxyLmxlbmd0aD4wJiYobi5pbWFnZXM9cikscy5sZW5ndGg+MCYmKG4uc2hhcGVzPXMpLGwubGVuZ3RoPjAmJihuLnNrZWxldG9ucz1sKSxjLmxlbmd0aD4wJiYobi5hbmltYXRpb25zPWMpfXJldHVybiBuLm9iamVjdD1vLG47ZnVuY3Rpb24gYSh0KXtjb25zdCBlPVtdO2Zvcihjb25zdCBuIGluIHQpe2NvbnN0IG89dFtuXTtkZWxldGUgby5tZXRhZGF0YSxlLnB1c2gobyl9cmV0dXJuIGV9fSxjbG9uZTpmdW5jdGlvbih0KXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyx0KX0sY29weTpmdW5jdGlvbih0LGU9ITApe2lmKHRoaXMubmFtZT10Lm5hbWUsdGhpcy51cC5jb3B5KHQudXApLHRoaXMucG9zaXRpb24uY29weSh0LnBvc2l0aW9uKSx0aGlzLnJvdGF0aW9uLm9yZGVyPXQucm90YXRpb24ub3JkZXIsdGhpcy5xdWF0ZXJuaW9uLmNvcHkodC5xdWF0ZXJuaW9uKSx0aGlzLnNjYWxlLmNvcHkodC5zY2FsZSksdGhpcy5tYXRyaXguY29weSh0Lm1hdHJpeCksdGhpcy5tYXRyaXhXb3JsZC5jb3B5KHQubWF0cml4V29ybGQpLHRoaXMubWF0cml4QXV0b1VwZGF0ZT10Lm1hdHJpeEF1dG9VcGRhdGUsdGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPXQubWF0cml4V29ybGROZWVkc1VwZGF0ZSx0aGlzLmxheWVycy5tYXNrPXQubGF5ZXJzLm1hc2ssdGhpcy52aXNpYmxlPXQudmlzaWJsZSx0aGlzLmNhc3RTaGFkb3c9dC5jYXN0U2hhZG93LHRoaXMucmVjZWl2ZVNoYWRvdz10LnJlY2VpdmVTaGFkb3csdGhpcy5mcnVzdHVtQ3VsbGVkPXQuZnJ1c3R1bUN1bGxlZCx0aGlzLnJlbmRlck9yZGVyPXQucmVuZGVyT3JkZXIsdGhpcy51c2VyRGF0YT1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQudXNlckRhdGEpKSwhMD09PWUpZm9yKGxldCBlPTA7ZTx0LmNoaWxkcmVuLmxlbmd0aDtlKyspdGhpcy5hZGQodC5jaGlsZHJlbltlXS5jbG9uZSgpKTtyZXR1cm4gdGhpc319KTtjb25zdCAkYXQ9bmV3ICRpdCx0cnQ9bmV3ICRpdCxlcnQ9bmV3IFdpdDtjbGFzcyBucnR7Y29uc3RydWN0b3IodCxlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaXNQbGFuZSIse3ZhbHVlOiEwfSksdGhpcy5ub3JtYWw9dm9pZCAwIT09dD90Om5ldyAkaXQoMSwwLDApLHRoaXMuY29uc3RhbnQ9dm9pZCAwIT09ZT9lOjB9c2V0KHQsZSl7cmV0dXJuIHRoaXMubm9ybWFsLmNvcHkodCksdGhpcy5jb25zdGFudD1lLHRoaXN9c2V0Q29tcG9uZW50cyh0LGUsbixvKXtyZXR1cm4gdGhpcy5ub3JtYWwuc2V0KHQsZSxuKSx0aGlzLmNvbnN0YW50PW8sdGhpc31zZXRGcm9tTm9ybWFsQW5kQ29wbGFuYXJQb2ludCh0LGUpe3JldHVybiB0aGlzLm5vcm1hbC5jb3B5KHQpLHRoaXMuY29uc3RhbnQ9LWUuZG90KHRoaXMubm9ybWFsKSx0aGlzfXNldEZyb21Db3BsYW5hclBvaW50cyh0LGUsbil7Y29uc3Qgbz0kYXQuc3ViVmVjdG9ycyhuLGUpLmNyb3NzKHRydC5zdWJWZWN0b3JzKHQsZSkpLm5vcm1hbGl6ZSgpO3JldHVybiB0aGlzLnNldEZyb21Ob3JtYWxBbmRDb3BsYW5hclBvaW50KG8sdCksdGhpc31jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLm5vcm1hbC5jb3B5KHQubm9ybWFsKSx0aGlzLmNvbnN0YW50PXQuY29uc3RhbnQsdGhpc31ub3JtYWxpemUoKXtjb25zdCB0PTEvdGhpcy5ub3JtYWwubGVuZ3RoKCk7cmV0dXJuIHRoaXMubm9ybWFsLm11bHRpcGx5U2NhbGFyKHQpLHRoaXMuY29uc3RhbnQqPXQsdGhpc31uZWdhdGUoKXtyZXR1cm4gdGhpcy5jb25zdGFudCo9LTEsdGhpcy5ub3JtYWwubmVnYXRlKCksdGhpc31kaXN0YW5jZVRvUG9pbnQodCl7cmV0dXJuIHRoaXMubm9ybWFsLmRvdCh0KSt0aGlzLmNvbnN0YW50fWRpc3RhbmNlVG9TcGhlcmUodCl7cmV0dXJuIHRoaXMuZGlzdGFuY2VUb1BvaW50KHQuY2VudGVyKS10LnJhZGl1c31wcm9qZWN0UG9pbnQodCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGNvbnNvbGUud2FybigiVEhSRUUuUGxhbmU6IC5wcm9qZWN0UG9pbnQoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIiksZT1uZXcgJGl0KSxlLmNvcHkodGhpcy5ub3JtYWwpLm11bHRpcGx5U2NhbGFyKC10aGlzLmRpc3RhbmNlVG9Qb2ludCh0KSkuYWRkKHQpfWludGVyc2VjdExpbmUodCxlKXt2b2lkIDA9PT1lJiYoY29uc29sZS53YXJuKCJUSFJFRS5QbGFuZTogLmludGVyc2VjdExpbmUoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIiksZT1uZXcgJGl0KTtjb25zdCBuPXQuZGVsdGEoJGF0KSxvPXRoaXMubm9ybWFsLmRvdChuKTtpZigwPT09bylyZXR1cm4gMD09PXRoaXMuZGlzdGFuY2VUb1BvaW50KHQuc3RhcnQpP2UuY29weSh0LnN0YXJ0KTp2b2lkIDA7Y29uc3QgaT0tKHQuc3RhcnQuZG90KHRoaXMubm9ybWFsKSt0aGlzLmNvbnN0YW50KS9vO3JldHVybiBpPDB8fGk+MT92b2lkIDA6ZS5jb3B5KG4pLm11bHRpcGx5U2NhbGFyKGkpLmFkZCh0LnN0YXJ0KX1pbnRlcnNlY3RzTGluZSh0KXtjb25zdCBlPXRoaXMuZGlzdGFuY2VUb1BvaW50KHQuc3RhcnQpLG49dGhpcy5kaXN0YW5jZVRvUG9pbnQodC5lbmQpO3JldHVybiBlPDAmJm4+MHx8bjwwJiZlPjB9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4gdC5pbnRlcnNlY3RzUGxhbmUodGhpcyl9aW50ZXJzZWN0c1NwaGVyZSh0KXtyZXR1cm4gdC5pbnRlcnNlY3RzUGxhbmUodGhpcyl9Y29wbGFuYXJQb2ludCh0KXtyZXR1cm4gdm9pZCAwPT09dCYmKGNvbnNvbGUud2FybigiVEhSRUUuUGxhbmU6IC5jb3BsYW5hclBvaW50KCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLHQ9bmV3ICRpdCksdC5jb3B5KHRoaXMubm9ybWFsKS5tdWx0aXBseVNjYWxhcigtdGhpcy5jb25zdGFudCl9YXBwbHlNYXRyaXg0KHQsZSl7Y29uc3Qgbj1lfHxlcnQuZ2V0Tm9ybWFsTWF0cml4KHQpLG89dGhpcy5jb3BsYW5hclBvaW50KCRhdCkuYXBwbHlNYXRyaXg0KHQpLGk9dGhpcy5ub3JtYWwuYXBwbHlNYXRyaXgzKG4pLm5vcm1hbGl6ZSgpO3JldHVybiB0aGlzLmNvbnN0YW50PS1vLmRvdChpKSx0aGlzfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5jb25zdGFudC09dC5kb3QodGhpcy5ub3JtYWwpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lm5vcm1hbC5lcXVhbHModGhpcy5ub3JtYWwpJiZ0LmNvbnN0YW50PT09dGhpcy5jb25zdGFudH19Y29uc3Qgb3J0PW5ldyAkaXQsaXJ0PW5ldyAkaXQsYXJ0PW5ldyAkaXQscnJ0PW5ldyAkaXQsc3J0PW5ldyAkaXQsbHJ0PW5ldyAkaXQsY3J0PW5ldyAkaXQsZHJ0PW5ldyAkaXQscHJ0PW5ldyAkaXQsbXJ0PW5ldyAkaXQ7Y2xhc3MgdXJ0e2NvbnN0cnVjdG9yKHQsZSxuKXt0aGlzLmE9dm9pZCAwIT09dD90Om5ldyAkaXQsdGhpcy5iPXZvaWQgMCE9PWU/ZTpuZXcgJGl0LHRoaXMuYz12b2lkIDAhPT1uP246bmV3ICRpdH1zdGF0aWMgZ2V0Tm9ybWFsKHQsZSxuLG8pe3ZvaWQgMD09PW8mJihjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAuZ2V0Tm9ybWFsKCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLG89bmV3ICRpdCksby5zdWJWZWN0b3JzKG4sZSksb3J0LnN1YlZlY3RvcnModCxlKSxvLmNyb3NzKG9ydCk7Y29uc3QgaT1vLmxlbmd0aFNxKCk7cmV0dXJuIGk+MD9vLm11bHRpcGx5U2NhbGFyKDEvTWF0aC5zcXJ0KGkpKTpvLnNldCgwLDAsMCl9c3RhdGljIGdldEJhcnljb29yZCh0LGUsbixvLGkpe29ydC5zdWJWZWN0b3JzKG8sZSksaXJ0LnN1YlZlY3RvcnMobixlKSxhcnQuc3ViVmVjdG9ycyh0LGUpO2NvbnN0IGE9b3J0LmRvdChvcnQpLHI9b3J0LmRvdChpcnQpLHM9b3J0LmRvdChhcnQpLGw9aXJ0LmRvdChpcnQpLGM9aXJ0LmRvdChhcnQpLGQ9YSpsLXIqcjtpZih2b2lkIDA9PT1pJiYoY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLmdldEJhcnljb29yZCgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSxpPW5ldyAkaXQpLDA9PT1kKXJldHVybiBpLnNldCgtMiwtMSwtMSk7Y29uc3QgcD0xL2QsbT0obCpzLXIqYykqcCx1PShhKmMtcipzKSpwO3JldHVybiBpLnNldCgxLW0tdSx1LG0pfXN0YXRpYyBjb250YWluc1BvaW50KHQsZSxuLG8pe3JldHVybiB0aGlzLmdldEJhcnljb29yZCh0LGUsbixvLHJydCkscnJ0Lng+PTAmJnJydC55Pj0wJiZycnQueCtycnQueTw9MX1zdGF0aWMgZ2V0VVYodCxlLG4sbyxpLGEscixzKXtyZXR1cm4gdGhpcy5nZXRCYXJ5Y29vcmQodCxlLG4sbyxycnQpLHMuc2V0KDAsMCkscy5hZGRTY2FsZWRWZWN0b3IoaSxycnQueCkscy5hZGRTY2FsZWRWZWN0b3IoYSxycnQueSkscy5hZGRTY2FsZWRWZWN0b3IocixycnQueiksc31zdGF0aWMgaXNGcm9udEZhY2luZyh0LGUsbixvKXtyZXR1cm4gb3J0LnN1YlZlY3RvcnMobixlKSxpcnQuc3ViVmVjdG9ycyh0LGUpLG9ydC5jcm9zcyhpcnQpLmRvdChvKTwwfXNldCh0LGUsbil7cmV0dXJuIHRoaXMuYS5jb3B5KHQpLHRoaXMuYi5jb3B5KGUpLHRoaXMuYy5jb3B5KG4pLHRoaXN9c2V0RnJvbVBvaW50c0FuZEluZGljZXModCxlLG4sbyl7cmV0dXJuIHRoaXMuYS5jb3B5KHRbZV0pLHRoaXMuYi5jb3B5KHRbbl0pLHRoaXMuYy5jb3B5KHRbb10pLHRoaXN9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9Y29weSh0KXtyZXR1cm4gdGhpcy5hLmNvcHkodC5hKSx0aGlzLmIuY29weSh0LmIpLHRoaXMuYy5jb3B5KHQuYyksdGhpc31nZXRBcmVhKCl7cmV0dXJuIG9ydC5zdWJWZWN0b3JzKHRoaXMuYyx0aGlzLmIpLGlydC5zdWJWZWN0b3JzKHRoaXMuYSx0aGlzLmIpLC41Km9ydC5jcm9zcyhpcnQpLmxlbmd0aCgpfWdldE1pZHBvaW50KHQpe3JldHVybiB2b2lkIDA9PT10JiYoY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLmdldE1pZHBvaW50KCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLHQ9bmV3ICRpdCksdC5hZGRWZWN0b3JzKHRoaXMuYSx0aGlzLmIpLmFkZCh0aGlzLmMpLm11bHRpcGx5U2NhbGFyKDEvMyl9Z2V0Tm9ybWFsKHQpe3JldHVybiB1cnQuZ2V0Tm9ybWFsKHRoaXMuYSx0aGlzLmIsdGhpcy5jLHQpfWdldFBsYW5lKHQpe3JldHVybiB2b2lkIDA9PT10JiYoY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLmdldFBsYW5lKCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLHQ9bmV3IG5ydCksdC5zZXRGcm9tQ29wbGFuYXJQb2ludHModGhpcy5hLHRoaXMuYix0aGlzLmMpfWdldEJhcnljb29yZCh0LGUpe3JldHVybiB1cnQuZ2V0QmFyeWNvb3JkKHQsdGhpcy5hLHRoaXMuYix0aGlzLmMsZSl9Z2V0VVYodCxlLG4sbyxpKXtyZXR1cm4gdXJ0LmdldFVWKHQsdGhpcy5hLHRoaXMuYix0aGlzLmMsZSxuLG8saSl9Y29udGFpbnNQb2ludCh0KXtyZXR1cm4gdXJ0LmNvbnRhaW5zUG9pbnQodCx0aGlzLmEsdGhpcy5iLHRoaXMuYyl9aXNGcm9udEZhY2luZyh0KXtyZXR1cm4gdXJ0LmlzRnJvbnRGYWNpbmcodGhpcy5hLHRoaXMuYix0aGlzLmMsdCl9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4gdC5pbnRlcnNlY3RzVHJpYW5nbGUodGhpcyl9Y2xvc2VzdFBvaW50VG9Qb2ludCh0LGUpe3ZvaWQgMD09PWUmJihjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAuY2xvc2VzdFBvaW50VG9Qb2ludCgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSxlPW5ldyAkaXQpO2NvbnN0IG49dGhpcy5hLG89dGhpcy5iLGk9dGhpcy5jO2xldCBhLHI7c3J0LnN1YlZlY3RvcnMobyxuKSxscnQuc3ViVmVjdG9ycyhpLG4pLGRydC5zdWJWZWN0b3JzKHQsbik7Y29uc3Qgcz1zcnQuZG90KGRydCksbD1scnQuZG90KGRydCk7aWYoczw9MCYmbDw9MClyZXR1cm4gZS5jb3B5KG4pO3BydC5zdWJWZWN0b3JzKHQsbyk7Y29uc3QgYz1zcnQuZG90KHBydCksZD1scnQuZG90KHBydCk7aWYoYz49MCYmZDw9YylyZXR1cm4gZS5jb3B5KG8pO2NvbnN0IHA9cypkLWMqbDtpZihwPD0wJiZzPj0wJiZjPD0wKXJldHVybiBhPXMvKHMtYyksZS5jb3B5KG4pLmFkZFNjYWxlZFZlY3RvcihzcnQsYSk7bXJ0LnN1YlZlY3RvcnModCxpKTtjb25zdCBtPXNydC5kb3QobXJ0KSx1PWxydC5kb3QobXJ0KTtpZih1Pj0wJiZtPD11KXJldHVybiBlLmNvcHkoaSk7Y29uc3QgZj1tKmwtcyp1O2lmKGY8PTAmJmw+PTAmJnU8PTApcmV0dXJuIHI9bC8obC11KSxlLmNvcHkobikuYWRkU2NhbGVkVmVjdG9yKGxydCxyKTtjb25zdCBnPWMqdS1tKmQ7aWYoZzw9MCYmZC1jPj0wJiZtLXU+PTApcmV0dXJuIGNydC5zdWJWZWN0b3JzKGksbykscj0oZC1jKS8oZC1jKyhtLXUpKSxlLmNvcHkobykuYWRkU2NhbGVkVmVjdG9yKGNydCxyKTtjb25zdCBoPTEvKGcrZitwKTtyZXR1cm4gYT1mKmgscj1wKmgsZS5jb3B5KG4pLmFkZFNjYWxlZFZlY3RvcihzcnQsYSkuYWRkU2NhbGVkVmVjdG9yKGxydCxyKX1lcXVhbHModCl7cmV0dXJuIHQuYS5lcXVhbHModGhpcy5hKSYmdC5iLmVxdWFscyh0aGlzLmIpJiZ0LmMuZXF1YWxzKHRoaXMuYyl9fWNvbnN0IGZydD17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fSxncnQ9e2g6MCxzOjAsbDowfSxocnQ9e2g6MCxzOjAsbDowfTtmdW5jdGlvbiBicnQodCxlLG4pe3JldHVybiBuPDAmJihuKz0xKSxuPjEmJihuLT0xKSxuPDEvNj90KzYqKGUtdCkqbjpuPC41P2U6bjwyLzM/dCs2KihlLXQpKigyLzMtbik6dH1mdW5jdGlvbiB5cnQodCl7cmV0dXJuIHQ8LjA0MDQ1Py4wNzczOTkzODA4KnQ6TWF0aC5wb3coLjk0Nzg2NzI5ODYqdCsuMDUyMTMyNzAxNCwyLjQpfWZ1bmN0aW9uIF9ydCh0KXtyZXR1cm4gdDwuMDAzMTMwOD8xMi45Mip0OjEuMDU1Kk1hdGgucG93KHQsLjQxNjY2KS0uMDU1fWNsYXNzIENydHtjb25zdHJ1Y3Rvcih0LGUsbil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpc0NvbG9yIix7dmFsdWU6ITB9KSx2b2lkIDA9PT1lJiZ2b2lkIDA9PT1uP3RoaXMuc2V0KHQpOnRoaXMuc2V0UkdCKHQsZSxuKX1zZXQodCl7cmV0dXJuIHQmJnQuaXNDb2xvcj90aGlzLmNvcHkodCk6Im51bWJlciI9PXR5cGVvZiB0P3RoaXMuc2V0SGV4KHQpOiJzdHJpbmciPT10eXBlb2YgdCYmdGhpcy5zZXRTdHlsZSh0KSx0aGlzfXNldFNjYWxhcih0KXtyZXR1cm4gdGhpcy5yPXQsdGhpcy5nPXQsdGhpcy5iPXQsdGhpc31zZXRIZXgodCl7cmV0dXJuIHQ9TWF0aC5mbG9vcih0KSx0aGlzLnI9KHQ+PjE2JjI1NSkvMjU1LHRoaXMuZz0odD4+OCYyNTUpLzI1NSx0aGlzLmI9KDI1NSZ0KS8yNTUsdGhpc31zZXRSR0IodCxlLG4pe3JldHVybiB0aGlzLnI9dCx0aGlzLmc9ZSx0aGlzLmI9bix0aGlzfXNldEhTTCh0LGUsbil7aWYodD1qaXQuZXVjbGlkZWFuTW9kdWxvKHQsMSksZT1qaXQuY2xhbXAoZSwwLDEpLG49aml0LmNsYW1wKG4sMCwxKSwwPT09ZSl0aGlzLnI9dGhpcy5nPXRoaXMuYj1uO2Vsc2V7Y29uc3Qgbz1uPD0uNT9uKigxK2UpOm4rZS1uKmUsaT0yKm4tbzt0aGlzLnI9YnJ0KGksbyx0KzEvMyksdGhpcy5nPWJydChpLG8sdCksdGhpcy5iPWJydChpLG8sdC0xLzMpfXJldHVybiB0aGlzfXNldFN0eWxlKHQpe2Z1bmN0aW9uIGUoZSl7dm9pZCAwIT09ZSYmcGFyc2VGbG9hdChlKTwxJiZjb25zb2xlLndhcm4oIlRIUkVFLkNvbG9yOiBBbHBoYSBjb21wb25lbnQgb2YgIit0KyIgd2lsbCBiZSBpZ25vcmVkLiIpfWxldCBuO2lmKG49L14oKD86cmdifGhzbClhPylcKChbXlwpXSopXCkvLmV4ZWModCkpe2xldCB0O2NvbnN0IG89blsyXTtzd2l0Y2goblsxXSl7Y2FzZSJyZ2IiOmNhc2UicmdiYSI6aWYodD0vXlxzKihcZCspXHMqLFxzKihcZCspXHMqLFxzKihcZCspXHMqKD86LFxzKihcZCpcLj9cZCspXHMqKT8kLy5leGVjKG8pKXJldHVybiB0aGlzLnI9TWF0aC5taW4oMjU1LHBhcnNlSW50KHRbMV0sMTApKS8yNTUsdGhpcy5nPU1hdGgubWluKDI1NSxwYXJzZUludCh0WzJdLDEwKSkvMjU1LHRoaXMuYj1NYXRoLm1pbigyNTUscGFyc2VJbnQodFszXSwxMCkpLzI1NSxlKHRbNF0pLHRoaXM7aWYodD0vXlxzKihcZCspXCVccyosXHMqKFxkKylcJVxzKixccyooXGQrKVwlXHMqKD86LFxzKihcZCpcLj9cZCspXHMqKT8kLy5leGVjKG8pKXJldHVybiB0aGlzLnI9TWF0aC5taW4oMTAwLHBhcnNlSW50KHRbMV0sMTApKS8xMDAsdGhpcy5nPU1hdGgubWluKDEwMCxwYXJzZUludCh0WzJdLDEwKSkvMTAwLHRoaXMuYj1NYXRoLm1pbigxMDAscGFyc2VJbnQodFszXSwxMCkpLzEwMCxlKHRbNF0pLHRoaXM7YnJlYWs7Y2FzZSJoc2wiOmNhc2UiaHNsYSI6aWYodD0vXlxzKihcZCpcLj9cZCspXHMqLFxzKihcZCspXCVccyosXHMqKFxkKylcJVxzKig/OixccyooXGQqXC4/XGQrKVxzKik/JC8uZXhlYyhvKSl7Y29uc3Qgbj1wYXJzZUZsb2F0KHRbMV0pLzM2MCxvPXBhcnNlSW50KHRbMl0sMTApLzEwMCxpPXBhcnNlSW50KHRbM10sMTApLzEwMDtyZXR1cm4gZSh0WzRdKSx0aGlzLnNldEhTTChuLG8saSl9fX1lbHNlIGlmKG49L15cIyhbQS1GYS1mXGRdKykkLy5leGVjKHQpKXtjb25zdCB0PW5bMV0sZT10Lmxlbmd0aDtpZigzPT09ZSlyZXR1cm4gdGhpcy5yPXBhcnNlSW50KHQuY2hhckF0KDApK3QuY2hhckF0KDApLDE2KS8yNTUsdGhpcy5nPXBhcnNlSW50KHQuY2hhckF0KDEpK3QuY2hhckF0KDEpLDE2KS8yNTUsdGhpcy5iPXBhcnNlSW50KHQuY2hhckF0KDIpK3QuY2hhckF0KDIpLDE2KS8yNTUsdGhpcztpZig2PT09ZSlyZXR1cm4gdGhpcy5yPXBhcnNlSW50KHQuY2hhckF0KDApK3QuY2hhckF0KDEpLDE2KS8yNTUsdGhpcy5nPXBhcnNlSW50KHQuY2hhckF0KDIpK3QuY2hhckF0KDMpLDE2KS8yNTUsdGhpcy5iPXBhcnNlSW50KHQuY2hhckF0KDQpK3QuY2hhckF0KDUpLDE2KS8yNTUsdGhpc31yZXR1cm4gdCYmdC5sZW5ndGg+MD90aGlzLnNldENvbG9yTmFtZSh0KTp0aGlzfXNldENvbG9yTmFtZSh0KXtjb25zdCBlPWZydFt0XTtyZXR1cm4gdm9pZCAwIT09ZT90aGlzLnNldEhleChlKTpjb25zb2xlLndhcm4oIlRIUkVFLkNvbG9yOiBVbmtub3duIGNvbG9yICIrdCksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLnIsdGhpcy5nLHRoaXMuYil9Y29weSh0KXtyZXR1cm4gdGhpcy5yPXQucix0aGlzLmc9dC5nLHRoaXMuYj10LmIsdGhpc31jb3B5R2FtbWFUb0xpbmVhcih0LGU9Mil7cmV0dXJuIHRoaXMucj1NYXRoLnBvdyh0LnIsZSksdGhpcy5nPU1hdGgucG93KHQuZyxlKSx0aGlzLmI9TWF0aC5wb3codC5iLGUpLHRoaXN9Y29weUxpbmVhclRvR2FtbWEodCxlPTIpe2NvbnN0IG49ZT4wPzEvZToxO3JldHVybiB0aGlzLnI9TWF0aC5wb3codC5yLG4pLHRoaXMuZz1NYXRoLnBvdyh0LmcsbiksdGhpcy5iPU1hdGgucG93KHQuYixuKSx0aGlzfWNvbnZlcnRHYW1tYVRvTGluZWFyKHQpe3JldHVybiB0aGlzLmNvcHlHYW1tYVRvTGluZWFyKHRoaXMsdCksdGhpc31jb252ZXJ0TGluZWFyVG9HYW1tYSh0KXtyZXR1cm4gdGhpcy5jb3B5TGluZWFyVG9HYW1tYSh0aGlzLHQpLHRoaXN9Y29weVNSR0JUb0xpbmVhcih0KXtyZXR1cm4gdGhpcy5yPXlydCh0LnIpLHRoaXMuZz15cnQodC5nKSx0aGlzLmI9eXJ0KHQuYiksdGhpc31jb3B5TGluZWFyVG9TUkdCKHQpe3JldHVybiB0aGlzLnI9X3J0KHQuciksdGhpcy5nPV9ydCh0LmcpLHRoaXMuYj1fcnQodC5iKSx0aGlzfWNvbnZlcnRTUkdCVG9MaW5lYXIoKXtyZXR1cm4gdGhpcy5jb3B5U1JHQlRvTGluZWFyKHRoaXMpLHRoaXN9Y29udmVydExpbmVhclRvU1JHQigpe3JldHVybiB0aGlzLmNvcHlMaW5lYXJUb1NSR0IodGhpcyksdGhpc31nZXRIZXgoKXtyZXR1cm4gMjU1KnRoaXMucjw8MTZeMjU1KnRoaXMuZzw8OF4yNTUqdGhpcy5iPDwwfWdldEhleFN0cmluZygpe3JldHVybigiMDAwMDAwIit0aGlzLmdldEhleCgpLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTYpfWdldEhTTCh0KXt2b2lkIDA9PT10JiYoY29uc29sZS53YXJuKCJUSFJFRS5Db2xvcjogLmdldEhTTCgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSx0PXtoOjAsczowLGw6MH0pO2NvbnN0IGU9dGhpcy5yLG49dGhpcy5nLG89dGhpcy5iLGk9TWF0aC5tYXgoZSxuLG8pLGE9TWF0aC5taW4oZSxuLG8pO2xldCByLHM7Y29uc3QgbD0oYStpKS8yO2lmKGE9PT1pKXI9MCxzPTA7ZWxzZXtjb25zdCB0PWktYTtzd2l0Y2gocz1sPD0uNT90LyhpK2EpOnQvKDItaS1hKSxpKXtjYXNlIGU6cj0obi1vKS90KyhuPG8/NjowKTticmVhaztjYXNlIG46cj0oby1lKS90KzI7YnJlYWs7Y2FzZSBvOnI9KGUtbikvdCs0fXIvPTZ9cmV0dXJuIHQuaD1yLHQucz1zLHQubD1sLHR9Z2V0U3R5bGUoKXtyZXR1cm4icmdiKCIrKDI1NSp0aGlzLnJ8MCkrIiwiKygyNTUqdGhpcy5nfDApKyIsIisoMjU1KnRoaXMuYnwwKSsiKSJ9b2Zmc2V0SFNMKHQsZSxuKXtyZXR1cm4gdGhpcy5nZXRIU0woZ3J0KSxncnQuaCs9dCxncnQucys9ZSxncnQubCs9bix0aGlzLnNldEhTTChncnQuaCxncnQucyxncnQubCksdGhpc31hZGQodCl7cmV0dXJuIHRoaXMucis9dC5yLHRoaXMuZys9dC5nLHRoaXMuYis9dC5iLHRoaXN9YWRkQ29sb3JzKHQsZSl7cmV0dXJuIHRoaXMucj10LnIrZS5yLHRoaXMuZz10LmcrZS5nLHRoaXMuYj10LmIrZS5iLHRoaXN9YWRkU2NhbGFyKHQpe3JldHVybiB0aGlzLnIrPXQsdGhpcy5nKz10LHRoaXMuYis9dCx0aGlzfXN1Yih0KXtyZXR1cm4gdGhpcy5yPU1hdGgubWF4KDAsdGhpcy5yLXQuciksdGhpcy5nPU1hdGgubWF4KDAsdGhpcy5nLXQuZyksdGhpcy5iPU1hdGgubWF4KDAsdGhpcy5iLXQuYiksdGhpc31tdWx0aXBseSh0KXtyZXR1cm4gdGhpcy5yKj10LnIsdGhpcy5nKj10LmcsdGhpcy5iKj10LmIsdGhpc31tdWx0aXBseVNjYWxhcih0KXtyZXR1cm4gdGhpcy5yKj10LHRoaXMuZyo9dCx0aGlzLmIqPXQsdGhpc31sZXJwKHQsZSl7cmV0dXJuIHRoaXMucis9KHQuci10aGlzLnIpKmUsdGhpcy5nKz0odC5nLXRoaXMuZykqZSx0aGlzLmIrPSh0LmItdGhpcy5iKSplLHRoaXN9bGVycENvbG9ycyh0LGUsbil7cmV0dXJuIHRoaXMucj10LnIrKGUuci10LnIpKm4sdGhpcy5nPXQuZysoZS5nLXQuZykqbix0aGlzLmI9dC5iKyhlLmItdC5iKSpuLHRoaXN9bGVycEhTTCh0LGUpe3RoaXMuZ2V0SFNMKGdydCksdC5nZXRIU0woaHJ0KTtjb25zdCBuPWppdC5sZXJwKGdydC5oLGhydC5oLGUpLG89aml0LmxlcnAoZ3J0LnMsaHJ0LnMsZSksaT1qaXQubGVycChncnQubCxocnQubCxlKTtyZXR1cm4gdGhpcy5zZXRIU0wobixvLGkpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0LnI9PT10aGlzLnImJnQuZz09PXRoaXMuZyYmdC5iPT09dGhpcy5ifWZyb21BcnJheSh0LGU9MCl7cmV0dXJuIHRoaXMucj10W2VdLHRoaXMuZz10W2UrMV0sdGhpcy5iPXRbZSsyXSx0aGlzfXRvQXJyYXkodD1bXSxlPTApe3JldHVybiB0W2VdPXRoaXMucix0W2UrMV09dGhpcy5nLHRbZSsyXT10aGlzLmIsdH1mcm9tQnVmZmVyQXR0cmlidXRlKHQsZSl7cmV0dXJuIHRoaXMucj10LmdldFgoZSksdGhpcy5nPXQuZ2V0WShlKSx0aGlzLmI9dC5nZXRaKGUpLCEwPT09dC5ub3JtYWxpemVkJiYodGhpcy5yLz0yNTUsdGhpcy5nLz0yNTUsdGhpcy5iLz0yNTUpLHRoaXN9dG9KU09OKCl7cmV0dXJuIHRoaXMuZ2V0SGV4KCl9fUNydC5OQU1FUz1mcnQsQ3J0LnByb3RvdHlwZS5yPTEsQ3J0LnByb3RvdHlwZS5nPTEsQ3J0LnByb3RvdHlwZS5iPTE7Y2xhc3MgTXJ0e2NvbnN0cnVjdG9yKHQsZSxuLG8saSxhPTApe3RoaXMuYT10LHRoaXMuYj1lLHRoaXMuYz1uLHRoaXMubm9ybWFsPW8mJm8uaXNWZWN0b3IzP286bmV3ICRpdCx0aGlzLnZlcnRleE5vcm1hbHM9QXJyYXkuaXNBcnJheShvKT9vOltdLHRoaXMuY29sb3I9aSYmaS5pc0NvbG9yP2k6bmV3IENydCx0aGlzLnZlcnRleENvbG9ycz1BcnJheS5pc0FycmF5KGkpP2k6W10sdGhpcy5tYXRlcmlhbEluZGV4PWF9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9Y29weSh0KXt0aGlzLmE9dC5hLHRoaXMuYj10LmIsdGhpcy5jPXQuYyx0aGlzLm5vcm1hbC5jb3B5KHQubm9ybWFsKSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5tYXRlcmlhbEluZGV4PXQubWF0ZXJpYWxJbmRleDtmb3IobGV0IGU9MCxuPXQudmVydGV4Tm9ybWFscy5sZW5ndGg7ZTxuO2UrKyl0aGlzLnZlcnRleE5vcm1hbHNbZV09dC52ZXJ0ZXhOb3JtYWxzW2VdLmNsb25lKCk7Zm9yKGxldCBlPTAsbj10LnZlcnRleENvbG9ycy5sZW5ndGg7ZTxuO2UrKyl0aGlzLnZlcnRleENvbG9yc1tlXT10LnZlcnRleENvbG9yc1tlXS5jbG9uZSgpO3JldHVybiB0aGlzfX1sZXQgdnJ0PTA7ZnVuY3Rpb24geHJ0KCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlkIix7dmFsdWU6dnJ0Kyt9KSx0aGlzLnV1aWQ9aml0LmdlbmVyYXRlVVVJRCgpLHRoaXMubmFtZT0iIix0aGlzLnR5cGU9Ik1hdGVyaWFsIix0aGlzLmZvZz0hMCx0aGlzLmJsZW5kaW5nPTEsdGhpcy5zaWRlPTAsdGhpcy5mbGF0U2hhZGluZz0hMSx0aGlzLnZlcnRleENvbG9ycz0hMSx0aGlzLm9wYWNpdHk9MSx0aGlzLnRyYW5zcGFyZW50PSExLHRoaXMuYmxlbmRTcmM9MjA0LHRoaXMuYmxlbmREc3Q9MjA1LHRoaXMuYmxlbmRFcXVhdGlvbj1taXQsdGhpcy5ibGVuZFNyY0FscGhhPW51bGwsdGhpcy5ibGVuZERzdEFscGhhPW51bGwsdGhpcy5ibGVuZEVxdWF0aW9uQWxwaGE9bnVsbCx0aGlzLmRlcHRoRnVuYz0zLHRoaXMuZGVwdGhUZXN0PSEwLHRoaXMuZGVwdGhXcml0ZT0hMCx0aGlzLnN0ZW5jaWxXcml0ZU1hc2s9MjU1LHRoaXMuc3RlbmNpbEZ1bmM9NTE5LHRoaXMuc3RlbmNpbFJlZj0wLHRoaXMuc3RlbmNpbEZ1bmNNYXNrPTI1NSx0aGlzLnN0ZW5jaWxGYWlsPUlpdCx0aGlzLnN0ZW5jaWxaRmFpbD1JaXQsdGhpcy5zdGVuY2lsWlBhc3M9SWl0LHRoaXMuc3RlbmNpbFdyaXRlPSExLHRoaXMuY2xpcHBpbmdQbGFuZXM9bnVsbCx0aGlzLmNsaXBJbnRlcnNlY3Rpb249ITEsdGhpcy5jbGlwU2hhZG93cz0hMSx0aGlzLnNoYWRvd1NpZGU9bnVsbCx0aGlzLmNvbG9yV3JpdGU9ITAsdGhpcy5wcmVjaXNpb249bnVsbCx0aGlzLnBvbHlnb25PZmZzZXQ9ITEsdGhpcy5wb2x5Z29uT2Zmc2V0RmFjdG9yPTAsdGhpcy5wb2x5Z29uT2Zmc2V0VW5pdHM9MCx0aGlzLmRpdGhlcmluZz0hMSx0aGlzLmFscGhhVGVzdD0wLHRoaXMucHJlbXVsdGlwbGllZEFscGhhPSExLHRoaXMudmlzaWJsZT0hMCx0aGlzLnRvbmVNYXBwZWQ9ITAsdGhpcy51c2VyRGF0YT17fSx0aGlzLnZlcnNpb249MH1mdW5jdGlvbiBPcnQodCl7eHJ0LmNhbGwodGhpcyksdGhpcy50eXBlPSJNZXNoQmFzaWNNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgQ3J0KDE2Nzc3MjE1KSx0aGlzLm1hcD1udWxsLHRoaXMubGlnaHRNYXA9bnVsbCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTEsdGhpcy5hb01hcD1udWxsLHRoaXMuYW9NYXBJbnRlbnNpdHk9MSx0aGlzLnNwZWN1bGFyTWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZW52TWFwPW51bGwsdGhpcy5jb21iaW5lPTAsdGhpcy5yZWZsZWN0aXZpdHk9MSx0aGlzLnJlZnJhY3Rpb25SYXRpbz0uOTgsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZUxpbmVjYXA9InJvdW5kIix0aGlzLndpcmVmcmFtZUxpbmVqb2luPSJyb3VuZCIsdGhpcy5za2lubmluZz0hMSx0aGlzLm1vcnBoVGFyZ2V0cz0hMSx0aGlzLnNldFZhbHVlcyh0KX14cnQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShMaXQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6eHJ0LGlzTWF0ZXJpYWw6ITAsb25CZWZvcmVDb21waWxlOmZ1bmN0aW9uKCl7fSxjdXN0b21Qcm9ncmFtQ2FjaGVLZXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vbkJlZm9yZUNvbXBpbGUudG9TdHJpbmcoKX0sc2V0VmFsdWVzOmZ1bmN0aW9uKHQpe2lmKHZvaWQgMCE9PXQpZm9yKGNvbnN0IGUgaW4gdCl7Y29uc3Qgbj10W2VdO2lmKHZvaWQgMD09PW4pe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6ICciK2UrIicgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZC4iKTtjb250aW51ZX1pZigic2hhZGluZyI9PT1lKXtjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zaGFkaW5nIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB0aGUgYm9vbGVhbiAuZmxhdFNoYWRpbmcgaW5zdGVhZC4iKSx0aGlzLmZsYXRTaGFkaW5nPTE9PT1uO2NvbnRpbnVlfWNvbnN0IG89dGhpc1tlXTt2b2lkIDAhPT1vP28mJm8uaXNDb2xvcj9vLnNldChuKTpvJiZvLmlzVmVjdG9yMyYmbiYmbi5pc1ZlY3RvcjM/by5jb3B5KG4pOnRoaXNbZV09bjpjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6ICciK2UrIicgaXMgbm90IGEgcHJvcGVydHkgb2YgdGhpcyBtYXRlcmlhbC4iKX19LHRvSlNPTjpmdW5jdGlvbih0KXtjb25zdCBlPXZvaWQgMD09PXR8fCJzdHJpbmciPT10eXBlb2YgdDtlJiYodD17dGV4dHVyZXM6e30saW1hZ2VzOnt9fSk7Y29uc3Qgbj17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6Ik1hdGVyaWFsIixnZW5lcmF0b3I6Ik1hdGVyaWFsLnRvSlNPTiJ9fTtmdW5jdGlvbiBvKHQpe2NvbnN0IGU9W107Zm9yKGNvbnN0IG4gaW4gdCl7Y29uc3Qgbz10W25dO2RlbGV0ZSBvLm1ldGFkYXRhLGUucHVzaChvKX1yZXR1cm4gZX1pZihuLnV1aWQ9dGhpcy51dWlkLG4udHlwZT10aGlzLnR5cGUsIiIhPT10aGlzLm5hbWUmJihuLm5hbWU9dGhpcy5uYW1lKSx0aGlzLmNvbG9yJiZ0aGlzLmNvbG9yLmlzQ29sb3ImJihuLmNvbG9yPXRoaXMuY29sb3IuZ2V0SGV4KCkpLHZvaWQgMCE9PXRoaXMucm91Z2huZXNzJiYobi5yb3VnaG5lc3M9dGhpcy5yb3VnaG5lc3MpLHZvaWQgMCE9PXRoaXMubWV0YWxuZXNzJiYobi5tZXRhbG5lc3M9dGhpcy5tZXRhbG5lc3MpLHRoaXMuc2hlZW4mJnRoaXMuc2hlZW4uaXNDb2xvciYmKG4uc2hlZW49dGhpcy5zaGVlbi5nZXRIZXgoKSksdGhpcy5lbWlzc2l2ZSYmdGhpcy5lbWlzc2l2ZS5pc0NvbG9yJiYobi5lbWlzc2l2ZT10aGlzLmVtaXNzaXZlLmdldEhleCgpKSx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5JiYxIT09dGhpcy5lbWlzc2l2ZUludGVuc2l0eSYmKG4uZW1pc3NpdmVJbnRlbnNpdHk9dGhpcy5lbWlzc2l2ZUludGVuc2l0eSksdGhpcy5zcGVjdWxhciYmdGhpcy5zcGVjdWxhci5pc0NvbG9yJiYobi5zcGVjdWxhcj10aGlzLnNwZWN1bGFyLmdldEhleCgpKSx2b2lkIDAhPT10aGlzLnNoaW5pbmVzcyYmKG4uc2hpbmluZXNzPXRoaXMuc2hpbmluZXNzKSx2b2lkIDAhPT10aGlzLmNsZWFyY29hdCYmKG4uY2xlYXJjb2F0PXRoaXMuY2xlYXJjb2F0KSx2b2lkIDAhPT10aGlzLmNsZWFyY29hdFJvdWdobmVzcyYmKG4uY2xlYXJjb2F0Um91Z2huZXNzPXRoaXMuY2xlYXJjb2F0Um91Z2huZXNzKSx0aGlzLmNsZWFyY29hdE1hcCYmdGhpcy5jbGVhcmNvYXRNYXAuaXNUZXh0dXJlJiYobi5jbGVhcmNvYXRNYXA9dGhpcy5jbGVhcmNvYXRNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuY2xlYXJjb2F0Um91Z2huZXNzTWFwJiZ0aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcC5pc1RleHR1cmUmJihuLmNsZWFyY29hdFJvdWdobmVzc01hcD10aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcC50b0pTT04odCkudXVpZCksdGhpcy5jbGVhcmNvYXROb3JtYWxNYXAmJnRoaXMuY2xlYXJjb2F0Tm9ybWFsTWFwLmlzVGV4dHVyZSYmKG4uY2xlYXJjb2F0Tm9ybWFsTWFwPXRoaXMuY2xlYXJjb2F0Tm9ybWFsTWFwLnRvSlNPTih0KS51dWlkLG4uY2xlYXJjb2F0Tm9ybWFsU2NhbGU9dGhpcy5jbGVhcmNvYXROb3JtYWxTY2FsZS50b0FycmF5KCkpLHRoaXMubWFwJiZ0aGlzLm1hcC5pc1RleHR1cmUmJihuLm1hcD10aGlzLm1hcC50b0pTT04odCkudXVpZCksdGhpcy5tYXRjYXAmJnRoaXMubWF0Y2FwLmlzVGV4dHVyZSYmKG4ubWF0Y2FwPXRoaXMubWF0Y2FwLnRvSlNPTih0KS51dWlkKSx0aGlzLmFscGhhTWFwJiZ0aGlzLmFscGhhTWFwLmlzVGV4dHVyZSYmKG4uYWxwaGFNYXA9dGhpcy5hbHBoYU1hcC50b0pTT04odCkudXVpZCksdGhpcy5saWdodE1hcCYmdGhpcy5saWdodE1hcC5pc1RleHR1cmUmJihuLmxpZ2h0TWFwPXRoaXMubGlnaHRNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuYW9NYXAmJnRoaXMuYW9NYXAuaXNUZXh0dXJlJiYobi5hb01hcD10aGlzLmFvTWFwLnRvSlNPTih0KS51dWlkLG4uYW9NYXBJbnRlbnNpdHk9dGhpcy5hb01hcEludGVuc2l0eSksdGhpcy5idW1wTWFwJiZ0aGlzLmJ1bXBNYXAuaXNUZXh0dXJlJiYobi5idW1wTWFwPXRoaXMuYnVtcE1hcC50b0pTT04odCkudXVpZCxuLmJ1bXBTY2FsZT10aGlzLmJ1bXBTY2FsZSksdGhpcy5ub3JtYWxNYXAmJnRoaXMubm9ybWFsTWFwLmlzVGV4dHVyZSYmKG4ubm9ybWFsTWFwPXRoaXMubm9ybWFsTWFwLnRvSlNPTih0KS51dWlkLG4ubm9ybWFsTWFwVHlwZT10aGlzLm5vcm1hbE1hcFR5cGUsbi5ub3JtYWxTY2FsZT10aGlzLm5vcm1hbFNjYWxlLnRvQXJyYXkoKSksdGhpcy5kaXNwbGFjZW1lbnRNYXAmJnRoaXMuZGlzcGxhY2VtZW50TWFwLmlzVGV4dHVyZSYmKG4uZGlzcGxhY2VtZW50TWFwPXRoaXMuZGlzcGxhY2VtZW50TWFwLnRvSlNPTih0KS51dWlkLG4uZGlzcGxhY2VtZW50U2NhbGU9dGhpcy5kaXNwbGFjZW1lbnRTY2FsZSxuLmRpc3BsYWNlbWVudEJpYXM9dGhpcy5kaXNwbGFjZW1lbnRCaWFzKSx0aGlzLnJvdWdobmVzc01hcCYmdGhpcy5yb3VnaG5lc3NNYXAuaXNUZXh0dXJlJiYobi5yb3VnaG5lc3NNYXA9dGhpcy5yb3VnaG5lc3NNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMubWV0YWxuZXNzTWFwJiZ0aGlzLm1ldGFsbmVzc01hcC5pc1RleHR1cmUmJihuLm1ldGFsbmVzc01hcD10aGlzLm1ldGFsbmVzc01hcC50b0pTT04odCkudXVpZCksdGhpcy5lbWlzc2l2ZU1hcCYmdGhpcy5lbWlzc2l2ZU1hcC5pc1RleHR1cmUmJihuLmVtaXNzaXZlTWFwPXRoaXMuZW1pc3NpdmVNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuc3BlY3VsYXJNYXAmJnRoaXMuc3BlY3VsYXJNYXAuaXNUZXh0dXJlJiYobi5zcGVjdWxhck1hcD10aGlzLnNwZWN1bGFyTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmVudk1hcCYmdGhpcy5lbnZNYXAuaXNUZXh0dXJlJiYobi5lbnZNYXA9dGhpcy5lbnZNYXAudG9KU09OKHQpLnV1aWQsbi5yZWZsZWN0aXZpdHk9dGhpcy5yZWZsZWN0aXZpdHksbi5yZWZyYWN0aW9uUmF0aW89dGhpcy5yZWZyYWN0aW9uUmF0aW8sdm9pZCAwIT09dGhpcy5jb21iaW5lJiYobi5jb21iaW5lPXRoaXMuY29tYmluZSksdm9pZCAwIT09dGhpcy5lbnZNYXBJbnRlbnNpdHkmJihuLmVudk1hcEludGVuc2l0eT10aGlzLmVudk1hcEludGVuc2l0eSkpLHRoaXMuZ3JhZGllbnRNYXAmJnRoaXMuZ3JhZGllbnRNYXAuaXNUZXh0dXJlJiYobi5ncmFkaWVudE1hcD10aGlzLmdyYWRpZW50TWFwLnRvSlNPTih0KS51dWlkKSx2b2lkIDAhPT10aGlzLnNpemUmJihuLnNpemU9dGhpcy5zaXplKSx2b2lkIDAhPT10aGlzLnNpemVBdHRlbnVhdGlvbiYmKG4uc2l6ZUF0dGVudWF0aW9uPXRoaXMuc2l6ZUF0dGVudWF0aW9uKSwxIT09dGhpcy5ibGVuZGluZyYmKG4uYmxlbmRpbmc9dGhpcy5ibGVuZGluZyksITA9PT10aGlzLmZsYXRTaGFkaW5nJiYobi5mbGF0U2hhZGluZz10aGlzLmZsYXRTaGFkaW5nKSwwIT09dGhpcy5zaWRlJiYobi5zaWRlPXRoaXMuc2lkZSksdGhpcy52ZXJ0ZXhDb2xvcnMmJihuLnZlcnRleENvbG9ycz0hMCksdGhpcy5vcGFjaXR5PDEmJihuLm9wYWNpdHk9dGhpcy5vcGFjaXR5KSwhMD09PXRoaXMudHJhbnNwYXJlbnQmJihuLnRyYW5zcGFyZW50PXRoaXMudHJhbnNwYXJlbnQpLG4uZGVwdGhGdW5jPXRoaXMuZGVwdGhGdW5jLG4uZGVwdGhUZXN0PXRoaXMuZGVwdGhUZXN0LG4uZGVwdGhXcml0ZT10aGlzLmRlcHRoV3JpdGUsbi5zdGVuY2lsV3JpdGU9dGhpcy5zdGVuY2lsV3JpdGUsbi5zdGVuY2lsV3JpdGVNYXNrPXRoaXMuc3RlbmNpbFdyaXRlTWFzayxuLnN0ZW5jaWxGdW5jPXRoaXMuc3RlbmNpbEZ1bmMsbi5zdGVuY2lsUmVmPXRoaXMuc3RlbmNpbFJlZixuLnN0ZW5jaWxGdW5jTWFzaz10aGlzLnN0ZW5jaWxGdW5jTWFzayxuLnN0ZW5jaWxGYWlsPXRoaXMuc3RlbmNpbEZhaWwsbi5zdGVuY2lsWkZhaWw9dGhpcy5zdGVuY2lsWkZhaWwsbi5zdGVuY2lsWlBhc3M9dGhpcy5zdGVuY2lsWlBhc3MsdGhpcy5yb3RhdGlvbiYmMCE9PXRoaXMucm90YXRpb24mJihuLnJvdGF0aW9uPXRoaXMucm90YXRpb24pLCEwPT09dGhpcy5wb2x5Z29uT2Zmc2V0JiYobi5wb2x5Z29uT2Zmc2V0PSEwKSwwIT09dGhpcy5wb2x5Z29uT2Zmc2V0RmFjdG9yJiYobi5wb2x5Z29uT2Zmc2V0RmFjdG9yPXRoaXMucG9seWdvbk9mZnNldEZhY3RvciksMCE9PXRoaXMucG9seWdvbk9mZnNldFVuaXRzJiYobi5wb2x5Z29uT2Zmc2V0VW5pdHM9dGhpcy5wb2x5Z29uT2Zmc2V0VW5pdHMpLHRoaXMubGluZXdpZHRoJiYxIT09dGhpcy5saW5ld2lkdGgmJihuLmxpbmV3aWR0aD10aGlzLmxpbmV3aWR0aCksdm9pZCAwIT09dGhpcy5kYXNoU2l6ZSYmKG4uZGFzaFNpemU9dGhpcy5kYXNoU2l6ZSksdm9pZCAwIT09dGhpcy5nYXBTaXplJiYobi5nYXBTaXplPXRoaXMuZ2FwU2l6ZSksdm9pZCAwIT09dGhpcy5zY2FsZSYmKG4uc2NhbGU9dGhpcy5zY2FsZSksITA9PT10aGlzLmRpdGhlcmluZyYmKG4uZGl0aGVyaW5nPSEwKSx0aGlzLmFscGhhVGVzdD4wJiYobi5hbHBoYVRlc3Q9dGhpcy5hbHBoYVRlc3QpLCEwPT09dGhpcy5wcmVtdWx0aXBsaWVkQWxwaGEmJihuLnByZW11bHRpcGxpZWRBbHBoYT10aGlzLnByZW11bHRpcGxpZWRBbHBoYSksITA9PT10aGlzLndpcmVmcmFtZSYmKG4ud2lyZWZyYW1lPXRoaXMud2lyZWZyYW1lKSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD4xJiYobi53aXJlZnJhbWVMaW5ld2lkdGg9dGhpcy53aXJlZnJhbWVMaW5ld2lkdGgpLCJyb3VuZCIhPT10aGlzLndpcmVmcmFtZUxpbmVjYXAmJihuLndpcmVmcmFtZUxpbmVjYXA9dGhpcy53aXJlZnJhbWVMaW5lY2FwKSwicm91bmQiIT09dGhpcy53aXJlZnJhbWVMaW5lam9pbiYmKG4ud2lyZWZyYW1lTGluZWpvaW49dGhpcy53aXJlZnJhbWVMaW5lam9pbiksITA9PT10aGlzLm1vcnBoVGFyZ2V0cyYmKG4ubW9ycGhUYXJnZXRzPSEwKSwhMD09PXRoaXMubW9ycGhOb3JtYWxzJiYobi5tb3JwaE5vcm1hbHM9ITApLCEwPT09dGhpcy5za2lubmluZyYmKG4uc2tpbm5pbmc9ITApLCExPT09dGhpcy52aXNpYmxlJiYobi52aXNpYmxlPSExKSwhMT09PXRoaXMudG9uZU1hcHBlZCYmKG4udG9uZU1hcHBlZD0hMSksInt9IiE9PUpTT04uc3RyaW5naWZ5KHRoaXMudXNlckRhdGEpJiYobi51c2VyRGF0YT10aGlzLnVzZXJEYXRhKSxlKXtjb25zdCBlPW8odC50ZXh0dXJlcyksaT1vKHQuaW1hZ2VzKTtlLmxlbmd0aD4wJiYobi50ZXh0dXJlcz1lKSxpLmxlbmd0aD4wJiYobi5pbWFnZXM9aSl9cmV0dXJuIG59LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfSxjb3B5OmZ1bmN0aW9uKHQpe3RoaXMubmFtZT10Lm5hbWUsdGhpcy5mb2c9dC5mb2csdGhpcy5ibGVuZGluZz10LmJsZW5kaW5nLHRoaXMuc2lkZT10LnNpZGUsdGhpcy5mbGF0U2hhZGluZz10LmZsYXRTaGFkaW5nLHRoaXMudmVydGV4Q29sb3JzPXQudmVydGV4Q29sb3JzLHRoaXMub3BhY2l0eT10Lm9wYWNpdHksdGhpcy50cmFuc3BhcmVudD10LnRyYW5zcGFyZW50LHRoaXMuYmxlbmRTcmM9dC5ibGVuZFNyYyx0aGlzLmJsZW5kRHN0PXQuYmxlbmREc3QsdGhpcy5ibGVuZEVxdWF0aW9uPXQuYmxlbmRFcXVhdGlvbix0aGlzLmJsZW5kU3JjQWxwaGE9dC5ibGVuZFNyY0FscGhhLHRoaXMuYmxlbmREc3RBbHBoYT10LmJsZW5kRHN0QWxwaGEsdGhpcy5ibGVuZEVxdWF0aW9uQWxwaGE9dC5ibGVuZEVxdWF0aW9uQWxwaGEsdGhpcy5kZXB0aEZ1bmM9dC5kZXB0aEZ1bmMsdGhpcy5kZXB0aFRlc3Q9dC5kZXB0aFRlc3QsdGhpcy5kZXB0aFdyaXRlPXQuZGVwdGhXcml0ZSx0aGlzLnN0ZW5jaWxXcml0ZU1hc2s9dC5zdGVuY2lsV3JpdGVNYXNrLHRoaXMuc3RlbmNpbEZ1bmM9dC5zdGVuY2lsRnVuYyx0aGlzLnN0ZW5jaWxSZWY9dC5zdGVuY2lsUmVmLHRoaXMuc3RlbmNpbEZ1bmNNYXNrPXQuc3RlbmNpbEZ1bmNNYXNrLHRoaXMuc3RlbmNpbEZhaWw9dC5zdGVuY2lsRmFpbCx0aGlzLnN0ZW5jaWxaRmFpbD10LnN0ZW5jaWxaRmFpbCx0aGlzLnN0ZW5jaWxaUGFzcz10LnN0ZW5jaWxaUGFzcyx0aGlzLnN0ZW5jaWxXcml0ZT10LnN0ZW5jaWxXcml0ZTtjb25zdCBlPXQuY2xpcHBpbmdQbGFuZXM7bGV0IG49bnVsbDtpZihudWxsIT09ZSl7Y29uc3QgdD1lLmxlbmd0aDtuPW5ldyBBcnJheSh0KTtmb3IobGV0IG89MDtvIT09dDsrK28pbltvXT1lW29dLmNsb25lKCl9cmV0dXJuIHRoaXMuY2xpcHBpbmdQbGFuZXM9bix0aGlzLmNsaXBJbnRlcnNlY3Rpb249dC5jbGlwSW50ZXJzZWN0aW9uLHRoaXMuY2xpcFNoYWRvd3M9dC5jbGlwU2hhZG93cyx0aGlzLnNoYWRvd1NpZGU9dC5zaGFkb3dTaWRlLHRoaXMuY29sb3JXcml0ZT10LmNvbG9yV3JpdGUsdGhpcy5wcmVjaXNpb249dC5wcmVjaXNpb24sdGhpcy5wb2x5Z29uT2Zmc2V0PXQucG9seWdvbk9mZnNldCx0aGlzLnBvbHlnb25PZmZzZXRGYWN0b3I9dC5wb2x5Z29uT2Zmc2V0RmFjdG9yLHRoaXMucG9seWdvbk9mZnNldFVuaXRzPXQucG9seWdvbk9mZnNldFVuaXRzLHRoaXMuZGl0aGVyaW5nPXQuZGl0aGVyaW5nLHRoaXMuYWxwaGFUZXN0PXQuYWxwaGFUZXN0LHRoaXMucHJlbXVsdGlwbGllZEFscGhhPXQucHJlbXVsdGlwbGllZEFscGhhLHRoaXMudmlzaWJsZT10LnZpc2libGUsdGhpcy50b25lTWFwcGVkPXQudG9uZU1hcHBlZCx0aGlzLnVzZXJEYXRhPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodC51c2VyRGF0YSkpLHRoaXN9LGRpc3Bvc2U6ZnVuY3Rpb24oKXt0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc3Bvc2UifSl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHhydC5wcm90b3R5cGUsIm5lZWRzVXBkYXRlIix7c2V0OmZ1bmN0aW9uKHQpeyEwPT09dCYmdGhpcy52ZXJzaW9uKyt9fSksKE9ydC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh4cnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9T3J0LE9ydC5wcm90b3R5cGUuaXNNZXNoQmFzaWNNYXRlcmlhbD0hMCxPcnQucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24odCl7cmV0dXJuIHhydC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubWFwPXQubWFwLHRoaXMubGlnaHRNYXA9dC5saWdodE1hcCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PXQubGlnaHRNYXBJbnRlbnNpdHksdGhpcy5hb01hcD10LmFvTWFwLHRoaXMuYW9NYXBJbnRlbnNpdHk9dC5hb01hcEludGVuc2l0eSx0aGlzLnNwZWN1bGFyTWFwPXQuc3BlY3VsYXJNYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZW52TWFwPXQuZW52TWFwLHRoaXMuY29tYmluZT10LmNvbWJpbmUsdGhpcy5yZWZsZWN0aXZpdHk9dC5yZWZsZWN0aXZpdHksdGhpcy5yZWZyYWN0aW9uUmF0aW89dC5yZWZyYWN0aW9uUmF0aW8sdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpcy5za2lubmluZz10LnNraW5uaW5nLHRoaXMubW9ycGhUYXJnZXRzPXQubW9ycGhUYXJnZXRzLHRoaXN9O2NvbnN0IFBydD1uZXcgJGl0LHdydD1uZXcgVWl0O2Z1bmN0aW9uIGtydCh0LGUsbil7aWYoQXJyYXkuaXNBcnJheSh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IGFycmF5IHNob3VsZCBiZSBhIFR5cGVkIEFycmF5LiIpO3RoaXMubmFtZT0iIix0aGlzLmFycmF5PXQsdGhpcy5pdGVtU2l6ZT1lLHRoaXMuY291bnQ9dm9pZCAwIT09dD90Lmxlbmd0aC9lOjAsdGhpcy5ub3JtYWxpemVkPSEwPT09bix0aGlzLnVzYWdlPXppdCx0aGlzLnVwZGF0ZVJhbmdlPXtvZmZzZXQ6MCxjb3VudDotMX0sdGhpcy52ZXJzaW9uPTB9ZnVuY3Rpb24gU3J0KHQsZSxuKXtrcnQuY2FsbCh0aGlzLG5ldyBJbnQ4QXJyYXkodCksZSxuKX1mdW5jdGlvbiBEcnQodCxlLG4pe2tydC5jYWxsKHRoaXMsbmV3IFVpbnQ4QXJyYXkodCksZSxuKX1mdW5jdGlvbiBFcnQodCxlLG4pe2tydC5jYWxsKHRoaXMsbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHQpLGUsbil9ZnVuY3Rpb24gQXJ0KHQsZSxuKXtrcnQuY2FsbCh0aGlzLG5ldyBJbnQxNkFycmF5KHQpLGUsbil9ZnVuY3Rpb24gUnJ0KHQsZSxuKXtrcnQuY2FsbCh0aGlzLG5ldyBVaW50MTZBcnJheSh0KSxlLG4pfWZ1bmN0aW9uIFRydCh0LGUsbil7a3J0LmNhbGwodGhpcyxuZXcgSW50MzJBcnJheSh0KSxlLG4pfWZ1bmN0aW9uIE5ydCh0LGUsbil7a3J0LmNhbGwodGhpcyxuZXcgVWludDMyQXJyYXkodCksZSxuKX1mdW5jdGlvbiBJcnQodCxlLG4pe2tydC5jYWxsKHRoaXMsbmV3IFVpbnQxNkFycmF5KHQpLGUsbil9ZnVuY3Rpb24genJ0KHQsZSxuKXtrcnQuY2FsbCh0aGlzLG5ldyBGbG9hdDMyQXJyYXkodCksZSxuKX1mdW5jdGlvbiBIcnQodCxlLG4pe2tydC5jYWxsKHRoaXMsbmV3IEZsb2F0NjRBcnJheSh0KSxlLG4pfWZ1bmN0aW9uIEZydCh0KXtpZigwPT09dC5sZW5ndGgpcmV0dXJuLTEvMDtsZXQgZT10WzBdO2ZvcihsZXQgbj0xLG89dC5sZW5ndGg7bjxvOysrbil0W25dPmUmJihlPXRbbl0pO3JldHVybiBlfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShrcnQucHJvdG90eXBlLCJuZWVkc1VwZGF0ZSIse3NldDpmdW5jdGlvbih0KXshMD09PXQmJnRoaXMudmVyc2lvbisrfX0pLE9iamVjdC5hc3NpZ24oa3J0LnByb3RvdHlwZSx7aXNCdWZmZXJBdHRyaWJ1dGU6ITAsb25VcGxvYWRDYWxsYmFjazpmdW5jdGlvbigpe30sc2V0VXNhZ2U6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudXNhZ2U9dCx0aGlzfSxjb3B5OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm5hbWU9dC5uYW1lLHRoaXMuYXJyYXk9bmV3IHQuYXJyYXkuY29uc3RydWN0b3IodC5hcnJheSksdGhpcy5pdGVtU2l6ZT10Lml0ZW1TaXplLHRoaXMuY291bnQ9dC5jb3VudCx0aGlzLm5vcm1hbGl6ZWQ9dC5ub3JtYWxpemVkLHRoaXMudXNhZ2U9dC51c2FnZSx0aGlzfSxjb3B5QXQ6ZnVuY3Rpb24odCxlLG4pe3QqPXRoaXMuaXRlbVNpemUsbio9ZS5pdGVtU2l6ZTtmb3IobGV0IG89MCxpPXRoaXMuaXRlbVNpemU7bzxpO28rKyl0aGlzLmFycmF5W3Qrb109ZS5hcnJheVtuK29dO3JldHVybiB0aGlzfSxjb3B5QXJyYXk6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYXJyYXkuc2V0KHQpLHRoaXN9LGNvcHlDb2xvcnNBcnJheTpmdW5jdGlvbih0KXtjb25zdCBlPXRoaXMuYXJyYXk7bGV0IG49MDtmb3IobGV0IG89MCxpPXQubGVuZ3RoO288aTtvKyspe2xldCBpPXRbb107dm9pZCAwPT09aSYmKGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlDb2xvcnNBcnJheSgpOiBjb2xvciBpcyB1bmRlZmluZWQiLG8pLGk9bmV3IENydCksZVtuKytdPWkucixlW24rK109aS5nLGVbbisrXT1pLmJ9cmV0dXJuIHRoaXN9LGNvcHlWZWN0b3Iyc0FycmF5OmZ1bmN0aW9uKHQpe2NvbnN0IGU9dGhpcy5hcnJheTtsZXQgbj0wO2ZvcihsZXQgbz0wLGk9dC5sZW5ndGg7bzxpO28rKyl7bGV0IGk9dFtvXTt2b2lkIDA9PT1pJiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weVZlY3RvcjJzQXJyYXkoKTogdmVjdG9yIGlzIHVuZGVmaW5lZCIsbyksaT1uZXcgVWl0KSxlW24rK109aS54LGVbbisrXT1pLnl9cmV0dXJuIHRoaXN9LGNvcHlWZWN0b3Izc0FycmF5OmZ1bmN0aW9uKHQpe2NvbnN0IGU9dGhpcy5hcnJheTtsZXQgbj0wO2ZvcihsZXQgbz0wLGk9dC5sZW5ndGg7bzxpO28rKyl7bGV0IGk9dFtvXTt2b2lkIDA9PT1pJiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weVZlY3RvcjNzQXJyYXkoKTogdmVjdG9yIGlzIHVuZGVmaW5lZCIsbyksaT1uZXcgJGl0KSxlW24rK109aS54LGVbbisrXT1pLnksZVtuKytdPWkuen1yZXR1cm4gdGhpc30sY29weVZlY3RvcjRzQXJyYXk6ZnVuY3Rpb24odCl7Y29uc3QgZT10aGlzLmFycmF5O2xldCBuPTA7Zm9yKGxldCBvPTAsaT10Lmxlbmd0aDtvPGk7bysrKXtsZXQgaT10W29dO3ZvaWQgMD09PWkmJihjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZS5jb3B5VmVjdG9yNHNBcnJheSgpOiB2ZWN0b3IgaXMgdW5kZWZpbmVkIixvKSxpPW5ldyBLaXQpLGVbbisrXT1pLngsZVtuKytdPWkueSxlW24rK109aS56LGVbbisrXT1pLnd9cmV0dXJuIHRoaXN9LGFwcGx5TWF0cml4MzpmdW5jdGlvbih0KXtpZigyPT09dGhpcy5pdGVtU2l6ZSlmb3IobGV0IGU9MCxuPXRoaXMuY291bnQ7ZTxuO2UrKyl3cnQuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0aGlzLGUpLHdydC5hcHBseU1hdHJpeDModCksdGhpcy5zZXRYWShlLHdydC54LHdydC55KTtlbHNlIGlmKDM9PT10aGlzLml0ZW1TaXplKWZvcihsZXQgZT0wLG49dGhpcy5jb3VudDtlPG47ZSsrKVBydC5mcm9tQnVmZmVyQXR0cmlidXRlKHRoaXMsZSksUHJ0LmFwcGx5TWF0cml4Myh0KSx0aGlzLnNldFhZWihlLFBydC54LFBydC55LFBydC56KTtyZXR1cm4gdGhpc30sYXBwbHlNYXRyaXg0OmZ1bmN0aW9uKHQpe2ZvcihsZXQgZT0wLG49dGhpcy5jb3VudDtlPG47ZSsrKVBydC54PXRoaXMuZ2V0WChlKSxQcnQueT10aGlzLmdldFkoZSksUHJ0Lno9dGhpcy5nZXRaKGUpLFBydC5hcHBseU1hdHJpeDQodCksdGhpcy5zZXRYWVooZSxQcnQueCxQcnQueSxQcnQueik7cmV0dXJuIHRoaXN9LGFwcGx5Tm9ybWFsTWF0cml4OmZ1bmN0aW9uKHQpe2ZvcihsZXQgZT0wLG49dGhpcy5jb3VudDtlPG47ZSsrKVBydC54PXRoaXMuZ2V0WChlKSxQcnQueT10aGlzLmdldFkoZSksUHJ0Lno9dGhpcy5nZXRaKGUpLFBydC5hcHBseU5vcm1hbE1hdHJpeCh0KSx0aGlzLnNldFhZWihlLFBydC54LFBydC55LFBydC56KTtyZXR1cm4gdGhpc30sdHJhbnNmb3JtRGlyZWN0aW9uOmZ1bmN0aW9uKHQpe2ZvcihsZXQgZT0wLG49dGhpcy5jb3VudDtlPG47ZSsrKVBydC54PXRoaXMuZ2V0WChlKSxQcnQueT10aGlzLmdldFkoZSksUHJ0Lno9dGhpcy5nZXRaKGUpLFBydC50cmFuc2Zvcm1EaXJlY3Rpb24odCksdGhpcy5zZXRYWVooZSxQcnQueCxQcnQueSxQcnQueik7cmV0dXJuIHRoaXN9LHNldDpmdW5jdGlvbih0LGU9MCl7cmV0dXJuIHRoaXMuYXJyYXkuc2V0KHQsZSksdGhpc30sZ2V0WDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemVdfSxzZXRYOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplXT1lLHRoaXN9LGdldFk6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzFdfSxzZXRZOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzFdPWUsdGhpc30sZ2V0WjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemUrMl19LHNldFo6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemUrMl09ZSx0aGlzfSxnZXRXOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSszXX0sc2V0VzpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSszXT1lLHRoaXN9LHNldFhZOmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5hcnJheVswKyh0Kj10aGlzLml0ZW1TaXplKV09ZSx0aGlzLmFycmF5W3QrMV09bix0aGlzfSxzZXRYWVo6ZnVuY3Rpb24odCxlLG4sbyl7cmV0dXJuIHRoaXMuYXJyYXlbMCsodCo9dGhpcy5pdGVtU2l6ZSldPWUsdGhpcy5hcnJheVt0KzFdPW4sdGhpcy5hcnJheVt0KzJdPW8sdGhpc30sc2V0WFlaVzpmdW5jdGlvbih0LGUsbixvLGkpe3JldHVybiB0aGlzLmFycmF5WzArKHQqPXRoaXMuaXRlbVNpemUpXT1lLHRoaXMuYXJyYXlbdCsxXT1uLHRoaXMuYXJyYXlbdCsyXT1vLHRoaXMuYXJyYXlbdCszXT1pLHRoaXN9LG9uVXBsb2FkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9uVXBsb2FkQ2FsbGJhY2s9dCx0aGlzfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLmFycmF5LHRoaXMuaXRlbVNpemUpLmNvcHkodGhpcyl9LHRvSlNPTjpmdW5jdGlvbigpe3JldHVybntpdGVtU2l6ZTp0aGlzLml0ZW1TaXplLHR5cGU6dGhpcy5hcnJheS5jb25zdHJ1Y3Rvci5uYW1lLGFycmF5OkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuYXJyYXkpLG5vcm1hbGl6ZWQ6dGhpcy5ub3JtYWxpemVkfX19KSwoU3J0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGtydC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1TcnQsKERydC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShrcnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9RHJ0LChFcnQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoa3J0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPUVydCwoQXJ0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGtydC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1BcnQsKFJydC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShrcnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9UnJ0LChUcnQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoa3J0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPVRydCwoTnJ0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGtydC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1OcnQsKElydC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShrcnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9SXJ0LElydC5wcm90b3R5cGUuaXNGbG9hdDE2QnVmZmVyQXR0cmlidXRlPSEwLCh6cnQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoa3J0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPXpydCwoSHJ0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGtydC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1IcnQ7Y29uc3QgTHJ0PXtJbnQ4QXJyYXk6SW50OEFycmF5LFVpbnQ4QXJyYXk6VWludDhBcnJheSxVaW50OENsYW1wZWRBcnJheToidW5kZWZpbmVkIiE9dHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5P1VpbnQ4Q2xhbXBlZEFycmF5OlVpbnQ4QXJyYXksSW50MTZBcnJheTpJbnQxNkFycmF5LFVpbnQxNkFycmF5OlVpbnQxNkFycmF5LEludDMyQXJyYXk6SW50MzJBcnJheSxVaW50MzJBcnJheTpVaW50MzJBcnJheSxGbG9hdDMyQXJyYXk6RmxvYXQzMkFycmF5LEZsb2F0NjRBcnJheTpGbG9hdDY0QXJyYXl9O2Z1bmN0aW9uIEJydCh0LGUpe3JldHVybiBuZXcgTHJ0W3RdKGUpfWxldCBWcnQ9MDtjb25zdCBqcnQ9bmV3IGthdCxVcnQ9bmV3IFFhdCxXcnQ9bmV3ICRpdCxHcnQ9bmV3IG5hdCxZcnQ9bmV3IG5hdCxxcnQ9bmV3ICRpdDtmdW5jdGlvbiBacnQoKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTpWcnQrK30pLHRoaXMudXVpZD1qaXQuZ2VuZXJhdGVVVUlEKCksdGhpcy5uYW1lPSIiLHRoaXMudHlwZT0iQnVmZmVyR2VvbWV0cnkiLHRoaXMuaW5kZXg9bnVsbCx0aGlzLmF0dHJpYnV0ZXM9e30sdGhpcy5tb3JwaEF0dHJpYnV0ZXM9e30sdGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZT0hMSx0aGlzLmdyb3Vwcz1bXSx0aGlzLmJvdW5kaW5nQm94PW51bGwsdGhpcy5ib3VuZGluZ1NwaGVyZT1udWxsLHRoaXMuZHJhd1JhbmdlPXtzdGFydDowLGNvdW50OjEvMH0sdGhpcy51c2VyRGF0YT17fX1acnQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShMaXQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6WnJ0LGlzQnVmZmVyR2VvbWV0cnk6ITAsZ2V0SW5kZXg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbmRleH0sc2V0SW5kZXg6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW5kZXg9QXJyYXkuaXNBcnJheSh0KT9uZXcoRnJ0KHQpPjY1NTM1P05ydDpScnQpKHQsMSk6dCx0aGlzfSxnZXRBdHRyaWJ1dGU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYXR0cmlidXRlc1t0XX0sc2V0QXR0cmlidXRlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuYXR0cmlidXRlc1t0XT1lLHRoaXN9LGRlbGV0ZUF0dHJpYnV0ZTpmdW5jdGlvbih0KXtyZXR1cm4gZGVsZXRlIHRoaXMuYXR0cmlidXRlc1t0XSx0aGlzfSxoYXNBdHRyaWJ1dGU6ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuYXR0cmlidXRlc1t0XX0sYWRkR3JvdXA6ZnVuY3Rpb24odCxlLG49MCl7dGhpcy5ncm91cHMucHVzaCh7c3RhcnQ6dCxjb3VudDplLG1hdGVyaWFsSW5kZXg6bn0pfSxjbGVhckdyb3VwczpmdW5jdGlvbigpe3RoaXMuZ3JvdXBzPVtdfSxzZXREcmF3UmFuZ2U6ZnVuY3Rpb24odCxlKXt0aGlzLmRyYXdSYW5nZS5zdGFydD10LHRoaXMuZHJhd1JhbmdlLmNvdW50PWV9LGFwcGx5TWF0cml4NDpmdW5jdGlvbih0KXtjb25zdCBlPXRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbjt2b2lkIDAhPT1lJiYoZS5hcHBseU1hdHJpeDQodCksZS5uZWVkc1VwZGF0ZT0hMCk7Y29uc3Qgbj10aGlzLmF0dHJpYnV0ZXMubm9ybWFsO2lmKHZvaWQgMCE9PW4pe2NvbnN0IGU9KG5ldyBXaXQpLmdldE5vcm1hbE1hdHJpeCh0KTtuLmFwcGx5Tm9ybWFsTWF0cml4KGUpLG4ubmVlZHNVcGRhdGU9ITB9Y29uc3Qgbz10aGlzLmF0dHJpYnV0ZXMudGFuZ2VudDtyZXR1cm4gdm9pZCAwIT09byYmKG8udHJhbnNmb3JtRGlyZWN0aW9uKHQpLG8ubmVlZHNVcGRhdGU9ITApLG51bGwhPT10aGlzLmJvdW5kaW5nQm94JiZ0aGlzLmNvbXB1dGVCb3VuZGluZ0JveCgpLG51bGwhPT10aGlzLmJvdW5kaW5nU3BoZXJlJiZ0aGlzLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLHRoaXN9LHJvdGF0ZVg6ZnVuY3Rpb24odCl7cmV0dXJuIGpydC5tYWtlUm90YXRpb25YKHQpLHRoaXMuYXBwbHlNYXRyaXg0KGpydCksdGhpc30scm90YXRlWTpmdW5jdGlvbih0KXtyZXR1cm4ganJ0Lm1ha2VSb3RhdGlvblkodCksdGhpcy5hcHBseU1hdHJpeDQoanJ0KSx0aGlzfSxyb3RhdGVaOmZ1bmN0aW9uKHQpe3JldHVybiBqcnQubWFrZVJvdGF0aW9uWih0KSx0aGlzLmFwcGx5TWF0cml4NChqcnQpLHRoaXN9LHRyYW5zbGF0ZTpmdW5jdGlvbih0LGUsbil7cmV0dXJuIGpydC5tYWtlVHJhbnNsYXRpb24odCxlLG4pLHRoaXMuYXBwbHlNYXRyaXg0KGpydCksdGhpc30sc2NhbGU6ZnVuY3Rpb24odCxlLG4pe3JldHVybiBqcnQubWFrZVNjYWxlKHQsZSxuKSx0aGlzLmFwcGx5TWF0cml4NChqcnQpLHRoaXN9LGxvb2tBdDpmdW5jdGlvbih0KXtyZXR1cm4gVXJ0Lmxvb2tBdCh0KSxVcnQudXBkYXRlTWF0cml4KCksdGhpcy5hcHBseU1hdHJpeDQoVXJ0Lm1hdHJpeCksdGhpc30sY2VudGVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29tcHV0ZUJvdW5kaW5nQm94KCksdGhpcy5ib3VuZGluZ0JveC5nZXRDZW50ZXIoV3J0KS5uZWdhdGUoKSx0aGlzLnRyYW5zbGF0ZShXcnQueCxXcnQueSxXcnQueiksdGhpc30sc2V0RnJvbVBvaW50czpmdW5jdGlvbih0KXtjb25zdCBlPVtdO2ZvcihsZXQgbj0wLG89dC5sZW5ndGg7bjxvO24rKyl7Y29uc3Qgbz10W25dO2UucHVzaChvLngsby55LG8uenx8MCl9cmV0dXJuIHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHpydChlLDMpKSx0aGlzfSxjb21wdXRlQm91bmRpbmdCb3g6ZnVuY3Rpb24oKXtudWxsPT09dGhpcy5ib3VuZGluZ0JveCYmKHRoaXMuYm91bmRpbmdCb3g9bmV3IG5hdCk7Y29uc3QgdD10aGlzLmF0dHJpYnV0ZXMucG9zaXRpb24sZT10aGlzLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbjtpZih0JiZ0LmlzR0xCdWZmZXJBdHRyaWJ1dGUpcmV0dXJuIGNvbnNvbGUuZXJyb3IoJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ0JveCgpOiBHTEJ1ZmZlckF0dHJpYnV0ZSByZXF1aXJlcyBhIG1hbnVhbCBib3VuZGluZyBib3guIEFsdGVybmF0aXZlbHkgc2V0ICJtZXNoLmZydXN0dW1DdWxsZWQiIHRvICJmYWxzZSIuJyx0aGlzKSx2b2lkIHRoaXMuYm91bmRpbmdCb3guc2V0KG5ldyAkaXQoLTEvMCwtMS8wLC0xLzApLG5ldyAkaXQoMS8wLDEvMCwxLzApKTtpZih2b2lkIDAhPT10KXtpZih0aGlzLmJvdW5kaW5nQm94LnNldEZyb21CdWZmZXJBdHRyaWJ1dGUodCksZSlmb3IobGV0IHQ9MCxuPWUubGVuZ3RoO3Q8bjt0KyspR3J0LnNldEZyb21CdWZmZXJBdHRyaWJ1dGUoZVt0XSksdGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZT8ocXJ0LmFkZFZlY3RvcnModGhpcy5ib3VuZGluZ0JveC5taW4sR3J0Lm1pbiksdGhpcy5ib3VuZGluZ0JveC5leHBhbmRCeVBvaW50KHFydCkscXJ0LmFkZFZlY3RvcnModGhpcy5ib3VuZGluZ0JveC5tYXgsR3J0Lm1heCksdGhpcy5ib3VuZGluZ0JveC5leHBhbmRCeVBvaW50KHFydCkpOih0aGlzLmJvdW5kaW5nQm94LmV4cGFuZEJ5UG9pbnQoR3J0Lm1pbiksdGhpcy5ib3VuZGluZ0JveC5leHBhbmRCeVBvaW50KEdydC5tYXgpKX1lbHNlIHRoaXMuYm91bmRpbmdCb3gubWFrZUVtcHR5KCk7KGlzTmFOKHRoaXMuYm91bmRpbmdCb3gubWluLngpfHxpc05hTih0aGlzLmJvdW5kaW5nQm94Lm1pbi55KXx8aXNOYU4odGhpcy5ib3VuZGluZ0JveC5taW4ueikpJiZjb25zb2xlLmVycm9yKCdUSFJFRS5CdWZmZXJHZW9tZXRyeS5jb21wdXRlQm91bmRpbmdCb3goKTogQ29tcHV0ZWQgbWluL21heCBoYXZlIE5hTiB2YWx1ZXMuIFRoZSAicG9zaXRpb24iIGF0dHJpYnV0ZSBpcyBsaWtlbHkgdG8gaGF2ZSBOYU4gdmFsdWVzLicsdGhpcyl9LGNvbXB1dGVCb3VuZGluZ1NwaGVyZTpmdW5jdGlvbigpe251bGw9PT10aGlzLmJvdW5kaW5nU3BoZXJlJiYodGhpcy5ib3VuZGluZ1NwaGVyZT1uZXcgeWF0KTtjb25zdCB0PXRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbixlPXRoaXMubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKHQmJnQuaXNHTEJ1ZmZlckF0dHJpYnV0ZSlyZXR1cm4gY29uc29sZS5lcnJvcignVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCk6IEdMQnVmZmVyQXR0cmlidXRlIHJlcXVpcmVzIGEgbWFudWFsIGJvdW5kaW5nIHNwaGVyZS4gQWx0ZXJuYXRpdmVseSBzZXQgIm1lc2guZnJ1c3R1bUN1bGxlZCIgdG8gImZhbHNlIi4nLHRoaXMpLHZvaWQgdGhpcy5ib3VuZGluZ1NwaGVyZS5zZXQobmV3ICRpdCwxLzApO2lmKHQpe2NvbnN0IG49dGhpcy5ib3VuZGluZ1NwaGVyZS5jZW50ZXI7aWYoR3J0LnNldEZyb21CdWZmZXJBdHRyaWJ1dGUodCksZSlmb3IobGV0IHQ9MCxuPWUubGVuZ3RoO3Q8bjt0KyspWXJ0LnNldEZyb21CdWZmZXJBdHRyaWJ1dGUoZVt0XSksdGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZT8ocXJ0LmFkZFZlY3RvcnMoR3J0Lm1pbixZcnQubWluKSxHcnQuZXhwYW5kQnlQb2ludChxcnQpLHFydC5hZGRWZWN0b3JzKEdydC5tYXgsWXJ0Lm1heCksR3J0LmV4cGFuZEJ5UG9pbnQocXJ0KSk6KEdydC5leHBhbmRCeVBvaW50KFlydC5taW4pLEdydC5leHBhbmRCeVBvaW50KFlydC5tYXgpKTtHcnQuZ2V0Q2VudGVyKG4pO2xldCBvPTA7Zm9yKGxldCBlPTAsaT10LmNvdW50O2U8aTtlKyspcXJ0LmZyb21CdWZmZXJBdHRyaWJ1dGUodCxlKSxvPU1hdGgubWF4KG8sbi5kaXN0YW5jZVRvU3F1YXJlZChxcnQpKTtpZihlKWZvcihsZXQgaT0wLGE9ZS5sZW5ndGg7aTxhO2krKyl7Y29uc3QgYT1lW2ldLHI9dGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZTtmb3IobGV0IGU9MCxpPWEuY291bnQ7ZTxpO2UrKylxcnQuZnJvbUJ1ZmZlckF0dHJpYnV0ZShhLGUpLHImJihXcnQuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUpLHFydC5hZGQoV3J0KSksbz1NYXRoLm1heChvLG4uZGlzdGFuY2VUb1NxdWFyZWQocXJ0KSl9dGhpcy5ib3VuZGluZ1NwaGVyZS5yYWRpdXM9TWF0aC5zcXJ0KG8pLGlzTmFOKHRoaXMuYm91bmRpbmdTcGhlcmUucmFkaXVzKSYmY29uc29sZS5lcnJvcignVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCk6IENvbXB1dGVkIHJhZGl1cyBpcyBOYU4uIFRoZSAicG9zaXRpb24iIGF0dHJpYnV0ZSBpcyBsaWtlbHkgdG8gaGF2ZSBOYU4gdmFsdWVzLicsdGhpcyl9fSxjb21wdXRlRmFjZU5vcm1hbHM6ZnVuY3Rpb24oKXt9LGNvbXB1dGVUYW5nZW50czpmdW5jdGlvbigpe2NvbnN0IHQ9dGhpcy5pbmRleCxlPXRoaXMuYXR0cmlidXRlcztpZihudWxsPT09dHx8dm9pZCAwPT09ZS5wb3NpdGlvbnx8dm9pZCAwPT09ZS5ub3JtYWx8fHZvaWQgMD09PWUudXYpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5jb21wdXRlVGFuZ2VudHMoKSBmYWlsZWQuIE1pc3NpbmcgcmVxdWlyZWQgYXR0cmlidXRlcyAoaW5kZXgsIHBvc2l0aW9uLCBub3JtYWwgb3IgdXYpIik7Y29uc3Qgbj10LmFycmF5LG89ZS5wb3NpdGlvbi5hcnJheSxpPWUubm9ybWFsLmFycmF5LGE9ZS51di5hcnJheSxyPW8ubGVuZ3RoLzM7dm9pZCAwPT09ZS50YW5nZW50JiZ0aGlzLnNldEF0dHJpYnV0ZSgidGFuZ2VudCIsbmV3IGtydChuZXcgRmxvYXQzMkFycmF5KDQqciksNCkpO2NvbnN0IHM9ZS50YW5nZW50LmFycmF5LGw9W10sYz1bXTtmb3IobGV0IHQ9MDt0PHI7dCsrKWxbdF09bmV3ICRpdCxjW3RdPW5ldyAkaXQ7Y29uc3QgZD1uZXcgJGl0LHA9bmV3ICRpdCxtPW5ldyAkaXQsdT1uZXcgVWl0LGY9bmV3IFVpdCxnPW5ldyBVaXQsaD1uZXcgJGl0LGI9bmV3ICRpdDtmdW5jdGlvbiB5KHQsZSxuKXtkLmZyb21BcnJheShvLDMqdCkscC5mcm9tQXJyYXkobywzKmUpLG0uZnJvbUFycmF5KG8sMypuKSx1LmZyb21BcnJheShhLDIqdCksZi5mcm9tQXJyYXkoYSwyKmUpLGcuZnJvbUFycmF5KGEsMipuKSxwLnN1YihkKSxtLnN1YihkKSxmLnN1Yih1KSxnLnN1Yih1KTtjb25zdCBpPTEvKGYueCpnLnktZy54KmYueSk7aXNGaW5pdGUoaSkmJihoLmNvcHkocCkubXVsdGlwbHlTY2FsYXIoZy55KS5hZGRTY2FsZWRWZWN0b3IobSwtZi55KS5tdWx0aXBseVNjYWxhcihpKSxiLmNvcHkobSkubXVsdGlwbHlTY2FsYXIoZi54KS5hZGRTY2FsZWRWZWN0b3IocCwtZy54KS5tdWx0aXBseVNjYWxhcihpKSxsW3RdLmFkZChoKSxsW2VdLmFkZChoKSxsW25dLmFkZChoKSxjW3RdLmFkZChiKSxjW2VdLmFkZChiKSxjW25dLmFkZChiKSl9bGV0IF89dGhpcy5ncm91cHM7MD09PV8ubGVuZ3RoJiYoXz1be3N0YXJ0OjAsY291bnQ6bi5sZW5ndGh9XSk7Zm9yKGxldCB0PTAsZT1fLmxlbmd0aDt0PGU7Kyt0KXtjb25zdCBlPV9bdF0sbz1lLnN0YXJ0O2ZvcihsZXQgdD1vLGk9bytlLmNvdW50O3Q8aTt0Kz0zKXkoblt0KzBdLG5bdCsxXSxuW3QrMl0pfWNvbnN0IEM9bmV3ICRpdCxNPW5ldyAkaXQsdj1uZXcgJGl0LHg9bmV3ICRpdDtmdW5jdGlvbiBPKHQpe3YuZnJvbUFycmF5KGksMyp0KSx4LmNvcHkodik7Y29uc3QgZT1sW3RdO0MuY29weShlKSxDLnN1Yih2Lm11bHRpcGx5U2NhbGFyKHYuZG90KGUpKSkubm9ybWFsaXplKCksTS5jcm9zc1ZlY3RvcnMoeCxlKTtjb25zdCBuPU0uZG90KGNbdF0pPDA/LTE6MTtzWzQqdF09Qy54LHNbNCp0KzFdPUMueSxzWzQqdCsyXT1DLnosc1s0KnQrM109bn1mb3IobGV0IHQ9MCxlPV8ubGVuZ3RoO3Q8ZTsrK3Qpe2NvbnN0IGU9X1t0XSxvPWUuc3RhcnQ7Zm9yKGxldCB0PW8saT1vK2UuY291bnQ7dDxpO3QrPTMpTyhuW3QrMF0pLE8oblt0KzFdKSxPKG5bdCsyXSl9fSxjb21wdXRlVmVydGV4Tm9ybWFsczpmdW5jdGlvbigpe2NvbnN0IHQ9dGhpcy5pbmRleCxlPXRoaXMuZ2V0QXR0cmlidXRlKCJwb3NpdGlvbiIpO2lmKHZvaWQgMCE9PWUpe2xldCBuPXRoaXMuZ2V0QXR0cmlidXRlKCJub3JtYWwiKTtpZih2b2lkIDA9PT1uKW49bmV3IGtydChuZXcgRmxvYXQzMkFycmF5KDMqZS5jb3VudCksMyksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbik7ZWxzZSBmb3IobGV0IHQ9MCxlPW4uY291bnQ7dDxlO3QrKyluLnNldFhZWih0LDAsMCwwKTtjb25zdCBvPW5ldyAkaXQsaT1uZXcgJGl0LGE9bmV3ICRpdCxyPW5ldyAkaXQscz1uZXcgJGl0LGw9bmV3ICRpdCxjPW5ldyAkaXQsZD1uZXcgJGl0O2lmKHQpZm9yKGxldCBwPTAsbT10LmNvdW50O3A8bTtwKz0zKXtjb25zdCBtPXQuZ2V0WChwKzApLHU9dC5nZXRYKHArMSksZj10LmdldFgocCsyKTtvLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSxtKSxpLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSx1KSxhLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSxmKSxjLnN1YlZlY3RvcnMoYSxpKSxkLnN1YlZlY3RvcnMobyxpKSxjLmNyb3NzKGQpLHIuZnJvbUJ1ZmZlckF0dHJpYnV0ZShuLG0pLHMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShuLHUpLGwuZnJvbUJ1ZmZlckF0dHJpYnV0ZShuLGYpLHIuYWRkKGMpLHMuYWRkKGMpLGwuYWRkKGMpLG4uc2V0WFlaKG0sci54LHIueSxyLnopLG4uc2V0WFlaKHUscy54LHMueSxzLnopLG4uc2V0WFlaKGYsbC54LGwueSxsLnopfWVsc2UgZm9yKGxldCB0PTAscj1lLmNvdW50O3Q8cjt0Kz0zKW8uZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLHQrMCksaS5mcm9tQnVmZmVyQXR0cmlidXRlKGUsdCsxKSxhLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSx0KzIpLGMuc3ViVmVjdG9ycyhhLGkpLGQuc3ViVmVjdG9ycyhvLGkpLGMuY3Jvc3MoZCksbi5zZXRYWVoodCswLGMueCxjLnksYy56KSxuLnNldFhZWih0KzEsYy54LGMueSxjLnopLG4uc2V0WFlaKHQrMixjLngsYy55LGMueik7dGhpcy5ub3JtYWxpemVOb3JtYWxzKCksbi5uZWVkc1VwZGF0ZT0hMH19LG1lcmdlOmZ1bmN0aW9uKHQsZSl7aWYoIXR8fCF0LmlzQnVmZmVyR2VvbWV0cnkpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyR2VvbWV0cnkubWVyZ2UoKTogZ2VvbWV0cnkgbm90IGFuIGluc3RhbmNlIG9mIFRIUkVFLkJ1ZmZlckdlb21ldHJ5LiIsdCk7dm9pZCAwPT09ZSYmKGU9MCxjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5Lm1lcmdlKCk6IE92ZXJ3cml0aW5nIG9yaWdpbmFsIGdlb21ldHJ5LCBzdGFydGluZyBhdCBvZmZzZXQ9MC4gVXNlIEJ1ZmZlckdlb21ldHJ5VXRpbHMubWVyZ2VCdWZmZXJHZW9tZXRyaWVzKCkgZm9yIGxvc3NsZXNzIG1lcmdlLiIpKTtjb25zdCBuPXRoaXMuYXR0cmlidXRlcztmb3IoY29uc3QgbyBpbiBuKXtpZih2b2lkIDA9PT10LmF0dHJpYnV0ZXNbb10pY29udGludWU7Y29uc3QgaT1uW29dLmFycmF5LGE9dC5hdHRyaWJ1dGVzW29dLHI9YS5hcnJheSxzPWEuaXRlbVNpemUqZSxsPU1hdGgubWluKHIubGVuZ3RoLGkubGVuZ3RoLXMpO2ZvcihsZXQgdD0wLGU9czt0PGw7dCsrLGUrKylpW2VdPXJbdF19cmV0dXJuIHRoaXN9LG5vcm1hbGl6ZU5vcm1hbHM6ZnVuY3Rpb24oKXtjb25zdCB0PXRoaXMuYXR0cmlidXRlcy5ub3JtYWw7Zm9yKGxldCBlPTAsbj10LmNvdW50O2U8bjtlKyspcXJ0LmZyb21CdWZmZXJBdHRyaWJ1dGUodCxlKSxxcnQubm9ybWFsaXplKCksdC5zZXRYWVooZSxxcnQueCxxcnQueSxxcnQueil9LHRvTm9uSW5kZXhlZDpmdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXtjb25zdCBuPXQuYXJyYXksbz10Lml0ZW1TaXplLGk9dC5ub3JtYWxpemVkLGE9bmV3IG4uY29uc3RydWN0b3IoZS5sZW5ndGgqbyk7bGV0IHI9MCxzPTA7Zm9yKGxldCB0PTAsaT1lLmxlbmd0aDt0PGk7dCsrKXtyPWVbdF0qbztmb3IobGV0IHQ9MDt0PG87dCsrKWFbcysrXT1uW3IrK119cmV0dXJuIG5ldyBrcnQoYSxvLGkpfWlmKG51bGw9PT10aGlzLmluZGV4KXJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5LnRvTm9uSW5kZXhlZCgpOiBCdWZmZXJHZW9tZXRyeSBpcyBhbHJlYWR5IG5vbi1pbmRleGVkLiIpLHRoaXM7Y29uc3QgZT1uZXcgWnJ0LG49dGhpcy5pbmRleC5hcnJheSxvPXRoaXMuYXR0cmlidXRlcztmb3IoY29uc3QgaSBpbiBvKXtjb25zdCBhPXQob1tpXSxuKTtlLnNldEF0dHJpYnV0ZShpLGEpfWNvbnN0IGk9dGhpcy5tb3JwaEF0dHJpYnV0ZXM7Zm9yKGNvbnN0IG8gaW4gaSl7Y29uc3QgYT1bXSxyPWlbb107Zm9yKGxldCBlPTAsbz1yLmxlbmd0aDtlPG87ZSsrKXtjb25zdCBvPXQocltlXSxuKTthLnB1c2gobyl9ZS5tb3JwaEF0dHJpYnV0ZXNbb109YX1lLm1vcnBoVGFyZ2V0c1JlbGF0aXZlPXRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU7Y29uc3QgYT10aGlzLmdyb3Vwcztmb3IobGV0IHQ9MCxuPWEubGVuZ3RoO3Q8bjt0Kyspe2NvbnN0IG49YVt0XTtlLmFkZEdyb3VwKG4uc3RhcnQsbi5jb3VudCxuLm1hdGVyaWFsSW5kZXgpfXJldHVybiBlfSx0b0pTT046ZnVuY3Rpb24oKXtjb25zdCB0PXttZXRhZGF0YTp7dmVyc2lvbjo0LjUsdHlwZToiQnVmZmVyR2VvbWV0cnkiLGdlbmVyYXRvcjoiQnVmZmVyR2VvbWV0cnkudG9KU09OIn19O2lmKHQudXVpZD10aGlzLnV1aWQsdC50eXBlPXRoaXMudHlwZSwiIiE9PXRoaXMubmFtZSYmKHQubmFtZT10aGlzLm5hbWUpLE9iamVjdC5rZXlzKHRoaXMudXNlckRhdGEpLmxlbmd0aD4wJiYodC51c2VyRGF0YT10aGlzLnVzZXJEYXRhKSx2b2lkIDAhPT10aGlzLnBhcmFtZXRlcnMpe2NvbnN0IGU9dGhpcy5wYXJhbWV0ZXJzO2Zvcihjb25zdCBuIGluIGUpdm9pZCAwIT09ZVtuXSYmKHRbbl09ZVtuXSk7cmV0dXJuIHR9dC5kYXRhPXthdHRyaWJ1dGVzOnt9fTtjb25zdCBlPXRoaXMuaW5kZXg7bnVsbCE9PWUmJih0LmRhdGEuaW5kZXg9e3R5cGU6ZS5hcnJheS5jb25zdHJ1Y3Rvci5uYW1lLGFycmF5OkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGUuYXJyYXkpfSk7Y29uc3Qgbj10aGlzLmF0dHJpYnV0ZXM7Zm9yKGNvbnN0IGUgaW4gbil7Y29uc3Qgbz1uW2VdLGk9by50b0pTT04odC5kYXRhKTsiIiE9PW8ubmFtZSYmKGkubmFtZT1vLm5hbWUpLHQuZGF0YS5hdHRyaWJ1dGVzW2VdPWl9Y29uc3Qgbz17fTtsZXQgaT0hMTtmb3IoY29uc3QgZSBpbiB0aGlzLm1vcnBoQXR0cmlidXRlcyl7Y29uc3Qgbj10aGlzLm1vcnBoQXR0cmlidXRlc1tlXSxhPVtdO2ZvcihsZXQgZT0wLG89bi5sZW5ndGg7ZTxvO2UrKyl7Y29uc3Qgbz1uW2VdLGk9by50b0pTT04odC5kYXRhKTsiIiE9PW8ubmFtZSYmKGkubmFtZT1vLm5hbWUpLGEucHVzaChpKX1hLmxlbmd0aD4wJiYob1tlXT1hLGk9ITApfWkmJih0LmRhdGEubW9ycGhBdHRyaWJ1dGVzPW8sdC5kYXRhLm1vcnBoVGFyZ2V0c1JlbGF0aXZlPXRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmUpO2NvbnN0IGE9dGhpcy5ncm91cHM7YS5sZW5ndGg+MCYmKHQuZGF0YS5ncm91cHM9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShhKSkpO2NvbnN0IHI9dGhpcy5ib3VuZGluZ1NwaGVyZTtyZXR1cm4gbnVsbCE9PXImJih0LmRhdGEuYm91bmRpbmdTcGhlcmU9e2NlbnRlcjpyLmNlbnRlci50b0FycmF5KCkscmFkaXVzOnIucmFkaXVzfSksdH0sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IFpydCkuY29weSh0aGlzKX0sY29weTpmdW5jdGlvbih0KXt0aGlzLmluZGV4PW51bGwsdGhpcy5hdHRyaWJ1dGVzPXt9LHRoaXMubW9ycGhBdHRyaWJ1dGVzPXt9LHRoaXMuZ3JvdXBzPVtdLHRoaXMuYm91bmRpbmdCb3g9bnVsbCx0aGlzLmJvdW5kaW5nU3BoZXJlPW51bGw7Y29uc3QgZT17fTt0aGlzLm5hbWU9dC5uYW1lO2NvbnN0IG49dC5pbmRleDtudWxsIT09biYmdGhpcy5zZXRJbmRleChuLmNsb25lKGUpKTtjb25zdCBvPXQuYXR0cmlidXRlcztmb3IoY29uc3QgdCBpbiBvKXRoaXMuc2V0QXR0cmlidXRlKHQsb1t0XS5jbG9uZShlKSk7Y29uc3QgaT10Lm1vcnBoQXR0cmlidXRlcztmb3IoY29uc3QgdCBpbiBpKXtjb25zdCBuPVtdLG89aVt0XTtmb3IobGV0IHQ9MCxpPW8ubGVuZ3RoO3Q8aTt0Kyspbi5wdXNoKG9bdF0uY2xvbmUoZSkpO3RoaXMubW9ycGhBdHRyaWJ1dGVzW3RdPW59dGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZT10Lm1vcnBoVGFyZ2V0c1JlbGF0aXZlO2NvbnN0IGE9dC5ncm91cHM7Zm9yKGxldCB0PTAsZT1hLmxlbmd0aDt0PGU7dCsrKXtjb25zdCBlPWFbdF07dGhpcy5hZGRHcm91cChlLnN0YXJ0LGUuY291bnQsZS5tYXRlcmlhbEluZGV4KX1jb25zdCByPXQuYm91bmRpbmdCb3g7bnVsbCE9PXImJih0aGlzLmJvdW5kaW5nQm94PXIuY2xvbmUoKSk7Y29uc3Qgcz10LmJvdW5kaW5nU3BoZXJlO3JldHVybiBudWxsIT09cyYmKHRoaXMuYm91bmRpbmdTcGhlcmU9cy5jbG9uZSgpKSx0aGlzLmRyYXdSYW5nZS5zdGFydD10LmRyYXdSYW5nZS5zdGFydCx0aGlzLmRyYXdSYW5nZS5jb3VudD10LmRyYXdSYW5nZS5jb3VudCx0aGlzLnVzZXJEYXRhPXQudXNlckRhdGEsdGhpc30sZGlzcG9zZTpmdW5jdGlvbigpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX19KTtjb25zdCBYcnQ9bmV3IGthdCxLcnQ9bmV3IHdhdCxKcnQ9bmV3IHlhdCxRcnQ9bmV3ICRpdCwkcnQ9bmV3ICRpdCx0c3Q9bmV3ICRpdCxlc3Q9bmV3ICRpdCxuc3Q9bmV3ICRpdCxvc3Q9bmV3ICRpdCxpc3Q9bmV3ICRpdCxhc3Q9bmV3ICRpdCxyc3Q9bmV3ICRpdCxzc3Q9bmV3IFVpdCxsc3Q9bmV3IFVpdCxjc3Q9bmV3IFVpdCxkc3Q9bmV3ICRpdCxwc3Q9bmV3ICRpdDtmdW5jdGlvbiBtc3QodD1uZXcgWnJ0LGU9bmV3IE9ydCl7UWF0LmNhbGwodGhpcyksdGhpcy50eXBlPSJNZXNoIix0aGlzLmdlb21ldHJ5PXQsdGhpcy5tYXRlcmlhbD1lLHRoaXMudXBkYXRlTW9ycGhUYXJnZXRzKCl9ZnVuY3Rpb24gdXN0KHQsZSxuLG8saSxhLHIscyxsLGMsZCxwKXtRcnQuZnJvbUJ1ZmZlckF0dHJpYnV0ZShpLGMpLCRydC5mcm9tQnVmZmVyQXR0cmlidXRlKGksZCksdHN0LmZyb21CdWZmZXJBdHRyaWJ1dGUoaSxwKTtjb25zdCBtPXQubW9ycGhUYXJnZXRJbmZsdWVuY2VzO2lmKGUubW9ycGhUYXJnZXRzJiZhJiZtKXtpc3Quc2V0KDAsMCwwKSxhc3Quc2V0KDAsMCwwKSxyc3Quc2V0KDAsMCwwKTtmb3IobGV0IHQ9MCxlPWEubGVuZ3RoO3Q8ZTt0Kyspe2NvbnN0IGU9bVt0XSxuPWFbdF07MCE9PWUmJihlc3QuZnJvbUJ1ZmZlckF0dHJpYnV0ZShuLGMpLG5zdC5mcm9tQnVmZmVyQXR0cmlidXRlKG4sZCksb3N0LmZyb21CdWZmZXJBdHRyaWJ1dGUobixwKSxyPyhpc3QuYWRkU2NhbGVkVmVjdG9yKGVzdCxlKSxhc3QuYWRkU2NhbGVkVmVjdG9yKG5zdCxlKSxyc3QuYWRkU2NhbGVkVmVjdG9yKG9zdCxlKSk6KGlzdC5hZGRTY2FsZWRWZWN0b3IoZXN0LnN1YihRcnQpLGUpLGFzdC5hZGRTY2FsZWRWZWN0b3IobnN0LnN1YigkcnQpLGUpLHJzdC5hZGRTY2FsZWRWZWN0b3Iob3N0LnN1Yih0c3QpLGUpKSl9UXJ0LmFkZChpc3QpLCRydC5hZGQoYXN0KSx0c3QuYWRkKHJzdCl9dC5pc1NraW5uZWRNZXNoJiYodC5ib25lVHJhbnNmb3JtKGMsUXJ0KSx0LmJvbmVUcmFuc2Zvcm0oZCwkcnQpLHQuYm9uZVRyYW5zZm9ybShwLHRzdCkpO2NvbnN0IHU9KGZ1bmN0aW9uIGYodCxlLG4sbyxpLGEscixzKXtsZXQgbDtpZihsPTE9PT1lLnNpZGU/by5pbnRlcnNlY3RUcmlhbmdsZShyLGEsaSwhMCxzKTpvLmludGVyc2VjdFRyaWFuZ2xlKGksYSxyLDIhPT1lLnNpZGUscyksbnVsbD09PWwpcmV0dXJuIG51bGw7cHN0LmNvcHkocykscHN0LmFwcGx5TWF0cml4NCh0Lm1hdHJpeFdvcmxkKTtjb25zdCBjPW4ucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKHBzdCk7cmV0dXJuIGM8bi5uZWFyfHxjPm4uZmFyP251bGw6e2Rpc3RhbmNlOmMscG9pbnQ6cHN0LmNsb25lKCksb2JqZWN0OnR9fSkodCxlLG4sbyxRcnQsJHJ0LHRzdCxkc3QpO2lmKHUpe3MmJihzc3QuZnJvbUJ1ZmZlckF0dHJpYnV0ZShzLGMpLGxzdC5mcm9tQnVmZmVyQXR0cmlidXRlKHMsZCksY3N0LmZyb21CdWZmZXJBdHRyaWJ1dGUocyxwKSx1LnV2PXVydC5nZXRVVihkc3QsUXJ0LCRydCx0c3Qsc3N0LGxzdCxjc3QsbmV3IFVpdCkpLGwmJihzc3QuZnJvbUJ1ZmZlckF0dHJpYnV0ZShsLGMpLGxzdC5mcm9tQnVmZmVyQXR0cmlidXRlKGwsZCksY3N0LmZyb21CdWZmZXJBdHRyaWJ1dGUobCxwKSx1LnV2Mj11cnQuZ2V0VVYoZHN0LFFydCwkcnQsdHN0LHNzdCxsc3QsY3N0LG5ldyBVaXQpKTtjb25zdCB0PW5ldyBNcnQoYyxkLHApO3VydC5nZXROb3JtYWwoUXJ0LCRydCx0c3QsdC5ub3JtYWwpLHUuZmFjZT10fXJldHVybiB1fW1zdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKFFhdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3Rvcjptc3QsaXNNZXNoOiEwLGNvcHk6ZnVuY3Rpb24odCl7cmV0dXJuIFFhdC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdm9pZCAwIT09dC5tb3JwaFRhcmdldEluZmx1ZW5jZXMmJih0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcz10Lm1vcnBoVGFyZ2V0SW5mbHVlbmNlcy5zbGljZSgpKSx2b2lkIDAhPT10Lm1vcnBoVGFyZ2V0RGljdGlvbmFyeSYmKHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5PU9iamVjdC5hc3NpZ24oe30sdC5tb3JwaFRhcmdldERpY3Rpb25hcnkpKSx0aGlzLm1hdGVyaWFsPXQubWF0ZXJpYWwsdGhpcy5nZW9tZXRyeT10Lmdlb21ldHJ5LHRoaXN9LHVwZGF0ZU1vcnBoVGFyZ2V0czpmdW5jdGlvbigpe2NvbnN0IHQ9dGhpcy5nZW9tZXRyeTtpZih0LmlzQnVmZmVyR2VvbWV0cnkpe2NvbnN0IGU9dC5tb3JwaEF0dHJpYnV0ZXMsbj1PYmplY3Qua2V5cyhlKTtpZihuLmxlbmd0aD4wKXtjb25zdCB0PWVbblswXV07aWYodm9pZCAwIT09dCl7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXM9W10sdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnk9e307Zm9yKGxldCBlPTAsbj10Lmxlbmd0aDtlPG47ZSsrKXtjb25zdCBuPXRbZV0ubmFtZXx8U3RyaW5nKGUpO3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzLnB1c2goMCksdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnlbbl09ZX19fX1lbHNle2NvbnN0IGU9dC5tb3JwaFRhcmdldHM7dm9pZCAwIT09ZSYmZS5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuTWVzaC51cGRhdGVNb3JwaFRhcmdldHMoKSBubyBsb25nZXIgc3VwcG9ydHMgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpfX0scmF5Y2FzdDpmdW5jdGlvbih0LGUpe2NvbnN0IG49dGhpcy5nZW9tZXRyeSxvPXRoaXMubWF0ZXJpYWwsaT10aGlzLm1hdHJpeFdvcmxkO2lmKHZvaWQgMD09PW8pcmV0dXJuO2lmKG51bGw9PT1uLmJvdW5kaW5nU3BoZXJlJiZuLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLEpydC5jb3B5KG4uYm91bmRpbmdTcGhlcmUpLEpydC5hcHBseU1hdHJpeDQoaSksITE9PT10LnJheS5pbnRlcnNlY3RzU3BoZXJlKEpydCkpcmV0dXJuO2lmKFhydC5jb3B5KGkpLmludmVydCgpLEtydC5jb3B5KHQucmF5KS5hcHBseU1hdHJpeDQoWHJ0KSxudWxsIT09bi5ib3VuZGluZ0JveCYmITE9PT1LcnQuaW50ZXJzZWN0c0JveChuLmJvdW5kaW5nQm94KSlyZXR1cm47bGV0IGE7aWYobi5pc0J1ZmZlckdlb21ldHJ5KXtjb25zdCBpPW4uaW5kZXgscj1uLmF0dHJpYnV0ZXMucG9zaXRpb24scz1uLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbixsPW4ubW9ycGhUYXJnZXRzUmVsYXRpdmUsYz1uLmF0dHJpYnV0ZXMudXYsZD1uLmF0dHJpYnV0ZXMudXYyLHA9bi5ncm91cHMsbT1uLmRyYXdSYW5nZTtpZihudWxsIT09aSlpZihBcnJheS5pc0FycmF5KG8pKWZvcihsZXQgbj0wLHU9cC5sZW5ndGg7bjx1O24rKyl7Y29uc3QgdT1wW25dLGY9b1t1Lm1hdGVyaWFsSW5kZXhdO2ZvcihsZXQgbj1NYXRoLm1heCh1LnN0YXJ0LG0uc3RhcnQpLG89TWF0aC5taW4odS5zdGFydCt1LmNvdW50LG0uc3RhcnQrbS5jb3VudCk7bjxvO24rPTMpe2NvbnN0IG89aS5nZXRYKG4pLHA9aS5nZXRYKG4rMSksbT1pLmdldFgobisyKTthPXVzdCh0aGlzLGYsdCxLcnQscixzLGwsYyxkLG8scCxtKSxhJiYoYS5mYWNlSW5kZXg9TWF0aC5mbG9vcihuLzMpLGEuZmFjZS5tYXRlcmlhbEluZGV4PXUubWF0ZXJpYWxJbmRleCxlLnB1c2goYSkpfX1lbHNlIGZvcihsZXQgbj1NYXRoLm1heCgwLG0uc3RhcnQpLHA9TWF0aC5taW4oaS5jb3VudCxtLnN0YXJ0K20uY291bnQpO248cDtuKz0zKXtjb25zdCBwPWkuZ2V0WChuKSxtPWkuZ2V0WChuKzEpLHU9aS5nZXRYKG4rMik7YT11c3QodGhpcyxvLHQsS3J0LHIscyxsLGMsZCxwLG0sdSksYSYmKGEuZmFjZUluZGV4PU1hdGguZmxvb3Iobi8zKSxlLnB1c2goYSkpfWVsc2UgaWYodm9pZCAwIT09cilpZihBcnJheS5pc0FycmF5KG8pKWZvcihsZXQgbj0wLGk9cC5sZW5ndGg7bjxpO24rKyl7Y29uc3QgaT1wW25dLHU9b1tpLm1hdGVyaWFsSW5kZXhdO2ZvcihsZXQgbj1NYXRoLm1heChpLnN0YXJ0LG0uc3RhcnQpLG89TWF0aC5taW4oaS5zdGFydCtpLmNvdW50LG0uc3RhcnQrbS5jb3VudCk7bjxvO24rPTMpYT11c3QodGhpcyx1LHQsS3J0LHIscyxsLGMsZCxuLG4rMSxuKzIpLGEmJihhLmZhY2VJbmRleD1NYXRoLmZsb29yKG4vMyksYS5mYWNlLm1hdGVyaWFsSW5kZXg9aS5tYXRlcmlhbEluZGV4LGUucHVzaChhKSl9ZWxzZSBmb3IobGV0IG49TWF0aC5tYXgoMCxtLnN0YXJ0KSxpPU1hdGgubWluKHIuY291bnQsbS5zdGFydCttLmNvdW50KTtuPGk7bis9MylhPXVzdCh0aGlzLG8sdCxLcnQscixzLGwsYyxkLG4sbisxLG4rMiksYSYmKGEuZmFjZUluZGV4PU1hdGguZmxvb3Iobi8zKSxlLnB1c2goYSkpfWVsc2Ugbi5pc0dlb21ldHJ5JiZjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoLnJheWNhc3QoKSBubyBsb25nZXIgc3VwcG9ydHMgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpfX0pO2NsYXNzIGZzdCBleHRlbmRzIFpydHtjb25zdHJ1Y3Rvcih0PTEsZT0xLG49MSxvPTEsaT0xLGE9MSl7c3VwZXIoKSx0aGlzLnR5cGU9IkJveEdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3dpZHRoOnQsaGVpZ2h0OmUsZGVwdGg6bix3aWR0aFNlZ21lbnRzOm8saGVpZ2h0U2VnbWVudHM6aSxkZXB0aFNlZ21lbnRzOmF9O2NvbnN0IHI9dGhpcztvPU1hdGguZmxvb3IobyksaT1NYXRoLmZsb29yKGkpLGE9TWF0aC5mbG9vcihhKTtjb25zdCBzPVtdLGw9W10sYz1bXSxkPVtdO2xldCBwPTAsbT0wO2Z1bmN0aW9uIHUodCxlLG4sbyxpLGEsdSxmLGcsaCxiKXtjb25zdCB5PWEvZyxfPXUvaCxDPWEvMixNPXUvMix2PWYvMix4PWcrMSxPPWgrMTtsZXQgUD0wLHc9MDtjb25zdCBrPW5ldyAkaXQ7Zm9yKGxldCBhPTA7YTxPO2ErKyl7Y29uc3Qgcj1hKl8tTTtmb3IobGV0IHM9MDtzPHg7cysrKWtbdF09KHMqeS1DKSpvLGtbZV09cippLGtbbl09dixsLnB1c2goay54LGsueSxrLnopLGtbdF09MCxrW2VdPTAsa1tuXT1mPjA/MTotMSxjLnB1c2goay54LGsueSxrLnopLGQucHVzaChzL2cpLGQucHVzaCgxLWEvaCksUCs9MX1mb3IobGV0IHQ9MDt0PGg7dCsrKWZvcihsZXQgZT0wO2U8ZztlKyspe2NvbnN0IG49cCtlK3gqKHQrMSksbz1wKyhlKzEpK3gqKHQrMSksaT1wKyhlKzEpK3gqdDtzLnB1c2gocCtlK3gqdCxuLGkpLHMucHVzaChuLG8saSksdys9Nn1yLmFkZEdyb3VwKG0sdyxiKSxtKz13LHArPVB9dSgieiIsInkiLCJ4IiwtMSwtMSxuLGUsdCxhLGksMCksdSgieiIsInkiLCJ4IiwxLC0xLG4sZSwtdCxhLGksMSksdSgieCIsInoiLCJ5IiwxLDEsdCxuLGUsbyxhLDIpLHUoIngiLCJ6IiwieSIsMSwtMSx0LG4sLWUsbyxhLDMpLHUoIngiLCJ5IiwieiIsMSwtMSx0LGUsbixvLGksNCksdSgieCIsInkiLCJ6IiwtMSwtMSx0LGUsLW4sbyxpLDUpLHRoaXMuc2V0SW5kZXgocyksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgenJ0KGwsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyB6cnQoYywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgenJ0KGQsMikpfX1mdW5jdGlvbiBnc3QodCl7Y29uc3QgZT17fTtmb3IoY29uc3QgbiBpbiB0KXtlW25dPXt9O2Zvcihjb25zdCBvIGluIHRbbl0pe2NvbnN0IGk9dFtuXVtvXTtlW25dW29dPWkmJihpLmlzQ29sb3J8fGkuaXNNYXRyaXgzfHxpLmlzTWF0cml4NHx8aS5pc1ZlY3RvcjJ8fGkuaXNWZWN0b3IzfHxpLmlzVmVjdG9yNHx8aS5pc1RleHR1cmUpP2kuY2xvbmUoKTpBcnJheS5pc0FycmF5KGkpP2kuc2xpY2UoKTppfX1yZXR1cm4gZX1mdW5jdGlvbiBoc3QodCl7Y29uc3QgZT17fTtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKyl7Y29uc3Qgbz1nc3QodFtuXSk7Zm9yKGNvbnN0IHQgaW4gbyllW3RdPW9bdF19cmV0dXJuIGV9Y29uc3QgYnN0PXtjbG9uZTpnc3QsbWVyZ2U6aHN0fTtmdW5jdGlvbiB5c3QodCl7eHJ0LmNhbGwodGhpcyksdGhpcy50eXBlPSJTaGFkZXJNYXRlcmlhbCIsdGhpcy5kZWZpbmVzPXt9LHRoaXMudW5pZm9ybXM9e30sdGhpcy52ZXJ0ZXhTaGFkZXI9InZvaWQgbWFpbigpIHtcblx0Z2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbW9kZWxWaWV3TWF0cml4ICogdmVjNCggcG9zaXRpb24sIDEuMCApO1xufSIsdGhpcy5mcmFnbWVudFNoYWRlcj0idm9pZCBtYWluKCkge1xuXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCAxLjAsIDAuMCwgMC4wLCAxLjAgKTtcbn0iLHRoaXMubGluZXdpZHRoPTEsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLmZvZz0hMSx0aGlzLmxpZ2h0cz0hMSx0aGlzLmNsaXBwaW5nPSExLHRoaXMuc2tpbm5pbmc9ITEsdGhpcy5tb3JwaFRhcmdldHM9ITEsdGhpcy5tb3JwaE5vcm1hbHM9ITEsdGhpcy5leHRlbnNpb25zPXtkZXJpdmF0aXZlczohMSxmcmFnRGVwdGg6ITEsZHJhd0J1ZmZlcnM6ITEsc2hhZGVyVGV4dHVyZUxPRDohMX0sdGhpcy5kZWZhdWx0QXR0cmlidXRlVmFsdWVzPXtjb2xvcjpbMSwxLDFdLHV2OlswLDBdLHV2MjpbMCwwXX0sdGhpcy5pbmRleDBBdHRyaWJ1dGVOYW1lPXZvaWQgMCx0aGlzLnVuaWZvcm1zTmVlZFVwZGF0ZT0hMSx0aGlzLmdsc2xWZXJzaW9uPW51bGwsdm9pZCAwIT09dCYmKHZvaWQgMCE9PXQuYXR0cmlidXRlcyYmY29uc29sZS5lcnJvcigiVEhSRUUuU2hhZGVyTWF0ZXJpYWw6IGF0dHJpYnV0ZXMgc2hvdWxkIG5vdyBiZSBkZWZpbmVkIGluIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIiksdGhpcy5zZXRWYWx1ZXModCkpfWZ1bmN0aW9uIF9zdCgpe1FhdC5jYWxsKHRoaXMpLHRoaXMudHlwZT0iQ2FtZXJhIix0aGlzLm1hdHJpeFdvcmxkSW52ZXJzZT1uZXcga2F0LHRoaXMucHJvamVjdGlvbk1hdHJpeD1uZXcga2F0LHRoaXMucHJvamVjdGlvbk1hdHJpeEludmVyc2U9bmV3IGthdH1mdW5jdGlvbiBDc3QodD01MCxlPTEsbj0uMSxvPTJlMyl7X3N0LmNhbGwodGhpcyksdGhpcy50eXBlPSJQZXJzcGVjdGl2ZUNhbWVyYSIsdGhpcy5mb3Y9dCx0aGlzLnpvb209MSx0aGlzLm5lYXI9bix0aGlzLmZhcj1vLHRoaXMuZm9jdXM9MTAsdGhpcy5hc3BlY3Q9ZSx0aGlzLnZpZXc9bnVsbCx0aGlzLmZpbG1HYXVnZT0zNSx0aGlzLmZpbG1PZmZzZXQ9MCx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX0oeXN0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHhydC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj15c3QseXN0LnByb3RvdHlwZS5pc1NoYWRlck1hdGVyaWFsPSEwLHlzdC5wcm90b3R5cGUuY29weT1mdW5jdGlvbih0KXtyZXR1cm4geHJ0LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLmZyYWdtZW50U2hhZGVyPXQuZnJhZ21lbnRTaGFkZXIsdGhpcy52ZXJ0ZXhTaGFkZXI9dC52ZXJ0ZXhTaGFkZXIsdGhpcy51bmlmb3Jtcz1nc3QodC51bmlmb3JtcyksdGhpcy5kZWZpbmVzPU9iamVjdC5hc3NpZ24oe30sdC5kZWZpbmVzKSx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLmxpZ2h0cz10LmxpZ2h0cyx0aGlzLmNsaXBwaW5nPXQuY2xpcHBpbmcsdGhpcy5za2lubmluZz10LnNraW5uaW5nLHRoaXMubW9ycGhUYXJnZXRzPXQubW9ycGhUYXJnZXRzLHRoaXMubW9ycGhOb3JtYWxzPXQubW9ycGhOb3JtYWxzLHRoaXMuZXh0ZW5zaW9ucz1PYmplY3QuYXNzaWduKHt9LHQuZXh0ZW5zaW9ucyksdGhpcy5nbHNsVmVyc2lvbj10Lmdsc2xWZXJzaW9uLHRoaXN9LHlzdC5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKHQpe2NvbnN0IGU9eHJ0LnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzLHQpO2UuZ2xzbFZlcnNpb249dGhpcy5nbHNsVmVyc2lvbixlLnVuaWZvcm1zPXt9O2Zvcihjb25zdCBuIGluIHRoaXMudW5pZm9ybXMpe2NvbnN0IG89dGhpcy51bmlmb3Jtc1tuXS52YWx1ZTtlLnVuaWZvcm1zW25dPW8mJm8uaXNUZXh0dXJlP3t0eXBlOiJ0Iix2YWx1ZTpvLnRvSlNPTih0KS51dWlkfTpvJiZvLmlzQ29sb3I/e3R5cGU6ImMiLHZhbHVlOm8uZ2V0SGV4KCl9Om8mJm8uaXNWZWN0b3IyP3t0eXBlOiJ2MiIsdmFsdWU6by50b0FycmF5KCl9Om8mJm8uaXNWZWN0b3IzP3t0eXBlOiJ2MyIsdmFsdWU6by50b0FycmF5KCl9Om8mJm8uaXNWZWN0b3I0P3t0eXBlOiJ2NCIsdmFsdWU6by50b0FycmF5KCl9Om8mJm8uaXNNYXRyaXgzP3t0eXBlOiJtMyIsdmFsdWU6by50b0FycmF5KCl9Om8mJm8uaXNNYXRyaXg0P3t0eXBlOiJtNCIsdmFsdWU6by50b0FycmF5KCl9Ont2YWx1ZTpvfX1PYmplY3Qua2V5cyh0aGlzLmRlZmluZXMpLmxlbmd0aD4wJiYoZS5kZWZpbmVzPXRoaXMuZGVmaW5lcyksZS52ZXJ0ZXhTaGFkZXI9dGhpcy52ZXJ0ZXhTaGFkZXIsZS5mcmFnbWVudFNoYWRlcj10aGlzLmZyYWdtZW50U2hhZGVyO2NvbnN0IG49e307Zm9yKGNvbnN0IHQgaW4gdGhpcy5leHRlbnNpb25zKSEwPT09dGhpcy5leHRlbnNpb25zW3RdJiYoblt0XT0hMCk7cmV0dXJuIE9iamVjdC5rZXlzKG4pLmxlbmd0aD4wJiYoZS5leHRlbnNpb25zPW4pLGV9LF9zdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKFFhdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3Rvcjpfc3QsaXNDYW1lcmE6ITAsY29weTpmdW5jdGlvbih0LGUpe3JldHVybiBRYXQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQsZSksdGhpcy5tYXRyaXhXb3JsZEludmVyc2UuY29weSh0Lm1hdHJpeFdvcmxkSW52ZXJzZSksdGhpcy5wcm9qZWN0aW9uTWF0cml4LmNvcHkodC5wcm9qZWN0aW9uTWF0cml4KSx0aGlzLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlLmNvcHkodC5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZSksdGhpc30sZ2V0V29ybGREaXJlY3Rpb246ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKGNvbnNvbGUud2FybigiVEhSRUUuQ2FtZXJhOiAuZ2V0V29ybGREaXJlY3Rpb24oKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIiksdD1uZXcgJGl0KSx0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKTtjb25zdCBlPXRoaXMubWF0cml4V29ybGQuZWxlbWVudHM7cmV0dXJuIHQuc2V0KC1lWzhdLC1lWzldLC1lWzEwXSkubm9ybWFsaXplKCl9LHVwZGF0ZU1hdHJpeFdvcmxkOmZ1bmN0aW9uKHQpe1FhdC5wcm90b3R5cGUudXBkYXRlTWF0cml4V29ybGQuY2FsbCh0aGlzLHQpLHRoaXMubWF0cml4V29ybGRJbnZlcnNlLmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCl9LHVwZGF0ZVdvcmxkTWF0cml4OmZ1bmN0aW9uKHQsZSl7UWF0LnByb3RvdHlwZS51cGRhdGVXb3JsZE1hdHJpeC5jYWxsKHRoaXMsdCxlKSx0aGlzLm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KHRoaXMubWF0cml4V29ybGQpLmludmVydCgpfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX19KSxDc3QucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShfc3QucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6Q3N0LGlzUGVyc3BlY3RpdmVDYW1lcmE6ITAsY29weTpmdW5jdGlvbih0LGUpe3JldHVybiBfc3QucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQsZSksdGhpcy5mb3Y9dC5mb3YsdGhpcy56b29tPXQuem9vbSx0aGlzLm5lYXI9dC5uZWFyLHRoaXMuZmFyPXQuZmFyLHRoaXMuZm9jdXM9dC5mb2N1cyx0aGlzLmFzcGVjdD10LmFzcGVjdCx0aGlzLnZpZXc9bnVsbD09PXQudmlldz9udWxsOk9iamVjdC5hc3NpZ24oe30sdC52aWV3KSx0aGlzLmZpbG1HYXVnZT10LmZpbG1HYXVnZSx0aGlzLmZpbG1PZmZzZXQ9dC5maWxtT2Zmc2V0LHRoaXN9LHNldEZvY2FsTGVuZ3RoOmZ1bmN0aW9uKHQpe2NvbnN0IGU9LjUqdGhpcy5nZXRGaWxtSGVpZ2h0KCkvdDt0aGlzLmZvdj0yKmppdC5SQUQyREVHKk1hdGguYXRhbihlKSx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX0sZ2V0Rm9jYWxMZW5ndGg6ZnVuY3Rpb24oKXtjb25zdCB0PU1hdGgudGFuKC41KmppdC5ERUcyUkFEKnRoaXMuZm92KTtyZXR1cm4uNSp0aGlzLmdldEZpbG1IZWlnaHQoKS90fSxnZXRFZmZlY3RpdmVGT1Y6ZnVuY3Rpb24oKXtyZXR1cm4gMipqaXQuUkFEMkRFRypNYXRoLmF0YW4oTWF0aC50YW4oLjUqaml0LkRFRzJSQUQqdGhpcy5mb3YpL3RoaXMuem9vbSl9LGdldEZpbG1XaWR0aDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbG1HYXVnZSpNYXRoLm1pbih0aGlzLmFzcGVjdCwxKX0sZ2V0RmlsbUhlaWdodDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbG1HYXVnZS9NYXRoLm1heCh0aGlzLmFzcGVjdCwxKX0sc2V0Vmlld09mZnNldDpmdW5jdGlvbih0LGUsbixvLGksYSl7dGhpcy5hc3BlY3Q9dC9lLG51bGw9PT10aGlzLnZpZXcmJih0aGlzLnZpZXc9e2VuYWJsZWQ6ITAsZnVsbFdpZHRoOjEsZnVsbEhlaWdodDoxLG9mZnNldFg6MCxvZmZzZXRZOjAsd2lkdGg6MSxoZWlnaHQ6MX0pLHRoaXMudmlldy5lbmFibGVkPSEwLHRoaXMudmlldy5mdWxsV2lkdGg9dCx0aGlzLnZpZXcuZnVsbEhlaWdodD1lLHRoaXMudmlldy5vZmZzZXRYPW4sdGhpcy52aWV3Lm9mZnNldFk9byx0aGlzLnZpZXcud2lkdGg9aSx0aGlzLnZpZXcuaGVpZ2h0PWEsdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9LGNsZWFyVmlld09mZnNldDpmdW5jdGlvbigpe251bGwhPT10aGlzLnZpZXcmJih0aGlzLnZpZXcuZW5hYmxlZD0hMSksdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9LHVwZGF0ZVByb2plY3Rpb25NYXRyaXg6ZnVuY3Rpb24oKXtjb25zdCB0PXRoaXMubmVhcjtsZXQgZT10Kk1hdGgudGFuKC41KmppdC5ERUcyUkFEKnRoaXMuZm92KS90aGlzLnpvb20sbj0yKmUsbz10aGlzLmFzcGVjdCpuLGk9LS41Km87Y29uc3QgYT10aGlzLnZpZXc7aWYobnVsbCE9PXRoaXMudmlldyYmdGhpcy52aWV3LmVuYWJsZWQpe2NvbnN0IHQ9YS5mdWxsV2lkdGgscj1hLmZ1bGxIZWlnaHQ7aSs9YS5vZmZzZXRYKm8vdCxlLT1hLm9mZnNldFkqbi9yLG8qPWEud2lkdGgvdCxuKj1hLmhlaWdodC9yfWNvbnN0IHI9dGhpcy5maWxtT2Zmc2V0OzAhPT1yJiYoaSs9dCpyL3RoaXMuZ2V0RmlsbVdpZHRoKCkpLHRoaXMucHJvamVjdGlvbk1hdHJpeC5tYWtlUGVyc3BlY3RpdmUoaSxpK28sZSxlLW4sdCx0aGlzLmZhciksdGhpcy5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZS5jb3B5KHRoaXMucHJvamVjdGlvbk1hdHJpeCkuaW52ZXJ0KCl9LHRvSlNPTjpmdW5jdGlvbih0KXtjb25zdCBlPVFhdC5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyx0KTtyZXR1cm4gZS5vYmplY3QuZm92PXRoaXMuZm92LGUub2JqZWN0Lnpvb209dGhpcy56b29tLGUub2JqZWN0Lm5lYXI9dGhpcy5uZWFyLGUub2JqZWN0LmZhcj10aGlzLmZhcixlLm9iamVjdC5mb2N1cz10aGlzLmZvY3VzLGUub2JqZWN0LmFzcGVjdD10aGlzLmFzcGVjdCxudWxsIT09dGhpcy52aWV3JiYoZS5vYmplY3Qudmlldz1PYmplY3QuYXNzaWduKHt9LHRoaXMudmlldykpLGUub2JqZWN0LmZpbG1HYXVnZT10aGlzLmZpbG1HYXVnZSxlLm9iamVjdC5maWxtT2Zmc2V0PXRoaXMuZmlsbU9mZnNldCxlfX0pO2NvbnN0IE1zdD05MDtmdW5jdGlvbiB2c3QodCxlLG4pe2lmKFFhdC5jYWxsKHRoaXMpLHRoaXMudHlwZT0iQ3ViZUNhbWVyYSIsITAhPT1uLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLkN1YmVDYW1lcmE6IFRoZSBjb25zdHJ1Y3RvciBub3cgZXhwZWN0cyBhbiBpbnN0YW5jZSBvZiBXZWJHTEN1YmVSZW5kZXJUYXJnZXQgYXMgdGhpcmQgcGFyYW1ldGVyLiIpO3RoaXMucmVuZGVyVGFyZ2V0PW47Y29uc3Qgbz1uZXcgQ3N0KE1zdCwxLHQsZSk7by5sYXllcnM9dGhpcy5sYXllcnMsby51cC5zZXQoMCwtMSwwKSxvLmxvb2tBdChuZXcgJGl0KDEsMCwwKSksdGhpcy5hZGQobyk7Y29uc3QgaT1uZXcgQ3N0KE1zdCwxLHQsZSk7aS5sYXllcnM9dGhpcy5sYXllcnMsaS51cC5zZXQoMCwtMSwwKSxpLmxvb2tBdChuZXcgJGl0KC0xLDAsMCkpLHRoaXMuYWRkKGkpO2NvbnN0IGE9bmV3IENzdChNc3QsMSx0LGUpO2EubGF5ZXJzPXRoaXMubGF5ZXJzLGEudXAuc2V0KDAsMCwxKSxhLmxvb2tBdChuZXcgJGl0KDAsMSwwKSksdGhpcy5hZGQoYSk7Y29uc3Qgcj1uZXcgQ3N0KE1zdCwxLHQsZSk7ci5sYXllcnM9dGhpcy5sYXllcnMsci51cC5zZXQoMCwwLC0xKSxyLmxvb2tBdChuZXcgJGl0KDAsLTEsMCkpLHRoaXMuYWRkKHIpO2NvbnN0IHM9bmV3IENzdChNc3QsMSx0LGUpO3MubGF5ZXJzPXRoaXMubGF5ZXJzLHMudXAuc2V0KDAsLTEsMCkscy5sb29rQXQobmV3ICRpdCgwLDAsMSkpLHRoaXMuYWRkKHMpO2NvbnN0IGw9bmV3IENzdChNc3QsMSx0LGUpO2wubGF5ZXJzPXRoaXMubGF5ZXJzLGwudXAuc2V0KDAsLTEsMCksbC5sb29rQXQobmV3ICRpdCgwLDAsLTEpKSx0aGlzLmFkZChsKSx0aGlzLnVwZGF0ZT1mdW5jdGlvbih0LGUpe251bGw9PT10aGlzLnBhcmVudCYmdGhpcy51cGRhdGVNYXRyaXhXb3JsZCgpO2NvbnN0IGM9dC54ci5lbmFibGVkLGQ9dC5nZXRSZW5kZXJUYXJnZXQoKTt0LnhyLmVuYWJsZWQ9ITE7Y29uc3QgcD1uLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzO24udGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9ITEsdC5zZXRSZW5kZXJUYXJnZXQobiwwKSx0LnJlbmRlcihlLG8pLHQuc2V0UmVuZGVyVGFyZ2V0KG4sMSksdC5yZW5kZXIoZSxpKSx0LnNldFJlbmRlclRhcmdldChuLDIpLHQucmVuZGVyKGUsYSksdC5zZXRSZW5kZXJUYXJnZXQobiwzKSx0LnJlbmRlcihlLHIpLHQuc2V0UmVuZGVyVGFyZ2V0KG4sNCksdC5yZW5kZXIoZSxzKSxuLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzPXAsdC5zZXRSZW5kZXJUYXJnZXQobiw1KSx0LnJlbmRlcihlLGwpLHQuc2V0UmVuZGVyVGFyZ2V0KGQpLHQueHIuZW5hYmxlZD1jfX1mdW5jdGlvbiB4c3QodCxlLG4sbyxpLGEscixzLGwsYyl7Wml0LmNhbGwodGhpcyx0PXZvaWQgMCE9PXQ/dDpbXSxlPXZvaWQgMCE9PWU/ZTozMDEsbixvLGksYSxyPXZvaWQgMCE9PXI/cjpPaXQscyxsLGMpLHRoaXMuZmxpcFk9ITEsdGhpcy5fbmVlZHNGbGlwRW52TWFwPSEwfSh2c3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoUWF0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPXZzdCwoeHN0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFppdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj14c3QseHN0LnByb3RvdHlwZS5pc0N1YmVUZXh0dXJlPSEwLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh4c3QucHJvdG90eXBlLCJpbWFnZXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbWFnZX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuaW1hZ2U9dH19KTtjbGFzcyBPc3QgZXh0ZW5kcyBKaXR7Y29uc3RydWN0b3IodCxlLG4pe051bWJlci5pc0ludGVnZXIoZSkmJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMQ3ViZVJlbmRlclRhcmdldDogY29uc3RydWN0b3Igc2lnbmF0dXJlIGlzIG5vdyBXZWJHTEN1YmVSZW5kZXJUYXJnZXQoIHNpemUsIG9wdGlvbnMgKSIpLGU9biksc3VwZXIodCx0LGUpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpc1dlYkdMQ3ViZVJlbmRlclRhcmdldCIse3ZhbHVlOiEwfSksdGhpcy50ZXh0dXJlPW5ldyB4c3Qodm9pZCAwLChlPWV8fHt9KS5tYXBwaW5nLGUud3JhcFMsZS53cmFwVCxlLm1hZ0ZpbHRlcixlLm1pbkZpbHRlcixlLmZvcm1hdCxlLnR5cGUsZS5hbmlzb3Ryb3B5LGUuZW5jb2RpbmcpLHRoaXMudGV4dHVyZS5fbmVlZHNGbGlwRW52TWFwPSExfWZyb21FcXVpcmVjdGFuZ3VsYXJUZXh0dXJlKHQsZSl7dGhpcy50ZXh0dXJlLnR5cGU9ZS50eXBlLHRoaXMudGV4dHVyZS5mb3JtYXQ9UGl0LHRoaXMudGV4dHVyZS5lbmNvZGluZz1lLmVuY29kaW5nLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9ZS5nZW5lcmF0ZU1pcG1hcHMsdGhpcy50ZXh0dXJlLm1pbkZpbHRlcj1lLm1pbkZpbHRlcix0aGlzLnRleHR1cmUubWFnRmlsdGVyPWUubWFnRmlsdGVyO2NvbnN0IG49bmV3IGZzdCg1LDUsNSksbz1uZXcgeXN0KHtuYW1lOiJDdWJlbWFwRnJvbUVxdWlyZWN0Iix1bmlmb3Jtczpnc3Qoe3RFcXVpcmVjdDp7dmFsdWU6bnVsbH19KSx2ZXJ0ZXhTaGFkZXI6IlxuXG5cdFx0XHRcdHZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247XG5cblx0XHRcdFx0dmVjMyB0cmFuc2Zvcm1EaXJlY3Rpb24oIGluIHZlYzMgZGlyLCBpbiBtYXQ0IG1hdHJpeCApIHtcblxuXHRcdFx0XHRcdHJldHVybiBub3JtYWxpemUoICggbWF0cml4ICogdmVjNCggZGlyLCAwLjAgKSApLnh5eiApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHR2b2lkIG1haW4oKSB7XG5cblx0XHRcdFx0XHR2V29ybGREaXJlY3Rpb24gPSB0cmFuc2Zvcm1EaXJlY3Rpb24oIHBvc2l0aW9uLCBtb2RlbE1hdHJpeCApO1xuXG5cdFx0XHRcdFx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0XHRcdFx0XHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG5cblx0XHRcdFx0fVxuXHRcdFx0IixmcmFnbWVudFNoYWRlcjoiXG5cblx0XHRcdFx0dW5pZm9ybSBzYW1wbGVyMkQgdEVxdWlyZWN0O1xuXG5cdFx0XHRcdHZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247XG5cblx0XHRcdFx0I2luY2x1ZGUgPGNvbW1vbj5cblxuXHRcdFx0XHR2b2lkIG1haW4oKSB7XG5cblx0XHRcdFx0XHR2ZWMzIGRpcmVjdGlvbiA9IG5vcm1hbGl6ZSggdldvcmxkRGlyZWN0aW9uICk7XG5cblx0XHRcdFx0XHR2ZWMyIHNhbXBsZVVWID0gZXF1aXJlY3RVdiggZGlyZWN0aW9uICk7XG5cblx0XHRcdFx0XHRnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQoIHRFcXVpcmVjdCwgc2FtcGxlVVYgKTtcblxuXHRcdFx0XHR9XG5cdFx0XHQiLHNpZGU6MSxibGVuZGluZzowfSk7by51bmlmb3Jtcy50RXF1aXJlY3QudmFsdWU9ZTtjb25zdCBpPW5ldyBtc3QobixvKSxhPWUubWluRmlsdGVyO3JldHVybiBlLm1pbkZpbHRlcj09PXlpdCYmKGUubWluRmlsdGVyPWJpdCksbmV3IHZzdCgxLDEwLHRoaXMpLnVwZGF0ZSh0LGkpLGUubWluRmlsdGVyPWEsaS5nZW9tZXRyeS5kaXNwb3NlKCksaS5tYXRlcmlhbC5kaXNwb3NlKCksdGhpc31jbGVhcih0LGUsbixvKXtjb25zdCBpPXQuZ2V0UmVuZGVyVGFyZ2V0KCk7Zm9yKGxldCBpPTA7aTw2O2krKyl0LnNldFJlbmRlclRhcmdldCh0aGlzLGkpLHQuY2xlYXIoZSxuLG8pO3Quc2V0UmVuZGVyVGFyZ2V0KGkpfX1mdW5jdGlvbiBQc3QodCxlLG4sbyxpLGEscixzLGwsYyxkLHApe1ppdC5jYWxsKHRoaXMsbnVsbCxhLHIscyxsLGMsbyxpLGQscCksdGhpcy5pbWFnZT17ZGF0YTp0fHxudWxsLHdpZHRoOmV8fDEsaGVpZ2h0Om58fDF9LHRoaXMubWFnRmlsdGVyPXZvaWQgMCE9PWw/bDpoaXQsdGhpcy5taW5GaWx0ZXI9dm9pZCAwIT09Yz9jOmhpdCx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMSx0aGlzLmZsaXBZPSExLHRoaXMudW5wYWNrQWxpZ25tZW50PTEsdGhpcy5uZWVkc1VwZGF0ZT0hMH0oUHN0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFppdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1Qc3QsUHN0LnByb3RvdHlwZS5pc0RhdGFUZXh0dXJlPSEwO2NvbnN0IHdzdD1uZXcgeWF0LGtzdD1uZXcgJGl0O2NsYXNzIFNzdHtjb25zdHJ1Y3Rvcih0LGUsbixvLGksYSl7dGhpcy5wbGFuZXM9W3ZvaWQgMCE9PXQ/dDpuZXcgbnJ0LHZvaWQgMCE9PWU/ZTpuZXcgbnJ0LHZvaWQgMCE9PW4/bjpuZXcgbnJ0LHZvaWQgMCE9PW8/bzpuZXcgbnJ0LHZvaWQgMCE9PWk/aTpuZXcgbnJ0LHZvaWQgMCE9PWE/YTpuZXcgbnJ0XX1zZXQodCxlLG4sbyxpLGEpe2NvbnN0IHI9dGhpcy5wbGFuZXM7cmV0dXJuIHJbMF0uY29weSh0KSxyWzFdLmNvcHkoZSksclsyXS5jb3B5KG4pLHJbM10uY29weShvKSxyWzRdLmNvcHkoaSkscls1XS5jb3B5KGEpLHRoaXN9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9Y29weSh0KXtjb25zdCBlPXRoaXMucGxhbmVzO2ZvcihsZXQgbj0wO248NjtuKyspZVtuXS5jb3B5KHQucGxhbmVzW25dKTtyZXR1cm4gdGhpc31zZXRGcm9tUHJvamVjdGlvbk1hdHJpeCh0KXtjb25zdCBlPXRoaXMucGxhbmVzLG49dC5lbGVtZW50cyxvPW5bMF0saT1uWzFdLGE9blsyXSxyPW5bM10scz1uWzRdLGw9bls1XSxjPW5bNl0sZD1uWzddLHA9bls4XSxtPW5bOV0sdT1uWzEwXSxmPW5bMTFdLGc9blsxMl0saD1uWzEzXSxiPW5bMTRdLHk9blsxNV07cmV0dXJuIGVbMF0uc2V0Q29tcG9uZW50cyhyLW8sZC1zLGYtcCx5LWcpLm5vcm1hbGl6ZSgpLGVbMV0uc2V0Q29tcG9uZW50cyhyK28sZCtzLGYrcCx5K2cpLm5vcm1hbGl6ZSgpLGVbMl0uc2V0Q29tcG9uZW50cyhyK2ksZCtsLGYrbSx5K2gpLm5vcm1hbGl6ZSgpLGVbM10uc2V0Q29tcG9uZW50cyhyLWksZC1sLGYtbSx5LWgpLm5vcm1hbGl6ZSgpLGVbNF0uc2V0Q29tcG9uZW50cyhyLWEsZC1jLGYtdSx5LWIpLm5vcm1hbGl6ZSgpLGVbNV0uc2V0Q29tcG9uZW50cyhyK2EsZCtjLGYrdSx5K2IpLm5vcm1hbGl6ZSgpLHRoaXN9aW50ZXJzZWN0c09iamVjdCh0KXtjb25zdCBlPXQuZ2VvbWV0cnk7cmV0dXJuIG51bGw9PT1lLmJvdW5kaW5nU3BoZXJlJiZlLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLHdzdC5jb3B5KGUuYm91bmRpbmdTcGhlcmUpLmFwcGx5TWF0cml4NCh0Lm1hdHJpeFdvcmxkKSx0aGlzLmludGVyc2VjdHNTcGhlcmUod3N0KX1pbnRlcnNlY3RzU3ByaXRlKHQpe3JldHVybiB3c3QuY2VudGVyLnNldCgwLDAsMCksd3N0LnJhZGl1cz0uNzA3MTA2NzgxMTg2NTQ3Nix3c3QuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGQpLHRoaXMuaW50ZXJzZWN0c1NwaGVyZSh3c3QpfWludGVyc2VjdHNTcGhlcmUodCl7Y29uc3QgZT10aGlzLnBsYW5lcyxuPXQuY2VudGVyLG89LXQucmFkaXVzO2ZvcihsZXQgdD0wO3Q8Njt0KyspaWYoZVt0XS5kaXN0YW5jZVRvUG9pbnQobik8bylyZXR1cm4hMTtyZXR1cm4hMH1pbnRlcnNlY3RzQm94KHQpe2NvbnN0IGU9dGhpcy5wbGFuZXM7Zm9yKGxldCBuPTA7bjw2O24rKyl7Y29uc3Qgbz1lW25dO2lmKGtzdC54PW8ubm9ybWFsLng+MD90Lm1heC54OnQubWluLngsa3N0Lnk9by5ub3JtYWwueT4wP3QubWF4Lnk6dC5taW4ueSxrc3Quej1vLm5vcm1hbC56PjA/dC5tYXguejp0Lm1pbi56LG8uZGlzdGFuY2VUb1BvaW50KGtzdCk8MClyZXR1cm4hMX1yZXR1cm4hMH1jb250YWluc1BvaW50KHQpe2NvbnN0IGU9dGhpcy5wbGFuZXM7Zm9yKGxldCBuPTA7bjw2O24rKylpZihlW25dLmRpc3RhbmNlVG9Qb2ludCh0KTwwKXJldHVybiExO3JldHVybiEwfX1mdW5jdGlvbiBEc3QoKXtsZXQgdD1udWxsLGU9ITEsbj1udWxsLG89bnVsbDtmdW5jdGlvbiBpKGUsYSl7bihlLGEpLG89dC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoaSl9cmV0dXJue3N0YXJ0OmZ1bmN0aW9uKCl7ITAhPT1lJiZudWxsIT09biYmKG89dC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoaSksZT0hMCl9LHN0b3A6ZnVuY3Rpb24oKXt0LmNhbmNlbEFuaW1hdGlvbkZyYW1lKG8pLGU9ITF9LHNldEFuaW1hdGlvbkxvb3A6ZnVuY3Rpb24odCl7bj10fSxzZXRDb250ZXh0OmZ1bmN0aW9uKGUpe3Q9ZX19fWZ1bmN0aW9uIEVzdCh0LGUpe2NvbnN0IG49ZS5pc1dlYkdMMixvPW5ldyBXZWFrTWFwO3JldHVybntnZXQ6ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdC5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlJiYodD10LmRhdGEpLG8uZ2V0KHQpfSxyZW1vdmU6ZnVuY3Rpb24gYShlKXtlLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUmJihlPWUuZGF0YSk7Y29uc3Qgbj1vLmdldChlKTtuJiYodC5kZWxldGVCdWZmZXIobi5idWZmZXIpLG8uZGVsZXRlKGUpKX0sdXBkYXRlOmZ1bmN0aW9uIHIoZSxpKXtpZihlLmlzR0xCdWZmZXJBdHRyaWJ1dGUpe2NvbnN0IHQ9by5nZXQoZSk7cmV0dXJuIHZvaWQoKCF0fHx0LnZlcnNpb248ZS52ZXJzaW9uKSYmby5zZXQoZSx7YnVmZmVyOmUuYnVmZmVyLHR5cGU6ZS50eXBlLGJ5dGVzUGVyRWxlbWVudDplLmVsZW1lbnRTaXplLHZlcnNpb246ZS52ZXJzaW9ufSkpfWUuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSYmKGU9ZS5kYXRhKTtjb25zdCBhPW8uZ2V0KGUpO3ZvaWQgMD09PWE/by5zZXQoZSwoZnVuY3Rpb24gcihlLG8pe2NvbnN0IGk9ZS5hcnJheSxhPWUudXNhZ2Uscj10LmNyZWF0ZUJ1ZmZlcigpO3QuYmluZEJ1ZmZlcihvLHIpLHQuYnVmZmVyRGF0YShvLGksYSksZS5vblVwbG9hZENhbGxiYWNrKCk7bGV0IHM9NTEyNjtyZXR1cm4gaSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheT9zPTUxMjY6aSBpbnN0YW5jZW9mIEZsb2F0NjRBcnJheT9jb25zb2xlLndhcm4oIlRIUkVFLldlYkdMQXR0cmlidXRlczogVW5zdXBwb3J0ZWQgZGF0YSBidWZmZXIgZm9ybWF0OiBGbG9hdDY0QXJyYXkuIik6aSBpbnN0YW5jZW9mIFVpbnQxNkFycmF5P2UuaXNGbG9hdDE2QnVmZmVyQXR0cmlidXRlP24/cz01MTMxOmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xBdHRyaWJ1dGVzOiBVc2FnZSBvZiBGbG9hdDE2QnVmZmVyQXR0cmlidXRlIHJlcXVpcmVzIFdlYkdMMi4iKTpzPTUxMjM6aSBpbnN0YW5jZW9mIEludDE2QXJyYXk/cz01MTIyOmkgaW5zdGFuY2VvZiBVaW50MzJBcnJheT9zPTUxMjU6aSBpbnN0YW5jZW9mIEludDMyQXJyYXk/cz01MTI0OmkgaW5zdGFuY2VvZiBJbnQ4QXJyYXk/cz01MTIwOmkgaW5zdGFuY2VvZiBVaW50OEFycmF5JiYocz01MTIxKSx7YnVmZmVyOnIsdHlwZTpzLGJ5dGVzUGVyRWxlbWVudDppLkJZVEVTX1BFUl9FTEVNRU5ULHZlcnNpb246ZS52ZXJzaW9ufX0pKGUsaSkpOmEudmVyc2lvbjxlLnZlcnNpb24mJigoZnVuY3Rpb24gcyhlLG8saSl7Y29uc3QgYT1vLmFycmF5LHI9by51cGRhdGVSYW5nZTt0LmJpbmRCdWZmZXIoaSxlKSwtMT09PXIuY291bnQ/dC5idWZmZXJTdWJEYXRhKGksMCxhKToobj90LmJ1ZmZlclN1YkRhdGEoaSxyLm9mZnNldCphLkJZVEVTX1BFUl9FTEVNRU5ULGEsci5vZmZzZXQsci5jb3VudCk6dC5idWZmZXJTdWJEYXRhKGksci5vZmZzZXQqYS5CWVRFU19QRVJfRUxFTUVOVCxhLnN1YmFycmF5KHIub2Zmc2V0LHIub2Zmc2V0K3IuY291bnQpKSxyLmNvdW50PS0xKX0pKGEuYnVmZmVyLGUsaSksYS52ZXJzaW9uPWUudmVyc2lvbil9fX1jbGFzcyBBc3QgZXh0ZW5kcyBacnR7Y29uc3RydWN0b3IodD0xLGU9MSxuPTEsbz0xKXtzdXBlcigpLHRoaXMudHlwZT0iUGxhbmVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXt3aWR0aDp0LGhlaWdodDplLHdpZHRoU2VnbWVudHM6bixoZWlnaHRTZWdtZW50czpvfTtjb25zdCBpPXQvMixhPWUvMixyPU1hdGguZmxvb3Iobikscz1NYXRoLmZsb29yKG8pLGw9cisxLGM9cysxLGQ9dC9yLHA9ZS9zLG09W10sdT1bXSxmPVtdLGc9W107Zm9yKGxldCB0PTA7dDxjO3QrKyl7Y29uc3QgZT10KnAtYTtmb3IobGV0IG49MDtuPGw7bisrKXUucHVzaChuKmQtaSwtZSwwKSxmLnB1c2goMCwwLDEpLGcucHVzaChuL3IpLGcucHVzaCgxLXQvcyl9Zm9yKGxldCB0PTA7dDxzO3QrKylmb3IobGV0IGU9MDtlPHI7ZSsrKXtjb25zdCBuPWUrbCoodCsxKSxvPWUrMStsKih0KzEpLGk9ZSsxK2wqdDttLnB1c2goZStsKnQsbixpKSxtLnB1c2gobixvLGkpfXRoaXMuc2V0SW5kZXgobSksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgenJ0KHUsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyB6cnQoZiwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgenJ0KGcsMikpfX1jb25zdCBSc3Q9e2FscGhhbWFwX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0FMUEhBTUFQXG5cdGRpZmZ1c2VDb2xvci5hICo9IHRleHR1cmUyRCggYWxwaGFNYXAsIHZVdiApLmc7XG4jZW5kaWYiLGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfQUxQSEFNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgYWxwaGFNYXA7XG4jZW5kaWYiLGFscGhhdGVzdF9mcmFnbWVudDoiI2lmZGVmIEFMUEhBVEVTVFxuXHRpZiAoIGRpZmZ1c2VDb2xvci5hIDwgQUxQSEFURVNUICkgZGlzY2FyZDtcbiNlbmRpZiIsYW9tYXBfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfQU9NQVBcblx0ZmxvYXQgYW1iaWVudE9jY2x1c2lvbiA9ICggdGV4dHVyZTJEKCBhb01hcCwgdlV2MiApLnIgLSAxLjAgKSAqIGFvTWFwSW50ZW5zaXR5ICsgMS4wO1xuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKj0gYW1iaWVudE9jY2x1c2lvbjtcblx0I2lmIGRlZmluZWQoIFVTRV9FTlZNQVAgKSAmJiBkZWZpbmVkKCBTVEFOREFSRCApXG5cdFx0ZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIgKSApO1xuXHRcdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3BlY3VsYXIgKj0gY29tcHV0ZVNwZWN1bGFyT2NjbHVzaW9uKCBkb3ROViwgYW1iaWVudE9jY2x1c2lvbiwgbWF0ZXJpYWwuc3BlY3VsYXJSb3VnaG5lc3MgKTtcblx0I2VuZGlmXG4jZW5kaWYiLGFvbWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfQU9NQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgYW9NYXA7XG5cdHVuaWZvcm0gZmxvYXQgYW9NYXBJbnRlbnNpdHk7XG4jZW5kaWYiLGJlZ2luX3ZlcnRleDoidmVjMyB0cmFuc2Zvcm1lZCA9IHZlYzMoIHBvc2l0aW9uICk7IixiZWdpbm5vcm1hbF92ZXJ0ZXg6InZlYzMgb2JqZWN0Tm9ybWFsID0gdmVjMyggbm9ybWFsICk7XG4jaWZkZWYgVVNFX1RBTkdFTlRcblx0dmVjMyBvYmplY3RUYW5nZW50ID0gdmVjMyggdGFuZ2VudC54eXogKTtcbiNlbmRpZiIsYnNkZnM6InZlYzIgaW50ZWdyYXRlU3BlY3VsYXJCUkRGKCBjb25zdCBpbiBmbG9hdCBkb3ROViwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkge1xuXHRjb25zdCB2ZWM0IGMwID0gdmVjNCggLSAxLCAtIDAuMDI3NSwgLSAwLjU3MiwgMC4wMjIgKTtcblx0Y29uc3QgdmVjNCBjMSA9IHZlYzQoIDEsIDAuMDQyNSwgMS4wNCwgLSAwLjA0ICk7XG5cdHZlYzQgciA9IHJvdWdobmVzcyAqIGMwICsgYzE7XG5cdGZsb2F0IGEwMDQgPSBtaW4oIHIueCAqIHIueCwgZXhwMiggLSA5LjI4ICogZG90TlYgKSApICogci54ICsgci55O1xuXHRyZXR1cm4gdmVjMiggLTEuMDQsIDEuMDQgKSAqIGEwMDQgKyByLnp3O1xufVxuZmxvYXQgcHVuY3R1YWxMaWdodEludGVuc2l0eVRvSXJyYWRpYW5jZUZhY3RvciggY29uc3QgaW4gZmxvYXQgbGlnaHREaXN0YW5jZSwgY29uc3QgaW4gZmxvYXQgY3V0b2ZmRGlzdGFuY2UsIGNvbnN0IGluIGZsb2F0IGRlY2F5RXhwb25lbnQgKSB7XG4jaWYgZGVmaW5lZCAoIFBIWVNJQ0FMTFlfQ09SUkVDVF9MSUdIVFMgKVxuXHRmbG9hdCBkaXN0YW5jZUZhbGxvZmYgPSAxLjAgLyBtYXgoIHBvdyggbGlnaHREaXN0YW5jZSwgZGVjYXlFeHBvbmVudCApLCAwLjAxICk7XG5cdGlmKCBjdXRvZmZEaXN0YW5jZSA+IDAuMCApIHtcblx0XHRkaXN0YW5jZUZhbGxvZmYgKj0gcG93Miggc2F0dXJhdGUoIDEuMCAtIHBvdzQoIGxpZ2h0RGlzdGFuY2UgLyBjdXRvZmZEaXN0YW5jZSApICkgKTtcblx0fVxuXHRyZXR1cm4gZGlzdGFuY2VGYWxsb2ZmO1xuI2Vsc2Vcblx0aWYoIGN1dG9mZkRpc3RhbmNlID4gMC4wICYmIGRlY2F5RXhwb25lbnQgPiAwLjAgKSB7XG5cdFx0cmV0dXJuIHBvdyggc2F0dXJhdGUoIC1saWdodERpc3RhbmNlIC8gY3V0b2ZmRGlzdGFuY2UgKyAxLjAgKSwgZGVjYXlFeHBvbmVudCApO1xuXHR9XG5cdHJldHVybiAxLjA7XG4jZW5kaWZcbn1cbnZlYzMgQlJERl9EaWZmdXNlX0xhbWJlcnQoIGNvbnN0IGluIHZlYzMgZGlmZnVzZUNvbG9yICkge1xuXHRyZXR1cm4gUkVDSVBST0NBTF9QSSAqIGRpZmZ1c2VDb2xvcjtcbn1cbnZlYzMgRl9TY2hsaWNrKCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IGRvdExIICkge1xuXHRmbG9hdCBmcmVzbmVsID0gZXhwMiggKCAtNS41NTQ3MyAqIGRvdExIIC0gNi45ODMxNiApICogZG90TEggKTtcblx0cmV0dXJuICggMS4wIC0gc3BlY3VsYXJDb2xvciApICogZnJlc25lbCArIHNwZWN1bGFyQ29sb3I7XG59XG52ZWMzIEZfU2NobGlja19Sb3VnaG5lc3NEZXBlbmRlbnQoIGNvbnN0IGluIHZlYzMgRjAsIGNvbnN0IGluIGZsb2F0IGRvdE5WLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7XG5cdGZsb2F0IGZyZXNuZWwgPSBleHAyKCAoIC01LjU1NDczICogZG90TlYgLSA2Ljk4MzE2ICkgKiBkb3ROViApO1xuXHR2ZWMzIEZyID0gbWF4KCB2ZWMzKCAxLjAgLSByb3VnaG5lc3MgKSwgRjAgKSAtIEYwO1xuXHRyZXR1cm4gRnIgKiBmcmVzbmVsICsgRjA7XG59XG5mbG9hdCBHX0dHWF9TbWl0aCggY29uc3QgaW4gZmxvYXQgYWxwaGEsIGNvbnN0IGluIGZsb2F0IGRvdE5MLCBjb25zdCBpbiBmbG9hdCBkb3ROViApIHtcblx0ZmxvYXQgYTIgPSBwb3cyKCBhbHBoYSApO1xuXHRmbG9hdCBnbCA9IGRvdE5MICsgc3FydCggYTIgKyAoIDEuMCAtIGEyICkgKiBwb3cyKCBkb3ROTCApICk7XG5cdGZsb2F0IGd2ID0gZG90TlYgKyBzcXJ0KCBhMiArICggMS4wIC0gYTIgKSAqIHBvdzIoIGRvdE5WICkgKTtcblx0cmV0dXJuIDEuMCAvICggZ2wgKiBndiApO1xufVxuZmxvYXQgR19HR1hfU21pdGhDb3JyZWxhdGVkKCBjb25zdCBpbiBmbG9hdCBhbHBoYSwgY29uc3QgaW4gZmxvYXQgZG90TkwsIGNvbnN0IGluIGZsb2F0IGRvdE5WICkge1xuXHRmbG9hdCBhMiA9IHBvdzIoIGFscGhhICk7XG5cdGZsb2F0IGd2ID0gZG90TkwgKiBzcXJ0KCBhMiArICggMS4wIC0gYTIgKSAqIHBvdzIoIGRvdE5WICkgKTtcblx0ZmxvYXQgZ2wgPSBkb3ROViAqIHNxcnQoIGEyICsgKCAxLjAgLSBhMiApICogcG93MiggZG90TkwgKSApO1xuXHRyZXR1cm4gMC41IC8gbWF4KCBndiArIGdsLCBFUFNJTE9OICk7XG59XG5mbG9hdCBEX0dHWCggY29uc3QgaW4gZmxvYXQgYWxwaGEsIGNvbnN0IGluIGZsb2F0IGRvdE5IICkge1xuXHRmbG9hdCBhMiA9IHBvdzIoIGFscGhhICk7XG5cdGZsb2F0IGRlbm9tID0gcG93MiggZG90TkggKSAqICggYTIgLSAxLjAgKSArIDEuMDtcblx0cmV0dXJuIFJFQ0lQUk9DQUxfUEkgKiBhMiAvIHBvdzIoIGRlbm9tICk7XG59XG52ZWMzIEJSREZfU3BlY3VsYXJfR0dYKCBjb25zdCBpbiBJbmNpZGVudExpZ2h0IGluY2lkZW50TGlnaHQsIGNvbnN0IGluIHZlYzMgdmlld0RpciwgY29uc3QgaW4gdmVjMyBub3JtYWwsIGNvbnN0IGluIHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkge1xuXHRmbG9hdCBhbHBoYSA9IHBvdzIoIHJvdWdobmVzcyApO1xuXHR2ZWMzIGhhbGZEaXIgPSBub3JtYWxpemUoIGluY2lkZW50TGlnaHQuZGlyZWN0aW9uICsgdmlld0RpciApO1xuXHRmbG9hdCBkb3ROTCA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgaW5jaWRlbnRMaWdodC5kaXJlY3Rpb24gKSApO1xuXHRmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgdmlld0RpciApICk7XG5cdGZsb2F0IGRvdE5IID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBoYWxmRGlyICkgKTtcblx0ZmxvYXQgZG90TEggPSBzYXR1cmF0ZSggZG90KCBpbmNpZGVudExpZ2h0LmRpcmVjdGlvbiwgaGFsZkRpciApICk7XG5cdHZlYzMgRiA9IEZfU2NobGljayggc3BlY3VsYXJDb2xvciwgZG90TEggKTtcblx0ZmxvYXQgRyA9IEdfR0dYX1NtaXRoQ29ycmVsYXRlZCggYWxwaGEsIGRvdE5MLCBkb3ROViApO1xuXHRmbG9hdCBEID0gRF9HR1goIGFscGhhLCBkb3ROSCApO1xuXHRyZXR1cm4gRiAqICggRyAqIEQgKTtcbn1cbnZlYzIgTFRDX1V2KCBjb25zdCBpbiB2ZWMzIE4sIGNvbnN0IGluIHZlYzMgViwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkge1xuXHRjb25zdCBmbG9hdCBMVVRfU0laRSA9IDY0LjA7XG5cdGNvbnN0IGZsb2F0IExVVF9TQ0FMRSA9ICggTFVUX1NJWkUgLSAxLjAgKSAvIExVVF9TSVpFO1xuXHRjb25zdCBmbG9hdCBMVVRfQklBUyA9IDAuNSAvIExVVF9TSVpFO1xuXHRmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIE4sIFYgKSApO1xuXHR2ZWMyIHV2ID0gdmVjMiggcm91Z2huZXNzLCBzcXJ0KCAxLjAgLSBkb3ROViApICk7XG5cdHV2ID0gdXYgKiBMVVRfU0NBTEUgKyBMVVRfQklBUztcblx0cmV0dXJuIHV2O1xufVxuZmxvYXQgTFRDX0NsaXBwZWRTcGhlcmVGb3JtRmFjdG9yKCBjb25zdCBpbiB2ZWMzIGYgKSB7XG5cdGZsb2F0IGwgPSBsZW5ndGgoIGYgKTtcblx0cmV0dXJuIG1heCggKCBsICogbCArIGYueiApIC8gKCBsICsgMS4wICksIDAuMCApO1xufVxudmVjMyBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvbnN0IGluIHZlYzMgdjEsIGNvbnN0IGluIHZlYzMgdjIgKSB7XG5cdGZsb2F0IHggPSBkb3QoIHYxLCB2MiApO1xuXHRmbG9hdCB5ID0gYWJzKCB4ICk7XG5cdGZsb2F0IGEgPSAwLjg1NDM5ODUgKyAoIDAuNDk2NTE1NSArIDAuMDE0NTIwNiAqIHkgKSAqIHk7XG5cdGZsb2F0IGIgPSAzLjQxNzU5NDAgKyAoIDQuMTYxNjcyNCArIHkgKSAqIHk7XG5cdGZsb2F0IHYgPSBhIC8gYjtcblx0ZmxvYXQgdGhldGFfc2ludGhldGEgPSAoIHggPiAwLjAgKSA/IHYgOiAwLjUgKiBpbnZlcnNlc3FydCggbWF4KCAxLjAgLSB4ICogeCwgMWUtNyApICkgLSB2O1xuXHRyZXR1cm4gY3Jvc3MoIHYxLCB2MiApICogdGhldGFfc2ludGhldGE7XG59XG52ZWMzIExUQ19FdmFsdWF0ZSggY29uc3QgaW4gdmVjMyBOLCBjb25zdCBpbiB2ZWMzIFYsIGNvbnN0IGluIHZlYzMgUCwgY29uc3QgaW4gbWF0MyBtSW52LCBjb25zdCBpbiB2ZWMzIHJlY3RDb29yZHNbIDQgXSApIHtcblx0dmVjMyB2MSA9IHJlY3RDb29yZHNbIDEgXSAtIHJlY3RDb29yZHNbIDAgXTtcblx0dmVjMyB2MiA9IHJlY3RDb29yZHNbIDMgXSAtIHJlY3RDb29yZHNbIDAgXTtcblx0dmVjMyBsaWdodE5vcm1hbCA9IGNyb3NzKCB2MSwgdjIgKTtcblx0aWYoIGRvdCggbGlnaHROb3JtYWwsIFAgLSByZWN0Q29vcmRzWyAwIF0gKSA8IDAuMCApIHJldHVybiB2ZWMzKCAwLjAgKTtcblx0dmVjMyBUMSwgVDI7XG5cdFQxID0gbm9ybWFsaXplKCBWIC0gTiAqIGRvdCggViwgTiApICk7XG5cdFQyID0gLSBjcm9zcyggTiwgVDEgKTtcblx0bWF0MyBtYXQgPSBtSW52ICogdHJhbnNwb3NlTWF0MyggbWF0MyggVDEsIFQyLCBOICkgKTtcblx0dmVjMyBjb29yZHNbIDQgXTtcblx0Y29vcmRzWyAwIF0gPSBtYXQgKiAoIHJlY3RDb29yZHNbIDAgXSAtIFAgKTtcblx0Y29vcmRzWyAxIF0gPSBtYXQgKiAoIHJlY3RDb29yZHNbIDEgXSAtIFAgKTtcblx0Y29vcmRzWyAyIF0gPSBtYXQgKiAoIHJlY3RDb29yZHNbIDIgXSAtIFAgKTtcblx0Y29vcmRzWyAzIF0gPSBtYXQgKiAoIHJlY3RDb29yZHNbIDMgXSAtIFAgKTtcblx0Y29vcmRzWyAwIF0gPSBub3JtYWxpemUoIGNvb3Jkc1sgMCBdICk7XG5cdGNvb3Jkc1sgMSBdID0gbm9ybWFsaXplKCBjb29yZHNbIDEgXSApO1xuXHRjb29yZHNbIDIgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAyIF0gKTtcblx0Y29vcmRzWyAzIF0gPSBub3JtYWxpemUoIGNvb3Jkc1sgMyBdICk7XG5cdHZlYzMgdmVjdG9yRm9ybUZhY3RvciA9IHZlYzMoIDAuMCApO1xuXHR2ZWN0b3JGb3JtRmFjdG9yICs9IExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29vcmRzWyAwIF0sIGNvb3Jkc1sgMSBdICk7XG5cdHZlY3RvckZvcm1GYWN0b3IgKz0gTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb29yZHNbIDEgXSwgY29vcmRzWyAyIF0gKTtcblx0dmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMiBdLCBjb29yZHNbIDMgXSApO1xuXHR2ZWN0b3JGb3JtRmFjdG9yICs9IExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29vcmRzWyAzIF0sIGNvb3Jkc1sgMCBdICk7XG5cdGZsb2F0IHJlc3VsdCA9IExUQ19DbGlwcGVkU3BoZXJlRm9ybUZhY3RvciggdmVjdG9yRm9ybUZhY3RvciApO1xuXHRyZXR1cm4gdmVjMyggcmVzdWx0ICk7XG59XG52ZWMzIEJSREZfU3BlY3VsYXJfR0dYX0Vudmlyb25tZW50KCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHtcblx0ZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIHZpZXdEaXIgKSApO1xuXHR2ZWMyIGJyZGYgPSBpbnRlZ3JhdGVTcGVjdWxhckJSREYoIGRvdE5WLCByb3VnaG5lc3MgKTtcblx0cmV0dXJuIHNwZWN1bGFyQ29sb3IgKiBicmRmLnggKyBicmRmLnk7XG59XG52b2lkIEJSREZfU3BlY3VsYXJfTXVsdGlzY2F0dGVyaW5nX0Vudmlyb25tZW50KCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcywgaW5vdXQgdmVjMyBzaW5nbGVTY2F0dGVyLCBpbm91dCB2ZWMzIG11bHRpU2NhdHRlciApIHtcblx0ZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIgKSApO1xuXHR2ZWMzIEYgPSBGX1NjaGxpY2tfUm91Z2huZXNzRGVwZW5kZW50KCBzcGVjdWxhckNvbG9yLCBkb3ROViwgcm91Z2huZXNzICk7XG5cdHZlYzIgYnJkZiA9IGludGVncmF0ZVNwZWN1bGFyQlJERiggZG90TlYsIHJvdWdobmVzcyApO1xuXHR2ZWMzIEZzc0VzcyA9IEYgKiBicmRmLnggKyBicmRmLnk7XG5cdGZsb2F0IEVzcyA9IGJyZGYueCArIGJyZGYueTtcblx0ZmxvYXQgRW1zID0gMS4wIC0gRXNzO1xuXHR2ZWMzIEZhdmcgPSBzcGVjdWxhckNvbG9yICsgKCAxLjAgLSBzcGVjdWxhckNvbG9yICkgKiAwLjA0NzYxOTtcdHZlYzMgRm1zID0gRnNzRXNzICogRmF2ZyAvICggMS4wIC0gRW1zICogRmF2ZyApO1xuXHRzaW5nbGVTY2F0dGVyICs9IEZzc0Vzcztcblx0bXVsdGlTY2F0dGVyICs9IEZtcyAqIEVtcztcbn1cbmZsb2F0IEdfQmxpbm5QaG9uZ19JbXBsaWNpdCggKSB7XG5cdHJldHVybiAwLjI1O1xufVxuZmxvYXQgRF9CbGlublBob25nKCBjb25zdCBpbiBmbG9hdCBzaGluaW5lc3MsIGNvbnN0IGluIGZsb2F0IGRvdE5IICkge1xuXHRyZXR1cm4gUkVDSVBST0NBTF9QSSAqICggc2hpbmluZXNzICogMC41ICsgMS4wICkgKiBwb3coIGRvdE5ILCBzaGluaW5lc3MgKTtcbn1cbnZlYzMgQlJERl9TcGVjdWxhcl9CbGlublBob25nKCBjb25zdCBpbiBJbmNpZGVudExpZ2h0IGluY2lkZW50TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxvYXQgc2hpbmluZXNzICkge1xuXHR2ZWMzIGhhbGZEaXIgPSBub3JtYWxpemUoIGluY2lkZW50TGlnaHQuZGlyZWN0aW9uICsgZ2VvbWV0cnkudmlld0RpciApO1xuXHRmbG9hdCBkb3ROSCA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgaGFsZkRpciApICk7XG5cdGZsb2F0IGRvdExIID0gc2F0dXJhdGUoIGRvdCggaW5jaWRlbnRMaWdodC5kaXJlY3Rpb24sIGhhbGZEaXIgKSApO1xuXHR2ZWMzIEYgPSBGX1NjaGxpY2soIHNwZWN1bGFyQ29sb3IsIGRvdExIICk7XG5cdGZsb2F0IEcgPSBHX0JsaW5uUGhvbmdfSW1wbGljaXQoICk7XG5cdGZsb2F0IEQgPSBEX0JsaW5uUGhvbmcoIHNoaW5pbmVzcywgZG90TkggKTtcblx0cmV0dXJuIEYgKiAoIEcgKiBEICk7XG59XG5mbG9hdCBHR1hSb3VnaG5lc3NUb0JsaW5uRXhwb25lbnQoIGNvbnN0IGluIGZsb2F0IGdneFJvdWdobmVzcyApIHtcblx0cmV0dXJuICggMi4wIC8gcG93MiggZ2d4Um91Z2huZXNzICsgMC4wMDAxICkgLSAyLjAgKTtcbn1cbmZsb2F0IEJsaW5uRXhwb25lbnRUb0dHWFJvdWdobmVzcyggY29uc3QgaW4gZmxvYXQgYmxpbm5FeHBvbmVudCApIHtcblx0cmV0dXJuIHNxcnQoIDIuMCAvICggYmxpbm5FeHBvbmVudCArIDIuMCApICk7XG59XG4jaWYgZGVmaW5lZCggVVNFX1NIRUVOIClcbmZsb2F0IERfQ2hhcmxpZShmbG9hdCByb3VnaG5lc3MsIGZsb2F0IE5vSCkge1xuXHRmbG9hdCBpbnZBbHBoYSA9IDEuMCAvIHJvdWdobmVzcztcblx0ZmxvYXQgY29zMmggPSBOb0ggKiBOb0g7XG5cdGZsb2F0IHNpbjJoID0gbWF4KDEuMCAtIGNvczJoLCAwLjAwNzgxMjUpO1x0cmV0dXJuICgyLjAgKyBpbnZBbHBoYSkgKiBwb3coc2luMmgsIGludkFscGhhICogMC41KSAvICgyLjAgKiBQSSk7XG59XG5mbG9hdCBWX05ldWJlbHQoZmxvYXQgTm9WLCBmbG9hdCBOb0wpIHtcblx0cmV0dXJuIHNhdHVyYXRlKDEuMCAvICg0LjAgKiAoTm9MICsgTm9WIC0gTm9MICogTm9WKSkpO1xufVxudmVjMyBCUkRGX1NwZWN1bGFyX1NoZWVuKCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGNvbnN0IGluIHZlYzMgTCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgdmVjMyBzcGVjdWxhckNvbG9yICkge1xuXHR2ZWMzIE4gPSBnZW9tZXRyeS5ub3JtYWw7XG5cdHZlYzMgViA9IGdlb21ldHJ5LnZpZXdEaXI7XG5cdHZlYzMgSCA9IG5vcm1hbGl6ZSggViArIEwgKTtcblx0ZmxvYXQgZG90TkggPSBzYXR1cmF0ZSggZG90KCBOLCBIICkgKTtcblx0cmV0dXJuIHNwZWN1bGFyQ29sb3IgKiBEX0NoYXJsaWUoIHJvdWdobmVzcywgZG90TkggKSAqIFZfTmV1YmVsdCggZG90KE4sIFYpLCBkb3QoTiwgTCkgKTtcbn1cbiNlbmRpZiIsYnVtcG1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0JVTVBNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgYnVtcE1hcDtcblx0dW5pZm9ybSBmbG9hdCBidW1wU2NhbGU7XG5cdHZlYzIgZEhkeHlfZndkKCkge1xuXHRcdHZlYzIgZFNUZHggPSBkRmR4KCB2VXYgKTtcblx0XHR2ZWMyIGRTVGR5ID0gZEZkeSggdlV2ICk7XG5cdFx0ZmxvYXQgSGxsID0gYnVtcFNjYWxlICogdGV4dHVyZTJEKCBidW1wTWFwLCB2VXYgKS54O1xuXHRcdGZsb2F0IGRCeCA9IGJ1bXBTY2FsZSAqIHRleHR1cmUyRCggYnVtcE1hcCwgdlV2ICsgZFNUZHggKS54IC0gSGxsO1xuXHRcdGZsb2F0IGRCeSA9IGJ1bXBTY2FsZSAqIHRleHR1cmUyRCggYnVtcE1hcCwgdlV2ICsgZFNUZHkgKS54IC0gSGxsO1xuXHRcdHJldHVybiB2ZWMyKCBkQngsIGRCeSApO1xuXHR9XG5cdHZlYzMgcGVydHVyYk5vcm1hbEFyYiggdmVjMyBzdXJmX3BvcywgdmVjMyBzdXJmX25vcm0sIHZlYzIgZEhkeHkgKSB7XG5cdFx0dmVjMyB2U2lnbWFYID0gdmVjMyggZEZkeCggc3VyZl9wb3MueCApLCBkRmR4KCBzdXJmX3Bvcy55ICksIGRGZHgoIHN1cmZfcG9zLnogKSApO1xuXHRcdHZlYzMgdlNpZ21hWSA9IHZlYzMoIGRGZHkoIHN1cmZfcG9zLnggKSwgZEZkeSggc3VyZl9wb3MueSApLCBkRmR5KCBzdXJmX3Bvcy56ICkgKTtcblx0XHR2ZWMzIHZOID0gc3VyZl9ub3JtO1xuXHRcdHZlYzMgUjEgPSBjcm9zcyggdlNpZ21hWSwgdk4gKTtcblx0XHR2ZWMzIFIyID0gY3Jvc3MoIHZOLCB2U2lnbWFYICk7XG5cdFx0ZmxvYXQgZkRldCA9IGRvdCggdlNpZ21hWCwgUjEgKTtcblx0XHRmRGV0ICo9ICggZmxvYXQoIGdsX0Zyb250RmFjaW5nICkgKiAyLjAgLSAxLjAgKTtcblx0XHR2ZWMzIHZHcmFkID0gc2lnbiggZkRldCApICogKCBkSGR4eS54ICogUjEgKyBkSGR4eS55ICogUjIgKTtcblx0XHRyZXR1cm4gbm9ybWFsaXplKCBhYnMoIGZEZXQgKSAqIHN1cmZfbm9ybSAtIHZHcmFkICk7XG5cdH1cbiNlbmRpZiIsY2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50OiIjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyA+IDBcblx0dmVjNCBwbGFuZTtcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBVTklPTl9DTElQUElOR19QTEFORVM7IGkgKysgKSB7XG5cdFx0cGxhbmUgPSBjbGlwcGluZ1BsYW5lc1sgaSBdO1xuXHRcdGlmICggZG90KCB2Q2xpcFBvc2l0aW9uLCBwbGFuZS54eXogKSA+IHBsYW5lLncgKSBkaXNjYXJkO1xuXHR9XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG5cdCNpZiBVTklPTl9DTElQUElOR19QTEFORVMgPCBOVU1fQ0xJUFBJTkdfUExBTkVTXG5cdFx0Ym9vbCBjbGlwcGVkID0gdHJ1ZTtcblx0XHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdFx0Zm9yICggaW50IGkgPSBVTklPTl9DTElQUElOR19QTEFORVM7IGkgPCBOVU1fQ0xJUFBJTkdfUExBTkVTOyBpICsrICkge1xuXHRcdFx0cGxhbmUgPSBjbGlwcGluZ1BsYW5lc1sgaSBdO1xuXHRcdFx0Y2xpcHBlZCA9ICggZG90KCB2Q2xpcFBvc2l0aW9uLCBwbGFuZS54eXogKSA+IHBsYW5lLncgKSAmJiBjbGlwcGVkO1xuXHRcdH1cblx0XHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuXHRcdGlmICggY2xpcHBlZCApIGRpc2NhcmQ7XG5cdCNlbmRpZlxuI2VuZGlmIixjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudDoiI2lmIE5VTV9DTElQUElOR19QTEFORVMgPiAwXG5cdHZhcnlpbmcgdmVjMyB2Q2xpcFBvc2l0aW9uO1xuXHR1bmlmb3JtIHZlYzQgY2xpcHBpbmdQbGFuZXNbIE5VTV9DTElQUElOR19QTEFORVMgXTtcbiNlbmRpZiIsY2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4OiIjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyA+IDBcblx0dmFyeWluZyB2ZWMzIHZDbGlwUG9zaXRpb247XG4jZW5kaWYiLGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg6IiNpZiBOVU1fQ0xJUFBJTkdfUExBTkVTID4gMFxuXHR2Q2xpcFBvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejtcbiNlbmRpZiIsY29sb3JfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfQ09MT1Jcblx0ZGlmZnVzZUNvbG9yLnJnYiAqPSB2Q29sb3I7XG4jZW5kaWYiLGNvbG9yX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfQ09MT1Jcblx0dmFyeWluZyB2ZWMzIHZDb2xvcjtcbiNlbmRpZiIsY29sb3JfcGFyc192ZXJ0ZXg6IiNpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKSB8fCBkZWZpbmVkKCBVU0VfSU5TVEFOQ0lOR19DT0xPUiApXG5cdHZhcnlpbmcgdmVjMyB2Q29sb3I7XG4jZW5kaWYiLGNvbG9yX3ZlcnRleDoiI2lmIGRlZmluZWQoIFVTRV9DT0xPUiApIHx8IGRlZmluZWQoIFVTRV9JTlNUQU5DSU5HX0NPTE9SIClcblx0dkNvbG9yID0gdmVjMyggMS4wICk7XG4jZW5kaWZcbiNpZmRlZiBVU0VfQ09MT1Jcblx0dkNvbG9yLnh5eiAqPSBjb2xvci54eXo7XG4jZW5kaWZcbiNpZmRlZiBVU0VfSU5TVEFOQ0lOR19DT0xPUlxuXHR2Q29sb3IueHl6ICo9IGluc3RhbmNlQ29sb3IueHl6O1xuI2VuZGlmIixjb21tb246IiNkZWZpbmUgUEkgMy4xNDE1OTI2NTM1ODk3OTNcbiNkZWZpbmUgUEkyIDYuMjgzMTg1MzA3MTc5NTg2XG4jZGVmaW5lIFBJX0hBTEYgMS41NzA3OTYzMjY3OTQ4OTY2XG4jZGVmaW5lIFJFQ0lQUk9DQUxfUEkgMC4zMTgzMDk4ODYxODM3OTA3XG4jZGVmaW5lIFJFQ0lQUk9DQUxfUEkyIDAuMTU5MTU0OTQzMDkxODk1MzVcbiNkZWZpbmUgRVBTSUxPTiAxZS02XG4jaWZuZGVmIHNhdHVyYXRlXG4jZGVmaW5lIHNhdHVyYXRlKGEpIGNsYW1wKCBhLCAwLjAsIDEuMCApXG4jZW5kaWZcbiNkZWZpbmUgd2hpdGVDb21wbGVtZW50KGEpICggMS4wIC0gc2F0dXJhdGUoIGEgKSApXG5mbG9hdCBwb3cyKCBjb25zdCBpbiBmbG9hdCB4ICkgeyByZXR1cm4geCp4OyB9XG5mbG9hdCBwb3czKCBjb25zdCBpbiBmbG9hdCB4ICkgeyByZXR1cm4geCp4Kng7IH1cbmZsb2F0IHBvdzQoIGNvbnN0IGluIGZsb2F0IHggKSB7IGZsb2F0IHgyID0geCp4OyByZXR1cm4geDIqeDI7IH1cbmZsb2F0IGF2ZXJhZ2UoIGNvbnN0IGluIHZlYzMgY29sb3IgKSB7IHJldHVybiBkb3QoIGNvbG9yLCB2ZWMzKCAwLjMzMzMgKSApOyB9XG5oaWdocCBmbG9hdCByYW5kKCBjb25zdCBpbiB2ZWMyIHV2ICkge1xuXHRjb25zdCBoaWdocCBmbG9hdCBhID0gMTIuOTg5OCwgYiA9IDc4LjIzMywgYyA9IDQzNzU4LjU0NTM7XG5cdGhpZ2hwIGZsb2F0IGR0ID0gZG90KCB1di54eSwgdmVjMiggYSxiICkgKSwgc24gPSBtb2QoIGR0LCBQSSApO1xuXHRyZXR1cm4gZnJhY3Qoc2luKHNuKSAqIGMpO1xufVxuI2lmZGVmIEhJR0hfUFJFQ0lTSU9OXG5cdGZsb2F0IHByZWNpc2lvblNhZmVMZW5ndGgoIHZlYzMgdiApIHsgcmV0dXJuIGxlbmd0aCggdiApOyB9XG4jZWxzZVxuXHRmbG9hdCBtYXgzKCB2ZWMzIHYgKSB7IHJldHVybiBtYXgoIG1heCggdi54LCB2LnkgKSwgdi56ICk7IH1cblx0ZmxvYXQgcHJlY2lzaW9uU2FmZUxlbmd0aCggdmVjMyB2ICkge1xuXHRcdGZsb2F0IG1heENvbXBvbmVudCA9IG1heDMoIGFicyggdiApICk7XG5cdFx0cmV0dXJuIGxlbmd0aCggdiAvIG1heENvbXBvbmVudCApICogbWF4Q29tcG9uZW50O1xuXHR9XG4jZW5kaWZcbnN0cnVjdCBJbmNpZGVudExpZ2h0IHtcblx0dmVjMyBjb2xvcjtcblx0dmVjMyBkaXJlY3Rpb247XG5cdGJvb2wgdmlzaWJsZTtcbn07XG5zdHJ1Y3QgUmVmbGVjdGVkTGlnaHQge1xuXHR2ZWMzIGRpcmVjdERpZmZ1c2U7XG5cdHZlYzMgZGlyZWN0U3BlY3VsYXI7XG5cdHZlYzMgaW5kaXJlY3REaWZmdXNlO1xuXHR2ZWMzIGluZGlyZWN0U3BlY3VsYXI7XG59O1xuc3RydWN0IEdlb21ldHJpY0NvbnRleHQge1xuXHR2ZWMzIHBvc2l0aW9uO1xuXHR2ZWMzIG5vcm1hbDtcblx0dmVjMyB2aWV3RGlyO1xuI2lmZGVmIENMRUFSQ09BVFxuXHR2ZWMzIGNsZWFyY29hdE5vcm1hbDtcbiNlbmRpZlxufTtcbnZlYzMgdHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7XG5cdHJldHVybiBub3JtYWxpemUoICggbWF0cml4ICogdmVjNCggZGlyLCAwLjAgKSApLnh5eiApO1xufVxudmVjMyBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7XG5cdHJldHVybiBub3JtYWxpemUoICggdmVjNCggZGlyLCAwLjAgKSAqIG1hdHJpeCApLnh5eiApO1xufVxudmVjMyBwcm9qZWN0T25QbGFuZShpbiB2ZWMzIHBvaW50LCBpbiB2ZWMzIHBvaW50T25QbGFuZSwgaW4gdmVjMyBwbGFuZU5vcm1hbCApIHtcblx0ZmxvYXQgZGlzdGFuY2UgPSBkb3QoIHBsYW5lTm9ybWFsLCBwb2ludCAtIHBvaW50T25QbGFuZSApO1xuXHRyZXR1cm4gLSBkaXN0YW5jZSAqIHBsYW5lTm9ybWFsICsgcG9pbnQ7XG59XG5mbG9hdCBzaWRlT2ZQbGFuZSggaW4gdmVjMyBwb2ludCwgaW4gdmVjMyBwb2ludE9uUGxhbmUsIGluIHZlYzMgcGxhbmVOb3JtYWwgKSB7XG5cdHJldHVybiBzaWduKCBkb3QoIHBvaW50IC0gcG9pbnRPblBsYW5lLCBwbGFuZU5vcm1hbCApICk7XG59XG52ZWMzIGxpbmVQbGFuZUludGVyc2VjdCggaW4gdmVjMyBwb2ludE9uTGluZSwgaW4gdmVjMyBsaW5lRGlyZWN0aW9uLCBpbiB2ZWMzIHBvaW50T25QbGFuZSwgaW4gdmVjMyBwbGFuZU5vcm1hbCApIHtcblx0cmV0dXJuIGxpbmVEaXJlY3Rpb24gKiAoIGRvdCggcGxhbmVOb3JtYWwsIHBvaW50T25QbGFuZSAtIHBvaW50T25MaW5lICkgLyBkb3QoIHBsYW5lTm9ybWFsLCBsaW5lRGlyZWN0aW9uICkgKSArIHBvaW50T25MaW5lO1xufVxubWF0MyB0cmFuc3Bvc2VNYXQzKCBjb25zdCBpbiBtYXQzIG0gKSB7XG5cdG1hdDMgdG1wO1xuXHR0bXBbIDAgXSA9IHZlYzMoIG1bIDAgXS54LCBtWyAxIF0ueCwgbVsgMiBdLnggKTtcblx0dG1wWyAxIF0gPSB2ZWMzKCBtWyAwIF0ueSwgbVsgMSBdLnksIG1bIDIgXS55ICk7XG5cdHRtcFsgMiBdID0gdmVjMyggbVsgMCBdLnosIG1bIDEgXS56LCBtWyAyIF0ueiApO1xuXHRyZXR1cm4gdG1wO1xufVxuZmxvYXQgbGluZWFyVG9SZWxhdGl2ZUx1bWluYW5jZSggY29uc3QgaW4gdmVjMyBjb2xvciApIHtcblx0dmVjMyB3ZWlnaHRzID0gdmVjMyggMC4yMTI2LCAwLjcxNTIsIDAuMDcyMiApO1xuXHRyZXR1cm4gZG90KCB3ZWlnaHRzLCBjb2xvci5yZ2IgKTtcbn1cbmJvb2wgaXNQZXJzcGVjdGl2ZU1hdHJpeCggbWF0NCBtICkge1xuXHRyZXR1cm4gbVsgMiBdWyAzIF0gPT0gLSAxLjA7XG59XG52ZWMyIGVxdWlyZWN0VXYoIGluIHZlYzMgZGlyICkge1xuXHRmbG9hdCB1ID0gYXRhbiggZGlyLnosIGRpci54ICkgKiBSRUNJUFJPQ0FMX1BJMiArIDAuNTtcblx0ZmxvYXQgdiA9IGFzaW4oIGNsYW1wKCBkaXIueSwgLSAxLjAsIDEuMCApICkgKiBSRUNJUFJPQ0FMX1BJICsgMC41O1xuXHRyZXR1cm4gdmVjMiggdSwgdiApO1xufSIsY3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50OiIjaWZkZWYgRU5WTUFQX1RZUEVfQ1VCRV9VVlxuXHQjZGVmaW5lIGN1YmVVVl9tYXhNaXBMZXZlbCA4LjBcblx0I2RlZmluZSBjdWJlVVZfbWluTWlwTGV2ZWwgNC4wXG5cdCNkZWZpbmUgY3ViZVVWX21heFRpbGVTaXplIDI1Ni4wXG5cdCNkZWZpbmUgY3ViZVVWX21pblRpbGVTaXplIDE2LjBcblx0ZmxvYXQgZ2V0RmFjZSggdmVjMyBkaXJlY3Rpb24gKSB7XG5cdFx0dmVjMyBhYnNEaXJlY3Rpb24gPSBhYnMoIGRpcmVjdGlvbiApO1xuXHRcdGZsb2F0IGZhY2UgPSAtIDEuMDtcblx0XHRpZiAoIGFic0RpcmVjdGlvbi54ID4gYWJzRGlyZWN0aW9uLnogKSB7XG5cdFx0XHRpZiAoIGFic0RpcmVjdGlvbi54ID4gYWJzRGlyZWN0aW9uLnkgKVxuXHRcdFx0XHRmYWNlID0gZGlyZWN0aW9uLnggPiAwLjAgPyAwLjAgOiAzLjA7XG5cdFx0XHRlbHNlXG5cdFx0XHRcdGZhY2UgPSBkaXJlY3Rpb24ueSA+IDAuMCA/IDEuMCA6IDQuMDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKCBhYnNEaXJlY3Rpb24ueiA+IGFic0RpcmVjdGlvbi55IClcblx0XHRcdFx0ZmFjZSA9IGRpcmVjdGlvbi56ID4gMC4wID8gMi4wIDogNS4wO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRmYWNlID0gZGlyZWN0aW9uLnkgPiAwLjAgPyAxLjAgOiA0LjA7XG5cdFx0fVxuXHRcdHJldHVybiBmYWNlO1xuXHR9XG5cdHZlYzIgZ2V0VVYoIHZlYzMgZGlyZWN0aW9uLCBmbG9hdCBmYWNlICkge1xuXHRcdHZlYzIgdXY7XG5cdFx0aWYgKCBmYWNlID09IDAuMCApIHtcblx0XHRcdHV2ID0gdmVjMiggZGlyZWN0aW9uLnosIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi54ICk7XG5cdFx0fSBlbHNlIGlmICggZmFjZSA9PSAxLjAgKSB7XG5cdFx0XHR1diA9IHZlYzIoIC0gZGlyZWN0aW9uLngsIC0gZGlyZWN0aW9uLnogKSAvIGFicyggZGlyZWN0aW9uLnkgKTtcblx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDIuMCApIHtcblx0XHRcdHV2ID0gdmVjMiggLSBkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnogKTtcblx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDMuMCApIHtcblx0XHRcdHV2ID0gdmVjMiggLSBkaXJlY3Rpb24ueiwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnggKTtcblx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDQuMCApIHtcblx0XHRcdHV2ID0gdmVjMiggLSBkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnogKSAvIGFicyggZGlyZWN0aW9uLnkgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dXYgPSB2ZWMyKCBkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnogKTtcblx0XHR9XG5cdFx0cmV0dXJuIDAuNSAqICggdXYgKyAxLjAgKTtcblx0fVxuXHR2ZWMzIGJpbGluZWFyQ3ViZVVWKCBzYW1wbGVyMkQgZW52TWFwLCB2ZWMzIGRpcmVjdGlvbiwgZmxvYXQgbWlwSW50ICkge1xuXHRcdGZsb2F0IGZhY2UgPSBnZXRGYWNlKCBkaXJlY3Rpb24gKTtcblx0XHRmbG9hdCBmaWx0ZXJJbnQgPSBtYXgoIGN1YmVVVl9taW5NaXBMZXZlbCAtIG1pcEludCwgMC4wICk7XG5cdFx0bWlwSW50ID0gbWF4KCBtaXBJbnQsIGN1YmVVVl9taW5NaXBMZXZlbCApO1xuXHRcdGZsb2F0IGZhY2VTaXplID0gZXhwMiggbWlwSW50ICk7XG5cdFx0ZmxvYXQgdGV4ZWxTaXplID0gMS4wIC8gKCAzLjAgKiBjdWJlVVZfbWF4VGlsZVNpemUgKTtcblx0XHR2ZWMyIHV2ID0gZ2V0VVYoIGRpcmVjdGlvbiwgZmFjZSApICogKCBmYWNlU2l6ZSAtIDEuMCApO1xuXHRcdHZlYzIgZiA9IGZyYWN0KCB1diApO1xuXHRcdHV2ICs9IDAuNSAtIGY7XG5cdFx0aWYgKCBmYWNlID4gMi4wICkge1xuXHRcdFx0dXYueSArPSBmYWNlU2l6ZTtcblx0XHRcdGZhY2UgLT0gMy4wO1xuXHRcdH1cblx0XHR1di54ICs9IGZhY2UgKiBmYWNlU2l6ZTtcblx0XHRpZiAoIG1pcEludCA8IGN1YmVVVl9tYXhNaXBMZXZlbCApIHtcblx0XHRcdHV2LnkgKz0gMi4wICogY3ViZVVWX21heFRpbGVTaXplO1xuXHRcdH1cblx0XHR1di55ICs9IGZpbHRlckludCAqIDIuMCAqIGN1YmVVVl9taW5UaWxlU2l6ZTtcblx0XHR1di54ICs9IDMuMCAqIG1heCggMC4wLCBjdWJlVVZfbWF4VGlsZVNpemUgLSAyLjAgKiBmYWNlU2l6ZSApO1xuXHRcdHV2ICo9IHRleGVsU2l6ZTtcblx0XHR2ZWMzIHRsID0gZW52TWFwVGV4ZWxUb0xpbmVhciggdGV4dHVyZTJEKCBlbnZNYXAsIHV2ICkgKS5yZ2I7XG5cdFx0dXYueCArPSB0ZXhlbFNpemU7XG5cdFx0dmVjMyB0ciA9IGVudk1hcFRleGVsVG9MaW5lYXIoIHRleHR1cmUyRCggZW52TWFwLCB1diApICkucmdiO1xuXHRcdHV2LnkgKz0gdGV4ZWxTaXplO1xuXHRcdHZlYzMgYnIgPSBlbnZNYXBUZXhlbFRvTGluZWFyKCB0ZXh0dXJlMkQoIGVudk1hcCwgdXYgKSApLnJnYjtcblx0XHR1di54IC09IHRleGVsU2l6ZTtcblx0XHR2ZWMzIGJsID0gZW52TWFwVGV4ZWxUb0xpbmVhciggdGV4dHVyZTJEKCBlbnZNYXAsIHV2ICkgKS5yZ2I7XG5cdFx0dmVjMyB0bSA9IG1peCggdGwsIHRyLCBmLnggKTtcblx0XHR2ZWMzIGJtID0gbWl4KCBibCwgYnIsIGYueCApO1xuXHRcdHJldHVybiBtaXgoIHRtLCBibSwgZi55ICk7XG5cdH1cblx0I2RlZmluZSByMCAxLjBcblx0I2RlZmluZSB2MCAwLjMzOVxuXHQjZGVmaW5lIG0wIC0gMi4wXG5cdCNkZWZpbmUgcjEgMC44XG5cdCNkZWZpbmUgdjEgMC4yNzZcblx0I2RlZmluZSBtMSAtIDEuMFxuXHQjZGVmaW5lIHI0IDAuNFxuXHQjZGVmaW5lIHY0IDAuMDQ2XG5cdCNkZWZpbmUgbTQgMi4wXG5cdCNkZWZpbmUgcjUgMC4zMDVcblx0I2RlZmluZSB2NSAwLjAxNlxuXHQjZGVmaW5lIG01IDMuMFxuXHQjZGVmaW5lIHI2IDAuMjFcblx0I2RlZmluZSB2NiAwLjAwMzhcblx0I2RlZmluZSBtNiA0LjBcblx0ZmxvYXQgcm91Z2huZXNzVG9NaXAoIGZsb2F0IHJvdWdobmVzcyApIHtcblx0XHRmbG9hdCBtaXAgPSAwLjA7XG5cdFx0aWYgKCByb3VnaG5lc3MgPj0gcjEgKSB7XG5cdFx0XHRtaXAgPSAoIHIwIC0gcm91Z2huZXNzICkgKiAoIG0xIC0gbTAgKSAvICggcjAgLSByMSApICsgbTA7XG5cdFx0fSBlbHNlIGlmICggcm91Z2huZXNzID49IHI0ICkge1xuXHRcdFx0bWlwID0gKCByMSAtIHJvdWdobmVzcyApICogKCBtNCAtIG0xICkgLyAoIHIxIC0gcjQgKSArIG0xO1xuXHRcdH0gZWxzZSBpZiAoIHJvdWdobmVzcyA+PSByNSApIHtcblx0XHRcdG1pcCA9ICggcjQgLSByb3VnaG5lc3MgKSAqICggbTUgLSBtNCApIC8gKCByNCAtIHI1ICkgKyBtNDtcblx0XHR9IGVsc2UgaWYgKCByb3VnaG5lc3MgPj0gcjYgKSB7XG5cdFx0XHRtaXAgPSAoIHI1IC0gcm91Z2huZXNzICkgKiAoIG02IC0gbTUgKSAvICggcjUgLSByNiApICsgbTU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG1pcCA9IC0gMi4wICogbG9nMiggMS4xNiAqIHJvdWdobmVzcyApO1x0XHR9XG5cdFx0cmV0dXJuIG1pcDtcblx0fVxuXHR2ZWM0IHRleHR1cmVDdWJlVVYoIHNhbXBsZXIyRCBlbnZNYXAsIHZlYzMgc2FtcGxlRGlyLCBmbG9hdCByb3VnaG5lc3MgKSB7XG5cdFx0ZmxvYXQgbWlwID0gY2xhbXAoIHJvdWdobmVzc1RvTWlwKCByb3VnaG5lc3MgKSwgbTAsIGN1YmVVVl9tYXhNaXBMZXZlbCApO1xuXHRcdGZsb2F0IG1pcEYgPSBmcmFjdCggbWlwICk7XG5cdFx0ZmxvYXQgbWlwSW50ID0gZmxvb3IoIG1pcCApO1xuXHRcdHZlYzMgY29sb3IwID0gYmlsaW5lYXJDdWJlVVYoIGVudk1hcCwgc2FtcGxlRGlyLCBtaXBJbnQgKTtcblx0XHRpZiAoIG1pcEYgPT0gMC4wICkge1xuXHRcdFx0cmV0dXJuIHZlYzQoIGNvbG9yMCwgMS4wICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZlYzMgY29sb3IxID0gYmlsaW5lYXJDdWJlVVYoIGVudk1hcCwgc2FtcGxlRGlyLCBtaXBJbnQgKyAxLjAgKTtcblx0XHRcdHJldHVybiB2ZWM0KCBtaXgoIGNvbG9yMCwgY29sb3IxLCBtaXBGICksIDEuMCApO1xuXHRcdH1cblx0fVxuI2VuZGlmIixkZWZhdWx0bm9ybWFsX3ZlcnRleDoidmVjMyB0cmFuc2Zvcm1lZE5vcm1hbCA9IG9iamVjdE5vcm1hbDtcbiNpZmRlZiBVU0VfSU5TVEFOQ0lOR1xuXHRtYXQzIG0gPSBtYXQzKCBpbnN0YW5jZU1hdHJpeCApO1xuXHR0cmFuc2Zvcm1lZE5vcm1hbCAvPSB2ZWMzKCBkb3QoIG1bIDAgXSwgbVsgMCBdICksIGRvdCggbVsgMSBdLCBtWyAxIF0gKSwgZG90KCBtWyAyIF0sIG1bIDIgXSApICk7XG5cdHRyYW5zZm9ybWVkTm9ybWFsID0gbSAqIHRyYW5zZm9ybWVkTm9ybWFsO1xuI2VuZGlmXG50cmFuc2Zvcm1lZE5vcm1hbCA9IG5vcm1hbE1hdHJpeCAqIHRyYW5zZm9ybWVkTm9ybWFsO1xuI2lmZGVmIEZMSVBfU0lERURcblx0dHJhbnNmb3JtZWROb3JtYWwgPSAtIHRyYW5zZm9ybWVkTm9ybWFsO1xuI2VuZGlmXG4jaWZkZWYgVVNFX1RBTkdFTlRcblx0dmVjMyB0cmFuc2Zvcm1lZFRhbmdlbnQgPSAoIG1vZGVsVmlld01hdHJpeCAqIHZlYzQoIG9iamVjdFRhbmdlbnQsIDAuMCApICkueHl6O1xuXHQjaWZkZWYgRkxJUF9TSURFRFxuXHRcdHRyYW5zZm9ybWVkVGFuZ2VudCA9IC0gdHJhbnNmb3JtZWRUYW5nZW50O1xuXHQjZW5kaWZcbiNlbmRpZiIsZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX0RJU1BMQUNFTUVOVE1BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBkaXNwbGFjZW1lbnRNYXA7XG5cdHVuaWZvcm0gZmxvYXQgZGlzcGxhY2VtZW50U2NhbGU7XG5cdHVuaWZvcm0gZmxvYXQgZGlzcGxhY2VtZW50QmlhcztcbiNlbmRpZiIsZGlzcGxhY2VtZW50bWFwX3ZlcnRleDoiI2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVBcblx0dHJhbnNmb3JtZWQgKz0gbm9ybWFsaXplKCBvYmplY3ROb3JtYWwgKSAqICggdGV4dHVyZTJEKCBkaXNwbGFjZW1lbnRNYXAsIHZVdiApLnggKiBkaXNwbGFjZW1lbnRTY2FsZSArIGRpc3BsYWNlbWVudEJpYXMgKTtcbiNlbmRpZiIsZW1pc3NpdmVtYXBfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfRU1JU1NJVkVNQVBcblx0dmVjNCBlbWlzc2l2ZUNvbG9yID0gdGV4dHVyZTJEKCBlbWlzc2l2ZU1hcCwgdlV2ICk7XG5cdGVtaXNzaXZlQ29sb3IucmdiID0gZW1pc3NpdmVNYXBUZXhlbFRvTGluZWFyKCBlbWlzc2l2ZUNvbG9yICkucmdiO1xuXHR0b3RhbEVtaXNzaXZlUmFkaWFuY2UgKj0gZW1pc3NpdmVDb2xvci5yZ2I7XG4jZW5kaWYiLGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfRU1JU1NJVkVNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgZW1pc3NpdmVNYXA7XG4jZW5kaWYiLGVuY29kaW5nc19mcmFnbWVudDoiZ2xfRnJhZ0NvbG9yID0gbGluZWFyVG9PdXRwdXRUZXhlbCggZ2xfRnJhZ0NvbG9yICk7IixlbmNvZGluZ3NfcGFyc19mcmFnbWVudDoiXG52ZWM0IExpbmVhclRvTGluZWFyKCBpbiB2ZWM0IHZhbHVlICkge1xuXHRyZXR1cm4gdmFsdWU7XG59XG52ZWM0IEdhbW1hVG9MaW5lYXIoIGluIHZlYzQgdmFsdWUsIGluIGZsb2F0IGdhbW1hRmFjdG9yICkge1xuXHRyZXR1cm4gdmVjNCggcG93KCB2YWx1ZS5yZ2IsIHZlYzMoIGdhbW1hRmFjdG9yICkgKSwgdmFsdWUuYSApO1xufVxudmVjNCBMaW5lYXJUb0dhbW1hKCBpbiB2ZWM0IHZhbHVlLCBpbiBmbG9hdCBnYW1tYUZhY3RvciApIHtcblx0cmV0dXJuIHZlYzQoIHBvdyggdmFsdWUucmdiLCB2ZWMzKCAxLjAgLyBnYW1tYUZhY3RvciApICksIHZhbHVlLmEgKTtcbn1cbnZlYzQgc1JHQlRvTGluZWFyKCBpbiB2ZWM0IHZhbHVlICkge1xuXHRyZXR1cm4gdmVjNCggbWl4KCBwb3coIHZhbHVlLnJnYiAqIDAuOTQ3ODY3Mjk4NiArIHZlYzMoIDAuMDUyMTMyNzAxNCApLCB2ZWMzKCAyLjQgKSApLCB2YWx1ZS5yZ2IgKiAwLjA3NzM5OTM4MDgsIHZlYzMoIGxlc3NUaGFuRXF1YWwoIHZhbHVlLnJnYiwgdmVjMyggMC4wNDA0NSApICkgKSApLCB2YWx1ZS5hICk7XG59XG52ZWM0IExpbmVhclRvc1JHQiggaW4gdmVjNCB2YWx1ZSApIHtcblx0cmV0dXJuIHZlYzQoIG1peCggcG93KCB2YWx1ZS5yZ2IsIHZlYzMoIDAuNDE2NjYgKSApICogMS4wNTUgLSB2ZWMzKCAwLjA1NSApLCB2YWx1ZS5yZ2IgKiAxMi45MiwgdmVjMyggbGVzc1RoYW5FcXVhbCggdmFsdWUucmdiLCB2ZWMzKCAwLjAwMzEzMDggKSApICkgKSwgdmFsdWUuYSApO1xufVxudmVjNCBSR0JFVG9MaW5lYXIoIGluIHZlYzQgdmFsdWUgKSB7XG5cdHJldHVybiB2ZWM0KCB2YWx1ZS5yZ2IgKiBleHAyKCB2YWx1ZS5hICogMjU1LjAgLSAxMjguMCApLCAxLjAgKTtcbn1cbnZlYzQgTGluZWFyVG9SR0JFKCBpbiB2ZWM0IHZhbHVlICkge1xuXHRmbG9hdCBtYXhDb21wb25lbnQgPSBtYXgoIG1heCggdmFsdWUuciwgdmFsdWUuZyApLCB2YWx1ZS5iICk7XG5cdGZsb2F0IGZFeHAgPSBjbGFtcCggY2VpbCggbG9nMiggbWF4Q29tcG9uZW50ICkgKSwgLTEyOC4wLCAxMjcuMCApO1xuXHRyZXR1cm4gdmVjNCggdmFsdWUucmdiIC8gZXhwMiggZkV4cCApLCAoIGZFeHAgKyAxMjguMCApIC8gMjU1LjAgKTtcbn1cbnZlYzQgUkdCTVRvTGluZWFyKCBpbiB2ZWM0IHZhbHVlLCBpbiBmbG9hdCBtYXhSYW5nZSApIHtcblx0cmV0dXJuIHZlYzQoIHZhbHVlLnJnYiAqIHZhbHVlLmEgKiBtYXhSYW5nZSwgMS4wICk7XG59XG52ZWM0IExpbmVhclRvUkdCTSggaW4gdmVjNCB2YWx1ZSwgaW4gZmxvYXQgbWF4UmFuZ2UgKSB7XG5cdGZsb2F0IG1heFJHQiA9IG1heCggdmFsdWUuciwgbWF4KCB2YWx1ZS5nLCB2YWx1ZS5iICkgKTtcblx0ZmxvYXQgTSA9IGNsYW1wKCBtYXhSR0IgLyBtYXhSYW5nZSwgMC4wLCAxLjAgKTtcblx0TSA9IGNlaWwoIE0gKiAyNTUuMCApIC8gMjU1LjA7XG5cdHJldHVybiB2ZWM0KCB2YWx1ZS5yZ2IgLyAoIE0gKiBtYXhSYW5nZSApLCBNICk7XG59XG52ZWM0IFJHQkRUb0xpbmVhciggaW4gdmVjNCB2YWx1ZSwgaW4gZmxvYXQgbWF4UmFuZ2UgKSB7XG5cdHJldHVybiB2ZWM0KCB2YWx1ZS5yZ2IgKiAoICggbWF4UmFuZ2UgLyAyNTUuMCApIC8gdmFsdWUuYSApLCAxLjAgKTtcbn1cbnZlYzQgTGluZWFyVG9SR0JEKCBpbiB2ZWM0IHZhbHVlLCBpbiBmbG9hdCBtYXhSYW5nZSApIHtcblx0ZmxvYXQgbWF4UkdCID0gbWF4KCB2YWx1ZS5yLCBtYXgoIHZhbHVlLmcsIHZhbHVlLmIgKSApO1xuXHRmbG9hdCBEID0gbWF4KCBtYXhSYW5nZSAvIG1heFJHQiwgMS4wICk7XG5cdEQgPSBjbGFtcCggZmxvb3IoIEQgKSAvIDI1NS4wLCAwLjAsIDEuMCApO1xuXHRyZXR1cm4gdmVjNCggdmFsdWUucmdiICogKCBEICogKCAyNTUuMCAvIG1heFJhbmdlICkgKSwgRCApO1xufVxuY29uc3QgbWF0MyBjTG9nTHV2TSA9IG1hdDMoIDAuMjIwOSwgMC4zMzkwLCAwLjQxODQsIDAuMTEzOCwgMC42NzgwLCAwLjczMTksIDAuMDEwMiwgMC4xMTMwLCAwLjI5NjkgKTtcbnZlYzQgTGluZWFyVG9Mb2dMdXYoIGluIHZlYzQgdmFsdWUgKSB7XG5cdHZlYzMgWHBfWV9YWVpwID0gY0xvZ0x1dk0gKiB2YWx1ZS5yZ2I7XG5cdFhwX1lfWFlacCA9IG1heCggWHBfWV9YWVpwLCB2ZWMzKCAxZS02LCAxZS02LCAxZS02ICkgKTtcblx0dmVjNCB2UmVzdWx0O1xuXHR2UmVzdWx0Lnh5ID0gWHBfWV9YWVpwLnh5IC8gWHBfWV9YWVpwLno7XG5cdGZsb2F0IExlID0gMi4wICogbG9nMihYcF9ZX1hZWnAueSkgKyAxMjcuMDtcblx0dlJlc3VsdC53ID0gZnJhY3QoIExlICk7XG5cdHZSZXN1bHQueiA9ICggTGUgLSAoIGZsb29yKCB2UmVzdWx0LncgKiAyNTUuMCApICkgLyAyNTUuMCApIC8gMjU1LjA7XG5cdHJldHVybiB2UmVzdWx0O1xufVxuY29uc3QgbWF0MyBjTG9nTHV2SW52ZXJzZU0gPSBtYXQzKCA2LjAwMTQsIC0yLjcwMDgsIC0xLjc5OTYsIC0xLjMzMjAsIDMuMTAyOSwgLTUuNzcyMSwgMC4zMDA4LCAtMS4wODgyLCA1LjYyNjggKTtcbnZlYzQgTG9nTHV2VG9MaW5lYXIoIGluIHZlYzQgdmFsdWUgKSB7XG5cdGZsb2F0IExlID0gdmFsdWUueiAqIDI1NS4wICsgdmFsdWUudztcblx0dmVjMyBYcF9ZX1hZWnA7XG5cdFhwX1lfWFlacC55ID0gZXhwMiggKCBMZSAtIDEyNy4wICkgLyAyLjAgKTtcblx0WHBfWV9YWVpwLnogPSBYcF9ZX1hZWnAueSAvIHZhbHVlLnk7XG5cdFhwX1lfWFlacC54ID0gdmFsdWUueCAqIFhwX1lfWFlacC56O1xuXHR2ZWMzIHZSR0IgPSBjTG9nTHV2SW52ZXJzZU0gKiBYcF9ZX1hZWnAucmdiO1xuXHRyZXR1cm4gdmVjNCggbWF4KCB2UkdCLCAwLjAgKSwgMS4wICk7XG59IixlbnZtYXBfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfRU5WTUFQXG5cdCNpZmRlZiBFTlZfV09STERQT1Ncblx0XHR2ZWMzIGNhbWVyYVRvRnJhZztcblx0XHRpZiAoIGlzT3J0aG9ncmFwaGljICkge1xuXHRcdFx0Y2FtZXJhVG9GcmFnID0gbm9ybWFsaXplKCB2ZWMzKCAtIHZpZXdNYXRyaXhbIDAgXVsgMiBdLCAtIHZpZXdNYXRyaXhbIDEgXVsgMiBdLCAtIHZpZXdNYXRyaXhbIDIgXVsgMiBdICkgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y2FtZXJhVG9GcmFnID0gbm9ybWFsaXplKCB2V29ybGRQb3NpdGlvbiAtIGNhbWVyYVBvc2l0aW9uICk7XG5cdFx0fVxuXHRcdHZlYzMgd29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBub3JtYWwsIHZpZXdNYXRyaXggKTtcblx0XHQjaWZkZWYgRU5WTUFQX01PREVfUkVGTEVDVElPTlxuXHRcdFx0dmVjMyByZWZsZWN0VmVjID0gcmVmbGVjdCggY2FtZXJhVG9GcmFnLCB3b3JsZE5vcm1hbCApO1xuXHRcdCNlbHNlXG5cdFx0XHR2ZWMzIHJlZmxlY3RWZWMgPSByZWZyYWN0KCBjYW1lcmFUb0ZyYWcsIHdvcmxkTm9ybWFsLCByZWZyYWN0aW9uUmF0aW8gKTtcblx0XHQjZW5kaWZcblx0I2Vsc2Vcblx0XHR2ZWMzIHJlZmxlY3RWZWMgPSB2UmVmbGVjdDtcblx0I2VuZGlmXG5cdCNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFXG5cdFx0dmVjNCBlbnZDb2xvciA9IHRleHR1cmVDdWJlKCBlbnZNYXAsIHZlYzMoIGZsaXBFbnZNYXAgKiByZWZsZWN0VmVjLngsIHJlZmxlY3RWZWMueXogKSApO1xuXHQjZWxpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWIClcblx0XHR2ZWM0IGVudkNvbG9yID0gdGV4dHVyZUN1YmVVViggZW52TWFwLCByZWZsZWN0VmVjLCAwLjAgKTtcblx0I2Vsc2Vcblx0XHR2ZWM0IGVudkNvbG9yID0gdmVjNCggMC4wICk7XG5cdCNlbmRpZlxuXHQjaWZuZGVmIEVOVk1BUF9UWVBFX0NVQkVfVVZcblx0XHRlbnZDb2xvciA9IGVudk1hcFRleGVsVG9MaW5lYXIoIGVudkNvbG9yICk7XG5cdCNlbmRpZlxuXHQjaWZkZWYgRU5WTUFQX0JMRU5ESU5HX01VTFRJUExZXG5cdFx0b3V0Z29pbmdMaWdodCA9IG1peCggb3V0Z29pbmdMaWdodCwgb3V0Z29pbmdMaWdodCAqIGVudkNvbG9yLnh5eiwgc3BlY3VsYXJTdHJlbmd0aCAqIHJlZmxlY3Rpdml0eSApO1xuXHQjZWxpZiBkZWZpbmVkKCBFTlZNQVBfQkxFTkRJTkdfTUlYIClcblx0XHRvdXRnb2luZ0xpZ2h0ID0gbWl4KCBvdXRnb2luZ0xpZ2h0LCBlbnZDb2xvci54eXosIHNwZWN1bGFyU3RyZW5ndGggKiByZWZsZWN0aXZpdHkgKTtcblx0I2VsaWYgZGVmaW5lZCggRU5WTUFQX0JMRU5ESU5HX0FERCApXG5cdFx0b3V0Z29pbmdMaWdodCArPSBlbnZDb2xvci54eXogKiBzcGVjdWxhclN0cmVuZ3RoICogcmVmbGVjdGl2aXR5O1xuXHQjZW5kaWZcbiNlbmRpZiIsZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0VOVk1BUFxuXHR1bmlmb3JtIGZsb2F0IGVudk1hcEludGVuc2l0eTtcblx0dW5pZm9ybSBmbG9hdCBmbGlwRW52TWFwO1xuXHR1bmlmb3JtIGludCBtYXhNaXBMZXZlbDtcblx0I2lmZGVmIEVOVk1BUF9UWVBFX0NVQkVcblx0XHR1bmlmb3JtIHNhbXBsZXJDdWJlIGVudk1hcDtcblx0I2Vsc2Vcblx0XHR1bmlmb3JtIHNhbXBsZXIyRCBlbnZNYXA7XG5cdCNlbmRpZlxuXHRcbiNlbmRpZiIsZW52bWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfRU5WTUFQXG5cdHVuaWZvcm0gZmxvYXQgcmVmbGVjdGl2aXR5O1xuXHQjaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCggUEhPTkcgKVxuXHRcdCNkZWZpbmUgRU5WX1dPUkxEUE9TXG5cdCNlbmRpZlxuXHQjaWZkZWYgRU5WX1dPUkxEUE9TXG5cdFx0dmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xuXHRcdHVuaWZvcm0gZmxvYXQgcmVmcmFjdGlvblJhdGlvO1xuXHQjZWxzZVxuXHRcdHZhcnlpbmcgdmVjMyB2UmVmbGVjdDtcblx0I2VuZGlmXG4jZW5kaWYiLGVudm1hcF9wYXJzX3ZlcnRleDoiI2lmZGVmIFVTRV9FTlZNQVBcblx0I2lmIGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVVNFX05PUk1BTE1BUCApIHx8ZGVmaW5lZCggUEhPTkcgKVxuXHRcdCNkZWZpbmUgRU5WX1dPUkxEUE9TXG5cdCNlbmRpZlxuXHQjaWZkZWYgRU5WX1dPUkxEUE9TXG5cdFx0XG5cdFx0dmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xuXHQjZWxzZVxuXHRcdHZhcnlpbmcgdmVjMyB2UmVmbGVjdDtcblx0XHR1bmlmb3JtIGZsb2F0IHJlZnJhY3Rpb25SYXRpbztcblx0I2VuZGlmXG4jZW5kaWYiLGVudm1hcF9waHlzaWNhbF9wYXJzX2ZyYWdtZW50OiIjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApXG5cdCNpZmRlZiBFTlZNQVBfTU9ERV9SRUZSQUNUSU9OXG5cdFx0dW5pZm9ybSBmbG9hdCByZWZyYWN0aW9uUmF0aW87XG5cdCNlbmRpZlxuXHR2ZWMzIGdldExpZ2h0UHJvYmVJbmRpcmVjdElycmFkaWFuY2UoIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIGludCBtYXhNSVBMZXZlbCApIHtcblx0XHR2ZWMzIHdvcmxkTm9ybWFsID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggZ2VvbWV0cnkubm9ybWFsLCB2aWV3TWF0cml4ICk7XG5cdFx0I2lmZGVmIEVOVk1BUF9UWVBFX0NVQkVcblx0XHRcdHZlYzMgcXVlcnlWZWMgPSB2ZWMzKCBmbGlwRW52TWFwICogd29ybGROb3JtYWwueCwgd29ybGROb3JtYWwueXogKTtcblx0XHRcdCNpZmRlZiBURVhUVVJFX0xPRF9FWFRcblx0XHRcdFx0dmVjNCBlbnZNYXBDb2xvciA9IHRleHR1cmVDdWJlTG9kRVhUKCBlbnZNYXAsIHF1ZXJ5VmVjLCBmbG9hdCggbWF4TUlQTGV2ZWwgKSApO1xuXHRcdFx0I2Vsc2Vcblx0XHRcdFx0dmVjNCBlbnZNYXBDb2xvciA9IHRleHR1cmVDdWJlKCBlbnZNYXAsIHF1ZXJ5VmVjLCBmbG9hdCggbWF4TUlQTGV2ZWwgKSApO1xuXHRcdFx0I2VuZGlmXG5cdFx0XHRlbnZNYXBDb2xvci5yZ2IgPSBlbnZNYXBUZXhlbFRvTGluZWFyKCBlbnZNYXBDb2xvciApLnJnYjtcblx0XHQjZWxpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWIClcblx0XHRcdHZlYzQgZW52TWFwQ29sb3IgPSB0ZXh0dXJlQ3ViZVVWKCBlbnZNYXAsIHdvcmxkTm9ybWFsLCAxLjAgKTtcblx0XHQjZWxzZVxuXHRcdFx0dmVjNCBlbnZNYXBDb2xvciA9IHZlYzQoIDAuMCApO1xuXHRcdCNlbmRpZlxuXHRcdHJldHVybiBQSSAqIGVudk1hcENvbG9yLnJnYiAqIGVudk1hcEludGVuc2l0eTtcblx0fVxuXHRmbG9hdCBnZXRTcGVjdWxhck1JUExldmVsKCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGNvbnN0IGluIGludCBtYXhNSVBMZXZlbCApIHtcblx0XHRmbG9hdCBtYXhNSVBMZXZlbFNjYWxhciA9IGZsb2F0KCBtYXhNSVBMZXZlbCApO1xuXHRcdGZsb2F0IHNpZ21hID0gUEkgKiByb3VnaG5lc3MgKiByb3VnaG5lc3MgLyAoIDEuMCArIHJvdWdobmVzcyApO1xuXHRcdGZsb2F0IGRlc2lyZWRNSVBMZXZlbCA9IG1heE1JUExldmVsU2NhbGFyICsgbG9nMiggc2lnbWEgKTtcblx0XHRyZXR1cm4gY2xhbXAoIGRlc2lyZWRNSVBMZXZlbCwgMC4wLCBtYXhNSVBMZXZlbFNjYWxhciApO1xuXHR9XG5cdHZlYzMgZ2V0TGlnaHRQcm9iZUluZGlyZWN0UmFkaWFuY2UoIGNvbnN0IGluIHZlYzMgdmlld0RpciwgY29uc3QgaW4gdmVjMyBub3JtYWwsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcywgY29uc3QgaW4gaW50IG1heE1JUExldmVsICkge1xuXHRcdCNpZmRlZiBFTlZNQVBfTU9ERV9SRUZMRUNUSU9OXG5cdFx0XHR2ZWMzIHJlZmxlY3RWZWMgPSByZWZsZWN0KCAtdmlld0Rpciwgbm9ybWFsICk7XG5cdFx0XHRyZWZsZWN0VmVjID0gbm9ybWFsaXplKCBtaXgoIHJlZmxlY3RWZWMsIG5vcm1hbCwgcm91Z2huZXNzICogcm91Z2huZXNzKSApO1xuXHRcdCNlbHNlXG5cdFx0XHR2ZWMzIHJlZmxlY3RWZWMgPSByZWZyYWN0KCAtdmlld0Rpciwgbm9ybWFsLCByZWZyYWN0aW9uUmF0aW8gKTtcblx0XHQjZW5kaWZcblx0XHRyZWZsZWN0VmVjID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggcmVmbGVjdFZlYywgdmlld01hdHJpeCApO1xuXHRcdGZsb2F0IHNwZWN1bGFyTUlQTGV2ZWwgPSBnZXRTcGVjdWxhck1JUExldmVsKCByb3VnaG5lc3MsIG1heE1JUExldmVsICk7XG5cdFx0I2lmZGVmIEVOVk1BUF9UWVBFX0NVQkVcblx0XHRcdHZlYzMgcXVlcnlSZWZsZWN0VmVjID0gdmVjMyggZmxpcEVudk1hcCAqIHJlZmxlY3RWZWMueCwgcmVmbGVjdFZlYy55eiApO1xuXHRcdFx0I2lmZGVmIFRFWFRVUkVfTE9EX0VYVFxuXHRcdFx0XHR2ZWM0IGVudk1hcENvbG9yID0gdGV4dHVyZUN1YmVMb2RFWFQoIGVudk1hcCwgcXVlcnlSZWZsZWN0VmVjLCBzcGVjdWxhck1JUExldmVsICk7XG5cdFx0XHQjZWxzZVxuXHRcdFx0XHR2ZWM0IGVudk1hcENvbG9yID0gdGV4dHVyZUN1YmUoIGVudk1hcCwgcXVlcnlSZWZsZWN0VmVjLCBzcGVjdWxhck1JUExldmVsICk7XG5cdFx0XHQjZW5kaWZcblx0XHRcdGVudk1hcENvbG9yLnJnYiA9IGVudk1hcFRleGVsVG9MaW5lYXIoIGVudk1hcENvbG9yICkucmdiO1xuXHRcdCNlbGlmIGRlZmluZWQoIEVOVk1BUF9UWVBFX0NVQkVfVVYgKVxuXHRcdFx0dmVjNCBlbnZNYXBDb2xvciA9IHRleHR1cmVDdWJlVVYoIGVudk1hcCwgcmVmbGVjdFZlYywgcm91Z2huZXNzICk7XG5cdFx0I2VuZGlmXG5cdFx0cmV0dXJuIGVudk1hcENvbG9yLnJnYiAqIGVudk1hcEludGVuc2l0eTtcblx0fVxuI2VuZGlmIixlbnZtYXBfdmVydGV4OiIjaWZkZWYgVVNFX0VOVk1BUFxuXHQjaWZkZWYgRU5WX1dPUkxEUE9TXG5cdFx0dldvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uLnh5ejtcblx0I2Vsc2Vcblx0XHR2ZWMzIGNhbWVyYVRvVmVydGV4O1xuXHRcdGlmICggaXNPcnRob2dyYXBoaWMgKSB7XG5cdFx0XHRjYW1lcmFUb1ZlcnRleCA9IG5vcm1hbGl6ZSggdmVjMyggLSB2aWV3TWF0cml4WyAwIF1bIDIgXSwgLSB2aWV3TWF0cml4WyAxIF1bIDIgXSwgLSB2aWV3TWF0cml4WyAyIF1bIDIgXSApICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNhbWVyYVRvVmVydGV4ID0gbm9ybWFsaXplKCB3b3JsZFBvc2l0aW9uLnh5eiAtIGNhbWVyYVBvc2l0aW9uICk7XG5cdFx0fVxuXHRcdHZlYzMgd29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCB0cmFuc2Zvcm1lZE5vcm1hbCwgdmlld01hdHJpeCApO1xuXHRcdCNpZmRlZiBFTlZNQVBfTU9ERV9SRUZMRUNUSU9OXG5cdFx0XHR2UmVmbGVjdCA9IHJlZmxlY3QoIGNhbWVyYVRvVmVydGV4LCB3b3JsZE5vcm1hbCApO1xuXHRcdCNlbHNlXG5cdFx0XHR2UmVmbGVjdCA9IHJlZnJhY3QoIGNhbWVyYVRvVmVydGV4LCB3b3JsZE5vcm1hbCwgcmVmcmFjdGlvblJhdGlvICk7XG5cdFx0I2VuZGlmXG5cdCNlbmRpZlxuI2VuZGlmIixmb2dfdmVydGV4OiIjaWZkZWYgVVNFX0ZPR1xuXHRmb2dEZXB0aCA9IC0gbXZQb3NpdGlvbi56O1xuI2VuZGlmIixmb2dfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfRk9HXG5cdHZhcnlpbmcgZmxvYXQgZm9nRGVwdGg7XG4jZW5kaWYiLGZvZ19mcmFnbWVudDoiI2lmZGVmIFVTRV9GT0dcblx0I2lmZGVmIEZPR19FWFAyXG5cdFx0ZmxvYXQgZm9nRmFjdG9yID0gMS4wIC0gZXhwKCAtIGZvZ0RlbnNpdHkgKiBmb2dEZW5zaXR5ICogZm9nRGVwdGggKiBmb2dEZXB0aCApO1xuXHQjZWxzZVxuXHRcdGZsb2F0IGZvZ0ZhY3RvciA9IHNtb290aHN0ZXAoIGZvZ05lYXIsIGZvZ0ZhciwgZm9nRGVwdGggKTtcblx0I2VuZGlmXG5cdGdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoIGdsX0ZyYWdDb2xvci5yZ2IsIGZvZ0NvbG9yLCBmb2dGYWN0b3IgKTtcbiNlbmRpZiIsZm9nX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfRk9HXG5cdHVuaWZvcm0gdmVjMyBmb2dDb2xvcjtcblx0dmFyeWluZyBmbG9hdCBmb2dEZXB0aDtcblx0I2lmZGVmIEZPR19FWFAyXG5cdFx0dW5pZm9ybSBmbG9hdCBmb2dEZW5zaXR5O1xuXHQjZWxzZVxuXHRcdHVuaWZvcm0gZmxvYXQgZm9nTmVhcjtcblx0XHR1bmlmb3JtIGZsb2F0IGZvZ0Zhcjtcblx0I2VuZGlmXG4jZW5kaWYiLGdyYWRpZW50bWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfR1JBRElFTlRNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgZ3JhZGllbnRNYXA7XG4jZW5kaWZcbnZlYzMgZ2V0R3JhZGllbnRJcnJhZGlhbmNlKCB2ZWMzIG5vcm1hbCwgdmVjMyBsaWdodERpcmVjdGlvbiApIHtcblx0ZmxvYXQgZG90TkwgPSBkb3QoIG5vcm1hbCwgbGlnaHREaXJlY3Rpb24gKTtcblx0dmVjMiBjb29yZCA9IHZlYzIoIGRvdE5MICogMC41ICsgMC41LCAwLjAgKTtcblx0I2lmZGVmIFVTRV9HUkFESUVOVE1BUFxuXHRcdHJldHVybiB0ZXh0dXJlMkQoIGdyYWRpZW50TWFwLCBjb29yZCApLnJnYjtcblx0I2Vsc2Vcblx0XHRyZXR1cm4gKCBjb29yZC54IDwgMC43ICkgPyB2ZWMzKCAwLjcgKSA6IHZlYzMoIDEuMCApO1xuXHQjZW5kaWZcbn0iLGxpZ2h0bWFwX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0xJR0hUTUFQXG5cdHZlYzQgbGlnaHRNYXBUZXhlbD0gdGV4dHVyZTJEKCBsaWdodE1hcCwgdlV2MiApO1xuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gUEkgKiBsaWdodE1hcFRleGVsVG9MaW5lYXIoIGxpZ2h0TWFwVGV4ZWwgKS5yZ2IgKiBsaWdodE1hcEludGVuc2l0eTtcbiNlbmRpZiIsbGlnaHRtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9MSUdIVE1BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBsaWdodE1hcDtcblx0dW5pZm9ybSBmbG9hdCBsaWdodE1hcEludGVuc2l0eTtcbiNlbmRpZiIsbGlnaHRzX2xhbWJlcnRfdmVydGV4OiJ2ZWMzIGRpZmZ1c2UgPSB2ZWMzKCAxLjAgKTtcbkdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnk7XG5nZW9tZXRyeS5wb3NpdGlvbiA9IG12UG9zaXRpb24ueHl6O1xuZ2VvbWV0cnkubm9ybWFsID0gbm9ybWFsaXplKCB0cmFuc2Zvcm1lZE5vcm1hbCApO1xuZ2VvbWV0cnkudmlld0RpciA9ICggaXNPcnRob2dyYXBoaWMgKSA/IHZlYzMoIDAsIDAsIDEgKSA6IG5vcm1hbGl6ZSggLW12UG9zaXRpb24ueHl6ICk7XG5HZW9tZXRyaWNDb250ZXh0IGJhY2tHZW9tZXRyeTtcbmJhY2tHZW9tZXRyeS5wb3NpdGlvbiA9IGdlb21ldHJ5LnBvc2l0aW9uO1xuYmFja0dlb21ldHJ5Lm5vcm1hbCA9IC1nZW9tZXRyeS5ub3JtYWw7XG5iYWNrR2VvbWV0cnkudmlld0RpciA9IGdlb21ldHJ5LnZpZXdEaXI7XG52TGlnaHRGcm9udCA9IHZlYzMoIDAuMCApO1xudkluZGlyZWN0RnJvbnQgPSB2ZWMzKCAwLjAgKTtcbiNpZmRlZiBET1VCTEVfU0lERURcblx0dkxpZ2h0QmFjayA9IHZlYzMoIDAuMCApO1xuXHR2SW5kaXJlY3RCYWNrID0gdmVjMyggMC4wICk7XG4jZW5kaWZcbkluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQ7XG5mbG9hdCBkb3ROTDtcbnZlYzMgZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlO1xudkluZGlyZWN0RnJvbnQgKz0gZ2V0QW1iaWVudExpZ2h0SXJyYWRpYW5jZSggYW1iaWVudExpZ2h0Q29sb3IgKTtcbnZJbmRpcmVjdEZyb250ICs9IGdldExpZ2h0UHJvYmVJcnJhZGlhbmNlKCBsaWdodFByb2JlLCBnZW9tZXRyeSApO1xuI2lmZGVmIERPVUJMRV9TSURFRFxuXHR2SW5kaXJlY3RCYWNrICs9IGdldEFtYmllbnRMaWdodElycmFkaWFuY2UoIGFtYmllbnRMaWdodENvbG9yICk7XG5cdHZJbmRpcmVjdEJhY2sgKz0gZ2V0TGlnaHRQcm9iZUlycmFkaWFuY2UoIGxpZ2h0UHJvYmUsIGJhY2tHZW9tZXRyeSApO1xuI2VuZGlmXG4jaWYgTlVNX1BPSU5UX0xJR0hUUyA+IDBcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fUE9JTlRfTElHSFRTOyBpICsrICkge1xuXHRcdGdldFBvaW50RGlyZWN0TGlnaHRJcnJhZGlhbmNlKCBwb2ludExpZ2h0c1sgaSBdLCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcblx0XHRkb3ROTCA9IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKTtcblx0XHRkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2UgPSBQSSAqIGRpcmVjdExpZ2h0LmNvbG9yO1xuXHRcdHZMaWdodEZyb250ICs9IHNhdHVyYXRlKCBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlO1xuXHRcdCNpZmRlZiBET1VCTEVfU0lERURcblx0XHRcdHZMaWdodEJhY2sgKz0gc2F0dXJhdGUoIC1kb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlO1xuXHRcdCNlbmRpZlxuXHR9XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG4jZW5kaWZcbiNpZiBOVU1fU1BPVF9MSUdIVFMgPiAwXG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRTOyBpICsrICkge1xuXHRcdGdldFNwb3REaXJlY3RMaWdodElycmFkaWFuY2UoIHNwb3RMaWdodHNbIGkgXSwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7XG5cdFx0ZG90TkwgPSBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICk7XG5cdFx0ZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlID0gUEkgKiBkaXJlY3RMaWdodC5jb2xvcjtcblx0XHR2TGlnaHRGcm9udCArPSBzYXR1cmF0ZSggZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR2TGlnaHRCYWNrICs9IHNhdHVyYXRlKCAtZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcblx0XHQjZW5kaWZcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuI2VuZGlmXG4jaWYgTlVNX0RJUl9MSUdIVFMgPiAwXG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0RJUl9MSUdIVFM7IGkgKysgKSB7XG5cdFx0Z2V0RGlyZWN0aW9uYWxEaXJlY3RMaWdodElycmFkaWFuY2UoIGRpcmVjdGlvbmFsTGlnaHRzWyBpIF0sIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApO1xuXHRcdGRvdE5MID0gZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApO1xuXHRcdGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZSA9IFBJICogZGlyZWN0TGlnaHQuY29sb3I7XG5cdFx0dkxpZ2h0RnJvbnQgKz0gc2F0dXJhdGUoIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG5cdFx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdFx0dkxpZ2h0QmFjayArPSBzYXR1cmF0ZSggLWRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG5cdFx0I2VuZGlmXG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcbiNlbmRpZlxuI2lmIE5VTV9IRU1JX0xJR0hUUyA+IDBcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fSEVNSV9MSUdIVFM7IGkgKysgKSB7XG5cdFx0dkluZGlyZWN0RnJvbnQgKz0gZ2V0SGVtaXNwaGVyZUxpZ2h0SXJyYWRpYW5jZSggaGVtaXNwaGVyZUxpZ2h0c1sgaSBdLCBnZW9tZXRyeSApO1xuXHRcdCNpZmRlZiBET1VCTEVfU0lERURcblx0XHRcdHZJbmRpcmVjdEJhY2sgKz0gZ2V0SGVtaXNwaGVyZUxpZ2h0SXJyYWRpYW5jZSggaGVtaXNwaGVyZUxpZ2h0c1sgaSBdLCBiYWNrR2VvbWV0cnkgKTtcblx0XHQjZW5kaWZcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuI2VuZGlmIixsaWdodHNfcGFyc19iZWdpbjoidW5pZm9ybSBib29sIHJlY2VpdmVTaGFkb3c7XG51bmlmb3JtIHZlYzMgYW1iaWVudExpZ2h0Q29sb3I7XG51bmlmb3JtIHZlYzMgbGlnaHRQcm9iZVsgOSBdO1xudmVjMyBzaEdldElycmFkaWFuY2VBdCggaW4gdmVjMyBub3JtYWwsIGluIHZlYzMgc2hDb2VmZmljaWVudHNbIDkgXSApIHtcblx0ZmxvYXQgeCA9IG5vcm1hbC54LCB5ID0gbm9ybWFsLnksIHogPSBub3JtYWwuejtcblx0dmVjMyByZXN1bHQgPSBzaENvZWZmaWNpZW50c1sgMCBdICogMC44ODYyMjc7XG5cdHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgMSBdICogMi4wICogMC41MTE2NjQgKiB5O1xuXHRyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDIgXSAqIDIuMCAqIDAuNTExNjY0ICogejtcblx0cmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyAzIF0gKiAyLjAgKiAwLjUxMTY2NCAqIHg7XG5cdHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgNCBdICogMi4wICogMC40MjkwNDMgKiB4ICogeTtcblx0cmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA1IF0gKiAyLjAgKiAwLjQyOTA0MyAqIHkgKiB6O1xuXHRyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDYgXSAqICggMC43NDMxMjUgKiB6ICogeiAtIDAuMjQ3NzA4ICk7XG5cdHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgNyBdICogMi4wICogMC40MjkwNDMgKiB4ICogejtcblx0cmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA4IF0gKiAwLjQyOTA0MyAqICggeCAqIHggLSB5ICogeSApO1xuXHRyZXR1cm4gcmVzdWx0O1xufVxudmVjMyBnZXRMaWdodFByb2JlSXJyYWRpYW5jZSggY29uc3QgaW4gdmVjMyBsaWdodFByb2JlWyA5IF0sIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnkgKSB7XG5cdHZlYzMgd29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBnZW9tZXRyeS5ub3JtYWwsIHZpZXdNYXRyaXggKTtcblx0dmVjMyBpcnJhZGlhbmNlID0gc2hHZXRJcnJhZGlhbmNlQXQoIHdvcmxkTm9ybWFsLCBsaWdodFByb2JlICk7XG5cdHJldHVybiBpcnJhZGlhbmNlO1xufVxudmVjMyBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIGFtYmllbnRMaWdodENvbG9yICkge1xuXHR2ZWMzIGlycmFkaWFuY2UgPSBhbWJpZW50TGlnaHRDb2xvcjtcblx0I2lmbmRlZiBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTXG5cdFx0aXJyYWRpYW5jZSAqPSBQSTtcblx0I2VuZGlmXG5cdHJldHVybiBpcnJhZGlhbmNlO1xufVxuI2lmIE5VTV9ESVJfTElHSFRTID4gMFxuXHRzdHJ1Y3QgRGlyZWN0aW9uYWxMaWdodCB7XG5cdFx0dmVjMyBkaXJlY3Rpb247XG5cdFx0dmVjMyBjb2xvcjtcblx0fTtcblx0dW5pZm9ybSBEaXJlY3Rpb25hbExpZ2h0IGRpcmVjdGlvbmFsTGlnaHRzWyBOVU1fRElSX0xJR0hUUyBdO1xuXHR2b2lkIGdldERpcmVjdGlvbmFsRGlyZWN0TGlnaHRJcnJhZGlhbmNlKCBjb25zdCBpbiBEaXJlY3Rpb25hbExpZ2h0IGRpcmVjdGlvbmFsTGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIG91dCBJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0ICkge1xuXHRcdGRpcmVjdExpZ2h0LmNvbG9yID0gZGlyZWN0aW9uYWxMaWdodC5jb2xvcjtcblx0XHRkaXJlY3RMaWdodC5kaXJlY3Rpb24gPSBkaXJlY3Rpb25hbExpZ2h0LmRpcmVjdGlvbjtcblx0XHRkaXJlY3RMaWdodC52aXNpYmxlID0gdHJ1ZTtcblx0fVxuI2VuZGlmXG4jaWYgTlVNX1BPSU5UX0xJR0hUUyA+IDBcblx0c3RydWN0IFBvaW50TGlnaHQge1xuXHRcdHZlYzMgcG9zaXRpb247XG5cdFx0dmVjMyBjb2xvcjtcblx0XHRmbG9hdCBkaXN0YW5jZTtcblx0XHRmbG9hdCBkZWNheTtcblx0fTtcblx0dW5pZm9ybSBQb2ludExpZ2h0IHBvaW50TGlnaHRzWyBOVU1fUE9JTlRfTElHSFRTIF07XG5cdHZvaWQgZ2V0UG9pbnREaXJlY3RMaWdodElycmFkaWFuY2UoIGNvbnN0IGluIFBvaW50TGlnaHQgcG9pbnRMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgb3V0IEluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQgKSB7XG5cdFx0dmVjMyBsVmVjdG9yID0gcG9pbnRMaWdodC5wb3NpdGlvbiAtIGdlb21ldHJ5LnBvc2l0aW9uO1xuXHRcdGRpcmVjdExpZ2h0LmRpcmVjdGlvbiA9IG5vcm1hbGl6ZSggbFZlY3RvciApO1xuXHRcdGZsb2F0IGxpZ2h0RGlzdGFuY2UgPSBsZW5ndGgoIGxWZWN0b3IgKTtcblx0XHRkaXJlY3RMaWdodC5jb2xvciA9IHBvaW50TGlnaHQuY29sb3I7XG5cdFx0ZGlyZWN0TGlnaHQuY29sb3IgKj0gcHVuY3R1YWxMaWdodEludGVuc2l0eVRvSXJyYWRpYW5jZUZhY3RvciggbGlnaHREaXN0YW5jZSwgcG9pbnRMaWdodC5kaXN0YW5jZSwgcG9pbnRMaWdodC5kZWNheSApO1xuXHRcdGRpcmVjdExpZ2h0LnZpc2libGUgPSAoIGRpcmVjdExpZ2h0LmNvbG9yICE9IHZlYzMoIDAuMCApICk7XG5cdH1cbiNlbmRpZlxuI2lmIE5VTV9TUE9UX0xJR0hUUyA+IDBcblx0c3RydWN0IFNwb3RMaWdodCB7XG5cdFx0dmVjMyBwb3NpdGlvbjtcblx0XHR2ZWMzIGRpcmVjdGlvbjtcblx0XHR2ZWMzIGNvbG9yO1xuXHRcdGZsb2F0IGRpc3RhbmNlO1xuXHRcdGZsb2F0IGRlY2F5O1xuXHRcdGZsb2F0IGNvbmVDb3M7XG5cdFx0ZmxvYXQgcGVudW1icmFDb3M7XG5cdH07XG5cdHVuaWZvcm0gU3BvdExpZ2h0IHNwb3RMaWdodHNbIE5VTV9TUE9UX0xJR0hUUyBdO1xuXHR2b2lkIGdldFNwb3REaXJlY3RMaWdodElycmFkaWFuY2UoIGNvbnN0IGluIFNwb3RMaWdodCBzcG90TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIG91dCBJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0ICkge1xuXHRcdHZlYzMgbFZlY3RvciA9IHNwb3RMaWdodC5wb3NpdGlvbiAtIGdlb21ldHJ5LnBvc2l0aW9uO1xuXHRcdGRpcmVjdExpZ2h0LmRpcmVjdGlvbiA9IG5vcm1hbGl6ZSggbFZlY3RvciApO1xuXHRcdGZsb2F0IGxpZ2h0RGlzdGFuY2UgPSBsZW5ndGgoIGxWZWN0b3IgKTtcblx0XHRmbG9hdCBhbmdsZUNvcyA9IGRvdCggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBzcG90TGlnaHQuZGlyZWN0aW9uICk7XG5cdFx0aWYgKCBhbmdsZUNvcyA+IHNwb3RMaWdodC5jb25lQ29zICkge1xuXHRcdFx0ZmxvYXQgc3BvdEVmZmVjdCA9IHNtb290aHN0ZXAoIHNwb3RMaWdodC5jb25lQ29zLCBzcG90TGlnaHQucGVudW1icmFDb3MsIGFuZ2xlQ29zICk7XG5cdFx0XHRkaXJlY3RMaWdodC5jb2xvciA9IHNwb3RMaWdodC5jb2xvcjtcblx0XHRcdGRpcmVjdExpZ2h0LmNvbG9yICo9IHNwb3RFZmZlY3QgKiBwdW5jdHVhbExpZ2h0SW50ZW5zaXR5VG9JcnJhZGlhbmNlRmFjdG9yKCBsaWdodERpc3RhbmNlLCBzcG90TGlnaHQuZGlzdGFuY2UsIHNwb3RMaWdodC5kZWNheSApO1xuXHRcdFx0ZGlyZWN0TGlnaHQudmlzaWJsZSA9IHRydWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRpcmVjdExpZ2h0LmNvbG9yID0gdmVjMyggMC4wICk7XG5cdFx0XHRkaXJlY3RMaWdodC52aXNpYmxlID0gZmFsc2U7XG5cdFx0fVxuXHR9XG4jZW5kaWZcbiNpZiBOVU1fUkVDVF9BUkVBX0xJR0hUUyA+IDBcblx0c3RydWN0IFJlY3RBcmVhTGlnaHQge1xuXHRcdHZlYzMgY29sb3I7XG5cdFx0dmVjMyBwb3NpdGlvbjtcblx0XHR2ZWMzIGhhbGZXaWR0aDtcblx0XHR2ZWMzIGhhbGZIZWlnaHQ7XG5cdH07XG5cdHVuaWZvcm0gc2FtcGxlcjJEIGx0Y18xO1x0dW5pZm9ybSBzYW1wbGVyMkQgbHRjXzI7XG5cdHVuaWZvcm0gUmVjdEFyZWFMaWdodCByZWN0QXJlYUxpZ2h0c1sgTlVNX1JFQ1RfQVJFQV9MSUdIVFMgXTtcbiNlbmRpZlxuI2lmIE5VTV9IRU1JX0xJR0hUUyA+IDBcblx0c3RydWN0IEhlbWlzcGhlcmVMaWdodCB7XG5cdFx0dmVjMyBkaXJlY3Rpb247XG5cdFx0dmVjMyBza3lDb2xvcjtcblx0XHR2ZWMzIGdyb3VuZENvbG9yO1xuXHR9O1xuXHR1bmlmb3JtIEhlbWlzcGhlcmVMaWdodCBoZW1pc3BoZXJlTGlnaHRzWyBOVU1fSEVNSV9MSUdIVFMgXTtcblx0dmVjMyBnZXRIZW1pc3BoZXJlTGlnaHRJcnJhZGlhbmNlKCBjb25zdCBpbiBIZW1pc3BoZXJlTGlnaHQgaGVtaUxpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5ICkge1xuXHRcdGZsb2F0IGRvdE5MID0gZG90KCBnZW9tZXRyeS5ub3JtYWwsIGhlbWlMaWdodC5kaXJlY3Rpb24gKTtcblx0XHRmbG9hdCBoZW1pRGlmZnVzZVdlaWdodCA9IDAuNSAqIGRvdE5MICsgMC41O1xuXHRcdHZlYzMgaXJyYWRpYW5jZSA9IG1peCggaGVtaUxpZ2h0Lmdyb3VuZENvbG9yLCBoZW1pTGlnaHQuc2t5Q29sb3IsIGhlbWlEaWZmdXNlV2VpZ2h0ICk7XG5cdFx0I2lmbmRlZiBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTXG5cdFx0XHRpcnJhZGlhbmNlICo9IFBJO1xuXHRcdCNlbmRpZlxuXHRcdHJldHVybiBpcnJhZGlhbmNlO1xuXHR9XG4jZW5kaWYiLGxpZ2h0c190b29uX2ZyYWdtZW50OiJUb29uTWF0ZXJpYWwgbWF0ZXJpYWw7XG5tYXRlcmlhbC5kaWZmdXNlQ29sb3IgPSBkaWZmdXNlQ29sb3IucmdiOyIsbGlnaHRzX3Rvb25fcGFyc19mcmFnbWVudDoidmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xuI2VuZGlmXG5zdHJ1Y3QgVG9vbk1hdGVyaWFsIHtcblx0dmVjMyBkaWZmdXNlQ29sb3I7XG59O1xudm9pZCBSRV9EaXJlY3RfVG9vbiggY29uc3QgaW4gSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gVG9vbk1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0dmVjMyBpcnJhZGlhbmNlID0gZ2V0R3JhZGllbnRJcnJhZGlhbmNlKCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApICogZGlyZWN0TGlnaHQuY29sb3I7XG5cdCNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUU1xuXHRcdGlycmFkaWFuY2UgKj0gUEk7XG5cdCNlbmRpZlxuXHRyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0RpZmZ1c2VfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7XG59XG52b2lkIFJFX0luZGlyZWN0RGlmZnVzZV9Ub29uKCBjb25zdCBpbiB2ZWMzIGlycmFkaWFuY2UsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFRvb25NYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7XG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9EaWZmdXNlX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xufVxuI2RlZmluZSBSRV9EaXJlY3RcdFx0XHRcdFJFX0RpcmVjdF9Ub29uXG4jZGVmaW5lIFJFX0luZGlyZWN0RGlmZnVzZVx0XHRSRV9JbmRpcmVjdERpZmZ1c2VfVG9vblxuI2RlZmluZSBNYXRlcmlhbF9MaWdodFByb2JlTE9EKCBtYXRlcmlhbCApXHQoMCkiLGxpZ2h0c19waG9uZ19mcmFnbWVudDoiQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsO1xubWF0ZXJpYWwuZGlmZnVzZUNvbG9yID0gZGlmZnVzZUNvbG9yLnJnYjtcbm1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgPSBzcGVjdWxhcjtcbm1hdGVyaWFsLnNwZWN1bGFyU2hpbmluZXNzID0gc2hpbmluZXNzO1xubWF0ZXJpYWwuc3BlY3VsYXJTdHJlbmd0aCA9IHNwZWN1bGFyU3RyZW5ndGg7IixsaWdodHNfcGhvbmdfcGFyc19mcmFnbWVudDoidmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xuI2VuZGlmXG5zdHJ1Y3QgQmxpbm5QaG9uZ01hdGVyaWFsIHtcblx0dmVjMyBkaWZmdXNlQ29sb3I7XG5cdHZlYzMgc3BlY3VsYXJDb2xvcjtcblx0ZmxvYXQgc3BlY3VsYXJTaGluaW5lc3M7XG5cdGZsb2F0IHNwZWN1bGFyU3RyZW5ndGg7XG59O1xudm9pZCBSRV9EaXJlY3RfQmxpbm5QaG9uZyggY29uc3QgaW4gSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0ZmxvYXQgZG90TkwgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApICk7XG5cdHZlYzMgaXJyYWRpYW5jZSA9IGRvdE5MICogZGlyZWN0TGlnaHQuY29sb3I7XG5cdCNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUU1xuXHRcdGlycmFkaWFuY2UgKj0gUEk7XG5cdCNlbmRpZlxuXHRyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0RpZmZ1c2VfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7XG5cdHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBCUkRGX1NwZWN1bGFyX0JsaW5uUGhvbmcoIGRpcmVjdExpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciwgbWF0ZXJpYWwuc3BlY3VsYXJTaGluaW5lc3MgKSAqIG1hdGVyaWFsLnNwZWN1bGFyU3RyZW5ndGg7XG59XG52b2lkIFJFX0luZGlyZWN0RGlmZnVzZV9CbGlublBob25nKCBjb25zdCBpbiB2ZWMzIGlycmFkaWFuY2UsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIEJsaW5uUGhvbmdNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7XG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9EaWZmdXNlX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xufVxuI2RlZmluZSBSRV9EaXJlY3RcdFx0XHRcdFJFX0RpcmVjdF9CbGlublBob25nXG4jZGVmaW5lIFJFX0luZGlyZWN0RGlmZnVzZVx0XHRSRV9JbmRpcmVjdERpZmZ1c2VfQmxpbm5QaG9uZ1xuI2RlZmluZSBNYXRlcmlhbF9MaWdodFByb2JlTE9EKCBtYXRlcmlhbCApXHQoMCkiLGxpZ2h0c19waHlzaWNhbF9mcmFnbWVudDoiUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbDtcbm1hdGVyaWFsLmRpZmZ1c2VDb2xvciA9IGRpZmZ1c2VDb2xvci5yZ2IgKiAoIDEuMCAtIG1ldGFsbmVzc0ZhY3RvciApO1xudmVjMyBkeHkgPSBtYXgoIGFicyggZEZkeCggZ2VvbWV0cnlOb3JtYWwgKSApLCBhYnMoIGRGZHkoIGdlb21ldHJ5Tm9ybWFsICkgKSApO1xuZmxvYXQgZ2VvbWV0cnlSb3VnaG5lc3MgPSBtYXgoIG1heCggZHh5LngsIGR4eS55ICksIGR4eS56ICk7XG5tYXRlcmlhbC5zcGVjdWxhclJvdWdobmVzcyA9IG1heCggcm91Z2huZXNzRmFjdG9yLCAwLjA1MjUgKTttYXRlcmlhbC5zcGVjdWxhclJvdWdobmVzcyArPSBnZW9tZXRyeVJvdWdobmVzcztcbm1hdGVyaWFsLnNwZWN1bGFyUm91Z2huZXNzID0gbWluKCBtYXRlcmlhbC5zcGVjdWxhclJvdWdobmVzcywgMS4wICk7XG4jaWZkZWYgUkVGTEVDVElWSVRZXG5cdG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgPSBtaXgoIHZlYzMoIE1BWElNVU1fU1BFQ1VMQVJfQ09FRkZJQ0lFTlQgKiBwb3cyKCByZWZsZWN0aXZpdHkgKSApLCBkaWZmdXNlQ29sb3IucmdiLCBtZXRhbG5lc3NGYWN0b3IgKTtcbiNlbHNlXG5cdG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgPSBtaXgoIHZlYzMoIERFRkFVTFRfU1BFQ1VMQVJfQ09FRkZJQ0lFTlQgKSwgZGlmZnVzZUNvbG9yLnJnYiwgbWV0YWxuZXNzRmFjdG9yICk7XG4jZW5kaWZcbiNpZmRlZiBDTEVBUkNPQVRcblx0bWF0ZXJpYWwuY2xlYXJjb2F0ID0gY2xlYXJjb2F0O1xuXHRtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgPSBjbGVhcmNvYXRSb3VnaG5lc3M7XG5cdCNpZmRlZiBVU0VfQ0xFQVJDT0FUTUFQXG5cdFx0bWF0ZXJpYWwuY2xlYXJjb2F0ICo9IHRleHR1cmUyRCggY2xlYXJjb2F0TWFwLCB2VXYgKS54O1xuXHQjZW5kaWZcblx0I2lmZGVmIFVTRV9DTEVBUkNPQVRfUk9VR0hORVNTTUFQXG5cdFx0bWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzICo9IHRleHR1cmUyRCggY2xlYXJjb2F0Um91Z2huZXNzTWFwLCB2VXYgKS55O1xuXHQjZW5kaWZcblx0bWF0ZXJpYWwuY2xlYXJjb2F0ID0gc2F0dXJhdGUoIG1hdGVyaWFsLmNsZWFyY29hdCApO1x0bWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzID0gbWF4KCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MsIDAuMDUyNSApO1xuXHRtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKz0gZ2VvbWV0cnlSb3VnaG5lc3M7XG5cdG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyA9IG1pbiggbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzLCAxLjAgKTtcbiNlbmRpZlxuI2lmZGVmIFVTRV9TSEVFTlxuXHRtYXRlcmlhbC5zaGVlbkNvbG9yID0gc2hlZW47XG4jZW5kaWYiLGxpZ2h0c19waHlzaWNhbF9wYXJzX2ZyYWdtZW50OiJzdHJ1Y3QgUGh5c2ljYWxNYXRlcmlhbCB7XG5cdHZlYzMgZGlmZnVzZUNvbG9yO1xuXHRmbG9hdCBzcGVjdWxhclJvdWdobmVzcztcblx0dmVjMyBzcGVjdWxhckNvbG9yO1xuI2lmZGVmIENMRUFSQ09BVFxuXHRmbG9hdCBjbGVhcmNvYXQ7XG5cdGZsb2F0IGNsZWFyY29hdFJvdWdobmVzcztcbiNlbmRpZlxuI2lmZGVmIFVTRV9TSEVFTlxuXHR2ZWMzIHNoZWVuQ29sb3I7XG4jZW5kaWZcbn07XG4jZGVmaW5lIE1BWElNVU1fU1BFQ1VMQVJfQ09FRkZJQ0lFTlQgMC4xNlxuI2RlZmluZSBERUZBVUxUX1NQRUNVTEFSX0NPRUZGSUNJRU5UIDAuMDRcbmZsb2F0IGNsZWFyY29hdERIUkFwcHJveCggY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzLCBjb25zdCBpbiBmbG9hdCBkb3ROTCApIHtcblx0cmV0dXJuIERFRkFVTFRfU1BFQ1VMQVJfQ09FRkZJQ0lFTlQgKyAoIDEuMCAtIERFRkFVTFRfU1BFQ1VMQVJfQ09FRkZJQ0lFTlQgKSAqICggcG93KCAxLjAgLSBkb3ROTCwgNS4wICkgKiBwb3coIDEuMCAtIHJvdWdobmVzcywgMi4wICkgKTtcbn1cbiNpZiBOVU1fUkVDVF9BUkVBX0xJR0hUUyA+IDBcblx0dm9pZCBSRV9EaXJlY3RfUmVjdEFyZWFfUGh5c2ljYWwoIGNvbnN0IGluIFJlY3RBcmVhTGlnaHQgcmVjdEFyZWFMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7XG5cdFx0dmVjMyBub3JtYWwgPSBnZW9tZXRyeS5ub3JtYWw7XG5cdFx0dmVjMyB2aWV3RGlyID0gZ2VvbWV0cnkudmlld0Rpcjtcblx0XHR2ZWMzIHBvc2l0aW9uID0gZ2VvbWV0cnkucG9zaXRpb247XG5cdFx0dmVjMyBsaWdodFBvcyA9IHJlY3RBcmVhTGlnaHQucG9zaXRpb247XG5cdFx0dmVjMyBoYWxmV2lkdGggPSByZWN0QXJlYUxpZ2h0LmhhbGZXaWR0aDtcblx0XHR2ZWMzIGhhbGZIZWlnaHQgPSByZWN0QXJlYUxpZ2h0LmhhbGZIZWlnaHQ7XG5cdFx0dmVjMyBsaWdodENvbG9yID0gcmVjdEFyZWFMaWdodC5jb2xvcjtcblx0XHRmbG9hdCByb3VnaG5lc3MgPSBtYXRlcmlhbC5zcGVjdWxhclJvdWdobmVzcztcblx0XHR2ZWMzIHJlY3RDb29yZHNbIDQgXTtcblx0XHRyZWN0Q29vcmRzWyAwIF0gPSBsaWdodFBvcyArIGhhbGZXaWR0aCAtIGhhbGZIZWlnaHQ7XHRcdHJlY3RDb29yZHNbIDEgXSA9IGxpZ2h0UG9zIC0gaGFsZldpZHRoIC0gaGFsZkhlaWdodDtcblx0XHRyZWN0Q29vcmRzWyAyIF0gPSBsaWdodFBvcyAtIGhhbGZXaWR0aCArIGhhbGZIZWlnaHQ7XG5cdFx0cmVjdENvb3Jkc1sgMyBdID0gbGlnaHRQb3MgKyBoYWxmV2lkdGggKyBoYWxmSGVpZ2h0O1xuXHRcdHZlYzIgdXYgPSBMVENfVXYoIG5vcm1hbCwgdmlld0Rpciwgcm91Z2huZXNzICk7XG5cdFx0dmVjNCB0MSA9IHRleHR1cmUyRCggbHRjXzEsIHV2ICk7XG5cdFx0dmVjNCB0MiA9IHRleHR1cmUyRCggbHRjXzIsIHV2ICk7XG5cdFx0bWF0MyBtSW52ID0gbWF0Myhcblx0XHRcdHZlYzMoIHQxLngsIDAsIHQxLnkgKSxcblx0XHRcdHZlYzMoICAgIDAsIDEsICAgIDAgKSxcblx0XHRcdHZlYzMoIHQxLnosIDAsIHQxLncgKVxuXHRcdCk7XG5cdFx0dmVjMyBmcmVzbmVsID0gKCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yICogdDIueCArICggdmVjMyggMS4wICkgLSBtYXRlcmlhbC5zcGVjdWxhckNvbG9yICkgKiB0Mi55ICk7XG5cdFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKz0gbGlnaHRDb2xvciAqIGZyZXNuZWwgKiBMVENfRXZhbHVhdGUoIG5vcm1hbCwgdmlld0RpciwgcG9zaXRpb24sIG1JbnYsIHJlY3RDb29yZHMgKTtcblx0XHRyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICs9IGxpZ2h0Q29sb3IgKiBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKiBMVENfRXZhbHVhdGUoIG5vcm1hbCwgdmlld0RpciwgcG9zaXRpb24sIG1hdDMoIDEuMCApLCByZWN0Q29vcmRzICk7XG5cdH1cbiNlbmRpZlxudm9pZCBSRV9EaXJlY3RfUGh5c2ljYWwoIGNvbnN0IGluIEluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xuXHRmbG9hdCBkb3ROTCA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICkgKTtcblx0dmVjMyBpcnJhZGlhbmNlID0gZG90TkwgKiBkaXJlY3RMaWdodC5jb2xvcjtcblx0I2lmbmRlZiBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTXG5cdFx0aXJyYWRpYW5jZSAqPSBQSTtcblx0I2VuZGlmXG5cdCNpZmRlZiBDTEVBUkNPQVRcblx0XHRmbG9hdCBjY0RvdE5MID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSApO1xuXHRcdHZlYzMgY2NJcnJhZGlhbmNlID0gY2NEb3ROTCAqIGRpcmVjdExpZ2h0LmNvbG9yO1xuXHRcdCNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUU1xuXHRcdFx0Y2NJcnJhZGlhbmNlICo9IFBJO1xuXHRcdCNlbmRpZlxuXHRcdGZsb2F0IGNsZWFyY29hdERIUiA9IG1hdGVyaWFsLmNsZWFyY29hdCAqIGNsZWFyY29hdERIUkFwcHJveCggbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzLCBjY0RvdE5MICk7XG5cdFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKz0gY2NJcnJhZGlhbmNlICogbWF0ZXJpYWwuY2xlYXJjb2F0ICogQlJERl9TcGVjdWxhcl9HR1goIGRpcmVjdExpZ2h0LCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIHZlYzMoIERFRkFVTFRfU1BFQ1VMQVJfQ09FRkZJQ0lFTlQgKSwgbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzICk7XG5cdCNlbHNlXG5cdFx0ZmxvYXQgY2xlYXJjb2F0REhSID0gMC4wO1xuXHQjZW5kaWZcblx0I2lmZGVmIFVTRV9TSEVFTlxuXHRcdHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICs9ICggMS4wIC0gY2xlYXJjb2F0REhSICkgKiBpcnJhZGlhbmNlICogQlJERl9TcGVjdWxhcl9TaGVlbihcblx0XHRcdG1hdGVyaWFsLnNwZWN1bGFyUm91Z2huZXNzLFxuXHRcdFx0ZGlyZWN0TGlnaHQuZGlyZWN0aW9uLFxuXHRcdFx0Z2VvbWV0cnksXG5cdFx0XHRtYXRlcmlhbC5zaGVlbkNvbG9yXG5cdFx0KTtcblx0I2Vsc2Vcblx0XHRyZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArPSAoIDEuMCAtIGNsZWFyY29hdERIUiApICogaXJyYWRpYW5jZSAqIEJSREZfU3BlY3VsYXJfR0dYKCBkaXJlY3RMaWdodCwgZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkubm9ybWFsLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhclJvdWdobmVzcyk7XG5cdCNlbmRpZlxuXHRyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICs9ICggMS4wIC0gY2xlYXJjb2F0REhSICkgKiBpcnJhZGlhbmNlICogQlJERl9EaWZmdXNlX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xufVxudm9pZCBSRV9JbmRpcmVjdERpZmZ1c2VfUGh5c2ljYWwoIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7XG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9EaWZmdXNlX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xufVxudm9pZCBSRV9JbmRpcmVjdFNwZWN1bGFyX1BoeXNpY2FsKCBjb25zdCBpbiB2ZWMzIHJhZGlhbmNlLCBjb25zdCBpbiB2ZWMzIGlycmFkaWFuY2UsIGNvbnN0IGluIHZlYzMgY2xlYXJjb2F0UmFkaWFuY2UsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0KSB7XG5cdCNpZmRlZiBDTEVBUkNPQVRcblx0XHRmbG9hdCBjY0RvdE5WID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyICkgKTtcblx0XHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICs9IGNsZWFyY29hdFJhZGlhbmNlICogbWF0ZXJpYWwuY2xlYXJjb2F0ICogQlJERl9TcGVjdWxhcl9HR1hfRW52aXJvbm1lbnQoIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5LmNsZWFyY29hdE5vcm1hbCwgdmVjMyggREVGQVVMVF9TUEVDVUxBUl9DT0VGRklDSUVOVCApLCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKTtcblx0XHRmbG9hdCBjY0RvdE5MID0gY2NEb3ROVjtcblx0XHRmbG9hdCBjbGVhcmNvYXRESFIgPSBtYXRlcmlhbC5jbGVhcmNvYXQgKiBjbGVhcmNvYXRESFJBcHByb3goIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcywgY2NEb3ROTCApO1xuXHQjZWxzZVxuXHRcdGZsb2F0IGNsZWFyY29hdERIUiA9IDAuMDtcblx0I2VuZGlmXG5cdGZsb2F0IGNsZWFyY29hdEludiA9IDEuMCAtIGNsZWFyY29hdERIUjtcblx0dmVjMyBzaW5nbGVTY2F0dGVyaW5nID0gdmVjMyggMC4wICk7XG5cdHZlYzMgbXVsdGlTY2F0dGVyaW5nID0gdmVjMyggMC4wICk7XG5cdHZlYzMgY29zaW5lV2VpZ2h0ZWRJcnJhZGlhbmNlID0gaXJyYWRpYW5jZSAqIFJFQ0lQUk9DQUxfUEk7XG5cdEJSREZfU3BlY3VsYXJfTXVsdGlzY2F0dGVyaW5nX0Vudmlyb25tZW50KCBnZW9tZXRyeSwgbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciwgbWF0ZXJpYWwuc3BlY3VsYXJSb3VnaG5lc3MsIHNpbmdsZVNjYXR0ZXJpbmcsIG11bHRpU2NhdHRlcmluZyApO1xuXHR2ZWMzIGRpZmZ1c2UgPSBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKiAoIDEuMCAtICggc2luZ2xlU2NhdHRlcmluZyArIG11bHRpU2NhdHRlcmluZyApICk7XG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3BlY3VsYXIgKz0gY2xlYXJjb2F0SW52ICogcmFkaWFuY2UgKiBzaW5nbGVTY2F0dGVyaW5nO1xuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICs9IG11bHRpU2NhdHRlcmluZyAqIGNvc2luZVdlaWdodGVkSXJyYWRpYW5jZTtcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGRpZmZ1c2UgKiBjb3NpbmVXZWlnaHRlZElycmFkaWFuY2U7XG59XG4jZGVmaW5lIFJFX0RpcmVjdFx0XHRcdFx0UkVfRGlyZWN0X1BoeXNpY2FsXG4jZGVmaW5lIFJFX0RpcmVjdF9SZWN0QXJlYVx0XHRSRV9EaXJlY3RfUmVjdEFyZWFfUGh5c2ljYWxcbiNkZWZpbmUgUkVfSW5kaXJlY3REaWZmdXNlXHRcdFJFX0luZGlyZWN0RGlmZnVzZV9QaHlzaWNhbFxuI2RlZmluZSBSRV9JbmRpcmVjdFNwZWN1bGFyXHRcdFJFX0luZGlyZWN0U3BlY3VsYXJfUGh5c2ljYWxcbmZsb2F0IGNvbXB1dGVTcGVjdWxhck9jY2x1c2lvbiggY29uc3QgaW4gZmxvYXQgZG90TlYsIGNvbnN0IGluIGZsb2F0IGFtYmllbnRPY2NsdXNpb24sIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHtcblx0cmV0dXJuIHNhdHVyYXRlKCBwb3coIGRvdE5WICsgYW1iaWVudE9jY2x1c2lvbiwgZXhwMiggLSAxNi4wICogcm91Z2huZXNzIC0gMS4wICkgKSAtIDEuMCArIGFtYmllbnRPY2NsdXNpb24gKTtcbn0iLGxpZ2h0c19mcmFnbWVudF9iZWdpbjoiXG5HZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5O1xuZ2VvbWV0cnkucG9zaXRpb24gPSAtIHZWaWV3UG9zaXRpb247XG5nZW9tZXRyeS5ub3JtYWwgPSBub3JtYWw7XG5nZW9tZXRyeS52aWV3RGlyID0gKCBpc09ydGhvZ3JhcGhpYyApID8gdmVjMyggMCwgMCwgMSApIDogbm9ybWFsaXplKCB2Vmlld1Bvc2l0aW9uICk7XG4jaWZkZWYgQ0xFQVJDT0FUXG5cdGdlb21ldHJ5LmNsZWFyY29hdE5vcm1hbCA9IGNsZWFyY29hdE5vcm1hbDtcbiNlbmRpZlxuSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodDtcbiNpZiAoIE5VTV9QT0lOVF9MSUdIVFMgPiAwICkgJiYgZGVmaW5lZCggUkVfRGlyZWN0IClcblx0UG9pbnRMaWdodCBwb2ludExpZ2h0O1xuXHQjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMFxuXHRQb2ludExpZ2h0U2hhZG93IHBvaW50TGlnaHRTaGFkb3c7XG5cdCNlbmRpZlxuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9QT0lOVF9MSUdIVFM7IGkgKysgKSB7XG5cdFx0cG9pbnRMaWdodCA9IHBvaW50TGlnaHRzWyBpIF07XG5cdFx0Z2V0UG9pbnREaXJlY3RMaWdodElycmFkaWFuY2UoIHBvaW50TGlnaHQsIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApO1xuXHRcdCNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgKCBVTlJPTExFRF9MT09QX0lOREVYIDwgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgKVxuXHRcdHBvaW50TGlnaHRTaGFkb3cgPSBwb2ludExpZ2h0U2hhZG93c1sgaSBdO1xuXHRcdGRpcmVjdExpZ2h0LmNvbG9yICo9IGFsbCggYnZlYzIoIGRpcmVjdExpZ2h0LnZpc2libGUsIHJlY2VpdmVTaGFkb3cgKSApID8gZ2V0UG9pbnRTaGFkb3coIHBvaW50U2hhZG93TWFwWyBpIF0sIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93TWFwU2l6ZSwgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dCaWFzLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd1JhZGl1cywgdlBvaW50U2hhZG93Q29vcmRbIGkgXSwgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dDYW1lcmFOZWFyLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd0NhbWVyYUZhciApIDogMS4wO1xuXHRcdCNlbmRpZlxuXHRcdFJFX0RpcmVjdCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuI2VuZGlmXG4jaWYgKCBOVU1fU1BPVF9MSUdIVFMgPiAwICkgJiYgZGVmaW5lZCggUkVfRGlyZWN0IClcblx0U3BvdExpZ2h0IHNwb3RMaWdodDtcblx0I2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMFxuXHRTcG90TGlnaHRTaGFkb3cgc3BvdExpZ2h0U2hhZG93O1xuXHQjZW5kaWZcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fU1BPVF9MSUdIVFM7IGkgKysgKSB7XG5cdFx0c3BvdExpZ2h0ID0gc3BvdExpZ2h0c1sgaSBdO1xuXHRcdGdldFNwb3REaXJlY3RMaWdodElycmFkaWFuY2UoIHNwb3RMaWdodCwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7XG5cdFx0I2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiAoIFVOUk9MTEVEX0xPT1BfSU5ERVggPCBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIClcblx0XHRzcG90TGlnaHRTaGFkb3cgPSBzcG90TGlnaHRTaGFkb3dzWyBpIF07XG5cdFx0ZGlyZWN0TGlnaHQuY29sb3IgKj0gYWxsKCBidmVjMiggZGlyZWN0TGlnaHQudmlzaWJsZSwgcmVjZWl2ZVNoYWRvdyApICkgPyBnZXRTaGFkb3coIHNwb3RTaGFkb3dNYXBbIGkgXSwgc3BvdExpZ2h0U2hhZG93LnNoYWRvd01hcFNpemUsIHNwb3RMaWdodFNoYWRvdy5zaGFkb3dCaWFzLCBzcG90TGlnaHRTaGFkb3cuc2hhZG93UmFkaXVzLCB2U3BvdFNoYWRvd0Nvb3JkWyBpIF0gKSA6IDEuMDtcblx0XHQjZW5kaWZcblx0XHRSRV9EaXJlY3QoIGRpcmVjdExpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7XG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcbiNlbmRpZlxuI2lmICggTlVNX0RJUl9MSUdIVFMgPiAwICkgJiYgZGVmaW5lZCggUkVfRGlyZWN0IClcblx0RGlyZWN0aW9uYWxMaWdodCBkaXJlY3Rpb25hbExpZ2h0O1xuXHQjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmIE5VTV9ESVJfTElHSFRfU0hBRE9XUyA+IDBcblx0RGlyZWN0aW9uYWxMaWdodFNoYWRvdyBkaXJlY3Rpb25hbExpZ2h0U2hhZG93O1xuXHQjZW5kaWZcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fRElSX0xJR0hUUzsgaSArKyApIHtcblx0XHRkaXJlY3Rpb25hbExpZ2h0ID0gZGlyZWN0aW9uYWxMaWdodHNbIGkgXTtcblx0XHRnZXREaXJlY3Rpb25hbERpcmVjdExpZ2h0SXJyYWRpYW5jZSggZGlyZWN0aW9uYWxMaWdodCwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7XG5cdFx0I2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiAoIFVOUk9MTEVEX0xPT1BfSU5ERVggPCBOVU1fRElSX0xJR0hUX1NIQURPV1MgKVxuXHRcdGRpcmVjdGlvbmFsTGlnaHRTaGFkb3cgPSBkaXJlY3Rpb25hbExpZ2h0U2hhZG93c1sgaSBdO1xuXHRcdGRpcmVjdExpZ2h0LmNvbG9yICo9IGFsbCggYnZlYzIoIGRpcmVjdExpZ2h0LnZpc2libGUsIHJlY2VpdmVTaGFkb3cgKSApID8gZ2V0U2hhZG93KCBkaXJlY3Rpb25hbFNoYWRvd01hcFsgaSBdLCBkaXJlY3Rpb25hbExpZ2h0U2hhZG93LnNoYWRvd01hcFNpemUsIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3cuc2hhZG93QmlhcywgZGlyZWN0aW9uYWxMaWdodFNoYWRvdy5zaGFkb3dSYWRpdXMsIHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBpIF0gKSA6IDEuMDtcblx0XHQjZW5kaWZcblx0XHRSRV9EaXJlY3QoIGRpcmVjdExpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7XG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcbiNlbmRpZlxuI2lmICggTlVNX1JFQ1RfQVJFQV9MSUdIVFMgPiAwICkgJiYgZGVmaW5lZCggUkVfRGlyZWN0X1JlY3RBcmVhIClcblx0UmVjdEFyZWFMaWdodCByZWN0QXJlYUxpZ2h0O1xuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9SRUNUX0FSRUFfTElHSFRTOyBpICsrICkge1xuXHRcdHJlY3RBcmVhTGlnaHQgPSByZWN0QXJlYUxpZ2h0c1sgaSBdO1xuXHRcdFJFX0RpcmVjdF9SZWN0QXJlYSggcmVjdEFyZWFMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApO1xuXHR9XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG4jZW5kaWZcbiNpZiBkZWZpbmVkKCBSRV9JbmRpcmVjdERpZmZ1c2UgKVxuXHR2ZWMzIGlibElycmFkaWFuY2UgPSB2ZWMzKCAwLjAgKTtcblx0dmVjMyBpcnJhZGlhbmNlID0gZ2V0QW1iaWVudExpZ2h0SXJyYWRpYW5jZSggYW1iaWVudExpZ2h0Q29sb3IgKTtcblx0aXJyYWRpYW5jZSArPSBnZXRMaWdodFByb2JlSXJyYWRpYW5jZSggbGlnaHRQcm9iZSwgZ2VvbWV0cnkgKTtcblx0I2lmICggTlVNX0hFTUlfTElHSFRTID4gMCApXG5cdFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRcdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9IRU1JX0xJR0hUUzsgaSArKyApIHtcblx0XHRcdGlycmFkaWFuY2UgKz0gZ2V0SGVtaXNwaGVyZUxpZ2h0SXJyYWRpYW5jZSggaGVtaXNwaGVyZUxpZ2h0c1sgaSBdLCBnZW9tZXRyeSApO1xuXHRcdH1cblx0XHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuXHQjZW5kaWZcbiNlbmRpZlxuI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0U3BlY3VsYXIgKVxuXHR2ZWMzIHJhZGlhbmNlID0gdmVjMyggMC4wICk7XG5cdHZlYzMgY2xlYXJjb2F0UmFkaWFuY2UgPSB2ZWMzKCAwLjAgKTtcbiNlbmRpZiIsbGlnaHRzX2ZyYWdtZW50X21hcHM6IiNpZiBkZWZpbmVkKCBSRV9JbmRpcmVjdERpZmZ1c2UgKVxuXHQjaWZkZWYgVVNFX0xJR0hUTUFQXG5cdFx0dmVjNCBsaWdodE1hcFRleGVsPSB0ZXh0dXJlMkQoIGxpZ2h0TWFwLCB2VXYyICk7XG5cdFx0dmVjMyBsaWdodE1hcElycmFkaWFuY2UgPSBsaWdodE1hcFRleGVsVG9MaW5lYXIoIGxpZ2h0TWFwVGV4ZWwgKS5yZ2IgKiBsaWdodE1hcEludGVuc2l0eTtcblx0XHQjaWZuZGVmIFBIWVNJQ0FMTFlfQ09SUkVDVF9MSUdIVFNcblx0XHRcdGxpZ2h0TWFwSXJyYWRpYW5jZSAqPSBQSTtcblx0XHQjZW5kaWZcblx0XHRpcnJhZGlhbmNlICs9IGxpZ2h0TWFwSXJyYWRpYW5jZTtcblx0I2VuZGlmXG5cdCNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgJiYgZGVmaW5lZCggU1RBTkRBUkQgKSAmJiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWIClcblx0XHRpYmxJcnJhZGlhbmNlICs9IGdldExpZ2h0UHJvYmVJbmRpcmVjdElycmFkaWFuY2UoIGdlb21ldHJ5LCBtYXhNaXBMZXZlbCApO1xuXHQjZW5kaWZcbiNlbmRpZlxuI2lmIGRlZmluZWQoIFVTRV9FTlZNQVAgKSAmJiBkZWZpbmVkKCBSRV9JbmRpcmVjdFNwZWN1bGFyIClcblx0cmFkaWFuY2UgKz0gZ2V0TGlnaHRQcm9iZUluZGlyZWN0UmFkaWFuY2UoIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5Lm5vcm1hbCwgbWF0ZXJpYWwuc3BlY3VsYXJSb3VnaG5lc3MsIG1heE1pcExldmVsICk7XG5cdCNpZmRlZiBDTEVBUkNPQVRcblx0XHRjbGVhcmNvYXRSYWRpYW5jZSArPSBnZXRMaWdodFByb2JlSW5kaXJlY3RSYWRpYW5jZSggZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MsIG1heE1pcExldmVsICk7XG5cdCNlbmRpZlxuI2VuZGlmIixsaWdodHNfZnJhZ21lbnRfZW5kOiIjaWYgZGVmaW5lZCggUkVfSW5kaXJlY3REaWZmdXNlIClcblx0UkVfSW5kaXJlY3REaWZmdXNlKCBpcnJhZGlhbmNlLCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7XG4jZW5kaWZcbiNpZiBkZWZpbmVkKCBSRV9JbmRpcmVjdFNwZWN1bGFyIClcblx0UkVfSW5kaXJlY3RTcGVjdWxhciggcmFkaWFuY2UsIGlibElycmFkaWFuY2UsIGNsZWFyY29hdFJhZGlhbmNlLCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7XG4jZW5kaWYiLGxvZ2RlcHRoYnVmX2ZyYWdtZW50OiIjaWYgZGVmaW5lZCggVVNFX0xPR0RFUFRIQlVGICkgJiYgZGVmaW5lZCggVVNFX0xPR0RFUFRIQlVGX0VYVCApXG5cdGdsX0ZyYWdEZXB0aEVYVCA9IHZJc1BlcnNwZWN0aXZlID09IDAuMCA/IGdsX0ZyYWdDb29yZC56IDogbG9nMiggdkZyYWdEZXB0aCApICogbG9nRGVwdGhCdWZGQyAqIDAuNTtcbiNlbmRpZiIsbG9nZGVwdGhidWZfcGFyc19mcmFnbWVudDoiI2lmIGRlZmluZWQoIFVTRV9MT0dERVBUSEJVRiApICYmIGRlZmluZWQoIFVTRV9MT0dERVBUSEJVRl9FWFQgKVxuXHR1bmlmb3JtIGZsb2F0IGxvZ0RlcHRoQnVmRkM7XG5cdHZhcnlpbmcgZmxvYXQgdkZyYWdEZXB0aDtcblx0dmFyeWluZyBmbG9hdCB2SXNQZXJzcGVjdGl2ZTtcbiNlbmRpZiIsbG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfTE9HREVQVEhCVUZcblx0I2lmZGVmIFVTRV9MT0dERVBUSEJVRl9FWFRcblx0XHR2YXJ5aW5nIGZsb2F0IHZGcmFnRGVwdGg7XG5cdFx0dmFyeWluZyBmbG9hdCB2SXNQZXJzcGVjdGl2ZTtcblx0I2Vsc2Vcblx0XHR1bmlmb3JtIGZsb2F0IGxvZ0RlcHRoQnVmRkM7XG5cdCNlbmRpZlxuI2VuZGlmIixsb2dkZXB0aGJ1Zl92ZXJ0ZXg6IiNpZmRlZiBVU0VfTE9HREVQVEhCVUZcblx0I2lmZGVmIFVTRV9MT0dERVBUSEJVRl9FWFRcblx0XHR2RnJhZ0RlcHRoID0gMS4wICsgZ2xfUG9zaXRpb24udztcblx0XHR2SXNQZXJzcGVjdGl2ZSA9IGZsb2F0KCBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICkgKTtcblx0I2Vsc2Vcblx0XHRpZiAoIGlzUGVyc3BlY3RpdmVNYXRyaXgoIHByb2plY3Rpb25NYXRyaXggKSApIHtcblx0XHRcdGdsX1Bvc2l0aW9uLnogPSBsb2cyKCBtYXgoIEVQU0lMT04sIGdsX1Bvc2l0aW9uLncgKyAxLjAgKSApICogbG9nRGVwdGhCdWZGQyAtIDEuMDtcblx0XHRcdGdsX1Bvc2l0aW9uLnogKj0gZ2xfUG9zaXRpb24udztcblx0XHR9XG5cdCNlbmRpZlxuI2VuZGlmIixtYXBfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfTUFQXG5cdHZlYzQgdGV4ZWxDb2xvciA9IHRleHR1cmUyRCggbWFwLCB2VXYgKTtcblx0dGV4ZWxDb2xvciA9IG1hcFRleGVsVG9MaW5lYXIoIHRleGVsQ29sb3IgKTtcblx0ZGlmZnVzZUNvbG9yICo9IHRleGVsQ29sb3I7XG4jZW5kaWYiLG1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX01BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBtYXA7XG4jZW5kaWYiLG1hcF9wYXJ0aWNsZV9mcmFnbWVudDoiI2lmIGRlZmluZWQoIFVTRV9NQVAgKSB8fCBkZWZpbmVkKCBVU0VfQUxQSEFNQVAgKVxuXHR2ZWMyIHV2ID0gKCB1dlRyYW5zZm9ybSAqIHZlYzMoIGdsX1BvaW50Q29vcmQueCwgMS4wIC0gZ2xfUG9pbnRDb29yZC55LCAxICkgKS54eTtcbiNlbmRpZlxuI2lmZGVmIFVTRV9NQVBcblx0dmVjNCBtYXBUZXhlbCA9IHRleHR1cmUyRCggbWFwLCB1diApO1xuXHRkaWZmdXNlQ29sb3IgKj0gbWFwVGV4ZWxUb0xpbmVhciggbWFwVGV4ZWwgKTtcbiNlbmRpZlxuI2lmZGVmIFVTRV9BTFBIQU1BUFxuXHRkaWZmdXNlQ29sb3IuYSAqPSB0ZXh0dXJlMkQoIGFscGhhTWFwLCB1diApLmc7XG4jZW5kaWYiLG1hcF9wYXJ0aWNsZV9wYXJzX2ZyYWdtZW50OiIjaWYgZGVmaW5lZCggVVNFX01BUCApIHx8IGRlZmluZWQoIFVTRV9BTFBIQU1BUCApXG5cdHVuaWZvcm0gbWF0MyB1dlRyYW5zZm9ybTtcbiNlbmRpZlxuI2lmZGVmIFVTRV9NQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgbWFwO1xuI2VuZGlmXG4jaWZkZWYgVVNFX0FMUEhBTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGFscGhhTWFwO1xuI2VuZGlmIixtZXRhbG5lc3NtYXBfZnJhZ21lbnQ6ImZsb2F0IG1ldGFsbmVzc0ZhY3RvciA9IG1ldGFsbmVzcztcbiNpZmRlZiBVU0VfTUVUQUxORVNTTUFQXG5cdHZlYzQgdGV4ZWxNZXRhbG5lc3MgPSB0ZXh0dXJlMkQoIG1ldGFsbmVzc01hcCwgdlV2ICk7XG5cdG1ldGFsbmVzc0ZhY3RvciAqPSB0ZXhlbE1ldGFsbmVzcy5iO1xuI2VuZGlmIixtZXRhbG5lc3NtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9NRVRBTE5FU1NNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgbWV0YWxuZXNzTWFwO1xuI2VuZGlmIixtb3JwaG5vcm1hbF92ZXJ0ZXg6IiNpZmRlZiBVU0VfTU9SUEhOT1JNQUxTXG5cdG9iamVjdE5vcm1hbCAqPSBtb3JwaFRhcmdldEJhc2VJbmZsdWVuY2U7XG5cdG9iamVjdE5vcm1hbCArPSBtb3JwaE5vcm1hbDAgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDAgXTtcblx0b2JqZWN0Tm9ybWFsICs9IG1vcnBoTm9ybWFsMSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMSBdO1xuXHRvYmplY3ROb3JtYWwgKz0gbW9ycGhOb3JtYWwyICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAyIF07XG5cdG9iamVjdE5vcm1hbCArPSBtb3JwaE5vcm1hbDMgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDMgXTtcbiNlbmRpZiIsbW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfTU9SUEhUQVJHRVRTXG5cdHVuaWZvcm0gZmxvYXQgbW9ycGhUYXJnZXRCYXNlSW5mbHVlbmNlO1xuXHQjaWZuZGVmIFVTRV9NT1JQSE5PUk1BTFNcblx0XHR1bmlmb3JtIGZsb2F0IG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgOCBdO1xuXHQjZWxzZVxuXHRcdHVuaWZvcm0gZmxvYXQgbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA0IF07XG5cdCNlbmRpZlxuI2VuZGlmIixtb3JwaHRhcmdldF92ZXJ0ZXg6IiNpZmRlZiBVU0VfTU9SUEhUQVJHRVRTXG5cdHRyYW5zZm9ybWVkICo9IG1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZTtcblx0dHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQwICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAwIF07XG5cdHRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0MSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMSBdO1xuXHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDIgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDIgXTtcblx0dHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQzICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAzIF07XG5cdCNpZm5kZWYgVVNFX01PUlBITk9STUFMU1xuXHRcdHRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0NCAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNCBdO1xuXHRcdHRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0NSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNSBdO1xuXHRcdHRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0NiAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNiBdO1xuXHRcdHRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0NyAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNyBdO1xuXHQjZW5kaWZcbiNlbmRpZiIsbm9ybWFsX2ZyYWdtZW50X2JlZ2luOiIjaWZkZWYgRkxBVF9TSEFERURcblx0dmVjMyBmZHggPSB2ZWMzKCBkRmR4KCB2Vmlld1Bvc2l0aW9uLnggKSwgZEZkeCggdlZpZXdQb3NpdGlvbi55ICksIGRGZHgoIHZWaWV3UG9zaXRpb24ueiApICk7XG5cdHZlYzMgZmR5ID0gdmVjMyggZEZkeSggdlZpZXdQb3NpdGlvbi54ICksIGRGZHkoIHZWaWV3UG9zaXRpb24ueSApLCBkRmR5KCB2Vmlld1Bvc2l0aW9uLnogKSApO1xuXHR2ZWMzIG5vcm1hbCA9IG5vcm1hbGl6ZSggY3Jvc3MoIGZkeCwgZmR5ICkgKTtcbiNlbHNlXG5cdHZlYzMgbm9ybWFsID0gbm9ybWFsaXplKCB2Tm9ybWFsICk7XG5cdCNpZmRlZiBET1VCTEVfU0lERURcblx0XHRub3JtYWwgPSBub3JtYWwgKiAoIGZsb2F0KCBnbF9Gcm9udEZhY2luZyApICogMi4wIC0gMS4wICk7XG5cdCNlbmRpZlxuXHQjaWZkZWYgVVNFX1RBTkdFTlRcblx0XHR2ZWMzIHRhbmdlbnQgPSBub3JtYWxpemUoIHZUYW5nZW50ICk7XG5cdFx0dmVjMyBiaXRhbmdlbnQgPSBub3JtYWxpemUoIHZCaXRhbmdlbnQgKTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR0YW5nZW50ID0gdGFuZ2VudCAqICggZmxvYXQoIGdsX0Zyb250RmFjaW5nICkgKiAyLjAgLSAxLjAgKTtcblx0XHRcdGJpdGFuZ2VudCA9IGJpdGFuZ2VudCAqICggZmxvYXQoIGdsX0Zyb250RmFjaW5nICkgKiAyLjAgLSAxLjAgKTtcblx0XHQjZW5kaWZcblx0XHQjaWYgZGVmaW5lZCggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApIHx8IGRlZmluZWQoIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQIClcblx0XHRcdG1hdDMgdlRCTiA9IG1hdDMoIHRhbmdlbnQsIGJpdGFuZ2VudCwgbm9ybWFsICk7XG5cdFx0I2VuZGlmXG5cdCNlbmRpZlxuI2VuZGlmXG52ZWMzIGdlb21ldHJ5Tm9ybWFsID0gbm9ybWFsOyIsbm9ybWFsX2ZyYWdtZW50X21hcHM6IiNpZmRlZiBPQkpFQ1RTUEFDRV9OT1JNQUxNQVBcblx0bm9ybWFsID0gdGV4dHVyZTJEKCBub3JtYWxNYXAsIHZVdiApLnh5eiAqIDIuMCAtIDEuMDtcblx0I2lmZGVmIEZMSVBfU0lERURcblx0XHRub3JtYWwgPSAtIG5vcm1hbDtcblx0I2VuZGlmXG5cdCNpZmRlZiBET1VCTEVfU0lERURcblx0XHRub3JtYWwgPSBub3JtYWwgKiAoIGZsb2F0KCBnbF9Gcm9udEZhY2luZyApICogMi4wIC0gMS4wICk7XG5cdCNlbmRpZlxuXHRub3JtYWwgPSBub3JtYWxpemUoIG5vcm1hbE1hdHJpeCAqIG5vcm1hbCApO1xuI2VsaWYgZGVmaW5lZCggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApXG5cdHZlYzMgbWFwTiA9IHRleHR1cmUyRCggbm9ybWFsTWFwLCB2VXYgKS54eXogKiAyLjAgLSAxLjA7XG5cdG1hcE4ueHkgKj0gbm9ybWFsU2NhbGU7XG5cdCNpZmRlZiBVU0VfVEFOR0VOVFxuXHRcdG5vcm1hbCA9IG5vcm1hbGl6ZSggdlRCTiAqIG1hcE4gKTtcblx0I2Vsc2Vcblx0XHRub3JtYWwgPSBwZXJ0dXJiTm9ybWFsMkFyYiggLXZWaWV3UG9zaXRpb24sIG5vcm1hbCwgbWFwTiApO1xuXHQjZW5kaWZcbiNlbGlmIGRlZmluZWQoIFVTRV9CVU1QTUFQIClcblx0bm9ybWFsID0gcGVydHVyYk5vcm1hbEFyYiggLXZWaWV3UG9zaXRpb24sIG5vcm1hbCwgZEhkeHlfZndkKCkgKTtcbiNlbmRpZiIsbm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfTk9STUFMTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIG5vcm1hbE1hcDtcblx0dW5pZm9ybSB2ZWMyIG5vcm1hbFNjYWxlO1xuI2VuZGlmXG4jaWZkZWYgT0JKRUNUU1BBQ0VfTk9STUFMTUFQXG5cdHVuaWZvcm0gbWF0MyBub3JtYWxNYXRyaXg7XG4jZW5kaWZcbiNpZiAhIGRlZmluZWQgKCBVU0VfVEFOR0VOVCApICYmICggZGVmaW5lZCAoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKSB8fCBkZWZpbmVkICggVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVAgKSApXG5cdHZlYzMgcGVydHVyYk5vcm1hbDJBcmIoIHZlYzMgZXllX3BvcywgdmVjMyBzdXJmX25vcm0sIHZlYzMgbWFwTiApIHtcblx0XHR2ZWMzIHEwID0gdmVjMyggZEZkeCggZXllX3Bvcy54ICksIGRGZHgoIGV5ZV9wb3MueSApLCBkRmR4KCBleWVfcG9zLnogKSApO1xuXHRcdHZlYzMgcTEgPSB2ZWMzKCBkRmR5KCBleWVfcG9zLnggKSwgZEZkeSggZXllX3Bvcy55ICksIGRGZHkoIGV5ZV9wb3MueiApICk7XG5cdFx0dmVjMiBzdDAgPSBkRmR4KCB2VXYuc3QgKTtcblx0XHR2ZWMyIHN0MSA9IGRGZHkoIHZVdi5zdCApO1xuXHRcdGZsb2F0IHNjYWxlID0gc2lnbiggc3QxLnQgKiBzdDAucyAtIHN0MC50ICogc3QxLnMgKTtcblx0XHR2ZWMzIFMgPSBub3JtYWxpemUoICggcTAgKiBzdDEudCAtIHExICogc3QwLnQgKSAqIHNjYWxlICk7XG5cdFx0dmVjMyBUID0gbm9ybWFsaXplKCAoIC0gcTAgKiBzdDEucyArIHExICogc3QwLnMgKSAqIHNjYWxlICk7XG5cdFx0dmVjMyBOID0gbm9ybWFsaXplKCBzdXJmX25vcm0gKTtcblx0XHRtYXQzIHRzbiA9IG1hdDMoIFMsIFQsIE4gKTtcblx0XHRtYXBOLnh5ICo9ICggZmxvYXQoIGdsX0Zyb250RmFjaW5nICkgKiAyLjAgLSAxLjAgKTtcblx0XHRyZXR1cm4gbm9ybWFsaXplKCB0c24gKiBtYXBOICk7XG5cdH1cbiNlbmRpZiIsY2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9iZWdpbjoiI2lmZGVmIENMRUFSQ09BVFxuXHR2ZWMzIGNsZWFyY29hdE5vcm1hbCA9IGdlb21ldHJ5Tm9ybWFsO1xuI2VuZGlmIixjbGVhcmNvYXRfbm9ybWFsX2ZyYWdtZW50X21hcHM6IiNpZmRlZiBVU0VfQ0xFQVJDT0FUX05PUk1BTE1BUFxuXHR2ZWMzIGNsZWFyY29hdE1hcE4gPSB0ZXh0dXJlMkQoIGNsZWFyY29hdE5vcm1hbE1hcCwgdlV2ICkueHl6ICogMi4wIC0gMS4wO1xuXHRjbGVhcmNvYXRNYXBOLnh5ICo9IGNsZWFyY29hdE5vcm1hbFNjYWxlO1xuXHQjaWZkZWYgVVNFX1RBTkdFTlRcblx0XHRjbGVhcmNvYXROb3JtYWwgPSBub3JtYWxpemUoIHZUQk4gKiBjbGVhcmNvYXRNYXBOICk7XG5cdCNlbHNlXG5cdFx0Y2xlYXJjb2F0Tm9ybWFsID0gcGVydHVyYk5vcm1hbDJBcmIoIC0gdlZpZXdQb3NpdGlvbiwgY2xlYXJjb2F0Tm9ybWFsLCBjbGVhcmNvYXRNYXBOICk7XG5cdCNlbmRpZlxuI2VuZGlmIixjbGVhcmNvYXRfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9DTEVBUkNPQVRNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgY2xlYXJjb2F0TWFwO1xuI2VuZGlmXG4jaWZkZWYgVVNFX0NMRUFSQ09BVF9ST1VHSE5FU1NNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgY2xlYXJjb2F0Um91Z2huZXNzTWFwO1xuI2VuZGlmXG4jaWZkZWYgVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgY2xlYXJjb2F0Tm9ybWFsTWFwO1xuXHR1bmlmb3JtIHZlYzIgY2xlYXJjb2F0Tm9ybWFsU2NhbGU7XG4jZW5kaWYiLHBhY2tpbmc6InZlYzMgcGFja05vcm1hbFRvUkdCKCBjb25zdCBpbiB2ZWMzIG5vcm1hbCApIHtcblx0cmV0dXJuIG5vcm1hbGl6ZSggbm9ybWFsICkgKiAwLjUgKyAwLjU7XG59XG52ZWMzIHVucGFja1JHQlRvTm9ybWFsKCBjb25zdCBpbiB2ZWMzIHJnYiApIHtcblx0cmV0dXJuIDIuMCAqIHJnYi54eXogLSAxLjA7XG59XG5jb25zdCBmbG9hdCBQYWNrVXBzY2FsZSA9IDI1Ni4gLyAyNTUuO2NvbnN0IGZsb2F0IFVucGFja0Rvd25zY2FsZSA9IDI1NS4gLyAyNTYuO1xuY29uc3QgdmVjMyBQYWNrRmFjdG9ycyA9IHZlYzMoIDI1Ni4gKiAyNTYuICogMjU2LiwgMjU2LiAqIDI1Ni4sIDI1Ni4gKTtcbmNvbnN0IHZlYzQgVW5wYWNrRmFjdG9ycyA9IFVucGFja0Rvd25zY2FsZSAvIHZlYzQoIFBhY2tGYWN0b3JzLCAxLiApO1xuY29uc3QgZmxvYXQgU2hpZnRSaWdodDggPSAxLiAvIDI1Ni47XG52ZWM0IHBhY2tEZXB0aFRvUkdCQSggY29uc3QgaW4gZmxvYXQgdiApIHtcblx0dmVjNCByID0gdmVjNCggZnJhY3QoIHYgKiBQYWNrRmFjdG9ycyApLCB2ICk7XG5cdHIueXp3IC09IHIueHl6ICogU2hpZnRSaWdodDg7XHRyZXR1cm4gciAqIFBhY2tVcHNjYWxlO1xufVxuZmxvYXQgdW5wYWNrUkdCQVRvRGVwdGgoIGNvbnN0IGluIHZlYzQgdiApIHtcblx0cmV0dXJuIGRvdCggdiwgVW5wYWNrRmFjdG9ycyApO1xufVxudmVjNCBwYWNrMkhhbGZUb1JHQkEoIHZlYzIgdiApIHtcblx0dmVjNCByID0gdmVjNCggdi54LCBmcmFjdCggdi54ICogMjU1LjAgKSwgdi55LCBmcmFjdCggdi55ICogMjU1LjAgKSk7XG5cdHJldHVybiB2ZWM0KCByLnggLSByLnkgLyAyNTUuMCwgci55LCByLnogLSByLncgLyAyNTUuMCwgci53KTtcbn1cbnZlYzIgdW5wYWNrUkdCQVRvMkhhbGYoIHZlYzQgdiApIHtcblx0cmV0dXJuIHZlYzIoIHYueCArICggdi55IC8gMjU1LjAgKSwgdi56ICsgKCB2LncgLyAyNTUuMCApICk7XG59XG5mbG9hdCB2aWV3WlRvT3J0aG9ncmFwaGljRGVwdGgoIGNvbnN0IGluIGZsb2F0IHZpZXdaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7XG5cdHJldHVybiAoIHZpZXdaICsgbmVhciApIC8gKCBuZWFyIC0gZmFyICk7XG59XG5mbG9hdCBvcnRob2dyYXBoaWNEZXB0aFRvVmlld1ooIGNvbnN0IGluIGZsb2F0IGxpbmVhckNsaXBaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7XG5cdHJldHVybiBsaW5lYXJDbGlwWiAqICggbmVhciAtIGZhciApIC0gbmVhcjtcbn1cbmZsb2F0IHZpZXdaVG9QZXJzcGVjdGl2ZURlcHRoKCBjb25zdCBpbiBmbG9hdCB2aWV3WiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkge1xuXHRyZXR1cm4gKCggbmVhciArIHZpZXdaICkgKiBmYXIgKSAvICgoIGZhciAtIG5lYXIgKSAqIHZpZXdaICk7XG59XG5mbG9hdCBwZXJzcGVjdGl2ZURlcHRoVG9WaWV3WiggY29uc3QgaW4gZmxvYXQgaW52Q2xpcFosIGNvbnN0IGluIGZsb2F0IG5lYXIsIGNvbnN0IGluIGZsb2F0IGZhciApIHtcblx0cmV0dXJuICggbmVhciAqIGZhciApIC8gKCAoIGZhciAtIG5lYXIgKSAqIGludkNsaXBaIC0gZmFyICk7XG59IixwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50OiIjaWZkZWYgUFJFTVVMVElQTElFRF9BTFBIQVxuXHRnbF9GcmFnQ29sb3IucmdiICo9IGdsX0ZyYWdDb2xvci5hO1xuI2VuZGlmIixwcm9qZWN0X3ZlcnRleDoidmVjNCBtdlBvc2l0aW9uID0gdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApO1xuI2lmZGVmIFVTRV9JTlNUQU5DSU5HXG5cdG12UG9zaXRpb24gPSBpbnN0YW5jZU1hdHJpeCAqIG12UG9zaXRpb247XG4jZW5kaWZcbm12UG9zaXRpb24gPSBtb2RlbFZpZXdNYXRyaXggKiBtdlBvc2l0aW9uO1xuZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbXZQb3NpdGlvbjsiLGRpdGhlcmluZ19mcmFnbWVudDoiI2lmZGVmIERJVEhFUklOR1xuXHRnbF9GcmFnQ29sb3IucmdiID0gZGl0aGVyaW5nKCBnbF9GcmFnQ29sb3IucmdiICk7XG4jZW5kaWYiLGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50OiIjaWZkZWYgRElUSEVSSU5HXG5cdHZlYzMgZGl0aGVyaW5nKCB2ZWMzIGNvbG9yICkge1xuXHRcdGZsb2F0IGdyaWRfcG9zaXRpb24gPSByYW5kKCBnbF9GcmFnQ29vcmQueHkgKTtcblx0XHR2ZWMzIGRpdGhlcl9zaGlmdF9SR0IgPSB2ZWMzKCAwLjI1IC8gMjU1LjAsIC0wLjI1IC8gMjU1LjAsIDAuMjUgLyAyNTUuMCApO1xuXHRcdGRpdGhlcl9zaGlmdF9SR0IgPSBtaXgoIDIuMCAqIGRpdGhlcl9zaGlmdF9SR0IsIC0yLjAgKiBkaXRoZXJfc2hpZnRfUkdCLCBncmlkX3Bvc2l0aW9uICk7XG5cdFx0cmV0dXJuIGNvbG9yICsgZGl0aGVyX3NoaWZ0X1JHQjtcblx0fVxuI2VuZGlmIixyb3VnaG5lc3NtYXBfZnJhZ21lbnQ6ImZsb2F0IHJvdWdobmVzc0ZhY3RvciA9IHJvdWdobmVzcztcbiNpZmRlZiBVU0VfUk9VR0hORVNTTUFQXG5cdHZlYzQgdGV4ZWxSb3VnaG5lc3MgPSB0ZXh0dXJlMkQoIHJvdWdobmVzc01hcCwgdlV2ICk7XG5cdHJvdWdobmVzc0ZhY3RvciAqPSB0ZXhlbFJvdWdobmVzcy5nO1xuI2VuZGlmIixyb3VnaG5lc3NtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9ST1VHSE5FU1NNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgcm91Z2huZXNzTWFwO1xuI2VuZGlmIixzaGFkb3dtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9TSEFET1dNQVBcblx0I2lmIE5VTV9ESVJfTElHSFRfU0hBRE9XUyA+IDBcblx0XHR1bmlmb3JtIHNhbXBsZXIyRCBkaXJlY3Rpb25hbFNoYWRvd01hcFsgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07XG5cdFx0dmFyeWluZyB2ZWM0IHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTtcblx0XHRzdHJ1Y3QgRGlyZWN0aW9uYWxMaWdodFNoYWRvdyB7XG5cdFx0XHRmbG9hdCBzaGFkb3dCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93Tm9ybWFsQmlhcztcblx0XHRcdGZsb2F0IHNoYWRvd1JhZGl1cztcblx0XHRcdHZlYzIgc2hhZG93TWFwU2l6ZTtcblx0XHR9O1xuXHRcdHVuaWZvcm0gRGlyZWN0aW9uYWxMaWdodFNoYWRvdyBkaXJlY3Rpb25hbExpZ2h0U2hhZG93c1sgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07XG5cdCNlbmRpZlxuXHQjaWYgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDBcblx0XHR1bmlmb3JtIHNhbXBsZXIyRCBzcG90U2hhZG93TWFwWyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07XG5cdFx0dmFyeWluZyB2ZWM0IHZTcG90U2hhZG93Q29vcmRbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTtcblx0XHRzdHJ1Y3QgU3BvdExpZ2h0U2hhZG93IHtcblx0XHRcdGZsb2F0IHNoYWRvd0JpYXM7XG5cdFx0XHRmbG9hdCBzaGFkb3dOb3JtYWxCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93UmFkaXVzO1xuXHRcdFx0dmVjMiBzaGFkb3dNYXBTaXplO1xuXHRcdH07XG5cdFx0dW5pZm9ybSBTcG90TGlnaHRTaGFkb3cgc3BvdExpZ2h0U2hhZG93c1sgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdO1xuXHQjZW5kaWZcblx0I2lmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMFxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIHBvaW50U2hhZG93TWFwWyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHZhcnlpbmcgdmVjNCB2UG9pbnRTaGFkb3dDb29yZFsgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTtcblx0XHRzdHJ1Y3QgUG9pbnRMaWdodFNoYWRvdyB7XG5cdFx0XHRmbG9hdCBzaGFkb3dCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93Tm9ybWFsQmlhcztcblx0XHRcdGZsb2F0IHNoYWRvd1JhZGl1cztcblx0XHRcdHZlYzIgc2hhZG93TWFwU2l6ZTtcblx0XHRcdGZsb2F0IHNoYWRvd0NhbWVyYU5lYXI7XG5cdFx0XHRmbG9hdCBzaGFkb3dDYW1lcmFGYXI7XG5cdFx0fTtcblx0XHR1bmlmb3JtIFBvaW50TGlnaHRTaGFkb3cgcG9pbnRMaWdodFNoYWRvd3NbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07XG5cdCNlbmRpZlxuXHRmbG9hdCB0ZXh0dXJlMkRDb21wYXJlKCBzYW1wbGVyMkQgZGVwdGhzLCB2ZWMyIHV2LCBmbG9hdCBjb21wYXJlICkge1xuXHRcdHJldHVybiBzdGVwKCBjb21wYXJlLCB1bnBhY2tSR0JBVG9EZXB0aCggdGV4dHVyZTJEKCBkZXB0aHMsIHV2ICkgKSApO1xuXHR9XG5cdHZlYzIgdGV4dHVyZTJERGlzdHJpYnV0aW9uKCBzYW1wbGVyMkQgc2hhZG93LCB2ZWMyIHV2ICkge1xuXHRcdHJldHVybiB1bnBhY2tSR0JBVG8ySGFsZiggdGV4dHVyZTJEKCBzaGFkb3csIHV2ICkgKTtcblx0fVxuXHRmbG9hdCBWU01TaGFkb3cgKHNhbXBsZXIyRCBzaGFkb3csIHZlYzIgdXYsIGZsb2F0IGNvbXBhcmUgKXtcblx0XHRmbG9hdCBvY2NsdXNpb24gPSAxLjA7XG5cdFx0dmVjMiBkaXN0cmlidXRpb24gPSB0ZXh0dXJlMkREaXN0cmlidXRpb24oIHNoYWRvdywgdXYgKTtcblx0XHRmbG9hdCBoYXJkX3NoYWRvdyA9IHN0ZXAoIGNvbXBhcmUgLCBkaXN0cmlidXRpb24ueCApO1xuXHRcdGlmIChoYXJkX3NoYWRvdyAhPSAxLjAgKSB7XG5cdFx0XHRmbG9hdCBkaXN0YW5jZSA9IGNvbXBhcmUgLSBkaXN0cmlidXRpb24ueCA7XG5cdFx0XHRmbG9hdCB2YXJpYW5jZSA9IG1heCggMC4wMDAwMCwgZGlzdHJpYnV0aW9uLnkgKiBkaXN0cmlidXRpb24ueSApO1xuXHRcdFx0ZmxvYXQgc29mdG5lc3NfcHJvYmFiaWxpdHkgPSB2YXJpYW5jZSAvICh2YXJpYW5jZSArIGRpc3RhbmNlICogZGlzdGFuY2UgKTtcdFx0XHRzb2Z0bmVzc19wcm9iYWJpbGl0eSA9IGNsYW1wKCAoIHNvZnRuZXNzX3Byb2JhYmlsaXR5IC0gMC4zICkgLyAoIDAuOTUgLSAwLjMgKSwgMC4wLCAxLjAgKTtcdFx0XHRvY2NsdXNpb24gPSBjbGFtcCggbWF4KCBoYXJkX3NoYWRvdywgc29mdG5lc3NfcHJvYmFiaWxpdHkgKSwgMC4wLCAxLjAgKTtcblx0XHR9XG5cdFx0cmV0dXJuIG9jY2x1c2lvbjtcblx0fVxuXHRmbG9hdCBnZXRTaGFkb3coIHNhbXBsZXIyRCBzaGFkb3dNYXAsIHZlYzIgc2hhZG93TWFwU2l6ZSwgZmxvYXQgc2hhZG93QmlhcywgZmxvYXQgc2hhZG93UmFkaXVzLCB2ZWM0IHNoYWRvd0Nvb3JkICkge1xuXHRcdGZsb2F0IHNoYWRvdyA9IDEuMDtcblx0XHRzaGFkb3dDb29yZC54eXogLz0gc2hhZG93Q29vcmQudztcblx0XHRzaGFkb3dDb29yZC56ICs9IHNoYWRvd0JpYXM7XG5cdFx0YnZlYzQgaW5GcnVzdHVtVmVjID0gYnZlYzQgKCBzaGFkb3dDb29yZC54ID49IDAuMCwgc2hhZG93Q29vcmQueCA8PSAxLjAsIHNoYWRvd0Nvb3JkLnkgPj0gMC4wLCBzaGFkb3dDb29yZC55IDw9IDEuMCApO1xuXHRcdGJvb2wgaW5GcnVzdHVtID0gYWxsKCBpbkZydXN0dW1WZWMgKTtcblx0XHRidmVjMiBmcnVzdHVtVGVzdFZlYyA9IGJ2ZWMyKCBpbkZydXN0dW0sIHNoYWRvd0Nvb3JkLnogPD0gMS4wICk7XG5cdFx0Ym9vbCBmcnVzdHVtVGVzdCA9IGFsbCggZnJ1c3R1bVRlc3RWZWMgKTtcblx0XHRpZiAoIGZydXN0dW1UZXN0ICkge1xuXHRcdCNpZiBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9QQ0YgKVxuXHRcdFx0dmVjMiB0ZXhlbFNpemUgPSB2ZWMyKCAxLjAgKSAvIHNoYWRvd01hcFNpemU7XG5cdFx0XHRmbG9hdCBkeDAgPSAtIHRleGVsU2l6ZS54ICogc2hhZG93UmFkaXVzO1xuXHRcdFx0ZmxvYXQgZHkwID0gLSB0ZXhlbFNpemUueSAqIHNoYWRvd1JhZGl1cztcblx0XHRcdGZsb2F0IGR4MSA9ICsgdGV4ZWxTaXplLnggKiBzaGFkb3dSYWRpdXM7XG5cdFx0XHRmbG9hdCBkeTEgPSArIHRleGVsU2l6ZS55ICogc2hhZG93UmFkaXVzO1xuXHRcdFx0ZmxvYXQgZHgyID0gZHgwIC8gMi4wO1xuXHRcdFx0ZmxvYXQgZHkyID0gZHkwIC8gMi4wO1xuXHRcdFx0ZmxvYXQgZHgzID0gZHgxIC8gMi4wO1xuXHRcdFx0ZmxvYXQgZHkzID0gZHkxIC8gMi4wO1xuXHRcdFx0c2hhZG93ID0gKFxuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgwLCBkeTAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkwICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDEsIGR5MCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgyLCBkeTIgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkyICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDMsIGR5MiApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgwLCAwLjAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MiwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDMsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgxLCAwLjAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MiwgZHkzICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCAwLjAsIGR5MyApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgzLCBkeTMgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MCwgZHkxICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCAwLjAsIGR5MSApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgxLCBkeTEgKSwgc2hhZG93Q29vcmQueiApXG5cdFx0XHQpICogKCAxLjAgLyAxNy4wICk7XG5cdFx0I2VsaWYgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfUENGX1NPRlQgKVxuXHRcdFx0dmVjMiB0ZXhlbFNpemUgPSB2ZWMyKCAxLjAgKSAvIHNoYWRvd01hcFNpemU7XG5cdFx0XHRmbG9hdCBkeCA9IHRleGVsU2l6ZS54O1xuXHRcdFx0ZmxvYXQgZHkgPSB0ZXhlbFNpemUueTtcblx0XHRcdHZlYzIgdXYgPSBzaGFkb3dDb29yZC54eTtcblx0XHRcdHZlYzIgZiA9IGZyYWN0KCB1diAqIHNoYWRvd01hcFNpemUgKyAwLjUgKTtcblx0XHRcdHV2IC09IGYgKiB0ZXhlbFNpemU7XG5cdFx0XHRzaGFkb3cgPSAoXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYsIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCBkeCwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAwLjAsIGR5ICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB0ZXhlbFNpemUsIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdG1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIC1keCwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSwgXG5cdFx0XHRcdFx0IHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAyLjAgKiBkeCwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSxcblx0XHRcdFx0XHQgZi54ICkgK1xuXHRcdFx0XHRtaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAtZHgsIGR5ICksIHNoYWRvd0Nvb3JkLnogKSwgXG5cdFx0XHRcdFx0IHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAyLjAgKiBkeCwgZHkgKSwgc2hhZG93Q29vcmQueiApLFxuXHRcdFx0XHRcdCBmLnggKSArXG5cdFx0XHRcdG1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDAuMCwgLWR5ICksIHNoYWRvd0Nvb3JkLnogKSwgXG5cdFx0XHRcdFx0IHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAwLjAsIDIuMCAqIGR5ICksIHNoYWRvd0Nvb3JkLnogKSxcblx0XHRcdFx0XHQgZi55ICkgK1xuXHRcdFx0XHRtaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCBkeCwgLWR5ICksIHNoYWRvd0Nvb3JkLnogKSwgXG5cdFx0XHRcdFx0IHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCBkeCwgMi4wICogZHkgKSwgc2hhZG93Q29vcmQueiApLFxuXHRcdFx0XHRcdCBmLnkgKSArXG5cdFx0XHRcdG1peCggbWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggLWR4LCAtZHkgKSwgc2hhZG93Q29vcmQueiApLCBcblx0XHRcdFx0XHRcdCAgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDIuMCAqIGR4LCAtZHkgKSwgc2hhZG93Q29vcmQueiApLFxuXHRcdFx0XHRcdFx0ICBmLnggKSxcblx0XHRcdFx0XHQgbWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggLWR4LCAyLjAgKiBkeSApLCBzaGFkb3dDb29yZC56ICksIFxuXHRcdFx0XHRcdFx0ICB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMi4wICogZHgsIDIuMCAqIGR5ICksIHNoYWRvd0Nvb3JkLnogKSxcblx0XHRcdFx0XHRcdCAgZi54ICksXG5cdFx0XHRcdFx0IGYueSApXG5cdFx0XHQpICogKCAxLjAgLyA5LjAgKTtcblx0XHQjZWxpZiBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9WU00gKVxuXHRcdFx0c2hhZG93ID0gVlNNU2hhZG93KCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5LCBzaGFkb3dDb29yZC56ICk7XG5cdFx0I2Vsc2Vcblx0XHRcdHNoYWRvdyA9IHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHksIHNoYWRvd0Nvb3JkLnogKTtcblx0XHQjZW5kaWZcblx0XHR9XG5cdFx0cmV0dXJuIHNoYWRvdztcblx0fVxuXHR2ZWMyIGN1YmVUb1VWKCB2ZWMzIHYsIGZsb2F0IHRleGVsU2l6ZVkgKSB7XG5cdFx0dmVjMyBhYnNWID0gYWJzKCB2ICk7XG5cdFx0ZmxvYXQgc2NhbGVUb0N1YmUgPSAxLjAgLyBtYXgoIGFic1YueCwgbWF4KCBhYnNWLnksIGFic1YueiApICk7XG5cdFx0YWJzViAqPSBzY2FsZVRvQ3ViZTtcblx0XHR2ICo9IHNjYWxlVG9DdWJlICogKCAxLjAgLSAyLjAgKiB0ZXhlbFNpemVZICk7XG5cdFx0dmVjMiBwbGFuYXIgPSB2Lnh5O1xuXHRcdGZsb2F0IGFsbW9zdEFUZXhlbCA9IDEuNSAqIHRleGVsU2l6ZVk7XG5cdFx0ZmxvYXQgYWxtb3N0T25lID0gMS4wIC0gYWxtb3N0QVRleGVsO1xuXHRcdGlmICggYWJzVi56ID49IGFsbW9zdE9uZSApIHtcblx0XHRcdGlmICggdi56ID4gMC4wIClcblx0XHRcdFx0cGxhbmFyLnggPSA0LjAgLSB2Lng7XG5cdFx0fSBlbHNlIGlmICggYWJzVi54ID49IGFsbW9zdE9uZSApIHtcblx0XHRcdGZsb2F0IHNpZ25YID0gc2lnbiggdi54ICk7XG5cdFx0XHRwbGFuYXIueCA9IHYueiAqIHNpZ25YICsgMi4wICogc2lnblg7XG5cdFx0fSBlbHNlIGlmICggYWJzVi55ID49IGFsbW9zdE9uZSApIHtcblx0XHRcdGZsb2F0IHNpZ25ZID0gc2lnbiggdi55ICk7XG5cdFx0XHRwbGFuYXIueCA9IHYueCArIDIuMCAqIHNpZ25ZICsgMi4wO1xuXHRcdFx0cGxhbmFyLnkgPSB2LnogKiBzaWduWSAtIDIuMDtcblx0XHR9XG5cdFx0cmV0dXJuIHZlYzIoIDAuMTI1LCAwLjI1ICkgKiBwbGFuYXIgKyB2ZWMyKCAwLjM3NSwgMC43NSApO1xuXHR9XG5cdGZsb2F0IGdldFBvaW50U2hhZG93KCBzYW1wbGVyMkQgc2hhZG93TWFwLCB2ZWMyIHNoYWRvd01hcFNpemUsIGZsb2F0IHNoYWRvd0JpYXMsIGZsb2F0IHNoYWRvd1JhZGl1cywgdmVjNCBzaGFkb3dDb29yZCwgZmxvYXQgc2hhZG93Q2FtZXJhTmVhciwgZmxvYXQgc2hhZG93Q2FtZXJhRmFyICkge1xuXHRcdHZlYzIgdGV4ZWxTaXplID0gdmVjMiggMS4wICkgLyAoIHNoYWRvd01hcFNpemUgKiB2ZWMyKCA0LjAsIDIuMCApICk7XG5cdFx0dmVjMyBsaWdodFRvUG9zaXRpb24gPSBzaGFkb3dDb29yZC54eXo7XG5cdFx0ZmxvYXQgZHAgPSAoIGxlbmd0aCggbGlnaHRUb1Bvc2l0aW9uICkgLSBzaGFkb3dDYW1lcmFOZWFyICkgLyAoIHNoYWRvd0NhbWVyYUZhciAtIHNoYWRvd0NhbWVyYU5lYXIgKTtcdFx0ZHAgKz0gc2hhZG93Qmlhcztcblx0XHR2ZWMzIGJkM0QgPSBub3JtYWxpemUoIGxpZ2h0VG9Qb3NpdGlvbiApO1xuXHRcdCNpZiBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9QQ0YgKSB8fCBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9QQ0ZfU09GVCApIHx8IGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1ZTTSApXG5cdFx0XHR2ZWMyIG9mZnNldCA9IHZlYzIoIC0gMSwgMSApICogc2hhZG93UmFkaXVzICogdGV4ZWxTaXplLnk7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh5eSwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXl5LCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC54eXgsIHRleGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnl5eCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QsIHRleGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh4eSwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXh5LCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC54eHgsIHRleGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnl4eCwgdGV4ZWxTaXplLnkgKSwgZHAgKVxuXHRcdFx0KSAqICggMS4wIC8gOS4wICk7XG5cdFx0I2Vsc2Vcblx0XHRcdHJldHVybiB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNELCB0ZXhlbFNpemUueSApLCBkcCApO1xuXHRcdCNlbmRpZlxuXHR9XG4jZW5kaWYiLHNoYWRvd21hcF9wYXJzX3ZlcnRleDoiI2lmZGVmIFVTRV9TSEFET1dNQVBcblx0I2lmIE5VTV9ESVJfTElHSFRfU0hBRE9XUyA+IDBcblx0XHR1bmlmb3JtIG1hdDQgZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXhbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHZhcnlpbmcgdmVjNCB2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07XG5cdFx0c3RydWN0IERpcmVjdGlvbmFsTGlnaHRTaGFkb3cge1xuXHRcdFx0ZmxvYXQgc2hhZG93Qmlhcztcblx0XHRcdGZsb2F0IHNoYWRvd05vcm1hbEJpYXM7XG5cdFx0XHRmbG9hdCBzaGFkb3dSYWRpdXM7XG5cdFx0XHR2ZWMyIHNoYWRvd01hcFNpemU7XG5cdFx0fTtcblx0XHR1bmlmb3JtIERpcmVjdGlvbmFsTGlnaHRTaGFkb3cgZGlyZWN0aW9uYWxMaWdodFNoYWRvd3NbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdO1xuXHQjZW5kaWZcblx0I2lmIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwXG5cdFx0dW5pZm9ybSBtYXQ0IHNwb3RTaGFkb3dNYXRyaXhbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTtcblx0XHR2YXJ5aW5nIHZlYzQgdlNwb3RTaGFkb3dDb29yZFsgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHN0cnVjdCBTcG90TGlnaHRTaGFkb3cge1xuXHRcdFx0ZmxvYXQgc2hhZG93Qmlhcztcblx0XHRcdGZsb2F0IHNoYWRvd05vcm1hbEJpYXM7XG5cdFx0XHRmbG9hdCBzaGFkb3dSYWRpdXM7XG5cdFx0XHR2ZWMyIHNoYWRvd01hcFNpemU7XG5cdFx0fTtcblx0XHR1bmlmb3JtIFNwb3RMaWdodFNoYWRvdyBzcG90TGlnaHRTaGFkb3dzWyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07XG5cdCNlbmRpZlxuXHQjaWYgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwXG5cdFx0dW5pZm9ybSBtYXQ0IHBvaW50U2hhZG93TWF0cml4WyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHZhcnlpbmcgdmVjNCB2UG9pbnRTaGFkb3dDb29yZFsgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTtcblx0XHRzdHJ1Y3QgUG9pbnRMaWdodFNoYWRvdyB7XG5cdFx0XHRmbG9hdCBzaGFkb3dCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93Tm9ybWFsQmlhcztcblx0XHRcdGZsb2F0IHNoYWRvd1JhZGl1cztcblx0XHRcdHZlYzIgc2hhZG93TWFwU2l6ZTtcblx0XHRcdGZsb2F0IHNoYWRvd0NhbWVyYU5lYXI7XG5cdFx0XHRmbG9hdCBzaGFkb3dDYW1lcmFGYXI7XG5cdFx0fTtcblx0XHR1bmlmb3JtIFBvaW50TGlnaHRTaGFkb3cgcG9pbnRMaWdodFNoYWRvd3NbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07XG5cdCNlbmRpZlxuI2VuZGlmIixzaGFkb3dtYXBfdmVydGV4OiIjaWZkZWYgVVNFX1NIQURPV01BUFxuXHQjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMCB8fCBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMCB8fCBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDBcblx0XHR2ZWMzIHNoYWRvd1dvcmxkTm9ybWFsID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggdHJhbnNmb3JtZWROb3JtYWwsIHZpZXdNYXRyaXggKTtcblx0XHR2ZWM0IHNoYWRvd1dvcmxkUG9zaXRpb247XG5cdCNlbmRpZlxuXHQjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMFxuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9ESVJfTElHSFRfU0hBRE9XUzsgaSArKyApIHtcblx0XHRzaGFkb3dXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbiArIHZlYzQoIHNoYWRvd1dvcmxkTm9ybWFsICogZGlyZWN0aW9uYWxMaWdodFNoYWRvd3NbIGkgXS5zaGFkb3dOb3JtYWxCaWFzLCAwICk7XG5cdFx0dkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIGkgXSA9IGRpcmVjdGlvbmFsU2hhZG93TWF0cml4WyBpIF0gKiBzaGFkb3dXb3JsZFBvc2l0aW9uO1xuXHR9XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG5cdCNlbmRpZlxuXHQjaWYgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDBcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fU1BPVF9MSUdIVF9TSEFET1dTOyBpICsrICkge1xuXHRcdHNoYWRvd1dvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uICsgdmVjNCggc2hhZG93V29ybGROb3JtYWwgKiBzcG90TGlnaHRTaGFkb3dzWyBpIF0uc2hhZG93Tm9ybWFsQmlhcywgMCApO1xuXHRcdHZTcG90U2hhZG93Q29vcmRbIGkgXSA9IHNwb3RTaGFkb3dNYXRyaXhbIGkgXSAqIHNoYWRvd1dvcmxkUG9zaXRpb247XG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcblx0I2VuZGlmXG5cdCNpZiBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDBcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUzsgaSArKyApIHtcblx0XHRzaGFkb3dXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbiArIHZlYzQoIHNoYWRvd1dvcmxkTm9ybWFsICogcG9pbnRMaWdodFNoYWRvd3NbIGkgXS5zaGFkb3dOb3JtYWxCaWFzLCAwICk7XG5cdFx0dlBvaW50U2hhZG93Q29vcmRbIGkgXSA9IHBvaW50U2hhZG93TWF0cml4WyBpIF0gKiBzaGFkb3dXb3JsZFBvc2l0aW9uO1xuXHR9XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG5cdCNlbmRpZlxuI2VuZGlmIixzaGFkb3dtYXNrX3BhcnNfZnJhZ21lbnQ6ImZsb2F0IGdldFNoYWRvd01hc2soKSB7XG5cdGZsb2F0IHNoYWRvdyA9IDEuMDtcblx0I2lmZGVmIFVTRV9TSEFET1dNQVBcblx0I2lmIE5VTV9ESVJfTElHSFRfU0hBRE9XUyA+IDBcblx0RGlyZWN0aW9uYWxMaWdodFNoYWRvdyBkaXJlY3Rpb25hbExpZ2h0O1xuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9ESVJfTElHSFRfU0hBRE9XUzsgaSArKyApIHtcblx0XHRkaXJlY3Rpb25hbExpZ2h0ID0gZGlyZWN0aW9uYWxMaWdodFNoYWRvd3NbIGkgXTtcblx0XHRzaGFkb3cgKj0gcmVjZWl2ZVNoYWRvdyA/IGdldFNoYWRvdyggZGlyZWN0aW9uYWxTaGFkb3dNYXBbIGkgXSwgZGlyZWN0aW9uYWxMaWdodC5zaGFkb3dNYXBTaXplLCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvd0JpYXMsIGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93UmFkaXVzLCB2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgaSBdICkgOiAxLjA7XG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcblx0I2VuZGlmXG5cdCNpZiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMFxuXHRTcG90TGlnaHRTaGFkb3cgc3BvdExpZ2h0O1xuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9TUE9UX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7XG5cdFx0c3BvdExpZ2h0ID0gc3BvdExpZ2h0U2hhZG93c1sgaSBdO1xuXHRcdHNoYWRvdyAqPSByZWNlaXZlU2hhZG93ID8gZ2V0U2hhZG93KCBzcG90U2hhZG93TWFwWyBpIF0sIHNwb3RMaWdodC5zaGFkb3dNYXBTaXplLCBzcG90TGlnaHQuc2hhZG93Qmlhcywgc3BvdExpZ2h0LnNoYWRvd1JhZGl1cywgdlNwb3RTaGFkb3dDb29yZFsgaSBdICkgOiAxLjA7XG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcblx0I2VuZGlmXG5cdCNpZiBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDBcblx0UG9pbnRMaWdodFNoYWRvdyBwb2ludExpZ2h0O1xuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTOyBpICsrICkge1xuXHRcdHBvaW50TGlnaHQgPSBwb2ludExpZ2h0U2hhZG93c1sgaSBdO1xuXHRcdHNoYWRvdyAqPSByZWNlaXZlU2hhZG93ID8gZ2V0UG9pbnRTaGFkb3coIHBvaW50U2hhZG93TWFwWyBpIF0sIHBvaW50TGlnaHQuc2hhZG93TWFwU2l6ZSwgcG9pbnRMaWdodC5zaGFkb3dCaWFzLCBwb2ludExpZ2h0LnNoYWRvd1JhZGl1cywgdlBvaW50U2hhZG93Q29vcmRbIGkgXSwgcG9pbnRMaWdodC5zaGFkb3dDYW1lcmFOZWFyLCBwb2ludExpZ2h0LnNoYWRvd0NhbWVyYUZhciApIDogMS4wO1xuXHR9XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG5cdCNlbmRpZlxuXHQjZW5kaWZcblx0cmV0dXJuIHNoYWRvdztcbn0iLHNraW5iYXNlX3ZlcnRleDoiI2lmZGVmIFVTRV9TS0lOTklOR1xuXHRtYXQ0IGJvbmVNYXRYID0gZ2V0Qm9uZU1hdHJpeCggc2tpbkluZGV4LnggKTtcblx0bWF0NCBib25lTWF0WSA9IGdldEJvbmVNYXRyaXgoIHNraW5JbmRleC55ICk7XG5cdG1hdDQgYm9uZU1hdFogPSBnZXRCb25lTWF0cml4KCBza2luSW5kZXgueiApO1xuXHRtYXQ0IGJvbmVNYXRXID0gZ2V0Qm9uZU1hdHJpeCggc2tpbkluZGV4LncgKTtcbiNlbmRpZiIsc2tpbm5pbmdfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfU0tJTk5JTkdcblx0dW5pZm9ybSBtYXQ0IGJpbmRNYXRyaXg7XG5cdHVuaWZvcm0gbWF0NCBiaW5kTWF0cml4SW52ZXJzZTtcblx0I2lmZGVmIEJPTkVfVEVYVFVSRVxuXHRcdHVuaWZvcm0gaGlnaHAgc2FtcGxlcjJEIGJvbmVUZXh0dXJlO1xuXHRcdHVuaWZvcm0gaW50IGJvbmVUZXh0dXJlU2l6ZTtcblx0XHRtYXQ0IGdldEJvbmVNYXRyaXgoIGNvbnN0IGluIGZsb2F0IGkgKSB7XG5cdFx0XHRmbG9hdCBqID0gaSAqIDQuMDtcblx0XHRcdGZsb2F0IHggPSBtb2QoIGosIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKSApO1xuXHRcdFx0ZmxvYXQgeSA9IGZsb29yKCBqIC8gZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApICk7XG5cdFx0XHRmbG9hdCBkeCA9IDEuMCAvIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKTtcblx0XHRcdGZsb2F0IGR5ID0gMS4wIC8gZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApO1xuXHRcdFx0eSA9IGR5ICogKCB5ICsgMC41ICk7XG5cdFx0XHR2ZWM0IHYxID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAwLjUgKSwgeSApICk7XG5cdFx0XHR2ZWM0IHYyID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAxLjUgKSwgeSApICk7XG5cdFx0XHR2ZWM0IHYzID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAyLjUgKSwgeSApICk7XG5cdFx0XHR2ZWM0IHY0ID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAzLjUgKSwgeSApICk7XG5cdFx0XHRtYXQ0IGJvbmUgPSBtYXQ0KCB2MSwgdjIsIHYzLCB2NCApO1xuXHRcdFx0cmV0dXJuIGJvbmU7XG5cdFx0fVxuXHQjZWxzZVxuXHRcdHVuaWZvcm0gbWF0NCBib25lTWF0cmljZXNbIE1BWF9CT05FUyBdO1xuXHRcdG1hdDQgZ2V0Qm9uZU1hdHJpeCggY29uc3QgaW4gZmxvYXQgaSApIHtcblx0XHRcdG1hdDQgYm9uZSA9IGJvbmVNYXRyaWNlc1sgaW50KGkpIF07XG5cdFx0XHRyZXR1cm4gYm9uZTtcblx0XHR9XG5cdCNlbmRpZlxuI2VuZGlmIixza2lubmluZ192ZXJ0ZXg6IiNpZmRlZiBVU0VfU0tJTk5JTkdcblx0dmVjNCBza2luVmVydGV4ID0gYmluZE1hdHJpeCAqIHZlYzQoIHRyYW5zZm9ybWVkLCAxLjAgKTtcblx0dmVjNCBza2lubmVkID0gdmVjNCggMC4wICk7XG5cdHNraW5uZWQgKz0gYm9uZU1hdFggKiBza2luVmVydGV4ICogc2tpbldlaWdodC54O1xuXHRza2lubmVkICs9IGJvbmVNYXRZICogc2tpblZlcnRleCAqIHNraW5XZWlnaHQueTtcblx0c2tpbm5lZCArPSBib25lTWF0WiAqIHNraW5WZXJ0ZXggKiBza2luV2VpZ2h0Lno7XG5cdHNraW5uZWQgKz0gYm9uZU1hdFcgKiBza2luVmVydGV4ICogc2tpbldlaWdodC53O1xuXHR0cmFuc2Zvcm1lZCA9ICggYmluZE1hdHJpeEludmVyc2UgKiBza2lubmVkICkueHl6O1xuI2VuZGlmIixza2lubm9ybWFsX3ZlcnRleDoiI2lmZGVmIFVTRV9TS0lOTklOR1xuXHRtYXQ0IHNraW5NYXRyaXggPSBtYXQ0KCAwLjAgKTtcblx0c2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LnggKiBib25lTWF0WDtcblx0c2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LnkgKiBib25lTWF0WTtcblx0c2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LnogKiBib25lTWF0Wjtcblx0c2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LncgKiBib25lTWF0Vztcblx0c2tpbk1hdHJpeCA9IGJpbmRNYXRyaXhJbnZlcnNlICogc2tpbk1hdHJpeCAqIGJpbmRNYXRyaXg7XG5cdG9iamVjdE5vcm1hbCA9IHZlYzQoIHNraW5NYXRyaXggKiB2ZWM0KCBvYmplY3ROb3JtYWwsIDAuMCApICkueHl6O1xuXHQjaWZkZWYgVVNFX1RBTkdFTlRcblx0XHRvYmplY3RUYW5nZW50ID0gdmVjNCggc2tpbk1hdHJpeCAqIHZlYzQoIG9iamVjdFRhbmdlbnQsIDAuMCApICkueHl6O1xuXHQjZW5kaWZcbiNlbmRpZiIsc3BlY3VsYXJtYXBfZnJhZ21lbnQ6ImZsb2F0IHNwZWN1bGFyU3RyZW5ndGg7XG4jaWZkZWYgVVNFX1NQRUNVTEFSTUFQXG5cdHZlYzQgdGV4ZWxTcGVjdWxhciA9IHRleHR1cmUyRCggc3BlY3VsYXJNYXAsIHZVdiApO1xuXHRzcGVjdWxhclN0cmVuZ3RoID0gdGV4ZWxTcGVjdWxhci5yO1xuI2Vsc2Vcblx0c3BlY3VsYXJTdHJlbmd0aCA9IDEuMDtcbiNlbmRpZiIsc3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9TUEVDVUxBUk1BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBzcGVjdWxhck1hcDtcbiNlbmRpZiIsdG9uZW1hcHBpbmdfZnJhZ21lbnQ6IiNpZiBkZWZpbmVkKCBUT05FX01BUFBJTkcgKVxuXHRnbF9GcmFnQ29sb3IucmdiID0gdG9uZU1hcHBpbmcoIGdsX0ZyYWdDb2xvci5yZ2IgKTtcbiNlbmRpZiIsdG9uZW1hcHBpbmdfcGFyc19mcmFnbWVudDoiI2lmbmRlZiBzYXR1cmF0ZVxuI2RlZmluZSBzYXR1cmF0ZShhKSBjbGFtcCggYSwgMC4wLCAxLjAgKVxuI2VuZGlmXG51bmlmb3JtIGZsb2F0IHRvbmVNYXBwaW5nRXhwb3N1cmU7XG52ZWMzIExpbmVhclRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkge1xuXHRyZXR1cm4gdG9uZU1hcHBpbmdFeHBvc3VyZSAqIGNvbG9yO1xufVxudmVjMyBSZWluaGFyZFRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkge1xuXHRjb2xvciAqPSB0b25lTWFwcGluZ0V4cG9zdXJlO1xuXHRyZXR1cm4gc2F0dXJhdGUoIGNvbG9yIC8gKCB2ZWMzKCAxLjAgKSArIGNvbG9yICkgKTtcbn1cbnZlYzMgT3B0aW1pemVkQ2luZW9uVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7XG5cdGNvbG9yICo9IHRvbmVNYXBwaW5nRXhwb3N1cmU7XG5cdGNvbG9yID0gbWF4KCB2ZWMzKCAwLjAgKSwgY29sb3IgLSAwLjAwNCApO1xuXHRyZXR1cm4gcG93KCAoIGNvbG9yICogKCA2LjIgKiBjb2xvciArIDAuNSApICkgLyAoIGNvbG9yICogKCA2LjIgKiBjb2xvciArIDEuNyApICsgMC4wNiApLCB2ZWMzKCAyLjIgKSApO1xufVxudmVjMyBSUlRBbmRPRFRGaXQoIHZlYzMgdiApIHtcblx0dmVjMyBhID0gdiAqICggdiArIDAuMDI0NTc4NiApIC0gMC4wMDAwOTA1Mzc7XG5cdHZlYzMgYiA9IHYgKiAoIDAuOTgzNzI5ICogdiArIDAuNDMyOTUxMCApICsgMC4yMzgwODE7XG5cdHJldHVybiBhIC8gYjtcbn1cbnZlYzMgQUNFU0ZpbG1pY1RvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkge1xuXHRjb25zdCBtYXQzIEFDRVNJbnB1dE1hdCA9IG1hdDMoXG5cdFx0dmVjMyggMC41OTcxOSwgMC4wNzYwMCwgMC4wMjg0MCApLFx0XHR2ZWMzKCAwLjM1NDU4LCAwLjkwODM0LCAwLjEzMzgzICksXG5cdFx0dmVjMyggMC4wNDgyMywgMC4wMTU2NiwgMC44Mzc3NyApXG5cdCk7XG5cdGNvbnN0IG1hdDMgQUNFU091dHB1dE1hdCA9IG1hdDMoXG5cdFx0dmVjMyggIDEuNjA0NzUsIC0wLjEwMjA4LCAtMC4wMDMyNyApLFx0XHR2ZWMzKCAtMC41MzEwOCwgIDEuMTA4MTMsIC0wLjA3Mjc2ICksXG5cdFx0dmVjMyggLTAuMDczNjcsIC0wLjAwNjA1LCAgMS4wNzYwMiApXG5cdCk7XG5cdGNvbG9yICo9IHRvbmVNYXBwaW5nRXhwb3N1cmUgLyAwLjY7XG5cdGNvbG9yID0gQUNFU0lucHV0TWF0ICogY29sb3I7XG5cdGNvbG9yID0gUlJUQW5kT0RURml0KCBjb2xvciApO1xuXHRjb2xvciA9IEFDRVNPdXRwdXRNYXQgKiBjb2xvcjtcblx0cmV0dXJuIHNhdHVyYXRlKCBjb2xvciApO1xufVxudmVjMyBDdXN0b21Ub25lTWFwcGluZyggdmVjMyBjb2xvciApIHsgcmV0dXJuIGNvbG9yOyB9Iix0cmFuc21pc3Npb25tYXBfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OTUFQXG5cdHRvdGFsVHJhbnNtaXNzaW9uICo9IHRleHR1cmUyRCggdHJhbnNtaXNzaW9uTWFwLCB2VXYgKS5yO1xuI2VuZGlmIix0cmFuc21pc3Npb25tYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9UUkFOU01JU1NJT05NQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgdHJhbnNtaXNzaW9uTWFwO1xuI2VuZGlmIix1dl9wYXJzX2ZyYWdtZW50OiIjaWYgKCBkZWZpbmVkKCBVU0VfVVYgKSAmJiAhIGRlZmluZWQoIFVWU19WRVJURVhfT05MWSApIClcblx0dmFyeWluZyB2ZWMyIHZVdjtcbiNlbmRpZiIsdXZfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfVVZcblx0I2lmZGVmIFVWU19WRVJURVhfT05MWVxuXHRcdHZlYzIgdlV2O1xuXHQjZWxzZVxuXHRcdHZhcnlpbmcgdmVjMiB2VXY7XG5cdCNlbmRpZlxuXHR1bmlmb3JtIG1hdDMgdXZUcmFuc2Zvcm07XG4jZW5kaWYiLHV2X3ZlcnRleDoiI2lmZGVmIFVTRV9VVlxuXHR2VXYgPSAoIHV2VHJhbnNmb3JtICogdmVjMyggdXYsIDEgKSApLnh5O1xuI2VuZGlmIix1djJfcGFyc19mcmFnbWVudDoiI2lmIGRlZmluZWQoIFVTRV9MSUdIVE1BUCApIHx8IGRlZmluZWQoIFVTRV9BT01BUCApXG5cdHZhcnlpbmcgdmVjMiB2VXYyO1xuI2VuZGlmIix1djJfcGFyc192ZXJ0ZXg6IiNpZiBkZWZpbmVkKCBVU0VfTElHSFRNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQU9NQVAgKVxuXHRhdHRyaWJ1dGUgdmVjMiB1djI7XG5cdHZhcnlpbmcgdmVjMiB2VXYyO1xuXHR1bmlmb3JtIG1hdDMgdXYyVHJhbnNmb3JtO1xuI2VuZGlmIix1djJfdmVydGV4OiIjaWYgZGVmaW5lZCggVVNFX0xJR0hUTUFQICkgfHwgZGVmaW5lZCggVVNFX0FPTUFQIClcblx0dlV2MiA9ICggdXYyVHJhbnNmb3JtICogdmVjMyggdXYyLCAxICkgKS54eTtcbiNlbmRpZiIsd29ybGRwb3NfdmVydGV4OiIjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApIHx8IGRlZmluZWQoIERJU1RBTkNFICkgfHwgZGVmaW5lZCAoIFVTRV9TSEFET1dNQVAgKVxuXHR2ZWM0IHdvcmxkUG9zaXRpb24gPSB2ZWM0KCB0cmFuc2Zvcm1lZCwgMS4wICk7XG5cdCNpZmRlZiBVU0VfSU5TVEFOQ0lOR1xuXHRcdHdvcmxkUG9zaXRpb24gPSBpbnN0YW5jZU1hdHJpeCAqIHdvcmxkUG9zaXRpb247XG5cdCNlbmRpZlxuXHR3b3JsZFBvc2l0aW9uID0gbW9kZWxNYXRyaXggKiB3b3JsZFBvc2l0aW9uO1xuI2VuZGlmIixiYWNrZ3JvdW5kX2ZyYWc6InVuaWZvcm0gc2FtcGxlcjJEIHQyRDtcbnZhcnlpbmcgdmVjMiB2VXY7XG52b2lkIG1haW4oKSB7XG5cdHZlYzQgdGV4Q29sb3IgPSB0ZXh0dXJlMkQoIHQyRCwgdlV2ICk7XG5cdGdsX0ZyYWdDb2xvciA9IG1hcFRleGVsVG9MaW5lYXIoIHRleENvbG9yICk7XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cbn0iLGJhY2tncm91bmRfdmVydDoidmFyeWluZyB2ZWMyIHZVdjtcbnVuaWZvcm0gbWF0MyB1dlRyYW5zZm9ybTtcbnZvaWQgbWFpbigpIHtcblx0dlV2ID0gKCB1dlRyYW5zZm9ybSAqIHZlYzMoIHV2LCAxICkgKS54eTtcblx0Z2xfUG9zaXRpb24gPSB2ZWM0KCBwb3NpdGlvbi54eSwgMS4wLCAxLjAgKTtcbn0iLGN1YmVfZnJhZzoiI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD5cbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbnZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247XG4jaW5jbHVkZSA8Y3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHR2ZWMzIHZSZWZsZWN0ID0gdldvcmxkRGlyZWN0aW9uO1xuXHQjaW5jbHVkZSA8ZW52bWFwX2ZyYWdtZW50PlxuXHRnbF9GcmFnQ29sb3IgPSBlbnZDb2xvcjtcblx0Z2xfRnJhZ0NvbG9yLmEgKj0gb3BhY2l0eTtcblx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxufSIsY3ViZV92ZXJ0OiJ2YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uO1xuI2luY2x1ZGUgPGNvbW1vbj5cbnZvaWQgbWFpbigpIHtcblx0dldvcmxkRGlyZWN0aW9uID0gdHJhbnNmb3JtRGlyZWN0aW9uKCBwb3NpdGlvbiwgbW9kZWxNYXRyaXggKTtcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHRnbF9Qb3NpdGlvbi56ID0gZ2xfUG9zaXRpb24udztcbn0iLGRlcHRoX2ZyYWc6IiNpZiBERVBUSF9QQUNLSU5HID09IDMyMDBcblx0dW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2VuZGlmXG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52YXJ5aW5nIHZlYzIgdkhpZ2hQcmVjaXNpb25aVztcbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCAxLjAgKTtcblx0I2lmIERFUFRIX1BBQ0tJTkcgPT0gMzIwMFxuXHRcdGRpZmZ1c2VDb2xvci5hID0gb3BhY2l0eTtcblx0I2VuZGlmXG5cdCNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHRmbG9hdCBmcmFnQ29vcmRaID0gMC41ICogdkhpZ2hQcmVjaXNpb25aV1swXSAvIHZIaWdoUHJlY2lzaW9uWldbMV0gKyAwLjU7XG5cdCNpZiBERVBUSF9QQUNLSU5HID09IDMyMDBcblx0XHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCB2ZWMzKCAxLjAgLSBmcmFnQ29vcmRaICksIG9wYWNpdHkgKTtcblx0I2VsaWYgREVQVEhfUEFDS0lORyA9PSAzMjAxXG5cdFx0Z2xfRnJhZ0NvbG9yID0gcGFja0RlcHRoVG9SR0JBKCBmcmFnQ29vcmRaICk7XG5cdCNlbmRpZlxufSIsZGVwdGhfdmVydDoiI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4PlxudmFyeWluZyB2ZWMyIHZIaWdoUHJlY2lzaW9uWlc7XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5cdCNpZmRlZiBVU0VfRElTUExBQ0VNRU5UTUFQXG5cdFx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cblx0XHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxuXHRcdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cblx0I2VuZGlmXG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PlxuXHR2SGlnaFByZWNpc2lvblpXID0gZ2xfUG9zaXRpb24uenc7XG59IixkaXN0YW5jZVJHQkFfZnJhZzoiI2RlZmluZSBESVNUQU5DRVxudW5pZm9ybSB2ZWMzIHJlZmVyZW5jZVBvc2l0aW9uO1xudW5pZm9ybSBmbG9hdCBuZWFyRGlzdGFuY2U7XG51bmlmb3JtIGZsb2F0IGZhckRpc3RhbmNlO1xudmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxwYWNraW5nPlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cbnZvaWQgbWFpbiAoKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggMS4wICk7XG5cdCNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cblx0ZmxvYXQgZGlzdCA9IGxlbmd0aCggdldvcmxkUG9zaXRpb24gLSByZWZlcmVuY2VQb3NpdGlvbiApO1xuXHRkaXN0ID0gKCBkaXN0IC0gbmVhckRpc3RhbmNlICkgLyAoIGZhckRpc3RhbmNlIC0gbmVhckRpc3RhbmNlICk7XG5cdGRpc3QgPSBzYXR1cmF0ZSggZGlzdCApO1xuXHRnbF9GcmFnQ29sb3IgPSBwYWNrRGVwdGhUb1JHQkEoIGRpc3QgKTtcbn0iLGRpc3RhbmNlUkdCQV92ZXJ0OiIjZGVmaW5lIERJU1RBTkNFXG52YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5cdCNpZmRlZiBVU0VfRElTUExBQ0VNRU5UTUFQXG5cdFx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cblx0XHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxuXHRcdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cblx0I2VuZGlmXG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PlxuXHR2V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24ueHl6O1xufSIsZXF1aXJlY3RfZnJhZzoidW5pZm9ybSBzYW1wbGVyMkQgdEVxdWlyZWN0O1xudmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjtcbiNpbmNsdWRlIDxjb21tb24+XG52b2lkIG1haW4oKSB7XG5cdHZlYzMgZGlyZWN0aW9uID0gbm9ybWFsaXplKCB2V29ybGREaXJlY3Rpb24gKTtcblx0dmVjMiBzYW1wbGVVViA9IGVxdWlyZWN0VXYoIGRpcmVjdGlvbiApO1xuXHR2ZWM0IHRleENvbG9yID0gdGV4dHVyZTJEKCB0RXF1aXJlY3QsIHNhbXBsZVVWICk7XG5cdGdsX0ZyYWdDb2xvciA9IG1hcFRleGVsVG9MaW5lYXIoIHRleENvbG9yICk7XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cbn0iLGVxdWlyZWN0X3ZlcnQ6InZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247XG4jaW5jbHVkZSA8Y29tbW9uPlxudm9pZCBtYWluKCkge1xuXHR2V29ybGREaXJlY3Rpb24gPSB0cmFuc2Zvcm1EaXJlY3Rpb24oIHBvc2l0aW9uLCBtb2RlbE1hdHJpeCApO1xuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG59IixsaW5lZGFzaGVkX2ZyYWc6InVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xudW5pZm9ybSBmbG9hdCBkYXNoU2l6ZTtcbnVuaWZvcm0gZmxvYXQgdG90YWxTaXplO1xudmFyeWluZyBmbG9hdCB2TGluZURpc3RhbmNlO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdGlmICggbW9kKCB2TGluZURpc3RhbmNlLCB0b3RhbFNpemUgKSA+IGRhc2hTaXplICkge1xuXHRcdGRpc2NhcmQ7XG5cdH1cblx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gdmVjMyggMC4wICk7XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD5cblx0b3V0Z29pbmdMaWdodCA9IGRpZmZ1c2VDb2xvci5yZ2I7XG5cdGdsX0ZyYWdDb2xvciA9IHZlYzQoIG91dGdvaW5nTGlnaHQsIGRpZmZ1c2VDb2xvci5hICk7XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XG59IixsaW5lZGFzaGVkX3ZlcnQ6InVuaWZvcm0gZmxvYXQgc2NhbGU7XG5hdHRyaWJ1dGUgZmxvYXQgbGluZURpc3RhbmNlO1xudmFyeWluZyBmbG9hdCB2TGluZURpc3RhbmNlO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHR2TGluZURpc3RhbmNlID0gc2NhbGUgKiBsaW5lRGlzdGFuY2U7XG5cdCNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufSIsbWVzaGJhc2ljX2ZyYWc6InVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcbiNlbmRpZlxuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVudm1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8c3BlY3VsYXJtYXBfZnJhZ21lbnQ+XG5cdFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7XG5cdCNpZmRlZiBVU0VfTElHSFRNQVBcblx0XG5cdFx0dmVjNCBsaWdodE1hcFRleGVsPSB0ZXh0dXJlMkQoIGxpZ2h0TWFwLCB2VXYyICk7XG5cdFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGxpZ2h0TWFwVGV4ZWxUb0xpbmVhciggbGlnaHRNYXBUZXhlbCApLnJnYiAqIGxpZ2h0TWFwSW50ZW5zaXR5O1xuXHQjZWxzZVxuXHRcdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSB2ZWMzKCAxLjAgKTtcblx0I2VuZGlmXG5cdCNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD5cblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICo9IGRpZmZ1c2VDb2xvci5yZ2I7XG5cdHZlYzMgb3V0Z29pbmdMaWdodCA9IHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZTtcblx0I2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD5cblx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggb3V0Z29pbmdMaWdodCwgZGlmZnVzZUNvbG9yLmEgKTtcblx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD5cbn0iLG1lc2hiYXNpY192ZXJ0OiIjaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxlbnZtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cblx0I2luY2x1ZGUgPHV2Ml92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5cdCNpZmRlZiBVU0VfRU5WTUFQXG5cdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxuXHQjZW5kaWZcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0I2luY2x1ZGUgPGVudm1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufSIsbWVzaGxhbWJlcnRfZnJhZzoidW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XG51bmlmb3JtIHZlYzMgZW1pc3NpdmU7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG52YXJ5aW5nIHZlYzMgdkxpZ2h0RnJvbnQ7XG52YXJ5aW5nIHZlYzMgdkluZGlyZWN0RnJvbnQ7XG4jaWZkZWYgRE9VQkxFX1NJREVEXG5cdHZhcnlpbmcgdmVjMyB2TGlnaHRCYWNrO1xuXHR2YXJ5aW5nIHZlYzMgdkluZGlyZWN0QmFjaztcbiNlbmRpZlxuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxwYWNraW5nPlxuI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1djJfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFvbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxlbnZtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YnNkZnM+XG4jaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8c2hhZG93bWFza19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHNwZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XG5cdFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7XG5cdHZlYzMgdG90YWxFbWlzc2l2ZVJhZGlhbmNlID0gZW1pc3NpdmU7XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxzcGVjdWxhcm1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVtaXNzaXZlbWFwX2ZyYWdtZW50PlxuXHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9ICggZ2xfRnJvbnRGYWNpbmcgKSA/IHZJbmRpcmVjdEZyb250IDogdkluZGlyZWN0QmFjaztcblx0I2Vsc2Vcblx0XHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gdkluZGlyZWN0RnJvbnQ7XG5cdCNlbmRpZlxuXHQjaW5jbHVkZSA8bGlnaHRtYXBfZnJhZ21lbnQ+XG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSAqPSBCUkRGX0RpZmZ1c2VfTGFtYmVydCggZGlmZnVzZUNvbG9yLnJnYiApO1xuXHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSA9ICggZ2xfRnJvbnRGYWNpbmcgKSA/IHZMaWdodEZyb250IDogdkxpZ2h0QmFjaztcblx0I2Vsc2Vcblx0XHRyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlID0gdkxpZ2h0RnJvbnQ7XG5cdCNlbmRpZlxuXHRyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICo9IEJSREZfRGlmZnVzZV9MYW1iZXJ0KCBkaWZmdXNlQ29sb3IucmdiICkgKiBnZXRTaGFkb3dNYXNrKCk7XG5cdCNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD5cblx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTtcblx0I2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD5cblx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggb3V0Z29pbmdMaWdodCwgZGlmZnVzZUNvbG9yLmEgKTtcblx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD5cbn0iLG1lc2hsYW1iZXJ0X3ZlcnQ6IiNkZWZpbmUgTEFNQkVSVFxudmFyeWluZyB2ZWMzIHZMaWdodEZyb250O1xudmFyeWluZyB2ZWMzIHZJbmRpcmVjdEZyb250O1xuI2lmZGVmIERPVUJMRV9TSURFRFxuXHR2YXJ5aW5nIHZlYzMgdkxpZ2h0QmFjaztcblx0dmFyeWluZyB2ZWMzIHZJbmRpcmVjdEJhY2s7XG4jZW5kaWZcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8dXYyX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGVudm1hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxic2Rmcz5cbiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cblx0I2luY2x1ZGUgPHV2Ml92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxuXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PlxuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZW52bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPGxpZ2h0c19sYW1iZXJ0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNoYWRvd21hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufSIsbWVzaG1hdGNhcF9mcmFnOiIjZGVmaW5lIE1BVENBUFxudW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG51bmlmb3JtIHNhbXBsZXIyRCBtYXRjYXA7XG52YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dmFyeWluZyB2ZWMzIHZOb3JtYWw7XG4jZW5kaWZcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X2JlZ2luPlxuXHQjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+XG5cdHZlYzMgdmlld0RpciA9IG5vcm1hbGl6ZSggdlZpZXdQb3NpdGlvbiApO1xuXHR2ZWMzIHggPSBub3JtYWxpemUoIHZlYzMoIHZpZXdEaXIueiwgMC4wLCAtIHZpZXdEaXIueCApICk7XG5cdHZlYzMgeSA9IGNyb3NzKCB2aWV3RGlyLCB4ICk7XG5cdHZlYzIgdXYgPSB2ZWMyKCBkb3QoIHgsIG5vcm1hbCApLCBkb3QoIHksIG5vcm1hbCApICkgKiAwLjQ5NSArIDAuNTtcblx0I2lmZGVmIFVTRV9NQVRDQVBcblx0XHR2ZWM0IG1hdGNhcENvbG9yID0gdGV4dHVyZTJEKCBtYXRjYXAsIHV2ICk7XG5cdFx0bWF0Y2FwQ29sb3IgPSBtYXRjYXBUZXhlbFRvTGluZWFyKCBtYXRjYXBDb2xvciApO1xuXHQjZWxzZVxuXHRcdHZlYzQgbWF0Y2FwQ29sb3IgPSB2ZWM0KCAxLjAgKTtcblx0I2VuZGlmXG5cdHZlYzMgb3V0Z29pbmdMaWdodCA9IGRpZmZ1c2VDb2xvci5yZ2IgKiBtYXRjYXBDb2xvci5yZ2I7XG5cdGdsX0ZyYWdDb2xvciA9IHZlYzQoIG91dGdvaW5nTGlnaHQsIGRpZmZ1c2VDb2xvci5hICk7XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+XG59IixtZXNobWF0Y2FwX3ZlcnQ6IiNkZWZpbmUgTUFUQ0FQXG52YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dmFyeWluZyB2ZWMzIHZOb3JtYWw7XG4jZW5kaWZcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxuXHQjaWZuZGVmIEZMQVRfU0hBREVEXG5cdFx0dk5vcm1hbCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWROb3JtYWwgKTtcblx0I2VuZGlmXG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cblx0dlZpZXdQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7XG59IixtZXNodG9vbl9mcmFnOiIjZGVmaW5lIFRPT05cbnVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSB2ZWMzIGVtaXNzaXZlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxwYWNraW5nPlxuI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1djJfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFvbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGdyYWRpZW50bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YnNkZnM+XG4jaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+XG4jaW5jbHVkZSA8bGlnaHRzX3Rvb25fcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxidW1wbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XG5cdFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7XG5cdHZlYzMgdG90YWxFbWlzc2l2ZVJhZGlhbmNlID0gZW1pc3NpdmU7XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+XG5cdCNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz5cblx0I2luY2x1ZGUgPGVtaXNzaXZlbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bGlnaHRzX3Rvb25fZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfYmVnaW4+XG5cdCNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfbWFwcz5cblx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9lbmQ+XG5cdCNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD5cblx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTtcblx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggb3V0Z29pbmdMaWdodCwgZGlmZnVzZUNvbG9yLmEgKTtcblx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD5cbn0iLG1lc2h0b29uX3ZlcnQ6IiNkZWZpbmUgVE9PTlxudmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xuI2VuZGlmXG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx1djJfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD5cbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dk5vcm1hbCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWROb3JtYWwgKTtcbiNlbmRpZlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0dlZpZXdQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7XG5cdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbn0iLG1lc2hwaG9uZ19mcmFnOiIjZGVmaW5lIFBIT05HXG51bmlmb3JtIHZlYzMgZGlmZnVzZTtcbnVuaWZvcm0gdmVjMyBlbWlzc2l2ZTtcbnVuaWZvcm0gdmVjMyBzcGVjdWxhcjtcbnVuaWZvcm0gZmxvYXQgc2hpbmluZXNzO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxwYWNraW5nPlxuI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1djJfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFvbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxlbnZtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YnNkZnM+XG4jaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+XG4jaW5jbHVkZSA8bGlnaHRzX3Bob25nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHNwZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XG5cdFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7XG5cdHZlYzMgdG90YWxFbWlzc2l2ZVJhZGlhbmNlID0gZW1pc3NpdmU7XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxzcGVjdWxhcm1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPlxuXHQjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxsaWdodHNfcGhvbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfYmVnaW4+XG5cdCNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfbWFwcz5cblx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9lbmQ+XG5cdCNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD5cblx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTtcblx0I2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD5cblx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggb3V0Z29pbmdMaWdodCwgZGlmZnVzZUNvbG9yLmEgKTtcblx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD5cbn0iLG1lc2hwaG9uZ192ZXJ0OiIjZGVmaW5lIFBIT05HXG52YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dmFyeWluZyB2ZWMzIHZOb3JtYWw7XG4jZW5kaWZcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8dXYyX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxlbnZtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx1djJfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD5cbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dk5vcm1hbCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWROb3JtYWwgKTtcbiNlbmRpZlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0dlZpZXdQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7XG5cdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxlbnZtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPGZvZ192ZXJ0ZXg+XG59IixtZXNocGh5c2ljYWxfZnJhZzoiI2RlZmluZSBTVEFOREFSRFxuI2lmZGVmIFBIWVNJQ0FMXG5cdCNkZWZpbmUgUkVGTEVDVElWSVRZXG5cdCNkZWZpbmUgQ0xFQVJDT0FUXG5cdCNkZWZpbmUgVFJBTlNNSVNTSU9OXG4jZW5kaWZcbnVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSB2ZWMzIGVtaXNzaXZlO1xudW5pZm9ybSBmbG9hdCByb3VnaG5lc3M7XG51bmlmb3JtIGZsb2F0IG1ldGFsbmVzcztcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNpZmRlZiBUUkFOU01JU1NJT05cblx0dW5pZm9ybSBmbG9hdCB0cmFuc21pc3Npb247XG4jZW5kaWZcbiNpZmRlZiBSRUZMRUNUSVZJVFlcblx0dW5pZm9ybSBmbG9hdCByZWZsZWN0aXZpdHk7XG4jZW5kaWZcbiNpZmRlZiBDTEVBUkNPQVRcblx0dW5pZm9ybSBmbG9hdCBjbGVhcmNvYXQ7XG5cdHVuaWZvcm0gZmxvYXQgY2xlYXJjb2F0Um91Z2huZXNzO1xuI2VuZGlmXG4jaWZkZWYgVVNFX1NIRUVOXG5cdHVuaWZvcm0gdmVjMyBzaGVlbjtcbiNlbmRpZlxudmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xuXHQjaWZkZWYgVVNFX1RBTkdFTlRcblx0XHR2YXJ5aW5nIHZlYzMgdlRhbmdlbnQ7XG5cdFx0dmFyeWluZyB2ZWMzIHZCaXRhbmdlbnQ7XG5cdCNlbmRpZlxuI2VuZGlmXG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4jaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YW9tYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dHJhbnNtaXNzaW9ubWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YnNkZnM+XG4jaW5jbHVkZSA8Y3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxlbnZtYXBfcGh5c2ljYWxfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj5cbiNpbmNsdWRlIDxsaWdodHNfcGh5c2ljYWxfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxidW1wbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xlYXJjb2F0X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8cm91Z2huZXNzbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWV0YWxuZXNzbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XG5cdFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7XG5cdHZlYzMgdG90YWxFbWlzc2l2ZVJhZGlhbmNlID0gZW1pc3NpdmU7XG5cdCNpZmRlZiBUUkFOU01JU1NJT05cblx0XHRmbG9hdCB0b3RhbFRyYW5zbWlzc2lvbiA9IHRyYW5zbWlzc2lvbjtcblx0I2VuZGlmXG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxyb3VnaG5lc3NtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxtZXRhbG5lc3NtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+XG5cdCNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz5cblx0I2luY2x1ZGUgPGNsZWFyY29hdF9ub3JtYWxfZnJhZ21lbnRfYmVnaW4+XG5cdCNpbmNsdWRlIDxjbGVhcmNvYXRfbm9ybWFsX2ZyYWdtZW50X21hcHM+XG5cdCNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPHRyYW5zbWlzc2lvbm1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGxpZ2h0c19waHlzaWNhbF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9tYXBzPlxuXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2VuZD5cblx0I2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PlxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlO1xuXHQjaWZkZWYgVFJBTlNNSVNTSU9OXG5cdFx0ZGlmZnVzZUNvbG9yLmEgKj0gbWl4KCBzYXR1cmF0ZSggMS4gLSB0b3RhbFRyYW5zbWlzc2lvbiArIGxpbmVhclRvUmVsYXRpdmVMdW1pbmFuY2UoIHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciApICksIDEuMCwgbWV0YWxuZXNzICk7XG5cdCNlbmRpZlxuXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCBvdXRnb2luZ0xpZ2h0LCBkaWZmdXNlQ29sb3IuYSApO1xuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50PlxufSIsbWVzaHBoeXNpY2FsX3ZlcnQ6IiNkZWZpbmUgU1RBTkRBUkRcbnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcblx0I2lmZGVmIFVTRV9UQU5HRU5UXG5cdFx0dmFyeWluZyB2ZWMzIHZUYW5nZW50O1xuXHRcdHZhcnlpbmcgdmVjMyB2Qml0YW5nZW50O1xuXHQjZW5kaWZcbiNlbmRpZlxuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8dXYyX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+XG4jaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZOb3JtYWwgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkTm9ybWFsICk7XG5cdCNpZmRlZiBVU0VfVEFOR0VOVFxuXHRcdHZUYW5nZW50ID0gbm9ybWFsaXplKCB0cmFuc2Zvcm1lZFRhbmdlbnQgKTtcblx0XHR2Qml0YW5nZW50ID0gbm9ybWFsaXplKCBjcm9zcyggdk5vcm1hbCwgdlRhbmdlbnQgKSAqIHRhbmdlbnQudyApO1xuXHQjZW5kaWZcbiNlbmRpZlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0dlZpZXdQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7XG5cdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbn0iLG5vcm1hbF9mcmFnOiIjZGVmaW5lIE5PUk1BTFxudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2lmIGRlZmluZWQoIEZMQVRfU0hBREVEICkgfHwgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQIClcblx0dmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jZW5kaWZcbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dmFyeWluZyB2ZWMzIHZOb3JtYWw7XG5cdCNpZmRlZiBVU0VfVEFOR0VOVFxuXHRcdHZhcnlpbmcgdmVjMyB2VGFuZ2VudDtcblx0XHR2YXJ5aW5nIHZlYzMgdkJpdGFuZ2VudDtcblx0I2VuZGlmXG4jZW5kaWZcbiNpbmNsdWRlIDxwYWNraW5nPlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPlxuXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCBwYWNrTm9ybWFsVG9SR0IoIG5vcm1hbCApLCBvcGFjaXR5ICk7XG59Iixub3JtYWxfdmVydDoiI2RlZmluZSBOT1JNQUxcbiNpZiBkZWZpbmVkKCBGTEFUX1NIQURFRCApIHx8IGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApXG5cdHZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2VuZGlmXG4jaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xuXHQjaWZkZWYgVVNFX1RBTkdFTlRcblx0XHR2YXJ5aW5nIHZlYzMgdlRhbmdlbnQ7XG5cdFx0dmFyeWluZyB2ZWMzIHZCaXRhbmdlbnQ7XG5cdCNlbmRpZlxuI2VuZGlmXG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2Tm9ybWFsID0gbm9ybWFsaXplKCB0cmFuc2Zvcm1lZE5vcm1hbCApO1xuXHQjaWZkZWYgVVNFX1RBTkdFTlRcblx0XHR2VGFuZ2VudCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWRUYW5nZW50ICk7XG5cdFx0dkJpdGFuZ2VudCA9IG5vcm1hbGl6ZSggY3Jvc3MoIHZOb3JtYWwsIHZUYW5nZW50ICkgKiB0YW5nZW50LncgKTtcblx0I2VuZGlmXG4jZW5kaWZcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG4jaWYgZGVmaW5lZCggRkxBVF9TSEFERUQgKSB8fCBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKVxuXHR2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejtcbiNlbmRpZlxufSIscG9pbnRzX2ZyYWc6InVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9wYXJ0aWNsZV9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzMgb3V0Z29pbmdMaWdodCA9IHZlYzMoIDAuMCApO1xuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX3BhcnRpY2xlX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XG5cdG91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiO1xuXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCBvdXRnb2luZ0xpZ2h0LCBkaWZmdXNlQ29sb3IuYSApO1xuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxufSIscG9pbnRzX3ZlcnQ6InVuaWZvcm0gZmxvYXQgc2l6ZTtcbnVuaWZvcm0gZmxvYXQgc2NhbGU7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0Z2xfUG9pbnRTaXplID0gc2l6ZTtcblx0I2lmZGVmIFVTRV9TSVpFQVRURU5VQVRJT05cblx0XHRib29sIGlzUGVyc3BlY3RpdmUgPSBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICk7XG5cdFx0aWYgKCBpc1BlcnNwZWN0aXZlICkgZ2xfUG9pbnRTaXplICo9ICggc2NhbGUgLyAtIG12UG9zaXRpb24ueiApO1xuXHQjZW5kaWZcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufSIsc2hhZG93X2ZyYWc6InVuaWZvcm0gdmVjMyBjb2xvcjtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxic2Rmcz5cbiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzaGFkb3dtYXNrX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdGdsX0ZyYWdDb2xvciA9IHZlYzQoIGNvbG9yLCBvcGFjaXR5ICogKCAxLjAgLSBnZXRTaGFkb3dNYXNrKCkgKSApO1xuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG59IixzaGFkb3dfdmVydDoiI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPGZvZ192ZXJ0ZXg+XG59IixzcHJpdGVfZnJhZzoidW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSB2ZWMzKCAwLjAgKTtcblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHRvdXRnb2luZ0xpZ2h0ID0gZGlmZnVzZUNvbG9yLnJnYjtcblx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggb3V0Z29pbmdMaWdodCwgZGlmZnVzZUNvbG9yLmEgKTtcblx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxufSIsc3ByaXRlX3ZlcnQ6InVuaWZvcm0gZmxvYXQgcm90YXRpb247XG51bmlmb3JtIHZlYzIgY2VudGVyO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHR2ZWM0IG12UG9zaXRpb24gPSBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KCAwLjAsIDAuMCwgMC4wLCAxLjAgKTtcblx0dmVjMiBzY2FsZTtcblx0c2NhbGUueCA9IGxlbmd0aCggdmVjMyggbW9kZWxNYXRyaXhbIDAgXS54LCBtb2RlbE1hdHJpeFsgMCBdLnksIG1vZGVsTWF0cml4WyAwIF0ueiApICk7XG5cdHNjYWxlLnkgPSBsZW5ndGgoIHZlYzMoIG1vZGVsTWF0cml4WyAxIF0ueCwgbW9kZWxNYXRyaXhbIDEgXS55LCBtb2RlbE1hdHJpeFsgMSBdLnogKSApO1xuXHQjaWZuZGVmIFVTRV9TSVpFQVRURU5VQVRJT05cblx0XHRib29sIGlzUGVyc3BlY3RpdmUgPSBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICk7XG5cdFx0aWYgKCBpc1BlcnNwZWN0aXZlICkgc2NhbGUgKj0gLSBtdlBvc2l0aW9uLno7XG5cdCNlbmRpZlxuXHR2ZWMyIGFsaWduZWRQb3NpdGlvbiA9ICggcG9zaXRpb24ueHkgLSAoIGNlbnRlciAtIHZlYzIoIDAuNSApICkgKSAqIHNjYWxlO1xuXHR2ZWMyIHJvdGF0ZWRQb3NpdGlvbjtcblx0cm90YXRlZFBvc2l0aW9uLnggPSBjb3MoIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueCAtIHNpbiggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi55O1xuXHRyb3RhdGVkUG9zaXRpb24ueSA9IHNpbiggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi54ICsgY29zKCByb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnk7XG5cdG12UG9zaXRpb24ueHkgKz0gcm90YXRlZFBvc2l0aW9uO1xuXHRnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtdlBvc2l0aW9uO1xuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0I2luY2x1ZGUgPGZvZ192ZXJ0ZXg+XG59In0sVHN0PXtjb21tb246e2RpZmZ1c2U6e3ZhbHVlOm5ldyBDcnQoMTU2NTg3MzQpfSxvcGFjaXR5Ont2YWx1ZToxfSxtYXA6e3ZhbHVlOm51bGx9LHV2VHJhbnNmb3JtOnt2YWx1ZTpuZXcgV2l0fSx1djJUcmFuc2Zvcm06e3ZhbHVlOm5ldyBXaXR9LGFscGhhTWFwOnt2YWx1ZTpudWxsfX0sc3BlY3VsYXJtYXA6e3NwZWN1bGFyTWFwOnt2YWx1ZTpudWxsfX0sZW52bWFwOntlbnZNYXA6e3ZhbHVlOm51bGx9LGZsaXBFbnZNYXA6e3ZhbHVlOi0xfSxyZWZsZWN0aXZpdHk6e3ZhbHVlOjF9LHJlZnJhY3Rpb25SYXRpbzp7dmFsdWU6Ljk4fSxtYXhNaXBMZXZlbDp7dmFsdWU6MH19LGFvbWFwOnthb01hcDp7dmFsdWU6bnVsbH0sYW9NYXBJbnRlbnNpdHk6e3ZhbHVlOjF9fSxsaWdodG1hcDp7bGlnaHRNYXA6e3ZhbHVlOm51bGx9LGxpZ2h0TWFwSW50ZW5zaXR5Ont2YWx1ZToxfX0sZW1pc3NpdmVtYXA6e2VtaXNzaXZlTWFwOnt2YWx1ZTpudWxsfX0sYnVtcG1hcDp7YnVtcE1hcDp7dmFsdWU6bnVsbH0sYnVtcFNjYWxlOnt2YWx1ZToxfX0sbm9ybWFsbWFwOntub3JtYWxNYXA6e3ZhbHVlOm51bGx9LG5vcm1hbFNjYWxlOnt2YWx1ZTpuZXcgVWl0KDEsMSl9fSxkaXNwbGFjZW1lbnRtYXA6e2Rpc3BsYWNlbWVudE1hcDp7dmFsdWU6bnVsbH0sZGlzcGxhY2VtZW50U2NhbGU6e3ZhbHVlOjF9LGRpc3BsYWNlbWVudEJpYXM6e3ZhbHVlOjB9fSxyb3VnaG5lc3NtYXA6e3JvdWdobmVzc01hcDp7dmFsdWU6bnVsbH19LG1ldGFsbmVzc21hcDp7bWV0YWxuZXNzTWFwOnt2YWx1ZTpudWxsfX0sZ3JhZGllbnRtYXA6e2dyYWRpZW50TWFwOnt2YWx1ZTpudWxsfX0sZm9nOntmb2dEZW5zaXR5Ont2YWx1ZToyNWUtNX0sZm9nTmVhcjp7dmFsdWU6MX0sZm9nRmFyOnt2YWx1ZToyZTN9LGZvZ0NvbG9yOnt2YWx1ZTpuZXcgQ3J0KDE2Nzc3MjE1KX19LGxpZ2h0czp7YW1iaWVudExpZ2h0Q29sb3I6e3ZhbHVlOltdfSxsaWdodFByb2JlOnt2YWx1ZTpbXX0sZGlyZWN0aW9uYWxMaWdodHM6e3ZhbHVlOltdLHByb3BlcnRpZXM6e2RpcmVjdGlvbjp7fSxjb2xvcjp7fX19LGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntzaGFkb3dCaWFzOnt9LHNoYWRvd05vcm1hbEJpYXM6e30sc2hhZG93UmFkaXVzOnt9LHNoYWRvd01hcFNpemU6e319fSxkaXJlY3Rpb25hbFNoYWRvd01hcDp7dmFsdWU6W119LGRpcmVjdGlvbmFsU2hhZG93TWF0cml4Ont2YWx1ZTpbXX0sc3BvdExpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7Y29sb3I6e30scG9zaXRpb246e30sZGlyZWN0aW9uOnt9LGRpc3RhbmNlOnt9LGNvbmVDb3M6e30scGVudW1icmFDb3M6e30sZGVjYXk6e319fSxzcG90TGlnaHRTaGFkb3dzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntzaGFkb3dCaWFzOnt9LHNoYWRvd05vcm1hbEJpYXM6e30sc2hhZG93UmFkaXVzOnt9LHNoYWRvd01hcFNpemU6e319fSxzcG90U2hhZG93TWFwOnt2YWx1ZTpbXX0sc3BvdFNoYWRvd01hdHJpeDp7dmFsdWU6W119LHBvaW50TGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntjb2xvcjp7fSxwb3NpdGlvbjp7fSxkZWNheTp7fSxkaXN0YW5jZTp7fX19LHBvaW50TGlnaHRTaGFkb3dzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntzaGFkb3dCaWFzOnt9LHNoYWRvd05vcm1hbEJpYXM6e30sc2hhZG93UmFkaXVzOnt9LHNoYWRvd01hcFNpemU6e30sc2hhZG93Q2FtZXJhTmVhcjp7fSxzaGFkb3dDYW1lcmFGYXI6e319fSxwb2ludFNoYWRvd01hcDp7dmFsdWU6W119LHBvaW50U2hhZG93TWF0cml4Ont2YWx1ZTpbXX0saGVtaXNwaGVyZUxpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7ZGlyZWN0aW9uOnt9LHNreUNvbG9yOnt9LGdyb3VuZENvbG9yOnt9fX0scmVjdEFyZWFMaWdodHM6e3ZhbHVlOltdLHByb3BlcnRpZXM6e2NvbG9yOnt9LHBvc2l0aW9uOnt9LHdpZHRoOnt9LGhlaWdodDp7fX19LGx0Y18xOnt2YWx1ZTpudWxsfSxsdGNfMjp7dmFsdWU6bnVsbH19LHBvaW50czp7ZGlmZnVzZTp7dmFsdWU6bmV3IENydCgxNTY1ODczNCl9LG9wYWNpdHk6e3ZhbHVlOjF9LHNpemU6e3ZhbHVlOjF9LHNjYWxlOnt2YWx1ZToxfSxtYXA6e3ZhbHVlOm51bGx9LGFscGhhTWFwOnt2YWx1ZTpudWxsfSx1dlRyYW5zZm9ybTp7dmFsdWU6bmV3IFdpdH19LHNwcml0ZTp7ZGlmZnVzZTp7dmFsdWU6bmV3IENydCgxNTY1ODczNCl9LG9wYWNpdHk6e3ZhbHVlOjF9LGNlbnRlcjp7dmFsdWU6bmV3IFVpdCguNSwuNSl9LHJvdGF0aW9uOnt2YWx1ZTowfSxtYXA6e3ZhbHVlOm51bGx9LGFscGhhTWFwOnt2YWx1ZTpudWxsfSx1dlRyYW5zZm9ybTp7dmFsdWU6bmV3IFdpdH19fSxOc3Q9e2Jhc2ljOnt1bmlmb3Jtczpoc3QoW1RzdC5jb21tb24sVHN0LnNwZWN1bGFybWFwLFRzdC5lbnZtYXAsVHN0LmFvbWFwLFRzdC5saWdodG1hcCxUc3QuZm9nXSksdmVydGV4U2hhZGVyOlJzdC5tZXNoYmFzaWNfdmVydCxmcmFnbWVudFNoYWRlcjpSc3QubWVzaGJhc2ljX2ZyYWd9LGxhbWJlcnQ6e3VuaWZvcm1zOmhzdChbVHN0LmNvbW1vbixUc3Quc3BlY3VsYXJtYXAsVHN0LmVudm1hcCxUc3QuYW9tYXAsVHN0LmxpZ2h0bWFwLFRzdC5lbWlzc2l2ZW1hcCxUc3QuZm9nLFRzdC5saWdodHMse2VtaXNzaXZlOnt2YWx1ZTpuZXcgQ3J0KDApfX1dKSx2ZXJ0ZXhTaGFkZXI6UnN0Lm1lc2hsYW1iZXJ0X3ZlcnQsZnJhZ21lbnRTaGFkZXI6UnN0Lm1lc2hsYW1iZXJ0X2ZyYWd9LHBob25nOnt1bmlmb3Jtczpoc3QoW1RzdC5jb21tb24sVHN0LnNwZWN1bGFybWFwLFRzdC5lbnZtYXAsVHN0LmFvbWFwLFRzdC5saWdodG1hcCxUc3QuZW1pc3NpdmVtYXAsVHN0LmJ1bXBtYXAsVHN0Lm5vcm1hbG1hcCxUc3QuZGlzcGxhY2VtZW50bWFwLFRzdC5mb2csVHN0LmxpZ2h0cyx7ZW1pc3NpdmU6e3ZhbHVlOm5ldyBDcnQoMCl9LHNwZWN1bGFyOnt2YWx1ZTpuZXcgQ3J0KDExMTg0ODEpfSxzaGluaW5lc3M6e3ZhbHVlOjMwfX1dKSx2ZXJ0ZXhTaGFkZXI6UnN0Lm1lc2hwaG9uZ192ZXJ0LGZyYWdtZW50U2hhZGVyOlJzdC5tZXNocGhvbmdfZnJhZ30sc3RhbmRhcmQ6e3VuaWZvcm1zOmhzdChbVHN0LmNvbW1vbixUc3QuZW52bWFwLFRzdC5hb21hcCxUc3QubGlnaHRtYXAsVHN0LmVtaXNzaXZlbWFwLFRzdC5idW1wbWFwLFRzdC5ub3JtYWxtYXAsVHN0LmRpc3BsYWNlbWVudG1hcCxUc3Qucm91Z2huZXNzbWFwLFRzdC5tZXRhbG5lc3NtYXAsVHN0LmZvZyxUc3QubGlnaHRzLHtlbWlzc2l2ZTp7dmFsdWU6bmV3IENydCgwKX0scm91Z2huZXNzOnt2YWx1ZToxfSxtZXRhbG5lc3M6e3ZhbHVlOjB9LGVudk1hcEludGVuc2l0eTp7dmFsdWU6MX19XSksdmVydGV4U2hhZGVyOlJzdC5tZXNocGh5c2ljYWxfdmVydCxmcmFnbWVudFNoYWRlcjpSc3QubWVzaHBoeXNpY2FsX2ZyYWd9LHRvb246e3VuaWZvcm1zOmhzdChbVHN0LmNvbW1vbixUc3QuYW9tYXAsVHN0LmxpZ2h0bWFwLFRzdC5lbWlzc2l2ZW1hcCxUc3QuYnVtcG1hcCxUc3Qubm9ybWFsbWFwLFRzdC5kaXNwbGFjZW1lbnRtYXAsVHN0LmdyYWRpZW50bWFwLFRzdC5mb2csVHN0LmxpZ2h0cyx7ZW1pc3NpdmU6e3ZhbHVlOm5ldyBDcnQoMCl9fV0pLHZlcnRleFNoYWRlcjpSc3QubWVzaHRvb25fdmVydCxmcmFnbWVudFNoYWRlcjpSc3QubWVzaHRvb25fZnJhZ30sbWF0Y2FwOnt1bmlmb3Jtczpoc3QoW1RzdC5jb21tb24sVHN0LmJ1bXBtYXAsVHN0Lm5vcm1hbG1hcCxUc3QuZGlzcGxhY2VtZW50bWFwLFRzdC5mb2cse21hdGNhcDp7dmFsdWU6bnVsbH19XSksdmVydGV4U2hhZGVyOlJzdC5tZXNobWF0Y2FwX3ZlcnQsZnJhZ21lbnRTaGFkZXI6UnN0Lm1lc2htYXRjYXBfZnJhZ30scG9pbnRzOnt1bmlmb3Jtczpoc3QoW1RzdC5wb2ludHMsVHN0LmZvZ10pLHZlcnRleFNoYWRlcjpSc3QucG9pbnRzX3ZlcnQsZnJhZ21lbnRTaGFkZXI6UnN0LnBvaW50c19mcmFnfSxkYXNoZWQ6e3VuaWZvcm1zOmhzdChbVHN0LmNvbW1vbixUc3QuZm9nLHtzY2FsZTp7dmFsdWU6MX0sZGFzaFNpemU6e3ZhbHVlOjF9LHRvdGFsU2l6ZTp7dmFsdWU6Mn19XSksdmVydGV4U2hhZGVyOlJzdC5saW5lZGFzaGVkX3ZlcnQsZnJhZ21lbnRTaGFkZXI6UnN0LmxpbmVkYXNoZWRfZnJhZ30sZGVwdGg6e3VuaWZvcm1zOmhzdChbVHN0LmNvbW1vbixUc3QuZGlzcGxhY2VtZW50bWFwXSksdmVydGV4U2hhZGVyOlJzdC5kZXB0aF92ZXJ0LGZyYWdtZW50U2hhZGVyOlJzdC5kZXB0aF9mcmFnfSxub3JtYWw6e3VuaWZvcm1zOmhzdChbVHN0LmNvbW1vbixUc3QuYnVtcG1hcCxUc3Qubm9ybWFsbWFwLFRzdC5kaXNwbGFjZW1lbnRtYXAse29wYWNpdHk6e3ZhbHVlOjF9fV0pLHZlcnRleFNoYWRlcjpSc3Qubm9ybWFsX3ZlcnQsZnJhZ21lbnRTaGFkZXI6UnN0Lm5vcm1hbF9mcmFnfSxzcHJpdGU6e3VuaWZvcm1zOmhzdChbVHN0LnNwcml0ZSxUc3QuZm9nXSksdmVydGV4U2hhZGVyOlJzdC5zcHJpdGVfdmVydCxmcmFnbWVudFNoYWRlcjpSc3Quc3ByaXRlX2ZyYWd9LGJhY2tncm91bmQ6e3VuaWZvcm1zOnt1dlRyYW5zZm9ybTp7dmFsdWU6bmV3IFdpdH0sdDJEOnt2YWx1ZTpudWxsfX0sdmVydGV4U2hhZGVyOlJzdC5iYWNrZ3JvdW5kX3ZlcnQsZnJhZ21lbnRTaGFkZXI6UnN0LmJhY2tncm91bmRfZnJhZ30sY3ViZTp7dW5pZm9ybXM6aHN0KFtUc3QuZW52bWFwLHtvcGFjaXR5Ont2YWx1ZToxfX1dKSx2ZXJ0ZXhTaGFkZXI6UnN0LmN1YmVfdmVydCxmcmFnbWVudFNoYWRlcjpSc3QuY3ViZV9mcmFnfSxlcXVpcmVjdDp7dW5pZm9ybXM6e3RFcXVpcmVjdDp7dmFsdWU6bnVsbH19LHZlcnRleFNoYWRlcjpSc3QuZXF1aXJlY3RfdmVydCxmcmFnbWVudFNoYWRlcjpSc3QuZXF1aXJlY3RfZnJhZ30sZGlzdGFuY2VSR0JBOnt1bmlmb3Jtczpoc3QoW1RzdC5jb21tb24sVHN0LmRpc3BsYWNlbWVudG1hcCx7cmVmZXJlbmNlUG9zaXRpb246e3ZhbHVlOm5ldyAkaXR9LG5lYXJEaXN0YW5jZTp7dmFsdWU6MX0sZmFyRGlzdGFuY2U6e3ZhbHVlOjFlM319XSksdmVydGV4U2hhZGVyOlJzdC5kaXN0YW5jZVJHQkFfdmVydCxmcmFnbWVudFNoYWRlcjpSc3QuZGlzdGFuY2VSR0JBX2ZyYWd9LHNoYWRvdzp7dW5pZm9ybXM6aHN0KFtUc3QubGlnaHRzLFRzdC5mb2cse2NvbG9yOnt2YWx1ZTpuZXcgQ3J0KDApfSxvcGFjaXR5Ont2YWx1ZToxfX1dKSx2ZXJ0ZXhTaGFkZXI6UnN0LnNoYWRvd192ZXJ0LGZyYWdtZW50U2hhZGVyOlJzdC5zaGFkb3dfZnJhZ319O2Z1bmN0aW9uIElzdCh0LGUsbixvLGkpe2NvbnN0IGE9bmV3IENydCgwKTtsZXQgcixzLGw9MCxjPW51bGwsZD0wLHA9bnVsbDtmdW5jdGlvbiBtKHQsZSl7bi5idWZmZXJzLmNvbG9yLnNldENsZWFyKHQucix0LmcsdC5iLGUsaSl9cmV0dXJue2dldENsZWFyQ29sb3I6ZnVuY3Rpb24oKXtyZXR1cm4gYX0sc2V0Q2xlYXJDb2xvcjpmdW5jdGlvbih0LGU9MSl7YS5zZXQodCksbD1lLG0oYSxsKX0sZ2V0Q2xlYXJBbHBoYTpmdW5jdGlvbigpe3JldHVybiBsfSxzZXRDbGVhckFscGhhOmZ1bmN0aW9uKHQpe2w9dCxtKGEsbCl9LHJlbmRlcjpmdW5jdGlvbiB1KG4saSxmLGcpe2xldCBoPSEwPT09aS5pc1NjZW5lP2kuYmFja2dyb3VuZDpudWxsO2gmJmguaXNUZXh0dXJlJiYoaD1lLmdldChoKSk7Y29uc3QgYj10LnhyLHk9Yi5nZXRTZXNzaW9uJiZiLmdldFNlc3Npb24oKTt5JiYiYWRkaXRpdmUiPT09eS5lbnZpcm9ubWVudEJsZW5kTW9kZSYmKGg9bnVsbCksbnVsbD09PWg/bShhLGwpOmgmJmguaXNDb2xvciYmKG0oaCwxKSxnPSEwKSwodC5hdXRvQ2xlYXJ8fGcpJiZ0LmNsZWFyKHQuYXV0b0NsZWFyQ29sb3IsdC5hdXRvQ2xlYXJEZXB0aCx0LmF1dG9DbGVhclN0ZW5jaWwpLGgmJihoLmlzQ3ViZVRleHR1cmV8fGguaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXR8fDMwNj09PWgubWFwcGluZyk/KHZvaWQgMD09PXMmJihzPW5ldyBtc3QobmV3IGZzdCgxLDEsMSksbmV3IHlzdCh7bmFtZToiQmFja2dyb3VuZEN1YmVNYXRlcmlhbCIsdW5pZm9ybXM6Z3N0KE5zdC5jdWJlLnVuaWZvcm1zKSx2ZXJ0ZXhTaGFkZXI6TnN0LmN1YmUudmVydGV4U2hhZGVyLGZyYWdtZW50U2hhZGVyOk5zdC5jdWJlLmZyYWdtZW50U2hhZGVyLHNpZGU6MSxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMSxmb2c6ITF9KSkscy5nZW9tZXRyeS5kZWxldGVBdHRyaWJ1dGUoIm5vcm1hbCIpLHMuZ2VvbWV0cnkuZGVsZXRlQXR0cmlidXRlKCJ1diIpLHMub25CZWZvcmVSZW5kZXI9ZnVuY3Rpb24odCxlLG4pe3RoaXMubWF0cml4V29ybGQuY29weVBvc2l0aW9uKG4ubWF0cml4V29ybGQpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkocy5tYXRlcmlhbCwiZW52TWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudW5pZm9ybXMuZW52TWFwLnZhbHVlfX0pLG8udXBkYXRlKHMpKSxoLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0JiYoaD1oLnRleHR1cmUpLHMubWF0ZXJpYWwudW5pZm9ybXMuZW52TWFwLnZhbHVlPWgscy5tYXRlcmlhbC51bmlmb3Jtcy5mbGlwRW52TWFwLnZhbHVlPWguaXNDdWJlVGV4dHVyZSYmaC5fbmVlZHNGbGlwRW52TWFwPy0xOjEsYz09PWgmJmQ9PT1oLnZlcnNpb24mJnA9PT10LnRvbmVNYXBwaW5nfHwocy5tYXRlcmlhbC5uZWVkc1VwZGF0ZT0hMCxjPWgsZD1oLnZlcnNpb24scD10LnRvbmVNYXBwaW5nKSxuLnVuc2hpZnQocyxzLmdlb21ldHJ5LHMubWF0ZXJpYWwsMCwwLG51bGwpKTpoJiZoLmlzVGV4dHVyZSYmKHZvaWQgMD09PXImJihyPW5ldyBtc3QobmV3IEFzdCgyLDIpLG5ldyB5c3Qoe25hbWU6IkJhY2tncm91bmRNYXRlcmlhbCIsdW5pZm9ybXM6Z3N0KE5zdC5iYWNrZ3JvdW5kLnVuaWZvcm1zKSx2ZXJ0ZXhTaGFkZXI6TnN0LmJhY2tncm91bmQudmVydGV4U2hhZGVyLGZyYWdtZW50U2hhZGVyOk5zdC5iYWNrZ3JvdW5kLmZyYWdtZW50U2hhZGVyLHNpZGU6MCxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMSxmb2c6ITF9KSksci5nZW9tZXRyeS5kZWxldGVBdHRyaWJ1dGUoIm5vcm1hbCIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLm1hdGVyaWFsLCJtYXAiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51bmlmb3Jtcy50MkQudmFsdWV9fSksby51cGRhdGUocikpLHIubWF0ZXJpYWwudW5pZm9ybXMudDJELnZhbHVlPWgsITA9PT1oLm1hdHJpeEF1dG9VcGRhdGUmJmgudXBkYXRlTWF0cml4KCksci5tYXRlcmlhbC51bmlmb3Jtcy51dlRyYW5zZm9ybS52YWx1ZS5jb3B5KGgubWF0cml4KSxjPT09aCYmZD09PWgudmVyc2lvbiYmcD09PXQudG9uZU1hcHBpbmd8fChyLm1hdGVyaWFsLm5lZWRzVXBkYXRlPSEwLGM9aCxkPWgudmVyc2lvbixwPXQudG9uZU1hcHBpbmcpLG4udW5zaGlmdChyLHIuZ2VvbWV0cnksci5tYXRlcmlhbCwwLDAsbnVsbCkpfX19ZnVuY3Rpb24genN0KHQsZSxuLG8pe2NvbnN0IGk9dC5nZXRQYXJhbWV0ZXIoMzQ5MjEpLGE9by5pc1dlYkdMMj9udWxsOmUuZ2V0KCJPRVNfdmVydGV4X2FycmF5X29iamVjdCIpLHI9by5pc1dlYkdMMnx8bnVsbCE9PWEscz17fSxsPW0obnVsbCk7bGV0IGM9bDtmdW5jdGlvbiBkKGUpe3JldHVybiBvLmlzV2ViR0wyP3QuYmluZFZlcnRleEFycmF5KGUpOmEuYmluZFZlcnRleEFycmF5T0VTKGUpfWZ1bmN0aW9uIHAoZSl7cmV0dXJuIG8uaXNXZWJHTDI/dC5kZWxldGVWZXJ0ZXhBcnJheShlKTphLmRlbGV0ZVZlcnRleEFycmF5T0VTKGUpfWZ1bmN0aW9uIG0odCl7Y29uc3QgZT1bXSxuPVtdLG89W107Zm9yKGxldCB0PTA7dDxpO3QrKyllW3RdPTAsblt0XT0wLG9bdF09MDtyZXR1cm57Z2VvbWV0cnk6bnVsbCxwcm9ncmFtOm51bGwsd2lyZWZyYW1lOiExLG5ld0F0dHJpYnV0ZXM6ZSxlbmFibGVkQXR0cmlidXRlczpuLGF0dHJpYnV0ZURpdmlzb3JzOm8sb2JqZWN0OnQsYXR0cmlidXRlczp7fSxpbmRleDpudWxsfX1mdW5jdGlvbiB1KCl7Y29uc3QgdD1jLm5ld0F0dHJpYnV0ZXM7Zm9yKGxldCBlPTAsbj10Lmxlbmd0aDtlPG47ZSsrKXRbZV09MH1mdW5jdGlvbiBmKHQpe2codCwwKX1mdW5jdGlvbiBnKG4saSl7Y29uc3QgYT1jLmVuYWJsZWRBdHRyaWJ1dGVzLHI9Yy5hdHRyaWJ1dGVEaXZpc29ycztjLm5ld0F0dHJpYnV0ZXNbbl09MSwwPT09YVtuXSYmKHQuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkobiksYVtuXT0xKSxyW25dIT09aSYmKChvLmlzV2ViR0wyP3Q6ZS5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSlbby5pc1dlYkdMMj8idmVydGV4QXR0cmliRGl2aXNvciI6InZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRSJdKG4saSkscltuXT1pKX1mdW5jdGlvbiBoKCl7Y29uc3QgZT1jLm5ld0F0dHJpYnV0ZXMsbj1jLmVuYWJsZWRBdHRyaWJ1dGVzO2ZvcihsZXQgbz0wLGk9bi5sZW5ndGg7bzxpO28rKyluW29dIT09ZVtvXSYmKHQuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KG8pLG5bb109MCl9ZnVuY3Rpb24gYihlLG4saSxhLHIscyl7ITAhPT1vLmlzV2ViR0wyfHw1MTI0IT09aSYmNTEyNSE9PWk/dC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGUsbixpLGEscixzKTp0LnZlcnRleEF0dHJpYklQb2ludGVyKGUsbixpLHIscyl9ZnVuY3Rpb24geSgpe18oKSxjIT09bCYmKGM9bCxkKGMub2JqZWN0KSl9ZnVuY3Rpb24gXygpe2wuZ2VvbWV0cnk9bnVsbCxsLnByb2dyYW09bnVsbCxsLndpcmVmcmFtZT0hMX1yZXR1cm57c2V0dXA6ZnVuY3Rpb24gQyhpLGwscCx5LF8pe2xldCBDPSExO2lmKHIpe2NvbnN0IGU9KGZ1bmN0aW9uIE0oZSxuLGkpe2NvbnN0IHI9ITA9PT1pLndpcmVmcmFtZTtsZXQgbD1zW2UuaWRdO3ZvaWQgMD09PWwmJihsPXt9LHNbZS5pZF09bCk7bGV0IGM9bFtuLmlkXTt2b2lkIDA9PT1jJiYoYz17fSxsW24uaWRdPWMpO2xldCBkPWNbcl07cmV0dXJuIHZvaWQgMD09PWQmJihkPW0oKGZ1bmN0aW9uIHAoKXtyZXR1cm4gby5pc1dlYkdMMj90LmNyZWF0ZVZlcnRleEFycmF5KCk6YS5jcmVhdGVWZXJ0ZXhBcnJheU9FUygpfSkoKSksY1tyXT1kKSxkfSkoeSxwLGwpO2MhPT1lJiYoYz1lLGQoYy5vYmplY3QpKSxDPShmdW5jdGlvbiB2KHQsZSl7Y29uc3Qgbj1jLmF0dHJpYnV0ZXMsbz10LmF0dHJpYnV0ZXM7bGV0IGk9MDtmb3IoY29uc3QgdCBpbiBvKXtjb25zdCBlPW5bdF0sYT1vW3RdO2lmKHZvaWQgMD09PWUpcmV0dXJuITA7aWYoZS5hdHRyaWJ1dGUhPT1hKXJldHVybiEwO2lmKGUuZGF0YSE9PWEuZGF0YSlyZXR1cm4hMDtpKyt9cmV0dXJuIGMuYXR0cmlidXRlc051bSE9PWl8fGMuaW5kZXghPT1lfSkoeSxfKSxDJiYoZnVuY3Rpb24geCh0LGUpe2NvbnN0IG49e30sbz10LmF0dHJpYnV0ZXM7bGV0IGk9MDtmb3IoY29uc3QgdCBpbiBvKXtjb25zdCBlPW9bdF0sYT17fTthLmF0dHJpYnV0ZT1lLGUuZGF0YSYmKGEuZGF0YT1lLmRhdGEpLG5bdF09YSxpKyt9Yy5hdHRyaWJ1dGVzPW4sYy5hdHRyaWJ1dGVzTnVtPWksYy5pbmRleD1lfSkoeSxfKX1lbHNle2NvbnN0IHQ9ITA9PT1sLndpcmVmcmFtZTtjLmdlb21ldHJ5PT09eS5pZCYmYy5wcm9ncmFtPT09cC5pZCYmYy53aXJlZnJhbWU9PT10fHwoYy5nZW9tZXRyeT15LmlkLGMucHJvZ3JhbT1wLmlkLGMud2lyZWZyYW1lPXQsQz0hMCl9ITA9PT1pLmlzSW5zdGFuY2VkTWVzaCYmKEM9ITApLG51bGwhPT1fJiZuLnVwZGF0ZShfLDM0OTYzKSxDJiYoKGZ1bmN0aW9uIE8oaSxhLHIscyl7aWYoITE9PT1vLmlzV2ViR0wyJiYoaS5pc0luc3RhbmNlZE1lc2h8fHMuaXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSkmJm51bGw9PT1lLmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpKXJldHVybjt1KCk7Y29uc3QgbD1zLmF0dHJpYnV0ZXMsYz1yLmdldEF0dHJpYnV0ZXMoKSxkPWEuZGVmYXVsdEF0dHJpYnV0ZVZhbHVlcztmb3IoY29uc3QgZSBpbiBjKXtjb25zdCBvPWNbZV07aWYobz49MCl7Y29uc3QgYT1sW2VdO2lmKHZvaWQgMCE9PWEpe2NvbnN0IGU9YS5ub3JtYWxpemVkLGk9YS5pdGVtU2l6ZSxyPW4uZ2V0KGEpO2lmKHZvaWQgMD09PXIpY29udGludWU7Y29uc3QgbD1yLmJ1ZmZlcixjPXIudHlwZSxkPXIuYnl0ZXNQZXJFbGVtZW50O2lmKGEuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSl7Y29uc3Qgbj1hLmRhdGEscj1uLnN0cmlkZSxwPWEub2Zmc2V0O24mJm4uaXNJbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlcj8oZyhvLG4ubWVzaFBlckF0dHJpYnV0ZSksdm9pZCAwPT09cy5fbWF4SW5zdGFuY2VDb3VudCYmKHMuX21heEluc3RhbmNlQ291bnQ9bi5tZXNoUGVyQXR0cmlidXRlKm4uY291bnQpKTpmKG8pLHQuYmluZEJ1ZmZlcigzNDk2MixsKSxiKG8saSxjLGUscipkLHAqZCl9ZWxzZSBhLmlzSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlPyhnKG8sYS5tZXNoUGVyQXR0cmlidXRlKSx2b2lkIDA9PT1zLl9tYXhJbnN0YW5jZUNvdW50JiYocy5fbWF4SW5zdGFuY2VDb3VudD1hLm1lc2hQZXJBdHRyaWJ1dGUqYS5jb3VudCkpOmYobyksdC5iaW5kQnVmZmVyKDM0OTYyLGwpLGIobyxpLGMsZSwwLDApfWVsc2UgaWYoImluc3RhbmNlTWF0cml4Ij09PWUpe2NvbnN0IGU9bi5nZXQoaS5pbnN0YW5jZU1hdHJpeCk7aWYodm9pZCAwPT09ZSljb250aW51ZTtjb25zdCBhPWUuYnVmZmVyLHI9ZS50eXBlO2cobyswLDEpLGcobysxLDEpLGcobysyLDEpLGcobyszLDEpLHQuYmluZEJ1ZmZlcigzNDk2MixhKSx0LnZlcnRleEF0dHJpYlBvaW50ZXIobyswLDQsciwhMSw2NCwwKSx0LnZlcnRleEF0dHJpYlBvaW50ZXIobysxLDQsciwhMSw2NCwxNiksdC52ZXJ0ZXhBdHRyaWJQb2ludGVyKG8rMiw0LHIsITEsNjQsMzIpLHQudmVydGV4QXR0cmliUG9pbnRlcihvKzMsNCxyLCExLDY0LDQ4KX1lbHNlIGlmKCJpbnN0YW5jZUNvbG9yIj09PWUpe2NvbnN0IGU9bi5nZXQoaS5pbnN0YW5jZUNvbG9yKTtpZih2b2lkIDA9PT1lKWNvbnRpbnVlO2NvbnN0IGE9ZS5idWZmZXIscj1lLnR5cGU7ZyhvLDEpLHQuYmluZEJ1ZmZlcigzNDk2MixhKSx0LnZlcnRleEF0dHJpYlBvaW50ZXIobywzLHIsITEsMTIsMCl9ZWxzZSBpZih2b2lkIDAhPT1kKXtjb25zdCBuPWRbZV07aWYodm9pZCAwIT09bilzd2l0Y2gobi5sZW5ndGgpe2Nhc2UgMjp0LnZlcnRleEF0dHJpYjJmdihvLG4pO2JyZWFrO2Nhc2UgMzp0LnZlcnRleEF0dHJpYjNmdihvLG4pO2JyZWFrO2Nhc2UgNDp0LnZlcnRleEF0dHJpYjRmdihvLG4pO2JyZWFrO2RlZmF1bHQ6dC52ZXJ0ZXhBdHRyaWIxZnYobyxuKX19fX1oKCl9KShpLGwscCx5KSxudWxsIT09XyYmdC5iaW5kQnVmZmVyKDM0OTYzLG4uZ2V0KF8pLmJ1ZmZlcikpfSxyZXNldDp5LHJlc2V0RGVmYXVsdFN0YXRlOl8sZGlzcG9zZTpmdW5jdGlvbiBNKCl7eSgpO2Zvcihjb25zdCB0IGluIHMpe2NvbnN0IGU9c1t0XTtmb3IoY29uc3QgdCBpbiBlKXtjb25zdCBuPWVbdF07Zm9yKGNvbnN0IHQgaW4gbilwKG5bdF0ub2JqZWN0KSxkZWxldGUgblt0XTtkZWxldGUgZVt0XX1kZWxldGUgc1t0XX19LHJlbGVhc2VTdGF0ZXNPZkdlb21ldHJ5OmZ1bmN0aW9uIHYodCl7aWYodm9pZCAwPT09c1t0LmlkXSlyZXR1cm47Y29uc3QgZT1zW3QuaWRdO2Zvcihjb25zdCB0IGluIGUpe2NvbnN0IG49ZVt0XTtmb3IoY29uc3QgdCBpbiBuKXAoblt0XS5vYmplY3QpLGRlbGV0ZSBuW3RdO2RlbGV0ZSBlW3RdfWRlbGV0ZSBzW3QuaWRdfSxyZWxlYXNlU3RhdGVzT2ZQcm9ncmFtOmZ1bmN0aW9uIHgodCl7Zm9yKGNvbnN0IGUgaW4gcyl7Y29uc3Qgbj1zW2VdO2lmKHZvaWQgMD09PW5bdC5pZF0pY29udGludWU7Y29uc3Qgbz1uW3QuaWRdO2Zvcihjb25zdCB0IGluIG8pcChvW3RdLm9iamVjdCksZGVsZXRlIG9bdF07ZGVsZXRlIG5bdC5pZF19fSxpbml0QXR0cmlidXRlczp1LGVuYWJsZUF0dHJpYnV0ZTpmLGRpc2FibGVVbnVzZWRBdHRyaWJ1dGVzOmh9fWZ1bmN0aW9uIEhzdCh0LGUsbixvKXtjb25zdCBpPW8uaXNXZWJHTDI7bGV0IGE7dGhpcy5zZXRNb2RlPWZ1bmN0aW9uIHIodCl7YT10fSx0aGlzLnJlbmRlcj1mdW5jdGlvbiBzKGUsbyl7dC5kcmF3QXJyYXlzKGEsZSxvKSxuLnVwZGF0ZShvLGEsMSl9LHRoaXMucmVuZGVySW5zdGFuY2VzPWZ1bmN0aW9uIGwobyxyLHMpe2lmKDA9PT1zKXJldHVybjtsZXQgbCxjO2lmKGkpbD10LGM9ImRyYXdBcnJheXNJbnN0YW5jZWQiO2Vsc2UgaWYobD1lLmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpLGM9ImRyYXdBcnJheXNJbnN0YW5jZWRBTkdMRSIsbnVsbD09PWwpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xCdWZmZXJSZW5kZXJlcjogdXNpbmcgVEhSRUUuSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkgYnV0IGhhcmR3YXJlIGRvZXMgbm90IHN1cHBvcnQgZXh0ZW5zaW9uIEFOR0xFX2luc3RhbmNlZF9hcnJheXMuIik7bFtjXShhLG8scixzKSxuLnVwZGF0ZShyLGEscyl9fWZ1bmN0aW9uIEZzdCh0LGUsbil7bGV0IG87ZnVuY3Rpb24gaShlKXtpZigiaGlnaHAiPT09ZSl7aWYodC5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoMzU2MzMsMzYzMzgpLnByZWNpc2lvbj4wJiZ0LmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgzNTYzMiwzNjMzOCkucHJlY2lzaW9uPjApcmV0dXJuImhpZ2hwIjtlPSJtZWRpdW1wIn1yZXR1cm4ibWVkaXVtcCI9PT1lJiZ0LmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgzNTYzMywzNjMzNykucHJlY2lzaW9uPjAmJnQuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KDM1NjMyLDM2MzM3KS5wcmVjaXNpb24+MD8ibWVkaXVtcCI6Imxvd3AifWNvbnN0IGE9InVuZGVmaW5lZCIhPXR5cGVvZiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0JiZ0IGluc3RhbmNlb2YgV2ViR0wyUmVuZGVyaW5nQ29udGV4dHx8InVuZGVmaW5lZCIhPXR5cGVvZiBXZWJHTDJDb21wdXRlUmVuZGVyaW5nQ29udGV4dCYmdCBpbnN0YW5jZW9mIFdlYkdMMkNvbXB1dGVSZW5kZXJpbmdDb250ZXh0O2xldCByPXZvaWQgMCE9PW4ucHJlY2lzaW9uP24ucHJlY2lzaW9uOiJoaWdocCI7Y29uc3Qgcz1pKHIpO3MhPT1yJiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiIsciwibm90IHN1cHBvcnRlZCwgdXNpbmciLHMsImluc3RlYWQuIikscj1zKTtjb25zdCBsPSEwPT09bi5sb2dhcml0aG1pY0RlcHRoQnVmZmVyLGM9dC5nZXRQYXJhbWV0ZXIoMzQ5MzApLGQ9dC5nZXRQYXJhbWV0ZXIoMzU2NjApLHA9dC5nZXRQYXJhbWV0ZXIoMzM3OSksbT10LmdldFBhcmFtZXRlcigzNDA3NiksdT10LmdldFBhcmFtZXRlcigzNDkyMSksZj10LmdldFBhcmFtZXRlcigzNjM0NyksZz10LmdldFBhcmFtZXRlcigzNjM0OCksaD10LmdldFBhcmFtZXRlcigzNjM0OSksYj1kPjAseT1hfHwhIWUuZ2V0KCJPRVNfdGV4dHVyZV9mbG9hdCIpO3JldHVybntpc1dlYkdMMjphLGdldE1heEFuaXNvdHJvcHk6ZnVuY3Rpb24gXygpe2lmKHZvaWQgMCE9PW8pcmV0dXJuIG87Y29uc3Qgbj1lLmdldCgiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7cmV0dXJuIG89bnVsbCE9PW4/dC5nZXRQYXJhbWV0ZXIobi5NQVhfVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQpOjAsb30sZ2V0TWF4UHJlY2lzaW9uOmkscHJlY2lzaW9uOnIsbG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcjpsLG1heFRleHR1cmVzOmMsbWF4VmVydGV4VGV4dHVyZXM6ZCxtYXhUZXh0dXJlU2l6ZTpwLG1heEN1YmVtYXBTaXplOm0sbWF4QXR0cmlidXRlczp1LG1heFZlcnRleFVuaWZvcm1zOmYsbWF4VmFyeWluZ3M6ZyxtYXhGcmFnbWVudFVuaWZvcm1zOmgsdmVydGV4VGV4dHVyZXM6YixmbG9hdEZyYWdtZW50VGV4dHVyZXM6eSxmbG9hdFZlcnRleFRleHR1cmVzOmImJnksbWF4U2FtcGxlczphP3QuZ2V0UGFyYW1ldGVyKDM2MTgzKTowfX1mdW5jdGlvbiBMc3QodCl7Y29uc3QgZT10aGlzO2xldCBuPW51bGwsbz0wLGk9ITEsYT0hMTtjb25zdCByPW5ldyBucnQscz1uZXcgV2l0LGw9e3ZhbHVlOm51bGwsbmVlZHNVcGRhdGU6ITF9O2Z1bmN0aW9uIGMoKXtsLnZhbHVlIT09biYmKGwudmFsdWU9bixsLm5lZWRzVXBkYXRlPW8+MCksZS5udW1QbGFuZXM9byxlLm51bUludGVyc2VjdGlvbj0wfWZ1bmN0aW9uIGQodCxuLG8saSl7Y29uc3QgYT1udWxsIT09dD90Lmxlbmd0aDowO2xldCBjPW51bGw7aWYoMCE9PWEpe2lmKGM9bC52YWx1ZSwhMCE9PWl8fG51bGw9PT1jKXtjb25zdCBlPW8rNCphLGk9bi5tYXRyaXhXb3JsZEludmVyc2U7cy5nZXROb3JtYWxNYXRyaXgoaSksKG51bGw9PT1jfHxjLmxlbmd0aDxlKSYmKGM9bmV3IEZsb2F0MzJBcnJheShlKSk7Zm9yKGxldCBlPTAsbj1vO2UhPT1hOysrZSxuKz00KXIuY29weSh0W2VdKS5hcHBseU1hdHJpeDQoaSxzKSxyLm5vcm1hbC50b0FycmF5KGMsbiksY1tuKzNdPXIuY29uc3RhbnR9bC52YWx1ZT1jLGwubmVlZHNVcGRhdGU9ITB9cmV0dXJuIGUubnVtUGxhbmVzPWEsZS5udW1JbnRlcnNlY3Rpb249MCxjfXRoaXMudW5pZm9ybT1sLHRoaXMubnVtUGxhbmVzPTAsdGhpcy5udW1JbnRlcnNlY3Rpb249MCx0aGlzLmluaXQ9ZnVuY3Rpb24odCxlLGEpe2NvbnN0IHI9MCE9PXQubGVuZ3RofHxlfHwwIT09b3x8aTtyZXR1cm4gaT1lLG49ZCh0LGEsMCksbz10Lmxlbmd0aCxyfSx0aGlzLmJlZ2luU2hhZG93cz1mdW5jdGlvbigpe2E9ITAsZChudWxsKX0sdGhpcy5lbmRTaGFkb3dzPWZ1bmN0aW9uKCl7YT0hMSxjKCl9LHRoaXMuc2V0U3RhdGU9ZnVuY3Rpb24oZSxyLHMpe2NvbnN0IHA9ZS5jbGlwcGluZ1BsYW5lcyxtPWUuY2xpcEludGVyc2VjdGlvbix1PWUuY2xpcFNoYWRvd3MsZj10LmdldChlKTtpZighaXx8bnVsbD09PXB8fDA9PT1wLmxlbmd0aHx8YSYmIXUpYT9kKG51bGwpOmMoKTtlbHNle2NvbnN0IHQ9YT8wOm8sZT00KnQ7bGV0IGk9Zi5jbGlwcGluZ1N0YXRlfHxudWxsO2wudmFsdWU9aSxpPWQocCxyLGUscyk7Zm9yKGxldCB0PTA7dCE9PWU7Kyt0KWlbdF09blt0XTtmLmNsaXBwaW5nU3RhdGU9aSx0aGlzLm51bUludGVyc2VjdGlvbj1tP3RoaXMubnVtUGxhbmVzOjAsdGhpcy5udW1QbGFuZXMrPXR9fX1mdW5jdGlvbiBCc3QodCl7bGV0IGU9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gbih0LGUpe3JldHVybiAzMDM9PT1lP3QubWFwcGluZz0zMDE6MzA0PT09ZSYmKHQubWFwcGluZz0zMDIpLHR9ZnVuY3Rpb24gbyh0KXtjb25zdCBuPXQudGFyZ2V0O24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsbyk7Y29uc3QgaT1lLmdldChuKTt2b2lkIDAhPT1pJiYoZS5kZWxldGUobiksaS5kaXNwb3NlKCkpfXJldHVybntnZXQ6ZnVuY3Rpb24gaShhKXtpZihhJiZhLmlzVGV4dHVyZSl7Y29uc3QgaT1hLm1hcHBpbmc7aWYoMzAzPT09aXx8MzA0PT09aSl7aWYoZS5oYXMoYSkpcmV0dXJuIG4oZS5nZXQoYSkudGV4dHVyZSxhLm1hcHBpbmcpO3tjb25zdCBpPWEuaW1hZ2U7aWYoaSYmaS5oZWlnaHQ+MCl7Y29uc3Qgcj10LmdldFJlbmRlckxpc3QoKSxzPXQuZ2V0UmVuZGVyVGFyZ2V0KCksbD1uZXcgT3N0KGkuaGVpZ2h0LzIpO3JldHVybiBsLmZyb21FcXVpcmVjdGFuZ3VsYXJUZXh0dXJlKHQsYSksZS5zZXQoYSxsKSx0LnNldFJlbmRlclRhcmdldChzKSx0LnNldFJlbmRlckxpc3QociksYS5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixvKSxuKGwudGV4dHVyZSxhLm1hcHBpbmcpfXJldHVybiBudWxsfX19cmV0dXJuIGF9LGRpc3Bvc2U6ZnVuY3Rpb24gYSgpe2U9bmV3IFdlYWtNYXB9fX1mdW5jdGlvbiBWc3QodCl7Y29uc3QgZT17fTtmdW5jdGlvbiBuKG4pe2lmKHZvaWQgMCE9PWVbbl0pcmV0dXJuIGVbbl07bGV0IG87c3dpdGNoKG4pe2Nhc2UiV0VCR0xfZGVwdGhfdGV4dHVyZSI6bz10LmdldEV4dGVuc2lvbigiV0VCR0xfZGVwdGhfdGV4dHVyZSIpfHx0LmdldEV4dGVuc2lvbigiTU9aX1dFQkdMX2RlcHRoX3RleHR1cmUiKXx8dC5nZXRFeHRlbnNpb24oIldFQktJVF9XRUJHTF9kZXB0aF90ZXh0dXJlIik7YnJlYWs7Y2FzZSJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiOm89dC5nZXRFeHRlbnNpb24oIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpfHx0LmdldEV4dGVuc2lvbigiTU9aX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpfHx0LmdldEV4dGVuc2lvbigiV0VCS0lUX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpO2JyZWFrO2Nhc2UiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiOm89dC5nZXRFeHRlbnNpb24oIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIil8fHQuZ2V0RXh0ZW5zaW9uKCJNT1pfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKXx8dC5nZXRFeHRlbnNpb24oIldFQktJVF9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpO2JyZWFrO2Nhc2UiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIjpvPXQuZ2V0RXh0ZW5zaW9uKCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKXx8dC5nZXRFeHRlbnNpb24oIldFQktJVF9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKTticmVhaztkZWZhdWx0Om89dC5nZXRFeHRlbnNpb24obil9cmV0dXJuIGVbbl09byxvfXJldHVybntoYXM6ZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPT1uKHQpfSxpbml0OmZ1bmN0aW9uKHQpe3QuaXNXZWJHTDI/bigiRVhUX2NvbG9yX2J1ZmZlcl9mbG9hdCIpOihuKCJXRUJHTF9kZXB0aF90ZXh0dXJlIiksbigiT0VTX3RleHR1cmVfZmxvYXQiKSxuKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IiksbigiT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIiKSxuKCJPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKSxuKCJPRVNfZWxlbWVudF9pbmRleF91aW50IiksbigiT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKSxuKCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIikpLG4oIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpLG4oIkVYVF9jb2xvcl9idWZmZXJfaGFsZl9mbG9hdCIpfSxnZXQ6ZnVuY3Rpb24odCl7Y29uc3QgZT1uKHQpO3JldHVybiBudWxsPT09ZSYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAiK3QrIiBleHRlbnNpb24gbm90IHN1cHBvcnRlZC4iKSxlfX19ZnVuY3Rpb24ganN0KHQsZSxuLG8pe2NvbnN0IGk9e30sYT1uZXcgV2Vha01hcDtmdW5jdGlvbiByKHQpe2NvbnN0IHM9dC50YXJnZXQ7bnVsbCE9PXMuaW5kZXgmJmUucmVtb3ZlKHMuaW5kZXgpO2Zvcihjb25zdCB0IGluIHMuYXR0cmlidXRlcyllLnJlbW92ZShzLmF0dHJpYnV0ZXNbdF0pO3MucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsciksZGVsZXRlIGlbcy5pZF07Y29uc3QgbD1hLmdldChzKTtsJiYoZS5yZW1vdmUobCksYS5kZWxldGUocykpLG8ucmVsZWFzZVN0YXRlc09mR2VvbWV0cnkocyksITA9PT1zLmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkmJmRlbGV0ZSBzLl9tYXhJbnN0YW5jZUNvdW50LG4ubWVtb3J5Lmdlb21ldHJpZXMtLX1mdW5jdGlvbiBzKHQpe2NvbnN0IG49W10sbz10LmluZGV4LGk9dC5hdHRyaWJ1dGVzLnBvc2l0aW9uO2xldCByPTA7aWYobnVsbCE9PW8pe2NvbnN0IHQ9by5hcnJheTtyPW8udmVyc2lvbjtmb3IobGV0IGU9MCxvPXQubGVuZ3RoO2U8bztlKz0zKXtjb25zdCBvPXRbZSswXSxpPXRbZSsxXSxhPXRbZSsyXTtuLnB1c2gobyxpLGksYSxhLG8pfX1lbHNle3I9aS52ZXJzaW9uO2ZvcihsZXQgdD0wLGU9aS5hcnJheS5sZW5ndGgvMy0xO3Q8ZTt0Kz0zKXtjb25zdCBlPXQrMCxvPXQrMSxpPXQrMjtuLnB1c2goZSxvLG8saSxpLGUpfX1jb25zdCBzPW5ldyhGcnQobik+NjU1MzU/TnJ0OlJydCkobiwxKTtzLnZlcnNpb249cjtjb25zdCBsPWEuZ2V0KHQpO2wmJmUucmVtb3ZlKGwpLGEuc2V0KHQscyl9cmV0dXJue2dldDpmdW5jdGlvbiBsKHQsZSl7cmV0dXJuITA9PT1pW2UuaWRdfHwoZS5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixyKSxpW2UuaWRdPSEwLG4ubWVtb3J5Lmdlb21ldHJpZXMrKyksZX0sdXBkYXRlOmZ1bmN0aW9uIGModCl7Y29uc3Qgbj10LmF0dHJpYnV0ZXM7Zm9yKGNvbnN0IHQgaW4gbillLnVwZGF0ZShuW3RdLDM0OTYyKTtjb25zdCBvPXQubW9ycGhBdHRyaWJ1dGVzO2Zvcihjb25zdCB0IGluIG8pe2NvbnN0IG49b1t0XTtmb3IobGV0IHQ9MCxvPW4ubGVuZ3RoO3Q8bzt0KyspZS51cGRhdGUoblt0XSwzNDk2Mil9fSxnZXRXaXJlZnJhbWVBdHRyaWJ1dGU6ZnVuY3Rpb24gZCh0KXtjb25zdCBlPWEuZ2V0KHQpO2lmKGUpe2NvbnN0IG49dC5pbmRleDtudWxsIT09biYmZS52ZXJzaW9uPG4udmVyc2lvbiYmcyh0KX1lbHNlIHModCk7cmV0dXJuIGEuZ2V0KHQpfX19ZnVuY3Rpb24gVXN0KHQsZSxuLG8pe2NvbnN0IGk9by5pc1dlYkdMMjtsZXQgYSxyLHM7dGhpcy5zZXRNb2RlPWZ1bmN0aW9uIGwodCl7YT10fSx0aGlzLnNldEluZGV4PWZ1bmN0aW9uIGModCl7cj10LnR5cGUscz10LmJ5dGVzUGVyRWxlbWVudH0sdGhpcy5yZW5kZXI9ZnVuY3Rpb24gZChlLG8pe3QuZHJhd0VsZW1lbnRzKGEsbyxyLGUqcyksbi51cGRhdGUobyxhLDEpfSx0aGlzLnJlbmRlckluc3RhbmNlcz1mdW5jdGlvbiBwKG8sbCxjKXtpZigwPT09YylyZXR1cm47bGV0IGQscDtpZihpKWQ9dCxwPSJkcmF3RWxlbWVudHNJbnN0YW5jZWQiO2Vsc2UgaWYoZD1lLmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpLHA9ImRyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFIixudWxsPT09ZClyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTEluZGV4ZWRCdWZmZXJSZW5kZXJlcjogdXNpbmcgVEhSRUUuSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkgYnV0IGhhcmR3YXJlIGRvZXMgbm90IHN1cHBvcnQgZXh0ZW5zaW9uIEFOR0xFX2luc3RhbmNlZF9hcnJheXMuIik7ZFtwXShhLGwscixvKnMsYyksbi51cGRhdGUobCxhLGMpfX1mdW5jdGlvbiBXc3QodCl7Y29uc3QgZT17ZnJhbWU6MCxjYWxsczowLHRyaWFuZ2xlczowLHBvaW50czowLGxpbmVzOjB9O3JldHVybnttZW1vcnk6e2dlb21ldHJpZXM6MCx0ZXh0dXJlczowfSxyZW5kZXI6ZSxwcm9ncmFtczpudWxsLGF1dG9SZXNldDohMCxyZXNldDpmdW5jdGlvbiBuKCl7ZS5mcmFtZSsrLGUuY2FsbHM9MCxlLnRyaWFuZ2xlcz0wLGUucG9pbnRzPTAsZS5saW5lcz0wfSx1cGRhdGU6ZnVuY3Rpb24gbyh0LG4saSl7c3dpdGNoKGUuY2FsbHMrKyxuKXtjYXNlIDQ6ZS50cmlhbmdsZXMrPWkqKHQvMyk7YnJlYWs7Y2FzZSAxOmUubGluZXMrPWkqKHQvMik7YnJlYWs7Y2FzZSAzOmUubGluZXMrPWkqKHQtMSk7YnJlYWs7Y2FzZSAyOmUubGluZXMrPWkqdDticmVhaztjYXNlIDA6ZS5wb2ludHMrPWkqdDticmVhaztkZWZhdWx0OmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMSW5mbzogVW5rbm93biBkcmF3IG1vZGU6IixuKX19fX1mdW5jdGlvbiBHc3QodCxlKXtyZXR1cm4gdFswXS1lWzBdfWZ1bmN0aW9uIFlzdCh0LGUpe3JldHVybiBNYXRoLmFicyhlWzFdKS1NYXRoLmFicyh0WzFdKX1mdW5jdGlvbiBxc3QodCl7Y29uc3QgZT17fSxuPW5ldyBGbG9hdDMyQXJyYXkoOCksbz1bXTtmb3IobGV0IHQ9MDt0PDg7dCsrKW9bdF09W3QsMF07cmV0dXJue3VwZGF0ZTpmdW5jdGlvbiBpKGEscixzLGwpe2NvbnN0IGM9YS5tb3JwaFRhcmdldEluZmx1ZW5jZXMsZD12b2lkIDA9PT1jPzA6Yy5sZW5ndGg7bGV0IHA9ZVtyLmlkXTtpZih2b2lkIDA9PT1wKXtwPVtdO2ZvcihsZXQgdD0wO3Q8ZDt0KyspcFt0XT1bdCwwXTtlW3IuaWRdPXB9Zm9yKGxldCB0PTA7dDxkO3QrKyl7Y29uc3QgZT1wW3RdO2VbMF09dCxlWzFdPWNbdF19cC5zb3J0KFlzdCk7Zm9yKGxldCB0PTA7dDw4O3QrKyl0PGQmJnBbdF1bMV0/KG9bdF1bMF09cFt0XVswXSxvW3RdWzFdPXBbdF1bMV0pOihvW3RdWzBdPU51bWJlci5NQVhfU0FGRV9JTlRFR0VSLG9bdF1bMV09MCk7by5zb3J0KEdzdCk7Y29uc3QgbT1zLm1vcnBoVGFyZ2V0cyYmci5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24sdT1zLm1vcnBoTm9ybWFscyYmci5tb3JwaEF0dHJpYnV0ZXMubm9ybWFsO2xldCBmPTA7Zm9yKGxldCB0PTA7dDw4O3QrKyl7Y29uc3QgZT1vW3RdLGk9ZVswXSxhPWVbMV07aSE9PU51bWJlci5NQVhfU0FGRV9JTlRFR0VSJiZhPyhtJiZyLmdldEF0dHJpYnV0ZSgibW9ycGhUYXJnZXQiK3QpIT09bVtpXSYmci5zZXRBdHRyaWJ1dGUoIm1vcnBoVGFyZ2V0Iit0LG1baV0pLHUmJnIuZ2V0QXR0cmlidXRlKCJtb3JwaE5vcm1hbCIrdCkhPT11W2ldJiZyLnNldEF0dHJpYnV0ZSgibW9ycGhOb3JtYWwiK3QsdVtpXSksblt0XT1hLGYrPWEpOihtJiYhMD09PXIuaGFzQXR0cmlidXRlKCJtb3JwaFRhcmdldCIrdCkmJnIuZGVsZXRlQXR0cmlidXRlKCJtb3JwaFRhcmdldCIrdCksdSYmITA9PT1yLmhhc0F0dHJpYnV0ZSgibW9ycGhOb3JtYWwiK3QpJiZyLmRlbGV0ZUF0dHJpYnV0ZSgibW9ycGhOb3JtYWwiK3QpLG5bdF09MCl9Y29uc3QgZz1yLm1vcnBoVGFyZ2V0c1JlbGF0aXZlPzE6MS1mO2wuZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZSh0LCJtb3JwaFRhcmdldEJhc2VJbmZsdWVuY2UiLGcpLGwuZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZSh0LCJtb3JwaFRhcmdldEluZmx1ZW5jZXMiLG4pfX19ZnVuY3Rpb24gWnN0KHQsZSxuLG8pe2xldCBpPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIGEodCl7Y29uc3QgZT10LnRhcmdldDtlLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGEpLG4ucmVtb3ZlKGUuaW5zdGFuY2VNYXRyaXgpLG51bGwhPT1lLmluc3RhbmNlQ29sb3ImJm4ucmVtb3ZlKGUuaW5zdGFuY2VDb2xvcil9cmV0dXJue3VwZGF0ZTpmdW5jdGlvbiByKHQpe2NvbnN0IHI9by5yZW5kZXIuZnJhbWUscz1lLmdldCh0LHQuZ2VvbWV0cnkpO3JldHVybiBpLmdldChzKSE9PXImJihlLnVwZGF0ZShzKSxpLnNldChzLHIpKSx0LmlzSW5zdGFuY2VkTWVzaCYmKCExPT09dC5oYXNFdmVudExpc3RlbmVyKCJkaXNwb3NlIixhKSYmdC5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixhKSxuLnVwZGF0ZSh0Lmluc3RhbmNlTWF0cml4LDM0OTYyKSxudWxsIT09dC5pbnN0YW5jZUNvbG9yJiZuLnVwZGF0ZSh0Lmluc3RhbmNlQ29sb3IsMzQ5NjIpKSxzfSxkaXNwb3NlOmZ1bmN0aW9uIHMoKXtpPW5ldyBXZWFrTWFwfX19ZnVuY3Rpb24gWHN0KHQ9bnVsbCxlPTEsbj0xLG89MSl7Wml0LmNhbGwodGhpcyxudWxsKSx0aGlzLmltYWdlPXtkYXRhOnQsd2lkdGg6ZSxoZWlnaHQ6bixkZXB0aDpvfSx0aGlzLm1hZ0ZpbHRlcj1oaXQsdGhpcy5taW5GaWx0ZXI9aGl0LHRoaXMud3JhcFI9Zml0LHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExLHRoaXMuZmxpcFk9ITEsdGhpcy5uZWVkc1VwZGF0ZT0hMH1mdW5jdGlvbiBLc3QodD1udWxsLGU9MSxuPTEsbz0xKXtaaXQuY2FsbCh0aGlzLG51bGwpLHRoaXMuaW1hZ2U9e2RhdGE6dCx3aWR0aDplLGhlaWdodDpuLGRlcHRoOm99LHRoaXMubWFnRmlsdGVyPWhpdCx0aGlzLm1pbkZpbHRlcj1oaXQsdGhpcy53cmFwUj1maXQsdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITEsdGhpcy5mbGlwWT0hMSx0aGlzLm5lZWRzVXBkYXRlPSEwfU5zdC5waHlzaWNhbD17dW5pZm9ybXM6aHN0KFtOc3Quc3RhbmRhcmQudW5pZm9ybXMse2NsZWFyY29hdDp7dmFsdWU6MH0sY2xlYXJjb2F0TWFwOnt2YWx1ZTpudWxsfSxjbGVhcmNvYXRSb3VnaG5lc3M6e3ZhbHVlOjB9LGNsZWFyY29hdFJvdWdobmVzc01hcDp7dmFsdWU6bnVsbH0sY2xlYXJjb2F0Tm9ybWFsU2NhbGU6e3ZhbHVlOm5ldyBVaXQoMSwxKX0sY2xlYXJjb2F0Tm9ybWFsTWFwOnt2YWx1ZTpudWxsfSxzaGVlbjp7dmFsdWU6bmV3IENydCgwKX0sdHJhbnNtaXNzaW9uOnt2YWx1ZTowfSx0cmFuc21pc3Npb25NYXA6e3ZhbHVlOm51bGx9fV0pLHZlcnRleFNoYWRlcjpSc3QubWVzaHBoeXNpY2FsX3ZlcnQsZnJhZ21lbnRTaGFkZXI6UnN0Lm1lc2hwaHlzaWNhbF9mcmFnfSwoWHN0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFppdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1Yc3QsWHN0LnByb3RvdHlwZS5pc0RhdGFUZXh0dXJlMkRBcnJheT0hMCwoS3N0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFppdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1Lc3QsS3N0LnByb3RvdHlwZS5pc0RhdGFUZXh0dXJlM0Q9ITA7Y29uc3QgSnN0PW5ldyBaaXQsUXN0PW5ldyBYc3QsJHN0PW5ldyBLc3QsdGx0PW5ldyB4c3QsZWx0PVtdLG5sdD1bXSxvbHQ9bmV3IEZsb2F0MzJBcnJheSgxNiksaWx0PW5ldyBGbG9hdDMyQXJyYXkoOSksYWx0PW5ldyBGbG9hdDMyQXJyYXkoNCk7ZnVuY3Rpb24gcmx0KHQsZSxuKXtjb25zdCBvPXRbMF07aWYobzw9MHx8bz4wKXJldHVybiB0O2NvbnN0IGk9ZSpuO2xldCBhPWVsdFtpXTtpZih2b2lkIDA9PT1hJiYoYT1uZXcgRmxvYXQzMkFycmF5KGkpLGVsdFtpXT1hKSwwIT09ZSl7by50b0FycmF5KGEsMCk7Zm9yKGxldCBvPTEsaT0wO28hPT1lOysrbylpKz1uLHRbb10udG9BcnJheShhLGkpfXJldHVybiBhfWZ1bmN0aW9uIHNsdCh0LGUpe2lmKHQubGVuZ3RoIT09ZS5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBuPTAsbz10Lmxlbmd0aDtuPG87bisrKWlmKHRbbl0hPT1lW25dKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGxsdCh0LGUpe2ZvcihsZXQgbj0wLG89ZS5sZW5ndGg7bjxvO24rKyl0W25dPWVbbl19ZnVuY3Rpb24gY2x0KHQsZSl7bGV0IG49bmx0W2VdO3ZvaWQgMD09PW4mJihuPW5ldyBJbnQzMkFycmF5KGUpLG5sdFtlXT1uKTtmb3IobGV0IG89MDtvIT09ZTsrK28pbltvXT10LmFsbG9jYXRlVGV4dHVyZVVuaXQoKTtyZXR1cm4gbn1mdW5jdGlvbiBkbHQodCxlKXtjb25zdCBuPXRoaXMuY2FjaGU7blswXSE9PWUmJih0LnVuaWZvcm0xZih0aGlzLmFkZHIsZSksblswXT1lKX1mdW5jdGlvbiBwbHQodCxlKXtjb25zdCBuPXRoaXMuY2FjaGU7aWYodm9pZCAwIT09ZS54KW5bMF09PT1lLngmJm5bMV09PT1lLnl8fCh0LnVuaWZvcm0yZih0aGlzLmFkZHIsZS54LGUueSksblswXT1lLngsblsxXT1lLnkpO2Vsc2V7aWYoc2x0KG4sZSkpcmV0dXJuO3QudW5pZm9ybTJmdih0aGlzLmFkZHIsZSksbGx0KG4sZSl9fWZ1bmN0aW9uIG1sdCh0LGUpe2NvbnN0IG49dGhpcy5jYWNoZTtpZih2b2lkIDAhPT1lLngpblswXT09PWUueCYmblsxXT09PWUueSYmblsyXT09PWUuenx8KHQudW5pZm9ybTNmKHRoaXMuYWRkcixlLngsZS55LGUueiksblswXT1lLngsblsxXT1lLnksblsyXT1lLnopO2Vsc2UgaWYodm9pZCAwIT09ZS5yKW5bMF09PT1lLnImJm5bMV09PT1lLmcmJm5bMl09PT1lLmJ8fCh0LnVuaWZvcm0zZih0aGlzLmFkZHIsZS5yLGUuZyxlLmIpLG5bMF09ZS5yLG5bMV09ZS5nLG5bMl09ZS5iKTtlbHNle2lmKHNsdChuLGUpKXJldHVybjt0LnVuaWZvcm0zZnYodGhpcy5hZGRyLGUpLGxsdChuLGUpfX1mdW5jdGlvbiB1bHQodCxlKXtjb25zdCBuPXRoaXMuY2FjaGU7aWYodm9pZCAwIT09ZS54KW5bMF09PT1lLngmJm5bMV09PT1lLnkmJm5bMl09PT1lLnomJm5bM109PT1lLnd8fCh0LnVuaWZvcm00Zih0aGlzLmFkZHIsZS54LGUueSxlLnosZS53KSxuWzBdPWUueCxuWzFdPWUueSxuWzJdPWUueixuWzNdPWUudyk7ZWxzZXtpZihzbHQobixlKSlyZXR1cm47dC51bmlmb3JtNGZ2KHRoaXMuYWRkcixlKSxsbHQobixlKX19ZnVuY3Rpb24gZmx0KHQsZSl7Y29uc3Qgbj10aGlzLmNhY2hlLG89ZS5lbGVtZW50cztpZih2b2lkIDA9PT1vKXtpZihzbHQobixlKSlyZXR1cm47dC51bmlmb3JtTWF0cml4MmZ2KHRoaXMuYWRkciwhMSxlKSxsbHQobixlKX1lbHNle2lmKHNsdChuLG8pKXJldHVybjthbHQuc2V0KG8pLHQudW5pZm9ybU1hdHJpeDJmdih0aGlzLmFkZHIsITEsYWx0KSxsbHQobixvKX19ZnVuY3Rpb24gZ2x0KHQsZSl7Y29uc3Qgbj10aGlzLmNhY2hlLG89ZS5lbGVtZW50cztpZih2b2lkIDA9PT1vKXtpZihzbHQobixlKSlyZXR1cm47dC51bmlmb3JtTWF0cml4M2Z2KHRoaXMuYWRkciwhMSxlKSxsbHQobixlKX1lbHNle2lmKHNsdChuLG8pKXJldHVybjtpbHQuc2V0KG8pLHQudW5pZm9ybU1hdHJpeDNmdih0aGlzLmFkZHIsITEsaWx0KSxsbHQobixvKX19ZnVuY3Rpb24gaGx0KHQsZSl7Y29uc3Qgbj10aGlzLmNhY2hlLG89ZS5lbGVtZW50cztpZih2b2lkIDA9PT1vKXtpZihzbHQobixlKSlyZXR1cm47dC51bmlmb3JtTWF0cml4NGZ2KHRoaXMuYWRkciwhMSxlKSxsbHQobixlKX1lbHNle2lmKHNsdChuLG8pKXJldHVybjtvbHQuc2V0KG8pLHQudW5pZm9ybU1hdHJpeDRmdih0aGlzLmFkZHIsITEsb2x0KSxsbHQobixvKX19ZnVuY3Rpb24gYmx0KHQsZSxuKXtjb25zdCBvPXRoaXMuY2FjaGUsaT1uLmFsbG9jYXRlVGV4dHVyZVVuaXQoKTtvWzBdIT09aSYmKHQudW5pZm9ybTFpKHRoaXMuYWRkcixpKSxvWzBdPWkpLG4uc2FmZVNldFRleHR1cmUyRChlfHxKc3QsaSl9ZnVuY3Rpb24geWx0KHQsZSxuKXtjb25zdCBvPXRoaXMuY2FjaGUsaT1uLmFsbG9jYXRlVGV4dHVyZVVuaXQoKTtvWzBdIT09aSYmKHQudW5pZm9ybTFpKHRoaXMuYWRkcixpKSxvWzBdPWkpLG4uc2V0VGV4dHVyZTJEQXJyYXkoZXx8UXN0LGkpfWZ1bmN0aW9uIF9sdCh0LGUsbil7Y29uc3Qgbz10aGlzLmNhY2hlLGk9bi5hbGxvY2F0ZVRleHR1cmVVbml0KCk7b1swXSE9PWkmJih0LnVuaWZvcm0xaSh0aGlzLmFkZHIsaSksb1swXT1pKSxuLnNldFRleHR1cmUzRChlfHwkc3QsaSl9ZnVuY3Rpb24gQ2x0KHQsZSxuKXtjb25zdCBvPXRoaXMuY2FjaGUsaT1uLmFsbG9jYXRlVGV4dHVyZVVuaXQoKTtvWzBdIT09aSYmKHQudW5pZm9ybTFpKHRoaXMuYWRkcixpKSxvWzBdPWkpLG4uc2FmZVNldFRleHR1cmVDdWJlKGV8fHRsdCxpKX1mdW5jdGlvbiBNbHQodCxlKXtjb25zdCBuPXRoaXMuY2FjaGU7blswXSE9PWUmJih0LnVuaWZvcm0xaSh0aGlzLmFkZHIsZSksblswXT1lKX1mdW5jdGlvbiB2bHQodCxlKXtjb25zdCBuPXRoaXMuY2FjaGU7c2x0KG4sZSl8fCh0LnVuaWZvcm0yaXYodGhpcy5hZGRyLGUpLGxsdChuLGUpKX1mdW5jdGlvbiB4bHQodCxlKXtjb25zdCBuPXRoaXMuY2FjaGU7c2x0KG4sZSl8fCh0LnVuaWZvcm0zaXYodGhpcy5hZGRyLGUpLGxsdChuLGUpKX1mdW5jdGlvbiBPbHQodCxlKXtjb25zdCBuPXRoaXMuY2FjaGU7c2x0KG4sZSl8fCh0LnVuaWZvcm00aXYodGhpcy5hZGRyLGUpLGxsdChuLGUpKX1mdW5jdGlvbiBQbHQodCxlKXtjb25zdCBuPXRoaXMuY2FjaGU7blswXSE9PWUmJih0LnVuaWZvcm0xdWkodGhpcy5hZGRyLGUpLG5bMF09ZSl9ZnVuY3Rpb24gd2x0KHQsZSl7dC51bmlmb3JtMWZ2KHRoaXMuYWRkcixlKX1mdW5jdGlvbiBrbHQodCxlKXt0LnVuaWZvcm0xaXYodGhpcy5hZGRyLGUpfWZ1bmN0aW9uIFNsdCh0LGUpe3QudW5pZm9ybTJpdih0aGlzLmFkZHIsZSl9ZnVuY3Rpb24gRGx0KHQsZSl7dC51bmlmb3JtM2l2KHRoaXMuYWRkcixlKX1mdW5jdGlvbiBFbHQodCxlKXt0LnVuaWZvcm00aXYodGhpcy5hZGRyLGUpfWZ1bmN0aW9uIEFsdCh0LGUpe2NvbnN0IG49cmx0KGUsdGhpcy5zaXplLDIpO3QudW5pZm9ybTJmdih0aGlzLmFkZHIsbil9ZnVuY3Rpb24gUmx0KHQsZSl7Y29uc3Qgbj1ybHQoZSx0aGlzLnNpemUsMyk7dC51bmlmb3JtM2Z2KHRoaXMuYWRkcixuKX1mdW5jdGlvbiBUbHQodCxlKXtjb25zdCBuPXJsdChlLHRoaXMuc2l6ZSw0KTt0LnVuaWZvcm00ZnYodGhpcy5hZGRyLG4pfWZ1bmN0aW9uIE5sdCh0LGUpe2NvbnN0IG49cmx0KGUsdGhpcy5zaXplLDQpO3QudW5pZm9ybU1hdHJpeDJmdih0aGlzLmFkZHIsITEsbil9ZnVuY3Rpb24gSWx0KHQsZSl7Y29uc3Qgbj1ybHQoZSx0aGlzLnNpemUsOSk7dC51bmlmb3JtTWF0cml4M2Z2KHRoaXMuYWRkciwhMSxuKX1mdW5jdGlvbiB6bHQodCxlKXtjb25zdCBuPXJsdChlLHRoaXMuc2l6ZSwxNik7dC51bmlmb3JtTWF0cml4NGZ2KHRoaXMuYWRkciwhMSxuKX1mdW5jdGlvbiBIbHQodCxlLG4pe2NvbnN0IG89ZS5sZW5ndGgsaT1jbHQobixvKTt0LnVuaWZvcm0xaXYodGhpcy5hZGRyLGkpO2ZvcihsZXQgdD0wO3QhPT1vOysrdCluLnNhZmVTZXRUZXh0dXJlMkQoZVt0XXx8SnN0LGlbdF0pfWZ1bmN0aW9uIEZsdCh0LGUsbil7Y29uc3Qgbz1lLmxlbmd0aCxpPWNsdChuLG8pO3QudW5pZm9ybTFpdih0aGlzLmFkZHIsaSk7Zm9yKGxldCB0PTA7dCE9PW87Kyt0KW4uc2FmZVNldFRleHR1cmVDdWJlKGVbdF18fHRsdCxpW3RdKX1mdW5jdGlvbiBMbHQodCxlLG4pe3RoaXMuaWQ9dCx0aGlzLmFkZHI9bix0aGlzLmNhY2hlPVtdLHRoaXMuc2V0VmFsdWU9KGZ1bmN0aW9uIG8odCl7c3dpdGNoKHQpe2Nhc2UgNTEyNjpyZXR1cm4gZGx0O2Nhc2UgMzU2NjQ6cmV0dXJuIHBsdDtjYXNlIDM1NjY1OnJldHVybiBtbHQ7Y2FzZSAzNTY2NjpyZXR1cm4gdWx0O2Nhc2UgMzU2NzQ6cmV0dXJuIGZsdDtjYXNlIDM1Njc1OnJldHVybiBnbHQ7Y2FzZSAzNTY3NjpyZXR1cm4gaGx0O2Nhc2UgNTEyNDpjYXNlIDM1NjcwOnJldHVybiBNbHQ7Y2FzZSAzNTY2NzpjYXNlIDM1NjcxOnJldHVybiB2bHQ7Y2FzZSAzNTY2ODpjYXNlIDM1NjcyOnJldHVybiB4bHQ7Y2FzZSAzNTY2OTpjYXNlIDM1NjczOnJldHVybiBPbHQ7Y2FzZSA1MTI1OnJldHVybiBQbHQ7Y2FzZSAzNTY3ODpjYXNlIDM2MTk4OmNhc2UgMzYyOTg6Y2FzZSAzNjMwNjpjYXNlIDM1NjgyOnJldHVybiBibHQ7Y2FzZSAzNTY3OTpjYXNlIDM2Mjk5OmNhc2UgMzYzMDc6cmV0dXJuIF9sdDtjYXNlIDM1NjgwOmNhc2UgMzYzMDA6Y2FzZSAzNjMwODpjYXNlIDM2MjkzOnJldHVybiBDbHQ7Y2FzZSAzNjI4OTpjYXNlIDM2MzAzOmNhc2UgMzYzMTE6Y2FzZSAzNjI5MjpyZXR1cm4geWx0fX0pKGUudHlwZSl9ZnVuY3Rpb24gQmx0KHQsZSxuKXt0aGlzLmlkPXQsdGhpcy5hZGRyPW4sdGhpcy5jYWNoZT1bXSx0aGlzLnNpemU9ZS5zaXplLHRoaXMuc2V0VmFsdWU9KGZ1bmN0aW9uIG8odCl7c3dpdGNoKHQpe2Nhc2UgNTEyNjpyZXR1cm4gd2x0O2Nhc2UgMzU2NjQ6cmV0dXJuIEFsdDtjYXNlIDM1NjY1OnJldHVybiBSbHQ7Y2FzZSAzNTY2NjpyZXR1cm4gVGx0O2Nhc2UgMzU2NzQ6cmV0dXJuIE5sdDtjYXNlIDM1Njc1OnJldHVybiBJbHQ7Y2FzZSAzNTY3NjpyZXR1cm4gemx0O2Nhc2UgNTEyNDpjYXNlIDM1NjcwOnJldHVybiBrbHQ7Y2FzZSAzNTY2NzpjYXNlIDM1NjcxOnJldHVybiBTbHQ7Y2FzZSAzNTY2ODpjYXNlIDM1NjcyOnJldHVybiBEbHQ7Y2FzZSAzNTY2OTpjYXNlIDM1NjczOnJldHVybiBFbHQ7Y2FzZSAzNTY3ODpjYXNlIDM2MTk4OmNhc2UgMzYyOTg6Y2FzZSAzNjMwNjpjYXNlIDM1NjgyOnJldHVybiBIbHQ7Y2FzZSAzNTY4MDpjYXNlIDM2MzAwOmNhc2UgMzYzMDg6Y2FzZSAzNjI5MzpyZXR1cm4gRmx0fX0pKGUudHlwZSl9ZnVuY3Rpb24gVmx0KHQpe3RoaXMuaWQ9dCx0aGlzLnNlcT1bXSx0aGlzLm1hcD17fX1CbHQucHJvdG90eXBlLnVwZGF0ZUNhY2hlPWZ1bmN0aW9uKHQpe2NvbnN0IGU9dGhpcy5jYWNoZTt0IGluc3RhbmNlb2YgRmxvYXQzMkFycmF5JiZlLmxlbmd0aCE9PXQubGVuZ3RoJiYodGhpcy5jYWNoZT1uZXcgRmxvYXQzMkFycmF5KHQubGVuZ3RoKSksbGx0KGUsdCl9LFZsdC5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24odCxlLG4pe2NvbnN0IG89dGhpcy5zZXE7Zm9yKGxldCBpPTAsYT1vLmxlbmd0aDtpIT09YTsrK2kpe2NvbnN0IGE9b1tpXTthLnNldFZhbHVlKHQsZVthLmlkXSxuKX19O2NvbnN0IGpsdD0vKFx3KykoXF0pPyhcW3xcLik/L2c7ZnVuY3Rpb24gVWx0KHQsZSl7dC5zZXEucHVzaChlKSx0Lm1hcFtlLmlkXT1lfWZ1bmN0aW9uIFdsdCh0LGUsbil7Y29uc3Qgbz10Lm5hbWUsaT1vLmxlbmd0aDtmb3Ioamx0Lmxhc3RJbmRleD0wOzspe2NvbnN0IGE9amx0LmV4ZWMobykscj1qbHQubGFzdEluZGV4O2xldCBzPWFbMV07Y29uc3QgbD1hWzNdO2lmKCJdIj09PWFbMl0mJihzfD0wKSx2b2lkIDA9PT1sfHwiWyI9PT1sJiZyKzI9PT1pKXtVbHQobix2b2lkIDA9PT1sP25ldyBMbHQocyx0LGUpOm5ldyBCbHQocyx0LGUpKTticmVha317bGV0IHQ9bi5tYXBbc107dm9pZCAwPT09dCYmKHQ9bmV3IFZsdChzKSxVbHQobix0KSksbj10fX19ZnVuY3Rpb24gR2x0KHQsZSl7dGhpcy5zZXE9W10sdGhpcy5tYXA9e307Y29uc3Qgbj10LmdldFByb2dyYW1QYXJhbWV0ZXIoZSwzNTcxOCk7Zm9yKGxldCBvPTA7bzxuOysrbyl7Y29uc3Qgbj10LmdldEFjdGl2ZVVuaWZvcm0oZSxvKTtXbHQobix0LmdldFVuaWZvcm1Mb2NhdGlvbihlLG4ubmFtZSksdGhpcyl9fWZ1bmN0aW9uIFlsdCh0LGUsbil7Y29uc3Qgbz10LmNyZWF0ZVNoYWRlcihlKTtyZXR1cm4gdC5zaGFkZXJTb3VyY2UobyxuKSx0LmNvbXBpbGVTaGFkZXIobyksb31HbHQucHJvdG90eXBlLnNldFZhbHVlPWZ1bmN0aW9uKHQsZSxuLG8pe2NvbnN0IGk9dGhpcy5tYXBbZV07dm9pZCAwIT09aSYmaS5zZXRWYWx1ZSh0LG4sbyl9LEdsdC5wcm90b3R5cGUuc2V0T3B0aW9uYWw9ZnVuY3Rpb24odCxlLG4pe2NvbnN0IG89ZVtuXTt2b2lkIDAhPT1vJiZ0aGlzLnNldFZhbHVlKHQsbixvKX0sR2x0LnVwbG9hZD1mdW5jdGlvbih0LGUsbixvKXtmb3IobGV0IGk9MCxhPWUubGVuZ3RoO2khPT1hOysraSl7Y29uc3QgYT1lW2ldLHI9blthLmlkXTshMSE9PXIubmVlZHNVcGRhdGUmJmEuc2V0VmFsdWUodCxyLnZhbHVlLG8pfX0sR2x0LnNlcVdpdGhWYWx1ZT1mdW5jdGlvbih0LGUpe2NvbnN0IG49W107Zm9yKGxldCBvPTAsaT10Lmxlbmd0aDtvIT09aTsrK28pe2NvbnN0IGk9dFtvXTtpLmlkIGluIGUmJm4ucHVzaChpKX1yZXR1cm4gbn07bGV0IHFsdD0wO2Z1bmN0aW9uIFpsdCh0KXtzd2l0Y2godCl7Y2FzZSBOaXQ6cmV0dXJuWyJMaW5lYXIiLCIoIHZhbHVlICkiXTtjYXNlIDMwMDE6cmV0dXJuWyJzUkdCIiwiKCB2YWx1ZSApIl07Y2FzZSAzMDAyOnJldHVyblsiUkdCRSIsIiggdmFsdWUgKSJdO2Nhc2UgMzAwNDpyZXR1cm5bIlJHQk0iLCIoIHZhbHVlLCA3LjAgKSJdO2Nhc2UgMzAwNTpyZXR1cm5bIlJHQk0iLCIoIHZhbHVlLCAxNi4wICkiXTtjYXNlIDMwMDY6cmV0dXJuWyJSR0JEIiwiKCB2YWx1ZSwgMjU2LjAgKSJdO2Nhc2UgMzAwNzpyZXR1cm5bIkdhbW1hIiwiKCB2YWx1ZSwgZmxvYXQoIEdBTU1BX0ZBQ1RPUiApICkiXTtjYXNlIDMwMDM6cmV0dXJuWyJMb2dMdXYiLCIoIHZhbHVlICkiXTtkZWZhdWx0OnJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUHJvZ3JhbTogVW5zdXBwb3J0ZWQgZW5jb2Rpbmc6Iix0KSxbIkxpbmVhciIsIiggdmFsdWUgKSJdfX1mdW5jdGlvbiBYbHQodCxlLG4pe2NvbnN0IG89dC5nZXRTaGFkZXJQYXJhbWV0ZXIoZSwzNTcxMyksaT10LmdldFNoYWRlckluZm9Mb2coZSkudHJpbSgpO3JldHVybiBvJiYiIj09PWk/IiI6IlRIUkVFLldlYkdMU2hhZGVyOiBnbC5nZXRTaGFkZXJJbmZvTG9nKCkgIituKyJcbiIraSsoZnVuY3Rpb24gYSh0KXtjb25zdCBlPXQuc3BsaXQoIlxuIik7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0KyspZVt0XT10KzErIjogIitlW3RdO3JldHVybiBlLmpvaW4oIlxuIil9KSh0LmdldFNoYWRlclNvdXJjZShlKSl9ZnVuY3Rpb24gS2x0KHQsZSl7Y29uc3Qgbj1abHQoZSk7cmV0dXJuInZlYzQgIit0KyIoIHZlYzQgdmFsdWUgKSB7IHJldHVybiAiK25bMF0rIlRvTGluZWFyIituWzFdKyI7IH0ifWZ1bmN0aW9uIEpsdCh0LGUpe2NvbnN0IG49Wmx0KGUpO3JldHVybiJ2ZWM0ICIrdCsiKCB2ZWM0IHZhbHVlICkgeyByZXR1cm4gTGluZWFyVG8iK25bMF0rblsxXSsiOyB9In1mdW5jdGlvbiBRbHQodCxlKXtsZXQgbjtzd2l0Y2goZSl7Y2FzZSAxOm49IkxpbmVhciI7YnJlYWs7Y2FzZSAyOm49IlJlaW5oYXJkIjticmVhaztjYXNlIDM6bj0iT3B0aW1pemVkQ2luZW9uIjticmVhaztjYXNlIDQ6bj0iQUNFU0ZpbG1pYyI7YnJlYWs7Y2FzZSA1Om49IkN1c3RvbSI7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUHJvZ3JhbTogVW5zdXBwb3J0ZWQgdG9uZU1hcHBpbmc6IixlKSxuPSJMaW5lYXIifXJldHVybiJ2ZWMzICIrdCsiKCB2ZWMzIGNvbG9yICkgeyByZXR1cm4gIituKyJUb25lTWFwcGluZyggY29sb3IgKTsgfSJ9ZnVuY3Rpb24gJGx0KHQpe3JldHVybiIiIT09dH1mdW5jdGlvbiB0Y3QodCxlKXtyZXR1cm4gdC5yZXBsYWNlKC9OVU1fRElSX0xJR0hUUy9nLGUubnVtRGlyTGlnaHRzKS5yZXBsYWNlKC9OVU1fU1BPVF9MSUdIVFMvZyxlLm51bVNwb3RMaWdodHMpLnJlcGxhY2UoL05VTV9SRUNUX0FSRUFfTElHSFRTL2csZS5udW1SZWN0QXJlYUxpZ2h0cykucmVwbGFjZSgvTlVNX1BPSU5UX0xJR0hUUy9nLGUubnVtUG9pbnRMaWdodHMpLnJlcGxhY2UoL05VTV9IRU1JX0xJR0hUUy9nLGUubnVtSGVtaUxpZ2h0cykucmVwbGFjZSgvTlVNX0RJUl9MSUdIVF9TSEFET1dTL2csZS5udW1EaXJMaWdodFNoYWRvd3MpLnJlcGxhY2UoL05VTV9TUE9UX0xJR0hUX1NIQURPV1MvZyxlLm51bVNwb3RMaWdodFNoYWRvd3MpLnJlcGxhY2UoL05VTV9QT0lOVF9MSUdIVF9TSEFET1dTL2csZS5udW1Qb2ludExpZ2h0U2hhZG93cyl9ZnVuY3Rpb24gZWN0KHQsZSl7cmV0dXJuIHQucmVwbGFjZSgvTlVNX0NMSVBQSU5HX1BMQU5FUy9nLGUubnVtQ2xpcHBpbmdQbGFuZXMpLnJlcGxhY2UoL1VOSU9OX0NMSVBQSU5HX1BMQU5FUy9nLGUubnVtQ2xpcHBpbmdQbGFuZXMtZS5udW1DbGlwSW50ZXJzZWN0aW9uKX1jb25zdCBuY3Q9L15bIFx0XSojaW5jbHVkZSArPChbXHdcZC4vXSspPi9nbTtmdW5jdGlvbiBvY3QodCl7cmV0dXJuIHQucmVwbGFjZShuY3QsaWN0KX1mdW5jdGlvbiBpY3QodCxlKXtjb25zdCBuPVJzdFtlXTtpZih2b2lkIDA9PT1uKXRocm93IG5ldyBFcnJvcigiQ2FuIG5vdCByZXNvbHZlICNpbmNsdWRlIDwiK2UrIj4iKTtyZXR1cm4gb2N0KG4pfWNvbnN0IGFjdD0vI3ByYWdtYSB1bnJvbGxfbG9vcFtcc10rP2ZvciBcKCBpbnQgaSBcPSAoXGQrKVw7IGkgPCAoXGQrKVw7IGkgXCtcKyBcKSBceyhbXHNcU10rPykoPz1cfSlcfS9nLHJjdD0vI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxzK2ZvclxzKlwoXHMqaW50XHMraVxzKj1ccyooXGQrKVxzKjtccyppXHMqPFxzKihcZCspXHMqO1xzKmlccypcK1wrXHMqXClccyp7KFtcc1xTXSs/KX1ccysjcHJhZ21hIHVucm9sbF9sb29wX2VuZC9nO2Z1bmN0aW9uIHNjdCh0KXtyZXR1cm4gdC5yZXBsYWNlKHJjdCxjY3QpLnJlcGxhY2UoYWN0LGxjdCl9ZnVuY3Rpb24gbGN0KHQsZSxuLG8pe3JldHVybiBjb25zb2xlLndhcm4oIldlYkdMUHJvZ3JhbTogI3ByYWdtYSB1bnJvbGxfbG9vcCBzaGFkZXIgc3ludGF4IGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydCBzeW50YXggaW5zdGVhZC4iKSxjY3QoMCxlLG4sbyl9ZnVuY3Rpb24gY2N0KHQsZSxuLG8pe2xldCBpPSIiO2ZvcihsZXQgdD1wYXJzZUludChlKTt0PHBhcnNlSW50KG4pO3QrKylpKz1vLnJlcGxhY2UoL1xbXHMqaVxzKlxdL2csIlsgIit0KyIgXSIpLnJlcGxhY2UoL1VOUk9MTEVEX0xPT1BfSU5ERVgvZyx0KTtyZXR1cm4gaX1mdW5jdGlvbiBkY3QodCl7bGV0IGU9InByZWNpc2lvbiAiK3QucHJlY2lzaW9uKyIgZmxvYXQ7XG5wcmVjaXNpb24gIit0LnByZWNpc2lvbisiIGludDsiO3JldHVybiJoaWdocCI9PT10LnByZWNpc2lvbj9lKz0iXG4jZGVmaW5lIEhJR0hfUFJFQ0lTSU9OIjoibWVkaXVtcCI9PT10LnByZWNpc2lvbj9lKz0iXG4jZGVmaW5lIE1FRElVTV9QUkVDSVNJT04iOiJsb3dwIj09PXQucHJlY2lzaW9uJiYoZSs9IlxuI2RlZmluZSBMT1dfUFJFQ0lTSU9OIiksZX1mdW5jdGlvbiBwY3QodCxlLG4sbyl7Y29uc3QgaT10LmdldENvbnRleHQoKSxhPW4uZGVmaW5lcztsZXQgcj1uLnZlcnRleFNoYWRlcixzPW4uZnJhZ21lbnRTaGFkZXI7Y29uc3QgbD0oZnVuY3Rpb24gYyh0KXtsZXQgZT0iU0hBRE9XTUFQX1RZUEVfQkFTSUMiO3JldHVybiAxPT09dC5zaGFkb3dNYXBUeXBlP2U9IlNIQURPV01BUF9UWVBFX1BDRiI6Mj09PXQuc2hhZG93TWFwVHlwZT9lPSJTSEFET1dNQVBfVFlQRV9QQ0ZfU09GVCI6Mz09PXQuc2hhZG93TWFwVHlwZSYmKGU9IlNIQURPV01BUF9UWVBFX1ZTTSIpLGV9KShuKSxkPShmdW5jdGlvbiBwKHQpe2xldCBlPSJFTlZNQVBfVFlQRV9DVUJFIjtpZih0LmVudk1hcClzd2l0Y2godC5lbnZNYXBNb2RlKXtjYXNlIDMwMTpjYXNlIDMwMjplPSJFTlZNQVBfVFlQRV9DVUJFIjticmVhaztjYXNlIDMwNjpjYXNlIDMwNzplPSJFTlZNQVBfVFlQRV9DVUJFX1VWIn1yZXR1cm4gZX0pKG4pLG09KGZ1bmN0aW9uIHUodCl7bGV0IGU9IkVOVk1BUF9NT0RFX1JFRkxFQ1RJT04iO2lmKHQuZW52TWFwKXN3aXRjaCh0LmVudk1hcE1vZGUpe2Nhc2UgMzAyOmNhc2UgMzA3OmU9IkVOVk1BUF9NT0RFX1JFRlJBQ1RJT04ifXJldHVybiBlfSkobiksZj0oZnVuY3Rpb24gZyh0KXtsZXQgZT0iRU5WTUFQX0JMRU5ESU5HX05PTkUiO2lmKHQuZW52TWFwKXN3aXRjaCh0LmNvbWJpbmUpe2Nhc2UgMDplPSJFTlZNQVBfQkxFTkRJTkdfTVVMVElQTFkiO2JyZWFrO2Nhc2UgMTplPSJFTlZNQVBfQkxFTkRJTkdfTUlYIjticmVhaztjYXNlIDI6ZT0iRU5WTUFQX0JMRU5ESU5HX0FERCJ9cmV0dXJuIGV9KShuKSxoPXQuZ2FtbWFGYWN0b3I+MD90LmdhbW1hRmFjdG9yOjEsYj1uLmlzV2ViR0wyPyIiOihmdW5jdGlvbiB5KHQpe3JldHVyblt0LmV4dGVuc2lvbkRlcml2YXRpdmVzfHx0LmVudk1hcEN1YmVVVnx8dC5idW1wTWFwfHx0LnRhbmdlbnRTcGFjZU5vcm1hbE1hcHx8dC5jbGVhcmNvYXROb3JtYWxNYXB8fHQuZmxhdFNoYWRpbmd8fCJwaHlzaWNhbCI9PT10LnNoYWRlcklEPyIjZXh0ZW5zaW9uIEdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyA6IGVuYWJsZSI6IiIsKHQuZXh0ZW5zaW9uRnJhZ0RlcHRofHx0LmxvZ2FyaXRobWljRGVwdGhCdWZmZXIpJiZ0LnJlbmRlcmVyRXh0ZW5zaW9uRnJhZ0RlcHRoPyIjZXh0ZW5zaW9uIEdMX0VYVF9mcmFnX2RlcHRoIDogZW5hYmxlIjoiIix0LmV4dGVuc2lvbkRyYXdCdWZmZXJzJiZ0LnJlbmRlcmVyRXh0ZW5zaW9uRHJhd0J1ZmZlcnM/IiNleHRlbnNpb24gR0xfRVhUX2RyYXdfYnVmZmVycyA6IHJlcXVpcmUiOiIiLCh0LmV4dGVuc2lvblNoYWRlclRleHR1cmVMT0R8fHQuZW52TWFwKSYmdC5yZW5kZXJlckV4dGVuc2lvblNoYWRlclRleHR1cmVMb2Q/IiNleHRlbnNpb24gR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCA6IGVuYWJsZSI6IiJdLmZpbHRlcigkbHQpLmpvaW4oIlxuIil9KShuKSxfPShmdW5jdGlvbiBDKHQpe2NvbnN0IGU9W107Zm9yKGNvbnN0IG4gaW4gdCl7Y29uc3Qgbz10W25dOyExIT09byYmZS5wdXNoKCIjZGVmaW5lICIrbisiICIrbyl9cmV0dXJuIGUuam9pbigiXG4iKX0pKGEpLE09aS5jcmVhdGVQcm9ncmFtKCk7bGV0IHYseCxPPW4uZ2xzbFZlcnNpb24/IiN2ZXJzaW9uICIrbi5nbHNsVmVyc2lvbisiXG4iOiIiO24uaXNSYXdTaGFkZXJNYXRlcmlhbD8odj1bX10uZmlsdGVyKCRsdCkuam9pbigiXG4iKSx2Lmxlbmd0aD4wJiYodis9IlxuIikseD1bYixfXS5maWx0ZXIoJGx0KS5qb2luKCJcbiIpLHgubGVuZ3RoPjAmJih4Kz0iXG4iKSk6KHY9W2RjdChuKSwiI2RlZmluZSBTSEFERVJfTkFNRSAiK24uc2hhZGVyTmFtZSxfLG4uaW5zdGFuY2luZz8iI2RlZmluZSBVU0VfSU5TVEFOQ0lORyI6IiIsbi5pbnN0YW5jaW5nQ29sb3I/IiNkZWZpbmUgVVNFX0lOU1RBTkNJTkdfQ09MT1IiOiIiLG4uc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcz8iI2RlZmluZSBWRVJURVhfVEVYVFVSRVMiOiIiLCIjZGVmaW5lIEdBTU1BX0ZBQ1RPUiAiK2gsIiNkZWZpbmUgTUFYX0JPTkVTICIrbi5tYXhCb25lcyxuLnVzZUZvZyYmbi5mb2c/IiNkZWZpbmUgVVNFX0ZPRyI6IiIsbi51c2VGb2cmJm4uZm9nRXhwMj8iI2RlZmluZSBGT0dfRVhQMiI6IiIsbi5tYXA/IiNkZWZpbmUgVVNFX01BUCI6IiIsbi5lbnZNYXA/IiNkZWZpbmUgVVNFX0VOVk1BUCI6IiIsbi5lbnZNYXA/IiNkZWZpbmUgIittOiIiLG4ubGlnaHRNYXA/IiNkZWZpbmUgVVNFX0xJR0hUTUFQIjoiIixuLmFvTWFwPyIjZGVmaW5lIFVTRV9BT01BUCI6IiIsbi5lbWlzc2l2ZU1hcD8iI2RlZmluZSBVU0VfRU1JU1NJVkVNQVAiOiIiLG4uYnVtcE1hcD8iI2RlZmluZSBVU0VfQlVNUE1BUCI6IiIsbi5ub3JtYWxNYXA/IiNkZWZpbmUgVVNFX05PUk1BTE1BUCI6IiIsbi5ub3JtYWxNYXAmJm4ub2JqZWN0U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgT0JKRUNUU1BBQ0VfTk9STUFMTUFQIjoiIixuLm5vcm1hbE1hcCYmbi50YW5nZW50U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgVEFOR0VOVFNQQUNFX05PUk1BTE1BUCI6IiIsbi5jbGVhcmNvYXRNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVE1BUCI6IiIsbi5jbGVhcmNvYXRSb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVF9ST1VHSE5FU1NNQVAiOiIiLG4uY2xlYXJjb2F0Tm9ybWFsTWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQIjoiIixuLmRpc3BsYWNlbWVudE1hcCYmbi5zdXBwb3J0c1ZlcnRleFRleHR1cmVzPyIjZGVmaW5lIFVTRV9ESVNQTEFDRU1FTlRNQVAiOiIiLG4uc3BlY3VsYXJNYXA/IiNkZWZpbmUgVVNFX1NQRUNVTEFSTUFQIjoiIixuLnJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfUk9VR0hORVNTTUFQIjoiIixuLm1ldGFsbmVzc01hcD8iI2RlZmluZSBVU0VfTUVUQUxORVNTTUFQIjoiIixuLmFscGhhTWFwPyIjZGVmaW5lIFVTRV9BTFBIQU1BUCI6IiIsbi50cmFuc21pc3Npb25NYXA/IiNkZWZpbmUgVVNFX1RSQU5TTUlTU0lPTk1BUCI6IiIsbi52ZXJ0ZXhUYW5nZW50cz8iI2RlZmluZSBVU0VfVEFOR0VOVCI6IiIsbi52ZXJ0ZXhDb2xvcnM/IiNkZWZpbmUgVVNFX0NPTE9SIjoiIixuLnZlcnRleFV2cz8iI2RlZmluZSBVU0VfVVYiOiIiLG4udXZzVmVydGV4T25seT8iI2RlZmluZSBVVlNfVkVSVEVYX09OTFkiOiIiLG4uZmxhdFNoYWRpbmc/IiNkZWZpbmUgRkxBVF9TSEFERUQiOiIiLG4uc2tpbm5pbmc/IiNkZWZpbmUgVVNFX1NLSU5OSU5HIjoiIixuLnVzZVZlcnRleFRleHR1cmU/IiNkZWZpbmUgQk9ORV9URVhUVVJFIjoiIixuLm1vcnBoVGFyZ2V0cz8iI2RlZmluZSBVU0VfTU9SUEhUQVJHRVRTIjoiIixuLm1vcnBoTm9ybWFscyYmITE9PT1uLmZsYXRTaGFkaW5nPyIjZGVmaW5lIFVTRV9NT1JQSE5PUk1BTFMiOiIiLG4uZG91YmxlU2lkZWQ/IiNkZWZpbmUgRE9VQkxFX1NJREVEIjoiIixuLmZsaXBTaWRlZD8iI2RlZmluZSBGTElQX1NJREVEIjoiIixuLnNoYWRvd01hcEVuYWJsZWQ/IiNkZWZpbmUgVVNFX1NIQURPV01BUCI6IiIsbi5zaGFkb3dNYXBFbmFibGVkPyIjZGVmaW5lICIrbDoiIixuLnNpemVBdHRlbnVhdGlvbj8iI2RlZmluZSBVU0VfU0laRUFUVEVOVUFUSU9OIjoiIixuLmxvZ2FyaXRobWljRGVwdGhCdWZmZXI/IiNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGIjoiIixuLmxvZ2FyaXRobWljRGVwdGhCdWZmZXImJm4ucmVuZGVyZXJFeHRlbnNpb25GcmFnRGVwdGg/IiNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGX0VYVCI6IiIsInVuaWZvcm0gbWF0NCBtb2RlbE1hdHJpeDsiLCJ1bmlmb3JtIG1hdDQgbW9kZWxWaWV3TWF0cml4OyIsInVuaWZvcm0gbWF0NCBwcm9qZWN0aW9uTWF0cml4OyIsInVuaWZvcm0gbWF0NCB2aWV3TWF0cml4OyIsInVuaWZvcm0gbWF0MyBub3JtYWxNYXRyaXg7IiwidW5pZm9ybSB2ZWMzIGNhbWVyYVBvc2l0aW9uOyIsInVuaWZvcm0gYm9vbCBpc09ydGhvZ3JhcGhpYzsiLCIjaWZkZWYgVVNFX0lOU1RBTkNJTkciLCJcdGF0dHJpYnV0ZSBtYXQ0IGluc3RhbmNlTWF0cml4OyIsIiNlbmRpZiIsIiNpZmRlZiBVU0VfSU5TVEFOQ0lOR19DT0xPUiIsIlx0YXR0cmlidXRlIHZlYzMgaW5zdGFuY2VDb2xvcjsiLCIjZW5kaWYiLCJhdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjsiLCJhdHRyaWJ1dGUgdmVjMyBub3JtYWw7IiwiYXR0cmlidXRlIHZlYzIgdXY7IiwiI2lmZGVmIFVTRV9UQU5HRU5UIiwiXHRhdHRyaWJ1dGUgdmVjNCB0YW5nZW50OyIsIiNlbmRpZiIsIiNpZmRlZiBVU0VfQ09MT1IiLCJcdGF0dHJpYnV0ZSB2ZWMzIGNvbG9yOyIsIiNlbmRpZiIsIiNpZmRlZiBVU0VfTU9SUEhUQVJHRVRTIiwiXHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDA7IiwiXHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDE7IiwiXHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDI7IiwiXHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDM7IiwiXHQjaWZkZWYgVVNFX01PUlBITk9STUFMUyIsIlx0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaE5vcm1hbDA7IiwiXHRcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoTm9ybWFsMTsiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwyOyIsIlx0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaE5vcm1hbDM7IiwiXHQjZWxzZSIsIlx0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDQ7IiwiXHRcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0NTsiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQ2OyIsIlx0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDc7IiwiXHQjZW5kaWYiLCIjZW5kaWYiLCIjaWZkZWYgVVNFX1NLSU5OSU5HIiwiXHRhdHRyaWJ1dGUgdmVjNCBza2luSW5kZXg7IiwiXHRhdHRyaWJ1dGUgdmVjNCBza2luV2VpZ2h0OyIsIiNlbmRpZiIsIlxuIl0uZmlsdGVyKCRsdCkuam9pbigiXG4iKSx4PVtiLGRjdChuKSwiI2RlZmluZSBTSEFERVJfTkFNRSAiK24uc2hhZGVyTmFtZSxfLG4uYWxwaGFUZXN0PyIjZGVmaW5lIEFMUEhBVEVTVCAiK24uYWxwaGFUZXN0KyhuLmFscGhhVGVzdCUxPyIiOiIuMCIpOiIiLCIjZGVmaW5lIEdBTU1BX0ZBQ1RPUiAiK2gsbi51c2VGb2cmJm4uZm9nPyIjZGVmaW5lIFVTRV9GT0ciOiIiLG4udXNlRm9nJiZuLmZvZ0V4cDI/IiNkZWZpbmUgRk9HX0VYUDIiOiIiLG4ubWFwPyIjZGVmaW5lIFVTRV9NQVAiOiIiLG4ubWF0Y2FwPyIjZGVmaW5lIFVTRV9NQVRDQVAiOiIiLG4uZW52TWFwPyIjZGVmaW5lIFVTRV9FTlZNQVAiOiIiLG4uZW52TWFwPyIjZGVmaW5lICIrZDoiIixuLmVudk1hcD8iI2RlZmluZSAiK206IiIsbi5lbnZNYXA/IiNkZWZpbmUgIitmOiIiLG4ubGlnaHRNYXA/IiNkZWZpbmUgVVNFX0xJR0hUTUFQIjoiIixuLmFvTWFwPyIjZGVmaW5lIFVTRV9BT01BUCI6IiIsbi5lbWlzc2l2ZU1hcD8iI2RlZmluZSBVU0VfRU1JU1NJVkVNQVAiOiIiLG4uYnVtcE1hcD8iI2RlZmluZSBVU0VfQlVNUE1BUCI6IiIsbi5ub3JtYWxNYXA/IiNkZWZpbmUgVVNFX05PUk1BTE1BUCI6IiIsbi5ub3JtYWxNYXAmJm4ub2JqZWN0U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgT0JKRUNUU1BBQ0VfTk9STUFMTUFQIjoiIixuLm5vcm1hbE1hcCYmbi50YW5nZW50U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgVEFOR0VOVFNQQUNFX05PUk1BTE1BUCI6IiIsbi5jbGVhcmNvYXRNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVE1BUCI6IiIsbi5jbGVhcmNvYXRSb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVF9ST1VHSE5FU1NNQVAiOiIiLG4uY2xlYXJjb2F0Tm9ybWFsTWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQIjoiIixuLnNwZWN1bGFyTWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUk1BUCI6IiIsbi5yb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX1JPVUdITkVTU01BUCI6IiIsbi5tZXRhbG5lc3NNYXA/IiNkZWZpbmUgVVNFX01FVEFMTkVTU01BUCI6IiIsbi5hbHBoYU1hcD8iI2RlZmluZSBVU0VfQUxQSEFNQVAiOiIiLG4uc2hlZW4/IiNkZWZpbmUgVVNFX1NIRUVOIjoiIixuLnRyYW5zbWlzc2lvbk1hcD8iI2RlZmluZSBVU0VfVFJBTlNNSVNTSU9OTUFQIjoiIixuLnZlcnRleFRhbmdlbnRzPyIjZGVmaW5lIFVTRV9UQU5HRU5UIjoiIixuLnZlcnRleENvbG9yc3x8bi5pbnN0YW5jaW5nQ29sb3I/IiNkZWZpbmUgVVNFX0NPTE9SIjoiIixuLnZlcnRleFV2cz8iI2RlZmluZSBVU0VfVVYiOiIiLG4udXZzVmVydGV4T25seT8iI2RlZmluZSBVVlNfVkVSVEVYX09OTFkiOiIiLG4uZ3JhZGllbnRNYXA/IiNkZWZpbmUgVVNFX0dSQURJRU5UTUFQIjoiIixuLmZsYXRTaGFkaW5nPyIjZGVmaW5lIEZMQVRfU0hBREVEIjoiIixuLmRvdWJsZVNpZGVkPyIjZGVmaW5lIERPVUJMRV9TSURFRCI6IiIsbi5mbGlwU2lkZWQ/IiNkZWZpbmUgRkxJUF9TSURFRCI6IiIsbi5zaGFkb3dNYXBFbmFibGVkPyIjZGVmaW5lIFVTRV9TSEFET1dNQVAiOiIiLG4uc2hhZG93TWFwRW5hYmxlZD8iI2RlZmluZSAiK2w6IiIsbi5wcmVtdWx0aXBsaWVkQWxwaGE/IiNkZWZpbmUgUFJFTVVMVElQTElFRF9BTFBIQSI6IiIsbi5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cz8iI2RlZmluZSBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTIjoiIixuLmxvZ2FyaXRobWljRGVwdGhCdWZmZXI/IiNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGIjoiIixuLmxvZ2FyaXRobWljRGVwdGhCdWZmZXImJm4ucmVuZGVyZXJFeHRlbnNpb25GcmFnRGVwdGg/IiNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGX0VYVCI6IiIsKG4uZXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxPRHx8bi5lbnZNYXApJiZuLnJlbmRlcmVyRXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxvZD8iI2RlZmluZSBURVhUVVJFX0xPRF9FWFQiOiIiLCJ1bmlmb3JtIG1hdDQgdmlld01hdHJpeDsiLCJ1bmlmb3JtIHZlYzMgY2FtZXJhUG9zaXRpb247IiwidW5pZm9ybSBib29sIGlzT3J0aG9ncmFwaGljOyIsMCE9PW4udG9uZU1hcHBpbmc/IiNkZWZpbmUgVE9ORV9NQVBQSU5HIjoiIiwwIT09bi50b25lTWFwcGluZz9Sc3QudG9uZW1hcHBpbmdfcGFyc19mcmFnbWVudDoiIiwwIT09bi50b25lTWFwcGluZz9RbHQoInRvbmVNYXBwaW5nIixuLnRvbmVNYXBwaW5nKToiIixuLmRpdGhlcmluZz8iI2RlZmluZSBESVRIRVJJTkciOiIiLFJzdC5lbmNvZGluZ3NfcGFyc19mcmFnbWVudCxuLm1hcD9LbHQoIm1hcFRleGVsVG9MaW5lYXIiLG4ubWFwRW5jb2RpbmcpOiIiLG4ubWF0Y2FwP0tsdCgibWF0Y2FwVGV4ZWxUb0xpbmVhciIsbi5tYXRjYXBFbmNvZGluZyk6IiIsbi5lbnZNYXA/S2x0KCJlbnZNYXBUZXhlbFRvTGluZWFyIixuLmVudk1hcEVuY29kaW5nKToiIixuLmVtaXNzaXZlTWFwP0tsdCgiZW1pc3NpdmVNYXBUZXhlbFRvTGluZWFyIixuLmVtaXNzaXZlTWFwRW5jb2RpbmcpOiIiLG4ubGlnaHRNYXA/S2x0KCJsaWdodE1hcFRleGVsVG9MaW5lYXIiLG4ubGlnaHRNYXBFbmNvZGluZyk6IiIsSmx0KCJsaW5lYXJUb091dHB1dFRleGVsIixuLm91dHB1dEVuY29kaW5nKSxuLmRlcHRoUGFja2luZz8iI2RlZmluZSBERVBUSF9QQUNLSU5HICIrbi5kZXB0aFBhY2tpbmc6IiIsIlxuIl0uZmlsdGVyKCRsdCkuam9pbigiXG4iKSkscj1vY3Qocikscj10Y3QocixuKSxyPWVjdChyLG4pLHM9b2N0KHMpLHM9dGN0KHMsbikscz1lY3QocyxuKSxyPXNjdChyKSxzPXNjdChzKSxuLmlzV2ViR0wyJiYhMCE9PW4uaXNSYXdTaGFkZXJNYXRlcmlhbCYmKE89IiN2ZXJzaW9uIDMwMCBlc1xuIix2PVsiI2RlZmluZSBhdHRyaWJ1dGUgaW4iLCIjZGVmaW5lIHZhcnlpbmcgb3V0IiwiI2RlZmluZSB0ZXh0dXJlMkQgdGV4dHVyZSJdLmpvaW4oIlxuIikrIlxuIit2LHg9WyIjZGVmaW5lIHZhcnlpbmcgaW4iLG4uZ2xzbFZlcnNpb249PT1GaXQ/IiI6Im91dCBoaWdocCB2ZWM0IHBjX2ZyYWdDb2xvcjsiLG4uZ2xzbFZlcnNpb249PT1GaXQ/IiI6IiNkZWZpbmUgZ2xfRnJhZ0NvbG9yIHBjX2ZyYWdDb2xvciIsIiNkZWZpbmUgZ2xfRnJhZ0RlcHRoRVhUIGdsX0ZyYWdEZXB0aCIsIiNkZWZpbmUgdGV4dHVyZTJEIHRleHR1cmUiLCIjZGVmaW5lIHRleHR1cmVDdWJlIHRleHR1cmUiLCIjZGVmaW5lIHRleHR1cmUyRFByb2ogdGV4dHVyZVByb2oiLCIjZGVmaW5lIHRleHR1cmUyRExvZEVYVCB0ZXh0dXJlTG9kIiwiI2RlZmluZSB0ZXh0dXJlMkRQcm9qTG9kRVhUIHRleHR1cmVQcm9qTG9kIiwiI2RlZmluZSB0ZXh0dXJlQ3ViZUxvZEVYVCB0ZXh0dXJlTG9kIiwiI2RlZmluZSB0ZXh0dXJlMkRHcmFkRVhUIHRleHR1cmVHcmFkIiwiI2RlZmluZSB0ZXh0dXJlMkRQcm9qR3JhZEVYVCB0ZXh0dXJlUHJvakdyYWQiLCIjZGVmaW5lIHRleHR1cmVDdWJlR3JhZEVYVCB0ZXh0dXJlR3JhZCJdLmpvaW4oIlxuIikrIlxuIit4KTtjb25zdCBQPU8reCtzLHc9WWx0KGksMzU2MzMsTyt2K3IpLGs9WWx0KGksMzU2MzIsUCk7aWYoaS5hdHRhY2hTaGFkZXIoTSx3KSxpLmF0dGFjaFNoYWRlcihNLGspLHZvaWQgMCE9PW4uaW5kZXgwQXR0cmlidXRlTmFtZT9pLmJpbmRBdHRyaWJMb2NhdGlvbihNLDAsbi5pbmRleDBBdHRyaWJ1dGVOYW1lKTohMD09PW4ubW9ycGhUYXJnZXRzJiZpLmJpbmRBdHRyaWJMb2NhdGlvbihNLDAsInBvc2l0aW9uIiksaS5saW5rUHJvZ3JhbShNKSx0LmRlYnVnLmNoZWNrU2hhZGVyRXJyb3JzKXtjb25zdCB0PWkuZ2V0UHJvZ3JhbUluZm9Mb2coTSkudHJpbSgpLGU9aS5nZXRTaGFkZXJJbmZvTG9nKHcpLnRyaW0oKSxuPWkuZ2V0U2hhZGVySW5mb0xvZyhrKS50cmltKCk7bGV0IG89ITAsYT0hMDtpZighMT09PWkuZ2V0UHJvZ3JhbVBhcmFtZXRlcihNLDM1NzE0KSl7bz0hMTtjb25zdCBlPVhsdChpLHcsInZlcnRleCIpLG49WGx0KGksaywiZnJhZ21lbnQiKTtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFByb2dyYW06IHNoYWRlciBlcnJvcjogIixpLmdldEVycm9yKCksIjM1NzE1IixpLmdldFByb2dyYW1QYXJhbWV0ZXIoTSwzNTcxNSksImdsLmdldFByb2dyYW1JbmZvTG9nIix0LGUsbil9ZWxzZSIiIT09dD9jb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUHJvZ3JhbTogZ2wuZ2V0UHJvZ3JhbUluZm9Mb2coKSIsdCk6IiIhPT1lJiYiIiE9PW58fChhPSExKTthJiYodGhpcy5kaWFnbm9zdGljcz17cnVubmFibGU6byxwcm9ncmFtTG9nOnQsdmVydGV4U2hhZGVyOntsb2c6ZSxwcmVmaXg6dn0sZnJhZ21lbnRTaGFkZXI6e2xvZzpuLHByZWZpeDp4fX0pfWxldCBTLEQ7cmV0dXJuIGkuZGVsZXRlU2hhZGVyKHcpLGkuZGVsZXRlU2hhZGVyKGspLHRoaXMuZ2V0VW5pZm9ybXM9ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09UyYmKFM9bmV3IEdsdChpLE0pKSxTfSx0aGlzLmdldEF0dHJpYnV0ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09RCYmKEQ9KGZ1bmN0aW9uIHQoZSxuKXtjb25zdCBvPXt9LGk9ZS5nZXRQcm9ncmFtUGFyYW1ldGVyKG4sMzU3MjEpO2ZvcihsZXQgdD0wO3Q8aTt0Kyspe2NvbnN0IGk9ZS5nZXRBY3RpdmVBdHRyaWIobix0KS5uYW1lO29baV09ZS5nZXRBdHRyaWJMb2NhdGlvbihuLGkpfXJldHVybiBvfSkoaSxNKSksRH0sdGhpcy5kZXN0cm95PWZ1bmN0aW9uKCl7by5yZWxlYXNlU3RhdGVzT2ZQcm9ncmFtKHRoaXMpLGkuZGVsZXRlUHJvZ3JhbShNKSx0aGlzLnByb2dyYW09dm9pZCAwfSx0aGlzLm5hbWU9bi5zaGFkZXJOYW1lLHRoaXMuaWQ9cWx0KyssdGhpcy5jYWNoZUtleT1lLHRoaXMudXNlZFRpbWVzPTEsdGhpcy5wcm9ncmFtPU0sdGhpcy52ZXJ0ZXhTaGFkZXI9dyx0aGlzLmZyYWdtZW50U2hhZGVyPWssdGhpc31mdW5jdGlvbiBtY3QodCxlLG4sbyxpLGEpe2NvbnN0IHI9W10scz1vLmlzV2ViR0wyLGw9by5sb2dhcml0aG1pY0RlcHRoQnVmZmVyLGM9by5mbG9hdFZlcnRleFRleHR1cmVzLGQ9by5tYXhWZXJ0ZXhVbmlmb3JtcyxwPW8udmVydGV4VGV4dHVyZXM7bGV0IG09by5wcmVjaXNpb247Y29uc3QgdT17TWVzaERlcHRoTWF0ZXJpYWw6ImRlcHRoIixNZXNoRGlzdGFuY2VNYXRlcmlhbDoiZGlzdGFuY2VSR0JBIixNZXNoTm9ybWFsTWF0ZXJpYWw6Im5vcm1hbCIsTWVzaEJhc2ljTWF0ZXJpYWw6ImJhc2ljIixNZXNoTGFtYmVydE1hdGVyaWFsOiJsYW1iZXJ0IixNZXNoUGhvbmdNYXRlcmlhbDoicGhvbmciLE1lc2hUb29uTWF0ZXJpYWw6InRvb24iLE1lc2hTdGFuZGFyZE1hdGVyaWFsOiJwaHlzaWNhbCIsTWVzaFBoeXNpY2FsTWF0ZXJpYWw6InBoeXNpY2FsIixNZXNoTWF0Y2FwTWF0ZXJpYWw6Im1hdGNhcCIsTGluZUJhc2ljTWF0ZXJpYWw6ImJhc2ljIixMaW5lRGFzaGVkTWF0ZXJpYWw6ImRhc2hlZCIsUG9pbnRzTWF0ZXJpYWw6InBvaW50cyIsU2hhZG93TWF0ZXJpYWw6InNoYWRvdyIsU3ByaXRlTWF0ZXJpYWw6InNwcml0ZSJ9LGY9WyJwcmVjaXNpb24iLCJpc1dlYkdMMiIsInN1cHBvcnRzVmVydGV4VGV4dHVyZXMiLCJvdXRwdXRFbmNvZGluZyIsImluc3RhbmNpbmciLCJpbnN0YW5jaW5nQ29sb3IiLCJtYXAiLCJtYXBFbmNvZGluZyIsIm1hdGNhcCIsIm1hdGNhcEVuY29kaW5nIiwiZW52TWFwIiwiZW52TWFwTW9kZSIsImVudk1hcEVuY29kaW5nIiwiZW52TWFwQ3ViZVVWIiwibGlnaHRNYXAiLCJsaWdodE1hcEVuY29kaW5nIiwiYW9NYXAiLCJlbWlzc2l2ZU1hcCIsImVtaXNzaXZlTWFwRW5jb2RpbmciLCJidW1wTWFwIiwibm9ybWFsTWFwIiwib2JqZWN0U3BhY2VOb3JtYWxNYXAiLCJ0YW5nZW50U3BhY2VOb3JtYWxNYXAiLCJjbGVhcmNvYXRNYXAiLCJjbGVhcmNvYXRSb3VnaG5lc3NNYXAiLCJjbGVhcmNvYXROb3JtYWxNYXAiLCJkaXNwbGFjZW1lbnRNYXAiLCJzcGVjdWxhck1hcCIsInJvdWdobmVzc01hcCIsIm1ldGFsbmVzc01hcCIsImdyYWRpZW50TWFwIiwiYWxwaGFNYXAiLCJjb21iaW5lIiwidmVydGV4Q29sb3JzIiwidmVydGV4VGFuZ2VudHMiLCJ2ZXJ0ZXhVdnMiLCJ1dnNWZXJ0ZXhPbmx5IiwiZm9nIiwidXNlRm9nIiwiZm9nRXhwMiIsImZsYXRTaGFkaW5nIiwic2l6ZUF0dGVudWF0aW9uIiwibG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciIsInNraW5uaW5nIiwibWF4Qm9uZXMiLCJ1c2VWZXJ0ZXhUZXh0dXJlIiwibW9ycGhUYXJnZXRzIiwibW9ycGhOb3JtYWxzIiwibWF4TW9ycGhUYXJnZXRzIiwibWF4TW9ycGhOb3JtYWxzIiwicHJlbXVsdGlwbGllZEFscGhhIiwibnVtRGlyTGlnaHRzIiwibnVtUG9pbnRMaWdodHMiLCJudW1TcG90TGlnaHRzIiwibnVtSGVtaUxpZ2h0cyIsIm51bVJlY3RBcmVhTGlnaHRzIiwibnVtRGlyTGlnaHRTaGFkb3dzIiwibnVtUG9pbnRMaWdodFNoYWRvd3MiLCJudW1TcG90TGlnaHRTaGFkb3dzIiwic2hhZG93TWFwRW5hYmxlZCIsInNoYWRvd01hcFR5cGUiLCJ0b25lTWFwcGluZyIsInBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzIiwiYWxwaGFUZXN0IiwiZG91YmxlU2lkZWQiLCJmbGlwU2lkZWQiLCJudW1DbGlwcGluZ1BsYW5lcyIsIm51bUNsaXBJbnRlcnNlY3Rpb24iLCJkZXB0aFBhY2tpbmciLCJkaXRoZXJpbmciLCJzaGVlbiIsInRyYW5zbWlzc2lvbk1hcCJdO2Z1bmN0aW9uIGcodCl7bGV0IGU7cmV0dXJuIHQmJnQuaXNUZXh0dXJlP2U9dC5lbmNvZGluZzp0JiZ0LmlzV2ViR0xSZW5kZXJUYXJnZXQ/KGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xQcm9ncmFtcy5nZXRUZXh0dXJlRW5jb2RpbmdGcm9tTWFwOiBkb24ndCB1c2UgcmVuZGVyIHRhcmdldHMgYXMgdGV4dHVyZXMuIFVzZSB0aGVpciAudGV4dHVyZSBwcm9wZXJ0eSBpbnN0ZWFkLiIpLGU9dC50ZXh0dXJlLmVuY29kaW5nKTplPU5pdCxlfXJldHVybntnZXRQYXJhbWV0ZXJzOmZ1bmN0aW9uIGgoaSxyLGYsYix5KXtjb25zdCBfPWIuZm9nLEM9ZS5nZXQoaS5lbnZNYXB8fChpLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/Yi5lbnZpcm9ubWVudDpudWxsKSksTT11W2kudHlwZV0sdj15LmlzU2tpbm5lZE1lc2g/KGZ1bmN0aW9uIHgodCl7Y29uc3QgZT10LnNrZWxldG9uLmJvbmVzO2lmKGMpcmV0dXJuIDEwMjQ7e2NvbnN0IHQ9TWF0aC5mbG9vcigoZC0yMCkvNCksbj1NYXRoLm1pbih0LGUubGVuZ3RoKTtyZXR1cm4gbjxlLmxlbmd0aD8oY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBTa2VsZXRvbiBoYXMgIitlLmxlbmd0aCsiIGJvbmVzLiBUaGlzIEdQVSBzdXBwb3J0cyAiK24rIi4iKSwwKTpufX0pKHkpOjA7bGV0IE8sUDtpZihudWxsIT09aS5wcmVjaXNpb24mJihtPW8uZ2V0TWF4UHJlY2lzaW9uKGkucHJlY2lzaW9uKSxtIT09aS5wcmVjaXNpb24mJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xQcm9ncmFtLmdldFBhcmFtZXRlcnM6IixpLnByZWNpc2lvbiwibm90IHN1cHBvcnRlZCwgdXNpbmciLG0sImluc3RlYWQuIikpLE0pe2NvbnN0IHQ9TnN0W01dO089dC52ZXJ0ZXhTaGFkZXIsUD10LmZyYWdtZW50U2hhZGVyfWVsc2UgTz1pLnZlcnRleFNoYWRlcixQPWkuZnJhZ21lbnRTaGFkZXI7Y29uc3Qgdz10LmdldFJlbmRlclRhcmdldCgpO3JldHVybntpc1dlYkdMMjpzLHNoYWRlcklEOk0sc2hhZGVyTmFtZTppLnR5cGUsdmVydGV4U2hhZGVyOk8sZnJhZ21lbnRTaGFkZXI6UCxkZWZpbmVzOmkuZGVmaW5lcyxpc1Jhd1NoYWRlck1hdGVyaWFsOiEwPT09aS5pc1Jhd1NoYWRlck1hdGVyaWFsLGdsc2xWZXJzaW9uOmkuZ2xzbFZlcnNpb24scHJlY2lzaW9uOm0saW5zdGFuY2luZzohMD09PXkuaXNJbnN0YW5jZWRNZXNoLGluc3RhbmNpbmdDb2xvcjohMD09PXkuaXNJbnN0YW5jZWRNZXNoJiZudWxsIT09eS5pbnN0YW5jZUNvbG9yLHN1cHBvcnRzVmVydGV4VGV4dHVyZXM6cCxvdXRwdXRFbmNvZGluZzpudWxsIT09dz9nKHcudGV4dHVyZSk6dC5vdXRwdXRFbmNvZGluZyxtYXA6ISFpLm1hcCxtYXBFbmNvZGluZzpnKGkubWFwKSxtYXRjYXA6ISFpLm1hdGNhcCxtYXRjYXBFbmNvZGluZzpnKGkubWF0Y2FwKSxlbnZNYXA6ISFDLGVudk1hcE1vZGU6QyYmQy5tYXBwaW5nLGVudk1hcEVuY29kaW5nOmcoQyksZW52TWFwQ3ViZVVWOiEhQyYmKDMwNj09PUMubWFwcGluZ3x8MzA3PT09Qy5tYXBwaW5nKSxsaWdodE1hcDohIWkubGlnaHRNYXAsbGlnaHRNYXBFbmNvZGluZzpnKGkubGlnaHRNYXApLGFvTWFwOiEhaS5hb01hcCxlbWlzc2l2ZU1hcDohIWkuZW1pc3NpdmVNYXAsZW1pc3NpdmVNYXBFbmNvZGluZzpnKGkuZW1pc3NpdmVNYXApLGJ1bXBNYXA6ISFpLmJ1bXBNYXAsbm9ybWFsTWFwOiEhaS5ub3JtYWxNYXAsb2JqZWN0U3BhY2VOb3JtYWxNYXA6MT09PWkubm9ybWFsTWFwVHlwZSx0YW5nZW50U3BhY2VOb3JtYWxNYXA6MD09PWkubm9ybWFsTWFwVHlwZSxjbGVhcmNvYXRNYXA6ISFpLmNsZWFyY29hdE1hcCxjbGVhcmNvYXRSb3VnaG5lc3NNYXA6ISFpLmNsZWFyY29hdFJvdWdobmVzc01hcCxjbGVhcmNvYXROb3JtYWxNYXA6ISFpLmNsZWFyY29hdE5vcm1hbE1hcCxkaXNwbGFjZW1lbnRNYXA6ISFpLmRpc3BsYWNlbWVudE1hcCxyb3VnaG5lc3NNYXA6ISFpLnJvdWdobmVzc01hcCxtZXRhbG5lc3NNYXA6ISFpLm1ldGFsbmVzc01hcCxzcGVjdWxhck1hcDohIWkuc3BlY3VsYXJNYXAsYWxwaGFNYXA6ISFpLmFscGhhTWFwLGdyYWRpZW50TWFwOiEhaS5ncmFkaWVudE1hcCxzaGVlbjohIWkuc2hlZW4sdHJhbnNtaXNzaW9uTWFwOiEhaS50cmFuc21pc3Npb25NYXAsY29tYmluZTppLmNvbWJpbmUsdmVydGV4VGFuZ2VudHM6aS5ub3JtYWxNYXAmJmkudmVydGV4VGFuZ2VudHMsdmVydGV4Q29sb3JzOmkudmVydGV4Q29sb3JzLHZlcnRleFV2czohIShpLm1hcHx8aS5idW1wTWFwfHxpLm5vcm1hbE1hcHx8aS5zcGVjdWxhck1hcHx8aS5hbHBoYU1hcHx8aS5lbWlzc2l2ZU1hcHx8aS5yb3VnaG5lc3NNYXB8fGkubWV0YWxuZXNzTWFwfHxpLmNsZWFyY29hdE1hcHx8aS5jbGVhcmNvYXRSb3VnaG5lc3NNYXB8fGkuY2xlYXJjb2F0Tm9ybWFsTWFwfHxpLmRpc3BsYWNlbWVudE1hcHx8aS50cmFuc21pc3Npb25NYXApLHV2c1ZlcnRleE9ubHk6IShpLm1hcHx8aS5idW1wTWFwfHxpLm5vcm1hbE1hcHx8aS5zcGVjdWxhck1hcHx8aS5hbHBoYU1hcHx8aS5lbWlzc2l2ZU1hcHx8aS5yb3VnaG5lc3NNYXB8fGkubWV0YWxuZXNzTWFwfHxpLmNsZWFyY29hdE5vcm1hbE1hcHx8aS50cmFuc21pc3Npb25NYXB8fCFpLmRpc3BsYWNlbWVudE1hcCksZm9nOiEhXyx1c2VGb2c6aS5mb2csZm9nRXhwMjpfJiZfLmlzRm9nRXhwMixmbGF0U2hhZGluZzppLmZsYXRTaGFkaW5nLHNpemVBdHRlbnVhdGlvbjppLnNpemVBdHRlbnVhdGlvbixsb2dhcml0aG1pY0RlcHRoQnVmZmVyOmwsc2tpbm5pbmc6aS5za2lubmluZyYmdj4wLG1heEJvbmVzOnYsdXNlVmVydGV4VGV4dHVyZTpjLG1vcnBoVGFyZ2V0czppLm1vcnBoVGFyZ2V0cyxtb3JwaE5vcm1hbHM6aS5tb3JwaE5vcm1hbHMsbWF4TW9ycGhUYXJnZXRzOnQubWF4TW9ycGhUYXJnZXRzLG1heE1vcnBoTm9ybWFsczp0Lm1heE1vcnBoTm9ybWFscyxudW1EaXJMaWdodHM6ci5kaXJlY3Rpb25hbC5sZW5ndGgsbnVtUG9pbnRMaWdodHM6ci5wb2ludC5sZW5ndGgsbnVtU3BvdExpZ2h0czpyLnNwb3QubGVuZ3RoLG51bVJlY3RBcmVhTGlnaHRzOnIucmVjdEFyZWEubGVuZ3RoLG51bUhlbWlMaWdodHM6ci5oZW1pLmxlbmd0aCxudW1EaXJMaWdodFNoYWRvd3M6ci5kaXJlY3Rpb25hbFNoYWRvd01hcC5sZW5ndGgsbnVtUG9pbnRMaWdodFNoYWRvd3M6ci5wb2ludFNoYWRvd01hcC5sZW5ndGgsbnVtU3BvdExpZ2h0U2hhZG93czpyLnNwb3RTaGFkb3dNYXAubGVuZ3RoLG51bUNsaXBwaW5nUGxhbmVzOmEubnVtUGxhbmVzLG51bUNsaXBJbnRlcnNlY3Rpb246YS5udW1JbnRlcnNlY3Rpb24sZGl0aGVyaW5nOmkuZGl0aGVyaW5nLHNoYWRvd01hcEVuYWJsZWQ6dC5zaGFkb3dNYXAuZW5hYmxlZCYmZi5sZW5ndGg+MCxzaGFkb3dNYXBUeXBlOnQuc2hhZG93TWFwLnR5cGUsdG9uZU1hcHBpbmc6aS50b25lTWFwcGVkP3QudG9uZU1hcHBpbmc6MCxwaHlzaWNhbGx5Q29ycmVjdExpZ2h0czp0LnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzLHByZW11bHRpcGxpZWRBbHBoYTppLnByZW11bHRpcGxpZWRBbHBoYSxhbHBoYVRlc3Q6aS5hbHBoYVRlc3QsZG91YmxlU2lkZWQ6Mj09PWkuc2lkZSxmbGlwU2lkZWQ6MT09PWkuc2lkZSxkZXB0aFBhY2tpbmc6dm9pZCAwIT09aS5kZXB0aFBhY2tpbmcmJmkuZGVwdGhQYWNraW5nLGluZGV4MEF0dHJpYnV0ZU5hbWU6aS5pbmRleDBBdHRyaWJ1dGVOYW1lLGV4dGVuc2lvbkRlcml2YXRpdmVzOmkuZXh0ZW5zaW9ucyYmaS5leHRlbnNpb25zLmRlcml2YXRpdmVzLGV4dGVuc2lvbkZyYWdEZXB0aDppLmV4dGVuc2lvbnMmJmkuZXh0ZW5zaW9ucy5mcmFnRGVwdGgsZXh0ZW5zaW9uRHJhd0J1ZmZlcnM6aS5leHRlbnNpb25zJiZpLmV4dGVuc2lvbnMuZHJhd0J1ZmZlcnMsZXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxPRDppLmV4dGVuc2lvbnMmJmkuZXh0ZW5zaW9ucy5zaGFkZXJUZXh0dXJlTE9ELHJlbmRlcmVyRXh0ZW5zaW9uRnJhZ0RlcHRoOnN8fG4uaGFzKCJFWFRfZnJhZ19kZXB0aCIpLHJlbmRlcmVyRXh0ZW5zaW9uRHJhd0J1ZmZlcnM6c3x8bi5oYXMoIldFQkdMX2RyYXdfYnVmZmVycyIpLHJlbmRlcmVyRXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxvZDpzfHxuLmhhcygiRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpLGN1c3RvbVByb2dyYW1DYWNoZUtleTppLmN1c3RvbVByb2dyYW1DYWNoZUtleSgpfX0sZ2V0UHJvZ3JhbUNhY2hlS2V5OmZ1bmN0aW9uIGIoZSl7Y29uc3Qgbj1bXTtpZihlLnNoYWRlcklEP24ucHVzaChlLnNoYWRlcklEKToobi5wdXNoKGUuZnJhZ21lbnRTaGFkZXIpLG4ucHVzaChlLnZlcnRleFNoYWRlcikpLHZvaWQgMCE9PWUuZGVmaW5lcylmb3IoY29uc3QgdCBpbiBlLmRlZmluZXMpbi5wdXNoKHQpLG4ucHVzaChlLmRlZmluZXNbdF0pO2lmKCExPT09ZS5pc1Jhd1NoYWRlck1hdGVyaWFsKXtmb3IobGV0IHQ9MDt0PGYubGVuZ3RoO3QrKyluLnB1c2goZVtmW3RdXSk7bi5wdXNoKHQub3V0cHV0RW5jb2RpbmcpLG4ucHVzaCh0LmdhbW1hRmFjdG9yKX1yZXR1cm4gbi5wdXNoKGUuY3VzdG9tUHJvZ3JhbUNhY2hlS2V5KSxuLmpvaW4oKX0sZ2V0VW5pZm9ybXM6ZnVuY3Rpb24geSh0KXtjb25zdCBlPXVbdC50eXBlXTtsZXQgbjtyZXR1cm4gbj1lP2JzdC5jbG9uZShOc3RbZV0udW5pZm9ybXMpOnQudW5pZm9ybXMsbn0sYWNxdWlyZVByb2dyYW06ZnVuY3Rpb24gXyhlLG4pe2xldCBvO2ZvcihsZXQgdD0wLGU9ci5sZW5ndGg7dDxlO3QrKyl7Y29uc3QgZT1yW3RdO2lmKGUuY2FjaGVLZXk9PT1uKXtvPWUsKytvLnVzZWRUaW1lczticmVha319cmV0dXJuIHZvaWQgMD09PW8mJihvPW5ldyBwY3QodCxuLGUsaSksci5wdXNoKG8pKSxvfSxyZWxlYXNlUHJvZ3JhbTpmdW5jdGlvbiBDKHQpe2lmKDA9PS0tdC51c2VkVGltZXMpe2NvbnN0IGU9ci5pbmRleE9mKHQpO3JbZV09cltyLmxlbmd0aC0xXSxyLnBvcCgpLHQuZGVzdHJveSgpfX0scHJvZ3JhbXM6cn19ZnVuY3Rpb24gdWN0KCl7bGV0IHQ9bmV3IFdlYWtNYXA7cmV0dXJue2dldDpmdW5jdGlvbiBlKG4pe2xldCBvPXQuZ2V0KG4pO3JldHVybiB2b2lkIDA9PT1vJiYobz17fSx0LnNldChuLG8pKSxvfSxyZW1vdmU6ZnVuY3Rpb24gbihlKXt0LmRlbGV0ZShlKX0sdXBkYXRlOmZ1bmN0aW9uIG8oZSxuLGkpe3QuZ2V0KGUpW25dPWl9LGRpc3Bvc2U6ZnVuY3Rpb24gaSgpe3Q9bmV3IFdlYWtNYXB9fX1mdW5jdGlvbiBmY3QodCxlKXtyZXR1cm4gdC5ncm91cE9yZGVyIT09ZS5ncm91cE9yZGVyP3QuZ3JvdXBPcmRlci1lLmdyb3VwT3JkZXI6dC5yZW5kZXJPcmRlciE9PWUucmVuZGVyT3JkZXI/dC5yZW5kZXJPcmRlci1lLnJlbmRlck9yZGVyOnQucHJvZ3JhbSE9PWUucHJvZ3JhbT90LnByb2dyYW0uaWQtZS5wcm9ncmFtLmlkOnQubWF0ZXJpYWwuaWQhPT1lLm1hdGVyaWFsLmlkP3QubWF0ZXJpYWwuaWQtZS5tYXRlcmlhbC5pZDp0LnohPT1lLno/dC56LWUuejp0LmlkLWUuaWR9ZnVuY3Rpb24gZ2N0KHQsZSl7cmV0dXJuIHQuZ3JvdXBPcmRlciE9PWUuZ3JvdXBPcmRlcj90Lmdyb3VwT3JkZXItZS5ncm91cE9yZGVyOnQucmVuZGVyT3JkZXIhPT1lLnJlbmRlck9yZGVyP3QucmVuZGVyT3JkZXItZS5yZW5kZXJPcmRlcjp0LnohPT1lLno/ZS56LXQuejp0LmlkLWUuaWR9ZnVuY3Rpb24gaGN0KHQpe2NvbnN0IGU9W107bGV0IG49MDtjb25zdCBvPVtdLGk9W10sYT17aWQ6LTF9O2Z1bmN0aW9uIHIobyxpLHIscyxsLGMpe2xldCBkPWVbbl07Y29uc3QgcD10LmdldChyKTtyZXR1cm4gdm9pZCAwPT09ZD8oZD17aWQ6by5pZCxvYmplY3Q6byxnZW9tZXRyeTppLG1hdGVyaWFsOnIscHJvZ3JhbTpwLnByb2dyYW18fGEsZ3JvdXBPcmRlcjpzLHJlbmRlck9yZGVyOm8ucmVuZGVyT3JkZXIsejpsLGdyb3VwOmN9LGVbbl09ZCk6KGQuaWQ9by5pZCxkLm9iamVjdD1vLGQuZ2VvbWV0cnk9aSxkLm1hdGVyaWFsPXIsZC5wcm9ncmFtPXAucHJvZ3JhbXx8YSxkLmdyb3VwT3JkZXI9cyxkLnJlbmRlck9yZGVyPW8ucmVuZGVyT3JkZXIsZC56PWwsZC5ncm91cD1jKSxuKyssZH1yZXR1cm57b3BhcXVlOm8sdHJhbnNwYXJlbnQ6aSxpbml0OmZ1bmN0aW9uIHMoKXtuPTAsby5sZW5ndGg9MCxpLmxlbmd0aD0wfSxwdXNoOmZ1bmN0aW9uIGwodCxlLG4sYSxzLGMpe2NvbnN0IGQ9cih0LGUsbixhLHMsYyk7KCEwPT09bi50cmFuc3BhcmVudD9pOm8pLnB1c2goZCl9LHVuc2hpZnQ6ZnVuY3Rpb24gYyh0LGUsbixhLHMsbCl7Y29uc3QgYz1yKHQsZSxuLGEscyxsKTsoITA9PT1uLnRyYW5zcGFyZW50P2k6bykudW5zaGlmdChjKX0sZmluaXNoOmZ1bmN0aW9uIGQoKXtmb3IobGV0IHQ9bixvPWUubGVuZ3RoO3Q8bzt0Kyspe2NvbnN0IG49ZVt0XTtpZihudWxsPT09bi5pZClicmVhaztuLmlkPW51bGwsbi5vYmplY3Q9bnVsbCxuLmdlb21ldHJ5PW51bGwsbi5tYXRlcmlhbD1udWxsLG4ucHJvZ3JhbT1udWxsLG4uZ3JvdXA9bnVsbH19LHNvcnQ6ZnVuY3Rpb24gcCh0LGUpe28ubGVuZ3RoPjEmJm8uc29ydCh0fHxmY3QpLGkubGVuZ3RoPjEmJmkuc29ydChlfHxnY3QpfX19ZnVuY3Rpb24gYmN0KHQpe2xldCBlPW5ldyBXZWFrTWFwO3JldHVybntnZXQ6ZnVuY3Rpb24gbihvLGkpe2NvbnN0IGE9ZS5nZXQobyk7bGV0IHI7cmV0dXJuIHZvaWQgMD09PWE/KHI9bmV3IGhjdCh0KSxlLnNldChvLG5ldyBXZWFrTWFwKSxlLmdldChvKS5zZXQoaSxyKSk6KHI9YS5nZXQoaSksdm9pZCAwPT09ciYmKHI9bmV3IGhjdCh0KSxhLnNldChpLHIpKSkscn0sZGlzcG9zZTpmdW5jdGlvbiBvKCl7ZT1uZXcgV2Vha01hcH19fWZ1bmN0aW9uIHljdCgpe2NvbnN0IHQ9e307cmV0dXJue2dldDpmdW5jdGlvbihlKXtpZih2b2lkIDAhPT10W2UuaWRdKXJldHVybiB0W2UuaWRdO2xldCBuO3N3aXRjaChlLnR5cGUpe2Nhc2UiRGlyZWN0aW9uYWxMaWdodCI6bj17ZGlyZWN0aW9uOm5ldyAkaXQsY29sb3I6bmV3IENydH07YnJlYWs7Y2FzZSJTcG90TGlnaHQiOm49e3Bvc2l0aW9uOm5ldyAkaXQsZGlyZWN0aW9uOm5ldyAkaXQsY29sb3I6bmV3IENydCxkaXN0YW5jZTowLGNvbmVDb3M6MCxwZW51bWJyYUNvczowLGRlY2F5OjB9O2JyZWFrO2Nhc2UiUG9pbnRMaWdodCI6bj17cG9zaXRpb246bmV3ICRpdCxjb2xvcjpuZXcgQ3J0LGRpc3RhbmNlOjAsZGVjYXk6MH07YnJlYWs7Y2FzZSJIZW1pc3BoZXJlTGlnaHQiOm49e2RpcmVjdGlvbjpuZXcgJGl0LHNreUNvbG9yOm5ldyBDcnQsZ3JvdW5kQ29sb3I6bmV3IENydH07YnJlYWs7Y2FzZSJSZWN0QXJlYUxpZ2h0IjpuPXtjb2xvcjpuZXcgQ3J0LHBvc2l0aW9uOm5ldyAkaXQsaGFsZldpZHRoOm5ldyAkaXQsaGFsZkhlaWdodDpuZXcgJGl0fX1yZXR1cm4gdFtlLmlkXT1uLG59fX1sZXQgX2N0PTA7ZnVuY3Rpb24gQ2N0KHQsZSl7cmV0dXJuKGUuY2FzdFNoYWRvdz8xOjApLSh0LmNhc3RTaGFkb3c/MTowKX1mdW5jdGlvbiBNY3QodCxlKXtjb25zdCBuPW5ldyB5Y3Qsbz0oZnVuY3Rpb24gaSgpe2NvbnN0IHQ9e307cmV0dXJue2dldDpmdW5jdGlvbihlKXtpZih2b2lkIDAhPT10W2UuaWRdKXJldHVybiB0W2UuaWRdO2xldCBuO3N3aXRjaChlLnR5cGUpe2Nhc2UiRGlyZWN0aW9uYWxMaWdodCI6Y2FzZSJTcG90TGlnaHQiOm49e3NoYWRvd0JpYXM6MCxzaGFkb3dOb3JtYWxCaWFzOjAsc2hhZG93UmFkaXVzOjEsc2hhZG93TWFwU2l6ZTpuZXcgVWl0fTticmVhaztjYXNlIlBvaW50TGlnaHQiOm49e3NoYWRvd0JpYXM6MCxzaGFkb3dOb3JtYWxCaWFzOjAsc2hhZG93UmFkaXVzOjEsc2hhZG93TWFwU2l6ZTpuZXcgVWl0LHNoYWRvd0NhbWVyYU5lYXI6MSxzaGFkb3dDYW1lcmFGYXI6MWUzfX1yZXR1cm4gdFtlLmlkXT1uLG59fX0pKCksYT17dmVyc2lvbjowLGhhc2g6e2RpcmVjdGlvbmFsTGVuZ3RoOi0xLHBvaW50TGVuZ3RoOi0xLHNwb3RMZW5ndGg6LTEscmVjdEFyZWFMZW5ndGg6LTEsaGVtaUxlbmd0aDotMSxudW1EaXJlY3Rpb25hbFNoYWRvd3M6LTEsbnVtUG9pbnRTaGFkb3dzOi0xLG51bVNwb3RTaGFkb3dzOi0xfSxhbWJpZW50OlswLDAsMF0scHJvYmU6W10sZGlyZWN0aW9uYWw6W10sZGlyZWN0aW9uYWxTaGFkb3c6W10sZGlyZWN0aW9uYWxTaGFkb3dNYXA6W10sZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXg6W10sc3BvdDpbXSxzcG90U2hhZG93OltdLHNwb3RTaGFkb3dNYXA6W10sc3BvdFNoYWRvd01hdHJpeDpbXSxyZWN0QXJlYTpbXSxyZWN0QXJlYUxUQzE6bnVsbCxyZWN0QXJlYUxUQzI6bnVsbCxwb2ludDpbXSxwb2ludFNoYWRvdzpbXSxwb2ludFNoYWRvd01hcDpbXSxwb2ludFNoYWRvd01hdHJpeDpbXSxoZW1pOltdfTtmb3IobGV0IHQ9MDt0PDk7dCsrKWEucHJvYmUucHVzaChuZXcgJGl0KTtjb25zdCByPW5ldyAkaXQscz1uZXcga2F0LGw9bmV3IGthdDtyZXR1cm57c2V0dXA6ZnVuY3Rpb24gYyhpKXtsZXQgcj0wLHM9MCxsPTA7Zm9yKGxldCB0PTA7dDw5O3QrKylhLnByb2JlW3RdLnNldCgwLDAsMCk7bGV0IGM9MCxkPTAscD0wLG09MCx1PTAsZj0wLGc9MCxoPTA7aS5zb3J0KENjdCk7Zm9yKGxldCB0PTAsZT1pLmxlbmd0aDt0PGU7dCsrKXtjb25zdCBlPWlbdF0sYj1lLmNvbG9yLHk9ZS5pbnRlbnNpdHksXz1lLmRpc3RhbmNlLEM9ZS5zaGFkb3cmJmUuc2hhZG93Lm1hcD9lLnNoYWRvdy5tYXAudGV4dHVyZTpudWxsO2lmKGUuaXNBbWJpZW50TGlnaHQpcis9Yi5yKnkscys9Yi5nKnksbCs9Yi5iKnk7ZWxzZSBpZihlLmlzTGlnaHRQcm9iZSlmb3IobGV0IHQ9MDt0PDk7dCsrKWEucHJvYmVbdF0uYWRkU2NhbGVkVmVjdG9yKGUuc2guY29lZmZpY2llbnRzW3RdLHkpO2Vsc2UgaWYoZS5pc0RpcmVjdGlvbmFsTGlnaHQpe2NvbnN0IHQ9bi5nZXQoZSk7aWYodC5jb2xvci5jb3B5KGUuY29sb3IpLm11bHRpcGx5U2NhbGFyKGUuaW50ZW5zaXR5KSxlLmNhc3RTaGFkb3cpe2NvbnN0IHQ9ZS5zaGFkb3csbj1vLmdldChlKTtuLnNoYWRvd0JpYXM9dC5iaWFzLG4uc2hhZG93Tm9ybWFsQmlhcz10Lm5vcm1hbEJpYXMsbi5zaGFkb3dSYWRpdXM9dC5yYWRpdXMsbi5zaGFkb3dNYXBTaXplPXQubWFwU2l6ZSxhLmRpcmVjdGlvbmFsU2hhZG93W2NdPW4sYS5kaXJlY3Rpb25hbFNoYWRvd01hcFtjXT1DLGEuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXhbY109ZS5zaGFkb3cubWF0cml4LGYrK31hLmRpcmVjdGlvbmFsW2NdPXQsYysrfWVsc2UgaWYoZS5pc1Nwb3RMaWdodCl7Y29uc3QgdD1uLmdldChlKTtpZih0LnBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihlLm1hdHJpeFdvcmxkKSx0LmNvbG9yLmNvcHkoYikubXVsdGlwbHlTY2FsYXIoeSksdC5kaXN0YW5jZT1fLHQuY29uZUNvcz1NYXRoLmNvcyhlLmFuZ2xlKSx0LnBlbnVtYnJhQ29zPU1hdGguY29zKGUuYW5nbGUqKDEtZS5wZW51bWJyYSkpLHQuZGVjYXk9ZS5kZWNheSxlLmNhc3RTaGFkb3cpe2NvbnN0IHQ9ZS5zaGFkb3csbj1vLmdldChlKTtuLnNoYWRvd0JpYXM9dC5iaWFzLG4uc2hhZG93Tm9ybWFsQmlhcz10Lm5vcm1hbEJpYXMsbi5zaGFkb3dSYWRpdXM9dC5yYWRpdXMsbi5zaGFkb3dNYXBTaXplPXQubWFwU2l6ZSxhLnNwb3RTaGFkb3dbcF09bixhLnNwb3RTaGFkb3dNYXBbcF09QyxhLnNwb3RTaGFkb3dNYXRyaXhbcF09ZS5zaGFkb3cubWF0cml4LGgrK31hLnNwb3RbcF09dCxwKyt9ZWxzZSBpZihlLmlzUmVjdEFyZWFMaWdodCl7Y29uc3QgdD1uLmdldChlKTt0LmNvbG9yLmNvcHkoYikubXVsdGlwbHlTY2FsYXIoeSksdC5oYWxmV2lkdGguc2V0KC41KmUud2lkdGgsMCwwKSx0LmhhbGZIZWlnaHQuc2V0KDAsLjUqZS5oZWlnaHQsMCksYS5yZWN0QXJlYVttXT10LG0rK31lbHNlIGlmKGUuaXNQb2ludExpZ2h0KXtjb25zdCB0PW4uZ2V0KGUpO2lmKHQuY29sb3IuY29weShlLmNvbG9yKS5tdWx0aXBseVNjYWxhcihlLmludGVuc2l0eSksdC5kaXN0YW5jZT1lLmRpc3RhbmNlLHQuZGVjYXk9ZS5kZWNheSxlLmNhc3RTaGFkb3cpe2NvbnN0IHQ9ZS5zaGFkb3csbj1vLmdldChlKTtuLnNoYWRvd0JpYXM9dC5iaWFzLG4uc2hhZG93Tm9ybWFsQmlhcz10Lm5vcm1hbEJpYXMsbi5zaGFkb3dSYWRpdXM9dC5yYWRpdXMsbi5zaGFkb3dNYXBTaXplPXQubWFwU2l6ZSxuLnNoYWRvd0NhbWVyYU5lYXI9dC5jYW1lcmEubmVhcixuLnNoYWRvd0NhbWVyYUZhcj10LmNhbWVyYS5mYXIsYS5wb2ludFNoYWRvd1tkXT1uLGEucG9pbnRTaGFkb3dNYXBbZF09QyxhLnBvaW50U2hhZG93TWF0cml4W2RdPWUuc2hhZG93Lm1hdHJpeCxnKyt9YS5wb2ludFtkXT10LGQrK31lbHNlIGlmKGUuaXNIZW1pc3BoZXJlTGlnaHQpe2NvbnN0IHQ9bi5nZXQoZSk7dC5za3lDb2xvci5jb3B5KGUuY29sb3IpLm11bHRpcGx5U2NhbGFyKHkpLHQuZ3JvdW5kQ29sb3IuY29weShlLmdyb3VuZENvbG9yKS5tdWx0aXBseVNjYWxhcih5KSxhLmhlbWlbdV09dCx1Kyt9fW0+MCYmKGUuaXNXZWJHTDJ8fCEwPT09dC5oYXMoIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpPyhhLnJlY3RBcmVhTFRDMT1Uc3QuTFRDX0ZMT0FUXzEsYS5yZWN0QXJlYUxUQzI9VHN0LkxUQ19GTE9BVF8yKTohMD09PXQuaGFzKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpPyhhLnJlY3RBcmVhTFRDMT1Uc3QuTFRDX0hBTEZfMSxhLnJlY3RBcmVhTFRDMj1Uc3QuTFRDX0hBTEZfMik6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVW5hYmxlIHRvIHVzZSBSZWN0QXJlYUxpZ2h0LiBNaXNzaW5nIFdlYkdMIGV4dGVuc2lvbnMuIikpLGEuYW1iaWVudFswXT1yLGEuYW1iaWVudFsxXT1zLGEuYW1iaWVudFsyXT1sO2NvbnN0IGI9YS5oYXNoO2IuZGlyZWN0aW9uYWxMZW5ndGg9PT1jJiZiLnBvaW50TGVuZ3RoPT09ZCYmYi5zcG90TGVuZ3RoPT09cCYmYi5yZWN0QXJlYUxlbmd0aD09PW0mJmIuaGVtaUxlbmd0aD09PXUmJmIubnVtRGlyZWN0aW9uYWxTaGFkb3dzPT09ZiYmYi5udW1Qb2ludFNoYWRvd3M9PT1nJiZiLm51bVNwb3RTaGFkb3dzPT09aHx8KGEuZGlyZWN0aW9uYWwubGVuZ3RoPWMsYS5zcG90Lmxlbmd0aD1wLGEucmVjdEFyZWEubGVuZ3RoPW0sYS5wb2ludC5sZW5ndGg9ZCxhLmhlbWkubGVuZ3RoPXUsYS5kaXJlY3Rpb25hbFNoYWRvdy5sZW5ndGg9ZixhLmRpcmVjdGlvbmFsU2hhZG93TWFwLmxlbmd0aD1mLGEucG9pbnRTaGFkb3cubGVuZ3RoPWcsYS5wb2ludFNoYWRvd01hcC5sZW5ndGg9ZyxhLnNwb3RTaGFkb3cubGVuZ3RoPWgsYS5zcG90U2hhZG93TWFwLmxlbmd0aD1oLGEuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXgubGVuZ3RoPWYsYS5wb2ludFNoYWRvd01hdHJpeC5sZW5ndGg9ZyxhLnNwb3RTaGFkb3dNYXRyaXgubGVuZ3RoPWgsYi5kaXJlY3Rpb25hbExlbmd0aD1jLGIucG9pbnRMZW5ndGg9ZCxiLnNwb3RMZW5ndGg9cCxiLnJlY3RBcmVhTGVuZ3RoPW0sYi5oZW1pTGVuZ3RoPXUsYi5udW1EaXJlY3Rpb25hbFNoYWRvd3M9ZixiLm51bVBvaW50U2hhZG93cz1nLGIubnVtU3BvdFNoYWRvd3M9aCxhLnZlcnNpb249X2N0KyspfSxzZXR1cFZpZXc6ZnVuY3Rpb24gZCh0LGUpe2xldCBuPTAsbz0wLGk9MCxjPTAsZD0wO2NvbnN0IHA9ZS5tYXRyaXhXb3JsZEludmVyc2U7Zm9yKGxldCBlPTAsbT10Lmxlbmd0aDtlPG07ZSsrKXtjb25zdCBtPXRbZV07aWYobS5pc0RpcmVjdGlvbmFsTGlnaHQpe2NvbnN0IHQ9YS5kaXJlY3Rpb25hbFtuXTt0LmRpcmVjdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24obS5tYXRyaXhXb3JsZCksci5zZXRGcm9tTWF0cml4UG9zaXRpb24obS50YXJnZXQubWF0cml4V29ybGQpLHQuZGlyZWN0aW9uLnN1YihyKSx0LmRpcmVjdGlvbi50cmFuc2Zvcm1EaXJlY3Rpb24ocCksbisrfWVsc2UgaWYobS5pc1Nwb3RMaWdodCl7Y29uc3QgdD1hLnNwb3RbaV07dC5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24obS5tYXRyaXhXb3JsZCksdC5wb3NpdGlvbi5hcHBseU1hdHJpeDQocCksdC5kaXJlY3Rpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKG0ubWF0cml4V29ybGQpLHIuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKG0udGFyZ2V0Lm1hdHJpeFdvcmxkKSx0LmRpcmVjdGlvbi5zdWIociksdC5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKHApLGkrK31lbHNlIGlmKG0uaXNSZWN0QXJlYUxpZ2h0KXtjb25zdCB0PWEucmVjdEFyZWFbY107dC5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24obS5tYXRyaXhXb3JsZCksdC5wb3NpdGlvbi5hcHBseU1hdHJpeDQocCksbC5pZGVudGl0eSgpLHMuY29weShtLm1hdHJpeFdvcmxkKSxzLnByZW11bHRpcGx5KHApLGwuZXh0cmFjdFJvdGF0aW9uKHMpLHQuaGFsZldpZHRoLnNldCguNSptLndpZHRoLDAsMCksdC5oYWxmSGVpZ2h0LnNldCgwLC41Km0uaGVpZ2h0LDApLHQuaGFsZldpZHRoLmFwcGx5TWF0cml4NChsKSx0LmhhbGZIZWlnaHQuYXBwbHlNYXRyaXg0KGwpLGMrK31lbHNlIGlmKG0uaXNQb2ludExpZ2h0KXtjb25zdCB0PWEucG9pbnRbb107dC5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24obS5tYXRyaXhXb3JsZCksdC5wb3NpdGlvbi5hcHBseU1hdHJpeDQocCksbysrfWVsc2UgaWYobS5pc0hlbWlzcGhlcmVMaWdodCl7Y29uc3QgdD1hLmhlbWlbZF07dC5kaXJlY3Rpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKG0ubWF0cml4V29ybGQpLHQuZGlyZWN0aW9uLnRyYW5zZm9ybURpcmVjdGlvbihwKSx0LmRpcmVjdGlvbi5ub3JtYWxpemUoKSxkKyt9fX0sc3RhdGU6YX19ZnVuY3Rpb24gdmN0KHQsZSl7Y29uc3Qgbj1uZXcgTWN0KHQsZSksbz1bXSxpPVtdO3JldHVybntpbml0OmZ1bmN0aW9uIGEoKXtvLmxlbmd0aD0wLGkubGVuZ3RoPTB9LHN0YXRlOntsaWdodHNBcnJheTpvLHNoYWRvd3NBcnJheTppLGxpZ2h0czpufSxzZXR1cExpZ2h0czpmdW5jdGlvbiByKCl7bi5zZXR1cChvKX0sc2V0dXBMaWdodHNWaWV3OmZ1bmN0aW9uIHModCl7bi5zZXR1cFZpZXcobyx0KX0scHVzaExpZ2h0OmZ1bmN0aW9uIGwodCl7by5wdXNoKHQpfSxwdXNoU2hhZG93OmZ1bmN0aW9uIGModCl7aS5wdXNoKHQpfX19ZnVuY3Rpb24geGN0KHQsZSl7bGV0IG49bmV3IFdlYWtNYXA7cmV0dXJue2dldDpmdW5jdGlvbiBvKGksYT0wKXtsZXQgcjtyZXR1cm4hMT09PW4uaGFzKGkpPyhyPW5ldyB2Y3QodCxlKSxuLnNldChpLFtdKSxuLmdldChpKS5wdXNoKHIpKTphPj1uLmdldChpKS5sZW5ndGg/KHI9bmV3IHZjdCh0LGUpLG4uZ2V0KGkpLnB1c2gocikpOnI9bi5nZXQoaSlbYV0scn0sZGlzcG9zZTpmdW5jdGlvbiBpKCl7bj1uZXcgV2Vha01hcH19fWZ1bmN0aW9uIE9jdCh0KXt4cnQuY2FsbCh0aGlzKSx0aGlzLnR5cGU9Ik1lc2hEZXB0aE1hdGVyaWFsIix0aGlzLmRlcHRoUGFja2luZz0zMjAwLHRoaXMuc2tpbm5pbmc9ITEsdGhpcy5tb3JwaFRhcmdldHM9ITEsdGhpcy5tYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLmZvZz0hMSx0aGlzLnNldFZhbHVlcyh0KX1mdW5jdGlvbiBQY3QodCl7eHJ0LmNhbGwodGhpcyksdGhpcy50eXBlPSJNZXNoRGlzdGFuY2VNYXRlcmlhbCIsdGhpcy5yZWZlcmVuY2VQb3NpdGlvbj1uZXcgJGl0LHRoaXMubmVhckRpc3RhbmNlPTEsdGhpcy5mYXJEaXN0YW5jZT0xZTMsdGhpcy5za2lubmluZz0hMSx0aGlzLm1vcnBoVGFyZ2V0cz0hMSx0aGlzLm1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLmZvZz0hMSx0aGlzLnNldFZhbHVlcyh0KX1mdW5jdGlvbiB3Y3QodCxlLG4pe2xldCBvPW5ldyBTc3Q7Y29uc3QgaT1uZXcgVWl0LGE9bmV3IFVpdCxyPW5ldyBLaXQscz1bXSxsPVtdLGM9e30sZD17MDoxLDE6MCwyOjJ9LHA9bmV3IHlzdCh7ZGVmaW5lczp7U0FNUExFX1JBVEU6Mi84LEhBTEZfU0FNUExFX1JBVEU6MS84fSx1bmlmb3Jtczp7c2hhZG93X3Bhc3M6e3ZhbHVlOm51bGx9LHJlc29sdXRpb246e3ZhbHVlOm5ldyBVaXR9LHJhZGl1czp7dmFsdWU6NH19LHZlcnRleFNoYWRlcjoidm9pZCBtYWluKCkge1xuXHRnbF9Qb3NpdGlvbiA9IHZlYzQoIHBvc2l0aW9uLCAxLjAgKTtcbn0iLGZyYWdtZW50U2hhZGVyOiJ1bmlmb3JtIHNhbXBsZXIyRCBzaGFkb3dfcGFzcztcbnVuaWZvcm0gdmVjMiByZXNvbHV0aW9uO1xudW5pZm9ybSBmbG9hdCByYWRpdXM7XG4jaW5jbHVkZSA8cGFja2luZz5cbnZvaWQgbWFpbigpIHtcblx0ZmxvYXQgbWVhbiA9IDAuMDtcblx0ZmxvYXQgc3F1YXJlZF9tZWFuID0gMC4wO1xuXHRmbG9hdCBkZXB0aCA9IHVucGFja1JHQkFUb0RlcHRoKCB0ZXh0dXJlMkQoIHNoYWRvd19wYXNzLCAoIGdsX0ZyYWdDb29yZC54eSApIC8gcmVzb2x1dGlvbiApICk7XG5cdGZvciAoIGZsb2F0IGkgPSAtMS4wOyBpIDwgMS4wIDsgaSArPSBTQU1QTEVfUkFURSkge1xuXHRcdCNpZmRlZiBIT1JJWk9OVEFMX1BBU1Ncblx0XHRcdHZlYzIgZGlzdHJpYnV0aW9uID0gdW5wYWNrUkdCQVRvMkhhbGYoIHRleHR1cmUyRCggc2hhZG93X3Bhc3MsICggZ2xfRnJhZ0Nvb3JkLnh5ICsgdmVjMiggaSwgMC4wICkgKiByYWRpdXMgKSAvIHJlc29sdXRpb24gKSApO1xuXHRcdFx0bWVhbiArPSBkaXN0cmlidXRpb24ueDtcblx0XHRcdHNxdWFyZWRfbWVhbiArPSBkaXN0cmlidXRpb24ueSAqIGRpc3RyaWJ1dGlvbi55ICsgZGlzdHJpYnV0aW9uLnggKiBkaXN0cmlidXRpb24ueDtcblx0XHQjZWxzZVxuXHRcdFx0ZmxvYXQgZGVwdGggPSB1bnBhY2tSR0JBVG9EZXB0aCggdGV4dHVyZTJEKCBzaGFkb3dfcGFzcywgKCBnbF9GcmFnQ29vcmQueHkgKyB2ZWMyKCAwLjAsIGkgKSAqIHJhZGl1cyApIC8gcmVzb2x1dGlvbiApICk7XG5cdFx0XHRtZWFuICs9IGRlcHRoO1xuXHRcdFx0c3F1YXJlZF9tZWFuICs9IGRlcHRoICogZGVwdGg7XG5cdFx0I2VuZGlmXG5cdH1cblx0bWVhbiA9IG1lYW4gKiBIQUxGX1NBTVBMRV9SQVRFO1xuXHRzcXVhcmVkX21lYW4gPSBzcXVhcmVkX21lYW4gKiBIQUxGX1NBTVBMRV9SQVRFO1xuXHRmbG9hdCBzdGRfZGV2ID0gc3FydCggc3F1YXJlZF9tZWFuIC0gbWVhbiAqIG1lYW4gKTtcblx0Z2xfRnJhZ0NvbG9yID0gcGFjazJIYWxmVG9SR0JBKCB2ZWMyKCBtZWFuLCBzdGRfZGV2ICkgKTtcbn0ifSksbT1wLmNsb25lKCk7bS5kZWZpbmVzLkhPUklaT05UQUxfUEFTUz0xO2NvbnN0IHU9bmV3IFpydDt1LnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBrcnQobmV3IEZsb2F0MzJBcnJheShbLTEsLTEsLjUsMywtMSwuNSwtMSwzLC41XSksMykpO2NvbnN0IGY9bmV3IG1zdCh1LHApLGc9dGhpcztmdW5jdGlvbiBoKG4sbyl7Y29uc3QgaT1lLnVwZGF0ZShmKTtwLnVuaWZvcm1zLnNoYWRvd19wYXNzLnZhbHVlPW4ubWFwLnRleHR1cmUscC51bmlmb3Jtcy5yZXNvbHV0aW9uLnZhbHVlPW4ubWFwU2l6ZSxwLnVuaWZvcm1zLnJhZGl1cy52YWx1ZT1uLnJhZGl1cyx0LnNldFJlbmRlclRhcmdldChuLm1hcFBhc3MpLHQuY2xlYXIoKSx0LnJlbmRlckJ1ZmZlckRpcmVjdChvLG51bGwsaSxwLGYsbnVsbCksbS51bmlmb3Jtcy5zaGFkb3dfcGFzcy52YWx1ZT1uLm1hcFBhc3MudGV4dHVyZSxtLnVuaWZvcm1zLnJlc29sdXRpb24udmFsdWU9bi5tYXBTaXplLG0udW5pZm9ybXMucmFkaXVzLnZhbHVlPW4ucmFkaXVzLHQuc2V0UmVuZGVyVGFyZ2V0KG4ubWFwKSx0LmNsZWFyKCksdC5yZW5kZXJCdWZmZXJEaXJlY3QobyxudWxsLGksbSxmLG51bGwpfWZ1bmN0aW9uIGIodCxlLG4pe2NvbnN0IG89dDw8MHxlPDwxfG48PDI7bGV0IGk9c1tvXTtyZXR1cm4gdm9pZCAwPT09aSYmKGk9bmV3IE9jdCh7ZGVwdGhQYWNraW5nOjMyMDEsbW9ycGhUYXJnZXRzOnQsc2tpbm5pbmc6ZX0pLHNbb109aSksaX1mdW5jdGlvbiB5KHQsZSxuKXtjb25zdCBvPXQ8PDB8ZTw8MXxuPDwyO2xldCBpPWxbb107cmV0dXJuIHZvaWQgMD09PWkmJihpPW5ldyBQY3Qoe21vcnBoVGFyZ2V0czp0LHNraW5uaW5nOmV9KSxsW29dPWkpLGl9ZnVuY3Rpb24gXyhlLG4sbyxpLGEscixzKXtsZXQgbD1udWxsLHA9YixtPWUuY3VzdG9tRGVwdGhNYXRlcmlhbDtpZighMD09PWkuaXNQb2ludExpZ2h0JiYocD15LG09ZS5jdXN0b21EaXN0YW5jZU1hdGVyaWFsKSx2b2lkIDA9PT1tKXtsZXQgdD0hMTshMD09PW8ubW9ycGhUYXJnZXRzJiYodD1uLm1vcnBoQXR0cmlidXRlcyYmbi5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24mJm4ubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLmxlbmd0aD4wKTtsZXQgaT0hMTshMD09PWUuaXNTa2lubmVkTWVzaCYmKCEwPT09by5za2lubmluZz9pPSEwOmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xTaGFkb3dNYXA6IFRIUkVFLlNraW5uZWRNZXNoIHdpdGggbWF0ZXJpYWwuc2tpbm5pbmcgc2V0IHRvIGZhbHNlOiIsZSkpLGw9cCh0LGksITA9PT1lLmlzSW5zdGFuY2VkTWVzaCl9ZWxzZSBsPW07aWYodC5sb2NhbENsaXBwaW5nRW5hYmxlZCYmITA9PT1vLmNsaXBTaGFkb3dzJiYwIT09by5jbGlwcGluZ1BsYW5lcy5sZW5ndGgpe2NvbnN0IHQ9bC51dWlkLGU9by51dWlkO2xldCBuPWNbdF07dm9pZCAwPT09biYmKG49e30sY1t0XT1uKTtsZXQgaT1uW2VdO3ZvaWQgMD09PWkmJihpPWwuY2xvbmUoKSxuW2VdPWkpLGw9aX1yZXR1cm4gbC52aXNpYmxlPW8udmlzaWJsZSxsLndpcmVmcmFtZT1vLndpcmVmcmFtZSxsLnNpZGU9Mz09PXM/bnVsbCE9PW8uc2hhZG93U2lkZT9vLnNoYWRvd1NpZGU6by5zaWRlOm51bGwhPT1vLnNoYWRvd1NpZGU/by5zaGFkb3dTaWRlOmRbby5zaWRlXSxsLmNsaXBTaGFkb3dzPW8uY2xpcFNoYWRvd3MsbC5jbGlwcGluZ1BsYW5lcz1vLmNsaXBwaW5nUGxhbmVzLGwuY2xpcEludGVyc2VjdGlvbj1vLmNsaXBJbnRlcnNlY3Rpb24sbC53aXJlZnJhbWVMaW5ld2lkdGg9by53aXJlZnJhbWVMaW5ld2lkdGgsbC5saW5ld2lkdGg9by5saW5ld2lkdGgsITA9PT1pLmlzUG9pbnRMaWdodCYmITA9PT1sLmlzTWVzaERpc3RhbmNlTWF0ZXJpYWwmJihsLnJlZmVyZW5jZVBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihpLm1hdHJpeFdvcmxkKSxsLm5lYXJEaXN0YW5jZT1hLGwuZmFyRGlzdGFuY2U9ciksbH1mdW5jdGlvbiBDKG4saSxhLHIscyl7aWYoITE9PT1uLnZpc2libGUpcmV0dXJuO2lmKG4ubGF5ZXJzLnRlc3QoaS5sYXllcnMpJiYobi5pc01lc2h8fG4uaXNMaW5lfHxuLmlzUG9pbnRzKSYmKG4uY2FzdFNoYWRvd3x8bi5yZWNlaXZlU2hhZG93JiYzPT09cykmJighbi5mcnVzdHVtQ3VsbGVkfHxvLmludGVyc2VjdHNPYmplY3QobikpKXtuLm1vZGVsVmlld01hdHJpeC5tdWx0aXBseU1hdHJpY2VzKGEubWF0cml4V29ybGRJbnZlcnNlLG4ubWF0cml4V29ybGQpO2NvbnN0IG89ZS51cGRhdGUobiksaT1uLm1hdGVyaWFsO2lmKEFycmF5LmlzQXJyYXkoaSkpe2NvbnN0IGU9by5ncm91cHM7Zm9yKGxldCBsPTAsYz1lLmxlbmd0aDtsPGM7bCsrKXtjb25zdCBjPWVbbF0sZD1pW2MubWF0ZXJpYWxJbmRleF07aWYoZCYmZC52aXNpYmxlKXtjb25zdCBlPV8obixvLGQscixhLm5lYXIsYS5mYXIscyk7dC5yZW5kZXJCdWZmZXJEaXJlY3QoYSxudWxsLG8sZSxuLGMpfX19ZWxzZSBpZihpLnZpc2libGUpe2NvbnN0IGU9XyhuLG8saSxyLGEubmVhcixhLmZhcixzKTt0LnJlbmRlckJ1ZmZlckRpcmVjdChhLG51bGwsbyxlLG4sbnVsbCl9fWNvbnN0IGw9bi5jaGlsZHJlbjtmb3IobGV0IHQ9MCxlPWwubGVuZ3RoO3Q8ZTt0KyspQyhsW3RdLGksYSxyLHMpfXRoaXMuZW5hYmxlZD0hMSx0aGlzLmF1dG9VcGRhdGU9ITAsdGhpcy5uZWVkc1VwZGF0ZT0hMSx0aGlzLnR5cGU9MSx0aGlzLnJlbmRlcj1mdW5jdGlvbihlLHMsbCl7aWYoITE9PT1nLmVuYWJsZWQpcmV0dXJuO2lmKCExPT09Zy5hdXRvVXBkYXRlJiYhMT09PWcubmVlZHNVcGRhdGUpcmV0dXJuO2lmKDA9PT1lLmxlbmd0aClyZXR1cm47Y29uc3QgYz10LmdldFJlbmRlclRhcmdldCgpLGQ9dC5nZXRBY3RpdmVDdWJlRmFjZSgpLHA9dC5nZXRBY3RpdmVNaXBtYXBMZXZlbCgpLG09dC5zdGF0ZTttLnNldEJsZW5kaW5nKDApLG0uYnVmZmVycy5jb2xvci5zZXRDbGVhcigxLDEsMSwxKSxtLmJ1ZmZlcnMuZGVwdGguc2V0VGVzdCghMCksbS5zZXRTY2lzc29yVGVzdCghMSk7Zm9yKGxldCBjPTAsZD1lLmxlbmd0aDtjPGQ7YysrKXtjb25zdCBkPWVbY10scD1kLnNoYWRvdztpZih2b2lkIDA9PT1wKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMU2hhZG93TWFwOiIsZCwiaGFzIG5vIHNoYWRvdy4iKTtjb250aW51ZX1pZighMT09PXAuYXV0b1VwZGF0ZSYmITE9PT1wLm5lZWRzVXBkYXRlKWNvbnRpbnVlO2kuY29weShwLm1hcFNpemUpO2NvbnN0IHU9cC5nZXRGcmFtZUV4dGVudHMoKTtpZihpLm11bHRpcGx5KHUpLGEuY29weShwLm1hcFNpemUpLChpLng+bnx8aS55Pm4pJiYoaS54Pm4mJihhLng9TWF0aC5mbG9vcihuL3UueCksaS54PWEueCp1LngscC5tYXBTaXplLng9YS54KSxpLnk+biYmKGEueT1NYXRoLmZsb29yKG4vdS55KSxpLnk9YS55KnUueSxwLm1hcFNpemUueT1hLnkpKSxudWxsPT09cC5tYXAmJiFwLmlzUG9pbnRMaWdodFNoYWRvdyYmMz09PXRoaXMudHlwZSl7Y29uc3QgdD17bWluRmlsdGVyOmJpdCxtYWdGaWx0ZXI6Yml0LGZvcm1hdDpQaXR9O3AubWFwPW5ldyBKaXQoaS54LGkueSx0KSxwLm1hcC50ZXh0dXJlLm5hbWU9ZC5uYW1lKyIuc2hhZG93TWFwIixwLm1hcFBhc3M9bmV3IEppdChpLngsaS55LHQpLHAuY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1udWxsPT09cC5tYXAmJihwLm1hcD1uZXcgSml0KGkueCxpLnkse21pbkZpbHRlcjpoaXQsbWFnRmlsdGVyOmhpdCxmb3JtYXQ6UGl0fSkscC5tYXAudGV4dHVyZS5uYW1lPWQubmFtZSsiLnNoYWRvd01hcCIscC5jYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpKSx0LnNldFJlbmRlclRhcmdldChwLm1hcCksdC5jbGVhcigpO2NvbnN0IGY9cC5nZXRWaWV3cG9ydENvdW50KCk7Zm9yKGxldCB0PTA7dDxmO3QrKyl7Y29uc3QgZT1wLmdldFZpZXdwb3J0KHQpO3Iuc2V0KGEueCplLngsYS55KmUueSxhLngqZS56LGEueSplLncpLG0udmlld3BvcnQocikscC51cGRhdGVNYXRyaWNlcyhkLHQpLG89cC5nZXRGcnVzdHVtKCksQyhzLGwscC5jYW1lcmEsZCx0aGlzLnR5cGUpfXAuaXNQb2ludExpZ2h0U2hhZG93fHwzIT09dGhpcy50eXBlfHxoKHAsbCkscC5uZWVkc1VwZGF0ZT0hMX1nLm5lZWRzVXBkYXRlPSExLHQuc2V0UmVuZGVyVGFyZ2V0KGMsZCxwKX19ZnVuY3Rpb24ga2N0KHQsZSxuKXtjb25zdCBvPW4uaXNXZWJHTDIsaT1uZXcoZnVuY3Rpb24gYSgpe2xldCBlPSExO2NvbnN0IG49bmV3IEtpdDtsZXQgbz1udWxsO2NvbnN0IGk9bmV3IEtpdCgwLDAsMCwwKTtyZXR1cm57c2V0TWFzazpmdW5jdGlvbihuKXtvPT09bnx8ZXx8KHQuY29sb3JNYXNrKG4sbixuLG4pLG89bil9LHNldExvY2tlZDpmdW5jdGlvbih0KXtlPXR9LHNldENsZWFyOmZ1bmN0aW9uKGUsbyxhLHIscyl7ITA9PT1zJiYoZSo9cixvKj1yLGEqPXIpLG4uc2V0KGUsbyxhLHIpLCExPT09aS5lcXVhbHMobikmJih0LmNsZWFyQ29sb3IoZSxvLGEsciksaS5jb3B5KG4pKX0scmVzZXQ6ZnVuY3Rpb24oKXtlPSExLG89bnVsbCxpLnNldCgtMSwwLDAsMCl9fX0pLHI9bmV3KGZ1bmN0aW9uIHMoKXtsZXQgZT0hMSxuPW51bGwsbz1udWxsLGk9bnVsbDtyZXR1cm57c2V0VGVzdDpmdW5jdGlvbih0KXt0P3ooMjkyOSk6SCgyOTI5KX0sc2V0TWFzazpmdW5jdGlvbihvKXtuPT09b3x8ZXx8KHQuZGVwdGhNYXNrKG8pLG49byl9LHNldEZ1bmM6ZnVuY3Rpb24oZSl7aWYobyE9PWUpe2lmKGUpc3dpdGNoKGUpe2Nhc2UgMDp0LmRlcHRoRnVuYyg1MTIpO2JyZWFrO2Nhc2UgMTp0LmRlcHRoRnVuYyg1MTkpO2JyZWFrO2Nhc2UgMjp0LmRlcHRoRnVuYyg1MTMpO2JyZWFrO2Nhc2UgMzp0LmRlcHRoRnVuYyg1MTUpO2JyZWFrO2Nhc2UgNDp0LmRlcHRoRnVuYyg1MTQpO2JyZWFrO2Nhc2UgNTp0LmRlcHRoRnVuYyg1MTgpO2JyZWFrO2Nhc2UgNjp0LmRlcHRoRnVuYyg1MTYpO2JyZWFrO2Nhc2UgNzp0LmRlcHRoRnVuYyg1MTcpO2JyZWFrO2RlZmF1bHQ6dC5kZXB0aEZ1bmMoNTE1KX1lbHNlIHQuZGVwdGhGdW5jKDUxNSk7bz1lfX0sc2V0TG9ja2VkOmZ1bmN0aW9uKHQpe2U9dH0sc2V0Q2xlYXI6ZnVuY3Rpb24oZSl7aSE9PWUmJih0LmNsZWFyRGVwdGgoZSksaT1lKX0scmVzZXQ6ZnVuY3Rpb24oKXtlPSExLG49bnVsbCxvPW51bGwsaT1udWxsfX19KSxsPW5ldyhmdW5jdGlvbiBjKCl7bGV0IGU9ITEsbj1udWxsLG89bnVsbCxpPW51bGwsYT1udWxsLHI9bnVsbCxzPW51bGwsbD1udWxsLGM9bnVsbDtyZXR1cm57c2V0VGVzdDpmdW5jdGlvbih0KXtlfHwodD96KDI5NjApOkgoMjk2MCkpfSxzZXRNYXNrOmZ1bmN0aW9uKG8pe249PT1vfHxlfHwodC5zdGVuY2lsTWFzayhvKSxuPW8pfSxzZXRGdW5jOmZ1bmN0aW9uKGUsbixyKXtvPT09ZSYmaT09PW4mJmE9PT1yfHwodC5zdGVuY2lsRnVuYyhlLG4sciksbz1lLGk9bixhPXIpfSxzZXRPcDpmdW5jdGlvbihlLG4sbyl7cj09PWUmJnM9PT1uJiZsPT09b3x8KHQuc3RlbmNpbE9wKGUsbixvKSxyPWUscz1uLGw9byl9LHNldExvY2tlZDpmdW5jdGlvbih0KXtlPXR9LHNldENsZWFyOmZ1bmN0aW9uKGUpe2MhPT1lJiYodC5jbGVhclN0ZW5jaWwoZSksYz1lKX0scmVzZXQ6ZnVuY3Rpb24oKXtlPSExLG49bnVsbCxvPW51bGwsaT1udWxsLGE9bnVsbCxyPW51bGwscz1udWxsLGw9bnVsbCxjPW51bGx9fX0pO2xldCBkPXt9LHA9bnVsbCxtPW51bGwsdT1udWxsLGY9bnVsbCxnPW51bGwsaD1udWxsLGI9bnVsbCx5PW51bGwsXz1udWxsLEM9ITEsTT1udWxsLHY9bnVsbCx4PW51bGwsTz1udWxsLFA9bnVsbDtjb25zdCB3PXQuZ2V0UGFyYW1ldGVyKDM1NjYxKTtsZXQgaz0hMSxTPTA7Y29uc3QgRD10LmdldFBhcmFtZXRlcig3OTM4KTstMSE9PUQuaW5kZXhPZigiV2ViR0wiKT8oUz1wYXJzZUZsb2F0KC9eV2ViR0wgKFxkKS8uZXhlYyhEKVsxXSksaz1TPj0xKTotMSE9PUQuaW5kZXhPZigiT3BlbkdMIEVTIikmJihTPXBhcnNlRmxvYXQoL15PcGVuR0wgRVMgKFxkKS8uZXhlYyhEKVsxXSksaz1TPj0yKTtsZXQgRT1udWxsLEE9e307Y29uc3QgUj1uZXcgS2l0LFQ9bmV3IEtpdDtmdW5jdGlvbiBOKGUsbixvKXtjb25zdCBpPW5ldyBVaW50OEFycmF5KDQpLGE9dC5jcmVhdGVUZXh0dXJlKCk7dC5iaW5kVGV4dHVyZShlLGEpLHQudGV4UGFyYW1ldGVyaShlLDEwMjQxLDk3MjgpLHQudGV4UGFyYW1ldGVyaShlLDEwMjQwLDk3MjgpO2ZvcihsZXQgZT0wO2U8bztlKyspdC50ZXhJbWFnZTJEKG4rZSwwLDY0MDgsMSwxLDAsNjQwOCw1MTIxLGkpO3JldHVybiBhfWNvbnN0IEk9e307ZnVuY3Rpb24geihlKXshMCE9PWRbZV0mJih0LmVuYWJsZShlKSxkW2VdPSEwKX1mdW5jdGlvbiBIKGUpeyExIT09ZFtlXSYmKHQuZGlzYWJsZShlKSxkW2VdPSExKX1JWzM1NTNdPU4oMzU1MywzNTUzLDEpLElbMzQwNjddPU4oMzQwNjcsMzQwNjksNiksaS5zZXRDbGVhcigwLDAsMCwxKSxyLnNldENsZWFyKDEpLGwuc2V0Q2xlYXIoMCkseigyOTI5KSxyLnNldEZ1bmMoMyksVighMSksaigxKSx6KDI4ODQpLEIoMCk7Y29uc3QgRj17W21pdF06MzI3NzQsMTAxOjMyNzc4LDEwMjozMjc3OX07aWYobylGWzEwM109MzI3NzUsRlsxMDRdPTMyNzc2O2Vsc2V7Y29uc3QgdD1lLmdldCgiRVhUX2JsZW5kX21pbm1heCIpO251bGwhPT10JiYoRlsxMDNdPXQuTUlOX0VYVCxGWzEwNF09dC5NQVhfRVhUKX1jb25zdCBMPXsyMDA6MCwyMDE6MSwyMDI6NzY4LDIwNDo3NzAsMjEwOjc3NiwyMDg6Nzc0LDIwNjo3NzIsMjAzOjc2OSwyMDU6NzcxLDIwOTo3NzUsMjA3Ojc3M307ZnVuY3Rpb24gQihlLG4sbyxpLGEscixzLGwpe2lmKDAhPT1lKXtpZihtfHwoeigzMDQyKSxtPSEwKSw1PT09ZSlhPWF8fG4scj1yfHxvLHM9c3x8aSxuPT09ZiYmYT09PWJ8fCh0LmJsZW5kRXF1YXRpb25TZXBhcmF0ZShGW25dLEZbYV0pLGY9bixiPWEpLG89PT1nJiZpPT09aCYmcj09PXkmJnM9PT1ffHwodC5ibGVuZEZ1bmNTZXBhcmF0ZShMW29dLExbaV0sTFtyXSxMW3NdKSxnPW8saD1pLHk9cixfPXMpLHU9ZSxDPW51bGw7ZWxzZSBpZihlIT09dXx8bCE9PUMpe2lmKGY9PT1taXQmJmI9PT1taXR8fCh0LmJsZW5kRXF1YXRpb24oMzI3NzQpLGY9bWl0LGI9bWl0KSxsKXN3aXRjaChlKXtjYXNlIDE6dC5ibGVuZEZ1bmNTZXBhcmF0ZSgxLDc3MSwxLDc3MSk7YnJlYWs7Y2FzZSAyOnQuYmxlbmRGdW5jKDEsMSk7YnJlYWs7Y2FzZSAzOnQuYmxlbmRGdW5jU2VwYXJhdGUoMCwwLDc2OSw3NzEpO2JyZWFrO2Nhc2UgNDp0LmJsZW5kRnVuY1NlcGFyYXRlKDAsNzY4LDAsNzcwKTticmVhaztkZWZhdWx0OmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IEludmFsaWQgYmxlbmRpbmc6ICIsZSl9ZWxzZSBzd2l0Y2goZSl7Y2FzZSAxOnQuYmxlbmRGdW5jU2VwYXJhdGUoNzcwLDc3MSwxLDc3MSk7YnJlYWs7Y2FzZSAyOnQuYmxlbmRGdW5jKDc3MCwxKTticmVhaztjYXNlIDM6dC5ibGVuZEZ1bmMoMCw3NjkpO2JyZWFrO2Nhc2UgNDp0LmJsZW5kRnVuYygwLDc2OCk7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiBJbnZhbGlkIGJsZW5kaW5nOiAiLGUpfWc9bnVsbCxoPW51bGwseT1udWxsLF89bnVsbCx1PWUsQz1sfX1lbHNlIG0mJihIKDMwNDIpLG09ITEpfWZ1bmN0aW9uIFYoZSl7TSE9PWUmJih0LmZyb250RmFjZShlPzIzMDQ6MjMwNSksTT1lKX1mdW5jdGlvbiBqKGUpezAhPT1lPyh6KDI4ODQpLGUhPT12JiZ0LmN1bGxGYWNlKDE9PT1lPzEwMjk6Mj09PWU/MTAyODoxMDMyKSk6SCgyODg0KSx2PWV9ZnVuY3Rpb24gVShlLG4sbyl7ZT8oeigzMjgyMyksTz09PW4mJlA9PT1vfHwodC5wb2x5Z29uT2Zmc2V0KG4sbyksTz1uLFA9bykpOkgoMzI4MjMpfWZ1bmN0aW9uIFcoZSl7dm9pZCAwPT09ZSYmKGU9MzM5ODQrdy0xKSxFIT09ZSYmKHQuYWN0aXZlVGV4dHVyZShlKSxFPWUpfXJldHVybntidWZmZXJzOntjb2xvcjppLGRlcHRoOnIsc3RlbmNpbDpsfSxlbmFibGU6eixkaXNhYmxlOkgsdXNlUHJvZ3JhbTpmdW5jdGlvbiBHKGUpe3JldHVybiBwIT09ZSYmKHQudXNlUHJvZ3JhbShlKSxwPWUsITApfSxzZXRCbGVuZGluZzpCLHNldE1hdGVyaWFsOmZ1bmN0aW9uIFkodCxlKXsyPT09dC5zaWRlP0goMjg4NCk6eigyODg0KTtsZXQgbj0xPT09dC5zaWRlO2UmJihuPSFuKSxWKG4pLDE9PT10LmJsZW5kaW5nJiYhMT09PXQudHJhbnNwYXJlbnQ/QigwKTpCKHQuYmxlbmRpbmcsdC5ibGVuZEVxdWF0aW9uLHQuYmxlbmRTcmMsdC5ibGVuZERzdCx0LmJsZW5kRXF1YXRpb25BbHBoYSx0LmJsZW5kU3JjQWxwaGEsdC5ibGVuZERzdEFscGhhLHQucHJlbXVsdGlwbGllZEFscGhhKSxyLnNldEZ1bmModC5kZXB0aEZ1bmMpLHIuc2V0VGVzdCh0LmRlcHRoVGVzdCksci5zZXRNYXNrKHQuZGVwdGhXcml0ZSksaS5zZXRNYXNrKHQuY29sb3JXcml0ZSk7Y29uc3Qgbz10LnN0ZW5jaWxXcml0ZTtsLnNldFRlc3QobyksbyYmKGwuc2V0TWFzayh0LnN0ZW5jaWxXcml0ZU1hc2spLGwuc2V0RnVuYyh0LnN0ZW5jaWxGdW5jLHQuc3RlbmNpbFJlZix0LnN0ZW5jaWxGdW5jTWFzayksbC5zZXRPcCh0LnN0ZW5jaWxGYWlsLHQuc3RlbmNpbFpGYWlsLHQuc3RlbmNpbFpQYXNzKSksVSh0LnBvbHlnb25PZmZzZXQsdC5wb2x5Z29uT2Zmc2V0RmFjdG9yLHQucG9seWdvbk9mZnNldFVuaXRzKX0sc2V0RmxpcFNpZGVkOlYsc2V0Q3VsbEZhY2U6aixzZXRMaW5lV2lkdGg6ZnVuY3Rpb24gcShlKXtlIT09eCYmKGsmJnQubGluZVdpZHRoKGUpLHg9ZSl9LHNldFBvbHlnb25PZmZzZXQ6VSxzZXRTY2lzc29yVGVzdDpmdW5jdGlvbiBaKHQpe3Q/eigzMDg5KTpIKDMwODkpfSxhY3RpdmVUZXh0dXJlOlcsYmluZFRleHR1cmU6ZnVuY3Rpb24gWChlLG4pe251bGw9PT1FJiZXKCk7bGV0IG89QVtFXTt2b2lkIDA9PT1vJiYobz17dHlwZTp2b2lkIDAsdGV4dHVyZTp2b2lkIDB9LEFbRV09byksby50eXBlPT09ZSYmby50ZXh0dXJlPT09bnx8KHQuYmluZFRleHR1cmUoZSxufHxJW2VdKSxvLnR5cGU9ZSxvLnRleHR1cmU9bil9LHVuYmluZFRleHR1cmU6ZnVuY3Rpb24gSygpe2NvbnN0IGU9QVtFXTt2b2lkIDAhPT1lJiZ2b2lkIDAhPT1lLnR5cGUmJih0LmJpbmRUZXh0dXJlKGUudHlwZSxudWxsKSxlLnR5cGU9dm9pZCAwLGUudGV4dHVyZT12b2lkIDApfSxjb21wcmVzc2VkVGV4SW1hZ2UyRDpmdW5jdGlvbiBKKCl7dHJ5e3QuY29tcHJlc3NlZFRleEltYWdlMkQuYXBwbHkodCxhcmd1bWVudHMpfWNhdGNoKHQpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6Iix0KX19LHRleEltYWdlMkQ6ZnVuY3Rpb24gUSgpe3RyeXt0LnRleEltYWdlMkQuYXBwbHkodCxhcmd1bWVudHMpfWNhdGNoKHQpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6Iix0KX19LHRleEltYWdlM0Q6ZnVuY3Rpb24gJCgpe3RyeXt0LnRleEltYWdlM0QuYXBwbHkodCxhcmd1bWVudHMpfWNhdGNoKHQpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6Iix0KX19LHNjaXNzb3I6ZnVuY3Rpb24gdHQoZSl7ITE9PT1SLmVxdWFscyhlKSYmKHQuc2Npc3NvcihlLngsZS55LGUueixlLncpLFIuY29weShlKSl9LHZpZXdwb3J0OmZ1bmN0aW9uIGV0KGUpeyExPT09VC5lcXVhbHMoZSkmJih0LnZpZXdwb3J0KGUueCxlLnksZS56LGUudyksVC5jb3B5KGUpKX0scmVzZXQ6ZnVuY3Rpb24gbnQoKXtkPXt9LEU9bnVsbCxBPXt9LHA9bnVsbCxtPW51bGwsdT1udWxsLGY9bnVsbCxnPW51bGwsaD1udWxsLGI9bnVsbCx5PW51bGwsXz1udWxsLEM9ITEsTT1udWxsLHY9bnVsbCx4PW51bGwsTz1udWxsLFA9bnVsbCxpLnJlc2V0KCksci5yZXNldCgpLGwucmVzZXQoKX19fWZ1bmN0aW9uIFNjdCh0LGUsbixvLGksYSxyKXtjb25zdCBzPWkuaXNXZWJHTDIsbD1pLm1heFRleHR1cmVzLGM9aS5tYXhDdWJlbWFwU2l6ZSxkPWkubWF4VGV4dHVyZVNpemUscD1pLm1heFNhbXBsZXMsbT1uZXcgV2Vha01hcDtsZXQgdSxmPSExO3RyeXtmPSJ1bmRlZmluZWQiIT10eXBlb2YgT2Zmc2NyZWVuQ2FudmFzJiZudWxsIT09bmV3IE9mZnNjcmVlbkNhbnZhcygxLDEpLmdldENvbnRleHQoIjJkIil9Y2F0Y2godCl7fWZ1bmN0aW9uIGcodCxlKXtyZXR1cm4gZj9uZXcgT2Zmc2NyZWVuQ2FudmFzKHQsZSk6ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiY2FudmFzIil9ZnVuY3Rpb24gaCh0LGUsbixvKXtsZXQgaT0xO2lmKCh0LndpZHRoPm98fHQuaGVpZ2h0Pm8pJiYoaT1vL01hdGgubWF4KHQud2lkdGgsdC5oZWlnaHQpKSxpPDF8fCEwPT09ZSl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBIVE1MSW1hZ2VFbGVtZW50JiZ0IGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudHx8InVuZGVmaW5lZCIhPXR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudCYmdCBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50fHwidW5kZWZpbmVkIiE9dHlwZW9mIEltYWdlQml0bWFwJiZ0IGluc3RhbmNlb2YgSW1hZ2VCaXRtYXApe2NvbnN0IG89ZT9qaXQuZmxvb3JQb3dlck9mVHdvOk1hdGguZmxvb3IsYT1vKGkqdC53aWR0aCkscj1vKGkqdC5oZWlnaHQpO3ZvaWQgMD09PXUmJih1PWcoYSxyKSk7Y29uc3Qgcz1uP2coYSxyKTp1O3JldHVybiBzLndpZHRoPWEscy5oZWlnaHQ9cixzLmdldENvbnRleHQoIjJkIikuZHJhd0ltYWdlKHQsMCwwLGEsciksY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIGhhcyBiZWVuIHJlc2l6ZWQgZnJvbSAoIit0LndpZHRoKyJ4Iit0LmhlaWdodCsiKSB0byAoIithKyJ4IityKyIpLiIpLHN9cmV0dXJuImRhdGEiaW4gdCYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBJbWFnZSBpbiBEYXRhVGV4dHVyZSBpcyB0b28gYmlnICgiK3Qud2lkdGgrIngiK3QuaGVpZ2h0KyIpLiIpLHR9cmV0dXJuIHR9ZnVuY3Rpb24gYih0KXtyZXR1cm4gaml0LmlzUG93ZXJPZlR3byh0LndpZHRoKSYmaml0LmlzUG93ZXJPZlR3byh0LmhlaWdodCl9ZnVuY3Rpb24geSh0LGUpe3JldHVybiB0LmdlbmVyYXRlTWlwbWFwcyYmZSYmdC5taW5GaWx0ZXIhPT1oaXQmJnQubWluRmlsdGVyIT09Yml0fWZ1bmN0aW9uIF8oZSxuLGksYSl7dC5nZW5lcmF0ZU1pcG1hcChlKSxvLmdldChuKS5fX21heE1pcExldmVsPU1hdGgubG9nKE1hdGgubWF4KGksYSkpKk1hdGguTE9HMkV9ZnVuY3Rpb24gQyhuLG8saSl7aWYoITE9PT1zKXJldHVybiBvO2lmKG51bGwhPT1uKXtpZih2b2lkIDAhPT10W25dKXJldHVybiB0W25dO2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogQXR0ZW1wdCB0byB1c2Ugbm9uLWV4aXN0aW5nIFdlYkdMIGludGVybmFsIGZvcm1hdCAnIituKyInIil9bGV0IGE9bztyZXR1cm4gNjQwMz09PW8mJig1MTI2PT09aSYmKGE9MzMzMjYpLDUxMzE9PT1pJiYoYT0zMzMyNSksNTEyMT09PWkmJihhPTMzMzIxKSksNjQwNz09PW8mJig1MTI2PT09aSYmKGE9MzQ4MzcpLDUxMzE9PT1pJiYoYT0zNDg0MyksNTEyMT09PWkmJihhPTMyODQ5KSksNjQwOD09PW8mJig1MTI2PT09aSYmKGE9MzQ4MzYpLDUxMzE9PT1pJiYoYT0zNDg0MiksNTEyMT09PWkmJihhPTMyODU2KSksMzMzMjUhPT1hJiYzMzMyNiE9PWEmJjM0ODQyIT09YSYmMzQ4MzYhPT1hfHxlLmdldCgiRVhUX2NvbG9yX2J1ZmZlcl9mbG9hdCIpLGF9ZnVuY3Rpb24gTSh0KXtyZXR1cm4gdD09PWhpdHx8MTAwND09PXR8fDEwMDU9PT10Pzk3Mjg6OTcyOX1mdW5jdGlvbiB2KGUpe2NvbnN0IG49ZS50YXJnZXQ7bi5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIix2KSwoZnVuY3Rpb24gaShlKXtjb25zdCBuPW8uZ2V0KGUpO3ZvaWQgMCE9PW4uX193ZWJnbEluaXQmJih0LmRlbGV0ZVRleHR1cmUobi5fX3dlYmdsVGV4dHVyZSksby5yZW1vdmUoZSkpfSkobiksbi5pc1ZpZGVvVGV4dHVyZSYmbS5kZWxldGUobiksci5tZW1vcnkudGV4dHVyZXMtLX1mdW5jdGlvbiB4KGUpe2NvbnN0IG49ZS50YXJnZXQ7bi5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIix4KSwoZnVuY3Rpb24gaShlKXtjb25zdCBuPW8uZ2V0KGUpLGk9by5nZXQoZS50ZXh0dXJlKTtpZihlKXtpZih2b2lkIDAhPT1pLl9fd2ViZ2xUZXh0dXJlJiZ0LmRlbGV0ZVRleHR1cmUoaS5fX3dlYmdsVGV4dHVyZSksZS5kZXB0aFRleHR1cmUmJmUuZGVwdGhUZXh0dXJlLmRpc3Bvc2UoKSxlLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0KWZvcihsZXQgZT0wO2U8NjtlKyspdC5kZWxldGVGcmFtZWJ1ZmZlcihuLl9fd2ViZ2xGcmFtZWJ1ZmZlcltlXSksbi5fX3dlYmdsRGVwdGhidWZmZXImJnQuZGVsZXRlUmVuZGVyYnVmZmVyKG4uX193ZWJnbERlcHRoYnVmZmVyW2VdKTtlbHNlIHQuZGVsZXRlRnJhbWVidWZmZXIobi5fX3dlYmdsRnJhbWVidWZmZXIpLG4uX193ZWJnbERlcHRoYnVmZmVyJiZ0LmRlbGV0ZVJlbmRlcmJ1ZmZlcihuLl9fd2ViZ2xEZXB0aGJ1ZmZlciksbi5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXImJnQuZGVsZXRlRnJhbWVidWZmZXIobi5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXIpLG4uX193ZWJnbENvbG9yUmVuZGVyYnVmZmVyJiZ0LmRlbGV0ZVJlbmRlcmJ1ZmZlcihuLl9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlciksbi5fX3dlYmdsRGVwdGhSZW5kZXJidWZmZXImJnQuZGVsZXRlUmVuZGVyYnVmZmVyKG4uX193ZWJnbERlcHRoUmVuZGVyYnVmZmVyKTtvLnJlbW92ZShlLnRleHR1cmUpLG8ucmVtb3ZlKGUpfX0pKG4pLHIubWVtb3J5LnRleHR1cmVzLS19bGV0IE89MDtmdW5jdGlvbiBQKHQsZSl7Y29uc3QgaT1vLmdldCh0KTtpZih0LmlzVmlkZW9UZXh0dXJlJiYoZnVuY3Rpb24gYSh0KXtjb25zdCBlPXIucmVuZGVyLmZyYW1lO20uZ2V0KHQpIT09ZSYmKG0uc2V0KHQsZSksdC51cGRhdGUoKSl9KSh0KSx0LnZlcnNpb24+MCYmaS5fX3ZlcnNpb24hPT10LnZlcnNpb24pe2NvbnN0IG49dC5pbWFnZTtpZih2b2lkIDA9PT1uKWNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVGV4dHVyZSBtYXJrZWQgZm9yIHVwZGF0ZSBidXQgaW1hZ2UgaXMgdW5kZWZpbmVkIik7ZWxzZXtpZighMSE9PW4uY29tcGxldGUpcmV0dXJuIHZvaWQgQShpLHQsZSk7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIG1hcmtlZCBmb3IgdXBkYXRlIGJ1dCBpbWFnZSBpcyBpbmNvbXBsZXRlIil9fW4uYWN0aXZlVGV4dHVyZSgzMzk4NCtlKSxuLmJpbmRUZXh0dXJlKDM1NTMsaS5fX3dlYmdsVGV4dHVyZSl9ZnVuY3Rpb24gdyhlLGkpe2NvbnN0IHI9by5nZXQoZSk7ZS52ZXJzaW9uPjAmJnIuX192ZXJzaW9uIT09ZS52ZXJzaW9uPyhmdW5jdGlvbiBsKGUsbyxpKXtpZig2IT09by5pbWFnZS5sZW5ndGgpcmV0dXJuO0UoZSxvKSxuLmFjdGl2ZVRleHR1cmUoMzM5ODQraSksbi5iaW5kVGV4dHVyZSgzNDA2NyxlLl9fd2ViZ2xUZXh0dXJlKSx0LnBpeGVsU3RvcmVpKDM3NDQwLG8uZmxpcFkpLHQucGl4ZWxTdG9yZWkoMzc0NDEsby5wcmVtdWx0aXBseUFscGhhKSx0LnBpeGVsU3RvcmVpKDMzMTcsby51bnBhY2tBbGlnbm1lbnQpO2NvbnN0IHI9byYmKG8uaXNDb21wcmVzc2VkVGV4dHVyZXx8by5pbWFnZVswXS5pc0NvbXByZXNzZWRUZXh0dXJlKSxsPW8uaW1hZ2VbMF0mJm8uaW1hZ2VbMF0uaXNEYXRhVGV4dHVyZSxkPVtdO2ZvcihsZXQgdD0wO3Q8Njt0KyspZFt0XT1yfHxsP2w/by5pbWFnZVt0XS5pbWFnZTpvLmltYWdlW3RdOmgoby5pbWFnZVt0XSwhMSwhMCxjKTtjb25zdCBwPWRbMF0sbT1iKHApfHxzLHU9YS5jb252ZXJ0KG8uZm9ybWF0KSxmPWEuY29udmVydChvLnR5cGUpLGc9QyhvLmludGVybmFsRm9ybWF0LHUsZik7bGV0IE07aWYoRCgzNDA2NyxvLG0pLHIpe2ZvcihsZXQgdD0wO3Q8Njt0Kyspe009ZFt0XS5taXBtYXBzO2ZvcihsZXQgZT0wO2U8TS5sZW5ndGg7ZSsrKXtjb25zdCBpPU1bZV07by5mb3JtYXQhPT1QaXQmJm8uZm9ybWF0IT09T2l0P251bGwhPT11P24uY29tcHJlc3NlZFRleEltYWdlMkQoMzQwNjkrdCxlLGcsaS53aWR0aCxpLmhlaWdodCwwLGkuZGF0YSk6Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBBdHRlbXB0IHRvIGxvYWQgdW5zdXBwb3J0ZWQgY29tcHJlc3NlZCB0ZXh0dXJlIGZvcm1hdCBpbiAuc2V0VGV4dHVyZUN1YmUoKSIpOm4udGV4SW1hZ2UyRCgzNDA2OSt0LGUsZyxpLndpZHRoLGkuaGVpZ2h0LDAsdSxmLGkuZGF0YSl9fWUuX19tYXhNaXBMZXZlbD1NLmxlbmd0aC0xfWVsc2V7TT1vLm1pcG1hcHM7Zm9yKGxldCB0PTA7dDw2O3QrKylpZihsKXtuLnRleEltYWdlMkQoMzQwNjkrdCwwLGcsZFt0XS53aWR0aCxkW3RdLmhlaWdodCwwLHUsZixkW3RdLmRhdGEpO2ZvcihsZXQgZT0wO2U8TS5sZW5ndGg7ZSsrKXtjb25zdCBvPU1bZV0uaW1hZ2VbdF0uaW1hZ2U7bi50ZXhJbWFnZTJEKDM0MDY5K3QsZSsxLGcsby53aWR0aCxvLmhlaWdodCwwLHUsZixvLmRhdGEpfX1lbHNle24udGV4SW1hZ2UyRCgzNDA2OSt0LDAsZyx1LGYsZFt0XSk7Zm9yKGxldCBlPTA7ZTxNLmxlbmd0aDtlKyspbi50ZXhJbWFnZTJEKDM0MDY5K3QsZSsxLGcsdSxmLE1bZV0uaW1hZ2VbdF0pfWUuX19tYXhNaXBMZXZlbD1NLmxlbmd0aH15KG8sbSkmJl8oMzQwNjcsbyxwLndpZHRoLHAuaGVpZ2h0KSxlLl9fdmVyc2lvbj1vLnZlcnNpb24sby5vblVwZGF0ZSYmby5vblVwZGF0ZShvKX0pKHIsZSxpKToobi5hY3RpdmVUZXh0dXJlKDMzOTg0K2kpLG4uYmluZFRleHR1cmUoMzQwNjcsci5fX3dlYmdsVGV4dHVyZSkpfWNvbnN0IGs9e1t1aXRdOjEwNDk3LFtmaXRdOjMzMDcxLFtnaXRdOjMzNjQ4fSxTPXtbaGl0XTo5NzI4LDEwMDQ6OTk4NCwxMDA1Ojk5ODYsW2JpdF06OTcyOSwxMDA3Ojk5ODUsW3lpdF06OTk4N307ZnVuY3Rpb24gRChuLGEscil7cj8odC50ZXhQYXJhbWV0ZXJpKG4sMTAyNDIsa1thLndyYXBTXSksdC50ZXhQYXJhbWV0ZXJpKG4sMTAyNDMsa1thLndyYXBUXSksMzI4NzkhPT1uJiYzNTg2NiE9PW58fHQudGV4UGFyYW1ldGVyaShuLDMyODgyLGtbYS53cmFwUl0pLHQudGV4UGFyYW1ldGVyaShuLDEwMjQwLFNbYS5tYWdGaWx0ZXJdKSx0LnRleFBhcmFtZXRlcmkobiwxMDI0MSxTW2EubWluRmlsdGVyXSkpOih0LnRleFBhcmFtZXRlcmkobiwxMDI0MiwzMzA3MSksdC50ZXhQYXJhbWV0ZXJpKG4sMTAyNDMsMzMwNzEpLDMyODc5IT09biYmMzU4NjYhPT1ufHx0LnRleFBhcmFtZXRlcmkobiwzMjg4MiwzMzA3MSksYS53cmFwUz09PWZpdCYmYS53cmFwVD09PWZpdHx8Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIGlzIG5vdCBwb3dlciBvZiB0d28uIFRleHR1cmUud3JhcFMgYW5kIFRleHR1cmUud3JhcFQgc2hvdWxkIGJlIHNldCB0byBUSFJFRS5DbGFtcFRvRWRnZVdyYXBwaW5nLiIpLHQudGV4UGFyYW1ldGVyaShuLDEwMjQwLE0oYS5tYWdGaWx0ZXIpKSx0LnRleFBhcmFtZXRlcmkobiwxMDI0MSxNKGEubWluRmlsdGVyKSksYS5taW5GaWx0ZXIhPT1oaXQmJmEubWluRmlsdGVyIT09Yml0JiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgaXMgbm90IHBvd2VyIG9mIHR3by4gVGV4dHVyZS5taW5GaWx0ZXIgc2hvdWxkIGJlIHNldCB0byBUSFJFRS5OZWFyZXN0RmlsdGVyIG9yIFRIUkVFLkxpbmVhckZpbHRlci4iKSk7Y29uc3QgbD1lLmdldCgiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7aWYobCl7aWYoYS50eXBlPT09TWl0JiZudWxsPT09ZS5nZXQoIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpKXJldHVybjtpZihhLnR5cGU9PT12aXQmJm51bGw9PT0oc3x8ZS5nZXQoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIikpKXJldHVybjsoYS5hbmlzb3Ryb3B5PjF8fG8uZ2V0KGEpLl9fY3VycmVudEFuaXNvdHJvcHkpJiYodC50ZXhQYXJhbWV0ZXJmKG4sbC5URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCxNYXRoLm1pbihhLmFuaXNvdHJvcHksaS5nZXRNYXhBbmlzb3Ryb3B5KCkpKSxvLmdldChhKS5fX2N1cnJlbnRBbmlzb3Ryb3B5PWEuYW5pc290cm9weSl9fWZ1bmN0aW9uIEUoZSxuKXt2b2lkIDA9PT1lLl9fd2ViZ2xJbml0JiYoZS5fX3dlYmdsSW5pdD0hMCxuLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLHYpLGUuX193ZWJnbFRleHR1cmU9dC5jcmVhdGVUZXh0dXJlKCksci5tZW1vcnkudGV4dHVyZXMrKyl9ZnVuY3Rpb24gQShlLG8saSl7bGV0IHI9MzU1MztvLmlzRGF0YVRleHR1cmUyREFycmF5JiYocj0zNTg2Niksby5pc0RhdGFUZXh0dXJlM0QmJihyPTMyODc5KSxFKGUsbyksbi5hY3RpdmVUZXh0dXJlKDMzOTg0K2kpLG4uYmluZFRleHR1cmUocixlLl9fd2ViZ2xUZXh0dXJlKSx0LnBpeGVsU3RvcmVpKDM3NDQwLG8uZmxpcFkpLHQucGl4ZWxTdG9yZWkoMzc0NDEsby5wcmVtdWx0aXBseUFscGhhKSx0LnBpeGVsU3RvcmVpKDMzMTcsby51bnBhY2tBbGlnbm1lbnQpO2NvbnN0IGw9KGZ1bmN0aW9uIGModCl7cmV0dXJuIXMmJih0LndyYXBTIT09Zml0fHx0LndyYXBUIT09Zml0fHx0Lm1pbkZpbHRlciE9PWhpdCYmdC5taW5GaWx0ZXIhPT1iaXQpfSkobykmJiExPT09YihvLmltYWdlKSxwPWgoby5pbWFnZSxsLCExLGQpLG09YihwKXx8cyx1PWEuY29udmVydChvLmZvcm1hdCk7bGV0IGYsZz1hLmNvbnZlcnQoby50eXBlKSxNPUMoby5pbnRlcm5hbEZvcm1hdCx1LGcpO0QocixvLG0pO2NvbnN0IHY9by5taXBtYXBzO2lmKG8uaXNEZXB0aFRleHR1cmUpTT02NDAyLHM/TT1vLnR5cGU9PT1NaXQ/MzYwMTI6by50eXBlPT09Q2l0PzMzMTkwOm8udHlwZT09PXhpdD8zNTA1NjozMzE4OTpvLnR5cGU9PT1NaXQmJmNvbnNvbGUuZXJyb3IoIldlYkdMUmVuZGVyZXI6IEZsb2F0aW5nIHBvaW50IGRlcHRoIHRleHR1cmUgcmVxdWlyZXMgV2ViR0wyLiIpLG8uZm9ybWF0PT09d2l0JiY2NDAyPT09TSYmby50eXBlIT09X2l0JiZvLnR5cGUhPT1DaXQmJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFVzZSBVbnNpZ25lZFNob3J0VHlwZSBvciBVbnNpZ25lZEludFR5cGUgZm9yIERlcHRoRm9ybWF0IERlcHRoVGV4dHVyZS4iKSxvLnR5cGU9X2l0LGc9YS5jb252ZXJ0KG8udHlwZSkpLG8uZm9ybWF0PT09a2l0JiY2NDAyPT09TSYmKE09MzQwNDEsby50eXBlIT09eGl0JiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBVc2UgVW5zaWduZWRJbnQyNDhUeXBlIGZvciBEZXB0aFN0ZW5jaWxGb3JtYXQgRGVwdGhUZXh0dXJlLiIpLG8udHlwZT14aXQsZz1hLmNvbnZlcnQoby50eXBlKSkpLG4udGV4SW1hZ2UyRCgzNTUzLDAsTSxwLndpZHRoLHAuaGVpZ2h0LDAsdSxnLG51bGwpO2Vsc2UgaWYoby5pc0RhdGFUZXh0dXJlKWlmKHYubGVuZ3RoPjAmJm0pe2ZvcihsZXQgdD0wLGU9di5sZW5ndGg7dDxlO3QrKylmPXZbdF0sbi50ZXhJbWFnZTJEKDM1NTMsdCxNLGYud2lkdGgsZi5oZWlnaHQsMCx1LGcsZi5kYXRhKTtvLmdlbmVyYXRlTWlwbWFwcz0hMSxlLl9fbWF4TWlwTGV2ZWw9di5sZW5ndGgtMX1lbHNlIG4udGV4SW1hZ2UyRCgzNTUzLDAsTSxwLndpZHRoLHAuaGVpZ2h0LDAsdSxnLHAuZGF0YSksZS5fX21heE1pcExldmVsPTA7ZWxzZSBpZihvLmlzQ29tcHJlc3NlZFRleHR1cmUpe2ZvcihsZXQgdD0wLGU9di5sZW5ndGg7dDxlO3QrKylmPXZbdF0sby5mb3JtYXQhPT1QaXQmJm8uZm9ybWF0IT09T2l0P251bGwhPT11P24uY29tcHJlc3NlZFRleEltYWdlMkQoMzU1Myx0LE0sZi53aWR0aCxmLmhlaWdodCwwLGYuZGF0YSk6Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBBdHRlbXB0IHRvIGxvYWQgdW5zdXBwb3J0ZWQgY29tcHJlc3NlZCB0ZXh0dXJlIGZvcm1hdCBpbiAudXBsb2FkVGV4dHVyZSgpIik6bi50ZXhJbWFnZTJEKDM1NTMsdCxNLGYud2lkdGgsZi5oZWlnaHQsMCx1LGcsZi5kYXRhKTtlLl9fbWF4TWlwTGV2ZWw9di5sZW5ndGgtMX1lbHNlIGlmKG8uaXNEYXRhVGV4dHVyZTJEQXJyYXkpbi50ZXhJbWFnZTNEKDM1ODY2LDAsTSxwLndpZHRoLHAuaGVpZ2h0LHAuZGVwdGgsMCx1LGcscC5kYXRhKSxlLl9fbWF4TWlwTGV2ZWw9MDtlbHNlIGlmKG8uaXNEYXRhVGV4dHVyZTNEKW4udGV4SW1hZ2UzRCgzMjg3OSwwLE0scC53aWR0aCxwLmhlaWdodCxwLmRlcHRoLDAsdSxnLHAuZGF0YSksZS5fX21heE1pcExldmVsPTA7ZWxzZSBpZih2Lmxlbmd0aD4wJiZtKXtmb3IobGV0IHQ9MCxlPXYubGVuZ3RoO3Q8ZTt0KyspZj12W3RdLG4udGV4SW1hZ2UyRCgzNTUzLHQsTSx1LGcsZik7by5nZW5lcmF0ZU1pcG1hcHM9ITEsZS5fX21heE1pcExldmVsPXYubGVuZ3RoLTF9ZWxzZSBuLnRleEltYWdlMkQoMzU1MywwLE0sdSxnLHApLGUuX19tYXhNaXBMZXZlbD0wO3kobyxtKSYmXyhyLG8scC53aWR0aCxwLmhlaWdodCksZS5fX3ZlcnNpb249by52ZXJzaW9uLG8ub25VcGRhdGUmJm8ub25VcGRhdGUobyl9ZnVuY3Rpb24gUihlLGkscixzKXtjb25zdCBsPWEuY29udmVydChpLnRleHR1cmUuZm9ybWF0KSxjPWEuY29udmVydChpLnRleHR1cmUudHlwZSksZD1DKGkudGV4dHVyZS5pbnRlcm5hbEZvcm1hdCxsLGMpO24udGV4SW1hZ2UyRChzLDAsZCxpLndpZHRoLGkuaGVpZ2h0LDAsbCxjLG51bGwpLHQuYmluZEZyYW1lYnVmZmVyKDM2MTYwLGUpLHQuZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAscixzLG8uZ2V0KGkudGV4dHVyZSkuX193ZWJnbFRleHR1cmUsMCksdC5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCl9ZnVuY3Rpb24gVChlLG4sbyl7aWYodC5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLGUpLG4uZGVwdGhCdWZmZXImJiFuLnN0ZW5jaWxCdWZmZXIpe2xldCBpPTMzMTg5O2lmKG8pe2NvbnN0IGU9bi5kZXB0aFRleHR1cmU7ZSYmZS5pc0RlcHRoVGV4dHVyZSYmKGUudHlwZT09PU1pdD9pPTM2MDEyOmUudHlwZT09PUNpdCYmKGk9MzMxOTApKTtjb25zdCBvPU4obik7dC5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoMzYxNjEsbyxpLG4ud2lkdGgsbi5oZWlnaHQpfWVsc2UgdC5yZW5kZXJidWZmZXJTdG9yYWdlKDM2MTYxLGksbi53aWR0aCxuLmhlaWdodCk7dC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcigzNjE2MCwzNjA5NiwzNjE2MSxlKX1lbHNlIGlmKG4uZGVwdGhCdWZmZXImJm4uc3RlbmNpbEJ1ZmZlcil7aWYobyl7Y29uc3QgZT1OKG4pO3QucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKDM2MTYxLGUsMzUwNTYsbi53aWR0aCxuLmhlaWdodCl9ZWxzZSB0LnJlbmRlcmJ1ZmZlclN0b3JhZ2UoMzYxNjEsMzQwNDEsbi53aWR0aCxuLmhlaWdodCk7dC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcigzNjE2MCwzMzMwNiwzNjE2MSxlKX1lbHNle2NvbnN0IGU9YS5jb252ZXJ0KG4udGV4dHVyZS5mb3JtYXQpLGk9YS5jb252ZXJ0KG4udGV4dHVyZS50eXBlKSxyPUMobi50ZXh0dXJlLmludGVybmFsRm9ybWF0LGUsaSk7aWYobyl7Y29uc3QgZT1OKG4pO3QucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKDM2MTYxLGUscixuLndpZHRoLG4uaGVpZ2h0KX1lbHNlIHQucmVuZGVyYnVmZmVyU3RvcmFnZSgzNjE2MSxyLG4ud2lkdGgsbi5oZWlnaHQpfXQuYmluZFJlbmRlcmJ1ZmZlcigzNjE2MSxudWxsKX1mdW5jdGlvbiBOKHQpe3JldHVybiBzJiZ0LmlzV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldD9NYXRoLm1pbihwLHQuc2FtcGxlcyk6MH1sZXQgST0hMSx6PSExO3RoaXMuYWxsb2NhdGVUZXh0dXJlVW5pdD1mdW5jdGlvbiBIKCl7Y29uc3QgdD1PO3JldHVybiB0Pj1sJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMVGV4dHVyZXM6IFRyeWluZyB0byB1c2UgIit0KyIgdGV4dHVyZSB1bml0cyB3aGlsZSB0aGlzIEdQVSBzdXBwb3J0cyBvbmx5ICIrbCksTys9MSx0fSx0aGlzLnJlc2V0VGV4dHVyZVVuaXRzPWZ1bmN0aW9uIEYoKXtPPTB9LHRoaXMuc2V0VGV4dHVyZTJEPVAsdGhpcy5zZXRUZXh0dXJlMkRBcnJheT1mdW5jdGlvbiBMKHQsZSl7Y29uc3QgaT1vLmdldCh0KTt0LnZlcnNpb24+MCYmaS5fX3ZlcnNpb24hPT10LnZlcnNpb24/QShpLHQsZSk6KG4uYWN0aXZlVGV4dHVyZSgzMzk4NCtlKSxuLmJpbmRUZXh0dXJlKDM1ODY2LGkuX193ZWJnbFRleHR1cmUpKX0sdGhpcy5zZXRUZXh0dXJlM0Q9ZnVuY3Rpb24gQih0LGUpe2NvbnN0IGk9by5nZXQodCk7dC52ZXJzaW9uPjAmJmkuX192ZXJzaW9uIT09dC52ZXJzaW9uP0EoaSx0LGUpOihuLmFjdGl2ZVRleHR1cmUoMzM5ODQrZSksbi5iaW5kVGV4dHVyZSgzMjg3OSxpLl9fd2ViZ2xUZXh0dXJlKSl9LHRoaXMuc2V0VGV4dHVyZUN1YmU9dyx0aGlzLnNldHVwUmVuZGVyVGFyZ2V0PWZ1bmN0aW9uIFYoZSl7Y29uc3QgaT1vLmdldChlKSxsPW8uZ2V0KGUudGV4dHVyZSk7ZS5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIix4KSxsLl9fd2ViZ2xUZXh0dXJlPXQuY3JlYXRlVGV4dHVyZSgpLHIubWVtb3J5LnRleHR1cmVzKys7Y29uc3QgYz0hMD09PWUuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQsZD0hMD09PWUuaXNXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0LHA9YihlKXx8cztpZighc3x8ZS50ZXh0dXJlLmZvcm1hdCE9PU9pdHx8ZS50ZXh0dXJlLnR5cGUhPT1NaXQmJmUudGV4dHVyZS50eXBlIT09dml0fHwoZS50ZXh0dXJlLmZvcm1hdD1QaXQsY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBSZW5kZXJpbmcgdG8gdGV4dHVyZXMgd2l0aCBSR0IgZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQuIFVzaW5nIFJHQkEgZm9ybWF0IGluc3RlYWQuIikpLGMpe2kuX193ZWJnbEZyYW1lYnVmZmVyPVtdO2ZvcihsZXQgZT0wO2U8NjtlKyspaS5fX3dlYmdsRnJhbWVidWZmZXJbZV09dC5jcmVhdGVGcmFtZWJ1ZmZlcigpfWVsc2UgaWYoaS5fX3dlYmdsRnJhbWVidWZmZXI9dC5jcmVhdGVGcmFtZWJ1ZmZlcigpLGQpaWYocyl7aS5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXI9dC5jcmVhdGVGcmFtZWJ1ZmZlcigpLGkuX193ZWJnbENvbG9yUmVuZGVyYnVmZmVyPXQuY3JlYXRlUmVuZGVyYnVmZmVyKCksdC5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLGkuX193ZWJnbENvbG9yUmVuZGVyYnVmZmVyKTtjb25zdCBuPWEuY29udmVydChlLnRleHR1cmUuZm9ybWF0KSxvPWEuY29udmVydChlLnRleHR1cmUudHlwZSkscj1DKGUudGV4dHVyZS5pbnRlcm5hbEZvcm1hdCxuLG8pLHM9TihlKTt0LnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSgzNjE2MSxzLHIsZS53aWR0aCxlLmhlaWdodCksdC5iaW5kRnJhbWVidWZmZXIoMzYxNjAsaS5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXIpLHQuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoMzYxNjAsMzYwNjQsMzYxNjEsaS5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXIpLHQuYmluZFJlbmRlcmJ1ZmZlcigzNjE2MSxudWxsKSxlLmRlcHRoQnVmZmVyJiYoaS5fX3dlYmdsRGVwdGhSZW5kZXJidWZmZXI9dC5jcmVhdGVSZW5kZXJidWZmZXIoKSxUKGkuX193ZWJnbERlcHRoUmVuZGVyYnVmZmVyLGUsITApKSx0LmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxudWxsKX1lbHNlIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldCBjYW4gb25seSBiZSB1c2VkIHdpdGggV2ViR0wyLiIpO2lmKGMpe24uYmluZFRleHR1cmUoMzQwNjcsbC5fX3dlYmdsVGV4dHVyZSksRCgzNDA2NyxlLnRleHR1cmUscCk7Zm9yKGxldCB0PTA7dDw2O3QrKylSKGkuX193ZWJnbEZyYW1lYnVmZmVyW3RdLGUsMzYwNjQsMzQwNjkrdCk7eShlLnRleHR1cmUscCkmJl8oMzQwNjcsZS50ZXh0dXJlLGUud2lkdGgsZS5oZWlnaHQpLG4uYmluZFRleHR1cmUoMzQwNjcsbnVsbCl9ZWxzZSBuLmJpbmRUZXh0dXJlKDM1NTMsbC5fX3dlYmdsVGV4dHVyZSksRCgzNTUzLGUudGV4dHVyZSxwKSxSKGkuX193ZWJnbEZyYW1lYnVmZmVyLGUsMzYwNjQsMzU1MykseShlLnRleHR1cmUscCkmJl8oMzU1MyxlLnRleHR1cmUsZS53aWR0aCxlLmhlaWdodCksbi5iaW5kVGV4dHVyZSgzNTUzLG51bGwpO2UuZGVwdGhCdWZmZXImJihmdW5jdGlvbiBtKGUpe2NvbnN0IG49by5nZXQoZSksaT0hMD09PWUuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQ7aWYoZS5kZXB0aFRleHR1cmUpe2lmKGkpdGhyb3cgbmV3IEVycm9yKCJ0YXJnZXQuZGVwdGhUZXh0dXJlIG5vdCBzdXBwb3J0ZWQgaW4gQ3ViZSByZW5kZXIgdGFyZ2V0cyIpOyEoZnVuY3Rpb24gYShlLG4pe2lmKG4mJm4uaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQpdGhyb3cgbmV3IEVycm9yKCJEZXB0aCBUZXh0dXJlIHdpdGggY3ViZSByZW5kZXIgdGFyZ2V0cyBpcyBub3Qgc3VwcG9ydGVkIik7aWYodC5iaW5kRnJhbWVidWZmZXIoMzYxNjAsZSksIW4uZGVwdGhUZXh0dXJlfHwhbi5kZXB0aFRleHR1cmUuaXNEZXB0aFRleHR1cmUpdGhyb3cgbmV3IEVycm9yKCJyZW5kZXJUYXJnZXQuZGVwdGhUZXh0dXJlIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgVEhSRUUuRGVwdGhUZXh0dXJlIik7by5nZXQobi5kZXB0aFRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlJiZuLmRlcHRoVGV4dHVyZS5pbWFnZS53aWR0aD09PW4ud2lkdGgmJm4uZGVwdGhUZXh0dXJlLmltYWdlLmhlaWdodD09PW4uaGVpZ2h0fHwobi5kZXB0aFRleHR1cmUuaW1hZ2Uud2lkdGg9bi53aWR0aCxuLmRlcHRoVGV4dHVyZS5pbWFnZS5oZWlnaHQ9bi5oZWlnaHQsbi5kZXB0aFRleHR1cmUubmVlZHNVcGRhdGU9ITApLFAobi5kZXB0aFRleHR1cmUsMCk7Y29uc3QgaT1vLmdldChuLmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmU7aWYobi5kZXB0aFRleHR1cmUuZm9ybWF0PT09d2l0KXQuZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAsMzYwOTYsMzU1MyxpLDApO2Vsc2V7aWYobi5kZXB0aFRleHR1cmUuZm9ybWF0IT09a2l0KXRocm93IG5ldyBFcnJvcigiVW5rbm93biBkZXB0aFRleHR1cmUgZm9ybWF0Iik7dC5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzMzMwNiwzNTUzLGksMCl9fSkobi5fX3dlYmdsRnJhbWVidWZmZXIsZSl9ZWxzZSBpZihpKXtuLl9fd2ViZ2xEZXB0aGJ1ZmZlcj1bXTtmb3IobGV0IG89MDtvPDY7bysrKXQuYmluZEZyYW1lYnVmZmVyKDM2MTYwLG4uX193ZWJnbEZyYW1lYnVmZmVyW29dKSxuLl9fd2ViZ2xEZXB0aGJ1ZmZlcltvXT10LmNyZWF0ZVJlbmRlcmJ1ZmZlcigpLFQobi5fX3dlYmdsRGVwdGhidWZmZXJbb10sZSwhMSl9ZWxzZSB0LmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxuLl9fd2ViZ2xGcmFtZWJ1ZmZlciksbi5fX3dlYmdsRGVwdGhidWZmZXI9dC5jcmVhdGVSZW5kZXJidWZmZXIoKSxUKG4uX193ZWJnbERlcHRoYnVmZmVyLGUsITEpO3QuYmluZEZyYW1lYnVmZmVyKDM2MTYwLG51bGwpfSkoZSl9LHRoaXMudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwPWZ1bmN0aW9uIGoodCl7Y29uc3QgZT10LnRleHR1cmU7aWYoeShlLGIodCl8fHMpKXtjb25zdCBpPXQuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQ/MzQwNjc6MzU1MyxhPW8uZ2V0KGUpLl9fd2ViZ2xUZXh0dXJlO24uYmluZFRleHR1cmUoaSxhKSxfKGksZSx0LndpZHRoLHQuaGVpZ2h0KSxuLmJpbmRUZXh0dXJlKGksbnVsbCl9fSx0aGlzLnVwZGF0ZU11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0PWZ1bmN0aW9uIFUoZSl7aWYoZS5pc1dlYkdMTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQpaWYocyl7Y29uc3Qgbj1vLmdldChlKTt0LmJpbmRGcmFtZWJ1ZmZlcigzNjAwOCxuLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlciksdC5iaW5kRnJhbWVidWZmZXIoMzYwMDksbi5fX3dlYmdsRnJhbWVidWZmZXIpO2NvbnN0IGk9ZS53aWR0aCxhPWUuaGVpZ2h0O2xldCByPTE2Mzg0O2UuZGVwdGhCdWZmZXImJihyfD0yNTYpLGUuc3RlbmNpbEJ1ZmZlciYmKHJ8PTEwMjQpLHQuYmxpdEZyYW1lYnVmZmVyKDAsMCxpLGEsMCwwLGksYSxyLDk3MjgpLHQuYmluZEZyYW1lYnVmZmVyKDM2MTYwLG4uX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyKX1lbHNlIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldCBjYW4gb25seSBiZSB1c2VkIHdpdGggV2ViR0wyLiIpfSx0aGlzLnNhZmVTZXRUZXh0dXJlMkQ9ZnVuY3Rpb24gVyh0LGUpe3QmJnQuaXNXZWJHTFJlbmRlclRhcmdldCYmKCExPT09SSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xUZXh0dXJlcy5zYWZlU2V0VGV4dHVyZTJEOiBkb24ndCB1c2UgcmVuZGVyIHRhcmdldHMgYXMgdGV4dHVyZXMuIFVzZSB0aGVpciAudGV4dHVyZSBwcm9wZXJ0eSBpbnN0ZWFkLiIpLEk9ITApLHQ9dC50ZXh0dXJlKSxQKHQsZSl9LHRoaXMuc2FmZVNldFRleHR1cmVDdWJlPWZ1bmN0aW9uIEcodCxlKXt0JiZ0LmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0JiYoITE9PT16JiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFRleHR1cmVzLnNhZmVTZXRUZXh0dXJlQ3ViZTogZG9uJ3QgdXNlIGN1YmUgcmVuZGVyIHRhcmdldHMgYXMgdGV4dHVyZXMuIFVzZSB0aGVpciAudGV4dHVyZSBwcm9wZXJ0eSBpbnN0ZWFkLiIpLHo9ITApLHQ9dC50ZXh0dXJlKSx3KHQsZSl9fWZ1bmN0aW9uIERjdCh0LGUsbil7Y29uc3Qgbz1uLmlzV2ViR0wyO3JldHVybntjb252ZXJ0OmZ1bmN0aW9uIGkodCl7bGV0IG47aWYoMTAwOT09PXQpcmV0dXJuIDUxMjE7aWYoMTAxNz09PXQpcmV0dXJuIDMyODE5O2lmKDEwMTg9PT10KXJldHVybiAzMjgyMDtpZigxMDE5PT09dClyZXR1cm4gMzM2MzU7aWYoMTAxMD09PXQpcmV0dXJuIDUxMjA7aWYoMTAxMT09PXQpcmV0dXJuIDUxMjI7aWYodD09PV9pdClyZXR1cm4gNTEyMztpZigxMDEzPT09dClyZXR1cm4gNTEyNDtpZih0PT09Q2l0KXJldHVybiA1MTI1O2lmKHQ9PT1NaXQpcmV0dXJuIDUxMjY7aWYodD09PXZpdClyZXR1cm4gbz81MTMxOihuPWUuZ2V0KCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IiksbnVsbCE9PW4/bi5IQUxGX0ZMT0FUX09FUzpudWxsKTtpZigxMDIxPT09dClyZXR1cm4gNjQwNjtpZih0PT09T2l0KXJldHVybiA2NDA3O2lmKHQ9PT1QaXQpcmV0dXJuIDY0MDg7aWYoMTAyND09PXQpcmV0dXJuIDY0MDk7aWYoMTAyNT09PXQpcmV0dXJuIDY0MTA7aWYodD09PXdpdClyZXR1cm4gNjQwMjtpZih0PT09a2l0KXJldHVybiAzNDA0MTtpZigxMDI4PT09dClyZXR1cm4gNjQwMztpZigxMDI5PT09dClyZXR1cm4gMzYyNDQ7aWYoMTAzMD09PXQpcmV0dXJuIDMzMzE5O2lmKDEwMzE9PT10KXJldHVybiAzMzMyMDtpZigxMDMyPT09dClyZXR1cm4gMzYyNDg7aWYoMTAzMz09PXQpcmV0dXJuIDM2MjQ5O2lmKDMzNzc2PT09dHx8MzM3Nzc9PT10fHwzMzc3OD09PXR8fDMzNzc5PT09dCl7aWYobj1lLmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKSxudWxsPT09bilyZXR1cm4gbnVsbDtpZigzMzc3Nj09PXQpcmV0dXJuIG4uQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDtpZigzMzc3Nz09PXQpcmV0dXJuIG4uQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ7aWYoMzM3Nzg9PT10KXJldHVybiBuLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhUO2lmKDMzNzc5PT09dClyZXR1cm4gbi5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVH1pZigzNTg0MD09PXR8fDM1ODQxPT09dHx8MzU4NDI9PT10fHwzNTg0Mz09PXQpe2lmKG49ZS5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyIpLG51bGw9PT1uKXJldHVybiBudWxsO2lmKDM1ODQwPT09dClyZXR1cm4gbi5DT01QUkVTU0VEX1JHQl9QVlJUQ180QlBQVjFfSU1HO2lmKDM1ODQxPT09dClyZXR1cm4gbi5DT01QUkVTU0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1HO2lmKDM1ODQyPT09dClyZXR1cm4gbi5DT01QUkVTU0VEX1JHQkFfUFZSVENfNEJQUFYxX0lNRztpZigzNTg0Mz09PXQpcmV0dXJuIG4uQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzJCUFBWMV9JTUd9aWYoMzYxOTY9PT10KXJldHVybiBuPWUuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfZXRjMSIpLG51bGwhPT1uP24uQ09NUFJFU1NFRF9SR0JfRVRDMV9XRUJHTDpudWxsO2lmKCgzNzQ5Mj09PXR8fDM3NDk2PT09dCkmJihuPWUuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfZXRjIiksbnVsbCE9PW4pKXtpZigzNzQ5Mj09PXQpcmV0dXJuIG4uQ09NUFJFU1NFRF9SR0I4X0VUQzI7aWYoMzc0OTY9PT10KXJldHVybiBuLkNPTVBSRVNTRURfUkdCQThfRVRDMl9FQUN9cmV0dXJuIDM3ODA4PT09dHx8Mzc4MDk9PT10fHwzNzgxMD09PXR8fDM3ODExPT09dHx8Mzc4MTI9PT10fHwzNzgxMz09PXR8fDM3ODE0PT09dHx8Mzc4MTU9PT10fHwzNzgxNj09PXR8fDM3ODE3PT09dHx8Mzc4MTg9PT10fHwzNzgxOT09PXR8fDM3ODIwPT09dHx8Mzc4MjE9PT10fHwzNzg0MD09PXR8fDM3ODQxPT09dHx8Mzc4NDI9PT10fHwzNzg0Mz09PXR8fDM3ODQ0PT09dHx8Mzc4NDU9PT10fHwzNzg0Nj09PXR8fDM3ODQ3PT09dHx8Mzc4NDg9PT10fHwzNzg0OT09PXR8fDM3ODUwPT09dHx8Mzc4NTE9PT10fHwzNzg1Mj09PXR8fDM3ODUzPT09dD8obj1lLmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2FzdGMiKSxudWxsIT09bj90Om51bGwpOjM2NDkyPT09dD8obj1lLmdldCgiRVhUX3RleHR1cmVfY29tcHJlc3Npb25fYnB0YyIpLG51bGwhPT1uP3Q6bnVsbCk6dD09PXhpdD9vPzM0MDQyOihuPWUuZ2V0KCJXRUJHTF9kZXB0aF90ZXh0dXJlIiksbnVsbCE9PW4/bi5VTlNJR05FRF9JTlRfMjRfOF9XRUJHTDpudWxsKTp2b2lkIDB9fX1mdW5jdGlvbiBFY3QodD1bXSl7Q3N0LmNhbGwodGhpcyksdGhpcy5jYW1lcmFzPXR9ZnVuY3Rpb24gQWN0KCl7UWF0LmNhbGwodGhpcyksdGhpcy50eXBlPSJHcm91cCJ9ZnVuY3Rpb24gUmN0KCl7dGhpcy5fdGFyZ2V0UmF5PW51bGwsdGhpcy5fZ3JpcD1udWxsLHRoaXMuX2hhbmQ9bnVsbH1mdW5jdGlvbiBUY3QodCxlKXtjb25zdCBuPXRoaXM7bGV0IG89bnVsbCxpPTEsYT1udWxsLHI9ImxvY2FsLWZsb29yIixzPW51bGw7Y29uc3QgbD1bXSxjPW5ldyBNYXAsZD1uZXcgQ3N0O2QubGF5ZXJzLmVuYWJsZSgxKSxkLnZpZXdwb3J0PW5ldyBLaXQ7Y29uc3QgcD1uZXcgQ3N0O3AubGF5ZXJzLmVuYWJsZSgyKSxwLnZpZXdwb3J0PW5ldyBLaXQ7Y29uc3QgbT1bZCxwXSx1PW5ldyBFY3Q7dS5sYXllcnMuZW5hYmxlKDEpLHUubGF5ZXJzLmVuYWJsZSgyKTtsZXQgZj1udWxsLGc9bnVsbDtmdW5jdGlvbiBoKHQpe2NvbnN0IGU9Yy5nZXQodC5pbnB1dFNvdXJjZSk7ZSYmZS5kaXNwYXRjaEV2ZW50KHt0eXBlOnQudHlwZSxkYXRhOnQuaW5wdXRTb3VyY2V9KX1mdW5jdGlvbiBiKCl7Yy5mb3JFYWNoKChmdW5jdGlvbih0LGUpe3QuZGlzY29ubmVjdChlKX0pKSxjLmNsZWFyKCksZj1udWxsLGc9bnVsbCx0LnNldEZyYW1lYnVmZmVyKG51bGwpLHQuc2V0UmVuZGVyVGFyZ2V0KHQuZ2V0UmVuZGVyVGFyZ2V0KCkpLHguc3RvcCgpLG4uaXNQcmVzZW50aW5nPSExLG4uZGlzcGF0Y2hFdmVudCh7dHlwZToic2Vzc2lvbmVuZCJ9KX1mdW5jdGlvbiB5KHQpe2NvbnN0IGU9by5pbnB1dFNvdXJjZXM7Zm9yKGxldCB0PTA7dDxsLmxlbmd0aDt0KyspYy5zZXQoZVt0XSxsW3RdKTtmb3IobGV0IGU9MDtlPHQucmVtb3ZlZC5sZW5ndGg7ZSsrKXtjb25zdCBuPXQucmVtb3ZlZFtlXSxvPWMuZ2V0KG4pO28mJihvLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc2Nvbm5lY3RlZCIsZGF0YTpufSksYy5kZWxldGUobikpfWZvcihsZXQgZT0wO2U8dC5hZGRlZC5sZW5ndGg7ZSsrKXtjb25zdCBuPXQuYWRkZWRbZV0sbz1jLmdldChuKTtvJiZvLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImNvbm5lY3RlZCIsZGF0YTpufSl9fXRoaXMuZW5hYmxlZD0hMSx0aGlzLmlzUHJlc2VudGluZz0hMSx0aGlzLmdldENvbnRyb2xsZXI9ZnVuY3Rpb24odCl7bGV0IGU9bFt0XTtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9bmV3IFJjdCxsW3RdPWUpLGUuZ2V0VGFyZ2V0UmF5U3BhY2UoKX0sdGhpcy5nZXRDb250cm9sbGVyR3JpcD1mdW5jdGlvbih0KXtsZXQgZT1sW3RdO3JldHVybiB2b2lkIDA9PT1lJiYoZT1uZXcgUmN0LGxbdF09ZSksZS5nZXRHcmlwU3BhY2UoKX0sdGhpcy5nZXRIYW5kPWZ1bmN0aW9uKHQpe2xldCBlPWxbdF07cmV0dXJuIHZvaWQgMD09PWUmJihlPW5ldyBSY3QsbFt0XT1lKSxlLmdldEhhbmRTcGFjZSgpfSx0aGlzLnNldEZyYW1lYnVmZmVyU2NhbGVGYWN0b3I9ZnVuY3Rpb24odCl7aT10LCEwPT09bi5pc1ByZXNlbnRpbmcmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViWFJNYW5hZ2VyOiBDYW5ub3QgY2hhbmdlIGZyYW1lYnVmZmVyIHNjYWxlIHdoaWxlIHByZXNlbnRpbmcuIil9LHRoaXMuc2V0UmVmZXJlbmNlU3BhY2VUeXBlPWZ1bmN0aW9uKHQpe3I9dCwhMD09PW4uaXNQcmVzZW50aW5nJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYlhSTWFuYWdlcjogQ2Fubm90IGNoYW5nZSByZWZlcmVuY2Ugc3BhY2UgdHlwZSB3aGlsZSBwcmVzZW50aW5nLiIpfSx0aGlzLmdldFJlZmVyZW5jZVNwYWNlPWZ1bmN0aW9uKCl7cmV0dXJuIGF9LHRoaXMuZ2V0U2Vzc2lvbj1mdW5jdGlvbigpe3JldHVybiBvfSx0aGlzLnNldFNlc3Npb249YXN5bmMgZnVuY3Rpb24odCl7aWYobz10LG51bGwhPT1vKXtvLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdCIsaCksby5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3RzdGFydCIsaCksby5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3RlbmQiLGgpLG8uYWRkRXZlbnRMaXN0ZW5lcigic3F1ZWV6ZSIsaCksby5hZGRFdmVudExpc3RlbmVyKCJzcXVlZXplc3RhcnQiLGgpLG8uYWRkRXZlbnRMaXN0ZW5lcigic3F1ZWV6ZWVuZCIsaCksby5hZGRFdmVudExpc3RlbmVyKCJlbmQiLGIpLG8uYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXRzb3VyY2VzY2hhbmdlIix5KTtjb25zdCB0PWUuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKTshMCE9PXQueHJDb21wYXRpYmxlJiZhd2FpdCBlLm1ha2VYUkNvbXBhdGlibGUoKTtjb25zdCBzPW5ldyBYUldlYkdMTGF5ZXIobyxlLHthbnRpYWxpYXM6dC5hbnRpYWxpYXMsYWxwaGE6dC5hbHBoYSxkZXB0aDp0LmRlcHRoLHN0ZW5jaWw6dC5zdGVuY2lsLGZyYW1lYnVmZmVyU2NhbGVGYWN0b3I6aX0pO28udXBkYXRlUmVuZGVyU3RhdGUoe2Jhc2VMYXllcjpzfSksYT1hd2FpdCBvLnJlcXVlc3RSZWZlcmVuY2VTcGFjZShyKSx4LnNldENvbnRleHQobykseC5zdGFydCgpLG4uaXNQcmVzZW50aW5nPSEwLG4uZGlzcGF0Y2hFdmVudCh7dHlwZToic2Vzc2lvbnN0YXJ0In0pfX07Y29uc3QgXz1uZXcgJGl0LEM9bmV3ICRpdDtmdW5jdGlvbiBNKHQsZSl7bnVsbD09PWU/dC5tYXRyaXhXb3JsZC5jb3B5KHQubWF0cml4KTp0Lm1hdHJpeFdvcmxkLm11bHRpcGx5TWF0cmljZXMoZS5tYXRyaXhXb3JsZCx0Lm1hdHJpeCksdC5tYXRyaXhXb3JsZEludmVyc2UuY29weSh0Lm1hdHJpeFdvcmxkKS5pbnZlcnQoKX10aGlzLmdldENhbWVyYT1mdW5jdGlvbih0KXt1Lm5lYXI9cC5uZWFyPWQubmVhcj10Lm5lYXIsdS5mYXI9cC5mYXI9ZC5mYXI9dC5mYXIsZj09PXUubmVhciYmZz09PXUuZmFyfHwoby51cGRhdGVSZW5kZXJTdGF0ZSh7ZGVwdGhOZWFyOnUubmVhcixkZXB0aEZhcjp1LmZhcn0pLGY9dS5uZWFyLGc9dS5mYXIpO2NvbnN0IGU9dC5wYXJlbnQsbj11LmNhbWVyYXM7TSh1LGUpO2ZvcihsZXQgdD0wO3Q8bi5sZW5ndGg7dCsrKU0oblt0XSxlKTt0Lm1hdHJpeFdvcmxkLmNvcHkodS5tYXRyaXhXb3JsZCksdC5tYXRyaXguY29weSh1Lm1hdHJpeCksdC5tYXRyaXguZGVjb21wb3NlKHQucG9zaXRpb24sdC5xdWF0ZXJuaW9uLHQuc2NhbGUpO2NvbnN0IGk9dC5jaGlsZHJlbjtmb3IobGV0IHQ9MCxlPWkubGVuZ3RoO3Q8ZTt0KyspaVt0XS51cGRhdGVNYXRyaXhXb3JsZCghMCk7cmV0dXJuIDI9PT1uLmxlbmd0aD8oZnVuY3Rpb24gYSh0LGUsbil7Xy5zZXRGcm9tTWF0cml4UG9zaXRpb24oZS5tYXRyaXhXb3JsZCksQy5zZXRGcm9tTWF0cml4UG9zaXRpb24obi5tYXRyaXhXb3JsZCk7Y29uc3Qgbz1fLmRpc3RhbmNlVG8oQyksaT1lLnByb2plY3Rpb25NYXRyaXguZWxlbWVudHMsYT1uLnByb2plY3Rpb25NYXRyaXguZWxlbWVudHMscj1pWzE0XS8oaVsxMF0tMSkscz1pWzE0XS8oaVsxMF0rMSksbD0oaVs5XSsxKS9pWzVdLGM9KGlbOV0tMSkvaVs1XSxkPShpWzhdLTEpL2lbMF0scD0oYVs4XSsxKS9hWzBdLG09cipkLHU9cipwLGY9by8oLWQrcCksZz1mKi1kO2UubWF0cml4V29ybGQuZGVjb21wb3NlKHQucG9zaXRpb24sdC5xdWF0ZXJuaW9uLHQuc2NhbGUpLHQudHJhbnNsYXRlWChnKSx0LnRyYW5zbGF0ZVooZiksdC5tYXRyaXhXb3JsZC5jb21wb3NlKHQucG9zaXRpb24sdC5xdWF0ZXJuaW9uLHQuc2NhbGUpLHQubWF0cml4V29ybGRJbnZlcnNlLmNvcHkodC5tYXRyaXhXb3JsZCkuaW52ZXJ0KCk7Y29uc3QgaD1yK2YsYj1zK2Y7dC5wcm9qZWN0aW9uTWF0cml4Lm1ha2VQZXJzcGVjdGl2ZShtLWcsdSsoby1nKSxsKnMvYipoLGMqcy9iKmgsaCxiKX0pKHUsZCxwKTp1LnByb2plY3Rpb25NYXRyaXguY29weShkLnByb2plY3Rpb25NYXRyaXgpLHV9O2xldCB2PW51bGw7Y29uc3QgeD1uZXcgRHN0O3guc2V0QW5pbWF0aW9uTG9vcCgoZnVuY3Rpb24gTyhlLG4pe2lmKHM9bi5nZXRWaWV3ZXJQb3NlKGEpLG51bGwhPT1zKXtjb25zdCBlPXMudmlld3Msbj1vLnJlbmRlclN0YXRlLmJhc2VMYXllcjt0LnNldEZyYW1lYnVmZmVyKG4uZnJhbWVidWZmZXIpO2xldCBpPSExO2UubGVuZ3RoIT09dS5jYW1lcmFzLmxlbmd0aCYmKHUuY2FtZXJhcy5sZW5ndGg9MCxpPSEwKTtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyl7Y29uc3Qgbz1lW3RdLGE9bi5nZXRWaWV3cG9ydChvKSxyPW1bdF07ci5tYXRyaXguZnJvbUFycmF5KG8udHJhbnNmb3JtLm1hdHJpeCksci5wcm9qZWN0aW9uTWF0cml4LmZyb21BcnJheShvLnByb2plY3Rpb25NYXRyaXgpLHIudmlld3BvcnQuc2V0KGEueCxhLnksYS53aWR0aCxhLmhlaWdodCksMD09PXQmJnUubWF0cml4LmNvcHkoci5tYXRyaXgpLCEwPT09aSYmdS5jYW1lcmFzLnB1c2gocil9fWNvbnN0IGk9by5pbnB1dFNvdXJjZXM7Zm9yKGxldCB0PTA7dDxsLmxlbmd0aDt0KyspbFt0XS51cGRhdGUoaVt0XSxuLGEpO3YmJnYoZSxuKX0pKSx0aGlzLnNldEFuaW1hdGlvbkxvb3A9ZnVuY3Rpb24odCl7dj10fSx0aGlzLmRpc3Bvc2U9ZnVuY3Rpb24oKXt9fWZ1bmN0aW9uIE5jdCh0KXtmdW5jdGlvbiBlKGUsbil7ZS5vcGFjaXR5LnZhbHVlPW4ub3BhY2l0eSxuLmNvbG9yJiZlLmRpZmZ1c2UudmFsdWUuY29weShuLmNvbG9yKSxuLmVtaXNzaXZlJiZlLmVtaXNzaXZlLnZhbHVlLmNvcHkobi5lbWlzc2l2ZSkubXVsdGlwbHlTY2FsYXIobi5lbWlzc2l2ZUludGVuc2l0eSksbi5tYXAmJihlLm1hcC52YWx1ZT1uLm1hcCksbi5hbHBoYU1hcCYmKGUuYWxwaGFNYXAudmFsdWU9bi5hbHBoYU1hcCksbi5zcGVjdWxhck1hcCYmKGUuc3BlY3VsYXJNYXAudmFsdWU9bi5zcGVjdWxhck1hcCk7Y29uc3Qgbz10LmdldChuKS5lbnZNYXA7aWYobyl7ZS5lbnZNYXAudmFsdWU9byxlLmZsaXBFbnZNYXAudmFsdWU9by5pc0N1YmVUZXh0dXJlJiZvLl9uZWVkc0ZsaXBFbnZNYXA/LTE6MSxlLnJlZmxlY3Rpdml0eS52YWx1ZT1uLnJlZmxlY3Rpdml0eSxlLnJlZnJhY3Rpb25SYXRpby52YWx1ZT1uLnJlZnJhY3Rpb25SYXRpbztjb25zdCBpPXQuZ2V0KG8pLl9fbWF4TWlwTGV2ZWw7dm9pZCAwIT09aSYmKGUubWF4TWlwTGV2ZWwudmFsdWU9aSl9bGV0IGksYTtuLmxpZ2h0TWFwJiYoZS5saWdodE1hcC52YWx1ZT1uLmxpZ2h0TWFwLGUubGlnaHRNYXBJbnRlbnNpdHkudmFsdWU9bi5saWdodE1hcEludGVuc2l0eSksbi5hb01hcCYmKGUuYW9NYXAudmFsdWU9bi5hb01hcCxlLmFvTWFwSW50ZW5zaXR5LnZhbHVlPW4uYW9NYXBJbnRlbnNpdHkpLG4ubWFwP2k9bi5tYXA6bi5zcGVjdWxhck1hcD9pPW4uc3BlY3VsYXJNYXA6bi5kaXNwbGFjZW1lbnRNYXA/aT1uLmRpc3BsYWNlbWVudE1hcDpuLm5vcm1hbE1hcD9pPW4ubm9ybWFsTWFwOm4uYnVtcE1hcD9pPW4uYnVtcE1hcDpuLnJvdWdobmVzc01hcD9pPW4ucm91Z2huZXNzTWFwOm4ubWV0YWxuZXNzTWFwP2k9bi5tZXRhbG5lc3NNYXA6bi5hbHBoYU1hcD9pPW4uYWxwaGFNYXA6bi5lbWlzc2l2ZU1hcD9pPW4uZW1pc3NpdmVNYXA6bi5jbGVhcmNvYXRNYXA/aT1uLmNsZWFyY29hdE1hcDpuLmNsZWFyY29hdE5vcm1hbE1hcD9pPW4uY2xlYXJjb2F0Tm9ybWFsTWFwOm4uY2xlYXJjb2F0Um91Z2huZXNzTWFwJiYoaT1uLmNsZWFyY29hdFJvdWdobmVzc01hcCksdm9pZCAwIT09aSYmKGkuaXNXZWJHTFJlbmRlclRhcmdldCYmKGk9aS50ZXh0dXJlKSwhMD09PWkubWF0cml4QXV0b1VwZGF0ZSYmaS51cGRhdGVNYXRyaXgoKSxlLnV2VHJhbnNmb3JtLnZhbHVlLmNvcHkoaS5tYXRyaXgpKSxuLmFvTWFwP2E9bi5hb01hcDpuLmxpZ2h0TWFwJiYoYT1uLmxpZ2h0TWFwKSx2b2lkIDAhPT1hJiYoYS5pc1dlYkdMUmVuZGVyVGFyZ2V0JiYoYT1hLnRleHR1cmUpLCEwPT09YS5tYXRyaXhBdXRvVXBkYXRlJiZhLnVwZGF0ZU1hdHJpeCgpLGUudXYyVHJhbnNmb3JtLnZhbHVlLmNvcHkoYS5tYXRyaXgpKX1mdW5jdGlvbiBuKGUsbil7ZS5yb3VnaG5lc3MudmFsdWU9bi5yb3VnaG5lc3MsZS5tZXRhbG5lc3MudmFsdWU9bi5tZXRhbG5lc3Msbi5yb3VnaG5lc3NNYXAmJihlLnJvdWdobmVzc01hcC52YWx1ZT1uLnJvdWdobmVzc01hcCksbi5tZXRhbG5lc3NNYXAmJihlLm1ldGFsbmVzc01hcC52YWx1ZT1uLm1ldGFsbmVzc01hcCksbi5lbWlzc2l2ZU1hcCYmKGUuZW1pc3NpdmVNYXAudmFsdWU9bi5lbWlzc2l2ZU1hcCksbi5idW1wTWFwJiYoZS5idW1wTWFwLnZhbHVlPW4uYnVtcE1hcCxlLmJ1bXBTY2FsZS52YWx1ZT1uLmJ1bXBTY2FsZSwxPT09bi5zaWRlJiYoZS5idW1wU2NhbGUudmFsdWUqPS0xKSksbi5ub3JtYWxNYXAmJihlLm5vcm1hbE1hcC52YWx1ZT1uLm5vcm1hbE1hcCxlLm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkobi5ub3JtYWxTY2FsZSksMT09PW4uc2lkZSYmZS5ub3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKSksbi5kaXNwbGFjZW1lbnRNYXAmJihlLmRpc3BsYWNlbWVudE1hcC52YWx1ZT1uLmRpc3BsYWNlbWVudE1hcCxlLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPW4uZGlzcGxhY2VtZW50U2NhbGUsZS5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPW4uZGlzcGxhY2VtZW50QmlhcyksdC5nZXQobikuZW52TWFwJiYoZS5lbnZNYXBJbnRlbnNpdHkudmFsdWU9bi5lbnZNYXBJbnRlbnNpdHkpfXJldHVybntyZWZyZXNoRm9nVW5pZm9ybXM6ZnVuY3Rpb24gbyh0LGUpe3QuZm9nQ29sb3IudmFsdWUuY29weShlLmNvbG9yKSxlLmlzRm9nPyh0LmZvZ05lYXIudmFsdWU9ZS5uZWFyLHQuZm9nRmFyLnZhbHVlPWUuZmFyKTplLmlzRm9nRXhwMiYmKHQuZm9nRGVuc2l0eS52YWx1ZT1lLmRlbnNpdHkpfSxyZWZyZXNoTWF0ZXJpYWxVbmlmb3JtczpmdW5jdGlvbiBpKHQsbyxhLHIpe28uaXNNZXNoQmFzaWNNYXRlcmlhbD9lKHQsbyk6by5pc01lc2hMYW1iZXJ0TWF0ZXJpYWw/KGUodCxvKSwoZnVuY3Rpb24gcyh0LGUpe2UuZW1pc3NpdmVNYXAmJih0LmVtaXNzaXZlTWFwLnZhbHVlPWUuZW1pc3NpdmVNYXApfSkodCxvKSk6by5pc01lc2hUb29uTWF0ZXJpYWw/KGUodCxvKSwoZnVuY3Rpb24gbCh0LGUpe2UuZ3JhZGllbnRNYXAmJih0LmdyYWRpZW50TWFwLnZhbHVlPWUuZ3JhZGllbnRNYXApLGUuZW1pc3NpdmVNYXAmJih0LmVtaXNzaXZlTWFwLnZhbHVlPWUuZW1pc3NpdmVNYXApLGUuYnVtcE1hcCYmKHQuYnVtcE1hcC52YWx1ZT1lLmJ1bXBNYXAsdC5idW1wU2NhbGUudmFsdWU9ZS5idW1wU2NhbGUsMT09PWUuc2lkZSYmKHQuYnVtcFNjYWxlLnZhbHVlKj0tMSkpLGUubm9ybWFsTWFwJiYodC5ub3JtYWxNYXAudmFsdWU9ZS5ub3JtYWxNYXAsdC5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KGUubm9ybWFsU2NhbGUpLDE9PT1lLnNpZGUmJnQubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLGUuZGlzcGxhY2VtZW50TWFwJiYodC5kaXNwbGFjZW1lbnRNYXAudmFsdWU9ZS5kaXNwbGFjZW1lbnRNYXAsdC5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT1lLmRpc3BsYWNlbWVudFNjYWxlLHQuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT1lLmRpc3BsYWNlbWVudEJpYXMpfSkodCxvKSk6by5pc01lc2hQaG9uZ01hdGVyaWFsPyhlKHQsbyksKGZ1bmN0aW9uIGModCxlKXt0LnNwZWN1bGFyLnZhbHVlLmNvcHkoZS5zcGVjdWxhciksdC5zaGluaW5lc3MudmFsdWU9TWF0aC5tYXgoZS5zaGluaW5lc3MsMWUtNCksZS5lbWlzc2l2ZU1hcCYmKHQuZW1pc3NpdmVNYXAudmFsdWU9ZS5lbWlzc2l2ZU1hcCksZS5idW1wTWFwJiYodC5idW1wTWFwLnZhbHVlPWUuYnVtcE1hcCx0LmJ1bXBTY2FsZS52YWx1ZT1lLmJ1bXBTY2FsZSwxPT09ZS5zaWRlJiYodC5idW1wU2NhbGUudmFsdWUqPS0xKSksZS5ub3JtYWxNYXAmJih0Lm5vcm1hbE1hcC52YWx1ZT1lLm5vcm1hbE1hcCx0Lm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoZS5ub3JtYWxTY2FsZSksMT09PWUuc2lkZSYmdC5ub3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKSksZS5kaXNwbGFjZW1lbnRNYXAmJih0LmRpc3BsYWNlbWVudE1hcC52YWx1ZT1lLmRpc3BsYWNlbWVudE1hcCx0LmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPWUuZGlzcGxhY2VtZW50U2NhbGUsdC5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPWUuZGlzcGxhY2VtZW50Qmlhcyl9KSh0LG8pKTpvLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/KGUodCxvKSxvLmlzTWVzaFBoeXNpY2FsTWF0ZXJpYWw/KGZ1bmN0aW9uIGQodCxlKXtuKHQsZSksdC5yZWZsZWN0aXZpdHkudmFsdWU9ZS5yZWZsZWN0aXZpdHksdC5jbGVhcmNvYXQudmFsdWU9ZS5jbGVhcmNvYXQsdC5jbGVhcmNvYXRSb3VnaG5lc3MudmFsdWU9ZS5jbGVhcmNvYXRSb3VnaG5lc3MsZS5zaGVlbiYmdC5zaGVlbi52YWx1ZS5jb3B5KGUuc2hlZW4pLGUuY2xlYXJjb2F0TWFwJiYodC5jbGVhcmNvYXRNYXAudmFsdWU9ZS5jbGVhcmNvYXRNYXApLGUuY2xlYXJjb2F0Um91Z2huZXNzTWFwJiYodC5jbGVhcmNvYXRSb3VnaG5lc3NNYXAudmFsdWU9ZS5jbGVhcmNvYXRSb3VnaG5lc3NNYXApLGUuY2xlYXJjb2F0Tm9ybWFsTWFwJiYodC5jbGVhcmNvYXROb3JtYWxTY2FsZS52YWx1ZS5jb3B5KGUuY2xlYXJjb2F0Tm9ybWFsU2NhbGUpLHQuY2xlYXJjb2F0Tm9ybWFsTWFwLnZhbHVlPWUuY2xlYXJjb2F0Tm9ybWFsTWFwLDE9PT1lLnNpZGUmJnQuY2xlYXJjb2F0Tm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLHQudHJhbnNtaXNzaW9uLnZhbHVlPWUudHJhbnNtaXNzaW9uLGUudHJhbnNtaXNzaW9uTWFwJiYodC50cmFuc21pc3Npb25NYXAudmFsdWU9ZS50cmFuc21pc3Npb25NYXApfSkodCxvKTpuKHQsbykpOm8uaXNNZXNoTWF0Y2FwTWF0ZXJpYWw/KGUodCxvKSwoZnVuY3Rpb24gcCh0LGUpe2UubWF0Y2FwJiYodC5tYXRjYXAudmFsdWU9ZS5tYXRjYXApLGUuYnVtcE1hcCYmKHQuYnVtcE1hcC52YWx1ZT1lLmJ1bXBNYXAsdC5idW1wU2NhbGUudmFsdWU9ZS5idW1wU2NhbGUsMT09PWUuc2lkZSYmKHQuYnVtcFNjYWxlLnZhbHVlKj0tMSkpLGUubm9ybWFsTWFwJiYodC5ub3JtYWxNYXAudmFsdWU9ZS5ub3JtYWxNYXAsdC5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KGUubm9ybWFsU2NhbGUpLDE9PT1lLnNpZGUmJnQubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLGUuZGlzcGxhY2VtZW50TWFwJiYodC5kaXNwbGFjZW1lbnRNYXAudmFsdWU9ZS5kaXNwbGFjZW1lbnRNYXAsdC5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT1lLmRpc3BsYWNlbWVudFNjYWxlLHQuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT1lLmRpc3BsYWNlbWVudEJpYXMpfSkodCxvKSk6by5pc01lc2hEZXB0aE1hdGVyaWFsPyhlKHQsbyksKGZ1bmN0aW9uIG0odCxlKXtlLmRpc3BsYWNlbWVudE1hcCYmKHQuZGlzcGxhY2VtZW50TWFwLnZhbHVlPWUuZGlzcGxhY2VtZW50TWFwLHQuZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9ZS5kaXNwbGFjZW1lbnRTY2FsZSx0LmRpc3BsYWNlbWVudEJpYXMudmFsdWU9ZS5kaXNwbGFjZW1lbnRCaWFzKX0pKHQsbykpOm8uaXNNZXNoRGlzdGFuY2VNYXRlcmlhbD8oZSh0LG8pLChmdW5jdGlvbiB1KHQsZSl7ZS5kaXNwbGFjZW1lbnRNYXAmJih0LmRpc3BsYWNlbWVudE1hcC52YWx1ZT1lLmRpc3BsYWNlbWVudE1hcCx0LmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPWUuZGlzcGxhY2VtZW50U2NhbGUsdC5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPWUuZGlzcGxhY2VtZW50QmlhcyksdC5yZWZlcmVuY2VQb3NpdGlvbi52YWx1ZS5jb3B5KGUucmVmZXJlbmNlUG9zaXRpb24pLHQubmVhckRpc3RhbmNlLnZhbHVlPWUubmVhckRpc3RhbmNlLHQuZmFyRGlzdGFuY2UudmFsdWU9ZS5mYXJEaXN0YW5jZX0pKHQsbykpOm8uaXNNZXNoTm9ybWFsTWF0ZXJpYWw/KGUodCxvKSwoZnVuY3Rpb24gZih0LGUpe2UuYnVtcE1hcCYmKHQuYnVtcE1hcC52YWx1ZT1lLmJ1bXBNYXAsdC5idW1wU2NhbGUudmFsdWU9ZS5idW1wU2NhbGUsMT09PWUuc2lkZSYmKHQuYnVtcFNjYWxlLnZhbHVlKj0tMSkpLGUubm9ybWFsTWFwJiYodC5ub3JtYWxNYXAudmFsdWU9ZS5ub3JtYWxNYXAsdC5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KGUubm9ybWFsU2NhbGUpLDE9PT1lLnNpZGUmJnQubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLGUuZGlzcGxhY2VtZW50TWFwJiYodC5kaXNwbGFjZW1lbnRNYXAudmFsdWU9ZS5kaXNwbGFjZW1lbnRNYXAsdC5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT1lLmRpc3BsYWNlbWVudFNjYWxlLHQuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT1lLmRpc3BsYWNlbWVudEJpYXMpfSkodCxvKSk6by5pc0xpbmVCYXNpY01hdGVyaWFsPygoZnVuY3Rpb24gZyh0LGUpe3QuZGlmZnVzZS52YWx1ZS5jb3B5KGUuY29sb3IpLHQub3BhY2l0eS52YWx1ZT1lLm9wYWNpdHl9KSh0LG8pLG8uaXNMaW5lRGFzaGVkTWF0ZXJpYWwmJihmdW5jdGlvbiBoKHQsZSl7dC5kYXNoU2l6ZS52YWx1ZT1lLmRhc2hTaXplLHQudG90YWxTaXplLnZhbHVlPWUuZGFzaFNpemUrZS5nYXBTaXplLHQuc2NhbGUudmFsdWU9ZS5zY2FsZX0pKHQsbykpOm8uaXNQb2ludHNNYXRlcmlhbD8oZnVuY3Rpb24gYih0LGUsbixvKXtsZXQgaTt0LmRpZmZ1c2UudmFsdWUuY29weShlLmNvbG9yKSx0Lm9wYWNpdHkudmFsdWU9ZS5vcGFjaXR5LHQuc2l6ZS52YWx1ZT1lLnNpemUqbix0LnNjYWxlLnZhbHVlPS41Km8sZS5tYXAmJih0Lm1hcC52YWx1ZT1lLm1hcCksZS5hbHBoYU1hcCYmKHQuYWxwaGFNYXAudmFsdWU9ZS5hbHBoYU1hcCksZS5tYXA/aT1lLm1hcDplLmFscGhhTWFwJiYoaT1lLmFscGhhTWFwKSx2b2lkIDAhPT1pJiYoITA9PT1pLm1hdHJpeEF1dG9VcGRhdGUmJmkudXBkYXRlTWF0cml4KCksdC51dlRyYW5zZm9ybS52YWx1ZS5jb3B5KGkubWF0cml4KSl9KSh0LG8sYSxyKTpvLmlzU3ByaXRlTWF0ZXJpYWw/KGZ1bmN0aW9uIHkodCxlKXtsZXQgbjt0LmRpZmZ1c2UudmFsdWUuY29weShlLmNvbG9yKSx0Lm9wYWNpdHkudmFsdWU9ZS5vcGFjaXR5LHQucm90YXRpb24udmFsdWU9ZS5yb3RhdGlvbixlLm1hcCYmKHQubWFwLnZhbHVlPWUubWFwKSxlLmFscGhhTWFwJiYodC5hbHBoYU1hcC52YWx1ZT1lLmFscGhhTWFwKSxlLm1hcD9uPWUubWFwOmUuYWxwaGFNYXAmJihuPWUuYWxwaGFNYXApLHZvaWQgMCE9PW4mJighMD09PW4ubWF0cml4QXV0b1VwZGF0ZSYmbi51cGRhdGVNYXRyaXgoKSx0LnV2VHJhbnNmb3JtLnZhbHVlLmNvcHkobi5tYXRyaXgpKX0pKHQsbyk6by5pc1NoYWRvd01hdGVyaWFsPyh0LmNvbG9yLnZhbHVlLmNvcHkoby5jb2xvciksdC5vcGFjaXR5LnZhbHVlPW8ub3BhY2l0eSk6by5pc1NoYWRlck1hdGVyaWFsJiYoby51bmlmb3Jtc05lZWRVcGRhdGU9ITEpfX19ZnVuY3Rpb24gSWN0KHQpe2NvbnN0IGU9dm9pZCAwIT09KHQ9dHx8e30pLmNhbnZhcz90LmNhbnZhczooZnVuY3Rpb24gbigpe2NvbnN0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiY2FudmFzIik7cmV0dXJuIHQuc3R5bGUuZGlzcGxheT0iYmxvY2siLHR9KSgpLG89dm9pZCAwIT09dC5jb250ZXh0P3QuY29udGV4dDpudWxsLGk9dm9pZCAwIT09dC5hbHBoYSYmdC5hbHBoYSxhPXZvaWQgMD09PXQuZGVwdGh8fHQuZGVwdGgscj12b2lkIDA9PT10LnN0ZW5jaWx8fHQuc3RlbmNpbCxzPXZvaWQgMCE9PXQuYW50aWFsaWFzJiZ0LmFudGlhbGlhcyxsPXZvaWQgMD09PXQucHJlbXVsdGlwbGllZEFscGhhfHx0LnByZW11bHRpcGxpZWRBbHBoYSxjPXZvaWQgMCE9PXQucHJlc2VydmVEcmF3aW5nQnVmZmVyJiZ0LnByZXNlcnZlRHJhd2luZ0J1ZmZlcixkPXZvaWQgMCE9PXQucG93ZXJQcmVmZXJlbmNlP3QucG93ZXJQcmVmZXJlbmNlOiJkZWZhdWx0IixwPXZvaWQgMCE9PXQuZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdCYmdC5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0O2xldCBtPW51bGwsdT1udWxsO2NvbnN0IGY9W107dGhpcy5kb21FbGVtZW50PWUsdGhpcy5kZWJ1Zz17Y2hlY2tTaGFkZXJFcnJvcnM6ITB9LHRoaXMuYXV0b0NsZWFyPSEwLHRoaXMuYXV0b0NsZWFyQ29sb3I9ITAsdGhpcy5hdXRvQ2xlYXJEZXB0aD0hMCx0aGlzLmF1dG9DbGVhclN0ZW5jaWw9ITAsdGhpcy5zb3J0T2JqZWN0cz0hMCx0aGlzLmNsaXBwaW5nUGxhbmVzPVtdLHRoaXMubG9jYWxDbGlwcGluZ0VuYWJsZWQ9ITEsdGhpcy5nYW1tYUZhY3Rvcj0yLHRoaXMub3V0cHV0RW5jb2Rpbmc9Tml0LHRoaXMucGh5c2ljYWxseUNvcnJlY3RMaWdodHM9ITEsdGhpcy50b25lTWFwcGluZz0wLHRoaXMudG9uZU1hcHBpbmdFeHBvc3VyZT0xLHRoaXMubWF4TW9ycGhUYXJnZXRzPTgsdGhpcy5tYXhNb3JwaE5vcm1hbHM9NDtjb25zdCBnPXRoaXM7bGV0IGg9ITEsYj1udWxsLHk9MCxfPTAsQz1udWxsLE09bnVsbCx2PS0xLHg9bnVsbDtjb25zdCBPPW5ldyBLaXQsUD1uZXcgS2l0O2xldCB3PW51bGwsaz1lLndpZHRoLFM9ZS5oZWlnaHQsRD0xLEU9bnVsbCxBPW51bGw7Y29uc3QgUj1uZXcgS2l0KDAsMCxrLFMpLFQ9bmV3IEtpdCgwLDAsayxTKTtsZXQgTj0hMTtjb25zdCBJPW5ldyBTc3Q7bGV0IHo9ITEsSD0hMTtjb25zdCBGPW5ldyBrYXQsTD1uZXcgJGl0LEI9e2JhY2tncm91bmQ6bnVsbCxmb2c6bnVsbCxlbnZpcm9ubWVudDpudWxsLG92ZXJyaWRlTWF0ZXJpYWw6bnVsbCxpc1NjZW5lOiEwfTtmdW5jdGlvbiBWKCl7cmV0dXJuIG51bGw9PT1DP0Q6MX1sZXQgaixVLFcsRyxZLHEsWixYLEssSixRLCQsdHQsZXQsbnQsb3QsaXQsYXQscnQsc3QsbHQsY3Q9bztmdW5jdGlvbiBkdCh0LG4pe2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKXtjb25zdCBpPWUuZ2V0Q29udGV4dCh0W29dLG4pO2lmKG51bGwhPT1pKXJldHVybiBpfXJldHVybiBudWxsfXRyeXtjb25zdCB0PXthbHBoYTppLGRlcHRoOmEsc3RlbmNpbDpyLGFudGlhbGlhczpzLHByZW11bHRpcGxpZWRBbHBoYTpsLHByZXNlcnZlRHJhd2luZ0J1ZmZlcjpjLHBvd2VyUHJlZmVyZW5jZTpkLGZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQ6cH07aWYoZS5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IixmdCwhMSksZS5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRyZXN0b3JlZCIsZ3QsITEpLG51bGw9PT1jdCl7Y29uc3QgZT1bIndlYmdsMiIsIndlYmdsIiwiZXhwZXJpbWVudGFsLXdlYmdsIl07aWYoITA9PT1nLmlzV2ViR0wxUmVuZGVyZXImJmUuc2hpZnQoKSxjdD1kdChlLHQpLG51bGw9PT1jdCl0aHJvdyBkdChlKT9uZXcgRXJyb3IoIkVycm9yIGNyZWF0aW5nIFdlYkdMIGNvbnRleHQgd2l0aCB5b3VyIHNlbGVjdGVkIGF0dHJpYnV0ZXMuIik6bmV3IEVycm9yKCJFcnJvciBjcmVhdGluZyBXZWJHTCBjb250ZXh0LiIpfXZvaWQgMD09PWN0LmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCYmKGN0LmdldFNoYWRlclByZWNpc2lvbkZvcm1hdD1mdW5jdGlvbigpe3JldHVybntyYW5nZU1pbjoxLHJhbmdlTWF4OjEscHJlY2lzaW9uOjF9fSl9Y2F0Y2godCl7dGhyb3cgY29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlcjogIit0Lm1lc3NhZ2UpLHR9ZnVuY3Rpb24gcHQoKXtqPW5ldyBWc3QoY3QpLFU9bmV3IEZzdChjdCxqLHQpLGouaW5pdChVKSxzdD1uZXcgRGN0KGN0LGosVSksVz1uZXcga2N0KGN0LGosVSksVy5zY2lzc29yKFAuY29weShUKS5tdWx0aXBseVNjYWxhcihEKS5mbG9vcigpKSxXLnZpZXdwb3J0KE8uY29weShSKS5tdWx0aXBseVNjYWxhcihEKS5mbG9vcigpKSxHPW5ldyBXc3QoY3QpLFk9bmV3IHVjdCxxPW5ldyBTY3QoY3QsaixXLFksVSxzdCxHKSxaPW5ldyBCc3QoZyksWD1uZXcgRXN0KGN0LFUpLGx0PW5ldyB6c3QoY3QsaixYLFUpLEs9bmV3IGpzdChjdCxYLEcsbHQpLEo9bmV3IFpzdChjdCxLLFgsRyksaXQ9bmV3IHFzdChjdCksbnQ9bmV3IExzdChZKSxRPW5ldyBtY3QoZyxaLGosVSxsdCxudCksJD1uZXcgTmN0KFkpLHR0PW5ldyBiY3QoWSksZXQ9bmV3IHhjdChqLFUpLG90PW5ldyBJc3QoZyxaLFcsSixsKSxhdD1uZXcgSHN0KGN0LGosRyxVKSxydD1uZXcgVXN0KGN0LGosRyxVKSxHLnByb2dyYW1zPVEucHJvZ3JhbXMsZy5jYXBhYmlsaXRpZXM9VSxnLmV4dGVuc2lvbnM9aixnLnByb3BlcnRpZXM9WSxnLnJlbmRlckxpc3RzPXR0LGcuc3RhdGU9VyxnLmluZm89R31wdCgpO2NvbnN0IG10PW5ldyBUY3QoZyxjdCk7dGhpcy54cj1tdDtjb25zdCB1dD1uZXcgd2N0KGcsSixVLm1heFRleHR1cmVTaXplKTtmdW5jdGlvbiBmdCh0KXt0LnByZXZlbnREZWZhdWx0KCksY29uc29sZS5sb2coIlRIUkVFLldlYkdMUmVuZGVyZXI6IENvbnRleHQgTG9zdC4iKSxoPSEwfWZ1bmN0aW9uIGd0KCl7Y29uc29sZS5sb2coIlRIUkVFLldlYkdMUmVuZGVyZXI6IENvbnRleHQgUmVzdG9yZWQuIiksaD0hMSxwdCgpfWZ1bmN0aW9uIGh0KHQpe2NvbnN0IGU9dC50YXJnZXQ7ZS5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixodCksKGZ1bmN0aW9uIG4odCl7YnQodCksWS5yZW1vdmUodCl9KShlKX1mdW5jdGlvbiBidCh0KXtjb25zdCBlPVkuZ2V0KHQpLnByb2dyYW07dm9pZCAwIT09ZSYmUS5yZWxlYXNlUHJvZ3JhbShlKX10aGlzLnNoYWRvd01hcD11dCx0aGlzLmdldENvbnRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4gY3R9LHRoaXMuZ2V0Q29udGV4dEF0dHJpYnV0ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gY3QuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKX0sdGhpcy5mb3JjZUNvbnRleHRMb3NzPWZ1bmN0aW9uKCl7Y29uc3QgdD1qLmdldCgiV0VCR0xfbG9zZV9jb250ZXh0Iik7dCYmdC5sb3NlQ29udGV4dCgpfSx0aGlzLmZvcmNlQ29udGV4dFJlc3RvcmU9ZnVuY3Rpb24oKXtjb25zdCB0PWouZ2V0KCJXRUJHTF9sb3NlX2NvbnRleHQiKTt0JiZ0LnJlc3RvcmVDb250ZXh0KCl9LHRoaXMuZ2V0UGl4ZWxSYXRpbz1mdW5jdGlvbigpe3JldHVybiBEfSx0aGlzLnNldFBpeGVsUmF0aW89ZnVuY3Rpb24odCl7dm9pZCAwIT09dCYmKEQ9dCx0aGlzLnNldFNpemUoayxTLCExKSl9LHRoaXMuZ2V0U2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKGNvbnNvbGUud2FybigiV2ViR0xSZW5kZXJlcjogLmdldHNpemUoKSBub3cgcmVxdWlyZXMgYSBWZWN0b3IyIGFzIGFuIGFyZ3VtZW50IiksdD1uZXcgVWl0KSx0LnNldChrLFMpfSx0aGlzLnNldFNpemU9ZnVuY3Rpb24odCxuLG8pe210LmlzUHJlc2VudGluZz9jb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IENhbid0IGNoYW5nZSBzaXplIHdoaWxlIFZSIGRldmljZSBpcyBwcmVzZW50aW5nLiIpOihrPXQsUz1uLGUud2lkdGg9TWF0aC5mbG9vcih0KkQpLGUuaGVpZ2h0PU1hdGguZmxvb3IobipEKSwhMSE9PW8mJihlLnN0eWxlLndpZHRoPXQrInB4IixlLnN0eWxlLmhlaWdodD1uKyJweCIpLHRoaXMuc2V0Vmlld3BvcnQoMCwwLHQsbikpfSx0aGlzLmdldERyYXdpbmdCdWZmZXJTaXplPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYoY29uc29sZS53YXJuKCJXZWJHTFJlbmRlcmVyOiAuZ2V0ZHJhd2luZ0J1ZmZlclNpemUoKSBub3cgcmVxdWlyZXMgYSBWZWN0b3IyIGFzIGFuIGFyZ3VtZW50IiksdD1uZXcgVWl0KSx0LnNldChrKkQsUypEKS5mbG9vcigpfSx0aGlzLnNldERyYXdpbmdCdWZmZXJTaXplPWZ1bmN0aW9uKHQsbixvKXtrPXQsUz1uLEQ9byxlLndpZHRoPU1hdGguZmxvb3IodCpvKSxlLmhlaWdodD1NYXRoLmZsb29yKG4qbyksdGhpcy5zZXRWaWV3cG9ydCgwLDAsdCxuKX0sdGhpcy5nZXRDdXJyZW50Vmlld3BvcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJihjb25zb2xlLndhcm4oIldlYkdMUmVuZGVyZXI6IC5nZXRDdXJyZW50Vmlld3BvcnQoKSBub3cgcmVxdWlyZXMgYSBWZWN0b3I0IGFzIGFuIGFyZ3VtZW50IiksdD1uZXcgS2l0KSx0LmNvcHkoTyl9LHRoaXMuZ2V0Vmlld3BvcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQuY29weShSKX0sdGhpcy5zZXRWaWV3cG9ydD1mdW5jdGlvbih0LGUsbixvKXt0LmlzVmVjdG9yND9SLnNldCh0LngsdC55LHQueix0LncpOlIuc2V0KHQsZSxuLG8pLFcudmlld3BvcnQoTy5jb3B5KFIpLm11bHRpcGx5U2NhbGFyKEQpLmZsb29yKCkpfSx0aGlzLmdldFNjaXNzb3I9ZnVuY3Rpb24odCl7cmV0dXJuIHQuY29weShUKX0sdGhpcy5zZXRTY2lzc29yPWZ1bmN0aW9uKHQsZSxuLG8pe3QuaXNWZWN0b3I0P1Quc2V0KHQueCx0LnksdC56LHQudyk6VC5zZXQodCxlLG4sbyksVy5zY2lzc29yKFAuY29weShUKS5tdWx0aXBseVNjYWxhcihEKS5mbG9vcigpKX0sdGhpcy5nZXRTY2lzc29yVGVzdD1mdW5jdGlvbigpe3JldHVybiBOfSx0aGlzLnNldFNjaXNzb3JUZXN0PWZ1bmN0aW9uKHQpe1cuc2V0U2Npc3NvclRlc3QoTj10KX0sdGhpcy5zZXRPcGFxdWVTb3J0PWZ1bmN0aW9uKHQpe0U9dH0sdGhpcy5zZXRUcmFuc3BhcmVudFNvcnQ9ZnVuY3Rpb24odCl7QT10fSx0aGlzLmdldENsZWFyQ29sb3I9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJihjb25zb2xlLndhcm4oIldlYkdMUmVuZGVyZXI6IC5nZXRDbGVhckNvbG9yKCkgbm93IHJlcXVpcmVzIGEgQ29sb3IgYXMgYW4gYXJndW1lbnQiKSx0PW5ldyBDcnQpLHQuY29weShvdC5nZXRDbGVhckNvbG9yKCkpfSx0aGlzLnNldENsZWFyQ29sb3I9ZnVuY3Rpb24oKXtvdC5zZXRDbGVhckNvbG9yLmFwcGx5KG90LGFyZ3VtZW50cyl9LHRoaXMuZ2V0Q2xlYXJBbHBoYT1mdW5jdGlvbigpe3JldHVybiBvdC5nZXRDbGVhckFscGhhKCl9LHRoaXMuc2V0Q2xlYXJBbHBoYT1mdW5jdGlvbigpe290LnNldENsZWFyQWxwaGEuYXBwbHkob3QsYXJndW1lbnRzKX0sdGhpcy5jbGVhcj1mdW5jdGlvbih0LGUsbil7bGV0IG89MDsodm9pZCAwPT09dHx8dCkmJihvfD0xNjM4NCksKHZvaWQgMD09PWV8fGUpJiYob3w9MjU2KSwodm9pZCAwPT09bnx8bikmJihvfD0xMDI0KSxjdC5jbGVhcihvKX0sdGhpcy5jbGVhckNvbG9yPWZ1bmN0aW9uKCl7dGhpcy5jbGVhcighMCwhMSwhMSl9LHRoaXMuY2xlYXJEZXB0aD1mdW5jdGlvbigpe3RoaXMuY2xlYXIoITEsITAsITEpfSx0aGlzLmNsZWFyU3RlbmNpbD1mdW5jdGlvbigpe3RoaXMuY2xlYXIoITEsITEsITApfSx0aGlzLmRpc3Bvc2U9ZnVuY3Rpb24oKXtlLnJlbW92ZUV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLGZ0LCExKSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dHJlc3RvcmVkIixndCwhMSksdHQuZGlzcG9zZSgpLGV0LmRpc3Bvc2UoKSxZLmRpc3Bvc2UoKSxaLmRpc3Bvc2UoKSxKLmRpc3Bvc2UoKSxsdC5kaXNwb3NlKCksbXQuZGlzcG9zZSgpLF90LnN0b3AoKX0sdGhpcy5yZW5kZXJCdWZmZXJJbW1lZGlhdGU9ZnVuY3Rpb24odCxlKXtsdC5pbml0QXR0cmlidXRlcygpO2NvbnN0IG49WS5nZXQodCk7dC5oYXNQb3NpdGlvbnMmJiFuLnBvc2l0aW9uJiYobi5wb3NpdGlvbj1jdC5jcmVhdGVCdWZmZXIoKSksdC5oYXNOb3JtYWxzJiYhbi5ub3JtYWwmJihuLm5vcm1hbD1jdC5jcmVhdGVCdWZmZXIoKSksdC5oYXNVdnMmJiFuLnV2JiYobi51dj1jdC5jcmVhdGVCdWZmZXIoKSksdC5oYXNDb2xvcnMmJiFuLmNvbG9yJiYobi5jb2xvcj1jdC5jcmVhdGVCdWZmZXIoKSk7Y29uc3Qgbz1lLmdldEF0dHJpYnV0ZXMoKTt0Lmhhc1Bvc2l0aW9ucyYmKGN0LmJpbmRCdWZmZXIoMzQ5NjIsbi5wb3NpdGlvbiksY3QuYnVmZmVyRGF0YSgzNDk2Mix0LnBvc2l0aW9uQXJyYXksMzUwNDgpLGx0LmVuYWJsZUF0dHJpYnV0ZShvLnBvc2l0aW9uKSxjdC52ZXJ0ZXhBdHRyaWJQb2ludGVyKG8ucG9zaXRpb24sMyw1MTI2LCExLDAsMCkpLHQuaGFzTm9ybWFscyYmKGN0LmJpbmRCdWZmZXIoMzQ5NjIsbi5ub3JtYWwpLGN0LmJ1ZmZlckRhdGEoMzQ5NjIsdC5ub3JtYWxBcnJheSwzNTA0OCksbHQuZW5hYmxlQXR0cmlidXRlKG8ubm9ybWFsKSxjdC52ZXJ0ZXhBdHRyaWJQb2ludGVyKG8ubm9ybWFsLDMsNTEyNiwhMSwwLDApKSx0Lmhhc1V2cyYmKGN0LmJpbmRCdWZmZXIoMzQ5NjIsbi51diksY3QuYnVmZmVyRGF0YSgzNDk2Mix0LnV2QXJyYXksMzUwNDgpLGx0LmVuYWJsZUF0dHJpYnV0ZShvLnV2KSxjdC52ZXJ0ZXhBdHRyaWJQb2ludGVyKG8udXYsMiw1MTI2LCExLDAsMCkpLHQuaGFzQ29sb3JzJiYoY3QuYmluZEJ1ZmZlcigzNDk2MixuLmNvbG9yKSxjdC5idWZmZXJEYXRhKDM0OTYyLHQuY29sb3JBcnJheSwzNTA0OCksbHQuZW5hYmxlQXR0cmlidXRlKG8uY29sb3IpLGN0LnZlcnRleEF0dHJpYlBvaW50ZXIoby5jb2xvciwzLDUxMjYsITEsMCwwKSksbHQuZGlzYWJsZVVudXNlZEF0dHJpYnV0ZXMoKSxjdC5kcmF3QXJyYXlzKDQsMCx0LmNvdW50KSx0LmNvdW50PTB9LHRoaXMucmVuZGVyQnVmZmVyRGlyZWN0PWZ1bmN0aW9uKHQsZSxuLG8saSxhKXtudWxsPT09ZSYmKGU9Qik7Y29uc3Qgcj1pLmlzTWVzaCYmaS5tYXRyaXhXb3JsZC5kZXRlcm1pbmFudCgpPDAscz1PdCh0LGUsbyxpKTtXLnNldE1hdGVyaWFsKG8scik7bGV0IGw9bi5pbmRleDtjb25zdCBjPW4uYXR0cmlidXRlcy5wb3NpdGlvbjtpZihudWxsPT09bCl7aWYodm9pZCAwPT09Y3x8MD09PWMuY291bnQpcmV0dXJufWVsc2UgaWYoMD09PWwuY291bnQpcmV0dXJuO2xldCBkLHA9MTshMD09PW8ud2lyZWZyYW1lJiYobD1LLmdldFdpcmVmcmFtZUF0dHJpYnV0ZShuKSxwPTIpLChvLm1vcnBoVGFyZ2V0c3x8by5tb3JwaE5vcm1hbHMpJiZpdC51cGRhdGUoaSxuLG8scyksbHQuc2V0dXAoaSxvLHMsbixsKTtsZXQgbT1hdDtudWxsIT09bCYmKGQ9WC5nZXQobCksbT1ydCxtLnNldEluZGV4KGQpKTtjb25zdCB1PW51bGwhPT1sP2wuY291bnQ6Yy5jb3VudCxmPW4uZHJhd1JhbmdlLnN0YXJ0KnAsZz1uLmRyYXdSYW5nZS5jb3VudCpwLGg9bnVsbCE9PWE/YS5zdGFydCpwOjAsYj1udWxsIT09YT9hLmNvdW50KnA6MS8wLHk9TWF0aC5tYXgoZixoKSxfPU1hdGgubWluKHUsZitnLGgrYiktMSxDPU1hdGgubWF4KDAsXy15KzEpO2lmKDAhPT1DKXtpZihpLmlzTWVzaCkhMD09PW8ud2lyZWZyYW1lPyhXLnNldExpbmVXaWR0aChvLndpcmVmcmFtZUxpbmV3aWR0aCpWKCkpLG0uc2V0TW9kZSgxKSk6bS5zZXRNb2RlKDQpO2Vsc2UgaWYoaS5pc0xpbmUpe2xldCB0PW8ubGluZXdpZHRoO3ZvaWQgMD09PXQmJih0PTEpLFcuc2V0TGluZVdpZHRoKHQqVigpKSxtLnNldE1vZGUoaS5pc0xpbmVTZWdtZW50cz8xOmkuaXNMaW5lTG9vcD8yOjMpfWVsc2UgaS5pc1BvaW50cz9tLnNldE1vZGUoMCk6aS5pc1Nwcml0ZSYmbS5zZXRNb2RlKDQpO2lmKGkuaXNJbnN0YW5jZWRNZXNoKW0ucmVuZGVySW5zdGFuY2VzKHksQyxpLmNvdW50KTtlbHNlIGlmKG4uaXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSl7Y29uc3QgdD1NYXRoLm1pbihuLmluc3RhbmNlQ291bnQsbi5fbWF4SW5zdGFuY2VDb3VudCk7bS5yZW5kZXJJbnN0YW5jZXMoeSxDLHQpfWVsc2UgbS5yZW5kZXIoeSxDKX19LHRoaXMuY29tcGlsZT1mdW5jdGlvbih0LGUpe3U9ZXQuZ2V0KHQpLHUuaW5pdCgpLHQudHJhdmVyc2VWaXNpYmxlKChmdW5jdGlvbih0KXt0LmlzTGlnaHQmJnQubGF5ZXJzLnRlc3QoZS5sYXllcnMpJiYodS5wdXNoTGlnaHQodCksdC5jYXN0U2hhZG93JiZ1LnB1c2hTaGFkb3codCkpfSkpLHUuc2V0dXBMaWdodHMoKTtjb25zdCBuPW5ldyBXZWFrTWFwO3QudHJhdmVyc2UoKGZ1bmN0aW9uKGUpe2NvbnN0IG89ZS5tYXRlcmlhbDtpZihvKWlmKEFycmF5LmlzQXJyYXkobykpZm9yKGxldCBpPTA7aTxvLmxlbmd0aDtpKyspe2NvbnN0IGE9b1tpXTshMT09PW4uaGFzKGEpJiYoeHQoYSx0LGUpLG4uc2V0KGEpKX1lbHNlITE9PT1uLmhhcyhvKSYmKHh0KG8sdCxlKSxuLnNldChvKSl9KSl9O2xldCB5dD1udWxsO2NvbnN0IF90PW5ldyBEc3Q7ZnVuY3Rpb24gQ3QodCxlLG4sbyl7aWYoITE9PT10LnZpc2libGUpcmV0dXJuO2lmKHQubGF5ZXJzLnRlc3QoZS5sYXllcnMpKWlmKHQuaXNHcm91cCluPXQucmVuZGVyT3JkZXI7ZWxzZSBpZih0LmlzTE9EKSEwPT09dC5hdXRvVXBkYXRlJiZ0LnVwZGF0ZShlKTtlbHNlIGlmKHQuaXNMaWdodCl1LnB1c2hMaWdodCh0KSx0LmNhc3RTaGFkb3cmJnUucHVzaFNoYWRvdyh0KTtlbHNlIGlmKHQuaXNTcHJpdGUpe2lmKCF0LmZydXN0dW1DdWxsZWR8fEkuaW50ZXJzZWN0c1Nwcml0ZSh0KSl7byYmTC5zZXRGcm9tTWF0cml4UG9zaXRpb24odC5tYXRyaXhXb3JsZCkuYXBwbHlNYXRyaXg0KEYpO2NvbnN0IGU9Si51cGRhdGUodCksaT10Lm1hdGVyaWFsO2kudmlzaWJsZSYmbS5wdXNoKHQsZSxpLG4sTC56LG51bGwpfX1lbHNlIGlmKHQuaXNJbW1lZGlhdGVSZW5kZXJPYmplY3QpbyYmTC5zZXRGcm9tTWF0cml4UG9zaXRpb24odC5tYXRyaXhXb3JsZCkuYXBwbHlNYXRyaXg0KEYpLG0ucHVzaCh0LG51bGwsdC5tYXRlcmlhbCxuLEwueixudWxsKTtlbHNlIGlmKCh0LmlzTWVzaHx8dC5pc0xpbmV8fHQuaXNQb2ludHMpJiYodC5pc1NraW5uZWRNZXNoJiZ0LnNrZWxldG9uLmZyYW1lIT09Ry5yZW5kZXIuZnJhbWUmJih0LnNrZWxldG9uLnVwZGF0ZSgpLHQuc2tlbGV0b24uZnJhbWU9Ry5yZW5kZXIuZnJhbWUpLCF0LmZydXN0dW1DdWxsZWR8fEkuaW50ZXJzZWN0c09iamVjdCh0KSkpe28mJkwuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHQubWF0cml4V29ybGQpLmFwcGx5TWF0cml4NChGKTtjb25zdCBlPUoudXBkYXRlKHQpLGk9dC5tYXRlcmlhbDtpZihBcnJheS5pc0FycmF5KGkpKXtjb25zdCBvPWUuZ3JvdXBzO2ZvcihsZXQgYT0wLHI9by5sZW5ndGg7YTxyO2ErKyl7Y29uc3Qgcj1vW2FdLHM9aVtyLm1hdGVyaWFsSW5kZXhdO3MmJnMudmlzaWJsZSYmbS5wdXNoKHQsZSxzLG4sTC56LHIpfX1lbHNlIGkudmlzaWJsZSYmbS5wdXNoKHQsZSxpLG4sTC56LG51bGwpfWNvbnN0IGk9dC5jaGlsZHJlbjtmb3IobGV0IHQ9MCxhPWkubGVuZ3RoO3Q8YTt0KyspQ3QoaVt0XSxlLG4sbyl9ZnVuY3Rpb24gTXQodCxlLG4pe2NvbnN0IG89ITA9PT1lLmlzU2NlbmU/ZS5vdmVycmlkZU1hdGVyaWFsOm51bGw7Zm9yKGxldCBpPTAsYT10Lmxlbmd0aDtpPGE7aSsrKXtjb25zdCBhPXRbaV0scj1hLm9iamVjdCxzPWEuZ2VvbWV0cnksbD1udWxsPT09bz9hLm1hdGVyaWFsOm8sYz1hLmdyb3VwO2lmKG4uaXNBcnJheUNhbWVyYSl7Y29uc3QgdD1uLmNhbWVyYXM7Zm9yKGxldCBuPTAsbz10Lmxlbmd0aDtuPG87bisrKXtjb25zdCBvPXRbbl07ci5sYXllcnMudGVzdChvLmxheWVycykmJihXLnZpZXdwb3J0KE8uY29weShvLnZpZXdwb3J0KSksdS5zZXR1cExpZ2h0c1ZpZXcobyksdnQocixlLG8scyxsLGMpKX19ZWxzZSB2dChyLGUsbixzLGwsYyl9fWZ1bmN0aW9uIHZ0KHQsZSxuLG8saSxhKXtpZih0Lm9uQmVmb3JlUmVuZGVyKGcsZSxuLG8saSxhKSx0Lm1vZGVsVmlld01hdHJpeC5tdWx0aXBseU1hdHJpY2VzKG4ubWF0cml4V29ybGRJbnZlcnNlLHQubWF0cml4V29ybGQpLHQubm9ybWFsTWF0cml4LmdldE5vcm1hbE1hdHJpeCh0Lm1vZGVsVmlld01hdHJpeCksdC5pc0ltbWVkaWF0ZVJlbmRlck9iamVjdCl7Y29uc3Qgbz1PdChuLGUsaSx0KTtXLnNldE1hdGVyaWFsKGkpLGx0LnJlc2V0KCksKGZ1bmN0aW9uIHIodCxlKXt0LnJlbmRlcigoZnVuY3Rpb24odCl7Zy5yZW5kZXJCdWZmZXJJbW1lZGlhdGUodCxlKX0pKX0pKHQsbyl9ZWxzZSBnLnJlbmRlckJ1ZmZlckRpcmVjdChuLGUsbyxpLHQsYSk7dC5vbkFmdGVyUmVuZGVyKGcsZSxuLG8saSxhKX1mdW5jdGlvbiB4dCh0LGUsbil7ITAhPT1lLmlzU2NlbmUmJihlPUIpO2NvbnN0IG89WS5nZXQodCksaT11LnN0YXRlLmxpZ2h0cyxhPWkuc3RhdGUudmVyc2lvbixyPVEuZ2V0UGFyYW1ldGVycyh0LGkuc3RhdGUsdS5zdGF0ZS5zaGFkb3dzQXJyYXksZSxuKSxzPVEuZ2V0UHJvZ3JhbUNhY2hlS2V5KHIpO2xldCBsPW8ucHJvZ3JhbSxjPSEwO2lmKG8uZW52aXJvbm1lbnQ9dC5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP2UuZW52aXJvbm1lbnQ6bnVsbCxvLmZvZz1lLmZvZyxvLmVudk1hcD1aLmdldCh0LmVudk1hcHx8by5lbnZpcm9ubWVudCksdm9pZCAwPT09bCl0LmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGh0KTtlbHNlIGlmKGwuY2FjaGVLZXkhPT1zKWJ0KHQpO2Vsc2UgaWYoby5saWdodHNTdGF0ZVZlcnNpb24hPT1hKWM9ITE7ZWxzZXtpZih2b2lkIDAhPT1yLnNoYWRlcklEKXJldHVybjtjPSExfWMmJihyLnVuaWZvcm1zPVEuZ2V0VW5pZm9ybXModCksdC5vbkJlZm9yZUNvbXBpbGUocixnKSxsPVEuYWNxdWlyZVByb2dyYW0ocixzKSxvLnByb2dyYW09bCxvLnVuaWZvcm1zPXIudW5pZm9ybXMsby5vdXRwdXRFbmNvZGluZz1yLm91dHB1dEVuY29kaW5nKTtjb25zdCBkPW8udW5pZm9ybXM7KHQuaXNTaGFkZXJNYXRlcmlhbHx8dC5pc1Jhd1NoYWRlck1hdGVyaWFsKSYmITAhPT10LmNsaXBwaW5nfHwoby5udW1DbGlwcGluZ1BsYW5lcz1udC5udW1QbGFuZXMsby5udW1JbnRlcnNlY3Rpb249bnQubnVtSW50ZXJzZWN0aW9uLGQuY2xpcHBpbmdQbGFuZXM9bnQudW5pZm9ybSksby5uZWVkc0xpZ2h0cz0oZnVuY3Rpb24gcCh0KXtyZXR1cm4gdC5pc01lc2hMYW1iZXJ0TWF0ZXJpYWx8fHQuaXNNZXNoVG9vbk1hdGVyaWFsfHx0LmlzTWVzaFBob25nTWF0ZXJpYWx8fHQuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbHx8dC5pc1NoYWRvd01hdGVyaWFsfHx0LmlzU2hhZGVyTWF0ZXJpYWwmJiEwPT09dC5saWdodHN9KSh0KSxvLmxpZ2h0c1N0YXRlVmVyc2lvbj1hLG8ubmVlZHNMaWdodHMmJihkLmFtYmllbnRMaWdodENvbG9yLnZhbHVlPWkuc3RhdGUuYW1iaWVudCxkLmxpZ2h0UHJvYmUudmFsdWU9aS5zdGF0ZS5wcm9iZSxkLmRpcmVjdGlvbmFsTGlnaHRzLnZhbHVlPWkuc3RhdGUuZGlyZWN0aW9uYWwsZC5kaXJlY3Rpb25hbExpZ2h0U2hhZG93cy52YWx1ZT1pLnN0YXRlLmRpcmVjdGlvbmFsU2hhZG93LGQuc3BvdExpZ2h0cy52YWx1ZT1pLnN0YXRlLnNwb3QsZC5zcG90TGlnaHRTaGFkb3dzLnZhbHVlPWkuc3RhdGUuc3BvdFNoYWRvdyxkLnJlY3RBcmVhTGlnaHRzLnZhbHVlPWkuc3RhdGUucmVjdEFyZWEsZC5sdGNfMS52YWx1ZT1pLnN0YXRlLnJlY3RBcmVhTFRDMSxkLmx0Y18yLnZhbHVlPWkuc3RhdGUucmVjdEFyZWFMVEMyLGQucG9pbnRMaWdodHMudmFsdWU9aS5zdGF0ZS5wb2ludCxkLnBvaW50TGlnaHRTaGFkb3dzLnZhbHVlPWkuc3RhdGUucG9pbnRTaGFkb3csZC5oZW1pc3BoZXJlTGlnaHRzLnZhbHVlPWkuc3RhdGUuaGVtaSxkLmRpcmVjdGlvbmFsU2hhZG93TWFwLnZhbHVlPWkuc3RhdGUuZGlyZWN0aW9uYWxTaGFkb3dNYXAsZC5kaXJlY3Rpb25hbFNoYWRvd01hdHJpeC52YWx1ZT1pLnN0YXRlLmRpcmVjdGlvbmFsU2hhZG93TWF0cml4LGQuc3BvdFNoYWRvd01hcC52YWx1ZT1pLnN0YXRlLnNwb3RTaGFkb3dNYXAsZC5zcG90U2hhZG93TWF0cml4LnZhbHVlPWkuc3RhdGUuc3BvdFNoYWRvd01hdHJpeCxkLnBvaW50U2hhZG93TWFwLnZhbHVlPWkuc3RhdGUucG9pbnRTaGFkb3dNYXAsZC5wb2ludFNoYWRvd01hdHJpeC52YWx1ZT1pLnN0YXRlLnBvaW50U2hhZG93TWF0cml4KTtjb25zdCBtPW8ucHJvZ3JhbS5nZXRVbmlmb3JtcygpLGY9R2x0LnNlcVdpdGhWYWx1ZShtLnNlcSxkKTtvLnVuaWZvcm1zTGlzdD1mfWZ1bmN0aW9uIE90KHQsZSxuLG8peyEwIT09ZS5pc1NjZW5lJiYoZT1CKSxxLnJlc2V0VGV4dHVyZVVuaXRzKCk7Y29uc3QgaT1lLmZvZyxhPW4uaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD9lLmVudmlyb25tZW50Om51bGwscj1udWxsPT09Qz9nLm91dHB1dEVuY29kaW5nOkMudGV4dHVyZS5lbmNvZGluZyxzPVouZ2V0KG4uZW52TWFwfHxhKSxsPVkuZ2V0KG4pLGM9dS5zdGF0ZS5saWdodHM7ITAhPT16fHwhMCE9PUgmJnQ9PT14fHxudC5zZXRTdGF0ZShuLHQsdD09PXgmJm4uaWQ9PT12KSxuLnZlcnNpb249PT1sLl9fdmVyc2lvbj9uLmZvZyYmbC5mb2chPT1pfHxsLmVudmlyb25tZW50IT09YXx8bC5uZWVkc0xpZ2h0cyYmbC5saWdodHNTdGF0ZVZlcnNpb24hPT1jLnN0YXRlLnZlcnNpb24/eHQobixlLG8pOnZvaWQgMD09PWwubnVtQ2xpcHBpbmdQbGFuZXN8fGwubnVtQ2xpcHBpbmdQbGFuZXM9PT1udC5udW1QbGFuZXMmJmwubnVtSW50ZXJzZWN0aW9uPT09bnQubnVtSW50ZXJzZWN0aW9uPyhsLm91dHB1dEVuY29kaW5nIT09cnx8bC5lbnZNYXAhPT1zKSYmeHQobixlLG8pOnh0KG4sZSxvKTooeHQobixlLG8pLGwuX192ZXJzaW9uPW4udmVyc2lvbik7bGV0IGQ9ITEscD0hMSxtPSExO2NvbnN0IGY9bC5wcm9ncmFtLGg9Zi5nZXRVbmlmb3JtcygpLGI9bC51bmlmb3JtcztpZihXLnVzZVByb2dyYW0oZi5wcm9ncmFtKSYmKGQ9ITAscD0hMCxtPSEwKSxuLmlkIT09diYmKHY9bi5pZCxwPSEwKSxkfHx4IT09dCl7aWYoaC5zZXRWYWx1ZShjdCwicHJvamVjdGlvbk1hdHJpeCIsdC5wcm9qZWN0aW9uTWF0cml4KSxVLmxvZ2FyaXRobWljRGVwdGhCdWZmZXImJmguc2V0VmFsdWUoY3QsImxvZ0RlcHRoQnVmRkMiLDIvKE1hdGgubG9nKHQuZmFyKzEpL01hdGguTE4yKSkseCE9PXQmJih4PXQscD0hMCxtPSEwKSxuLmlzU2hhZGVyTWF0ZXJpYWx8fG4uaXNNZXNoUGhvbmdNYXRlcmlhbHx8bi5pc01lc2hUb29uTWF0ZXJpYWx8fG4uaXNNZXNoU3RhbmRhcmRNYXRlcmlhbHx8bi5lbnZNYXApe2NvbnN0IGU9aC5tYXAuY2FtZXJhUG9zaXRpb247dm9pZCAwIT09ZSYmZS5zZXRWYWx1ZShjdCxMLnNldEZyb21NYXRyaXhQb3NpdGlvbih0Lm1hdHJpeFdvcmxkKSl9KG4uaXNNZXNoUGhvbmdNYXRlcmlhbHx8bi5pc01lc2hUb29uTWF0ZXJpYWx8fG4uaXNNZXNoTGFtYmVydE1hdGVyaWFsfHxuLmlzTWVzaEJhc2ljTWF0ZXJpYWx8fG4uaXNNZXNoU3RhbmRhcmRNYXRlcmlhbHx8bi5pc1NoYWRlck1hdGVyaWFsKSYmaC5zZXRWYWx1ZShjdCwiaXNPcnRob2dyYXBoaWMiLCEwPT09dC5pc09ydGhvZ3JhcGhpY0NhbWVyYSksKG4uaXNNZXNoUGhvbmdNYXRlcmlhbHx8bi5pc01lc2hUb29uTWF0ZXJpYWx8fG4uaXNNZXNoTGFtYmVydE1hdGVyaWFsfHxuLmlzTWVzaEJhc2ljTWF0ZXJpYWx8fG4uaXNNZXNoU3RhbmRhcmRNYXRlcmlhbHx8bi5pc1NoYWRlck1hdGVyaWFsfHxuLmlzU2hhZG93TWF0ZXJpYWx8fG4uc2tpbm5pbmcpJiZoLnNldFZhbHVlKGN0LCJ2aWV3TWF0cml4Iix0Lm1hdHJpeFdvcmxkSW52ZXJzZSl9aWYobi5za2lubmluZyl7aC5zZXRPcHRpb25hbChjdCxvLCJiaW5kTWF0cml4IiksaC5zZXRPcHRpb25hbChjdCxvLCJiaW5kTWF0cml4SW52ZXJzZSIpO2NvbnN0IHQ9by5za2VsZXRvbjtpZih0KXtjb25zdCBlPXQuYm9uZXM7aWYoVS5mbG9hdFZlcnRleFRleHR1cmVzKXtpZihudWxsPT09dC5ib25lVGV4dHVyZSl7bGV0IG49TWF0aC5zcXJ0KDQqZS5sZW5ndGgpO249aml0LmNlaWxQb3dlck9mVHdvKG4pLG49TWF0aC5tYXgobiw0KTtjb25zdCBvPW5ldyBGbG9hdDMyQXJyYXkobipuKjQpO28uc2V0KHQuYm9uZU1hdHJpY2VzKTtjb25zdCBpPW5ldyBQc3QobyxuLG4sUGl0LE1pdCk7dC5ib25lTWF0cmljZXM9byx0LmJvbmVUZXh0dXJlPWksdC5ib25lVGV4dHVyZVNpemU9bn1oLnNldFZhbHVlKGN0LCJib25lVGV4dHVyZSIsdC5ib25lVGV4dHVyZSxxKSxoLnNldFZhbHVlKGN0LCJib25lVGV4dHVyZVNpemUiLHQuYm9uZVRleHR1cmVTaXplKX1lbHNlIGguc2V0T3B0aW9uYWwoY3QsdCwiYm9uZU1hdHJpY2VzIil9fXJldHVybihwfHxsLnJlY2VpdmVTaGFkb3chPT1vLnJlY2VpdmVTaGFkb3cpJiYobC5yZWNlaXZlU2hhZG93PW8ucmVjZWl2ZVNoYWRvdyxoLnNldFZhbHVlKGN0LCJyZWNlaXZlU2hhZG93IixvLnJlY2VpdmVTaGFkb3cpKSxwJiYoaC5zZXRWYWx1ZShjdCwidG9uZU1hcHBpbmdFeHBvc3VyZSIsZy50b25lTWFwcGluZ0V4cG9zdXJlKSxsLm5lZWRzTGlnaHRzJiYoZnVuY3Rpb24geSh0LGUpe3QuYW1iaWVudExpZ2h0Q29sb3IubmVlZHNVcGRhdGU9ZSx0LmxpZ2h0UHJvYmUubmVlZHNVcGRhdGU9ZSx0LmRpcmVjdGlvbmFsTGlnaHRzLm5lZWRzVXBkYXRlPWUsdC5kaXJlY3Rpb25hbExpZ2h0U2hhZG93cy5uZWVkc1VwZGF0ZT1lLHQucG9pbnRMaWdodHMubmVlZHNVcGRhdGU9ZSx0LnBvaW50TGlnaHRTaGFkb3dzLm5lZWRzVXBkYXRlPWUsdC5zcG90TGlnaHRzLm5lZWRzVXBkYXRlPWUsdC5zcG90TGlnaHRTaGFkb3dzLm5lZWRzVXBkYXRlPWUsdC5yZWN0QXJlYUxpZ2h0cy5uZWVkc1VwZGF0ZT1lLHQuaGVtaXNwaGVyZUxpZ2h0cy5uZWVkc1VwZGF0ZT1lfSkoYixtKSxpJiZuLmZvZyYmJC5yZWZyZXNoRm9nVW5pZm9ybXMoYixpKSwkLnJlZnJlc2hNYXRlcmlhbFVuaWZvcm1zKGIsbixELFMpLEdsdC51cGxvYWQoY3QsbC51bmlmb3Jtc0xpc3QsYixxKSksbi5pc1NoYWRlck1hdGVyaWFsJiYhMD09PW4udW5pZm9ybXNOZWVkVXBkYXRlJiYoR2x0LnVwbG9hZChjdCxsLnVuaWZvcm1zTGlzdCxiLHEpLG4udW5pZm9ybXNOZWVkVXBkYXRlPSExKSxuLmlzU3ByaXRlTWF0ZXJpYWwmJmguc2V0VmFsdWUoY3QsImNlbnRlciIsby5jZW50ZXIpLGguc2V0VmFsdWUoY3QsIm1vZGVsVmlld01hdHJpeCIsby5tb2RlbFZpZXdNYXRyaXgpLGguc2V0VmFsdWUoY3QsIm5vcm1hbE1hdHJpeCIsby5ub3JtYWxNYXRyaXgpLGguc2V0VmFsdWUoY3QsIm1vZGVsTWF0cml4IixvLm1hdHJpeFdvcmxkKSxmfV90LnNldEFuaW1hdGlvbkxvb3AoKGZ1bmN0aW9uIFB0KHQpe210LmlzUHJlc2VudGluZ3x8eXQmJnl0KHQpfSkpLCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZfdC5zZXRDb250ZXh0KHdpbmRvdyksdGhpcy5zZXRBbmltYXRpb25Mb29wPWZ1bmN0aW9uKHQpe3l0PXQsbXQuc2V0QW5pbWF0aW9uTG9vcCh0KSxudWxsPT09dD9fdC5zdG9wKCk6X3Quc3RhcnQoKX0sdGhpcy5yZW5kZXI9ZnVuY3Rpb24odCxlKXtsZXQgbixvO2lmKHZvaWQgMCE9PWFyZ3VtZW50c1syXSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZW5kZXIoKTogdGhlIHJlbmRlclRhcmdldCBhcmd1bWVudCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnNldFJlbmRlclRhcmdldCgpIGluc3RlYWQuIiksbj1hcmd1bWVudHNbMl0pLHZvaWQgMCE9PWFyZ3VtZW50c1szXSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZW5kZXIoKTogdGhlIGZvcmNlQ2xlYXIgYXJndW1lbnQgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5jbGVhcigpIGluc3RlYWQuIiksbz1hcmd1bWVudHNbM10pLHZvaWQgMCE9PWUmJiEwIT09ZS5pc0NhbWVyYSlyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlbmRlcjogY2FtZXJhIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5DYW1lcmEuIik7aWYoITA9PT1oKXJldHVybjtsdC5yZXNldERlZmF1bHRTdGF0ZSgpLHY9LTEseD1udWxsLCEwPT09dC5hdXRvVXBkYXRlJiZ0LnVwZGF0ZU1hdHJpeFdvcmxkKCksbnVsbD09PWUucGFyZW50JiZlLnVwZGF0ZU1hdHJpeFdvcmxkKCksITA9PT1tdC5lbmFibGVkJiYhMD09PW10LmlzUHJlc2VudGluZyYmKGU9bXQuZ2V0Q2FtZXJhKGUpKSwhMD09PXQuaXNTY2VuZSYmdC5vbkJlZm9yZVJlbmRlcihnLHQsZSxufHxDKSx1PWV0LmdldCh0LGYubGVuZ3RoKSx1LmluaXQoKSxmLnB1c2godSksRi5tdWx0aXBseU1hdHJpY2VzKGUucHJvamVjdGlvbk1hdHJpeCxlLm1hdHJpeFdvcmxkSW52ZXJzZSksSS5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeChGKSxIPXRoaXMubG9jYWxDbGlwcGluZ0VuYWJsZWQsej1udC5pbml0KHRoaXMuY2xpcHBpbmdQbGFuZXMsSCxlKSxtPXR0LmdldCh0LGUpLG0uaW5pdCgpLEN0KHQsZSwwLGcuc29ydE9iamVjdHMpLG0uZmluaXNoKCksITA9PT1nLnNvcnRPYmplY3RzJiZtLnNvcnQoRSxBKSwhMD09PXomJm50LmJlZ2luU2hhZG93cygpO2NvbnN0IGk9dS5zdGF0ZS5zaGFkb3dzQXJyYXk7dXQucmVuZGVyKGksdCxlKSx1LnNldHVwTGlnaHRzKCksdS5zZXR1cExpZ2h0c1ZpZXcoZSksITA9PT16JiZudC5lbmRTaGFkb3dzKCksITA9PT10aGlzLmluZm8uYXV0b1Jlc2V0JiZ0aGlzLmluZm8ucmVzZXQoKSx2b2lkIDAhPT1uJiZ0aGlzLnNldFJlbmRlclRhcmdldChuKSxvdC5yZW5kZXIobSx0LGUsbyk7Y29uc3QgYT1tLm9wYXF1ZSxyPW0udHJhbnNwYXJlbnQ7YS5sZW5ndGg+MCYmTXQoYSx0LGUpLHIubGVuZ3RoPjAmJk10KHIsdCxlKSwhMD09PXQuaXNTY2VuZSYmdC5vbkFmdGVyUmVuZGVyKGcsdCxlKSxudWxsIT09QyYmKHEudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwKEMpLHEudXBkYXRlTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQoQykpLFcuYnVmZmVycy5kZXB0aC5zZXRUZXN0KCEwKSxXLmJ1ZmZlcnMuZGVwdGguc2V0TWFzayghMCksVy5idWZmZXJzLmNvbG9yLnNldE1hc2soITApLFcuc2V0UG9seWdvbk9mZnNldCghMSksZi5wb3AoKSx1PWYubGVuZ3RoPjA/ZltmLmxlbmd0aC0xXTpudWxsLG09bnVsbH0sdGhpcy5zZXRGcmFtZWJ1ZmZlcj1mdW5jdGlvbih0KXtiIT09dCYmbnVsbD09PUMmJmN0LmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCx0KSxiPXR9LHRoaXMuZ2V0QWN0aXZlQ3ViZUZhY2U9ZnVuY3Rpb24oKXtyZXR1cm4geX0sdGhpcy5nZXRBY3RpdmVNaXBtYXBMZXZlbD1mdW5jdGlvbigpe3JldHVybiBffSx0aGlzLmdldFJlbmRlckxpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gbX0sdGhpcy5zZXRSZW5kZXJMaXN0PWZ1bmN0aW9uKHQpe209dH0sdGhpcy5nZXRSZW5kZXJUYXJnZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gQ30sdGhpcy5zZXRSZW5kZXJUYXJnZXQ9ZnVuY3Rpb24odCxlPTAsbj0wKXtDPXQseT1lLF89bix0JiZ2b2lkIDA9PT1ZLmdldCh0KS5fX3dlYmdsRnJhbWVidWZmZXImJnEuc2V0dXBSZW5kZXJUYXJnZXQodCk7bGV0IG89YixpPSExO2lmKHQpe2NvbnN0IG49WS5nZXQodCkuX193ZWJnbEZyYW1lYnVmZmVyO3QuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQ/KG89bltlXSxpPSEwKTpvPXQuaXNXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0P1kuZ2V0KHQpLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlcjpuLE8uY29weSh0LnZpZXdwb3J0KSxQLmNvcHkodC5zY2lzc29yKSx3PXQuc2Npc3NvclRlc3R9ZWxzZSBPLmNvcHkoUikubXVsdGlwbHlTY2FsYXIoRCkuZmxvb3IoKSxQLmNvcHkoVCkubXVsdGlwbHlTY2FsYXIoRCkuZmxvb3IoKSx3PU47aWYoTSE9PW8mJihjdC5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbyksTT1vKSxXLnZpZXdwb3J0KE8pLFcuc2Npc3NvcihQKSxXLnNldFNjaXNzb3JUZXN0KHcpLGkpe2NvbnN0IG89WS5nZXQodC50ZXh0dXJlKTtjdC5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzNjA2NCwzNDA2OStlLG8uX193ZWJnbFRleHR1cmUsbil9fSx0aGlzLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM9ZnVuY3Rpb24odCxlLG4sbyxpLGEscil7aWYoIXR8fCF0LmlzV2ViR0xSZW5kZXJUYXJnZXQpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZW5kZXJUYXJnZXQgaXMgbm90IFRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0LiIpO2xldCBzPVkuZ2V0KHQpLl9fd2ViZ2xGcmFtZWJ1ZmZlcjtpZih0LmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0JiZ2b2lkIDAhPT1yJiYocz1zW3JdKSxzKXtsZXQgcj0hMTtzIT09TSYmKGN0LmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxzKSxyPSEwKTt0cnl7Y29uc3Qgcz10LnRleHR1cmUsbD1zLmZvcm1hdCxjPXMudHlwZTtpZihsIT09UGl0JiZzdC5jb252ZXJ0KGwpIT09Y3QuZ2V0UGFyYW1ldGVyKDM1NzM5KSlyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM6IHJlbmRlclRhcmdldCBpcyBub3QgaW4gUkdCQSBvciBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkIGZvcm1hdC4iKTtjb25zdCBkPWM9PT12aXQmJihqLmhhcygiRVhUX2NvbG9yX2J1ZmZlcl9oYWxmX2Zsb2F0Iil8fFUuaXNXZWJHTDImJmouaGFzKCJFWFRfY29sb3JfYnVmZmVyX2Zsb2F0IikpO2lmKCEoMTAwOT09PWN8fHN0LmNvbnZlcnQoYyk9PT1jdC5nZXRQYXJhbWV0ZXIoMzU3MzgpfHxjPT09TWl0JiYoVS5pc1dlYkdMMnx8ai5oYXMoIk9FU190ZXh0dXJlX2Zsb2F0Iil8fGouaGFzKCJXRUJHTF9jb2xvcl9idWZmZXJfZmxvYXQiKSl8fGQpKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXIucmVhZFJlbmRlclRhcmdldFBpeGVsczogcmVuZGVyVGFyZ2V0IGlzIG5vdCBpbiBVbnNpZ25lZEJ5dGVUeXBlIG9yIGltcGxlbWVudGF0aW9uIGRlZmluZWQgdHlwZS4iKTszNjA1Mz09PWN0LmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoMzYxNjApP2U+PTAmJmU8PXQud2lkdGgtbyYmbj49MCYmbjw9dC5oZWlnaHQtaSYmY3QucmVhZFBpeGVscyhlLG4sbyxpLHN0LmNvbnZlcnQobCksc3QuY29udmVydChjKSxhKTpjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM6IHJlYWRQaXhlbHMgZnJvbSByZW5kZXJUYXJnZXQgZmFpbGVkLiBGcmFtZWJ1ZmZlciBub3QgY29tcGxldGUuIil9ZmluYWxseXtyJiZjdC5iaW5kRnJhbWVidWZmZXIoMzYxNjAsTSl9fX0sdGhpcy5jb3B5RnJhbWVidWZmZXJUb1RleHR1cmU9ZnVuY3Rpb24odCxlLG49MCl7Y29uc3Qgbz1NYXRoLnBvdygyLC1uKSxpPU1hdGguZmxvb3IoZS5pbWFnZS53aWR0aCpvKSxhPU1hdGguZmxvb3IoZS5pbWFnZS5oZWlnaHQqbykscj1zdC5jb252ZXJ0KGUuZm9ybWF0KTtxLnNldFRleHR1cmUyRChlLDApLGN0LmNvcHlUZXhJbWFnZTJEKDM1NTMsbixyLHQueCx0LnksaSxhLDApLFcudW5iaW5kVGV4dHVyZSgpfSx0aGlzLmNvcHlUZXh0dXJlVG9UZXh0dXJlPWZ1bmN0aW9uKHQsZSxuLG89MCl7Y29uc3QgaT1lLmltYWdlLndpZHRoLGE9ZS5pbWFnZS5oZWlnaHQscj1zdC5jb252ZXJ0KG4uZm9ybWF0KSxzPXN0LmNvbnZlcnQobi50eXBlKTtxLnNldFRleHR1cmUyRChuLDApLGN0LnBpeGVsU3RvcmVpKDM3NDQwLG4uZmxpcFkpLGN0LnBpeGVsU3RvcmVpKDM3NDQxLG4ucHJlbXVsdGlwbHlBbHBoYSksY3QucGl4ZWxTdG9yZWkoMzMxNyxuLnVucGFja0FsaWdubWVudCksZS5pc0RhdGFUZXh0dXJlP2N0LnRleFN1YkltYWdlMkQoMzU1MyxvLHQueCx0LnksaSxhLHIscyxlLmltYWdlLmRhdGEpOmUuaXNDb21wcmVzc2VkVGV4dHVyZT9jdC5jb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCgzNTUzLG8sdC54LHQueSxlLm1pcG1hcHNbMF0ud2lkdGgsZS5taXBtYXBzWzBdLmhlaWdodCxyLGUubWlwbWFwc1swXS5kYXRhKTpjdC50ZXhTdWJJbWFnZTJEKDM1NTMsbyx0LngsdC55LHIscyxlLmltYWdlKSwwPT09byYmbi5nZW5lcmF0ZU1pcG1hcHMmJmN0LmdlbmVyYXRlTWlwbWFwKDM1NTMpLFcudW5iaW5kVGV4dHVyZSgpfSx0aGlzLmluaXRUZXh0dXJlPWZ1bmN0aW9uKHQpe3Euc2V0VGV4dHVyZTJEKHQsMCksVy51bmJpbmRUZXh0dXJlKCl9LHRoaXMucmVzZXRTdGF0ZT1mdW5jdGlvbigpe1cucmVzZXQoKSxsdC5yZXNldCgpfSwidW5kZWZpbmVkIiE9dHlwZW9mIF9fVEhSRUVfREVWVE9PTFNfXyYmX19USFJFRV9ERVZUT09MU19fLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJvYnNlcnZlIix7ZGV0YWlsOnRoaXN9KSl9ZnVuY3Rpb24gemN0KHQpe0ljdC5jYWxsKHRoaXMsdCl9KE9jdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh4cnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9T2N0LE9jdC5wcm90b3R5cGUuaXNNZXNoRGVwdGhNYXRlcmlhbD0hMCxPY3QucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24odCl7cmV0dXJuIHhydC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy5kZXB0aFBhY2tpbmc9dC5kZXB0aFBhY2tpbmcsdGhpcy5za2lubmluZz10LnNraW5uaW5nLHRoaXMubW9ycGhUYXJnZXRzPXQubW9ycGhUYXJnZXRzLHRoaXMubWFwPXQubWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzfSwoUGN0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHhydC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1QY3QsUGN0LnByb3RvdHlwZS5pc01lc2hEaXN0YW5jZU1hdGVyaWFsPSEwLFBjdC5wcm90b3R5cGUuY29weT1mdW5jdGlvbih0KXtyZXR1cm4geHJ0LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLnJlZmVyZW5jZVBvc2l0aW9uLmNvcHkodC5yZWZlcmVuY2VQb3NpdGlvbiksdGhpcy5uZWFyRGlzdGFuY2U9dC5uZWFyRGlzdGFuY2UsdGhpcy5mYXJEaXN0YW5jZT10LmZhckRpc3RhbmNlLHRoaXMuc2tpbm5pbmc9dC5za2lubmluZyx0aGlzLm1vcnBoVGFyZ2V0cz10Lm1vcnBoVGFyZ2V0cyx0aGlzLm1hcD10Lm1hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5kaXNwbGFjZW1lbnRNYXA9dC5kaXNwbGFjZW1lbnRNYXAsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT10LmRpc3BsYWNlbWVudFNjYWxlLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz10LmRpc3BsYWNlbWVudEJpYXMsdGhpc30sRWN0LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoQ3N0LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOkVjdCxpc0FycmF5Q2FtZXJhOiEwfSksQWN0LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoUWF0LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOkFjdCxpc0dyb3VwOiEwfSksT2JqZWN0LmFzc2lnbihSY3QucHJvdG90eXBlLHtjb25zdHJ1Y3RvcjpSY3QsZ2V0SGFuZFNwYWNlOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PT10aGlzLl9oYW5kJiYodGhpcy5faGFuZD1uZXcgQWN0LHRoaXMuX2hhbmQubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLl9oYW5kLnZpc2libGU9ITEsdGhpcy5faGFuZC5qb2ludHM9e30sdGhpcy5faGFuZC5pbnB1dFN0YXRlPXtwaW5jaGluZzohMX0pLHRoaXMuX2hhbmR9LGdldFRhcmdldFJheVNwYWNlOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PT10aGlzLl90YXJnZXRSYXkmJih0aGlzLl90YXJnZXRSYXk9bmV3IEFjdCx0aGlzLl90YXJnZXRSYXkubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLl90YXJnZXRSYXkudmlzaWJsZT0hMSksdGhpcy5fdGFyZ2V0UmF5fSxnZXRHcmlwU3BhY2U6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09PXRoaXMuX2dyaXAmJih0aGlzLl9ncmlwPW5ldyBBY3QsdGhpcy5fZ3JpcC5tYXRyaXhBdXRvVXBkYXRlPSExLHRoaXMuX2dyaXAudmlzaWJsZT0hMSksdGhpcy5fZ3JpcH0sZGlzcGF0Y2hFdmVudDpmdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9PXRoaXMuX3RhcmdldFJheSYmdGhpcy5fdGFyZ2V0UmF5LmRpc3BhdGNoRXZlbnQodCksbnVsbCE9PXRoaXMuX2dyaXAmJnRoaXMuX2dyaXAuZGlzcGF0Y2hFdmVudCh0KSxudWxsIT09dGhpcy5faGFuZCYmdGhpcy5faGFuZC5kaXNwYXRjaEV2ZW50KHQpLHRoaXN9LGRpc2Nvbm5lY3Q6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzY29ubmVjdGVkIixkYXRhOnR9KSxudWxsIT09dGhpcy5fdGFyZ2V0UmF5JiYodGhpcy5fdGFyZ2V0UmF5LnZpc2libGU9ITEpLG51bGwhPT10aGlzLl9ncmlwJiYodGhpcy5fZ3JpcC52aXNpYmxlPSExKSxudWxsIT09dGhpcy5faGFuZCYmKHRoaXMuX2hhbmQudmlzaWJsZT0hMSksdGhpc30sdXBkYXRlOmZ1bmN0aW9uKHQsZSxuKXtsZXQgbz1udWxsLGk9bnVsbCxhPW51bGw7Y29uc3Qgcj10aGlzLl90YXJnZXRSYXkscz10aGlzLl9ncmlwLGw9dGhpcy5faGFuZDtpZih0JiYidmlzaWJsZS1ibHVycmVkIiE9PWUuc2Vzc2lvbi52aXNpYmlsaXR5U3RhdGUpaWYobCYmdC5oYW5kKXthPSEwO2Zvcihjb25zdCBvIG9mIHQuaGFuZC52YWx1ZXMoKSl7Y29uc3QgdD1lLmdldEpvaW50UG9zZShvLG4pO2lmKHZvaWQgMD09PWwuam9pbnRzW28uam9pbnROYW1lXSl7Y29uc3QgdD1uZXcgQWN0O3QubWF0cml4QXV0b1VwZGF0ZT0hMSx0LnZpc2libGU9ITEsbC5qb2ludHNbby5qb2ludE5hbWVdPXQsbC5hZGQodCl9Y29uc3QgaT1sLmpvaW50c1tvLmpvaW50TmFtZV07bnVsbCE9PXQmJihpLm1hdHJpeC5mcm9tQXJyYXkodC50cmFuc2Zvcm0ubWF0cml4KSxpLm1hdHJpeC5kZWNvbXBvc2UoaS5wb3NpdGlvbixpLnJvdGF0aW9uLGkuc2NhbGUpLGkuam9pbnRSYWRpdXM9dC5yYWRpdXMpLGkudmlzaWJsZT1udWxsIT09dH1jb25zdCBvPWwuam9pbnRzWyJpbmRleC1maW5nZXItdGlwIl0ucG9zaXRpb24uZGlzdGFuY2VUbyhsLmpvaW50c1sidGh1bWItdGlwIl0ucG9zaXRpb24pLGk9LjAyLHI9LjAwNTtsLmlucHV0U3RhdGUucGluY2hpbmcmJm8+aStyPyhsLmlucHV0U3RhdGUucGluY2hpbmc9ITEsdGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJwaW5jaGVuZCIsaGFuZGVkbmVzczp0LmhhbmRlZG5lc3MsdGFyZ2V0OnRoaXN9KSk6IWwuaW5wdXRTdGF0ZS5waW5jaGluZyYmbzw9aS1yJiYobC5pbnB1dFN0YXRlLnBpbmNoaW5nPSEwLHRoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToicGluY2hzdGFydCIsaGFuZGVkbmVzczp0LmhhbmRlZG5lc3MsdGFyZ2V0OnRoaXN9KSl9ZWxzZSBudWxsIT09ciYmKG89ZS5nZXRQb3NlKHQudGFyZ2V0UmF5U3BhY2UsbiksbnVsbCE9PW8mJihyLm1hdHJpeC5mcm9tQXJyYXkoby50cmFuc2Zvcm0ubWF0cml4KSxyLm1hdHJpeC5kZWNvbXBvc2Uoci5wb3NpdGlvbixyLnJvdGF0aW9uLHIuc2NhbGUpKSksbnVsbCE9PXMmJnQuZ3JpcFNwYWNlJiYoaT1lLmdldFBvc2UodC5ncmlwU3BhY2UsbiksbnVsbCE9PWkmJihzLm1hdHJpeC5mcm9tQXJyYXkoaS50cmFuc2Zvcm0ubWF0cml4KSxzLm1hdHJpeC5kZWNvbXBvc2Uocy5wb3NpdGlvbixzLnJvdGF0aW9uLHMuc2NhbGUpKSk7cmV0dXJuIG51bGwhPT1yJiYoci52aXNpYmxlPW51bGwhPT1vKSxudWxsIT09cyYmKHMudmlzaWJsZT1udWxsIT09aSksbnVsbCE9PWwmJihsLnZpc2libGU9bnVsbCE9PWEpLHRoaXN9fSksT2JqZWN0LmFzc2lnbihUY3QucHJvdG90eXBlLExpdC5wcm90b3R5cGUpLHpjdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKEljdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3Rvcjp6Y3QsaXNXZWJHTDFSZW5kZXJlcjohMH0pO2NsYXNzIEhjdCBleHRlbmRzIFFhdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlzU2NlbmUiLHt2YWx1ZTohMH0pLHRoaXMudHlwZT0iU2NlbmUiLHRoaXMuYmFja2dyb3VuZD1udWxsLHRoaXMuZW52aXJvbm1lbnQ9bnVsbCx0aGlzLmZvZz1udWxsLHRoaXMub3ZlcnJpZGVNYXRlcmlhbD1udWxsLHRoaXMuYXV0b1VwZGF0ZT0hMCwidW5kZWZpbmVkIiE9dHlwZW9mIF9fVEhSRUVfREVWVE9PTFNfXyYmX19USFJFRV9ERVZUT09MU19fLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJvYnNlcnZlIix7ZGV0YWlsOnRoaXN9KSl9Y29weSh0LGUpe3JldHVybiBzdXBlci5jb3B5KHQsZSksbnVsbCE9PXQuYmFja2dyb3VuZCYmKHRoaXMuYmFja2dyb3VuZD10LmJhY2tncm91bmQuY2xvbmUoKSksbnVsbCE9PXQuZW52aXJvbm1lbnQmJih0aGlzLmVudmlyb25tZW50PXQuZW52aXJvbm1lbnQuY2xvbmUoKSksbnVsbCE9PXQuZm9nJiYodGhpcy5mb2c9dC5mb2cuY2xvbmUoKSksbnVsbCE9PXQub3ZlcnJpZGVNYXRlcmlhbCYmKHRoaXMub3ZlcnJpZGVNYXRlcmlhbD10Lm92ZXJyaWRlTWF0ZXJpYWwuY2xvbmUoKSksdGhpcy5hdXRvVXBkYXRlPXQuYXV0b1VwZGF0ZSx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9dC5tYXRyaXhBdXRvVXBkYXRlLHRoaXN9dG9KU09OKHQpe2NvbnN0IGU9c3VwZXIudG9KU09OKHQpO3JldHVybiBudWxsIT09dGhpcy5iYWNrZ3JvdW5kJiYoZS5vYmplY3QuYmFja2dyb3VuZD10aGlzLmJhY2tncm91bmQudG9KU09OKHQpKSxudWxsIT09dGhpcy5lbnZpcm9ubWVudCYmKGUub2JqZWN0LmVudmlyb25tZW50PXRoaXMuZW52aXJvbm1lbnQudG9KU09OKHQpKSxudWxsIT09dGhpcy5mb2cmJihlLm9iamVjdC5mb2c9dGhpcy5mb2cudG9KU09OKCkpLGV9fWZ1bmN0aW9uIEZjdCh0LGUpe3RoaXMuYXJyYXk9dCx0aGlzLnN0cmlkZT1lLHRoaXMuY291bnQ9dm9pZCAwIT09dD90Lmxlbmd0aC9lOjAsdGhpcy51c2FnZT16aXQsdGhpcy51cGRhdGVSYW5nZT17b2Zmc2V0OjAsY291bnQ6LTF9LHRoaXMudmVyc2lvbj0wLHRoaXMudXVpZD1qaXQuZ2VuZXJhdGVVVUlEKCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KEZjdC5wcm90b3R5cGUsIm5lZWRzVXBkYXRlIix7c2V0OmZ1bmN0aW9uKHQpeyEwPT09dCYmdGhpcy52ZXJzaW9uKyt9fSksT2JqZWN0LmFzc2lnbihGY3QucHJvdG90eXBlLHtpc0ludGVybGVhdmVkQnVmZmVyOiEwLG9uVXBsb2FkQ2FsbGJhY2s6ZnVuY3Rpb24oKXt9LHNldFVzYWdlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnVzYWdlPXQsdGhpc30sY29weTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hcnJheT1uZXcgdC5hcnJheS5jb25zdHJ1Y3Rvcih0LmFycmF5KSx0aGlzLmNvdW50PXQuY291bnQsdGhpcy5zdHJpZGU9dC5zdHJpZGUsdGhpcy51c2FnZT10LnVzYWdlLHRoaXN9LGNvcHlBdDpmdW5jdGlvbih0LGUsbil7dCo9dGhpcy5zdHJpZGUsbio9ZS5zdHJpZGU7Zm9yKGxldCBvPTAsaT10aGlzLnN0cmlkZTtvPGk7bysrKXRoaXMuYXJyYXlbdCtvXT1lLmFycmF5W24rb107cmV0dXJuIHRoaXN9LHNldDpmdW5jdGlvbih0LGU9MCl7cmV0dXJuIHRoaXMuYXJyYXkuc2V0KHQsZSksdGhpc30sY2xvbmU6ZnVuY3Rpb24odCl7dm9pZCAwPT09dC5hcnJheUJ1ZmZlcnMmJih0LmFycmF5QnVmZmVycz17fSksdm9pZCAwPT09dGhpcy5hcnJheS5idWZmZXIuX3V1aWQmJih0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZD1qaXQuZ2VuZXJhdGVVVUlEKCkpLHZvaWQgMD09PXQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXSYmKHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT10aGlzLmFycmF5LnNsaWNlKDApLmJ1ZmZlcik7Y29uc3QgZT1uZXcgRmN0KG5ldyB0aGlzLmFycmF5LmNvbnN0cnVjdG9yKHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXSksdGhpcy5zdHJpZGUpO3JldHVybiBlLnNldFVzYWdlKHRoaXMudXNhZ2UpLGV9LG9uVXBsb2FkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9uVXBsb2FkQ2FsbGJhY2s9dCx0aGlzfSx0b0pTT046ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQuYXJyYXlCdWZmZXJzJiYodC5hcnJheUJ1ZmZlcnM9e30pLHZvaWQgMD09PXRoaXMuYXJyYXkuYnVmZmVyLl91dWlkJiYodGhpcy5hcnJheS5idWZmZXIuX3V1aWQ9aml0LmdlbmVyYXRlVVVJRCgpKSx2b2lkIDA9PT10LmFycmF5QnVmZmVyc1t0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZF0mJih0LmFycmF5QnVmZmVyc1t0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZF09QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobmV3IFVpbnQzMkFycmF5KHRoaXMuYXJyYXkuYnVmZmVyKSkpLHt1dWlkOnRoaXMudXVpZCxidWZmZXI6dGhpcy5hcnJheS5idWZmZXIuX3V1aWQsdHlwZTp0aGlzLmFycmF5LmNvbnN0cnVjdG9yLm5hbWUsc3RyaWRlOnRoaXMuc3RyaWRlfX19KTtjb25zdCBMY3Q9bmV3ICRpdDtmdW5jdGlvbiBCY3QodCxlLG4sbyl7dGhpcy5uYW1lPSIiLHRoaXMuZGF0YT10LHRoaXMuaXRlbVNpemU9ZSx0aGlzLm9mZnNldD1uLHRoaXMubm9ybWFsaXplZD0hMD09PW99ZnVuY3Rpb24gVmN0KHQpe3hydC5jYWxsKHRoaXMpLHRoaXMudHlwZT0iU3ByaXRlTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IENydCgxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5yb3RhdGlvbj0wLHRoaXMuc2l6ZUF0dGVudWF0aW9uPSEwLHRoaXMudHJhbnNwYXJlbnQ9ITAsdGhpcy5zZXRWYWx1ZXModCl9bGV0IGpjdDtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhCY3QucHJvdG90eXBlLHtjb3VudDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YS5jb3VudH19LGFycmF5OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5fX0sbmVlZHNVcGRhdGU6e3NldDpmdW5jdGlvbih0KXt0aGlzLmRhdGEubmVlZHNVcGRhdGU9dH19fSksT2JqZWN0LmFzc2lnbihCY3QucHJvdG90eXBlLHtpc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlOiEwLGFwcGx5TWF0cml4NDpmdW5jdGlvbih0KXtmb3IobGV0IGU9MCxuPXRoaXMuZGF0YS5jb3VudDtlPG47ZSsrKUxjdC54PXRoaXMuZ2V0WChlKSxMY3QueT10aGlzLmdldFkoZSksTGN0Lno9dGhpcy5nZXRaKGUpLExjdC5hcHBseU1hdHJpeDQodCksdGhpcy5zZXRYWVooZSxMY3QueCxMY3QueSxMY3Queik7cmV0dXJuIHRoaXN9LHNldFg6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldF09ZSx0aGlzfSxzZXRZOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrMV09ZSx0aGlzfSxzZXRaOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrMl09ZSx0aGlzfSxzZXRXOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrM109ZSx0aGlzfSxnZXRYOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0XX0sZ2V0WTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCsxXX0sZ2V0WjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCsyXX0sZ2V0VzpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCszXX0sc2V0WFk6ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbKHQ9dCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KSswXT1lLHRoaXMuZGF0YS5hcnJheVt0KzFdPW4sdGhpc30sc2V0WFlaOmZ1bmN0aW9uKHQsZSxuLG8pe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbKHQ9dCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KSswXT1lLHRoaXMuZGF0YS5hcnJheVt0KzFdPW4sdGhpcy5kYXRhLmFycmF5W3QrMl09byx0aGlzfSxzZXRYWVpXOmZ1bmN0aW9uKHQsZSxuLG8saSl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVsodD10KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQpKzBdPWUsdGhpcy5kYXRhLmFycmF5W3QrMV09bix0aGlzLmRhdGEuYXJyYXlbdCsyXT1vLHRoaXMuZGF0YS5hcnJheVt0KzNdPWksdGhpc30sY2xvbmU6ZnVuY3Rpb24odCl7aWYodm9pZCAwPT09dCl7Y29uc29sZS5sb2coIlRIUkVFLkludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlLmNsb25lKCk6IENsb25pbmcgYW4gaW50ZXJsYXZlZCBidWZmZXIgYXR0cmlidXRlIHdpbGwgZGVpbnRlcmxlYXZlIGJ1ZmZlciBkYXRhLiIpO2NvbnN0IHQ9W107Zm9yKGxldCBlPTA7ZTx0aGlzLmNvdW50O2UrKyl7Y29uc3Qgbj1lKnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQ7Zm9yKGxldCBlPTA7ZTx0aGlzLml0ZW1TaXplO2UrKyl0LnB1c2godGhpcy5kYXRhLmFycmF5W24rZV0pfXJldHVybiBuZXcga3J0KG5ldyB0aGlzLmFycmF5LmNvbnN0cnVjdG9yKHQpLHRoaXMuaXRlbVNpemUsdGhpcy5ub3JtYWxpemVkKX1yZXR1cm4gdm9pZCAwPT09dC5pbnRlcmxlYXZlZEJ1ZmZlcnMmJih0LmludGVybGVhdmVkQnVmZmVycz17fSksdm9pZCAwPT09dC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdJiYodC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdPXRoaXMuZGF0YS5jbG9uZSh0KSksbmV3IEJjdCh0LmludGVybGVhdmVkQnVmZmVyc1t0aGlzLmRhdGEudXVpZF0sdGhpcy5pdGVtU2l6ZSx0aGlzLm9mZnNldCx0aGlzLm5vcm1hbGl6ZWQpfSx0b0pTT046ZnVuY3Rpb24odCl7aWYodm9pZCAwPT09dCl7Y29uc29sZS5sb2coIlRIUkVFLkludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlLnRvSlNPTigpOiBTZXJpYWxpemluZyBhbiBpbnRlcmxhdmVkIGJ1ZmZlciBhdHRyaWJ1dGUgd2lsbCBkZWludGVybGVhdmUgYnVmZmVyIGRhdGEuIik7Y29uc3QgdD1bXTtmb3IobGV0IGU9MDtlPHRoaXMuY291bnQ7ZSsrKXtjb25zdCBuPWUqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldDtmb3IobGV0IGU9MDtlPHRoaXMuaXRlbVNpemU7ZSsrKXQucHVzaCh0aGlzLmRhdGEuYXJyYXlbbitlXSl9cmV0dXJue2l0ZW1TaXplOnRoaXMuaXRlbVNpemUsdHlwZTp0aGlzLmFycmF5LmNvbnN0cnVjdG9yLm5hbWUsYXJyYXk6dCxub3JtYWxpemVkOnRoaXMubm9ybWFsaXplZH19cmV0dXJuIHZvaWQgMD09PXQuaW50ZXJsZWF2ZWRCdWZmZXJzJiYodC5pbnRlcmxlYXZlZEJ1ZmZlcnM9e30pLHZvaWQgMD09PXQuaW50ZXJsZWF2ZWRCdWZmZXJzW3RoaXMuZGF0YS51dWlkXSYmKHQuaW50ZXJsZWF2ZWRCdWZmZXJzW3RoaXMuZGF0YS51dWlkXT10aGlzLmRhdGEudG9KU09OKHQpKSx7aXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZTohMCxpdGVtU2l6ZTp0aGlzLml0ZW1TaXplLGRhdGE6dGhpcy5kYXRhLnV1aWQsb2Zmc2V0OnRoaXMub2Zmc2V0LG5vcm1hbGl6ZWQ6dGhpcy5ub3JtYWxpemVkfX19KSwoVmN0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHhydC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1WY3QsVmN0LnByb3RvdHlwZS5pc1Nwcml0ZU1hdGVyaWFsPSEwLFZjdC5wcm90b3R5cGUuY29weT1mdW5jdGlvbih0KXtyZXR1cm4geHJ0LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5tYXA9dC5tYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMucm90YXRpb249dC5yb3RhdGlvbix0aGlzLnNpemVBdHRlbnVhdGlvbj10LnNpemVBdHRlbnVhdGlvbix0aGlzfTtjb25zdCBVY3Q9bmV3ICRpdCxXY3Q9bmV3ICRpdCxHY3Q9bmV3ICRpdCxZY3Q9bmV3IFVpdCxxY3Q9bmV3IFVpdCxaY3Q9bmV3IGthdCxYY3Q9bmV3ICRpdCxLY3Q9bmV3ICRpdCxKY3Q9bmV3ICRpdCxRY3Q9bmV3IFVpdCwkY3Q9bmV3IFVpdCx0ZHQ9bmV3IFVpdDtmdW5jdGlvbiBlZHQodCl7aWYoUWF0LmNhbGwodGhpcyksdGhpcy50eXBlPSJTcHJpdGUiLHZvaWQgMD09PWpjdCl7amN0PW5ldyBacnQ7Y29uc3QgdD1uZXcgRmN0KG5ldyBGbG9hdDMyQXJyYXkoWy0uNSwtLjUsMCwwLDAsLjUsLS41LDAsMSwwLC41LC41LDAsMSwxLC0uNSwuNSwwLDAsMV0pLDUpO2pjdC5zZXRJbmRleChbMCwxLDIsMCwyLDNdKSxqY3Quc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IEJjdCh0LDMsMCwhMSkpLGpjdC5zZXRBdHRyaWJ1dGUoInV2IixuZXcgQmN0KHQsMiwzLCExKSl9dGhpcy5nZW9tZXRyeT1qY3QsdGhpcy5tYXRlcmlhbD12b2lkIDAhPT10P3Q6bmV3IFZjdCx0aGlzLmNlbnRlcj1uZXcgVWl0KC41LC41KX1mdW5jdGlvbiBuZHQodCxlLG4sbyxpLGEpe1ljdC5zdWJWZWN0b3JzKHQsbikuYWRkU2NhbGFyKC41KS5tdWx0aXBseShvKSx2b2lkIDAhPT1pPyhxY3QueD1hKlljdC54LWkqWWN0LnkscWN0Lnk9aSpZY3QueCthKlljdC55KTpxY3QuY29weShZY3QpLHQuY29weShlKSx0LngrPXFjdC54LHQueSs9cWN0LnksdC5hcHBseU1hdHJpeDQoWmN0KX1lZHQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShRYXQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6ZWR0LGlzU3ByaXRlOiEwLHJheWNhc3Q6ZnVuY3Rpb24odCxlKXtudWxsPT09dC5jYW1lcmEmJmNvbnNvbGUuZXJyb3IoJ1RIUkVFLlNwcml0ZTogIlJheWNhc3Rlci5jYW1lcmEiIG5lZWRzIHRvIGJlIHNldCBpbiBvcmRlciB0byByYXljYXN0IGFnYWluc3Qgc3ByaXRlcy4nKSxXY3Quc2V0RnJvbU1hdHJpeFNjYWxlKHRoaXMubWF0cml4V29ybGQpLFpjdC5jb3B5KHQuY2FtZXJhLm1hdHJpeFdvcmxkKSx0aGlzLm1vZGVsVmlld01hdHJpeC5tdWx0aXBseU1hdHJpY2VzKHQuY2FtZXJhLm1hdHJpeFdvcmxkSW52ZXJzZSx0aGlzLm1hdHJpeFdvcmxkKSxHY3Quc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubW9kZWxWaWV3TWF0cml4KSx0LmNhbWVyYS5pc1BlcnNwZWN0aXZlQ2FtZXJhJiYhMT09PXRoaXMubWF0ZXJpYWwuc2l6ZUF0dGVudWF0aW9uJiZXY3QubXVsdGlwbHlTY2FsYXIoLUdjdC56KTtjb25zdCBuPXRoaXMubWF0ZXJpYWwucm90YXRpb247bGV0IG8saTswIT09biYmKGk9TWF0aC5jb3Mobiksbz1NYXRoLnNpbihuKSk7Y29uc3QgYT10aGlzLmNlbnRlcjtuZHQoWGN0LnNldCgtLjUsLS41LDApLEdjdCxhLFdjdCxvLGkpLG5kdChLY3Quc2V0KC41LC0uNSwwKSxHY3QsYSxXY3QsbyxpKSxuZHQoSmN0LnNldCguNSwuNSwwKSxHY3QsYSxXY3QsbyxpKSxRY3Quc2V0KDAsMCksJGN0LnNldCgxLDApLHRkdC5zZXQoMSwxKTtsZXQgcj10LnJheS5pbnRlcnNlY3RUcmlhbmdsZShYY3QsS2N0LEpjdCwhMSxVY3QpO2lmKG51bGw9PT1yJiYobmR0KEtjdC5zZXQoLS41LC41LDApLEdjdCxhLFdjdCxvLGkpLCRjdC5zZXQoMCwxKSxyPXQucmF5LmludGVyc2VjdFRyaWFuZ2xlKFhjdCxKY3QsS2N0LCExLFVjdCksbnVsbD09PXIpKXJldHVybjtjb25zdCBzPXQucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKFVjdCk7czx0Lm5lYXJ8fHM+dC5mYXJ8fGUucHVzaCh7ZGlzdGFuY2U6cyxwb2ludDpVY3QuY2xvbmUoKSx1djp1cnQuZ2V0VVYoVWN0LFhjdCxLY3QsSmN0LFFjdCwkY3QsdGR0LG5ldyBVaXQpLGZhY2U6bnVsbCxvYmplY3Q6dGhpc30pfSxjb3B5OmZ1bmN0aW9uKHQpe3JldHVybiBRYXQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHZvaWQgMCE9PXQuY2VudGVyJiZ0aGlzLmNlbnRlci5jb3B5KHQuY2VudGVyKSx0aGlzLm1hdGVyaWFsPXQubWF0ZXJpYWwsdGhpc319KTtjb25zdCBvZHQ9bmV3ICRpdCxpZHQ9bmV3ICRpdDtmdW5jdGlvbiBhZHQoKXtRYXQuY2FsbCh0aGlzKSx0aGlzLl9jdXJyZW50TGV2ZWw9MCx0aGlzLnR5cGU9IkxPRCIsT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7bGV2ZWxzOntlbnVtZXJhYmxlOiEwLHZhbHVlOltdfX0pLHRoaXMuYXV0b1VwZGF0ZT0hMH1hZHQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShRYXQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6YWR0LGlzTE9EOiEwLGNvcHk6ZnVuY3Rpb24odCl7UWF0LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0LCExKTtjb25zdCBlPXQubGV2ZWxzO2ZvcihsZXQgdD0wLG49ZS5sZW5ndGg7dDxuO3QrKyl7Y29uc3Qgbj1lW3RdO3RoaXMuYWRkTGV2ZWwobi5vYmplY3QuY2xvbmUoKSxuLmRpc3RhbmNlKX1yZXR1cm4gdGhpcy5hdXRvVXBkYXRlPXQuYXV0b1VwZGF0ZSx0aGlzfSxhZGRMZXZlbDpmdW5jdGlvbih0LGU9MCl7ZT1NYXRoLmFicyhlKTtjb25zdCBuPXRoaXMubGV2ZWxzO2xldCBvO2ZvcihvPTA7bzxuLmxlbmd0aCYmIShlPG5bb10uZGlzdGFuY2UpO28rKyk7cmV0dXJuIG4uc3BsaWNlKG8sMCx7ZGlzdGFuY2U6ZSxvYmplY3Q6dH0pLHRoaXMuYWRkKHQpLHRoaXN9LGdldEN1cnJlbnRMZXZlbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jdXJyZW50TGV2ZWx9LGdldE9iamVjdEZvckRpc3RhbmNlOmZ1bmN0aW9uKHQpe2NvbnN0IGU9dGhpcy5sZXZlbHM7aWYoZS5sZW5ndGg+MCl7bGV0IG4sbztmb3Iobj0xLG89ZS5sZW5ndGg7bjxvJiYhKHQ8ZVtuXS5kaXN0YW5jZSk7bisrKTtyZXR1cm4gZVtuLTFdLm9iamVjdH1yZXR1cm4gbnVsbH0scmF5Y2FzdDpmdW5jdGlvbih0LGUpe2lmKHRoaXMubGV2ZWxzLmxlbmd0aD4wKXtvZHQuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubWF0cml4V29ybGQpO2NvbnN0IG49dC5yYXkub3JpZ2luLmRpc3RhbmNlVG8ob2R0KTt0aGlzLmdldE9iamVjdEZvckRpc3RhbmNlKG4pLnJheWNhc3QodCxlKX19LHVwZGF0ZTpmdW5jdGlvbih0KXtjb25zdCBlPXRoaXMubGV2ZWxzO2lmKGUubGVuZ3RoPjEpe29kdC5zZXRGcm9tTWF0cml4UG9zaXRpb24odC5tYXRyaXhXb3JsZCksaWR0LnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1hdHJpeFdvcmxkKTtjb25zdCBuPW9kdC5kaXN0YW5jZVRvKGlkdCkvdC56b29tO2xldCBvLGk7Zm9yKGVbMF0ub2JqZWN0LnZpc2libGU9ITAsbz0xLGk9ZS5sZW5ndGg7bzxpJiZuPj1lW29dLmRpc3RhbmNlO28rKyllW28tMV0ub2JqZWN0LnZpc2libGU9ITEsZVtvXS5vYmplY3QudmlzaWJsZT0hMDtmb3IodGhpcy5fY3VycmVudExldmVsPW8tMTtvPGk7bysrKWVbb10ub2JqZWN0LnZpc2libGU9ITF9fSx0b0pTT046ZnVuY3Rpb24odCl7Y29uc3QgZT1RYXQucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMsdCk7ITE9PT10aGlzLmF1dG9VcGRhdGUmJihlLm9iamVjdC5hdXRvVXBkYXRlPSExKSxlLm9iamVjdC5sZXZlbHM9W107Y29uc3Qgbj10aGlzLmxldmVscztmb3IobGV0IHQ9MCxvPW4ubGVuZ3RoO3Q8bzt0Kyspe2NvbnN0IG89blt0XTtlLm9iamVjdC5sZXZlbHMucHVzaCh7b2JqZWN0Om8ub2JqZWN0LnV1aWQsZGlzdGFuY2U6by5kaXN0YW5jZX0pfXJldHVybiBlfX0pO2NvbnN0IHJkdD1uZXcgJGl0LHNkdD1uZXcgS2l0LGxkdD1uZXcgS2l0LGNkdD1uZXcgJGl0LGRkdD1uZXcga2F0O2Z1bmN0aW9uIHBkdCh0LGUpe3QmJnQuaXNHZW9tZXRyeSYmY29uc29sZS5lcnJvcigiVEhSRUUuU2tpbm5lZE1lc2ggbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKSxtc3QuY2FsbCh0aGlzLHQsZSksdGhpcy50eXBlPSJTa2lubmVkTWVzaCIsdGhpcy5iaW5kTW9kZT0iYXR0YWNoZWQiLHRoaXMuYmluZE1hdHJpeD1uZXcga2F0LHRoaXMuYmluZE1hdHJpeEludmVyc2U9bmV3IGthdH1mdW5jdGlvbiBtZHQoKXtRYXQuY2FsbCh0aGlzKSx0aGlzLnR5cGU9IkJvbmUifXBkdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKG1zdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpwZHQsaXNTa2lubmVkTWVzaDohMCxjb3B5OmZ1bmN0aW9uKHQpe3JldHVybiBtc3QucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMuYmluZE1vZGU9dC5iaW5kTW9kZSx0aGlzLmJpbmRNYXRyaXguY29weSh0LmJpbmRNYXRyaXgpLHRoaXMuYmluZE1hdHJpeEludmVyc2UuY29weSh0LmJpbmRNYXRyaXhJbnZlcnNlKSx0aGlzLnNrZWxldG9uPXQuc2tlbGV0b24sdGhpc30sYmluZDpmdW5jdGlvbih0LGUpe3RoaXMuc2tlbGV0b249dCx2b2lkIDA9PT1lJiYodGhpcy51cGRhdGVNYXRyaXhXb3JsZCghMCksdGhpcy5za2VsZXRvbi5jYWxjdWxhdGVJbnZlcnNlcygpLGU9dGhpcy5tYXRyaXhXb3JsZCksdGhpcy5iaW5kTWF0cml4LmNvcHkoZSksdGhpcy5iaW5kTWF0cml4SW52ZXJzZS5jb3B5KGUpLmludmVydCgpfSxwb3NlOmZ1bmN0aW9uKCl7dGhpcy5za2VsZXRvbi5wb3NlKCl9LG5vcm1hbGl6ZVNraW5XZWlnaHRzOmZ1bmN0aW9uKCl7Y29uc3QgdD1uZXcgS2l0LGU9dGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLnNraW5XZWlnaHQ7Zm9yKGxldCBuPTAsbz1lLmNvdW50O248bztuKyspe3QueD1lLmdldFgobiksdC55PWUuZ2V0WShuKSx0Lno9ZS5nZXRaKG4pLHQudz1lLmdldFcobik7Y29uc3Qgbz0xL3QubWFuaGF0dGFuTGVuZ3RoKCk7byE9PTEvMD90Lm11bHRpcGx5U2NhbGFyKG8pOnQuc2V0KDEsMCwwLDApLGUuc2V0WFlaVyhuLHQueCx0LnksdC56LHQudyl9fSx1cGRhdGVNYXRyaXhXb3JsZDpmdW5jdGlvbih0KXttc3QucHJvdG90eXBlLnVwZGF0ZU1hdHJpeFdvcmxkLmNhbGwodGhpcyx0KSwiYXR0YWNoZWQiPT09dGhpcy5iaW5kTW9kZT90aGlzLmJpbmRNYXRyaXhJbnZlcnNlLmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCk6ImRldGFjaGVkIj09PXRoaXMuYmluZE1vZGU/dGhpcy5iaW5kTWF0cml4SW52ZXJzZS5jb3B5KHRoaXMuYmluZE1hdHJpeCkuaW52ZXJ0KCk6Y29uc29sZS53YXJuKCJUSFJFRS5Ta2lubmVkTWVzaDogVW5yZWNvZ25pemVkIGJpbmRNb2RlOiAiK3RoaXMuYmluZE1vZGUpfSxib25lVHJhbnNmb3JtOmZ1bmN0aW9uKHQsZSl7Y29uc3Qgbj10aGlzLnNrZWxldG9uLG89dGhpcy5nZW9tZXRyeTtzZHQuZnJvbUJ1ZmZlckF0dHJpYnV0ZShvLmF0dHJpYnV0ZXMuc2tpbkluZGV4LHQpLGxkdC5mcm9tQnVmZmVyQXR0cmlidXRlKG8uYXR0cmlidXRlcy5za2luV2VpZ2h0LHQpLHJkdC5mcm9tQnVmZmVyQXR0cmlidXRlKG8uYXR0cmlidXRlcy5wb3NpdGlvbix0KS5hcHBseU1hdHJpeDQodGhpcy5iaW5kTWF0cml4KSxlLnNldCgwLDAsMCk7Zm9yKGxldCB0PTA7dDw0O3QrKyl7Y29uc3Qgbz1sZHQuZ2V0Q29tcG9uZW50KHQpO2lmKDAhPT1vKXtjb25zdCBpPXNkdC5nZXRDb21wb25lbnQodCk7ZGR0Lm11bHRpcGx5TWF0cmljZXMobi5ib25lc1tpXS5tYXRyaXhXb3JsZCxuLmJvbmVJbnZlcnNlc1tpXSksZS5hZGRTY2FsZWRWZWN0b3IoY2R0LmNvcHkocmR0KS5hcHBseU1hdHJpeDQoZGR0KSxvKX19cmV0dXJuIGUuYXBwbHlNYXRyaXg0KHRoaXMuYmluZE1hdHJpeEludmVyc2UpfX0pLG1kdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKFFhdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjptZHQsaXNCb25lOiEwfSk7Y29uc3QgdWR0PW5ldyBrYXQsZmR0PW5ldyBrYXQ7ZnVuY3Rpb24gZ2R0KHQ9W10sZT1bXSl7dGhpcy51dWlkPWppdC5nZW5lcmF0ZVVVSUQoKSx0aGlzLmJvbmVzPXQuc2xpY2UoMCksdGhpcy5ib25lSW52ZXJzZXM9ZSx0aGlzLmJvbmVNYXRyaWNlcz1udWxsLHRoaXMuYm9uZVRleHR1cmU9bnVsbCx0aGlzLmJvbmVUZXh0dXJlU2l6ZT0wLHRoaXMuZnJhbWU9LTEsdGhpcy5pbml0KCl9T2JqZWN0LmFzc2lnbihnZHQucHJvdG90eXBlLHtpbml0OmZ1bmN0aW9uKCl7Y29uc3QgdD10aGlzLmJvbmVzLGU9dGhpcy5ib25lSW52ZXJzZXM7aWYodGhpcy5ib25lTWF0cmljZXM9bmV3IEZsb2F0MzJBcnJheSgxNip0Lmxlbmd0aCksMD09PWUubGVuZ3RoKXRoaXMuY2FsY3VsYXRlSW52ZXJzZXMoKTtlbHNlIGlmKHQubGVuZ3RoIT09ZS5sZW5ndGgpe2NvbnNvbGUud2FybigiVEhSRUUuU2tlbGV0b246IE51bWJlciBvZiBpbnZlcnNlIGJvbmUgbWF0cmljZXMgZG9lcyBub3QgbWF0Y2ggYW1vdW50IG9mIGJvbmVzLiIpLHRoaXMuYm9uZUludmVyc2VzPVtdO2ZvcihsZXQgdD0wLGU9dGhpcy5ib25lcy5sZW5ndGg7dDxlO3QrKyl0aGlzLmJvbmVJbnZlcnNlcy5wdXNoKG5ldyBrYXQpfX0sY2FsY3VsYXRlSW52ZXJzZXM6ZnVuY3Rpb24oKXt0aGlzLmJvbmVJbnZlcnNlcy5sZW5ndGg9MDtmb3IobGV0IHQ9MCxlPXRoaXMuYm9uZXMubGVuZ3RoO3Q8ZTt0Kyspe2NvbnN0IGU9bmV3IGthdDt0aGlzLmJvbmVzW3RdJiZlLmNvcHkodGhpcy5ib25lc1t0XS5tYXRyaXhXb3JsZCkuaW52ZXJ0KCksdGhpcy5ib25lSW52ZXJzZXMucHVzaChlKX19LHBvc2U6ZnVuY3Rpb24oKXtmb3IobGV0IHQ9MCxlPXRoaXMuYm9uZXMubGVuZ3RoO3Q8ZTt0Kyspe2NvbnN0IGU9dGhpcy5ib25lc1t0XTtlJiZlLm1hdHJpeFdvcmxkLmNvcHkodGhpcy5ib25lSW52ZXJzZXNbdF0pLmludmVydCgpfWZvcihsZXQgdD0wLGU9dGhpcy5ib25lcy5sZW5ndGg7dDxlO3QrKyl7Y29uc3QgZT10aGlzLmJvbmVzW3RdO2UmJihlLnBhcmVudCYmZS5wYXJlbnQuaXNCb25lPyhlLm1hdHJpeC5jb3B5KGUucGFyZW50Lm1hdHJpeFdvcmxkKS5pbnZlcnQoKSxlLm1hdHJpeC5tdWx0aXBseShlLm1hdHJpeFdvcmxkKSk6ZS5tYXRyaXguY29weShlLm1hdHJpeFdvcmxkKSxlLm1hdHJpeC5kZWNvbXBvc2UoZS5wb3NpdGlvbixlLnF1YXRlcm5pb24sZS5zY2FsZSkpfX0sdXBkYXRlOmZ1bmN0aW9uKCl7Y29uc3QgdD10aGlzLmJvbmVzLGU9dGhpcy5ib25lSW52ZXJzZXMsbj10aGlzLmJvbmVNYXRyaWNlcyxvPXRoaXMuYm9uZVRleHR1cmU7Zm9yKGxldCBvPTAsaT10Lmxlbmd0aDtvPGk7bysrKXVkdC5tdWx0aXBseU1hdHJpY2VzKHRbb10/dFtvXS5tYXRyaXhXb3JsZDpmZHQsZVtvXSksdWR0LnRvQXJyYXkobiwxNipvKTtudWxsIT09byYmKG8ubmVlZHNVcGRhdGU9ITApfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybiBuZXcgZ2R0KHRoaXMuYm9uZXMsdGhpcy5ib25lSW52ZXJzZXMpfSxnZXRCb25lQnlOYW1lOmZ1bmN0aW9uKHQpe2ZvcihsZXQgZT0wLG49dGhpcy5ib25lcy5sZW5ndGg7ZTxuO2UrKyl7Y29uc3Qgbj10aGlzLmJvbmVzW2VdO2lmKG4ubmFtZT09PXQpcmV0dXJuIG59fSxkaXNwb3NlOmZ1bmN0aW9uKCl7bnVsbCE9PXRoaXMuYm9uZVRleHR1cmUmJih0aGlzLmJvbmVUZXh0dXJlLmRpc3Bvc2UoKSx0aGlzLmJvbmVUZXh0dXJlPW51bGwpfSxmcm9tSlNPTjpmdW5jdGlvbih0LGUpe3RoaXMudXVpZD10LnV1aWQ7Zm9yKGxldCBuPTAsbz10LmJvbmVzLmxlbmd0aDtuPG87bisrKXtjb25zdCBvPXQuYm9uZXNbbl07bGV0IGk9ZVtvXTt2b2lkIDA9PT1pJiYoY29uc29sZS53YXJuKCJUSFJFRS5Ta2VsZXRvbjogTm8gYm9uZSBmb3VuZCB3aXRoIFVVSUQ6IixvKSxpPW5ldyBtZHQpLHRoaXMuYm9uZXMucHVzaChpKSx0aGlzLmJvbmVJbnZlcnNlcy5wdXNoKChuZXcga2F0KS5mcm9tQXJyYXkodC5ib25lSW52ZXJzZXNbbl0pKX1yZXR1cm4gdGhpcy5pbml0KCksdGhpc30sdG9KU09OOmZ1bmN0aW9uKCl7Y29uc3QgdD17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6IlNrZWxldG9uIixnZW5lcmF0b3I6IlNrZWxldG9uLnRvSlNPTiJ9LGJvbmVzOltdLGJvbmVJbnZlcnNlczpbXX07dC51dWlkPXRoaXMudXVpZDtjb25zdCBlPXRoaXMuYm9uZXMsbj10aGlzLmJvbmVJbnZlcnNlcztmb3IobGV0IG89MCxpPWUubGVuZ3RoO288aTtvKyspdC5ib25lcy5wdXNoKGVbb10udXVpZCksdC5ib25lSW52ZXJzZXMucHVzaChuW29dLnRvQXJyYXkoKSk7cmV0dXJuIHR9fSk7Y29uc3QgaGR0PW5ldyBrYXQsYmR0PW5ldyBrYXQseWR0PVtdLF9kdD1uZXcgbXN0O2Z1bmN0aW9uIENkdCh0LGUsbil7bXN0LmNhbGwodGhpcyx0LGUpLHRoaXMuaW5zdGFuY2VNYXRyaXg9bmV3IGtydChuZXcgRmxvYXQzMkFycmF5KDE2Km4pLDE2KSx0aGlzLmluc3RhbmNlQ29sb3I9bnVsbCx0aGlzLmNvdW50PW4sdGhpcy5mcnVzdHVtQ3VsbGVkPSExfWZ1bmN0aW9uIE1kdCh0KXt4cnQuY2FsbCh0aGlzKSx0aGlzLnR5cGU9IkxpbmVCYXNpY01hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBDcnQoMTY3NzcyMTUpLHRoaXMubGluZXdpZHRoPTEsdGhpcy5saW5lY2FwPSJyb3VuZCIsdGhpcy5saW5lam9pbj0icm91bmQiLHRoaXMubW9ycGhUYXJnZXRzPSExLHRoaXMuc2V0VmFsdWVzKHQpfUNkdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKG1zdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpDZHQsaXNJbnN0YW5jZWRNZXNoOiEwLGNvcHk6ZnVuY3Rpb24odCl7cmV0dXJuIG1zdC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy5pbnN0YW5jZU1hdHJpeC5jb3B5KHQuaW5zdGFuY2VNYXRyaXgpLG51bGwhPT10Lmluc3RhbmNlQ29sb3ImJih0aGlzLmluc3RhbmNlQ29sb3I9dC5pbnN0YW5jZUNvbG9yLmNsb25lKCkpLHRoaXMuY291bnQ9dC5jb3VudCx0aGlzfSxnZXRDb2xvckF0OmZ1bmN0aW9uKHQsZSl7ZS5mcm9tQXJyYXkodGhpcy5pbnN0YW5jZUNvbG9yLmFycmF5LDMqdCl9LGdldE1hdHJpeEF0OmZ1bmN0aW9uKHQsZSl7ZS5mcm9tQXJyYXkodGhpcy5pbnN0YW5jZU1hdHJpeC5hcnJheSwxNip0KX0scmF5Y2FzdDpmdW5jdGlvbih0LGUpe2NvbnN0IG49dGhpcy5tYXRyaXhXb3JsZCxvPXRoaXMuY291bnQ7aWYoX2R0Lmdlb21ldHJ5PXRoaXMuZ2VvbWV0cnksX2R0Lm1hdGVyaWFsPXRoaXMubWF0ZXJpYWwsdm9pZCAwIT09X2R0Lm1hdGVyaWFsKWZvcihsZXQgaT0wO2k8bztpKyspe3RoaXMuZ2V0TWF0cml4QXQoaSxoZHQpLGJkdC5tdWx0aXBseU1hdHJpY2VzKG4saGR0KSxfZHQubWF0cml4V29ybGQ9YmR0LF9kdC5yYXljYXN0KHQseWR0KTtmb3IobGV0IHQ9MCxuPXlkdC5sZW5ndGg7dDxuO3QrKyl7Y29uc3Qgbj15ZHRbdF07bi5pbnN0YW5jZUlkPWksbi5vYmplY3Q9dGhpcyxlLnB1c2gobil9eWR0Lmxlbmd0aD0wfX0sc2V0Q29sb3JBdDpmdW5jdGlvbih0LGUpe251bGw9PT10aGlzLmluc3RhbmNlQ29sb3ImJih0aGlzLmluc3RhbmNlQ29sb3I9bmV3IGtydChuZXcgRmxvYXQzMkFycmF5KDMqdGhpcy5jb3VudCksMykpLGUudG9BcnJheSh0aGlzLmluc3RhbmNlQ29sb3IuYXJyYXksMyp0KX0sc2V0TWF0cml4QXQ6ZnVuY3Rpb24odCxlKXtlLnRvQXJyYXkodGhpcy5pbnN0YW5jZU1hdHJpeC5hcnJheSwxNip0KX0sdXBkYXRlTW9ycGhUYXJnZXRzOmZ1bmN0aW9uKCl7fSxkaXNwb3NlOmZ1bmN0aW9uKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfX0pLChNZHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeHJ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPU1kdCxNZHQucHJvdG90eXBlLmlzTGluZUJhc2ljTWF0ZXJpYWw9ITAsTWR0LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHQpe3JldHVybiB4cnQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLmxpbmV3aWR0aD10LmxpbmV3aWR0aCx0aGlzLmxpbmVjYXA9dC5saW5lY2FwLHRoaXMubGluZWpvaW49dC5saW5lam9pbix0aGlzLm1vcnBoVGFyZ2V0cz10Lm1vcnBoVGFyZ2V0cyx0aGlzfTtjb25zdCB2ZHQ9bmV3ICRpdCx4ZHQ9bmV3ICRpdCxPZHQ9bmV3IGthdCxQZHQ9bmV3IHdhdCx3ZHQ9bmV3IHlhdDtmdW5jdGlvbiBrZHQodD1uZXcgWnJ0LGU9bmV3IE1kdCl7UWF0LmNhbGwodGhpcyksdGhpcy50eXBlPSJMaW5lIix0aGlzLmdlb21ldHJ5PXQsdGhpcy5tYXRlcmlhbD1lLHRoaXMudXBkYXRlTW9ycGhUYXJnZXRzKCl9a2R0LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoUWF0LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOmtkdCxpc0xpbmU6ITAsY29weTpmdW5jdGlvbih0KXtyZXR1cm4gUWF0LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLm1hdGVyaWFsPXQubWF0ZXJpYWwsdGhpcy5nZW9tZXRyeT10Lmdlb21ldHJ5LHRoaXN9LGNvbXB1dGVMaW5lRGlzdGFuY2VzOmZ1bmN0aW9uKCl7Y29uc3QgdD10aGlzLmdlb21ldHJ5O2lmKHQuaXNCdWZmZXJHZW9tZXRyeSlpZihudWxsPT09dC5pbmRleCl7Y29uc3QgZT10LmF0dHJpYnV0ZXMucG9zaXRpb24sbj1bMF07Zm9yKGxldCB0PTEsbz1lLmNvdW50O3Q8bzt0KyspdmR0LmZyb21CdWZmZXJBdHRyaWJ1dGUoZSx0LTEpLHhkdC5mcm9tQnVmZmVyQXR0cmlidXRlKGUsdCksblt0XT1uW3QtMV0sblt0XSs9dmR0LmRpc3RhbmNlVG8oeGR0KTt0LnNldEF0dHJpYnV0ZSgibGluZURpc3RhbmNlIixuZXcgenJ0KG4sMSkpfWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5MaW5lLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCk6IENvbXB1dGF0aW9uIG9ubHkgcG9zc2libGUgd2l0aCBub24taW5kZXhlZCBCdWZmZXJHZW9tZXRyeS4iKTtlbHNlIHQuaXNHZW9tZXRyeSYmY29uc29sZS5lcnJvcigiVEhSRUUuTGluZS5jb21wdXRlTGluZURpc3RhbmNlcygpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIik7cmV0dXJuIHRoaXN9LHJheWNhc3Q6ZnVuY3Rpb24odCxlKXtjb25zdCBuPXRoaXMuZ2VvbWV0cnksbz10aGlzLm1hdHJpeFdvcmxkLGk9dC5wYXJhbXMuTGluZS50aHJlc2hvbGQ7aWYobnVsbD09PW4uYm91bmRpbmdTcGhlcmUmJm4uY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCksd2R0LmNvcHkobi5ib3VuZGluZ1NwaGVyZSksd2R0LmFwcGx5TWF0cml4NChvKSx3ZHQucmFkaXVzKz1pLCExPT09dC5yYXkuaW50ZXJzZWN0c1NwaGVyZSh3ZHQpKXJldHVybjtPZHQuY29weShvKS5pbnZlcnQoKSxQZHQuY29weSh0LnJheSkuYXBwbHlNYXRyaXg0KE9kdCk7Y29uc3QgYT1pLygodGhpcy5zY2FsZS54K3RoaXMuc2NhbGUueSt0aGlzLnNjYWxlLnopLzMpLHI9YSphLHM9bmV3ICRpdCxsPW5ldyAkaXQsYz1uZXcgJGl0LGQ9bmV3ICRpdCxwPXRoaXMuaXNMaW5lU2VnbWVudHM/MjoxO2lmKG4uaXNCdWZmZXJHZW9tZXRyeSl7Y29uc3Qgbz1uLmluZGV4LGk9bi5hdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKG51bGwhPT1vKXtjb25zdCBuPW8uYXJyYXk7Zm9yKGxldCBvPTAsYT1uLmxlbmd0aC0xO288YTtvKz1wKXtjb25zdCBhPW5bbysxXTtpZihzLmZyb21CdWZmZXJBdHRyaWJ1dGUoaSxuW29dKSxsLmZyb21CdWZmZXJBdHRyaWJ1dGUoaSxhKSxQZHQuZGlzdGFuY2VTcVRvU2VnbWVudChzLGwsZCxjKT5yKWNvbnRpbnVlO2QuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpO2NvbnN0IHA9dC5yYXkub3JpZ2luLmRpc3RhbmNlVG8oZCk7cDx0Lm5lYXJ8fHA+dC5mYXJ8fGUucHVzaCh7ZGlzdGFuY2U6cCxwb2ludDpjLmNsb25lKCkuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpLGluZGV4Om8sZmFjZTpudWxsLGZhY2VJbmRleDpudWxsLG9iamVjdDp0aGlzfSl9fWVsc2UgZm9yKGxldCBuPTAsbz1pLmNvdW50LTE7bjxvO24rPXApe2lmKHMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShpLG4pLGwuZnJvbUJ1ZmZlckF0dHJpYnV0ZShpLG4rMSksUGR0LmRpc3RhbmNlU3FUb1NlZ21lbnQocyxsLGQsYyk+ciljb250aW51ZTtkLmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKTtjb25zdCBvPXQucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKGQpO288dC5uZWFyfHxvPnQuZmFyfHxlLnB1c2goe2Rpc3RhbmNlOm8scG9pbnQ6Yy5jbG9uZSgpLmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKSxpbmRleDpuLGZhY2U6bnVsbCxmYWNlSW5kZXg6bnVsbCxvYmplY3Q6dGhpc30pfX1lbHNlIG4uaXNHZW9tZXRyeSYmY29uc29sZS5lcnJvcigiVEhSRUUuTGluZS5yYXljYXN0KCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX0sdXBkYXRlTW9ycGhUYXJnZXRzOmZ1bmN0aW9uKCl7Y29uc3QgdD10aGlzLmdlb21ldHJ5O2lmKHQuaXNCdWZmZXJHZW9tZXRyeSl7Y29uc3QgZT10Lm1vcnBoQXR0cmlidXRlcyxuPU9iamVjdC5rZXlzKGUpO2lmKG4ubGVuZ3RoPjApe2NvbnN0IHQ9ZVtuWzBdXTtpZih2b2lkIDAhPT10KXt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcz1bXSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeT17fTtmb3IobGV0IGU9MCxuPXQubGVuZ3RoO2U8bjtlKyspe2NvbnN0IG49dFtlXS5uYW1lfHxTdHJpbmcoZSk7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXMucHVzaCgwKSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeVtuXT1lfX19fWVsc2V7Y29uc3QgZT10Lm1vcnBoVGFyZ2V0czt2b2lkIDAhPT1lJiZlLmxlbmd0aD4wJiZjb25zb2xlLmVycm9yKCJUSFJFRS5MaW5lLnVwZGF0ZU1vcnBoVGFyZ2V0cygpIGRvZXMgbm90IHN1cHBvcnQgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpfX19KTtjb25zdCBTZHQ9bmV3ICRpdCxEZHQ9bmV3ICRpdDtmdW5jdGlvbiBFZHQodCxlKXtrZHQuY2FsbCh0aGlzLHQsZSksdGhpcy50eXBlPSJMaW5lU2VnbWVudHMifWZ1bmN0aW9uIEFkdCh0LGUpe2tkdC5jYWxsKHRoaXMsdCxlKSx0aGlzLnR5cGU9IkxpbmVMb29wIn1mdW5jdGlvbiBSZHQodCl7eHJ0LmNhbGwodGhpcyksdGhpcy50eXBlPSJQb2ludHNNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgQ3J0KDE2Nzc3MjE1KSx0aGlzLm1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLnNpemU9MSx0aGlzLnNpemVBdHRlbnVhdGlvbj0hMCx0aGlzLm1vcnBoVGFyZ2V0cz0hMSx0aGlzLnNldFZhbHVlcyh0KX1FZHQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShrZHQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6RWR0LGlzTGluZVNlZ21lbnRzOiEwLGNvbXB1dGVMaW5lRGlzdGFuY2VzOmZ1bmN0aW9uKCl7Y29uc3QgdD10aGlzLmdlb21ldHJ5O2lmKHQuaXNCdWZmZXJHZW9tZXRyeSlpZihudWxsPT09dC5pbmRleCl7Y29uc3QgZT10LmF0dHJpYnV0ZXMucG9zaXRpb24sbj1bXTtmb3IobGV0IHQ9MCxvPWUuY291bnQ7dDxvO3QrPTIpU2R0LmZyb21CdWZmZXJBdHRyaWJ1dGUoZSx0KSxEZHQuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLHQrMSksblt0XT0wPT09dD8wOm5bdC0xXSxuW3QrMV09blt0XStTZHQuZGlzdGFuY2VUbyhEZHQpO3Quc2V0QXR0cmlidXRlKCJsaW5lRGlzdGFuY2UiLG5ldyB6cnQobiwxKSl9ZWxzZSBjb25zb2xlLndhcm4oIlRIUkVFLkxpbmVTZWdtZW50cy5jb21wdXRlTGluZURpc3RhbmNlcygpOiBDb21wdXRhdGlvbiBvbmx5IHBvc3NpYmxlIHdpdGggbm9uLWluZGV4ZWQgQnVmZmVyR2VvbWV0cnkuIik7ZWxzZSB0LmlzR2VvbWV0cnkmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLkxpbmVTZWdtZW50cy5jb21wdXRlTGluZURpc3RhbmNlcygpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIik7cmV0dXJuIHRoaXN9fSksQWR0LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoa2R0LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOkFkdCxpc0xpbmVMb29wOiEwfSksKFJkdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh4cnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9UmR0LFJkdC5wcm90b3R5cGUuaXNQb2ludHNNYXRlcmlhbD0hMCxSZHQucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24odCl7cmV0dXJuIHhydC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubWFwPXQubWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLnNpemU9dC5zaXplLHRoaXMuc2l6ZUF0dGVudWF0aW9uPXQuc2l6ZUF0dGVudWF0aW9uLHRoaXMubW9ycGhUYXJnZXRzPXQubW9ycGhUYXJnZXRzLHRoaXN9O2NvbnN0IFRkdD1uZXcga2F0LE5kdD1uZXcgd2F0LElkdD1uZXcgeWF0LHpkdD1uZXcgJGl0O2Z1bmN0aW9uIEhkdCh0PW5ldyBacnQsZT1uZXcgUmR0KXtRYXQuY2FsbCh0aGlzKSx0aGlzLnR5cGU9IlBvaW50cyIsdGhpcy5nZW9tZXRyeT10LHRoaXMubWF0ZXJpYWw9ZSx0aGlzLnVwZGF0ZU1vcnBoVGFyZ2V0cygpfWZ1bmN0aW9uIEZkdCh0LGUsbixvLGksYSxyKXtjb25zdCBzPU5kdC5kaXN0YW5jZVNxVG9Qb2ludCh0KTtpZihzPG4pe2NvbnN0IG49bmV3ICRpdDtOZHQuY2xvc2VzdFBvaW50VG9Qb2ludCh0LG4pLG4uYXBwbHlNYXRyaXg0KG8pO2NvbnN0IGw9aS5yYXkub3JpZ2luLmRpc3RhbmNlVG8obik7aWYobDxpLm5lYXJ8fGw+aS5mYXIpcmV0dXJuO2EucHVzaCh7ZGlzdGFuY2U6bCxkaXN0YW5jZVRvUmF5Ok1hdGguc3FydChzKSxwb2ludDpuLGluZGV4OmUsZmFjZTpudWxsLG9iamVjdDpyfSl9fWZ1bmN0aW9uIExkdCh0LGUsbixvLGksYSxyLHMsbCl7Wml0LmNhbGwodGhpcyx0LGUsbixvLGksYSxyLHMsbCksdGhpcy5mb3JtYXQ9dm9pZCAwIT09cj9yOk9pdCx0aGlzLm1pbkZpbHRlcj12b2lkIDAhPT1hP2E6Yml0LHRoaXMubWFnRmlsdGVyPXZvaWQgMCE9PWk/aTpiaXQsdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITE7Y29uc3QgYz10aGlzOyJyZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrImluIHQmJnQucmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjaygoZnVuY3Rpb24gZSgpe2MubmVlZHNVcGRhdGU9ITAsdC5yZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrKGUpfSkpfWZ1bmN0aW9uIEJkdCh0LGUsbixvLGksYSxyLHMsbCxjLGQscCl7Wml0LmNhbGwodGhpcyxudWxsLGEscixzLGwsYyxvLGksZCxwKSx0aGlzLmltYWdlPXt3aWR0aDplLGhlaWdodDpufSx0aGlzLm1pcG1hcHM9dCx0aGlzLmZsaXBZPSExLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExfWZ1bmN0aW9uIFZkdCh0LGUsbixvLGksYSxyLHMsbCl7Wml0LmNhbGwodGhpcyx0LGUsbixvLGksYSxyLHMsbCksdGhpcy5uZWVkc1VwZGF0ZT0hMH1mdW5jdGlvbiBqZHQodCxlLG4sbyxpLGEscixzLGwsYyl7aWYoKGM9dm9pZCAwIT09Yz9jOndpdCkhPT13aXQmJmMhPT1raXQpdGhyb3cgbmV3IEVycm9yKCJEZXB0aFRleHR1cmUgZm9ybWF0IG11c3QgYmUgZWl0aGVyIFRIUkVFLkRlcHRoRm9ybWF0IG9yIFRIUkVFLkRlcHRoU3RlbmNpbEZvcm1hdCIpO3ZvaWQgMD09PW4mJmM9PT13aXQmJihuPV9pdCksdm9pZCAwPT09biYmYz09PWtpdCYmKG49eGl0KSxaaXQuY2FsbCh0aGlzLG51bGwsbyxpLGEscixzLGMsbixsKSx0aGlzLmltYWdlPXt3aWR0aDp0LGhlaWdodDplfSx0aGlzLm1hZ0ZpbHRlcj12b2lkIDAhPT1yP3I6aGl0LHRoaXMubWluRmlsdGVyPXZvaWQgMCE9PXM/czpoaXQsdGhpcy5mbGlwWT0hMSx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMX1IZHQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShRYXQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6SGR0LGlzUG9pbnRzOiEwLGNvcHk6ZnVuY3Rpb24odCl7cmV0dXJuIFFhdC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy5tYXRlcmlhbD10Lm1hdGVyaWFsLHRoaXMuZ2VvbWV0cnk9dC5nZW9tZXRyeSx0aGlzfSxyYXljYXN0OmZ1bmN0aW9uKHQsZSl7Y29uc3Qgbj10aGlzLmdlb21ldHJ5LG89dGhpcy5tYXRyaXhXb3JsZCxpPXQucGFyYW1zLlBvaW50cy50aHJlc2hvbGQ7aWYobnVsbD09PW4uYm91bmRpbmdTcGhlcmUmJm4uY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCksSWR0LmNvcHkobi5ib3VuZGluZ1NwaGVyZSksSWR0LmFwcGx5TWF0cml4NChvKSxJZHQucmFkaXVzKz1pLCExPT09dC5yYXkuaW50ZXJzZWN0c1NwaGVyZShJZHQpKXJldHVybjtUZHQuY29weShvKS5pbnZlcnQoKSxOZHQuY29weSh0LnJheSkuYXBwbHlNYXRyaXg0KFRkdCk7Y29uc3QgYT1pLygodGhpcy5zY2FsZS54K3RoaXMuc2NhbGUueSt0aGlzLnNjYWxlLnopLzMpLHI9YSphO2lmKG4uaXNCdWZmZXJHZW9tZXRyeSl7Y29uc3QgaT1uLmluZGV4LGE9bi5hdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKG51bGwhPT1pKXtjb25zdCBuPWkuYXJyYXk7Zm9yKGxldCBpPTAscz1uLmxlbmd0aDtpPHM7aSsrKXtjb25zdCBzPW5baV07emR0LmZyb21CdWZmZXJBdHRyaWJ1dGUoYSxzKSxGZHQoemR0LHMscixvLHQsZSx0aGlzKX19ZWxzZSBmb3IobGV0IG49MCxpPWEuY291bnQ7bjxpO24rKyl6ZHQuZnJvbUJ1ZmZlckF0dHJpYnV0ZShhLG4pLEZkdCh6ZHQsbixyLG8sdCxlLHRoaXMpfWVsc2UgY29uc29sZS5lcnJvcigiVEhSRUUuUG9pbnRzLnJheWNhc3QoKSBubyBsb25nZXIgc3VwcG9ydHMgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpfSx1cGRhdGVNb3JwaFRhcmdldHM6ZnVuY3Rpb24oKXtjb25zdCB0PXRoaXMuZ2VvbWV0cnk7aWYodC5pc0J1ZmZlckdlb21ldHJ5KXtjb25zdCBlPXQubW9ycGhBdHRyaWJ1dGVzLG49T2JqZWN0LmtleXMoZSk7aWYobi5sZW5ndGg+MCl7Y29uc3QgdD1lW25bMF1dO2lmKHZvaWQgMCE9PXQpe3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzPVtdLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5PXt9O2ZvcihsZXQgZT0wLG49dC5sZW5ndGg7ZTxuO2UrKyl7Y29uc3Qgbj10W2VdLm5hbWV8fFN0cmluZyhlKTt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcy5wdXNoKDApLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5W25dPWV9fX19ZWxzZXtjb25zdCBlPXQubW9ycGhUYXJnZXRzO3ZvaWQgMCE9PWUmJmUubGVuZ3RoPjAmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLlBvaW50cy51cGRhdGVNb3JwaFRhcmdldHMoKSBkb2VzIG5vdCBzdXBwb3J0IFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX19fSksTGR0LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoWml0LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOkxkdCxjbG9uZTpmdW5jdGlvbigpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLmltYWdlKS5jb3B5KHRoaXMpfSxpc1ZpZGVvVGV4dHVyZTohMCx1cGRhdGU6ZnVuY3Rpb24oKXtjb25zdCB0PXRoaXMuaW1hZ2U7MD09InJlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2siaW4gdCYmdC5yZWFkeVN0YXRlPj10LkhBVkVfQ1VSUkVOVF9EQVRBJiYodGhpcy5uZWVkc1VwZGF0ZT0hMCl9fSksKEJkdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShaaXQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9QmR0LEJkdC5wcm90b3R5cGUuaXNDb21wcmVzc2VkVGV4dHVyZT0hMCwoVmR0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFppdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1WZHQsVmR0LnByb3RvdHlwZS5pc0NhbnZhc1RleHR1cmU9ITAsKGpkdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShaaXQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9amR0LGpkdC5wcm90b3R5cGUuaXNEZXB0aFRleHR1cmU9ITA7Y2xhc3MgVWR0IGV4dGVuZHMgWnJ0e2NvbnN0cnVjdG9yKHQ9MSxlPTgsbj0wLG89MipNYXRoLlBJKXtzdXBlcigpLHRoaXMudHlwZT0iQ2lyY2xlR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cmFkaXVzOnQsc2VnbWVudHM6ZSx0aGV0YVN0YXJ0Om4sdGhldGFMZW5ndGg6b30sZT1NYXRoLm1heCgzLGUpO2NvbnN0IGk9W10sYT1bXSxyPVtdLHM9W10sbD1uZXcgJGl0LGM9bmV3IFVpdDthLnB1c2goMCwwLDApLHIucHVzaCgwLDAsMSkscy5wdXNoKC41LC41KTtmb3IobGV0IGk9MCxkPTM7aTw9ZTtpKyssZCs9Myl7Y29uc3QgcD1uK2kvZSpvO2wueD10Kk1hdGguY29zKHApLGwueT10Kk1hdGguc2luKHApLGEucHVzaChsLngsbC55LGwueiksci5wdXNoKDAsMCwxKSxjLng9KGFbZF0vdCsxKS8yLGMueT0oYVtkKzFdL3QrMSkvMixzLnB1c2goYy54LGMueSl9Zm9yKGxldCB0PTE7dDw9ZTt0KyspaS5wdXNoKHQsdCsxLDApO3RoaXMuc2V0SW5kZXgoaSksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgenJ0KGEsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyB6cnQociwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgenJ0KHMsMikpfX1mdW5jdGlvbiBXZHQodCxlLG4sbyxpKXtsZXQgYSxyO2lmKGk9PT0oZnVuY3Rpb24gcyh0LGUsbixvKXtsZXQgaT0wO2ZvcihsZXQgYT1lLHI9bi1vO2E8bjthKz1vKWkrPSh0W3JdLXRbYV0pKih0W2ErMV0rdFtyKzFdKSxyPWE7cmV0dXJuIGl9KSh0LGUsbixvKT4wKWZvcihhPWU7YTxuO2ErPW8pcj1wcHQoYSx0W2FdLHRbYSsxXSxyKTtlbHNlIGZvcihhPW4tbzthPj1lO2EtPW8pcj1wcHQoYSx0W2FdLHRbYSsxXSxyKTtyZXR1cm4gciYmYXB0KHIsci5uZXh0KSYmKG1wdChyKSxyPXIubmV4dCkscn1mdW5jdGlvbiBHZHQodCxlKXtpZighdClyZXR1cm4gdDtlfHwoZT10KTtsZXQgbixvPXQ7ZG97aWYobj0hMSxvLnN0ZWluZXJ8fCFhcHQobyxvLm5leHQpJiYwIT09aXB0KG8ucHJldixvLG8ubmV4dCkpbz1vLm5leHQ7ZWxzZXtpZihtcHQobyksbz1lPW8ucHJldixvPT09by5uZXh0KWJyZWFrO249ITB9fXdoaWxlKG58fG8hPT1lKTtyZXR1cm4gZX1mdW5jdGlvbiBZZHQodCxlLG4sbyxpLGEscil7aWYoIXQpcmV0dXJuOyFyJiZhJiYoZnVuY3Rpb24gcyh0LGUsbixvKXtsZXQgaT10O2Rve251bGw9PT1pLnomJihpLno9dHB0KGkueCxpLnksZSxuLG8pKSxpLnByZXZaPWkucHJldixpLm5leHRaPWkubmV4dCxpPWkubmV4dH13aGlsZShpIT09dCk7aS5wcmV2Wi5uZXh0Wj1udWxsLGkucHJldlo9bnVsbCwoZnVuY3Rpb24gYSh0KXtsZXQgZSxuLG8saSxhLHIscyxsLGM9MTtkb3tmb3Iobj10LHQ9bnVsbCxhPW51bGwscj0wO247KXtmb3IocisrLG89bixzPTAsZT0wO2U8YyYmKHMrKyxvPW8ubmV4dFosbyk7ZSsrKTtmb3IobD1jO3M+MHx8bD4wJiZvOykwIT09cyYmKDA9PT1sfHwhb3x8bi56PD1vLnopPyhpPW4sbj1uLm5leHRaLHMtLSk6KGk9byxvPW8ubmV4dFosbC0tKSxhP2EubmV4dFo9aTp0PWksaS5wcmV2Wj1hLGE9aTtuPW99YS5uZXh0Wj1udWxsLGMqPTJ9d2hpbGUocj4xKX0pKGkpfSkodCxvLGksYSk7bGV0IGwsYyxkPXQ7Zm9yKDt0LnByZXYhPT10Lm5leHQ7KWlmKGw9dC5wcmV2LGM9dC5uZXh0LGE/WmR0KHQsbyxpLGEpOnFkdCh0KSllLnB1c2gobC5pL24pLGUucHVzaCh0LmkvbiksZS5wdXNoKGMuaS9uKSxtcHQodCksdD1jLm5leHQsZD1jLm5leHQ7ZWxzZSBpZigodD1jKT09PWQpe3I/MT09PXI/WWR0KHQ9WGR0KEdkdCh0KSxlLG4pLGUsbixvLGksYSwyKToyPT09ciYmS2R0KHQsZSxuLG8saSxhKTpZZHQoR2R0KHQpLGUsbixvLGksYSwxKTticmVha319ZnVuY3Rpb24gcWR0KHQpe2NvbnN0IGU9dC5wcmV2LG49dCxvPXQubmV4dDtpZihpcHQoZSxuLG8pPj0wKXJldHVybiExO2xldCBpPXQubmV4dC5uZXh0O2Zvcig7aSE9PXQucHJldjspe2lmKG5wdChlLngsZS55LG4ueCxuLnksby54LG8ueSxpLngsaS55KSYmaXB0KGkucHJldixpLGkubmV4dCk+PTApcmV0dXJuITE7aT1pLm5leHR9cmV0dXJuITB9ZnVuY3Rpb24gWmR0KHQsZSxuLG8pe2NvbnN0IGk9dC5wcmV2LGE9dCxyPXQubmV4dDtpZihpcHQoaSxhLHIpPj0wKXJldHVybiExO2NvbnN0IHM9aS54PmEueD9pLng+ci54P2kueDpyLng6YS54PnIueD9hLng6ci54LGw9aS55PmEueT9pLnk+ci55P2kueTpyLnk6YS55PnIueT9hLnk6ci55LGM9dHB0KGkueDxhLng/aS54PHIueD9pLng6ci54OmEueDxyLng/YS54OnIueCxpLnk8YS55P2kueTxyLnk/aS55OnIueTphLnk8ci55P2EueTpyLnksZSxuLG8pLGQ9dHB0KHMsbCxlLG4sbyk7bGV0IHA9dC5wcmV2WixtPXQubmV4dFo7Zm9yKDtwJiZwLno+PWMmJm0mJm0uejw9ZDspe2lmKHAhPT10LnByZXYmJnAhPT10Lm5leHQmJm5wdChpLngsaS55LGEueCxhLnksci54LHIueSxwLngscC55KSYmaXB0KHAucHJldixwLHAubmV4dCk+PTApcmV0dXJuITE7aWYocD1wLnByZXZaLG0hPT10LnByZXYmJm0hPT10Lm5leHQmJm5wdChpLngsaS55LGEueCxhLnksci54LHIueSxtLngsbS55KSYmaXB0KG0ucHJldixtLG0ubmV4dCk+PTApcmV0dXJuITE7bT1tLm5leHRafWZvcig7cCYmcC56Pj1jOyl7aWYocCE9PXQucHJldiYmcCE9PXQubmV4dCYmbnB0KGkueCxpLnksYS54LGEueSxyLngsci55LHAueCxwLnkpJiZpcHQocC5wcmV2LHAscC5uZXh0KT49MClyZXR1cm4hMTtwPXAucHJldlp9Zm9yKDttJiZtLno8PWQ7KXtpZihtIT09dC5wcmV2JiZtIT09dC5uZXh0JiZucHQoaS54LGkueSxhLngsYS55LHIueCxyLnksbS54LG0ueSkmJmlwdChtLnByZXYsbSxtLm5leHQpPj0wKXJldHVybiExO209bS5uZXh0Wn1yZXR1cm4hMH1mdW5jdGlvbiBYZHQodCxlLG4pe2xldCBvPXQ7ZG97Y29uc3QgaT1vLnByZXYsYT1vLm5leHQubmV4dDshYXB0KGksYSkmJnJwdChpLG8sby5uZXh0LGEpJiZjcHQoaSxhKSYmY3B0KGEsaSkmJihlLnB1c2goaS5pL24pLGUucHVzaChvLmkvbiksZS5wdXNoKGEuaS9uKSxtcHQobyksbXB0KG8ubmV4dCksbz10PWEpLG89by5uZXh0fXdoaWxlKG8hPT10KTtyZXR1cm4gR2R0KG8pfWZ1bmN0aW9uIEtkdCh0LGUsbixvLGksYSl7bGV0IHI9dDtkb3tsZXQgdD1yLm5leHQubmV4dDtmb3IoO3QhPT1yLnByZXY7KXtpZihyLmkhPT10LmkmJm9wdChyLHQpKXtsZXQgcz1kcHQocix0KTtyZXR1cm4gcj1HZHQocixyLm5leHQpLHM9R2R0KHMscy5uZXh0KSxZZHQocixlLG4sbyxpLGEpLHZvaWQgWWR0KHMsZSxuLG8saSxhKX10PXQubmV4dH1yPXIubmV4dH13aGlsZShyIT09dCl9ZnVuY3Rpb24gSmR0KHQsZSl7cmV0dXJuIHQueC1lLnh9ZnVuY3Rpb24gUWR0KHQsZSl7aWYoZT0oZnVuY3Rpb24gbih0LGUpe2xldCBuPWU7Y29uc3Qgbz10LngsaT10Lnk7bGV0IGEscj0tMS8wO2Rve2lmKGk8PW4ueSYmaT49bi5uZXh0LnkmJm4ubmV4dC55IT09bi55KXtjb25zdCB0PW4ueCsoaS1uLnkpKihuLm5leHQueC1uLngpLyhuLm5leHQueS1uLnkpO2lmKHQ8PW8mJnQ+cil7aWYocj10LHQ9PT1vKXtpZihpPT09bi55KXJldHVybiBuO2lmKGk9PT1uLm5leHQueSlyZXR1cm4gbi5uZXh0fWE9bi54PG4ubmV4dC54P246bi5uZXh0fX1uPW4ubmV4dH13aGlsZShuIT09ZSk7aWYoIWEpcmV0dXJuIG51bGw7aWYobz09PXIpcmV0dXJuIGE7Y29uc3Qgcz1hLGw9YS54LGM9YS55O2xldCBkLHA9MS8wO249YTtkb3tvPj1uLngmJm4ueD49bCYmbyE9PW4ueCYmbnB0KGk8Yz9vOnIsaSxsLGMsaTxjP3I6byxpLG4ueCxuLnkpJiYoZD1NYXRoLmFicyhpLW4ueSkvKG8tbi54KSxjcHQobix0KSYmKGQ8cHx8ZD09PXAmJihuLng+YS54fHxuLng9PT1hLngmJiRkdChhLG4pKSkmJihhPW4scD1kKSksbj1uLm5leHR9d2hpbGUobiE9PXMpO3JldHVybiBhfSkodCxlKSl7Y29uc3Qgbj1kcHQoZSx0KTtHZHQoZSxlLm5leHQpLEdkdChuLG4ubmV4dCl9fWZ1bmN0aW9uICRkdCh0LGUpe3JldHVybiBpcHQodC5wcmV2LHQsZS5wcmV2KTwwJiZpcHQoZS5uZXh0LHQsdC5uZXh0KTwwfWZ1bmN0aW9uIHRwdCh0LGUsbixvLGkpe3JldHVybih0PTE0MzE2NTU3NjUmKCh0PTg1ODk5MzQ1OSYoKHQ9MjUyNjQ1MTM1JigodD0xNjcxMTkzNSYoKHQ9MzI3NjcqKHQtbikqaSl8dDw8OCkpfHQ8PDQpKXx0PDwyKSl8dDw8MSkpfChlPTE0MzE2NTU3NjUmKChlPTg1ODk5MzQ1OSYoKGU9MjUyNjQ1MTM1JigoZT0xNjcxMTkzNSYoKGU9MzI3NjcqKGUtbykqaSl8ZTw8OCkpfGU8PDQpKXxlPDwyKSl8ZTw8MSkpPDwxfWZ1bmN0aW9uIGVwdCh0KXtsZXQgZT10LG49dDtkb3soZS54PG4ueHx8ZS54PT09bi54JiZlLnk8bi55KSYmKG49ZSksZT1lLm5leHR9d2hpbGUoZSE9PXQpO3JldHVybiBufWZ1bmN0aW9uIG5wdCh0LGUsbixvLGksYSxyLHMpe3JldHVybihpLXIpKihlLXMpLSh0LXIpKihhLXMpPj0wJiYodC1yKSooby1zKS0obi1yKSooZS1zKT49MCYmKG4tcikqKGEtcyktKGktcikqKG8tcyk+PTB9ZnVuY3Rpb24gb3B0KHQsZSl7cmV0dXJuIHQubmV4dC5pIT09ZS5pJiZ0LnByZXYuaSE9PWUuaSYmIShmdW5jdGlvbiBuKHQsZSl7bGV0IG49dDtkb3tpZihuLmkhPT10LmkmJm4ubmV4dC5pIT09dC5pJiZuLmkhPT1lLmkmJm4ubmV4dC5pIT09ZS5pJiZycHQobixuLm5leHQsdCxlKSlyZXR1cm4hMDtuPW4ubmV4dH13aGlsZShuIT09dCk7cmV0dXJuITF9KSh0LGUpJiYoY3B0KHQsZSkmJmNwdChlLHQpJiYoZnVuY3Rpb24gbyh0LGUpe2xldCBuPXQsbz0hMTtjb25zdCBpPSh0LngrZS54KS8yLGE9KHQueStlLnkpLzI7ZG97bi55PmEhPW4ubmV4dC55PmEmJm4ubmV4dC55IT09bi55JiZpPChuLm5leHQueC1uLngpKihhLW4ueSkvKG4ubmV4dC55LW4ueSkrbi54JiYobz0hbyksbj1uLm5leHR9d2hpbGUobiE9PXQpO3JldHVybiBvfSkodCxlKSYmKGlwdCh0LnByZXYsdCxlLnByZXYpfHxpcHQodCxlLnByZXYsZSkpfHxhcHQodCxlKSYmaXB0KHQucHJldix0LHQubmV4dCk+MCYmaXB0KGUucHJldixlLGUubmV4dCk+MCl9ZnVuY3Rpb24gaXB0KHQsZSxuKXtyZXR1cm4oZS55LXQueSkqKG4ueC1lLngpLShlLngtdC54KSoobi55LWUueSl9ZnVuY3Rpb24gYXB0KHQsZSl7cmV0dXJuIHQueD09PWUueCYmdC55PT09ZS55fWZ1bmN0aW9uIHJwdCh0LGUsbixvKXtjb25zdCBpPWxwdChpcHQodCxlLG4pKSxhPWxwdChpcHQodCxlLG8pKSxyPWxwdChpcHQobixvLHQpKSxzPWxwdChpcHQobixvLGUpKTtyZXR1cm4gaSE9PWEmJnIhPT1zfHwhKDAhPT1pfHwhc3B0KHQsbixlKSl8fCEoMCE9PWF8fCFzcHQodCxvLGUpKXx8ISgwIT09cnx8IXNwdChuLHQsbykpfHwhKDAhPT1zfHwhc3B0KG4sZSxvKSl9ZnVuY3Rpb24gc3B0KHQsZSxuKXtyZXR1cm4gZS54PD1NYXRoLm1heCh0Lngsbi54KSYmZS54Pj1NYXRoLm1pbih0Lngsbi54KSYmZS55PD1NYXRoLm1heCh0Lnksbi55KSYmZS55Pj1NYXRoLm1pbih0Lnksbi55KX1mdW5jdGlvbiBscHQodCl7cmV0dXJuIHQ+MD8xOnQ8MD8tMTowfWZ1bmN0aW9uIGNwdCh0LGUpe3JldHVybiBpcHQodC5wcmV2LHQsdC5uZXh0KTwwP2lwdCh0LGUsdC5uZXh0KT49MCYmaXB0KHQsdC5wcmV2LGUpPj0wOmlwdCh0LGUsdC5wcmV2KTwwfHxpcHQodCx0Lm5leHQsZSk8MH1mdW5jdGlvbiBkcHQodCxlKXtjb25zdCBuPW5ldyB1cHQodC5pLHQueCx0LnkpLG89bmV3IHVwdChlLmksZS54LGUueSksaT10Lm5leHQsYT1lLnByZXY7cmV0dXJuIHQubmV4dD1lLGUucHJldj10LG4ubmV4dD1pLGkucHJldj1uLG8ubmV4dD1uLG4ucHJldj1vLGEubmV4dD1vLG8ucHJldj1hLG99ZnVuY3Rpb24gcHB0KHQsZSxuLG8pe2NvbnN0IGk9bmV3IHVwdCh0LGUsbik7cmV0dXJuIG8/KGkubmV4dD1vLm5leHQsaS5wcmV2PW8sby5uZXh0LnByZXY9aSxvLm5leHQ9aSk6KGkucHJldj1pLGkubmV4dD1pKSxpfWZ1bmN0aW9uIG1wdCh0KXt0Lm5leHQucHJldj10LnByZXYsdC5wcmV2Lm5leHQ9dC5uZXh0LHQucHJldlomJih0LnByZXZaLm5leHRaPXQubmV4dFopLHQubmV4dFomJih0Lm5leHRaLnByZXZaPXQucHJldlopfWZ1bmN0aW9uIHVwdCh0LGUsbil7dGhpcy5pPXQsdGhpcy54PWUsdGhpcy55PW4sdGhpcy5wcmV2PW51bGwsdGhpcy5uZXh0PW51bGwsdGhpcy56PW51bGwsdGhpcy5wcmV2Wj1udWxsLHRoaXMubmV4dFo9bnVsbCx0aGlzLnN0ZWluZXI9ITF9bmV3ICRpdCxuZXcgJGl0LG5ldyAkaXQsbmV3IHVydDtjb25zdCBmcHQ9e2FyZWE6ZnVuY3Rpb24odCl7Y29uc3QgZT10Lmxlbmd0aDtsZXQgbj0wO2ZvcihsZXQgbz1lLTEsaT0wO2k8ZTtvPWkrKyluKz10W29dLngqdFtpXS55LXRbaV0ueCp0W29dLnk7cmV0dXJuLjUqbn0saXNDbG9ja1dpc2U6ZnVuY3Rpb24odCl7cmV0dXJuIGZwdC5hcmVhKHQpPDB9LHRyaWFuZ3VsYXRlU2hhcGU6ZnVuY3Rpb24odCxlKXtjb25zdCBuPVtdLG89W10saT1bXTtncHQodCksaHB0KG4sdCk7bGV0IGE9dC5sZW5ndGg7ZS5mb3JFYWNoKGdwdCk7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0Kyspby5wdXNoKGEpLGErPWVbdF0ubGVuZ3RoLGhwdChuLGVbdF0pO2NvbnN0IHI9KGZ1bmN0aW9uKHQsZSxuKXtuPW58fDI7Y29uc3Qgbz1lJiZlLmxlbmd0aCxpPW8/ZVswXSpuOnQubGVuZ3RoO2xldCBhPVdkdCh0LDAsaSxuLCEwKTtjb25zdCByPVtdO2lmKCFhfHxhLm5leHQ9PT1hLnByZXYpcmV0dXJuIHI7bGV0IHMsbCxjLGQscCxtLHU7aWYobyYmKGE9KGZ1bmN0aW9uIGYodCxlLG4sbyl7Y29uc3QgaT1bXTtsZXQgYSxyLHMsbCxjO2ZvcihhPTAscj1lLmxlbmd0aDthPHI7YSsrKXM9ZVthXSpvLGw9YTxyLTE/ZVthKzFdKm86dC5sZW5ndGgsYz1XZHQodCxzLGwsbywhMSksYz09PWMubmV4dCYmKGMuc3RlaW5lcj0hMCksaS5wdXNoKGVwdChjKSk7Zm9yKGkuc29ydChKZHQpLGE9MDthPGkubGVuZ3RoO2ErKylRZHQoaVthXSxuKSxuPUdkdChuLG4ubmV4dCk7cmV0dXJuIG59KSh0LGUsYSxuKSksdC5sZW5ndGg+ODAqbil7cz1jPXRbMF0sbD1kPXRbMV07Zm9yKGxldCBlPW47ZTxpO2UrPW4pcD10W2VdLG09dFtlKzFdLHA8cyYmKHM9cCksbTxsJiYobD1tKSxwPmMmJihjPXApLG0+ZCYmKGQ9bSk7dT1NYXRoLm1heChjLXMsZC1sKSx1PTAhPT11PzEvdTowfXJldHVybiBZZHQoYSxyLG4scyxsLHUpLHJ9KShuLG8pO2ZvcihsZXQgdD0wO3Q8ci5sZW5ndGg7dCs9MylpLnB1c2goci5zbGljZSh0LHQrMykpO3JldHVybiBpfX07ZnVuY3Rpb24gZ3B0KHQpe2NvbnN0IGU9dC5sZW5ndGg7ZT4yJiZ0W2UtMV0uZXF1YWxzKHRbMF0pJiZ0LnBvcCgpfWZ1bmN0aW9uIGhwdCh0LGUpe2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXQucHVzaChlW25dLngpLHQucHVzaChlW25dLnkpfWNsYXNzIGJwdCBleHRlbmRzIFpydHtjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKCksdGhpcy50eXBlPSJFeHRydWRlR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17c2hhcGVzOnQsb3B0aW9uczplfSx0PUFycmF5LmlzQXJyYXkodCk/dDpbdF07Y29uc3Qgbj10aGlzLG89W10saT1bXTtmb3IobGV0IGU9MCxuPXQubGVuZ3RoO2U8bjtlKyspYSh0W2VdKTtmdW5jdGlvbiBhKHQpe2NvbnN0IGE9W10scj12b2lkIDAhPT1lLmN1cnZlU2VnbWVudHM/ZS5jdXJ2ZVNlZ21lbnRzOjEyLHM9dm9pZCAwIT09ZS5zdGVwcz9lLnN0ZXBzOjE7bGV0IGw9dm9pZCAwIT09ZS5kZXB0aD9lLmRlcHRoOjEwMCxjPXZvaWQgMD09PWUuYmV2ZWxFbmFibGVkfHxlLmJldmVsRW5hYmxlZCxkPXZvaWQgMCE9PWUuYmV2ZWxUaGlja25lc3M/ZS5iZXZlbFRoaWNrbmVzczo2LHA9dm9pZCAwIT09ZS5iZXZlbFNpemU/ZS5iZXZlbFNpemU6ZC0yLG09dm9pZCAwIT09ZS5iZXZlbE9mZnNldD9lLmJldmVsT2Zmc2V0OjAsdT12b2lkIDAhPT1lLmJldmVsU2VnbWVudHM/ZS5iZXZlbFNlZ21lbnRzOjM7Y29uc3QgZj1lLmV4dHJ1ZGVQYXRoLGc9dm9pZCAwIT09ZS5VVkdlbmVyYXRvcj9lLlVWR2VuZXJhdG9yOnlwdDt2b2lkIDAhPT1lLmFtb3VudCYmKGNvbnNvbGUud2FybigiVEhSRUUuRXh0cnVkZUJ1ZmZlckdlb21ldHJ5OiBhbW91bnQgaGFzIGJlZW4gcmVuYW1lZCB0byBkZXB0aC4iKSxsPWUuYW1vdW50KTtsZXQgaCxiLHksXyxDLE09ITE7ZiYmKGg9Zi5nZXRTcGFjZWRQb2ludHMocyksTT0hMCxjPSExLGI9Zi5jb21wdXRlRnJlbmV0RnJhbWVzKHMsITEpLHk9bmV3ICRpdCxfPW5ldyAkaXQsQz1uZXcgJGl0KSxjfHwodT0wLGQ9MCxwPTAsbT0wKTtjb25zdCB2PXQuZXh0cmFjdFBvaW50cyhyKTtsZXQgeD12LnNoYXBlO2NvbnN0IE89di5ob2xlcztpZighZnB0LmlzQ2xvY2tXaXNlKHgpKXt4PXgucmV2ZXJzZSgpO2ZvcihsZXQgdD0wLGU9Ty5sZW5ndGg7dDxlO3QrKyl7Y29uc3QgZT1PW3RdO2ZwdC5pc0Nsb2NrV2lzZShlKSYmKE9bdF09ZS5yZXZlcnNlKCkpfX1jb25zdCBQPWZwdC50cmlhbmd1bGF0ZVNoYXBlKHgsTyksdz14O2ZvcihsZXQgdD0wLGU9Ty5sZW5ndGg7dDxlO3QrKyl4PXguY29uY2F0KE9bdF0pO2Z1bmN0aW9uIGsodCxlLG4pe3JldHVybiBlfHxjb25zb2xlLmVycm9yKCJUSFJFRS5FeHRydWRlR2VvbWV0cnk6IHZlYyBkb2VzIG5vdCBleGlzdCIpLGUuY2xvbmUoKS5tdWx0aXBseVNjYWxhcihuKS5hZGQodCl9Y29uc3QgUz14Lmxlbmd0aCxEPVAubGVuZ3RoO2Z1bmN0aW9uIEUodCxlLG4pe2xldCBvLGksYTtjb25zdCByPXQueC1lLngscz10LnktZS55LGw9bi54LXQueCxjPW4ueS10LnksZD1yKnIrcypzO2lmKE1hdGguYWJzKHIqYy1zKmwpPk51bWJlci5FUFNJTE9OKXtjb25zdCBwPU1hdGguc3FydChkKSxtPU1hdGguc3FydChsKmwrYypjKSx1PWUueC1zL3AsZj1lLnkrci9wLGc9KChuLngtYy9tLXUpKmMtKG4ueStsL20tZikqbCkvKHIqYy1zKmwpO289dStyKmctdC54LGk9ZitzKmctdC55O2NvbnN0IGg9bypvK2kqaTtpZihoPD0yKXJldHVybiBuZXcgVWl0KG8saSk7YT1NYXRoLnNxcnQoaC8yKX1lbHNle2xldCB0PSExO3I+TnVtYmVyLkVQU0lMT04/bD5OdW1iZXIuRVBTSUxPTiYmKHQ9ITApOnI8LU51bWJlci5FUFNJTE9OP2w8LU51bWJlci5FUFNJTE9OJiYodD0hMCk6TWF0aC5zaWduKHMpPT09TWF0aC5zaWduKGMpJiYodD0hMCksdD8obz0tcyxpPXIsYT1NYXRoLnNxcnQoZCkpOihvPXIsaT1zLGE9TWF0aC5zcXJ0KGQvMikpfXJldHVybiBuZXcgVWl0KG8vYSxpL2EpfWNvbnN0IEE9W107Zm9yKGxldCB0PTAsZT13Lmxlbmd0aCxuPWUtMSxvPXQrMTt0PGU7dCsrLG4rKyxvKyspbj09PWUmJihuPTApLG89PT1lJiYobz0wKSxBW3RdPUUod1t0XSx3W25dLHdbb10pO2NvbnN0IFI9W107bGV0IFQsTj1BLmNvbmNhdCgpO2ZvcihsZXQgdD0wLGU9Ty5sZW5ndGg7dDxlO3QrKyl7Y29uc3QgZT1PW3RdO1Q9W107Zm9yKGxldCB0PTAsbj1lLmxlbmd0aCxvPW4tMSxpPXQrMTt0PG47dCsrLG8rKyxpKyspbz09PW4mJihvPTApLGk9PT1uJiYoaT0wKSxUW3RdPUUoZVt0XSxlW29dLGVbaV0pO1IucHVzaChUKSxOPU4uY29uY2F0KFQpfWZvcihsZXQgdD0wO3Q8dTt0Kyspe2NvbnN0IGU9dC91LG49ZCpNYXRoLmNvcyhlKk1hdGguUEkvMiksbz1wKk1hdGguc2luKGUqTWF0aC5QSS8yKSttO2ZvcihsZXQgdD0wLGU9dy5sZW5ndGg7dDxlO3QrKyl7Y29uc3QgZT1rKHdbdF0sQVt0XSxvKTtIKGUueCxlLnksLW4pfWZvcihsZXQgdD0wLGU9Ty5sZW5ndGg7dDxlO3QrKyl7Y29uc3QgZT1PW3RdO1Q9Ult0XTtmb3IobGV0IHQ9MCxpPWUubGVuZ3RoO3Q8aTt0Kyspe2NvbnN0IGk9ayhlW3RdLFRbdF0sbyk7SChpLngsaS55LC1uKX19fWNvbnN0IEk9cCttO2ZvcihsZXQgdD0wO3Q8Uzt0Kyspe2NvbnN0IGU9Yz9rKHhbdF0sTlt0XSxJKTp4W3RdO00/KF8uY29weShiLm5vcm1hbHNbMF0pLm11bHRpcGx5U2NhbGFyKGUueCkseS5jb3B5KGIuYmlub3JtYWxzWzBdKS5tdWx0aXBseVNjYWxhcihlLnkpLEMuY29weShoWzBdKS5hZGQoXykuYWRkKHkpLEgoQy54LEMueSxDLnopKTpIKGUueCxlLnksMCl9Zm9yKGxldCB0PTE7dDw9czt0KyspZm9yKGxldCBlPTA7ZTxTO2UrKyl7Y29uc3Qgbj1jP2soeFtlXSxOW2VdLEkpOnhbZV07TT8oXy5jb3B5KGIubm9ybWFsc1t0XSkubXVsdGlwbHlTY2FsYXIobi54KSx5LmNvcHkoYi5iaW5vcm1hbHNbdF0pLm11bHRpcGx5U2NhbGFyKG4ueSksQy5jb3B5KGhbdF0pLmFkZChfKS5hZGQoeSksSChDLngsQy55LEMueikpOkgobi54LG4ueSxsL3MqdCl9Zm9yKGxldCB0PXUtMTt0Pj0wO3QtLSl7Y29uc3QgZT10L3Usbj1kKk1hdGguY29zKGUqTWF0aC5QSS8yKSxvPXAqTWF0aC5zaW4oZSpNYXRoLlBJLzIpK207Zm9yKGxldCB0PTAsZT13Lmxlbmd0aDt0PGU7dCsrKXtjb25zdCBlPWsod1t0XSxBW3RdLG8pO0goZS54LGUueSxsK24pfWZvcihsZXQgdD0wLGU9Ty5sZW5ndGg7dDxlO3QrKyl7Y29uc3QgZT1PW3RdO1Q9Ult0XTtmb3IobGV0IHQ9MCxpPWUubGVuZ3RoO3Q8aTt0Kyspe2NvbnN0IGk9ayhlW3RdLFRbdF0sbyk7TT9IKGkueCxpLnkraFtzLTFdLnksaFtzLTFdLngrbik6SChpLngsaS55LGwrbil9fX1mdW5jdGlvbiB6KHQsZSl7bGV0IG49dC5sZW5ndGg7Zm9yKDstLW4+PTA7KXtjb25zdCBvPW47bGV0IGk9bi0xO2k8MCYmKGk9dC5sZW5ndGgtMSk7Zm9yKGxldCB0PTAsbj1zKzIqdTt0PG47dCsrKXtjb25zdCBuPVMqdCxhPVMqKHQrMSk7TChlK28rbixlK2krbixlK2krYSxlK28rYSl9fX1mdW5jdGlvbiBIKHQsZSxuKXthLnB1c2godCksYS5wdXNoKGUpLGEucHVzaChuKX1mdW5jdGlvbiBGKHQsZSxpKXtCKHQpLEIoZSksQihpKTtjb25zdCBhPW8ubGVuZ3RoLzMscj1nLmdlbmVyYXRlVG9wVVYobixvLGEtMyxhLTIsYS0xKTtWKHJbMF0pLFYoclsxXSksVihyWzJdKX1mdW5jdGlvbiBMKHQsZSxpLGEpe0IodCksQihlKSxCKGEpLEIoZSksQihpKSxCKGEpO2NvbnN0IHI9by5sZW5ndGgvMyxzPWcuZ2VuZXJhdGVTaWRlV2FsbFVWKG4sbyxyLTYsci0zLHItMixyLTEpO1Yoc1swXSksVihzWzFdKSxWKHNbM10pLFYoc1sxXSksVihzWzJdKSxWKHNbM10pfWZ1bmN0aW9uIEIodCl7by5wdXNoKGFbMyp0KzBdKSxvLnB1c2goYVszKnQrMV0pLG8ucHVzaChhWzMqdCsyXSl9ZnVuY3Rpb24gVih0KXtpLnB1c2godC54KSxpLnB1c2godC55KX0hKGZ1bmN0aW9uIGooKXtjb25zdCB0PW8ubGVuZ3RoLzM7aWYoYyl7bGV0IHQ9MCxlPVMqdDtmb3IobGV0IHQ9MDt0PEQ7dCsrKXtjb25zdCBuPVBbdF07RihuWzJdK2UsblsxXStlLG5bMF0rZSl9dD1zKzIqdSxlPVMqdDtmb3IobGV0IHQ9MDt0PEQ7dCsrKXtjb25zdCBuPVBbdF07RihuWzBdK2UsblsxXStlLG5bMl0rZSl9fWVsc2V7Zm9yKGxldCB0PTA7dDxEO3QrKyl7Y29uc3QgZT1QW3RdO0YoZVsyXSxlWzFdLGVbMF0pfWZvcihsZXQgdD0wO3Q8RDt0Kyspe2NvbnN0IGU9UFt0XTtGKGVbMF0rUypzLGVbMV0rUypzLGVbMl0rUypzKX19bi5hZGRHcm91cCh0LG8ubGVuZ3RoLzMtdCwwKX0pKCksKGZ1bmN0aW9uIFUoKXtjb25zdCB0PW8ubGVuZ3RoLzM7bGV0IGU9MDt6KHcsZSksZSs9dy5sZW5ndGg7Zm9yKGxldCB0PTAsbj1PLmxlbmd0aDt0PG47dCsrKXtjb25zdCBuPU9bdF07eihuLGUpLGUrPW4ubGVuZ3RofW4uYWRkR3JvdXAodCxvLmxlbmd0aC8zLXQsMSl9KSgpfXRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHpydChvLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyB6cnQoaSwyKSksdGhpcy5jb21wdXRlVmVydGV4Tm9ybWFscygpfXRvSlNPTigpe2NvbnN0IHQ9WnJ0LnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzKTtyZXR1cm4oZnVuY3Rpb24gZSh0LG4sbyl7aWYoby5zaGFwZXM9W10sQXJyYXkuaXNBcnJheSh0KSlmb3IobGV0IGU9MCxuPXQubGVuZ3RoO2U8bjtlKyspby5zaGFwZXMucHVzaCh0W2VdLnV1aWQpO2Vsc2Ugby5zaGFwZXMucHVzaCh0LnV1aWQpO3JldHVybiB2b2lkIDAhPT1uLmV4dHJ1ZGVQYXRoJiYoby5vcHRpb25zLmV4dHJ1ZGVQYXRoPW4uZXh0cnVkZVBhdGgudG9KU09OKCkpLG99KSh0aGlzLnBhcmFtZXRlcnMuc2hhcGVzLHRoaXMucGFyYW1ldGVycy5vcHRpb25zLHQpfX1jb25zdCB5cHQ9e2dlbmVyYXRlVG9wVVY6ZnVuY3Rpb24odCxlLG4sbyxpKXtjb25zdCBhPWVbMypvXSxyPWVbMypvKzFdLHM9ZVszKmldLGw9ZVszKmkrMV07cmV0dXJuW25ldyBVaXQoZVszKm5dLGVbMypuKzFdKSxuZXcgVWl0KGEsciksbmV3IFVpdChzLGwpXX0sZ2VuZXJhdGVTaWRlV2FsbFVWOmZ1bmN0aW9uKHQsZSxuLG8saSxhKXtjb25zdCByPWVbMypuXSxzPWVbMypuKzFdLGw9ZVszKm4rMl0sYz1lWzMqb10sZD1lWzMqbysxXSxwPWVbMypvKzJdLG09ZVszKmldLHU9ZVszKmkrMV0sZj1lWzMqaSsyXSxnPWVbMyphXSxoPWVbMyphKzFdLGI9ZVszKmErMl07cmV0dXJuIE1hdGguYWJzKHMtZCk8LjAxP1tuZXcgVWl0KHIsMS1sKSxuZXcgVWl0KGMsMS1wKSxuZXcgVWl0KG0sMS1mKSxuZXcgVWl0KGcsMS1iKV06W25ldyBVaXQocywxLWwpLG5ldyBVaXQoZCwxLXApLG5ldyBVaXQodSwxLWYpLG5ldyBVaXQoaCwxLWIpXX19O2Z1bmN0aW9uIF9wdCh0LGUsbil7WnJ0LmNhbGwodGhpcyksdGhpcy50eXBlPSJQYXJhbWV0cmljR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17ZnVuYzp0LHNsaWNlczplLHN0YWNrczpufTtjb25zdCBvPVtdLGk9W10sYT1bXSxyPVtdLHM9MWUtNSxsPW5ldyAkaXQsYz1uZXcgJGl0LGQ9bmV3ICRpdCxwPW5ldyAkaXQsbT1uZXcgJGl0O3QubGVuZ3RoPDMmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLlBhcmFtZXRyaWNHZW9tZXRyeTogRnVuY3Rpb24gbXVzdCBub3cgbW9kaWZ5IGEgVmVjdG9yMyBhcyB0aGlyZCBwYXJhbWV0ZXIuIik7Y29uc3QgdT1lKzE7Zm9yKGxldCBvPTA7bzw9bjtvKyspe2NvbnN0IHU9by9uO2ZvcihsZXQgbj0wO248PWU7bisrKXtjb25zdCBvPW4vZTt0KG8sdSxjKSxpLnB1c2goYy54LGMueSxjLnopLG8tcz49MD8odChvLXMsdSxkKSxwLnN1YlZlY3RvcnMoYyxkKSk6KHQobytzLHUsZCkscC5zdWJWZWN0b3JzKGQsYykpLHUtcz49MD8odChvLHUtcyxkKSxtLnN1YlZlY3RvcnMoYyxkKSk6KHQobyx1K3MsZCksbS5zdWJWZWN0b3JzKGQsYykpLGwuY3Jvc3NWZWN0b3JzKHAsbSkubm9ybWFsaXplKCksYS5wdXNoKGwueCxsLnksbC56KSxyLnB1c2gobyx1KX19Zm9yKGxldCB0PTA7dDxuO3QrKylmb3IobGV0IG49MDtuPGU7bisrKXtjb25zdCBlPXQqdStuKzEsaT0odCsxKSp1K24rMSxhPSh0KzEpKnUrbjtvLnB1c2godCp1K24sZSxhKSxvLnB1c2goZSxpLGEpfXRoaXMuc2V0SW5kZXgobyksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgenJ0KGksMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyB6cnQoYSwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgenJ0KHIsMikpfShfcHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoWnJ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPV9wdDtjbGFzcyBDcHQgZXh0ZW5kcyBacnR7Y29uc3RydWN0b3IodCxlPTEyKXtzdXBlcigpLHRoaXMudHlwZT0iU2hhcGVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtzaGFwZXM6dCxjdXJ2ZVNlZ21lbnRzOmV9O2NvbnN0IG49W10sbz1bXSxpPVtdLGE9W107bGV0IHI9MCxzPTA7aWYoITE9PT1BcnJheS5pc0FycmF5KHQpKWwodCk7ZWxzZSBmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKylsKHRbZV0pLHRoaXMuYWRkR3JvdXAocixzLGUpLHIrPXMscz0wO2Z1bmN0aW9uIGwodCl7Y29uc3Qgcj1vLmxlbmd0aC8zLGw9dC5leHRyYWN0UG9pbnRzKGUpO2xldCBjPWwuc2hhcGU7Y29uc3QgZD1sLmhvbGVzOyExPT09ZnB0LmlzQ2xvY2tXaXNlKGMpJiYoYz1jLnJldmVyc2UoKSk7Zm9yKGxldCB0PTAsZT1kLmxlbmd0aDt0PGU7dCsrKXtjb25zdCBlPWRbdF07ITA9PT1mcHQuaXNDbG9ja1dpc2UoZSkmJihkW3RdPWUucmV2ZXJzZSgpKX1jb25zdCBwPWZwdC50cmlhbmd1bGF0ZVNoYXBlKGMsZCk7Zm9yKGxldCB0PTAsZT1kLmxlbmd0aDt0PGU7dCsrKWM9Yy5jb25jYXQoZFt0XSk7Zm9yKGxldCB0PTAsZT1jLmxlbmd0aDt0PGU7dCsrKXtjb25zdCBlPWNbdF07by5wdXNoKGUueCxlLnksMCksaS5wdXNoKDAsMCwxKSxhLnB1c2goZS54LGUueSl9Zm9yKGxldCB0PTAsZT1wLmxlbmd0aDt0PGU7dCsrKXtjb25zdCBlPXBbdF07bi5wdXNoKGVbMF0rcixlWzFdK3IsZVsyXStyKSxzKz0zfX10aGlzLnNldEluZGV4KG4pLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHpydChvLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgenJ0KGksMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IHpydChhLDIpKX10b0pTT04oKXtjb25zdCB0PVpydC5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyk7cmV0dXJuKGZ1bmN0aW9uIGUodCxuKXtpZihuLnNoYXBlcz1bXSxBcnJheS5pc0FycmF5KHQpKWZvcihsZXQgZT0wLG89dC5sZW5ndGg7ZTxvO2UrKyluLnNoYXBlcy5wdXNoKHRbZV0udXVpZCk7ZWxzZSBuLnNoYXBlcy5wdXNoKHQudXVpZCk7cmV0dXJuIG59KSh0aGlzLnBhcmFtZXRlcnMuc2hhcGVzLHQpfX1mdW5jdGlvbiBNcHQodCl7eHJ0LmNhbGwodGhpcyksdGhpcy50eXBlPSJTaGFkb3dNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgQ3J0KDApLHRoaXMudHJhbnNwYXJlbnQ9ITAsdGhpcy5zZXRWYWx1ZXModCl9ZnVuY3Rpb24gdnB0KHQpe3lzdC5jYWxsKHRoaXMsdCksdGhpcy50eXBlPSJSYXdTaGFkZXJNYXRlcmlhbCJ9ZnVuY3Rpb24geHB0KHQpe3hydC5jYWxsKHRoaXMpLHRoaXMuZGVmaW5lcz17U1RBTkRBUkQ6IiJ9LHRoaXMudHlwZT0iTWVzaFN0YW5kYXJkTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IENydCgxNjc3NzIxNSksdGhpcy5yb3VnaG5lc3M9MSx0aGlzLm1ldGFsbmVzcz0wLHRoaXMubWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmU9bmV3IENydCgwKSx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZU1hcD1udWxsLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9MCx0aGlzLm5vcm1hbFNjYWxlPW5ldyBVaXQoMSwxKSx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLnJvdWdobmVzc01hcD1udWxsLHRoaXMubWV0YWxuZXNzTWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZW52TWFwPW51bGwsdGhpcy5lbnZNYXBJbnRlbnNpdHk9MSx0aGlzLnJlZnJhY3Rpb25SYXRpbz0uOTgsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZUxpbmVjYXA9InJvdW5kIix0aGlzLndpcmVmcmFtZUxpbmVqb2luPSJyb3VuZCIsdGhpcy5za2lubmluZz0hMSx0aGlzLm1vcnBoVGFyZ2V0cz0hMSx0aGlzLm1vcnBoTm9ybWFscz0hMSx0aGlzLnZlcnRleFRhbmdlbnRzPSExLHRoaXMuc2V0VmFsdWVzKHQpfWZ1bmN0aW9uIE9wdCh0KXt4cHQuY2FsbCh0aGlzKSx0aGlzLmRlZmluZXM9e1NUQU5EQVJEOiIiLFBIWVNJQ0FMOiIifSx0aGlzLnR5cGU9Ik1lc2hQaHlzaWNhbE1hdGVyaWFsIix0aGlzLmNsZWFyY29hdD0wLHRoaXMuY2xlYXJjb2F0TWFwPW51bGwsdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3M9MCx0aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcD1udWxsLHRoaXMuY2xlYXJjb2F0Tm9ybWFsU2NhbGU9bmV3IFVpdCgxLDEpLHRoaXMuY2xlYXJjb2F0Tm9ybWFsTWFwPW51bGwsdGhpcy5yZWZsZWN0aXZpdHk9LjUsT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlvciIse2dldDpmdW5jdGlvbigpe3JldHVybigxKy40KnRoaXMucmVmbGVjdGl2aXR5KS8oMS0uNCp0aGlzLnJlZmxlY3Rpdml0eSl9LHNldDpmdW5jdGlvbih0KXt0aGlzLnJlZmxlY3Rpdml0eT1qaXQuY2xhbXAoMi41Kih0LTEpLyh0KzEpLDAsMSl9fSksdGhpcy5zaGVlbj1udWxsLHRoaXMudHJhbnNtaXNzaW9uPTAsdGhpcy50cmFuc21pc3Npb25NYXA9bnVsbCx0aGlzLnNldFZhbHVlcyh0KX1mdW5jdGlvbiBQcHQodCl7eHJ0LmNhbGwodGhpcyksdGhpcy50eXBlPSJNZXNoUGhvbmdNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgQ3J0KDE2Nzc3MjE1KSx0aGlzLnNwZWN1bGFyPW5ldyBDcnQoMTExODQ4MSksdGhpcy5zaGluaW5lc3M9MzAsdGhpcy5tYXA9bnVsbCx0aGlzLmxpZ2h0TWFwPW51bGwsdGhpcy5saWdodE1hcEludGVuc2l0eT0xLHRoaXMuYW9NYXA9bnVsbCx0aGlzLmFvTWFwSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZT1uZXcgQ3J0KDApLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlTWFwPW51bGwsdGhpcy5idW1wTWFwPW51bGwsdGhpcy5idW1wU2NhbGU9MSx0aGlzLm5vcm1hbE1hcD1udWxsLHRoaXMubm9ybWFsTWFwVHlwZT0wLHRoaXMubm9ybWFsU2NhbGU9bmV3IFVpdCgxLDEpLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMuc3BlY3VsYXJNYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5lbnZNYXA9bnVsbCx0aGlzLmNvbWJpbmU9MCx0aGlzLnJlZmxlY3Rpdml0eT0xLHRoaXMucmVmcmFjdGlvblJhdGlvPS45OCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLnNraW5uaW5nPSExLHRoaXMubW9ycGhUYXJnZXRzPSExLHRoaXMubW9ycGhOb3JtYWxzPSExLHRoaXMuc2V0VmFsdWVzKHQpfWZ1bmN0aW9uIHdwdCh0KXt4cnQuY2FsbCh0aGlzKSx0aGlzLmRlZmluZXM9e1RPT046IiJ9LHRoaXMudHlwZT0iTWVzaFRvb25NYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgQ3J0KDE2Nzc3MjE1KSx0aGlzLm1hcD1udWxsLHRoaXMuZ3JhZGllbnRNYXA9bnVsbCx0aGlzLmxpZ2h0TWFwPW51bGwsdGhpcy5saWdodE1hcEludGVuc2l0eT0xLHRoaXMuYW9NYXA9bnVsbCx0aGlzLmFvTWFwSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZT1uZXcgQ3J0KDApLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlTWFwPW51bGwsdGhpcy5idW1wTWFwPW51bGwsdGhpcy5idW1wU2NhbGU9MSx0aGlzLm5vcm1hbE1hcD1udWxsLHRoaXMubm9ybWFsTWFwVHlwZT0wLHRoaXMubm9ybWFsU2NhbGU9bmV3IFVpdCgxLDEpLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLnNraW5uaW5nPSExLHRoaXMubW9ycGhUYXJnZXRzPSExLHRoaXMubW9ycGhOb3JtYWxzPSExLHRoaXMuc2V0VmFsdWVzKHQpfWZ1bmN0aW9uIGtwdCh0KXt4cnQuY2FsbCh0aGlzKSx0aGlzLnR5cGU9Ik1lc2hOb3JtYWxNYXRlcmlhbCIsdGhpcy5idW1wTWFwPW51bGwsdGhpcy5idW1wU2NhbGU9MSx0aGlzLm5vcm1hbE1hcD1udWxsLHRoaXMubm9ybWFsTWFwVHlwZT0wLHRoaXMubm9ybWFsU2NhbGU9bmV3IFVpdCgxLDEpLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy5mb2c9ITEsdGhpcy5za2lubmluZz0hMSx0aGlzLm1vcnBoVGFyZ2V0cz0hMSx0aGlzLm1vcnBoTm9ybWFscz0hMSx0aGlzLnNldFZhbHVlcyh0KX1mdW5jdGlvbiBTcHQodCl7eHJ0LmNhbGwodGhpcyksdGhpcy50eXBlPSJNZXNoTGFtYmVydE1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBDcnQoMTY3NzcyMTUpLHRoaXMubWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmU9bmV3IENydCgwKSx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZU1hcD1udWxsLHRoaXMuc3BlY3VsYXJNYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5lbnZNYXA9bnVsbCx0aGlzLmNvbWJpbmU9MCx0aGlzLnJlZmxlY3Rpdml0eT0xLHRoaXMucmVmcmFjdGlvblJhdGlvPS45OCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLnNraW5uaW5nPSExLHRoaXMubW9ycGhUYXJnZXRzPSExLHRoaXMubW9ycGhOb3JtYWxzPSExLHRoaXMuc2V0VmFsdWVzKHQpfWZ1bmN0aW9uIERwdCh0KXt4cnQuY2FsbCh0aGlzKSx0aGlzLmRlZmluZXM9e01BVENBUDoiIn0sdGhpcy50eXBlPSJNZXNoTWF0Y2FwTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IENydCgxNjc3NzIxNSksdGhpcy5tYXRjYXA9bnVsbCx0aGlzLm1hcD1udWxsLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9MCx0aGlzLm5vcm1hbFNjYWxlPW5ldyBVaXQoMSwxKSx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5za2lubmluZz0hMSx0aGlzLm1vcnBoVGFyZ2V0cz0hMSx0aGlzLm1vcnBoTm9ybWFscz0hMSx0aGlzLnNldFZhbHVlcyh0KX1mdW5jdGlvbiBFcHQodCl7TWR0LmNhbGwodGhpcyksdGhpcy50eXBlPSJMaW5lRGFzaGVkTWF0ZXJpYWwiLHRoaXMuc2NhbGU9MSx0aGlzLmRhc2hTaXplPTMsdGhpcy5nYXBTaXplPTEsdGhpcy5zZXRWYWx1ZXModCl9KE1wdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh4cnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9TXB0LE1wdC5wcm90b3R5cGUuaXNTaGFkb3dNYXRlcmlhbD0hMCxNcHQucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24odCl7cmV0dXJuIHhydC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXN9LCh2cHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeXN0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPXZwdCx2cHQucHJvdG90eXBlLmlzUmF3U2hhZGVyTWF0ZXJpYWw9ITAsKHhwdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh4cnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9eHB0LHhwdC5wcm90b3R5cGUuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD0hMCx4cHQucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24odCl7cmV0dXJuIHhydC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy5kZWZpbmVzPXtTVEFOREFSRDoiIn0sdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMucm91Z2huZXNzPXQucm91Z2huZXNzLHRoaXMubWV0YWxuZXNzPXQubWV0YWxuZXNzLHRoaXMubWFwPXQubWFwLHRoaXMubGlnaHRNYXA9dC5saWdodE1hcCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PXQubGlnaHRNYXBJbnRlbnNpdHksdGhpcy5hb01hcD10LmFvTWFwLHRoaXMuYW9NYXBJbnRlbnNpdHk9dC5hb01hcEludGVuc2l0eSx0aGlzLmVtaXNzaXZlLmNvcHkodC5lbWlzc2l2ZSksdGhpcy5lbWlzc2l2ZU1hcD10LmVtaXNzaXZlTWFwLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9dC5lbWlzc2l2ZUludGVuc2l0eSx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMucm91Z2huZXNzTWFwPXQucm91Z2huZXNzTWFwLHRoaXMubWV0YWxuZXNzTWFwPXQubWV0YWxuZXNzTWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmVudk1hcD10LmVudk1hcCx0aGlzLmVudk1hcEludGVuc2l0eT10LmVudk1hcEludGVuc2l0eSx0aGlzLnJlZnJhY3Rpb25SYXRpbz10LnJlZnJhY3Rpb25SYXRpbyx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLndpcmVmcmFtZUxpbmVjYXA9dC53aXJlZnJhbWVMaW5lY2FwLHRoaXMud2lyZWZyYW1lTGluZWpvaW49dC53aXJlZnJhbWVMaW5lam9pbix0aGlzLnNraW5uaW5nPXQuc2tpbm5pbmcsdGhpcy5tb3JwaFRhcmdldHM9dC5tb3JwaFRhcmdldHMsdGhpcy5tb3JwaE5vcm1hbHM9dC5tb3JwaE5vcm1hbHMsdGhpcy52ZXJ0ZXhUYW5nZW50cz10LnZlcnRleFRhbmdlbnRzLHRoaXN9LChPcHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeHB0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPU9wdCxPcHQucHJvdG90eXBlLmlzTWVzaFBoeXNpY2FsTWF0ZXJpYWw9ITAsT3B0LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHQpe3JldHVybiB4cHQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMuZGVmaW5lcz17U1RBTkRBUkQ6IiIsUEhZU0lDQUw6IiJ9LHRoaXMuY2xlYXJjb2F0PXQuY2xlYXJjb2F0LHRoaXMuY2xlYXJjb2F0TWFwPXQuY2xlYXJjb2F0TWFwLHRoaXMuY2xlYXJjb2F0Um91Z2huZXNzPXQuY2xlYXJjb2F0Um91Z2huZXNzLHRoaXMuY2xlYXJjb2F0Um91Z2huZXNzTWFwPXQuY2xlYXJjb2F0Um91Z2huZXNzTWFwLHRoaXMuY2xlYXJjb2F0Tm9ybWFsTWFwPXQuY2xlYXJjb2F0Tm9ybWFsTWFwLHRoaXMuY2xlYXJjb2F0Tm9ybWFsU2NhbGUuY29weSh0LmNsZWFyY29hdE5vcm1hbFNjYWxlKSx0aGlzLnJlZmxlY3Rpdml0eT10LnJlZmxlY3Rpdml0eSx0aGlzLnNoZWVuPXQuc2hlZW4/KHRoaXMuc2hlZW58fG5ldyBDcnQpLmNvcHkodC5zaGVlbik6bnVsbCx0aGlzLnRyYW5zbWlzc2lvbj10LnRyYW5zbWlzc2lvbix0aGlzLnRyYW5zbWlzc2lvbk1hcD10LnRyYW5zbWlzc2lvbk1hcCx0aGlzfSwoUHB0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHhydC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1QcHQsUHB0LnByb3RvdHlwZS5pc01lc2hQaG9uZ01hdGVyaWFsPSEwLFBwdC5wcm90b3R5cGUuY29weT1mdW5jdGlvbih0KXtyZXR1cm4geHJ0LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5zcGVjdWxhci5jb3B5KHQuc3BlY3VsYXIpLHRoaXMuc2hpbmluZXNzPXQuc2hpbmluZXNzLHRoaXMubWFwPXQubWFwLHRoaXMubGlnaHRNYXA9dC5saWdodE1hcCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PXQubGlnaHRNYXBJbnRlbnNpdHksdGhpcy5hb01hcD10LmFvTWFwLHRoaXMuYW9NYXBJbnRlbnNpdHk9dC5hb01hcEludGVuc2l0eSx0aGlzLmVtaXNzaXZlLmNvcHkodC5lbWlzc2l2ZSksdGhpcy5lbWlzc2l2ZU1hcD10LmVtaXNzaXZlTWFwLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9dC5lbWlzc2l2ZUludGVuc2l0eSx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMuc3BlY3VsYXJNYXA9dC5zcGVjdWxhck1hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5lbnZNYXA9dC5lbnZNYXAsdGhpcy5jb21iaW5lPXQuY29tYmluZSx0aGlzLnJlZmxlY3Rpdml0eT10LnJlZmxlY3Rpdml0eSx0aGlzLnJlZnJhY3Rpb25SYXRpbz10LnJlZnJhY3Rpb25SYXRpbyx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLndpcmVmcmFtZUxpbmVjYXA9dC53aXJlZnJhbWVMaW5lY2FwLHRoaXMud2lyZWZyYW1lTGluZWpvaW49dC53aXJlZnJhbWVMaW5lam9pbix0aGlzLnNraW5uaW5nPXQuc2tpbm5pbmcsdGhpcy5tb3JwaFRhcmdldHM9dC5tb3JwaFRhcmdldHMsdGhpcy5tb3JwaE5vcm1hbHM9dC5tb3JwaE5vcm1hbHMsdGhpc30sKHdwdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh4cnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9d3B0LHdwdC5wcm90b3R5cGUuaXNNZXNoVG9vbk1hdGVyaWFsPSEwLHdwdC5wcm90b3R5cGUuY29weT1mdW5jdGlvbih0KXtyZXR1cm4geHJ0LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5tYXA9dC5tYXAsdGhpcy5ncmFkaWVudE1hcD10LmdyYWRpZW50TWFwLHRoaXMubGlnaHRNYXA9dC5saWdodE1hcCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PXQubGlnaHRNYXBJbnRlbnNpdHksdGhpcy5hb01hcD10LmFvTWFwLHRoaXMuYW9NYXBJbnRlbnNpdHk9dC5hb01hcEludGVuc2l0eSx0aGlzLmVtaXNzaXZlLmNvcHkodC5lbWlzc2l2ZSksdGhpcy5lbWlzc2l2ZU1hcD10LmVtaXNzaXZlTWFwLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9dC5lbWlzc2l2ZUludGVuc2l0eSx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLndpcmVmcmFtZUxpbmVjYXA9dC53aXJlZnJhbWVMaW5lY2FwLHRoaXMud2lyZWZyYW1lTGluZWpvaW49dC53aXJlZnJhbWVMaW5lam9pbix0aGlzLnNraW5uaW5nPXQuc2tpbm5pbmcsdGhpcy5tb3JwaFRhcmdldHM9dC5tb3JwaFRhcmdldHMsdGhpcy5tb3JwaE5vcm1hbHM9dC5tb3JwaE5vcm1hbHMsdGhpc30sKGtwdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh4cnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9a3B0LGtwdC5wcm90b3R5cGUuaXNNZXNoTm9ybWFsTWF0ZXJpYWw9ITAsa3B0LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHQpe3JldHVybiB4cnQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMuYnVtcE1hcD10LmJ1bXBNYXAsdGhpcy5idW1wU2NhbGU9dC5idW1wU2NhbGUsdGhpcy5ub3JtYWxNYXA9dC5ub3JtYWxNYXAsdGhpcy5ub3JtYWxNYXBUeXBlPXQubm9ybWFsTWFwVHlwZSx0aGlzLm5vcm1hbFNjYWxlLmNvcHkodC5ub3JtYWxTY2FsZSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9dC5kaXNwbGFjZW1lbnRNYXAsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT10LmRpc3BsYWNlbWVudFNjYWxlLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz10LmRpc3BsYWNlbWVudEJpYXMsdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy5za2lubmluZz10LnNraW5uaW5nLHRoaXMubW9ycGhUYXJnZXRzPXQubW9ycGhUYXJnZXRzLHRoaXMubW9ycGhOb3JtYWxzPXQubW9ycGhOb3JtYWxzLHRoaXN9LChTcHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeHJ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPVNwdCxTcHQucHJvdG90eXBlLmlzTWVzaExhbWJlcnRNYXRlcmlhbD0hMCxTcHQucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24odCl7cmV0dXJuIHhydC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubWFwPXQubWFwLHRoaXMubGlnaHRNYXA9dC5saWdodE1hcCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PXQubGlnaHRNYXBJbnRlbnNpdHksdGhpcy5hb01hcD10LmFvTWFwLHRoaXMuYW9NYXBJbnRlbnNpdHk9dC5hb01hcEludGVuc2l0eSx0aGlzLmVtaXNzaXZlLmNvcHkodC5lbWlzc2l2ZSksdGhpcy5lbWlzc2l2ZU1hcD10LmVtaXNzaXZlTWFwLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9dC5lbWlzc2l2ZUludGVuc2l0eSx0aGlzLnNwZWN1bGFyTWFwPXQuc3BlY3VsYXJNYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZW52TWFwPXQuZW52TWFwLHRoaXMuY29tYmluZT10LmNvbWJpbmUsdGhpcy5yZWZsZWN0aXZpdHk9dC5yZWZsZWN0aXZpdHksdGhpcy5yZWZyYWN0aW9uUmF0aW89dC5yZWZyYWN0aW9uUmF0aW8sdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpcy5za2lubmluZz10LnNraW5uaW5nLHRoaXMubW9ycGhUYXJnZXRzPXQubW9ycGhUYXJnZXRzLHRoaXMubW9ycGhOb3JtYWxzPXQubW9ycGhOb3JtYWxzLHRoaXN9LChEcHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeHJ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPURwdCxEcHQucHJvdG90eXBlLmlzTWVzaE1hdGNhcE1hdGVyaWFsPSEwLERwdC5wcm90b3R5cGUuY29weT1mdW5jdGlvbih0KXtyZXR1cm4geHJ0LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLmRlZmluZXM9e01BVENBUDoiIn0sdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubWF0Y2FwPXQubWF0Y2FwLHRoaXMubWFwPXQubWFwLHRoaXMuYnVtcE1hcD10LmJ1bXBNYXAsdGhpcy5idW1wU2NhbGU9dC5idW1wU2NhbGUsdGhpcy5ub3JtYWxNYXA9dC5ub3JtYWxNYXAsdGhpcy5ub3JtYWxNYXBUeXBlPXQubm9ybWFsTWFwVHlwZSx0aGlzLm5vcm1hbFNjYWxlLmNvcHkodC5ub3JtYWxTY2FsZSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9dC5kaXNwbGFjZW1lbnRNYXAsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT10LmRpc3BsYWNlbWVudFNjYWxlLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz10LmRpc3BsYWNlbWVudEJpYXMsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuc2tpbm5pbmc9dC5za2lubmluZyx0aGlzLm1vcnBoVGFyZ2V0cz10Lm1vcnBoVGFyZ2V0cyx0aGlzLm1vcnBoTm9ybWFscz10Lm1vcnBoTm9ybWFscyx0aGlzfSwoRXB0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE1kdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1FcHQsRXB0LnByb3RvdHlwZS5pc0xpbmVEYXNoZWRNYXRlcmlhbD0hMCxFcHQucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24odCl7cmV0dXJuIE1kdC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy5zY2FsZT10LnNjYWxlLHRoaXMuZGFzaFNpemU9dC5kYXNoU2l6ZSx0aGlzLmdhcFNpemU9dC5nYXBTaXplLHRoaXN9O3ZhciBBcHQ9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsU2hhZG93TWF0ZXJpYWw6TXB0LFNwcml0ZU1hdGVyaWFsOlZjdCxSYXdTaGFkZXJNYXRlcmlhbDp2cHQsU2hhZGVyTWF0ZXJpYWw6eXN0LFBvaW50c01hdGVyaWFsOlJkdCxNZXNoUGh5c2ljYWxNYXRlcmlhbDpPcHQsTWVzaFN0YW5kYXJkTWF0ZXJpYWw6eHB0LE1lc2hQaG9uZ01hdGVyaWFsOlBwdCxNZXNoVG9vbk1hdGVyaWFsOndwdCxNZXNoTm9ybWFsTWF0ZXJpYWw6a3B0LE1lc2hMYW1iZXJ0TWF0ZXJpYWw6U3B0LE1lc2hEZXB0aE1hdGVyaWFsOk9jdCxNZXNoRGlzdGFuY2VNYXRlcmlhbDpQY3QsTWVzaEJhc2ljTWF0ZXJpYWw6T3J0LE1lc2hNYXRjYXBNYXRlcmlhbDpEcHQsTGluZURhc2hlZE1hdGVyaWFsOkVwdCxMaW5lQmFzaWNNYXRlcmlhbDpNZHQsTWF0ZXJpYWw6eHJ0fSk7Y29uc3QgUnB0PXthcnJheVNsaWNlOmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gUnB0LmlzVHlwZWRBcnJheSh0KT9uZXcgdC5jb25zdHJ1Y3Rvcih0LnN1YmFycmF5KGUsdm9pZCAwIT09bj9uOnQubGVuZ3RoKSk6dC5zbGljZShlLG4pfSxjb252ZXJ0QXJyYXk6ZnVuY3Rpb24odCxlLG4pe3JldHVybiF0fHwhbiYmdC5jb25zdHJ1Y3Rvcj09PWU/dDoibnVtYmVyIj09dHlwZW9mIGUuQllURVNfUEVSX0VMRU1FTlQ/bmV3IGUodCk6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCl9LGlzVHlwZWRBcnJheTpmdW5jdGlvbih0KXtyZXR1cm4gQXJyYXlCdWZmZXIuaXNWaWV3KHQpJiYhKHQgaW5zdGFuY2VvZiBEYXRhVmlldyl9LGdldEtleWZyYW1lT3JkZXI6ZnVuY3Rpb24odCl7Y29uc3QgZT10Lmxlbmd0aCxuPW5ldyBBcnJheShlKTtmb3IobGV0IHQ9MDt0IT09ZTsrK3Qpblt0XT10O3JldHVybiBuLnNvcnQoKGZ1bmN0aW9uIG8oZSxuKXtyZXR1cm4gdFtlXS10W25dfSkpLG59LHNvcnRlZEFycmF5OmZ1bmN0aW9uKHQsZSxuKXtjb25zdCBvPXQubGVuZ3RoLGk9bmV3IHQuY29uc3RydWN0b3Iobyk7Zm9yKGxldCBhPTAscj0wO3IhPT1vOysrYSl7Y29uc3Qgbz1uW2FdKmU7Zm9yKGxldCBuPTA7biE9PWU7KytuKWlbcisrXT10W28rbl19cmV0dXJuIGl9LGZsYXR0ZW5KU09OOmZ1bmN0aW9uKHQsZSxuLG8pe2xldCBpPTEsYT10WzBdO2Zvcig7dm9pZCAwIT09YSYmdm9pZCAwPT09YVtvXTspYT10W2krK107aWYodm9pZCAwPT09YSlyZXR1cm47bGV0IHI9YVtvXTtpZih2b2lkIDAhPT1yKWlmKEFycmF5LmlzQXJyYXkocikpZG97cj1hW29dLHZvaWQgMCE9PXImJihlLnB1c2goYS50aW1lKSxuLnB1c2guYXBwbHkobixyKSksYT10W2krK119d2hpbGUodm9pZCAwIT09YSk7ZWxzZSBpZih2b2lkIDAhPT1yLnRvQXJyYXkpZG97cj1hW29dLHZvaWQgMCE9PXImJihlLnB1c2goYS50aW1lKSxyLnRvQXJyYXkobixuLmxlbmd0aCkpLGE9dFtpKytdfXdoaWxlKHZvaWQgMCE9PWEpO2Vsc2UgZG97cj1hW29dLHZvaWQgMCE9PXImJihlLnB1c2goYS50aW1lKSxuLnB1c2gocikpLGE9dFtpKytdfXdoaWxlKHZvaWQgMCE9PWEpfSxzdWJjbGlwOmZ1bmN0aW9uKHQsZSxuLG8saT0zMCl7Y29uc3QgYT10LmNsb25lKCk7YS5uYW1lPWU7Y29uc3Qgcj1bXTtmb3IobGV0IHQ9MDt0PGEudHJhY2tzLmxlbmd0aDsrK3Qpe2NvbnN0IGU9YS50cmFja3NbdF0scz1lLmdldFZhbHVlU2l6ZSgpLGw9W10sYz1bXTtmb3IobGV0IHQ9MDt0PGUudGltZXMubGVuZ3RoOysrdCl7Y29uc3QgYT1lLnRpbWVzW3RdKmk7aWYoIShhPG58fGE+PW8pKXtsLnB1c2goZS50aW1lc1t0XSk7Zm9yKGxldCBuPTA7bjxzOysrbiljLnB1c2goZS52YWx1ZXNbdCpzK25dKX19MCE9PWwubGVuZ3RoJiYoZS50aW1lcz1ScHQuY29udmVydEFycmF5KGwsZS50aW1lcy5jb25zdHJ1Y3RvciksZS52YWx1ZXM9UnB0LmNvbnZlcnRBcnJheShjLGUudmFsdWVzLmNvbnN0cnVjdG9yKSxyLnB1c2goZSkpfWEudHJhY2tzPXI7bGV0IHM9MS8wO2ZvcihsZXQgdD0wO3Q8YS50cmFja3MubGVuZ3RoOysrdClzPmEudHJhY2tzW3RdLnRpbWVzWzBdJiYocz1hLnRyYWNrc1t0XS50aW1lc1swXSk7Zm9yKGxldCB0PTA7dDxhLnRyYWNrcy5sZW5ndGg7Kyt0KWEudHJhY2tzW3RdLnNoaWZ0KC0xKnMpO3JldHVybiBhLnJlc2V0RHVyYXRpb24oKSxhfSxtYWtlQ2xpcEFkZGl0aXZlOmZ1bmN0aW9uKHQsZT0wLG49dCxvPTMwKXtvPD0wJiYobz0zMCk7Y29uc3QgaT1uLnRyYWNrcy5sZW5ndGgsYT1lL287Zm9yKGxldCBlPTA7ZTxpOysrZSl7Y29uc3Qgbz1uLnRyYWNrc1tlXSxpPW8uVmFsdWVUeXBlTmFtZTtpZigiYm9vbCI9PT1pfHwic3RyaW5nIj09PWkpY29udGludWU7Y29uc3Qgcj10LnRyYWNrcy5maW5kKChmdW5jdGlvbih0KXtyZXR1cm4gdC5uYW1lPT09by5uYW1lJiZ0LlZhbHVlVHlwZU5hbWU9PT1pfSkpO2lmKHZvaWQgMD09PXIpY29udGludWU7bGV0IHM9MDtjb25zdCBsPW8uZ2V0VmFsdWVTaXplKCk7by5jcmVhdGVJbnRlcnBvbGFudC5pc0ludGVycG9sYW50RmFjdG9yeU1ldGhvZEdMVEZDdWJpY1NwbGluZSYmKHM9bC8zKTtsZXQgYz0wO2NvbnN0IGQ9ci5nZXRWYWx1ZVNpemUoKTtyLmNyZWF0ZUludGVycG9sYW50LmlzSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kR0xURkN1YmljU3BsaW5lJiYoYz1kLzMpO2NvbnN0IHA9by50aW1lcy5sZW5ndGgtMTtsZXQgbTtpZihhPD1vLnRpbWVzWzBdKW09UnB0LmFycmF5U2xpY2Uoby52YWx1ZXMscyxsLXMpO2Vsc2UgaWYoYT49by50aW1lc1twXSl7Y29uc3QgdD1wKmwrczttPVJwdC5hcnJheVNsaWNlKG8udmFsdWVzLHQsdCtsLXMpfWVsc2V7Y29uc3QgdD1vLmNyZWF0ZUludGVycG9sYW50KCksZT1zLG49bC1zO3QuZXZhbHVhdGUoYSksbT1ScHQuYXJyYXlTbGljZSh0LnJlc3VsdEJ1ZmZlcixlLG4pfSJxdWF0ZXJuaW9uIj09PWkmJihuZXcgUWl0KS5mcm9tQXJyYXkobSkubm9ybWFsaXplKCkuY29uanVnYXRlKCkudG9BcnJheShtKTtjb25zdCB1PXIudGltZXMubGVuZ3RoO2ZvcihsZXQgdD0wO3Q8dTsrK3Qpe2NvbnN0IGU9dCpkK2M7aWYoInF1YXRlcm5pb24iPT09aSlRaXQubXVsdGlwbHlRdWF0ZXJuaW9uc0ZsYXQoci52YWx1ZXMsZSxtLDAsci52YWx1ZXMsZSk7ZWxzZXtjb25zdCB0PWQtMipjO2ZvcihsZXQgbj0wO248dDsrK24pci52YWx1ZXNbZStuXS09bVtuXX19fXJldHVybiB0LmJsZW5kTW9kZT0yNTAxLHR9fTtmdW5jdGlvbiBUcHQodCxlLG4sbyl7dGhpcy5wYXJhbWV0ZXJQb3NpdGlvbnM9dCx0aGlzLl9jYWNoZWRJbmRleD0wLHRoaXMucmVzdWx0QnVmZmVyPXZvaWQgMCE9PW8/bzpuZXcgZS5jb25zdHJ1Y3RvcihuKSx0aGlzLnNhbXBsZVZhbHVlcz1lLHRoaXMudmFsdWVTaXplPW59ZnVuY3Rpb24gTnB0KHQsZSxuLG8pe1RwdC5jYWxsKHRoaXMsdCxlLG4sbyksdGhpcy5fd2VpZ2h0UHJldj0tMCx0aGlzLl9vZmZzZXRQcmV2PS0wLHRoaXMuX3dlaWdodE5leHQ9LTAsdGhpcy5fb2Zmc2V0TmV4dD0tMH1mdW5jdGlvbiBJcHQodCxlLG4sbyl7VHB0LmNhbGwodGhpcyx0LGUsbixvKX1mdW5jdGlvbiB6cHQodCxlLG4sbyl7VHB0LmNhbGwodGhpcyx0LGUsbixvKX1mdW5jdGlvbiBIcHQodCxlLG4sbyl7aWYodm9pZCAwPT09dCl0aHJvdyBuZXcgRXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IHRyYWNrIG5hbWUgaXMgdW5kZWZpbmVkIik7aWYodm9pZCAwPT09ZXx8MD09PWUubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogbm8ga2V5ZnJhbWVzIGluIHRyYWNrIG5hbWVkICIrdCk7dGhpcy5uYW1lPXQsdGhpcy50aW1lcz1ScHQuY29udmVydEFycmF5KGUsdGhpcy5UaW1lQnVmZmVyVHlwZSksdGhpcy52YWx1ZXM9UnB0LmNvbnZlcnRBcnJheShuLHRoaXMuVmFsdWVCdWZmZXJUeXBlKSx0aGlzLnNldEludGVycG9sYXRpb24ob3x8dGhpcy5EZWZhdWx0SW50ZXJwb2xhdGlvbil9ZnVuY3Rpb24gRnB0KHQsZSxuKXtIcHQuY2FsbCh0aGlzLHQsZSxuKX1mdW5jdGlvbiBMcHQodCxlLG4sbyl7SHB0LmNhbGwodGhpcyx0LGUsbixvKX1mdW5jdGlvbiBCcHQodCxlLG4sbyl7SHB0LmNhbGwodGhpcyx0LGUsbixvKX1mdW5jdGlvbiBWcHQodCxlLG4sbyl7VHB0LmNhbGwodGhpcyx0LGUsbixvKX1mdW5jdGlvbiBqcHQodCxlLG4sbyl7SHB0LmNhbGwodGhpcyx0LGUsbixvKX1mdW5jdGlvbiBVcHQodCxlLG4sbyl7SHB0LmNhbGwodGhpcyx0LGUsbixvKX1mdW5jdGlvbiBXcHQodCxlLG4sbyl7SHB0LmNhbGwodGhpcyx0LGUsbixvKX1mdW5jdGlvbiBHcHQodCxlPS0xLG4sbz0yNTAwKXt0aGlzLm5hbWU9dCx0aGlzLnRyYWNrcz1uLHRoaXMuZHVyYXRpb249ZSx0aGlzLmJsZW5kTW9kZT1vLHRoaXMudXVpZD1qaXQuZ2VuZXJhdGVVVUlEKCksdGhpcy5kdXJhdGlvbjwwJiZ0aGlzLnJlc2V0RHVyYXRpb24oKX1mdW5jdGlvbiBZcHQodCl7aWYodm9pZCAwPT09dC50eXBlKXRocm93IG5ldyBFcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogdHJhY2sgdHlwZSB1bmRlZmluZWQsIGNhbiBub3QgcGFyc2UiKTtjb25zdCBlPShmdW5jdGlvbiBuKHQpe3N3aXRjaCh0LnRvTG93ZXJDYXNlKCkpe2Nhc2Uic2NhbGFyIjpjYXNlImRvdWJsZSI6Y2FzZSJmbG9hdCI6Y2FzZSJudW1iZXIiOmNhc2UiaW50ZWdlciI6cmV0dXJuIEJwdDtjYXNlInZlY3RvciI6Y2FzZSJ2ZWN0b3IyIjpjYXNlInZlY3RvcjMiOmNhc2UidmVjdG9yNCI6cmV0dXJuIFdwdDtjYXNlImNvbG9yIjpyZXR1cm4gTHB0O2Nhc2UicXVhdGVybmlvbiI6cmV0dXJuIGpwdDtjYXNlImJvb2wiOmNhc2UiYm9vbGVhbiI6cmV0dXJuIEZwdDtjYXNlInN0cmluZyI6cmV0dXJuIFVwdH10aHJvdyBuZXcgRXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IFVuc3VwcG9ydGVkIHR5cGVOYW1lOiAiK3QpfSkodC50eXBlKTtpZih2b2lkIDA9PT10LnRpbWVzKXtjb25zdCBlPVtdLG49W107UnB0LmZsYXR0ZW5KU09OKHQua2V5cyxlLG4sInZhbHVlIiksdC50aW1lcz1lLHQudmFsdWVzPW59cmV0dXJuIHZvaWQgMCE9PWUucGFyc2U/ZS5wYXJzZSh0KTpuZXcgZSh0Lm5hbWUsdC50aW1lcyx0LnZhbHVlcyx0LmludGVycG9sYXRpb24pfU9iamVjdC5hc3NpZ24oVHB0LnByb3RvdHlwZSx7ZXZhbHVhdGU6ZnVuY3Rpb24odCl7Y29uc3QgZT10aGlzLnBhcmFtZXRlclBvc2l0aW9ucztsZXQgbj10aGlzLl9jYWNoZWRJbmRleCxvPWVbbl0saT1lW24tMV07dDp7ZTp7bGV0IGE7bjp7bzppZighKHQ8bykpe2ZvcihsZXQgYT1uKzI7Oyl7aWYodm9pZCAwPT09byl7aWYodDxpKWJyZWFrIG87cmV0dXJuIG49ZS5sZW5ndGgsdGhpcy5fY2FjaGVkSW5kZXg9bix0aGlzLmFmdGVyRW5kXyhuLTEsdCxpKX1pZihuPT09YSlicmVhaztpZihpPW8sbz1lWysrbl0sdDxvKWJyZWFrIGV9YT1lLmxlbmd0aDticmVhayBufWlmKHQ+PWkpYnJlYWsgdDt7Y29uc3Qgcj1lWzFdO3Q8ciYmKG49MixpPXIpO2ZvcihsZXQgYT1uLTI7Oyl7aWYodm9pZCAwPT09aSlyZXR1cm4gdGhpcy5fY2FjaGVkSW5kZXg9MCx0aGlzLmJlZm9yZVN0YXJ0XygwLHQsbyk7aWYobj09PWEpYnJlYWs7aWYobz1pLGk9ZVstLW4tMV0sdD49aSlicmVhayBlfWE9bixuPTB9fWZvcig7bjxhOyl7Y29uc3Qgbz1uK2E+Pj4xO3Q8ZVtvXT9hPW86bj1vKzF9aWYobz1lW25dLGk9ZVtuLTFdLHZvaWQgMD09PWkpcmV0dXJuIHRoaXMuX2NhY2hlZEluZGV4PTAsdGhpcy5iZWZvcmVTdGFydF8oMCx0LG8pO2lmKHZvaWQgMD09PW8pcmV0dXJuIG49ZS5sZW5ndGgsdGhpcy5fY2FjaGVkSW5kZXg9bix0aGlzLmFmdGVyRW5kXyhuLTEsaSx0KX10aGlzLl9jYWNoZWRJbmRleD1uLHRoaXMuaW50ZXJ2YWxDaGFuZ2VkXyhuLGksbyl9cmV0dXJuIHRoaXMuaW50ZXJwb2xhdGVfKG4saSx0LG8pfSxzZXR0aW5nczpudWxsLERlZmF1bHRTZXR0aW5nc186e30sZ2V0U2V0dGluZ3NfOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0dGluZ3N8fHRoaXMuRGVmYXVsdFNldHRpbmdzX30sY29weVNhbXBsZVZhbHVlXzpmdW5jdGlvbih0KXtjb25zdCBlPXRoaXMucmVzdWx0QnVmZmVyLG49dGhpcy5zYW1wbGVWYWx1ZXMsbz10aGlzLnZhbHVlU2l6ZSxpPXQqbztmb3IobGV0IHQ9MDt0IT09bzsrK3QpZVt0XT1uW2krdF07cmV0dXJuIGV9LGludGVycG9sYXRlXzpmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiY2FsbCB0byBhYnN0cmFjdCBtZXRob2QiKX0saW50ZXJ2YWxDaGFuZ2VkXzpmdW5jdGlvbigpe319KSxPYmplY3QuYXNzaWduKFRwdC5wcm90b3R5cGUse2JlZm9yZVN0YXJ0XzpUcHQucHJvdG90eXBlLmNvcHlTYW1wbGVWYWx1ZV8sYWZ0ZXJFbmRfOlRwdC5wcm90b3R5cGUuY29weVNhbXBsZVZhbHVlX30pLE5wdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKFRwdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpOcHQsRGVmYXVsdFNldHRpbmdzXzp7ZW5kaW5nU3RhcnQ6QWl0LGVuZGluZ0VuZDpBaXR9LGludGVydmFsQ2hhbmdlZF86ZnVuY3Rpb24odCxlLG4pe2NvbnN0IG89dGhpcy5wYXJhbWV0ZXJQb3NpdGlvbnM7bGV0IGk9dC0yLGE9dCsxLHI9b1tpXSxzPW9bYV07aWYodm9pZCAwPT09cilzd2l0Y2godGhpcy5nZXRTZXR0aW5nc18oKS5lbmRpbmdTdGFydCl7Y2FzZSBSaXQ6aT10LHI9MiplLW47YnJlYWs7Y2FzZSBUaXQ6aT1vLmxlbmd0aC0yLHI9ZStvW2ldLW9baSsxXTticmVhaztkZWZhdWx0Omk9dCxyPW59aWYodm9pZCAwPT09cylzd2l0Y2godGhpcy5nZXRTZXR0aW5nc18oKS5lbmRpbmdFbmQpe2Nhc2UgUml0OmE9dCxzPTIqbi1lO2JyZWFrO2Nhc2UgVGl0OmE9MSxzPW4rb1sxXS1vWzBdO2JyZWFrO2RlZmF1bHQ6YT10LTEscz1lfWNvbnN0IGw9LjUqKG4tZSksYz10aGlzLnZhbHVlU2l6ZTt0aGlzLl93ZWlnaHRQcmV2PWwvKGUtciksdGhpcy5fd2VpZ2h0TmV4dD1sLyhzLW4pLHRoaXMuX29mZnNldFByZXY9aSpjLHRoaXMuX29mZnNldE5leHQ9YSpjfSxpbnRlcnBvbGF0ZV86ZnVuY3Rpb24odCxlLG4sbyl7Y29uc3QgaT10aGlzLnJlc3VsdEJ1ZmZlcixhPXRoaXMuc2FtcGxlVmFsdWVzLHI9dGhpcy52YWx1ZVNpemUscz10KnIsbD1zLXIsYz10aGlzLl9vZmZzZXRQcmV2LGQ9dGhpcy5fb2Zmc2V0TmV4dCxwPXRoaXMuX3dlaWdodFByZXYsbT10aGlzLl93ZWlnaHROZXh0LHU9KG4tZSkvKG8tZSksZj11KnUsZz1mKnUsaD0tcCpnKzIqcCpmLXAqdSxiPSgxK3ApKmcrKC0xLjUtMipwKSpmKygtLjUrcCkqdSsxLHk9KC0xLW0pKmcrKDEuNSttKSpmKy41KnUsXz1tKmctbSpmO2ZvcihsZXQgdD0wO3QhPT1yOysrdClpW3RdPWgqYVtjK3RdK2IqYVtsK3RdK3kqYVtzK3RdK18qYVtkK3RdO3JldHVybiBpfX0pLElwdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKFRwdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpJcHQsaW50ZXJwb2xhdGVfOmZ1bmN0aW9uKHQsZSxuLG8pe2NvbnN0IGk9dGhpcy5yZXN1bHRCdWZmZXIsYT10aGlzLnNhbXBsZVZhbHVlcyxyPXRoaXMudmFsdWVTaXplLHM9dCpyLGw9cy1yLGM9KG4tZSkvKG8tZSksZD0xLWM7Zm9yKGxldCB0PTA7dCE9PXI7Kyt0KWlbdF09YVtsK3RdKmQrYVtzK3RdKmM7cmV0dXJuIGl9fSksenB0LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoVHB0LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOnpwdCxpbnRlcnBvbGF0ZV86ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY29weVNhbXBsZVZhbHVlXyh0LTEpfX0pLE9iamVjdC5hc3NpZ24oSHB0LHt0b0pTT046ZnVuY3Rpb24odCl7Y29uc3QgZT10LmNvbnN0cnVjdG9yO2xldCBuO2lmKHZvaWQgMCE9PWUudG9KU09OKW49ZS50b0pTT04odCk7ZWxzZXtuPXtuYW1lOnQubmFtZSx0aW1lczpScHQuY29udmVydEFycmF5KHQudGltZXMsQXJyYXkpLHZhbHVlczpScHQuY29udmVydEFycmF5KHQudmFsdWVzLEFycmF5KX07Y29uc3QgZT10LmdldEludGVycG9sYXRpb24oKTtlIT09dC5EZWZhdWx0SW50ZXJwb2xhdGlvbiYmKG4uaW50ZXJwb2xhdGlvbj1lKX1yZXR1cm4gbi50eXBlPXQuVmFsdWVUeXBlTmFtZSxufX0pLE9iamVjdC5hc3NpZ24oSHB0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6SHB0LFRpbWVCdWZmZXJUeXBlOkZsb2F0MzJBcnJheSxWYWx1ZUJ1ZmZlclR5cGU6RmxvYXQzMkFycmF5LERlZmF1bHRJbnRlcnBvbGF0aW9uOkRpdCxJbnRlcnBvbGFudEZhY3RvcnlNZXRob2REaXNjcmV0ZTpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IHpwdCh0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksdCl9LEludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IElwdCh0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksdCl9LEludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aDpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IE5wdCh0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksdCl9LHNldEludGVycG9sYXRpb246ZnVuY3Rpb24odCl7bGV0IGU7c3dpdGNoKHQpe2Nhc2UgU2l0OmU9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2REaXNjcmV0ZTticmVhaztjYXNlIERpdDplPXRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyO2JyZWFrO2Nhc2UgRWl0OmU9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGh9aWYodm9pZCAwPT09ZSl7Y29uc3QgZT0idW5zdXBwb3J0ZWQgaW50ZXJwb2xhdGlvbiBmb3IgIit0aGlzLlZhbHVlVHlwZU5hbWUrIiBrZXlmcmFtZSB0cmFjayBuYW1lZCAiK3RoaXMubmFtZTtpZih2b2lkIDA9PT10aGlzLmNyZWF0ZUludGVycG9sYW50KXtpZih0PT09dGhpcy5EZWZhdWx0SW50ZXJwb2xhdGlvbil0aHJvdyBuZXcgRXJyb3IoZSk7dGhpcy5zZXRJbnRlcnBvbGF0aW9uKHRoaXMuRGVmYXVsdEludGVycG9sYXRpb24pfXJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLktleWZyYW1lVHJhY2s6IixlKSx0aGlzfXJldHVybiB0aGlzLmNyZWF0ZUludGVycG9sYW50PWUsdGhpc30sZ2V0SW50ZXJwb2xhdGlvbjpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmNyZWF0ZUludGVycG9sYW50KXtjYXNlIHRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kRGlzY3JldGU6cmV0dXJuIFNpdDtjYXNlIHRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyOnJldHVybiBEaXQ7Y2FzZSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aDpyZXR1cm4gRWl0fX0sZ2V0VmFsdWVTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmFsdWVzLmxlbmd0aC90aGlzLnRpbWVzLmxlbmd0aH0sc2hpZnQ6ZnVuY3Rpb24odCl7aWYoMCE9PXQpe2NvbnN0IGU9dGhpcy50aW1lcztmb3IobGV0IG49MCxvPWUubGVuZ3RoO24hPT1vOysrbillW25dKz10fXJldHVybiB0aGlzfSxzY2FsZTpmdW5jdGlvbih0KXtpZigxIT09dCl7Y29uc3QgZT10aGlzLnRpbWVzO2ZvcihsZXQgbj0wLG89ZS5sZW5ndGg7biE9PW87KytuKWVbbl0qPXR9cmV0dXJuIHRoaXN9LHRyaW06ZnVuY3Rpb24odCxlKXtjb25zdCBuPXRoaXMudGltZXMsbz1uLmxlbmd0aDtsZXQgaT0wLGE9by0xO2Zvcig7aSE9PW8mJm5baV08dDspKytpO2Zvcig7LTEhPT1hJiZuW2FdPmU7KS0tYTtpZigrK2EsMCE9PWl8fGEhPT1vKXtpPj1hJiYoYT1NYXRoLm1heChhLDEpLGk9YS0xKTtjb25zdCB0PXRoaXMuZ2V0VmFsdWVTaXplKCk7dGhpcy50aW1lcz1ScHQuYXJyYXlTbGljZShuLGksYSksdGhpcy52YWx1ZXM9UnB0LmFycmF5U2xpY2UodGhpcy52YWx1ZXMsaSp0LGEqdCl9cmV0dXJuIHRoaXN9LHZhbGlkYXRlOmZ1bmN0aW9uKCl7bGV0IHQ9ITA7Y29uc3QgZT10aGlzLmdldFZhbHVlU2l6ZSgpO2UtTWF0aC5mbG9vcihlKSE9MCYmKGNvbnNvbGUuZXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IEludmFsaWQgdmFsdWUgc2l6ZSBpbiB0cmFjay4iLHRoaXMpLHQ9ITEpO2NvbnN0IG49dGhpcy50aW1lcyxvPXRoaXMudmFsdWVzLGk9bi5sZW5ndGg7MD09PWkmJihjb25zb2xlLmVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBUcmFjayBpcyBlbXB0eS4iLHRoaXMpLHQ9ITEpO2xldCBhPW51bGw7Zm9yKGxldCBlPTA7ZSE9PWk7ZSsrKXtjb25zdCBvPW5bZV07aWYoIm51bWJlciI9PXR5cGVvZiBvJiZpc05hTihvKSl7Y29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogVGltZSBpcyBub3QgYSB2YWxpZCBudW1iZXIuIix0aGlzLGUsbyksdD0hMTticmVha31pZihudWxsIT09YSYmYT5vKXtjb25zb2xlLmVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBPdXQgb2Ygb3JkZXIga2V5cy4iLHRoaXMsZSxvLGEpLHQ9ITE7YnJlYWt9YT1vfWlmKHZvaWQgMCE9PW8mJlJwdC5pc1R5cGVkQXJyYXkobykpZm9yKGxldCBlPTAsbj1vLmxlbmd0aDtlIT09bjsrK2Upe2NvbnN0IG49b1tlXTtpZihpc05hTihuKSl7Y29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogVmFsdWUgaXMgbm90IGEgdmFsaWQgbnVtYmVyLiIsdGhpcyxlLG4pLHQ9ITE7YnJlYWt9fXJldHVybiB0fSxvcHRpbWl6ZTpmdW5jdGlvbigpe2NvbnN0IHQ9UnB0LmFycmF5U2xpY2UodGhpcy50aW1lcyksZT1ScHQuYXJyYXlTbGljZSh0aGlzLnZhbHVlcyksbj10aGlzLmdldFZhbHVlU2l6ZSgpLG89dGhpcy5nZXRJbnRlcnBvbGF0aW9uKCk9PT1FaXQsaT10Lmxlbmd0aC0xO2xldCBhPTE7Zm9yKGxldCByPTE7cjxpOysrcil7bGV0IGk9ITE7Y29uc3Qgcz10W3JdO2lmKHMhPT10W3IrMV0mJigxIT09cnx8cyE9PXRbMF0pKWlmKG8paT0hMDtlbHNle2NvbnN0IHQ9cipuLG89dC1uLGE9dCtuO2ZvcihsZXQgcj0wO3IhPT1uOysrcil7Y29uc3Qgbj1lW3Qrcl07aWYobiE9PWVbbytyXXx8biE9PWVbYStyXSl7aT0hMDticmVha319fWlmKGkpe2lmKHIhPT1hKXt0W2FdPXRbcl07Y29uc3Qgbz1yKm4saT1hKm47Zm9yKGxldCB0PTA7dCE9PW47Kyt0KWVbaSt0XT1lW28rdF19KythfX1pZihpPjApe3RbYV09dFtpXTtmb3IobGV0IHQ9aSpuLG89YSpuLHI9MDtyIT09bjsrK3IpZVtvK3JdPWVbdCtyXTsrK2F9cmV0dXJuIGEhPT10Lmxlbmd0aD8odGhpcy50aW1lcz1ScHQuYXJyYXlTbGljZSh0LDAsYSksdGhpcy52YWx1ZXM9UnB0LmFycmF5U2xpY2UoZSwwLGEqbikpOih0aGlzLnRpbWVzPXQsdGhpcy52YWx1ZXM9ZSksdGhpc30sY2xvbmU6ZnVuY3Rpb24oKXtjb25zdCB0PVJwdC5hcnJheVNsaWNlKHRoaXMudGltZXMsMCksZT1ScHQuYXJyYXlTbGljZSh0aGlzLnZhbHVlcywwKSxuPW5ldygwLHRoaXMuY29uc3RydWN0b3IpKHRoaXMubmFtZSx0LGUpO3JldHVybiBuLmNyZWF0ZUludGVycG9sYW50PXRoaXMuY3JlYXRlSW50ZXJwb2xhbnQsbn19KSxGcHQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShIcHQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6RnB0LFZhbHVlVHlwZU5hbWU6ImJvb2wiLFZhbHVlQnVmZmVyVHlwZTpBcnJheSxEZWZhdWx0SW50ZXJwb2xhdGlvbjpTaXQsSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyOnZvaWQgMCxJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGg6dm9pZCAwfSksTHB0LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoSHB0LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOkxwdCxWYWx1ZVR5cGVOYW1lOiJjb2xvciJ9KSxCcHQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShIcHQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6QnB0LFZhbHVlVHlwZU5hbWU6Im51bWJlciJ9KSxWcHQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShUcHQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6VnB0LGludGVycG9sYXRlXzpmdW5jdGlvbih0LGUsbixvKXtjb25zdCBpPXRoaXMucmVzdWx0QnVmZmVyLGE9dGhpcy5zYW1wbGVWYWx1ZXMscj10aGlzLnZhbHVlU2l6ZSxzPShuLWUpLyhvLWUpO2xldCBsPXQqcjtmb3IobGV0IHQ9bCtyO2whPT10O2wrPTQpUWl0LnNsZXJwRmxhdChpLDAsYSxsLXIsYSxsLHMpO3JldHVybiBpfX0pLGpwdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKEhwdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpqcHQsVmFsdWVUeXBlTmFtZToicXVhdGVybmlvbiIsRGVmYXVsdEludGVycG9sYXRpb246RGl0LEludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IFZwdCh0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksdCl9LEludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aDp2b2lkIDB9KSxVcHQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShIcHQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6VXB0LFZhbHVlVHlwZU5hbWU6InN0cmluZyIsVmFsdWVCdWZmZXJUeXBlOkFycmF5LERlZmF1bHRJbnRlcnBvbGF0aW9uOlNpdCxJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI6dm9pZCAwLEludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aDp2b2lkIDB9KSxXcHQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShIcHQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6V3B0LFZhbHVlVHlwZU5hbWU6InZlY3RvciJ9KSxPYmplY3QuYXNzaWduKEdwdCx7cGFyc2U6ZnVuY3Rpb24odCl7Y29uc3QgZT1bXSxuPXQudHJhY2tzLG89MS8odC5mcHN8fDEpO2ZvcihsZXQgdD0wLGk9bi5sZW5ndGg7dCE9PWk7Kyt0KWUucHVzaChZcHQoblt0XSkuc2NhbGUobykpO2NvbnN0IGk9bmV3IEdwdCh0Lm5hbWUsdC5kdXJhdGlvbixlLHQuYmxlbmRNb2RlKTtyZXR1cm4gaS51dWlkPXQudXVpZCxpfSx0b0pTT046ZnVuY3Rpb24odCl7Y29uc3QgZT1bXSxuPXQudHJhY2tzLG89e25hbWU6dC5uYW1lLGR1cmF0aW9uOnQuZHVyYXRpb24sdHJhY2tzOmUsdXVpZDp0LnV1aWQsYmxlbmRNb2RlOnQuYmxlbmRNb2RlfTtmb3IobGV0IHQ9MCxvPW4ubGVuZ3RoO3QhPT1vOysrdCllLnB1c2goSHB0LnRvSlNPTihuW3RdKSk7cmV0dXJuIG99LENyZWF0ZUZyb21Nb3JwaFRhcmdldFNlcXVlbmNlOmZ1bmN0aW9uKHQsZSxuLG8pe2NvbnN0IGk9ZS5sZW5ndGgsYT1bXTtmb3IobGV0IHQ9MDt0PGk7dCsrKXtsZXQgcj1bXSxzPVtdO3IucHVzaCgodCtpLTEpJWksdCwodCsxKSVpKSxzLnB1c2goMCwxLDApO2NvbnN0IGw9UnB0LmdldEtleWZyYW1lT3JkZXIocik7cj1ScHQuc29ydGVkQXJyYXkociwxLGwpLHM9UnB0LnNvcnRlZEFycmF5KHMsMSxsKSxvfHwwIT09clswXXx8KHIucHVzaChpKSxzLnB1c2goc1swXSkpLGEucHVzaChuZXcgQnB0KCIubW9ycGhUYXJnZXRJbmZsdWVuY2VzWyIrZVt0XS5uYW1lKyJdIixyLHMpLnNjYWxlKDEvbikpfXJldHVybiBuZXcgR3B0KHQsLTEsYSl9LGZpbmRCeU5hbWU6ZnVuY3Rpb24odCxlKXtsZXQgbj10O2lmKCFBcnJheS5pc0FycmF5KHQpKXtjb25zdCBlPXQ7bj1lLmdlb21ldHJ5JiZlLmdlb21ldHJ5LmFuaW1hdGlvbnN8fGUuYW5pbWF0aW9uc31mb3IobGV0IHQ9MDt0PG4ubGVuZ3RoO3QrKylpZihuW3RdLm5hbWU9PT1lKXJldHVybiBuW3RdO3JldHVybiBudWxsfSxDcmVhdGVDbGlwc0Zyb21Nb3JwaFRhcmdldFNlcXVlbmNlczpmdW5jdGlvbih0LGUsbil7Y29uc3Qgbz17fSxpPS9eKFtcdy1dKj8pKFtcZF0rKSQvO2ZvcihsZXQgZT0wLG49dC5sZW5ndGg7ZTxuO2UrKyl7Y29uc3Qgbj10W2VdLGE9bi5uYW1lLm1hdGNoKGkpO2lmKGEmJmEubGVuZ3RoPjEpe2NvbnN0IHQ9YVsxXTtsZXQgZT1vW3RdO2V8fChvW3RdPWU9W10pLGUucHVzaChuKX19Y29uc3QgYT1bXTtmb3IoY29uc3QgdCBpbiBvKWEucHVzaChHcHQuQ3JlYXRlRnJvbU1vcnBoVGFyZ2V0U2VxdWVuY2UodCxvW3RdLGUsbikpO3JldHVybiBhfSxwYXJzZUFuaW1hdGlvbjpmdW5jdGlvbih0LGUpe2lmKCF0KXJldHVybiBjb25zb2xlLmVycm9yKCJUSFJFRS5BbmltYXRpb25DbGlwOiBObyBhbmltYXRpb24gaW4gSlNPTkxvYWRlciBkYXRhLiIpLG51bGw7Y29uc3Qgbj1mdW5jdGlvbih0LGUsbixvLGkpe2lmKDAhPT1uLmxlbmd0aCl7Y29uc3QgYT1bXSxyPVtdO1JwdC5mbGF0dGVuSlNPTihuLGEscixvKSwwIT09YS5sZW5ndGgmJmkucHVzaChuZXcgdChlLGEscikpfX0sbz1bXSxpPXQubmFtZXx8ImRlZmF1bHQiLGE9dC5mcHN8fDMwLHI9dC5ibGVuZE1vZGU7bGV0IHM9dC5sZW5ndGh8fC0xO2NvbnN0IGw9dC5oaWVyYXJjaHl8fFtdO2ZvcihsZXQgdD0wO3Q8bC5sZW5ndGg7dCsrKXtjb25zdCBpPWxbdF0ua2V5cztpZihpJiYwIT09aS5sZW5ndGgpaWYoaVswXS5tb3JwaFRhcmdldHMpe2NvbnN0IHQ9e307bGV0IGU7Zm9yKGU9MDtlPGkubGVuZ3RoO2UrKylpZihpW2VdLm1vcnBoVGFyZ2V0cylmb3IobGV0IG49MDtuPGlbZV0ubW9ycGhUYXJnZXRzLmxlbmd0aDtuKyspdFtpW2VdLm1vcnBoVGFyZ2V0c1tuXV09LTE7Zm9yKGNvbnN0IG4gaW4gdCl7Y29uc3QgdD1bXSxhPVtdO2ZvcihsZXQgbz0wO28hPT1pW2VdLm1vcnBoVGFyZ2V0cy5sZW5ndGg7KytvKXtjb25zdCBvPWlbZV07dC5wdXNoKG8udGltZSksYS5wdXNoKG8ubW9ycGhUYXJnZXQ9PT1uPzE6MCl9by5wdXNoKG5ldyBCcHQoIi5tb3JwaFRhcmdldEluZmx1ZW5jZVsiK24rIl0iLHQsYSkpfXM9dC5sZW5ndGgqKGF8fDEpfWVsc2V7Y29uc3QgYT0iLmJvbmVzWyIrZVt0XS5uYW1lKyJdIjtuKFdwdCxhKyIucG9zaXRpb24iLGksInBvcyIsbyksbihqcHQsYSsiLnF1YXRlcm5pb24iLGksInJvdCIsbyksbihXcHQsYSsiLnNjYWxlIixpLCJzY2wiLG8pfX1yZXR1cm4gMD09PW8ubGVuZ3RoP251bGw6bmV3IEdwdChpLHMsbyxyKX19KSxPYmplY3QuYXNzaWduKEdwdC5wcm90b3R5cGUse3Jlc2V0RHVyYXRpb246ZnVuY3Rpb24oKXtsZXQgdD0wO2ZvcihsZXQgZT0wLG49dGhpcy50cmFja3MubGVuZ3RoO2UhPT1uOysrZSl7Y29uc3Qgbj10aGlzLnRyYWNrc1tlXTt0PU1hdGgubWF4KHQsbi50aW1lc1tuLnRpbWVzLmxlbmd0aC0xXSl9cmV0dXJuIHRoaXMuZHVyYXRpb249dCx0aGlzfSx0cmltOmZ1bmN0aW9uKCl7Zm9yKGxldCB0PTA7dDx0aGlzLnRyYWNrcy5sZW5ndGg7dCsrKXRoaXMudHJhY2tzW3RdLnRyaW0oMCx0aGlzLmR1cmF0aW9uKTtyZXR1cm4gdGhpc30sdmFsaWRhdGU6ZnVuY3Rpb24oKXtsZXQgdD0hMDtmb3IobGV0IGU9MDtlPHRoaXMudHJhY2tzLmxlbmd0aDtlKyspdD10JiZ0aGlzLnRyYWNrc1tlXS52YWxpZGF0ZSgpO3JldHVybiB0fSxvcHRpbWl6ZTpmdW5jdGlvbigpe2ZvcihsZXQgdD0wO3Q8dGhpcy50cmFja3MubGVuZ3RoO3QrKyl0aGlzLnRyYWNrc1t0XS5vcHRpbWl6ZSgpO3JldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbigpe2NvbnN0IHQ9W107Zm9yKGxldCBlPTA7ZTx0aGlzLnRyYWNrcy5sZW5ndGg7ZSsrKXQucHVzaCh0aGlzLnRyYWNrc1tlXS5jbG9uZSgpKTtyZXR1cm4gbmV3IEdwdCh0aGlzLm5hbWUsdGhpcy5kdXJhdGlvbix0LHRoaXMuYmxlbmRNb2RlKX0sdG9KU09OOmZ1bmN0aW9uKCl7cmV0dXJuIEdwdC50b0pTT04odGhpcyl9fSk7Y29uc3QgcXB0PXtlbmFibGVkOiExLGZpbGVzOnt9LGFkZDpmdW5jdGlvbih0LGUpeyExIT09dGhpcy5lbmFibGVkJiYodGhpcy5maWxlc1t0XT1lKX0sZ2V0OmZ1bmN0aW9uKHQpe2lmKCExIT09dGhpcy5lbmFibGVkKXJldHVybiB0aGlzLmZpbGVzW3RdfSxyZW1vdmU6ZnVuY3Rpb24odCl7ZGVsZXRlIHRoaXMuZmlsZXNbdF19LGNsZWFyOmZ1bmN0aW9uKCl7dGhpcy5maWxlcz17fX19LFpwdD1uZXcoZnVuY3Rpb24gWHB0KHQsZSxuKXtjb25zdCBvPXRoaXM7bGV0IGksYT0hMSxyPTAscz0wO2NvbnN0IGw9W107dGhpcy5vblN0YXJ0PXZvaWQgMCx0aGlzLm9uTG9hZD10LHRoaXMub25Qcm9ncmVzcz1lLHRoaXMub25FcnJvcj1uLHRoaXMuaXRlbVN0YXJ0PWZ1bmN0aW9uKHQpe3MrKywhMT09PWEmJnZvaWQgMCE9PW8ub25TdGFydCYmby5vblN0YXJ0KHQscixzKSxhPSEwfSx0aGlzLml0ZW1FbmQ9ZnVuY3Rpb24odCl7cisrLHZvaWQgMCE9PW8ub25Qcm9ncmVzcyYmby5vblByb2dyZXNzKHQscixzKSxyPT09cyYmKGE9ITEsdm9pZCAwIT09by5vbkxvYWQmJm8ub25Mb2FkKCkpfSx0aGlzLml0ZW1FcnJvcj1mdW5jdGlvbih0KXt2b2lkIDAhPT1vLm9uRXJyb3ImJm8ub25FcnJvcih0KX0sdGhpcy5yZXNvbHZlVVJMPWZ1bmN0aW9uKHQpe3JldHVybiBpP2kodCk6dH0sdGhpcy5zZXRVUkxNb2RpZmllcj1mdW5jdGlvbih0KXtyZXR1cm4gaT10LHRoaXN9LHRoaXMuYWRkSGFuZGxlcj1mdW5jdGlvbih0LGUpe3JldHVybiBsLnB1c2godCxlKSx0aGlzfSx0aGlzLnJlbW92ZUhhbmRsZXI9ZnVuY3Rpb24odCl7Y29uc3QgZT1sLmluZGV4T2YodCk7cmV0dXJuLTEhPT1lJiZsLnNwbGljZShlLDIpLHRoaXN9LHRoaXMuZ2V0SGFuZGxlcj1mdW5jdGlvbih0KXtmb3IobGV0IGU9MCxuPWwubGVuZ3RoO2U8bjtlKz0yKXtjb25zdCBuPWxbZV0sbz1sW2UrMV07aWYobi5nbG9iYWwmJihuLmxhc3RJbmRleD0wKSxuLnRlc3QodCkpcmV0dXJuIG99cmV0dXJuIG51bGx9fSk7ZnVuY3Rpb24gS3B0KHQpe3RoaXMubWFuYWdlcj12b2lkIDAhPT10P3Q6WnB0LHRoaXMuY3Jvc3NPcmlnaW49ImFub255bW91cyIsdGhpcy53aXRoQ3JlZGVudGlhbHM9ITEsdGhpcy5wYXRoPSIiLHRoaXMucmVzb3VyY2VQYXRoPSIiLHRoaXMucmVxdWVzdEhlYWRlcj17fX1PYmplY3QuYXNzaWduKEtwdC5wcm90b3R5cGUse2xvYWQ6ZnVuY3Rpb24oKXt9LGxvYWRBc3luYzpmdW5jdGlvbih0LGUpe2NvbnN0IG49dGhpcztyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKG8saSl7bi5sb2FkKHQsbyxlLGkpfSkpfSxwYXJzZTpmdW5jdGlvbigpe30sc2V0Q3Jvc3NPcmlnaW46ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY3Jvc3NPcmlnaW49dCx0aGlzfSxzZXRXaXRoQ3JlZGVudGlhbHM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMud2l0aENyZWRlbnRpYWxzPXQsdGhpc30sc2V0UGF0aDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wYXRoPXQsdGhpc30sc2V0UmVzb3VyY2VQYXRoOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnJlc291cmNlUGF0aD10LHRoaXN9LHNldFJlcXVlc3RIZWFkZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucmVxdWVzdEhlYWRlcj10LHRoaXN9fSk7Y29uc3QgSnB0PXt9O2Z1bmN0aW9uIFFwdCh0KXtLcHQuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uICRwdCh0KXtLcHQuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIHRtdCh0KXtLcHQuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIGVtdCh0KXtLcHQuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIG5tdCh0KXtLcHQuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIG9tdCh0KXtLcHQuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIGltdCh0KXtLcHQuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIGFtdCgpe3RoaXMudHlwZT0iQ3VydmUiLHRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zPTIwMH1mdW5jdGlvbiBybXQodCxlLG4sbyxpLGEscixzKXthbXQuY2FsbCh0aGlzKSx0aGlzLnR5cGU9IkVsbGlwc2VDdXJ2ZSIsdGhpcy5hWD10fHwwLHRoaXMuYVk9ZXx8MCx0aGlzLnhSYWRpdXM9bnx8MSx0aGlzLnlSYWRpdXM9b3x8MSx0aGlzLmFTdGFydEFuZ2xlPWl8fDAsdGhpcy5hRW5kQW5nbGU9YXx8MipNYXRoLlBJLHRoaXMuYUNsb2Nrd2lzZT1yfHwhMSx0aGlzLmFSb3RhdGlvbj1zfHwwfWZ1bmN0aW9uIHNtdCh0LGUsbixvLGksYSl7cm10LmNhbGwodGhpcyx0LGUsbixuLG8saSxhKSx0aGlzLnR5cGU9IkFyY0N1cnZlIn1mdW5jdGlvbiBsbXQoKXtsZXQgdD0wLGU9MCxuPTAsbz0wO2Z1bmN0aW9uIGkoaSxhLHIscyl7dD1pLGU9cixuPS0zKmkrMyphLTIqci1zLG89MippLTIqYStyK3N9cmV0dXJue2luaXRDYXRtdWxsUm9tOmZ1bmN0aW9uKHQsZSxuLG8sYSl7aShlLG4sYSoobi10KSxhKihvLWUpKX0saW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tOmZ1bmN0aW9uKHQsZSxuLG8sYSxyLHMpe2xldCBsPShlLXQpL2EtKG4tdCkvKGErcikrKG4tZSkvcixjPShuLWUpL3ItKG8tZSkvKHIrcykrKG8tbikvcztsKj1yLGMqPXIsaShlLG4sbCxjKX0sY2FsYzpmdW5jdGlvbihpKXtjb25zdCBhPWkqaTtyZXR1cm4gdCtlKmkrbiphK28qKGEqaSl9fX1RcHQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShLcHQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6UXB0LGxvYWQ6ZnVuY3Rpb24odCxlLG4sbyl7dm9pZCAwPT09dCYmKHQ9IiIpLHZvaWQgMCE9PXRoaXMucGF0aCYmKHQ9dGhpcy5wYXRoK3QpLHQ9dGhpcy5tYW5hZ2VyLnJlc29sdmVVUkwodCk7Y29uc3QgaT10aGlzLGE9cXB0LmdldCh0KTtpZih2b2lkIDAhPT1hKXJldHVybiBpLm1hbmFnZXIuaXRlbVN0YXJ0KHQpLHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ZSYmZShhKSxpLm1hbmFnZXIuaXRlbUVuZCh0KX0pLDApLGE7aWYodm9pZCAwIT09SnB0W3RdKXJldHVybiB2b2lkIEpwdFt0XS5wdXNoKHtvbkxvYWQ6ZSxvblByb2dyZXNzOm4sb25FcnJvcjpvfSk7Y29uc3Qgcj10Lm1hdGNoKC9eZGF0YTooLio/KSg7YmFzZTY0KT8sKC4qKSQvKTtsZXQgcztpZihyKXtjb25zdCBuPXJbMV0sYT0hIXJbMl07bGV0IHM9clszXTtzPWRlY29kZVVSSUNvbXBvbmVudChzKSxhJiYocz1hdG9iKHMpKTt0cnl7bGV0IG87Y29uc3QgYT0odGhpcy5yZXNwb25zZVR5cGV8fCIiKS50b0xvd2VyQ2FzZSgpO3N3aXRjaChhKXtjYXNlImFycmF5YnVmZmVyIjpjYXNlImJsb2IiOmNvbnN0IHQ9bmV3IFVpbnQ4QXJyYXkocy5sZW5ndGgpO2ZvcihsZXQgZT0wO2U8cy5sZW5ndGg7ZSsrKXRbZV09cy5jaGFyQ29kZUF0KGUpO289ImJsb2IiPT09YT9uZXcgQmxvYihbdC5idWZmZXJdLHt0eXBlOm59KTp0LmJ1ZmZlcjticmVhaztjYXNlImRvY3VtZW50Ijpjb25zdCBlPW5ldyBET01QYXJzZXI7bz1lLnBhcnNlRnJvbVN0cmluZyhzLG4pO2JyZWFrO2Nhc2UianNvbiI6bz1KU09OLnBhcnNlKHMpO2JyZWFrO2RlZmF1bHQ6bz1zfXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ZSYmZShvKSxpLm1hbmFnZXIuaXRlbUVuZCh0KX0pLDApfWNhdGNoKGUpe3NldFRpbWVvdXQoKGZ1bmN0aW9uKCl7byYmbyhlKSxpLm1hbmFnZXIuaXRlbUVycm9yKHQpLGkubWFuYWdlci5pdGVtRW5kKHQpfSksMCl9fWVsc2V7SnB0W3RdPVtdLEpwdFt0XS5wdXNoKHtvbkxvYWQ6ZSxvblByb2dyZXNzOm4sb25FcnJvcjpvfSkscz1uZXcgWE1MSHR0cFJlcXVlc3Qscy5vcGVuKCJHRVQiLHQsITApLHMuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsKGZ1bmN0aW9uKGUpe2NvbnN0IG49dGhpcy5yZXNwb25zZSxvPUpwdFt0XTtpZihkZWxldGUgSnB0W3RdLDIwMD09PXRoaXMuc3RhdHVzfHwwPT09dGhpcy5zdGF0dXMpezA9PT10aGlzLnN0YXR1cyYmY29uc29sZS53YXJuKCJUSFJFRS5GaWxlTG9hZGVyOiBIVFRQIFN0YXR1cyAwIHJlY2VpdmVkLiIpLHFwdC5hZGQodCxuKTtmb3IobGV0IHQ9MCxlPW8ubGVuZ3RoO3Q8ZTt0Kyspe2NvbnN0IGU9b1t0XTtlLm9uTG9hZCYmZS5vbkxvYWQobil9aS5tYW5hZ2VyLml0ZW1FbmQodCl9ZWxzZXtmb3IobGV0IHQ9MCxuPW8ubGVuZ3RoO3Q8bjt0Kyspe2NvbnN0IG49b1t0XTtuLm9uRXJyb3ImJm4ub25FcnJvcihlKX1pLm1hbmFnZXIuaXRlbUVycm9yKHQpLGkubWFuYWdlci5pdGVtRW5kKHQpfX0pLCExKSxzLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIiwoZnVuY3Rpb24oZSl7Y29uc3Qgbj1KcHRbdF07Zm9yKGxldCB0PTAsbz1uLmxlbmd0aDt0PG87dCsrKXtjb25zdCBvPW5bdF07by5vblByb2dyZXNzJiZvLm9uUHJvZ3Jlc3MoZSl9fSksITEpLHMuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLChmdW5jdGlvbihlKXtjb25zdCBuPUpwdFt0XTtkZWxldGUgSnB0W3RdO2ZvcihsZXQgdD0wLG89bi5sZW5ndGg7dDxvO3QrKyl7Y29uc3Qgbz1uW3RdO28ub25FcnJvciYmby5vbkVycm9yKGUpfWkubWFuYWdlci5pdGVtRXJyb3IodCksaS5tYW5hZ2VyLml0ZW1FbmQodCl9KSwhMSkscy5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsKGZ1bmN0aW9uKGUpe2NvbnN0IG49SnB0W3RdO2RlbGV0ZSBKcHRbdF07Zm9yKGxldCB0PTAsbz1uLmxlbmd0aDt0PG87dCsrKXtjb25zdCBvPW5bdF07by5vbkVycm9yJiZvLm9uRXJyb3IoZSl9aS5tYW5hZ2VyLml0ZW1FcnJvcih0KSxpLm1hbmFnZXIuaXRlbUVuZCh0KX0pLCExKSx2b2lkIDAhPT10aGlzLnJlc3BvbnNlVHlwZSYmKHMucmVzcG9uc2VUeXBlPXRoaXMucmVzcG9uc2VUeXBlKSx2b2lkIDAhPT10aGlzLndpdGhDcmVkZW50aWFscyYmKHMud2l0aENyZWRlbnRpYWxzPXRoaXMud2l0aENyZWRlbnRpYWxzKSxzLm92ZXJyaWRlTWltZVR5cGUmJnMub3ZlcnJpZGVNaW1lVHlwZSh2b2lkIDAhPT10aGlzLm1pbWVUeXBlP3RoaXMubWltZVR5cGU6InRleHQvcGxhaW4iKTtmb3IoY29uc3QgdCBpbiB0aGlzLnJlcXVlc3RIZWFkZXIpcy5zZXRSZXF1ZXN0SGVhZGVyKHQsdGhpcy5yZXF1ZXN0SGVhZGVyW3RdKTtzLnNlbmQobnVsbCl9cmV0dXJuIGkubWFuYWdlci5pdGVtU3RhcnQodCksc30sc2V0UmVzcG9uc2VUeXBlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnJlc3BvbnNlVHlwZT10LHRoaXN9LHNldE1pbWVUeXBlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm1pbWVUeXBlPXQsdGhpc319KSwkcHQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShLcHQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6JHB0LGxvYWQ6ZnVuY3Rpb24odCxlLG4sbyl7Y29uc3QgaT10aGlzLGE9bmV3IFFwdChpLm1hbmFnZXIpO2Euc2V0UGF0aChpLnBhdGgpLGEuc2V0UmVxdWVzdEhlYWRlcihpLnJlcXVlc3RIZWFkZXIpLGEuc2V0V2l0aENyZWRlbnRpYWxzKGkud2l0aENyZWRlbnRpYWxzKSxhLmxvYWQodCwoZnVuY3Rpb24obil7dHJ5e2UoaS5wYXJzZShKU09OLnBhcnNlKG4pKSl9Y2F0Y2goZSl7bz9vKGUpOmNvbnNvbGUuZXJyb3IoZSksaS5tYW5hZ2VyLml0ZW1FcnJvcih0KX19KSxuLG8pfSxwYXJzZTpmdW5jdGlvbih0KXtjb25zdCBlPVtdO2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKXtjb25zdCBvPUdwdC5wYXJzZSh0W25dKTtlLnB1c2gobyl9cmV0dXJuIGV9fSksdG10LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoS3B0LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOnRtdCxsb2FkOmZ1bmN0aW9uKHQsZSxuLG8pe2NvbnN0IGk9dGhpcyxhPVtdLHI9bmV3IEJkdCxzPW5ldyBRcHQodGhpcy5tYW5hZ2VyKTtzLnNldFBhdGgodGhpcy5wYXRoKSxzLnNldFJlc3BvbnNlVHlwZSgiYXJyYXlidWZmZXIiKSxzLnNldFJlcXVlc3RIZWFkZXIodGhpcy5yZXF1ZXN0SGVhZGVyKSxzLnNldFdpdGhDcmVkZW50aWFscyhpLndpdGhDcmVkZW50aWFscyk7bGV0IGw9MDtmdW5jdGlvbiBjKGMpe3MubG9hZCh0W2NdLChmdW5jdGlvbih0KXtjb25zdCBuPWkucGFyc2UodCwhMCk7YVtjXT17d2lkdGg6bi53aWR0aCxoZWlnaHQ6bi5oZWlnaHQsZm9ybWF0Om4uZm9ybWF0LG1pcG1hcHM6bi5taXBtYXBzfSxsKz0xLDY9PT1sJiYoMT09PW4ubWlwbWFwQ291bnQmJihyLm1pbkZpbHRlcj1iaXQpLHIuaW1hZ2U9YSxyLmZvcm1hdD1uLmZvcm1hdCxyLm5lZWRzVXBkYXRlPSEwLGUmJmUocikpfSksbixvKX1pZihBcnJheS5pc0FycmF5KHQpKWZvcihsZXQgZT0wLG49dC5sZW5ndGg7ZTxuOysrZSljKGUpO2Vsc2Ugcy5sb2FkKHQsKGZ1bmN0aW9uKHQpe2NvbnN0IG49aS5wYXJzZSh0LCEwKTtpZihuLmlzQ3ViZW1hcCl7Y29uc3QgdD1uLm1pcG1hcHMubGVuZ3RoL24ubWlwbWFwQ291bnQ7Zm9yKGxldCBlPTA7ZTx0O2UrKyl7YVtlXT17bWlwbWFwczpbXX07Zm9yKGxldCB0PTA7dDxuLm1pcG1hcENvdW50O3QrKylhW2VdLm1pcG1hcHMucHVzaChuLm1pcG1hcHNbZSpuLm1pcG1hcENvdW50K3RdKSxhW2VdLmZvcm1hdD1uLmZvcm1hdCxhW2VdLndpZHRoPW4ud2lkdGgsYVtlXS5oZWlnaHQ9bi5oZWlnaHR9ci5pbWFnZT1hfWVsc2Ugci5pbWFnZS53aWR0aD1uLndpZHRoLHIuaW1hZ2UuaGVpZ2h0PW4uaGVpZ2h0LHIubWlwbWFwcz1uLm1pcG1hcHM7MT09PW4ubWlwbWFwQ291bnQmJihyLm1pbkZpbHRlcj1iaXQpLHIuZm9ybWF0PW4uZm9ybWF0LHIubmVlZHNVcGRhdGU9ITAsZSYmZShyKX0pLG4sbyk7cmV0dXJuIHJ9fSksZW10LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoS3B0LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOmVtdCxsb2FkOmZ1bmN0aW9uKHQsZSxuLG8pe3ZvaWQgMCE9PXRoaXMucGF0aCYmKHQ9dGhpcy5wYXRoK3QpLHQ9dGhpcy5tYW5hZ2VyLnJlc29sdmVVUkwodCk7Y29uc3QgaT10aGlzLGE9cXB0LmdldCh0KTtpZih2b2lkIDAhPT1hKXJldHVybiBpLm1hbmFnZXIuaXRlbVN0YXJ0KHQpLHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ZSYmZShhKSxpLm1hbmFnZXIuaXRlbUVuZCh0KX0pLDApLGE7Y29uc3Qgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJpbWciKTtmdW5jdGlvbiBzKCl7ci5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixzLCExKSxyLnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIixsLCExKSxxcHQuYWRkKHQsdGhpcyksZSYmZSh0aGlzKSxpLm1hbmFnZXIuaXRlbUVuZCh0KX1mdW5jdGlvbiBsKGUpe3IucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIscywhMSksci5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsbCwhMSksbyYmbyhlKSxpLm1hbmFnZXIuaXRlbUVycm9yKHQpLGkubWFuYWdlci5pdGVtRW5kKHQpfXJldHVybiByLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLHMsITEpLHIuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGwsITEpLCJkYXRhOiIhPT10LnN1YnN0cigwLDUpJiZ2b2lkIDAhPT10aGlzLmNyb3NzT3JpZ2luJiYoci5jcm9zc09yaWdpbj10aGlzLmNyb3NzT3JpZ2luKSxpLm1hbmFnZXIuaXRlbVN0YXJ0KHQpLHIuc3JjPXQscn19KSxubXQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShLcHQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6bm10LGxvYWQ6ZnVuY3Rpb24odCxlLG4sbyl7Y29uc3QgaT1uZXcgeHN0LGE9bmV3IGVtdCh0aGlzLm1hbmFnZXIpO2Euc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbiksYS5zZXRQYXRoKHRoaXMucGF0aCk7bGV0IHI9MDtmdW5jdGlvbiBzKG4pe2EubG9hZCh0W25dLChmdW5jdGlvbih0KXtpLmltYWdlc1tuXT10LHIrKyw2PT09ciYmKGkubmVlZHNVcGRhdGU9ITAsZSYmZShpKSl9KSx2b2lkIDAsbyl9Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDsrK2UpcyhlKTtyZXR1cm4gaX19KSxvbXQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShLcHQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6b210LGxvYWQ6ZnVuY3Rpb24odCxlLG4sbyl7Y29uc3QgaT10aGlzLGE9bmV3IFBzdCxyPW5ldyBRcHQodGhpcy5tYW5hZ2VyKTtyZXR1cm4gci5zZXRSZXNwb25zZVR5cGUoImFycmF5YnVmZmVyIiksci5zZXRSZXF1ZXN0SGVhZGVyKHRoaXMucmVxdWVzdEhlYWRlciksci5zZXRQYXRoKHRoaXMucGF0aCksci5zZXRXaXRoQ3JlZGVudGlhbHMoaS53aXRoQ3JlZGVudGlhbHMpLHIubG9hZCh0LChmdW5jdGlvbih0KXtjb25zdCBuPWkucGFyc2UodCk7biYmKHZvaWQgMCE9PW4uaW1hZ2U/YS5pbWFnZT1uLmltYWdlOnZvaWQgMCE9PW4uZGF0YSYmKGEuaW1hZ2Uud2lkdGg9bi53aWR0aCxhLmltYWdlLmhlaWdodD1uLmhlaWdodCxhLmltYWdlLmRhdGE9bi5kYXRhKSxhLndyYXBTPXZvaWQgMCE9PW4ud3JhcFM/bi53cmFwUzpmaXQsYS53cmFwVD12b2lkIDAhPT1uLndyYXBUP24ud3JhcFQ6Zml0LGEubWFnRmlsdGVyPXZvaWQgMCE9PW4ubWFnRmlsdGVyP24ubWFnRmlsdGVyOmJpdCxhLm1pbkZpbHRlcj12b2lkIDAhPT1uLm1pbkZpbHRlcj9uLm1pbkZpbHRlcjpiaXQsYS5hbmlzb3Ryb3B5PXZvaWQgMCE9PW4uYW5pc290cm9weT9uLmFuaXNvdHJvcHk6MSx2b2lkIDAhPT1uLmVuY29kaW5nJiYoYS5lbmNvZGluZz1uLmVuY29kaW5nKSx2b2lkIDAhPT1uLmZsaXBZJiYoYS5mbGlwWT1uLmZsaXBZKSx2b2lkIDAhPT1uLmZvcm1hdCYmKGEuZm9ybWF0PW4uZm9ybWF0KSx2b2lkIDAhPT1uLnR5cGUmJihhLnR5cGU9bi50eXBlKSx2b2lkIDAhPT1uLm1pcG1hcHMmJihhLm1pcG1hcHM9bi5taXBtYXBzLGEubWluRmlsdGVyPXlpdCksMT09PW4ubWlwbWFwQ291bnQmJihhLm1pbkZpbHRlcj1iaXQpLGEubmVlZHNVcGRhdGU9ITAsZSYmZShhLG4pKX0pLG4sbyksYX19KSxpbXQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShLcHQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6aW10LGxvYWQ6ZnVuY3Rpb24odCxlLG4sbyl7Y29uc3QgaT1uZXcgWml0LGE9bmV3IGVtdCh0aGlzLm1hbmFnZXIpO3JldHVybiBhLnNldENyb3NzT3JpZ2luKHRoaXMuY3Jvc3NPcmlnaW4pLGEuc2V0UGF0aCh0aGlzLnBhdGgpLGEubG9hZCh0LChmdW5jdGlvbihuKXtpLmltYWdlPW47Y29uc3Qgbz10LnNlYXJjaCgvXC5qcGU/ZygkfFw/KS9pKT4wfHwwPT09dC5zZWFyY2goL15kYXRhXDppbWFnZVwvanBlZy8pO2kuZm9ybWF0PW8/T2l0OlBpdCxpLm5lZWRzVXBkYXRlPSEwLHZvaWQgMCE9PWUmJmUoaSl9KSxuLG8pLGl9fSksT2JqZWN0LmFzc2lnbihhbXQucHJvdG90eXBlLHtnZXRQb2ludDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkN1cnZlOiAuZ2V0UG9pbnQoKSBub3QgaW1wbGVtZW50ZWQuIiksbnVsbH0sZ2V0UG9pbnRBdDpmdW5jdGlvbih0LGUpe2NvbnN0IG49dGhpcy5nZXRVdG9UbWFwcGluZyh0KTtyZXR1cm4gdGhpcy5nZXRQb2ludChuLGUpfSxnZXRQb2ludHM6ZnVuY3Rpb24odD01KXtjb25zdCBlPVtdO2ZvcihsZXQgbj0wO248PXQ7bisrKWUucHVzaCh0aGlzLmdldFBvaW50KG4vdCkpO3JldHVybiBlfSxnZXRTcGFjZWRQb2ludHM6ZnVuY3Rpb24odD01KXtjb25zdCBlPVtdO2ZvcihsZXQgbj0wO248PXQ7bisrKWUucHVzaCh0aGlzLmdldFBvaW50QXQobi90KSk7cmV0dXJuIGV9LGdldExlbmd0aDpmdW5jdGlvbigpe2NvbnN0IHQ9dGhpcy5nZXRMZW5ndGhzKCk7cmV0dXJuIHRbdC5sZW5ndGgtMV19LGdldExlbmd0aHM6ZnVuY3Rpb24odCl7aWYodm9pZCAwPT09dCYmKHQ9dGhpcy5hcmNMZW5ndGhEaXZpc2lvbnMpLHRoaXMuY2FjaGVBcmNMZW5ndGhzJiZ0aGlzLmNhY2hlQXJjTGVuZ3Rocy5sZW5ndGg9PT10KzEmJiF0aGlzLm5lZWRzVXBkYXRlKXJldHVybiB0aGlzLmNhY2hlQXJjTGVuZ3Roczt0aGlzLm5lZWRzVXBkYXRlPSExO2NvbnN0IGU9W107bGV0IG4sbz10aGlzLmdldFBvaW50KDApLGk9MDtlLnB1c2goMCk7Zm9yKGxldCBhPTE7YTw9dDthKyspbj10aGlzLmdldFBvaW50KGEvdCksaSs9bi5kaXN0YW5jZVRvKG8pLGUucHVzaChpKSxvPW47cmV0dXJuIHRoaXMuY2FjaGVBcmNMZW5ndGhzPWUsZX0sdXBkYXRlQXJjTGVuZ3RoczpmdW5jdGlvbigpe3RoaXMubmVlZHNVcGRhdGU9ITAsdGhpcy5nZXRMZW5ndGhzKCl9LGdldFV0b1RtYXBwaW5nOmZ1bmN0aW9uKHQsZSl7Y29uc3Qgbj10aGlzLmdldExlbmd0aHMoKTtsZXQgbz0wO2NvbnN0IGk9bi5sZW5ndGg7bGV0IGE7YT1lfHx0Km5baS0xXTtsZXQgcixzPTAsbD1pLTE7Zm9yKDtzPD1sOylpZihvPU1hdGguZmxvb3IocysobC1zKS8yKSxyPW5bb10tYSxyPDApcz1vKzE7ZWxzZXtpZighKHI+MCkpe2w9bzticmVha31sPW8tMX1pZihvPWwsbltvXT09PWEpcmV0dXJuIG8vKGktMSk7Y29uc3QgYz1uW29dO3JldHVybihvKyhhLWMpLyhuW28rMV0tYykpLyhpLTEpfSxnZXRUYW5nZW50OmZ1bmN0aW9uKHQsZSl7Y29uc3Qgbj0xZS00O2xldCBvPXQtbixpPXQrbjtvPDAmJihvPTApLGk+MSYmKGk9MSk7Y29uc3QgYT10aGlzLmdldFBvaW50KG8pLHI9dGhpcy5nZXRQb2ludChpKSxzPWV8fChhLmlzVmVjdG9yMj9uZXcgVWl0Om5ldyAkaXQpO3JldHVybiBzLmNvcHkocikuc3ViKGEpLm5vcm1hbGl6ZSgpLHN9LGdldFRhbmdlbnRBdDpmdW5jdGlvbih0LGUpe2NvbnN0IG49dGhpcy5nZXRVdG9UbWFwcGluZyh0KTtyZXR1cm4gdGhpcy5nZXRUYW5nZW50KG4sZSl9LGNvbXB1dGVGcmVuZXRGcmFtZXM6ZnVuY3Rpb24odCxlKXtjb25zdCBuPW5ldyAkaXQsbz1bXSxpPVtdLGE9W10scj1uZXcgJGl0LHM9bmV3IGthdDtmb3IobGV0IGU9MDtlPD10O2UrKylvW2VdPXRoaXMuZ2V0VGFuZ2VudEF0KGUvdCxuZXcgJGl0KSxvW2VdLm5vcm1hbGl6ZSgpO2lbMF09bmV3ICRpdCxhWzBdPW5ldyAkaXQ7bGV0IGw9TnVtYmVyLk1BWF9WQUxVRTtjb25zdCBjPU1hdGguYWJzKG9bMF0ueCksZD1NYXRoLmFicyhvWzBdLnkpLHA9TWF0aC5hYnMob1swXS56KTtjPD1sJiYobD1jLG4uc2V0KDEsMCwwKSksZDw9bCYmKGw9ZCxuLnNldCgwLDEsMCkpLHA8PWwmJm4uc2V0KDAsMCwxKSxyLmNyb3NzVmVjdG9ycyhvWzBdLG4pLm5vcm1hbGl6ZSgpLGlbMF0uY3Jvc3NWZWN0b3JzKG9bMF0sciksYVswXS5jcm9zc1ZlY3RvcnMob1swXSxpWzBdKTtmb3IobGV0IGU9MTtlPD10O2UrKyl7aWYoaVtlXT1pW2UtMV0uY2xvbmUoKSxhW2VdPWFbZS0xXS5jbG9uZSgpLHIuY3Jvc3NWZWN0b3JzKG9bZS0xXSxvW2VdKSxyLmxlbmd0aCgpPk51bWJlci5FUFNJTE9OKXtyLm5vcm1hbGl6ZSgpO2NvbnN0IHQ9TWF0aC5hY29zKGppdC5jbGFtcChvW2UtMV0uZG90KG9bZV0pLC0xLDEpKTtpW2VdLmFwcGx5TWF0cml4NChzLm1ha2VSb3RhdGlvbkF4aXMocix0KSl9YVtlXS5jcm9zc1ZlY3RvcnMob1tlXSxpW2VdKX1pZighMD09PWUpe2xldCBlPU1hdGguYWNvcyhqaXQuY2xhbXAoaVswXS5kb3QoaVt0XSksLTEsMSkpO2UvPXQsb1swXS5kb3Qoci5jcm9zc1ZlY3RvcnMoaVswXSxpW3RdKSk+MCYmKGU9LWUpO2ZvcihsZXQgbj0xO248PXQ7bisrKWlbbl0uYXBwbHlNYXRyaXg0KHMubWFrZVJvdGF0aW9uQXhpcyhvW25dLGUqbikpLGFbbl0uY3Jvc3NWZWN0b3JzKG9bbl0saVtuXSl9cmV0dXJue3RhbmdlbnRzOm8sbm9ybWFsczppLGJpbm9ybWFsczphfX0sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9LGNvcHk6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zPXQuYXJjTGVuZ3RoRGl2aXNpb25zLHRoaXN9LHRvSlNPTjpmdW5jdGlvbigpe2NvbnN0IHQ9e21ldGFkYXRhOnt2ZXJzaW9uOjQuNSx0eXBlOiJDdXJ2ZSIsZ2VuZXJhdG9yOiJDdXJ2ZS50b0pTT04ifX07cmV0dXJuIHQuYXJjTGVuZ3RoRGl2aXNpb25zPXRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zLHQudHlwZT10aGlzLnR5cGUsdH0sZnJvbUpTT046ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zPXQuYXJjTGVuZ3RoRGl2aXNpb25zLHRoaXN9fSksKHJtdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShhbXQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9cm10LHJtdC5wcm90b3R5cGUuaXNFbGxpcHNlQ3VydmU9ITAscm10LnByb3RvdHlwZS5nZXRQb2ludD1mdW5jdGlvbih0LGUpe2NvbnN0IG49ZXx8bmV3IFVpdCxvPTIqTWF0aC5QSTtsZXQgaT10aGlzLmFFbmRBbmdsZS10aGlzLmFTdGFydEFuZ2xlO2NvbnN0IGE9TWF0aC5hYnMoaSk8TnVtYmVyLkVQU0lMT047Zm9yKDtpPDA7KWkrPW87Zm9yKDtpPm87KWktPW87aTxOdW1iZXIuRVBTSUxPTiYmKGk9YT8wOm8pLCEwIT09dGhpcy5hQ2xvY2t3aXNlfHxhfHwoaT09PW8/aT0tbzppLT1vKTtjb25zdCByPXRoaXMuYVN0YXJ0QW5nbGUrdCppO2xldCBzPXRoaXMuYVgrdGhpcy54UmFkaXVzKk1hdGguY29zKHIpLGw9dGhpcy5hWSt0aGlzLnlSYWRpdXMqTWF0aC5zaW4ocik7aWYoMCE9PXRoaXMuYVJvdGF0aW9uKXtjb25zdCB0PU1hdGguY29zKHRoaXMuYVJvdGF0aW9uKSxlPU1hdGguc2luKHRoaXMuYVJvdGF0aW9uKSxuPXMtdGhpcy5hWCxvPWwtdGhpcy5hWTtzPW4qdC1vKmUrdGhpcy5hWCxsPW4qZStvKnQrdGhpcy5hWX1yZXR1cm4gbi5zZXQocyxsKX0scm10LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHQpe3JldHVybiBhbXQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMuYVg9dC5hWCx0aGlzLmFZPXQuYVksdGhpcy54UmFkaXVzPXQueFJhZGl1cyx0aGlzLnlSYWRpdXM9dC55UmFkaXVzLHRoaXMuYVN0YXJ0QW5nbGU9dC5hU3RhcnRBbmdsZSx0aGlzLmFFbmRBbmdsZT10LmFFbmRBbmdsZSx0aGlzLmFDbG9ja3dpc2U9dC5hQ2xvY2t3aXNlLHRoaXMuYVJvdGF0aW9uPXQuYVJvdGF0aW9uLHRoaXN9LHJtdC5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7Y29uc3QgdD1hbXQucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMpO3JldHVybiB0LmFYPXRoaXMuYVgsdC5hWT10aGlzLmFZLHQueFJhZGl1cz10aGlzLnhSYWRpdXMsdC55UmFkaXVzPXRoaXMueVJhZGl1cyx0LmFTdGFydEFuZ2xlPXRoaXMuYVN0YXJ0QW5nbGUsdC5hRW5kQW5nbGU9dGhpcy5hRW5kQW5nbGUsdC5hQ2xvY2t3aXNlPXRoaXMuYUNsb2Nrd2lzZSx0LmFSb3RhdGlvbj10aGlzLmFSb3RhdGlvbix0fSxybXQucHJvdG90eXBlLmZyb21KU09OPWZ1bmN0aW9uKHQpe3JldHVybiBhbXQucHJvdG90eXBlLmZyb21KU09OLmNhbGwodGhpcyx0KSx0aGlzLmFYPXQuYVgsdGhpcy5hWT10LmFZLHRoaXMueFJhZGl1cz10LnhSYWRpdXMsdGhpcy55UmFkaXVzPXQueVJhZGl1cyx0aGlzLmFTdGFydEFuZ2xlPXQuYVN0YXJ0QW5nbGUsdGhpcy5hRW5kQW5nbGU9dC5hRW5kQW5nbGUsdGhpcy5hQ2xvY2t3aXNlPXQuYUNsb2Nrd2lzZSx0aGlzLmFSb3RhdGlvbj10LmFSb3RhdGlvbix0aGlzfSwoc210LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHJtdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1zbXQsc210LnByb3RvdHlwZS5pc0FyY0N1cnZlPSEwO2NvbnN0IGNtdD1uZXcgJGl0LGRtdD1uZXcgbG10LHBtdD1uZXcgbG10LG1tdD1uZXcgbG10O2Z1bmN0aW9uIHVtdCh0PVtdLGU9ITEsbj0iY2VudHJpcGV0YWwiLG89LjUpe2FtdC5jYWxsKHRoaXMpLHRoaXMudHlwZT0iQ2F0bXVsbFJvbUN1cnZlMyIsdGhpcy5wb2ludHM9dCx0aGlzLmNsb3NlZD1lLHRoaXMuY3VydmVUeXBlPW4sdGhpcy50ZW5zaW9uPW99ZnVuY3Rpb24gZm10KHQsZSxuLG8saSl7Y29uc3QgYT0uNSooby1lKSxyPS41KihpLW4pLHM9dCp0O3JldHVybigyKm4tMipvK2ErcikqKHQqcykrKC0zKm4rMypvLTIqYS1yKSpzK2EqdCtufWZ1bmN0aW9uIGdtdCh0LGUsbixvKXtyZXR1cm4oZnVuY3Rpb24gaSh0LGUpe2NvbnN0IG49MS10O3JldHVybiBuKm4qZX0pKHQsZSkrKGZ1bmN0aW9uIGEodCxlKXtyZXR1cm4gMiooMS10KSp0KmV9KSh0LG4pKyhmdW5jdGlvbiByKHQsZSl7cmV0dXJuIHQqdCplfSkodCxvKX1mdW5jdGlvbiBobXQodCxlLG4sbyxpKXtyZXR1cm4oZnVuY3Rpb24gYSh0LGUpe2NvbnN0IG49MS10O3JldHVybiBuKm4qbiplfSkodCxlKSsoZnVuY3Rpb24gcih0LGUpe2NvbnN0IG49MS10O3JldHVybiAzKm4qbip0KmV9KSh0LG4pKyhmdW5jdGlvbiBzKHQsZSl7cmV0dXJuIDMqKDEtdCkqdCp0KmV9KSh0LG8pKyhmdW5jdGlvbiBsKHQsZSl7cmV0dXJuIHQqdCp0KmV9KSh0LGkpfWZ1bmN0aW9uIGJtdCh0PW5ldyBVaXQsZT1uZXcgVWl0LG49bmV3IFVpdCxvPW5ldyBVaXQpe2FtdC5jYWxsKHRoaXMpLHRoaXMudHlwZT0iQ3ViaWNCZXppZXJDdXJ2ZSIsdGhpcy52MD10LHRoaXMudjE9ZSx0aGlzLnYyPW4sdGhpcy52Mz1vfWZ1bmN0aW9uIHltdCh0PW5ldyAkaXQsZT1uZXcgJGl0LG49bmV3ICRpdCxvPW5ldyAkaXQpe2FtdC5jYWxsKHRoaXMpLHRoaXMudHlwZT0iQ3ViaWNCZXppZXJDdXJ2ZTMiLHRoaXMudjA9dCx0aGlzLnYxPWUsdGhpcy52Mj1uLHRoaXMudjM9b31mdW5jdGlvbiBfbXQodD1uZXcgVWl0LGU9bmV3IFVpdCl7YW10LmNhbGwodGhpcyksdGhpcy50eXBlPSJMaW5lQ3VydmUiLHRoaXMudjE9dCx0aGlzLnYyPWV9ZnVuY3Rpb24gQ210KHQ9bmV3ICRpdCxlPW5ldyAkaXQpe2FtdC5jYWxsKHRoaXMpLHRoaXMudHlwZT0iTGluZUN1cnZlMyIsdGhpcy52MT10LHRoaXMudjI9ZX1mdW5jdGlvbiBNbXQodD1uZXcgVWl0LGU9bmV3IFVpdCxuPW5ldyBVaXQpe2FtdC5jYWxsKHRoaXMpLHRoaXMudHlwZT0iUXVhZHJhdGljQmV6aWVyQ3VydmUiLHRoaXMudjA9dCx0aGlzLnYxPWUsdGhpcy52Mj1ufWZ1bmN0aW9uIHZtdCh0PW5ldyAkaXQsZT1uZXcgJGl0LG49bmV3ICRpdCl7YW10LmNhbGwodGhpcyksdGhpcy50eXBlPSJRdWFkcmF0aWNCZXppZXJDdXJ2ZTMiLHRoaXMudjA9dCx0aGlzLnYxPWUsdGhpcy52Mj1ufWZ1bmN0aW9uIHhtdCh0PVtdKXthbXQuY2FsbCh0aGlzKSx0aGlzLnR5cGU9IlNwbGluZUN1cnZlIix0aGlzLnBvaW50cz10fSh1bXQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYW10LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPXVtdCx1bXQucHJvdG90eXBlLmlzQ2F0bXVsbFJvbUN1cnZlMz0hMCx1bXQucHJvdG90eXBlLmdldFBvaW50PWZ1bmN0aW9uKHQsZT1uZXcgJGl0KXtjb25zdCBuPWUsbz10aGlzLnBvaW50cyxpPW8ubGVuZ3RoLGE9KGktKHRoaXMuY2xvc2VkPzA6MSkpKnQ7bGV0IHIscyxsPU1hdGguZmxvb3IoYSksYz1hLWw7dGhpcy5jbG9zZWQ/bCs9bD4wPzA6KE1hdGguZmxvb3IoTWF0aC5hYnMobCkvaSkrMSkqaTowPT09YyYmbD09PWktMSYmKGw9aS0yLGM9MSksdGhpcy5jbG9zZWR8fGw+MD9yPW9bKGwtMSklaV06KGNtdC5zdWJWZWN0b3JzKG9bMF0sb1sxXSkuYWRkKG9bMF0pLHI9Y210KTtjb25zdCBkPW9bbCVpXSxwPW9bKGwrMSklaV07aWYodGhpcy5jbG9zZWR8fGwrMjxpP3M9b1sobCsyKSVpXTooY210LnN1YlZlY3RvcnMob1tpLTFdLG9baS0yXSkuYWRkKG9baS0xXSkscz1jbXQpLCJjZW50cmlwZXRhbCI9PT10aGlzLmN1cnZlVHlwZXx8ImNob3JkYWwiPT09dGhpcy5jdXJ2ZVR5cGUpe2NvbnN0IHQ9ImNob3JkYWwiPT09dGhpcy5jdXJ2ZVR5cGU/LjU6LjI1O2xldCBlPU1hdGgucG93KHIuZGlzdGFuY2VUb1NxdWFyZWQoZCksdCksbj1NYXRoLnBvdyhkLmRpc3RhbmNlVG9TcXVhcmVkKHApLHQpLG89TWF0aC5wb3cocC5kaXN0YW5jZVRvU3F1YXJlZChzKSx0KTtuPDFlLTQmJihuPTEpLGU8MWUtNCYmKGU9biksbzwxZS00JiYobz1uKSxkbXQuaW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tKHIueCxkLngscC54LHMueCxlLG4sbykscG10LmluaXROb251bmlmb3JtQ2F0bXVsbFJvbShyLnksZC55LHAueSxzLnksZSxuLG8pLG1tdC5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20oci56LGQueixwLnoscy56LGUsbixvKX1lbHNlImNhdG11bGxyb20iPT09dGhpcy5jdXJ2ZVR5cGUmJihkbXQuaW5pdENhdG11bGxSb20oci54LGQueCxwLngscy54LHRoaXMudGVuc2lvbikscG10LmluaXRDYXRtdWxsUm9tKHIueSxkLnkscC55LHMueSx0aGlzLnRlbnNpb24pLG1tdC5pbml0Q2F0bXVsbFJvbShyLnosZC56LHAueixzLnosdGhpcy50ZW5zaW9uKSk7cmV0dXJuIG4uc2V0KGRtdC5jYWxjKGMpLHBtdC5jYWxjKGMpLG1tdC5jYWxjKGMpKSxufSx1bXQucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24odCl7YW10LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLnBvaW50cz1bXTtmb3IobGV0IGU9MCxuPXQucG9pbnRzLmxlbmd0aDtlPG47ZSsrKXRoaXMucG9pbnRzLnB1c2godC5wb2ludHNbZV0uY2xvbmUoKSk7cmV0dXJuIHRoaXMuY2xvc2VkPXQuY2xvc2VkLHRoaXMuY3VydmVUeXBlPXQuY3VydmVUeXBlLHRoaXMudGVuc2lvbj10LnRlbnNpb24sdGhpc30sdW10LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtjb25zdCB0PWFtdC5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyk7dC5wb2ludHM9W107Zm9yKGxldCBlPTAsbj10aGlzLnBvaW50cy5sZW5ndGg7ZTxuO2UrKyl0LnBvaW50cy5wdXNoKHRoaXMucG9pbnRzW2VdLnRvQXJyYXkoKSk7cmV0dXJuIHQuY2xvc2VkPXRoaXMuY2xvc2VkLHQuY3VydmVUeXBlPXRoaXMuY3VydmVUeXBlLHQudGVuc2lvbj10aGlzLnRlbnNpb24sdH0sdW10LnByb3RvdHlwZS5mcm9tSlNPTj1mdW5jdGlvbih0KXthbXQucHJvdG90eXBlLmZyb21KU09OLmNhbGwodGhpcyx0KSx0aGlzLnBvaW50cz1bXTtmb3IobGV0IGU9MCxuPXQucG9pbnRzLmxlbmd0aDtlPG47ZSsrKXtjb25zdCBuPXQucG9pbnRzW2VdO3RoaXMucG9pbnRzLnB1c2goKG5ldyAkaXQpLmZyb21BcnJheShuKSl9cmV0dXJuIHRoaXMuY2xvc2VkPXQuY2xvc2VkLHRoaXMuY3VydmVUeXBlPXQuY3VydmVUeXBlLHRoaXMudGVuc2lvbj10LnRlbnNpb24sdGhpc30sKGJtdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShhbXQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9Ym10LGJtdC5wcm90b3R5cGUuaXNDdWJpY0JlemllckN1cnZlPSEwLGJtdC5wcm90b3R5cGUuZ2V0UG9pbnQ9ZnVuY3Rpb24odCxlPW5ldyBVaXQpe2NvbnN0IG49ZSxvPXRoaXMudjAsaT10aGlzLnYxLGE9dGhpcy52MixyPXRoaXMudjM7cmV0dXJuIG4uc2V0KGhtdCh0LG8ueCxpLngsYS54LHIueCksaG10KHQsby55LGkueSxhLnksci55KSksbn0sYm10LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHQpe3JldHVybiBhbXQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMudjAuY29weSh0LnYwKSx0aGlzLnYxLmNvcHkodC52MSksdGhpcy52Mi5jb3B5KHQudjIpLHRoaXMudjMuY29weSh0LnYzKSx0aGlzfSxibXQucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe2NvbnN0IHQ9YW10LnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzKTtyZXR1cm4gdC52MD10aGlzLnYwLnRvQXJyYXkoKSx0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdC52Mz10aGlzLnYzLnRvQXJyYXkoKSx0fSxibXQucHJvdG90eXBlLmZyb21KU09OPWZ1bmN0aW9uKHQpe3JldHVybiBhbXQucHJvdG90eXBlLmZyb21KU09OLmNhbGwodGhpcyx0KSx0aGlzLnYwLmZyb21BcnJheSh0LnYwKSx0aGlzLnYxLmZyb21BcnJheSh0LnYxKSx0aGlzLnYyLmZyb21BcnJheSh0LnYyKSx0aGlzLnYzLmZyb21BcnJheSh0LnYzKSx0aGlzfSwoeW10LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGFtdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj15bXQseW10LnByb3RvdHlwZS5pc0N1YmljQmV6aWVyQ3VydmUzPSEwLHltdC5wcm90b3R5cGUuZ2V0UG9pbnQ9ZnVuY3Rpb24odCxlPW5ldyAkaXQpe2NvbnN0IG49ZSxvPXRoaXMudjAsaT10aGlzLnYxLGE9dGhpcy52MixyPXRoaXMudjM7cmV0dXJuIG4uc2V0KGhtdCh0LG8ueCxpLngsYS54LHIueCksaG10KHQsby55LGkueSxhLnksci55KSxobXQodCxvLnosaS56LGEueixyLnopKSxufSx5bXQucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24odCl7cmV0dXJuIGFtdC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy52MC5jb3B5KHQudjApLHRoaXMudjEuY29weSh0LnYxKSx0aGlzLnYyLmNvcHkodC52MiksdGhpcy52My5jb3B5KHQudjMpLHRoaXN9LHltdC5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7Y29uc3QgdD1hbXQucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMpO3JldHVybiB0LnYwPXRoaXMudjAudG9BcnJheSgpLHQudjE9dGhpcy52MS50b0FycmF5KCksdC52Mj10aGlzLnYyLnRvQXJyYXkoKSx0LnYzPXRoaXMudjMudG9BcnJheSgpLHR9LHltdC5wcm90b3R5cGUuZnJvbUpTT049ZnVuY3Rpb24odCl7cmV0dXJuIGFtdC5wcm90b3R5cGUuZnJvbUpTT04uY2FsbCh0aGlzLHQpLHRoaXMudjAuZnJvbUFycmF5KHQudjApLHRoaXMudjEuZnJvbUFycmF5KHQudjEpLHRoaXMudjIuZnJvbUFycmF5KHQudjIpLHRoaXMudjMuZnJvbUFycmF5KHQudjMpLHRoaXN9LChfbXQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYW10LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPV9tdCxfbXQucHJvdG90eXBlLmlzTGluZUN1cnZlPSEwLF9tdC5wcm90b3R5cGUuZ2V0UG9pbnQ9ZnVuY3Rpb24odCxlPW5ldyBVaXQpe2NvbnN0IG49ZTtyZXR1cm4gMT09PXQ/bi5jb3B5KHRoaXMudjIpOihuLmNvcHkodGhpcy52Mikuc3ViKHRoaXMudjEpLG4ubXVsdGlwbHlTY2FsYXIodCkuYWRkKHRoaXMudjEpKSxufSxfbXQucHJvdG90eXBlLmdldFBvaW50QXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5nZXRQb2ludCh0LGUpfSxfbXQucHJvdG90eXBlLmdldFRhbmdlbnQ9ZnVuY3Rpb24odCxlKXtjb25zdCBuPWV8fG5ldyBVaXQ7cmV0dXJuIG4uY29weSh0aGlzLnYyKS5zdWIodGhpcy52MSkubm9ybWFsaXplKCksbn0sX210LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHQpe3JldHVybiBhbXQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMudjEuY29weSh0LnYxKSx0aGlzLnYyLmNvcHkodC52MiksdGhpc30sX210LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtjb25zdCB0PWFtdC5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyk7cmV0dXJuIHQudjE9dGhpcy52MS50b0FycmF5KCksdC52Mj10aGlzLnYyLnRvQXJyYXkoKSx0fSxfbXQucHJvdG90eXBlLmZyb21KU09OPWZ1bmN0aW9uKHQpe3JldHVybiBhbXQucHJvdG90eXBlLmZyb21KU09OLmNhbGwodGhpcyx0KSx0aGlzLnYxLmZyb21BcnJheSh0LnYxKSx0aGlzLnYyLmZyb21BcnJheSh0LnYyKSx0aGlzfSwoQ210LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGFtdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1DbXQsQ210LnByb3RvdHlwZS5pc0xpbmVDdXJ2ZTM9ITAsQ210LnByb3RvdHlwZS5nZXRQb2ludD1mdW5jdGlvbih0LGU9bmV3ICRpdCl7Y29uc3Qgbj1lO3JldHVybiAxPT09dD9uLmNvcHkodGhpcy52Mik6KG4uY29weSh0aGlzLnYyKS5zdWIodGhpcy52MSksbi5tdWx0aXBseVNjYWxhcih0KS5hZGQodGhpcy52MSkpLG59LENtdC5wcm90b3R5cGUuZ2V0UG9pbnRBdD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmdldFBvaW50KHQsZSl9LENtdC5wcm90b3R5cGUuY29weT1mdW5jdGlvbih0KXtyZXR1cm4gYW10LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLnYxLmNvcHkodC52MSksdGhpcy52Mi5jb3B5KHQudjIpLHRoaXN9LENtdC5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7Y29uc3QgdD1hbXQucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMpO3JldHVybiB0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdH0sQ210LnByb3RvdHlwZS5mcm9tSlNPTj1mdW5jdGlvbih0KXtyZXR1cm4gYW10LnByb3RvdHlwZS5mcm9tSlNPTi5jYWxsKHRoaXMsdCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpc30sKE1tdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShhbXQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9TW10LE1tdC5wcm90b3R5cGUuaXNRdWFkcmF0aWNCZXppZXJDdXJ2ZT0hMCxNbXQucHJvdG90eXBlLmdldFBvaW50PWZ1bmN0aW9uKHQsZT1uZXcgVWl0KXtjb25zdCBuPWUsbz10aGlzLnYwLGk9dGhpcy52MSxhPXRoaXMudjI7cmV0dXJuIG4uc2V0KGdtdCh0LG8ueCxpLngsYS54KSxnbXQodCxvLnksaS55LGEueSkpLG59LE1tdC5wcm90b3R5cGUuY29weT1mdW5jdGlvbih0KXtyZXR1cm4gYW10LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLnYwLmNvcHkodC52MCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzfSxNbXQucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe2NvbnN0IHQ9YW10LnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzKTtyZXR1cm4gdC52MD10aGlzLnYwLnRvQXJyYXkoKSx0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdH0sTW10LnByb3RvdHlwZS5mcm9tSlNPTj1mdW5jdGlvbih0KXtyZXR1cm4gYW10LnByb3RvdHlwZS5mcm9tSlNPTi5jYWxsKHRoaXMsdCksdGhpcy52MC5mcm9tQXJyYXkodC52MCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpc30sKHZtdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShhbXQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9dm10LHZtdC5wcm90b3R5cGUuaXNRdWFkcmF0aWNCZXppZXJDdXJ2ZTM9ITAsdm10LnByb3RvdHlwZS5nZXRQb2ludD1mdW5jdGlvbih0LGU9bmV3ICRpdCl7Y29uc3Qgbj1lLG89dGhpcy52MCxpPXRoaXMudjEsYT10aGlzLnYyO3JldHVybiBuLnNldChnbXQodCxvLngsaS54LGEueCksZ210KHQsby55LGkueSxhLnkpLGdtdCh0LG8ueixpLnosYS56KSksbn0sdm10LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHQpe3JldHVybiBhbXQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMudjAuY29weSh0LnYwKSx0aGlzLnYxLmNvcHkodC52MSksdGhpcy52Mi5jb3B5KHQudjIpLHRoaXN9LHZtdC5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7Y29uc3QgdD1hbXQucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMpO3JldHVybiB0LnYwPXRoaXMudjAudG9BcnJheSgpLHQudjE9dGhpcy52MS50b0FycmF5KCksdC52Mj10aGlzLnYyLnRvQXJyYXkoKSx0fSx2bXQucHJvdG90eXBlLmZyb21KU09OPWZ1bmN0aW9uKHQpe3JldHVybiBhbXQucHJvdG90eXBlLmZyb21KU09OLmNhbGwodGhpcyx0KSx0aGlzLnYwLmZyb21BcnJheSh0LnYwKSx0aGlzLnYxLmZyb21BcnJheSh0LnYxKSx0aGlzLnYyLmZyb21BcnJheSh0LnYyKSx0aGlzfSwoeG10LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGFtdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj14bXQseG10LnByb3RvdHlwZS5pc1NwbGluZUN1cnZlPSEwLHhtdC5wcm90b3R5cGUuZ2V0UG9pbnQ9ZnVuY3Rpb24odCxlPW5ldyBVaXQpe2NvbnN0IG49ZSxvPXRoaXMucG9pbnRzLGk9KG8ubGVuZ3RoLTEpKnQsYT1NYXRoLmZsb29yKGkpLHI9aS1hLHM9b1swPT09YT9hOmEtMV0sbD1vW2FdLGM9b1thPm8ubGVuZ3RoLTI/by5sZW5ndGgtMTphKzFdLGQ9b1thPm8ubGVuZ3RoLTM/by5sZW5ndGgtMTphKzJdO3JldHVybiBuLnNldChmbXQocixzLngsbC54LGMueCxkLngpLGZtdChyLHMueSxsLnksYy55LGQueSkpLG59LHhtdC5wcm90b3R5cGUuY29weT1mdW5jdGlvbih0KXthbXQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMucG9pbnRzPVtdO2ZvcihsZXQgZT0wLG49dC5wb2ludHMubGVuZ3RoO2U8bjtlKyspdGhpcy5wb2ludHMucHVzaCh0LnBvaW50c1tlXS5jbG9uZSgpKTtyZXR1cm4gdGhpc30seG10LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtjb25zdCB0PWFtdC5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyk7dC5wb2ludHM9W107Zm9yKGxldCBlPTAsbj10aGlzLnBvaW50cy5sZW5ndGg7ZTxuO2UrKyl0LnBvaW50cy5wdXNoKHRoaXMucG9pbnRzW2VdLnRvQXJyYXkoKSk7cmV0dXJuIHR9LHhtdC5wcm90b3R5cGUuZnJvbUpTT049ZnVuY3Rpb24odCl7YW10LnByb3RvdHlwZS5mcm9tSlNPTi5jYWxsKHRoaXMsdCksdGhpcy5wb2ludHM9W107Zm9yKGxldCBlPTAsbj10LnBvaW50cy5sZW5ndGg7ZTxuO2UrKyl7Y29uc3Qgbj10LnBvaW50c1tlXTt0aGlzLnBvaW50cy5wdXNoKChuZXcgVWl0KS5mcm9tQXJyYXkobikpfXJldHVybiB0aGlzfTt2YXIgT210PU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLEFyY0N1cnZlOnNtdCxDYXRtdWxsUm9tQ3VydmUzOnVtdCxDdWJpY0JlemllckN1cnZlOmJtdCxDdWJpY0JlemllckN1cnZlMzp5bXQsRWxsaXBzZUN1cnZlOnJtdCxMaW5lQ3VydmU6X210LExpbmVDdXJ2ZTM6Q210LFF1YWRyYXRpY0JlemllckN1cnZlOk1tdCxRdWFkcmF0aWNCZXppZXJDdXJ2ZTM6dm10LFNwbGluZUN1cnZlOnhtdH0pO2Z1bmN0aW9uIFBtdCgpe2FtdC5jYWxsKHRoaXMpLHRoaXMudHlwZT0iQ3VydmVQYXRoIix0aGlzLmN1cnZlcz1bXSx0aGlzLmF1dG9DbG9zZT0hMX1mdW5jdGlvbiB3bXQodCl7UG10LmNhbGwodGhpcyksdGhpcy50eXBlPSJQYXRoIix0aGlzLmN1cnJlbnRQb2ludD1uZXcgVWl0LHQmJnRoaXMuc2V0RnJvbVBvaW50cyh0KX1mdW5jdGlvbiBrbXQodCl7d210LmNhbGwodGhpcyx0KSx0aGlzLnV1aWQ9aml0LmdlbmVyYXRlVVVJRCgpLHRoaXMudHlwZT0iU2hhcGUiLHRoaXMuaG9sZXM9W119ZnVuY3Rpb24gU210KHQsZT0xKXtRYXQuY2FsbCh0aGlzKSx0aGlzLnR5cGU9IkxpZ2h0Iix0aGlzLmNvbG9yPW5ldyBDcnQodCksdGhpcy5pbnRlbnNpdHk9ZX1mdW5jdGlvbiBEbXQodCxlLG4pe1NtdC5jYWxsKHRoaXMsdCxuKSx0aGlzLnR5cGU9IkhlbWlzcGhlcmVMaWdodCIsdGhpcy5wb3NpdGlvbi5jb3B5KFFhdC5EZWZhdWx0VXApLHRoaXMudXBkYXRlTWF0cml4KCksdGhpcy5ncm91bmRDb2xvcj1uZXcgQ3J0KGUpfWZ1bmN0aW9uIEVtdCh0KXt0aGlzLmNhbWVyYT10LHRoaXMuYmlhcz0wLHRoaXMubm9ybWFsQmlhcz0wLHRoaXMucmFkaXVzPTEsdGhpcy5tYXBTaXplPW5ldyBVaXQoNTEyLDUxMiksdGhpcy5tYXA9bnVsbCx0aGlzLm1hcFBhc3M9bnVsbCx0aGlzLm1hdHJpeD1uZXcga2F0LHRoaXMuYXV0b1VwZGF0ZT0hMCx0aGlzLm5lZWRzVXBkYXRlPSExLHRoaXMuX2ZydXN0dW09bmV3IFNzdCx0aGlzLl9mcmFtZUV4dGVudHM9bmV3IFVpdCgxLDEpLHRoaXMuX3ZpZXdwb3J0Q291bnQ9MSx0aGlzLl92aWV3cG9ydHM9W25ldyBLaXQoMCwwLDEsMSldfWZ1bmN0aW9uIEFtdCgpe0VtdC5jYWxsKHRoaXMsbmV3IENzdCg1MCwxLC41LDUwMCkpLHRoaXMuZm9jdXM9MX1mdW5jdGlvbiBSbXQodCxlLG4sbyxpLGEpe1NtdC5jYWxsKHRoaXMsdCxlKSx0aGlzLnR5cGU9IlNwb3RMaWdodCIsdGhpcy5wb3NpdGlvbi5jb3B5KFFhdC5EZWZhdWx0VXApLHRoaXMudXBkYXRlTWF0cml4KCksdGhpcy50YXJnZXQ9bmV3IFFhdCxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywicG93ZXIiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnRlbnNpdHkqTWF0aC5QSX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuaW50ZW5zaXR5PXQvTWF0aC5QSX19KSx0aGlzLmRpc3RhbmNlPXZvaWQgMCE9PW4/bjowLHRoaXMuYW5nbGU9dm9pZCAwIT09bz9vOk1hdGguUEkvMyx0aGlzLnBlbnVtYnJhPXZvaWQgMCE9PWk/aTowLHRoaXMuZGVjYXk9dm9pZCAwIT09YT9hOjEsdGhpcy5zaGFkb3c9bmV3IEFtdH1mdW5jdGlvbiBUbXQoKXtFbXQuY2FsbCh0aGlzLG5ldyBDc3QoOTAsMSwuNSw1MDApKSx0aGlzLl9mcmFtZUV4dGVudHM9bmV3IFVpdCg0LDIpLHRoaXMuX3ZpZXdwb3J0Q291bnQ9Nix0aGlzLl92aWV3cG9ydHM9W25ldyBLaXQoMiwxLDEsMSksbmV3IEtpdCgwLDEsMSwxKSxuZXcgS2l0KDMsMSwxLDEpLG5ldyBLaXQoMSwxLDEsMSksbmV3IEtpdCgzLDAsMSwxKSxuZXcgS2l0KDEsMCwxLDEpXSx0aGlzLl9jdWJlRGlyZWN0aW9ucz1bbmV3ICRpdCgxLDAsMCksbmV3ICRpdCgtMSwwLDApLG5ldyAkaXQoMCwwLDEpLG5ldyAkaXQoMCwwLC0xKSxuZXcgJGl0KDAsMSwwKSxuZXcgJGl0KDAsLTEsMCldLHRoaXMuX2N1YmVVcHM9W25ldyAkaXQoMCwxLDApLG5ldyAkaXQoMCwxLDApLG5ldyAkaXQoMCwxLDApLG5ldyAkaXQoMCwxLDApLG5ldyAkaXQoMCwwLDEpLG5ldyAkaXQoMCwwLC0xKV19ZnVuY3Rpb24gTm10KHQsZSxuLG8pe1NtdC5jYWxsKHRoaXMsdCxlKSx0aGlzLnR5cGU9IlBvaW50TGlnaHQiLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJwb3dlciIse2dldDpmdW5jdGlvbigpe3JldHVybiA0KnRoaXMuaW50ZW5zaXR5Kk1hdGguUEl9LHNldDpmdW5jdGlvbih0KXt0aGlzLmludGVuc2l0eT10Lyg0Kk1hdGguUEkpfX0pLHRoaXMuZGlzdGFuY2U9dm9pZCAwIT09bj9uOjAsdGhpcy5kZWNheT12b2lkIDAhPT1vP286MSx0aGlzLnNoYWRvdz1uZXcgVG10fWZ1bmN0aW9uIEltdCh0PS0xLGU9MSxuPTEsbz0tMSxpPS4xLGE9MmUzKXtfc3QuY2FsbCh0aGlzKSx0aGlzLnR5cGU9Ik9ydGhvZ3JhcGhpY0NhbWVyYSIsdGhpcy56b29tPTEsdGhpcy52aWV3PW51bGwsdGhpcy5sZWZ0PXQsdGhpcy5yaWdodD1lLHRoaXMudG9wPW4sdGhpcy5ib3R0b209byx0aGlzLm5lYXI9aSx0aGlzLmZhcj1hLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfWZ1bmN0aW9uIHptdCgpe0VtdC5jYWxsKHRoaXMsbmV3IEltdCgtNSw1LDUsLTUsLjUsNTAwKSl9ZnVuY3Rpb24gSG10KHQsZSl7U210LmNhbGwodGhpcyx0LGUpLHRoaXMudHlwZT0iRGlyZWN0aW9uYWxMaWdodCIsdGhpcy5wb3NpdGlvbi5jb3B5KFFhdC5EZWZhdWx0VXApLHRoaXMudXBkYXRlTWF0cml4KCksdGhpcy50YXJnZXQ9bmV3IFFhdCx0aGlzLnNoYWRvdz1uZXcgem10fWZ1bmN0aW9uIEZtdCh0LGUpe1NtdC5jYWxsKHRoaXMsdCxlKSx0aGlzLnR5cGU9IkFtYmllbnRMaWdodCJ9ZnVuY3Rpb24gTG10KHQsZSxuLG8pe1NtdC5jYWxsKHRoaXMsdCxlKSx0aGlzLnR5cGU9IlJlY3RBcmVhTGlnaHQiLHRoaXMud2lkdGg9dm9pZCAwIT09bj9uOjEwLHRoaXMuaGVpZ2h0PXZvaWQgMCE9PW8/bzoxMH1QbXQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShhbXQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6UG10LGFkZDpmdW5jdGlvbih0KXt0aGlzLmN1cnZlcy5wdXNoKHQpfSxjbG9zZVBhdGg6ZnVuY3Rpb24oKXtjb25zdCB0PXRoaXMuY3VydmVzWzBdLmdldFBvaW50KDApLGU9dGhpcy5jdXJ2ZXNbdGhpcy5jdXJ2ZXMubGVuZ3RoLTFdLmdldFBvaW50KDEpO3QuZXF1YWxzKGUpfHx0aGlzLmN1cnZlcy5wdXNoKG5ldyBfbXQoZSx0KSl9LGdldFBvaW50OmZ1bmN0aW9uKHQpe2NvbnN0IGU9dCp0aGlzLmdldExlbmd0aCgpLG49dGhpcy5nZXRDdXJ2ZUxlbmd0aHMoKTtsZXQgbz0wO2Zvcig7bzxuLmxlbmd0aDspe2lmKG5bb10+PWUpe2NvbnN0IHQ9bltvXS1lLGk9dGhpcy5jdXJ2ZXNbb10sYT1pLmdldExlbmd0aCgpO3JldHVybiBpLmdldFBvaW50QXQoMD09PWE/MDoxLXQvYSl9bysrfXJldHVybiBudWxsfSxnZXRMZW5ndGg6ZnVuY3Rpb24oKXtjb25zdCB0PXRoaXMuZ2V0Q3VydmVMZW5ndGhzKCk7cmV0dXJuIHRbdC5sZW5ndGgtMV19LHVwZGF0ZUFyY0xlbmd0aHM6ZnVuY3Rpb24oKXt0aGlzLm5lZWRzVXBkYXRlPSEwLHRoaXMuY2FjaGVMZW5ndGhzPW51bGwsdGhpcy5nZXRDdXJ2ZUxlbmd0aHMoKX0sZ2V0Q3VydmVMZW5ndGhzOmZ1bmN0aW9uKCl7aWYodGhpcy5jYWNoZUxlbmd0aHMmJnRoaXMuY2FjaGVMZW5ndGhzLmxlbmd0aD09PXRoaXMuY3VydmVzLmxlbmd0aClyZXR1cm4gdGhpcy5jYWNoZUxlbmd0aHM7Y29uc3QgdD1bXTtsZXQgZT0wO2ZvcihsZXQgbj0wLG89dGhpcy5jdXJ2ZXMubGVuZ3RoO248bztuKyspZSs9dGhpcy5jdXJ2ZXNbbl0uZ2V0TGVuZ3RoKCksdC5wdXNoKGUpO3JldHVybiB0aGlzLmNhY2hlTGVuZ3Rocz10LHR9LGdldFNwYWNlZFBvaW50czpmdW5jdGlvbih0PTQwKXtjb25zdCBlPVtdO2ZvcihsZXQgbj0wO248PXQ7bisrKWUucHVzaCh0aGlzLmdldFBvaW50KG4vdCkpO3JldHVybiB0aGlzLmF1dG9DbG9zZSYmZS5wdXNoKGVbMF0pLGV9LGdldFBvaW50czpmdW5jdGlvbih0PTEyKXtjb25zdCBlPVtdO2xldCBuO2ZvcihsZXQgbz0wLGk9dGhpcy5jdXJ2ZXM7bzxpLmxlbmd0aDtvKyspe2NvbnN0IGE9aVtvXSxyPWEuZ2V0UG9pbnRzKGEmJmEuaXNFbGxpcHNlQ3VydmU/Mip0OmEmJihhLmlzTGluZUN1cnZlfHxhLmlzTGluZUN1cnZlMyk/MTphJiZhLmlzU3BsaW5lQ3VydmU/dCphLnBvaW50cy5sZW5ndGg6dCk7Zm9yKGxldCB0PTA7dDxyLmxlbmd0aDt0Kyspe2NvbnN0IG89clt0XTtuJiZuLmVxdWFscyhvKXx8KGUucHVzaChvKSxuPW8pfX1yZXR1cm4gdGhpcy5hdXRvQ2xvc2UmJmUubGVuZ3RoPjEmJiFlW2UubGVuZ3RoLTFdLmVxdWFscyhlWzBdKSYmZS5wdXNoKGVbMF0pLGV9LGNvcHk6ZnVuY3Rpb24odCl7YW10LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLmN1cnZlcz1bXTtmb3IobGV0IGU9MCxuPXQuY3VydmVzLmxlbmd0aDtlPG47ZSsrKXRoaXMuY3VydmVzLnB1c2godC5jdXJ2ZXNbZV0uY2xvbmUoKSk7cmV0dXJuIHRoaXMuYXV0b0Nsb3NlPXQuYXV0b0Nsb3NlLHRoaXN9LHRvSlNPTjpmdW5jdGlvbigpe2NvbnN0IHQ9YW10LnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzKTt0LmF1dG9DbG9zZT10aGlzLmF1dG9DbG9zZSx0LmN1cnZlcz1bXTtmb3IobGV0IGU9MCxuPXRoaXMuY3VydmVzLmxlbmd0aDtlPG47ZSsrKXQuY3VydmVzLnB1c2godGhpcy5jdXJ2ZXNbZV0udG9KU09OKCkpO3JldHVybiB0fSxmcm9tSlNPTjpmdW5jdGlvbih0KXthbXQucHJvdG90eXBlLmZyb21KU09OLmNhbGwodGhpcyx0KSx0aGlzLmF1dG9DbG9zZT10LmF1dG9DbG9zZSx0aGlzLmN1cnZlcz1bXTtmb3IobGV0IGU9MCxuPXQuY3VydmVzLmxlbmd0aDtlPG47ZSsrKXtjb25zdCBuPXQuY3VydmVzW2VdO3RoaXMuY3VydmVzLnB1c2goKG5ldyBPbXRbbi50eXBlXSkuZnJvbUpTT04obikpfXJldHVybiB0aGlzfX0pLHdtdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKFBtdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3Rvcjp3bXQsc2V0RnJvbVBvaW50czpmdW5jdGlvbih0KXt0aGlzLm1vdmVUbyh0WzBdLngsdFswXS55KTtmb3IobGV0IGU9MSxuPXQubGVuZ3RoO2U8bjtlKyspdGhpcy5saW5lVG8odFtlXS54LHRbZV0ueSk7cmV0dXJuIHRoaXN9LG1vdmVUbzpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmN1cnJlbnRQb2ludC5zZXQodCxlKSx0aGlzfSxsaW5lVG86ZnVuY3Rpb24odCxlKXtjb25zdCBuPW5ldyBfbXQodGhpcy5jdXJyZW50UG9pbnQuY2xvbmUoKSxuZXcgVWl0KHQsZSkpO3JldHVybiB0aGlzLmN1cnZlcy5wdXNoKG4pLHRoaXMuY3VycmVudFBvaW50LnNldCh0LGUpLHRoaXN9LHF1YWRyYXRpY0N1cnZlVG86ZnVuY3Rpb24odCxlLG4sbyl7Y29uc3QgaT1uZXcgTW10KHRoaXMuY3VycmVudFBvaW50LmNsb25lKCksbmV3IFVpdCh0LGUpLG5ldyBVaXQobixvKSk7cmV0dXJuIHRoaXMuY3VydmVzLnB1c2goaSksdGhpcy5jdXJyZW50UG9pbnQuc2V0KG4sbyksdGhpc30sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbih0LGUsbixvLGksYSl7Y29uc3Qgcj1uZXcgYm10KHRoaXMuY3VycmVudFBvaW50LmNsb25lKCksbmV3IFVpdCh0LGUpLG5ldyBVaXQobixvKSxuZXcgVWl0KGksYSkpO3JldHVybiB0aGlzLmN1cnZlcy5wdXNoKHIpLHRoaXMuY3VycmVudFBvaW50LnNldChpLGEpLHRoaXN9LHNwbGluZVRocnU6ZnVuY3Rpb24odCl7Y29uc3QgZT1uZXcgeG10KFt0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpXS5jb25jYXQodCkpO3JldHVybiB0aGlzLmN1cnZlcy5wdXNoKGUpLHRoaXMuY3VycmVudFBvaW50LmNvcHkodFt0Lmxlbmd0aC0xXSksdGhpc30sYXJjOmZ1bmN0aW9uKHQsZSxuLG8saSxhKXtyZXR1cm4gdGhpcy5hYnNhcmModCt0aGlzLmN1cnJlbnRQb2ludC54LGUrdGhpcy5jdXJyZW50UG9pbnQueSxuLG8saSxhKSx0aGlzfSxhYnNhcmM6ZnVuY3Rpb24odCxlLG4sbyxpLGEpe3JldHVybiB0aGlzLmFic2VsbGlwc2UodCxlLG4sbixvLGksYSksdGhpc30sZWxsaXBzZTpmdW5jdGlvbih0LGUsbixvLGksYSxyLHMpe3JldHVybiB0aGlzLmFic2VsbGlwc2UodCt0aGlzLmN1cnJlbnRQb2ludC54LGUrdGhpcy5jdXJyZW50UG9pbnQueSxuLG8saSxhLHIscyksdGhpc30sYWJzZWxsaXBzZTpmdW5jdGlvbih0LGUsbixvLGksYSxyLHMpe2NvbnN0IGw9bmV3IHJtdCh0LGUsbixvLGksYSxyLHMpO2lmKHRoaXMuY3VydmVzLmxlbmd0aD4wKXtjb25zdCB0PWwuZ2V0UG9pbnQoMCk7dC5lcXVhbHModGhpcy5jdXJyZW50UG9pbnQpfHx0aGlzLmxpbmVUbyh0LngsdC55KX10aGlzLmN1cnZlcy5wdXNoKGwpO2NvbnN0IGM9bC5nZXRQb2ludCgxKTtyZXR1cm4gdGhpcy5jdXJyZW50UG9pbnQuY29weShjKSx0aGlzfSxjb3B5OmZ1bmN0aW9uKHQpe3JldHVybiBQbXQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMuY3VycmVudFBvaW50LmNvcHkodC5jdXJyZW50UG9pbnQpLHRoaXN9LHRvSlNPTjpmdW5jdGlvbigpe2NvbnN0IHQ9UG10LnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzKTtyZXR1cm4gdC5jdXJyZW50UG9pbnQ9dGhpcy5jdXJyZW50UG9pbnQudG9BcnJheSgpLHR9LGZyb21KU09OOmZ1bmN0aW9uKHQpe3JldHVybiBQbXQucHJvdG90eXBlLmZyb21KU09OLmNhbGwodGhpcyx0KSx0aGlzLmN1cnJlbnRQb2ludC5mcm9tQXJyYXkodC5jdXJyZW50UG9pbnQpLHRoaXN9fSksa210LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUod210LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOmttdCxnZXRQb2ludHNIb2xlczpmdW5jdGlvbih0KXtjb25zdCBlPVtdO2ZvcihsZXQgbj0wLG89dGhpcy5ob2xlcy5sZW5ndGg7bjxvO24rKyllW25dPXRoaXMuaG9sZXNbbl0uZ2V0UG9pbnRzKHQpO3JldHVybiBlfSxleHRyYWN0UG9pbnRzOmZ1bmN0aW9uKHQpe3JldHVybntzaGFwZTp0aGlzLmdldFBvaW50cyh0KSxob2xlczp0aGlzLmdldFBvaW50c0hvbGVzKHQpfX0sY29weTpmdW5jdGlvbih0KXt3bXQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMuaG9sZXM9W107Zm9yKGxldCBlPTAsbj10LmhvbGVzLmxlbmd0aDtlPG47ZSsrKXRoaXMuaG9sZXMucHVzaCh0LmhvbGVzW2VdLmNsb25lKCkpO3JldHVybiB0aGlzfSx0b0pTT046ZnVuY3Rpb24oKXtjb25zdCB0PXdtdC5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyk7dC51dWlkPXRoaXMudXVpZCx0LmhvbGVzPVtdO2ZvcihsZXQgZT0wLG49dGhpcy5ob2xlcy5sZW5ndGg7ZTxuO2UrKyl0LmhvbGVzLnB1c2godGhpcy5ob2xlc1tlXS50b0pTT04oKSk7cmV0dXJuIHR9LGZyb21KU09OOmZ1bmN0aW9uKHQpe3dtdC5wcm90b3R5cGUuZnJvbUpTT04uY2FsbCh0aGlzLHQpLHRoaXMudXVpZD10LnV1aWQsdGhpcy5ob2xlcz1bXTtmb3IobGV0IGU9MCxuPXQuaG9sZXMubGVuZ3RoO2U8bjtlKyspe2NvbnN0IG49dC5ob2xlc1tlXTt0aGlzLmhvbGVzLnB1c2goKG5ldyB3bXQpLmZyb21KU09OKG4pKX1yZXR1cm4gdGhpc319KSxTbXQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShRYXQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6U210LGlzTGlnaHQ6ITAsY29weTpmdW5jdGlvbih0KXtyZXR1cm4gUWF0LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5pbnRlbnNpdHk9dC5pbnRlbnNpdHksdGhpc30sdG9KU09OOmZ1bmN0aW9uKHQpe2NvbnN0IGU9UWF0LnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzLHQpO3JldHVybiBlLm9iamVjdC5jb2xvcj10aGlzLmNvbG9yLmdldEhleCgpLGUub2JqZWN0LmludGVuc2l0eT10aGlzLmludGVuc2l0eSx2b2lkIDAhPT10aGlzLmdyb3VuZENvbG9yJiYoZS5vYmplY3QuZ3JvdW5kQ29sb3I9dGhpcy5ncm91bmRDb2xvci5nZXRIZXgoKSksdm9pZCAwIT09dGhpcy5kaXN0YW5jZSYmKGUub2JqZWN0LmRpc3RhbmNlPXRoaXMuZGlzdGFuY2UpLHZvaWQgMCE9PXRoaXMuYW5nbGUmJihlLm9iamVjdC5hbmdsZT10aGlzLmFuZ2xlKSx2b2lkIDAhPT10aGlzLmRlY2F5JiYoZS5vYmplY3QuZGVjYXk9dGhpcy5kZWNheSksdm9pZCAwIT09dGhpcy5wZW51bWJyYSYmKGUub2JqZWN0LnBlbnVtYnJhPXRoaXMucGVudW1icmEpLHZvaWQgMCE9PXRoaXMuc2hhZG93JiYoZS5vYmplY3Quc2hhZG93PXRoaXMuc2hhZG93LnRvSlNPTigpKSxlfX0pLERtdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKFNtdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpEbXQsaXNIZW1pc3BoZXJlTGlnaHQ6ITAsY29weTpmdW5jdGlvbih0KXtyZXR1cm4gU210LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLmdyb3VuZENvbG9yLmNvcHkodC5ncm91bmRDb2xvciksdGhpc319KSxPYmplY3QuYXNzaWduKEVtdC5wcm90b3R5cGUse19wcm9qU2NyZWVuTWF0cml4Om5ldyBrYXQsX2xpZ2h0UG9zaXRpb25Xb3JsZDpuZXcgJGl0LF9sb29rVGFyZ2V0Om5ldyAkaXQsZ2V0Vmlld3BvcnRDb3VudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl92aWV3cG9ydENvdW50fSxnZXRGcnVzdHVtOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZydXN0dW19LHVwZGF0ZU1hdHJpY2VzOmZ1bmN0aW9uKHQpe2NvbnN0IGU9dGhpcy5jYW1lcmEsbj10aGlzLm1hdHJpeCxvPXRoaXMuX3Byb2pTY3JlZW5NYXRyaXgsaT10aGlzLl9sb29rVGFyZ2V0LGE9dGhpcy5fbGlnaHRQb3NpdGlvbldvcmxkO2Euc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHQubWF0cml4V29ybGQpLGUucG9zaXRpb24uY29weShhKSxpLnNldEZyb21NYXRyaXhQb3NpdGlvbih0LnRhcmdldC5tYXRyaXhXb3JsZCksZS5sb29rQXQoaSksZS51cGRhdGVNYXRyaXhXb3JsZCgpLG8ubXVsdGlwbHlNYXRyaWNlcyhlLnByb2plY3Rpb25NYXRyaXgsZS5tYXRyaXhXb3JsZEludmVyc2UpLHRoaXMuX2ZydXN0dW0uc2V0RnJvbVByb2plY3Rpb25NYXRyaXgobyksbi5zZXQoLjUsMCwwLC41LDAsLjUsMCwuNSwwLDAsLjUsLjUsMCwwLDAsMSksbi5tdWx0aXBseShlLnByb2plY3Rpb25NYXRyaXgpLG4ubXVsdGlwbHkoZS5tYXRyaXhXb3JsZEludmVyc2UpfSxnZXRWaWV3cG9ydDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmlld3BvcnRzW3RdfSxnZXRGcmFtZUV4dGVudHM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZnJhbWVFeHRlbnRzfSxjb3B5OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNhbWVyYT10LmNhbWVyYS5jbG9uZSgpLHRoaXMuYmlhcz10LmJpYXMsdGhpcy5yYWRpdXM9dC5yYWRpdXMsdGhpcy5tYXBTaXplLmNvcHkodC5tYXBTaXplKSx0aGlzfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX0sdG9KU09OOmZ1bmN0aW9uKCl7Y29uc3QgdD17fTtyZXR1cm4gMCE9PXRoaXMuYmlhcyYmKHQuYmlhcz10aGlzLmJpYXMpLDAhPT10aGlzLm5vcm1hbEJpYXMmJih0Lm5vcm1hbEJpYXM9dGhpcy5ub3JtYWxCaWFzKSwxIT09dGhpcy5yYWRpdXMmJih0LnJhZGl1cz10aGlzLnJhZGl1cyksNTEyPT09dGhpcy5tYXBTaXplLngmJjUxMj09PXRoaXMubWFwU2l6ZS55fHwodC5tYXBTaXplPXRoaXMubWFwU2l6ZS50b0FycmF5KCkpLHQuY2FtZXJhPXRoaXMuY2FtZXJhLnRvSlNPTighMSkub2JqZWN0LGRlbGV0ZSB0LmNhbWVyYS5tYXRyaXgsdH19KSxBbXQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShFbXQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6QW10LGlzU3BvdExpZ2h0U2hhZG93OiEwLHVwZGF0ZU1hdHJpY2VzOmZ1bmN0aW9uKHQpe2NvbnN0IGU9dGhpcy5jYW1lcmEsbj0yKmppdC5SQUQyREVHKnQuYW5nbGUqdGhpcy5mb2N1cyxvPXRoaXMubWFwU2l6ZS53aWR0aC90aGlzLm1hcFNpemUuaGVpZ2h0LGk9dC5kaXN0YW5jZXx8ZS5mYXI7bj09PWUuZm92JiZvPT09ZS5hc3BlY3QmJmk9PT1lLmZhcnx8KGUuZm92PW4sZS5hc3BlY3Q9byxlLmZhcj1pLGUudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpKSxFbXQucHJvdG90eXBlLnVwZGF0ZU1hdHJpY2VzLmNhbGwodGhpcyx0KX19KSxSbXQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShTbXQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6Um10LGlzU3BvdExpZ2h0OiEwLGNvcHk6ZnVuY3Rpb24odCl7cmV0dXJuIFNtdC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy5kaXN0YW5jZT10LmRpc3RhbmNlLHRoaXMuYW5nbGU9dC5hbmdsZSx0aGlzLnBlbnVtYnJhPXQucGVudW1icmEsdGhpcy5kZWNheT10LmRlY2F5LHRoaXMudGFyZ2V0PXQudGFyZ2V0LmNsb25lKCksdGhpcy5zaGFkb3c9dC5zaGFkb3cuY2xvbmUoKSx0aGlzfX0pLFRtdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKEVtdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpUbXQsaXNQb2ludExpZ2h0U2hhZG93OiEwLHVwZGF0ZU1hdHJpY2VzOmZ1bmN0aW9uKHQsZT0wKXtjb25zdCBuPXRoaXMuY2FtZXJhLG89dGhpcy5tYXRyaXgsaT10aGlzLl9saWdodFBvc2l0aW9uV29ybGQsYT10aGlzLl9sb29rVGFyZ2V0LHI9dGhpcy5fcHJvalNjcmVlbk1hdHJpeDtpLnNldEZyb21NYXRyaXhQb3NpdGlvbih0Lm1hdHJpeFdvcmxkKSxuLnBvc2l0aW9uLmNvcHkoaSksYS5jb3B5KG4ucG9zaXRpb24pLGEuYWRkKHRoaXMuX2N1YmVEaXJlY3Rpb25zW2VdKSxuLnVwLmNvcHkodGhpcy5fY3ViZVVwc1tlXSksbi5sb29rQXQoYSksbi51cGRhdGVNYXRyaXhXb3JsZCgpLG8ubWFrZVRyYW5zbGF0aW9uKC1pLngsLWkueSwtaS56KSxyLm11bHRpcGx5TWF0cmljZXMobi5wcm9qZWN0aW9uTWF0cml4LG4ubWF0cml4V29ybGRJbnZlcnNlKSx0aGlzLl9mcnVzdHVtLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KHIpfX0pLE5tdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKFNtdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpObXQsaXNQb2ludExpZ2h0OiEwLGNvcHk6ZnVuY3Rpb24odCl7cmV0dXJuIFNtdC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy5kaXN0YW5jZT10LmRpc3RhbmNlLHRoaXMuZGVjYXk9dC5kZWNheSx0aGlzLnNoYWRvdz10LnNoYWRvdy5jbG9uZSgpLHRoaXN9fSksSW10LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoX3N0LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOkltdCxpc09ydGhvZ3JhcGhpY0NhbWVyYTohMCxjb3B5OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIF9zdC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCxlKSx0aGlzLmxlZnQ9dC5sZWZ0LHRoaXMucmlnaHQ9dC5yaWdodCx0aGlzLnRvcD10LnRvcCx0aGlzLmJvdHRvbT10LmJvdHRvbSx0aGlzLm5lYXI9dC5uZWFyLHRoaXMuZmFyPXQuZmFyLHRoaXMuem9vbT10Lnpvb20sdGhpcy52aWV3PW51bGw9PT10LnZpZXc/bnVsbDpPYmplY3QuYXNzaWduKHt9LHQudmlldyksdGhpc30sc2V0Vmlld09mZnNldDpmdW5jdGlvbih0LGUsbixvLGksYSl7bnVsbD09PXRoaXMudmlldyYmKHRoaXMudmlldz17ZW5hYmxlZDohMCxmdWxsV2lkdGg6MSxmdWxsSGVpZ2h0OjEsb2Zmc2V0WDowLG9mZnNldFk6MCx3aWR0aDoxLGhlaWdodDoxfSksdGhpcy52aWV3LmVuYWJsZWQ9ITAsdGhpcy52aWV3LmZ1bGxXaWR0aD10LHRoaXMudmlldy5mdWxsSGVpZ2h0PWUsdGhpcy52aWV3Lm9mZnNldFg9bix0aGlzLnZpZXcub2Zmc2V0WT1vLHRoaXMudmlldy53aWR0aD1pLHRoaXMudmlldy5oZWlnaHQ9YSx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX0sY2xlYXJWaWV3T2Zmc2V0OmZ1bmN0aW9uKCl7bnVsbCE9PXRoaXMudmlldyYmKHRoaXMudmlldy5lbmFibGVkPSExKSx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX0sdXBkYXRlUHJvamVjdGlvbk1hdHJpeDpmdW5jdGlvbigpe2NvbnN0IHQ9KHRoaXMucmlnaHQtdGhpcy5sZWZ0KS8oMip0aGlzLnpvb20pLGU9KHRoaXMudG9wLXRoaXMuYm90dG9tKS8oMip0aGlzLnpvb20pLG49KHRoaXMucmlnaHQrdGhpcy5sZWZ0KS8yLG89KHRoaXMudG9wK3RoaXMuYm90dG9tKS8yO2xldCBpPW4tdCxhPW4rdCxyPW8rZSxzPW8tZTtpZihudWxsIT09dGhpcy52aWV3JiZ0aGlzLnZpZXcuZW5hYmxlZCl7Y29uc3QgdD0odGhpcy5yaWdodC10aGlzLmxlZnQpL3RoaXMudmlldy5mdWxsV2lkdGgvdGhpcy56b29tLGU9KHRoaXMudG9wLXRoaXMuYm90dG9tKS90aGlzLnZpZXcuZnVsbEhlaWdodC90aGlzLnpvb207aSs9dCp0aGlzLnZpZXcub2Zmc2V0WCxhPWkrdCp0aGlzLnZpZXcud2lkdGgsci09ZSp0aGlzLnZpZXcub2Zmc2V0WSxzPXItZSp0aGlzLnZpZXcuaGVpZ2h0fXRoaXMucHJvamVjdGlvbk1hdHJpeC5tYWtlT3J0aG9ncmFwaGljKGksYSxyLHMsdGhpcy5uZWFyLHRoaXMuZmFyKSx0aGlzLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlLmNvcHkodGhpcy5wcm9qZWN0aW9uTWF0cml4KS5pbnZlcnQoKX0sdG9KU09OOmZ1bmN0aW9uKHQpe2NvbnN0IGU9UWF0LnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzLHQpO3JldHVybiBlLm9iamVjdC56b29tPXRoaXMuem9vbSxlLm9iamVjdC5sZWZ0PXRoaXMubGVmdCxlLm9iamVjdC5yaWdodD10aGlzLnJpZ2h0LGUub2JqZWN0LnRvcD10aGlzLnRvcCxlLm9iamVjdC5ib3R0b209dGhpcy5ib3R0b20sZS5vYmplY3QubmVhcj10aGlzLm5lYXIsZS5vYmplY3QuZmFyPXRoaXMuZmFyLG51bGwhPT10aGlzLnZpZXcmJihlLm9iamVjdC52aWV3PU9iamVjdC5hc3NpZ24oe30sdGhpcy52aWV3KSksZX19KSx6bXQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShFbXQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6em10LGlzRGlyZWN0aW9uYWxMaWdodFNoYWRvdzohMCx1cGRhdGVNYXRyaWNlczpmdW5jdGlvbih0KXtFbXQucHJvdG90eXBlLnVwZGF0ZU1hdHJpY2VzLmNhbGwodGhpcyx0KX19KSxIbXQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShTbXQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6SG10LGlzRGlyZWN0aW9uYWxMaWdodDohMCxjb3B5OmZ1bmN0aW9uKHQpe3JldHVybiBTbXQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMudGFyZ2V0PXQudGFyZ2V0LmNsb25lKCksdGhpcy5zaGFkb3c9dC5zaGFkb3cuY2xvbmUoKSx0aGlzfX0pLEZtdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKFNtdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpGbXQsaXNBbWJpZW50TGlnaHQ6ITB9KSxMbXQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShTbXQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6TG10LGlzUmVjdEFyZWFMaWdodDohMCxjb3B5OmZ1bmN0aW9uKHQpe3JldHVybiBTbXQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMud2lkdGg9dC53aWR0aCx0aGlzLmhlaWdodD10LmhlaWdodCx0aGlzfSx0b0pTT046ZnVuY3Rpb24odCl7Y29uc3QgZT1TbXQucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMsdCk7cmV0dXJuIGUub2JqZWN0LndpZHRoPXRoaXMud2lkdGgsZS5vYmplY3QuaGVpZ2h0PXRoaXMuaGVpZ2h0LGV9fSk7Y2xhc3MgQm10e2NvbnN0cnVjdG9yKCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlzU3BoZXJpY2FsSGFybW9uaWNzMyIse3ZhbHVlOiEwfSksdGhpcy5jb2VmZmljaWVudHM9W107Zm9yKGxldCB0PTA7dDw5O3QrKyl0aGlzLmNvZWZmaWNpZW50cy5wdXNoKG5ldyAkaXQpfXNldCh0KXtmb3IobGV0IGU9MDtlPDk7ZSsrKXRoaXMuY29lZmZpY2llbnRzW2VdLmNvcHkodFtlXSk7cmV0dXJuIHRoaXN9emVybygpe2ZvcihsZXQgdD0wO3Q8OTt0KyspdGhpcy5jb2VmZmljaWVudHNbdF0uc2V0KDAsMCwwKTtyZXR1cm4gdGhpc31nZXRBdCh0LGUpe2NvbnN0IG49dC54LG89dC55LGk9dC56LGE9dGhpcy5jb2VmZmljaWVudHM7cmV0dXJuIGUuY29weShhWzBdKS5tdWx0aXBseVNjYWxhciguMjgyMDk1KSxlLmFkZFNjYWxlZFZlY3RvcihhWzFdLC40ODg2MDMqbyksZS5hZGRTY2FsZWRWZWN0b3IoYVsyXSwuNDg4NjAzKmkpLGUuYWRkU2NhbGVkVmVjdG9yKGFbM10sLjQ4ODYwMypuKSxlLmFkZFNjYWxlZFZlY3RvcihhWzRdLG4qbyoxLjA5MjU0OCksZS5hZGRTY2FsZWRWZWN0b3IoYVs1XSxvKmkqMS4wOTI1NDgpLGUuYWRkU2NhbGVkVmVjdG9yKGFbNl0sLjMxNTM5MiooMyppKmktMSkpLGUuYWRkU2NhbGVkVmVjdG9yKGFbN10sbippKjEuMDkyNTQ4KSxlLmFkZFNjYWxlZFZlY3RvcihhWzhdLC41NDYyNzQqKG4qbi1vKm8pKSxlfWdldElycmFkaWFuY2VBdCh0LGUpe2NvbnN0IG49dC54LG89dC55LGk9dC56LGE9dGhpcy5jb2VmZmljaWVudHM7cmV0dXJuIGUuY29weShhWzBdKS5tdWx0aXBseVNjYWxhciguODg2MjI3KSxlLmFkZFNjYWxlZFZlY3RvcihhWzFdLDEuMDIzMzI4Km8pLGUuYWRkU2NhbGVkVmVjdG9yKGFbMl0sMS4wMjMzMjgqaSksZS5hZGRTY2FsZWRWZWN0b3IoYVszXSwxLjAyMzMyOCpuKSxlLmFkZFNjYWxlZFZlY3RvcihhWzRdLC44NTgwODYqbipvKSxlLmFkZFNjYWxlZFZlY3RvcihhWzVdLC44NTgwODYqbyppKSxlLmFkZFNjYWxlZFZlY3RvcihhWzZdLC43NDMxMjUqaSppLS4yNDc3MDgpLGUuYWRkU2NhbGVkVmVjdG9yKGFbN10sLjg1ODA4NipuKmkpLGUuYWRkU2NhbGVkVmVjdG9yKGFbOF0sLjQyOTA0MyoobipuLW8qbykpLGV9YWRkKHQpe2ZvcihsZXQgZT0wO2U8OTtlKyspdGhpcy5jb2VmZmljaWVudHNbZV0uYWRkKHQuY29lZmZpY2llbnRzW2VdKTtyZXR1cm4gdGhpc31hZGRTY2FsZWRTSCh0LGUpe2ZvcihsZXQgbj0wO248OTtuKyspdGhpcy5jb2VmZmljaWVudHNbbl0uYWRkU2NhbGVkVmVjdG9yKHQuY29lZmZpY2llbnRzW25dLGUpO3JldHVybiB0aGlzfXNjYWxlKHQpe2ZvcihsZXQgZT0wO2U8OTtlKyspdGhpcy5jb2VmZmljaWVudHNbZV0ubXVsdGlwbHlTY2FsYXIodCk7cmV0dXJuIHRoaXN9bGVycCh0LGUpe2ZvcihsZXQgbj0wO248OTtuKyspdGhpcy5jb2VmZmljaWVudHNbbl0ubGVycCh0LmNvZWZmaWNpZW50c1tuXSxlKTtyZXR1cm4gdGhpc31lcXVhbHModCl7Zm9yKGxldCBlPTA7ZTw5O2UrKylpZighdGhpcy5jb2VmZmljaWVudHNbZV0uZXF1YWxzKHQuY29lZmZpY2llbnRzW2VdKSlyZXR1cm4hMTtyZXR1cm4hMH1jb3B5KHQpe3JldHVybiB0aGlzLnNldCh0LmNvZWZmaWNpZW50cyl9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9ZnJvbUFycmF5KHQsZT0wKXtjb25zdCBuPXRoaXMuY29lZmZpY2llbnRzO2ZvcihsZXQgbz0wO288OTtvKyspbltvXS5mcm9tQXJyYXkodCxlKzMqbyk7cmV0dXJuIHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7Y29uc3Qgbj10aGlzLmNvZWZmaWNpZW50cztmb3IobGV0IG89MDtvPDk7bysrKW5bb10udG9BcnJheSh0LGUrMypvKTtyZXR1cm4gdH1zdGF0aWMgZ2V0QmFzaXNBdCh0LGUpe2NvbnN0IG49dC54LG89dC55LGk9dC56O2VbMF09LjI4MjA5NSxlWzFdPS40ODg2MDMqbyxlWzJdPS40ODg2MDMqaSxlWzNdPS40ODg2MDMqbixlWzRdPTEuMDkyNTQ4Km4qbyxlWzVdPTEuMDkyNTQ4Km8qaSxlWzZdPS4zMTUzOTIqKDMqaSppLTEpLGVbN109MS4wOTI1NDgqbippLGVbOF09LjU0NjI3NCoobipuLW8qbyl9fWZ1bmN0aW9uIFZtdCh0LGUpe1NtdC5jYWxsKHRoaXMsdm9pZCAwLGUpLHRoaXMudHlwZT0iTGlnaHRQcm9iZSIsdGhpcy5zaD12b2lkIDAhPT10P3Q6bmV3IEJtdH1mdW5jdGlvbiBqbXQodCl7S3B0LmNhbGwodGhpcyx0KSx0aGlzLnRleHR1cmVzPXt9fWZ1bmN0aW9uIFVtdCgpe1pydC5jYWxsKHRoaXMpLHRoaXMudHlwZT0iSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkiLHRoaXMuaW5zdGFuY2VDb3VudD0xLzB9ZnVuY3Rpb24gV210KHQsZSxuLG8peyJudW1iZXIiPT10eXBlb2YgbiYmKG89bixuPSExLGNvbnNvbGUuZXJyb3IoIlRIUkVFLkluc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZTogVGhlIGNvbnN0cnVjdG9yIG5vdyBleHBlY3RzIG5vcm1hbGl6ZWQgYXMgdGhlIHRoaXJkIGFyZ3VtZW50LiIpKSxrcnQuY2FsbCh0aGlzLHQsZSxuKSx0aGlzLm1lc2hQZXJBdHRyaWJ1dGU9b3x8MX1mdW5jdGlvbiBHbXQodCl7S3B0LmNhbGwodGhpcyx0KX1mdW5jdGlvbiBZbXQodCl7InVuZGVmaW5lZCI9PXR5cGVvZiBjcmVhdGVJbWFnZUJpdG1hcCYmY29uc29sZS53YXJuKCJUSFJFRS5JbWFnZUJpdG1hcExvYWRlcjogY3JlYXRlSW1hZ2VCaXRtYXAoKSBub3Qgc3VwcG9ydGVkLiIpLCJ1bmRlZmluZWQiPT10eXBlb2YgZmV0Y2gmJmNvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VCaXRtYXBMb2FkZXI6IGZldGNoKCkgbm90IHN1cHBvcnRlZC4iKSxLcHQuY2FsbCh0aGlzLHQpLHRoaXMub3B0aW9ucz17cHJlbXVsdGlwbHlBbHBoYToibm9uZSJ9fWZ1bmN0aW9uIHFtdCgpe3RoaXMudHlwZT0iU2hhcGVQYXRoIix0aGlzLmNvbG9yPW5ldyBDcnQsdGhpcy5zdWJQYXRocz1bXSx0aGlzLmN1cnJlbnRQYXRoPW51bGx9Vm10LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoU210LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOlZtdCxpc0xpZ2h0UHJvYmU6ITAsY29weTpmdW5jdGlvbih0KXtyZXR1cm4gU210LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLnNoLmNvcHkodC5zaCksdGhpc30sZnJvbUpTT046ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5PXQuaW50ZW5zaXR5LHRoaXMuc2guZnJvbUFycmF5KHQuc2gpLHRoaXN9LHRvSlNPTjpmdW5jdGlvbih0KXtjb25zdCBlPVNtdC5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyx0KTtyZXR1cm4gZS5vYmplY3Quc2g9dGhpcy5zaC50b0FycmF5KCksZX19KSxqbXQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShLcHQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6am10LGxvYWQ6ZnVuY3Rpb24odCxlLG4sbyl7Y29uc3QgaT10aGlzLGE9bmV3IFFwdChpLm1hbmFnZXIpO2Euc2V0UGF0aChpLnBhdGgpLGEuc2V0UmVxdWVzdEhlYWRlcihpLnJlcXVlc3RIZWFkZXIpLGEuc2V0V2l0aENyZWRlbnRpYWxzKGkud2l0aENyZWRlbnRpYWxzKSxhLmxvYWQodCwoZnVuY3Rpb24obil7dHJ5e2UoaS5wYXJzZShKU09OLnBhcnNlKG4pKSl9Y2F0Y2goZSl7bz9vKGUpOmNvbnNvbGUuZXJyb3IoZSksaS5tYW5hZ2VyLml0ZW1FcnJvcih0KX19KSxuLG8pfSxwYXJzZTpmdW5jdGlvbih0KXtjb25zdCBlPXRoaXMudGV4dHVyZXM7ZnVuY3Rpb24gbih0KXtyZXR1cm4gdm9pZCAwPT09ZVt0XSYmY29uc29sZS53YXJuKCJUSFJFRS5NYXRlcmlhbExvYWRlcjogVW5kZWZpbmVkIHRleHR1cmUiLHQpLGVbdF19Y29uc3Qgbz1uZXcgQXB0W3QudHlwZV07aWYodm9pZCAwIT09dC51dWlkJiYoby51dWlkPXQudXVpZCksdm9pZCAwIT09dC5uYW1lJiYoby5uYW1lPXQubmFtZSksdm9pZCAwIT09dC5jb2xvciYmdm9pZCAwIT09by5jb2xvciYmby5jb2xvci5zZXRIZXgodC5jb2xvciksdm9pZCAwIT09dC5yb3VnaG5lc3MmJihvLnJvdWdobmVzcz10LnJvdWdobmVzcyksdm9pZCAwIT09dC5tZXRhbG5lc3MmJihvLm1ldGFsbmVzcz10Lm1ldGFsbmVzcyksdm9pZCAwIT09dC5zaGVlbiYmKG8uc2hlZW49KG5ldyBDcnQpLnNldEhleCh0LnNoZWVuKSksdm9pZCAwIT09dC5lbWlzc2l2ZSYmdm9pZCAwIT09by5lbWlzc2l2ZSYmby5lbWlzc2l2ZS5zZXRIZXgodC5lbWlzc2l2ZSksdm9pZCAwIT09dC5zcGVjdWxhciYmdm9pZCAwIT09by5zcGVjdWxhciYmby5zcGVjdWxhci5zZXRIZXgodC5zcGVjdWxhciksdm9pZCAwIT09dC5zaGluaW5lc3MmJihvLnNoaW5pbmVzcz10LnNoaW5pbmVzcyksdm9pZCAwIT09dC5jbGVhcmNvYXQmJihvLmNsZWFyY29hdD10LmNsZWFyY29hdCksdm9pZCAwIT09dC5jbGVhcmNvYXRSb3VnaG5lc3MmJihvLmNsZWFyY29hdFJvdWdobmVzcz10LmNsZWFyY29hdFJvdWdobmVzcyksdm9pZCAwIT09dC5mb2cmJihvLmZvZz10LmZvZyksdm9pZCAwIT09dC5mbGF0U2hhZGluZyYmKG8uZmxhdFNoYWRpbmc9dC5mbGF0U2hhZGluZyksdm9pZCAwIT09dC5ibGVuZGluZyYmKG8uYmxlbmRpbmc9dC5ibGVuZGluZyksdm9pZCAwIT09dC5jb21iaW5lJiYoby5jb21iaW5lPXQuY29tYmluZSksdm9pZCAwIT09dC5zaWRlJiYoby5zaWRlPXQuc2lkZSksdm9pZCAwIT09dC5vcGFjaXR5JiYoby5vcGFjaXR5PXQub3BhY2l0eSksdm9pZCAwIT09dC50cmFuc3BhcmVudCYmKG8udHJhbnNwYXJlbnQ9dC50cmFuc3BhcmVudCksdm9pZCAwIT09dC5hbHBoYVRlc3QmJihvLmFscGhhVGVzdD10LmFscGhhVGVzdCksdm9pZCAwIT09dC5kZXB0aFRlc3QmJihvLmRlcHRoVGVzdD10LmRlcHRoVGVzdCksdm9pZCAwIT09dC5kZXB0aFdyaXRlJiYoby5kZXB0aFdyaXRlPXQuZGVwdGhXcml0ZSksdm9pZCAwIT09dC5jb2xvcldyaXRlJiYoby5jb2xvcldyaXRlPXQuY29sb3JXcml0ZSksdm9pZCAwIT09dC5zdGVuY2lsV3JpdGUmJihvLnN0ZW5jaWxXcml0ZT10LnN0ZW5jaWxXcml0ZSksdm9pZCAwIT09dC5zdGVuY2lsV3JpdGVNYXNrJiYoby5zdGVuY2lsV3JpdGVNYXNrPXQuc3RlbmNpbFdyaXRlTWFzayksdm9pZCAwIT09dC5zdGVuY2lsRnVuYyYmKG8uc3RlbmNpbEZ1bmM9dC5zdGVuY2lsRnVuYyksdm9pZCAwIT09dC5zdGVuY2lsUmVmJiYoby5zdGVuY2lsUmVmPXQuc3RlbmNpbFJlZiksdm9pZCAwIT09dC5zdGVuY2lsRnVuY01hc2smJihvLnN0ZW5jaWxGdW5jTWFzaz10LnN0ZW5jaWxGdW5jTWFzayksdm9pZCAwIT09dC5zdGVuY2lsRmFpbCYmKG8uc3RlbmNpbEZhaWw9dC5zdGVuY2lsRmFpbCksdm9pZCAwIT09dC5zdGVuY2lsWkZhaWwmJihvLnN0ZW5jaWxaRmFpbD10LnN0ZW5jaWxaRmFpbCksdm9pZCAwIT09dC5zdGVuY2lsWlBhc3MmJihvLnN0ZW5jaWxaUGFzcz10LnN0ZW5jaWxaUGFzcyksdm9pZCAwIT09dC53aXJlZnJhbWUmJihvLndpcmVmcmFtZT10LndpcmVmcmFtZSksdm9pZCAwIT09dC53aXJlZnJhbWVMaW5ld2lkdGgmJihvLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCksdm9pZCAwIT09dC53aXJlZnJhbWVMaW5lY2FwJiYoby53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCksdm9pZCAwIT09dC53aXJlZnJhbWVMaW5lam9pbiYmKG8ud2lyZWZyYW1lTGluZWpvaW49dC53aXJlZnJhbWVMaW5lam9pbiksdm9pZCAwIT09dC5yb3RhdGlvbiYmKG8ucm90YXRpb249dC5yb3RhdGlvbiksMSE9PXQubGluZXdpZHRoJiYoby5saW5ld2lkdGg9dC5saW5ld2lkdGgpLHZvaWQgMCE9PXQuZGFzaFNpemUmJihvLmRhc2hTaXplPXQuZGFzaFNpemUpLHZvaWQgMCE9PXQuZ2FwU2l6ZSYmKG8uZ2FwU2l6ZT10LmdhcFNpemUpLHZvaWQgMCE9PXQuc2NhbGUmJihvLnNjYWxlPXQuc2NhbGUpLHZvaWQgMCE9PXQucG9seWdvbk9mZnNldCYmKG8ucG9seWdvbk9mZnNldD10LnBvbHlnb25PZmZzZXQpLHZvaWQgMCE9PXQucG9seWdvbk9mZnNldEZhY3RvciYmKG8ucG9seWdvbk9mZnNldEZhY3Rvcj10LnBvbHlnb25PZmZzZXRGYWN0b3IpLHZvaWQgMCE9PXQucG9seWdvbk9mZnNldFVuaXRzJiYoby5wb2x5Z29uT2Zmc2V0VW5pdHM9dC5wb2x5Z29uT2Zmc2V0VW5pdHMpLHZvaWQgMCE9PXQuc2tpbm5pbmcmJihvLnNraW5uaW5nPXQuc2tpbm5pbmcpLHZvaWQgMCE9PXQubW9ycGhUYXJnZXRzJiYoby5tb3JwaFRhcmdldHM9dC5tb3JwaFRhcmdldHMpLHZvaWQgMCE9PXQubW9ycGhOb3JtYWxzJiYoby5tb3JwaE5vcm1hbHM9dC5tb3JwaE5vcm1hbHMpLHZvaWQgMCE9PXQuZGl0aGVyaW5nJiYoby5kaXRoZXJpbmc9dC5kaXRoZXJpbmcpLHZvaWQgMCE9PXQudmVydGV4VGFuZ2VudHMmJihvLnZlcnRleFRhbmdlbnRzPXQudmVydGV4VGFuZ2VudHMpLHZvaWQgMCE9PXQudmlzaWJsZSYmKG8udmlzaWJsZT10LnZpc2libGUpLHZvaWQgMCE9PXQudG9uZU1hcHBlZCYmKG8udG9uZU1hcHBlZD10LnRvbmVNYXBwZWQpLHZvaWQgMCE9PXQudXNlckRhdGEmJihvLnVzZXJEYXRhPXQudXNlckRhdGEpLHZvaWQgMCE9PXQudmVydGV4Q29sb3JzJiYoby52ZXJ0ZXhDb2xvcnM9Im51bWJlciI9PXR5cGVvZiB0LnZlcnRleENvbG9ycz90LnZlcnRleENvbG9ycz4wOnQudmVydGV4Q29sb3JzKSx2b2lkIDAhPT10LnVuaWZvcm1zKWZvcihjb25zdCBlIGluIHQudW5pZm9ybXMpe2NvbnN0IGk9dC51bmlmb3Jtc1tlXTtzd2l0Y2goby51bmlmb3Jtc1tlXT17fSxpLnR5cGUpe2Nhc2UidCI6by51bmlmb3Jtc1tlXS52YWx1ZT1uKGkudmFsdWUpO2JyZWFrO2Nhc2UiYyI6by51bmlmb3Jtc1tlXS52YWx1ZT0obmV3IENydCkuc2V0SGV4KGkudmFsdWUpO2JyZWFrO2Nhc2UidjIiOm8udW5pZm9ybXNbZV0udmFsdWU9KG5ldyBVaXQpLmZyb21BcnJheShpLnZhbHVlKTticmVhaztjYXNlInYzIjpvLnVuaWZvcm1zW2VdLnZhbHVlPShuZXcgJGl0KS5mcm9tQXJyYXkoaS52YWx1ZSk7YnJlYWs7Y2FzZSJ2NCI6by51bmlmb3Jtc1tlXS52YWx1ZT0obmV3IEtpdCkuZnJvbUFycmF5KGkudmFsdWUpO2JyZWFrO2Nhc2UibTMiOm8udW5pZm9ybXNbZV0udmFsdWU9KG5ldyBXaXQpLmZyb21BcnJheShpLnZhbHVlKTticmVhaztjYXNlIm00IjpvLnVuaWZvcm1zW2VdLnZhbHVlPShuZXcga2F0KS5mcm9tQXJyYXkoaS52YWx1ZSk7YnJlYWs7ZGVmYXVsdDpvLnVuaWZvcm1zW2VdLnZhbHVlPWkudmFsdWV9fWlmKHZvaWQgMCE9PXQuZGVmaW5lcyYmKG8uZGVmaW5lcz10LmRlZmluZXMpLHZvaWQgMCE9PXQudmVydGV4U2hhZGVyJiYoby52ZXJ0ZXhTaGFkZXI9dC52ZXJ0ZXhTaGFkZXIpLHZvaWQgMCE9PXQuZnJhZ21lbnRTaGFkZXImJihvLmZyYWdtZW50U2hhZGVyPXQuZnJhZ21lbnRTaGFkZXIpLHZvaWQgMCE9PXQuZXh0ZW5zaW9ucylmb3IoY29uc3QgZSBpbiB0LmV4dGVuc2lvbnMpby5leHRlbnNpb25zW2VdPXQuZXh0ZW5zaW9uc1tlXTtpZih2b2lkIDAhPT10LnNoYWRpbmcmJihvLmZsYXRTaGFkaW5nPTE9PT10LnNoYWRpbmcpLHZvaWQgMCE9PXQuc2l6ZSYmKG8uc2l6ZT10LnNpemUpLHZvaWQgMCE9PXQuc2l6ZUF0dGVudWF0aW9uJiYoby5zaXplQXR0ZW51YXRpb249dC5zaXplQXR0ZW51YXRpb24pLHZvaWQgMCE9PXQubWFwJiYoby5tYXA9bih0Lm1hcCkpLHZvaWQgMCE9PXQubWF0Y2FwJiYoby5tYXRjYXA9bih0Lm1hdGNhcCkpLHZvaWQgMCE9PXQuYWxwaGFNYXAmJihvLmFscGhhTWFwPW4odC5hbHBoYU1hcCkpLHZvaWQgMCE9PXQuYnVtcE1hcCYmKG8uYnVtcE1hcD1uKHQuYnVtcE1hcCkpLHZvaWQgMCE9PXQuYnVtcFNjYWxlJiYoby5idW1wU2NhbGU9dC5idW1wU2NhbGUpLHZvaWQgMCE9PXQubm9ybWFsTWFwJiYoby5ub3JtYWxNYXA9bih0Lm5vcm1hbE1hcCkpLHZvaWQgMCE9PXQubm9ybWFsTWFwVHlwZSYmKG8ubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUpLHZvaWQgMCE9PXQubm9ybWFsU2NhbGUpe2xldCBlPXQubm9ybWFsU2NhbGU7ITE9PT1BcnJheS5pc0FycmF5KGUpJiYoZT1bZSxlXSksby5ub3JtYWxTY2FsZT0obmV3IFVpdCkuZnJvbUFycmF5KGUpfXJldHVybiB2b2lkIDAhPT10LmRpc3BsYWNlbWVudE1hcCYmKG8uZGlzcGxhY2VtZW50TWFwPW4odC5kaXNwbGFjZW1lbnRNYXApKSx2b2lkIDAhPT10LmRpc3BsYWNlbWVudFNjYWxlJiYoby5kaXNwbGFjZW1lbnRTY2FsZT10LmRpc3BsYWNlbWVudFNjYWxlKSx2b2lkIDAhPT10LmRpc3BsYWNlbWVudEJpYXMmJihvLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzKSx2b2lkIDAhPT10LnJvdWdobmVzc01hcCYmKG8ucm91Z2huZXNzTWFwPW4odC5yb3VnaG5lc3NNYXApKSx2b2lkIDAhPT10Lm1ldGFsbmVzc01hcCYmKG8ubWV0YWxuZXNzTWFwPW4odC5tZXRhbG5lc3NNYXApKSx2b2lkIDAhPT10LmVtaXNzaXZlTWFwJiYoby5lbWlzc2l2ZU1hcD1uKHQuZW1pc3NpdmVNYXApKSx2b2lkIDAhPT10LmVtaXNzaXZlSW50ZW5zaXR5JiYoby5lbWlzc2l2ZUludGVuc2l0eT10LmVtaXNzaXZlSW50ZW5zaXR5KSx2b2lkIDAhPT10LnNwZWN1bGFyTWFwJiYoby5zcGVjdWxhck1hcD1uKHQuc3BlY3VsYXJNYXApKSx2b2lkIDAhPT10LmVudk1hcCYmKG8uZW52TWFwPW4odC5lbnZNYXApKSx2b2lkIDAhPT10LmVudk1hcEludGVuc2l0eSYmKG8uZW52TWFwSW50ZW5zaXR5PXQuZW52TWFwSW50ZW5zaXR5KSx2b2lkIDAhPT10LnJlZmxlY3Rpdml0eSYmKG8ucmVmbGVjdGl2aXR5PXQucmVmbGVjdGl2aXR5KSx2b2lkIDAhPT10LnJlZnJhY3Rpb25SYXRpbyYmKG8ucmVmcmFjdGlvblJhdGlvPXQucmVmcmFjdGlvblJhdGlvKSx2b2lkIDAhPT10LmxpZ2h0TWFwJiYoby5saWdodE1hcD1uKHQubGlnaHRNYXApKSx2b2lkIDAhPT10LmxpZ2h0TWFwSW50ZW5zaXR5JiYoby5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5KSx2b2lkIDAhPT10LmFvTWFwJiYoby5hb01hcD1uKHQuYW9NYXApKSx2b2lkIDAhPT10LmFvTWFwSW50ZW5zaXR5JiYoby5hb01hcEludGVuc2l0eT10LmFvTWFwSW50ZW5zaXR5KSx2b2lkIDAhPT10LmdyYWRpZW50TWFwJiYoby5ncmFkaWVudE1hcD1uKHQuZ3JhZGllbnRNYXApKSx2b2lkIDAhPT10LmNsZWFyY29hdE1hcCYmKG8uY2xlYXJjb2F0TWFwPW4odC5jbGVhcmNvYXRNYXApKSx2b2lkIDAhPT10LmNsZWFyY29hdFJvdWdobmVzc01hcCYmKG8uY2xlYXJjb2F0Um91Z2huZXNzTWFwPW4odC5jbGVhcmNvYXRSb3VnaG5lc3NNYXApKSx2b2lkIDAhPT10LmNsZWFyY29hdE5vcm1hbE1hcCYmKG8uY2xlYXJjb2F0Tm9ybWFsTWFwPW4odC5jbGVhcmNvYXROb3JtYWxNYXApKSx2b2lkIDAhPT10LmNsZWFyY29hdE5vcm1hbFNjYWxlJiYoby5jbGVhcmNvYXROb3JtYWxTY2FsZT0obmV3IFVpdCkuZnJvbUFycmF5KHQuY2xlYXJjb2F0Tm9ybWFsU2NhbGUpKSx2b2lkIDAhPT10LnRyYW5zbWlzc2lvbiYmKG8udHJhbnNtaXNzaW9uPXQudHJhbnNtaXNzaW9uKSx2b2lkIDAhPT10LnRyYW5zbWlzc2lvbk1hcCYmKG8udHJhbnNtaXNzaW9uTWFwPW4odC50cmFuc21pc3Npb25NYXApKSxvfSxzZXRUZXh0dXJlczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50ZXh0dXJlcz10LHRoaXN9fSksVW10LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoWnJ0LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOlVtdCxpc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5OiEwLGNvcHk6ZnVuY3Rpb24odCl7cmV0dXJuIFpydC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy5pbnN0YW5jZUNvdW50PXQuaW5zdGFuY2VDb3VudCx0aGlzfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX0sdG9KU09OOmZ1bmN0aW9uKCl7Y29uc3QgdD1acnQucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMpO3JldHVybiB0Lmluc3RhbmNlQ291bnQ9dGhpcy5pbnN0YW5jZUNvdW50LHQuaXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeT0hMCx0fX0pLFdtdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKGtydC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpXbXQsaXNJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGU6ITAsY29weTpmdW5jdGlvbih0KXtyZXR1cm4ga3J0LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLm1lc2hQZXJBdHRyaWJ1dGU9dC5tZXNoUGVyQXR0cmlidXRlLHRoaXN9LHRvSlNPTjpmdW5jdGlvbigpe2NvbnN0IHQ9a3J0LnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzKTtyZXR1cm4gdC5tZXNoUGVyQXR0cmlidXRlPXRoaXMubWVzaFBlckF0dHJpYnV0ZSx0LmlzSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlPSEwLHR9fSksR210LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoS3B0LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOkdtdCxsb2FkOmZ1bmN0aW9uKHQsZSxuLG8pe2NvbnN0IGk9dGhpcyxhPW5ldyBRcHQoaS5tYW5hZ2VyKTthLnNldFBhdGgoaS5wYXRoKSxhLnNldFJlcXVlc3RIZWFkZXIoaS5yZXF1ZXN0SGVhZGVyKSxhLnNldFdpdGhDcmVkZW50aWFscyhpLndpdGhDcmVkZW50aWFscyksYS5sb2FkKHQsKGZ1bmN0aW9uKG4pe3RyeXtlKGkucGFyc2UoSlNPTi5wYXJzZShuKSkpfWNhdGNoKGUpe28/byhlKTpjb25zb2xlLmVycm9yKGUpLGkubWFuYWdlci5pdGVtRXJyb3IodCl9fSksbixvKX0scGFyc2U6ZnVuY3Rpb24odCl7Y29uc3QgZT17fSxuPXt9O2Z1bmN0aW9uIG8odCxvKXtpZih2b2lkIDAhPT1lW29dKXJldHVybiBlW29dO2NvbnN0IGk9dC5pbnRlcmxlYXZlZEJ1ZmZlcnNbb10sYT0oZnVuY3Rpb24gcih0LGUpe2lmKHZvaWQgMCE9PW5bZV0pcmV0dXJuIG5bZV07Y29uc3Qgbz1uZXcgVWludDMyQXJyYXkodC5hcnJheUJ1ZmZlcnNbZV0pLmJ1ZmZlcjtyZXR1cm4gbltlXT1vLG99KSh0LGkuYnVmZmVyKSxzPW5ldyBGY3QoQnJ0KGkudHlwZSxhKSxpLnN0cmlkZSk7cmV0dXJuIHMudXVpZD1pLnV1aWQsZVtvXT1zLHN9Y29uc3QgaT10LmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnk/bmV3IFVtdDpuZXcgWnJ0LGE9dC5kYXRhLmluZGV4O2lmKHZvaWQgMCE9PWEpe2NvbnN0IHQ9QnJ0KGEudHlwZSxhLmFycmF5KTtpLnNldEluZGV4KG5ldyBrcnQodCwxKSl9Y29uc3Qgcj10LmRhdGEuYXR0cmlidXRlcztmb3IoY29uc3QgZSBpbiByKXtjb25zdCBuPXJbZV07bGV0IGE7aWYobi5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlKWE9bmV3IEJjdChvKHQuZGF0YSxuLmRhdGEpLG4uaXRlbVNpemUsbi5vZmZzZXQsbi5ub3JtYWxpemVkKTtlbHNle2NvbnN0IHQ9QnJ0KG4udHlwZSxuLmFycmF5KTthPW5ldyhuLmlzSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlP1dtdDprcnQpKHQsbi5pdGVtU2l6ZSxuLm5vcm1hbGl6ZWQpfXZvaWQgMCE9PW4ubmFtZSYmKGEubmFtZT1uLm5hbWUpLGkuc2V0QXR0cmlidXRlKGUsYSl9Y29uc3Qgcz10LmRhdGEubW9ycGhBdHRyaWJ1dGVzO2lmKHMpZm9yKGNvbnN0IGUgaW4gcyl7Y29uc3Qgbj1zW2VdLGE9W107Zm9yKGxldCBlPTAsaT1uLmxlbmd0aDtlPGk7ZSsrKXtjb25zdCBpPW5bZV07bGV0IHI7cj1pLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU/bmV3IEJjdChvKHQuZGF0YSxpLmRhdGEpLGkuaXRlbVNpemUsaS5vZmZzZXQsaS5ub3JtYWxpemVkKTpuZXcga3J0KEJydChpLnR5cGUsaS5hcnJheSksaS5pdGVtU2l6ZSxpLm5vcm1hbGl6ZWQpLHZvaWQgMCE9PWkubmFtZSYmKHIubmFtZT1pLm5hbWUpLGEucHVzaChyKX1pLm1vcnBoQXR0cmlidXRlc1tlXT1hfXQuZGF0YS5tb3JwaFRhcmdldHNSZWxhdGl2ZSYmKGkubW9ycGhUYXJnZXRzUmVsYXRpdmU9ITApO2NvbnN0IGw9dC5kYXRhLmdyb3Vwc3x8dC5kYXRhLmRyYXdjYWxsc3x8dC5kYXRhLm9mZnNldHM7aWYodm9pZCAwIT09bClmb3IobGV0IHQ9MCxlPWwubGVuZ3RoO3QhPT1lOysrdCl7Y29uc3QgZT1sW3RdO2kuYWRkR3JvdXAoZS5zdGFydCxlLmNvdW50LGUubWF0ZXJpYWxJbmRleCl9Y29uc3QgYz10LmRhdGEuYm91bmRpbmdTcGhlcmU7aWYodm9pZCAwIT09Yyl7Y29uc3QgdD1uZXcgJGl0O3ZvaWQgMCE9PWMuY2VudGVyJiZ0LmZyb21BcnJheShjLmNlbnRlciksaS5ib3VuZGluZ1NwaGVyZT1uZXcgeWF0KHQsYy5yYWRpdXMpfXJldHVybiB0Lm5hbWUmJihpLm5hbWU9dC5uYW1lKSx0LnVzZXJEYXRhJiYoaS51c2VyRGF0YT10LnVzZXJEYXRhKSxpfX0pLFltdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKEtwdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpZbXQsaXNJbWFnZUJpdG1hcExvYWRlcjohMCxzZXRPcHRpb25zOmZ1bmN0aW9uIHQoZSl7cmV0dXJuIHRoaXMub3B0aW9ucz1lLHRoaXN9LGxvYWQ6ZnVuY3Rpb24odCxlLG4sbyl7dm9pZCAwPT09dCYmKHQ9IiIpLHZvaWQgMCE9PXRoaXMucGF0aCYmKHQ9dGhpcy5wYXRoK3QpLHQ9dGhpcy5tYW5hZ2VyLnJlc29sdmVVUkwodCk7Y29uc3QgaT10aGlzLGE9cXB0LmdldCh0KTtpZih2b2lkIDAhPT1hKXJldHVybiBpLm1hbmFnZXIuaXRlbVN0YXJ0KHQpLHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ZSYmZShhKSxpLm1hbmFnZXIuaXRlbUVuZCh0KX0pLDApLGE7Y29uc3Qgcj17fTtyLmNyZWRlbnRpYWxzPSJhbm9ueW1vdXMiPT09dGhpcy5jcm9zc09yaWdpbj8ic2FtZS1vcmlnaW4iOiJpbmNsdWRlIixmZXRjaCh0LHIpLnRoZW4oKGZ1bmN0aW9uKHQpe3JldHVybiB0LmJsb2IoKX0pKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gY3JlYXRlSW1hZ2VCaXRtYXAodCxpLm9wdGlvbnMpfSkpLnRoZW4oKGZ1bmN0aW9uKG4pe3FwdC5hZGQodCxuKSxlJiZlKG4pLGkubWFuYWdlci5pdGVtRW5kKHQpfSkpLmNhdGNoKChmdW5jdGlvbihlKXtvJiZvKGUpLGkubWFuYWdlci5pdGVtRXJyb3IodCksaS5tYW5hZ2VyLml0ZW1FbmQodCl9KSksaS5tYW5hZ2VyLml0ZW1TdGFydCh0KX19KSxPYmplY3QuYXNzaWduKHFtdC5wcm90b3R5cGUse21vdmVUbzpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmN1cnJlbnRQYXRoPW5ldyB3bXQsdGhpcy5zdWJQYXRocy5wdXNoKHRoaXMuY3VycmVudFBhdGgpLHRoaXMuY3VycmVudFBhdGgubW92ZVRvKHQsZSksdGhpc30sbGluZVRvOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuY3VycmVudFBhdGgubGluZVRvKHQsZSksdGhpc30scXVhZHJhdGljQ3VydmVUbzpmdW5jdGlvbih0LGUsbixvKXtyZXR1cm4gdGhpcy5jdXJyZW50UGF0aC5xdWFkcmF0aWNDdXJ2ZVRvKHQsZSxuLG8pLHRoaXN9LGJlemllckN1cnZlVG86ZnVuY3Rpb24odCxlLG4sbyxpLGEpe3JldHVybiB0aGlzLmN1cnJlbnRQYXRoLmJlemllckN1cnZlVG8odCxlLG4sbyxpLGEpLHRoaXN9LHNwbGluZVRocnU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY3VycmVudFBhdGguc3BsaW5lVGhydSh0KSx0aGlzfSx0b1NoYXBlczpmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIG4odCl7Y29uc3QgZT1bXTtmb3IobGV0IG49MCxvPXQubGVuZ3RoO248bztuKyspe2NvbnN0IG89dFtuXSxpPW5ldyBrbXQ7aS5jdXJ2ZXM9by5jdXJ2ZXMsZS5wdXNoKGkpfXJldHVybiBlfWZ1bmN0aW9uIG8odCxlKXtjb25zdCBuPWUubGVuZ3RoO2xldCBvPSExO2ZvcihsZXQgaT1uLTEsYT0wO2E8bjtpPWErKyl7bGV0IG49ZVtpXSxyPWVbYV0scz1yLngtbi54LGw9ci55LW4ueTtpZihNYXRoLmFicyhsKT5OdW1iZXIuRVBTSUxPTil7aWYobDwwJiYobj1lW2FdLHM9LXMscj1lW2ldLGw9LWwpLHQueTxuLnl8fHQueT5yLnkpY29udGludWU7aWYodC55PT09bi55KXtpZih0Lng9PT1uLngpcmV0dXJuITB9ZWxzZXtjb25zdCBlPWwqKHQueC1uLngpLXMqKHQueS1uLnkpO2lmKDA9PT1lKXJldHVybiEwO2lmKGU8MCljb250aW51ZTtvPSFvfX1lbHNle2lmKHQueSE9PW4ueSljb250aW51ZTtpZihyLng8PXQueCYmdC54PD1uLnh8fG4ueDw9dC54JiZ0Lng8PXIueClyZXR1cm4hMH19cmV0dXJuIG99Y29uc3QgaT1mcHQuaXNDbG9ja1dpc2UsYT10aGlzLnN1YlBhdGhzO2lmKDA9PT1hLmxlbmd0aClyZXR1cm5bXTtpZighMD09PWUpcmV0dXJuIG4oYSk7bGV0IHIscyxsO2NvbnN0IGM9W107aWYoMT09PWEubGVuZ3RoKXJldHVybiBzPWFbMF0sbD1uZXcga210LGwuY3VydmVzPXMuY3VydmVzLGMucHVzaChsKSxjO2xldCBkPSFpKGFbMF0uZ2V0UG9pbnRzKCkpO2Q9dD8hZDpkO2NvbnN0IHA9W10sbT1bXTtsZXQgdSxmLGc9W10saD0wO21baF09dm9pZCAwLGdbaF09W107Zm9yKGxldCBlPTAsbj1hLmxlbmd0aDtlPG47ZSsrKXM9YVtlXSx1PXMuZ2V0UG9pbnRzKCkscj1pKHUpLHI9dD8hcjpyLHI/KCFkJiZtW2hdJiZoKyssbVtoXT17czpuZXcga210LHA6dX0sbVtoXS5zLmN1cnZlcz1zLmN1cnZlcyxkJiZoKyssZ1toXT1bXSk6Z1toXS5wdXNoKHtoOnMscDp1WzBdfSk7aWYoIW1bMF0pcmV0dXJuIG4oYSk7aWYobS5sZW5ndGg+MSl7bGV0IHQ9ITE7Y29uc3QgZT1bXTtmb3IobGV0IHQ9MCxlPW0ubGVuZ3RoO3Q8ZTt0KyspcFt0XT1bXTtmb3IobGV0IG49MCxpPW0ubGVuZ3RoO248aTtuKyspe2NvbnN0IGk9Z1tuXTtmb3IobGV0IGE9MDthPGkubGVuZ3RoO2ErKyl7Y29uc3Qgcj1pW2FdO2xldCBzPSEwO2ZvcihsZXQgaT0wO2k8bS5sZW5ndGg7aSsrKW8oci5wLG1baV0ucCkmJihuIT09aSYmZS5wdXNoKHtmcm9tczpuLHRvczppLGhvbGU6YX0pLHM/KHM9ITEscFtpXS5wdXNoKHIpKTp0PSEwKTtzJiZwW25dLnB1c2gocil9fWUubGVuZ3RoPjAmJih0fHwoZz1wKSl9Zm9yKGxldCB0PTAsZT1tLmxlbmd0aDt0PGU7dCsrKXtsPW1bdF0ucyxjLnB1c2gobCksZj1nW3RdO2ZvcihsZXQgdD0wLGU9Zi5sZW5ndGg7dDxlO3QrKylsLmhvbGVzLnB1c2goZlt0XS5oKX1yZXR1cm4gY319KTtjbGFzcyBabXR7Y29uc3RydWN0b3IodCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlzRm9udCIse3ZhbHVlOiEwfSksdGhpcy50eXBlPSJGb250Iix0aGlzLmRhdGE9dH1nZW5lcmF0ZVNoYXBlcyh0LGU9MTAwKXtjb25zdCBuPVtdLG89KGZ1bmN0aW9uIGkodCxlLG4pe2NvbnN0IG89QXJyYXkuZnJvbT9BcnJheS5mcm9tKHQpOlN0cmluZyh0KS5zcGxpdCgiIiksaT1lL24ucmVzb2x1dGlvbixhPShuLmJvdW5kaW5nQm94LnlNYXgtbi5ib3VuZGluZ0JveC55TWluK24udW5kZXJsaW5lVGhpY2tuZXNzKSppLHI9W107bGV0IHM9MCxsPTA7Zm9yKGxldCB0PTA7dDxvLmxlbmd0aDt0Kyspe2NvbnN0IGU9b1t0XTtpZigiXG4iPT09ZSlzPTAsbC09YTtlbHNle2NvbnN0IHQ9WG10KGUsaSxzLGwsbik7cys9dC5vZmZzZXRYLHIucHVzaCh0LnBhdGgpfX1yZXR1cm4gcn0pKHQsZSx0aGlzLmRhdGEpO2ZvcihsZXQgdD0wLGU9by5sZW5ndGg7dDxlO3QrKylBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShuLG9bdF0udG9TaGFwZXMoKSk7cmV0dXJuIG59fWZ1bmN0aW9uIFhtdCh0LGUsbixvLGkpe2NvbnN0IGE9aS5nbHlwaHNbdF18fGkuZ2x5cGhzWyI/Il07aWYoIWEpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcignVEhSRUUuRm9udDogY2hhcmFjdGVyICInK3QrJyIgZG9lcyBub3QgZXhpc3RzIGluIGZvbnQgZmFtaWx5ICcraS5mYW1pbHlOYW1lKyIuIik7Y29uc3Qgcj1uZXcgcW10O2xldCBzLGwsYyxkLHAsbSx1LGY7aWYoYS5vKXtjb25zdCB0PWEuX2NhY2hlZE91dGxpbmV8fChhLl9jYWNoZWRPdXRsaW5lPWEuby5zcGxpdCgiICIpKTtmb3IobGV0IGk9MCxhPXQubGVuZ3RoO2k8YTspc3dpdGNoKHRbaSsrXSl7Y2FzZSJtIjpzPXRbaSsrXSplK24sbD10W2krK10qZStvLHIubW92ZVRvKHMsbCk7YnJlYWs7Y2FzZSJsIjpzPXRbaSsrXSplK24sbD10W2krK10qZStvLHIubGluZVRvKHMsbCk7YnJlYWs7Y2FzZSJxIjpjPXRbaSsrXSplK24sZD10W2krK10qZStvLHA9dFtpKytdKmUrbixtPXRbaSsrXSplK28sci5xdWFkcmF0aWNDdXJ2ZVRvKHAsbSxjLGQpO2JyZWFrO2Nhc2UiYiI6Yz10W2krK10qZStuLGQ9dFtpKytdKmUrbyxwPXRbaSsrXSplK24sbT10W2krK10qZStvLHU9dFtpKytdKmUrbixmPXRbaSsrXSplK28sci5iZXppZXJDdXJ2ZVRvKHAsbSx1LGYsYyxkKX19cmV0dXJue29mZnNldFg6YS5oYSplLHBhdGg6cn19ZnVuY3Rpb24gS210KHQpe0twdC5jYWxsKHRoaXMsdCl9bGV0IEptdDtmdW5jdGlvbiBRbXQodCl7S3B0LmNhbGwodGhpcyx0KX1mdW5jdGlvbiAkbXQodCxlLG4pe1ZtdC5jYWxsKHRoaXMsdm9pZCAwLG4pO2NvbnN0IG89KG5ldyBDcnQpLnNldCh0KSxpPShuZXcgQ3J0KS5zZXQoZSksYT1uZXcgJGl0KG8ucixvLmcsby5iKSxyPW5ldyAkaXQoaS5yLGkuZyxpLmIpLHM9TWF0aC5zcXJ0KE1hdGguUEkpLGw9cypNYXRoLnNxcnQoLjc1KTt0aGlzLnNoLmNvZWZmaWNpZW50c1swXS5jb3B5KGEpLmFkZChyKS5tdWx0aXBseVNjYWxhcihzKSx0aGlzLnNoLmNvZWZmaWNpZW50c1sxXS5jb3B5KGEpLnN1YihyKS5tdWx0aXBseVNjYWxhcihsKX1mdW5jdGlvbiB0dXQodCxlKXtWbXQuY2FsbCh0aGlzLHZvaWQgMCxlKTtjb25zdCBuPShuZXcgQ3J0KS5zZXQodCk7dGhpcy5zaC5jb2VmZmljaWVudHNbMF0uc2V0KG4ucixuLmcsbi5iKS5tdWx0aXBseVNjYWxhcigyKk1hdGguc3FydChNYXRoLlBJKSl9S210LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoS3B0LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOkttdCxsb2FkOmZ1bmN0aW9uKHQsZSxuLG8pe2NvbnN0IGk9dGhpcyxhPW5ldyBRcHQodGhpcy5tYW5hZ2VyKTthLnNldFBhdGgodGhpcy5wYXRoKSxhLnNldFJlcXVlc3RIZWFkZXIodGhpcy5yZXF1ZXN0SGVhZGVyKSxhLnNldFdpdGhDcmVkZW50aWFscyhpLndpdGhDcmVkZW50aWFscyksYS5sb2FkKHQsKGZ1bmN0aW9uKHQpe2xldCBuO3RyeXtuPUpTT04ucGFyc2UodCl9Y2F0Y2goZSl7Y29uc29sZS53YXJuKCJUSFJFRS5Gb250TG9hZGVyOiB0eXBlZmFjZS5qcyBzdXBwb3J0IGlzIGJlaW5nIGRlcHJlY2F0ZWQuIFVzZSB0eXBlZmFjZS5qc29uIGluc3RlYWQuIiksbj1KU09OLnBhcnNlKHQuc3Vic3RyaW5nKDY1LHQubGVuZ3RoLTIpKX1jb25zdCBvPWkucGFyc2Uobik7ZSYmZShvKX0pLG4sbyl9LHBhcnNlOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgWm10KHQpfX0pLFFtdC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKEtwdC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpRbXQsbG9hZDpmdW5jdGlvbih0LGUsbixvKXtjb25zdCBpPXRoaXMsYT1uZXcgUXB0KGkubWFuYWdlcik7YS5zZXRSZXNwb25zZVR5cGUoImFycmF5YnVmZmVyIiksYS5zZXRQYXRoKGkucGF0aCksYS5zZXRSZXF1ZXN0SGVhZGVyKGkucmVxdWVzdEhlYWRlciksYS5zZXRXaXRoQ3JlZGVudGlhbHMoaS53aXRoQ3JlZGVudGlhbHMpLGEubG9hZCh0LChmdW5jdGlvbihuKXt0cnl7Y29uc3QgdD1uLnNsaWNlKDApOyh2b2lkIDA9PT1KbXQmJihKbXQ9bmV3KHdpbmRvdy5BdWRpb0NvbnRleHR8fHdpbmRvdy53ZWJraXRBdWRpb0NvbnRleHQpKSxKbXQpLmRlY29kZUF1ZGlvRGF0YSh0LChmdW5jdGlvbih0KXtlKHQpfSkpfWNhdGNoKGUpe28/byhlKTpjb25zb2xlLmVycm9yKGUpLGkubWFuYWdlci5pdGVtRXJyb3IodCl9fSksbixvKX19KSwkbXQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShWbXQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6JG10LGlzSGVtaXNwaGVyZUxpZ2h0UHJvYmU6ITAsY29weTpmdW5jdGlvbih0KXtyZXR1cm4gVm10LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzfSx0b0pTT046ZnVuY3Rpb24odCl7cmV0dXJuIFZtdC5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyx0KX19KSx0dXQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShWbXQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6dHV0LGlzQW1iaWVudExpZ2h0UHJvYmU6ITAsY29weTpmdW5jdGlvbih0KXtyZXR1cm4gVm10LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzfSx0b0pTT046ZnVuY3Rpb24odCl7cmV0dXJuIFZtdC5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyx0KX19KTtjb25zdCBldXQ9bmV3IGthdCxudXQ9bmV3IGthdDtmdW5jdGlvbiBvdXQodCxlLG4pe2xldCBvLGksYTtzd2l0Y2godGhpcy5iaW5kaW5nPXQsdGhpcy52YWx1ZVNpemU9bixlKXtjYXNlInF1YXRlcm5pb24iOm89dGhpcy5fc2xlcnAsaT10aGlzLl9zbGVycEFkZGl0aXZlLGE9dGhpcy5fc2V0QWRkaXRpdmVJZGVudGl0eVF1YXRlcm5pb24sdGhpcy5idWZmZXI9bmV3IEZsb2F0NjRBcnJheSg2Km4pLHRoaXMuX3dvcmtJbmRleD01O2JyZWFrO2Nhc2Uic3RyaW5nIjpjYXNlImJvb2wiOm89dGhpcy5fc2VsZWN0LGk9dGhpcy5fc2VsZWN0LGE9dGhpcy5fc2V0QWRkaXRpdmVJZGVudGl0eU90aGVyLHRoaXMuYnVmZmVyPW5ldyBBcnJheSg1Km4pO2JyZWFrO2RlZmF1bHQ6bz10aGlzLl9sZXJwLGk9dGhpcy5fbGVycEFkZGl0aXZlLGE9dGhpcy5fc2V0QWRkaXRpdmVJZGVudGl0eU51bWVyaWMsdGhpcy5idWZmZXI9bmV3IEZsb2F0NjRBcnJheSg1Km4pfXRoaXMuX21peEJ1ZmZlclJlZ2lvbj1vLHRoaXMuX21peEJ1ZmZlclJlZ2lvbkFkZGl0aXZlPWksdGhpcy5fc2V0SWRlbnRpdHk9YSx0aGlzLl9vcmlnSW5kZXg9Myx0aGlzLl9hZGRJbmRleD00LHRoaXMuY3VtdWxhdGl2ZVdlaWdodD0wLHRoaXMuY3VtdWxhdGl2ZVdlaWdodEFkZGl0aXZlPTAsdGhpcy51c2VDb3VudD0wLHRoaXMucmVmZXJlbmNlQ291bnQ9MH1PYmplY3QuYXNzaWduKGZ1bmN0aW9uIGl1dCgpe3RoaXMudHlwZT0iU3RlcmVvQ2FtZXJhIix0aGlzLmFzcGVjdD0xLHRoaXMuZXllU2VwPS4wNjQsdGhpcy5jYW1lcmFMPW5ldyBDc3QsdGhpcy5jYW1lcmFMLmxheWVycy5lbmFibGUoMSksdGhpcy5jYW1lcmFMLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5jYW1lcmFSPW5ldyBDc3QsdGhpcy5jYW1lcmFSLmxheWVycy5lbmFibGUoMiksdGhpcy5jYW1lcmFSLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5fY2FjaGU9e2ZvY3VzOm51bGwsZm92Om51bGwsYXNwZWN0Om51bGwsbmVhcjpudWxsLGZhcjpudWxsLHpvb206bnVsbCxleWVTZXA6bnVsbH19LnByb3RvdHlwZSx7dXBkYXRlOmZ1bmN0aW9uKHQpe2NvbnN0IGU9dGhpcy5fY2FjaGU7aWYoZS5mb2N1cyE9PXQuZm9jdXN8fGUuZm92IT09dC5mb3Z8fGUuYXNwZWN0IT09dC5hc3BlY3QqdGhpcy5hc3BlY3R8fGUubmVhciE9PXQubmVhcnx8ZS5mYXIhPT10LmZhcnx8ZS56b29tIT09dC56b29tfHxlLmV5ZVNlcCE9PXRoaXMuZXllU2VwKXtlLmZvY3VzPXQuZm9jdXMsZS5mb3Y9dC5mb3YsZS5hc3BlY3Q9dC5hc3BlY3QqdGhpcy5hc3BlY3QsZS5uZWFyPXQubmVhcixlLmZhcj10LmZhcixlLnpvb209dC56b29tLGUuZXllU2VwPXRoaXMuZXllU2VwO2NvbnN0IG49dC5wcm9qZWN0aW9uTWF0cml4LmNsb25lKCksbz1lLmV5ZVNlcC8yLGk9byplLm5lYXIvZS5mb2N1cyxhPWUubmVhcipNYXRoLnRhbihqaXQuREVHMlJBRCplLmZvdiouNSkvZS56b29tO2xldCByLHM7bnV0LmVsZW1lbnRzWzEyXT0tbyxldXQuZWxlbWVudHNbMTJdPW8scj0tYSplLmFzcGVjdCtpLHM9YSplLmFzcGVjdCtpLG4uZWxlbWVudHNbMF09MiplLm5lYXIvKHMtciksbi5lbGVtZW50c1s4XT0ocytyKS8ocy1yKSx0aGlzLmNhbWVyYUwucHJvamVjdGlvbk1hdHJpeC5jb3B5KG4pLHI9LWEqZS5hc3BlY3QtaSxzPWEqZS5hc3BlY3QtaSxuLmVsZW1lbnRzWzBdPTIqZS5uZWFyLyhzLXIpLG4uZWxlbWVudHNbOF09KHMrcikvKHMtciksdGhpcy5jYW1lcmFSLnByb2plY3Rpb25NYXRyaXguY29weShuKX10aGlzLmNhbWVyYUwubWF0cml4V29ybGQuY29weSh0Lm1hdHJpeFdvcmxkKS5tdWx0aXBseShudXQpLHRoaXMuY2FtZXJhUi5tYXRyaXhXb3JsZC5jb3B5KHQubWF0cml4V29ybGQpLm11bHRpcGx5KGV1dCl9fSksT2JqZWN0LmFzc2lnbihvdXQucHJvdG90eXBlLHthY2N1bXVsYXRlOmZ1bmN0aW9uKHQsZSl7Y29uc3Qgbj10aGlzLmJ1ZmZlcixvPXRoaXMudmFsdWVTaXplLGk9dCpvK287bGV0IGE9dGhpcy5jdW11bGF0aXZlV2VpZ2h0O2lmKDA9PT1hKXtmb3IobGV0IHQ9MDt0IT09bzsrK3QpbltpK3RdPW5bdF07YT1lfWVsc2UgYSs9ZSx0aGlzLl9taXhCdWZmZXJSZWdpb24obixpLDAsZS9hLG8pO3RoaXMuY3VtdWxhdGl2ZVdlaWdodD1hfSxhY2N1bXVsYXRlQWRkaXRpdmU6ZnVuY3Rpb24odCl7Y29uc3QgZT10aGlzLmJ1ZmZlcixuPXRoaXMudmFsdWVTaXplLG89bip0aGlzLl9hZGRJbmRleDswPT09dGhpcy5jdW11bGF0aXZlV2VpZ2h0QWRkaXRpdmUmJnRoaXMuX3NldElkZW50aXR5KCksdGhpcy5fbWl4QnVmZmVyUmVnaW9uQWRkaXRpdmUoZSxvLDAsdCxuKSx0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZSs9dH0sYXBwbHk6ZnVuY3Rpb24odCl7Y29uc3QgZT10aGlzLnZhbHVlU2l6ZSxuPXRoaXMuYnVmZmVyLG89dCplK2UsaT10aGlzLmN1bXVsYXRpdmVXZWlnaHQsYT10aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZSxyPXRoaXMuYmluZGluZzt0aGlzLmN1bXVsYXRpdmVXZWlnaHQ9MCx0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZT0wLGk8MSYmdGhpcy5fbWl4QnVmZmVyUmVnaW9uKG4sbyxlKnRoaXMuX29yaWdJbmRleCwxLWksZSksYT4wJiZ0aGlzLl9taXhCdWZmZXJSZWdpb25BZGRpdGl2ZShuLG8sdGhpcy5fYWRkSW5kZXgqZSwxLGUpO2ZvcihsZXQgdD1lLGk9ZStlO3QhPT1pOysrdClpZihuW3RdIT09blt0K2VdKXtyLnNldFZhbHVlKG4sbyk7YnJlYWt9fSxzYXZlT3JpZ2luYWxTdGF0ZTpmdW5jdGlvbigpe2NvbnN0IHQ9dGhpcy5idWZmZXIsZT10aGlzLnZhbHVlU2l6ZSxuPWUqdGhpcy5fb3JpZ0luZGV4O3RoaXMuYmluZGluZy5nZXRWYWx1ZSh0LG4pO2ZvcihsZXQgbz1lLGk9bjtvIT09aTsrK28pdFtvXT10W24rbyVlXTt0aGlzLl9zZXRJZGVudGl0eSgpLHRoaXMuY3VtdWxhdGl2ZVdlaWdodD0wLHRoaXMuY3VtdWxhdGl2ZVdlaWdodEFkZGl0aXZlPTB9LHJlc3RvcmVPcmlnaW5hbFN0YXRlOmZ1bmN0aW9uKCl7dGhpcy5iaW5kaW5nLnNldFZhbHVlKHRoaXMuYnVmZmVyLDMqdGhpcy52YWx1ZVNpemUpfSxfc2V0QWRkaXRpdmVJZGVudGl0eU51bWVyaWM6ZnVuY3Rpb24oKXtjb25zdCB0PXRoaXMuX2FkZEluZGV4KnRoaXMudmFsdWVTaXplLGU9dCt0aGlzLnZhbHVlU2l6ZTtmb3IobGV0IG49dDtuPGU7bisrKXRoaXMuYnVmZmVyW25dPTB9LF9zZXRBZGRpdGl2ZUlkZW50aXR5UXVhdGVybmlvbjpmdW5jdGlvbigpe3RoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlOdW1lcmljKCksdGhpcy5idWZmZXJbdGhpcy5fYWRkSW5kZXgqdGhpcy52YWx1ZVNpemUrM109MX0sX3NldEFkZGl0aXZlSWRlbnRpdHlPdGhlcjpmdW5jdGlvbigpe2NvbnN0IHQ9dGhpcy5fb3JpZ0luZGV4KnRoaXMudmFsdWVTaXplLGU9dGhpcy5fYWRkSW5kZXgqdGhpcy52YWx1ZVNpemU7Zm9yKGxldCBuPTA7bjx0aGlzLnZhbHVlU2l6ZTtuKyspdGhpcy5idWZmZXJbZStuXT10aGlzLmJ1ZmZlclt0K25dfSxfc2VsZWN0OmZ1bmN0aW9uKHQsZSxuLG8saSl7aWYobz49LjUpZm9yKGxldCBvPTA7byE9PWk7KytvKXRbZStvXT10W24rb119LF9zbGVycDpmdW5jdGlvbih0LGUsbixvKXtRaXQuc2xlcnBGbGF0KHQsZSx0LGUsdCxuLG8pfSxfc2xlcnBBZGRpdGl2ZTpmdW5jdGlvbih0LGUsbixvLGkpe2NvbnN0IGE9dGhpcy5fd29ya0luZGV4Kmk7UWl0Lm11bHRpcGx5UXVhdGVybmlvbnNGbGF0KHQsYSx0LGUsdCxuKSxRaXQuc2xlcnBGbGF0KHQsZSx0LGUsdCxhLG8pfSxfbGVycDpmdW5jdGlvbih0LGUsbixvLGkpe2NvbnN0IGE9MS1vO2ZvcihsZXQgcj0wO3IhPT1pOysrcil7Y29uc3QgaT1lK3I7dFtpXT10W2ldKmErdFtuK3JdKm99fSxfbGVycEFkZGl0aXZlOmZ1bmN0aW9uKHQsZSxuLG8saSl7Zm9yKGxldCBhPTA7YSE9PWk7KythKXtjb25zdCBpPWUrYTt0W2ldPXRbaV0rdFtuK2FdKm99fX0pO2NvbnN0IGF1dD1uZXcgUmVnRXhwKCJbXFxbXFxdXFwuOlxcL10iLCJnIikscnV0PSJbXlxcW1xcXVxcLjpcXC9dIixzdXQ9IlteIisiXFxbXFxdXFwuOlxcLyIucmVwbGFjZSgiXFwuIiwiIikrIl0iLGx1dD0vKCg/OldDK1tcLzpdKSopLy5zb3VyY2UucmVwbGFjZSgiV0MiLHJ1dCksY3V0PS8oV0NPRCspPy8uc291cmNlLnJlcGxhY2UoIldDT0QiLHN1dCksZHV0PS8oPzpcLihXQyspKD86XFsoLispXF0pPyk/Ly5zb3VyY2UucmVwbGFjZSgiV0MiLHJ1dCkscHV0PS9cLihXQyspKD86XFsoLispXF0pPy8uc291cmNlLnJlcGxhY2UoIldDIixydXQpLG11dD1uZXcgUmVnRXhwKCJeIitsdXQrY3V0K2R1dCtwdXQrIiQiKSx1dXQ9WyJtYXRlcmlhbCIsIm1hdGVyaWFscyIsImJvbmVzIl07ZnVuY3Rpb24gZnV0KHQsZSxuKXtjb25zdCBvPW58fGd1dC5wYXJzZVRyYWNrTmFtZShlKTt0aGlzLl90YXJnZXRHcm91cD10LHRoaXMuX2JpbmRpbmdzPXQuc3Vic2NyaWJlXyhlLG8pfWZ1bmN0aW9uIGd1dCh0LGUsbil7dGhpcy5wYXRoPWUsdGhpcy5wYXJzZWRQYXRoPW58fGd1dC5wYXJzZVRyYWNrTmFtZShlKSx0aGlzLm5vZGU9Z3V0LmZpbmROb2RlKHQsdGhpcy5wYXJzZWRQYXRoLm5vZGVOYW1lKXx8dCx0aGlzLnJvb3ROb2RlPXR9T2JqZWN0LmFzc2lnbihmdXQucHJvdG90eXBlLHtnZXRWYWx1ZTpmdW5jdGlvbih0LGUpe3RoaXMuYmluZCgpO2NvbnN0IG49dGhpcy5fYmluZGluZ3NbdGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfXTt2b2lkIDAhPT1uJiZuLmdldFZhbHVlKHQsZSl9LHNldFZhbHVlOmZ1bmN0aW9uKHQsZSl7Y29uc3Qgbj10aGlzLl9iaW5kaW5ncztmb3IobGV0IG89dGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfLGk9bi5sZW5ndGg7byE9PWk7KytvKW5bb10uc2V0VmFsdWUodCxlKX0sYmluZDpmdW5jdGlvbigpe2NvbnN0IHQ9dGhpcy5fYmluZGluZ3M7Zm9yKGxldCBlPXRoaXMuX3RhcmdldEdyb3VwLm5DYWNoZWRPYmplY3RzXyxuPXQubGVuZ3RoO2UhPT1uOysrZSl0W2VdLmJpbmQoKX0sdW5iaW5kOmZ1bmN0aW9uKCl7Y29uc3QgdD10aGlzLl9iaW5kaW5ncztmb3IobGV0IGU9dGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfLG49dC5sZW5ndGg7ZSE9PW47KytlKXRbZV0udW5iaW5kKCl9fSksT2JqZWN0LmFzc2lnbihndXQse0NvbXBvc2l0ZTpmdXQsY3JlYXRlOmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdCYmdC5pc0FuaW1hdGlvbk9iamVjdEdyb3VwP25ldyBndXQuQ29tcG9zaXRlKHQsZSxuKTpuZXcgZ3V0KHQsZSxuKX0sc2FuaXRpemVOb2RlTmFtZTpmdW5jdGlvbih0KXtyZXR1cm4gdC5yZXBsYWNlKC9ccy9nLCJfIikucmVwbGFjZShhdXQsIiIpfSxwYXJzZVRyYWNrTmFtZTpmdW5jdGlvbih0KXtjb25zdCBlPW11dC5leGVjKHQpO2lmKCFlKXRocm93IG5ldyBFcnJvcigiUHJvcGVydHlCaW5kaW5nOiBDYW5ub3QgcGFyc2UgdHJhY2tOYW1lOiAiK3QpO2NvbnN0IG49e25vZGVOYW1lOmVbMl0sb2JqZWN0TmFtZTplWzNdLG9iamVjdEluZGV4OmVbNF0scHJvcGVydHlOYW1lOmVbNV0scHJvcGVydHlJbmRleDplWzZdfSxvPW4ubm9kZU5hbWUmJm4ubm9kZU5hbWUubGFzdEluZGV4T2YoIi4iKTtpZih2b2lkIDAhPT1vJiYtMSE9PW8pe2NvbnN0IHQ9bi5ub2RlTmFtZS5zdWJzdHJpbmcobysxKTstMSE9PXV1dC5pbmRleE9mKHQpJiYobi5ub2RlTmFtZT1uLm5vZGVOYW1lLnN1YnN0cmluZygwLG8pLG4ub2JqZWN0TmFtZT10KX1pZihudWxsPT09bi5wcm9wZXJ0eU5hbWV8fDA9PT1uLnByb3BlcnR5TmFtZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJQcm9wZXJ0eUJpbmRpbmc6IGNhbiBub3QgcGFyc2UgcHJvcGVydHlOYW1lIGZyb20gdHJhY2tOYW1lOiAiK3QpO3JldHVybiBufSxmaW5kTm9kZTpmdW5jdGlvbih0LGUpe2lmKCFlfHwiIj09PWV8fCIuIj09PWV8fC0xPT09ZXx8ZT09PXQubmFtZXx8ZT09PXQudXVpZClyZXR1cm4gdDtpZih0LnNrZWxldG9uKXtjb25zdCBuPXQuc2tlbGV0b24uZ2V0Qm9uZUJ5TmFtZShlKTtpZih2b2lkIDAhPT1uKXJldHVybiBufWlmKHQuY2hpbGRyZW4pe2NvbnN0IG49ZnVuY3Rpb24odCl7Zm9yKGxldCBvPTA7bzx0Lmxlbmd0aDtvKyspe2NvbnN0IGk9dFtvXTtpZihpLm5hbWU9PT1lfHxpLnV1aWQ9PT1lKXJldHVybiBpO2NvbnN0IGE9bihpLmNoaWxkcmVuKTtpZihhKXJldHVybiBhfXJldHVybiBudWxsfSxvPW4odC5jaGlsZHJlbik7aWYobylyZXR1cm4gb31yZXR1cm4gbnVsbH19KSxPYmplY3QuYXNzaWduKGd1dC5wcm90b3R5cGUse19nZXRWYWx1ZV91bmF2YWlsYWJsZTpmdW5jdGlvbigpe30sX3NldFZhbHVlX3VuYXZhaWxhYmxlOmZ1bmN0aW9uKCl7fSxCaW5kaW5nVHlwZTp7RGlyZWN0OjAsRW50aXJlQXJyYXk6MSxBcnJheUVsZW1lbnQ6MixIYXNGcm9tVG9BcnJheTozfSxWZXJzaW9uaW5nOntOb25lOjAsTmVlZHNVcGRhdGU6MSxNYXRyaXhXb3JsZE5lZWRzVXBkYXRlOjJ9LEdldHRlckJ5QmluZGluZ1R5cGU6W2Z1bmN0aW9uIHQoZSxuKXtlW25dPXRoaXMubm9kZVt0aGlzLnByb3BlcnR5TmFtZV19LGZ1bmN0aW9uIHQoZSxuKXtjb25zdCBvPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eTtmb3IobGV0IHQ9MCxpPW8ubGVuZ3RoO3QhPT1pOysrdCllW24rK109b1t0XX0sZnVuY3Rpb24gdChlLG4pe2Vbbl09dGhpcy5yZXNvbHZlZFByb3BlcnR5W3RoaXMucHJvcGVydHlJbmRleF19LGZ1bmN0aW9uIHQoZSxuKXt0aGlzLnJlc29sdmVkUHJvcGVydHkudG9BcnJheShlLG4pfV0sU2V0dGVyQnlCaW5kaW5nVHlwZUFuZFZlcnNpb25pbmc6W1tmdW5jdGlvbiB0KGUsbil7dGhpcy50YXJnZXRPYmplY3RbdGhpcy5wcm9wZXJ0eU5hbWVdPWVbbl19LGZ1bmN0aW9uIHQoZSxuKXt0aGlzLnRhcmdldE9iamVjdFt0aGlzLnByb3BlcnR5TmFtZV09ZVtuXSx0aGlzLnRhcmdldE9iamVjdC5uZWVkc1VwZGF0ZT0hMH0sZnVuY3Rpb24gdChlLG4pe3RoaXMudGFyZ2V0T2JqZWN0W3RoaXMucHJvcGVydHlOYW1lXT1lW25dLHRoaXMudGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9XSxbZnVuY3Rpb24gdChlLG4pe2NvbnN0IG89dGhpcy5yZXNvbHZlZFByb3BlcnR5O2ZvcihsZXQgdD0wLGk9by5sZW5ndGg7dCE9PWk7Kyt0KW9bdF09ZVtuKytdfSxmdW5jdGlvbiB0KGUsbil7Y29uc3Qgbz10aGlzLnJlc29sdmVkUHJvcGVydHk7Zm9yKGxldCB0PTAsaT1vLmxlbmd0aDt0IT09aTsrK3Qpb1t0XT1lW24rK107dGhpcy50YXJnZXRPYmplY3QubmVlZHNVcGRhdGU9ITB9LGZ1bmN0aW9uIHQoZSxuKXtjb25zdCBvPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eTtmb3IobGV0IHQ9MCxpPW8ubGVuZ3RoO3QhPT1pOysrdClvW3RdPWVbbisrXTt0aGlzLnRhcmdldE9iamVjdC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSEwfV0sW2Z1bmN0aW9uIHQoZSxuKXt0aGlzLnJlc29sdmVkUHJvcGVydHlbdGhpcy5wcm9wZXJ0eUluZGV4XT1lW25dfSxmdW5jdGlvbiB0KGUsbil7dGhpcy5yZXNvbHZlZFByb3BlcnR5W3RoaXMucHJvcGVydHlJbmRleF09ZVtuXSx0aGlzLnRhcmdldE9iamVjdC5uZWVkc1VwZGF0ZT0hMH0sZnVuY3Rpb24gdChlLG4pe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eVt0aGlzLnByb3BlcnR5SW5kZXhdPWVbbl0sdGhpcy50YXJnZXRPYmplY3QubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH1dLFtmdW5jdGlvbiB0KGUsbil7dGhpcy5yZXNvbHZlZFByb3BlcnR5LmZyb21BcnJheShlLG4pfSxmdW5jdGlvbiB0KGUsbil7dGhpcy5yZXNvbHZlZFByb3BlcnR5LmZyb21BcnJheShlLG4pLHRoaXMudGFyZ2V0T2JqZWN0Lm5lZWRzVXBkYXRlPSEwfSxmdW5jdGlvbiB0KGUsbil7dGhpcy5yZXNvbHZlZFByb3BlcnR5LmZyb21BcnJheShlLG4pLHRoaXMudGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9XV0sZ2V0VmFsdWU6ZnVuY3Rpb24gdChlLG4pe3RoaXMuYmluZCgpLHRoaXMuZ2V0VmFsdWUoZSxuKX0sc2V0VmFsdWU6ZnVuY3Rpb24gdChlLG4pe3RoaXMuYmluZCgpLHRoaXMuc2V0VmFsdWUoZSxuKX0sYmluZDpmdW5jdGlvbigpe2xldCB0PXRoaXMubm9kZTtjb25zdCBlPXRoaXMucGFyc2VkUGF0aCxuPWUub2JqZWN0TmFtZSxvPWUucHJvcGVydHlOYW1lO2xldCBpPWUucHJvcGVydHlJbmRleDtpZih0fHwodD1ndXQuZmluZE5vZGUodGhpcy5yb290Tm9kZSxlLm5vZGVOYW1lKXx8dGhpcy5yb290Tm9kZSx0aGlzLm5vZGU9dCksdGhpcy5nZXRWYWx1ZT10aGlzLl9nZXRWYWx1ZV91bmF2YWlsYWJsZSx0aGlzLnNldFZhbHVlPXRoaXMuX3NldFZhbHVlX3VuYXZhaWxhYmxlLCF0KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogVHJ5aW5nIHRvIHVwZGF0ZSBub2RlIGZvciB0cmFjazogIit0aGlzLnBhdGgrIiBidXQgaXQgd2Fzbid0IGZvdW5kLiIpO2lmKG4pe2xldCBvPWUub2JqZWN0SW5kZXg7c3dpdGNoKG4pe2Nhc2UibWF0ZXJpYWxzIjppZighdC5tYXRlcmlhbClyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtYXRlcmlhbCBhcyBub2RlIGRvZXMgbm90IGhhdmUgYSBtYXRlcmlhbC4iLHRoaXMpO2lmKCF0Lm1hdGVyaWFsLm1hdGVyaWFscylyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtYXRlcmlhbC5tYXRlcmlhbHMgYXMgbm9kZS5tYXRlcmlhbCBkb2VzIG5vdCBoYXZlIGEgbWF0ZXJpYWxzIGFycmF5LiIsdGhpcyk7dD10Lm1hdGVyaWFsLm1hdGVyaWFsczticmVhaztjYXNlImJvbmVzIjppZighdC5za2VsZXRvbilyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBib25lcyBhcyBub2RlIGRvZXMgbm90IGhhdmUgYSBza2VsZXRvbi4iLHRoaXMpO3Q9dC5za2VsZXRvbi5ib25lcztmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKylpZih0W2VdLm5hbWU9PT1vKXtvPWU7YnJlYWt9YnJlYWs7ZGVmYXVsdDppZih2b2lkIDA9PT10W25dKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG9iamVjdE5hbWUgb2Ygbm9kZSB1bmRlZmluZWQuIix0aGlzKTt0PXRbbl19aWYodm9pZCAwIT09byl7aWYodm9pZCAwPT09dFtvXSlyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IFRyeWluZyB0byBiaW5kIHRvIG9iamVjdEluZGV4IG9mIG9iamVjdE5hbWUsIGJ1dCBpcyB1bmRlZmluZWQuIix0aGlzLHQpO3Q9dFtvXX19Y29uc3QgYT10W29dO2lmKHZvaWQgMD09PWEpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBUcnlpbmcgdG8gdXBkYXRlIHByb3BlcnR5IGZvciB0cmFjazogIitlLm5vZGVOYW1lKyIuIitvKyIgYnV0IGl0IHdhc24ndCBmb3VuZC4iLHQpO2xldCByPXRoaXMuVmVyc2lvbmluZy5Ob25lO3RoaXMudGFyZ2V0T2JqZWN0PXQsdm9pZCAwIT09dC5uZWVkc1VwZGF0ZT9yPXRoaXMuVmVyc2lvbmluZy5OZWVkc1VwZGF0ZTp2b2lkIDAhPT10Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGUmJihyPXRoaXMuVmVyc2lvbmluZy5NYXRyaXhXb3JsZE5lZWRzVXBkYXRlKTtsZXQgcz10aGlzLkJpbmRpbmdUeXBlLkRpcmVjdDtpZih2b2lkIDAhPT1pKXtpZigibW9ycGhUYXJnZXRJbmZsdWVuY2VzIj09PW8pe2lmKCF0Lmdlb21ldHJ5KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG1vcnBoVGFyZ2V0SW5mbHVlbmNlcyBiZWNhdXNlIG5vZGUgZG9lcyBub3QgaGF2ZSBhIGdlb21ldHJ5LiIsdGhpcyk7aWYoIXQuZ2VvbWV0cnkuaXNCdWZmZXJHZW9tZXRyeSlyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtb3JwaFRhcmdldEluZmx1ZW5jZXMgb24gVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIsdGhpcyk7aWYoIXQuZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG1vcnBoVGFyZ2V0SW5mbHVlbmNlcyBiZWNhdXNlIG5vZGUgZG9lcyBub3QgaGF2ZSBhIGdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy4iLHRoaXMpO3ZvaWQgMCE9PXQubW9ycGhUYXJnZXREaWN0aW9uYXJ5W2ldJiYoaT10Lm1vcnBoVGFyZ2V0RGljdGlvbmFyeVtpXSl9cz10aGlzLkJpbmRpbmdUeXBlLkFycmF5RWxlbWVudCx0aGlzLnJlc29sdmVkUHJvcGVydHk9YSx0aGlzLnByb3BlcnR5SW5kZXg9aX1lbHNlIHZvaWQgMCE9PWEuZnJvbUFycmF5JiZ2b2lkIDAhPT1hLnRvQXJyYXk/KHM9dGhpcy5CaW5kaW5nVHlwZS5IYXNGcm9tVG9BcnJheSx0aGlzLnJlc29sdmVkUHJvcGVydHk9YSk6QXJyYXkuaXNBcnJheShhKT8ocz10aGlzLkJpbmRpbmdUeXBlLkVudGlyZUFycmF5LHRoaXMucmVzb2x2ZWRQcm9wZXJ0eT1hKTp0aGlzLnByb3BlcnR5TmFtZT1vO3RoaXMuZ2V0VmFsdWU9dGhpcy5HZXR0ZXJCeUJpbmRpbmdUeXBlW3NdLHRoaXMuc2V0VmFsdWU9dGhpcy5TZXR0ZXJCeUJpbmRpbmdUeXBlQW5kVmVyc2lvbmluZ1tzXVtyXX0sdW5iaW5kOmZ1bmN0aW9uKCl7dGhpcy5ub2RlPW51bGwsdGhpcy5nZXRWYWx1ZT10aGlzLl9nZXRWYWx1ZV91bmJvdW5kLHRoaXMuc2V0VmFsdWU9dGhpcy5fc2V0VmFsdWVfdW5ib3VuZH19KSxPYmplY3QuYXNzaWduKGd1dC5wcm90b3R5cGUse19nZXRWYWx1ZV91bmJvdW5kOmd1dC5wcm90b3R5cGUuZ2V0VmFsdWUsX3NldFZhbHVlX3VuYm91bmQ6Z3V0LnByb3RvdHlwZS5zZXRWYWx1ZX0pLE9iamVjdC5hc3NpZ24oZnVuY3Rpb24gaHV0KCl7dGhpcy51dWlkPWppdC5nZW5lcmF0ZVVVSUQoKSx0aGlzLl9vYmplY3RzPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyksdGhpcy5uQ2FjaGVkT2JqZWN0c189MDtjb25zdCB0PXt9O3RoaXMuX2luZGljZXNCeVVVSUQ9dDtmb3IobGV0IGU9MCxuPWFyZ3VtZW50cy5sZW5ndGg7ZSE9PW47KytlKXRbYXJndW1lbnRzW2VdLnV1aWRdPWU7dGhpcy5fcGF0aHM9W10sdGhpcy5fcGFyc2VkUGF0aHM9W10sdGhpcy5fYmluZGluZ3M9W10sdGhpcy5fYmluZGluZ3NJbmRpY2VzQnlQYXRoPXt9O2NvbnN0IGU9dGhpczt0aGlzLnN0YXRzPXtvYmplY3RzOntnZXQgdG90YWwoKXtyZXR1cm4gZS5fb2JqZWN0cy5sZW5ndGh9LGdldCBpblVzZSgpe3JldHVybiB0aGlzLnRvdGFsLWUubkNhY2hlZE9iamVjdHNffX0sZ2V0IGJpbmRpbmdzUGVyT2JqZWN0KCl7cmV0dXJuIGUuX2JpbmRpbmdzLmxlbmd0aH19fS5wcm90b3R5cGUse2lzQW5pbWF0aW9uT2JqZWN0R3JvdXA6ITAsYWRkOmZ1bmN0aW9uKCl7Y29uc3QgdD10aGlzLl9vYmplY3RzLGU9dGhpcy5faW5kaWNlc0J5VVVJRCxuPXRoaXMuX3BhdGhzLG89dGhpcy5fcGFyc2VkUGF0aHMsaT10aGlzLl9iaW5kaW5ncyxhPWkubGVuZ3RoO2xldCByLHM9dC5sZW5ndGgsbD10aGlzLm5DYWNoZWRPYmplY3RzXztmb3IobGV0IGM9MCxkPWFyZ3VtZW50cy5sZW5ndGg7YyE9PWQ7KytjKXtjb25zdCBkPWFyZ3VtZW50c1tjXSxwPWQudXVpZDtsZXQgbT1lW3BdO2lmKHZvaWQgMD09PW0pe209cysrLGVbcF09bSx0LnB1c2goZCk7Zm9yKGxldCB0PTAsZT1hO3QhPT1lOysrdClpW3RdLnB1c2gobmV3IGd1dChkLG5bdF0sb1t0XSkpfWVsc2UgaWYobTxsKXtyPXRbbV07Y29uc3Qgcz0tLWwsYz10W3NdO2VbYy51dWlkXT1tLHRbbV09YyxlW3BdPXMsdFtzXT1kO2ZvcihsZXQgdD0wLGU9YTt0IT09ZTsrK3Qpe2NvbnN0IGU9aVt0XTtsZXQgYT1lW21dO2VbbV09ZVtzXSx2b2lkIDA9PT1hJiYoYT1uZXcgZ3V0KGQsblt0XSxvW3RdKSksZVtzXT1hfX1lbHNlIHRbbV0hPT1yJiZjb25zb2xlLmVycm9yKCJUSFJFRS5BbmltYXRpb25PYmplY3RHcm91cDogRGlmZmVyZW50IG9iamVjdHMgd2l0aCB0aGUgc2FtZSBVVUlEIGRldGVjdGVkLiBDbGVhbiB0aGUgY2FjaGVzIG9yIHJlY3JlYXRlIHlvdXIgaW5mcmFzdHJ1Y3R1cmUgd2hlbiByZWxvYWRpbmcgc2NlbmVzLiIpfXRoaXMubkNhY2hlZE9iamVjdHNfPWx9LHJlbW92ZTpmdW5jdGlvbigpe2NvbnN0IHQ9dGhpcy5fb2JqZWN0cyxlPXRoaXMuX2luZGljZXNCeVVVSUQsbj10aGlzLl9iaW5kaW5ncyxvPW4ubGVuZ3RoO2xldCBpPXRoaXMubkNhY2hlZE9iamVjdHNfO2ZvcihsZXQgYT0wLHI9YXJndW1lbnRzLmxlbmd0aDthIT09cjsrK2Epe2NvbnN0IHI9YXJndW1lbnRzW2FdLHM9ci51dWlkLGw9ZVtzXTtpZih2b2lkIDAhPT1sJiZsPj1pKXtjb25zdCBhPWkrKyxjPXRbYV07ZVtjLnV1aWRdPWwsdFtsXT1jLGVbc109YSx0W2FdPXI7Zm9yKGxldCB0PTAsZT1vO3QhPT1lOysrdCl7Y29uc3QgZT1uW3RdLG89ZVtsXTtlW2xdPWVbYV0sZVthXT1vfX19dGhpcy5uQ2FjaGVkT2JqZWN0c189aX0sdW5jYWNoZTpmdW5jdGlvbigpe2NvbnN0IHQ9dGhpcy5fb2JqZWN0cyxlPXRoaXMuX2luZGljZXNCeVVVSUQsbj10aGlzLl9iaW5kaW5ncyxvPW4ubGVuZ3RoO2xldCBpPXRoaXMubkNhY2hlZE9iamVjdHNfLGE9dC5sZW5ndGg7Zm9yKGxldCByPTAscz1hcmd1bWVudHMubGVuZ3RoO3IhPT1zOysrcil7Y29uc3Qgcz1hcmd1bWVudHNbcl0udXVpZCxsPWVbc107aWYodm9pZCAwIT09bClpZihkZWxldGUgZVtzXSxsPGkpe2NvbnN0IHI9LS1pLHM9dFtyXSxjPS0tYSxkPXRbY107ZVtzLnV1aWRdPWwsdFtsXT1zLGVbZC51dWlkXT1yLHRbcl09ZCx0LnBvcCgpO2ZvcihsZXQgdD0wLGU9bzt0IT09ZTsrK3Qpe2NvbnN0IGU9blt0XSxvPWVbY107ZVtsXT1lW3JdLGVbcl09byxlLnBvcCgpfX1lbHNle2NvbnN0IGk9LS1hLHI9dFtpXTtpPjAmJihlW3IudXVpZF09bCksdFtsXT1yLHQucG9wKCk7Zm9yKGxldCB0PTAsZT1vO3QhPT1lOysrdCl7Y29uc3QgZT1uW3RdO2VbbF09ZVtpXSxlLnBvcCgpfX19dGhpcy5uQ2FjaGVkT2JqZWN0c189aX0sc3Vic2NyaWJlXzpmdW5jdGlvbih0LGUpe2NvbnN0IG49dGhpcy5fYmluZGluZ3NJbmRpY2VzQnlQYXRoO2xldCBvPW5bdF07Y29uc3QgaT10aGlzLl9iaW5kaW5ncztpZih2b2lkIDAhPT1vKXJldHVybiBpW29dO2NvbnN0IGE9dGhpcy5fcGF0aHMscj10aGlzLl9wYXJzZWRQYXRocyxzPXRoaXMuX29iamVjdHMsbD10aGlzLm5DYWNoZWRPYmplY3RzXyxjPW5ldyBBcnJheShzLmxlbmd0aCk7bz1pLmxlbmd0aCxuW3RdPW8sYS5wdXNoKHQpLHIucHVzaChlKSxpLnB1c2goYyk7Zm9yKGxldCBuPWwsbz1zLmxlbmd0aDtuIT09bzsrK24pY1tuXT1uZXcgZ3V0KHNbbl0sdCxlKTtyZXR1cm4gY30sdW5zdWJzY3JpYmVfOmZ1bmN0aW9uKHQpe2NvbnN0IGU9dGhpcy5fYmluZGluZ3NJbmRpY2VzQnlQYXRoLG49ZVt0XTtpZih2b2lkIDAhPT1uKXtjb25zdCBvPXRoaXMuX3BhdGhzLGk9dGhpcy5fcGFyc2VkUGF0aHMsYT10aGlzLl9iaW5kaW5ncyxyPWEubGVuZ3RoLTEscz1hW3JdO2VbdFtyXV09bixhW25dPXMsYS5wb3AoKSxpW25dPWlbcl0saS5wb3AoKSxvW25dPW9bcl0sby5wb3AoKX19fSk7Y2xhc3MgYnV0e2NvbnN0cnVjdG9yKHQsZSxuPW51bGwsbz1lLmJsZW5kTW9kZSl7dGhpcy5fbWl4ZXI9dCx0aGlzLl9jbGlwPWUsdGhpcy5fbG9jYWxSb290PW4sdGhpcy5ibGVuZE1vZGU9bztjb25zdCBpPWUudHJhY2tzLGE9aS5sZW5ndGgscj1uZXcgQXJyYXkoYSkscz17ZW5kaW5nU3RhcnQ6QWl0LGVuZGluZ0VuZDpBaXR9O2ZvcihsZXQgdD0wO3QhPT1hOysrdCl7Y29uc3QgZT1pW3RdLmNyZWF0ZUludGVycG9sYW50KG51bGwpO3JbdF09ZSxlLnNldHRpbmdzPXN9dGhpcy5faW50ZXJwb2xhbnRTZXR0aW5ncz1zLHRoaXMuX2ludGVycG9sYW50cz1yLHRoaXMuX3Byb3BlcnR5QmluZGluZ3M9bmV3IEFycmF5KGEpLHRoaXMuX2NhY2hlSW5kZXg9bnVsbCx0aGlzLl9ieUNsaXBDYWNoZUluZGV4PW51bGwsdGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ9bnVsbCx0aGlzLl93ZWlnaHRJbnRlcnBvbGFudD1udWxsLHRoaXMubG9vcD0yMjAxLHRoaXMuX2xvb3BDb3VudD0tMSx0aGlzLl9zdGFydFRpbWU9bnVsbCx0aGlzLnRpbWU9MCx0aGlzLnRpbWVTY2FsZT0xLHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZT0xLHRoaXMud2VpZ2h0PTEsdGhpcy5fZWZmZWN0aXZlV2VpZ2h0PTEsdGhpcy5yZXBldGl0aW9ucz0xLzAsdGhpcy5wYXVzZWQ9ITEsdGhpcy5lbmFibGVkPSEwLHRoaXMuY2xhbXBXaGVuRmluaXNoZWQ9ITEsdGhpcy56ZXJvU2xvcGVBdFN0YXJ0PSEwLHRoaXMuemVyb1Nsb3BlQXRFbmQ9ITB9cGxheSgpe3JldHVybiB0aGlzLl9taXhlci5fYWN0aXZhdGVBY3Rpb24odGhpcyksdGhpc31zdG9wKCl7cmV0dXJuIHRoaXMuX21peGVyLl9kZWFjdGl2YXRlQWN0aW9uKHRoaXMpLHRoaXMucmVzZXQoKX1yZXNldCgpe3JldHVybiB0aGlzLnBhdXNlZD0hMSx0aGlzLmVuYWJsZWQ9ITAsdGhpcy50aW1lPTAsdGhpcy5fbG9vcENvdW50PS0xLHRoaXMuX3N0YXJ0VGltZT1udWxsLHRoaXMuc3RvcEZhZGluZygpLnN0b3BXYXJwaW5nKCl9aXNSdW5uaW5nKCl7cmV0dXJuIHRoaXMuZW5hYmxlZCYmIXRoaXMucGF1c2VkJiYwIT09dGhpcy50aW1lU2NhbGUmJm51bGw9PT10aGlzLl9zdGFydFRpbWUmJnRoaXMuX21peGVyLl9pc0FjdGl2ZUFjdGlvbih0aGlzKX1pc1NjaGVkdWxlZCgpe3JldHVybiB0aGlzLl9taXhlci5faXNBY3RpdmVBY3Rpb24odGhpcyl9c3RhcnRBdCh0KXtyZXR1cm4gdGhpcy5fc3RhcnRUaW1lPXQsdGhpc31zZXRMb29wKHQsZSl7cmV0dXJuIHRoaXMubG9vcD10LHRoaXMucmVwZXRpdGlvbnM9ZSx0aGlzfXNldEVmZmVjdGl2ZVdlaWdodCh0KXtyZXR1cm4gdGhpcy53ZWlnaHQ9dCx0aGlzLl9lZmZlY3RpdmVXZWlnaHQ9dGhpcy5lbmFibGVkP3Q6MCx0aGlzLnN0b3BGYWRpbmcoKX1nZXRFZmZlY3RpdmVXZWlnaHQoKXtyZXR1cm4gdGhpcy5fZWZmZWN0aXZlV2VpZ2h0fWZhZGVJbih0KXtyZXR1cm4gdGhpcy5fc2NoZWR1bGVGYWRpbmcodCwwLDEpfWZhZGVPdXQodCl7cmV0dXJuIHRoaXMuX3NjaGVkdWxlRmFkaW5nKHQsMSwwKX1jcm9zc0ZhZGVGcm9tKHQsZSxuKXtpZih0LmZhZGVPdXQoZSksdGhpcy5mYWRlSW4oZSksbil7Y29uc3Qgbj10aGlzLl9jbGlwLmR1cmF0aW9uLG89dC5fY2xpcC5kdXJhdGlvbixpPW4vbzt0LndhcnAoMSxvL24sZSksdGhpcy53YXJwKGksMSxlKX1yZXR1cm4gdGhpc31jcm9zc0ZhZGVUbyh0LGUsbil7cmV0dXJuIHQuY3Jvc3NGYWRlRnJvbSh0aGlzLGUsbil9c3RvcEZhZGluZygpe2NvbnN0IHQ9dGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ7cmV0dXJuIG51bGwhPT10JiYodGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ9bnVsbCx0aGlzLl9taXhlci5fdGFrZUJhY2tDb250cm9sSW50ZXJwb2xhbnQodCkpLHRoaXN9c2V0RWZmZWN0aXZlVGltZVNjYWxlKHQpe3JldHVybiB0aGlzLnRpbWVTY2FsZT10LHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZT10aGlzLnBhdXNlZD8wOnQsdGhpcy5zdG9wV2FycGluZygpfWdldEVmZmVjdGl2ZVRpbWVTY2FsZSgpe3JldHVybiB0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGV9c2V0RHVyYXRpb24odCl7cmV0dXJuIHRoaXMudGltZVNjYWxlPXRoaXMuX2NsaXAuZHVyYXRpb24vdCx0aGlzLnN0b3BXYXJwaW5nKCl9c3luY1dpdGgodCl7cmV0dXJuIHRoaXMudGltZT10LnRpbWUsdGhpcy50aW1lU2NhbGU9dC50aW1lU2NhbGUsdGhpcy5zdG9wV2FycGluZygpfWhhbHQodCl7cmV0dXJuIHRoaXMud2FycCh0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGUsMCx0KX13YXJwKHQsZSxuKXtjb25zdCBvPXRoaXMuX21peGVyLGk9by50aW1lLGE9dGhpcy50aW1lU2NhbGU7bGV0IHI9dGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ7bnVsbD09PXImJihyPW8uX2xlbmRDb250cm9sSW50ZXJwb2xhbnQoKSx0aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudD1yKTtjb25zdCBzPXIucGFyYW1ldGVyUG9zaXRpb25zLGw9ci5zYW1wbGVWYWx1ZXM7cmV0dXJuIHNbMF09aSxzWzFdPWkrbixsWzBdPXQvYSxsWzFdPWUvYSx0aGlzfXN0b3BXYXJwaW5nKCl7Y29uc3QgdD10aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudDtyZXR1cm4gbnVsbCE9PXQmJih0aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudD1udWxsLHRoaXMuX21peGVyLl90YWtlQmFja0NvbnRyb2xJbnRlcnBvbGFudCh0KSksdGhpc31nZXRNaXhlcigpe3JldHVybiB0aGlzLl9taXhlcn1nZXRDbGlwKCl7cmV0dXJuIHRoaXMuX2NsaXB9Z2V0Um9vdCgpe3JldHVybiB0aGlzLl9sb2NhbFJvb3R8fHRoaXMuX21peGVyLl9yb290fV91cGRhdGUodCxlLG4sbyl7aWYoIXRoaXMuZW5hYmxlZClyZXR1cm4gdm9pZCB0aGlzLl91cGRhdGVXZWlnaHQodCk7Y29uc3QgaT10aGlzLl9zdGFydFRpbWU7aWYobnVsbCE9PWkpe2NvbnN0IG89KHQtaSkqbjtpZihvPDB8fDA9PT1uKXJldHVybjt0aGlzLl9zdGFydFRpbWU9bnVsbCxlPW4qb31lKj10aGlzLl91cGRhdGVUaW1lU2NhbGUodCk7Y29uc3QgYT10aGlzLl91cGRhdGVUaW1lKGUpLHI9dGhpcy5fdXBkYXRlV2VpZ2h0KHQpO2lmKHI+MCl7Y29uc3QgdD10aGlzLl9pbnRlcnBvbGFudHMsZT10aGlzLl9wcm9wZXJ0eUJpbmRpbmdzO3N3aXRjaCh0aGlzLmJsZW5kTW9kZSl7Y2FzZSAyNTAxOmZvcihsZXQgbj0wLG89dC5sZW5ndGg7biE9PW87KytuKXRbbl0uZXZhbHVhdGUoYSksZVtuXS5hY2N1bXVsYXRlQWRkaXRpdmUocik7YnJlYWs7Y2FzZSAyNTAwOmRlZmF1bHQ6Zm9yKGxldCBuPTAsaT10Lmxlbmd0aDtuIT09aTsrK24pdFtuXS5ldmFsdWF0ZShhKSxlW25dLmFjY3VtdWxhdGUobyxyKX19fV91cGRhdGVXZWlnaHQodCl7bGV0IGU9MDtpZih0aGlzLmVuYWJsZWQpe2U9dGhpcy53ZWlnaHQ7Y29uc3Qgbj10aGlzLl93ZWlnaHRJbnRlcnBvbGFudDtpZihudWxsIT09bil7Y29uc3Qgbz1uLmV2YWx1YXRlKHQpWzBdO2UqPW8sdD5uLnBhcmFtZXRlclBvc2l0aW9uc1sxXSYmKHRoaXMuc3RvcEZhZGluZygpLDA9PT1vJiYodGhpcy5lbmFibGVkPSExKSl9fXJldHVybiB0aGlzLl9lZmZlY3RpdmVXZWlnaHQ9ZSxlfV91cGRhdGVUaW1lU2NhbGUodCl7bGV0IGU9MDtpZighdGhpcy5wYXVzZWQpe2U9dGhpcy50aW1lU2NhbGU7Y29uc3Qgbj10aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudDtudWxsIT09biYmKGUqPW4uZXZhbHVhdGUodClbMF0sdD5uLnBhcmFtZXRlclBvc2l0aW9uc1sxXSYmKHRoaXMuc3RvcFdhcnBpbmcoKSwwPT09ZT90aGlzLnBhdXNlZD0hMDp0aGlzLnRpbWVTY2FsZT1lKSl9cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZT1lLGV9X3VwZGF0ZVRpbWUodCl7Y29uc3QgZT10aGlzLl9jbGlwLmR1cmF0aW9uLG49dGhpcy5sb29wO2xldCBvPXRoaXMudGltZSt0LGk9dGhpcy5fbG9vcENvdW50O2NvbnN0IGE9MjIwMj09PW47aWYoMD09PXQpcmV0dXJuLTE9PT1pP286YSYmMT09KDEmaSk/ZS1vOm87aWYoMjIwMD09PW4pey0xPT09aSYmKHRoaXMuX2xvb3BDb3VudD0wLHRoaXMuX3NldEVuZGluZ3MoITAsITAsITEpKTt0OntpZihvPj1lKW89ZTtlbHNle2lmKCEobzwwKSl7dGhpcy50aW1lPW87YnJlYWsgdH1vPTB9dGhpcy5jbGFtcFdoZW5GaW5pc2hlZD90aGlzLnBhdXNlZD0hMDp0aGlzLmVuYWJsZWQ9ITEsdGhpcy50aW1lPW8sdGhpcy5fbWl4ZXIuZGlzcGF0Y2hFdmVudCh7dHlwZToiZmluaXNoZWQiLGFjdGlvbjp0aGlzLGRpcmVjdGlvbjp0PDA/LTE6MX0pfX1lbHNle2lmKC0xPT09aSYmKHQ+PTA/KGk9MCx0aGlzLl9zZXRFbmRpbmdzKCEwLDA9PT10aGlzLnJlcGV0aXRpb25zLGEpKTp0aGlzLl9zZXRFbmRpbmdzKDA9PT10aGlzLnJlcGV0aXRpb25zLCEwLGEpKSxvPj1lfHxvPDApe2NvbnN0IG49TWF0aC5mbG9vcihvL2UpO28tPWUqbixpKz1NYXRoLmFicyhuKTtjb25zdCByPXRoaXMucmVwZXRpdGlvbnMtaTtpZihyPD0wKXRoaXMuY2xhbXBXaGVuRmluaXNoZWQ/dGhpcy5wYXVzZWQ9ITA6dGhpcy5lbmFibGVkPSExLG89dD4wP2U6MCx0aGlzLnRpbWU9byx0aGlzLl9taXhlci5kaXNwYXRjaEV2ZW50KHt0eXBlOiJmaW5pc2hlZCIsYWN0aW9uOnRoaXMsZGlyZWN0aW9uOnQ+MD8xOi0xfSk7ZWxzZXtpZigxPT09cil7Y29uc3QgZT10PDA7dGhpcy5fc2V0RW5kaW5ncyhlLCFlLGEpfWVsc2UgdGhpcy5fc2V0RW5kaW5ncyghMSwhMSxhKTt0aGlzLl9sb29wQ291bnQ9aSx0aGlzLnRpbWU9byx0aGlzLl9taXhlci5kaXNwYXRjaEV2ZW50KHt0eXBlOiJsb29wIixhY3Rpb246dGhpcyxsb29wRGVsdGE6bn0pfX1lbHNlIHRoaXMudGltZT1vO2lmKGEmJjE9PSgxJmkpKXJldHVybiBlLW99cmV0dXJuIG99X3NldEVuZGluZ3ModCxlLG4pe2NvbnN0IG89dGhpcy5faW50ZXJwb2xhbnRTZXR0aW5ncztuPyhvLmVuZGluZ1N0YXJ0PVJpdCxvLmVuZGluZ0VuZD1SaXQpOihvLmVuZGluZ1N0YXJ0PXQ/dGhpcy56ZXJvU2xvcGVBdFN0YXJ0P1JpdDpBaXQ6VGl0LG8uZW5kaW5nRW5kPWU/dGhpcy56ZXJvU2xvcGVBdEVuZD9SaXQ6QWl0OlRpdCl9X3NjaGVkdWxlRmFkaW5nKHQsZSxuKXtjb25zdCBvPXRoaXMuX21peGVyLGk9by50aW1lO2xldCBhPXRoaXMuX3dlaWdodEludGVycG9sYW50O251bGw9PT1hJiYoYT1vLl9sZW5kQ29udHJvbEludGVycG9sYW50KCksdGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ9YSk7Y29uc3Qgcj1hLnBhcmFtZXRlclBvc2l0aW9ucyxzPWEuc2FtcGxlVmFsdWVzO3JldHVybiByWzBdPWksc1swXT1lLHJbMV09aSt0LHNbMV09bix0aGlzfX1mdW5jdGlvbiB5dXQodCl7dGhpcy5fcm9vdD10LHRoaXMuX2luaXRNZW1vcnlNYW5hZ2VyKCksdGhpcy5fYWNjdUluZGV4PTAsdGhpcy50aW1lPTAsdGhpcy50aW1lU2NhbGU9MX15dXQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShMaXQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6eXV0LF9iaW5kQWN0aW9uOmZ1bmN0aW9uKHQsZSl7Y29uc3Qgbj10Ll9sb2NhbFJvb3R8fHRoaXMuX3Jvb3Qsbz10Ll9jbGlwLnRyYWNrcyxpPW8ubGVuZ3RoLGE9dC5fcHJvcGVydHlCaW5kaW5ncyxyPXQuX2ludGVycG9sYW50cyxzPW4udXVpZCxsPXRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZTtsZXQgYz1sW3NdO3ZvaWQgMD09PWMmJihjPXt9LGxbc109Yyk7Zm9yKGxldCB0PTA7dCE9PWk7Kyt0KXtjb25zdCBpPW9bdF0sbD1pLm5hbWU7bGV0IGQ9Y1tsXTtpZih2b2lkIDAhPT1kKWFbdF09ZDtlbHNle2lmKGQ9YVt0XSx2b2lkIDAhPT1kKXtudWxsPT09ZC5fY2FjaGVJbmRleCYmKCsrZC5yZWZlcmVuY2VDb3VudCx0aGlzLl9hZGRJbmFjdGl2ZUJpbmRpbmcoZCxzLGwpKTtjb250aW51ZX1kPW5ldyBvdXQoZ3V0LmNyZWF0ZShuLGwsZSYmZS5fcHJvcGVydHlCaW5kaW5nc1t0XS5iaW5kaW5nLnBhcnNlZFBhdGgpLGkuVmFsdWVUeXBlTmFtZSxpLmdldFZhbHVlU2l6ZSgpKSwrK2QucmVmZXJlbmNlQ291bnQsdGhpcy5fYWRkSW5hY3RpdmVCaW5kaW5nKGQscyxsKSxhW3RdPWR9clt0XS5yZXN1bHRCdWZmZXI9ZC5idWZmZXJ9fSxfYWN0aXZhdGVBY3Rpb246ZnVuY3Rpb24odCl7aWYoIXRoaXMuX2lzQWN0aXZlQWN0aW9uKHQpKXtpZihudWxsPT09dC5fY2FjaGVJbmRleCl7Y29uc3QgZT0odC5fbG9jYWxSb290fHx0aGlzLl9yb290KS51dWlkLG49dC5fY2xpcC51dWlkLG89dGhpcy5fYWN0aW9uc0J5Q2xpcFtuXTt0aGlzLl9iaW5kQWN0aW9uKHQsbyYmby5rbm93bkFjdGlvbnNbMF0pLHRoaXMuX2FkZEluYWN0aXZlQWN0aW9uKHQsbixlKX1jb25zdCBlPXQuX3Byb3BlcnR5QmluZGluZ3M7Zm9yKGxldCB0PTAsbj1lLmxlbmd0aDt0IT09bjsrK3Qpe2NvbnN0IG49ZVt0XTswPT1uLnVzZUNvdW50KysmJih0aGlzLl9sZW5kQmluZGluZyhuKSxuLnNhdmVPcmlnaW5hbFN0YXRlKCkpfXRoaXMuX2xlbmRBY3Rpb24odCl9fSxfZGVhY3RpdmF0ZUFjdGlvbjpmdW5jdGlvbih0KXtpZih0aGlzLl9pc0FjdGl2ZUFjdGlvbih0KSl7Y29uc3QgZT10Ll9wcm9wZXJ0eUJpbmRpbmdzO2ZvcihsZXQgdD0wLG49ZS5sZW5ndGg7dCE9PW47Kyt0KXtjb25zdCBuPWVbdF07MD09LS1uLnVzZUNvdW50JiYobi5yZXN0b3JlT3JpZ2luYWxTdGF0ZSgpLHRoaXMuX3Rha2VCYWNrQmluZGluZyhuKSl9dGhpcy5fdGFrZUJhY2tBY3Rpb24odCl9fSxfaW5pdE1lbW9yeU1hbmFnZXI6ZnVuY3Rpb24oKXt0aGlzLl9hY3Rpb25zPVtdLHRoaXMuX25BY3RpdmVBY3Rpb25zPTAsdGhpcy5fYWN0aW9uc0J5Q2xpcD17fSx0aGlzLl9iaW5kaW5ncz1bXSx0aGlzLl9uQWN0aXZlQmluZGluZ3M9MCx0aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWU9e30sdGhpcy5fY29udHJvbEludGVycG9sYW50cz1bXSx0aGlzLl9uQWN0aXZlQ29udHJvbEludGVycG9sYW50cz0wO2NvbnN0IHQ9dGhpczt0aGlzLnN0YXRzPXthY3Rpb25zOntnZXQgdG90YWwoKXtyZXR1cm4gdC5fYWN0aW9ucy5sZW5ndGh9LGdldCBpblVzZSgpe3JldHVybiB0Ll9uQWN0aXZlQWN0aW9uc319LGJpbmRpbmdzOntnZXQgdG90YWwoKXtyZXR1cm4gdC5fYmluZGluZ3MubGVuZ3RofSxnZXQgaW5Vc2UoKXtyZXR1cm4gdC5fbkFjdGl2ZUJpbmRpbmdzfX0sY29udHJvbEludGVycG9sYW50czp7Z2V0IHRvdGFsKCl7cmV0dXJuIHQuX2NvbnRyb2xJbnRlcnBvbGFudHMubGVuZ3RofSxnZXQgaW5Vc2UoKXtyZXR1cm4gdC5fbkFjdGl2ZUNvbnRyb2xJbnRlcnBvbGFudHN9fX19LF9pc0FjdGl2ZUFjdGlvbjpmdW5jdGlvbih0KXtjb25zdCBlPXQuX2NhY2hlSW5kZXg7cmV0dXJuIG51bGwhPT1lJiZlPHRoaXMuX25BY3RpdmVBY3Rpb25zfSxfYWRkSW5hY3RpdmVBY3Rpb246ZnVuY3Rpb24odCxlLG4pe2NvbnN0IG89dGhpcy5fYWN0aW9ucyxpPXRoaXMuX2FjdGlvbnNCeUNsaXA7bGV0IGE9aVtlXTtpZih2b2lkIDA9PT1hKWE9e2tub3duQWN0aW9uczpbdF0sYWN0aW9uQnlSb290Ont9fSx0Ll9ieUNsaXBDYWNoZUluZGV4PTAsaVtlXT1hO2Vsc2V7Y29uc3QgZT1hLmtub3duQWN0aW9uczt0Ll9ieUNsaXBDYWNoZUluZGV4PWUubGVuZ3RoLGUucHVzaCh0KX10Ll9jYWNoZUluZGV4PW8ubGVuZ3RoLG8ucHVzaCh0KSxhLmFjdGlvbkJ5Um9vdFtuXT10fSxfcmVtb3ZlSW5hY3RpdmVBY3Rpb246ZnVuY3Rpb24odCl7Y29uc3QgZT10aGlzLl9hY3Rpb25zLG49ZVtlLmxlbmd0aC0xXSxvPXQuX2NhY2hlSW5kZXg7bi5fY2FjaGVJbmRleD1vLGVbb109bixlLnBvcCgpLHQuX2NhY2hlSW5kZXg9bnVsbDtjb25zdCBpPXQuX2NsaXAudXVpZCxhPXRoaXMuX2FjdGlvbnNCeUNsaXAscj1hW2ldLHM9ci5rbm93bkFjdGlvbnMsbD1zW3MubGVuZ3RoLTFdLGM9dC5fYnlDbGlwQ2FjaGVJbmRleDtsLl9ieUNsaXBDYWNoZUluZGV4PWMsc1tjXT1sLHMucG9wKCksdC5fYnlDbGlwQ2FjaGVJbmRleD1udWxsLGRlbGV0ZSByLmFjdGlvbkJ5Um9vdFsodC5fbG9jYWxSb290fHx0aGlzLl9yb290KS51dWlkXSwwPT09cy5sZW5ndGgmJmRlbGV0ZSBhW2ldLHRoaXMuX3JlbW92ZUluYWN0aXZlQmluZGluZ3NGb3JBY3Rpb24odCl9LF9yZW1vdmVJbmFjdGl2ZUJpbmRpbmdzRm9yQWN0aW9uOmZ1bmN0aW9uKHQpe2NvbnN0IGU9dC5fcHJvcGVydHlCaW5kaW5ncztmb3IobGV0IHQ9MCxuPWUubGVuZ3RoO3QhPT1uOysrdCl7Y29uc3Qgbj1lW3RdOzA9PS0tbi5yZWZlcmVuY2VDb3VudCYmdGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nKG4pfX0sX2xlbmRBY3Rpb246ZnVuY3Rpb24odCl7Y29uc3QgZT10aGlzLl9hY3Rpb25zLG49dC5fY2FjaGVJbmRleCxvPXRoaXMuX25BY3RpdmVBY3Rpb25zKyssaT1lW29dO3QuX2NhY2hlSW5kZXg9byxlW29dPXQsaS5fY2FjaGVJbmRleD1uLGVbbl09aX0sX3Rha2VCYWNrQWN0aW9uOmZ1bmN0aW9uKHQpe2NvbnN0IGU9dGhpcy5fYWN0aW9ucyxuPXQuX2NhY2hlSW5kZXgsbz0tLXRoaXMuX25BY3RpdmVBY3Rpb25zLGk9ZVtvXTt0Ll9jYWNoZUluZGV4PW8sZVtvXT10LGkuX2NhY2hlSW5kZXg9bixlW25dPWl9LF9hZGRJbmFjdGl2ZUJpbmRpbmc6ZnVuY3Rpb24odCxlLG4pe2NvbnN0IG89dGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lLGk9dGhpcy5fYmluZGluZ3M7bGV0IGE9b1tlXTt2b2lkIDA9PT1hJiYoYT17fSxvW2VdPWEpLGFbbl09dCx0Ll9jYWNoZUluZGV4PWkubGVuZ3RoLGkucHVzaCh0KX0sX3JlbW92ZUluYWN0aXZlQmluZGluZzpmdW5jdGlvbih0KXtjb25zdCBlPXRoaXMuX2JpbmRpbmdzLG49dC5iaW5kaW5nLG89bi5yb290Tm9kZS51dWlkLGk9bi5wYXRoLGE9dGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lLHI9YVtvXSxzPWVbZS5sZW5ndGgtMV0sbD10Ll9jYWNoZUluZGV4O3MuX2NhY2hlSW5kZXg9bCxlW2xdPXMsZS5wb3AoKSxkZWxldGUgcltpXSwwPT09T2JqZWN0LmtleXMocikubGVuZ3RoJiZkZWxldGUgYVtvXX0sX2xlbmRCaW5kaW5nOmZ1bmN0aW9uKHQpe2NvbnN0IGU9dGhpcy5fYmluZGluZ3Msbj10Ll9jYWNoZUluZGV4LG89dGhpcy5fbkFjdGl2ZUJpbmRpbmdzKyssaT1lW29dO3QuX2NhY2hlSW5kZXg9byxlW29dPXQsaS5fY2FjaGVJbmRleD1uLGVbbl09aX0sX3Rha2VCYWNrQmluZGluZzpmdW5jdGlvbih0KXtjb25zdCBlPXRoaXMuX2JpbmRpbmdzLG49dC5fY2FjaGVJbmRleCxvPS0tdGhpcy5fbkFjdGl2ZUJpbmRpbmdzLGk9ZVtvXTt0Ll9jYWNoZUluZGV4PW8sZVtvXT10LGkuX2NhY2hlSW5kZXg9bixlW25dPWl9LF9sZW5kQ29udHJvbEludGVycG9sYW50OmZ1bmN0aW9uKCl7Y29uc3QgdD10aGlzLl9jb250cm9sSW50ZXJwb2xhbnRzLGU9dGhpcy5fbkFjdGl2ZUNvbnRyb2xJbnRlcnBvbGFudHMrKztsZXQgbj10W2VdO3JldHVybiB2b2lkIDA9PT1uJiYobj1uZXcgSXB0KG5ldyBGbG9hdDMyQXJyYXkoMiksbmV3IEZsb2F0MzJBcnJheSgyKSwxLHRoaXMuX2NvbnRyb2xJbnRlcnBvbGFudHNSZXN1bHRCdWZmZXIpLG4uX19jYWNoZUluZGV4PWUsdFtlXT1uKSxufSxfdGFrZUJhY2tDb250cm9sSW50ZXJwb2xhbnQ6ZnVuY3Rpb24odCl7Y29uc3QgZT10aGlzLl9jb250cm9sSW50ZXJwb2xhbnRzLG49dC5fX2NhY2hlSW5kZXgsbz0tLXRoaXMuX25BY3RpdmVDb250cm9sSW50ZXJwb2xhbnRzLGk9ZVtvXTt0Ll9fY2FjaGVJbmRleD1vLGVbb109dCxpLl9fY2FjaGVJbmRleD1uLGVbbl09aX0sX2NvbnRyb2xJbnRlcnBvbGFudHNSZXN1bHRCdWZmZXI6bmV3IEZsb2F0MzJBcnJheSgxKSxjbGlwQWN0aW9uOmZ1bmN0aW9uKHQsZSxuKXtjb25zdCBvPWV8fHRoaXMuX3Jvb3QsaT1vLnV1aWQ7bGV0IGE9InN0cmluZyI9PXR5cGVvZiB0P0dwdC5maW5kQnlOYW1lKG8sdCk6dDtjb25zdCByPW51bGwhPT1hP2EudXVpZDp0LHM9dGhpcy5fYWN0aW9uc0J5Q2xpcFtyXTtsZXQgbD1udWxsO2lmKHZvaWQgMD09PW4mJihuPW51bGwhPT1hP2EuYmxlbmRNb2RlOjI1MDApLHZvaWQgMCE9PXMpe2NvbnN0IHQ9cy5hY3Rpb25CeVJvb3RbaV07aWYodm9pZCAwIT09dCYmdC5ibGVuZE1vZGU9PT1uKXJldHVybiB0O2w9cy5rbm93bkFjdGlvbnNbMF0sbnVsbD09PWEmJihhPWwuX2NsaXApfWlmKG51bGw9PT1hKXJldHVybiBudWxsO2NvbnN0IGM9bmV3IGJ1dCh0aGlzLGEsZSxuKTtyZXR1cm4gdGhpcy5fYmluZEFjdGlvbihjLGwpLHRoaXMuX2FkZEluYWN0aXZlQWN0aW9uKGMscixpKSxjfSxleGlzdGluZ0FjdGlvbjpmdW5jdGlvbih0LGUpe2NvbnN0IG49ZXx8dGhpcy5fcm9vdCxvPW4udXVpZCxpPSJzdHJpbmciPT10eXBlb2YgdD9HcHQuZmluZEJ5TmFtZShuLHQpOnQsYT10aGlzLl9hY3Rpb25zQnlDbGlwW2k/aS51dWlkOnRdO3JldHVybiB2b2lkIDAhPT1hJiZhLmFjdGlvbkJ5Um9vdFtvXXx8bnVsbH0sc3RvcEFsbEFjdGlvbjpmdW5jdGlvbigpe2NvbnN0IHQ9dGhpcy5fYWN0aW9ucztmb3IobGV0IGU9dGhpcy5fbkFjdGl2ZUFjdGlvbnMtMTtlPj0wOy0tZSl0W2VdLnN0b3AoKTtyZXR1cm4gdGhpc30sdXBkYXRlOmZ1bmN0aW9uKHQpe2NvbnN0IGU9dGhpcy5fYWN0aW9ucyxuPXRoaXMuX25BY3RpdmVBY3Rpb25zLG89dGhpcy50aW1lKz10Kj10aGlzLnRpbWVTY2FsZSxpPU1hdGguc2lnbih0KSxhPXRoaXMuX2FjY3VJbmRleF49MTtmb3IobGV0IHI9MDtyIT09bjsrK3IpZVtyXS5fdXBkYXRlKG8sdCxpLGEpO2NvbnN0IHI9dGhpcy5fYmluZGluZ3Mscz10aGlzLl9uQWN0aXZlQmluZGluZ3M7Zm9yKGxldCB0PTA7dCE9PXM7Kyt0KXJbdF0uYXBwbHkoYSk7cmV0dXJuIHRoaXN9LHNldFRpbWU6ZnVuY3Rpb24odCl7dGhpcy50aW1lPTA7Zm9yKGxldCB0PTA7dDx0aGlzLl9hY3Rpb25zLmxlbmd0aDt0KyspdGhpcy5fYWN0aW9uc1t0XS50aW1lPTA7cmV0dXJuIHRoaXMudXBkYXRlKHQpfSxnZXRSb290OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Jvb3R9LHVuY2FjaGVDbGlwOmZ1bmN0aW9uKHQpe2NvbnN0IGU9dGhpcy5fYWN0aW9ucyxuPXQudXVpZCxvPXRoaXMuX2FjdGlvbnNCeUNsaXAsaT1vW25dO2lmKHZvaWQgMCE9PWkpe2NvbnN0IHQ9aS5rbm93bkFjdGlvbnM7Zm9yKGxldCBuPTAsbz10Lmxlbmd0aDtuIT09bzsrK24pe2NvbnN0IG89dFtuXTt0aGlzLl9kZWFjdGl2YXRlQWN0aW9uKG8pO2NvbnN0IGk9by5fY2FjaGVJbmRleCxhPWVbZS5sZW5ndGgtMV07by5fY2FjaGVJbmRleD1udWxsLG8uX2J5Q2xpcENhY2hlSW5kZXg9bnVsbCxhLl9jYWNoZUluZGV4PWksZVtpXT1hLGUucG9wKCksdGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nc0ZvckFjdGlvbihvKX1kZWxldGUgb1tuXX19LHVuY2FjaGVSb290OmZ1bmN0aW9uKHQpe2NvbnN0IGU9dC51dWlkLG49dGhpcy5fYWN0aW9uc0J5Q2xpcDtmb3IoY29uc3QgdCBpbiBuKXtjb25zdCBvPW5bdF0uYWN0aW9uQnlSb290W2VdO3ZvaWQgMCE9PW8mJih0aGlzLl9kZWFjdGl2YXRlQWN0aW9uKG8pLHRoaXMuX3JlbW92ZUluYWN0aXZlQWN0aW9uKG8pKX1jb25zdCBvPXRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZVtlXTtpZih2b2lkIDAhPT1vKWZvcihjb25zdCB0IGluIG8pe2NvbnN0IGU9b1t0XTtlLnJlc3RvcmVPcmlnaW5hbFN0YXRlKCksdGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nKGUpfX0sdW5jYWNoZUFjdGlvbjpmdW5jdGlvbih0LGUpe2NvbnN0IG49dGhpcy5leGlzdGluZ0FjdGlvbih0LGUpO251bGwhPT1uJiYodGhpcy5fZGVhY3RpdmF0ZUFjdGlvbihuKSx0aGlzLl9yZW1vdmVJbmFjdGl2ZUFjdGlvbihuKSl9fSk7Y2xhc3MgX3V0e2NvbnN0cnVjdG9yKHQpeyJzdHJpbmciPT10eXBlb2YgdCYmKGNvbnNvbGUud2FybigiVEhSRUUuVW5pZm9ybTogVHlwZSBwYXJhbWV0ZXIgaXMgbm8gbG9uZ2VyIG5lZWRlZC4iKSx0PWFyZ3VtZW50c1sxXSksdGhpcy52YWx1ZT10fWNsb25lKCl7cmV0dXJuIG5ldyBfdXQodm9pZCAwPT09dGhpcy52YWx1ZS5jbG9uZT90aGlzLnZhbHVlOnRoaXMudmFsdWUuY2xvbmUoKSl9fWZ1bmN0aW9uIEN1dCh0LGUsbil7RmN0LmNhbGwodGhpcyx0LGUpLHRoaXMubWVzaFBlckF0dHJpYnV0ZT1ufHwxfWZ1bmN0aW9uIE11dCh0LGUsbixvLGkpe3RoaXMuYnVmZmVyPXQsdGhpcy50eXBlPWUsdGhpcy5pdGVtU2l6ZT1uLHRoaXMuZWxlbWVudFNpemU9byx0aGlzLmNvdW50PWksdGhpcy52ZXJzaW9uPTB9ZnVuY3Rpb24gdnV0KHQsZSxuLG8pe3RoaXMucmF5PW5ldyB3YXQodCxlKSx0aGlzLm5lYXI9bnx8MCx0aGlzLmZhcj1vfHwxLzAsdGhpcy5jYW1lcmE9bnVsbCx0aGlzLmxheWVycz1uZXcgRmF0LHRoaXMucGFyYW1zPXtNZXNoOnt9LExpbmU6e3RocmVzaG9sZDoxfSxMT0Q6e30sUG9pbnRzOnt0aHJlc2hvbGQ6MX0sU3ByaXRlOnt9fSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLnBhcmFtcyx7UG9pbnRDbG91ZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUmF5Y2FzdGVyOiBwYXJhbXMuUG9pbnRDbG91ZCBoYXMgYmVlbiByZW5hbWVkIHRvIHBhcmFtcy5Qb2ludHMuIiksdGhpcy5Qb2ludHN9fX0pfWZ1bmN0aW9uIHh1dCh0LGUpe3JldHVybiB0LmRpc3RhbmNlLWUuZGlzdGFuY2V9ZnVuY3Rpb24gT3V0KHQsZSxuLG8pe2lmKHQubGF5ZXJzLnRlc3QoZS5sYXllcnMpJiZ0LnJheWNhc3QoZSxuKSwhMD09PW8pe2NvbnN0IG89dC5jaGlsZHJlbjtmb3IobGV0IHQ9MCxpPW8ubGVuZ3RoO3Q8aTt0KyspT3V0KG9bdF0sZSxuLCEwKX19Q3V0LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoRmN0LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOkN1dCxpc0luc3RhbmNlZEludGVybGVhdmVkQnVmZmVyOiEwLGNvcHk6ZnVuY3Rpb24odCl7cmV0dXJuIEZjdC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy5tZXNoUGVyQXR0cmlidXRlPXQubWVzaFBlckF0dHJpYnV0ZSx0aGlzfSxjbG9uZTpmdW5jdGlvbih0KXtjb25zdCBlPUZjdC5wcm90b3R5cGUuY2xvbmUuY2FsbCh0aGlzLHQpO3JldHVybiBlLm1lc2hQZXJBdHRyaWJ1dGU9dGhpcy5tZXNoUGVyQXR0cmlidXRlLGV9LHRvSlNPTjpmdW5jdGlvbih0KXtjb25zdCBlPUZjdC5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyx0KTtyZXR1cm4gZS5pc0luc3RhbmNlZEludGVybGVhdmVkQnVmZmVyPSEwLGUubWVzaFBlckF0dHJpYnV0ZT10aGlzLm1lc2hQZXJBdHRyaWJ1dGUsZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTXV0LnByb3RvdHlwZSwibmVlZHNVcGRhdGUiLHtzZXQ6ZnVuY3Rpb24odCl7ITA9PT10JiZ0aGlzLnZlcnNpb24rK319KSxPYmplY3QuYXNzaWduKE11dC5wcm90b3R5cGUse2lzR0xCdWZmZXJBdHRyaWJ1dGU6ITAsc2V0QnVmZmVyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmJ1ZmZlcj10LHRoaXN9LHNldFR5cGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy50eXBlPXQsdGhpcy5lbGVtZW50U2l6ZT1lLHRoaXN9LHNldEl0ZW1TaXplOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLml0ZW1TaXplPXQsdGhpc30sc2V0Q291bnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY291bnQ9dCx0aGlzfX0pLE9iamVjdC5hc3NpZ24odnV0LnByb3RvdHlwZSx7c2V0OmZ1bmN0aW9uKHQsZSl7dGhpcy5yYXkuc2V0KHQsZSl9LHNldEZyb21DYW1lcmE6ZnVuY3Rpb24odCxlKXtlJiZlLmlzUGVyc3BlY3RpdmVDYW1lcmE/KHRoaXMucmF5Lm9yaWdpbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oZS5tYXRyaXhXb3JsZCksdGhpcy5yYXkuZGlyZWN0aW9uLnNldCh0LngsdC55LC41KS51bnByb2plY3QoZSkuc3ViKHRoaXMucmF5Lm9yaWdpbikubm9ybWFsaXplKCksdGhpcy5jYW1lcmE9ZSk6ZSYmZS5pc09ydGhvZ3JhcGhpY0NhbWVyYT8odGhpcy5yYXkub3JpZ2luLnNldCh0LngsdC55LChlLm5lYXIrZS5mYXIpLyhlLm5lYXItZS5mYXIpKS51bnByb2plY3QoZSksdGhpcy5yYXkuZGlyZWN0aW9uLnNldCgwLDAsLTEpLnRyYW5zZm9ybURpcmVjdGlvbihlLm1hdHJpeFdvcmxkKSx0aGlzLmNhbWVyYT1lKTpjb25zb2xlLmVycm9yKCJUSFJFRS5SYXljYXN0ZXI6IFVuc3VwcG9ydGVkIGNhbWVyYSB0eXBlOiAiK2UudHlwZSl9LGludGVyc2VjdE9iamVjdDpmdW5jdGlvbih0LGUsbil7Y29uc3Qgbz1ufHxbXTtyZXR1cm4gT3V0KHQsdGhpcyxvLGUpLG8uc29ydCh4dXQpLG99LGludGVyc2VjdE9iamVjdHM6ZnVuY3Rpb24odCxlLG4pe2NvbnN0IG89bnx8W107aWYoITE9PT1BcnJheS5pc0FycmF5KHQpKXJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlJheWNhc3Rlci5pbnRlcnNlY3RPYmplY3RzOiBvYmplY3RzIGlzIG5vdCBhbiBBcnJheS4iKSxvO2ZvcihsZXQgbj0wLGk9dC5sZW5ndGg7bjxpO24rKylPdXQodFtuXSx0aGlzLG8sZSk7cmV0dXJuIG8uc29ydCh4dXQpLG99fSk7Y29uc3QgUHV0PW5ldyBVaXQ7ZnVuY3Rpb24gd3V0KHQpe1FhdC5jYWxsKHRoaXMpLHRoaXMubWF0ZXJpYWw9dCx0aGlzLnJlbmRlcj1mdW5jdGlvbigpe30sdGhpcy5oYXNQb3NpdGlvbnM9ITEsdGhpcy5oYXNOb3JtYWxzPSExLHRoaXMuaGFzQ29sb3JzPSExLHRoaXMuaGFzVXZzPSExLHRoaXMucG9zaXRpb25BcnJheT1udWxsLHRoaXMubm9ybWFsQXJyYXk9bnVsbCx0aGlzLmNvbG9yQXJyYXk9bnVsbCx0aGlzLnV2QXJyYXk9bnVsbCx0aGlzLmNvdW50PTB9KHd1dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShRYXQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9d3V0LHd1dC5wcm90b3R5cGUuaXNJbW1lZGlhdGVSZW5kZXJPYmplY3Q9ITA7Y29uc3Qga3V0PW5ldyBPcnQoe3NpZGU6MSxkZXB0aFdyaXRlOiExLGRlcHRoVGVzdDohMX0pO2Z1bmN0aW9uIFN1dCh0KXtjb25zb2xlLndhcm4oIlRIUkVFLlNwbGluZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuQ2F0bXVsbFJvbUN1cnZlMyBpbnN0ZWFkLiIpLHVtdC5jYWxsKHRoaXMsdCksdGhpcy50eXBlPSJjYXRtdWxscm9tIn1mdW5jdGlvbiBEdXQodCxlLG4pe2lmKDE9PT1uKXJldHVybiBuZXcgQ3J0KGUpO2NvbnN0IG89XzcoZSk7aWYoIW8pdGhyb3cgbmV3IEVycm9yKGBkMyBmYWlsZWQgdG8gcmVjb2duaXplIHRoZSBjb2xvcjogJHtlfWApO3JldHVybiBuZXcgQ3J0KF84KG8sdCkoMS1uKSl9dmFyIEV1dCxBdXQsUnV0LFR1dCxOdXQ7ZnVuY3Rpb24gSXV0KHQsZSl7Y29uc3Qgbj1lLmxlbmd0aC8yO2xldCBvPXQuYXR0cmlidXRlcy5wb3NpdGlvbjtvJiZvLmNvdW50PT09MypufHwobz1uZXcga3J0KG5ldyBGbG9hdDMyQXJyYXkoMypuKSwzKSx0LnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG8pKTtjb25zdCBpPW8uYXJyYXk7Zm9yKGxldCB0PTA7dDxuO3QrKylpWzMqdF09ZVsyKnRdLGlbMyp0KzFdPWVbMip0KzFdO28ubmVlZHNVcGRhdGU9ITAsdC5zZXREcmF3UmFuZ2UoMCwzKm4pLHQuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCl9ZnVuY3Rpb24genV0KHQsZSxuKXtjb25zdCBvPU1hdGgubWF4KGUubGVuZ3RoLzItMSwwKSxpPTIqbyozLGE9MyppO2xldCByPXQuYXR0cmlidXRlcy5wb3NpdGlvbjtyJiZyLmNvdW50PT09aXx8KHI9bmV3IGtydChuZXcgRmxvYXQzMkFycmF5KGEpLDMpLHQuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIscikpO2NvbnN0IHM9ci5hcnJheTtmb3IobGV0IHQ9MDt0PG87dCsrKXtjb25zdFtvLGksYSxyXT1bZVsyKnRdLGVbMip0KzFdLGVbMip0KzJdLGVbMip0KzNdXSxsPW5ldyBVaXQobyxpKSxjPW5ldyBVaXQoYSxyKSxkPW5ldyBVaXQoYS1vLHItaSkscD1uZXcgVWl0KC1kLnksZC54KS5zZXRMZW5ndGgobi8yKSxtPWwuY2xvbmUoKS5hZGQocCksdT1sLmNsb25lKCkuc3ViKHApLGY9Yy5jbG9uZSgpLmFkZChwKSxnPWMuY2xvbmUoKS5zdWIocCksaD1bbS54LG0ueSwwLHUueCx1LnksMCxmLngsZi55LDAsZi54LGYueSwwLHUueCx1LnksMCxnLngsZy55LDBdO3Muc2V0KGgsdCpoLmxlbmd0aCl9ci5uZWVkc1VwZGF0ZT0hMCx0LnNldERyYXdSYW5nZSgwLGEpLHQuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCl9ZnVuY3Rpb24gSHV0KHQsZSxuLG8pe2NvbnN0e3Zpc2libGU6aSxjb2xvcjphLG9wYWNpdHk6cn09bztpZihBcnJheS5pc0FycmF5KGUubWF0ZXJpYWwpKXRocm93IG5ldyBFcnJvcigiSW52YXJpYW50IGVycm9yOiBvbmx5IGV4cGVjdCBvbmUgbWF0ZXJpYWwgb24gYW4gb2JqZWN0Iik7Y29uc3Qgcz1lLm1hdGVyaWFsO2lmKHMudmlzaWJsZSE9PWkmJihzLnZpc2libGU9aSxzLm5lZWRzVXBkYXRlPSEwKSwhaSlyZXR1cm4hMTtjb25zdCBsPUR1dCh0LGEsbnVsbCE9cj9yOjEpLGM9bihlLmdlb21ldHJ5KTtyZXR1cm4gZS5nZW9tZXRyeSE9PWMmJihlLmdlb21ldHJ5PWMpLHMuY29sb3IuZXF1YWxzKGwpfHwocy5jb2xvci5zZXQobCkscy5uZWVkc1VwZGF0ZT0hMCksITB9bmV3IG1zdChuZXcgZnN0LGt1dCksYW10LmNyZWF0ZT1mdW5jdGlvbih0LGUpe3JldHVybiBjb25zb2xlLmxvZygiVEhSRUUuQ3VydmUuY3JlYXRlKCkgaGFzIGJlZW4gZGVwcmVjYXRlZCIpLHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYW10LnByb3RvdHlwZSksdC5wcm90b3R5cGUuY29uc3RydWN0b3I9dCx0LnByb3RvdHlwZS5nZXRQb2ludD1lLHR9LE9iamVjdC5hc3NpZ24od210LnByb3RvdHlwZSx7ZnJvbVBvaW50czpmdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5QYXRoOiAuZnJvbVBvaW50cygpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEZyb21Qb2ludHMoKS4iKSx0aGlzLnNldEZyb21Qb2ludHModCl9fSksU3V0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHVtdC5wcm90b3R5cGUpLE9iamVjdC5hc3NpZ24oU3V0LnByb3RvdHlwZSx7aW5pdEZyb21BcnJheTpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNwbGluZTogLmluaXRGcm9tQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxnZXRDb250cm9sUG9pbnRzQXJyYXk6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5TcGxpbmU6IC5nZXRDb250cm9sUG9pbnRzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxyZXBhcmFtZXRyaXplQnlBcmNMZW5ndGg6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5TcGxpbmU6IC5yZXBhcmFtZXRyaXplQnlBcmNMZW5ndGgoKSBoYXMgYmVlbiByZW1vdmVkLiIpfX0pLE9iamVjdC5hc3NpZ24oS3B0LnByb3RvdHlwZSx7ZXh0cmFjdFVybEJhc2U6ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTG9hZGVyOiAuZXh0cmFjdFVybEJhc2UoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuTG9hZGVyVXRpbHMuZXh0cmFjdFVybEJhc2UoKSBpbnN0ZWFkLiIpLChmdW5jdGlvbih0KXtjb25zdCBlPXQubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4tMT09PWU/Ii4vIjp0LnN1YnN0cigwLGUrMSl9KSh0KX19KSxLcHQuSGFuZGxlcnM9e2FkZDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkxvYWRlcjogSGFuZGxlcnMuYWRkKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIExvYWRpbmdNYW5hZ2VyLmFkZEhhbmRsZXIoKSBpbnN0ZWFkLiIpfSxnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Mb2FkZXI6IEhhbmRsZXJzLmdldCgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBMb2FkaW5nTWFuYWdlci5nZXRIYW5kbGVyKCkgaW5zdGVhZC4iKX19LE9iamVjdC5hc3NpZ24oY2xhc3N7Y29uc3RydWN0b3IodCxlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaXNCb3gyIix7dmFsdWU6ITB9KSx0aGlzLm1pbj12b2lkIDAhPT10P3Q6bmV3IFVpdCgxLzAsMS8wKSx0aGlzLm1heD12b2lkIDAhPT1lP2U6bmV3IFVpdCgtMS8wLC0xLzApfXNldCh0LGUpe3JldHVybiB0aGlzLm1pbi5jb3B5KHQpLHRoaXMubWF4LmNvcHkoZSksdGhpc31zZXRGcm9tUG9pbnRzKHQpe3RoaXMubWFrZUVtcHR5KCk7Zm9yKGxldCBlPTAsbj10Lmxlbmd0aDtlPG47ZSsrKXRoaXMuZXhwYW5kQnlQb2ludCh0W2VdKTtyZXR1cm4gdGhpc31zZXRGcm9tQ2VudGVyQW5kU2l6ZSh0LGUpe2NvbnN0IG49UHV0LmNvcHkoZSkubXVsdGlwbHlTY2FsYXIoLjUpO3JldHVybiB0aGlzLm1pbi5jb3B5KHQpLnN1YihuKSx0aGlzLm1heC5jb3B5KHQpLmFkZChuKSx0aGlzfWNsb25lKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMubWluLmNvcHkodC5taW4pLHRoaXMubWF4LmNvcHkodC5tYXgpLHRoaXN9bWFrZUVtcHR5KCl7cmV0dXJuIHRoaXMubWluLng9dGhpcy5taW4ueT0xLzAsdGhpcy5tYXgueD10aGlzLm1heC55PS0xLzAsdGhpc31pc0VtcHR5KCl7cmV0dXJuIHRoaXMubWF4Lng8dGhpcy5taW4ueHx8dGhpcy5tYXgueTx0aGlzLm1pbi55fWdldENlbnRlcih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKGNvbnNvbGUud2FybigiVEhSRUUuQm94MjogLmdldENlbnRlcigpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSx0PW5ldyBVaXQpLHRoaXMuaXNFbXB0eSgpP3Quc2V0KDAsMCk6dC5hZGRWZWN0b3JzKHRoaXMubWluLHRoaXMubWF4KS5tdWx0aXBseVNjYWxhciguNSl9Z2V0U2l6ZSh0KXtyZXR1cm4gdm9pZCAwPT09dCYmKGNvbnNvbGUud2FybigiVEhSRUUuQm94MjogLmdldFNpemUoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIiksdD1uZXcgVWl0KSx0aGlzLmlzRW1wdHkoKT90LnNldCgwLDApOnQuc3ViVmVjdG9ycyh0aGlzLm1heCx0aGlzLm1pbil9ZXhwYW5kQnlQb2ludCh0KXtyZXR1cm4gdGhpcy5taW4ubWluKHQpLHRoaXMubWF4Lm1heCh0KSx0aGlzfWV4cGFuZEJ5VmVjdG9yKHQpe3JldHVybiB0aGlzLm1pbi5zdWIodCksdGhpcy5tYXguYWRkKHQpLHRoaXN9ZXhwYW5kQnlTY2FsYXIodCl7cmV0dXJuIHRoaXMubWluLmFkZFNjYWxhcigtdCksdGhpcy5tYXguYWRkU2NhbGFyKHQpLHRoaXN9Y29udGFpbnNQb2ludCh0KXtyZXR1cm4hKHQueDx0aGlzLm1pbi54fHx0Lng+dGhpcy5tYXgueHx8dC55PHRoaXMubWluLnl8fHQueT50aGlzLm1heC55KX1jb250YWluc0JveCh0KXtyZXR1cm4gdGhpcy5taW4ueDw9dC5taW4ueCYmdC5tYXgueDw9dGhpcy5tYXgueCYmdGhpcy5taW4ueTw9dC5taW4ueSYmdC5tYXgueTw9dGhpcy5tYXgueX1nZXRQYXJhbWV0ZXIodCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGNvbnNvbGUud2FybigiVEhSRUUuQm94MjogLmdldFBhcmFtZXRlcigpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSxlPW5ldyBVaXQpLGUuc2V0KCh0LngtdGhpcy5taW4ueCkvKHRoaXMubWF4LngtdGhpcy5taW4ueCksKHQueS10aGlzLm1pbi55KS8odGhpcy5tYXgueS10aGlzLm1pbi55KSl9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4hKHQubWF4Lng8dGhpcy5taW4ueHx8dC5taW4ueD50aGlzLm1heC54fHx0Lm1heC55PHRoaXMubWluLnl8fHQubWluLnk+dGhpcy5tYXgueSl9Y2xhbXBQb2ludCh0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoY29uc29sZS53YXJuKCJUSFJFRS5Cb3gyOiAuY2xhbXBQb2ludCgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSxlPW5ldyBVaXQpLGUuY29weSh0KS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCl9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiBQdXQuY29weSh0KS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCkuc3ViKHQpLmxlbmd0aCgpfWludGVyc2VjdCh0KXtyZXR1cm4gdGhpcy5taW4ubWF4KHQubWluKSx0aGlzLm1heC5taW4odC5tYXgpLHRoaXN9dW5pb24odCl7cmV0dXJuIHRoaXMubWluLm1pbih0Lm1pbiksdGhpcy5tYXgubWF4KHQubWF4KSx0aGlzfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5taW4uYWRkKHQpLHRoaXMubWF4LmFkZCh0KSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5taW4uZXF1YWxzKHRoaXMubWluKSYmdC5tYXguZXF1YWxzKHRoaXMubWF4KX19LnByb3RvdHlwZSx7Y2VudGVyOmZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5jZW50ZXIoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRDZW50ZXIoKS4iKSx0aGlzLmdldENlbnRlcih0KX0sZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gyOiAuZW1wdHkoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pc0VtcHR5KCkuIiksdGhpcy5pc0VtcHR5KCl9LGlzSW50ZXJzZWN0aW9uQm94OmZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5pc0ludGVyc2VjdGlvbkJveCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNCb3goKS4iKSx0aGlzLmludGVyc2VjdHNCb3godCl9LHNpemU6ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MjogLnNpemUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRTaXplKCkuIiksdGhpcy5nZXRTaXplKHQpfX0pLE9iamVjdC5hc3NpZ24obmF0LnByb3RvdHlwZSx7Y2VudGVyOmZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5jZW50ZXIoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRDZW50ZXIoKS4iKSx0aGlzLmdldENlbnRlcih0KX0sZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuZW1wdHkoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pc0VtcHR5KCkuIiksdGhpcy5pc0VtcHR5KCl9LGlzSW50ZXJzZWN0aW9uQm94OmZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5pc0ludGVyc2VjdGlvbkJveCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNCb3goKS4iKSx0aGlzLmludGVyc2VjdHNCb3godCl9LGlzSW50ZXJzZWN0aW9uU3BoZXJlOmZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5pc0ludGVyc2VjdGlvblNwaGVyZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNTcGhlcmUoKS4iKSx0aGlzLmludGVyc2VjdHNTcGhlcmUodCl9LHNpemU6ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MzogLnNpemUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRTaXplKCkuIiksdGhpcy5nZXRTaXplKHQpfX0pLE9iamVjdC5hc3NpZ24oeWF0LnByb3RvdHlwZSx7ZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5TcGhlcmU6IC5lbXB0eSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmlzRW1wdHkoKS4iKSx0aGlzLmlzRW1wdHkoKX19KSxTc3QucHJvdG90eXBlLnNldEZyb21NYXRyaXg9ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuRnJ1c3R1bTogLnNldEZyb21NYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeCgpLiIpLHRoaXMuc2V0RnJvbVByb2plY3Rpb25NYXRyaXgodCl9LE9iamVjdC5hc3NpZ24oaml0LHtyYW5kb20xNjpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdGg6IC5yYW5kb20xNigpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSBNYXRoLnJhbmRvbSgpIGluc3RlYWQuIiksTWF0aC5yYW5kb20oKX0sbmVhcmVzdFBvd2VyT2ZUd286ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0aDogLm5lYXJlc3RQb3dlck9mVHdvKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZmxvb3JQb3dlck9mVHdvKCkuIiksaml0LmZsb29yUG93ZXJPZlR3byh0KX0sbmV4dFBvd2VyT2ZUd286ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0aDogLm5leHRQb3dlck9mVHdvKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuY2VpbFBvd2VyT2ZUd28oKS4iKSxqaXQuY2VpbFBvd2VyT2ZUd28odCl9fSksT2JqZWN0LmFzc2lnbihXaXQucHJvdG90eXBlLHtmbGF0dGVuVG9BcnJheU9mZnNldDpmdW5jdGlvbih0LGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDM6IC5mbGF0dGVuVG9BcnJheU9mZnNldCgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudG9BcnJheSgpIGluc3RlYWQuIiksdGhpcy50b0FycmF5KHQsZSl9LG11bHRpcGx5VmVjdG9yMzpmdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXgzOiAubXVsdGlwbHlWZWN0b3IzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHZlY3Rvci5hcHBseU1hdHJpeDMoIG1hdHJpeCApIGluc3RlYWQuIiksdC5hcHBseU1hdHJpeDModGhpcyl9LG11bHRpcGx5VmVjdG9yM0FycmF5OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4MzogLm11bHRpcGx5VmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZTpmdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXgzOiAuYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBhdHRyaWJ1dGUuYXBwbHlNYXRyaXgzKCBtYXRyaXggKSBpbnN0ZWFkLiIpLHQuYXBwbHlNYXRyaXgzKHRoaXMpfSxhcHBseVRvVmVjdG9yM0FycmF5OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4MzogLmFwcGx5VG9WZWN0b3IzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxnZXRJbnZlcnNlOmZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDM6IC5nZXRJbnZlcnNlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG1hdHJpeEludi5jb3B5KCBtYXRyaXggKS5pbnZlcnQoKTsgaW5zdGVhZC4iKSx0aGlzLmNvcHkodCkuaW52ZXJ0KCl9fSksT2JqZWN0LmFzc2lnbihrYXQucHJvdG90eXBlLHtleHRyYWN0UG9zaXRpb246ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmV4dHJhY3RQb3NpdGlvbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmNvcHlQb3NpdGlvbigpLiIpLHRoaXMuY29weVBvc2l0aW9uKHQpfSxmbGF0dGVuVG9BcnJheU9mZnNldDpmdW5jdGlvbih0LGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5mbGF0dGVuVG9BcnJheU9mZnNldCgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudG9BcnJheSgpIGluc3RlYWQuIiksdGhpcy50b0FycmF5KHQsZSl9LGdldFBvc2l0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmdldFBvc2l0aW9uKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFZlY3RvcjMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCBtYXRyaXggKSBpbnN0ZWFkLiIpLChuZXcgJGl0KS5zZXRGcm9tTWF0cml4Q29sdW1uKHRoaXMsMyl9LHNldFJvdGF0aW9uRnJvbVF1YXRlcm5pb246ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLnNldFJvdGF0aW9uRnJvbVF1YXRlcm5pb24oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbigpLiIpLHRoaXMubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24odCl9LG11bHRpcGx5VG9BcnJheTpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VG9BcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LG11bHRpcGx5VmVjdG9yMzpmdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHlWZWN0b3IzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHZlY3Rvci5hcHBseU1hdHJpeDQoIG1hdHJpeCApIGluc3RlYWQuIiksdC5hcHBseU1hdHJpeDQodGhpcyl9LG11bHRpcGx5VmVjdG9yNDpmdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHlWZWN0b3I0KCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHZlY3Rvci5hcHBseU1hdHJpeDQoIG1hdHJpeCApIGluc3RlYWQuIiksdC5hcHBseU1hdHJpeDQodGhpcyl9LG11bHRpcGx5VmVjdG9yM0FycmF5OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0scm90YXRlQXhpczpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVBeGlzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFZlY3RvcjMudHJhbnNmb3JtRGlyZWN0aW9uKCBtYXRyaXggKSBpbnN0ZWFkLiIpLHQudHJhbnNmb3JtRGlyZWN0aW9uKHRoaXMpfSxjcm9zc1ZlY3RvcjpmdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuY3Jvc3NWZWN0b3IoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4NCggbWF0cml4ICkgaW5zdGVhZC4iKSx0LmFwcGx5TWF0cml4NCh0aGlzKX0sdHJhbnNsYXRlOmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnRyYW5zbGF0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LHJvdGF0ZVg6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlWCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LHJvdGF0ZVk6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlWSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LHJvdGF0ZVo6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlWigpIGhhcyBiZWVuIHJlbW92ZWQuIil9LHJvdGF0ZUJ5QXhpczpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVCeUF4aXMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxhcHBseVRvQnVmZmVyQXR0cmlidXRlOmZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5hcHBseVRvQnVmZmVyQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGF0dHJpYnV0ZS5hcHBseU1hdHJpeDQoIG1hdHJpeCApIGluc3RlYWQuIiksdC5hcHBseU1hdHJpeDQodGhpcyl9LGFwcGx5VG9WZWN0b3IzQXJyYXk6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAuYXBwbHlUb1ZlY3RvcjNBcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LG1ha2VGcnVzdHVtOmZ1bmN0aW9uKHQsZSxuLG8saSxhKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubWFrZUZydXN0dW0oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLm1ha2VQZXJzcGVjdGl2ZSggbGVmdCwgcmlnaHQsIHRvcCwgYm90dG9tLCBuZWFyLCBmYXIgKSBpbnN0ZWFkLiIpLHRoaXMubWFrZVBlcnNwZWN0aXZlKHQsZSxvLG4saSxhKX0sZ2V0SW52ZXJzZTpmdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuZ2V0SW52ZXJzZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBtYXRyaXhJbnYuY29weSggbWF0cml4ICkuaW52ZXJ0KCk7IGluc3RlYWQuIiksdGhpcy5jb3B5KHQpLmludmVydCgpfX0pLG5ydC5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25MaW5lPWZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlBsYW5lOiAuaXNJbnRlcnNlY3Rpb25MaW5lKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c0xpbmUoKS4iKSx0aGlzLmludGVyc2VjdHNMaW5lKHQpfSxPYmplY3QuYXNzaWduKFFpdC5wcm90b3R5cGUse211bHRpcGx5VmVjdG9yMzpmdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiAubXVsdGlwbHlWZWN0b3IzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGlzIG5vdyB2ZWN0b3IuYXBwbHlRdWF0ZXJuaW9uKCBxdWF0ZXJuaW9uICkgaW5zdGVhZC4iKSx0LmFwcGx5UXVhdGVybmlvbih0aGlzKX0saW52ZXJzZTpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlF1YXRlcm5pb246IC5pbnZlcnNlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byBpbnZlcnQoKS4iKSx0aGlzLmludmVydCgpfX0pLE9iamVjdC5hc3NpZ24od2F0LnByb3RvdHlwZSx7aXNJbnRlcnNlY3Rpb25Cb3g6ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUmF5OiAuaXNJbnRlcnNlY3Rpb25Cb3goKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzQm94KCkuIiksdGhpcy5pbnRlcnNlY3RzQm94KHQpfSxpc0ludGVyc2VjdGlvblBsYW5lOmZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlJheTogLmlzSW50ZXJzZWN0aW9uUGxhbmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzUGxhbmUoKS4iKSx0aGlzLmludGVyc2VjdHNQbGFuZSh0KX0saXNJbnRlcnNlY3Rpb25TcGhlcmU6ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUmF5OiAuaXNJbnRlcnNlY3Rpb25TcGhlcmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzU3BoZXJlKCkuIiksdGhpcy5pbnRlcnNlY3RzU3BoZXJlKHQpfX0pLE9iamVjdC5hc3NpZ24odXJ0LnByb3RvdHlwZSx7YXJlYTpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAuYXJlYSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldEFyZWEoKS4iKSx0aGlzLmdldEFyZWEoKX0sYmFyeWNvb3JkRnJvbVBvaW50OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5iYXJ5Y29vcmRGcm9tUG9pbnQoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRCYXJ5Y29vcmQoKS4iKSx0aGlzLmdldEJhcnljb29yZCh0LGUpfSxtaWRwb2ludDpmdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLm1pZHBvaW50KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0TWlkcG9pbnQoKS4iKSx0aGlzLmdldE1pZHBvaW50KHQpfSxub3JtYWw6ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5ub3JtYWwoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXROb3JtYWwoKS4iKSx0aGlzLmdldE5vcm1hbCh0KX0scGxhbmU6ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5wbGFuZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldFBsYW5lKCkuIiksdGhpcy5nZXRQbGFuZSh0KX19KSxPYmplY3QuYXNzaWduKHVydCx7YmFyeWNvb3JkRnJvbVBvaW50OmZ1bmN0aW9uKHQsZSxuLG8saSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5iYXJ5Y29vcmRGcm9tUG9pbnQoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRCYXJ5Y29vcmQoKS4iKSx1cnQuZ2V0QmFyeWNvb3JkKHQsZSxuLG8saSl9LG5vcm1hbDpmdW5jdGlvbih0LGUsbixvKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLm5vcm1hbCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldE5vcm1hbCgpLiIpLHVydC5nZXROb3JtYWwodCxlLG4sbyl9fSksT2JqZWN0LmFzc2lnbihrbXQucHJvdG90eXBlLHtleHRyYWN0QWxsUG9pbnRzOmZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlNoYXBlOiAuZXh0cmFjdEFsbFBvaW50cygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuZXh0cmFjdFBvaW50cygpIGluc3RlYWQuIiksdGhpcy5leHRyYWN0UG9pbnRzKHQpfSxleHRydWRlOmZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlNoYXBlOiAuZXh0cnVkZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBFeHRydWRlR2VvbWV0cnkoKSBpbnN0ZWFkLiIpLG5ldyBicHQodGhpcyx0KX0sbWFrZUdlb21ldHJ5OmZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlNoYXBlOiAubWFrZUdlb21ldHJ5KCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFNoYXBlR2VvbWV0cnkoKSBpbnN0ZWFkLiIpLG5ldyBDcHQodGhpcyx0KX19KSxPYmplY3QuYXNzaWduKFVpdC5wcm90b3R5cGUse2Zyb21BdHRyaWJ1dGU6ZnVuY3Rpb24odCxlLG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjI6IC5mcm9tQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUsbil9LGRpc3RhbmNlVG9NYW5oYXR0YW46ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLmRpc3RhbmNlVG9NYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5EaXN0YW5jZVRvKCkuIiksdGhpcy5tYW5oYXR0YW5EaXN0YW5jZVRvKHQpfSxsZW5ndGhNYW5oYXR0YW46ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiAubGVuZ3RoTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuTGVuZ3RoKCkuIiksdGhpcy5tYW5oYXR0YW5MZW5ndGgoKX19KSxPYmplY3QuYXNzaWduKCRpdC5wcm90b3R5cGUse3NldEV1bGVyRnJvbVJvdGF0aW9uTWF0cml4OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuVmVjdG9yMzogLnNldEV1bGVyRnJvbVJvdGF0aW9uTWF0cml4KCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEV1bGVyLnNldEZyb21Sb3RhdGlvbk1hdHJpeCgpIGluc3RlYWQuIil9LHNldEV1bGVyRnJvbVF1YXRlcm5pb246ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5WZWN0b3IzOiAuc2V0RXVsZXJGcm9tUXVhdGVybmlvbigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBFdWxlci5zZXRGcm9tUXVhdGVybmlvbigpIGluc3RlYWQuIil9LGdldFBvc2l0aW9uRnJvbU1hdHJpeDpmdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZ2V0UG9zaXRpb25Gcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCkuIiksdGhpcy5zZXRGcm9tTWF0cml4UG9zaXRpb24odCl9LGdldFNjYWxlRnJvbU1hdHJpeDpmdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZ2V0U2NhbGVGcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbU1hdHJpeFNjYWxlKCkuIiksdGhpcy5zZXRGcm9tTWF0cml4U2NhbGUodCl9LGdldENvbHVtbkZyb21NYXRyaXg6ZnVuY3Rpb24odCxlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZ2V0Q29sdW1uRnJvbU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEZyb21NYXRyaXhDb2x1bW4oKS4iKSx0aGlzLnNldEZyb21NYXRyaXhDb2x1bW4oZSx0KX0sYXBwbHlQcm9qZWN0aW9uOmZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5hcHBseVByb2plY3Rpb24oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLmFwcGx5TWF0cml4NCggbSApIGluc3RlYWQuIiksdGhpcy5hcHBseU1hdHJpeDQodCl9LGZyb21BdHRyaWJ1dGU6ZnVuY3Rpb24odCxlLG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5mcm9tQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUsbil9LGRpc3RhbmNlVG9NYW5oYXR0YW46ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmRpc3RhbmNlVG9NYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5EaXN0YW5jZVRvKCkuIiksdGhpcy5tYW5oYXR0YW5EaXN0YW5jZVRvKHQpfSxsZW5ndGhNYW5oYXR0YW46ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAubGVuZ3RoTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuTGVuZ3RoKCkuIiksdGhpcy5tYW5oYXR0YW5MZW5ndGgoKX19KSxPYmplY3QuYXNzaWduKEtpdC5wcm90b3R5cGUse2Zyb21BdHRyaWJ1dGU6ZnVuY3Rpb24odCxlLG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IC5mcm9tQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUsbil9LGxlbmd0aE1hbmhhdHRhbjpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IC5sZW5ndGhNYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5MZW5ndGgoKS4iKSx0aGlzLm1hbmhhdHRhbkxlbmd0aCgpfX0pLE9iamVjdC5hc3NpZ24oUWF0LnByb3RvdHlwZSx7Z2V0Q2hpbGRCeU5hbWU6ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5nZXRDaGlsZEJ5TmFtZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldE9iamVjdEJ5TmFtZSgpLiIpLHRoaXMuZ2V0T2JqZWN0QnlOYW1lKHQpfSxyZW5kZXJEZXB0aDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5yZW5kZXJEZXB0aCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnJlbmRlck9yZGVyLCBpbnN0ZWFkLiIpfSx0cmFuc2xhdGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLnRyYW5zbGF0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAudHJhbnNsYXRlT25BeGlzKCBheGlzLCBkaXN0YW5jZSApIGluc3RlYWQuIiksdGhpcy50cmFuc2xhdGVPbkF4aXMoZSx0KX0sZ2V0V29ybGRSb3RhdGlvbjpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk9iamVjdDNEOiAuZ2V0V29ybGRSb3RhdGlvbigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5PYmplY3QzRC5nZXRXb3JsZFF1YXRlcm5pb24oIHRhcmdldCApIGluc3RlYWQuIil9LGFwcGx5TWF0cml4OmZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAuYXBwbHlNYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5hcHBseU1hdHJpeDQoKS4iKSx0aGlzLmFwcGx5TWF0cml4NCh0KX19KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhRYXQucHJvdG90eXBlLHtldWxlck9yZGVyOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLmV1bGVyT3JkZXIgaXMgbm93IC5yb3RhdGlvbi5vcmRlci4iKSx0aGlzLnJvdGF0aW9uLm9yZGVyfSxzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLmV1bGVyT3JkZXIgaXMgbm93IC5yb3RhdGlvbi5vcmRlci4iKSx0aGlzLnJvdGF0aW9uLm9yZGVyPXR9fSx1c2VRdWF0ZXJuaW9uOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAudXNlUXVhdGVybmlvbiBoYXMgYmVlbiByZW1vdmVkLiBUaGUgbGlicmFyeSBub3cgdXNlcyBxdWF0ZXJuaW9ucyBieSBkZWZhdWx0LiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAudXNlUXVhdGVybmlvbiBoYXMgYmVlbiByZW1vdmVkLiBUaGUgbGlicmFyeSBub3cgdXNlcyBxdWF0ZXJuaW9ucyBieSBkZWZhdWx0LiIpfX19KSxPYmplY3QuYXNzaWduKG1zdC5wcm90b3R5cGUse3NldERyYXdNb2RlOmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWVzaDogLnNldERyYXdNb2RlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIHJlbmRlcmVyIG5vdyBhbHdheXMgYXNzdW1lcyBUSFJFRS5UcmlhbmdsZXNEcmF3TW9kZS4gVHJhbnNmb3JtIHlvdXIgZ2VvbWV0cnkgdmlhIEJ1ZmZlckdlb21ldHJ5VXRpbHMudG9UcmlhbmdsZXNEcmF3TW9kZSgpIGlmIG5lY2Vzc2FyeS4iKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhtc3QucHJvdG90eXBlLHtkcmF3TW9kZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUuZXJyb3IoIlRIUkVFLk1lc2g6IC5kcmF3TW9kZSBoYXMgYmVlbiByZW1vdmVkLiBUaGUgcmVuZGVyZXIgbm93IGFsd2F5cyBhc3N1bWVzIFRIUkVFLlRyaWFuZ2xlc0RyYXdNb2RlLiIpLDB9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1lc2g6IC5kcmF3TW9kZSBoYXMgYmVlbiByZW1vdmVkLiBUaGUgcmVuZGVyZXIgbm93IGFsd2F5cyBhc3N1bWVzIFRIUkVFLlRyaWFuZ2xlc0RyYXdNb2RlLiBUcmFuc2Zvcm0geW91ciBnZW9tZXRyeSB2aWEgQnVmZmVyR2VvbWV0cnlVdGlscy50b1RyaWFuZ2xlc0RyYXdNb2RlKCkgaWYgbmVjZXNzYXJ5LiIpfX19KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhhZHQucHJvdG90eXBlLHtvYmplY3RzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5MT0Q6IC5vYmplY3RzIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmxldmVscy4iKSx0aGlzLmxldmVsc319fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGdkdC5wcm90b3R5cGUsInVzZVZlcnRleFRleHR1cmUiLHtnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLlNrZWxldG9uOiB1c2VWZXJ0ZXhUZXh0dXJlIGhhcyBiZWVuIHJlbW92ZWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuU2tlbGV0b246IHVzZVZlcnRleFRleHR1cmUgaGFzIGJlZW4gcmVtb3ZlZC4iKX19KSxwZHQucHJvdG90eXBlLmluaXRCb25lcz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNraW5uZWRNZXNoOiBpbml0Qm9uZXMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYW10LnByb3RvdHlwZSwiX19hcmNMZW5ndGhEaXZpc2lvbnMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5DdXJ2ZTogLl9fYXJjTGVuZ3RoRGl2aXNpb25zIGlzIG5vdyAuYXJjTGVuZ3RoRGl2aXNpb25zLiIpLHRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zfSxzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5DdXJ2ZTogLl9fYXJjTGVuZ3RoRGl2aXNpb25zIGlzIG5vdyAuYXJjTGVuZ3RoRGl2aXNpb25zLiIpLHRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zPXR9fSksQ3N0LnByb3RvdHlwZS5zZXRMZW5zPWZ1bmN0aW9uKHQsZSl7Y29uc29sZS53YXJuKCJUSFJFRS5QZXJzcGVjdGl2ZUNhbWVyYS5zZXRMZW5zIGlzIGRlcHJlY2F0ZWQuIFVzZSAuc2V0Rm9jYWxMZW5ndGggYW5kIC5maWxtR2F1Z2UgZm9yIGEgcGhvdG9ncmFwaGljIHNldHVwLiIpLHZvaWQgMCE9PWUmJih0aGlzLmZpbG1HYXVnZT1lKSx0aGlzLnNldEZvY2FsTGVuZ3RoKHQpfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhTbXQucHJvdG90eXBlLHtvbmx5U2hhZG93OntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAub25seVNoYWRvdyBoYXMgYmVlbiByZW1vdmVkLiIpfX0sc2hhZG93Q2FtZXJhRm92OntzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYUZvdiBpcyBub3cgLnNoYWRvdy5jYW1lcmEuZm92LiIpLHRoaXMuc2hhZG93LmNhbWVyYS5mb3Y9dH19LHNoYWRvd0NhbWVyYUxlZnQ6e3NldDpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhTGVmdCBpcyBub3cgLnNoYWRvdy5jYW1lcmEubGVmdC4iKSx0aGlzLnNoYWRvdy5jYW1lcmEubGVmdD10fX0sc2hhZG93Q2FtZXJhUmlnaHQ6e3NldDpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhUmlnaHQgaXMgbm93IC5zaGFkb3cuY2FtZXJhLnJpZ2h0LiIpLHRoaXMuc2hhZG93LmNhbWVyYS5yaWdodD10fX0sc2hhZG93Q2FtZXJhVG9wOntzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYVRvcCBpcyBub3cgLnNoYWRvdy5jYW1lcmEudG9wLiIpLHRoaXMuc2hhZG93LmNhbWVyYS50b3A9dH19LHNoYWRvd0NhbWVyYUJvdHRvbTp7c2V0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFCb3R0b20gaXMgbm93IC5zaGFkb3cuY2FtZXJhLmJvdHRvbS4iKSx0aGlzLnNoYWRvdy5jYW1lcmEuYm90dG9tPXR9fSxzaGFkb3dDYW1lcmFOZWFyOntzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYU5lYXIgaXMgbm93IC5zaGFkb3cuY2FtZXJhLm5lYXIuIiksdGhpcy5zaGFkb3cuY2FtZXJhLm5lYXI9dH19LHNoYWRvd0NhbWVyYUZhcjp7c2V0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFGYXIgaXMgbm93IC5zaGFkb3cuY2FtZXJhLmZhci4iKSx0aGlzLnNoYWRvdy5jYW1lcmEuZmFyPXR9fSxzaGFkb3dDYW1lcmFWaXNpYmxlOntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhVmlzaWJsZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkNhbWVyYUhlbHBlciggbGlnaHQuc2hhZG93LmNhbWVyYSApIGluc3RlYWQuIil9fSxzaGFkb3dCaWFzOntzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0JpYXMgaXMgbm93IC5zaGFkb3cuYmlhcy4iKSx0aGlzLnNoYWRvdy5iaWFzPXR9fSxzaGFkb3dEYXJrbmVzczp7c2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0RhcmtuZXNzIGhhcyBiZWVuIHJlbW92ZWQuIil9fSxzaGFkb3dNYXBXaWR0aDp7c2V0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dNYXBXaWR0aCBpcyBub3cgLnNoYWRvdy5tYXBTaXplLndpZHRoLiIpLHRoaXMuc2hhZG93Lm1hcFNpemUud2lkdGg9dH19LHNoYWRvd01hcEhlaWdodDp7c2V0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dNYXBIZWlnaHQgaXMgbm93IC5zaGFkb3cubWFwU2l6ZS5oZWlnaHQuIiksdGhpcy5zaGFkb3cubWFwU2l6ZS5oZWlnaHQ9dH19fSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoa3J0LnByb3RvdHlwZSx7bGVuZ3RoOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5sZW5ndGggaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5jb3VudCBpbnN0ZWFkLiIpLHRoaXMuYXJyYXkubGVuZ3RofX0sZHluYW1pYzp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuZHluYW1pYyBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnVzYWdlIGluc3RlYWQuIiksdGhpcy51c2FnZT09PUhpdH0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5keW5hbWljIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudXNhZ2UgaW5zdGVhZC4iKSx0aGlzLnNldFVzYWdlKEhpdCl9fX0pLE9iamVjdC5hc3NpZ24oa3J0LnByb3RvdHlwZSx7c2V0RHluYW1pYzpmdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5zZXREeW5hbWljKCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5zZXRVc2FnZSgpIGluc3RlYWQuIiksdGhpcy5zZXRVc2FnZSghMD09PXQ/SGl0OnppdCksdGhpc30sY29weUluZGljZXNBcnJheTpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLmNvcHlJbmRpY2VzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXRBcnJheTpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLnNldEFycmF5IGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBCdWZmZXJHZW9tZXRyeSAuc2V0QXR0cmlidXRlIHRvIHJlcGxhY2UvcmVzaXplIGF0dHJpYnV0ZSBidWZmZXJzIil9fSksT2JqZWN0LmFzc2lnbihacnQucHJvdG90eXBlLHthZGRJbmRleDpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkSW5kZXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRJbmRleCgpLiIpLHRoaXMuc2V0SW5kZXgodCl9LGFkZEF0dHJpYnV0ZTpmdW5jdGlvbih0LGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0QXR0cmlidXRlKCkuIiksZSYmZS5pc0J1ZmZlckF0dHJpYnV0ZXx8ZSYmZS5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlPyJpbmRleCI9PT10Pyhjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5LmFkZEF0dHJpYnV0ZTogVXNlIC5zZXRJbmRleCgpIGZvciBpbmRleCBhdHRyaWJ1dGUuIiksdGhpcy5zZXRJbmRleChlKSx0aGlzKTp0aGlzLnNldEF0dHJpYnV0ZSh0LGUpOihjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkQXR0cmlidXRlKCkgbm93IGV4cGVjdHMgKCBuYW1lLCBhdHRyaWJ1dGUgKS4iKSx0aGlzLnNldEF0dHJpYnV0ZSh0LG5ldyBrcnQoYXJndW1lbnRzWzFdLGFyZ3VtZW50c1syXSkpKX0sYWRkRHJhd0NhbGw6ZnVuY3Rpb24odCxlLG4pe3ZvaWQgMCE9PW4mJmNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGREcmF3Q2FsbCgpIG5vIGxvbmdlciBzdXBwb3J0cyBpbmRleE9mZnNldC4iKSxjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkRHJhd0NhbGwoKSBpcyBub3cgLmFkZEdyb3VwKCkuIiksdGhpcy5hZGRHcm91cCh0LGUpfSxjbGVhckRyYXdDYWxsczpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5jbGVhckRyYXdDYWxscygpIGlzIG5vdyAuY2xlYXJHcm91cHMoKS4iKSx0aGlzLmNsZWFyR3JvdXBzKCl9LGNvbXB1dGVPZmZzZXRzOmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmNvbXB1dGVPZmZzZXRzKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0scmVtb3ZlQXR0cmlidXRlOmZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAucmVtb3ZlQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZGVsZXRlQXR0cmlidXRlKCkuIiksdGhpcy5kZWxldGVBdHRyaWJ1dGUodCl9LGFwcGx5TWF0cml4OmZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYXBwbHlNYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5hcHBseU1hdHJpeDQoKS4iKSx0aGlzLmFwcGx5TWF0cml4NCh0KX19KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhacnQucHJvdG90eXBlLHtkcmF3Y2FsbHM6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLmVycm9yKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmRyYXdjYWxscyBoYXMgYmVlbiByZW5hbWVkIHRvIC5ncm91cHMuIiksdGhpcy5ncm91cHN9fSxvZmZzZXRzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLm9mZnNldHMgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ3JvdXBzLiIpLHRoaXMuZ3JvdXBzfX19KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhVbXQucHJvdG90eXBlLHttYXhJbnN0YW5jZWRDb3VudDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnk6IC5tYXhJbnN0YW5jZWRDb3VudCBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnN0YW5jZUNvdW50LiIpLHRoaXMuaW5zdGFuY2VDb3VudH0sc2V0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnk6IC5tYXhJbnN0YW5jZWRDb3VudCBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnN0YW5jZUNvdW50LiIpLHRoaXMuaW5zdGFuY2VDb3VudD10fX19KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyh2dXQucHJvdG90eXBlLHtsaW5lUHJlY2lzaW9uOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5SYXljYXN0ZXI6IC5saW5lUHJlY2lzaW9uIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAucGFyYW1zLkxpbmUudGhyZXNob2xkIGluc3RlYWQuIiksdGhpcy5wYXJhbXMuTGluZS50aHJlc2hvbGR9LHNldDpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLlJheWNhc3RlcjogLmxpbmVQcmVjaXNpb24gaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5wYXJhbXMuTGluZS50aHJlc2hvbGQgaW5zdGVhZC4iKSx0aGlzLnBhcmFtcy5MaW5lLnRocmVzaG9sZD10fX19KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhGY3QucHJvdG90eXBlLHtkeW5hbWljOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5JbnRlcmxlYXZlZEJ1ZmZlcjogLmxlbmd0aCBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnVzYWdlIGluc3RlYWQuIiksdGhpcy51c2FnZT09PUhpdH0sc2V0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuSW50ZXJsZWF2ZWRCdWZmZXI6IC5sZW5ndGggaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC51c2FnZSBpbnN0ZWFkLiIpLHRoaXMuc2V0VXNhZ2UodCl9fX0pLE9iamVjdC5hc3NpZ24oRmN0LnByb3RvdHlwZSx7c2V0RHluYW1pYzpmdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5JbnRlcmxlYXZlZEJ1ZmZlcjogLnNldER5bmFtaWMoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnNldFVzYWdlKCkgaW5zdGVhZC4iKSx0aGlzLnNldFVzYWdlKCEwPT09dD9IaXQ6eml0KSx0aGlzfSxzZXRBcnJheTpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkludGVybGVhdmVkQnVmZmVyOiAuc2V0QXJyYXkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEJ1ZmZlckdlb21ldHJ5IC5zZXRBdHRyaWJ1dGUgdG8gcmVwbGFjZS9yZXNpemUgYXR0cmlidXRlIGJ1ZmZlcnMiKX19KSxPYmplY3QuYXNzaWduKGJwdC5wcm90b3R5cGUse2dldEFycmF5czpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkV4dHJ1ZGVHZW9tZXRyeTogLmdldEFycmF5cygpIGhhcyBiZWVuIHJlbW92ZWQuIil9LGFkZFNoYXBlTGlzdDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkV4dHJ1ZGVHZW9tZXRyeTogLmFkZFNoYXBlTGlzdCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LGFkZFNoYXBlOmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuRXh0cnVkZUdlb21ldHJ5OiAuYWRkU2hhcGUoKSBoYXMgYmVlbiByZW1vdmVkLiIpfX0pLE9iamVjdC5hc3NpZ24oSGN0LnByb3RvdHlwZSx7ZGlzcG9zZTpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNjZW5lOiAuZGlzcG9zZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9fSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoX3V0LnByb3RvdHlwZSx7ZHluYW1pYzp7c2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5Vbmlmb3JtOiAuZHluYW1pYyBoYXMgYmVlbiByZW1vdmVkLiBVc2Ugb2JqZWN0Lm9uQmVmb3JlUmVuZGVyKCkgaW5zdGVhZC4iKX19LG9uVXBkYXRlOnt2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlVuaWZvcm06IC5vblVwZGF0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBvYmplY3Qub25CZWZvcmVSZW5kZXIoKSBpbnN0ZWFkLiIpLHRoaXN9fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHhydC5wcm90b3R5cGUse3dyYXBBcm91bmQ6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC53cmFwQXJvdW5kIGhhcyBiZWVuIHJlbW92ZWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC53cmFwQXJvdW5kIGhhcyBiZWVuIHJlbW92ZWQuIil9fSxvdmVyZHJhdzp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRlcmlhbDogLm92ZXJkcmF3IGhhcyBiZWVuIHJlbW92ZWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC5vdmVyZHJhdyBoYXMgYmVlbiByZW1vdmVkLiIpfX0sd3JhcFJHQjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC53cmFwUkdCIGhhcyBiZWVuIHJlbW92ZWQuIiksbmV3IENydH19LHNoYWRpbmc6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zaGFkaW5nIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB0aGUgYm9vbGVhbiAuZmxhdFNoYWRpbmcgaW5zdGVhZC4iKX0sc2V0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnNoYWRpbmcgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHRoZSBib29sZWFuIC5mbGF0U2hhZGluZyBpbnN0ZWFkLiIpLHRoaXMuZmxhdFNoYWRpbmc9MT09PXR9fSxzdGVuY2lsTWFzazp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnN0ZW5jaWxNYXNrIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuc3RlbmNpbEZ1bmNNYXNrIGluc3RlYWQuIiksdGhpcy5zdGVuY2lsRnVuY01hc2t9LHNldDpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zdGVuY2lsTWFzayBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnN0ZW5jaWxGdW5jTWFzayBpbnN0ZWFkLiIpLHRoaXMuc3RlbmNpbEZ1bmNNYXNrPXR9fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFBwdC5wcm90b3R5cGUse21ldGFsOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NZXNoUGhvbmdNYXRlcmlhbDogLm1ldGFsIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5NZXNoU3RhbmRhcmRNYXRlcmlhbCBpbnN0ZWFkLiIpLCExfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1lc2hQaG9uZ01hdGVyaWFsOiAubWV0YWwgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLk1lc2hTdGFuZGFyZE1hdGVyaWFsIGluc3RlYWQiKX19fSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoT3B0LnByb3RvdHlwZSx7dHJhbnNwYXJlbmN5OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NZXNoUGh5c2ljYWxNYXRlcmlhbDogLnRyYW5zcGFyZW5jeSBoYXMgYmVlbiByZW5hbWVkIHRvIC50cmFuc21pc3Npb24uIiksdGhpcy50cmFuc21pc3Npb259LHNldDpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLk1lc2hQaHlzaWNhbE1hdGVyaWFsOiAudHJhbnNwYXJlbmN5IGhhcyBiZWVuIHJlbmFtZWQgdG8gLnRyYW5zbWlzc2lvbi4iKSx0aGlzLnRyYW5zbWlzc2lvbj10fX19KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyh5c3QucHJvdG90eXBlLHtkZXJpdmF0aXZlczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuU2hhZGVyTWF0ZXJpYWw6IC5kZXJpdmF0aXZlcyBoYXMgYmVlbiBtb3ZlZCB0byAuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlcy4iKSx0aGlzLmV4dGVuc2lvbnMuZGVyaXZhdGl2ZXN9LHNldDpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLiBTaGFkZXJNYXRlcmlhbDogLmRlcml2YXRpdmVzIGhhcyBiZWVuIG1vdmVkIHRvIC5leHRlbnNpb25zLmRlcml2YXRpdmVzLiIpLHRoaXMuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlcz10fX19KSxPYmplY3QuYXNzaWduKEljdC5wcm90b3R5cGUse2NsZWFyVGFyZ2V0OmZ1bmN0aW9uKHQsZSxuLG8pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmNsZWFyVGFyZ2V0KCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5zZXRSZW5kZXJUYXJnZXQoKSBhbmQgLmNsZWFyKCkgaW5zdGVhZC4iKSx0aGlzLnNldFJlbmRlclRhcmdldCh0KSx0aGlzLmNsZWFyKGUsbixvKX0sYW5pbWF0ZTpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5hbmltYXRlKCkgaXMgbm93IC5zZXRBbmltYXRpb25Mb29wKCkuIiksdGhpcy5zZXRBbmltYXRpb25Mb29wKHQpfSxnZXRDdXJyZW50UmVuZGVyVGFyZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdldEN1cnJlbnRSZW5kZXJUYXJnZXQoKSBpcyBub3cgLmdldFJlbmRlclRhcmdldCgpLiIpLHRoaXMuZ2V0UmVuZGVyVGFyZ2V0KCl9LGdldE1heEFuaXNvdHJvcHk6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2V0TWF4QW5pc290cm9weSgpIGlzIG5vdyAuY2FwYWJpbGl0aWVzLmdldE1heEFuaXNvdHJvcHkoKS4iKSx0aGlzLmNhcGFiaWxpdGllcy5nZXRNYXhBbmlzb3Ryb3B5KCl9LGdldFByZWNpc2lvbjpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRQcmVjaXNpb24oKSBpcyBub3cgLmNhcGFiaWxpdGllcy5wcmVjaXNpb24uIiksdGhpcy5jYXBhYmlsaXRpZXMucHJlY2lzaW9ufSxyZXNldEdMU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAucmVzZXRHTFN0YXRlKCkgaXMgbm93IC5zdGF0ZS5yZXNldCgpLiIpLHRoaXMuc3RhdGUucmVzZXQoKX0sc3VwcG9ydHNGbG9hdFRleHR1cmVzOmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzRmxvYXRUZXh0dXJlcygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdPRVNfdGV4dHVyZV9mbG9hdCcgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJPRVNfdGV4dHVyZV9mbG9hdCIpfSxzdXBwb3J0c0hhbGZGbG9hdFRleHR1cmVzOmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzSGFsZkZsb2F0VGV4dHVyZXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnT0VTX3RleHR1cmVfaGFsZl9mbG9hdCcgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0Iil9LHN1cHBvcnRzU3RhbmRhcmREZXJpdmF0aXZlczpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c1N0YW5kYXJkRGVyaXZhdGl2ZXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzJyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpfSxzdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlUzNUQzpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlUzNUQygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YycgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpfSxzdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlUFZSVEM6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZVBWUlRDKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YycgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKX0sc3VwcG9ydHNCbGVuZE1pbk1heDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0JsZW5kTWluTWF4KCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ0VYVF9ibGVuZF9taW5tYXgnICkuIiksdGhpcy5leHRlbnNpb25zLmdldCgiRVhUX2JsZW5kX21pbm1heCIpfSxzdXBwb3J0c1ZlcnRleFRleHR1cmVzOmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzVmVydGV4VGV4dHVyZXMoKSBpcyBub3cgLmNhcGFiaWxpdGllcy52ZXJ0ZXhUZXh0dXJlcy4iKSx0aGlzLmNhcGFiaWxpdGllcy52ZXJ0ZXhUZXh0dXJlc30sc3VwcG9ydHNJbnN0YW5jZWRBcnJheXM6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNJbnN0YW5jZWRBcnJheXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnQU5HTEVfaW5zdGFuY2VkX2FycmF5cycgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIil9LGVuYWJsZVNjaXNzb3JUZXN0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmVuYWJsZVNjaXNzb3JUZXN0KCkgaXMgbm93IC5zZXRTY2lzc29yVGVzdCgpLiIpLHRoaXMuc2V0U2Npc3NvclRlc3QodCl9LGluaXRNYXRlcmlhbDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmluaXRNYXRlcmlhbCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LGFkZFByZVBsdWdpbjpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmFkZFByZVBsdWdpbigpIGhhcyBiZWVuIHJlbW92ZWQuIil9LGFkZFBvc3RQbHVnaW46ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5hZGRQb3N0UGx1Z2luKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sdXBkYXRlU2hhZG93TWFwOmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAudXBkYXRlU2hhZG93TWFwKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sc2V0RmFjZUN1bGxpbmc6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRGYWNlQ3VsbGluZygpIGhhcyBiZWVuIHJlbW92ZWQuIil9LGFsbG9jVGV4dHVyZVVuaXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5hbGxvY1RleHR1cmVVbml0KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sc2V0VGV4dHVyZTpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNldFRleHR1cmUoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXRUZXh0dXJlMkQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRUZXh0dXJlMkQoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXRUZXh0dXJlQ3ViZTpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNldFRleHR1cmVDdWJlKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sZ2V0QWN0aXZlTWlwTWFwTGV2ZWw6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2V0QWN0aXZlTWlwTWFwTGV2ZWwoKSBpcyBub3cgLmdldEFjdGl2ZU1pcG1hcExldmVsKCkuIiksdGhpcy5nZXRBY3RpdmVNaXBtYXBMZXZlbCgpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEljdC5wcm90b3R5cGUse3NoYWRvd01hcEVuYWJsZWQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNoYWRvd01hcC5lbmFibGVkfSxzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwRW5hYmxlZCBpcyBub3cgLnNoYWRvd01hcC5lbmFibGVkLiIpLHRoaXMuc2hhZG93TWFwLmVuYWJsZWQ9dH19LHNoYWRvd01hcFR5cGU6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNoYWRvd01hcC50eXBlfSxzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwVHlwZSBpcyBub3cgLnNoYWRvd01hcC50eXBlLiIpLHRoaXMuc2hhZG93TWFwLnR5cGU9dH19LHNoYWRvd01hcEN1bGxGYWNlOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBDdWxsRmFjZSBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBDdWxsRmFjZSBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfX0sY29udGV4dDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmNvbnRleHQgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5nZXRDb250ZXh0KCkgaW5zdGVhZC4iKSx0aGlzLmdldENvbnRleHQoKX19LHZyOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAudnIgaGFzIGJlZW4gcmVuYW1lZCB0byAueHIiKSx0aGlzLnhyfX0sZ2FtbWFJbnB1dDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hSW5wdXQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IHRoZSBlbmNvZGluZyBmb3IgdGV4dHVyZXMgdmlhIFRleHR1cmUuZW5jb2RpbmcgaW5zdGVhZC4iKSwhMX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFJbnB1dCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgdGhlIGVuY29kaW5nIGZvciB0ZXh0dXJlcyB2aWEgVGV4dHVyZS5lbmNvZGluZyBpbnN0ZWFkLiIpfX0sZ2FtbWFPdXRwdXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYU91dHB1dCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgV2ViR0xSZW5kZXJlci5vdXRwdXRFbmNvZGluZyBpbnN0ZWFkLiIpLCExfSxzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFPdXRwdXQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IFdlYkdMUmVuZGVyZXIub3V0cHV0RW5jb2RpbmcgaW5zdGVhZC4iKSx0aGlzLm91dHB1dEVuY29kaW5nPSEwPT09dD8zMDAxOk5pdH19LHRvbmVNYXBwaW5nV2hpdGVQb2ludDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnRvbmVNYXBwaW5nV2hpdGVQb2ludCBoYXMgYmVlbiByZW1vdmVkLiIpLDF9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnRvbmVNYXBwaW5nV2hpdGVQb2ludCBoYXMgYmVlbiByZW1vdmVkLiIpfX19KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyh3Y3QucHJvdG90eXBlLHtjdWxsRmFjZTp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLmN1bGxGYWNlIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5jdWxsRmFjZSBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfX0scmVuZGVyUmV2ZXJzZVNpZGVkOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAucmVuZGVyUmV2ZXJzZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5yZW5kZXJSZXZlcnNlU2lkZWQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX19LHJlbmRlclNpbmdsZVNpZGVkOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAucmVuZGVyU2luZ2xlU2lkZWQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLnJlbmRlclNpbmdsZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEppdC5wcm90b3R5cGUse3dyYXBTOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLndyYXBTIGlzIG5vdyAudGV4dHVyZS53cmFwUy4iKSx0aGlzLnRleHR1cmUud3JhcFN9LHNldDpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFMgaXMgbm93IC50ZXh0dXJlLndyYXBTLiIpLHRoaXMudGV4dHVyZS53cmFwUz10fX0sd3JhcFQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFQgaXMgbm93IC50ZXh0dXJlLndyYXBULiIpLHRoaXMudGV4dHVyZS53cmFwVH0sc2V0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwVCBpcyBub3cgLnRleHR1cmUud3JhcFQuIiksdGhpcy50ZXh0dXJlLndyYXBUPXR9fSxtYWdGaWx0ZXI6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAubWFnRmlsdGVyIGlzIG5vdyAudGV4dHVyZS5tYWdGaWx0ZXIuIiksdGhpcy50ZXh0dXJlLm1hZ0ZpbHRlcn0sc2V0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5tYWdGaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1hZ0ZpbHRlci4iKSx0aGlzLnRleHR1cmUubWFnRmlsdGVyPXR9fSxtaW5GaWx0ZXI6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAubWluRmlsdGVyIGlzIG5vdyAudGV4dHVyZS5taW5GaWx0ZXIuIiksdGhpcy50ZXh0dXJlLm1pbkZpbHRlcn0sc2V0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5taW5GaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1pbkZpbHRlci4iKSx0aGlzLnRleHR1cmUubWluRmlsdGVyPXR9fSxhbmlzb3Ryb3B5OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmFuaXNvdHJvcHkgaXMgbm93IC50ZXh0dXJlLmFuaXNvdHJvcHkuIiksdGhpcy50ZXh0dXJlLmFuaXNvdHJvcHl9LHNldDpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuYW5pc290cm9weSBpcyBub3cgLnRleHR1cmUuYW5pc290cm9weS4iKSx0aGlzLnRleHR1cmUuYW5pc290cm9weT10fX0sb2Zmc2V0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm9mZnNldCBpcyBub3cgLnRleHR1cmUub2Zmc2V0LiIpLHRoaXMudGV4dHVyZS5vZmZzZXR9LHNldDpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAub2Zmc2V0IGlzIG5vdyAudGV4dHVyZS5vZmZzZXQuIiksdGhpcy50ZXh0dXJlLm9mZnNldD10fX0scmVwZWF0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnJlcGVhdCBpcyBub3cgLnRleHR1cmUucmVwZWF0LiIpLHRoaXMudGV4dHVyZS5yZXBlYXR9LHNldDpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAucmVwZWF0IGlzIG5vdyAudGV4dHVyZS5yZXBlYXQuIiksdGhpcy50ZXh0dXJlLnJlcGVhdD10fX0sZm9ybWF0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmZvcm1hdCBpcyBub3cgLnRleHR1cmUuZm9ybWF0LiIpLHRoaXMudGV4dHVyZS5mb3JtYXR9LHNldDpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuZm9ybWF0IGlzIG5vdyAudGV4dHVyZS5mb3JtYXQuIiksdGhpcy50ZXh0dXJlLmZvcm1hdD10fX0sdHlwZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC50eXBlIGlzIG5vdyAudGV4dHVyZS50eXBlLiIpLHRoaXMudGV4dHVyZS50eXBlfSxzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnR5cGUgaXMgbm93IC50ZXh0dXJlLnR5cGUuIiksdGhpcy50ZXh0dXJlLnR5cGU9dH19LGdlbmVyYXRlTWlwbWFwczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5nZW5lcmF0ZU1pcG1hcHMgaXMgbm93IC50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcy4iKSx0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzfSxzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmdlbmVyYXRlTWlwbWFwcyBpcyBub3cgLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzLiIpLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9dH19fSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY2xhc3MgZXh0ZW5kcyBRYXR7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IkF1ZGlvIix0aGlzLmxpc3RlbmVyPXQsdGhpcy5jb250ZXh0PXQuY29udGV4dCx0aGlzLmdhaW49dGhpcy5jb250ZXh0LmNyZWF0ZUdhaW4oKSx0aGlzLmdhaW4uY29ubmVjdCh0LmdldElucHV0KCkpLHRoaXMuYXV0b3BsYXk9ITEsdGhpcy5idWZmZXI9bnVsbCx0aGlzLmRldHVuZT0wLHRoaXMubG9vcD0hMSx0aGlzLmxvb3BTdGFydD0wLHRoaXMubG9vcEVuZD0wLHRoaXMub2Zmc2V0PTAsdGhpcy5kdXJhdGlvbj12b2lkIDAsdGhpcy5wbGF5YmFja1JhdGU9MSx0aGlzLmlzUGxheWluZz0hMSx0aGlzLmhhc1BsYXliYWNrQ29udHJvbD0hMCx0aGlzLnNvdXJjZT1udWxsLHRoaXMuc291cmNlVHlwZT0iZW1wdHkiLHRoaXMuX3N0YXJ0ZWRBdD0wLHRoaXMuX3Byb2dyZXNzPTAsdGhpcy5fY29ubmVjdGVkPSExLHRoaXMuZmlsdGVycz1bXX1nZXRPdXRwdXQoKXtyZXR1cm4gdGhpcy5nYWlufXNldE5vZGVTb3VyY2UodCl7cmV0dXJuIHRoaXMuaGFzUGxheWJhY2tDb250cm9sPSExLHRoaXMuc291cmNlVHlwZT0iYXVkaW9Ob2RlIix0aGlzLnNvdXJjZT10LHRoaXMuY29ubmVjdCgpLHRoaXN9c2V0TWVkaWFFbGVtZW50U291cmNlKHQpe3JldHVybiB0aGlzLmhhc1BsYXliYWNrQ29udHJvbD0hMSx0aGlzLnNvdXJjZVR5cGU9Im1lZGlhTm9kZSIsdGhpcy5zb3VyY2U9dGhpcy5jb250ZXh0LmNyZWF0ZU1lZGlhRWxlbWVudFNvdXJjZSh0KSx0aGlzLmNvbm5lY3QoKSx0aGlzfXNldE1lZGlhU3RyZWFtU291cmNlKHQpe3JldHVybiB0aGlzLmhhc1BsYXliYWNrQ29udHJvbD0hMSx0aGlzLnNvdXJjZVR5cGU9Im1lZGlhU3RyZWFtTm9kZSIsdGhpcy5zb3VyY2U9dGhpcy5jb250ZXh0LmNyZWF0ZU1lZGlhU3RyZWFtU291cmNlKHQpLHRoaXMuY29ubmVjdCgpLHRoaXN9c2V0QnVmZmVyKHQpe3JldHVybiB0aGlzLmJ1ZmZlcj10LHRoaXMuc291cmNlVHlwZT0iYnVmZmVyIix0aGlzLmF1dG9wbGF5JiZ0aGlzLnBsYXkoKSx0aGlzfXBsYXkodD0wKXtpZighMD09PXRoaXMuaXNQbGF5aW5nKXJldHVybiB2b2lkIGNvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IEF1ZGlvIGlzIGFscmVhZHkgcGxheWluZy4iKTtpZighMT09PXRoaXMuaGFzUGxheWJhY2tDb250cm9sKXJldHVybiB2b2lkIGNvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIik7dGhpcy5fc3RhcnRlZEF0PXRoaXMuY29udGV4dC5jdXJyZW50VGltZSt0O2NvbnN0IGU9dGhpcy5jb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpO3JldHVybiBlLmJ1ZmZlcj10aGlzLmJ1ZmZlcixlLmxvb3A9dGhpcy5sb29wLGUubG9vcFN0YXJ0PXRoaXMubG9vcFN0YXJ0LGUubG9vcEVuZD10aGlzLmxvb3BFbmQsZS5vbmVuZGVkPXRoaXMub25FbmRlZC5iaW5kKHRoaXMpLGUuc3RhcnQodGhpcy5fc3RhcnRlZEF0LHRoaXMuX3Byb2dyZXNzK3RoaXMub2Zmc2V0LHRoaXMuZHVyYXRpb24pLHRoaXMuaXNQbGF5aW5nPSEwLHRoaXMuc291cmNlPWUsdGhpcy5zZXREZXR1bmUodGhpcy5kZXR1bmUpLHRoaXMuc2V0UGxheWJhY2tSYXRlKHRoaXMucGxheWJhY2tSYXRlKSx0aGlzLmNvbm5lY3QoKX1wYXVzZSgpe2lmKCExIT09dGhpcy5oYXNQbGF5YmFja0NvbnRyb2wpcmV0dXJuITA9PT10aGlzLmlzUGxheWluZyYmKHRoaXMuX3Byb2dyZXNzKz1NYXRoLm1heCh0aGlzLmNvbnRleHQuY3VycmVudFRpbWUtdGhpcy5fc3RhcnRlZEF0LDApKnRoaXMucGxheWJhY2tSYXRlLCEwPT09dGhpcy5sb29wJiYodGhpcy5fcHJvZ3Jlc3M9dGhpcy5fcHJvZ3Jlc3MlKHRoaXMuZHVyYXRpb258fHRoaXMuYnVmZmVyLmR1cmF0aW9uKSksdGhpcy5zb3VyY2Uuc3RvcCgpLHRoaXMuc291cmNlLm9uZW5kZWQ9bnVsbCx0aGlzLmlzUGxheWluZz0hMSksdGhpcztjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpfXN0b3AoKXtpZighMSE9PXRoaXMuaGFzUGxheWJhY2tDb250cm9sKXJldHVybiB0aGlzLl9wcm9ncmVzcz0wLHRoaXMuc291cmNlLnN0b3AoKSx0aGlzLnNvdXJjZS5vbmVuZGVkPW51bGwsdGhpcy5pc1BsYXlpbmc9ITEsdGhpcztjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpfWNvbm5lY3QoKXtpZih0aGlzLmZpbHRlcnMubGVuZ3RoPjApe3RoaXMuc291cmNlLmNvbm5lY3QodGhpcy5maWx0ZXJzWzBdKTtmb3IobGV0IHQ9MSxlPXRoaXMuZmlsdGVycy5sZW5ndGg7dDxlO3QrKyl0aGlzLmZpbHRlcnNbdC0xXS5jb25uZWN0KHRoaXMuZmlsdGVyc1t0XSk7dGhpcy5maWx0ZXJzW3RoaXMuZmlsdGVycy5sZW5ndGgtMV0uY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKX1lbHNlIHRoaXMuc291cmNlLmNvbm5lY3QodGhpcy5nZXRPdXRwdXQoKSk7cmV0dXJuIHRoaXMuX2Nvbm5lY3RlZD0hMCx0aGlzfWRpc2Nvbm5lY3QoKXtpZih0aGlzLmZpbHRlcnMubGVuZ3RoPjApe3RoaXMuc291cmNlLmRpc2Nvbm5lY3QodGhpcy5maWx0ZXJzWzBdKTtmb3IobGV0IHQ9MSxlPXRoaXMuZmlsdGVycy5sZW5ndGg7dDxlO3QrKyl0aGlzLmZpbHRlcnNbdC0xXS5kaXNjb25uZWN0KHRoaXMuZmlsdGVyc1t0XSk7dGhpcy5maWx0ZXJzW3RoaXMuZmlsdGVycy5sZW5ndGgtMV0uZGlzY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKX1lbHNlIHRoaXMuc291cmNlLmRpc2Nvbm5lY3QodGhpcy5nZXRPdXRwdXQoKSk7cmV0dXJuIHRoaXMuX2Nvbm5lY3RlZD0hMSx0aGlzfWdldEZpbHRlcnMoKXtyZXR1cm4gdGhpcy5maWx0ZXJzfXNldEZpbHRlcnModCl7cmV0dXJuIHR8fCh0PVtdKSwhMD09PXRoaXMuX2Nvbm5lY3RlZD8odGhpcy5kaXNjb25uZWN0KCksdGhpcy5maWx0ZXJzPXQuc2xpY2UoKSx0aGlzLmNvbm5lY3QoKSk6dGhpcy5maWx0ZXJzPXQuc2xpY2UoKSx0aGlzfXNldERldHVuZSh0KXtpZih0aGlzLmRldHVuZT10LHZvaWQgMCE9PXRoaXMuc291cmNlLmRldHVuZSlyZXR1cm4hMD09PXRoaXMuaXNQbGF5aW5nJiZ0aGlzLnNvdXJjZS5kZXR1bmUuc2V0VGFyZ2V0QXRUaW1lKHRoaXMuZGV0dW5lLHRoaXMuY29udGV4dC5jdXJyZW50VGltZSwuMDEpLHRoaXN9Z2V0RGV0dW5lKCl7cmV0dXJuIHRoaXMuZGV0dW5lfWdldEZpbHRlcigpe3JldHVybiB0aGlzLmdldEZpbHRlcnMoKVswXX1zZXRGaWx0ZXIodCl7cmV0dXJuIHRoaXMuc2V0RmlsdGVycyh0P1t0XTpbXSl9c2V0UGxheWJhY2tSYXRlKHQpe2lmKCExIT09dGhpcy5oYXNQbGF5YmFja0NvbnRyb2wpcmV0dXJuIHRoaXMucGxheWJhY2tSYXRlPXQsITA9PT10aGlzLmlzUGxheWluZyYmdGhpcy5zb3VyY2UucGxheWJhY2tSYXRlLnNldFRhcmdldEF0VGltZSh0aGlzLnBsYXliYWNrUmF0ZSx0aGlzLmNvbnRleHQuY3VycmVudFRpbWUsLjAxKSx0aGlzO2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIil9Z2V0UGxheWJhY2tSYXRlKCl7cmV0dXJuIHRoaXMucGxheWJhY2tSYXRlfW9uRW5kZWQoKXt0aGlzLmlzUGxheWluZz0hMX1nZXRMb29wKCl7cmV0dXJuITE9PT10aGlzLmhhc1BsYXliYWNrQ29udHJvbD8oY29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKSwhMSk6dGhpcy5sb29wfXNldExvb3AodCl7aWYoITEhPT10aGlzLmhhc1BsYXliYWNrQ29udHJvbClyZXR1cm4gdGhpcy5sb29wPXQsITA9PT10aGlzLmlzUGxheWluZyYmKHRoaXMuc291cmNlLmxvb3A9dGhpcy5sb29wKSx0aGlzO2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIil9c2V0TG9vcFN0YXJ0KHQpe3JldHVybiB0aGlzLmxvb3BTdGFydD10LHRoaXN9c2V0TG9vcEVuZCh0KXtyZXR1cm4gdGhpcy5sb29wRW5kPXQsdGhpc31nZXRWb2x1bWUoKXtyZXR1cm4gdGhpcy5nYWluLmdhaW4udmFsdWV9c2V0Vm9sdW1lKHQpe3JldHVybiB0aGlzLmdhaW4uZ2Fpbi5zZXRUYXJnZXRBdFRpbWUodCx0aGlzLmNvbnRleHQuY3VycmVudFRpbWUsLjAxKSx0aGlzfX0ucHJvdG90eXBlLHtsb2FkOnt2YWx1ZTpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiAubG9hZCBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuQXVkaW9Mb2FkZXIgaW5zdGVhZC4iKTtjb25zdCBlPXRoaXM7cmV0dXJuKG5ldyBRbXQpLmxvYWQodCwoZnVuY3Rpb24odCl7ZS5zZXRCdWZmZXIodCl9KSksdGhpc319LHN0YXJ0VGltZTp7c2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogLnN0YXJ0VGltZSBpcyBub3cgLnBsYXkoIGRlbGF5ICkuIil9fX0pLHZzdC5wcm90b3R5cGUudXBkYXRlQ3ViZU1hcD1mdW5jdGlvbih0LGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkN1YmVDYW1lcmE6IC51cGRhdGVDdWJlTWFwKCkgaXMgbm93IC51cGRhdGUoKS4iKSx0aGlzLnVwZGF0ZSh0LGUpfSx2c3QucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKHQsZSxuLG8pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkN1YmVDYW1lcmE6IC5jbGVhcigpIGlzIG5vdyAucmVuZGVyVGFyZ2V0LmNsZWFyKCkuIiksdGhpcy5yZW5kZXJUYXJnZXQuY2xlYXIodCxlLG4sbyl9LFlpdC5jcm9zc09yaWdpbj12b2lkIDAsWWl0LmxvYWRUZXh0dXJlPWZ1bmN0aW9uKHQsZSxuLG8pe2NvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5sb2FkVGV4dHVyZSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuVGV4dHVyZUxvYWRlcigpIGluc3RlYWQuIik7Y29uc3QgaT1uZXcgaW10O2kuc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbik7Y29uc3QgYT1pLmxvYWQodCxuLHZvaWQgMCxvKTtyZXR1cm4gZSYmKGEubWFwcGluZz1lKSxhfSxZaXQubG9hZFRleHR1cmVDdWJlPWZ1bmN0aW9uKHQsZSxuLG8pe2NvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5sb2FkVGV4dHVyZUN1YmUgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLkN1YmVUZXh0dXJlTG9hZGVyKCkgaW5zdGVhZC4iKTtjb25zdCBpPW5ldyBubXQ7aS5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKTtjb25zdCBhPWkubG9hZCh0LG4sdm9pZCAwLG8pO3JldHVybiBlJiYoYS5tYXBwaW5nPWUpLGF9LFlpdC5sb2FkQ29tcHJlc3NlZFRleHR1cmU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRDb21wcmVzc2VkVGV4dHVyZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuRERTTG9hZGVyIGluc3RlYWQuIil9LFlpdC5sb2FkQ29tcHJlc3NlZFRleHR1cmVDdWJlPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuSW1hZ2VVdGlscy5sb2FkQ29tcHJlc3NlZFRleHR1cmVDdWJlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5ERFNMb2FkZXIgaW5zdGVhZC4iKX0sInVuZGVmaW5lZCIhPXR5cGVvZiBfX1RIUkVFX0RFVlRPT0xTX18mJl9fVEhSRUVfREVWVE9PTFNfXy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgicmVnaXN0ZXIiLHtkZXRhaWw6e3JldmlzaW9uOiIxMjUifX0pKSwidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmKHdpbmRvdy5fX1RIUkVFX18/Y29uc29sZS53YXJuKCJXQVJOSU5HOiBNdWx0aXBsZSBpbnN0YW5jZXMgb2YgVGhyZWUuanMgYmVpbmcgaW1wb3J0ZWQuIik6d2luZG93Ll9fVEhSRUVfXz0iMTI1IiksKGZ1bmN0aW9uKHQpe3RbdC5DSVJDTEU9MF09IkNJUkNMRSIsdFt0LkxJTkU9MV09IkxJTkUiLHRbdC5UUklBTkdMRT0yXT0iVFJJQU5HTEUiLHRbdC5UUkFQRVpPSUQ9M109IlRSQVBFWk9JRCJ9KShFdXR8fChFdXQ9e30pKTtjbGFzcyBGdXR7Y29uc3RydWN0b3IodCxlLG4pe3RoaXMuY29vcmRpbmF0b3I9ZSx0aGlzLnNjZW5lPW5ldyBIY3QsdGhpcy5iYWNrZ3JvdW5kQ29sb3I9IiNmZmYiLHNpdCgpJiZ0IGluc3RhbmNlb2YgT2Zmc2NyZWVuQ2FudmFzJiYodC5zdHlsZT10LnN0eWxlfHx7fSksdGhpcy5yZW5kZXJlcj1uZXcgSWN0KHtjYW52YXM6dCxjb250ZXh0OnQuZ2V0Q29udGV4dCgid2ViZ2wyIix7YW50aWFsaWFzOiEwLHByZWNpc2lvbjoiaGlnaHAiLGFscGhhOiEwfSl9KSx0aGlzLnJlbmRlcmVyLnNldFBpeGVsUmF0aW8obil9b25SZXNpemUodCl7dGhpcy5yZW5kZXJlci5zZXRTaXplKHQud2lkdGgsdC5oZWlnaHQpfWRlc3Ryb3lPYmplY3QodCl7Y29uc3QgZT10Lm9iajNkO2lmKHRoaXMuc2NlbmUucmVtb3ZlKGUpLGUgaW5zdGFuY2VvZiBtc3Qpe2UuZ2VvbWV0cnkuZGlzcG9zZSgpO2NvbnN0IHQ9QXJyYXkuaXNBcnJheShlLm1hdGVyaWFsKT9lLm1hdGVyaWFsOltlLm1hdGVyaWFsXTtmb3IoY29uc3QgZSBvZiB0KWUuZGlzcG9zZSgpfX1zZXRVc2VEYXJrTW9kZSh0KXt0aGlzLmJhY2tncm91bmRDb2xvcj10PyIjMzAzMDMwIjoiI2ZmZiJ9Y3JlYXRlT3JVcGRhdGVMaW5lT2JqZWN0KHQsZSxuKXt2YXIgbztpZighdCYmIW4udmlzaWJsZSlyZXR1cm4gbnVsbDtjb25zdHt2aXNpYmxlOmksd2lkdGg6YX09bjtpZighdCl7Y29uc3QgdD1EdXQodGhpcy5iYWNrZ3JvdW5kQ29sb3Isbi5jb2xvcixudWxsIT09KG89bi5vcGFjaXR5KSYmdm9pZCAwIT09bz9vOjEpLHI9bmV3IFpydCxzPW5ldyBNZHQoe2NvbG9yOnR9KSxsPW5ldyBtc3QocixzKTtyZXR1cm4gcy52aXNpYmxlPWksenV0KHIsZSxhKSx0aGlzLnNjZW5lLmFkZChsKSx7dHlwZTpFdXQuTElORSxkYXRhOmUsb2JqM2Q6bCx3aWR0aDphfX1jb25zdHtkYXRhOnIsb2JqM2Q6cyx3aWR0aDpsfT10O3JldHVybiBIdXQodGhpcy5iYWNrZ3JvdW5kQ29sb3IscywodD0+KGE9PT1sJiZyJiZsaXQocixlKXx8enV0KHQsZSxhKSx0KSksbik/e3R5cGU6RXV0LkxJTkUsZGF0YTplLG9iajNkOnMsd2lkdGg6YX06dH1jcmVhdGVNZXNoKHQsZSl7aWYoIWUudmlzaWJsZSlyZXR1cm4gbnVsbDtjb25zdHt2aXNpYmxlOm4sY29sb3I6byxvcGFjaXR5Oml9PWU7cmV0dXJuIG5ldyBtc3QodCxuZXcgT3J0KHtjb2xvcjpEdXQodGhpcy5iYWNrZ3JvdW5kQ29sb3IsbyxudWxsIT1pP2k6MSksdmlzaWJsZTpufSkpfWNyZWF0ZU9yVXBkYXRlVHJpYW5nbGVPYmplY3QodCxlLG4pe2NvbnN0e3NpemU6b309bixpPW8qTWF0aC5zcXJ0KDMpLzIsYT1uZXcgRmxvYXQzMkFycmF5KFtlLngtby8yLGUueS1pLzMsZS54K28vMixlLnktaS8zLGUueCxlLnkrMippLzNdKTtpZighdCl7Y29uc3QgdD1uZXcgWnJ0O0l1dCh0LGEpO2NvbnN0IG89dGhpcy5jcmVhdGVNZXNoKHQsbik7cmV0dXJuIG51bGw9PT1vP251bGw6KHRoaXMuc2NlbmUuYWRkKG8pLHt0eXBlOkV1dC5UUklBTkdMRSxkYXRhOmUsb2JqM2Q6b30pfXJldHVybiBIdXQodGhpcy5iYWNrZ3JvdW5kQ29sb3IsdC5vYmozZCwodD0+KEl1dCh0LGEpLHQpKSxuKT97dHlwZTpFdXQuVFJJQU5HTEUsZGF0YTplLG9iajNkOnQub2JqM2R9OnR9Y3JlYXRlT3JVcGRhdGVDaXJjbGVPYmplY3QodCxlLG4pe2NvbnN0e3JhZGl1czpvfT1uLGk9bmV3IFVkdChuLnJhZGl1cyk7aWYoIXQpe2NvbnN0IHQ9dGhpcy5jcmVhdGVNZXNoKGksbik7cmV0dXJuIG51bGw9PT10P251bGw6KHQucG9zaXRpb24uc2V0KGUueCxlLnksMCksdGhpcy5zY2VuZS5hZGQodCkse3R5cGU6RXV0LkNJUkNMRSxkYXRhOntsb2M6ZSxyYWRpdXM6b30sb2JqM2Q6dH0pfXJldHVybiBIdXQodGhpcy5iYWNrZ3JvdW5kQ29sb3IsdC5vYmozZCwoKCk9PmkpLG4pPyh0Lm9iajNkLnBvc2l0aW9uLnNldChlLngsZS55LDApLHt0eXBlOkV1dC5DSVJDTEUsZGF0YTp7bG9jOmUscmFkaXVzOm99LG9iajNkOnQub2JqM2R9KTp0fWNyZWF0ZU9yVXBkYXRlVHJhcGV6b2lkT2JqZWN0KHQsZSxuLG8pe2lmKGUueSE9PW4ueSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5wdXQgZXJyb3I6IHN0YXJ0LnkgIT0gZW5kLnkuIik7Y29uc3R7YWx0aXR1ZGU6aX09byxhPTIvTWF0aC5zcXJ0KDMpKmkscj1uZXcga210KFtuZXcgVWl0KGUueC1hLzIsZS55LWkvMiksbmV3IFVpdChlLngsZS55K2kvMiksbmV3IFVpdChuLngsbi55K2kvMiksbmV3IFVpdChuLngrYS8yLG4ueS1pLzIpXSk7ci5hdXRvQ2xvc2U9ITA7Y29uc3Qgcz1uZXcgQ3B0KHIpO2lmKCF0KXtjb25zdCB0PXRoaXMuY3JlYXRlTWVzaChzLG8pO3JldHVybiBudWxsPT09dD9udWxsOih0aGlzLnNjZW5lLmFkZCh0KSx7dHlwZTpFdXQuVFJBUEVaT0lELGRhdGE6W2Usbl0sb2JqM2Q6dH0pfXJldHVybiBIdXQodGhpcy5iYWNrZ3JvdW5kQ29sb3IsdC5vYmozZCwoKCk9PnMpLG8pP3t0eXBlOkV1dC5UUkFQRVpPSUQsZGF0YTpbZSxuXSxvYmozZDp0Lm9iajNkfTp0fWZsdXNoKCl7dGhpcy5yZW5kZXJlci5yZW5kZXIodGhpcy5zY2VuZSx0aGlzLmNvb3JkaW5hdG9yLmdldENhbWVyYSgpKX19Y2xhc3MgTHV0e2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5yZW5kZXJDYWNoZT10LHRoaXMucmVuZGVyZXI9ZX1zZXRMaW5lKHQsZSxuKXtjb25zdCBvPXRoaXMucmVuZGVyZXIuY3JlYXRlT3JVcGRhdGVMaW5lT2JqZWN0KHRoaXMucmVuZGVyQ2FjaGUuZ2V0RnJvbVByZXZpb3VzRnJhbWUodCksZSxuKTtvJiZ0aGlzLnJlbmRlckNhY2hlLnNldFRvQ3VycmVudEZyYW1lKHQsbyl9c2V0VHJpYW5nbGUodCxlLG4pe2NvbnN0IG89dGhpcy5yZW5kZXJlci5jcmVhdGVPclVwZGF0ZVRyaWFuZ2xlT2JqZWN0KHRoaXMucmVuZGVyQ2FjaGUuZ2V0RnJvbVByZXZpb3VzRnJhbWUodCksZSxuKTtvJiZ0aGlzLnJlbmRlckNhY2hlLnNldFRvQ3VycmVudEZyYW1lKHQsbyl9c2V0Q2lyY2xlKHQsZSxuKXtjb25zdCBvPXRoaXMucmVuZGVyZXIuY3JlYXRlT3JVcGRhdGVDaXJjbGVPYmplY3QodGhpcy5yZW5kZXJDYWNoZS5nZXRGcm9tUHJldmlvdXNGcmFtZSh0KSxlLG4pO28mJnRoaXMucmVuZGVyQ2FjaGUuc2V0VG9DdXJyZW50RnJhbWUodCxvKX1zZXRUcmFwZXpvaWQodCxlLG4sbyl7Y29uc3QgaT10aGlzLnJlbmRlcmVyLmNyZWF0ZU9yVXBkYXRlVHJhcGV6b2lkT2JqZWN0KHRoaXMucmVuZGVyQ2FjaGUuZ2V0RnJvbVByZXZpb3VzRnJhbWUodCksZSxuLG8pO2kmJnRoaXMucmVuZGVyQ2FjaGUuc2V0VG9DdXJyZW50RnJhbWUodCxpKX19Y2xhc3MgQnV0e2NvbnN0cnVjdG9yKCl7dGhpcy5wcmV2RnJhbWVDYWNoZT1uZXcgTWFwLHRoaXMuY3VyckZyYW1lQ2FjaGU9bmV3IE1hcH1nZXRGcm9tUHJldmlvdXNGcmFtZSh0KXtjb25zdCBlPXRoaXMucHJldkZyYW1lQ2FjaGUuZ2V0KHQpO3JldHVybiBudWxsIT1lP2U6bnVsbH1zZXRUb0N1cnJlbnRGcmFtZSh0LGUpe3RoaXMuY3VyckZyYW1lQ2FjaGUuc2V0KHQsZSl9ZmluYWxpemVGcmFtZUFuZEdldFJlbW92ZWQoKXtjb25zdCB0PVtdO2Zvcihjb25zdFtlLG5db2YgdGhpcy5wcmV2RnJhbWVDYWNoZS5lbnRyaWVzKCkpdGhpcy5jdXJyRnJhbWVDYWNoZS5oYXMoZSl8fHQucHVzaChuKTtyZXR1cm4gdGhpcy5wcmV2RnJhbWVDYWNoZT10aGlzLmN1cnJGcmFtZUNhY2hlLHRoaXMuY3VyckZyYW1lQ2FjaGU9bmV3IE1hcCx0fX0hKGZ1bmN0aW9uKHQpe3RbdC5OVU1CRVI9MF09Ik5VTUJFUiIsdFt0Lk5BTj0xXT0iTkFOIn0pKEF1dHx8KEF1dD17fSkpO2NsYXNzIFZ1dCBleHRlbmRzIGNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMucmF3U2VyaWVzRGF0YT1bXSx0aGlzLnNlcmllcz1bXSx0aGlzLnBhaW50RGlydHk9ITAsdGhpcy5yZW5kZXJDYWNoZT1uZXcgQnV0LHRoaXMuY29vcmRpbmF0ZUlkZW50aWZpZXI9bnVsbCx0aGlzLmxheW91dD17eDowLHdpZHRoOjEseTowLGhlaWdodDoxfSx0aGlzLmdldE1ldGFkYXRhTWFwSW1wbD10LmdldE1ldGFkYXRhTWFwLHRoaXMuY29vcmRpbmF0b3I9dC5jb29yZGluYXRvcix0aGlzLnJlbmRlcmVyPXQucmVuZGVyZXIsdGhpcy5wYWludEJydXNoPW5ldyBMdXQodGhpcy5yZW5kZXJDYWNoZSx0aGlzLnJlbmRlcmVyKX1zZXRMYXlvdXRSZWN0KHQpe3RoaXMubGF5b3V0Lng9PT10LngmJnRoaXMubGF5b3V0LndpZHRoPT09dC53aWR0aCYmdGhpcy5sYXlvdXQueT09PXQueSYmdGhpcy5sYXlvdXQuaGVpZ2h0PT09dC5oZWlnaHR8fCh0aGlzLnBhaW50RGlydHk9ITApLHRoaXMubGF5b3V0PXR9Z2V0TGF5b3V0UmVjdCgpe3JldHVybiB0aGlzLmxheW91dH1nZXRNZXRhZGF0YU1hcCgpe3JldHVybiB0aGlzLmdldE1ldGFkYXRhTWFwSW1wbCgpfW1hcmtBc1BhaW50RGlydHkoKXt0aGlzLnBhaW50RGlydHk9ITB9cmVuZGVyKCl7aWYodGhpcy50cmFuc2Zvcm1Db29yZGluYXRlc0lmU3RhbGUoKSx0aGlzLnBhaW50RGlydHkpe3RoaXMucmVkcmF3KCk7Zm9yKGNvbnN0IHQgb2YgdGhpcy5yZW5kZXJDYWNoZS5maW5hbGl6ZUZyYW1lQW5kR2V0UmVtb3ZlZCgpKXRoaXMucmVuZGVyZXIuZGVzdHJveU9iamVjdCh0KTt0aGlzLnBhaW50RGlydHk9ITF9fWlzQ29vcmRpbmF0ZVVwZGF0ZWQoKXtyZXR1cm4gdGhpcy5jb29yZGluYXRvci5nZXRVcGRhdGVJZGVudGlmaWVyKCkhPT10aGlzLmNvb3JkaW5hdGVJZGVudGlmaWVyfWNsZWFyQ29vcmRpbmF0ZUlkZW50aWZpZXIoKXt0aGlzLmNvb3JkaW5hdGVJZGVudGlmaWVyPW51bGx9c2V0RGF0YSh0KXt0aGlzLmNsZWFyQ29vcmRpbmF0ZUlkZW50aWZpZXIoKSx0aGlzLnJhd1Nlcmllc0RhdGE9dH10cmFuc2Zvcm1Db29yZGluYXRlc0lmU3RhbGUoKXtpZighdGhpcy5pc0Nvb3JkaW5hdGVVcGRhdGVkKCkpcmV0dXJuO2NvbnN0IHQ9dGhpcy5nZXRMYXlvdXRSZWN0KCk7dGhpcy5zZXJpZXM9bmV3IEFycmF5KHRoaXMucmF3U2VyaWVzRGF0YS5sZW5ndGgpO2ZvcihsZXQgZT0wO2U8dGhpcy5yYXdTZXJpZXNEYXRhLmxlbmd0aDtlKyspe2NvbnN0IG49dGhpcy5yYXdTZXJpZXNEYXRhW2VdO3RoaXMuc2VyaWVzW2VdPXtpZDpuLmlkLHBvbHlsaW5lOm5ldyBGbG9hdDMyQXJyYXkoMipuLnBvaW50cy5sZW5ndGgpfTtmb3IobGV0IG89MDtvPG4ucG9pbnRzLmxlbmd0aDtvKyspe2NvbnN0W2ksYV09dGhpcy5jb29yZGluYXRvci50cmFuc2Zvcm1EYXRhVG9VaUNvb3JkKHQsW24ucG9pbnRzW29dLngsbi5wb2ludHNbb10ueV0pO3RoaXMuc2VyaWVzW2VdLnBvbHlsaW5lWzIqb109aSx0aGlzLnNlcmllc1tlXS5wb2x5bGluZVsyKm8rMV09YX19dGhpcy5jb29yZGluYXRlSWRlbnRpZmllcj10aGlzLmNvb3JkaW5hdG9yLmdldFVwZGF0ZUlkZW50aWZpZXIoKSx0aGlzLm1hcmtBc1BhaW50RGlydHkoKX19e3JlY29yZFBhcnRpdGlvbih0LGUsbil7cmV0dXJuIHQ/e3R5cGU6QXV0Lk5VTUJFUixwb2x5bGluZTplfTp7dHlwZTpBdXQuTkFOLHBvbHlsaW5lOmUubWFwKCgodCxlKT0+aXNOYU4odCk/ZSUyPT0wP24ueDpuLnk6dCkpfX1wYXJ0aXRpb25Qb2x5bGluZSh0KXtjb25zdCBlPVtdO2xldCBuPTAsbz0hMTtjb25zdCBpPXRoaXMuY29vcmRpbmF0b3IudHJhbnNmb3JtRGF0YVRvVWlDb29yZCh0aGlzLmdldExheW91dFJlY3QoKSxbMCwwXSksYT17eDppWzBdLHk6aVsxXX07bGV0IHI9bnVsbDtmb3IobGV0IGk9MDtpPHQubGVuZ3RoO2krPTIpe2NvbnN0IGE9dFtpXSxzPXRbaSsxXSxsPWlzTmFOKGEpfHxpc05hTihzKTtsIT09byYmbiE9PWkmJihlLnB1c2godGhpcy5yZWNvcmRQYXJ0aXRpb24oIW8sdC5zbGljZShuLGkpLG51bGw9PT1yP3t4OmEseTpzfTpyKSksbj1pKSxsfHwocj17eDphLHk6c30pLG89bH1yZXR1cm4gbiE9PXQubGVuZ3RoLTEmJmUucHVzaCh0aGlzLnJlY29yZFBhcnRpdGlvbighbyx0LnNsaWNlKG4sdC5sZW5ndGgpLG51bGwhPXI/cjphKSksZX1yZWRyYXcoKXt2YXIgdCxlLG47Zm9yKGNvbnN0IG8gb2YgdGhpcy5zZXJpZXMpe2NvbnN0IGk9dGhpcy5nZXRNZXRhZGF0YU1hcCgpW28uaWRdO2lmKCFpKWNvbnRpbnVlO2lmKG8ucG9seWxpbmUubGVuZ3RoJTIhPTApdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgaGF2ZSBvZGQgbGVuZ3RoLWVkIHBvbHlsaW5lOiAke28ucG9seWxpbmUubGVuZ3RofWApO2NvbnN0IGE9dGhpcy5wYXJ0aXRpb25Qb2x5bGluZShvLnBvbHlsaW5lKTtmb3IoY29uc3Rbcix7dHlwZTpzLHBvbHlsaW5lOmx9XW9mIGEuZW50cmllcygpKWlmKHM9PT1BdXQuTlVNQkVSKTI9PT1sLmxlbmd0aD90aGlzLnBhaW50QnJ1c2guc2V0Q2lyY2xlKEpTT04uc3RyaW5naWZ5KFsiY2lyY2xlIixvLmlkLHJdKSx7eDpsWzBdLHk6bFsxXX0se2NvbG9yOmkuY29sb3IsdmlzaWJsZTppLnZpc2libGUsb3BhY2l0eTpudWxsIT09KHQ9aS5vcGFjaXR5KSYmdm9pZCAwIT09dD90OjEscmFkaXVzOjR9KTp0aGlzLnBhaW50QnJ1c2guc2V0TGluZShKU09OLnN0cmluZ2lmeShbImxpbmUiLG8uaWQscl0pLGwse2NvbG9yOmkuY29sb3IsdmlzaWJsZTppLnZpc2libGUsb3BhY2l0eTpudWxsIT09KGU9aS5vcGFjaXR5KSYmdm9pZCAwIT09ZT9lOjEsd2lkdGg6Mn0pO2Vsc2UgaWYoIWkuYXV4KWZvcihsZXQgdD0wO3Q8bC5sZW5ndGg7dCs9Mil0aGlzLnBhaW50QnJ1c2guc2V0VHJpYW5nbGUoSlNPTi5zdHJpbmdpZnkoWyJOYU4iLG8uaWQsbFt0XSxsW3QrMV1dKSx7eDpsW3RdLHk6bFt0KzFdfSx7Y29sb3I6aS5jb2xvcix2aXNpYmxlOmkudmlzaWJsZSxvcGFjaXR5Om51bGwhPT0obj1pLm9wYWNpdHkpJiZ2b2lkIDAhPT1uP246MSxzaXplOjEyfSl9fX1jbGFzcyBqdXQgZXh0ZW5kcyBjaXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY2FtZXJhPW5ldyBJbXQoMCwxZTMsMWUzLDAsMCwxMDApfWlzWUF4aXNQb2ludGVkRG93bigpe3JldHVybiExfXNldERvbUNvbnRhaW5lclJlY3QodCl7c3VwZXIuc2V0RG9tQ29udGFpbmVyUmVjdCh0KSx0aGlzLmNhbWVyYS5sZWZ0PXQueCx0aGlzLmNhbWVyYS5yaWdodD10LngrdC53aWR0aCx0aGlzLmNhbWVyYS50b3A9dC55K3QuaGVpZ2h0LHRoaXMuY2FtZXJhLmJvdHRvbT10LnksdGhpcy5jYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfWdldENhbWVyYSgpe3JldHVybiB0aGlzLmNhbWVyYX19Y2xhc3MgVXV0e2NvbnN0cnVjdG9yKHQpe3N3aXRjaCh0aGlzLm1ldGFkYXRhTWFwPXt9LHRoaXMuc2hvdWxkUmVwYWludD0hMSx0aGlzLmNhbGxiYWNrcz10LmNhbGxiYWNrcyx0LnR5cGUpe2Nhc2UgYTUuU1ZHOnRoaXMuY29vcmRpbmF0b3I9bmV3IGNpdCx0aGlzLnJlbmRlcmVyPW5ldyBwaXQodC5jb250YWluZXIpO2JyZWFrO2Nhc2UgYTUuV0VCR0w6e2NvbnN0IGU9bmV3IGp1dDt0aGlzLmNvb3JkaW5hdG9yPWUsdGhpcy5yZW5kZXJlcj1uZXcgRnV0KHQuY29udGFpbmVyLGUsdC5kZXZpY2VQaXhlbFJhdGlvKTticmVha319dGhpcy5yZW5kZXJlci5zZXRVc2VEYXJrTW9kZSh0LnVzZURhcmtNb2RlKSx0aGlzLnNlcmllc0xpbmVWaWV3PW5ldyBWdXQoe3JlbmRlcmVyOnRoaXMucmVuZGVyZXIsY29vcmRpbmF0b3I6dGhpcy5jb29yZGluYXRvcixnZXRNZXRhZGF0YU1hcDooKT0+dGhpcy5tZXRhZGF0YU1hcH0pLHRoaXMucmVzaXplKHQuZG9tRGltZW5zaW9uKX1kaXNwb3NlKCl7fXNldFhTY2FsZVR5cGUodCl7dGhpcy5jb29yZGluYXRvci5zZXRYU2NhbGUobml0KHQpKSx0aGlzLnNjaGVkdWxlUmVwYWludCgpfXNldFlTY2FsZVR5cGUodCl7dGhpcy5jb29yZGluYXRvci5zZXRZU2NhbGUobml0KHQpKSx0aGlzLnNjaGVkdWxlUmVwYWludCgpfXJlc2l6ZSh0KXt0aGlzLmNvb3JkaW5hdG9yLnNldERvbUNvbnRhaW5lclJlY3QoT2JqZWN0LmFzc2lnbih7eDowLHk6MH0sdCkpLHRoaXMucmVuZGVyZXIub25SZXNpemUoT2JqZWN0LmFzc2lnbih7eDowLHk6MH0sdCkpLHRoaXMuc2VyaWVzTGluZVZpZXcuc2V0TGF5b3V0UmVjdChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3g6MCx5OjB9KSksdGhpcy5zY2hlZHVsZVJlcGFpbnQoKX1zZXRNZXRhZGF0YSh0KXtsZXQgZT0hMTtPYmplY3QuZW50cmllcyh0KS5mb3JFYWNoKCgoW3Qsbl0pPT57Y29uc3Qgbz10aGlzLm1ldGFkYXRhTWFwW3RdO28mJm4uY29sb3I9PT1vLmNvbG9yJiZuLnZpc2libGU9PT1vLnZpc2libGUmJm4ub3BhY2l0eT09PW8ub3BhY2l0eXx8KGU9ITApLHRoaXMubWV0YWRhdGFNYXBbdF09bn0pKSxlJiZ0aGlzLnNlcmllc0xpbmVWaWV3Lm1hcmtBc1BhaW50RGlydHkoKSx0aGlzLnNjaGVkdWxlUmVwYWludCgpfXNldFZpZXdCb3godCl7dGhpcy5jb29yZGluYXRvci5zZXRWaWV3Qm94UmVjdCh7eDp0LnhbMF0sd2lkdGg6dC54WzFdLXQueFswXSx5OnQueVswXSxoZWlnaHQ6dC55WzFdLXQueVswXX0pLHRoaXMuc2NoZWR1bGVSZXBhaW50KCl9c2V0RGF0YSh0KXt0aGlzLnNlcmllc0xpbmVWaWV3LnNldERhdGEodCksdGhpcy5zY2hlZHVsZVJlcGFpbnQoKX1zZXRVc2VEYXJrTW9kZSh0KXt0aGlzLnJlbmRlcmVyLnNldFVzZURhcmtNb2RlKHQpLHRoaXMuc2NoZWR1bGVSZXBhaW50KCl9c2NoZWR1bGVSZXBhaW50KCl7dGhpcy5zaG91bGRSZXBhaW50fHwodGhpcy5zaG91bGRSZXBhaW50PSEwLHNlbGYucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgoKT0+e3RoaXMucmVwYWludCgpLHRoaXMuc2hvdWxkUmVwYWludD0hMX0pKSl9cmVwYWludCgpe3RoaXMuc2VyaWVzTGluZVZpZXcucmVuZGVyKCksdGhpcy5yZW5kZXJlci5mbHVzaCgpLHRoaXMuY2FsbGJhY2tzLm9uRHJhd0VuZCgpfX1mdW5jdGlvbiBXdXQodCl7aWYodC5pbmNsdWRlcygiLyIpKXRocm93IG5ldyBSYW5nZUVycm9yKCJXb3JrZXIgZmFjdG9yeSBvbmx5IGFsbG93cyBmaWxlIG5hbWUgYW5kIG5vIHJlc291cmNlIHBhdGguIik7cmV0dXJuIG5ldyBXb3JrZXIodCl9IShmdW5jdGlvbih0KXt0W3QuU0VSSUVTX0RBVEFfVVBEQVRFRD0wXT0iU0VSSUVTX0RBVEFfVVBEQVRFRCIsdFt0LlNFUklFU19NRVRBREFUQV9DSEFOR0VEPTFdPSJTRVJJRVNfTUVUQURBVEFfQ0hBTkdFRCIsdFt0LlNDQUxFX1VQREFURUQ9Ml09IlNDQUxFX1VQREFURUQiLHRbdC5WSUVXX0JPWF9VUERBVEVEPTNdPSJWSUVXX0JPWF9VUERBVEVEIix0W3QuSU5JVD00XT0iSU5JVCIsdFt0LkRPTV9SRVNJWkVEPTVdPSJET01fUkVTSVpFRCIsdFt0LkRBUktfTU9ERV9VUERBVEVEPTZdPSJEQVJLX01PREVfVVBEQVRFRCJ9KShSdXR8fChSdXQ9e30pKSwoZnVuY3Rpb24odCl7dFt0Lk9OX1JFRFJBV19FTkQ9MF09Ik9OX1JFRFJBV19FTkQifSkoVHV0fHwoVHV0PXt9KSk7Y2xhc3MgR3V0e2NvbnN0cnVjdG9yKHQpe2lmKHRoaXMuY2FsbGJhY2tzPXQuY2FsbGJhY2tzLHQudHlwZSE9PWE1LldFQkdMKXRocm93IG5ldyBSYW5nZUVycm9yKGBDYW5ub3QgdXNlIG5vbiBXRUJHTCByZW5kZXJlciBmb3IgdGhlIG9mZnNjcmVlbiBsaW5lIGNoYXJ0LiBSZWNlaXZlZCAke2E1W3QudHlwZV19IGApO2NvbnN0IGU9bmV3IE1lc3NhZ2VDaGFubmVsO2UucG9ydDEub25tZXNzYWdlPXQ9Pnt0aGlzLm9uTWVzc2FnZUZyb21Xb3JrZXIodC5kYXRhKX0sdGhpcy50eE1lc3NhZ2VQb3J0PWUucG9ydDE7Y29uc3Qgbj10LmNvbnRhaW5lci50cmFuc2ZlckNvbnRyb2xUb09mZnNjcmVlbigpO3RoaXMud29ya2VySW5zdGFuY2U9R3V0LndvcmtlclBvb2wuZ2V0TmV4dCgpO2NvbnN0IG89e3R5cGU6UnV0LklOSVQsY2FudmFzOm4sZGV2aWNlUGl4ZWxSYXRpbzp3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyxkaW06dC5kb21EaW1lbnNpb24scmVuZGVyZXJUeXBlOnQudHlwZSx1c2VEYXJrTW9kZTp0LnVzZURhcmtNb2RlfTt0aGlzLndvcmtlckluc3RhbmNlLnBvc3RNZXNzYWdlKG8sW24sZS5wb3J0Ml0pfWRpc3Bvc2UoKXt0aGlzLndvcmtlckluc3RhbmNlLmZyZWUoKSx0aGlzLnR4TWVzc2FnZVBvcnQuY2xvc2UoKX1zZXRYU2NhbGVUeXBlKHQpe3RoaXMuc2VuZE1lc3NhZ2Uoe3R5cGU6UnV0LlNDQUxFX1VQREFURUQsYXhpczoieCIsc2NhbGVUeXBlOnR9KX1zZXRZU2NhbGVUeXBlKHQpe3RoaXMuc2VuZE1lc3NhZ2Uoe3R5cGU6UnV0LlNDQUxFX1VQREFURUQsYXhpczoieSIsc2NhbGVUeXBlOnR9KX1yZXNpemUodCl7dGhpcy5zZW5kTWVzc2FnZSh7dHlwZTpSdXQuRE9NX1JFU0laRUQsZGltOnR9KX1zZXRNZXRhZGF0YSh0KXt0aGlzLnNlbmRNZXNzYWdlKHt0eXBlOlJ1dC5TRVJJRVNfTUVUQURBVEFfQ0hBTkdFRCxtZXRhZGF0YTp0fSl9c2V0Vmlld0JveCh0KXt0aGlzLnNlbmRNZXNzYWdlKHt0eXBlOlJ1dC5WSUVXX0JPWF9VUERBVEVELGV4dGVudDp0fSl9c2V0RGF0YSh0KXtjb25zdCBlPShmdW5jdGlvbiBuKHQpe2NvbnN0IGU9dC5yZWR1Y2UoKCh0LGUpPT50K2UucG9pbnRzLmxlbmd0aCksMCk7bGV0IG49MDtjb25zdCBvPW5ldyBGbG9hdDY0QXJyYXkoMiplKSxpPVtdO2Zvcihjb25zdCBlIG9mIHQpe2kucHVzaCh7aWQ6ZS5pZCxsZW5ndGg6ZS5wb2ludHMubGVuZ3RofSk7Zm9yKGxldCB0PTA7dDxlLnBvaW50cy5sZW5ndGg7dCsrKW9bbisrXT1lLnBvaW50c1t0XS54LG9bbisrXT1lLnBvaW50c1t0XS55fXJldHVybntpZHNBbmRMZW5ndGhzOmksZmxhdHRlbmVkU2VyaWVzOm8uYnVmZmVyfX0pKHQpO3RoaXMuc2VuZE1lc3NhZ2Uoe3R5cGU6UnV0LlNFUklFU19EQVRBX1VQREFURUQsY29tcGFjdERhdGFTZXJpZXM6ZX0sW2UuZmxhdHRlbmVkU2VyaWVzXSl9c2V0VXNlRGFya01vZGUodCl7dGhpcy5zZW5kTWVzc2FnZSh7dHlwZTpSdXQuREFSS19NT0RFX1VQREFURUQsdXNlRGFya01vZGU6dH0pfXNlbmRNZXNzYWdlKHQsZSl7ZT90aGlzLnR4TWVzc2FnZVBvcnQucG9zdE1lc3NhZ2UodCxlKTp0aGlzLnR4TWVzc2FnZVBvcnQucG9zdE1lc3NhZ2UodCl9b25NZXNzYWdlRnJvbVdvcmtlcih0KXtzd2l0Y2godC50eXBlKXtjYXNlIFR1dC5PTl9SRURSQVdfRU5EOnRoaXMuY2FsbGJhY2tzLm9uRHJhd0VuZCgpfX19ZnVuY3Rpb24gWXV0KHQsZSl7cmV0dXJuIngiPT09ZT9bMCx0LndpZHRoXTpbdC5oZWlnaHQsMF19ZnVuY3Rpb24gcXV0KHQsZSl7Y29uc3Qgbj1NYXRoLmZsb29yKHQvNTApO3JldHVybiBNYXRoLm1pbihuLGUpfWZ1bmN0aW9uIFp1dCh0LGUpe2lmKDEmdCYmKEhhKCksd3UoMCwibGluZSIsMikpLDImdCl7Y29uc3QgdD1lLiRpbXBsaWNpdCxuPUx1KCk7YWYoInplcm8iLDA9PT10KSxObSgieDEiLG4uZ2V0RG9tWCh0KSkoIngyIixuLmdldERvbVgodCkpKCJ5MiIsbi5kb21EaW0uaGVpZ2h0KX19ZnVuY3Rpb24gWHV0KHQsZSl7aWYoMSZ0JiYoSGEoKSx3dSgwLCJsaW5lIiwzKSksMiZ0KXtjb25zdCB0PWUuJGltcGxpY2l0LG49THUoKTthZigiemVybyIsMD09PXQpLE5tKCJ5MSIsbi5nZXREb21ZKHQpKSgieDIiLG4uZG9tRGltLndpZHRoKSgieTIiLG4uZ2V0RG9tWSh0KSl9fUd1dC53b3JrZXJQb29sPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGU9MTAsbj1XdXQpe3RoaXMud29ya2VyUmVzb3VyY2VQYXRoPXQsdGhpcy5tYXhQb29sU2l6ZT1lLHRoaXMud29ya2VyRmFjdG9yeT1uLHRoaXMud29ya2Vycz1bXX1nZXROZXh0KCl7bGV0IHQ7aWYodGhpcy53b3JrZXJzLmV2ZXJ5KCgoe2FjdGl2ZUNvdW50OnR9KT0+dD4wKSkmJnRoaXMud29ya2Vycy5sZW5ndGg8dGhpcy5tYXhQb29sU2l6ZSl7Y29uc3QgZT10aGlzLndvcmtlckZhY3RvcnkodGhpcy53b3JrZXJSZXNvdXJjZVBhdGgpO3Q9e2FjdGl2ZUNvdW50OjAscG9zdE1lc3NhZ2U6KHQsbik9PntlLnBvc3RNZXNzYWdlKHQsbil9LGZyZWU6KCk9Pnt0LmFjdGl2ZUNvdW50PU1hdGgubWF4KHQuYWN0aXZlQ291bnQtMSwwKX19LHRoaXMud29ya2Vycy5wdXNoKHQpfWVsc2V7Y29uc3QgZT10aGlzLndvcmtlcnMubWFwKCgoe2FjdGl2ZUNvdW50OnR9KT0+dCkpLG49ZS5pbmRleE9mKE1hdGgubWluKC4uLmUpKTt0PXRoaXMud29ya2Vyc1tuXX1yZXR1cm4gdC5hY3RpdmVDb3VudCsrLHR9fSgiY2hhcnRfd29ya2VyLmpzP19maWxlX2hhc2g9ZmM2Y2QyMzYiKTtjbGFzcyBLdXR7Z2V0RG9tWCh0KXtyZXR1cm4gdGhpcy54U2NhbGUuZm9yd2FyZCh0aGlzLnZpZXdFeHRlbnQueCxZdXQodGhpcy5kb21EaW0sIngiKSx0KX1nZXREb21ZKHQpe3JldHVybiB0aGlzLnlTY2FsZS5mb3J3YXJkKHRoaXMudmlld0V4dGVudC55LFl1dCh0aGlzLmRvbURpbSwieSIpLHQpfWdldFhUaWNrcygpe3JldHVybiB0aGlzLnhTY2FsZS50aWNrcyh0aGlzLnZpZXdFeHRlbnQueCxxdXQodGhpcy5kb21EaW0ud2lkdGgsdGhpcy54R3JpZENvdW50KSl9Z2V0WVRpY2tzKCl7cmV0dXJuIHRoaXMueVNjYWxlLnRpY2tzKHRoaXMudmlld0V4dGVudC55LHF1dCh0aGlzLmRvbURpbS5oZWlnaHQsdGhpcy55R3JpZENvdW50KSl9fWZ1bmN0aW9uIEp1dCh0LGUsbixvLGksYSl7bGV0IHI7c3dpdGNoKHQuZGVsdGFNb2RlKXtjYXNlIFdoZWVsRXZlbnQuRE9NX0RFTFRBX1BJWEVMOnI9MTticmVhaztjYXNlIFdoZWVsRXZlbnQuRE9NX0RFTFRBX0xJTkU6cj04O2JyZWFrO2Nhc2UgV2hlZWxFdmVudC5ET01fREVMVEFfUEFHRTpyPTIwO2JyZWFrO2RlZmF1bHQ6cj0xLGNvbnNvbGUud2FybihgVW5rbm93biBXaGVlbEV2ZW50IGRlbHRhTW9kZTogJHt0LmRlbHRhTW9kZX0uYCl9Y29uc3Qgcz10LmRlbHRhWSpyLGw9czwwP01hdGgubWF4KHMqbywtLjk1KTpzKm8se3dpZHRoOmMsaGVpZ2h0OmR9PW4scD1baS5yZXZlcnNlKGUueCxbMCxjXSwtdC5vZmZzZXRYKmwpLGkucmV2ZXJzZShlLngsWzAsY10sYysoYy10Lm9mZnNldFgpKmwpXSxtPVthLnJldmVyc2UoZS55LFtkLDBdLC10Lm9mZnNldFkqbCksYS5yZXZlcnNlKGUueSxbZCwwXSxkKyhkLXQub2Zmc2V0WSkqbCldO3JldHVybnt4OnBbMV08cFswXT9bcFsxXSxwWzBdXTpwLHk6bVsxXTxtWzBdP1ttWzFdLG1bMF1dOm19fUt1dC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8S3V0KX0sS3V0Lsm1Y21wPVVvKHt0eXBlOkt1dCxzZWxlY3RvcnM6W1sibGluZS1jaGFydC1ncmlkLXZpZXciXV0saW5wdXRzOnt2aWV3RXh0ZW50OiJ2aWV3RXh0ZW50Iix4U2NhbGU6InhTY2FsZSIseEdyaWRDb3VudDoieEdyaWRDb3VudCIseVNjYWxlOiJ5U2NhbGUiLHlHcmlkQ291bnQ6InlHcmlkQ291bnQiLGRvbURpbToiZG9tRGltIn0sZGVjbHM6Myx2YXJzOjIsY29uc3RzOltbInkxIiwiMCIsMywiemVybyIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJ4MSIsIjAiLDMsInplcm8iLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsieTEiLCIwIl0sWyJ4MSIsIjAiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKEhhKCksT3UoMCwic3ZnIiksV20oMSxadXQsMSw1LCJsaW5lIiwwKSxXbSgyLFh1dCwxLDUsImxpbmUiLDEpLFB1KCkpLDImZSYmKEpjKDEpLHZ1KCJuZ0Zvck9mIixuLmdldFhUaWNrcygpKSxKYygxKSx2dSgibmdGb3JPZiIsbi5nZXRZVGlja3MoKSkpfSxkaXJlY3RpdmVzOltvdl0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICB9XG5cbiAgICAgIHN2Z1tfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgfVxuXG4gICAgICBsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIHN0cm9rZTogI2NjYztcbiAgICAgICAgc3Ryb2tlLXdpZHRoOiAxcHg7XG4gICAgICB9XG5cbiAgICAgIC56ZXJvW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIHN0cm9rZTogI2FhYTtcbiAgICAgICAgc3Ryb2tlLXdpZHRoOiAxLjVweDtcbiAgICAgIH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoS3V0LFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6ImxpbmUtY2hhcnQtZ3JpZC12aWV3Iix0ZW1wbGF0ZTonPHN2Zz5cbiAgICA8bGluZVxuICAgICAgKm5nRm9yPSJsZXQgdGljayBvZiBnZXRYVGlja3MoKSJcbiAgICAgIFtjbGFzcy56ZXJvXT0idGljayA9PT0gMCJcbiAgICAgIFthdHRyLngxXT0iZ2V0RG9tWCh0aWNrKSJcbiAgICAgIHkxPSIwIlxuICAgICAgW2F0dHIueDJdPSJnZXREb21YKHRpY2spIlxuICAgICAgW2F0dHIueTJdPSJkb21EaW0uaGVpZ2h0IlxuICAgID48L2xpbmU+XG4gICAgPGxpbmVcbiAgICAgICpuZ0Zvcj0ibGV0IHRpY2sgb2YgZ2V0WVRpY2tzKCkiXG4gICAgICBbY2xhc3MuemVyb109InRpY2sgPT09IDAiXG4gICAgICB4MT0iMCJcbiAgICAgIFthdHRyLnkxXT0iZ2V0RG9tWSh0aWNrKSJcbiAgICAgIFthdHRyLngyXT0iZG9tRGltLndpZHRoIlxuICAgICAgW2F0dHIueTJdPSJnZXREb21ZKHRpY2spIlxuICAgID48L2xpbmU+XG4gIDwvc3ZnPicsc3R5bGVzOlsiXG4gICAgICA6aG9zdCB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICB9XG5cbiAgICAgIHN2ZyB7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICB9XG5cbiAgICAgIGxpbmUge1xuICAgICAgICBzdHJva2U6ICNjY2M7XG4gICAgICAgIHN0cm9rZS13aWR0aDogMXB4O1xuICAgICAgfVxuXG4gICAgICAuemVybyB7XG4gICAgICAgIHN0cm9rZTogI2FhYTtcbiAgICAgICAgc3Ryb2tlLXdpZHRoOiAxLjVweDtcbiAgICAgIH1cbiAgICAiXSxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSxudWxsLHt2aWV3RXh0ZW50Olt7dHlwZTp5X31dLHhTY2FsZTpbe3R5cGU6eV99XSx4R3JpZENvdW50Olt7dHlwZTp5X31dLHlTY2FsZTpbe3R5cGU6eV99XSx5R3JpZENvdW50Olt7dHlwZTp5X31dLGRvbURpbTpbe3R5cGU6eV99XX0pLChmdW5jdGlvbih0KXt0W3QuTEVGVD0xXT0iTEVGVCIsdFt0LlJJR0hUPTJdPSJSSUdIVCIsdFt0Lk1JRERMRT00XT0iTUlERExFIix0W3QuRk9VUlRIPThdPSJGT1VSVEgiLHRbdC5GSUZUSD0zMl09IkZJRlRIIn0pKE51dHx8KE51dD17fSkpO2NvbnN0IFF1dD1bImRvdHMiXTtmdW5jdGlvbiAkdXQodCxlKXtpZigxJnQmJihIYSgpLHd1KDAsImNpcmNsZSIsMTIpKSwyJnQpe2NvbnN0IHQ9THUoKS4kaW1wbGljaXQsZT1MdSgyKTtObSgiY3giLGUuZ2V0RG9tWCh0LnBvaW50LngpKSgiY3kiLGUuZ2V0RG9tWSh0LnBvaW50LnkpKSgiZmlsbCIsdC5tZXRhZGF0YS5jb2xvcil9fWZ1bmN0aW9uIHRmdCh0LGUpe2lmKDEmdCYmKEhhKCksa3UoMCksV20oMSwkdXQsMSwzLCJjaXJjbGUiLDExKSxTdSgpKSwyJnQpe2NvbnN0IHQ9ZS4kaW1wbGljaXQsbj1MdSgyKTtKYygxKSx2dSgibmdJZiIsbi5zaG91bGRSZW5kZXJUb29sdGlwUG9pbnQodC5wb2ludCkpfX1mdW5jdGlvbiBlZnQodCxlKXtpZigxJnQmJihIYSgpLGt1KDApLFdtKDEsdGZ0LDIsMSwibmctY29udGFpbmVyIiwxMCksU3UoKSksMiZ0KXtjb25zdCB0PUx1KCk7SmMoMSksdnUoIm5nRm9yT2YiLHQuY3Vyc29yZWREYXRhKSgibmdGb3JUcmFja0J5Iix0LnRyYWNrQnlTZXJpZXNOYW1lKX19ZnVuY3Rpb24gbmZ0KHQsZSl7aWYoMSZ0JiYoSGEoKSx3dSgwLCJyZWN0IiwxMykpLDImdCl7Y29uc3QgdD1MdSgpO05tKCJ4Iix0Lnpvb21Cb3hJblVpQ29vcmRpbmF0ZS54KSgid2lkdGgiLHQuem9vbUJveEluVWlDb29yZGluYXRlLndpZHRoKSgieSIsdC56b29tQm94SW5VaUNvb3JkaW5hdGUueSkoImhlaWdodCIsdC56b29tQm94SW5VaUNvb3JkaW5hdGUuaGVpZ2h0KX19Y29uc3Qgb2Z0PWZ1bmN0aW9uKHQsZSl7cmV0dXJue2RhdGE6dCxjdXJzb3JMb2NhdGlvbkluRGF0YUNvb3JkOmV9fTtmdW5jdGlvbiBpZnQodCxlKXtpZigxJnQmJihPdSgwLCJkaXYiLDE0KSxEdSgxLDE1KSxQdSgpKSwyJnQpe2NvbnN0IHQ9THUoKSxlPUdtKDExKTtKYygxKSx2dSgibmdUZW1wbGF0ZU91dGxldCIsdC50b29sdGlwVGVtcGxhdGU/dC50b29sdGlwVGVtcGxhdGU6ZSkoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixoYigyLG9mdCx0LmN1cnNvcmVkRGF0YSx0LmN1cnNvckxvY2F0aW9uSW5EYXRhQ29vcmQpKX19ZnVuY3Rpb24gYWZ0KHQsZSl7aWYoMSZ0JiYoa3UoMCksT3UoMSwidHIiLDE3KSxPdSgyLCJ0ZCIsMTgpLHd1KDMsInNwYW4iKSxQdSgpLE91KDQsInRkIiwxOSksTWYoNSksUHUoKSxPdSg2LCJ0ZCIpLE1mKDcpLFB1KCksT3UoOCwidGQiKSxNZig5KSxQdSgpLFB1KCksU3UoKSksMiZ0KXtjb25zdCB0PWUuJGltcGxpY2l0O0pjKDMpLG9mKCJiYWNrZ3JvdW5kLWNvbG9yIix0Lm1ldGFkYXRhLmNvbG9yKSxKYygyKSx2Zih0Lm1ldGFkYXRhLmRpc3BsYXlOYW1lKSxKYygyKSx2Zih0LnBvaW50LnkpLEpjKDIpLHZmKHQucG9pbnQueCl9fWZ1bmN0aW9uIHJmdCh0LGUpe2lmKDEmdCYmKE91KDAsInRhYmxlIiksT3UoMSwidGhlYWQiKSxPdSgyLCJ0ciIpLHd1KDMsInRoIiwxNiksT3UoNCwidGgiKSxNZig1LCJOYW1lIiksUHUoKSxPdSg2LCJ0aCIpLE1mKDcsIlkiKSxQdSgpLE91KDgsInRoIiksTWYoOSwiWCIpLFB1KCksUHUoKSxQdSgpLE91KDEwLCJ0Ym9keSIpLFdtKDExLGFmdCwxMCw1LCJuZy1jb250YWluZXIiLDEwKSxQdSgpLFB1KCkpLDImdCl7Y29uc3QgdD1lLmRhdGEsbj1MdSgpO0pjKDExKSx2dSgibmdGb3JPZiIsdCkoIm5nRm9yVHJhY2tCeSIsbi50cmFja0J5U2VyaWVzTmFtZSl9fXZhciBzZnQ7ZnVuY3Rpb24gbGZ0KHQpe3JldHVybiB0LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpfSEoZnVuY3Rpb24odCl7dFt0Lk5PTkU9MF09Ik5PTkUiLHRbdC5EUkFHX1pPT01JTkc9MV09IkRSQUdfWk9PTUlORyIsdFt0LlNDUk9MTF9aT09NSU5HPTJdPSJTQ1JPTExfWk9PTUlORyIsdFt0LlBBTk5JTkc9M109IlBBTk5JTkcifSkoc2Z0fHwoc2Z0PXt9KSk7Y2xhc3MgY2Z0e2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5jaGFuZ2VEZXRlY3Rvcj10LHRoaXMuc2Nyb2xsU3RyYXRlZ3k9ZSx0aGlzLm9uVmlld0V4dGVudENoYW5nZT1uZXcgQWIsdGhpcy5vblZpZXdFeHRlbnRSZXNldD1uZXcgQWIsdGhpcy5JbnRlcmFjdGlvblN0YXRlPXNmdCx0aGlzLnN0YXRlPXNmdC5OT05FLHRoaXMuc3BlY2lhbEtleVByZXNzZWQ9ITEsdGhpcy56b29tQm94SW5VaUNvb3JkaW5hdGU9e3g6MCx3aWR0aDowLGhlaWdodDowLHk6MH0sdGhpcy50b29sdGlwUG9zaXRpb25zPVt7b2Zmc2V0WTo1LG9yaWdpblg6InN0YXJ0IixvdmVybGF5WDoic3RhcnQiLG9yaWdpblk6ImJvdHRvbSIsb3ZlcmxheVk6InRvcCJ9LHtvZmZzZXRZOjUsb3JpZ2luWDoiZW5kIixvdmVybGF5WDoiZW5kIixvcmlnaW5ZOiJib3R0b20iLG92ZXJsYXlZOiJ0b3AifSx7b2Zmc2V0WTotMTUsb3JpZ2luWDoic3RhcnQiLG92ZXJsYXlYOiJzdGFydCIsb3JpZ2luWToidG9wIixvdmVybGF5WToiYm90dG9tIn0se29mZnNldFk6LTE1LG9yaWdpblg6ImVuZCIsb3ZlcmxheVg6ImVuZCIsb3JpZ2luWToidG9wIixvdmVybGF5WToiYm90dG9tIn0se29mZnNldFg6NSxvcmlnaW5YOiJlbmQiLG92ZXJsYXlYOiJzdGFydCIsb3JpZ2luWToidG9wIixvdmVybGF5WToidG9wIn0se29mZnNldFg6LTUsb3JpZ2luWDoic3RhcnQiLG92ZXJsYXlYOiJlbmQiLG9yaWdpblk6InRvcCIsb3ZlcmxheVk6InRvcCJ9XSx0aGlzLmN1cnNvckxvY2F0aW9uSW5EYXRhQ29vcmQ9bnVsbCx0aGlzLmN1cnNvcmVkRGF0YT1bXSx0aGlzLnRvb2x0aXBEaXNwbGF5QXR0YWNoZWQ9ITEsdGhpcy5zaG93Wm9vbUluc3RydWN0aW9uPSExLHRoaXMuZHJhZ1N0YXJ0Q29vcmQ9bnVsbCx0aGlzLmlzQ3Vyc29ySW5zaWRlPSExLHRoaXMubmdVbnN1YnNjcmliZT1uZXcgeH1uZ0FmdGVyVmlld0luaXQoKXtWdCh0aGlzLmRvdHNDb250YWluZXIubmF0aXZlRWxlbWVudCwiZGJsY2xpY2siLHtwYXNzaXZlOiEwfSkucGlwZSh1bih0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5vblZpZXdFeHRlbnRSZXNldC5lbWl0KCksdGhpcy5zdGF0ZT1zZnQuTk9ORSx0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpfSkpLFZ0KHdpbmRvdywia2V5ZG93biIse3Bhc3NpdmU6ITB9KS5waXBlKHVuKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgodD0+e2NvbnN0IGU9dGhpcy5zaG91bGRQYW4odCk7ZSE9PXRoaXMuc3BlY2lhbEtleVByZXNzZWQmJih0aGlzLnNwZWNpYWxLZXlQcmVzc2VkPWUsdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKSl9KSksVnQod2luZG93LCJrZXl1cCIse3Bhc3NpdmU6ITB9KS5waXBlKHVuKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgodD0+e2NvbnN0IGU9dGhpcy5zaG91bGRQYW4odCk7ZSE9PXRoaXMuc3BlY2lhbEtleVByZXNzZWQmJih0aGlzLnNwZWNpYWxLZXlQcmVzc2VkPWUsdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKSl9KSksVnQodGhpcy5kb3RzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsIm1vdXNlZG93biIse3Bhc3NpdmU6ITB9KS5waXBlKHVuKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgodD0+e2NvbnN0IGU9dGhpcy5zdGF0ZSxuPXRoaXMuc2hvdWxkUGFuKHQpP3NmdC5QQU5OSU5HOnNmdC5EUkFHX1pPT01JTkc7ZT09PXNmdC5OT05FJiZuPT09c2Z0LkRSQUdfWk9PTUlORyYmKHRoaXMuZHJhZ1N0YXJ0Q29vcmQ9e3g6dC5vZmZzZXRYLHk6dC5vZmZzZXRZfSx0aGlzLnpvb21Cb3hJblVpQ29vcmRpbmF0ZT17eDp0Lm9mZnNldFgsd2lkdGg6MCx5OnQub2Zmc2V0WSxoZWlnaHQ6MH0pLGUhPT1uJiYodGhpcy5zdGF0ZT1uLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCkpfSkpLFZ0KHRoaXMuZG90c0NvbnRhaW5lci5uYXRpdmVFbGVtZW50LCJtb3VzZXVwIix7cGFzc2l2ZTohMH0pLnBpcGUodW4odGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKCh0PT57Y29uc3QgZT0odC5idXR0b25zJk51dC5MRUZUKT09PU51dC5MRUZUO3RoaXMuZHJhZ1N0YXJ0Q29vcmQ9bnVsbDtjb25zdCBuPXRoaXMuem9vbUJveEluVWlDb29yZGluYXRlO2lmKCFlJiZ0aGlzLnN0YXRlPT09c2Z0LkRSQUdfWk9PTUlORyYmbi53aWR0aD4wJiZuLmhlaWdodD4wKXtjb25zdCB0PXRoaXMuZ2V0RGF0YVgobi54KSxlPXRoaXMuZ2V0RGF0YVgobi54K24ud2lkdGgpLG89dGhpcy5nZXREYXRhWShuLnkrbi5oZWlnaHQpLGk9dGhpcy5nZXREYXRhWShuLnkpO3RoaXMub25WaWV3RXh0ZW50Q2hhbmdlLmVtaXQoe2RhdGFFeHRlbnQ6e3g6W3QsZV0seTpbbyxpXX19KX10aGlzLnN0YXRlIT09c2Z0Lk5PTkUmJih0aGlzLnN0YXRlPXNmdC5OT05FLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCkpfSkpLFZ0KHRoaXMuZG90c0NvbnRhaW5lci5uYXRpdmVFbGVtZW50LCJtb3VzZWVudGVyIix7cGFzc2l2ZTohMH0pLnBpcGUodW4odGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKCh0PT57dGhpcy5pc0N1cnNvckluc2lkZT0hMCx0aGlzLnVwZGF0ZVRvb2x0aXAodCksdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKX0pKSxWdCh0aGlzLmRvdHNDb250YWluZXIubmF0aXZlRWxlbWVudCwibW91c2VsZWF2ZSIse3Bhc3NpdmU6ITB9KS5waXBlKHVuKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgodD0+e3RoaXMuZHJhZ1N0YXJ0Q29vcmQ9bnVsbCx0aGlzLmlzQ3Vyc29ySW5zaWRlPSExLHRoaXMudXBkYXRlVG9vbHRpcCh0KSx0aGlzLnN0YXRlPXNmdC5OT05FLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCl9KSksVnQodGhpcy5kb3RzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsIm1vdXNlbW92ZSIse3Bhc3NpdmU6ITB9KS5waXBlKHVuKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgodD0+e3N3aXRjaCh0aGlzLnN0YXRlKXtjYXNlIHNmdC5TQ1JPTExfWk9PTUlORzp0aGlzLnN0YXRlPXNmdC5OT05FLHRoaXMudXBkYXRlVG9vbHRpcCh0KSx0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO2JyZWFrO2Nhc2Ugc2Z0Lk5PTkU6dGhpcy51cGRhdGVUb29sdGlwKHQpLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7YnJlYWs7Y2FzZSBzZnQuUEFOTklORzp7Y29uc3QgZT0tdC5tb3ZlbWVudFgsbj0tdC5tb3ZlbWVudFkse3dpZHRoOm8saGVpZ2h0Oml9PXRoaXMuZG9tRGltLGE9dGhpcy5nZXREYXRhWChlKSxyPXRoaXMuZ2V0RGF0YVgobytlKSxzPXRoaXMuZ2V0RGF0YVkoaStuKSxsPXRoaXMuZ2V0RGF0YVkobik7dGhpcy5vblZpZXdFeHRlbnRDaGFuZ2UuZW1pdCh7ZGF0YUV4dGVudDp7eDpbYSxyXSx5OltzLGxdfX0pO2JyZWFrfWNhc2Ugc2Z0LkRSQUdfWk9PTUlORzp7aWYoIXRoaXMuZHJhZ1N0YXJ0Q29vcmQpYnJlYWs7Y29uc3QgZT1bdGhpcy5kcmFnU3RhcnRDb29yZC54LHQub2Zmc2V0WF0sbj1bdGhpcy5kcmFnU3RhcnRDb29yZC55LHQub2Zmc2V0WV07dGhpcy56b29tQm94SW5VaUNvb3JkaW5hdGU9e3g6TWF0aC5taW4oLi4uZSksd2lkdGg6TWF0aC5tYXgoLi4uZSktTWF0aC5taW4oLi4uZSkseTpNYXRoLm1pbiguLi5uKSxoZWlnaHQ6TWF0aC5tYXgoLi4ubiktTWF0aC5taW4oLi4ubil9fXRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCl9fSkpLFZ0KHRoaXMuZG90c0NvbnRhaW5lci5uYXRpdmVFbGVtZW50LCJ3aGVlbCIse3Bhc3NpdmU6ITF9KS5waXBlKHVuKHRoaXMubmdVbnN1YnNjcmliZSksZG4oKHQ9Pntjb25zdCBlPSF0LmN0cmxLZXkmJiF0LnNoaWZ0S2V5JiZ0LmFsdEtleTtyZXR1cm4gdGhpcy5zaG93Wm9vbUluc3RydWN0aW9uPSFlLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCksZT8odC5wcmV2ZW50RGVmYXVsdCgpLFoodCkpOlp0KDNlMykucGlwZShfbigoKCk9Pnt0aGlzLnNob3dab29tSW5zdHJ1Y3Rpb249ITEsdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKX0pKSxodCgoKCk9Pm51bGwpKSl9KSksR3QoKHQ9PkJvb2xlYW4odCkpKSkuc3Vic2NyaWJlKCh0PT57dGhpcy5vblZpZXdFeHRlbnRDaGFuZ2UuZW1pdCh7ZGF0YUV4dGVudDpKdXQodCx0aGlzLnZpZXdFeHRlbnQsdGhpcy5kb21EaW0sLjAxLHRoaXMueFNjYWxlLHRoaXMueVNjYWxlKX0pLHRoaXMuc3RhdGUhPT1zZnQuU0NST0xMX1pPT01JTkcmJih0aGlzLnN0YXRlPXNmdC5TQ1JPTExfWk9PTUlORyx0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpKX0pKX1uZ09uQ2hhbmdlcygpe3RoaXMudXBkYXRlQ3Vyc29yZWREYXRhQW5kVG9vbHRpcFZpc2liaWxpdHkoKX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9c2hvdWxkUGFuKHQpe2NvbnN0IGU9dC5zaGlmdEtleXx8dC5hbHRLZXk7aWYodCBpbnN0YW5jZW9mIEtleWJvYXJkRXZlbnQpcmV0dXJuIGU7Y29uc3Qgbj0odC5idXR0b25zJk51dC5MRUZUKT09PU51dC5MRUZULG89KHQuYnV0dG9ucyZOdXQuTUlERExFKT09PU51dC5NSURETEU7cmV0dXJuISghbiYmIW8pJiYobyYmIW58fGUpfXRyYWNrQnlTZXJpZXNOYW1lKHQsZSl7cmV0dXJuIGUuaWR9Z2V0RG9tWCh0KXtyZXR1cm4gdGhpcy54U2NhbGUuZm9yd2FyZCh0aGlzLnZpZXdFeHRlbnQueCxZdXQodGhpcy5kb21EaW0sIngiKSx0KX1nZXREYXRhWCh0KXtyZXR1cm4gdGhpcy54U2NhbGUucmV2ZXJzZSh0aGlzLnZpZXdFeHRlbnQueCxZdXQodGhpcy5kb21EaW0sIngiKSx0KX1nZXREb21ZKHQpe3JldHVybiB0aGlzLnlTY2FsZS5mb3J3YXJkKHRoaXMudmlld0V4dGVudC55LFl1dCh0aGlzLmRvbURpbSwieSIpLHQpfWdldERhdGFZKHQpe3JldHVybiB0aGlzLnlTY2FsZS5yZXZlcnNlKHRoaXMudmlld0V4dGVudC55LFl1dCh0aGlzLmRvbURpbSwieSIpLHQpfXNob3VsZFJlbmRlclRvb2x0aXBQb2ludCh0KXtyZXR1cm4gbnVsbCE9PXQmJiFpc05hTih0LngpJiYhaXNOYU4odC55KX11cGRhdGVUb29sdGlwKHQpe3RoaXMuY3Vyc29yTG9jYXRpb25JbkRhdGFDb29yZD17eDp0aGlzLmdldERhdGFYKHQub2Zmc2V0WCkseTp0aGlzLmdldERhdGFZKHQub2Zmc2V0WSl9LHRoaXMudXBkYXRlQ3Vyc29yZWREYXRhQW5kVG9vbHRpcFZpc2liaWxpdHkoKX1vblRvb2x0aXBEaXNwbGF5RGV0YWNoZWQoKXt0aGlzLnRvb2x0aXBEaXNwbGF5QXR0YWNoZWQ9ITF9dXBkYXRlQ3Vyc29yZWREYXRhQW5kVG9vbHRpcFZpc2liaWxpdHkoKXtjb25zdCB0PXRoaXMuY3Vyc29yTG9jYXRpb25JbkRhdGFDb29yZDtpZihudWxsPT09dClyZXR1cm4gdGhpcy5jdXJzb3JlZERhdGE9W10sdm9pZCh0aGlzLnRvb2x0aXBEaXNwbGF5QXR0YWNoZWQ9ITEpO3RoaXMuY3Vyc29yZWREYXRhPXRoaXMuaXNDdXJzb3JJbnNpZGU/dGhpcy5zZXJpZXNEYXRhLm1hcCgodD0+KHtzZXJpZXNEYXR1bTp0LG1ldGFkYXRhOnRoaXMuc2VyaWVzTWV0YWRhdGFNYXBbdC5pZF19KSkpLmZpbHRlcigoKHttZXRhZGF0YTp0fSk9PnQmJnQudmlzaWJsZSYmIUJvb2xlYW4odC5hdXgpKSkubWFwKCgoe3Nlcmllc0RhdHVtOmUsbWV0YWRhdGE6bn0pPT57Y29uc3Qgbz0oZnVuY3Rpb24gaSh0LGUpe2NvbnN0IG49TWF0aC5taW4oQzUodC5tYXAoKCh7eDp0fSk9PnQpKSxlKSx0Lmxlbmd0aC0xKSxvPU1hdGgubWF4KDAsbi0xKTtyZXR1cm4gTWF0aC5hYnModFtvXS54LWUpLU1hdGguYWJzKHRbbl0ueC1lKTw9MD9vOm59KShlLnBvaW50cyx0LngpO3JldHVybntpZDplLmlkLGNsb3Nlc3RQb2ludEluZGV4Om8scG9pbnQ6ZS5wb2ludHNbb10sbWV0YWRhdGE6bn19KSkuZmlsdGVyKCh0PT50KSk6W10sdGhpcy50b29sdGlwRGlzcGxheUF0dGFjaGVkPUJvb2xlYW4odGhpcy5jdXJzb3JlZERhdGEubGVuZ3RoKX19ZnVuY3Rpb24gZGZ0KHQsZSxuLG8pe3JldHVybnttYWpvcjpbXSxtaW5vcjp0LnRpY2tzKG8sbikubWFwKCh0PT4oe3ZhbHVlOnQsdGlja0Zvcm1hdHRlZFN0cmluZzplLmZvcm1hdFRpY2sodCl9KSkpfX1mdW5jdGlvbiBwZnQodCxlKXtpZigxJnQmJihIYSgpLE91KDAsImciLDE3KSxPdSgxLCJ0ZXh0IiksTWYoMiksUHUoKSxPdSgzLCJ0aXRsZSIpLE1mKDQpLFB1KCksUHUoKSksMiZ0KXtjb25zdCB0PWUuJGltcGxpY2l0LG49THUoKTtKYygxKSxObSgieCIsbi50ZXh0WFBvc2l0aW9uKHQudmFsdWUpKSgieSIsbi50ZXh0WVBvc2l0aW9uKHQudmFsdWUpKSxKYygxKSx4ZigiICIsdC50aWNrRm9ybWF0dGVkU3RyaW5nLCIgIiksSmMoMiksdmYobi5nZXRGb3JtYXR0ZXIoKS5mb3JtYXRMb25nKHQudmFsdWUpKX19ZnVuY3Rpb24gbWZ0KHQsZSl7aWYoMSZ0JiYoT3UoMCwic3BhbiIsMjApLE91KDEsInNwYW4iKSxNZigyKSxQdSgpLFB1KCkpLDImdCl7Y29uc3QgdD1lLiRpbXBsaWNpdCxuPWUuaW5kZXgsbz1lLmxhc3QsaT1MdSgyKTtvZigibGVmdCIsaS5nZXRNYWpvclhQb3NpdGlvbih0KSsicHgiKSgid2lkdGgiLGkuZ2V0TWFqb3JXaWR0aFN0cmluZyh0LG8saS5tYWpvclRpY2tzW24rMV0pKSgiYm90dG9tIixpLmdldE1ham9yWVBvc2l0aW9uKHQpKyJweCIpKCJoZWlnaHQiLGkuZ2V0TWFqb3JIZWlnaHRTdHJpbmcodCxvLGkubWFqb3JUaWNrc1tuKzFdKSksYWYoIm1ham9yLWxhYmVsIiwhMCkoImxhc3QiLG8pLHZ1KCJ0aXRsZSIsaS5nZXRGb3JtYXR0ZXIoKS5mb3JtYXRMb25nKHQuc3RhcnQpKSxKYygyKSx2Zih0LnRpY2tGb3JtYXR0ZWRTdHJpbmcpfX1mdW5jdGlvbiB1ZnQodCxlKXtpZigxJnQmJihPdSgwLCJkaXYiLDE4KSxXbSgxLG1mdCwzLDE0LCJzcGFuIiwxOSksUHUoKSksMiZ0KXtjb25zdCB0PUx1KCk7SmMoMSksdnUoIm5nRm9yT2YiLHQubWFqb3JUaWNrcykoIm5nRm9yVHJhY2tCeSIsdC50cmFja0J5TWFqb3JUaWNrKX19Y2Z0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxjZnQpKE11KEhoKSxNdSh3RikpfSxjZnQuybVjbXA9VW8oe3R5cGU6Y2Z0LHNlbGVjdG9yczpbWyJsaW5lLWNoYXJ0LWludGVyYWN0aXZlLXZpZXciXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJihXYihRdXQsMyxjaCksV2IoZUwsMSkpLDImZSl7bGV0IHQ7VWIodD1ZYigpKSYmKG4uZG90c0NvbnRhaW5lcj10LmZpcnN0KSxVYih0PVliKCkpJiYobi5vdmVybGF5PXQuZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezImZSYmYWYoInNob3ctem9vbS1pbnN0cnVjdGlvbiIsbi5zaG93Wm9vbUluc3RydWN0aW9uKX0saW5wdXRzOntzZXJpZXNEYXRhOiJzZXJpZXNEYXRhIixzZXJpZXNNZXRhZGF0YU1hcDoic2VyaWVzTWV0YWRhdGFNYXAiLHZpZXdFeHRlbnQ6InZpZXdFeHRlbnQiLHhTY2FsZToieFNjYWxlIix5U2NhbGU6InlTY2FsZSIsZG9tRGltOiJkb21EaW0iLHRvb2x0aXBPcmlnaW5FbDoidG9vbHRpcE9yaWdpbkVsIix0b29sdGlwVGVtcGxhdGU6InRvb2x0aXBUZW1wbGF0ZSJ9LG91dHB1dHM6e29uVmlld0V4dGVudENoYW5nZToib25WaWV3RXh0ZW50Q2hhbmdlIixvblZpZXdFeHRlbnRSZXNldDoib25WaWV3RXh0ZW50UmVzZXQifSxmZWF0dXJlczpbaWgoW3twcm92aWRlOndGLHVzZUZhY3Rvcnk6bGZ0LGRlcHM6W0pGXX1dKSxTaV0sZGVjbHM6MTIsdmFyczoxNSxjb25zdHM6W1sxLCJkb3RzIl0sWyJkb3RzIiwiIl0sWzQsIm5nSWYiXSxbImNsYXNzIiwiem9vbS1ib3giLDQsIm5nSWYiXSxbMSwiem9vbS1pbnN0cnVjdGlvbiJdLFsxLCJpbnN0cnVjdGlvbi1jb250ZW50Il0sWyJjZGtPdmVybGF5T3JpZ2luIiwiIiwxLCJ0b29sdGlwLW9yaWdpbiJdLFsidG9vbHRpcE9yaWdpbiIsImNka092ZXJsYXlPcmlnaW4iXSxbImNka0Nvbm5lY3RlZE92ZXJsYXkiLCIiLDMsImNka0Nvbm5lY3RlZE92ZXJsYXlPcmlnaW4iLCJjZGtDb25uZWN0ZWRPdmVybGF5T3BlbiIsImNka0Nvbm5lY3RlZE92ZXJsYXlQb3NpdGlvbnMiLCJjZGtDb25uZWN0ZWRPdmVybGF5U2Nyb2xsU3RyYXRlZ3kiLCJjZGtDb25uZWN0ZWRPdmVybGF5TG9ja1Bvc2l0aW9uIiwiY2RrQ29ubmVjdGVkT3ZlcmxheUZsZXhpYmxlRGltZW5zaW9ucyIsImNka0Nvbm5lY3RlZE92ZXJsYXlHcm93QWZ0ZXJPcGVuIiwiZGV0YWNoIl0sWyJkZWZhdWx0VG9vbHRpcCIsIiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiXSxbInIiLCI0Iiw0LCJuZ0lmIl0sWyJyIiwiNCJdLFsxLCJ6b29tLWJveCJdLFsxLCJ0b29sdGlwLWNvbnRhaW5lciJdLFszLCJuZ1RlbXBsYXRlT3V0bGV0IiwibmdUZW1wbGF0ZU91dGxldENvbnRleHQiXSxbMSwiY2lyY2xlLWhlYWRlciJdLFsxLCJ0b29sdGlwLXJvdyJdLFsxLCJ0b29sdGlwLXJvdy1jaXJjbGUiXSxbMSwibmFtZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoSGEoKSxPdSgwLCJzdmciLDAsMSksV20oMixlZnQsMiwyLCJuZy1jb250YWluZXIiLDIpLFdtKDMsbmZ0LDEsNCwicmVjdCIsMyksUHUoKSxGYSgpLE91KDQsImRpdiIsNCksT3UoNSwic3BhbiIsNSksTWYoNiwiQWx0ICsgU2Nyb2xsIHRvIFpvb20iKSxQdSgpLFB1KCksd3UoNywiZGl2Iiw2LDcpLFdtKDksaWZ0LDIsNSwibmctdGVtcGxhdGUiLDgpLE51KCJkZXRhY2giLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub25Ub29sdGlwRGlzcGxheURldGFjaGVkKCl9KSksV20oMTAscmZ0LDEyLDIsIm5nLXRlbXBsYXRlIixudWxsLDksS2IpKSwyJmUmJihhZigicGFubmFibGUiLG4uc3BlY2lhbEtleVByZXNzZWQpKCJkcmFnZ2FibGUiLG4uc3RhdGU9PT1uLkludGVyYWN0aW9uU3RhdGUuTk9ORXx8bi5zdGF0ZT09PW4uSW50ZXJhY3Rpb25TdGF0ZS5EUkFHX1pPT01JTkcpKCJwYW5uaW5nIixuLnN0YXRlPT09bi5JbnRlcmFjdGlvblN0YXRlLlBBTk5JTkcpLEpjKDIpLHZ1KCJuZ0lmIixuLnN0YXRlPT09bi5JbnRlcmFjdGlvblN0YXRlLk5PTkUpLEpjKDEpLHZ1KCJuZ0lmIixuLnN0YXRlPT09bi5JbnRlcmFjdGlvblN0YXRlLkRSQUdfWk9PTUlORyksSmMoNiksdnUoImNka0Nvbm5lY3RlZE92ZXJsYXlPcmlnaW4iLG4udG9vbHRpcE9yaWdpbkVsKSgiY2RrQ29ubmVjdGVkT3ZlcmxheU9wZW4iLG4udG9vbHRpcERpc3BsYXlBdHRhY2hlZCYmbi5zdGF0ZT09PW4uSW50ZXJhY3Rpb25TdGF0ZS5OT05FKSgiY2RrQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9ucyIsbi50b29sdGlwUG9zaXRpb25zKSgiY2RrQ29ubmVjdGVkT3ZlcmxheVNjcm9sbFN0cmF0ZWd5IixuLnNjcm9sbFN0cmF0ZWd5KSgiY2RrQ29ubmVjdGVkT3ZlcmxheUxvY2tQb3NpdGlvbiIsITEpKCJjZGtDb25uZWN0ZWRPdmVybGF5RmxleGlibGVEaW1lbnNpb25zIiwhMCkoImNka0Nvbm5lY3RlZE92ZXJsYXlHcm93QWZ0ZXJPcGVuIiwhMCkpfSxkaXJlY3RpdmVzOlthdix0TCxlTCxvdixodl0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmZsZXg7cG9zaXRpb246cmVsYXRpdmU7dXNlci1zZWxlY3Q6bm9uZX0uZG90c1tfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uZG90cy5kcmFnZ2FibGVbX25nY29udGVudC0lQ09NUCVde2N1cnNvcjpjcm9zc2hhaXJ9LmRvdHMucGFubmFibGVbX25nY29udGVudC0lQ09NUCVde2N1cnNvcjpncmFifS5kb3RzLnBhbm5pbmdbX25nY29udGVudC0lQ09NUCVde2N1cnNvcjpncmFiYmluZ30udG9vbHRpcC1yb3ctY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTppbmxpbmUtZmxleDtoZWlnaHQ6MTJweDt3aWR0aDoxMnB4fS50b29sdGlwLXJvdy1jaXJjbGVbX25nY29udGVudC0lQ09NUCVdID4gc3Bhbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJhZGl1czo1MCU7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LC42KTtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MTBweDt3aWR0aDoxMHB4fS50b29sdGlwLW9yaWdpbltfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjA7bGVmdDowO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjB9LnRvb2x0aXAtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjg1KTtib3JkZXItcmFkaXVzOjRweDtjb2xvcjojZmZmO2NvbnRhaW46cGFpbnQgc3R5bGUgbGF5b3V0O2ZvbnQtc2l6ZTouOWVtO292ZXJmbG93OmF1dG87cGFkZGluZzo1cHg7cG9pbnRlci1ldmVudHM6bm9uZTt3aWR0aDoxMDAlfXRoW19uZ2NvbnRlbnQtJUNPTVAlXSwgdGRbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDVweDt0ZXh0LWFsaWduOmxlZnR9dGhbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjUwMDtwYWRkaW5nLWJvdHRvbTo1cHh9Lnpvb20tYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmaWxsLW9wYWNpdHk6LjAzO2ZpbGw6IzAwMDtzdHJva2U6I2NjY30uem9vbS1pbnN0cnVjdGlvbltfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xlZnQ6MDtvcGFjaXR5OjA7cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3RvcDoxMHB4O3RyYW5zaXRpb246b3BhY2l0eSAuNXN9Lmluc3RydWN0aW9uLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuNik7Ym9yZGVyLXJhZGl1czo1cHg7Y29sb3I6I2ZmZjtwYWRkaW5nOjVweCAxMHB4O3VzZXItc2VsZWN0Om5vbmV9LnNob3ctem9vbS1pbnN0cnVjdGlvbltfbmdob3N0LSVDT01QJV0gICAuem9vbS1pbnN0cnVjdGlvbltfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfSJdLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihjZnQsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoibGluZS1jaGFydC1pbnRlcmFjdGl2ZS12aWV3Iix0ZW1wbGF0ZVVybDoiLi9saW5lX2NoYXJ0X2ludGVyYWN0aXZlX3ZpZXcubmcuaHRtbCIsc3R5bGVVcmxzOlsiLi9saW5lX2NoYXJ0X2ludGVyYWN0aXZlX3ZpZXcuY3NzIl0sY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOndGLHVzZUZhY3Rvcnk6bGZ0LGRlcHM6W0pGXX1dfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6SGh9LHt0eXBlOndGfV19KSx7ZG90c0NvbnRhaW5lcjpbe3R5cGU6RnIsYXJnczpbImRvdHMiLHtzdGF0aWM6ITAscmVhZDpjaH1dfV0sb3ZlcmxheTpbe3R5cGU6RnIsYXJnczpbZUxdfV0sc2VyaWVzRGF0YTpbe3R5cGU6eV99XSxzZXJpZXNNZXRhZGF0YU1hcDpbe3R5cGU6eV99XSx2aWV3RXh0ZW50Olt7dHlwZTp5X31dLHhTY2FsZTpbe3R5cGU6eV99XSx5U2NhbGU6W3t0eXBlOnlffV0sZG9tRGltOlt7dHlwZTp5X31dLHRvb2x0aXBPcmlnaW5FbDpbe3R5cGU6eV99XSx0b29sdGlwVGVtcGxhdGU6W3t0eXBlOnlffV0sb25WaWV3RXh0ZW50Q2hhbmdlOlt7dHlwZTpfX31dLG9uVmlld0V4dGVudFJlc2V0Olt7dHlwZTpfX31dLHNob3dab29tSW5zdHJ1Y3Rpb246W3t0eXBlOkNfLGFyZ3M6WyJjbGFzcy5zaG93LXpvb20taW5zdHJ1Y3Rpb24iXX1dfSk7Y2xhc3MgZmZ0e2NvbnN0cnVjdG9yKCl7dGhpcy5vblZpZXdFeHRlbnRDaGFuZ2U9bmV3IEFiLHRoaXMuZWRpdE1lbnVPcGVuZWQ9ITEsdGhpcy5tYWpvclRpY2tzPVtdLHRoaXMubWlub3JUaWNrcz1bXX1uZ09uQ2hhbmdlcygpe2xldCB0PW51bGw7Y29uc3QgZT1xdXQoIngiPT09dGhpcy5heGlzP3RoaXMuZG9tRGltLndpZHRoOnRoaXMuZG9tRGltLmhlaWdodCx0aGlzLmdyaWRDb3VudCk7dD10aGlzLnNjYWxlIGluc3RhbmNlb2Ygb2l0PyhmdW5jdGlvbiBuKHQsZSxvLGkpe2NvbnN0W2Escl09aSxzPU1hdGguYWJzKHItYSk7aWYocz4uMDAxKXJldHVybiBkZnQodCxlLG8saSk7Y29uc3QgbD10LnRpY2tzKFthLHJdLG8pLGM9dC50aWNrcyhbYSxyXSwyKSxkPVtdO2xldCBwPShmdW5jdGlvbiBtKHQpe2NvbnN0IGU9dC50b0V4cG9uZW50aWFsKCkuc3BsaXQoImUtIiwyKTtyZXR1cm4gMj09PWUubGVuZ3RoP051bWJlcihlWzFdKS0xOjB9KShzKTtzPDEmJmMuZXZlcnkoKHQ9Pntjb25zdCBlPU1hdGguYWJzKHQpO3JldHVybiBlPj0wJiZlPDF9KSkmJihwKz0xKTtjb25zdCB1PW5ldyBNYXA7Zm9yKGNvbnN0IHQgb2YgYyl7Y29uc3RbbixvPSIiXT1TdHJpbmcodCkuc3BsaXQoIi4iLDIpLGk9TnVtYmVyKG4rIi4iK28uc2xpY2UoMCxwKSk7dS5zZXQoaSx7c3RhcnQ6aSx0aWNrRm9ybWF0dGVkU3RyaW5nOjA9PT1pPyLigJQiOmUuZm9ybWF0UmVhZGFibGUoaSl9KX1jb25zdCBmPTEwKk1hdGgucG93KDEwLC1wKTtmb3IoY29uc3QgdCBvZiBsKWZvcihjb25zdCBuIG9mWy4uLnUua2V5cygpXS5yZXZlcnNlKCkpe2NvbnN0IG89dC1uO2lmKG8+PTAmJm88Zil7aWYoMD09PW4pZC5wdXNoKHt2YWx1ZTp0LHRpY2tGb3JtYXR0ZWRTdHJpbmc6ZS5mb3JtYXRUaWNrKHQpfSk7ZWxzZXtjb25zdCBlPVN0cmluZyh0KS5zbGljZShTdHJpbmcobikubGVuZ3RoKTtkLnB1c2goe3ZhbHVlOnQsdGlja0Zvcm1hdHRlZFN0cmluZzpg4oCmJHtlfHwiMCJ9YH0pfWJyZWFrfX1yZXR1cm57bWFqb3I6QXJyYXkuZnJvbSh1LnZhbHVlcygpKSxtaW5vcjpkfX0pKHRoaXMuc2NhbGUsdGhpcy5nZXRGb3JtYXR0ZXIoKSxlLHRoaXMuYXhpc0V4dGVudCk6dGhpcy5zY2FsZSBpbnN0YW5jZW9mIGFpdD8oZnVuY3Rpb24gbyh0LGUsbixpKXtjb25zdFthLHJdPWk7bGV0IHM9dC50aWNrcyhpLDIpO2lmKHItYT49ODY0ZTV8fHMubGVuZ3RoPjIpcmV0dXJuIGRmdCh0LGUsbixpKTtjb25zdCBsPXQudGlja3MoaSxuKTtyZXR1cm57bWFqb3I6cy5tYXAoKHQ9Pih7c3RhcnQ6dCx0aWNrRm9ybWF0dGVkU3RyaW5nOmUuZm9ybWF0U2hvcnQodCl9KSkpLG1pbm9yOmwubWFwKCh0PT4oe3ZhbHVlOnQsdGlja0Zvcm1hdHRlZFN0cmluZzplLmZvcm1hdFRpY2sodCl9KSkpfX0pKHRoaXMuc2NhbGUsdGhpcy5nZXRGb3JtYXR0ZXIoKSxlLHRoaXMuYXhpc0V4dGVudCk6ZGZ0KHRoaXMuc2NhbGUsdGhpcy5nZXRGb3JtYXR0ZXIoKSxlLHRoaXMuYXhpc0V4dGVudCksdGhpcy5tYWpvclRpY2tzPXQubWFqb3IsdGhpcy5taW5vclRpY2tzPXQubWlub3J9Z2V0Rm9ybWF0dGVyKCl7dmFyIHQ7cmV0dXJuIG51bGwhPT0odD10aGlzLmN1c3RvbUZvcm1hdHRlcikmJnZvaWQgMCE9PXQ/dDp0aGlzLnNjYWxlLmRlZmF1bHRGb3JtYXR0ZXJ9dHJhY2tCeU1pbm9yVGljayh0KXtyZXR1cm4gdC52YWx1ZX10cmFja0J5TWFqb3JUaWNrKHQpe3JldHVybiB0LnN0YXJ0fWdldERvbVBvcyh0KXtyZXR1cm4gdGhpcy5zY2FsZS5mb3J3YXJkKHRoaXMuYXhpc0V4dGVudCxZdXQodGhpcy5kb21EaW0sdGhpcy5heGlzKSx0KX10ZXh0WFBvc2l0aW9uKHQpe3JldHVybiJ4Ij09PXRoaXMuYXhpcz9TdHJpbmcodGhpcy5nZXREb21Qb3ModCkpOiIxMDAlIn10ZXh0WVBvc2l0aW9uKHQpe3JldHVybiJ4Ij09PXRoaXMuYXhpcz8iIjpTdHJpbmcodGhpcy5nZXREb21Qb3ModCkpfWdldE1ham9yWFBvc2l0aW9uKHQpe3JldHVybiJ5Ij09PXRoaXMuYXhpcz8wOk1hdGgubWluKHRoaXMuZG9tRGltLndpZHRoLE1hdGgubWF4KDAsdGhpcy5nZXREb21Qb3ModC5zdGFydCkpKX1nZXRNYWpvcldpZHRoU3RyaW5nKHQsZSxuKXtyZXR1cm4ieSI9PT10aGlzLmF4aXM/IiI6KGV8fCFuP3RoaXMuZG9tRGltLndpZHRoOnRoaXMuZ2V0TWFqb3JYUG9zaXRpb24obikpLXRoaXMuZ2V0TWFqb3JYUG9zaXRpb24odCkrInB4In1nZXRNYWpvcllQb3NpdGlvbih0KXtyZXR1cm4ieCI9PT10aGlzLmF4aXM/MDp0aGlzLmRvbURpbS5oZWlnaHQtTWF0aC5taW4odGhpcy5kb21EaW0uaGVpZ2h0LE1hdGgubWF4KDAsdGhpcy5nZXREb21Qb3ModC5zdGFydCkpKX1nZXRNYWpvckhlaWdodFN0cmluZyh0LGUsbil7cmV0dXJuIngiPT09dGhpcy5heGlzPyIiOihlfHwhbj90aGlzLmRvbURpbS5oZWlnaHQ6dGhpcy5nZXRNYWpvcllQb3NpdGlvbihuKSktdGhpcy5nZXRNYWpvcllQb3NpdGlvbih0KSsicHgifWtleWRvd25QcmV2ZW50Q2xvc2UodCl7IkVzY2FwZSIhPT10LmtleSYmdC5zdG9wUHJvcGFnYXRpb24oKX1leHRlbnRDaGFuZ2VkKHQsZSl7bGV0IG49TnVtYmVyKHQpLG89TnVtYmVyKGUpO2lmKG88bil7Y29uc3QgdD1uO249byxvPXR9TnVtYmVyLmlzRmluaXRlKG4pJiZOdW1iZXIuaXNGaW5pdGUobykmJnRoaXMub25WaWV3RXh0ZW50Q2hhbmdlLmVtaXQoW24sb10pfW9uQXhpc1VwZGF0ZU1lbnVPcGVuKHQsZSxuKXt0LnZhbHVlPVN0cmluZyhuWzBdKSxlLnZhbHVlPVN0cmluZyhuWzFdKSx0LmZvY3VzKCl9c2V0RWRpdE1lbnVPcGVuZWQodCl7dGhpcy5lZGl0TWVudU9wZW5lZD10fX1mZnQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGZmdCl9LGZmdC7JtWNtcD1Vbyh7dHlwZTpmZnQsc2VsZWN0b3JzOltbImxpbmUtY2hhcnQtYXhpcyJdXSxpbnB1dHM6e2F4aXNFeHRlbnQ6ImF4aXNFeHRlbnQiLGF4aXM6ImF4aXMiLHNjYWxlOiJzY2FsZSIsZ3JpZENvdW50OiJncmlkQ291bnQiLGRvbURpbToiZG9tRGltIixjdXN0b21Gb3JtYXR0ZXI6ImN1c3RvbUZvcm1hdHRlciJ9LG91dHB1dHM6e29uVmlld0V4dGVudENoYW5nZToib25WaWV3RXh0ZW50Q2hhbmdlIn0sZmVhdHVyZXM6W1NpXSxkZWNsczoyNix2YXJzOjEzLGNvbnN0czpbWzEsImxpbmUiXSxbMSwibWlub3IiXSxbMSwidGlja3MiXSxbImNsYXNzIiwibWlub3ItdGljay1sYWJlbCIsNCwibmdGb3IiLCJuZ0Zvck9mIiwibmdGb3JUcmFja0J5Il0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJ0aXRsZSIsIkNsaWNrIHRvIG1hbnVhbGx5IHNldCBtaW4gJiBtYXggdmFsdWVzIiwzLCJtYXRNZW51VHJpZ2dlckZvciIsIm1lbnVPcGVuZWQiLCJtZW51Q2xvc2VkIl0sWyJtYXRNZW51VHJpZ2dlciIsIm1hdE1lbnVUcmlnZ2VyIl0sWyJzdmdJY29uIiwiZWRpdF8yNHB4Il0sWyJjbGFzcyIsIm1ham9yIHRpY2tzIiw0LCJuZ0lmIl0sWyJ4UG9zaXRpb24iLCJiZWZvcmUiLDMsInlQb3NpdGlvbiJdLFsibWFudWFsQ29udHJvbCIsIm1hdE1lbnUiXSxbMSwiZXh0ZW50LWVkaXQtaW5wdXQiLDMsImNsaWNrIiwia2V5ZG93biJdLFsidHlwZSIsIm51bWJlciIsMywidmFsdWUiXSxbIm1pbklucHV0IiwiIl0sWyJtYXhJbnB1dCIsIiJdLFsxLCJleHRlbnQtZWRpdC1jb250cm9sIiwzLCJrZXlkb3duIl0sWyJtYXQtcmFpc2VkLWJ1dHRvbiIsIiIsImNvbG9yIiwicHJpbWFyeSIsMSwiZXh0ZW50LWVkaXQtY2hhbmdlIiwzLCJjbGljayJdLFsibWF0LXN0cm9rZWQtYnV0dG9uIiwiIiwxLCJleHRlbnQtZWRpdC1jYW5jZWwiLDMsImNsaWNrIl0sWzEsIm1pbm9yLXRpY2stbGFiZWwiXSxbMSwibWFqb3IiLCJ0aWNrcyJdLFszLCJtYWpvci1sYWJlbCIsImxhc3QiLCJsZWZ0Iiwid2lkdGgiLCJib3R0b20iLCJoZWlnaHQiLCJ0aXRsZSIsNCwibmdGb3IiLCJuZ0Zvck9mIiwibmdGb3JUcmFja0J5Il0sWzMsInRpdGxlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUpe2NvbnN0IHQ9RXUoKTtPdSgwLCJkaXYiKSx3dSgxLCJkaXYiLDApLE91KDIsImRpdiIsMSksSGEoKSxPdSgzLCJzdmciLDIpLFdtKDQscGZ0LDUsNCwiZyIsMyksUHUoKSxGYSgpLE91KDUsImJ1dHRvbiIsNCw1KSxOdSgibWVudU9wZW5lZCIsKGZ1bmN0aW9uIGUoKXtyYSh0KTtjb25zdCBvPUdtKDE1KSxpPUdtKDIwKTtyZXR1cm4gbi5vbkF4aXNVcGRhdGVNZW51T3BlbihvLGksbi5heGlzRXh0ZW50KSxuLnNldEVkaXRNZW51T3BlbmVkKCEwKX0pKSgibWVudUNsb3NlZCIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5zZXRFZGl0TWVudU9wZW5lZCghMSl9KSksd3UoNywibWF0LWljb24iLDYpLFB1KCksUHUoKSxXbSg4LHVmdCwyLDIsImRpdiIsNyksUHUoKSxPdSg5LCJtYXQtbWVudSIsOCw5KSxPdSgxMSwiZGl2IiwxMCksTnUoImNsaWNrIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gZS5zdG9wUHJvcGFnYXRpb24oKX0pKSgia2V5ZG93biIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ua2V5ZG93blByZXZlbnRDbG9zZShlKX0pKSxPdSgxMiwibGFiZWwiKSxNZigxMywibWluIiksUHUoKSx3dSgxNCwiaW5wdXQiLDExLDEyKSxQdSgpLE91KDE2LCJkaXYiLDEwKSxOdSgiY2xpY2siLChmdW5jdGlvbiB0KGUpe3JldHVybiBlLnN0b3BQcm9wYWdhdGlvbigpfSkpKCJrZXlkb3duIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5rZXlkb3duUHJldmVudENsb3NlKGUpfSkpLE91KDE3LCJsYWJlbCIpLE1mKDE4LCJtYXgiKSxQdSgpLHd1KDE5LCJpbnB1dCIsMTEsMTMpLFB1KCksT3UoMjEsImRpdiIsMTQpLE51KCJrZXlkb3duIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5rZXlkb3duUHJldmVudENsb3NlKGUpfSkpLE91KDIyLCJidXR0b24iLDE1KSxOdSgiY2xpY2siLChmdW5jdGlvbiBlKCl7cmEodCk7Y29uc3Qgbz1HbSgxNSksaT1HbSgyMCksYT1HbSg2KTtyZXR1cm4gbi5leHRlbnRDaGFuZ2VkKG8udmFsdWUsaS52YWx1ZSksYS5jbG9zZU1lbnUoKX0pKSxNZigyMywiIENoYW5nZSAiKSxQdSgpLE91KDI0LCJidXR0b24iLDE2KSxOdSgiY2xpY2siLChmdW5jdGlvbiBlKCl7cmV0dXJuIHJhKHQpLEdtKDYpLmNsb3NlTWVudSgpfSkpLE1mKDI1LCIgQ2FuY2VsICIpLFB1KCksUHUoKSxQdSgpfWlmKDImZSl7Y29uc3QgdD1HbSgxMCk7bGYobi5heGlzKyItYXhpcyBheGlzIiksSmMoNCksdnUoIm5nRm9yT2YiLG4ubWlub3JUaWNrcykoIm5nRm9yVHJhY2tCeSIsbi50cmFja0J5TWlub3JUaWNrKSxKYygxKSxhZigiZXh0ZW50LWVkaXQtYnV0dG9uIiwhMCkoImV4dGVudC1lZGl0LW1lbnUtb3BlbmVkIixuLmVkaXRNZW51T3BlbmVkKSx2dSgibWF0TWVudVRyaWdnZXJGb3IiLHQpLEpjKDMpLHZ1KCJuZ0lmIixuLm1ham9yVGlja3MubGVuZ3RoKSxKYygxKSx2dSgieVBvc2l0aW9uIiwieSI9PT1uLmF4aXM/ImFib3ZlIjoiYmVsb3ciKSxKYyg1KSx2dSgidmFsdWUiLG4uYXhpc0V4dGVudFswXSksSmMoNSksdnUoInZhbHVlIixuLmF4aXNFeHRlbnRbMV0pfX0sZGlyZWN0aXZlczpbb3YsTkgsTkcsY0csYXYsREddLHN0eWxlczpbJy5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHh9Lm1hdC1oMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaGVhZGxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTVweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZ1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjA1ZW07bWFyZ2luOjAgMCA1NnB4fS5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAwNWVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXJhaXNlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdHJva2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmxhdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZhYltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbWluaS1mYWJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4fS5tYXQtY2FyZC1zdWJ0aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGVja2JveC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvb3Rlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgdHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIzZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LjU0MTY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2NjY2NjY3ZW0pfUBtZWRpYSBwcmludHsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjJlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouMjVlbSAwIC43NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxZW0gMCAxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMiksIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi0wLjA2MjVlbX0ubWF0LW1lbnUtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci12ZXJ0aWNhbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGFiLWxpbmtbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MH0ubWF0LXRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5Om5vbmV9LmNkay12aXN1YWxseS1oaWRkZW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjZ9LmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV0sIC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3hbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2tbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHt9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7fS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOi13ZWJraXQtYXV0b2ZpbGwpe2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZVtfbmdjb250ZW50LSVDT01QJV17cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fS5tYXQtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfVtfbmdob3N0LSVDT01QJV17Y29udGFpbjpzdHJpY3Q7ZGlzcGxheTpmbGV4O292ZXJmbG93OmhpZGRlbn0ubWFqb3ItbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCB0ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmaWxsOmN1cnJlbnRDb2xvcjtmb250LXNpemU6MTFweDt1c2VyLXNlbGVjdDpub25lfS5heGlzW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0ubWFqb3JbX25nY29udGVudC0lQ09NUCVdLCAubWlub3JbX25nY29udGVudC0lQ09NUCVde2ZsZXg6MSAwO292ZXJmbG93OmhpZGRlbn0ubGluZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojYWFhO2ZsZXg6MCAwIDFweDtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaH0udGlja3NbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlO3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjEwMCV9LngtYXhpc1tfbmdjb250ZW50LSVDT01QJV17ZmxleC1kaXJlY3Rpb246Y29sdW1ufS54LWF4aXNbX25nY29udGVudC0lQ09NUCVdICAgLmxpbmVbX25nY29udGVudC0lQ09NUCVde21hcmdpbi1ib3R0b206M3B4fS54LWF4aXNbX25nY29udGVudC0lQ09NUCVdICAgdGV4dFtfbmdjb250ZW50LSVDT01QJV17ZG9taW5hbnQtYmFzZWxpbmU6dGV4dC1iZWZvcmUtZWRnZTt0ZXh0LWFuY2hvcjptaWRkbGV9LngtYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAudGlja3NbX25nY29udGVudC0lQ09NUCVdey13ZWJraXQtbWFzay1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICMwMDAwIDAlLCAjMDAwIDEwJSwgIzAwMCA5MCUsICMwMDAwIDEwMCUpO21hc2staW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAjMDAwMCAwJSwgIzAwMCAxMCUsICMwMDAgOTAlLCAjMDAwMCAxMDAlKX0ueS1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZX0ueS1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tbGVmdDo1cHh9LnktYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICB0ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtkb21pbmFudC1iYXNlbGluZTpjZW50cmFsO3RleHQtYW5jaG9yOmVuZH0ueS1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50aWNrc1tfbmdjb250ZW50LSVDT01QJV17LXdlYmtpdC1tYXNrLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICMwMDAwIDAlLCAjMDAwIDEwJSwgIzAwMCA5MCUsICMwMDAwIDEwMCUpO21hc2staW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgIzAwMDAgMCUsICMwMDAgMTAlLCAjMDAwIDkwJSwgIzAwMDAgMTAwJSl9LmV4dGVudC1lZGl0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZWVlO2Rpc3BsYXk6bm9uZTtmb250LXNpemU6MDtoZWlnaHQ6MjRweDtsaW5lLWhlaWdodDoyNHB4O3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjVweDt0b3A6NXB4O3dpZHRoOjI0cHh9LmV4dGVudC1lZGl0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICBtYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjE2cHg7d2lkdGg6MTZweDtsaW5lLWhlaWdodDoxNnB4fS5leHRlbnQtZWRpdC1pbnB1dFtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2NvbHVtbi1nYXA6NXB4O2Rpc3BsYXk6Z3JpZDtmb250LXNpemU6MTJweDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MzBweCBtaW5tYXgoYXV0bywgMTAwcHgpO2hlaWdodDozMHB4O21hcmdpbjoxMHB4IDIwcHh9LmV4dGVudC1lZGl0LWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOmluaGVyaXQ7Ym9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyLXN0eWxlOnNvbGlkO2NvbG9yOmluaGVyaXR9LmV4dGVudC1lZGl0LWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2U7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO21hcmdpbjoxMHB4IDIwcHh9LmV4dGVudC1lZGl0LWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtoZWlnaHQ6MzBweDtsaW5lLWhlaWdodDoxLjQ7bWFyZ2luLWxlZnQ6NXB4O3BhZGRpbmc6MCAxMHB4fS5heGlzW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlciAgIC5leHRlbnQtZWRpdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAuZXh0ZW50LWVkaXQtbWVudS1vcGVuZWRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5pdGlhbH0ubWFqb3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbjtjb250YWluOnN0cmljdH0ubWFqb3JbX25nY29udGVudC0lQ09NUCVdICAgLm1ham9yLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6aW5saW5lLWZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246YWJzb2x1dGU7d2hpdGUtc3BhY2U6bm93cmFwfS5tYWpvcltfbmdjb250ZW50LSVDT01QJV0gICAubWFqb3ItbGFiZWxbX25nY29udGVudC0lQ09NUCVdICAgc3Bhbltfbmdjb250ZW50LSVDT01QJV17bWF4LXdpZHRoOjEwMCV9LngtYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAubWFqb3ItbGFiZWxbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjOWU5ZTllO3BhZGRpbmc6MCA1cHh9LngtYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAubWFqb3ItbGFiZWwubGFzdFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjOWU5ZTllfS55LWF4aXNbX25nY29udGVudC0lQ09NUCVdICAgLm1ham9yLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjOWU5ZTllO2hlaWdodDoxMDAlO3BhZGRpbmc6NXB4IDA7d2lkdGg6MTAwJX0ueS1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYWpvci1sYWJlbC5sYXN0W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItdG9wOjFweCBzb2xpZCAjOWU5ZTllfS55LWF4aXNbX25nY29udGVudC0lQ09NUCVdICAgLm1ham9yLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSA+IHNwYW5bX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTpyb3RhdGUoLTkwZGVnKTt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlcn0nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoZmZ0LFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6ImxpbmUtY2hhcnQtYXhpcyIsdGVtcGxhdGVVcmw6ImxpbmVfY2hhcnRfYXhpc192aWV3Lm5nLmh0bWwiLHN0eWxlVXJsczpbImxpbmVfY2hhcnRfYXhpc192aWV3LmNzcyJdLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2h9XX1dLG51bGwse2F4aXNFeHRlbnQ6W3t0eXBlOnlffV0sYXhpczpbe3R5cGU6eV99XSxzY2FsZTpbe3R5cGU6eV99XSxncmlkQ291bnQ6W3t0eXBlOnlffV0sZG9tRGltOlt7dHlwZTp5X31dLGN1c3RvbUZvcm1hdHRlcjpbe3R5cGU6eV99XSxvblZpZXdFeHRlbnRDaGFuZ2U6W3t0eXBlOl9ffV19KTtjb25zdCBnZnQ9WyJzZXJpZXNWaWV3Il0saGZ0PVsieEF4aXMiXSxiZnQ9WyJ5QXhpcyJdLHlmdD1bImNoYXJ0RWwiXTtmdW5jdGlvbiBfZnQodCxlKXsxJnQmJihIYSgpLHd1KDAsInN2ZyIsbnVsbCwxMykpfWZ1bmN0aW9uIENmdCh0LGUpezEmdCYmd3UoMCwiY2FudmFzIixudWxsLDEzKX1jb25zdCBNZnQ9ZnVuY3Rpb24odCl7cmV0dXJue2NvbnRhaW5lcjohMCwiZGFyay1tb2RlIjp0fX0sdmZ0PXt4OlswLDFdLHk6WzAsMV19O2NsYXNzIHhmdHtjb25zdHJ1Y3Rvcih0KXt0aGlzLmNoYW5nZURldGVjdG9yPXQsdGhpcy5SZW5kZXJlclR5cGU9YTUsdGhpcy51c2VEYXJrTW9kZT0hMSx0aGlzLnByZWZlcnJlZFJlbmRlcmVyVHlwZT1hNS5XRUJHTCx0aGlzLnhTY2FsZVR5cGU9cjUuTElORUFSLHRoaXMueVNjYWxlVHlwZT1yNS5MSU5FQVIsdGhpcy5vblZpZXdCb3hPdmVycmlkZGVuPW5ldyBudCgxKSx0aGlzLmlnbm9yZVlPdXRsaWVycz0hMSx0aGlzLllfR1JJRF9DT1VOVD02LHRoaXMuWF9HUklEX0NPVU5UPTEwLHRoaXMueFNjYWxlPW5pdCh0aGlzLnhTY2FsZVR5cGUpLHRoaXMueVNjYWxlPW5pdCh0aGlzLnhTY2FsZVR5cGUpLHRoaXMudmlld0JveD12ZnQsdGhpcy5kb21EaW1lbnNpb25zPXttYWluOnt3aWR0aDowLGhlaWdodDowfSx4QXhpczp7d2lkdGg6MCxoZWlnaHQ6MH0seUF4aXM6e3dpZHRoOjAsaGVpZ2h0OjB9fSx0aGlzLmlzRGF0YVVwZGF0ZWQ9ITEsdGhpcy5pc01ldGFkYXRhVXBkYXRlZD0hMSx0aGlzLmlzRml4ZWRWaWV3Qm94VXBkYXRlZD0hMSx0aGlzLmlzVmlld0JveE92ZXJyaWRkZW49ITEsdGhpcy51c2VEYXJrTW9kZVVwZGF0ZWQ9ITEsdGhpcy5pc1ZpZXdCb3hDaGFuZ2VkPSEwLHRoaXMuc2NhbGVVcGRhdGVkPSEwfW5nT25Jbml0KCl7dGhpcy5vblZpZXdCb3hPdmVycmlkZGVuLm5leHQodGhpcy5pc1ZpZXdCb3hPdmVycmlkZGVuKX1uZ09uQ2hhbmdlcyh0KXt0LnhTY2FsZVR5cGUmJih0aGlzLnhTY2FsZT1uaXQodGhpcy54U2NhbGVUeXBlKSx0aGlzLnNjYWxlVXBkYXRlZD0hMCksdC55U2NhbGVUeXBlJiYodGhpcy55U2NhbGU9bml0KHRoaXMueVNjYWxlVHlwZSksdGhpcy5zY2FsZVVwZGF0ZWQ9ITApLHQuc2VyaWVzRGF0YSYmKHRoaXMuaXNEYXRhVXBkYXRlZD0hMCksdC5maXhlZFZpZXdCb3gmJih0aGlzLmlzRml4ZWRWaWV3Qm94VXBkYXRlZD0hMCksdC5zZXJpZXNNZXRhZGF0YU1hcCYmKHRoaXMuaXNNZXRhZGF0YVVwZGF0ZWQ9ITApLHQudXNlRGFya01vZGUmJih0aGlzLnVzZURhcmtNb2RlVXBkYXRlZD0hMCksdGhpcy5zY2FsZVVwZGF0ZWQmJnRoaXMuc2V0SXNWaWV3Qm94T3ZlcnJpZGRlbighMSksdGhpcy5pc1ZpZXdCb3hDaGFuZ2VkPXRoaXMuaXNWaWV3Qm94Q2hhbmdlZHx8dGhpcy5zY2FsZVVwZGF0ZWR8fCF0aGlzLmlzVmlld0JveE92ZXJyaWRkZW4mJnRoaXMuc2hvdWxkVXBkYXRlRGVmYXVsdFZpZXdCb3godCksdGhpcy51cGRhdGVMaW5lQ2hhcnQoKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLmluaXRpYWxpemVDaGFydCgpLHRoaXMudXBkYXRlTGluZUNoYXJ0KCksdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCl9b25WaWV3UmVzaXplKCl7dGhpcy5saW5lQ2hhcnQmJih0aGlzLnJlYWRBbmRVcGRhdGVEb21EaW1lbnNpb25zKCksdGhpcy5saW5lQ2hhcnQucmVzaXplKHRoaXMuZG9tRGltZW5zaW9ucy5tYWluKSx0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKSl9c2hvdWxkVXBkYXRlRGVmYXVsdFZpZXdCb3godCl7aWYodC54U2NhbGVUeXBlfHx0LnlTY2FsZVR5cGV8fHQuaWdub3JlWU91dGxpZXJzKXJldHVybiEwO2lmKHQuc2VyaWVzRGF0YSlyZXR1cm4hMDtjb25zdCBlPXQuc2VyaWVzTWV0YWRhdGFNYXA7aWYoZSl7Y29uc3QgdD1lLnByZXZpb3VzVmFsdWU7aWYoT2JqZWN0LmtleXModGhpcy5zZXJpZXNNZXRhZGF0YU1hcCkubGVuZ3RoIT09T2JqZWN0LmtleXMobnVsbCE9dD90Ont9KS5sZW5ndGgpcmV0dXJuITA7Zm9yKGNvbnN0W2Usbl1vZiBPYmplY3QuZW50cmllcyh0aGlzLnNlcmllc01ldGFkYXRhTWFwKSl7Y29uc3Qgbz10JiZ0W2VdO2lmKCFvfHxuLnZpc2libGUhPT1vLnZpc2libGUpcmV0dXJuITB9fXJldHVybiExfWluaXRpYWxpemVDaGFydCgpe2lmKHRoaXMubGluZUNoYXJ0KXRocm93IG5ldyBFcnJvcigiTGluZUNoYXJ0IHNob3VsZCBub3QgYmUgaW5pdGlhbGl6ZWQgbXVsdGlwbGUgdGltZXMuIik7Y29uc3QgdD10aGlzLmdldFJlbmRlcmVyVHlwZSgpLGU9e29uRHJhd0VuZDooKT0+e319O2xldCBuPW51bGw7c3dpdGNoKHRoaXMucmVhZEFuZFVwZGF0ZURvbURpbWVuc2lvbnMoKSx0KXtjYXNlIGE1LlNWRzpuPXt0eXBlOmE1LlNWRyxjb250YWluZXI6dGhpcy5jaGFydEVsLm5hdGl2ZUVsZW1lbnQsY2FsbGJhY2tzOmUsZG9tRGltZW5zaW9uOnRoaXMuZG9tRGltZW5zaW9ucy5tYWluLHVzZURhcmtNb2RlOnRoaXMudXNlRGFya01vZGV9O2JyZWFrO2Nhc2UgYTUuV0VCR0w6bj17dHlwZTphNS5XRUJHTCxjb250YWluZXI6dGhpcy5jaGFydEVsLm5hdGl2ZUVsZW1lbnQsZGV2aWNlUGl4ZWxSYXRpbzp3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyxjYWxsYmFja3M6ZSxkb21EaW1lbnNpb246dGhpcy5kb21EaW1lbnNpb25zLm1haW4sdXNlRGFya01vZGU6dGhpcy51c2VEYXJrTW9kZX07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYDxsaW5lLWNoYXJ0PiBkb2VzIG5vdCB5ZXQgc3VwcG9ydCByZW5kZXJlclR5cGU6ICR7dH1gKX1jb25zdCBvPXQhPT1hNS5TVkcmJnNpdCgpO3RoaXMubGluZUNoYXJ0PW5ldyhvP0d1dDpVdXQpKG4pfW5nT25EZXN0cm95KCl7dGhpcy5saW5lQ2hhcnQmJnRoaXMubGluZUNoYXJ0LmRpc3Bvc2UoKX1nZXRSZW5kZXJlclR5cGUoKXtyZXR1cm4oZnVuY3Rpb24gdChlKXtzd2l0Y2goZSl7Y2FzZSBhNS5TVkc6cmV0dXJuIGE1LlNWRztjYXNlIGE1LldFQkdMOnJldHVybihmdW5jdGlvbiBuKCl7cmV0dXJuIHJpdH0pKCk/YTUuV0VCR0w6YTUuU1ZHO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHJlbmRlcmVyVHlwZTogJHtlfWApfX0pKHRoaXMucHJlZmVycmVkUmVuZGVyZXJUeXBlKX1yZWFkQW5kVXBkYXRlRG9tRGltZW5zaW9ucygpe3RoaXMuZG9tRGltZW5zaW9ucz17bWFpbjp7d2lkdGg6dGhpcy5zZXJpZXNWaWV3Lm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGgsaGVpZ2h0OnRoaXMuc2VyaWVzVmlldy5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodH0seEF4aXM6e3dpZHRoOnRoaXMueEF4aXMubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCxoZWlnaHQ6dGhpcy54QXhpcy5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodH0seUF4aXM6e3dpZHRoOnRoaXMueUF4aXMubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCxoZWlnaHQ6dGhpcy55QXhpcy5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodH19fXVwZGF0ZUxpbmVDaGFydCgpe3ZhciB0LGU7aWYodGhpcy5saW5lQ2hhcnQmJiF0aGlzLmRpc2FibGVVcGRhdGUpe2lmKHRoaXMuc2NhbGVVcGRhdGVkJiYodGhpcy5zY2FsZVVwZGF0ZWQ9ITEsdGhpcy5saW5lQ2hhcnQuc2V0WFNjYWxlVHlwZSh0aGlzLnhTY2FsZVR5cGUpLHRoaXMubGluZUNoYXJ0LnNldFlTY2FsZVR5cGUodGhpcy55U2NhbGVUeXBlKSksdGhpcy5pc01ldGFkYXRhVXBkYXRlZCYmKHRoaXMuaXNNZXRhZGF0YVVwZGF0ZWQ9ITEsdGhpcy5saW5lQ2hhcnQuc2V0TWV0YWRhdGEodGhpcy5zZXJpZXNNZXRhZGF0YU1hcCkpLHRoaXMuaXNEYXRhVXBkYXRlZCYmKHRoaXMuaXNEYXRhVXBkYXRlZD0hMSx0aGlzLmxpbmVDaGFydC5zZXREYXRhKHRoaXMuc2VyaWVzRGF0YSkpLHRoaXMudXNlRGFya01vZGVVcGRhdGVkJiYodGhpcy51c2VEYXJrTW9kZVVwZGF0ZWQ9ITEsdGhpcy5saW5lQ2hhcnQuc2V0VXNlRGFya01vZGUodGhpcy51c2VEYXJrTW9kZSkpLHRoaXMuaXNGaXhlZFZpZXdCb3hVcGRhdGVkJiZ0aGlzLmZpeGVkVmlld0JveCl0aGlzLnZpZXdCb3g9dGhpcy5maXhlZFZpZXdCb3g7ZWxzZSBpZighdGhpcy5pc1ZpZXdCb3hPdmVycmlkZGVuJiZ0aGlzLmlzVmlld0JveENoYW5nZWQpe2NvbnN0IG49KGZ1bmN0aW9uIG4odCxlLG8saSxhKXtsZXQgcj1udWxsLHM9bnVsbCxsPVtdO2Zvcihjb25zdHtpZDpuLHBvaW50czpvfW9mIHQpe2NvbnN0IHQ9ZVtuXTtpZih0JiYhdC5hdXgmJnQudmlzaWJsZSlmb3IobGV0IHQ9MDt0PG8ubGVuZ3RoO3QrKyl7Y29uc3R7eDplLHk6bn09b1t0XTtpKGUpJiYocj1udWxsPT09cnx8ZTxyP2U6cixzPW51bGw9PT1zfHxlPnM/ZTpzKSxhKG4pJiZsLnB1c2gobil9fWwuc29ydCh5NSk7bGV0IGM9bFswXSxkPWxbbC5sZW5ndGgtMV07cmV0dXJuIG8mJmwubGVuZ3RoPjImJihjPWxbTWF0aC5jZWlsKC4wNSoobC5sZW5ndGgtMSkpXSxkPWxbTWF0aC5mbG9vciguOTUqKGwubGVuZ3RoLTEpKV0pLHt4Om51bGwhPT1yJiZudWxsIT09cz9bcixzXTp2b2lkIDAseTp2b2lkIDAhPT1jJiZ2b2lkIDAhPT1kP1tjLGRdOnZvaWQgMH19KSh0aGlzLnNlcmllc0RhdGEsdGhpcy5zZXJpZXNNZXRhZGF0YU1hcCx0aGlzLmlnbm9yZVlPdXRsaWVycyx0aGlzLnhTY2FsZS5pc1NhZmVOdW1iZXIsdGhpcy55U2NhbGUuaXNTYWZlTnVtYmVyKTt0aGlzLnZpZXdCb3g9e3g6dGhpcy54U2NhbGUubmljZURvbWFpbihudWxsIT09KHQ9bi54KSYmdm9pZCAwIT09dD90OnZmdC54KSx5OnRoaXMueVNjYWxlLm5pY2VEb21haW4obnVsbCE9PShlPW4ueSkmJnZvaWQgMCE9PWU/ZTp2ZnQueSl9fSh0aGlzLmlzRml4ZWRWaWV3Qm94VXBkYXRlZHx8dGhpcy5pc1ZpZXdCb3hDaGFuZ2VkKSYmKHRoaXMuaXNGaXhlZFZpZXdCb3hVcGRhdGVkPSExLHRoaXMuaXNWaWV3Qm94Q2hhbmdlZD0hMSx0aGlzLmxpbmVDaGFydC5zZXRWaWV3Qm94KHRoaXMudmlld0JveCkpfX1vblZpZXdCb3hDaGFuZ2VkKHtkYXRhRXh0ZW50OnR9KXt0aGlzLnNldElzVmlld0JveE92ZXJyaWRkZW4oITApLHRoaXMuaXNWaWV3Qm94Q2hhbmdlZD0hMCx0aGlzLnZpZXdCb3g9dCx0aGlzLnVwZGF0ZUxpbmVDaGFydCgpfXZpZXdCb3hSZXNldCgpe3RoaXMuc2V0SXNWaWV3Qm94T3ZlcnJpZGRlbighMSksdGhpcy5pc1ZpZXdCb3hDaGFuZ2VkPSEwLHRoaXMudXBkYXRlTGluZUNoYXJ0KCl9c2V0SXNWaWV3Qm94T3ZlcnJpZGRlbih0KXtjb25zdCBlPXRoaXMuaXNWaWV3Qm94T3ZlcnJpZGRlbjt0aGlzLmlzVmlld0JveE92ZXJyaWRkZW49dCxlIT09dCYmdGhpcy5vblZpZXdCb3hPdmVycmlkZGVuLm5leHQodCl9Z2V0SXNWaWV3Qm94T3ZlcnJpZGRlbigpe3JldHVybiB0aGlzLm9uVmlld0JveE92ZXJyaWRkZW59b25WaWV3Qm94Q2hhbmdlZEZyb21BeGlzKHQsZSl7Y29uc3Qgbj1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdGhpcy52aWV3Qm94KSx7W2VdOnR9KTt0aGlzLm9uVmlld0JveENoYW5nZWQoe2RhdGFFeHRlbnQ6bn0pfX1mdW5jdGlvbiBPZnQodCxlKXsxJnQmJnd1KDAsIm1hdC1zcGlubmVyIiwxOSl9ZnVuY3Rpb24gUGZ0KHQsZSl7aWYoMSZ0KXtjb25zdCB0PUV1KCk7a3UoMCksT3UoMSwibGluZS1jaGFydCIsMjApLE51KCJvblZpZXdCb3hPdmVycmlkZGVuIiwoZnVuY3Rpb24gZShuKXtyZXR1cm4gcmEodCksTHUoKS5pc1ZpZXdCb3hPdmVycmlkZGVuPW59KSksUHUoKSxTdSgpfWlmKDImdCl7Y29uc3QgdD1MdSgpLGU9R20oMjcpO0pjKDEpLHZ1KCJkaXNhYmxlVXBkYXRlIiwhdC5pc0NhcmRWaXNpYmxlKSgicHJlZmVycmVkUmVuZGVyZXJUeXBlIix0LlJlbmRlcmVyVHlwZS5XRUJHTCkoInNlcmllc0RhdGEiLHQuZGF0YVNlcmllcykoInNlcmllc01ldGFkYXRhTWFwIix0LmNoYXJ0TWV0YWRhdGFNYXApKCJ4U2NhbGVUeXBlIix0LnhTY2FsZVR5cGUpKCJ5U2NhbGVUeXBlIix0LnlTY2FsZVR5cGUpKCJjdXN0b21YRm9ybWF0dGVyIix0LmdldEN1c3RvbVhGb3JtYXR0ZXIoKSkoImlnbm9yZVlPdXRsaWVycyIsdC5pZ25vcmVPdXRsaWVycykoInRvb2x0aXBUZW1wbGF0ZSIsZSkoInVzZURhcmtNb2RlIix0LnVzZURhcmtNb2RlKX19ZnVuY3Rpb24gd2Z0KHQsZSl7MSZ0JiYoT3UoMCwidGgiKSxNZigxLCJTbW9vdGhlZCIpLFB1KCkpfWZ1bmN0aW9uIGtmdCh0LGUpezEmdCYmKE91KDAsInRoIiksTWYoMSwiUmVsYXRpdmUiKSxQdSgpKX1mdW5jdGlvbiBTZnQodCxlKXtpZigxJnQmJihPdSgwLCJ0ZCIpLE1mKDEpLFB1KCkpLDImdCl7Y29uc3QgdD1MdSgpLiRpbXBsaWNpdCxlPUx1KDIpO0pjKDEpLHhmKCIgIixlLnZhbHVlRm9ybWF0dGVyLmZvcm1hdFNob3J0KHQucG9pbnQueSksIiAiKX19ZnVuY3Rpb24gRGZ0KHQsZSl7aWYoMSZ0JiYoT3UoMCwidGQiKSxNZigxKSxQdSgpKSwyJnQpe2NvbnN0IHQ9THUoKS4kaW1wbGljaXQsZT1MdSgyKTtKYygxKSx4ZigiICIsZS5yZWxhdGl2ZVhGb3JtYXR0ZXIuZm9ybWF0UmVhZGFibGUodC5wb2ludC54KSwiICIpfX1mdW5jdGlvbiBFZnQodCxlKXtpZigxJnQmJihrdSgwKSxPdSgxLCJ0ciIsMjQpLE91KDIsInRkIiwyNSksd3UoMywic3BhbiIpLFB1KCksT3UoNCwidGQiLDI2KSxNZig1KSxQdSgpLFdtKDYsU2Z0LDIsMSwidGQiLDE3KSxPdSg3LCJ0ZCIpLE1mKDgpLFB1KCksT3UoOSwidGQiKSxNZigxMCksUHUoKSxPdSgxMSwidGQiKSxNZigxMiksT2IoMTMsImRhdGUiKSxQdSgpLFdtKDE0LERmdCwyLDEsInRkIiwxNyksUHUoKSxTdSgpKSwyJnQpe2NvbnN0IHQ9ZS4kaW1wbGljaXQsbj1MdSgyKTtKYygxKSxhZigiY2xvc2VzdCIsdC5tZXRhZGF0YS5jbG9zZXN0KSxKYygyKSxvZigiYmFja2dyb3VuZC1jb2xvciIsdC5tZXRhZGF0YS5jb2xvciksSmMoMiksdmYodC5tZXRhZGF0YS5kaXNwbGF5TmFtZSksSmMoMSksdnUoIm5nSWYiLG4uc21vb3RoaW5nRW5hYmxlZCksSmMoMiksdmYobi52YWx1ZUZvcm1hdHRlci5mb3JtYXRTaG9ydCh0LnBvaW50LnZhbHVlKSksSmMoMiksdmYobi5zdGVwRm9ybWF0dGVyLmZvcm1hdFNob3J0KHQucG9pbnQuc3RlcCkpLEpjKDIpLHZmKHdiKDEzLDEwLHQucG9pbnQud2FsbFRpbWUsInNob3J0IikpLEpjKDIpLHZ1KCJuZ0lmIixuLnhBeGlzVHlwZT09PW4uWEF4aXNUeXBlLlJFTEFUSVZFKX19ZnVuY3Rpb24gQWZ0KHQsZSl7aWYoMSZ0JiYoT3UoMCwidGFibGUiLDIxKSxPdSgxLCJ0aGVhZCIpLE91KDIsInRyIiksd3UoMywidGgiLDIyKSxPdSg0LCJ0aCIpLE1mKDUsIlJ1biIpLFB1KCksV20oNix3ZnQsMiwwLCJ0aCIsMTcpLE91KDcsInRoIiksTWYoOCwiVmFsdWUiKSxQdSgpLE91KDksInRoIiksTWYoMTAsIlN0ZXAiKSxQdSgpLE91KDExLCJ0aCIpLE1mKDEyLCJUaW1lIiksUHUoKSxXbSgxMyxrZnQsMiwwLCJ0aCIsMTcpLFB1KCksUHUoKSxPdSgxNCwidGJvZHkiKSxXbSgxNSxFZnQsMTUsMTMsIm5nLWNvbnRhaW5lciIsMjMpLFB1KCksUHUoKSksMiZ0KXtjb25zdCB0PWUuZGF0YSxuPWUuY3Vyc29yTG9jYXRpb25JbkRhdGFDb29yZCxvPUx1KCk7SmMoNiksdnUoIm5nSWYiLG8uc21vb3RoaW5nRW5hYmxlZCksSmMoNyksdnUoIm5nSWYiLG8ueEF4aXNUeXBlPT09by5YQXhpc1R5cGUuUkVMQVRJVkUpLEpjKDIpLHZ1KCJuZ0Zvck9mIixvLmdldEN1cnNvckF3YXJlVG9vbHRpcERhdGEodCxuKSkoIm5nRm9yVHJhY2tCeSIsby50cmFja0J5VG9vbHRpcERhdHVtKX19eGZ0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHx4ZnQpKE11KEhoKSl9LHhmdC7JtWNtcD1Vbyh7dHlwZTp4ZnQsc2VsZWN0b3JzOltbImxpbmUtY2hhcnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJihXYihnZnQsMyxjaCksV2IoaGZ0LDMsY2gpLFdiKGJmdCwzLGNoKSxXYih5ZnQsMSxjaCkpLDImZSl7bGV0IHQ7VWIodD1ZYigpKSYmKG4uc2VyaWVzVmlldz10LmZpcnN0KSxVYih0PVliKCkpJiYobi54QXhpcz10LmZpcnN0KSxVYih0PVliKCkpJiYobi55QXhpcz10LmZpcnN0KSxVYih0PVliKCkpJiYobi5jaGFydEVsPXQuZmlyc3QpfX0saW5wdXRzOnt1c2VEYXJrTW9kZToidXNlRGFya01vZGUiLHByZWZlcnJlZFJlbmRlcmVyVHlwZToicHJlZmVycmVkUmVuZGVyZXJUeXBlIixzZXJpZXNEYXRhOiJzZXJpZXNEYXRhIixmaXhlZFZpZXdCb3g6ImZpeGVkVmlld0JveCIsc2VyaWVzTWV0YWRhdGFNYXA6InNlcmllc01ldGFkYXRhTWFwIix4U2NhbGVUeXBlOiJ4U2NhbGVUeXBlIix5U2NhbGVUeXBlOiJ5U2NhbGVUeXBlIixjdXN0b21YRm9ybWF0dGVyOiJjdXN0b21YRm9ybWF0dGVyIixjdXN0b21ZRm9ybWF0dGVyOiJjdXN0b21ZRm9ybWF0dGVyIix0b29sdGlwVGVtcGxhdGU6InRvb2x0aXBUZW1wbGF0ZSIsZGlzYWJsZVVwZGF0ZToiZGlzYWJsZVVwZGF0ZSIsaWdub3JlWU91dGxpZXJzOiJpZ25vcmVZT3V0bGllcnMifSxmZWF0dXJlczpbU2ldLGRlY2xzOjE0LHZhcnM6MzAsY29uc3RzOltbImRldGVjdFJlc2l6ZSIsIiIsImNka092ZXJsYXlPcmlnaW4iLCIiLDMsIm5nQ2xhc3MiLCJyZXNpemVFdmVudERlYm91bmNlUGVyaW9kSW5NcyIsIm9uUmVzaXplIl0sWyJvdmVybGF5VGFyZ2V0IiwiY2RrT3ZlcmxheU9yaWdpbiJdLFsxLCJzZXJpZXMtdmlldyJdLFsic2VyaWVzVmlldyIsIiJdLFszLCJ2aWV3RXh0ZW50IiwieFNjYWxlIiwieVNjYWxlIiwieEdyaWRDb3VudCIsInlHcmlkQ291bnQiLCJkb21EaW0iXSxbNCwibmdJZiJdLFszLCJzZXJpZXNEYXRhIiwic2VyaWVzTWV0YWRhdGFNYXAiLCJ2aWV3RXh0ZW50IiwieFNjYWxlIiwieVNjYWxlIiwidG9vbHRpcE9yaWdpbkVsIiwiZG9tRGltIiwidG9vbHRpcFRlbXBsYXRlIiwib25WaWV3RXh0ZW50Q2hhbmdlIiwib25WaWV3RXh0ZW50UmVzZXQiXSxbImF4aXMiLCJ5IiwxLCJ5LWF4aXMiLDMsImF4aXNFeHRlbnQiLCJjdXN0b21Gb3JtYXR0ZXIiLCJkb21EaW0iLCJncmlkQ291bnQiLCJzY2FsZSIsIm9uVmlld0V4dGVudENoYW5nZSJdLFsieUF4aXMiLCIiXSxbImF4aXMiLCJ4IiwxLCJ4LWF4aXMiLDMsImF4aXNFeHRlbnQiLCJjdXN0b21Gb3JtYXR0ZXIiLCJkb21EaW0iLCJncmlkQ291bnQiLCJzY2FsZSIsIm9uVmlld0V4dGVudENoYW5nZSJdLFsieEF4aXMiLCIiXSxbMSwiZG90Il0sWzEsInJlY3QiXSxbImNoYXJ0RWwiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pe2lmKDEmZSYmKE91KDAsImRpdiIsMCwxKSxOdSgib25SZXNpemUiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub25WaWV3UmVzaXplKCl9KSksT3UoMiwiZGl2IiwyLDMpLHd1KDQsImxpbmUtY2hhcnQtZ3JpZC12aWV3Iiw0KSxXbSg1LF9mdCwyLDAsInN2ZyIsNSksV20oNixDZnQsMiwwLCJjYW52YXMiLDUpLE91KDcsImxpbmUtY2hhcnQtaW50ZXJhY3RpdmUtdmlldyIsNiksTnUoIm9uVmlld0V4dGVudENoYW5nZSIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25WaWV3Qm94Q2hhbmdlZChlKX0pKSgib25WaWV3RXh0ZW50UmVzZXQiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4udmlld0JveFJlc2V0KCl9KSksUHUoKSxQdSgpLE91KDgsImxpbmUtY2hhcnQtYXhpcyIsNyw4KSxOdSgib25WaWV3RXh0ZW50Q2hhbmdlIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vblZpZXdCb3hDaGFuZ2VkRnJvbUF4aXMoZSwieSIpfSkpLFB1KCksT3UoMTAsImxpbmUtY2hhcnQtYXhpcyIsOSwxMCksTnUoIm9uVmlld0V4dGVudENoYW5nZSIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25WaWV3Qm94Q2hhbmdlZEZyb21BeGlzKGUsIngiKX0pKSxQdSgpLE91KDEyLCJkaXYiLDExKSx3dSgxMywic3BhbiIsMTIpLFB1KCksUHUoKSksMiZlKXtjb25zdCB0PUdtKDEpO3Z1KCJuZ0NsYXNzIixnYigyOCxNZnQsbi51c2VEYXJrTW9kZSkpKCJyZXNpemVFdmVudERlYm91bmNlUGVyaW9kSW5NcyIsMCksSmMoNCksdnUoInZpZXdFeHRlbnQiLG4udmlld0JveCkoInhTY2FsZSIsbi54U2NhbGUpKCJ5U2NhbGUiLG4ueVNjYWxlKSgieEdyaWRDb3VudCIsbi5YX0dSSURfQ09VTlQpKCJ5R3JpZENvdW50IixuLllfR1JJRF9DT1VOVCkoImRvbURpbSIsbi5kb21EaW1lbnNpb25zLm1haW4pLEpjKDEpLHZ1KCJuZ0lmIixuLmdldFJlbmRlcmVyVHlwZSgpPT09bi5SZW5kZXJlclR5cGUuU1ZHKSxKYygxKSx2dSgibmdJZiIsbi5nZXRSZW5kZXJlclR5cGUoKT09PW4uUmVuZGVyZXJUeXBlLldFQkdMKSxKYygxKSx2dSgic2VyaWVzRGF0YSIsbi5zZXJpZXNEYXRhKSgic2VyaWVzTWV0YWRhdGFNYXAiLG4uc2VyaWVzTWV0YWRhdGFNYXApKCJ2aWV3RXh0ZW50IixuLnZpZXdCb3gpKCJ4U2NhbGUiLG4ueFNjYWxlKSgieVNjYWxlIixuLnlTY2FsZSkoInRvb2x0aXBPcmlnaW5FbCIsdCkoImRvbURpbSIsbi5kb21EaW1lbnNpb25zLm1haW4pKCJ0b29sdGlwVGVtcGxhdGUiLG4udG9vbHRpcFRlbXBsYXRlKSxKYygxKSx2dSgiYXhpc0V4dGVudCIsbi52aWV3Qm94LnkpKCJjdXN0b21Gb3JtYXR0ZXIiLG4uY3VzdG9tWUZvcm1hdHRlcikoImRvbURpbSIsbi5kb21EaW1lbnNpb25zLnlBeGlzKSgiZ3JpZENvdW50IixuLllfR1JJRF9DT1VOVCkoInNjYWxlIixuLnlTY2FsZSksSmMoMiksdnUoImF4aXNFeHRlbnQiLG4udmlld0JveC54KSgiY3VzdG9tRm9ybWF0dGVyIixuLmN1c3RvbVhGb3JtYXR0ZXIpKCJkb21EaW0iLG4uZG9tRGltZW5zaW9ucy54QXhpcykoImdyaWRDb3VudCIsbi5YX0dSSURfQ09VTlQpKCJzY2FsZSIsbi54U2NhbGUpfX0sZGlyZWN0aXZlczpbcUssdEwsdHYsS3V0LGF2LGNmdCxmZnRdLHN0eWxlczpbJy5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHh9Lm1hdC1oMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaGVhZGxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTVweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZ1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjA1ZW07bWFyZ2luOjAgMCA1NnB4fS5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAwNWVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXJhaXNlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdHJva2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmxhdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZhYltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbWluaS1mYWJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4fS5tYXQtY2FyZC1zdWJ0aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGVja2JveC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvb3Rlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgdHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIzZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LjU0MTY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2NjY2NjY3ZW0pfUBtZWRpYSBwcmludHsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjJlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouMjVlbSAwIC43NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxZW0gMCAxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMiksIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi0wLjA2MjVlbX0ubWF0LW1lbnUtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci12ZXJ0aWNhbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGFiLWxpbmtbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MH0ubWF0LXRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5Om5vbmV9LmNkay12aXN1YWxseS1oaWRkZW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjZ9LmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV0sIC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3hbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2tbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHt9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7fS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOi13ZWJraXQtYXV0b2ZpbGwpe2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZVtfbmdjb250ZW50LSVDT01QJV17cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fS5tYXQtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfVtfbmdob3N0LSVDT01QJV17Y29udGFpbjpzdHJpY3Q7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDppbmhlcml0O2Rpc3BsYXk6Z3JpZDtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW47d2lkdGg6MTAwJTtncmlkLXRlbXBsYXRlLWFyZWFzOiJ5YXhpcyBzZXJpZXMiICJkb3QgeGF4aXMiO2dyaWQtdGVtcGxhdGUtY29sdW1uczo1MHB4IDFmcjtncmlkLWF1dG8tcm93czoxZnIgMzBweH0uY29udGFpbmVyLmRhcmstbW9kZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2ZmZn0uc2VyaWVzLXZpZXdbX25nY29udGVudC0lQ09NUCVde2dyaWQtYXJlYTpzZXJpZXM7cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6aGlkZGVufS5zZXJpZXMtdmlld1tfbmdjb250ZW50LSVDT01QJV0gICBjYW52YXNbX25nY29udGVudC0lQ09NUCVdLCAuc2VyaWVzLXZpZXdbX25nY29udGVudC0lQ09NUCVdICAgc3ZnW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnNlcmllcy12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGxpbmUtY2hhcnQtZ3JpZC12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSwgLnNlcmllcy12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGxpbmUtY2hhcnQtaW50ZXJhY3RpdmUtdmlld1tfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMCU7bGVmdDowO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3dpZHRoOjEwMCV9LngtYXhpc1tfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOnhheGlzfS55LWF4aXNbX25nY29udGVudC0lQ09NUCVde2dyaWQtYXJlYTp5YXhpc30uZG90W19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2Rpc3BsYXk6ZmxleDtncmlkLWFyZWE6ZG90O2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uZG90W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yZWN0W19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MXB4O3dpZHRoOjFweDtiYWNrZ3JvdW5kLWNvbG9yOiNhYWF9J10sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHhmdCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJsaW5lLWNoYXJ0Iix0ZW1wbGF0ZVVybDoibGluZV9jaGFydF9jb21wb25lbnQubmcuaHRtbCIsc3R5bGVVcmxzOlsibGluZV9jaGFydF9jb21wb25lbnQuY3NzIl0sY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkhofV19KSx7c2VyaWVzVmlldzpbe3R5cGU6RnIsYXJnczpbInNlcmllc1ZpZXciLHtzdGF0aWM6ITAscmVhZDpjaH1dfV0seEF4aXM6W3t0eXBlOkZyLGFyZ3M6WyJ4QXhpcyIse3N0YXRpYzohMCxyZWFkOmNofV19XSx5QXhpczpbe3R5cGU6RnIsYXJnczpbInlBeGlzIix7c3RhdGljOiEwLHJlYWQ6Y2h9XX1dLGNoYXJ0RWw6W3t0eXBlOkZyLGFyZ3M6WyJjaGFydEVsIix7c3RhdGljOiExLHJlYWQ6Y2h9XX1dLHVzZURhcmtNb2RlOlt7dHlwZTp5X31dLHByZWZlcnJlZFJlbmRlcmVyVHlwZTpbe3R5cGU6eV99XSxzZXJpZXNEYXRhOlt7dHlwZTp5X31dLGZpeGVkVmlld0JveDpbe3R5cGU6eV99XSxzZXJpZXNNZXRhZGF0YU1hcDpbe3R5cGU6eV99XSx4U2NhbGVUeXBlOlt7dHlwZTp5X31dLHlTY2FsZVR5cGU6W3t0eXBlOnlffV0sY3VzdG9tWEZvcm1hdHRlcjpbe3R5cGU6eV99XSxjdXN0b21ZRm9ybWF0dGVyOlt7dHlwZTp5X31dLHRvb2x0aXBUZW1wbGF0ZTpbe3R5cGU6eV99XSxkaXNhYmxlVXBkYXRlOlt7dHlwZTp5X31dLGlnbm9yZVlPdXRsaWVyczpbe3R5cGU6eV99XX0pO2NsYXNzIFJmdHtjb25zdHJ1Y3Rvcih0LGUpe3RoaXMucmVmPXQsdGhpcy5kaWFsb2c9ZSx0aGlzLkRhdGFMb2FkU3RhdGU9QkUsdGhpcy5SZW5kZXJlclR5cGU9YTUsdGhpcy5TY2FsZVR5cGU9cjUsdGhpcy5YQXhpc1R5cGU9Y1IsdGhpcy5vbkZ1bGxTaXplVG9nZ2xlPW5ldyBBYix0aGlzLm9uUGluQ2xpY2tlZD1uZXcgQWIsdGhpcy55U2NhbGVUeXBlPXI1LkxJTkVBUix0aGlzLnJlbGF0aXZlWEZvcm1hdHRlcj1Rb3QsdGhpcy52YWx1ZUZvcm1hdHRlcj1qb3QsdGhpcy5zdGVwRm9ybWF0dGVyPVlvdH10b2dnbGVZU2NhbGVUeXBlKCl7dGhpcy55U2NhbGVUeXBlPXRoaXMueVNjYWxlVHlwZT09PXI1LkxJTkVBUj9yNS5MT0cxMDpyNS5MSU5FQVJ9cmVzZXREb21haW4oKXt0aGlzLmxpbmVDaGFydCYmdGhpcy5saW5lQ2hhcnQudmlld0JveFJlc2V0KCl9dHJhY2tCeVRvb2x0aXBEYXR1bSh0LGUpe3JldHVybiBlLmlkfWdldEN1c3RvbVhGb3JtYXR0ZXIoKXtzd2l0Y2godGhpcy54QXhpc1R5cGUpe2Nhc2UgY1IuUkVMQVRJVkU6cmV0dXJuIFFvdDtjYXNlIGNSLlNURVA6cmV0dXJuIFlvdDtjYXNlIGNSLldBTExfVElNRTpkZWZhdWx0OnJldHVybn19Z2V0Q3Vyc29yQXdhcmVUb29sdGlwRGF0YSh0LGUpe2NvbnN0IG49dC5tYXAoKHQ9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7bWV0YWRhdGE6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQubWV0YWRhdGEpLHtjbG9zZXN0OiExLGRpc3RTcVRvQ3Vyc29yOk1hdGguaHlwb3QodC5wb2ludC54LWUueCx0LnBvaW50LnktZS55KX0pfSkpKTtsZXQgbz0xLzAsaT0wO2ZvcihsZXQgdD0wO3Q8bi5sZW5ndGg7dCsrKW8+blt0XS5tZXRhZGF0YS5kaXN0U3FUb0N1cnNvciYmKG89blt0XS5tZXRhZGF0YS5kaXN0U3FUb0N1cnNvcixpPXQpO3N3aXRjaChuLmxlbmd0aCYmKG5baV0ubWV0YWRhdGEuY2xvc2VzdD0hMCksdGhpcy50b29sdGlwU29ydCl7Y2FzZSBsUi5ERUZBVUxUOnJldHVybiBuO2Nhc2UgbFIuQVNDRU5ESU5HOnJldHVybiBuLnNvcnQoKCh0LGUpPT50LnBvaW50LnktZS5wb2ludC55KSk7Y2FzZSBsUi5ERVNDRU5ESU5HOnJldHVybiBuLnNvcnQoKCh0LGUpPT5lLnBvaW50LnktdC5wb2ludC55KSk7Y2FzZSBsUi5ORUFSRVNUOnJldHVybiBuLnNvcnQoKCh0LGUpPT50Lm1ldGFkYXRhLmRpc3RTcVRvQ3Vyc29yLWUubWV0YWRhdGEuZGlzdFNxVG9DdXJzb3IpKX19b3BlbkRhdGFEb3dubG9hZERpYWxvZygpe3RoaXMuZGlhbG9nLm9wZW4odGhpcy5EYXRhRG93bmxvYWRDb21wb25lbnQse2RhdGE6e2NhcmRJZDp0aGlzLmNhcmRJZH19KX19ZnVuY3Rpb24gVGZ0KHQsZSl7cmV0dXJuIHQubGVuZ3RoPT09ZS5sZW5ndGgmJnQuZXZlcnkoKCh0LG4pPT57Y29uc3Qgbz1lW25dLGk9dC5wb2ludHMsYT1vLnBvaW50cztyZXR1cm4gdC5ydW5JZD09PW8ucnVuSWQmJmkubGVuZ3RoPT09YS5sZW5ndGgmJmkuZXZlcnkoKCh0LGUpPT57Y29uc3Qgbj1hW2VdO3JldHVybiB0Lng9PT1uLngmJnQueT09PW4ueX0pKX0pKX1SZnQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFJmdCkoTXUoY2gpLE11KEhXKSl9LFJmdC7JtWNtcD1Vbyh7dHlwZTpSZnQsc2VsZWN0b3JzOltbInNjYWxhci1jYXJkLWNvbXBvbmVudCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24gdChlLG4pe2lmKDEmZSYmV2IoeGZ0LDEpLDImZSl7bGV0IHQ7VWIodD1ZYigpKSYmKG4ubGluZUNoYXJ0PXQuZmlyc3QpfX0saW5wdXRzOntjYXJkSWQ6ImNhcmRJZCIsY2hhcnRNZXRhZGF0YU1hcDoiY2hhcnRNZXRhZGF0YU1hcCIsRGF0YURvd25sb2FkQ29tcG9uZW50OiJEYXRhRG93bmxvYWRDb21wb25lbnQiLGRhdGFTZXJpZXM6ImRhdGFTZXJpZXMiLGlnbm9yZU91dGxpZXJzOiJpZ25vcmVPdXRsaWVycyIsaXNDYXJkVmlzaWJsZToiaXNDYXJkVmlzaWJsZSIsaXNFdmVyVmlzaWJsZToiaXNFdmVyVmlzaWJsZSIsaXNQaW5uZWQ6ImlzUGlubmVkIixsb2FkU3RhdGU6ImxvYWRTdGF0ZSIsc2hvd0Z1bGxTaXplOiJzaG93RnVsbFNpemUiLHNtb290aGluZ0VuYWJsZWQ6InNtb290aGluZ0VuYWJsZWQiLHRhZzoidGFnIix0aXRsZToidGl0bGUiLHRvb2x0aXBTb3J0OiJ0b29sdGlwU29ydCIseEF4aXNUeXBlOiJ4QXhpc1R5cGUiLHhTY2FsZVR5cGU6InhTY2FsZVR5cGUiLHVzZURhcmtNb2RlOiJ1c2VEYXJrTW9kZSJ9LG91dHB1dHM6e29uRnVsbFNpemVUb2dnbGU6Im9uRnVsbFNpemVUb2dnbGUiLG9uUGluQ2xpY2tlZDoib25QaW5DbGlja2VkIn0sZGVjbHM6MjgsdmFyczoxNCxjb25zdHM6ZnVuY3Rpb24oKXtsZXQgdCxlLG4sbyxpO3JldHVybiB0PSJ1bmRlZmluZWQiIT10eXBlb2YgbmdJMThuQ2xvc3VyZU1vZGUmJm5nSTE4bkNsb3N1cmVNb2RlP2dvb2cuZ2V0TXNnKCJGaXQgbGluZSBjaGFydCBkb21haW5zIHRvIGRhdGEiKTokbG9jYWxpemVgOkEgYnV0dG9uIHRoYXQgcmVzZXRzIGxpbmUgY2hhcnQgZG9tYWluIHRvIHRoZSBkYXRh4pCfZTY4YTU1Mjk0MWFiNDI3YTk5ZTc0MzdlMDg0NDNmMzBhYzcxY2NkNuKQnzM4MzA2NDY1MjEwNTgyNjg1NTg6Rml0IGxpbmUgY2hhcnQgZG9tYWlucyB0byBkYXRhYCxlPSJ1bmRlZmluZWQiIT10eXBlb2YgbmdJMThuQ2xvc3VyZU1vZGUmJm5nSTE4bkNsb3N1cmVNb2RlP2dvb2cuZ2V0TXNnKCJQaW4gY2FyZCIpOiRsb2NhbGl6ZWA6QSBidXR0b24gdG8gcGluIGEgY2FyZC7ikJ9lNjY1ZGM3MTJiZDVmMThkNGRmYTNhMjllMTI1ZDU2NWNjNTFlMmY24pCfNzI4NDYwNjQyNjIzNDM3NTM0NDpQaW4gY2FyZGAsbj0idW5kZWZpbmVkIiE9dHlwZW9mIG5nSTE4bkNsb3N1cmVNb2RlJiZuZ0kxOG5DbG9zdXJlTW9kZT9nb29nLmdldE1zZygiVG9nZ2xlIGZ1bGwgc2l6ZSBtb2RlIik6JGxvY2FsaXplYDpBIGJ1dHRvbiBvbiBsaW5lIGNoYXJ0IHRoYXQgdG9nZ2xlcyBmdWxsIHNpemUgbW9kZS7ikJ9mYzhmNzY3ZDBiOWY5MzAxODdhMWJhZTM0NDc3YWQyODczNmVjZTMz4pCfOTE1NzIxNTYzNjM4OTI2NTk3OlRvZ2dsZSBmdWxsIHNpemUgbW9kZWAsbz0idW5kZWZpbmVkIiE9dHlwZW9mIG5nSTE4bkNsb3N1cmVNb2RlJiZuZ0kxOG5DbG9zdXJlTW9kZT9nb29nLmdldE1zZygiTW9yZSBsaW5lIGNoYXJ0IG9wdGlvbnMiKTokbG9jYWxpemVgOkFuIG92ZXJmbG93IG1lbnUgYnV0dG9uIHRoYXQgb3BlbnMgbW9yZSBsaW5lIGNoYXJ0IG9wdGlvbnPikJ9iMjYwZmFiOTQ2YTMwNzdjZTIwZmQyOGUzMzY5NzlmNTg2NzIwZThk4pCfODc4MDUzNzQwMjEwMzM2NDM1Ok1vcmUgbGluZSBjaGFydCBvcHRpb25zYCxpPSJ1bmRlZmluZWQiIT10eXBlb2YgbmdJMThuQ2xvc3VyZU1vZGUmJm5nSTE4bkNsb3N1cmVNb2RlP2dvb2cuZ2V0TXNnKCJUb2dnbGUgWS1heGlzIGxvZyBzY2FsZSBvbiBsaW5lIGNoYXJ0Iik6JGxvY2FsaXplYDpBIGJ1dHRvbiB0aGF0IHRvZ2dsZXMgbG9nIHNjYWxlIG9uIHktYXhpcyBvbiBhIGxpbmUgY2hhcnTikJ9mZTkxZjk2YWI5YjNiYWNhNWE0ODkxM2YyYjBmYWU4NDQ4M2Q5M2Uz4pCfMzM3NDY0NTYyMDYzODg4MzkyNjpUb2dnbGUgWS1heGlzIGxvZyBzY2FsZSBvbiBsaW5lIGNoYXJ0YCxbWzEsImhlYWRpbmciXSxbMSwidGFnIiwzLCJ0aXRsZSIsInZhbHVlIl0sWzEsImNvbnRyb2xzIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIix0LDMsImRpc2FibGVkIiwidGl0bGUiLCJjbGljayJdLFsic3ZnSWNvbiIsInNldHRpbmdzX292ZXJzY2FuXzI0cHgiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLGUsMSwicGluLWJ1dHRvbiIsMywiY2xpY2siXSxbMywic3ZnSWNvbiJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsbiwidGl0bGUiLCJUb2dnbGUgZnVsbCBzaXplIG1vZGUiLDMsImNsaWNrIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIixvLCJ0aXRsZSIsIk1vcmUgbGluZSBjaGFydCBvcHRpb25zIiwzLCJtYXRNZW51VHJpZ2dlckZvciJdLFsic3ZnSWNvbiIsIm1vcmVfdmVydF8yNHB4Il0sWyJtZW51IiwibWF0TWVudSJdLFsibWF0LW1lbnUtaXRlbSIsIiIsImFyaWEtbGFiZWwiLGksMywiY2xpY2siXSxbInN2Z0ljb24iLCJsaW5lX3dlaWdodF8yNHB4Il0sWyJtYXQtbWVudS1pdGVtIiwiIiwiYXJpYS1sYWJlbCIsIk9wZW4gZGlhbG9nIHRvIGRvd25sb2FkIGRhdGEiLDMsImNsaWNrIl0sWyJzdmdJY29uIiwiZ2V0X2FwcF8yNHB4Il0sWzEsImNoYXJ0LWNvbnRhaW5lciJdLFsiZGlhbWV0ZXIiLCIxOCIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWyJ0b29sdGlwIiwiIl0sWyJkaWFtZXRlciIsIjE4Il0sWzMsImRpc2FibGVVcGRhdGUiLCJwcmVmZXJyZWRSZW5kZXJlclR5cGUiLCJzZXJpZXNEYXRhIiwic2VyaWVzTWV0YWRhdGFNYXAiLCJ4U2NhbGVUeXBlIiwieVNjYWxlVHlwZSIsImN1c3RvbVhGb3JtYXR0ZXIiLCJpZ25vcmVZT3V0bGllcnMiLCJ0b29sdGlwVGVtcGxhdGUiLCJ1c2VEYXJrTW9kZSIsIm9uVmlld0JveE92ZXJyaWRkZW4iXSxbMSwidG9vbHRpcCJdLFsxLCJjaXJjbGUtaGVhZGVyIl0sWzQsIm5nRm9yIiwibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSJdLFsxLCJ0b29sdGlwLXJvdyJdLFsxLCJ0b29sdGlwLXJvdy1jaXJjbGUiXSxbMSwibmFtZSJdXX0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pe2lmKDEmZSYmKE91KDAsImRpdiIsMCksd3UoMSwidGItdHJ1bmNhdGVkLXBhdGgiLDEpLE91KDIsInNwYW4iLDIpLE91KDMsImJ1dHRvbiIsMyksTnUoImNsaWNrIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLnJlc2V0RG9tYWluKCl9KSksT2IoNCwiYXN5bmMiKSxPYig1LCJhc3luYyIpLHd1KDYsIm1hdC1pY29uIiw0KSxQdSgpLE91KDcsImJ1dHRvbiIsNSksTnUoImNsaWNrIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uUGluQ2xpY2tlZC5lbWl0KCFuLmlzUGlubmVkKX0pKSx3dSg4LCJtYXQtaWNvbiIsNiksUHUoKSxPdSg5LCJidXR0b24iLDcpLE51KCJjbGljayIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vbkZ1bGxTaXplVG9nZ2xlLmVtaXQoKX0pKSx3dSgxMCwibWF0LWljb24iLDYpLFB1KCksT3UoMTEsImJ1dHRvbiIsOCksd3UoMTIsIm1hdC1pY29uIiw5KSxQdSgpLE91KDEzLCJtYXQtbWVudSIsbnVsbCwxMCksT3UoMTUsImJ1dHRvbiIsMTEpLE51KCJjbGljayIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi50b2dnbGVZU2NhbGVUeXBlKCl9KSksd3UoMTYsIm1hdC1pY29uIiwxMiksT3UoMTcsInNwYW4iKSxNZigxOCwiVG9nZ2xlIFktYXhpcyBsb2cgc2NhbGUiKSxQdSgpLFB1KCksT3UoMTksImJ1dHRvbiIsMTMpLE51KCJjbGljayIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vcGVuRGF0YURvd25sb2FkRGlhbG9nKCl9KSksd3UoMjAsIm1hdC1pY29uIiwxNCksT3UoMjEsInNwYW4iKSxNZigyMiwiRG93bmxvYWQgZGF0YSIpLFB1KCksUHUoKSxQdSgpLFB1KCksUHUoKSxPdSgyMywiZGl2IiwxNSksV20oMjQsT2Z0LDEsMCwibWF0LXNwaW5uZXIiLDE2KSxXbSgyNSxQZnQsMiwxMCwibmctY29udGFpbmVyIiwxNyksV20oMjYsQWZ0LDE2LDQsIm5nLXRlbXBsYXRlIixudWxsLDE4LEtiKSxQdSgpKSwyJmUpe2NvbnN0IHQ9R20oMTQpO0pjKDEpLFV1KCJ0aXRsZSIsbi50YWcpLFV1KCJ2YWx1ZSIsbi50aXRsZSksSmMoMiksdnUoImRpc2FibGVkIiwhbi5saW5lQ2hhcnR8fCFQYig0LDEwLG4ubGluZUNoYXJ0LmdldElzVmlld0JveE92ZXJyaWRkZW4oKSkpKCJ0aXRsZSIsbi5saW5lQ2hhcnQmJlBiKDUsMTIsbi5saW5lQ2hhcnQuZ2V0SXNWaWV3Qm94T3ZlcnJpZGRlbigpKT8iTGluZSBjaGFydCBpcyBhbHJlYWR5IGZpdHRlZCB0byBkYXRhLiBXaGVuIGRhdGEgdXBkYXRlcywgdGhlIGxpbmUgY2hhcnQgd2lsbCBhdXRvIGZpdCB0byBpdHMgZG9tYWluLiI6IkZpdCBsaW5lIGNoYXJ0IGRvbWFpbnMgdG8gZGF0YSIpLEpjKDQpLE5tKCJ0aXRsZSIsbi5pc1Bpbm5lZD8iVW5waW4gY2FyZCI6IlBpbiBjYXJkIiksSmMoMSksdnUoInN2Z0ljb24iLG4uaXNQaW5uZWQ/ImtlZXBfMjRweCI6ImtlZXBfb3V0bGluZV8yNHB4IiksSmMoMiksdnUoInN2Z0ljb24iLG4uc2hvd0Z1bGxTaXplPyJmdWxsc2NyZWVuX2V4aXRfMjRweCI6ImZ1bGxzY3JlZW5fMjRweCIpLEpjKDEpLHZ1KCJtYXRNZW51VHJpZ2dlckZvciIsdCksSmMoMTMpLHZ1KCJuZ0lmIixuLmxvYWRTdGF0ZT09PW4uRGF0YUxvYWRTdGF0ZS5MT0FESU5HKSxKYygxKSx2dSgibmdJZiIsbi5pc0V2ZXJWaXNpYmxlKX19LGRpcmVjdGl2ZXM6W1kyLE5ILGNHLE5HLERHLE9HLGF2LFAxLHhmdCxvdl0scGlwZXM6W012LHd2XSxzdHlsZXM6WycubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1iYWRnZS1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo5cHh9Lm1hdC1iYWRnZS1sYXJnZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4fS5tYXQtaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWhlYWRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAyNHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE1cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjgzKS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1oNltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC42NykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtYm9keS1zdHJvbmdbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MCAwIDEycHh9Lm1hdC1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FwdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTJweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6MzAwIDExMnB4LzExMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wNWVtO21hcmdpbjowIDAgNTZweH0ubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNTZweC81NnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMmVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNDVweC80OHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMDVlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDM0cHgvNDBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1yYWlzZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3Ryb2tlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZsYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mYWJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW1pbmktZmFiW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtYnV0dG9uLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FyZC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjBweH0ubWF0LWNhcmQtc3VidGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hlY2tib3gtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC10cmFpbGluZy1pY29uLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC1yZW1vdmUubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxOHB4fS5tYXQtdGFibGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWhlYWRlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb290ZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jYWxlbmRhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FsZW5kYXItYm9keVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYWxlbmRhci1wZXJpb2QtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWRpYWxvZy10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTI1O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTUwJTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjVlbTt3aWR0aDoxLjVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW07bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41ZW0gMDtib3JkZXItdG9wOi44NDM3NWVtIHNvbGlkIHRyYW5zcGFyZW50fS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3RvcDotMC44NDM3NWVtO3BhZGRpbmctdG9wOi44NDM3NWVtfS5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjc1JTttYXJnaW4tdG9wOi42NjY2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNzkxNjY2NjY2N2VtKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAycHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyM2VtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzUzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi41NDE2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNjY2NjY2NjY2N2VtKX1AbWVkaWEgcHJpbnR7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIyZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIxZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMmVtKSBzY2FsZSgwLjc1KX19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjI1ZW0gMCAuNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4wOTM3NWVtO21hcmdpbi10b3A6LTAuNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MWVtIDAgMWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjg0Mzc1ZW07bWFyZ2luLXRvcDotMC4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH1pbnB1dC5tYXQtaW5wdXQtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDotMC4wNjI1ZW19Lm1hdC1tZW51LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1wYWdpbmF0b3JbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXBhZ2luYXRvci1wYWdlLXNpemVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3RbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXN0ZXBwZXItdmVydGljYWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc3RlcC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0Om5vcm1hbH0ubWF0LXN0ZXAtbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRhYi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjB9Lm1hdC10b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTZweH0ubWF0LW9wdGdyb3VwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LXNpbXBsZS1zbmFja2Jhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbltfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRyZWVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbmVzdGVkLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4fS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVdOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtcmlwcGxlLm1hdC1yaXBwbGUtdW5ib3VuZGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6NTAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7dHJhbnNmb3JtOnNjYWxlKDApfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpub25lfS5jZGstdmlzdWFsbHktaGlkZGVuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7bGVmdDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmVtcHR5e2Rpc3BsYXk6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LXBhbmVbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOmF1dG87Ym94LXNpemluZzpib3JkZXItYm94O3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7bWF4LXdpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlfS5jZGstb3ZlcmxheS1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKTtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5Oi42fS5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjMyKX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTowfS5jZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO292ZXJmbG93LXk6c2Nyb2xsfUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnR7fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5ke30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxse2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCAwcyAxbXN9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06bm90KDotd2Via2l0LWF1dG9maWxsKXthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIDBzIDFtc310ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemVbX25nY29udGVudC0lQ09NUCVde3Jlc2l6ZTpub25lfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmdbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OmF1dG8gIWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW4gIWltcG9ydGFudH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nLWZpcmVmb3hbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OjAgIWltcG9ydGFudH0ubWF0LWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX1bX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Ym94LXNpemluZzpib3JkZXItYm94O2hlaWdodDoxMDAlO292ZXJmbG93OmF1dG87cGFkZGluZzoxNnB4O3BhZGRpbmctdG9wOjRweH0uaGVhZGluZ1tfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbjtmb250LXNpemU6MTRweDttYXJnaW4tYm90dG9tOjRweDtwb3NpdGlvbjpyZWxhdGl2ZX0udGFnW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW59LnBpbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxOHB4fS5jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTt3aGl0ZS1zcGFjZTpub3dyYXA7ZmxleC1zaHJpbms6MDttYXJnaW4tcmlnaHQ6LTEycHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0uY2hhcnQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZTtmbGV4OjF9LmNoYXJ0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICBtYXQtc3Bpbm5lcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MTFweDt0b3A6MTFweH0uY2hhcnQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGxpbmUtY2hhcnRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjEwMCV9LnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1zcGFjaW5nOjRweDtmb250LXNpemU6MTNweH0udG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17dGV4dC1hbGlnbjpsZWZ0fS50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b29sdGlwLXJvd1tfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwfS50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b29sdGlwLXJvdy1jaXJjbGVbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmlubGluZS1mbGV4O2hlaWdodDoxMnB4O3dpZHRoOjEycHh9LnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdICAgLnRvb2x0aXAtcm93LWNpcmNsZVtfbmdjb250ZW50LSVDT01QJV0gPiBzcGFuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItcmFkaXVzOjUwJTtib3JkZXI6MXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsLjQpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxMHB4O3dpZHRoOjEwcHh9LnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdICAgLmNsb3Nlc3RbX25nY29udGVudC0lQ09NUCVdICAgLnRvb2x0aXAtcm93LWNpcmNsZVtfbmdjb250ZW50LSVDT01QJV0gPiBzcGFuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItY29sb3I6I2ZmZjtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCAjZmZmfSddLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihSZnQsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3Rvcjoic2NhbGFyLWNhcmQtY29tcG9uZW50Iix0ZW1wbGF0ZVVybDoic2NhbGFyX2NhcmRfY29tcG9uZW50Lm5nLmh0bWwiLHN0eWxlVXJsczpbInNjYWxhcl9jYXJkX2NvbXBvbmVudC5jc3MiXSxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Y2h9LHt0eXBlOkhXfV19KSx7Y2FyZElkOlt7dHlwZTp5X31dLGNoYXJ0TWV0YWRhdGFNYXA6W3t0eXBlOnlffV0sRGF0YURvd25sb2FkQ29tcG9uZW50Olt7dHlwZTp5X31dLGRhdGFTZXJpZXM6W3t0eXBlOnlffV0saWdub3JlT3V0bGllcnM6W3t0eXBlOnlffV0saXNDYXJkVmlzaWJsZTpbe3R5cGU6eV99XSxpc0V2ZXJWaXNpYmxlOlt7dHlwZTp5X31dLGlzUGlubmVkOlt7dHlwZTp5X31dLGxvYWRTdGF0ZTpbe3R5cGU6eV99XSxzaG93RnVsbFNpemU6W3t0eXBlOnlffV0sc21vb3RoaW5nRW5hYmxlZDpbe3R5cGU6eV99XSx0YWc6W3t0eXBlOnlffV0sdGl0bGU6W3t0eXBlOnlffV0sdG9vbHRpcFNvcnQ6W3t0eXBlOnlffV0seEF4aXNUeXBlOlt7dHlwZTp5X31dLHhTY2FsZVR5cGU6W3t0eXBlOnlffV0sdXNlRGFya01vZGU6W3t0eXBlOnlffV0sb25GdWxsU2l6ZVRvZ2dsZTpbe3R5cGU6X199XSxvblBpbkNsaWNrZWQ6W3t0eXBlOl9ffV0sbGluZUNoYXJ0Olt7dHlwZTpGcixhcmdzOlt4ZnRdfV19KTtjbGFzcyBOZnR7Y29uc3RydWN0b3IodCl7dGhpcy5zdG9yZT10LHRoaXMuRGF0YURvd25sb2FkQ29tcG9uZW50PWI1LHRoaXMuZnVsbFdpZHRoQ2hhbmdlZD1uZXcgQWIsdGhpcy5mdWxsSGVpZ2h0Q2hhbmdlZD1uZXcgQWIsdGhpcy5waW5TdGF0ZUNoYW5nZWQ9bmV3IEFiLHRoaXMuaXNDYXJkVmlzaWJsZSQ9dGhpcy5zdG9yZS5zZWxlY3QoRFQpLnBpcGUoaHQoKHQ9PnQuaGFzKHRoaXMuY2FyZElkKSkpLGtlKCkpLHRoaXMuaXNFdmVyVmlzaWJsZSQ9dGhpcy5pc0NhcmRWaXNpYmxlJC5waXBlKGhuKCh0PT4hdCksITApKSx0aGlzLnVzZURhcmtNb2RlJD10aGlzLnN0b3JlLnNlbGVjdChNRSksdGhpcy5pZ25vcmVPdXRsaWVycyQ9dGhpcy5zdG9yZS5zZWxlY3QoVlQpLHRoaXMudG9vbHRpcFNvcnQkPXRoaXMuc3RvcmUuc2VsZWN0KEJUKSx0aGlzLnhBeGlzVHlwZSQ9dGhpcy5zdG9yZS5zZWxlY3QoalQpLHRoaXMueFNjYWxlVHlwZSQ9dGhpcy5zdG9yZS5zZWxlY3QoalQpLnBpcGUoaHQoKHQ9Pntzd2l0Y2godCl7Y2FzZSBjUi5TVEVQOmNhc2UgY1IuUkVMQVRJVkU6cmV0dXJuIHI1LkxJTkVBUjtjYXNlIGNSLldBTExfVElNRTpyZXR1cm4gcjUuVElNRTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgSW52YWxpZCB4QXhpc1R5cGUgZm9yIGxpbmUgY2hhcnQuICR7dH1gKX19KSkpLHRoaXMuc2NhbGFyU21vb3RoaW5nJD10aGlzLnN0b3JlLnNlbGVjdChXVCksdGhpcy5zbW9vdGhpbmdFbmFibGVkJD10aGlzLnN0b3JlLnNlbGVjdChXVCkucGlwZShodCgodD0+dD4wKSkpLHRoaXMuc2hvd0Z1bGxTaXplPSExfWlzU2NhbGFyQ2FyZE1ldGFkYXRhKHQpe2NvbnN0e3BsdWdpbjplfT10O3JldHVybiBlPT09c1IuU0NBTEFSU31vbkZ1bGxTaXplVG9nZ2xlKCl7dGhpcy5zaG93RnVsbFNpemU9IXRoaXMuc2hvd0Z1bGxTaXplLHRoaXMuZnVsbFdpZHRoQ2hhbmdlZC5lbWl0KHRoaXMuc2hvd0Z1bGxTaXplKSx0aGlzLmZ1bGxIZWlnaHRDaGFuZ2VkLmVtaXQodGhpcy5zaG93RnVsbFNpemUpfW5nT25Jbml0KCl7Y29uc3QgdD10aGlzLnN0b3JlLnNlbGVjdChrVCx0aGlzLmNhcmRJZCkucGlwZShHdCgodD0+ISF0JiZ0aGlzLmlzU2NhbGFyQ2FyZE1ldGFkYXRhKHQpKSksaHQoKHQ9PnQpKSk7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoWyJzbW9vdGhlZCIsdF0pfWNvbnN0IG49dGhpcy5zdG9yZS5zZWxlY3QoUFQsdGhpcy5jYXJkSWQpLnBpcGUoR3QoKHQ9PkJvb2xlYW4odCkpKSxodCgodD0+dCkpLGFuKDEpKS5waXBlKGNlKHRoaXMuc3RvcmUuc2VsZWN0KGpUKSksaHQoKChbdCxlXSk9Pk9iamVjdC5rZXlzKHQpLm1hcCgobj0+KHtydW5JZDpuLHBvaW50czp0aGlzLnN0ZXBTZXJpZXNUb0xpbmVTZXJpZXModFtuXSxlKX0pKSkpKSxrZShUZnQpKS5waXBlKGNlKHRoaXMuc3RvcmUuc2VsZWN0KGpUKSksaHQoKChbdCxlXSk9PnQubWFwKCh0PT57bGV0IG49dC5wb2ludHMubWFwKCh0PT57Y29uc3Qgbj0xZTMqdC53YWxsVGltZSxvPWU9PT1jUi5TVEVQP3QueDpuO3JldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3g6byx3YWxsVGltZTpufSl9KSk7aWYoZT09PWNSLlJFTEFUSVZFJiZuLmxlbmd0aCl7Y29uc3QgdD1uWzBdO249bi5tYXAoKGU9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSx7eDplLngtdC54fSkpKX1yZXR1cm57cnVuSWQ6dC5ydW5JZCxwb2ludHM6bn19KSkpKSkucGlwZShjZSh0aGlzLnN0b3JlLnNlbGVjdChHVCkpLGh0KCgoW3QsZV0pPT5lPyhmdW5jdGlvbiBuKHQpe3ZhciBlO2NvbnN0IG49W107Zm9yKGNvbnN0IG8gb2YgdCl7Y29uc3QgdD1bXTtsZXQgaT1OdW1iZXIuaXNGaW5pdGUobnVsbD09PShlPW8ucG9pbnRzWzBdKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS54KT9vLnBvaW50c1swXS54Oi0xLzAsYT1bXTtmb3IoY29uc3QgZSBvZiBvLnBvaW50cylOdW1iZXIuaXNGaW5pdGUoZS54KT8oZS54PGkmJih0LnB1c2goe3Nlcmllc0lkOkpTT04uc3RyaW5naWZ5KFtvLnJ1bklkLHQubGVuZ3RoXSkscnVuSWQ6by5ydW5JZCxwb2ludHM6YX0pLGE9W10pLGEucHVzaChlKSxpPWUueCk6YS5wdXNoKGUpO3QucHVzaCh7c2VyaWVzSWQ6SlNPTi5zdHJpbmdpZnkoW28ucnVuSWQsdC5sZW5ndGhdKSxydW5JZDpvLnJ1bklkLHBvaW50czphfSk7Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspbi5wdXNoKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0W2VdKSx7cGFydGl0aW9uSW5kZXg6ZSxwYXJ0aXRpb25TaXplOnQubGVuZ3RofSkpfXJldHVybiBufSkodCk6dC5tYXAoKHQ9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7c2VyaWVzSWQ6dC5ydW5JZCxwYXJ0aXRpb25JbmRleDowLHBhcnRpdGlvblNpemU6MX0pKSkpKSxhbigxKSk7dGhpcy5kYXRhU2VyaWVzJD1uLnBpcGUoY2UodGhpcy5zdG9yZS5zZWxlY3QoV1QpKSxkbigoKFt0LG5dKT0+e2NvbnN0IG89dC5tYXAoKCh7c2VyaWVzSWQ6dCxwb2ludHM6ZX0pPT4oe2lkOnQscG9pbnRzOmV9KSkpO3JldHVybiBuPD0wP1oobyk6UnQoKGZ1bmN0aW9uIGkodCxlKXt2YXIgbjtyZXR1cm4gclIodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtOdW1iZXIuaXNGaW5pdGUoZSl8fChlPTApLGU9TWF0aC5tYXgoMCxNYXRoLm1pbihlLDEpKTtjb25zdCBvPVtdO2Zvcihjb25zdCBpIG9mIHQpe2NvbnN0IHQ9bnVsbD09PShuPWkucG9pbnRzWzBdKXx8dm9pZCAwPT09bj92b2lkIDA6bi55O2lmKGkucG9pbnRzLmV2ZXJ5KChlPT5lLnk9PXQpKSl7by5wdXNoKGkpO2NvbnRpbnVlfWxldCBhPWkucG9pbnRzLmxlbmd0aD4wPzA6TmFOLHI9MDtjb25zdCBzPWkucG9pbnRzLm1hcCgodD0+e2NvbnN0IG49dC55O2lmKE51bWJlci5pc0Zpbml0ZShuKSl7YT1hKmUrKDEtZSkqbixyKys7Y29uc3Qgbz0xPT09ZT8xOjEtTWF0aC5wb3coZSxyKTtyZXR1cm57eDp0LngseTphL299fXJldHVybnt4OnQueCx5Om59fSkpO28ucHVzaCh7aWQ6aS5pZCxwb2ludHM6c30pfXJldHVybiBvfSkpfSkobyxuKSkucGlwZShodCgodD0+e2NvbnN0IG49by5tYXAoKChuLG8pPT4oe2lkOmUobi5pZCkscG9pbnRzOnRbb10ucG9pbnRzLm1hcCgoKHt5OnR9LGUpPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sbi5wb2ludHNbZV0pLHt5OnR9KSkpfSkpKTtyZXR1cm5bLi4ubywuLi5uXX0pKSl9KSksY24oW10pKSx0aGlzLmNoYXJ0TWV0YWRhdGFNYXAkPW4ucGlwZShkbigodD0+RHQodC5tYXAoKHQ9PnRoaXMuZ2V0UnVuRGlzcGxheU5hbWUodC5ydW5JZCkucGlwZShodCgoZT0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtkaXNwbGF5TmFtZTplfSkpKSkpKSkpKSxjZSh0aGlzLnN0b3JlLnNlbGVjdCh2TiksdGhpcy5zdG9yZS5zZWxlY3QoQ04pLHRoaXMuc3RvcmUuc2VsZWN0KFdUKSksZGUoMCksaHQoKChbdCxuLG8saV0pPT57dmFyIGE7Y29uc3Qgcj17fSxzPWk+MDtmb3IoY29uc3QgZSBvZiB0KXtjb25zdHtzZXJpZXNJZDp0LHJ1bklkOmksZGlzcGxheU5hbWU6cyxwYXJ0aXRpb25JbmRleDpsLHBhcnRpdGlvblNpemU6Y309ZTtyW3RdPXt0eXBlOnM1Lk9SSUdJTkFMLGlkOnQsZGlzcGxheU5hbWU6Yz4xP2Ake3N9OiAke2x9YDpzLHZpc2libGU6Qm9vbGVhbihuJiZuLmdldChpKSksY29sb3I6bnVsbCE9PShhPW9baV0pJiZ2b2lkIDAhPT1hP2E6IiNmZmYiLGF1eDohMSxvcGFjaXR5OjF9fWlmKCFzKXJldHVybiByO2Zvcihjb25zdFt0LG5db2YgT2JqZWN0LmVudHJpZXMocikpe2NvbnN0IG89ZSh0KTtyW29dPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxuKSx7aWQ6byx0eXBlOnM1LkRFUklWRUQsYXV4OiExLG9yaWdpbmFsU2VyaWVzSWQ6dH0pLG4uYXV4PSEwLG4ub3BhY2l0eT0uMjV9cmV0dXJuIHJ9KSksY24oe30pKSx0aGlzLmxvYWRTdGF0ZSQ9dGhpcy5zdG9yZS5zZWxlY3QoT1QsdGhpcy5jYXJkSWQpLHRoaXMudGFnJD10LnBpcGUoaHQoKHQ9PnQudGFnKSkpLHRoaXMudGl0bGUkPXRoaXMudGFnJC5waXBlKGh0KCh0PT56Mih0LHRoaXMuZ3JvdXBOYW1lKSkpKSx0aGlzLmlzUGlubmVkJD10aGlzLnN0b3JlLnNlbGVjdChJVCx0aGlzLmNhcmRJZCl9Z2V0UnVuRGlzcGxheU5hbWUodCl7cmV0dXJuIER0KFt0aGlzLnN0b3JlLnNlbGVjdChzTix7cnVuSWQ6dH0pLHRoaXMuc3RvcmUuc2VsZWN0KFBEKSx0aGlzLnN0b3JlLnNlbGVjdChsTix7cnVuSWQ6dH0pXSkucGlwZShodCgoKFtlLG4sb10pPT5xMih0LG8sZT9uW2VdOm51bGwpKSkpfXN0ZXBTZXJpZXNUb0xpbmVTZXJpZXModCxlKXtjb25zdCBuPWU9PT1jUi5TVEVQO3JldHVybiB0Lm1hcCgodD0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHt4Om4/dC5zdGVwOnQud2FsbFRpbWUseTp0LnZhbHVlfSkpKX19ZnVuY3Rpb24gSWZ0KHQsZSxuKXtjb25zdCBvPVtdLHtsZWZ0OmkscmlnaHQ6YX09ZSxyPShhLWkpL247bGV0IHM9MCxsPTA7Zm9yKGxldCBlPTA7ZTxuO2UrKyl7Y29uc3QgYT1pK2UqcixjPWErcixkPWU9PT1uLTE7bGV0IHA9bDtmb3IobD0wO3M8dC5sZW5ndGg7KXtjb25zdCBlPXRbc10sbj16ZnQoZSxhLGMsIWQpO2lmKHArPW4uY3VycixsKz1uLm5leHQsZS54K2UuZHg+YylicmVhaztzKyt9by5wdXNoKHt4OmEsZHg6cix5OnB9KX1yZXR1cm4gb31mdW5jdGlvbiB6ZnQodCxlLG4sbyl7Y29uc3QgaT10LngsYT10LngrdC5keDtpZihpPm58fGE8ZSlyZXR1cm57Y3VycjowLG5leHQ6MH07aWYoMD09PXQuZHgpcmV0dXJuIG8mJmE9PT1uP3tjdXJyOi41KnQueSxuZXh0Oi41KnQueX06e2N1cnI6dC55LG5leHQ6MH07Y29uc3Qgcj1NYXRoLm1pbihhLG4pLU1hdGgubWF4KGksZSk7cmV0dXJue2N1cnI6dC55KnIvdC5keCxuZXh0OjB9fU5mdC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8TmZ0KShNdShFaykpfSxOZnQuybVjbXA9VW8oe3R5cGU6TmZ0LHNlbGVjdG9yczpbWyJzY2FsYXItY2FyZCJdXSxpbnB1dHM6e0RhdGFEb3dubG9hZENvbXBvbmVudDoiRGF0YURvd25sb2FkQ29tcG9uZW50IixjYXJkSWQ6ImNhcmRJZCIsZ3JvdXBOYW1lOiJncm91cE5hbWUifSxvdXRwdXRzOntmdWxsV2lkdGhDaGFuZ2VkOiJmdWxsV2lkdGhDaGFuZ2VkIixmdWxsSGVpZ2h0Q2hhbmdlZDoiZnVsbEhlaWdodENoYW5nZWQiLHBpblN0YXRlQ2hhbmdlZDoicGluU3RhdGVDaGFuZ2VkIn0sZGVjbHM6MTUsdmFyczo0NSxjb25zdHM6W1szLCJjYXJkSWQiLCJjaGFydE1ldGFkYXRhTWFwIiwiRGF0YURvd25sb2FkQ29tcG9uZW50IiwiZGF0YVNlcmllcyIsImlnbm9yZU91dGxpZXJzIiwiaXNDYXJkVmlzaWJsZSIsImlzRXZlclZpc2libGUiLCJpc1Bpbm5lZCIsImxvYWRTdGF0ZSIsInNob3dGdWxsU2l6ZSIsInNtb290aGluZ0VuYWJsZWQiLCJ0YWciLCJ0aXRsZSIsInRvb2x0aXBTb3J0IiwieEF4aXNUeXBlIiwieFNjYWxlVHlwZSIsInVzZURhcmtNb2RlIiwib25GdWxsU2l6ZVRvZ2dsZSIsIm9uUGluQ2xpY2tlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoT3UoMCwic2NhbGFyLWNhcmQtY29tcG9uZW50IiwwKSxOdSgib25GdWxsU2l6ZVRvZ2dsZSIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vbkZ1bGxTaXplVG9nZ2xlKCl9KSkoIm9uUGluQ2xpY2tlZCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ucGluU3RhdGVDaGFuZ2VkLmVtaXQoZSl9KSksT2IoMSwiYXN5bmMiKSxPYigyLCJhc3luYyIpLE9iKDMsImFzeW5jIiksT2IoNCwiYXN5bmMiKSxPYig1LCJhc3luYyIpLE9iKDYsImFzeW5jIiksT2IoNywiYXN5bmMiKSxPYig4LCJhc3luYyIpLE9iKDksImFzeW5jIiksT2IoMTAsImFzeW5jIiksT2IoMTEsImFzeW5jIiksT2IoMTIsImFzeW5jIiksT2IoMTMsImFzeW5jIiksT2IoMTQsImFzeW5jIiksUHUoKSksMiZlJiZ2dSgiY2FyZElkIixuLmNhcmRJZCkoImNoYXJ0TWV0YWRhdGFNYXAiLFBiKDEsMTcsbi5jaGFydE1ldGFkYXRhTWFwJCkpKCJEYXRhRG93bmxvYWRDb21wb25lbnQiLG4uRGF0YURvd25sb2FkQ29tcG9uZW50KSgiZGF0YVNlcmllcyIsUGIoMiwxOSxuLmRhdGFTZXJpZXMkKSkoImlnbm9yZU91dGxpZXJzIixQYigzLDIxLG4uaWdub3JlT3V0bGllcnMkKSkoImlzQ2FyZFZpc2libGUiLFBiKDQsMjMsbi5pc0NhcmRWaXNpYmxlJCkpKCJpc0V2ZXJWaXNpYmxlIixQYig1LDI1LG4uaXNFdmVyVmlzaWJsZSQpKSgiaXNQaW5uZWQiLFBiKDYsMjcsbi5pc1Bpbm5lZCQpKSgibG9hZFN0YXRlIixQYig3LDI5LG4ubG9hZFN0YXRlJCkpKCJzaG93RnVsbFNpemUiLG4uc2hvd0Z1bGxTaXplKSgic21vb3RoaW5nRW5hYmxlZCIsUGIoOCwzMSxuLnNtb290aGluZ0VuYWJsZWQkKSkoInRhZyIsUGIoOSwzMyxuLnRhZyQpKSgidGl0bGUiLFBiKDEwLDM1LG4udGl0bGUkKSkoInRvb2x0aXBTb3J0IixQYigxMSwzNyxuLnRvb2x0aXBTb3J0JCkpKCJ4QXhpc1R5cGUiLFBiKDEyLDM5LG4ueEF4aXNUeXBlJCkpKCJ4U2NhbGVUeXBlIixQYigxMyw0MSxuLnhTY2FsZVR5cGUkKSkoInVzZURhcmtNb2RlIixQYigxNCw0MyxuLnVzZURhcmtNb2RlJCkpfSxkaXJlY3RpdmVzOltSZnRdLHBpcGVzOltNdl0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKE5mdCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJzY2FsYXItY2FyZCIsdGVtcGxhdGU6J1xuICAgIDxzY2FsYXItY2FyZC1jb21wb25lbnRcbiAgICAgIFtjYXJkSWRdPSJjYXJkSWQiXG4gICAgICBbY2hhcnRNZXRhZGF0YU1hcF09ImNoYXJ0TWV0YWRhdGFNYXAkIHwgYXN5bmMiXG4gICAgICBbRGF0YURvd25sb2FkQ29tcG9uZW50XT0iRGF0YURvd25sb2FkQ29tcG9uZW50IlxuICAgICAgW2RhdGFTZXJpZXNdPSJkYXRhU2VyaWVzJCB8IGFzeW5jIlxuICAgICAgW2lnbm9yZU91dGxpZXJzXT0iaWdub3JlT3V0bGllcnMkIHwgYXN5bmMiXG4gICAgICBbaXNDYXJkVmlzaWJsZV09ImlzQ2FyZFZpc2libGUkIHwgYXN5bmMiXG4gICAgICBbaXNFdmVyVmlzaWJsZV09ImlzRXZlclZpc2libGUkIHwgYXN5bmMiXG4gICAgICBbaXNQaW5uZWRdPSJpc1Bpbm5lZCQgfCBhc3luYyJcbiAgICAgIFtsb2FkU3RhdGVdPSJsb2FkU3RhdGUkIHwgYXN5bmMiXG4gICAgICBbc2hvd0Z1bGxTaXplXT0ic2hvd0Z1bGxTaXplIlxuICAgICAgW3Ntb290aGluZ0VuYWJsZWRdPSJzbW9vdGhpbmdFbmFibGVkJCB8IGFzeW5jIlxuICAgICAgW3RhZ109InRhZyQgfCBhc3luYyJcbiAgICAgIFt0aXRsZV09InRpdGxlJCB8IGFzeW5jIlxuICAgICAgW3Rvb2x0aXBTb3J0XT0idG9vbHRpcFNvcnQkIHwgYXN5bmMiXG4gICAgICBbeEF4aXNUeXBlXT0ieEF4aXNUeXBlJCB8IGFzeW5jIlxuICAgICAgW3hTY2FsZVR5cGVdPSJ4U2NhbGVUeXBlJCB8IGFzeW5jIlxuICAgICAgW3VzZURhcmtNb2RlXT0idXNlRGFya01vZGUkIHwgYXN5bmMiXG4gICAgICAob25GdWxsU2l6ZVRvZ2dsZSk9Im9uRnVsbFNpemVUb2dnbGUoKSJcbiAgICAgIChvblBpbkNsaWNrZWQpPSJwaW5TdGF0ZUNoYW5nZWQuZW1pdCgkZXZlbnQpIlxuICAgID48L3NjYWxhci1jYXJkLWNvbXBvbmVudD5cbiAgJyxzdHlsZXM6WyJcbiAgICAgIDpob3N0IHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIH1cbiAgICAiXSxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6RWt9XX0pLHtEYXRhRG93bmxvYWRDb21wb25lbnQ6W3t0eXBlOnlffV0sY2FyZElkOlt7dHlwZTp5X31dLGdyb3VwTmFtZTpbe3R5cGU6eV99XSxmdWxsV2lkdGhDaGFuZ2VkOlt7dHlwZTpfX31dLGZ1bGxIZWlnaHRDaGFuZ2VkOlt7dHlwZTpfX31dLHBpblN0YXRlQ2hhbmdlZDpbe3R5cGU6X199XX0pO2NsYXNzIEhmdHtjb25zdHJ1Y3Rvcih0KXt0aGlzLmhvc3Q9dCx0aGlzLmVsZW1lbnQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidnotaGlzdG9ncmFtLXRpbWVzZXJpZXMiKSx0aGlzLm1vZGU9VEUuT0ZGU0VULHRoaXMudGltZVByb3BlcnR5PVJFLlNURVAsdGhpcy5lbGVtZW50Lm1vZGU9dGhpcy5tb2RlLHRoaXMuZWxlbWVudC50aW1lUHJvcGVydHk9dGhpcy50aW1lUHJvcGVydHl9bmdPbkluaXQoKXt0aGlzLmhvc3QubmF0aXZlRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnQpfW5nT25DaGFuZ2VzKHQpe2lmKHQubmFtZXx8dC5kYXRhKXtjb25zdCB0PXRoaXMuZGF0YS5tYXAoKHQ9Pntjb25zdHtzdGVwOmUsYmluczpufT10O3JldHVybntzdGVwOmUsYmluczpuLHdhbGxfdGltZTp0LndhbGxUaW1lfX0pKTt0aGlzLmVsZW1lbnQuc2V0U2VyaWVzRGF0YSh0aGlzLm5hbWUsdCl9dC5tb2RlJiYodGhpcy5lbGVtZW50Lm1vZGU9dGhpcy5tb2RlKSx0LnRpbWVQcm9wZXJ0eSYmKHRoaXMuZWxlbWVudC50aW1lUHJvcGVydHk9dGhpcy50aW1lUHJvcGVydHkpLHQuY29sb3JTY2FsZSYmdGhpcy5jb2xvclNjYWxlJiYodGhpcy5lbGVtZW50LmNvbG9yU2NhbGU9dGhpcy5jb2xvclNjYWxlKX1yZWRyYXcoKXt0aGlzLmVsZW1lbnQucmVkcmF3KCl9fWZ1bmN0aW9uIEZmdCh0LGUpezEmdCYmKE91KDAsInNwYW4iLDEyKSx3dSgxLCJtYXQtc3Bpbm5lciIsMTMpLFB1KCkpfWZ1bmN0aW9uIExmdCh0LGUpe2lmKDEmdCl7Y29uc3QgdD1FdSgpO091KDAsInRiLWhpc3RvZ3JhbSIsMTQpLE51KCJvblJlc2l6ZSIsKGZ1bmN0aW9uIGUoKXtyZXR1cm4gcmEodCksTHUoKS5yZWRyYXcoKX0pKSxQdSgpfWlmKDImdCl7Y29uc3QgdD1MdSgpO3Z1KCJuYW1lIix0LnJ1bklkKSgiZGF0YSIsdC5kYXRhKSgibW9kZSIsdC5tb2RlKSgidGltZVByb3BlcnR5Iix0LnRpbWVQcm9wZXJ0eSh0LnhBeGlzVHlwZSkpKCJjb2xvclNjYWxlIix0LnJ1bkNvbG9yU2NhbGUpKCJyZXNpemVFdmVudERlYm91bmNlUGVyaW9kSW5NcyIsdC5SRVNJWkVfUkVEUkFXX0RFQk9VTkNFX1RJTUVfSU5fTVMpfX1mdW5jdGlvbiBCZnQodCxlKXsxJnQmJihPdSgwLCJkaXYiLDE2KSxNZigxLCIgRGF0YSBmYWlsZWQgdG8gbG9hZC4gIiksUHUoKSl9ZnVuY3Rpb24gVmZ0KHQsZSl7aWYoMSZ0JiZXbSgwLEJmdCwyLDAsImRpdiIsMTUpLDImdCl7Y29uc3QgdD1MdSgpO3Z1KCJuZ0lmIix0LmxvYWRTdGF0ZT09PXQuRGF0YUxvYWRTdGF0ZS5GQUlMRUQpfX1IZnQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEhmdCkoTXUoY2gpKX0sSGZ0Lsm1Y21wPVVvKHt0eXBlOkhmdCxzZWxlY3RvcnM6W1sidGItaGlzdG9ncmFtIl1dLGlucHV0czp7bW9kZToibW9kZSIsdGltZVByb3BlcnR5OiJ0aW1lUHJvcGVydHkiLGNvbG9yU2NhbGU6ImNvbG9yU2NhbGUiLG5hbWU6Im5hbWUiLGRhdGE6ImRhdGEifSxmZWF0dXJlczpbU2ldLGRlY2xzOjAsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXt9LHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0ge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgfSJdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihIZnQsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoidGItaGlzdG9ncmFtIix0ZW1wbGF0ZToiIixzdHlsZXM6WyJcbiAgICAgIDpob3N0IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIH1cbiAgICAiXX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmNofV19KSx7bW9kZTpbe3R5cGU6eV99XSx0aW1lUHJvcGVydHk6W3t0eXBlOnlffV0sY29sb3JTY2FsZTpbe3R5cGU6eV99XSxuYW1lOlt7dHlwZTp5X31dLGRhdGE6W3t0eXBlOnlffV19KTtjb25zdCBqZnQ9ZnVuY3Rpb24odCl7cmV0dXJue2JhY2tncm91bmRDb2xvcjp0fX07Y2xhc3MgVWZ0e2NvbnN0cnVjdG9yKHQpe3RoaXMucmVmPXQsdGhpcy5SRVNJWkVfUkVEUkFXX0RFQk9VTkNFX1RJTUVfSU5fTVM9NTAsdGhpcy5EYXRhTG9hZFN0YXRlPUJFLHRoaXMub25GdWxsU2l6ZVRvZ2dsZT1uZXcgQWIsdGhpcy5vblBpbkNsaWNrZWQ9bmV3IEFifXRpbWVQcm9wZXJ0eSh0KXtzd2l0Y2godCl7Y2FzZSBjUi5TVEVQOnJldHVybiBSRS5TVEVQO2Nhc2UgY1IuV0FMTF9USU1FOnJldHVybiBSRS5XQUxMX1RJTUU7Y2FzZSBjUi5SRUxBVElWRTpyZXR1cm4gUkUuUkVMQVRJVkU7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgeEF4aXNUeXBlIGZvciBoaXN0b2dyYW0gdGltZSBwcm9wZXJ0eS4iKX19cmVkcmF3KCl7dGhpcy5oaXN0b2dyYW1Db21wb25lbnQmJnRoaXMucmVmLm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0JiZ0aGlzLmhpc3RvZ3JhbUNvbXBvbmVudC5yZWRyYXcoKX19VWZ0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxVZnQpKE11KGNoKSl9LFVmdC7JtWNtcD1Vbyh7dHlwZTpVZnQsc2VsZWN0b3JzOltbImhpc3RvZ3JhbS1jYXJkLWNvbXBvbmVudCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24gdChlLG4pe2lmKDEmZSYmV2IoSGZ0LDEpLDImZSl7bGV0IHQ7VWIodD1ZYigpKSYmKG4uaGlzdG9ncmFtQ29tcG9uZW50PXQuZmlyc3QpfX0saW5wdXRzOntsb2FkU3RhdGU6ImxvYWRTdGF0ZSIsdGl0bGU6InRpdGxlIix0YWc6InRhZyIscnVuSWQ6InJ1bklkIixkYXRhOiJkYXRhIixtb2RlOiJtb2RlIix4QXhpc1R5cGU6InhBeGlzVHlwZSIscnVuQ29sb3JTY2FsZToicnVuQ29sb3JTY2FsZSIsc2hvd0Z1bGxTaXplOiJzaG93RnVsbFNpemUiLGlzUGlubmVkOiJpc1Bpbm5lZCJ9LG91dHB1dHM6e29uRnVsbFNpemVUb2dnbGU6Im9uRnVsbFNpemVUb2dnbGUiLG9uUGluQ2xpY2tlZDoib25QaW5DbGlja2VkIn0sZGVjbHM6MTQsdmFyczoxMixjb25zdHM6ZnVuY3Rpb24oKXtsZXQgdCxlO3JldHVybiB0PSJ1bmRlZmluZWQiIT10eXBlb2YgbmdJMThuQ2xvc3VyZU1vZGUmJm5nSTE4bkNsb3N1cmVNb2RlP2dvb2cuZ2V0TXNnKCJQaW4gY2FyZCIpOiRsb2NhbGl6ZWA6QSBidXR0b24gdG8gcGluIGEgY2FyZC7ikJ9lNjY1ZGM3MTJiZDVmMThkNGRmYTNhMjllMTI1ZDU2NWNjNTFlMmY24pCfNzI4NDYwNjQyNjIzNDM3NTM0NDpQaW4gY2FyZGAsZT0idW5kZWZpbmVkIiE9dHlwZW9mIG5nSTE4bkNsb3N1cmVNb2RlJiZuZ0kxOG5DbG9zdXJlTW9kZT9nb29nLmdldE1zZygiVG9nZ2xlIGZ1bGwgc2l6ZSBtb2RlIik6JGxvY2FsaXplYDpBIGJ1dHRvbiBvbiBhIGhpc3RvZ3JhbSBjYXJkIHRoYXQgdG9nZ2xlcyBmdWxsIHNpemUgbW9kZS7ikJ9mYzhmNzY3ZDBiOWY5MzAxODdhMWJhZTM0NDc3YWQyODczNmVjZTMz4pCfOTE1NzIxNTYzNjM4OTI2NTk3OlRvZ2dsZSBmdWxsIHNpemUgbW9kZWAsW1sxLCJoZWFkaW5nIl0sWzEsInRhZyIsMywidGl0bGUiLCJ2YWx1ZSJdLFsxLCJydW4iXSxbMSwiZG90IiwzLCJuZ1N0eWxlIl0sWzEsInJ1bi10ZXh0IiwzLCJydW5JZCJdLFsxLCJjb250cm9scyJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsdCwxLCJwaW4tYnV0dG9uIiwzLCJjbGljayJdLFszLCJzdmdJY29uIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIixlLCJ0aXRsZSIsIlRvZ2dsZSBmdWxsIHNpemUgbW9kZSIsMywiY2xpY2siXSxbImNsYXNzIiwic3Bpbm5lciIsNCwibmdJZiJdLFsiZGV0ZWN0UmVzaXplIiwiIiwzLCJuYW1lIiwiZGF0YSIsIm1vZGUiLCJ0aW1lUHJvcGVydHkiLCJjb2xvclNjYWxlIiwicmVzaXplRXZlbnREZWJvdW5jZVBlcmlvZEluTXMiLCJvblJlc2l6ZSIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJub0RhdGEiLCIiXSxbMSwic3Bpbm5lciJdLFsiZGlhbWV0ZXIiLCIxOCJdLFsiZGV0ZWN0UmVzaXplIiwiIiwzLCJuYW1lIiwiZGF0YSIsIm1vZGUiLCJ0aW1lUHJvcGVydHkiLCJjb2xvclNjYWxlIiwicmVzaXplRXZlbnREZWJvdW5jZVBlcmlvZEluTXMiLCJvblJlc2l6ZSJdLFsiY2xhc3MiLCJlbXB0eS1tZXNzYWdlIiw0LCJuZ0lmIl0sWzEsImVtcHR5LW1lc3NhZ2UiXV19LHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJihPdSgwLCJkaXYiLDApLHd1KDEsInRiLXRydW5jYXRlZC1wYXRoIiwxKSxPdSgyLCJkaXYiLDIpLHd1KDMsInNwYW4iLDMpLHd1KDQsImNhcmQtcnVuLW5hbWUiLDQpLFB1KCksT3UoNSwic3BhbiIsNSksT3UoNiwiYnV0dG9uIiw2KSxOdSgiY2xpY2siLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub25QaW5DbGlja2VkLmVtaXQoIW4uaXNQaW5uZWQpfSkpLHd1KDcsIm1hdC1pY29uIiw3KSxQdSgpLE91KDgsImJ1dHRvbiIsOCksTnUoImNsaWNrIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uRnVsbFNpemVUb2dnbGUuZW1pdCgpfSkpLHd1KDksIm1hdC1pY29uIiw3KSxQdSgpLFB1KCksV20oMTAsRmZ0LDIsMCwic3BhbiIsOSksUHUoKSxXbSgxMSxMZnQsMSw2LCJ0Yi1oaXN0b2dyYW0iLDEwKSxXbSgxMixWZnQsMSwxLCJuZy10ZW1wbGF0ZSIsbnVsbCwxMSxLYikpLDImZSl7Y29uc3QgdD1HbSgxMyk7SmMoMSksVXUoInRpdGxlIixuLnRhZyksVXUoInZhbHVlIixuLnRpdGxlKSxKYygyKSx2dSgibmdTdHlsZSIsZ2IoMTAsamZ0LG4ucnVuQ29sb3JTY2FsZShuLnJ1bklkKSkpLEpjKDEpLHZ1KCJydW5JZCIsbi5ydW5JZCksSmMoMiksTm0oInRpdGxlIixuLmlzUGlubmVkPyJVbnBpbiBjYXJkIjoiUGluIGNhcmQiKSxKYygxKSx2dSgic3ZnSWNvbiIsbi5pc1Bpbm5lZD8ia2VlcF8yNHB4Ijoia2VlcF9vdXRsaW5lXzI0cHgiKSxKYygyKSx2dSgic3ZnSWNvbiIsbi5zaG93RnVsbFNpemU/ImZ1bGxzY3JlZW5fZXhpdF8yNHB4IjoiZnVsbHNjcmVlbl8yNHB4IiksSmMoMSksdnUoIm5nSWYiLG4ubG9hZFN0YXRlPT09bi5EYXRhTG9hZFN0YXRlLkxPQURJTkcpLEpjKDEpLHZ1KCJuZ0lmIixuLmRhdGEmJm4uZGF0YS5sZW5ndGgpKCJuZ0lmRWxzZSIsdCl9fSxkaXJlY3RpdmVzOltZMixndixYMixOSCxjRyxhdixQMSxIZnQscUtdLHN0eWxlczpbJy5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHh9Lm1hdC1oMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaGVhZGxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTVweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZ1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjA1ZW07bWFyZ2luOjAgMCA1NnB4fS5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAwNWVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXJhaXNlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdHJva2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmxhdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZhYltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbWluaS1mYWJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4fS5tYXQtY2FyZC1zdWJ0aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGVja2JveC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvb3Rlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgdHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIzZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LjU0MTY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2NjY2NjY3ZW0pfUBtZWRpYSBwcmludHsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjJlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouMjVlbSAwIC43NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxZW0gMCAxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMiksIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi0wLjA2MjVlbX0ubWF0LW1lbnUtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci12ZXJ0aWNhbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGFiLWxpbmtbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MH0ubWF0LXRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5Om5vbmV9LmNkay12aXN1YWxseS1oaWRkZW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjZ9LmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV0sIC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3hbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2tbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHt9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7fS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOi13ZWJraXQtYXV0b2ZpbGwpe2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZVtfbmdjb250ZW50LSVDT01QJV17cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fS5tYXQtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfVtfbmdob3N0LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtib3gtc2l6aW5nOmJvcmRlci1ib3g7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6YXV0bztwYWRkaW5nOjE2cHg7cGFkZGluZy10b3A6NHB4fS5oZWFkaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtYXJlYXM6InRhZyBjb250cm9scyIgInJ1biBzcGlubmVyIjtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIGF1dG87Zm9udC1zaXplOjE0cHg7bWFyZ2luLWJvdHRvbTo0cHh9LnRhZ1tfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOnRhZztvdmVyZmxvdzpoaWRkZW59LnBpbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxOHB4fS5ydW5bX25nY29udGVudC0lQ09NUCVde2dyaWQtYXJlYTpydW47ZGlzcGxheTpmbGV4O3doaXRlLXNwYWNlOm5vd3JhcDtmb250LXNpemU6MTNweH0ucnVuW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kb3RbX25nY29udGVudC0lQ09NUCVde2ZsZXg6bm9uZTtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoxM3B4O2hlaWdodDoxM3B4O2JvcmRlci1yYWRpdXM6NTAlO21hcmdpbi1yaWdodDo0cHh9LnJ1bltfbmdjb250ZW50LSVDT01QJV0gICAucnVuLXRleHRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO21heC13aWR0aDoxMjBweH0uY29udHJvbHNbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7d2hpdGUtc3BhY2U6bm93cmFwO2dyaWQtYXJlYTpjb250cm9scztqdXN0aWZ5LXNlbGY6ZmxleC1lbmQ7ZmxleC1zaHJpbms6MDttYXJnaW4tcmlnaHQ6LTEycHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0uc3Bpbm5lcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2dyaWQtYXJlYTpzcGlubmVyO2hlaWdodDoxMDAlO2p1c3RpZnktY29udGVudDpjZW50ZXI7cG9zaXRpb246cmVsYXRpdmV9bWF0LXNwaW5uZXJbX25nY29udGVudC0lQ09NUCVde3RvcDowO3JpZ2h0OjA7cG9zaXRpb246YWJzb2x1dGV9dGItaGlzdG9ncmFtW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4LWdyb3c6MTtvdmVyZmxvdzpoaWRkZW59LmVtcHR5LW1lc3NhZ2VbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6MWVtO2ZvbnQtc2l6ZToxM3B4fSddLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihVZnQsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoiaGlzdG9ncmFtLWNhcmQtY29tcG9uZW50Iix0ZW1wbGF0ZVVybDoiaGlzdG9ncmFtX2NhcmRfY29tcG9uZW50Lm5nLmh0bWwiLHN0eWxlVXJsczpbImhpc3RvZ3JhbV9jYXJkX2NvbXBvbmVudC5jc3MiXSxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Y2h9XX0pLHtsb2FkU3RhdGU6W3t0eXBlOnlffV0sdGl0bGU6W3t0eXBlOnlffV0sdGFnOlt7dHlwZTp5X31dLHJ1bklkOlt7dHlwZTp5X31dLGRhdGE6W3t0eXBlOnlffV0sbW9kZTpbe3R5cGU6eV99XSx4QXhpc1R5cGU6W3t0eXBlOnlffV0scnVuQ29sb3JTY2FsZTpbe3R5cGU6eV99XSxzaG93RnVsbFNpemU6W3t0eXBlOnlffV0saXNQaW5uZWQ6W3t0eXBlOnlffV0sb25GdWxsU2l6ZVRvZ2dsZTpbe3R5cGU6X199XSxvblBpbkNsaWNrZWQ6W3t0eXBlOl9ffV0saGlzdG9ncmFtQ29tcG9uZW50Olt7dHlwZTpGcixhcmdzOltIZnRdfV19KTtjbGFzcyBXZnR7Y29uc3RydWN0b3IodCl7dGhpcy5zdG9yZT10LHRoaXMuZnVsbFdpZHRoQ2hhbmdlZD1uZXcgQWIsdGhpcy5mdWxsSGVpZ2h0Q2hhbmdlZD1uZXcgQWIsdGhpcy5waW5TdGF0ZUNoYW5nZWQ9bmV3IEFiLHRoaXMubW9kZSQ9dGhpcy5zdG9yZS5zZWxlY3QoVVQpLHRoaXMueEF4aXNUeXBlJD10aGlzLnN0b3JlLnNlbGVjdChqVCksdGhpcy5zaG93RnVsbFNpemU9ITF9aXNIaXN0b2dyYW1DYXJkTWV0YWRhdGEodCl7Y29uc3R7cGx1Z2luOmV9PXQ7cmV0dXJuIGU9PT1zUi5ISVNUT0dSQU1TfW9uRnVsbFNpemVUb2dnbGUoKXt0aGlzLnNob3dGdWxsU2l6ZT0hdGhpcy5zaG93RnVsbFNpemUsdGhpcy5mdWxsV2lkdGhDaGFuZ2VkLmVtaXQodGhpcy5zaG93RnVsbFNpemUpLHRoaXMuZnVsbEhlaWdodENoYW5nZWQuZW1pdCh0aGlzLnNob3dGdWxsU2l6ZSl9bmdPbkluaXQoKXtjb25zdCB0PXRoaXMuc3RvcmUuc2VsZWN0KGtULHRoaXMuY2FyZElkKS5waXBlKEd0KCh0PT4hIXQmJnRoaXMuaXNIaXN0b2dyYW1DYXJkTWV0YWRhdGEodCkpKSxodCgodD0+dCkpKSxlPUR0KFt0LHRoaXMuc3RvcmUuc2VsZWN0KFBULHRoaXMuY2FyZElkKV0pO3RoaXMuZGF0YSQ9ZS5waXBlKGh0KCgoW3QsZV0pPT57Y29uc3Qgbj10LnJ1bklkO3JldHVybiBlJiZlLmhhc093blByb3BlcnR5KG4pPyhmdW5jdGlvbiBvKHQsZT0zMCl7aWYoIXQubGVuZ3RofHxlPDEpcmV0dXJuW107Y29uc3Qgbj0oZnVuY3Rpb24gbyh0KXtsZXQgZT1udWxsLG49bnVsbDtmb3IoY29uc3R7YmluczpvfW9mIHQpe2lmKCFvLmxlbmd0aCljb250aW51ZTtjb25zdCB0PW9bby5sZW5ndGgtMV0saT1vWzBdLngsYT10LngrdC5keDsobnVsbD09PWV8fGk8ZSkmJihlPWkpLChudWxsPT09bnx8YT5uKSYmKG49YSl9cmV0dXJuIG51bGw9PT1lfHxudWxsPT09bj9udWxsOntsZWZ0OmUscmlnaHQ6bn19KSh0KTtyZXR1cm4gbiYmbi5sZWZ0PT09bi5yaWdodCYmKG4ucmlnaHQ9MS4xKm4ucmlnaHQrMSxuLmxlZnQ9bi5sZWZ0LzEuMS0xKSx0Lm1hcCgodD0+KHtzdGVwOnQuc3RlcCx3YWxsVGltZTp0LndhbGxUaW1lLGJpbnM6bj9JZnQodC5iaW5zLG4sZSk6W119KSkpfSkoZVtuXS5tYXAoKHQ9Pntjb25zdHt3YWxsVGltZTplLHN0ZXA6bn09dDtyZXR1cm57d2FsbFRpbWU6ZSxzdGVwOm4sYmluczp0LmJpbnMubWFwKCh0PT4oe3g6dC5taW4sZHg6dC5tYXgtdC5taW4seTp0LmNvdW50fSkpKX19KSkpOltdfSkpKSx0aGlzLmxvYWRTdGF0ZSQ9dGhpcy5zdG9yZS5zZWxlY3QoT1QsdGhpcy5jYXJkSWQpLHRoaXMudGFnJD10LnBpcGUoaHQoKHQ9PnQudGFnKSkpLHRoaXMudGl0bGUkPXRoaXMudGFnJC5waXBlKGh0KCh0PT56Mih0LHRoaXMuZ3JvdXBOYW1lKSkpKSx0aGlzLnJ1bklkJD10LnBpcGUoaHQoKHQ9PnQucnVuSWQpKSksdGhpcy5pc1Bpbm5lZCQ9dGhpcy5zdG9yZS5zZWxlY3QoSVQsdGhpcy5jYXJkSWQpfX1mdW5jdGlvbiBHZnQodCxlKXtpZigxJnQpe2NvbnN0IHQ9RXUoKTtPdSgwLCJpbWFnZS1jYXJkIiw1KSxOdSgiZnVsbFdpZHRoQ2hhbmdlZCIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIHJhKHQpLEx1KCkub25GdWxsV2lkdGhDaGFuZ2VkKG4pfSkpKCJwaW5TdGF0ZUNoYW5nZWQiLChmdW5jdGlvbiBlKCl7cmV0dXJuIHJhKHQpLEx1KCkub25QaW5TdGF0ZUNoYW5nZWQoKX0pKSxQdSgpfWlmKDImdCl7Y29uc3QgdD1MdSgpO3Z1KCJjYXJkSWQiLHQuY2FyZElkKSgiZ3JvdXBOYW1lIix0Lmdyb3VwTmFtZSkoInJ1bkNvbG9yU2NhbGUiLHQucnVuQ29sb3JTY2FsZSl9fWZ1bmN0aW9uIFlmdCh0LGUpe2lmKDEmdCl7Y29uc3QgdD1FdSgpO091KDAsInNjYWxhci1jYXJkIiw2KSxOdSgiZnVsbFdpZHRoQ2hhbmdlZCIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIHJhKHQpLEx1KCkub25GdWxsV2lkdGhDaGFuZ2VkKG4pfSkpKCJmdWxsSGVpZ2h0Q2hhbmdlZCIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIHJhKHQpLEx1KCkub25GdWxsSGVpZ2h0Q2hhbmdlZChuKX0pKSgicGluU3RhdGVDaGFuZ2VkIiwoZnVuY3Rpb24gZSgpe3JldHVybiByYSh0KSxMdSgpLm9uUGluU3RhdGVDaGFuZ2VkKCl9KSksUHUoKX1pZigyJnQpe2NvbnN0IHQ9THUoKTt2dSgiY2FyZElkIix0LmNhcmRJZCkoImdyb3VwTmFtZSIsdC5ncm91cE5hbWUpfX1mdW5jdGlvbiBxZnQodCxlKXtpZigxJnQpe2NvbnN0IHQ9RXUoKTtPdSgwLCJoaXN0b2dyYW0tY2FyZCIsNyksTnUoImZ1bGxXaWR0aENoYW5nZWQiLChmdW5jdGlvbiBlKG4pe3JldHVybiByYSh0KSxMdSgpLm9uRnVsbFdpZHRoQ2hhbmdlZChuKX0pKSgiZnVsbEhlaWdodENoYW5nZWQiLChmdW5jdGlvbiBlKG4pe3JldHVybiByYSh0KSxMdSgpLm9uRnVsbEhlaWdodENoYW5nZWQobil9KSkoInBpblN0YXRlQ2hhbmdlZCIsKGZ1bmN0aW9uIGUoKXtyZXR1cm4gcmEodCksTHUoKS5vblBpblN0YXRlQ2hhbmdlZCgpfSkpLFB1KCl9aWYoMiZ0KXtjb25zdCB0PUx1KCk7dnUoImNhcmRJZCIsdC5jYXJkSWQpKCJncm91cE5hbWUiLHQuZ3JvdXBOYW1lKSgicnVuQ29sb3JTY2FsZSIsdC5ydW5Db2xvclNjYWxlKX19ZnVuY3Rpb24gWmZ0KHQsZSl7aWYoMSZ0JiYoT3UoMCwiZGl2IiksTWYoMSksUHUoKSksMiZ0KXtjb25zdCB0PUx1KCk7SmMoMSkseGYoIlBsYWNlaG9sZGVyIGVycm9yIGZvcjogIix0LmNhcmRJZCwiIil9fVdmdC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8V2Z0KShNdShFaykpfSxXZnQuybVjbXA9VW8oe3R5cGU6V2Z0LHNlbGVjdG9yczpbWyJoaXN0b2dyYW0tY2FyZCJdXSxpbnB1dHM6e2NhcmRJZDoiY2FyZElkIixncm91cE5hbWU6Imdyb3VwTmFtZSIscnVuQ29sb3JTY2FsZToicnVuQ29sb3JTY2FsZSJ9LG91dHB1dHM6e2Z1bGxXaWR0aENoYW5nZWQ6ImZ1bGxXaWR0aENoYW5nZWQiLGZ1bGxIZWlnaHRDaGFuZ2VkOiJmdWxsSGVpZ2h0Q2hhbmdlZCIscGluU3RhdGVDaGFuZ2VkOiJwaW5TdGF0ZUNoYW5nZWQifSxkZWNsczo5LHZhcnM6MjYsY29uc3RzOltbMywibG9hZFN0YXRlIiwidGl0bGUiLCJ0YWciLCJydW5JZCIsImRhdGEiLCJtb2RlIiwieEF4aXNUeXBlIiwicnVuQ29sb3JTY2FsZSIsInNob3dGdWxsU2l6ZSIsImlzUGlubmVkIiwib25GdWxsU2l6ZVRvZ2dsZSIsIm9uUGluQ2xpY2tlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoT3UoMCwiaGlzdG9ncmFtLWNhcmQtY29tcG9uZW50IiwwKSxOdSgib25GdWxsU2l6ZVRvZ2dsZSIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vbkZ1bGxTaXplVG9nZ2xlKCl9KSkoIm9uUGluQ2xpY2tlZCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ucGluU3RhdGVDaGFuZ2VkLmVtaXQoZSl9KSksT2IoMSwiYXN5bmMiKSxPYigyLCJhc3luYyIpLE9iKDMsImFzeW5jIiksT2IoNCwiYXN5bmMiKSxPYig1LCJhc3luYyIpLE9iKDYsImFzeW5jIiksT2IoNywiYXN5bmMiKSxPYig4LCJhc3luYyIpLFB1KCkpLDImZSYmdnUoImxvYWRTdGF0ZSIsUGIoMSwxMCxuLmxvYWRTdGF0ZSQpKSgidGl0bGUiLFBiKDIsMTIsbi50aXRsZSQpKSgidGFnIixQYigzLDE0LG4udGFnJCkpKCJydW5JZCIsUGIoNCwxNixuLnJ1bklkJCkpKCJkYXRhIixQYig1LDE4LG4uZGF0YSQpKSgibW9kZSIsUGIoNiwyMCxuLm1vZGUkKSkoInhBeGlzVHlwZSIsUGIoNywyMixuLnhBeGlzVHlwZSQpKSgicnVuQ29sb3JTY2FsZSIsbi5ydW5Db2xvclNjYWxlKSgic2hvd0Z1bGxTaXplIixuLnNob3dGdWxsU2l6ZSkoImlzUGlubmVkIixQYig4LDI0LG4uaXNQaW5uZWQkKSl9LGRpcmVjdGl2ZXM6W1VmdF0scGlwZXM6W012XSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoV2Z0LFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6Imhpc3RvZ3JhbS1jYXJkIix0ZW1wbGF0ZTonXG4gICAgPGhpc3RvZ3JhbS1jYXJkLWNvbXBvbmVudFxuICAgICAgW2xvYWRTdGF0ZV09ImxvYWRTdGF0ZSQgfCBhc3luYyJcbiAgICAgIFt0aXRsZV09InRpdGxlJCB8IGFzeW5jIlxuICAgICAgW3RhZ109InRhZyQgfCBhc3luYyJcbiAgICAgIFtydW5JZF09InJ1bklkJCB8IGFzeW5jIlxuICAgICAgW2RhdGFdPSJkYXRhJCB8IGFzeW5jIlxuICAgICAgW21vZGVdPSJtb2RlJCB8IGFzeW5jIlxuICAgICAgW3hBeGlzVHlwZV09InhBeGlzVHlwZSQgfCBhc3luYyJcbiAgICAgIFtydW5Db2xvclNjYWxlXT0icnVuQ29sb3JTY2FsZSJcbiAgICAgIFtzaG93RnVsbFNpemVdPSJzaG93RnVsbFNpemUiXG4gICAgICBbaXNQaW5uZWRdPSJpc1Bpbm5lZCQgfCBhc3luYyJcbiAgICAgIChvbkZ1bGxTaXplVG9nZ2xlKT0ib25GdWxsU2l6ZVRvZ2dsZSgpIlxuICAgICAgKG9uUGluQ2xpY2tlZCk9InBpblN0YXRlQ2hhbmdlZC5lbWl0KCRldmVudCkiXG4gICAgPjwvaGlzdG9ncmFtLWNhcmQtY29tcG9uZW50PlxuICAnLHN0eWxlczpbIlxuICAgICAgOmhvc3Qge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgfVxuICAgICJdLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2h9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpFa31dfSkse2NhcmRJZDpbe3R5cGU6eV99XSxncm91cE5hbWU6W3t0eXBlOnlffV0scnVuQ29sb3JTY2FsZTpbe3R5cGU6eV99XSxmdWxsV2lkdGhDaGFuZ2VkOlt7dHlwZTpfX31dLGZ1bGxIZWlnaHRDaGFuZ2VkOlt7dHlwZTpfX31dLHBpblN0YXRlQ2hhbmdlZDpbe3R5cGU6X199XX0pO2NsYXNzIFhmdHtjb25zdHJ1Y3Rvcigpe3RoaXMuUGx1Z2luVHlwZT1zUix0aGlzLmZ1bGxXaWR0aENoYW5nZWQ9bmV3IEFiLHRoaXMuZnVsbEhlaWdodENoYW5nZWQ9bmV3IEFiLHRoaXMucGluU3RhdGVDaGFuZ2VkPW5ldyBBYn1vbkZ1bGxXaWR0aENoYW5nZWQodCl7dGhpcy5mdWxsV2lkdGhDaGFuZ2VkLmVtaXQodCl9b25GdWxsSGVpZ2h0Q2hhbmdlZCh0KXt0aGlzLmZ1bGxIZWlnaHRDaGFuZ2VkLmVtaXQodCl9b25QaW5TdGF0ZUNoYW5nZWQoKXt0aGlzLnBpblN0YXRlQ2hhbmdlZC5lbWl0KCl9fVhmdC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8WGZ0KX0sWGZ0Lsm1Y21wPVVvKHt0eXBlOlhmdCxzZWxlY3RvcnM6W1siY2FyZC12aWV3LWNvbXBvbmVudCJdXSxpbnB1dHM6e2NhcmRJZDoiY2FyZElkIixncm91cE5hbWU6Imdyb3VwTmFtZSIscGx1Z2luVHlwZToicGx1Z2luVHlwZSIscnVuQ29sb3JTY2FsZToicnVuQ29sb3JTY2FsZSJ9LG91dHB1dHM6e2Z1bGxXaWR0aENoYW5nZWQ6ImZ1bGxXaWR0aENoYW5nZWQiLGZ1bGxIZWlnaHRDaGFuZ2VkOiJmdWxsSGVpZ2h0Q2hhbmdlZCIscGluU3RhdGVDaGFuZ2VkOiJwaW5TdGF0ZUNoYW5nZWQifSxkZWNsczo1LHZhcnM6NCxjb25zdHM6W1szLCJuZ1N3aXRjaCJdLFszLCJjYXJkSWQiLCJncm91cE5hbWUiLCJydW5Db2xvclNjYWxlIiwiZnVsbFdpZHRoQ2hhbmdlZCIsInBpblN0YXRlQ2hhbmdlZCIsNCwibmdTd2l0Y2hDYXNlIl0sWzMsImNhcmRJZCIsImdyb3VwTmFtZSIsImZ1bGxXaWR0aENoYW5nZWQiLCJmdWxsSGVpZ2h0Q2hhbmdlZCIsInBpblN0YXRlQ2hhbmdlZCIsNCwibmdTd2l0Y2hDYXNlIl0sWzMsImNhcmRJZCIsImdyb3VwTmFtZSIsInJ1bkNvbG9yU2NhbGUiLCJmdWxsV2lkdGhDaGFuZ2VkIiwiZnVsbEhlaWdodENoYW5nZWQiLCJwaW5TdGF0ZUNoYW5nZWQiLDQsIm5nU3dpdGNoQ2FzZSJdLFs0LCJuZ1N3aXRjaERlZmF1bHQiXSxbMywiY2FyZElkIiwiZ3JvdXBOYW1lIiwicnVuQ29sb3JTY2FsZSIsImZ1bGxXaWR0aENoYW5nZWQiLCJwaW5TdGF0ZUNoYW5nZWQiXSxbMywiY2FyZElkIiwiZ3JvdXBOYW1lIiwiZnVsbFdpZHRoQ2hhbmdlZCIsImZ1bGxIZWlnaHRDaGFuZ2VkIiwicGluU3RhdGVDaGFuZ2VkIl0sWzMsImNhcmRJZCIsImdyb3VwTmFtZSIsInJ1bkNvbG9yU2NhbGUiLCJmdWxsV2lkdGhDaGFuZ2VkIiwiZnVsbEhlaWdodENoYW5nZWQiLCJwaW5TdGF0ZUNoYW5nZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKGt1KDAsMCksV20oMSxHZnQsMSwzLCJpbWFnZS1jYXJkIiwxKSxXbSgyLFlmdCwxLDIsInNjYWxhci1jYXJkIiwyKSxXbSgzLHFmdCwxLDMsImhpc3RvZ3JhbS1jYXJkIiwzKSxXbSg0LFpmdCwyLDEsImRpdiIsNCksU3UoKSksMiZlJiYodnUoIm5nU3dpdGNoIixuLnBsdWdpblR5cGUpLEpjKDEpLHZ1KCJuZ1N3aXRjaENhc2UiLG4uUGx1Z2luVHlwZS5JTUFHRVMpLEpjKDEpLHZ1KCJuZ1N3aXRjaENhc2UiLG4uUGx1Z2luVHlwZS5TQ0FMQVJTKSxKYygxKSx2dSgibmdTd2l0Y2hDYXNlIixuLlBsdWdpblR5cGUuSElTVE9HUkFNUykpfSxkaXJlY3RpdmVzOltjdixkdixwdixpNSxOZnQsV2Z0XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFhmdCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJjYXJkLXZpZXctY29tcG9uZW50Iix0ZW1wbGF0ZVVybDoiY2FyZF92aWV3X2NvbXBvbmVudC5uZy5odG1sIixjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSxudWxsLHtjYXJkSWQ6W3t0eXBlOnlffV0sZ3JvdXBOYW1lOlt7dHlwZTp5X31dLHBsdWdpblR5cGU6W3t0eXBlOnlffV0scnVuQ29sb3JTY2FsZTpbe3R5cGU6eV99XSxmdWxsV2lkdGhDaGFuZ2VkOlt7dHlwZTpfX31dLGZ1bGxIZWlnaHRDaGFuZ2VkOlt7dHlwZTpfX31dLHBpblN0YXRlQ2hhbmdlZDpbe3R5cGU6X199XX0pO2NsYXNzIEtmdHtjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXQsdGhpcy5zaG93RnVsbFdpZHRoPSExLHRoaXMuc2hvd0Z1bGxIZWlnaHQ9ITEsdGhpcy5ydW5Db2xvclNjYWxlJD10aGlzLnN0b3JlLnNlbGVjdChDTikucGlwZSh4bigzNTAsdm9pZCAwLHtsZWFkaW5nOiEwLHRyYWlsaW5nOiEwfSksaHQoKHQ9PmU9PntpZighdC5oYXNPd25Qcm9wZXJ0eShlKSl0aHJvdyBuZXcgRXJyb3IoYFtDb2xvciBzY2FsZV0gdW5rbm93biBydW5JZDogJHtlfS5gKTtyZXR1cm4gdFtlXX0pKSl9b25GdWxsV2lkdGhDaGFuZ2VkKHQpe3RoaXMuc2hvd0Z1bGxXaWR0aD10fW9uRnVsbEhlaWdodENoYW5nZWQodCl7dGhpcy5zaG93RnVsbEhlaWdodD10fW9uUGluU3RhdGVDaGFuZ2VkKCl7dGhpcy5zdG9yZS5zZWxlY3QoSVQsdGhpcy5jYXJkSWQpLnBpcGUoTmUoMSksa24odGhpcy5zdG9yZS5zZWxlY3QoSFQpKSkuc3Vic2NyaWJlKCgoW3QsZV0pPT57dGhpcy5zdG9yZS5kaXNwYXRjaChsUSh7Y2FyZElkOnRoaXMuY2FyZElkLGNhbkNyZWF0ZU5ld1BpbnM6ZSx3YXNQaW5uZWQ6dH0pKX0pKX19ZnVuY3Rpb24gSmZ0KHQsZSl7MSZ0JiZEdSgwKX1mdW5jdGlvbiBRZnQodCxlKXtpZigxJnQmJnd1KDAsImNhcmQtdmlldyIsNCksMiZ0KXtjb25zdCB0PWUuJGltcGxpY2l0LG49THUoKTt2dSgiY2FyZElkIix0LmNhcmRJZCkoImdyb3VwTmFtZSIsbi5ncm91cE5hbWUpKCJwbHVnaW5UeXBlIix0LnBsdWdpbikoImNhcmRPYnNlcnZlciIsbi5jYXJkT2JzZXJ2ZXIpKCJjYXJkTGF6eUxvYWRlciIsdC5jYXJkSWQpfX1mdW5jdGlvbiAkZnQodCxlKXsxJnQmJkR1KDApfWZ1bmN0aW9uIHRndCh0LGUpe2lmKDEmdCl7Y29uc3QgdD1FdSgpO091KDAsImJ1dHRvbiIsMTMpLE51KCJjbGljayIsKGZ1bmN0aW9uIGUoKXtyYSh0KTtjb25zdCBuPUx1KDMpO3JldHVybiBuLnBhZ2VJbmRleENoYW5nZWQuZW1pdChuLnBhZ2VJbmRleC0xKX0pKSxNZigxLCIgUHJldmlvdXMgIiksUHUoKX0yJnQmJnZ1KCJkaXNhYmxlZCIsMD09PUx1KDMpLnBhZ2VJbmRleCl9ZnVuY3Rpb24gZWd0KHQsZSl7MSZ0JiZ3dSgwLCJtYXQtaWNvbiIsMTcpfWZ1bmN0aW9uIG5ndCh0LGUpezEmdCYmd3UoMCwibWF0LWljb24iLDE4KX1mdW5jdGlvbiBvZ3QodCxlKXtpZigxJnQpe2NvbnN0IHQ9RXUoKTtPdSgwLCJidXR0b24iLDE0KSxOdSgiY2xpY2siLChmdW5jdGlvbiBlKCl7cmV0dXJuIHJhKHQpLEx1KDMpLmdyb3VwRXhwYW5zaW9uVG9nZ2xlZC5lbWl0KCl9KSksV20oMSxlZ3QsMSwwLCJtYXQtaWNvbiIsMTUpLFdtKDIsbmd0LDEsMCwibmctdGVtcGxhdGUiLG51bGwsMTYsS2IpLFB1KCl9aWYoMiZ0KXtjb25zdCB0PUdtKDMpLGU9THUoMyk7SmMoMSksdnUoIm5nSWYiLGUuaXNHcm91cEV4cGFuZGVkKSgibmdJZkVsc2UiLHQpfX1mdW5jdGlvbiBpZ3QodCxlKXtpZigxJnQpe2NvbnN0IHQ9RXUoKTtPdSgwLCJzcGFuIiwyMSksT3UoMSwiaW5wdXQiLDIyKSxOdSgiaW5wdXQiLChmdW5jdGlvbiBlKG4pe3JldHVybiByYSh0KSxMdSg0KS5vblBhZ2luYXRpb25JbnB1dENoYW5nZShuKX0pKSgiY2hhbmdlIiwoZnVuY3Rpb24gZShuKXtyZXR1cm4gcmEodCksTHUoNCkub25QYWdpbmF0aW9uSW5wdXRDaGFuZ2Uobil9KSksUHUoKSxNZigyKSxQdSgpfWlmKDImdCl7Y29uc3QgdD1MdSg0KTtKYygxKSx2dSgidmFsdWUiLHQucGFnZUluZGV4KzEpKCJtYXgiLHQubnVtUGFnZXMpLEpjKDEpLHhmKCIgb2YgIix0Lm51bVBhZ2VzLCIiKX19ZnVuY3Rpb24gYWd0KHQsZSl7aWYoMSZ0KXtjb25zdCB0PUV1KCk7T3UoMCwic3BhbiIpLFdtKDEsaWd0LDMsMywic3BhbiIsMTkpLE91KDIsImJ1dHRvbiIsMjApLE51KCJjbGljayIsKGZ1bmN0aW9uIGUoKXtyYSh0KTtjb25zdCBuPUx1KDMpO3JldHVybiBuLnBhZ2VJbmRleENoYW5nZWQuZW1pdChuLnBhZ2VJbmRleCsxKX0pKSxNZigzLCIgTmV4dCAiKSxQdSgpLFB1KCl9aWYoMiZ0KXtjb25zdCB0PUx1KDIpLmlzQm90dG9tQ29udHJvbCxlPUx1KCk7SmMoMSksdnUoIm5nSWYiLGUuc2hvd1BhZ2luYXRpb25JbnB1dCh0KSksSmMoMSksdnUoImRpc2FibGVkIixlLnBhZ2VJbmRleCsxPj1lLm51bVBhZ2VzKX19ZnVuY3Rpb24gcmd0KHQsZSl7aWYoMSZ0JiYoT3UoMCwiZGl2Iiw2KSxPdSgxLCJzcGFuIiw3KSxXbSgyLHRndCwyLDEsImJ1dHRvbiIsOCksUHUoKSxPdSgzLCJzcGFuIiw5KSxXbSg0LG9ndCw0LDIsImJ1dHRvbiIsMTApLFB1KCksT3UoNSwic3BhbiIsMTEpLFdtKDYsYWd0LDQsMiwic3BhbiIsMTIpLFB1KCksUHUoKSksMiZ0KXtjb25zdCB0PUx1KCkuaXNCb3R0b21Db250cm9sLGU9THUoKTtKYygyKSx2dSgibmdJZiIsZS5zaG93UGFnaW5hdGlvbkNvbnRyb2xzKSxKYygyKSx2dSgibmdJZiIsZS5zaG93RXhwYW5kKHQpKSxKYygyKSx2dSgibmdJZiIsZS5zaG93UGFnaW5hdGlvbkNvbnRyb2xzKX19ZnVuY3Rpb24gc2d0KHQsZSl7aWYoMSZ0JiZXbSgwLHJndCw3LDMsImRpdiIsNSksMiZ0KXtjb25zdCB0PWUuaXNCb3R0b21Db250cm9sLG49THUoKTt2dSgibmdJZiIsbi5zaG93UGFnaW5hdGlvbkNvbnRyb2xzfHxuLnNob3dFeHBhbmQodCkpfX1LZnQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEtmdCkoTXUoRWspKX0sS2Z0Lsm1Y21wPVVvKHt0eXBlOktmdCxzZWxlY3RvcnM6W1siY2FyZC12aWV3Il1dLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsyJmUmJmFmKCJmdWxsLXdpZHRoIixuLnNob3dGdWxsV2lkdGgpKCJmdWxsLWhlaWdodCIsbi5zaG93RnVsbEhlaWdodCl9LGlucHV0czp7Y2FyZElkOiJjYXJkSWQiLGdyb3VwTmFtZToiZ3JvdXBOYW1lIixwbHVnaW5UeXBlOiJwbHVnaW5UeXBlIn0sZGVjbHM6Mix2YXJzOjYsY29uc3RzOltbMywiY2FyZElkIiwiZ3JvdXBOYW1lIiwicGx1Z2luVHlwZSIsInJ1bkNvbG9yU2NhbGUiLCJmdWxsV2lkdGhDaGFuZ2VkIiwiZnVsbEhlaWdodENoYW5nZWQiLCJwaW5TdGF0ZUNoYW5nZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKE91KDAsImNhcmQtdmlldy1jb21wb25lbnQiLDApLE51KCJmdWxsV2lkdGhDaGFuZ2VkIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vbkZ1bGxXaWR0aENoYW5nZWQoZSl9KSkoImZ1bGxIZWlnaHRDaGFuZ2VkIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vbkZ1bGxIZWlnaHRDaGFuZ2VkKGUpfSkpKCJwaW5TdGF0ZUNoYW5nZWQiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub25QaW5TdGF0ZUNoYW5nZWQoKX0pKSxPYigxLCJhc3luYyIpLFB1KCkpLDImZSYmdnUoImNhcmRJZCIsbi5jYXJkSWQpKCJncm91cE5hbWUiLG4uZ3JvdXBOYW1lKSgicGx1Z2luVHlwZSIsbi5wbHVnaW5UeXBlKSgicnVuQ29sb3JTY2FsZSIsUGIoMSw0LG4ucnVuQ29sb3JTY2FsZSQpKX0sZGlyZWN0aXZlczpbWGZ0XSxwaXBlczpbTXZdLHN0eWxlczpbJy5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHh9Lm1hdC1oMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaGVhZGxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTVweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZ1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjA1ZW07bWFyZ2luOjAgMCA1NnB4fS5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAwNWVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXJhaXNlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdHJva2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmxhdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZhYltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbWluaS1mYWJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4fS5tYXQtY2FyZC1zdWJ0aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGVja2JveC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvb3Rlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgdHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIzZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LjU0MTY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2NjY2NjY3ZW0pfUBtZWRpYSBwcmludHsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjJlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouMjVlbSAwIC43NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxZW0gMCAxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMiksIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi0wLjA2MjVlbX0ubWF0LW1lbnUtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci12ZXJ0aWNhbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGFiLWxpbmtbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MH0ubWF0LXRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5Om5vbmV9LmNkay12aXN1YWxseS1oaWRkZW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjZ9LmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV0sIC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3hbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2tbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHt9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7fS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOi13ZWJraXQtYXV0b2ZpbGwpe2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZVtfbmdjb250ZW50LSVDT01QJV17cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fS5tYXQtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfVtfbmdob3N0LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzB9J10sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEtmdCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJjYXJkLXZpZXciLHRlbXBsYXRlOidcbiAgICA8Y2FyZC12aWV3LWNvbXBvbmVudFxuICAgICAgW2NhcmRJZF09ImNhcmRJZCJcbiAgICAgIFtncm91cE5hbWVdPSJncm91cE5hbWUiXG4gICAgICBbcGx1Z2luVHlwZV09InBsdWdpblR5cGUiXG4gICAgICBbcnVuQ29sb3JTY2FsZV09InJ1bkNvbG9yU2NhbGUkIHwgYXN5bmMiXG4gICAgICAoZnVsbFdpZHRoQ2hhbmdlZCk9Im9uRnVsbFdpZHRoQ2hhbmdlZCgkZXZlbnQpIlxuICAgICAgKGZ1bGxIZWlnaHRDaGFuZ2VkKT0ib25GdWxsSGVpZ2h0Q2hhbmdlZCgkZXZlbnQpIlxuICAgICAgKHBpblN0YXRlQ2hhbmdlZCk9Im9uUGluU3RhdGVDaGFuZ2VkKCkiXG4gICAgPlxuICAgIDwvY2FyZC12aWV3LWNvbXBvbmVudD5cbiAgJyxzdHlsZVVybHM6WyJjYXJkX3ZpZXdfY29udGFpbmVyLmNzcyJdLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2h9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpFa31dfSkse2NhcmRJZDpbe3R5cGU6eV99XSxncm91cE5hbWU6W3t0eXBlOnlffV0scGx1Z2luVHlwZTpbe3R5cGU6eV99XSxzaG93RnVsbFdpZHRoOlt7dHlwZTpDXyxhcmdzOlsiY2xhc3MuZnVsbC13aWR0aCJdfV0sc2hvd0Z1bGxIZWlnaHQ6W3t0eXBlOkNfLGFyZ3M6WyJjbGFzcy5mdWxsLWhlaWdodCJdfV19KTtjb25zdCBsZ3Q9ZnVuY3Rpb24oKXtyZXR1cm57aXNCb3R0b21Db250cm9sOiExfX0sY2d0PWZ1bmN0aW9uKCl7cmV0dXJue2lzQm90dG9tQ29udHJvbDohMH19O2NsYXNzIGRndHtjb25zdHJ1Y3Rvcigpe3RoaXMuUGx1Z2luVHlwZT1zUix0aGlzLnBhZ2VJbmRleENoYW5nZWQ9bmV3IEFiLHRoaXMuZ3JvdXBFeHBhbnNpb25Ub2dnbGVkPW5ldyBBYn1zaG93RXhwYW5kKHQpe3JldHVybiEhdCYmdGhpcy5pc0dyb3VwRXhwYW5kYWJsZX1zaG93UGFnaW5hdGlvbklucHV0KHQpe3JldHVybiB0fXRyYWNrQnlDYXJkcyh0LGUpe3JldHVybiBlLmNhcmRJZH1vblBhZ2luYXRpb25JbnB1dENoYW5nZSh0KXtjb25zdCBlPXQudGFyZ2V0O2lmKCJpbnB1dCI9PT10LnR5cGUmJiIiPT09ZS52YWx1ZSlyZXR1cm47Y29uc3Qgbj1OdW1iZXIoZS52YWx1ZSktMSxvPU1hdGgubWluKE1hdGgubWF4KDAsbiksdGhpcy5udW1QYWdlcy0xKTtlLnZhbHVlIT09U3RyaW5nKG8rMSkmJihlLnZhbHVlPVN0cmluZyhvKzEpKSx0aGlzLnBhZ2VJbmRleENoYW5nZWQuZW1pdChvKX19ZGd0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxkZ3QpfSxkZ3QuybVjbXA9VW8oe3R5cGU6ZGd0LHNlbGVjdG9yczpbWyJtZXRyaWNzLWNhcmQtZ3JpZC1jb21wb25lbnQiXV0saW5wdXRzOntpc0dyb3VwRXhwYW5kYWJsZToiaXNHcm91cEV4cGFuZGFibGUiLGlzR3JvdXBFeHBhbmRlZDoiaXNHcm91cEV4cGFuZGVkIixncm91cE5hbWU6Imdyb3VwTmFtZSIscGFnZUluZGV4OiJwYWdlSW5kZXgiLG51bVBhZ2VzOiJudW1QYWdlcyIsY2FyZElkc1dpdGhNZXRhZGF0YToiY2FyZElkc1dpdGhNZXRhZGF0YSIsY2FyZE9ic2VydmVyOiJjYXJkT2JzZXJ2ZXIiLHNob3dQYWdpbmF0aW9uQ29udHJvbHM6InNob3dQYWdpbmF0aW9uQ29udHJvbHMifSxvdXRwdXRzOntwYWdlSW5kZXhDaGFuZ2VkOiJwYWdlSW5kZXhDaGFuZ2VkIixncm91cEV4cGFuc2lvblRvZ2dsZWQ6Imdyb3VwRXhwYW5zaW9uVG9nZ2xlZCJ9LGRlY2xzOjYsdmFyczo4LGNvbnN0czpmdW5jdGlvbigpe2xldCB0LGUsbjtyZXR1cm4gdD0idW5kZWZpbmVkIiE9dHlwZW9mIG5nSTE4bkNsb3N1cmVNb2RlJiZuZ0kxOG5DbG9zdXJlTW9kZT9nb29nLmdldE1zZygiUHJldmlvdXMgcGFnZSIpOiRsb2NhbGl6ZWA6QSBidXR0b24gdGhhdCBzZXRzIGEgZ3JvdXAgdG8gdGhlIHByZXZpb3VzIHBhZ2Uu4pCfNTc1ZTc4MmZkMjdmMmVlNzBhMDM0YTc3NWVmZTlhZDE2MjQ3MjI1MOKQnzM2Mjk5NjA1NDQ4NzUzNjAwNDY6UHJldmlvdXMgcGFnZWAsZT0idW5kZWZpbmVkIiE9dHlwZW9mIG5nSTE4bkNsb3N1cmVNb2RlJiZuZ0kxOG5DbG9zdXJlTW9kZT9nb29nLmdldE1zZygiRXhwYW5kIGdyb3VwIik6JGxvY2FsaXplYDpBIGJ1dHRvbiB0aGF0IGFsbG93cyB1c2VyIHRvIGV4cGFuZCBhIHRhZyBncm91cC7ikJ9mZmFhMTE0NzFiODc4YTZkZmZlMmU2OGM2ZjM3MDY0YTllMDc0ODUz4pCfNTM4NjA1NDMyNTI3NDc3OTI1ODpFeHBhbmQgZ3JvdXBgLG49InVuZGVmaW5lZCIhPXR5cGVvZiBuZ0kxOG5DbG9zdXJlTW9kZSYmbmdJMThuQ2xvc3VyZU1vZGU/Z29vZy5nZXRNc2coIk5leHQgcGFnZSIpOiRsb2NhbGl6ZWA6QSBidXR0b24gdGhhdCBzZXRzIGEgZ3JvdXAgdG8gdGhlIG5leHQgcGFnZS7ikJ9jZTNjZWZiMWNkMDA5OWFhNTAwM2RkYTE2ZWM5ZWIyMWZkOGJhNzg54pCfMzMzNzMwMTY5NDIxMDI4NzU5NTpOZXh0IHBhZ2VgLFtbNCwibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0Il0sWzEsImNhcmQtZ3JpZCJdLFszLCJjYXJkSWQiLCJncm91cE5hbWUiLCJwbHVnaW5UeXBlIiwiY2FyZE9ic2VydmVyIiwiY2FyZExhenlMb2FkZXIiLDQsIm5nRm9yIiwibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSJdLFsiZ3JvdXBDb250cm9scyIsIiJdLFszLCJjYXJkSWQiLCJncm91cE5hbWUiLCJwbHVnaW5UeXBlIiwiY2FyZE9ic2VydmVyIiwiY2FyZExhenlMb2FkZXIiXSxbImNsYXNzIiwiZ3JvdXAtY29udHJvbHMiLDQsIm5nSWYiXSxbMSwiZ3JvdXAtY29udHJvbHMiXSxbMSwicHJldi1jb250YWluZXIiXSxbImNsYXNzIiwicHJldiBwYWdpbmF0aW9uLWJ1dHRvbiIsIm1hdC1idXR0b24iLCIiLCJhcmlhLWxhYmVsIix0LDMsImRpc2FibGVkIiwiY2xpY2siLDQsIm5nSWYiXSxbMSwiZXhwYW5kLWNvbnRhaW5lciJdLFsiY2xhc3MiLCJleHBhbmQtZ3JvdXAtYnV0dG9uIiwibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsZSwzLCJjbGljayIsNCwibmdJZiJdLFsxLCJpbnB1dC1hbmQtbmV4dC1jb250YWluZXIiXSxbNCwibmdJZiJdLFsibWF0LWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLHQsMSwicHJldiIsInBhZ2luYXRpb24tYnV0dG9uIiwzLCJkaXNhYmxlZCIsImNsaWNrIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIixlLDEsImV4cGFuZC1ncm91cC1idXR0b24iLDMsImNsaWNrIl0sWyJzdmdJY29uIiwiZXhwYW5kX2xlc3NfMjRweCIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJleHBhbmRNb3JlIiwiIl0sWyJzdmdJY29uIiwiZXhwYW5kX2xlc3NfMjRweCJdLFsic3ZnSWNvbiIsImV4cGFuZF9tb3JlXzI0cHgiXSxbImNsYXNzIiwicGFnaW5hdGlvbi1pbnB1dCIsNCwibmdJZiJdLFsibWF0LWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLG4sMSwibmV4dCIsInBhZ2luYXRpb24tYnV0dG9uIiwzLCJkaXNhYmxlZCIsImNsaWNrIl0sWzEsInBhZ2luYXRpb24taW5wdXQiXSxbInR5cGUiLCJudW1iZXIiLCJtaW4iLCIxIiwzLCJ2YWx1ZSIsIm1heCIsImlucHV0IiwiY2hhbmdlIl1dfSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7aWYoMSZlJiYoV20oMCxKZnQsMSwwLCJuZy1jb250YWluZXIiLDApLE91KDEsImRpdiIsMSksV20oMixRZnQsMSw1LCJjYXJkLXZpZXciLDIpLFB1KCksV20oMywkZnQsMSwwLCJuZy1jb250YWluZXIiLDApLFdtKDQsc2d0LDEsMSwibmctdGVtcGxhdGUiLG51bGwsMyxLYikpLDImZSl7Y29uc3QgdD1HbSg1KTt2dSgibmdUZW1wbGF0ZU91dGxldCIsdCkoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixmYig2LGxndCkpLEpjKDIpLHZ1KCJuZ0Zvck9mIixuLmNhcmRJZHNXaXRoTWV0YWRhdGEpKCJuZ0ZvclRyYWNrQnkiLG4udHJhY2tCeUNhcmRzKSxKYygxKSx2dSgibmdUZW1wbGF0ZU91dGxldCIsdCkoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixmYig3LGNndCkpfX0sZGlyZWN0aXZlczpbaHYsb3YsS2Z0LE4yLGF2LE5ILGNHXSxzdHlsZXM6WycubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1iYWRnZS1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo5cHh9Lm1hdC1iYWRnZS1sYXJnZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4fS5tYXQtaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWhlYWRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAyNHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE1cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjgzKS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1oNltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC42NykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtYm9keS1zdHJvbmdbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MCAwIDEycHh9Lm1hdC1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FwdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTJweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6MzAwIDExMnB4LzExMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wNWVtO21hcmdpbjowIDAgNTZweH0ubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNTZweC81NnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMmVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNDVweC80OHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMDVlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDM0cHgvNDBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1yYWlzZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3Ryb2tlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZsYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mYWJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW1pbmktZmFiW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtYnV0dG9uLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FyZC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjBweH0ubWF0LWNhcmQtc3VidGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hlY2tib3gtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC10cmFpbGluZy1pY29uLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC1yZW1vdmUubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxOHB4fS5tYXQtdGFibGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWhlYWRlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb290ZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jYWxlbmRhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FsZW5kYXItYm9keVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYWxlbmRhci1wZXJpb2QtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWRpYWxvZy10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTI1O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTUwJTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjVlbTt3aWR0aDoxLjVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW07bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41ZW0gMDtib3JkZXItdG9wOi44NDM3NWVtIHNvbGlkIHRyYW5zcGFyZW50fS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3RvcDotMC44NDM3NWVtO3BhZGRpbmctdG9wOi44NDM3NWVtfS5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjc1JTttYXJnaW4tdG9wOi42NjY2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNzkxNjY2NjY2N2VtKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAycHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyM2VtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzUzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi41NDE2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNjY2NjY2NjY2N2VtKX1AbWVkaWEgcHJpbnR7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIyZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIxZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMmVtKSBzY2FsZSgwLjc1KX19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjI1ZW0gMCAuNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4wOTM3NWVtO21hcmdpbi10b3A6LTAuNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MWVtIDAgMWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjg0Mzc1ZW07bWFyZ2luLXRvcDotMC4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH1pbnB1dC5tYXQtaW5wdXQtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDotMC4wNjI1ZW19Lm1hdC1tZW51LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1wYWdpbmF0b3JbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXBhZ2luYXRvci1wYWdlLXNpemVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3RbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXN0ZXBwZXItdmVydGljYWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc3RlcC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0Om5vcm1hbH0ubWF0LXN0ZXAtbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRhYi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjB9Lm1hdC10b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTZweH0ubWF0LW9wdGdyb3VwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LXNpbXBsZS1zbmFja2Jhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbltfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRyZWVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbmVzdGVkLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4fS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVdOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtcmlwcGxlLm1hdC1yaXBwbGUtdW5ib3VuZGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6NTAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7dHJhbnNmb3JtOnNjYWxlKDApfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpub25lfS5jZGstdmlzdWFsbHktaGlkZGVuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7bGVmdDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmVtcHR5e2Rpc3BsYXk6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LXBhbmVbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOmF1dG87Ym94LXNpemluZzpib3JkZXItYm94O3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7bWF4LXdpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlfS5jZGstb3ZlcmxheS1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKTtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5Oi42fS5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjMyKX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTowfS5jZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO292ZXJmbG93LXk6c2Nyb2xsfUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnR7fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5ke30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxse2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCAwcyAxbXN9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06bm90KDotd2Via2l0LWF1dG9maWxsKXthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIDBzIDFtc310ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemVbX25nY29udGVudC0lQ09NUCVde3Jlc2l6ZTpub25lfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmdbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OmF1dG8gIWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW4gIWltcG9ydGFudH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nLWZpcmVmb3hbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OjAgIWltcG9ydGFudH0ubWF0LWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0uY2FyZC1ncmlkW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdChhdXRvLWZpbGwsIG1pbm1heCgzMzVweCwgYXV0bykpO2dhcDoxNnB4O3BhZGRpbmc6MTZweH1jYXJkLXZpZXdbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjoxcHggc29saWQgI2ViZWJlYjtib3JkZXItcmFkaXVzOjRweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29udGFpbjpzdHJpY3Q7aGVpZ2h0OjEwMCU7bWluLWhlaWdodDozMjBweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICBjYXJkLXZpZXdbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBjYXJkLXZpZXdbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjoxcHggc29saWQgIzU1NX1jYXJkLXZpZXcuZnVsbC13aWR0aFtfbmdjb250ZW50LSVDT01QJV17Y29udGFpbjpsYXlvdXQgcGFpbnQ7Z3JpZC1jb2x1bW4tc3RhcnQ6MTtncmlkLWNvbHVtbi1lbmQ6LTF9Y2FyZC12aWV3LmZ1bGwtaGVpZ2h0W19uZ2NvbnRlbnQtJUNPTVAlXXttaW4taGVpZ2h0OjQ4MHB4fS5ncm91cC1jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTtkaXNwbGF5OmdyaWQ7YWxpZ24taXRlbXM6Y2VudGVyO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyIDFmcjtnYXA6MTZweDtwYWRkaW5nOjAgMTZweH0uZ3JvdXAtY29udHJvbHNbX25nY29udGVudC0lQ09NUCVdOmZpcnN0LW9mLXR5cGV7cGFkZGluZy10b3A6MTZweH0uZ3JvdXAtY29udHJvbHNbX25nY29udGVudC0lQ09NUCVdOmxhc3Qtb2YtdHlwZXtwYWRkaW5nLWJvdHRvbToxNnB4fS5wcmV2LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17anVzdGlmeS1zZWxmOmZsZXgtc3RhcnR9LmV4cGFuZC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2p1c3RpZnktc2VsZjpjZW50ZXJ9LmlucHV0LWFuZC1uZXh0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17anVzdGlmeS1zZWxmOmZsZXgtZW5kfS5wYWdpbmF0aW9uLWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tcmlnaHQ6MTZweH0uZXhwYW5kLWdyb3VwLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5wYWdpbmF0aW9uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZmZmO2NvbG9yOiM2MTYxNjF9J10sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGRndCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJtZXRyaWNzLWNhcmQtZ3JpZC1jb21wb25lbnQiLHRlbXBsYXRlVXJsOiIuL2NhcmRfZ3JpZF9jb21wb25lbnQubmcuaHRtbCIsc3R5bGVVcmxzOlsiLi9jYXJkX2dyaWRfY29tcG9uZW50LmNzcyJdLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2h9XX1dLG51bGwse2lzR3JvdXBFeHBhbmRhYmxlOlt7dHlwZTp5X31dLGlzR3JvdXBFeHBhbmRlZDpbe3R5cGU6eV99XSxncm91cE5hbWU6W3t0eXBlOnlffV0scGFnZUluZGV4Olt7dHlwZTp5X31dLG51bVBhZ2VzOlt7dHlwZTp5X31dLGNhcmRJZHNXaXRoTWV0YWRhdGE6W3t0eXBlOnlffV0sY2FyZE9ic2VydmVyOlt7dHlwZTp5X31dLHNob3dQYWdpbmF0aW9uQ29udHJvbHM6W3t0eXBlOnlffV0scGFnZUluZGV4Q2hhbmdlZDpbe3R5cGU6X199XSxncm91cEV4cGFuc2lvblRvZ2dsZWQ6W3t0eXBlOl9ffV19KTtjbGFzcyBwZ3R7Y29uc3RydWN0b3IodCl7dGhpcy5zdG9yZT10LHRoaXMuZ3JvdXBOYW1lPW51bGwsdGhpcy5ncm91cE5hbWUkPW5ldyBIKG51bGwpLHRoaXMucGFnZUluZGV4JD1uZXcgSCgwKSx0aGlzLml0ZW1zJD1uZXcgSChbXSksdGhpcy5udW1QYWdlcyQ9RHQoW3RoaXMuaXRlbXMkLHRoaXMuc3RvcmUuc2VsZWN0KEpHKV0pLnBpcGUoaHQoKChbdCxlXSk9Pk1hdGguY2VpbCh0Lmxlbmd0aC9lKSkpKSx0aGlzLmlzR3JvdXBFeHBhbmRlZCQ9dGhpcy5ncm91cE5hbWUkLnBpcGUoZG4oKHQ9Pm51bGwhPT10P3RoaXMuc3RvcmUuc2VsZWN0KEtULHQpOlooITApKSkpLHRoaXMuc2hvd1BhZ2luYXRpb25Db250cm9scyQ9RHQoW3RoaXMubnVtUGFnZXMkLHRoaXMuc3RvcmUuc2VsZWN0KEpHKSx0aGlzLmlzR3JvdXBFeHBhbmRlZCRdKS5waXBlKGh0KCgoW3QsZSxuXSk9PiEodDw9MSkmJihlPD0zfHxuKSkpKSx0aGlzLmlzR3JvdXBFeHBhbmRhYmxlJD1EdChbdGhpcy5pdGVtcyQsdGhpcy5zdG9yZS5zZWxlY3QoSkcpXSkucGlwZShodCgoKFt0LGVdKT0+IShudWxsPT09dGhpcy5ncm91cE5hbWV8fGU8PTN8fHQubGVuZ3RoPD0zKSkpKSx0aGlzLm5vcm1hbGl6ZWRQYWdlSW5kZXgkPUR0KFt0aGlzLnBhZ2VJbmRleCQsdGhpcy5udW1QYWdlcyRdKS5waXBlKF9uKCgoW3QsZV0pPT57MCE9PWUmJih0Pj1lP3RoaXMucGFnZUluZGV4JC5uZXh0KGUtMSk6dDwwJiZ0aGlzLnBhZ2VJbmRleCQubmV4dCgwKSl9KSksaHQoKChbdCxlXSk9Pk1hdGgubWluKE1hdGgubWF4KHQsMCksZS0xKSkpLGFuKDEpKSx0aGlzLnBhZ2VkSXRlbXMkPUR0KFt0aGlzLml0ZW1zJCx0aGlzLnN0b3JlLnNlbGVjdChKRyksdGhpcy5ub3JtYWxpemVkUGFnZUluZGV4JCx0aGlzLmlzR3JvdXBFeHBhbmRlZCRdKS5waXBlKGh0KCgoW3QsZSxuLG9dKT0+e2NvbnN0IGk9ZSpuLGE9ZSpuK01hdGgubWluKG8/ZTozLGUpO3JldHVybiB0LnNsaWNlKGksYSl9KSkpfW5nT25DaGFuZ2VzKHQpe3QuY2FyZElkc1dpdGhNZXRhZGF0YSYmdGhpcy5pdGVtcyQubmV4dCh0aGlzLmNhcmRJZHNXaXRoTWV0YWRhdGEpLHQuZ3JvdXBOYW1lJiZ0aGlzLmdyb3VwTmFtZSQubmV4dCh0aGlzLmdyb3VwTmFtZSl9b25QYWdlSW5kZXhDaGFuZ2VkKHQpe3RoaXMucGFnZUluZGV4JC5uZXh0KHQpfW9uR3JvdXBFeHBhbnNpb25Ub2dnbGVkKCl7aWYobnVsbD09PXRoaXMuZ3JvdXBOYW1lKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhcmlhbnQgZXJyb3I6IGV4cGFuc2lvbiBjYW5ub3QgYmUgdG9nZ2xlZCB3aGVuIGdyb3VwTmFtZSBpcyBudWxsIik7dGhpcy5zdG9yZS5kaXNwYXRjaChzUSh7dGFnR3JvdXA6dGhpcy5ncm91cE5hbWV9KSl9fWZ1bmN0aW9uIG1ndCh0LGUpe2lmKDEmdCYmKE91KDAsInNwYW4iLDYpLE1mKDEpLFB1KCkpLDImdCl7Y29uc3QgdD1MdSgpLiRpbXBsaWNpdDtKYygxKSx4ZigiIix0Lml0ZW1zLmxlbmd0aCwiIGNhcmRzIil9fWZ1bmN0aW9uIHVndCh0LGUpe2lmKDEmdCYmKE91KDAsImRpdiIsMSksT3UoMSwiZGl2IiwyKSxPdSgyLCJzcGFuIiksT3UoMywic3BhbiIsMyksTWYoNCksUHUoKSxXbSg1LG1ndCwyLDEsInNwYW4iLDQpLFB1KCksUHUoKSx3dSg2LCJtZXRyaWNzLWNhcmQtZ3JpZCIsNSksUHUoKSksMiZ0KXtjb25zdCB0PWUuJGltcGxpY2l0LG49THUoKTtKYygzKSxVdSgidGl0bGUiLHQuZ3JvdXBOYW1lKSxKYygxKSx2Zih0Lmdyb3VwTmFtZSksSmMoMSksdnUoIm5nSWYiLHQuaXRlbXMubGVuZ3RoPjEpLEpjKDEpLHZ1KCJjYXJkSWRzV2l0aE1ldGFkYXRhIix0Lml0ZW1zKSgiY2FyZE9ic2VydmVyIixuLmNhcmRPYnNlcnZlcikoImdyb3VwTmFtZSIsdC5ncm91cE5hbWUpfX1wZ3QuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHBndCkoTXUoRWspKX0scGd0Lsm1Y21wPVVvKHt0eXBlOnBndCxzZWxlY3RvcnM6W1sibWV0cmljcy1jYXJkLWdyaWQiXV0saW5wdXRzOntncm91cE5hbWU6Imdyb3VwTmFtZSIsY2FyZElkc1dpdGhNZXRhZGF0YToiY2FyZElkc1dpdGhNZXRhZGF0YSIsY2FyZE9ic2VydmVyOiJjYXJkT2JzZXJ2ZXIifSxmZWF0dXJlczpbU2ldLGRlY2xzOjcsdmFyczoyMCxjb25zdHM6W1szLCJpc0dyb3VwRXhwYW5kYWJsZSIsImlzR3JvdXBFeHBhbmRlZCIsImdyb3VwTmFtZSIsInBhZ2VJbmRleCIsIm51bVBhZ2VzIiwic2hvd1BhZ2luYXRpb25Db250cm9scyIsImNhcmRJZHNXaXRoTWV0YWRhdGEiLCJjYXJkT2JzZXJ2ZXIiLCJwYWdlSW5kZXhDaGFuZ2VkIiwiZ3JvdXBFeHBhbnNpb25Ub2dnbGVkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihPdSgwLCJtZXRyaWNzLWNhcmQtZ3JpZC1jb21wb25lbnQiLDApLE51KCJwYWdlSW5kZXhDaGFuZ2VkIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vblBhZ2VJbmRleENoYW5nZWQoZSl9KSkoImdyb3VwRXhwYW5zaW9uVG9nZ2xlZCIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vbkdyb3VwRXhwYW5zaW9uVG9nZ2xlZCgpfSkpLE9iKDEsImFzeW5jIiksT2IoMiwiYXN5bmMiKSxPYigzLCJhc3luYyIpLE9iKDQsImFzeW5jIiksT2IoNSwiYXN5bmMiKSxPYig2LCJhc3luYyIpLFB1KCkpLDImZSYmdnUoImlzR3JvdXBFeHBhbmRhYmxlIixQYigxLDgsbi5pc0dyb3VwRXhwYW5kYWJsZSQpKSgiaXNHcm91cEV4cGFuZGVkIixQYigyLDEwLG4uaXNHcm91cEV4cGFuZGVkJCkpKCJncm91cE5hbWUiLG4uZ3JvdXBOYW1lKSgicGFnZUluZGV4IixQYigzLDEyLG4ubm9ybWFsaXplZFBhZ2VJbmRleCQpKSgibnVtUGFnZXMiLFBiKDQsMTQsbi5udW1QYWdlcyQpKSgic2hvd1BhZ2luYXRpb25Db250cm9scyIsUGIoNSwxNixuLnNob3dQYWdpbmF0aW9uQ29udHJvbHMkKSkoImNhcmRJZHNXaXRoTWV0YWRhdGEiLFBiKDYsMTgsbi5wYWdlZEl0ZW1zJCkpKCJjYXJkT2JzZXJ2ZXIiLG4uY2FyZE9ic2VydmVyKX0sZGlyZWN0aXZlczpbZGd0XSxwaXBlczpbTXZdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIocGd0LFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6Im1ldHJpY3MtY2FyZC1ncmlkIix0ZW1wbGF0ZTonXG4gICAgPG1ldHJpY3MtY2FyZC1ncmlkLWNvbXBvbmVudFxuICAgICAgW2lzR3JvdXBFeHBhbmRhYmxlXT0iaXNHcm91cEV4cGFuZGFibGUkIHwgYXN5bmMiXG4gICAgICBbaXNHcm91cEV4cGFuZGVkXT0iaXNHcm91cEV4cGFuZGVkJCB8IGFzeW5jIlxuICAgICAgW2dyb3VwTmFtZV09Imdyb3VwTmFtZSJcbiAgICAgIFtwYWdlSW5kZXhdPSJub3JtYWxpemVkUGFnZUluZGV4JCB8IGFzeW5jIlxuICAgICAgW251bVBhZ2VzXT0ibnVtUGFnZXMkIHwgYXN5bmMiXG4gICAgICBbc2hvd1BhZ2luYXRpb25Db250cm9sc109InNob3dQYWdpbmF0aW9uQ29udHJvbHMkIHwgYXN5bmMiXG4gICAgICBbY2FyZElkc1dpdGhNZXRhZGF0YV09InBhZ2VkSXRlbXMkIHwgYXN5bmMiXG4gICAgICBbY2FyZE9ic2VydmVyXT0iY2FyZE9ic2VydmVyIlxuICAgICAgKHBhZ2VJbmRleENoYW5nZWQpPSJvblBhZ2VJbmRleENoYW5nZWQoJGV2ZW50KSJcbiAgICAgIChncm91cEV4cGFuc2lvblRvZ2dsZWQpPSJvbkdyb3VwRXhwYW5zaW9uVG9nZ2xlZCgpIlxuICAgID5cbiAgICA8L21ldHJpY3MtY2FyZC1ncmlkLWNvbXBvbmVudD5cbiAgJyxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6RWt9XX0pLHtncm91cE5hbWU6W3t0eXBlOnlffV0sY2FyZElkc1dpdGhNZXRhZGF0YTpbe3R5cGU6eV99XSxjYXJkT2JzZXJ2ZXI6W3t0eXBlOnlffV19KTtjbGFzcyBmZ3R7Y29uc3RydWN0b3IoKXt0aGlzLlBsdWdpblR5cGU9c1J9dHJhY2tCeUdyb3VwKHQsZSl7cmV0dXJuIGUuZ3JvdXBOYW1lfX1mZ3QuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGZndCl9LGZndC7JtWNtcD1Vbyh7dHlwZTpmZ3Qsc2VsZWN0b3JzOltbIm1ldHJpY3MtY2FyZC1ncm91cHMtY29tcG9uZW50Il1dLGlucHV0czp7Y2FyZEdyb3VwczoiY2FyZEdyb3VwcyIsY2FyZE9ic2VydmVyOiJjYXJkT2JzZXJ2ZXIifSxkZWNsczoxLHZhcnM6Mixjb25zdHM6W1siY2xhc3MiLCJjYXJkLWdyb3VwIiw0LCJuZ0ZvciIsIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiXSxbMSwiY2FyZC1ncm91cCJdLFsxLCJncm91cC10b29sYmFyIl0sWyJhcmlhLXJvbGUiLCJoZWFkaW5nIiwiYXJpYS1sZXZlbCIsIjMiLDEsImdyb3VwLXRpdGxlIiwzLCJ0aXRsZSJdLFsiY2xhc3MiLCJncm91cC1jYXJkLWNvdW50Iiw0LCJuZ0lmIl0sWzMsImNhcmRJZHNXaXRoTWV0YWRhdGEiLCJjYXJkT2JzZXJ2ZXIiLCJncm91cE5hbWUiXSxbMSwiZ3JvdXAtY2FyZC1jb3VudCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiZXbSgwLHVndCw3LDYsImRpdiIsMCksMiZlJiZ2dSgibmdGb3JPZiIsbi5jYXJkR3JvdXBzKSgibmdGb3JUcmFja0J5IixuLnRyYWNrQnlHcm91cCl9LGRpcmVjdGl2ZXM6W292LGF2LHBndF0sc3R5bGVzOlsnLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEycHg7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtYmFkZ2Utc21hbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6OXB4fS5tYXQtYmFkZ2UtbGFyZ2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweH0ubWF0LWgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1oZWFkbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMjRweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNnB4LzI4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNXB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC44MykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtaDZbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuNjcpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWJvZHktc3Ryb25nW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjAgMCAxMnB4fS5tYXQtc21hbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDEycHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjMwMCAxMTJweC8xMTJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDVlbTttYXJnaW46MCAwIDU2cHh9Lm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDU2cHgvNTZweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDJlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDQ1cHgvNDhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDA1ZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAzNHB4LzQwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDY0cHh9Lm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcmFpc2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0cm9rZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mbGF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmFiW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1taW5pLWZhYltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWJ1dHRvbi10b2dnbGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhcmQtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjIwcHh9Lm1hdC1jYXJkLXN1YnRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2hlY2tib3hbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNoZWNrYm94LWxheW91dFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoZWNrYm94LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoyNHB4fS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtdHJhaWxpbmctaWNvbi5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtcmVtb3ZlLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MThweH0ubWF0LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1oZWFkZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2VsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9vdGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2FsZW5kYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhbGVuZGFyLWJvZHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxM3B4fS5tYXQtY2FsZW5kYXItYm9keS1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FsZW5kYXItcGVyaW9kLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo0MDB9Lm1hdC1kaWFsb2ctdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjEyNTtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE1MCU7bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS41ZW07d2lkdGg6MS41ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNWVtIDA7Ym9yZGVyLXRvcDouODQzNzVlbSBzb2xpZCB0cmFuc3BhcmVudH0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6LTAuODQzNzVlbTtwYWRkaW5nLXRvcDouODQzNzVlbX0ubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo3NSU7bWFyZ2luLXRvcDouNjY2NjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjc5MTY2NjY2NjdlbSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNDM3NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMnB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjNlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM1MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjI4MTI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDouNTQxNjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjY2NjY2NjY2NjdlbSl9QG1lZGlhIHByaW50ey5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMmVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMWVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTJlbSkgc2NhbGUoMC43NSl9fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi4yNWVtIDAgLjc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMDkzNzVlbTttYXJnaW4tdG9wOi0wLjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjFlbSAwIDFlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS44NDM3NWVtO21hcmdpbi10b3A6LTAuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9aW5wdXQubWF0LWlucHV0LWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LTAuMDYyNWVtfS5tYXQtbWVudS1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtcGFnaW5hdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweH0ubWF0LXJhZGlvLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW19Lm1hdC1zbGlkZS10b2dnbGUtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdGVwcGVyLWhvcml6b250YWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXN0ZXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXN0ZXAtc3ViLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDpub3JtYWx9Lm1hdC1zdGVwLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LXN0ZXAtbGFiZWwtc2VsZWN0ZWRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRhYi1ncm91cFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdGFiLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10YWItbGlua1tfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowfS5tYXQtdG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB4O3BhZGRpbmctdG9wOjZweDtwYWRkaW5nLWJvdHRvbTo2cHh9Lm1hdC10b29sdGlwLWhhbmRzZXRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9Lm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE2cHh9Lm1hdC1vcHRncm91cC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1zaW1wbGUtc25hY2tiYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweH0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb25bX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjE7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo1MDB9Lm1hdC10cmVlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW5lc3RlZC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjQwMDtmb250LXNpemU6MTRweH0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmVtcHR5KXt0cmFuc2Zvcm06dHJhbnNsYXRlWigwKX0ubWF0LXJpcHBsZS5tYXQtcmlwcGxlLXVuYm91bmRlZFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItcmFkaXVzOjUwJTtwb2ludGVyLWV2ZW50czpub25lO3RyYW5zaXRpb246b3BhY2l0eSx0cmFuc2Zvcm0gMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpO3RyYW5zZm9ybTpzY2FsZSgwKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6bm9uZX0uY2RrLXZpc3VhbGx5LWhpZGRlbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjA7Y2xpcDpyZWN0KDAgMCAwIDApO2hlaWdodDoxcHg7bWFyZ2luOi0xcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwO291dGxpbmU6MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb2ludGVyLWV2ZW50czpub25lO3RvcDowO2xlZnQ6MDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTplbXB0eXtkaXNwbGF5Om5vbmV9LmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1wYW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czphdXRvO2JveC1zaXppbmc6Ym9yZGVyLWJveDt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O21heC13aWR0aDoxMDAlO21heC1oZWlnaHQ6MTAwJX0uY2RrLW92ZXJsYXktYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO3otaW5kZXg6MTAwMDtwb2ludGVyLWV2ZW50czphdXRvOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDt0cmFuc2l0aW9uOm9wYWNpdHkgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSk7b3BhY2l0eTowfS5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjF9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAuY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTouNn0uY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4zMil9LmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MH0uY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWluLXdpZHRoOjFweDttaW4taGVpZ2h0OjFweH0uY2RrLWdsb2JhbC1zY3JvbGxibG9ja1tfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7d2lkdGg6MTAwJTtvdmVyZmxvdy15OnNjcm9sbH1Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0e31Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZHt9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbHthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQgMHMgMW1zfS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOm5vdCg6LXdlYmtpdC1hdXRvZmlsbCl7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCAwcyAxbXN9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplW19uZ2NvbnRlbnQtJUNPTVAlXXtyZXNpemU6bm9uZX10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDphdXRvICFpbXBvcnRhbnQ7b3ZlcmZsb3c6aGlkZGVuICFpbXBvcnRhbnR9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZy1maXJlZm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDowICFpbXBvcnRhbnR9Lm1hdC1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtbWRjLWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9Lmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmViO2JhY2tncm91bmQtY29sb3I6I2ZmZjtoZWlnaHQ6NDJweDtwYWRkaW5nOjAgMTZweDtib3JkZXItdG9wOjFweCBzb2xpZCAjZWJlYmViO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM1NTV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgIzU1NX0uY2FyZC1ncm91cFtfbmdjb250ZW50LSVDT01QJV06Zmlyc3Qtb2YtdHlwZSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItdG9wOm5vbmV9Lmdyb3VwLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lmdyb3VwLWNhcmQtY291bnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjQwMDtjb2xvcjojNjE2MTYxO21hcmdpbi1sZWZ0OjZweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtY2FyZC1jb3VudFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC1jYXJkLWNvdW50W19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoZmd0LFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6Im1ldHJpY3MtY2FyZC1ncm91cHMtY29tcG9uZW50Iix0ZW1wbGF0ZTonXG4gICAgPGRpdlxuICAgICAgKm5nRm9yPSJsZXQgZ3JvdXAgb2YgY2FyZEdyb3VwczsgdHJhY2tCeTogdHJhY2tCeUdyb3VwIlxuICAgICAgY2xhc3M9ImNhcmQtZ3JvdXAiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz0iZ3JvdXAtdG9vbGJhciI+XG4gICAgICAgIDxzcGFuPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBjbGFzcz0iZ3JvdXAtdGl0bGUiXG4gICAgICAgICAgICBhcmlhLXJvbGU9ImhlYWRpbmciXG4gICAgICAgICAgICBhcmlhLWxldmVsPSIzIlxuICAgICAgICAgICAgdGl0bGU9Int7IGdyb3VwLmdyb3VwTmFtZSB9fSJcbiAgICAgICAgICAgID57eyBncm91cC5ncm91cE5hbWUgfX08L3NwYW5cbiAgICAgICAgICA+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9Imdyb3VwLml0ZW1zLmxlbmd0aCA+IDEiIGNsYXNzPSJncm91cC1jYXJkLWNvdW50IlxuICAgICAgICAgICAgPnt7IGdyb3VwLml0ZW1zLmxlbmd0aCB9fSBjYXJkczwvc3BhblxuICAgICAgICAgID5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8bWV0cmljcy1jYXJkLWdyaWRcbiAgICAgICAgW2NhcmRJZHNXaXRoTWV0YWRhdGFdPSJncm91cC5pdGVtcyJcbiAgICAgICAgW2NhcmRPYnNlcnZlcl09ImNhcmRPYnNlcnZlciJcbiAgICAgICAgW2dyb3VwTmFtZV09Imdyb3VwLmdyb3VwTmFtZSJcbiAgICAgID48L21ldHJpY3MtY2FyZC1ncmlkPlxuICAgIDwvZGl2PlxuICAnLHN0eWxlVXJsczpbImNhcmRfZ3JvdXBzX2NvbXBvbmVudC5jc3MiXSxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSxudWxsLHtjYXJkR3JvdXBzOlt7dHlwZTp5X31dLGNhcmRPYnNlcnZlcjpbe3R5cGU6eV99XX0pO2NvbnN0IGdndD16ayhFVCx2TiwoKHQsZSk9PnQuZmlsdGVyKCh0PT4hZlIodC5wbHVnaW4pfHxCb29sZWFuKGUmJmUuZ2V0KHQucnVuSWQpKSkpKSk7Y2xhc3MgaGd0e2NvbnN0cnVjdG9yKHQpe3RoaXMuc3RvcmU9dCx0aGlzLmNhcmRHcm91cHMkPXRoaXMuc3RvcmUuc2VsZWN0KGdndCkucGlwZShodCgodD0+KGZ1bmN0aW9uIGUodCl7Y29uc3QgZT1uZXcgTWFwLG49dC5zbGljZSgpLnNvcnQoKCh0LGUpPT5IMih0LnRhZyxlLnRhZykpKTtmb3IoY29uc3QgdCBvZiBuKXtjb25zdCBuPXQudGFnLnNwbGl0KCIvIiwxKVswXTtlLmhhcyhuKXx8ZS5zZXQobix7Z3JvdXBOYW1lOm4saXRlbXM6W119KSxlLmdldChuKS5pdGVtcy5wdXNoKHQpfXJldHVyblsuLi5lLnZhbHVlcygpXX0pKHQpKSkpfX1mdW5jdGlvbiBiZ3QodCxlKXtpZigxJnQmJihPdSgwLCJzcGFuIiw1KSxNZigxKSxQdSgpKSwyJnQpe2NvbnN0IHQ9THUoKTtKYygxKSx4ZigiIix0LmNhcmRJZHNXaXRoTWV0YWRhdGEubGVuZ3RoLCIgY2FyZHMiKX19aGd0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxoZ3QpKE11KEVrKSl9LGhndC7JtWNtcD1Vbyh7dHlwZTpoZ3Qsc2VsZWN0b3JzOltbIm1ldHJpY3MtY2FyZC1ncm91cHMiXV0saW5wdXRzOntjYXJkT2JzZXJ2ZXI6ImNhcmRPYnNlcnZlciJ9LGRlY2xzOjIsdmFyczo0LGNvbnN0czpbWzMsImNhcmRHcm91cHMiLCJjYXJkT2JzZXJ2ZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKHd1KDAsIm1ldHJpY3MtY2FyZC1ncm91cHMtY29tcG9uZW50IiwwKSxPYigxLCJhc3luYyIpKSwyJmUmJnZ1KCJjYXJkR3JvdXBzIixQYigxLDIsbi5jYXJkR3JvdXBzJCkpKCJjYXJkT2JzZXJ2ZXIiLG4uY2FyZE9ic2VydmVyKX0sZGlyZWN0aXZlczpbZmd0XSxwaXBlczpbTXZdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoaGd0LFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6Im1ldHJpY3MtY2FyZC1ncm91cHMiLHRlbXBsYXRlOidcbiAgICA8bWV0cmljcy1jYXJkLWdyb3Vwcy1jb21wb25lbnRcbiAgICAgIFtjYXJkR3JvdXBzXT0iY2FyZEdyb3VwcyQgfCBhc3luYyJcbiAgICAgIFtjYXJkT2JzZXJ2ZXJdPSJjYXJkT2JzZXJ2ZXIiXG4gICAgPjwvbWV0cmljcy1jYXJkLWdyb3Vwcy1jb21wb25lbnQ+XG4gICcsY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkVrfV19KSx7Y2FyZE9ic2VydmVyOlt7dHlwZTp5X31dfSk7Y2xhc3MgeWd0e315Z3QuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHlndCl9LHlndC7JtWNtcD1Vbyh7dHlwZTp5Z3Qsc2VsZWN0b3JzOltbIm1ldHJpY3MtZmlsdGVyZWQtdmlldy1jb21wb25lbnQiXV0saW5wdXRzOntjYXJkT2JzZXJ2ZXI6ImNhcmRPYnNlcnZlciIsY2FyZElkc1dpdGhNZXRhZGF0YToiY2FyZElkc1dpdGhNZXRhZGF0YSJ9LGRlY2xzOjYsdmFyczozLGNvbnN0czpbWzEsImdyb3VwLXRvb2xiYXIiXSxbMSwiZ3JvdXAtdGV4dCJdLFsiYXJpYS1yb2xlIiwiaGVhZGluZyIsImFyaWEtbGV2ZWwiLCIzIiwxLCJncm91cC10aXRsZSJdLFsiY2xhc3MiLCJncm91cC1jYXJkLWNvdW50Iiw0LCJuZ0lmIl0sWzMsImNhcmRJZHNXaXRoTWV0YWRhdGEiLCJjYXJkT2JzZXJ2ZXIiXSxbMSwiZ3JvdXAtY2FyZC1jb3VudCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoT3UoMCwiZGl2IiwwKSxPdSgxLCJzcGFuIiwxKSxPdSgyLCJzcGFuIiwyKSxNZigzLCJUYWdzIG1hdGNoaW5nIGZpbHRlciIpLFB1KCksV20oNCxiZ3QsMiwxLCJzcGFuIiwzKSxQdSgpLFB1KCksd3UoNSwibWV0cmljcy1jYXJkLWdyaWQiLDQpKSwyJmUmJihKYyg0KSx2dSgibmdJZiIsbi5jYXJkSWRzV2l0aE1ldGFkYXRhLmxlbmd0aD4xKSxKYygxKSx2dSgiY2FyZElkc1dpdGhNZXRhZGF0YSIsbi5jYXJkSWRzV2l0aE1ldGFkYXRhKSgiY2FyZE9ic2VydmVyIixuLmNhcmRPYnNlcnZlcikpfSxkaXJlY3RpdmVzOlthdixwZ3RdLHN0eWxlczpbJy5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHh9Lm1hdC1oMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaGVhZGxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTVweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZ1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjA1ZW07bWFyZ2luOjAgMCA1NnB4fS5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAwNWVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXJhaXNlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdHJva2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmxhdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZhYltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbWluaS1mYWJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4fS5tYXQtY2FyZC1zdWJ0aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGVja2JveC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvb3Rlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgdHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIzZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LjU0MTY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2NjY2NjY3ZW0pfUBtZWRpYSBwcmludHsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjJlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouMjVlbSAwIC43NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxZW0gMCAxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMiksIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi0wLjA2MjVlbX0ubWF0LW1lbnUtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci12ZXJ0aWNhbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGFiLWxpbmtbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MH0ubWF0LXRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5Om5vbmV9LmNkay12aXN1YWxseS1oaWRkZW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjZ9LmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV0sIC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3hbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2tbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHt9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7fS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOi13ZWJraXQtYXV0b2ZpbGwpe2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZVtfbmdjb250ZW50LSVDT01QJV17cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fS5tYXQtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfS5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWJlYjtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7aGVpZ2h0OjQycHg7cGFkZGluZzowIDE2cHg7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmVifWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzMwMzAzMH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fS5ncm91cC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6YmFzZWxpbmV9Lmdyb3VwLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lmdyb3VwLWNhcmQtY291bnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjQwMDtjb2xvcjojNjE2MTYxO21hcmdpbi1sZWZ0OjZweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtY2FyZC1jb3VudFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC1jYXJkLWNvdW50W19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoeWd0LFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6Im1ldHJpY3MtZmlsdGVyZWQtdmlldy1jb21wb25lbnQiLHRlbXBsYXRlOidcbiAgICA8ZGl2IGNsYXNzPSJncm91cC10b29sYmFyIj5cbiAgICAgIDxzcGFuIGNsYXNzPSJncm91cC10ZXh0Ij5cbiAgICAgICAgPHNwYW4gY2xhc3M9Imdyb3VwLXRpdGxlIiBhcmlhLXJvbGU9ImhlYWRpbmciIGFyaWEtbGV2ZWw9IjMiXG4gICAgICAgICAgPlRhZ3MgbWF0Y2hpbmcgZmlsdGVyPC9zcGFuXG4gICAgICAgID5cbiAgICAgICAgPHNwYW4gKm5nSWY9ImNhcmRJZHNXaXRoTWV0YWRhdGEubGVuZ3RoID4gMSIgY2xhc3M9Imdyb3VwLWNhcmQtY291bnQiXG4gICAgICAgICAgPnt7IGNhcmRJZHNXaXRoTWV0YWRhdGEubGVuZ3RoIH19IGNhcmRzPC9zcGFuXG4gICAgICAgID5cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8bWV0cmljcy1jYXJkLWdyaWRcbiAgICAgIFtjYXJkSWRzV2l0aE1ldGFkYXRhXT0iY2FyZElkc1dpdGhNZXRhZGF0YSJcbiAgICAgIFtjYXJkT2JzZXJ2ZXJdPSJjYXJkT2JzZXJ2ZXIiXG4gICAgPjwvbWV0cmljcy1jYXJkLWdyaWQ+XG4gICcsc3R5bGVVcmxzOlsiZmlsdGVyZWRfdmlld19jb21wb25lbnQuY3NzIl0sY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sbnVsbCx7Y2FyZE9ic2VydmVyOlt7dHlwZTp5X31dLGNhcmRJZHNXaXRoTWV0YWRhdGE6W3t0eXBlOnlffV19KTtjb25zdCBfZ3Q9emsoRVQsdk4sKCh0LGUpPT50LmZpbHRlcigodD0+IWZSKHQucGx1Z2luKXx8Qm9vbGVhbihlJiZlLmdldCh0LnJ1bklkKSkpKSkpO2NsYXNzIENndHtjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXQsdGhpcy5jYXJkSWRzV2l0aE1ldGFkYXRhJD10aGlzLnN0b3JlLnNlbGVjdChfZ3QpLnBpcGUoZG4oKHQ9PkR0KFtaKHQpLHRoaXMuc3RvcmUuc2VsZWN0KFhUKV0pKSksaHQoKChbdCxlXSk9Pnt0cnl7cmV0dXJue2NhcmRMaXN0OnQscmVnZXg6bmV3IFJlZ0V4cChlKX19Y2F0Y2goZSl7cmV0dXJue2NhcmRMaXN0OnQscmVnZXg6bnVsbH19fSkpLEd0KCgoe3JlZ2V4OnR9KT0+bnVsbCE9PXQpKSxodCgoKHtjYXJkTGlzdDp0LHJlZ2V4OmV9KT0+dC5maWx0ZXIoKCh7dGFnOnR9KT0+ZS50ZXN0KHQpKSkpKSxodCgodD0+dC5zb3J0KCgodCxlKT0+SDIodC50YWcsZS50YWcpKSkpKSxrZSgoKHQsZSk9PnQubGVuZ3RoPT09ZS5sZW5ndGgmJnQuZXZlcnkoKCh0LG4pPT50LmNhcmRJZD09PWVbbl0uY2FyZElkKSkpKSxjbihbXSkpfX1mdW5jdGlvbiBNZ3QodCxlKXtpZigxJnQmJihPdSgwLCJzcGFuIiw3KSxNZigxKSxQdSgpKSwyJnQpe2NvbnN0IHQ9THUoKTtKYygxKSx4ZigiIix0LmNhcmRJZHNXaXRoTWV0YWRhdGEubGVuZ3RoLCIgY2FyZHMiKX19ZnVuY3Rpb24gdmd0KHQsZSl7aWYoMSZ0JiZ3dSgwLCJtZXRyaWNzLWNhcmQtZ3JpZCIsOCksMiZ0KXtjb25zdCB0PUx1KCk7dnUoImNhcmRJZHNXaXRoTWV0YWRhdGEiLHQuY2FyZElkc1dpdGhNZXRhZGF0YSkoImNhcmRPYnNlcnZlciIsdC5jYXJkT2JzZXJ2ZXIpfX1mdW5jdGlvbiB4Z3QodCxlKXsxJnQmJihPdSgwLCJkaXYiLDkpLE1mKDEsIlBpbiBjYXJkcyBmb3IgYSBxdWljayB2aWV3IGFuZCBjb21wYXJpc29uIiksUHUoKSl9Q2d0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxDZ3QpKE11KEVrKSl9LENndC7JtWNtcD1Vbyh7dHlwZTpDZ3Qsc2VsZWN0b3JzOltbIm1ldHJpY3MtZmlsdGVyZWQtdmlldyJdXSxpbnB1dHM6e2NhcmRPYnNlcnZlcjoiY2FyZE9ic2VydmVyIn0sZGVjbHM6Mix2YXJzOjQsY29uc3RzOltbMywiY2FyZElkc1dpdGhNZXRhZGF0YSIsImNhcmRPYnNlcnZlciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYod3UoMCwibWV0cmljcy1maWx0ZXJlZC12aWV3LWNvbXBvbmVudCIsMCksT2IoMSwiYXN5bmMiKSksMiZlJiZ2dSgiY2FyZElkc1dpdGhNZXRhZGF0YSIsUGIoMSwyLG4uY2FyZElkc1dpdGhNZXRhZGF0YSQpKSgiY2FyZE9ic2VydmVyIixuLmNhcmRPYnNlcnZlcil9LGRpcmVjdGl2ZXM6W3lndF0scGlwZXM6W012XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKENndCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJtZXRyaWNzLWZpbHRlcmVkLXZpZXciLHRlbXBsYXRlOidcbiAgICA8bWV0cmljcy1maWx0ZXJlZC12aWV3LWNvbXBvbmVudFxuICAgICAgW2NhcmRJZHNXaXRoTWV0YWRhdGFdPSJjYXJkSWRzV2l0aE1ldGFkYXRhJCB8IGFzeW5jIlxuICAgICAgW2NhcmRPYnNlcnZlcl09ImNhcmRPYnNlcnZlciJcbiAgICA+PC9tZXRyaWNzLWZpbHRlcmVkLXZpZXctY29tcG9uZW50PlxuICAnLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2h9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpFa31dfSkse2NhcmRPYnNlcnZlcjpbe3R5cGU6eV99XX0pO2NsYXNzIE9ndHt9T2d0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxPZ3QpfSxPZ3QuybVjbXA9VW8oe3R5cGU6T2d0LHNlbGVjdG9yczpbWyJtZXRyaWNzLXBpbm5lZC12aWV3LWNvbXBvbmVudCJdXSxpbnB1dHM6e2NhcmRPYnNlcnZlcjoiY2FyZE9ic2VydmVyIixjYXJkSWRzV2l0aE1ldGFkYXRhOiJjYXJkSWRzV2l0aE1ldGFkYXRhIn0sZGVjbHM6OSx2YXJzOjMsY29uc3RzOltbMSwiZ3JvdXAtdG9vbGJhciJdLFsic3ZnSWNvbiIsImtlZXBfMjRweCJdLFsxLCJncm91cC10ZXh0Il0sWyJhcmlhLXJvbGUiLCJoZWFkaW5nIiwiYXJpYS1sZXZlbCIsIjMiLDEsImdyb3VwLXRpdGxlIl0sWyJjbGFzcyIsImdyb3VwLWNhcmQtY291bnQiLDQsIm5nSWYiXSxbMywiY2FyZElkc1dpdGhNZXRhZGF0YSIsImNhcmRPYnNlcnZlciIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJlbXB0eVBpbm5lZFZpZXciLCIiXSxbMSwiZ3JvdXAtY2FyZC1jb3VudCJdLFszLCJjYXJkSWRzV2l0aE1ldGFkYXRhIiwiY2FyZE9ic2VydmVyIl0sWzEsImVtcHR5LW1lc3NhZ2UiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pe2lmKDEmZSYmKE91KDAsImRpdiIsMCksd3UoMSwibWF0LWljb24iLDEpLE91KDIsInNwYW4iLDIpLE91KDMsInNwYW4iLDMpLE1mKDQsIlBpbm5lZCIpLFB1KCksV20oNSxNZ3QsMiwxLCJzcGFuIiw0KSxQdSgpLFB1KCksV20oNix2Z3QsMSwyLCJtZXRyaWNzLWNhcmQtZ3JpZCIsNSksV20oNyx4Z3QsMiwwLCJuZy10ZW1wbGF0ZSIsbnVsbCw2LEtiKSksMiZlKXtjb25zdCB0PUdtKDgpO0pjKDUpLHZ1KCJuZ0lmIixuLmNhcmRJZHNXaXRoTWV0YWRhdGEubGVuZ3RoPjEpLEpjKDEpLHZ1KCJuZ0lmIixuLmNhcmRJZHNXaXRoTWV0YWRhdGEubGVuZ3RoKSgibmdJZkVsc2UiLHQpfX0sZGlyZWN0aXZlczpbY0csYXYscGd0XSxzdHlsZXM6WycubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1iYWRnZS1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo5cHh9Lm1hdC1iYWRnZS1sYXJnZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4fS5tYXQtaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWhlYWRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAyNHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE1cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjgzKS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1oNltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC42NykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtYm9keS1zdHJvbmdbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MCAwIDEycHh9Lm1hdC1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FwdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTJweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6MzAwIDExMnB4LzExMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wNWVtO21hcmdpbjowIDAgNTZweH0ubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNTZweC81NnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMmVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNDVweC80OHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMDVlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDM0cHgvNDBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1yYWlzZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3Ryb2tlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZsYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mYWJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW1pbmktZmFiW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtYnV0dG9uLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FyZC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjBweH0ubWF0LWNhcmQtc3VidGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hlY2tib3gtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC10cmFpbGluZy1pY29uLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC1yZW1vdmUubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxOHB4fS5tYXQtdGFibGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWhlYWRlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb290ZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jYWxlbmRhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FsZW5kYXItYm9keVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYWxlbmRhci1wZXJpb2QtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWRpYWxvZy10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTI1O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTUwJTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjVlbTt3aWR0aDoxLjVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW07bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41ZW0gMDtib3JkZXItdG9wOi44NDM3NWVtIHNvbGlkIHRyYW5zcGFyZW50fS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3RvcDotMC44NDM3NWVtO3BhZGRpbmctdG9wOi44NDM3NWVtfS5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjc1JTttYXJnaW4tdG9wOi42NjY2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNzkxNjY2NjY2N2VtKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAycHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyM2VtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzUzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi41NDE2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNjY2NjY2NjY2N2VtKX1AbWVkaWEgcHJpbnR7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIyZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIxZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMmVtKSBzY2FsZSgwLjc1KX19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjI1ZW0gMCAuNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4wOTM3NWVtO21hcmdpbi10b3A6LTAuNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MWVtIDAgMWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjg0Mzc1ZW07bWFyZ2luLXRvcDotMC4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH1pbnB1dC5tYXQtaW5wdXQtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDotMC4wNjI1ZW19Lm1hdC1tZW51LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1wYWdpbmF0b3JbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXBhZ2luYXRvci1wYWdlLXNpemVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3RbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXN0ZXBwZXItdmVydGljYWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc3RlcC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0Om5vcm1hbH0ubWF0LXN0ZXAtbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRhYi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjB9Lm1hdC10b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTZweH0ubWF0LW9wdGdyb3VwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LXNpbXBsZS1zbmFja2Jhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbltfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRyZWVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbmVzdGVkLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4fS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVdOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtcmlwcGxlLm1hdC1yaXBwbGUtdW5ib3VuZGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6NTAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7dHJhbnNmb3JtOnNjYWxlKDApfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpub25lfS5jZGstdmlzdWFsbHktaGlkZGVuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7bGVmdDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmVtcHR5e2Rpc3BsYXk6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LXBhbmVbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOmF1dG87Ym94LXNpemluZzpib3JkZXItYm94O3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7bWF4LXdpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlfS5jZGstb3ZlcmxheS1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKTtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5Oi42fS5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjMyKX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTowfS5jZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO292ZXJmbG93LXk6c2Nyb2xsfUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnR7fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5ke30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxse2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCAwcyAxbXN9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06bm90KDotd2Via2l0LWF1dG9maWxsKXthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIDBzIDFtc310ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemVbX25nY29udGVudC0lQ09NUCVde3Jlc2l6ZTpub25lfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmdbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OmF1dG8gIWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW4gIWltcG9ydGFudH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nLWZpcmVmb3hbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OjAgIWltcG9ydGFudH0ubWF0LWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0uZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7YmFja2dyb3VuZC1jb2xvcjojZmZmO2hlaWdodDo0MnB4O3BhZGRpbmc6MCAxNnB4O2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM1NTV9bWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7ZmxleDpub25lO21hcmdpbi1yaWdodDo1cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBtYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Lmdyb3VwLXRleHRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpiYXNlbGluZX0uZ3JvdXAtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0uZ3JvdXAtY2FyZC1jb3VudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NDAwO2NvbG9yOiM2MTYxNjE7bWFyZ2luLWxlZnQ6NnB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC1jYXJkLWNvdW50W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLWNhcmQtY291bnRbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS5lbXB0eS1tZXNzYWdlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxO3RleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6MTZweDtmb250LXNpemU6MTNweDtmb250LXN0eWxlOml0YWxpY31ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZW1wdHktbWVzc2FnZVtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5lbXB0eS1tZXNzYWdlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoT2d0LFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6Im1ldHJpY3MtcGlubmVkLXZpZXctY29tcG9uZW50Iix0ZW1wbGF0ZTonXG4gICAgPGRpdiBjbGFzcz0iZ3JvdXAtdG9vbGJhciI+XG4gICAgICA8bWF0LWljb24gc3ZnSWNvbj0ia2VlcF8yNHB4Ij48L21hdC1pY29uPlxuICAgICAgPHNwYW4gY2xhc3M9Imdyb3VwLXRleHQiPlxuICAgICAgICA8c3BhbiBjbGFzcz0iZ3JvdXAtdGl0bGUiIGFyaWEtcm9sZT0iaGVhZGluZyIgYXJpYS1sZXZlbD0iMyJcbiAgICAgICAgICA+UGlubmVkPC9zcGFuXG4gICAgICAgID5cbiAgICAgICAgPHNwYW4gKm5nSWY9ImNhcmRJZHNXaXRoTWV0YWRhdGEubGVuZ3RoID4gMSIgY2xhc3M9Imdyb3VwLWNhcmQtY291bnQiXG4gICAgICAgICAgPnt7IGNhcmRJZHNXaXRoTWV0YWRhdGEubGVuZ3RoIH19IGNhcmRzPC9zcGFuXG4gICAgICAgID5cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8bWV0cmljcy1jYXJkLWdyaWRcbiAgICAgICpuZ0lmPSJjYXJkSWRzV2l0aE1ldGFkYXRhLmxlbmd0aDsgZWxzZSBlbXB0eVBpbm5lZFZpZXciXG4gICAgICBbY2FyZElkc1dpdGhNZXRhZGF0YV09ImNhcmRJZHNXaXRoTWV0YWRhdGEiXG4gICAgICBbY2FyZE9ic2VydmVyXT0iY2FyZE9ic2VydmVyIlxuICAgID48L21ldHJpY3MtY2FyZC1ncmlkPlxuICAgIDxuZy10ZW1wbGF0ZSAjZW1wdHlQaW5uZWRWaWV3PlxuICAgICAgPGRpdiBjbGFzcz0iZW1wdHktbWVzc2FnZSI+UGluIGNhcmRzIGZvciBhIHF1aWNrIHZpZXcgYW5kIGNvbXBhcmlzb248L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAnLHN0eWxlVXJsczpbInBpbm5lZF92aWV3X2NvbXBvbmVudC5jc3MiXSxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSxudWxsLHtjYXJkT2JzZXJ2ZXI6W3t0eXBlOnlffV0sY2FyZElkc1dpdGhNZXRhZGF0YTpbe3R5cGU6eV99XX0pO2NsYXNzIFBndHtjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXQsdGhpcy5jYXJkSWRzV2l0aE1ldGFkYXRhJD10aGlzLnN0b3JlLnNlbGVjdChOVCkucGlwZShjbihbXSkpfX1mdW5jdGlvbiB3Z3QodCxlKXtpZigxJnQmJihPdSgwLCJtYXQtb3B0aW9uIiwyKSxNZigxKSxQdSgpKSwyJnQpe2NvbnN0IHQ9ZS4kaW1wbGljaXQ7dnUoInZhbHVlIix0LnZhbHVlKSgiZGlzYWJsZWQiLHQuZGlzYWJsZWQpLEpjKDEpLHhmKCIgIix0LmRpc3BsYXlUZXh0LCIgIil9fVBndC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8UGd0KShNdShFaykpfSxQZ3QuybVjbXA9VW8oe3R5cGU6UGd0LHNlbGVjdG9yczpbWyJtZXRyaWNzLXBpbm5lZC12aWV3Il1dLGlucHV0czp7Y2FyZE9ic2VydmVyOiJjYXJkT2JzZXJ2ZXIifSxkZWNsczoyLHZhcnM6NCxjb25zdHM6W1szLCJjYXJkSWRzV2l0aE1ldGFkYXRhIiwiY2FyZE9ic2VydmVyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJih3dSgwLCJtZXRyaWNzLXBpbm5lZC12aWV3LWNvbXBvbmVudCIsMCksT2IoMSwiYXN5bmMiKSksMiZlJiZ2dSgiY2FyZElkc1dpdGhNZXRhZGF0YSIsUGIoMSwyLG4uY2FyZElkc1dpdGhNZXRhZGF0YSQpKSgiY2FyZE9ic2VydmVyIixuLmNhcmRPYnNlcnZlcil9LGRpcmVjdGl2ZXM6W09ndF0scGlwZXM6W012XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFBndCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJtZXRyaWNzLXBpbm5lZC12aWV3Iix0ZW1wbGF0ZTonXG4gICAgPG1ldHJpY3MtcGlubmVkLXZpZXctY29tcG9uZW50XG4gICAgICBbY2FyZElkc1dpdGhNZXRhZGF0YV09ImNhcmRJZHNXaXRoTWV0YWRhdGEkIHwgYXN5bmMiXG4gICAgICBbY2FyZE9ic2VydmVyXT0iY2FyZE9ic2VydmVyIlxuICAgID48L21ldHJpY3MtcGlubmVkLXZpZXctY29tcG9uZW50PlxuICAnLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2h9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpFa31dfSkse2NhcmRPYnNlcnZlcjpbe3R5cGU6eV99XX0pO2NsYXNzIGtndHtjb25zdHJ1Y3Rvcigpe3RoaXMudmFsdWU9IiIsdGhpcy5vcHRpb25zPVtdLHRoaXMuc2VsZWN0aW9uQ2hhbmdlPW5ldyBBYn19ZnVuY3Rpb24gU2d0KHQsZSl7aWYoMSZ0KXtjb25zdCB0PUV1KCk7T3UoMCwic2VjdGlvbiIsMjApLE91KDEsImgzIiwxKSxNZigyLCJJbWFnZXMiKSxQdSgpLE91KDMsImRpdiIsMjEpLE91KDQsImRpdiIsMjIpLE1mKDUsIkJyaWdodG5lc3MiKSxQdSgpLE91KDYsImRpdiIsOCksT3UoNywibWF0LXNsaWRlciIsMjMpLE51KCJpbnB1dCIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIHJhKHQpLEx1KCkuaW1hZ2VCcmlnaHRuZXNzU2xpZGVyQ2hhbmdlZCQuZW1pdChuLnZhbHVlKX0pKSxQdSgpLE91KDgsImJ1dHRvbiIsMjQpLE51KCJjbGljayIsKGZ1bmN0aW9uIGUoKXtyZXR1cm4gcmEodCksTHUoKS5pbWFnZUJyaWdodG5lc3NSZXNldC5lbWl0KCl9KSksd3UoOSwibWF0LWljb24iLDI1KSxQdSgpLFB1KCksUHUoKSxPdSgxMCwiZGl2IiwyNiksT3UoMTEsImRpdiIsMjcpLE1mKDEyLCJDb250cmFzdCIpLFB1KCksT3UoMTMsImRpdiIsOCksT3UoMTQsIm1hdC1zbGlkZXIiLDI4KSxOdSgiaW5wdXQiLChmdW5jdGlvbiBlKG4pe3JldHVybiByYSh0KSxMdSgpLmltYWdlQ29udHJhc3RTbGlkZXJDaGFuZ2VkJC5lbWl0KG4udmFsdWUpfSkpLFB1KCksT3UoMTUsImJ1dHRvbiIsMjkpLE51KCJjbGljayIsKGZ1bmN0aW9uIGUoKXtyZXR1cm4gcmEodCksTHUoKS5pbWFnZUNvbnRyYXN0UmVzZXQuZW1pdCgpfSkpLHd1KDE2LCJtYXQtaWNvbiIsMjUpLFB1KCksUHUoKSxQdSgpLE91KDE3LCJkaXYiLDMwKSxPdSgxOCwibWF0LWNoZWNrYm94IiwxNCksTnUoImNoYW5nZSIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIHJhKHQpLEx1KCkuaW1hZ2VTaG93QWN0dWFsU2l6ZUNoYW5nZWQuZW1pdChuLmNoZWNrZWQpfSkpLE1mKDE5LCJTaG93IGFjdHVhbCBpbWFnZSBzaXplIiksUHUoKSxQdSgpLFB1KCl9aWYoMiZ0KXtjb25zdCB0PUx1KCk7SmMoNyksdnUoIm1heCIsMmUzKSgibWluIiwwKSgic3RlcCIsMTApKCJ2YWx1ZSIsdC5pbWFnZUJyaWdodG5lc3NJbk1pbGxpKSgidGh1bWJMYWJlbCIsITApKCJkaXNwbGF5V2l0aCIsdC5mb3JtYXRNaWxsaVRvWmVyb3RoKSxKYyg3KSx2dSgibWF4Iiw1ZTMpKCJtaW4iLDApKCJzdGVwIiwxMCkoInZhbHVlIix0LmltYWdlQ29udHJhc3RJbk1pbGxpKSgidGh1bWJMYWJlbCIsITApKCJkaXNwbGF5V2l0aCIsdC5mb3JtYXRNaWxsaVRvWmVyb3RoKSxKYyg0KSx2dSgiY2hlY2tlZCIsdC5pbWFnZVNob3dBY3R1YWxTaXplKX19a2d0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxrZ3QpfSxrZ3QuybVjbXA9VW8oe3R5cGU6a2d0LHNlbGVjdG9yczpbWyJ0Yi1kcm9wZG93biJdXSxpbnB1dHM6e3ZhbHVlOiJ2YWx1ZSIsb3B0aW9uczoib3B0aW9ucyJ9LG91dHB1dHM6e3NlbGVjdGlvbkNoYW5nZToic2VsZWN0aW9uQ2hhbmdlIn0sZGVjbHM6Mix2YXJzOjIsY29uc3RzOltbMywidmFsdWUiLCJzZWxlY3Rpb25DaGFuZ2UiXSxbMywidmFsdWUiLCJkaXNhYmxlZCIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsInZhbHVlIiwiZGlzYWJsZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKE91KDAsIm1hdC1zZWxlY3QiLDApLE51KCJzZWxlY3Rpb25DaGFuZ2UiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLnNlbGVjdGlvbkNoYW5nZS5lbWl0KGUudmFsdWUpfSkpLFdtKDEsd2d0LDIsMywibWF0LW9wdGlvbiIsMSksUHUoKSksMiZlJiYodnUoInZhbHVlIixuLnZhbHVlKSxKYygxKSx2dSgibmdGb3JPZiIsbi5vcHRpb25zKSl9LGRpcmVjdGl2ZXM6W2RXLG92LFBIXSxzdHlsZXM6WycubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1iYWRnZS1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo5cHh9Lm1hdC1iYWRnZS1sYXJnZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4fS5tYXQtaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWhlYWRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAyNHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE1cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjgzKS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1oNltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC42NykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtYm9keS1zdHJvbmdbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MCAwIDEycHh9Lm1hdC1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FwdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTJweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6MzAwIDExMnB4LzExMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wNWVtO21hcmdpbjowIDAgNTZweH0ubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNTZweC81NnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMmVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNDVweC80OHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMDVlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDM0cHgvNDBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1yYWlzZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3Ryb2tlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZsYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mYWJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW1pbmktZmFiW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtYnV0dG9uLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FyZC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjBweH0ubWF0LWNhcmQtc3VidGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hlY2tib3gtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC10cmFpbGluZy1pY29uLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC1yZW1vdmUubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxOHB4fS5tYXQtdGFibGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWhlYWRlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb290ZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jYWxlbmRhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FsZW5kYXItYm9keVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYWxlbmRhci1wZXJpb2QtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWRpYWxvZy10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTI1O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTUwJTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjVlbTt3aWR0aDoxLjVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW07bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41ZW0gMDtib3JkZXItdG9wOi44NDM3NWVtIHNvbGlkIHRyYW5zcGFyZW50fS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3RvcDotMC44NDM3NWVtO3BhZGRpbmctdG9wOi44NDM3NWVtfS5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjc1JTttYXJnaW4tdG9wOi42NjY2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNzkxNjY2NjY2N2VtKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAycHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyM2VtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzUzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi41NDE2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNjY2NjY2NjY2N2VtKX1AbWVkaWEgcHJpbnR7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIyZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIxZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMmVtKSBzY2FsZSgwLjc1KX19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjI1ZW0gMCAuNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4wOTM3NWVtO21hcmdpbi10b3A6LTAuNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MWVtIDAgMWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjg0Mzc1ZW07bWFyZ2luLXRvcDotMC4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH1pbnB1dC5tYXQtaW5wdXQtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDotMC4wNjI1ZW19Lm1hdC1tZW51LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1wYWdpbmF0b3JbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXBhZ2luYXRvci1wYWdlLXNpemVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3RbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXN0ZXBwZXItdmVydGljYWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc3RlcC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0Om5vcm1hbH0ubWF0LXN0ZXAtbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRhYi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjB9Lm1hdC10b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTZweH0ubWF0LW9wdGdyb3VwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LXNpbXBsZS1zbmFja2Jhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbltfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRyZWVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbmVzdGVkLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4fS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVdOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtcmlwcGxlLm1hdC1yaXBwbGUtdW5ib3VuZGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6NTAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7dHJhbnNmb3JtOnNjYWxlKDApfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpub25lfS5jZGstdmlzdWFsbHktaGlkZGVuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7bGVmdDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmVtcHR5e2Rpc3BsYXk6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LXBhbmVbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOmF1dG87Ym94LXNpemluZzpib3JkZXItYm94O3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7bWF4LXdpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlfS5jZGstb3ZlcmxheS1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKTtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5Oi42fS5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjMyKX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTowfS5jZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO292ZXJmbG93LXk6c2Nyb2xsfUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnR7fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5ke30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxse2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCAwcyAxbXN9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06bm90KDotd2Via2l0LWF1dG9maWxsKXthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIDBzIDFtc310ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemVbX25nY29udGVudC0lQ09NUCVde3Jlc2l6ZTpub25lfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmdbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OmF1dG8gIWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW4gIWltcG9ydGFudH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nLWZpcmVmb3hbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OjAgIWltcG9ydGFudH0ubWF0LWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX1tYXQtc2VsZWN0W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MXB4IHNvbGlkICM4ZTk4YTM7Ym9yZGVyLXJhZGl1czozcHg7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6NnB4fW1hdC1zZWxlY3RbX25nY29udGVudC0lQ09NUCVdOmZvY3Vze291dGxpbmUtY29sb3I6LXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yO291dGxpbmUtc3R5bGU6YXV0b30nXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoa2d0LFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6InRiLWRyb3Bkb3duIix0ZW1wbGF0ZTonXG4gICAgPG1hdC1zZWxlY3RcbiAgICAgIFt2YWx1ZV09InZhbHVlIlxuICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9InNlbGVjdGlvbkNoYW5nZS5lbWl0KCRldmVudC52YWx1ZSkiXG4gICAgPlxuICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgKm5nRm9yPSJsZXQgb3B0aW9uIG9mIG9wdGlvbnMiXG4gICAgICAgIFt2YWx1ZV09Im9wdGlvbi52YWx1ZSJcbiAgICAgICAgW2Rpc2FibGVkXT0ib3B0aW9uLmRpc2FibGVkIlxuICAgICAgPlxuICAgICAgICB7eyBvcHRpb24uZGlzcGxheVRleHQgfX1cbiAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICA8L21hdC1zZWxlY3Q+XG4gICcsc3R5bGVVcmxzOlsiZHJvcGRvd25fY29tcG9uZW50LmNzcyJdfV19XSxudWxsLHt2YWx1ZTpbe3R5cGU6eV99XSxvcHRpb25zOlt7dHlwZTp5X31dLHNlbGVjdGlvbkNoYW5nZTpbe3R5cGU6X199XX0pO2NsYXNzIERndHtjb25zdHJ1Y3Rvcih0KXt0aGlzLmxvY2FsZT10LHRoaXMuVG9vbHRpcFNvcnREcm9wZG93bk9wdGlvbnM9W3t2YWx1ZTpsUi5ERUZBVUxULGRpc3BsYXlUZXh0OiJEZWZhdWx0In0se3ZhbHVlOmxSLkFTQ0VORElORyxkaXNwbGF5VGV4dDoiQXNjZW5kaW5nIn0se3ZhbHVlOmxSLkRFU0NFTkRJTkcsZGlzcGxheVRleHQ6IkRlc2NlbmRpbmcifSx7dmFsdWU6bFIuTkVBUkVTVCxkaXNwbGF5VGV4dDoiTmVhcmVzdCJ9XSx0aGlzLnRvb2x0aXBTb3J0Q2hhbmdlZD1uZXcgQWIsdGhpcy5pZ25vcmVPdXRsaWVyc0NoYW5nZWQ9bmV3IEFiLHRoaXMuWEF4aXNUeXBlRHJvcGRvd25PcHRpb25zPVt7dmFsdWU6Y1IuU1RFUCxkaXNwbGF5VGV4dDoiU3RlcCJ9LHt2YWx1ZTpjUi5SRUxBVElWRSxkaXNwbGF5VGV4dDoiUmVsYXRpdmUifSx7dmFsdWU6Y1IuV0FMTF9USU1FLGRpc3BsYXlUZXh0OiJXYWxsIn1dLHRoaXMueEF4aXNUeXBlQ2hhbmdlZD1uZXcgQWIsdGhpcy5IaXN0b2dyYW1Nb2RlRHJvcGRvd25PcHRpb25zPVt7dmFsdWU6VEUuT0ZGU0VULGRpc3BsYXlUZXh0OiJPZmZzZXQifSx7dmFsdWU6VEUuT1ZFUkxBWSxkaXNwbGF5VGV4dDoiT3ZlcmxheSJ9XSx0aGlzLmhpc3RvZ3JhbU1vZGVDaGFuZ2VkPW5ldyBBYix0aGlzLk1BWF9TTU9PVEhJTkdfVkFMVUU9Ljk5OSx0aGlzLk1BWF9TTU9PVEhJTkdfU0xJREVSX1ZBTFVFPS45OSx0aGlzLnNjYWxhclNtb290aGluZ0NvbnRyb2xDaGFuZ2VkJD1uZXcgQWIsdGhpcy5zY2FsYXJTbW9vdGhpbmdDaGFuZ2VkPXRoaXMuc2NhbGFyU21vb3RoaW5nQ29udHJvbENoYW5nZWQkLnBpcGUob2UoMjUwKSksdGhpcy5zY2FsYXJQYXJ0aXRpb25YVG9nZ2xlZD1uZXcgQWIsdGhpcy5pbWFnZUJyaWdodG5lc3NTbGlkZXJDaGFuZ2VkJD1uZXcgQWIsdGhpcy5pbWFnZUJyaWdodG5lc3NJbk1pbGxpQ2hhbmdlZD10aGlzLmltYWdlQnJpZ2h0bmVzc1NsaWRlckNoYW5nZWQkLnBpcGUob2UoMjUwKSksdGhpcy5pbWFnZUJyaWdodG5lc3NSZXNldD1uZXcgQWIsdGhpcy5pbWFnZUNvbnRyYXN0U2xpZGVyQ2hhbmdlZCQ9bmV3IEFiLHRoaXMuaW1hZ2VDb250cmFzdEluTWlsbGlDaGFuZ2VkPXRoaXMuaW1hZ2VDb250cmFzdFNsaWRlckNoYW5nZWQkLnBpcGUob2UoMjUwKSksdGhpcy5pbWFnZUNvbnRyYXN0UmVzZXQ9bmV3IEFiLHRoaXMuaW1hZ2VTaG93QWN0dWFsU2l6ZUNoYW5nZWQ9bmV3IEFifW9uU2NhbGFyU21vb3RoaW5nSW5wdXQodCl7Y29uc3QgZT10LnRhcmdldDtpZighZS52YWx1ZSlyZXR1cm47Y29uc3Qgbj1NYXRoLm1pbihNYXRoLm1heCgwLHBhcnNlRmxvYXQoZS52YWx1ZSkpLC45OTkpO24hPT1wYXJzZUZsb2F0KGUudmFsdWUpJiYoZS52YWx1ZT1TdHJpbmcobikpLHRoaXMuc2NhbGFyU21vb3RoaW5nQ29udHJvbENoYW5nZWQkLmVtaXQobil9Zm9ybWF0TWlsbGlUb1plcm90aCh0KXtyZXR1cm4gcU0odC8xZTMsdGhpcy5sb2NhbGV8fCJlbi1VUyIsIjEuMC0yIil9fURndC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8RGd0KShNdShCXykpfSxEZ3QuybVjbXA9VW8oe3R5cGU6RGd0LHNlbGVjdG9yczpbWyJtZXRyaWNzLWRhc2hib2FyZC1zZXR0aW5ncy1jb21wb25lbnQiXV0saW5wdXRzOntpc0ltYWdlU3VwcG9ydEVuYWJsZWQ6ImlzSW1hZ2VTdXBwb3J0RW5hYmxlZCIsdG9vbHRpcFNvcnQ6InRvb2x0aXBTb3J0IixpZ25vcmVPdXRsaWVyczoiaWdub3JlT3V0bGllcnMiLHhBeGlzVHlwZToieEF4aXNUeXBlIixoaXN0b2dyYW1Nb2RlOiJoaXN0b2dyYW1Nb2RlIixzY2FsYXJTbW9vdGhpbmc6InNjYWxhclNtb290aGluZyIsc2NhbGFyUGFydGl0aW9uWDoic2NhbGFyUGFydGl0aW9uWCIsaW1hZ2VCcmlnaHRuZXNzSW5NaWxsaToiaW1hZ2VCcmlnaHRuZXNzSW5NaWxsaSIsaW1hZ2VDb250cmFzdEluTWlsbGk6ImltYWdlQ29udHJhc3RJbk1pbGxpIixpbWFnZVNob3dBY3R1YWxTaXplOiJpbWFnZVNob3dBY3R1YWxTaXplIn0sb3V0cHV0czp7dG9vbHRpcFNvcnRDaGFuZ2VkOiJ0b29sdGlwU29ydENoYW5nZWQiLGlnbm9yZU91dGxpZXJzQ2hhbmdlZDoiaWdub3JlT3V0bGllcnNDaGFuZ2VkIix4QXhpc1R5cGVDaGFuZ2VkOiJ4QXhpc1R5cGVDaGFuZ2VkIixoaXN0b2dyYW1Nb2RlQ2hhbmdlZDoiaGlzdG9ncmFtTW9kZUNoYW5nZWQiLHNjYWxhclNtb290aGluZ0NoYW5nZWQ6InNjYWxhclNtb290aGluZ0NoYW5nZWQiLHNjYWxhclBhcnRpdGlvblhUb2dnbGVkOiJzY2FsYXJQYXJ0aXRpb25YVG9nZ2xlZCIsaW1hZ2VCcmlnaHRuZXNzSW5NaWxsaUNoYW5nZWQ6ImltYWdlQnJpZ2h0bmVzc0luTWlsbGlDaGFuZ2VkIixpbWFnZUJyaWdodG5lc3NSZXNldDoiaW1hZ2VCcmlnaHRuZXNzUmVzZXQiLGltYWdlQ29udHJhc3RJbk1pbGxpQ2hhbmdlZDoiaW1hZ2VDb250cmFzdEluTWlsbGlDaGFuZ2VkIixpbWFnZUNvbnRyYXN0UmVzZXQ6ImltYWdlQ29udHJhc3RSZXNldCIsaW1hZ2VTaG93QWN0dWFsU2l6ZUNoYW5nZWQ6ImltYWdlU2hvd0FjdHVhbFNpemVDaGFuZ2VkIn0sZGVjbHM6MzUsdmFyczoxNixjb25zdHM6ZnVuY3Rpb24oKXtsZXQgdCxlO3JldHVybiB0PSJ1bmRlZmluZWQiIT10eXBlb2YgbmdJMThuQ2xvc3VyZU1vZGUmJm5nSTE4bkNsb3N1cmVNb2RlP2dvb2cuZ2V0TXNnKCJSZXNldCBicmlnaHRuZXNzIik6JGxvY2FsaXplYDpBIGJ1dHRvbiB0byByZXNldCB0aGUgaW1hZ2UgYnJpZ2h0bmVzcyBzZXR0aW5n4pCfYzQ4MmIzYTQ3ZWEwOTc1ZmE4YmUwMWFmYjNmYmVjOWI3NjYyOGJkN+KQnzExODkxNjE4NTcyNDAzNzgzOTU6UmVzZXQgYnJpZ2h0bmVzc2AsZT0idW5kZWZpbmVkIiE9dHlwZW9mIG5nSTE4bkNsb3N1cmVNb2RlJiZuZ0kxOG5DbG9zdXJlTW9kZT9nb29nLmdldE1zZygiUmVzZXQgY29udHJhc3QiKTokbG9jYWxpemVgOkEgYnV0dG9uIHRvIHJlc2V0IHRoZSBpbWFnZSBjb250cmFzdCBzZXR0aW5n4pCfZWQ3MTJhOGI5MjcwNDFiZTE1MjUyYjI5ZWI1MjFlYmIxMzc0YmFkOOKQnzUzNzA3MDMzNDI5MjM2MTE5NTU6UmVzZXQgY29udHJhc3RgLFtbMSwiZ2VuZXJhbCJdLFsxLCJzZWN0aW9uLXRpdGxlIl0sWzEsImNvbnRyb2wtcm93IiwieC1heGlzLXR5cGUiXSxbImlkIiwieC1heGlzLXR5cGUtbGFiZWwiLDEsImNvbnRyb2wtbmFtZSJdLFszLCJ2YWx1ZSIsIm9wdGlvbnMiLCJzZWxlY3Rpb25DaGFuZ2UiXSxbMSwic2NhbGFycyJdLFsxLCJjb250cm9sLXJvdyIsInNjYWxhcnMtc21vb3RoaW5nIl0sWyJpZCIsInNjYWxhcnMtc21vb3RoaW5nLWxhYmVsIiwxLCJjb250cm9sLW5hbWUiXSxbMSwic2xpZGVyLXJvdyJdLFsiYXJpYS1sYWJlbGxlZGJ5Iiwic2NhbGFycy1zbW9vdGhpbmctbGFiZWwiLCJjb2xvciIsInByaW1hcnkiLDMsIm1heCIsIm1pbiIsInN0ZXAiLCJ2YWx1ZSIsInRodW1iTGFiZWwiLCJpbnB1dCJdLFsiYXJpYS1sYWJlbGxlZGJ5Iiwic2NhbGFycy1zbW9vdGhpbmctbGFiZWwiLCJ0eXBlIiwibnVtYmVyIiwibWluIiwiMCIsInN0ZXAiLCIwLjAwMSIsMSwic2xpZGVyLWlucHV0IiwzLCJtYXgiLCJ2YWx1ZSIsImlucHV0Il0sWzEsImNvbnRyb2wtcm93IiwidG9vbHRpcC1zb3J0Il0sWzEsImNvbnRyb2wtbmFtZSJdLFsxLCJjb250cm9sLXJvdyIsInNjYWxhcnMtaWdub3JlLW91dGxpZXJzIl0sWzMsImNoZWNrZWQiLCJjaGFuZ2UiXSxbMSwiY29udHJvbC1yb3ciLCJzY2FsYXJzLXBhcnRpdGlvbi14Il0sWyJzdmdJY29uIiwiaGVscF9vdXRsaW5lXzI0cHgiLCJ0aXRsZSIsIk5vbi1tb25vdG9uaWMgc3RlcHMgY2FuIG9jY3VyIHdoZW4gcmV1c2luZyBhIGxvZ2RpciB3aXRoIG11bHRpcGxlIHN1bW1hcnkgd3JpdGVycyBhbmQgb3ZlcmxhcHBpbmcgc3RlcHMuIExpbmUgY2hhcnRzLCB3aXRob3V0IHRoaXMgb3B0aW9uIGVuYWJsZWQsIGNhbiBhcHBlYXIgemlnIHphZ2dlZC4gVGhpcyBpcyBjb21tb24gd2hlbiByZXN0YXJ0aW5nIGZyb20gYSBjaGVja3BvaW50LlxuXG5XaGVuIGVuYWJsZWQsIGEgbm9uLW1vbm90b25pYyB0aW1lIHNlcmllcyBjb21wb3NlZCBvZiBOIG1vbm90b25pYyBwaWVjZXMgd2lsbCBiZSBzaG93biBhcyBOIG1vbm90b25pYyBsaW5lcy4iLDEsImluZm8iXSxbMSwiSGlzdG9ncmFtcyJdLFsxLCJjb250cm9sLXJvdyIsImhpc3RvZ3JhbS1tb2RlIl0sWyJjbGFzcyIsImltYWdlIiw0LCJuZ0lmIl0sWzEsImltYWdlIl0sWzEsImNvbnRyb2wtcm93IiwiaW1hZ2UtYnJpZ2h0bmVzcyJdLFsiaWQiLCJpbWFnZS1icmlnaHRuZXNzLWxhYmVsIiwxLCJjb250cm9sLW5hbWUiXSxbImFyaWEtbGFiZWxsZWRieSIsImltYWdlLWJyaWdodG5lc3MtbGFiZWwiLCJjb2xvciIsInByaW1hcnkiLDMsIm1heCIsIm1pbiIsInN0ZXAiLCJ2YWx1ZSIsInRodW1iTGFiZWwiLCJkaXNwbGF5V2l0aCIsImlucHV0Il0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIix0LCJ0aXRsZSIsIlJlc2V0IGJyaWdodG5lc3MiLDEsInJlc2V0LWJ1dHRvbiIsMywiY2xpY2siXSxbInN2Z0ljb24iLCJzZXR0aW5nc19iYWNrdXBfcmVzdG9yZV8yNHB4Il0sWzEsImNvbnRyb2wtcm93IiwiaW1hZ2UtY29udHJhc3QiXSxbImlkIiwiaW1hZ2UtY29uc3RyYXN0LWxhYmVsIiwxLCJjb250cm9sLW5hbWUiXSxbImFyaWEtbGFiZWxsZWRieSIsImltYWdlLWNvbnN0cmFzdC1sYWJlbCIsImNvbG9yIiwicHJpbWFyeSIsMywibWF4IiwibWluIiwic3RlcCIsInZhbHVlIiwidGh1bWJMYWJlbCIsImRpc3BsYXlXaXRoIiwiaW5wdXQiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLGUsInRpdGxlIiwiUmVzZXQgY29udHJhc3QiLDEsInJlc2V0LWJ1dHRvbiIsMywiY2xpY2siXSxbMSwiY29udHJvbC1yb3ciLCJpbWFnZS1zaG93LWFjdHVhbC1zaXplIl1dfSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoT3UoMCwic2VjdGlvbiIsMCksT3UoMSwiaDMiLDEpLE1mKDIsIkdlbmVyYWwiKSxQdSgpLE91KDMsImRpdiIsMiksT3UoNCwiZGl2IiwzKSxNZig1LCJIb3Jpem9udGFsIEF4aXMiKSxQdSgpLE91KDYsInRiLWRyb3Bkb3duIiw0KSxOdSgic2VsZWN0aW9uQ2hhbmdlIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi54QXhpc1R5cGVDaGFuZ2VkLmVtaXQoZSl9KSksUHUoKSxQdSgpLFB1KCksT3UoNywic2VjdGlvbiIsNSksT3UoOCwiaDMiLDEpLE1mKDksIlNjYWxhcnMiKSxQdSgpLE91KDEwLCJkaXYiLDYpLE91KDExLCJkaXYiLDcpLE1mKDEyLCJTbW9vdGhpbmciKSxQdSgpLE91KDEzLCJkaXYiLDgpLE91KDE0LCJtYXQtc2xpZGVyIiw5KSxOdSgiaW5wdXQiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLnNjYWxhclNtb290aGluZ0NvbnRyb2xDaGFuZ2VkJC5lbWl0KGUudmFsdWUpfSkpLFB1KCksT3UoMTUsImlucHV0IiwxMCksTnUoImlucHV0IiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vblNjYWxhclNtb290aGluZ0lucHV0KGUpfSkpLFB1KCksUHUoKSxQdSgpLE91KDE2LCJkaXYiLDExKSxPdSgxNywiZGl2IiwxMiksTWYoMTgsIlRvb2x0aXAgc29ydGluZyBtZXRob2QiKSxQdSgpLE91KDE5LCJ0Yi1kcm9wZG93biIsNCksTnUoInNlbGVjdGlvbkNoYW5nZSIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4udG9vbHRpcFNvcnRDaGFuZ2VkLmVtaXQoZSl9KSksUHUoKSxQdSgpLE91KDIwLCJkaXYiLDEzKSxPdSgyMSwibWF0LWNoZWNrYm94IiwxNCksTnUoImNoYW5nZSIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4uaWdub3JlT3V0bGllcnNDaGFuZ2VkLmVtaXQoZS5jaGVja2VkKX0pKSxNZigyMiwiSWdub3JlIG91dGxpZXJzIGluIGNoYXJ0IHNjYWxpbmciKSxQdSgpLFB1KCksT3UoMjMsImRpdiIsMTUpLE91KDI0LCJtYXQtY2hlY2tib3giLDE0KSxOdSgiY2hhbmdlIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLnNjYWxhclBhcnRpdGlvblhUb2dnbGVkLmVtaXQoKX0pKSxNZigyNSwiUGFydGl0aW9uIG5vbi1tb25vdG9uaWMgWCBheGlzIiksUHUoKSx3dSgyNiwibWF0LWljb24iLDE2KSxQdSgpLFB1KCksT3UoMjcsInNlY3Rpb24iLDE3KSxPdSgyOCwiaDMiLDEpLE1mKDI5LCJIaXN0b2dyYW1zIiksUHUoKSxPdSgzMCwiZGl2IiwxOCksT3UoMzEsImRpdiIsMTIpLE1mKDMyLCJNb2RlIiksUHUoKSxPdSgzMywidGItZHJvcGRvd24iLDQpLE51KCJzZWxlY3Rpb25DaGFuZ2UiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLmhpc3RvZ3JhbU1vZGVDaGFuZ2VkLmVtaXQoZSl9KSksUHUoKSxQdSgpLFB1KCksV20oMzQsU2d0LDIwLDEzLCJzZWN0aW9uIiwxOSkpLDImZSYmKEpjKDYpLHZ1KCJ2YWx1ZSIsbi54QXhpc1R5cGUpKCJvcHRpb25zIixuLlhBeGlzVHlwZURyb3Bkb3duT3B0aW9ucyksSmMoOCksdnUoIm1heCIsbi5NQVhfU01PT1RISU5HX1NMSURFUl9WQUxVRSkoIm1pbiIsMCkoInN0ZXAiLC4wMSkoInZhbHVlIixuLnNjYWxhclNtb290aGluZykoInRodW1iTGFiZWwiLCEwKSxKYygxKSx2dSgibWF4IixuLk1BWF9TTU9PVEhJTkdfVkFMVUUpKCJ2YWx1ZSIsbi5zY2FsYXJTbW9vdGhpbmcpLEpjKDQpLHZ1KCJ2YWx1ZSIsbi50b29sdGlwU29ydCkoIm9wdGlvbnMiLG4uVG9vbHRpcFNvcnREcm9wZG93bk9wdGlvbnMpLEpjKDIpLHZ1KCJjaGVja2VkIixuLmlnbm9yZU91dGxpZXJzKSxKYygzKSx2dSgiY2hlY2tlZCIsbi5zY2FsYXJQYXJ0aXRpb25YKSxKYyg5KSx2dSgidmFsdWUiLG4uaGlzdG9ncmFtTW9kZSkoIm9wdGlvbnMiLG4uSGlzdG9ncmFtTW9kZURyb3Bkb3duT3B0aW9ucyksSmMoMSksdnUoIm5nSWYiLG4uaXNJbWFnZVN1cHBvcnRFbmFibGVkKSl9LGRpcmVjdGl2ZXM6W2tndCx2WCx1WSxjRyxhdixOSF0sc3R5bGVzOlsnLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEycHg7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtYmFkZ2Utc21hbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6OXB4fS5tYXQtYmFkZ2UtbGFyZ2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweH0ubWF0LWgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1oZWFkbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMjRweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNnB4LzI4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNXB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC44MykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtaDZbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuNjcpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWJvZHktc3Ryb25nW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjAgMCAxMnB4fS5tYXQtc21hbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDEycHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjMwMCAxMTJweC8xMTJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDVlbTttYXJnaW46MCAwIDU2cHh9Lm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDU2cHgvNTZweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDJlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDQ1cHgvNDhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDA1ZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAzNHB4LzQwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDY0cHh9Lm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcmFpc2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0cm9rZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mbGF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmFiW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1taW5pLWZhYltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWJ1dHRvbi10b2dnbGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhcmQtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjIwcHh9Lm1hdC1jYXJkLXN1YnRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2hlY2tib3hbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNoZWNrYm94LWxheW91dFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoZWNrYm94LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoyNHB4fS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtdHJhaWxpbmctaWNvbi5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtcmVtb3ZlLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MThweH0ubWF0LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1oZWFkZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2VsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9vdGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2FsZW5kYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhbGVuZGFyLWJvZHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxM3B4fS5tYXQtY2FsZW5kYXItYm9keS1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FsZW5kYXItcGVyaW9kLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo0MDB9Lm1hdC1kaWFsb2ctdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjEyNTtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE1MCU7bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS41ZW07d2lkdGg6MS41ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNWVtIDA7Ym9yZGVyLXRvcDouODQzNzVlbSBzb2xpZCB0cmFuc3BhcmVudH0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6LTAuODQzNzVlbTtwYWRkaW5nLXRvcDouODQzNzVlbX0ubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo3NSU7bWFyZ2luLXRvcDouNjY2NjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjc5MTY2NjY2NjdlbSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNDM3NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMnB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjNlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM1MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjI4MTI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDouNTQxNjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjY2NjY2NjY2NjdlbSl9QG1lZGlhIHByaW50ey5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMmVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMWVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTJlbSkgc2NhbGUoMC43NSl9fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi4yNWVtIDAgLjc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMDkzNzVlbTttYXJnaW4tdG9wOi0wLjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjFlbSAwIDFlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS44NDM3NWVtO21hcmdpbi10b3A6LTAuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9aW5wdXQubWF0LWlucHV0LWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LTAuMDYyNWVtfS5tYXQtbWVudS1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtcGFnaW5hdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweH0ubWF0LXJhZGlvLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW19Lm1hdC1zbGlkZS10b2dnbGUtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdGVwcGVyLWhvcml6b250YWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXN0ZXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXN0ZXAtc3ViLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDpub3JtYWx9Lm1hdC1zdGVwLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LXN0ZXAtbGFiZWwtc2VsZWN0ZWRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRhYi1ncm91cFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdGFiLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10YWItbGlua1tfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowfS5tYXQtdG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB4O3BhZGRpbmctdG9wOjZweDtwYWRkaW5nLWJvdHRvbTo2cHh9Lm1hdC10b29sdGlwLWhhbmRzZXRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9Lm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE2cHh9Lm1hdC1vcHRncm91cC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1zaW1wbGUtc25hY2tiYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweH0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb25bX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjE7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo1MDB9Lm1hdC10cmVlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW5lc3RlZC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjQwMDtmb250LXNpemU6MTRweH0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmVtcHR5KXt0cmFuc2Zvcm06dHJhbnNsYXRlWigwKX0ubWF0LXJpcHBsZS5tYXQtcmlwcGxlLXVuYm91bmRlZFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItcmFkaXVzOjUwJTtwb2ludGVyLWV2ZW50czpub25lO3RyYW5zaXRpb246b3BhY2l0eSx0cmFuc2Zvcm0gMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpO3RyYW5zZm9ybTpzY2FsZSgwKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6bm9uZX0uY2RrLXZpc3VhbGx5LWhpZGRlbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjA7Y2xpcDpyZWN0KDAgMCAwIDApO2hlaWdodDoxcHg7bWFyZ2luOi0xcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwO291dGxpbmU6MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb2ludGVyLWV2ZW50czpub25lO3RvcDowO2xlZnQ6MDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTplbXB0eXtkaXNwbGF5Om5vbmV9LmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1wYW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czphdXRvO2JveC1zaXppbmc6Ym9yZGVyLWJveDt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O21heC13aWR0aDoxMDAlO21heC1oZWlnaHQ6MTAwJX0uY2RrLW92ZXJsYXktYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO3otaW5kZXg6MTAwMDtwb2ludGVyLWV2ZW50czphdXRvOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDt0cmFuc2l0aW9uOm9wYWNpdHkgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSk7b3BhY2l0eTowfS5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjF9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAuY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTouNn0uY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4zMil9LmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MH0uY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWluLXdpZHRoOjFweDttaW4taGVpZ2h0OjFweH0uY2RrLWdsb2JhbC1zY3JvbGxibG9ja1tfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7d2lkdGg6MTAwJTtvdmVyZmxvdy15OnNjcm9sbH1Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0e31Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZHt9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbHthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQgMHMgMW1zfS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOm5vdCg6LXdlYmtpdC1hdXRvZmlsbCl7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCAwcyAxbXN9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplW19uZ2NvbnRlbnQtJUNPTVAlXXtyZXNpemU6bm9uZX10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDphdXRvICFpbXBvcnRhbnQ7b3ZlcmZsb3c6aGlkZGVuICFpbXBvcnRhbnR9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZy1maXJlZm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDowICFpbXBvcnRhbnR9Lm1hdC1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtbWRjLWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9W19uZ2hvc3QtJUNPTVAlXXtjb2xvcjojNjE2MTYxO2ZvbnQtc2l6ZToxMnB4fWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1zZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmViO3BhZGRpbmc6MTZweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICBzZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgc2VjdGlvbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX0uc2VjdGlvbi10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzIxMjEyMTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Zm9udC13ZWlnaHQ6NTAwO2ZvbnQtc2l6ZToxM3B4O2xpbmUtaGVpZ2h0Om5vcm1hbDttYXJnaW46MCAwIDEycHggMH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuc2VjdGlvbi10aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5zZWN0aW9uLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojZmZmfXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVdICAgLmNvbnRyb2wtcm93W19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhc3QtY2hpbGQpe21hcmdpbi1ib3R0b206MTJweH0uY29udHJvbC1uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tYm90dG9tOjhweH0uc2xpZGVyLXJvd1tfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6MjhweH0uc2xpZGVyLXJvd1tfbmdjb250ZW50LSVDT01QJV0gICAucmVzZXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tbGVmdDo2cHh9LnNsaWRlci1yb3dbX25nY29udGVudC0lQ09NUCVdICAgLnNsaWRlci1pbnB1dFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjppbmhlcml0O2JvcmRlcjoxcHggc29saWQgIzhlOThhMztib3JkZXItcmFkaXVzOjJweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6aW5oZXJpdDtoZWlnaHQ6MTAwJTttYXJnaW4tbGVmdDoxMnB4O3BhZGRpbmc6MCA0cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnNsaWRlci1yb3dbX25nY29udGVudC0lQ09NUCVdICAgLnNsaWRlci1pbnB1dFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5zbGlkZXItcm93W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zbGlkZXItaW5wdXRbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1jb2xvcjojNDI1MDY2fS5zY2FsYXJzLXNtb290aGluZ1tfbmdjb250ZW50LSVDT01QJV0gICAuc2xpZGVyLWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4Om5vbmU7d2lkdGg6NWVtfS5zY2FsYXJzLXBhcnRpdGlvbi14W19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4fS5zY2FsYXJzLXBhcnRpdGlvbi14W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5pbmZvW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTVweDttYXJnaW4tbGVmdDo1cHg7d2lkdGg6MTVweH1tYXQtc2xpZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjE7bWFyZ2luLWxlZnQ6LThweDttYXJnaW4tcmlnaHQ6LThweH10Yi1kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpibG9ja30nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoRGd0LFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6Im1ldHJpY3MtZGFzaGJvYXJkLXNldHRpbmdzLWNvbXBvbmVudCIsdGVtcGxhdGVVcmw6InNldHRpbmdzX3ZpZXdfY29tcG9uZW50Lm5nLmh0bWwiLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2gsc3R5bGVVcmxzOlsic2V0dGluZ3Nfdmlld19jb21wb25lbnQuY3NzIl19XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbQl9dfV19XX0pLHtpc0ltYWdlU3VwcG9ydEVuYWJsZWQ6W3t0eXBlOnlffV0sdG9vbHRpcFNvcnQ6W3t0eXBlOnlffV0sdG9vbHRpcFNvcnRDaGFuZ2VkOlt7dHlwZTpfX31dLGlnbm9yZU91dGxpZXJzOlt7dHlwZTp5X31dLGlnbm9yZU91dGxpZXJzQ2hhbmdlZDpbe3R5cGU6X199XSx4QXhpc1R5cGU6W3t0eXBlOnlffV0seEF4aXNUeXBlQ2hhbmdlZDpbe3R5cGU6X199XSxoaXN0b2dyYW1Nb2RlOlt7dHlwZTp5X31dLGhpc3RvZ3JhbU1vZGVDaGFuZ2VkOlt7dHlwZTpfX31dLHNjYWxhclNtb290aGluZzpbe3R5cGU6eV99XSxzY2FsYXJTbW9vdGhpbmdDaGFuZ2VkOlt7dHlwZTpfX31dLHNjYWxhclBhcnRpdGlvblg6W3t0eXBlOnlffV0sc2NhbGFyUGFydGl0aW9uWFRvZ2dsZWQ6W3t0eXBlOl9ffV0saW1hZ2VCcmlnaHRuZXNzSW5NaWxsaTpbe3R5cGU6eV99XSxpbWFnZUJyaWdodG5lc3NJbk1pbGxpQ2hhbmdlZDpbe3R5cGU6X199XSxpbWFnZUJyaWdodG5lc3NSZXNldDpbe3R5cGU6X199XSxpbWFnZUNvbnRyYXN0SW5NaWxsaTpbe3R5cGU6eV99XSxpbWFnZUNvbnRyYXN0SW5NaWxsaUNoYW5nZWQ6W3t0eXBlOl9ffV0saW1hZ2VDb250cmFzdFJlc2V0Olt7dHlwZTpfX31dLGltYWdlU2hvd0FjdHVhbFNpemU6W3t0eXBlOnlffV0saW1hZ2VTaG93QWN0dWFsU2l6ZUNoYW5nZWQ6W3t0eXBlOl9ffV19KTtjbGFzcyBFZ3R7Y29uc3RydWN0b3IodCl7dGhpcy5zdG9yZT10LHRoaXMuaXNJbWFnZVN1cHBvcnRFbmFibGVkJD10aGlzLnN0b3JlLnNlbGVjdChiRSkucGlwZShHdChCb29sZWFuKSxOZSgxKSxrbih0aGlzLnN0b3JlLnNlbGVjdChrRSkpLGh0KCgoWyx0XSk9PnQpKSksdGhpcy50b29sdGlwU29ydCQ9dGhpcy5zdG9yZS5zZWxlY3QoQlQpLHRoaXMuaWdub3JlT3V0bGllcnMkPXRoaXMuc3RvcmUuc2VsZWN0KFZUKSx0aGlzLnhBeGlzVHlwZSQ9dGhpcy5zdG9yZS5zZWxlY3QoalQpLHRoaXMuaGlzdG9ncmFtTW9kZSQ9dGhpcy5zdG9yZS5zZWxlY3QoVVQpLHRoaXMuc2NhbGFyU21vb3RoaW5nJD10aGlzLnN0b3JlLnNlbGVjdChXVCksdGhpcy5zY2FsYXJQYXJ0aXRpb25YJD10aGlzLnN0b3JlLnNlbGVjdChHVCksdGhpcy5pbWFnZUJyaWdodG5lc3NJbk1pbGxpJD10aGlzLnN0b3JlLnNlbGVjdChZVCksdGhpcy5pbWFnZUNvbnRyYXN0SW5NaWxsaSQ9dGhpcy5zdG9yZS5zZWxlY3QocVQpLHRoaXMuaW1hZ2VTaG93QWN0dWFsU2l6ZSQ9dGhpcy5zdG9yZS5zZWxlY3QoWlQpfW9uVG9vbHRpcFNvcnRDaGFuZ2VkKHQpe3RoaXMuc3RvcmUuZGlzcGF0Y2goV0ooe3NvcnQ6dH0pKX1vbklnbm9yZU91dGxpZXJzQ2hhbmdlZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goR0ooKSl9b25YQXhpc1R5cGVDaGFuZ2VkKHQpe3RoaXMuc3RvcmUuZGlzcGF0Y2goWUooe3hBeGlzVHlwZTp0fSkpfW9uSGlzdG9ncmFtTW9kZUNoYW5nZWQodCl7dGhpcy5zdG9yZS5kaXNwYXRjaCh0USh7aGlzdG9ncmFtTW9kZTp0fSkpfW9uU2NhbGFyU21vb3RoaW5nQ2hhbmdlZCh0KXt0aGlzLnN0b3JlLmRpc3BhdGNoKHFKKHtzbW9vdGhpbmc6dH0pKX1vblNjYWxhclBhcnRpdGlvblhUb2dnbGVkKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChaSigpKX1vbkltYWdlQnJpZ2h0bmVzc0luTWlsbGlDaGFuZ2VkKHQpe3RoaXMuc3RvcmUuZGlzcGF0Y2goWEooe2JyaWdodG5lc3NJbk1pbGxpOnR9KSl9b25JbWFnZUJyaWdodG5lc3NSZXNldCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goSkooKSl9b25JbWFnZUNvbnRyYXN0UmVzZXQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKFFKKCkpfW9uSW1hZ2VDb250cmFzdEluTWlsbGlDaGFuZ2VkKHQpe3RoaXMuc3RvcmUuZGlzcGF0Y2goS0ooe2NvbnRyYXN0SW5NaWxsaTp0fSkpfW9uSW1hZ2VTaG93QWN0dWFsU2l6ZUNoYW5nZWQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKCRKKCkpfX1FZ3QuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEVndCkoTXUoRWspKX0sRWd0Lsm1Y21wPVVvKHt0eXBlOkVndCxzZWxlY3RvcnM6W1sibWV0cmljcy1kYXNoYm9hcmQtc2V0dGluZ3MiXV0sZGVjbHM6MTEsdmFyczozMCxjb25zdHM6W1szLCJpc0ltYWdlU3VwcG9ydEVuYWJsZWQiLCJ0b29sdGlwU29ydCIsImlnbm9yZU91dGxpZXJzIiwieEF4aXNUeXBlIiwiaGlzdG9ncmFtTW9kZSIsInNjYWxhclNtb290aGluZyIsInNjYWxhclBhcnRpdGlvblgiLCJpbWFnZUJyaWdodG5lc3NJbk1pbGxpIiwiaW1hZ2VDb250cmFzdEluTWlsbGkiLCJpbWFnZVNob3dBY3R1YWxTaXplIiwidG9vbHRpcFNvcnRDaGFuZ2VkIiwiaWdub3JlT3V0bGllcnNDaGFuZ2VkIiwieEF4aXNUeXBlQ2hhbmdlZCIsImhpc3RvZ3JhbU1vZGVDaGFuZ2VkIiwic2NhbGFyU21vb3RoaW5nQ2hhbmdlZCIsInNjYWxhclBhcnRpdGlvblhUb2dnbGVkIiwiaW1hZ2VCcmlnaHRuZXNzSW5NaWxsaUNoYW5nZWQiLCJpbWFnZUJyaWdodG5lc3NSZXNldCIsImltYWdlQ29udHJhc3RJbk1pbGxpQ2hhbmdlZCIsImltYWdlQ29udHJhc3RSZXNldCIsImltYWdlU2hvd0FjdHVhbFNpemVDaGFuZ2VkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihPdSgwLCJtZXRyaWNzLWRhc2hib2FyZC1zZXR0aW5ncy1jb21wb25lbnQiLDApLE51KCJ0b29sdGlwU29ydENoYW5nZWQiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLm9uVG9vbHRpcFNvcnRDaGFuZ2VkKGUpfSkpKCJpZ25vcmVPdXRsaWVyc0NoYW5nZWQiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub25JZ25vcmVPdXRsaWVyc0NoYW5nZWQoKX0pKSgieEF4aXNUeXBlQ2hhbmdlZCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25YQXhpc1R5cGVDaGFuZ2VkKGUpfSkpKCJoaXN0b2dyYW1Nb2RlQ2hhbmdlZCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25IaXN0b2dyYW1Nb2RlQ2hhbmdlZChlKX0pKSgic2NhbGFyU21vb3RoaW5nQ2hhbmdlZCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25TY2FsYXJTbW9vdGhpbmdDaGFuZ2VkKGUpfSkpKCJzY2FsYXJQYXJ0aXRpb25YVG9nZ2xlZCIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vblNjYWxhclBhcnRpdGlvblhUb2dnbGVkKCl9KSkoImltYWdlQnJpZ2h0bmVzc0luTWlsbGlDaGFuZ2VkIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vbkltYWdlQnJpZ2h0bmVzc0luTWlsbGlDaGFuZ2VkKGUpfSkpKCJpbWFnZUJyaWdodG5lc3NSZXNldCIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vbkltYWdlQnJpZ2h0bmVzc1Jlc2V0KCl9KSkoImltYWdlQ29udHJhc3RJbk1pbGxpQ2hhbmdlZCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25JbWFnZUNvbnRyYXN0SW5NaWxsaUNoYW5nZWQoZSl9KSkoImltYWdlQ29udHJhc3RSZXNldCIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vbkltYWdlQ29udHJhc3RSZXNldCgpfSkpKCJpbWFnZVNob3dBY3R1YWxTaXplQ2hhbmdlZCIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vbkltYWdlU2hvd0FjdHVhbFNpemVDaGFuZ2VkKCl9KSksT2IoMSwiYXN5bmMiKSxPYigyLCJhc3luYyIpLE9iKDMsImFzeW5jIiksT2IoNCwiYXN5bmMiKSxPYig1LCJhc3luYyIpLE9iKDYsImFzeW5jIiksT2IoNywiYXN5bmMiKSxPYig4LCJhc3luYyIpLE9iKDksImFzeW5jIiksT2IoMTAsImFzeW5jIiksUHUoKSksMiZlJiZ2dSgiaXNJbWFnZVN1cHBvcnRFbmFibGVkIixQYigxLDEwLG4uaXNJbWFnZVN1cHBvcnRFbmFibGVkJCkpKCJ0b29sdGlwU29ydCIsUGIoMiwxMixuLnRvb2x0aXBTb3J0JCkpKCJpZ25vcmVPdXRsaWVycyIsUGIoMywxNCxuLmlnbm9yZU91dGxpZXJzJCkpKCJ4QXhpc1R5cGUiLFBiKDQsMTYsbi54QXhpc1R5cGUkKSkoImhpc3RvZ3JhbU1vZGUiLFBiKDUsMTgsbi5oaXN0b2dyYW1Nb2RlJCkpKCJzY2FsYXJTbW9vdGhpbmciLFBiKDYsMjAsbi5zY2FsYXJTbW9vdGhpbmckKSkoInNjYWxhclBhcnRpdGlvblgiLFBiKDcsMjIsbi5zY2FsYXJQYXJ0aXRpb25YJCkpKCJpbWFnZUJyaWdodG5lc3NJbk1pbGxpIixQYig4LDI0LG4uaW1hZ2VCcmlnaHRuZXNzSW5NaWxsaSQpKSgiaW1hZ2VDb250cmFzdEluTWlsbGkiLFBiKDksMjYsbi5pbWFnZUNvbnRyYXN0SW5NaWxsaSQpKSgiaW1hZ2VTaG93QWN0dWFsU2l6ZSIsUGIoMTAsMjgsbi5pbWFnZVNob3dBY3R1YWxTaXplJCkpfSxkaXJlY3RpdmVzOltEZ3RdLHBpcGVzOltNdl0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihFZ3QsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoibWV0cmljcy1kYXNoYm9hcmQtc2V0dGluZ3MiLHRlbXBsYXRlOidcbiAgICA8bWV0cmljcy1kYXNoYm9hcmQtc2V0dGluZ3MtY29tcG9uZW50XG4gICAgICBbaXNJbWFnZVN1cHBvcnRFbmFibGVkXT0iaXNJbWFnZVN1cHBvcnRFbmFibGVkJCB8IGFzeW5jIlxuICAgICAgW3Rvb2x0aXBTb3J0XT0idG9vbHRpcFNvcnQkIHwgYXN5bmMiXG4gICAgICAodG9vbHRpcFNvcnRDaGFuZ2VkKT0ib25Ub29sdGlwU29ydENoYW5nZWQoJGV2ZW50KSJcbiAgICAgIFtpZ25vcmVPdXRsaWVyc109Imlnbm9yZU91dGxpZXJzJCB8IGFzeW5jIlxuICAgICAgKGlnbm9yZU91dGxpZXJzQ2hhbmdlZCk9Im9uSWdub3JlT3V0bGllcnNDaGFuZ2VkKCkiXG4gICAgICBbeEF4aXNUeXBlXT0ieEF4aXNUeXBlJCB8IGFzeW5jIlxuICAgICAgKHhBeGlzVHlwZUNoYW5nZWQpPSJvblhBeGlzVHlwZUNoYW5nZWQoJGV2ZW50KSJcbiAgICAgIFtoaXN0b2dyYW1Nb2RlXT0iaGlzdG9ncmFtTW9kZSQgfCBhc3luYyJcbiAgICAgIChoaXN0b2dyYW1Nb2RlQ2hhbmdlZCk9Im9uSGlzdG9ncmFtTW9kZUNoYW5nZWQoJGV2ZW50KSJcbiAgICAgIFtzY2FsYXJTbW9vdGhpbmddPSJzY2FsYXJTbW9vdGhpbmckIHwgYXN5bmMiXG4gICAgICAoc2NhbGFyU21vb3RoaW5nQ2hhbmdlZCk9Im9uU2NhbGFyU21vb3RoaW5nQ2hhbmdlZCgkZXZlbnQpIlxuICAgICAgW3NjYWxhclBhcnRpdGlvblhdPSJzY2FsYXJQYXJ0aXRpb25YJCB8IGFzeW5jIlxuICAgICAgKHNjYWxhclBhcnRpdGlvblhUb2dnbGVkKT0ib25TY2FsYXJQYXJ0aXRpb25YVG9nZ2xlZCgpIlxuICAgICAgW2ltYWdlQnJpZ2h0bmVzc0luTWlsbGldPSJpbWFnZUJyaWdodG5lc3NJbk1pbGxpJCB8IGFzeW5jIlxuICAgICAgKGltYWdlQnJpZ2h0bmVzc0luTWlsbGlDaGFuZ2VkKT0ib25JbWFnZUJyaWdodG5lc3NJbk1pbGxpQ2hhbmdlZCgkZXZlbnQpIlxuICAgICAgKGltYWdlQnJpZ2h0bmVzc1Jlc2V0KT0ib25JbWFnZUJyaWdodG5lc3NSZXNldCgpIlxuICAgICAgW2ltYWdlQ29udHJhc3RJbk1pbGxpXT0iaW1hZ2VDb250cmFzdEluTWlsbGkkIHwgYXN5bmMiXG4gICAgICAoaW1hZ2VDb250cmFzdEluTWlsbGlDaGFuZ2VkKT0ib25JbWFnZUNvbnRyYXN0SW5NaWxsaUNoYW5nZWQoJGV2ZW50KSJcbiAgICAgIChpbWFnZUNvbnRyYXN0UmVzZXQpPSJvbkltYWdlQ29udHJhc3RSZXNldCgpIlxuICAgICAgW2ltYWdlU2hvd0FjdHVhbFNpemVdPSJpbWFnZVNob3dBY3R1YWxTaXplJCB8IGFzeW5jIlxuICAgICAgKGltYWdlU2hvd0FjdHVhbFNpemVDaGFuZ2VkKT0ib25JbWFnZVNob3dBY3R1YWxTaXplQ2hhbmdlZCgpIlxuICAgID5cbiAgICA8L21ldHJpY3MtZGFzaGJvYXJkLXNldHRpbmdzLWNvbXBvbmVudD5cbiAgJyxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6RWt9XX0pLG51bGwpO2NsYXNzIEFndHt9ZnVuY3Rpb24gUmd0KHQsZSl7MSZ0JiZ3dSgwLCJtZXRyaWNzLWZpbHRlcmVkLXZpZXciLDcpLDImdCYmdnUoImNhcmRPYnNlcnZlciIsTHUoKS5jYXJkT2JzZXJ2ZXIpfWZ1bmN0aW9uIFRndCh0LGUpezEmdCYmd3UoMCwibWV0cmljcy1waW5uZWQtdmlldyIsNyksMiZ0JiZ2dSgiY2FyZE9ic2VydmVyIixMdSgpLmNhcmRPYnNlcnZlcil9ZnVuY3Rpb24gTmd0KHQsZSl7aWYoMSZ0KXtjb25zdCB0PUV1KCk7T3UoMCwiZGl2Iiw5KSxPdSgxLCJkaXYiLDEwKSxPdSgyLCJoMiIsMTEpLE1mKDMsIlNldHRpbmdzIiksUHUoKSxPdSg0LCJidXR0b24iLDEyKSxOdSgiY2xpY2siLChmdW5jdGlvbiBlKCl7cmV0dXJuIHJhKHQpLEx1KCkub25DbG9zZVNpZGVwYW5lQnV0dG9uQ2xpY2tlZC5lbWl0KCl9KSksd3UoNSwibWF0LWljb24iLDEzKSxQdSgpLFB1KCksd3UoNiwibWV0cmljcy1kYXNoYm9hcmQtcmlnaHQtcGFuZSIpLFB1KCl9fUFndC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8QWd0KX0sQWd0Lsm1Y21wPVVvKHt0eXBlOkFndCxzZWxlY3RvcnM6W1sibWV0cmljcy1kYXNoYm9hcmQtcmlnaHQtcGFuZSJdXSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiZ3dSgwLCJtZXRyaWNzLWRhc2hib2FyZC1zZXR0aW5ncyIpfSxkaXJlY3RpdmVzOltFZ3RdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoQWd0LFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6Im1ldHJpY3MtZGFzaGJvYXJkLXJpZ2h0LXBhbmUiLHRlbXBsYXRlOiI8bWV0cmljcy1kYXNoYm9hcmQtc2V0dGluZ3M+PC9tZXRyaWNzLWRhc2hib2FyZC1zZXR0aW5ncz4iLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2h9XX1dLG51bGwsbnVsbCk7Y29uc3QgSWd0PWZ1bmN0aW9uKHQpe3JldHVybntjaGVja2VkOnQsInNldHRpbmdzLWJ1dHRvbiI6ITB9fTtjbGFzcyB6Z3R7Y29uc3RydWN0b3IodCl7dGhpcy5ob3N0PXQsdGhpcy5vblNldHRpbmdzQnV0dG9uQ2xpY2tlZD1uZXcgQWIsdGhpcy5vbkNsb3NlU2lkZXBhbmVCdXR0b25DbGlja2VkPW5ldyBBYix0aGlzLmNhcmRPYnNlcnZlcj1uZXcgVDIodGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQsIjYwMHB4IDBweCA2MDBweCAwcHgiKX19emd0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHx6Z3QpKE11KGNoKSl9LHpndC7JtWNtcD1Vbyh7dHlwZTp6Z3Qsc2VsZWN0b3JzOltbIm1ldHJpY3MtbWFpbi12aWV3LWNvbXBvbmVudCJdXSxpbnB1dHM6e3Nob3dGaWx0ZXJlZFZpZXc6InNob3dGaWx0ZXJlZFZpZXciLGlzU2lkZXBhbmVPcGVuOiJpc1NpZGVwYW5lT3BlbiJ9LG91dHB1dHM6e29uU2V0dGluZ3NCdXR0b25DbGlja2VkOiJvblNldHRpbmdzQnV0dG9uQ2xpY2tlZCIsb25DbG9zZVNpZGVwYW5lQnV0dG9uQ2xpY2tlZDoib25DbG9zZVNpZGVwYW5lQnV0dG9uQ2xpY2tlZCJ9LGRlY2xzOjEyLHZhcnM6MTAsY29uc3RzOmZ1bmN0aW9uKCl7bGV0IHQsZTtyZXR1cm4gdD0idW5kZWZpbmVkIiE9dHlwZW9mIG5nSTE4bkNsb3N1cmVNb2RlJiZuZ0kxOG5DbG9zdXJlTW9kZT9nb29nLmdldE1zZygiVG9nZ2xlIHNldHRpbmdzIHNpZGUgcGFuZSIpOiRsb2NhbGl6ZWA6TGFiZWwgb24gYSB0b29sYmFyIGJ1dHRvbiB0byB0b2dnbGUgdGhlIHNldHRpbmdzIHNpZGUgcGFuZS7ikJ9kMzUxNmRiNmJiZTY4NjBhNTViZWFiNjZlNDk2OWRhYzYyNWI4ZDcy4pCfNzY1OTI4NTQ0NTU4MDgzODkyNTpUb2dnbGUgc2V0dGluZ3Mgc2lkZSBwYW5lYCxlPSJ1bmRlZmluZWQiIT10eXBlb2YgbmdJMThuQ2xvc3VyZU1vZGUmJm5nSTE4bkNsb3N1cmVNb2RlP2dvb2cuZ2V0TXNnKCJDbG9zZSBzaWRlIHBhbmUiKTokbG9jYWxpemVgOkxhYmVsIG9uIGEgYnV0dG9uIHRvIGNsb3NlIHRoZSBzZXR0aW5ncyBzaWRlIHBhbmUu4pCfMDQ1MjFkYzBiNmE2NWNmNWMzODI5NDRjOWE4YjRiODQ0YTNlOTU5OOKQnzgxNTY3NjY5OTc3NDcxNjU4NzE6Q2xvc2Ugc2lkZSBwYW5lYCxbWzEsInRvb2xiYXIiXSxbMSwicmlnaHQtaXRlbXMiXSxbIm1hdC1zdHJva2VkLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLHQsMywibmdDbGFzcyIsImNsaWNrIl0sWyJzdmdJY29uIiwic2V0dGluZ3NfMjRweCJdLFsxLCJzcGxpdC1jb250ZW50Il0sWyJjZGtTY3JvbGxhYmxlIiwiIiwxLCJtYWluIl0sWzMsImNhcmRPYnNlcnZlciIsNCwibmdJZiJdLFszLCJjYXJkT2JzZXJ2ZXIiXSxbImNsYXNzIiwic2lkZWJhciIsNCwibmdJZiJdLFsxLCJzaWRlYmFyIl0sWzEsImhlYWRlciJdLFsxLCJ0aXRsZSJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsZSwzLCJjbGljayJdLFsic3ZnSWNvbiIsImNsb3NlXzI0cHgiXV19LHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihPdSgwLCJkaXYiLDApLHd1KDEsIm1ldHJpY3MtdGFnLWZpbHRlciIpLE91KDIsImRpdiIsMSksT3UoMywiYnV0dG9uIiwyKSxOdSgiY2xpY2siLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub25TZXR0aW5nc0J1dHRvbkNsaWNrZWQuZW1pdCgpfSkpLHd1KDQsIm1hdC1pY29uIiwzKSxNZig1LCIgU2V0dGluZ3MgIiksUHUoKSxQdSgpLFB1KCksT3UoNiwiZGl2Iiw0KSxPdSg3LCJkaXYiLDUpLFdtKDgsUmd0LDEsMSwibWV0cmljcy1maWx0ZXJlZC12aWV3Iiw2KSxXbSg5LFRndCwxLDEsIm1ldHJpY3MtcGlubmVkLXZpZXciLDYpLHd1KDEwLCJtZXRyaWNzLWNhcmQtZ3JvdXBzIiw3KSxQdSgpLFdtKDExLE5ndCw3LDAsImRpdiIsOCksUHUoKSksMiZlJiYoSmMoMyksdnUoIm5nQ2xhc3MiLGdiKDgsSWd0LG4uaXNTaWRlcGFuZU9wZW4pKSxObSgiYXJpYS1wcmVzc2VkIixuLmlzU2lkZXBhbmVPcGVuKSxKYyg1KSx2dSgibmdJZiIsbi5zaG93RmlsdGVyZWRWaWV3KSxKYygxKSx2dSgibmdJZiIsIW4uc2hvd0ZpbHRlcmVkVmlldyksSmMoMSksb2YoImRpc3BsYXkiLG4uc2hvd0ZpbHRlcmVkVmlldz8ibm9uZSI6IiIpLHZ1KCJjYXJkT2JzZXJ2ZXIiLG4uY2FyZE9ic2VydmVyKSxKYygxKSx2dSgibmdJZiIsbi5pc1NpZGVwYW5lT3BlbikpfSxkaXJlY3RpdmVzOltXMixOSCx0dixjRyxKSCxhdixoZ3QsQ2d0LFBndCxBZ3RdLHN0eWxlczpbJy5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHh9Lm1hdC1oMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaGVhZGxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTVweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZ1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjA1ZW07bWFyZ2luOjAgMCA1NnB4fS5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAwNWVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXJhaXNlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdHJva2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmxhdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZhYltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbWluaS1mYWJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4fS5tYXQtY2FyZC1zdWJ0aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGVja2JveC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvb3Rlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgdHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIzZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LjU0MTY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2NjY2NjY3ZW0pfUBtZWRpYSBwcmludHsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjJlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouMjVlbSAwIC43NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxZW0gMCAxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMiksIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi0wLjA2MjVlbX0ubWF0LW1lbnUtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci12ZXJ0aWNhbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGFiLWxpbmtbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MH0ubWF0LXRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5Om5vbmV9LmNkay12aXN1YWxseS1oaWRkZW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjZ9LmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV0sIC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3hbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2tbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHt9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7fS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOi13ZWJraXQtYXV0b2ZpbGwpe2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZVtfbmdjb250ZW50LSVDT01QJV17cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fS5tYXQtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfVtfbmdob3N0LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtoZWlnaHQ6MTAwJX0udG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWJlYjtmbGV4Om5vbmU7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtoZWlnaHQ6NDhweDtwYWRkaW5nOjAgMTZweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAudG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC50b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fS50b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1ldHJpY3MtdGFnLWZpbHRlcltfbmdjb250ZW50LSVDT01QJV17ZmxleDoxIDEgMTAwcHh9LnRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgLnJpZ2h0LWl0ZW1zW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItbGVmdDoxcHggc29saWQgI2ViZWJlYjttYXJnaW4tbGVmdDoxNnB4O3BhZGRpbmctbGVmdDoxNnB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC50b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yaWdodC1pdGVtc1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC50b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yaWdodC1pdGVtc1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICM1NTV9LnNwbGl0LWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtvdmVyZmxvdy15OmF1dG87ZmxleDoxfS5tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnNpZGViYXJbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93LXg6aGlkZGVuO292ZXJmbG93LXk6YXV0bzt3aWxsLWNoYW5nZTp0cmFuc2Zvcm07Y29udGFpbjpzdHJpY3R9Lm1haW5bX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2Y1ZjZmNztmbGV4OjEgMTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1ufWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm1haW5bX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzNhM2EzYX0ubWFpbltfbmdjb250ZW50LSVDT01QJV0gICBtZXRyaWNzLWZpbHRlcmVkLXZpZXdbX25nY29udGVudC0lQ09NUCVdLCAubWFpbltfbmdjb250ZW50LSVDT01QJV0gICBtZXRyaWNzLXBpbm5lZC12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmVifWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1ldHJpY3MtZmlsdGVyZWQtdmlld1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1ldHJpY3MtZmlsdGVyZWQtdmlld1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAubWFpbltfbmdjb250ZW50LSVDT01QJV0gICBtZXRyaWNzLXBpbm5lZC12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm1haW5bX25nY29udGVudC0lQ09NUCVdICAgbWV0cmljcy1waW5uZWQtdmlld1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX0uc2lkZWJhcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNlYmViZWI7ZmxleDowIDAgMjUwcHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnNpZGViYXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuc2lkZWJhcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICM1NTV9LnNpZGViYXJbX25nY29udGVudC0lQ09NUCVdICAgLmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWJlYjtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2hlaWdodDo0MnB4O3BhZGRpbmc6MCAxNnB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zaWRlYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuc2lkZWJhcltfbmdjb250ZW50LSVDT01QJV0gICAuaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fS5zaWRlYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLnRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MThweDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6bm9ybWFsO21hcmdpbjowfVtfbmdob3N0LSVDT01QJV0gICAuc2V0dGluZ3MtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxO2Rpc3BsYXk6aW5saW5lLWZsZXh9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNldHRpbmdzLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9W19uZ2hvc3QtJUNPTVAlXSAgIC5zZXR0aW5ncy1idXR0b24uY2hlY2tlZFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZTBlMGUwO2JvcmRlci1jb2xvcjojZTBlMGUwfWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5zZXR0aW5ncy1idXR0b24uY2hlY2tlZFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMjEyMTIxfVtfbmdob3N0LSVDT01QJV0gICAuc2V0dGluZ3MtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLm1hdC1idXR0b24td3JhcHBlcntkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn1bX25naG9zdC0lQ09NUCVdICAgLnNldHRpbmdzLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICBtYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXJpZ2h0OjRweH0nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoemd0LFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6Im1ldHJpY3MtbWFpbi12aWV3LWNvbXBvbmVudCIsdGVtcGxhdGVVcmw6Im1haW5fdmlld19jb21wb25lbnQubmcuaHRtbCIsc3R5bGVVcmxzOlsibWFpbl92aWV3X2NvbXBvbmVudC5jc3MiXSxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Y2h9XX0pLHtzaG93RmlsdGVyZWRWaWV3Olt7dHlwZTp5X31dLGlzU2lkZXBhbmVPcGVuOlt7dHlwZTp5X31dLG9uU2V0dGluZ3NCdXR0b25DbGlja2VkOlt7dHlwZTpfX31dLG9uQ2xvc2VTaWRlcGFuZUJ1dHRvbkNsaWNrZWQ6W3t0eXBlOl9ffV19KTtjbGFzcyBIZ3R7Y29uc3RydWN0b3IodCl7dGhpcy5zdG9yZT10LHRoaXMuaXNTaWRlcGFuZU9wZW49ITAsdGhpcy5zaG93RmlsdGVyZWRWaWV3JD10aGlzLnN0b3JlLnNlbGVjdChYVCkucGlwZShodCgodD0+dC5sZW5ndGg+MCkpKX1vblNldHRpbmdzQnV0dG9uQ2xpY2tlZCgpe3RoaXMuaXNTaWRlcGFuZU9wZW49IXRoaXMuaXNTaWRlcGFuZU9wZW59b25DbG9zZVNpZGVwYW5lQnV0dG9uQ2xpY2tlZCgpe3RoaXMuaXNTaWRlcGFuZU9wZW49ITF9fUhndC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8SGd0KShNdShFaykpfSxIZ3QuybVjbXA9VW8oe3R5cGU6SGd0LHNlbGVjdG9yczpbWyJtZXRyaWNzLW1haW4tdmlldyJdXSxkZWNsczoyLHZhcnM6NCxjb25zdHM6W1szLCJzaG93RmlsdGVyZWRWaWV3IiwiaXNTaWRlcGFuZU9wZW4iLCJvblNldHRpbmdzQnV0dG9uQ2xpY2tlZCIsIm9uQ2xvc2VTaWRlcGFuZUJ1dHRvbkNsaWNrZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKE91KDAsIm1ldHJpY3MtbWFpbi12aWV3LWNvbXBvbmVudCIsMCksTnUoIm9uU2V0dGluZ3NCdXR0b25DbGlja2VkIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uU2V0dGluZ3NCdXR0b25DbGlja2VkKCl9KSkoIm9uQ2xvc2VTaWRlcGFuZUJ1dHRvbkNsaWNrZWQiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub25DbG9zZVNpZGVwYW5lQnV0dG9uQ2xpY2tlZCgpfSkpLE9iKDEsImFzeW5jIiksUHUoKSksMiZlJiZ2dSgic2hvd0ZpbHRlcmVkVmlldyIsUGIoMSwyLG4uc2hvd0ZpbHRlcmVkVmlldyQpKSgiaXNTaWRlcGFuZU9wZW4iLG4uaXNTaWRlcGFuZU9wZW4pfSxkaXJlY3RpdmVzOlt6Z3RdLHBpcGVzOltNdl0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihIZ3QsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoibWV0cmljcy1tYWluLXZpZXciLHRlbXBsYXRlOidcbiAgICA8bWV0cmljcy1tYWluLXZpZXctY29tcG9uZW50XG4gICAgICBbc2hvd0ZpbHRlcmVkVmlld109InNob3dGaWx0ZXJlZFZpZXckIHwgYXN5bmMiXG4gICAgICBbaXNTaWRlcGFuZU9wZW5dPSJpc1NpZGVwYW5lT3BlbiJcbiAgICAgIChvblNldHRpbmdzQnV0dG9uQ2xpY2tlZCk9Im9uU2V0dGluZ3NCdXR0b25DbGlja2VkKCkiXG4gICAgICAob25DbG9zZVNpZGVwYW5lQnV0dG9uQ2xpY2tlZCk9Im9uQ2xvc2VTaWRlcGFuZUJ1dHRvbkNsaWNrZWQoKSJcbiAgICA+PC9tZXRyaWNzLW1haW4tdmlldy1jb21wb25lbnQ+XG4gICcsY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkVrfV19KSxudWxsKTtjbGFzcyBGZ3R7fUZndC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8Rmd0KX0sRmd0Lsm1Y21wPVVvKHt0eXBlOkZndCxzZWxlY3RvcnM6W1sibWV0cmljcy1kYXNoYm9hcmQiXV0sZGVjbHM6Myx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKE91KDAsIm5hdiIpLHd1KDEsInJ1bnMtc2VsZWN0b3IiKSxQdSgpLHd1KDIsIm1ldHJpY3MtbWFpbi12aWV3IikpfSxkaXJlY3RpdmVzOltBMixIZ3RdLHN0eWxlczpbJy5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHh9Lm1hdC1oMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaGVhZGxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTVweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZ1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjA1ZW07bWFyZ2luOjAgMCA1NnB4fS5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAwNWVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXJhaXNlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdHJva2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmxhdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZhYltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbWluaS1mYWJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4fS5tYXQtY2FyZC1zdWJ0aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGVja2JveC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvb3Rlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgdHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIzZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LjU0MTY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2NjY2NjY3ZW0pfUBtZWRpYSBwcmludHsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjJlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouMjVlbSAwIC43NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxZW0gMCAxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMiksIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi0wLjA2MjVlbX0ubWF0LW1lbnUtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci12ZXJ0aWNhbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGFiLWxpbmtbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MH0ubWF0LXRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5Om5vbmV9LmNkay12aXN1YWxseS1oaWRkZW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjZ9LmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV0sIC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3hbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2tbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHt9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7fS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOi13ZWJraXQtYXV0b2ZpbGwpe2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZVtfbmdjb250ZW50LSVDT01QJV17cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fS5tYXQtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfVtfbmdob3N0LSVDT01QJV17ZGlzcGxheTpmbGV4O2hlaWdodDoxMDAlfW5hdltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlci1yaWdodDoxcHggc29saWQgI2ViZWJlYjtmbGV4Om5vbmU7d2lkdGg6MzQwcHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgbmF2W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgbmF2W19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzA7Ym9yZGVyLXJpZ2h0LWNvbG9yOiM1NTV9bWV0cmljcy1tYWluLXZpZXdbX25nY29udGVudC0lQ09NUCVde2ZsZXg6MSAxfSddLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihGZ3QsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoibWV0cmljcy1kYXNoYm9hcmQiLHRlbXBsYXRlOiJcbiAgICA8bmF2PlxuICAgICAgPHJ1bnMtc2VsZWN0b3I+PC9ydW5zLXNlbGVjdG9yPlxuICAgIDwvbmF2PlxuICAgIDxtZXRyaWNzLW1haW4tdmlldz48L21ldHJpY3MtbWFpbi12aWV3PlxuICAiLHN0eWxlVXJsczpbIm1ldHJpY3NfY29udGFpbmVyLmNzcyJdLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2h9XX1dLG51bGwsbnVsbCk7Y2xhc3MgTGd0e31MZ3QuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fExndCl9LExndC7JtW1vZD1abyh7dHlwZTpMZ3R9KSxMZ3QuybVpbmo9Y28oe2ltcG9ydHM6W1tCdixmMSxkR11dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhMZ3Qse2RlY2xhcmF0aW9uczpbZzFdLGltcG9ydHM6W0J2LGYxLGRHXSxleHBvcnRzOltnMV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKExndCxbe3R5cGU6a18sYXJnczpbe2RlY2xhcmF0aW9uczpbZzFdLGV4cG9ydHM6W2cxXSxpbXBvcnRzOltCdixmMSxkR119XX1dLG51bGwsbnVsbCk7Y2xhc3MgQmd0e31CZ3QuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEJndCl9LEJndC7JtW1vZD1abyh7dHlwZTpCZ3R9KSxCZ3QuybVpbmo9Y28oe2ltcG9ydHM6W1tCdl1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhCZ3Qse2RlY2xhcmF0aW9uczpbcTFdLGltcG9ydHM6W0J2XSxleHBvcnRzOltxMV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEJndCxbe3R5cGU6a18sYXJnczpbe2ltcG9ydHM6W0J2XSxleHBvcnRzOltxMV0sZGVjbGFyYXRpb25zOltxMV19XX1dLG51bGwsbnVsbCk7Y2xhc3MgVmd0e31WZ3QuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFZndCl9LFZndC7JtW1vZD1abyh7dHlwZTpWZ3R9KSxWZ3QuybVpbmo9Y28oe2ltcG9ydHM6W1t6MyxCdixMZ3QsQ1YsekgseVksV1csQVksZEcsekcsciQsdzEseSQsRzAsQmd0LEhMXV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKFZndCx7ZGVjbGFyYXRpb25zOltOMSxJMSxVMSxXMSxQMixEMl0saW1wb3J0czpbejMsQnYsTGd0LENWLHpILHlZLFdXLEFZLGRHLHpHLHIkLHcxLHkkLEcwLEJndCxITF0sZXhwb3J0czpbRDJdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihWZ3QsW3t0eXBlOmtfLGFyZ3M6W3tpbXBvcnRzOlt6MyxCdixMZ3QsQ1YsekgseVksV1csQVksZEcsekcsciQsdzEseSQsRzAsQmd0LEhMXSxleHBvcnRzOltEMl0sZW50cnlDb21wb25lbnRzOltJMV0sZGVjbGFyYXRpb25zOltOMSxJMSxVMSxXMSxQMixEMl19XX1dLG51bGwsbnVsbCk7Y2xhc3Mgamd0e31qZ3QuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGpndCl9LGpndC7JtW1vZD1abyh7dHlwZTpqZ3R9KSxqZ3QuybVpbmo9Y28oe2ltcG9ydHM6W1tCdixWZ3RdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oamd0LHtkZWNsYXJhdGlvbnM6W0UyLEEyXSxpbXBvcnRzOltCdixWZ3RdLGV4cG9ydHM6W0EyXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoamd0LFt7dHlwZTprXyxhcmdzOlt7aW1wb3J0czpbQnYsVmd0XSxleHBvcnRzOltBMl0sZGVjbGFyYXRpb25zOltFMixBMl19XX1dLG51bGwsbnVsbCk7Y2xhc3MgVWd0e2NvbnN0cnVjdG9yKHQpe3RoaXMub25WaXNpYmlsaXR5Q2hhbmdlPW5ldyBBYix0aGlzLm5nVW5zdWJzY3JpYmUkPW5ldyB4LHRoaXMub25FdmVudCQ9bmV3IHg7Y29uc3QgZT1uZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKHQ9Pnt0aGlzLm9uRXZlbnQkLm5leHQodCl9KSk7ZS5vYnNlcnZlKHQubmF0aXZlRWxlbWVudCksdGhpcy5uZ1Vuc3Vic2NyaWJlJC5zdWJzY3JpYmUoKCgpPT57ZS51bm9ic2VydmUodC5uYXRpdmVFbGVtZW50KX0pKSx0aGlzLm9uRXZlbnQkLnBpcGUodW4odGhpcy5uZ1Vuc3Vic2NyaWJlJCkpLnN1YnNjcmliZSgodD0+e2NvbnN0IGU9dC5zbGljZSgtMSlbMF07dGhpcy5vblZpc2liaWxpdHlDaGFuZ2UuZW1pdCh7dmlzaWJsZTplLmlzSW50ZXJzZWN0aW5nfSl9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLm5nVW5zdWJzY3JpYmUkLm5leHQoKSx0aGlzLm5nVW5zdWJzY3JpYmUkLmNvbXBsZXRlKCl9d2FpdEZvckV2ZW50Rm9yVGVzdE9ubHkoKXtyZXR1cm4gbmV3IFByb21pc2UoKHQ9PnRoaXMub25FdmVudCQucGlwZShOZSgxKSkuc3Vic2NyaWJlKCgoKT0+e3QoKX0pKSkpfX1VZ3QuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFVndCkoTXUoY2gpKX0sVWd0Lsm1ZGlyPUpvKHt0eXBlOlVndCxzZWxlY3RvcnM6W1siIiwib2JzZXJ2ZUludGVyc2VjdGlvbiIsIiJdXSxvdXRwdXRzOntvblZpc2liaWxpdHlDaGFuZ2U6Im9uVmlzaWJpbGl0eUNoYW5nZSJ9fSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihVZ3QsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoiW29ic2VydmVJbnRlcnNlY3Rpb25dIn1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmNofV19KSx7b25WaXNpYmlsaXR5Q2hhbmdlOlt7dHlwZTpfX31dfSk7Y2xhc3MgV2d0e31XZ3QuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFdndCl9LFdndC7JtW1vZD1abyh7dHlwZTpXZ3R9KSxXZ3QuybVpbmo9Y28oe30pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oV2d0LHtkZWNsYXJhdGlvbnM6W1VndF0sZXhwb3J0czpbVWd0XX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoV2d0LFt7dHlwZTprXyxhcmdzOlt7ZXhwb3J0czpbVWd0XSxkZWNsYXJhdGlvbnM6W1VndF19XX1dLG51bGwsbnVsbCk7Y29uc3QgR2d0PVsibWFpbiJdLFlndD1bInhBeGlzIl0scWd0PVsieUF4aXMiXSxaZ3Q9WyJjb250ZW50Il0sWGd0PVsiaGlzdG9ncmFtcyJdO2Z1bmN0aW9uIEtndCh0LGUpe2lmKDEmdCYmKEhhKCksT3UoMCwiZyIpLE91KDEsInRleHQiKSxNZigyKSxQdSgpLFB1KCkpLDImdCl7Y29uc3QgdD1MdSgpO05tKCJ0cmFuc2Zvcm0iLHQuZ2V0Q3NzVHJhbnNsYXRlKHQudG9vbHRpcERhdGEueEF4aXMucG9zaXRpb24sOSkpLEpjKDIpLHZmKHQudG9vbHRpcERhdGEueEF4aXMubGFiZWwpfX1mdW5jdGlvbiBKZ3QodCxlKXtpZigxJnQmJihIYSgpLE91KDAsImciKSxPdSgxLCJ0ZXh0IiksTWYoMiksUHUoKSxQdSgpKSwyJnQpe2NvbnN0IHQ9THUoKTtObSgidHJhbnNmb3JtIix0LmdldEdyb3VwVHJhbnNmb3JtKHQudG9vbHRpcERhdGEuY2xvc2VzdERhdHVtKSksSmMoMSksTm0oInkiLHQudG9vbHRpcERhdGEueUF4aXMucG9zaXRpb24pLEpjKDEpLHhmKCIgIix0LnRvb2x0aXBEYXRhLnlBeGlzLmxhYmVsLCIgIil9fWZ1bmN0aW9uIFFndCh0LGUpe2lmKDEmdCYmKEhhKCksT3UoMCwiZyIpLHd1KDEsImxpbmUiLDE2KSxQdSgpKSwyJnQpe2NvbnN0IHQ9ZS4kaW1wbGljaXQ7Tm0oInRyYW5zZm9ybSIsTHUoKS5nZXRDc3NUcmFuc2xhdGUoMCx0KSl9fWZ1bmN0aW9uICRndCh0LGUpezEmdCYmKEhhKCksd3UoMCwibGluZSIsMjApKX1mdW5jdGlvbiB0aHQodCxlKXtpZigxJnQmJihIYSgpLHd1KDAsImNpcmNsZSIsMjEpKSwyJnQpe2NvbnN0IHQ9THUoKS4kaW1wbGljaXQsZT1MdSgpO05tKCJjeCIsZS5nZXRVaUNvb3JkRnJvbUJpbkZvckNvbnRlbnQoZS5nZXRDbG9zZXN0QmluRnJvbUJpbkNvb3JkaW5hdGUodCxlLnRvb2x0aXBEYXRhLnhQb3NpdGlvbkluQmluQ29vcmQpKS54KSgiY3kiLGUuZ2V0VWlDb29yZEZyb21CaW5Gb3JDb250ZW50KGUuZ2V0Q2xvc2VzdEJpbkZyb21CaW5Db29yZGluYXRlKHQsZS50b29sdGlwRGF0YS54UG9zaXRpb25JbkJpbkNvb3JkKSkueSl9fWZ1bmN0aW9uIGVodCh0LGUpe2lmKDEmdCYmKEhhKCksT3UoMCwiZyIsMTcpLFdtKDEsJGd0LDEsMCwibGluZSIsMTgpLHd1KDIsInBhdGgiKSxXbSgzLHRodCwxLDIsImNpcmNsZSIsMTkpLFB1KCkpLDImdCl7Y29uc3QgdD1lLiRpbXBsaWNpdCxuPUx1KCk7b2YoImNvbG9yIixuLmdldEhpc3RvZ3JhbUZpbGwodCkpLE5tKCJ0cmFuc2Zvcm0iLG4uZ2V0R3JvdXBUcmFuc2Zvcm0odCkpLEpjKDEpLHZ1KCJuZ0lmIixuLm1vZGU9PT1uLkhpc3RvZ3JhbU1vZGUuT0ZGU0VUKSxKYygxKSxObSgiZCIsbi5nZXRIaXN0b2dyYW1QYXRoKHQpKSxKYygxKSx2dSgibmdJZiIsbi50b29sdGlwRGF0YSl9fWZ1bmN0aW9uIG5odCh0LGUpe2lmKDEmdCYmKEhhKCksd3UoMCwiY2lyY2xlIiwyMSkpLDImdCl7Y29uc3QgdD1MdSgyKTtObSgiY3giLHQuZ2V0VWlDb29yZEZyb21CaW5Gb3JDb250ZW50KHQudG9vbHRpcERhdGEuY2xvc2VzdEJpbikueCkoImN5Iix0LmdldFVpQ29vcmRGcm9tQmluRm9yQ29udGVudCh0LnRvb2x0aXBEYXRhLmNsb3Nlc3RCaW4pLnkpfX1mdW5jdGlvbiBvaHQodCxlKXtpZigxJnQmJihIYSgpLE91KDAsImciLDQpLE91KDEsImciKSx3dSgyLCJwYXRoIiksV20oMyxuaHQsMSwyLCJjaXJjbGUiLDE5KSxQdSgpLE91KDQsImciLDIyKSxPdSg1LCJ0ZXh0IiwyMyksTWYoNiksUHUoKSxQdSgpLFB1KCkpLDImdCl7Y29uc3QgdD1MdSgpO0pjKDEpLE5tKCJ0cmFuc2Zvcm0iLHQuZ2V0R3JvdXBUcmFuc2Zvcm0odC50b29sdGlwRGF0YS5jbG9zZXN0RGF0dW0pKSxKYygxKSxObSgiZCIsdC5nZXRIaXN0b2dyYW1QYXRoKHQudG9vbHRpcERhdGEuY2xvc2VzdERhdHVtKSksSmMoMSksdnUoIm5nSWYiLHQudG9vbHRpcERhdGEuY2xvc2VzdEJpbiksSmMoMSksTm0oInRyYW5zZm9ybSIsdC5nZXRDc3NUcmFuc2xhdGUodC50b29sdGlwRGF0YS52YWx1ZS5wb3NpdGlvbi54LHQudG9vbHRpcERhdGEudmFsdWUucG9zaXRpb24ueSkpLEpjKDIpLHZmKHQudG9vbHRpcERhdGEudmFsdWUubGFiZWwpfX1jbGFzcyBpaHR7Y29uc3RydWN0b3IodCl7dGhpcy5jaGFuZ2VEZXRlY3Rvcj10LHRoaXMubW9kZT1URS5PRkZTRVQsdGhpcy50aW1lUHJvcGVydHk9UkUuU1RFUCx0aGlzLkhpc3RvZ3JhbU1vZGU9VEUsdGhpcy50b29sdGlwRGF0YT1udWxsLHRoaXMubmdVbnN1YnNjcmliZT1uZXcgeCx0aGlzLmxheW91dD17aGlzdG9ncmFtSGVpZ2h0OjAsY29udGVudENsaWVudFJlY3Q6e2hlaWdodDowLHdpZHRoOjB9fSx0aGlzLnNjYWxlcz1udWxsLHRoaXMuZm9ybWF0dGVycz17YmluTnVtYmVyOkx0dCgiLjN+cyIpLGNvdW50Okx0dCgiLjNuIiksd2FsbFRpbWU6SmV0KCIlbS8lZCAlWCIpLHN0ZXA6THR0KCIuMGYiKSxyZWxhdGl2ZTp0PT5MdHQoIi4xciIpKHQvMzZlNSkrImgifSx0aGlzLmRvbVZpc2libGU9ITF9bmdPbkNoYW5nZXMoKXt0aGlzLnVwZGF0ZUNoYXJ0SWZWaXNpYmxlKCl9bmdPbkRlc3Ryb3koKXt0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpfW5nQWZ0ZXJWaWV3SW5pdCgpe1Z0KHRoaXMubWFpbi5uYXRpdmVFbGVtZW50LCJtb3VzZW1vdmUiLHtwYXNzaXZlOiEwfSkucGlwZSh1bih0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKHQ9PnRoaXMub25Nb3VzZU1vdmUodCkpKX1nZXRDc3NUcmFuc2xhdGUodCxlKXtyZXR1cm5gdHJhbnNsYXRlKCR7dH0sICR7ZX0pYH1nZXRDbG9zZXN0QmluRnJvbUJpbkNvb3JkaW5hdGUodCxlKXtpZighdC5iaW5zLmxlbmd0aClyZXR1cm57eDowLGR4OjAseTowfTtjb25zdCBuPXQuYmluc1swXSxvPXQuYmlucy5zbGljZSgtMSlbMF07cmV0dXJuIGU8bi54P246ZT49by54K28uZHg/bzp0LmJpbnMuZmluZCgodD0+dC54PD1lJiZlPHQueCt0LmR4KSl9Z2V0VWlDb29yZEZyb21CaW5Gb3JDb250ZW50KHQpe3JldHVybiB0aGlzLnNjYWxlcz97eDp0aGlzLnNjYWxlcy5iaW5TY2FsZShzaHQodCkpLHk6dGhpcy5zY2FsZXMuY291bnRTY2FsZSh0LnkpfTp7eDowLHk6MH19Z2V0SGlzdG9ncmFtUGF0aCh0KXtpZighdGhpcy5zY2FsZXN8fCF0LmJpbnMubGVuZ3RoKXJldHVybiIiO2NvbnN0IGU9dGhpcy5zY2FsZXMuYmluU2NhbGUsbj10aGlzLnNjYWxlcy5jb3VudFNjYWxlLG89dC5iaW5zWzBdLGk9dC5iaW5zLnNsaWNlKC0xKVswXSxhPVtgTSR7ZShzaHQobykpfSwke24oMCl9YF07Zm9yKGNvbnN0IG8gb2YgdC5iaW5zKWEucHVzaChgTCR7ZShzaHQobykpfSwke24oby55KX1gKTtyZXR1cm4gYS5wdXNoKGBMJHtlKHNodChpKSl9LCR7bigwKX1gKSxhLmpvaW4oIiIpfXRyYWNrQnlXYWxsVGltZSh0KXtyZXR1cm4gdC53YWxsVGltZX1nZXRHcm91cFRyYW5zZm9ybSh0KXtyZXR1cm4gdGhpcy5zY2FsZXMmJnRoaXMubW9kZSE9PVRFLk9WRVJMQVk/YHRyYW5zbGF0ZSgwLCAke3RoaXMuc2NhbGVzLnRlbXBvcmFsU2NhbGUodGhpcy5nZXRUaW1lVmFsdWUodCkpfSlgOiIifWdldEhpc3RvZ3JhbUZpbGwodCl7cmV0dXJuIHRoaXMuc2NhbGVzP3RoaXMuc2NhbGVzLmQzQ29sb3JTY2FsZSh0aGlzLmdldFRpbWVWYWx1ZSh0KSk6IiJ9Z2V0R3JpZFRpY2tZTG9jcygpe2lmKCF0aGlzLnNjYWxlc3x8dGhpcy5tb2RlPT09VEUuT0ZGU0VUKXJldHVybltdO2NvbnN0IHQ9dGhpcy5zY2FsZXMuY291bnRTY2FsZTtyZXR1cm4gdC50aWNrcygpLm1hcCgoZT0+dChlKSkpfW9uUmVzaXplKCl7dGhpcy51cGRhdGVDbGllbnRSZWN0cygpLHRoaXMudXBkYXRlQ2hhcnRJZlZpc2libGUoKX1vblZpc2liaWxpdHlDaGFuZ2Uoe3Zpc2libGU6dH0pe3RoaXMuZG9tVmlzaWJsZT10LHQmJih0aGlzLnVwZGF0ZUNsaWVudFJlY3RzKCksdGhpcy51cGRhdGVDaGFydElmVmlzaWJsZSgpKX1nZXRUaW1lVmFsdWUodCl7c3dpdGNoKHRoaXMudGltZVByb3BlcnR5KXtjYXNlIFJFLldBTExfVElNRTpyZXR1cm4gdC53YWxsVGltZTtjYXNlIFJFLlNURVA6cmV0dXJuIHQuc3RlcDtjYXNlIFJFLlJFTEFUSVZFOnJldHVybiB0LndhbGxUaW1lLXRoaXMuZGF0YVswXS53YWxsVGltZX19dXBkYXRlQ2xpZW50UmVjdHMoKXt0aGlzLmNvbnRlbnQmJih0aGlzLmxheW91dC5jb250ZW50Q2xpZW50UmVjdD10aGlzLmNvbnRlbnQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLmxheW91dC5oaXN0b2dyYW1IZWlnaHQ9dGhpcy5sYXlvdXQuY29udGVudENsaWVudFJlY3QuaGVpZ2h0LzIuNSl9dXBkYXRlQ2hhcnRJZlZpc2libGUoKXt0aGlzLmRvbVZpc2libGUmJih0aGlzLnNjYWxlcz10aGlzLmNvbXB1dGVTY2FsZXModGhpcy5kYXRhKSx0aGlzLnJlbmRlclhBeGlzKCksdGhpcy5yZW5kZXJZQXhpcygpLHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpKX1jb21wdXRlU2NhbGVzKHQpe2NvbnN0e3dpZHRoOmUsaGVpZ2h0Om59PXRoaXMubGF5b3V0LmNvbnRlbnRDbGllbnRSZWN0LHttaW46byxtYXg6aX09cmh0KHQsKHQ9PihmdW5jdGlvbiBlKHQsbil7cmV0dXJuIHQucmVkdWNlKCgodCxlKT0+TWF0aC5taW4odCxuKGUpKSksMS8wKX0pKHQuYmlucywodD0+dC54KSkpLCh0PT5haHQodC5iaW5zLCgoe3g6dCxkeDplfSk9PnQrZSkpKSksYT1haHQodCwodD0+YWh0KHQuYmlucywoKHt5OnR9KT0+dCkpKSkscj1wZXQoKS5kb21haW4oW28saV0pLm5pY2UoKSxzPXRoaXMubW9kZSE9PVRFLk9WRVJMQVkmJnRoaXMudGltZVByb3BlcnR5PT1SRS5XQUxMX1RJTUU/Q290KCk6cGV0KCksbD10Lm1hcCgodD0+dGhpcy5nZXRUaW1lVmFsdWUodCkpKSx7bWluOmMsbWF4OmR9PXJodChsLCh0PT50KSkscD1bYyxkXTtzLmRvbWFpbihwKTtjb25zdCBtPXBldCgpO20uZG9tYWluKFswLGFdKTtjb25zdCB1PUg3KHRoaXMuY29sb3JTY2FsZT90aGlzLmNvbG9yU2NhbGUodGhpcy5uYW1lKToiIzAwMCIpLGY9cGV0KCk7cmV0dXJuIGYuZG9tYWluKHApLHIucmFuZ2UoWzAsZV0pLGYucmFuZ2UoW3UuYnJpZ2h0ZXIoKSx1LmRhcmtlcigpXSksZi5pbnRlcnBvbGF0ZShNOCksdGhpcy5tb2RlPT09VEUuT1ZFUkxBWT8ocy5yYW5nZShbbixuXSksbS5yYW5nZShbbiwwXSkpOihzLnJhbmdlKFtuLSh0aGlzLm1vZGU9PT1URS5PRkZTRVQ/bi10aGlzLmxheW91dC5oaXN0b2dyYW1IZWlnaHQ6MCksbl0pLG0ucmFuZ2UoWzAsLXRoaXMubGF5b3V0Lmhpc3RvZ3JhbUhlaWdodF0pKSx7YmluU2NhbGU6cixkM0NvbG9yU2NhbGU6Zixjb3VudFNjYWxlOm0sdGVtcG9yYWxTY2FsZTpzfX1yZW5kZXJYQXhpcygpe2lmKCF0aGlzLnNjYWxlcylyZXR1cm47Y29uc3R7d2lkdGg6dH09dGhpcy5sYXlvdXQuY29udGVudENsaWVudFJlY3QsZT1XNSh0aGlzLnNjYWxlcy5iaW5TY2FsZSkudGlja3MoTWF0aC5tYXgoMix0LzIwKSk7ZS50aWNrRm9ybWF0KHRoaXMuZm9ybWF0dGVycy5iaW5OdW1iZXIpLGUocjYodGhpcy54QXhpcy5uYXRpdmVFbGVtZW50KSl9Z2V0WUF4aXNGb3JtYXR0ZXIoKXtpZih0aGlzLm1vZGU9PT1URS5PVkVSTEFZKXJldHVybiB0aGlzLmZvcm1hdHRlcnMuY291bnQ7c3dpdGNoKHRoaXMudGltZVByb3BlcnR5KXtjYXNlIFJFLldBTExfVElNRTpyZXR1cm4gdGhpcy5mb3JtYXR0ZXJzLndhbGxUaW1lO2Nhc2UgUkUuU1RFUDpyZXR1cm4gdGhpcy5mb3JtYXR0ZXJzLnN0ZXA7Y2FzZSBSRS5SRUxBVElWRTpyZXR1cm4gdGhpcy5mb3JtYXR0ZXJzLnJlbGF0aXZlO2RlZmF1bHQ6dGhyb3cgUmFuZ2VFcnJvcihgWSBheGlzIGZvcm1hdHRlciBmb3IgJHt0aGlzLnRpbWVQcm9wZXJ0eX0gbXVzdCBiZSBpbXBsZW1lbnRlZGApfX1yZW5kZXJZQXhpcygpe2lmKCF0aGlzLnNjYWxlcylyZXR1cm47Y29uc3QgdD10aGlzLm1vZGU9PT1URS5PVkVSTEFZP3RoaXMuc2NhbGVzLmNvdW50U2NhbGU6dGhpcy5zY2FsZXMudGVtcG9yYWxTY2FsZSx7aGVpZ2h0OmV9PXRoaXMubGF5b3V0LmNvbnRlbnRDbGllbnRSZWN0LG49VTUodCkudGlja3MoTWF0aC5tYXgoMixlLzE1KSk7bi50aWNrRm9ybWF0KHRoaXMuZ2V0WUF4aXNGb3JtYXR0ZXIoKSksbihyNih0aGlzLnlBeGlzLm5hdGl2ZUVsZW1lbnQpKX1maW5kQ2xvc2VzdERhdHVtSW5kZXgodCl7bGV0IGU9dC50YXJnZXQsbj1lO2Zvcig7ZSYmZSE9PXRoaXMuaGlzdG9ncmFtcy5uYXRpdmVFbGVtZW50OyluPWUsZT1lLnBhcmVudEVsZW1lbnQ7cmV0dXJuIGU/QXJyYXkuZnJvbShlLmNoaWxkcmVuKS5pbmRleE9mKG4pOi0xfW9uTW91c2VNb3ZlRm9yVGVzdE9ubHkodCl7cmV0dXJuIHRoaXMub25Nb3VzZU1vdmUodCl9b25Nb3VzZU1vdmUodCl7aWYoIXRoaXMuc2NhbGVzKXJldHVybjtjb25zdCBlPXQub2Zmc2V0WCxuPXQub2Zmc2V0WSxvPXRoaXMuZmluZENsb3Nlc3REYXR1bUluZGV4KHQpO2lmKG88MClyZXR1cm47Y29uc3QgaT10aGlzLnNjYWxlcy5iaW5TY2FsZS5pbnZlcnQoZSksYT10aGlzLmRhdGFbb10scj10aGlzLmdldENsb3Nlc3RCaW5Gcm9tQmluQ29vcmRpbmF0ZShhLGkpO3RoaXMudG9vbHRpcERhdGE9e3ZhbHVlOntwb3NpdGlvbjp7eDplLHk6bn0sbGFiZWw6dGhpcy5tb2RlPT09VEUuT0ZGU0VUP3RoaXMuZm9ybWF0dGVycy5jb3VudChyLnkpOmBTdGVwOiAke3RoaXMuZm9ybWF0dGVycy5zdGVwKGEuc3RlcCl9YH0seEF4aXM6e3Bvc2l0aW9uOnRoaXMuZ2V0VWlDb29yZEZyb21CaW5Gb3JDb250ZW50KHIpLngsbGFiZWw6dGhpcy5mb3JtYXR0ZXJzLmJpbk51bWJlcihzaHQocikpfSx5QXhpczp7cG9zaXRpb246dGhpcy5zY2FsZXMuY291bnRTY2FsZSh0aGlzLm1vZGU9PT1URS5PRkZTRVQ/MDpyLnkpLGxhYmVsOnRoaXMubW9kZT09PVRFLk9GRlNFVD90aGlzLmdldFlBeGlzRm9ybWF0dGVyKCkodGhpcy5nZXRUaW1lVmFsdWUoYSkpOnRoaXMuZm9ybWF0dGVycy5iaW5OdW1iZXIoci55KX0seFBvc2l0aW9uSW5CaW5Db29yZDppLGNsb3Nlc3REYXR1bTphLGNsb3Nlc3RCaW46cn0sdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCl9fWZ1bmN0aW9uIGFodCh0LGUpe3JldHVybiB0LnJlZHVjZSgoKHQsbik9Pk1hdGgubWF4KHQsZShuKSkpLC0xLzApfWZ1bmN0aW9uIHJodCh0LGUsbil7bnx8KG49ZSk7bGV0IG89MS8wLGk9LTEvMDtmb3IoY29uc3QgYSBvZiB0KW89TWF0aC5taW4obyxlKGEpKSxpPU1hdGgubWF4KGksbihhKSk7cmV0dXJue21pbjpvLG1heDppfX1mdW5jdGlvbiBzaHQodCl7cmV0dXJuIHQueCsuNSp0LmR4fWlodC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8aWh0KShNdShIaCkpfSxpaHQuybVjbXA9VW8oe3R5cGU6aWh0LHNlbGVjdG9yczpbWyJ0Yi1oaXN0b2dyYW0tdjIiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJihXYihHZ3QsMSksV2IoWWd0LDEpLFdiKHFndCwxKSxXYihaZ3QsMSksV2IoWGd0LDEpKSwyJmUpe2xldCB0O1ViKHQ9WWIoKSkmJihuLm1haW49dC5maXJzdCksVWIodD1ZYigpKSYmKG4ueEF4aXM9dC5maXJzdCksVWIodD1ZYigpKSYmKG4ueUF4aXM9dC5maXJzdCksVWIodD1ZYigpKSYmKG4uY29udGVudD10LmZpcnN0KSxVYih0PVliKCkpJiYobi5oaXN0b2dyYW1zPXQuZmlyc3QpfX0saW5wdXRzOnttb2RlOiJtb2RlIix0aW1lUHJvcGVydHk6InRpbWVQcm9wZXJ0eSIsY29sb3JTY2FsZToiY29sb3JTY2FsZSIsbmFtZToibmFtZSIsZGF0YToiZGF0YSJ9LGZlYXR1cmVzOltTaV0sZGVjbHM6MjAsdmFyczo5LGNvbnN0czpbWyJkZXRlY3RSZXNpemUiLCIiLCJvYnNlcnZlSW50ZXJzZWN0aW9uIiwiIiwzLCJvblJlc2l6ZSIsIm9uVmlzaWJpbGl0eUNoYW5nZSJdLFsibWFpbiIsIiJdLFsxLCJheGlzIiwieC1heGlzIl0sWyJ4QXhpcyIsIiJdLFsxLCJ0b29sdGlwIl0sWzQsIm5nSWYiXSxbMSwiYXhpcyIsInktYXhpcyJdLFsieUF4aXMiLCIiXSxbMSwiY29udGVudCJdLFsiY29udGVudCIsIiJdLFsxLCJncmlkIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJoaXN0b2dyYW1zIl0sWyJoaXN0b2dyYW1zIiwiIl0sWyJjbGFzcyIsImhpc3RvZ3JhbSIsMywiY29sb3IiLDQsIm5nRm9yIiwibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSJdLFsiY2xhc3MiLCJ0b29sdGlwIiw0LCJuZ0lmIl0sWyJ4MiIsIjEwMCUiLDEsInRpY2siXSxbMSwiaGlzdG9ncmFtIl0sWyJjbGFzcyIsImJhc2VsaW5lIiwieDIiLCIxMDAlIiw0LCJuZ0lmIl0sWyJyIiwiMiIsNCwibmdJZiJdLFsieDIiLCIxMDAlIiwxLCJiYXNlbGluZSJdLFsiciIsIjIiXSxbMSwidmFsdWUtbGFiZWwiXSxbIngiLCIzIiwieSIsIi0zIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihPdSgwLCJkaXYiLDAsMSksTnUoIm9uUmVzaXplIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uUmVzaXplKCl9KSkoIm9uVmlzaWJpbGl0eUNoYW5nZSIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25WaXNpYmlsaXR5Q2hhbmdlKGUpfSkpLEhhKCksT3UoMiwic3ZnIiwyKSx3dSgzLCJnIixudWxsLDMpLE91KDUsImciLDQpLFdtKDYsS2d0LDMsMiwiZyIsNSksUHUoKSxQdSgpLE91KDcsInN2ZyIsNiksd3UoOCwiZyIsbnVsbCw3KSxPdSgxMCwiZyIsNCksV20oMTEsSmd0LDMsMywiZyIsNSksUHUoKSxQdSgpLE91KDEyLCJzdmciLDgsOSksT3UoMTQsImciLDEwKSxXbSgxNSxRZ3QsMiwxLCJnIiwxMSksUHUoKSxPdSgxNiwiZyIsMTIsMTMpLFdtKDE4LGVodCw0LDYsImciLDE0KSxQdSgpLFdtKDE5LG9odCw3LDUsImciLDE1KSxQdSgpLFB1KCkpLDImZSYmKGxmKCJtYWluICIrbi5tb2RlKyIgIituLnRpbWVQcm9wZXJ0eSksSmMoNiksdnUoIm5nSWYiLG4udG9vbHRpcERhdGEpLEpjKDQpLE5tKCJ0cmFuc2Zvcm0iLG4uZ2V0Q3NzVHJhbnNsYXRlKDksMCkpLEpjKDEpLHZ1KCJuZ0lmIixuLnRvb2x0aXBEYXRhKSxKYyg0KSx2dSgibmdGb3JPZiIsbi5nZXRHcmlkVGlja1lMb2NzKCkpLEpjKDMpLHZ1KCJuZ0Zvck9mIixuLmRhdGEpKCJuZ0ZvclRyYWNrQnkiLG4udHJhY2tCeVdhbGxUaW1lKSxKYygxKSx2dSgibmdJZiIsbi50b29sdGlwRGF0YSkpfSxkaXJlY3RpdmVzOltxSyxVZ3QsYXYsb3ZdLHN0eWxlczpbJy5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHh9Lm1hdC1oMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaGVhZGxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTVweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZ1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjA1ZW07bWFyZ2luOjAgMCA1NnB4fS5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAwNWVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXJhaXNlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdHJva2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmxhdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZhYltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbWluaS1mYWJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4fS5tYXQtY2FyZC1zdWJ0aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGVja2JveC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvb3Rlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgdHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIzZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LjU0MTY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2NjY2NjY3ZW0pfUBtZWRpYSBwcmludHsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjJlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouMjVlbSAwIC43NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxZW0gMCAxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMiksIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi0wLjA2MjVlbX0ubWF0LW1lbnUtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci12ZXJ0aWNhbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGFiLWxpbmtbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MH0ubWF0LXRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5Om5vbmV9LmNkay12aXN1YWxseS1oaWRkZW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjZ9LmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV0sIC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3hbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2tbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHt9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7fS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOi13ZWJraXQtYXV0b2ZpbGwpe2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZVtfbmdjb250ZW50LSVDT01QJV17cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fS5tYXQtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfVtfbmdob3N0LSVDT01QJV0sIC5tYWluW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfVtfbmdob3N0LSVDT01QJV17Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6MTBweH0ubWFpbltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtYXJlYXM6ImNvbnRlbnQgeS1heGlzIiAieC1heGlzIC4iO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgNTBweDtncmlkLXRlbXBsYXRlLXJvd3M6MWZyIDMwcHh9Lm1haW4ud2FsbF90aW1lW19uZ2NvbnRlbnQtJUNPTVAlXXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDc1cHh9LnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdLCAuYmFzZWxpbmVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiMwMDB9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAudG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuYmFzZWxpbmVbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuYmFzZWxpbmVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNmZmZ9LnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdICAgdGV4dFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6Ym9sZDtmb250LXNpemU6MTBweH0udG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gICB0ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdICAgY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmaWxsOmN1cnJlbnRDb2xvcn0udG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2RvbWluYW50LWJhc2VsaW5lOmlkZW9ncmFwaGljO3RleHQtYW5jaG9yOnN0YXJ0fS5heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgICB7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAgLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAge2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS5heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmRvbWFpbiwgLmF4aXNbX25nY29udGVudC0lQ09NUCVdICAgICAudGljayB0ZXh0e2Rpc3BsYXk6bm9uZX0uYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC50aWNrOm50aC1jaGlsZCgybisxKSB0ZXh0e2Rpc3BsYXk6aW5pdGlhbH1zdmdbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlO3dpZHRoOjEwMCU7cG9pbnRlci1ldmVudHM6dmlzaWJsZVBhaW50ZWR9c3ZnW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGxpbmVbX25nY29udGVudC0lQ09NUCVdLCBzdmdbX25nY29udGVudC0lQ09NUCVdICAgY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXSwgc3ZnW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtwb2ludGVyLWV2ZW50czpub25lfS54LWF4aXNbX25nY29udGVudC0lQ09NUCVde2dyaWQtYXJlYTp4LWF4aXN9LngtYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAudG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17ZG9taW5hbnQtYmFzZWxpbmU6aGFuZ2luZzt0ZXh0LWFuY2hvcjptaWRkbGV9LnktYXhpc1tfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOnktYXhpc30ueS1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtkb21pbmFudC1iYXNlbGluZTptaWRkbGU7dGV4dC1hbmNob3I6c3RhcnR9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLnRpY2tbX25nY29udGVudC0lQ09NUCVdLCAuYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC50aWNrIGxpbmV7c3Ryb2tlOiNkZGR9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLnRpY2tbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAudGlja1tfbmdjb250ZW50LSVDT01QJV17c3Ryb2tlOiM1NTV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmF4aXNbX25nY29udGVudC0lQ09NUCVdICAgICAudGljayBsaW5lLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC50aWNrIGxpbmV7c3Ryb2tlOiM1NTV9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2dyaWQtYXJlYTpjb250ZW50fS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50aWNrW19uZ2NvbnRlbnQtJUNPTVAlXXtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1kYXNoYXJyYXk6Mn0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBjaXJjbGVbX25nY29udGVudC0lQ09NUCVdLCAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBwYXRoW19uZ2NvbnRlbnQtJUNPTVAlXXtmaWxsOmN1cnJlbnRDb2xvcjtzdHJva2Utb3BhY2l0eTouNTtzdHJva2Utd2lkdGg6MXB4fS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNpcmNsZVtfbmdjb250ZW50LSVDT01QJV17c3Ryb2tlOiNmZmZ9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmJhc2VsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtzdHJva2Utb3BhY2l0eTouMTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZTpjdXJyZW50Q29sb3I7d2lkdGg6MTAwJX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAudG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gICBwYXRoW19uZ2NvbnRlbnQtJUNPTVAlXXtzdHJva2Utb3BhY2l0eToxO3N0cm9rZTpjdXJyZW50Q29sb3I7ZmlsbDp0cmFuc3BhcmVudH0ub2Zmc2V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oaXN0b2dyYW1zW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBhdGhbX25nY29udGVudC0lQ09NUCVde3N0cm9rZTojZmZmfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5vZmZzZXRbX25nY29udGVudC0lQ09NUCVdICAgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmhpc3RvZ3JhbXNbX25nY29udGVudC0lQ09NUCVdICAgcGF0aFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5vZmZzZXRbX25nY29udGVudC0lQ09NUCVdICAgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmhpc3RvZ3JhbXNbX25nY29udGVudC0lQ09NUCVdICAgcGF0aFtfbmdjb250ZW50LSVDT01QJV17c3Ryb2tlOiM1NTV9Lm92ZXJsYXlbX25nY29udGVudC0lQ09NUCVdICAgLngtYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC50aWNrIGxpbmV7ZGlzcGxheTpub25lfS5vdmVybGF5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBhdGhbX25nY29udGVudC0lQ09NUCVde2ZpbGwtb3BhY2l0eTowO3N0cm9rZTpjdXJyZW50Q29sb3J9LnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdLCAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBjaXJjbGVbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6bm9uZX0ubWFpbltfbmdjb250ZW50LSVDT01QJV06aG92ZXIgICAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBjaXJjbGVbX25nY29udGVudC0lQ09NUCVdLCAubWFpbltfbmdjb250ZW50LSVDT01QJV06aG92ZXIgICAudG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpibG9ja30nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoaWh0LFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6InRiLWhpc3RvZ3JhbS12MiIsdGVtcGxhdGVVcmw6Imhpc3RvZ3JhbV92Ml9jb21wb25lbnQubmcuaHRtbCIsc3R5bGVVcmxzOlsiaGlzdG9ncmFtX3YyX2NvbXBvbmVudC5jc3MiXSxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6SGh9XX0pLHttYWluOlt7dHlwZTpGcixhcmdzOlsibWFpbiJdfV0seEF4aXM6W3t0eXBlOkZyLGFyZ3M6WyJ4QXhpcyJdfV0seUF4aXM6W3t0eXBlOkZyLGFyZ3M6WyJ5QXhpcyJdfV0sY29udGVudDpbe3R5cGU6RnIsYXJnczpbImNvbnRlbnQiXX1dLGhpc3RvZ3JhbXM6W3t0eXBlOkZyLGFyZ3M6WyJoaXN0b2dyYW1zIl19XSxtb2RlOlt7dHlwZTp5X31dLHRpbWVQcm9wZXJ0eTpbe3R5cGU6eV99XSxjb2xvclNjYWxlOlt7dHlwZTp5X31dLG5hbWU6W3t0eXBlOnlffV0sZGF0YTpbe3R5cGU6eV99XX0pO2NsYXNzIGxodHt9bGh0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxsaHQpfSxsaHQuybVtb2Q9Wm8oe3R5cGU6bGh0fSksbGh0Lsm1aW5qPWNvKHtpbXBvcnRzOltbQnYsQUosV2d0XV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKGxodCx7ZGVjbGFyYXRpb25zOltIZnQsaWh0XSxpbXBvcnRzOltCdixBSixXZ3RdLGV4cG9ydHM6W0hmdCxpaHRdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihsaHQsW3t0eXBlOmtfLGFyZ3M6W3tkZWNsYXJhdGlvbnM6W0hmdCxpaHRdLGV4cG9ydHM6W0hmdCxpaHRdLGltcG9ydHM6W0J2LEFKLFdndF19XX1dLG51bGwsbnVsbCk7Y2xhc3MgY2h0e31jaHQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGNodCl9LGNodC7JtW1vZD1abyh7dHlwZTpjaHR9KSxjaHQuybVpbmo9Y28oe2ltcG9ydHM6W1tCdl1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhjaHQse2RlY2xhcmF0aW9uczpbWTJdLGltcG9ydHM6W0J2XSxleHBvcnRzOltZMl19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGNodCxbe3R5cGU6a18sYXJnczpbe2RlY2xhcmF0aW9uczpbWTJdLGV4cG9ydHM6W1kyXSxpbXBvcnRzOltCdl19XX1dLG51bGwsbnVsbCk7Y2xhc3MgZGh0e31kaHQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGRodCl9LGRodC7JtW1vZD1abyh7dHlwZTpkaHR9KSxkaHQuybVpbmo9Y28oe2ltcG9ydHM6W1tCdl1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhkaHQse2RlY2xhcmF0aW9uczpbWDIsWjJdLGltcG9ydHM6W0J2XSxleHBvcnRzOltYMl19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGRodCxbe3R5cGU6a18sYXJnczpbe2RlY2xhcmF0aW9uczpbWDIsWjJdLGV4cG9ydHM6W1gyXSxpbXBvcnRzOltCdl19XX1dLG51bGwsbnVsbCk7Y2xhc3MgcGh0e31waHQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHBodCl9LHBodC7JtW1vZD1abyh7dHlwZTpwaHR9KSxwaHQuybVpbmo9Y28oe2ltcG9ydHM6W1tCdixsaHQsekgsZEcsdzEsQUosZGh0LGNodF1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhwaHQse2RlY2xhcmF0aW9uczpbV2Z0LFVmdF0saW1wb3J0czpbQnYsbGh0LHpILGRHLHcxLEFKLGRodCxjaHRdLGV4cG9ydHM6W1dmdF19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHBodCxbe3R5cGU6a18sYXJnczpbe2RlY2xhcmF0aW9uczpbV2Z0LFVmdF0sZXhwb3J0czpbV2Z0XSxpbXBvcnRzOltCdixsaHQsekgsZEcsdzEsQUosZGh0LGNodF19XX1dLG51bGwsbnVsbCk7Y2xhc3MgbWh0e31taHQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fG1odCl9LG1odC7JtW1vZD1abyh7dHlwZTptaHR9KSxtaHQuybVpbmo9Y28oe2ltcG9ydHM6W1tCdix6SCxkRyx3MSxQWCxkaHQsY2h0XV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKG1odCx7ZGVjbGFyYXRpb25zOltpNSxvNV0saW1wb3J0czpbQnYsekgsZEcsdzEsUFgsZGh0LGNodF0sZXhwb3J0czpbaTVdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihtaHQsW3t0eXBlOmtfLGFyZ3M6W3tkZWNsYXJhdGlvbnM6W2k1LG81XSxleHBvcnRzOltpNV0saW1wb3J0czpbQnYsekgsZEcsdzEsUFgsZGh0LGNodF19XX1dLG51bGwsbnVsbCk7Y2xhc3MgdWh0e311aHQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHVodCl9LHVodC7JtW1vZD1abyh7dHlwZTp1aHR9KSx1aHQuybVpbmo9Y28oe2ltcG9ydHM6W1tCdixpTCx6SCxkRyxBWSx6R11dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyh1aHQse2RlY2xhcmF0aW9uczpbZmZ0LGNmdCxLdXRdLGltcG9ydHM6W0J2LGlMLHpILGRHLEFZLHpHXSxleHBvcnRzOltmZnQsY2Z0LEt1dF19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHVodCxbe3R5cGU6a18sYXJnczpbe2RlY2xhcmF0aW9uczpbZmZ0LGNmdCxLdXRdLGV4cG9ydHM6W2ZmdCxjZnQsS3V0XSxpbXBvcnRzOltCdixpTCx6SCxkRyxBWSx6R119XX1dLG51bGwsbnVsbCk7Y2xhc3MgZmh0e31maHQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGZodCl9LGZodC7JtW1vZD1abyh7dHlwZTpmaHR9KSxmaHQuybVpbmo9Y28oe2ltcG9ydHM6W1tCdixpTCx1aHQsQUpdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oZmh0LHtkZWNsYXJhdGlvbnM6W3hmdF0saW1wb3J0czpbQnYsaUwsdWh0LEFKXSxleHBvcnRzOlt4ZnRdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihmaHQsW3t0eXBlOmtfLGFyZ3M6W3tkZWNsYXJhdGlvbnM6W3hmdF0sZXhwb3J0czpbeGZ0XSxpbXBvcnRzOltCdixpTCx1aHQsQUpdfV19XSxudWxsLG51bGwpO2NsYXNzIGdodHt9Z2h0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxnaHQpfSxnaHQuybVtb2Q9Wm8oe3R5cGU6Z2h0fSksZ2h0Lsm1aW5qPWNvKHtpbXBvcnRzOltbQnYsVlUsekgsV1csQVksbVcsZFRdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oZ2h0LHtkZWNsYXJhdGlvbnM6W2I1LGg1XSxpbXBvcnRzOltCdixWVSx6SCxXVyxBWSxtVyxkVF0sZXhwb3J0czpbYjVdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihnaHQsW3t0eXBlOmtfLGFyZ3M6W3tkZWNsYXJhdGlvbnM6W2I1LGg1XSxleHBvcnRzOltiNV0saW1wb3J0czpbQnYsVlUsekgsV1csQVksbVcsZFRdLGVudHJ5Q29tcG9uZW50czpbYjVdfV19XSxudWxsLG51bGwpO2NsYXNzIGhodHt9aGh0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxoaHQpfSxoaHQuybVtb2Q9Wm8oe3R5cGU6aGh0fSksaGh0Lsm1aW5qPWNvKHtpbXBvcnRzOltbQnYsZ2h0LGZodCx6SCxkRyx6Ryx3MSxBSixjaHRdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oaGh0LHtkZWNsYXJhdGlvbnM6W05mdCxSZnRdLGltcG9ydHM6W0J2LGdodCxmaHQsekgsZEcsekcsdzEsQUosY2h0XSxleHBvcnRzOltOZnRdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihoaHQsW3t0eXBlOmtfLGFyZ3M6W3tkZWNsYXJhdGlvbnM6W05mdCxSZnRdLGV4cG9ydHM6W05mdF0saW1wb3J0czpbQnYsZ2h0LGZodCx6SCxkRyx6Ryx3MSxBSixjaHRdfV19XSxudWxsLG51bGwpO2NsYXNzIGJodHt9Ymh0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxiaHQpfSxiaHQuybVtb2Q9Wm8oe3R5cGU6Ymh0fSksYmh0Lsm1aW5qPWNvKHtpbXBvcnRzOltbQnYsbWh0LGhodCxwaHRdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oYmh0LHtkZWNsYXJhdGlvbnM6W04yLFhmdCxLZnRdLGltcG9ydHM6W0J2LG1odCxoaHQscGh0XSxleHBvcnRzOltOMixLZnRdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihiaHQsW3t0eXBlOmtfLGFyZ3M6W3tkZWNsYXJhdGlvbnM6W04yLFhmdCxLZnRdLGV4cG9ydHM6W04yLEtmdF0saW1wb3J0czpbQnYsbWh0LGhodCxwaHRdfV19XSxudWxsLG51bGwpO2NvbnN0IHlodD1bImJ1dHRvbiJdLF9odD1uZXcgTnIoIk1BVF9CVVRUT05fVE9HR0xFX0RFRkFVTFRfT1BUSU9OUyIpLENodD1uZXcgTnIoIk1hdEJ1dHRvblRvZ2dsZUdyb3VwIiksTWh0PXtwcm92aWRlOnZWLHVzZUV4aXN0aW5nOkluKCgoKT0+T2h0KSksbXVsdGk6ITB9O2xldCB2aHQ9MDtjbGFzcyB4aHR7Y29uc3RydWN0b3IodCxlKXt0aGlzLnNvdXJjZT10LHRoaXMudmFsdWU9ZX19Y2xhc3MgT2h0e2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5fY2hhbmdlRGV0ZWN0b3I9dCx0aGlzLl92ZXJ0aWNhbD0hMSx0aGlzLl9tdWx0aXBsZT0hMSx0aGlzLl9kaXNhYmxlZD0hMSx0aGlzLl9jb250cm9sVmFsdWVBY2Nlc3NvckNoYW5nZUZuPSgpPT57fSx0aGlzLl9vblRvdWNoZWQ9KCk9Pnt9LHRoaXMuX25hbWU9Im1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLSIrdmh0KyssdGhpcy52YWx1ZUNoYW5nZT1uZXcgQWIsdGhpcy5jaGFuZ2U9bmV3IEFiLHRoaXMuYXBwZWFyYW5jZT1lJiZlLmFwcGVhcmFuY2U/ZS5hcHBlYXJhbmNlOiJzdGFuZGFyZCJ9Z2V0IG5hbWUoKXtyZXR1cm4gdGhpcy5fbmFtZX1zZXQgbmFtZSh0KXt0aGlzLl9uYW1lPXQsdGhpcy5fYnV0dG9uVG9nZ2xlcyYmdGhpcy5fYnV0dG9uVG9nZ2xlcy5mb3JFYWNoKCh0PT57dC5uYW1lPXRoaXMuX25hbWUsdC5fbWFya0ZvckNoZWNrKCl9KSl9Z2V0IHZlcnRpY2FsKCl7cmV0dXJuIHRoaXMuX3ZlcnRpY2FsfXNldCB2ZXJ0aWNhbCh0KXt0aGlzLl92ZXJ0aWNhbD1ySSh0KX1nZXQgdmFsdWUoKXtjb25zdCB0PXRoaXMuX3NlbGVjdGlvbk1vZGVsP3RoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGVkOltdO3JldHVybiB0aGlzLm11bHRpcGxlP3QubWFwKCh0PT50LnZhbHVlKSk6dFswXT90WzBdLnZhbHVlOnZvaWQgMH1zZXQgdmFsdWUodCl7dGhpcy5fc2V0U2VsZWN0aW9uQnlWYWx1ZSh0KSx0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSl9Z2V0IHNlbGVjdGVkKCl7Y29uc3QgdD10aGlzLl9zZWxlY3Rpb25Nb2RlbD90aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZDpbXTtyZXR1cm4gdGhpcy5tdWx0aXBsZT90OnRbMF18fG51bGx9Z2V0IG11bHRpcGxlKCl7cmV0dXJuIHRoaXMuX211bHRpcGxlfXNldCBtdWx0aXBsZSh0KXt0aGlzLl9tdWx0aXBsZT1ySSh0KX1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR9c2V0IGRpc2FibGVkKHQpe3RoaXMuX2Rpc2FibGVkPXJJKHQpLHRoaXMuX2J1dHRvblRvZ2dsZXMmJnRoaXMuX2J1dHRvblRvZ2dsZXMuZm9yRWFjaCgodD0+dC5fbWFya0ZvckNoZWNrKCkpKX1uZ09uSW5pdCgpe3RoaXMuX3NlbGVjdGlvbk1vZGVsPW5ldyBqSCh0aGlzLm11bHRpcGxlLHZvaWQgMCwhMSl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0KC4uLnRoaXMuX2J1dHRvblRvZ2dsZXMuZmlsdGVyKCh0PT50LmNoZWNrZWQpKSl9d3JpdGVWYWx1ZSh0KXt0aGlzLnZhbHVlPXQsdGhpcy5fY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCl9cmVnaXN0ZXJPbkNoYW5nZSh0KXt0aGlzLl9jb250cm9sVmFsdWVBY2Nlc3NvckNoYW5nZUZuPXR9cmVnaXN0ZXJPblRvdWNoZWQodCl7dGhpcy5fb25Ub3VjaGVkPXR9c2V0RGlzYWJsZWRTdGF0ZSh0KXt0aGlzLmRpc2FibGVkPXR9X2VtaXRDaGFuZ2VFdmVudCgpe2NvbnN0IHQ9dGhpcy5zZWxlY3RlZCxlPUFycmF5LmlzQXJyYXkodCk/dFt0Lmxlbmd0aC0xXTp0LG49bmV3IHhodChlLHRoaXMudmFsdWUpO3RoaXMuX2NvbnRyb2xWYWx1ZUFjY2Vzc29yQ2hhbmdlRm4obi52YWx1ZSksdGhpcy5jaGFuZ2UuZW1pdChuKX1fc3luY0J1dHRvblRvZ2dsZSh0LGUsbj0hMSxvPSExKXt0aGlzLm11bHRpcGxlfHwhdGhpcy5zZWxlY3RlZHx8dC5jaGVja2VkfHwodGhpcy5zZWxlY3RlZC5jaGVja2VkPSExKSx0aGlzLl9zZWxlY3Rpb25Nb2RlbD9lP3RoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdCh0KTp0aGlzLl9zZWxlY3Rpb25Nb2RlbC5kZXNlbGVjdCh0KTpvPSEwLG8/UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKCk9PnRoaXMuX3VwZGF0ZU1vZGVsVmFsdWUobikpKTp0aGlzLl91cGRhdGVNb2RlbFZhbHVlKG4pfV9pc1NlbGVjdGVkKHQpe3JldHVybiB0aGlzLl9zZWxlY3Rpb25Nb2RlbCYmdGhpcy5fc2VsZWN0aW9uTW9kZWwuaXNTZWxlY3RlZCh0KX1faXNQcmVjaGVja2VkKHQpe3JldHVybiB2b2lkIDAhPT10aGlzLl9yYXdWYWx1ZSYmKHRoaXMubXVsdGlwbGUmJkFycmF5LmlzQXJyYXkodGhpcy5fcmF3VmFsdWUpP3RoaXMuX3Jhd1ZhbHVlLnNvbWUoKGU9Pm51bGwhPXQudmFsdWUmJmU9PT10LnZhbHVlKSk6dC52YWx1ZT09PXRoaXMuX3Jhd1ZhbHVlKX1fc2V0U2VsZWN0aW9uQnlWYWx1ZSh0KXtpZih0aGlzLl9yYXdWYWx1ZT10LHRoaXMuX2J1dHRvblRvZ2dsZXMpaWYodGhpcy5tdWx0aXBsZSYmdCl7aWYoIUFycmF5LmlzQXJyYXkodCkmJigidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSl0aHJvdyBFcnJvcigiVmFsdWUgbXVzdCBiZSBhbiBhcnJheSBpbiBtdWx0aXBsZS1zZWxlY3Rpb24gbW9kZS4iKTt0aGlzLl9jbGVhclNlbGVjdGlvbigpLHQuZm9yRWFjaCgodD0+dGhpcy5fc2VsZWN0VmFsdWUodCkpKX1lbHNlIHRoaXMuX2NsZWFyU2VsZWN0aW9uKCksdGhpcy5fc2VsZWN0VmFsdWUodCl9X2NsZWFyU2VsZWN0aW9uKCl7dGhpcy5fc2VsZWN0aW9uTW9kZWwuY2xlYXIoKSx0aGlzLl9idXR0b25Ub2dnbGVzLmZvckVhY2goKHQ9PnQuY2hlY2tlZD0hMSkpfV9zZWxlY3RWYWx1ZSh0KXtjb25zdCBlPXRoaXMuX2J1dHRvblRvZ2dsZXMuZmluZCgoZT0+bnVsbCE9ZS52YWx1ZSYmZS52YWx1ZT09PXQpKTtlJiYoZS5jaGVja2VkPSEwLHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdChlKSl9X3VwZGF0ZU1vZGVsVmFsdWUodCl7dCYmdGhpcy5fZW1pdENoYW5nZUV2ZW50KCksdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpfX1PaHQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fE9odCkoTXUoSGgpLE11KF9odCw4KSl9LE9odC7JtWRpcj1Kbyh7dHlwZTpPaHQsc2VsZWN0b3JzOltbIm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uIHQoZSxuLG8pe2lmKDEmZSYmR2Iobyx3aHQsMSksMiZlKXtsZXQgdDtVYih0PVliKCkpJiYobi5fYnV0dG9uVG9nZ2xlcz10KX19LGhvc3RBdHRyczpbInJvbGUiLCJncm91cCIsMSwibWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAiXSxob3N0VmFyczo1LGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MiZlJiYoTm0oImFyaWEtZGlzYWJsZWQiLG4uZGlzYWJsZWQpLGFmKCJtYXQtYnV0dG9uLXRvZ2dsZS12ZXJ0aWNhbCIsbi52ZXJ0aWNhbCkoIm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQiLCJzdGFuZGFyZCI9PT1uLmFwcGVhcmFuY2UpKX0saW5wdXRzOnthcHBlYXJhbmNlOiJhcHBlYXJhbmNlIixuYW1lOiJuYW1lIix2ZXJ0aWNhbDoidmVydGljYWwiLHZhbHVlOiJ2YWx1ZSIsbXVsdGlwbGU6Im11bHRpcGxlIixkaXNhYmxlZDoiZGlzYWJsZWQifSxvdXRwdXRzOnt2YWx1ZUNoYW5nZToidmFsdWVDaGFuZ2UiLGNoYW5nZToiY2hhbmdlIn0sZXhwb3J0QXM6WyJtYXRCdXR0b25Ub2dnbGVHcm91cCJdLGZlYXR1cmVzOltpaChbTWh0LHtwcm92aWRlOkNodCx1c2VFeGlzdGluZzpPaHR9XSldfSksT2h0LmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6SGh9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbX2h0XX1dfV0sT2h0LnByb3BEZWNvcmF0b3JzPXtfYnV0dG9uVG9nZ2xlczpbe3R5cGU6enIsYXJnczpbSW4oKCgpPT53aHQpKSx7ZGVzY2VuZGFudHM6ITB9XX1dLGFwcGVhcmFuY2U6W3t0eXBlOnlffV0sbmFtZTpbe3R5cGU6eV99XSx2ZXJ0aWNhbDpbe3R5cGU6eV99XSx2YWx1ZTpbe3R5cGU6eV99XSx2YWx1ZUNoYW5nZTpbe3R5cGU6X199XSxtdWx0aXBsZTpbe3R5cGU6eV99XSxkaXNhYmxlZDpbe3R5cGU6eV99XSxjaGFuZ2U6W3t0eXBlOl9ffV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoT2h0LFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6Im1hdC1idXR0b24tdG9nZ2xlLWdyb3VwIixwcm92aWRlcnM6W01odCx7cHJvdmlkZTpDaHQsdXNlRXhpc3Rpbmc6T2h0fV0saG9zdDp7cm9sZToiZ3JvdXAiLGNsYXNzOiJtYXQtYnV0dG9uLXRvZ2dsZS1ncm91cCIsIlthdHRyLmFyaWEtZGlzYWJsZWRdIjoiZGlzYWJsZWQiLCJbY2xhc3MubWF0LWJ1dHRvbi10b2dnbGUtdmVydGljYWxdIjoidmVydGljYWwiLCJbY2xhc3MubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZF0iOidhcHBlYXJhbmNlID09PSAic3RhbmRhcmQiJ30sZXhwb3J0QXM6Im1hdEJ1dHRvblRvZ2dsZUdyb3VwIn1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkhofSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W19odF19XX1dfSkse3ZhbHVlQ2hhbmdlOlt7dHlwZTpfX31dLGNoYW5nZTpbe3R5cGU6X199XSxhcHBlYXJhbmNlOlt7dHlwZTp5X31dLG5hbWU6W3t0eXBlOnlffV0sdmVydGljYWw6W3t0eXBlOnlffV0sdmFsdWU6W3t0eXBlOnlffV0sbXVsdGlwbGU6W3t0eXBlOnlffV0sZGlzYWJsZWQ6W3t0eXBlOnlffV0sX2J1dHRvblRvZ2dsZXM6W3t0eXBlOnpyLGFyZ3M6W0luKCgoKT0+d2h0KSkse2Rlc2NlbmRhbnRzOiEwfV19XX0pO2NvbnN0IFBodD16eihjbGFzc3t9KTtjbGFzcyB3aHQgZXh0ZW5kcyBQaHR7Y29uc3RydWN0b3IodCxlLG4sbyxpLGEpe3N1cGVyKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9ZSx0aGlzLl9lbGVtZW50UmVmPW4sdGhpcy5fZm9jdXNNb25pdG9yPW8sdGhpcy5faXNTaW5nbGVTZWxlY3Rvcj0hMSx0aGlzLl9jaGVja2VkPSExLHRoaXMuYXJpYUxhYmVsbGVkYnk9bnVsbCx0aGlzLl9kaXNhYmxlZD0hMSx0aGlzLmNoYW5nZT1uZXcgQWI7Y29uc3Qgcj1OdW1iZXIoaSk7dGhpcy50YWJJbmRleD1yfHwwPT09cj9yOm51bGwsdGhpcy5idXR0b25Ub2dnbGVHcm91cD10LHRoaXMuYXBwZWFyYW5jZT1hJiZhLmFwcGVhcmFuY2U/YS5hcHBlYXJhbmNlOiJzdGFuZGFyZCJ9Z2V0IGJ1dHRvbklkKCl7cmV0dXJuYCR7dGhpcy5pZH0tYnV0dG9uYH1nZXQgYXBwZWFyYW5jZSgpe3JldHVybiB0aGlzLmJ1dHRvblRvZ2dsZUdyb3VwP3RoaXMuYnV0dG9uVG9nZ2xlR3JvdXAuYXBwZWFyYW5jZTp0aGlzLl9hcHBlYXJhbmNlfXNldCBhcHBlYXJhbmNlKHQpe3RoaXMuX2FwcGVhcmFuY2U9dH1nZXQgY2hlY2tlZCgpe3JldHVybiB0aGlzLmJ1dHRvblRvZ2dsZUdyb3VwP3RoaXMuYnV0dG9uVG9nZ2xlR3JvdXAuX2lzU2VsZWN0ZWQodGhpcyk6dGhpcy5fY2hlY2tlZH1zZXQgY2hlY2tlZCh0KXtjb25zdCBlPXJJKHQpO2UhPT10aGlzLl9jaGVja2VkJiYodGhpcy5fY2hlY2tlZD1lLHRoaXMuYnV0dG9uVG9nZ2xlR3JvdXAmJnRoaXMuYnV0dG9uVG9nZ2xlR3JvdXAuX3N5bmNCdXR0b25Ub2dnbGUodGhpcyx0aGlzLl9jaGVja2VkKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfHx0aGlzLmJ1dHRvblRvZ2dsZUdyb3VwJiZ0aGlzLmJ1dHRvblRvZ2dsZUdyb3VwLmRpc2FibGVkfXNldCBkaXNhYmxlZCh0KXt0aGlzLl9kaXNhYmxlZD1ySSh0KX1uZ09uSW5pdCgpe2NvbnN0IHQ9dGhpcy5idXR0b25Ub2dnbGVHcm91cDt0aGlzLl9pc1NpbmdsZVNlbGVjdG9yPXQmJiF0Lm11bHRpcGxlLHRoaXMuaWQ9dGhpcy5pZHx8Im1hdC1idXR0b24tdG9nZ2xlLSIrdmh0KyssdGhpcy5faXNTaW5nbGVTZWxlY3RvciYmKHRoaXMubmFtZT10Lm5hbWUpLHQmJih0Ll9pc1ByZWNoZWNrZWQodGhpcyk/dGhpcy5jaGVja2VkPSEwOnQuX2lzU2VsZWN0ZWQodGhpcykhPT10aGlzLl9jaGVja2VkJiZ0Ll9zeW5jQnV0dG9uVG9nZ2xlKHRoaXMsdGhpcy5fY2hlY2tlZCkpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX2ZvY3VzTW9uaXRvci5tb25pdG9yKHRoaXMuX2VsZW1lbnRSZWYsITApfW5nT25EZXN0cm95KCl7Y29uc3QgdD10aGlzLmJ1dHRvblRvZ2dsZUdyb3VwO3RoaXMuX2ZvY3VzTW9uaXRvci5zdG9wTW9uaXRvcmluZyh0aGlzLl9lbGVtZW50UmVmKSx0JiZ0Ll9pc1NlbGVjdGVkKHRoaXMpJiZ0Ll9zeW5jQnV0dG9uVG9nZ2xlKHRoaXMsITEsITEsITApfWZvY3VzKHQpe3RoaXMuX2J1dHRvbkVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cyh0KX1fb25CdXR0b25DbGljaygpe2NvbnN0IHQ9ISF0aGlzLl9pc1NpbmdsZVNlbGVjdG9yfHwhdGhpcy5fY2hlY2tlZDt0IT09dGhpcy5fY2hlY2tlZCYmKHRoaXMuX2NoZWNrZWQ9dCx0aGlzLmJ1dHRvblRvZ2dsZUdyb3VwJiYodGhpcy5idXR0b25Ub2dnbGVHcm91cC5fc3luY0J1dHRvblRvZ2dsZSh0aGlzLHRoaXMuX2NoZWNrZWQsITApLHRoaXMuYnV0dG9uVG9nZ2xlR3JvdXAuX29uVG91Y2hlZCgpKSksdGhpcy5jaGFuZ2UuZW1pdChuZXcgeGh0KHRoaXMsdGhpcy52YWx1ZSkpfV9tYXJrRm9yQ2hlY2soKXt0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX19d2h0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHx3aHQpKE11KENodCw4KSxNdShIaCksTXUoY2gpLE11KHB6KSxPcigidGFiaW5kZXgiKSxNdShfaHQsOCkpfSx3aHQuybVjbXA9VW8oe3R5cGU6d2h0LHNlbGVjdG9yczpbWyJtYXQtYnV0dG9uLXRvZ2dsZSJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24gdChlLG4pe2lmKDEmZSYmV2IoeWh0LDEpLDImZSl7bGV0IHQ7VWIodD1ZYigpKSYmKG4uX2J1dHRvbkVsZW1lbnQ9dC5maXJzdCl9fSxob3N0QXR0cnM6WyJyb2xlIiwicHJlc2VudGF0aW9uIiwxLCJtYXQtYnV0dG9uLXRvZ2dsZSJdLGhvc3RWYXJzOjEyLGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MSZlJiZOdSgiZm9jdXMiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uZm9jdXMoKX0pKSwyJmUmJihObSgiYXJpYS1sYWJlbCIsbnVsbCkoImFyaWEtbGFiZWxsZWRieSIsbnVsbCkoImlkIixuLmlkKSgibmFtZSIsbnVsbCksYWYoIm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUiLCFuLmJ1dHRvblRvZ2dsZUdyb3VwKSgibWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZCIsbi5jaGVja2VkKSgibWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWQiLG4uZGlzYWJsZWQpKCJtYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkIiwic3RhbmRhcmQiPT09bi5hcHBlYXJhbmNlKSl9LGlucHV0czp7ZGlzYWJsZVJpcHBsZToiZGlzYWJsZVJpcHBsZSIsYXJpYUxhYmVsbGVkYnk6WyJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhTGFiZWxsZWRieSJdLHRhYkluZGV4OiJ0YWJJbmRleCIsYXBwZWFyYW5jZToiYXBwZWFyYW5jZSIsY2hlY2tlZDoiY2hlY2tlZCIsZGlzYWJsZWQ6ImRpc2FibGVkIixpZDoiaWQiLG5hbWU6Im5hbWUiLGFyaWFMYWJlbDpbImFyaWEtbGFiZWwiLCJhcmlhTGFiZWwiXSx2YWx1ZToidmFsdWUifSxvdXRwdXRzOntjaGFuZ2U6ImNoYW5nZSJ9LGV4cG9ydEFzOlsibWF0QnV0dG9uVG9nZ2xlIl0sZmVhdHVyZXM6W2dtXSxuZ0NvbnRlbnRTZWxlY3RvcnM6WyIqIl0sZGVjbHM6Nix2YXJzOjksY29uc3RzOltbInR5cGUiLCJidXR0b24iLDEsIm1hdC1idXR0b24tdG9nZ2xlLWJ1dHRvbiIsIm1hdC1mb2N1cy1pbmRpY2F0b3IiLDMsImlkIiwiZGlzYWJsZWQiLCJjbGljayJdLFsiYnV0dG9uIiwiIl0sWzEsIm1hdC1idXR0b24tdG9nZ2xlLWxhYmVsLWNvbnRlbnQiXSxbMSwibWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheSJdLFsibWF0UmlwcGxlIiwiIiwxLCJtYXQtYnV0dG9uLXRvZ2dsZS1yaXBwbGUiLDMsIm1hdFJpcHBsZVRyaWdnZXIiLCJtYXRSaXBwbGVEaXNhYmxlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7aWYoMSZlJiYoVnUoKSxPdSgwLCJidXR0b24iLDAsMSksTnUoImNsaWNrIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLl9vbkJ1dHRvbkNsaWNrKCl9KSksT3UoMiwic3BhbiIsMiksanUoMyksUHUoKSxQdSgpLHd1KDQsInNwYW4iLDMpLHd1KDUsInNwYW4iLDQpKSwyJmUpe2NvbnN0IHQ9R20oMSk7dnUoImlkIixuLmJ1dHRvbklkKSgiZGlzYWJsZWQiLG4uZGlzYWJsZWR8fG51bGwpLE5tKCJ0YWJpbmRleCIsbi5kaXNhYmxlZD8tMTpuLnRhYkluZGV4KSgiYXJpYS1wcmVzc2VkIixuLmNoZWNrZWQpKCJuYW1lIixuLm5hbWV8fG51bGwpKCJhcmlhLWxhYmVsIixuLmFyaWFMYWJlbCkoImFyaWEtbGFiZWxsZWRieSIsbi5hcmlhTGFiZWxsZWRieSksSmMoNSksdnUoIm1hdFJpcHBsZVRyaWdnZXIiLHQpKCJtYXRSaXBwbGVEaXNhYmxlZCIsbi5kaXNhYmxlUmlwcGxlfHxuLmRpc2FibGVkKX19LGRpcmVjdGl2ZXM6W3BIXSxzdHlsZXM6WyIubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZSwubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXB7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTppbmxpbmUtZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjtib3JkZXItcmFkaXVzOjJweDstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnR9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZSwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cHtvdXRsaW5lOnNvbGlkIDFweH0ubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkLC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJke2JvcmRlci1yYWRpdXM6NHB4fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJke291dGxpbmU6MH0ubWF0LWJ1dHRvbi10b2dnbGUtdmVydGljYWx7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5tYXQtYnV0dG9uLXRvZ2dsZS12ZXJ0aWNhbCAubWF0LWJ1dHRvbi10b2dnbGUtbGFiZWwtY29udGVudHtkaXNwbGF5OmJsb2NrfS5tYXQtYnV0dG9uLXRvZ2dsZXt3aGl0ZS1zcGFjZTpub3dyYXA7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1idXR0b24tdG9nZ2xlIC5tYXQtaWNvbiBzdmd7dmVydGljYWwtYWxpZ246dG9wfS5tYXQtYnV0dG9uLXRvZ2dsZS5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtvcGFjaXR5OjF9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWJ1dHRvbi10b2dnbGUuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouNX0ubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZDpub3QoLm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVkKTpob3ZlciAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi4wNH0ubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVkKSAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi4xMn0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWQpIC5tYXQtYnV0dG9uLXRvZ2dsZS1mb2N1cy1vdmVybGF5e29wYWNpdHk6LjV9QG1lZGlhKGhvdmVyOiBub25lKXsubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZDpub3QoLm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVkKTpob3ZlciAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtkaXNwbGF5Om5vbmV9fS5tYXQtYnV0dG9uLXRvZ2dsZS1sYWJlbC1jb250ZW50ey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtkaXNwbGF5OmlubGluZS1ibG9jaztsaW5lLWhlaWdodDozNnB4O3BhZGRpbmc6MCAxNnB4O3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtYnV0dG9uLXRvZ2dsZS1sYWJlbC1jb250ZW50e3BhZGRpbmc6MCAxMnB4fS5tYXQtYnV0dG9uLXRvZ2dsZS1sYWJlbC1jb250ZW50Pip7dmVydGljYWwtYWxpZ246bWlkZGxlfS5tYXQtYnV0dG9uLXRvZ2dsZS1mb2N1cy1vdmVybGF5e2JvcmRlci1yYWRpdXM6aW5oZXJpdDtwb2ludGVyLWV2ZW50czpub25lO29wYWNpdHk6MDt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZX0ubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZCAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtib3JkZXItYm90dG9tOnNvbGlkIDM2cHh9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZCAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi41O2hlaWdodDowfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWQubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtib3JkZXItYm90dG9tOnNvbGlkIDUwMHB4fS5tYXQtYnV0dG9uLXRvZ2dsZSAubWF0LWJ1dHRvbi10b2dnbGUtcmlwcGxle3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmV9Lm1hdC1idXR0b24tdG9nZ2xlLWJ1dHRvbntib3JkZXI6MDtiYWNrZ3JvdW5kOm5vbmU7Y29sb3I6aW5oZXJpdDtwYWRkaW5nOjA7bWFyZ2luOjA7Zm9udDppbmhlcml0O291dGxpbmU6bm9uZTt3aWR0aDoxMDAlO2N1cnNvcjpwb2ludGVyfS5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZCAubWF0LWJ1dHRvbi10b2dnbGUtYnV0dG9ue2N1cnNvcjpkZWZhdWx0fS5tYXQtYnV0dG9uLXRvZ2dsZS1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9XG4iXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSx3aHQuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpPaHQsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W0NodF19XX0se3R5cGU6SGh9LHt0eXBlOmNofSx7dHlwZTpwen0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOlJyLGFyZ3M6WyJ0YWJpbmRleCJdfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbX2h0XX1dfV0sd2h0LnByb3BEZWNvcmF0b3JzPXthcmlhTGFiZWw6W3t0eXBlOnlfLGFyZ3M6WyJhcmlhLWxhYmVsIl19XSxhcmlhTGFiZWxsZWRieTpbe3R5cGU6eV8sYXJnczpbImFyaWEtbGFiZWxsZWRieSJdfV0sX2J1dHRvbkVsZW1lbnQ6W3t0eXBlOkZyLGFyZ3M6WyJidXR0b24iXX1dLGlkOlt7dHlwZTp5X31dLG5hbWU6W3t0eXBlOnlffV0sdmFsdWU6W3t0eXBlOnlffV0sdGFiSW5kZXg6W3t0eXBlOnlffV0sYXBwZWFyYW5jZTpbe3R5cGU6eV99XSxjaGVja2VkOlt7dHlwZTp5X31dLGRpc2FibGVkOlt7dHlwZTp5X31dLGNoYW5nZTpbe3R5cGU6X199XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYih3aHQsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoibWF0LWJ1dHRvbi10b2dnbGUiLHRlbXBsYXRlOic8YnV0dG9uICNidXR0b24gY2xhc3M9Im1hdC1idXR0b24tdG9nZ2xlLWJ1dHRvbiBtYXQtZm9jdXMtaW5kaWNhdG9yIlxuICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgIFtpZF09ImJ1dHRvbklkIlxuICAgICAgICBbYXR0ci50YWJpbmRleF09ImRpc2FibGVkID8gLTEgOiB0YWJJbmRleCJcbiAgICAgICAgW2F0dHIuYXJpYS1wcmVzc2VkXT0iY2hlY2tlZCJcbiAgICAgICAgW2Rpc2FibGVkXT0iZGlzYWJsZWQgfHwgbnVsbCJcbiAgICAgICAgW2F0dHIubmFtZV09Im5hbWUgfHwgbnVsbCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09ImFyaWFMYWJlbCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT0iYXJpYUxhYmVsbGVkYnkiXG4gICAgICAgIChjbGljayk9Il9vbkJ1dHRvbkNsaWNrKCkiPlxuICA8c3BhbiBjbGFzcz0ibWF0LWJ1dHRvbi10b2dnbGUtbGFiZWwtY29udGVudCI+XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICA8L3NwYW4+XG48L2J1dHRvbj5cblxuPHNwYW4gY2xhc3M9Im1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXkiPjwvc3Bhbj5cbjxzcGFuIGNsYXNzPSJtYXQtYnV0dG9uLXRvZ2dsZS1yaXBwbGUiIG1hdFJpcHBsZVxuICAgICBbbWF0UmlwcGxlVHJpZ2dlcl09ImJ1dHRvbiJcbiAgICAgW21hdFJpcHBsZURpc2FibGVkXT0idGhpcy5kaXNhYmxlUmlwcGxlIHx8IHRoaXMuZGlzYWJsZWQiPlxuPC9zcGFuPlxuJyxlbmNhcHN1bGF0aW9uOlBvLk5vbmUsZXhwb3J0QXM6Im1hdEJ1dHRvblRvZ2dsZSIsY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaCxpbnB1dHM6WyJkaXNhYmxlUmlwcGxlIl0saG9zdDp7IltjbGFzcy5tYXQtYnV0dG9uLXRvZ2dsZS1zdGFuZGFsb25lXSI6IiFidXR0b25Ub2dnbGVHcm91cCIsIltjbGFzcy5tYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2VkXSI6ImNoZWNrZWQiLCJbY2xhc3MubWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWRdIjoiZGlzYWJsZWQiLCJbY2xhc3MubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZF0iOidhcHBlYXJhbmNlID09PSAic3RhbmRhcmQiJyxjbGFzczoibWF0LWJ1dHRvbi10b2dnbGUiLCJbYXR0ci5hcmlhLWxhYmVsXSI6Im51bGwiLCJbYXR0ci5hcmlhLWxhYmVsbGVkYnldIjoibnVsbCIsIlthdHRyLmlkXSI6ImlkIiwiW2F0dHIubmFtZV0iOiJudWxsIiwiKGZvY3VzKSI6ImZvY3VzKCkiLHJvbGU6InByZXNlbnRhdGlvbiJ9LHN0eWxlczpbIi5tYXQtYnV0dG9uLXRvZ2dsZS1zdGFuZGFsb25lLC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cHtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmlubGluZS1mbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdzt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO2JvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYnV0dG9uLXRvZ2dsZS1zdGFuZGFsb25lLC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1idXR0b24tdG9nZ2xlLWdyb3Vwe291dGxpbmU6c29saWQgMXB4fS5tYXQtYnV0dG9uLXRvZ2dsZS1zdGFuZGFsb25lLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQsLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmR7Ym9yZGVyLXJhZGl1czo0cHh9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkLC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmR7b3V0bGluZTowfS5tYXQtYnV0dG9uLXRvZ2dsZS12ZXJ0aWNhbHtmbGV4LWRpcmVjdGlvbjpjb2x1bW59Lm1hdC1idXR0b24tdG9nZ2xlLXZlcnRpY2FsIC5tYXQtYnV0dG9uLXRvZ2dsZS1sYWJlbC1jb250ZW50e2Rpc3BsYXk6YmxvY2t9Lm1hdC1idXR0b24tdG9nZ2xle3doaXRlLXNwYWNlOm5vd3JhcDtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LWJ1dHRvbi10b2dnbGUgLm1hdC1pY29uIHN2Z3t2ZXJ0aWNhbC1hbGlnbjp0b3B9Lm1hdC1idXR0b24tdG9nZ2xlLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLXRvZ2dsZS1mb2N1cy1vdmVybGF5e29wYWNpdHk6MX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYnV0dG9uLXRvZ2dsZS5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi41fS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkOm5vdCgubWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWQpOmhvdmVyIC5tYXQtYnV0dG9uLXRvZ2dsZS1mb2N1cy1vdmVybGF5e29wYWNpdHk6LjA0fS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWQpIC5tYXQtYnV0dG9uLXRvZ2dsZS1mb2N1cy1vdmVybGF5e29wYWNpdHk6LjEyfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZCkgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouNX1AbWVkaWEoaG92ZXI6IG5vbmUpey5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkOm5vdCgubWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWQpOmhvdmVyIC5tYXQtYnV0dG9uLXRvZ2dsZS1mb2N1cy1vdmVybGF5e2Rpc3BsYXk6bm9uZX19Lm1hdC1idXR0b24tdG9nZ2xlLWxhYmVsLWNvbnRlbnR7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlLWxhYmVsLWNvbnRlbnR7cGFkZGluZzowIDEycHh9Lm1hdC1idXR0b24tdG9nZ2xlLWxhYmVsLWNvbnRlbnQ+Knt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Lm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7Ym9yZGVyLXJhZGl1czppbmhlcml0O3BvaW50ZXItZXZlbnRzOm5vbmU7b3BhY2l0eTowO3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlfS5tYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2VkIC5tYXQtYnV0dG9uLXRvZ2dsZS1mb2N1cy1vdmVybGF5e2JvcmRlci1ib3R0b206c29saWQgMzZweH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2VkIC5tYXQtYnV0dG9uLXRvZ2dsZS1mb2N1cy1vdmVybGF5e29wYWNpdHk6LjU7aGVpZ2h0OjB9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZC5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtYnV0dG9uLXRvZ2dsZS1mb2N1cy1vdmVybGF5e2JvcmRlci1ib3R0b206c29saWQgNTAwcHh9Lm1hdC1idXR0b24tdG9nZ2xlIC5tYXQtYnV0dG9uLXRvZ2dsZS1yaXBwbGV7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6bm9uZX0ubWF0LWJ1dHRvbi10b2dnbGUtYnV0dG9ue2JvcmRlcjowO2JhY2tncm91bmQ6bm9uZTtjb2xvcjppbmhlcml0O3BhZGRpbmc6MDttYXJnaW46MDtmb250OmluaGVyaXQ7b3V0bGluZTpub25lO3dpZHRoOjEwMCU7Y3Vyc29yOnBvaW50ZXJ9Lm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVkIC5tYXQtYnV0dG9uLXRvZ2dsZS1idXR0b257Y3Vyc29yOmRlZmF1bHR9Lm1hdC1idXR0b24tdG9nZ2xlLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH1cbiJdfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6T2h0LGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltDaHRdfV19LHt0eXBlOkhofSx7dHlwZTpjaH0se3R5cGU6cHp9LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpScixhcmdzOlsidGFiaW5kZXgiXX1dfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W19odF19XX1dfSkse2FyaWFMYWJlbGxlZGJ5Olt7dHlwZTp5XyxhcmdzOlsiYXJpYS1sYWJlbGxlZGJ5Il19XSxjaGFuZ2U6W3t0eXBlOl9ffV0sdGFiSW5kZXg6W3t0eXBlOnlffV0sYXBwZWFyYW5jZTpbe3R5cGU6eV99XSxjaGVja2VkOlt7dHlwZTp5X31dLGRpc2FibGVkOlt7dHlwZTp5X31dLGlkOlt7dHlwZTp5X31dLG5hbWU6W3t0eXBlOnlffV0sYXJpYUxhYmVsOlt7dHlwZTp5XyxhcmdzOlsiYXJpYS1sYWJlbCJdfV0sX2J1dHRvbkVsZW1lbnQ6W3t0eXBlOkZyLGFyZ3M6WyJidXR0b24iXX1dLHZhbHVlOlt7dHlwZTp5X31dfSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyBraHR7fWtodC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8a2h0KX0sa2h0Lsm1bW9kPVpvKHt0eXBlOmtodH0pLGtodC7JtWluaj1jbyh7aW1wb3J0czpbW1R6LG1IXSxUel19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKGtodCx7ZGVjbGFyYXRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuW09odCx3aHRdfSxpbXBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW1R6LG1IXX0sZXhwb3J0czpmdW5jdGlvbigpe3JldHVybltUeixPaHQsd2h0XX19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGtodCxbe3R5cGU6a18sYXJnczpbe2ltcG9ydHM6W1R6LG1IXSxleHBvcnRzOltUeixPaHQsd2h0XSxkZWNsYXJhdGlvbnM6W09odCx3aHRdfV19XSxudWxsLG51bGwpO2NsYXNzIFNodHt9U2h0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxTaHQpfSxTaHQuybVtb2Q9Wm8oe3R5cGU6U2h0fSksU2h0Lsm1aW5qPWNvKHtpbXBvcnRzOltbQnYsbVddXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oU2h0LHtkZWNsYXJhdGlvbnM6W2tndF0saW1wb3J0czpbQnYsbVddLGV4cG9ydHM6W2tndF19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFNodCxbe3R5cGU6a18sYXJnczpbe2RlY2xhcmF0aW9uczpba2d0XSxleHBvcnRzOltrZ3RdLGltcG9ydHM6W0J2LG1XXX1dfV0sbnVsbCxudWxsKTtjbGFzcyBEaHR7fURodC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8RGh0KX0sRGh0Lsm1bW9kPVpvKHt0eXBlOkRodH0pLERodC7JtWluaj1jbyh7aW1wb3J0czpbW0J2LFNodCx6SCxraHQseVksZEcsbVcsUFgsY1RdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oRGh0LHtkZWNsYXJhdGlvbnM6W0FndCxEZ3QsRWd0XSxpbXBvcnRzOltCdixTaHQsekgsa2h0LHlZLGRHLG1XLFBYLGNUXSxleHBvcnRzOltBZ3RdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihEaHQsW3t0eXBlOmtfLGFyZ3M6W3tkZWNsYXJhdGlvbnM6W0FndCxEZ3QsRWd0XSxleHBvcnRzOltBZ3RdLGltcG9ydHM6W0J2LFNodCx6SCxraHQseVksZEcsbVcsUFgsY1RdfV19XSxudWxsLG51bGwpO2NsYXNzIEVodHt9RWh0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxFaHQpfSxFaHQuybVtb2Q9Wm8oe3R5cGU6RWh0fSksRWh0Lsm1aW5qPWNvKHtpbXBvcnRzOltbYmh0LEJ2LExndCxmMSx6SCxkRyxBWSxEaHQsaUZdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oRWh0LHtkZWNsYXJhdGlvbnM6W2RndCxwZ3QsZmd0LGhndCx5Z3QsQ2d0LHpndCxIZ3QsVTIsVzIsT2d0LFBndF0saW1wb3J0czpbYmh0LEJ2LExndCxmMSx6SCxkRyxBWSxEaHQsaUZdLGV4cG9ydHM6W0hndF19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEVodCxbe3R5cGU6a18sYXJnczpbe2RlY2xhcmF0aW9uczpbZGd0LHBndCxmZ3QsaGd0LHlndCxDZ3Qsemd0LEhndCxVMixXMixPZ3QsUGd0XSxleHBvcnRzOltIZ3RdLGltcG9ydHM6W2JodCxCdixMZ3QsZjEsekgsZEcsQVksRGh0LGlGXX1dfV0sbnVsbCxudWxsKTtjbGFzcyBBaHR7fWZ1bmN0aW9uIFJodCgpe3JldHVyblt7YWN0aW9uQ3JlYXRvcjpsUSxhbGVydEZyb21BY3Rpb246dD0+e2NvbnN0e3dhc1Bpbm5lZDplLGNhbkNyZWF0ZU5ld1BpbnM6bn09dDtyZXR1cm4gZXx8bj9udWxsOntsb2NhbGl6ZWRNZXNzYWdlOiJNYXggcGluIGxpbWl0IGV4Y2VlZGVkLiBSZW1vdmUgZXhpc3RpbmcgcGlucyBiZWZvcmUgYWRkaW5nIG1vcmUuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9pc3N1ZXMvNDI0MiJ9fX1dfWZ1bmN0aW9uIFRodCgpe3JldHVybiB6ayhXVCwodD0+KHtzY2FsYXJTbW9vdGhpbmc6dH0pKSl9ZnVuY3Rpb24gTmh0KCl7cmV0dXJuIHprKFZULCh0PT4oe2lnbm9yZU91dGxpZXJzOnR9KSkpfWZ1bmN0aW9uIElodCgpe3JldHVybiB6ayhCVCwodD0+KHt0b29sdGlwU29ydFN0cmluZzpTdHJpbmcodCl9KSkpfUFodC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8QWh0KX0sQWh0Lsm1bW9kPVpvKHt0eXBlOkFodH0pLEFodC7JtWluaj1jbyh7aW1wb3J0czpbW0J2LERodCxqZ3QsRWh0XV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKEFodCx7ZGVjbGFyYXRpb25zOltGZ3RdLGltcG9ydHM6W0J2LERodCxqZ3QsRWh0XSxleHBvcnRzOltGZ3RdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihBaHQsW3t0eXBlOmtfLGFyZ3M6W3tkZWNsYXJhdGlvbnM6W0ZndF0sZXhwb3J0czpbRmd0XSxpbXBvcnRzOltCdixEaHQsamd0LEVodF19XX1dLG51bGwsbnVsbCk7Y2xhc3Mgemh0e316aHQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHpodCl9LHpodC7JtW1vZD1abyh7dHlwZTp6aHR9KSx6aHQuybVpbmo9Y28oe3Byb3ZpZGVyczpbe3Byb3ZpZGU6d1EsdXNlRmFjdG9yeTpTUSxkZXBzOltrUV19LHtwcm92aWRlOmtRLHVzZVZhbHVlOkNUfV0saW1wb3J0czpbW0J2LEVELENBLGJxLmZvclBsdWdpbihkUixGZ3QpLGRULEFodCxpUy5mb3JGZWF0dXJlKF9ULENRLHdRKSxMUy5mb3JGZWF0dXJlKFtQUV0pLHZBLnJlZ2lzdGVyQWxlcnRBY3Rpb25zKFJodCksa1IuZGVmaW5lR2xvYmFsU2V0dGluZyhUaHQpLGtSLmRlZmluZUdsb2JhbFNldHRpbmcoTmh0KSxrUi5kZWZpbmVHbG9iYWxTZXR0aW5nKElodCldXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oemh0LHtpbXBvcnRzOltCdixFRCxDQSxicSxkVCxBaHQsb1MsRlMsdkEsa1Isa1Isa1JdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYih6aHQsW3t0eXBlOmtfLGFyZ3M6W3tpbXBvcnRzOltCdixFRCxDQSxicS5mb3JQbHVnaW4oZFIsRmd0KSxkVCxBaHQsaVMuZm9yRmVhdHVyZShfVCxDUSx3USksTFMuZm9yRmVhdHVyZShbUFFdKSx2QS5yZWdpc3RlckFsZXJ0QWN0aW9ucyhSaHQpLGtSLmRlZmluZUdsb2JhbFNldHRpbmcoVGh0KSxrUi5kZWZpbmVHbG9iYWxTZXR0aW5nKE5odCksa1IuZGVmaW5lR2xvYmFsU2V0dGluZyhJaHQpXSxwcm92aWRlcnM6W3twcm92aWRlOndRLHVzZUZhY3Rvcnk6U1EsZGVwczpba1FdfSx7cHJvdmlkZTprUSx1c2VWYWx1ZTpDVH1dLGVudHJ5Q29tcG9uZW50czpbRmd0XX1dfV0sbnVsbCxudWxsKTtjb25zdCBIaHQ9Im5wbWkiO3ZhciBGaHQsTGh0LEJodCxWaHQ7IShmdW5jdGlvbih0KXt0W3QuQU5EPTBdPSJBTkQifSkoRmh0fHwoRmh0PXt9KSksKGZ1bmN0aW9uKHQpe3RbdC5NRVRSSUM9MF09Ik1FVFJJQyIsdFt0Lk9QRVJBVE9SPTFdPSJPUEVSQVRPUiJ9KShMaHR8fChMaHQ9e30pKSwoZnVuY3Rpb24odCl7dFt0LkRFRkFVTFQ9MF09IkRFRkFVTFQiLHRbdC5FTUJFRERJTkdTPTFdPSJFTUJFRERJTkdTIn0pKEJodHx8KEJodD17fSkpLChmdW5jdGlvbih0KXt0W3QuREVTQ0VORElORz0wXT0iREVTQ0VORElORyIsdFt0LkFTQ0VORE5HPTFdPSJBU0NFTkRORyIsdFt0LlNJTUlMQVI9Ml09IlNJTUlMQVIiLHRbdC5ESVNTSU1JTEFSPTNdPSJESVNTSU1JTEFSIn0pKFZodHx8KFZodD17fSkpO2NsYXNzIGpodHt9amh0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxqaHQpfSxqaHQuybVjbXA9VW8oe3R5cGU6amh0LHNlbGVjdG9yczpbWyJucG1pLWluYWN0aXZlLXZpZXciXV0sZGVjbHM6Nix2YXJzOjAsY29uc3RzOltbMSwiY29udGFpbmVyIl0sWzEsInRpdGxlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihPdSgwLCJkaXYiKSxPdSgxLCJkaXYiLDApLE91KDIsImRpdiIsMSksTWYoMywiblBNSSBpcyBpbmFjdGl2ZSBiZWNhdXNlIG5vIGRhdGEgaXMgYXZhaWxhYmxlLiIpLFB1KCksT3UoNCwiZGl2IiksTWYoNSwiIFRvIHVzZSB0aGUgblBNSSwgY2FsY3VsYXRlIG5QTUkgdmFsdWVzLCBhbmQgbG9nIHRoZW0gdXNpbmcgdGhlIHN1bW1hcnkgd3JpdGVyLiAiKSxQdSgpLFB1KCksUHUoKSl9LHN0eWxlczpbIi5jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdIHtcbiAgaGVpZ2h0OiAxMDAlO1xuICBmb250LWZhbWlseTogUm9ib3RvO1xuICBmb250LXNpemU6IDE1cHg7XG4gIHBhZGRpbmc6IDUwcHg7XG59XG5cbi50aXRsZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICBmb250LXNpemU6IDEzNSU7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBtYXJnaW4tYm90dG9tOiAyNXB4O1xufSJdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihqaHQsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoibnBtaS1pbmFjdGl2ZS12aWV3Iix0ZW1wbGF0ZVVybDoiLi9pbmFjdGl2ZV9jb21wb25lbnQubmcuaHRtbCIsc3R5bGVVcmxzOlsiLi9pbmFjdGl2ZV9jb21wb25lbnQuY3NzIl19XX1dLG51bGwsbnVsbCk7Y29uc3QgVWh0PUZrKEhodCksV2h0PXprKFVodCwodD0+dC5wbHVnaW5EYXRhTG9hZGVkLnN0YXRlKSksR2h0PXprKFVodCwodD0+dC5hbm5vdGF0aW9uRGF0YSkpLFlodD16ayhVaHQsKHQ9PnQucnVuVG9NZXRyaWNzKSkscWh0PXprKFVodCwodD0+dC5lbWJlZGRpbmdEYXRhU2V0KSksWmh0PXprKFVodCwodD0+dC5zZWxlY3RlZEFubm90YXRpb25zKSksWGh0PXprKFVodCwodD0+dC5mbGFnZ2VkQW5ub3RhdGlvbnMpKSxLaHQ9emsoVWh0LCh0PT50LmhpZGRlbkFubm90YXRpb25zKSksSmh0PXprKFVodCwodD0+dC5hbm5vdGF0aW9uc1JlZ2V4KSksUWh0PXprKFVodCwodD0+dC5tZXRyaWNzUmVnZXgpKSwkaHQ9emsoVWh0LCh0PT50Lm1ldHJpY0FyaXRobWV0aWMpKSx0YnQ9emsoVWh0LCh0PT50Lm1ldHJpY0ZpbHRlcnMpKSxlYnQ9emsoVWh0LCh0PT50LnNvcnQpKSxuYnQ9emsoVWh0LCh0PT50LnBjRXhwYW5kZWQpKSxvYnQ9emsoVWh0LCh0PT50LmFubm90YXRpb25zRXhwYW5kZWQpKSxpYnQ9emsoVWh0LCh0PT50LnNpZGViYXJFeHBhbmRlZCkpLGFidD16ayhVaHQsKHQ9PnQuc2hvd0NvdW50cykpLHJidD16ayhVaHQsKHQ9PnQuc2hvd0hpZGRlbkFubm90YXRpb25zKSksc2J0PXprKFVodCwodD0+dC52aWV3QWN0aXZlKSksbGJ0PXprKFVodCwodD0+dC5zaWRlYmFyV2lkdGgpKSxjYnQ9emsoVWh0LCh0PT50LmVtYmVkZGluZ3NNZXRyaWMpKSxkYnQ9emsoVWh0LCh0PT50LmVtYmVkZGluZ3NTaWRlYmFyV2lkdGgpKSxwYnQ9emsoVWh0LCh0PT50LmVtYmVkZGluZ3NTaWRlYmFyRXhwYW5kZWQpKSxtYnQ9V3coIltOUE1JXSBuUE1JIExvYWRlZCIpLHVidD1XdygiW05QTUldIG5QTUkgUGx1Z2luIERhdGEgUmVxdWVzdGVkIiksZmJ0PVd3KCJbTlBNSV0gblBNSSBQbHVnaW4gRGF0YSBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxnYnQ9V3coIltOUE1JXSBuUE1JIFBsdWdpbiBEYXRhIFJlcXVlc3QgRmFpbGVkIiksaGJ0PVd3KCJbTlBNSV0gQWRkaW5nL1JlbW92aW5nIEFubm90YXRpb25zIHRvL2Zyb20gU2VsZWN0ZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxiYnQ9V3coIltOUE1JXSBBbm5vdGF0aW9ucyBTZXQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSx5YnQ9V3coIltOUE1JXSBDbGVhcmluZyB0aGUgQW5ub3RhdGlvbiBTZWxlY3Rpb24iKSxfYnQ9V3coIltOUE1JXSBBZGRpbmcvUmVtb3ZpbmcgQW5ub3RhdGlvbnMgdG8vZnJvbSBGbGFnZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksQ2J0PVd3KCJbTlBNSV0gQWRkaW5nL1JlbW92aW5nIEFubm90YXRpb25zIHRvL2Zyb20gSGlkZGVuIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksTWJ0PVd3KCJbTlBNSV0gQW5ub3RhdGlvbnMgUmVnZXggQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHZidD1XdygiW05QTUldIE1ldHJpY3MgUmVnZXggQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHhidD1XdygiW05QTUldIE1ldHJpYyBGaWx0ZXIgQWRkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxPYnQ9V3coIltOUE1JXSBNZXRyaWMgRmlsdGVyIFJlbW92ZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxQYnQ9V3coIltOUE1JXSBNZXRyaWMgRmlsdGVyIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSx3YnQ9V3coIltOUE1JXSBBbm5vdGF0aW9uIFNvcnQgQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGtidD1XdygiW05QTUldIFNpbWlsYXJpdHkgU29ydCBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksU2J0PVd3KCJbTlBNSV0gVG9nZ2xlIFBDIEV4cGFuZGVkIiksRGJ0PVd3KCJbTlBNSV0gVG9nZ2xlIEFubm90YXRpb25zIEV4cGFuZGVkIiksRWJ0PVd3KCJbTlBNSV0gVG9nZ2xlIFNpZGViYXIgRXhwYW5kZWQiKSxBYnQ9V3coIltOUE1JXSBTaG93IENvdW50cyBUb2dnbGVkIiksUmJ0PVd3KCJbTlBNSV0gU2hvdyBIaWRkZW4gQW5ub3RhdGlvbnMgVG9nZ2xlZCIpLFRidD1XdygiW05QTUldIEVtYmVkZGluZ3MgVmlldyBUb2dnbGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksTmJ0PVd3KCJbTlBNSV0gU2lkZWJhciBXaWR0aCBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksSWJ0PVd3KCJbTlBNSV0gRW1iZWRkaW5ncyBTaWRlYmFyIFdpZHRoIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSx6YnQ9V3coIltOUE1JXSBUb2dnbGUgRW1iZWRkaW5ncyBTaWRlYmFyIEV4cGFuZGVkIiksSGJ0PVd3KCJbTlBNSV0gQ2hhbmdlIEVtYmVkZGluZyBEYXRhU2V0Iix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSk7ZnVuY3Rpb24gRmJ0KHQpe3JldHVybiB0LnN0YXJ0c1dpdGgoImNvdW50QCIpfWZ1bmN0aW9uIExidCh0KXtyZXR1cm4gdC5zdGFydHNXaXRoKCJuUE1JQCIpfHx0LnN0YXJ0c1dpdGgoIm5QTUlfZGlmZkAiKX1mdW5jdGlvbiBCYnQodCl7cmV0dXJuIHQuc3RhcnRzV2l0aCgiblBNSUAiKX1mdW5jdGlvbiBWYnQodCl7cmV0dXJuIHQuc3BsaXQoIkAiLDIpWzFdfWNvbnN0IGpidD1tUyh7cGx1Z2luRGF0YUxvYWRlZDp7c3RhdGU6QkUuTk9UX0xPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6bnVsbH0sYW5ub3RhdGlvbkRhdGE6e30scnVuVG9NZXRyaWNzOnt9LHNlbGVjdGVkQW5ub3RhdGlvbnM6W10sZmxhZ2dlZEFubm90YXRpb25zOltdLGhpZGRlbkFubm90YXRpb25zOltdLGFubm90YXRpb25zUmVnZXg6IiIsbWV0cmljc1JlZ2V4OiIiLG1ldHJpY0FyaXRobWV0aWM6W10sbWV0cmljRmlsdGVyczp7fSxzb3J0OnttZXRyaWM6IiIsb3JkZXI6Vmh0LkRFU0NFTkRJTkd9LHBjRXhwYW5kZWQ6ITAsYW5ub3RhdGlvbnNFeHBhbmRlZDohMCxzaWRlYmFyRXhwYW5kZWQ6ITAsc2hvd0NvdW50czohMCxzaG93SGlkZGVuQW5ub3RhdGlvbnM6ITEsc2lkZWJhcldpZHRoOjMwMCx2aWV3QWN0aXZlOkJodC5ERUZBVUxULGVtYmVkZGluZ3NNZXRyaWM6IiIsZW1iZWRkaW5nc1NpZGViYXJXaWR0aDo1MDAsZW1iZWRkaW5nc1NpZGViYXJFeHBhbmRlZDohMH0scFModWJ0LCh0PT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3BsdWdpbkRhdGFMb2FkZWQ6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQucGx1Z2luRGF0YUxvYWRlZCkse3N0YXRlOkJFLkxPQURJTkd9KX0pKSkscFMoZ2J0LCh0PT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3BsdWdpbkRhdGFMb2FkZWQ6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQucGx1Z2luRGF0YUxvYWRlZCkse3N0YXRlOkJFLkZBSUxFRH0pfSkpKSxwUyhmYnQsKCh0LHthbm5vdGF0aW9uRGF0YTplLG1ldHJpY3M6bixlbWJlZGRpbmdEYXRhU2V0Om99KT0+e2NvbnN0IGk9e307Zm9yKGNvbnN0IHQgaW4gbil7aVt0XT1bXTtmb3IoY29uc3QgZSBvZiBuW3RdKUxidChlKSYmaVt0XS5wdXNoKGUpfXJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3J1blRvTWV0cmljczppLGFubm90YXRpb25EYXRhOmUsZW1iZWRkaW5nRGF0YVNldDpvLHBsdWdpbkRhdGFMb2FkZWQ6e3N0YXRlOkJFLkxPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6RGF0ZS5ub3coKX19KX0pKSxwUyhoYnQsKCh0LHthbm5vdGF0aW9uczplfSk9Pntjb25zdCBuPW5ldyBTZXQoWy4uLnQuc2VsZWN0ZWRBbm5vdGF0aW9ucywuLi5lXSk7aWYobi5zaXplPT09dC5zZWxlY3RlZEFubm90YXRpb25zLmxlbmd0aClmb3IoY29uc3QgdCBvZiBlKW4uZGVsZXRlKHQpO3JldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3NlbGVjdGVkQW5ub3RhdGlvbnM6Wy4uLm5dfSl9KSkscFMoYmJ0LCgodCx7YW5ub3RhdGlvbnM6ZX0pPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3NlbGVjdGVkQW5ub3RhdGlvbnM6ZX0pKSkscFMoeWJ0LCh0PT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3NlbGVjdGVkQW5ub3RhdGlvbnM6W119KSkpLHBTKF9idCwoKHQse2Fubm90YXRpb25zOmV9KT0+e2NvbnN0IG49bmV3IFNldChbLi4udC5mbGFnZ2VkQW5ub3RhdGlvbnMsLi4uZV0pO2lmKG4uc2l6ZT09PXQuZmxhZ2dlZEFubm90YXRpb25zLmxlbmd0aClmb3IoY29uc3QgdCBvZiBlKW4uZGVsZXRlKHQpO3JldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2ZsYWdnZWRBbm5vdGF0aW9uczpbLi4ubl0sc2VsZWN0ZWRBbm5vdGF0aW9uczpbXX0pfSkpLHBTKENidCwoKHQse2Fubm90YXRpb25zOmV9KT0+e2NvbnN0IG49bmV3IFNldChbLi4udC5oaWRkZW5Bbm5vdGF0aW9ucywuLi5lXSk7aWYobi5zaXplPT09dC5oaWRkZW5Bbm5vdGF0aW9ucy5sZW5ndGgpZm9yKGNvbnN0IHQgb2YgZSluLmRlbGV0ZSh0KTtyZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtoaWRkZW5Bbm5vdGF0aW9uczpbLi4ubl0sc2VsZWN0ZWRBbm5vdGF0aW9uczpbXX0pfSkpLHBTKE1idCwoKHQse3JlZ2V4OmV9KT0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHthbm5vdGF0aW9uc1JlZ2V4OmV9KSkpLHBTKHZidCwoKHQse3JlZ2V4OmV9KT0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHttZXRyaWNzUmVnZXg6ZX0pKSkscFMoeGJ0LCgodCx7bWV0cmljOmV9KT0+e2lmKHQubWV0cmljRmlsdGVyc1tlXSlyZXR1cm4gdDtjb25zdCBuPVtdO3JldHVybiAwIT09dC5tZXRyaWNBcml0aG1ldGljLmxlbmd0aCYmbi5wdXNoKHtraW5kOkxodC5PUEVSQVRPUixvcGVyYXRvcjpGaHQuQU5EfSksbi5wdXNoKHtraW5kOkxodC5NRVRSSUMsbWV0cmljOmV9KSxPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse21ldHJpY0FyaXRobWV0aWM6Wy4uLnQubWV0cmljQXJpdGhtZXRpYywuLi5uXSxtZXRyaWNGaWx0ZXJzOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0Lm1ldHJpY0ZpbHRlcnMpLHtbZV06e21heDoxLG1pbjotMSxpbmNsdWRlTmFOOiExfX0pLHNvcnQ6e21ldHJpYzplLG9yZGVyOlZodC5ERVNDRU5ESU5HfX0pfSkpLHBTKE9idCwoKHQse21ldHJpYzplfSk9PntpZighdC5tZXRyaWNGaWx0ZXJzW2VdKXJldHVybiB0O2xldCBuPTAsbz0wLGk9Mjtjb25zdCBhPWFSKHQubWV0cmljRmlsdGVycyxbInN5bWJvbCI9PXR5cGVvZiBlP2U6ZSsiIl0pO2Zvcihjb25zdCBvIGluIHQubWV0cmljQXJpdGhtZXRpYyl7Y29uc3QgaT10Lm1ldHJpY0FyaXRobWV0aWNbb107aS5raW5kPT09TGh0Lk1FVFJJQyYmaS5tZXRyaWM9PT1lJiYobj1wYXJzZUludChvKSl9cmV0dXJuIDAhPT1uJiYobz1uLTEsaT1uKzEpLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7bWV0cmljQXJpdGhtZXRpYzpbLi4udC5tZXRyaWNBcml0aG1ldGljLnNsaWNlKDAsbyksLi4udC5tZXRyaWNBcml0aG1ldGljLnNsaWNlKGkpXSxtZXRyaWNGaWx0ZXJzOmF9KX0pKSxwUyhQYnQsKCh0LHttZXRyaWM6ZSxtYXg6bixtaW46byxpbmNsdWRlTmFOOml9KT0+dC5tZXRyaWNGaWx0ZXJzW2VdP09iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7bWV0cmljRmlsdGVyczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5tZXRyaWNGaWx0ZXJzKSx7W2VdOnttYXg6bixtaW46byxpbmNsdWRlTmFOOml9fSl9KTp0KSkscFMod2J0LCgodCx7bWV0cmljOmV9KT0+e2NvbnN0IG49e21ldHJpYzplLG9yZGVyOlZodC5ERVNDRU5ESU5HfTtyZXR1cm4gdC5zb3J0Lm1ldHJpYz09PWUmJnQuc29ydC5vcmRlcj09PVZodC5ERVNDRU5ESU5HJiYobi5vcmRlcj1WaHQuQVNDRU5ETkcpLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7c29ydDpufSl9KSkscFMoa2J0LCgodCx7YW5ub3RhdGlvbjplfSk9Pntjb25zdCBuPXttZXRyaWM6ZSxvcmRlcjpWaHQuU0lNSUxBUn07cmV0dXJuIHQuc29ydC5tZXRyaWM9PT1lJiZ0LnNvcnQub3JkZXI9PT1WaHQuU0lNSUxBUiYmKG4ub3JkZXI9Vmh0LkRJU1NJTUlMQVIpLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7c29ydDpufSl9KSkscFMoU2J0LCh0PT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3BjRXhwYW5kZWQ6IXQucGNFeHBhbmRlZH0pKSkscFMoRGJ0LCh0PT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2Fubm90YXRpb25zRXhwYW5kZWQ6IXQuYW5ub3RhdGlvbnNFeHBhbmRlZH0pKSkscFMoRWJ0LCh0PT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3NpZGViYXJFeHBhbmRlZDohdC5zaWRlYmFyRXhwYW5kZWR9KSkpLHBTKEFidCwodD0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtzaG93Q291bnRzOiF0LnNob3dDb3VudHN9KSkpLHBTKFJidCwodD0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtzaG93SGlkZGVuQW5ub3RhdGlvbnM6IXQuc2hvd0hpZGRlbkFubm90YXRpb25zfSkpKSxwUyhUYnQsKCh0LHttZXRyaWM6ZX0pPT57bGV0IG49Qmh0LkVNQkVERElOR1Msbz1lO3JldHVybiBlPT09dC5lbWJlZGRpbmdzTWV0cmljJiYobj1CaHQuREVGQVVMVCxvPSIiKSxPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3ZpZXdBY3RpdmU6bixlbWJlZGRpbmdzTWV0cmljOm99KX0pKSxwUyhOYnQsKCh0LHtzaWRlYmFyV2lkdGg6ZX0pPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3NpZGViYXJXaWR0aDplfSkpKSxwUyhJYnQsKCh0LHtzaWRlYmFyV2lkdGg6ZX0pPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2VtYmVkZGluZ3NTaWRlYmFyV2lkdGg6ZX0pKSkscFMoemJ0LCh0PT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2VtYmVkZGluZ3NTaWRlYmFyRXhwYW5kZWQ6IXQuZW1iZWRkaW5nc1NpZGViYXJFeHBhbmRlZH0pKSkscFMoSGJ0LCgodCx7ZGF0YVNldDplfSk9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7ZW1iZWRkaW5nRGF0YVNldDplfSkpKSk7ZnVuY3Rpb24gVWJ0KHQsZSl7cmV0dXJuIGpidCh0LGUpfWZ1bmN0aW9uIFdidCh0LGUpezEmdCYmd3UoMCwibWF0LWljb24iLDcpfWZ1bmN0aW9uIEdidCh0LGUpe2lmKDEmdCYmKE91KDAsIm1hdC1vcHRpb24iLDgpLE1mKDEpLFB1KCkpLDImdCl7Y29uc3QgdD1lLiRpbXBsaWNpdDt2dSgidmFsdWUiLHQpLEpjKDEpLHZmKHQpfX1jbGFzcyBZYnR7Y29uc3RydWN0b3IoKXt0aGlzLm9uUmVnZXhGaWx0ZXJWYWx1ZUNoYW5nZT1uZXcgQWIsdGhpcy5vbkFkZEZpbHRlcj1uZXcgQWJ9b25PcHRpb25TZWxlY3RlZCh0LGUpe3RoaXMub25BZGRGaWx0ZXIuZW1pdCh0Lm9wdGlvbi52YWx1ZSksZS52YWx1ZT0iIn19WWJ0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxZYnQpfSxZYnQuybVjbXA9VW8oe3R5cGU6WWJ0LHNlbGVjdG9yczpbWyJtZXRyaWMtc2VhcmNoLWNvbXBvbmVudCJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MiZlJiZhZigidmFsaWQiLG4uaXNSZWdleEZpbHRlclZhbGlkKX0saW5wdXRzOntjb21wbGV0aW9uczoiY29tcGxldGlvbnMiLHJlZ2V4RmlsdGVyVmFsdWU6InJlZ2V4RmlsdGVyVmFsdWUiLGlzUmVnZXhGaWx0ZXJWYWxpZDoiaXNSZWdleEZpbHRlclZhbGlkIn0sb3V0cHV0czp7b25SZWdleEZpbHRlclZhbHVlQ2hhbmdlOiJvblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2UiLG9uQWRkRmlsdGVyOiJvbkFkZEZpbHRlciJ9LGRlY2xzOjcsdmFyczo0LGNvbnN0czpbWyJzdmdJY29uIiwic2VhcmNoXzI0cHgiXSxbIm1hdElucHV0IiwiIiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwicGxhY2Vob2xkZXIiLCJBZGQgTWV0cmljIEZpbHRlciIsMywidmFsdWUiLCJtYXRBdXRvY29tcGxldGUiLCJpbnB1dCJdLFsibWF0SW5wdXQiLCIiXSxbInN2Z0ljb24iLCJlcnJvcl8yNHB4IiwiY2xhc3MiLCJlcnJvci1pY29uIiwibWF0VG9vbHRpcCIsIkludmFsaWQgcmVnZXggZmlsdGVyLiBUaGUgcmVzdWx0IG1heSBiZSBzdGFsZS4iLDQsIm5nSWYiXSxbImF1dG9BY3RpdmVGaXJzdE9wdGlvbiIsIiIsMywib3B0aW9uU2VsZWN0ZWQiXSxbImZpbHRlck1hdGNoZXMiLCJtYXRBdXRvY29tcGxldGUiXSxbMywidmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsic3ZnSWNvbiIsImVycm9yXzI0cHgiLCJtYXRUb29sdGlwIiwiSW52YWxpZCByZWdleCBmaWx0ZXIuIFRoZSByZXN1bHQgbWF5IGJlIHN0YWxlLiIsMSwiZXJyb3ItaWNvbiJdLFszLCJ2YWx1ZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7aWYoMSZlKXtjb25zdCB0PUV1KCk7d3UoMCwibWF0LWljb24iLDApLE91KDEsImlucHV0IiwxLDIpLE51KCJpbnB1dCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25SZWdleEZpbHRlclZhbHVlQ2hhbmdlLmVtaXQoZS50YXJnZXQudmFsdWUpfSkpLFB1KCksV20oMyxXYnQsMSwwLCJtYXQtaWNvbiIsMyksT3UoNCwibWF0LWF1dG9jb21wbGV0ZSIsNCw1KSxOdSgib3B0aW9uU2VsZWN0ZWQiLChmdW5jdGlvbiBlKG8pe3JhKHQpO2NvbnN0IGk9R20oMik7cmV0dXJuIG4ub25PcHRpb25TZWxlY3RlZChvLGkpfSkpLFdtKDYsR2J0LDIsMiwibWF0LW9wdGlvbiIsNiksUHUoKX1pZigyJmUpe2NvbnN0IHQ9R20oNSk7SmMoMSksdnUoInZhbHVlIixuLnJlZ2V4RmlsdGVyVmFsdWUpKCJtYXRBdXRvY29tcGxldGUiLHQpLEpjKDIpLHZ1KCJuZ0lmIiwhbi5pc1JlZ2V4RmlsdGVyVmFsaWQpLEpjKDMpLHZ1KCJuZ0Zvck9mIixuLmNvbXBsZXRpb25zKX19LGRpcmVjdGl2ZXM6W2NHLEVZLG0xLGF2LG4xLG92LFBIXSxzdHlsZXM6WycubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1iYWRnZS1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo5cHh9Lm1hdC1iYWRnZS1sYXJnZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4fS5tYXQtaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWhlYWRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAyNHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE1cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjgzKS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1oNltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC42NykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtYm9keS1zdHJvbmdbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MCAwIDEycHh9Lm1hdC1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FwdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTJweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6MzAwIDExMnB4LzExMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wNWVtO21hcmdpbjowIDAgNTZweH0ubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNTZweC81NnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMmVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNDVweC80OHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMDVlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDM0cHgvNDBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1yYWlzZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3Ryb2tlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZsYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mYWJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW1pbmktZmFiW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtYnV0dG9uLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FyZC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjBweH0ubWF0LWNhcmQtc3VidGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hlY2tib3gtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC10cmFpbGluZy1pY29uLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC1yZW1vdmUubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxOHB4fS5tYXQtdGFibGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWhlYWRlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb290ZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jYWxlbmRhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FsZW5kYXItYm9keVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYWxlbmRhci1wZXJpb2QtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWRpYWxvZy10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTI1O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTUwJTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjVlbTt3aWR0aDoxLjVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW07bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41ZW0gMDtib3JkZXItdG9wOi44NDM3NWVtIHNvbGlkIHRyYW5zcGFyZW50fS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3RvcDotMC44NDM3NWVtO3BhZGRpbmctdG9wOi44NDM3NWVtfS5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjc1JTttYXJnaW4tdG9wOi42NjY2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNzkxNjY2NjY2N2VtKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAycHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyM2VtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzUzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi41NDE2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNjY2NjY2NjY2N2VtKX1AbWVkaWEgcHJpbnR7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIyZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIxZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMmVtKSBzY2FsZSgwLjc1KX19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjI1ZW0gMCAuNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4wOTM3NWVtO21hcmdpbi10b3A6LTAuNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MWVtIDAgMWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjg0Mzc1ZW07bWFyZ2luLXRvcDotMC4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH1pbnB1dC5tYXQtaW5wdXQtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDotMC4wNjI1ZW19Lm1hdC1tZW51LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1wYWdpbmF0b3JbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXBhZ2luYXRvci1wYWdlLXNpemVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3RbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXN0ZXBwZXItdmVydGljYWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc3RlcC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0Om5vcm1hbH0ubWF0LXN0ZXAtbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRhYi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjB9Lm1hdC10b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTZweH0ubWF0LW9wdGdyb3VwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LXNpbXBsZS1zbmFja2Jhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbltfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRyZWVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbmVzdGVkLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4fS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVdOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtcmlwcGxlLm1hdC1yaXBwbGUtdW5ib3VuZGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6NTAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7dHJhbnNmb3JtOnNjYWxlKDApfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpub25lfS5jZGstdmlzdWFsbHktaGlkZGVuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7bGVmdDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmVtcHR5e2Rpc3BsYXk6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LXBhbmVbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOmF1dG87Ym94LXNpemluZzpib3JkZXItYm94O3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7bWF4LXdpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlfS5jZGstb3ZlcmxheS1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKTtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5Oi42fS5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjMyKX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTowfS5jZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO292ZXJmbG93LXk6c2Nyb2xsfUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnR7fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5ke30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxse2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCAwcyAxbXN9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06bm90KDotd2Via2l0LWF1dG9maWxsKXthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIDBzIDFtc310ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemVbX25nY29udGVudC0lQ09NUCVde3Jlc2l6ZTpub25lfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmdbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OmF1dG8gIWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW4gIWltcG9ydGFudH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nLWZpcmVmb3hbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OjAgIWltcG9ydGFudH0ubWF0LWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX1tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17ZmxleDpub25lO21hcmdpbi1yaWdodDo1cHh9W19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmZsZXg7cGFkZGluZzowIDEwcHg7cG9zaXRpb246cmVsYXRpdmU7Zm9udC1zaXplOi45ZW19W19uZ2hvc3QtJUNPTVAlXTpub3QoLnZhbGlkKXtjb2xvcjojYzYyODI4fVtfbmdob3N0LSVDT01QJV06bm90KC52YWxpZCkgICBpbnB1dFtfbmdjb250ZW50LSVDT01QJV17Y2FyZXQtY29sb3I6Y3VycmVudENvbG9yfSddLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihZYnQsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoibWV0cmljLXNlYXJjaC1jb21wb25lbnQiLHRlbXBsYXRlVXJsOiIuL21ldHJpY19zZWFyY2hfY29tcG9uZW50Lm5nLmh0bWwiLHN0eWxlVXJsczpbIi4vbWV0cmljX3NlYXJjaF9jb21wb25lbnQuY3NzIl0sY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sbnVsbCx7Y29tcGxldGlvbnM6W3t0eXBlOnlffV0scmVnZXhGaWx0ZXJWYWx1ZTpbe3R5cGU6eV99XSxpc1JlZ2V4RmlsdGVyVmFsaWQ6W3t0eXBlOkNfLGFyZ3M6WyJjbGFzcy52YWxpZCJdfSx7dHlwZTp5X31dLG9uUmVnZXhGaWx0ZXJWYWx1ZUNoYW5nZTpbe3R5cGU6X199XSxvbkFkZEZpbHRlcjpbe3R5cGU6X199XX0pO2NsYXNzIHFidHtjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXQsdGhpcy5tZXRyaWNzUmVnZXgkPXRoaXMuc3RvcmUuc2VsZWN0KFFodCksdGhpcy5hY3RpdmVSdW5zJD10aGlzLnN0b3JlLnBpcGUoUmsodk4pKS5waXBlKGh0KCh0PT50P0FycmF5LmZyb20odC5lbnRyaWVzKCkpLmZpbHRlcigodD0+dFsxXSkpLm1hcCgodD0+dFswXSkpOltdKSkpLHRoaXMubWV0cmljc0ZvckFjdGl2ZVJ1bnMkPUR0KHRoaXMuYWN0aXZlUnVucyQsdGhpcy5zdG9yZS5zZWxlY3QoWWh0KSkucGlwZShodCgoKFt0LGVdKT0+e2NvbnN0IG49bmV3IFNldDtmb3IoY29uc3QgbyBvZiB0KWlmKGVbb10pZm9yKGNvbnN0IHQgb2YgZVtvXSluLmFkZCh0KTtyZXR1cm5bLi4ubl19KSkpLHRoaXMuaXNNZXRyaWNzRmlsdGVyVmFsaWQkPXRoaXMubWV0cmljc1JlZ2V4JC5waXBlKGh0KCh0PT57dHJ5e3JldHVybiBCb29sZWFuKG5ldyBSZWdFeHAodCkpfWNhdGNoKHQpe3JldHVybiExfX0pKSksdGhpcy5tZXRyaWNGaWx0ZXJLZXlzJD10aGlzLnN0b3JlLnBpcGUoUmsodGJ0KSkucGlwZShodCgodD0+T2JqZWN0LmtleXModCkpKSksdGhpcy5jb21wbGV0aW9ucyQ9RHQodGhpcy5tZXRyaWNzRm9yQWN0aXZlUnVucyQsdGhpcy5tZXRyaWNzUmVnZXgkLHRoaXMubWV0cmljRmlsdGVyS2V5cyQpLnBpcGUoaHQoKChbdCxlLG5dKT0+e2NvbnN0IG89dC5maWx0ZXIoKHQ9PiFuLmluY2x1ZGVzKHQpKSk7dHJ5e2NvbnN0IHQ9bmV3IFJlZ0V4cChlLCJpIik7cmV0dXJuIG8uZmlsdGVyKChlPT50LnRlc3QoZSkpKS5zb3J0KCl9Y2F0Y2godCl7cmV0dXJuW119fSkpKX1vbkZpbHRlckNoYW5nZSh0KXt0aGlzLnN0b3JlLmRpc3BhdGNoKHZidCh7cmVnZXg6dH0pKX1vbkFkZEZpbHRlcih0KXt0aGlzLnN0b3JlLmRpc3BhdGNoKHhidCh7bWV0cmljOnR9KSksdGhpcy5zdG9yZS5kaXNwYXRjaCh2YnQoe3JlZ2V4OiIifSkpfX1mdW5jdGlvbiBaYnQodCxlLG4pe2NvbnN0IG89W1tlLC4uLm5dXTtpZighbi5sZW5ndGh8fCF0Lmxlbmd0aClyZXR1cm4iZGF0YTp0ZXh0L2NzdjtjaGFyc2V0PXV0Zi04LCIrby5tYXAoKHQ9PnQuam9pbigiLCIpKSkuam9pbigiXG4iKTtjb25zdCBpPW4ubWFwKCh0PT5WYnQodCkpKTtmb3IoY29uc3RbbixhXW9mIHQpe2NvbnN0IHQ9YS5maWx0ZXIoKHQ9PnQucnVuPT09ZSkpO2lmKHQubGVuZ3RoKXtjb25zdCBlPVtuXTtmb3IoY29uc3QgbiBvZiBpKXtjb25zdCBvPXQuZmluZCgodD0+dC5tZXRyaWM9PT1uKSk7ZS5wdXNoKHZvaWQgMD09PW8/Im51bGwiOmAke28ublBNSVZhbHVlfWApfW8ucHVzaChlKX19cmV0dXJuImRhdGE6dGV4dC9jc3Y7Y2hhcnNldD11dGYtOCwiK28ubWFwKCh0PT50LmpvaW4oIiwiKSkpLmpvaW4oIlxuIil9cWJ0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxxYnQpKE11KEVrKSl9LHFidC7JtWNtcD1Vbyh7dHlwZTpxYnQsc2VsZWN0b3JzOltbIm5wbWktbWV0cmljLXNlYXJjaCJdXSxkZWNsczo0LHZhcnM6OSxjb25zdHM6W1szLCJyZWdleEZpbHRlclZhbHVlIiwiY29tcGxldGlvbnMiLCJpc1JlZ2V4RmlsdGVyVmFsaWQiLCJvblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2UiLCJvbkFkZEZpbHRlciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoT3UoMCwibWV0cmljLXNlYXJjaC1jb21wb25lbnQiLDApLE51KCJvblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2UiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLm9uRmlsdGVyQ2hhbmdlKGUpfSkpKCJvbkFkZEZpbHRlciIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25BZGRGaWx0ZXIoZSl9KSksT2IoMSwiYXN5bmMiKSxPYigyLCJhc3luYyIpLE9iKDMsImFzeW5jIiksUHUoKSksMiZlJiZ2dSgicmVnZXhGaWx0ZXJWYWx1ZSIsUGIoMSwzLG4ubWV0cmljc1JlZ2V4JCkpKCJjb21wbGV0aW9ucyIsUGIoMiw1LG4uY29tcGxldGlvbnMkKSkoImlzUmVnZXhGaWx0ZXJWYWxpZCIsUGIoMyw3LG4uaXNNZXRyaWNzRmlsdGVyVmFsaWQkKSl9LGRpcmVjdGl2ZXM6W1lidF0scGlwZXM6W012XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHFidCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJucG1pLW1ldHJpYy1zZWFyY2giLHRlbXBsYXRlOidcbiAgICA8bWV0cmljLXNlYXJjaC1jb21wb25lbnRcbiAgICAgIFtyZWdleEZpbHRlclZhbHVlXT0ibWV0cmljc1JlZ2V4JCB8IGFzeW5jIlxuICAgICAgW2NvbXBsZXRpb25zXT0iY29tcGxldGlvbnMkIHwgYXN5bmMiXG4gICAgICBbaXNSZWdleEZpbHRlclZhbGlkXT0iaXNNZXRyaWNzRmlsdGVyVmFsaWQkIHwgYXN5bmMiXG4gICAgICAob25SZWdleEZpbHRlclZhbHVlQ2hhbmdlKT0ib25GaWx0ZXJDaGFuZ2UoJGV2ZW50KSJcbiAgICAgIChvbkFkZEZpbHRlcik9Im9uQWRkRmlsdGVyKCRldmVudCkiXG4gICAgPjwvbWV0cmljLXNlYXJjaC1jb21wb25lbnQ+XG4gICcsY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkVrfV19KSxudWxsKTtjb25zdCBYYnQ9ZnVuY3Rpb24odCl7cmV0dXJueyJhY3RpdmUtYnV0dG9uIjp0fX07Y2xhc3MgS2J0e2Rvd25sb2FkUmVzdWx0cygpe2Zvcihjb25zdCB0IG9mIHRoaXMucnVucyl7Y29uc3QgZT1aYnQodGhpcy5mbGFnZ2VkRGF0YSx0LHRoaXMubWV0cmljcyksbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7bi5zZXRBdHRyaWJ1dGUoImhyZWYiLGUpLG4uc2V0QXR0cmlidXRlKCJkb3dubG9hZCIsYHJlcG9ydF8ke3R9LmNzdmApLG4uY2xpY2soKX19fUtidC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8S2J0KX0sS2J0Lsm1Y21wPVVvKHt0eXBlOktidCxzZWxlY3RvcnM6W1sicmVzdWx0cy1kb3dubG9hZC1jb21wb25lbnQiXV0saW5wdXRzOntudW1GbGFnZ2VkQW5ub3RhdGlvbnM6Im51bUZsYWdnZWRBbm5vdGF0aW9ucyIscnVuczoicnVucyIsZmxhZ2dlZERhdGE6ImZsYWdnZWREYXRhIixtZXRyaWNzOiJtZXRyaWNzIn0sZGVjbHM6NCx2YXJzOjUsY29uc3RzOltbIm1hdC1zdHJva2VkLWJ1dHRvbiIsIiIsInRpdGxlIiwiRXhwb3J0IENTViByZXBvcnRzIG9mIGFsbCBmbGFnZ2VkIGFubm90YXRpb25zLiBXaWxsIGdlbmVyYXRlIG9uZSBDU1YgcGVyIGFjdGl2ZSBydW4uIiwzLCJkaXNhYmxlZCIsIm5nQ2xhc3MiLCJjbGljayJdLFsxLCJidXR0b24tY29udGVudHMiXSxbInN2Z0ljb24iLCJnZXRfYXBwXzI0cHgiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKE91KDAsImJ1dHRvbiIsMCksTnUoImNsaWNrIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLmRvd25sb2FkUmVzdWx0cygpfSkpLE91KDEsInNwYW4iLDEpLHd1KDIsIm1hdC1pY29uIiwyKSxNZigzKSxQdSgpLFB1KCkpLDImZSYmKHZ1KCJkaXNhYmxlZCIsMD09PW4ubnVtRmxhZ2dlZEFubm90YXRpb25zKSgibmdDbGFzcyIsZ2IoMyxYYnQsbi5udW1GbGFnZ2VkQW5ub3RhdGlvbnM+MCkpLEpjKDMpLHhmKCIgRmxhZ2dlZCBSb3dzICgiLG4ubnVtRmxhZ2dlZEFubm90YXRpb25zLCIpICIpKX0sZGlyZWN0aXZlczpbTkgsdHYsY0ddLHN0eWxlczpbJy5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHh9Lm1hdC1oMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaGVhZGxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTVweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZ1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjA1ZW07bWFyZ2luOjAgMCA1NnB4fS5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAwNWVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXJhaXNlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdHJva2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmxhdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZhYltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbWluaS1mYWJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4fS5tYXQtY2FyZC1zdWJ0aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGVja2JveC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvb3Rlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgdHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIzZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LjU0MTY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2NjY2NjY3ZW0pfUBtZWRpYSBwcmludHsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjJlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouMjVlbSAwIC43NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxZW0gMCAxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMiksIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi0wLjA2MjVlbX0ubWF0LW1lbnUtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci12ZXJ0aWNhbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGFiLWxpbmtbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MH0ubWF0LXRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5Om5vbmV9LmNkay12aXN1YWxseS1oaWRkZW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjZ9LmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV0sIC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3hbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2tbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHt9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7fS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOi13ZWJraXQtYXV0b2ZpbGwpe2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZVtfbmdjb250ZW50LSVDT01QJV17cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fS5tYXQtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfS5hY3RpdmUtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDA7Ym9yZGVyOjFweCBzb2xpZCAjZWJlYmViO2NvbG9yOiNmZmZ9LmJ1dHRvbi1jb250ZW50c1tfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9bWF0LWljb25bX25nY29udGVudC0lQ09NUCVde21hcmdpbi1yaWdodDo2cHh9J10sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEtidCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJyZXN1bHRzLWRvd25sb2FkLWNvbXBvbmVudCIsdGVtcGxhdGVVcmw6Ii4vcmVzdWx0c19kb3dubG9hZF9jb21wb25lbnQubmcuaHRtbCIsc3R5bGVVcmxzOlsiLi9yZXN1bHRzX2Rvd25sb2FkX2NvbXBvbmVudC5jc3MiXSxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSxudWxsLHtudW1GbGFnZ2VkQW5ub3RhdGlvbnM6W3t0eXBlOnlffV0scnVuczpbe3R5cGU6eV99XSxmbGFnZ2VkRGF0YTpbe3R5cGU6eV99XSxtZXRyaWNzOlt7dHlwZTp5X31dfSk7Y2xhc3MgSmJ0e2NvbnN0cnVjdG9yKHQpe3RoaXMuc3RvcmU9dCx0aGlzLmZsYWdnZWRBbm5vdGF0aW9ucyQ9dGhpcy5zdG9yZS5zZWxlY3QoWGh0KSx0aGlzLm51bUZsYWdnZWRBbm5vdGF0aW9ucyQ9dGhpcy5mbGFnZ2VkQW5ub3RhdGlvbnMkLnBpcGUoaHQoKHQ9PnQubGVuZ3RoKSkpLHRoaXMuYWN0aXZlUnVucyQ9dGhpcy5zdG9yZS5zZWxlY3Qodk4pLnBpcGUoaHQoKHQ9PnQ/QXJyYXkuZnJvbSh0LmVudHJpZXMoKSkuZmlsdGVyKCh0PT50WzFdKSkubWFwKCh0PT50WzBdKSk6W10pKSksdGhpcy5mbGFnZ2VkRGF0YSQ9RHQoW3RoaXMuc3RvcmUuc2VsZWN0KEdodCksdGhpcy5mbGFnZ2VkQW5ub3RhdGlvbnMkXSkucGlwZShodCgoKFt0LGVdKT0+e2NvbnN0IG49bmV3IFNldChlKTtyZXR1cm4gT2JqZWN0LmVudHJpZXModCkuZmlsdGVyKCh0PT5uLmhhcyh0WzBdKSkpfSkpKSx0aGlzLm1ldHJpY3MkPUR0KFt0aGlzLnN0b3JlLnNlbGVjdChZaHQpLHRoaXMuYWN0aXZlUnVucyQsdGhpcy5zdG9yZS5zZWxlY3QodGJ0KV0pLnBpcGUoaHQoKChbdCxlLG5dKT0+e2xldCBvPU9iamVjdC5rZXlzKG4pO2Zvcihjb25zdCBuIG9mIGUpdFtuXSYmKG89by5jb25jYXQodFtuXS5maWx0ZXIoKHQ9PkJidCh0KSkpKSk7cmV0dXJuIG89Wy4uLm5ldyBTZXQobyldLG99KSkpfX1KYnQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEpidCkoTXUoRWspKX0sSmJ0Lsm1Y21wPVVvKHt0eXBlOkpidCxzZWxlY3RvcnM6W1sibnBtaS1yZXN1bHRzLWRvd25sb2FkIl1dLGRlY2xzOjUsdmFyczoxMixjb25zdHM6W1szLCJudW1GbGFnZ2VkQW5ub3RhdGlvbnMiLCJydW5zIiwiZmxhZ2dlZERhdGEiLCJtZXRyaWNzIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJih3dSgwLCJyZXN1bHRzLWRvd25sb2FkLWNvbXBvbmVudCIsMCksT2IoMSwiYXN5bmMiKSxPYigyLCJhc3luYyIpLE9iKDMsImFzeW5jIiksT2IoNCwiYXN5bmMiKSksMiZlJiZ2dSgibnVtRmxhZ2dlZEFubm90YXRpb25zIixQYigxLDQsbi5udW1GbGFnZ2VkQW5ub3RhdGlvbnMkKSkoInJ1bnMiLFBiKDIsNixuLmFjdGl2ZVJ1bnMkKSkoImZsYWdnZWREYXRhIixQYigzLDgsbi5mbGFnZ2VkRGF0YSQpKSgibWV0cmljcyIsUGIoNCwxMCxuLm1ldHJpY3MkKSl9LGRpcmVjdGl2ZXM6W0tidF0scGlwZXM6W012XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEpidCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJucG1pLXJlc3VsdHMtZG93bmxvYWQiLHRlbXBsYXRlOidcbiAgICA8cmVzdWx0cy1kb3dubG9hZC1jb21wb25lbnRcbiAgICAgIFtudW1GbGFnZ2VkQW5ub3RhdGlvbnNdPSJudW1GbGFnZ2VkQW5ub3RhdGlvbnMkIHwgYXN5bmMiXG4gICAgICBbcnVuc109ImFjdGl2ZVJ1bnMkIHwgYXN5bmMiXG4gICAgICBbZmxhZ2dlZERhdGFdPSJmbGFnZ2VkRGF0YSQgfCBhc3luYyJcbiAgICAgIFttZXRyaWNzXT0ibWV0cmljcyQgfCBhc3luYyJcbiAgICA+PC9yZXN1bHRzLWRvd25sb2FkLWNvbXBvbmVudD5cbiAgJyxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6RWt9XX0pLG51bGwpO2NvbnN0IFFidD1uZXcgTnIoIk1hdENoaXBSZW1vdmUiKSwkYnQ9bmV3IE5yKCJNYXRDaGlwQXZhdGFyIiksdHl0PW5ldyBOcigiTWF0Q2hpcFRyYWlsaW5nSWNvbiIpLGV5dD1IeihJeih6eihjbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLl9lbGVtZW50UmVmPXR9fSksInByaW1hcnkiKSwtMSk7Y2xhc3Mgbnl0e31ueXQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fG55dCl9LG55dC7JtWRpcj1Kbyh7dHlwZTpueXQsc2VsZWN0b3JzOltbIm1hdC1jaGlwLWF2YXRhciJdLFsiIiwibWF0Q2hpcEF2YXRhciIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1jaGlwLWF2YXRhciJdLGZlYXR1cmVzOltpaChbe3Byb3ZpZGU6JGJ0LHVzZUV4aXN0aW5nOm55dH1dKV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKG55dCxbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJtYXQtY2hpcC1hdmF0YXIsIFttYXRDaGlwQXZhdGFyXSIsaG9zdDp7Y2xhc3M6Im1hdC1jaGlwLWF2YXRhciJ9LHByb3ZpZGVyczpbe3Byb3ZpZGU6JGJ0LHVzZUV4aXN0aW5nOm55dH1dfV19XSxudWxsLG51bGwpO2NsYXNzIG95dHt9b3l0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxveXQpfSxveXQuybVkaXI9Sm8oe3R5cGU6b3l0LHNlbGVjdG9yczpbWyJtYXQtY2hpcC10cmFpbGluZy1pY29uIl0sWyIiLCJtYXRDaGlwVHJhaWxpbmdJY29uIiwiIl1dLGhvc3RBdHRyczpbMSwibWF0LWNoaXAtdHJhaWxpbmctaWNvbiJdLGZlYXR1cmVzOltpaChbe3Byb3ZpZGU6dHl0LHVzZUV4aXN0aW5nOm95dH1dKV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKG95dCxbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJtYXQtY2hpcC10cmFpbGluZy1pY29uLCBbbWF0Q2hpcFRyYWlsaW5nSWNvbl0iLGhvc3Q6e2NsYXNzOiJtYXQtY2hpcC10cmFpbGluZy1pY29uIn0scHJvdmlkZXJzOlt7cHJvdmlkZTp0eXQsdXNlRXhpc3Rpbmc6b3l0fV19XX1dLG51bGwsbnVsbCk7Y2xhc3MgaXl0IGV4dGVuZHMgZXl0e2NvbnN0cnVjdG9yKHQsZSxuLG8saSxhLHIscyl7c3VwZXIodCksdGhpcy5fZWxlbWVudFJlZj10LHRoaXMuX25nWm9uZT1lLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPWksdGhpcy5faGFzRm9jdXM9ITEsdGhpcy5jaGlwTGlzdFNlbGVjdGFibGU9ITAsdGhpcy5fY2hpcExpc3RNdWx0aXBsZT0hMSx0aGlzLl9jaGlwTGlzdERpc2FibGVkPSExLHRoaXMuX3NlbGVjdGVkPSExLHRoaXMuX3NlbGVjdGFibGU9ITAsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5fcmVtb3ZhYmxlPSEwLHRoaXMuX29uRm9jdXM9bmV3IHgsdGhpcy5fb25CbHVyPW5ldyB4LHRoaXMuc2VsZWN0aW9uQ2hhbmdlPW5ldyBBYix0aGlzLmRlc3Ryb3llZD1uZXcgQWIsdGhpcy5yZW1vdmVkPW5ldyBBYix0aGlzLl9hZGRIb3N0Q2xhc3NOYW1lKCksdGhpcy5fY2hpcFJpcHBsZVRhcmdldD1hLmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuX2NoaXBSaXBwbGVUYXJnZXQuY2xhc3NMaXN0LmFkZCgibWF0LWNoaXAtcmlwcGxlIiksdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX2NoaXBSaXBwbGVUYXJnZXQpLHRoaXMuX2NoaXBSaXBwbGU9bmV3IGNIKHRoaXMsZSx0aGlzLl9jaGlwUmlwcGxlVGFyZ2V0LG4pLHRoaXMuX2NoaXBSaXBwbGUuc2V0dXBUcmlnZ2VyRXZlbnRzKHQpLHRoaXMucmlwcGxlQ29uZmlnPW98fHt9LHRoaXMuX2FuaW1hdGlvbnNEaXNhYmxlZD0iTm9vcEFuaW1hdGlvbnMiPT09cix0aGlzLnRhYkluZGV4PW51bGwhPXMmJnBhcnNlSW50KHMpfHwtMX1nZXQgcmlwcGxlRGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5kaXNhYmxlZHx8dGhpcy5kaXNhYmxlUmlwcGxlfHx0aGlzLl9hbmltYXRpb25zRGlzYWJsZWR8fCEhdGhpcy5yaXBwbGVDb25maWcuZGlzYWJsZWR9Z2V0IHNlbGVjdGVkKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGVkfXNldCBzZWxlY3RlZCh0KXtjb25zdCBlPXJJKHQpO2UhPT10aGlzLl9zZWxlY3RlZCYmKHRoaXMuX3NlbGVjdGVkPWUsdGhpcy5fZGlzcGF0Y2hTZWxlY3Rpb25DaGFuZ2UoKSl9Z2V0IHZhbHVlKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3ZhbHVlP3RoaXMuX3ZhbHVlOnRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC50ZXh0Q29udGVudH1zZXQgdmFsdWUodCl7dGhpcy5fdmFsdWU9dH1nZXQgc2VsZWN0YWJsZSgpe3JldHVybiB0aGlzLl9zZWxlY3RhYmxlJiZ0aGlzLmNoaXBMaXN0U2VsZWN0YWJsZX1zZXQgc2VsZWN0YWJsZSh0KXt0aGlzLl9zZWxlY3RhYmxlPXJJKHQpfWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLl9jaGlwTGlzdERpc2FibGVkfHx0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQodCl7dGhpcy5fZGlzYWJsZWQ9ckkodCl9Z2V0IHJlbW92YWJsZSgpe3JldHVybiB0aGlzLl9yZW1vdmFibGV9c2V0IHJlbW92YWJsZSh0KXt0aGlzLl9yZW1vdmFibGU9ckkodCl9Z2V0IGFyaWFTZWxlY3RlZCgpe3JldHVybiB0aGlzLnNlbGVjdGFibGUmJih0aGlzLl9jaGlwTGlzdE11bHRpcGxlfHx0aGlzLnNlbGVjdGVkKT90aGlzLnNlbGVjdGVkLnRvU3RyaW5nKCk6bnVsbH1fYWRkSG9zdENsYXNzTmFtZSgpe2NvbnN0IHQ9Im1hdC1iYXNpYy1jaGlwIixlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtlLmhhc0F0dHJpYnV0ZSh0KXx8ZS50YWdOYW1lLnRvTG93ZXJDYXNlKCk9PT10P2UuY2xhc3NMaXN0LmFkZCh0KTplLmNsYXNzTGlzdC5hZGQoIm1hdC1zdGFuZGFyZC1jaGlwIil9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3llZC5lbWl0KHtjaGlwOnRoaXN9KSx0aGlzLl9jaGlwUmlwcGxlLl9yZW1vdmVUcmlnZ2VyRXZlbnRzKCl9c2VsZWN0KCl7dGhpcy5fc2VsZWN0ZWR8fCh0aGlzLl9zZWxlY3RlZD0hMCx0aGlzLl9kaXNwYXRjaFNlbGVjdGlvbkNoYW5nZSgpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX1kZXNlbGVjdCgpe3RoaXMuX3NlbGVjdGVkJiYodGhpcy5fc2VsZWN0ZWQ9ITEsdGhpcy5fZGlzcGF0Y2hTZWxlY3Rpb25DaGFuZ2UoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9c2VsZWN0VmlhSW50ZXJhY3Rpb24oKXt0aGlzLl9zZWxlY3RlZHx8KHRoaXMuX3NlbGVjdGVkPSEwLHRoaXMuX2Rpc3BhdGNoU2VsZWN0aW9uQ2hhbmdlKCEwKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9dG9nZ2xlU2VsZWN0ZWQodD0hMSl7cmV0dXJuIHRoaXMuX3NlbGVjdGVkPSF0aGlzLnNlbGVjdGVkLHRoaXMuX2Rpc3BhdGNoU2VsZWN0aW9uQ2hhbmdlKHQpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRoaXMuc2VsZWN0ZWR9Zm9jdXMoKXt0aGlzLl9oYXNGb2N1c3x8KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpLHRoaXMuX29uRm9jdXMubmV4dCh7Y2hpcDp0aGlzfSkpLHRoaXMuX2hhc0ZvY3VzPSEwfXJlbW92ZSgpe3RoaXMucmVtb3ZhYmxlJiZ0aGlzLnJlbW92ZWQuZW1pdCh7Y2hpcDp0aGlzfSl9X2hhbmRsZUNsaWNrKHQpe3RoaXMuZGlzYWJsZWQ/dC5wcmV2ZW50RGVmYXVsdCgpOnQuc3RvcFByb3BhZ2F0aW9uKCl9X2hhbmRsZUtleWRvd24odCl7aWYoIXRoaXMuZGlzYWJsZWQpc3dpdGNoKHQua2V5Q29kZSl7Y2FzZSA0NjpjYXNlIDg6dGhpcy5yZW1vdmUoKSx0LnByZXZlbnREZWZhdWx0KCk7YnJlYWs7Y2FzZSBuSTp0aGlzLnNlbGVjdGFibGUmJnRoaXMudG9nZ2xlU2VsZWN0ZWQoITApLHQucHJldmVudERlZmF1bHQoKX19X2JsdXIoKXt0aGlzLl9uZ1pvbmUub25TdGFibGUucGlwZShOZSgxKSkuc3Vic2NyaWJlKCgoKT0+e3RoaXMuX25nWm9uZS5ydW4oKCgpPT57dGhpcy5faGFzRm9jdXM9ITEsdGhpcy5fb25CbHVyLm5leHQoe2NoaXA6dGhpc30pfSkpfSkpfV9kaXNwYXRjaFNlbGVjdGlvbkNoYW5nZSh0PSExKXt0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KHtzb3VyY2U6dGhpcyxpc1VzZXJJbnB1dDp0LHNlbGVjdGVkOnRoaXMuX3NlbGVjdGVkfSl9fWl5dC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8aXl0KShNdShjaCksTXUodEMpLE11KGZJKSxNdShkSCw4KSxNdShIaCksTXUoVUMpLE11KE53LDgpLE9yKCJ0YWJpbmRleCIpKX0saXl0Lsm1ZGlyPUpvKHt0eXBlOml5dCxzZWxlY3RvcnM6W1sibWF0LWJhc2ljLWNoaXAiXSxbIiIsIm1hdC1iYXNpYy1jaGlwIiwiIl0sWyJtYXQtY2hpcCJdLFsiIiwibWF0LWNoaXAiLCIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24gdChlLG4sbyl7aWYoMSZlJiYoR2IobywkYnQsMSksR2Iobyx0eXQsMSksR2IobyxRYnQsMSkpLDImZSl7bGV0IHQ7VWIodD1ZYigpKSYmKG4uYXZhdGFyPXQuZmlyc3QpLFViKHQ9WWIoKSkmJihuLnRyYWlsaW5nSWNvbj10LmZpcnN0KSxVYih0PVliKCkpJiYobi5yZW1vdmVJY29uPXQuZmlyc3QpfX0saG9zdEF0dHJzOlsicm9sZSIsIm9wdGlvbiIsMSwibWF0LWNoaXAiLCJtYXQtZm9jdXMtaW5kaWNhdG9yIl0saG9zdFZhcnM6MTQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJk51KCJjbGljayIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4uX2hhbmRsZUNsaWNrKGUpfSkpKCJrZXlkb3duIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5faGFuZGxlS2V5ZG93bihlKX0pKSgiZm9jdXMiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uZm9jdXMoKX0pKSgiYmx1ciIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5fYmx1cigpfSkpLDImZSYmKE5tKCJ0YWJpbmRleCIsbi5kaXNhYmxlZD9udWxsOm4udGFiSW5kZXgpKCJkaXNhYmxlZCIsbi5kaXNhYmxlZHx8bnVsbCkoImFyaWEtZGlzYWJsZWQiLG4uZGlzYWJsZWQudG9TdHJpbmcoKSkoImFyaWEtc2VsZWN0ZWQiLG4uYXJpYVNlbGVjdGVkKSxhZigibWF0LWNoaXAtc2VsZWN0ZWQiLG4uc2VsZWN0ZWQpKCJtYXQtY2hpcC13aXRoLWF2YXRhciIsbi5hdmF0YXIpKCJtYXQtY2hpcC13aXRoLXRyYWlsaW5nLWljb24iLG4udHJhaWxpbmdJY29ufHxuLnJlbW92ZUljb24pKCJtYXQtY2hpcC1kaXNhYmxlZCIsbi5kaXNhYmxlZCkoIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIixuLl9hbmltYXRpb25zRGlzYWJsZWQpKX0saW5wdXRzOntjb2xvcjoiY29sb3IiLGRpc2FibGVSaXBwbGU6ImRpc2FibGVSaXBwbGUiLHRhYkluZGV4OiJ0YWJJbmRleCIsc2VsZWN0ZWQ6InNlbGVjdGVkIix2YWx1ZToidmFsdWUiLHNlbGVjdGFibGU6InNlbGVjdGFibGUiLGRpc2FibGVkOiJkaXNhYmxlZCIscmVtb3ZhYmxlOiJyZW1vdmFibGUifSxvdXRwdXRzOntzZWxlY3Rpb25DaGFuZ2U6InNlbGVjdGlvbkNoYW5nZSIsZGVzdHJveWVkOiJkZXN0cm95ZWQiLHJlbW92ZWQ6InJlbW92ZWQifSxleHBvcnRBczpbIm1hdENoaXAiXSxmZWF0dXJlczpbZ21dfSksaXl0LmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6Y2h9LHt0eXBlOnRDfSx7dHlwZTpmSX0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltkSF19XX0se3R5cGU6SGh9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltVQ119XX0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOl9zfSx7dHlwZTp5cyxhcmdzOltOd119XX0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOlJyLGFyZ3M6WyJ0YWJpbmRleCJdfV19XSxpeXQucHJvcERlY29yYXRvcnM9e2F2YXRhcjpbe3R5cGU6SHIsYXJnczpbJGJ0XX1dLHRyYWlsaW5nSWNvbjpbe3R5cGU6SHIsYXJnczpbdHl0XX1dLHJlbW92ZUljb246W3t0eXBlOkhyLGFyZ3M6W1FidF19XSxzZWxlY3RlZDpbe3R5cGU6eV99XSx2YWx1ZTpbe3R5cGU6eV99XSxzZWxlY3RhYmxlOlt7dHlwZTp5X31dLGRpc2FibGVkOlt7dHlwZTp5X31dLHJlbW92YWJsZTpbe3R5cGU6eV99XSxzZWxlY3Rpb25DaGFuZ2U6W3t0eXBlOl9ffV0sZGVzdHJveWVkOlt7dHlwZTpfX31dLHJlbW92ZWQ6W3t0eXBlOl9ffV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoaXl0LFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6Im1hdC1iYXNpYy1jaGlwLCBbbWF0LWJhc2ljLWNoaXBdLCBtYXQtY2hpcCwgW21hdC1jaGlwXSIsaW5wdXRzOlsiY29sb3IiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiXSxleHBvcnRBczoibWF0Q2hpcCIsaG9zdDp7Y2xhc3M6Im1hdC1jaGlwIG1hdC1mb2N1cy1pbmRpY2F0b3IiLCJbYXR0ci50YWJpbmRleF0iOiJkaXNhYmxlZCA/IG51bGwgOiB0YWJJbmRleCIscm9sZToib3B0aW9uIiwiW2NsYXNzLm1hdC1jaGlwLXNlbGVjdGVkXSI6InNlbGVjdGVkIiwiW2NsYXNzLm1hdC1jaGlwLXdpdGgtYXZhdGFyXSI6ImF2YXRhciIsIltjbGFzcy5tYXQtY2hpcC13aXRoLXRyYWlsaW5nLWljb25dIjoidHJhaWxpbmdJY29uIHx8IHJlbW92ZUljb24iLCJbY2xhc3MubWF0LWNoaXAtZGlzYWJsZWRdIjoiZGlzYWJsZWQiLCJbY2xhc3MuX21hdC1hbmltYXRpb24tbm9vcGFibGVdIjoiX2FuaW1hdGlvbnNEaXNhYmxlZCIsIlthdHRyLmRpc2FibGVkXSI6ImRpc2FibGVkIHx8IG51bGwiLCJbYXR0ci5hcmlhLWRpc2FibGVkXSI6ImRpc2FibGVkLnRvU3RyaW5nKCkiLCJbYXR0ci5hcmlhLXNlbGVjdGVkXSI6ImFyaWFTZWxlY3RlZCIsIihjbGljaykiOiJfaGFuZGxlQ2xpY2soJGV2ZW50KSIsIihrZXlkb3duKSI6Il9oYW5kbGVLZXlkb3duKCRldmVudCkiLCIoZm9jdXMpIjoiZm9jdXMoKSIsIihibHVyKSI6Il9ibHVyKCkifX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmNofSx7dHlwZTp0Q30se3R5cGU6Zkl9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbZEhdfV19LHt0eXBlOkhofSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbVUNdfV19LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbTnddfV19LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpScixhcmdzOlsidGFiaW5kZXgiXX1dfV19KSx7c2VsZWN0aW9uQ2hhbmdlOlt7dHlwZTpfX31dLGRlc3Ryb3llZDpbe3R5cGU6X199XSxyZW1vdmVkOlt7dHlwZTpfX31dLHNlbGVjdGVkOlt7dHlwZTp5X31dLHZhbHVlOlt7dHlwZTp5X31dLHNlbGVjdGFibGU6W3t0eXBlOnlffV0sZGlzYWJsZWQ6W3t0eXBlOnlffV0scmVtb3ZhYmxlOlt7dHlwZTp5X31dLGF2YXRhcjpbe3R5cGU6SHIsYXJnczpbJGJ0XX1dLHRyYWlsaW5nSWNvbjpbe3R5cGU6SHIsYXJnczpbdHl0XX1dLHJlbW92ZUljb246W3t0eXBlOkhyLGFyZ3M6W1FidF19XX0pO2NsYXNzIGF5dHtjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuX3BhcmVudENoaXA9dCwiQlVUVE9OIj09PWUubmF0aXZlRWxlbWVudC5ub2RlTmFtZSYmZS5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgidHlwZSIsImJ1dHRvbiIpfV9oYW5kbGVDbGljayh0KXtjb25zdCBlPXRoaXMuX3BhcmVudENoaXA7ZS5yZW1vdmFibGUmJiFlLmRpc2FibGVkJiZlLnJlbW92ZSgpLHQuc3RvcFByb3BhZ2F0aW9uKCl9fWF5dC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8YXl0KShNdShpeXQpLE11KGNoKSl9LGF5dC7JtWRpcj1Kbyh7dHlwZTpheXQsc2VsZWN0b3JzOltbIiIsIm1hdENoaXBSZW1vdmUiLCIiXV0saG9zdEF0dHJzOlsxLCJtYXQtY2hpcC1yZW1vdmUiLCJtYXQtY2hpcC10cmFpbGluZy1pY29uIl0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJk51KCJjbGljayIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4uX2hhbmRsZUNsaWNrKGUpfSkpfSxmZWF0dXJlczpbaWgoW3twcm92aWRlOlFidCx1c2VFeGlzdGluZzpheXR9XSldfSksYXl0LmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6aXl0fSx7dHlwZTpjaH1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoYXl0LFt7dHlwZTpnXyxhcmdzOlt7c2VsZWN0b3I6IlttYXRDaGlwUmVtb3ZlXSIsaG9zdDp7Y2xhc3M6Im1hdC1jaGlwLXJlbW92ZSBtYXQtY2hpcC10cmFpbGluZy1pY29uIiwiKGNsaWNrKSI6Il9oYW5kbGVDbGljaygkZXZlbnQpIn0scHJvdmlkZXJzOlt7cHJvdmlkZTpRYnQsdXNlRXhpc3Rpbmc6YXl0fV19XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTppeXR9LHt0eXBlOmNofV19KSxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IHJ5dD1uZXcgTnIoIm1hdC1jaGlwcy1kZWZhdWx0LW9wdGlvbnMiKSxzeXQ9RnooCi8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsbixvKXt0aGlzLl9kZWZhdWx0RXJyb3JTdGF0ZU1hdGNoZXI9dCx0aGlzLl9wYXJlbnRGb3JtPWUsdGhpcy5fcGFyZW50Rm9ybUdyb3VwPW4sdGhpcy5uZ0NvbnRyb2w9b319KTtsZXQgbHl0PTA7Y2xhc3MgY3l0e2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5zb3VyY2U9dCx0aGlzLnZhbHVlPWV9fWNsYXNzIGR5dCBleHRlbmRzIHN5dHtjb25zdHJ1Y3Rvcih0LGUsbixvLGksYSxyKXtzdXBlcihhLG8saSxyKSx0aGlzLl9lbGVtZW50UmVmPXQsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9ZSx0aGlzLl9kaXI9bix0aGlzLm5nQ29udHJvbD1yLHRoaXMuY29udHJvbFR5cGU9Im1hdC1jaGlwLWxpc3QiLHRoaXMuX2xhc3REZXN0cm95ZWRDaGlwSW5kZXg9bnVsbCx0aGlzLl9kZXN0cm95ZWQ9bmV3IHgsdGhpcy5fdWlkPSJtYXQtY2hpcC1saXN0LSIrbHl0KyssdGhpcy5fdGFiSW5kZXg9MCx0aGlzLl91c2VyVGFiSW5kZXg9bnVsbCx0aGlzLl9vblRvdWNoZWQ9KCk9Pnt9LHRoaXMuX29uQ2hhbmdlPSgpPT57fSx0aGlzLl9tdWx0aXBsZT0hMSx0aGlzLl9jb21wYXJlV2l0aD0odCxlKT0+dD09PWUsdGhpcy5fcmVxdWlyZWQ9ITEsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5hcmlhT3JpZW50YXRpb249Imhvcml6b250YWwiLHRoaXMuX3NlbGVjdGFibGU9ITAsdGhpcy5jaGFuZ2U9bmV3IEFiLHRoaXMudmFsdWVDaGFuZ2U9bmV3IEFiLHRoaXMubmdDb250cm9sJiYodGhpcy5uZ0NvbnRyb2wudmFsdWVBY2Nlc3Nvcj10aGlzKX1nZXQgc2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5tdWx0aXBsZT90aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZDp0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZFswXX1nZXQgcm9sZSgpe3JldHVybiB0aGlzLmVtcHR5P251bGw6Imxpc3Rib3gifWdldCBtdWx0aXBsZSgpe3JldHVybiB0aGlzLl9tdWx0aXBsZX1zZXQgbXVsdGlwbGUodCl7dGhpcy5fbXVsdGlwbGU9ckkodCksdGhpcy5fc3luY0NoaXBzU3RhdGUoKX1nZXQgY29tcGFyZVdpdGgoKXtyZXR1cm4gdGhpcy5fY29tcGFyZVdpdGh9c2V0IGNvbXBhcmVXaXRoKHQpe3RoaXMuX2NvbXBhcmVXaXRoPXQsdGhpcy5fc2VsZWN0aW9uTW9kZWwmJnRoaXMuX2luaXRpYWxpemVTZWxlY3Rpb24oKX1nZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5fdmFsdWV9c2V0IHZhbHVlKHQpe3RoaXMud3JpdGVWYWx1ZSh0KSx0aGlzLl92YWx1ZT10fWdldCBpZCgpe3JldHVybiB0aGlzLl9jaGlwSW5wdXQ/dGhpcy5fY2hpcElucHV0LmlkOnRoaXMuX3VpZH1nZXQgcmVxdWlyZWQoKXtyZXR1cm4gdGhpcy5fcmVxdWlyZWR9c2V0IHJlcXVpcmVkKHQpe3RoaXMuX3JlcXVpcmVkPXJJKHQpLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX1nZXQgcGxhY2Vob2xkZXIoKXtyZXR1cm4gdGhpcy5fY2hpcElucHV0P3RoaXMuX2NoaXBJbnB1dC5wbGFjZWhvbGRlcjp0aGlzLl9wbGFjZWhvbGRlcn1zZXQgcGxhY2Vob2xkZXIodCl7dGhpcy5fcGxhY2Vob2xkZXI9dCx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCl9Z2V0IGZvY3VzZWQoKXtyZXR1cm4gdGhpcy5fY2hpcElucHV0JiZ0aGlzLl9jaGlwSW5wdXQuZm9jdXNlZHx8dGhpcy5faGFzRm9jdXNlZENoaXAoKX1nZXQgZW1wdHkoKXtyZXR1cm4oIXRoaXMuX2NoaXBJbnB1dHx8dGhpcy5fY2hpcElucHV0LmVtcHR5KSYmKCF0aGlzLmNoaXBzfHwwPT09dGhpcy5jaGlwcy5sZW5ndGgpfWdldCBzaG91bGRMYWJlbEZsb2F0KCl7cmV0dXJuIXRoaXMuZW1wdHl8fHRoaXMuZm9jdXNlZH1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5uZ0NvbnRyb2w/ISF0aGlzLm5nQ29udHJvbC5kaXNhYmxlZDp0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQodCl7dGhpcy5fZGlzYWJsZWQ9ckkodCksdGhpcy5fc3luY0NoaXBzU3RhdGUoKX1nZXQgc2VsZWN0YWJsZSgpe3JldHVybiB0aGlzLl9zZWxlY3RhYmxlfXNldCBzZWxlY3RhYmxlKHQpe3RoaXMuX3NlbGVjdGFibGU9ckkodCksdGhpcy5jaGlwcyYmdGhpcy5jaGlwcy5mb3JFYWNoKCh0PT50LmNoaXBMaXN0U2VsZWN0YWJsZT10aGlzLl9zZWxlY3RhYmxlKSl9c2V0IHRhYkluZGV4KHQpe3RoaXMuX3VzZXJUYWJJbmRleD10LHRoaXMuX3RhYkluZGV4PXR9Z2V0IGNoaXBTZWxlY3Rpb25DaGFuZ2VzKCl7cmV0dXJuIFd0KC4uLnRoaXMuY2hpcHMubWFwKCh0PT50LnNlbGVjdGlvbkNoYW5nZSkpKX1nZXQgY2hpcEZvY3VzQ2hhbmdlcygpe3JldHVybiBXdCguLi50aGlzLmNoaXBzLm1hcCgodD0+dC5fb25Gb2N1cykpKX1nZXQgY2hpcEJsdXJDaGFuZ2VzKCl7cmV0dXJuIFd0KC4uLnRoaXMuY2hpcHMubWFwKCh0PT50Ll9vbkJsdXIpKSl9Z2V0IGNoaXBSZW1vdmVDaGFuZ2VzKCl7cmV0dXJuIFd0KC4uLnRoaXMuY2hpcHMubWFwKCh0PT50LmRlc3Ryb3llZCkpKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLl9rZXlNYW5hZ2VyPW5ldyBWSSh0aGlzLmNoaXBzKS53aXRoV3JhcCgpLndpdGhWZXJ0aWNhbE9yaWVudGF0aW9uKCkud2l0aEhvbWVBbmRFbmQoKS53aXRoSG9yaXpvbnRhbE9yaWVudGF0aW9uKHRoaXMuX2Rpcj90aGlzLl9kaXIudmFsdWU6Imx0ciIpLHRoaXMuX2RpciYmdGhpcy5fZGlyLmNoYW5nZS5waXBlKHVuKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgodD0+dGhpcy5fa2V5TWFuYWdlci53aXRoSG9yaXpvbnRhbE9yaWVudGF0aW9uKHQpKSksdGhpcy5fa2V5TWFuYWdlci50YWJPdXQucGlwZSh1bih0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5fYWxsb3dGb2N1c0VzY2FwZSgpfSkpLHRoaXMuY2hpcHMuY2hhbmdlcy5waXBlKGNuKG51bGwpLHVuKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKCk9Pnt0aGlzLmRpc2FibGVkJiZQcm9taXNlLnJlc29sdmUoKS50aGVuKCgoKT0+e3RoaXMuX3N5bmNDaGlwc1N0YXRlKCl9KSksdGhpcy5fcmVzZXRDaGlwcygpLHRoaXMuX2luaXRpYWxpemVTZWxlY3Rpb24oKSx0aGlzLl91cGRhdGVUYWJJbmRleCgpLHRoaXMuX3VwZGF0ZUZvY3VzRm9yRGVzdHJveWVkQ2hpcHMoKSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCl9KSl9bmdPbkluaXQoKXt0aGlzLl9zZWxlY3Rpb25Nb2RlbD1uZXcgakgodGhpcy5tdWx0aXBsZSx2b2lkIDAsITEpLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX1uZ0RvQ2hlY2soKXt0aGlzLm5nQ29udHJvbCYmKHRoaXMudXBkYXRlRXJyb3JTdGF0ZSgpLHRoaXMubmdDb250cm9sLmRpc2FibGVkIT09dGhpcy5fZGlzYWJsZWQmJih0aGlzLmRpc2FibGVkPSEhdGhpcy5uZ0NvbnRyb2wuZGlzYWJsZWQpKX1uZ09uRGVzdHJveSgpe3RoaXMuX2Rlc3Ryb3llZC5uZXh0KCksdGhpcy5fZGVzdHJveWVkLmNvbXBsZXRlKCksdGhpcy5zdGF0ZUNoYW5nZXMuY29tcGxldGUoKSx0aGlzLl9kcm9wU3Vic2NyaXB0aW9ucygpfXJlZ2lzdGVySW5wdXQodCl7dGhpcy5fY2hpcElucHV0PXQsdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgiZGF0YS1tYXQtY2hpcC1pbnB1dCIsdC5pZCl9c2V0RGVzY3JpYmVkQnlJZHModCl7dGhpcy5fYXJpYURlc2NyaWJlZGJ5PXQuam9pbigiICIpfXdyaXRlVmFsdWUodCl7dGhpcy5jaGlwcyYmdGhpcy5fc2V0U2VsZWN0aW9uQnlWYWx1ZSh0LCExKX1yZWdpc3Rlck9uQ2hhbmdlKHQpe3RoaXMuX29uQ2hhbmdlPXR9cmVnaXN0ZXJPblRvdWNoZWQodCl7dGhpcy5fb25Ub3VjaGVkPXR9c2V0RGlzYWJsZWRTdGF0ZSh0KXt0aGlzLmRpc2FibGVkPXQsdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfW9uQ29udGFpbmVyQ2xpY2sodCl7dGhpcy5fb3JpZ2luYXRlc0Zyb21DaGlwKHQpfHx0aGlzLmZvY3VzKCl9Zm9jdXModCl7dGhpcy5kaXNhYmxlZHx8dGhpcy5fY2hpcElucHV0JiZ0aGlzLl9jaGlwSW5wdXQuZm9jdXNlZHx8KHRoaXMuY2hpcHMubGVuZ3RoPjA/KHRoaXMuX2tleU1hbmFnZXIuc2V0Rmlyc3RJdGVtQWN0aXZlKCksdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpKToodGhpcy5fZm9jdXNJbnB1dCh0KSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCkpKX1fZm9jdXNJbnB1dCh0KXt0aGlzLl9jaGlwSW5wdXQmJnRoaXMuX2NoaXBJbnB1dC5mb2N1cyh0KX1fa2V5ZG93bih0KXtjb25zdCBlPXQudGFyZ2V0Ozg9PT10LmtleUNvZGUmJnRoaXMuX2lzSW5wdXRFbXB0eShlKT8odGhpcy5fa2V5TWFuYWdlci5zZXRMYXN0SXRlbUFjdGl2ZSgpLHQucHJldmVudERlZmF1bHQoKSk6ZSYmZS5jbGFzc0xpc3QuY29udGFpbnMoIm1hdC1jaGlwIikmJih0aGlzLl9rZXlNYW5hZ2VyLm9uS2V5ZG93bih0KSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCkpfV91cGRhdGVUYWJJbmRleCgpe3RoaXMuX3RhYkluZGV4PXRoaXMuX3VzZXJUYWJJbmRleHx8KDA9PT10aGlzLmNoaXBzLmxlbmd0aD8tMTowKX1fdXBkYXRlRm9jdXNGb3JEZXN0cm95ZWRDaGlwcygpe2lmKG51bGwhPXRoaXMuX2xhc3REZXN0cm95ZWRDaGlwSW5kZXgpaWYodGhpcy5jaGlwcy5sZW5ndGgpe2NvbnN0IHQ9TWF0aC5taW4odGhpcy5fbGFzdERlc3Ryb3llZENoaXBJbmRleCx0aGlzLmNoaXBzLmxlbmd0aC0xKTt0aGlzLl9rZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0odCl9ZWxzZSB0aGlzLmZvY3VzKCk7dGhpcy5fbGFzdERlc3Ryb3llZENoaXBJbmRleD1udWxsfV9pc1ZhbGlkSW5kZXgodCl7cmV0dXJuIHQ+PTAmJnQ8dGhpcy5jaGlwcy5sZW5ndGh9X2lzSW5wdXRFbXB0eSh0KXtyZXR1cm4hKCF0fHwiaW5wdXQiIT09dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfHx0LnZhbHVlKX1fc2V0U2VsZWN0aW9uQnlWYWx1ZSh0LGU9ITApe2lmKHRoaXMuX2NsZWFyU2VsZWN0aW9uKCksdGhpcy5jaGlwcy5mb3JFYWNoKCh0PT50LmRlc2VsZWN0KCkpKSxBcnJheS5pc0FycmF5KHQpKXQuZm9yRWFjaCgodD0+dGhpcy5fc2VsZWN0VmFsdWUodCxlKSkpLHRoaXMuX3NvcnRWYWx1ZXMoKTtlbHNle2NvbnN0IG49dGhpcy5fc2VsZWN0VmFsdWUodCxlKTtuJiZlJiZ0aGlzLl9rZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0obil9fV9zZWxlY3RWYWx1ZSh0LGU9ITApe2NvbnN0IG49dGhpcy5jaGlwcy5maW5kKChlPT5udWxsIT1lLnZhbHVlJiZ0aGlzLl9jb21wYXJlV2l0aChlLnZhbHVlLHQpKSk7cmV0dXJuIG4mJihlP24uc2VsZWN0VmlhSW50ZXJhY3Rpb24oKTpuLnNlbGVjdCgpLHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdChuKSksbn1faW5pdGlhbGl6ZVNlbGVjdGlvbigpe1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCgpPT57KHRoaXMubmdDb250cm9sfHx0aGlzLl92YWx1ZSkmJih0aGlzLl9zZXRTZWxlY3Rpb25CeVZhbHVlKHRoaXMubmdDb250cm9sP3RoaXMubmdDb250cm9sLnZhbHVlOnRoaXMuX3ZhbHVlLCExKSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCkpfSkpfV9jbGVhclNlbGVjdGlvbih0KXt0aGlzLl9zZWxlY3Rpb25Nb2RlbC5jbGVhcigpLHRoaXMuY2hpcHMuZm9yRWFjaCgoZT0+e2UhPT10JiZlLmRlc2VsZWN0KCl9KSksdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfV9zb3J0VmFsdWVzKCl7dGhpcy5fbXVsdGlwbGUmJih0aGlzLl9zZWxlY3Rpb25Nb2RlbC5jbGVhcigpLHRoaXMuY2hpcHMuZm9yRWFjaCgodD0+e3Quc2VsZWN0ZWQmJnRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdCh0KX0pKSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCkpfV9wcm9wYWdhdGVDaGFuZ2VzKHQpe2xldCBlPW51bGw7ZT1BcnJheS5pc0FycmF5KHRoaXMuc2VsZWN0ZWQpP3RoaXMuc2VsZWN0ZWQubWFwKCh0PT50LnZhbHVlKSk6dGhpcy5zZWxlY3RlZD90aGlzLnNlbGVjdGVkLnZhbHVlOnQsdGhpcy5fdmFsdWU9ZSx0aGlzLmNoYW5nZS5lbWl0KG5ldyBjeXQodGhpcyxlKSksdGhpcy52YWx1ZUNoYW5nZS5lbWl0KGUpLHRoaXMuX29uQ2hhbmdlKGUpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfV9ibHVyKCl7dGhpcy5faGFzRm9jdXNlZENoaXAoKXx8dGhpcy5fa2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKC0xKSx0aGlzLmRpc2FibGVkfHwodGhpcy5fY2hpcElucHV0P3NldFRpbWVvdXQoKCgpPT57dGhpcy5mb2N1c2VkfHx0aGlzLl9tYXJrQXNUb3VjaGVkKCl9KSk6dGhpcy5fbWFya0FzVG91Y2hlZCgpKX1fbWFya0FzVG91Y2hlZCgpe3RoaXMuX29uVG91Y2hlZCgpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX1fYWxsb3dGb2N1c0VzY2FwZSgpey0xIT09dGhpcy5fdGFiSW5kZXgmJih0aGlzLl90YWJJbmRleD0tMSxzZXRUaW1lb3V0KCgoKT0+e3RoaXMuX3RhYkluZGV4PXRoaXMuX3VzZXJUYWJJbmRleHx8MCx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pKSl9X3Jlc2V0Q2hpcHMoKXt0aGlzLl9kcm9wU3Vic2NyaXB0aW9ucygpLHRoaXMuX2xpc3RlblRvQ2hpcHNGb2N1cygpLHRoaXMuX2xpc3RlblRvQ2hpcHNTZWxlY3Rpb24oKSx0aGlzLl9saXN0ZW5Ub0NoaXBzUmVtb3ZlZCgpfV9kcm9wU3Vic2NyaXB0aW9ucygpe3RoaXMuX2NoaXBGb2N1c1N1YnNjcmlwdGlvbiYmKHRoaXMuX2NoaXBGb2N1c1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2NoaXBGb2N1c1N1YnNjcmlwdGlvbj1udWxsKSx0aGlzLl9jaGlwQmx1clN1YnNjcmlwdGlvbiYmKHRoaXMuX2NoaXBCbHVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fY2hpcEJsdXJTdWJzY3JpcHRpb249bnVsbCksdGhpcy5fY2hpcFNlbGVjdGlvblN1YnNjcmlwdGlvbiYmKHRoaXMuX2NoaXBTZWxlY3Rpb25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9jaGlwU2VsZWN0aW9uU3Vic2NyaXB0aW9uPW51bGwpLHRoaXMuX2NoaXBSZW1vdmVTdWJzY3JpcHRpb24mJih0aGlzLl9jaGlwUmVtb3ZlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fY2hpcFJlbW92ZVN1YnNjcmlwdGlvbj1udWxsKX1fbGlzdGVuVG9DaGlwc1NlbGVjdGlvbigpe3RoaXMuX2NoaXBTZWxlY3Rpb25TdWJzY3JpcHRpb249dGhpcy5jaGlwU2VsZWN0aW9uQ2hhbmdlcy5zdWJzY3JpYmUoKHQ9Pnt0LnNvdXJjZS5zZWxlY3RlZD90aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3QodC5zb3VyY2UpOnRoaXMuX3NlbGVjdGlvbk1vZGVsLmRlc2VsZWN0KHQuc291cmNlKSx0aGlzLm11bHRpcGxlfHx0aGlzLmNoaXBzLmZvckVhY2goKHQ9PnshdGhpcy5fc2VsZWN0aW9uTW9kZWwuaXNTZWxlY3RlZCh0KSYmdC5zZWxlY3RlZCYmdC5kZXNlbGVjdCgpfSkpLHQuaXNVc2VySW5wdXQmJnRoaXMuX3Byb3BhZ2F0ZUNoYW5nZXMoKX0pKX1fbGlzdGVuVG9DaGlwc0ZvY3VzKCl7dGhpcy5fY2hpcEZvY3VzU3Vic2NyaXB0aW9uPXRoaXMuY2hpcEZvY3VzQ2hhbmdlcy5zdWJzY3JpYmUoKHQ9PntsZXQgZT10aGlzLmNoaXBzLnRvQXJyYXkoKS5pbmRleE9mKHQuY2hpcCk7dGhpcy5faXNWYWxpZEluZGV4KGUpJiZ0aGlzLl9rZXlNYW5hZ2VyLnVwZGF0ZUFjdGl2ZUl0ZW0oZSksdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfSkpLHRoaXMuX2NoaXBCbHVyU3Vic2NyaXB0aW9uPXRoaXMuY2hpcEJsdXJDaGFuZ2VzLnN1YnNjcmliZSgoKCk9Pnt0aGlzLl9ibHVyKCksdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfSkpfV9saXN0ZW5Ub0NoaXBzUmVtb3ZlZCgpe3RoaXMuX2NoaXBSZW1vdmVTdWJzY3JpcHRpb249dGhpcy5jaGlwUmVtb3ZlQ2hhbmdlcy5zdWJzY3JpYmUoKHQ9Pntjb25zdCBlPXQuY2hpcCxuPXRoaXMuY2hpcHMudG9BcnJheSgpLmluZGV4T2YodC5jaGlwKTt0aGlzLl9pc1ZhbGlkSW5kZXgobikmJmUuX2hhc0ZvY3VzJiYodGhpcy5fbGFzdERlc3Ryb3llZENoaXBJbmRleD1uKX0pKX1fb3JpZ2luYXRlc0Zyb21DaGlwKHQpe2xldCBlPXQudGFyZ2V0O2Zvcig7ZSYmZSE9PXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDspe2lmKGUuY2xhc3NMaXN0LmNvbnRhaW5zKCJtYXQtY2hpcCIpKXJldHVybiEwO2U9ZS5wYXJlbnRFbGVtZW50fXJldHVybiExfV9oYXNGb2N1c2VkQ2hpcCgpe3JldHVybiB0aGlzLmNoaXBzJiZ0aGlzLmNoaXBzLnNvbWUoKHQ9PnQuX2hhc0ZvY3VzKSl9X3N5bmNDaGlwc1N0YXRlKCl7dGhpcy5jaGlwcyYmdGhpcy5jaGlwcy5mb3JFYWNoKCh0PT57dC5fY2hpcExpc3REaXNhYmxlZD10aGlzLl9kaXNhYmxlZCx0Ll9jaGlwTGlzdE11bHRpcGxlPXRoaXMubXVsdGlwbGV9KSl9fWR5dC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8ZHl0KShNdShjaCksTXUoSGgpLE11KE16LDgpLE11KEJqLDgpLE11KGxVLDgpLE11KGVIKSxNdShuaiwxMCkpfSxkeXQuybVjbXA9VW8oe3R5cGU6ZHl0LHNlbGVjdG9yczpbWyJtYXQtY2hpcC1saXN0Il1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uIHQoZSxuLG8pe2lmKDEmZSYmR2IobyxpeXQsMSksMiZlKXtsZXQgdDtVYih0PVliKCkpJiYobi5jaGlwcz10KX19LGhvc3RBdHRyczpbMSwibWF0LWNoaXAtbGlzdCJdLGhvc3RWYXJzOjE1LGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MSZlJiZOdSgiZm9jdXMiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uZm9jdXMoKX0pKSgiYmx1ciIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5fYmx1cigpfSkpKCJrZXlkb3duIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5fa2V5ZG93bihlKX0pKSwyJmUmJihrZigiaWQiLG4uX3VpZCksTm0oInRhYmluZGV4IixuLmRpc2FibGVkP251bGw6bi5fdGFiSW5kZXgpKCJhcmlhLWRlc2NyaWJlZGJ5IixuLl9hcmlhRGVzY3JpYmVkYnl8fG51bGwpKCJhcmlhLXJlcXVpcmVkIixuLnJvbGU/bi5yZXF1aXJlZDpudWxsKSgiYXJpYS1kaXNhYmxlZCIsbi5kaXNhYmxlZC50b1N0cmluZygpKSgiYXJpYS1pbnZhbGlkIixuLmVycm9yU3RhdGUpKCJhcmlhLW11bHRpc2VsZWN0YWJsZSIsbi5tdWx0aXBsZSkoInJvbGUiLG4ucm9sZSkoImFyaWEtb3JpZW50YXRpb24iLG4uYXJpYU9yaWVudGF0aW9uKSxhZigibWF0LWNoaXAtbGlzdC1kaXNhYmxlZCIsbi5kaXNhYmxlZCkoIm1hdC1jaGlwLWxpc3QtaW52YWxpZCIsbi5lcnJvclN0YXRlKSgibWF0LWNoaXAtbGlzdC1yZXF1aXJlZCIsbi5yZXF1aXJlZCkpfSxpbnB1dHM6e2FyaWFPcmllbnRhdGlvbjpbImFyaWEtb3JpZW50YXRpb24iLCJhcmlhT3JpZW50YXRpb24iXSxtdWx0aXBsZToibXVsdGlwbGUiLGNvbXBhcmVXaXRoOiJjb21wYXJlV2l0aCIsdmFsdWU6InZhbHVlIixyZXF1aXJlZDoicmVxdWlyZWQiLHBsYWNlaG9sZGVyOiJwbGFjZWhvbGRlciIsZGlzYWJsZWQ6ImRpc2FibGVkIixzZWxlY3RhYmxlOiJzZWxlY3RhYmxlIix0YWJJbmRleDoidGFiSW5kZXgiLGVycm9yU3RhdGVNYXRjaGVyOiJlcnJvclN0YXRlTWF0Y2hlciJ9LG91dHB1dHM6e2NoYW5nZToiY2hhbmdlIix2YWx1ZUNoYW5nZToidmFsdWVDaGFuZ2UifSxleHBvcnRBczpbIm1hdENoaXBMaXN0Il0sZmVhdHVyZXM6W2loKFt7cHJvdmlkZTppVix1c2VFeGlzdGluZzpkeXR9XSksZ21dLG5nQ29udGVudFNlbGVjdG9yczpbIioiXSxkZWNsczoyLHZhcnM6MCxjb25zdHM6W1sxLCJtYXQtY2hpcC1saXN0LXdyYXBwZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKFZ1KCksT3UoMCwiZGl2IiwwKSxqdSgxKSxQdSgpKX0sc3R5bGVzOlsnLm1hdC1jaGlwe3Bvc2l0aW9uOnJlbGF0aXZlO2JveC1zaXppbmc6Ym9yZGVyLWJveDstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCk7Ym9yZGVyOm5vbmU7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9Lm1hdC1zdGFuZGFyZC1jaGlwe3RyYW5zaXRpb246Ym94LXNoYWRvdyAyODBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpO2Rpc3BsYXk6aW5saW5lLWZsZXg7cGFkZGluZzo3cHggMTJweDtib3JkZXItcmFkaXVzOjE2cHg7YWxpZ24taXRlbXM6Y2VudGVyO2N1cnNvcjpkZWZhdWx0O21pbi1oZWlnaHQ6MzJweDtoZWlnaHQ6MXB4fS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZS5tYXQtc3RhbmRhcmQtY2hpcHt0cmFuc2l0aW9uOm5vbmU7YW5pbWF0aW9uOm5vbmV9Lm1hdC1zdGFuZGFyZC1jaGlwIC5tYXQtY2hpcC1yZW1vdmUubWF0LWljb257d2lkdGg6MThweDtoZWlnaHQ6MThweH0ubWF0LXN0YW5kYXJkLWNoaXA6OmFmdGVye3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6aW5oZXJpdDtvcGFjaXR5OjA7Y29udGVudDoiIjtwb2ludGVyLWV2ZW50czpub25lO3RyYW5zaXRpb246b3BhY2l0eSAyMDBtcyBjdWJpYy1iZXppZXIoMC4zNSwgMCwgMC4yNSwgMSl9Lm1hdC1zdGFuZGFyZC1jaGlwOmhvdmVyOjphZnRlcntvcGFjaXR5Oi4xMn0ubWF0LXN0YW5kYXJkLWNoaXA6Zm9jdXN7b3V0bGluZTpub25lfS5tYXQtc3RhbmRhcmQtY2hpcDpmb2N1czo6YWZ0ZXJ7b3BhY2l0eTouMTZ9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXN0YW5kYXJkLWNoaXB7b3V0bGluZTpzb2xpZCAxcHh9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXN0YW5kYXJkLWNoaXA6Zm9jdXN7b3V0bGluZTpkb3R0ZWQgMnB4fS5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1kaXNhYmxlZDo6YWZ0ZXJ7b3BhY2l0eTowfS5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1kaXNhYmxlZCAubWF0LWNoaXAtcmVtb3ZlLC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1kaXNhYmxlZCAubWF0LWNoaXAtdHJhaWxpbmctaWNvbntjdXJzb3I6ZGVmYXVsdH0ubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtd2l0aC10cmFpbGluZy1pY29uLm1hdC1jaGlwLXdpdGgtYXZhdGFyLC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC13aXRoLWF2YXRhcntwYWRkaW5nLXRvcDowO3BhZGRpbmctYm90dG9tOjB9Lm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXdpdGgtdHJhaWxpbmctaWNvbi5tYXQtY2hpcC13aXRoLWF2YXRhcntwYWRkaW5nLXJpZ2h0OjhweDtwYWRkaW5nLWxlZnQ6MH1bZGlyPXJ0bF0gLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXdpdGgtdHJhaWxpbmctaWNvbi5tYXQtY2hpcC13aXRoLWF2YXRhcntwYWRkaW5nLWxlZnQ6OHB4O3BhZGRpbmctcmlnaHQ6MH0ubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtd2l0aC10cmFpbGluZy1pY29ue3BhZGRpbmctdG9wOjdweDtwYWRkaW5nLWJvdHRvbTo3cHg7cGFkZGluZy1yaWdodDo4cHg7cGFkZGluZy1sZWZ0OjEycHh9W2Rpcj1ydGxdIC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC13aXRoLXRyYWlsaW5nLWljb257cGFkZGluZy1sZWZ0OjhweDtwYWRkaW5nLXJpZ2h0OjEycHh9Lm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXdpdGgtYXZhdGFye3BhZGRpbmctbGVmdDowO3BhZGRpbmctcmlnaHQ6MTJweH1bZGlyPXJ0bF0gLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXdpdGgtYXZhdGFye3BhZGRpbmctcmlnaHQ6MDtwYWRkaW5nLWxlZnQ6MTJweH0ubWF0LXN0YW5kYXJkLWNoaXAgLm1hdC1jaGlwLWF2YXRhcnt3aWR0aDoyNHB4O2hlaWdodDoyNHB4O21hcmdpbi1yaWdodDo4cHg7bWFyZ2luLWxlZnQ6NHB4fVtkaXI9cnRsXSAubWF0LXN0YW5kYXJkLWNoaXAgLm1hdC1jaGlwLWF2YXRhcnttYXJnaW4tbGVmdDo4cHg7bWFyZ2luLXJpZ2h0OjRweH0ubWF0LXN0YW5kYXJkLWNoaXAgLm1hdC1jaGlwLXJlbW92ZSwubWF0LXN0YW5kYXJkLWNoaXAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb257d2lkdGg6MThweDtoZWlnaHQ6MThweDtjdXJzb3I6cG9pbnRlcn0ubWF0LXN0YW5kYXJkLWNoaXAgLm1hdC1jaGlwLXJlbW92ZSwubWF0LXN0YW5kYXJkLWNoaXAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb257bWFyZ2luLWxlZnQ6OHB4O21hcmdpbi1yaWdodDowfVtkaXI9cnRsXSAubWF0LXN0YW5kYXJkLWNoaXAgLm1hdC1jaGlwLXJlbW92ZSxbZGlyPXJ0bF0gLm1hdC1zdGFuZGFyZC1jaGlwIC5tYXQtY2hpcC10cmFpbGluZy1pY29ue21hcmdpbi1yaWdodDo4cHg7bWFyZ2luLWxlZnQ6MH0ubWF0LWNoaXAtcmlwcGxle3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmU7Ym9yZGVyLXJhZGl1czppbmhlcml0O292ZXJmbG93OmhpZGRlbn0ubWF0LWNoaXAtbGlzdC13cmFwcGVye2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC13cmFwOndyYXA7YWxpZ24taXRlbXM6Y2VudGVyO21hcmdpbjotNHB4fS5tYXQtY2hpcC1saXN0LXdyYXBwZXIgaW5wdXQubWF0LWlucHV0LWVsZW1lbnQsLm1hdC1jaGlwLWxpc3Qtd3JhcHBlciAubWF0LXN0YW5kYXJkLWNoaXB7bWFyZ2luOjRweH0ubWF0LWNoaXAtbGlzdC1zdGFja2VkIC5tYXQtY2hpcC1saXN0LXdyYXBwZXJ7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9Lm1hdC1jaGlwLWxpc3Qtc3RhY2tlZCAubWF0LWNoaXAtbGlzdC13cmFwcGVyIC5tYXQtc3RhbmRhcmQtY2hpcHt3aWR0aDoxMDAlfS5tYXQtY2hpcC1hdmF0YXJ7Ym9yZGVyLXJhZGl1czo1MCU7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O292ZXJmbG93OmhpZGRlbjtvYmplY3QtZml0OmNvdmVyfWlucHV0Lm1hdC1jaGlwLWlucHV0e3dpZHRoOjE1MHB4O21hcmdpbjo0cHg7ZmxleDoxIDAgMTUwcHh9XG4nXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxkeXQuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpjaH0se3R5cGU6SGh9LHt0eXBlOk16LGRlY29yYXRvcnM6W3t0eXBlOl9zfV19LHt0eXBlOkJqLGRlY29yYXRvcnM6W3t0eXBlOl9zfV19LHt0eXBlOmxVLGRlY29yYXRvcnM6W3t0eXBlOl9zfV19LHt0eXBlOmVIfSx7dHlwZTpuaixkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6Q3N9XX1dLGR5dC5wcm9wRGVjb3JhdG9ycz17ZXJyb3JTdGF0ZU1hdGNoZXI6W3t0eXBlOnlffV0sbXVsdGlwbGU6W3t0eXBlOnlffV0sY29tcGFyZVdpdGg6W3t0eXBlOnlffV0sdmFsdWU6W3t0eXBlOnlffV0scmVxdWlyZWQ6W3t0eXBlOnlffV0scGxhY2Vob2xkZXI6W3t0eXBlOnlffV0sZGlzYWJsZWQ6W3t0eXBlOnlffV0sYXJpYU9yaWVudGF0aW9uOlt7dHlwZTp5XyxhcmdzOlsiYXJpYS1vcmllbnRhdGlvbiJdfV0sc2VsZWN0YWJsZTpbe3R5cGU6eV99XSx0YWJJbmRleDpbe3R5cGU6eV99XSxjaGFuZ2U6W3t0eXBlOl9ffV0sdmFsdWVDaGFuZ2U6W3t0eXBlOl9ffV0sY2hpcHM6W3t0eXBlOnpyLGFyZ3M6W2l5dCx7ZGVzY2VuZGFudHM6ITB9XX1dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGR5dCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJtYXQtY2hpcC1saXN0Iix0ZW1wbGF0ZTonPGRpdiBjbGFzcz0ibWF0LWNoaXAtbGlzdC13cmFwcGVyIj48bmctY29udGVudD48L25nLWNvbnRlbnQ+PC9kaXY+JyxleHBvcnRBczoibWF0Q2hpcExpc3QiLGhvc3Q6eyJbYXR0ci50YWJpbmRleF0iOiJkaXNhYmxlZCA/IG51bGwgOiBfdGFiSW5kZXgiLCJbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XSI6Il9hcmlhRGVzY3JpYmVkYnkgfHwgbnVsbCIsIlthdHRyLmFyaWEtcmVxdWlyZWRdIjoicm9sZSA/IHJlcXVpcmVkIDogbnVsbCIsIlthdHRyLmFyaWEtZGlzYWJsZWRdIjoiZGlzYWJsZWQudG9TdHJpbmcoKSIsIlthdHRyLmFyaWEtaW52YWxpZF0iOiJlcnJvclN0YXRlIiwiW2F0dHIuYXJpYS1tdWx0aXNlbGVjdGFibGVdIjoibXVsdGlwbGUiLCJbYXR0ci5yb2xlXSI6InJvbGUiLCJbY2xhc3MubWF0LWNoaXAtbGlzdC1kaXNhYmxlZF0iOiJkaXNhYmxlZCIsIltjbGFzcy5tYXQtY2hpcC1saXN0LWludmFsaWRdIjoiZXJyb3JTdGF0ZSIsIltjbGFzcy5tYXQtY2hpcC1saXN0LXJlcXVpcmVkXSI6InJlcXVpcmVkIiwiW2F0dHIuYXJpYS1vcmllbnRhdGlvbl0iOiJhcmlhT3JpZW50YXRpb24iLGNsYXNzOiJtYXQtY2hpcC1saXN0IiwiKGZvY3VzKSI6ImZvY3VzKCkiLCIoYmx1cikiOiJfYmx1cigpIiwiKGtleWRvd24pIjoiX2tleWRvd24oJGV2ZW50KSIsIltpZF0iOiJfdWlkIn0scHJvdmlkZXJzOlt7cHJvdmlkZTppVix1c2VFeGlzdGluZzpkeXR9XSxlbmNhcHN1bGF0aW9uOlBvLk5vbmUsY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaCxzdHlsZXM6WycubWF0LWNoaXB7cG9zaXRpb246cmVsYXRpdmU7Ym94LXNpemluZzpib3JkZXItYm94Oy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDt0cmFuc2Zvcm06dHJhbnNsYXRlWigwKTtib3JkZXI6bm9uZTstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZX0ubWF0LXN0YW5kYXJkLWNoaXB7dHJhbnNpdGlvbjpib3gtc2hhZG93IDI4MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7ZGlzcGxheTppbmxpbmUtZmxleDtwYWRkaW5nOjdweCAxMnB4O2JvcmRlci1yYWRpdXM6MTZweDthbGlnbi1pdGVtczpjZW50ZXI7Y3Vyc29yOmRlZmF1bHQ7bWluLWhlaWdodDozMnB4O2hlaWdodDoxcHh9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlLm1hdC1zdGFuZGFyZC1jaGlwe3RyYW5zaXRpb246bm9uZTthbmltYXRpb246bm9uZX0ubWF0LXN0YW5kYXJkLWNoaXAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbnt3aWR0aDoxOHB4O2hlaWdodDoxOHB4fS5tYXQtc3RhbmRhcmQtY2hpcDo6YWZ0ZXJ7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czppbmhlcml0O29wYWNpdHk6MDtjb250ZW50OiIiO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5IDIwMG1zIGN1YmljLWJlemllcigwLjM1LCAwLCAwLjI1LCAxKX0ubWF0LXN0YW5kYXJkLWNoaXA6aG92ZXI6OmFmdGVye29wYWNpdHk6LjEyfS5tYXQtc3RhbmRhcmQtY2hpcDpmb2N1c3tvdXRsaW5lOm5vbmV9Lm1hdC1zdGFuZGFyZC1jaGlwOmZvY3VzOjphZnRlcntvcGFjaXR5Oi4xNn0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc3RhbmRhcmQtY2hpcHtvdXRsaW5lOnNvbGlkIDFweH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc3RhbmRhcmQtY2hpcDpmb2N1c3tvdXRsaW5lOmRvdHRlZCAycHh9Lm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLWRpc2FibGVkOjphZnRlcntvcGFjaXR5OjB9Lm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLWRpc2FibGVkIC5tYXQtY2hpcC1yZW1vdmUsLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLWRpc2FibGVkIC5tYXQtY2hpcC10cmFpbGluZy1pY29ue2N1cnNvcjpkZWZhdWx0fS5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC13aXRoLXRyYWlsaW5nLWljb24ubWF0LWNoaXAtd2l0aC1hdmF0YXIsLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXdpdGgtYXZhdGFye3BhZGRpbmctdG9wOjA7cGFkZGluZy1ib3R0b206MH0ubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtd2l0aC10cmFpbGluZy1pY29uLm1hdC1jaGlwLXdpdGgtYXZhdGFye3BhZGRpbmctcmlnaHQ6OHB4O3BhZGRpbmctbGVmdDowfVtkaXI9cnRsXSAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtd2l0aC10cmFpbGluZy1pY29uLm1hdC1jaGlwLXdpdGgtYXZhdGFye3BhZGRpbmctbGVmdDo4cHg7cGFkZGluZy1yaWdodDowfS5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC13aXRoLXRyYWlsaW5nLWljb257cGFkZGluZy10b3A6N3B4O3BhZGRpbmctYm90dG9tOjdweDtwYWRkaW5nLXJpZ2h0OjhweDtwYWRkaW5nLWxlZnQ6MTJweH1bZGlyPXJ0bF0gLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXdpdGgtdHJhaWxpbmctaWNvbntwYWRkaW5nLWxlZnQ6OHB4O3BhZGRpbmctcmlnaHQ6MTJweH0ubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtd2l0aC1hdmF0YXJ7cGFkZGluZy1sZWZ0OjA7cGFkZGluZy1yaWdodDoxMnB4fVtkaXI9cnRsXSAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtd2l0aC1hdmF0YXJ7cGFkZGluZy1yaWdodDowO3BhZGRpbmctbGVmdDoxMnB4fS5tYXQtc3RhbmRhcmQtY2hpcCAubWF0LWNoaXAtYXZhdGFye3dpZHRoOjI0cHg7aGVpZ2h0OjI0cHg7bWFyZ2luLXJpZ2h0OjhweDttYXJnaW4tbGVmdDo0cHh9W2Rpcj1ydGxdIC5tYXQtc3RhbmRhcmQtY2hpcCAubWF0LWNoaXAtYXZhdGFye21hcmdpbi1sZWZ0OjhweDttYXJnaW4tcmlnaHQ6NHB4fS5tYXQtc3RhbmRhcmQtY2hpcCAubWF0LWNoaXAtcmVtb3ZlLC5tYXQtc3RhbmRhcmQtY2hpcCAubWF0LWNoaXAtdHJhaWxpbmctaWNvbnt3aWR0aDoxOHB4O2hlaWdodDoxOHB4O2N1cnNvcjpwb2ludGVyfS5tYXQtc3RhbmRhcmQtY2hpcCAubWF0LWNoaXAtcmVtb3ZlLC5tYXQtc3RhbmRhcmQtY2hpcCAubWF0LWNoaXAtdHJhaWxpbmctaWNvbnttYXJnaW4tbGVmdDo4cHg7bWFyZ2luLXJpZ2h0OjB9W2Rpcj1ydGxdIC5tYXQtc3RhbmRhcmQtY2hpcCAubWF0LWNoaXAtcmVtb3ZlLFtkaXI9cnRsXSAubWF0LXN0YW5kYXJkLWNoaXAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb257bWFyZ2luLXJpZ2h0OjhweDttYXJnaW4tbGVmdDowfS5tYXQtY2hpcC1yaXBwbGV7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6bm9uZTtib3JkZXItcmFkaXVzOmluaGVyaXQ7b3ZlcmZsb3c6aGlkZGVufS5tYXQtY2hpcC1saXN0LXdyYXBwZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztmbGV4LXdyYXA6d3JhcDthbGlnbi1pdGVtczpjZW50ZXI7bWFyZ2luOi00cHh9Lm1hdC1jaGlwLWxpc3Qtd3JhcHBlciBpbnB1dC5tYXQtaW5wdXQtZWxlbWVudCwubWF0LWNoaXAtbGlzdC13cmFwcGVyIC5tYXQtc3RhbmRhcmQtY2hpcHttYXJnaW46NHB4fS5tYXQtY2hpcC1saXN0LXN0YWNrZWQgLm1hdC1jaGlwLWxpc3Qtd3JhcHBlcntmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6ZmxleC1zdGFydH0ubWF0LWNoaXAtbGlzdC1zdGFja2VkIC5tYXQtY2hpcC1saXN0LXdyYXBwZXIgLm1hdC1zdGFuZGFyZC1jaGlwe3dpZHRoOjEwMCV9Lm1hdC1jaGlwLWF2YXRhcntib3JkZXItcmFkaXVzOjUwJTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7b3ZlcmZsb3c6aGlkZGVuO29iamVjdC1maXQ6Y292ZXJ9aW5wdXQubWF0LWNoaXAtaW5wdXR7d2lkdGg6MTUwcHg7bWFyZ2luOjRweDtmbGV4OjEgMCAxNTBweH1cbiddfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Y2h9LHt0eXBlOkhofSx7dHlwZTpNeixkZWNvcmF0b3JzOlt7dHlwZTpfc31dfSx7dHlwZTpCaixkZWNvcmF0b3JzOlt7dHlwZTpfc31dfSx7dHlwZTpsVSxkZWNvcmF0b3JzOlt7dHlwZTpfc31dfSx7dHlwZTplSH0se3R5cGU6bmosZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOkNzfV19XX0pLHthcmlhT3JpZW50YXRpb246W3t0eXBlOnlfLGFyZ3M6WyJhcmlhLW9yaWVudGF0aW9uIl19XSxjaGFuZ2U6W3t0eXBlOl9ffV0sdmFsdWVDaGFuZ2U6W3t0eXBlOl9ffV0sbXVsdGlwbGU6W3t0eXBlOnlffV0sY29tcGFyZVdpdGg6W3t0eXBlOnlffV0sdmFsdWU6W3t0eXBlOnlffV0scmVxdWlyZWQ6W3t0eXBlOnlffV0scGxhY2Vob2xkZXI6W3t0eXBlOnlffV0sZGlzYWJsZWQ6W3t0eXBlOnlffV0sc2VsZWN0YWJsZTpbe3R5cGU6eV99XSx0YWJJbmRleDpbe3R5cGU6eV99XSxlcnJvclN0YXRlTWF0Y2hlcjpbe3R5cGU6eV99XSxjaGlwczpbe3R5cGU6enIsYXJnczpbaXl0LHtkZXNjZW5kYW50czohMH1dfV19KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmxldCBweXQ9MDtjbGFzcyBteXR7Y29uc3RydWN0b3IodCxlKXt0aGlzLl9lbGVtZW50UmVmPXQsdGhpcy5fZGVmYXVsdE9wdGlvbnM9ZSx0aGlzLmZvY3VzZWQ9ITEsdGhpcy5fYWRkT25CbHVyPSExLHRoaXMuc2VwYXJhdG9yS2V5Q29kZXM9dGhpcy5fZGVmYXVsdE9wdGlvbnMuc2VwYXJhdG9yS2V5Q29kZXMsdGhpcy5jaGlwRW5kPW5ldyBBYix0aGlzLnBsYWNlaG9sZGVyPSIiLHRoaXMuaWQ9Im1hdC1jaGlwLWxpc3QtaW5wdXQtIitweXQrKyx0aGlzLl9kaXNhYmxlZD0hMSx0aGlzLl9pbnB1dEVsZW1lbnQ9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50fXNldCBjaGlwTGlzdCh0KXt0JiYodGhpcy5fY2hpcExpc3Q9dCx0aGlzLl9jaGlwTGlzdC5yZWdpc3RlcklucHV0KHRoaXMpKX1nZXQgYWRkT25CbHVyKCl7cmV0dXJuIHRoaXMuX2FkZE9uQmx1cn1zZXQgYWRkT25CbHVyKHQpe3RoaXMuX2FkZE9uQmx1cj1ySSh0KX1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR8fHRoaXMuX2NoaXBMaXN0JiZ0aGlzLl9jaGlwTGlzdC5kaXNhYmxlZH1zZXQgZGlzYWJsZWQodCl7dGhpcy5fZGlzYWJsZWQ9ckkodCl9Z2V0IGVtcHR5KCl7cmV0dXJuIXRoaXMuX2lucHV0RWxlbWVudC52YWx1ZX1uZ09uQ2hhbmdlcygpe3RoaXMuX2NoaXBMaXN0LnN0YXRlQ2hhbmdlcy5uZXh0KCl9X2tleWRvd24odCl7dCYmOT09PXQua2V5Q29kZSYmIWFJKHQsInNoaWZ0S2V5IikmJnRoaXMuX2NoaXBMaXN0Ll9hbGxvd0ZvY3VzRXNjYXBlKCksdGhpcy5fZW1pdENoaXBFbmQodCl9X2JsdXIoKXt0aGlzLmFkZE9uQmx1ciYmdGhpcy5fZW1pdENoaXBFbmQoKSx0aGlzLmZvY3VzZWQ9ITEsdGhpcy5fY2hpcExpc3QuZm9jdXNlZHx8dGhpcy5fY2hpcExpc3QuX2JsdXIoKSx0aGlzLl9jaGlwTGlzdC5zdGF0ZUNoYW5nZXMubmV4dCgpfV9mb2N1cygpe3RoaXMuZm9jdXNlZD0hMCx0aGlzLl9jaGlwTGlzdC5zdGF0ZUNoYW5nZXMubmV4dCgpfV9lbWl0Q2hpcEVuZCh0KXshdGhpcy5faW5wdXRFbGVtZW50LnZhbHVlJiZ0JiZ0aGlzLl9jaGlwTGlzdC5fa2V5ZG93bih0KSx0JiYhdGhpcy5faXNTZXBhcmF0b3JLZXkodCl8fCh0aGlzLmNoaXBFbmQuZW1pdCh7aW5wdXQ6dGhpcy5faW5wdXRFbGVtZW50LHZhbHVlOnRoaXMuX2lucHV0RWxlbWVudC52YWx1ZX0pLHQmJnQucHJldmVudERlZmF1bHQoKSl9X29uSW5wdXQoKXt0aGlzLl9jaGlwTGlzdC5zdGF0ZUNoYW5nZXMubmV4dCgpfWZvY3VzKHQpe3RoaXMuX2lucHV0RWxlbWVudC5mb2N1cyh0KX1faXNTZXBhcmF0b3JLZXkodCl7cmV0dXJuIWFJKHQpJiZuZXcgU2V0KHRoaXMuc2VwYXJhdG9yS2V5Q29kZXMpLmhhcyh0LmtleUNvZGUpfX1teXQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fG15dCkoTXUoY2gpLE11KHJ5dCkpfSxteXQuybVkaXI9Sm8oe3R5cGU6bXl0LHNlbGVjdG9yczpbWyJpbnB1dCIsIm1hdENoaXBJbnB1dEZvciIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1jaGlwLWlucHV0IiwibWF0LWlucHV0LWVsZW1lbnQiXSxob3N0VmFyczo1LGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MSZlJiZOdSgia2V5ZG93biIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4uX2tleWRvd24oZSl9KSkoImJsdXIiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uX2JsdXIoKX0pKSgiZm9jdXMiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uX2ZvY3VzKCl9KSkoImlucHV0IiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLl9vbklucHV0KCl9KSksMiZlJiYoa2YoImlkIixuLmlkKSxObSgiZGlzYWJsZWQiLG4uZGlzYWJsZWR8fG51bGwpKCJwbGFjZWhvbGRlciIsbi5wbGFjZWhvbGRlcnx8bnVsbCkoImFyaWEtaW52YWxpZCIsbi5fY2hpcExpc3QmJm4uX2NoaXBMaXN0Lm5nQ29udHJvbD9uLl9jaGlwTGlzdC5uZ0NvbnRyb2wuaW52YWxpZDpudWxsKSgiYXJpYS1yZXF1aXJlZCIsbi5fY2hpcExpc3QmJm4uX2NoaXBMaXN0LnJlcXVpcmVkfHxudWxsKSl9LGlucHV0czp7c2VwYXJhdG9yS2V5Q29kZXM6WyJtYXRDaGlwSW5wdXRTZXBhcmF0b3JLZXlDb2RlcyIsInNlcGFyYXRvcktleUNvZGVzIl0scGxhY2Vob2xkZXI6InBsYWNlaG9sZGVyIixpZDoiaWQiLGNoaXBMaXN0OlsibWF0Q2hpcElucHV0Rm9yIiwiY2hpcExpc3QiXSxhZGRPbkJsdXI6WyJtYXRDaGlwSW5wdXRBZGRPbkJsdXIiLCJhZGRPbkJsdXIiXSxkaXNhYmxlZDoiZGlzYWJsZWQifSxvdXRwdXRzOntjaGlwRW5kOiJtYXRDaGlwSW5wdXRUb2tlbkVuZCJ9LGV4cG9ydEFzOlsibWF0Q2hpcElucHV0IiwibWF0Q2hpcElucHV0Rm9yIl0sZmVhdHVyZXM6W1NpXX0pLG15dC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmNofSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbcnl0XX1dfV0sbXl0LnByb3BEZWNvcmF0b3JzPXtjaGlwTGlzdDpbe3R5cGU6eV8sYXJnczpbIm1hdENoaXBJbnB1dEZvciJdfV0sYWRkT25CbHVyOlt7dHlwZTp5XyxhcmdzOlsibWF0Q2hpcElucHV0QWRkT25CbHVyIl19XSxzZXBhcmF0b3JLZXlDb2Rlczpbe3R5cGU6eV8sYXJnczpbIm1hdENoaXBJbnB1dFNlcGFyYXRvcktleUNvZGVzIl19XSxjaGlwRW5kOlt7dHlwZTpfXyxhcmdzOlsibWF0Q2hpcElucHV0VG9rZW5FbmQiXX1dLHBsYWNlaG9sZGVyOlt7dHlwZTp5X31dLGlkOlt7dHlwZTp5X31dLGRpc2FibGVkOlt7dHlwZTp5X31dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKG15dCxbe3R5cGU6Z18sYXJnczpbe3NlbGVjdG9yOiJpbnB1dFttYXRDaGlwSW5wdXRGb3JdIixleHBvcnRBczoibWF0Q2hpcElucHV0LCBtYXRDaGlwSW5wdXRGb3IiLGhvc3Q6e2NsYXNzOiJtYXQtY2hpcC1pbnB1dCBtYXQtaW5wdXQtZWxlbWVudCIsIihrZXlkb3duKSI6Il9rZXlkb3duKCRldmVudCkiLCIoYmx1cikiOiJfYmx1cigpIiwiKGZvY3VzKSI6Il9mb2N1cygpIiwiKGlucHV0KSI6Il9vbklucHV0KCkiLCJbaWRdIjoiaWQiLCJbYXR0ci5kaXNhYmxlZF0iOiJkaXNhYmxlZCB8fCBudWxsIiwiW2F0dHIucGxhY2Vob2xkZXJdIjoicGxhY2Vob2xkZXIgfHwgbnVsbCIsIlthdHRyLmFyaWEtaW52YWxpZF0iOiJfY2hpcExpc3QgJiYgX2NoaXBMaXN0Lm5nQ29udHJvbCA/IF9jaGlwTGlzdC5uZ0NvbnRyb2wuaW52YWxpZCA6IG51bGwiLCJbYXR0ci5hcmlhLXJlcXVpcmVkXSI6Il9jaGlwTGlzdCAmJiBfY2hpcExpc3QucmVxdWlyZWQgfHwgbnVsbCJ9fV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Y2h9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltyeXRdfV19XX0pLHtzZXBhcmF0b3JLZXlDb2Rlczpbe3R5cGU6eV8sYXJnczpbIm1hdENoaXBJbnB1dFNlcGFyYXRvcktleUNvZGVzIl19XSxjaGlwRW5kOlt7dHlwZTpfXyxhcmdzOlsibWF0Q2hpcElucHV0VG9rZW5FbmQiXX1dLHBsYWNlaG9sZGVyOlt7dHlwZTp5X31dLGlkOlt7dHlwZTp5X31dLGNoaXBMaXN0Olt7dHlwZTp5XyxhcmdzOlsibWF0Q2hpcElucHV0Rm9yIl19XSxhZGRPbkJsdXI6W3t0eXBlOnlfLGFyZ3M6WyJtYXRDaGlwSW5wdXRBZGRPbkJsdXIiXX1dLGRpc2FibGVkOlt7dHlwZTp5X31dfSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCB1eXQ9W2R5dCxpeXQsbXl0LGF5dCxueXQsb3l0XSxmeXQ9e3NlcGFyYXRvcktleUNvZGVzOlt0SV19O2NsYXNzIGd5dHt9Z3l0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxneXQpfSxneXQuybVtb2Q9Wm8oe3R5cGU6Z3l0fSksZ3l0Lsm1aW5qPWNvKHtwcm92aWRlcnM6W2VILHtwcm92aWRlOnJ5dCx1c2VWYWx1ZTpmeXR9XSxpbXBvcnRzOltbVHpdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oZ3l0LHtkZWNsYXJhdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm5bZHl0LGl5dCxteXQsYXl0LG55dCxveXRdfSxpbXBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW1R6XX0sZXhwb3J0czpmdW5jdGlvbigpe3JldHVybltkeXQsaXl0LG15dCxheXQsbnl0LG95dF19fSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihneXQsW3t0eXBlOmtfLGFyZ3M6W3tpbXBvcnRzOltUel0sZXhwb3J0czp1eXQsZGVjbGFyYXRpb25zOnV5dCxwcm92aWRlcnM6W2VILHtwcm92aWRlOnJ5dCx1c2VWYWx1ZTpmeXR9XX1dfV0sbnVsbCxudWxsKTtjb25zdCBoeXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm57ImVtYmVkZGluZy1zZWxlY3RlZCI6dCwiZW1iZWRkaW5nLXVuc2VsZWN0ZWQiOmV9fTtmdW5jdGlvbiBieXQodCxlKXtpZigxJnQpe2NvbnN0IHQ9RXUoKTtPdSgwLCJtYXQtaWNvbiIsNSksTnUoImNsaWNrIiwoZnVuY3Rpb24gZSgpe3JhKHQpO2NvbnN0IG49THUoKTtyZXR1cm4gbi5vblNlbGVjdC5lbWl0KG4ubWV0cmljKX0pKSxQdSgpfWlmKDImdCl7Y29uc3QgdD1MdSgpO3Z1KCJuZ0NsYXNzIixoYigxLGh5dCx0LmVtYmVkZGluZ3NNZXRyaWM9PT10Lm1ldHJpYyx0LmVtYmVkZGluZ3NNZXRyaWMhPT10Lm1ldHJpYykpfX1jb25zdCB5eXQ9ZnVuY3Rpb24odCl7cmV0dXJue3dpZHRoOnR9fSxfeXQ9ZnVuY3Rpb24odCl7cmV0dXJueyJ2YWx1ZS1pbnZhbGlkIjp0fX07Y2xhc3MgQ3l0e2NvbnN0cnVjdG9yKCl7dGhpcy5vblJlbW92ZT1uZXcgQWIsdGhpcy5vblNlbGVjdD1uZXcgQWIsdGhpcy5vbkZpbHRlckNoYW5nZT1uZXcgQWIsdGhpcy5mb2N1c01pbj0hMSx0aGlzLmZvY3VzTWF4PSExLHRoaXMubmdVbnN1YnNjcmliZT1uZXcgeH1uZ09uSW5pdCgpe3RoaXMubWluRm9ybUNvbnRyb2w9bmV3IElqKHRoaXMuZmlsdGVyVmFsdWVzLm1pbixbVFYucmVxdWlyZWQsVFYubWluKC0xKSxUVi5tYXgoMSksdGhpcy5taW5WYWx1ZVZhbGlkYXRvci5iaW5kKHRoaXMpXSksdGhpcy5tYXhGb3JtQ29udHJvbD1uZXcgSWoodGhpcy5maWx0ZXJWYWx1ZXMubWF4LFtUVi5yZXF1aXJlZCxUVi5taW4oLTEpLFRWLm1heCgxKSx0aGlzLm1heFZhbHVlVmFsaWRhdG9yLmJpbmQodGhpcyldKSx0aGlzLm1pbkZvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKHVuKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgoKCk9Pnt0aGlzLm1pbkZvcm1Db250cm9sLnZhbGlkJiZ0aGlzLm1heEZvcm1Db250cm9sLnZhbGlkJiZ0aGlzLm9uRmlsdGVyQ2hhbmdlLmVtaXQoe21pbjpwYXJzZUZsb2F0KHRoaXMubWluRm9ybUNvbnRyb2wudmFsdWUpLG1heDpwYXJzZUZsb2F0KHRoaXMubWF4Rm9ybUNvbnRyb2wudmFsdWUpfSl9KSksdGhpcy5tYXhGb3JtQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZSh1bih0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5taW5Gb3JtQ29udHJvbC52YWxpZCYmdGhpcy5tYXhGb3JtQ29udHJvbC52YWxpZCYmdGhpcy5vbkZpbHRlckNoYW5nZS5lbWl0KHttaW46cGFyc2VGbG9hdCh0aGlzLm1pbkZvcm1Db250cm9sLnZhbHVlKSxtYXg6cGFyc2VGbG9hdCh0aGlzLm1heEZvcm1Db250cm9sLnZhbHVlKX0pfSkpfW5nT25DaGFuZ2VzKHQpe3RoaXMubWluRm9ybUNvbnRyb2wmJnRoaXMubWF4Rm9ybUNvbnRyb2wmJih0aGlzLm1pbkZvcm1Db250cm9sLnNldFZhbHVlKHRoaXMuZmlsdGVyVmFsdWVzLm1pbix7ZW1pdEV2ZW50OiExfSksdGhpcy5tYXhGb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLmZpbHRlclZhbHVlcy5tYXgse2VtaXRFdmVudDohMX0pKX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9bWluVmFsdWVWYWxpZGF0b3IodCl7cmV0dXJuIHRoaXMubWF4Rm9ybUNvbnRyb2wmJiJOYU4iIT09dC52YWx1ZT9pc05hTihwYXJzZUZsb2F0KHQudmFsdWUpKT97dmFsdWU6InRoZSBzdHJpbmcgeW91IGVudGVyZWQgaXMgbmVpdGhlciBOYU4gbm9yIGEgbnVtYmVyIn06cGFyc2VGbG9hdCh0LnZhbHVlKT5wYXJzZUZsb2F0KHRoaXMubWF4Rm9ybUNvbnRyb2wudmFsdWUpP3t2YWx1ZToidGhlIG51bWJlciB5b3UgZW50ZXJlZCBpcyBsYXJnZXIgdGhhbiB0aGUgbWF4IHZhbHVlIn06bnVsbDpudWxsfW1heFZhbHVlVmFsaWRhdG9yKHQpe3JldHVybiB0aGlzLm1pbkZvcm1Db250cm9sPyJOYU4iPT09dGhpcy5taW5Gb3JtQ29udHJvbC52YWx1ZSYmIk5hTiI9PT10LnZhbHVlP251bGw6aXNOYU4ocGFyc2VGbG9hdCh0LnZhbHVlKSk/e3ZhbHVlOiJ0aGUgc3RyaW5nIHlvdSBlbnRlcmVkIGlzIG5laXRoZXIgTmFOIG5vciBhIG51bWJlciJ9OnQudmFsdWU8dGhpcy5taW5Gb3JtQ29udHJvbC52YWx1ZT97dmFsdWU6InRoZSBudW1iZXIgeW91IGVudGVyZWQgaXMgc21hbGxlciB0aGFuIHRoZSBtaW4gdmFsdWUifTpudWxsOm51bGx9Z2V0RXJyb3JEZXNjcmlwdGlvbih0KXtpZih0KXtjb25zdCBlPU9iamVjdC5rZXlzKHQpWzBdO3JldHVybiJyZXF1aXJlZCI9PT1lPyJ5b3UgZGlkIG5vdCBlbnRlciBhbnl0aGluZyI6Im1pbiI9PT1lPyJ0aGUgbnVtYmVyIG11c3QgYmUgYXQgbGVhc3QgLTEuMCI6Im1heCI9PT1lPyJ0aGUgbnVtYmVyIGlzIGJpZ2dlciB0aGFuIDEuMCI6dFtlXX1yZXR1cm4iIn19Q3l0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxDeXQpfSxDeXQuybVjbXA9VW8oe3R5cGU6Q3l0LHNlbGVjdG9yczpbWyJtZXRyaWMtYXJpdGhtZXRpYy1lbGVtZW50LWNvbXBvbmVudCJdXSxpbnB1dHM6e21ldHJpYzoibWV0cmljIixmaWx0ZXJWYWx1ZXM6ImZpbHRlclZhbHVlcyIsaGFzRW1iZWRkaW5nc0RhdGE6Imhhc0VtYmVkZGluZ3NEYXRhIixlbWJlZGRpbmdzTWV0cmljOiJlbWJlZGRpbmdzTWV0cmljIn0sb3V0cHV0czp7b25SZW1vdmU6Im9uUmVtb3ZlIixvblNlbGVjdDoib25TZWxlY3QiLG9uRmlsdGVyQ2hhbmdlOiJvbkZpbHRlckNoYW5nZSJ9LGZlYXR1cmVzOltTaV0sZGVjbHM6MTAsdmFyczoyMixjb25zdHM6W1sxLCJmaWx0ZXItY2hpcCIsMywicmVtb3ZlZCJdLFsiY2xhc3MiLCJlbWJlZGRpbmdzLWJ1dHRvbiIsInN2Z0ljb24iLCJncm91cF93b3JrXzI0cHgiLDMsIm5nQ2xhc3MiLCJjbGljayIsNCwibmdJZiJdLFsxLCJtZXRyaWMtYXJpdGhtZXRpYy1lbGVtZW50LXJhbmdlIiwzLCJrZXlkb3duIl0sWyJtYXRJbnB1dCIsIiIsMSwiaW5wdXQtZmllbGQiLDMsInZhbHVlIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBEaXNhYmxlZCIsIm5nU3R5bGUiLCJuZ0NsYXNzIiwiZm9ybUNvbnRyb2wiLCJmb2N1cyIsImZvY3Vzb3V0Il0sWyJtYXRDaGlwUmVtb3ZlIiwiIiwic3ZnSWNvbiIsImNhbmNlbF8yNHB4Il0sWyJzdmdJY29uIiwiZ3JvdXBfd29ya18yNHB4IiwxLCJlbWJlZGRpbmdzLWJ1dHRvbiIsMywibmdDbGFzcyIsImNsaWNrIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihPdSgwLCJtYXQtY2hpcCIsMCksTnUoInJlbW92ZWQiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub25SZW1vdmUuZW1pdChuLm1ldHJpYyl9KSksV20oMSxieXQsMSw0LCJtYXQtaWNvbiIsMSksTWYoMiksT3UoMywiZGl2IiwyKSxOdSgia2V5ZG93biIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIGUuc3RvcFByb3BhZ2F0aW9uKCl9KSksTWYoNCwiIFsgIiksT3UoNSwiaW5wdXQiLDMpLE51KCJmb2N1cyIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5mb2N1c01pbj0hMH0pKSgiZm9jdXNvdXQiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uZm9jdXNNaW49ITF9KSksUHUoKSxNZig2LCIgOyAiKSxPdSg3LCJpbnB1dCIsMyksTnUoImZvY3VzIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLmZvY3VzTWF4PSEwfSkpKCJmb2N1c291dCIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5mb2N1c01heD0hMX0pKSxQdSgpLE1mKDgsIiBdICIpLFB1KCksd3UoOSwibWF0LWljb24iLDQpLFB1KCkpLDImZSYmKEpjKDEpLHZ1KCJuZ0lmIixuLmhhc0VtYmVkZGluZ3NEYXRhKSxKYygxKSx4ZigiICIsbi5tZXRyaWMsIiAiKSxKYygzKSx2dSgidmFsdWUiLG4uZmlsdGVyVmFsdWVzLm1pbikoIm1hdFRvb2x0aXAiLG4uZ2V0RXJyb3JEZXNjcmlwdGlvbihuLm1pbkZvcm1Db250cm9sLmVycm9ycykpKCJtYXRUb29sdGlwRGlzYWJsZWQiLCFuLm1pbkZvcm1Db250cm9sLmludmFsaWQpKCJuZ1N0eWxlIixnYigxNCx5eXQsbi5mb2N1c01pbj8iMTAwcHgiOm4ubWluRm9ybUNvbnRyb2wudmFsdWUudG9TdHJpbmcoKS5sZW5ndGgrImNoIikpKCJuZ0NsYXNzIixnYigxNixfeXQsIW4ubWluRm9ybUNvbnRyb2wudmFsaWQpKSgiZm9ybUNvbnRyb2wiLG4ubWluRm9ybUNvbnRyb2wpLEpjKDIpLHZ1KCJ2YWx1ZSIsbi5maWx0ZXJWYWx1ZXMubWF4KSgibWF0VG9vbHRpcCIsbi5nZXRFcnJvckRlc2NyaXB0aW9uKG4ubWF4Rm9ybUNvbnRyb2wuZXJyb3JzKSkoIm1hdFRvb2x0aXBEaXNhYmxlZCIsIW4ubWF4Rm9ybUNvbnRyb2wuaW52YWxpZCkoIm5nU3R5bGUiLGdiKDE4LHl5dCxuLmZvY3VzTWF4PyIxMDBweCI6bi5tYXhGb3JtQ29udHJvbC52YWx1ZS50b1N0cmluZygpLmxlbmd0aCsiY2giKSkoIm5nQ2xhc3MiLGdiKDIwLF95dCwhbi5tYXhGb3JtQ29udHJvbC52YWxpZCkpKCJmb3JtQ29udHJvbCIsbi5tYXhGb3JtQ29udHJvbCkpfSxkaXJlY3RpdmVzOltpeXQsYXYsa1YsV1EsZ3YsdHYsYWosclUsY0csYXl0XSxzdHlsZXM6WycubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1iYWRnZS1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo5cHh9Lm1hdC1iYWRnZS1sYXJnZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4fS5tYXQtaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWhlYWRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAyNHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE1cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjgzKS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1oNltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC42NykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtYm9keS1zdHJvbmdbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MCAwIDEycHh9Lm1hdC1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FwdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTJweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6MzAwIDExMnB4LzExMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wNWVtO21hcmdpbjowIDAgNTZweH0ubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNTZweC81NnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMmVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNDVweC80OHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMDVlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDM0cHgvNDBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1yYWlzZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3Ryb2tlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZsYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mYWJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW1pbmktZmFiW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtYnV0dG9uLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FyZC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjBweH0ubWF0LWNhcmQtc3VidGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hlY2tib3gtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC10cmFpbGluZy1pY29uLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC1yZW1vdmUubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxOHB4fS5tYXQtdGFibGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWhlYWRlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb290ZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jYWxlbmRhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FsZW5kYXItYm9keVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYWxlbmRhci1wZXJpb2QtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWRpYWxvZy10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTI1O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTUwJTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjVlbTt3aWR0aDoxLjVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW07bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41ZW0gMDtib3JkZXItdG9wOi44NDM3NWVtIHNvbGlkIHRyYW5zcGFyZW50fS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3RvcDotMC44NDM3NWVtO3BhZGRpbmctdG9wOi44NDM3NWVtfS5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjc1JTttYXJnaW4tdG9wOi42NjY2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNzkxNjY2NjY2N2VtKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAycHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyM2VtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzUzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi41NDE2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNjY2NjY2NjY2N2VtKX1AbWVkaWEgcHJpbnR7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIyZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIxZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMmVtKSBzY2FsZSgwLjc1KX19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjI1ZW0gMCAuNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4wOTM3NWVtO21hcmdpbi10b3A6LTAuNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MWVtIDAgMWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjg0Mzc1ZW07bWFyZ2luLXRvcDotMC4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH1pbnB1dC5tYXQtaW5wdXQtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDotMC4wNjI1ZW19Lm1hdC1tZW51LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1wYWdpbmF0b3JbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXBhZ2luYXRvci1wYWdlLXNpemVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3RbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXN0ZXBwZXItdmVydGljYWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc3RlcC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0Om5vcm1hbH0ubWF0LXN0ZXAtbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRhYi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjB9Lm1hdC10b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTZweH0ubWF0LW9wdGdyb3VwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LXNpbXBsZS1zbmFja2Jhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbltfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRyZWVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbmVzdGVkLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4fS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVdOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtcmlwcGxlLm1hdC1yaXBwbGUtdW5ib3VuZGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6NTAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7dHJhbnNmb3JtOnNjYWxlKDApfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpub25lfS5jZGstdmlzdWFsbHktaGlkZGVuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7bGVmdDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmVtcHR5e2Rpc3BsYXk6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LXBhbmVbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOmF1dG87Ym94LXNpemluZzpib3JkZXItYm94O3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7bWF4LXdpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlfS5jZGstb3ZlcmxheS1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKTtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5Oi42fS5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjMyKX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTowfS5jZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO292ZXJmbG93LXk6c2Nyb2xsfUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnR7fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5ke30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxse2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCAwcyAxbXN9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06bm90KDotd2Via2l0LWF1dG9maWxsKXthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIDBzIDFtc310ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemVbX25nY29udGVudC0lQ09NUCVde3Jlc2l6ZTpub25lfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmdbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OmF1dG8gIWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW4gIWltcG9ydGFudH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nLWZpcmVmb3hbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OjAgIWltcG9ydGFudH0ubWF0LWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0uZmlsdGVyLWNoaXBbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7bWFyZ2luLWxlZnQ6NXB4fS5tZXRyaWMtYXJpdGhtZXRpYy1lbGVtZW50LXJhbmdlW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjojZmZmO2ZvbnQtc2l6ZTouOGVtO2hlaWdodDozMHB4O2p1c3RpZnktY29udGVudDpjZW50ZXI7bGluZS1oZWlnaHQ6MzBweDtwYWRkaW5nOjAgNXB4O21hcmdpbi1sZWZ0OjVweH0uaW5wdXQtZmllbGRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyOm5vbmU7Zm9udC1mYW1pbHk6bW9ub3NwYWNlO2ZvbnQtc2l6ZToxLjFlbTt0cmFuc2l0aW9uOndpZHRoIDFzfS5pbnB1dC1maWVsZFtfbmdjb250ZW50LSVDT01QJV06Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xMik7Ym9yZGVyOm5vbmU7b3V0bGluZTpub25lfS52YWx1ZS1pbnZhbGlkW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojZjQ0MzM2fS5lbWJlZGRpbmctc2VsZWN0ZWRbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNmNTdjMDA7b3BhY2l0eToxfS5lbWJlZGRpbmctdW5zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTouNH0uZW1iZWRkaW5ncy1idXR0b25bX25nY29udGVudC0lQ09NUCVde3dpZHRoOjE4cHg7aGVpZ2h0OjE4cHg7bWFyZ2luLXJpZ2h0OjhweDtjdXJzb3I6cG9pbnRlcn0nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoQ3l0LFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6Im1ldHJpYy1hcml0aG1ldGljLWVsZW1lbnQtY29tcG9uZW50Iix0ZW1wbGF0ZVVybDoiLi9tZXRyaWNfYXJpdGhtZXRpY19lbGVtZW50X2NvbXBvbmVudC5uZy5odG1sIixzdHlsZVVybHM6WyIuL21ldHJpY19hcml0aG1ldGljX2VsZW1lbnRfY29tcG9uZW50LmNzcyJdLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2h9XX1dLG51bGwse21ldHJpYzpbe3R5cGU6eV99XSxmaWx0ZXJWYWx1ZXM6W3t0eXBlOnlffV0saGFzRW1iZWRkaW5nc0RhdGE6W3t0eXBlOnlffV0sZW1iZWRkaW5nc01ldHJpYzpbe3R5cGU6eV99XSxvblJlbW92ZTpbe3R5cGU6X199XSxvblNlbGVjdDpbe3R5cGU6X199XSxvbkZpbHRlckNoYW5nZTpbe3R5cGU6X199XX0pO2NsYXNzIE15dHtjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXQsdGhpcy5maWx0ZXJWYWx1ZXMkPXRoaXMuc3RvcmUucGlwZShSayh0YnQpKS5waXBlKGh0KCh0PT57Y29uc3QgZT10W3RoaXMubWV0cmljXTtyZXR1cm4gZT97bWluOmUuaW5jbHVkZU5hTj8iTmFOIjp0aGlzLnJvdW5kVG9UaHJlZURlY2ltYWxQb2ludHMoZS5taW4pLG1heDplLm1heDxlLm1pbj8iTmFOIjp0aGlzLnJvdW5kVG9UaHJlZURlY2ltYWxQb2ludHMoZS5tYXgpfTp7bWluOi0xLG1heDoxfX0pKSksdGhpcy5oYXNFbWJlZGRpbmdzRGF0YSQ9dGhpcy5zdG9yZS5waXBlKFJrKHFodCkpLnBpcGUoaHQoKHQ9PnZvaWQgMCE9PXQpKSksdGhpcy5lbWJlZGRpbmdzTWV0cmljJD10aGlzLnN0b3JlLnBpcGUoUmsoY2J0KSl9cmVtb3ZlKHQpe3RoaXMuc3RvcmUuZGlzcGF0Y2goT2J0KHttZXRyaWM6dH0pKX1zZWxlY3QodCl7dGhpcy5zdG9yZS5kaXNwYXRjaChUYnQoe21ldHJpYzp0fSkpfWZpbHRlckNoYW5nZSh0KXtjb25zdCBlPWlzTmFOKHQubWluKT8tMTp0Lm1pbixuPWlzTmFOKHQubWF4KT8tMjp0Lm1heCxvPWlzTmFOKHQubWluKTt0aGlzLnN0b3JlLmRpc3BhdGNoKFBidCh7bWV0cmljOnRoaXMubWV0cmljLG1heDpuLG1pbjplLGluY2x1ZGVOYU46b30pKX1yb3VuZFRvVGhyZWVEZWNpbWFsUG9pbnRzKHQpe3JldHVybiBNYXRoLnJvdW5kKDFlMyoodCtOdW1iZXIuRVBTSUxPTikpLzFlM319TXl0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxNeXQpKE11KEVrKSl9LE15dC7JtWNtcD1Vbyh7dHlwZTpNeXQsc2VsZWN0b3JzOltbIm5wbWktbWV0cmljLWFyaXRobWV0aWMtZWxlbWVudCJdXSxpbnB1dHM6e21ldHJpYzoibWV0cmljIn0sZGVjbHM6NCx2YXJzOjEwLGNvbnN0czpbWzMsIm1ldHJpYyIsImZpbHRlclZhbHVlcyIsImhhc0VtYmVkZGluZ3NEYXRhIiwiZW1iZWRkaW5nc01ldHJpYyIsIm9uUmVtb3ZlIiwib25TZWxlY3QiLCJvbkZpbHRlckNoYW5nZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoT3UoMCwibWV0cmljLWFyaXRobWV0aWMtZWxlbWVudC1jb21wb25lbnQiLDApLE51KCJvblJlbW92ZSIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ucmVtb3ZlKGUpfSkpKCJvblNlbGVjdCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4uc2VsZWN0KGUpfSkpKCJvbkZpbHRlckNoYW5nZSIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4uZmlsdGVyQ2hhbmdlKGUpfSkpLE9iKDEsImFzeW5jIiksT2IoMiwiYXN5bmMiKSxPYigzLCJhc3luYyIpLFB1KCkpLDImZSYmdnUoIm1ldHJpYyIsbi5tZXRyaWMpKCJmaWx0ZXJWYWx1ZXMiLFBiKDEsNCxuLmZpbHRlclZhbHVlcyQpKSgiaGFzRW1iZWRkaW5nc0RhdGEiLFBiKDIsNixuLmhhc0VtYmVkZGluZ3NEYXRhJCkpKCJlbWJlZGRpbmdzTWV0cmljIixQYigzLDgsbi5lbWJlZGRpbmdzTWV0cmljJCkpfSxkaXJlY3RpdmVzOltDeXRdLHBpcGVzOltNdl0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihNeXQsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoibnBtaS1tZXRyaWMtYXJpdGhtZXRpYy1lbGVtZW50Iix0ZW1wbGF0ZTonXG4gICAgPG1ldHJpYy1hcml0aG1ldGljLWVsZW1lbnQtY29tcG9uZW50XG4gICAgICBbbWV0cmljXT0ibWV0cmljIlxuICAgICAgW2ZpbHRlclZhbHVlc109ImZpbHRlclZhbHVlcyQgfCBhc3luYyJcbiAgICAgIFtoYXNFbWJlZGRpbmdzRGF0YV09Imhhc0VtYmVkZGluZ3NEYXRhJCB8IGFzeW5jIlxuICAgICAgW2VtYmVkZGluZ3NNZXRyaWNdPSJlbWJlZGRpbmdzTWV0cmljJCB8IGFzeW5jIlxuICAgICAgKG9uUmVtb3ZlKT0icmVtb3ZlKCRldmVudCkiXG4gICAgICAob25TZWxlY3QpPSJzZWxlY3QoJGV2ZW50KSJcbiAgICAgIChvbkZpbHRlckNoYW5nZSk9ImZpbHRlckNoYW5nZSgkZXZlbnQpIlxuICAgID48L21ldHJpYy1hcml0aG1ldGljLWVsZW1lbnQtY29tcG9uZW50PlxuICAnLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2h9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpFa31dfSkse21ldHJpYzpbe3R5cGU6eV99XX0pO2NsYXNzIHZ5dHtjb25zdHJ1Y3Rvcigpe3RoaXMuT3BlcmF0b3I9Rmh0fX1mdW5jdGlvbiB4eXQodCxlKXsxJnQmJnd1KDAsIm5wbWktbWV0cmljLWFyaXRobWV0aWMtZWxlbWVudCIsNCksMiZ0JiZ2dSgibWV0cmljIixMdSgpLiRpbXBsaWNpdC5tZXRyaWMpfWZ1bmN0aW9uIE95dCh0LGUpezEmdCYmd3UoMCwibnBtaS1tZXRyaWMtYXJpdGhtZXRpYy1vcGVyYXRvciIsNSksMiZ0JiZ2dSgib3BlcmF0b3IiLEx1KCkuJGltcGxpY2l0Lm9wZXJhdG9yKX1mdW5jdGlvbiBQeXQodCxlKXtpZigxJnQmJihPdSgwLCJkaXYiKSxXbSgxLHh5dCwxLDEsIm5wbWktbWV0cmljLWFyaXRobWV0aWMtZWxlbWVudCIsMiksV20oMixPeXQsMSwxLCJucG1pLW1ldHJpYy1hcml0aG1ldGljLW9wZXJhdG9yIiwzKSxQdSgpKSwyJnQpe2NvbnN0IHQ9ZS4kaW1wbGljaXQsbj1MdSgpO0pjKDEpLHZ1KCJuZ0lmIix0LmtpbmQ9PT1uLkFyaXRobWV0aWNLaW5kLk1FVFJJQyksSmMoMSksdnUoIm5nSWYiLHQua2luZD09PW4uQXJpdGhtZXRpY0tpbmQuT1BFUkFUT1IpfX12eXQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHZ5dCl9LHZ5dC7JtWNtcD1Vbyh7dHlwZTp2eXQsc2VsZWN0b3JzOltbIm5wbWktbWV0cmljLWFyaXRobWV0aWMtb3BlcmF0b3IiXV0saW5wdXRzOntvcGVyYXRvcjoib3BlcmF0b3IifSxkZWNsczoyLHZhcnM6MSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoT3UoMCwibWF0LWNoaXAiKSxNZigxKSxQdSgpKSwyJmUmJihKYygxKSx4ZigiICIsbi5vcGVyYXRvcj09PW4uT3BlcmF0b3IuQU5EPyImIjoiIiwiICIpKX0sZGlyZWN0aXZlczpbaXl0XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHZ5dCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJucG1pLW1ldHJpYy1hcml0aG1ldGljLW9wZXJhdG9yIix0ZW1wbGF0ZToiXG4gICAgPG1hdC1jaGlwPlxuICAgICAge3sgb3BlcmF0b3IgPT09IE9wZXJhdG9yLkFORCA/ICcmJyA6ICcnIH19XG4gICAgPC9tYXQtY2hpcD5cbiAgIixjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSxudWxsLHtvcGVyYXRvcjpbe3R5cGU6eV99XX0pO2NsYXNzIHd5dHtjb25zdHJ1Y3Rvcigpe3RoaXMuQXJpdGhtZXRpY0tpbmQ9TGh0fX13eXQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHd5dCl9LHd5dC7JtWNtcD1Vbyh7dHlwZTp3eXQsc2VsZWN0b3JzOltbIm1ldHJpYy1hcml0aG1ldGljLWNvbXBvbmVudCJdXSxpbnB1dHM6e21ldHJpY0FyaXRobWV0aWM6Im1ldHJpY0FyaXRobWV0aWMifSxkZWNsczoyLHZhcnM6Mixjb25zdHM6W1szLCJzZWxlY3RhYmxlIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJtZXRyaWMiLDQsIm5nSWYiXSxbMywib3BlcmF0b3IiLDQsIm5nSWYiXSxbMywibWV0cmljIl0sWzMsIm9wZXJhdG9yIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihPdSgwLCJtYXQtY2hpcC1saXN0IiwwKSxXbSgxLFB5dCwzLDIsImRpdiIsMSksUHUoKSksMiZlJiYodnUoInNlbGVjdGFibGUiLCExKSxKYygxKSx2dSgibmdGb3JPZiIsbi5tZXRyaWNBcml0aG1ldGljKSl9LGRpcmVjdGl2ZXM6W2R5dCxvdixhdixNeXQsdnl0XSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtd3JhcDp3cmFwfSJdLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYih3eXQsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoibWV0cmljLWFyaXRobWV0aWMtY29tcG9uZW50Iix0ZW1wbGF0ZVVybDoiLi9tZXRyaWNfYXJpdGhtZXRpY19jb21wb25lbnQubmcuaHRtbCIsc3R5bGVVcmxzOlsiLi9tZXRyaWNfYXJpdGhtZXRpY19jb21wb25lbnQuY3NzIl0sY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sbnVsbCx7bWV0cmljQXJpdGhtZXRpYzpbe3R5cGU6eV99XX0pO2NsYXNzIGt5dHtjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXQsdGhpcy5tZXRyaWNBcml0aG1ldGljJD10aGlzLnN0b3JlLnBpcGUoUmsoJGh0KSl9fWt5dC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8a3l0KShNdShFaykpfSxreXQuybVjbXA9VW8oe3R5cGU6a3l0LHNlbGVjdG9yczpbWyJucG1pLW1ldHJpYy1hcml0aG1ldGljIl1dLGRlY2xzOjIsdmFyczozLGNvbnN0czpbWzMsIm1ldHJpY0FyaXRobWV0aWMiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKHd1KDAsIm1ldHJpYy1hcml0aG1ldGljLWNvbXBvbmVudCIsMCksT2IoMSwiYXN5bmMiKSksMiZlJiZ2dSgibWV0cmljQXJpdGhtZXRpYyIsUGIoMSwxLG4ubWV0cmljQXJpdGhtZXRpYyQpKX0sZGlyZWN0aXZlczpbd3l0XSxwaXBlczpbTXZdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoa3l0LFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6Im5wbWktbWV0cmljLWFyaXRobWV0aWMiLHRlbXBsYXRlOidcbiAgICA8bWV0cmljLWFyaXRobWV0aWMtY29tcG9uZW50XG4gICAgICBbbWV0cmljQXJpdGhtZXRpY109Im1ldHJpY0FyaXRobWV0aWMkIHwgYXN5bmMiXG4gICAgPjwvbWV0cmljLWFyaXRobWV0aWMtY29tcG9uZW50PlxuICAnLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2h9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpFa31dfSksbnVsbCk7Y2xhc3MgU3l0e31mdW5jdGlvbiBEeXQodCxlLG4pe2lmKG4pcmV0dXJuIHQ7Y29uc3Qgbz1PYmplY3QuYXNzaWduKHt9LHQpO3JldHVybiBlLmZvckVhY2goKHQ9PmRlbGV0ZSBvW3RdKSksb31TeXQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFN5dCl9LFN5dC7JtWNtcD1Vbyh7dHlwZTpTeXQsc2VsZWN0b3JzOltbIm5wbWktZGF0YS1zZWxlY3Rpb24iXV0sZGVjbHM6NCx2YXJzOjAsY29uc3RzOltbMSwiZGF0YS1zZWxlY3Rpb24iXSxbMSwibWV0cmljcy1zZWxlY3RvciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoT3UoMCwiZGl2IiwwKSx3dSgxLCJucG1pLW1ldHJpYy1zZWFyY2giLDEpLHd1KDIsIm5wbWktcmVzdWx0cy1kb3dubG9hZCIpLFB1KCksd3UoMywibnBtaS1tZXRyaWMtYXJpdGhtZXRpYyIpKX0sZGlyZWN0aXZlczpbcWJ0LEpidCxreXRdLHN0eWxlczpbJy5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHh9Lm1hdC1oMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaGVhZGxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTVweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZ1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjA1ZW07bWFyZ2luOjAgMCA1NnB4fS5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAwNWVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXJhaXNlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdHJva2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmxhdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZhYltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbWluaS1mYWJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4fS5tYXQtY2FyZC1zdWJ0aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGVja2JveC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvb3Rlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgdHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIzZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LjU0MTY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2NjY2NjY3ZW0pfUBtZWRpYSBwcmludHsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjJlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouMjVlbSAwIC43NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxZW0gMCAxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMiksIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi0wLjA2MjVlbX0ubWF0LW1lbnUtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci12ZXJ0aWNhbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGFiLWxpbmtbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MH0ubWF0LXRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5Om5vbmV9LmNkay12aXN1YWxseS1oaWRkZW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjZ9LmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV0sIC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3hbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2tbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHt9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7fS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOi13ZWJraXQtYXV0b2ZpbGwpe2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZVtfbmdjb250ZW50LSVDT01QJV17cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fS5tYXQtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfVtfbmdob3N0LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZWJlYmViO3BhZGRpbmc6MTBweCAyMHB4fS5kYXRhLXNlbGVjdGlvbltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0ubWV0cmljcy1zZWxlY3Rvcltfbmdjb250ZW50LSVDT01QJV17ZmxleDoxIDF9J10sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFN5dCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJucG1pLWRhdGEtc2VsZWN0aW9uIix0ZW1wbGF0ZVVybDoiLi9kYXRhX3NlbGVjdGlvbl9jb21wb25lbnQubmcuaHRtbCIsc3R5bGVVcmxzOlsiLi9kYXRhX3NlbGVjdGlvbl9jb21wb25lbnQuY3NzIl0sY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sbnVsbCxudWxsKTtjb25zdCBFeXQ9WyJjaGFydCJdO2NsYXNzIEF5dHtjb25zdHJ1Y3Rvcigpe3RoaXMub25SZW1vdmU9bmV3IEFiLHRoaXMub25VcGRhdGVGaWx0ZXI9bmV3IEFiLHRoaXMuaGVpZ2h0PTMwMCx0aGlzLmNoYXJ0V2lkdGg9MCx0aGlzLmNoYXJ0SGVpZ2h0PTAsdGhpcy5kcmF3SGVpZ2h0PTAsdGhpcy5kcmF3V2lkdGg9MCx0aGlzLm1hcmdpbj17dG9wOjIwLHJpZ2h0OjEwLGJvdHRvbToyMCxsZWZ0OjEwfSx0aGlzLmRyYXdNYXJnaW49e3RvcDowLHJpZ2h0OjAsYm90dG9tOjIwLGxlZnQ6MjB9LHRoaXMuYnJ1c2g9KGZ1bmN0aW9uIHQoKXtyZXR1cm4oZnVuY3Rpb24gdChlKXt2YXIgbixvPW10dCxpPXB0dCxhPXV0dCxyPSEwLHM9WTUoInN0YXJ0IiwiYnJ1c2giLCJlbmQiKSxsPTY7ZnVuY3Rpb24gYyh0KXt2YXIgbj10LnByb3BlcnR5KCJfX2JydXNoIixoKS5zZWxlY3RBbGwoIi5vdmVybGF5IikuZGF0YShbZHR0KCJvdmVybGF5IildKTtuLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJvdmVybGF5IikuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKS5hdHRyKCJjdXJzb3IiLGF0dC5vdmVybGF5KS5tZXJnZShuKS5lYWNoKChmdW5jdGlvbigpe3ZhciB0PWZ0dCh0aGlzKS5leHRlbnQ7cjYodGhpcykuYXR0cigieCIsdFswXVswXSkuYXR0cigieSIsdFswXVsxXSkuYXR0cigid2lkdGgiLHRbMV1bMF0tdFswXVswXSkuYXR0cigiaGVpZ2h0Iix0WzFdWzFdLXRbMF1bMV0pfSkpLHQuc2VsZWN0QWxsKCIuc2VsZWN0aW9uIikuZGF0YShbZHR0KCJzZWxlY3Rpb24iKV0pLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJzZWxlY3Rpb24iKS5hdHRyKCJjdXJzb3IiLGF0dC5zZWxlY3Rpb24pLmF0dHIoImZpbGwiLCIjNzc3IikuYXR0cigiZmlsbC1vcGFjaXR5IiwuMykuYXR0cigic3Ryb2tlIiwiI2ZmZiIpLmF0dHIoInNoYXBlLXJlbmRlcmluZyIsImNyaXNwRWRnZXMiKTt2YXIgbz10LnNlbGVjdEFsbCgiLmhhbmRsZSIpLmRhdGEoZS5oYW5kbGVzLChmdW5jdGlvbih0KXtyZXR1cm4gdC50eXBlfSkpO28uZXhpdCgpLnJlbW92ZSgpLG8uZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsKGZ1bmN0aW9uKHQpe3JldHVybiJoYW5kbGUgaGFuZGxlLS0iK3QudHlwZX0pKS5hdHRyKCJjdXJzb3IiLChmdW5jdGlvbih0KXtyZXR1cm4gYXR0W3QudHlwZV19KSksdC5lYWNoKGQpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKS5vbigibW91c2Vkb3duLmJydXNoIix1KS5maWx0ZXIoYSkub24oInRvdWNoc3RhcnQuYnJ1c2giLHUpLm9uKCJ0b3VjaG1vdmUuYnJ1c2giLGYpLm9uKCJ0b3VjaGVuZC5icnVzaCB0b3VjaGNhbmNlbC5icnVzaCIsZykuc3R5bGUoInRvdWNoLWFjdGlvbiIsIm5vbmUiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpfWZ1bmN0aW9uIGQoKXt2YXIgdD1yNih0aGlzKSxlPWZ0dCh0aGlzKS5zZWxlY3Rpb247ZT8odC5zZWxlY3RBbGwoIi5zZWxlY3Rpb24iKS5zdHlsZSgiZGlzcGxheSIsbnVsbCkuYXR0cigieCIsZVswXVswXSkuYXR0cigieSIsZVswXVsxXSkuYXR0cigid2lkdGgiLGVbMV1bMF0tZVswXVswXSkuYXR0cigiaGVpZ2h0IixlWzFdWzFdLWVbMF1bMV0pLHQuc2VsZWN0QWxsKCIuaGFuZGxlIikuc3R5bGUoImRpc3BsYXkiLG51bGwpLmF0dHIoIngiLChmdW5jdGlvbih0KXtyZXR1cm4iZSI9PT10LnR5cGVbdC50eXBlLmxlbmd0aC0xXT9lWzFdWzBdLWwvMjplWzBdWzBdLWwvMn0pKS5hdHRyKCJ5IiwoZnVuY3Rpb24odCl7cmV0dXJuInMiPT09dC50eXBlWzBdP2VbMV1bMV0tbC8yOmVbMF1bMV0tbC8yfSkpLmF0dHIoIndpZHRoIiwoZnVuY3Rpb24odCl7cmV0dXJuIm4iPT09dC50eXBlfHwicyI9PT10LnR5cGU/ZVsxXVswXS1lWzBdWzBdK2w6bH0pKS5hdHRyKCJoZWlnaHQiLChmdW5jdGlvbih0KXtyZXR1cm4iZSI9PT10LnR5cGV8fCJ3Ij09PXQudHlwZT9lWzFdWzFdLWVbMF1bMV0rbDpsfSkpKTp0LnNlbGVjdEFsbCgiLnNlbGVjdGlvbiwuaGFuZGxlIikuc3R5bGUoImRpc3BsYXkiLCJub25lIikuYXR0cigieCIsbnVsbCkuYXR0cigieSIsbnVsbCkuYXR0cigid2lkdGgiLG51bGwpLmF0dHIoImhlaWdodCIsbnVsbCl9ZnVuY3Rpb24gcCh0LGUsbil7dmFyIG89dC5fX2JydXNoLmVtaXR0ZXI7cmV0dXJuIW98fG4mJm8uY2xlYW4/bmV3IG0odCxlLG4pOm99ZnVuY3Rpb24gbSh0LGUsbil7dGhpcy50aGF0PXQsdGhpcy5hcmdzPWUsdGhpcy5zdGF0ZT10Ll9fYnJ1c2gsdGhpcy5hY3RpdmU9MCx0aGlzLmNsZWFuPW59ZnVuY3Rpb24gdSgpe2lmKCghbnx8WjQudG91Y2hlcykmJmkuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgdCxvLGEscyxsLGMsbSx1LGYsZyxoLGI9dGhpcyx5PVo0LnRhcmdldC5fX2RhdGFfXy50eXBlLF89InNlbGVjdGlvbiI9PT0ociYmWjQubWV0YUtleT95PSJvdmVybGF5Ijp5KT9LOTpyJiZaNC5hbHRLZXk/JDk6UTksQz1lPT09aXR0P251bGw6bHR0W3ldLE09ZT09PW90dD9udWxsOmN0dFt5XSx2PWZ0dChiKSx4PXYuZXh0ZW50LE89di5zZWxlY3Rpb24sUD14WzBdWzBdLHc9eFswXVsxXSxrPXhbMV1bMF0sUz14WzFdWzFdLEQ9MCxFPTAsQT1DJiZNJiZyJiZaNC5zaGlmdEtleSxSPVo0LnRvdWNoZXM/bnR0KFo0LmNoYW5nZWRUb3VjaGVzWzBdLmlkZW50aWZpZXIpOmM2LFQ9UihiKSxOPVQsST1wKGIsYXJndW1lbnRzLCEwKS5iZWZvcmVzdGFydCgpOyJvdmVybGF5Ij09PXk/KE8mJihmPSEwKSx2LnNlbGVjdGlvbj1PPVtbdD1lPT09aXR0P1A6VFswXSxhPWU9PT1vdHQ/dzpUWzFdXSxbbD1lPT09aXR0P2s6dCxtPWU9PT1vdHQ/UzphXV0pOih0PU9bMF1bMF0sYT1PWzBdWzFdLGw9T1sxXVswXSxtPU9bMV1bMV0pLG89dCxzPWEsYz1sLHU9bTt2YXIgej1yNihiKS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUiKSxIPXouc2VsZWN0QWxsKCIub3ZlcmxheSIpLmF0dHIoImN1cnNvciIsYXR0W3ldKTtpZihaNC50b3VjaGVzKUkubW92ZWQ9TCxJLmVuZGVkPVY7ZWxzZXt2YXIgRj1yNihaNC52aWV3KS5vbigibW91c2Vtb3ZlLmJydXNoIixMLCEwKS5vbigibW91c2V1cC5icnVzaCIsViwhMCk7ciYmRi5vbigia2V5ZG93bi5icnVzaCIsaiwhMCkub24oImtleXVwLmJydXNoIixVLCEwKSxwNihaNC52aWV3KX1ZOSgpLEc4KGIpLGQuY2FsbChiKSxJLnN0YXJ0KCl9ZnVuY3Rpb24gTCgpe3ZhciB0PVIoYik7IUF8fGd8fGh8fChNYXRoLmFicyh0WzBdLU5bMF0pPk1hdGguYWJzKHRbMV0tTlsxXSk/aD0hMDpnPSEwKSxOPXQsZj0hMCxxOSgpLEIoKX1mdW5jdGlvbiBCKCl7dmFyIGU7c3dpdGNoKEQ9TlswXS1UWzBdLEU9TlsxXS1UWzFdLF8pe2Nhc2UgSjk6Y2FzZSBLOTpDJiYoRD1NYXRoLm1heChQLXQsTWF0aC5taW4oay1sLEQpKSxvPXQrRCxjPWwrRCksTSYmKEU9TWF0aC5tYXgody1hLE1hdGgubWluKFMtbSxFKSkscz1hK0UsdT1tK0UpO2JyZWFrO2Nhc2UgUTk6QzwwPyhEPU1hdGgubWF4KFAtdCxNYXRoLm1pbihrLXQsRCkpLG89dCtELGM9bCk6Qz4wJiYoRD1NYXRoLm1heChQLWwsTWF0aC5taW4oay1sLEQpKSxvPXQsYz1sK0QpLE08MD8oRT1NYXRoLm1heCh3LWEsTWF0aC5taW4oUy1hLEUpKSxzPWErRSx1PW0pOk0+MCYmKEU9TWF0aC5tYXgody1tLE1hdGgubWluKFMtbSxFKSkscz1hLHU9bStFKTticmVhaztjYXNlICQ5OkMmJihvPU1hdGgubWF4KFAsTWF0aC5taW4oayx0LUQqQykpLGM9TWF0aC5tYXgoUCxNYXRoLm1pbihrLGwrRCpDKSkpLE0mJihzPU1hdGgubWF4KHcsTWF0aC5taW4oUyxhLUUqTSkpLHU9TWF0aC5tYXgodyxNYXRoLm1pbihTLG0rRSpNKSkpfWM8byYmKEMqPS0xLGU9dCx0PWwsbD1lLGU9byxvPWMsYz1lLHkgaW4gcnR0JiZILmF0dHIoImN1cnNvciIsYXR0W3k9cnR0W3ldXSkpLHU8cyYmKE0qPS0xLGU9YSxhPW0sbT1lLGU9cyxzPXUsdT1lLHkgaW4gc3R0JiZILmF0dHIoImN1cnNvciIsYXR0W3k9c3R0W3ldXSkpLHYuc2VsZWN0aW9uJiYoTz12LnNlbGVjdGlvbiksZyYmKG89T1swXVswXSxjPU9bMV1bMF0pLGgmJihzPU9bMF1bMV0sdT1PWzFdWzFdKSxPWzBdWzBdPT09byYmT1swXVsxXT09PXMmJk9bMV1bMF09PT1jJiZPWzFdWzFdPT09dXx8KHYuc2VsZWN0aW9uPVtbbyxzXSxbYyx1XV0sZC5jYWxsKGIpLEkuYnJ1c2goKSl9ZnVuY3Rpb24gVigpe2lmKFk5KCksWjQudG91Y2hlcyl7aWYoWjQudG91Y2hlcy5sZW5ndGgpcmV0dXJuO24mJmNsZWFyVGltZW91dChuKSxuPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7bj1udWxsfSksNTAwKX1lbHNlIG02KFo0LnZpZXcsZiksRi5vbigia2V5ZG93bi5icnVzaCBrZXl1cC5icnVzaCBtb3VzZW1vdmUuYnJ1c2ggbW91c2V1cC5icnVzaCIsbnVsbCk7ei5hdHRyKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLEguYXR0cigiY3Vyc29yIixhdHQub3ZlcmxheSksdi5zZWxlY3Rpb24mJihPPXYuc2VsZWN0aW9uKSxndHQoTykmJih2LnNlbGVjdGlvbj1udWxsLGQuY2FsbChiKSksSS5lbmQoKX1mdW5jdGlvbiBqKCl7c3dpdGNoKFo0LmtleUNvZGUpe2Nhc2UgMTY6QT1DJiZNO2JyZWFrO2Nhc2UgMTg6Xz09PVE5JiYoQyYmKGw9Yy1EKkMsdD1vK0QqQyksTSYmKG09dS1FKk0sYT1zK0UqTSksXz0kOSxCKCkpO2JyZWFrO2Nhc2UgMzI6XyE9PVE5JiZfIT09JDl8fChDPDA/bD1jLUQ6Qz4wJiYodD1vLUQpLE08MD9tPXUtRTpNPjAmJihhPXMtRSksXz1KOSxILmF0dHIoImN1cnNvciIsYXR0LnNlbGVjdGlvbiksQigpKTticmVhaztkZWZhdWx0OnJldHVybn1xOSgpfWZ1bmN0aW9uIFUoKXtzd2l0Y2goWjQua2V5Q29kZSl7Y2FzZSAxNjpBJiYoZz1oPUE9ITEsQigpKTticmVhaztjYXNlIDE4Ol89PT0kOSYmKEM8MD9sPWM6Qz4wJiYodD1vKSxNPDA/bT11Ok0+MCYmKGE9cyksXz1ROSxCKCkpO2JyZWFrO2Nhc2UgMzI6Xz09PUo5JiYoWjQuYWx0S2V5PyhDJiYobD1jLUQqQyx0PW8rRCpDKSxNJiYobT11LUUqTSxhPXMrRSpNKSxfPSQ5KTooQzwwP2w9YzpDPjAmJih0PW8pLE08MD9tPXU6TT4wJiYoYT1zKSxfPVE5KSxILmF0dHIoImN1cnNvciIsYXR0W3ldKSxCKCkpO2JyZWFrO2RlZmF1bHQ6cmV0dXJufXE5KCl9fWZ1bmN0aW9uIGYoKXtwKHRoaXMsYXJndW1lbnRzKS5tb3ZlZCgpfWZ1bmN0aW9uIGcoKXtwKHRoaXMsYXJndW1lbnRzKS5lbmRlZCgpfWZ1bmN0aW9uIGgoKXt2YXIgdD10aGlzLl9fYnJ1c2h8fHtzZWxlY3Rpb246bnVsbH07cmV0dXJuIHQuZXh0ZW50PWV0dChvLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksdC5kaW09ZSx0fXJldHVybiBjLm1vdmU9ZnVuY3Rpb24odCxuKXt0LnNlbGVjdGlvbj90Lm9uKCJzdGFydC5icnVzaCIsKGZ1bmN0aW9uKCl7cCh0aGlzLGFyZ3VtZW50cykuYmVmb3Jlc3RhcnQoKS5zdGFydCgpfSkpLm9uKCJpbnRlcnJ1cHQuYnJ1c2ggZW5kLmJydXNoIiwoZnVuY3Rpb24oKXtwKHRoaXMsYXJndW1lbnRzKS5lbmQoKX0pKS50d2VlbigiYnJ1c2giLChmdW5jdGlvbigpe3ZhciB0PXRoaXMsbz10Ll9fYnJ1c2gsaT1wKHQsYXJndW1lbnRzKSxhPW8uc2VsZWN0aW9uLHI9ZS5pbnB1dCgiZnVuY3Rpb24iPT10eXBlb2Ygbj9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpuLG8uZXh0ZW50KSxzPW84KGEscik7ZnVuY3Rpb24gbChlKXtvLnNlbGVjdGlvbj0xPT09ZSYmbnVsbD09PXI/bnVsbDpzKGUpLGQuY2FsbCh0KSxpLmJydXNoKCl9cmV0dXJuIG51bGwhPT1hJiZudWxsIT09cj9sOmwoMSl9KSk6dC5lYWNoKChmdW5jdGlvbigpe3ZhciB0PXRoaXMsbz1hcmd1bWVudHMsaT10Ll9fYnJ1c2gsYT1lLmlucHV0KCJmdW5jdGlvbiI9PXR5cGVvZiBuP24uYXBwbHkodCxvKTpuLGkuZXh0ZW50KSxyPXAodCxvKS5iZWZvcmVzdGFydCgpO0c4KHQpLGkuc2VsZWN0aW9uPW51bGw9PT1hP251bGw6YSxkLmNhbGwodCksci5zdGFydCgpLmJydXNoKCkuZW5kKCl9KSl9LGMuY2xlYXI9ZnVuY3Rpb24odCl7Yy5tb3ZlKHQsbnVsbCl9LG0ucHJvdG90eXBlPXtiZWZvcmVzdGFydDpmdW5jdGlvbigpe3JldHVybiAxPT0rK3RoaXMuYWN0aXZlJiYodGhpcy5zdGF0ZS5lbWl0dGVyPXRoaXMsdGhpcy5zdGFydGluZz0hMCksdGhpc30sc3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGFydGluZz8odGhpcy5zdGFydGluZz0hMSx0aGlzLmVtaXQoInN0YXJ0IikpOnRoaXMuZW1pdCgiYnJ1c2giKSx0aGlzfSxicnVzaDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVtaXQoImJydXNoIiksdGhpc30sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PS0tdGhpcy5hY3RpdmUmJihkZWxldGUgdGhpcy5zdGF0ZS5lbWl0dGVyLHRoaXMuZW1pdCgiZW5kIikpLHRoaXN9LGVtaXQ6ZnVuY3Rpb24odCl7IShmdW5jdGlvbiBuKHQsZSxvLGkpe3ZhciBhPVo0O3Quc291cmNlRXZlbnQ9WjQsWjQ9dDt0cnl7ZS5hcHBseShvLGkpfWZpbmFsbHl7WjQ9YX19KShuZXcgRzkoYyx0LGUub3V0cHV0KHRoaXMuc3RhdGUuc2VsZWN0aW9uKSkscy5hcHBseSxzLFt0LHRoaXMudGhhdCx0aGlzLmFyZ3NdKX19LGMuZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6VzkoZXR0KHQpKSxjKTpvfSxjLmZpbHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90Olc5KCEhdCksYyk6aX0sYy50b3VjaGFibGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpXOSghIXQpLGMpOmF9LGMuaGFuZGxlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0rdCxjKTpsfSxjLmtleU1vZGlmaWVycz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0hIXQsYyk6cn0sYy5vbj1mdW5jdGlvbigpe3ZhciB0PXMub24uYXBwbHkocyxhcmd1bWVudHMpO3JldHVybiB0PT09cz9jOnR9LGN9KShpdHQpfSkoKSx0aGlzLm1heEJpblNpemU9MCx0aGlzLmFyZWE9KGZ1bmN0aW9uIGUoKXt2YXIgdD1Eb3QsZT1udWxsLG49d290KDApLG89RW90LGk9d290KCEwKSxhPW51bGwscj1Tb3Qscz1udWxsO2Z1bmN0aW9uIGwobCl7dmFyIGMsZCxwLG0sdSxmPWwubGVuZ3RoLGc9ITEsaD1uZXcgQXJyYXkoZiksYj1uZXcgQXJyYXkoZik7Zm9yKG51bGw9PWEmJihzPXIodT1NdHQoKSkpLGM9MDtjPD1mOysrYyl7aWYoIShjPGYmJmkobT1sW2NdLGMsbCkpPT09ZylpZihnPSFnKWQ9YyxzLmFyZWFTdGFydCgpLHMubGluZVN0YXJ0KCk7ZWxzZXtmb3Iocy5saW5lRW5kKCkscy5saW5lU3RhcnQoKSxwPWMtMTtwPj1kOy0tcClzLnBvaW50KGhbcF0sYltwXSk7cy5saW5lRW5kKCkscy5hcmVhRW5kKCl9ZyYmKGhbY109K3QobSxjLGwpLGJbY109K24obSxjLGwpLHMucG9pbnQoZT8rZShtLGMsbCk6aFtjXSxvPytvKG0sYyxsKTpiW2NdKSl9aWYodSlyZXR1cm4gcz1udWxsLHUrIiJ8fG51bGx9ZnVuY3Rpb24gYygpe3JldHVybiBBb3QoKS5kZWZpbmVkKGkpLmN1cnZlKHIpLmNvbnRleHQoYSl9cmV0dXJuIGwueD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOndvdCgrbiksZT1udWxsLGwpOnR9LGwueDA9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTp3b3QoK2UpLGwpOnR9LGwueDE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bnVsbD09dD9udWxsOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6d290KCt0KSxsKTplfSxsLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp3b3QoK3QpLG89bnVsbCxsKTpufSxsLnkwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6d290KCt0KSxsKTpufSxsLnkxPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPW51bGw9PXQ/bnVsbDoiZnVuY3Rpb24iPT10eXBlb2YgdD90OndvdCgrdCksbCk6b30sbC5saW5lWDA9bC5saW5lWTA9ZnVuY3Rpb24oKXtyZXR1cm4gYygpLngodCkueShuKX0sbC5saW5lWTE9ZnVuY3Rpb24oKXtyZXR1cm4gYygpLngodCkueShvKX0sbC5saW5lWDE9ZnVuY3Rpb24oKXtyZXR1cm4gYygpLngoZSkueShuKX0sbC5kZWZpbmVkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6d290KCEhdCksbCk6aX0sbC5jdXJ2ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LG51bGwhPWEmJihzPXIoYSkpLGwpOnJ9LGwuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09dD9hPXM9bnVsbDpzPXIoYT10KSxsKTphfSxsfSkoKS54MChmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54U2NhbGVOdW0oLXQubGVuZ3RoKX0uYmluZCh0aGlzKSkueDEoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueFNjYWxlTnVtKHQubGVuZ3RoKX0uYmluZCh0aGlzKSkueShmdW5jdGlvbih0KXtyZXR1cm4gdC54MD09PS0xLzA/dGhpcy5jaGFydEhlaWdodC10aGlzLmRyYXdNYXJnaW4udG9wOnRoaXMueVNjYWxlKCh0LngxK3QueDApLzIpfS5iaW5kKHRoaXMpKS5jdXJ2ZShJb3QpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMudXBkYXRlRGltZW5zaW9ucygpLHRoaXMuc3ZnPXI2KHRoaXMuY2hhcnRDb250YWluZXIubmF0aXZlRWxlbWVudCkuc2VsZWN0KCJzdmciKSx0aGlzLm1haW5Db250YWluZXI9dGhpcy5zdmcuYXBwZW5kKCJnIikuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7dGhpcy5tYXJnaW4ubGVmdH0sICR7dGhpcy5tYXJnaW4udG9wfSlgKSx0aGlzLmRyYXdDb250YWluZXI9dGhpcy5tYWluQ29udGFpbmVyLmFwcGVuZCgiZyIpLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke3RoaXMuZHJhd01hcmdpbi5sZWZ0fSwgJHt0aGlzLmRyYXdNYXJnaW4udG9wfSlgKSx0aGlzLmRvdHNHcm91cD10aGlzLmRyYXdDb250YWluZXIuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJkb3RzR3JvdXAiKSx0aGlzLnlBeGlzR3JvdXA9dGhpcy5tYWluQ29udGFpbmVyLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiYXhpcyBheGlzLS15IiksdGhpcy54QXhpc0dyb3VwPXRoaXMubWFpbkNvbnRhaW5lci5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImF4aXMgYXhpcy0teCIpLHRoaXMubWlzY0dyb3VwPXRoaXMuZHJhd0NvbnRhaW5lci5hcHBlbmQoImciKSx0aGlzLnhTY2FsZT1LdHQoKS5wYWRkaW5nKC4wNSksdGhpcy54QXhpcz1XNSh0aGlzLnhTY2FsZSksdGhpcy55U2NhbGU9cGV0KCkucmFuZ2UoW3RoaXMuZHJhd0hlaWdodCwwXSksdGhpcy55QXhpcz0oZnVuY3Rpb24gdChlKXtyZXR1cm4gajUoNCxlKX0pKHRoaXMueVNjYWxlKSx0aGlzLnhTY2FsZU51bT1wZXQoKSx0aGlzLmluaXRpYWxpemVCcnVzaCgpLHRoaXMuZHJhd01pc2MoKSx0aGlzLnJlZHJhdygpfW5nT25DaGFuZ2VzKHQpe3RoaXMuc3ZnJiZ0aGlzLnJlZHJhdygpfXJlZHJhdygpe3RoaXMudXBkYXRlRGltZW5zaW9ucygpLHRoaXMuc2V0TWF4QmluU2l6ZSgpLHRoaXMudXBkYXRlQXhlcygpLHRoaXMuZHJhdygpfXVwZGF0ZURpbWVuc2lvbnMoKXt0aGlzLmNoYXJ0V2lkdGg9dGhpcy53aWR0aC10aGlzLm1hcmdpbi5sZWZ0LXRoaXMubWFyZ2luLnJpZ2h0LHRoaXMuZHJhd1dpZHRoPXRoaXMuY2hhcnRXaWR0aC10aGlzLmRyYXdNYXJnaW4ubGVmdC10aGlzLmRyYXdNYXJnaW4ucmlnaHQsdGhpcy5jaGFydEhlaWdodD10aGlzLmhlaWdodC10aGlzLm1hcmdpbi50b3AtdGhpcy5tYXJnaW4uYm90dG9tLHRoaXMuZHJhd0hlaWdodD10aGlzLmNoYXJ0SGVpZ2h0LXRoaXMuZHJhd01hcmdpbi50b3AtdGhpcy5kcmF3TWFyZ2luLmJvdHRvbX1zZXRNYXhCaW5TaXplKCl7T2JqZWN0LnZhbHVlcyh0aGlzLmNoYXJ0RGF0YS52aW9saW5EYXRhKS5mb3JFYWNoKCh0PT57Y29uc3QgZT10Lm1hcCgodD0+dC5sZW5ndGgpKSxuPU1hdGgubWF4KC4uLmUpO3RoaXMubWF4QmluU2l6ZT1NYXRoLm1heChuLHRoaXMubWF4QmluU2l6ZSl9KSl9dXBkYXRlQXhlcygpe3RoaXMueFNjYWxlLnJhbmdlKFswLHRoaXMuZHJhd1dpZHRoXSkuZG9tYWluKE9iamVjdC5rZXlzKHRoaXMuY2hhcnREYXRhLnZpb2xpbkRhdGEpKSx0aGlzLnlTY2FsZS5kb21haW4oW3RoaXMuY2hhcnREYXRhLmV4dHJlbWVzLm1pbix0aGlzLmNoYXJ0RGF0YS5leHRyZW1lcy5tYXhdKSx0aGlzLnhTY2FsZU51bS5yYW5nZShbMCx0aGlzLnhTY2FsZS5iYW5kd2lkdGgoKV0pLmRvbWFpbihbLXRoaXMubWF4QmluU2l6ZSx0aGlzLm1heEJpblNpemVdKX1pbml0aWFsaXplQnJ1c2goKXt0aGlzLmJydXNoLm9uKCJlbmQiLHRoaXMuYnJ1c2hNb3ZlZC5iaW5kKHRoaXMpKX1kcmF3KCl7dGhpcy5kcmF3QXhlcygpLHRoaXMuZHJhd1Bsb3QoKSx0aGlzLnJlZnJlc2hNaXNjKCksdGhpcy5yZWZyZXNoQnJ1c2goKX1kcmF3QXhlcygpe3RoaXMueUF4aXNHcm91cC5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHt0aGlzLmRyYXdNYXJnaW4ubGVmdH0sXG4gICAgICAke3RoaXMuZHJhd01hcmdpbi50b3B9KWApLmNhbGwodGhpcy55QXhpcyksdGhpcy54QXhpc0dyb3VwLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke3RoaXMuZHJhd01hcmdpbi5sZWZ0fSxcbiAgICAgICR7dGhpcy5kcmF3TWFyZ2luLnRvcCt0aGlzLmNoYXJ0SGVpZ2h0fSlgKS5jYWxsKHRoaXMueEF4aXMpfWRyYXdQbG90KCl7Y29uc3QgdD10aGlzLmRvdHNHcm91cC5zZWxlY3RBbGwoIi52aW9saW4tcGxvdCIpLmRhdGEoT2JqZWN0LmVudHJpZXModGhpcy5jaGFydERhdGEudmlvbGluRGF0YSkpO3QuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsInZpb2xpbi1wbG90Iikuc3R5bGUoInN0cm9rZSIsZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY29sb3JTY2FsZSh0WzBdKX0uYmluZCh0aGlzKSkuc3R5bGUoImZpbGwiLGZ1bmN0aW9uKHQpe3JldHVybmAke3RoaXMuY29sb3JTY2FsZSh0WzBdKX0zM2B9LmJpbmQodGhpcykpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7cmV0dXJuYHRyYW5zbGF0ZSgke3RoaXMueFNjYWxlKHRbMF0pfSwgMClgfS5iaW5kKHRoaXMpKS5kYXR1bSgoZnVuY3Rpb24odCl7cmV0dXJuIHRbMV19KSkuYXR0cigiZCIsdGhpcy5hcmVhKSx0LmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7cmV0dXJuYHRyYW5zbGF0ZSgke3RoaXMueFNjYWxlKHRbMF0pfSwgMClgfS5iaW5kKHRoaXMpKS5kYXR1bSgoZnVuY3Rpb24odCl7cmV0dXJuIHRbMV19KSkuYXR0cigiZCIsdGhpcy5hcmVhKSx0LmV4aXQoKS5yZW1vdmUoKX1kcmF3TWlzYygpe3RoaXMuemVyb0xpbmU9dGhpcy5taXNjR3JvdXAuYXBwZW5kKCJsaW5lIikuc3R5bGUoInN0cm9rZSIsImJsYWNrIikuYXR0cigieDEiLDApLmF0dHIoInkxIix0aGlzLnlTY2FsZSgwKSkuYXR0cigieDIiLHRoaXMuZHJhd1dpZHRoKS5hdHRyKCJ5MiIsdGhpcy55U2NhbGUoMCkpLHRoaXMubmFuVGV4dD10aGlzLm1pc2NHcm91cC5hcHBlbmQoInRleHQiKS5zdHlsZSgiZmlsbCIsImJsYWNrIikudGV4dCgiTmFOIikuYXR0cigiZm9udC1zaXplIiwiMTBweCIpLmF0dHIoInRleHQtYW5jaG9yIiwiZW5kIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigieCIsLTUpLmF0dHIoInkiLHRoaXMuY2hhcnRIZWlnaHQtdGhpcy5kcmF3TWFyZ2luLnRvcCksdGhpcy5uYW5MaW5lPXRoaXMubWlzY0dyb3VwLmFwcGVuZCgibGluZSIpLnN0eWxlKCJzdHJva2UiLCJncmV5Iikuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIzLCAzIikuYXR0cigieDEiLDApLmF0dHIoInkxIix0aGlzLmNoYXJ0SGVpZ2h0LXRoaXMuZHJhd01hcmdpbi50b3ApLmF0dHIoIngyIix0aGlzLmRyYXdXaWR0aCkuYXR0cigieTIiLHRoaXMuY2hhcnRIZWlnaHQtdGhpcy5kcmF3TWFyZ2luLnRvcCl9cmVmcmVzaE1pc2MoKXt0aGlzLnplcm9MaW5lLmF0dHIoInkxIix0aGlzLnlTY2FsZSgwKSkuYXR0cigieDIiLHRoaXMuZHJhd1dpZHRoKS5hdHRyKCJ5MiIsdGhpcy55U2NhbGUoMCkpLHRoaXMubmFuVGV4dC5hdHRyKCJ5Iix0aGlzLmNoYXJ0SGVpZ2h0LXRoaXMuZHJhd01hcmdpbi50b3ApLHRoaXMubmFuTGluZS5hdHRyKCJ5MSIsdGhpcy5kcmF3SGVpZ2h0K3RoaXMuZHJhd01hcmdpbi50b3ApLmF0dHIoIngyIix0aGlzLmRyYXdXaWR0aCkuYXR0cigieTIiLHRoaXMuZHJhd0hlaWdodCt0aGlzLmRyYXdNYXJnaW4udG9wKX1yZWZyZXNoQnJ1c2goKXt0aGlzLmJydXNoLmV4dGVudChbWzAsMF0sW3RoaXMuZHJhd1dpZHRoLHRoaXMuZHJhd0hlaWdodCt0aGlzLm1hcmdpbi50b3BdXSk7Y29uc3QgdD1bMCx0aGlzLmRyYXdIZWlnaHQrdGhpcy5tYXJnaW4udG9wXTtpZih0aGlzLmZpbHRlci5tYXg8dGhpcy5maWx0ZXIubWluKXRbMF09dGhpcy5maWx0ZXIuaW5jbHVkZU5hTj90aGlzLnlTY2FsZSh0aGlzLmNoYXJ0RGF0YS5leHRyZW1lcy5taW4pOnRbMV07ZWxzZXtpZighdGhpcy5maWx0ZXIuaW5jbHVkZU5hTil7Y29uc3QgZT1NYXRoLm1heCh0aGlzLmNoYXJ0RGF0YS5leHRyZW1lcy5taW4sdGhpcy5maWx0ZXIubWluKTt0WzFdPXRoaXMueVNjYWxlKGUpfWNvbnN0IGU9TWF0aC5taW4odGhpcy5jaGFydERhdGEuZXh0cmVtZXMubWF4LHRoaXMuZmlsdGVyLm1heCk7dFswXT10aGlzLnlTY2FsZShlKX10aGlzLmRyYXdDb250YWluZXIuY2FsbCh0aGlzLmJydXNoKS5jYWxsKHRoaXMuYnJ1c2gubW92ZSx0KX1icnVzaE1vdmVkKCl7aWYoIVo0KXJldHVybjtpZighWjQuc291cmNlRXZlbnQpcmV0dXJuO2NvbnN0IHQ9WjQuc2VsZWN0aW9uO2lmKHQpe2xldCBlPSExLG49LTIsbz10aGlzLmNoYXJ0RGF0YS5leHRyZW1lcy5taW47dFswXTw9dGhpcy5kcmF3SGVpZ2h0K3RoaXMubWFyZ2luLnRvcCYmdFsxXT49dGhpcy5kcmF3SGVpZ2h0JiYoZT0hMCksdFswXTx0aGlzLmRyYXdIZWlnaHQmJihuPXRoaXMueVNjYWxlLmludmVydCh0WzBdKSksdFsxXTx0aGlzLmRyYXdIZWlnaHQmJihvPXRoaXMueVNjYWxlLmludmVydCh0WzFdKSksdGhpcy5vblVwZGF0ZUZpbHRlci5lbWl0KHttYXg6bixtaW46byxpbmNsdWRlTmFOOmV9KX1lbHNlIHRoaXMub25VcGRhdGVGaWx0ZXIuZW1pdCh7bWF4OjEsbWluOi0xLGluY2x1ZGVOYU46ITB9KX19QXl0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxBeXQpfSxBeXQuybVjbXA9VW8oe3R5cGU6QXl0LHNlbGVjdG9yczpbWyJ2aW9saW4tZmlsdGVyLWNvbXBvbmVudCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24gdChlLG4pe2lmKDEmZSYmV2IoRXl0LDMsY2gpLDImZSl7bGV0IHQ7VWIodD1ZYigpKSYmKG4uY2hhcnRDb250YWluZXI9dC5maXJzdCl9fSxpbnB1dHM6e21ldHJpY05hbWU6Im1ldHJpY05hbWUiLGZpbHRlcjoiZmlsdGVyIixjaGFydERhdGE6ImNoYXJ0RGF0YSIsd2lkdGg6IndpZHRoIixjb2xvclNjYWxlOiJjb2xvclNjYWxlIn0sb3V0cHV0czp7b25SZW1vdmU6Im9uUmVtb3ZlIixvblVwZGF0ZUZpbHRlcjoib25VcGRhdGVGaWx0ZXIifSxmZWF0dXJlczpbU2ldLGRlY2xzOjksdmFyczoxLGNvbnN0czpmdW5jdGlvbigpe2xldCB0O3JldHVybiB0PSJ1bmRlZmluZWQiIT10eXBlb2YgbmdJMThuQ2xvc3VyZU1vZGUmJm5nSTE4bkNsb3N1cmVNb2RlP2dvb2cuZ2V0TXNnKCJSZW1vdmUgRmlsdGVyIik6JGxvY2FsaXplYDpMYWJlbCBmb3IgYSBidXR0b24gdGhhdCByZW1vdmVzIGEgbWV0cmljIGZpbHRlci7ikJ9hNmJmYWQ1OGJiMzYzZDVjODkxZDBhNTQ3NGIxZDc3ZWY5MGEzNGRh4pCfODQ1NDk2MTc5Nzc2MjkwNzYyNDpSZW1vdmUgRmlsdGVyYCxbWzEsImNoYXJ0LWNvbnRhaW5lciJdLFsidGl0bGUiLCJTaG93cyB0aGUgblBNSSB2YWx1ZSBkaXN0cmlidXRpb24gcGVyIHJ1bi4gUmFuZ2VzIG9mIHNlbGVjdGVkIHZhbHVlcyBjYW4gYmUgbWFuaXB1bGF0ZWQgYnkgbW9kaWZ5aW5nIHRoZSBncmV5IGJveC4iLDEsImNoYXJ0LWhlYWQiXSxbMSwiY2hhcnQtaGVhZGluZyJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsdCwzLCJjbGljayJdLFsic3ZnSWNvbiIsImNsZWFyXzI0cHgiXSxbMSwiY2hhcnQiXSxbImNoYXJ0IiwiIl0sWzEsImRyYXctYXJlYSJdXX0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKE91KDAsImRpdiIsMCksT3UoMSwiZGl2IiwxKSxPdSgyLCJkaXYiLDIpLE1mKDMpLFB1KCksT3UoNCwiYnV0dG9uIiwzKSxOdSgiY2xpY2siLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub25SZW1vdmUuZW1pdCgpfSkpLHd1KDUsIm1hdC1pY29uIiw0KSxQdSgpLFB1KCksT3UoNiwiZGl2Iiw1LDYpLEhhKCksd3UoOCwic3ZnIiw3KSxQdSgpLFB1KCkpLDImZSYmKEpjKDMpLHZmKG4ubWV0cmljTmFtZSkpfSxkaXJlY3RpdmVzOltOSCxjR10sc3R5bGVzOlsnLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEycHg7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtYmFkZ2Utc21hbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6OXB4fS5tYXQtYmFkZ2UtbGFyZ2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweH0ubWF0LWgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1oZWFkbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMjRweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNnB4LzI4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNXB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC44MykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtaDZbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuNjcpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWJvZHktc3Ryb25nW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjAgMCAxMnB4fS5tYXQtc21hbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDEycHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjMwMCAxMTJweC8xMTJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDVlbTttYXJnaW46MCAwIDU2cHh9Lm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDU2cHgvNTZweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDJlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDQ1cHgvNDhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDA1ZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAzNHB4LzQwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDY0cHh9Lm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcmFpc2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0cm9rZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mbGF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmFiW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1taW5pLWZhYltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWJ1dHRvbi10b2dnbGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhcmQtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjIwcHh9Lm1hdC1jYXJkLXN1YnRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2hlY2tib3hbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNoZWNrYm94LWxheW91dFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoZWNrYm94LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoyNHB4fS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtdHJhaWxpbmctaWNvbi5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtcmVtb3ZlLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MThweH0ubWF0LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1oZWFkZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2VsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9vdGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2FsZW5kYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhbGVuZGFyLWJvZHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxM3B4fS5tYXQtY2FsZW5kYXItYm9keS1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FsZW5kYXItcGVyaW9kLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo0MDB9Lm1hdC1kaWFsb2ctdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjEyNTtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE1MCU7bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS41ZW07d2lkdGg6MS41ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNWVtIDA7Ym9yZGVyLXRvcDouODQzNzVlbSBzb2xpZCB0cmFuc3BhcmVudH0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6LTAuODQzNzVlbTtwYWRkaW5nLXRvcDouODQzNzVlbX0ubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo3NSU7bWFyZ2luLXRvcDouNjY2NjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjc5MTY2NjY2NjdlbSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNDM3NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMnB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjNlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM1MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjI4MTI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDouNTQxNjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjY2NjY2NjY2NjdlbSl9QG1lZGlhIHByaW50ey5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMmVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMWVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTJlbSkgc2NhbGUoMC43NSl9fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi4yNWVtIDAgLjc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMDkzNzVlbTttYXJnaW4tdG9wOi0wLjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjFlbSAwIDFlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS44NDM3NWVtO21hcmdpbi10b3A6LTAuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9aW5wdXQubWF0LWlucHV0LWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LTAuMDYyNWVtfS5tYXQtbWVudS1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtcGFnaW5hdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweH0ubWF0LXJhZGlvLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW19Lm1hdC1zbGlkZS10b2dnbGUtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdGVwcGVyLWhvcml6b250YWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXN0ZXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXN0ZXAtc3ViLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDpub3JtYWx9Lm1hdC1zdGVwLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LXN0ZXAtbGFiZWwtc2VsZWN0ZWRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRhYi1ncm91cFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdGFiLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10YWItbGlua1tfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowfS5tYXQtdG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB4O3BhZGRpbmctdG9wOjZweDtwYWRkaW5nLWJvdHRvbTo2cHh9Lm1hdC10b29sdGlwLWhhbmRzZXRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9Lm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE2cHh9Lm1hdC1vcHRncm91cC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1zaW1wbGUtc25hY2tiYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweH0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb25bX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjE7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo1MDB9Lm1hdC10cmVlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW5lc3RlZC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjQwMDtmb250LXNpemU6MTRweH0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmVtcHR5KXt0cmFuc2Zvcm06dHJhbnNsYXRlWigwKX0ubWF0LXJpcHBsZS5tYXQtcmlwcGxlLXVuYm91bmRlZFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItcmFkaXVzOjUwJTtwb2ludGVyLWV2ZW50czpub25lO3RyYW5zaXRpb246b3BhY2l0eSx0cmFuc2Zvcm0gMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpO3RyYW5zZm9ybTpzY2FsZSgwKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6bm9uZX0uY2RrLXZpc3VhbGx5LWhpZGRlbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjA7Y2xpcDpyZWN0KDAgMCAwIDApO2hlaWdodDoxcHg7bWFyZ2luOi0xcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwO291dGxpbmU6MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb2ludGVyLWV2ZW50czpub25lO3RvcDowO2xlZnQ6MDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTplbXB0eXtkaXNwbGF5Om5vbmV9LmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1wYW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czphdXRvO2JveC1zaXppbmc6Ym9yZGVyLWJveDt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O21heC13aWR0aDoxMDAlO21heC1oZWlnaHQ6MTAwJX0uY2RrLW92ZXJsYXktYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO3otaW5kZXg6MTAwMDtwb2ludGVyLWV2ZW50czphdXRvOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDt0cmFuc2l0aW9uOm9wYWNpdHkgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSk7b3BhY2l0eTowfS5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjF9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAuY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTouNn0uY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4zMil9LmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MH0uY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWluLXdpZHRoOjFweDttaW4taGVpZ2h0OjFweH0uY2RrLWdsb2JhbC1zY3JvbGxibG9ja1tfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7d2lkdGg6MTAwJTtvdmVyZmxvdy15OnNjcm9sbH1Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0e31Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZHt9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbHthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQgMHMgMW1zfS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOm5vdCg6LXdlYmtpdC1hdXRvZmlsbCl7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCAwcyAxbXN9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplW19uZ2NvbnRlbnQtJUNPTVAlXXtyZXNpemU6bm9uZX10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDphdXRvICFpbXBvcnRhbnQ7b3ZlcmZsb3c6aGlkZGVuICFpbXBvcnRhbnR9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZy1maXJlZm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDowICFpbXBvcnRhbnR9Lm1hdC1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtbWRjLWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9LmNoYXJ0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtvdmVyZmxvdzpoaWRkZW59LmNoYXJ0W19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MzAwcHg7d2lkdGg6MTAwJX0uY2hhcnQtaGVhZFtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn0uY2hhcnQtaGVhZGluZ1tfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEzcHg7cGFkZGluZy1sZWZ0OjEwcHg7cGFkZGluZy10b3A6MTBweH0uZHJhdy1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5zdHJva2VkLWxpbmVbX25nY29udGVudC0lQ09NUCVde3N0cm9rZTpyZ2JhKDAsMCwwLC4xMik7c3Ryb2tlLWRhc2hhcnJheTozIDN9J10sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEF5dCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJ2aW9saW4tZmlsdGVyLWNvbXBvbmVudCIsdGVtcGxhdGVVcmw6Ii4vdmlvbGluX2ZpbHRlcl9jb21wb25lbnQubmcuaHRtbCIsc3R5bGVVcmxzOlsiLi92aW9saW5fZmlsdGVyX2NvbXBvbmVudC5jc3MiXSxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSxudWxsLHttZXRyaWNOYW1lOlt7dHlwZTp5X31dLGZpbHRlcjpbe3R5cGU6eV99XSxjaGFydERhdGE6W3t0eXBlOnlffV0sd2lkdGg6W3t0eXBlOnlffV0sY29sb3JTY2FsZTpbe3R5cGU6eV99XSxvblJlbW92ZTpbe3R5cGU6X199XSxvblVwZGF0ZUZpbHRlcjpbe3R5cGU6X199XSxjaGFydENvbnRhaW5lcjpbe3R5cGU6RnIsYXJnczpbImNoYXJ0Iix7c3RhdGljOiEwLHJlYWQ6Y2h9XX1dfSk7Y2xhc3MgUnl0e2NvbnN0cnVjdG9yKHQpe3RoaXMuc3RvcmU9dCx0aGlzLmFjdGl2ZVJ1bnMkPXRoaXMuc3RvcmUucGlwZShSayh2TikpLnBpcGUoaHQoKHQ9PnQ/QXJyYXkuZnJvbSh0LmVudHJpZXMoKSkuZmlsdGVyKCh0PT50WzFdKSkubWFwKCh0PT50WzBdKSk6W10pKSksdGhpcy52aXNpYmxlQW5ub3RhdGlvbnMkPUR0KFt0aGlzLnN0b3JlLnNlbGVjdChHaHQpLHRoaXMuc3RvcmUuc2VsZWN0KEtodCksdGhpcy5zdG9yZS5zZWxlY3QocmJ0KV0pLnBpcGUoaHQoKChbdCxlLG5dKT0+RHl0KHQsZSxuKSkpKSx0aGlzLmNoYXJ0V2lkdGgkPXRoaXMuc3RvcmUucGlwZShSayhsYnQpKS5waXBlKGh0KCh0PT5NYXRoLm1heCgxNTAsdCkpKSksdGhpcy5ydW5Db2xvclNjYWxlJD10aGlzLnN0b3JlLnNlbGVjdChDTikucGlwZShodCgodD0+ZT0+e2lmKCF0Lmhhc093blByb3BlcnR5KGUpKXRocm93IG5ldyBFcnJvcihgW0NvbG9yIHNjYWxlXSB1bmtub3duIHJ1bklkOiAke2V9LmApO3JldHVybiB0W2VdfSkpKX1uZ09uSW5pdCgpe3RoaXMuY2hhcnREYXRhJD1EdChbdGhpcy52aXNpYmxlQW5ub3RhdGlvbnMkLHRoaXMuYWN0aXZlUnVucyRdKS5waXBlKGh0KCgoW3QsZV0pPT4oZnVuY3Rpb24gbih0LGUsbyl7Y29uc3QgaT17fSxhPXt9LHI9bmV3IFNldChlKSxzPVZidChvKSxsPXttYXg6LTEsbWluOjF9O09iamVjdC52YWx1ZXModCkuZm9yRWFjaCgodD0+e3QuZm9yRWFjaCgodD0+e2NvbnN0IGU9dC5ydW47aWYoci5oYXMoZSkmJnQubWV0cmljPT09cylpZihudWxsPT09dC5uUE1JVmFsdWUpYVtlXT9hW2VdLnB1c2gobnVsbCk6YVtlXT1bbnVsbF07ZWxzZXtjb25zdCBuPXQublBNSVZhbHVlO2wubWF4PWwubWF4PG4/bjpsLm1heCxsLm1pbj1sLm1pbj5uP246bC5taW4saVt0LnJ1bl0/aVtlXS5wdXNoKG4pOmlbZV09W25dfX0pKX0pKTtjb25zdCBjPXt9LGQ9VDUoKS5kb21haW4oW2wubWluLGwubWF4XSkudmFsdWUoKHQ9PnQpKSxwPVQ1KCkuZG9tYWluKFstMS8wLDEvMF0pLnRocmVzaG9sZHMoMCkudmFsdWUoKHQ9PnQpKTtmb3IoY29uc3QgdCBvZiByKWlmKGNbdF09ZChpW3RdKSxhW3RdKXtjb25zdCBlPXAoYVt0XSk7Y1t0XS51bnNoaWZ0KGVbMF0pfXJldHVybnt2aW9saW5EYXRhOmMsZXh0cmVtZXM6bH19KSh0LGUsdGhpcy5tZXRyaWNOYW1lKSkpKX1yZW1vdmVNZXRyaWMoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKE9idCh7bWV0cmljOnRoaXMubWV0cmljTmFtZX0pKX11cGRhdGVGaWx0ZXIodCl7dGhpcy5zdG9yZS5kaXNwYXRjaChQYnQoT2JqZWN0LmFzc2lnbih7bWV0cmljOnRoaXMubWV0cmljTmFtZX0sdCkpKX19ZnVuY3Rpb24gVHl0KHQsZSl7aWYoMSZ0JiZ3dSgwLCJucG1pLXZpb2xpbi1maWx0ZXIiLDgpLDImdCl7Y29uc3QgdD1lLiRpbXBsaWNpdDt2dSgibWV0cmljTmFtZSIsdFswXSkoImZpbHRlciIsdFsxXSl9fWZ1bmN0aW9uIE55dCh0LGUpezEmdCYmKE91KDAsImRpdiIsOSksT3UoMSwic3BhbiIsMTApLE1mKDIsIiBZb3UgY2FuIGFkZCBtb3JlIGZpbHRlcnMgYXQgdGhlIHRvcC4gIiksUHUoKSxQdSgpKX1SeXQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFJ5dCkoTXUoRWspKX0sUnl0Lsm1Y21wPVVvKHt0eXBlOlJ5dCxzZWxlY3RvcnM6W1sibnBtaS12aW9saW4tZmlsdGVyIl1dLGlucHV0czp7bWV0cmljTmFtZToibWV0cmljTmFtZSIsZmlsdGVyOiJmaWx0ZXIifSxkZWNsczo0LHZhcnM6MTEsY29uc3RzOltbMywibWV0cmljTmFtZSIsImZpbHRlciIsImNoYXJ0RGF0YSIsIndpZHRoIiwiY29sb3JTY2FsZSIsIm9uUmVtb3ZlIiwib25VcGRhdGVGaWx0ZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKE91KDAsInZpb2xpbi1maWx0ZXItY29tcG9uZW50IiwwKSxOdSgib25SZW1vdmUiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ucmVtb3ZlTWV0cmljKCl9KSkoIm9uVXBkYXRlRmlsdGVyIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi51cGRhdGVGaWx0ZXIoZSl9KSksT2IoMSwiYXN5bmMiKSxPYigyLCJhc3luYyIpLE9iKDMsImFzeW5jIiksUHUoKSksMiZlJiZ2dSgibWV0cmljTmFtZSIsbi5tZXRyaWNOYW1lKSgiZmlsdGVyIixuLmZpbHRlcikoImNoYXJ0RGF0YSIsUGIoMSw1LG4uY2hhcnREYXRhJCkpKCJ3aWR0aCIsUGIoMiw3LG4uY2hhcnRXaWR0aCQpKSgiY29sb3JTY2FsZSIsUGIoMyw5LG4ucnVuQ29sb3JTY2FsZSQpKX0sZGlyZWN0aXZlczpbQXl0XSxwaXBlczpbTXZdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoUnl0LFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6Im5wbWktdmlvbGluLWZpbHRlciIsdGVtcGxhdGU6J1xuICAgIDx2aW9saW4tZmlsdGVyLWNvbXBvbmVudFxuICAgICAgW21ldHJpY05hbWVdPSJtZXRyaWNOYW1lIlxuICAgICAgW2ZpbHRlcl09ImZpbHRlciJcbiAgICAgIFtjaGFydERhdGFdPSJjaGFydERhdGEkIHwgYXN5bmMiXG4gICAgICBbd2lkdGhdPSJjaGFydFdpZHRoJCB8IGFzeW5jIlxuICAgICAgW2NvbG9yU2NhbGVdPSJydW5Db2xvclNjYWxlJCB8IGFzeW5jIlxuICAgICAgKG9uUmVtb3ZlKT0icmVtb3ZlTWV0cmljKCkiXG4gICAgICAob25VcGRhdGVGaWx0ZXIpPSJ1cGRhdGVGaWx0ZXIoJGV2ZW50KSJcbiAgICA+PC92aW9saW4tZmlsdGVyLWNvbXBvbmVudD5cbiAgJyxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6RWt9XX0pLHttZXRyaWNOYW1lOlt7dHlwZTp5X31dLGZpbHRlcjpbe3R5cGU6eV99XX0pO2NsYXNzIEl5dHtjb25zdHJ1Y3Rvcigpe3RoaXMudG9nZ2xlU2lkZWJhckV4cGFuZGVkPW5ldyBBYn19SXl0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxJeXQpfSxJeXQuybVjbXA9VW8oe3R5cGU6SXl0LHNlbGVjdG9yczpbWyJ2aW9saW4tZmlsdGVycy1jb21wb25lbnQiXV0saW5wdXRzOntzaWRlYmFyRXhwYW5kZWQ6InNpZGViYXJFeHBhbmRlZCIsbWV0cmljRmlsdGVyczoibWV0cmljRmlsdGVycyJ9LG91dHB1dHM6e3RvZ2dsZVNpZGViYXJFeHBhbmRlZDoidG9nZ2xlU2lkZWJhckV4cGFuZGVkIn0sZGVjbHM6OSx2YXJzOjIsY29uc3RzOmZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIHQ9InVuZGVmaW5lZCIhPXR5cGVvZiBuZ0kxOG5DbG9zdXJlTW9kZSYmbmdJMThuQ2xvc3VyZU1vZGU/Z29vZy5nZXRNc2coIkV4cGFuZC9IaWRlIFNpZGViYXIiKTokbG9jYWxpemVgOkxhYmVsIGZvciBhIGJ1dHRvbiB0aGF0IGV4cGFuZHMvaGlkZXMgdGhlIHNpZGViYXIu4pCfNDhjMjk5MDNjZTg4MWFiNjEwODhmOGQ0OWQ4MjcyMDM3MTZhYWVkNOKQnzQ2NTg2MDI5OTE5NzAyNjAyMTU6RXhwYW5kL0hpZGUgU2lkZWJhcmAsW1sxLCJmaWx0ZXJzLXRvb2xiYXIiXSxbMSwiZmlsdGVycy10aXRsZSJdLFsxLCJzaWRlLXRvZ2dsZSJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsdCwzLCJjbGljayJdLFsic3ZnSWNvbiIsImNoZXZyb25fbGVmdF8yNHB4Il0sWzEsImZpbHRlcnMiXSxbMywibWV0cmljTmFtZSIsImZpbHRlciIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbGFzcyIsImZpbHRlcnMtaGludCIsNCwibmdJZiJdLFszLCJtZXRyaWNOYW1lIiwiZmlsdGVyIl0sWzEsImZpbHRlcnMtaGludCJdLFsxLCJmaWx0ZXJzLWhpbnQtdGV4dCJdXX0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKE91KDAsImRpdiIsMCksT3UoMSwiaDMiLDEpLE1mKDIsIkFjdGl2ZSBGaWx0ZXJzIiksUHUoKSxPdSgzLCJkaXYiLDIpLE91KDQsImJ1dHRvbiIsMyksTnUoImNsaWNrIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLnRvZ2dsZVNpZGViYXJFeHBhbmRlZC5lbWl0KCl9KSksd3UoNSwibWF0LWljb24iLDQpLFB1KCksUHUoKSxQdSgpLE91KDYsImRpdiIsNSksV20oNyxUeXQsMSwyLCJucG1pLXZpb2xpbi1maWx0ZXIiLDYpLFB1KCksV20oOCxOeXQsMywwLCJkaXYiLDcpKSwyJmUmJihKYyg3KSx2dSgibmdGb3JPZiIsbi5tZXRyaWNGaWx0ZXJzKSxKYygxKSx2dSgibmdJZiIsMD09PW4ubWV0cmljRmlsdGVycy5sZW5ndGgpKX0sZGlyZWN0aXZlczpbTkgsY0csb3YsYXYsUnl0XSxzdHlsZXM6WycubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1iYWRnZS1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo5cHh9Lm1hdC1iYWRnZS1sYXJnZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4fS5tYXQtaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWhlYWRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAyNHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE1cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjgzKS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1oNltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC42NykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtYm9keS1zdHJvbmdbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MCAwIDEycHh9Lm1hdC1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FwdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTJweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6MzAwIDExMnB4LzExMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wNWVtO21hcmdpbjowIDAgNTZweH0ubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNTZweC81NnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMmVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNDVweC80OHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMDVlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDM0cHgvNDBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1yYWlzZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3Ryb2tlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZsYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mYWJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW1pbmktZmFiW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtYnV0dG9uLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FyZC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjBweH0ubWF0LWNhcmQtc3VidGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hlY2tib3gtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC10cmFpbGluZy1pY29uLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC1yZW1vdmUubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxOHB4fS5tYXQtdGFibGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWhlYWRlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb290ZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jYWxlbmRhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FsZW5kYXItYm9keVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYWxlbmRhci1wZXJpb2QtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWRpYWxvZy10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTI1O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTUwJTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjVlbTt3aWR0aDoxLjVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW07bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41ZW0gMDtib3JkZXItdG9wOi44NDM3NWVtIHNvbGlkIHRyYW5zcGFyZW50fS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3RvcDotMC44NDM3NWVtO3BhZGRpbmctdG9wOi44NDM3NWVtfS5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjc1JTttYXJnaW4tdG9wOi42NjY2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNzkxNjY2NjY2N2VtKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAycHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyM2VtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzUzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi41NDE2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNjY2NjY2NjY2N2VtKX1AbWVkaWEgcHJpbnR7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIyZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIxZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMmVtKSBzY2FsZSgwLjc1KX19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjI1ZW0gMCAuNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4wOTM3NWVtO21hcmdpbi10b3A6LTAuNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MWVtIDAgMWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjg0Mzc1ZW07bWFyZ2luLXRvcDotMC4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH1pbnB1dC5tYXQtaW5wdXQtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDotMC4wNjI1ZW19Lm1hdC1tZW51LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1wYWdpbmF0b3JbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXBhZ2luYXRvci1wYWdlLXNpemVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3RbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXN0ZXBwZXItdmVydGljYWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc3RlcC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0Om5vcm1hbH0ubWF0LXN0ZXAtbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRhYi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjB9Lm1hdC10b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTZweH0ubWF0LW9wdGdyb3VwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LXNpbXBsZS1zbmFja2Jhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbltfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRyZWVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbmVzdGVkLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4fS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVdOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtcmlwcGxlLm1hdC1yaXBwbGUtdW5ib3VuZGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6NTAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7dHJhbnNmb3JtOnNjYWxlKDApfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpub25lfS5jZGstdmlzdWFsbHktaGlkZGVuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7bGVmdDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmVtcHR5e2Rpc3BsYXk6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LXBhbmVbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOmF1dG87Ym94LXNpemluZzpib3JkZXItYm94O3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7bWF4LXdpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlfS5jZGstb3ZlcmxheS1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKTtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5Oi42fS5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjMyKX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTowfS5jZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO292ZXJmbG93LXk6c2Nyb2xsfUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnR7fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5ke30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxse2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCAwcyAxbXN9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06bm90KDotd2Via2l0LWF1dG9maWxsKXthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIDBzIDFtc310ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemVbX25nY29udGVudC0lQ09NUCVde3Jlc2l6ZTpub25lfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmdbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OmF1dG8gIWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW4gIWltcG9ydGFudH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nLWZpcmVmb3hbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OjAgIWltcG9ydGFudH0ubWF0LWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX1bX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47aGVpZ2h0OjEwMCV9LmZpbHRlcnMtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7ZGlzcGxheTpmbGV4O2hlaWdodDo0MnB4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO3BhZGRpbmc6MCAxMHB4fS5maWx0ZXJzLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZTtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9LnNpZGUtdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlci1yYWRpdXM6M3B4O2JvcmRlcjoxcHggc29saWQgI2ViZWJlYjtkaXNwbGF5OmZsZXg7aGVpZ2h0OjMwcHg7anVzdGlmeS1jb250ZW50OmNlbnRlcjt3aWR0aDozMHB4fS5maWx0ZXJzW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdy15OmF1dG99LmZpbHRlcnMtaGludFtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtoZWlnaHQ6NDJweDtwYWRkaW5nOjAgMTZweH0uZmlsdGVycy1oaW50LXRleHRbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoSXl0LFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6InZpb2xpbi1maWx0ZXJzLWNvbXBvbmVudCIsdGVtcGxhdGVVcmw6Ii4vdmlvbGluX2ZpbHRlcnNfY29tcG9uZW50Lm5nLmh0bWwiLHN0eWxlVXJsczpbIi4vdmlvbGluX2ZpbHRlcnNfY29tcG9uZW50LmNzcyJdLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2h9XX1dLG51bGwse3NpZGViYXJFeHBhbmRlZDpbe3R5cGU6eV99XSxtZXRyaWNGaWx0ZXJzOlt7dHlwZTp5X31dLHRvZ2dsZVNpZGViYXJFeHBhbmRlZDpbe3R5cGU6X199XX0pO2NsYXNzIHp5dHtjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXQsdGhpcy5zaWRlYmFyRXhwYW5kZWQkPXRoaXMuc3RvcmUuc2VsZWN0KGlidCksdGhpcy5tZXRyaWNGaWx0ZXJzJD10aGlzLnN0b3JlLnNlbGVjdCh0YnQpLnBpcGUoaHQoKHQ9Pk9iamVjdC5lbnRyaWVzKHQpKSkpfW9uVG9nZ2xlU2lkZWJhckV4cGFuZGVkKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChFYnQoKSl9fWZ1bmN0aW9uIEh5dCh0LGUsbil7cmV0dXJuIHQubGVuZ3RoIT1lLmxlbmd0aD9uOmUubWFwKCgoZSxuKT0+ZS10W25dKSkubWFwKCh0PT5NYXRoLnBvdyh0LDIpKSkucmVkdWNlKCgodCxlKT0+dCtlKSwwKX16eXQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHp5dCkoTXUoRWspKX0senl0Lsm1Y21wPVVvKHt0eXBlOnp5dCxzZWxlY3RvcnM6W1sibnBtaS12aW9saW4tZmlsdGVycyJdXSxkZWNsczozLHZhcnM6Nixjb25zdHM6W1szLCJzaWRlYmFyRXhwYW5kZWQiLCJtZXRyaWNGaWx0ZXJzIiwidG9nZ2xlU2lkZWJhckV4cGFuZGVkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihPdSgwLCJ2aW9saW4tZmlsdGVycy1jb21wb25lbnQiLDApLE51KCJ0b2dnbGVTaWRlYmFyRXhwYW5kZWQiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub25Ub2dnbGVTaWRlYmFyRXhwYW5kZWQoKX0pKSxPYigxLCJhc3luYyIpLE9iKDIsImFzeW5jIiksUHUoKSksMiZlJiZ2dSgic2lkZWJhckV4cGFuZGVkIixQYigxLDIsbi5zaWRlYmFyRXhwYW5kZWQkKSkoIm1ldHJpY0ZpbHRlcnMiLFBiKDIsNCxuLm1ldHJpY0ZpbHRlcnMkKSl9LGRpcmVjdGl2ZXM6W0l5dF0scGlwZXM6W012XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHp5dCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJucG1pLXZpb2xpbi1maWx0ZXJzIix0ZW1wbGF0ZTonXG4gICAgPHZpb2xpbi1maWx0ZXJzLWNvbXBvbmVudFxuICAgICAgW3NpZGViYXJFeHBhbmRlZF09InNpZGViYXJFeHBhbmRlZCQgfCBhc3luYyJcbiAgICAgIFttZXRyaWNGaWx0ZXJzXT0ibWV0cmljRmlsdGVycyQgfCBhc3luYyJcbiAgICAgICh0b2dnbGVTaWRlYmFyRXhwYW5kZWQpPSJvblRvZ2dsZVNpZGViYXJFeHBhbmRlZCgpIlxuICAgID48L3Zpb2xpbi1maWx0ZXJzLWNvbXBvbmVudD5cbiAgJyxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6RWt9XX0pLG51bGwpO2NvbnN0IEZ5dD1bInRodW1iQ29udGFpbmVyIl0sTHl0PVsidG9nZ2xlQmFyIl0sQnl0PVsiaW5wdXQiXSxWeXQ9ZnVuY3Rpb24oKXtyZXR1cm57ZW50ZXJEdXJhdGlvbjoxNTB9fSxqeXQ9bmV3IE5yKCJtYXQtc2xpZGUtdG9nZ2xlLWRlZmF1bHQtb3B0aW9ucyIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9Pih7ZGlzYWJsZVRvZ2dsZVZhbHVlOiExfSl9KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmxldCBVeXQ9MDtjb25zdCBXeXQ9e3Byb3ZpZGU6dlYsdXNlRXhpc3Rpbmc6SW4oKCgpPT5xeXQpKSxtdWx0aTohMH07Y2xhc3MgR3l0e2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5zb3VyY2U9dCx0aGlzLmNoZWNrZWQ9ZX19Y29uc3QgWXl0PUh6KEl6KHp6KE56KGNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuX2VsZW1lbnRSZWY9dH19KSksImFjY2VudCIpKTtjbGFzcyBxeXQgZXh0ZW5kcyBZeXR7Y29uc3RydWN0b3IodCxlLG4sbyxpLGEpe3N1cGVyKHQpLHRoaXMuX2ZvY3VzTW9uaXRvcj1lLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPW4sdGhpcy5kZWZhdWx0cz1pLHRoaXMuX2FuaW1hdGlvbk1vZGU9YSx0aGlzLl9vbkNoYW5nZT10PT57fSx0aGlzLl9vblRvdWNoZWQ9KCk9Pnt9LHRoaXMuX3VuaXF1ZUlkPSJtYXQtc2xpZGUtdG9nZ2xlLSIrICsrVXl0LHRoaXMuX3JlcXVpcmVkPSExLHRoaXMuX2NoZWNrZWQ9ITEsdGhpcy5uYW1lPW51bGwsdGhpcy5pZD10aGlzLl91bmlxdWVJZCx0aGlzLmxhYmVsUG9zaXRpb249ImFmdGVyIix0aGlzLmFyaWFMYWJlbD1udWxsLHRoaXMuYXJpYUxhYmVsbGVkYnk9bnVsbCx0aGlzLmNoYW5nZT1uZXcgQWIsdGhpcy50b2dnbGVDaGFuZ2U9bmV3IEFiLHRoaXMudGFiSW5kZXg9cGFyc2VJbnQobyl8fDB9Z2V0IHJlcXVpcmVkKCl7cmV0dXJuIHRoaXMuX3JlcXVpcmVkfXNldCByZXF1aXJlZCh0KXt0aGlzLl9yZXF1aXJlZD1ySSh0KX1nZXQgY2hlY2tlZCgpe3JldHVybiB0aGlzLl9jaGVja2VkfXNldCBjaGVja2VkKHQpe3RoaXMuX2NoZWNrZWQ9ckkodCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9Z2V0IGlucHV0SWQoKXtyZXR1cm5gJHt0aGlzLmlkfHx0aGlzLl91bmlxdWVJZH0taW5wdXRgfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuX2ZvY3VzTW9uaXRvci5tb25pdG9yKHRoaXMuX2VsZW1lbnRSZWYsITApLnN1YnNjcmliZSgodD0+eyJrZXlib2FyZCI9PT10fHwicHJvZ3JhbSI9PT10P3RoaXMuX2lucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk6dHx8UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKCk9PnRoaXMuX29uVG91Y2hlZCgpKSl9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcodGhpcy5fZWxlbWVudFJlZil9X29uQ2hhbmdlRXZlbnQodCl7dC5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLnRvZ2dsZUNoYW5nZS5lbWl0KCksdGhpcy5kZWZhdWx0cy5kaXNhYmxlVG9nZ2xlVmFsdWU/dGhpcy5faW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2hlY2tlZD10aGlzLmNoZWNrZWQ6KHRoaXMuY2hlY2tlZD10aGlzLl9pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5jaGVja2VkLHRoaXMuX2VtaXRDaGFuZ2VFdmVudCgpKX1fb25JbnB1dENsaWNrKHQpe3Quc3RvcFByb3BhZ2F0aW9uKCl9d3JpdGVWYWx1ZSh0KXt0aGlzLmNoZWNrZWQ9ISF0fXJlZ2lzdGVyT25DaGFuZ2UodCl7dGhpcy5fb25DaGFuZ2U9dH1yZWdpc3Rlck9uVG91Y2hlZCh0KXt0aGlzLl9vblRvdWNoZWQ9dH1zZXREaXNhYmxlZFN0YXRlKHQpe3RoaXMuZGlzYWJsZWQ9dCx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX1mb2N1cyh0LGUpe2U/dGhpcy5fZm9jdXNNb25pdG9yLmZvY3VzVmlhKHRoaXMuX2lucHV0RWxlbWVudCxlLHQpOnRoaXMuX2lucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKHQpfXRvZ2dsZSgpe3RoaXMuY2hlY2tlZD0hdGhpcy5jaGVja2VkLHRoaXMuX29uQ2hhbmdlKHRoaXMuY2hlY2tlZCl9X2VtaXRDaGFuZ2VFdmVudCgpe3RoaXMuX29uQ2hhbmdlKHRoaXMuY2hlY2tlZCksdGhpcy5jaGFuZ2UuZW1pdChuZXcgR3l0KHRoaXMsdGhpcy5jaGVja2VkKSl9X29uTGFiZWxUZXh0Q2hhbmdlKCl7dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpfX1xeXQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHF5dCkoTXUoY2gpLE11KHB6KSxNdShIaCksT3IoInRhYmluZGV4IiksTXUoanl0KSxNdShOdyw4KSl9LHF5dC7JtWNtcD1Vbyh7dHlwZTpxeXQsc2VsZWN0b3JzOltbIm1hdC1zbGlkZS10b2dnbGUiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJihXYihGeXQsMSksV2IoTHl0LDEpLFdiKEJ5dCwxKSksMiZlKXtsZXQgdDtVYih0PVliKCkpJiYobi5fdGh1bWJFbD10LmZpcnN0KSxVYih0PVliKCkpJiYobi5fdGh1bWJCYXJFbD10LmZpcnN0KSxVYih0PVliKCkpJiYobi5faW5wdXRFbGVtZW50PXQuZmlyc3QpfX0saG9zdEF0dHJzOlsxLCJtYXQtc2xpZGUtdG9nZ2xlIl0saG9zdFZhcnM6MTIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsyJmUmJihrZigiaWQiLG4uaWQpLE5tKCJ0YWJpbmRleCIsbi5kaXNhYmxlZD9udWxsOi0xKSgiYXJpYS1sYWJlbCIsbnVsbCkoImFyaWEtbGFiZWxsZWRieSIsbnVsbCksYWYoIm1hdC1jaGVja2VkIixuLmNoZWNrZWQpKCJtYXQtZGlzYWJsZWQiLG4uZGlzYWJsZWQpKCJtYXQtc2xpZGUtdG9nZ2xlLWxhYmVsLWJlZm9yZSIsImJlZm9yZSI9PW4ubGFiZWxQb3NpdGlvbikoIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIiwiTm9vcEFuaW1hdGlvbnMiPT09bi5fYW5pbWF0aW9uTW9kZSkpfSxpbnB1dHM6e2Rpc2FibGVkOiJkaXNhYmxlZCIsZGlzYWJsZVJpcHBsZToiZGlzYWJsZVJpcHBsZSIsY29sb3I6ImNvbG9yIix0YWJJbmRleDoidGFiSW5kZXgiLG5hbWU6Im5hbWUiLGlkOiJpZCIsbGFiZWxQb3NpdGlvbjoibGFiZWxQb3NpdGlvbiIsYXJpYUxhYmVsOlsiYXJpYS1sYWJlbCIsImFyaWFMYWJlbCJdLGFyaWFMYWJlbGxlZGJ5OlsiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYUxhYmVsbGVkYnkiXSxyZXF1aXJlZDoicmVxdWlyZWQiLGNoZWNrZWQ6ImNoZWNrZWQifSxvdXRwdXRzOntjaGFuZ2U6ImNoYW5nZSIsdG9nZ2xlQ2hhbmdlOiJ0b2dnbGVDaGFuZ2UifSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl0sZmVhdHVyZXM6W2loKFtXeXRdKSxnbV0sbmdDb250ZW50U2VsZWN0b3JzOlsiKiJdLGRlY2xzOjE2LHZhcnM6MTgsY29uc3RzOltbMSwibWF0LXNsaWRlLXRvZ2dsZS1sYWJlbCJdLFsibGFiZWwiLCIiXSxbMSwibWF0LXNsaWRlLXRvZ2dsZS1iYXIiXSxbInRvZ2dsZUJhciIsIiJdLFsidHlwZSIsImNoZWNrYm94Iiwicm9sZSIsInN3aXRjaCIsMSwibWF0LXNsaWRlLXRvZ2dsZS1pbnB1dCIsImNkay12aXN1YWxseS1oaWRkZW4iLDMsImlkIiwicmVxdWlyZWQiLCJ0YWJJbmRleCIsImNoZWNrZWQiLCJkaXNhYmxlZCIsImNoYW5nZSIsImNsaWNrIl0sWyJpbnB1dCIsIiJdLFsxLCJtYXQtc2xpZGUtdG9nZ2xlLXRodW1iLWNvbnRhaW5lciJdLFsidGh1bWJDb250YWluZXIiLCIiXSxbMSwibWF0LXNsaWRlLXRvZ2dsZS10aHVtYiJdLFsibWF0LXJpcHBsZSIsIiIsMSwibWF0LXNsaWRlLXRvZ2dsZS1yaXBwbGUiLCJtYXQtZm9jdXMtaW5kaWNhdG9yIiwzLCJtYXRSaXBwbGVUcmlnZ2VyIiwibWF0UmlwcGxlRGlzYWJsZWQiLCJtYXRSaXBwbGVDZW50ZXJlZCIsIm1hdFJpcHBsZVJhZGl1cyIsIm1hdFJpcHBsZUFuaW1hdGlvbiJdLFsxLCJtYXQtcmlwcGxlLWVsZW1lbnQiLCJtYXQtc2xpZGUtdG9nZ2xlLXBlcnNpc3RlbnQtcmlwcGxlIl0sWzEsIm1hdC1zbGlkZS10b2dnbGUtY29udGVudCIsMywiY2RrT2JzZXJ2ZUNvbnRlbnQiXSxbImxhYmVsQ29udGVudCIsIiJdLFsyLCJkaXNwbGF5Iiwibm9uZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7aWYoMSZlJiYoVnUoKSxPdSgwLCJsYWJlbCIsMCwxKSxPdSgyLCJkaXYiLDIsMyksT3UoNCwiaW5wdXQiLDQsNSksTnUoImNoYW5nZSIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4uX29uQ2hhbmdlRXZlbnQoZSl9KSkoImNsaWNrIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5fb25JbnB1dENsaWNrKGUpfSkpLFB1KCksT3UoNiwiZGl2Iiw2LDcpLHd1KDgsImRpdiIsOCksT3UoOSwiZGl2Iiw5KSx3dSgxMCwiZGl2IiwxMCksUHUoKSxQdSgpLFB1KCksT3UoMTEsInNwYW4iLDExLDEyKSxOdSgiY2RrT2JzZXJ2ZUNvbnRlbnQiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uX29uTGFiZWxUZXh0Q2hhbmdlKCl9KSksT3UoMTMsInNwYW4iLDEzKSxNZigxNCwiwqAiKSxQdSgpLGp1KDE1KSxQdSgpLFB1KCkpLDImZSl7Y29uc3QgdD1HbSgxKSxlPUdtKDEyKTtObSgiZm9yIixuLmlucHV0SWQpLEpjKDIpLGFmKCJtYXQtc2xpZGUtdG9nZ2xlLWJhci1uby1zaWRlLW1hcmdpbiIsIWUudGV4dENvbnRlbnR8fCFlLnRleHRDb250ZW50LnRyaW0oKSksSmMoMiksdnUoImlkIixuLmlucHV0SWQpKCJyZXF1aXJlZCIsbi5yZXF1aXJlZCkoInRhYkluZGV4IixuLnRhYkluZGV4KSgiY2hlY2tlZCIsbi5jaGVja2VkKSgiZGlzYWJsZWQiLG4uZGlzYWJsZWQpLE5tKCJuYW1lIixuLm5hbWUpKCJhcmlhLWNoZWNrZWQiLG4uY2hlY2tlZC50b1N0cmluZygpKSgiYXJpYS1sYWJlbCIsbi5hcmlhTGFiZWwpKCJhcmlhLWxhYmVsbGVkYnkiLG4uYXJpYUxhYmVsbGVkYnkpLEpjKDUpLHZ1KCJtYXRSaXBwbGVUcmlnZ2VyIix0KSgibWF0UmlwcGxlRGlzYWJsZWQiLG4uZGlzYWJsZVJpcHBsZXx8bi5kaXNhYmxlZCkoIm1hdFJpcHBsZUNlbnRlcmVkIiwhMCkoIm1hdFJpcHBsZVJhZGl1cyIsMjApKCJtYXRSaXBwbGVBbmltYXRpb24iLGZiKDE3LFZ5dCkpfX0sZGlyZWN0aXZlczpbcEgsU0ldLHN0eWxlczpbIi5tYXQtc2xpZGUtdG9nZ2xle2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoyNHB4O21heC13aWR0aDoxMDAlO2xpbmUtaGVpZ2h0OjI0cHg7d2hpdGUtc3BhY2U6bm93cmFwO291dGxpbmU6bm9uZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnR9Lm1hdC1zbGlkZS10b2dnbGUubWF0LWNoZWNrZWQgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWItY29udGFpbmVye3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgxNnB4LCAwLCAwKX1bZGlyPXJ0bF0gLm1hdC1zbGlkZS10b2dnbGUubWF0LWNoZWNrZWQgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWItY29udGFpbmVye3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgtMTZweCwgMCwgMCl9Lm1hdC1zbGlkZS10b2dnbGUubWF0LWRpc2FibGVke29wYWNpdHk6LjM4fS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1kaXNhYmxlZCAubWF0LXNsaWRlLXRvZ2dsZS1sYWJlbCwubWF0LXNsaWRlLXRvZ2dsZS5tYXQtZGlzYWJsZWQgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWItY29udGFpbmVye2N1cnNvcjpkZWZhdWx0fS5tYXQtc2xpZGUtdG9nZ2xlLWxhYmVse2Rpc3BsYXk6ZmxleDtmbGV4OjE7ZmxleC1kaXJlY3Rpb246cm93O2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6aW5oZXJpdDtjdXJzb3I6cG9pbnRlcn0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50e3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc30ubWF0LXNsaWRlLXRvZ2dsZS1sYWJlbC1iZWZvcmUgLm1hdC1zbGlkZS10b2dnbGUtbGFiZWx7b3JkZXI6MX0ubWF0LXNsaWRlLXRvZ2dsZS1sYWJlbC1iZWZvcmUgLm1hdC1zbGlkZS10b2dnbGUtYmFye29yZGVyOjJ9W2Rpcj1ydGxdIC5tYXQtc2xpZGUtdG9nZ2xlLWxhYmVsLWJlZm9yZSAubWF0LXNsaWRlLXRvZ2dsZS1iYXIsLm1hdC1zbGlkZS10b2dnbGUtYmFye21hcmdpbi1yaWdodDo4cHg7bWFyZ2luLWxlZnQ6MH1bZGlyPXJ0bF0gLm1hdC1zbGlkZS10b2dnbGUtYmFyLC5tYXQtc2xpZGUtdG9nZ2xlLWxhYmVsLWJlZm9yZSAubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7bWFyZ2luLWxlZnQ6OHB4O21hcmdpbi1yaWdodDowfS5tYXQtc2xpZGUtdG9nZ2xlLWJhci1uby1zaWRlLW1hcmdpbnttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowfS5tYXQtc2xpZGUtdG9nZ2xlLXRodW1iLWNvbnRhaW5lcntwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjE7d2lkdGg6MjBweDtoZWlnaHQ6MjBweDt0b3A6LTNweDtsZWZ0OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsIDAsIDApO3RyYW5zaXRpb246YWxsIDgwbXMgbGluZWFyO3RyYW5zaXRpb24tcHJvcGVydHk6dHJhbnNmb3JtfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYi1jb250YWluZXJ7dHJhbnNpdGlvbjpub25lfVtkaXI9cnRsXSAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYi1jb250YWluZXJ7bGVmdDphdXRvO3JpZ2h0OjB9Lm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7aGVpZ2h0OjIwcHg7d2lkdGg6MjBweDtib3JkZXItcmFkaXVzOjUwJX0ubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MzZweDtoZWlnaHQ6MTRweDtmbGV4LXNocmluazowO2JvcmRlci1yYWRpdXM6OHB4fS5tYXQtc2xpZGUtdG9nZ2xlLWlucHV0e2JvdHRvbTowO2xlZnQ6MTBweH1bZGlyPXJ0bF0gLm1hdC1zbGlkZS10b2dnbGUtaW5wdXR7bGVmdDphdXRvO3JpZ2h0OjEwcHh9Lm1hdC1zbGlkZS10b2dnbGUtYmFyLC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1ie3RyYW5zaXRpb246YWxsIDgwbXMgbGluZWFyO3RyYW5zaXRpb24tcHJvcGVydHk6YmFja2dyb3VuZC1jb2xvcjt0cmFuc2l0aW9uLWRlbGF5OjUwbXN9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtc2xpZGUtdG9nZ2xlLWJhciwuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7dHJhbnNpdGlvbjpub25lfS5tYXQtc2xpZGUtdG9nZ2xlIC5tYXQtc2xpZGUtdG9nZ2xlLXJpcHBsZXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6Y2FsYyg1MCUgLSAyMHB4KTtsZWZ0OmNhbGMoNTAlIC0gMjBweCk7aGVpZ2h0OjQwcHg7d2lkdGg6NDBweDt6LWluZGV4OjE7cG9pbnRlci1ldmVudHM6bm9uZX0ubWF0LXNsaWRlLXRvZ2dsZSAubWF0LXNsaWRlLXRvZ2dsZS1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudDpub3QoLm1hdC1zbGlkZS10b2dnbGUtcGVyc2lzdGVudC1yaXBwbGUpe29wYWNpdHk6LjEyfS5tYXQtc2xpZGUtdG9nZ2xlLXBlcnNpc3RlbnQtcmlwcGxle3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7dHJhbnNmb3JtOm5vbmV9Lm1hdC1zbGlkZS10b2dnbGUtYmFyOmhvdmVyIC5tYXQtc2xpZGUtdG9nZ2xlLXBlcnNpc3RlbnQtcmlwcGxle29wYWNpdHk6LjA0fS5tYXQtc2xpZGUtdG9nZ2xlOm5vdCgubWF0LWRpc2FibGVkKS5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LXNsaWRlLXRvZ2dsZS1wZXJzaXN0ZW50LXJpcHBsZXtvcGFjaXR5Oi4xMn0ubWF0LXNsaWRlLXRvZ2dsZS1wZXJzaXN0ZW50LXJpcHBsZSwubWF0LXNsaWRlLXRvZ2dsZS5tYXQtZGlzYWJsZWQgLm1hdC1zbGlkZS10b2dnbGUtYmFyOmhvdmVyIC5tYXQtc2xpZGUtdG9nZ2xlLXBlcnNpc3RlbnQtcmlwcGxle29wYWNpdHk6MH1AbWVkaWEoaG92ZXI6IG5vbmUpey5tYXQtc2xpZGUtdG9nZ2xlLWJhcjpob3ZlciAubWF0LXNsaWRlLXRvZ2dsZS1wZXJzaXN0ZW50LXJpcHBsZXtkaXNwbGF5Om5vbmV9fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWIsLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7Ym9yZGVyOjFweCBzb2xpZH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc2xpZGUtdG9nZ2xlLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntvdXRsaW5lOjJweCBkb3R0ZWQ7b3V0bGluZS1vZmZzZXQ6NXB4fVxuIl0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSkscXl0LmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6Y2h9LHt0eXBlOnB6fSx7dHlwZTpIaH0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOlJyLGFyZ3M6WyJ0YWJpbmRleCJdfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltqeXRdfV19LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpfc30se3R5cGU6eXMsYXJnczpbTnddfV19XSxxeXQucHJvcERlY29yYXRvcnM9e190aHVtYkVsOlt7dHlwZTpGcixhcmdzOlsidGh1bWJDb250YWluZXIiXX1dLF90aHVtYkJhckVsOlt7dHlwZTpGcixhcmdzOlsidG9nZ2xlQmFyIl19XSxuYW1lOlt7dHlwZTp5X31dLGlkOlt7dHlwZTp5X31dLGxhYmVsUG9zaXRpb246W3t0eXBlOnlffV0sYXJpYUxhYmVsOlt7dHlwZTp5XyxhcmdzOlsiYXJpYS1sYWJlbCJdfV0sYXJpYUxhYmVsbGVkYnk6W3t0eXBlOnlfLGFyZ3M6WyJhcmlhLWxhYmVsbGVkYnkiXX1dLHJlcXVpcmVkOlt7dHlwZTp5X31dLGNoZWNrZWQ6W3t0eXBlOnlffV0sY2hhbmdlOlt7dHlwZTpfX31dLHRvZ2dsZUNoYW5nZTpbe3R5cGU6X199XSxfaW5wdXRFbGVtZW50Olt7dHlwZTpGcixhcmdzOlsiaW5wdXQiXX1dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHF5dCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJtYXQtc2xpZGUtdG9nZ2xlIixleHBvcnRBczoibWF0U2xpZGVUb2dnbGUiLGhvc3Q6e2NsYXNzOiJtYXQtc2xpZGUtdG9nZ2xlIiwiW2lkXSI6ImlkIiwiW2F0dHIudGFiaW5kZXhdIjoiZGlzYWJsZWQgPyBudWxsIDogLTEiLCJbYXR0ci5hcmlhLWxhYmVsXSI6Im51bGwiLCJbYXR0ci5hcmlhLWxhYmVsbGVkYnldIjoibnVsbCIsIltjbGFzcy5tYXQtY2hlY2tlZF0iOiJjaGVja2VkIiwiW2NsYXNzLm1hdC1kaXNhYmxlZF0iOiJkaXNhYmxlZCIsIltjbGFzcy5tYXQtc2xpZGUtdG9nZ2xlLWxhYmVsLWJlZm9yZV0iOidsYWJlbFBvc2l0aW9uID09ICJiZWZvcmUiJywiW2NsYXNzLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlXSI6J19hbmltYXRpb25Nb2RlID09PSAiTm9vcEFuaW1hdGlvbnMiJ30sdGVtcGxhdGU6JzxsYWJlbCBbYXR0ci5mb3JdPSJpbnB1dElkIiBjbGFzcz0ibWF0LXNsaWRlLXRvZ2dsZS1sYWJlbCIgI2xhYmVsPlxuICA8ZGl2ICN0b2dnbGVCYXIgY2xhc3M9Im1hdC1zbGlkZS10b2dnbGUtYmFyIlxuICAgICAgIFtjbGFzcy5tYXQtc2xpZGUtdG9nZ2xlLWJhci1uby1zaWRlLW1hcmdpbl09IiFsYWJlbENvbnRlbnQudGV4dENvbnRlbnQgfHwgIWxhYmVsQ29udGVudC50ZXh0Q29udGVudC50cmltKCkiPlxuXG4gICAgPGlucHV0ICNpbnB1dCBjbGFzcz0ibWF0LXNsaWRlLXRvZ2dsZS1pbnB1dCBjZGstdmlzdWFsbHktaGlkZGVuIiB0eXBlPSJjaGVja2JveCJcbiAgICAgICAgICAgcm9sZT0ic3dpdGNoIlxuICAgICAgICAgICBbaWRdPSJpbnB1dElkIlxuICAgICAgICAgICBbcmVxdWlyZWRdPSJyZXF1aXJlZCJcbiAgICAgICAgICAgW3RhYkluZGV4XT0idGFiSW5kZXgiXG4gICAgICAgICAgIFtjaGVja2VkXT0iY2hlY2tlZCJcbiAgICAgICAgICAgW2Rpc2FibGVkXT0iZGlzYWJsZWQiXG4gICAgICAgICAgIFthdHRyLm5hbWVdPSJuYW1lIlxuICAgICAgICAgICBbYXR0ci5hcmlhLWNoZWNrZWRdPSJjaGVja2VkLnRvU3RyaW5nKCkiXG4gICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPSJhcmlhTGFiZWwiXG4gICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09ImFyaWFMYWJlbGxlZGJ5IlxuICAgICAgICAgICAoY2hhbmdlKT0iX29uQ2hhbmdlRXZlbnQoJGV2ZW50KSJcbiAgICAgICAgICAgKGNsaWNrKT0iX29uSW5wdXRDbGljaygkZXZlbnQpIj5cblxuICAgIDxkaXYgY2xhc3M9Im1hdC1zbGlkZS10b2dnbGUtdGh1bWItY29udGFpbmVyIiAjdGh1bWJDb250YWluZXI+XG4gICAgICA8ZGl2IGNsYXNzPSJtYXQtc2xpZGUtdG9nZ2xlLXRodW1iIj48L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9Im1hdC1zbGlkZS10b2dnbGUtcmlwcGxlIG1hdC1mb2N1cy1pbmRpY2F0b3IiIG1hdC1yaXBwbGVcbiAgICAgICAgICAgW21hdFJpcHBsZVRyaWdnZXJdPSJsYWJlbCJcbiAgICAgICAgICAgW21hdFJpcHBsZURpc2FibGVkXT0iZGlzYWJsZVJpcHBsZSB8fCBkaXNhYmxlZCJcbiAgICAgICAgICAgW21hdFJpcHBsZUNlbnRlcmVkXT0idHJ1ZSJcbiAgICAgICAgICAgW21hdFJpcHBsZVJhZGl1c109IjIwIlxuICAgICAgICAgICBbbWF0UmlwcGxlQW5pbWF0aW9uXT0ie2VudGVyRHVyYXRpb246IDE1MH0iPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9Im1hdC1yaXBwbGUtZWxlbWVudCBtYXQtc2xpZGUtdG9nZ2xlLXBlcnNpc3RlbnQtcmlwcGxlIj48L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gIDwvZGl2PlxuXG4gIDxzcGFuIGNsYXNzPSJtYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnQiICNsYWJlbENvbnRlbnQgKGNka09ic2VydmVDb250ZW50KT0iX29uTGFiZWxUZXh0Q2hhbmdlKCkiPlxuICAgIFx4M2MhLS0gQWRkIGFuIGludmlzaWJsZSBzcGFuIHNvIEpBV1MgY2FuIHJlYWQgdGhlIGxhYmVsIC0tXHgzZVxuICAgIDxzcGFuIHN0eWxlPSJkaXNwbGF5Om5vbmUiPiZuYnNwOzwvc3Bhbj5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gIDwvc3Bhbj5cbjwvbGFiZWw+XG4nLHByb3ZpZGVyczpbV3l0XSxpbnB1dHM6WyJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJjb2xvciIsInRhYkluZGV4Il0sZW5jYXBzdWxhdGlvbjpQby5Ob25lLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2gsc3R5bGVzOlsiLm1hdC1zbGlkZS10b2dnbGV7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjI0cHg7bWF4LXdpZHRoOjEwMCU7bGluZS1oZWlnaHQ6MjRweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTpub25lOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudH0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtY2hlY2tlZCAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYi1jb250YWluZXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDE2cHgsIDAsIDApfVtkaXI9cnRsXSAubWF0LXNsaWRlLXRvZ2dsZS5tYXQtY2hlY2tlZCAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYi1jb250YWluZXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKC0xNnB4LCAwLCAwKX0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtZGlzYWJsZWR7b3BhY2l0eTouMzh9Lm1hdC1zbGlkZS10b2dnbGUubWF0LWRpc2FibGVkIC5tYXQtc2xpZGUtdG9nZ2xlLWxhYmVsLC5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1kaXNhYmxlZCAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYi1jb250YWluZXJ7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1zbGlkZS10b2dnbGUtbGFiZWx7ZGlzcGxheTpmbGV4O2ZsZXg6MTtmbGV4LWRpcmVjdGlvbjpyb3c7YWxpZ24taXRlbXM6Y2VudGVyO2hlaWdodDppbmhlcml0O2N1cnNvcjpwb2ludGVyfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnR7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS5tYXQtc2xpZGUtdG9nZ2xlLWxhYmVsLWJlZm9yZSAubWF0LXNsaWRlLXRvZ2dsZS1sYWJlbHtvcmRlcjoxfS5tYXQtc2xpZGUtdG9nZ2xlLWxhYmVsLWJlZm9yZSAubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7b3JkZXI6Mn1bZGlyPXJ0bF0gLm1hdC1zbGlkZS10b2dnbGUtbGFiZWwtYmVmb3JlIC5tYXQtc2xpZGUtdG9nZ2xlLWJhciwubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7bWFyZ2luLXJpZ2h0OjhweDttYXJnaW4tbGVmdDowfVtkaXI9cnRsXSAubWF0LXNsaWRlLXRvZ2dsZS1iYXIsLm1hdC1zbGlkZS10b2dnbGUtbGFiZWwtYmVmb3JlIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcnttYXJnaW4tbGVmdDo4cHg7bWFyZ2luLXJpZ2h0OjB9Lm1hdC1zbGlkZS10b2dnbGUtYmFyLW5vLXNpZGUtbWFyZ2lue21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjB9Lm1hdC1zbGlkZS10b2dnbGUtdGh1bWItY29udGFpbmVye3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTt3aWR0aDoyMHB4O2hlaWdodDoyMHB4O3RvcDotM3B4O2xlZnQ6MDt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7dHJhbnNpdGlvbjphbGwgODBtcyBsaW5lYXI7dHJhbnNpdGlvbi1wcm9wZXJ0eTp0cmFuc2Zvcm19Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1iLWNvbnRhaW5lcnt0cmFuc2l0aW9uOm5vbmV9W2Rpcj1ydGxdIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1iLWNvbnRhaW5lcntsZWZ0OmF1dG87cmlnaHQ6MH0ubWF0LXNsaWRlLXRvZ2dsZS10aHVtYntoZWlnaHQ6MjBweDt3aWR0aDoyMHB4O2JvcmRlci1yYWRpdXM6NTAlfS5tYXQtc2xpZGUtdG9nZ2xlLWJhcntwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDozNnB4O2hlaWdodDoxNHB4O2ZsZXgtc2hyaW5rOjA7Ym9yZGVyLXJhZGl1czo4cHh9Lm1hdC1zbGlkZS10b2dnbGUtaW5wdXR7Ym90dG9tOjA7bGVmdDoxMHB4fVtkaXI9cnRsXSAubWF0LXNsaWRlLXRvZ2dsZS1pbnB1dHtsZWZ0OmF1dG87cmlnaHQ6MTBweH0ubWF0LXNsaWRlLXRvZ2dsZS1iYXIsLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7dHJhbnNpdGlvbjphbGwgODBtcyBsaW5lYXI7dHJhbnNpdGlvbi1wcm9wZXJ0eTpiYWNrZ3JvdW5kLWNvbG9yO3RyYW5zaXRpb24tZGVsYXk6NTBtc30uX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1zbGlkZS10b2dnbGUtYmFyLC5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYnt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1zbGlkZS10b2dnbGUgLm1hdC1zbGlkZS10b2dnbGUtcmlwcGxle3Bvc2l0aW9uOmFic29sdXRlO3RvcDpjYWxjKDUwJSAtIDIwcHgpO2xlZnQ6Y2FsYyg1MCUgLSAyMHB4KTtoZWlnaHQ6NDBweDt3aWR0aDo0MHB4O3otaW5kZXg6MTtwb2ludGVyLWV2ZW50czpub25lfS5tYXQtc2xpZGUtdG9nZ2xlIC5tYXQtc2xpZGUtdG9nZ2xlLXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50Om5vdCgubWF0LXNsaWRlLXRvZ2dsZS1wZXJzaXN0ZW50LXJpcHBsZSl7b3BhY2l0eTouMTJ9Lm1hdC1zbGlkZS10b2dnbGUtcGVyc2lzdGVudC1yaXBwbGV7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTt0cmFuc2Zvcm06bm9uZX0ubWF0LXNsaWRlLXRvZ2dsZS1iYXI6aG92ZXIgLm1hdC1zbGlkZS10b2dnbGUtcGVyc2lzdGVudC1yaXBwbGV7b3BhY2l0eTouMDR9Lm1hdC1zbGlkZS10b2dnbGU6bm90KC5tYXQtZGlzYWJsZWQpLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtc2xpZGUtdG9nZ2xlLXBlcnNpc3RlbnQtcmlwcGxle29wYWNpdHk6LjEyfS5tYXQtc2xpZGUtdG9nZ2xlLXBlcnNpc3RlbnQtcmlwcGxlLC5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1kaXNhYmxlZCAubWF0LXNsaWRlLXRvZ2dsZS1iYXI6aG92ZXIgLm1hdC1zbGlkZS10b2dnbGUtcGVyc2lzdGVudC1yaXBwbGV7b3BhY2l0eTowfUBtZWRpYShob3Zlcjogbm9uZSl7Lm1hdC1zbGlkZS10b2dnbGUtYmFyOmhvdmVyIC5tYXQtc2xpZGUtdG9nZ2xlLXBlcnNpc3RlbnQtcmlwcGxle2Rpc3BsYXk6bm9uZX19LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYiwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntib3JkZXI6MXB4IHNvbGlkfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zbGlkZS10b2dnbGUuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1zbGlkZS10b2dnbGUtYmFye291dGxpbmU6MnB4IGRvdHRlZDtvdXRsaW5lLW9mZnNldDo1cHh9XG4iXX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmNofSx7dHlwZTpwen0se3R5cGU6SGh9LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpScixhcmdzOlsidGFiaW5kZXgiXX1dfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6eXMsYXJnczpbanl0XX1dfSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6X3N9LHt0eXBlOnlzLGFyZ3M6W053XX1dfV19KSx7bmFtZTpbe3R5cGU6eV99XSxpZDpbe3R5cGU6eV99XSxsYWJlbFBvc2l0aW9uOlt7dHlwZTp5X31dLGFyaWFMYWJlbDpbe3R5cGU6eV8sYXJnczpbImFyaWEtbGFiZWwiXX1dLGFyaWFMYWJlbGxlZGJ5Olt7dHlwZTp5XyxhcmdzOlsiYXJpYS1sYWJlbGxlZGJ5Il19XSxjaGFuZ2U6W3t0eXBlOl9ffV0sdG9nZ2xlQ2hhbmdlOlt7dHlwZTpfX31dLHJlcXVpcmVkOlt7dHlwZTp5X31dLGNoZWNrZWQ6W3t0eXBlOnlffV0sX3RodW1iRWw6W3t0eXBlOkZyLGFyZ3M6WyJ0aHVtYkNvbnRhaW5lciJdfV0sX3RodW1iQmFyRWw6W3t0eXBlOkZyLGFyZ3M6WyJ0b2dnbGVCYXIiXX1dLF9pbnB1dEVsZW1lbnQ6W3t0eXBlOkZyLGFyZ3M6WyJpbnB1dCJdfV19KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IFp5dD17cHJvdmlkZTpFVix1c2VFeGlzdGluZzpJbigoKCk9Plh5dCkpLG11bHRpOiEwfTtjbGFzcyBYeXQgZXh0ZW5kcyBrVXt9WHl0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIEt5dChlfHxYeXQpfSxYeXQuybVkaXI9Sm8oe3R5cGU6WHl0LHNlbGVjdG9yczpbWyJtYXQtc2xpZGUtdG9nZ2xlIiwicmVxdWlyZWQiLCIiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbIm1hdC1zbGlkZS10b2dnbGUiLCJyZXF1aXJlZCIsIiIsImZvcm1Db250cm9sIiwiIl0sWyJtYXQtc2xpZGUtdG9nZ2xlIiwicmVxdWlyZWQiLCIiLCJuZ01vZGVsIiwiIl1dLGZlYXR1cmVzOltpaChbWnl0XSksZ21dfSk7Y29uc3QgS3l0PXZyKFh5dCk7KCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihYeXQsW3t0eXBlOmdfLGFyZ3M6W3tzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xOYW1lXSxcbiAgICAgICAgICAgICBtYXQtc2xpZGUtdG9nZ2xlW3JlcXVpcmVkXVtmb3JtQ29udHJvbF0sIG1hdC1zbGlkZS10b2dnbGVbcmVxdWlyZWRdW25nTW9kZWxdIixwcm92aWRlcnM6W1p5dF19XX1dLG51bGwsbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyBKeXR7fUp5dC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8Snl0KX0sSnl0Lsm1bW9kPVpvKHt0eXBlOkp5dH0pLEp5dC7JtWluaj1jbyh7fSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhKeXQse2RlY2xhcmF0aW9uczpbWHl0XSxleHBvcnRzOltYeXRdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihKeXQsW3t0eXBlOmtfLGFyZ3M6W3tleHBvcnRzOltYeXRdLGRlY2xhcmF0aW9uczpbWHl0XX1dfV0sbnVsbCxudWxsKTtjbGFzcyBReXR7fWZ1bmN0aW9uICR5dCh0LGUpezEmdCYmd3UoMCwibWF0LWljb24iLDMpfVF5dC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8UXl0KX0sUXl0Lsm1bW9kPVpvKHt0eXBlOlF5dH0pLFF5dC7JtWluaj1jbyh7aW1wb3J0czpbW0p5dCxtSCxUeixESV0sSnl0LFR6XX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oUXl0LHtkZWNsYXJhdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm5bcXl0XX0saW1wb3J0czpmdW5jdGlvbigpe3JldHVybltKeXQsbUgsVHosREldfSxleHBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW0p5dCxxeXQsVHpdfX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoUXl0LFt7dHlwZTprXyxhcmdzOlt7aW1wb3J0czpbSnl0LG1ILFR6LERJXSxleHBvcnRzOltKeXQscXl0LFR6XSxkZWNsYXJhdGlvbnM6W3F5dF19XX1dLG51bGwsbnVsbCk7Y2xhc3MgdF90e2NvbnN0cnVjdG9yKCl7dGhpcy5vblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2U9bmV3IEFifX10X3QuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHRfdCl9LHRfdC7JtWNtcD1Vbyh7dHlwZTp0X3Qsc2VsZWN0b3JzOltbIm5wbWktYW5ub3RhdGlvbnMtc2VhcmNoLWNvbXBvbmVudCJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MiZlJiZhZigidmFsaWQiLG4uaXNSZWdleEZpbHRlclZhbGlkKX0saW5wdXRzOntyZWdleEZpbHRlclZhbHVlOiJyZWdleEZpbHRlclZhbHVlIixpc1JlZ2V4RmlsdGVyVmFsaWQ6ImlzUmVnZXhGaWx0ZXJWYWxpZCJ9LG91dHB1dHM6e29uUmVnZXhGaWx0ZXJWYWx1ZUNoYW5nZToib25SZWdleEZpbHRlclZhbHVlQ2hhbmdlIn0sZGVjbHM6Myx2YXJzOjIsY29uc3RzOltbInN2Z0ljb24iLCJzZWFyY2hfMjRweCJdLFsiYXV0b2NvbXBsZXRlIiwib2ZmIiwicGxhY2Vob2xkZXIiLCJGaWx0ZXIgQW5ub3RhdGlvbnMiLDMsInZhbHVlIiwiaW5wdXQiXSxbInN2Z0ljb24iLCJlcnJvcl8yNHB4IiwiY2xhc3MiLCJlcnJvci1pY29uIiwibWF0VG9vbHRpcCIsIkludmFsaWQgcmVnZXggZmlsdGVyLiBUaGUgcmVzdWx0IG1heSBiZSBzdGFsZS4iLDQsIm5nSWYiXSxbInN2Z0ljb24iLCJlcnJvcl8yNHB4IiwibWF0VG9vbHRpcCIsIkludmFsaWQgcmVnZXggZmlsdGVyLiBUaGUgcmVzdWx0IG1heSBiZSBzdGFsZS4iLDEsImVycm9yLWljb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKHd1KDAsIm1hdC1pY29uIiwwKSxPdSgxLCJpbnB1dCIsMSksTnUoImlucHV0IiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2UuZW1pdChlLnRhcmdldC52YWx1ZSl9KSksUHUoKSxXbSgyLCR5dCwxLDAsIm1hdC1pY29uIiwyKSksMiZlJiYoSmMoMSksdnUoInZhbHVlIixuLnJlZ2V4RmlsdGVyVmFsdWUpLEpjKDEpLHZ1KCJuZ0lmIiwhbi5pc1JlZ2V4RmlsdGVyVmFsaWQpKX0sZGlyZWN0aXZlczpbY0csYXZdLHN0eWxlczpbJy5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHh9Lm1hdC1oMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaGVhZGxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTVweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZ1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjA1ZW07bWFyZ2luOjAgMCA1NnB4fS5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAwNWVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXJhaXNlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdHJva2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmxhdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZhYltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbWluaS1mYWJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4fS5tYXQtY2FyZC1zdWJ0aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGVja2JveC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvb3Rlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgdHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIzZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LjU0MTY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2NjY2NjY3ZW0pfUBtZWRpYSBwcmludHsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjJlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouMjVlbSAwIC43NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxZW0gMCAxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMiksIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi0wLjA2MjVlbX0ubWF0LW1lbnUtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci12ZXJ0aWNhbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGFiLWxpbmtbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MH0ubWF0LXRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5Om5vbmV9LmNkay12aXN1YWxseS1oaWRkZW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjZ9LmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV0sIC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3hbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2tbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHt9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7fS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOi13ZWJraXQtYXV0b2ZpbGwpe2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZVtfbmdjb250ZW50LSVDT01QJV17cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fS5tYXQtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfVtfbmdob3N0LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOnJlbGF0aXZlfVtfbmdob3N0LSVDT01QJV06bm90KC52YWxpZCl7Y29sb3I6I2M2MjgyOH1bX25naG9zdC0lQ09NUCVdOm5vdCgudmFsaWQpICAgaW5wdXRbX25nY29udGVudC0lQ09NUCVde2NhcmV0LWNvbG9yOmN1cnJlbnRDb2xvcn1bX25naG9zdC0lQ09NUCVdOm5vdCgudmFsaWQpICAgLmVycm9yLWljb25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNjNjI4Mjg7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MH0nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIodF90LFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6Im5wbWktYW5ub3RhdGlvbnMtc2VhcmNoLWNvbXBvbmVudCIsdGVtcGxhdGVVcmw6Ii4vYW5ub3RhdGlvbnNfc2VhcmNoX2NvbXBvbmVudC5uZy5odG1sIixzdHlsZVVybHM6WyIuL2Fubm90YXRpb25zX3NlYXJjaF9jb21wb25lbnQuY3NzIl0sY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sbnVsbCx7cmVnZXhGaWx0ZXJWYWx1ZTpbe3R5cGU6eV99XSxvblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2U6W3t0eXBlOl9ffV0saXNSZWdleEZpbHRlclZhbGlkOlt7dHlwZTpDXyxhcmdzOlsiY2xhc3MudmFsaWQiXX0se3R5cGU6eV99XX0pO2NsYXNzIGVfdHtjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXQsdGhpcy5hbm5vdGF0aW9uc0ZpbHRlciQ9dGhpcy5zdG9yZS5zZWxlY3QoSmh0KSx0aGlzLmlzQW5ub3RhdGlvbnNGaWx0ZXJWYWxpZCQ9dGhpcy5hbm5vdGF0aW9uc0ZpbHRlciQucGlwZShodCgodD0+e3RyeXtyZXR1cm4gbmV3IFJlZ0V4cCh0KSwhMH1jYXRjaCh0KXtyZXR1cm4hMX19KSkpfWZpbHRlckNoYW5nZSh0KXt0aGlzLnN0b3JlLmRpc3BhdGNoKE1idCh7cmVnZXg6dH0pKX19ZnVuY3Rpb24gbl90KHQsZSl7aWYoMSZ0KXtjb25zdCB0PUV1KCk7a3UoMCksT3UoMSwiYnV0dG9uIiw1KSxOdSgiY2xpY2siLChmdW5jdGlvbiBlKCl7cmEodCk7Y29uc3Qgbj1MdSgpO3JldHVybiBuLm9uRmxhZ0Fubm90YXRpb25zLmVtaXQobi5zZWxlY3RlZEFubm90YXRpb25zKX0pKSx3dSgyLCJtYXQtaWNvbiIsNiksUHUoKSxPdSgzLCJidXR0b24iLDcpLE51KCJjbGljayIsKGZ1bmN0aW9uIGUoKXtyYSh0KTtjb25zdCBuPUx1KCk7cmV0dXJuIG4ub25IaWRlQW5ub3RhdGlvbnMuZW1pdChuLnNlbGVjdGVkQW5ub3RhdGlvbnMpfSkpLHd1KDQsIm1hdC1pY29uIiw4KSxQdSgpLFN1KCl9aWYoMiZ0KXtjb25zdCB0PUx1KCk7SmMoMSksdnUoImRpc2FibGVkIiwwPT09dC5zZWxlY3RlZEFubm90YXRpb25zLmxlbmd0aCksSmMoMiksdnUoImRpc2FibGVkIiwwPT09dC5zZWxlY3RlZEFubm90YXRpb25zLmxlbmd0aCl9fWZ1bmN0aW9uIG9fdCh0LGUpe2lmKDEmdCl7Y29uc3QgdD1FdSgpO2t1KDApLE91KDEsIm1hdC1zbGlkZS10b2dnbGUiLDkpLE51KCJjaGFuZ2UiLChmdW5jdGlvbiBlKCl7cmV0dXJuIHJhKHQpLEx1KCkub25Ub2dnbGVTaG93Q291bnRzLmVtaXQoKX0pKSxNZigyLCIgU2FtcGxlIENvdW50ICIpLFB1KCksT3UoMywibWF0LXNsaWRlLXRvZ2dsZSIsMTApLE51KCJjaGFuZ2UiLChmdW5jdGlvbiBlKCl7cmV0dXJuIHJhKHQpLEx1KCkub25Ub2dnbGVTaG93SGlkZGVuLmVtaXQoKX0pKSxNZig0LCIgU2hvdyBIaWRkZW4gIiksUHUoKSx3dSg1LCJucG1pLWFubm90YXRpb25zLXNlYXJjaCIpLFN1KCl9aWYoMiZ0KXtjb25zdCB0PUx1KCk7SmMoMSksdnUoImNoZWNrZWQiLHQuc2hvd0NvdW50cyksSmMoMiksdnUoImNoZWNrZWQiLHQuc2hvd0hpZGRlbil9fWVfdC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8ZV90KShNdShFaykpfSxlX3QuybVjbXA9VW8oe3R5cGU6ZV90LHNlbGVjdG9yczpbWyJucG1pLWFubm90YXRpb25zLXNlYXJjaCJdXSxkZWNsczozLHZhcnM6Nixjb25zdHM6W1szLCJyZWdleEZpbHRlclZhbHVlIiwiaXNSZWdleEZpbHRlclZhbGlkIiwib25SZWdleEZpbHRlclZhbHVlQ2hhbmdlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihPdSgwLCJucG1pLWFubm90YXRpb25zLXNlYXJjaC1jb21wb25lbnQiLDApLE51KCJvblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2UiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLmZpbHRlckNoYW5nZShlKX0pKSxPYigxLCJhc3luYyIpLE9iKDIsImFzeW5jIiksUHUoKSksMiZlJiZ2dSgicmVnZXhGaWx0ZXJWYWx1ZSIsUGIoMSwyLG4uYW5ub3RhdGlvbnNGaWx0ZXIkKSkoImlzUmVnZXhGaWx0ZXJWYWxpZCIsUGIoMiw0LG4uaXNBbm5vdGF0aW9uc0ZpbHRlclZhbGlkJCkpfSxkaXJlY3RpdmVzOlt0X3RdLHBpcGVzOltNdl0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihlX3QsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoibnBtaS1hbm5vdGF0aW9ucy1zZWFyY2giLHRlbXBsYXRlOidcbiAgICA8bnBtaS1hbm5vdGF0aW9ucy1zZWFyY2gtY29tcG9uZW50XG4gICAgICBbcmVnZXhGaWx0ZXJWYWx1ZV09ImFubm90YXRpb25zRmlsdGVyJCB8IGFzeW5jIlxuICAgICAgW2lzUmVnZXhGaWx0ZXJWYWxpZF09ImlzQW5ub3RhdGlvbnNGaWx0ZXJWYWxpZCQgfCBhc3luYyJcbiAgICAgIChvblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2UpPSJmaWx0ZXJDaGFuZ2UoJGV2ZW50KSJcbiAgICA+PC9ucG1pLWFubm90YXRpb25zLXNlYXJjaC1jb21wb25lbnQ+XG4gICcsY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkVrfV19KSxudWxsKTtjbGFzcyBpX3R7Y29uc3RydWN0b3IoKXt0aGlzLm9uRmxhZ0Fubm90YXRpb25zPW5ldyBBYix0aGlzLm9uSGlkZUFubm90YXRpb25zPW5ldyBBYix0aGlzLm9uVG9nZ2xlRXhwYW5kZWQ9bmV3IEFiLHRoaXMub25Ub2dnbGVTaG93Q291bnRzPW5ldyBBYix0aGlzLm9uVG9nZ2xlU2hvd0hpZGRlbj1uZXcgQWJ9fWlfdC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8aV90KX0saV90Lsm1Y21wPVVvKHt0eXBlOmlfdCxzZWxlY3RvcnM6W1sibnBtaS1hbm5vdGF0aW9ucy1saXN0LXRvb2xiYXItY29tcG9uZW50Il1dLGlucHV0czp7bnVtQW5ub3RhdGlvbnM6Im51bUFubm90YXRpb25zIixleHBhbmRlZDoiZXhwYW5kZWQiLHNlbGVjdGVkQW5ub3RhdGlvbnM6InNlbGVjdGVkQW5ub3RhdGlvbnMiLGFubm90YXRpb25zRXhwYW5kZWQ6ImFubm90YXRpb25zRXhwYW5kZWQiLHNob3dDb3VudHM6InNob3dDb3VudHMiLHNob3dIaWRkZW46InNob3dIaWRkZW4ifSxvdXRwdXRzOntvbkZsYWdBbm5vdGF0aW9uczoib25GbGFnQW5ub3RhdGlvbnMiLG9uSGlkZUFubm90YXRpb25zOiJvbkhpZGVBbm5vdGF0aW9ucyIsb25Ub2dnbGVFeHBhbmRlZDoib25Ub2dnbGVFeHBhbmRlZCIsb25Ub2dnbGVTaG93Q291bnRzOiJvblRvZ2dsZVNob3dDb3VudHMiLG9uVG9nZ2xlU2hvd0hpZGRlbjoib25Ub2dnbGVTaG93SGlkZGVuIn0sZGVjbHM6Nyx2YXJzOjQsY29uc3RzOmZ1bmN0aW9uKCl7bGV0IHQsZSxuO3JldHVybiB0PSJ1bmRlZmluZWQiIT10eXBlb2YgbmdJMThuQ2xvc3VyZU1vZGUmJm5nSTE4bkNsb3N1cmVNb2RlP2dvb2cuZ2V0TXNnKCJIaWRlcy9TaG93cyB0aGUgQW5ub3RhdGlvbnMgTGlzdCIpOiRsb2NhbGl6ZWA6TGFiZWwgZm9yIGEgYnV0dG9uIHRoYXQgaGlkZXMvc2hvd3MgdGhlIGFubm90YXRpb25zIGxpc3Qu4pCfYjM2MDNiYTMzZTUzMDhkZDhjNWU4MDVlNTA4YjJmNzIzM2RmODlkNOKQnzczMzYzNzQ0MTMwNTYzNDI0OTI6SGlkZXMvU2hvd3MgdGhlIEFubm90YXRpb25zIExpc3RgLGU9InVuZGVmaW5lZCIhPXR5cGVvZiBuZ0kxOG5DbG9zdXJlTW9kZSYmbmdJMThuQ2xvc3VyZU1vZGU/Z29vZy5nZXRNc2coIkZsYWcgU2VsZWN0ZWQgQW5ub3RhdGlvbnMiKTokbG9jYWxpemVgOkxhYmVsIGZvciBhIGJ1dHRvbiB0aGF0IGZsYWdzIHNlbGVjdGVkIGFubm90YXRpb25zLuKQnzU2OTJhZDg4MzEwMzhhOTBjNTg2M2ExZTlhZGY5NzQ4Y2FjM2NhZDjikJ8yMjQ0MDk5ODkxMzEzMzM2NTk1OkZsYWcgU2VsZWN0ZWQgQW5ub3RhdGlvbnNgLG49InVuZGVmaW5lZCIhPXR5cGVvZiBuZ0kxOG5DbG9zdXJlTW9kZSYmbmdJMThuQ2xvc3VyZU1vZGU/Z29vZy5nZXRNc2coIkhpZGUgU2VsZWN0ZWQgQW5ub3RhdGlvbnMiKTokbG9jYWxpemVgOkxhYmVsIGZvciBhIGJ1dHRvbiB0aGF0IGhpZGVzIHNlbGVjdGVkIGFubm90YXRpb25zLuKQnzAzNDJjZGIzMzU4ZmE4ZTNmYTI3MjIwYTgyNThhNzI4NzQzMGI3MGbikJ81NDYyODMyMzkxMDkyMDg3NDg1OkhpZGUgU2VsZWN0ZWQgQW5ub3RhdGlvbnNgLFtbMSwiYW5ub3RhdGlvbnMtdGl0bGUtY29udGFpbmVyIl0sWzEsImFubm90YXRpb25zLXRpdGxlIl0sWzQsIm5nSWYiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLHQsMSwiZXhwYW5kLWJ1dHRvbiIsMywiY2xpY2siXSxbMywic3ZnSWNvbiJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsZSwidGl0bGUiLCJGbGFnZ2luZyBhbm5vdGF0aW9ucyBhZGRzIHRoZW0gdG8geW91ciBpbnZlc3RpZ2F0aW9uIHJlc3VsdHMsIHdoaWNoIGNhbiBsYXRlciBiZSBleHBvcnRlZC4iLDMsImRpc2FibGVkIiwiY2xpY2siXSxbInN2Z0ljb24iLCJmbGFnXzI0cHgiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLG4sInRpdGxlIiwiUmVtb3Zpbmcgbm9uLWNyaXRpY2FsIGFubm90YXRpb25zIHVuY2x1dHRlcnMgdGhlIHZpZXcuIFJlbW92ZWQgYW5ub3RhdGlvbnMgYXJlIHJlbW92ZWQgZnJvbSBhbGwgdmlzdWFsaXphdGlvbnMuIiwzLCJkaXNhYmxlZCIsImNsaWNrIl0sWyJzdmdJY29uIiwidmlzaWJpbGl0eV9vZmZfMjRweCJdLFsidGl0bGUiLCJIaWRlcyBhbmQgc2hvd3MgdGhlIHNhbXBsZSBjb3VudCB3aGVyZSBhcHBsaWNhYmxlIChob3cgbWFueSBzYW1wbGVzIGJlbG9uZyB0byBhIGNhdGVnb3J5KS4iLDEsInNob3ctdG9nZ2xlIiwzLCJjaGVja2VkIiwiY2hhbmdlIl0sWyJ0aXRsZSIsIkhpZGVzIGFuZCBzaG93cyBoaWRkZW4gYW5ub3RhdGlvbnMgaW4gYWxsIHZpc3VhbGl6YXRpb25zLiIsMSwic2hvdy10b2dnbGUiLDMsImNoZWNrZWQiLCJjaGFuZ2UiXV19LHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihPdSgwLCJkaXYiLDApLE91KDEsImgzIiwxKSxNZigyKSxQdSgpLFdtKDMsbl90LDUsMiwibmctY29udGFpbmVyIiwyKSxQdSgpLFdtKDQsb190LDYsMiwibmctY29udGFpbmVyIiwyKSxPdSg1LCJidXR0b24iLDMpLE51KCJjbGljayIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vblRvZ2dsZUV4cGFuZGVkLmVtaXQoKX0pKSx3dSg2LCJtYXQtaWNvbiIsNCksUHUoKSksMiZlJiYoSmMoMikseGYoIkFubm90YXRpb25zICgiLG4ubnVtQW5ub3RhdGlvbnMsIikiKSxKYygxKSx2dSgibmdJZiIsbi5leHBhbmRlZCksSmMoMSksdnUoIm5nSWYiLG4uZXhwYW5kZWQpLEpjKDIpLHZ1KCJzdmdJY29uIixuLmV4cGFuZGVkPyJleHBhbmRfbGVzc18yNHB4IjoiZXhwYW5kX21vcmVfMjRweCIpKX0sZGlyZWN0aXZlczpbYXYsTkgsY0cscXl0LGVfdF0sc3R5bGVzOlsnLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEycHg7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtYmFkZ2Utc21hbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6OXB4fS5tYXQtYmFkZ2UtbGFyZ2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweH0ubWF0LWgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1oZWFkbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMjRweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNnB4LzI4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNXB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC44MykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtaDZbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuNjcpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWJvZHktc3Ryb25nW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjAgMCAxMnB4fS5tYXQtc21hbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDEycHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjMwMCAxMTJweC8xMTJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDVlbTttYXJnaW46MCAwIDU2cHh9Lm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDU2cHgvNTZweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDJlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDQ1cHgvNDhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDA1ZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAzNHB4LzQwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDY0cHh9Lm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcmFpc2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0cm9rZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mbGF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmFiW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1taW5pLWZhYltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWJ1dHRvbi10b2dnbGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhcmQtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjIwcHh9Lm1hdC1jYXJkLXN1YnRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2hlY2tib3hbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNoZWNrYm94LWxheW91dFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoZWNrYm94LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoyNHB4fS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtdHJhaWxpbmctaWNvbi5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtcmVtb3ZlLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MThweH0ubWF0LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1oZWFkZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2VsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9vdGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2FsZW5kYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhbGVuZGFyLWJvZHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxM3B4fS5tYXQtY2FsZW5kYXItYm9keS1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FsZW5kYXItcGVyaW9kLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo0MDB9Lm1hdC1kaWFsb2ctdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjEyNTtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE1MCU7bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS41ZW07d2lkdGg6MS41ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNWVtIDA7Ym9yZGVyLXRvcDouODQzNzVlbSBzb2xpZCB0cmFuc3BhcmVudH0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6LTAuODQzNzVlbTtwYWRkaW5nLXRvcDouODQzNzVlbX0ubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo3NSU7bWFyZ2luLXRvcDouNjY2NjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjc5MTY2NjY2NjdlbSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNDM3NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMnB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjNlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM1MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjI4MTI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDouNTQxNjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjY2NjY2NjY2NjdlbSl9QG1lZGlhIHByaW50ey5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMmVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMWVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTJlbSkgc2NhbGUoMC43NSl9fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi4yNWVtIDAgLjc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMDkzNzVlbTttYXJnaW4tdG9wOi0wLjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjFlbSAwIDFlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS44NDM3NWVtO21hcmdpbi10b3A6LTAuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9aW5wdXQubWF0LWlucHV0LWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LTAuMDYyNWVtfS5tYXQtbWVudS1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtcGFnaW5hdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweH0ubWF0LXJhZGlvLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW19Lm1hdC1zbGlkZS10b2dnbGUtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdGVwcGVyLWhvcml6b250YWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXN0ZXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXN0ZXAtc3ViLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDpub3JtYWx9Lm1hdC1zdGVwLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LXN0ZXAtbGFiZWwtc2VsZWN0ZWRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRhYi1ncm91cFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdGFiLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10YWItbGlua1tfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowfS5tYXQtdG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB4O3BhZGRpbmctdG9wOjZweDtwYWRkaW5nLWJvdHRvbTo2cHh9Lm1hdC10b29sdGlwLWhhbmRzZXRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9Lm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE2cHh9Lm1hdC1vcHRncm91cC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1zaW1wbGUtc25hY2tiYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweH0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb25bX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjE7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo1MDB9Lm1hdC10cmVlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW5lc3RlZC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjQwMDtmb250LXNpemU6MTRweH0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmVtcHR5KXt0cmFuc2Zvcm06dHJhbnNsYXRlWigwKX0ubWF0LXJpcHBsZS5tYXQtcmlwcGxlLXVuYm91bmRlZFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItcmFkaXVzOjUwJTtwb2ludGVyLWV2ZW50czpub25lO3RyYW5zaXRpb246b3BhY2l0eSx0cmFuc2Zvcm0gMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpO3RyYW5zZm9ybTpzY2FsZSgwKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6bm9uZX0uY2RrLXZpc3VhbGx5LWhpZGRlbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjA7Y2xpcDpyZWN0KDAgMCAwIDApO2hlaWdodDoxcHg7bWFyZ2luOi0xcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwO291dGxpbmU6MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb2ludGVyLWV2ZW50czpub25lO3RvcDowO2xlZnQ6MDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTplbXB0eXtkaXNwbGF5Om5vbmV9LmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1wYW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czphdXRvO2JveC1zaXppbmc6Ym9yZGVyLWJveDt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O21heC13aWR0aDoxMDAlO21heC1oZWlnaHQ6MTAwJX0uY2RrLW92ZXJsYXktYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO3otaW5kZXg6MTAwMDtwb2ludGVyLWV2ZW50czphdXRvOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDt0cmFuc2l0aW9uOm9wYWNpdHkgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSk7b3BhY2l0eTowfS5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjF9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAuY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTouNn0uY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4zMil9LmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MH0uY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWluLXdpZHRoOjFweDttaW4taGVpZ2h0OjFweH0uY2RrLWdsb2JhbC1zY3JvbGxibG9ja1tfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7d2lkdGg6MTAwJTtvdmVyZmxvdy15OnNjcm9sbH1Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0e31Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZHt9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbHthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQgMHMgMW1zfS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOm5vdCg6LXdlYmtpdC1hdXRvZmlsbCl7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCAwcyAxbXN9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplW19uZ2NvbnRlbnQtJUNPTVAlXXtyZXNpemU6bm9uZX10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDphdXRvICFpbXBvcnRhbnQ7b3ZlcmZsb3c6aGlkZGVuICFpbXBvcnRhbnR9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZy1maXJlZm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDowICFpbXBvcnRhbnR9Lm1hdC1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtbWRjLWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9W19uZ2hvc3QtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7cGFkZGluZzowIDE2cHg7d2lkdGg6MTAwJX0uYW5ub3RhdGlvbnMtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lO2ZvbnQtc2l6ZTouOWVtO2ZvbnQtd2VpZ2h0OjUwMDtwYWRkaW5nLXJpZ2h0OjEwcHh9LmFubm90YXRpb25zLXRpdGxlLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6bm93cmFwO2ZsZXg6MSAxO2hlaWdodDo0MnB4fS5zaG93LXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOi45ZW07bWFyZ2luLXJpZ2h0Oi44ZW19J10sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGlfdCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJucG1pLWFubm90YXRpb25zLWxpc3QtdG9vbGJhci1jb21wb25lbnQiLHRlbXBsYXRlVXJsOiIuL2Fubm90YXRpb25zX2xpc3RfdG9vbGJhcl9jb21wb25lbnQubmcuaHRtbCIsc3R5bGVVcmxzOlsiLi9hbm5vdGF0aW9uc19saXN0X3Rvb2xiYXJfY29tcG9uZW50LmNzcyJdLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2h9XX1dLG51bGwse251bUFubm90YXRpb25zOlt7dHlwZTp5X31dLGV4cGFuZGVkOlt7dHlwZTp5X31dLHNlbGVjdGVkQW5ub3RhdGlvbnM6W3t0eXBlOnlffV0sYW5ub3RhdGlvbnNFeHBhbmRlZDpbe3R5cGU6eV99XSxzaG93Q291bnRzOlt7dHlwZTp5X31dLHNob3dIaWRkZW46W3t0eXBlOnlffV0sb25GbGFnQW5ub3RhdGlvbnM6W3t0eXBlOl9ffV0sb25IaWRlQW5ub3RhdGlvbnM6W3t0eXBlOl9ffV0sb25Ub2dnbGVFeHBhbmRlZDpbe3R5cGU6X199XSxvblRvZ2dsZVNob3dDb3VudHM6W3t0eXBlOl9ffV0sb25Ub2dnbGVTaG93SGlkZGVuOlt7dHlwZTpfX31dfSk7Y2xhc3MgYV90e2NvbnN0cnVjdG9yKHQpe3RoaXMuc3RvcmU9dCx0aGlzLnNlbGVjdGVkQW5ub3RhdGlvbnMkPXRoaXMuc3RvcmUuc2VsZWN0KFpodCksdGhpcy5hbm5vdGF0aW9uc0V4cGFuZGVkJD10aGlzLnN0b3JlLnNlbGVjdChvYnQpLHRoaXMuc2hvd0NvdW50cyQ9dGhpcy5zdG9yZS5zZWxlY3QoYWJ0KSx0aGlzLnNob3dIaWRkZW4kPXRoaXMuc3RvcmUuc2VsZWN0KHJidCksdGhpcy5hbm5vdGF0aW9uc0ZpbHRlciQ9dGhpcy5zdG9yZS5zZWxlY3QoSmh0KSx0aGlzLmlzQW5ub3RhdGlvbnNGaWx0ZXJWYWxpZCQ9dGhpcy5hbm5vdGF0aW9uc0ZpbHRlciQucGlwZShodCgodD0+e3RyeXtyZXR1cm4gQm9vbGVhbihuZXcgUmVnRXhwKHQpKX1jYXRjaCh0KXtyZXR1cm4hMX19KSkpfWZpbHRlckNoYW5nZSh0KXt0aGlzLnN0b3JlLmRpc3BhdGNoKE1idCh7cmVnZXg6dH0pKX1mbGFnQW5ub3RhdGlvbnModCl7dGhpcy5zdG9yZS5kaXNwYXRjaChfYnQoe2Fubm90YXRpb25zOnR9KSl9aGlkZUFubm90YXRpb25zKHQpe3RoaXMuc3RvcmUuZGlzcGF0Y2goQ2J0KHthbm5vdGF0aW9uczp0fSkpfXRvZ2dsZUV4cGFuZGVkKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChEYnQoKSl9dG9nZ2xlU2hvd0NvdW50cygpe3RoaXMuc3RvcmUuZGlzcGF0Y2goQWJ0KCkpfXRvZ2dsZVNob3dIaWRkZW4oKXt0aGlzLnN0b3JlLmRpc3BhdGNoKFJidCgpKX19YV90Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxhX3QpKE11KEVrKSl9LGFfdC7JtWNtcD1Vbyh7dHlwZTphX3Qsc2VsZWN0b3JzOltbIm5wbWktYW5ub3RhdGlvbnMtbGlzdC10b29sYmFyIl1dLGlucHV0czp7bnVtQW5ub3RhdGlvbnM6Im51bUFubm90YXRpb25zIixleHBhbmRlZDoiZXhwYW5kZWQifSxkZWNsczo1LHZhcnM6MTQsY29uc3RzOltbMywibnVtQW5ub3RhdGlvbnMiLCJleHBhbmRlZCIsInNlbGVjdGVkQW5ub3RhdGlvbnMiLCJhbm5vdGF0aW9uc0V4cGFuZGVkIiwic2hvd0NvdW50cyIsInNob3dIaWRkZW4iLCJvbkZsYWdBbm5vdGF0aW9ucyIsIm9uSGlkZUFubm90YXRpb25zIiwib25Ub2dnbGVFeHBhbmRlZCIsIm9uVG9nZ2xlU2hvd0NvdW50cyIsIm9uVG9nZ2xlU2hvd0hpZGRlbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoT3UoMCwibnBtaS1hbm5vdGF0aW9ucy1saXN0LXRvb2xiYXItY29tcG9uZW50IiwwKSxOdSgib25GbGFnQW5ub3RhdGlvbnMiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLmZsYWdBbm5vdGF0aW9ucyhlKX0pKSgib25IaWRlQW5ub3RhdGlvbnMiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLmhpZGVBbm5vdGF0aW9ucyhlKX0pKSgib25Ub2dnbGVFeHBhbmRlZCIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi50b2dnbGVFeHBhbmRlZCgpfSkpKCJvblRvZ2dsZVNob3dDb3VudHMiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4udG9nZ2xlU2hvd0NvdW50cygpfSkpKCJvblRvZ2dsZVNob3dIaWRkZW4iLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4udG9nZ2xlU2hvd0hpZGRlbigpfSkpLE9iKDEsImFzeW5jIiksT2IoMiwiYXN5bmMiKSxPYigzLCJhc3luYyIpLE9iKDQsImFzeW5jIiksUHUoKSksMiZlJiZ2dSgibnVtQW5ub3RhdGlvbnMiLG4ubnVtQW5ub3RhdGlvbnMpKCJleHBhbmRlZCIsbi5leHBhbmRlZCkoInNlbGVjdGVkQW5ub3RhdGlvbnMiLFBiKDEsNixuLnNlbGVjdGVkQW5ub3RhdGlvbnMkKSkoImFubm90YXRpb25zRXhwYW5kZWQiLFBiKDIsOCxuLmFubm90YXRpb25zRXhwYW5kZWQkKSkoInNob3dDb3VudHMiLFBiKDMsMTAsbi5zaG93Q291bnRzJCkpKCJzaG93SGlkZGVuIixQYig0LDEyLG4uc2hvd0hpZGRlbiQpKX0sZGlyZWN0aXZlczpbaV90XSxwaXBlczpbTXZdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoYV90LFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6Im5wbWktYW5ub3RhdGlvbnMtbGlzdC10b29sYmFyIix0ZW1wbGF0ZTonXG4gICAgPG5wbWktYW5ub3RhdGlvbnMtbGlzdC10b29sYmFyLWNvbXBvbmVudFxuICAgICAgW251bUFubm90YXRpb25zXT0ibnVtQW5ub3RhdGlvbnMiXG4gICAgICBbZXhwYW5kZWRdPSJleHBhbmRlZCJcbiAgICAgIFtzZWxlY3RlZEFubm90YXRpb25zXT0ic2VsZWN0ZWRBbm5vdGF0aW9ucyQgfCBhc3luYyJcbiAgICAgIFthbm5vdGF0aW9uc0V4cGFuZGVkXT0iYW5ub3RhdGlvbnNFeHBhbmRlZCQgfCBhc3luYyJcbiAgICAgIFtzaG93Q291bnRzXT0ic2hvd0NvdW50cyQgfCBhc3luYyJcbiAgICAgIFtzaG93SGlkZGVuXT0ic2hvd0hpZGRlbiQgfCBhc3luYyJcbiAgICAgIChvbkZsYWdBbm5vdGF0aW9ucyk9ImZsYWdBbm5vdGF0aW9ucygkZXZlbnQpIlxuICAgICAgKG9uSGlkZUFubm90YXRpb25zKT0iaGlkZUFubm90YXRpb25zKCRldmVudCkiXG4gICAgICAob25Ub2dnbGVFeHBhbmRlZCk9InRvZ2dsZUV4cGFuZGVkKCkiXG4gICAgICAob25Ub2dnbGVTaG93Q291bnRzKT0idG9nZ2xlU2hvd0NvdW50cygpIlxuICAgICAgKG9uVG9nZ2xlU2hvd0hpZGRlbik9InRvZ2dsZVNob3dIaWRkZW4oKSJcbiAgICA+PC9ucG1pLWFubm90YXRpb25zLWxpc3QtdG9vbGJhci1jb21wb25lbnQ+XG4gICcsY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkVrfV19KSx7bnVtQW5ub3RhdGlvbnM6W3t0eXBlOnlffV0sZXhwYW5kZWQ6W3t0eXBlOnlffV19KTtjb25zdCByX3Q9WyJnbHlwaCJdO2NsYXNzIHNfdHtuZ0FmdGVyVmlld0luaXQoKXt0aGlzLnN2Zz1yNih0aGlzLmdseXBoU1ZHLm5hdGl2ZUVsZW1lbnQpLHRoaXMubWFpbkNvbnRhaW5lcj10aGlzLnN2Zy5hcHBlbmQoImciKSx0aGlzLmRyYXcoKX1kcmF3KCl7ImNpcmNsZSI9PXRoaXMuc2hhcGU/dGhpcy5tYWluQ29udGFpbmVyLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiZmlsbCIsdGhpcy5jb2xvcikuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJjeCIsNSkuYXR0cigiY3kiLDUpLmF0dHIoInIiLDUpOiJiYXIiPT10aGlzLnNoYXBlP3RoaXMubWFpbkNvbnRhaW5lci5hcHBlbmQoInJlY3QiKS5hdHRyKCJmaWxsIix0aGlzLmNvbG9yKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5hdHRyKCJ3aWR0aCIsMTApLmF0dHIoImhlaWdodCIsMTApOiJydW5JbmRpY2F0b3IiPT10aGlzLnNoYXBlJiZ0aGlzLm1haW5Db250YWluZXIuYXBwZW5kKCJnIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZmlsbCIsdGhpcy5jb2xvcikuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJkIiwiTSAyIDAgTCAxMCAwIEwgNyA1IEwgMTAgMTAgTCAyIDEwIFoiKX19c190Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxzX3QpfSxzX3QuybVjbXA9VW8oe3R5cGU6c190LHNlbGVjdG9yczpbWyJucG1pLWxlZ2VuZC1lbGVtZW50Il1dLHZpZXdRdWVyeTpmdW5jdGlvbiB0KGUsbil7aWYoMSZlJiZXYihyX3QsMyxjaCksMiZlKXtsZXQgdDtVYih0PVliKCkpJiYobi5nbHlwaFNWRz10LmZpcnN0KX19LGlucHV0czp7dGV4dDoidGV4dCIsY29sb3I6ImNvbG9yIixzaGFwZToic2hhcGUifSxkZWNsczo0LHZhcnM6MSxjb25zdHM6W1sxLCJnbHlwaCJdLFsiZ2x5cGgiLCIiXSxbMSwibGVnZW5kLWVsZW1lbnQtdGl0bGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKEhhKCksd3UoMCwic3ZnIiwwLDEpLEZhKCksT3UoMiwiZGl2IiwyKSxNZigzKSxQdSgpKSwyJmUmJihKYygzKSx2ZihuLnRleHQpKX0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O3BhZGRpbmctcmlnaHQ6MTBweH0ubGVnZW5kLWVsZW1lbnQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTouOGVtO3BhZGRpbmctbGVmdDo1cHh9LmdseXBoW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMHB4O2hlaWdodDoxMHB4fSJdLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihzX3QsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoibnBtaS1sZWdlbmQtZWxlbWVudCIsdGVtcGxhdGVVcmw6Ii4vbGVnZW5kX2VsZW1lbnRfY29tcG9uZW50Lm5nLmh0bWwiLHN0eWxlVXJsczpbIi4vbGVnZW5kX2VsZW1lbnRfY29tcG9uZW50LmNzcyJdLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2h9XX1dLG51bGwse3RleHQ6W3t0eXBlOnlffV0sY29sb3I6W3t0eXBlOnlffV0sc2hhcGU6W3t0eXBlOnlffV0sZ2x5cGhTVkc6W3t0eXBlOkZyLGFyZ3M6WyJnbHlwaCIse3N0YXRpYzohMCxyZWFkOmNofV19XX0pO2NsYXNzIGxfdHt9ZnVuY3Rpb24gY190KHQsZSl7aWYoMSZ0JiZ3dSgwLCJtYXQtaWNvbiIsOCksMiZ0KXtjb25zdCB0PUx1KDIpO3Z1KCJzdmdJY29uIix0LnNvcnQub3JkZXI9PT10LlNvcnRPcmRlci5ERVNDRU5ESU5HPyJhcnJvd19kb3dud2FyZF8yNHB4IjoiYXJyb3dfdXB3YXJkXzI0cHgiKSgibmdDbGFzcyIsdC5zb3J0Lm9yZGVyPT09dC5Tb3J0T3JkZXIuREVTQ0VORElORz8iZG93bi1pY29uIjoidXAtaWNvbiIpfX1mdW5jdGlvbiBkX3QodCxlKXtpZigxJnQpe2NvbnN0IHQ9RXUoKTtPdSgwLCJkaXYiLDQpLE91KDEsImRpdiIsNSksT3UoMiwiZGl2Iiw2KSxOdSgiY2xpY2siLChmdW5jdGlvbiBuKCl7cmEodCk7Y29uc3Qgbz1lLiRpbXBsaWNpdDtyZXR1cm4gTHUoKS5vbkNoYW5nZVNvcnQuZW1pdChvKX0pKSxNZigzKSxXbSg0LGNfdCwxLDIsIm1hdC1pY29uIiw3KSxQdSgpLFB1KCksUHUoKX1pZigyJnQpe2NvbnN0IHQ9ZS4kaW1wbGljaXQsbj1MdSgpO0pjKDMpLHhmKCIgIixuLnN0cmlwTWV0cmljKHQpLCIgIiksSmMoMSksdnUoIm5nSWYiLHQ9PT1uLnNvcnQubWV0cmljKX19bF90Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxsX3QpfSxsX3QuybVjbXA9VW8oe3R5cGU6bF90LHNlbGVjdG9yczpbWyJucG1pLWFubm90YXRpb25zLWxpc3QtbGVnZW5kIl1dLGRlY2xzOjQsdmFyczowLGNvbnN0czpbWyJ0ZXh0IiwicnVuIGluZGljYXRvciIsImNvbG9yIiwicmdiKDAsMCwwKSIsInNoYXBlIiwicnVuSW5kaWNhdG9yIl0sWyJ0ZXh0IiwicG9zaXRpdmUgY29ycmVsYXRpb24iLCJjb2xvciIsInJnYigxMDksIDE3NCwgMjEzKSIsInNoYXBlIiwiYmFyIl0sWyJ0ZXh0IiwibmVnYXRpdmUgY29ycmVsYXRpb24iLCJjb2xvciIsInJnYigyNDksIDEwNSwgNzYpIiwic2hhcGUiLCJiYXIiXSxbInRleHQiLCJzYW1wbGUgY291bnQiLCJjb2xvciIsInJnYigxNTEsIDE1MSwgMTUxKSIsInNoYXBlIiwiY2lyY2xlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJih3dSgwLCJucG1pLWxlZ2VuZC1lbGVtZW50IiwwKSx3dSgxLCJucG1pLWxlZ2VuZC1lbGVtZW50IiwxKSx3dSgyLCJucG1pLWxlZ2VuZC1lbGVtZW50IiwyKSx3dSgzLCJucG1pLWxlZ2VuZC1lbGVtZW50IiwzKSl9LGRpcmVjdGl2ZXM6W3NfdF0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmZsZXg7cGFkZGluZzowIDE2cHh9Il19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGxfdCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJucG1pLWFubm90YXRpb25zLWxpc3QtbGVnZW5kIix0ZW1wbGF0ZVVybDoiLi9sZWdlbmRfY29tcG9uZW50Lm5nLmh0bWwiLHN0eWxlVXJsczpbIi4vbGVnZW5kX2NvbXBvbmVudC5jc3MiXX1dfV0sbnVsbCxudWxsKTtjbGFzcyBwX3R7Y29uc3RydWN0b3IoKXt0aGlzLm9uQ2hhbmdlU29ydD1uZXcgQWIsdGhpcy5vbkFsbEFubm90YXRpb25zVG9nZ2xlZD1uZXcgQWIsdGhpcy5Tb3J0T3JkZXI9Vmh0fXN0cmlwTWV0cmljKHQpe3JldHVybiBWYnQodCl9fXBfdC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8cF90KX0scF90Lsm1Y21wPVVvKHt0eXBlOnBfdCxzZWxlY3RvcnM6W1sibnBtaS1hbm5vdGF0aW9ucy1saXN0LWhlYWRlci1jb21wb25lbnQiXV0saW5wdXRzOntudW1Bbm5vdGF0aW9uczoibnVtQW5ub3RhdGlvbnMiLHNlbGVjdGVkQW5ub3RhdGlvbnM6InNlbGVjdGVkQW5ub3RhdGlvbnMiLGFjdGl2ZU1ldHJpY3M6ImFjdGl2ZU1ldHJpY3MiLHNvcnQ6InNvcnQifSxvdXRwdXRzOntvbkNoYW5nZVNvcnQ6Im9uQ2hhbmdlU29ydCIsb25BbGxBbm5vdGF0aW9uc1RvZ2dsZWQ6Im9uQWxsQW5ub3RhdGlvbnNUb2dnbGVkIn0sZGVjbHM6NCx2YXJzOjIsY29uc3RzOltbMSwidG9nZ2xlLWFsbC1jb250YWluZXIiXSxbMywiY2hlY2tlZCIsImNoYW5nZSJdLFsxLCJhbm5vdGF0aW9ucy1oZWFkZXItY29udGFpbmVycyJdLFsiY2xhc3MiLCJoZWFkZXItY29sdW1uIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiaGVhZGVyLWNvbHVtbiJdLFsxLCJoZWFkZXItY29udGFpbmVyIl0sWyJ0YWJpbmRleCIsIjAiLCJyb2xlIiwiYnV0dG9uIiwidGl0bGUiLCJDaGFuZ2UgdGhlIHNvcnQgYnkgY2xpY2tpbmcgYW55IG9mIHRoZSBtZXRyaWNzLiIsMSwiaGVhZGVyLWNsaWNrYWJsZSIsMywiY2xpY2siXSxbImNsYXNzIiwic29ydC1pY29uIiwzLCJzdmdJY29uIiwibmdDbGFzcyIsNCwibmdJZiJdLFsxLCJzb3J0LWljb24iLDMsInN2Z0ljb24iLCJuZ0NsYXNzIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihPdSgwLCJkaXYiLDApLE91KDEsIm1hdC1jaGVja2JveCIsMSksTnUoImNoYW5nZSIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25BbGxBbm5vdGF0aW9uc1RvZ2dsZWQuZW1pdChlLmNoZWNrZWQpfSkpLFB1KCksUHUoKSxPdSgyLCJkaXYiLDIpLFdtKDMsZF90LDUsMiwiZGl2IiwzKSxQdSgpKSwyJmUmJihKYygxKSx2dSgiY2hlY2tlZCIsbi5zZWxlY3RlZEFubm90YXRpb25zLmxlbmd0aD09PW4ubnVtQW5ub3RhdGlvbnMpLEpjKDIpLHZ1KCJuZ0Zvck9mIixuLmFjdGl2ZU1ldHJpY3MpKX0sZGlyZWN0aXZlczpbdVksb3YsYXYsY0csdHZdLHN0eWxlczpbJy5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHh9Lm1hdC1oMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaGVhZGxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTVweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZ1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjA1ZW07bWFyZ2luOjAgMCA1NnB4fS5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAwNWVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXJhaXNlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdHJva2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmxhdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZhYltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbWluaS1mYWJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4fS5tYXQtY2FyZC1zdWJ0aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGVja2JveC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvb3Rlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgdHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIzZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LjU0MTY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2NjY2NjY3ZW0pfUBtZWRpYSBwcmludHsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjJlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouMjVlbSAwIC43NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxZW0gMCAxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMiksIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi0wLjA2MjVlbX0ubWF0LW1lbnUtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci12ZXJ0aWNhbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGFiLWxpbmtbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MH0ubWF0LXRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5Om5vbmV9LmNkay12aXN1YWxseS1oaWRkZW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjZ9LmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV0sIC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3hbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2tbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHt9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7fS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOi13ZWJraXQtYXV0b2ZpbGwpe2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZVtfbmdjb250ZW50LSVDT01QJV17cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fS5tYXQtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfVtfbmdob3N0LSVDT01QJV17Ym9yZGVyLWJvdHRvbToycHggc29saWQgI2ViZWJlYjtkaXNwbGF5OmZsZXg7aGVpZ2h0OjI4cHg7YWxpZ24taXRlbXM6ZmxleC1lbmQ7bWFyZ2luLXRvcDo4cHh9LmFubm90YXRpb25zLWhlYWRlci1jb250YWluZXJzW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7Zm9udC1zaXplOi45ZW07Zm9udC13ZWlnaHQ6NTAwO2ZsZXgtZ3JvdzoxfS5oZWFkZXItY29sdW1uW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjEgMX0uaGVhZGVyLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmUtYmxvY2t9LmhlYWRlci1jbGlja2FibGVbX25nY29udGVudC0lQ09NUCVde2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtvdXRsaW5lOm5vbmV9LnRvZ2dsZS1hbGwtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tbGVmdDoxMHB4O3dpZHRoOjkwcHh9LnNvcnQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjE2cHh9J10sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHBfdCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJucG1pLWFubm90YXRpb25zLWxpc3QtaGVhZGVyLWNvbXBvbmVudCIsdGVtcGxhdGVVcmw6Ii4vaGVhZGVyX2NvbXBvbmVudC5uZy5odG1sIixzdHlsZVVybHM6WyIuL2hlYWRlcl9jb21wb25lbnQuY3NzIl0sY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sbnVsbCx7bnVtQW5ub3RhdGlvbnM6W3t0eXBlOnlffV0sc2VsZWN0ZWRBbm5vdGF0aW9uczpbe3R5cGU6eV99XSxhY3RpdmVNZXRyaWNzOlt7dHlwZTp5X31dLHNvcnQ6W3t0eXBlOnlffV0sb25DaGFuZ2VTb3J0Olt7dHlwZTpfX31dLG9uQWxsQW5ub3RhdGlvbnNUb2dnbGVkOlt7dHlwZTpfX31dfSk7Y2xhc3MgbV90e2NvbnN0cnVjdG9yKHQpe3RoaXMuc3RvcmU9dCx0aGlzLnNlbGVjdGVkQW5ub3RhdGlvbnMkPXRoaXMuc3RvcmUuc2VsZWN0KFpodCksdGhpcy5hbm5vdGF0aW9uU29ydCQ9dGhpcy5zdG9yZS5zZWxlY3QoZWJ0KX1jaGFuZ2VTb3J0KHQpe3RoaXMuc3RvcmUuZGlzcGF0Y2god2J0KHttZXRyaWM6dH0pKX1hbGxBbm5vdGF0aW9uc1RvZ2dsZWQodCl7dGhpcy5zdG9yZS5kaXNwYXRjaChiYnQodD97YW5ub3RhdGlvbnM6T2JqZWN0LmtleXModGhpcy5hbm5vdGF0aW9ucyl9Onthbm5vdGF0aW9uczpbXX0pKX19bV90Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxtX3QpKE11KEVrKSl9LG1fdC7JtWNtcD1Vbyh7dHlwZTptX3Qsc2VsZWN0b3JzOltbIm5wbWktYW5ub3RhdGlvbnMtbGlzdC1oZWFkZXIiXV0saW5wdXRzOntudW1Bbm5vdGF0aW9uczoibnVtQW5ub3RhdGlvbnMiLGFubm90YXRpb25zOiJhbm5vdGF0aW9ucyIsYWN0aXZlTWV0cmljczoiYWN0aXZlTWV0cmljcyJ9LGRlY2xzOjMsdmFyczo4LGNvbnN0czpbWzMsIm51bUFubm90YXRpb25zIiwic2VsZWN0ZWRBbm5vdGF0aW9ucyIsInNvcnQiLCJhY3RpdmVNZXRyaWNzIiwib25DaGFuZ2VTb3J0Iiwib25BbGxBbm5vdGF0aW9uc1RvZ2dsZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKE91KDAsIm5wbWktYW5ub3RhdGlvbnMtbGlzdC1oZWFkZXItY29tcG9uZW50IiwwKSxOdSgib25DaGFuZ2VTb3J0IiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5jaGFuZ2VTb3J0KGUpfSkpKCJvbkFsbEFubm90YXRpb25zVG9nZ2xlZCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4uYWxsQW5ub3RhdGlvbnNUb2dnbGVkKGUpfSkpLE9iKDEsImFzeW5jIiksT2IoMiwiYXN5bmMiKSxQdSgpKSwyJmUmJnZ1KCJudW1Bbm5vdGF0aW9ucyIsbi5udW1Bbm5vdGF0aW9ucykoInNlbGVjdGVkQW5ub3RhdGlvbnMiLFBiKDEsNCxuLnNlbGVjdGVkQW5ub3RhdGlvbnMkKSkoInNvcnQiLFBiKDIsNixuLmFubm90YXRpb25Tb3J0JCkpKCJhY3RpdmVNZXRyaWNzIixuLmFjdGl2ZU1ldHJpY3MpfSxkaXJlY3RpdmVzOltwX3RdLHBpcGVzOltNdl0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihtX3QsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoibnBtaS1hbm5vdGF0aW9ucy1saXN0LWhlYWRlciIsdGVtcGxhdGU6J1xuICAgIDxucG1pLWFubm90YXRpb25zLWxpc3QtaGVhZGVyLWNvbXBvbmVudFxuICAgICAgW251bUFubm90YXRpb25zXT0ibnVtQW5ub3RhdGlvbnMiXG4gICAgICBbc2VsZWN0ZWRBbm5vdGF0aW9uc109InNlbGVjdGVkQW5ub3RhdGlvbnMkIHwgYXN5bmMiXG4gICAgICBbc29ydF09ImFubm90YXRpb25Tb3J0JCB8IGFzeW5jIlxuICAgICAgW2FjdGl2ZU1ldHJpY3NdPSJhY3RpdmVNZXRyaWNzIlxuICAgICAgKG9uQ2hhbmdlU29ydCk9ImNoYW5nZVNvcnQoJGV2ZW50KSJcbiAgICAgIChvbkFsbEFubm90YXRpb25zVG9nZ2xlZCk9ImFsbEFubm90YXRpb25zVG9nZ2xlZCgkZXZlbnQpIlxuICAgID48L25wbWktYW5ub3RhdGlvbnMtbGlzdC1oZWFkZXItY29tcG9uZW50PlxuICAnLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2h9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpFa31dfSkse251bUFubm90YXRpb25zOlt7dHlwZTp5X31dLGFubm90YXRpb25zOlt7dHlwZTp5X31dLGFjdGl2ZU1ldHJpY3M6W3t0eXBlOnlffV19KTtjb25zdCB1X3Q9WyJjaGFydCJdLGZfdD1bImhpbnRDbGlwIl07ZnVuY3Rpb24gZ190KHQsZSl7MSZ0JiZ3dSgwLCJtYXQtaWNvbiIsMTIpfWZ1bmN0aW9uIGhfdCh0LGUpezEmdCYmd3UoMCwibWF0LWljb24iLDEzKX1mdW5jdGlvbiBiX3QodCxlKXtpZigxJnQmJnd1KDAsIm1hdC1pY29uIiwxNCksMiZ0KXtjb25zdCB0PUx1KCk7dnUoInN2Z0ljb24iLHQuc29ydC5vcmRlcj09PXQuU29ydE9yZGVyLlNJTUlMQVI/ImFycm93X2Rvd253YXJkXzI0cHgiOiJhcnJvd191cHdhcmRfMjRweCIpKCJuZ0NsYXNzIix0LnNvcnQub3JkZXI9PT10LlNvcnRPcmRlci5TSU1JTEFSPyJkb3duLWljb24iOiJ1cC1pY29uIil9fWNsYXNzIHlfdHtjb25zdHJ1Y3Rvcigpe3RoaXMuc2VsZWN0ZWQ9ITEsdGhpcy5vblNob3dTaW1pbGFyQW5ub3RhdGlvbnM9bmV3IEFiLHRoaXMuU29ydE9yZGVyPVZodCx0aGlzLndpZHRoPTEwLHRoaXMuY2hhcnRXaWR0aD0xMCx0aGlzLmNoYXJ0SGVpZ2h0PTEwLHRoaXMubWF4RG90UmFkaXVzPTEwLHRoaXMuY291bnREb3RPZmZzZXQ9NzAsdGhpcy5jb3VudFRleHRQYWRkaW5nPTIsdGhpcy5tYXJnaW49e3RvcDowLHJpZ2h0OjAsYm90dG9tOjAsbGVmdDoxMDB9LHRoaXMuc3Ryb2tlQ29sb3I9IiNmZmYiLHRoaXMudGV4dENsYXNzPSJkZWZhdWx0LXRleHQiLHRoaXMucnVucz1bXX1vblJlc2l6ZSh0KXt0aGlzLnJlZHJhdygpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuc3ZnPXI2KHRoaXMuYW5ub3RhdGlvbkNvbnRhaW5lci5uYXRpdmVFbGVtZW50KS5zZWxlY3QoInN2ZyIpLHRoaXMueFNjYWxlPVF0dCgpLnBhZGRpbmcoMCksdGhpcy55U2NhbGU9UXR0KCkucGFkZGluZygwKSx0aGlzLnNpemVTY2FsZT1wZXQoKS5kb21haW4oWzAsMV0pLHRoaXMuY291bnRTaXplU2NhbGU9cGV0KCkucmFuZ2UoWzIsdGhpcy5tYXhEb3RSYWRpdXNdKSx0aGlzLm1haW5Db250YWluZXI9dGhpcy5zdmcuYXBwZW5kKCJnIikuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7dGhpcy5tYXJnaW4ubGVmdH0sICR7dGhpcy5tYXJnaW4udG9wfSlgKSx0aGlzLmJhcnNHcm91cD10aGlzLm1haW5Db250YWluZXIuYXBwZW5kKCJnIiksdGhpcy5jb3VudERvdHNHcm91cD10aGlzLm1haW5Db250YWluZXIuYXBwZW5kKCJnIiksdGhpcy50ZXh0c0dyb3VwPXRoaXMubWFpbkNvbnRhaW5lci5hcHBlbmQoImciKSx0aGlzLmNvdW50VGV4dHNHcm91cD10aGlzLm1haW5Db250YWluZXIuYXBwZW5kKCJnIiksdGhpcy5ydW5IaW50R3JvdXA9dGhpcy5zdmcuYXBwZW5kKCJnIiksdGhpcy5yZWRyYXcoKX1uZ09uQ2hhbmdlcyh0KXt0aGlzLnN2ZyYmdGhpcy5yZWRyYXcoKX1yZWRyYXcoKXt0aGlzLnNlbGVjdGVkPXRoaXMuc2VsZWN0ZWRBbm5vdGF0aW9ucy5pbmNsdWRlcyh0aGlzLmFubm90YXRpb24pLHRoaXMudXBkYXRlRGltZW5zaW9ucygpLHRoaXMuc2V0VGV4dENsYXNzKCksdGhpcy51cGRhdGVBeGVzKCksdGhpcy5kcmF3KCl9dXBkYXRlRGltZW5zaW9ucygpe2NvbnN0IHQ9bmV3IFNldDt0aGlzLmRhdGEuZm9yRWFjaCgoZT0+e3QuYWRkKGUucnVuKX0pKSx0aGlzLnJ1bnM9Wy4uLnRdLHRoaXMuc3ZnLnN0eWxlKCJoZWlnaHQiLHRoaXMubnVtQWN0aXZlUnVucyp0aGlzLnJ1bkhlaWdodCsicHgiKSx0aGlzLmNoYXJ0SGVpZ2h0PXRoaXMucnVucy5sZW5ndGgqdGhpcy5ydW5IZWlnaHQtdGhpcy5tYXJnaW4udG9wLXRoaXMubWFyZ2luLmJvdHRvbSx0aGlzLndpZHRoPXRoaXMuYW5ub3RhdGlvbkNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRofHwxMCx0aGlzLmNoYXJ0V2lkdGg9dGhpcy53aWR0aC10aGlzLm1hcmdpbi5sZWZ0LXRoaXMubWFyZ2luLnJpZ2h0fXNldFRleHRDbGFzcygpe3RoaXMudGV4dENsYXNzPSJkZWZhdWx0LXRleHQiLHRoaXMuZmxhZ2dlZEFubm90YXRpb25zLmluY2x1ZGVzKHRoaXMuYW5ub3RhdGlvbik/dGhpcy50ZXh0Q2xhc3M9ImZsYWctdGV4dCI6dGhpcy5oaWRkZW5Bbm5vdGF0aW9ucy5pbmNsdWRlcyh0aGlzLmFubm90YXRpb24pJiYodGhpcy50ZXh0Q2xhc3M9ImhpZGRlbi10ZXh0Iil9dXBkYXRlQXhlcygpe3RoaXMueFNjYWxlLnJhbmdlUm91bmQoWzAsdGhpcy5jaGFydFdpZHRoLXRoaXMuY2hhcnRXaWR0aC90aGlzLmFjdGl2ZU1ldHJpY3MubGVuZ3RoXSkuZG9tYWluKHRoaXMuYWN0aXZlTWV0cmljcy5tYXAoKHQ9PlZidCh0KSkpKSx0aGlzLnlTY2FsZS5yYW5nZVJvdW5kKFswLHRoaXMuY2hhcnRIZWlnaHQtdGhpcy5ydW5IZWlnaHRdKS5kb21haW4odGhpcy5ydW5zKSx0aGlzLnNpemVTY2FsZS5yYW5nZShbMCx0aGlzLmNoYXJ0V2lkdGgvdGhpcy5hY3RpdmVNZXRyaWNzLmxlbmd0aF0pLHRoaXMuY291bnRTaXplU2NhbGUuZG9tYWluKFswLHRoaXMubWF4Q291bnRdKX1kcmF3KCl7dGhpcy5kcmF3UnVuSW5kaWNhdG9ycygpLHRoaXMuZHJhd1J1bkhpbnRUZXh0cygpLHRoaXMuZHJhd0JhcnMoKSx0aGlzLmRyYXdUZXh0cygpLHRoaXMuc2hvd0NvdW50cz8odGhpcy5kcmF3Q291bnREb3RzKCksdGhpcy5kcmF3Q291bnRUZXh0cygpKToodGhpcy5jb3VudERvdHNHcm91cC5zZWxlY3RBbGwoIi5jb3VudC1kb3QiKS5yZW1vdmUoKSx0aGlzLmNvdW50VGV4dHNHcm91cC5zZWxlY3RBbGwoIi5jb3VudC1iYWNrZ3JvdW5kLXRleHQiKS5yZW1vdmUoKSx0aGlzLmNvdW50VGV4dHNHcm91cC5zZWxlY3RBbGwoIi5jb3VudC10ZXh0IikucmVtb3ZlKCkpfWRyYXdSdW5JbmRpY2F0b3JzKCl7cjYodGhpcy5jbGlwUGF0aEVsZW1lbnQubmF0aXZlRWxlbWVudCkuc2VsZWN0KCJyZWN0IikuYXR0cigid2lkdGgiLHRoaXMubWFyZ2luLmxlZnQtMzApLmF0dHIoImhlaWdodCIsdGhpcy5jaGFydEhlaWdodCk7Y29uc3QgdD10aGlzLnJ1bkhpbnRHcm91cC5zZWxlY3RBbGwoIi5oaW50IikuZGF0YSh0aGlzLnJ1bnMpLGU9dC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiaGludCIpO2UuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCAwIEwgMTUgMCBMIDEwIDEwIEwgMTUgMjAgTCAwIDIwIFoiKSxlLm1lcmdlKHQpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7cmV0dXJuYHRyYW5zbGF0ZSgxMCwgJHt0aGlzLnlTY2FsZSh0KSs1fSlgfS5iaW5kKHRoaXMpKS5hdHRyKCJmaWxsIixmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jb2xvclNjYWxlKHQpfS5iaW5kKHRoaXMpKSx0LmV4aXQoKS5yZW1vdmUoKX1kcmF3UnVuSGludFRleHRzKCl7Y29uc3QgdD10aGlzLnJ1bkhpbnRHcm91cC5zZWxlY3RBbGwoIi5oaW50LXRleHQiKS5kYXRhKHRoaXMucnVucyk7dC5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLDI1KS5hdHRyKCJmb250LXNpemUiLCIxMHB4IikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigiY2xpcC1wYXRoIiwidXJsKCNoaW50LWNsaXApIikubWVyZ2UodCkuYXR0cigieSIsZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueVNjYWxlKHQpKzE1fS5iaW5kKHRoaXMpKS5hdHRyKCJjbGFzcyIsYGhpbnQtdGV4dCAke3RoaXMudGV4dENsYXNzfWApLnRleHQoKHQ9Pnt2YXIgZTtyZXR1cm4obnVsbD09PShlPXRoaXMucnVuSWRUb1J1bnMuZ2V0KHQpKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5uYW1lKXx8IiJ9KSksdC5leGl0KCkucmVtb3ZlKCl9ZHJhd0JhcnMoKXtjb25zdCB0PXRoaXMuYmFyc0dyb3VwLnNlbGVjdEFsbCgiLmJhciIpLmRhdGEodGhpcy5kYXRhKTt0LmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJiYXIiKS5hdHRyKCJoZWlnaHQiLDIwKS5tZXJnZSh0KS5hdHRyKCJmaWxsIiwodD0+bnVsbD09PXQublBNSVZhbHVlPyIiOnQublBNSVZhbHVlPj0wP3hvdCh0Lm5QTUlWYWx1ZSk6UG90KC0xKnQublBNSVZhbHVlKSkpLmF0dHIoIngiLGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnhTY2FsZSh0Lm1ldHJpYyl9LmJpbmQodGhpcykpLmF0dHIoInkiLGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnlTY2FsZSh0LnJ1bikrNX0uYmluZCh0aGlzKSkuYXR0cigid2lkdGgiLGZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT09dC5uUE1JVmFsdWU/MDp0aGlzLnNpemVTY2FsZShNYXRoLmFicyh0Lm5QTUlWYWx1ZSkpfS5iaW5kKHRoaXMpKSx0LmV4aXQoKS5yZW1vdmUoKX1kcmF3Q291bnREb3RzKCl7Y29uc3QgdD10aGlzLmNvdW50RG90c0dyb3VwLnNlbGVjdEFsbCgiLmNvdW50LWRvdCIpLmRhdGEodGhpcy5kYXRhKTt0LmVudGVyKCkuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjbGFzcyIsImNvdW50LWRvdCIpLmF0dHIoInN0cm9rZSIsImJsYWNrIikubWVyZ2UodCkuYXR0cigiZmlsbCIsZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PT10LmNvdW50VmFsdWU/IiI6T290KHQuY291bnRWYWx1ZS90aGlzLm1heENvdW50KX0uYmluZCh0aGlzKSkuYXR0cigiY3giLGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnhTY2FsZSh0Lm1ldHJpYykrdGhpcy5jb3VudERvdE9mZnNldH0uYmluZCh0aGlzKSkuYXR0cigiY3kiLGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnlTY2FsZSh0LnJ1bikrdGhpcy5ydW5IZWlnaHQvMn0uYmluZCh0aGlzKSkuYXR0cigiciIsZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PT10LmNvdW50VmFsdWU/MDp0aGlzLmNvdW50U2l6ZVNjYWxlKHQuY291bnRWYWx1ZSl9LmJpbmQodGhpcykpLHQuZXhpdCgpLnJlbW92ZSgpfWRyYXdUZXh0cygpe2NvbnN0IHQ9dGhpcy50ZXh0c0dyb3VwLnNlbGVjdEFsbCgiLm5wbWktYmFja2dyb3VuZC10ZXh0IikuZGF0YSh0aGlzLmRhdGEpO3QuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsIm5wbWktYmFja2dyb3VuZC10ZXh0IikuYXR0cigic3Ryb2tlLXdpZHRoIiwzKS5hdHRyKCJzdHJva2UtbGluZWpvaW4iLCJyb3VuZCIpLmF0dHIoInN0cm9rZSIsdGhpcy5zdHJva2VDb2xvcikuYXR0cigiZm9udC1zaXplIiwiMTNweCIpLmF0dHIoImFsaWdubWVudC1iYXNlbGluZSIsIm1pZGRsZSIpLm1lcmdlKHQpLmF0dHIoIngiLGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnhTY2FsZSh0Lm1ldHJpYykrNX0uYmluZCh0aGlzKSkuYXR0cigieSIsZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueVNjYWxlKHQucnVuKSt0aGlzLnJ1bkhlaWdodC8yfS5iaW5kKHRoaXMpKS50ZXh0KCh0PT5udWxsPT09dC5uUE1JVmFsdWU/Im51bGwiOk1hdGgucm91bmQoMWUzKih0Lm5QTUlWYWx1ZStOdW1iZXIuRVBTSUxPTikpLzFlMykpLHQuZXhpdCgpLnJlbW92ZSgpO2NvbnN0IGU9dGhpcy50ZXh0c0dyb3VwLnNlbGVjdEFsbCgiLm5wbWktdGV4dCIpLmRhdGEodGhpcy5kYXRhKTtlLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJucG1pLXRleHQiKS5hdHRyKCJmb250LXNpemUiLCIxM3B4IikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwibWlkZGxlIikubWVyZ2UoZSkuYXR0cigieCIsZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueFNjYWxlKHQubWV0cmljKSs1fS5iaW5kKHRoaXMpKS5hdHRyKCJ5IixmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy55U2NhbGUodC5ydW4pK3RoaXMucnVuSGVpZ2h0LzJ9LmJpbmQodGhpcykpLnRleHQoKHQ9Pm51bGw9PT10Lm5QTUlWYWx1ZT8ibnVsbCI6TWF0aC5yb3VuZCgxZTMqKHQublBNSVZhbHVlK051bWJlci5FUFNJTE9OKSkvMWUzKSksZS5leGl0KCkucmVtb3ZlKCl9ZHJhd0NvdW50VGV4dHMoKXtjb25zdCB0PXRoaXMuY291bnRUZXh0c0dyb3VwLnNlbGVjdEFsbCgiLmNvdW50LWJhY2tncm91bmQtdGV4dCIpLmRhdGEodGhpcy5kYXRhKTt0LmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJjb3VudC1iYWNrZ3JvdW5kLXRleHQiKS5hdHRyKCJzdHJva2Utd2lkdGgiLDMpLmF0dHIoInN0cm9rZS1saW5lam9pbiIsInJvdW5kIikuYXR0cigic3Ryb2tlIix0aGlzLnN0cm9rZUNvbG9yKS5hdHRyKCJmb250LXNpemUiLCIxMHB4IikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwibWlkZGxlIikubWVyZ2UodCkuYXR0cigieCIsZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueFNjYWxlKHQubWV0cmljKSt0aGlzLmNvdW50RG90T2Zmc2V0K3RoaXMuY291bnRUZXh0UGFkZGluZyt0aGlzLm1heERvdFJhZGl1c30uYmluZCh0aGlzKSkuYXR0cigieSIsZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueVNjYWxlKHQucnVuKSt0aGlzLnJ1bkhlaWdodC8yfS5iaW5kKHRoaXMpKS50ZXh0KCh0PT5udWxsPT09dC5jb3VudFZhbHVlPyIiOkludGwuTnVtYmVyRm9ybWF0KCkuZm9ybWF0KHQuY291bnRWYWx1ZSkpKSx0LmV4aXQoKS5yZW1vdmUoKTtjb25zdCBlPXRoaXMuY291bnRUZXh0c0dyb3VwLnNlbGVjdEFsbCgiLmNvdW50LXRleHQiKS5kYXRhKHRoaXMuZGF0YSk7ZS5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwiY291bnQtdGV4dCIpLmF0dHIoImZvbnQtc2l6ZSIsIjEwcHgiKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5tZXJnZShlKS5hdHRyKCJ4IixmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54U2NhbGUodC5tZXRyaWMpK3RoaXMuY291bnREb3RPZmZzZXQrdGhpcy5jb3VudFRleHRQYWRkaW5nK3RoaXMubWF4RG90UmFkaXVzfS5iaW5kKHRoaXMpKS5hdHRyKCJ5IixmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy55U2NhbGUodC5ydW4pK3RoaXMucnVuSGVpZ2h0LzJ9LmJpbmQodGhpcykpLnRleHQoKHQ9Pm51bGw9PT10LmNvdW50VmFsdWU/IiI6SW50bC5OdW1iZXJGb3JtYXQoKS5mb3JtYXQodC5jb3VudFZhbHVlKSkpLGUuZXhpdCgpLnJlbW92ZSgpfXNpbWlsYXJpdHlTb3J0KHQpe3RoaXMuaGFzRW1iZWRkaW5nJiYodC5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLm9uU2hvd1NpbWlsYXJBbm5vdGF0aW9ucy5lbWl0KCkpfX15X3QuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHlfdCl9LHlfdC7JtWNtcD1Vbyh7dHlwZTp5X3Qsc2VsZWN0b3JzOltbImFubm90YXRpb24tY29tcG9uZW50Il1dLHZpZXdRdWVyeTpmdW5jdGlvbiB0KGUsbil7aWYoMSZlJiYoV2IodV90LDMsY2gpLFdiKGZfdCwzLGNoKSksMiZlKXtsZXQgdDtVYih0PVliKCkpJiYobi5hbm5vdGF0aW9uQ29udGFpbmVyPXQuZmlyc3QpLFViKHQ9WWIoKSkmJihuLmNsaXBQYXRoRWxlbWVudD10LmZpcnN0KX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJk51KCJyZXNpemUiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub25SZXNpemUoKX0pLCExLHFsKSwyJmUmJmFmKCJzZWxlY3RlZC1yb3ciLG4uc2VsZWN0ZWQpfSxpbnB1dHM6e2RhdGE6ImRhdGEiLG1heENvdW50OiJtYXhDb3VudCIsc2VsZWN0ZWRBbm5vdGF0aW9uczoic2VsZWN0ZWRBbm5vdGF0aW9ucyIsZmxhZ2dlZEFubm90YXRpb25zOiJmbGFnZ2VkQW5ub3RhdGlvbnMiLGhpZGRlbkFubm90YXRpb25zOiJoaWRkZW5Bbm5vdGF0aW9ucyIsYWN0aXZlTWV0cmljczoiYWN0aXZlTWV0cmljcyIsbnVtQWN0aXZlUnVuczoibnVtQWN0aXZlUnVucyIsc2hvd0NvdW50czoic2hvd0NvdW50cyIsYW5ub3RhdGlvbjoiYW5ub3RhdGlvbiIscnVuSGVpZ2h0OiJydW5IZWlnaHQiLGhhc0VtYmVkZGluZzoiaGFzRW1iZWRkaW5nIixzb3J0OiJzb3J0IixzaWRlYmFyV2lkdGg6InNpZGViYXJXaWR0aCIsY29sb3JTY2FsZToiY29sb3JTY2FsZSIscnVuSWRUb1J1bnM6InJ1bklkVG9SdW5zIn0sb3V0cHV0czp7b25TaG93U2ltaWxhckFubm90YXRpb25zOiJvblNob3dTaW1pbGFyQW5ub3RhdGlvbnMifSxmZWF0dXJlczpbU2ldLGRlY2xzOjE0LHZhcnM6MTAsY29uc3RzOltbMSwiYW5ub3RhdGlvbi10aXRsZSJdLFsxLCJhbm5vdGF0aW9uLWNoZWNrYm94IiwzLCJjaGVja2VkIiwiY2xpY2siXSxbMSwiYW5ub3RhdGlvbi1idXR0b24iLDMsIm5nQ2xhc3MiLCJjbGljayJdLFsiY2xhc3MiLCJmbGFnZ2VkLWljb24iLCJzdmdJY29uIiwiZmxhZ18yNHB4Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImhpZGRlbi1pY29uIiwic3ZnSWNvbiIsInZpc2liaWxpdHlfb2ZmXzI0cHgiLDQsIm5nSWYiXSxbImNsYXNzIiwiYW5ub3RhdGlvbi1pY29uIiwzLCJzdmdJY29uIiwibmdDbGFzcyIsNCwibmdJZiJdLFsxLCJjaGFydC1kaXYiXSxbImNoYXJ0IiwiIl0sWzEsImNoYXJ0LXN2ZyJdLFsiaWQiLCJoaW50LWNsaXAiXSxbImhpbnRDbGlwIiwiIl0sWyJ4IiwiMCIsInkiLCIwIl0sWyJzdmdJY29uIiwiZmxhZ18yNHB4IiwxLCJmbGFnZ2VkLWljb24iXSxbInN2Z0ljb24iLCJ2aXNpYmlsaXR5X29mZl8yNHB4IiwxLCJoaWRkZW4taWNvbiJdLFsxLCJhbm5vdGF0aW9uLWljb24iLDMsInN2Z0ljb24iLCJuZ0NsYXNzIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihPdSgwLCJkaXYiLDApLE91KDEsIm1hdC1jaGVja2JveCIsMSksTnUoImNsaWNrIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpfSkpLFB1KCksT3UoMiwiYnV0dG9uIiwyKSxOdSgiY2xpY2siLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLnNpbWlsYXJpdHlTb3J0KGUpfSkpLE1mKDMpLFB1KCksV20oNCxnX3QsMSwwLCJtYXQtaWNvbiIsMyksV20oNSxoX3QsMSwwLCJtYXQtaWNvbiIsNCksV20oNixiX3QsMSwyLCJtYXQtaWNvbiIsNSksUHUoKSxPdSg3LCJkaXYiLDYsNyksSGEoKSxPdSg5LCJzdmciLDgpLE91KDEwLCJkZWZzIiksT3UoMTEsImNsaXBQYXRoIiw5LDEwKSx3dSgxMywicmVjdCIsMTEpLFB1KCksUHUoKSxQdSgpLFB1KCkpLDImZSYmKGFmKCJmbGFnZ2VkLWFubm90YXRpb24iLG4uZmxhZ2dlZEFubm90YXRpb25zLmluY2x1ZGVzKG4uYW5ub3RhdGlvbikpKCJoaWRkZW4tYW5ub3RhdGlvbiIsbi5oaWRkZW5Bbm5vdGF0aW9ucy5pbmNsdWRlcyhuLmFubm90YXRpb24pJiYhbi5mbGFnZ2VkQW5ub3RhdGlvbnMuaW5jbHVkZXMobi5hbm5vdGF0aW9uKSksSmMoMSksdnUoImNoZWNrZWQiLG4uc2VsZWN0ZWRBbm5vdGF0aW9ucy5pbmNsdWRlcyhuLmFubm90YXRpb24pKSxKYygxKSx2dSgibmdDbGFzcyIsbi5oYXNFbWJlZGRpbmc/ImNsaWNrYWJsZS1hbm5vdGF0aW9uIjoiIiksSmMoMSkseGYoIiAiLG4uYW5ub3RhdGlvbiwiICIpLEpjKDEpLHZ1KCJuZ0lmIixuLmZsYWdnZWRBbm5vdGF0aW9ucy5pbmNsdWRlcyhuLmFubm90YXRpb24pKSxKYygxKSx2dSgibmdJZiIsbi5oaWRkZW5Bbm5vdGF0aW9ucy5pbmNsdWRlcyhuLmFubm90YXRpb24pKSxKYygxKSx2dSgibmdJZiIsbi5hbm5vdGF0aW9uPT09bi5zb3J0Lm1ldHJpYykpfSxkaXJlY3RpdmVzOlt1WSx0dixhdixjR10sc3R5bGVzOlsnLm1hdC1iYWRnZS1jb250ZW50e2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1iYWRnZS1zbWFsbCAubWF0LWJhZGdlLWNvbnRlbnR7Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlIC5tYXQtYmFkZ2UtY29udGVudHtmb250LXNpemU6MjRweH0ubWF0LWgxLC5tYXQtaGVhZGxpbmUsLm1hdC10eXBvZ3JhcGh5IGgxe2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyLC5tYXQtdGl0bGUsLm1hdC10eXBvZ3JhcGh5IGgye2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgzLC5tYXQtc3ViaGVhZGluZy0yLC5tYXQtdHlwb2dyYXBoeSBoM3tmb250OjQwMCAxNnB4LzI4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNCwubWF0LXN1YmhlYWRpbmctMSwubWF0LXR5cG9ncmFwaHkgaDR7Zm9udDo0MDAgMTVweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDUsLm1hdC10eXBvZ3JhcGh5IGg1e2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2LC5tYXQtdHlwb2dyYXBoeSBoNntmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZywubWF0LWJvZHktMntmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHksLm1hdC1ib2R5LTEsLm1hdC10eXBvZ3JhcGh5e2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keSBwLC5tYXQtYm9keS0xIHAsLm1hdC10eXBvZ3JhcGh5IHB7bWFyZ2luOjAgMCAxMnB4fS5tYXQtc21hbGwsLm1hdC1jYXB0aW9ue2ZvbnQ6NDAwIDEycHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZGlzcGxheS00LC5tYXQtdHlwb2dyYXBoeSAubWF0LWRpc3BsYXktNHtmb250OjMwMCAxMTJweC8xMTJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDVlbTttYXJnaW46MCAwIDU2cHh9Lm1hdC1kaXNwbGF5LTMsLm1hdC10eXBvZ3JhcGh5IC5tYXQtZGlzcGxheS0ze2ZvbnQ6NDAwIDU2cHgvNTZweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDJlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTIsLm1hdC10eXBvZ3JhcGh5IC5tYXQtZGlzcGxheS0ye2ZvbnQ6NDAwIDQ1cHgvNDhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDA1ZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0xLC5tYXQtdHlwb2dyYXBoeSAubWF0LWRpc3BsYXktMXtmb250OjQwMCAzNHB4LzQwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDY0cHh9Lm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVye2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYnV0dG9uLC5tYXQtcmFpc2VkLWJ1dHRvbiwubWF0LWljb24tYnV0dG9uLC5tYXQtc3Ryb2tlZC1idXR0b24sLm1hdC1mbGF0LWJ1dHRvbiwubWF0LWZhYiwubWF0LW1pbmktZmFie2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xle2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmR7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZC10aXRsZXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlciAubWF0LWNhcmQtdGl0bGV7Zm9udC1zaXplOjIwcHh9Lm1hdC1jYXJkLXN1YnRpdGxlLC5tYXQtY2FyZC1jb250ZW50e2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2hlY2tib3h7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0IC5tYXQtY2hlY2tib3gtbGFiZWx7bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXB7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2hpcCAubWF0LWNoaXAtdHJhaWxpbmctaWNvbi5tYXQtaWNvbiwubWF0LWNoaXAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbntmb250LXNpemU6MThweH0ubWF0LXRhYmxle2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWhlYWRlci1jZWxse2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGwsLm1hdC1mb290ZXItY2VsbHtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFye2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhbGVuZGFyLWJvZHl7Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsLC5tYXQtY2FsZW5kYXItcGVyaW9kLWJ1dHRvbntmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXIgdGh7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxle2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnR7Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxke2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjEyNTtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZC13cmFwcGVye3BhZGRpbmctYm90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbiwubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbntmb250LXNpemU6MTUwJTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbi1idXR0b24sLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb24tYnV0dG9ue2hlaWdodDoxLjVlbTt3aWR0aDoxLjVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29uLC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29uLWJ1dHRvbiAubWF0LWljb257aGVpZ2h0OjEuMTI1ZW07bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLWluZml4e3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgdHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVye3RvcDotMC44NDM3NWVtO3BhZGRpbmctdG9wOi44NDM3NWVtfS5tYXQtZm9ybS1maWVsZC1sYWJlbHt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7Ym90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJ7Zm9udC1zaXplOjc1JTttYXJnaW4tdG9wOi42NjY2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNzkxNjY2NjY2N2VtKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJ7cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtaW5maXh7cGFkZGluZzouNDM3NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbDotd2Via2l0LWF1dG9maWxsKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcltsYWJlbF06bm90KDpsYWJlbC1zaG93bikrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIzZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RvcDoxLjI4MTI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7Ym90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVye21hcmdpbi10b3A6LjU0MTY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2NjY2NjY3ZW0pfUBtZWRpYSBwcmludHsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcjpmb2N1cysubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjJlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbDotd2Via2l0LWF1dG9maWxsKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMWVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMmVtKSBzY2FsZSgwLjc1KX19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtaW5maXh7cGFkZGluZzouMjVlbSAwIC43NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtbGFiZWx7dG9wOjEuMDkzNzVlbTttYXJnaW4tdG9wOi0wLjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtaW5maXh7cGFkZGluZzoxZW0gMCAxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0b3A6MS44NDM3NWVtO21hcmdpbi10b3A6LTAuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyLC5tYXQtZ3JpZC10aWxlLWZvb3Rlcntmb250LXNpemU6MTRweH0ubWF0LWdyaWQtdGlsZS1oZWFkZXIgLm1hdC1saW5lLC5tYXQtZ3JpZC10aWxlLWZvb3RlciAubWF0LWxpbmV7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtZ3JpZC10aWxlLWhlYWRlciAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMiksLm1hdC1ncmlkLXRpbGUtZm9vdGVyIC5tYXQtbGluZTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH1pbnB1dC5tYXQtaW5wdXQtZWxlbWVudHttYXJnaW4tdG9wOi0wLjA2MjVlbX0ubWF0LW1lbnUtaXRlbXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtcGFnaW5hdG9yLC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZSAubWF0LXNlbGVjdC10cmlnZ2Vye2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweH0ubWF0LXJhZGlvLWJ1dHRvbntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3R7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJ7aGVpZ2h0OjEuMTI1ZW19Lm1hdC1zbGlkZS10b2dnbGUtY29udGVudHtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dHtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci12ZXJ0aWNhbCwubWF0LXN0ZXBwZXItaG9yaXpvbnRhbHtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVse2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXN0ZXAtc3ViLWxhYmVsLWVycm9ye2ZvbnQtd2VpZ2h0Om5vcm1hbH0ubWF0LXN0ZXAtbGFiZWwtZXJyb3J7Zm9udC1zaXplOjE0cHh9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVke2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRhYi1ncm91cHtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWwsLm1hdC10YWItbGlua3tmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdG9vbGJhciwubWF0LXRvb2xiYXIgaDEsLm1hdC10b29sYmFyIGgyLC5tYXQtdG9vbGJhciBoMywubWF0LXRvb2xiYXIgaDQsLm1hdC10b29sYmFyIGg1LC5tYXQtdG9vbGJhciBoNntmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MH0ubWF0LXRvb2x0aXB7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB4O3BhZGRpbmctdG9wOjZweDtwYWRkaW5nLWJvdHRvbTo2cHh9Lm1hdC10b29sdGlwLWhhbmRzZXR7Zm9udC1zaXplOjE0cHg7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LWxpc3QtaXRlbXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LWl0ZW17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LWl0ZW0gLm1hdC1saW5le3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZSAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LW9wdGlvbntmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGluZXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2UgLm1hdC1zdWJoZWFkZXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWxpc3QtYmFzZVtkZW5zZV0gLm1hdC1saXN0LWl0ZW17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGluZXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGluZTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbntmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmV7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGluZTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV0gLm1hdC1zdWJoZWFkZXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE2cHh9Lm1hdC1vcHRncm91cC1sYWJlbHtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LXNpbXBsZS1zbmFja2Jhcntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9ue2xpbmUtaGVpZ2h0OjE7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo1MDB9Lm1hdC10cmVle2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRyZWUtbm9kZSwubWF0LW5lc3RlZC10cmVlLW5vZGV7Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4fS5tYXQtcmlwcGxle292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXJpcHBsZTpub3QoOmVtcHR5KXt0cmFuc2Zvcm06dHJhbnNsYXRlWigwKX0ubWF0LXJpcHBsZS5tYXQtcmlwcGxlLXVuYm91bmRlZHtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcmlwcGxlLWVsZW1lbnR7cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXJpcHBsZS1lbGVtZW50e2Rpc3BsYXk6bm9uZX0uY2RrLXZpc3VhbGx5LWhpZGRlbntib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lfS5jZGstb3ZlcmxheS1jb250YWluZXIsLmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVye3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7bGVmdDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmNkay1vdmVybGF5LWNvbnRhaW5lcntwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcjplbXB0eXtkaXNwbGF5Om5vbmV9LmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVye2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LXBhbmV7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9we3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO3otaW5kZXg6MTAwMDtwb2ludGVyLWV2ZW50czphdXRvOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDt0cmFuc2l0aW9uOm9wYWNpdHkgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSk7b3BhY2l0eTowfS5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5ne29wYWNpdHk6MX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5ne29wYWNpdHk6LjZ9LmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3B7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4zMil9LmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wLC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5ne29wYWNpdHk6MH0uY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveHtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2Nre3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHsvKiEqL31Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZHsvKiEqL30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkOm5vdCg6LXdlYmtpdC1hdXRvZmlsbCl7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCAwcyAxbXN9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXple3Jlc2l6ZTpub25lfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmd7cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveHtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDowICFpbXBvcnRhbnR9Lm1hdC1mb2N1cy1pbmRpY2F0b3J7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9ye3Bvc2l0aW9uOnJlbGF0aXZlfTpob3N0e3BhZGRpbmctdG9wOjVweH0uYW5ub3RhdGlvbi10aXRsZXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZvbnQtc2l6ZToxM3B4O2hlaWdodDoyMHB4O3BhZGRpbmc6MCAxMHB4O3VzZXItc2VsZWN0Om5vbmV9LnNlbGVjdGVkLXJvd3tiYWNrZ3JvdW5kLWNvbG9yOiNlMGUwZTA7ZGlzcGxheTpibG9ja30uZmxhZ2dlZC1hbm5vdGF0aW9ue2NvbG9yOiNmNTdjMDB9LmhpZGRlbi1hbm5vdGF0aW9ue2NvbG9yOiM3NTc1NzV9LmFubm90YXRpb24tY2hlY2tib3h7cGFkZGluZy1yaWdodDo1cHh9LmZsYWdnZWQtaWNvbnt0cmFuc2Zvcm06c2NhbGUoMC42KX0uaGlkZGVuLWljb257dHJhbnNmb3JtOnNjYWxlKDAuNil9LmFubm90YXRpb24taWNvbnt0cmFuc2Zvcm06c2NhbGUoMC42KX0uY2hhcnQtZGl2e2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWJ9LmNoYXJ0LXN2Z3t3aWR0aDoxMDAlO3VzZXItc2VsZWN0Om5vbmV9LmRlZmF1bHQtdGV4dHtmaWxsOiMwMDB9LmZsYWctdGV4dHtmaWxsOiNmNTdjMDB9LmhpZGRlbi10ZXh0e2ZpbGw6Izc1NzU3NX0uY2xpY2thYmxlLWFubm90YXRpb257Y3Vyc29yOnBvaW50ZXJ9YnV0dG9ue2FsbDp1bnNldH1cbiddLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoeV90LFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6ImFubm90YXRpb24tY29tcG9uZW50Iix0ZW1wbGF0ZVVybDoiLi9hbm5vdGF0aW9uX2NvbXBvbmVudC5uZy5odG1sIixzdHlsZVVybHM6WyIuL2Fubm90YXRpb25fY29tcG9uZW50LmNzcyJdLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2gsZW5jYXBzdWxhdGlvbjpQby5Ob25lfV19XSxudWxsLHtkYXRhOlt7dHlwZTp5X31dLG1heENvdW50Olt7dHlwZTp5X31dLHNlbGVjdGVkQW5ub3RhdGlvbnM6W3t0eXBlOnlffV0sZmxhZ2dlZEFubm90YXRpb25zOlt7dHlwZTp5X31dLGhpZGRlbkFubm90YXRpb25zOlt7dHlwZTp5X31dLGFjdGl2ZU1ldHJpY3M6W3t0eXBlOnlffV0sbnVtQWN0aXZlUnVuczpbe3R5cGU6eV99XSxzaG93Q291bnRzOlt7dHlwZTp5X31dLGFubm90YXRpb246W3t0eXBlOnlffV0scnVuSGVpZ2h0Olt7dHlwZTp5X31dLGhhc0VtYmVkZGluZzpbe3R5cGU6eV99XSxzb3J0Olt7dHlwZTp5X31dLHNpZGViYXJXaWR0aDpbe3R5cGU6eV99XSxjb2xvclNjYWxlOlt7dHlwZTp5X31dLHJ1bklkVG9SdW5zOlt7dHlwZTp5X31dLGFubm90YXRpb25Db250YWluZXI6W3t0eXBlOkZyLGFyZ3M6WyJjaGFydCIse3N0YXRpYzohMCxyZWFkOmNofV19XSxjbGlwUGF0aEVsZW1lbnQ6W3t0eXBlOkZyLGFyZ3M6WyJoaW50Q2xpcCIse3N0YXRpYzohMCxyZWFkOmNofV19XSxzZWxlY3RlZDpbe3R5cGU6Q18sYXJnczpbImNsYXNzLnNlbGVjdGVkLXJvdyJdfV0sb25SZXNpemU6W3t0eXBlOk1fLGFyZ3M6WyJ3aW5kb3c6cmVzaXplIl19XSxvblNob3dTaW1pbGFyQW5ub3RhdGlvbnM6W3t0eXBlOl9ffV19KTtjbGFzcyBfX3R7Y29uc3RydWN0b3IodCl7dGhpcy5zdG9yZT10LHRoaXMuc29ydCQ9dGhpcy5zdG9yZS5zZWxlY3QoZWJ0KSx0aGlzLmZsYWdnZWRBbm5vdGF0aW9ucyQ9dGhpcy5zdG9yZS5zZWxlY3QoWGh0KSx0aGlzLmhpZGRlbkFubm90YXRpb25zJD10aGlzLnN0b3JlLnNlbGVjdChLaHQpLHRoaXMuc2VsZWN0ZWRBbm5vdGF0aW9ucyQ9dGhpcy5zdG9yZS5zZWxlY3QoWmh0KSx0aGlzLnNob3dDb3VudHMkPXRoaXMuc3RvcmUuc2VsZWN0KGFidCksdGhpcy5zaWRlYmFyV2lkdGgkPXRoaXMuc3RvcmUuc2VsZWN0KGxidCksdGhpcy5ydW5Db2xvclNjYWxlJD10aGlzLnN0b3JlLnNlbGVjdChDTikucGlwZShodCgodD0+ZT0+e2lmKCF0Lmhhc093blByb3BlcnR5KGUpKXRocm93IG5ldyBFcnJvcihgW0NvbG9yIHNjYWxlXSB1bmtub3duIHJ1bklkOiAke2V9LmApO3JldHVybiB0W2VdfSkpKSx0aGlzLnJ1bklkVG9SdW5zJD10aGlzLnN0b3JlLnNlbGVjdChwTil9c2hvd1NpbWlsYXJBbm5vdGF0aW9ucygpe3RoaXMuc3RvcmUuZGlzcGF0Y2goa2J0KHthbm5vdGF0aW9uOnRoaXMuYW5ub3RhdGlvbn0pKX19ZnVuY3Rpb24gQ190KHQsZSl7aWYoMSZ0KXtjb25zdCB0PUV1KCk7T3UoMCwibnBtaS1hbm5vdGF0aW9uIiw1KSxOdSgiY2xpY2siLChmdW5jdGlvbiBuKG8pe3JhKHQpO2NvbnN0IGk9ZS4kaW1wbGljaXQ7cmV0dXJuIEx1KDIpLnJvd0NsaWNrZWQobyxpKX0pKSxQdSgpfWlmKDImdCl7Y29uc3QgdD1lLiRpbXBsaWNpdCxuPUx1KDIpO3Z1KCJkYXRhIixuLmFubm90YXRpb25zW3RdKSgiYWN0aXZlTWV0cmljcyIsbi5hY3RpdmVNZXRyaWNzKSgibnVtQWN0aXZlUnVucyIsbi5udW1BY3RpdmVSdW5zKSgibWF4Q291bnQiLG4ubWF4Q291bnQpKCJhbm5vdGF0aW9uIix0KSgicnVuSGVpZ2h0IixuLnJ1bkhlaWdodCkoImhhc0VtYmVkZGluZyIsbi5lbWJlZGRpbmdEYXRhJiZ2b2lkIDAhPT1uLmVtYmVkZGluZ0RhdGFbdF0pfX1mdW5jdGlvbiBNX3QodCxlKXtpZigxJnQmJihrdSgwKSx3dSgxLCJucG1pLWFubm90YXRpb25zLWxpc3QtbGVnZW5kIiksd3UoMiwibnBtaS1hbm5vdGF0aW9ucy1saXN0LWhlYWRlciIsMiksT3UoMywiY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0IiwzKSxXbSg0LENfdCwxLDcsIm5wbWktYW5ub3RhdGlvbiIsNCksUHUoKSxTdSgpKSwyJnQpe2NvbnN0IHQ9THUoKTtKYygyKSx2dSgiYW5ub3RhdGlvbnMiLHQuYW5ub3RhdGlvbnMpKCJudW1Bbm5vdGF0aW9ucyIsdC5udW1Bbm5vdGF0aW9ucykoImFjdGl2ZU1ldHJpY3MiLHQuYWN0aXZlTWV0cmljcyksSmMoMSksVXUoIml0ZW1TaXplIix0Lm51bUFjdGl2ZVJ1bnMqdC5ydW5IZWlnaHQrMjUpLEpjKDEpLHZ1KCJjZGtWaXJ0dWFsRm9yT2YiLHQuc29ydGVkQW5ub3RhdGlvbnMpfX1fX3QuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fF9fdCkoTXUoRWspKX0sX190Lsm1Y21wPVVvKHt0eXBlOl9fdCxzZWxlY3RvcnM6W1sibnBtaS1hbm5vdGF0aW9uIl1dLGlucHV0czp7ZGF0YToiZGF0YSIsbWF4Q291bnQ6Im1heENvdW50IixhY3RpdmVNZXRyaWNzOiJhY3RpdmVNZXRyaWNzIixudW1BY3RpdmVSdW5zOiJudW1BY3RpdmVSdW5zIixhbm5vdGF0aW9uOiJhbm5vdGF0aW9uIixydW5IZWlnaHQ6InJ1bkhlaWdodCIsaGFzRW1iZWRkaW5nOiJoYXNFbWJlZGRpbmcifSxkZWNsczo5LHZhcnM6MzEsY29uc3RzOltbMywiZGF0YSIsIm1heENvdW50IiwiYWN0aXZlTWV0cmljcyIsIm51bUFjdGl2ZVJ1bnMiLCJhbm5vdGF0aW9uIiwicnVuSGVpZ2h0IiwiaGFzRW1iZWRkaW5nIiwic29ydCIsInNlbGVjdGVkQW5ub3RhdGlvbnMiLCJmbGFnZ2VkQW5ub3RhdGlvbnMiLCJoaWRkZW5Bbm5vdGF0aW9ucyIsInNob3dDb3VudHMiLCJzaWRlYmFyV2lkdGgiLCJjb2xvclNjYWxlIiwicnVuSWRUb1J1bnMiLCJvblNob3dTaW1pbGFyQW5ub3RhdGlvbnMiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKE91KDAsImFubm90YXRpb24tY29tcG9uZW50IiwwKSxOdSgib25TaG93U2ltaWxhckFubm90YXRpb25zIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLnNob3dTaW1pbGFyQW5ub3RhdGlvbnMoKX0pKSxPYigxLCJhc3luYyIpLE9iKDIsImFzeW5jIiksT2IoMywiYXN5bmMiKSxPYig0LCJhc3luYyIpLE9iKDUsImFzeW5jIiksT2IoNiwiYXN5bmMiKSxPYig3LCJhc3luYyIpLE9iKDgsImFzeW5jIiksUHUoKSksMiZlJiZ2dSgiZGF0YSIsbi5kYXRhKSgibWF4Q291bnQiLG4ubWF4Q291bnQpKCJhY3RpdmVNZXRyaWNzIixuLmFjdGl2ZU1ldHJpY3MpKCJudW1BY3RpdmVSdW5zIixuLm51bUFjdGl2ZVJ1bnMpKCJhbm5vdGF0aW9uIixuLmFubm90YXRpb24pKCJydW5IZWlnaHQiLG4ucnVuSGVpZ2h0KSgiaGFzRW1iZWRkaW5nIixuLmhhc0VtYmVkZGluZykoInNvcnQiLFBiKDEsMTUsbi5zb3J0JCkpKCJzZWxlY3RlZEFubm90YXRpb25zIixQYigyLDE3LG4uc2VsZWN0ZWRBbm5vdGF0aW9ucyQpKSgiZmxhZ2dlZEFubm90YXRpb25zIixQYigzLDE5LG4uZmxhZ2dlZEFubm90YXRpb25zJCkpKCJoaWRkZW5Bbm5vdGF0aW9ucyIsUGIoNCwyMSxuLmhpZGRlbkFubm90YXRpb25zJCkpKCJzaG93Q291bnRzIixQYig1LDIzLG4uc2hvd0NvdW50cyQpKSgic2lkZWJhcldpZHRoIixQYig2LDI1LG4uc2lkZWJhcldpZHRoJCkpKCJjb2xvclNjYWxlIixQYig3LDI3LG4ucnVuQ29sb3JTY2FsZSQpKSgicnVuSWRUb1J1bnMiLFBiKDgsMjksbi5ydW5JZFRvUnVucyQpKX0sZGlyZWN0aXZlczpbeV90XSxwaXBlczpbTXZdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoX190LFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6Im5wbWktYW5ub3RhdGlvbiIsdGVtcGxhdGU6J1xuICAgIDxhbm5vdGF0aW9uLWNvbXBvbmVudFxuICAgICAgW2RhdGFdPSJkYXRhIlxuICAgICAgW21heENvdW50XT0ibWF4Q291bnQiXG4gICAgICBbYWN0aXZlTWV0cmljc109ImFjdGl2ZU1ldHJpY3MiXG4gICAgICBbbnVtQWN0aXZlUnVuc109Im51bUFjdGl2ZVJ1bnMiXG4gICAgICBbYW5ub3RhdGlvbl09ImFubm90YXRpb24iXG4gICAgICBbcnVuSGVpZ2h0XT0icnVuSGVpZ2h0IlxuICAgICAgW2hhc0VtYmVkZGluZ109Imhhc0VtYmVkZGluZyJcbiAgICAgIFtzb3J0XT0ic29ydCQgfCBhc3luYyJcbiAgICAgIFtzZWxlY3RlZEFubm90YXRpb25zXT0ic2VsZWN0ZWRBbm5vdGF0aW9ucyQgfCBhc3luYyJcbiAgICAgIFtmbGFnZ2VkQW5ub3RhdGlvbnNdPSJmbGFnZ2VkQW5ub3RhdGlvbnMkIHwgYXN5bmMiXG4gICAgICBbaGlkZGVuQW5ub3RhdGlvbnNdPSJoaWRkZW5Bbm5vdGF0aW9ucyQgfCBhc3luYyJcbiAgICAgIFtzaG93Q291bnRzXT0ic2hvd0NvdW50cyQgfCBhc3luYyJcbiAgICAgIFtzaWRlYmFyV2lkdGhdPSJzaWRlYmFyV2lkdGgkIHwgYXN5bmMiXG4gICAgICBbY29sb3JTY2FsZV09InJ1bkNvbG9yU2NhbGUkIHwgYXN5bmMiXG4gICAgICBbcnVuSWRUb1J1bnNdPSJydW5JZFRvUnVucyQgfCBhc3luYyJcbiAgICAgIChvblNob3dTaW1pbGFyQW5ub3RhdGlvbnMpPSJzaG93U2ltaWxhckFubm90YXRpb25zKCkiXG4gICAgPjwvYW5ub3RhdGlvbi1jb21wb25lbnQ+XG4gICcsY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkVrfV19KSx7ZGF0YTpbe3R5cGU6eV99XSxtYXhDb3VudDpbe3R5cGU6eV99XSxhY3RpdmVNZXRyaWNzOlt7dHlwZTp5X31dLG51bUFjdGl2ZVJ1bnM6W3t0eXBlOnlffV0sYW5ub3RhdGlvbjpbe3R5cGU6eV99XSxydW5IZWlnaHQ6W3t0eXBlOnlffV0saGFzRW1iZWRkaW5nOlt7dHlwZTp5X31dfSk7Y2xhc3Mgdl90e2NvbnN0cnVjdG9yKCl7dGhpcy5vblJvd0NsaWNrPW5ldyBBYix0aGlzLnJ1bkhlaWdodD0zMH1yb3dDbGlja2VkKHQsZSl7aWYodC5zaGlmdEtleSl7bGV0IHQ9dGhpcy5zb3J0ZWRBbm5vdGF0aW9ucy5pbmRleE9mKGUpO2lmKDA9PT10aGlzLnNlbGVjdGVkQW5ub3RhdGlvbnMubGVuZ3RoKXRoaXMub25Sb3dDbGljay5lbWl0KHRoaXMuc29ydGVkQW5ub3RhdGlvbnMuc2xpY2UoMCx0KzEpKTtlbHNle2NvbnN0IGU9dGhpcy5zb3J0ZWRBbm5vdGF0aW9ucy5pbmRleE9mKHRoaXMuc2VsZWN0ZWRBbm5vdGF0aW9uc1t0aGlzLnNlbGVjdGVkQW5ub3RhdGlvbnMubGVuZ3RoLTFdKTt0aGlzLm9uUm93Q2xpY2suZW1pdChlPHQ/dGhpcy5zb3J0ZWRBbm5vdGF0aW9ucy5zbGljZShlLHQrMSk6dGhpcy5zb3J0ZWRBbm5vdGF0aW9ucy5zbGljZSh0LGUrMSkpfX1lbHNlIHRoaXMub25Sb3dDbGljay5lbWl0KFtlXSl9fXZfdC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8dl90KX0sdl90Lsm1Y21wPVVvKHt0eXBlOnZfdCxzZWxlY3RvcnM6W1siYW5ub3RhdGlvbnMtbGlzdC1jb21wb25lbnQiXV0saW5wdXRzOnthbm5vdGF0aW9uczoiYW5ub3RhdGlvbnMiLGVtYmVkZGluZ0RhdGE6ImVtYmVkZGluZ0RhdGEiLGFubm90YXRpb25zRXhwYW5kZWQ6ImFubm90YXRpb25zRXhwYW5kZWQiLG51bUFubm90YXRpb25zOiJudW1Bbm5vdGF0aW9ucyIsYW5ub3RhdGlvblNvcnQ6ImFubm90YXRpb25Tb3J0IixhY3RpdmVNZXRyaWNzOiJhY3RpdmVNZXRyaWNzIixudW1BY3RpdmVSdW5zOiJudW1BY3RpdmVSdW5zIixzb3J0ZWRBbm5vdGF0aW9uczoic29ydGVkQW5ub3RhdGlvbnMiLHNlbGVjdGVkQW5ub3RhdGlvbnM6InNlbGVjdGVkQW5ub3RhdGlvbnMiLG1heENvdW50OiJtYXhDb3VudCJ9LG91dHB1dHM6e29uUm93Q2xpY2s6Im9uUm93Q2xpY2sifSxkZWNsczoyLHZhcnM6Myxjb25zdHM6W1szLCJudW1Bbm5vdGF0aW9ucyIsImV4cGFuZGVkIl0sWzQsIm5nSWYiXSxbMywiYW5ub3RhdGlvbnMiLCJudW1Bbm5vdGF0aW9ucyIsImFjdGl2ZU1ldHJpY3MiXSxbIm1pbkJ1ZmZlclB4IiwiMzAwIiwibWF4QnVmZmVyUHgiLCI2MDAiLDEsImFubm90YXRpb24tcm93cyIsMywiaXRlbVNpemUiXSxbMywiZGF0YSIsImFjdGl2ZU1ldHJpY3MiLCJudW1BY3RpdmVSdW5zIiwibWF4Q291bnQiLCJhbm5vdGF0aW9uIiwicnVuSGVpZ2h0IiwiaGFzRW1iZWRkaW5nIiwiY2xpY2siLDQsImNka1ZpcnR1YWxGb3IiLCJjZGtWaXJ0dWFsRm9yT2YiXSxbMywiZGF0YSIsImFjdGl2ZU1ldHJpY3MiLCJudW1BY3RpdmVSdW5zIiwibWF4Q291bnQiLCJhbm5vdGF0aW9uIiwicnVuSGVpZ2h0IiwiaGFzRW1iZWRkaW5nIiwiY2xpY2siXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKHd1KDAsIm5wbWktYW5ub3RhdGlvbnMtbGlzdC10b29sYmFyIiwwKSxXbSgxLE1fdCw1LDUsIm5nLWNvbnRhaW5lciIsMSkpLDImZSYmKHZ1KCJudW1Bbm5vdGF0aW9ucyIsbi5udW1Bbm5vdGF0aW9ucykoImV4cGFuZGVkIixuLmFubm90YXRpb25zRXhwYW5kZWQpLEpjKDEpLHZ1KCJuZ0lmIixuLmFubm90YXRpb25zRXhwYW5kZWQpKX0sZGlyZWN0aXZlczpbYV90LGF2LGxfdCxtX3QsdEYsWEgsbkYsX190XSxzdHlsZXM6WycubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1iYWRnZS1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo5cHh9Lm1hdC1iYWRnZS1sYXJnZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4fS5tYXQtaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWhlYWRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAyNHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE1cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjgzKS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1oNltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC42NykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtYm9keS1zdHJvbmdbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MCAwIDEycHh9Lm1hdC1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FwdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTJweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6MzAwIDExMnB4LzExMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wNWVtO21hcmdpbjowIDAgNTZweH0ubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNTZweC81NnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMmVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNDVweC80OHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMDVlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDM0cHgvNDBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1yYWlzZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3Ryb2tlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZsYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mYWJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW1pbmktZmFiW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtYnV0dG9uLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FyZC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjBweH0ubWF0LWNhcmQtc3VidGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hlY2tib3gtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC10cmFpbGluZy1pY29uLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC1yZW1vdmUubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxOHB4fS5tYXQtdGFibGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWhlYWRlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb290ZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jYWxlbmRhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FsZW5kYXItYm9keVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYWxlbmRhci1wZXJpb2QtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWRpYWxvZy10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTI1O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTUwJTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjVlbTt3aWR0aDoxLjVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW07bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41ZW0gMDtib3JkZXItdG9wOi44NDM3NWVtIHNvbGlkIHRyYW5zcGFyZW50fS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3RvcDotMC44NDM3NWVtO3BhZGRpbmctdG9wOi44NDM3NWVtfS5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjc1JTttYXJnaW4tdG9wOi42NjY2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNzkxNjY2NjY2N2VtKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAycHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyM2VtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzUzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi41NDE2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNjY2NjY2NjY2N2VtKX1AbWVkaWEgcHJpbnR7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIyZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIxZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMmVtKSBzY2FsZSgwLjc1KX19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjI1ZW0gMCAuNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4wOTM3NWVtO21hcmdpbi10b3A6LTAuNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MWVtIDAgMWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjg0Mzc1ZW07bWFyZ2luLXRvcDotMC4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH1pbnB1dC5tYXQtaW5wdXQtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDotMC4wNjI1ZW19Lm1hdC1tZW51LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1wYWdpbmF0b3JbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXBhZ2luYXRvci1wYWdlLXNpemVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3RbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXN0ZXBwZXItdmVydGljYWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc3RlcC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0Om5vcm1hbH0ubWF0LXN0ZXAtbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRhYi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjB9Lm1hdC10b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTZweH0ubWF0LW9wdGdyb3VwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LXNpbXBsZS1zbmFja2Jhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbltfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRyZWVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbmVzdGVkLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4fS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVdOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtcmlwcGxlLm1hdC1yaXBwbGUtdW5ib3VuZGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6NTAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7dHJhbnNmb3JtOnNjYWxlKDApfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpub25lfS5jZGstdmlzdWFsbHktaGlkZGVuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7bGVmdDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmVtcHR5e2Rpc3BsYXk6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LXBhbmVbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOmF1dG87Ym94LXNpemluZzpib3JkZXItYm94O3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7bWF4LXdpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlfS5jZGstb3ZlcmxheS1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKTtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5Oi42fS5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjMyKX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTowfS5jZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO292ZXJmbG93LXk6c2Nyb2xsfUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnR7fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5ke30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxse2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCAwcyAxbXN9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06bm90KDotd2Via2l0LWF1dG9maWxsKXthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIDBzIDFtc310ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemVbX25nY29udGVudC0lQ09NUCVde3Jlc2l6ZTpub25lfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmdbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OmF1dG8gIWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW4gIWltcG9ydGFudH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nLWZpcmVmb3hbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OjAgIWltcG9ydGFudH0ubWF0LWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX1bX25naG9zdC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNlYmViZWI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtoZWlnaHQ6Y2FsYygxMDAlIC0gMnB4KTt3aWR0aDpjYWxjKDEwMCUgLSAycHgpfS5hbm5vdGF0aW9uLXJvd3NbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleDoxIDE7b3ZlcmZsb3cteTphdXRvfSddLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYih2X3QsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoiYW5ub3RhdGlvbnMtbGlzdC1jb21wb25lbnQiLHRlbXBsYXRlVXJsOiIuL2Fubm90YXRpb25zX2xpc3RfY29tcG9uZW50Lm5nLmh0bWwiLHN0eWxlVXJsczpbIi4vYW5ub3RhdGlvbnNfbGlzdF9jb21wb25lbnQuY3NzIl0sY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sbnVsbCx7YW5ub3RhdGlvbnM6W3t0eXBlOnlffV0sZW1iZWRkaW5nRGF0YTpbe3R5cGU6eV99XSxhbm5vdGF0aW9uc0V4cGFuZGVkOlt7dHlwZTp5X31dLG51bUFubm90YXRpb25zOlt7dHlwZTp5X31dLGFubm90YXRpb25Tb3J0Olt7dHlwZTp5X31dLGFjdGl2ZU1ldHJpY3M6W3t0eXBlOnlffV0sbnVtQWN0aXZlUnVuczpbe3R5cGU6eV99XSxzb3J0ZWRBbm5vdGF0aW9uczpbe3R5cGU6eV99XSxzZWxlY3RlZEFubm90YXRpb25zOlt7dHlwZTp5X31dLG1heENvdW50Olt7dHlwZTp5X31dLG9uUm93Q2xpY2s6W3t0eXBlOl9ffV19KTtjbGFzcyB4X3R7Y29uc3RydWN0b3IodCl7dGhpcy5zdG9yZT10LHRoaXMuYW5ub3RhdGlvbnNFeHBhbmRlZCQ9dGhpcy5zdG9yZS5waXBlKFJrKG9idCkpLHRoaXMuYWN0aXZlUnVucyQ9dGhpcy5zdG9yZS5waXBlKFJrKHZOKSkucGlwZShodCgodD0+dD9BcnJheS5mcm9tKHQuZW50cmllcygpKS5maWx0ZXIoKHQ9PnRbMV0pKS5tYXAoKHQ9PnRbMF0pKTpbXSkpKSx0aGlzLmVtYmVkZGluZ0RhdGEkPXRoaXMuc3RvcmUucGlwZShSayhxaHQpKSx0aGlzLm51bUFjdGl2ZVJ1bnMkPXRoaXMuYWN0aXZlUnVucyQucGlwZShodCgodD0+dC5sZW5ndGgpKSksdGhpcy5hY3RpdmVNZXRyaWNzJD1EdChbdGhpcy5zdG9yZS5zZWxlY3QoWWh0KSx0aGlzLmFjdGl2ZVJ1bnMkLHRoaXMuc3RvcmUuc2VsZWN0KHRidCldKS5waXBlKGh0KCgoW3QsZSxuXSk9PntsZXQgbz1bXTtmb3IoY29uc3QgbiBvZiBlKXRbbl0mJihvPW8uY29uY2F0KHRbbl0uZmlsdGVyKCh0PT5CYnQodCkpKSkpO3JldHVybiBvPVsuLi5uZXcgU2V0KFsuLi5PYmplY3Qua2V5cyhuKSwuLi5vXSldLG99KSkpLHRoaXMudmlzaWJsZUFubm90YXRpb25zJD1EdChbdGhpcy5zdG9yZS5zZWxlY3QoR2h0KSx0aGlzLnN0b3JlLnNlbGVjdChLaHQpLHRoaXMuc3RvcmUuc2VsZWN0KHJidCldKS5waXBlKGh0KCgoW3QsZSxuXSk9PkR5dCh0LGUsbikpKSksdGhpcy5maWx0ZXJlZEFubm90YXRpb25zJD1EdChbdGhpcy52aXNpYmxlQW5ub3RhdGlvbnMkLHRoaXMuc3RvcmUuc2VsZWN0KCRodCksdGhpcy5zdG9yZS5zZWxlY3QodGJ0KSx0aGlzLmFjdGl2ZVJ1bnMkLHRoaXMuYWN0aXZlTWV0cmljcyQsdGhpcy5zdG9yZS5zZWxlY3QoSmh0KV0pLnBpcGUoaHQoKChbdCxlLG4sbyxpLGFdKT0+KGZ1bmN0aW9uIHIodCxlLG4sbyxpLGEpe2NvbnN0IHI9e30scz1uZXcgU2V0KGUpLGw9bmV3IFNldChpLm1hcCgodD0+VmJ0KHQpKSkpLGM9bmV3IFJlZ0V4cChhLCJpIik7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHQpLmZvckVhY2goKHQ9PntpZighYy50ZXN0KHRbMF0pKXJldHVybjtsZXQgZT10WzFdO2U9ZS5maWx0ZXIoKHQ9PnMuaGFzKHQucnVuKSYmbC5oYXModC5tZXRyaWMpKSksKGZ1bmN0aW9uIGkodCxlLG4pe3JldHVybiB0LmV2ZXJ5KCh0PT57aWYodC5raW5kPT09TGh0Lk9QRVJBVE9SKXJldHVybiEwO2NvbnN0IG89ZVt0Lm1ldHJpY107cmV0dXJuIHZvaWQgMD09PW98fG4uc29tZSgoZT0+ZS5tZXRyaWM9PT1WYnQodC5tZXRyaWMpJiYobnVsbD09PWUublBNSVZhbHVlP28uaW5jbHVkZU5hTjplLm5QTUlWYWx1ZTw9by5tYXgmJmUublBNSVZhbHVlPj1vLm1pbikpKX0pKX0pKG4sbyxlKSYmMCE9PWUubGVuZ3RoJiYoclt0WzBdXT1lKX0pKSxyfSkodCxvLGUsbixpLGEpKSkpLnBpcGUob24oKSksdGhpcy5udW1Bbm5vdGF0aW9ucyQ9dGhpcy5maWx0ZXJlZEFubm90YXRpb25zJC5waXBlKGh0KCh0PT5PYmplY3Qua2V5cyh0KS5sZW5ndGgpKSksdGhpcy5zb3J0ZWRBbm5vdGF0aW9ucyQ9RHQoW3RoaXMuZmlsdGVyZWRBbm5vdGF0aW9ucyQsdGhpcy5zdG9yZS5waXBlKFJrKGVidCkpLHRoaXMuZW1iZWRkaW5nRGF0YSRdKS5waXBlKGh0KCgoW3QsZSxuXSk9PihmdW5jdGlvbiBvKHQsZSxuKXtjb25zdCBvPU9iamVjdC5rZXlzKHQpLGk9ZS5vcmRlcj09PVZodC5ESVNTSU1JTEFSfHxlLm9yZGVyPT09Vmh0LlNJTUlMQVI7cmV0dXJuIiI9PT1lLm1ldHJpY3x8KHZvaWQgMD09PW58fHZvaWQgMD09PW4ucG9pbnRzW2UubWV0cmljXSkmJmk/bzooZnVuY3Rpb24gcyh0LGUsbil7cmV0dXJuIHQuc29ydChuPyh0LG4pPT5lW3RdLWVbbl06KHQsbik9PmVbbl0tZVt0XSl9KShvLGk/KGZ1bmN0aW9uIGEodCxlLG4pe2NvbnN0IG89e307bGV0IGk9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLGE9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO24ub3JkZXI9PT1WaHQuU0lNSUxBUiYmKGk9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLGE9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKTtmb3IoY29uc3QgciBvZiB0KW9bcl09cj09PW4ubWV0cmljP2k6dm9pZCAwPT09ZS5wb2ludHNbcl0/YTplLnBvaW50c1tyXS52ZWN0b3I/SHl0KGUucG9pbnRzW24ubWV0cmljXS52ZWN0b3IsZS5wb2ludHNbcl0udmVjdG9yLGEpOmE7cmV0dXJuIG99KShvLG4sZSk6KGZ1bmN0aW9uIHIodCxlLG4pe2NvbnN0IG89VmJ0KG4ubWV0cmljKSxpPXt9O2lmKG4ub3JkZXI9PT1WaHQuREVTQ0VORElORylmb3IoY29uc3QgbiBvZiB0KWlbbl09TWF0aC5tYXgoLi4uZVtuXS5maWx0ZXIoKHQ9PnQubWV0cmljPT09bykpLm1hcCgodD0+bnVsbD09PXQublBNSVZhbHVlPy0xLzA6dC5uUE1JVmFsdWUpKSk7ZWxzZSBmb3IoY29uc3QgbiBvZiB0KWlbbl09TWF0aC5taW4oLi4uZVtuXS5maWx0ZXIoKHQ9PnQubWV0cmljPT09bykpLm1hcCgodD0+bnVsbD09PXQublBNSVZhbHVlPzEvMDp0Lm5QTUlWYWx1ZSkpKTtyZXR1cm4gaX0pKG8sdCxlKSxlLm9yZGVyPT09Vmh0LkFTQ0VORE5HfHxlLm9yZGVyPT09Vmh0LlNJTUlMQVIpfSkodCxlLG4pKSkpLHRoaXMuc2VsZWN0ZWRBbm5vdGF0aW9ucyQ9dGhpcy5zdG9yZS5waXBlKFJrKFpodCkpLHRoaXMubWF4Q291bnQkPXRoaXMuZmlsdGVyZWRBbm5vdGF0aW9ucyQucGlwZShodCgodD0+e2xldCBlPTA7cmV0dXJuIE9iamVjdC52YWx1ZXModCkuZm9yRWFjaCgodD0+e3QuZm9yRWFjaCgodD0+e3QuY291bnRWYWx1ZSYmKGU9TWF0aC5tYXgoZSx0LmNvdW50VmFsdWUpKX0pKX0pKSxlfSkpKX1yb3dDbGlja2VkKHQpe3RoaXMuc3RvcmUuZGlzcGF0Y2goaGJ0KHthbm5vdGF0aW9uczp0fSkpfX14X3QuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHhfdCkoTXUoRWspKX0seF90Lsm1Y21wPVVvKHt0eXBlOnhfdCxzZWxlY3RvcnM6W1sibnBtaS1hbm5vdGF0aW9ucy1saXN0Il1dLGRlY2xzOjEwLHZhcnM6MjcsY29uc3RzOltbMywiYW5ub3RhdGlvbnMiLCJlbWJlZGRpbmdEYXRhIiwiYW5ub3RhdGlvbnNFeHBhbmRlZCIsIm51bUFubm90YXRpb25zIiwiYWN0aXZlTWV0cmljcyIsIm51bUFjdGl2ZVJ1bnMiLCJzb3J0ZWRBbm5vdGF0aW9ucyIsInNlbGVjdGVkQW5ub3RhdGlvbnMiLCJtYXhDb3VudCIsIm9uUm93Q2xpY2siXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKE91KDAsImFubm90YXRpb25zLWxpc3QtY29tcG9uZW50IiwwKSxOdSgib25Sb3dDbGljayIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ucm93Q2xpY2tlZChlKX0pKSxPYigxLCJhc3luYyIpLE9iKDIsImFzeW5jIiksT2IoMywiYXN5bmMiKSxPYig0LCJhc3luYyIpLE9iKDUsImFzeW5jIiksT2IoNiwiYXN5bmMiKSxPYig3LCJhc3luYyIpLE9iKDgsImFzeW5jIiksT2IoOSwiYXN5bmMiKSxQdSgpKSwyJmUmJnZ1KCJhbm5vdGF0aW9ucyIsUGIoMSw5LG4uZmlsdGVyZWRBbm5vdGF0aW9ucyQpKSgiZW1iZWRkaW5nRGF0YSIsUGIoMiwxMSxuLmVtYmVkZGluZ0RhdGEkKSkoImFubm90YXRpb25zRXhwYW5kZWQiLFBiKDMsMTMsbi5hbm5vdGF0aW9uc0V4cGFuZGVkJCkpKCJudW1Bbm5vdGF0aW9ucyIsUGIoNCwxNSxuLm51bUFubm90YXRpb25zJCkpKCJhY3RpdmVNZXRyaWNzIixQYig1LDE3LG4uYWN0aXZlTWV0cmljcyQpKSgibnVtQWN0aXZlUnVucyIsUGIoNiwxOSxuLm51bUFjdGl2ZVJ1bnMkKSkoInNvcnRlZEFubm90YXRpb25zIixQYig3LDIxLG4uc29ydGVkQW5ub3RhdGlvbnMkKSkoInNlbGVjdGVkQW5ub3RhdGlvbnMiLFBiKDgsMjMsbi5zZWxlY3RlZEFubm90YXRpb25zJCkpKCJtYXhDb3VudCIsUGIoOSwyNSxuLm1heENvdW50JCkpfSxkaXJlY3RpdmVzOlt2X3RdLHBpcGVzOltNdl0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYih4X3QsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoibnBtaS1hbm5vdGF0aW9ucy1saXN0Iix0ZW1wbGF0ZTonXG4gICAgPGFubm90YXRpb25zLWxpc3QtY29tcG9uZW50XG4gICAgICBbYW5ub3RhdGlvbnNdPSJmaWx0ZXJlZEFubm90YXRpb25zJCB8IGFzeW5jIlxuICAgICAgW2VtYmVkZGluZ0RhdGFdPSJlbWJlZGRpbmdEYXRhJCB8IGFzeW5jIlxuICAgICAgW2Fubm90YXRpb25zRXhwYW5kZWRdPSJhbm5vdGF0aW9uc0V4cGFuZGVkJCB8IGFzeW5jIlxuICAgICAgW251bUFubm90YXRpb25zXT0ibnVtQW5ub3RhdGlvbnMkIHwgYXN5bmMiXG4gICAgICBbYWN0aXZlTWV0cmljc109ImFjdGl2ZU1ldHJpY3MkIHwgYXN5bmMiXG4gICAgICBbbnVtQWN0aXZlUnVuc109Im51bUFjdGl2ZVJ1bnMkIHwgYXN5bmMiXG4gICAgICBbc29ydGVkQW5ub3RhdGlvbnNdPSJzb3J0ZWRBbm5vdGF0aW9ucyQgfCBhc3luYyJcbiAgICAgIFtzZWxlY3RlZEFubm90YXRpb25zXT0ic2VsZWN0ZWRBbm5vdGF0aW9ucyQgfCBhc3luYyJcbiAgICAgIFttYXhDb3VudF09Im1heENvdW50JCB8IGFzeW5jIlxuICAgICAgKG9uUm93Q2xpY2spPSJyb3dDbGlja2VkKCRldmVudCkiXG4gICAgPjwvYW5ub3RhdGlvbnMtbGlzdC1jb21wb25lbnQ+XG4gICcsY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkVrfV19KSxudWxsKTtjb25zdCBPX3Q9WyJjaGFydCJdO2NsYXNzIFBfdHtjb25zdHJ1Y3Rvcigpe3RoaXMud2lkdGg9MCx0aGlzLmNoYXJ0V2lkdGg9MCx0aGlzLmhlaWdodD0zMDAsdGhpcy5tYXJnaW49e3RvcDoyMCxyaWdodDo0MCxib3R0b206MjAsbGVmdDo0MH0sdGhpcy5jaGFydEhlaWdodD10aGlzLmhlaWdodC10aGlzLm1hcmdpbi50b3AtdGhpcy5tYXJnaW4uYm90dG9tfW9uUmVzaXplKHQpe3RoaXMucmVkcmF3KCl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5zdmc9cjYodGhpcy5zdmdFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpLHRoaXMubWFpbkNvbnRhaW5lcj10aGlzLnN2Zy5hcHBlbmQoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHt0aGlzLm1hcmdpbi5sZWZ0fSwgJHt0aGlzLm1hcmdpbi50b3B9KWApLHRoaXMuY29vcmRpbmF0ZXNHcm91cD10aGlzLm1haW5Db250YWluZXIuYXBwZW5kKCJnIiksdGhpcy5sYWJlbHNHcm91cD10aGlzLm1haW5Db250YWluZXIuYXBwZW5kKCJnIiksdGhpcy5heGlzR3JvdXA9dGhpcy5tYWluQ29udGFpbmVyLmFwcGVuZCgiZyIpLHRoaXMueFNjYWxlPVF0dCgpLnBhZGRpbmcoLjEpLHRoaXMueVNjYWxlPXBldCgpLnJhbmdlKFt0aGlzLmNoYXJ0SGVpZ2h0LDBdKSx0aGlzLnlBeGlzPVU1KHRoaXMueVNjYWxlKSx0aGlzLnJlZHJhdygpfW5nT25DaGFuZ2VzKHQpe3RoaXMuc3ZnJiZ0aGlzLnJlZHJhdygpfXJlZHJhdygpe3RoaXMudXBkYXRlRGltZW5zaW9ucygpLHRoaXMudXBkYXRlQXhlcygpLHRoaXMuZHJhdygpfXVwZGF0ZURpbWVuc2lvbnMoKXt0aGlzLndpZHRoPXRoaXMuc3ZnRWxlbWVudC5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRofHwxMCx0aGlzLmNoYXJ0V2lkdGg9dGhpcy53aWR0aC10aGlzLm1hcmdpbi5sZWZ0LXRoaXMubWFyZ2luLnJpZ2h0fXVwZGF0ZUF4ZXMoKXt0aGlzLnhTY2FsZS5yYW5nZVJvdW5kKFswLHRoaXMuY2hhcnRXaWR0aF0pLmRvbWFpbih0aGlzLmFjdGl2ZU1ldHJpY3MpLHRoaXMueVNjYWxlLmRvbWFpbihbdGhpcy5jb29yZGluYXRlRGF0YS5leHRyZW1lcy5taW4sdGhpcy5jb29yZGluYXRlRGF0YS5leHRyZW1lcy5tYXhdKX1kcmF3KCl7dGhpcy5kcmF3QXhlcygpLHRoaXMuZHJhd0F4aXNMYWJlbHMoKSx0aGlzLmRyYXdDb29yZGluYXRlcygpLHRoaXMuZHJhd0xhYmVscygpfWRyYXdBeGVzKCl7Y29uc3QgdD10aGlzLmF4aXNHcm91cC5zZWxlY3RBbGwoIi5heGlzLXkiKS5kYXRhKHRoaXMuYWN0aXZlTWV0cmljcyk7dC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiYXhpcy15IikubWVyZ2UodCkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih0KXtyZXR1cm5gdHJhbnNsYXRlKCR7dGhpcy54U2NhbGUodCl9LCAwKWB9LmJpbmQodGhpcykpLmNhbGwodGhpcy55QXhpcyksdC5leGl0KCkucmVtb3ZlKCl9ZHJhd0F4aXNMYWJlbHMoKXtjb25zdCB0PXRoaXMuYXhpc0dyb3VwLnNlbGVjdEFsbCgiLmF4aXMtYmctdGV4dCIpLmRhdGEodGhpcy5hY3RpdmVNZXRyaWNzKTt0LmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJheGlzLWJnLXRleHQiKS5hdHRyKCJmb250LXNpemUiLCIxM3B4IikuYXR0cigic3Ryb2tlLXdpZHRoIiwyKS5hdHRyKCJzdHJva2UtbGluZWpvaW4iLCJyb3VuZCIpLmF0dHIoInN0cm9rZSIsIndoaXRlIikubWVyZ2UodCkudGV4dCgodD0+dCkpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7cmV0dXJuYHRyYW5zbGF0ZSgke3RoaXMueFNjYWxlKHQpLTV9LCAke3RoaXMueVNjYWxlKHRoaXMuY29vcmRpbmF0ZURhdGEuZXh0cmVtZXMubWluKX0pIHJvdGF0ZSgtOTApYH0uYmluZCh0aGlzKSksdC5leGl0KCkucmVtb3ZlKCk7Y29uc3QgZT10aGlzLmF4aXNHcm91cC5zZWxlY3RBbGwoIi5heGlzLXRleHQiKS5kYXRhKHRoaXMuYWN0aXZlTWV0cmljcyk7ZS5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmF0dHIoImZvbnQtc2l6ZSIsIjEzcHgiKS5hdHRyKCJjbGFzcyIsImF4aXMtdGV4dCIpLm1lcmdlKGUpLnRleHQoKHQ9PnQpKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQpe3JldHVybmB0cmFuc2xhdGUoJHt0aGlzLnhTY2FsZSh0KS01fSwgJHt0aGlzLnlTY2FsZSh0aGlzLmNvb3JkaW5hdGVEYXRhLmV4dHJlbWVzLm1pbil9KSByb3RhdGUoLTkwKWB9LmJpbmQodGhpcykpLGUuZXhpdCgpLnJlbW92ZSgpfWRyYXdDb29yZGluYXRlcygpe2NvbnN0IHQ9dGhpcy5jb29yZGluYXRlc0dyb3VwLnNlbGVjdEFsbCgiLmNvb3JkIikuZGF0YSh0aGlzLmNvb3JkaW5hdGVEYXRhLmNvb3JkaW5hdGVzKTt0LmVudGVyKCkuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJjb29yZCIpLmF0dHIoImZpbGwiLCJub25lIikubWVyZ2UodCkuYXR0cigiZCIsdGhpcy5wYXRoLmJpbmQodGhpcykpLmF0dHIoInN0cm9rZSIsZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY29sb3JTY2FsZSh0LnJ1bklkKX0uYmluZCh0aGlzKSksdC5leGl0KCkucmVtb3ZlKCk7Y29uc3QgZT10aGlzLmNvb3JkaW5hdGVzR3JvdXAuc2VsZWN0QWxsKCIuaGlkZGVuQ29vcmQiKS5kYXRhKHRoaXMuY29vcmRpbmF0ZURhdGEuY29vcmRpbmF0ZXMpO2UuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImhpZGRlbkNvb3JkIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMTBweCIpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigic3Ryb2tlIiwicmdiYSgwLCAwLCAwLCAwLjApIikub24oIm1vdXNlb3ZlciIsdGhpcy5oYW5kbGVDb29yZGluYXRlTW91c2VPdmVyLmJpbmQodGhpcykpLm9uKCJtb3VzZW91dCIsdGhpcy5oYW5kbGVDb29yZGluYXRlTW91c2VPdXQuYmluZCh0aGlzKSkubWVyZ2UoZSkuYXR0cigiZCIsdGhpcy5wYXRoLmJpbmQodGhpcykpLGUuZXhpdCgpLnJlbW92ZSgpfXBhdGgodCl7cmV0dXJuIHQudmFsdWVzLnNvcnQoKCh0LGUpPT50aGlzLmFjdGl2ZU1ldHJpY3MuaW5kZXhPZih0Lm1ldHJpYyktdGhpcy5hY3RpdmVNZXRyaWNzLmluZGV4T2YoZS5tZXRyaWMpKSksQW90KCkodC52YWx1ZXMubWFwKGZ1bmN0aW9uKHQpe2xldCBlPXRoaXMueVNjYWxlKHQublBNSVZhbHVlKTtyZXR1cm5bdGhpcy54U2NhbGUodC5tZXRyaWMpLGVdfS5iaW5kKHRoaXMpKSl9aGFuZGxlQ29vcmRpbmF0ZU1vdXNlT3Zlcih0LGUpe3RoaXMubGFiZWxzR3JvdXAuc2VsZWN0QWxsKCIuY29vcmRpbmF0ZS1sYWJlbCIpLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIShlLmFubm90YXRpb249PT10LmFubm90YXRpb24pfSkpLnN0eWxlKCJvcGFjaXR5IiwuMSksdGhpcy5jb29yZGluYXRlc0dyb3VwLnNlbGVjdEFsbCgiLmNvb3JkIikuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4hKGUuYW5ub3RhdGlvbj09PXQuYW5ub3RhdGlvbil9KSkuc3R5bGUoIm9wYWNpdHkiLC4xKX1oYW5kbGVDb29yZGluYXRlTW91c2VPdXQoKXt0aGlzLmxhYmVsc0dyb3VwLnNlbGVjdEFsbCgiLmNvb3JkaW5hdGUtbGFiZWwiKS5zdHlsZSgib3BhY2l0eSIsMSksdGhpcy5jb29yZGluYXRlc0dyb3VwLnNlbGVjdEFsbCgiLmNvb3JkIikuc3R5bGUoIm9wYWNpdHkiLDEpfWRyYXdMYWJlbHMoKXtjb25zdCB0PTMwL3RoaXMueFNjYWxlLnN0ZXAoKSxlPXRoaXMuY29vcmRpbmF0ZURhdGEuY29vcmRpbmF0ZXMubGVuZ3RoPDMwP3RoaXMuY29vcmRpbmF0ZURhdGEuY29vcmRpbmF0ZXM6W10sbj10aGlzLmxhYmVsc0dyb3VwLnNlbGVjdEFsbCgiLmNvb3JkaW5hdGUtbGFiZWwiKS5kYXRhKGUpO24uZW50ZXIoKS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsImNvb3JkaW5hdGUtbGFiZWwiKS5hdHRyKCJmb250LXNpemUiLCIxMHB4IikubWVyZ2UobikudGV4dCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuYW5ub3RhdGlvbn0pKS5hdHRyKCJ4Iix0aGlzLnhTY2FsZSh0aGlzLmFjdGl2ZU1ldHJpY3NbMF0pKzMwKS5hdHRyKCJ5IixmdW5jdGlvbihlKXtjb25zdCBuPXRoaXMueVNjYWxlKGUudmFsdWVzWzBdLm5QTUlWYWx1ZT9lLnZhbHVlc1swXS5uUE1JVmFsdWU6MCksbz10aGlzLnlTY2FsZShlLnZhbHVlc1sxXS5uUE1JVmFsdWU/ZS52YWx1ZXNbMV0ublBNSVZhbHVlOjApO3JldHVybigxLXQpKm4rdCpvfS5iaW5kKHRoaXMpKSxuLmV4aXQoKS5yZW1vdmUoKX19UF90Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxQX3QpfSxQX3QuybVjbXA9VW8oe3R5cGU6UF90LHNlbGVjdG9yczpbWyJwYXJhbGxlbC1jb29yZGluYXRlcy1jb21wb25lbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJldiKE9fdCwzLGNoKSwyJmUpe2xldCB0O1ViKHQ9WWIoKSkmJihuLnN2Z0VsZW1lbnQ9dC5maXJzdCl9fSxob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezEmZSYmTnUoInJlc2l6ZSIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25SZXNpemUoZSl9KSwhMSxxbCl9LGlucHV0czp7YWN0aXZlTWV0cmljczoiYWN0aXZlTWV0cmljcyIsY29vcmRpbmF0ZURhdGE6ImNvb3JkaW5hdGVEYXRhIixzaWRlYmFyV2lkdGg6InNpZGViYXJXaWR0aCIsY29sb3JTY2FsZToiY29sb3JTY2FsZSJ9LGZlYXR1cmVzOltTaV0sZGVjbHM6Mix2YXJzOjAsY29uc3RzOltbMSwicGMtY2hhcnQiXSxbImNoYXJ0IiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihIYSgpLHd1KDAsInN2ZyIsMCwxKSl9LHN0eWxlczpbIi5wYy1jaGFydFtfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjMwMHB4O3dpZHRoOjEwMCV9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFBfdCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJwYXJhbGxlbC1jb29yZGluYXRlcy1jb21wb25lbnQiLHRlbXBsYXRlVXJsOiIuL3BhcmFsbGVsX2Nvb3JkaW5hdGVzX2NvbXBvbmVudC5uZy5odG1sIixzdHlsZVVybHM6WyIuL3BhcmFsbGVsX2Nvb3JkaW5hdGVzX2NvbXBvbmVudC5jc3MiXSxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSxudWxsLHthY3RpdmVNZXRyaWNzOlt7dHlwZTp5X31dLGNvb3JkaW5hdGVEYXRhOlt7dHlwZTp5X31dLHNpZGViYXJXaWR0aDpbe3R5cGU6eV99XSxjb2xvclNjYWxlOlt7dHlwZTp5X31dLHN2Z0VsZW1lbnQ6W3t0eXBlOkZyLGFyZ3M6WyJjaGFydCIse3N0YXRpYzohMCxyZWFkOmNofV19XSxvblJlc2l6ZTpbe3R5cGU6TV8sYXJnczpbIndpbmRvdzpyZXNpemUiLFsiJGV2ZW50Il1dfV19KTtjbGFzcyB3X3R7Y29uc3RydWN0b3IodCl7dGhpcy5zdG9yZT10LHRoaXMuYWN0aXZlUnVucyQ9dGhpcy5zdG9yZS5waXBlKFJrKHZOKSkucGlwZShodCgodD0+dD9BcnJheS5mcm9tKHQuZW50cmllcygpKS5maWx0ZXIoKHQ9PnRbMV0pKS5tYXAoKHQ9PnRbMF0pKTpbXSkpKSx0aGlzLmFjdGl2ZU1ldHJpY3MkPUR0KHRoaXMuc3RvcmUuc2VsZWN0KFlodCksdGhpcy5hY3RpdmVSdW5zJCx0aGlzLnN0b3JlLnNlbGVjdCh0YnQpKS5waXBlKGh0KCgoW3QsZSxuXSk9PntsZXQgbz1bXTtmb3IoY29uc3QgbiBvZiBlKXRbbl0mJihvPW8uY29uY2F0KHRbbl0uZmlsdGVyKCh0PT5CYnQodCkpKSkpO3JldHVybiBvPVsuLi5uZXcgU2V0KFsuLi5PYmplY3Qua2V5cyhuKSwuLi5vXSldLG8ubWFwKCh0PT5WYnQodCkpKX0pKSksdGhpcy5jb29yZGluYXRlRGF0YSQ9RHQoW3RoaXMuc3RvcmUuc2VsZWN0KEdodCksdGhpcy5zdG9yZS5zZWxlY3QoWmh0KSx0aGlzLmFjdGl2ZVJ1bnMkLHRoaXMuYWN0aXZlTWV0cmljcyRdKS5waXBlKGh0KCgoW3QsZSxuLG9dKT0+KGZ1bmN0aW9uIGkodCxlLG4sbyl7Y29uc3QgaT1bXSxhPXttYXg6LTEsbWluOjF9LHI9bmV3IFNldChuKSxzPW5ldyBTZXQobyk7cmV0dXJuIDA9PT1yLnNpemV8fDA9PT1zLnNpemV8fDA9PT1PYmplY3Qua2V5cyh0KS5sZW5ndGg/e2Nvb3JkaW5hdGVzOltdLGV4dHJlbWVzOnttaW46LTEsbWF4OjF9fTooZS5mb3JFYWNoKChlPT57Y29uc3Qgbj17fTt0W2VdLmZvckVhY2goKHQ9PntyLmhhcyh0LnJ1bikmJnMuaGFzKHQubWV0cmljKSYmKG5bdC5ydW5dP25bdC5ydW5dLnB1c2godCk6blt0LnJ1bl09W3RdLG51bGwhPT10Lm5QTUlWYWx1ZT8oYS5tYXg9TWF0aC5tYXgoYS5tYXgsdC5uUE1JVmFsdWUpLGEubWluPU1hdGgubWluKGEubWluLHQublBNSVZhbHVlKSk6KGEubWF4PU1hdGgubWF4KGEubWF4LDApLGEubWluPU1hdGgubWluKGEubWluLDApKSl9KSk7Zm9yKGNvbnN0IHQgb2YgT2JqZWN0LmtleXMobikpaS5wdXNoKHthbm5vdGF0aW9uOmUscnVuSWQ6dCx2YWx1ZXM6blt0XX0pfSkpLGEubWF4PGEubWluJiYoYS5tYXg9MSxhLm1pbj0tMSkse2Nvb3JkaW5hdGVzOmksZXh0cmVtZXM6YX0pfSkodCxlLG4sbykpKSksdGhpcy5zaWRlYmFyV2lkdGgkPXRoaXMuc3RvcmUuc2VsZWN0KGxidCksdGhpcy5ydW5Db2xvclNjYWxlJD10aGlzLnN0b3JlLnNlbGVjdChDTikucGlwZShodCgodD0+ZT0+e2lmKCF0Lmhhc093blByb3BlcnR5KGUpKXRocm93IG5ldyBFcnJvcihgW0NvbG9yIHNjYWxlXSB1bmtub3duIHJ1bklkOiAke2V9LmApO3JldHVybiB0W2VdfSkpKX19ZnVuY3Rpb24ga190KHQsZSl7MSZ0JiZ3dSgwLCJtYXQtaWNvbiIsOSl9ZnVuY3Rpb24gU190KHQsZSl7MSZ0JiZ3dSgwLCJtYXQtaWNvbiIsMTApfWZ1bmN0aW9uIERfdCh0LGUpezEmdCYmd3UoMCwibnBtaS1wYXJhbGxlbC1jb29yZGluYXRlcyIpfXdfdC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8d190KShNdShFaykpfSx3X3QuybVjbXA9VW8oe3R5cGU6d190LHNlbGVjdG9yczpbWyJucG1pLXBhcmFsbGVsLWNvb3JkaW5hdGVzIl1dLGRlY2xzOjUsdmFyczoxMixjb25zdHM6W1szLCJhY3RpdmVNZXRyaWNzIiwiY29vcmRpbmF0ZURhdGEiLCJzaWRlYmFyV2lkdGgiLCJjb2xvclNjYWxlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJih3dSgwLCJwYXJhbGxlbC1jb29yZGluYXRlcy1jb21wb25lbnQiLDApLE9iKDEsImFzeW5jIiksT2IoMiwiYXN5bmMiKSxPYigzLCJhc3luYyIpLE9iKDQsImFzeW5jIikpLDImZSYmdnUoImFjdGl2ZU1ldHJpY3MiLFBiKDEsNCxuLmFjdGl2ZU1ldHJpY3MkKSkoImNvb3JkaW5hdGVEYXRhIixQYigyLDYsbi5jb29yZGluYXRlRGF0YSQpKSgic2lkZWJhcldpZHRoIixQYigzLDgsbi5zaWRlYmFyV2lkdGgkKSkoImNvbG9yU2NhbGUiLFBiKDQsMTAsbi5ydW5Db2xvclNjYWxlJCkpfSxkaXJlY3RpdmVzOltQX3RdLHBpcGVzOltNdl0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYih3X3QsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoibnBtaS1wYXJhbGxlbC1jb29yZGluYXRlcyIsdGVtcGxhdGU6J1xuICAgIDxwYXJhbGxlbC1jb29yZGluYXRlcy1jb21wb25lbnRcbiAgICAgIFthY3RpdmVNZXRyaWNzXT0iYWN0aXZlTWV0cmljcyQgfCBhc3luYyJcbiAgICAgIFtjb29yZGluYXRlRGF0YV09ImNvb3JkaW5hdGVEYXRhJCB8IGFzeW5jIlxuICAgICAgW3NpZGViYXJXaWR0aF09InNpZGViYXJXaWR0aCQgfCBhc3luYyJcbiAgICAgIFtjb2xvclNjYWxlXT0icnVuQ29sb3JTY2FsZSQgfCBhc3luYyJcbiAgICA+PC9wYXJhbGxlbC1jb29yZGluYXRlcy1jb21wb25lbnQ+XG4gICcsY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkVrfV19KSxudWxsKTtjbGFzcyBFX3R7Y29uc3RydWN0b3IoKXt0aGlzLm9uQ2xlYXJTZWxlY3RlZEFubm90YXRpb25zPW5ldyBBYix0aGlzLm9uVG9nZ2xlRXhwYW5kZWQ9bmV3IEFifX1FX3QuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEVfdCl9LEVfdC7JtWNtcD1Vbyh7dHlwZTpFX3Qsc2VsZWN0b3JzOltbInNlbGVjdGVkLWFubm90YXRpb25zLWNvbXBvbmVudCJdXSxpbnB1dHM6e3BjRXhwYW5kZWQ6InBjRXhwYW5kZWQiLHNlbGVjdGVkQW5ub3RhdGlvbnM6InNlbGVjdGVkQW5ub3RhdGlvbnMifSxvdXRwdXRzOntvbkNsZWFyU2VsZWN0ZWRBbm5vdGF0aW9uczoib25DbGVhclNlbGVjdGVkQW5ub3RhdGlvbnMiLG9uVG9nZ2xlRXhwYW5kZWQ6Im9uVG9nZ2xlRXhwYW5kZWQifSxkZWNsczoxMSx2YXJzOjQsY29uc3RzOmZ1bmN0aW9uKCl7bGV0IHQsZTtyZXR1cm4gdD0idW5kZWZpbmVkIiE9dHlwZW9mIG5nSTE4bkNsb3N1cmVNb2RlJiZuZ0kxOG5DbG9zdXJlTW9kZT9nb29nLmdldE1zZygiQ2xlYXIgQW5ub3RhdGlvbiBTZWxlY3Rpb24iKTokbG9jYWxpemVgOkxhYmVsIGZvciBhIGJ1dHRvbiB0aGF0IGNsZWFycyB0aGUgYW5ub3RhdGlvbiBzZWxlY3Rpb24u4pCfMmI1MjI4OWYyYzRiN2Y1YjE4MmVkMjNjOTE1NDcyMmVjZDQ2YTJkNOKQnzI0OTQ2NjA1MjAzNDEzMDg4MzA6Q2xlYXIgQW5ub3RhdGlvbiBTZWxlY3Rpb25gLGU9InVuZGVmaW5lZCIhPXR5cGVvZiBuZ0kxOG5DbG9zdXJlTW9kZSYmbmdJMThuQ2xvc3VyZU1vZGU/Z29vZy5nZXRNc2coIkV4cGFuZC9IaWRlIFNlbGVjdGVkIEFubm90YXRpb25zIik6JGxvY2FsaXplYDpMYWJlbCBmb3IgYSBidXR0b24gdGhhdCBleHBhbmRzIG9yIGhpZGVzIHNlbGVjdGVkIGFubm90YXRpb25zLuKQnzhmNGFkMzA1YzE5ZTM2NTVmMzE4OWUzZTI2NGU4M2ZiNzZmN2JiOTXikJ81NjcwNzk3Nzg0MDcwOTUyMDk1OkV4cGFuZC9IaWRlIFNlbGVjdGVkIEFubm90YXRpb25zYCxbWzEsInBjLWNvbnRhaW5lciJdLFsxLCJwYy10b29sYmFyIl0sWzEsInBjLXRpdGxlIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIix0LCJ0aXRsZSIsIkRlc2VsZWN0cyBhbGwgc2VsZWN0ZWQgYW5ub3RhdGlvbnMuIiwxLCJjbGVhci1idXR0b24iLDMsImRpc2FibGVkIiwiY2xpY2siXSxbInN2Z0ljb24iLCJjbGVhcl8yNHB4Il0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIixlLDEsImV4cGFuZC1idXR0b24iLDMsImNsaWNrIl0sWyJzdmdJY29uIiwiZXhwYW5kX2xlc3NfMjRweCIsImNsYXNzIiwiZXhwYW5kLWxlc3MtaWNvbiIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJub3RFeHBhbmRlZCIsIiJdLFs0LCJuZ0lmIl0sWyJzdmdJY29uIiwiZXhwYW5kX2xlc3NfMjRweCIsMSwiZXhwYW5kLWxlc3MtaWNvbiJdLFsic3ZnSWNvbiIsImV4cGFuZF9tb3JlXzI0cHgiLDEsImV4cGFuZC1pY29uIl1dfSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7aWYoMSZlJiYoT3UoMCwiZGl2IiwwKSxPdSgxLCJkaXYiLDEpLE91KDIsImgzIiwyKSxNZigzLCJTZWxlY3RlZCBBbm5vdGF0aW9ucyIpLFB1KCksT3UoNCwiYnV0dG9uIiwzKSxOdSgiY2xpY2siLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub25DbGVhclNlbGVjdGVkQW5ub3RhdGlvbnMuZW1pdCgpfSkpLHd1KDUsIm1hdC1pY29uIiw0KSxQdSgpLE91KDYsImJ1dHRvbiIsNSksTnUoImNsaWNrIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uVG9nZ2xlRXhwYW5kZWQuZW1pdCgpfSkpLFdtKDcsa190LDEsMCwibWF0LWljb24iLDYpLFdtKDgsU190LDEsMCwibmctdGVtcGxhdGUiLG51bGwsNyxLYiksUHUoKSxQdSgpLFdtKDEwLERfdCwxLDAsIm5wbWktcGFyYWxsZWwtY29vcmRpbmF0ZXMiLDgpLFB1KCkpLDImZSl7Y29uc3QgdD1HbSg5KTtKYyg0KSx2dSgiZGlzYWJsZWQiLDA9PT1uLnNlbGVjdGVkQW5ub3RhdGlvbnMubGVuZ3RoKSxKYygzKSx2dSgibmdJZiIsbi5wY0V4cGFuZGVkKSgibmdJZkVsc2UiLHQpLEpjKDMpLHZ1KCJuZ0lmIixuLnBjRXhwYW5kZWQpfX0sZGlyZWN0aXZlczpbTkgsY0csYXYsd190XSxzdHlsZXM6WycubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1iYWRnZS1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo5cHh9Lm1hdC1iYWRnZS1sYXJnZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4fS5tYXQtaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWhlYWRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAyNHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE1cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjgzKS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1oNltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC42NykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtYm9keS1zdHJvbmdbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MCAwIDEycHh9Lm1hdC1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FwdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTJweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6MzAwIDExMnB4LzExMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wNWVtO21hcmdpbjowIDAgNTZweH0ubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNTZweC81NnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMmVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNDVweC80OHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMDVlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDM0cHgvNDBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1yYWlzZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3Ryb2tlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZsYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mYWJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW1pbmktZmFiW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtYnV0dG9uLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FyZC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjBweH0ubWF0LWNhcmQtc3VidGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hlY2tib3gtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC10cmFpbGluZy1pY29uLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC1yZW1vdmUubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxOHB4fS5tYXQtdGFibGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWhlYWRlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb290ZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jYWxlbmRhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FsZW5kYXItYm9keVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYWxlbmRhci1wZXJpb2QtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWRpYWxvZy10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTI1O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTUwJTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjVlbTt3aWR0aDoxLjVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW07bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41ZW0gMDtib3JkZXItdG9wOi44NDM3NWVtIHNvbGlkIHRyYW5zcGFyZW50fS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3RvcDotMC44NDM3NWVtO3BhZGRpbmctdG9wOi44NDM3NWVtfS5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjc1JTttYXJnaW4tdG9wOi42NjY2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNzkxNjY2NjY2N2VtKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAycHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyM2VtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzUzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi41NDE2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNjY2NjY2NjY2N2VtKX1AbWVkaWEgcHJpbnR7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIyZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIxZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMmVtKSBzY2FsZSgwLjc1KX19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjI1ZW0gMCAuNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4wOTM3NWVtO21hcmdpbi10b3A6LTAuNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MWVtIDAgMWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjg0Mzc1ZW07bWFyZ2luLXRvcDotMC4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH1pbnB1dC5tYXQtaW5wdXQtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDotMC4wNjI1ZW19Lm1hdC1tZW51LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1wYWdpbmF0b3JbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXBhZ2luYXRvci1wYWdlLXNpemVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3RbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXN0ZXBwZXItdmVydGljYWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc3RlcC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0Om5vcm1hbH0ubWF0LXN0ZXAtbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRhYi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjB9Lm1hdC10b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTZweH0ubWF0LW9wdGdyb3VwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LXNpbXBsZS1zbmFja2Jhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbltfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRyZWVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbmVzdGVkLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4fS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVdOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtcmlwcGxlLm1hdC1yaXBwbGUtdW5ib3VuZGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6NTAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7dHJhbnNmb3JtOnNjYWxlKDApfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpub25lfS5jZGstdmlzdWFsbHktaGlkZGVuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7bGVmdDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmVtcHR5e2Rpc3BsYXk6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LXBhbmVbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOmF1dG87Ym94LXNpemluZzpib3JkZXItYm94O3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7bWF4LXdpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlfS5jZGstb3ZlcmxheS1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKTtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5Oi42fS5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjMyKX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTowfS5jZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO292ZXJmbG93LXk6c2Nyb2xsfUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnR7fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5ke30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxse2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCAwcyAxbXN9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06bm90KDotd2Via2l0LWF1dG9maWxsKXthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIDBzIDFtc310ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemVbX25nY29udGVudC0lQ09NUCVde3Jlc2l6ZTpub25lfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmdbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OmF1dG8gIWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW4gIWltcG9ydGFudH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nLWZpcmVmb3hbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OjAgIWltcG9ydGFudH0ubWF0LWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0ucGMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZWJlYmVifS5wYy10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWJlYjtkaXNwbGF5OmZsZXg7aGVpZ2h0OjQycHg7cGFkZGluZzowIDE2cHh9LnBjLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDA7ZGlzcGxheTppbmxpbmU7ZmxleDoxIDF9J10sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEVfdCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJzZWxlY3RlZC1hbm5vdGF0aW9ucy1jb21wb25lbnQiLHRlbXBsYXRlVXJsOiIuL3NlbGVjdGVkX2Fubm90YXRpb25zX2NvbXBvbmVudC5uZy5odG1sIixzdHlsZVVybHM6WyIuL3NlbGVjdGVkX2Fubm90YXRpb25zX2NvbXBvbmVudC5jc3MiXSxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSxudWxsLHtwY0V4cGFuZGVkOlt7dHlwZTp5X31dLHNlbGVjdGVkQW5ub3RhdGlvbnM6W3t0eXBlOnlffV0sb25DbGVhclNlbGVjdGVkQW5ub3RhdGlvbnM6W3t0eXBlOl9ffV0sb25Ub2dnbGVFeHBhbmRlZDpbe3R5cGU6X199XX0pO2NsYXNzIEFfdHtjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXQsdGhpcy5wY0V4cGFuZGVkJD10aGlzLnN0b3JlLnBpcGUoUmsobmJ0KSksdGhpcy5zZWxlY3RlZEFubm90YXRpb25zJD10aGlzLnN0b3JlLnNlbGVjdChaaHQpfWNsZWFyU2VsZWN0ZWRBbm5vdGF0aW9ucygpe3RoaXMuc3RvcmUuZGlzcGF0Y2goeWJ0KCkpfXRvZ2dsZUV4cGFuZGVkKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChTYnQoKSl9fWZ1bmN0aW9uIFJfdCh0LGUpezEmdCYmKE91KDAsImRpdiIsNiksT3UoMSwiZGl2Iiw3KSx3dSgyLCJucG1pLXZpb2xpbi1maWx0ZXJzIiw4KSxPdSgzLCJkaXYiLDkpLHd1KDQsInJ1bnMtc2VsZWN0b3IiKSxQdSgpLFB1KCksUHUoKSksMiZ0JiZvZigid2lkdGgiLEx1KCkuc2lkZWJhcldpZHRoLCJweCIpfWZ1bmN0aW9uIFRfdCh0LGUpe2lmKDEmdCl7Y29uc3QgdD1FdSgpO091KDAsImRpdiIsMTApLE51KCJtb3VzZWRvd24iLChmdW5jdGlvbiBlKCl7cmV0dXJuIHJhKHQpLEx1KCkucmVzaXplR3JhYmJlZC5lbWl0KCl9KSksUHUoKX19ZnVuY3Rpb24gTl90KHQsZSl7MSZ0JiYoT3UoMCwiZGl2IiwxMSksd3UoMSwibnBtaS1hbm5vdGF0aW9ucy1saXN0IiwxMiksd3UoMiwibnBtaS1zZWxlY3RlZC1hbm5vdGF0aW9ucyIpLFB1KCkpfWZ1bmN0aW9uIElfdCh0LGUpezEmdCYmKE91KDAsImRpdiIsMTMpLE1mKDEsIllvdSBuZWVkIHRvIHNlbGVjdCBhdCBsZWFzdCBvbmUgcnVuLiIpLFB1KCkpfWZ1bmN0aW9uIHpfdCh0LGUpe2lmKDEmdCl7Y29uc3QgdD1FdSgpO091KDAsImRpdiIsMTQpLE91KDEsImJ1dHRvbiIsMTUpLE51KCJjbGljayIsKGZ1bmN0aW9uIGUoKXtyZXR1cm4gcmEodCksTHUoKS50b2dnbGVTaWRlYmFyRXhwYW5kZWQuZW1pdCgpfSkpLHd1KDIsIm1hdC1pY29uIiwxNiksUHUoKSxQdSgpfX1BX3QuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEFfdCkoTXUoRWspKX0sQV90Lsm1Y21wPVVvKHt0eXBlOkFfdCxzZWxlY3RvcnM6W1sibnBtaS1zZWxlY3RlZC1hbm5vdGF0aW9ucyJdXSxkZWNsczozLHZhcnM6Nixjb25zdHM6W1szLCJwY0V4cGFuZGVkIiwic2VsZWN0ZWRBbm5vdGF0aW9ucyIsIm9uQ2xlYXJTZWxlY3RlZEFubm90YXRpb25zIiwib25Ub2dnbGVFeHBhbmRlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoT3UoMCwic2VsZWN0ZWQtYW5ub3RhdGlvbnMtY29tcG9uZW50IiwwKSxOdSgib25DbGVhclNlbGVjdGVkQW5ub3RhdGlvbnMiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uY2xlYXJTZWxlY3RlZEFubm90YXRpb25zKCl9KSkoIm9uVG9nZ2xlRXhwYW5kZWQiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4udG9nZ2xlRXhwYW5kZWQoKX0pKSxPYigxLCJhc3luYyIpLE9iKDIsImFzeW5jIiksUHUoKSksMiZlJiZ2dSgicGNFeHBhbmRlZCIsUGIoMSwyLG4ucGNFeHBhbmRlZCQpKSgic2VsZWN0ZWRBbm5vdGF0aW9ucyIsUGIoMiw0LG4uc2VsZWN0ZWRBbm5vdGF0aW9ucyQpKX0sZGlyZWN0aXZlczpbRV90XSxwaXBlczpbTXZdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoQV90LFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6Im5wbWktc2VsZWN0ZWQtYW5ub3RhdGlvbnMiLHRlbXBsYXRlOidcbiAgICA8c2VsZWN0ZWQtYW5ub3RhdGlvbnMtY29tcG9uZW50XG4gICAgICBbcGNFeHBhbmRlZF09InBjRXhwYW5kZWQkIHwgYXN5bmMiXG4gICAgICBbc2VsZWN0ZWRBbm5vdGF0aW9uc109InNlbGVjdGVkQW5ub3RhdGlvbnMkIHwgYXN5bmMiXG4gICAgICAob25DbGVhclNlbGVjdGVkQW5ub3RhdGlvbnMpPSJjbGVhclNlbGVjdGVkQW5ub3RhdGlvbnMoKSJcbiAgICAgIChvblRvZ2dsZUV4cGFuZGVkKT0idG9nZ2xlRXhwYW5kZWQoKSJcbiAgICA+PC9zZWxlY3RlZC1hbm5vdGF0aW9ucy1jb21wb25lbnQ+XG4gICcsY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkVrfV19KSxudWxsKTtjbGFzcyBIX3R7Y29uc3RydWN0b3IoKXt0aGlzLnRvZ2dsZVNpZGViYXJFeHBhbmRlZD1uZXcgQWIsdGhpcy5yZXNpemVUcmlnZ2VyZWQ9bmV3IEFiLHRoaXMucmVzaXplR3JhYmJlZD1uZXcgQWIsdGhpcy5yZXNpemVSZWxlYXNlZD1uZXcgQWJ9fUhfdC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8SF90KX0sSF90Lsm1Y21wPVVvKHt0eXBlOkhfdCxzZWxlY3RvcnM6W1sibWFpbi1jb21wb25lbnQiXV0saW5wdXRzOntydW5BY3RpdmU6InJ1bkFjdGl2ZSIsc2lkZWJhckV4cGFuZGVkOiJzaWRlYmFyRXhwYW5kZWQiLHNpZGViYXJXaWR0aDoic2lkZWJhcldpZHRoIn0sb3V0cHV0czp7dG9nZ2xlU2lkZWJhckV4cGFuZGVkOiJ0b2dnbGVTaWRlYmFyRXhwYW5kZWQiLHJlc2l6ZVRyaWdnZXJlZDoicmVzaXplVHJpZ2dlcmVkIixyZXNpemVHcmFiYmVkOiJyZXNpemVHcmFiYmVkIixyZXNpemVSZWxlYXNlZDoicmVzaXplUmVsZWFzZWQifSxkZWNsczo4LHZhcnM6NSxjb25zdHM6ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gdD0idW5kZWZpbmVkIiE9dHlwZW9mIG5nSTE4bkNsb3N1cmVNb2RlJiZuZ0kxOG5DbG9zdXJlTW9kZT9nb29nLmdldE1zZygiVG9nZ2xlIFNpZGViYXIiKTokbG9jYWxpemVgOkxhYmVsIGZvciBhIGJ1dHRvbiB0aGF0IHRvZ2dsZXMgdGhlIHNpZGViYXIu4pCfZjYzYjU3OTMyZDE3OWNjYTYyYWM5ZmNhZTYzZGQ3ZjVlNmZhMzg5ZuKQnzQ0ODUwMDkzNDc0NDQ3MDQ4Nzg6VG9nZ2xlIFNpZGViYXJgLFtbMSwiY29udGVudCIsMywibW91c2V1cCIsIm1vdXNlbW92ZSJdLFsiY2xhc3MiLCJzaWRlYmFyLWNvbnRhaW5lciIsMywid2lkdGgiLDQsIm5nSWYiXSxbImNsYXNzIiwiZ3JhYmJlciIsMywibW91c2Vkb3duIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImFuYWx5c2lzLWNvbnRhaW5lciIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJub1J1biIsIiJdLFsiY2xhc3MiLCJzaWRlLXRvZ2dsZSIsNCwibmdJZiJdLFsxLCJzaWRlYmFyLWNvbnRhaW5lciJdLFsxLCJzaWRlYmFyLWNvbnRlbnRzIl0sWzEsInZpb2xpbi1maWx0ZXJzIl0sWzEsInJ1bi1zZWxlY3RvciJdLFsxLCJncmFiYmVyIiwzLCJtb3VzZWRvd24iXSxbMSwiYW5hbHlzaXMtY29udGFpbmVyIl0sWzEsImFubm90YXRpb25zLWxpc3QiXSxbMSwibm9SdW4iXSxbMSwic2lkZS10b2dnbGUiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLHQsMywiY2xpY2siXSxbInN2Z0ljb24iLCJjaGV2cm9uX3JpZ2h0XzI0cHgiXV19LHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJih3dSgwLCJucG1pLWRhdGEtc2VsZWN0aW9uIiksT3UoMSwiZGl2IiwwKSxOdSgibW91c2V1cCIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5yZXNpemVSZWxlYXNlZC5lbWl0KCl9KSkoIm1vdXNlbW92ZSIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ucmVzaXplVHJpZ2dlcmVkLmVtaXQoZSl9KSksV20oMixSX3QsNSwyLCJkaXYiLDEpLFdtKDMsVF90LDEsMCwiZGl2IiwyKSxXbSg0LE5fdCwzLDAsImRpdiIsMyksV20oNSxJX3QsMiwwLCJuZy10ZW1wbGF0ZSIsbnVsbCw0LEtiKSxQdSgpLFdtKDcsel90LDMsMCwiZGl2Iiw1KSksMiZlKXtjb25zdCB0PUdtKDYpO0pjKDIpLHZ1KCJuZ0lmIixuLnNpZGViYXJFeHBhbmRlZCksSmMoMSksdnUoIm5nSWYiLG4uc2lkZWJhckV4cGFuZGVkKSxKYygxKSx2dSgibmdJZiIsITA9PT1uLnJ1bkFjdGl2ZSkoIm5nSWZFbHNlIix0KSxKYygzKSx2dSgibmdJZiIsIW4uc2lkZWJhckV4cGFuZGVkKX19LGRpcmVjdGl2ZXM6W1N5dCxhdix6eXQsQTIseF90LEFfdCxOSCxjR10sc3R5bGVzOlsnLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEycHg7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtYmFkZ2Utc21hbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6OXB4fS5tYXQtYmFkZ2UtbGFyZ2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweH0ubWF0LWgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1oZWFkbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMjRweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNnB4LzI4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNXB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC44MykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtaDZbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuNjcpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWJvZHktc3Ryb25nW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjAgMCAxMnB4fS5tYXQtc21hbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDEycHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjMwMCAxMTJweC8xMTJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDVlbTttYXJnaW46MCAwIDU2cHh9Lm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDU2cHgvNTZweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDJlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDQ1cHgvNDhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDA1ZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAzNHB4LzQwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDY0cHh9Lm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcmFpc2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0cm9rZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mbGF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmFiW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1taW5pLWZhYltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWJ1dHRvbi10b2dnbGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhcmQtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjIwcHh9Lm1hdC1jYXJkLXN1YnRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2hlY2tib3hbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNoZWNrYm94LWxheW91dFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoZWNrYm94LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoyNHB4fS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtdHJhaWxpbmctaWNvbi5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtcmVtb3ZlLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MThweH0ubWF0LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1oZWFkZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2VsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9vdGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2FsZW5kYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhbGVuZGFyLWJvZHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxM3B4fS5tYXQtY2FsZW5kYXItYm9keS1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FsZW5kYXItcGVyaW9kLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo0MDB9Lm1hdC1kaWFsb2ctdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjEyNTtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE1MCU7bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS41ZW07d2lkdGg6MS41ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNWVtIDA7Ym9yZGVyLXRvcDouODQzNzVlbSBzb2xpZCB0cmFuc3BhcmVudH0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6LTAuODQzNzVlbTtwYWRkaW5nLXRvcDouODQzNzVlbX0ubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo3NSU7bWFyZ2luLXRvcDouNjY2NjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjc5MTY2NjY2NjdlbSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNDM3NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMnB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjNlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM1MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjI4MTI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDouNTQxNjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjY2NjY2NjY2NjdlbSl9QG1lZGlhIHByaW50ey5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMmVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMWVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTJlbSkgc2NhbGUoMC43NSl9fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi4yNWVtIDAgLjc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMDkzNzVlbTttYXJnaW4tdG9wOi0wLjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjFlbSAwIDFlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS44NDM3NWVtO21hcmdpbi10b3A6LTAuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9aW5wdXQubWF0LWlucHV0LWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LTAuMDYyNWVtfS5tYXQtbWVudS1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtcGFnaW5hdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweH0ubWF0LXJhZGlvLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW19Lm1hdC1zbGlkZS10b2dnbGUtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdGVwcGVyLWhvcml6b250YWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXN0ZXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXN0ZXAtc3ViLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDpub3JtYWx9Lm1hdC1zdGVwLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LXN0ZXAtbGFiZWwtc2VsZWN0ZWRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRhYi1ncm91cFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdGFiLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10YWItbGlua1tfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowfS5tYXQtdG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB4O3BhZGRpbmctdG9wOjZweDtwYWRkaW5nLWJvdHRvbTo2cHh9Lm1hdC10b29sdGlwLWhhbmRzZXRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9Lm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE2cHh9Lm1hdC1vcHRncm91cC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1zaW1wbGUtc25hY2tiYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweH0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb25bX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjE7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo1MDB9Lm1hdC10cmVlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW5lc3RlZC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjQwMDtmb250LXNpemU6MTRweH0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmVtcHR5KXt0cmFuc2Zvcm06dHJhbnNsYXRlWigwKX0ubWF0LXJpcHBsZS5tYXQtcmlwcGxlLXVuYm91bmRlZFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItcmFkaXVzOjUwJTtwb2ludGVyLWV2ZW50czpub25lO3RyYW5zaXRpb246b3BhY2l0eSx0cmFuc2Zvcm0gMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpO3RyYW5zZm9ybTpzY2FsZSgwKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6bm9uZX0uY2RrLXZpc3VhbGx5LWhpZGRlbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjA7Y2xpcDpyZWN0KDAgMCAwIDApO2hlaWdodDoxcHg7bWFyZ2luOi0xcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwO291dGxpbmU6MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb2ludGVyLWV2ZW50czpub25lO3RvcDowO2xlZnQ6MDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTplbXB0eXtkaXNwbGF5Om5vbmV9LmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1wYW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czphdXRvO2JveC1zaXppbmc6Ym9yZGVyLWJveDt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O21heC13aWR0aDoxMDAlO21heC1oZWlnaHQ6MTAwJX0uY2RrLW92ZXJsYXktYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO3otaW5kZXg6MTAwMDtwb2ludGVyLWV2ZW50czphdXRvOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDt0cmFuc2l0aW9uOm9wYWNpdHkgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSk7b3BhY2l0eTowfS5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjF9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAuY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTouNn0uY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4zMil9LmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MH0uY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWluLXdpZHRoOjFweDttaW4taGVpZ2h0OjFweH0uY2RrLWdsb2JhbC1zY3JvbGxibG9ja1tfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7d2lkdGg6MTAwJTtvdmVyZmxvdy15OnNjcm9sbH1Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0e31Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZHt9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbHthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQgMHMgMW1zfS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOm5vdCg6LXdlYmtpdC1hdXRvZmlsbCl7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCAwcyAxbXN9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplW19uZ2NvbnRlbnQtJUNPTVAlXXtyZXNpemU6bm9uZX10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDphdXRvICFpbXBvcnRhbnQ7b3ZlcmZsb3c6aGlkZGVuICFpbXBvcnRhbnR9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZy1maXJlZm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDowICFpbXBvcnRhbnR9Lm1hdC1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtbWRjLWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9W19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2hlaWdodDoxMDAlfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleDoxO21pbi1oZWlnaHQ6MHB4O3dpZHRoOjEwMCV9LnNpZGViYXItY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59LnNpZGViYXItY29udGVudHNbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWluLXdpZHRoOjE1MHB4fS5hbmFseXNpcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47aGVpZ2h0OjEwMCU7ZmxleDoxIDF9LnJ1bi1zZWxlY3Rvcltfbmdjb250ZW50LSVDT01QJV17bWF4LWhlaWdodDoxMDAlO3dpZHRoOjEwMCV9LnZpb2xpbi1maWx0ZXJzW19uZ2NvbnRlbnQtJUNPTVAlXXttaW4taGVpZ2h0OjBweDt3aWR0aDoxMDAlfS5zaWRlLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MzBweDtoZWlnaHQ6MzBweDtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjEwcHg7Ym90dG9tOjEwcHg7Ym9yZGVyOjFweCBzb2xpZCAjZWJlYmViO2JvcmRlci1yYWRpdXM6M3B4O2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uZ3JhYmJlcltfbmdjb250ZW50LSVDT01QJV17Y29udGVudDoiIjtjdXJzb3I6ZXctcmVzaXplO2hlaWdodDoxMDAlO3dpZHRoOjNweDtvdmVyZmxvdzpoaWRkZW47YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9LmFubm90YXRpb25zLWxpc3RbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCU7bWluLWhlaWdodDowcHg7ZmxleDoxIDF9J10sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEhfdCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJtYWluLWNvbXBvbmVudCIsdGVtcGxhdGVVcmw6Ii4vbWFpbl9jb21wb25lbnQubmcuaHRtbCIsc3R5bGVVcmxzOlsiLi9tYWluX2NvbXBvbmVudC5jc3MiXSxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSxudWxsLHtydW5BY3RpdmU6W3t0eXBlOnlffV0sc2lkZWJhckV4cGFuZGVkOlt7dHlwZTp5X31dLHNpZGViYXJXaWR0aDpbe3R5cGU6eV99XSx0b2dnbGVTaWRlYmFyRXhwYW5kZWQ6W3t0eXBlOl9ffV0scmVzaXplVHJpZ2dlcmVkOlt7dHlwZTpfX31dLHJlc2l6ZUdyYWJiZWQ6W3t0eXBlOl9ffV0scmVzaXplUmVsZWFzZWQ6W3t0eXBlOl9ffV19KTtjbGFzcyBGX3R7Y29uc3RydWN0b3IodCl7dGhpcy5zdG9yZT10LHRoaXMucnVuQWN0aXZlJD10aGlzLnN0b3JlLnBpcGUoUmsodk4pKS5waXBlKGh0KCh0PT4hIXQmJlsuLi50LnZhbHVlcygpXS5pbmNsdWRlcyghMCkpKSksdGhpcy5zaWRlYmFyRXhwYW5kZWQkPXRoaXMuc3RvcmUucGlwZShSayhpYnQpKSx0aGlzLnNpZGViYXJXaWR0aCQ9dGhpcy5zdG9yZS5waXBlKFJrKGxidCkpLHRoaXMucmVzaXppbmc9ITF9b25Ub2dnbGVTaWRlYmFyRXhwYW5kZWQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKEVidCgpKX1vblJlc2l6ZVRyaWdnZXJlZCh0KXt0aGlzLnJlc2l6aW5nJiZ0aGlzLnN0b3JlLmRpc3BhdGNoKE5idCh7c2lkZWJhcldpZHRoOnQuY2xpZW50WH0pKX1vblJlc2l6ZUdyYWJiZWQoKXt0aGlzLnJlc2l6aW5nPSEwfW9uUmVzaXplUmVsZWFzZWQoKXt0aGlzLnJlc2l6aW5nPSExfX1mdW5jdGlvbiBMX3QodCxlKXsxJnQmJihPdSgwLCJkaXYiLDYpLE91KDEsImRpdiIsNyksT3UoMiwiZGl2Iiw4KSx3dSgzLCJydW5zLXNlbGVjdG9yIiksUHUoKSxQdSgpLFB1KCkpLDImdCYmb2YoIndpZHRoIixMdSgpLnNpZGViYXJXaWR0aCwicHgiKX1mdW5jdGlvbiBCX3QodCxlKXtpZigxJnQpe2NvbnN0IHQ9RXUoKTtPdSgwLCJkaXYiLDkpLE51KCJtb3VzZWRvd24iLChmdW5jdGlvbiBlKCl7cmV0dXJuIHJhKHQpLEx1KCkucmVzaXplR3JhYmJlZC5lbWl0KCl9KSksUHUoKX19ZnVuY3Rpb24gVl90KHQsZSl7MSZ0JiYoT3UoMCwiZGl2IiwxMCksd3UoMSwibnBtaS1hbm5vdGF0aW9ucy1saXN0IiwxMSksd3UoMiwibnBtaS1zZWxlY3RlZC1hbm5vdGF0aW9ucyIpLFB1KCkpfWZ1bmN0aW9uIGpfdCh0LGUpezEmdCYmKE91KDAsImRpdiIsMTIpLE1mKDEsIllvdSBuZWVkIHRvIHNlbGVjdCBhdCBsZWFzdCBvbmUgcnVuLiIpLFB1KCkpfWZ1bmN0aW9uIFVfdCh0LGUpe2lmKDEmdCl7Y29uc3QgdD1FdSgpO091KDAsImRpdiIsMTMpLE91KDEsImJ1dHRvbiIsMTQpLE51KCJjbGljayIsKGZ1bmN0aW9uIGUoKXtyZXR1cm4gcmEodCksTHUoKS50b2dnbGVTaWRlYmFyRXhwYW5kZWQuZW1pdCgpfSkpLHd1KDIsIm1hdC1pY29uIiwxNSksUHUoKSxQdSgpfX1GX3QuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEZfdCkoTXUoRWspKX0sRl90Lsm1Y21wPVVvKHt0eXBlOkZfdCxzZWxlY3RvcnM6W1sibnBtaS1tYWluIl1dLGRlY2xzOjQsdmFyczo5LGNvbnN0czpbWzMsInJ1bkFjdGl2ZSIsInNpZGViYXJFeHBhbmRlZCIsInNpZGViYXJXaWR0aCIsInRvZ2dsZVNpZGViYXJFeHBhbmRlZCIsInJlc2l6ZVRyaWdnZXJlZCIsInJlc2l6ZUdyYWJiZWQiLCJyZXNpemVSZWxlYXNlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoT3UoMCwibWFpbi1jb21wb25lbnQiLDApLE51KCJ0b2dnbGVTaWRlYmFyRXhwYW5kZWQiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub25Ub2dnbGVTaWRlYmFyRXhwYW5kZWQoKX0pKSgicmVzaXplVHJpZ2dlcmVkIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vblJlc2l6ZVRyaWdnZXJlZChlKX0pKSgicmVzaXplR3JhYmJlZCIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vblJlc2l6ZUdyYWJiZWQoKX0pKSgicmVzaXplUmVsZWFzZWQiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub25SZXNpemVSZWxlYXNlZCgpfSkpLE9iKDEsImFzeW5jIiksT2IoMiwiYXN5bmMiKSxPYigzLCJhc3luYyIpLFB1KCkpLDImZSYmdnUoInJ1bkFjdGl2ZSIsUGIoMSwzLG4ucnVuQWN0aXZlJCkpKCJzaWRlYmFyRXhwYW5kZWQiLFBiKDIsNSxuLnNpZGViYXJFeHBhbmRlZCQpKSgic2lkZWJhcldpZHRoIixQYigzLDcsbi5zaWRlYmFyV2lkdGgkKSl9LGRpcmVjdGl2ZXM6W0hfdF0scGlwZXM6W012XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEZfdCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJucG1pLW1haW4iLHRlbXBsYXRlOidcbiAgICA8bWFpbi1jb21wb25lbnRcbiAgICAgIFtydW5BY3RpdmVdPSJydW5BY3RpdmUkIHwgYXN5bmMiXG4gICAgICBbc2lkZWJhckV4cGFuZGVkXT0ic2lkZWJhckV4cGFuZGVkJCB8IGFzeW5jIlxuICAgICAgW3NpZGViYXJXaWR0aF09InNpZGViYXJXaWR0aCQgfCBhc3luYyJcbiAgICAgICh0b2dnbGVTaWRlYmFyRXhwYW5kZWQpPSJvblRvZ2dsZVNpZGViYXJFeHBhbmRlZCgpIlxuICAgICAgKHJlc2l6ZVRyaWdnZXJlZCk9Im9uUmVzaXplVHJpZ2dlcmVkKCRldmVudCkiXG4gICAgICAocmVzaXplR3JhYmJlZCk9Im9uUmVzaXplR3JhYmJlZCgpIlxuICAgICAgKHJlc2l6ZVJlbGVhc2VkKT0ib25SZXNpemVSZWxlYXNlZCgpIlxuICAgID48L21haW4tY29tcG9uZW50PlxuICAnLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2h9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpFa31dfSksbnVsbCk7Y2xhc3MgV190e2NvbnN0cnVjdG9yKCl7dGhpcy50b2dnbGVTaWRlYmFyRXhwYW5kZWQ9bmV3IEFiLHRoaXMucmVzaXplVHJpZ2dlcmVkPW5ldyBBYix0aGlzLnJlc2l6ZUdyYWJiZWQ9bmV3IEFiLHRoaXMucmVzaXplUmVsZWFzZWQ9bmV3IEFifX1XX3QuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFdfdCl9LFdfdC7JtWNtcD1Vbyh7dHlwZTpXX3Qsc2VsZWN0b3JzOltbImVtYmVkZGluZ3MtY29tcG9uZW50Il1dLGlucHV0czp7cnVuQWN0aXZlOiJydW5BY3RpdmUiLHNpZGViYXJFeHBhbmRlZDoic2lkZWJhckV4cGFuZGVkIixzaWRlYmFyV2lkdGg6InNpZGViYXJXaWR0aCJ9LG91dHB1dHM6e3RvZ2dsZVNpZGViYXJFeHBhbmRlZDoidG9nZ2xlU2lkZWJhckV4cGFuZGVkIixyZXNpemVUcmlnZ2VyZWQ6InJlc2l6ZVRyaWdnZXJlZCIscmVzaXplR3JhYmJlZDoicmVzaXplR3JhYmJlZCIscmVzaXplUmVsZWFzZWQ6InJlc2l6ZVJlbGVhc2VkIn0sZGVjbHM6OCx2YXJzOjUsY29uc3RzOmZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIHQ9InVuZGVmaW5lZCIhPXR5cGVvZiBuZ0kxOG5DbG9zdXJlTW9kZSYmbmdJMThuQ2xvc3VyZU1vZGU/Z29vZy5nZXRNc2coIlRvZ2dsZSBTaWRlYmFyIik6JGxvY2FsaXplYDpMYWJlbCBmb3IgYSBidXR0b24gdGhhdCB0b2dnbGVzIHRoZSBzaWRlYmFyLuKQn2Y2M2I1NzkzMmQxNzljY2E2MmFjOWZjYWU2M2RkN2Y1ZTZmYTM4OWbikJ80NDg1MDA5MzQ3NDQ0NzA0ODc4OlRvZ2dsZSBTaWRlYmFyYCxbWzEsImNvbnRlbnQiLDMsIm1vdXNldXAiLCJtb3VzZW1vdmUiXSxbImNsYXNzIiwic2lkZWJhci1jb250YWluZXIiLDMsIndpZHRoIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImdyYWJiZXIiLDMsIm1vdXNlZG93biIsNCwibmdJZiJdLFsiY2xhc3MiLCJhbmFseXNpcy1jb250YWluZXIiLDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsibm9SdW4iLCIiXSxbImNsYXNzIiwic2lkZS10b2dnbGUiLDQsIm5nSWYiXSxbMSwic2lkZWJhci1jb250YWluZXIiXSxbMSwic2lkZWJhci1jb250ZW50cyJdLFsxLCJydW4tc2VsZWN0b3IiXSxbMSwiZ3JhYmJlciIsMywibW91c2Vkb3duIl0sWzEsImFuYWx5c2lzLWNvbnRhaW5lciJdLFsxLCJhbm5vdGF0aW9ucy1saXN0Il0sWzEsIm5vUnVuIl0sWzEsInNpZGUtdG9nZ2xlIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIix0LDMsImNsaWNrIl0sWyJzdmdJY29uIiwiY2hldnJvbl9yaWdodF8yNHB4Il1dfSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7aWYoMSZlJiYod3UoMCwibnBtaS1kYXRhLXNlbGVjdGlvbiIpLE91KDEsImRpdiIsMCksTnUoIm1vdXNldXAiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ucmVzaXplUmVsZWFzZWQuZW1pdCgpfSkpKCJtb3VzZW1vdmUiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLnJlc2l6ZVRyaWdnZXJlZC5lbWl0KGUpfSkpLFdtKDIsTF90LDQsMiwiZGl2IiwxKSxXbSgzLEJfdCwxLDAsImRpdiIsMiksV20oNCxWX3QsMywwLCJkaXYiLDMpLFdtKDUsal90LDIsMCwibmctdGVtcGxhdGUiLG51bGwsNCxLYiksUHUoKSxXbSg3LFVfdCwzLDAsImRpdiIsNSkpLDImZSl7Y29uc3QgdD1HbSg2KTtKYygyKSx2dSgibmdJZiIsbi5zaWRlYmFyRXhwYW5kZWQpLEpjKDEpLHZ1KCJuZ0lmIixuLnNpZGViYXJFeHBhbmRlZCksSmMoMSksdnUoIm5nSWYiLCEwPT09bi5ydW5BY3RpdmUpKCJuZ0lmRWxzZSIsdCksSmMoMyksdnUoIm5nSWYiLCFuLnNpZGViYXJFeHBhbmRlZCl9fSxkaXJlY3RpdmVzOltTeXQsYXYsQTIseF90LEFfdCxOSCxjR10sc3R5bGVzOlsnLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEycHg7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtYmFkZ2Utc21hbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6OXB4fS5tYXQtYmFkZ2UtbGFyZ2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweH0ubWF0LWgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1oZWFkbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMjRweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNnB4LzI4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNXB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC44MykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtaDZbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuNjcpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWJvZHktc3Ryb25nW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjAgMCAxMnB4fS5tYXQtc21hbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDEycHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjMwMCAxMTJweC8xMTJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDVlbTttYXJnaW46MCAwIDU2cHh9Lm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDU2cHgvNTZweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDJlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDQ1cHgvNDhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDA1ZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAzNHB4LzQwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDY0cHh9Lm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcmFpc2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0cm9rZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mbGF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmFiW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1taW5pLWZhYltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWJ1dHRvbi10b2dnbGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhcmQtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjIwcHh9Lm1hdC1jYXJkLXN1YnRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2hlY2tib3hbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNoZWNrYm94LWxheW91dFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoZWNrYm94LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoyNHB4fS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtdHJhaWxpbmctaWNvbi5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtcmVtb3ZlLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MThweH0ubWF0LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1oZWFkZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2VsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9vdGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2FsZW5kYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhbGVuZGFyLWJvZHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxM3B4fS5tYXQtY2FsZW5kYXItYm9keS1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FsZW5kYXItcGVyaW9kLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo0MDB9Lm1hdC1kaWFsb2ctdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjEyNTtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE1MCU7bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS41ZW07d2lkdGg6MS41ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNWVtIDA7Ym9yZGVyLXRvcDouODQzNzVlbSBzb2xpZCB0cmFuc3BhcmVudH0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6LTAuODQzNzVlbTtwYWRkaW5nLXRvcDouODQzNzVlbX0ubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo3NSU7bWFyZ2luLXRvcDouNjY2NjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjc5MTY2NjY2NjdlbSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNDM3NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMnB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjNlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM1MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjI4MTI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDouNTQxNjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjY2NjY2NjY2NjdlbSl9QG1lZGlhIHByaW50ey5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMmVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMWVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTJlbSkgc2NhbGUoMC43NSl9fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi4yNWVtIDAgLjc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMDkzNzVlbTttYXJnaW4tdG9wOi0wLjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjFlbSAwIDFlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS44NDM3NWVtO21hcmdpbi10b3A6LTAuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9aW5wdXQubWF0LWlucHV0LWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LTAuMDYyNWVtfS5tYXQtbWVudS1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtcGFnaW5hdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweH0ubWF0LXJhZGlvLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW19Lm1hdC1zbGlkZS10b2dnbGUtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdGVwcGVyLWhvcml6b250YWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXN0ZXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXN0ZXAtc3ViLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDpub3JtYWx9Lm1hdC1zdGVwLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LXN0ZXAtbGFiZWwtc2VsZWN0ZWRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRhYi1ncm91cFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdGFiLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10YWItbGlua1tfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowfS5tYXQtdG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB4O3BhZGRpbmctdG9wOjZweDtwYWRkaW5nLWJvdHRvbTo2cHh9Lm1hdC10b29sdGlwLWhhbmRzZXRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9Lm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE2cHh9Lm1hdC1vcHRncm91cC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1zaW1wbGUtc25hY2tiYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweH0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb25bX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjE7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo1MDB9Lm1hdC10cmVlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW5lc3RlZC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjQwMDtmb250LXNpemU6MTRweH0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmVtcHR5KXt0cmFuc2Zvcm06dHJhbnNsYXRlWigwKX0ubWF0LXJpcHBsZS5tYXQtcmlwcGxlLXVuYm91bmRlZFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItcmFkaXVzOjUwJTtwb2ludGVyLWV2ZW50czpub25lO3RyYW5zaXRpb246b3BhY2l0eSx0cmFuc2Zvcm0gMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpO3RyYW5zZm9ybTpzY2FsZSgwKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6bm9uZX0uY2RrLXZpc3VhbGx5LWhpZGRlbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjA7Y2xpcDpyZWN0KDAgMCAwIDApO2hlaWdodDoxcHg7bWFyZ2luOi0xcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwO291dGxpbmU6MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb2ludGVyLWV2ZW50czpub25lO3RvcDowO2xlZnQ6MDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTplbXB0eXtkaXNwbGF5Om5vbmV9LmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1wYW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czphdXRvO2JveC1zaXppbmc6Ym9yZGVyLWJveDt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O21heC13aWR0aDoxMDAlO21heC1oZWlnaHQ6MTAwJX0uY2RrLW92ZXJsYXktYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO3otaW5kZXg6MTAwMDtwb2ludGVyLWV2ZW50czphdXRvOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDt0cmFuc2l0aW9uOm9wYWNpdHkgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSk7b3BhY2l0eTowfS5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjF9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAuY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTouNn0uY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4zMil9LmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MH0uY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWluLXdpZHRoOjFweDttaW4taGVpZ2h0OjFweH0uY2RrLWdsb2JhbC1zY3JvbGxibG9ja1tfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7d2lkdGg6MTAwJTtvdmVyZmxvdy15OnNjcm9sbH1Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0e31Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZHt9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbHthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQgMHMgMW1zfS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOm5vdCg6LXdlYmtpdC1hdXRvZmlsbCl7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCAwcyAxbXN9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplW19uZ2NvbnRlbnQtJUNPTVAlXXtyZXNpemU6bm9uZX10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDphdXRvICFpbXBvcnRhbnQ7b3ZlcmZsb3c6aGlkZGVuICFpbXBvcnRhbnR9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZy1maXJlZm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDowICFpbXBvcnRhbnR9Lm1hdC1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtbWRjLWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9W19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2hlaWdodDoxMDAlfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleDoxO21pbi1oZWlnaHQ6MHB4O3dpZHRoOjEwMCV9LnNpZGViYXItY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59LnNpZGViYXItY29udGVudHNbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWluLXdpZHRoOjE1MHB4fS5hbmFseXNpcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47aGVpZ2h0OjEwMCU7ZmxleDoxIDF9LnJ1bi1zZWxlY3Rvcltfbmdjb250ZW50LSVDT01QJV17bWF4LWhlaWdodDoxMDAlO3dpZHRoOjEwMCV9LnNpZGUtdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDozMHB4O2hlaWdodDozMHB4O3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MTBweDtib3R0b206MTBweDtib3JkZXI6MXB4IHNvbGlkICNlYmViZWI7Ym9yZGVyLXJhZGl1czozcHg7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5ncmFiYmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtjb250ZW50OiIiO2N1cnNvcjpldy1yZXNpemU7aGVpZ2h0OjEwMCU7d2lkdGg6M3B4O292ZXJmbG93OmhpZGRlbjtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0uYW5ub3RhdGlvbnMtbGlzdFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJTttaW4taGVpZ2h0OjBweDtmbGV4OjEgMX0nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoV190LFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6ImVtYmVkZGluZ3MtY29tcG9uZW50Iix0ZW1wbGF0ZVVybDoiLi9lbWJlZGRpbmdzX2NvbXBvbmVudC5uZy5odG1sIixzdHlsZVVybHM6WyIuL2VtYmVkZGluZ3NfY29tcG9uZW50LmNzcyJdLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2h9XX1dLG51bGwse3J1bkFjdGl2ZTpbe3R5cGU6eV99XSxzaWRlYmFyRXhwYW5kZWQ6W3t0eXBlOnlffV0sc2lkZWJhcldpZHRoOlt7dHlwZTp5X31dLHRvZ2dsZVNpZGViYXJFeHBhbmRlZDpbe3R5cGU6X199XSxyZXNpemVUcmlnZ2VyZWQ6W3t0eXBlOl9ffV0scmVzaXplR3JhYmJlZDpbe3R5cGU6X199XSxyZXNpemVSZWxlYXNlZDpbe3R5cGU6X199XX0pO2NsYXNzIEdfdHtjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXQsdGhpcy5ydW5BY3RpdmUkPXRoaXMuc3RvcmUucGlwZShSayh2TikpLnBpcGUoaHQoKHQ9PiEhdCYmWy4uLnQudmFsdWVzKCldLmluY2x1ZGVzKCEwKSkpKSx0aGlzLnNpZGViYXJFeHBhbmRlZCQ9dGhpcy5zdG9yZS5waXBlKFJrKHBidCkpLHRoaXMuc2lkZWJhcldpZHRoJD10aGlzLnN0b3JlLnBpcGUoUmsoZGJ0KSksdGhpcy5yZXNpemluZz0hMX1vblRvZ2dsZVNpZGViYXJFeHBhbmRlZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goemJ0KCkpfW9uUmVzaXplVHJpZ2dlcmVkKHQpe3RoaXMucmVzaXppbmcmJnRoaXMuc3RvcmUuZGlzcGF0Y2goSWJ0KHtzaWRlYmFyV2lkdGg6dC5jbGllbnRYfSkpfW9uUmVzaXplR3JhYmJlZCgpe3RoaXMucmVzaXppbmc9ITB9b25SZXNpemVSZWxlYXNlZCgpe3RoaXMucmVzaXppbmc9ITF9fWZ1bmN0aW9uIFlfdCh0LGUpezEmdCYmd3UoMCwibnBtaS1pbmFjdGl2ZS12aWV3Iil9ZnVuY3Rpb24gcV90KHQsZSl7MSZ0JiZ3dSgwLCJucG1pLW1haW4iKX1mdW5jdGlvbiBaX3QodCxlKXsxJnQmJnd1KDAsIm5wbWktZW1iZWRkaW5ncyIpfWZ1bmN0aW9uIFhfdCh0LGUpe2lmKDEmdCYmKFdtKDAscV90LDEsMCwibnBtaS1tYWluIiwzKSxXbSgxLFpfdCwxLDAsIm5wbWktZW1iZWRkaW5ncyIsMykpLDImdCl7Y29uc3QgdD1MdSgpO3Z1KCJuZ0lmIix0LmFjdGl2ZVZpZXc9PT10LlZpZXdBY3RpdmUuREVGQVVMVCksSmMoMSksdnUoIm5nSWYiLHQuYWN0aXZlVmlldz09PXQuVmlld0FjdGl2ZS5FTUJFRERJTkdTKX19R190Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxHX3QpKE11KEVrKSl9LEdfdC7JtWNtcD1Vbyh7dHlwZTpHX3Qsc2VsZWN0b3JzOltbIm5wbWktZW1iZWRkaW5ncyJdXSxkZWNsczo0LHZhcnM6OSxjb25zdHM6W1szLCJydW5BY3RpdmUiLCJzaWRlYmFyRXhwYW5kZWQiLCJzaWRlYmFyV2lkdGgiLCJ0b2dnbGVTaWRlYmFyRXhwYW5kZWQiLCJyZXNpemVUcmlnZ2VyZWQiLCJyZXNpemVHcmFiYmVkIiwicmVzaXplUmVsZWFzZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKE91KDAsImVtYmVkZGluZ3MtY29tcG9uZW50IiwwKSxOdSgidG9nZ2xlU2lkZWJhckV4cGFuZGVkIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uVG9nZ2xlU2lkZWJhckV4cGFuZGVkKCl9KSkoInJlc2l6ZVRyaWdnZXJlZCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25SZXNpemVUcmlnZ2VyZWQoZSl9KSkoInJlc2l6ZUdyYWJiZWQiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub25SZXNpemVHcmFiYmVkKCl9KSkoInJlc2l6ZVJlbGVhc2VkIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uUmVzaXplUmVsZWFzZWQoKX0pKSxPYigxLCJhc3luYyIpLE9iKDIsImFzeW5jIiksT2IoMywiYXN5bmMiKSxQdSgpKSwyJmUmJnZ1KCJydW5BY3RpdmUiLFBiKDEsMyxuLnJ1bkFjdGl2ZSQpKSgic2lkZWJhckV4cGFuZGVkIixQYigyLDUsbi5zaWRlYmFyRXhwYW5kZWQkKSkoInNpZGViYXJXaWR0aCIsUGIoMyw3LG4uc2lkZWJhcldpZHRoJCkpfSxkaXJlY3RpdmVzOltXX3RdLHBpcGVzOltNdl0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihHX3QsW3t0eXBlOmhfLGFyZ3M6W3tzZWxlY3RvcjoibnBtaS1lbWJlZGRpbmdzIix0ZW1wbGF0ZTonXG4gICAgPGVtYmVkZGluZ3MtY29tcG9uZW50XG4gICAgICBbcnVuQWN0aXZlXT0icnVuQWN0aXZlJCB8IGFzeW5jIlxuICAgICAgW3NpZGViYXJFeHBhbmRlZF09InNpZGViYXJFeHBhbmRlZCQgfCBhc3luYyJcbiAgICAgIFtzaWRlYmFyV2lkdGhdPSJzaWRlYmFyV2lkdGgkIHwgYXN5bmMiXG4gICAgICAodG9nZ2xlU2lkZWJhckV4cGFuZGVkKT0ib25Ub2dnbGVTaWRlYmFyRXhwYW5kZWQoKSJcbiAgICAgIChyZXNpemVUcmlnZ2VyZWQpPSJvblJlc2l6ZVRyaWdnZXJlZCgkZXZlbnQpIlxuICAgICAgKHJlc2l6ZUdyYWJiZWQpPSJvblJlc2l6ZUdyYWJiZWQoKSJcbiAgICAgIChyZXNpemVSZWxlYXNlZCk9Im9uUmVzaXplUmVsZWFzZWQoKSJcbiAgICA+PC9lbWJlZGRpbmdzLWNvbXBvbmVudD5cbiAgJyxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6RWt9XX0pLG51bGwpO2NsYXNzIEtfdHtjb25zdHJ1Y3Rvcigpe3RoaXMuVmlld0FjdGl2ZT1CaHR9fUtfdC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8S190KX0sS190Lsm1Y21wPVVvKHt0eXBlOktfdCxzZWxlY3RvcnM6W1sibnBtaS1jb21wb25lbnQiXV0saW5wdXRzOntydW5zOiJydW5zIixhY3RpdmVWaWV3OiJhY3RpdmVWaWV3In0sZGVjbHM6NCx2YXJzOjIsY29uc3RzOltbMSwibnBtaS1jb250YWluZXIiXSxbNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJkYXRhQXZhaWxhYmxlIiwiIl0sWzQsIm5nSWYiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pe2lmKDEmZSYmKE91KDAsImRpdiIsMCksV20oMSxZX3QsMSwwLCJucG1pLWluYWN0aXZlLXZpZXciLDEpLFdtKDIsWF90LDIsMiwibmctdGVtcGxhdGUiLG51bGwsMixLYiksUHUoKSksMiZlKXtjb25zdCB0PUdtKDMpO0pjKDEpLHZ1KCJuZ0lmIiwwPT09bi5ydW5zLnNpemUpKCJuZ0lmRWxzZSIsdCl9fSxkaXJlY3RpdmVzOlthdixqaHQsRl90LEdfdF0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmZsZXg7aGVpZ2h0OjEwMCV9Lm5wbWktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjEgMX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoS190LFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6Im5wbWktY29tcG9uZW50Iix0ZW1wbGF0ZVVybDoiLi9ucG1pX2NvbXBvbmVudC5uZy5odG1sIixzdHlsZVVybHM6WyIuL25wbWlfY29tcG9uZW50LmNzcyJdLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2h9XX1dLG51bGwse3J1bnM6W3t0eXBlOnlffV0sYWN0aXZlVmlldzpbe3R5cGU6eV99XX0pO2NsYXNzIEpfdHtjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXQsdGhpcy5ydW5zJD10aGlzLnN0b3JlLnBpcGUoUmsodk4pKSx0aGlzLmFjdGl2ZVZpZXckPXRoaXMuc3RvcmUucGlwZShSayhzYnQpKX1uZ09uSW5pdCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2gobWJ0KCkpfX1KX3QuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEpfdCkoTXUoRWspKX0sSl90Lsm1Y21wPVVvKHt0eXBlOkpfdCxzZWxlY3RvcnM6W1sibnBtaSJdXSxkZWNsczozLHZhcnM6Nixjb25zdHM6W1szLCJydW5zIiwiYWN0aXZlVmlldyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYod3UoMCwibnBtaS1jb21wb25lbnQiLDApLE9iKDEsImFzeW5jIiksT2IoMiwiYXN5bmMiKSksMiZlJiZ2dSgicnVucyIsUGIoMSwyLG4ucnVucyQpKSgiYWN0aXZlVmlldyIsUGIoMiw0LG4uYWN0aXZlVmlldyQpKX0sZGlyZWN0aXZlczpbS190XSxwaXBlczpbTXZdLGVuY2Fwc3VsYXRpb246Mn0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoSl90LFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6Im5wbWkiLHRlbXBsYXRlOidcbiAgICA8bnBtaS1jb21wb25lbnRcbiAgICAgIFtydW5zXT0icnVucyQgfCBhc3luYyJcbiAgICAgIFthY3RpdmVWaWV3XT0iYWN0aXZlVmlldyQgfCBhc3luYyJcbiAgICA+PC9ucG1pLWNvbXBvbmVudD5cbiAgJ31dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkVrfV19KSxudWxsKTt2YXIgUV90PVl4KChmdW5jdGlvbih0LGUpe3ZhciBuPUd4JiZHeC5fX3ZhbHVlc3x8ZnVuY3Rpb24odCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdLG49MDtyZXR1cm4gZT9lLmNhbGwodCk6e25leHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdCYmbj49dC5sZW5ndGgmJih0PXZvaWQgMCkse3ZhbHVlOnQmJnRbbisrXSxkb25lOiF0fX19fTtmdW5jdGlvbiBvKHQsZSl7cmV0dXJuIE1hdGguZmxvb3IoZSgpKnQpfWZ1bmN0aW9uIGkodCl7Zm9yKHZhciBlPVtdLG49MDtuPHQ7bisrKWUucHVzaCh2b2lkIDApO3JldHVybiBlfWZ1bmN0aW9uIGEodCxlKXtyZXR1cm4gaSh0KS5tYXAoKGZ1bmN0aW9uKCl7cmV0dXJuIGV9KSl9ZnVuY3Rpb24gcih0KXtyZXR1cm4gYSh0LDApfWZ1bmN0aW9uIHModCl7cmV0dXJuIHQucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiB0K2V9KSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUudGF1UmFuZEludD1vLGUudGF1UmFuZD1mdW5jdGlvbiBsKHQpe3JldHVybiB0KCl9LGUubm9ybT1mdW5jdGlvbiBjKHQpe3ZhciBlLG8saT0wO3RyeXtmb3IodmFyIGE9bih0KSxyPWEubmV4dCgpOyFyLmRvbmU7cj1hLm5leHQoKSlpKz1NYXRoLnBvdyhyLnZhbHVlLDIpfWNhdGNoKHQpe2U9e2Vycm9yOnR9fWZpbmFsbHl7dHJ5e3ImJiFyLmRvbmUmJihvPWEucmV0dXJuKSYmby5jYWxsKGEpfWZpbmFsbHl7aWYoZSl0aHJvdyBlLmVycm9yfX1yZXR1cm4gTWF0aC5zcXJ0KGkpfSxlLmVtcHR5PWksZS5yYW5nZT1mdW5jdGlvbiBkKHQpe3JldHVybiBpKHQpLm1hcCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gZX0pKX0sZS5maWxsZWQ9YSxlLnplcm9zPXIsZS5vbmVzPWZ1bmN0aW9uIHAodCl7cmV0dXJuIGEodCwxKX0sZS5saW5lYXI9ZnVuY3Rpb24gbSh0LGUsbil7cmV0dXJuIGkobikubWFwKChmdW5jdGlvbihvLGkpe3JldHVybiB0K2kqKChlLXQpLyhuLTEpKX0pKX0sZS5zdW09cyxlLm1lYW49ZnVuY3Rpb24gdSh0KXtyZXR1cm4gcyh0KS90Lmxlbmd0aH0sZS5tYXg9ZnVuY3Rpb24gZih0KXtmb3IodmFyIGU9MCxuPTA7bjx0Lmxlbmd0aDtuKyspZT10W25dPmU/dFtuXTplO3JldHVybiBlfSxlLm1heDJkPWZ1bmN0aW9uIGcodCl7Zm9yKHZhciBlPTAsbj0wO248dC5sZW5ndGg7bisrKWZvcih2YXIgbz0wO288dFtuXS5sZW5ndGg7bysrKWU9dFtuXVtvXT5lP3Rbbl1bb106ZTtyZXR1cm4gZX0sZS5yZWplY3Rpb25TYW1wbGU9ZnVuY3Rpb24gaCh0LGUsbil7Zm9yKHZhciBpPXIodCksYT0wO2E8dDthKyspZm9yKHZhciBzPSEwO3M7KXtmb3IodmFyIGw9byhlLG4pLGM9ITEsZD0wO2Q8YTtkKyspaWYobD09PWlbZF0pe2M9ITA7YnJlYWt9Y3x8KHM9ITEpLGlbYV09bH1yZXR1cm4gaX0sZS5yZXNoYXBlMmQ9ZnVuY3Rpb24gYih0LGUsbil7dmFyIG89W10saT0wO2lmKHQubGVuZ3RoIT09ZSpuKXRocm93IG5ldyBFcnJvcigiQXJyYXkgZGltZW5zaW9ucyBtdXN0IG1hdGNoIGlucHV0IGxlbmd0aC4iKTtmb3IodmFyIGE9MDthPGU7YSsrKXtmb3IodmFyIHI9W10scz0wO3M8bjtzKyspci5wdXNoKHRbaV0pLGkrPTE7by5wdXNoKHIpfXJldHVybiBvfX0pKSwkX3Q9WXgoKGZ1bmN0aW9uKHQsZSl7dmFyIG49R3gmJkd4Ll9faW1wb3J0U3Rhcnx8ZnVuY3Rpb24odCl7aWYodCYmdC5fX2VzTW9kdWxlKXJldHVybiB0O3ZhciBlPXt9O2lmKG51bGwhPXQpZm9yKHZhciBuIGluIHQpT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwodCxuKSYmKGVbbl09dFtuXSk7cmV0dXJuIGUuZGVmYXVsdD10LGV9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1uKFFfdCk7ZnVuY3Rpb24gaSh0LGUpe3ZhciBuPWZ1bmN0aW9uKG4pe3JldHVybiBvLmVtcHR5KHQpLm1hcCgoZnVuY3Rpb24oKXtyZXR1cm4gby5maWxsZWQoZSxuKX0pKX0saT1bXTtyZXR1cm4gaS5wdXNoKG4oLTEpKSxpLnB1c2gobigxLzApKSxpLnB1c2gobigwKSksaX1mdW5jdGlvbiBhKHQsZSxuLG8saSl7ZT1NYXRoLmZsb29yKGUpO3ZhciBhPXRbMF1bZV07aWYobj49dFsxXVtlXVswXSlyZXR1cm4gMDtmb3IodmFyIHM9MDtzPGEubGVuZ3RoO3MrKylpZihvPT09YVtzXSlyZXR1cm4gMDtyZXR1cm4gcih0LGUsbixvLGkpfWZ1bmN0aW9uIHIodCxlLG4sbyxpKXt2YXIgYT10WzBdW2VdLHI9dFsxXVtlXSxzPXRbMl1bZV07aWYobj49clswXSlyZXR1cm4gMDtyWzBdPW4sYVswXT1vLHNbMF09aTtmb3IodmFyIGw9MCxjPTA7Oyl7dmFyIGQ9MipsKzEscD1kKzEsbT10WzBdWzBdLmxlbmd0aDtpZihkPj1tKWJyZWFrO2lmKHA+PW0pe2lmKCEocltkXT5uKSlicmVhaztjPWR9ZWxzZSBpZihyW2RdPj1yW3BdKXtpZighKG48cltkXSkpYnJlYWs7Yz1kfWVsc2V7aWYoIShuPHJbcF0pKWJyZWFrO2M9cH1yW2xdPXJbY10sYVtsXT1hW2NdLHNbbF09c1tjXSxsPWN9cmV0dXJuIHJbbF09bixhW2xdPW8sc1tsXT1pLDF9ZnVuY3Rpb24gcyh0LGUsbixvKXtmb3IoOzIqbysxPG47KXt2YXIgaT0yKm8rMSxhPWkrMSxyPW87aWYodFtyXTx0W2ldJiYocj1pKSxhPG4mJnRbcl08dFthXSYmKHI9YSkscj09PW8pYnJlYWs7dmFyIHM9dFtvXTt0W29dPXRbcl0sdFtyXT1zO3ZhciBsPWVbb107ZVtvXT1lW3JdLGVbcl09bCxvPXJ9fWUubWFrZUhlYXA9aSxlLnJlamVjdGlvblNhbXBsZT1mdW5jdGlvbiBsKHQsZSxuKXtmb3IodmFyIGk9by56ZXJvcyh0KSxhPTA7YTx0O2ErKyl7Zm9yKHZhciByPSEwLHM9MDtyOyl7cz1vLnRhdVJhbmRJbnQoZSxuKTtmb3IodmFyIGw9ITEsYz0wO2M8YTtjKyspaWYocz09PWlbY10pe2w9ITA7YnJlYWt9bHx8KHI9ITEpfWlbYV09c31yZXR1cm4gaX0sZS5oZWFwUHVzaD1hLGUudW5jaGVja2VkSGVhcFB1c2g9cixlLmJ1aWxkQ2FuZGlkYXRlcz1mdW5jdGlvbiBjKHQsZSxuLHIscyl7Zm9yKHZhciBsPWkoZSxyKSxjPTA7YzxlO2MrKylmb3IodmFyIGQ9MDtkPG47ZCsrKWlmKCEodFswXVtjXVtkXTwwKSl7dmFyIHA9dFswXVtjXVtkXSxtPXRbMl1bY11bZF0sdT1vLnRhdVJhbmQocyk7YShsLGMsdSxwLG0pLGEobCxwLHUsYyxtKSx0WzJdW2NdW2RdPTB9cmV0dXJuIGx9LGUuZGVoZWFwU29ydD1mdW5jdGlvbiBkKHQpe2Zvcih2YXIgZT10WzBdLG49dFsxXSxvPTA7bzxlLmxlbmd0aDtvKyspZm9yKHZhciBpPWVbb10sYT1uW29dLHI9MDtyPGkubGVuZ3RoLTE7cisrKXt2YXIgbD1pLmxlbmd0aC1yLTEsYz1hLmxlbmd0aC1yLTEsZD1pWzBdO2lbMF09aVtsXSxpW2xdPWQ7dmFyIHA9YVswXTthWzBdPWFbY10sYVtjXT1wLHMoYSxpLGMsMCl9cmV0dXJue2luZGljZXM6ZSx3ZWlnaHRzOm59fSxlLnNtYWxsZXN0RmxhZ2dlZD1mdW5jdGlvbiBwKHQsZSl7Zm9yKHZhciBuPXRbMF1bZV0sbz10WzFdW2VdLGk9dFsyXVtlXSxhPTEvMCxyPS0xLHM9MDtzPm4ubGVuZ3RoO3MrKykxPT09aVtzXSYmb1tzXTxhJiYoYT1vW3NdLHI9cyk7cmV0dXJuIHI+PTA/KGlbcl09MCxNYXRoLmZsb29yKG5bcl0pKTotMX19KSksdEN0PVl4KChmdW5jdGlvbih0LGUpe3ZhciBuLG89R3gmJkd4Ll9fcmVhZHx8ZnVuY3Rpb24odCxlKXt2YXIgbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl07aWYoIW4pcmV0dXJuIHQ7dmFyIG8saSxhPW4uY2FsbCh0KSxyPVtdO3RyeXtmb3IoOyh2b2lkIDA9PT1lfHxlLS0gPjApJiYhKG89YS5uZXh0KCkpLmRvbmU7KXIucHVzaChvLnZhbHVlKX1jYXRjaCh0KXtpPXtlcnJvcjp0fX1maW5hbGx5e3RyeXtvJiYhby5kb25lJiYobj1hLnJldHVybikmJm4uY2FsbChhKX1maW5hbGx5e2lmKGkpdGhyb3cgaS5lcnJvcn19cmV0dXJuIHJ9LGk9R3gmJkd4Ll9fdmFsdWVzfHxmdW5jdGlvbih0KXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl0sbj0wO3JldHVybiBlP2UuY2FsbCh0KTp7bmV4dDpmdW5jdGlvbigpe3JldHVybiB0JiZuPj10Lmxlbmd0aCYmKHQ9dm9pZCAwKSx7dmFsdWU6dCYmdFtuKytdLGRvbmU6IXR9fX19LGE9R3gmJkd4Ll9faW1wb3J0U3Rhcnx8ZnVuY3Rpb24odCl7aWYodCYmdC5fX2VzTW9kdWxlKXJldHVybiB0O3ZhciBlPXt9O2lmKG51bGwhPXQpZm9yKHZhciBuIGluIHQpT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwodCxuKSYmKGVbbl09dFtuXSk7cmV0dXJuIGUuZGVmYXVsdD10LGV9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1hKFFfdCkscz0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLG8pe2lmKHRoaXMuZW50cmllcz1uZXcgTWFwLHRoaXMublJvd3M9MCx0aGlzLm5Db2xzPTAsdC5sZW5ndGghPT1lLmxlbmd0aHx8dC5sZW5ndGghPT1uLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoInJvd3MsIGNvbHMgYW5kIHZhbHVlcyBhcnJheXMgbXVzdCBhbGwgaGF2ZSB0aGUgc2FtZSBsZW5ndGgiKTt0aGlzLm5Sb3dzPW9bMF0sdGhpcy5uQ29scz1vWzFdO2Zvcih2YXIgaT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgYT10W2ldLHI9ZVtpXTt0aGlzLmNoZWNrRGltcyhhLHIpO3ZhciBzPXRoaXMubWFrZUtleShhLHIpO3RoaXMuZW50cmllcy5zZXQocyx7dmFsdWU6bltpXSxyb3c6YSxjb2w6cn0pfX1yZXR1cm4gdC5wcm90b3R5cGUubWFrZUtleT1mdW5jdGlvbih0LGUpe3JldHVybiB0KyI6IitlfSx0LnByb3RvdHlwZS5jaGVja0RpbXM9ZnVuY3Rpb24odCxlKXtpZighKHQ8dGhpcy5uUm93cyYmZTx0aGlzLm5Db2xzKSl0aHJvdyBuZXcgRXJyb3IoInJvdyBhbmQvb3IgY29sIHNwZWNpZmllZCBvdXRzaWRlIG9mIG1hdHJpeCBkaW1lbnNpb25zIil9LHQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0LGUsbil7dGhpcy5jaGVja0RpbXModCxlKTt2YXIgbz10aGlzLm1ha2VLZXkodCxlKTt0aGlzLmVudHJpZXMuaGFzKG8pP3RoaXMuZW50cmllcy5nZXQobykudmFsdWU9bjp0aGlzLmVudHJpZXMuc2V0KG8se3ZhbHVlOm4scm93OnQsY29sOmV9KX0sdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQsZSxuKXt2b2lkIDA9PT1uJiYobj0wKSx0aGlzLmNoZWNrRGltcyh0LGUpO3ZhciBvPXRoaXMubWFrZUtleSh0LGUpO3JldHVybiB0aGlzLmVudHJpZXMuaGFzKG8pP3RoaXMuZW50cmllcy5nZXQobykudmFsdWU6bn0sdC5wcm90b3R5cGUuZ2V0QWxsPWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PSEwKTt2YXIgZT1bXTtyZXR1cm4gdGhpcy5lbnRyaWVzLmZvckVhY2goKGZ1bmN0aW9uKHQpe2UucHVzaCh0KX0pKSx0JiZlLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQucm93PT09ZS5yb3c/dC5jb2wtZS5jb2w6dC5yb3ctZS5yb3d9KSksZX0sdC5wcm90b3R5cGUuZ2V0RGltcz1mdW5jdGlvbigpe3JldHVyblt0aGlzLm5Sb3dzLHRoaXMubkNvbHNdfSx0LnByb3RvdHlwZS5nZXRSb3dzPWZ1bmN0aW9uKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5lbnRyaWVzLChmdW5jdGlvbih0KXtyZXR1cm4gbyh0LDIpWzFdLnJvd30pKX0sdC5wcm90b3R5cGUuZ2V0Q29scz1mdW5jdGlvbigpe3JldHVybiBBcnJheS5mcm9tKHRoaXMuZW50cmllcywoZnVuY3Rpb24odCl7cmV0dXJuIG8odCwyKVsxXS5jb2x9KSl9LHQucHJvdG90eXBlLmdldFZhbHVlcz1mdW5jdGlvbigpe3JldHVybiBBcnJheS5mcm9tKHRoaXMuZW50cmllcywoZnVuY3Rpb24odCl7cmV0dXJuIG8odCwyKVsxXS52YWx1ZX0pKX0sdC5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbih0KXt0aGlzLmVudHJpZXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIHQoZS52YWx1ZSxlLnJvdyxlLmNvbCl9KSl9LHQucHJvdG90eXBlLm1hcD1mdW5jdGlvbihlKXt2YXIgbj1bXTt0aGlzLmVudHJpZXMuZm9yRWFjaCgoZnVuY3Rpb24odCl7bi5wdXNoKGUodC52YWx1ZSx0LnJvdyx0LmNvbCkpfSkpO3ZhciBvPVt0aGlzLm5Sb3dzLHRoaXMubkNvbHNdO3JldHVybiBuZXcgdCh0aGlzLmdldFJvd3MoKSx0aGlzLmdldENvbHMoKSxuLG8pfSx0LnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXIuZW1wdHkodGhpcy5uUm93cykubWFwKChmdW5jdGlvbigpe3JldHVybiByLnplcm9zKHQubkNvbHMpfSkpO3JldHVybiB0aGlzLmVudHJpZXMuZm9yRWFjaCgoZnVuY3Rpb24odCl7ZVt0LnJvd11bdC5jb2xdPXQudmFsdWV9KSksZX0sdH0pKCk7ZS5TcGFyc2VNYXRyaXg9cyxlLnRyYW5zcG9zZT1mdW5jdGlvbiBsKHQpe3ZhciBlPVtdLG49W10sbz1bXTtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbih0LGksYSl7ZS5wdXNoKGkpLG4ucHVzaChhKSxvLnB1c2godCl9KSksbmV3IHMobixlLG8sW3QubkNvbHMsdC5uUm93c10pfSxlLmlkZW50aXR5PWZ1bmN0aW9uIGModCl7Zm9yKHZhciBlPW8odCwxKVswXSxuPW5ldyBzKFtdLFtdLFtdLHQpLGk9MDtpPGU7aSsrKW4uc2V0KGksaSwxKTtyZXR1cm4gbn0sZS5wYWlyd2lzZU11bHRpcGx5PWZ1bmN0aW9uIGQodCxlKXtyZXR1cm4geSh0LGUsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQqZX0pKX0sZS5hZGQ9ZnVuY3Rpb24gcCh0LGUpe3JldHVybiB5KHQsZSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlfSkpfSxlLnN1YnRyYWN0PWZ1bmN0aW9uIG0odCxlKXtyZXR1cm4geSh0LGUsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pKX0sZS5tYXhpbXVtPWZ1bmN0aW9uIHUodCxlKXtyZXR1cm4geSh0LGUsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+ZT90OmV9KSl9LGUubXVsdGlwbHlTY2FsYXI9ZnVuY3Rpb24gZih0LGUpe3JldHVybiB0Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQqZX0pKX0sZS5lbGltaW5hdGVaZXJvcz1mdW5jdGlvbiBnKHQpe2Zvcih2YXIgZT1uZXcgU2V0LG49dC5nZXRWYWx1ZXMoKSxvPXQuZ2V0Um93cygpLGk9dC5nZXRDb2xzKCksYT0wO2E8bi5sZW5ndGg7YSsrKTA9PT1uW2FdJiZlLmFkZChhKTt2YXIgcj1mdW5jdGlvbih0LG4pe3JldHVybiFlLmhhcyhuKX0sbD1uLmZpbHRlcihyKSxjPW8uZmlsdGVyKHIpLGQ9aS5maWx0ZXIocik7cmV0dXJuIG5ldyBzKGMsZCxsLHQuZ2V0RGltcygpKX0sZS5ub3JtYWxpemU9ZnVuY3Rpb24gaCh0LGUpe3ZhciBuLG87dm9pZCAwPT09ZSYmKGU9ImwyIik7dmFyIGE9YltlXSxyPW5ldyBNYXA7dC5mb3JFYWNoKChmdW5jdGlvbih0LGUsbil7dmFyIG89ci5nZXQoZSl8fFtdO28ucHVzaChuKSxyLnNldChlLG8pfSkpO3ZhciBsPW5ldyBzKFtdLFtdLFtdLHQuZ2V0RGltcygpKSxjPWZ1bmN0aW9uKGUpe2Zvcih2YXIgbj1yLmdldChlKS5zb3J0KCksbz1uLm1hcCgoZnVuY3Rpb24obil7cmV0dXJuIHQuZ2V0KGUsbil9KSksaT1hKG8pLHM9MDtzPGkubGVuZ3RoO3MrKylsLnNldChlLG5bc10saVtzXSl9O3RyeXtmb3IodmFyIGQ9aShyLmtleXMoKSkscD1kLm5leHQoKTshcC5kb25lO3A9ZC5uZXh0KCkpYyhwLnZhbHVlKX1jYXRjaCh0KXtuPXtlcnJvcjp0fX1maW5hbGx5e3RyeXtwJiYhcC5kb25lJiYobz1kLnJldHVybikmJm8uY2FsbChkKX1maW5hbGx5e2lmKG4pdGhyb3cgbi5lcnJvcn19cmV0dXJuIGx9O3ZhciBiPSgobj17fSkubWF4PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0tMS8wLG49MDtuPHQubGVuZ3RoO24rKyllPXRbbl0+ZT90W25dOmU7cmV0dXJuIHQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC9lfSkpfSxuLmwxPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLG49MDtuPHQubGVuZ3RoO24rKyllKz10W25dO3JldHVybiB0Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQvZX0pKX0sbi5sMj1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxuPTA7bjx0Lmxlbmd0aDtuKyspZSs9TWF0aC5wb3codFtuXSwyKTtyZXR1cm4gdC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnNxcnQoTWF0aC5wb3codCwyKS9lKX0pKX0sbik7ZnVuY3Rpb24geSh0LGUsbil7Zm9yKHZhciBvPW5ldyBTZXQsaT1bXSxhPVtdLHI9W10sbD1mdW5jdGlvbihvLHMpe2kucHVzaChvKSxhLnB1c2gocyk7dmFyIGw9bih0LmdldChvLHMpLGUuZ2V0KG8scykpO3IucHVzaChsKX0sYz10LmdldFZhbHVlcygpLGQ9dC5nZXRSb3dzKCkscD10LmdldENvbHMoKSxtPTA7bTxjLmxlbmd0aDttKyspby5hZGQoKGg9ZFttXSkrIjoiKyhiPXBbbV0pKSxsKGgsYik7dmFyIHU9ZS5nZXRWYWx1ZXMoKSxmPWUuZ2V0Um93cygpLGc9ZS5nZXRDb2xzKCk7Zm9yKG09MDttPHUubGVuZ3RoO20rKyl7dmFyIGgsYjtvLmhhcygoaD1mW21dKSsiOiIrKGI9Z1ttXSkpfHxsKGgsYil9cmV0dXJuIG5ldyBzKGksYSxyLFt0Lm5Sb3dzLHQubkNvbHNdKX1lLmdldENTUj1mdW5jdGlvbiBfKHQpe3ZhciBlPVtdO3QuZm9yRWFjaCgoZnVuY3Rpb24odCxuLG8pe2UucHVzaCh7dmFsdWU6dCxyb3c6bixjb2w6b30pfSkpLGUuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5yb3c9PT1lLnJvdz90LmNvbC1lLmNvbDp0LnJvdy1lLnJvd30pKTtmb3IodmFyIG49W10sbz1bXSxpPVtdLGE9LTEscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgcz1lW3JdLGw9cy5yb3csYz1zLmNvbCxkPXMudmFsdWU7bCE9PWEmJihhPWwsaS5wdXNoKHIpKSxuLnB1c2goYyksby5wdXNoKGQpfXJldHVybntpbmRpY2VzOm4sdmFsdWVzOm8saW5kcHRyOml9fX0pKSxlQ3Q9WXgoKGZ1bmN0aW9uKHQsZSl7dmFyIG49R3gmJkd4Ll9fcmVhZHx8ZnVuY3Rpb24odCxlKXt2YXIgbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl07aWYoIW4pcmV0dXJuIHQ7dmFyIG8saSxhPW4uY2FsbCh0KSxyPVtdO3RyeXtmb3IoOyh2b2lkIDA9PT1lfHxlLS0gPjApJiYhKG89YS5uZXh0KCkpLmRvbmU7KXIucHVzaChvLnZhbHVlKX1jYXRjaCh0KXtpPXtlcnJvcjp0fX1maW5hbGx5e3RyeXtvJiYhby5kb25lJiYobj1hLnJldHVybikmJm4uY2FsbChhKX1maW5hbGx5e2lmKGkpdGhyb3cgaS5lcnJvcn19cmV0dXJuIHJ9LG89R3gmJkd4Ll9fc3ByZWFkfHxmdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0PXQuY29uY2F0KG4oYXJndW1lbnRzW2VdKSk7cmV0dXJuIHR9LGk9R3gmJkd4Ll9fdmFsdWVzfHxmdW5jdGlvbih0KXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl0sbj0wO3JldHVybiBlP2UuY2FsbCh0KTp7bmV4dDpmdW5jdGlvbigpe3JldHVybiB0JiZuPj10Lmxlbmd0aCYmKHQ9dm9pZCAwKSx7dmFsdWU6dCYmdFtuKytdLGRvbmU6IXR9fX19LGE9R3gmJkd4Ll9faW1wb3J0U3Rhcnx8ZnVuY3Rpb24odCl7aWYodCYmdC5fX2VzTW9kdWxlKXJldHVybiB0O3ZhciBlPXt9O2lmKG51bGwhPXQpZm9yKHZhciBuIGluIHQpT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwodCxuKSYmKGVbbl09dFtuXSk7cmV0dXJuIGUuZGVmYXVsdD10LGV9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcixzPWEoUV90KTtmdW5jdGlvbiBsKHQsZSxuLG8saSl7aWYodm9pZCAwPT09biYmKG49MzApLGUubGVuZ3RoPm4pe3ZhciBhPShmdW5jdGlvbiByKHQsZSxuKXtmb3IodmFyIG89dFswXS5sZW5ndGgsaT1zLnRhdVJhbmRJbnQoZS5sZW5ndGgsbiksYT1zLnRhdVJhbmRJbnQoZS5sZW5ndGgsbikscj1lW2ldLGw9ZVthPShhKz1pPT09YT8xOjApJWUubGVuZ3RoXSxjPTAsZD1zLnplcm9zKG8pLHA9MDtwPGQubGVuZ3RoO3ArKylkW3BdPXRbcl1bcF0tdFtsXVtwXSxjLT1kW3BdKih0W3JdW3BdK3RbbF1bcF0pLzI7dmFyIG09MCx1PTAsZj1zLnplcm9zKGUubGVuZ3RoKTtmb3IocD0wO3A8ZS5sZW5ndGg7cCsrKXtmb3IodmFyIGc9YyxoPTA7aDxvO2grKylnKz1kW2hdKnRbZVtwXV1baF07MD09PWc/KGZbcF09cy50YXVSYW5kSW50KDIsbiksMD09PWZbcF0/bSs9MTp1Kz0xKTpnPjA/KGZbcF09MCxtKz0xKTooZltwXT0xLHUrPTEpfXZhciBiPXMuemVyb3MobSkseT1zLnplcm9zKHUpO2ZvcihtPTAsdT0wLHA9MDtwPGYubGVuZ3RoO3ArKykwPT09ZltwXT8oYlttXT1lW3BdLG0rPTEpOih5W3VdPWVbcF0sdSs9MSk7cmV0dXJue2luZGljZXNMZWZ0OmIsaW5kaWNlc1JpZ2h0OnksaHlwZXJwbGFuZTpkLG9mZnNldDpjfX0pKHQsZSxpKSxjPWEuaW5kaWNlc1JpZ2h0LGQ9YS5oeXBlcnBsYW5lLHA9YS5vZmZzZXQ7cmV0dXJue2xlZnRDaGlsZDpsKHQsYS5pbmRpY2VzTGVmdCxuLG8rMSxpKSxyaWdodENoaWxkOmwodCxjLG4sbysxLGkpLGlzTGVhZjohMSxoeXBlcnBsYW5lOmQsb2Zmc2V0OnB9fXJldHVybntpbmRpY2VzOmUsaXNMZWFmOiEwfX1mdW5jdGlvbiBjKHQsZSxuLGksYSxyLHMpe3ZhciBsO2lmKHQuaXNMZWFmKXJldHVybiBpW3JdWzBdPS1zLChsPWFbc10pLnNwbGljZS5hcHBseShsLG8oWzAsdC5pbmRpY2VzLmxlbmd0aF0sdC5pbmRpY2VzKSkse25vZGVOdW06cixsZWFmTnVtOnMrPTF9O2Vbcl09dC5oeXBlcnBsYW5lLG5bcl09dC5vZmZzZXQsaVtyXVswXT1yKzE7dmFyIGQ9cixwPWModC5sZWZ0Q2hpbGQsZSxuLGksYSxyKzEscyk7cmV0dXJuIHM9cC5sZWFmTnVtLGlbZF1bMV09KHI9cC5ub2RlTnVtKSsxLHtub2RlTnVtOihwPWModC5yaWdodENoaWxkLGUsbixpLGEscisxLHMpKS5ub2RlTnVtLGxlYWZOdW06cC5sZWFmTnVtfX1mdW5jdGlvbiBkKHQpe3JldHVybiB0LmlzTGVhZj8xOjErZCh0LmxlZnRDaGlsZCkrZCh0LnJpZ2h0Q2hpbGQpfWZ1bmN0aW9uIHAodCl7cmV0dXJuIHQuaXNMZWFmPzE6cCh0LmxlZnRDaGlsZCkrcCh0LnJpZ2h0Q2hpbGQpfWZ1bmN0aW9uIG0odCxlLG4sbyl7Zm9yKHZhciBpPWUsYT0wO2E8bi5sZW5ndGg7YSsrKWkrPXRbYV0qblthXTtyZXR1cm4gMD09PWk/cy50YXVSYW5kSW50KDIsbyk6aT4wPzA6MX1lLkZsYXRUcmVlPXI9ZnVuY3Rpb24gcih0LGUsbixvKXt0aGlzLmh5cGVycGxhbmVzPXQsdGhpcy5vZmZzZXRzPWUsdGhpcy5jaGlsZHJlbj1uLHRoaXMuaW5kaWNlcz1vfSxlLm1ha2VGb3Jlc3Q9ZnVuY3Rpb24gdSh0LGUsbixvKXt2YXIgaT1NYXRoLm1heCgxMCxlKTtyZXR1cm4gcy5yYW5nZShuKS5tYXAoKGZ1bmN0aW9uKGUsbil7cmV0dXJuKGZ1bmN0aW9uIGEodCxlLG4sbyl7cmV0dXJuIHZvaWQgMD09PWUmJihlPTMwKSxsKHQscy5yYW5nZSh0Lmxlbmd0aCksZSxuLG8pfSkodCxpLG4sbyl9KSkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4oZnVuY3Rpb24gZSh0LG4pe3ZhciBvPWQodCksaT1wKHQpLGE9cy5yYW5nZShvKS5tYXAoKGZ1bmN0aW9uKCl7cmV0dXJuIHMuemVyb3ModC5oeXBlcnBsYW5lP3QuaHlwZXJwbGFuZS5sZW5ndGg6MCl9KSksbD1zLnplcm9zKG8pLG09cy5yYW5nZShvKS5tYXAoKGZ1bmN0aW9uKCl7cmV0dXJuWy0xLC0xXX0pKSx1PXMucmFuZ2UoaSkubWFwKChmdW5jdGlvbigpe3JldHVybiBzLnJhbmdlKG4pLm1hcCgoZnVuY3Rpb24oKXtyZXR1cm4tMX0pKX0pKTtyZXR1cm4gYyh0LGEsbCxtLHUsMCwwKSxuZXcgcihhLGwsbSx1KX0pKHQsaSl9KSl9LGUubWFrZUxlYWZBcnJheT1mdW5jdGlvbiBmKHQpe3ZhciBlLG47aWYodC5sZW5ndGg+MCl7dmFyIGE9W107dHJ5e2Zvcih2YXIgcj1pKHQpLHM9ci5uZXh0KCk7IXMuZG9uZTtzPXIubmV4dCgpKWEucHVzaC5hcHBseShhLG8ocy52YWx1ZS5pbmRpY2VzKSl9Y2F0Y2godCl7ZT17ZXJyb3I6dH19ZmluYWxseXt0cnl7cyYmIXMuZG9uZSYmKG49ci5yZXR1cm4pJiZuLmNhbGwocil9ZmluYWxseXtpZihlKXRocm93IGUuZXJyb3J9fXJldHVybiBhfXJldHVybltbLTFdXX0sZS5zZWFyY2hGbGF0VHJlZT1mdW5jdGlvbiBnKHQsZSxuKXtmb3IodmFyIG89MDtlLmNoaWxkcmVuW29dWzBdPjA7KW89MD09PW0oZS5oeXBlcnBsYW5lc1tvXSxlLm9mZnNldHNbb10sdCxuKT9lLmNoaWxkcmVuW29dWzBdOmUuY2hpbGRyZW5bb11bMV07cmV0dXJuIGUuaW5kaWNlc1stMSplLmNoaWxkcmVuW29dWzBdXX19KSksbkN0PVl4KChmdW5jdGlvbih0LGUpe3ZhciBuPUd4JiZHeC5fX3ZhbHVlc3x8ZnVuY3Rpb24odCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdLG49MDtyZXR1cm4gZT9lLmNhbGwodCk6e25leHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdCYmbj49dC5sZW5ndGgmJih0PXZvaWQgMCkse3ZhbHVlOnQmJnRbbisrXSxkb25lOiF0fX19fSxvPUd4JiZHeC5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKHQpe2lmKHQmJnQuX19lc01vZHVsZSlyZXR1cm4gdDt2YXIgZT17fTtpZihudWxsIT10KWZvcih2YXIgbiBpbiB0KU9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbikmJihlW25dPXRbbl0pO3JldHVybiBlLmRlZmF1bHQ9dCxlfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGk9bygkX3QpLGE9byh0Q3QpLHI9byhlQ3QpLHM9byhRX3QpO2UubWFrZU5ORGVzY2VudD1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuIGZ1bmN0aW9uIG4obyxhLHIsbCxjLGQscCxtKXt2b2lkIDA9PT1sJiYobD0xMCksdm9pZCAwPT09YyYmKGM9NTApLHZvaWQgMD09PWQmJihkPS4wMDEpLHZvaWQgMD09PXAmJihwPS41KSx2b2lkIDA9PT1tJiYobT0hMCk7Zm9yKHZhciB1PW8ubGVuZ3RoLGY9aS5tYWtlSGVhcChvLmxlbmd0aCxyKSxnPTA7ZzxvLmxlbmd0aDtnKyspZm9yKHZhciBoPWkucmVqZWN0aW9uU2FtcGxlKHIsby5sZW5ndGgsZSksYj0wO2I8aC5sZW5ndGg7YisrKXt2YXIgeT10KG9bZ10sb1toW2JdXSk7aS5oZWFwUHVzaChmLGcseSxoW2JdLDEpLGkuaGVhcFB1c2goZixoW2JdLHksZywxKX1pZihtKWZvcih2YXIgXz0wO188YS5sZW5ndGg7XysrKWZvcihnPTA7ZzxhW19dLmxlbmd0aCYmIShhW19dW2ddPDApO2crKylmb3IoYj1nKzE7YjxhW19dLmxlbmd0aCYmIShhW19dW2JdPDApO2IrKyl5PXQob1thW19dW2ddXSxvW2FbX11bYl1dKSxpLmhlYXBQdXNoKGYsYVtfXVtnXSx5LGFbX11bYl0sMSksaS5oZWFwUHVzaChmLGFbX11bYl0seSxhW19dW2ddLDEpO2ZvcihfPTA7XzxsO18rKyl7dmFyIEM9aS5idWlsZENhbmRpZGF0ZXMoZix1LHIsYyxlKSxNPTA7Zm9yKGc9MDtnPHU7ZysrKWZvcihiPTA7YjxjO2IrKyl7dmFyIHY9TWF0aC5mbG9vcihDWzBdW2ddW2JdKTtpZighKHY8MHx8cy50YXVSYW5kKGUpPHApKWZvcih2YXIgeD0wO3g8Yzt4Kyspe3ZhciBPPU1hdGguZmxvb3IoQ1swXVtnXVt4XSk7TzwwfHwhQ1syXVtnXVtiXSYmIUNbMl1bZ11beF18fCh5PXQob1t2XSxvW09dKSxNKz1pLmhlYXBQdXNoKGYsdix5LE8sMSksTSs9aS5oZWFwUHVzaChmLE8seSx2LDEpKX19aWYoTTw9ZCpyKm8ubGVuZ3RoKWJyZWFrfXJldHVybiBpLmRlaGVhcFNvcnQoZil9fSxlLm1ha2VJbml0aWFsaXphdGlvbnM9ZnVuY3Rpb24gYyh0KXtyZXR1cm57aW5pdEZyb21SYW5kb206ZnVuY3Rpb24gZShuLG8sYSxyLGwpe2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKWZvcih2YXIgZD1zLnJlamVjdGlvblNhbXBsZShuLG8ubGVuZ3RoLGwpLHA9MDtwPGQubGVuZ3RoO3ArKylpZighKGRbcF08MCkpe3ZhciBtPXQob1tkW3BdXSxhW2NdKTtpLmhlYXBQdXNoKHIsYyxtLGRbcF0sMSl9fSxpbml0RnJvbVRyZWU6ZnVuY3Rpb24gbihlLG8sYSxzLGwpe2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKWZvcih2YXIgZD1yLnNlYXJjaEZsYXRUcmVlKGFbY10sZSxsKSxwPTA7cDxkLmxlbmd0aDtwKyspe2lmKGRbcF08MClyZXR1cm47dmFyIG09dChvW2RbcF1dLGFbY10pO2kuaGVhcFB1c2gocyxjLG0sZFtwXSwxKX19fX0sZS5tYWtlSW5pdGlhbGl6ZWROTlNlYXJjaD1mdW5jdGlvbiBkKHQpe3JldHVybiBmdW5jdGlvbiBlKG8scixzLGwpe2Zvcih2YXIgYyxkLHA9YS5nZXRDU1IociksbT1wLmluZGljZXMsdT1wLmluZHB0cixmPTA7ZjxsLmxlbmd0aDtmKyspZm9yKHZhciBnPW5ldyBTZXQoc1swXVtmXSk7Oyl7dmFyIGg9aS5zbWFsbGVzdEZsYWdnZWQocyxmKTtpZigtMT09PWgpYnJlYWs7dmFyIGI9bS5zbGljZSh1W2hdLHVbaCsxXSk7dHJ5e2Zvcih2YXIgeT1uKGIpLF89eS5uZXh0KCk7IV8uZG9uZTtfPXkubmV4dCgpKXt2YXIgQz1fLnZhbHVlO2lmKEMhPT1oJiYtMSE9PUMmJiFnLmhhcyhDKSl7dmFyIE09dChvW0NdLGxbZl0pO2kudW5jaGVja2VkSGVhcFB1c2gocyxmLE0sQywxKSxnLmFkZChDKX19fWNhdGNoKHQpe2M9e2Vycm9yOnR9fWZpbmFsbHl7dHJ5e18mJiFfLmRvbmUmJihkPXkucmV0dXJuKSYmZC5jYWxsKHkpfWZpbmFsbHl7aWYoYyl0aHJvdyBjLmVycm9yfX19cmV0dXJuIHN9fSxlLmluaXRpYWxpemVTZWFyY2g9ZnVuY3Rpb24gcCh0LGUsbyxhLHIscyxsKXt2YXIgYyxkLHA9aS5tYWtlSGVhcChvLmxlbmd0aCxhKTtpZihyKGEsZSxvLHAsbCksdCl0cnl7Zm9yKHZhciBtPW4odCksdT1tLm5leHQoKTshdS5kb25lO3U9bS5uZXh0KCkpcyh1LnZhbHVlLGUsbyxwLGwpfWNhdGNoKHQpe2M9e2Vycm9yOnR9fWZpbmFsbHl7dHJ5e3UmJiF1LmRvbmUmJihkPW0ucmV0dXJuKSYmZC5jYWxsKG0pfWZpbmFsbHl7aWYoYyl0aHJvdyBjLmVycm9yfX1yZXR1cm4gcH19KSk7Y29uc3Qgb0N0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7ZnVuY3Rpb24gaUN0KHQpe3JldHVybiBvQ3QuY2FsbCh0KS5lbmRzV2l0aCgiQXJyYXldIil9ZnVuY3Rpb24gYUN0KHQsZSxuKXtsZXQgbz0wO2NvbnN0IGk9bihlKTtmb3IobGV0IGU9MDtlPHQueC5sZW5ndGg7ZSsrKW8rPU1hdGguYWJzKHQueVtlXS1pKHQueFtlXSkpO3JldHVybiBvfWNvbnN0IHJDdD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO2Z1bmN0aW9uIHNDdCh0KXtyZXR1cm4gckN0LmNhbGwodCkuZW5kc1dpdGgoIkFycmF5XSIpfWZ1bmN0aW9uIGxDdCh0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307aWYoIXNDdCh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnB1dCBtdXN0IGJlIGFuIGFycmF5Iik7aWYoMD09PXQubGVuZ3RoKXRocm93IG5ldyBUeXBlRXJyb3IoImlucHV0IG11c3Qgbm90IGJlIGVtcHR5Iik7dmFyIG49ZS5mcm9tSW5kZXgsbz12b2lkIDA9PT1uPzA6bixpPWUudG9JbmRleCxhPXZvaWQgMD09PWk/dC5sZW5ndGg6aTtpZihvPDB8fG8+PXQubGVuZ3RofHwhTnVtYmVyLmlzSW50ZWdlcihvKSl0aHJvdyBuZXcgRXJyb3IoImZyb21JbmRleCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciBzbWFsbGVyIHRoYW4gbGVuZ3RoIik7aWYoYTw9b3x8YT50Lmxlbmd0aHx8IU51bWJlci5pc0ludGVnZXIoYSkpdGhyb3cgbmV3IEVycm9yKCJ0b0luZGV4IG11c3QgYmUgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gZnJvbUluZGV4IGFuZCBhdCBtb3N0IGVxdWFsIHRvIGxlbmd0aCIpO2Zvcih2YXIgcj10W29dLHM9bysxO3M8YTtzKyspdFtzXT5yJiYocj10W3NdKTtyZXR1cm4gcn1mdW5jdGlvbiBjQ3QodCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O2lmKCFzQ3QodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW5wdXQgbXVzdCBiZSBhbiBhcnJheSIpO2lmKDA9PT10Lmxlbmd0aCl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnB1dCBtdXN0IG5vdCBiZSBlbXB0eSIpO3ZhciBuPWUuZnJvbUluZGV4LG89dm9pZCAwPT09bj8wOm4saT1lLnRvSW5kZXgsYT12b2lkIDA9PT1pP3QubGVuZ3RoOmk7aWYobzwwfHxvPj10Lmxlbmd0aHx8IU51bWJlci5pc0ludGVnZXIobykpdGhyb3cgbmV3IEVycm9yKCJmcm9tSW5kZXggbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgc21hbGxlciB0aGFuIGxlbmd0aCIpO2lmKGE8PW98fGE+dC5sZW5ndGh8fCFOdW1iZXIuaXNJbnRlZ2VyKGEpKXRocm93IG5ldyBFcnJvcigidG9JbmRleCBtdXN0IGJlIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIGZyb21JbmRleCBhbmQgYXQgbW9zdCBlcXVhbCB0byBsZW5ndGgiKTtmb3IodmFyIHI9dFtvXSxzPW8rMTtzPGE7cysrKXRbc108ciYmKHI9dFtzXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gZEN0KHQpe3ZhciBlLG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O2lmKCFzQ3QodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW5wdXQgbXVzdCBiZSBhbiBhcnJheSIpO2lmKDA9PT10Lmxlbmd0aCl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnB1dCBtdXN0IG5vdCBiZSBlbXB0eSIpO2lmKHZvaWQgMCE9PW4ub3V0cHV0KXtpZighc0N0KG4ub3V0cHV0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJvdXRwdXQgb3B0aW9uIG11c3QgYmUgYW4gYXJyYXkgaWYgc3BlY2lmaWVkIik7ZT1uLm91dHB1dH1lbHNlIGU9bmV3IEFycmF5KHQubGVuZ3RoKTt2YXIgbz1jQ3QodCksaT1sQ3QodCk7aWYobz09PWkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm1pbmltdW0gYW5kIG1heGltdW0gaW5wdXQgdmFsdWVzIGFyZSBlcXVhbC4gQ2Fubm90IHJlc2NhbGUgYSBjb25zdGFudCBhcnJheSIpO3ZhciBhPW4ubWluLHI9dm9pZCAwPT09YT9uLmF1dG9NaW5NYXg/bzowOmEscz1uLm1heCxsPXZvaWQgMD09PXM/bi5hdXRvTWluTWF4P2k6MTpzO2lmKHI+PWwpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm1pbiBvcHRpb24gbXVzdCBiZSBzbWFsbGVyIHRoYW4gbWF4IG9wdGlvbiIpO2Zvcih2YXIgYz0obC1yKS8oaS1vKSxkPTA7ZDx0Lmxlbmd0aDtkKyspZVtkXT0odFtkXS1vKSpjK3I7cmV0dXJuIGV9Y29uc3QgcEN0PSIgIi5yZXBlYXQoMiksbUN0PSIgIi5yZXBlYXQoNCk7ZnVuY3Rpb24gdUN0KHQsZT17fSl7Y29uc3R7bWF4Um93czpuPTE1LG1heENvbHVtbnM6bz0xMCxtYXhOdW1TaXplOmk9OH09ZTtyZXR1cm5gJHt0LmNvbnN0cnVjdG9yLm5hbWV9IHtcbiR7cEN0fVtcbiR7bUN0fSR7KGZ1bmN0aW9uIGEodCxlLG4sbyl7Y29uc3R7cm93czppLGNvbHVtbnM6YX09dCxyPU1hdGgubWluKGksZSkscz1NYXRoLm1pbihhLG4pLGw9W107Zm9yKGxldCBlPTA7ZTxyO2UrKyl7bGV0IG49W107Zm9yKGxldCBpPTA7aTxzO2krKyluLnB1c2goZkN0KHQuZ2V0KGUsaSksbykpO2wucHVzaChgJHtuLmpvaW4oIiAiKX1gKX1yZXR1cm4gcyE9PWEmJihsW2wubGVuZ3RoLTFdKz1gIC4uLiAke2Etbn0gbW9yZSBjb2x1bW5zYCksciE9PWkmJmwucHVzaChgLi4uICR7aS1lfSBtb3JlIHJvd3NgKSxsLmpvaW4oYFxuJHttQ3R9YCl9KSh0LG4sbyxpKX1cbiR7cEN0fV1cbiR7cEN0fXJvd3M6ICR7dC5yb3dzfVxuJHtwQ3R9Y29sdW1uczogJHt0LmNvbHVtbnN9XG59YH1mdW5jdGlvbiBmQ3QodCxlKXtjb25zdCBuPVN0cmluZyh0KTtpZihuLmxlbmd0aDw9ZSlyZXR1cm4gbi5wYWRFbmQoZSwiICIpO2NvbnN0IG89dC50b1ByZWNpc2lvbihlLTIpO2lmKG8ubGVuZ3RoPD1lKXJldHVybiBvO2NvbnN0IGk9dC50b0V4cG9uZW50aWFsKGUtMiksYT1pLmluZGV4T2YoImUiKSxyPWkuc2xpY2UoYSk7cmV0dXJuIGkuc2xpY2UoMCxlLXIubGVuZ3RoKStyfWZ1bmN0aW9uIGdDdCh0LGUsbil7aWYoZTwwfHxlPihuP3Qucm93czp0LnJvd3MtMSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlJvdyBpbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBoQ3QodCxlLG4pe2lmKGU8MHx8ZT4obj90LmNvbHVtbnM6dC5jb2x1bW5zLTEpKXRocm93IG5ldyBSYW5nZUVycm9yKCJDb2x1bW4gaW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gYkN0KHQsZSl7aWYoZS50bzFEQXJyYXkmJihlPWUudG8xREFycmF5KCkpLGUubGVuZ3RoIT09dC5jb2x1bW5zKXRocm93IG5ldyBSYW5nZUVycm9yKCJ2ZWN0b3Igc2l6ZSBtdXN0IGJlIHRoZSBzYW1lIGFzIHRoZSBudW1iZXIgb2YgY29sdW1ucyIpO3JldHVybiBlfWZ1bmN0aW9uIHlDdCh0LGUpe2lmKGUudG8xREFycmF5JiYoZT1lLnRvMURBcnJheSgpKSxlLmxlbmd0aCE9PXQucm93cyl0aHJvdyBuZXcgUmFuZ2VFcnJvcigidmVjdG9yIHNpemUgbXVzdCBiZSB0aGUgc2FtZSBhcyB0aGUgbnVtYmVyIG9mIHJvd3MiKTtyZXR1cm4gZX1mdW5jdGlvbiBfQ3QodCxlKXtpZigib2JqZWN0IiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigidW5leHBlY3RlZCB0eXBlIGZvciByb3cgaW5kaWNlcyIpO2lmKGUuc29tZSgoZT0+ZTwwfHxlPj10LnJvd3MpKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigicm93IGluZGljZXMgYXJlIG91dCBvZiByYW5nZSIpO3JldHVybiBBcnJheS5pc0FycmF5KGUpfHwoZT1BcnJheS5mcm9tKGUpKSxlfWZ1bmN0aW9uIENDdCh0LGUpe2lmKCJvYmplY3QiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ1bmV4cGVjdGVkIHR5cGUgZm9yIGNvbHVtbiBpbmRpY2VzIik7aWYoZS5zb21lKChlPT5lPDB8fGU+PXQuY29sdW1ucykpKXRocm93IG5ldyBSYW5nZUVycm9yKCJjb2x1bW4gaW5kaWNlcyBhcmUgb3V0IG9mIHJhbmdlIik7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSl8fChlPUFycmF5LmZyb20oZSkpLGV9ZnVuY3Rpb24gTUN0KHQsZSxuLG8saSl7aWYoNSE9PWFyZ3VtZW50cy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoImV4cGVjdGVkIDQgYXJndW1lbnRzIik7aWYoeEN0KCJzdGFydFJvdyIsZSkseEN0KCJlbmRSb3ciLG4pLHhDdCgic3RhcnRDb2x1bW4iLG8pLHhDdCgiZW5kQ29sdW1uIixpKSxlPm58fG8+aXx8ZTwwfHxlPj10LnJvd3N8fG48MHx8bj49dC5yb3dzfHxvPDB8fG8+PXQuY29sdW1uc3x8aTwwfHxpPj10LmNvbHVtbnMpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlN1Ym1hdHJpeCBpbmRpY2VzIGFyZSBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiB2Q3QodCxlPTApe2xldCBuPVtdO2ZvcihsZXQgbz0wO288dDtvKyspbi5wdXNoKGUpO3JldHVybiBufWZ1bmN0aW9uIHhDdCh0LGUpe2lmKCJudW1iZXIiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKGAke3R9IG11c3QgYmUgYSBudW1iZXJgKX1mdW5jdGlvbiBPQ3QodCl7aWYodC5pc0VtcHR5KCkpdGhyb3cgbmV3IEVycm9yKCJFbXB0eSBtYXRyaXggaGFzIG5vIGVsZW1lbnRzIHRvIGluZGV4Iil9Y2xhc3MgUEN0e3N0YXRpYyBmcm9tMURBcnJheSh0LGUsbil7aWYodCplIT09bi5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoImRhdGEgbGVuZ3RoIGRvZXMgbm90IG1hdGNoIGdpdmVuIGRpbWVuc2lvbnMiKTtsZXQgbz1uZXcgU0N0KHQsZSk7Zm9yKGxldCBpPTA7aTx0O2krKylmb3IobGV0IHQ9MDt0PGU7dCsrKW8uc2V0KGksdCxuW2kqZSt0XSk7cmV0dXJuIG99c3RhdGljIHJvd1ZlY3Rvcih0KXtsZXQgZT1uZXcgU0N0KDEsdC5sZW5ndGgpO2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKWUuc2V0KDAsbix0W25dKTtyZXR1cm4gZX1zdGF0aWMgY29sdW1uVmVjdG9yKHQpe2xldCBlPW5ldyBTQ3QodC5sZW5ndGgsMSk7Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspZS5zZXQobiwwLHRbbl0pO3JldHVybiBlfXN0YXRpYyB6ZXJvcyh0LGUpe3JldHVybiBuZXcgU0N0KHQsZSl9c3RhdGljIG9uZXModCxlKXtyZXR1cm4gbmV3IFNDdCh0LGUpLmZpbGwoMSl9c3RhdGljIHJhbmQodCxlLG49e30pe2lmKCJvYmplY3QiIT10eXBlb2Ygbil0aHJvdyBuZXcgVHlwZUVycm9yKCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0Iik7Y29uc3R7cmFuZG9tOm89TWF0aC5yYW5kb219PW47bGV0IGk9bmV3IFNDdCh0LGUpO2ZvcihsZXQgbj0wO248dDtuKyspZm9yKGxldCB0PTA7dDxlO3QrKylpLnNldChuLHQsbygpKTtyZXR1cm4gaX1zdGF0aWMgcmFuZEludCh0LGUsbj17fSl7aWYoIm9iamVjdCIhPXR5cGVvZiBuKXRocm93IG5ldyBUeXBlRXJyb3IoIm9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QiKTtjb25zdHttaW46bz0wLG1heDppPTFlMyxyYW5kb206YT1NYXRoLnJhbmRvbX09bjtpZighTnVtYmVyLmlzSW50ZWdlcihvKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJtaW4gbXVzdCBiZSBhbiBpbnRlZ2VyIik7aWYoIU51bWJlci5pc0ludGVnZXIoaSkpdGhyb3cgbmV3IFR5cGVFcnJvcigibWF4IG11c3QgYmUgYW4gaW50ZWdlciIpO2lmKG8+PWkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm1pbiBtdXN0IGJlIHNtYWxsZXIgdGhhbiBtYXgiKTtsZXQgcj1pLW8scz1uZXcgU0N0KHQsZSk7Zm9yKGxldCBuPTA7bjx0O24rKylmb3IobGV0IHQ9MDt0PGU7dCsrKXtsZXQgZT1vK01hdGgucm91bmQoYSgpKnIpO3Muc2V0KG4sdCxlKX1yZXR1cm4gc31zdGF0aWMgZXllKHQsZSxuKXt2b2lkIDA9PT1lJiYoZT10KSx2b2lkIDA9PT1uJiYobj0xKTtsZXQgbz1NYXRoLm1pbih0LGUpLGk9dGhpcy56ZXJvcyh0LGUpO2ZvcihsZXQgdD0wO3Q8bzt0KyspaS5zZXQodCx0LG4pO3JldHVybiBpfXN0YXRpYyBkaWFnKHQsZSxuKXtsZXQgbz10Lmxlbmd0aDt2b2lkIDA9PT1lJiYoZT1vKSx2b2lkIDA9PT1uJiYobj1lKTtsZXQgaT1NYXRoLm1pbihvLGUsbiksYT10aGlzLnplcm9zKGUsbik7Zm9yKGxldCBlPTA7ZTxpO2UrKylhLnNldChlLGUsdFtlXSk7cmV0dXJuIGF9c3RhdGljIG1pbih0LGUpe3Q9dGhpcy5jaGVja01hdHJpeCh0KSxlPXRoaXMuY2hlY2tNYXRyaXgoZSk7bGV0IG49dC5yb3dzLG89dC5jb2x1bW5zLGk9bmV3IFNDdChuLG8pO2ZvcihsZXQgYT0wO2E8bjthKyspZm9yKGxldCBuPTA7bjxvO24rKylpLnNldChhLG4sTWF0aC5taW4odC5nZXQoYSxuKSxlLmdldChhLG4pKSk7cmV0dXJuIGl9c3RhdGljIG1heCh0LGUpe3Q9dGhpcy5jaGVja01hdHJpeCh0KSxlPXRoaXMuY2hlY2tNYXRyaXgoZSk7bGV0IG49dC5yb3dzLG89dC5jb2x1bW5zLGk9bmV3IHRoaXMobixvKTtmb3IobGV0IGE9MDthPG47YSsrKWZvcihsZXQgbj0wO248bztuKyspaS5zZXQoYSxuLE1hdGgubWF4KHQuZ2V0KGEsbiksZS5nZXQoYSxuKSkpO3JldHVybiBpfXN0YXRpYyBjaGVja01hdHJpeCh0KXtyZXR1cm4gUEN0LmlzTWF0cml4KHQpP3Q6bmV3IFNDdCh0KX1zdGF0aWMgaXNNYXRyaXgodCl7cmV0dXJuIG51bGwhPXQmJiJNYXRyaXgiPT09dC5rbGFzc31nZXQgc2l6ZSgpe3JldHVybiB0aGlzLnJvd3MqdGhpcy5jb2x1bW5zfWFwcGx5KHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIG11c3QgYmUgYSBmdW5jdGlvbiIpO2ZvcihsZXQgZT0wO2U8dGhpcy5yb3dzO2UrKylmb3IobGV0IG49MDtuPHRoaXMuY29sdW1ucztuKyspdC5jYWxsKHRoaXMsZSxuKTtyZXR1cm4gdGhpc310bzFEQXJyYXkoKXtsZXQgdD1bXTtmb3IobGV0IGU9MDtlPHRoaXMucm93cztlKyspZm9yKGxldCBuPTA7bjx0aGlzLmNvbHVtbnM7bisrKXQucHVzaCh0aGlzLmdldChlLG4pKTtyZXR1cm4gdH10bzJEQXJyYXkoKXtsZXQgdD1bXTtmb3IobGV0IGU9MDtlPHRoaXMucm93cztlKyspe3QucHVzaChbXSk7Zm9yKGxldCBuPTA7bjx0aGlzLmNvbHVtbnM7bisrKXRbZV0ucHVzaCh0aGlzLmdldChlLG4pKX1yZXR1cm4gdH10b0pTT04oKXtyZXR1cm4gdGhpcy50bzJEQXJyYXkoKX1pc1Jvd1ZlY3Rvcigpe3JldHVybiAxPT09dGhpcy5yb3dzfWlzQ29sdW1uVmVjdG9yKCl7cmV0dXJuIDE9PT10aGlzLmNvbHVtbnN9aXNWZWN0b3IoKXtyZXR1cm4gMT09PXRoaXMucm93c3x8MT09PXRoaXMuY29sdW1uc31pc1NxdWFyZSgpe3JldHVybiB0aGlzLnJvd3M9PT10aGlzLmNvbHVtbnN9aXNFbXB0eSgpe3JldHVybiAwPT09dGhpcy5yb3dzfHwwPT09dGhpcy5jb2x1bW5zfWlzU3ltbWV0cmljKCl7aWYodGhpcy5pc1NxdWFyZSgpKXtmb3IobGV0IHQ9MDt0PHRoaXMucm93czt0KyspZm9yKGxldCBlPTA7ZTw9dDtlKyspaWYodGhpcy5nZXQodCxlKSE9PXRoaXMuZ2V0KGUsdCkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuITF9aXNFY2hlbG9uRm9ybSgpe2xldCB0PTAsZT0wLG49LTEsbz0hMCxpPSExO2Zvcig7dDx0aGlzLnJvd3MmJm87KXtmb3IoZT0wLGk9ITE7ZTx0aGlzLmNvbHVtbnMmJiExPT09aTspMD09PXRoaXMuZ2V0KHQsZSk/ZSsrOjE9PT10aGlzLmdldCh0LGUpJiZlPm4/KGk9ITAsbj1lKToobz0hMSxpPSEwKTt0Kyt9cmV0dXJuIG99aXNSZWR1Y2VkRWNoZWxvbkZvcm0oKXtsZXQgdD0wLGU9MCxuPS0xLG89ITAsaT0hMTtmb3IoO3Q8dGhpcy5yb3dzJiZvOyl7Zm9yKGU9MCxpPSExO2U8dGhpcy5jb2x1bW5zJiYhMT09PWk7KTA9PT10aGlzLmdldCh0LGUpP2UrKzoxPT09dGhpcy5nZXQodCxlKSYmZT5uPyhpPSEwLG49ZSk6KG89ITEsaT0hMCk7Zm9yKGxldCBuPWUrMTtuPHRoaXMucm93cztuKyspMCE9PXRoaXMuZ2V0KHQsbikmJihvPSExKTt0Kyt9cmV0dXJuIG99ZWNoZWxvbkZvcm0oKXtsZXQgdD10aGlzLmNsb25lKCksZT0wLG49MDtmb3IoO2U8dC5yb3dzJiZuPHQuY29sdW1uczspe2xldCBvPWU7Zm9yKGxldCBpPWU7aTx0LnJvd3M7aSsrKXQuZ2V0KGksbik+dC5nZXQobyxuKSYmKG89aSk7aWYoMD09PXQuZ2V0KG8sbikpbisrO2Vsc2V7dC5zd2FwUm93cyhlLG8pO2xldCBpPXQuZ2V0KGUsbik7Zm9yKGxldCBvPW47bzx0LmNvbHVtbnM7bysrKXQuc2V0KGUsbyx0LmdldChlLG8pL2kpO2ZvcihsZXQgbz1lKzE7bzx0LnJvd3M7bysrKXtsZXQgaT10LmdldChvLG4pL3QuZ2V0KGUsbik7dC5zZXQobyxuLDApO2ZvcihsZXQgYT1uKzE7YTx0LmNvbHVtbnM7YSsrKXQuc2V0KG8sYSx0LmdldChvLGEpLXQuZ2V0KGUsYSkqaSl9ZSsrLG4rK319cmV0dXJuIHR9cmVkdWNlZEVjaGVsb25Gb3JtKCl7bGV0IHQ9dGhpcy5lY2hlbG9uRm9ybSgpLGU9dC5jb2x1bW5zLG49dC5yb3dzLG89bi0xO2Zvcig7bz49MDspaWYoMD09PXQubWF4Um93KG8pKW8tLTtlbHNle2xldCBpPTAsYT0hMTtmb3IoO2k8biYmITE9PT1hOykxPT09dC5nZXQobyxpKT9hPSEwOmkrKztmb3IobGV0IG49MDtuPG87bisrKXtsZXQgYT10LmdldChuLGkpO2ZvcihsZXQgcj1pO3I8ZTtyKyspe2xldCBlPXQuZ2V0KG4sciktYSp0LmdldChvLHIpO3Quc2V0KG4scixlKX19by0tfXJldHVybiB0fXNldCgpe3Rocm93IG5ldyBFcnJvcigic2V0IG1ldGhvZCBpcyB1bmltcGxlbWVudGVkIil9Z2V0KCl7dGhyb3cgbmV3IEVycm9yKCJnZXQgbWV0aG9kIGlzIHVuaW1wbGVtZW50ZWQiKX1yZXBlYXQodD17fSl7aWYoIm9iamVjdCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoIm9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QiKTtjb25zdHtyb3dzOmU9MSxjb2x1bW5zOm49MX09dDtpZighTnVtYmVyLmlzSW50ZWdlcihlKXx8ZTw9MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJyb3dzIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIik7aWYoIU51bWJlci5pc0ludGVnZXIobil8fG48PTApdGhyb3cgbmV3IFR5cGVFcnJvcigiY29sdW1ucyBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciIpO2xldCBvPW5ldyBTQ3QodGhpcy5yb3dzKmUsdGhpcy5jb2x1bW5zKm4pO2ZvcihsZXQgdD0wO3Q8ZTt0KyspZm9yKGxldCBlPTA7ZTxuO2UrKylvLnNldFN1Yk1hdHJpeCh0aGlzLHRoaXMucm93cyp0LHRoaXMuY29sdW1ucyplKTtyZXR1cm4gb31maWxsKHQpe2ZvcihsZXQgZT0wO2U8dGhpcy5yb3dzO2UrKylmb3IobGV0IG49MDtuPHRoaXMuY29sdW1ucztuKyspdGhpcy5zZXQoZSxuLHQpO3JldHVybiB0aGlzfW5lZygpe3JldHVybiB0aGlzLm11bFMoLTEpfWdldFJvdyh0KXtnQ3QodGhpcyx0KTtsZXQgZT1bXTtmb3IobGV0IG49MDtuPHRoaXMuY29sdW1ucztuKyspZS5wdXNoKHRoaXMuZ2V0KHQsbikpO3JldHVybiBlfWdldFJvd1ZlY3Rvcih0KXtyZXR1cm4gU0N0LnJvd1ZlY3Rvcih0aGlzLmdldFJvdyh0KSl9c2V0Um93KHQsZSl7Z0N0KHRoaXMsdCksZT1iQ3QodGhpcyxlKTtmb3IobGV0IG49MDtuPHRoaXMuY29sdW1ucztuKyspdGhpcy5zZXQodCxuLGVbbl0pO3JldHVybiB0aGlzfXN3YXBSb3dzKHQsZSl7Z0N0KHRoaXMsdCksZ0N0KHRoaXMsZSk7Zm9yKGxldCBuPTA7bjx0aGlzLmNvbHVtbnM7bisrKXtsZXQgbz10aGlzLmdldCh0LG4pO3RoaXMuc2V0KHQsbix0aGlzLmdldChlLG4pKSx0aGlzLnNldChlLG4sbyl9cmV0dXJuIHRoaXN9Z2V0Q29sdW1uKHQpe2hDdCh0aGlzLHQpO2xldCBlPVtdO2ZvcihsZXQgbj0wO248dGhpcy5yb3dzO24rKyllLnB1c2godGhpcy5nZXQobix0KSk7cmV0dXJuIGV9Z2V0Q29sdW1uVmVjdG9yKHQpe3JldHVybiBTQ3QuY29sdW1uVmVjdG9yKHRoaXMuZ2V0Q29sdW1uKHQpKX1zZXRDb2x1bW4odCxlKXtoQ3QodGhpcyx0KSxlPXlDdCh0aGlzLGUpO2ZvcihsZXQgbj0wO248dGhpcy5yb3dzO24rKyl0aGlzLnNldChuLHQsZVtuXSk7cmV0dXJuIHRoaXN9c3dhcENvbHVtbnModCxlKXtoQ3QodGhpcyx0KSxoQ3QodGhpcyxlKTtmb3IobGV0IG49MDtuPHRoaXMucm93cztuKyspe2xldCBvPXRoaXMuZ2V0KG4sdCk7dGhpcy5zZXQobix0LHRoaXMuZ2V0KG4sZSkpLHRoaXMuc2V0KG4sZSxvKX1yZXR1cm4gdGhpc31hZGRSb3dWZWN0b3IodCl7dD1iQ3QodGhpcyx0KTtmb3IobGV0IGU9MDtlPHRoaXMucm93cztlKyspZm9yKGxldCBuPTA7bjx0aGlzLmNvbHVtbnM7bisrKXRoaXMuc2V0KGUsbix0aGlzLmdldChlLG4pK3Rbbl0pO3JldHVybiB0aGlzfXN1YlJvd1ZlY3Rvcih0KXt0PWJDdCh0aGlzLHQpO2ZvcihsZXQgZT0wO2U8dGhpcy5yb3dzO2UrKylmb3IobGV0IG49MDtuPHRoaXMuY29sdW1ucztuKyspdGhpcy5zZXQoZSxuLHRoaXMuZ2V0KGUsbiktdFtuXSk7cmV0dXJuIHRoaXN9bXVsUm93VmVjdG9yKHQpe3Q9YkN0KHRoaXMsdCk7Zm9yKGxldCBlPTA7ZTx0aGlzLnJvd3M7ZSsrKWZvcihsZXQgbj0wO248dGhpcy5jb2x1bW5zO24rKyl0aGlzLnNldChlLG4sdGhpcy5nZXQoZSxuKSp0W25dKTtyZXR1cm4gdGhpc31kaXZSb3dWZWN0b3IodCl7dD1iQ3QodGhpcyx0KTtmb3IobGV0IGU9MDtlPHRoaXMucm93cztlKyspZm9yKGxldCBuPTA7bjx0aGlzLmNvbHVtbnM7bisrKXRoaXMuc2V0KGUsbix0aGlzLmdldChlLG4pL3Rbbl0pO3JldHVybiB0aGlzfWFkZENvbHVtblZlY3Rvcih0KXt0PXlDdCh0aGlzLHQpO2ZvcihsZXQgZT0wO2U8dGhpcy5yb3dzO2UrKylmb3IobGV0IG49MDtuPHRoaXMuY29sdW1ucztuKyspdGhpcy5zZXQoZSxuLHRoaXMuZ2V0KGUsbikrdFtlXSk7cmV0dXJuIHRoaXN9c3ViQ29sdW1uVmVjdG9yKHQpe3Q9eUN0KHRoaXMsdCk7Zm9yKGxldCBlPTA7ZTx0aGlzLnJvd3M7ZSsrKWZvcihsZXQgbj0wO248dGhpcy5jb2x1bW5zO24rKyl0aGlzLnNldChlLG4sdGhpcy5nZXQoZSxuKS10W2VdKTtyZXR1cm4gdGhpc31tdWxDb2x1bW5WZWN0b3IodCl7dD15Q3QodGhpcyx0KTtmb3IobGV0IGU9MDtlPHRoaXMucm93cztlKyspZm9yKGxldCBuPTA7bjx0aGlzLmNvbHVtbnM7bisrKXRoaXMuc2V0KGUsbix0aGlzLmdldChlLG4pKnRbZV0pO3JldHVybiB0aGlzfWRpdkNvbHVtblZlY3Rvcih0KXt0PXlDdCh0aGlzLHQpO2ZvcihsZXQgZT0wO2U8dGhpcy5yb3dzO2UrKylmb3IobGV0IG49MDtuPHRoaXMuY29sdW1ucztuKyspdGhpcy5zZXQoZSxuLHRoaXMuZ2V0KGUsbikvdFtlXSk7cmV0dXJuIHRoaXN9bXVsUm93KHQsZSl7Z0N0KHRoaXMsdCk7Zm9yKGxldCBuPTA7bjx0aGlzLmNvbHVtbnM7bisrKXRoaXMuc2V0KHQsbix0aGlzLmdldCh0LG4pKmUpO3JldHVybiB0aGlzfW11bENvbHVtbih0LGUpe2hDdCh0aGlzLHQpO2ZvcihsZXQgbj0wO248dGhpcy5yb3dzO24rKyl0aGlzLnNldChuLHQsdGhpcy5nZXQobix0KSplKTtyZXR1cm4gdGhpc31tYXgoKXtpZih0aGlzLmlzRW1wdHkoKSlyZXR1cm4gTmFOO2xldCB0PXRoaXMuZ2V0KDAsMCk7Zm9yKGxldCBlPTA7ZTx0aGlzLnJvd3M7ZSsrKWZvcihsZXQgbj0wO248dGhpcy5jb2x1bW5zO24rKyl0aGlzLmdldChlLG4pPnQmJih0PXRoaXMuZ2V0KGUsbikpO3JldHVybiB0fW1heEluZGV4KCl7T0N0KHRoaXMpO2xldCB0PXRoaXMuZ2V0KDAsMCksZT1bMCwwXTtmb3IobGV0IG49MDtuPHRoaXMucm93cztuKyspZm9yKGxldCBvPTA7bzx0aGlzLmNvbHVtbnM7bysrKXRoaXMuZ2V0KG4sbyk+dCYmKHQ9dGhpcy5nZXQobixvKSxlWzBdPW4sZVsxXT1vKTtyZXR1cm4gZX1taW4oKXtpZih0aGlzLmlzRW1wdHkoKSlyZXR1cm4gTmFOO2xldCB0PXRoaXMuZ2V0KDAsMCk7Zm9yKGxldCBlPTA7ZTx0aGlzLnJvd3M7ZSsrKWZvcihsZXQgbj0wO248dGhpcy5jb2x1bW5zO24rKyl0aGlzLmdldChlLG4pPHQmJih0PXRoaXMuZ2V0KGUsbikpO3JldHVybiB0fW1pbkluZGV4KCl7T0N0KHRoaXMpO2xldCB0PXRoaXMuZ2V0KDAsMCksZT1bMCwwXTtmb3IobGV0IG49MDtuPHRoaXMucm93cztuKyspZm9yKGxldCBvPTA7bzx0aGlzLmNvbHVtbnM7bysrKXRoaXMuZ2V0KG4sbyk8dCYmKHQ9dGhpcy5nZXQobixvKSxlWzBdPW4sZVsxXT1vKTtyZXR1cm4gZX1tYXhSb3codCl7aWYoZ0N0KHRoaXMsdCksdGhpcy5pc0VtcHR5KCkpcmV0dXJuIE5hTjtsZXQgZT10aGlzLmdldCh0LDApO2ZvcihsZXQgbj0xO248dGhpcy5jb2x1bW5zO24rKyl0aGlzLmdldCh0LG4pPmUmJihlPXRoaXMuZ2V0KHQsbikpO3JldHVybiBlfW1heFJvd0luZGV4KHQpe2dDdCh0aGlzLHQpLE9DdCh0aGlzKTtsZXQgZT10aGlzLmdldCh0LDApLG49W3QsMF07Zm9yKGxldCBvPTE7bzx0aGlzLmNvbHVtbnM7bysrKXRoaXMuZ2V0KHQsbyk+ZSYmKGU9dGhpcy5nZXQodCxvKSxuWzFdPW8pO3JldHVybiBufW1pblJvdyh0KXtpZihnQ3QodGhpcyx0KSx0aGlzLmlzRW1wdHkoKSlyZXR1cm4gTmFOO2xldCBlPXRoaXMuZ2V0KHQsMCk7Zm9yKGxldCBuPTE7bjx0aGlzLmNvbHVtbnM7bisrKXRoaXMuZ2V0KHQsbik8ZSYmKGU9dGhpcy5nZXQodCxuKSk7cmV0dXJuIGV9bWluUm93SW5kZXgodCl7Z0N0KHRoaXMsdCksT0N0KHRoaXMpO2xldCBlPXRoaXMuZ2V0KHQsMCksbj1bdCwwXTtmb3IobGV0IG89MTtvPHRoaXMuY29sdW1ucztvKyspdGhpcy5nZXQodCxvKTxlJiYoZT10aGlzLmdldCh0LG8pLG5bMV09byk7cmV0dXJuIG59bWF4Q29sdW1uKHQpe2lmKGhDdCh0aGlzLHQpLHRoaXMuaXNFbXB0eSgpKXJldHVybiBOYU47bGV0IGU9dGhpcy5nZXQoMCx0KTtmb3IobGV0IG49MTtuPHRoaXMucm93cztuKyspdGhpcy5nZXQobix0KT5lJiYoZT10aGlzLmdldChuLHQpKTtyZXR1cm4gZX1tYXhDb2x1bW5JbmRleCh0KXtoQ3QodGhpcyx0KSxPQ3QodGhpcyk7bGV0IGU9dGhpcy5nZXQoMCx0KSxuPVswLHRdO2ZvcihsZXQgbz0xO288dGhpcy5yb3dzO28rKyl0aGlzLmdldChvLHQpPmUmJihlPXRoaXMuZ2V0KG8sdCksblswXT1vKTtyZXR1cm4gbn1taW5Db2x1bW4odCl7aWYoaEN0KHRoaXMsdCksdGhpcy5pc0VtcHR5KCkpcmV0dXJuIE5hTjtsZXQgZT10aGlzLmdldCgwLHQpO2ZvcihsZXQgbj0xO248dGhpcy5yb3dzO24rKyl0aGlzLmdldChuLHQpPGUmJihlPXRoaXMuZ2V0KG4sdCkpO3JldHVybiBlfW1pbkNvbHVtbkluZGV4KHQpe2hDdCh0aGlzLHQpLE9DdCh0aGlzKTtsZXQgZT10aGlzLmdldCgwLHQpLG49WzAsdF07Zm9yKGxldCBvPTE7bzx0aGlzLnJvd3M7bysrKXRoaXMuZ2V0KG8sdCk8ZSYmKGU9dGhpcy5nZXQobyx0KSxuWzBdPW8pO3JldHVybiBufWRpYWcoKXtsZXQgdD1NYXRoLm1pbih0aGlzLnJvd3MsdGhpcy5jb2x1bW5zKSxlPVtdO2ZvcihsZXQgbj0wO248dDtuKyspZS5wdXNoKHRoaXMuZ2V0KG4sbikpO3JldHVybiBlfW5vcm0odD0iZnJvYmVuaXVzIil7bGV0IGU9MDtpZigibWF4Ij09PXQpcmV0dXJuIHRoaXMubWF4KCk7aWYoImZyb2Jlbml1cyI9PT10KXtmb3IobGV0IHQ9MDt0PHRoaXMucm93czt0KyspZm9yKGxldCBuPTA7bjx0aGlzLmNvbHVtbnM7bisrKWUrPXRoaXMuZ2V0KHQsbikqdGhpcy5nZXQodCxuKTtyZXR1cm4gTWF0aC5zcXJ0KGUpfXRocm93IG5ldyBSYW5nZUVycm9yKGB1bmtub3duIG5vcm0gdHlwZTogJHt0fWApfWN1bXVsYXRpdmVTdW0oKXtsZXQgdD0wO2ZvcihsZXQgZT0wO2U8dGhpcy5yb3dzO2UrKylmb3IobGV0IG49MDtuPHRoaXMuY29sdW1ucztuKyspdCs9dGhpcy5nZXQoZSxuKSx0aGlzLnNldChlLG4sdCk7cmV0dXJuIHRoaXN9ZG90KHQpe1BDdC5pc01hdHJpeCh0KSYmKHQ9dC50bzFEQXJyYXkoKSk7bGV0IGU9dGhpcy50bzFEQXJyYXkoKTtpZihlLmxlbmd0aCE9PXQubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJ2ZWN0b3JzIGRvIG5vdCBoYXZlIHRoZSBzYW1lIHNpemUiKTtsZXQgbj0wO2ZvcihsZXQgbz0wO288ZS5sZW5ndGg7bysrKW4rPWVbb10qdFtvXTtyZXR1cm4gbn1tbXVsKHQpe3Q9U0N0LmNoZWNrTWF0cml4KHQpO2xldCBlPXRoaXMucm93cyxuPXRoaXMuY29sdW1ucyxvPXQuY29sdW1ucyxpPW5ldyBTQ3QoZSxvKSxhPW5ldyBGbG9hdDY0QXJyYXkobik7Zm9yKGxldCByPTA7cjxvO3IrKyl7Zm9yKGxldCBlPTA7ZTxuO2UrKylhW2VdPXQuZ2V0KGUscik7Zm9yKGxldCB0PTA7dDxlO3QrKyl7bGV0IGU9MDtmb3IobGV0IG89MDtvPG47bysrKWUrPXRoaXMuZ2V0KHQsbykqYVtvXTtpLnNldCh0LHIsZSl9fXJldHVybiBpfXN0cmFzc2VuMngyKHQpe3Q9U0N0LmNoZWNrTWF0cml4KHQpO2xldCBlPW5ldyBTQ3QoMiwyKTtjb25zdCBuPXRoaXMuZ2V0KDAsMCksbz10LmdldCgwLDApLGk9dGhpcy5nZXQoMCwxKSxhPXQuZ2V0KDAsMSkscj10aGlzLmdldCgxLDApLHM9dC5nZXQoMSwwKSxsPXRoaXMuZ2V0KDEsMSksYz10LmdldCgxLDEpLGQ9KG4rbCkqKG8rYykscD0ocitsKSpvLG09biooYS1jKSx1PWwqKHMtbyksZj0obitpKSpjLGc9bStmLGg9cCt1LGI9ZC1wK20rKHItbikqKG8rYSk7cmV0dXJuIGUuc2V0KDAsMCxkK3UtZisoaS1sKSoocytjKSksZS5zZXQoMCwxLGcpLGUuc2V0KDEsMCxoKSxlLnNldCgxLDEsYiksZX1zdHJhc3NlbjN4Myh0KXt0PVNDdC5jaGVja01hdHJpeCh0KTtsZXQgZT1uZXcgU0N0KDMsMyk7Y29uc3Qgbj10aGlzLmdldCgwLDApLG89dGhpcy5nZXQoMCwxKSxpPXRoaXMuZ2V0KDAsMiksYT10aGlzLmdldCgxLDApLHI9dGhpcy5nZXQoMSwxKSxzPXRoaXMuZ2V0KDEsMiksbD10aGlzLmdldCgyLDApLGM9dGhpcy5nZXQoMiwxKSxkPXRoaXMuZ2V0KDIsMikscD10LmdldCgwLDApLG09dC5nZXQoMCwxKSx1PXQuZ2V0KDAsMiksZj10LmdldCgxLDApLGc9dC5nZXQoMSwxKSxoPXQuZ2V0KDEsMiksYj10LmdldCgyLDApLHk9dC5nZXQoMiwxKSxfPXQuZ2V0KDIsMiksQz0obi1hKSooLW0rZyksTT0oLW4rYStyKSoocC1tK2cpLHY9KGErcikqKC1wK20pLHg9bipwLE89KC1uK2wrYykqKHAtdStoKSxQPSgtbitsKSoodS1oKSx3PShsK2MpKigtcCt1KSxrPSgtaStjK2QpKihnK2IteSksUz0oaS1kKSooZy15KSxEPWkqYixFPShjK2QpKigtYit5KSxBPSgtaStyK3MpKihoK2ItXyksUj0oaS1zKSooaC1fKSxUPShyK3MpKigtYitfKSxOPShuK28raS1hLXItYy1kKSpnK00rdit4K2srRCtFLEk9eCtPK3crKG4rbytpLXItcy1sLWMpKmgrRCtBK1Qsej1DK3IqKC1wK20rZi1nLWgtYitfKStNK3grRCtBK1IsSD1DK00rdit4K3MqeSxGPUQrQStSK1QrYSp1LEw9eCtPK1ArYyooLXArdStmLWctaC1iK3kpK2srUytELEI9aytTK0QrRStsKm0sVj14K08rUCt3K2QqXztyZXR1cm4gZS5zZXQoMCwwLHgrRCtvKmYpLGUuc2V0KDAsMSxOKSxlLnNldCgwLDIsSSksZS5zZXQoMSwwLHopLGUuc2V0KDEsMSxIKSxlLnNldCgxLDIsRiksZS5zZXQoMiwwLEwpLGUuc2V0KDIsMSxCKSxlLnNldCgyLDIsViksZX1tbXVsU3RyYXNzZW4odCl7dD1TQ3QuY2hlY2tNYXRyaXgodCk7bGV0IGU9dGhpcy5jbG9uZSgpLG49ZS5yb3dzLG89ZS5jb2x1bW5zLGk9dC5yb3dzLGE9dC5jb2x1bW5zO2Z1bmN0aW9uIHIodCxlLG4pe2lmKHQucm93cz09PWUmJnQuY29sdW1ucz09PW4pcmV0dXJuIHQ7e2xldCBvPVBDdC56ZXJvcyhlLG4pO3JldHVybiBvPW8uc2V0U3ViTWF0cml4KHQsMCwwKSxvfX1vIT09aSYmY29uc29sZS53YXJuKGBNdWx0aXBseWluZyAke259IHggJHtvfSBhbmQgJHtpfSB4ICR7YX0gbWF0cml4OiBkaW1lbnNpb25zIGRvIG5vdCBtYXRjaC5gKTtsZXQgcz1NYXRoLm1heChuLGkpLGw9TWF0aC5tYXgobyxhKTtyZXR1cm4gZT1yKGUscyxsKSwoZnVuY3Rpb24gdChlLG4sbyxpKXtpZihvPD01MTJ8fGk8PTUxMilyZXR1cm4gZS5tbXVsKG4pO28lMj09MSYmaSUyPT0xPyhlPXIoZSxvKzEsaSsxKSxuPXIobixvKzEsaSsxKSk6byUyPT0xPyhlPXIoZSxvKzEsaSksbj1yKG4sbysxLGkpKTppJTI9PTEmJihlPXIoZSxvLGkrMSksbj1yKG4sbyxpKzEpKTtsZXQgYT1wYXJzZUludChlLnJvd3MvMiwxMCkscz1wYXJzZUludChlLmNvbHVtbnMvMiwxMCksbD1lLnN1Yk1hdHJpeCgwLGEtMSwwLHMtMSksYz1uLnN1Yk1hdHJpeCgwLGEtMSwwLHMtMSksZD1lLnN1Yk1hdHJpeCgwLGEtMSxzLGUuY29sdW1ucy0xKSxwPW4uc3ViTWF0cml4KDAsYS0xLHMsbi5jb2x1bW5zLTEpLG09ZS5zdWJNYXRyaXgoYSxlLnJvd3MtMSwwLHMtMSksdT1uLnN1Yk1hdHJpeChhLG4ucm93cy0xLDAscy0xKSxmPWUuc3ViTWF0cml4KGEsZS5yb3dzLTEscyxlLmNvbHVtbnMtMSksZz1uLnN1Yk1hdHJpeChhLG4ucm93cy0xLHMsbi5jb2x1bW5zLTEpLGg9dChQQ3QuYWRkKGwsZiksUEN0LmFkZChjLGcpLGEscyksYj10KFBDdC5hZGQobSxmKSxjLGEscykseT10KGwsUEN0LnN1YihwLGcpLGEscyksXz10KGYsUEN0LnN1Yih1LGMpLGEscyksQz10KFBDdC5hZGQobCxkKSxnLGEscyksTT10KFBDdC5zdWIobSxsKSxQQ3QuYWRkKGMscCksYSxzKSx2PXQoUEN0LnN1YihkLGYpLFBDdC5hZGQodSxnKSxhLHMpLHg9UEN0LmFkZChoLF8pO3guc3ViKEMpLHguYWRkKHYpO2xldCBPPVBDdC5hZGQoeSxDKSxQPVBDdC5hZGQoYixfKSx3PVBDdC5zdWIoaCxiKTt3LmFkZCh5KSx3LmFkZChNKTtsZXQgaz1QQ3QuemVyb3MoMip4LnJvd3MsMip4LmNvbHVtbnMpO3JldHVybiBrPWsuc2V0U3ViTWF0cml4KHgsMCwwKSxrPWsuc2V0U3ViTWF0cml4KE8seC5yb3dzLDApLGs9ay5zZXRTdWJNYXRyaXgoUCwwLHguY29sdW1ucyksaz1rLnNldFN1Yk1hdHJpeCh3LHgucm93cyx4LmNvbHVtbnMpLGsuc3ViTWF0cml4KDAsby0xLDAsaS0xKX0pKGUsdD1yKHQscyxsKSxzLGwpfXNjYWxlUm93cyh0PXt9KXtpZigib2JqZWN0IiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigib3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCIpO2NvbnN0e21pbjplPTAsbWF4Om49MX09dDtpZighTnVtYmVyLmlzRmluaXRlKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIm1pbiBtdXN0IGJlIGEgbnVtYmVyIik7aWYoIU51bWJlci5pc0Zpbml0ZShuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJtYXggbXVzdCBiZSBhIG51bWJlciIpO2lmKGU+PW4pdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm1pbiBtdXN0IGJlIHNtYWxsZXIgdGhhbiBtYXgiKTtsZXQgbz1uZXcgU0N0KHRoaXMucm93cyx0aGlzLmNvbHVtbnMpO2ZvcihsZXQgdD0wO3Q8dGhpcy5yb3dzO3QrKyl7Y29uc3QgaT10aGlzLmdldFJvdyh0KTtpLmxlbmd0aD4wJiZkQ3QoaSx7bWluOmUsbWF4Om4sb3V0cHV0Oml9KSxvLnNldFJvdyh0LGkpfXJldHVybiBvfXNjYWxlQ29sdW1ucyh0PXt9KXtpZigib2JqZWN0IiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigib3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCIpO2NvbnN0e21pbjplPTAsbWF4Om49MX09dDtpZighTnVtYmVyLmlzRmluaXRlKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIm1pbiBtdXN0IGJlIGEgbnVtYmVyIik7aWYoIU51bWJlci5pc0Zpbml0ZShuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJtYXggbXVzdCBiZSBhIG51bWJlciIpO2lmKGU+PW4pdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm1pbiBtdXN0IGJlIHNtYWxsZXIgdGhhbiBtYXgiKTtsZXQgbz1uZXcgU0N0KHRoaXMucm93cyx0aGlzLmNvbHVtbnMpO2ZvcihsZXQgdD0wO3Q8dGhpcy5jb2x1bW5zO3QrKyl7Y29uc3QgaT10aGlzLmdldENvbHVtbih0KTtpLmxlbmd0aCYmZEN0KGkse21pbjplLG1heDpuLG91dHB1dDppfSksby5zZXRDb2x1bW4odCxpKX1yZXR1cm4gb31mbGlwUm93cygpe2NvbnN0IHQ9TWF0aC5jZWlsKHRoaXMuY29sdW1ucy8yKTtmb3IobGV0IGU9MDtlPHRoaXMucm93cztlKyspZm9yKGxldCBuPTA7bjx0O24rKyl7bGV0IHQ9dGhpcy5nZXQoZSxuKSxvPXRoaXMuZ2V0KGUsdGhpcy5jb2x1bW5zLTEtbik7dGhpcy5zZXQoZSxuLG8pLHRoaXMuc2V0KGUsdGhpcy5jb2x1bW5zLTEtbix0KX1yZXR1cm4gdGhpc31mbGlwQ29sdW1ucygpe2NvbnN0IHQ9TWF0aC5jZWlsKHRoaXMucm93cy8yKTtmb3IobGV0IGU9MDtlPHRoaXMuY29sdW1ucztlKyspZm9yKGxldCBuPTA7bjx0O24rKyl7bGV0IHQ9dGhpcy5nZXQobixlKSxvPXRoaXMuZ2V0KHRoaXMucm93cy0xLW4sZSk7dGhpcy5zZXQobixlLG8pLHRoaXMuc2V0KHRoaXMucm93cy0xLW4sZSx0KX1yZXR1cm4gdGhpc31rcm9uZWNrZXJQcm9kdWN0KHQpe3Q9U0N0LmNoZWNrTWF0cml4KHQpO2xldCBlPXRoaXMucm93cyxuPXRoaXMuY29sdW1ucyxvPXQucm93cyxpPXQuY29sdW1ucyxhPW5ldyBTQ3QoZSpvLG4qaSk7Zm9yKGxldCByPTA7cjxlO3IrKylmb3IobGV0IGU9MDtlPG47ZSsrKWZvcihsZXQgbj0wO248bztuKyspZm9yKGxldCBzPTA7czxpO3MrKylhLnNldChvKnIrbixpKmUrcyx0aGlzLmdldChyLGUpKnQuZ2V0KG4scykpO3JldHVybiBhfWtyb25lY2tlclN1bSh0KXtpZih0PVNDdC5jaGVja01hdHJpeCh0KSwhdGhpcy5pc1NxdWFyZSgpfHwhdC5pc1NxdWFyZSgpKXRocm93IG5ldyBFcnJvcigiS3JvbmVja2VyIFN1bSBuZWVkcyB0d28gU3F1YXJlIE1hdHJpY2VzIik7bGV0IGU9dGhpcy5yb3dzLG49dC5yb3dzLG89dGhpcy5rcm9uZWNrZXJQcm9kdWN0KFNDdC5leWUobixuKSksaT1TQ3QuZXllKGUsZSkua3JvbmVja2VyUHJvZHVjdCh0KTtyZXR1cm4gby5hZGQoaSl9dHJhbnNwb3NlKCl7bGV0IHQ9bmV3IFNDdCh0aGlzLmNvbHVtbnMsdGhpcy5yb3dzKTtmb3IobGV0IGU9MDtlPHRoaXMucm93cztlKyspZm9yKGxldCBuPTA7bjx0aGlzLmNvbHVtbnM7bisrKXQuc2V0KG4sZSx0aGlzLmdldChlLG4pKTtyZXR1cm4gdH1zb3J0Um93cyh0PXdDdCl7Zm9yKGxldCBlPTA7ZTx0aGlzLnJvd3M7ZSsrKXRoaXMuc2V0Um93KGUsdGhpcy5nZXRSb3coZSkuc29ydCh0KSk7cmV0dXJuIHRoaXN9c29ydENvbHVtbnModD13Q3Qpe2ZvcihsZXQgZT0wO2U8dGhpcy5jb2x1bW5zO2UrKyl0aGlzLnNldENvbHVtbihlLHRoaXMuZ2V0Q29sdW1uKGUpLnNvcnQodCkpO3JldHVybiB0aGlzfXN1Yk1hdHJpeCh0LGUsbixvKXtNQ3QodGhpcyx0LGUsbixvKTtsZXQgaT1uZXcgU0N0KGUtdCsxLG8tbisxKTtmb3IobGV0IGE9dDthPD1lO2ErKylmb3IobGV0IGU9bjtlPD1vO2UrKylpLnNldChhLXQsZS1uLHRoaXMuZ2V0KGEsZSkpO3JldHVybiBpfXN1Yk1hdHJpeFJvdyh0LGUsbil7aWYodm9pZCAwPT09ZSYmKGU9MCksdm9pZCAwPT09biYmKG49dGhpcy5jb2x1bW5zLTEpLGU+bnx8ZTwwfHxlPj10aGlzLmNvbHVtbnN8fG48MHx8bj49dGhpcy5jb2x1bW5zKXRocm93IG5ldyBSYW5nZUVycm9yKCJBcmd1bWVudCBvdXQgb2YgcmFuZ2UiKTtsZXQgbz1uZXcgU0N0KHQubGVuZ3RoLG4tZSsxKTtmb3IobGV0IGk9MDtpPHQubGVuZ3RoO2krKylmb3IobGV0IGE9ZTthPD1uO2ErKyl7aWYodFtpXTwwfHx0W2ldPj10aGlzLnJvd3MpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYFJvdyBpbmRleCBvdXQgb2YgcmFuZ2U6ICR7dFtpXX1gKTtvLnNldChpLGEtZSx0aGlzLmdldCh0W2ldLGEpKX1yZXR1cm4gb31zdWJNYXRyaXhDb2x1bW4odCxlLG4pe2lmKHZvaWQgMD09PWUmJihlPTApLHZvaWQgMD09PW4mJihuPXRoaXMucm93cy0xKSxlPm58fGU8MHx8ZT49dGhpcy5yb3dzfHxuPDB8fG4+PXRoaXMucm93cyl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXJndW1lbnQgb3V0IG9mIHJhbmdlIik7bGV0IG89bmV3IFNDdChuLWUrMSx0Lmxlbmd0aCk7Zm9yKGxldCBpPTA7aTx0Lmxlbmd0aDtpKyspZm9yKGxldCBhPWU7YTw9bjthKyspe2lmKHRbaV08MHx8dFtpXT49dGhpcy5jb2x1bW5zKXRocm93IG5ldyBSYW5nZUVycm9yKGBDb2x1bW4gaW5kZXggb3V0IG9mIHJhbmdlOiAke3RbaV19YCk7by5zZXQoYS1lLGksdGhpcy5nZXQoYSx0W2ldKSl9cmV0dXJuIG99c2V0U3ViTWF0cml4KHQsZSxuKXtpZigodD1TQ3QuY2hlY2tNYXRyaXgodCkpLmlzRW1wdHkoKSlyZXR1cm4gdGhpcztNQ3QodGhpcyxlLGUrdC5yb3dzLTEsbixuK3QuY29sdW1ucy0xKTtmb3IobGV0IG89MDtvPHQucm93cztvKyspZm9yKGxldCBpPTA7aTx0LmNvbHVtbnM7aSsrKXRoaXMuc2V0KGUrbyxuK2ksdC5nZXQobyxpKSk7cmV0dXJuIHRoaXN9c2VsZWN0aW9uKHQsZSl7bGV0IG49KGZ1bmN0aW9uIG8odCxlLG4pe3JldHVybntyb3c6X0N0KHQsZSksY29sdW1uOkNDdCh0LG4pfX0pKHRoaXMsdCxlKSxpPW5ldyBTQ3QodC5sZW5ndGgsZS5sZW5ndGgpO2ZvcihsZXQgdD0wO3Q8bi5yb3cubGVuZ3RoO3QrKyl7bGV0IGU9bi5yb3dbdF07Zm9yKGxldCBvPTA7bzxuLmNvbHVtbi5sZW5ndGg7bysrKWkuc2V0KHQsbyx0aGlzLmdldChlLG4uY29sdW1uW29dKSl9cmV0dXJuIGl9dHJhY2UoKXtsZXQgdD1NYXRoLm1pbih0aGlzLnJvd3MsdGhpcy5jb2x1bW5zKSxlPTA7Zm9yKGxldCBuPTA7bjx0O24rKyllKz10aGlzLmdldChuLG4pO3JldHVybiBlfWNsb25lKCl7bGV0IHQ9bmV3IFNDdCh0aGlzLnJvd3MsdGhpcy5jb2x1bW5zKTtmb3IobGV0IGU9MDtlPHRoaXMucm93cztlKyspZm9yKGxldCBuPTA7bjx0aGlzLmNvbHVtbnM7bisrKXQuc2V0KGUsbix0aGlzLmdldChlLG4pKTtyZXR1cm4gdH1zdW0odCl7c3dpdGNoKHQpe2Nhc2Uicm93IjpyZXR1cm4oZnVuY3Rpb24gZSh0KXtsZXQgZT12Q3QodC5yb3dzKTtmb3IobGV0IG49MDtuPHQucm93czsrK24pZm9yKGxldCBvPTA7bzx0LmNvbHVtbnM7KytvKWVbbl0rPXQuZ2V0KG4sbyk7cmV0dXJuIGV9KSh0aGlzKTtjYXNlImNvbHVtbiI6cmV0dXJuKGZ1bmN0aW9uIG4odCl7bGV0IGU9dkN0KHQuY29sdW1ucyk7Zm9yKGxldCBuPTA7bjx0LnJvd3M7KytuKWZvcihsZXQgbz0wO288dC5jb2x1bW5zOysrbyllW29dKz10LmdldChuLG8pO3JldHVybiBlfSkodGhpcyk7Y2FzZSB2b2lkIDA6cmV0dXJuKGZ1bmN0aW9uIG8odCl7bGV0IGU9MDtmb3IobGV0IG49MDtuPHQucm93cztuKyspZm9yKGxldCBvPTA7bzx0LmNvbHVtbnM7bysrKWUrPXQuZ2V0KG4sbyk7cmV0dXJuIGV9KSh0aGlzKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgaW52YWxpZCBvcHRpb246ICR7dH1gKX19cHJvZHVjdCh0KXtzd2l0Y2godCl7Y2FzZSJyb3ciOnJldHVybihmdW5jdGlvbiBlKHQpe2xldCBlPXZDdCh0LnJvd3MsMSk7Zm9yKGxldCBuPTA7bjx0LnJvd3M7KytuKWZvcihsZXQgbz0wO288dC5jb2x1bW5zOysrbyllW25dKj10LmdldChuLG8pO3JldHVybiBlfSkodGhpcyk7Y2FzZSJjb2x1bW4iOnJldHVybihmdW5jdGlvbiBuKHQpe2xldCBlPXZDdCh0LmNvbHVtbnMsMSk7Zm9yKGxldCBuPTA7bjx0LnJvd3M7KytuKWZvcihsZXQgbz0wO288dC5jb2x1bW5zOysrbyllW29dKj10LmdldChuLG8pO3JldHVybiBlfSkodGhpcyk7Y2FzZSB2b2lkIDA6cmV0dXJuKGZ1bmN0aW9uIG8odCl7bGV0IGU9MTtmb3IobGV0IG49MDtuPHQucm93cztuKyspZm9yKGxldCBvPTA7bzx0LmNvbHVtbnM7bysrKWUqPXQuZ2V0KG4sbyk7cmV0dXJuIGV9KSh0aGlzKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgaW52YWxpZCBvcHRpb246ICR7dH1gKX19bWVhbih0KXtjb25zdCBlPXRoaXMuc3VtKHQpO3N3aXRjaCh0KXtjYXNlInJvdyI6Zm9yKGxldCB0PTA7dDx0aGlzLnJvd3M7dCsrKWVbdF0vPXRoaXMuY29sdW1ucztyZXR1cm4gZTtjYXNlImNvbHVtbiI6Zm9yKGxldCB0PTA7dDx0aGlzLmNvbHVtbnM7dCsrKWVbdF0vPXRoaXMucm93cztyZXR1cm4gZTtjYXNlIHZvaWQgMDpyZXR1cm4gZS90aGlzLnNpemU7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgb3B0aW9uOiAke3R9YCl9fXZhcmlhbmNlKHQsZT17fSl7aWYoIm9iamVjdCI9PXR5cGVvZiB0JiYoZT10LHQ9dm9pZCAwKSwib2JqZWN0IiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigib3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCIpO2NvbnN0e3VuYmlhc2VkOm49ITAsbWVhbjpvPXRoaXMubWVhbih0KX09ZTtpZigiYm9vbGVhbiIhPXR5cGVvZiBuKXRocm93IG5ldyBUeXBlRXJyb3IoInVuYmlhc2VkIG11c3QgYmUgYSBib29sZWFuIik7c3dpdGNoKHQpe2Nhc2Uicm93IjppZighQXJyYXkuaXNBcnJheShvKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJtZWFuIG11c3QgYmUgYW4gYXJyYXkiKTtyZXR1cm4oZnVuY3Rpb24gaSh0LGUsbil7Y29uc3Qgbz10LnJvd3MsaT10LmNvbHVtbnMsYT1bXTtmb3IobGV0IHI9MDtyPG87cisrKXtsZXQgbz0wLHM9MCxsPTA7Zm9yKGxldCBlPTA7ZTxpO2UrKylsPXQuZ2V0KHIsZSktbltyXSxvKz1sLHMrPWwqbDthLnB1c2goZT8ocy1vKm8vaSkvKGktMSk6KHMtbypvL2kpL2kpfXJldHVybiBhfSkodGhpcyxuLG8pO2Nhc2UiY29sdW1uIjppZighQXJyYXkuaXNBcnJheShvKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJtZWFuIG11c3QgYmUgYW4gYXJyYXkiKTtyZXR1cm4oZnVuY3Rpb24gYSh0LGUsbil7Y29uc3Qgbz10LnJvd3MsaT10LmNvbHVtbnMsYT1bXTtmb3IobGV0IHI9MDtyPGk7cisrKXtsZXQgaT0wLHM9MCxsPTA7Zm9yKGxldCBlPTA7ZTxvO2UrKylsPXQuZ2V0KGUsciktbltyXSxpKz1sLHMrPWwqbDthLnB1c2goZT8ocy1pKmkvbykvKG8tMSk6KHMtaSppL28pL28pfXJldHVybiBhfSkodGhpcyxuLG8pO2Nhc2Ugdm9pZCAwOmlmKCJudW1iZXIiIT10eXBlb2Ygbyl0aHJvdyBuZXcgVHlwZUVycm9yKCJtZWFuIG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4oZnVuY3Rpb24gcih0LGUsbil7Y29uc3Qgbz10LnJvd3MsaT10LmNvbHVtbnMsYT1vKmk7bGV0IHI9MCxzPTAsbD0wO2ZvcihsZXQgZT0wO2U8bztlKyspZm9yKGxldCBvPTA7bzxpO28rKylsPXQuZ2V0KGUsbyktbixyKz1sLHMrPWwqbDtyZXR1cm4gZT8ocy1yKnIvYSkvKGEtMSk6KHMtcipyL2EpL2F9KSh0aGlzLG4sbyk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgb3B0aW9uOiAke3R9YCl9fXN0YW5kYXJkRGV2aWF0aW9uKHQsZSl7Im9iamVjdCI9PXR5cGVvZiB0JiYoZT10LHQ9dm9pZCAwKTtjb25zdCBuPXRoaXMudmFyaWFuY2UodCxlKTtpZih2b2lkIDA9PT10KXJldHVybiBNYXRoLnNxcnQobik7Zm9yKGxldCB0PTA7dDxuLmxlbmd0aDt0Kyspblt0XT1NYXRoLnNxcnQoblt0XSk7cmV0dXJuIG59Y2VudGVyKHQsZT17fSl7aWYoIm9iamVjdCI9PXR5cGVvZiB0JiYoZT10LHQ9dm9pZCAwKSwib2JqZWN0IiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigib3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCIpO2NvbnN0e2NlbnRlcjpuPXRoaXMubWVhbih0KX09ZTtzd2l0Y2godCl7Y2FzZSJyb3ciOmlmKCFBcnJheS5pc0FycmF5KG4pKXRocm93IG5ldyBUeXBlRXJyb3IoImNlbnRlciBtdXN0IGJlIGFuIGFycmF5Iik7cmV0dXJuKGZ1bmN0aW9uIG8odCxlKXtmb3IobGV0IG49MDtuPHQucm93cztuKyspZm9yKGxldCBvPTA7bzx0LmNvbHVtbnM7bysrKXQuc2V0KG4sbyx0LmdldChuLG8pLWVbbl0pfSkodGhpcyxuKSx0aGlzO2Nhc2UiY29sdW1uIjppZighQXJyYXkuaXNBcnJheShuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJjZW50ZXIgbXVzdCBiZSBhbiBhcnJheSIpO3JldHVybihmdW5jdGlvbiBpKHQsZSl7Zm9yKGxldCBuPTA7bjx0LnJvd3M7bisrKWZvcihsZXQgbz0wO288dC5jb2x1bW5zO28rKyl0LnNldChuLG8sdC5nZXQobixvKS1lW29dKX0pKHRoaXMsbiksdGhpcztjYXNlIHZvaWQgMDppZigibnVtYmVyIiE9dHlwZW9mIG4pdGhyb3cgbmV3IFR5cGVFcnJvcigiY2VudGVyIG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4oZnVuY3Rpb24gYSh0LGUpe2ZvcihsZXQgbj0wO248dC5yb3dzO24rKylmb3IobGV0IG89MDtvPHQuY29sdW1ucztvKyspdC5zZXQobixvLHQuZ2V0KG4sbyktZSl9KSh0aGlzLG4pLHRoaXM7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgb3B0aW9uOiAke3R9YCl9fXNjYWxlKHQsZT17fSl7aWYoIm9iamVjdCI9PXR5cGVvZiB0JiYoZT10LHQ9dm9pZCAwKSwib2JqZWN0IiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigib3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCIpO2xldCBuPWUuc2NhbGU7c3dpdGNoKHQpe2Nhc2Uicm93IjppZih2b2lkIDA9PT1uKW49KGZ1bmN0aW9uIG8odCl7Y29uc3QgZT1bXTtmb3IobGV0IG49MDtuPHQucm93cztuKyspe2xldCBvPTA7Zm9yKGxldCBlPTA7ZTx0LmNvbHVtbnM7ZSsrKW8rPU1hdGgucG93KHQuZ2V0KG4sZSksMikvKHQuY29sdW1ucy0xKTtlLnB1c2goTWF0aC5zcXJ0KG8pKX1yZXR1cm4gZX0pKHRoaXMpO2Vsc2UgaWYoIUFycmF5LmlzQXJyYXkobikpdGhyb3cgbmV3IFR5cGVFcnJvcigic2NhbGUgbXVzdCBiZSBhbiBhcnJheSIpO3JldHVybihmdW5jdGlvbiBpKHQsZSl7Zm9yKGxldCBuPTA7bjx0LnJvd3M7bisrKWZvcihsZXQgbz0wO288dC5jb2x1bW5zO28rKyl0LnNldChuLG8sdC5nZXQobixvKS9lW25dKX0pKHRoaXMsbiksdGhpcztjYXNlImNvbHVtbiI6aWYodm9pZCAwPT09biluPShmdW5jdGlvbiBhKHQpe2NvbnN0IGU9W107Zm9yKGxldCBuPTA7bjx0LmNvbHVtbnM7bisrKXtsZXQgbz0wO2ZvcihsZXQgZT0wO2U8dC5yb3dzO2UrKylvKz1NYXRoLnBvdyh0LmdldChlLG4pLDIpLyh0LnJvd3MtMSk7ZS5wdXNoKE1hdGguc3FydChvKSl9cmV0dXJuIGV9KSh0aGlzKTtlbHNlIGlmKCFBcnJheS5pc0FycmF5KG4pKXRocm93IG5ldyBUeXBlRXJyb3IoInNjYWxlIG11c3QgYmUgYW4gYXJyYXkiKTtyZXR1cm4oZnVuY3Rpb24gcih0LGUpe2ZvcihsZXQgbj0wO248dC5yb3dzO24rKylmb3IobGV0IG89MDtvPHQuY29sdW1ucztvKyspdC5zZXQobixvLHQuZ2V0KG4sbykvZVtvXSl9KSh0aGlzLG4pLHRoaXM7Y2FzZSB2b2lkIDA6aWYodm9pZCAwPT09biluPShmdW5jdGlvbiBzKHQpe2NvbnN0IGU9dC5zaXplLTE7bGV0IG49MDtmb3IobGV0IG89MDtvPHQuY29sdW1ucztvKyspZm9yKGxldCBpPTA7aTx0LnJvd3M7aSsrKW4rPU1hdGgucG93KHQuZ2V0KGksbyksMikvZTtyZXR1cm4gTWF0aC5zcXJ0KG4pfSkodGhpcyk7ZWxzZSBpZigibnVtYmVyIiE9dHlwZW9mIG4pdGhyb3cgbmV3IFR5cGVFcnJvcigic2NhbGUgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybihmdW5jdGlvbiBsKHQsZSl7Zm9yKGxldCBuPTA7bjx0LnJvd3M7bisrKWZvcihsZXQgbz0wO288dC5jb2x1bW5zO28rKyl0LnNldChuLG8sdC5nZXQobixvKS9lKX0pKHRoaXMsbiksdGhpcztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgaW52YWxpZCBvcHRpb246ICR7dH1gKX19dG9TdHJpbmcodCl7cmV0dXJuIHVDdCh0aGlzLHQpfX1mdW5jdGlvbiB3Q3QodCxlKXtyZXR1cm4gdC1lfVBDdC5wcm90b3R5cGUua2xhc3M9Ik1hdHJpeCIsInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJihQQ3QucHJvdG90eXBlW1N5bWJvbC5mb3IoIm5vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tIildPWZ1bmN0aW9uIGtDdCgpe3JldHVybiB1Q3QodGhpcyl9KSxQQ3QucmFuZG9tPVBDdC5yYW5kLFBDdC5yYW5kb21JbnQ9UEN0LnJhbmRJbnQsUEN0LmRpYWdvbmFsPVBDdC5kaWFnLFBDdC5wcm90b3R5cGUuZGlhZ29uYWw9UEN0LnByb3RvdHlwZS5kaWFnLFBDdC5pZGVudGl0eT1QQ3QuZXllLFBDdC5wcm90b3R5cGUubmVnYXRlPVBDdC5wcm90b3R5cGUubmVnLFBDdC5wcm90b3R5cGUudGVuc29yUHJvZHVjdD1QQ3QucHJvdG90eXBlLmtyb25lY2tlclByb2R1Y3Q7Y2xhc3MgU0N0IGV4dGVuZHMgUEN0e2NvbnN0cnVjdG9yKHQsZSl7aWYoc3VwZXIoKSxTQ3QuaXNNYXRyaXgodCkpcmV0dXJuIHQuY2xvbmUoKTtpZihOdW1iZXIuaXNJbnRlZ2VyKHQpJiZ0Pj0wKXtpZih0aGlzLmRhdGE9W10sIShOdW1iZXIuaXNJbnRlZ2VyKGUpJiZlPj0wKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJuQ29sdW1ucyBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciIpO2ZvcihsZXQgbj0wO248dDtuKyspdGhpcy5kYXRhLnB1c2gobmV3IEZsb2F0NjRBcnJheShlKSl9ZWxzZXtpZighQXJyYXkuaXNBcnJheSh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJGaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyIG9yIGFuIGFycmF5Iik7e2NvbnN0IG49dDtpZigibnVtYmVyIiE9dHlwZW9mKGU9KHQ9bi5sZW5ndGgpP25bMF0ubGVuZ3RoOjApKXRocm93IG5ldyBUeXBlRXJyb3IoIkRhdGEgbXVzdCBiZSBhIDJEIGFycmF5IHdpdGggYXQgbGVhc3Qgb25lIGVsZW1lbnQiKTt0aGlzLmRhdGE9W107Zm9yKGxldCBvPTA7bzx0O28rKyl7aWYobltvXS5sZW5ndGghPT1lKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmNvbnNpc3RlbnQgYXJyYXkgZGltZW5zaW9ucyIpO3RoaXMuZGF0YS5wdXNoKEZsb2F0NjRBcnJheS5mcm9tKG5bb10pKX19fXRoaXMucm93cz10LHRoaXMuY29sdW1ucz1lfXNldCh0LGUsbil7cmV0dXJuIHRoaXMuZGF0YVt0XVtlXT1uLHRoaXN9Z2V0KHQsZSl7cmV0dXJuIHRoaXMuZGF0YVt0XVtlXX1yZW1vdmVSb3codCl7cmV0dXJuIGdDdCh0aGlzLHQpLHRoaXMuZGF0YS5zcGxpY2UodCwxKSx0aGlzLnJvd3MtPTEsdGhpc31hZGRSb3codCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9dCx0PXRoaXMucm93cyksZ0N0KHRoaXMsdCwhMCksZT1GbG9hdDY0QXJyYXkuZnJvbShiQ3QodGhpcyxlKSksdGhpcy5kYXRhLnNwbGljZSh0LDAsZSksdGhpcy5yb3dzKz0xLHRoaXN9cmVtb3ZlQ29sdW1uKHQpe2hDdCh0aGlzLHQpO2ZvcihsZXQgZT0wO2U8dGhpcy5yb3dzO2UrKyl7Y29uc3Qgbj1uZXcgRmxvYXQ2NEFycmF5KHRoaXMuY29sdW1ucy0xKTtmb3IobGV0IG89MDtvPHQ7bysrKW5bb109dGhpcy5kYXRhW2VdW29dO2ZvcihsZXQgbz10KzE7bzx0aGlzLmNvbHVtbnM7bysrKW5bby0xXT10aGlzLmRhdGFbZV1bb107dGhpcy5kYXRhW2VdPW59cmV0dXJuIHRoaXMuY29sdW1ucy09MSx0aGlzfWFkZENvbHVtbih0LGUpe3ZvaWQgMD09PWUmJihlPXQsdD10aGlzLmNvbHVtbnMpLGhDdCh0aGlzLHQsITApLGU9eUN0KHRoaXMsZSk7Zm9yKGxldCBuPTA7bjx0aGlzLnJvd3M7bisrKXtjb25zdCBvPW5ldyBGbG9hdDY0QXJyYXkodGhpcy5jb2x1bW5zKzEpO2xldCBpPTA7Zm9yKDtpPHQ7aSsrKW9baV09dGhpcy5kYXRhW25dW2ldO2ZvcihvW2krK109ZVtuXTtpPHRoaXMuY29sdW1ucysxO2krKylvW2ldPXRoaXMuZGF0YVtuXVtpLTFdO3RoaXMuZGF0YVtuXT1vfXJldHVybiB0aGlzLmNvbHVtbnMrPTEsdGhpc319IShmdW5jdGlvbiBEQ3QodCxlKXt0LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24gdChlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGU/dGhpcy5hZGRTKGUpOnRoaXMuYWRkTShlKX0sdC5wcm90b3R5cGUuYWRkUz1mdW5jdGlvbiB0KGUpe2ZvcihsZXQgdD0wO3Q8dGhpcy5yb3dzO3QrKylmb3IobGV0IG49MDtuPHRoaXMuY29sdW1ucztuKyspdGhpcy5zZXQodCxuLHRoaXMuZ2V0KHQsbikrZSk7cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLmFkZE09ZnVuY3Rpb24gdChuKXtpZihuPWUuY2hlY2tNYXRyaXgobiksdGhpcy5yb3dzIT09bi5yb3dzfHx0aGlzLmNvbHVtbnMhPT1uLmNvbHVtbnMpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk1hdHJpY2VzIGRpbWVuc2lvbnMgbXVzdCBiZSBlcXVhbCIpO2ZvcihsZXQgdD0wO3Q8dGhpcy5yb3dzO3QrKylmb3IobGV0IGU9MDtlPHRoaXMuY29sdW1ucztlKyspdGhpcy5zZXQodCxlLHRoaXMuZ2V0KHQsZSkrbi5nZXQodCxlKSk7cmV0dXJuIHRoaXN9LHQuYWRkPWZ1bmN0aW9uIHQobixvKXtyZXR1cm4gbmV3IGUobikuYWRkKG8pfSx0LnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24gdChlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGU/dGhpcy5zdWJTKGUpOnRoaXMuc3ViTShlKX0sdC5wcm90b3R5cGUuc3ViUz1mdW5jdGlvbiB0KGUpe2ZvcihsZXQgdD0wO3Q8dGhpcy5yb3dzO3QrKylmb3IobGV0IG49MDtuPHRoaXMuY29sdW1ucztuKyspdGhpcy5zZXQodCxuLHRoaXMuZ2V0KHQsbiktZSk7cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLnN1Yk09ZnVuY3Rpb24gdChuKXtpZihuPWUuY2hlY2tNYXRyaXgobiksdGhpcy5yb3dzIT09bi5yb3dzfHx0aGlzLmNvbHVtbnMhPT1uLmNvbHVtbnMpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk1hdHJpY2VzIGRpbWVuc2lvbnMgbXVzdCBiZSBlcXVhbCIpO2ZvcihsZXQgdD0wO3Q8dGhpcy5yb3dzO3QrKylmb3IobGV0IGU9MDtlPHRoaXMuY29sdW1ucztlKyspdGhpcy5zZXQodCxlLHRoaXMuZ2V0KHQsZSktbi5nZXQodCxlKSk7cmV0dXJuIHRoaXN9LHQuc3ViPWZ1bmN0aW9uIHQobixvKXtyZXR1cm4gbmV3IGUobikuc3ViKG8pfSx0LnByb3RvdHlwZS5zdWJ0cmFjdD10LnByb3RvdHlwZS5zdWIsdC5wcm90b3R5cGUuc3VidHJhY3RTPXQucHJvdG90eXBlLnN1YlMsdC5wcm90b3R5cGUuc3VidHJhY3RNPXQucHJvdG90eXBlLnN1Yk0sdC5zdWJ0cmFjdD10LnN1Yix0LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24gdChlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGU/dGhpcy5tdWxTKGUpOnRoaXMubXVsTShlKX0sdC5wcm90b3R5cGUubXVsUz1mdW5jdGlvbiB0KGUpe2ZvcihsZXQgdD0wO3Q8dGhpcy5yb3dzO3QrKylmb3IobGV0IG49MDtuPHRoaXMuY29sdW1ucztuKyspdGhpcy5zZXQodCxuLHRoaXMuZ2V0KHQsbikqZSk7cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLm11bE09ZnVuY3Rpb24gdChuKXtpZihuPWUuY2hlY2tNYXRyaXgobiksdGhpcy5yb3dzIT09bi5yb3dzfHx0aGlzLmNvbHVtbnMhPT1uLmNvbHVtbnMpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk1hdHJpY2VzIGRpbWVuc2lvbnMgbXVzdCBiZSBlcXVhbCIpO2ZvcihsZXQgdD0wO3Q8dGhpcy5yb3dzO3QrKylmb3IobGV0IGU9MDtlPHRoaXMuY29sdW1ucztlKyspdGhpcy5zZXQodCxlLHRoaXMuZ2V0KHQsZSkqbi5nZXQodCxlKSk7cmV0dXJuIHRoaXN9LHQubXVsPWZ1bmN0aW9uIHQobixvKXtyZXR1cm4gbmV3IGUobikubXVsKG8pfSx0LnByb3RvdHlwZS5tdWx0aXBseT10LnByb3RvdHlwZS5tdWwsdC5wcm90b3R5cGUubXVsdGlwbHlTPXQucHJvdG90eXBlLm11bFMsdC5wcm90b3R5cGUubXVsdGlwbHlNPXQucHJvdG90eXBlLm11bE0sdC5tdWx0aXBseT10Lm11bCx0LnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24gdChlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGU/dGhpcy5kaXZTKGUpOnRoaXMuZGl2TShlKX0sdC5wcm90b3R5cGUuZGl2Uz1mdW5jdGlvbiB0KGUpe2ZvcihsZXQgdD0wO3Q8dGhpcy5yb3dzO3QrKylmb3IobGV0IG49MDtuPHRoaXMuY29sdW1ucztuKyspdGhpcy5zZXQodCxuLHRoaXMuZ2V0KHQsbikvZSk7cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLmRpdk09ZnVuY3Rpb24gdChuKXtpZihuPWUuY2hlY2tNYXRyaXgobiksdGhpcy5yb3dzIT09bi5yb3dzfHx0aGlzLmNvbHVtbnMhPT1uLmNvbHVtbnMpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk1hdHJpY2VzIGRpbWVuc2lvbnMgbXVzdCBiZSBlcXVhbCIpO2ZvcihsZXQgdD0wO3Q8dGhpcy5yb3dzO3QrKylmb3IobGV0IGU9MDtlPHRoaXMuY29sdW1ucztlKyspdGhpcy5zZXQodCxlLHRoaXMuZ2V0KHQsZSkvbi5nZXQodCxlKSk7cmV0dXJuIHRoaXN9LHQuZGl2PWZ1bmN0aW9uIHQobixvKXtyZXR1cm4gbmV3IGUobikuZGl2KG8pfSx0LnByb3RvdHlwZS5kaXZpZGU9dC5wcm90b3R5cGUuZGl2LHQucHJvdG90eXBlLmRpdmlkZVM9dC5wcm90b3R5cGUuZGl2Uyx0LnByb3RvdHlwZS5kaXZpZGVNPXQucHJvdG90eXBlLmRpdk0sdC5kaXZpZGU9dC5kaXYsdC5wcm90b3R5cGUubW9kPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBlP3RoaXMubW9kUyhlKTp0aGlzLm1vZE0oZSl9LHQucHJvdG90eXBlLm1vZFM9ZnVuY3Rpb24gdChlKXtmb3IobGV0IHQ9MDt0PHRoaXMucm93czt0KyspZm9yKGxldCBuPTA7bjx0aGlzLmNvbHVtbnM7bisrKXRoaXMuc2V0KHQsbix0aGlzLmdldCh0LG4pJWUpO3JldHVybiB0aGlzfSx0LnByb3RvdHlwZS5tb2RNPWZ1bmN0aW9uIHQobil7aWYobj1lLmNoZWNrTWF0cml4KG4pLHRoaXMucm93cyE9PW4ucm93c3x8dGhpcy5jb2x1bW5zIT09bi5jb2x1bW5zKXRocm93IG5ldyBSYW5nZUVycm9yKCJNYXRyaWNlcyBkaW1lbnNpb25zIG11c3QgYmUgZXF1YWwiKTtmb3IobGV0IHQ9MDt0PHRoaXMucm93czt0KyspZm9yKGxldCBlPTA7ZTx0aGlzLmNvbHVtbnM7ZSsrKXRoaXMuc2V0KHQsZSx0aGlzLmdldCh0LGUpJW4uZ2V0KHQsZSkpO3JldHVybiB0aGlzfSx0Lm1vZD1mdW5jdGlvbiB0KG4sbyl7cmV0dXJuIG5ldyBlKG4pLm1vZChvKX0sdC5wcm90b3R5cGUubW9kdWx1cz10LnByb3RvdHlwZS5tb2QsdC5wcm90b3R5cGUubW9kdWx1c1M9dC5wcm90b3R5cGUubW9kUyx0LnByb3RvdHlwZS5tb2R1bHVzTT10LnByb3RvdHlwZS5tb2RNLHQubW9kdWx1cz10Lm1vZCx0LnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24gdChlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGU/dGhpcy5hbmRTKGUpOnRoaXMuYW5kTShlKX0sdC5wcm90b3R5cGUuYW5kUz1mdW5jdGlvbiB0KGUpe2ZvcihsZXQgdD0wO3Q8dGhpcy5yb3dzO3QrKylmb3IobGV0IG49MDtuPHRoaXMuY29sdW1ucztuKyspdGhpcy5zZXQodCxuLHRoaXMuZ2V0KHQsbikmZSk7cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLmFuZE09ZnVuY3Rpb24gdChuKXtpZihuPWUuY2hlY2tNYXRyaXgobiksdGhpcy5yb3dzIT09bi5yb3dzfHx0aGlzLmNvbHVtbnMhPT1uLmNvbHVtbnMpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk1hdHJpY2VzIGRpbWVuc2lvbnMgbXVzdCBiZSBlcXVhbCIpO2ZvcihsZXQgdD0wO3Q8dGhpcy5yb3dzO3QrKylmb3IobGV0IGU9MDtlPHRoaXMuY29sdW1ucztlKyspdGhpcy5zZXQodCxlLHRoaXMuZ2V0KHQsZSkmbi5nZXQodCxlKSk7cmV0dXJuIHRoaXN9LHQuYW5kPWZ1bmN0aW9uIHQobixvKXtyZXR1cm4gbmV3IGUobikuYW5kKG8pfSx0LnByb3RvdHlwZS5vcj1mdW5jdGlvbiB0KGUpe3JldHVybiJudW1iZXIiPT10eXBlb2YgZT90aGlzLm9yUyhlKTp0aGlzLm9yTShlKX0sdC5wcm90b3R5cGUub3JTPWZ1bmN0aW9uIHQoZSl7Zm9yKGxldCB0PTA7dDx0aGlzLnJvd3M7dCsrKWZvcihsZXQgbj0wO248dGhpcy5jb2x1bW5zO24rKyl0aGlzLnNldCh0LG4sdGhpcy5nZXQodCxuKXxlKTtyZXR1cm4gdGhpc30sdC5wcm90b3R5cGUub3JNPWZ1bmN0aW9uIHQobil7aWYobj1lLmNoZWNrTWF0cml4KG4pLHRoaXMucm93cyE9PW4ucm93c3x8dGhpcy5jb2x1bW5zIT09bi5jb2x1bW5zKXRocm93IG5ldyBSYW5nZUVycm9yKCJNYXRyaWNlcyBkaW1lbnNpb25zIG11c3QgYmUgZXF1YWwiKTtmb3IobGV0IHQ9MDt0PHRoaXMucm93czt0KyspZm9yKGxldCBlPTA7ZTx0aGlzLmNvbHVtbnM7ZSsrKXRoaXMuc2V0KHQsZSx0aGlzLmdldCh0LGUpfG4uZ2V0KHQsZSkpO3JldHVybiB0aGlzfSx0Lm9yPWZ1bmN0aW9uIHQobixvKXtyZXR1cm4gbmV3IGUobikub3Iobyl9LHQucHJvdG90eXBlLnhvcj1mdW5jdGlvbiB0KGUpe3JldHVybiJudW1iZXIiPT10eXBlb2YgZT90aGlzLnhvclMoZSk6dGhpcy54b3JNKGUpfSx0LnByb3RvdHlwZS54b3JTPWZ1bmN0aW9uIHQoZSl7Zm9yKGxldCB0PTA7dDx0aGlzLnJvd3M7dCsrKWZvcihsZXQgbj0wO248dGhpcy5jb2x1bW5zO24rKyl0aGlzLnNldCh0LG4sdGhpcy5nZXQodCxuKV5lKTtyZXR1cm4gdGhpc30sdC5wcm90b3R5cGUueG9yTT1mdW5jdGlvbiB0KG4pe2lmKG49ZS5jaGVja01hdHJpeChuKSx0aGlzLnJvd3MhPT1uLnJvd3N8fHRoaXMuY29sdW1ucyE9PW4uY29sdW1ucyl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiTWF0cmljZXMgZGltZW5zaW9ucyBtdXN0IGJlIGVxdWFsIik7Zm9yKGxldCB0PTA7dDx0aGlzLnJvd3M7dCsrKWZvcihsZXQgZT0wO2U8dGhpcy5jb2x1bW5zO2UrKyl0aGlzLnNldCh0LGUsdGhpcy5nZXQodCxlKV5uLmdldCh0LGUpKTtyZXR1cm4gdGhpc30sdC54b3I9ZnVuY3Rpb24gdChuLG8pe3JldHVybiBuZXcgZShuKS54b3Iobyl9LHQucHJvdG90eXBlLmxlZnRTaGlmdD1mdW5jdGlvbiB0KGUpe3JldHVybiJudW1iZXIiPT10eXBlb2YgZT90aGlzLmxlZnRTaGlmdFMoZSk6dGhpcy5sZWZ0U2hpZnRNKGUpfSx0LnByb3RvdHlwZS5sZWZ0U2hpZnRTPWZ1bmN0aW9uIHQoZSl7Zm9yKGxldCB0PTA7dDx0aGlzLnJvd3M7dCsrKWZvcihsZXQgbj0wO248dGhpcy5jb2x1bW5zO24rKyl0aGlzLnNldCh0LG4sdGhpcy5nZXQodCxuKTw8ZSk7cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLmxlZnRTaGlmdE09ZnVuY3Rpb24gdChuKXtpZihuPWUuY2hlY2tNYXRyaXgobiksdGhpcy5yb3dzIT09bi5yb3dzfHx0aGlzLmNvbHVtbnMhPT1uLmNvbHVtbnMpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk1hdHJpY2VzIGRpbWVuc2lvbnMgbXVzdCBiZSBlcXVhbCIpO2ZvcihsZXQgdD0wO3Q8dGhpcy5yb3dzO3QrKylmb3IobGV0IGU9MDtlPHRoaXMuY29sdW1ucztlKyspdGhpcy5zZXQodCxlLHRoaXMuZ2V0KHQsZSk8PG4uZ2V0KHQsZSkpO3JldHVybiB0aGlzfSx0LmxlZnRTaGlmdD1mdW5jdGlvbiB0KG4sbyl7cmV0dXJuIG5ldyBlKG4pLmxlZnRTaGlmdChvKX0sdC5wcm90b3R5cGUuc2lnblByb3BhZ2F0aW5nUmlnaHRTaGlmdD1mdW5jdGlvbiB0KGUpe3JldHVybiJudW1iZXIiPT10eXBlb2YgZT90aGlzLnNpZ25Qcm9wYWdhdGluZ1JpZ2h0U2hpZnRTKGUpOnRoaXMuc2lnblByb3BhZ2F0aW5nUmlnaHRTaGlmdE0oZSl9LHQucHJvdG90eXBlLnNpZ25Qcm9wYWdhdGluZ1JpZ2h0U2hpZnRTPWZ1bmN0aW9uIHQoZSl7Zm9yKGxldCB0PTA7dDx0aGlzLnJvd3M7dCsrKWZvcihsZXQgbj0wO248dGhpcy5jb2x1bW5zO24rKyl0aGlzLnNldCh0LG4sdGhpcy5nZXQodCxuKT4+ZSk7cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLnNpZ25Qcm9wYWdhdGluZ1JpZ2h0U2hpZnRNPWZ1bmN0aW9uIHQobil7aWYobj1lLmNoZWNrTWF0cml4KG4pLHRoaXMucm93cyE9PW4ucm93c3x8dGhpcy5jb2x1bW5zIT09bi5jb2x1bW5zKXRocm93IG5ldyBSYW5nZUVycm9yKCJNYXRyaWNlcyBkaW1lbnNpb25zIG11c3QgYmUgZXF1YWwiKTtmb3IobGV0IHQ9MDt0PHRoaXMucm93czt0KyspZm9yKGxldCBlPTA7ZTx0aGlzLmNvbHVtbnM7ZSsrKXRoaXMuc2V0KHQsZSx0aGlzLmdldCh0LGUpPj5uLmdldCh0LGUpKTtyZXR1cm4gdGhpc30sdC5zaWduUHJvcGFnYXRpbmdSaWdodFNoaWZ0PWZ1bmN0aW9uIHQobixvKXtyZXR1cm4gbmV3IGUobikuc2lnblByb3BhZ2F0aW5nUmlnaHRTaGlmdChvKX0sdC5wcm90b3R5cGUucmlnaHRTaGlmdD1mdW5jdGlvbiB0KGUpe3JldHVybiJudW1iZXIiPT10eXBlb2YgZT90aGlzLnJpZ2h0U2hpZnRTKGUpOnRoaXMucmlnaHRTaGlmdE0oZSl9LHQucHJvdG90eXBlLnJpZ2h0U2hpZnRTPWZ1bmN0aW9uIHQoZSl7Zm9yKGxldCB0PTA7dDx0aGlzLnJvd3M7dCsrKWZvcihsZXQgbj0wO248dGhpcy5jb2x1bW5zO24rKyl0aGlzLnNldCh0LG4sdGhpcy5nZXQodCxuKT4+PmUpO3JldHVybiB0aGlzfSx0LnByb3RvdHlwZS5yaWdodFNoaWZ0TT1mdW5jdGlvbiB0KG4pe2lmKG49ZS5jaGVja01hdHJpeChuKSx0aGlzLnJvd3MhPT1uLnJvd3N8fHRoaXMuY29sdW1ucyE9PW4uY29sdW1ucyl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiTWF0cmljZXMgZGltZW5zaW9ucyBtdXN0IGJlIGVxdWFsIik7Zm9yKGxldCB0PTA7dDx0aGlzLnJvd3M7dCsrKWZvcihsZXQgZT0wO2U8dGhpcy5jb2x1bW5zO2UrKyl0aGlzLnNldCh0LGUsdGhpcy5nZXQodCxlKT4+Pm4uZ2V0KHQsZSkpO3JldHVybiB0aGlzfSx0LnJpZ2h0U2hpZnQ9ZnVuY3Rpb24gdChuLG8pe3JldHVybiBuZXcgZShuKS5yaWdodFNoaWZ0KG8pfSx0LnByb3RvdHlwZS56ZXJvRmlsbFJpZ2h0U2hpZnQ9dC5wcm90b3R5cGUucmlnaHRTaGlmdCx0LnByb3RvdHlwZS56ZXJvRmlsbFJpZ2h0U2hpZnRTPXQucHJvdG90eXBlLnJpZ2h0U2hpZnRTLHQucHJvdG90eXBlLnplcm9GaWxsUmlnaHRTaGlmdE09dC5wcm90b3R5cGUucmlnaHRTaGlmdE0sdC56ZXJvRmlsbFJpZ2h0U2hpZnQ9dC5yaWdodFNoaWZ0LHQucHJvdG90eXBlLm5vdD1mdW5jdGlvbiB0KCl7Zm9yKGxldCB0PTA7dDx0aGlzLnJvd3M7dCsrKWZvcihsZXQgZT0wO2U8dGhpcy5jb2x1bW5zO2UrKyl0aGlzLnNldCh0LGUsfnRoaXMuZ2V0KHQsZSkpO3JldHVybiB0aGlzfSx0Lm5vdD1mdW5jdGlvbiB0KG4pe3JldHVybiBuZXcgZShuKS5ub3QoKX0sdC5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uIHQoKXtmb3IobGV0IHQ9MDt0PHRoaXMucm93czt0KyspZm9yKGxldCBlPTA7ZTx0aGlzLmNvbHVtbnM7ZSsrKXRoaXMuc2V0KHQsZSxNYXRoLmFicyh0aGlzLmdldCh0LGUpKSk7cmV0dXJuIHRoaXN9LHQuYWJzPWZ1bmN0aW9uIHQobil7cmV0dXJuIG5ldyBlKG4pLmFicygpfSx0LnByb3RvdHlwZS5hY29zPWZ1bmN0aW9uIHQoKXtmb3IobGV0IHQ9MDt0PHRoaXMucm93czt0KyspZm9yKGxldCBlPTA7ZTx0aGlzLmNvbHVtbnM7ZSsrKXRoaXMuc2V0KHQsZSxNYXRoLmFjb3ModGhpcy5nZXQodCxlKSkpO3JldHVybiB0aGlzfSx0LmFjb3M9ZnVuY3Rpb24gdChuKXtyZXR1cm4gbmV3IGUobikuYWNvcygpfSx0LnByb3RvdHlwZS5hY29zaD1mdW5jdGlvbiB0KCl7Zm9yKGxldCB0PTA7dDx0aGlzLnJvd3M7dCsrKWZvcihsZXQgZT0wO2U8dGhpcy5jb2x1bW5zO2UrKyl0aGlzLnNldCh0LGUsTWF0aC5hY29zaCh0aGlzLmdldCh0LGUpKSk7cmV0dXJuIHRoaXN9LHQuYWNvc2g9ZnVuY3Rpb24gdChuKXtyZXR1cm4gbmV3IGUobikuYWNvc2goKX0sdC5wcm90b3R5cGUuYXNpbj1mdW5jdGlvbiB0KCl7Zm9yKGxldCB0PTA7dDx0aGlzLnJvd3M7dCsrKWZvcihsZXQgZT0wO2U8dGhpcy5jb2x1bW5zO2UrKyl0aGlzLnNldCh0LGUsTWF0aC5hc2luKHRoaXMuZ2V0KHQsZSkpKTtyZXR1cm4gdGhpc30sdC5hc2luPWZ1bmN0aW9uIHQobil7cmV0dXJuIG5ldyBlKG4pLmFzaW4oKX0sdC5wcm90b3R5cGUuYXNpbmg9ZnVuY3Rpb24gdCgpe2ZvcihsZXQgdD0wO3Q8dGhpcy5yb3dzO3QrKylmb3IobGV0IGU9MDtlPHRoaXMuY29sdW1ucztlKyspdGhpcy5zZXQodCxlLE1hdGguYXNpbmgodGhpcy5nZXQodCxlKSkpO3JldHVybiB0aGlzfSx0LmFzaW5oPWZ1bmN0aW9uIHQobil7cmV0dXJuIG5ldyBlKG4pLmFzaW5oKCl9LHQucHJvdG90eXBlLmF0YW49ZnVuY3Rpb24gdCgpe2ZvcihsZXQgdD0wO3Q8dGhpcy5yb3dzO3QrKylmb3IobGV0IGU9MDtlPHRoaXMuY29sdW1ucztlKyspdGhpcy5zZXQodCxlLE1hdGguYXRhbih0aGlzLmdldCh0LGUpKSk7cmV0dXJuIHRoaXN9LHQuYXRhbj1mdW5jdGlvbiB0KG4pe3JldHVybiBuZXcgZShuKS5hdGFuKCl9LHQucHJvdG90eXBlLmF0YW5oPWZ1bmN0aW9uIHQoKXtmb3IobGV0IHQ9MDt0PHRoaXMucm93czt0KyspZm9yKGxldCBlPTA7ZTx0aGlzLmNvbHVtbnM7ZSsrKXRoaXMuc2V0KHQsZSxNYXRoLmF0YW5oKHRoaXMuZ2V0KHQsZSkpKTtyZXR1cm4gdGhpc30sdC5hdGFuaD1mdW5jdGlvbiB0KG4pe3JldHVybiBuZXcgZShuKS5hdGFuaCgpfSx0LnByb3RvdHlwZS5jYnJ0PWZ1bmN0aW9uIHQoKXtmb3IobGV0IHQ9MDt0PHRoaXMucm93czt0KyspZm9yKGxldCBlPTA7ZTx0aGlzLmNvbHVtbnM7ZSsrKXRoaXMuc2V0KHQsZSxNYXRoLmNicnQodGhpcy5nZXQodCxlKSkpO3JldHVybiB0aGlzfSx0LmNicnQ9ZnVuY3Rpb24gdChuKXtyZXR1cm4gbmV3IGUobikuY2JydCgpfSx0LnByb3RvdHlwZS5jZWlsPWZ1bmN0aW9uIHQoKXtmb3IobGV0IHQ9MDt0PHRoaXMucm93czt0KyspZm9yKGxldCBlPTA7ZTx0aGlzLmNvbHVtbnM7ZSsrKXRoaXMuc2V0KHQsZSxNYXRoLmNlaWwodGhpcy5nZXQodCxlKSkpO3JldHVybiB0aGlzfSx0LmNlaWw9ZnVuY3Rpb24gdChuKXtyZXR1cm4gbmV3IGUobikuY2VpbCgpfSx0LnByb3RvdHlwZS5jbHozMj1mdW5jdGlvbiB0KCl7Zm9yKGxldCB0PTA7dDx0aGlzLnJvd3M7dCsrKWZvcihsZXQgZT0wO2U8dGhpcy5jb2x1bW5zO2UrKyl0aGlzLnNldCh0LGUsTWF0aC5jbHozMih0aGlzLmdldCh0LGUpKSk7cmV0dXJuIHRoaXN9LHQuY2x6MzI9ZnVuY3Rpb24gdChuKXtyZXR1cm4gbmV3IGUobikuY2x6MzIoKX0sdC5wcm90b3R5cGUuY29zPWZ1bmN0aW9uIHQoKXtmb3IobGV0IHQ9MDt0PHRoaXMucm93czt0KyspZm9yKGxldCBlPTA7ZTx0aGlzLmNvbHVtbnM7ZSsrKXRoaXMuc2V0KHQsZSxNYXRoLmNvcyh0aGlzLmdldCh0LGUpKSk7cmV0dXJuIHRoaXN9LHQuY29zPWZ1bmN0aW9uIHQobil7cmV0dXJuIG5ldyBlKG4pLmNvcygpfSx0LnByb3RvdHlwZS5jb3NoPWZ1bmN0aW9uIHQoKXtmb3IobGV0IHQ9MDt0PHRoaXMucm93czt0KyspZm9yKGxldCBlPTA7ZTx0aGlzLmNvbHVtbnM7ZSsrKXRoaXMuc2V0KHQsZSxNYXRoLmNvc2godGhpcy5nZXQodCxlKSkpO3JldHVybiB0aGlzfSx0LmNvc2g9ZnVuY3Rpb24gdChuKXtyZXR1cm4gbmV3IGUobikuY29zaCgpfSx0LnByb3RvdHlwZS5leHA9ZnVuY3Rpb24gdCgpe2ZvcihsZXQgdD0wO3Q8dGhpcy5yb3dzO3QrKylmb3IobGV0IGU9MDtlPHRoaXMuY29sdW1ucztlKyspdGhpcy5zZXQodCxlLE1hdGguZXhwKHRoaXMuZ2V0KHQsZSkpKTtyZXR1cm4gdGhpc30sdC5leHA9ZnVuY3Rpb24gdChuKXtyZXR1cm4gbmV3IGUobikuZXhwKCl9LHQucHJvdG90eXBlLmV4cG0xPWZ1bmN0aW9uIHQoKXtmb3IobGV0IHQ9MDt0PHRoaXMucm93czt0KyspZm9yKGxldCBlPTA7ZTx0aGlzLmNvbHVtbnM7ZSsrKXRoaXMuc2V0KHQsZSxNYXRoLmV4cG0xKHRoaXMuZ2V0KHQsZSkpKTtyZXR1cm4gdGhpc30sdC5leHBtMT1mdW5jdGlvbiB0KG4pe3JldHVybiBuZXcgZShuKS5leHBtMSgpfSx0LnByb3RvdHlwZS5mbG9vcj1mdW5jdGlvbiB0KCl7Zm9yKGxldCB0PTA7dDx0aGlzLnJvd3M7dCsrKWZvcihsZXQgZT0wO2U8dGhpcy5jb2x1bW5zO2UrKyl0aGlzLnNldCh0LGUsTWF0aC5mbG9vcih0aGlzLmdldCh0LGUpKSk7cmV0dXJuIHRoaXN9LHQuZmxvb3I9ZnVuY3Rpb24gdChuKXtyZXR1cm4gbmV3IGUobikuZmxvb3IoKX0sdC5wcm90b3R5cGUuZnJvdW5kPWZ1bmN0aW9uIHQoKXtmb3IobGV0IHQ9MDt0PHRoaXMucm93czt0KyspZm9yKGxldCBlPTA7ZTx0aGlzLmNvbHVtbnM7ZSsrKXRoaXMuc2V0KHQsZSxNYXRoLmZyb3VuZCh0aGlzLmdldCh0LGUpKSk7cmV0dXJuIHRoaXN9LHQuZnJvdW5kPWZ1bmN0aW9uIHQobil7cmV0dXJuIG5ldyBlKG4pLmZyb3VuZCgpfSx0LnByb3RvdHlwZS5sb2c9ZnVuY3Rpb24gdCgpe2ZvcihsZXQgdD0wO3Q8dGhpcy5yb3dzO3QrKylmb3IobGV0IGU9MDtlPHRoaXMuY29sdW1ucztlKyspdGhpcy5zZXQodCxlLE1hdGgubG9nKHRoaXMuZ2V0KHQsZSkpKTtyZXR1cm4gdGhpc30sdC5sb2c9ZnVuY3Rpb24gdChuKXtyZXR1cm4gbmV3IGUobikubG9nKCl9LHQucHJvdG90eXBlLmxvZzFwPWZ1bmN0aW9uIHQoKXtmb3IobGV0IHQ9MDt0PHRoaXMucm93czt0KyspZm9yKGxldCBlPTA7ZTx0aGlzLmNvbHVtbnM7ZSsrKXRoaXMuc2V0KHQsZSxNYXRoLmxvZzFwKHRoaXMuZ2V0KHQsZSkpKTtyZXR1cm4gdGhpc30sdC5sb2cxcD1mdW5jdGlvbiB0KG4pe3JldHVybiBuZXcgZShuKS5sb2cxcCgpfSx0LnByb3RvdHlwZS5sb2cxMD1mdW5jdGlvbiB0KCl7Zm9yKGxldCB0PTA7dDx0aGlzLnJvd3M7dCsrKWZvcihsZXQgZT0wO2U8dGhpcy5jb2x1bW5zO2UrKyl0aGlzLnNldCh0LGUsTWF0aC5sb2cxMCh0aGlzLmdldCh0LGUpKSk7cmV0dXJuIHRoaXN9LHQubG9nMTA9ZnVuY3Rpb24gdChuKXtyZXR1cm4gbmV3IGUobikubG9nMTAoKX0sdC5wcm90b3R5cGUubG9nMj1mdW5jdGlvbiB0KCl7Zm9yKGxldCB0PTA7dDx0aGlzLnJvd3M7dCsrKWZvcihsZXQgZT0wO2U8dGhpcy5jb2x1bW5zO2UrKyl0aGlzLnNldCh0LGUsTWF0aC5sb2cyKHRoaXMuZ2V0KHQsZSkpKTtyZXR1cm4gdGhpc30sdC5sb2cyPWZ1bmN0aW9uIHQobil7cmV0dXJuIG5ldyBlKG4pLmxvZzIoKX0sdC5wcm90b3R5cGUucm91bmQ9ZnVuY3Rpb24gdCgpe2ZvcihsZXQgdD0wO3Q8dGhpcy5yb3dzO3QrKylmb3IobGV0IGU9MDtlPHRoaXMuY29sdW1ucztlKyspdGhpcy5zZXQodCxlLE1hdGgucm91bmQodGhpcy5nZXQodCxlKSkpO3JldHVybiB0aGlzfSx0LnJvdW5kPWZ1bmN0aW9uIHQobil7cmV0dXJuIG5ldyBlKG4pLnJvdW5kKCl9LHQucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24gdCgpe2ZvcihsZXQgdD0wO3Q8dGhpcy5yb3dzO3QrKylmb3IobGV0IGU9MDtlPHRoaXMuY29sdW1ucztlKyspdGhpcy5zZXQodCxlLE1hdGguc2lnbih0aGlzLmdldCh0LGUpKSk7cmV0dXJuIHRoaXN9LHQuc2lnbj1mdW5jdGlvbiB0KG4pe3JldHVybiBuZXcgZShuKS5zaWduKCl9LHQucHJvdG90eXBlLnNpbj1mdW5jdGlvbiB0KCl7Zm9yKGxldCB0PTA7dDx0aGlzLnJvd3M7dCsrKWZvcihsZXQgZT0wO2U8dGhpcy5jb2x1bW5zO2UrKyl0aGlzLnNldCh0LGUsTWF0aC5zaW4odGhpcy5nZXQodCxlKSkpO3JldHVybiB0aGlzfSx0LnNpbj1mdW5jdGlvbiB0KG4pe3JldHVybiBuZXcgZShuKS5zaW4oKX0sdC5wcm90b3R5cGUuc2luaD1mdW5jdGlvbiB0KCl7Zm9yKGxldCB0PTA7dDx0aGlzLnJvd3M7dCsrKWZvcihsZXQgZT0wO2U8dGhpcy5jb2x1bW5zO2UrKyl0aGlzLnNldCh0LGUsTWF0aC5zaW5oKHRoaXMuZ2V0KHQsZSkpKTtyZXR1cm4gdGhpc30sdC5zaW5oPWZ1bmN0aW9uIHQobil7cmV0dXJuIG5ldyBlKG4pLnNpbmgoKX0sdC5wcm90b3R5cGUuc3FydD1mdW5jdGlvbiB0KCl7Zm9yKGxldCB0PTA7dDx0aGlzLnJvd3M7dCsrKWZvcihsZXQgZT0wO2U8dGhpcy5jb2x1bW5zO2UrKyl0aGlzLnNldCh0LGUsTWF0aC5zcXJ0KHRoaXMuZ2V0KHQsZSkpKTtyZXR1cm4gdGhpc30sdC5zcXJ0PWZ1bmN0aW9uIHQobil7cmV0dXJuIG5ldyBlKG4pLnNxcnQoKX0sdC5wcm90b3R5cGUudGFuPWZ1bmN0aW9uIHQoKXtmb3IobGV0IHQ9MDt0PHRoaXMucm93czt0KyspZm9yKGxldCBlPTA7ZTx0aGlzLmNvbHVtbnM7ZSsrKXRoaXMuc2V0KHQsZSxNYXRoLnRhbih0aGlzLmdldCh0LGUpKSk7cmV0dXJuIHRoaXN9LHQudGFuPWZ1bmN0aW9uIHQobil7cmV0dXJuIG5ldyBlKG4pLnRhbigpfSx0LnByb3RvdHlwZS50YW5oPWZ1bmN0aW9uIHQoKXtmb3IobGV0IHQ9MDt0PHRoaXMucm93czt0KyspZm9yKGxldCBlPTA7ZTx0aGlzLmNvbHVtbnM7ZSsrKXRoaXMuc2V0KHQsZSxNYXRoLnRhbmgodGhpcy5nZXQodCxlKSkpO3JldHVybiB0aGlzfSx0LnRhbmg9ZnVuY3Rpb24gdChuKXtyZXR1cm4gbmV3IGUobikudGFuaCgpfSx0LnByb3RvdHlwZS50cnVuYz1mdW5jdGlvbiB0KCl7Zm9yKGxldCB0PTA7dDx0aGlzLnJvd3M7dCsrKWZvcihsZXQgZT0wO2U8dGhpcy5jb2x1bW5zO2UrKyl0aGlzLnNldCh0LGUsTWF0aC50cnVuYyh0aGlzLmdldCh0LGUpKSk7cmV0dXJuIHRoaXN9LHQudHJ1bmM9ZnVuY3Rpb24gdChuKXtyZXR1cm4gbmV3IGUobikudHJ1bmMoKX0sdC5wb3c9ZnVuY3Rpb24gdChuLG8pe3JldHVybiBuZXcgZShuKS5wb3cobyl9LHQucHJvdG90eXBlLnBvdz1mdW5jdGlvbiB0KGUpe3JldHVybiJudW1iZXIiPT10eXBlb2YgZT90aGlzLnBvd1MoZSk6dGhpcy5wb3dNKGUpfSx0LnByb3RvdHlwZS5wb3dTPWZ1bmN0aW9uIHQoZSl7Zm9yKGxldCB0PTA7dDx0aGlzLnJvd3M7dCsrKWZvcihsZXQgbj0wO248dGhpcy5jb2x1bW5zO24rKyl0aGlzLnNldCh0LG4sTWF0aC5wb3codGhpcy5nZXQodCxuKSxlKSk7cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLnBvd009ZnVuY3Rpb24gdChuKXtpZihuPWUuY2hlY2tNYXRyaXgobiksdGhpcy5yb3dzIT09bi5yb3dzfHx0aGlzLmNvbHVtbnMhPT1uLmNvbHVtbnMpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk1hdHJpY2VzIGRpbWVuc2lvbnMgbXVzdCBiZSBlcXVhbCIpO2ZvcihsZXQgdD0wO3Q8dGhpcy5yb3dzO3QrKylmb3IobGV0IGU9MDtlPHRoaXMuY29sdW1ucztlKyspdGhpcy5zZXQodCxlLE1hdGgucG93KHRoaXMuZ2V0KHQsZSksbi5nZXQodCxlKSkpO3JldHVybiB0aGlzfX0pKFBDdCxTQ3QpO2NsYXNzIEVDdCBleHRlbmRzIFBDdHtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuZGF0YT10LHRoaXMucm93cz10Lmxlbmd0aCx0aGlzLmNvbHVtbnM9dFswXS5sZW5ndGh9c2V0KHQsZSxuKXtyZXR1cm4gdGhpcy5kYXRhW3RdW2VdPW4sdGhpc31nZXQodCxlKXtyZXR1cm4gdGhpcy5kYXRhW3RdW2VdfX1jbGFzcyBBQ3R7Y29uc3RydWN0b3IodCl7bGV0IGUsbixvLGksYSxyLHMsbCxjLGQ9KHQ9RUN0LmNoZWNrTWF0cml4KHQpKS5jbG9uZSgpLHA9ZC5yb3dzLG09ZC5jb2x1bW5zLHU9bmV3IEZsb2F0NjRBcnJheShwKSxmPTE7Zm9yKGU9MDtlPHA7ZSsrKXVbZV09ZTtmb3IobD1uZXcgRmxvYXQ2NEFycmF5KHApLG49MDtuPG07bisrKXtmb3IoZT0wO2U8cDtlKyspbFtlXT1kLmdldChlLG4pO2ZvcihlPTA7ZTxwO2UrKyl7Zm9yKGM9TWF0aC5taW4oZSxuKSxhPTAsbz0wO288YztvKyspYSs9ZC5nZXQoZSxvKSpsW29dO2xbZV0tPWEsZC5zZXQoZSxuLGxbZV0pfWZvcihpPW4sZT1uKzE7ZTxwO2UrKylNYXRoLmFicyhsW2VdKT5NYXRoLmFicyhsW2ldKSYmKGk9ZSk7aWYoaSE9PW4pe2ZvcihvPTA7bzxtO28rKylyPWQuZ2V0KGksbyksZC5zZXQoaSxvLGQuZ2V0KG4sbykpLGQuc2V0KG4sbyxyKTtzPXVbaV0sdVtpXT11W25dLHVbbl09cyxmPS1mfWlmKG48cCYmMCE9PWQuZ2V0KG4sbikpZm9yKGU9bisxO2U8cDtlKyspZC5zZXQoZSxuLGQuZ2V0KGUsbikvZC5nZXQobixuKSl9dGhpcy5MVT1kLHRoaXMucGl2b3RWZWN0b3I9dSx0aGlzLnBpdm90U2lnbj1mfWlzU2luZ3VsYXIoKXtsZXQgdD10aGlzLkxVLGU9dC5jb2x1bW5zO2ZvcihsZXQgbj0wO248ZTtuKyspaWYoMD09PXQuZ2V0KG4sbikpcmV0dXJuITA7cmV0dXJuITF9c29sdmUodCl7dD1TQ3QuY2hlY2tNYXRyaXgodCk7bGV0IGU9dGhpcy5MVTtpZihlLnJvd3MhPT10LnJvd3MpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIG1hdHJpeCBkaW1lbnNpb25zIik7aWYodGhpcy5pc1Npbmd1bGFyKCkpdGhyb3cgbmV3IEVycm9yKCJMVSBtYXRyaXggaXMgc2luZ3VsYXIiKTtsZXQgbixvLGksYT10LmNvbHVtbnMscj10LnN1Yk1hdHJpeFJvdyh0aGlzLnBpdm90VmVjdG9yLDAsYS0xKSxzPWUuY29sdW1ucztmb3IoaT0wO2k8cztpKyspZm9yKG49aSsxO248cztuKyspZm9yKG89MDtvPGE7bysrKXIuc2V0KG4sbyxyLmdldChuLG8pLXIuZ2V0KGksbykqZS5nZXQobixpKSk7Zm9yKGk9cy0xO2k+PTA7aS0tKXtmb3Iobz0wO288YTtvKyspci5zZXQoaSxvLHIuZ2V0KGksbykvZS5nZXQoaSxpKSk7Zm9yKG49MDtuPGk7bisrKWZvcihvPTA7bzxhO28rKylyLnNldChuLG8sci5nZXQobixvKS1yLmdldChpLG8pKmUuZ2V0KG4saSkpfXJldHVybiByfWdldCBkZXRlcm1pbmFudCgpe2xldCB0PXRoaXMuTFU7aWYoIXQuaXNTcXVhcmUoKSl0aHJvdyBuZXcgRXJyb3IoIk1hdHJpeCBtdXN0IGJlIHNxdWFyZSIpO2xldCBlPXRoaXMucGl2b3RTaWduLG49dC5jb2x1bW5zO2ZvcihsZXQgbz0wO288bjtvKyspZSo9dC5nZXQobyxvKTtyZXR1cm4gZX1nZXQgbG93ZXJUcmlhbmd1bGFyTWF0cml4KCl7bGV0IHQ9dGhpcy5MVSxlPXQucm93cyxuPXQuY29sdW1ucyxvPW5ldyBTQ3QoZSxuKTtmb3IobGV0IGk9MDtpPGU7aSsrKWZvcihsZXQgZT0wO2U8bjtlKyspby5zZXQoaSxlLGk+ZT90LmdldChpLGUpOmk9PT1lPzE6MCk7cmV0dXJuIG99Z2V0IHVwcGVyVHJpYW5ndWxhck1hdHJpeCgpe2xldCB0PXRoaXMuTFUsZT10LnJvd3Msbj10LmNvbHVtbnMsbz1uZXcgU0N0KGUsbik7Zm9yKGxldCBpPTA7aTxlO2krKylmb3IobGV0IGU9MDtlPG47ZSsrKW8uc2V0KGksZSxpPD1lP3QuZ2V0KGksZSk6MCk7cmV0dXJuIG99Z2V0IHBpdm90UGVybXV0YXRpb25WZWN0b3IoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnBpdm90VmVjdG9yKX19ZnVuY3Rpb24gUkN0KHQsZSl7bGV0IG49MDtyZXR1cm4gTWF0aC5hYnModCk+TWF0aC5hYnMoZSk/KG49ZS90LE1hdGguYWJzKHQpKk1hdGguc3FydCgxK24qbikpOjAhPT1lPyhuPXQvZSxNYXRoLmFicyhlKSpNYXRoLnNxcnQoMStuKm4pKTowfWNsYXNzIFRDdHtjb25zdHJ1Y3Rvcih0KXtsZXQgZSxuLG8saSxhPSh0PUVDdC5jaGVja01hdHJpeCh0KSkuY2xvbmUoKSxyPXQucm93cyxzPXQuY29sdW1ucyxsPW5ldyBGbG9hdDY0QXJyYXkocyk7Zm9yKG89MDtvPHM7bysrKXtsZXQgdD0wO2ZvcihlPW87ZTxyO2UrKyl0PVJDdCh0LGEuZ2V0KGUsbykpO2lmKDAhPT10KXtmb3IoYS5nZXQobyxvKTwwJiYodD0tdCksZT1vO2U8cjtlKyspYS5zZXQoZSxvLGEuZ2V0KGUsbykvdCk7Zm9yKGEuc2V0KG8sbyxhLmdldChvLG8pKzEpLG49bysxO248cztuKyspe2ZvcihpPTAsZT1vO2U8cjtlKyspaSs9YS5nZXQoZSxvKSphLmdldChlLG4pO2ZvcihpPS1pL2EuZ2V0KG8sbyksZT1vO2U8cjtlKyspYS5zZXQoZSxuLGEuZ2V0KGUsbikraSphLmdldChlLG8pKX19bFtvXT0tdH10aGlzLlFSPWEsdGhpcy5SZGlhZz1sfXNvbHZlKHQpe3Q9U0N0LmNoZWNrTWF0cml4KHQpO2xldCBlPXRoaXMuUVIsbj1lLnJvd3M7aWYodC5yb3dzIT09bil0aHJvdyBuZXcgRXJyb3IoIk1hdHJpeCByb3cgZGltZW5zaW9ucyBtdXN0IGFncmVlIik7aWYoIXRoaXMuaXNGdWxsUmFuaygpKXRocm93IG5ldyBFcnJvcigiTWF0cml4IGlzIHJhbmsgZGVmaWNpZW50Iik7bGV0IG8saSxhLHIscz10LmNvbHVtbnMsbD10LmNsb25lKCksYz1lLmNvbHVtbnM7Zm9yKGE9MDthPGM7YSsrKWZvcihpPTA7aTxzO2krKyl7Zm9yKHI9MCxvPWE7bzxuO28rKylyKz1lLmdldChvLGEpKmwuZ2V0KG8saSk7Zm9yKHI9LXIvZS5nZXQoYSxhKSxvPWE7bzxuO28rKylsLnNldChvLGksbC5nZXQobyxpKStyKmUuZ2V0KG8sYSkpfWZvcihhPWMtMTthPj0wO2EtLSl7Zm9yKGk9MDtpPHM7aSsrKWwuc2V0KGEsaSxsLmdldChhLGkpL3RoaXMuUmRpYWdbYV0pO2ZvcihvPTA7bzxhO28rKylmb3IoaT0wO2k8cztpKyspbC5zZXQobyxpLGwuZ2V0KG8saSktbC5nZXQoYSxpKSplLmdldChvLGEpKX1yZXR1cm4gbC5zdWJNYXRyaXgoMCxjLTEsMCxzLTEpfWlzRnVsbFJhbmsoKXtsZXQgdD10aGlzLlFSLmNvbHVtbnM7Zm9yKGxldCBlPTA7ZTx0O2UrKylpZigwPT09dGhpcy5SZGlhZ1tlXSlyZXR1cm4hMTtyZXR1cm4hMH1nZXQgdXBwZXJUcmlhbmd1bGFyTWF0cml4KCl7bGV0IHQsZSxuPXRoaXMuUVIsbz1uLmNvbHVtbnMsaT1uZXcgU0N0KG8sbyk7Zm9yKHQ9MDt0PG87dCsrKWZvcihlPTA7ZTxvO2UrKylpLnNldCh0LGUsdDxlP24uZ2V0KHQsZSk6dD09PWU/dGhpcy5SZGlhZ1t0XTowKTtyZXR1cm4gaX1nZXQgb3J0aG9nb25hbE1hdHJpeCgpe2xldCB0LGUsbixvLGk9dGhpcy5RUixhPWkucm93cyxyPWkuY29sdW1ucyxzPW5ldyBTQ3QoYSxyKTtmb3Iobj1yLTE7bj49MDtuLS0pe2Zvcih0PTA7dDxhO3QrKylzLnNldCh0LG4sMCk7Zm9yKHMuc2V0KG4sbiwxKSxlPW47ZTxyO2UrKylpZigwIT09aS5nZXQobixuKSl7Zm9yKG89MCx0PW47dDxhO3QrKylvKz1pLmdldCh0LG4pKnMuZ2V0KHQsZSk7Zm9yKG89LW8vaS5nZXQobixuKSx0PW47dDxhO3QrKylzLnNldCh0LGUscy5nZXQodCxlKStvKmkuZ2V0KHQsbikpfX1yZXR1cm4gc319Y2xhc3MgTkN0e2NvbnN0cnVjdG9yKHQsZT17fSl7aWYoKHQ9RUN0LmNoZWNrTWF0cml4KHQpKS5pc0VtcHR5KCkpdGhyb3cgbmV3IEVycm9yKCJNYXRyaXggbXVzdCBiZSBub24tZW1wdHkiKTtsZXQgbj10LnJvd3Msbz10LmNvbHVtbnM7Y29uc3R7Y29tcHV0ZUxlZnRTaW5ndWxhclZlY3RvcnM6aT0hMCxjb21wdXRlUmlnaHRTaW5ndWxhclZlY3RvcnM6YT0hMCxhdXRvVHJhbnNwb3NlOnI9ITF9PWU7bGV0IHMsbD1Cb29sZWFuKGkpLGM9Qm9vbGVhbihhKSxkPSExO2lmKG48bylpZihyKXtzPXQudHJhbnNwb3NlKCksbj1zLnJvd3Msbz1zLmNvbHVtbnMsZD0hMDtsZXQgZT1sO2w9YyxjPWV9ZWxzZSBzPXQuY2xvbmUoKSxjb25zb2xlLndhcm4oIkNvbXB1dGluZyBTVkQgb24gYSBtYXRyaXggd2l0aCBtb3JlIGNvbHVtbnMgdGhhbiByb3dzLiBDb25zaWRlciBlbmFibGluZyBhdXRvVHJhbnNwb3NlIik7ZWxzZSBzPXQuY2xvbmUoKTtsZXQgcD1NYXRoLm1pbihuLG8pLG09TWF0aC5taW4obisxLG8pLHU9bmV3IEZsb2F0NjRBcnJheShtKSxmPW5ldyBTQ3QobixwKSxnPW5ldyBTQ3QobyxvKSxoPW5ldyBGbG9hdDY0QXJyYXkobyksYj1uZXcgRmxvYXQ2NEFycmF5KG4pLHk9bmV3IEZsb2F0NjRBcnJheShtKTtmb3IobGV0IHQ9MDt0PG07dCsrKXlbdF09dDtsZXQgXz1NYXRoLm1pbihuLTEsbyksQz1NYXRoLm1heCgwLE1hdGgubWluKG8tMixuKSksTT1NYXRoLm1heChfLEMpO2ZvcihsZXQgdD0wO3Q8TTt0Kyspe2lmKHQ8Xyl7dVt0XT0wO2ZvcihsZXQgZT10O2U8bjtlKyspdVt0XT1SQ3QodVt0XSxzLmdldChlLHQpKTtpZigwIT09dVt0XSl7cy5nZXQodCx0KTwwJiYodVt0XT0tdVt0XSk7Zm9yKGxldCBlPXQ7ZTxuO2UrKylzLnNldChlLHQscy5nZXQoZSx0KS91W3RdKTtzLnNldCh0LHQscy5nZXQodCx0KSsxKX11W3RdPS11W3RdfWZvcihsZXQgZT10KzE7ZTxvO2UrKyl7aWYodDxfJiYwIT09dVt0XSl7bGV0IG89MDtmb3IobGV0IGk9dDtpPG47aSsrKW8rPXMuZ2V0KGksdCkqcy5nZXQoaSxlKTtvPS1vL3MuZ2V0KHQsdCk7Zm9yKGxldCBpPXQ7aTxuO2krKylzLnNldChpLGUscy5nZXQoaSxlKStvKnMuZ2V0KGksdCkpfWhbZV09cy5nZXQodCxlKX1pZihsJiZ0PF8pZm9yKGxldCBlPXQ7ZTxuO2UrKylmLnNldChlLHQscy5nZXQoZSx0KSk7aWYodDxDKXtoW3RdPTA7Zm9yKGxldCBlPXQrMTtlPG87ZSsrKWhbdF09UkN0KGhbdF0saFtlXSk7aWYoMCE9PWhbdF0pe2hbdCsxXTwwJiYoaFt0XT0wLWhbdF0pO2ZvcihsZXQgZT10KzE7ZTxvO2UrKyloW2VdLz1oW3RdO2hbdCsxXSs9MX1pZihoW3RdPS1oW3RdLHQrMTxuJiYwIT09aFt0XSl7Zm9yKGxldCBlPXQrMTtlPG47ZSsrKWJbZV09MDtmb3IobGV0IGU9dCsxO2U8bjtlKyspZm9yKGxldCBuPXQrMTtuPG87bisrKWJbZV0rPWhbbl0qcy5nZXQoZSxuKTtmb3IobGV0IGU9dCsxO2U8bztlKyspe2xldCBvPS1oW2VdL2hbdCsxXTtmb3IobGV0IGk9dCsxO2k8bjtpKyspcy5zZXQoaSxlLHMuZ2V0KGksZSkrbypiW2ldKX19aWYoYylmb3IobGV0IGU9dCsxO2U8bztlKyspZy5zZXQoZSx0LGhbZV0pfX1sZXQgdj1NYXRoLm1pbihvLG4rMSk7aWYoXzxvJiYodVtfXT1zLmdldChfLF8pKSxuPHYmJih1W3YtMV09MCksQysxPHYmJihoW0NdPXMuZ2V0KEMsdi0xKSksaFt2LTFdPTAsbCl7Zm9yKGxldCB0PV87dDxwO3QrKyl7Zm9yKGxldCBlPTA7ZTxuO2UrKylmLnNldChlLHQsMCk7Zi5zZXQodCx0LDEpfWZvcihsZXQgdD1fLTE7dD49MDt0LS0paWYoMCE9PXVbdF0pe2ZvcihsZXQgZT10KzE7ZTxwO2UrKyl7bGV0IG89MDtmb3IobGV0IGk9dDtpPG47aSsrKW8rPWYuZ2V0KGksdCkqZi5nZXQoaSxlKTtvPS1vL2YuZ2V0KHQsdCk7Zm9yKGxldCBpPXQ7aTxuO2krKylmLnNldChpLGUsZi5nZXQoaSxlKStvKmYuZ2V0KGksdCkpfWZvcihsZXQgZT10O2U8bjtlKyspZi5zZXQoZSx0LC1mLmdldChlLHQpKTtmLnNldCh0LHQsMStmLmdldCh0LHQpKTtmb3IobGV0IGU9MDtlPHQtMTtlKyspZi5zZXQoZSx0LDApfWVsc2V7Zm9yKGxldCBlPTA7ZTxuO2UrKylmLnNldChlLHQsMCk7Zi5zZXQodCx0LDEpfX1pZihjKWZvcihsZXQgdD1vLTE7dD49MDt0LS0pe2lmKHQ8QyYmMCE9PWhbdF0pZm9yKGxldCBlPXQrMTtlPG87ZSsrKXtsZXQgbj0wO2ZvcihsZXQgaT10KzE7aTxvO2krKyluKz1nLmdldChpLHQpKmcuZ2V0KGksZSk7bj0tbi9nLmdldCh0KzEsdCk7Zm9yKGxldCBpPXQrMTtpPG87aSsrKWcuc2V0KGksZSxnLmdldChpLGUpK24qZy5nZXQoaSx0KSl9Zm9yKGxldCBlPTA7ZTxvO2UrKylnLnNldChlLHQsMCk7Zy5zZXQodCx0LDEpfWxldCB4PXYtMSxPPU51bWJlci5FUFNJTE9OO2Zvcig7dj4wOyl7bGV0IHQsZTtmb3IodD12LTI7dD49LTEmJi0xIT09dDt0LS0pe2NvbnN0IGU9TnVtYmVyLk1JTl9WQUxVRStPKk1hdGguYWJzKHVbdF0rTWF0aC5hYnModVt0KzFdKSk7aWYoTWF0aC5hYnMoaFt0XSk8PWV8fE51bWJlci5pc05hTihoW3RdKSl7aFt0XT0wO2JyZWFrfX1pZih0PT09di0yKWU9NDtlbHNle2xldCBuO2ZvcihuPXYtMTtuPj10JiZuIT09dDtuLS0pe2xldCBlPShuIT09dj9NYXRoLmFicyhoW25dKTowKSsobiE9PXQrMT9NYXRoLmFicyhoW24tMV0pOjApO2lmKE1hdGguYWJzKHVbbl0pPD1PKmUpe3Vbbl09MDticmVha319bj09PXQ/ZT0zOm49PT12LTE/ZT0xOihlPTIsdD1uKX1zd2l0Y2godCsrLGUpe2Nhc2UgMTp7bGV0IGU9aFt2LTJdO2hbdi0yXT0wO2ZvcihsZXQgbj12LTI7bj49dDtuLS0pe2xldCBpPVJDdCh1W25dLGUpLGE9dVtuXS9pLHI9ZS9pO2lmKHVbbl09aSxuIT09dCYmKGU9LXIqaFtuLTFdLGhbbi0xXT1hKmhbbi0xXSksYylmb3IobGV0IHQ9MDt0PG87dCsrKWk9YSpnLmdldCh0LG4pK3IqZy5nZXQodCx2LTEpLGcuc2V0KHQsdi0xLC1yKmcuZ2V0KHQsbikrYSpnLmdldCh0LHYtMSkpLGcuc2V0KHQsbixpKX1icmVha31jYXNlIDI6e2xldCBlPWhbdC0xXTtoW3QtMV09MDtmb3IobGV0IG89dDtvPHY7bysrKXtsZXQgaT1SQ3QodVtvXSxlKSxhPXVbb10vaSxyPWUvaTtpZih1W29dPWksZT0tcipoW29dLGhbb109YSpoW29dLGwpZm9yKGxldCBlPTA7ZTxuO2UrKylpPWEqZi5nZXQoZSxvKStyKmYuZ2V0KGUsdC0xKSxmLnNldChlLHQtMSwtcipmLmdldChlLG8pK2EqZi5nZXQoZSx0LTEpKSxmLnNldChlLG8saSl9YnJlYWt9Y2FzZSAzOntjb25zdCBlPU1hdGgubWF4KE1hdGguYWJzKHVbdi0xXSksTWF0aC5hYnModVt2LTJdKSxNYXRoLmFicyhoW3YtMl0pLE1hdGguYWJzKHVbdF0pLE1hdGguYWJzKGhbdF0pKSxpPXVbdi0xXS9lLGE9dVt2LTJdL2Uscj1oW3YtMl0vZSxzPXVbdF0vZSxkPWhbdF0vZSxwPSgoYStpKSooYS1pKStyKnIpLzIsbT1pKnIqKGkqcik7bGV0IGI9MDswPT09cCYmMD09PW18fChiPXA8MD8wLU1hdGguc3FydChwKnArbSk6TWF0aC5zcXJ0KHAqcCttKSxiPW0vKHArYikpO2xldCB5PShzK2kpKihzLWkpK2IsXz1zKmQ7Zm9yKGxldCBlPXQ7ZTx2LTE7ZSsrKXtsZXQgaT1SQ3QoeSxfKTswPT09aSYmKGk9TnVtYmVyLk1JTl9WQUxVRSk7bGV0IGE9eS9pLHI9Xy9pO2lmKGUhPT10JiYoaFtlLTFdPWkpLHk9YSp1W2VdK3IqaFtlXSxoW2VdPWEqaFtlXS1yKnVbZV0sXz1yKnVbZSsxXSx1W2UrMV09YSp1W2UrMV0sYylmb3IobGV0IHQ9MDt0PG87dCsrKWk9YSpnLmdldCh0LGUpK3IqZy5nZXQodCxlKzEpLGcuc2V0KHQsZSsxLC1yKmcuZ2V0KHQsZSkrYSpnLmdldCh0LGUrMSkpLGcuc2V0KHQsZSxpKTtpZihpPVJDdCh5LF8pLDA9PT1pJiYoaT1OdW1iZXIuTUlOX1ZBTFVFKSxhPXkvaSxyPV8vaSx1W2VdPWkseT1hKmhbZV0rcip1W2UrMV0sdVtlKzFdPS1yKmhbZV0rYSp1W2UrMV0sXz1yKmhbZSsxXSxoW2UrMV09YSpoW2UrMV0sbCYmZTxuLTEpZm9yKGxldCB0PTA7dDxuO3QrKylpPWEqZi5nZXQodCxlKStyKmYuZ2V0KHQsZSsxKSxmLnNldCh0LGUrMSwtcipmLmdldCh0LGUpK2EqZi5nZXQodCxlKzEpKSxmLnNldCh0LGUsaSl9aFt2LTJdPXk7YnJlYWt9Y2FzZSA0OmlmKHVbdF08PTAmJih1W3RdPXVbdF08MD8tdVt0XTowLGMpKWZvcihsZXQgZT0wO2U8PXg7ZSsrKWcuc2V0KGUsdCwtZy5nZXQoZSx0KSk7Zm9yKDt0PHgmJiEodVt0XT49dVt0KzFdKTspe2xldCBlPXVbdF07aWYodVt0XT11W3QrMV0sdVt0KzFdPWUsYyYmdDxvLTEpZm9yKGxldCBuPTA7bjxvO24rKyllPWcuZ2V0KG4sdCsxKSxnLnNldChuLHQrMSxnLmdldChuLHQpKSxnLnNldChuLHQsZSk7aWYobCYmdDxuLTEpZm9yKGxldCBvPTA7bzxuO28rKyllPWYuZ2V0KG8sdCsxKSxmLnNldChvLHQrMSxmLmdldChvLHQpKSxmLnNldChvLHQsZSk7dCsrfXYtLX19aWYoZCl7bGV0IHQ9ZztnPWYsZj10fXRoaXMubT1uLHRoaXMubj1vLHRoaXMucz11LHRoaXMuVT1mLHRoaXMuVj1nfXNvbHZlKHQpe2xldCBlPXQsbj10aGlzLnRocmVzaG9sZCxvPXRoaXMucy5sZW5ndGgsaT1TQ3QuemVyb3MobyxvKTtmb3IobGV0IHQ9MDt0PG87dCsrKU1hdGguYWJzKHRoaXMuc1t0XSk8PW4/aS5zZXQodCx0LDApOmkuc2V0KHQsdCwxL3RoaXMuc1t0XSk7bGV0IGE9dGhpcy5VLHI9dGhpcy5yaWdodFNpbmd1bGFyVmVjdG9ycyxzPXIubW11bChpKSxsPXIucm93cyxjPWEucm93cyxkPVNDdC56ZXJvcyhsLGMpO2ZvcihsZXQgdD0wO3Q8bDt0KyspZm9yKGxldCBlPTA7ZTxjO2UrKyl7bGV0IG49MDtmb3IobGV0IGk9MDtpPG87aSsrKW4rPXMuZ2V0KHQsaSkqYS5nZXQoZSxpKTtkLnNldCh0LGUsbil9cmV0dXJuIGQubW11bChlKX1zb2x2ZUZvckRpYWdvbmFsKHQpe3JldHVybiB0aGlzLnNvbHZlKFNDdC5kaWFnKHQpKX1pbnZlcnNlKCl7bGV0IHQ9dGhpcy5WLGU9dGhpcy50aHJlc2hvbGQsbj10LnJvd3Msbz10LmNvbHVtbnMsaT1uZXcgU0N0KG4sdGhpcy5zLmxlbmd0aCk7Zm9yKGxldCBhPTA7YTxuO2ErKylmb3IobGV0IG49MDtuPG87bisrKU1hdGguYWJzKHRoaXMuc1tuXSk+ZSYmaS5zZXQoYSxuLHQuZ2V0KGEsbikvdGhpcy5zW25dKTtsZXQgYT10aGlzLlUscj1hLnJvd3Mscz1hLmNvbHVtbnMsbD1uZXcgU0N0KG4scik7Zm9yKGxldCB0PTA7dDxuO3QrKylmb3IobGV0IGU9MDtlPHI7ZSsrKXtsZXQgbj0wO2ZvcihsZXQgbz0wO288cztvKyspbis9aS5nZXQodCxvKSphLmdldChlLG8pO2wuc2V0KHQsZSxuKX1yZXR1cm4gbH1nZXQgY29uZGl0aW9uKCl7cmV0dXJuIHRoaXMuc1swXS90aGlzLnNbTWF0aC5taW4odGhpcy5tLHRoaXMubiktMV19Z2V0IG5vcm0yKCl7cmV0dXJuIHRoaXMuc1swXX1nZXQgcmFuaygpe2xldCB0PU1hdGgubWF4KHRoaXMubSx0aGlzLm4pKnRoaXMuc1swXSpOdW1iZXIuRVBTSUxPTixlPTAsbj10aGlzLnM7Zm9yKGxldCBvPTAsaT1uLmxlbmd0aDtvPGk7bysrKW5bb10+dCYmZSsrO3JldHVybiBlfWdldCBkaWFnb25hbCgpe3JldHVybiBBcnJheS5mcm9tKHRoaXMucyl9Z2V0IHRocmVzaG9sZCgpe3JldHVybiBOdW1iZXIuRVBTSUxPTi8yKk1hdGgubWF4KHRoaXMubSx0aGlzLm4pKnRoaXMuc1swXX1nZXQgbGVmdFNpbmd1bGFyVmVjdG9ycygpe3JldHVybiB0aGlzLlV9Z2V0IHJpZ2h0U2luZ3VsYXJWZWN0b3JzKCl7cmV0dXJuIHRoaXMuVn1nZXQgZGlhZ29uYWxNYXRyaXgoKXtyZXR1cm4gU0N0LmRpYWcodGhpcy5zKX19ZnVuY3Rpb24gSUN0KHQsZSxuLG8saSl7bGV0IGE9U0N0LmV5ZShlLmxlbmd0aCxlLmxlbmd0aCxuKm8qbyk7Y29uc3Qgcj1pKGUpO2xldCBzPW5ldyBGbG9hdDY0QXJyYXkodC54Lmxlbmd0aCk7Zm9yKGxldCBlPTA7ZTx0LngubGVuZ3RoO2UrKylzW2VdPXIodC54W2VdKTtsZXQgbD0oZnVuY3Rpb24gYyh0LGUsbixvLGkpe2NvbnN0IGE9bi5sZW5ndGgscj10LngubGVuZ3RoO2xldCBzPW5ldyBBcnJheShhKTtmb3IobGV0IGw9MDtsPGE7bCsrKXtzW2xdPW5ldyBBcnJheShyKTtsZXQgYT1uLnNsaWNlKCk7YVtsXSs9bztsZXQgYz1pKGEpO2ZvcihsZXQgbj0wO248cjtuKyspc1tsXVtuXT1lW25dLWModC54W25dKX1yZXR1cm4gbmV3IFNDdChzKX0pKHQscyxlLG8saSksZD0oZnVuY3Rpb24gcCh0LGUpe2NvbnN0IG49dC54Lmxlbmd0aDtsZXQgbz1uZXcgQXJyYXkobik7Zm9yKGxldCBpPTA7aTxuO2krKylvW2ldPVt0LnlbaV0tZVtpXV07cmV0dXJuIG5ldyBTQ3Qobyl9KSh0LHMpLG09KGZ1bmN0aW9uIHUodCxlPSExKXtyZXR1cm4gdD1FQ3QuY2hlY2tNYXRyaXgodCksZT9uZXcgTkN0KHQpLmludmVyc2UoKTooZnVuY3Rpb24gbih0LGUsbz0hMSl7cmV0dXJuIHQ9RUN0LmNoZWNrTWF0cml4KHQpLGU9RUN0LmNoZWNrTWF0cml4KGUpLG8/bmV3IE5DdCh0KS5zb2x2ZShlKTp0LmlzU3F1YXJlKCk/bmV3IEFDdCh0KS5zb2x2ZShlKTpuZXcgVEN0KHQpLnNvbHZlKGUpfSkodCxTQ3QuZXllKHQucm93cykpfSkoYS5hZGQobC5tbXVsKGwudHJhbnNwb3NlKCkpKSk7cmV0dXJuKGU9KGU9bmV3IFNDdChbZV0pKS5zdWIobS5tbXVsKGwpLm1tdWwoZCkubXVsKG8pLnRyYW5zcG9zZSgpKSkudG8xREFycmF5KCl9dmFyIHpDdD1xeChPYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxkZWZhdWx0OmZ1bmN0aW9uIEhDdCh0LGUsbj17fSl7bGV0e21heEl0ZXJhdGlvbnM6bz0xMDAsZ3JhZGllbnREaWZmZXJlbmNlOmk9LjEsZGFtcGluZzphPTAsZXJyb3JUb2xlcmFuY2U6cj0uMDEsbWluVmFsdWVzOnMsbWF4VmFsdWVzOmwsaW5pdGlhbFZhbHVlczpjfT1uO2lmKGE8PTApdGhyb3cgbmV3IEVycm9yKCJUaGUgZGFtcGluZyBvcHRpb24gbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlciIpO2lmKCF0Lnh8fCF0LnkpdGhyb3cgbmV3IEVycm9yKCJUaGUgZGF0YSBwYXJhbWV0ZXIgbXVzdCBoYXZlIHggYW5kIHkgZWxlbWVudHMiKTtpZighaUN0KHQueCl8fHQueC5sZW5ndGg8Mnx8IWlDdCh0LnkpfHx0LnkubGVuZ3RoPDIpdGhyb3cgbmV3IEVycm9yKCJUaGUgZGF0YSBwYXJhbWV0ZXIgZWxlbWVudHMgbXVzdCBiZSBhbiBhcnJheSB3aXRoIG1vcmUgdGhhbiAyIHBvaW50cyIpO2lmKHQueC5sZW5ndGghPT10LnkubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiVGhlIGRhdGEgcGFyYW1ldGVyIGVsZW1lbnRzIG11c3QgaGF2ZSB0aGUgc2FtZSBzaXplIik7bGV0IGQ9Y3x8bmV3IEFycmF5KGUubGVuZ3RoKS5maWxsKDEpLHA9ZC5sZW5ndGg7aWYobD1sfHxuZXcgQXJyYXkocCkuZmlsbChOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikscz1zfHxuZXcgQXJyYXkocCkuZmlsbChOdW1iZXIuTUlOX1NBRkVfSU5URUdFUiksbC5sZW5ndGghPT1zLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIm1pblZhbHVlcyBhbmQgbWF4VmFsdWVzIG11c3QgYmUgdGhlIHNhbWUgc2l6ZSIpO2lmKCFpQ3QoZCkpdGhyb3cgbmV3IEVycm9yKCJpbml0aWFsVmFsdWVzIG11c3QgYmUgYW4gYXJyYXkiKTtsZXQgbSx1PWFDdCh0LGQsZSksZj11PD1yO2ZvcihtPTA7bTxvJiYhZjttKyspe2Q9SUN0KHQsZCxhLGksZSk7Zm9yKGxldCB0PTA7dDxwO3QrKylkW3RdPU1hdGgubWluKE1hdGgubWF4KHNbdF0sZFt0XSksbFt0XSk7aWYodT1hQ3QodCxkLGUpLGlzTmFOKHUpKWJyZWFrO2Y9dTw9cn1yZXR1cm57cGFyYW1ldGVyVmFsdWVzOmQscGFyYW1ldGVyRXJyb3I6dSxpdGVyYXRpb25zOm19fX0pKSxGQ3Q9WXgoKGZ1bmN0aW9uKHQsZSl7dmFyIG49R3gmJkd4Ll9fYXdhaXRlcnx8ZnVuY3Rpb24odCxlLG4sbyl7cmV0dXJuIG5ldyhufHwobj1Qcm9taXNlKSkoKGZ1bmN0aW9uKGksYSl7ZnVuY3Rpb24gcih0KXt0cnl7bChvLm5leHQodCkpfWNhdGNoKHQpe2EodCl9fWZ1bmN0aW9uIHModCl7dHJ5e2woby50aHJvdyh0KSl9Y2F0Y2godCl7YSh0KX19ZnVuY3Rpb24gbCh0KXt0LmRvbmU/aSh0LnZhbHVlKTpuZXcgbigoZnVuY3Rpb24oZSl7ZSh0LnZhbHVlKX0pKS50aGVuKHIscyl9bCgobz1vLmFwcGx5KHQsZXx8W10pKS5uZXh0KCkpfSkpfSxvPUd4JiZHeC5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24odCxlKXt2YXIgbixvLGksYSxyPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJmlbMF0pdGhyb3cgaVsxXTtyZXR1cm4gaVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBhPXtuZXh0OnMoMCksdGhyb3c6cygxKSxyZXR1cm46cygyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKGFbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksYTtmdW5jdGlvbiBzKGEpe3JldHVybiBmdW5jdGlvbihzKXtyZXR1cm4oZnVuY3Rpb24gbChhKXtpZihuKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO3I7KXRyeXtpZihuPTEsbyYmKGk9MiZhWzBdP28ucmV0dXJuOmFbMF0/by50aHJvd3x8KChpPW8ucmV0dXJuKSYmaS5jYWxsKG8pLDApOm8ubmV4dCkmJiEoaT1pLmNhbGwobyxhWzFdKSkuZG9uZSlyZXR1cm4gaTtzd2l0Y2gobz0wLGkmJihhPVsyJmFbMF0saS52YWx1ZV0pLGFbMF0pe2Nhc2UgMDpjYXNlIDE6aT1hO2JyZWFrO2Nhc2UgNDpyZXR1cm4gci5sYWJlbCsrLHt2YWx1ZTphWzFdLGRvbmU6ITF9O2Nhc2UgNTpyLmxhYmVsKyssbz1hWzFdLGE9WzBdO2NvbnRpbnVlO2Nhc2UgNzphPXIub3BzLnBvcCgpLHIudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKGk9KGk9ci50cnlzKS5sZW5ndGg+MCYmaVtpLmxlbmd0aC0xXSl8fDYhPT1hWzBdJiYyIT09YVswXSkpe3I9MDtjb250aW51ZX1pZigzPT09YVswXSYmKCFpfHxhWzFdPmlbMF0mJmFbMV08aVszXSkpe3IubGFiZWw9YVsxXTticmVha31pZig2PT09YVswXSYmci5sYWJlbDxpWzFdKXtyLmxhYmVsPWlbMV0saT1hO2JyZWFrfWlmKGkmJnIubGFiZWw8aVsyXSl7ci5sYWJlbD1pWzJdLHIub3BzLnB1c2goYSk7YnJlYWt9aVsyXSYmci5vcHMucG9wKCksci50cnlzLnBvcCgpO2NvbnRpbnVlfWE9ZS5jYWxsKHQscil9Y2F0Y2godCl7YT1bNix0XSxvPTB9ZmluYWxseXtuPWk9MH1pZig1JmFbMF0pdGhyb3cgYVsxXTtyZXR1cm57dmFsdWU6YVswXT9hWzFdOnZvaWQgMCxkb25lOiEwfX0pKFthLHNdKX19fSxpPUd4JiZHeC5fX3JlYWR8fGZ1bmN0aW9uKHQsZSl7dmFyIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdO2lmKCFuKXJldHVybiB0O3ZhciBvLGksYT1uLmNhbGwodCkscj1bXTt0cnl7Zm9yKDsodm9pZCAwPT09ZXx8ZS0tID4wKSYmIShvPWEubmV4dCgpKS5kb25lOylyLnB1c2goby52YWx1ZSl9Y2F0Y2godCl7aT17ZXJyb3I6dH19ZmluYWxseXt0cnl7byYmIW8uZG9uZSYmKG49YS5yZXR1cm4pJiZuLmNhbGwoYSl9ZmluYWxseXtpZihpKXRocm93IGkuZXJyb3J9fXJldHVybiByfSxhPUd4JiZHeC5fX3NwcmVhZHx8ZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdD10LmNvbmNhdChpKGFyZ3VtZW50c1tlXSkpO3JldHVybiB0fSxyPUd4JiZHeC5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKHQpe2lmKHQmJnQuX19lc01vZHVsZSlyZXR1cm4gdDt2YXIgZT17fTtpZihudWxsIT10KWZvcih2YXIgbiBpbiB0KU9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbikmJihlW25dPXRbbl0pO3JldHVybiBlLmRlZmF1bHQ9dCxlfSxzPUd4JiZHeC5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0Ll9fZXNNb2R1bGU/dDp7ZGVmYXVsdDp0fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBsPXIoJF90KSxjPXIodEN0KSxkPXIobkN0KSxwPXIoZUN0KSxtPXIoUV90KSx1PXMoekN0KSxmPTFlLTUsZz0uMDAxLGg9KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt2b2lkIDA9PT10JiYodD17fSk7dmFyIGU9dGhpczt0aGlzLmxlYXJuaW5nUmF0ZT0xLHRoaXMubG9jYWxDb25uZWN0aXZpdHk9MSx0aGlzLm1pbkRpc3Q9LjEsdGhpcy5uQ29tcG9uZW50cz0yLHRoaXMubkVwb2Nocz0wLHRoaXMubk5laWdoYm9ycz0xNSx0aGlzLm5lZ2F0aXZlU2FtcGxlUmF0ZT01LHRoaXMucmFuZG9tPU1hdGgucmFuZG9tLHRoaXMucmVwdWxzaW9uU3RyZW5ndGg9MSx0aGlzLnNldE9wTWl4UmF0aW89MSx0aGlzLnNwcmVhZD0xLHRoaXMudHJhbnNmb3JtUXVldWVTaXplPTQsdGhpcy50YXJnZXRNZXRyaWM9ImNhdGVnb3JpY2FsIix0aGlzLnRhcmdldFdlaWdodD0uNSx0aGlzLnRhcmdldE5OZWlnaGJvcnM9dGhpcy5uTmVpZ2hib3JzLHRoaXMuZGlzdGFuY2VGbj1iLHRoaXMuaXNJbml0aWFsaXplZD0hMSx0aGlzLnJwRm9yZXN0PVtdLHRoaXMuZW1iZWRkaW5nPVtdLHRoaXMub3B0aW1pemF0aW9uU3RhdGU9bmV3IF87dmFyIG49ZnVuY3Rpb24obil7dm9pZCAwIT09dFtuXSYmKGVbbl09dFtuXSl9O24oImRpc3RhbmNlRm4iKSxuKCJsZWFybmluZ1JhdGUiKSxuKCJsb2NhbENvbm5lY3Rpdml0eSIpLG4oIm1pbkRpc3QiKSxuKCJuQ29tcG9uZW50cyIpLG4oIm5FcG9jaHMiKSxuKCJuTmVpZ2hib3JzIiksbigibmVnYXRpdmVTYW1wbGVSYXRlIiksbigicmFuZG9tIiksbigicmVwdWxzaW9uU3RyZW5ndGgiKSxuKCJzZXRPcE1peFJhdGlvIiksbigic3ByZWFkIiksbigidHJhbnNmb3JtUXVldWVTaXplIil9cmV0dXJuIHQucHJvdG90eXBlLmZpdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbml0aWFsaXplRml0KHQpLHRoaXMub3B0aW1pemVMYXlvdXQoKSx0aGlzLmVtYmVkZGluZ30sdC5wcm90b3R5cGUuZml0QXN5bmM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9ZnVuY3Rpb24oKXtyZXR1cm4hMH0pLG4odGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbigpe3JldHVybiBvKHRoaXMsKGZ1bmN0aW9uKG4pe3N3aXRjaChuLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRoaXMuaW5pdGlhbGl6ZUZpdCh0KSxbNCx0aGlzLm9wdGltaXplTGF5b3V0QXN5bmMoZSldO2Nhc2UgMTpyZXR1cm4gbi5zZW50KCksWzIsdGhpcy5lbWJlZGRpbmddfX0pKX0pKX0sdC5wcm90b3R5cGUuc2V0U3VwZXJ2aXNlZFByb2plY3Rpb249ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT17fSksdGhpcy5ZPXQsdGhpcy50YXJnZXRNZXRyaWM9ZS50YXJnZXRNZXRyaWN8fHRoaXMudGFyZ2V0TWV0cmljLHRoaXMudGFyZ2V0V2VpZ2h0PWUudGFyZ2V0V2VpZ2h0fHx0aGlzLnRhcmdldFdlaWdodCx0aGlzLnRhcmdldE5OZWlnaGJvcnM9ZS50YXJnZXROTmVpZ2hib3JzfHx0aGlzLnRhcmdldE5OZWlnaGJvcnN9LHQucHJvdG90eXBlLnNldFByZWNvbXB1dGVkS05OPWZ1bmN0aW9uKHQsZSl7dGhpcy5rbm5JbmRpY2VzPXQsdGhpcy5rbm5EaXN0YW5jZXM9ZX0sdC5wcm90b3R5cGUuaW5pdGlhbGl6ZUZpdD1mdW5jdGlvbih0KXtpZih0Lmxlbmd0aDw9dGhpcy5uTmVpZ2hib3JzKXRocm93IG5ldyBFcnJvcigiTm90IGVub3VnaCBkYXRhIHBvaW50cyAoIit0Lmxlbmd0aCsiKSB0byBjcmVhdGUgbk5laWdoYm9yczogIit0aGlzLm5OZWlnaGJvcnMrIi4gIEFkZCBtb3JlIGRhdGEgcG9pbnRzIG9yIGFkanVzdCB0aGUgY29uZmlndXJhdGlvbi4iKTtpZih0aGlzLlg9PT10JiZ0aGlzLmlzSW5pdGlhbGl6ZWQpcmV0dXJuIHRoaXMuZ2V0TkVwb2NocygpO2lmKHRoaXMuWD10LCF0aGlzLmtubkluZGljZXMmJiF0aGlzLmtubkRpc3RhbmNlcyl7dmFyIGU9dGhpcy5uZWFyZXN0TmVpZ2hib3JzKHQpO3RoaXMua25uSW5kaWNlcz1lLmtubkluZGljZXMsdGhpcy5rbm5EaXN0YW5jZXM9ZS5rbm5EaXN0YW5jZXN9dGhpcy5ncmFwaD10aGlzLmZ1enp5U2ltcGxpY2lhbFNldCh0LHRoaXMubk5laWdoYm9ycyx0aGlzLnNldE9wTWl4UmF0aW8pLHRoaXMubWFrZVNlYXJjaEZucygpLHRoaXMuc2VhcmNoR3JhcGg9dGhpcy5tYWtlU2VhcmNoR3JhcGgodCksdGhpcy5wcm9jZXNzR3JhcGhGb3JTdXBlcnZpc2VkUHJvamVjdGlvbigpO3ZhciBuPXRoaXMuaW5pdGlhbGl6ZVNpbXBsaWNpYWxTZXRFbWJlZGRpbmcoKSxvPW4udGFpbCxpPW4uZXBvY2hzUGVyU2FtcGxlO3JldHVybiB0aGlzLm9wdGltaXphdGlvblN0YXRlLmhlYWQ9bi5oZWFkLHRoaXMub3B0aW1pemF0aW9uU3RhdGUudGFpbD1vLHRoaXMub3B0aW1pemF0aW9uU3RhdGUuZXBvY2hzUGVyU2FtcGxlPWksdGhpcy5pbml0aWFsaXplT3B0aW1pemF0aW9uKCksdGhpcy5wcmVwYXJlRm9yT3B0aW1pemF0aW9uTG9vcCgpLHRoaXMuaXNJbml0aWFsaXplZD0hMCx0aGlzLmdldE5FcG9jaHMoKX0sdC5wcm90b3R5cGUubWFrZVNlYXJjaEZucz1mdW5jdGlvbigpe3ZhciB0PWQubWFrZUluaXRpYWxpemF0aW9ucyh0aGlzLmRpc3RhbmNlRm4pLGU9dC5pbml0RnJvbVJhbmRvbTt0aGlzLmluaXRGcm9tVHJlZT10LmluaXRGcm9tVHJlZSx0aGlzLmluaXRGcm9tUmFuZG9tPWUsdGhpcy5zZWFyY2g9ZC5tYWtlSW5pdGlhbGl6ZWROTlNlYXJjaCh0aGlzLmRpc3RhbmNlRm4pfSx0LnByb3RvdHlwZS5tYWtlU2VhcmNoR3JhcGg9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMua25uSW5kaWNlcyxuPXRoaXMua25uRGlzdGFuY2VzLG89bmV3IGMuU3BhcnNlTWF0cml4KFtdLFtdLFtdLFt0Lmxlbmd0aCx0Lmxlbmd0aF0pLGk9MDtpPGUubGVuZ3RoO2krKylmb3IodmFyIGE9ZVtpXSxyPW5baV0scz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgbD1yW3NdO2w+MCYmby5zZXQoaSxhW3NdLGwpfXZhciBkPWMudHJhbnNwb3NlKG8pO3JldHVybiBjLm1heGltdW0obyxkKX0sdC5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10aGlzLlg7aWYodm9pZCAwPT09bnx8MD09PW4ubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiTm8gZGF0YSBoYXMgYmVlbiBmaXQuIik7dmFyIG89TWF0aC5mbG9vcih0aGlzLm5OZWlnaGJvcnMqdGhpcy50cmFuc2Zvcm1RdWV1ZVNpemUpO289TWF0aC5taW4obi5sZW5ndGgsbyk7dmFyIGk9ZC5pbml0aWFsaXplU2VhcmNoKHRoaXMucnBGb3Jlc3Qsbix0LG8sdGhpcy5pbml0RnJvbVJhbmRvbSx0aGlzLmluaXRGcm9tVHJlZSx0aGlzLnJhbmRvbSksYT10aGlzLnNlYXJjaChuLHRoaXMuc2VhcmNoR3JhcGgsaSx0KSxyPWwuZGVoZWFwU29ydChhKSxzPXIuaW5kaWNlcyxwPXIud2VpZ2h0cztzPXMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5zbGljZSgwLGUubk5laWdoYm9ycyl9KSkscD1wLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuc2xpY2UoMCxlLm5OZWlnaGJvcnMpfSkpO3ZhciB1PU1hdGgubWF4KDAsdGhpcy5sb2NhbENvbm5lY3Rpdml0eS0xKSxmPXRoaXMuc21vb3RoS05ORGlzdGFuY2UocCx0aGlzLm5OZWlnaGJvcnMsdSksZz10aGlzLmNvbXB1dGVNZW1iZXJzaGlwU3RyZW5ndGhzKHMscCxmLnNpZ21hcyxmLnJob3MpLGg9bmV3IGMuU3BhcnNlTWF0cml4KGcucm93cyxnLmNvbHMsZy52YWxzLFt0Lmxlbmd0aCxuLmxlbmd0aF0pLGI9Yy5ub3JtYWxpemUoaCwibDEiKSx5PWMuZ2V0Q1NSKGIpLF89dC5sZW5ndGgsQz1QKG0ucmVzaGFwZTJkKHkuaW5kaWNlcyxfLHRoaXMubk5laWdoYm9ycyksbS5yZXNoYXBlMmQoeS52YWx1ZXMsXyx0aGlzLm5OZWlnaGJvcnMpLHRoaXMuZW1iZWRkaW5nKSxNPXRoaXMubkVwb2Nocz90aGlzLm5FcG9jaHMvMzpoLm5Sb3dzPD0xZTQ/MTAwOjMwLHY9aC5nZXRWYWx1ZXMoKS5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU+dD9lOnR9KSwwKTtoPWgubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdDx2L00/MDp0fSkpLGg9Yy5lbGltaW5hdGVaZXJvcyhoKTt2YXIgeD10aGlzLm1ha2VFcG9jaHNQZXJTYW1wbGUoaC5nZXRWYWx1ZXMoKSxNKSxPPWguZ2V0Um93cygpLHc9aC5nZXRDb2xzKCk7cmV0dXJuIHRoaXMuYXNzaWduT3B0aW1pemF0aW9uU3RhdGVQYXJhbWV0ZXJzKHtoZWFkRW1iZWRkaW5nOkMsdGFpbEVtYmVkZGluZzp0aGlzLmVtYmVkZGluZyxoZWFkOk8sdGFpbDp3LGN1cnJlbnRFcG9jaDowLG5FcG9jaHM6TSxuVmVydGljZXM6aC5nZXREaW1zKClbMV0sZXBvY2hzUGVyU2FtcGxlOnh9KSx0aGlzLnByZXBhcmVGb3JPcHRpbWl6YXRpb25Mb29wKCksdGhpcy5vcHRpbWl6ZUxheW91dCgpfSx0LnByb3RvdHlwZS5wcm9jZXNzR3JhcGhGb3JTdXBlcnZpc2VkUHJvamVjdGlvbj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuWTtpZih0KXtpZih0Lmxlbmd0aCE9PXRoaXMuWC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJMZW5ndGggb2YgWCBhbmQgeSBtdXN0IGJlIGVxdWFsIik7ImNhdGVnb3JpY2FsIj09PXRoaXMudGFyZ2V0TWV0cmljJiYodGhpcy5ncmFwaD10aGlzLmNhdGVnb3JpY2FsU2ltcGxpY2lhbFNldEludGVyc2VjdGlvbih0aGlzLmdyYXBoLHQsdGhpcy50YXJnZXRXZWlnaHQ8MT8xLygxLXRoaXMudGFyZ2V0V2VpZ2h0KSoyLjU6MWUxMikpfX0sdC5wcm90b3R5cGUuc3RlcD1mdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW1pemF0aW9uU3RhdGUuY3VycmVudEVwb2NoO3JldHVybiB0PHRoaXMuZ2V0TkVwb2NocygpJiZ0aGlzLm9wdGltaXplTGF5b3V0U3RlcCh0KSx0aGlzLm9wdGltaXphdGlvblN0YXRlLmN1cnJlbnRFcG9jaH0sdC5wcm90b3R5cGUuZ2V0RW1iZWRkaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW1iZWRkaW5nfSx0LnByb3RvdHlwZS5uZWFyZXN0TmVpZ2hib3JzPWZ1bmN0aW9uKHQpe3ZhciBlLG49dGhpcy5uTmVpZ2hib3JzLG89ZC5tYWtlTk5EZXNjZW50KHRoaXMuZGlzdGFuY2VGbix0aGlzLnJhbmRvbSksaT01K01hdGguZmxvb3IoLjU9PShlPU1hdGgucG93KHQubGVuZ3RoLC41KS8yMCk/MDpNYXRoLnJvdW5kKGUpKSxhPU1hdGgubWF4KDUsTWF0aC5mbG9vcihNYXRoLnJvdW5kKChmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5sb2codCkvTWF0aC5sb2coMil9KSh0Lmxlbmd0aCkpKSk7dGhpcy5ycEZvcmVzdD1wLm1ha2VGb3Jlc3QodCxuLGksdGhpcy5yYW5kb20pO3ZhciByPW8odCxwLm1ha2VMZWFmQXJyYXkodGhpcy5ycEZvcmVzdCksbixhKTtyZXR1cm57a25uSW5kaWNlczpyLmluZGljZXMsa25uRGlzdGFuY2VzOnIud2VpZ2h0c319LHQucHJvdG90eXBlLmZ1enp5U2ltcGxpY2lhbFNldD1mdW5jdGlvbih0LGUsbil7dm9pZCAwPT09biYmKG49MSk7dmFyIG89dGhpcyxpPW8ua25uSW5kaWNlcyxhPXZvaWQgMD09PWk/W106aSxyPW8ua25uRGlzdGFuY2VzLHM9dm9pZCAwPT09cj9bXTpyLGw9dGhpcy5zbW9vdGhLTk5EaXN0YW5jZShzLGUsby5sb2NhbENvbm5lY3Rpdml0eSksZD10aGlzLmNvbXB1dGVNZW1iZXJzaGlwU3RyZW5ndGhzKGEscyxsLnNpZ21hcyxsLnJob3MpLHA9bmV3IGMuU3BhcnNlTWF0cml4KGQucm93cyxkLmNvbHMsZC52YWxzLFt0Lmxlbmd0aCx0Lmxlbmd0aF0pLG09Yy50cmFuc3Bvc2UocCksdT1jLnBhaXJ3aXNlTXVsdGlwbHkocCxtKSxmPWMuc3VidHJhY3QoYy5hZGQocCxtKSx1KSxnPWMubXVsdGlwbHlTY2FsYXIoZixuKSxoPWMubXVsdGlwbHlTY2FsYXIodSwxLW4pO3JldHVybiBjLmFkZChnLGgpfSx0LnByb3RvdHlwZS5jYXRlZ29yaWNhbFNpbXBsaWNpYWxTZXRJbnRlcnNlY3Rpb249ZnVuY3Rpb24odCxlLG4sbyl7dm9pZCAwPT09byYmKG89MSk7dmFyIGk9eCh0LGUsbyxuKTtyZXR1cm4gTyhpPWMuZWxpbWluYXRlWmVyb3MoaSkpfSx0LnByb3RvdHlwZS5zbW9vdGhLTk5EaXN0YW5jZT1mdW5jdGlvbih0LGUsbixvLGkpe3ZvaWQgMD09PW4mJihuPTEpLHZvaWQgMD09PW8mJihvPTY0KSx2b2lkIDA9PT1pJiYoaT0xKTtmb3IodmFyIGE9TWF0aC5sb2coZSkvTWF0aC5sb2coMikqaSxyPW0uemVyb3ModC5sZW5ndGgpLHM9bS56ZXJvcyh0Lmxlbmd0aCksbD0wO2w8dC5sZW5ndGg7bCsrKXt2YXIgYz0wLGQ9MS8wLHA9MSx1PXRbbF0saD11LmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQ+MH0pKTtpZihoLmxlbmd0aD49bil7dmFyIGI9TWF0aC5mbG9vcihuKSx5PW4tYjtiPjA/KHJbbF09aFtiLTFdLHk+ZiYmKHJbbF0rPXkqKGhbYl0taFtiLTFdKSkpOnJbbF09eSpoWzBdfWVsc2UgaC5sZW5ndGg+MCYmKHJbbF09bS5tYXgoaCkpO2Zvcih2YXIgXz0wO188bztfKyspe2Zvcih2YXIgQz0wLE09MTtNPHRbbF0ubGVuZ3RoO00rKyl7dmFyIHY9dFtsXVtNXS1yW2xdO0MrPXY+MD9NYXRoLmV4cCgtdi9wKToxfWlmKE1hdGguYWJzKEMtYSk8ZilicmVhaztDPmE/cD0oYysoZD1wKSkvMjooYz1wLGQ9PT0xLzA/cCo9MjpwPShjK2QpLzIpfWlmKHNbbF09cCxyW2xdPjApe3ZhciB4PW0ubWVhbih1KTtzW2xdPGcqeCYmKHNbbF09Zyp4KX1lbHNle3ZhciBPPW0ubWVhbih0Lm1hcChtLm1lYW4pKTtzW2xdPGcqTyYmKHNbbF09ZypPKX19cmV0dXJue3NpZ21hczpzLHJob3M6cn19LHQucHJvdG90eXBlLmNvbXB1dGVNZW1iZXJzaGlwU3RyZW5ndGhzPWZ1bmN0aW9uKHQsZSxuLG8pe2Zvcih2YXIgaT10Lmxlbmd0aCxhPXRbMF0ubGVuZ3RoLHI9bS56ZXJvcyhpKmEpLHM9bS56ZXJvcyhpKmEpLGw9bS56ZXJvcyhpKmEpLGM9MDtjPGk7YysrKWZvcih2YXIgZD0wO2Q8YTtkKyspe3ZhciBwPTA7LTEhPT10W2NdW2RdJiYocD10W2NdW2RdPT09Yz8wOmVbY11bZF0tb1tjXTw9MD8xOk1hdGguZXhwKC0oZVtjXVtkXS1vW2NdKS9uW2NdKSxyW2MqYStkXT1jLHNbYyphK2RdPXRbY11bZF0sbFtjKmErZF09cCl9cmV0dXJue3Jvd3M6cixjb2xzOnMsdmFsczpsfX0sdC5wcm90b3R5cGUuaW5pdGlhbGl6ZVNpbXBsaWNpYWxTZXRFbWJlZGRpbmc9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcyxlPXRoaXMuZ2V0TkVwb2NocygpLG49dGhpcy5uQ29tcG9uZW50cyxvPXRoaXMuZ3JhcGguZ2V0VmFsdWVzKCksaT0wLGE9MDthPG8ubGVuZ3RoO2ErKylpPG9bYV0mJihpPW9bYV0pO3ZhciByPXRoaXMuZ3JhcGgubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdDxpL2U/MDp0fSkpO3RoaXMuZW1iZWRkaW5nPW0uemVyb3Moci5uUm93cykubWFwKChmdW5jdGlvbigpe3JldHVybiBtLnplcm9zKG4pLm1hcCgoZnVuY3Rpb24oKXtyZXR1cm4gMjAqbS50YXVSYW5kKHQucmFuZG9tKS0xMH0pKX0pKTt2YXIgcz1bXSxsPVtdLGM9W10sZD1yLmdldEFsbCgpO2ZvcihhPTA7YTxkLmxlbmd0aDthKyspe3ZhciBwPWRbYV07cC52YWx1ZSYmKHMucHVzaChwLnZhbHVlKSxjLnB1c2gocC5yb3cpLGwucHVzaChwLmNvbCkpfXJldHVybntoZWFkOmwsdGFpbDpjLGVwb2Noc1BlclNhbXBsZTp0aGlzLm1ha2VFcG9jaHNQZXJTYW1wbGUocyxlKX19LHQucHJvdG90eXBlLm1ha2VFcG9jaHNQZXJTYW1wbGU9ZnVuY3Rpb24odCxlKXt2YXIgbj1tLmZpbGxlZCh0Lmxlbmd0aCwtMSksbz1tLm1heCh0KSxpPXQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC9vKmV9KSk7cmV0dXJuIGkuZm9yRWFjaCgoZnVuY3Rpb24odCxvKXt0PjAmJihuW29dPWUvaVtvXSl9KSksbn0sdC5wcm90b3R5cGUuYXNzaWduT3B0aW1pemF0aW9uU3RhdGVQYXJhbWV0ZXJzPWZ1bmN0aW9uKHQpe09iamVjdC5hc3NpZ24odGhpcy5vcHRpbWl6YXRpb25TdGF0ZSx0KX0sdC5wcm90b3R5cGUucHJlcGFyZUZvck9wdGltaXphdGlvbkxvb3A9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dC5yZXB1bHNpb25TdHJlbmd0aCxuPXQubGVhcm5pbmdSYXRlLG89dC5uZWdhdGl2ZVNhbXBsZVJhdGUsaT10aGlzLm9wdGltaXphdGlvblN0YXRlLHI9aS5lcG9jaHNQZXJTYW1wbGUscz1pLmhlYWRFbWJlZGRpbmcsbD1zWzBdLmxlbmd0aCxjPXMubGVuZ3RoPT09aS50YWlsRW1iZWRkaW5nLmxlbmd0aCxkPXIubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC9vfSkpLHA9YShkKSxtPWEocik7dGhpcy5hc3NpZ25PcHRpbWl6YXRpb25TdGF0ZVBhcmFtZXRlcnMoe2Vwb2NoT2ZOZXh0U2FtcGxlOm0sZXBvY2hPZk5leHROZWdhdGl2ZVNhbXBsZTpwLGVwb2Noc1Blck5lZ2F0aXZlU2FtcGxlOmQsbW92ZU90aGVyOmMsaW5pdGlhbEFscGhhOm4sYWxwaGE6bixnYW1tYTplLGRpbTpsfSl9LHQucHJvdG90eXBlLmluaXRpYWxpemVPcHRpbWl6YXRpb249ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVtYmVkZGluZyxlPXRoaXMuZW1iZWRkaW5nLG49dGhpcy5vcHRpbWl6YXRpb25TdGF0ZSxvPW4uaGVhZCxpPW4udGFpbCxhPW4uZXBvY2hzUGVyU2FtcGxlLHI9dGhpcy5nZXRORXBvY2hzKCkscz10aGlzLmdyYXBoLm5Db2xzLGw9dih0aGlzLnNwcmVhZCx0aGlzLm1pbkRpc3QpO3RoaXMuYXNzaWduT3B0aW1pemF0aW9uU3RhdGVQYXJhbWV0ZXJzKHtoZWFkRW1iZWRkaW5nOnQsdGFpbEVtYmVkZGluZzplLGhlYWQ6byx0YWlsOmksZXBvY2hzUGVyU2FtcGxlOmEsYTpsLmEsYjpsLmIsbkVwb2NoczpyLG5WZXJ0aWNlczpzfSl9LHQucHJvdG90eXBlLm9wdGltaXplTGF5b3V0U3RlcD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5vcHRpbWl6YXRpb25TdGF0ZSxuPWUuaGVhZCxvPWUudGFpbCxpPWUuaGVhZEVtYmVkZGluZyxhPWUudGFpbEVtYmVkZGluZyxyPWUuZXBvY2hzUGVyU2FtcGxlLHM9ZS5lcG9jaE9mTmV4dFNhbXBsZSxsPWUuZXBvY2hPZk5leHROZWdhdGl2ZVNhbXBsZSxjPWUuZXBvY2hzUGVyTmVnYXRpdmVTYW1wbGUsZD1lLm1vdmVPdGhlcixwPWUuaW5pdGlhbEFscGhhLHU9ZS5hbHBoYSxmPWUuZ2FtbWEsZz1lLmEsaD1lLmIsYj1lLmRpbSx5PWUubkVwb2NocyxfPWUublZlcnRpY2VzLHY9MDt2PHIubGVuZ3RoO3YrKylpZighKHNbdl0+dCkpe3ZhciB4PW5bdl0sTz1pW3hdLFA9YVtvW3ZdXSx3PU0oTyxQKSxrPTA7dz4wJiYoaz0tMipnKmgqTWF0aC5wb3codyxoLTEpLGsvPWcqTWF0aC5wb3codyxoKSsxKTtmb3IodmFyIFM9MDtTPGI7UysrKXt2YXIgRD1DKGsqKE9bU10tUFtTXSksNCk7T1tTXSs9RCp1LGQmJihQW1NdKz0tRCp1KX1zW3ZdKz1yW3ZdO2Zvcih2YXIgRT1NYXRoLmZsb29yKCh0LWxbdl0pL2Nbdl0pLEE9MDtBPEU7QSsrKXt2YXIgUj1tLnRhdVJhbmRJbnQoXyx0aGlzLnJhbmRvbSksVD1hW1JdLE49TShPLFQpLEk9MDtpZihOPjApST0yKmYqaCxJLz0oLjAwMStOKSooZypNYXRoLnBvdyhOLGgpKzEpO2Vsc2UgaWYoeD09PVIpY29udGludWU7Zm9yKFM9MDtTPGI7UysrKUQ9NCxJPjAmJihEPUMoSSooT1tTXS1UW1NdKSw0KSksT1tTXSs9RCp1fWxbdl0rPUUqY1t2XX1yZXR1cm4gZS5hbHBoYT1wKigxLXQveSksZS5jdXJyZW50RXBvY2grPTEsaX0sdC5wcm90b3R5cGUub3B0aW1pemVMYXlvdXRBc3luYz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiB2b2lkIDA9PT10JiYodD1mdW5jdGlvbigpe3JldHVybiEwfSksbmV3IFByb21pc2UoKGZ1bmN0aW9uKGksYSl7dmFyIHI9ZnVuY3Rpb24oKXtyZXR1cm4gbihlLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKCl7dmFyIGUsbixzLGwsYztyZXR1cm4gbyh0aGlzLChmdW5jdGlvbihvKXt0cnl7aWYobj0oZT10aGlzLm9wdGltaXphdGlvblN0YXRlKS5uRXBvY2hzLHRoaXMuZW1iZWRkaW5nPXRoaXMub3B0aW1pemVMYXlvdXRTdGVwKGUuY3VycmVudEVwb2NoKSxsPSExPT09dChzPXRoaXMub3B0aW1pemF0aW9uU3RhdGUuY3VycmVudEVwb2NoKSxjPXM9PT1uLGx8fGMpcmV0dXJuWzIsaShjKV07c2V0VGltZW91dCgoZnVuY3Rpb24oKXtyZXR1cm4gcigpfSksMCl9Y2F0Y2godCl7YSh0KX1yZXR1cm5bMl19KSl9KSl9O3NldFRpbWVvdXQoKGZ1bmN0aW9uKCl7cmV0dXJuIHIoKX0pLDApfSkpfSx0LnByb3RvdHlwZS5vcHRpbWl6ZUxheW91dD1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD1mdW5jdGlvbigpe3JldHVybiEwfSk7Zm9yKHZhciBlPSExLG49W107IWU7KXt2YXIgbz10aGlzLm9wdGltaXphdGlvblN0YXRlLGk9by5uRXBvY2hzO249dGhpcy5vcHRpbWl6ZUxheW91dFN0ZXAoby5jdXJyZW50RXBvY2gpO3ZhciBhPXRoaXMub3B0aW1pemF0aW9uU3RhdGUuY3VycmVudEVwb2NoLHI9ITE9PT10KGEpO2U9YT09PWl8fHJ9cmV0dXJuIG59LHQucHJvdG90eXBlLmdldE5FcG9jaHM9ZnVuY3Rpb24oKXtpZih0aGlzLm5FcG9jaHM+MClyZXR1cm4gdGhpcy5uRXBvY2hzO3ZhciB0PXRoaXMuZ3JhcGgublJvd3M7cmV0dXJuIHQ8PTI1MDA/NTAwOnQ8PTVlMz80MDA6dDw9NzUwMD8zMDA6MjAwfSx0fSkoKTtmdW5jdGlvbiBiKHQsZSl7Zm9yKHZhciBuPTAsbz0wO288dC5sZW5ndGg7bysrKW4rPU1hdGgucG93KHRbb10tZVtvXSwyKTtyZXR1cm4gTWF0aC5zcXJ0KG4pfWUuVU1BUD1oLGUuZXVjbGlkZWFuPWIsZS5jb3NpbmU9ZnVuY3Rpb24geSh0LGUpe2Zvcih2YXIgbj0wLG89MCxpPTAsYT0wO2E8dC5sZW5ndGg7YSsrKW4rPXRbYV0qZVthXSxvKz1NYXRoLnBvdyh0W2FdLDIpLGkrPU1hdGgucG93KGVbYV0sMik7cmV0dXJuIDA9PT1vJiYwPT09aT8wOjA9PT1vfHwwPT09aT8xOjEtbi9NYXRoLnNxcnQobyppKX07dmFyIF89ZnVuY3Rpb24gXygpe3RoaXMuY3VycmVudEVwb2NoPTAsdGhpcy5oZWFkRW1iZWRkaW5nPVtdLHRoaXMudGFpbEVtYmVkZGluZz1bXSx0aGlzLmhlYWQ9W10sdGhpcy50YWlsPVtdLHRoaXMuZXBvY2hzUGVyU2FtcGxlPVtdLHRoaXMuZXBvY2hPZk5leHRTYW1wbGU9W10sdGhpcy5lcG9jaE9mTmV4dE5lZ2F0aXZlU2FtcGxlPVtdLHRoaXMuZXBvY2hzUGVyTmVnYXRpdmVTYW1wbGU9W10sdGhpcy5tb3ZlT3RoZXI9ITAsdGhpcy5pbml0aWFsQWxwaGE9MSx0aGlzLmFscGhhPTEsdGhpcy5nYW1tYT0xLHRoaXMuYT0xLjU3Njk0MzQ2MDMxMTMwNzcsdGhpcy5iPS44OTUwNjA4Nzc5MTA5NzMzLHRoaXMuZGltPTIsdGhpcy5uRXBvY2hzPTUwMCx0aGlzLm5WZXJ0aWNlcz0wfTtmdW5jdGlvbiBDKHQsZSl7cmV0dXJuIHQ+ZT9lOnQ8LWU/LWU6dH1mdW5jdGlvbiBNKHQsZSl7Zm9yKHZhciBuPTAsbz0wO288dC5sZW5ndGg7bysrKW4rPU1hdGgucG93KHRbb10tZVtvXSwyKTtyZXR1cm4gbn1mdW5jdGlvbiB2KHQsZSl7dmFyIG49bS5saW5lYXIoMCwzKnQsMzAwKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0PGU/MTp0fSkpLG89bS56ZXJvcyhuLmxlbmd0aCkubWFwKChmdW5jdGlvbihvLGkpe3JldHVybiBuW2ldPj1lP01hdGguZXhwKC0obltpXS1lKS90KTpvfSkpLGE9dS5kZWZhdWx0KHt4Om4seTpvfSwoZnVuY3Rpb24odCl7dmFyIGU9aSh0LDIpLG49ZVswXSxvPWVbMV07cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiAxLygxK24qTWF0aC5wb3codCwyKm8pKX19KSx7ZGFtcGluZzoxLjUsaW5pdGlhbFZhbHVlczpbLjUsLjVdLGdyYWRpZW50RGlmZmVyZW5jZTouMSxtYXhJdGVyYXRpb25zOjEwMCxlcnJvclRvbGVyYW5jZTouMDF9KS5wYXJhbWV0ZXJWYWx1ZXMscj1pKGEsMik7cmV0dXJue2E6clswXSxiOnJbMV19fWZ1bmN0aW9uIHgodCxlLG4sbyl7cmV0dXJuIHZvaWQgMD09PW4mJihuPTEpLHZvaWQgMD09PW8mJihvPTUpLHQubWFwKChmdW5jdGlvbih0LGksYSl7cmV0dXJuLTE9PT1lW2ldfHwtMT09PWVbYV0/dCpNYXRoLmV4cCgtbik6ZVtpXSE9PWVbYV0/dCpNYXRoLmV4cCgtbyk6dH0pKX1mdW5jdGlvbiBPKHQpe3Q9Yy5ub3JtYWxpemUodCwibWF4Iik7dmFyIGU9Yy50cmFuc3Bvc2UodCksbj1jLnBhaXJ3aXNlTXVsdGlwbHkoZSx0KTtyZXR1cm4gdD1jLmFkZCh0LGMuc3VidHJhY3QoZSxuKSksYy5lbGltaW5hdGVaZXJvcyh0KX1mdW5jdGlvbiBQKHQsZSxuKXtmb3IodmFyIG89bS56ZXJvcyh0Lmxlbmd0aCkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gbS56ZXJvcyhuWzBdLmxlbmd0aCl9KSksaT0wO2k8dC5sZW5ndGg7aSsrKWZvcih2YXIgYT0wO2E8dFswXS5sZW5ndGg7YSsrKWZvcih2YXIgcj0wO3I8blswXS5sZW5ndGg7cisrKW9baV1bcl0rPWVbaV1bYV0qblt0W2ldW2FdXVtyXTtyZXR1cm4gb31lLmZpbmRBQlBhcmFtcz12LGUuZmFzdEludGVyc2VjdGlvbj14LGUucmVzZXRMb2NhbENvbm5lY3Rpdml0eT1PLGUuaW5pdFRyYW5zZm9ybT1QfSkpO2Z1bmN0aW9uIExDdCh0KXtsZXQgZSxuLG89dC5sZW5ndGg7Zm9yKDtvOyluPU1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpvLS0pLGU9dFtvXSx0W29dPXRbbl0sdFtuXT1lO3JldHVybiB0fWZ1bmN0aW9uIEJDdCh0LGUpe3JldHVybmAke2V9LyR7dH1gfVl4KChmdW5jdGlvbih0LGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLlVNQVA9RkN0LlVNQVB9KSk7Y2xhc3MgVkN0e2NvbnN0cnVjdG9yKHQpe3RoaXMuaHR0cD10LHRoaXMuaHR0cFBhdGhQcmVmaXg9ImRhdGEvcGx1Z2luL25wbWkifWZldGNoRGF0YSh0KXtyZXR1cm4gTHQodGhpcy5mZXRjaEFubm90YXRpb25zKHQpLHRoaXMuZmV0Y2hNZXRyaWNzKHQpLHRoaXMuZmV0Y2hWYWx1ZXModCksdGhpcy5mZXRjaEVtYmVkZGluZ3ModCkpLnBpcGUoaHQoKChbdCxlLG4sb10pPT57Y29uc3QgaT17fSxhPXt9O2xldCByLHM9MDtmb3IoY29uc3QgciBvZiBPYmplY3Qua2V5cyh0KSlmb3IoY29uc3QgbCBpbiB0W3JdKXtjb25zdCBjPXRbcl1bbF07T2JqZWN0LmtleXMobykubGVuZ3RoJiYhYVtjXSYmb1tyXVtsXSYmb1tyXVtsXS5zb21lKCh0PT4wIT09dCkpJiYoYVtjXT17dmVjdG9yOm9bcl1bbF0saW5kZXg6cyxuYW1lOmN9LHMrPTEpO2NvbnN0IGQ9bmV3IE1hcDtmb3IoY29uc3QgdCBpbiBlW3JdKXtjb25zdCBvPWVbcl1bdF0saT1WYnQobyk7bGV0IGE9ZC5nZXQoaSk7YXx8KGE9e25QTUlWYWx1ZTpudWxsLGNvdW50VmFsdWU6bnVsbCxhbm5vdGF0aW9uOmMsbWV0cmljOmkscnVuOnJ9LGQuc2V0KGksYSkpLEZidChvKT9hLmNvdW50VmFsdWU9bltyXVtsXVt0XTpMYnQobykmJihhLm5QTUlWYWx1ZT1uW3JdW2xdW3RdKX1pW2NdPVsuLi5pW2NdP2lbY106W10sLi4uZC52YWx1ZXMoKV19cmV0dXJuIE9iamVjdC5rZXlzKGEpLmxlbmd0aCYmKHI9KGZ1bmN0aW9uIGwodCl7Y29uc3QgZT1PYmplY3Qua2V5cyh0KTtyZXR1cm57cG9pbnRzOnQscG9pbnRLZXlzOmUsc2h1ZmZsZWREYXRhSW5kaWNlczpMQ3QoKG49ZS5sZW5ndGgsWy4uLm5ldyBBcnJheShuKV0ubWFwKCgodCxlKT0+ZSkpKSksaGFzVW1hcFJ1bjohMX07dmFyIG59KShhKSkse2Fubm90YXRpb25EYXRhOmksbWV0cmljczplLGVtYmVkZGluZ0RhdGFTZXQ6cn19KSkscmUoKHQ9PnQgaW5zdGFuY2VvZiBHRCYmNDAwPD10LnN0YXR1cyYmdC5zdGF0dXM8NTAwP1ooe2Fubm90YXRpb25EYXRhOnt9LG1ldHJpY3M6e30sZW1iZWRkaW5nRGF0YVNldDp2b2lkIDB9KTpYKHQpKSkpfWZldGNoQW5ub3RhdGlvbnModCl7cmV0dXJuIEx0KHQubWFwKCh0PT50aGlzLmh0dHAuZ2V0KGAvZXhwZXJpbWVudC8ke3R9LyR7dGhpcy5odHRwUGF0aFByZWZpeH0vYW5ub3RhdGlvbnNgKS5waXBlKGh0KChlPT4oZnVuY3Rpb24gbih0LGUpe3JldHVybiBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXModCkubWFwKCgoW3Qsbl0pPT5bQkN0KHQsZSksbl0pKSl9KShlLHQpKSkpKSkpLnBpcGUoaHQoKHQ9PntsZXQgZT17fTtmb3IoY29uc3QgbiBvZiB0KWU9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLG4pO3JldHVybiBlfSkpKX1mZXRjaE1ldHJpY3ModCl7cmV0dXJuIEx0KHQubWFwKCh0PT50aGlzLmh0dHAuZ2V0KGAvZXhwZXJpbWVudC8ke3R9LyR7dGhpcy5odHRwUGF0aFByZWZpeH0vbWV0cmljc2ApLnBpcGUoaHQoKGU9PihmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyh0KS5tYXAoKChbdCxuXSk9PltCQ3QodCxlKSxuXSkpKX0pKGUsdCkpKSkpKSkucGlwZShodCgodD0+e2xldCBlPXt9O2Zvcihjb25zdCBuIG9mIHQpZT1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZSksbik7cmV0dXJuIGV9KSkpfWZldGNoVmFsdWVzKHQpe3JldHVybiBMdCh0Lm1hcCgodD0+dGhpcy5odHRwLmdldChgL2V4cGVyaW1lbnQvJHt0fS8ke3RoaXMuaHR0cFBhdGhQcmVmaXh9L3ZhbHVlc2ApLnBpcGUoaHQoKGU9PihmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyh0KS5tYXAoKChbdCxuXSk9PltCQ3QodCxlKSxuXSkpKX0pKGUsdCkpKSkpKSkucGlwZShodCgodD0+e2xldCBlPXt9O2Zvcihjb25zdCBuIG9mIHQpZT1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZSksbik7cmV0dXJuIGV9KSkpfWZldGNoRW1iZWRkaW5ncyh0KXtyZXR1cm4gTHQodC5tYXAoKHQ9PnRoaXMuaHR0cC5nZXQoYC9leHBlcmltZW50LyR7dH0vJHt0aGlzLmh0dHBQYXRoUHJlZml4fS9lbWJlZGRpbmdzYCkucGlwZShodCgoZT0+KGZ1bmN0aW9uIG4odCxlKXtyZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKHQpLm1hcCgoKFt0LG5dKT0+W0JDdCh0LGUpLG5dKSkpfSkoZSx0KSkpKSkpKS5waXBlKGh0KCh0PT57bGV0IGU9e307Zm9yKGNvbnN0IG4gb2YgdCllPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSxuKTtyZXR1cm4gZX0pKSl9fVZDdC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8VkN0KSh1cyhFRSkpfSxWQ3QuybVwcm92PWxvKHt0b2tlbjpWQ3QsZmFjdG9yeTpWQ3QuybVmYWN9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFZDdCxbe3R5cGU6Sm19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6RUV9XX0pLG51bGwpO2NsYXNzIGpDdHt9akN0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxqQ3QpfSxqQ3QuybVtb2Q9Wm8oe3R5cGU6akN0fSksakN0Lsm1aW5qPWNvKHtwcm92aWRlcnM6W1ZDdF0saW1wb3J0czpbW0FFXV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKGpDdCx7aW1wb3J0czpbQUVdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihqQ3QsW3t0eXBlOmtfLGFyZ3M6W3tpbXBvcnRzOltBRV0scHJvdmlkZXJzOltWQ3RdfV19XSxudWxsLG51bGwpO2NsYXNzIFVDdHtjb25zdHJ1Y3Rvcih0LGUsbil7dGhpcy5hY3Rpb25zJD10LHRoaXMuc3RvcmU9ZSx0aGlzLmRhdGFTb3VyY2U9bix0aGlzLmxvYWREYXRhJD1nUygoKCk9Pld0KHRoaXMubG9hZFBsdWdpbkRhdGEoKSkucGlwZShodCgoKCk9Pih7fSkpKSkpLHtkaXNwYXRjaDohMX0pfWxvYWRQbHVnaW5EYXRhKCl7cmV0dXJuIHRoaXMuYWN0aW9ucyQucGlwZSh4UyhtYnQpLGtuKHRoaXMuc3RvcmUuc2VsZWN0KFdodCksdGhpcy5zdG9yZS5zZWxlY3QoeEQpKSxHdCgoKFssdCxlXSk9PnQhPT1CRS5MT0FESU5HJiZudWxsIT09ZSkpLF9uKCgoKT0+dGhpcy5zdG9yZS5kaXNwYXRjaCh1YnQoKSkpKSxUdCgoKFssLHRdKT0+dGhpcy5kYXRhU291cmNlLmZldGNoRGF0YSh0KS5waXBlKF9uKCh0PT57dGhpcy5zdG9yZS5kaXNwYXRjaChmYnQodCkpfSkpLGh0KCgoKT0+e30pKSxyZSgoKCk9Pih0aGlzLnN0b3JlLmRpc3BhdGNoKGdidCgpKSxVKSkpKSkpKX19VUN0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxVQ3QpKHVzKHZTKSx1cyhFayksdXMoVkN0KSl9LFVDdC7JtXByb3Y9bG8oe3Rva2VuOlVDdCxmYWN0b3J5OlVDdC7JtWZhY30pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoVUN0LFt7dHlwZTpKbX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTp2U30se3R5cGU6RWt9LHt0eXBlOlZDdH1dfSksbnVsbCk7Y2xhc3MgV0N0e31XQ3QuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFdDdCl9LFdDdC7JtW1vZD1abyh7dHlwZTpXQ3R9KSxXQ3QuybVpbmo9Y28oe30pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oV0N0LHtkZWNsYXJhdGlvbnM6W2podF0sZXhwb3J0czpbamh0XX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoV0N0LFt7dHlwZTprXyxhcmdzOlt7ZGVjbGFyYXRpb25zOltqaHRdLGV4cG9ydHM6W2podF19XX1dLG51bGwsbnVsbCk7Y2xhc3MgR0N0e31HQ3QuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEdDdCl9LEdDdC7JtW1vZD1abyh7dHlwZTpHQ3R9KSxHQ3QuybVpbmo9Y28oe2ltcG9ydHM6W1tCdixkRyxBWSxmMV1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhHQ3Qse2RlY2xhcmF0aW9uczpbWWJ0LHFidF0saW1wb3J0czpbQnYsZEcsQVksZjFdLGV4cG9ydHM6W3FidF19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEdDdCxbe3R5cGU6a18sYXJnczpbe2RlY2xhcmF0aW9uczpbWWJ0LHFidF0saW1wb3J0czpbQnYsZEcsQVksZjFdLGV4cG9ydHM6W3FidF19XX1dLG51bGwsbnVsbCk7Y2xhc3MgWUN0e31ZQ3QuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFlDdCl9LFlDdC7JtW1vZD1abyh7dHlwZTpZQ3R9KSxZQ3QuybVpbmo9Y28oe2ltcG9ydHM6W1tCdixWVSxqVSxkRyxneXQsWVFdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oWUN0LHtkZWNsYXJhdGlvbnM6W0N5dCxNeXRdLGltcG9ydHM6W0J2LFZVLGpVLGRHLGd5dCxZUV0sZXhwb3J0czpbTXl0XX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoWUN0LFt7dHlwZTprXyxhcmdzOlt7ZGVjbGFyYXRpb25zOltDeXQsTXl0XSxpbXBvcnRzOltCdixWVSxqVSxkRyxneXQsWVFdLGV4cG9ydHM6W015dF19XX1dLG51bGwsbnVsbCk7Y2xhc3MgcUN0e31xQ3QuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHFDdCl9LHFDdC7JtW1vZD1abyh7dHlwZTpxQ3R9KSxxQ3QuybVpbmo9Y28oe2ltcG9ydHM6W1tCdixneXRdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8ocUN0LHtkZWNsYXJhdGlvbnM6W3Z5dF0saW1wb3J0czpbQnYsZ3l0XSxleHBvcnRzOlt2eXRdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihxQ3QsW3t0eXBlOmtfLGFyZ3M6W3tkZWNsYXJhdGlvbnM6W3Z5dF0saW1wb3J0czpbQnYsZ3l0XSxleHBvcnRzOlt2eXRdfV19XSxudWxsLG51bGwpO2NsYXNzIFpDdHt9WkN0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxaQ3QpfSxaQ3QuybVtb2Q9Wm8oe3R5cGU6WkN0fSksWkN0Lsm1aW5qPWNvKHtpbXBvcnRzOltbQnYsZ3l0LFlDdCxxQ3RdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oWkN0LHtkZWNsYXJhdGlvbnM6W3d5dCxreXRdLGltcG9ydHM6W0J2LGd5dCxZQ3QscUN0XSxleHBvcnRzOltreXRdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihaQ3QsW3t0eXBlOmtfLGFyZ3M6W3tkZWNsYXJhdGlvbnM6W3d5dCxreXRdLGltcG9ydHM6W0J2LGd5dCxZQ3QscUN0XSxleHBvcnRzOltreXRdfV19XSxudWxsLG51bGwpO2NsYXNzIFhDdHt9WEN0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxYQ3QpfSxYQ3QuybVtb2Q9Wm8oe3R5cGU6WEN0fSksWEN0Lsm1aW5qPWNvKHtpbXBvcnRzOltbQnYsZEcsekhdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oWEN0LHtkZWNsYXJhdGlvbnM6W0tidCxKYnRdLGltcG9ydHM6W0J2LGRHLHpIXSxleHBvcnRzOltKYnRdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihYQ3QsW3t0eXBlOmtfLGFyZ3M6W3tkZWNsYXJhdGlvbnM6W0tidCxKYnRdLGltcG9ydHM6W0J2LGRHLHpIXSxleHBvcnRzOltKYnRdfV19XSxudWxsLG51bGwpO2NsYXNzIEtDdHt9S0N0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxLQ3QpfSxLQ3QuybVtb2Q9Wm8oe3R5cGU6S0N0fSksS0N0Lsm1aW5qPWNvKHtpbXBvcnRzOltbQnYsR0N0LFpDdCxYQ3RdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oS0N0LHtkZWNsYXJhdGlvbnM6W1N5dF0saW1wb3J0czpbQnYsR0N0LFpDdCxYQ3RdLGV4cG9ydHM6W1N5dF19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKEtDdCxbe3R5cGU6a18sYXJnczpbe2RlY2xhcmF0aW9uczpbU3l0XSxpbXBvcnRzOltCdixHQ3QsWkN0LFhDdF0sZXhwb3J0czpbU3l0XX1dfV0sbnVsbCxudWxsKTtjbGFzcyBKQ3R7fUpDdC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8SkN0KX0sSkN0Lsm1bW9kPVpvKHt0eXBlOkpDdH0pLEpDdC7JtWluaj1jbyh7aW1wb3J0czpbW0J2LFZVLHpILGRHXV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKEpDdCx7ZGVjbGFyYXRpb25zOltBeXQsUnl0XSxpbXBvcnRzOltCdixWVSx6SCxkR10sZXhwb3J0czpbUnl0XX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoSkN0LFt7dHlwZTprXyxhcmdzOlt7ZGVjbGFyYXRpb25zOltBeXQsUnl0XSxpbXBvcnRzOltCdixWVSx6SCxkR10sZXhwb3J0czpbUnl0XX1dfV0sbnVsbCxudWxsKTtjbGFzcyBRQ3R7fVFDdC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8UUN0KX0sUUN0Lsm1bW9kPVpvKHt0eXBlOlFDdH0pLFFDdC7JtWluaj1jbyh7aW1wb3J0czpbW0J2LFZVLGRHLHpILEpDdF1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhRQ3Qse2RlY2xhcmF0aW9uczpbSXl0LHp5dF0saW1wb3J0czpbQnYsVlUsZEcsekgsSkN0XSxleHBvcnRzOlt6eXRdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihRQ3QsW3t0eXBlOmtfLGFyZ3M6W3tkZWNsYXJhdGlvbnM6W0l5dCx6eXRdLGltcG9ydHM6W0J2LFZVLGRHLHpILEpDdF0sZXhwb3J0czpbenl0XX1dfV0sbnVsbCxudWxsKTtjbGFzcyAkQ3R7fSRDdC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8JEN0KX0sJEN0Lsm1bW9kPVpvKHt0eXBlOiRDdH0pLCRDdC7JtWluaj1jbyh7aW1wb3J0czpbW0J2LFZVLGRHLEFZXV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKCRDdCx7ZGVjbGFyYXRpb25zOlt0X3QsZV90XSxpbXBvcnRzOltCdixWVSxkRyxBWV0sZXhwb3J0czpbZV90XX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoJEN0LFt7dHlwZTprXyxhcmdzOlt7ZGVjbGFyYXRpb25zOlt0X3QsZV90XSxpbXBvcnRzOltCdixWVSxkRyxBWV0sZXhwb3J0czpbZV90XX1dfV0sbnVsbCxudWxsKTtjbGFzcyB0TXR7fXRNdC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8dE10KX0sdE10Lsm1bW9kPVpvKHt0eXBlOnRNdH0pLHRNdC7JtWluaj1jbyh7aW1wb3J0czpbW0J2LFZVLGRHLHpILFF5dCwkQ3RdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8odE10LHtkZWNsYXJhdGlvbnM6W2lfdCxhX3RdLGltcG9ydHM6W0J2LFZVLGRHLHpILFF5dCwkQ3RdLGV4cG9ydHM6W2FfdF19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHRNdCxbe3R5cGU6a18sYXJnczpbe2RlY2xhcmF0aW9uczpbaV90LGFfdF0saW1wb3J0czpbQnYsVlUsZEcsekgsUXl0LCRDdF0sZXhwb3J0czpbYV90XX1dfV0sbnVsbCxudWxsKTtjbGFzcyBlTXR7fWVNdC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8ZU10KX0sZU10Lsm1bW9kPVpvKHt0eXBlOmVNdH0pLGVNdC7JtWluaj1jbyh7aW1wb3J0czpbW0J2LFZVLHlZLGRHXV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKGVNdCx7ZGVjbGFyYXRpb25zOltwX3QsbV90XSxpbXBvcnRzOltCdixWVSx5WSxkR10sZXhwb3J0czpbbV90XX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoZU10LFt7dHlwZTprXyxhcmdzOlt7ZGVjbGFyYXRpb25zOltwX3QsbV90XSxpbXBvcnRzOltCdixWVSx5WSxkR10sZXhwb3J0czpbbV90XX1dfV0sbnVsbCxudWxsKTtjbGFzcyBuTXR7fW5NdC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8bk10KX0sbk10Lsm1bW9kPVpvKHt0eXBlOm5NdH0pLG5NdC7JtWluaj1jbyh7aW1wb3J0czpbW0J2XV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKG5NdCx7ZGVjbGFyYXRpb25zOltzX3RdLGltcG9ydHM6W0J2XSxleHBvcnRzOltzX3RdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihuTXQsW3t0eXBlOmtfLGFyZ3M6W3tkZWNsYXJhdGlvbnM6W3NfdF0saW1wb3J0czpbQnZdLGV4cG9ydHM6W3NfdF19XX1dLG51bGwsbnVsbCk7Y2xhc3Mgb010e31vTXQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fG9NdCl9LG9NdC7JtW1vZD1abyh7dHlwZTpvTXR9KSxvTXQuybVpbmo9Y28oe2ltcG9ydHM6W1tuTXRdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8ob010LHtkZWNsYXJhdGlvbnM6W2xfdF0saW1wb3J0czpbbk10XSxleHBvcnRzOltsX3RdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihvTXQsW3t0eXBlOmtfLGFyZ3M6W3tkZWNsYXJhdGlvbnM6W2xfdF0saW1wb3J0czpbbk10XSxleHBvcnRzOltsX3RdfV19XSxudWxsLG51bGwpO2NsYXNzIGlNdHt9aU10Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxpTXQpfSxpTXQuybVtb2Q9Wm8oe3R5cGU6aU10fSksaU10Lsm1aW5qPWNvKHtpbXBvcnRzOltbQnYsVlUseVksZEcsekhdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oaU10LHtkZWNsYXJhdGlvbnM6W19fdCx5X3RdLGltcG9ydHM6W0J2LFZVLHlZLGRHLHpIXSxleHBvcnRzOltfX3RdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihpTXQsW3t0eXBlOmtfLGFyZ3M6W3tkZWNsYXJhdGlvbnM6W19fdCx5X3RdLGltcG9ydHM6W0J2LFZVLHlZLGRHLHpIXSxleHBvcnRzOltfX3RdfV19XSxudWxsLG51bGwpO2NsYXNzIGFNdHt9YU10Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxhTXQpfSxhTXQuybVtb2Q9Wm8oe3R5cGU6YU10fSksYU10Lsm1aW5qPWNvKHtpbXBvcnRzOltbQnYsdE10LGVNdCxvTXQsaUYsaU10XV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKGFNdCx7ZGVjbGFyYXRpb25zOlt2X3QseF90XSxpbXBvcnRzOltCdix0TXQsZU10LG9NdCxpRixpTXRdLGV4cG9ydHM6W3hfdF19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGFNdCxbe3R5cGU6a18sYXJnczpbe2RlY2xhcmF0aW9uczpbdl90LHhfdF0saW1wb3J0czpbQnYsdE10LGVNdCxvTXQsaUYsaU10XSxleHBvcnRzOlt4X3RdfV19XSxudWxsLG51bGwpO2NsYXNzIHJNdHt9ck10Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxyTXQpfSxyTXQuybVtb2Q9Wm8oe3R5cGU6ck10fSksck10Lsm1aW5qPWNvKHtpbXBvcnRzOltbQnZdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8ock10LHtkZWNsYXJhdGlvbnM6W1BfdCx3X3RdLGltcG9ydHM6W0J2XSxleHBvcnRzOlt3X3RdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihyTXQsW3t0eXBlOmtfLGFyZ3M6W3tkZWNsYXJhdGlvbnM6W1BfdCx3X3RdLGltcG9ydHM6W0J2XSxleHBvcnRzOlt3X3RdfV19XSxudWxsLG51bGwpO2NsYXNzIHNNdHt9c010Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxzTXQpfSxzTXQuybVtb2Q9Wm8oe3R5cGU6c010fSksc010Lsm1aW5qPWNvKHtpbXBvcnRzOltbQnYsZEcsekgsck10XV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKHNNdCx7ZGVjbGFyYXRpb25zOltFX3QsQV90XSxpbXBvcnRzOltCdixkRyx6SCxyTXRdLGV4cG9ydHM6W0FfdF19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHNNdCxbe3R5cGU6a18sYXJnczpbe2RlY2xhcmF0aW9uczpbRV90LEFfdF0saW1wb3J0czpbQnYsZEcsekgsck10XSxleHBvcnRzOltBX3RdfV19XSxudWxsLG51bGwpO2NsYXNzIGxNdHt9bE10Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxsTXQpfSxsTXQuybVtb2Q9Wm8oe3R5cGU6bE10fSksbE10Lsm1aW5qPWNvKHtpbXBvcnRzOltbQnYsVlUseVksZEcsamd0LEtDdCx6SCxRQ3QsYU10LHNNdF1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhsTXQse2RlY2xhcmF0aW9uczpbSF90LEZfdF0saW1wb3J0czpbQnYsVlUseVksZEcsamd0LEtDdCx6SCxRQ3QsYU10LHNNdF0sZXhwb3J0czpbRl90XX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIobE10LFt7dHlwZTprXyxhcmdzOlt7ZGVjbGFyYXRpb25zOltIX3QsRl90XSxpbXBvcnRzOltCdixWVSx5WSxkRyxqZ3QsS0N0LHpILFFDdCxhTXQsc010XSxleHBvcnRzOltGX3RdfV19XSxudWxsLG51bGwpO2NsYXNzIGNNdHt9Y010Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxjTXQpfSxjTXQuybVtb2Q9Wm8oe3R5cGU6Y010fSksY010Lsm1aW5qPWNvKHtpbXBvcnRzOltbQnYsVlUseVksZEcsamd0LEtDdCx6SCxhTXQsc010XV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKGNNdCx7ZGVjbGFyYXRpb25zOltXX3QsR190XSxpbXBvcnRzOltCdixWVSx5WSxkRyxqZ3QsS0N0LHpILGFNdCxzTXRdLGV4cG9ydHM6W0dfdF19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGNNdCxbe3R5cGU6a18sYXJnczpbe2RlY2xhcmF0aW9uczpbV190LEdfdF0saW1wb3J0czpbQnYsVlUseVksZEcsamd0LEtDdCx6SCxhTXQsc010XSxleHBvcnRzOltHX3RdfV19XSxudWxsLG51bGwpO2NsYXNzIGRNdHt9ZE10Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxkTXQpfSxkTXQuybVtb2Q9Wm8oe3R5cGU6ZE10fSksZE10Lsm1aW5qPWNvKHtpbXBvcnRzOltbQnYsV0N0LGxNdCxjTXQsakN0LGlTLmZvckZlYXR1cmUoSGh0LFVidCksTFMuZm9yRmVhdHVyZShbVUN0XSksYnEuZm9yUGx1Z2luKCJucG1pIixKX3QpXV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKGRNdCx7ZGVjbGFyYXRpb25zOltLX3QsSl90XSxpbXBvcnRzOltCdixXQ3QsbE10LGNNdCxqQ3Qsb1MsRlMsYnFdLGV4cG9ydHM6W0pfdF19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGRNdCxbe3R5cGU6a18sYXJnczpbe2RlY2xhcmF0aW9uczpbS190LEpfdF0saW1wb3J0czpbQnYsV0N0LGxNdCxjTXQsakN0LGlTLmZvckZlYXR1cmUoSGh0LFVidCksTFMuZm9yRmVhdHVyZShbVUN0XSksYnEuZm9yUGx1Z2luKCJucG1pIixKX3QpXSxleHBvcnRzOltKX3RdLGVudHJ5Q29tcG9uZW50czpbSl90XX1dfV0sbnVsbCxudWxsKTtjbGFzcyBwTXR7fXBNdC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8cE10KX0scE10Lsm1Y21wPVVvKHt0eXBlOnBNdCxzZWxlY3RvcnM6W1sidGV4dC1kYXNoYm9hcmQiXV0sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmTWYoMCwiIFRoaXMgaXMgdGhlIHRleHQgZGFzaGJvYXJkICIpfSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKHBNdCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJ0ZXh0LWRhc2hib2FyZCIsdGVtcGxhdGU6IiBUaGlzIGlzIHRoZSB0ZXh0IGRhc2hib2FyZCAiLGNoYW5nZURldGVjdGlvbjp4by5PblB1c2h9XX1dLG51bGwsbnVsbCk7Y2xhc3MgbU10e31tTXQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fG1NdCl9LG1NdC7JtW1vZD1abyh7dHlwZTptTXR9KSxtTXQuybVpbmo9Y28oe30pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8obU10LHtkZWNsYXJhdGlvbnM6W3BNdF0sZXhwb3J0czpbcE10XX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIobU10LFt7dHlwZTprXyxhcmdzOlt7ZGVjbGFyYXRpb25zOltwTXRdLGV4cG9ydHM6W3BNdF19XX1dLG51bGwsbnVsbCk7Y2xhc3MgdU10e311TXQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHVNdCl9LHVNdC7JtXByb3Y9bG8oe3Rva2VuOnVNdCxmYWN0b3J5OnVNdC7JtWZhY30pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIodU10LFt7dHlwZTpKbX1dLG51bGwsbnVsbCk7Y2xhc3MgZk10e2NvbnN0cnVjdG9yKHQpe3RoaXMuaHR0cD10LHRoaXMuaHR0cFBhdGhQcmVmaXg9ImRhdGEvcGx1Z2luL3RleHRfdjIifWZldGNoUnVuVG9UYWcoKXtyZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLmh0dHBQYXRoUHJlZml4KyIvdGFncyIpLnBpcGUoaHQoKHQ9Pntjb25zdCBlPW5ldyBNYXA7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHQpLmZvckVhY2goKChbdCxuXSk9PntlLnNldCh0LG4pfSkpLGV9KSkpfWZldGNoVGV4dERhdGEodCxlKXtjb25zdCBuPW5ldyBVUkxTZWFyY2hQYXJhbXMoe3J1bjp0LHRhZzplfSk7cmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5odHRwUGF0aFByZWZpeCtgL3RleHQ/JHtuLnRvU3RyaW5nKCl9YCkucGlwZShodCgodD0+dC5tYXAoKHQ9Pih7b3JpZ2luYWxTaGFwZTp0Lm9yaWdpbmFsX3NoYXBlLHN0ZXA6dC5zdGVwLHN0cmluZ0FycmF5OnQuc3RyaW5nX2FycmF5LHdhbGxUaW1lSW5NczoxZTMqdC53YWxsX3RpbWUsdHJ1bmNhdGVkOnQudHJ1bmNhdGVkfSkpKSkpKX19Zk10Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxmTXQpKHVzKEVFKSl9LGZNdC7JtXByb3Y9bG8oe3Rva2VuOmZNdCxmYWN0b3J5OmZNdC7JtWZhY30pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoZk10LFt7dHlwZTpKbX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpFRX1dfSksbnVsbCk7Y2xhc3MgZ010e31nTXQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGdNdCl9LGdNdC7JtW1vZD1abyh7dHlwZTpnTXR9KSxnTXQuybVpbmo9Y28oe3Byb3ZpZGVyczpbZk10LHtwcm92aWRlOnVNdCx1c2VFeGlzdGluZzpmTXR9XSxpbXBvcnRzOltbQUVdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oZ010LHtpbXBvcnRzOltBRV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKGdNdCxbe3R5cGU6a18sYXJnczpbe2ltcG9ydHM6W0FFXSxwcm92aWRlcnM6W2ZNdCx7cHJvdmlkZTp1TXQsdXNlRXhpc3Rpbmc6Zk10fV19XX1dLG51bGwsbnVsbCk7Y29uc3QgaE10PVd3KCJbVGV4dF0gVGV4dCBQbHVnaW4gTG9hZGVkIiksYk10PVd3KCJbVGV4dF0gUnVucyBUbyBUYWcgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSkseU10PVd3KCJbVGV4dF0gVGFnIEdyb3VwIFZpc2liaWxpdHkgQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLF9NdD1XdygiW1RleHRdIFRleHQgRGF0YSBMb2FkZWQgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksQ010PSJ0ZXh0IixNTXQ9RmsoQ010KTt6ayhNTXQsKHQ9PnQucnVuVG9UYWdzKSk7Y29uc3Qgdk10PXprKE1NdCwodD0+e2NvbnN0IGU9bmV3IFNldCxuPW5ldyBTZXQ7Zm9yKGNvbnN0IG8gb2YgdC52aXNpYmxlUnVuVGFncy52YWx1ZXMoKSlmb3IoY29uc3QgdCBvZiBvKXtjb25zdCBvPUpTT04uc3RyaW5naWZ5KHQpO2UuaGFzKG8pfHwoZS5hZGQobyksbi5hZGQodCkpfXJldHVyblsuLi5uXX0pKSx4TXQ9emsoTU10LCgodCxlKT0+e2NvbnN0IG49dC5kYXRhLmdldChlLnJ1bik7cmV0dXJuIG4mJm4uZ2V0KGUudGFnKXx8bnVsbH0pKTtjbGFzcyBPTXR7Y29uc3RydWN0b3IodCxlLG4pe3RoaXMuYWN0aW9ucyQ9dCx0aGlzLnN0b3JlPWUsdGhpcy5kYXRhU291cmNlPW4sdGhpcy5sb2FkUnVuVG9UYWdzJD1nUygoKCk9PnRoaXMuYWN0aW9ucyQucGlwZSh4UyhoTXQpLGRuKCgoKT0+dGhpcy5kYXRhU291cmNlLmZldGNoUnVuVG9UYWcoKS5waXBlKF9uKCh0PT57dGhpcy5zdG9yZS5kaXNwYXRjaChiTXQoe3J1blRvVGFnczp0fSkpfSkpLGh0KCgoKT0+e30pKSkpKSkpLHtkaXNwYXRjaDohMX0pLHRoaXMubG9hZERhdGEkPWdTKCgoKT0+V3QodGhpcy5hY3Rpb25zJC5waXBlKHhTKHlNdCksZG4oKCh7dmlzaWJsZVRleHRDYXJkczp0fSk9Pkx0KHQubWFwKCgoe3J1bjp0LHRhZzplfSk9PnRoaXMuc3RvcmUuc2VsZWN0KHhNdCx7cnVuOnQsdGFnOmV9KS5waXBlKChmdW5jdGlvbiBuKHQsZSl7Y29uc3Qgbj1hcmd1bWVudHMubGVuZ3RoPj0yO3JldHVybiBvPT5vLnBpcGUodD9HdCgoKGUsbik9PnQoZSxuLG8pKSk6ZixXZSgxKSxuP2ZlKGUpOkVlKCgoKT0+bmV3IGZ0KSkpfSkoKSxodCgobj0+KHtydW46dCx0YWc6ZSx0ZXh0RGF0YTpufSkpKSkpKSkucGlwZShodCgodD0+dC5maWx0ZXIoKCh7dGV4dERhdGE6dH0pPT5udWxsPT09dCkpLm1hcCgoKHtydW46dCx0YWc6ZX0pPT4oe3J1bjp0LHRhZzplfSkpKSkpKSkpKSx0aGlzLmFjdGlvbnMkLnBpcGUoeFMoV0UsR0UpLGtuKHRoaXMuc3RvcmUuc2VsZWN0KHZNdCkpLGh0KCgoWyx0XSk9PnQpKSkpLnBpcGUoVHQoKHQ9Pkx0KHQubWFwKCh0PT50aGlzLmZldGNoVGV4dERhdGEodCkpKSkpKSkpLHtkaXNwYXRjaDohMX0pfWZldGNoVGV4dERhdGEodCl7Y29uc3R7cnVuOmUsdGFnOm59PXQ7cmV0dXJuIHRoaXMuZGF0YVNvdXJjZS5mZXRjaFRleHREYXRhKGUsbikucGlwZShfbigodD0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goX010KHtydW46ZSx0YWc6bixzdGVwRGF0YTp0fSkpfSkpLGh0KCgoKT0+e30pKSl9fU9NdC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8T010KSh1cyh2UyksdXMoRWspLHVzKHVNdCkpfSxPTXQuybVwcm92PWxvKHt0b2tlbjpPTXQsZmFjdG9yeTpPTXQuybVmYWN9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKE9NdCxbe3R5cGU6Sm19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6dlN9LHt0eXBlOkVrfSx7dHlwZTp1TXR9XX0pLG51bGwpO2NvbnN0IFBNdD1tUyh7cnVuVG9UYWdzOm5ldyBNYXAoW1sicnVuMSIsWyJhL2IiLCJhL2MiXV0sWyJydW4yIixbImEvYiIsImEvZCJdXSxbInJ1bjMiLFsiYyIsImEvYiJdXV0pLGRhdGE6bmV3IE1hcChbWyJydW4xIixuZXcgTWFwKFtbImEvYiIsW3tvcmlnaW5hbFNoYXBlOlszXSxzdGVwOjAsc3RyaW5nQXJyYXk6W1siZm9vIiwiYmFyIiwiYmF6Il1dLHdhbGxUaW1lSW5NczoxNTc3ODY1NmU1LHRydW5jYXRlZDohMX0se29yaWdpbmFsU2hhcGU6WzNdLHN0ZXA6MSxzdHJpbmdBcnJheTpbWyJmb28iLCJiYXoiXV0sd2FsbFRpbWVJbk1zOjE1Nzc4NjU2MDFlMyx0cnVuY2F0ZWQ6ITF9XV0sWyJhL2MiLFt7b3JpZ2luYWxTaGFwZTpbM10sc3RlcDowLHN0cmluZ0FycmF5OltbIldlIGNvbmR1Y3RlZCBhbiBleHBlcmltZW50IGFuZCBmb3VuZCB0aGUgZm9sbG93aW5nIGRhdGE6XG5cblBvdW5kcyBvZiBjaG9jb2xhdGUgfCBIYXBwaW5lc3Ncbi0tLXwtLS1cbjAgfCAxXG4xIHwgNFxuMiB8IDlcbjMgfCAxNlxuNCB8IDI1XG41IHwgMzZcbjYgfCA0OVxuNyB8IDY0XG44IHwgODFcbjkgfCAxMDBcbjEwIHwgMTIxIl1dLHdhbGxUaW1lSW5NczoxNTc3ODY1NmU1LHRydW5jYXRlZDohMX0se29yaWdpbmFsU2hhcGU6WzNdLHN0ZXA6MSxzdHJpbmdBcnJheTpbWyLDlyIsIioqMCoqIiwiKioxKioiLCIqKjIqKiIsIioqMyoqIiwiKio0KioiLCIqKjUqKiJdLFsiKiowKioiLCIwIiwiMCIsIjAiLCIwIiwiMCIsIjAiXSxbIioqMSoqIiwiMCIsIjEiLCIyIiwiMyIsIjQiLCI1Il0sWyIqKjIqKiIsIjAiLCIyIiwiNCIsIjYiLCI4IiwiMTAiXSxbIioqMyoqIiwiMCIsIjMiLCI2IiwiOSIsIjEyIiwiMTUiXSxbIioqNCoqIiwiMCIsIjQiLCI4IiwiMTIiLCIxNiIsIjIwIl0sWyIqKjUqKiIsIjAiLCI1IiwiMTAiLCIxNSIsIjIwIiwiMjUiXV0sd2FsbFRpbWVJbk1zOjE1Nzc4NjU2MDFlMyx0cnVuY2F0ZWQ6ITF9XV1dKV1dKSx2aXNpYmxlUnVuVGFnczpuZXcgTWFwfSk7ZnVuY3Rpb24gd010KHQsZSl7cmV0dXJuIFBNdCh0LGUpfWNsYXNzIGtNdHt9a010Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxrTXQpfSxrTXQuybVtb2Q9Wm8oe3R5cGU6a010fSksa010Lsm1aW5qPWNvKHtpbXBvcnRzOltbQnYsbU10LGJxLmZvclBsdWdpbigidGV4dF92MiIscE10KSxnTXQsaVMuZm9yRmVhdHVyZShDTXQsd010KSxMUy5mb3JGZWF0dXJlKFtPTXRdKV1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhrTXQse2ltcG9ydHM6W0J2LG1NdCxicSxnTXQsb1MsRlNdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihrTXQsW3t0eXBlOmtfLGFyZ3M6W3tpbXBvcnRzOltCdixtTXQsYnEuZm9yUGx1Z2luKCJ0ZXh0X3YyIixwTXQpLGdNdCxpUy5mb3JGZWF0dXJlKENNdCx3TXQpLExTLmZvckZlYXR1cmUoW09NdF0pXSxlbnRyeUNvbXBvbmVudHM6W3BNdF19XX1dLG51bGwsbnVsbCk7Y2xhc3MgU010e312YXIgRE10O1NNdC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8U010KX0sU010Lsm1bW9kPVpvKHt0eXBlOlNNdH0pLFNNdC7JtWluaj1jbyh7aW1wb3J0czpbW0JKLHpodCxkTXQsa010XV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJlhvKFNNdCx7aW1wb3J0czpbQkosemh0LGRNdCxrTXRdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihTTXQsW3t0eXBlOmtfLGFyZ3M6W3tpbXBvcnRzOltCSix6aHQsZE10LGtNdF19XX1dLG51bGwsbnVsbCksKGZ1bmN0aW9uKHQpe3QuQ1VTVE9NX0VMRU1FTlQ9IkNVU1RPTV9FTEVNRU5UIix0LklGUkFNRT0iSUZSQU1FIix0Lk5HX0NPTVBPTkVOVD0iTkdfQ09NUE9ORU5UIix0Lk5PTkU9Ik5PTkUifSkoRE10fHwoRE10PXt9KSk7Y29uc3QgRU10PVsicGx1Z2luQ29udGFpbmVyIl0sQU10PVsibmdQbHVnaW5Db250YWluZXIiXTtmdW5jdGlvbiBSTXQodCxlKXsxJnQmJkR1KDApfWZ1bmN0aW9uIFRNdCh0LGUpe2lmKDEmdCYmKGt1KDApLFdtKDEsUk10LDEsMCwibmctY29udGFpbmVyIiw5KSxTdSgpKSwyJnQpe2NvbnN0IHQ9THUoMiksZT1HbSg2KTtKYygxKSx2dSgibmdUZW1wbGF0ZU91dGxldCIsdC5lbnZpcm9ubWVudEZhaWx1cmVOb3RGb3VuZFRlbXBsYXRlP3QuZW52aXJvbm1lbnRGYWlsdXJlTm90Rm91bmRUZW1wbGF0ZTplKX19ZnVuY3Rpb24gTk10KHQsZSl7MSZ0JiZEdSgwKX1mdW5jdGlvbiBJTXQodCxlKXtpZigxJnQmJihrdSgwKSxXbSgxLE5NdCwxLDAsIm5nLWNvbnRhaW5lciIsOSksU3UoKSksMiZ0KXtjb25zdCB0PUx1KDIpLGU9R20oNik7SmMoMSksdnUoIm5nVGVtcGxhdGVPdXRsZXQiLHQuZW52aXJvbm1lbnRGYWlsdXJlVW5rbm93blRlbXBsYXRlP3QuZW52aXJvbm1lbnRGYWlsdXJlVW5rbm93blRlbXBsYXRlOmUpfX1mdW5jdGlvbiB6TXQodCxlKXtpZigxJnQmJihrdSgwKSxPdSgxLCJoMyIsMTApLE1mKDIsIiBUaGVyZeKAmXMgbm8gZGFzaGJvYXJkIGJ5IHRoZSBuYW1lIG9mIOKAnCIpLE91KDMsImNvZGUiKSxNZig0KSxQdSgpLE1mKDUsIuKAnS4gIiksUHUoKSxPdSg2LCJwIiksTWYoNywiWW91IGNhbiBzZWxlY3QgYSBkYXNoYm9hcmQgZnJvbSB0aGUgbGlzdCBhYm92ZS4iKSxQdSgpLE91KDgsInAiKSxEdSg5LDExKSxQdSgpLFN1KCkpLDImdCl7Y29uc3QgdD1MdSgyKSxlPUdtKDgpO0pjKDQpLHZmKHQuYWN0aXZlUGx1Z2luSWQpLEpjKDUpLHZ1KCJuZ1RlbXBsYXRlT3V0bGV0IixlKX19ZnVuY3Rpb24gSE10KHQsZSl7aWYoMSZ0JiYoa3UoMCksT3UoMSwiaDMiLDEyKSxNZigyLCIgTm8gZGFzaGJvYXJkcyBhcmUgYWN0aXZlIGZvciB0aGUgY3VycmVudCBkYXRhIHNldC4gIiksUHUoKSxPdSgzLCJwIiksTWYoNCwiUHJvYmFibGUgY2F1c2VzOiIpLFB1KCksT3UoNSwidWwiKSxPdSg2LCJsaSIpLE1mKDcsIllvdSBoYXZlbuKAmXQgd3JpdHRlbiBhbnkgZGF0YSB0byB5b3VyIGV2ZW50IGZpbGVzLiIpLFB1KCksT3UoOCwibGkiKSxNZig5LCJUZW5zb3JCb2FyZCBjYW7igJl0IGZpbmQgeW91ciBldmVudCBmaWxlcy4iKSxQdSgpLFB1KCksTWYoMTAsIiBJZiB5b3XigJlyZSBuZXcgdG8gdXNpbmcgVGVuc29yQm9hcmQsIGFuZCB3YW50IHRvIGZpbmQgb3V0IGhvdyB0byBhZGQgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUgIiksT3UoMTEsImEiLDEzKSxNZigxMiwiUkVBRE1FIiksUHUoKSxNZigxMywiIGFuZCBwZXJoYXBzIHRoZSAiKSxPdSgxNCwiYSIsMTQpLE1mKDE1LCJUZW5zb3JCb2FyZCB0dXRvcmlhbCIpLFB1KCksTWYoMTYsIi4gIiksT3UoMTcsInAiKSxNZigxOCwiIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlICIpLE91KDE5LCJhIiwxNSksTWYoMjAsInRoZSBzZWN0aW9uIG9mIHRoZSBSRUFETUUgZGV2b3RlZCB0byBtaXNzaW5nIGRhdGEgcHJvYmxlbXMiKSxQdSgpLE1mKDIxLCIgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuICIpLFB1KCksT3UoMjIsInAiKSxEdSgyMywxMSksUHUoKSxTdSgpKSwyJnQpe0x1KDIpO2NvbnN0IHQ9R20oOCk7SmMoMjMpLHZ1KCJuZ1RlbXBsYXRlT3V0bGV0Iix0KX19ZnVuY3Rpb24gRk10KHQsZSl7aWYoMSZ0JiYoT3UoMCwiZGl2Iiw2KSxPdSgxLCJkaXYiLDcpLFdtKDIsVE10LDIsMSwibmctY29udGFpbmVyIiw4KSxXbSgzLElNdCwyLDEsIm5nLWNvbnRhaW5lciIsOCksV20oNCx6TXQsMTAsMiwibmctY29udGFpbmVyIiw4KSxXbSg1LEhNdCwyNCwxLCJuZy1jb250YWluZXIiLDgpLFB1KCksUHUoKSksMiZ0KXtjb25zdCB0PUx1KCk7dnUoIm5nU3dpdGNoIix0LnBsdWdpbkxvYWRTdGF0ZSksSmMoMiksdnUoIm5nU3dpdGNoQ2FzZSIsdC5QbHVnaW5Mb2FkU3RhdGUuRU5WSVJPTk1FTlRfRkFJTFVSRV9OT1RfRk9VTkQpLEpjKDEpLHZ1KCJuZ1N3aXRjaENhc2UiLHQuUGx1Z2luTG9hZFN0YXRlLkVOVklST05NRU5UX0ZBSUxVUkVfVU5LTk9XTiksSmMoMSksdnUoIm5nU3dpdGNoQ2FzZSIsdC5QbHVnaW5Mb2FkU3RhdGUuVU5LTk9XTl9QTFVHSU5fSUQpLEpjKDEpLHZ1KCJuZ1N3aXRjaENhc2UiLHQuUGx1Z2luTG9hZFN0YXRlLk5PX0VOQUJMRURfUExVR0lOUyl9fWZ1bmN0aW9uIExNdCh0LGUpe2lmKDEmdCYmKE91KDAsImgzIiwxNiksTWYoMSwiRGF0YSBjb3VsZCBub3QgYmUgbG9hZGVkLiIpLFB1KCksT3UoMiwicCIpLE1mKDMsIlRoZSBUZW5zb3JCb2FyZCBzZXJ2ZXIgbWF5IGJlIGRvd24gb3IgaW5hY2Nlc3NpYmxlLiIpLFB1KCksT3UoNCwicCIpLER1KDUsMTEpLFB1KCkpLDImdCl7THUoKTtjb25zdCB0PUdtKDgpO0pjKDUpLHZ1KCJuZ1RlbXBsYXRlT3V0bGV0Iix0KX19ZnVuY3Rpb24gQk10KHQsZSl7aWYoMSZ0JiYoT3UoMCwicCIsMTkpLE91KDEsImkiKSxNZigyLCJMb2cgZGlyZWN0b3J5OiAiKSxPdSgzLCJzcGFuIiksTWYoNCksUHUoKSxQdSgpLFB1KCkpLDImdCl7Y29uc3QgdD1MdSgyKTtKYyg0KSx2Zih0LmRhdGFMb2NhdGlvbil9fWZ1bmN0aW9uIFZNdCh0LGUpe2lmKDEmdCYmKE91KDAsInNwYW4iLDE3KSxNZigxKSxPYigyLCJkYXRlIiksUHUoKSxXbSgzLEJNdCw1LDEsInAiLDE4KSksMiZ0KXtjb25zdCB0PUx1KCk7SmMoMSkseGYoIkxhc3QgcmVsb2FkOiAiLHdiKDIsMix0Lmxhc3RVcGRhdGVkLCJtZWRpdW0iKSwiIiksSmMoMiksdnUoIm5nSWYiLHQuZGF0YUxvY2F0aW9uKX19Y29uc3Qgak10PWZ1bmN0aW9uKHQpe3JldHVybntwbHVnaW5zOiEwLCJpcy1maXJzdC1wYXJ0eS1wbHVnaW4iOnR9fTt2YXIgVU10OyEoZnVuY3Rpb24odCl7dFt0LkVOVklST05NRU5UX0ZBSUxVUkVfTk9UX0ZPVU5EPTBdPSJFTlZJUk9OTUVOVF9GQUlMVVJFX05PVF9GT1VORCIsdFt0LkVOVklST05NRU5UX0ZBSUxVUkVfVU5LTk9XTj0xXT0iRU5WSVJPTk1FTlRfRkFJTFVSRV9VTktOT1dOIix0W3QuTk9fRU5BQkxFRF9QTFVHSU5TPTJdPSJOT19FTkFCTEVEX1BMVUdJTlMiLHRbdC5VTktOT1dOX1BMVUdJTl9JRD0zXT0iVU5LTk9XTl9QTFVHSU5fSUQiLHRbdC5MT0FERUQ9NF09IkxPQURFRCIsdFt0LkxPQURJTkc9NV09IkxPQURJTkcifSkoVU10fHwoVU10PXt9KSk7Y2xhc3MgV010e2NvbnN0cnVjdG9yKHQsZSxuKXt0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj10LHRoaXMucGx1Z2luUmVnaXN0cnk9ZSx0aGlzLnBsdWdpbkFwaUhvc3Q9bix0aGlzLlBsdWdpbkxvYWRTdGF0ZT1VTXQsdGhpcy5Mb2FkaW5nTWVjaGFuaXNtVHlwZT1ETXQsdGhpcy5wbHVnaW5JbnN0YW5jZXM9bmV3IE1hcH1uZ09uQ2hhbmdlcyh0KXt2YXIgZTtpZighdGhpcy5pc0ZlYXR1cmVGbGFnc0xvYWRlZHx8IXRoaXMuYWN0aXZlS25vd25QbHVnaW58fHRoaXMuc2V0dGluZ3NMb2FkU3RhdGU9PT1CRS5OT1RfTE9BREVEfHx0aGlzLnNldHRpbmdzTG9hZFN0YXRlPT09QkUuTE9BRElORylyZXR1cm47Y29uc3Qgbj1Cb29sZWFuKHRoaXMuYWN0aXZlS25vd25QbHVnaW4mJiF0aGlzLnBsdWdpbkluc3RhbmNlcy5oYXModGhpcy5hY3RpdmVLbm93blBsdWdpbi5pZCkpO2lmKHQuYWN0aXZlS25vd25QbHVnaW58fHQuaXNGZWF0dXJlRmxhZ3NMb2FkZWR8fHQuc2V0dGluZ3NMb2FkU3RhdGUpe2NvbnN0IG89bnVsbD09PShlPXQuYWN0aXZlS25vd25QbHVnaW4pfHx2b2lkIDA9PT1lP3ZvaWQgMDplLnByZXZpb3VzVmFsdWU7aWYobyYmby5pZCE9PXRoaXMuYWN0aXZlS25vd25QbHVnaW4uaWQmJnRoaXMuaGlkZVBsdWdpbihvKSxuKXtjb25zdCB0PXRoaXMuY3JlYXRlUGx1Z2luKHRoaXMuYWN0aXZlS25vd25QbHVnaW4pO3QmJnRoaXMucGx1Z2luSW5zdGFuY2VzLnNldCh0aGlzLmFjdGl2ZUtub3duUGx1Z2luLmlkLHQpfWVsc2UgdGhpcy5zaG93UGx1Z2luKHRoaXMuYWN0aXZlS25vd25QbHVnaW4pfShufHx0Lmxhc3RVcGRhdGVkKSYmdGhpcy5yZWxvYWQodGhpcy5hY3RpdmVLbm93blBsdWdpbixuKX1oaWRlUGx1Z2luKHQpe2lmKCF0aGlzLnBsdWdpbkluc3RhbmNlcy5oYXModC5pZCkpcmV0dXJuO2NvbnN0IGU9dGhpcy5wbHVnaW5JbnN0YW5jZXMuZ2V0KHQuaWQpO09iamVjdC5hc3NpZ24oZS5zdHlsZSx7bWF4SGVpZ2h0OjAsb3ZlcmZsb3c6ImhpZGRlbiIsdmlzaWJpbGl0eToiaGlkZGVuIixwb3NpdGlvbjoiYWJzb2x1dGUifSl9c2hvd1BsdWdpbih0KXtpZighdGhpcy5wbHVnaW5JbnN0YW5jZXMuaGFzKHQuaWQpKXJldHVybjtjb25zdCBlPXRoaXMucGx1Z2luSW5zdGFuY2VzLmdldCh0LmlkKTtPYmplY3QuYXNzaWduKGUuc3R5bGUse21heEhlaWdodDpudWxsLG92ZXJmbG93Om51bGwsdmlzaWJpbGl0eTpudWxsLHBvc2l0aW9uOm51bGx9KX1jcmVhdGVQbHVnaW4odCl7bGV0IGU9bnVsbDtzd2l0Y2godC5sb2FkaW5nX21lY2hhbmlzbS50eXBlKXtjYXNlIERNdC5DVVNUT01fRUxFTUVOVDplPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodC5sb2FkaW5nX21lY2hhbmlzbS5lbGVtZW50X25hbWUpLGUucmVsb2FkT25SZWFkeT0hMSxlLmZlYXR1cmVGbGFncz10aGlzLmZlYXR1cmVGbGFncyx0aGlzLnBsdWdpbnNDb250YWluZXIubmF0aXZlRWxlbWVudC5hcHBlbmRDaGlsZChlKTticmVhaztjYXNlIERNdC5JRlJBTUU6aWYoIXRoaXMucGx1Z2luQXBpSG9zdCl0aHJvdyBFcnJvcihgSUZSQU1FLWJhc2VkIHBsdWdpbnMgbm90IHN1cHBvcnRlZDogJHt0LmlkfWApO2U9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIiksZS5zZXRBdHRyaWJ1dGUoInNyYyIsYGRhdGEvcGx1Z2luX2VudHJ5Lmh0bWw/bmFtZT0ke3QuaWR9YCksdGhpcy5wbHVnaW5BcGlIb3N0LnJlZ2lzdGVyUGx1Z2luSWZyYW1lKGUsdC5pZCksdGhpcy5wbHVnaW5zQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZSk7YnJlYWs7Y2FzZSBETXQuTkdfQ09NUE9ORU5UOmNvbnN0IG49dGhpcy5wbHVnaW5SZWdpc3RyeS5nZXRDb21wb25lbnQodC5pZCk7aWYobil7Y29uc3QgdD10aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShuKTtlPXRoaXMubmdQbHVnaW5Db250YWluZXIuY3JlYXRlQ29tcG9uZW50KHQpLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnR9ZWxzZSBjb25zb2xlLmVycm9yKGBObyByZWdpc3RlcmVkIEFuZ3VsYXIgY29tcG9uZW50IGZvciBwbHVnaW46ICR7dC5pZH1gKTticmVhaztjYXNlIERNdC5OT05FOmJyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiVW5leHBlY3RlZCBwbHVnaW4iKX1yZXR1cm4gZX1yZWxvYWQodCxlKXtpZighZSYmdC5kaXNhYmxlX3JlbG9hZClyZXR1cm47Y29uc3Qgbj10aGlzLnBsdWdpbkluc3RhbmNlcy5nZXQodC5pZCk7biYmbi5yZWxvYWQmJm4ucmVsb2FkKCl9fVdNdC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8V010KShNdShyaCksTXUoYnEpLE11KFhOLDgpKX0sV010Lsm1Y21wPVVvKHt0eXBlOldNdCxzZWxlY3RvcnM6W1sicGx1Z2lucy1jb21wb25lbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJihXYihFTXQsMyxjaCksV2IoQU10LDMsWGgpKSwyJmUpe2xldCB0O1ViKHQ9WWIoKSkmJihuLnBsdWdpbnNDb250YWluZXI9dC5maXJzdCksVWIodD1ZYigpKSYmKG4ubmdQbHVnaW5Db250YWluZXI9dC5maXJzdCl9fSxpbnB1dHM6e2FjdGl2ZVBsdWdpbklkOiJhY3RpdmVQbHVnaW5JZCIsYWN0aXZlS25vd25QbHVnaW46ImFjdGl2ZUtub3duUGx1Z2luIixwbHVnaW5Mb2FkU3RhdGU6InBsdWdpbkxvYWRTdGF0ZSIsZGF0YUxvY2F0aW9uOiJkYXRhTG9jYXRpb24iLGlzRmVhdHVyZUZsYWdzTG9hZGVkOiJpc0ZlYXR1cmVGbGFnc0xvYWRlZCIsc2V0dGluZ3NMb2FkU3RhdGU6InNldHRpbmdzTG9hZFN0YXRlIixmZWF0dXJlRmxhZ3M6ImZlYXR1cmVGbGFncyIsbGFzdFVwZGF0ZWQ6Imxhc3RVcGRhdGVkIixlbnZpcm9ubWVudEZhaWx1cmVOb3RGb3VuZFRlbXBsYXRlOiJlbnZpcm9ubWVudEZhaWx1cmVOb3RGb3VuZFRlbXBsYXRlIixlbnZpcm9ubWVudEZhaWx1cmVVbmtub3duVGVtcGxhdGU6ImVudmlyb25tZW50RmFpbHVyZVVua25vd25UZW1wbGF0ZSJ9LGZlYXR1cmVzOltTaV0sZGVjbHM6OSx2YXJzOjQsY29uc3RzOltbMywibmdDbGFzcyJdLFsicGx1Z2luQ29udGFpbmVyIiwiIl0sWyJuZ1BsdWdpbkNvbnRhaW5lciIsIiJdLFsiY2xhc3MiLCJ3YXJuaW5nIiwzLCJuZ1N3aXRjaCIsNCwibmdJZiJdLFsiZW52aXJvbm1lbnRGYWlsdXJlRGVmYXVsdFRlbXBsYXRlIiwiIl0sWyJkYXRlQW5kRGF0YUxvY2F0aW9uIiwiIl0sWzEsIndhcm5pbmciLDMsIm5nU3dpdGNoIl0sWzEsIndhcm5pbmctbWVzc2FnZSJdLFs0LCJuZ1N3aXRjaENhc2UiXSxbNCwibmdUZW1wbGF0ZU91dGxldCJdLFsxLCJ1bmtub3duLXBsdWdpbiJdLFszLCJuZ1RlbXBsYXRlT3V0bGV0Il0sWzEsIm5vLWFjdGl2ZS1wbHVnaW4iXSxbImhyZWYiLCJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQiXSxbImhyZWYiLCJodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9nZXRfc3RhcnRlZC9zdW1tYXJpZXNfYW5kX3RlbnNvcmJvYXJkIl0sWyJocmVmIiwiaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI215LXRlbnNvcmJvYXJkLWlzbnQtc2hvd2luZy1hbnktZGF0YS13aGF0cy13cm9uZyJdLFsxLCJlbnZpcm9ubWVudC1ub3QtbG9hZGVkIl0sWzEsImxhc3QtcmVsb2FkLXRpbWUiXSxbImNsYXNzIiwiZGF0YS1sb2NhdGlvbiIsNCwibmdJZiJdLFsxLCJkYXRhLWxvY2F0aW9uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihPdSgwLCJkaXYiLDAsMSksRHUoMixudWxsLDIpLFB1KCksV20oNCxGTXQsNiw1LCJkaXYiLDMpLFdtKDUsTE10LDYsMSwibmctdGVtcGxhdGUiLG51bGwsNCxLYiksV20oNyxWTXQsNCw1LCJuZy10ZW1wbGF0ZSIsbnVsbCw1LEtiKSksMiZlJiYodnUoIm5nQ2xhc3MiLGdiKDIsak10LChudWxsPT1uLmFjdGl2ZUtub3duUGx1Z2luP251bGw6bi5hY3RpdmVLbm93blBsdWdpbi5sb2FkaW5nX21lY2hhbmlzbS50eXBlKSE9PW4uTG9hZGluZ01lY2hhbmlzbVR5cGUuSUZSQU1FKSksSmMoNCksdnUoIm5nSWYiLG4ucGx1Z2luTG9hZFN0YXRlIT09bi5QbHVnaW5Mb2FkU3RhdGUuTE9BREVEJiZuLnBsdWdpbkxvYWRTdGF0ZSE9PW4uUGx1Z2luTG9hZFN0YXRlLkxPQURJTkcpKX0sZGlyZWN0aXZlczpbdHYsYXYsY3YsZHYsaHZdLHBpcGVzOlt3dl0sc3R5bGVzOlsnLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEycHg7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtYmFkZ2Utc21hbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6OXB4fS5tYXQtYmFkZ2UtbGFyZ2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweH0ubWF0LWgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1oZWFkbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMjRweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNnB4LzI4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNXB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC44MykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtaDZbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuNjcpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWJvZHktc3Ryb25nW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjAgMCAxMnB4fS5tYXQtc21hbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDEycHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjMwMCAxMTJweC8xMTJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDVlbTttYXJnaW46MCAwIDU2cHh9Lm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDU2cHgvNTZweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDJlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDQ1cHgvNDhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDA1ZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAzNHB4LzQwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDY0cHh9Lm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcmFpc2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0cm9rZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mbGF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmFiW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1taW5pLWZhYltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWJ1dHRvbi10b2dnbGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhcmQtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjIwcHh9Lm1hdC1jYXJkLXN1YnRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2hlY2tib3hbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNoZWNrYm94LWxheW91dFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoZWNrYm94LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoyNHB4fS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtdHJhaWxpbmctaWNvbi5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtcmVtb3ZlLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MThweH0ubWF0LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1oZWFkZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2VsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9vdGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2FsZW5kYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhbGVuZGFyLWJvZHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxM3B4fS5tYXQtY2FsZW5kYXItYm9keS1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FsZW5kYXItcGVyaW9kLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo0MDB9Lm1hdC1kaWFsb2ctdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjEyNTtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE1MCU7bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS41ZW07d2lkdGg6MS41ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNWVtIDA7Ym9yZGVyLXRvcDouODQzNzVlbSBzb2xpZCB0cmFuc3BhcmVudH0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6LTAuODQzNzVlbTtwYWRkaW5nLXRvcDouODQzNzVlbX0ubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo3NSU7bWFyZ2luLXRvcDouNjY2NjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjc5MTY2NjY2NjdlbSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNDM3NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMnB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjNlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM1MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjI4MTI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDouNTQxNjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjY2NjY2NjY2NjdlbSl9QG1lZGlhIHByaW50ey5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMmVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMWVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTJlbSkgc2NhbGUoMC43NSl9fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi4yNWVtIDAgLjc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMDkzNzVlbTttYXJnaW4tdG9wOi0wLjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjFlbSAwIDFlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS44NDM3NWVtO21hcmdpbi10b3A6LTAuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9aW5wdXQubWF0LWlucHV0LWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LTAuMDYyNWVtfS5tYXQtbWVudS1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtcGFnaW5hdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweH0ubWF0LXJhZGlvLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW19Lm1hdC1zbGlkZS10b2dnbGUtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdGVwcGVyLWhvcml6b250YWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXN0ZXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXN0ZXAtc3ViLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDpub3JtYWx9Lm1hdC1zdGVwLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LXN0ZXAtbGFiZWwtc2VsZWN0ZWRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRhYi1ncm91cFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdGFiLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10YWItbGlua1tfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowfS5tYXQtdG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB4O3BhZGRpbmctdG9wOjZweDtwYWRkaW5nLWJvdHRvbTo2cHh9Lm1hdC10b29sdGlwLWhhbmRzZXRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9Lm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE2cHh9Lm1hdC1vcHRncm91cC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1zaW1wbGUtc25hY2tiYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweH0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb25bX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjE7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo1MDB9Lm1hdC10cmVlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW5lc3RlZC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjQwMDtmb250LXNpemU6MTRweH0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmVtcHR5KXt0cmFuc2Zvcm06dHJhbnNsYXRlWigwKX0ubWF0LXJpcHBsZS5tYXQtcmlwcGxlLXVuYm91bmRlZFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItcmFkaXVzOjUwJTtwb2ludGVyLWV2ZW50czpub25lO3RyYW5zaXRpb246b3BhY2l0eSx0cmFuc2Zvcm0gMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpO3RyYW5zZm9ybTpzY2FsZSgwKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6bm9uZX0uY2RrLXZpc3VhbGx5LWhpZGRlbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjA7Y2xpcDpyZWN0KDAgMCAwIDApO2hlaWdodDoxcHg7bWFyZ2luOi0xcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwO291dGxpbmU6MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb2ludGVyLWV2ZW50czpub25lO3RvcDowO2xlZnQ6MDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTplbXB0eXtkaXNwbGF5Om5vbmV9LmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1wYW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czphdXRvO2JveC1zaXppbmc6Ym9yZGVyLWJveDt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O21heC13aWR0aDoxMDAlO21heC1oZWlnaHQ6MTAwJX0uY2RrLW92ZXJsYXktYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO3otaW5kZXg6MTAwMDtwb2ludGVyLWV2ZW50czphdXRvOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDt0cmFuc2l0aW9uOm9wYWNpdHkgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSk7b3BhY2l0eTowfS5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjF9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAuY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTouNn0uY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4zMil9LmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MH0uY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWluLXdpZHRoOjFweDttaW4taGVpZ2h0OjFweH0uY2RrLWdsb2JhbC1zY3JvbGxibG9ja1tfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7d2lkdGg6MTAwJTtvdmVyZmxvdy15OnNjcm9sbH1Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0e31Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZHt9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbHthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQgMHMgMW1zfS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOm5vdCg6LXdlYmtpdC1hdXRvZmlsbCl7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCAwcyAxbXN9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplW19uZ2NvbnRlbnQtJUNPTVAlXXtyZXNpemU6bm9uZX10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDphdXRvICFpbXBvcnRhbnQ7b3ZlcmZsb3c6aGlkZGVuICFpbXBvcnRhbnR9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZy1maXJlZm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDowICFpbXBvcnRhbnR9Lm1hdC1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtbWRjLWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9W19uZ2hvc3QtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Y29sb3I6IzIxMjEyMTtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlfWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5wbHVnaW5zLmlzLWZpcnN0LXBhcnR5LXBsdWdpbltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwO2NvbG9yOiNmZmZ9LnBsdWdpbnNbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlO3Bvc2l0aW9uOnJlbGF0aXZlfS53YXJuaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MDtsZWZ0OjA7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MH0ud2FybmluZy1tZXNzYWdlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojMjEyMTIxO21hcmdpbjo4MHB4IGF1dG8gMDttYXgtd2lkdGg6NTQwcHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLndhcm5pbmctbWVzc2FnZVtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC53YXJuaW5nLW1lc3NhZ2VbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNmZmZ9Lmxhc3QtcmVsb2FkLXRpbWVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc3R5bGU6aXRhbGljfS5wbHVnaW5zW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgaWZyYW1le2JvcmRlcjowO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoV010LFt7dHlwZTpoXyxhcmdzOlt7c2VsZWN0b3I6InBsdWdpbnMtY29tcG9uZW50Iix0ZW1wbGF0ZVVybDoiLi9wbHVnaW5zX2NvbXBvbmVudC5uZy5odG1sIixzdHlsZVVybHM6WyJwbHVnaW5zX2NvbXBvbmVudC5jc3MiXSxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6cmh9LHt0eXBlOmJxfSx7dHlwZTpYTixkZWNvcmF0b3JzOlt7dHlwZTpfc31dfV19KSx7cGx1Z2luc0NvbnRhaW5lcjpbe3R5cGU6RnIsYXJnczpbInBsdWdpbkNvbnRhaW5lciIse3N0YXRpYzohMCxyZWFkOmNofV19XSxuZ1BsdWdpbkNvbnRhaW5lcjpbe3R5cGU6RnIsYXJnczpbIm5nUGx1Z2luQ29udGFpbmVyIix7c3RhdGljOiEwLHJlYWQ6WGh9XX1dLGFjdGl2ZVBsdWdpbklkOlt7dHlwZTp5X31dLGFjdGl2ZUtub3duUGx1Z2luOlt7dHlwZTp5X31dLHBsdWdpbkxvYWRTdGF0ZTpbe3R5cGU6eV99XSxkYXRhTG9jYXRpb246W3t0eXBlOnlffV0saXNGZWF0dXJlRmxhZ3NMb2FkZWQ6W3t0eXBlOnlffV0sc2V0dGluZ3NMb2FkU3RhdGU6W3t0eXBlOnlffV0sZmVhdHVyZUZsYWdzOlt7dHlwZTp5X31dLGxhc3RVcGRhdGVkOlt7dHlwZTp5X31dLGVudmlyb25tZW50RmFpbHVyZU5vdEZvdW5kVGVtcGxhdGU6W3t0eXBlOnlffV0sZW52aXJvbm1lbnRGYWlsdXJlVW5rbm93blRlbXBsYXRlOlt7dHlwZTp5X31dfSk7Y29uc3QgR010PXprKHBBLGRBLCgodCxlKT0+ZSYmdFtlXT9PYmplY3QuYXNzaWduKHtpZDplfSx0W2VdKTpudWxsKSk7Y2xhc3MgWU10e2NvbnN0cnVjdG9yKHQpe3RoaXMuc3RvcmU9dCx0aGlzLmFjdGl2ZUtub3duUGx1Z2luJD10aGlzLnN0b3JlLnNlbGVjdChHTXQpLHRoaXMuYWN0aXZlUGx1Z2luSWQkPXRoaXMuc3RvcmUuc2VsZWN0KGRBKSx0aGlzLnBsdWdpbkxvYWRTdGF0ZSQ9RHQodGhpcy5hY3RpdmVLbm93blBsdWdpbiQsdGhpcy5hY3RpdmVQbHVnaW5JZCQsdGhpcy5zdG9yZS5zZWxlY3QockEpKS5waXBlKGh0KCgoW3QsZSxuXSk9Pm51bGwhPT1uLmZhaWx1cmVDb2RlP24uZmFpbHVyZUNvZGU9PT1ORS5OT1RfRk9VTkQ/VU10LkVOVklST05NRU5UX0ZBSUxVUkVfTk9UX0ZPVU5EOlVNdC5FTlZJUk9OTUVOVF9GQUlMVVJFX1VOS05PV046bnVsbCE9PXQ/VU10LkxPQURFRDpudWxsPT09bi5sYXN0TG9hZGVkVGltZUluTXMmJm4uc3RhdGU9PT1CRS5MT0FESU5HP1VNdC5MT0FESU5HOmU/VU10LlVOS05PV05fUExVR0lOX0lEOlVNdC5OT19FTkFCTEVEX1BMVUdJTlMpKSksdGhpcy5sYXN0TG9hZGVkVGltZUluTXMkPXRoaXMuc3RvcmUuc2VsZWN0KGNBKSx0aGlzLmRhdGFMb2NhdGlvbiQ9dGhpcy5zdG9yZS5zZWxlY3QobUEpLnBpcGUoaHQoKHQ9PnQuZGF0YV9sb2NhdGlvbikpKSx0aGlzLmlzRmVhdHVyZUZsYWdzTG9hZGVkJD10aGlzLnN0b3JlLnNlbGVjdChiRSksdGhpcy5mZWF0dXJlRmxhZ3MkPXRoaXMuc3RvcmUuc2VsZWN0KHlFKSx0aGlzLnNldHRpbmdzTG9hZFN0YXRlJD10aGlzLnN0b3JlLnNlbGVjdChaRyl9fVlNdC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8WU10KShNdShFaykpfSxZTXQuybVjbXA9VW8oe3R5cGU6WU10LHNlbGVjdG9yczpbWyJwbHVnaW5zIl1dLGlucHV0czp7ZW52aXJvbm1lbnRGYWlsdXJlTm90Rm91bmRUZW1wbGF0ZToiZW52aXJvbm1lbnRGYWlsdXJlTm90Rm91bmRUZW1wbGF0ZSIsZW52aXJvbm1lbnRGYWlsdXJlVW5rbm93blRlbXBsYXRlOiJlbnZpcm9ubWVudEZhaWx1cmVVbmtub3duVGVtcGxhdGUifSxkZWNsczo5LHZhcnM6MjYsY29uc3RzOltbMywiYWN0aXZlS25vd25QbHVnaW4iLCJhY3RpdmVQbHVnaW5JZCIsImRhdGFMb2NhdGlvbiIsImxhc3RVcGRhdGVkIiwicGx1Z2luTG9hZFN0YXRlIiwiaXNGZWF0dXJlRmxhZ3NMb2FkZWQiLCJzZXR0aW5nc0xvYWRTdGF0ZSIsImZlYXR1cmVGbGFncyIsImVudmlyb25tZW50RmFpbHVyZU5vdEZvdW5kVGVtcGxhdGUiLCJlbnZpcm9ubWVudEZhaWx1cmVVbmtub3duVGVtcGxhdGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKHd1KDAsInBsdWdpbnMtY29tcG9uZW50IiwwKSxPYigxLCJhc3luYyIpLE9iKDIsImFzeW5jIiksT2IoMywiYXN5bmMiKSxPYig0LCJhc3luYyIpLE9iKDUsImFzeW5jIiksT2IoNiwiYXN5bmMiKSxPYig3LCJhc3luYyIpLE9iKDgsImFzeW5jIikpLDImZSYmdnUoImFjdGl2ZUtub3duUGx1Z2luIixQYigxLDEwLG4uYWN0aXZlS25vd25QbHVnaW4kKSkoImFjdGl2ZVBsdWdpbklkIixQYigyLDEyLG4uYWN0aXZlUGx1Z2luSWQkKSkoImRhdGFMb2NhdGlvbiIsUGIoMywxNCxuLmRhdGFMb2NhdGlvbiQpKSgibGFzdFVwZGF0ZWQiLFBiKDQsMTYsbi5sYXN0TG9hZGVkVGltZUluTXMkKSkoInBsdWdpbkxvYWRTdGF0ZSIsUGIoNSwxOCxuLnBsdWdpbkxvYWRTdGF0ZSQpKSgiaXNGZWF0dXJlRmxhZ3NMb2FkZWQiLFBiKDYsMjAsbi5pc0ZlYXR1cmVGbGFnc0xvYWRlZCQpKSgic2V0dGluZ3NMb2FkU3RhdGUiLFBiKDcsMjIsbi5zZXR0aW5nc0xvYWRTdGF0ZSQpKSgiZmVhdHVyZUZsYWdzIixQYig4LDI0LG4uZmVhdHVyZUZsYWdzJCkpKCJlbnZpcm9ubWVudEZhaWx1cmVOb3RGb3VuZFRlbXBsYXRlIixuLmVudmlyb25tZW50RmFpbHVyZU5vdEZvdW5kVGVtcGxhdGUpKCJlbnZpcm9ubWVudEZhaWx1cmVVbmtub3duVGVtcGxhdGUiLG4uZW52aXJvbm1lbnRGYWlsdXJlVW5rbm93blRlbXBsYXRlKX0sc3R5bGVzOlsicGx1Z2lucy1jb21wb25lbnRbX25nY29udGVudC0lQ09NUCVdIHsgaGVpZ2h0OiAxMDAlOyB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFlNdCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJwbHVnaW5zIix0ZW1wbGF0ZTonXG4gICAgPHBsdWdpbnMtY29tcG9uZW50XG4gICAgICBbYWN0aXZlS25vd25QbHVnaW5dPSJhY3RpdmVLbm93blBsdWdpbiQgfCBhc3luYyJcbiAgICAgIFthY3RpdmVQbHVnaW5JZF09ImFjdGl2ZVBsdWdpbklkJCB8IGFzeW5jIlxuICAgICAgW2RhdGFMb2NhdGlvbl09ImRhdGFMb2NhdGlvbiQgfCBhc3luYyJcbiAgICAgIFtsYXN0VXBkYXRlZF09Imxhc3RMb2FkZWRUaW1lSW5NcyQgfCBhc3luYyJcbiAgICAgIFtwbHVnaW5Mb2FkU3RhdGVdPSJwbHVnaW5Mb2FkU3RhdGUkIHwgYXN5bmMiXG4gICAgICBbaXNGZWF0dXJlRmxhZ3NMb2FkZWRdPSJpc0ZlYXR1cmVGbGFnc0xvYWRlZCQgfCBhc3luYyJcbiAgICAgIFtzZXR0aW5nc0xvYWRTdGF0ZV09InNldHRpbmdzTG9hZFN0YXRlJCB8IGFzeW5jIlxuICAgICAgW2ZlYXR1cmVGbGFnc109ImZlYXR1cmVGbGFncyQgfCBhc3luYyJcbiAgICAgIFtlbnZpcm9ubWVudEZhaWx1cmVOb3RGb3VuZFRlbXBsYXRlXT0iZW52aXJvbm1lbnRGYWlsdXJlTm90Rm91bmRUZW1wbGF0ZSJcbiAgICAgIFtlbnZpcm9ubWVudEZhaWx1cmVVbmtub3duVGVtcGxhdGVdPSJlbnZpcm9ubWVudEZhaWx1cmVVbmtub3duVGVtcGxhdGUiXG4gICAgPjwvcGx1Z2lucy1jb21wb25lbnQ+XG4gICcsc3R5bGVzOlsicGx1Z2lucy1jb21wb25lbnQgeyBoZWlnaHQ6IDEwMCU7IH0iXSxjaGFuZ2VEZXRlY3Rpb246eG8uT25QdXNofV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6RWt9XX0pLHtlbnZpcm9ubWVudEZhaWx1cmVOb3RGb3VuZFRlbXBsYXRlOlt7dHlwZTp5X31dLGVudmlyb25tZW50RmFpbHVyZVVua25vd25UZW1wbGF0ZTpbe3R5cGU6eV99XX0pO2NsYXNzIHFNdHt9cU10Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxxTXQpfSxxTXQuybVtb2Q9Wm8oe3R5cGU6cU10fSkscU10Lsm1aW5qPWNvKHtpbXBvcnRzOltbQ0EsQnYsYnFdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8ocU10LHtkZWNsYXJhdGlvbnM6W1lNdCxXTXRdLGltcG9ydHM6W0NBLEJ2LGJxXSxleHBvcnRzOltZTXRdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihxTXQsW3t0eXBlOmtfLGFyZ3M6W3tkZWNsYXJhdGlvbnM6W1lNdCxXTXRdLGV4cG9ydHM6W1lNdF0saW1wb3J0czpbQ0EsQnYsYnFdfV19XSxudWxsLG51bGwpLFdvKFlNdCxbV010XSxbTXZdKTtjbGFzcyBaTXR7Y29uc3RydWN0b3IodCxlKXt0aGlzLnN0b3JlPXQsdGhpcy5kb2N1bWVudD1lLHRoaXMub25WaXNpYmlsaXR5Q2hhbmdlPXRoaXMub25WaXNpYmlsaXR5Q2hhbmdlSW1wbC5iaW5kKHRoaXMpLHRoaXMucmVsb2FkRW5hYmxlZCQ9dGhpcy5zdG9yZS5waXBlKFJrKFhHKSksdGhpcy5yZWxvYWRQZXJpb2RJbk1zJD10aGlzLnN0b3JlLnBpcGUoUmsoS0cpKSx0aGlzLnJlbG9hZFRpbWVySWQ9bnVsbCx0aGlzLm1pc3NlZEF1dG9SZWxvYWQ9ITF9bmdPbkluaXQoKXt0aGlzLmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLHRoaXMub25WaXNpYmlsaXR5Q2hhbmdlKSxEdCh0aGlzLnJlbG9hZEVuYWJsZWQkLnBpcGUoa2UoKSksdGhpcy5yZWxvYWRQZXJpb2RJbk1zJC5waXBlKGtlKCkpKS5zdWJzY3JpYmUoKChbdCxlXSk9Pnt0aGlzLmNhbmNlbExvYWQoKSx0JiZ0aGlzLmxvYWQoZSl9KSl9b25WaXNpYmlsaXR5Q2hhbmdlSW1wbCgpeyJ2aXNpYmxlIj09PXRoaXMuZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlJiZ0aGlzLm1pc3NlZEF1dG9SZWxvYWQmJih0aGlzLm1pc3NlZEF1dG9SZWxvYWQ9ITEsdGhpcy5zdG9yZS5kaXNwYXRjaChHRSgpKSl9bG9hZCh0KXt0aGlzLnJlbG9hZFRpbWVySWQ9c2V0VGltZW91dCgoKCk9PnsidmlzaWJsZSI9PT10aGlzLmRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZT90aGlzLnN0b3JlLmRpc3BhdGNoKEdFKCkpOnRoaXMubWlzc2VkQXV0b1JlbG9hZD0hMCx0aGlzLmxvYWQodCl9KSx0KX1jYW5jZWxMb2FkKCl7bnVsbCE9PXRoaXMucmVsb2FkVGltZXJJZCYmY2xlYXJUaW1lb3V0KHRoaXMucmVsb2FkVGltZXJJZCksdGhpcy5yZWxvYWRUaW1lcklkPW51bGx9bmdPbkRlc3Ryb3koKXt0aGlzLmNhbmNlbExvYWQoKSx0aGlzLmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLHRoaXMub25WaXNpYmlsaXR5Q2hhbmdlKX19Wk10Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxaTXQpKE11KEVrKSxNdShVQykpfSxaTXQuybVjbXA9VW8oe3R5cGU6Wk10LHNlbGVjdG9yczpbWyJyZWxvYWRlciJdXSxkZWNsczowLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7fSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFpNdCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJyZWxvYWRlciIsdGVtcGxhdGU6IiIsY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkVrfSx7dHlwZTpEb2N1bWVudCxkZWNvcmF0b3JzOlt7dHlwZTp5cyxhcmdzOltVQ119XX1dfSksbnVsbCk7Y2xhc3MgWE10e31YTXQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFhNdCl9LFhNdC7JtWNtcD1Vbyh7dHlwZTpYTXQsc2VsZWN0b3JzOltbInRlbnNvcmJvYXJkLXdyYXBwZXItY29tcG9uZW50Il1dLGRlY2xzOjIsdmFyczowLGNvbnN0czpbWzEsInBsdWdpbnMiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKHd1KDAsInBsdWdpbnMiLDApLHd1KDEsInJlbG9hZGVyIikpfSxkaXJlY3RpdmVzOltZTXQsWk10XSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgfVxuXG4gICAgICAucGx1Z2luc1tfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBmbGV4OiAxIDE7XG4gICAgICAgIG92ZXJmbG93OiBhdXRvO1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmRiKFhNdCxbe3R5cGU6aF8sYXJnczpbe3NlbGVjdG9yOiJ0ZW5zb3Jib2FyZC13cmFwcGVyLWNvbXBvbmVudCIsdGVtcGxhdGU6J1xuICAgIDxwbHVnaW5zIGNsYXNzPSJwbHVnaW5zIj48L3BsdWdpbnM+XG4gICAgPHJlbG9hZGVyPjwvcmVsb2FkZXI+XG4gICcsc3R5bGVzOlsiXG4gICAgICA6aG9zdCB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIH1cblxuICAgICAgLnBsdWdpbnMge1xuICAgICAgICBmbGV4OiAxIDE7XG4gICAgICAgIG92ZXJmbG93OiBhdXRvO1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB9XG4gICAgIl0sY2hhbmdlRGV0ZWN0aW9uOnhvLk9uUHVzaH1dfV0sbnVsbCxudWxsKTtjbGFzcyBLTXR7fUtNdC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8S010KX0sS010Lsm1cHJvdj1sbyh7dG9rZW46S010LGZhY3Rvcnk6S010Lsm1ZmFjfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihLTXQsW3t0eXBlOkptfV0sbnVsbCxudWxsKTtjb25zdCBKTXQ9InNtb290aGluZyIsUU10PSJydW5Db2xvckdyb3VwIiwkTXQ9InJlZ2V4OiI7bGV0IHR2dD1jbGFzcyBleHRlbmRzIEtNdHtnZXRNZXRyaWNzUGlubmVkQ2FyZHModCl7cmV0dXJuIER0KFt0LnNlbGVjdChOVCksdC5zZWxlY3QoelQpXSkucGlwZShodCgoKFt0LGVdKT0+e2lmKCF0Lmxlbmd0aCYmIWUubGVuZ3RoKXJldHVybltdO2NvbnN0IG49Wy4uLnQubWFwKCgoe3BsdWdpbjp0LHRhZzplLHNhbXBsZTpuLHJ1bklkOm99KT0+e2NvbnN0IGk9e3BsdWdpbjp0LHRhZzplfTtyZXR1cm4gZlIodCkmJihpLnJ1bklkPW8pLG1SKHQpJiYoaS5zYW1wbGU9biksaX0pKSwuLi5lXTtyZXR1cm5be2tleToicGlubmVkQ2FyZHMiLHZhbHVlOkpTT04uc3RyaW5naWZ5KG4pfV19KSkpfWdldEZlYXR1cmVGbGFnU3RhdGVzKHQpe3JldHVybiBEdChbdC5zZWxlY3QoeEUpLHQuc2VsZWN0KF9FKV0pLnBpcGUoaHQoKChbdCxlXSk9Pntjb25zdCBuPXQubWFwKCh0PT4oe2tleTpVUix2YWx1ZTp0fSkpKTtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBlLmVuYWJsZWRDb2xvckdyb3VwJiZuLnB1c2goe2tleTpHUix2YWx1ZTpTdHJpbmcoZS5lbmFibGVkQ29sb3JHcm91cCl9KSwiYm9vbGVhbiI9PXR5cGVvZiBlLmVuYWJsZWRDb2xvckdyb3VwQnlSZWdleCYmbi5wdXNoKHtrZXk6WVIsdmFsdWU6U3RyaW5nKGUuZW5hYmxlZENvbG9yR3JvdXBCeVJlZ2V4KX0pLG59KSkpfXNlcmlhbGl6ZVN0YXRlVG9RdWVyeVBhcmFtcyh0KXtyZXR1cm4gRHQoW3RoaXMuZ2V0TWV0cmljc1Bpbm5lZENhcmRzKHQpLHRoaXMuZ2V0RmVhdHVyZUZsYWdTdGF0ZXModCksdC5zZWxlY3QoTFQpLnBpcGUoaHQoKHQ9Pk51bWJlci5pc0Zpbml0ZSh0LnNjYWxhclNtb290aGluZyk/W3trZXk6Sk10LHZhbHVlOlN0cmluZyh0LnNjYWxhclNtb290aGluZyl9XTpbXSkpKSx0LnNlbGVjdChmTikucGlwZShodCgodD0+e2lmKCF0KXJldHVybltdO2xldCBlO3N3aXRjaCh0LmtleSl7Y2FzZSBlTi5FWFBFUklNRU5UOmU9ImV4cGVyaW1lbnQiO2JyZWFrO2Nhc2UgZU4uUlVOOmU9InJ1biI7YnJlYWs7Y2FzZSBlTi5SRUdFWDplPWByZWdleDoke3QucmVnZXhTdHJpbmd9YDticmVhaztkZWZhdWx0OnRocm93IG5ldyBSYW5nZUVycm9yKCJTZXJpYWxpemF0aW9uIG5vdCBpbXBsZW1lbnRlZCIpfXJldHVyblt7a2V5OlFNdCx2YWx1ZTplfV19KSkpXSkucGlwZShodCgodD0+dC5mbGF0KCkpKSl9ZGVzZXJpYWxpemVRdWVyeVBhcmFtcyh0KXtsZXQgZT1udWxsLG49bnVsbCxvPW51bGw7Zm9yKGNvbnN0e2tleTppLHZhbHVlOmF9b2YgdClzd2l0Y2goaSl7Y2FzZSJwaW5uZWRDYXJkcyI6ZT1ldnQoYSk7YnJlYWs7Y2FzZSBKTXQ6bj1OdW1iZXIoYSk7YnJlYWs7Y2FzZSBRTXQ6c3dpdGNoKGEpe2Nhc2UiZXhwZXJpbWVudCI6bz17a2V5OmVOLkVYUEVSSU1FTlR9O2JyZWFrO2Nhc2UicnVuIjpvPXtrZXk6ZU4uUlVOfX1pZihhLnN0YXJ0c1dpdGgoJE10KSl7Y29uc3QgdD1hLnNsaWNlKCRNdC5sZW5ndGgpO289e2tleTplTi5SRUdFWCxyZWdleFN0cmluZzp0fX19cmV0dXJue21ldHJpY3M6e3Bpbm5lZENhcmRzOmV8fFtdLHNtb290aGluZzpufSxydW5zOntncm91cEJ5Om99fX19O2Z1bmN0aW9uIGV2dCh0KXtsZXQgZTt0cnl7ZT1KU09OLnBhcnNlKHQpfWNhdGNoKHQpe3JldHVybiBudWxsfWlmKCFBcnJheS5pc0FycmF5KGUpKXJldHVybiBudWxsO2NvbnN0IG49W107Zm9yKGNvbnN0IHQgb2YgZSl7Y29uc3QgZT0ic3RyaW5nIj09dHlwZW9mIHQucnVuSWQsaT0ibnVtYmVyIj09dHlwZW9mIHQuc2FtcGxlLGE9InN0cmluZyI9PXR5cGVvZiB0LnRhZyxyPWV8fHZvaWQgMD09PXQucnVuSWQscz1pfHx2b2lkIDA9PT10LnNhbXBsZTtpZighKCJzdHJpbmciPT10eXBlb2YgdC5wbHVnaW4mJmEmJnImJnMpKWNvbnRpbnVlO2lmKChvPXQucGx1Z2luKSE9PXNSLlNDQUxBUlMmJm8hPT1zUi5ISVNUT0dSQU1TJiZvIT09c1IuSU1BR0VTKWNvbnRpbnVlO2lmKCF0LnRhZyljb250aW51ZTtpZihmUih0LnBsdWdpbikpe2lmKCF0LnJ1bklkKWNvbnRpbnVlfWVsc2UgaWYodC5ydW5JZCljb250aW51ZTtpZihpKXtpZighbVIodC5wbHVnaW4pKWNvbnRpbnVlO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKHQuc2FtcGxlKXx8dC5zYW1wbGU8MCljb250aW51ZX1jb25zdCBsPXtwbHVnaW46dC5wbHVnaW4sdGFnOnQudGFnfTtlJiYobC5ydW5JZD10LnJ1bklkKSxpJiYobC5zYW1wbGU9dC5zYW1wbGUpLG4ucHVzaChsKX12YXIgbztyZXR1cm4gbn1mdW5jdGlvbiBudnQoKXtyZXR1cm5be3JvdXRlS2luZDpqUy5FWFBFUklNRU5ULHBhdGg6Ii8iLG5nQ29tcG9uZW50OlhNdCxkZWZhdWx0Um91dGU6ITAsZGVlcExpbmtQcm92aWRlcjpuZXcgdHZ0fV19ZnVuY3Rpb24gb3Z0KHQpe3JldHVybihlLG4pPT57Y29uc3Qgbz10KGUsbik7cmV0dXJuIGNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQobi50eXBlKSxjb25zb2xlLmxvZygicHJldiBzdGF0ZSIsZSksY29uc29sZS5sb2coImFjdGlvbiIsbiksY29uc29sZS5sb2coIm5leHQgc3RhdGUiLG8pLGNvbnNvbGUuZ3JvdXBFbmQoKSxvfX1mdW5jdGlvbiBpdnQoKXtyZXR1cm4gdUMoKT9vdnQ6dD0+KGUsbik9PnQoZSxuKX10dnQ9KGZ1bmN0aW9uIGF2dCh0LGUsbixvKXt2YXIgaSxhPWFyZ3VtZW50cy5sZW5ndGgscj1hPDM/ZTpudWxsPT09bz9vPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSxuKTpvO2lmKCJvYmplY3QiPT10eXBlb2YgUmVmbGVjdCYmImZ1bmN0aW9uIj09dHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUpcj1SZWZsZWN0LmRlY29yYXRlKHQsZSxuLG8pO2Vsc2UgZm9yKHZhciBzPXQubGVuZ3RoLTE7cz49MDtzLS0pKGk9dFtzXSkmJihyPShhPDM/aShyKTphPjM/aShlLG4scik6aShlLG4pKXx8cik7cmV0dXJuIGE+MyYmciYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbixyKSxyfSkoW0ptKCldLHR2dCk7Y29uc3QgcnZ0PW5ldyBOcigiUm9vdCByZWR1Y2VycyB0b2tlbiIse2ZhY3Rvcnk6KCk9Pih7fSl9KTtjbGFzcyBzdnR7fXN2dC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8c3Z0KX0sc3Z0Lsm1bW9kPVpvKHt0eXBlOnN2dH0pLHN2dC7JtWluaj1jbyh7cHJvdmlkZXJzOlt7cHJvdmlkZTpkayx1c2VGYWN0b3J5Oml2dCxtdWx0aTohMH1dLGltcG9ydHM6W1tpUy5mb3JSb290KHJ2dCx7cnVudGltZUNoZWNrczp7c3RyaWN0U3RhdGVJbW11dGFiaWxpdHk6ITAsc3RyaWN0QWN0aW9uSW1tdXRhYmlsaXR5OiEwLHN0cmljdEFjdGlvblNlcmlhbGl6YWJpbGl0eTohMSxzdHJpY3RTdGF0ZVNlcmlhbGl6YWJpbGl0eTohMX19KSxMUy5mb3JSb290KFtdKV1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhzdnQse2ltcG9ydHM6W25TLEhTXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoc3Z0LFt7dHlwZTprXyxhcmdzOlt7aW1wb3J0czpbaVMuZm9yUm9vdChydnQse3J1bnRpbWVDaGVja3M6e3N0cmljdFN0YXRlSW1tdXRhYmlsaXR5OiEwLHN0cmljdEFjdGlvbkltbXV0YWJpbGl0eTohMCxzdHJpY3RBY3Rpb25TZXJpYWxpemFiaWxpdHk6ITEsc3RyaWN0U3RhdGVTZXJpYWxpemFiaWxpdHk6ITF9fSksTFMuZm9yUm9vdChbXSldLHByb3ZpZGVyczpbe3Byb3ZpZGU6ZGssdXNlRmFjdG9yeTppdnQsbXVsdGk6ITB9XX1dfV0sbnVsbCxudWxsKTtjbGFzcyBsdnR7fWx2dC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8bHZ0KX0sbHZ0Lsm1bW9kPVpvKHt0eXBlOmx2dH0pLGx2dC7JtWluaj1jbyh7fSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZYbyhsdnQse2RlY2xhcmF0aW9uczpbWk10XSxleHBvcnRzOltaTXRdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihsdnQsW3t0eXBlOmtfLGFyZ3M6W3tkZWNsYXJhdGlvbnM6W1pNdF0sZXhwb3J0czpbWk10XX1dfV0sbnVsbCxudWxsKTtjbGFzcyBjdnR7fWN2dC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8Y3Z0KX0sY3Z0Lsm1bW9kPVpvKHt0eXBlOmN2dH0pLGN2dC7JtWluaj1jbyh7aW1wb3J0czpbW0J2LHFNdCxsdnRdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oY3Z0LHtkZWNsYXJhdGlvbnM6W1hNdF0saW1wb3J0czpbQnYscU10LGx2dF0sZXhwb3J0czpbWE10XX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmZGIoY3Z0LFt7dHlwZTprXyxhcmdzOlt7ZGVjbGFyYXRpb25zOltYTXRdLGltcG9ydHM6W0J2LHFNdCxsdnRdLGV4cG9ydHM6W1hNdF0sZW50cnlDb21wb25lbnRzOltYTXRdfV19XSxudWxsLG51bGwpO2NsYXNzIGR2dHt9ZHZ0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxkdnQpfSxkdnQuybVtb2Q9Wm8oe3R5cGU6ZHZ0LGJvb3RzdHJhcDpbS1ldfSksZHZ0Lsm1aW5qPWNvKHtpbXBvcnRzOltbY1QsengsVncsRUQsUVksaEQucmVnaXN0ZXJSb3V0ZXMobnZ0KSxITCx6TCwkWSxjdnQsQ0EscnEsZXEsdXEsS0EsZnEsbnEsVlIsWE4scU10LEZOLHBxLHN2dCxTTXRdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmWG8oZHZ0LHtkZWNsYXJhdGlvbnM6W0tZXSxpbXBvcnRzOltjVCx6eCxWdyxFRCxRWSxoRCxITCx6TCwkWSxjdnQsQ0EscnEsZXEsdXEsS0EsZnEsbnEsVlIsWE4scU10LEZOLHBxLHN2dCxTTXRdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZkYihkdnQsW3t0eXBlOmtfLGFyZ3M6W3tkZWNsYXJhdGlvbnM6W0tZXSxpbXBvcnRzOltjVCx6eCxWdyxFRCxRWSxoRC5yZWdpc3RlclJvdXRlcyhudnQpLEhMLHpMLCRZLGN2dCxDQSxycSxlcSx1cSxLQSxmcSxucSxWUixYTixxTXQsRk4scHEsc3Z0LFNNdF0sYm9vdHN0cmFwOltLWV19XX1dLG51bGwsbnVsbCksImxvYWRpbmciIT09ZG9jdW1lbnQucmVhZHlTdGF0ZT9BeCgpLmJvb3RzdHJhcE1vZHVsZShkdnQpOndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIiwoKCk9PntBeCgpLmJvb3RzdHJhcE1vZHVsZShkdnQpfSkpLChmdW5jdGlvbiBwdnQoKXtpZihtQyl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBlbmFibGUgcHJvZCBtb2RlIGFmdGVyIHBsYXRmb3JtIHNldHVwLiIpOyh2b2lkIDA9PT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiYoRW8ubmdEZXZNb2RlPSExKSxwQz0hMX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovKSgpfSkoKTsK", + "ok": true, + "headers": [ + [ + "content-type", + "application/javascript; charset=utf-8" + ] + ], + "status": 200, + "status_text": "" + }, + "https://localhost:6007/icon_bundle.svg": { + "data": "PD94bWwgdmVyc2lvbj0iMS4wIiA/Pjxzdmc+PGRlZnM+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iYXJyb3dfZG93bndhcmRfMjRweCI+PHBhdGggZmlsbD0iIzAxMDEwMSIgZD0iTTIwIDEybC0xLjQxLTEuNDFMMTMgMTYuMTdWNGgtMnYxMi4xN2wtNS41OC01LjU5TDQgMTJsOCA4IDgtOHoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJhcnJvd191cHdhcmRfMjRweCI+PHBhdGggZD0iTTQgMTJsMS40MSAxLjQxTDExIDcuODNWMjBoMlY3LjgzbDUuNTggNS41OUwyMCAxMmwtOC04LTggOHoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJicmlnaHRuZXNzXzZfMjRweCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0yMCAxNS4zMUwyMy4zMSAxMiAyMCA4LjY5VjRoLTQuNjlMMTIgLjY5IDguNjkgNEg0djQuNjlMLjY5IDEyIDQgMTUuMzFWMjBoNC42OUwxMiAyMy4zMSAxNS4zMSAyMEgyMHYtNC42OXpNMTIgMThWNmMzLjMxIDAgNiAyLjY5IDYgNnMtMi42OSA2LTYgNnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJidWdfcmVwb3J0XzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMjAgOGgtMi44MWMtLjQ1LS43OC0xLjA3LTEuNDUtMS44Mi0xLjk2TDE3IDQuNDEgMTUuNTkgM2wtMi4xNyAyLjE3QzEyLjk2IDUuMDYgMTIuNDkgNSAxMiA1Yy0uNDkgMC0uOTYuMDYtMS40MS4xN0w4LjQxIDMgNyA0LjQxbDEuNjIgMS42M0M3Ljg4IDYuNTUgNy4yNiA3LjIyIDYuODEgOEg0djJoMi4wOWMtLjA1LjMzLS4wOS42Ni0uMDkgMXYxSDR2MmgydjFjMCAuMzQuMDQuNjcuMDkgMUg0djJoMi44MWMxLjA0IDEuNzkgMi45NyAzIDUuMTkgM3M0LjE1LTEuMjEgNS4xOS0zSDIwdi0yaC0yLjA5Yy4wNS0uMzMuMDktLjY2LjA5LTF2LTFoMnYtMmgtMnYtMWMwLS4zNC0uMDQtLjY3LS4wOS0xSDIwVjh6bS02IDhoLTR2LTJoNHYyem0wLTRoLTR2LTJoNHYyeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImNhbmNlbF8yNHB4Ij48cGF0aCBkPSJNMTIgMkM2LjQ3IDIgMiA2LjQ3IDIgMTJzNC40NyAxMCAxMCAxMCAxMC00LjQ3IDEwLTEwUzE3LjUzIDIgMTIgMnptNSAxMy41OUwxNS41OSAxNyAxMiAxMy40MSA4LjQxIDE3IDcgMTUuNTkgMTAuNTkgMTIgNyA4LjQxIDguNDEgNyAxMiAxMC41OSAxNS41OSA3IDE3IDguNDEgMTMuNDEgMTIgMTcgMTUuNTl6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iY2hldnJvbl9sZWZ0XzI0cHgiPjxwYXRoIGQ9Ik0xNS40MSA3LjQxTDE0IDZsLTYgNiA2IDYgMS40MS0xLjQxTDEwLjgzIDEyeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImNoZXZyb25fcmlnaHRfMjRweCI+PHBhdGggZD0iTTEwIDZMOC41OSA3LjQxIDEzLjE3IDEybC00LjU4IDQuNTlMMTAgMThsNi02eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImNsZWFyXzI0cHgiPjxwYXRoIGQ9Ik0xOSA2LjQxTDE3LjU5IDUgMTIgMTAuNTkgNi40MSA1IDUgNi40MSAxMC41OSAxMiA1IDE3LjU5IDYuNDEgMTkgMTIgMTMuNDEgMTcuNTkgMTkgMTkgMTcuNTkgMTMuNDEgMTJ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0iY2xvc2VfMjRweCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0xOSA2LjQxTDE3LjU5IDUgMTIgMTAuNTkgNi40MSA1IDUgNi40MSAxMC41OSAxMiA1IDE3LjU5IDYuNDEgMTkgMTIgMTMuNDEgMTcuNTkgMTkgMTkgMTcuNTkgMTMuNDEgMTJ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iY29udGVudF9jb3B5XzI0cHgiPjxwYXRoIGQ9Ik0xNiAxSDRjLTEuMSAwLTIgLjktMiAydjE0aDJWM2gxMlYxem0zIDRIOGMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxMWMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0wIDE2SDhWN2gxMXYxNHoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMjQgMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0iZGFya19tb2RlXzI0cHgiPjxyZWN0IGZpbGw9Im5vbmUiIGhlaWdodD0iMjQiIHdpZHRoPSIyNCIvPjxwYXRoIGQ9Ik0xMiwzYy00Ljk3LDAtOSw0LjAzLTksOXM0LjAzLDksOSw5czktNC4wMyw5LTljMC0wLjQ2LTAuMDQtMC45Mi0wLjEtMS4zNmMtMC45OCwxLjM3LTIuNTgsMi4yNi00LjQsMi4yNiBjLTIuOTgsMC01LjQtMi40Mi01LjQtNS40YzAtMS44MSwwLjg5LTMuNDIsMi4yNi00LjRDMTIuOTIsMy4wNCwxMi40NiwzLDEyLDNMMTIsM3oiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJkb25lXzI0cHgiPjxwYXRoIGQ9Ik05IDE2LjJMNC44IDEybC0xLjQgMS40TDkgMTkgMjEgN2wtMS40LTEuNEw5IDE2LjJ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0iZWRpdF8yNHB4Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTMgMTcuMjVWMjFoMy43NUwxNy44MSA5Ljk0bC0zLjc1LTMuNzVMMyAxNy4yNXpNMjAuNzEgNy4wNGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC0yLjM0LTIuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0xLjgzIDEuODMgMy43NSAzLjc1IDEuODMtMS44M3oiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJlcnJvcl8yNHB4Ij48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMSAxNWgtMnYtMmgydjJ6bTAtNGgtMlY3aDJ2NnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJleHBhbmRfbGVzc18yNHB4Ij48cGF0aCBkPSJNMTIgOGwtNiA2IDEuNDEgMS40MUwxMiAxMC44M2w0LjU5IDQuNThMMTggMTR6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iZXhwYW5kX21vcmVfMjRweCI+PHBhdGggZD0iTTE2LjU5IDguNTlMMTIgMTMuMTcgNy40MSA4LjU5IDYgMTBsNiA2IDYtNnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMjQgMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0iZmlsdGVyX2FsdF8yNHB4Ij48Zz48cGF0aCBkPSJNMCwwaDI0IE0yNCwyNEgwIiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTQuMjUsNS42MUM2LjI3LDguMiwxMCwxMywxMCwxM3Y2YzAsMC41NSwwLjQ1LDEsMSwxaDJjMC41NSwwLDEtMC40NSwxLTF2LTZjMCwwLDMuNzItNC44LDUuNzQtNy4zOSBDMjAuMjUsNC45NSwxOS43OCw0LDE4Ljk1LDRINS4wNEM0LjIxLDQsMy43NCw0Ljk1LDQuMjUsNS42MXoiLz48cGF0aCBkPSJNMCwwaDI0djI0SDBWMHoiIGZpbGw9Im5vbmUiLz48L2c+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iZmxhZ18yNHB4Ij48cGF0aCBkPSJNMTQuNCA2TDE0IDRINXYxN2gydi03aDUuNmwuNCAyaDdWNnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJmdWxsc2NyZWVuXzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNNyAxNEg1djVoNXYtMkg3di0zem0tMi00aDJWN2gzVjVINXY1em0xMiA3aC0zdjJoNXYtNWgtMnYzek0xNCA1djJoM3YzaDJWNWgtNXoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJmdWxsc2NyZWVuX2V4aXRfMjRweCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik01IDE2aDN2M2gydi01SDV2MnptMy04SDV2Mmg1VjVIOHYzem02IDExaDJ2LTNoM3YtMmgtNXY1em0yLTExVjVoLTJ2NWg1VjhoLTN6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iZ2V0X2FwcF8yNHB4Ij48cGF0aCBkPSJNMTkgOWgtNFYzSDl2Nkg1bDcgNyA3LTd6TTUgMTh2MmgxNHYtMkg1eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9Imdyb3VwX3dvcmtfMjRweCI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6TTggMTcuNWMtMS4zOCAwLTIuNS0xLjEyLTIuNS0yLjVzMS4xMi0yLjUgMi41LTIuNSAyLjUgMS4xMiAyLjUgMi41LTEuMTIgMi41LTIuNSAyLjV6TTkuNSA4YzAtMS4zOCAxLjEyLTIuNSAyLjUtMi41czIuNSAxLjEyIDIuNSAyLjUtMS4xMiAyLjUtMi41IDIuNVM5LjUgOS4zOCA5LjUgOHptNi41IDkuNWMtMS4zOCAwLTIuNS0xLjEyLTIuNS0yLjVzMS4xMi0yLjUgMi41LTIuNSAyLjUgMS4xMiAyLjUgMi41LTEuMTIgMi41LTIuNSAyLjV6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iaGVscF9vdXRsaW5lXzI0cHgiPjxwYXRoIGQ9Ik0xMSAxOGgydi0yaC0ydjJ6bTEtMTZDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4em0wLTE0Yy0yLjIxIDAtNCAxLjc5LTQgNGgyYzAtMS4xLjktMiAyLTJzMiAuOSAyIDJjMCAyLTMgMS43NS0zIDVoMmMwLTIuMjUgMy0yLjUgMy01IDAtMi4yMS0xLjc5LTQtNC00eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9ImltYWdlX3NlYXJjaF8yNHB4Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTAgMGgyNHYyNEgwVjB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTE4IDEzdjdINFY2aDUuMDJjLjA1LS43MS4yMi0xLjM4LjQ4LTJINGMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMnYtNWwtMi0yem0tMS41IDVoLTExbDIuNzUtMy41MyAxLjk2IDIuMzYgMi43NS0zLjU0em0yLjgtOS4xMWMuNDQtLjcuNy0xLjUxLjctMi4zOUMyMCA0LjAxIDE3Ljk5IDIgMTUuNSAyUzExIDQuMDEgMTEgNi41czIuMDEgNC41IDQuNDkgNC41Yy44OCAwIDEuNy0uMjYgMi4zOS0uN0wyMSAxMy40MiAyMi40MiAxMiAxOS4zIDguODl6TTE1LjUgOUMxNC4xMiA5IDEzIDcuODggMTMgNi41UzE0LjEyIDQgMTUuNSA0IDE4IDUuMTIgMTggNi41IDE2Ljg4IDkgMTUuNSA5eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImluZm9fb3V0bGluZV8yNHB4Ij48cGF0aCBkPSJNMTEgMTdoMnYtNmgtMnY2em0xLTE1QzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHpNMTEgOWgyVjdoLTJ2MnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMjQgMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0ia2VlcF8yNHB4Ij48Zz48cmVjdCBmaWxsPSJub25lIiBoZWlnaHQ9IjI0IiB3aWR0aD0iMjQiLz48L2c+PGc+PHBhdGggZD0iTTE2LDlWNGwxLDBjMC41NSwwLDEtMC40NSwxLTF2MGMwLTAuNTUtMC40NS0xLTEtMUg3QzYuNDUsMiw2LDIuNDUsNiwzdjAgYzAsMC41NSwwLjQ1LDEsMSwxbDEsMHY1YzAsMS42Ni0xLjM0LDMtMywzaDB2Mmg1Ljk3djdsMSwxbDEtMXYtN0gxOXYtMmgwQzE3LjM0LDEyLDE2LDEwLjY2LDE2LDl6IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48L2c+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDI0IDI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9ImtlZXBfb3V0bGluZV8yNHB4Ij48Zz48cmVjdCBmaWxsPSJub25lIiBoZWlnaHQ9IjI0IiB3aWR0aD0iMjQiLz48L2c+PGc+PHBhdGggZD0iTTE0LDR2NWMwLDEuMTIsMC4zNywyLjE2LDEsM0g5YzAuNjUtMC44NiwxLTEuOSwxLTNWNEgxNCBNMTcsMkg3QzYuNDUsMiw2LDIuNDUsNiwzYzAsMC41NSwwLjQ1LDEsMSwxYzAsMCwwLDAsMCwwbDEsMHY1IGMwLDEuNjYtMS4zNCwzLTMsM3YyaDUuOTd2N2wxLDFsMS0xdi03SDE5di0yYzAsMCwwLDAsMCwwYy0xLjY2LDAtMy0xLjM0LTMtM1Y0bDEsMGMwLDAsMCwwLDAsMGMwLjU1LDAsMS0wLjQ1LDEtMSBDMTgsMi40NSwxNy41NSwyLDE3LDJMMTcsMnoiLz48L2c+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDI0IDI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9ImxpZ2h0X21vZGVfMjRweCI+PHJlY3QgZmlsbD0ibm9uZSIgaGVpZ2h0PSIyNCIgd2lkdGg9IjI0Ii8+PHBhdGggZD0iTTEyLDdjLTIuNzYsMC01LDIuMjQtNSw1czIuMjQsNSw1LDVzNS0yLjI0LDUtNVMxNC43Niw3LDEyLDdMMTIsN3ogTTIsMTNsMiwwYzAuNTUsMCwxLTAuNDUsMS0xcy0wLjQ1LTEtMS0xbC0yLDAgYy0wLjU1LDAtMSwwLjQ1LTEsMVMxLjQ1LDEzLDIsMTN6IE0yMCwxM2wyLDBjMC41NSwwLDEtMC40NSwxLTFzLTAuNDUtMS0xLTFsLTIsMGMtMC41NSwwLTEsMC40NS0xLDFTMTkuNDUsMTMsMjAsMTN6IE0xMSwydjIgYzAsMC41NSwwLjQ1LDEsMSwxczEtMC40NSwxLTFWMmMwLTAuNTUtMC40NS0xLTEtMVMxMSwxLjQ1LDExLDJ6IE0xMSwyMHYyYzAsMC41NSwwLjQ1LDEsMSwxczEtMC40NSwxLTF2LTJjMC0wLjU1LTAuNDUtMS0xLTEgQzExLjQ1LDE5LDExLDE5LjQ1LDExLDIweiBNNS45OSw0LjU4Yy0wLjM5LTAuMzktMS4wMy0wLjM5LTEuNDEsMGMtMC4zOSwwLjM5LTAuMzksMS4wMywwLDEuNDFsMS4wNiwxLjA2IGMwLjM5LDAuMzksMS4wMywwLjM5LDEuNDEsMHMwLjM5LTEuMDMsMC0xLjQxTDUuOTksNC41OHogTTE4LjM2LDE2Ljk1Yy0wLjM5LTAuMzktMS4wMy0wLjM5LTEuNDEsMGMtMC4zOSwwLjM5LTAuMzksMS4wMywwLDEuNDEgbDEuMDYsMS4wNmMwLjM5LDAuMzksMS4wMywwLjM5LDEuNDEsMGMwLjM5LTAuMzksMC4zOS0xLjAzLDAtMS40MUwxOC4zNiwxNi45NXogTTE5LjQyLDUuOTljMC4zOS0wLjM5LDAuMzktMS4wMywwLTEuNDEgYy0wLjM5LTAuMzktMS4wMy0wLjM5LTEuNDEsMGwtMS4wNiwxLjA2Yy0wLjM5LDAuMzktMC4zOSwxLjAzLDAsMS40MXMxLjAzLDAuMzksMS40MSwwTDE5LjQyLDUuOTl6IE03LjA1LDE4LjM2IGMwLjM5LTAuMzksMC4zOS0xLjAzLDAtMS40MWMtMC4zOS0wLjM5LTEuMDMtMC4zOS0xLjQxLDBsLTEuMDYsMS4wNmMtMC4zOSwwLjM5LTAuMzksMS4wMywwLDEuNDFzMS4wMywwLjM5LDEuNDEsMEw3LjA1LDE4LjM2eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAyNCAyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJsaW5lX3dlaWdodF8yNHB4Ij48Zz48cmVjdCBmaWxsPSJub25lIiBoZWlnaHQ9IjI0IiB3aWR0aD0iMjQiIHg9IjAiLz48L2c+PGc+PGc+PGc+PHBhdGggZD0iTTMsMTdoMTh2LTJIM1YxN3ogTTMsMjBoMTh2LTFIM1YyMHogTTMsMTNoMTh2LTNIM1YxM3ogTTMsNHY0aDE4VjRIM3oiLz48L2c+PC9nPjwvZz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJtb3JlX3ZlcnRfMjRweCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0xMiA4YzEuMSAwIDItLjkgMi0ycy0uOS0yLTItMi0yIC45LTIgMiAuOSAyIDIgMnptMCAyYy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnptMCA2Yy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJub3RpZmljYXRpb25zX25vbmVfMjRweCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0xMiAyMmMxLjEgMCAyLS45IDItMmgtNGMwIDEuMS45IDIgMiAyem02LTZ2LTVjMC0zLjA3LTEuNjMtNS42NC00LjUtNi4zMlY0YzAtLjgzLS42Ny0xLjUtMS41LTEuNXMtMS41LjY3LTEuNSAxLjV2LjY4QzcuNjQgNS4zNiA2IDcuOTIgNiAxMXY1bC0yIDJ2MWgxNnYtMWwtMi0yem0tMiAxSDh2LTZjMC0yLjQ4IDEuNTEtNC41IDQtNC41czQgMi4wMiA0IDQuNXY2eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9InBhbGV0dGVfMjRweCI+PHBhdGggZD0iTTEyIDNjLTQuOTcgMC05IDQuMDMtOSA5czQuMDMgOSA5IDljLjgzIDAgMS41LS42NyAxLjUtMS41IDAtLjM5LS4xNS0uNzQtLjM5LTEuMDEtLjIzLS4yNi0uMzgtLjYxLS4zOC0uOTkgMC0uODMuNjctMS41IDEuNS0xLjVIMTZjMi43NiAwIDUtMi4yNCA1LTUgMC00LjQyLTQuMDMtOC05LTh6bS01LjUgOWMtLjgzIDAtMS41LS42Ny0xLjUtMS41UzUuNjcgOSA2LjUgOSA4IDkuNjcgOCAxMC41IDcuMzMgMTIgNi41IDEyem0zLTRDOC42NyA4IDggNy4zMyA4IDYuNVM4LjY3IDUgOS41IDVzMS41LjY3IDEuNSAxLjVTMTAuMzMgOCA5LjUgOHptNSAwYy0uODMgMC0xLjUtLjY3LTEuNS0xLjVTMTMuNjcgNSAxNC41IDVzMS41LjY3IDEuNSAxLjVTMTUuMzMgOCAxNC41IDh6bTMgNGMtLjgzIDAtMS41LS42Ny0xLjUtMS41UzE2LjY3IDkgMTcuNSA5czEuNS42NyAxLjUgMS41LS42NyAxLjUtMS41IDEuNXoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJyZWZyZXNoXzI0cHgiPjxwYXRoIGQ9Ik0xNy42NSA2LjM1QzE2LjIgNC45IDE0LjIxIDQgMTIgNGMtNC40MiAwLTcuOTkgMy41OC03Ljk5IDhzMy41NyA4IDcuOTkgOGMzLjczIDAgNi44NC0yLjU1IDcuNzMtNmgtMi4wOGMtLjgyIDIuMzMtMy4wNCA0LTUuNjUgNC0zLjMxIDAtNi0yLjY5LTYtNnMyLjY5LTYgNi02YzEuNjYgMCAzLjE0LjY5IDQuMjIgMS43OEwxMyAxMWg3VjRsLTIuMzUgMi4zNXoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJzZWFyY2hfMjRweCI+PHBhdGggZD0iTTE1LjUgMTRoLS43OWwtLjI4LS4yN0MxNS40MSAxMi41OSAxNiAxMS4xMSAxNiA5LjUgMTYgNS45MSAxMy4wOSAzIDkuNSAzUzMgNS45MSAzIDkuNSA1LjkxIDE2IDkuNSAxNmMxLjYxIDAgMy4wOS0uNTkgNC4yMy0xLjU3bC4yNy4yOHYuNzlsNSA0Ljk5TDIwLjQ5IDE5bC00Ljk5LTV6bS02IDBDNy4wMSAxNCA1IDExLjk5IDUgOS41UzcuMDEgNSA5LjUgNSAxNCA3LjAxIDE0IDkuNSAxMS45OSAxNCA5LjUgMTR6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0ic2V0dGluZ3NfMjRweCI+PHBhdGggZD0iTTE5LjQzIDEyLjk4Yy4wNC0uMzIuMDctLjY0LjA3LS45OHMtLjAzLS42Ni0uMDctLjk4bDIuMTEtMS42NWMuMTktLjE1LjI0LS40Mi4xMi0uNjRsLTItMy40NmMtLjEyLS4yMi0uMzktLjMtLjYxLS4yMmwtMi40OSAxYy0uNTItLjQtMS4wOC0uNzMtMS42OS0uOThsLS4zOC0yLjY1QzE0LjQ2IDIuMTggMTQuMjUgMiAxNCAyaC00Yy0uMjUgMC0uNDYuMTgtLjQ5LjQybC0uMzggMi42NWMtLjYxLjI1LTEuMTcuNTktMS42OS45OGwtMi40OS0xYy0uMjMtLjA5LS40OSAwLS42MS4yMmwtMiAzLjQ2Yy0uMTMuMjItLjA3LjQ5LjEyLjY0bDIuMTEgMS42NWMtLjA0LjMyLS4wNy42NS0uMDcuOThzLjAzLjY2LjA3Ljk4bC0yLjExIDEuNjVjLS4xOS4xNS0uMjQuNDItLjEyLjY0bDIgMy40NmMuMTIuMjIuMzkuMy42MS4yMmwyLjQ5LTFjLjUyLjQgMS4wOC43MyAxLjY5Ljk4bC4zOCAyLjY1Yy4wMy4yNC4yNC40Mi40OS40Mmg0Yy4yNSAwIC40Ni0uMTguNDktLjQybC4zOC0yLjY1Yy42MS0uMjUgMS4xNy0uNTkgMS42OS0uOThsMi40OSAxYy4yMy4wOS40OSAwIC42MS0uMjJsMi0zLjQ2Yy4xMi0uMjIuMDctLjQ5LS4xMi0uNjRsLTIuMTEtMS42NXpNMTIgMTUuNWMtMS45MyAwLTMuNS0xLjU3LTMuNS0zLjVzMS41Ny0zLjUgMy41LTMuNSAzLjUgMS41NyAzLjUgMy41LTEuNTcgMy41LTMuNSAzLjV6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0ic2V0dGluZ3NfYmFja3VwX3Jlc3RvcmVfMjRweCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0xNCAxMmMwLTEuMS0uOS0yLTItMnMtMiAuOS0yIDIgLjkgMiAyIDIgMi0uOSAyLTJ6bS0yLTljLTQuOTcgMC05IDQuMDMtOSA5SDBsNCA0IDQtNEg1YzAtMy44NyAzLjEzLTcgNy03czcgMy4xMyA3IDctMy4xMyA3LTcgN2MtMS41MSAwLTIuOTEtLjQ5LTQuMDYtMS4zbC0xLjQyIDEuNDRDOC4wNCAyMC4zIDkuOTQgMjEgMTIgMjFjNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0ic2V0dGluZ3Nfb3ZlcnNjYW5fMjRweCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0xMi4wMSA1LjVMMTAgOGg0bC0xLjk5LTIuNXpNMTggMTB2NGwyLjUtMS45OUwxOCAxMHpNNiAxMGwtMi41IDIuMDFMNiAxNHYtNHptOCA2aC00bDIuMDEgMi41TDE0IDE2em03LTEzSDNjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxNi4wMUgzVjQuOTloMTh2MTQuMDJ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0idmlzaWJpbGl0eV9vZmZfMjRweCI+PHBhdGggZD0iTTEyIDdjMi43NiAwIDUgMi4yNCA1IDUgMCAuNjUtLjEzIDEuMjYtLjM2IDEuODNsMi45MiAyLjkyYzEuNTEtMS4yNiAyLjctMi44OSAzLjQzLTQuNzUtMS43My00LjM5LTYtNy41LTExLTcuNS0xLjQgMC0yLjc0LjI1LTMuOTguN2wyLjE2IDIuMTZDMTAuNzQgNy4xMyAxMS4zNSA3IDEyIDd6TTIgNC4yN2wyLjI4IDIuMjguNDYuNDZDMy4wOCA4LjMgMS43OCAxMC4wMiAxIDEyYzEuNzMgNC4zOSA2IDcuNSAxMSA3LjUgMS41NSAwIDMuMDMtLjMgNC4zOC0uODRsLjQyLjQyTDE5LjczIDIyIDIxIDIwLjczIDMuMjcgMyAyIDQuMjd6TTcuNTMgOS44bDEuNTUgMS41NWMtLjA1LjIxLS4wOC40My0uMDguNjUgMCAxLjY2IDEuMzQgMyAzIDMgLjIyIDAgLjQ0LS4wMy42NS0uMDhsMS41NSAxLjU1Yy0uNjcuMzMtMS40MS41My0yLjIuNTMtMi43NiAwLTUtMi4yNC01LTUgMC0uNzkuMi0xLjUzLjUzLTIuMnptNC4zMS0uNzhsMy4xNSAzLjE1LjAyLS4xNmMwLTEuNjYtMS4zNC0zLTMtM2wtLjE3LjAxeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9Indhcm5pbmdfMjRweCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0xIDIxaDIyTDEyIDIgMSAyMXptMTItM2gtMnYtMmgydjJ6bTAtNGgtMnYtNGgydjR6Ii8+PC9zdmc+PC9kZWZzPjwvc3ZnPgo=", + "ok": true, + "headers": [ + [ + "content-type", + "image/svg+xml; charset=utf-8" + ] + ], + "status": 200, + "status_text": "" + }, + "https://localhost:6007/data/environment": { + "data": "eyJ2ZXJzaW9uIjogIjIuNi4wIiwgImRhdGFfbG9jYXRpb24iOiAiLi9teV9tbmlzdF9sb2dzIiwgIndpbmRvd190aXRsZSI6ICIiLCAiZXhwZXJpbWVudF9uYW1lIjogIiIsICJleHBlcmltZW50X2Rlc2NyaXB0aW9uIjogIiIsICJjcmVhdGlvbl90aW1lIjogMC4wLCAiZGVidWciOiB7ImRhdGFfcHJvdmlkZXIiOiAiR3JwY0RhdGFQcm92aWRlcihhZGRyPSdsb2NhbGhvc3Q6NDM0ODcnKSIsICJmbGFncyI6IHsibG9nZGlyIjogIi4vbXlfbW5pc3RfbG9ncyIsICJsb2dkaXJfc3BlYyI6ICIiLCAiaG9zdCI6IG51bGwsICJiaW5kX2FsbCI6IGZhbHNlLCAicG9ydCI6IDYwMDcsICJyZXVzZV9wb3J0IjogZmFsc2UsICJsb2FkX2Zhc3QiOiAiYXV0byIsICJleHRyYV9kYXRhX3NlcnZlcl9mbGFncyI6ICIiLCAiZ3JwY19jcmVkc190eXBlIjogImxvY2FsIiwgImdycGNfZGF0YV9wcm92aWRlciI6ICIiLCAicHVyZ2Vfb3JwaGFuZWRfZGF0YSI6IHRydWUsICJkYiI6ICIiLCAiZGJfaW1wb3J0IjogZmFsc2UsICJpbnNwZWN0IjogZmFsc2UsICJ2ZXJzaW9uX3RiIjogZmFsc2UsICJ0YWciOiAiIiwgImV2ZW50X2ZpbGUiOiAiIiwgInBhdGhfcHJlZml4IjogIiIsICJ3aW5kb3dfdGl0bGUiOiAiIiwgIm1heF9yZWxvYWRfdGhyZWFkcyI6IDEsICJyZWxvYWRfaW50ZXJ2YWwiOiA1LjAsICJyZWxvYWRfdGFzayI6ICJhdXRvIiwgInJlbG9hZF9tdWx0aWZpbGUiOiBudWxsLCAicmVsb2FkX211bHRpZmlsZV9pbmFjdGl2ZV9zZWNzIjogODY0MDAsICJnZW5lcmljX2RhdGEiOiAiYXV0byIsICJzYW1wbGVzX3Blcl9wbHVnaW4iOiB7fSwgImN1c3RvbV9wcmVkaWN0X2ZuIjogIiIsICJ3aXRfZGF0YV9kaXIiOiAiIiwgIl9fdGVuc29yYm9hcmRfc3ViY29tbWFuZCI6ICJzZXJ2ZSJ9fX0=", + "ok": true, + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "status": 200, + "status_text": "" + }, + "https://localhost:6007/data/plugins_listing": { + "data": "eyJzY2FsYXJzIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IHRydWUsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJzY2FsYXJzIiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIkNVU1RPTV9FTEVNRU5UIiwgImVsZW1lbnRfbmFtZSI6ICJ0Zi1zY2FsYXItZGFzaGJvYXJkIn19LCAiY3VzdG9tX3NjYWxhcnMiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJDdXN0b20gU2NhbGFycyIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJDVVNUT01fRUxFTUVOVCIsICJlbGVtZW50X25hbWUiOiAidGYtY3VzdG9tLXNjYWxhci1kYXNoYm9hcmQifX0sICJpbWFnZXMiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJpbWFnZXMiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLWltYWdlLWRhc2hib2FyZCJ9fSwgImF1ZGlvIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IGZhbHNlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAiYXVkaW8iLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLWF1ZGlvLWRhc2hib2FyZCJ9fSwgImRlYnVnZ2VyLXYyIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IGZhbHNlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAiRGVidWdnZXIgVjIiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiTkdfQ09NUE9ORU5UIn19LCAiZ3JhcGhzIjogeyJkaXNhYmxlX3JlbG9hZCI6IHRydWUsICJlbmFibGVkIjogdHJ1ZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogImdyYXBocyIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJDVVNUT01fRUxFTUVOVCIsICJlbGVtZW50X25hbWUiOiAidGYtZ3JhcGgtZGFzaGJvYXJkIn19LCAiZGlzdHJpYnV0aW9ucyI6IHsiZGlzYWJsZV9yZWxvYWQiOiBmYWxzZSwgImVuYWJsZWQiOiBmYWxzZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogImRpc3RyaWJ1dGlvbnMiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLWRpc3RyaWJ1dGlvbi1kYXNoYm9hcmQifX0sICJoaXN0b2dyYW1zIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IGZhbHNlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAiaGlzdG9ncmFtcyIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJDVVNUT01fRUxFTUVOVCIsICJlbGVtZW50X25hbWUiOiAidGYtaGlzdG9ncmFtLWRhc2hib2FyZCJ9fSwgInRleHQiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJ0ZXh0IiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIkNVU1RPTV9FTEVNRU5UIiwgImVsZW1lbnRfbmFtZSI6ICJ0Zi10ZXh0LWRhc2hib2FyZCJ9fSwgInByX2N1cnZlcyI6IHsiZGlzYWJsZV9yZWxvYWQiOiBmYWxzZSwgImVuYWJsZWQiOiBmYWxzZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogIlBSIEN1cnZlcyIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJDVVNUT01fRUxFTUVOVCIsICJlbGVtZW50X25hbWUiOiAidGYtcHItY3VydmUtZGFzaGJvYXJkIn19LCAicHJvZmlsZV9yZWRpcmVjdCI6IHsiZGlzYWJsZV9yZWxvYWQiOiBmYWxzZSwgImVuYWJsZWQiOiBmYWxzZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogIlByb2ZpbGUiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLXByb2ZpbGUtcmVkaXJlY3QtZGFzaGJvYXJkIn19LCAiaHBhcmFtcyI6IHsiZGlzYWJsZV9yZWxvYWQiOiBmYWxzZSwgImVuYWJsZWQiOiBmYWxzZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogImhwYXJhbXMiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLWhwYXJhbXMtZGFzaGJvYXJkIn19LCAibWVzaCI6IHsiZGlzYWJsZV9yZWxvYWQiOiBmYWxzZSwgImVuYWJsZWQiOiBmYWxzZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogIm1lc2giLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogIm1lc2gtZGFzaGJvYXJkIn19LCAidGltZXNlcmllcyI6IHsiZGlzYWJsZV9yZWxvYWQiOiBmYWxzZSwgImVuYWJsZWQiOiB0cnVlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAiVGltZSBTZXJpZXMiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiTkdfQ09NUE9ORU5UIn19LCAicHJvamVjdG9yIjogeyJkaXNhYmxlX3JlbG9hZCI6IHRydWUsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJwcm9qZWN0b3IiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiSUZSQU1FIiwgIm1vZHVsZV9wYXRoIjogIi9kYXRhL3BsdWdpbi9wcm9qZWN0b3IvaW5kZXguanMifX0sICJ3aGF0aWYiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJXaGF0LUlmIFRvb2wiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiSUZSQU1FIiwgIm1vZHVsZV9wYXRoIjogIi9kYXRhL3BsdWdpbi93aGF0aWYvaW5kZXguanMifX19", + "ok": true, + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "status": 200, + "status_text": "" + }, + "https://localhost:6007/data/runs": { + "data": "WyJydW5fMDAxL3RyYWluIiwgInJ1bl8wMDEvdmFsaWRhdGlvbiJd", + "ok": true, + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "status": 200, + "status_text": "" + }, + "https://localhost:6007/font-roboto/RxZJdnzeo3R5zSexge8UUZBw1xU1rKptJj_0jans920.woff2": { + "data": "d09GMgABAAAAACokAA4AAAAAUkQAACnNAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGmQbmXocg0oGYACGTBEMCu1A1wwLg14AATYCJAOHNgQgBYMAByAbO0QF3Bhn2DiAgX12b1EEGwcBhTGLomxQFmT/lwnmGE77wayn0NBAJAPXITeLlQAVKYYKjM1mpr7CgS0HNgpkY1bqRLvLsXy3dA8XPXqvM/yN+w2v2FOlAb85QmOf5P7Az633/wJaSkUwMImTqgk4GDAic6S4MSrGqFakDCocigoYRBqEHnCIYBIGGExRT1Qeqv3690x3z90AwCasSP6ngswqFUVYHrB8VBQAKcYder52r1wzByMHJRZ//0+nNV9g+H/GsveOK0AqSpwZGZI47CReYMFvJOfQ2hTNUVES1lvdXXeyFKh29/XX4ACRY/9vTgMuqbMdO2B5UFAD4VG4vRkzpRE/HAS4Jss5uTZKgIn5b///mp923r+ZD/x22f0pcYRbsj0ne84XpsZN7mQyee9lwgszWcwvZJLFD4WkECjkFyHriuAA87NMWVUCV9VTC6S6tsdX+ApZK4nU+gqn6ipcefja71ffCTv/vpktBbH4Q8OmUzIhiS6SSKLxDYn4I3iKlCraxSKRmLCxMhnQLaUZLPeL70z9PLvdGe4aJpgghNJhdNDfIYfbP4Zrr4IRvQYW1AHHsRm/MoBA8QMAALCA4nacDoQBD4hYsRCpUiHSpUMwMSGyZUPkyoe4rB6qxyYEAgXAC0AAAgCBiIUA4KZAB3a3PfY7jNipySXnETvz4unnEjtv7bILiMECgG+hS5x7+iUX4AR8gRVUUNx1liijpQ3akVwcN9akGiFf5sfC53+NGKbR5WqKVWK9kAti+AS1eOOOyCvDaIwf8afMcFGbPJk65ZRuuRKVi5n34MXC5+eY8DF3ego/YaXaA/kGJCdNqR9aLDwevIQdJ0mKNBnyFChToUqNBoJTtOk4zZgJM5as2bDlwIkLV+48lSpzznk9evW57Y677uk3YNCQYfc98NAjk55Y9MySZa+9sWLVmnUbNiE0xggsAhGnnKBtjyf2QAgPTgoEFh8Jtbt2fBCTGwppEGEglZ5H9iEjajJmypb9zQ7WcvY+F29zpybfh8pFRalEVy+iPrfdcde9rn89b9acef9Z6HrqQ4ueWbLsjRWr1qx3vfW+d9770LXhbZuHCFeD868+CuUUv9RhOBpeRLDSKRtpW+4JClYxVTYdM1P8F5yw4yEH/bl6XJhQCcKlImFqL9vlsPiIpJtgDl7nnTDswuvDCv+DO1fDk/MxTTZl2ozHg0XCE4hnXuaoUGRvMwJjpuxnZEv+3pQmUBk753x56pZFeGbJ8s2IMhXxINvIiBgzZS/fU4ueWbJ8N5ZJIjmllGuC4g0HW6/PDdHeZGVFrFqzPhRHACMh5SpUzmRow4YNGzamMFQ4soqMGDNtbEWyl05HornGI/8uT9miZ5Ysd70RacWqNeumCoS86xhHXc3Jp1y9CINvDOn62prjoEx81Jz3IVIDWX7co1E3yT++FWYmuuNgIacdlV09TGcJJhPrX4ppsGwDXfCvkmLgAFmk6LCYxAftHyxYL1O0P9FCx9PR3lipv92N96FztJm7THzvXYCZF1CGmPHV7zjxlE+yUMyjYlkzeXrN1+XDXy7mZ4SaH3nFQ7Ww4uDmIe7T/PFaC3qFyJcS82v/iTr6GwvR3ze+XD27dfVbnYZQeRFxzohzSVz399nlr3kVWPXOwUJ5dHBrvN8bC/o9RRmDNlxKMCFjXvucAiWWoH0uC9Id0GRlZgrJ2SxOo/NX1BHQbaQBUf96uxZTd36ybZDQD2eu0GhiDfZmfDlc0VzFOlV8wKy9uuc9zoT+etNtsqFheWuKpVn11wnNyFUttlZgbJzVYnwrmDBpqX3O62J0xc3aVeaABaXbnkaGt5Tna0TncyyvCyiVfDTfNg2Tskx1qffMM0NtN69smvOiem3QnIGRMuk1rbqfMN9WYlYX54kVN9Zr843PpJvb6ivMNl+RmEB/BdWcgMMDITBSlFAjGMdJwzpJBRcNOoQYINvHmOh+Zu4HWLNzkAM9wsX9KDcejslxl1SqgpTK+nJ6LJP32jr7AVDWFUr1sbAX9oI4EVeZok7QfSSpICmKkKY4cpSbPOWhQPdQpggVKkKD8tGk3AhUzCkqSosK0Ka8dOguBhTPkHIg8915deAkWMcGli0ohh3l4ECFuVAublSIO+XiQfnlCI7BobVXOYT4INHaqwJUXCUV1+OO6HUPqn/XBA0YhnPfJMSUx7g9IXde/1qA99R9t0XLOL0eivXGOox6LVwgCIKWCEHQPYSoiOMCDwv1DyhKju6lTFGqFKXO+RXrwA1csBuEYRfwgABq5RhDmLJAVAIMYC0Me1CEI+XlzHGKeeAEnBafdFBUHkXlD0UUK7FHQxAEERAEEUvELYg9ALxA1QMUuICHcCSXIboBRsXRb32AMzlHPf3L87pFpik149XgSKLrYiABJiQbu7XX0EZ3qpa5pRm10HWgNpbmvXY2psKEBVBRiYumxxD0yfF+4RFhcOKf8uTBydDgQG9QA2iNNAqnhUWBFCuRLAAGylcAEIhW6rsQekPBdeKnxE2kSncIhFMQTwLtqlUHw4S5y9CmoHva/VBPrVxRoSAQJgJKgoic9kRheIYBERIBcwcACx1JTRqgQScM5u6itHBr0qhBsxat2rTrgDEjYrt2VZyzqFi6XHNdtxtQ2CIOaKHU/e2ri+Ee7MoA2fSUxbwhIBp/6EsBkrpI3jbygQfuiQiOrDHBHxAwqwyQgDwGALBLnUWCBAxYjpb9+Roy/wk3QM6CbfsB0CABSxQAnySXXv93+42ZtuaTv23HZhtjsRhL87XmG8w3mW8+33q+NN/tvsvue+KI0PgLi4TLN3UaMG7Gus+UbHrWnK8332j4spfb2B4r9owh3GMQ/P1r9sv3jkH4J/6/8X/35zeIF4eOyoczmc/Yz+9yx8tGBoAK8xg3HB/3Xk/VY2LM+/9p0k2ZNuOxJxgy/GvWnHn/WcCUORZ+dZZsb73z3gcbcmziBQDI4H0igCRkjW8HQ0ISbLrkpsva+aYOt3TqF2HAqN40JtW4af1pRo/H5k34z4I0Ty2b8twLDC+t+jetYVr3ydP0WaYvtr323Q9ZfvrtbfojJ/2tNjOyY0BujRxSHRqQl9GXAgoy+mFAYUY/DiiqJdZsXwtAMZBYr30DAKVAYqNqk4BzWWLzgAtZYuuAylpiWbUUUJUldguoyRKXBdRmiScCLuYjazwIlyBQnNDxd6jn4zYgH2sRfLeGyBuBeX8dvQgt3Aq6mTwCBwO5ip6gBxjoGBZbM34NE52ChI4XgbqSgsMohHqFmIhSL8HR1+qELePMETQQxH8ATAWSCRJ80KkVSFyshn4rVqc4xO4K9/sBbZUfGmjTrPCOlAJr8aYOsysMEbR4GDZjo5nqxAmguf2d+5ll4+q6dZTUZq1hMoksN66UXJTBBGyt+DrbhMcLq9Bk+7CpxVTXjuuYlC46w3z6kfH9bpWmwC9ElhFLbSMmAlXH7IyhWaYUCy19n4kkfj+MNwH1CXMxzHzrLGoTEVEJIpwww/SO24xCz4blyGgkPPISNVwJHMS8s9eaLgV7MO1MMFVxzgWKDObEffRpbR65hHZghKBm46hPHQIbxBUaIedU2SrMOQQSCxSYE85BZDigzEa1QKgIKEMqmHOWKIr7/orgvAATAUj2mnDy/ahrDOXUW7VsRjmHFUELlLgbeqsOaSaMtOVts1bo7cfGG5ZmMnzyvz7a9D8A49yfhKY0fT2zRlfuOMrMoba1d2Hf2SfChT0yvB6uDam/YVYHeti3rIR00JWgXBrYWqccXULUgWBDLc56ozkbZOKZwbkbwr43STuwCuPa2d9GGGB7Fc7RbV2Y1ryEAPZ+fo+bAVMVWitQuWZzibW7iEwCHXQ7lilW/mPjcU90+t1SKzITRy0tdDnD32eBJegGqTt8gwv7C7U0By0yLHifOEbuQI/HKbSqiN2A7cIrLxEuI4jzhl62d8SsW0WgmoflnBB4zekZkQIL7kLPmy8SnYVExDCJn/vsvX46iwidi74aH8QGlQbnqrSnHdb+O9sslbarcTLIeXWoS3vjlXrP/Atapqv5ib+Vp+qjuFwuDUd/fyHu9CVTIq+qFWJV1Ca09xxlk3lq/Sq37HDeHFvIRQz0Bit3uYQ2MH0kRGaKWNr6gj0uyh0nEF3uif0c7nh4lCgrKdH9hQwYPB6dSzZHuxICRr/dIPICn1SQxKhh5hC5lEbayfHCibqcyA3ZtYkTVgm64xjTZc9SxrTlX5q0if+LMeMTHtRHRueOGGKjMO15oLHaiPWlWmRl/IO10evXz7Uh09LcSPILgN4V8uqJuvCbsexNLzoP3QgU4zJftrAt4TZuhNhSaFJDq30QNy+xijFVzLR5y1ZKXp6namdX7u3I6Z6K8vco9tBP1UZPnALuwG2CMSEhWTElyCqRQIzcxyntYtKFHuO26n2pAIJzuhqKmVWMk0lxlhMvhrOMcQYnpoV7MSCclFSNxvg5F/MSasrgQr4o9P/8ce7LjPQpQTUxFy4xpt29wJlYCQSLskVnUbXUlJD+kq+gImoiUOysTerfknkgSGBDUDKkls/jNmRXBzLzuE4Pph76s3u6BjIpbNN2/uUtpLEO4NfUee3hd2ICHNJIbu7KwOJmXM0OKEjTZcEy+gJZO1A8QqI9juOkuT8zAuZZP3b47Ea8GRr/Yqom6GrAfgurEO3uc8eXUoGKktCRgBAsVnVIoJf9NmMuK5NrsY9ALjf2gU9eNkQ3qYUTAKnCxlt0ZamUlmPRKIzah/3WyZgfmmfwywWHYariaOMQdaAnLtycQZ5AEUKtcuPbwWIRiIXc0guTOqWrEHyCxSaVinmQAkGenh5YyHy4OjCmRFbrOukQ0opaxEEb9LTnu4pMNA5oajIR6FNAvzNYBLI5H1jCNkosMq20DStOahu6Tl25xsb5RqciLQK1kSpeRs15JKSgo+2DBNpTgyY1mugTZwLBQyFZ2LYikcEqfUfXzD5bqRfbmJc7cYYTstDGs2DiLeG4oBCqhtfubuK8OpzZGwftSZqHgjNcMqO0bGJkQTvYWwXWjfQkKZ/6Gt0O9Ma9RrPA7FkHm4ogchaY4T0BfhuQpl0SlqxIwD6dfNlAQepRTVGp5sm+1YGJbv55UKec+VpxVrICAWlg8rr/IVfIahPZWyD4cFFDlIMc+CTZ15JKxmYxJL5x33PQTi4/jNDXsEHs6OL1DQlR6YioBK1LayaotNggHdb6wZHpOYgdxN2h7EuKiQ2Cu82lamU02Q63JmZzS29vUgECR0IeX+G5RNlpnEnO7QNnchXLXsAOlQQHHeTBg7EsUtguvOiQEKbkgjf0n6GjHfqwIC4SWja8GiY+QtaysAIH+Xtc/S34rotjyJiIgZU5ikRm+iLHHqKCu1qwRWEv3fudKN0MuGkIb7vVjGeHHxCp9OWJ6ErT2plncvoXMmdytfNnJjFy1gw9xNMkd0saBFfI4o1358aFbq/Y7HG+0KmQY85AZYiQxA0RN7R7GoFWI0woIEO6jdfg5/lv1W9L8MdgGrzibDAjUzPbmi3IYPDcUi4SpawuXitn7HSA2yOtc0ts4mgYWjYsiSiVXBuGBQjXZXxxpS2Jq6yBdvXRk6hLpa/aV6B4YBjv08cEdkBW/TjBgnZNauhzxqZs3IZtaqmJYIwCdm2CuAwGScMv6WjknojNJSYEDVznSdIe4CUSKBCkndAmwd2jkRJS/wOiqKUozXfWEQvrk2GMFeh/k3cHmd+e5nwHpxKCSAEShab0a9gp/nOaf2S/o/xG9ll8TwiBm+JxaYSCbbEJObCxpFX4W0prjI5tAu+5849d5//w4G4tCb/Zm21f/T+Nbt3FsPz5tFFX9NlIbH+MUDEgQNPWNDZJoT5NdbIxox4IqtKPpOXydp7MulwVpi68NL3QjJdbr8VparAvCppfbCLx6mT+zMWP3/nLtb88S5po6i/tPz5fgrJign1I+C8ng+NvE7413p9rF168tNQhevfryFZSZJG3V0igtyMl6O9ysaVvgGqGS8vU4x6h4YtDo7tnP42xk5KyqVHRYYBXqWC0NOfkNTdnG6U3N+VkdtbnteAMzOxO65jaGRsbmNknmTiQDx9VYHY0ZGa1N+ST0xqbRVsbs1uw+hYOOkQjG1NTQ3NbbR0zW5Pf7ATySWpUAhnss/zDmi+ftaPolRu2TY+xLj7oy3F1rQgy9SGLmmrRS//lS2yb2xGz9qqistCVV0fiKdba0at0F5p/aiJS2moXkBRu+nbeQdPeSo9s6wkCN9L3MS9ieyHZcj2+9pNhhq58fh6l8yaHGNjLty5eiJdnZuh+NoqrBqvTz2Orv9swifLM8rOdS0p795yfyM/+IJ+ZrP3pVDKTYxpEhh8pOKo1y1L5Ha/zu0tFqbapOo5zFQVfP9S1p9gfZN4cTnie0LXRlfQ8qXwDaslp5pouMkwwuPsMOiE4aBZsOflG+ED4727GZgRNYxN9XVNjqrEZDCT0H52X7Qe9I/6E9zqfNz6qoQo7hPeaXz69V0QVtoQnI+7F0SO60X6TR2fG42gRPegI/N26X+yk+swhIP7btCIQRHWqtgyiJvtGpxYmsjNiZl/SSme/zt4Ji/uYe943oR5EfcllEZB2JjQoNCrSJzHSlR0ZfWs2gLH4Y3HYJ6Hd5x+6VMLVuBHe9WdPeF70sb1S6GFnUulRZzPjmYVAUOK4MXxDn61Pw5dKkhZ+SWJaEr0OQcdji2X+J/qSrn6ayTNrXK+e/51eTOBfc/d+4AuOj/SLTLiYk5FdGavnesQG1Hbfun/wIcp+umecGndz8Pmu/55jhWYX+XVxtsnULo8PN60YzgdNTK5k3ltIvMyZ3AAkf+lj/tJ/txSbX4a/APGYQkhYo4f8GZW4W9QBzMuFp9hX/bT43ghFd/nQxpC+T08fTX56yqdsHZrCmE1KDwtJSF6Kiz+44xkW1xdC9fcLpfWF0kDxtXdsSt3AG95nRWffzaXmLyFkYf0c3xov9MD9o/Po6sQzfuNk2yPGnpfTh58ktDOyE5tANdr8BVvFmjaoYk1lgw6b1+OBR5THfQ94Fx/8+pMaQh1UQ6ifwL0tQ7dm6M75BLKHm4+LQ5CXLRthbUwO33/58Fbd+Zq4GF0TpJCtdsrY6DQxgiXDv0ihT/A8P5cl7t3QuqBkyjQ1KTn3SXBi15Uk3FBBuF2KtIOuspLQaEZA2iKuQyBSJ5M4IjfcFcW5wfM5x+3gjWm7m5JfjmeNTykE/wmZd3no/oT7OI/gcnfKl+2fAYtdlacfU3kzjfOs1Tw9Dtic3BCSj8idAS1FWxWaDccRf9abIzQWp+/BxieuUAY4Fvs7MjriF3Ix8B/aoRRWwiT+2bfdReP76Bm04DfrWNneH9EMik9onGfaNlh0Le5++w/2ZydnfaE8OpE1Vawp0HL9y3Hc3o87gtUlOQUNrM/I29SN5u915eUZwlWyP5KdgzJtdaceGU/Xayq0jHL7rYg1jM/+QN5ab07+HAGdqByHgdsPegDH6nrUXeIA2teCTYJ/A45V8+hSlwlYwl2LgL3B127ta6hQQSejTE5FibMPfNr/6oc0nqOV9RXdiNwYw3YNWTseODkgBdYpsPNZbubQi/z2yPXYgYs7lzpH5DLsHv9+jP02v/J9dXKHGkUNC4hh0kGVWt851nI32nLbW34r7WccHf7nJBTdL39QUjEWHBhliem7iam4kUWM/VI0VWzF54bYrLdoykuh+WAdCb8fK+PiuvyukOrm4/sF1q+vzZfqCbVf7xJpP3caZmzmzhkItfsJtZYTYXYHu3UTaa7vAeS93ec+XGNz99/tivYf+A04luzXg78fz4tu/j75QCEzPykmujAvEVEH65Jr02lyNKefQ3Wlql8fGbLOE13d/MS/sdu3fjfXnfSd/UYPV1NLqlVBTPHgBw12eq/mS/JGElUMPfh2af/CphSmRNIYyekID2g8pnsxAz2DA4ljCfdZB9+sVmxGZE4l7UQVpGQkZAV7WpVSbP0mUzwbI2/umf9Uy0ktmcz+nVCXeYHBoIApdmVs5dfK0KN0MJ1jTb6V4v/+/3HuzUc7UyWlF4qOqYxBmdbeY2f3SIyyvkk0sHaD1eUgfqzRr9041pagnaRgtyT7OrL5i/+YoaCf4SxIlV5R5Dt26/HgsqTGbs3dJ4aWex4fg/DfFl2iB9MrRP+IHiyt2Aep97kfaNXLixA3Hh26BIdHZxoA79hwtwI4nlQAYsD6fAIv+xngqaASOJ5U3m0CvGMTiNs1dj2akplvk56fBM2U/vL+cpAoe/yAT243YP7wGJyNaa6b7M3ugJ5P5WQ7dz8v22AbItuZVvnAMfHeq3to+9sSKQdBtNMoyeD/R+mZme4Ohm42QDoitPNSevRecBYPdQnwwH4mKP7a2KvjnFt4VvzV6NrT2feIeRej4luQNtDocKUHY8xXMX60zvv+tDdcxzH7vnNIrQxuvcTdXMW4RdPdopNboUOSldQOFsf+X5cbbg+my7ABD0s8EaHpN++9V9z60pDUQyvXZ0zppZZHJ/eBk/D6wSNbB68k/HmVn7v8eR/qM8ydUV1FbwpipiUQvRYo3KSLfnG5AgnTQhyxZxLgCbOhu8G3e3y4m0gWxN2lq3Ze91rqXmKC9bGdjZMjvcEp3KHP9s1xfntFf+1DsIwqjmDUx+amJRsHUa/e+yz75Vsdoy+61DBxST+uNIZxF/YMj0Rn33TB5gyz+yK93DxKyKk4NuCBLZLZBDYiqmG4XvkGaaiTjRiGRrC3nlDZWN95kTQz4KQQi6bXidRmn02HhHsPXftVUw8Zq2PFQ3ei90GytP9z2iNCwEeeYYw9tWygNcxf7xxFBsbZA4HOnkG2QU4iZFhlT2Dv3SvRihZgE2D3CgGfQC8atsGlPWTfDXTy8S8lM1A2ASxOXEz88yar7JnAPu63nJfifq1kn1sVUvizxdmUfWc7q7+3Pq8/lp57B0io0K83MgPXKFSEDbjFl1xhlNSesZcn8F9wV1LuxpQT417qJp6jpvWBxfE/69JjN4KT+CgLgFtk7wRHtA69k9v61ph2h1pkELdhQCugMnrhH2W378pNmskrbMJbXIxjXrXKAVg8rkshfVe2kbzh2JT34fbNoY/9F9iGgW4OVn7GOhru2gd0rjhYxDqWfOkeyZj2PNvkvYG1p7v5evkagdicLkd/d7+bDv60TMsdmz3moqr+17qvcYDCAIWSOMrqnhy+y+6bauvSTuJiE1bh54v8tvhfe6mEf/fWE3aApGjZ9n5TiEqYWF97szYhxCBsdr5efn0LACd9+U1E7I/x/ndm/gy//TFjEV7YHj1bxoitPPcR2FT9cueJm5uemMURt70jqnhIHiQOhV88Ni8+YlkJXoFePnjPuVeD1wZfz6LXu5evKsrntqvjfi68andpd30zh/vZrg52fE2Av9cEYotXNTB/ZtZv2N+wfz+N+XNVQz73hlLXSu/Eq6FrQ69Gb19b6VYC82Eh1t3nBSYJ6hey9CROkMwC7QbbbiyWmTAIRel6hyVJthF20FL+GGGgiABNXYNsoqtHNtFQJ5vo6ZJNwKLDmR6Is1zBZI48KhZ/P/H+5uGHB5f2zz08dPPwq4mXNeI9/2GqVvCeNKrr2i51ILOS2mHH4K9mnrbrgfv7HtgEyYS74nsuj1dxfHnw89259ac93zyDgjycA1KDOL+ojwNpJqQ26eGDmsSU9LxCZpZv1ehEaH1hSV5hflFl1MBQJbWoNL+o9Byl9sGgd1VOXn6RRlp8TNjkXerSXVro5MfQh3eoz+9SQx/CEWFLnBef3f33FfI58uflZXdkVc6r5KhU/HC4LwiZfOKr4hOr26tgNDje0+rE9O3t4Bt9v31oYfoLhFfRs2LzPCzNM1z61G4r3Q1zuxDW0+xMVCRl+rUKPVz7zPPyEZtSlBwTn+NhY0d3SAscjHSuUAqzEjEVD5FMsPaxL5O7pvIiSo5mnekFuDkHJT1SNInkRyJF65EmFD78Ow0Gr+0qOi8T78x2n+m8N1tb115fXu3lauPkFpAZTYsOzHB1drbyaWA0lu8XbK27KFBXdciu8pBAI1Go5fwha4GmB33OJmMpxmN9zmV9zuSJoUGj8dvO4DkgQDKzTohOiwsOb4rpCFBOpuoaKSm08wV1pmRlXyhiaHnvs/JMlbI92pxNMQX7U4pOoHU4egIb30YCh4WrNVsLPJzAEY9FF+vzNvsutDETaXQd4n7l8Do86ZxA1eAlM10985qMQgM3bTVDQ4Ib5INKA+/V2qsgShuhXKhZOl8ZGlZZuVRdQ8lU1TdUVdE3pZBNg4zIID2c7jjuyFhg+I/7xy4IH/tlPWINXZV+ifuxkQEkGTsVgq6uWh+1uSKzsCr5bEiwv7dDbuRZEBgJs2Z4H7XTUSCeONrnWx+fVnglJpjOVCqTKqCwEgszW5PO9J3QV9E6PSbjnwFuIKwGu0XkhkFUn5CA5DmlUpoJMUJswgu8vSulNNZMbWgLcIvA4LRa4/w9P8f1Z+0w4FiQf59gbM40MSecMjcm6poagzbaUC5WEtxGq8Jn6RnKycgaHrHEHsoBpLKXMCFfEh4tDBxU70v3htT6BxuNLt4eqqm9O1zXifVxC7OycAkBLytvtzBLC7fQAKCVIfEqRUYWAcHOXhQPbzdnp2Df1e/efpwemno10dNQecXVzZzMFSWyraZhaMKISRWvjAnQIiGN33b7lu0RFVXWy1GmwPljo/uF75+3VgyMFcsEs5BTumOytJzw4Do1jEgggs2RjdXr2V2fbuJS3lK0OTQUSJorJwl3Xhst8HMoaCrZqh4ArVMDptOGyYd8CQ52mRutevc4Gv85c7D0mLlq8Lbo96oojSX65avg5sS44Ef21kk24Fhbi2vbiUWpz3PTYxGI27KeX9mcuj3f16Ij5q0fuZsoeZJo21VqlWXattAzZtV6wklh6GHSMTVvZ3uSooFLR6ZVppVT4oS5tauXVQ9mGyy8RH7nXiKazdkyWeNXq2s32971k109Apxco5z0vgiV7PSMvghnpDHHkdlN9EP2Lc6c8zXMbIrmoFGDgfrMabWUHkIm4cHjkUCE7mGo62ahdG3dNyl7V9LIwTOhsaByfO9vzmKbxkT8SnFezqvExFdZ5ZFrkwmMkkgXhebE2IdM89C2M4nWl6VNhjYVWczrdPPQgjXkb6pukZTTVJ6U1xQekTXeAaQow6+zX7e79I1No4xN9EmzWqZNsXU3CYaR3KUETWNjGzamzLVRHA8bFhT7Tw9XEMtm2t35ALnkU3NqsnxLtfq0t4zXqma7V5yNZZpukk6XlOOz+oEUJfT9tdxQEf3iHJfY0sHRrNHXx/Fb2Ma03mh2iGlsAhuiZsC3UTi2ibOklBdpIbQXCXKXN8c3Crv9Mvg7PeEwcNtIYb9vIK/GGT7Xy51TcFttsGsGXE784Jd7+TODRbS96R4K85voRlYrd05RDc25QNpQ0aLGUOcRMeZ7bkdGx/YbvpPoF87WjN5YekbPQCPzbgwts1dHoM+eniUcc2NfRGQsqKh84BkuryqrGuTjFy6E3QEy7slxrQl0L+8EemtSnMC0vC5RTp54WkFOR89HRw9Uae/Ck4q9JFOCTrWJnTCSK+MITyr31LzkrHLCSR4EG8XizVwYaGHFXA54BswA91eIN3NOQ4tr53ICg2agXTrO3C4JLS1dzAA3/2lgaSeZ22Wh1fcX+yBE7YyC73dikrljPqb84eJNX/8l4EzHeMbE+AXSY3yOe0RHB/rGRCFucEp0u6DpUIbwoYwm2HW95UX9rtguhJbQ/1cOQu3KLj9cx5W2inAPCfGH9P0pcPwQB9Ke354yH1IH759/xH5TGAfFH/kf9j9/uY2zzjffL8UPdLbCchm/u208JBNICr4x6JplVXLYYt+xiWz5qAhfL2/9ue45ZqDncpXLT/vzmYz0uG4oObvzx+8NN+eHRuJI8oBbZa8+R1MFHn98IlP+bIbNpDKnhJbvVeKqEqcWh9wmuIa+YTTXfRvYon2xpqWopLaltqKmpqO46GJ7bR9PCy0Kre1poUdgLgDPY5z+j4KHpud5z7rbdQGcMaE/7lIX+7bmwDtJuXzjnJ1w6SI5PTcjLuZKRV5qezri04u1jqIlauiR9EhkOHr0yIXiLA9eb0P9EBozP47eVMEsbW2sUnzyaf15ebOs7tG1Y8XJqiQDNSp0tNm0jdgkdZ+LgXNEaqRaulYK5VJsQV5dTEhKulakGjW4kpaaVkkTP6S65UKUp/wdbp1rdRhxkJT32gVrqroaLknM7MSYljpG7uUG5Nyp/54tvADh0sIYa582i6MGRrpEFWWiuab6KRJcy7vdejvud/wYOrmrQ3UPZzdAdj4bsl16trMHJwj9C8BBaPxKa5K4nayl8ATWSLdXfZuqajai9urlaXVLWl1S43gaFezUNHGc2viWGFVqfMapNI6ZqJrQkGIdrVlpSR2gMlMI5Rq69DmzV4hdMrcHAWfs9BAoTZU2Z769bOXxZc3VFkp4xWibBOFYwgTorrQA9CHSRO6XW+RWuU1ulzugk+IJJrd2XG6lfjva1JwnrQ15Fhg+vshoU78zxce0UticGgUkldh2f/wL0iv1vW3a8KS1TM8CWeMproOsp/4470mj6lkw1MdTho+p9Irw0VTODQiyMjyVlWFRVoYll3JHw5maAiAoawJL1qzs8owCRFg7UwQYHKuvA6APmyGAR8X+5eSiA+FGlKvISqHXVEyywqAtG9PLQDYOESOUrdi5bKecB7mT9W/92UnbzKds/CivQ1ggaPNaTYebto+Dm7It2LtszSNuSJ/mqPEUqaYzG67KzmDhcq440LVTrjHdCbAH3C3KLoZujDGxdgHfzSH/3ziKTf8HIG18azVlTW7R07J2d0c5mZEt3MkFd2eAu7W3sVJe7p0CX/6/fltthFVFKkqjtj7zaoWWRHyaxBAL0BcngJzxrUs1ANWoinudxTTyo7X3vEkF7WDJOkHMB/f2PmpRAYPiGEZh1PFXRQ6uOCwmCQHcLjO1QlaXT8roV1cmYLFRH/qIMoDdb6ZdyDqrc40JgDyupesAej3axsPANaHW0d+K3v6VKQO4dWcnBYyNfnCmBlndj15UYmvdLQVZXYXCAbDvSi53l78mgAvp6tvmI7ycB8vFRn4rC7Z0d8UzgaupqRsZLwDkzv5TIUDPRtu4pZzR/x9ttS/uo2IB5q++zRLVtCeAC/F3TemP0Fvzeym4EC8U3sW+Oa/B+37nEQDoFmu8ZrzdTlxV63fOfcsBAMDIT4LbAYC5ZvPd/8f+n1vebbmzALigAAAQwHHeYgTAdW6gdaFbBSKcajPz+Ekgi2VtdCuFUcG/XvOq0KvaX/LtBzg0FzbxQEo8IZXZxItGvw3ZH5eQQ0tmykBTWTCTZmJNLIkKSSU0YkCCXm33OCStrZMrQacrTnHJSMkVWjMprt2WUOdV1jUFdIKyYhLzf/dFofSrNUJPXZ0h23k0yS4yQ7itdzJmqjhwsrzqj+7MMqlnKY2qS+yyhGbcFLoA6XqJo95gFYoY6USEG+HNc6lmNUzcTbHsuFSqhFJgWYx5103ZxjzZymZTZ8QGj8RAxo2ShcMjb9pOU86KrQLkSLnRmOFGDjONFpx1CXp+s6dvOVx4h3IVL7nbxFUagep8f8S7NVocxKxEfnWDR6/hXkQ87T9Z9YNLZnCf9Dlmsfx8zbHCJMebeqYquSWXCc/YpjXvmnpUiazbSnKTQegpCAFh2s9hSjah52vufYbz9A+ryVFgrtCbZYzt0mfeGYLrgbJalzUNMqomgVWMVFks67y0EFM46+Y3I3DNNWVxTUwuiOvSaiYFqW2Ab7tDuU1RShGhKY6YnJTioazeKCeihEYwu6wmG9tUK49HpautZqJ1h+zsKPQcWAqIKVEnqsSSmJtqnhheK9M0WhgtmepO47uVyu7QWpqtDIeIjQmvctt4GOq3VGnMpi5Rs9OaD+OCoIJ9ijAlxEZ3q8K2cSvUZp3SmC0KHW3jbeojAD4qtIcFXFQPgB+g0B3g59viFAADqeUBeIDyWIQYj2NR/GIqMalKLI7FOYHJ8JDbG+VnZwxJhEixogQLFIRKghIFiqMigSxCBQ3lf2Jj4XzJMV2HhIZtGOJsxPx3x1+U6Iz5JTk2Ivg0hJqUYJ7IBqMJo7HA0wrlnUoclChnBYvwhxO5lcrUnXqV0epC08uiW50qEoH8CHRHjrfInPkG3P3JiRAlkIUK83VE+Guys6hlxhiJAQu2q5B9cEhhYPBIf8/JTwAA", + "ok": true, + "headers": [ + [ + "content-type", + "font/woff2" + ] + ], + "status": 200, + "status_text": "" + }, + "https://localhost:6007/data/plugin/scalars/tags": { + "data": "eyJydW5fMDAxL3RyYWluIjogeyJlcG9jaF9hY2N1cmFjeSI6IHsiZGlzcGxheU5hbWUiOiAiIiwgImRlc2NyaXB0aW9uIjogIiJ9LCAiZXBvY2hfbG9zcyI6IHsiZGlzcGxheU5hbWUiOiAiIiwgImRlc2NyaXB0aW9uIjogIiJ9fSwgInJ1bl8wMDEvdmFsaWRhdGlvbiI6IHsiZXZhbHVhdGlvbl9hY2N1cmFjeV92c19pdGVyYXRpb25zIjogeyJkaXNwbGF5TmFtZSI6ICIiLCAiZGVzY3JpcHRpb24iOiAiIn0sICJlcG9jaF9hY2N1cmFjeSI6IHsiZGlzcGxheU5hbWUiOiAiIiwgImRlc2NyaXB0aW9uIjogIiJ9LCAiZXZhbHVhdGlvbl9sb3NzX3ZzX2l0ZXJhdGlvbnMiOiB7ImRpc3BsYXlOYW1lIjogIiIsICJkZXNjcmlwdGlvbiI6ICIifSwgImVwb2NoX2xvc3MiOiB7ImRpc3BsYXlOYW1lIjogIiIsICJkZXNjcmlwdGlvbiI6ICIifX19", + "ok": true, + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "status": 200, + "status_text": "" + }, + "https://localhost:6007/data/plugin/scalars/scalars?run=run_001%2Fvalidation&tag=epoch_accuracy": { + "data": "W1sxNjI5NjczOTY4LjM0MDg5MiwgMCwgMC45Njk2MDAwMjE4MzkxNDE4XSwgWzE2Mjk2NzM5NzEuODgwNzAyLCAxLCAwLjk3Mjk5OTk4OTk4NjQxOTddLCBbMTYyOTY3Mzk3NS4zMTA4ODgsIDIsIDAuOTc1Mzk5OTcxMDA4MzAwOF0sIFsxNjI5NjczOTc4Ljg1MTc4MSwgMywgMC45ODExOTk5Nzk3ODIxMDQ1XSwgWzE2Mjk2NzM5ODIuMzY1MTY0LCA0LCAwLjk4MDc5OTk3MzAxMTAxNjhdLCBbMTYyOTY3Mzk4NS44MTcyOCwgNSwgMC45ODI4MDAwMDY4NjY0NTUxXSwgWzE2Mjk2NzM5ODkuMjY2MzY4LCA2LCAwLjk4MTE5OTk3OTc4MjEwNDVdLCBbMTYyOTY3Mzk5Mi44MjYzMzksIDcsIDAuOTc2NDAwMDE3NzM4MzQyM10sIFsxNjI5NjczOTk2LjQyOTk0MywgOCwgMC45Nzk3OTk5ODU4ODU2MjAxXSwgWzE2Mjk2NzQwMDAuMDcyNjk5LCA5LCAwLjk4MjgwMDAwNjg2NjQ1NTFdLCBbMTYyOTY3NDAwMy41MzkyODEsIDEwLCAwLjk3OTc5OTk4NTg4NTYyMDFdLCBbMTYyOTY3NDAwNy4wNzMzMTQsIDExLCAwLjk3MjgwMDAxNjQwMzE5ODJdLCBbMTYyOTY3NDAxMC41MzI1NTksIDEyLCAwLjk4MTk5OTk5MzMyNDI3OThdLCBbMTYyOTY3NDAxMy45NTUzMSwgMTMsIDAuOTgzNjAwMDIwNDA4NjMwNF0sIFsxNjI5Njc0MDE3LjQ3NjU2OCwgMTQsIDAuOTg1ODAwMDI3ODQ3MjldLCBbMTYyOTY3NDAyMS4wMjQ2NDgsIDE1LCAwLjk4MTQwMDAxMjk2OTk3MDddLCBbMTYyOTY3NDAyNC41NTU5NjgsIDE2LCAwLjk4NjE5OTk3NTAxMzczMjldLCBbMTYyOTY3NDAyOC4xMTEzMjQsIDE3LCAwLjk4NTAwMDAxNDMwNTExNDddLCBbMTYyOTY3NDAzMS41NjkxMjgsIDE4LCAwLjk4NDIwMDAwMDc2MjkzOTVdLCBbMTYyOTY3NDAzNS4wOTYzNywgMTksIDAuOTg1NTk5OTk0NjU5NDIzOF0sIFsxNjI5Njc0MDM4LjU0MzYxNywgMjAsIDAuOTg2MTk5OTc1MDEzNzMyOV0sIFsxNjI5Njc0MDQyLjA5NjMsIDIxLCAwLjk4NzgwMDAwMjA5ODA4MzVdLCBbMTYyOTY3NDA0NS41Njg5MTcsIDIyLCAwLjk4NzYwMDAyODUxNDg2MjFdLCBbMTYyOTY3NDA0OS4wMjgwMTEsIDIzLCAwLjk4NzYwMDAyODUxNDg2MjFdLCBbMTYyOTY3NDA1Mi42MDQ1MjcsIDI0LCAwLjk4NzYwMDAyODUxNDg2MjFdLCBbMTYyOTY3NDA1Ni4xODIxNDUsIDI1LCAwLjk4NzM5OTk5NTMyNjk5NThdXQ==", + "ok": true, + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "status": 200, + "status_text": "" + }, + "https://localhost:6007/data/plugin/scalars/scalars?run=run_001%2Ftrain&tag=epoch_accuracy": { + "data": "W1sxNjI5NjczOTY4LjMzOTYyNiwgMCwgMC45MjY0MTgxODUyMzQwNjk4XSwgWzE2Mjk2NzM5NzEuODc5MzU1LCAxLCAwLjk3MDM0NTQzNzUyNjcwMjldLCBbMTYyOTY3Mzk3NS4zMDk2MzQsIDIsIDAuOTc4NTI3MjQ3OTA1NzMxMl0sIFsxNjI5NjczOTc4Ljg1MDQ4MiwgMywgMC45ODQ0MzYzOTI3ODQxMTg3XSwgWzE2Mjk2NzM5ODIuMzYzODQzLCA0LCAwLjk4ODk2MzY2MzU3ODAzMzRdLCBbMTYyOTY3Mzk4NS44MTYwMzUsIDUsIDAuOTg5ODE4MTU1NzY1NTMzNF0sIFsxNjI5NjczOTg5LjI2NTE2NiwgNiwgMC45OTE5OTk5ODM3ODc1MzY2XSwgWzE2Mjk2NzM5OTIuODI0ODU5LCA3LCAwLjk5MzQ1NDUxNTkzMzk5MDVdLCBbMTYyOTY3Mzk5Ni40Mjg2MjUsIDgsIDAuOTkzNzI3MjY2Nzg4NDgyN10sIFsxNjI5Njc0MDAwLjA3MTAxMywgOSwgMC45OTUwNzI3MjI0MzQ5OTc2XSwgWzE2Mjk2NzQwMDMuNTM4MDU1LCAxMCwgMC45OTU0NTQ1NDk3ODk0Mjg3XSwgWzE2Mjk2NzQwMDcuMDcxODI4LCAxMSwgMC45OTczMDkwODg3MDY5NzAyXSwgWzE2Mjk2NzQwMTAuNTMxMTU5LCAxMiwgMC45OTc2MDAwMTg5NzgxMTg5XSwgWzE2Mjk2NzQwMTMuOTU0MTA1LCAxMywgMC45OTU5MjcyNzQyMjcxNDIzXSwgWzE2Mjk2NzQwMTcuNDc1MDczLCAxNCwgMC45OTczOTk5ODU3OTAyNTI3XSwgWzE2Mjk2NzQwMjEuMDIyMDYxLCAxNSwgMC45OTY3NDU0NjcxODU5NzQxXSwgWzE2Mjk2NzQwMjQuNTUzOTc5LCAxNiwgMC45OTczODE4MDYzNzM1OTYyXSwgWzE2Mjk2NzQwMjguMTA4NzQyLCAxNywgMC45OTkyMTgxNjU4NzQ0ODEyXSwgWzE2Mjk2NzQwMzEuNTY3ODQ3LCAxOCwgMC45OTg2OTA5MDMxODY3OTgxXSwgWzE2Mjk2NzQwMzUuMDk0OTQ0LCAxOSwgMC45OTk1NDU0NTQ5Nzg5NDI5XSwgWzE2Mjk2NzQwMzguNTQyMzQ1LCAyMCwgMC45OTk5MjcyODIzMzMzNzRdLCBbMTYyOTY3NDA0Mi4wOTQyMjUsIDIxLCAxLjBdLCBbMTYyOTY3NDA0NS41Njc1NDQsIDIyLCAxLjBdLCBbMTYyOTY3NDA0OS4wMjUwNTEsIDIzLCAxLjBdLCBbMTYyOTY3NDA1Mi42MDExMywgMjQsIDEuMF0sIFsxNjI5Njc0MDU2LjE4MDkzNSwgMjUsIDEuMF1d", + "ok": true, + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "status": 200, + "status_text": "" + }, + "https://localhost:6007/data/plugin/scalars/scalars?run=run_001%2Ftrain&tag=epoch_loss": { + "data": "W1sxNjI5NjczOTY4LjMzODcxOCwgMCwgMC4yMzYzMjk2MzAwMTcyODA1OF0sIFsxNjI5NjczOTcxLjg3ODQ1MSwgMSwgMC4wOTQzOTE5MTIyMjE5MDg1N10sIFsxNjI5NjczOTc1LjMwODc3LCAyLCAwLjA2NzU5OTYyNDM5NTM3MDQ4XSwgWzE2Mjk2NzM5NzguODQ5NTQ0LCAzLCAwLjA0ODE2MzIyNzczNjk0OTkyXSwgWzE2Mjk2NzM5ODIuMzYxNjM3LCA0LCAwLjAzNDI0NjMzNjY2ODcyOTc4XSwgWzE2Mjk2NzM5ODUuODE1MTQzLCA1LCAwLjAzMDI3NzY5MTc4MTUyMDg0NF0sIFsxNjI5NjczOTg5LjI2NDMwNiwgNiwgMC4wMjM3MjM2MjA5MjEzNzMzNjddLCBbMTYyOTY3Mzk5Mi44MjM2OTEsIDcsIDAuMDE5MzM0MzkyNjIyMTEzMjI4XSwgWzE2Mjk2NzM5OTYuNDI3NjU1LCA4LCAwLjAxODQ2NzI4NjYwMTY2MjYzNl0sIFsxNjI5Njc0MDAwLjA2NzI0NCwgOSwgMC4wMTQxMjY1NDM4ODY5NTk1NTNdLCBbMTYyOTY3NDAwMy41MzcyMDUsIDEwLCAwLjAxNDM4MTIyMzM1ODIxMzkwMl0sIFsxNjI5Njc0MDA3LjA3MDU5MiwgMTEsIDAuMDA4MTM2NzkzOTcxMDYxNzA3XSwgWzE2Mjk2NzQwMTAuNTMwMzA0LCAxMiwgMC4wMDc4NDIwNTU1MjE5MDU0MjJdLCBbMTYyOTY3NDAxMy45NTIwNjMsIDEzLCAwLjAxMjkwODQ3NTQ3MzUyMzE0XSwgWzE2Mjk2NzQwMTcuNDcwNjgzLCAxNCwgMC4wMDgyODYwNDMwNzAyNTY3MV0sIFsxNjI5Njc0MDIxLjAxOTAyMywgMTUsIDAuMDA5NTQxNjg0NzYxNjQzNDFdLCBbMTYyOTY3NDAyNC41NTI3OTcsIDE2LCAwLjAwODAxMjAyMDk2MDQ1MDE3Ml0sIFsxNjI5Njc0MDI4LjEwNjA5LCAxNywgMC4wMDI3NDcxNTEwNjkzNDMwOV0sIFsxNjI5Njc0MDMxLjU2NTIzMiwgMTgsIDAuMDA0MjUyNjc1NDU1MDYzNTgxNV0sIFsxNjI5Njc0MDM1LjA5NDAwMywgMTksIDAuMDAxNjQ2NzY3NjAzMjMzNDU2Nl0sIFsxNjI5Njc0MDM4LjU0MTQ1NiwgMjAsIDAuMDAwMzU4NDMzMTcxNjQxMDgxNTddLCBbMTYyOTY3NDA0Mi4wOTI5NDMsIDIxLCAwLjAwMDEwNDQ3Njc3MDUwMjUxNTE0XSwgWzE2Mjk2NzQwNDUuNTY2OTE0LCAyMiwgNS43NzU3Mzg0NjM4NTM0ODZlLTA1XSwgWzE2Mjk2NzQwNDkuMDI0MTM5LCAyMywgNC43MzQ5MzI3MzYwMjc5ODZlLTA1XSwgWzE2Mjk2NzQwNTIuNjAwMjEzLCAyNCwgNC4xMDI5MjY2ODY3NTUzODE1ZS0wNV0sIFsxNjI5Njc0MDU2LjE4MDI2OCwgMjUsIDMuNjUzMDkyNzkwMDQ1Nzc1NWUtMDVdXQ==", + "ok": true, + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "status": 200, + "status_text": "" + }, + "https://localhost:6007/data/plugin/scalars/scalars?run=run_001%2Fvalidation&tag=epoch_loss": { + "data": "W1sxNjI5NjczOTY4LjM0MDMxNiwgMCwgMC4xMDIyMTgwNjkxMzYxNDI3M10sIFsxNjI5NjczOTcxLjg4MDA4NCwgMSwgMC4wOTA2NzA5MDYwMDcyODk4OV0sIFsxNjI5NjczOTc1LjMxMDMwMSwgMiwgMC4wODM5NzEyNTQ1Mjc1Njg4Ml0sIFsxNjI5NjczOTc4Ljg1MTIwNCwgMywgMC4wNjk1NDI1NTcwMDExMTM4OV0sIFsxNjI5NjczOTgyLjM2NDYsIDQsIDAuMDgxMzQ2OTUxNDI1MDc1NTNdLCBbMTYyOTY3Mzk4NS44MTY3MjQsIDUsIDAuMDY5MTg1MDc4MTQ0MDczNDldLCBbMTYyOTY3Mzk4OS4yNjU4NCwgNiwgMC4wODA5OTk3Mzk0NjgwOTc2OV0sIFsxNjI5NjczOTkyLjgyNTYxLCA3LCAwLjA4NjI1NzkxOTY2OTE1MTNdLCBbMTYyOTY3Mzk5Ni40MjkzNSwgOCwgMC4wOTQ5Mzk4NjUxNzE5MDkzM10sIFsxNjI5Njc0MDAwLjA3MjEyMywgOSwgMC4wODQxOTcxNDg2ODA2ODY5NV0sIFsxNjI5Njc0MDAzLjUzODczLCAxMCwgMC4xMDIzNjkzMDg0NzE2Nzk2OV0sIFsxNjI5Njc0MDA3LjA3Mjc2NSwgMTEsIDAuMTI4NDE3OTM4OTQ3Njc3Nl0sIFsxNjI5Njc0MDEwLjUzMTk0MiwgMTIsIDAuMTAwMTc1ODA1Mzg5ODgxMTNdLCBbMTYyOTY3NDAxMy45NTQ3ODEsIDEzLCAwLjA4OTczOTY4MDI5MDIyMjE3XSwgWzE2Mjk2NzQwMTcuNDc1OTc2LCAxNCwgMC4wODEyMTc0MzA1MzE5Nzg2MV0sIFsxNjI5Njc0MDIxLjAyMzU5LCAxNSwgMC4xMDU3NTY4MzQxNDkzNjA2Nl0sIFsxNjI5Njc0MDI0LjU1NDg4MywgMTYsIDAuMDg2NzE3NDY0MDI5Nzg4OTddLCBbMTYyOTY3NDAyOC4xMTA3NDEsIDE3LCAwLjA5OTcyMDQ5Mjk1OTAyMjUyXSwgWzE2Mjk2NzQwMzEuNTY4NTcsIDE4LCAwLjA5ODExODQyNDQxNTU4ODM4XSwgWzE2Mjk2NzQwMzUuMDk1NzM3LCAxOSwgMC4wOTEzMDAzNjA4NTg0NDA0XSwgWzE2Mjk2NzQwMzguNTQzMDcxLCAyMCwgMC4wODU5NzExNzY2MjQyOTgxXSwgWzE2Mjk2NzQwNDIuMDk1MzI2LCAyMSwgMC4wODQ0MzA4NTg0OTI4NTEyNl0sIFsxNjI5Njc0MDQ1LjU2ODE5OCwgMjIsIDAuMDg1NDUwMDMwODYzMjg1MDZdLCBbMTYyOTY3NDA0OS4wMjczNjksIDIzLCAwLjA4NTkxNDc5MDYzMDM0MDU4XSwgWzE2Mjk2NzQwNTIuNjAzMDU5LCAyNCwgMC4wODYzNDkyNzg2ODg0MzA3OV0sIFsxNjI5Njc0MDU2LjE4MTYyMywgMjUsIDAuMDg2ODgxNjA3NzcwOTE5OF1d", + "ok": true, + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "status": 200, + "status_text": "" + }, + "https://localhost:6007/font-roboto/Hgo13k-tfSpn0qi1SFdUfZBw1xU1rKptJj_0jans920.woff2": { + "data": "d09GMgABAAAAACp8AA4AAAAAUwAAACokAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGmQbmUAcg0oGYACGTBEMCu882RYLg14AATYCJAOHNgQgBYJ8ByAbB0Wzon60XsEcRckcrcr+ywTtCAu7vIkKUSLAEkX79qHYsVrOIXiSMp377A39RgODYjP02tCGSQRohCSzPDz5F++ZOzNvvxxoA3ZwF1dQBbkTWP2kVEVi7w/83Hp/Y6PDGnqCKCJlUaKURMVGDUdvMDJHVIg4QBAkokTKpsw6k0LdbmmVFEuwwOtQpqUCDdCJ2b0GBxDpf/9u9j+XQGQGIl+tEq1VOr0S2T2sZ9/yxZFpIOkgKdrXFN+0M4foFz9c20sDSrJUtd8OCK1oKHa27U18eptmu8+6n1sZZrwh1iFPj21mdFClKFNUq/93o939u+KbE5lkB2SZJB2R5cAGsWTqrUM7zIdYBXl6atOlKtOWiEXbpgo81PXj7dWfHuECB1Jm2+HuZL8f70TNAaYHlnBAUZgNm3JkGG03jk1xP/499lO/h8a025fRsa1BIErglKnQ8fHzfnMpUDgA2BYKi5NUIDQ4QIQIgYgWDRErFiJBAkSyZIhU6RBVaqF0ewuBQAEzgDkQoECEQIBppKlg2GIrPTMQ2TfEnwgiB/rjvUHkMOfAGyCCAZD/FKAcur//DWACClAwQAGBpUlB5GIAtizHa0ttKaeKQm2vQ3WjLhTVQKGY0BvBgRIKqVANlwisjyMh0ppQ1Deh+NGEqrmqWJVvR6sBXG61pUbIcN+o7fsN1YWeG1N63ISEowypb1sGWKzY8DpJ3CkSTjtHmhx5511wiQJFylRcoU2HHkPGTJiyYMWGLXuOcuTKV6Bbj3t69ek3YNCQYSNGTZsxa868FVu2PfTIczt27dl34I23EJdyAwMFfBTxUCZghQAEb+JI40oBPPzwTqYFqckPl/DRyMe08rXrBG3owhTmxS1yn3W+YpMv2NPI6flaXgooRLGrJy3cQy/60I8B12qP3ccaHmAdG67NXtvCNh7iEXawiz3s48D1olde4hVeu970wtsMwjaH99Tmno4VDtFZAeNSrlHIXYr5hnI+ssI6gwG6/lZhafUuYcKQGyyyk21O8pl0F5anRKe+hKRJzioM2PG5intH5jlnvABOsOE15+h57j1YUvnOZcECFrGE5QH5YHFhVcVk89DKF64D2tCFORWrpzfpHFxyGfkocG32wha28RCPBmallW9chzZ0YY50bGIL23iIR92j6eBkRZYtblimWt8BdrGHfRwMjMGVcXiQh0IUU5XwBm/wBm/wRsbArPTgGMKouGlGscxMtljtDPousId9HHCk8eGjnchRVvmebT6Bxp77ruYXziqNopPv7ulXENErGQ4s+RyvBEcuYqbr2GmL3GDVUKy+Fj7ZKiznRWelhByWnEOKchUiN+kQOtihuhEG0J8bccBhQuqyeXrnTrum1lzT8jWp2mttvd+rXmrFWQVIfwX5paKwooXeF1k1MKMFSTfeC7JJvONjX+SHa4rSa/WkWSiSb/fh3hfYv4gLkMKyVHDm+2ltX5m8yJ7Zj+T0P384/U+tXkEdC+GzK+QVhIv8inJt93vWy/aEFWd2g4oPFenBdtqonu5m1d3tTZW48eREz/uAHZAvcedZrc/Z2ZBl7ZbD+VW1lVH3UtjKlWmNTW66A2eK6YxQXGCt7o8ih+Tr9u/et9hB7qnKD2j5a5i4Z9KsXOmQ+czviLa92Z982e1vGSa/gQdzLk/G24L+OfYP7itOpkh5++FJX0EunXxrrYAP7qX7eG+L2sz/9h83iBO6mH7laRzKccmdjdbuSS2w9+gvrXKTz/at3rbWE5gza5LxXcakfbfXdMP6xUO5j0tdabfOe5ev7B89BnJbvZQWauCDDYLpIrhE4fmNdpIEBpLkMbtERT9r0CJMGx6mFx9hzMxRFh5nE59gx8F/UmJxOQqdUvxdSrdHznnugHke87CFcr5fBBHkUDiUWBQxhYnL7ZQICTGkZHFOVtIKkBMhL59LsrssCwVFKCpESS7KslGRk4ZYmjLSyvxqzTAFhmqCgSlEM5ORhbxsZGYnD3uZOcghpTDmeEdBeciHcr3VYKHCBoFwKLkY0WMAyuB/3IaMwpg2D7FgGYsVitms2oC1GfPb8giT520GOw6g0Rsxww33kQ83sgCGM3wFS44oZ1gUKQXJiXJelIuZA7EZFpjhhxdOWOFqsKraELpcEJRAw3BEM4cIS9lYZwxiC5jAdGQXC1HSRElvI7JkE8AQbvjghu/I5y6KAIAtKPRAwQxrYDw/guAGOsE7e7/wGsZi+ukydWme9zxdUpnlFWHcdBcNHJ3NTcyqyq1Mrh6ktI2hnrTtVQtpR0P9yp1NdLkOk6PJsGPejIsG6rax+x1B8gGx/3dnPpA8zNPdGS6AQ2nG60cE+fiDkZAZgArFfpACYdfq1hcvVOAKcZBlx1exPgowcdUHjmrjNRnlbeurgqLfPvZhR61kpJob9SfpQOg1EJ7ycT9eWB0N8FQRgGw66oOyZnCnVokV0Y9MCYsG9eo0atLspha32r0VRNb1baECBKJr067DHZ1QEHyOALWRiiQM6Nd1OVBWeGiuLyOEPpR6zFPA6sDmVoettzPUAlWw0jws/AU4YFQcgIPcDGibdDpcqEGDNV9WLeXh2bCAchCGogdsBIeBEDBThEr5t9agCYv2vfcPkSmmMRFb8XDMhxPBHcUdx4nhFHDquONwi8fz7x+YCadSleJzD5m05MCHU8SkNy9OCHd47Mvdl/yWuwRyBEsOg/wh+PTl26TwTf3p/B0RqEKRBXJh7fST5zENEFDpawHrYY+J1v7H63WjdZv64frlx4i1YNGSZSvixFt135oH1m1IkPiD9gknSfbCS6+89kaKt9gAJXsfe3UUa+YWFWOchEZuwb24FYuxL7kb9+EePIgj8RAexwPkCZyKJ/EiHiQv4X68jDfwFN7EWzgNb+N9vIAP8CHOwEf4HK+SL3AWvsSPeJv8hLPxM/7AJ/gTf+Ec/I3/8RWZ4DySwvflZW3R+c6yo7CT6ILyeEJ0UXm8I7q4PN4TXeIczxcWiC51jpcUlhZd7hwvKywvuqp8vJLo2vLxaqLrnOONhU1E15ePtxDdWD4+TnRT+XhxyM2+pcAIboFAYarPf2YX+CGpvIeFOPMLceFeq6w/gTgKoAOPf8ccgYGG2FEPQNWhofLt/UALE/2mIyCoiUWA8u69T4ycPEbW3F4KAyVXBYbCtFbWDIAcu3egbYgijIKBSmtD3rZHg70UQqd9HYL1m5HgXPSvCAYWDOYwKN7mdOwa82gYrBC4l+W7YTuzMlPOrQBlwS/rf4hsqNQT0ZlDuzeZesi9DmVE0YpagF3r3PY2r9MVxxBTw2Hco1tnXKeDMuJAF1gsIMfjOmbAN1QXPTaSPaYCbcTshjElittS+z/nIl4/b9ZtQGSp2g1zHq1K41Qq7QFeCq6YYH7Dc1act4bNyMpcOWb3gdM0dyI+PWsGO50zEbTHmFCU3YtPIP04/5T7OCK1C77qhjQKb+TGUupLBOix9GHsmjPRi4XI1AiCigGn2ZgTpNVfKSstJaBY0ohrqVDeESsYjADmyaEiQtD64s8Ll5k9zYqF67Ram0p57DSqUwp1KYL2qu0iZU4uuafHGZIUzA/Lbp1zH7cp+VncGlW+u15Bul4rudhswtRWUi+ttiILG20q/+z4wOwPqX+o9gZy2NehB66FNVd4NRro0wqm4aTRZO/iiU0XCpl4YpiHYW0aOeEH8nhtpJV6KtIKO8h74pAu7IpgKUkDYKbDl3dUHnW4w08ZXtMxr2jrw0QmQAtrbcEUdRrS9zvQ7u9W6ZKaqpIdPYcBZ0OfG7xnLXsSYjof7vz2Ab8AR+H4rujx0VQdMg3PM+cokxlNDuMJMWHaGNJ0Rfk+kAWTf1009M98UKgRNLn+y5AIhhvD5j7PKyKGSIyXtSqbH9XMK6Gf3cnYdAy85G7oXdgsD4irnbLXImb7v5s3q9X6r1HsSfXtaptuM9pu/wkHteuoCqHP95OsuN1HphiTTkLsaTN5ZnvaiRx4g3gGLpd/Yi4bLbK4pKJVuFnlZkG6Phpl7KRdA6SrPzFppuJzTWST5rbdgy5L0O4MJlaMC7r4dPbKxEIQmEzFlvfnruhciE7XzhrtnkOe0USojrcyvQeZQNpa/Zv9WoyHHeiuGrEKWY4fYbJraxfWRlMprZXocIL5lOaP/8zbtZLTcCxjYnGpWmCj1FRZ86AMand3Su7LE40xRdnVeUGzTA/dVbM8B5hoivq182/t2V/4mirsvY66MUq9uJDrI/g0Ot2gespzFY0XL7+SKcKExsowxTf6JqTl++Ic0Ok5PDvF4IxCK2qjkxpNDy4QtjMvMMYELnsoDMhe7AriwA4ekL0R21UGh9R70/+ZdCbZ1t6gs4yyUwCzDGFZ5XJqmDs5Asx0Le2pVHLjxclmg04GIdxQGUMnwdL8LFIBDsWoW3ktMIWwVhnP+4K6agDowkRGVZn8jsqOCBlqoKCYlTjJz3k1eODW10lDTcflpoMhxO4l6MrkQSRsdNbMPBo9bNEwPrOSdY6ezTs+lrZGmnpQY/ZZIC1DyjNjOjqHlpZRyyXNd+ZVEMoleF5+i9Vxwi1foWkjhI8lwzFbKbqEPY7idhBST44a75IK9XCsd7mzTsbOuNSwXvCSXSlRLY8tArQFhNT7n+U5KKjGuluuQ/ZkOccGNfHQysY5LL3hutJgXHpyhEP9zmOPaK8fLdSYhEwHuoLbogcvj2XudCGKXCynsEsLUlkBrOEYmQbLUW7gl0tzpqoAJgS55SycCwUTUxqeEosN32jpJNHJUg2MzYX0hse5st1NKhhUchjvkL7ApR6ioKFOEgMPwm+dk9rkGla1ajkHb8jlUGaeBBsW2Fa5mFEZBnTqgQtLmC7kHZzRoEH1BjoU9TWd+cyswCZCXQRO208HPaFk9UL5zFUf0zWnCrbDpCGR0swhjHlHWprAOZSksdvo51vt71uyWcnolYB0FTuT4fm1F49PRbA8XrgjlScpL4Dn6vndtJm/jkn9X3OR9fsWNuK+x+ekfHmC589NrdoMGrktOpNFk43qvZRnTTvP9zS2aOEm+3h2ZsKu+5T0mOZsb6mU3pKWWl+4/ZrZZUSXvhLoOI2i2WqKfS8O03WdTT28eU2AjhSHxLw7ypQ8PhCW7+SNpPBTCiTHkBmJMgTXOHeHc2FjD9q7na2WxKWa8Yk5HqujY3lyNItQQxKQzSTMW/NlNYgmwItXI2cuqmaGAFtJSeOyXAt5YPMsU9Eetk5dMQhV/eq78AM7ohXTU/AS/9O9Ep7WG1s17oShrQgNnEst9OGam5O8LGUOojRXOb4aQJp7GJGWL1zgQG0qFYlu8B/F+tnM4XtFrz77kQUzRT2Gp1WeOBsxdrozEryYyTMRuze2TcCmETjB3TJ1cNQ4ZAHzQNvuRQW2dEdzQHo8r3I9gflbwYhaMyM40VkBtURhRp+mw9yUSsks19NaH/TC330nLVdxRVYWp6q6aogZW5i+zlWTuif/GE/EmPgYjnB8YtJsmytjbBqKvxfd5k1nKkAixEIK1bB3blMaczMgwHpHM/7FTMexvWR5QTEuhYW6evbeSbd+IbboMFVAe8GynImOj5qeA5mvhjd1cSnRSK4BKtKxE8/7KgECClcH07ranaNROF2Zd7NSPN5om6XkLAC2mn5Ot6bcI4SnGLiiE47zBL6mXXjfr2k0cgwVFv7qId4RM2TCrd18jzs8y3QmtDm5arXv2itPt0lvtIeMAYY+hsbbAYaRO0Yj+D0reacKjdgnIfZoOJRLArdDYUx1XscH9BaOi87p9QHn+UDeS0aoMefXqVE0RreFD0UKekWu387+2XdNugWdJAwqXElQFNyie07f59F/9r2FWrftb4ohoAjbX4fupIy0TpVnmp0jJTWTMzfZZwgztzmHDibJZdXd6bTy3DBKVoJDcDnRINejdm6qnX0A3z/Ftv18nFLaSa+htRcA9n5hTGXzj8rmJK2o8uYwak1DihPWnkC2NHejOGnbu1PMTD3IbuKjZ2Mqm75VN6ZoPdQlOTI4bBAsunbRdiIEWpi5B7l+P9A5JxnoX76sQVhNxMLDoNa4qLOtKPVmZVhmXUoFNWPZJvse6Udk88RBZniWgf6CZcDS5/vtXmF9pUFNA7bNemqa+euPV0Yr8mM7ytF8kqEJdTGuf4x9dAy8PWxcAsKB42QAl7QNg3g+AVJ1t0jF62ZU7cNGV6WiO/DfVeTHlh2i68RcVWd6EbrrJsR8QJQe3mrXjKP00YWzRv1Jx4S9RceoRilH9RgI17P+jSaVgEDOC13vY266oWg/D8ZAtQicm57/45NmKmvSs1JmShC00+vb+zzkebtv+0oIxHBqytmEoGJKgsKXgNPwCf4JZGqdGDJa0nxoNAcpYT5i2LNEuOLvKP9M5eHG3iXUaYzcjuL2xo40+hQZ87P6X111zf/I56P/NzJWVdYi8AO6KIDBpWb7vr/LB8KZdp/OU2mOPVYpVZW0nDu9+WTqjek5/9ipp8udhIiPFXfyZv6AsJxwmHvRdaMI07Systy09tpEip/fvWk8dWJnvc8zjh5wJvFkandU7+eduZgN9+B7YZTU4dbCkpbygux7RV0UuBC9toPf8aX43lI/feJ3rMSJbRFVeVvYfKk5vkHyk30daFg2/vJftb/zZ3Hg9SrXQABXbkNhRmn5+N3Ktuli8/DTGsog39nryYE5I8vJpWjSYxMw9JzpAc1zZzwichkj9YGS6Nqiid7C+48l4NwJAyPvS9NaHjW1tCyCap232J53uFidjhKhH1TkL/vFtntLhJ8uGIzo/bO1vPp7sy8sazjitLdEZLtf54u1qFfrmBPeScOtUoM3BXpqK0p6a1CuGuEt9QlJjZWxUY0lyYnNpXDxWvUV+34CKaw/0v1ZQuaN1xMxMdufZUWIKYap1gLgfpoBzXnMYoQyQBP303jc/aWM1rnb2tD6GBZpd89EyLVRneXaQiNAOUD5mtc1jHQG8rI5E1JU+eVQZ1rz1DAg5yBBihnjI5eMjjqphMfRyJTsJCSQjNRsjjW2TEy1EJ37ksJ9HToT9I+3iot59LeAmHgL+FQjDNnOP1sS/J1D8Ly23sMDackfuec4qoP/DtB89ANO66nKXmYOMIi0pBZ+YJrnybUudFw1WRmNFvxeGqE0v23Xdqb9qGH8rKzHT/en7fWsIqz8D1siX33951w2Fakb/8NDa6JOj+VfSfQ1aVtSNV33AihVFeblFUQfD6IH4bUSJe2CXOdRE4ZuwNBbX30c6vMLrfc6EXGoeDhy+MfGY+9eM7/y7sqMRHppaSjBqAjVmBKf1hrXJge6HyeE9gQ+v6j+UZV4Cgb6RxLP/K2uf8Xxm/9x2Fl//MQrcUz7790zo8Oj3QLdvF+1BR2HqsvPjSSMlp09WnOP+7zWE759fmmGqF/cZ58AKI/cazLh9EgBDD3ek+VkEyhXNzY0UgFDT/BkvdAA+tK3rthw4ZtuMtdknYHh7nMyDqhn3LvCU1SRioXahrm3okwt9b5/V1KTK/xktHGKlEQPFLwPu6d6jz2fSlOlhYHB87MEuU562L8f3n2dvr/zaJJaXldekNp6FymDfytz08xfP2NuqRruEudECd5T+SDnvuihCxh6GPB30kXzMKKdmNrV0kOZk0X3GBxFx/610giGeeALVd7s8eMwui0l7/bkSSgYjCRPp5xDapr+XSZeyJ9Mk0VqjaAqVRw1EsrJ+FZicfbDabZC9HupheWXp1lB1siYx1r/sIM9mJ3//fiDn3tQR29TYcG99ptIOBjEJC9lyycaMO2b6Z4CYwHzelRNuiSM1fAcuaEZqUmTmQqFsqUZ4V3l0muJ1Lp9g4M8u//mS8yz2bSateRT3l7ssdL+kyElvbfTikeb2mzhCkIIaUobjXDXyfFsaeBZepC1SwqfpIblzd5paRjPpZDaUhO9pv3xFT4tPIvPisEnbjyKWrzXNtg8nwfaGlqfAaNFldX6ydMJdM7Tn0N25OaLwIJ9vp8Mj16HbnYvz3gszXZtwY2OCNrh2t+Jonv0YHpFJ8BYkuSzC+u8YzIk3jiZ85vndrgCxSMEzenBfLUB/2WcyOD/LyBYUIMeAeJy14vcc57Nf3iW20BtomZ/fPZ8Pgdc8g6titBwO2n/Uf/DraZlwzv3WA8h+wsMrzQ9H1vB0QciK4B9s0LQAcZuHUBj6EFi2LNBANgoXRXTJayuyNy1iDnPzqXA0w9sJB4EwkUc3i/+3odDbi98nglmghYPg6uK8YiVT+nQrfhy7N3Xm9RAWlxyeE2kDRmi3/fd7ly6g6qCMpw+23dzSl/Aaad3D9qR6QiSbQIZVGV5/jw51f88oIEhxxewQHb1oz8devwfhox6UPeiIKDC9xTxhfXsbm79SzhjFN6YhiUFMLj4VffZEtd+iP/8r5L0dSk+rX1/lbElgDGiviSyuv3l6onF9gPwFvv99PTwtn+LIxmw4MuQ4V/zpHdXEijYxbp3BY/sRn7brWwXNLwBFd6Ux4nUTwVnSin/r9MixvfZXqoxCHavfKl0ytZQ1NO5FDvAzfs7sXuctz6ZnaGkYRQ+bXS4dMTWN7YVqFcyuR5SdPUJ9UtAuaA2wFvs79NTw4/8b2NKfP9bfvl5ym/OTcH0mlZEye38BjqqNMm/4mHfzpl/kT2AeWzHv0u4lxFJ62fELRer4HTX06e1aRRGJ8iTkElJjyc1p5wK2iNrJReOUxQoaZeSna2nPq/XD9z3FXrzM8rSLhxHXPqk2ud7FJPFB9T7xcVuqbdCKS4ptowCWKCs+4aU5RfMTH7yy4DjHzYJcOUqoG8rOnc43wD15ctuw8QgOyx1hTINmaGpqVFIWzVz4BxlBVKikhL8qqLEIvYpCvuF3TvZreTa6XFDtoeqANaSpZT/H6akbbBK/RQuo/zcTkxfZ+vbkplGpn7UVMs9zQmG2c7X+XpXTv+cBdXjI76u+h4HlZwiA2aLhCkMbHk88vAkhoxebHpfeKPMU8KN8bRdhbNPQeMHPLNHt/3qMdm+O/MoYkFF6wP4/WJZaXyXv+54j0fSqdzDs6DpHUig71uc8S0OwwUfkBWCkJsOgyuycyB7ldea5n1MqdxAz884aq2+oXOrPZPiWB4eEkzzMDMOtlLQLjXVDTJLfljT3v+qK42C9agOTAgv8gF+vCH/U5enyzaqlnpHrzEzOD81ppJoqSuTLpP8cF412bv07a2OKWRsiNx2/ieD+gNOikIgvKnly8mjCqsrOAu7KVCh/Ae3naAzl5oSgYv3/CE/AQ/2HZUw3jsKBG5Xm5lZbl5rAm+tAhXex5zoot3giRBLl5v+RNPDxYZdPB0+3eQdpUUf3v1Ethq7d4YdXNasiBYnPeWzhONkYuGV2yDe1EoCTQ1z57WGsJwGmaZnvY8YDzwOMHvQ1fCsUVbY4LP+5bVvd6/f1fu4iz7xyQgE2PGAHcADk1pogz7x9M+QGnfza03ps66wQbNs/e69J5ijW5nxUW/TswYZMHD5nVc/GH097EJnpeUpWWuXIF9vyKvqS9CJU7Y1vqbiKHvRyj3cB261kSBQOIwpD3+8X2/eMr+a1I2ojSlMfgGMKXOjOZy7lL1ugdUjL/97vHK8R+AhZbuYc3IZU+Ktf1hz4pj4kFtXrV967Hm4SArb82ojxkz8fR7dTKJTD9/0dK2stFET83Kiw3PoJUyiVh6gSY/X15o08nteW1BcZmZeXklt2N6Ja25oNrOob6pNbalNb2oxt2xujW56uh7SWF1jbqEaQ02Jev8sJSr6SWrku5TUmHePEuFJYsw74Ngi3k+hvbtsTZgjWBHUqeouVi5zLtaX09+lQjk7moKeonyjgMbH226hKUSczTmn1Bu1vwY3fYYuql2K95sjI6ULrW2VvSl++ur2FfrOjrcIVjS8W2CaJ85cyjaVWIWMrD398Wyekj3YVVXXkxRgqGxfoFsuOSrbR7BML3znzRYUYG2q6VipO3PR9hCJLdbfwiU+qOUiMOUF/rxpndfr7zz2/IMEmjyOhTVVkl2rnTatd++frqssdH264RVZlW6bEF5N9CJ6Bss9DaVXy53saGwQbauX7Wivkz5Ob7h5srPinNmtmXvWOhNR2hP3rGfGOyx1libGdRY6LSFp6JWJhXdiUGyg2436kOpUZXNDe2MbguZ1LwyhLiYhLIuWoGgnbKFvdN5f8XVj9H52BChEx1AO3/GSBPwGxxIdcbIztJBS/v/EbKKjXu443eAEvVa+nV517njHzcbj9DrphQ/WLlqonLLQ8Pi0K1rCF4mFjGoJXITVbGsdbZtem05jD1MNc4vrnkgrnNO44u3sDeJuMx7p6W74DNpCVvYELTuNoGZlGWduqaZhbn3tqrU1iPEqJxISu0hd5YTyLpLAf5/V8GpQXKioe+Wyp4/2FSM9Q0t7K21PYln673QqAR8UQni21AVcd0wtjBAHLSUVc21jPUdtBU+nUio5KotMuKRrryFYJZFDKKPGRFdHuHupeBiZWdrpXqMtaANvF2TtC3oCd65C2J3w7uS4Iv/DASiKgg+2yPnWWrdFGDMZMFvQxETMfxQQdD91jfnv7lPA0KF67sSg0RPNx0YD8G2wli/frsw7Catv7at6UcHijBXj4QhYLPQqONCwUfPiAKZAYhF9IDuHPlDuUHS7Pzunra/Cm8HfN97D1T+W4hgQEDflnxgEYq1IqExQb6+PkUdsdHxqFDk9FQmkIHXLYzfbZyZvkTynaQlmmlgiop5oYD5r0O8DyHDFme3FZV/kpzsRugRw+gRtYfsBc5ksdpScMti144kW9gaG5vZ7OcqT2zAwwHu7eSdsy7wX5+RW4ZG00XnXLCfBeuSNT3NSvRrdc9/Ed4DQFdVyTEiheOyr4JjBHG6ZFzOxq4bpYp8feZkWpXJ/aXm+0qU1Mlbxvn3Uns9PV9Am6hTA0Mm5/uplg81CXc35aOCkuE8NbDQXDTSmKIg4akYJGUtfMnEfSLdKMsxe7ag16zwXKeqmVySnFpoT6aJs6dsVb5ug7xT+xMw+PNj2O1oGDLn4UieIik6KzjveqU09jZllD9vnUBxWcRE5ETF10Z7BbJkvOrrC6V7inoqufb6BY08/IBteX49MDz5v6UkJkrLIjFXNdLO9Z7soCck3Q5g80M4xpEsnCuM6RnkaqMeKK9tBtlPw7f+YghsVpL/TaRExq6HU50l779gn3Vr0FK5J/GxoeJoie30+Mslz/poY4aNWfeowRfY62pVfSMzkliOpqn25x926vdwNn976YxWuPY/bD9xX0TIQ/vOx+ZFRP1jNr3uEv+s5/QoH11l7LfeXOaKlIb+2E9OItqcMKh1cZlw1fd4Wkm9o9qsrCZmK6Jy2rZr+OfuAxf1q5zshOQE1UYuqqR9zoOq/9Dr7Hy1IAcZKil1g08N8y3s5CLOEdZmL7zPEURQo4JsJen18oaWfcxLZkCaFlnjur3ml8R28Wj9B9hyPJhPO69JC8QHsn4LY4wefMMLT8zvP2MBesozyaysxhbadohynGL6WFTG+92Pb6feRnvFPxSv+wXLGcclfkh5lXKYqRW8lp68z5QqbaXz8a3Xl2NdFwdGJ76rj3xe0n03E3J3mKY86mt3QDZJ3vrCQGrrqu3zY3/7VA0bzACNfHyNDP4n6eNf7XU/PQPbqVVkZNVW58xpXz8lcUwPpznkn30ATvUyfy+feXrJG2RHJFtJqoj3DElKqVy8Bxz6Plqx1ECoxiuxrp9METGa6mnLWFFRcbDB+GUj7ozlNbjAGQxEZvxSE951YhaKSa8gxm/ZRcQDLEFRKDWV1QdZ7Q7yrqQneCdE7ZYx3NDXDOxvDwWneWE+xUF6xUE9g66CLRUbNa57DmwyJFO1fdgTtPVOOR66G+9HGx4kgvCizV8AR//8Pn0RhDg1ZD9UO2QxxHDnzv2vcUWYi6bjPxIM3uzU2NbU1oBLTqkZQg92NOy53SLd6B24mpCvwEkLkI74jPn9c/myoT9VCckG0nCMu7qSc1KAkq++PFKi52VIc9kMJMBvk/NU2z627MPmw72jvvy5/N8gb8xvJF56Uw+VH7+qbt4rCayiA6TOBdkF3uyhQEnz9S5Gu62SNxpzGuNi8BqQyszr7dkKifBav9WANtAq1on/LDbAOt7r9P7D0ROr/XlzgibSK7PXszUBfTRMkJSOiUc8gMk06ccGWfGTn6kmHsKykoNBMWmJAUSjW1QOr7nhN43aHvqO9jemxdhD9fMRaWZBfxyY2MIVGDswrCouvqElRXXm4O4GK97rsoSAl7UDwMdV1JBga2ztA9vqNdZJP7561OYRpKGvZTmoIm7mou5eRY+PLyO7qpq6aQlNaNspumUGh1Kxg08Ur7gbVeH1VdcL1WjddviYFW93ruuY6ikrWmto6ltrAb6lpFR2Unh1MKa8ITcyuQ7I0V1bWZoAfzHnFkTpE1UHJUM7L2dNY3+lGpYMbPGjrJHQW/YkwHI4ur835+mEdld4u8gCr4fkBjPDkh1pCvMFeCotLs1Qy+226pKjn24lUOg+KlxZjYHX1+TUKeellRQATRk0xDG5Er1gb9mVr37qKlJV6V1OVB8+g0bkooqnybdB7XjXYWmUGgwMOUO1VyingyvEbQModoD7XT5BWWCisnii3SR2uFx9cTSCuRQOuIU2kmdwkLeRWSetBgQXuxGpOimlVLwJF8Y17UBl0p1non2nuqJ/Wq9mVUfSLqkPcFVKe53eHRKu6f8hVcA8qje40d4mX46y7eta7BzFwp6UD8TJlZSwrOEtONUmraBE5+wfiTvOvf6Y/iJHl1WxdFpBUKYqEgf0A3Gm+ES9LmUqqKudNDXKQdUA07FHEnSajf6Z0zDavZoazxAEYouWwJNrSDCDa9gDiThNDvKxUSFL7As0GQStXDOVzyUWIl2kCB0nG1MO0wSIABnYKuNEkemCPZ7G8mi1rAY5lYm0PBXeaZMvrjWVP5VeBlQy8tgGgqpfacIJ9V4L8f3KeiS+5K/ajSLaLlCYfjmjsjiq3qtYyAaqrWqXTwNBP7K3ccAOCO/+m96iI1pZc+USQs3etLtfmHLIDD/WmG6xYgLvyRwtQSjGKoqu3soz0SOndUxRKtxD1QsApXdA7qVjIgaGMgbvpRlZEfVoyYRRc0ekoaB+PFM+IDBEkUMxP7ES9DfYx3bi8zUZXgVzMxgI7KLuBWou2NDvzr7bmmpgHCEbzbv02EhSeb/bNSIsQZXJCYoPqydWMFIlMZwBLgnbP6Dw3XMFMDgAV/Rt5aI1DsQscJup1rhmwoctZGwAq+rdi4/kclLX7FxUk/OjM1Ucy6a+yD8QSvUcpqM/1bdorWNwAQEUwINuV4wqPZmYGqOjfxhyHm+hW+gAet+kRIFaeV/y1GD+UfmcSngKAxy63FACvH5NPf+L+rDGLTAkApkIBFDA6bMIGMHXDFfGvBiva1UN9P2ncTCu/bDfnC4pCT0ZrYN5IAvpLPu0NYrFDjnRpUUK04h1pcXRLEqXQIVNeyqpnHd2rU4B2eMIFamhEDPThVQxfWkWWDEpNUD99H3ntpLBazWxkwK/9g+Xbge4uK7Yr627p0KOmR1Jk9aYiIWp13Wl1Nku4GBjesLO3ZryEt7cPqzek8+ls/azaJPl+TXV779hIknLbc7HNEGrTbMprNVWcNK0uqDvTr4GQ0ObetLk1kpJ2jEPzR2zH2US9K813WLab0jIrr6xm4bw+G7B5JCi/4esblQ1LOhgx2qbZ7ICPbIJ294V1k9jABFfqLuk6D9eMbBm11MuY9jRzD5U1rO60Zovcstn3aT4NR6j0qWjrCNVP8oDnXVOU1TrUZi9s8LIEr6IVCxlNmVns0pOHpxWqwlqg6jrPtHxXUz5xwbOPqMUSa6WAPidgYAO34YLg2sJqpI27SbPHbnMPuNvoCoYx5q1BXktzvQWybhEqypTGUQjiyI1D9VUZVEGVyqtfUDFICi9ELtydSnEmEW5cw5N6GA/F8mV3UfXhjIjn4lzzqcQuxUZi2jLVNT3SzdaVoeLsoNihhwhYQguKIMIJKjB06cYuSyiCCCeowNDQtWFqk6luS9SWOiyobTG78hIGOjuEGWf+9R3YVGGY5Jpqak/MZjoi1Iao/bQjB5apfE7xDOYqfH22UxgmwSukdrNd4CDADzIIsIaBAMwCAXUMLASYggANacwA9gAvfRFCHPqicAi2o5vsDNAXQ0ycjgVpfroczIxQQ+IrhD9P7jwEwpElTebjwtFCkiER4QfWdoMrKf2qAtFvwsAD3rxQvAB4/oLhuZFigsQFSSASHD1KRpXtLgiRM2Dh8hfAk9/oG1Ktci5SlOS0F8WMdZZtswP5UnAuOshpKc58obuujIwnhcSf+7xEnlzh3ZDRw/d+jh5tajQYMKXhbL8+6azgxtKLmxoAAA==", + "ok": true, + "headers": [ + [ + "content-type", + "font/woff2" + ] + ], + "status": 200, + "status_text": "" + } + }, + "base_uri": "https://localhost:8080/", + "height": 822 + } + }, + "source": [ + "%tensorboard --logdir=./my_mnist_logs --port=6007" + ], + "execution_count": 129, + "outputs": [ + { + "output_type": "display_data", + "data": { + "application/javascript": [ + "\n", + " (async () => {\n", + " const url = new URL(await google.colab.kernel.proxyPort(6007, {'cache': true}));\n", + " url.searchParams.set('tensorboardColab', 'true');\n", + " const iframe = document.createElement('iframe');\n", + " iframe.src = url;\n", + " iframe.setAttribute('width', '100%');\n", + " iframe.setAttribute('height', '800');\n", + " iframe.setAttribute('frameborder', 0);\n", + " document.body.appendChild(iframe);\n", + " })();\n", + " " + ], + "text/plain": [ + "" + ] + }, + "metadata": {} + } + ] } - ], - "source": [ - "model = keras.models.load_model(\"my_mnist_model.h5\") # rollback to best model\n", - "model.evaluate(X_test, y_test)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "98% 정확도를 얻었습니다. 마지막으로 텐서보드를 사용해 학습 곡선을 살펴보겠습니다:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "scrolled": true - }, - "outputs": [], - "source": [ - "%tensorboard --logdir=./my_mnist_logs --port=6006" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "TensorFlow 2.4 on Python 3.8 & CUDA 11.1", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.8.7" - }, - "nav_menu": { - "height": "264px", - "width": "369px" - }, - "toc": { - "navigate_menu": true, - "number_sections": true, - "sideBar": true, - "threshold": 6, - "toc_cell": false, - "toc_section_display": "block", - "toc_window_display": false - } - }, - "nbformat": 4, - "nbformat_minor": 1 -} + ] +} \ No newline at end of file